ZGlmZiAtLWdpdCBhL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuYXV0b21hdGljZXhwZXJpbWVudC8uY2xhc3NwYXRoIGIvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5hdXRvbWF0aWNleHBlcmltZW50Ly5jbGFzc3BhdGgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzA0ZTg2MQotLS0gL2Rldi9udWxsCisrKyBiL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuYXV0b21hdGljZXhwZXJpbWVudC8uY2xhc3NwYXRoCkBAIC0wLDAgKzEsNyBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxjbGFzc3BhdGg+CisJPGNsYXNzcGF0aGVudHJ5IGtpbmQ9InNyYyIgcGF0aD0ic3JjIi8+CisJPGNsYXNzcGF0aGVudHJ5IGtpbmQ9ImNvbiIgcGF0aD0ib3JnLmVjbGlwc2UuamR0LmxhdW5jaGluZy5KUkVfQ09OVEFJTkVSL29yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC5kZWJ1Zy51aS5sYXVuY2hlci5TdGFuZGFyZFZNVHlwZS9KMlNFLTEuNSIvPgorCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJjb24iIHBhdGg9Im9yZy5lY2xpcHNlLnBkZS5jb3JlLnJlcXVpcmVkUGx1Z2lucyIvPgorCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJvdXRwdXQiIHBhdGg9ImJpbiIvPgorPC9jbGFzc3BhdGg+CmRpZmYgLS1naXQgYS9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQvLnByb2plY3QgYi9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQvLnByb2plY3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzFhMjFmNAotLS0gL2Rldi9udWxsCisrKyBiL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuYXV0b21hdGljZXhwZXJpbWVudC8ucHJvamVjdApAQCAtMCwwICsxLDI4IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/Pg0KKzxwcm9qZWN0RGVzY3JpcHRpb24+DQorCTxuYW1lPm9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuYXV0b21hdGljZXhwZXJpbWVudDwvbmFtZT4NCisJPGNvbW1lbnQ+PC9jb21tZW50Pg0KKwk8cHJvamVjdHM+DQorCTwvcHJvamVjdHM+DQorCTxidWlsZFNwZWM+DQorCQk8YnVpbGRDb21tYW5kPg0KKwkJCTxuYW1lPm9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFidWlsZGVyPC9uYW1lPg0KKwkJCTxhcmd1bWVudHM+DQorCQkJPC9hcmd1bWVudHM+DQorCQk8L2J1aWxkQ29tbWFuZD4NCisJCTxidWlsZENvbW1hbmQ+DQorCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLk1hbmlmZXN0QnVpbGRlcjwvbmFtZT4NCisJCQk8YXJndW1lbnRzPg0KKwkJCTwvYXJndW1lbnRzPg0KKwkJPC9idWlsZENvbW1hbmQ+DQorCQk8YnVpbGRDb21tYW5kPg0KKwkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5TY2hlbWFCdWlsZGVyPC9uYW1lPg0KKwkJCTxhcmd1bWVudHM+DQorCQkJPC9hcmd1bWVudHM+DQorCQk8L2J1aWxkQ29tbWFuZD4NCisJPC9idWlsZFNwZWM+DQorCTxuYXR1cmVzPg0KKwkJPG5hdHVyZT5vcmcuZWNsaXBzZS5wZGUuUGx1Z2luTmF0dXJlPC9uYXR1cmU+DQorCQk8bmF0dXJlPm9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFuYXR1cmU8L25hdHVyZT4NCisJPC9uYXR1cmVzPg0KKzwvcHJvamVjdERlc2NyaXB0aW9uPg0KZGlmZiAtLWdpdCBhL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuYXV0b21hdGljZXhwZXJpbWVudC9NRVRBLUlORi9NQU5JRkVTVC5NRiBiL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuYXV0b21hdGljZXhwZXJpbWVudC9NRVRBLUlORi9NQU5JRkVTVC5NRgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZDZjMDUwCi0tLSAvZGV2L251bGwKKysrIGIvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5hdXRvbWF0aWNleHBlcmltZW50L01FVEEtSU5GL01BTklGRVNULk1GCkBAIC0wLDAgKzEsMjUgQEAKK01hbmlmZXN0LVZlcnNpb246IDEuMAorQnVuZGxlLU1hbmlmZXN0VmVyc2lvbjogMgorQnVuZGxlLU5hbWU6ICVwbHVnaW5OYW1lCitCdW5kbGUtU3ltYm9saWNOYW1lOiBvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQ7c2luZ2xldG9uOj10cnVlCitCdW5kbGUtVmVyc2lvbjogMS4yLjEKK0J1bmRsZS1BY3RpdmF0b3I6IG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuYXV0b21hdGljZXhwZXJpbWVudC5BY3RpdmF0b3IKK0J1bmRsZS1WZW5kb3I6ICVwcm92aWRlck5hbWUKK0J1bmRsZS1Mb2NhbGl6YXRpb246IHBsdWdpbgorUmVxdWlyZS1CdW5kbGU6IG9yZy5lY2xpcHNlLnVpLAorIG9yZy5lY2xpcHNlLmNvcmUucnVudGltZSwKKyBvcmcuZWNsaXBzZS5lbWYuZWNvcmUsCisgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLAorIG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMsCisgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLAorIG9yZy5lY2xpcHNlLnN0ZW0udXRpbC5sb2dnZXJzLAorIG9yZy5lY2xpcHNlLnN0ZW0udWksCisgb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcywKKyBvcmcuZWNsaXBzZS51aS5uYXZpZ2F0b3IucmVzb3VyY2VzCitCdW5kbGUtQWN0aXZhdGlvblBvbGljeTogbGF6eQorQnVuZGxlLVJlcXVpcmVkRXhlY3V0aW9uRW52aXJvbm1lbnQ6IEoyU0UtMS41CitCdW5kbGUtQ2xhc3NQYXRoOiAuCitJbXBvcnQtUGFja2FnZTogb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnByb3ZpZGVyCitFeHBvcnQtUGFja2FnZTogb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5hdXRvbWF0aWNleHBlcmltZW50LAorIG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuYXV0b21hdGljZXhwZXJpbWVudCwKKyBvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQudmlld3MKZGlmZiAtLWdpdCBhL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuYXV0b21hdGljZXhwZXJpbWVudC9idWlsZC5wcm9wZXJ0aWVzIGIvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5hdXRvbWF0aWNleHBlcmltZW50L2J1aWxkLnByb3BlcnRpZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjI2ODRjNQotLS0gL2Rldi9udWxsCisrKyBiL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuYXV0b21hdGljZXhwZXJpbWVudC9idWlsZC5wcm9wZXJ0aWVzCkBAIC0wLDAgKzEsMTIgQEAKK3NvdXJjZS4uID0gc3JjLw0KK291dHB1dC4uID0gYmluLw0KK2Jpbi5pbmNsdWRlcyA9IE1FVEEtSU5GLyxcDQorICAgICAgICAgICAgICAgLixcDQorICAgICAgICAgICAgICAgcGx1Z2luLnhtbCxcDQorICAgICAgICAgICAgICAgcGx1Z2luLnByb3BlcnRpZXMsXA0KKyAgICAgICAgICAgICAgIGljb25zLyxcDQorICAgICAgICAgICAgICAgZXBsLXYxMC5odG1sLFwNCisgICAgICAgICAgICAgICBub3RpY2UuaHRtbCxcDQorICAgICAgICAgICAgICAgcGx1Z2luX3poLnByb3BlcnRpZXMsXA0KKyAgICAgICAgICAgICAgIHBsdWdpbl9rci5wcm9wZXJ0aWVzLFwNCisgICAgICAgICAgICAgICBwbHVnaW5fZGUucHJvcGVydGllcw0KZGlmZiAtLWdpdCBhL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuYXV0b21hdGljZXhwZXJpbWVudC9lcGwtdjEwLmh0bWwgYi9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQvZXBsLXYxMC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVkNGIxOTYKLS0tIC9kZXYvbnVsbAorKysgYi9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQvZXBsLXYxMC5odG1sCkBAIC0wLDAgKzEsMzI4IEBACis8aHRtbCB4bWxuczpvPSJ1cm46c2NoZW1hcy1taWNyb3NvZnQtY29tOm9mZmljZTpvZmZpY2UiCit4bWxuczp3PSJ1cm46c2NoZW1hcy1taWNyb3NvZnQtY29tOm9mZmljZTp3b3JkIgoreG1sbnM9Imh0dHA6Ly93d3cudzMub3JnL1RSL1JFQy1odG1sNDAiPgorCis8aGVhZD4KKzxtZXRhIGh0dHAtZXF1aXY9Q29udGVudC1UeXBlIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD13aW5kb3dzLTEyNTIiPgorPG1ldGEgbmFtZT1Qcm9nSWQgY29udGVudD1Xb3JkLkRvY3VtZW50PgorPG1ldGEgbmFtZT1HZW5lcmF0b3IgY29udGVudD0iTWljcm9zb2Z0IFdvcmQgOSI+Cis8bWV0YSBuYW1lPU9yaWdpbmF0b3IgY29udGVudD0iTWljcm9zb2Z0IFdvcmQgOSI+Cis8bGluayByZWw9RmlsZS1MaXN0CitocmVmPSIuL0VjbGlwc2UlMjBFUEwlMjAyMDAzXzExXzEwJTIwRmluYWxfZmlsZXMvZmlsZWxpc3QueG1sIj4KKzx0aXRsZT5FY2xpcHNlIFB1YmxpYyBMaWNlbnNlIC0gVmVyc2lvbiAxLjA8L3RpdGxlPgorPCEtLVtpZiBndGUgbXNvIDldPjx4bWw+CisgPG86RG9jdW1lbnRQcm9wZXJ0aWVzPgorICA8bzpSZXZpc2lvbj4yPC9vOlJldmlzaW9uPgorICA8bzpUb3RhbFRpbWU+MzwvbzpUb3RhbFRpbWU+CisgIDxvOkNyZWF0ZWQ+MjAwNC0wMy0wNVQyMzowMzowMFo8L286Q3JlYXRlZD4KKyAgPG86TGFzdFNhdmVkPjIwMDQtMDMtMDVUMjM6MDM6MDBaPC9vOkxhc3RTYXZlZD4KKyAgPG86UGFnZXM+NDwvbzpQYWdlcz4KKyAgPG86V29yZHM+MTYyNjwvbzpXb3Jkcz4KKyAgPG86Q2hhcmFjdGVycz45MjcwPC9vOkNoYXJhY3RlcnM+CisgICA8bzpMaW5lcz43NzwvbzpMaW5lcz4KKyAgPG86UGFyYWdyYXBocz4xODwvbzpQYXJhZ3JhcGhzPgorICA8bzpDaGFyYWN0ZXJzV2l0aFNwYWNlcz4xMTM4NDwvbzpDaGFyYWN0ZXJzV2l0aFNwYWNlcz4KKyAgPG86VmVyc2lvbj45LjQ0MDI8L286VmVyc2lvbj4KKyA8L286RG9jdW1lbnRQcm9wZXJ0aWVzPgorPC94bWw+PCFbZW5kaWZdLS0+PCEtLVtpZiBndGUgbXNvIDldPjx4bWw+CisgPHc6V29yZERvY3VtZW50PgorICA8dzpUcmFja1JldmlzaW9ucy8+CisgPC93OldvcmREb2N1bWVudD4KKzwveG1sPjwhW2VuZGlmXS0tPgorPHN0eWxlPgorPCEtLQorIC8qIEZvbnQgRGVmaW5pdGlvbnMgKi8KK0Bmb250LWZhY2UKKwl7Zm9udC1mYW1pbHk6VGFob21hOworCXBhbm9zZS0xOjIgMTEgNiA0IDMgNSA0IDQgMiA0OworCW1zby1mb250LWNoYXJzZXQ6MDsKKwltc28tZ2VuZXJpYy1mb250LWZhbWlseTpzd2lzczsKKwltc28tZm9udC1waXRjaDp2YXJpYWJsZTsKKwltc28tZm9udC1zaWduYXR1cmU6NTUzNjc5NDk1IC0yMTQ3NDgzNjQ4IDggMCA2NjA0NyAwO30KKyAvKiBTdHlsZSBEZWZpbml0aW9ucyAqLworcC5Nc29Ob3JtYWwsIGxpLk1zb05vcm1hbCwgZGl2Lk1zb05vcm1hbAorCXttc28tc3R5bGUtcGFyZW50OiIiOworCW1hcmdpbjowaW47CisJbWFyZ2luLWJvdHRvbTouMDAwMXB0OworCW1zby1wYWdpbmF0aW9uOndpZG93LW9ycGhhbjsKKwlmb250LXNpemU6MTIuMHB0OworCWZvbnQtZmFtaWx5OiJUaW1lcyBOZXcgUm9tYW4iOworCW1zby1mYXJlYXN0LWZvbnQtZmFtaWx5OiJUaW1lcyBOZXcgUm9tYW4iO30KK3AKKwl7bWFyZ2luLXJpZ2h0OjBpbjsKKwltc28tbWFyZ2luLXRvcC1hbHQ6YXV0bzsKKwltc28tbWFyZ2luLWJvdHRvbS1hbHQ6YXV0bzsKKwltYXJnaW4tbGVmdDowaW47CisJbXNvLXBhZ2luYXRpb246d2lkb3ctb3JwaGFuOworCWZvbnQtc2l6ZToxMi4wcHQ7CisJZm9udC1mYW1pbHk6IlRpbWVzIE5ldyBSb21hbiI7CisJbXNvLWZhcmVhc3QtZm9udC1mYW1pbHk6IlRpbWVzIE5ldyBSb21hbiI7fQorcC5CYWxsb29uVGV4dCwgbGkuQmFsbG9vblRleHQsIGRpdi5CYWxsb29uVGV4dAorCXttc28tc3R5bGUtbmFtZToiQmFsbG9vbiBUZXh0IjsKKwltYXJnaW46MGluOworCW1hcmdpbi1ib3R0b206LjAwMDFwdDsKKwltc28tcGFnaW5hdGlvbjp3aWRvdy1vcnBoYW47CisJZm9udC1zaXplOjguMHB0OworCWZvbnQtZmFtaWx5OlRhaG9tYTsKKwltc28tZmFyZWFzdC1mb250LWZhbWlseToiVGltZXMgTmV3IFJvbWFuIjt9CitAcGFnZSBTZWN0aW9uMQorCXtzaXplOjguNWluIDExLjBpbjsKKwltYXJnaW46MS4waW4gMS4yNWluIDEuMGluIDEuMjVpbjsKKwltc28taGVhZGVyLW1hcmdpbjouNWluOworCW1zby1mb290ZXItbWFyZ2luOi41aW47CisJbXNvLXBhcGVyLXNvdXJjZTowO30KK2Rpdi5TZWN0aW9uMQorCXtwYWdlOlNlY3Rpb24xO30KKy0tPgorPC9zdHlsZT4KKzwvaGVhZD4KKworPGJvZHkgbGFuZz1FTi1VUyBzdHlsZT0ndGFiLWludGVydmFsOi41aW4nPgorCis8ZGl2IGNsYXNzPVNlY3Rpb24xPgorCis8cCBhbGlnbj1jZW50ZXIgc3R5bGU9J3RleHQtYWxpZ246Y2VudGVyJz48Yj5FY2xpcHNlIFB1YmxpYyBMaWNlbnNlIC0gdiAxLjA8L2I+Cis8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5USEUgQUNDT01QQU5ZSU5HIFBST0dSQU0gSVMgUFJPVklERUQgVU5ERVIKK1RIRSBURVJNUyBPRiBUSElTIEVDTElQU0UgUFVCTElDIExJQ0VOU0UgKCZxdW90O0FHUkVFTUVOVCZxdW90OykuIEFOWSBVU0UsCitSRVBST0RVQ1RJT04gT1IgRElTVFJJQlVUSU9OIE9GIFRIRSBQUk9HUkFNIENPTlNUSVRVVEVTIFJFQ0lQSUVOVCdTIEFDQ0VQVEFOQ0UKK09GIFRISVMgQUdSRUVNRU5ULjwvc3Bhbj4gPC9wPgorCis8cD48Yj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+MS4gREVGSU5JVElPTlM8L3NwYW4+PC9iPiA8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4mcXVvdDtDb250cmlidXRpb24mcXVvdDsgbWVhbnM6PC9zcGFuPiA8L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmEpCitpbiB0aGUgY2FzZSBvZiB0aGUgaW5pdGlhbCBDb250cmlidXRvciwgdGhlIGluaXRpYWwgY29kZSBhbmQgZG9jdW1lbnRhdGlvbgorZGlzdHJpYnV0ZWQgdW5kZXIgdGhpcyBBZ3JlZW1lbnQsIGFuZDxiciBjbGVhcj1sZWZ0PgorYikgaW4gdGhlIGNhc2Ugb2YgZWFjaCBzdWJzZXF1ZW50IENvbnRyaWJ1dG9yOjwvc3Bhbj48L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmkpCitjaGFuZ2VzIHRvIHRoZSBQcm9ncmFtLCBhbmQ8L3NwYW4+PC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5paSkKK2FkZGl0aW9ucyB0byB0aGUgUHJvZ3JhbTs8L3NwYW4+PC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz53aGVyZQorc3VjaCBjaGFuZ2VzIGFuZC9vciBhZGRpdGlvbnMgdG8gdGhlIFByb2dyYW0gb3JpZ2luYXRlIGZyb20gYW5kIGFyZSBkaXN0cmlidXRlZAorYnkgdGhhdCBwYXJ0aWN1bGFyIENvbnRyaWJ1dG9yLiBBIENvbnRyaWJ1dGlvbiAnb3JpZ2luYXRlcycgZnJvbSBhIENvbnRyaWJ1dG9yCitpZiBpdCB3YXMgYWRkZWQgdG8gdGhlIFByb2dyYW0gYnkgc3VjaCBDb250cmlidXRvciBpdHNlbGYgb3IgYW55b25lIGFjdGluZyBvbgorc3VjaCBDb250cmlidXRvcidzIGJlaGFsZi4gQ29udHJpYnV0aW9ucyBkbyBub3QgaW5jbHVkZSBhZGRpdGlvbnMgdG8gdGhlCitQcm9ncmFtIHdoaWNoOiAoaSkgYXJlIHNlcGFyYXRlIG1vZHVsZXMgb2Ygc29mdHdhcmUgZGlzdHJpYnV0ZWQgaW4gY29uanVuY3Rpb24KK3dpdGggdGhlIFByb2dyYW0gdW5kZXIgdGhlaXIgb3duIGxpY2Vuc2UgYWdyZWVtZW50LCBhbmQgKGlpKSBhcmUgbm90IGRlcml2YXRpdmUKK3dvcmtzIG9mIHRoZSBQcm9ncmFtLiA8L3NwYW4+PC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+JnF1b3Q7Q29udHJpYnV0b3ImcXVvdDsgbWVhbnMgYW55IHBlcnNvbiBvcgorZW50aXR5IHRoYXQgZGlzdHJpYnV0ZXMgdGhlIFByb2dyYW0uPC9zcGFuPiA8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4mcXVvdDtMaWNlbnNlZCBQYXRlbnRzICZxdW90OyBtZWFuIHBhdGVudAorY2xhaW1zIGxpY2Vuc2FibGUgYnkgYSBDb250cmlidXRvciB3aGljaCBhcmUgbmVjZXNzYXJpbHkgaW5mcmluZ2VkIGJ5IHRoZSB1c2UKK29yIHNhbGUgb2YgaXRzIENvbnRyaWJ1dGlvbiBhbG9uZSBvciB3aGVuIGNvbWJpbmVkIHdpdGggdGhlIFByb2dyYW0uIDwvc3Bhbj48L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4mcXVvdDtQcm9ncmFtJnF1b3Q7IG1lYW5zIHRoZSBDb250cmlidXRpb25zCitkaXN0cmlidXRlZCBpbiBhY2NvcmRhbmNlIHdpdGggdGhpcyBBZ3JlZW1lbnQuPC9zcGFuPiA8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4mcXVvdDtSZWNpcGllbnQmcXVvdDsgbWVhbnMgYW55b25lIHdobworcmVjZWl2ZXMgdGhlIFByb2dyYW0gdW5kZXIgdGhpcyBBZ3JlZW1lbnQsIGluY2x1ZGluZyBhbGwgQ29udHJpYnV0b3JzLjwvc3Bhbj4gPC9wPgorCis8cD48Yj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+Mi4gR1JBTlQgT0YgUklHSFRTPC9zcGFuPjwvYj4gPC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5hKQorU3ViamVjdCB0byB0aGUgdGVybXMgb2YgdGhpcyBBZ3JlZW1lbnQsIGVhY2ggQ29udHJpYnV0b3IgaGVyZWJ5IGdyYW50cyBSZWNpcGllbnQKK2Egbm9uLWV4Y2x1c2l2ZSwgd29ybGR3aWRlLCByb3lhbHR5LWZyZWUgY29weXJpZ2h0IGxpY2Vuc2UgdG88c3Bhbgorc3R5bGU9J2NvbG9yOnJlZCc+IDwvc3Bhbj5yZXByb2R1Y2UsIHByZXBhcmUgZGVyaXZhdGl2ZSB3b3JrcyBvZiwgcHVibGljbHkKK2Rpc3BsYXksIHB1YmxpY2x5IHBlcmZvcm0sIGRpc3RyaWJ1dGUgYW5kIHN1YmxpY2Vuc2UgdGhlIENvbnRyaWJ1dGlvbiBvZiBzdWNoCitDb250cmlidXRvciwgaWYgYW55LCBhbmQgc3VjaCBkZXJpdmF0aXZlIHdvcmtzLCBpbiBzb3VyY2UgY29kZSBhbmQgb2JqZWN0IGNvZGUKK2Zvcm0uPC9zcGFuPjwvcD4KKworPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YikKK1N1YmplY3QgdG8gdGhlIHRlcm1zIG9mIHRoaXMgQWdyZWVtZW50LCBlYWNoIENvbnRyaWJ1dG9yIGhlcmVieSBncmFudHMKK1JlY2lwaWVudCBhIG5vbi1leGNsdXNpdmUsIHdvcmxkd2lkZSw8c3BhbiBzdHlsZT0nY29sb3I6Z3JlZW4nPiA8L3NwYW4+cm95YWx0eS1mcmVlCitwYXRlbnQgbGljZW5zZSB1bmRlciBMaWNlbnNlZCBQYXRlbnRzIHRvIG1ha2UsIHVzZSwgc2VsbCwgb2ZmZXIgdG8gc2VsbCwgaW1wb3J0CithbmQgb3RoZXJ3aXNlIHRyYW5zZmVyIHRoZSBDb250cmlidXRpb24gb2Ygc3VjaCBDb250cmlidXRvciwgaWYgYW55LCBpbiBzb3VyY2UKK2NvZGUgYW5kIG9iamVjdCBjb2RlIGZvcm0uIFRoaXMgcGF0ZW50IGxpY2Vuc2Ugc2hhbGwgYXBwbHkgdG8gdGhlIGNvbWJpbmF0aW9uCitvZiB0aGUgQ29udHJpYnV0aW9uIGFuZCB0aGUgUHJvZ3JhbSBpZiwgYXQgdGhlIHRpbWUgdGhlIENvbnRyaWJ1dGlvbiBpcyBhZGRlZAorYnkgdGhlIENvbnRyaWJ1dG9yLCBzdWNoIGFkZGl0aW9uIG9mIHRoZSBDb250cmlidXRpb24gY2F1c2VzIHN1Y2ggY29tYmluYXRpb24KK3RvIGJlIGNvdmVyZWQgYnkgdGhlIExpY2Vuc2VkIFBhdGVudHMuIFRoZSBwYXRlbnQgbGljZW5zZSBzaGFsbCBub3QgYXBwbHkgdG8KK2FueSBvdGhlciBjb21iaW5hdGlvbnMgd2hpY2ggaW5jbHVkZSB0aGUgQ29udHJpYnV0aW9uLiBObyBoYXJkd2FyZSBwZXIgc2UgaXMKK2xpY2Vuc2VkIGhlcmV1bmRlci4gPC9zcGFuPjwvcD4KKworPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YykKK1JlY2lwaWVudCB1bmRlcnN0YW5kcyB0aGF0IGFsdGhvdWdoIGVhY2ggQ29udHJpYnV0b3IgZ3JhbnRzIHRoZSBsaWNlbnNlcyB0byBpdHMKK0NvbnRyaWJ1dGlvbnMgc2V0IGZvcnRoIGhlcmVpbiwgbm8gYXNzdXJhbmNlcyBhcmUgcHJvdmlkZWQgYnkgYW55IENvbnRyaWJ1dG9yCit0aGF0IHRoZSBQcm9ncmFtIGRvZXMgbm90IGluZnJpbmdlIHRoZSBwYXRlbnQgb3Igb3RoZXIgaW50ZWxsZWN0dWFsIHByb3BlcnR5CityaWdodHMgb2YgYW55IG90aGVyIGVudGl0eS4gRWFjaCBDb250cmlidXRvciBkaXNjbGFpbXMgYW55IGxpYWJpbGl0eSB0byBSZWNpcGllbnQKK2ZvciBjbGFpbXMgYnJvdWdodCBieSBhbnkgb3RoZXIgZW50aXR5IGJhc2VkIG9uIGluZnJpbmdlbWVudCBvZiBpbnRlbGxlY3R1YWwKK3Byb3BlcnR5IHJpZ2h0cyBvciBvdGhlcndpc2UuIEFzIGEgY29uZGl0aW9uIHRvIGV4ZXJjaXNpbmcgdGhlIHJpZ2h0cyBhbmQKK2xpY2Vuc2VzIGdyYW50ZWQgaGVyZXVuZGVyLCBlYWNoIFJlY2lwaWVudCBoZXJlYnkgYXNzdW1lcyBzb2xlIHJlc3BvbnNpYmlsaXR5Cit0byBzZWN1cmUgYW55IG90aGVyIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgbmVlZGVkLCBpZiBhbnkuIEZvciBleGFtcGxlLAoraWYgYSB0aGlyZCBwYXJ0eSBwYXRlbnQgbGljZW5zZSBpcyByZXF1aXJlZCB0byBhbGxvdyBSZWNpcGllbnQgdG8gZGlzdHJpYnV0ZQordGhlIFByb2dyYW0sIGl0IGlzIFJlY2lwaWVudCdzIHJlc3BvbnNpYmlsaXR5IHRvIGFjcXVpcmUgdGhhdCBsaWNlbnNlIGJlZm9yZQorZGlzdHJpYnV0aW5nIHRoZSBQcm9ncmFtLjwvc3Bhbj48L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmQpCitFYWNoIENvbnRyaWJ1dG9yIHJlcHJlc2VudHMgdGhhdCB0byBpdHMga25vd2xlZGdlIGl0IGhhcyBzdWZmaWNpZW50IGNvcHlyaWdodAorcmlnaHRzIGluIGl0cyBDb250cmlidXRpb24sIGlmIGFueSwgdG8gZ3JhbnQgdGhlIGNvcHlyaWdodCBsaWNlbnNlIHNldCBmb3J0aCBpbgordGhpcyBBZ3JlZW1lbnQuIDwvc3Bhbj48L3A+CisKKzxwPjxiPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4zLiBSRVFVSVJFTUVOVFM8L3NwYW4+PC9iPiA8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5BIENvbnRyaWJ1dG9yIG1heSBjaG9vc2UgdG8gZGlzdHJpYnV0ZSB0aGUKK1Byb2dyYW0gaW4gb2JqZWN0IGNvZGUgZm9ybSB1bmRlciBpdHMgb3duIGxpY2Vuc2UgYWdyZWVtZW50LCBwcm92aWRlZCB0aGF0Ojwvc3Bhbj4KKzwvcD4KKworPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YSkKK2l0IGNvbXBsaWVzIHdpdGggdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoaXMgQWdyZWVtZW50OyBhbmQ8L3NwYW4+PC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5iKQoraXRzIGxpY2Vuc2UgYWdyZWVtZW50Ojwvc3Bhbj48L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmkpCitlZmZlY3RpdmVseSBkaXNjbGFpbXMgb24gYmVoYWxmIG9mIGFsbCBDb250cmlidXRvcnMgYWxsIHdhcnJhbnRpZXMgYW5kCitjb25kaXRpb25zLCBleHByZXNzIGFuZCBpbXBsaWVkLCBpbmNsdWRpbmcgd2FycmFudGllcyBvciBjb25kaXRpb25zIG9mIHRpdGxlCithbmQgbm9uLWluZnJpbmdlbWVudCwgYW5kIGltcGxpZWQgd2FycmFudGllcyBvciBjb25kaXRpb25zIG9mIG1lcmNoYW50YWJpbGl0eQorYW5kIGZpdG5lc3MgZm9yIGEgcGFydGljdWxhciBwdXJwb3NlOyA8L3NwYW4+PC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5paSkKK2VmZmVjdGl2ZWx5IGV4Y2x1ZGVzIG9uIGJlaGFsZiBvZiBhbGwgQ29udHJpYnV0b3JzIGFsbCBsaWFiaWxpdHkgZm9yIGRhbWFnZXMsCitpbmNsdWRpbmcgZGlyZWN0LCBpbmRpcmVjdCwgc3BlY2lhbCwgaW5jaWRlbnRhbCBhbmQgY29uc2VxdWVudGlhbCBkYW1hZ2VzLCBzdWNoCithcyBsb3N0IHByb2ZpdHM7IDwvc3Bhbj48L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmlpaSkKK3N0YXRlcyB0aGF0IGFueSBwcm92aXNpb25zIHdoaWNoIGRpZmZlciBmcm9tIHRoaXMgQWdyZWVtZW50IGFyZSBvZmZlcmVkIGJ5IHRoYXQKK0NvbnRyaWJ1dG9yIGFsb25lIGFuZCBub3QgYnkgYW55IG90aGVyIHBhcnR5OyBhbmQ8L3NwYW4+PC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5pdikKK3N0YXRlcyB0aGF0IHNvdXJjZSBjb2RlIGZvciB0aGUgUHJvZ3JhbSBpcyBhdmFpbGFibGUgZnJvbSBzdWNoIENvbnRyaWJ1dG9yLCBhbmQKK2luZm9ybXMgbGljZW5zZWVzIGhvdyB0byBvYnRhaW4gaXQgaW4gYSByZWFzb25hYmxlIG1hbm5lciBvbiBvciB0aHJvdWdoIGEKK21lZGl1bSBjdXN0b21hcmlseSB1c2VkIGZvciBzb2Z0d2FyZSBleGNoYW5nZS48c3BhbiBzdHlsZT0nY29sb3I6Ymx1ZSc+IDwvc3Bhbj48L3NwYW4+PC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+V2hlbiB0aGUgUHJvZ3JhbSBpcyBtYWRlIGF2YWlsYWJsZSBpbiBzb3VyY2UKK2NvZGUgZm9ybTo8L3NwYW4+IDwvcD4KKworPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YSkKK2l0IG11c3QgYmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhpcyBBZ3JlZW1lbnQ7IGFuZCA8L3NwYW4+PC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5iKSBhCitjb3B5IG9mIHRoaXMgQWdyZWVtZW50IG11c3QgYmUgaW5jbHVkZWQgd2l0aCBlYWNoIGNvcHkgb2YgdGhlIFByb2dyYW0uIDwvc3Bhbj48L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5Db250cmlidXRvcnMgbWF5IG5vdCByZW1vdmUgb3IgYWx0ZXIgYW55Citjb3B5cmlnaHQgbm90aWNlcyBjb250YWluZWQgd2l0aGluIHRoZSBQcm9ncmFtLiA8L3NwYW4+PC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+RWFjaCBDb250cmlidXRvciBtdXN0IGlkZW50aWZ5IGl0c2VsZiBhcyB0aGUKK29yaWdpbmF0b3Igb2YgaXRzIENvbnRyaWJ1dGlvbiwgaWYgYW55LCBpbiBhIG1hbm5lciB0aGF0IHJlYXNvbmFibHkgYWxsb3dzCitzdWJzZXF1ZW50IFJlY2lwaWVudHMgdG8gaWRlbnRpZnkgdGhlIG9yaWdpbmF0b3Igb2YgdGhlIENvbnRyaWJ1dGlvbi4gPC9zcGFuPjwvcD4KKworPHA+PGI+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPjQuIENPTU1FUkNJQUwgRElTVFJJQlVUSU9OPC9zcGFuPjwvYj4gPC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+Q29tbWVyY2lhbCBkaXN0cmlidXRvcnMgb2Ygc29mdHdhcmUgbWF5CithY2NlcHQgY2VydGFpbiByZXNwb25zaWJpbGl0aWVzIHdpdGggcmVzcGVjdCB0byBlbmQgdXNlcnMsIGJ1c2luZXNzIHBhcnRuZXJzCithbmQgdGhlIGxpa2UuIFdoaWxlIHRoaXMgbGljZW5zZSBpcyBpbnRlbmRlZCB0byBmYWNpbGl0YXRlIHRoZSBjb21tZXJjaWFsIHVzZQorb2YgdGhlIFByb2dyYW0sIHRoZSBDb250cmlidXRvciB3aG8gaW5jbHVkZXMgdGhlIFByb2dyYW0gaW4gYSBjb21tZXJjaWFsCitwcm9kdWN0IG9mZmVyaW5nIHNob3VsZCBkbyBzbyBpbiBhIG1hbm5lciB3aGljaCBkb2VzIG5vdCBjcmVhdGUgcG90ZW50aWFsCitsaWFiaWxpdHkgZm9yIG90aGVyIENvbnRyaWJ1dG9ycy4gVGhlcmVmb3JlLCBpZiBhIENvbnRyaWJ1dG9yIGluY2x1ZGVzIHRoZQorUHJvZ3JhbSBpbiBhIGNvbW1lcmNpYWwgcHJvZHVjdCBvZmZlcmluZywgc3VjaCBDb250cmlidXRvciAoJnF1b3Q7Q29tbWVyY2lhbAorQ29udHJpYnV0b3ImcXVvdDspIGhlcmVieSBhZ3JlZXMgdG8gZGVmZW5kIGFuZCBpbmRlbW5pZnkgZXZlcnkgb3RoZXIKK0NvbnRyaWJ1dG9yICgmcXVvdDtJbmRlbW5pZmllZCBDb250cmlidXRvciZxdW90OykgYWdhaW5zdCBhbnkgbG9zc2VzLCBkYW1hZ2VzIGFuZAorY29zdHMgKGNvbGxlY3RpdmVseSAmcXVvdDtMb3NzZXMmcXVvdDspIGFyaXNpbmcgZnJvbSBjbGFpbXMsIGxhd3N1aXRzIGFuZCBvdGhlcgorbGVnYWwgYWN0aW9ucyBicm91Z2h0IGJ5IGEgdGhpcmQgcGFydHkgYWdhaW5zdCB0aGUgSW5kZW1uaWZpZWQgQ29udHJpYnV0b3IgdG8KK3RoZSBleHRlbnQgY2F1c2VkIGJ5IHRoZSBhY3RzIG9yIG9taXNzaW9ucyBvZiBzdWNoIENvbW1lcmNpYWwgQ29udHJpYnV0b3IgaW4KK2Nvbm5lY3Rpb24gd2l0aCBpdHMgZGlzdHJpYnV0aW9uIG9mIHRoZSBQcm9ncmFtIGluIGEgY29tbWVyY2lhbCBwcm9kdWN0CitvZmZlcmluZy4gVGhlIG9ibGlnYXRpb25zIGluIHRoaXMgc2VjdGlvbiBkbyBub3QgYXBwbHkgdG8gYW55IGNsYWltcyBvciBMb3NzZXMKK3JlbGF0aW5nIHRvIGFueSBhY3R1YWwgb3IgYWxsZWdlZCBpbnRlbGxlY3R1YWwgcHJvcGVydHkgaW5mcmluZ2VtZW50LiBJbiBvcmRlcgordG8gcXVhbGlmeSwgYW4gSW5kZW1uaWZpZWQgQ29udHJpYnV0b3IgbXVzdDogYSkgcHJvbXB0bHkgbm90aWZ5IHRoZSBDb21tZXJjaWFsCitDb250cmlidXRvciBpbiB3cml0aW5nIG9mIHN1Y2ggY2xhaW0sIGFuZCBiKSBhbGxvdyB0aGUgQ29tbWVyY2lhbCBDb250cmlidXRvcgordG8gY29udHJvbCwgYW5kIGNvb3BlcmF0ZSB3aXRoIHRoZSBDb21tZXJjaWFsIENvbnRyaWJ1dG9yIGluLCB0aGUgZGVmZW5zZSBhbmQKK2FueSByZWxhdGVkIHNldHRsZW1lbnQgbmVnb3RpYXRpb25zLiBUaGUgSW5kZW1uaWZpZWQgQ29udHJpYnV0b3IgbWF5IHBhcnRpY2lwYXRlCitpbiBhbnkgc3VjaCBjbGFpbSBhdCBpdHMgb3duIGV4cGVuc2UuPC9zcGFuPiA8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5Gb3IgZXhhbXBsZSwgYSBDb250cmlidXRvciBtaWdodCBpbmNsdWRlIHRoZQorUHJvZ3JhbSBpbiBhIGNvbW1lcmNpYWwgcHJvZHVjdCBvZmZlcmluZywgUHJvZHVjdCBYLiBUaGF0IENvbnRyaWJ1dG9yIGlzIHRoZW4gYQorQ29tbWVyY2lhbCBDb250cmlidXRvci4gSWYgdGhhdCBDb21tZXJjaWFsIENvbnRyaWJ1dG9yIHRoZW4gbWFrZXMgcGVyZm9ybWFuY2UKK2NsYWltcywgb3Igb2ZmZXJzIHdhcnJhbnRpZXMgcmVsYXRlZCB0byBQcm9kdWN0IFgsIHRob3NlIHBlcmZvcm1hbmNlIGNsYWltcyBhbmQKK3dhcnJhbnRpZXMgYXJlIHN1Y2ggQ29tbWVyY2lhbCBDb250cmlidXRvcidzIHJlc3BvbnNpYmlsaXR5IGFsb25lLiBVbmRlciB0aGlzCitzZWN0aW9uLCB0aGUgQ29tbWVyY2lhbCBDb250cmlidXRvciB3b3VsZCBoYXZlIHRvIGRlZmVuZCBjbGFpbXMgYWdhaW5zdCB0aGUKK290aGVyIENvbnRyaWJ1dG9ycyByZWxhdGVkIHRvIHRob3NlIHBlcmZvcm1hbmNlIGNsYWltcyBhbmQgd2FycmFudGllcywgYW5kIGlmIGEKK2NvdXJ0IHJlcXVpcmVzIGFueSBvdGhlciBDb250cmlidXRvciB0byBwYXkgYW55IGRhbWFnZXMgYXMgYSByZXN1bHQsIHRoZQorQ29tbWVyY2lhbCBDb250cmlidXRvciBtdXN0IHBheSB0aG9zZSBkYW1hZ2VzLjwvc3Bhbj4gPC9wPgorCis8cD48Yj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+NS4gTk8gV0FSUkFOVFk8L3NwYW4+PC9iPiA8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5FWENFUFQgQVMgRVhQUkVTU0xZIFNFVCBGT1JUSCBJTiBUSElTCitBR1JFRU1FTlQsIFRIRSBQUk9HUkFNIElTIFBST1ZJREVEIE9OIEFOICZxdW90O0FTIElTJnF1b3Q7IEJBU0lTLCBXSVRIT1VUCitXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIEVJVEhFUiBFWFBSRVNTIE9SIElNUExJRUQgSU5DTFVESU5HLAorV0lUSE9VVCBMSU1JVEFUSU9OLCBBTlkgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIFRJVExFLCBOT04tSU5GUklOR0VNRU5ULAorTUVSQ0hBTlRBQklMSVRZIE9SIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBFYWNoIFJlY2lwaWVudCBpcyBzb2xlbHkKK3Jlc3BvbnNpYmxlIGZvciBkZXRlcm1pbmluZyB0aGUgYXBwcm9wcmlhdGVuZXNzIG9mIHVzaW5nIGFuZCBkaXN0cmlidXRpbmcgdGhlCitQcm9ncmFtIGFuZCBhc3N1bWVzIGFsbCByaXNrcyBhc3NvY2lhdGVkIHdpdGggaXRzIGV4ZXJjaXNlIG9mIHJpZ2h0cyB1bmRlciB0aGlzCitBZ3JlZW1lbnQgLCBpbmNsdWRpbmcgYnV0IG5vdCBsaW1pdGVkIHRvIHRoZSByaXNrcyBhbmQgY29zdHMgb2YgcHJvZ3JhbSBlcnJvcnMsCitjb21wbGlhbmNlIHdpdGggYXBwbGljYWJsZSBsYXdzLCBkYW1hZ2UgdG8gb3IgbG9zcyBvZiBkYXRhLCBwcm9ncmFtcyBvcgorZXF1aXBtZW50LCBhbmQgdW5hdmFpbGFiaWxpdHkgb3IgaW50ZXJydXB0aW9uIG9mIG9wZXJhdGlvbnMuIDwvc3Bhbj48L3A+CisKKzxwPjxiPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz42LiBESVNDTEFJTUVSIE9GIExJQUJJTElUWTwvc3Bhbj48L2I+IDwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkVYQ0VQVCBBUyBFWFBSRVNTTFkgU0VUIEZPUlRIIElOIFRISVMKK0FHUkVFTUVOVCwgTkVJVEhFUiBSRUNJUElFTlQgTk9SIEFOWSBDT05UUklCVVRPUlMgU0hBTEwgSEFWRSBBTlkgTElBQklMSVRZIEZPUgorQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisoSU5DTFVESU5HIFdJVEhPVVQgTElNSVRBVElPTiBMT1NUIFBST0ZJVFMpLCBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcKK05FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT1IgRElTVFJJQlVUSU9OIE9GCitUSEUgUFJPR1JBTSBPUiBUSEUgRVhFUkNJU0UgT0YgQU5ZIFJJR0hUUyBHUkFOVEVEIEhFUkVVTkRFUiwgRVZFTiBJRiBBRFZJU0VEIE9GCitUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLjwvc3Bhbj4gPC9wPgorCis8cD48Yj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+Ny4gR0VORVJBTDwvc3Bhbj48L2I+IDwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPklmIGFueSBwcm92aXNpb24gb2YgdGhpcyBBZ3JlZW1lbnQgaXMgaW52YWxpZAorb3IgdW5lbmZvcmNlYWJsZSB1bmRlciBhcHBsaWNhYmxlIGxhdywgaXQgc2hhbGwgbm90IGFmZmVjdCB0aGUgdmFsaWRpdHkgb3IKK2VuZm9yY2VhYmlsaXR5IG9mIHRoZSByZW1haW5kZXIgb2YgdGhlIHRlcm1zIG9mIHRoaXMgQWdyZWVtZW50LCBhbmQgd2l0aG91dAorZnVydGhlciBhY3Rpb24gYnkgdGhlIHBhcnRpZXMgaGVyZXRvLCBzdWNoIHByb3Zpc2lvbiBzaGFsbCBiZSByZWZvcm1lZCB0byB0aGUKK21pbmltdW0gZXh0ZW50IG5lY2Vzc2FyeSB0byBtYWtlIHN1Y2ggcHJvdmlzaW9uIHZhbGlkIGFuZCBlbmZvcmNlYWJsZS48L3NwYW4+IDwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPklmIFJlY2lwaWVudCBpbnN0aXR1dGVzIHBhdGVudCBsaXRpZ2F0aW9uCithZ2FpbnN0IGFueSBlbnRpdHkgKGluY2x1ZGluZyBhIGNyb3NzLWNsYWltIG9yIGNvdW50ZXJjbGFpbSBpbiBhIGxhd3N1aXQpCithbGxlZ2luZyB0aGF0IHRoZSBQcm9ncmFtIGl0c2VsZiAoZXhjbHVkaW5nIGNvbWJpbmF0aW9ucyBvZiB0aGUgUHJvZ3JhbSB3aXRoCitvdGhlciBzb2Z0d2FyZSBvciBoYXJkd2FyZSkgaW5mcmluZ2VzIHN1Y2ggUmVjaXBpZW50J3MgcGF0ZW50KHMpLCB0aGVuIHN1Y2gKK1JlY2lwaWVudCdzIHJpZ2h0cyBncmFudGVkIHVuZGVyIFNlY3Rpb24gMihiKSBzaGFsbCB0ZXJtaW5hdGUgYXMgb2YgdGhlIGRhdGUKK3N1Y2ggbGl0aWdhdGlvbiBpcyBmaWxlZC4gPC9zcGFuPjwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkFsbCBSZWNpcGllbnQncyByaWdodHMgdW5kZXIgdGhpcyBBZ3JlZW1lbnQKK3NoYWxsIHRlcm1pbmF0ZSBpZiBpdCBmYWlscyB0byBjb21wbHkgd2l0aCBhbnkgb2YgdGhlIG1hdGVyaWFsIHRlcm1zIG9yCitjb25kaXRpb25zIG9mIHRoaXMgQWdyZWVtZW50IGFuZCBkb2VzIG5vdCBjdXJlIHN1Y2ggZmFpbHVyZSBpbiBhIHJlYXNvbmFibGUKK3BlcmlvZCBvZiB0aW1lIGFmdGVyIGJlY29taW5nIGF3YXJlIG9mIHN1Y2ggbm9uY29tcGxpYW5jZS4gSWYgYWxsIFJlY2lwaWVudCdzCityaWdodHMgdW5kZXIgdGhpcyBBZ3JlZW1lbnQgdGVybWluYXRlLCBSZWNpcGllbnQgYWdyZWVzIHRvIGNlYXNlIHVzZSBhbmQKK2Rpc3RyaWJ1dGlvbiBvZiB0aGUgUHJvZ3JhbSBhcyBzb29uIGFzIHJlYXNvbmFibHkgcHJhY3RpY2FibGUuIEhvd2V2ZXIsCitSZWNpcGllbnQncyBvYmxpZ2F0aW9ucyB1bmRlciB0aGlzIEFncmVlbWVudCBhbmQgYW55IGxpY2Vuc2VzIGdyYW50ZWQgYnkKK1JlY2lwaWVudCByZWxhdGluZyB0byB0aGUgUHJvZ3JhbSBzaGFsbCBjb250aW51ZSBhbmQgc3Vydml2ZS4gPC9zcGFuPjwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkV2ZXJ5b25lIGlzIHBlcm1pdHRlZCB0byBjb3B5IGFuZCBkaXN0cmlidXRlCitjb3BpZXMgb2YgdGhpcyBBZ3JlZW1lbnQsIGJ1dCBpbiBvcmRlciB0byBhdm9pZCBpbmNvbnNpc3RlbmN5IHRoZSBBZ3JlZW1lbnQgaXMKK2NvcHlyaWdodGVkIGFuZCBtYXkgb25seSBiZSBtb2RpZmllZCBpbiB0aGUgZm9sbG93aW5nIG1hbm5lci4gVGhlIEFncmVlbWVudAorU3Rld2FyZCByZXNlcnZlcyB0aGUgcmlnaHQgdG8gcHVibGlzaCBuZXcgdmVyc2lvbnMgKGluY2x1ZGluZyByZXZpc2lvbnMpIG9mCit0aGlzIEFncmVlbWVudCBmcm9tIHRpbWUgdG8gdGltZS4gTm8gb25lIG90aGVyIHRoYW4gdGhlIEFncmVlbWVudCBTdGV3YXJkIGhhcwordGhlIHJpZ2h0IHRvIG1vZGlmeSB0aGlzIEFncmVlbWVudC4gVGhlIEVjbGlwc2UgRm91bmRhdGlvbiBpcyB0aGUgaW5pdGlhbAorQWdyZWVtZW50IFN0ZXdhcmQuIFRoZSBFY2xpcHNlIEZvdW5kYXRpb24gbWF5IGFzc2lnbiB0aGUgcmVzcG9uc2liaWxpdHkgdG8KK3NlcnZlIGFzIHRoZSBBZ3JlZW1lbnQgU3Rld2FyZCB0byBhIHN1aXRhYmxlIHNlcGFyYXRlIGVudGl0eS4gRWFjaCBuZXcgdmVyc2lvbgorb2YgdGhlIEFncmVlbWVudCB3aWxsIGJlIGdpdmVuIGEgZGlzdGluZ3Vpc2hpbmcgdmVyc2lvbiBudW1iZXIuIFRoZSBQcm9ncmFtCisoaW5jbHVkaW5nIENvbnRyaWJ1dGlvbnMpIG1heSBhbHdheXMgYmUgZGlzdHJpYnV0ZWQgc3ViamVjdCB0byB0aGUgdmVyc2lvbiBvZgordGhlIEFncmVlbWVudCB1bmRlciB3aGljaCBpdCB3YXMgcmVjZWl2ZWQuIEluIGFkZGl0aW9uLCBhZnRlciBhIG5ldyB2ZXJzaW9uIG9mCit0aGUgQWdyZWVtZW50IGlzIHB1Ymxpc2hlZCwgQ29udHJpYnV0b3IgbWF5IGVsZWN0IHRvIGRpc3RyaWJ1dGUgdGhlIFByb2dyYW0KKyhpbmNsdWRpbmcgaXRzIENvbnRyaWJ1dGlvbnMpIHVuZGVyIHRoZSBuZXcgdmVyc2lvbi4gRXhjZXB0IGFzIGV4cHJlc3NseSBzdGF0ZWQKK2luIFNlY3Rpb25zIDIoYSkgYW5kIDIoYikgYWJvdmUsIFJlY2lwaWVudCByZWNlaXZlcyBubyByaWdodHMgb3IgbGljZW5zZXMgdG8KK3RoZSBpbnRlbGxlY3R1YWwgcHJvcGVydHkgb2YgYW55IENvbnRyaWJ1dG9yIHVuZGVyIHRoaXMgQWdyZWVtZW50LCB3aGV0aGVyCitleHByZXNzbHksIGJ5IGltcGxpY2F0aW9uLCBlc3RvcHBlbCBvciBvdGhlcndpc2UuIEFsbCByaWdodHMgaW4gdGhlIFByb2dyYW0gbm90CitleHByZXNzbHkgZ3JhbnRlZCB1bmRlciB0aGlzIEFncmVlbWVudCBhcmUgcmVzZXJ2ZWQuPC9zcGFuPiA8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5UaGlzIEFncmVlbWVudCBpcyBnb3Zlcm5lZCBieSB0aGUgbGF3cyBvZiB0aGUKK1N0YXRlIG9mIE5ldyBZb3JrIGFuZCB0aGUgaW50ZWxsZWN0dWFsIHByb3BlcnR5IGxhd3Mgb2YgdGhlIFVuaXRlZCBTdGF0ZXMgb2YKK0FtZXJpY2EuIE5vIHBhcnR5IHRvIHRoaXMgQWdyZWVtZW50IHdpbGwgYnJpbmcgYSBsZWdhbCBhY3Rpb24gdW5kZXIgdGhpcworQWdyZWVtZW50IG1vcmUgdGhhbiBvbmUgeWVhciBhZnRlciB0aGUgY2F1c2Ugb2YgYWN0aW9uIGFyb3NlLiBFYWNoIHBhcnR5IHdhaXZlcworaXRzIHJpZ2h0cyB0byBhIGp1cnkgdHJpYWwgaW4gYW55IHJlc3VsdGluZyBsaXRpZ2F0aW9uLjwvc3Bhbj4gPC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWw+PCFbaWYgIXN1cHBvcnRFbXB0eVBhcmFzXT4mbmJzcDs8IVtlbmRpZl0+PG86cD48L286cD48L3A+CisKKzwvZGl2PgorCis8L2JvZHk+CisKKzwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQvaWNvbnMvZnVsbC9jdG9vbDE2L0NyZWF0ZUF1dG9tYXRpY0V4cGVyaW1lbnRfZXJyb3JGdW5jX0Vycm9yRnVuY3Rpb24uZ2lmIGIvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5hdXRvbWF0aWNleHBlcmltZW50L2ljb25zL2Z1bGwvY3Rvb2wxNi9DcmVhdGVBdXRvbWF0aWNFeHBlcmltZW50X2Vycm9yRnVuY19FcnJvckZ1bmN0aW9uLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YmU2ZWM0Ci0tLSAvZGV2L251bGwKKysrIGIvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5hdXRvbWF0aWNleHBlcmltZW50L2ljb25zL2Z1bGwvY3Rvb2wxNi9DcmVhdGVBdXRvbWF0aWNFeHBlcmltZW50X2Vycm9yRnVuY19FcnJvckZ1bmN0aW9uLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQvaWNvbnMvZnVsbC9jdG9vbDE2L0NyZWF0ZUF1dG9tYXRpY0V4cGVyaW1lbnRfZXJyb3JGdW5jX1NpbXBsZUVycm9yRnVuY3Rpb24uZ2lmIGIvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5hdXRvbWF0aWNleHBlcmltZW50L2ljb25zL2Z1bGwvY3Rvb2wxNi9DcmVhdGVBdXRvbWF0aWNFeHBlcmltZW50X2Vycm9yRnVuY19TaW1wbGVFcnJvckZ1bmN0aW9uLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNjMyNDVjCi0tLSAvZGV2L251bGwKKysrIGIvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5hdXRvbWF0aWNleHBlcmltZW50L2ljb25zL2Z1bGwvY3Rvb2wxNi9DcmVhdGVBdXRvbWF0aWNFeHBlcmltZW50X2Vycm9yRnVuY19TaW1wbGVFcnJvckZ1bmN0aW9uLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQvaWNvbnMvZnVsbC9jdG9vbDE2L0NyZWF0ZUF1dG9tYXRpY0V4cGVyaW1lbnRfZXJyb3JGdW5jX1RocmVzaG9sZEVycm9yRnVuY3Rpb24uZ2lmIGIvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5hdXRvbWF0aWNleHBlcmltZW50L2ljb25zL2Z1bGwvY3Rvb2wxNi9DcmVhdGVBdXRvbWF0aWNFeHBlcmltZW50X2Vycm9yRnVuY19UaHJlc2hvbGRFcnJvckZ1bmN0aW9uLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YTNlZmY5Ci0tLSAvZGV2L251bGwKKysrIGIvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5hdXRvbWF0aWNleHBlcmltZW50L2ljb25zL2Z1bGwvY3Rvb2wxNi9DcmVhdGVBdXRvbWF0aWNFeHBlcmltZW50X2Vycm9yRnVuY19UaHJlc2hvbGRFcnJvckZ1bmN0aW9uLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQvaWNvbnMvZnVsbC9jdXN0b21vYmoxNi9BdXRvbWF0aWNFeHBlcmltZW50LmdpZiBiL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuYXV0b21hdGljZXhwZXJpbWVudC9pY29ucy9mdWxsL2N1c3RvbW9iajE2L0F1dG9tYXRpY0V4cGVyaW1lbnQuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg3ZmM2NzgKLS0tIC9kZXYvbnVsbAorKysgYi9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQvaWNvbnMvZnVsbC9jdXN0b21vYmoxNi9BdXRvbWF0aWNFeHBlcmltZW50LmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQvaWNvbnMvZnVsbC9jdXN0b21vYmoxNi9BdXRvbWF0aWNleHBlcmltZW50TW9kZWxGaWxlLmdpZiBiL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuYXV0b21hdGljZXhwZXJpbWVudC9pY29ucy9mdWxsL2N1c3RvbW9iajE2L0F1dG9tYXRpY2V4cGVyaW1lbnRNb2RlbEZpbGUuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmQ3MjFlZjAKLS0tIC9kZXYvbnVsbAorKysgYi9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQvaWNvbnMvZnVsbC9jdXN0b21vYmoxNi9BdXRvbWF0aWNleHBlcmltZW50TW9kZWxGaWxlLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQvaWNvbnMvZnVsbC9vYmoxNi9BbGdvcml0aG0uZ2lmIGIvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5hdXRvbWF0aWNleHBlcmltZW50L2ljb25zL2Z1bGwvb2JqMTYvQWxnb3JpdGhtLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMjY2NjBlCi0tLSAvZGV2L251bGwKKysrIGIvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5hdXRvbWF0aWNleHBlcmltZW50L2ljb25zL2Z1bGwvb2JqMTYvQWxnb3JpdGhtLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQvaWNvbnMvZnVsbC9vYmoxNi9BbmFseXNpc01vZGVsRmlsZS5naWYgYi9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQvaWNvbnMvZnVsbC9vYmoxNi9BbmFseXNpc01vZGVsRmlsZS5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGVmMjRiZAotLS0gL2Rldi9udWxsCisrKyBiL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuYXV0b21hdGljZXhwZXJpbWVudC9pY29ucy9mdWxsL29iajE2L0FuYWx5c2lzTW9kZWxGaWxlLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQvaWNvbnMvZnVsbC9vYmoxNi9BdXRvbWF0aWNFeHBlcmltZW50LmdpZiBiL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuYXV0b21hdGljZXhwZXJpbWVudC9pY29ucy9mdWxsL29iajE2L0F1dG9tYXRpY0V4cGVyaW1lbnQuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg3ZmM2NzgKLS0tIC9kZXYvbnVsbAorKysgYi9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQvaWNvbnMvZnVsbC9vYmoxNi9BdXRvbWF0aWNFeHBlcmltZW50LmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQvaWNvbnMvZnVsbC9vYmoxNi9BdXRvbWF0aWNleHBlcmltZW50TW9kZWxGaWxlLmdpZiBiL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuYXV0b21hdGljZXhwZXJpbWVudC9pY29ucy9mdWxsL29iajE2L0F1dG9tYXRpY2V4cGVyaW1lbnRNb2RlbEZpbGUuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ3MjFlZjAKLS0tIC9kZXYvbnVsbAorKysgYi9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQvaWNvbnMvZnVsbC9vYmoxNi9BdXRvbWF0aWNleHBlcmltZW50TW9kZWxGaWxlLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQvaWNvbnMvZnVsbC9vYmoxNi9FcnJvckZ1bmN0aW9uLmdpZiBiL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuYXV0b21hdGljZXhwZXJpbWVudC9pY29ucy9mdWxsL29iajE2L0Vycm9yRnVuY3Rpb24uZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJhZGFhYjAKLS0tIC9kZXYvbnVsbAorKysgYi9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQvaWNvbnMvZnVsbC9vYmoxNi9FcnJvckZ1bmN0aW9uLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQvaWNvbnMvZnVsbC9vYmoxNi9FcnJvclJlc3VsdC5naWYgYi9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQvaWNvbnMvZnVsbC9vYmoxNi9FcnJvclJlc3VsdC5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOThiMzUxZgotLS0gL2Rldi9udWxsCisrKyBiL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuYXV0b21hdGljZXhwZXJpbWVudC9pY29ucy9mdWxsL29iajE2L0Vycm9yUmVzdWx0LmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQvaWNvbnMvZnVsbC9vYmoxNi9Nb2RpZmlhYmxlUGFyYW1ldGVyLmdpZiBiL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuYXV0b21hdGljZXhwZXJpbWVudC9pY29ucy9mdWxsL29iajE2L01vZGlmaWFibGVQYXJhbWV0ZXIuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ1NzMxZmUKLS0tIC9kZXYvbnVsbAorKysgYi9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQvaWNvbnMvZnVsbC9vYmoxNi9Nb2RpZmlhYmxlUGFyYW1ldGVyLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQvaWNvbnMvZnVsbC9vYmoxNi9PcHRpbWl6ZXJBbGdvcml0aG0uZ2lmIGIvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5hdXRvbWF0aWNleHBlcmltZW50L2ljb25zL2Z1bGwvb2JqMTYvT3B0aW1pemVyQWxnb3JpdGhtLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZDg3NDc0Ci0tLSAvZGV2L251bGwKKysrIGIvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5hdXRvbWF0aWNleHBlcmltZW50L2ljb25zL2Z1bGwvb2JqMTYvT3B0aW1pemVyQWxnb3JpdGhtLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQvaWNvbnMvZnVsbC9vYmoxNi9SZWZlcmVuY2VTY2VuYXJpb0RhdGFNYXAuZ2lmIGIvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5hdXRvbWF0aWNleHBlcmltZW50L2ljb25zL2Z1bGwvb2JqMTYvUmVmZXJlbmNlU2NlbmFyaW9EYXRhTWFwLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZDg3NDc0Ci0tLSAvZGV2L251bGwKKysrIGIvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5hdXRvbWF0aWNleHBlcmltZW50L2ljb25zL2Z1bGwvb2JqMTYvUmVmZXJlbmNlU2NlbmFyaW9EYXRhTWFwLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQvaWNvbnMvZnVsbC9vYmoxNi9TaW1wbGVFcnJvckZ1bmN0aW9uLmdpZiBiL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuYXV0b21hdGljZXhwZXJpbWVudC9pY29ucy9mdWxsL29iajE2L1NpbXBsZUVycm9yRnVuY3Rpb24uZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIxMjRmM2UKLS0tIC9kZXYvbnVsbAorKysgYi9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQvaWNvbnMvZnVsbC9vYmoxNi9TaW1wbGVFcnJvckZ1bmN0aW9uLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQvaWNvbnMvZnVsbC9vYmoxNi9UaHJlc2hvbGRFcnJvckZ1bmN0aW9uLmdpZiBiL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuYXV0b21hdGljZXhwZXJpbWVudC9pY29ucy9mdWxsL29iajE2L1RocmVzaG9sZEVycm9yRnVuY3Rpb24uZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ5ODM2NGYKLS0tIC9kZXYvbnVsbAorKysgYi9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQvaWNvbnMvZnVsbC9vYmoxNi9UaHJlc2hvbGRFcnJvckZ1bmN0aW9uLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQvaWNvbnMvZnVsbC93aXpiYW4vTmV3QW5hbHlzaXMuZ2lmIGIvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5hdXRvbWF0aWNleHBlcmltZW50L2ljb25zL2Z1bGwvd2l6YmFuL05ld0FuYWx5c2lzLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NDBmMzY5Ci0tLSAvZGV2L251bGwKKysrIGIvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5hdXRvbWF0aWNleHBlcmltZW50L2ljb25zL2Z1bGwvd2l6YmFuL05ld0FuYWx5c2lzLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQvaWNvbnMvZnVsbC93aXpiYW4vTmV3QXV0b21hdGljZXhwZXJpbWVudC5naWYgYi9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQvaWNvbnMvZnVsbC93aXpiYW4vTmV3QXV0b21hdGljZXhwZXJpbWVudC5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODdmYzY3OAotLS0gL2Rldi9udWxsCisrKyBiL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuYXV0b21hdGljZXhwZXJpbWVudC9pY29ucy9mdWxsL3dpemJhbi9OZXdBdXRvbWF0aWNleHBlcmltZW50LmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQvaWNvbnMvc2FtcGxlLmdpZiBiL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuYXV0b21hdGljZXhwZXJpbWVudC9pY29ucy9zYW1wbGUuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM0ZmIzYzkKLS0tIC9kZXYvbnVsbAorKysgYi9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQvaWNvbnMvc2FtcGxlLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQvbW9kZWwvYXV0b21hdGljZXhwZXJpZW5jZS5nZW5tb2RlbCBiL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuYXV0b21hdGljZXhwZXJpbWVudC9tb2RlbC9hdXRvbWF0aWNleHBlcmllbmNlLmdlbm1vZGVsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQwNzg3YzIKLS0tIC9kZXYvbnVsbAorKysgYi9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQvbW9kZWwvYXV0b21hdGljZXhwZXJpZW5jZS5nZW5tb2RlbApAQCAtMCwwICsxLDM2IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPGdlbm1vZGVsOkdlbk1vZGVsIHhtaTp2ZXJzaW9uPSIyLjAiCisgICAgeG1sbnM6eG1pPSJodHRwOi8vd3d3Lm9tZy5vcmcvWE1JIiB4bWxuczplY29yZT0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9lbWYvMjAwMi9FY29yZSIKKyAgICB4bWxuczpnZW5tb2RlbD0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9lbWYvMjAwMi9HZW5Nb2RlbCIgbW9kZWxEaXJlY3Rvcnk9Ii9vcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQvc3JjIgorICAgIGVkaXREaXJlY3Rvcnk9Ii9vcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQvc3JjIiBlZGl0b3JEaXJlY3Rvcnk9Ii9vcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQvc3JjIgorICAgIG1vZGVsUGx1Z2luSUQ9Im9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuYXV0b21hdGljZXhwZXJpbWVudCIgbW9kZWxOYW1lPSJBdXRvbWF0aWNleHBlcmllbmNlIgorICAgIGltcG9ydGVySUQ9Im9yZy5lY2xpcHNlLmVtZi5pbXBvcnRlci5lY29yZSIgY29tcGxpYW5jZUxldmVsPSI2LjAiIGNvcHlyaWdodEZpZWxkcz0iZmFsc2UiCisgICAgdXNlZEdlblBhY2thZ2VzPSIuLi8uLi9vcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzL21vZGVsL2FuYWx5c2lzLmdlbm1vZGVsIy8vYW5hbHlzaXMgLi4vLi4vb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL21vZGVsL2NvcmUuZ2VubW9kZWwjLy9jb21tb24gLi4vLi4vb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL21vZGVsL2NvcmUuZ2VubW9kZWwjLy9ncmFwaCAuLi8uLi9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvbW9kZWwvY29yZS5nZW5tb2RlbCMvL21vZGVsIC4uLy4uL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9tb2RlbC9jb3JlLmdlbm1vZGVsIy8vbW9kaWZpZXIgLi4vLi4vb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL21vZGVsL2NvcmUuZ2VubW9kZWwjLy9zY2VuYXJpbyAuLi8uLi9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvbW9kZWwvY29yZS5nZW5tb2RlbCMvL3NlcXVlbmNlciAuLi8uLi9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvbW9kZWwvY29yZS5nZW5tb2RlbCMvL3NvbHZlciBwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLmVtZi5lY29yZS9tb2RlbC9FY29yZS5nZW5tb2RlbCMvL2Vjb3JlIj4KKyAgPGZvcmVpZ25Nb2RlbD5hdXRvbWF0aWNleHBlcmltZW50LmVjb3JlPC9mb3JlaWduTW9kZWw+CisgIDxnZW5QYWNrYWdlcyBwcmVmaXg9IkF1dG9tYXRpY2V4cGVyaW1lbnQiIGJhc2VQYWNrYWdlPSJvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzIgorICAgICAgZGlzcG9zYWJsZVByb3ZpZGVyRmFjdG9yeT0idHJ1ZSIgZ2VuZXJhdGVFeGFtcGxlQ2xhc3M9ImZhbHNlIiBtdWx0aXBsZUVkaXRvclBhZ2VzPSJmYWxzZSIKKyAgICAgIGdlbmVyYXRlTW9kZWxXaXphcmQ9ImZhbHNlIiBlY29yZVBhY2thZ2U9ImF1dG9tYXRpY2V4cGVyaW1lbnQuZWNvcmUjLyI+CisgICAgPGdlbkNsYXNzZXMgZWNvcmVDbGFzcz0iYXV0b21hdGljZXhwZXJpbWVudC5lY29yZSMvL0F1dG9tYXRpY0V4cGVyaW1lbnQiPgorICAgICAgPGdlbkZlYXR1cmVzIG5vdGlmeT0iZmFsc2UiIGNoaWxkcmVuPSJ0cnVlIiBjcmVhdGVDaGlsZD0iZmFsc2UiIHByb3BlcnR5U29ydENob2ljZXM9InRydWUiCisgICAgICAgICAgZWNvcmVGZWF0dXJlPSJlY29yZTpFUmVmZXJlbmNlIGF1dG9tYXRpY2V4cGVyaW1lbnQuZWNvcmUjLy9BdXRvbWF0aWNFeHBlcmltZW50L2Jhc2VTY2VuYXJpbyIvPgorICAgICAgPGdlbkZlYXR1cmVzIG5vdGlmeT0iZmFsc2UiIGNoaWxkcmVuPSJ0cnVlIiBjcmVhdGVDaGlsZD0iZmFsc2UiIHByb3BlcnR5Q2F0ZWdvcnk9IiIKKyAgICAgICAgICBwcm9wZXJ0eVNvcnRDaG9pY2VzPSJ0cnVlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVSZWZlcmVuY2UgYXV0b21hdGljZXhwZXJpbWVudC5lY29yZSMvL0F1dG9tYXRpY0V4cGVyaW1lbnQvcGFyYW1ldGVycyIvPgorICAgICAgPGdlbkZlYXR1cmVzIGNyZWF0ZUNoaWxkPSJmYWxzZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFQXR0cmlidXRlIGF1dG9tYXRpY2V4cGVyaW1lbnQuZWNvcmUjLy9BdXRvbWF0aWNFeHBlcmltZW50L2Vycm9yQW5hbHlzaXNBbGdvcml0aG0iLz4KKyAgICAgIDxnZW5GZWF0dXJlcyBjcmVhdGVDaGlsZD0iZmFsc2UiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RUF0dHJpYnV0ZSBhdXRvbWF0aWNleHBlcmltZW50LmVjb3JlIy8vQXV0b21hdGljRXhwZXJpbWVudC9lcnJvckZ1bmN0aW9uIi8+CisgICAgICA8Z2VuRmVhdHVyZXMgY3JlYXRlQ2hpbGQ9ImZhbHNlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVBdHRyaWJ1dGUgYXV0b21hdGljZXhwZXJpbWVudC5lY29yZSMvL0F1dG9tYXRpY0V4cGVyaW1lbnQvdG9sZXJhbmNlIi8+CisgICAgICA8Z2VuRmVhdHVyZXMgY3JlYXRlQ2hpbGQ9ImZhbHNlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVBdHRyaWJ1dGUgYXV0b21hdGljZXhwZXJpbWVudC5lY29yZSMvL0F1dG9tYXRpY0V4cGVyaW1lbnQvcmVmZXJhbmNlRGF0YURpciIvPgorICAgICAgPGdlbkZlYXR1cmVzIGNyZWF0ZUNoaWxkPSJmYWxzZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFQXR0cmlidXRlIGF1dG9tYXRpY2V4cGVyaW1lbnQuZWNvcmUjLy9BdXRvbWF0aWNFeHBlcmltZW50L21heGltdW1OdW1iZXJPZkl0ZXJhdGlvbnMiLz4KKyAgICAgIDxnZW5GZWF0dXJlcyBjcmVhdGVDaGlsZD0iZmFsc2UiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RUF0dHJpYnV0ZSBhdXRvbWF0aWNleHBlcmltZW50LmVjb3JlIy8vQXV0b21hdGljRXhwZXJpbWVudC9yZUluaXQiLz4KKyAgICAgIDxnZW5GZWF0dXJlcyBwcm9wZXJ0eT0iTm9uZSIgY2hpbGRyZW49InRydWUiIGNyZWF0ZUNoaWxkPSJ0cnVlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVSZWZlcmVuY2UgYXV0b21hdGljZXhwZXJpbWVudC5lY29yZSMvL0F1dG9tYXRpY0V4cGVyaW1lbnQvZXJyb3JGdW5jIi8+CisgICAgPC9nZW5DbGFzc2VzPgorICAgIDxnZW5DbGFzc2VzIGVjb3JlQ2xhc3M9ImF1dG9tYXRpY2V4cGVyaW1lbnQuZWNvcmUjLy9Nb2RpZmlhYmxlUGFyYW1ldGVyIj4KKyAgICAgIDxnZW5GZWF0dXJlcyBjcmVhdGVDaGlsZD0iZmFsc2UiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RUF0dHJpYnV0ZSBhdXRvbWF0aWNleHBlcmltZW50LmVjb3JlIy8vTW9kaWZpYWJsZVBhcmFtZXRlci9pbml0aWFsVmFsdWUiLz4KKyAgICAgIDxnZW5GZWF0dXJlcyBub3RpZnk9ImZhbHNlIiBjcmVhdGVDaGlsZD0iZmFsc2UiIHByb3BlcnR5U29ydENob2ljZXM9InRydWUiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RVJlZmVyZW5jZSBhdXRvbWF0aWNleHBlcmltZW50LmVjb3JlIy8vTW9kaWZpYWJsZVBhcmFtZXRlci9mZWF0dXJlIi8+CisgICAgICA8Z2VuRmVhdHVyZXMgY3JlYXRlQ2hpbGQ9ImZhbHNlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVBdHRyaWJ1dGUgYXV0b21hdGljZXhwZXJpbWVudC5lY29yZSMvL01vZGlmaWFibGVQYXJhbWV0ZXIvc3RlcCIvPgorICAgICAgPGdlbkZlYXR1cmVzIGNyZWF0ZUNoaWxkPSJmYWxzZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFQXR0cmlidXRlIGF1dG9tYXRpY2V4cGVyaW1lbnQuZWNvcmUjLy9Nb2RpZmlhYmxlUGFyYW1ldGVyL2ZlYXR1cmVOYW1lIi8+CisgICAgICA8Z2VuRmVhdHVyZXMgY3JlYXRlQ2hpbGQ9ImZhbHNlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVBdHRyaWJ1dGUgYXV0b21hdGljZXhwZXJpbWVudC5lY29yZSMvL01vZGlmaWFibGVQYXJhbWV0ZXIvbG93ZXJCb3VuZCIvPgorICAgICAgPGdlbkZlYXR1cmVzIGNyZWF0ZUNoaWxkPSJmYWxzZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFQXR0cmlidXRlIGF1dG9tYXRpY2V4cGVyaW1lbnQuZWNvcmUjLy9Nb2RpZmlhYmxlUGFyYW1ldGVyL3VwcGVyQm91bmQiLz4KKyAgICAgIDxnZW5GZWF0dXJlcyBjcmVhdGVDaGlsZD0iZmFsc2UiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RUF0dHJpYnV0ZSBhdXRvbWF0aWNleHBlcmltZW50LmVjb3JlIy8vTW9kaWZpYWJsZVBhcmFtZXRlci90YXJnZXRVUkkiLz4KKyAgICA8L2dlbkNsYXNzZXM+CisgIDwvZ2VuUGFja2FnZXM+Cis8L2dlbm1vZGVsOkdlbk1vZGVsPgpkaWZmIC0tZ2l0IGEvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5hdXRvbWF0aWNleHBlcmltZW50L21vZGVsL2F1dG9tYXRpY2V4cGVyaW1lbnQuZWNvcmUgYi9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQvbW9kZWwvYXV0b21hdGljZXhwZXJpbWVudC5lY29yZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44M2MzMDQ4Ci0tLSAvZGV2L251bGwKKysrIGIvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5hdXRvbWF0aWNleHBlcmltZW50L21vZGVsL2F1dG9tYXRpY2V4cGVyaW1lbnQuZWNvcmUKQEAgLTAsMCArMSw0MiBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxlY29yZTpFUGFja2FnZSB4bWk6dmVyc2lvbj0iMi4wIgorICAgIHhtbG5zOnhtaT0iaHR0cDovL3d3dy5vbWcub3JnL1hNSSIgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIKKyAgICB4bWxuczplY29yZT0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9lbWYvMjAwMi9FY29yZSIgbmFtZT0iYXV0b21hdGljZXhwZXJpbWVudCIKKyAgICBuc1VSST0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvYXV0b21hdGljZXhwZXJpbWVudC5lY29yZSIgbnNQcmVmaXg9Im9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuYXV0b21hdGljZXhwZXJpbWVudCI+CisgIDxlQ2xhc3NpZmllcnMgeHNpOnR5cGU9ImVjb3JlOkVDbGFzcyIgbmFtZT0iQXV0b21hdGljRXhwZXJpbWVudCIgZVN1cGVyVHlwZXM9IiMvL09wdGltaXplckFsZ29yaXRobSI+CisgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVSZWZlcmVuY2UiIG5hbWU9ImJhc2VTY2VuYXJpbyIgbG93ZXJCb3VuZD0iMSIKKyAgICAgICAgZVR5cGU9ImVjb3JlOkVDbGFzcyAuLi8uLi9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvbW9kZWwvc2NlbmFyaW8uZWNvcmUjLy9TY2VuYXJpbyIvPgorICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFUmVmZXJlbmNlIiBuYW1lPSJwYXJhbWV0ZXJzIiBsb3dlckJvdW5kPSIxIgorICAgICAgICB1cHBlckJvdW5kPSItMSIgZVR5cGU9IiMvL01vZGlmaWFibGVQYXJhbWV0ZXIiIGNvbnRhaW5tZW50PSJ0cnVlIi8+CisgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVBdHRyaWJ1dGUiIG5hbWU9ImVycm9yQW5hbHlzaXNBbGdvcml0aG0iCisgICAgICAgIGxvd2VyQm91bmQ9IjEiIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgcGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5lbWYuZWNvcmUvbW9kZWwvRWNvcmUuZWNvcmUjLy9FU3RyaW5nIi8+CisgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVBdHRyaWJ1dGUiIG5hbWU9ImVycm9yRnVuY3Rpb24iIGxvd2VyQm91bmQ9IjEiCisgICAgICAgIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgcGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5lbWYuZWNvcmUvbW9kZWwvRWNvcmUuZWNvcmUjLy9FU3RyaW5nIi8+CisgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVBdHRyaWJ1dGUiIG5hbWU9InRvbGVyYW5jZSIgbG93ZXJCb3VuZD0iMSIKKyAgICAgICAgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLmVtZi5lY29yZS9tb2RlbC9FY29yZS5lY29yZSMvL0VEb3VibGUiLz4KKyAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0icmVmZXJhbmNlRGF0YURpciIgbG93ZXJCb3VuZD0iMSIKKyAgICAgICAgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLmVtZi5lY29yZS9tb2RlbC9FY29yZS5lY29yZSMvL0VTdHJpbmciLz4KKyAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0ibWF4aW11bU51bWJlck9mSXRlcmF0aW9ucyIKKyAgICAgICAgbG93ZXJCb3VuZD0iMSIgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLmVtZi5lY29yZS9tb2RlbC9FY29yZS5lY29yZSMvL0VMb25nIi8+CisgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVBdHRyaWJ1dGUiIG5hbWU9InJlSW5pdCIgbG93ZXJCb3VuZD0iMSIKKyAgICAgICAgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLmVtZi5lY29yZS9tb2RlbC9FY29yZS5lY29yZSMvL0VCb29sZWFuIi8+CisgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVSZWZlcmVuY2UiIG5hbWU9ImVycm9yRnVuYyIgbG93ZXJCb3VuZD0iMSIKKyAgICAgICAgZVR5cGU9ImVjb3JlOkVDbGFzcyAuLi8uLi9vcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzL21vZGVsL2FuYWx5c2lzLmVjb3JlIy8vRXJyb3JGdW5jdGlvbiIKKyAgICAgICAgY29udGFpbm1lbnQ9InRydWUiLz4KKyAgPC9lQ2xhc3NpZmllcnM+CisgIDxlQ2xhc3NpZmllcnMgeHNpOnR5cGU9ImVjb3JlOkVDbGFzcyIgbmFtZT0iTW9kaWZpYWJsZVBhcmFtZXRlciI+CisgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVBdHRyaWJ1dGUiIG5hbWU9ImluaXRpYWxWYWx1ZSIgbG93ZXJCb3VuZD0iMSIKKyAgICAgICAgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLmVtZi5lY29yZS9tb2RlbC9FY29yZS5lY29yZSMvL0VEb3VibGUiLz4KKyAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RVJlZmVyZW5jZSIgbmFtZT0iZmVhdHVyZSIgbG93ZXJCb3VuZD0iMSIKKyAgICAgICAgZVR5cGU9ImVjb3JlOkVDbGFzcyBwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLmVtZi5lY29yZS9tb2RlbC9FY29yZS5lY29yZSMvL0VTdHJ1Y3R1cmFsRmVhdHVyZSIvPgorICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJzdGVwIiBsb3dlckJvdW5kPSIxIiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIHBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2UuZW1mLmVjb3JlL21vZGVsL0Vjb3JlLmVjb3JlIy8vRURvdWJsZSIvPgorICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJmZWF0dXJlTmFtZSIgbG93ZXJCb3VuZD0iMSIKKyAgICAgICAgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLmVtZi5lY29yZS9tb2RlbC9FY29yZS5lY29yZSMvL0VTdHJpbmciLz4KKyAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0ibG93ZXJCb3VuZCIgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLmVtZi5lY29yZS9tb2RlbC9FY29yZS5lY29yZSMvL0VEb3VibGUiCisgICAgICAgIGRlZmF1bHRWYWx1ZUxpdGVyYWw9Ii0xIi8+CisgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVBdHRyaWJ1dGUiIG5hbWU9InVwcGVyQm91bmQiIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgcGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5lbWYuZWNvcmUvbW9kZWwvRWNvcmUuZWNvcmUjLy9FRG91YmxlIgorICAgICAgICBkZWZhdWx0VmFsdWVMaXRlcmFsPSItMSIvPgorICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJ0YXJnZXRVUkkiIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgLi4vLi4vb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL21vZGVsL2NvbW1vbi5lY29yZSMvL1VSSSIvPgorICA8L2VDbGFzc2lmaWVycz4KKyAgPGVDbGFzc2lmaWVycyB4c2k6dHlwZT0iZWNvcmU6RUNsYXNzIiBuYW1lPSJPcHRpbWl6ZXJBbGdvcml0aG0iIGVTdXBlclR5cGVzPSIuLi8uLi9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvbW9kZWwvY29tbW9uLmVjb3JlIy8vSWRlbnRpZmlhYmxlIi8+Cis8L2Vjb3JlOkVQYWNrYWdlPgpkaWZmIC0tZ2l0IGEvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5hdXRvbWF0aWNleHBlcmltZW50L25vdGljZS5odG1sIGIvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5hdXRvbWF0aWNleHBlcmltZW50L25vdGljZS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM2YWY5NjYKLS0tIC9kZXYvbnVsbAorKysgYi9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQvbm90aWNlLmh0bWwKQEAgLTAsMCArMSw3OSBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMC8vRU4iPgorPGh0bWw+Cis8aGVhZD4KKzxtZXRhIGh0dHAtZXF1aXY9Q29udGVudC1UeXBlIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1pc28tODg1OS0xIj4KKzx0aXRsZT5FY2xpcHNlLm9yZyBTb2Z0d2FyZSBVc2VyIEFncmVlbWVudDwvdGl0bGU+Cis8L2hlYWQ+CisKKzxib2R5IGxhbmc9IkVOLVVTIiBsaW5rPWJsdWUgdmxpbms9cHVycGxlPgorPGgyPkVjbGlwc2UgRm91bmRhdGlvbiBTb2Z0d2FyZSBVc2VyIEFncmVlbWVudDwvaDI+Cis8cD5NYXJjaCAxNywgMjAwNTwvcD4KKworPGgzPlVzYWdlIE9mIENvbnRlbnQ8L2gzPgorCis8cD5USEUgRUNMSVBTRSBGT1VOREFUSU9OIE1BS0VTIEFWQUlMQUJMRSBTT0ZUV0FSRSwgRE9DVU1FTlRBVElPTiwgSU5GT1JNQVRJT04gQU5EL09SIE9USEVSIE1BVEVSSUFMUyBGT1IgT1BFTiBTT1VSQ0UgUFJPSkVDVFMKKyAgIChDT0xMRUNUSVZFTFkgJnF1b3Q7Q09OVEVOVCZxdW90OykuICBVU0UgT0YgVEhFIENPTlRFTlQgSVMgR09WRVJORUQgQlkgVEhFIFRFUk1TIEFORCBDT05ESVRJT05TIE9GIFRISVMgQUdSRUVNRU5UIEFORC9PUiBUSEUgVEVSTVMgQU5ECisgICBDT05ESVRJT05TIE9GIExJQ0VOU0UgQUdSRUVNRU5UUyBPUiBOT1RJQ0VTIElORElDQVRFRCBPUiBSRUZFUkVOQ0VEIEJFTE9XLiAgQlkgVVNJTkcgVEhFIENPTlRFTlQsIFlPVSBBR1JFRSBUSEFUIFlPVVIgVVNFCisgICBPRiBUSEUgQ09OVEVOVCBJUyBHT1ZFUk5FRCBCWSBUSElTIEFHUkVFTUVOVCBBTkQvT1IgVEhFIFRFUk1TIEFORCBDT05ESVRJT05TIE9GIEFOWSBBUFBMSUNBQkxFIExJQ0VOU0UgQUdSRUVNRU5UUyBPUgorICAgTk9USUNFUyBJTkRJQ0FURUQgT1IgUkVGRVJFTkNFRCBCRUxPVy4gIElGIFlPVSBETyBOT1QgQUdSRUUgVE8gVEhFIFRFUk1TIEFORCBDT05ESVRJT05TIE9GIFRISVMgQUdSRUVNRU5UIEFORCBUSEUgVEVSTVMgQU5ECisgICBDT05ESVRJT05TIE9GIEFOWSBBUFBMSUNBQkxFIExJQ0VOU0UgQUdSRUVNRU5UUyBPUiBOT1RJQ0VTIElORElDQVRFRCBPUiBSRUZFUkVOQ0VEIEJFTE9XLCBUSEVOIFlPVSBNQVkgTk9UIFVTRSBUSEUgQ09OVEVOVC48L3A+CisgICAKKzxoMz5BcHBsaWNhYmxlIExpY2Vuc2VzPC9oMz4gICAKKyAgIAorPHA+VW5sZXNzIG90aGVyd2lzZSBpbmRpY2F0ZWQsIGFsbCBDb250ZW50IG1hZGUgYXZhaWxhYmxlIGJ5IHRoZSBFY2xpcHNlIEZvdW5kYXRpb24gaXMgcHJvdmlkZWQgdG8geW91IHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMAorICAgKCZxdW90O0VQTCZxdW90OykuICBBIGNvcHkgb2YgdGhlIEVQTCBpcyBwcm92aWRlZCB3aXRoIHRoaXMgQ29udGVudCBhbmQgaXMgYWxzbyBhdmFpbGFibGUgYXQgPGEgaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwiPmh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sPC9hPi4KKyAgIEZvciBwdXJwb3NlcyBvZiB0aGUgRVBMLCAmcXVvdDtQcm9ncmFtJnF1b3Q7IHdpbGwgbWVhbiB0aGUgQ29udGVudC48L3A+CisKKzxwPkNvbnRlbnQgaW5jbHVkZXMsIGJ1dCBpcyBub3QgbGltaXRlZCB0bywgc291cmNlIGNvZGUsIG9iamVjdCBjb2RlLCBkb2N1bWVudGF0aW9uIGFuZCBvdGhlciBmaWxlcyBtYWludGFpbmVkIGluIHRoZSBFY2xpcHNlLm9yZyBDVlMgcmVwb3NpdG9yeSAoJnF1b3Q7UmVwb3NpdG9yeSZxdW90OykgaW4gQ1ZTCisgICBtb2R1bGVzICgmcXVvdDtNb2R1bGVzJnF1b3Q7KSBhbmQgbWFkZSBhdmFpbGFibGUgYXMgZG93bmxvYWRhYmxlIGFyY2hpdmVzICgmcXVvdDtEb3dubG9hZHMmcXVvdDspLjwvcD4KKyAgIAorPHVsPgorCTxsaT5Db250ZW50IG1heSBiZSBzdHJ1Y3R1cmVkIGFuZCBwYWNrYWdlZCBpbnRvIG1vZHVsZXMgdG8gZmFjaWxpdGF0ZSBkZWxpdmVyaW5nLCBleHRlbmRpbmcsIGFuZCB1cGdyYWRpbmcgdGhlIENvbnRlbnQuICBUeXBpY2FsIG1vZHVsZXMgbWF5IGluY2x1ZGUgcGx1Zy1pbnMgKCZxdW90O1BsdWctaW5zJnF1b3Q7KSwgcGx1Zy1pbiBmcmFnbWVudHMgKCZxdW90O0ZyYWdtZW50cyZxdW90OyksIGFuZCBmZWF0dXJlcyAoJnF1b3Q7RmVhdHVyZXMmcXVvdDspLjwvbGk+CisJPGxpPkVhY2ggUGx1Zy1pbiBvciBGcmFnbWVudCBtYXkgYmUgcGFja2FnZWQgYXMgYSBzdWItZGlyZWN0b3J5IG9yIEpBUiAoSmF2YSZ0cmFkZTsgQVJjaGl2ZSkgaW4gYSBkaXJlY3RvcnkgbmFtZWQgJnF1b3Q7cGx1Z2lucyZxdW90Oy48L2xpPgorCTxsaT5BIEZlYXR1cmUgaXMgYSBidW5kbGUgb2Ygb25lIG9yIG1vcmUgUGx1Zy1pbnMgYW5kL29yIEZyYWdtZW50cyBhbmQgYXNzb2NpYXRlZCBtYXRlcmlhbC4gIEVhY2ggRmVhdHVyZSBtYXkgYmUgcGFja2FnZWQgYXMgYSBzdWItZGlyZWN0b3J5IGluIGEgZGlyZWN0b3J5IG5hbWVkICZxdW90O2ZlYXR1cmVzJnF1b3Q7LiAgV2l0aGluIGEgRmVhdHVyZSwgZmlsZXMgbmFtZWQgJnF1b3Q7ZmVhdHVyZS54bWwmcXVvdDsgbWF5IGNvbnRhaW4gYSBsaXN0IG9mIHRoZSBuYW1lcyBhbmQgdmVyc2lvbiBudW1iZXJzIG9mIHRoZSBQbHVnLWlucworICAgICAgYW5kL29yIEZyYWdtZW50cyBhc3NvY2lhdGVkIHdpdGggdGhhdCBGZWF0dXJlLjwvbGk+CisJPGxpPkZlYXR1cmVzIG1heSBhbHNvIGluY2x1ZGUgb3RoZXIgRmVhdHVyZXMgKCZxdW90O0luY2x1ZGVkIEZlYXR1cmVzJnF1b3Q7KS4gV2l0aGluIGEgRmVhdHVyZSwgZmlsZXMgbmFtZWQgJnF1b3Q7ZmVhdHVyZS54bWwmcXVvdDsgbWF5IGNvbnRhaW4gYSBsaXN0IG9mIHRoZSBuYW1lcyBhbmQgdmVyc2lvbiBudW1iZXJzIG9mIEluY2x1ZGVkIEZlYXR1cmVzLjwvbGk+Cis8L3VsPiAgIAorIAorPHA+VGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIGdvdmVybmluZyBQbHVnLWlucyBhbmQgRnJhZ21lbnRzIHNob3VsZCBiZSBjb250YWluZWQgaW4gZmlsZXMgbmFtZWQgJnF1b3Q7YWJvdXQuaHRtbCZxdW90OyAoJnF1b3Q7QWJvdXRzJnF1b3Q7KS4gVGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIGdvdmVybmluZyBGZWF0dXJlcyBhbmQKK0luY2x1ZGVkIEZlYXR1cmVzIHNob3VsZCBiZSBjb250YWluZWQgaW4gZmlsZXMgbmFtZWQgJnF1b3Q7bGljZW5zZS5odG1sJnF1b3Q7ICgmcXVvdDtGZWF0dXJlIExpY2Vuc2VzJnF1b3Q7KS4gIEFib3V0cyBhbmQgRmVhdHVyZSBMaWNlbnNlcyBtYXkgYmUgbG9jYXRlZCBpbiBhbnkgZGlyZWN0b3J5IG9mIGEgRG93bmxvYWQgb3IgTW9kdWxlCitpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0byB0aGUgZm9sbG93aW5nIGxvY2F0aW9uczo8L3A+CisKKzx1bD4KKwk8bGk+VGhlIHRvcC1sZXZlbCAocm9vdCkgZGlyZWN0b3J5PC9saT4KKwk8bGk+UGx1Zy1pbiBhbmQgRnJhZ21lbnQgZGlyZWN0b3JpZXM8L2xpPgorCTxsaT5JbnNpZGUgUGx1Zy1pbnMgYW5kIEZyYWdtZW50cyBwYWNrYWdlZCBhcyBKQVJzPC9saT4KKwk8bGk+U3ViLWRpcmVjdG9yaWVzIG9mIHRoZSBkaXJlY3RvcnkgbmFtZWQgJnF1b3Q7c3JjJnF1b3Q7IG9mIGNlcnRhaW4gUGx1Zy1pbnM8L2xpPgorCTxsaT5GZWF0dXJlIGRpcmVjdG9yaWVzPC9saT4KKzwvdWw+CisJCQorPHA+Tm90ZTogaWYgYSBGZWF0dXJlIG1hZGUgYXZhaWxhYmxlIGJ5IHRoZSBFY2xpcHNlIEZvdW5kYXRpb24gaXMgaW5zdGFsbGVkIHVzaW5nIHRoZSBFY2xpcHNlIFVwZGF0ZSBNYW5hZ2VyLCB5b3UgbXVzdCBhZ3JlZSB0byBhIGxpY2Vuc2UgKCZxdW90O0ZlYXR1cmUgVXBkYXRlIExpY2Vuc2UmcXVvdDspIGR1cmluZyB0aGUKK2luc3RhbGxhdGlvbiBwcm9jZXNzLiAgSWYgdGhlIEZlYXR1cmUgY29udGFpbnMgSW5jbHVkZWQgRmVhdHVyZXMsIHRoZSBGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlIHNob3VsZCBlaXRoZXIgcHJvdmlkZSB5b3Ugd2l0aCB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgZ292ZXJuaW5nIHRoZSBJbmNsdWRlZCBGZWF0dXJlcyBvcgoraW5mb3JtIHlvdSB3aGVyZSB5b3UgY2FuIGxvY2F0ZSB0aGVtLiAgRmVhdHVyZSBVcGRhdGUgTGljZW5zZXMgbWF5IGJlIGZvdW5kIGluIHRoZSAmcXVvdDtsaWNlbnNlJnF1b3Q7IHByb3BlcnR5IG9mIGZpbGVzIG5hbWVkICZxdW90O2ZlYXR1cmUucHJvcGVydGllcyZxdW90OyBmb3VuZCB3aXRoaW4gYSBGZWF0dXJlLgorU3VjaCBBYm91dHMsIEZlYXR1cmUgTGljZW5zZXMsIGFuZCBGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlcyBjb250YWluIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyAob3IgcmVmZXJlbmNlcyB0byBzdWNoIHRlcm1zIGFuZCBjb25kaXRpb25zKSB0aGF0IGdvdmVybiB5b3VyIHVzZSBvZiB0aGUgYXNzb2NpYXRlZCBDb250ZW50IGluCit0aGF0IGRpcmVjdG9yeS48L3A+CisKKzxwPlRIRSBBQk9VVFMsIEZFQVRVUkUgTElDRU5TRVMsIEFORCBGRUFUVVJFIFVQREFURSBMSUNFTlNFUyBNQVkgUkVGRVIgVE8gVEhFIEVQTCBPUiBPVEhFUiBMSUNFTlNFIEFHUkVFTUVOVFMsIE5PVElDRVMgT1IgVEVSTVMgQU5EIENPTkRJVElPTlMuICBTT01FIE9GIFRIRVNFCitPVEhFUiBMSUNFTlNFIEFHUkVFTUVOVFMgTUFZIElOQ0xVREUgKEJVVCBBUkUgTk9UIExJTUlURUQgVE8pOjwvcD4KKworPHVsPgorCTxsaT5Db21tb24gUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjAgKGF2YWlsYWJsZSBhdCA8YSBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2NwbC12MTAuaHRtbCI+aHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9jcGwtdjEwLmh0bWw8L2E+KTwvbGk+CisJPGxpPkFwYWNoZSBTb2Z0d2FyZSBMaWNlbnNlIDEuMSAoYXZhaWxhYmxlIGF0IDxhIGhyZWY9Imh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFIj5odHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRTwvYT4pPC9saT4KKwk8bGk+QXBhY2hlIFNvZnR3YXJlIExpY2Vuc2UgMi4wIChhdmFpbGFibGUgYXQgPGEgaHJlZj0iaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wIj5odHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjA8L2E+KTwvbGk+CisJPGxpPklCTSBQdWJsaWMgTGljZW5zZSAxLjAgKGF2YWlsYWJsZSBhdCA8YSBocmVmPSJodHRwOi8vb3NzLnNvZnR3YXJlLmlibS5jb20vZGV2ZWxvcGVyd29ya3Mvb3BlbnNvdXJjZS9saWNlbnNlMTAuaHRtbCI+aHR0cDovL29zcy5zb2Z0d2FyZS5pYm0uY29tL2RldmVsb3BlcndvcmtzL29wZW5zb3VyY2UvbGljZW5zZTEwLmh0bWw8L2E+KTwvbGk+CQorCTxsaT5NZXRybyBMaW5rIFB1YmxpYyBMaWNlbnNlIDEuMDAgKGF2YWlsYWJsZSBhdCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW5ncm91cC5vcmcvb3Blbm1vdGlmL3N1cHBvcnRlcnMvbWV0cm9saW5rL2xpY2Vuc2UuaHRtbCI+aHR0cDovL3d3dy5vcGVuZ3JvdXAub3JnL29wZW5tb3RpZi9zdXBwb3J0ZXJzL21ldHJvbGluay9saWNlbnNlLmh0bWw8L2E+KTwvbGk+CisJPGxpPk1vemlsbGEgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjEgKGF2YWlsYWJsZSBhdCA8YSBocmVmPSJodHRwOi8vd3d3Lm1vemlsbGEub3JnL01QTC9NUEwtMS4xLmh0bWwiPmh0dHA6Ly93d3cubW96aWxsYS5vcmcvTVBML01QTC0xLjEuaHRtbDwvYT4pPC9saT4KKzwvdWw+CisKKzxwPklUIElTIFlPVVIgT0JMSUdBVElPTiBUTyBSRUFEIEFORCBBQ0NFUFQgQUxMIFNVQ0ggVEVSTVMgQU5EIENPTkRJVElPTlMgUFJJT1IgVE8gVVNFIE9GIFRIRSBDT05URU5ULiAgSWYgbm8gQWJvdXQsIEZlYXR1cmUgTGljZW5zZSwgb3IgRmVhdHVyZSBVcGRhdGUgTGljZW5zZSBpcyBwcm92aWRlZCwgcGxlYXNlCitjb250YWN0IHRoZSBFY2xpcHNlIEZvdW5kYXRpb24gdG8gZGV0ZXJtaW5lIHdoYXQgdGVybXMgYW5kIGNvbmRpdGlvbnMgZ292ZXJuIHRoYXQgcGFydGljdWxhciBDb250ZW50LjwvcD4KKworPGgzPkNyeXB0b2dyYXBoeTwvaDM+CisKKzxwPkNvbnRlbnQgbWF5IGNvbnRhaW4gZW5jcnlwdGlvbiBzb2Z0d2FyZS4gVGhlIGNvdW50cnkgaW4gd2hpY2ggeW91IGFyZSBjdXJyZW50bHkgbWF5IGhhdmUgcmVzdHJpY3Rpb25zIG9uIHRoZSBpbXBvcnQsIHBvc3Nlc3Npb24sIGFuZCB1c2UsIGFuZC9vciByZS1leHBvcnQgdG8KKyAgIGFub3RoZXIgY291bnRyeSwgb2YgZW5jcnlwdGlvbiBzb2Z0d2FyZS4gQkVGT1JFIHVzaW5nIGFueSBlbmNyeXB0aW9uIHNvZnR3YXJlLCBwbGVhc2UgY2hlY2sgdGhlIGNvdW50cnkncyBsYXdzLCByZWd1bGF0aW9ucyBhbmQgcG9saWNpZXMgY29uY2VybmluZyB0aGUgaW1wb3J0LAorICAgcG9zc2Vzc2lvbiwgb3IgdXNlLCBhbmQgcmUtZXhwb3J0IG9mIGVuY3J5cHRpb24gc29mdHdhcmUsIHRvIHNlZSBpZiB0aGlzIGlzIHBlcm1pdHRlZC48L3A+CisgICAKKzxzbWFsbD5KYXZhIGFuZCBhbGwgSmF2YS1iYXNlZCB0cmFkZW1hcmtzIGFyZSB0cmFkZW1hcmtzIG9mIFN1biBNaWNyb3N5c3RlbXMsIEluYy4gaW4gdGhlIFVuaXRlZCBTdGF0ZXMsIG90aGVyIGNvdW50cmllcywgb3IgYm90aC48L3NtYWxsPiAgIAorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5hdXRvbWF0aWNleHBlcmltZW50L3BsdWdpbi5wcm9wZXJ0aWVzIGIvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5hdXRvbWF0aWNleHBlcmltZW50L3BsdWdpbi5wcm9wZXJ0aWVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE4YWI0N2YKLS0tIC9kZXYvbnVsbAorKysgYi9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQvcGx1Z2luLnByb3BlcnRpZXMKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5hdXRvbWF0aWNleHBlcmltZW50L3BsdWdpbi54bWwgYi9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQvcGx1Z2luLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45OTU3ZGRmCi0tLSAvZGV2L251bGwKKysrIGIvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5hdXRvbWF0aWNleHBlcmltZW50L3BsdWdpbi54bWwKQEAgLTAsMCArMSwxMjYgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+DQorPD9lY2xpcHNlIHZlcnNpb249IjMuMiI/Pg0KKzxwbHVnaW4+DQorCQ0KKwk8ZXh0ZW5zaW9uLXBvaW50IGlkPSJhbGdvcml0aG0iIG5hbWU9IiVFUF9BbGdvcml0aG0iIHNjaGVtYT0ic2NoZW1hL2FsZ29yaXRobS5leHNkIi8+DQorCQ0KKyAgIDxleHRlbnNpb24NCisgICAgICAgICBwb2ludD0ib3JnLmVjbGlwc2UudWkubmV3V2l6YXJkcyI+DQorICAgICAgICAgPHdpemFyZA0KKyAgICAgICAgICAgIGNhdGVnb3J5PSJvcmcuZWNsaXBzZS5zdGVtLnVpLndpemFyZHMuc3RlbWNhdGVnb3J5Ig0KKyAgICAgICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQudWkuTmV3QXV0b21hdGljRXhwZXJpbWVudFdpemFyZCINCisgICAgICAgICAgICBpY29uPSJpY29ucy9mdWxsL2N1c3RvbW9iajE2L0F1dG9tYXRpY0V4cGVyaW1lbnQuZ2lmIg0KKyAgICAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5zdGVtLnVpLndpemFyZHMubmV3YXV0b2V4cGVyaW1lbnQiDQorICAgICAgICAgICAgbmFtZT0iQXV0b21hdGljIEV4cGVyaW1lbnQiPg0KKyAgICAgIDwvd2l6YXJkPg0KKyAgIDwvZXh0ZW5zaW9uPg0KKyAgIA0KKwk8ZXh0ZW5zaW9uDQorICAgICAgICBwb2ludD0ib3JnLmVjbGlwc2UudWkubWVudXMiPiAgICAgIA0KKyAgICAgIDxtZW51Q29udHJpYnV0aW9uDQorICAgICAgICAgICAgbG9jYXRpb25VUkk9InRvb2xiYXI6b3JnLmVjbGlwc2UudWkubWFpbi50b29sYmFyP2FmdGVyPWFkZGl0aW9ucyI+DQorICAgICAgICAgPHRvb2xiYXINCisgICAgICAgICAgICAgICBpZD0ib3JnLmVjbGlwc2Uuc3RlbS51aS50b29sYmFyLm5ld3dpemFyZHMiPg0KKyAgICAgICAgICAgIDxjb21tYW5kDQorICAgICAgICAgICAgICAgICAgY29tbWFuZElkPSJvcmcuZWNsaXBzZS5zdGVtLnVpLmNvbW1hbmQud2l6LmF1dG9leHBlcmltZW50Ig0KKyAgICAgICAgICAgICAgICAgIGljb249Imljb25zL2Z1bGwvY3VzdG9tb2JqMTYvQXV0b21hdGljRXhwZXJpbWVudC5naWYiDQorICAgICAgICAgICAgICAgICAgbGFiZWw9IkF1dG9tYXRpYyBFeHBlcmltZW50Ig0KKyAgICAgICAgICAgICAgICAgIHN0eWxlPSJwdXNoIg0KKyAgICAgICAgICAgICAgICAgIHRvb2x0aXA9IkF1dG9tYXRpYyBFeHBlcmltZW50Ij4NCisgICAgICAgICAgICA8L2NvbW1hbmQ+DQorICAgICAgICAgICAgPHNlcGFyYXRvcg0KKyAgICAgICAgICAgICAgICAgIG5hbWU9ImFkZGl0aW9ucyI+DQorICAgICAgICAgICAgPC9zZXBhcmF0b3I+DQorICAgICAgICAgPC90b29sYmFyPg0KKyAgICAgIDwvbWVudUNvbnRyaWJ1dGlvbj4NCisgICAgIA0KKyAgPC9leHRlbnNpb24+DQorICANCisgIDxleHRlbnNpb24NCisgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5zdGVtLnVpLlNURU1QZXJzcGVjdGl2ZSINCisgICAgICAgIHBvaW50PSJvcmcuZWNsaXBzZS51aS5wZXJzcGVjdGl2ZXMiPg0KKyAgICAgPHBlcnNwZWN0aXZlDQorICAgICAgICAgICBjbGFzcz0ib3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5hdXRvbWF0aWNleHBlcmltZW50LnBlcnNwZWN0aXZlcy5BdXRvbWF0aWNFeHBlcmltZW50Ig0KKyAgICAgICAgICAgaWNvbj0iaWNvbnMvZnVsbC9jdXN0b21vYmoxNi9BdXRvbWF0aWNFeHBlcmltZW50LmdpZiINCisgICAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQucGVyc3BlY3RpdmUiDQorICAgICAgICAgICBuYW1lPSIlX1VJX0F1dG9tYXRpY0V4cGVyaW1lbnRfUGVyc3BlY3RpdmUiPg0KKyAgICAgPC9wZXJzcGVjdGl2ZT4NCisgIDwvZXh0ZW5zaW9uPg0KKyAgPGV4dGVuc2lvbg0KKyAgICAgICAgIHBvaW50PSJvcmcuZWNsaXBzZS51aS52aWV3cyI+DQorICAgICAgPHZpZXcNCisgICAgICAgICAgICBhbGxvd011bHRpcGxlPSJ0cnVlIg0KKyAgICAgICAgICAgIGNhdGVnb3J5PSJvcmcuZWNsaXBzZS5zdGVtLnVpLnZpZXdzIg0KKyAgICAgICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQudmlld3MuQXV0b0V4cFZpZXciDQorICAgICAgICAgICAgaWNvbj0iaWNvbnMvZnVsbC9jdXN0b21vYmoxNi9BdXRvbWF0aWNFeHBlcmltZW50LmdpZiINCisgICAgICAgICAgICBpZD0ib3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5hdXRvbWF0aWNleHBlcmltZW50Ig0KKyAgICAgICAgICAgIG5hbWU9IiVBRV9WaWV3Ij4NCisgICAgICA8L3ZpZXc+DQorICAgPC9leHRlbnNpb24+DQorICA8ZXh0ZW5zaW9uDQorICAgICAgICBwb2ludD0ib3JnLmVjbGlwc2UudWkuY29tbWFuZHMiPg0KKyAgICAgPGNhdGVnb3J5DQorICAgICAgICAgICBkZXNjcmlwdGlvbj0iJV9VSV9TVEVNX1dpekNtZF9DYXRfRGVzYyINCisgICAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5zdGVtLnVpLndpemFyZHMiDQorICAgICAgICAgICBuYW1lPSIlX1VJX1NURU1fV2l6Q21kX0NhdF9OYW1lIj4NCisgICAgIDwvY2F0ZWdvcnk+ICAgICANCisgICAgIDxjb21tYW5kDQorICAgICAgICAgICBkZWZhdWx0SGFuZGxlcj0ib3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5hdXRvbWF0aWNleHBlcmltZW50LnVpLk5ld0F1dG9tYXRpY0V4cGVyaW1lbnRXaXphcmQkTmV3QXV0b21hdGljRXhwZXJpbWVudFdpemFyZENvbW1hbmRIYW5kbGVyIg0KKyAgICAgICAgICAgZGVzY3JpcHRpb249Ik5ldyBBdXRvbWF0aWMgRXhwZXJpbWVudCINCisgICAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5zdGVtLnVpLmNvbW1hbmQud2l6LmF1dG9leHBlcmltZW50Ig0KKyAgICAgICAgICAgbmFtZT0iTmV3IEF1dG9tYXRpYyBFeHBlcmltZW50Ij4NCisgICAgIDwvY29tbWFuZD4NCisgIDwvZXh0ZW5zaW9uPg0KKyAgPGV4dGVuc2lvbg0KKyAgICAgICAgcG9pbnQ9Im9yZy5lY2xpcHNlLnVpLmVkaXRvcnMiPg0KKyAgICAgPGVkaXRvcg0KKyAgICAgICAgICBjbGFzcz0ib3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5hdXRvbWF0aWNleHBlcmltZW50LnByZXNlbnRhdGlvbi5BdXRvbWF0aWNleHBlcmltZW50RWRpdG9yIg0KKyAgICAgICAgICBjb250cmlidXRvckNsYXNzPSJvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQucHJlc2VudGF0aW9uLkF1dG9tYXRpY2V4cGVyaW1lbnRBY3Rpb25CYXJDb250cmlidXRvciINCisgICAgICAgICAgZGVmYXVsdD0iZmFsc2UiDQorICAgICAgICAgIGV4dGVuc2lvbnM9ImF1dG9tYXRpY2V4cGVyaW1lbnQiDQorICAgICAgICAgIGljb249Imljb25zL2Z1bGwvY3VzdG9tb2JqMTYvQXV0b21hdGljRXhwZXJpbWVudC5naWYiDQorICAgICAgICAgIGlkPSJhdXRvbWF0aWNleHBlcmltZW50LnByZXNlbnRhdGlvbi5BdXRvbWF0aWNFeHBlcmltZW50RWRpdG9ySUQiDQorICAgICAgICAgIG5hbWU9IkF1dG9tYXRpYyBFeHBlcmltZW50IEVkaXRvciI+DQorICAgIDwvZWRpdG9yPg0KKyAgPC9leHRlbnNpb24+DQorICANCisgIDxleHRlbnNpb24gcG9pbnQ9Im9yZy5lY2xpcHNlLmVtZi5lZGl0Lml0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3JpZXMiPg0KKyAgICAgIDxmYWN0b3J5DQorICAgICAgICAgICAgdXJpPSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9hdXRvbWF0aWNleHBlcmltZW50LmVjb3JlIg0KKyAgICAgICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQucHJvdmlkZXIuQXV0b21hdGljZXhwZXJpbWVudEl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5Ig0KKyAgICAgICAgICAgIHN1cHBvcnRlZFR5cGVzPQ0KKyAgICAgICAgICAgICAgIm9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklFZGl0aW5nRG9tYWluSXRlbVByb3ZpZGVyDQorICAgICAgICAgICAgICAgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVN0cnVjdHVyZWRJdGVtQ29udGVudFByb3ZpZGVyDQorICAgICAgICAgICAgICAgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVRyZWVJdGVtQ29udGVudFByb3ZpZGVyDQorICAgICAgICAgICAgICAgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1MYWJlbFByb3ZpZGVyDQorICAgICAgICAgICAgICAgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1Qcm9wZXJ0eVNvdXJjZSIvPg0KKyAgIDwvZXh0ZW5zaW9uPg0KKyAgIA0KKyAgIDxleHRlbnNpb24gcG9pbnQ9Im9yZy5lY2xpcHNlLmVtZi5lY29yZS5nZW5lcmF0ZWRfcGFja2FnZSI+DQorICAgICAgPHBhY2thZ2UNCisgICAgICAgICAgICB1cmk9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2F1dG9tYXRpY2V4cGVyaW1lbnQuZWNvcmUiDQorICAgICAgICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuYXV0b21hdGljZXhwZXJpbWVudC5BdXRvbWF0aWNleHBlcmltZW50UGFja2FnZSINCisgICAgICAgICAgICBnZW5Nb2RlbD0ibW9kZWwvYXV0b21hdGljZXhwZXJpbWVudC5nZW5tb2RlbCIvPg0KKyAgIDwvZXh0ZW5zaW9uPg0KKyAgDQorICA8ZXh0ZW5zaW9uDQorICAgICAgICBwb2ludD0ib3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLmFkYXB0ZXJzIj4NCisgICAgICAgICAgPGZhY3RvcnkgDQorICAgICAgICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLnN0ZW0uam9icy5hZGFwdGVycy5leGVjdXRhYmxlLklkZW50aWZpYWJsZUV4ZWN1dGFibGVBZGFwdGVyRmFjdG9yeSIgDQorICAgICAgICAgICAgYWRhcHRhYmxlVHlwZT0ib3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5hdXRvbWF0aWNleHBlcmltZW50LmltcGwuQXV0b21hdGljRXhwZXJpbWVudEltcGwiPg0KKyAgICAgICAgICAgIDxhZGFwdGVyIHR5cGU9Im9yZy5lY2xpcHNlLnN0ZW0uam9icy5leGVjdXRpb24uSUV4ZWN1dGFibGUiLz4NCisgICAgICAgICA8L2ZhY3Rvcnk+DQorCTwvZXh0ZW5zaW9uPg0KKwkNCisJPGV4dGVuc2lvbg0KKyAgICAgICAgcG9pbnQ9Im9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuYXV0b21hdGljZXhwZXJpbWVudC5hbGdvcml0aG0iPg0KKyAgICAgPGNsYXNzZGVmIGNsYXNzPSJvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQuaW1wbC5BdXRvbWF0aWNFeHBlcmltZW50SW1wbCIvPg0KKyAgICAgPGR1Ymxpbl9jb3JlDQorICAgICAgICAgICBjYXRlZ29yeV9pZD0iLyINCisgICAgICAgICAgIGNyZWF0b3I9IiVkY19jcmVhdG9yX2VkbHVuZCINCisgICAgICAgICAgIGRlc2NyaXB0aW9uPSIlZGNfZGVzY19ORUxERVIiDQorICAgICAgICAgICBpZGVudGlmaWVyPSJmb28iDQorICAgICAgICAgICB0aXRsZT0iJWRjX2Rlc2NfTkVMREVSIi8+DQorICA8L2V4dGVuc2lvbj4NCisgIA0KKzwvcGx1Z2luPg0KZGlmZiAtLWdpdCBhL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuYXV0b21hdGljZXhwZXJpbWVudC9wbHVnaW5fZGUucHJvcGVydGllcyBiL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuYXV0b21hdGljZXhwZXJpbWVudC9wbHVnaW5fZGUucHJvcGVydGllcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZTc4Yzg5Ci0tLSAvZGV2L251bGwKKysrIGIvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5hdXRvbWF0aWNleHBlcmltZW50L3BsdWdpbl9kZS5wcm9wZXJ0aWVzCkBAIC0wLDAgKzEsMTU5IEBACisjCisjIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjICAqIENvcHlyaWdodCAoYykgMjAwNiwgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyMgICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworIyAgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyMgICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyMgICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyMgICoKKyMgICogQ29udHJpYnV0b3JzOgorIyAgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisjICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyMgVG8gY29kZSBkZXZlbG9wZXI6CisjICAgRG8gTk9UIGNoYW5nZSB0aGUgcHJvcGVydGllcyBiZXR3ZWVuIHRoaXMgbGluZSBhbmQgdGhlCisjICAgIiUlJSBFTkQgT0YgVFJBTlNMQVRFRCBQUk9QRVJUSUVTICUlJSIgbGluZS4KKyMgICBNYWtlIGEgbmV3IHByb3BlcnR5IG5hbWUsIGFwcGVuZCB0byB0aGUgZW5kIG9mIHRoZSBmaWxlIGFuZCBjaGFuZ2UKKyMgICB0aGUgY29kZSB0byB1c2UgdGhlIG5ldyBwcm9wZXJ0eS4KKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyMgJSUlIEVORCBPRiBUUkFOU0xBVEVEIFBST1BFUlRJRVMgJSUlCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK3BsdWdpbk5hbWU9U1RFTSBBdG9tYXRpc2NoZXMtRXhwZXJpbWVudC1Ub29sCitwcm92aWRlck5hbWU9RWNsaXBzZS5vcmcKK0FFX1ZpZXc9QXV0b21hdGlzY2hlcyBFeHBlcmltZW50CisKKyMgcHJvZHVjdCBuYW1lCitfVUlfUHJvZHVjdF9OYW1lPVNURU0KKworIyBDb21tb24gS2V5cworX1VJX1NURU09U1RFTQorX1VJX0RlY29yYXRvcnM9RGVrb3JpZXJlcgorX1VJX0V4cGVyaW1lbnRzPUV4cGVyaW1lbnRlCitfVUlfR3JhcGhzPUdyYXBoZW4KK19VSV9JZGVudGlmaWFibGVzPUlkZW50aWZpemllcmJhcmUKK19VSV9Nb2RlbHM9TW9kZWxsZQorX1VJX01vZGlmaWVycz1Nb2RpZmlrYXRvcmVuCitfVUlfUHJlZGljYXRlcz1FaWdlbnNjaGFmdAorX1VJX1NjZW5hcmlvcz1TemVuYXJpZW4KK19VSV9TZXF1ZW5jZXJzPVNlcXVlbnplcgorX1VJX1RyaWdnZXJzPUF1c2xcdTAwZjZzZXIKKworCisKKyMgUGVyc3BlY3RpdmVzCitfVUlfQXV0b21hdGljRXhwZXJpbWVudF9QZXJzcGVjdGl2ZT1BdXRvbWF0aXNjaGVzIEV4cGVyaW1lbnQKKworCitfVUlfQXV0b21hdGljRXhwZXJpbWVudF90eXBlPUF1dG9tYXRpc2NoZXMgRXhwZXJpbWVudAorX1VJX01vZGlmaWFibGVQYXJhbWV0ZXJfdHlwZT1WZXJcdTAwZTRuZGVyYmFyZSBQYXJhbWV0ZXIKK19VSV9Vbmtub3duX3R5cGU9T2JqZWt0CisKK19VSV9Vbmtub3duX2RhdGF0eXBlPVdlcnQKKworX1VJX0F1dG9tYXRpY0V4cGVyaW1lbnRfYmFzZVNjZW5hcmlvX2ZlYXR1cmU9QmFzaXMtU3plbmFyaW8KK19VSV9BdXRvbWF0aWNFeHBlcmltZW50X3BhcmFtZXRlcnNfZmVhdHVyZT1QYXJhbWV0ZXIKK19VSV9BdXRvbWF0aWNFeHBlcmltZW50X2Vycm9yQW5hbHlzaXNBbGdvcml0aG1fZmVhdHVyZT1GZWhsZXJhbmFseXNlLUFsZ29yaXRobXVzCitfVUlfQXV0b21hdGljRXhwZXJpbWVudF9lcnJvckZ1bmN0aW9uX2ZlYXR1cmU9RXJyb3ItRnVua3Rpb24KK19VSV9BdXRvbWF0aWNFeHBlcmltZW50X3RvbGVyYW5jZV9mZWF0dXJlPVRvbGVyYW56CitfVUlfQXV0b21hdGljRXhwZXJpbWVudF9yZWZlcmFuY2VEYXRhRGlyX2ZlYXR1cmU9UmVmcmVuemVuZGF0ZW4gVmVyemVpY2huaXMKK19VSV9BdXRvbWF0aWNFeHBlcmltZW50X21heGltdW1OdW1iZXJPZkl0ZXJhdGlvbnNfZmVhdHVyZT1NYXhpbWFsZSBBbnphaGwgZGVyIEl0ZXJhdGlvbmVuCitfVUlfTW9kaWZpYWJsZVBhcmFtZXRlcl9pbml0aWFsVmFsdWVfZmVhdHVyZT1Jbml0aWFsZXIgV2VydAorX1VJX01vZGlmaWFibGVQYXJhbWV0ZXJfZmVhdHVyZV9mZWF0dXJlPU1lcmttYWwKK19VSV9Nb2RpZmlhYmxlUGFyYW1ldGVyX3N0ZXBfZmVhdHVyZT1TY2hyaXR0CitfVUlfTW9kaWZpYWJsZVBhcmFtZXRlcl9mZWF0dXJlTmFtZV9mZWF0dXJlPU1lcmttYWxzbmFtZQorX1VJX1Vua25vd25fZmVhdHVyZT1OaWNodCBzcGV6aWZpemllcnQKKworCitfVUlfQXV0b21hdGljZXhwZXJpbWVudEVkaXRvcl9tZW51PSZBdXRvbWF0aWNleHBlcmltZW50IEVkaXRvcgorCitfVUlfQXV0b21hdGljZXhwZXJpbWVudE1vZGVsV2l6YXJkX2xhYmVsPUF1dG9tYXRpc2NoZXMgRXhwZXJpbWVudHMgTW9kZWxsCitfVUlfQXV0b21hdGljZXhwZXJpbWVudE1vZGVsV2l6YXJkX2Rlc2NyaXB0aW9uPU5ldWVzIEF1dG9tYXRpY2V4cGVyaW1lbnQtTW9kZWxsIGVyc3RlbGxlbgorCitfVUlfQXV0b21hdGljZXhwZXJpbWVudEVkaXRvcl9sYWJlbD1BdXRvbWF0aXNjaGVzIEV4cGVyaW1lbnRzIE1vZGVsbCBFZGl0b3IKKworX1VJX0F1dG9tYXRpY2V4cGVyaW1lbnRFZGl0b3JGaWxlbmFtZURlZmF1bHRCYXNlPU1laW4KK19VSV9BdXRvbWF0aWNleHBlcmltZW50RWRpdG9yRmlsZW5hbWVFeHRlbnNpb25zPUF1dG9tYXRpc2NoZXMgRXhwZXJpbWVudAorCisKK19VSV9Nb2RpZmlhYmxlUGFyYW1ldGVyX2xvd2VyQm91bmRfZmVhdHVyZT1VbnRlcmVyIEdyZW56ZQorX1VJX01vZGlmaWFibGVQYXJhbWV0ZXJfdXBwZXJCb3VuZF9mZWF0dXJlPU9iZXJlIEdyZW56ZQorX1VJX01vZGlmaWFibGVQYXJhbWV0ZXJfZGVjb3JhdG9yX2ZlYXR1cmU9RGVrb3JpZXJlcgorX1VJX01vZGlmaWFibGVQYXJhbWV0ZXJfdGFyZ2V0VVJJX2ZlYXR1cmU9WmllbC1VUkkKK19VSV9BdXRvbWF0aWNFeHBlcmltZW50X3JlSW5pdF9mZWF0dXJlPVJlIEluaXQKK19VSV9DcmVhdGVDaGlsZF90ZXh0PXswfQorX1VJX0NyZWF0ZUNoaWxkX3RleHQyPXsxfSB7MH0KK19VSV9DcmVhdGVDaGlsZF90ZXh0Mz17MX0KK19VSV9DcmVhdGVDaGlsZF90b29sdGlwPU5ldWVzIHswfSB1bnRlciB7MX0gRmVhdHVyZSBlcnN0ZWxsZW4KK19VSV9DcmVhdGVDaGlsZF9kZXNjcmlwdGlvbj1OZXVlcyBLaW5kIHZvbSBUeXAgezB9IGZcdTAwZmNyIGRhcyB7MX0gTWVya21hbCBkZXIgYXVzZ2V3XHUwMGU0aGx0ZW4gezJ9IGVyc3RlbGxlbgorX1VJX0NyZWF0ZVNpYmxpbmdfZGVzY3JpcHRpb249TmV1ZXMgR2VzY2h3aXN0ZXJ0ZWlsIHZvbSBUeXAgezB9IGZcdTAwZmNyIGRlbiBhdXNnZXdcdTAwZTRobHRlbiB7Mn0gdW50ZXIgZGVtIHsxfSBNZXJrbWFsIGRlcyBFbHRlcm50ZWlsIGVyc3RlbGxlbgorCitfVUlfUHJvcGVydHlEZXNjcmlwdG9yX2Rlc2NyaXB0aW9uPXswfSB2b24gezF9CisKK19VSV9HZW5lcmljQXV0b21hdGljRXhwZXJpbWVudF90eXBlPUdlbmVyaXNjaGVzIEF1dG9leHBlcmltZW50CitfVUlfQ3JlYXRlQ2hpbGRfbWVudV9pdGVtPSZOZXcgQ2hpbGQKK19VSV9DcmVhdGVTaWJsaW5nX21lbnVfaXRlbT1OJmV1ZXMgR2VzY2h3aXN0ZXJ0ZWlsCisKK19VSV9TaG93UHJvcGVydGllc1ZpZXdfbWVudV9pdGVtPVNob3cgJiBQcm9wZXJ0aWVzIFZpZXcKK19VSV9SZWZyZXNoVmlld2VyX21lbnVfaXRlbT0mUmVmcmVzaAorCitfVUlfU2VsZWN0aW9uUGFnZV9sYWJlbD1BdXN3YWhsCisKK19VSV9Ob09iamVjdFNlbGVjdGVkPU5pY2h0cyBhdXNnZXdcdTAwZTRobHQKK19VSV9TaW5nbGVPYmplY3RTZWxlY3RlZD1BdXNnZXdcdTAwZTRobHRlcyBPYmpla3Q6IHswfQorX1VJX011bHRpT2JqZWN0U2VsZWN0ZWQ9QXVzZ2V3XHUwMGU0aGx0ZSB7MH0gT2JqZWt0ZQorCitfVUlfT3BlbkVkaXRvckVycm9yX2xhYmVsPUVkaXRvciBcdTAwZjZmZm5lbgorCitfVUlfV2l6YXJkX2NhdGVnb3J5PUJlaXNwaWVsIEVNRiBNb2RlbGwgRXJzdGVsbHVuZ3Nhc3Npc3RlbnQKKworX1VJX0NyZWF0ZU1vZGVsRXJyb3JfbWVzc2FnZT1BdWZnZXRyZXRlbmUgUHJvYmxlbWUgaW4gZGVyIERhdGVpICJ7MH0iCisKK19VSV9XaXphcmRfbGFiZWw9TmV1CisKK19XQVJOX0ZpbGVuYW1lRXh0ZW5zaW9uPURlciBEYXRlaW5hbWUgbXVzcyBhdWYgIi57MH0iIGVuZGVuCitfV0FSTl9GaWxlbmFtZUV4dGVuc2lvbnM9RGVyIERhdGVpbmFtZSBtdXNzIGVpbmUgZGVyIGZvbGdlbmRlbiBFbmR1bmdlbiBoYWJlbjogezB9CisKK19VSV9Nb2RlbE9iamVjdD0mTW9kZWwgT2JqZWN0CitfVUlfWE1MRW5jb2Rpbmc9JlhNTCBFbmNvZGluZworX1VJX1hNTEVuY29kaW5nQ2hvaWNlcz1VVEYtOCBBU0NJSSBVVEYtMTYgVVRGLTE2QkUgVVRGLTE2TEUgSVNPLTg4NTktMQorX1VJX1dpemFyZF9pbml0aWFsX29iamVjdF9kZXNjcmlwdGlvbj1adSBlcnpldWdlbmRlcyBNb2RlbGxvYmpla3Qgd1x1MDBlNGhsZW4KKworX1VJX0ZpbGVDb25mbGljdF9sYWJlbD1EYXRlaWtvbmZsaWt0CitfV0FSTl9GaWxlQ29uZmxpY3Q9RXMgZ2lidCBuaWNodCBnZXNwZWljaGVydGUgXHUwMGM0bmRlcnVuZ2VuLCBkaWUgS29uZmxpa3RlIG1pdCBcdTAwYzRuZGVydW5nZW4gYXVcdTAwZGZlcmhhbGIgZGVzIEVkaXRvcnMgZXJ6ZXVnZW4uIE1cdTAwZjZjaHRlbiBTaWUgZGllIFx1MDBjNG5kZXJ1bmdlbiBpbSBFZGl0b3IgdmVyd2VyZmVuPworCisKK19VSV9BbGdvcml0aG1fdHlwZT1BbGdvcml0aG11cworX1VJX0Vycm9yRnVuY3Rpb25fdHlwZT1FcnJvci1GdW5rdGlvbgorX1VJX1RocmVzaG9sZEVycm9yRnVuY3Rpb25fdHlwZT1HZW56d2VydC1FcnJvci1GdW5rdGlvbgorX1VJX1JlZmVyZW5jZVNjZW5hcmlvRGF0YU1hcF90eXBlPVJlZmVyZW56c3plbmFyaW8tRGF0ZW5rYXJ0ZQorX1VJX1NpbXBsZUVycm9yRnVuY3Rpb25fdHlwZT1TaW1wbGUgRXJyb3ItRnVua3Rpb24KK19VSV9FcnJvclJlc3VsdF90eXBlPUZlaGxlcnJlc3VsdGF0CitfVUlfQXV0b21hdGljRXhwZXJpbWVudF9lcnJvckZ1bmNfZmVhdHVyZT1FcnJvciBGdW5rCitfVUlfRXJyb3JSZXN1bHRfZXJyb3JCeVRpbWVTdGVwX2ZlYXR1cmU9RmVobGVyIGR1cmNoIFRpbWUgU3RlcAorX1VJX0Vycm9yUmVzdWx0X2Vycm9yX2ZlYXR1cmU9RmVobGVyCitfVUlfRXJyb3JSZXN1bHRfcmVmZXJlbmNlQnlUaW1lX2ZlYXR1cmU9UmVmZXJlbnogbmFjaCBaZWl0CitfVUlfRXJyb3JSZXN1bHRfbW9kZWxCeVRpbWVfZmVhdHVyZT1Nb2RlbGwgbmFjaCBaZWl0CitfVUlfRXJyb3JSZXN1bHRfdmFsaWRhdGlvbkVycm9yX2ZlYXR1cmU9VmFsaWRpZXJ1bmdzZmVobGVyCitfVUlfQW5hbHlzaXNFZGl0b3JfbWVudT0mQW5hbHlzaXMgRWRpdG9yCisKK19VSV9QYXJlbnRQYWdlX2xhYmVsPUVsdGVybnRlaWwKK19VSV9MaXN0UGFnZV9sYWJlbD1MaXN0ZQorX1VJX1RyZWVQYWdlX2xhYmVsPUJhdW0KK19VSV9UYWJsZVBhZ2VfbGFiZWw9VGFiZWxsZQorX1VJX1RyZWVXaXRoQ29sdW1uc1BhZ2VfbGFiZWw9QmF1bSBtaXQgU3BhbHRlbgorX1VJX09iamVjdENvbHVtbl9sYWJlbD1PYmpla3QKK19VSV9TZWxmQ29sdW1uX2xhYmVsPVNlbGJzdAorCitfVUlfQW5hbHlzaXNNb2RlbFdpemFyZF9sYWJlbD1BbmFseXNlbW9kZWwKK19VSV9BbmFseXNpc01vZGVsV2l6YXJkX2Rlc2NyaXB0aW9uPU5ldWVzIEFuYWx5c2UtTW9kZWxsIGVyc3RlbGxlbgorCitfVUlfQW5hbHlzaXNFZGl0b3JfbGFiZWw9QW5hbHlzZW1vZGVsIEVkaXRvcgorCitfVUlfQW5hbHlzaXNFZGl0b3JGaWxlbmFtZURlZmF1bHRCYXNlPU1laW4KK19VSV9BbmFseXNpc0VkaXRvckZpbGVuYW1lRXh0ZW5zaW9ucz1BbmFseXNlCisKKworX1VJX09wdGltaXplckFsZ29yaXRobV90eXBlPU9wdGltaWVyZXIgQWxnb3JpdGhtdXMKZGlmZiAtLWdpdCBhL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuYXV0b21hdGljZXhwZXJpbWVudC9wbHVnaW5fa3IucHJvcGVydGllcyBiL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuYXV0b21hdGljZXhwZXJpbWVudC9wbHVnaW5fa3IucHJvcGVydGllcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYzM3YjlmCi0tLSAvZGV2L251bGwKKysrIGIvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5hdXRvbWF0aWNleHBlcmltZW50L3BsdWdpbl9rci5wcm9wZXJ0aWVzCkBAIC0wLDAgKzEsMTU5IEBACisjCisjIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjICAqIENvcHlyaWdodCAoYykgMjAwNiwgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyMgICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworIyAgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyMgICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyMgICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyMgICoKKyMgICogQ29udHJpYnV0b3JzOgorIyAgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisjICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyMgVG8gY29kZSBkZXZlbG9wZXI6CisjICAgRG8gTk9UIGNoYW5nZSB0aGUgcHJvcGVydGllcyBiZXR3ZWVuIHRoaXMgbGluZSBhbmQgdGhlCisjICAgIiUlJSBFTkQgT0YgVFJBTlNMQVRFRCBQUk9QRVJUSUVTICUlJSIgbGluZS4KKyMgICBNYWtlIGEgbmV3IHByb3BlcnR5IG5hbWUsIGFwcGVuZCB0byB0aGUgZW5kIG9mIHRoZSBmaWxlIGFuZCBjaGFuZ2UKKyMgICB0aGUgY29kZSB0byB1c2UgdGhlIG5ldyBwcm9wZXJ0eS4KKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyMgJSUlIEVORCBPRiBUUkFOU0xBVEVEIFBST1BFUlRJRVMgJSUlCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK3BsdWdpbk5hbWU9U1RFTSBcdWM3OTBcdWIzZDkgXHVjMmU0XHVkNWQ4IFx1YjNjNFx1YWQ2YworcHJvdmlkZXJOYW1lPUVjbGlwc2Uub3JnCitBRV9WaWV3PVx1Yzc5MFx1YjNkOVx1ZDY1NFx1YjQxYyBcdWMyZTRcdWQ1ZDgKKworIyBwcm9kdWN0IG5hbWUKK19VSV9Qcm9kdWN0X05hbWU9U1RFTQorCisjIENvbW1vbiBLZXlzCitfVUlfU1RFTT1TVEVNCitfVUlfRGVjb3JhdG9ycz1cdWM3YTVcdWMyZGRcdWM3OTBcdWI0ZTQKK19VSV9FeHBlcmltZW50cz1cdWMyZTRcdWQ1ZDgKK19VSV9HcmFwaHM9XHVhZGY4XHViNzk4XHVkNTA0CitfVUlfSWRlbnRpZmlhYmxlcz1cdWMyZGRcdWJjYzRcdWFjMDBcdWIyYTVcdWQ1NjgKK19VSV9Nb2RlbHM9XHViYWE4XHViMzc4CitfVUlfTW9kaWZpZXJzPVx1YzIxOFx1YzgxNVx1Yzc5MAorX1VJX1ByZWRpY2F0ZXM9XHVjMjIwXHVjNWI0CitfVUlfU2NlbmFyaW9zPVx1YzJkY1x1YjA5OFx1YjlhY1x1YzYyNAorX1VJX1NlcXVlbmNlcnM9XHVjMmRjXHVkMDAwXHVjMTFjCitfVUlfVHJpZ2dlcnM9XHVkMmI4XHViOWFjXHVhYzcwCisKKworCisjIFBlcnNwZWN0aXZlcworX1VJX0F1dG9tYXRpY0V4cGVyaW1lbnRfUGVyc3BlY3RpdmU9XHVjNzkwXHViM2Q5XHVkNjU0XHViNDFjIFx1YzJlNFx1ZDVkOAorCisKK19VSV9BdXRvbWF0aWNFeHBlcmltZW50X3R5cGU9XHVjNzkwXHViM2Q5XHVkNjU0XHViNDFjIFx1YzJlNFx1ZDVkOAorX1VJX01vZGlmaWFibGVQYXJhbWV0ZXJfdHlwZT1cdWMyMThcdWM4MTUgXHVhYzAwXHViMmE1IFx1YmNjMFx1YzIxOAorX1VJX1Vua25vd25fdHlwZT1cdWFjMWNcdWNjYjQKKworX1VJX1Vua25vd25fZGF0YXR5cGU9XHVhYzEyCisKK19VSV9BdXRvbWF0aWNFeHBlcmltZW50X2Jhc2VTY2VuYXJpb19mZWF0dXJlPVx1YWUzMFx1YmNmOCBcdWMyZGNcdWIwOThcdWI5YWNcdWM2MjQKK19VSV9BdXRvbWF0aWNFeHBlcmltZW50X3BhcmFtZXRlcnNfZmVhdHVyZT1cdWI5ZTRcdWFjMWMgXHViY2MwXHVjMjE4CitfVUlfQXV0b21hdGljRXhwZXJpbWVudF9lcnJvckFuYWx5c2lzQWxnb3JpdGhtX2ZlYXR1cmU9XHVjNjI0XHViOTU4IFx1YmQ4NFx1YzExZCBcdWM1NGNcdWFjZTBcdWI5YWNcdWM5OTgKK19VSV9BdXRvbWF0aWNFeHBlcmltZW50X2Vycm9yRnVuY3Rpb25fZmVhdHVyZT1cdWM2MjRcdWI5NTggXHVkNTY4XHVjMjE4CitfVUlfQXV0b21hdGljRXhwZXJpbWVudF90b2xlcmFuY2VfZmVhdHVyZT1cdWIwYjRcdWM1ZjBcdWMxMzEKK19VSV9BdXRvbWF0aWNFeHBlcmltZW50X3JlZmVyYW5jZURhdGFEaXJfZmVhdHVyZT1cdWNjMzhcdWM4NzAgXHViMzcwXHVjNzc0XHVkMTMwIFx1YjUxNFx1YjgwOVx1ZDFhMFx1YjlhYworX1VJX0F1dG9tYXRpY0V4cGVyaW1lbnRfbWF4aW11bU51bWJlck9mSXRlcmF0aW9uc19mZWF0dXJlPVx1YmMxOFx1YmNmNSBcdWNkNWNcdWIzMDAgXHVjNzc4XHVjNmQwCitfVUlfTW9kaWZpYWJsZVBhcmFtZXRlcl9pbml0aWFsVmFsdWVfZmVhdHVyZT1cdWNkMDhcdWFlMzBcdWFjMTIKK19VSV9Nb2RpZmlhYmxlUGFyYW1ldGVyX2ZlYXR1cmVfZmVhdHVyZT1cdWFlMzBcdWIyYTUKK19VSV9Nb2RpZmlhYmxlUGFyYW1ldGVyX3N0ZXBfZmVhdHVyZT1cdWIyZThcdWFjYzQKK19VSV9Nb2RpZmlhYmxlUGFyYW1ldGVyX2ZlYXR1cmVOYW1lX2ZlYXR1cmU9XHVhZTMwXHViMmE1IFx1Yzc3NFx1Yjk4NAorX1VJX1Vua25vd25fZmVhdHVyZT1cdWM5YzBcdWM4MTVcdWI0MThcdWM5YzAgXHVjNTRhXHVjNzRjCisKKworX1VJX0F1dG9tYXRpY2V4cGVyaW1lbnRFZGl0b3JfbWVudT0mQXV0b21hdGljZXhwZXJpbWVudCBFZGl0b3IKKworX1VJX0F1dG9tYXRpY2V4cGVyaW1lbnRNb2RlbFdpemFyZF9sYWJlbD1cdWM3OTBcdWIzZDlcdWQ2NTRcdWI0MWNcdWMyZTRcdWQ1ZDggXHViYWE4XHViMzc4CitfVUlfQXV0b21hdGljZXhwZXJpbWVudE1vZGVsV2l6YXJkX2Rlc2NyaXB0aW9uPVx1YzBjOFx1Yjg1Y1x1YzZiNCBcdWM3OTBcdWIzZDlcdWQ2NTRcdWI0MWNcdWMyZTRcdWQ1ZDggXHViYWE4XHViMzc4IFx1YjljY1x1YjRlNFx1YWUzMAorCitfVUlfQXV0b21hdGljZXhwZXJpbWVudEVkaXRvcl9sYWJlbD1cdWM3OTBcdWIzZDlcdWQ2NTRcdWI0MWNcdWMyZTRcdWQ1ZDggXHViYWE4XHViMzc4IFx1ZDNiOFx1YzlkMVx1YWUzMAorCitfVUlfQXV0b21hdGljZXhwZXJpbWVudEVkaXRvckZpbGVuYW1lRGVmYXVsdEJhc2U9XHViMDk4XHVjNzU4CitfVUlfQXV0b21hdGljZXhwZXJpbWVudEVkaXRvckZpbGVuYW1lRXh0ZW5zaW9ucz1cdWM3OTBcdWIzZDlcdWQ2NTRcdWI0MWNcdWMyZTRcdWQ1ZDgKKworCitfVUlfTW9kaWZpYWJsZVBhcmFtZXRlcl9sb3dlckJvdW5kX2ZlYXR1cmU9XHVkNTU4XHVjNzA0IFx1YWNiZFx1YWNjNAorX1VJX01vZGlmaWFibGVQYXJhbWV0ZXJfdXBwZXJCb3VuZF9mZWF0dXJlPVx1YzBjMVx1YzcwNCBcdWJjOTRcdWM3MDQKK19VSV9Nb2RpZmlhYmxlUGFyYW1ldGVyX2RlY29yYXRvcl9mZWF0dXJlPVx1YzdhNVx1YzJkZFx1Yzc5MAorX1VJX01vZGlmaWFibGVQYXJhbWV0ZXJfdGFyZ2V0VVJJX2ZlYXR1cmU9XHViMzAwXHVjMGMxIFVSSQorX1VJX0F1dG9tYXRpY0V4cGVyaW1lbnRfcmVJbml0X2ZlYXR1cmU9XHViMmU0XHVjMmRjIFx1Y2QwOFx1YWUzMFx1ZDY1NAorX1VJX0NyZWF0ZUNoaWxkX3RleHQ9ezB9CitfVUlfQ3JlYXRlQ2hpbGRfdGV4dDI9ezF9IHswfQorX1VJX0NyZWF0ZUNoaWxkX3RleHQzPXsxfQorX1VJX0NyZWF0ZUNoaWxkX3Rvb2x0aXA9ezF9IFx1YWUzMFx1YjJhNSBcdWQ1NThcdWM1ZDAgXHVjMGM4IHswfSBcdWI5Y2NcdWI0ZTRcdWFlMzAKK19VSV9DcmVhdGVDaGlsZF9kZXNjcmlwdGlvbj1cdWMxMjBcdWQwZGRcdWQ1NWMgezJ9XHVjNzU4IHsxfSBcdWFlMzBcdWIyYTVcdWM1ZDAgXHViMzAwXHVkNTVjIFx1ZDYxNVx1YzJkZCB7MH1cdWM3NTggXHVjMGM4XHViODVjXHVjNmI0IENoaWxkXHViOTdjIFx1YjljY1x1YjRlZFx1YjJjOFx1YjJlNC4KK19VSV9DcmVhdGVTaWJsaW5nX2Rlc2NyaXB0aW9uPVx1YmQ4MFx1YmFhOFx1Yzc1OCBcdWMxMjBcdWQwZGRcdWI0MWMgezJ9XHVjNWQwXHVjMTFjIHsxfSBcdWFlMzBcdWIyYTVcdWM1ZDAgXHViMzAwXHVkNTVjIFx1ZDYxNVx1YzJkZCB7MH1cdWM3NTggXHVjMGM4XHViODVjXHVjNmI0IFx1ZDYxNVx1YzgxY1x1Yjk3YyBcdWI5Y2NcdWI0ZWRcdWIyYzhcdWIyZTQuCisKK19VSV9Qcm9wZXJ0eURlc2NyaXB0b3JfZGVzY3JpcHRpb249ezF9IFx1YzkxMSB7MH0KKworX1VJX0dlbmVyaWNBdXRvbWF0aWNFeHBlcmltZW50X3R5cGU9XHVjNzdjXHViYzE4IFx1Yzc5MFx1YjNkOVx1ZDY1NFx1YjQxYyBcdWMyZTRcdWQ1ZDgKK19VSV9DcmVhdGVDaGlsZF9tZW51X2l0ZW09Jk5ldyBDaGlsZAorX1VJX0NyZWF0ZVNpYmxpbmdfbWVudV9pdGVtPU4mICBcdWQ2MTVcdWM4MWMgXHVjNzkwXHViOWU0CisKK19VSV9TaG93UHJvcGVydGllc1ZpZXdfbWVudV9pdGVtPVx1ZDQ1Y1x1YzJkYyBcdWJjMGYgXHVjMThkXHVjMTMxXHViY2Y0XHVhZTMwCitfVUlfUmVmcmVzaFZpZXdlcl9tZW51X2l0ZW09JlJlZnJlc2gKKworX1VJX1NlbGVjdGlvblBhZ2VfbGFiZWw9XHVjMTIwXHVkMGRkCisKK19VSV9Ob09iamVjdFNlbGVjdGVkPVx1YzU0NFx1YmIzNFx1YWM4M1x1YjNjNCBcdWM1NDggXHVjMTIwXHVkMGRkXHVkNTY4CitfVUlfU2luZ2xlT2JqZWN0U2VsZWN0ZWQ9XHVjMTIwXHVkMGRkXHVkNTVjIFx1YWMxZFx1Y2NiNCA6IHswfQorX1VJX011bHRpT2JqZWN0U2VsZWN0ZWQ9XHVjMTIwXHVkMGRkXHViNDFjIHswfSBcdWFjMWRcdWNjYjQKKworX1VJX09wZW5FZGl0b3JFcnJvcl9sYWJlbD1cdWM2MjRcdWQ1MDggXHVjNWQwXHViNTE0XHVkMTMwCisKK19VSV9XaXphcmRfY2F0ZWdvcnk9XHVjNjA4XHVjODFjIEVNRiBcdWJhYThcdWIzNzggXHVjMGRkXHVjMTMxIFx1YjljOFx1YmM5NVx1YzBhYworCitfVUlfQ3JlYXRlTW9kZWxFcnJvcl9tZXNzYWdlPVx1ZDMwY1x1Yzc3YyAnezB9ICJcdWM1ZDBcdWMxMWMgXHViYjM4XHVjODFjIFx1YmMxY1x1YzBkZAorCitfVUlfV2l6YXJkX2xhYmVsPVx1YzBjOFx1Yjg1Y1x1YzZiNAorCitfV0FSTl9GaWxlbmFtZUV4dGVuc2lvbj1cdWQzMGNcdWM3N2MgXHVjNzc0XHViOTg0XHVjNzQwICIuezB9Ilx1Yjg1YyBcdWIwNWRcdWIwOThcdWM1N2NcdWQ1NjguCitfV0FSTl9GaWxlbmFtZUV4dGVuc2lvbnM9XHVkMzBjXHVjNzdjIFx1Yzc3NFx1Yjk4NFx1Yzc0MCBcdWIyZTRcdWM3NGMgXHVkNjU1XHVjN2E1XHVjNzkwIFx1YzkxMSBcdWQ1NThcdWIwOThcdWI5N2MgXHVhYzAwXHVjODM4XHVjNTdjXHVkNTY4IDogezB9CisKK19VSV9Nb2RlbE9iamVjdD0mTW9kZWwgT2JqZWN0CitfVUlfWE1MRW5jb2Rpbmc9JlhNTCBFbmNvZGluZworX1VJX1hNTEVuY29kaW5nQ2hvaWNlcz1VVEYgLSA4IEFTQ0lJIFVURiAtIDE2IFVURiAtIDE2QkUgVVRGIC0gMTZMRSBJU08gLSA4ODU5IC0gMQorX1VJX1dpemFyZF9pbml0aWFsX29iamVjdF9kZXNjcmlwdGlvbj1cdWMwZGRcdWMxMzFcdWQ1NjAgXHViYWE4XHViMzc4IFx1YWMxY1x1Y2NiNCBcdWMxMjBcdWQwZGQKKworX1VJX0ZpbGVDb25mbGljdF9sYWJlbD1cdWQzMGNcdWM3N2MgXHVjZGE5XHViM2NjCitfV0FSTl9GaWxlQ29uZmxpY3Q9XHVjODAwXHVjN2E1XHViNDE4XHVjOWMwIFx1YzU0YVx1Yzc0MCBcdWMwYWNcdWQ1NmRcdWI0ZTRcdWM3NzQgXHVkM2I4XHVjOWQxXHVhZTMwIFx1YzY3OFx1YmQ4MFx1Yzc1OCBcdWJjYzBcdWFjYmQgXHVjMGFjXHVkNTZkXHViNGU0XHVhY2ZjIFx1Y2RhOVx1YjNjY1x1ZDU2OC4gXHVjNzc0IFx1ZDNiOFx1YzlkMVx1YWUzMFx1Yzc1OCBcdWJjYzBcdWFjYmQgXHVjMGFjXHVkNTZkXHViNGU0XHVjNzQ0IFx1Y2RlOFx1YzE4YyBcdWQ1NThcdWMyZGNcdWFjYTBcdWMyYjVcdWIyYzhcdWFlNGM/CisKKworX1VJX0FsZ29yaXRobV90eXBlPVx1YzU0Y1x1YWNlMFx1YjlhY1x1Yzk5OAorX1VJX0Vycm9yRnVuY3Rpb25fdHlwZT1cdWM2MjRcdWI5NTggXHVkNTY4XHVjMjE4CitfVUlfVGhyZXNob2xkRXJyb3JGdW5jdGlvbl90eXBlPVx1Yzc4NFx1YWNjNFx1YWMxMiBcdWM1ZDBcdWI3ZWMgXHVkNTY4XHVjMjE4CitfVUlfUmVmZXJlbmNlU2NlbmFyaW9EYXRhTWFwX3R5cGU9XHVjYzM4XHVjODcwIFx1YzJkY1x1YjA5OFx1YjlhY1x1YzYyNCBcdWIzNzBcdWM3NzRcdWQxMzBcdWM5YzBcdWIzYzQKK19VSV9TaW1wbGVFcnJvckZ1bmN0aW9uX3R5cGU9XHVhYzA0XHViMmU4XHVkNTVjIFx1YzVkMFx1YjdlYyBcdWQ1NjhcdWMyMTgKK19VSV9FcnJvclJlc3VsdF90eXBlPVx1YzYyNFx1Yjk1OCBcdWFjYjBcdWFjZmMKK19VSV9BdXRvbWF0aWNFeHBlcmltZW50X2Vycm9yRnVuY19mZWF0dXJlPVx1YzYyNFx1Yjk1OCBGVU5DCitfVUlfRXJyb3JSZXN1bHRfZXJyb3JCeVRpbWVTdGVwX2ZlYXR1cmU9XHVjMmRjXHVhYzA0IFx1YjJlOFx1YWNjNFx1YzVkMFx1YzExYyBcdWM2MjRcdWI5NTggXHViYzFjXHVjMGRkCitfVUlfRXJyb3JSZXN1bHRfZXJyb3JfZmVhdHVyZT1cdWM2MjRcdWI5NTgKK19VSV9FcnJvclJlc3VsdF9yZWZlcmVuY2VCeVRpbWVfZmVhdHVyZT1cdWMyZGNcdWFjMDQgXHViMzAwXHViZTQ0IFx1Y2MzOFx1Yzg3MAorX1VJX0Vycm9yUmVzdWx0X21vZGVsQnlUaW1lX2ZlYXR1cmU9XHVjMmRjXHVhYzA0XHVjNWQwIFx1YjUzMFx1Yjk3OCBcdWJhYThcdWIzNzgKK19VSV9FcnJvclJlc3VsdF92YWxpZGF0aW9uRXJyb3JfZmVhdHVyZT1cdWM3MjBcdWQ2YThcdWMxMzEgXHVhYzgwXHVjMGFjIFx1YzYyNFx1Yjk1OAorX1VJX0FuYWx5c2lzRWRpdG9yX21lbnU9JkFuYWx5c2lzIEVkaXRvcgorCitfVUlfUGFyZW50UGFnZV9sYWJlbD1cdWJkODBcdWJhYTgKK19VSV9MaXN0UGFnZV9sYWJlbD1cdWJhYTlcdWI4NWQKK19VSV9UcmVlUGFnZV9sYWJlbD1cdWIwOThcdWJiMzQKK19VSV9UYWJsZVBhZ2VfbGFiZWw9XHVkMTRjXHVjNzc0XHViZTE0CitfVUlfVHJlZVdpdGhDb2x1bW5zUGFnZV9sYWJlbD1cdWIwOThcdWJiMzRcdWM2NDAgXHVjNWY0CitfVUlfT2JqZWN0Q29sdW1uX2xhYmVsPVx1YWMxY1x1Y2NiNAorX1VJX1NlbGZDb2x1bW5fbGFiZWw9XHVjMTQwXHVkNTA0CisKK19VSV9BbmFseXNpc01vZGVsV2l6YXJkX2xhYmVsPVx1YmQ4NFx1YzExZCBcdWJhYThcdWIzNzgKK19VSV9BbmFseXNpc01vZGVsV2l6YXJkX2Rlc2NyaXB0aW9uPVx1YzBjOFx1Yjg1Y1x1YzZiNCBcdWJkODRcdWMxMWQgXHViYWE4XHViMzc4XHVjNzQ0IFx1Yzc5MVx1YzEzMQorCitfVUlfQW5hbHlzaXNFZGl0b3JfbGFiZWw9XHViZDg0XHVjMTFkIFx1YmFhOFx1YjM3OCBcdWQzYjhcdWM5ZDFcdWFlMzAKKworX1VJX0FuYWx5c2lzRWRpdG9yRmlsZW5hbWVEZWZhdWx0QmFzZT1cdWIwOThcdWM3NTgKK19VSV9BbmFseXNpc0VkaXRvckZpbGVuYW1lRXh0ZW5zaW9ucz1cdWJkODRcdWMxMWQKKworCitfVUlfT3B0aW1pemVyQWxnb3JpdGhtX3R5cGU9XHVjZDVjXHVjODAxXHVkNjU0IFx1YzU0Y1x1YWNlMFx1YjlhY1x1Yzk5OApkaWZmIC0tZ2l0IGEvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5hdXRvbWF0aWNleHBlcmltZW50L3BsdWdpbl96aC5wcm9wZXJ0aWVzIGIvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5hdXRvbWF0aWNleHBlcmltZW50L3BsdWdpbl96aC5wcm9wZXJ0aWVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAyOGM4MjIKLS0tIC9kZXYvbnVsbAorKysgYi9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQvcGx1Z2luX3poLnByb3BlcnRpZXMKQEAgLTAsMCArMSwxNTkgQEAKKyMKKyMgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyMgICogQ29weXJpZ2h0IChjKSAyMDA2LCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorIyAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisjICAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorIyAgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorIyAgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorIyAgKgorIyAgKiBDb250cmlidXRvcnM6CisjICAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyMgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorIyBUbyBjb2RlIGRldmVsb3BlcjoKKyMgICBEbyBOT1QgY2hhbmdlIHRoZSBwcm9wZXJ0aWVzIGJldHdlZW4gdGhpcyBsaW5lIGFuZCB0aGUKKyMgICAiJSUlIEVORCBPRiBUUkFOU0xBVEVEIFBST1BFUlRJRVMgJSUlIiBsaW5lLgorIyAgIE1ha2UgYSBuZXcgcHJvcGVydHkgbmFtZSwgYXBwZW5kIHRvIHRoZSBlbmQgb2YgdGhlIGZpbGUgYW5kIGNoYW5nZQorIyAgIHRoZSBjb2RlIHRvIHVzZSB0aGUgbmV3IHByb3BlcnR5LgorIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorIyAlJSUgRU5EIE9GIFRSQU5TTEFURUQgUFJPUEVSVElFUyAlJSUKKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworcGx1Z2luTmFtZT1TVEVNXHU4MWVhXHU1MmE4XHU1MzE2XHU1YjllXHU5YThjXHU1ZGU1XHU1MTc3Citwcm92aWRlck5hbWU9RWNsaXBzZS5vcmcKK0FFX1ZpZXc9XHU4MWVhXHU1MmE4XHU4YmQ1XHU5YThjCisKKyMgcHJvZHVjdCBuYW1lCitfVUlfUHJvZHVjdF9OYW1lPVNURU0KKworIyBDb21tb24gS2V5cworX1VJX1NURU09U1RFTQorX1VJX0RlY29yYXRvcnM9XHU4OGM1XHU5OTcwXHU1NjY4CitfVUlfRXhwZXJpbWVudHM9XHU1YjllXHU5YThjCitfVUlfR3JhcGhzPVx1NTZmZQorX1VJX0lkZW50aWZpYWJsZXM9XHU1M2VmXHU4YmM2XHU1MjJiXHU3Njg0CitfVUlfTW9kZWxzPVx1NmEyMVx1NTc4YgorX1VJX01vZGlmaWVycz1cdTRmZWVcdTY1MzlcdTU2NjgKK19VSV9QcmVkaWNhdGVzPVx1NjNjZlx1OGZmMAorX1VJX1NjZW5hcmlvcz1cdTY1YjlcdTY4NDgKK19VSV9TZXF1ZW5jZXJzPVx1NWU4Zlx1NTIxN1x1NTNkMVx1NzUxZlx1NTY2OAorX1VJX1RyaWdnZXJzPVx1ODllNlx1NTNkMVx1NTY2OAorCisKKworIyBQZXJzcGVjdGl2ZXMKK19VSV9BdXRvbWF0aWNFeHBlcmltZW50X1BlcnNwZWN0aXZlPVx1ODFlYVx1NTJhOFx1OGJkNVx1OWE4YworCisKK19VSV9BdXRvbWF0aWNFeHBlcmltZW50X3R5cGU9XHU4MWVhXHU1MmE4XHU4YmQ1XHU5YThjCitfVUlfTW9kaWZpYWJsZVBhcmFtZXRlcl90eXBlPVx1NTNlZlx1NGZlZVx1NjUzOVx1NzY4NFx1NTNjMlx1NjU3MAorX1VJX1Vua25vd25fdHlwZT1cdTViZjlcdThjNjEKKworX1VJX1Vua25vd25fZGF0YXR5cGU9XHU0ZWY3XHU1MDNjCisKK19VSV9BdXRvbWF0aWNFeHBlcmltZW50X2Jhc2VTY2VuYXJpb19mZWF0dXJlPVx1NTdmYVx1NjcyY1x1NjViOVx1Njg0OAorX1VJX0F1dG9tYXRpY0V4cGVyaW1lbnRfcGFyYW1ldGVyc19mZWF0dXJlPVx1NTNjMlx1NjU3MAorX1VJX0F1dG9tYXRpY0V4cGVyaW1lbnRfZXJyb3JBbmFseXNpc0FsZ29yaXRobV9mZWF0dXJlPVx1OGJlZlx1NWRlZVx1NTIwNlx1Njc5MFx1N2I5N1x1NmNkNQorX1VJX0F1dG9tYXRpY0V4cGVyaW1lbnRfZXJyb3JGdW5jdGlvbl9mZWF0dXJlPVx1OGJlZlx1NWRlZVx1NTFmZFx1NjU3MAorX1VJX0F1dG9tYXRpY0V4cGVyaW1lbnRfdG9sZXJhbmNlX2ZlYXR1cmU9XHU1MTZjXHU1ZGVlCitfVUlfQXV0b21hdGljRXhwZXJpbWVudF9yZWZlcmFuY2VEYXRhRGlyX2ZlYXR1cmU9XHU1M2MyXHU4MDAzXHU2NTg3XHU3MzJlXHU2NTcwXHU2MzZlXHU3NmVlXHU1ZjU1CitfVUlfQXV0b21hdGljRXhwZXJpbWVudF9tYXhpbXVtTnVtYmVyT2ZJdGVyYXRpb25zX2ZlYXR1cmU9XHU2NzAwXHU1OTI3XHU4ZmVkXHU0ZWUzXHU2YjIxXHU2NTcwCitfVUlfTW9kaWZpYWJsZVBhcmFtZXRlcl9pbml0aWFsVmFsdWVfZmVhdHVyZT1cdTUyMWRcdTU5Y2JcdTUwM2MKK19VSV9Nb2RpZmlhYmxlUGFyYW1ldGVyX2ZlYXR1cmVfZmVhdHVyZT1cdTUyOWZcdTgwZmQKK19VSV9Nb2RpZmlhYmxlUGFyYW1ldGVyX3N0ZXBfZmVhdHVyZT1cdTZiNjUKK19VSV9Nb2RpZmlhYmxlUGFyYW1ldGVyX2ZlYXR1cmVOYW1lX2ZlYXR1cmU9XHU1MjlmXHU4MGZkXHU1NDBkXHU3OWYwCitfVUlfVW5rbm93bl9mZWF0dXJlPVx1NjcyYVx1NjMwN1x1NWI5YQorCisKK19VSV9BdXRvbWF0aWNleHBlcmltZW50RWRpdG9yX21lbnU9JkF1dG9tYXRpY2V4cGVyaW1lbnQgRWRpdG9yCisKK19VSV9BdXRvbWF0aWNleHBlcmltZW50TW9kZWxXaXphcmRfbGFiZWw9XHU4MWVhXHU1MmE4XHU1YjllXHU5YThjXHU2YTIxXHU1NzhiCitfVUlfQXV0b21hdGljZXhwZXJpbWVudE1vZGVsV2l6YXJkX2Rlc2NyaXB0aW9uPVx1NTIxYlx1NWVmYVx1NGUwMFx1NGUyYVx1NjViMFx1NzY4NFx1ODFlYVx1NTJhOFx1NWI5ZVx1OWE4Y1x1NmEyMVx1NTc4YgorCitfVUlfQXV0b21hdGljZXhwZXJpbWVudEVkaXRvcl9sYWJlbD1cdTgxZWFcdTUyYThcdTViOWVcdTlhOGNcdTZhMjFcdTU3OGJcdTdmMTZcdThmOTFcdTU2NjgKKworX1VJX0F1dG9tYXRpY2V4cGVyaW1lbnRFZGl0b3JGaWxlbmFtZURlZmF1bHRCYXNlPVx1NjIxMVx1NzY4NAorX1VJX0F1dG9tYXRpY2V4cGVyaW1lbnRFZGl0b3JGaWxlbmFtZUV4dGVuc2lvbnM9XHU4MWVhXHU1MmE4XHU4YmQ1XHU5YThjCisKKworX1VJX01vZGlmaWFibGVQYXJhbWV0ZXJfbG93ZXJCb3VuZF9mZWF0dXJlPVx1NGUwYlx1NzU0YworX1VJX01vZGlmaWFibGVQYXJhbWV0ZXJfdXBwZXJCb3VuZF9mZWF0dXJlPVx1NGUwYVx1NzU0YworX1VJX01vZGlmaWFibGVQYXJhbWV0ZXJfZGVjb3JhdG9yX2ZlYXR1cmU9XHU4OGM1XHU5OTcwXHU1NjY4CitfVUlfTW9kaWZpYWJsZVBhcmFtZXRlcl90YXJnZXRVUklfZmVhdHVyZT1cdTc2ZWVcdTY4MDdVUkkKK19VSV9BdXRvbWF0aWNFeHBlcmltZW50X3JlSW5pdF9mZWF0dXJlPVx1OTFjZFx1NjViMFx1NTIxZFx1NTljYlx1NTMxNgorX1VJX0NyZWF0ZUNoaWxkX3RleHQ9ezB9CitfVUlfQ3JlYXRlQ2hpbGRfdGV4dDI9ezF9IHswfQorX1VJX0NyZWF0ZUNoaWxkX3RleHQzPXsxfQorX1VJX0NyZWF0ZUNoaWxkX3Rvb2x0aXA9XHU1MjFiXHU1ZWZhXHU1NzI4ezF9IHswfVx1NjViMFx1NTI5Zlx1ODBmZAorX1VJX0NyZWF0ZUNoaWxkX2Rlc2NyaXB0aW9uPVx1NGUzYVx1OTAwOVx1NWI5YVx1NzY4NHsyfVx1NzY4NHsxfVx1NzI3OVx1NjAyN1x1Njc2NVx1NTIxYlx1NWVmYVx1NGUwMFx1NGUyYVx1NjViMFx1NzY4NHswfVx1NWI1MFx1N2M3YgorX1VJX0NyZWF0ZVNpYmxpbmdfZGVzY3JpcHRpb249XHU1NzI4ezF9XHU3Njg0XHU3MjM2XHU5NmM2XHU0ZTJkXHU0ZTNhXHU5MDA5XHU1YjlhXHU3Njg0ezJ9XHU2NzY1XHU1MjFiXHU1ZWZhXHU0ZTAwXHU0ZTJhezB9XHU3YzdiXHU1NzhiXHU3Njg0XHU2NWIwXHU3Njg0XHU1MTQ0XHU1ZjFmXHU3YzdiCisKK19VSV9Qcm9wZXJ0eURlc2NyaXB0b3JfZGVzY3JpcHRpb249ezB9XHU0ZWNlXHU1YzVlezF9CisKK19VSV9HZW5lcmljQXV0b21hdGljRXhwZXJpbWVudF90eXBlPVx1OTAxYVx1NzUyOFx1ODFlYVx1NTJhOFx1OGJkNVx1OWE4YworX1VJX0NyZWF0ZUNoaWxkX21lbnVfaXRlbT0mTmV3IENoaWxkCitfVUlfQ3JlYXRlU2libGluZ19tZW51X2l0ZW09XHU2NWIwXHU3NTFmXHU2MjEwXHU0ZTAwXHU0ZTJhXHU1MTQ0XHU1ZjFmXHU3YzdiCisKK19VSV9TaG93UHJvcGVydGllc1ZpZXdfbWVudV9pdGVtPVx1NjYzZVx1NzkzYVx1NTQ4Y1x1NWM1ZVx1NjAyN1x1NjdlNVx1NzcwYgorX1VJX1JlZnJlc2hWaWV3ZXJfbWVudV9pdGVtPSZSZWZyZXNoCisKK19VSV9TZWxlY3Rpb25QYWdlX2xhYmVsPVx1OTAwOVx1NjJlOQorCitfVUlfTm9PYmplY3RTZWxlY3RlZD1cdTY1ZTBcdTkwMDlcdTViOWFcdTUxODVcdTViYjkKK19VSV9TaW5nbGVPYmplY3RTZWxlY3RlZD1cdTkwMDlcdTYyZTlcdTViZjlcdThjNjFcdWZmMWF7MH0KK19VSV9NdWx0aU9iamVjdFNlbGVjdGVkPVx1OTAwOVx1NjJlOXswfVx1NWJmOVx1OGM2MQorCitfVUlfT3BlbkVkaXRvckVycm9yX2xhYmVsPVx1NjI1M1x1NWYwMFx1N2YxNlx1OGY5MVx1NTY2OAorCitfVUlfV2l6YXJkX2NhdGVnb3J5PVx1NGY4Ylx1NTk4MkVNRlx1NmEyMVx1NTc4Ylx1NTIxYlx1NWVmYVx1NTQxMVx1NWJmYworCitfVUlfQ3JlYXRlTW9kZWxFcnJvcl9tZXNzYWdlPVx1NTcyOFx1NjU4N1x1NGVmNlx1MjAxY3swfVx1MjAxZFx1NGUyZFx1OTA0N1x1NTIzMFx1NzY4NFx1OTVlZVx1OTg5OAorCitfVUlfV2l6YXJkX2xhYmVsPVx1NjViMFx1NWVmYQorCitfV0FSTl9GaWxlbmFtZUV4dGVuc2lvbj1cdTY1ODdcdTRlZjZcdTU0MGRcdTVmYzVcdTk4N2JcdTRlZTUnezB9ICcnXHU3ZWQzXHU1YzNlCitfV0FSTl9GaWxlbmFtZUV4dGVuc2lvbnM9XHU2NTg3XHU0ZWY2XHU1NDBkXHU1ZmM1XHU5ODdiXHU1MTc3XHU2NzA5XHU0ZWU1XHU0ZTBiXHU2MjY5XHU1YzU1XHU1NDBkXHU0ZTRiXHU0ZTAwXHVmZjFhezB9CisKK19VSV9Nb2RlbE9iamVjdD0mTW9kZWwgT2JqZWN0CitfVUlfWE1MRW5jb2Rpbmc9JlhNTCBFbmNvZGluZworX1VJX1hNTEVuY29kaW5nQ2hvaWNlcz1VVEYtOCBBU0NJSSBVVEYtMTYgVVRGLTE2QkUgVVRGLTE2TEUgSVNPLTg4NTktMQorX1VJX1dpemFyZF9pbml0aWFsX29iamVjdF9kZXNjcmlwdGlvbj1cdTkwMDlcdTYyZTlcdTUyMWJcdTVlZmFcdTRlMDBcdTRlMmFcdTZhMjFcdTU3OGJcdTViZjlcdThjNjEKKworX1VJX0ZpbGVDb25mbGljdF9sYWJlbD1cdTY1ODdcdTRlZjZcdTUxYjJcdTdhODEKK19XQVJOX0ZpbGVDb25mbGljdD1cdTY3MDlcdTY3MmFcdTRmZGRcdTViNThcdTc2ODRcdTY2ZjRcdTY1MzlcdTRlMGVcdTdmMTZcdThmOTFcdTU2NjhcdTU5MTZcdTc2ODRcdTY2ZjRcdTY1MzlcdTUxYjJcdTdhODFcdTMwMDJcdTRmNjBcdTYwZjNcdTY1M2VcdTVmMDNcdThmZDlcdTRlMmFcdTdmMTZcdThmOTFcdTU2NjhcdTc2ODRcdTY2ZjRcdTY1MzlcdTU0MTdcdWZmMWYKKworCitfVUlfQWxnb3JpdGhtX3R5cGU9XHU3Yjk3XHU2Y2Q1CitfVUlfRXJyb3JGdW5jdGlvbl90eXBlPVx1OGJlZlx1NWRlZVx1NTFmZFx1NjU3MAorX1VJX1RocmVzaG9sZEVycm9yRnVuY3Rpb25fdHlwZT1cdTk2MDhcdTUwM2NcdThiZWZcdTVkZWVcdTUxZmRcdTY1NzAKK19VSV9SZWZlcmVuY2VTY2VuYXJpb0RhdGFNYXBfdHlwZT1cdTUzYzJcdTgwMDNcdTYwYzVcdTY2NmZcdTc2ODRcdTY1NzBcdTYzNmVcdTY2MjBcdTVjMDQKK19VSV9TaW1wbGVFcnJvckZ1bmN0aW9uX3R5cGU9XHU3YjgwXHU1MzU1XHU4YmVmXHU1ZGVlXHU2NWI5XHU3YTBiCitfVUlfRXJyb3JSZXN1bHRfdHlwZT1cdTk1MTlcdThiZWZcdTc2ODRcdTdlZDNcdTY3OWMKK19VSV9BdXRvbWF0aWNFeHBlcmltZW50X2Vycm9yRnVuY19mZWF0dXJlPVx1OGJlZlx1NWRlZVx1NTFmZFx1NjU3MAorX1VJX0Vycm9yUmVzdWx0X2Vycm9yQnlUaW1lU3RlcF9mZWF0dXJlPVx1OGJlZlx1NWRlZVx1NjVmNlx1OTVmNFx1NmI2NVx1OTU3ZgorX1VJX0Vycm9yUmVzdWx0X2Vycm9yX2ZlYXR1cmU9XHU5NTE5XHU4YmVmCitfVUlfRXJyb3JSZXN1bHRfcmVmZXJlbmNlQnlUaW1lX2ZlYXR1cmU9XHU1M2MyXHU4MDAzXHU2NTg3XHU3MzJlXHU2MzA5XHU2NWY2XHU5NWY0XHU2MzkyXHU1ZThmCitfVUlfRXJyb3JSZXN1bHRfbW9kZWxCeVRpbWVfZmVhdHVyZT1cdTZhMjFcdTU3OGJcdTc2ODRcdTY1ZjZcdTk1ZjQKK19VSV9FcnJvclJlc3VsdF92YWxpZGF0aW9uRXJyb3JfZmVhdHVyZT1cdTlhOGNcdThiYzFcdTk1MTlcdThiZWYKK19VSV9BbmFseXNpc0VkaXRvcl9tZW51PSZBbmFseXNpcyBFZGl0b3IKKworX1VJX1BhcmVudFBhZ2VfbGFiZWw9XHU1YmI2XHU5NTdmCitfVUlfTGlzdFBhZ2VfbGFiZWw9XHU3NmVlXHU1ZjU1CitfVUlfVHJlZVBhZ2VfbGFiZWw9XHU2ODExCitfVUlfVGFibGVQYWdlX2xhYmVsPVx1ODg2OAorX1VJX1RyZWVXaXRoQ29sdW1uc1BhZ2VfbGFiZWw9XHU1MjA2XHU1MjE3XHU3Njg0XHU2ODExCitfVUlfT2JqZWN0Q29sdW1uX2xhYmVsPVx1NWJmOVx1OGM2MQorX1VJX1NlbGZDb2x1bW5fbGFiZWw9XHU4MWVhXHU1ZGYxCisKK19VSV9BbmFseXNpc01vZGVsV2l6YXJkX2xhYmVsPVx1NTIwNlx1Njc5MFx1NmEyMVx1NTc4YgorX1VJX0FuYWx5c2lzTW9kZWxXaXphcmRfZGVzY3JpcHRpb249XHU1MjFiXHU1ZWZhXHU0ZTAwXHU0ZTJhXHU2NWIwXHU3Njg0XHU1MjA2XHU2NzkwXHU2YTIxXHU1NzhiCisKK19VSV9BbmFseXNpc0VkaXRvcl9sYWJlbD1cdTUyMDZcdTY3OTBcdTZhMjFcdTU3OGJcdTdmMTZcdThmOTFcdTU2NjgKKworX1VJX0FuYWx5c2lzRWRpdG9yRmlsZW5hbWVEZWZhdWx0QmFzZT1cdTYyMTFcdTc2ODQKK19VSV9BbmFseXNpc0VkaXRvckZpbGVuYW1lRXh0ZW5zaW9ucz1cdTUyMDZcdTY3OTAKKworCitfVUlfT3B0aW1pemVyQWxnb3JpdGhtX3R5cGU9XHU0ZjE4XHU1MzE2XHU3Yjk3XHU2Y2Q1CmRpZmYgLS1naXQgYS9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQvc2NoZW1hL2FsZ29yaXRobS5leHNkIGIvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5hdXRvbWF0aWNleHBlcmltZW50L3NjaGVtYS9hbGdvcml0aG0uZXhzZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNGY4ZWRjCi0tLSAvZGV2L251bGwKKysrIGIvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5hdXRvbWF0aWNleHBlcmltZW50L3NjaGVtYS9hbGdvcml0aG0uZXhzZApAQCAtMCwwICsxLDEwMCBAQAorPD94bWwgdmVyc2lvbj0nMS4wJyBlbmNvZGluZz0nVVRGLTgnPz4KKzwhLS0gU2NoZW1hIGZpbGUgd3JpdHRlbiBieSBQREUgLS0+Cis8c2NoZW1hIHRhcmdldE5hbWVzcGFjZT0ib3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5hdXRvbWF0aWNleHBlcmltZW50IiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiPgorCTxhbm5vdGF0aW9uPgorICAgICAgPGFwcEluZm8+CisgICAgICAgICA8bWV0YS5zY2hlbWEgcGx1Z2luPSJvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQiIGlkPSJvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQuYWxnb3JpdGhtIiBuYW1lPSJBbGdvcml0aG0iLz4KKyAgICAgIDwvYXBwSW5mbz4KKyAgICAgIDxkb2N1bWVudGF0aW9uPgorICAgICAgICAgVGhlIGV4cGVuc2lvbiBwb2ludCBpcyB1c2VkIGZvciBhZGRpbmcgbmV3IGFsZ29yaXRobXMgZm9yIG51bWVyaWNhbCBvcHRpbWl6YXRpb24gb2YgU1RFTSBtb2RlbHMKKyAgICAgIDwvZG9jdW1lbnRhdGlvbj4KKyAgIDwvYW5ub3RhdGlvbj4KKworICAgPGluY2x1ZGUgc2NoZW1hTG9jYXRpb249InNjaGVtYTovL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zY2hlbWEvZHVibGluX2NvcmUuZXhzZCIvPgorCisgICAgPGVsZW1lbnQgbmFtZT0iZXh0ZW5zaW9uIj4KKyAgICAgIDxjb21wbGV4VHlwZT4KKyAgICAgICAgIDxzZXF1ZW5jZT4KKyAgICAgICAgICAgIDxlbGVtZW50IHJlZj0iY2xhc3NkZWYiLz4KKyAgICAgICAgICAgIDxlbGVtZW50IHJlZj0iZHVibGluX2NvcmUiLz4KKyAgICAgICAgIDwvc2VxdWVuY2U+CisgICAgICAgICA8YXR0cmlidXRlIG5hbWU9InBvaW50IiB0eXBlPSJzdHJpbmciIHVzZT0icmVxdWlyZWQiPgorICAgICAgICAgICAgPGFubm90YXRpb24+CisgICAgICAgICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KKyAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgorICAgICAgICAgICAgPC9hbm5vdGF0aW9uPgorICAgICAgICAgPC9hdHRyaWJ1dGU+CisgICAgICAgICA8YXR0cmlidXRlIG5hbWU9ImlkIiB0eXBlPSJzdHJpbmciPgorICAgICAgICAgICAgPGFubm90YXRpb24+CisgICAgICAgICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KKyAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgorICAgICAgICAgICAgPC9hbm5vdGF0aW9uPgorICAgICAgICAgPC9hdHRyaWJ1dGU+CisgICAgICAgICA8YXR0cmlidXRlIG5hbWU9Im5hbWUiIHR5cGU9InN0cmluZyI+CisgICAgICAgICAgICA8YW5ub3RhdGlvbj4KKyAgICAgICAgICAgICAgIDxkb2N1bWVudGF0aW9uPgorICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICA8L2RvY3VtZW50YXRpb24+CisgICAgICAgICAgICAgICA8YXBwSW5mbz4KKyAgICAgICAgICAgICAgICAgIDxtZXRhLmF0dHJpYnV0ZSB0cmFuc2xhdGFibGU9InRydWUiLz4KKyAgICAgICAgICAgICAgIDwvYXBwSW5mbz4KKyAgICAgICAgICAgIDwvYW5ub3RhdGlvbj4KKyAgICAgICAgIDwvYXR0cmlidXRlPgorICAgICAgPC9jb21wbGV4VHlwZT4KKyAgIDwvZWxlbWVudD4KKworICAgPGVsZW1lbnQgbmFtZT0iY2xhc3NkZWYiPgorICAgICAgPGNvbXBsZXhUeXBlPgorICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJjbGFzcyIgdHlwZT0ic3RyaW5nIiB1c2U9InJlcXVpcmVkIj4KKyAgICAgICAgICAgIDxhbm5vdGF0aW9uPgorICAgICAgICAgICAgICAgPGRvY3VtZW50YXRpb24+CisgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgIDwvZG9jdW1lbnRhdGlvbj4KKyAgICAgICAgICAgICAgIDxhcHBJbmZvPgorICAgICAgICAgICAgICAgICAgPG1ldGEuYXR0cmlidXRlIGtpbmQ9ImphdmEiIGJhc2VkT249Im9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5pbXBsLkRpc2Vhc2VNb2RlbEltcGw6b3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLkRpc2Vhc2VNb2RlbCIvPgorICAgICAgICAgICAgICAgPC9hcHBJbmZvPgorICAgICAgICAgICAgPC9hbm5vdGF0aW9uPgorICAgICAgICAgPC9hdHRyaWJ1dGU+CisgICAgICA8L2NvbXBsZXhUeXBlPgorICAgPC9lbGVtZW50PgorCisgICA8YW5ub3RhdGlvbj4KKyAgICAgIDxhcHBJbmZvPgorICAgICAgICAgPG1ldGEuc2VjdGlvbiB0eXBlPSJzaW5jZSIvPgorICAgICAgPC9hcHBJbmZvPgorICAgICAgPGRvY3VtZW50YXRpb24+CisgICAgICAgICBbRW50ZXIgdGhlIGZpcnN0IHJlbGVhc2UgaW4gd2hpY2ggdGhpcyBleHRlbnNpb24gcG9pbnQgYXBwZWFycy5dCisgICAgICA8L2RvY3VtZW50YXRpb24+CisgICA8L2Fubm90YXRpb24+CisKKyAgIDxhbm5vdGF0aW9uPgorICAgICAgPGFwcEluZm8+CisgICAgICAgICA8bWV0YS5zZWN0aW9uIHR5cGU9ImV4YW1wbGVzIi8+CisgICAgICA8L2FwcEluZm8+CisgICAgICA8ZG9jdW1lbnRhdGlvbj4KKyAgICAgICAgIFtFbnRlciBleHRlbnNpb24gcG9pbnQgdXNhZ2UgZXhhbXBsZSBoZXJlLl0KKyAgICAgIDwvZG9jdW1lbnRhdGlvbj4KKyAgIDwvYW5ub3RhdGlvbj4KKworICAgPGFubm90YXRpb24+CisgICAgICA8YXBwSW5mbz4KKyAgICAgICAgIDxtZXRhLnNlY3Rpb24gdHlwZT0iYXBpaW5mbyIvPgorICAgICAgPC9hcHBJbmZvPgorICAgICAgPGRvY3VtZW50YXRpb24+CisgICAgICAgICBbRW50ZXIgQVBJIGluZm9ybWF0aW9uIGhlcmUuXQorICAgICAgPC9kb2N1bWVudGF0aW9uPgorICAgPC9hbm5vdGF0aW9uPgorCisgICA8YW5ub3RhdGlvbj4KKyAgICAgIDxhcHBJbmZvPgorICAgICAgICAgPG1ldGEuc2VjdGlvbiB0eXBlPSJpbXBsZW1lbnRhdGlvbiIvPgorICAgICAgPC9hcHBJbmZvPgorICAgICAgPGRvY3VtZW50YXRpb24+CisgICAgICAgICBbRW50ZXIgaW5mb3JtYXRpb24gYWJvdXQgc3VwcGxpZWQgaW1wbGVtZW50YXRpb24gb2YgdGhpcyBleHRlbnNpb24gcG9pbnQuXQorICAgICAgPC9kb2N1bWVudGF0aW9uPgorICAgPC9hbm5vdGF0aW9uPgorCisKKzwvc2NoZW1hPgpkaWZmIC0tZ2l0IGEvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5hdXRvbWF0aWNleHBlcmltZW50L3NyYy9vcmcvZWNsaXBzZS9zdGVtL2FuYWx5c2lzL2F1dG9tYXRpY2V4cGVyaW1lbnQvQUxHT1JJVEhNX1NUQVRVUy5qYXZhIGIvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5hdXRvbWF0aWNleHBlcmltZW50L3NyYy9vcmcvZWNsaXBzZS9zdGVtL2FuYWx5c2lzL2F1dG9tYXRpY2V4cGVyaW1lbnQvQUxHT1JJVEhNX1NUQVRVUy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA5NzE0NzYKLS0tIC9kZXYvbnVsbAorKysgYi9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQvc3JjL29yZy9lY2xpcHNlL3N0ZW0vYW5hbHlzaXMvYXV0b21hdGljZXhwZXJpbWVudC9BTEdPUklUSE1fU1RBVFVTLmphdmEKQEAgLTAsMCArMSwxOSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOSwyMDEwIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQ7CisKK3B1YmxpYyBlbnVtIEFMR09SSVRITV9TVEFUVVMgeworCVNUQVJUSU5HX1NJTVVMQVRJT04sCisJRklOSVNIRURfU0lNVUxBVElPTiwKKwlGSU5JU0hFRF9BTEdPUklUSE0sCisJUkVTVEFSVEVEX0FMR09SSVRITTsKK30KZGlmZiAtLWdpdCBhL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuYXV0b21hdGljZXhwZXJpbWVudC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9hbmFseXNpcy9hdXRvbWF0aWNleHBlcmltZW50L0Fic3RyYWN0RXJyb3JBbmFseXNpc0FsZ29yaXRobS5qYXZhIGIvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5hdXRvbWF0aWNleHBlcmltZW50L3NyYy9vcmcvZWNsaXBzZS9zdGVtL2FuYWx5c2lzL2F1dG9tYXRpY2V4cGVyaW1lbnQvQWJzdHJhY3RFcnJvckFuYWx5c2lzQWxnb3JpdGhtLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTk3M2Y1OQotLS0gL2Rldi9udWxsCisrKyBiL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuYXV0b21hdGljZXhwZXJpbWVudC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9hbmFseXNpcy9hdXRvbWF0aWNleHBlcmltZW50L0Fic3RyYWN0RXJyb3JBbmFseXNpc0FsZ29yaXRobS5qYXZhCkBAIC0wLDAgKzEsMTI3IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuYXV0b21hdGljZXhwZXJpbWVudDsNCisNCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyAqIENvcHlyaWdodCAoYykgMjAwOSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4NCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzDQorICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wDQorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQNCisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbA0KKyAqDQorICogQ29udHJpYnV0b3JzOg0KKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24NCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCisNCisNCitpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsNCitpbXBvcnQgamF2YS51dGlsLkxpc3Q7DQorDQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuQW5hbHlzaXNGYWN0b3J5Ow0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLkVycm9yRnVuY3Rpb247DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zY2VuYXJpby5TY2VuYXJpbzsNCisNCisNCitwdWJsaWMgYWJzdHJhY3QgY2xhc3MgQWJzdHJhY3RFcnJvckFuYWx5c2lzQWxnb3JpdGhtIGltcGxlbWVudHMNCisJCUVycm9yQW5hbHlzaXNBbGdvcml0aG0gew0KKwkNCisJcHJvdGVjdGVkIFNjZW5hcmlvIGJhc2VTY2VuYXJpbyA9IG51bGw7DQorCXByb3RlY3RlZCBTaW1wbGV4QWxnb3JpdGhtIHNpbXBsZXhBbGdvcml0aG0gPSBuZXcgTmVsZGVyTWVhZEFsZ29yaXRobSgpOw0KKwlwcm90ZWN0ZWQgU2ltcGxleEZ1bmN0aW9uIHNpbXBsZXhGblRvTWluaW1pemUgPSBudWxsOw0KKwlwcm90ZWN0ZWQgRXJyb3JGdW5jdGlvbiBlcnJvckZ1bmN0aW9uID0gbnVsbDsNCisJcHJvdGVjdGVkIGRvdWJsZVtdIGluaXRpYWxQYXJhbXNWYWx1ZXMgPSBudWxsOw0KKwlwcm90ZWN0ZWQgZG91YmxlW10gcGFyYW1zSW5pdGlhbFN0ZXBzID0gbnVsbDsNCisJcHJvdGVjdGVkIGRvdWJsZSB0b2xlcmFuY2UgPSAtMTsNCisJcHJvdGVjdGVkIFN0cmluZyByZWZlcmVuY2VEYXRhRGlyZWN0b3J5ID0gbnVsbDsNCisJcHJvdGVjdGVkIGxvbmcgbWF4TnVtT2ZJdGVyYXRpb25zID0gLTE7DQorCXByb3RlY3RlZCBMaXN0PE1vZGlmaWFibGVQYXJhbWV0ZXI+IHBhcmFtZXRlcnMgPSBudWxsOw0KKwlib29sZWFuIHJlcGVhdCA9IGZhbHNlOw0KKwlwcml2YXRlIEFycmF5TGlzdDxFcnJvckFuYWx5c2lzQWxnb3JpdGhtTGlzdGVuZXI+IGxpc3RlbmVycyA9IG5ldyBBcnJheUxpc3Q8RXJyb3JBbmFseXNpc0FsZ29yaXRobUxpc3RlbmVyPigpOw0KKwkNCisJYWJzdHJhY3QgcHVibGljIHZvaWQgZXhlY3V0ZSgpOw0KKw0KKwlwdWJsaWMgdm9pZCBzZXRCYXNlU2NlbmFyaW8oU2NlbmFyaW8gYmFzZVNjZW5hcmlvKSB7DQorCQl0aGlzLmJhc2VTY2VuYXJpbyA9IGJhc2VTY2VuYXJpbzsNCisJfQ0KKw0KKwlwdWJsaWMgdm9pZCBzZXRUb2xlcmFuY2UoZG91YmxlIHRvbGVyYW5jZSkgew0KKwkJdGhpcy50b2xlcmFuY2UgPSB0b2xlcmFuY2U7DQorCX0NCisNCisJcHVibGljIHZvaWQgc2V0RXJyb3JGdW5jdGlvbihFcnJvckZ1bmN0aW9uIGVycm9yRnVuY3Rpb24pIHsNCisJCXRoaXMuZXJyb3JGdW5jdGlvbiA9IGVycm9yRnVuY3Rpb247DQorCX0NCisNCisJcHVibGljIHZvaWQgc2V0UmVmZXJlbmNlRGF0YURpcmVjdG9yeShTdHJpbmcgcmVmZXJlbmNlRGF0YURpcikgew0KKwkJdGhpcy5yZWZlcmVuY2VEYXRhRGlyZWN0b3J5ID0gcmVmZXJlbmNlRGF0YURpcjsNCisJfQ0KKw0KKwlwdWJsaWMgdm9pZCBpbml0KEF1dG9tYXRpY0V4cGVyaW1lbnQgYXV0b21hdGljRXhwZXJpbWVudCkgew0KKwkJc2V0QmFzZVNjZW5hcmlvKGF1dG9tYXRpY0V4cGVyaW1lbnQuZ2V0QmFzZVNjZW5hcmlvKCkpOw0KKwkJc2V0UGFyYW1ldGVycyhhdXRvbWF0aWNFeHBlcmltZW50LmdldFBhcmFtZXRlcnMoKSk7DQorCQkNCisJCWRvdWJsZSB0b2xlcmFuY2UgPSBhdXRvbWF0aWNFeHBlcmltZW50LmdldFRvbGVyYW5jZSgpOw0KKwkJc2V0VG9sZXJhbmNlKHRvbGVyYW5jZSk7CQkNCisJCWxvbmcgbWF4SXRlcmF0aW9ucyA9IGF1dG9tYXRpY0V4cGVyaW1lbnQuZ2V0TWF4aW11bU51bWJlck9mSXRlcmF0aW9ucygpOw0KKwkJc2V0TWF4aW11bU51bWJlck9mSXRlcmF0aW9ucyhtYXhJdGVyYXRpb25zKTsNCisJCQ0KKwkJYm9vbGVhbiByZXBlYXRVbnRpbE5vSW1wcm92ZW1lbnQgPSBhdXRvbWF0aWNFeHBlcmltZW50LmlzUmVJbml0KCk7DQorCQlzZXRSZUluaXQocmVwZWF0VW50aWxOb0ltcHJvdmVtZW50KTsNCisJCQ0KKwkJRXJyb3JGdW5jdGlvbiBlcnJvckZ1bmN0aW9uID0gbnVsbDsNCisJCVN0cmluZyBlcnJvckZ1bmN0aW9uTmFtZSA9IGF1dG9tYXRpY0V4cGVyaW1lbnQuZ2V0RXJyb3JGdW5jdGlvbigpOw0KKwkJZXJyb3JGdW5jdGlvbiA9IGF1dG9tYXRpY0V4cGVyaW1lbnQuZ2V0RXJyb3JGdW5jKCk7DQorCQlpZihlcnJvckZ1bmN0aW9uID09IG51bGwpIHsNCisJCQkvLyBUaGlzIGlzIGZvciBiYWNrd2FyZHMgY29tcGF0YWJpbGl0eSB3aXRoIG9sZCB2ZXJzaW9ucyBvZiBhdXRvbWF0ZWQgZXhwZXJpbWVudHMgDQorCQkJaWYgKGVycm9yRnVuY3Rpb25OYW1lLmVxdWFscygiVGhyZXNob2xkIGVycm9yIGZ1bmN0aW9uIikpIHsgLy8kTk9OLU5MUy0xJA0KKwkJCQllcnJvckZ1bmN0aW9uID0gQW5hbHlzaXNGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVUaHJlc2hvbGRFcnJvckZ1bmN0aW9uKCk7DQorCQkJfQ0KKwkJCWlmIChlcnJvckZ1bmN0aW9uTmFtZS5lcXVhbHMoIlNpbXBsZSBlcnJvciBmdW5jdGlvbiIpKSB7IC8vJE5PTi1OTFMtMSQNCisJCQkJZXJyb3JGdW5jdGlvbiA9IEFuYWx5c2lzRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlU2ltcGxlRXJyb3JGdW5jdGlvbigpOw0KKwkJCX0JCQ0KKwkJfQ0KKwkJc2V0RXJyb3JGdW5jdGlvbihlcnJvckZ1bmN0aW9uKTsNCisJCQ0KKwkJU3RyaW5nIHJlZkRpciA9IGF1dG9tYXRpY0V4cGVyaW1lbnQuZ2V0UmVmZXJhbmNlRGF0YURpcigpOw0KKwkJc2V0UmVmZXJlbmNlRGF0YURpcmVjdG9yeShyZWZEaXIpOw0KKwl9DQorDQorCXB1YmxpYyB2b2lkIHJlaW5pdFN0YXJ0UGFyYW1zKEF1dG9tYXRpY0V4cGVyaW1lbnQgZXhwZXJpbWVudCwgZG91YmxlIFtdIHZhbHMpIHsNCisJCWludCBpPTA7DQorCQlmb3IoTW9kaWZpYWJsZVBhcmFtZXRlciBwOmV4cGVyaW1lbnQuZ2V0UGFyYW1ldGVycygpKSB7DQorCQkJcC5zZXRJbml0aWFsVmFsdWUodmFsc1tpKytdKTsNCisJCX0NCisJCWluaXQoZXhwZXJpbWVudCk7DQorCX0NCisJcHVibGljIGRvdWJsZVtdIGdldFJlc3VsdFBhcmFtZXRlcnMoKSB7DQorCQlyZXR1cm4gc2ltcGxleEFsZ29yaXRobS5nZXRNaW5pbXVtUGFyYW1ldGVyc1ZhbHVlcygpOw0KKwl9DQorDQorCXB1YmxpYyBkb3VibGUgZ2V0UmVzdWx0VmFsdWUoKSB7DQorCQlyZXR1cm4gc2ltcGxleEFsZ29yaXRobS5nZXRNaW5pbXVtRnVuY3Rpb25WYWx1ZSgpOw0KKwl9DQorDQorCXB1YmxpYyB2b2lkIHNldE1heGltdW1OdW1iZXJPZkl0ZXJhdGlvbnMobG9uZyBtYXhOdW1PZkl0ZXJhdGlvbnMpIHsNCisJCXRoaXMubWF4TnVtT2ZJdGVyYXRpb25zID0gbWF4TnVtT2ZJdGVyYXRpb25zOw0KKwl9DQorDQorCXB1YmxpYyB2b2lkIHNldFJlSW5pdChib29sZWFuIHJlcGVhdCkgew0KKwkJdGhpcy5yZXBlYXQgPSByZXBlYXQ7DQorCX0NCisJcHVibGljIHZvaWQgc2V0UGFyYW1ldGVycyhMaXN0PE1vZGlmaWFibGVQYXJhbWV0ZXI+IHBhcmFtZXRlcnMpIHsNCisJCXRoaXMucGFyYW1ldGVycyA9IHBhcmFtZXRlcnM7DQorCQlwYXJhbXNJbml0aWFsU3RlcHMgPSBuZXcgZG91YmxlW3BhcmFtZXRlcnMuc2l6ZSgpXTsNCisJCWluaXRpYWxQYXJhbXNWYWx1ZXMgPSBuZXcgZG91YmxlW3BhcmFtZXRlcnMuc2l6ZSgpXTsNCisJCWludCBpPTA7DQorCQlmb3IgKGZpbmFsIE1vZGlmaWFibGVQYXJhbWV0ZXIgcGFyYW06cGFyYW1ldGVycykgew0KKwkJCXBhcmFtc0luaXRpYWxTdGVwc1tpXSA9IHBhcmFtLmdldFN0ZXAoKTsNCisJCQlpbml0aWFsUGFyYW1zVmFsdWVzW2ldID0gcGFyYW0uZ2V0SW5pdGlhbFZhbHVlKCk7DQorCQkJaSsrOw0KKwkJfQ0KKwl9DQorCQ0KKwlwdWJsaWMgdm9pZCBhZGRMaXN0ZW5lcihFcnJvckFuYWx5c2lzQWxnb3JpdGhtTGlzdGVuZXIgbCkge3RoaXMubGlzdGVuZXJzLmFkZChsKTt9DQorCXB1YmxpYyB2b2lkIGNsZWFyTGlzdGVuZXJzKCkge3RoaXMubGlzdGVuZXJzLmNsZWFyKCk7fQ0KKwkNCisJcHJvdGVjdGVkIHZvaWQgZmlyZUV2ZW50KEVycm9yQW5hbHlzaXNBbGdvcml0aG1FdmVudCBldnQpIHsNCisJCWZvcihFcnJvckFuYWx5c2lzQWxnb3JpdGhtTGlzdGVuZXIgbDpsaXN0ZW5lcnMpIGwuZXZlbnRSZWNlaXZlZChldnQpOw0KKwl9DQorfQ0KZGlmZiAtLWdpdCBhL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuYXV0b21hdGljZXhwZXJpbWVudC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9hbmFseXNpcy9hdXRvbWF0aWNleHBlcmltZW50L0FjdGl2YXRvci5qYXZhIGIvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5hdXRvbWF0aWNleHBlcmltZW50L3NyYy9vcmcvZWNsaXBzZS9zdGVtL2FuYWx5c2lzL2F1dG9tYXRpY2V4cGVyaW1lbnQvQWN0aXZhdG9yLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTdkZTJkOAotLS0gL2Rldi9udWxsCisrKyBiL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuYXV0b21hdGljZXhwZXJpbWVudC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9hbmFseXNpcy9hdXRvbWF0aWNleHBlcmltZW50L0FjdGl2YXRvci5qYXZhCkBAIC0wLDAgKzEsMTY3IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuYXV0b21hdGljZXhwZXJpbWVudDsNCisNCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyAqIENvcHlyaWdodCAoYykgMjAwOSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4NCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzDQorICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wDQorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQNCisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbA0KKyAqDQorICogQ29udHJpYnV0b3JzOg0KKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24NCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCisNCitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TdGF0dXM7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnJlc291cmNlLkltYWdlRGVzY3JpcHRvcjsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5hdXRvbWF0aWNleHBlcmltZW50LmV4ZWN1dGFibGUuQXV0b21hdGljRXhwZXJpbWVudEV4ZWN1dGFibGVBZGFwdGVyRmFjdG9yeTsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5hdXRvbWF0aWNleHBlcmltZW50LnVpLkF1dG9tYXRpY0V4cGVyaW1lbnRDb21wb3NpdGVFZGl0b3JBZGFwdGVyRmFjdG9yeTsNCitpbXBvcnQgb3JnLmVjbGlwc2UudWkucGx1Z2luLkFic3RyYWN0VUlQbHVnaW47DQoraW1wb3J0IG9yZy5vc2dpLmZyYW1ld29yay5CdW5kbGVDb250ZXh0Ow0KKw0KKy8qKg0KKyAqIFRoZSBhY3RpdmF0b3IgY2xhc3MgY29udHJvbHMgdGhlIHBsdWctaW4gbGlmZSBjeWNsZQ0KKyAqLw0KK3B1YmxpYyBjbGFzcyBBY3RpdmF0b3IgZXh0ZW5kcyBBYnN0cmFjdFVJUGx1Z2luIHsNCisNCisJLy8gVGhlIHBsdWctaW4gSUQNCisJcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUExVR0lOX0lEID0gIm9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuYXV0b21hdGljZXhwZXJpbWVudCI7IC8vJE5PTi1OTFMtMSQNCisNCisJLy8gVGhlIHNoYXJlZCBpbnN0YW5jZQ0KKwlwcml2YXRlIHN0YXRpYyBBY3RpdmF0b3IgcGx1Z2luOw0KKwkNCisJLyoqDQorCSAqIFRoZSBjb25zdHJ1Y3Rvcg0KKwkgKi8NCisJcHVibGljIEFjdGl2YXRvcigpIHsNCisJfQ0KKw0KKwkvKg0KKwkgKiAobm9uLUphdmFkb2MpDQorCSAqIEBzZWUgb3JnLmVjbGlwc2UudWkucGx1Z2luLkFic3RyYWN0VUlQbHVnaW4jc3RhcnQob3JnLm9zZ2kuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHQpDQorCSAqLw0KKwlAT3ZlcnJpZGUNCisJcHVibGljIHZvaWQgc3RhcnQoQnVuZGxlQ29udGV4dCBjb250ZXh0KSB0aHJvd3MgRXhjZXB0aW9uIHsNCisJCXN1cGVyLnN0YXJ0KGNvbnRleHQpOw0KKwkJcGx1Z2luID0gdGhpczsNCisJCW5ldyBBdXRvbWF0aWNFeHBlcmltZW50RXhlY3V0YWJsZUFkYXB0ZXJGYWN0b3J5KCk7DQorCQluZXcgQXV0b21hdGljRXhwZXJpbWVudENvbXBvc2l0ZUVkaXRvckFkYXB0ZXJGYWN0b3J5KCk7DQorCX0NCisNCisJLyoNCisJICogKG5vbi1KYXZhZG9jKQ0KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnVpLnBsdWdpbi5BYnN0cmFjdFVJUGx1Z2luI3N0b3Aob3JnLm9zZ2kuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHQpDQorCSAqLw0KKwlAT3ZlcnJpZGUNCisJcHVibGljIHZvaWQgc3RvcChCdW5kbGVDb250ZXh0IGNvbnRleHQpIHRocm93cyBFeGNlcHRpb24gew0KKwkJcGx1Z2luID0gbnVsbDsNCisJCXN1cGVyLnN0b3AoY29udGV4dCk7DQorCX0NCisNCisJLyoqDQorCSAqIFJldHVybnMgdGhlIHNoYXJlZCBpbnN0YW5jZQ0KKwkgKg0KKwkgKiBAcmV0dXJuIHRoZSBzaGFyZWQgaW5zdGFuY2UNCisJICovDQorCXB1YmxpYyBzdGF0aWMgQWN0aXZhdG9yIGdldERlZmF1bHQoKSB7DQorCQlyZXR1cm4gcGx1Z2luOw0KKwl9DQorCQ0KKwkvKioNCisJICogUmV0dXJucyBhbiBpbWFnZSBkZXNjcmlwdG9yIGZvciB0aGUgaW1hZ2UgZmlsZSBhdCB0aGUgZ2l2ZW4gcGx1Zy1pbg0KKwkgKiByZWxhdGl2ZSBwYXRoDQorCSAqIA0KKwkgKiBAcGFyYW0gcGF0aA0KKwkgKiAgICAgICAgICAgIHRoZSBwYXRoDQorCSAqIEByZXR1cm4gdGhlIGltYWdlIGRlc2NyaXB0b3INCisJICovDQorCXB1YmxpYyBzdGF0aWMgSW1hZ2VEZXNjcmlwdG9yIGdldEltYWdlRGVzY3JpcHRvcihTdHJpbmcgcGF0aCkgew0KKwkJcmV0dXJuIGltYWdlRGVzY3JpcHRvckZyb21QbHVnaW4oUExVR0lOX0lELCBwYXRoKTsNCisJfQ0KKw0KKwkvKioNCisJICogTG9nIGFuIGVycm9yIHRvIHRoZSBJTG9nIGZvciB0aGlzIHBsdWdpbg0KKwkgKiANCisJICogQHBhcmFtIG1lc3NhZ2UNCisJICogICAgICAgICAgICB0aGUgbG9jYWxpemVkIGVycm9yIG1lc3NhZ2UgdGV4dA0KKwkgKiBAcGFyYW0gZXhjZXB0aW9uDQorCSAqICAgICAgICAgICAgdGhlIGFzc29jaWF0ZWQgZXhjZXB0aW9uLCBvciBudWxsDQorCSAqLw0KKwlwdWJsaWMgc3RhdGljIHZvaWQgbG9nRXJyb3IoU3RyaW5nIG1lc3NhZ2UsIFRocm93YWJsZSBleGNlcHRpb24pIHsNCisJCS8vIERvIHdlIGhhdmUgYSBwbHVnaW4/DQorCQlpZiAocGx1Z2luICE9IG51bGwpIHsNCisJCQkvLyBZZXMNCisJCQlwbHVnaW4uZ2V0TG9nKCkubG9nKA0KKwkJCQkJbmV3IFN0YXR1cyhJU3RhdHVzLkVSUk9SLCBwbHVnaW4uZ2V0QnVuZGxlKCkNCisJCQkJCQkJLmdldFN5bWJvbGljTmFtZSgpLCAwLCBtZXNzYWdlLCBleGNlcHRpb24pKTsNCisJCX0gZWxzZSB7DQorCQkJLy8gTm8NCisJCQlTeXN0ZW0ub3V0LnByaW50bG4obWVzc2FnZSk7DQorCQkJLy8gRXhjZXB0aW9uPw0KKwkJCWlmIChleGNlcHRpb24gIT0gbnVsbCkgew0KKwkJCQkvLyBZZXMNCisJCQkJU3lzdGVtLm91dC5wcmludGxuKGV4Y2VwdGlvbi5nZXRNZXNzYWdlKCkpOw0KKwkJCX0gLy8gaWYNCisJCX0NCisJfSAvLyBsb2dFcnJvcg0KKwkNCisJDQorDQorCS8qKg0KKwkgKiBMb2cgaW5mb3JtYXRpb24gdG8gdGhlIElMb2cgZm9yIHRoaXMgcGx1Z2luDQorCSAqIA0KKwkgKiBAcGFyYW0gbWVzc2FnZQ0KKwkgKiAgICAgICAgICAgIHRoZSBsb2NhbGl6ZWQgaW5mb3JtYXRpb24gbWVzc2FnZSB0ZXh0DQorCSAqIEBwYXJhbSBleGNlcHRpb24NCisJICogICAgICAgICAgICB0aGUgYXNzb2NpYXRlZCBleGNlcHRpb24sIG9yIG51bGwNCisJICovDQorCXB1YmxpYyBzdGF0aWMgdm9pZCBsb2dJbmZvcm1hdGlvbihTdHJpbmcgbWVzc2FnZSwgVGhyb3dhYmxlIGV4Y2VwdGlvbikgew0KKwkJLy8gRG8gd2UgaGF2ZSBhIHBsdWdpbj8NCisJCWlmIChwbHVnaW4gIT0gbnVsbCkgew0KKwkJCS8vIFllcw0KKwkJCXBsdWdpbi5nZXRMb2coKS5sb2coDQorCQkJCQluZXcgU3RhdHVzKElTdGF0dXMuSU5GTywgcGx1Z2luLmdldEJ1bmRsZSgpLmdldFN5bWJvbGljTmFtZSgpLA0KKwkJCQkJCQkwLCBtZXNzYWdlLCBleGNlcHRpb24pKTsNCisJCX0NCisJCWVsc2Ugew0KKwkJCS8vIE5vDQorCQkJU3lzdGVtLm91dC5wcmludGxuKG1lc3NhZ2UpOw0KKwkJCS8vIEV4Y2VwdGlvbj8NCisJCQlpZiAoZXhjZXB0aW9uICE9IG51bGwpIHsNCisJCQkJLy8gWWVzDQorCQkJCVN5c3RlbS5vdXQucHJpbnRsbihleGNlcHRpb24uZ2V0TWVzc2FnZSgpKTsNCisJCQl9IC8vIGlmIA0KKwkJfQ0KKwl9IC8vIGxvZ0luZm9ybWF0aW9uDQorCQ0KKwkNCisJLyoqDQorCSAqIExvZyBpbmZvcm1hdGlvbiB0byB0aGUgSUxvZyBmb3IgdGhpcyBwbHVnaW4NCisJICogVGhlIG1ldGhvZCBpcyBvdmVybG9hZGVkIHRvIGFsbG93IGZvciBsb2dJbmZvcm1hdGlvbiB3aXRob3V0IGFuIGVycm9yIA0KKwkgKiBtZXRob2Qgc2V0cyB0aGUgZXJyb3IgdG8gbnVsbC4gVGhpcyBzaG91bGQgYmUgdXNlZCBpbnN0ZWFkIG9mIFN5c3RlbS5vdXQucHJpbnRsbg0KKwkgKiB0aHJvdWdob3V0IHRoZSBjb2RlLg0KKwkgKiBAcGFyYW0gbWVzc2FnZQ0KKwkgKiAgICAgICAgICAgIHRoZSBsb2NhbGl6ZWQgaW5mb3JtYXRpb24gbWVzc2FnZSB0ZXh0DQorCSAqDQorCSAqLw0KKwlwdWJsaWMgc3RhdGljIHZvaWQgbG9nSW5mb3JtYXRpb24oU3RyaW5nIG1lc3NhZ2UpIHsNCisJCS8vIERvIHdlIGhhdmUgYSBwbHVnaW4/DQorCQlpZiAocGx1Z2luICE9IG51bGwpIHsNCisJCQkvLyBZZXMNCisJCQlwbHVnaW4uZ2V0TG9nKCkubG9nKA0KKwkJCQkJbmV3IFN0YXR1cyhJU3RhdHVzLklORk8sIHBsdWdpbi5nZXRCdW5kbGUoKS5nZXRTeW1ib2xpY05hbWUoKSwNCisJCQkJCQkJMCwgbWVzc2FnZSwgbnVsbCkpOw0KKwkJfQ0KKwkJZWxzZSB7DQorCQkJLy8gTm8NCisJCQlTeXN0ZW0ub3V0LnByaW50bG4obWVzc2FnZSk7DQorCQl9DQorCX0gLy8gbG9nSW5mb3JtYXRpb24NCisNCisJDQorCQ0KKw0KKw0KKwkNCisNCit9DQpkaWZmIC0tZ2l0IGEvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5hdXRvbWF0aWNleHBlcmltZW50L3NyYy9vcmcvZWNsaXBzZS9zdGVtL2FuYWx5c2lzL2F1dG9tYXRpY2V4cGVyaW1lbnQvQXV0b21hdGljRXhwZXJpbWVudC5qYXZhIGIvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5hdXRvbWF0aWNleHBlcmltZW50L3NyYy9vcmcvZWNsaXBzZS9zdGVtL2FuYWx5c2lzL2F1dG9tYXRpY2V4cGVyaW1lbnQvQXV0b21hdGljRXhwZXJpbWVudC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAwNDY3YmYKLS0tIC9kZXYvbnVsbAorKysgYi9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQvc3JjL29yZy9lY2xpcHNlL3N0ZW0vYW5hbHlzaXMvYXV0b21hdGljZXhwZXJpbWVudC9BdXRvbWF0aWNFeHBlcmltZW50LmphdmEKQEAgLTAsMCArMSwyNzEgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5hdXRvbWF0aWNleHBlcmltZW50OworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAKKyAqIENvcHlyaWdodCAoYykgMjAxMSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4gCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIAorICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wIAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQgCisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbCAKKyAqIAorICogQ29udHJpYnV0b3JzOiAKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5FTGlzdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLkVycm9yRnVuY3Rpb247CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNjZW5hcmlvLlNjZW5hcmlvOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiBBIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5BdXRvbWF0aWMgRXhwZXJpbWVudDwvYj48L2VtPicuCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqCisgKiA8cD4KKyAqIFRoZSBmb2xsb3dpbmcgZmVhdHVyZXMgYXJlIHN1cHBvcnRlZDoKKyAqIDx1bD4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQuQXV0b21hdGljRXhwZXJpbWVudCNnZXRCYXNlU2NlbmFyaW8gPGVtPkJhc2UgU2NlbmFyaW88L2VtPn08L2xpPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuYXV0b21hdGljZXhwZXJpbWVudC5BdXRvbWF0aWNFeHBlcmltZW50I2dldFBhcmFtZXRlcnMgPGVtPlBhcmFtZXRlcnM8L2VtPn08L2xpPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuYXV0b21hdGljZXhwZXJpbWVudC5BdXRvbWF0aWNFeHBlcmltZW50I2dldEVycm9yQW5hbHlzaXNBbGdvcml0aG0gPGVtPkVycm9yIEFuYWx5c2lzIEFsZ29yaXRobTwvZW0+fTwvbGk+CisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5hdXRvbWF0aWNleHBlcmltZW50LkF1dG9tYXRpY0V4cGVyaW1lbnQjZ2V0RXJyb3JGdW5jdGlvbiA8ZW0+RXJyb3IgRnVuY3Rpb248L2VtPn08L2xpPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuYXV0b21hdGljZXhwZXJpbWVudC5BdXRvbWF0aWNFeHBlcmltZW50I2dldFRvbGVyYW5jZSA8ZW0+VG9sZXJhbmNlPC9lbT59PC9saT4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQuQXV0b21hdGljRXhwZXJpbWVudCNnZXRSZWZlcmFuY2VEYXRhRGlyIDxlbT5SZWZlcmFuY2UgRGF0YSBEaXI8L2VtPn08L2xpPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuYXV0b21hdGljZXhwZXJpbWVudC5BdXRvbWF0aWNFeHBlcmltZW50I2dldE1heGltdW1OdW1iZXJPZkl0ZXJhdGlvbnMgPGVtPk1heGltdW0gTnVtYmVyIE9mIEl0ZXJhdGlvbnM8L2VtPn08L2xpPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuYXV0b21hdGljZXhwZXJpbWVudC5BdXRvbWF0aWNFeHBlcmltZW50I2lzUmVJbml0IDxlbT5SZSBJbml0PC9lbT59PC9saT4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQuQXV0b21hdGljRXhwZXJpbWVudCNnZXRFcnJvckZ1bmMgPGVtPkVycm9yIEZ1bmM8L2VtPn08L2xpPgorICogPC91bD4KKyAqIDwvcD4KKyAqCisgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuYXV0b21hdGljZXhwZXJpbWVudC5BdXRvbWF0aWNleHBlcmltZW50UGFja2FnZSNnZXRBdXRvbWF0aWNFeHBlcmltZW50KCkKKyAqIEBtb2RlbAorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgaW50ZXJmYWNlIEF1dG9tYXRpY0V4cGVyaW1lbnQgZXh0ZW5kcyBPcHRpbWl6ZXJBbGdvcml0aG0geworCS8qKgorCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPkJhc2UgU2NlbmFyaW88L2I+PC9lbT4nIHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDxwPgorCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPkJhc2UgU2NlbmFyaW88L2VtPicgcmVmZXJlbmNlIGlzbid0IGNsZWFyLAorCSAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4KKwkgKiA8L3A+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+QmFzZSBTY2VuYXJpbzwvZW0+JyByZWZlcmVuY2UuCisJICogQHNlZSAjc2V0QmFzZVNjZW5hcmlvKFNjZW5hcmlvKQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5hdXRvbWF0aWNleHBlcmltZW50LkF1dG9tYXRpY2V4cGVyaW1lbnRQYWNrYWdlI2dldEF1dG9tYXRpY0V4cGVyaW1lbnRfQmFzZVNjZW5hcmlvKCkKKwkgKiBAbW9kZWwgcmVxdWlyZWQ9InRydWUiCisJICogQGdlbmVyYXRlZAorCSAqLworCVNjZW5hcmlvIGdldEJhc2VTY2VuYXJpbygpOworCisJLyoqCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5hdXRvbWF0aWNleHBlcmltZW50LkF1dG9tYXRpY0V4cGVyaW1lbnQjZ2V0QmFzZVNjZW5hcmlvIDxlbT5CYXNlIFNjZW5hcmlvPC9lbT59JyByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5CYXNlIFNjZW5hcmlvPC9lbT4nIHJlZmVyZW5jZS4KKwkgKiBAc2VlICNnZXRCYXNlU2NlbmFyaW8oKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwl2b2lkIHNldEJhc2VTY2VuYXJpbyhTY2VuYXJpbyB2YWx1ZSk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5QYXJhbWV0ZXJzPC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UgbGlzdC4KKwkgKiBUaGUgbGlzdCBjb250ZW50cyBhcmUgb2YgdHlwZSB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5hdXRvbWF0aWNleHBlcmltZW50Lk1vZGlmaWFibGVQYXJhbWV0ZXJ9LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPHA+CisJICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+UGFyYW1ldGVyczwvZW0+JyByZWZlcmVuY2UgbGlzdCBpc24ndCBjbGVhciwKKwkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uCisJICogPC9wPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPlBhcmFtZXRlcnM8L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3QuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQuQXV0b21hdGljZXhwZXJpbWVudFBhY2thZ2UjZ2V0QXV0b21hdGljRXhwZXJpbWVudF9QYXJhbWV0ZXJzKCkKKwkgKiBAbW9kZWwgY29udGFpbm1lbnQ9InRydWUiIHJlcXVpcmVkPSJ0cnVlIgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFTGlzdDxNb2RpZmlhYmxlUGFyYW1ldGVyPiBnZXRQYXJhbWV0ZXJzKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5FcnJvciBBbmFseXNpcyBBbGdvcml0aG08L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDxwPgorCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPkVycm9yIEFuYWx5c2lzIEFsZ29yaXRobTwvZW0+JyBhdHRyaWJ1dGUgaXNuJ3QgY2xlYXIsCisJICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLgorCSAqIDwvcD4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5FcnJvciBBbmFseXNpcyBBbGdvcml0aG08L2VtPicgYXR0cmlidXRlLgorCSAqIEBzZWUgI3NldEVycm9yQW5hbHlzaXNBbGdvcml0aG0oU3RyaW5nKQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5hdXRvbWF0aWNleHBlcmltZW50LkF1dG9tYXRpY2V4cGVyaW1lbnRQYWNrYWdlI2dldEF1dG9tYXRpY0V4cGVyaW1lbnRfRXJyb3JBbmFseXNpc0FsZ29yaXRobSgpCisJICogQG1vZGVsIHJlcXVpcmVkPSJ0cnVlIgorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICogQGRlcHJlY2F0ZWQKKwkgKi8KKwlTdHJpbmcgZ2V0RXJyb3JBbmFseXNpc0FsZ29yaXRobSgpOworCisJLyoqCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5hdXRvbWF0aWNleHBlcmltZW50LkF1dG9tYXRpY0V4cGVyaW1lbnQjZ2V0RXJyb3JBbmFseXNpc0FsZ29yaXRobSA8ZW0+RXJyb3IgQW5hbHlzaXMgQWxnb3JpdGhtPC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5FcnJvciBBbmFseXNpcyBBbGdvcml0aG08L2VtPicgYXR0cmlidXRlLgorCSAqIEBzZWUgI2dldEVycm9yQW5hbHlzaXNBbGdvcml0aG0oKQorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICogQGRlcHJlY2F0ZWQKKwkgKi8KKwl2b2lkIHNldEVycm9yQW5hbHlzaXNBbGdvcml0aG0oU3RyaW5nIHZhbHVlKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPkVycm9yIEZ1bmN0aW9uPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8cD4KKwkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5FcnJvciBGdW5jdGlvbjwvZW0+JyBhdHRyaWJ1dGUgaXNuJ3QgY2xlYXIsCisJICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLgorCSAqIDwvcD4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5FcnJvciBGdW5jdGlvbjwvZW0+JyBhdHRyaWJ1dGUuCisJICogQHNlZSAjc2V0RXJyb3JGdW5jdGlvbihTdHJpbmcpCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQuQXV0b21hdGljZXhwZXJpbWVudFBhY2thZ2UjZ2V0QXV0b21hdGljRXhwZXJpbWVudF9FcnJvckZ1bmN0aW9uKCkKKwkgKiBAbW9kZWwgcmVxdWlyZWQ9InRydWUiCisJICogQGdlbmVyYXRlZCBOT1QKKwkgKiBAZGVwcmVjYXRlZAorCSAqLworCVN0cmluZyBnZXRFcnJvckZ1bmN0aW9uKCk7CisKKwkvKioKKwkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQuQXV0b21hdGljRXhwZXJpbWVudCNnZXRFcnJvckZ1bmN0aW9uIDxlbT5FcnJvciBGdW5jdGlvbjwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+RXJyb3IgRnVuY3Rpb248L2VtPicgYXR0cmlidXRlLgorCSAqIEBzZWUgI2dldEVycm9yRnVuY3Rpb24oKQorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICogQGRlcHJlY2F0ZWQKKwkgKi8KKwl2b2lkIHNldEVycm9yRnVuY3Rpb24oU3RyaW5nIHZhbHVlKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPlRvbGVyYW5jZTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPHA+CisJICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+VG9sZXJhbmNlPC9lbT4nIGF0dHJpYnV0ZSBpc24ndCBjbGVhciwKKwkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uCisJICogPC9wPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPlRvbGVyYW5jZTwvZW0+JyBhdHRyaWJ1dGUuCisJICogQHNlZSAjc2V0VG9sZXJhbmNlKGRvdWJsZSkKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuYXV0b21hdGljZXhwZXJpbWVudC5BdXRvbWF0aWNleHBlcmltZW50UGFja2FnZSNnZXRBdXRvbWF0aWNFeHBlcmltZW50X1RvbGVyYW5jZSgpCisJICogQG1vZGVsIHJlcXVpcmVkPSJ0cnVlIgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlkb3VibGUgZ2V0VG9sZXJhbmNlKCk7CisKKwkvKioKKwkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQuQXV0b21hdGljRXhwZXJpbWVudCNnZXRUb2xlcmFuY2UgPGVtPlRvbGVyYW5jZTwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+VG9sZXJhbmNlPC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiBAc2VlICNnZXRUb2xlcmFuY2UoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwl2b2lkIHNldFRvbGVyYW5jZShkb3VibGUgdmFsdWUpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+UmVmZXJhbmNlIERhdGEgRGlyPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8cD4KKwkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5SZWZlcmFuY2UgRGF0YSBEaXI8L2VtPicgYXR0cmlidXRlIGlzbid0IGNsZWFyLAorCSAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4KKwkgKiA8L3A+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+UmVmZXJhbmNlIERhdGEgRGlyPC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiBAc2VlICNzZXRSZWZlcmFuY2VEYXRhRGlyKFN0cmluZykKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuYXV0b21hdGljZXhwZXJpbWVudC5BdXRvbWF0aWNleHBlcmltZW50UGFja2FnZSNnZXRBdXRvbWF0aWNFeHBlcmltZW50X1JlZmVyYW5jZURhdGFEaXIoKQorCSAqIEBtb2RlbCByZXF1aXJlZD0idHJ1ZSIKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJU3RyaW5nIGdldFJlZmVyYW5jZURhdGFEaXIoKTsKKworCS8qKgorCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuYXV0b21hdGljZXhwZXJpbWVudC5BdXRvbWF0aWNFeHBlcmltZW50I2dldFJlZmVyYW5jZURhdGFEaXIgPGVtPlJlZmVyYW5jZSBEYXRhIERpcjwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+UmVmZXJhbmNlIERhdGEgRGlyPC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiBAc2VlICNnZXRSZWZlcmFuY2VEYXRhRGlyKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJdm9pZCBzZXRSZWZlcmFuY2VEYXRhRGlyKFN0cmluZyB2YWx1ZSk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5NYXhpbXVtIE51bWJlciBPZiBJdGVyYXRpb25zPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8cD4KKwkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5NYXhpbXVtIE51bWJlciBPZiBJdGVyYXRpb25zPC9lbT4nIGF0dHJpYnV0ZSBpc24ndCBjbGVhciwKKwkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uCisJICogPC9wPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPk1heGltdW0gTnVtYmVyIE9mIEl0ZXJhdGlvbnM8L2VtPicgYXR0cmlidXRlLgorCSAqIEBzZWUgI3NldE1heGltdW1OdW1iZXJPZkl0ZXJhdGlvbnMobG9uZykKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuYXV0b21hdGljZXhwZXJpbWVudC5BdXRvbWF0aWNleHBlcmltZW50UGFja2FnZSNnZXRBdXRvbWF0aWNFeHBlcmltZW50X01heGltdW1OdW1iZXJPZkl0ZXJhdGlvbnMoKQorCSAqIEBtb2RlbCByZXF1aXJlZD0idHJ1ZSIKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJbG9uZyBnZXRNYXhpbXVtTnVtYmVyT2ZJdGVyYXRpb25zKCk7CisKKwkvKioKKwkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQuQXV0b21hdGljRXhwZXJpbWVudCNnZXRNYXhpbXVtTnVtYmVyT2ZJdGVyYXRpb25zIDxlbT5NYXhpbXVtIE51bWJlciBPZiBJdGVyYXRpb25zPC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5NYXhpbXVtIE51bWJlciBPZiBJdGVyYXRpb25zPC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiBAc2VlICNnZXRNYXhpbXVtTnVtYmVyT2ZJdGVyYXRpb25zKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJdm9pZCBzZXRNYXhpbXVtTnVtYmVyT2ZJdGVyYXRpb25zKGxvbmcgdmFsdWUpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+UmUgSW5pdDwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPHA+CisJICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+UmUgSW5pdDwvZW0+JyBhdHRyaWJ1dGUgaXNuJ3QgY2xlYXIsCisJICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLgorCSAqIDwvcD4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5SZSBJbml0PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiBAc2VlICNzZXRSZUluaXQoYm9vbGVhbikKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuYXV0b21hdGljZXhwZXJpbWVudC5BdXRvbWF0aWNleHBlcmltZW50UGFja2FnZSNnZXRBdXRvbWF0aWNFeHBlcmltZW50X1JlSW5pdCgpCisJICogQG1vZGVsIHJlcXVpcmVkPSJ0cnVlIgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlib29sZWFuIGlzUmVJbml0KCk7CisKKwkvKioKKwkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQuQXV0b21hdGljRXhwZXJpbWVudCNpc1JlSW5pdCA8ZW0+UmUgSW5pdDwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+UmUgSW5pdDwvZW0+JyBhdHRyaWJ1dGUuCisJICogQHNlZSAjaXNSZUluaXQoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwl2b2lkIHNldFJlSW5pdChib29sZWFuIHZhbHVlKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPkVycm9yIEZ1bmM8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDxwPgorCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPkVycm9yIEZ1bmM8L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlIGlzbid0IGNsZWFyLAorCSAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4KKwkgKiA8L3A+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+RXJyb3IgRnVuYzwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UuCisJICogQHNlZSAjc2V0RXJyb3JGdW5jKEVycm9yRnVuY3Rpb24pCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQuQXV0b21hdGljZXhwZXJpbWVudFBhY2thZ2UjZ2V0QXV0b21hdGljRXhwZXJpbWVudF9FcnJvckZ1bmMoKQorCSAqIEBtb2RlbCBjb250YWlubWVudD0idHJ1ZSIgcmVxdWlyZWQ9InRydWUiCisJICogQGdlbmVyYXRlZAorCSAqLworCUVycm9yRnVuY3Rpb24gZ2V0RXJyb3JGdW5jKCk7CisKKwkvKioKKwkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQuQXV0b21hdGljRXhwZXJpbWVudCNnZXRFcnJvckZ1bmMgPGVtPkVycm9yIEZ1bmM8L2VtPn0nIGNvbnRhaW5tZW50IHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPkVycm9yIEZ1bmM8L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlLgorCSAqIEBzZWUgI2dldEVycm9yRnVuYygpCisJICogQGdlbmVyYXRlZAorCSAqLworCXZvaWQgc2V0RXJyb3JGdW5jKEVycm9yRnVuY3Rpb24gdmFsdWUpOworCit9IC8vIEF1dG9tYXRpY0V4cGVyaW1lbnQKZGlmZiAtLWdpdCBhL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuYXV0b21hdGljZXhwZXJpbWVudC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9hbmFseXNpcy9hdXRvbWF0aWNleHBlcmltZW50L0F1dG9tYXRpY0V4cGVyaW1lbnRKb2IuamF2YSBiL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuYXV0b21hdGljZXhwZXJpbWVudC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9hbmFseXNpcy9hdXRvbWF0aWNleHBlcmltZW50L0F1dG9tYXRpY0V4cGVyaW1lbnRKb2IuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMDZkNTcyCi0tLSAvZGV2L251bGwKKysrIGIvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5hdXRvbWF0aWNleHBlcmltZW50L3NyYy9vcmcvZWNsaXBzZS9zdGVtL2FuYWx5c2lzL2F1dG9tYXRpY2V4cGVyaW1lbnQvQXV0b21hdGljRXhwZXJpbWVudEpvYi5qYXZhCkBAIC0wLDAgKzEsMTMwIEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuYXV0b21hdGljZXhwZXJpbWVudDsNCisNCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyAqIENvcHlyaWdodCAoYykgMjAwOSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4NCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzDQorICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wDQorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQNCisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbA0KKyAqDQorICogQ29udHJpYnV0b3JzOg0KKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24NCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCisNCitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQcm9ncmVzc01vbml0b3I7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU3RhdHVzOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmpvYnMuZXhlY3V0aW9uLkV4ZWN1dGFibGU7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlNoZWxsOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5QbGF0Zm9ybVVJOw0KKw0KKw0KKw0KK3B1YmxpYyBjbGFzcyBBdXRvbWF0aWNFeHBlcmltZW50Sm9iIGV4dGVuZHMgRXhlY3V0YWJsZSB7DQorCQ0KKwlwcm90ZWN0ZWQgQXV0b21hdGljRXhwZXJpbWVudCBhdXRvbWF0aWNFeHBlcmltZW50ID0gbnVsbDsNCisJcHJvdGVjdGVkIFNoZWxsIHNoZWxsID0gUGxhdGZvcm1VSS5nZXRXb3JrYmVuY2goKS5nZXREaXNwbGF5KCkuZ2V0QWN0aXZlU2hlbGwoKTsNCisJcHJvdGVjdGVkIGJvb2xlYW4gaXNSdW5uaW5nID0gZmFsc2U7DQorDQorCXB1YmxpYyBBdXRvbWF0aWNFeHBlcmltZW50Sm9iKFN0cmluZyB0aXRsZSwgaW50IHNlcXVlbmNlTnVtYmVyKSB7DQorCQlzdXBlcih0aXRsZSA9PSBudWxsID8gIiIgOiB0aXRsZSwgc2VxdWVuY2VOdW1iZXIpOyAvLyROT04tTkxTLTEkDQorCX0NCisJDQorCXB1YmxpYyBBdXRvbWF0aWNFeHBlcmltZW50Sm9iKEF1dG9tYXRpY0V4cGVyaW1lbnQgdG9SdW4pIHsNCisJCXRoaXModG9SdW4uZ2V0RHVibGluQ29yZSgpLmdldFRpdGxlKCksIDEpOw0KKwkJdGhpcy5hdXRvbWF0aWNFeHBlcmltZW50ID0gdG9SdW47DQorCX0NCisNCisJLyoqDQorCSAqIEBzZWUgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLmpvYnMuSm9iI3J1bihvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVByb2dyZXNzTW9uaXRvcikNCisJICovDQorCUBPdmVycmlkZQ0KKwlwcm90ZWN0ZWQgSVN0YXR1cyBydW4oSVByb2dyZXNzTW9uaXRvciBtb25pdG9yKSB7DQorCQlJU3RhdHVzIHJldFZhbHVlID0gU3RhdHVzLk9LX1NUQVRVUzsNCisvLwkJaXNSdW5uaW5nID0gdHJ1ZTsNCisvLwkJDQorLy8JCS8vUnVuDQorLy8JCUVycm9yQW5hbHlzaXNBbGdvcml0aG0gYWxnb3JpdGhtID0gbnVsbDsNCisvLwkJU3RyaW5nIGFsZ29yaXRobU5hbWUgPSBhdXRvbWF0aWNFeHBlcmltZW50LmdldEVycm9yQW5hbHlzaXNBbGdvcml0aG0oKTsNCisvLwkJaWYgKGFsZ29yaXRobU5hbWUuZXF1YWxzKCJOZWRsZXItTWVhZCBBbGdvcml0aG0iKSkgew0KKy8vCQkJYWxnb3JpdGhtID0gbmV3IFNpbXBsZXhBbGdvcml0aG1FeGVjdXRlcihzaGVsbCk7DQorLy8JCX0NCisvLwkJYWxnb3JpdGhtLnNldEJhc2VTY2VuYXJpbyhhdXRvbWF0aWNFeHBlcmltZW50LmdldEJhc2VTY2VuYXJpbygpKTsNCisvLwkJDQorLy8JCWludCBudW1PZlBhcmFtcyA9IGF1dG9tYXRpY0V4cGVyaW1lbnQuZ2V0UGFyYW1ldGVycygpLnNpemUoKTsNCisvLwkJZG91YmxlW10gaW5pdGlhbFBhcmFtc1ZhbHVlcyA9IG5ldyBkb3VibGVbbnVtT2ZQYXJhbXNdOyANCisvLwkJZG91YmxlW10gcGFyYW1zU3RlcHMgPSBuZXcgZG91YmxlW251bU9mUGFyYW1zXTsNCisvLwkJU3RyaW5nW10gcGFyYW1zTmFtZXMgPSBuZXcgU3RyaW5nW251bU9mUGFyYW1zXTsNCisvLwkJDQorLy8JCWludCBpbmRleCA9IDA7DQorLy8JCWZvciAoTW9kaWZpYWJsZVBhcmFtZXRlciBwYXJhbWV0ZXI6YXV0b21hdGljRXhwZXJpbWVudC5nZXRQYXJhbWV0ZXJzKCkpIHsNCisvLwkJCWluaXRpYWxQYXJhbXNWYWx1ZXNbaW5kZXhdID0gcGFyYW1ldGVyLmdldEluaXRpYWxWYWx1ZSgpOw0KKy8vCQkJcGFyYW1zU3RlcHNbaW5kZXhdID0gcGFyYW1ldGVyLmdldFN0ZXAoKTsNCisvLwkJCXBhcmFtc05hbWVzW2luZGV4XSA9IHBhcmFtZXRlci5nZXRGZWF0dXJlTmFtZSgpOw0KKy8vCQkJaW5kZXgrKzsNCisvLwkJfQ0KKy8vCQlhbGdvcml0aG0uc2V0SW5pdGlhbFBhcmFtZXRlcnNWYWx1ZXMoaW5pdGlhbFBhcmFtc1ZhbHVlcyk7DQorLy8JCWFsZ29yaXRobS5zZXRQYXJhbWV0ZXJzU3RlcHMocGFyYW1zU3RlcHMpOw0KKy8vCQlhbGdvcml0aG0uc2V0UGFyYW1ldGVycyhhdXRvbWF0aWNFeHBlcmltZW50LmdldFBhcmFtZXRlcnMoKSk7DQorLy8JCQ0KKy8vCQlkb3VibGUgdG9sZXJhbmNlID0gYXV0b21hdGljRXhwZXJpbWVudC5nZXRUb2xlcmFuY2UoKTsNCisvLwkJYWxnb3JpdGhtLnNldFRvbGVyYW5jZSh0b2xlcmFuY2UpOwkJDQorLy8JCQ0KKy8vCQlFcnJvckZ1bmN0aW9uIGVycm9yRnVuY3Rpb24gPSBudWxsOw0KKy8vCQlTdHJpbmcgZXJyb3JGdW5jdGlvbk5hbWUgPSBhdXRvbWF0aWNFeHBlcmltZW50LmdldEVycm9yRnVuY3Rpb24oKTsNCisvLwkJaWYgKGVycm9yRnVuY3Rpb25OYW1lLmVxdWFscygiVGhyZXNob2xkIGVycm9yIGZ1bmN0aW9uIikpIHsNCisvLwkJCWVycm9yRnVuY3Rpb24gPSBBbmFseXNpc0ZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZVRocmVzaG9sZEVycm9yRnVuY3Rpb24oKTsNCisvLwkJfQ0KKy8vCQlpZiAoZXJyb3JGdW5jdGlvbk5hbWUuZXF1YWxzKCJTaW1wbGUgZXJyb3IgZnVuY3Rpb24iKSkgew0KKy8vCQkJZXJyb3JGdW5jdGlvbiA9IEFuYWx5c2lzRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlU2ltcGxlRXJyb3JGdW5jdGlvbigpOw0KKy8vCQl9CQkNCisvLwkJYWxnb3JpdGhtLnNldEVycm9yRnVuY3Rpb24oZXJyb3JGdW5jdGlvbik7DQorLy8JCQ0KKy8vCQlTdHJpbmcgcmVmRGlyID0gYXV0b21hdGljRXhwZXJpbWVudC5nZXRSZWZlcmFuY2VEYXRhRGlyKCk7DQorLy8JCWFsZ29yaXRobS5zZXRSZWZlcmVuY2VEYXRhRGlyZWN0b3J5KHJlZkRpcik7DQorLy8JCQ0KKy8vCQlhbGdvcml0aG0uaW5pdCgpOw0KKy8vCQkNCisvLwkJbG9uZyBiZWZvcmUgPSBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKTsNCisvLwkJYWxnb3JpdGhtLmV4ZWN1dGUoKTsNCisvLwkJbG9uZyBhZnRlciA9IFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpOw0KKy8vCQlBY3RpdmF0b3IubG9nSW5mb3JtYXRpb24oIlRpbWUgdG8gZXhlY3V0ZSB0aGUgTmVkbGVyLU1lYWQgQWxnb3JpdGhtOiAiICsgKGFmdGVyLWJlZm9yZSkvMTAwMCArICIgc2Vjb25kcyIpOw0KKy8vCQlBY3RpdmF0b3IubG9nSW5mb3JtYXRpb24oIk1pbmltdW0gdmFsdWU6ICIgKyBhbGdvcml0aG0uZ2V0UmVzdWx0VmFsdWUoKSk7DQorLy8JCVN5c3RlbS5vdXQucHJpbnQoIlBhcmFtZXRlcnMgdmFsdWVzOiAiKTsNCisvLwkJZm9yIChkb3VibGUgcGFyYW06YWxnb3JpdGhtLmdldFJlc3VsdFBhcmFtZXRlcnMoKSkgew0KKy8vCQkJU3lzdGVtLm91dC5wcmludChwYXJhbSArICIsICIpOw0KKy8vCQl9DQorLy8JCUFjdGl2YXRvci5sb2dJbmZvcm1hdGlvbigpOw0KKy8vCQkNCisvLwkJaXNSdW5uaW5nID0gZmFsc2U7DQorCQlyZXR1cm4gcmV0VmFsdWU7DQorCX0NCisNCisJcHVibGljIGJvb2xlYW4gaXNSdW5uaW5nKCkgew0KKwkJcmV0dXJuIGlzUnVubmluZzsNCisJfQ0KKw0KKwlwdWJsaWMgdm9pZCBwYXVzZSgpIHsNCisJCS8vIFRPRE8gQXV0by1nZW5lcmF0ZWQgbWV0aG9kIHN0dWINCisJCQ0KKwl9DQorDQorCXB1YmxpYyB2b2lkIHJlc2V0KCkgew0KKwkJLy8gVE9ETyBBdXRvLWdlbmVyYXRlZCBtZXRob2Qgc3R1Yg0KKwkJDQorCX0NCisNCisJcHVibGljIHZvaWQgcnVuKCkgewkJDQorCQlzY2hlZHVsZSgpOwkJCQkNCisJfQ0KKw0KKwlwdWJsaWMgdm9pZCBzdGVwKCkgew0KKwkJLy8gVE9ETyBBdXRvLWdlbmVyYXRlZCBtZXRob2Qgc3R1Yg0KKwkJDQorCX0NCisNCisJcHVibGljIHZvaWQgc3RvcCgpIHsNCisJCS8vIFRPRE8gQXV0by1nZW5lcmF0ZWQgbWV0aG9kIHN0dWIJCQ0KKwl9DQorCQ0KK30NCmRpZmYgLS1naXQgYS9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQvc3JjL29yZy9lY2xpcHNlL3N0ZW0vYW5hbHlzaXMvYXV0b21hdGljZXhwZXJpbWVudC9BdXRvbWF0aWNFeHBlcmltZW50TWFuYWdlci5qYXZhIGIvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5hdXRvbWF0aWNleHBlcmltZW50L3NyYy9vcmcvZWNsaXBzZS9zdGVtL2FuYWx5c2lzL2F1dG9tYXRpY2V4cGVyaW1lbnQvQXV0b21hdGljRXhwZXJpbWVudE1hbmFnZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMmU0ODZlCi0tLSAvZGV2L251bGwKKysrIGIvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5hdXRvbWF0aWNleHBlcmltZW50L3NyYy9vcmcvZWNsaXBzZS9zdGVtL2FuYWx5c2lzL2F1dG9tYXRpY2V4cGVyaW1lbnQvQXV0b21hdGljRXhwZXJpbWVudE1hbmFnZXIuamF2YQpAQCAtMCwwICsxLDE0NCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOSwyMDEwIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5hdXRvbWF0aWNleHBlcmltZW50OworCitpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuY29uY3VycmVudC5Db3VudERvd25MYXRjaDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUHJvZ3Jlc3NNb25pdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TdGF0dXM7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLmpvYnMuSm9iOworCisKK3B1YmxpYyBjbGFzcyBBdXRvbWF0aWNFeHBlcmltZW50TWFuYWdlciB7CisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgQXV0b21hdGljRXhwZXJpbWVudE1hbmFnZXIgaW5zdGFuY2UgPSBuZXcgQXV0b21hdGljRXhwZXJpbWVudE1hbmFnZXIoKTsKKwlwcm90ZWN0ZWQgc3RhdGljIGJvb2xlYW4gUVVJVF9OT1cgPSBmYWxzZTsKKwlwcm90ZWN0ZWQgc3RhdGljIGJvb2xlYW4gUEFVU0VfTk9XID0gZmFsc2U7CisJcHJvdGVjdGVkIHN0YXRpYyBDb3VudERvd25MYXRjaCBzdG9wTGF0Y2ggPSBudWxsOworCXByb3RlY3RlZCBzdGF0aWMgRXJyb3JBbmFseXNpc0FsZ29yaXRobSBjdXJyZW50UnVubmluZ0FsZ29yaXRobSA9IG51bGw7CisJcHJvdGVjdGVkIHN0YXRpYyBBdXRvbWF0aWNFeHBlcmltZW50IGN1cnJlbnRSdW5uaW5nRXhwZXJpZW50OworCQorCXB1YmxpYyB2b2lkIHF1aXROb3coKSB7CisJCXN0b3BMYXRjaCA9IG5ldyBDb3VudERvd25MYXRjaCgxKTsKKwkJUVVJVF9OT1cgPSB0cnVlOworCQl0cnkgeworCQkJc3RvcExhdGNoLmF3YWl0KCk7CisJCX0gY2F0Y2ggKEludGVycnVwdGVkRXhjZXB0aW9uIGUpIHsKKwkJCWUucHJpbnRTdGFja1RyYWNlKCk7CisJCX0KKwl9CisJCisJcHVibGljIHN0YXRpYyB2b2lkIHBhdXNlKCkgeworCQlQQVVTRV9OT1cgPSB0cnVlOworCQkvLyBUT0RPICBQbGVhc2UgcGF1c2Ugbm93IGlmIHdlIHdhbnQgcGF1c2UKKwl9CisJcHVibGljIHN0YXRpYyB2b2lkIGNvbnRpbnVlUnVuKCkgeworCQlQQVVTRV9OT1cgPSBmYWxzZTsKKwkJLy8gVE9ETyAgUGxlYXNlIGNvbnRpbnVlIG5vdyBpZiB3ZSB3YW50IENvbnRpbnVlCisJfQorCQorCXB1YmxpYyB2b2lkIHJlc3RhcnROb3coZG91YmxlW10gcmVzdGFydFBhcmFtVmFsdWVzKSB7CisJCS8vIFRPRE8gICBSZXN0YXJ0IHdpdGggdGhlIHZhbHVlZCBwcm92aWRlZAorCQlRVUlUX05PVyA9IGZhbHNlOworCQljdXJyZW50UnVubmluZ0FsZ29yaXRobS5yZWluaXRTdGFydFBhcmFtcyhjdXJyZW50UnVubmluZ0V4cGVyaWVudCwgcmVzdGFydFBhcmFtVmFsdWVzKTsKKwkJY3VycmVudFJ1bm5pbmdBbGdvcml0aG0uY2xlYXJMaXN0ZW5lcnMoKTsKKwkJLy8gU3RlZmFuIGZpeCwgd2UgY2FuJ3QgaG9sZCB1cCB0aGUgVUkgdGhyZWFkLCBpdCBjYXVzZXMgbWVtb3J5IGxlYWtzCisJCUpvYiBqID0gbmV3IEpvYigiTWluaW1pemVyIGFsZ29yaXRoIikgeworCQkJQE92ZXJyaWRlCisJCQlwcm90ZWN0ZWQgSVN0YXR1cyBydW4oSVByb2dyZXNzTW9uaXRvciBtb25pdG9yKSB7CisJCQkJY3VycmVudFJ1bm5pbmdBbGdvcml0aG0uZXhlY3V0ZSgpOworCQkJCXJldHVybiBTdGF0dXMuT0tfU1RBVFVTOworCQkJfQorCQl9OworCQkKKwkJQXV0b21hdGljRXhwZXJpbWVudE1hbmFnZXJFdmVudCBuZXdFdmVudCA9IG5ldyBBdXRvbWF0aWNFeHBlcmltZW50TWFuYWdlckV2ZW50KGN1cnJlbnRSdW5uaW5nRXhwZXJpZW50LCBjdXJyZW50UnVubmluZ0FsZ29yaXRobSwgTUFOQUdFUl9TVEFUVVMuU0NIRURVTEVEKTsKKwkJZmlyZUV2ZW50KG5ld0V2ZW50KTsKKwkJai5zY2hlZHVsZSgpOworCX0KKworCXByaXZhdGUgQXJyYXlMaXN0PEF1dG9tYXRpY0V4cGVyaW1lbnRNYW5hZ2VyTGlzdGVuZXI+IGxpc3RlbmVycyA9IG5ldyBBcnJheUxpc3Q8QXV0b21hdGljRXhwZXJpbWVudE1hbmFnZXJMaXN0ZW5lcj4oKTsKKwkKKwlwcml2YXRlIEF1dG9tYXRpY0V4cGVyaW1lbnRNYW5hZ2VyKCkgeworCX0KKwlwdWJsaWMgc3RhdGljIEF1dG9tYXRpY0V4cGVyaW1lbnRNYW5hZ2VyIGdldEluc3RhbmNlKCkgCisJeworCQlyZXR1cm4gaW5zdGFuY2U7CisJfQorCQorCXB1YmxpYyBFcnJvckFuYWx5c2lzQWxnb3JpdGhtIGNyZWF0ZUFsZ29yaXRobShPcHRpbWl6ZXJBbGdvcml0aG0gYWxnKSB7CisJCVFVSVRfTk9XID0gZmFsc2U7IC8vIGluIGNhc2UgUkVTVEFSVElORworCQlQQVVTRV9OT1cgPSBmYWxzZTsKKwkJRXJyb3JBbmFseXNpc0FsZ29yaXRobSByZXN1bHQgPSBFcnJvckFuYWx5c2lzQWxnb3JpdGhtRmFjdG9yeS5JTlNUQU5DRS5jcmVhdGVFcnJvckFuYWx5c2lzQWxnb3JpdGhtKGFsZyk7CisJCXJldHVybiByZXN1bHQ7CisJfQorCQorCXB1YmxpYyB2b2lkIGV4ZWN1dGVBbGdvcml0aG0oZmluYWwgRXJyb3JBbmFseXNpc0FsZ29yaXRobSBhbGdvcml0aG0sIGZpbmFsIEF1dG9tYXRpY0V4cGVyaW1lbnQgYXV0b21hdGljRXhwZXJpbWVudCkgeworCQlRVUlUX05PVyA9IGZhbHNlOyAvLyBpbiBjYXNlIFJFU1RBUlRJTkcKKwkJUEFVU0VfTk9XID0gZmFsc2U7CisJCWN1cnJlbnRSdW5uaW5nQWxnb3JpdGhtID0gYWxnb3JpdGhtOworCQljdXJyZW50UnVubmluZ0V4cGVyaWVudCA9IGF1dG9tYXRpY0V4cGVyaW1lbnQ7CisJCQorCQlhbGdvcml0aG0uaW5pdChhdXRvbWF0aWNFeHBlcmltZW50LCBhbGdvcml0aG0pOworCQkvLyBTdGVmYW4gZml4LCB3ZSBjYW4ndCBob2xkIHVwIHRoZSBVSSB0aHJlYWQsIGl0IGNhdXNlcyBtZW1vcnkgbGVha3MKKwkJSm9iIGogPSBuZXcgSm9iKCJNaW5pbWl6ZXIgYWxnb3JpdGgiKSB7CisJCQlAT3ZlcnJpZGUKKwkJCXByb3RlY3RlZCBJU3RhdHVzIHJ1bihJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IpIHsKKwkJCQlhbGdvcml0aG0uZXhlY3V0ZSgpOworCQkJCXJldHVybiBTdGF0dXMuT0tfU1RBVFVTOworCQkJfQorCQl9OworCQkKKwkJQXV0b21hdGljRXhwZXJpbWVudE1hbmFnZXJFdmVudCBuZXdFdmVudCA9IG5ldyBBdXRvbWF0aWNFeHBlcmltZW50TWFuYWdlckV2ZW50KGF1dG9tYXRpY0V4cGVyaW1lbnQsIGFsZ29yaXRobSwgTUFOQUdFUl9TVEFUVVMuU0NIRURVTEVEKTsKKwkJZmlyZUV2ZW50KG5ld0V2ZW50KTsKKwkJai5zY2hlZHVsZSgpOworCX0KKwkKKwlwcml2YXRlICB2b2lkIGZpcmVFdmVudChBdXRvbWF0aWNFeHBlcmltZW50TWFuYWdlckV2ZW50IGV2dCkgeworCQlmb3IoQXV0b21hdGljRXhwZXJpbWVudE1hbmFnZXJMaXN0ZW5lciBsOmxpc3RlbmVycykgbC5ldmVudFJlY2VpdmVkKGV2dCk7CisJfQorCQorCXB1YmxpYyB2b2lkIGFkZExpc3RlbmVyKEF1dG9tYXRpY0V4cGVyaW1lbnRNYW5hZ2VyTGlzdGVuZXIgbCkgeworCQl0aGlzLmxpc3RlbmVycy5hZGQobCk7CisJfQorCQorCXB1YmxpYyB2b2lkIGNsZWFyTGlzdGVuZXJzKCkgeworCQl0aGlzLmxpc3RlbmVycy5jbGVhcigpOworCX0KKwlwdWJsaWMgc3RhdGljIHZvaWQgbWFpbigpIHsKKwkJUVVJVF9OT1cgPSBmYWxzZTsgLy8gaW4gY2FzZSBSRVNUQVJUSU5HCisJCVBBVVNFX05PVyA9IGZhbHNlOworCQlBdXRvbWF0aWNFeHBlcmltZW50TWFuYWdlciBtYW5hZ2VyID0gQXV0b21hdGljRXhwZXJpbWVudE1hbmFnZXIuZ2V0SW5zdGFuY2UoKTsKKwkJbWFuYWdlci5hZGRMaXN0ZW5lcihuZXcgQXV0b21hdGljRXhwZXJpbWVudE1hbmFnZXJMaXN0ZW5lcigpIHsKKwkJCQorCQkJcHVibGljIHZvaWQgZXZlbnRSZWNlaXZlZChBdXRvbWF0aWNFeHBlcmltZW50TWFuYWdlckV2ZW50IGV2dCkgeworCQkJCWlmKGV2dC5zdGF0dXMgPT0gTUFOQUdFUl9TVEFUVVMuU0NIRURVTEVEKSB7CisJCQkJCUVycm9yQW5hbHlzaXNBbGdvcml0aG0gYWxnID0gZXZ0LmFsZ29yaXRobTsKKwkJCQkJCisJCQkJCWFsZy5hZGRMaXN0ZW5lcihuZXcgRXJyb3JBbmFseXNpc0FsZ29yaXRobUxpc3RlbmVyKCkgeworCQkJCQkJCisJCQkJCQlwdWJsaWMgdm9pZCBldmVudFJlY2VpdmVkKEVycm9yQW5hbHlzaXNBbGdvcml0aG1FdmVudCBldnQpIHsKKwkJCQkJCQlpZihldnQuc3RhdHVzID09IEFMR09SSVRITV9TVEFUVVMuRklOSVNIRURfQUxHT1JJVEhNKSB7CisJCQkJCQkJCS8vIFRoZSBhbGdvcml0aG0gaGFzIGZpbmlzaGVkLiBTbWFsbGVzdCB2YWx1ZSBpbiAKKwkJCQkJCQkJLy9ldnQucmVzdWx0CisJCQkJCQkJfSBlbHNlIGlmKGV2dC5zdGF0dXMgPT0gQUxHT1JJVEhNX1NUQVRVUy5GSU5JU0hFRF9TSU1VTEFUSU9OKSB7CisJCQkJCQkJCS8vIE9uZSBzaW11bGF0aW9uIGlzIGRvbmUuIFRoZSByZXN1bHQgaXMgaW4gZXZ0LnJlc3VsdAorCQkJCQkJCX0gZWxzZSBpZihldnQuc3RhdHVzID09IEFMR09SSVRITV9TVEFUVVMuUkVTVEFSVEVEX0FMR09SSVRITSkgeworCQkJCQkJCQkvLyBUaGUgYWxnb3JpdGhtIGhhcyByZXN0YXJ0ZWQuIFNtYWxsZXN0IHZhbHVlIGluIAorCQkJCQkJCQkvLyBldnQucmVzdWx0CisJCQkJCQkJfQorCQkJCQkJfQorCQkJCQl9KTsKKwkJCQl9CisJCQl9CisJCX0pOworCX0KK30KZGlmZiAtLWdpdCBhL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuYXV0b21hdGljZXhwZXJpbWVudC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9hbmFseXNpcy9hdXRvbWF0aWNleHBlcmltZW50L0F1dG9tYXRpY0V4cGVyaW1lbnRNYW5hZ2VyRXZlbnQuamF2YSBiL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuYXV0b21hdGljZXhwZXJpbWVudC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9hbmFseXNpcy9hdXRvbWF0aWNleHBlcmltZW50L0F1dG9tYXRpY0V4cGVyaW1lbnRNYW5hZ2VyRXZlbnQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NjMzNDkxCi0tLSAvZGV2L251bGwKKysrIGIvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5hdXRvbWF0aWNleHBlcmltZW50L3NyYy9vcmcvZWNsaXBzZS9zdGVtL2FuYWx5c2lzL2F1dG9tYXRpY2V4cGVyaW1lbnQvQXV0b21hdGljRXhwZXJpbWVudE1hbmFnZXJFdmVudC5qYXZhCkBAIC0wLDAgKzEsMjUgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDksMjAxMCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuYXV0b21hdGljZXhwZXJpbWVudDsKKworCitwdWJsaWMgY2xhc3MgQXV0b21hdGljRXhwZXJpbWVudE1hbmFnZXJFdmVudCB7CisKKwlwdWJsaWMgQXV0b21hdGljRXhwZXJpbWVudCBleHBlcmltZW50OworCXB1YmxpYyBFcnJvckFuYWx5c2lzQWxnb3JpdGhtIGFsZ29yaXRobTsKKwlwdWJsaWMgTUFOQUdFUl9TVEFUVVMgc3RhdHVzOworCQorCXB1YmxpYyBBdXRvbWF0aWNFeHBlcmltZW50TWFuYWdlckV2ZW50KEF1dG9tYXRpY0V4cGVyaW1lbnQgYXV0b21hdGljRXhwZXJpbWVudCwgRXJyb3JBbmFseXNpc0FsZ29yaXRobSBhbGdvcml0aG0sIE1BTkFHRVJfU1RBVFVTIHN0YXQpIHsKKwkJdGhpcy5leHBlcmltZW50ID0gYXV0b21hdGljRXhwZXJpbWVudDsKKwkJdGhpcy5hbGdvcml0aG0gPSBhbGdvcml0aG07CisJCXRoaXMuc3RhdHVzID0gc3RhdDsKKwl9Cit9CmRpZmYgLS1naXQgYS9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQvc3JjL29yZy9lY2xpcHNlL3N0ZW0vYW5hbHlzaXMvYXV0b21hdGljZXhwZXJpbWVudC9BdXRvbWF0aWNFeHBlcmltZW50TWFuYWdlckxpc3RlbmVyLmphdmEgYi9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQvc3JjL29yZy9lY2xpcHNlL3N0ZW0vYW5hbHlzaXMvYXV0b21hdGljZXhwZXJpbWVudC9BdXRvbWF0aWNFeHBlcmltZW50TWFuYWdlckxpc3RlbmVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzNjOGUyNAotLS0gL2Rldi9udWxsCisrKyBiL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuYXV0b21hdGljZXhwZXJpbWVudC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9hbmFseXNpcy9hdXRvbWF0aWNleHBlcmltZW50L0F1dG9tYXRpY0V4cGVyaW1lbnRNYW5hZ2VyTGlzdGVuZXIuamF2YQpAQCAtMCwwICsxLDE2IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA5LDIwMTAgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQ7CisKK3B1YmxpYyBpbnRlcmZhY2UgQXV0b21hdGljRXhwZXJpbWVudE1hbmFnZXJMaXN0ZW5lciB7CisKKwlwdWJsaWMgdm9pZCBldmVudFJlY2VpdmVkKEF1dG9tYXRpY0V4cGVyaW1lbnRNYW5hZ2VyRXZlbnQgZXZ0KTsKK30KZGlmZiAtLWdpdCBhL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuYXV0b21hdGljZXhwZXJpbWVudC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9hbmFseXNpcy9hdXRvbWF0aWNleHBlcmltZW50L0F1dG9tYXRpY2V4cGVyaW1lbnRGYWN0b3J5LmphdmEgYi9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQvc3JjL29yZy9lY2xpcHNlL3N0ZW0vYW5hbHlzaXMvYXV0b21hdGljZXhwZXJpbWVudC9BdXRvbWF0aWNleHBlcmltZW50RmFjdG9yeS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU0ZWIyZjEKLS0tIC9kZXYvbnVsbAorKysgYi9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQvc3JjL29yZy9lY2xpcHNlL3N0ZW0vYW5hbHlzaXMvYXV0b21hdGljZXhwZXJpbWVudC9BdXRvbWF0aWNleHBlcmltZW50RmFjdG9yeS5qYXZhCkBAIC0wLDAgKzEsNjkgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5hdXRvbWF0aWNleHBlcmltZW50OworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAKKyAqIENvcHlyaWdodCAoYykgMjAxMSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4gCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIAorICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wIAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQgCisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbCAKKyAqIAorICogQ29udHJpYnV0b3JzOiAKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FRmFjdG9yeTsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogVGhlIDxiPkZhY3Rvcnk8L2I+IGZvciB0aGUgbW9kZWwuCisgKiBJdCBwcm92aWRlcyBhIGNyZWF0ZSBtZXRob2QgZm9yIGVhY2ggbm9uLWFic3RyYWN0IGNsYXNzIG9mIHRoZSBtb2RlbC4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQuQXV0b21hdGljZXhwZXJpbWVudFBhY2thZ2UKKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGludGVyZmFjZSBBdXRvbWF0aWNleHBlcmltZW50RmFjdG9yeSBleHRlbmRzIEVGYWN0b3J5IHsKKwkvKioKKwkgKiBUaGUgc2luZ2xldG9uIGluc3RhbmNlIG9mIHRoZSBmYWN0b3J5LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUF1dG9tYXRpY2V4cGVyaW1lbnRGYWN0b3J5IGVJTlNUQU5DRSA9IG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuYXV0b21hdGljZXhwZXJpbWVudC5pbXBsLkF1dG9tYXRpY2V4cGVyaW1lbnRGYWN0b3J5SW1wbC5pbml0KCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPkF1dG9tYXRpYyBFeHBlcmltZW50PC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiBhIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5BdXRvbWF0aWMgRXhwZXJpbWVudDwvZW0+Jy4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQXV0b21hdGljRXhwZXJpbWVudCBjcmVhdGVBdXRvbWF0aWNFeHBlcmltZW50KCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPk1vZGlmaWFibGUgUGFyYW1ldGVyPC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiBhIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5Nb2RpZmlhYmxlIFBhcmFtZXRlcjwvZW0+Jy4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJTW9kaWZpYWJsZVBhcmFtZXRlciBjcmVhdGVNb2RpZmlhYmxlUGFyYW1ldGVyKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPk9wdGltaXplciBBbGdvcml0aG08L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPk9wdGltaXplciBBbGdvcml0aG08L2VtPicuCisJICogQGdlbmVyYXRlZAorCSAqLworCU9wdGltaXplckFsZ29yaXRobSBjcmVhdGVPcHRpbWl6ZXJBbGdvcml0aG0oKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIHBhY2thZ2Ugc3VwcG9ydGVkIGJ5IHRoaXMgZmFjdG9yeS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIHBhY2thZ2Ugc3VwcG9ydGVkIGJ5IHRoaXMgZmFjdG9yeS4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQXV0b21hdGljZXhwZXJpbWVudFBhY2thZ2UgZ2V0QXV0b21hdGljZXhwZXJpbWVudFBhY2thZ2UoKTsKKworfSAvL0F1dG9tYXRpY2V4cGVyaW1lbnRGYWN0b3J5CmRpZmYgLS1naXQgYS9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQvc3JjL29yZy9lY2xpcHNlL3N0ZW0vYW5hbHlzaXMvYXV0b21hdGljZXhwZXJpbWVudC9BdXRvbWF0aWNleHBlcmltZW50UGFja2FnZS5qYXZhIGIvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5hdXRvbWF0aWNleHBlcmltZW50L3NyYy9vcmcvZWNsaXBzZS9zdGVtL2FuYWx5c2lzL2F1dG9tYXRpY2V4cGVyaW1lbnQvQXV0b21hdGljZXhwZXJpbWVudFBhY2thZ2UuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kY2FlOTA3Ci0tLSAvZGV2L251bGwKKysrIGIvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5hdXRvbWF0aWNleHBlcmltZW50L3NyYy9vcmcvZWNsaXBzZS9zdGVtL2FuYWx5c2lzL2F1dG9tYXRpY2V4cGVyaW1lbnQvQXV0b21hdGljZXhwZXJpbWVudFBhY2thZ2UuamF2YQpAQCAtMCwwICsxLDcxMiBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQ7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIAorICogQ29weXJpZ2h0IChjKSAyMDExIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiAKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdCAKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sIAorICogCisgKiBDb250cmlidXRvcnM6IAorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiAKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVBdHRyaWJ1dGU7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzczsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRVBhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVSZWZlcmVuY2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5Db21tb25QYWNrYWdlOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiBUaGUgPGI+UGFja2FnZTwvYj4gZm9yIHRoZSBtb2RlbC4KKyAqIEl0IGNvbnRhaW5zIGFjY2Vzc29ycyBmb3IgdGhlIG1ldGEgb2JqZWN0cyB0byByZXByZXNlbnQKKyAqIDx1bD4KKyAqICAgPGxpPmVhY2ggY2xhc3MsPC9saT4KKyAqICAgPGxpPmVhY2ggZmVhdHVyZSBvZiBlYWNoIGNsYXNzLDwvbGk+CisgKiAgIDxsaT5lYWNoIGVudW0sPC9saT4KKyAqICAgPGxpPmFuZCBlYWNoIGRhdGEgdHlwZTwvbGk+CisgKiA8L3VsPgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuYXV0b21hdGljZXhwZXJpbWVudC5BdXRvbWF0aWNleHBlcmltZW50RmFjdG9yeQorICogQG1vZGVsIGtpbmQ9InBhY2thZ2UiCisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBpbnRlcmZhY2UgQXV0b21hdGljZXhwZXJpbWVudFBhY2thZ2UgZXh0ZW5kcyBFUGFja2FnZSB7CisJLyoqCisJICogVGhlIHBhY2thZ2UgbmFtZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlTdHJpbmcgZU5BTUUgPSAiYXV0b21hdGljZXhwZXJpbWVudCI7CisKKwkvKioKKwkgKiBUaGUgcGFja2FnZSBuYW1lc3BhY2UgVVJJLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCVN0cmluZyBlTlNfVVJJID0gImh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2F1dG9tYXRpY2V4cGVyaW1lbnQuZWNvcmUiOworCisJLyoqCisJICogVGhlIHBhY2thZ2UgbmFtZXNwYWNlIG5hbWUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJU3RyaW5nIGVOU19QUkVGSVggPSAib3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5hdXRvbWF0aWNleHBlcmltZW50IjsKKworCS8qKgorCSAqIFRoZSBzaW5nbGV0b24gaW5zdGFuY2Ugb2YgdGhlIHBhY2thZ2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQXV0b21hdGljZXhwZXJpbWVudFBhY2thZ2UgZUlOU1RBTkNFID0gb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5hdXRvbWF0aWNleHBlcmltZW50LmltcGwuQXV0b21hdGljZXhwZXJpbWVudFBhY2thZ2VJbXBsLmluaXQoKTsKKworCS8qKgorCSAqIFRoZSBtZXRhIG9iamVjdCBpZCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5hdXRvbWF0aWNleHBlcmltZW50LmltcGwuT3B0aW1pemVyQWxnb3JpdGhtSW1wbCA8ZW0+T3B0aW1pemVyIEFsZ29yaXRobTwvZW0+fScgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuYXV0b21hdGljZXhwZXJpbWVudC5pbXBsLk9wdGltaXplckFsZ29yaXRobUltcGwKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuYXV0b21hdGljZXhwZXJpbWVudC5pbXBsLkF1dG9tYXRpY2V4cGVyaW1lbnRQYWNrYWdlSW1wbCNnZXRPcHRpbWl6ZXJBbGdvcml0aG0oKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlpbnQgT1BUSU1JWkVSX0FMR09SSVRITSA9IDI7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VVJJPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgT1BUSU1JWkVSX0FMR09SSVRITV9fVVJJID0gQ29tbW9uUGFja2FnZS5JREVOVElGSUFCTEVfX1VSSTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5UeXBlIFVSSTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IE9QVElNSVpFUl9BTEdPUklUSE1fX1RZUEVfVVJJID0gQ29tbW9uUGFja2FnZS5JREVOVElGSUFCTEVfX1RZUEVfVVJJOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkR1YmxpbiBDb3JlPC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgT1BUSU1JWkVSX0FMR09SSVRITV9fRFVCTElOX0NPUkUgPSBDb21tb25QYWNrYWdlLklERU5USUZJQUJMRV9fRFVCTElOX0NPUkU7CisKKwkvKioKKwkgKiBUaGUgbnVtYmVyIG9mIHN0cnVjdHVyYWwgZmVhdHVyZXMgb2YgdGhlICc8ZW0+T3B0aW1pemVyIEFsZ29yaXRobTwvZW0+JyBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBPUFRJTUlaRVJfQUxHT1JJVEhNX0ZFQVRVUkVfQ09VTlQgPSBDb21tb25QYWNrYWdlLklERU5USUZJQUJMRV9GRUFUVVJFX0NPVU5UICsgMDsKKworCS8qKgorCSAqIFRoZSBtZXRhIG9iamVjdCBpZCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5hdXRvbWF0aWNleHBlcmltZW50LmltcGwuQXV0b21hdGljRXhwZXJpbWVudEltcGwgPGVtPkF1dG9tYXRpYyBFeHBlcmltZW50PC9lbT59JyBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5hdXRvbWF0aWNleHBlcmltZW50LmltcGwuQXV0b21hdGljRXhwZXJpbWVudEltcGwKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuYXV0b21hdGljZXhwZXJpbWVudC5pbXBsLkF1dG9tYXRpY2V4cGVyaW1lbnRQYWNrYWdlSW1wbCNnZXRBdXRvbWF0aWNFeHBlcmltZW50KCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJaW50IEFVVE9NQVRJQ19FWFBFUklNRU5UID0gMDsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5VUkk8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBBVVRPTUFUSUNfRVhQRVJJTUVOVF9fVVJJID0gT1BUSU1JWkVSX0FMR09SSVRITV9fVVJJOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlR5cGUgVVJJPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgQVVUT01BVElDX0VYUEVSSU1FTlRfX1RZUEVfVVJJID0gT1BUSU1JWkVSX0FMR09SSVRITV9fVFlQRV9VUkk7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RHVibGluIENvcmU8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBBVVRPTUFUSUNfRVhQRVJJTUVOVF9fRFVCTElOX0NPUkUgPSBPUFRJTUlaRVJfQUxHT1JJVEhNX19EVUJMSU5fQ09SRTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5CYXNlIFNjZW5hcmlvPC9iPjwvZW0+JyByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgQVVUT01BVElDX0VYUEVSSU1FTlRfX0JBU0VfU0NFTkFSSU8gPSBPUFRJTUlaRVJfQUxHT1JJVEhNX0ZFQVRVUkVfQ09VTlQgKyAwOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlBhcmFtZXRlcnM8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IEFVVE9NQVRJQ19FWFBFUklNRU5UX19QQVJBTUVURVJTID0gT1BUSU1JWkVSX0FMR09SSVRITV9GRUFUVVJFX0NPVU5UICsgMTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5FcnJvciBBbmFseXNpcyBBbGdvcml0aG08L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBBVVRPTUFUSUNfRVhQRVJJTUVOVF9fRVJST1JfQU5BTFlTSVNfQUxHT1JJVEhNID0gT1BUSU1JWkVSX0FMR09SSVRITV9GRUFUVVJFX0NPVU5UICsgMjsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5FcnJvciBGdW5jdGlvbjwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IEFVVE9NQVRJQ19FWFBFUklNRU5UX19FUlJPUl9GVU5DVElPTiA9IE9QVElNSVpFUl9BTEdPUklUSE1fRkVBVFVSRV9DT1VOVCArIDM7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VG9sZXJhbmNlPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgQVVUT01BVElDX0VYUEVSSU1FTlRfX1RPTEVSQU5DRSA9IE9QVElNSVpFUl9BTEdPUklUSE1fRkVBVFVSRV9DT1VOVCArIDQ7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+UmVmZXJhbmNlIERhdGEgRGlyPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgQVVUT01BVElDX0VYUEVSSU1FTlRfX1JFRkVSQU5DRV9EQVRBX0RJUiA9IE9QVElNSVpFUl9BTEdPUklUSE1fRkVBVFVSRV9DT1VOVCArIDU7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+TWF4aW11bSBOdW1iZXIgT2YgSXRlcmF0aW9uczwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IEFVVE9NQVRJQ19FWFBFUklNRU5UX19NQVhJTVVNX05VTUJFUl9PRl9JVEVSQVRJT05TID0gT1BUSU1JWkVSX0FMR09SSVRITV9GRUFUVVJFX0NPVU5UICsgNjsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5SZSBJbml0PC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgQVVUT01BVElDX0VYUEVSSU1FTlRfX1JFX0lOSVQgPSBPUFRJTUlaRVJfQUxHT1JJVEhNX0ZFQVRVUkVfQ09VTlQgKyA3OworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkVycm9yIEZ1bmM8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBBVVRPTUFUSUNfRVhQRVJJTUVOVF9fRVJST1JfRlVOQyA9IE9QVElNSVpFUl9BTEdPUklUSE1fRkVBVFVSRV9DT1VOVCArIDg7CisKKwkvKioKKwkgKiBUaGUgbnVtYmVyIG9mIHN0cnVjdHVyYWwgZmVhdHVyZXMgb2YgdGhlICc8ZW0+QXV0b21hdGljIEV4cGVyaW1lbnQ8L2VtPicgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgQVVUT01BVElDX0VYUEVSSU1FTlRfRkVBVFVSRV9DT1VOVCA9IE9QVElNSVpFUl9BTEdPUklUSE1fRkVBVFVSRV9DT1VOVCArIDk7CisKKwkvKioKKwkgKiBUaGUgbWV0YSBvYmplY3QgaWQgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuYXV0b21hdGljZXhwZXJpbWVudC5pbXBsLk1vZGlmaWFibGVQYXJhbWV0ZXJJbXBsIDxlbT5Nb2RpZmlhYmxlIFBhcmFtZXRlcjwvZW0+fScgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuYXV0b21hdGljZXhwZXJpbWVudC5pbXBsLk1vZGlmaWFibGVQYXJhbWV0ZXJJbXBsCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQuaW1wbC5BdXRvbWF0aWNleHBlcmltZW50UGFja2FnZUltcGwjZ2V0TW9kaWZpYWJsZVBhcmFtZXRlcigpCisJICogQGdlbmVyYXRlZAorCSAqLworCWludCBNT0RJRklBQkxFX1BBUkFNRVRFUiA9IDE7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+SW5pdGlhbCBWYWx1ZTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IE1PRElGSUFCTEVfUEFSQU1FVEVSX19JTklUSUFMX1ZBTFVFID0gMDsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5GZWF0dXJlPC9iPjwvZW0+JyByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgTU9ESUZJQUJMRV9QQVJBTUVURVJfX0ZFQVRVUkUgPSAxOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlN0ZXA8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBNT0RJRklBQkxFX1BBUkFNRVRFUl9fU1RFUCA9IDI7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RmVhdHVyZSBOYW1lPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgTU9ESUZJQUJMRV9QQVJBTUVURVJfX0ZFQVRVUkVfTkFNRSA9IDM7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+TG93ZXIgQm91bmQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBNT0RJRklBQkxFX1BBUkFNRVRFUl9fTE9XRVJfQk9VTkQgPSA0OworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlVwcGVyIEJvdW5kPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgTU9ESUZJQUJMRV9QQVJBTUVURVJfX1VQUEVSX0JPVU5EID0gNTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5UYXJnZXQgVVJJPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgTU9ESUZJQUJMRV9QQVJBTUVURVJfX1RBUkdFVF9VUkkgPSA2OworCisJLyoqCisJICogVGhlIG51bWJlciBvZiBzdHJ1Y3R1cmFsIGZlYXR1cmVzIG9mIHRoZSAnPGVtPk1vZGlmaWFibGUgUGFyYW1ldGVyPC9lbT4nIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IE1PRElGSUFCTEVfUEFSQU1FVEVSX0ZFQVRVUkVfQ09VTlQgPSA3OworCisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQuQXV0b21hdGljRXhwZXJpbWVudCA8ZW0+QXV0b21hdGljIEV4cGVyaW1lbnQ8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICc8ZW0+QXV0b21hdGljIEV4cGVyaW1lbnQ8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQuQXV0b21hdGljRXhwZXJpbWVudAorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQ2xhc3MgZ2V0QXV0b21hdGljRXhwZXJpbWVudCgpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSByZWZlcmVuY2UgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQuQXV0b21hdGljRXhwZXJpbWVudCNnZXRCYXNlU2NlbmFyaW8gPGVtPkJhc2UgU2NlbmFyaW88L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSByZWZlcmVuY2UgJzxlbT5CYXNlIFNjZW5hcmlvPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5hdXRvbWF0aWNleHBlcmltZW50LkF1dG9tYXRpY0V4cGVyaW1lbnQjZ2V0QmFzZVNjZW5hcmlvKCkKKwkgKiBAc2VlICNnZXRBdXRvbWF0aWNFeHBlcmltZW50KCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRVJlZmVyZW5jZSBnZXRBdXRvbWF0aWNFeHBlcmltZW50X0Jhc2VTY2VuYXJpbygpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBjb250YWlubWVudCByZWZlcmVuY2UgbGlzdCAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuYXV0b21hdGljZXhwZXJpbWVudC5BdXRvbWF0aWNFeHBlcmltZW50I2dldFBhcmFtZXRlcnMgPGVtPlBhcmFtZXRlcnM8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBjb250YWlubWVudCByZWZlcmVuY2UgbGlzdCAnPGVtPlBhcmFtZXRlcnM8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQuQXV0b21hdGljRXhwZXJpbWVudCNnZXRQYXJhbWV0ZXJzKCkKKwkgKiBAc2VlICNnZXRBdXRvbWF0aWNFeHBlcmltZW50KCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRVJlZmVyZW5jZSBnZXRBdXRvbWF0aWNFeHBlcmltZW50X1BhcmFtZXRlcnMoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5hdXRvbWF0aWNleHBlcmltZW50LkF1dG9tYXRpY0V4cGVyaW1lbnQjZ2V0RXJyb3JBbmFseXNpc0FsZ29yaXRobSA8ZW0+RXJyb3IgQW5hbHlzaXMgQWxnb3JpdGhtPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+RXJyb3IgQW5hbHlzaXMgQWxnb3JpdGhtPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5hdXRvbWF0aWNleHBlcmltZW50LkF1dG9tYXRpY0V4cGVyaW1lbnQjZ2V0RXJyb3JBbmFseXNpc0FsZ29yaXRobSgpCisJICogQHNlZSAjZ2V0QXV0b21hdGljRXhwZXJpbWVudCgpCisJICogQGdlbmVyYXRlZAorCSAqLworCUVBdHRyaWJ1dGUgZ2V0QXV0b21hdGljRXhwZXJpbWVudF9FcnJvckFuYWx5c2lzQWxnb3JpdGhtKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuYXV0b21hdGljZXhwZXJpbWVudC5BdXRvbWF0aWNFeHBlcmltZW50I2dldEVycm9yRnVuY3Rpb24gPGVtPkVycm9yIEZ1bmN0aW9uPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+RXJyb3IgRnVuY3Rpb248L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQuQXV0b21hdGljRXhwZXJpbWVudCNnZXRFcnJvckZ1bmN0aW9uKCkKKwkgKiBAc2VlICNnZXRBdXRvbWF0aWNFeHBlcmltZW50KCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUF0dHJpYnV0ZSBnZXRBdXRvbWF0aWNFeHBlcmltZW50X0Vycm9yRnVuY3Rpb24oKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5hdXRvbWF0aWNleHBlcmltZW50LkF1dG9tYXRpY0V4cGVyaW1lbnQjZ2V0VG9sZXJhbmNlIDxlbT5Ub2xlcmFuY2U8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxlbT5Ub2xlcmFuY2U8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQuQXV0b21hdGljRXhwZXJpbWVudCNnZXRUb2xlcmFuY2UoKQorCSAqIEBzZWUgI2dldEF1dG9tYXRpY0V4cGVyaW1lbnQoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQXR0cmlidXRlIGdldEF1dG9tYXRpY0V4cGVyaW1lbnRfVG9sZXJhbmNlKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuYXV0b21hdGljZXhwZXJpbWVudC5BdXRvbWF0aWNFeHBlcmltZW50I2dldFJlZmVyYW5jZURhdGFEaXIgPGVtPlJlZmVyYW5jZSBEYXRhIERpcjwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPGVtPlJlZmVyYW5jZSBEYXRhIERpcjwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuYXV0b21hdGljZXhwZXJpbWVudC5BdXRvbWF0aWNFeHBlcmltZW50I2dldFJlZmVyYW5jZURhdGFEaXIoKQorCSAqIEBzZWUgI2dldEF1dG9tYXRpY0V4cGVyaW1lbnQoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQXR0cmlidXRlIGdldEF1dG9tYXRpY0V4cGVyaW1lbnRfUmVmZXJhbmNlRGF0YURpcigpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQuQXV0b21hdGljRXhwZXJpbWVudCNnZXRNYXhpbXVtTnVtYmVyT2ZJdGVyYXRpb25zIDxlbT5NYXhpbXVtIE51bWJlciBPZiBJdGVyYXRpb25zPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+TWF4aW11bSBOdW1iZXIgT2YgSXRlcmF0aW9uczwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuYXV0b21hdGljZXhwZXJpbWVudC5BdXRvbWF0aWNFeHBlcmltZW50I2dldE1heGltdW1OdW1iZXJPZkl0ZXJhdGlvbnMoKQorCSAqIEBzZWUgI2dldEF1dG9tYXRpY0V4cGVyaW1lbnQoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQXR0cmlidXRlIGdldEF1dG9tYXRpY0V4cGVyaW1lbnRfTWF4aW11bU51bWJlck9mSXRlcmF0aW9ucygpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQuQXV0b21hdGljRXhwZXJpbWVudCNpc1JlSW5pdCA8ZW0+UmUgSW5pdDwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPGVtPlJlIEluaXQ8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQuQXV0b21hdGljRXhwZXJpbWVudCNpc1JlSW5pdCgpCisJICogQHNlZSAjZ2V0QXV0b21hdGljRXhwZXJpbWVudCgpCisJICogQGdlbmVyYXRlZAorCSAqLworCUVBdHRyaWJ1dGUgZ2V0QXV0b21hdGljRXhwZXJpbWVudF9SZUluaXQoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgY29udGFpbm1lbnQgcmVmZXJlbmNlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5hdXRvbWF0aWNleHBlcmltZW50LkF1dG9tYXRpY0V4cGVyaW1lbnQjZ2V0RXJyb3JGdW5jIDxlbT5FcnJvciBGdW5jPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgY29udGFpbm1lbnQgcmVmZXJlbmNlICc8ZW0+RXJyb3IgRnVuYzwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuYXV0b21hdGljZXhwZXJpbWVudC5BdXRvbWF0aWNFeHBlcmltZW50I2dldEVycm9yRnVuYygpCisJICogQHNlZSAjZ2V0QXV0b21hdGljRXhwZXJpbWVudCgpCisJICogQGdlbmVyYXRlZAorCSAqLworCUVSZWZlcmVuY2UgZ2V0QXV0b21hdGljRXhwZXJpbWVudF9FcnJvckZ1bmMoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuYXV0b21hdGljZXhwZXJpbWVudC5Nb2RpZmlhYmxlUGFyYW1ldGVyIDxlbT5Nb2RpZmlhYmxlIFBhcmFtZXRlcjwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJzxlbT5Nb2RpZmlhYmxlIFBhcmFtZXRlcjwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuYXV0b21hdGljZXhwZXJpbWVudC5Nb2RpZmlhYmxlUGFyYW1ldGVyCisJICogQGdlbmVyYXRlZAorCSAqLworCUVDbGFzcyBnZXRNb2RpZmlhYmxlUGFyYW1ldGVyKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuYXV0b21hdGljZXhwZXJpbWVudC5Nb2RpZmlhYmxlUGFyYW1ldGVyI2dldEluaXRpYWxWYWx1ZSA8ZW0+SW5pdGlhbCBWYWx1ZTwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPGVtPkluaXRpYWwgVmFsdWU8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQuTW9kaWZpYWJsZVBhcmFtZXRlciNnZXRJbml0aWFsVmFsdWUoKQorCSAqIEBzZWUgI2dldE1vZGlmaWFibGVQYXJhbWV0ZXIoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQXR0cmlidXRlIGdldE1vZGlmaWFibGVQYXJhbWV0ZXJfSW5pdGlhbFZhbHVlKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIHJlZmVyZW5jZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuYXV0b21hdGljZXhwZXJpbWVudC5Nb2RpZmlhYmxlUGFyYW1ldGVyI2dldEZlYXR1cmUgPGVtPkZlYXR1cmU8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSByZWZlcmVuY2UgJzxlbT5GZWF0dXJlPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5hdXRvbWF0aWNleHBlcmltZW50Lk1vZGlmaWFibGVQYXJhbWV0ZXIjZ2V0RmVhdHVyZSgpCisJICogQHNlZSAjZ2V0TW9kaWZpYWJsZVBhcmFtZXRlcigpCisJICogQGdlbmVyYXRlZAorCSAqLworCUVSZWZlcmVuY2UgZ2V0TW9kaWZpYWJsZVBhcmFtZXRlcl9GZWF0dXJlKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuYXV0b21hdGljZXhwZXJpbWVudC5Nb2RpZmlhYmxlUGFyYW1ldGVyI2dldFN0ZXAgPGVtPlN0ZXA8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxlbT5TdGVwPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5hdXRvbWF0aWNleHBlcmltZW50Lk1vZGlmaWFibGVQYXJhbWV0ZXIjZ2V0U3RlcCgpCisJICogQHNlZSAjZ2V0TW9kaWZpYWJsZVBhcmFtZXRlcigpCisJICogQGdlbmVyYXRlZAorCSAqLworCUVBdHRyaWJ1dGUgZ2V0TW9kaWZpYWJsZVBhcmFtZXRlcl9TdGVwKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuYXV0b21hdGljZXhwZXJpbWVudC5Nb2RpZmlhYmxlUGFyYW1ldGVyI2dldEZlYXR1cmVOYW1lIDxlbT5GZWF0dXJlIE5hbWU8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxlbT5GZWF0dXJlIE5hbWU8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQuTW9kaWZpYWJsZVBhcmFtZXRlciNnZXRGZWF0dXJlTmFtZSgpCisJICogQHNlZSAjZ2V0TW9kaWZpYWJsZVBhcmFtZXRlcigpCisJICogQGdlbmVyYXRlZAorCSAqLworCUVBdHRyaWJ1dGUgZ2V0TW9kaWZpYWJsZVBhcmFtZXRlcl9GZWF0dXJlTmFtZSgpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQuTW9kaWZpYWJsZVBhcmFtZXRlciNnZXRMb3dlckJvdW5kIDxlbT5Mb3dlciBCb3VuZDwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPGVtPkxvd2VyIEJvdW5kPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5hdXRvbWF0aWNleHBlcmltZW50Lk1vZGlmaWFibGVQYXJhbWV0ZXIjZ2V0TG93ZXJCb3VuZCgpCisJICogQHNlZSAjZ2V0TW9kaWZpYWJsZVBhcmFtZXRlcigpCisJICogQGdlbmVyYXRlZAorCSAqLworCUVBdHRyaWJ1dGUgZ2V0TW9kaWZpYWJsZVBhcmFtZXRlcl9Mb3dlckJvdW5kKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuYXV0b21hdGljZXhwZXJpbWVudC5Nb2RpZmlhYmxlUGFyYW1ldGVyI2dldFVwcGVyQm91bmQgPGVtPlVwcGVyIEJvdW5kPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+VXBwZXIgQm91bmQ8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQuTW9kaWZpYWJsZVBhcmFtZXRlciNnZXRVcHBlckJvdW5kKCkKKwkgKiBAc2VlICNnZXRNb2RpZmlhYmxlUGFyYW1ldGVyKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUF0dHJpYnV0ZSBnZXRNb2RpZmlhYmxlUGFyYW1ldGVyX1VwcGVyQm91bmQoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5hdXRvbWF0aWNleHBlcmltZW50Lk1vZGlmaWFibGVQYXJhbWV0ZXIjZ2V0VGFyZ2V0VVJJIDxlbT5UYXJnZXQgVVJJPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+VGFyZ2V0IFVSSTwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuYXV0b21hdGljZXhwZXJpbWVudC5Nb2RpZmlhYmxlUGFyYW1ldGVyI2dldFRhcmdldFVSSSgpCisJICogQHNlZSAjZ2V0TW9kaWZpYWJsZVBhcmFtZXRlcigpCisJICogQGdlbmVyYXRlZAorCSAqLworCUVBdHRyaWJ1dGUgZ2V0TW9kaWZpYWJsZVBhcmFtZXRlcl9UYXJnZXRVUkkoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuYXV0b21hdGljZXhwZXJpbWVudC5PcHRpbWl6ZXJBbGdvcml0aG0gPGVtPk9wdGltaXplciBBbGdvcml0aG08L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICc8ZW0+T3B0aW1pemVyIEFsZ29yaXRobTwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuYXV0b21hdGljZXhwZXJpbWVudC5PcHRpbWl6ZXJBbGdvcml0aG0KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUNsYXNzIGdldE9wdGltaXplckFsZ29yaXRobSgpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgZmFjdG9yeSB0aGF0IGNyZWF0ZXMgdGhlIGluc3RhbmNlcyBvZiB0aGUgbW9kZWwuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBmYWN0b3J5IHRoYXQgY3JlYXRlcyB0aGUgaW5zdGFuY2VzIG9mIHRoZSBtb2RlbC4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQXV0b21hdGljZXhwZXJpbWVudEZhY3RvcnkgZ2V0QXV0b21hdGljZXhwZXJpbWVudEZhY3RvcnkoKTsKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogRGVmaW5lcyBsaXRlcmFscyBmb3IgdGhlIG1ldGEgb2JqZWN0cyB0aGF0IHJlcHJlc2VudAorCSAqIDx1bD4KKwkgKiAgIDxsaT5lYWNoIGNsYXNzLDwvbGk+CisJICogICA8bGk+ZWFjaCBmZWF0dXJlIG9mIGVhY2ggY2xhc3MsPC9saT4KKwkgKiAgIDxsaT5lYWNoIGVudW0sPC9saT4KKwkgKiAgIDxsaT5hbmQgZWFjaCBkYXRhIHR5cGU8L2xpPgorCSAqIDwvdWw+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCWludGVyZmFjZSBMaXRlcmFscyB7CisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5hdXRvbWF0aWNleHBlcmltZW50LmltcGwuQXV0b21hdGljRXhwZXJpbWVudEltcGwgPGVtPkF1dG9tYXRpYyBFeHBlcmltZW50PC9lbT59JyBjbGFzcy4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5hdXRvbWF0aWNleHBlcmltZW50LmltcGwuQXV0b21hdGljRXhwZXJpbWVudEltcGwKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQuaW1wbC5BdXRvbWF0aWNleHBlcmltZW50UGFja2FnZUltcGwjZ2V0QXV0b21hdGljRXhwZXJpbWVudCgpCisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVDbGFzcyBBVVRPTUFUSUNfRVhQRVJJTUVOVCA9IGVJTlNUQU5DRS5nZXRBdXRvbWF0aWNFeHBlcmltZW50KCk7CisKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5CYXNlIFNjZW5hcmlvPC9iPjwvZW0+JyByZWZlcmVuY2UgZmVhdHVyZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVSZWZlcmVuY2UgQVVUT01BVElDX0VYUEVSSU1FTlRfX0JBU0VfU0NFTkFSSU8gPSBlSU5TVEFOQ0UuZ2V0QXV0b21hdGljRXhwZXJpbWVudF9CYXNlU2NlbmFyaW8oKTsKKworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPlBhcmFtZXRlcnM8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0IGZlYXR1cmUuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFUmVmZXJlbmNlIEFVVE9NQVRJQ19FWFBFUklNRU5UX19QQVJBTUVURVJTID0gZUlOU1RBTkNFLmdldEF1dG9tYXRpY0V4cGVyaW1lbnRfUGFyYW1ldGVycygpOworCisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+RXJyb3IgQW5hbHlzaXMgQWxnb3JpdGhtPC9iPjwvZW0+JyBhdHRyaWJ1dGUgZmVhdHVyZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVBdHRyaWJ1dGUgQVVUT01BVElDX0VYUEVSSU1FTlRfX0VSUk9SX0FOQUxZU0lTX0FMR09SSVRITSA9IGVJTlNUQU5DRS5nZXRBdXRvbWF0aWNFeHBlcmltZW50X0Vycm9yQW5hbHlzaXNBbGdvcml0aG0oKTsKKworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPkVycm9yIEZ1bmN0aW9uPC9iPjwvZW0+JyBhdHRyaWJ1dGUgZmVhdHVyZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVBdHRyaWJ1dGUgQVVUT01BVElDX0VYUEVSSU1FTlRfX0VSUk9SX0ZVTkNUSU9OID0gZUlOU1RBTkNFLmdldEF1dG9tYXRpY0V4cGVyaW1lbnRfRXJyb3JGdW5jdGlvbigpOworCisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+VG9sZXJhbmNlPC9iPjwvZW0+JyBhdHRyaWJ1dGUgZmVhdHVyZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVBdHRyaWJ1dGUgQVVUT01BVElDX0VYUEVSSU1FTlRfX1RPTEVSQU5DRSA9IGVJTlNUQU5DRS5nZXRBdXRvbWF0aWNFeHBlcmltZW50X1RvbGVyYW5jZSgpOworCisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+UmVmZXJhbmNlIERhdGEgRGlyPC9iPjwvZW0+JyBhdHRyaWJ1dGUgZmVhdHVyZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVBdHRyaWJ1dGUgQVVUT01BVElDX0VYUEVSSU1FTlRfX1JFRkVSQU5DRV9EQVRBX0RJUiA9IGVJTlNUQU5DRS5nZXRBdXRvbWF0aWNFeHBlcmltZW50X1JlZmVyYW5jZURhdGFEaXIoKTsKKworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPk1heGltdW0gTnVtYmVyIE9mIEl0ZXJhdGlvbnM8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUF0dHJpYnV0ZSBBVVRPTUFUSUNfRVhQRVJJTUVOVF9fTUFYSU1VTV9OVU1CRVJfT0ZfSVRFUkFUSU9OUyA9IGVJTlNUQU5DRS5nZXRBdXRvbWF0aWNFeHBlcmltZW50X01heGltdW1OdW1iZXJPZkl0ZXJhdGlvbnMoKTsKKworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPlJlIEluaXQ8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUF0dHJpYnV0ZSBBVVRPTUFUSUNfRVhQRVJJTUVOVF9fUkVfSU5JVCA9IGVJTlNUQU5DRS5nZXRBdXRvbWF0aWNFeHBlcmltZW50X1JlSW5pdCgpOworCisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+RXJyb3IgRnVuYzwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlIGZlYXR1cmUuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFUmVmZXJlbmNlIEFVVE9NQVRJQ19FWFBFUklNRU5UX19FUlJPUl9GVU5DID0gZUlOU1RBTkNFLmdldEF1dG9tYXRpY0V4cGVyaW1lbnRfRXJyb3JGdW5jKCk7CisKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQuaW1wbC5Nb2RpZmlhYmxlUGFyYW1ldGVySW1wbCA8ZW0+TW9kaWZpYWJsZSBQYXJhbWV0ZXI8L2VtPn0nIGNsYXNzLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQuaW1wbC5Nb2RpZmlhYmxlUGFyYW1ldGVySW1wbAorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuYXV0b21hdGljZXhwZXJpbWVudC5pbXBsLkF1dG9tYXRpY2V4cGVyaW1lbnRQYWNrYWdlSW1wbCNnZXRNb2RpZmlhYmxlUGFyYW1ldGVyKCkKKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUNsYXNzIE1PRElGSUFCTEVfUEFSQU1FVEVSID0gZUlOU1RBTkNFLmdldE1vZGlmaWFibGVQYXJhbWV0ZXIoKTsKKworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPkluaXRpYWwgVmFsdWU8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUF0dHJpYnV0ZSBNT0RJRklBQkxFX1BBUkFNRVRFUl9fSU5JVElBTF9WQUxVRSA9IGVJTlNUQU5DRS5nZXRNb2RpZmlhYmxlUGFyYW1ldGVyX0luaXRpYWxWYWx1ZSgpOworCisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+RmVhdHVyZTwvYj48L2VtPicgcmVmZXJlbmNlIGZlYXR1cmUuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFUmVmZXJlbmNlIE1PRElGSUFCTEVfUEFSQU1FVEVSX19GRUFUVVJFID0gZUlOU1RBTkNFLmdldE1vZGlmaWFibGVQYXJhbWV0ZXJfRmVhdHVyZSgpOworCisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+U3RlcDwvYj48L2VtPicgYXR0cmlidXRlIGZlYXR1cmUuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQXR0cmlidXRlIE1PRElGSUFCTEVfUEFSQU1FVEVSX19TVEVQID0gZUlOU1RBTkNFLmdldE1vZGlmaWFibGVQYXJhbWV0ZXJfU3RlcCgpOworCisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+RmVhdHVyZSBOYW1lPC9iPjwvZW0+JyBhdHRyaWJ1dGUgZmVhdHVyZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVBdHRyaWJ1dGUgTU9ESUZJQUJMRV9QQVJBTUVURVJfX0ZFQVRVUkVfTkFNRSA9IGVJTlNUQU5DRS5nZXRNb2RpZmlhYmxlUGFyYW1ldGVyX0ZlYXR1cmVOYW1lKCk7CisKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5Mb3dlciBCb3VuZDwvYj48L2VtPicgYXR0cmlidXRlIGZlYXR1cmUuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQXR0cmlidXRlIE1PRElGSUFCTEVfUEFSQU1FVEVSX19MT1dFUl9CT1VORCA9IGVJTlNUQU5DRS5nZXRNb2RpZmlhYmxlUGFyYW1ldGVyX0xvd2VyQm91bmQoKTsKKworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPlVwcGVyIEJvdW5kPC9iPjwvZW0+JyBhdHRyaWJ1dGUgZmVhdHVyZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVBdHRyaWJ1dGUgTU9ESUZJQUJMRV9QQVJBTUVURVJfX1VQUEVSX0JPVU5EID0gZUlOU1RBTkNFLmdldE1vZGlmaWFibGVQYXJhbWV0ZXJfVXBwZXJCb3VuZCgpOworCisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+VGFyZ2V0IFVSSTwvYj48L2VtPicgYXR0cmlidXRlIGZlYXR1cmUuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQXR0cmlidXRlIE1PRElGSUFCTEVfUEFSQU1FVEVSX19UQVJHRVRfVVJJID0gZUlOU1RBTkNFLmdldE1vZGlmaWFibGVQYXJhbWV0ZXJfVGFyZ2V0VVJJKCk7CisKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQuaW1wbC5PcHRpbWl6ZXJBbGdvcml0aG1JbXBsIDxlbT5PcHRpbWl6ZXIgQWxnb3JpdGhtPC9lbT59JyBjbGFzcy4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5hdXRvbWF0aWNleHBlcmltZW50LmltcGwuT3B0aW1pemVyQWxnb3JpdGhtSW1wbAorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuYXV0b21hdGljZXhwZXJpbWVudC5pbXBsLkF1dG9tYXRpY2V4cGVyaW1lbnRQYWNrYWdlSW1wbCNnZXRPcHRpbWl6ZXJBbGdvcml0aG0oKQorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQ2xhc3MgT1BUSU1JWkVSX0FMR09SSVRITSA9IGVJTlNUQU5DRS5nZXRPcHRpbWl6ZXJBbGdvcml0aG0oKTsKKworCX0KKworfSAvL0F1dG9tYXRpY2V4cGVyaW1lbnRQYWNrYWdlCmRpZmYgLS1naXQgYS9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQvc3JjL29yZy9lY2xpcHNlL3N0ZW0vYW5hbHlzaXMvYXV0b21hdGljZXhwZXJpbWVudC9Db25zdGFudHMuamF2YSBiL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuYXV0b21hdGljZXhwZXJpbWVudC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9hbmFseXNpcy9hdXRvbWF0aWNleHBlcmltZW50L0NvbnN0YW50cy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA4OWJjNzkKLS0tIC9kZXYvbnVsbAorKysgYi9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQvc3JjL29yZy9lY2xpcHNlL3N0ZW0vYW5hbHlzaXMvYXV0b21hdGljZXhwZXJpbWVudC9Db25zdGFudHMuamF2YQpAQCAtMCwwICsxLDIxIEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuYXV0b21hdGljZXhwZXJpbWVudDsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOSwyMDEwIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworcHVibGljIGNsYXNzIENvbnN0YW50cyB7CisKKwkKKwlwdWJsaWMgZmluYWwgc3RhdGljIFN0cmluZyBJRF9BTEdPUklUSE1fRVhURU5TSU9OX1BPSU5UID0gb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLkNvbnN0YW50cy5JRF9ST09UCisJKyAiLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQuYWxnb3JpdGhtIjsKKwkKKwlwdWJsaWMgZmluYWwgc3RhdGljIFN0cmluZyBBTEdPUklUSE1fRUxFTUVOVCA9ICJjbGFzc2RlZiI7Cit9CmRpZmYgLS1naXQgYS9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQvc3JjL29yZy9lY2xpcHNlL3N0ZW0vYW5hbHlzaXMvYXV0b21hdGljZXhwZXJpbWVudC9DdXN0b21TaW11bGF0aW9uTWFuYWdlci5qYXZhIGIvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5hdXRvbWF0aWNleHBlcmltZW50L3NyYy9vcmcvZWNsaXBzZS9zdGVtL2FuYWx5c2lzL2F1dG9tYXRpY2V4cGVyaW1lbnQvQ3VzdG9tU2ltdWxhdGlvbk1hbmFnZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NjcwZjJmCi0tLSAvZGV2L251bGwKKysrIGIvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5hdXRvbWF0aWNleHBlcmltZW50L3NyYy9vcmcvZWNsaXBzZS9zdGVtL2FuYWx5c2lzL2F1dG9tYXRpY2V4cGVyaW1lbnQvQ3VzdG9tU2ltdWxhdGlvbk1hbmFnZXIuamF2YQpAQCAtMCwwICsxLDI1MiBAQAorLy8gU2ltdWxhdGlvbk1hbmFnZXIuamF2YQorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQ7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JQ29uZmlndXJhdGlvbkVsZW1lbnQ7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQcm9ncmVzc01vbml0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlN0YXR1czsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuam9icy5Kb2I7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnJlc291cmNlLlJlc291cmNlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS51dGlsLkVjb3JlVXRpbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUueG1pLmltcGwuWE1JUmVzb3VyY2VGYWN0b3J5SW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguR3JhcGg7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkdyYXBoRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuTW9kZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNjZW5hcmlvLlNjZW5hcmlvOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zY2VuYXJpby5TY2VuYXJpb1BhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNlcXVlbmNlci5TZXF1ZW5jZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5qb2JzLmV4ZWN1dGlvbi5FeGVjdXRhYmxlTWFuYWdlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmpvYnMuc2ltdWxhdGlvbi5JU2ltdWxhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmpvYnMuc2ltdWxhdGlvbi5NZXNzYWdlczsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmpvYnMuc2ltdWxhdGlvbi5TaW11bGF0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uam9icy5zaW11bGF0aW9uLlNpbXVsYXRpb25DYWNoaW5nOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uam9icy5zaW11bGF0aW9uLlNpbXVsYXRpb25FdmVudDsKKworLyoqCisgKiBUaGlzIGNsYXNzIG1hbmFnZXMgdGhlIGxpZmUtY3ljbGUgb2YgYWN0aXZlIHtAbGluayBTaW11bGF0aW9ufXMuIFRoZXJlIGlzIGEKKyAqIHNpbmdsZXRvbiBpbnN0YW5jZSBvZiB0aGUgbWFuYWdlciB0aGF0IGlzIHJlZmVyZW5jZWQgYnkgb3RoZXIgcGFydHMgb2YgdGhlCisgKiBzeXN0ZW0gdG8gbWFuYWdlIHtAbGluayBTaW11bGF0aW9ufS4gSXQgY3JlYXRlcyB7QGxpbmsgU2ltdWxhdGlvbn0gaW5zdGFuY2VzCisgKiBmcm9tIHtAbGluayBTY2VuYXJpb30gaW5zdGFuY2VzIGFuZCBjYW4gb2J0YWluIHtAbGluayBTY2VuYXJpb30gaW5zdGFuY2VzCisgKiBmcm9tIGZpbGUgVVJJJ3Mgb3IgZnJvbSB7QGxpbmsgSUNvbmZpZ3VyYXRpb25FbGVtZW50fSdzLiBJdCBtYWludGFpbnMgYQorICogY29sbGVjdGlvbiBvZiBhbGwgb2YgdGhlIGFjdGl2ZSB7QGxpbmsgU2ltdWxhdGlvbn1zIGluIHRoZSBzeXN0ZW0gYW5kCisgKiBnZW5lcmF0ZXMge0BsaW5rIFNpbXVsYXRpb25FdmVudH0ncyB3aGVuZXZlciBhIHtAbGluayBTaW11bGF0aW9ufSBpcyBhZGRlZCB0bworICogdGhhdCBjb2xsZWN0aW9uIG9yIHJlbW92ZWQuCisgKiA8cD4KKyAqIFRoZSB7QGxpbmsgQ3VzdG9tU2ltdWxhdGlvbk1hbmFnZXJ9IG1haW50YWlucyBhIHNlcXVlbmNlIG51bWJlciBhbmQgYXNzaWducworICogc3VjY2Vzc2l2ZSB2YWx1ZXMgb2YgdGhhdCBudW1iZXIgdG8gdGhlIHtAbGluayBTaW11bGF0aW9ufSBpbnN0YW5jZXMgaXQKKyAqIGNyZWF0ZXMuCisgKi8KK3B1YmxpYyBjbGFzcyBDdXN0b21TaW11bGF0aW9uTWFuYWdlciBleHRlbmRzIEV4ZWN1dGFibGVNYW5hZ2VyIHsKKworCS8qKgorCSAqIFNpbmdsZXRvbiBpbnN0YW5jZSBvZiB0aGUgbWFuYWdlcgorCSAqLworCXByaXZhdGUgdm9sYXRpbGUgc3RhdGljIEN1c3RvbVNpbXVsYXRpb25NYW5hZ2VyIElOU1RBTkNFID0gbnVsbDsKKworCS8qKgorCSAqIFRoaXMgaXMgdGhlIHNlcXVlbmNlIG51bWJlciBhc3NpZ25lZCB0byBlYWNoIHN1Y2Nlc3NpdmUKKwkgKiB7QGxpbmsgU2ltdWxhdGlvbn0gaW5zdGFuY2UgdGhlIG1hbmFnZXIgY3JlYXRlcy4KKwkgKi8KKwlwcml2YXRlIHN0YXRpYyBpbnQgc2VxdWVuY2VOdW1iZXIgPSAwOworCisJLyoqCisJICogQ29uc3RhbnQgZW1wdHkgYXJyYXkuCisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBJU2ltdWxhdGlvbltdIE5PTkUgPSBuZXcgU2ltdWxhdGlvbltdIHt9OworCisJLyoqCisJICogVGhpcyBpcyB0aGUgY29sbGVjdGlvbiBvZiBhY3RpdmUge0BsaW5rIFNpbXVsYXRpb259IGpvYnMKKwkgKi8KKwlwcml2YXRlIExpc3Q8SVNpbXVsYXRpb24+IGFjdGl2ZVNpbXVsYXRpb25zID0gbnVsbDsKKworCS8qKgorCSAqIENvbnN0cnVjdG9yCisJICovCisJcHJpdmF0ZSBDdXN0b21TaW11bGF0aW9uTWFuYWdlcigpIHsKKwkJYWN0aXZlU2ltdWxhdGlvbnMgPSBuZXcgQXJyYXlMaXN0PElTaW11bGF0aW9uPigpOworCisJCVJlc291cmNlLkZhY3RvcnkuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RXh0ZW5zaW9uVG9GYWN0b3J5TWFwKCkucHV0KAorCQkJCVNjZW5hcmlvUGFja2FnZS5lTkFNRSwgbmV3IFhNSVJlc291cmNlRmFjdG9yeUltcGwoKSk7CisJfSAvLyBTaW11bGF0aW9uTWFuYWdlcgorCisJLyoqCisJICogQHJldHVybiB0aGUgc2luZ2xldG9uIGluc3RhbmNlIG9mIHRoZSBtb2RlbAorCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgQ3VzdG9tU2ltdWxhdGlvbk1hbmFnZXIgZ2V0TWFuYWdlcigpIHsKKwkJaWYgKElOU1RBTkNFID09IG51bGwpIHsKKwkJCXN5bmNocm9uaXplZCAoQ3VzdG9tU2ltdWxhdGlvbk1hbmFnZXIuY2xhc3MpIHsKKwkJCQlpZiAoSU5TVEFOQ0UgPT0gbnVsbCkgeworCQkJCQlJTlNUQU5DRSA9IG5ldyBDdXN0b21TaW11bGF0aW9uTWFuYWdlcigpOworCQkJCX0KKwkJCX0KKwkJfQorCQlyZXR1cm4gSU5TVEFOQ0U7CisJfSAvLyBnZXRNb2RlbAorCisJLyoqCisJICogUmV0dXJuIHRoZSBuZXh0IHNpbXVsYXRpb24gc2VxdWVuY2UgbnVtYmVyIGFuZCBpbmNyZW1lbnQgdGhlIHZhbHVlLgorCSAqIAorCSAqIEByZXR1cm4gdGhlIG5leHQgc2ltdWxhdGlvbiBzZXF1ZW5jZSBudW1iZXIKKwkgKi8KKwlzeW5jaHJvbml6ZWQgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IGdldEFuZEluY3JlbWVudFNpbXVsYXRpb25TZXF1ZW5jZU51bWJlcigpIHsKKwkJcmV0dXJuIHNlcXVlbmNlTnVtYmVyKys7CisJfSAvLyBnZXRBbmRJbmNyZW1lbnRTaW11bGF0aW9uU2VxdWVuY2VOdW1iZXIKKworCS8qKgorCSAqIFRoaXMgaXMgdXNlZCBmb3IgdGVzdGluZyBwdXJwb3NlcyB0byByZXNldCB0aGUgc3RhdGUgb2YgdGhlIG1vZGVsLgorCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgdm9pZCByZXNldFNpbXVsYXRpb25NYW5hZ2VyKCkgeworCQlJTlNUQU5DRSA9IG51bGw7CisJCXNlcXVlbmNlTnVtYmVyID0gMDsKKwl9IC8vIHJlc2V0U2ltdWxhdGlvbk1hbmFnZXIKKworCS8qKgorCSAqIEByZXR1cm4gdGhlIGFjdGl2ZSB7QGxpbmsgU2ltdWxhdGlvbn1zCisJICovCisJcHVibGljIGZpbmFsIExpc3Q8SVNpbXVsYXRpb24+IGdldEFjdGl2ZVNpbXVsYXRpb25zKCkgeworCQlyZXR1cm4gYWN0aXZlU2ltdWxhdGlvbnM7CisJfSAvLyBnZXRBY3RpdmVTaW11bGF0aW9ucworCisJLyoqCisJICogQWRkIGEge0BsaW5rIFNpbXVsYXRpb259IHRvIHRoZSBjb2xsZWN0aW9uIG9mIGFjdGl2ZSB7QGxpbmsgU2ltdWxhdGlvbn1zLgorCSAqIAorCSAqIEBwYXJhbSBzaW11bGF0aW9uCisJICogICAgICAgICAgICB0aGUge0BsaW5rIElTaW11bGF0aW9ufSB0byBhZGQKKwkgKi8KKwlwcml2YXRlIGZpbmFsIHZvaWQgYWRkQWN0aXZlU2ltdWxhdGlvbihmaW5hbCBJU2ltdWxhdGlvbiBzaW11bGF0aW9uKSB7CisJCWFjdGl2ZVNpbXVsYXRpb25zLmFkZChzaW11bGF0aW9uKTsKKwl9IC8vIGFkZEFjdGl2ZVNpbXVsYXRpb24KKworCS8qKgorCSAqIFJlbW92ZSBhbiB7QGxpbmsgSVNpbXVsYXRpb259IGZyb20gdGhlIGNvbGxlY3Rpb24gb2YgYWN0aXZlCisJICoge0BsaW5rIElTaW11bGF0aW9ufXMuCisJICogCisJICogQHBhcmFtIHNpbXVsYXRpb24KKwkgKiAgICAgICAgICAgIHRoZSB7QGxpbmsgSVNpbXVsYXRpb259IHRvIHJlbW92ZQorCSAqLworCXB1YmxpYyBmaW5hbCB2b2lkIHJlbW92ZUFjdGl2ZVNpbXVsYXRpb24oZmluYWwgSVNpbXVsYXRpb24gc2ltdWxhdGlvbikgeworCQlhY3RpdmVTaW11bGF0aW9ucy5yZW1vdmUoc2ltdWxhdGlvbik7CisJfSAvLyByZW1vdmVBY3RpdmVTaW11bGF0aW9uCisKKwkvKioKKwkgKiBDcmVhdGUgYSB7QGxpbmsgSVNpbXVsYXRpb259IGZyb20gYSB7QGxpbmsgU2NlbmFyaW99IGluc3RhbmNlLgorCSAqIAorCSAqIEBwYXJhbSBzY2VuYXJpbworCSAqICAgICAgICAgICAgdGhlIHtAbGluayBTY2VuYXJpb30gdG8gc2ltdWxhdGUKKwkgKiBAcGFyYW0gbW9uaXRvciAKKwkgKiAJCQkgIFByb2dyZXNzIG1vbml0b3IKKwkgKiBAcmV0dXJuIGEge0BsaW5rIElTaW11bGF0aW9ufSB0aGF0J3MgcmVhZHkgdG8gcnVuLgorCSAqLworCXB1YmxpYyBJU2ltdWxhdGlvbiBjcmVhdGVTaW11bGF0aW9uKGZpbmFsIFNjZW5hcmlvIHNjZW5hcmlvLCBmaW5hbCBJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IpIHsKKwkJSVNpbXVsYXRpb24gcmV0VmFsdWUgPSBudWxsOworCQl0cnkgeworCQkJYm9vbGVhbiB1c2VDYWNoZSA9IGZhbHNlOworCisJCQlTY2VuYXJpbyBzaW11bGF0aW9uU2NlbmFyaW8gPSBudWxsOworCQkJCisJCQlpZiAodXNlQ2FjaGUpIHsKKwkJCQlpZiAoU2ltdWxhdGlvbkNhY2hpbmcuSU5TVEFOQ0UuaXNTY2VuYXJpb0luQ2FjaGUoc2NlbmFyaW8uZ2V0VVJJKCkpKSB7CisJCQkJCXNpbXVsYXRpb25TY2VuYXJpbyA9IFNpbXVsYXRpb25DYWNoaW5nLklOU1RBTkNFLmdldENhY2hlZFNjZW5hcmlvKHNjZW5hcmlvLmdldFVSSSgpKTsKKwkJCQkJYm9vbGVhbiBydW5uaW5nID0gZmFsc2U7CisJCQkJCWZvcihJU2ltdWxhdGlvbiBzaW0gOiBnZXRBY3RpdmVTaW11bGF0aW9ucygpKSB7CisJCQkJCQlpZihzaW0uZ2V0U2NlbmFyaW8oKS5lcXVhbHMoc2ltdWxhdGlvblNjZW5hcmlvKSkgeworCQkJCQkJCS8vIFRoZSBzY2VuYXJpbyBpcyBhbHJlYWR5IHJ1bm5pbmcuIENvcHkgdGhlIHdob2xlIHNjZW5hcmlvIGJlZm9yZSByZXNldHRpbmcKKwkJCQkJCQlTY2VuYXJpbyBuZXdTaW11bGF0aW9uID0gbnVsbDsKKwkJCQkJCQluZXdTaW11bGF0aW9uID0gKFNjZW5hcmlvKUVjb3JlVXRpbC5jb3B5KHNpbXVsYXRpb25TY2VuYXJpbyk7CisJCQkJCQkJaWYoc2ltdWxhdGlvblNjZW5hcmlvLmdldE1vZGVsKCkgIT0gbnVsbCkgbmV3U2ltdWxhdGlvbi5zZXRNb2RlbCgoTW9kZWwpRWNvcmVVdGlsLmNvcHkoc2ltdWxhdGlvblNjZW5hcmlvLmdldE1vZGVsKCkpKTsKKwkJCQkJCQlpZihzaW11bGF0aW9uU2NlbmFyaW8uZ2V0U2VxdWVuY2VyKCkgIT0gbnVsbCkgbmV3U2ltdWxhdGlvbi5zZXRTZXF1ZW5jZXIoKFNlcXVlbmNlcilFY29yZVV0aWwuY29weShzaW11bGF0aW9uU2NlbmFyaW8uZ2V0U2VxdWVuY2VyKCkpKTsKKwkJCQkJCQlydW5uaW5nID0gdHJ1ZTsKKwkJCQkJCQlicmVhazsKKwkJCQkJCX0KKwkJCQkJfQorCQkJCQlpZighcnVubmluZylzaW11bGF0aW9uU2NlbmFyaW8ucmVzZXQoKTsgLy8gc2FmZSBzaW5jZSBjYW5vbmljYWwgZ3JhcGggaXMgc2V0IAorCQkJCX0KKwkJCQllbHNlIHsKKwkJCQkJLy8gUmVhZCBzY2VuYXJpbworCQkJCQkvLyBBZGQgdG8gY2FjaGUKKwkJCQkJU2ltdWxhdGlvbkNhY2hpbmcuSU5TVEFOQ0UuYWRkU2NlbmFyaW9Ub0NhY2hlKHNjZW5hcmlvKTsKKwkJCQl9CisJCQkJCisJCQl9CisJCQkKKwkJCWlmKHNjZW5hcmlvLmdldENhbm9uaWNhbEdyYXBoKCkgPT0gbnVsbCkgCisJCQkJc2NlbmFyaW8uaW5pdGlhbGl6ZSgpOyAvLyBuZWVkZWQgZm9yIHByZWZlcmVuY2VzIC4uLgorCQkJZWxzZSBzY2VuYXJpby5yZXNldCgpOworCQkJZmluYWwgU2ltdWxhdGlvbiBzaW11bGF0aW9uID0gbmV3IFNpbXVsYXRpb24oc2NlbmFyaW8sCisJCQkJCWdldEFuZEluY3JlbWVudFNpbXVsYXRpb25TZXF1ZW5jZU51bWJlcigpLCBHcmFwaEZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZVNpbXBsZUdyYXBoUGFydGl0aW9uZXIoKSk7CisJCQlzaW11bGF0aW9uLnNldFByaW9yaXR5KEpvYi5MT05HKTsKKwkJCXJldFZhbHVlID0gc2ltdWxhdGlvbjsKKworCQkJYWRkQWN0aXZlU2ltdWxhdGlvbihyZXRWYWx1ZSk7CisJCX0gY2F0Y2ggKGZpbmFsIFJ1bnRpbWVFeGNlcHRpb24gZSkgeworCQkJLy8gV2UgY291bGQgZ2V0IGFuIGV4Y2VwdGlvbiBoZXJlIGlmIHRoZSBTY2VuYXJpbyBkb2Vzbid0IGhhdmUKKwkJCS8vIGEgU2VxdWVuY2VyIG9yIE1vZGVsIHdoaWNoIHdvdWxkIGNhdXNlIHByb2JsZW1zIHdoZW4gdHJ5aW5nIHRvCisJCQkvLyBpbml0aWFsaXplCisJCQlTaW11bGF0aW9uLmhhbmRsZUV4Y2VwdGlvbihzY2VuYXJpbywgc2NlbmFyaW8uZ2V0RHVibGluQ29yZSgpCisJCQkJCS5nZXRUaXRsZSgpLCB0cnVlLCBlKTsKKwkJCXJldFZhbHVlID0gbnVsbDsKKwkJfQorCQlyZXR1cm4gcmV0VmFsdWU7CisJfSAvLyBjcmVhdGVTaW11bGF0aW9uCisKKwkvKioKKwkgKiBDcmVhdGUgYSB7QGxpbmsgSVNpbXVsYXRpb259IGZyb20gYSB7QGxpbmsgU2NlbmFyaW99IGluc3RhbmNlIGFuZCB0aGVuCisJICogc3RhcnQgaXQgcnVubmluZy4KKwkgKiAKKwkgKiBAcGFyYW0gc2NlbmFyaW8KKwkgKiAgICAgICAgICAgIHRoZSB7QGxpbmsgU2NlbmFyaW99IHRvIGJlIHNpbXVsYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIGNyZWF0ZUFuZFJ1blNpbXVsYXRpb24oZmluYWwgU2NlbmFyaW8gc2NlbmFyaW8pIHsKKwkJbmV3IEpvYihNZXNzYWdlcy5nZXRTdHJpbmcoIlNpbU1nci5TdGFydF9TaW0iKSkgeyAvLyROT04tTkxTLTEkIAorCQkJQE92ZXJyaWRlCisJCQlwcm90ZWN0ZWQgSVN0YXR1cyBydW4oZmluYWwgSVByb2dyZXNzTW9uaXRvciBtb25pdG9yKSB7CisJCQkJdHJ5IHsKKwkJCQkJZmluYWwgSVNpbXVsYXRpb24gc2ltdWxhdGlvbiA9IGNyZWF0ZVNpbXVsYXRpb24oc2NlbmFyaW8sIG1vbml0b3IpOworCQkJCQltb25pdG9yLnN1YlRhc2soTWVzc2FnZXMuZ2V0U3RyaW5nKCJTaW1NZ3IuUnVuIikpOyAvLyROT04tTkxTLTEkIAorCQkJCQlzaW11bGF0aW9uLnJ1bigpOworCQkJCX0gY2F0Y2ggKGZpbmFsIEV4Y2VwdGlvbiBlKSB7CisJCQkJCS8vIFRoZSBlcnJvciB3YXMgbG9nZ2VkIGluIGNyZWF0ZVNpbXVsYXRpb24KKwkJCQkJbW9uaXRvci5kb25lKCk7CisJCQkJfSAvLyBjYXRjaCBFeGNlcHRpb24KKwkJCQlyZXR1cm4gU3RhdHVzLk9LX1NUQVRVUzsKKwkJCX0gLy8gcnVuCisJCX0uc2NoZWR1bGUoKTsKKwl9IC8vIGNyZWF0ZUFuZFJ1blNpbXVsYXRpb24KKwkKKwkvKioKKwkgKiBHaXZlbiBhIHtAbGluayBHcmFwaH0gZmluZCB0aGUge0BsaW5rIElTaW11bGF0aW9ufSB0aGF0IGNyZWF0ZWQgaXQuCisJICogCisJICogQHBhcmFtIGdyYXBoCisJICogICAgICAgICAgICBhbiBpbnN0YW5jZSBvZiBhIHtAbGluayBHcmFwaH0KKwkgKiBAcmV0dXJuIHRoZSB7QGxpbmsgSVNpbXVsYXRpb259IGluc3RhbmNlIHRoYXQgY3JlYXRlZCB0aGUge0BsaW5rIEdyYXBofSwKKwkgKiAgICAgICAgIDxjb2RlPm51bGw8L2NvZGU+LCBpZiBubyBtYXRjaCBjb3VsZCBiZSBmb3VuZC4KKwkgKi8KKwlwdWJsaWMgSVNpbXVsYXRpb24gbWFwR3JhcGhUb1NpbXVsYXRpb24oZmluYWwgR3JhcGggZ3JhcGgpIHsKKwkJSVNpbXVsYXRpb24gcmV0VmFsdWUgPSBudWxsOworCQlmb3IgKGZpbmFsIElTaW11bGF0aW9uIHNpbXVsYXRpb24gOiBhY3RpdmVTaW11bGF0aW9ucykgeworCQkJZmluYWwgR3JhcGggc2ltdWxhdGlvbkdyYXBoID0gc2ltdWxhdGlvbi5nZXRTY2VuYXJpbygpCisJCQkJCS5nZXRDYW5vbmljYWxHcmFwaCgpOworCQkJLy8gSXMgdGhpcyB0aGUgb25lIHdlJ3JlIGxvb2tpbmcgZm9yPworCQkJaWYgKGdyYXBoID09IHNpbXVsYXRpb25HcmFwaCkgeworCQkJCS8vIFllcworCQkJCXJldFZhbHVlID0gc2ltdWxhdGlvbjsKKwkJCQlicmVhazsKKwkJCX0gLy8gaWYKKwkJfSAvLyBmb3IgZWFjaCBJU2ltdWxhdGlvbgorCQlyZXR1cm4gcmV0VmFsdWU7CisJfSAvLyBtYXBHcmFwaFRvU2ltdWxhdGlvbgorfSAvLyBTaW11bGF0aW9uTWFuYWdlcgpkaWZmIC0tZ2l0IGEvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5hdXRvbWF0aWNleHBlcmltZW50L3NyYy9vcmcvZWNsaXBzZS9zdGVtL2FuYWx5c2lzL2F1dG9tYXRpY2V4cGVyaW1lbnQvRXJyb3JBbmFseXNpc0FsZ29yaXRobS5qYXZhIGIvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5hdXRvbWF0aWNleHBlcmltZW50L3NyYy9vcmcvZWNsaXBzZS9zdGVtL2FuYWx5c2lzL2F1dG9tYXRpY2V4cGVyaW1lbnQvRXJyb3JBbmFseXNpc0FsZ29yaXRobS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI2YjdmYWIKLS0tIC9kZXYvbnVsbAorKysgYi9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQvc3JjL29yZy9lY2xpcHNlL3N0ZW0vYW5hbHlzaXMvYXV0b21hdGljZXhwZXJpbWVudC9FcnJvckFuYWx5c2lzQWxnb3JpdGhtLmphdmEKQEAgLTAsMCArMSwzNiBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQ7DQorDQorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisgKiBDb3B5cmlnaHQgKGMpIDIwMDkgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuDQorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscw0KKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMA0KKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0DQorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwNCisgKg0KKyAqIENvbnRyaWJ1dG9yczoNCisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uDQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQorDQorDQoraW1wb3J0IGphdmEudXRpbC5MaXN0Ow0KKw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLkVycm9yRnVuY3Rpb247DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zY2VuYXJpby5TY2VuYXJpbzsNCisNCisNCitwdWJsaWMgaW50ZXJmYWNlIEVycm9yQW5hbHlzaXNBbGdvcml0aG0gew0KKwlwdWJsaWMgdm9pZCBzZXRFcnJvckZ1bmN0aW9uKGZpbmFsIEVycm9yRnVuY3Rpb24gZXJyb3JGdW5jdGlvbik7DQorCXB1YmxpYyB2b2lkIHNldFBhcmFtZXRlcnMoZmluYWwgTGlzdDxNb2RpZmlhYmxlUGFyYW1ldGVyPiBwYXJhbWV0ZXJzKTsNCisJcHVibGljIHZvaWQgc2V0VG9sZXJhbmNlKGZpbmFsIGRvdWJsZSB0b2xlcmFuY2UpOw0KKwlwdWJsaWMgdm9pZCBzZXRCYXNlU2NlbmFyaW8oZmluYWwgU2NlbmFyaW8gYmFzZVNjZW5hcmlvKTsNCisJcHVibGljIHZvaWQgc2V0UmVmZXJlbmNlRGF0YURpcmVjdG9yeShmaW5hbCBTdHJpbmcgcmVmZXJlbmNlRGF0YURpcik7DQorCXB1YmxpYyB2b2lkIHNldE1heGltdW1OdW1iZXJPZkl0ZXJhdGlvbnMoZmluYWwgbG9uZyBtYXhOdW1PZkl0ZXJhdGlvbnMpOw0KKwlwdWJsaWMgZG91YmxlW10gZ2V0UmVzdWx0UGFyYW1ldGVycygpOw0KKwlwdWJsaWMgZG91YmxlIGdldFJlc3VsdFZhbHVlKCk7DQorCXB1YmxpYyB2b2lkIGV4ZWN1dGUoKTsNCisJcHVibGljIHZvaWQgaW5pdChBdXRvbWF0aWNFeHBlcmltZW50IGF1dG9tYXRpY0V4cGVyaW1lbnQsIEVycm9yQW5hbHlzaXNBbGdvcml0aG0gYWxnKTsNCisJcHVibGljIHZvaWQgcmVpbml0U3RhcnRQYXJhbXMoQXV0b21hdGljRXhwZXJpbWVudCBleHAsIGRvdWJsZSBbXSB2YWxzKTsNCisJcHVibGljIHZvaWQgYWRkTGlzdGVuZXIoRXJyb3JBbmFseXNpc0FsZ29yaXRobUxpc3RlbmVyIGxpc3RlbmVyKTsNCisJcHVibGljIHZvaWQgY2xlYXJMaXN0ZW5lcnMoKTsNCisJDQorfQ0KZGlmZiAtLWdpdCBhL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuYXV0b21hdGljZXhwZXJpbWVudC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9hbmFseXNpcy9hdXRvbWF0aWNleHBlcmltZW50L0Vycm9yQW5hbHlzaXNBbGdvcml0aG1FdmVudC5qYXZhIGIvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5hdXRvbWF0aWNleHBlcmltZW50L3NyYy9vcmcvZWNsaXBzZS9zdGVtL2FuYWx5c2lzL2F1dG9tYXRpY2V4cGVyaW1lbnQvRXJyb3JBbmFseXNpc0FsZ29yaXRobUV2ZW50LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODk5ZWQzNgotLS0gL2Rldi9udWxsCisrKyBiL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuYXV0b21hdGljZXhwZXJpbWVudC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9hbmFseXNpcy9hdXRvbWF0aWNleHBlcmltZW50L0Vycm9yQW5hbHlzaXNBbGdvcml0aG1FdmVudC5qYXZhCkBAIC0wLDAgKzEsMjUgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDksMjAxMCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuYXV0b21hdGljZXhwZXJpbWVudDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuRXJyb3JSZXN1bHQ7CisKK3B1YmxpYyBjbGFzcyBFcnJvckFuYWx5c2lzQWxnb3JpdGhtRXZlbnQgeworCXB1YmxpYyBFcnJvclJlc3VsdCByZXN1bHQ7CisJcHVibGljIEFMR09SSVRITV9TVEFUVVMgc3RhdHVzOworCXB1YmxpYyBTdHJpbmcgW10gcGFyYW1ldGVyTmFtZXM7CisJcHVibGljIGRvdWJsZSBbXSBwYXJhbWV0ZXJWYWx1ZXM7CisJCisJcHVibGljIEVycm9yQW5hbHlzaXNBbGdvcml0aG1FdmVudChFcnJvclJlc3VsdCByZXMsIEFMR09SSVRITV9TVEFUVVMgc3RhdHVzKSB7CisJCXRoaXMucmVzdWx0ID0gcmVzOworCQl0aGlzLnN0YXR1cyA9IHN0YXR1czsKKwl9Cit9CmRpZmYgLS1naXQgYS9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQvc3JjL29yZy9lY2xpcHNlL3N0ZW0vYW5hbHlzaXMvYXV0b21hdGljZXhwZXJpbWVudC9FcnJvckFuYWx5c2lzQWxnb3JpdGhtRmFjdG9yeS5qYXZhIGIvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5hdXRvbWF0aWNleHBlcmltZW50L3NyYy9vcmcvZWNsaXBzZS9zdGVtL2FuYWx5c2lzL2F1dG9tYXRpY2V4cGVyaW1lbnQvRXJyb3JBbmFseXNpc0FsZ29yaXRobUZhY3RvcnkuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hY2MzOWIzCi0tLSAvZGV2L251bGwKKysrIGIvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5hdXRvbWF0aWNleHBlcmltZW50L3NyYy9vcmcvZWNsaXBzZS9zdGVtL2FuYWx5c2lzL2F1dG9tYXRpY2V4cGVyaW1lbnQvRXJyb3JBbmFseXNpc0FsZ29yaXRobUZhY3RvcnkuamF2YQpAQCAtMCwwICsxLDI3IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuYXV0b21hdGljZXhwZXJpbWVudDsNCisNCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyAqIENvcHlyaWdodCAoYykgMjAwOSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4NCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzDQorICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wDQorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQNCisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbA0KKyAqDQorICogQ29udHJpYnV0b3JzOg0KKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24NCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCisNCitwdWJsaWMgY2xhc3MgRXJyb3JBbmFseXNpc0FsZ29yaXRobUZhY3Rvcnkgew0KKwlwdWJsaWMgZmluYWwgc3RhdGljIEVycm9yQW5hbHlzaXNBbGdvcml0aG1GYWN0b3J5IElOU1RBTkNFID0gbmV3IEVycm9yQW5hbHlzaXNBbGdvcml0aG1GYWN0b3J5KCk7DQorCQ0KKwlwdWJsaWMgRXJyb3JBbmFseXNpc0FsZ29yaXRobSBjcmVhdGVFcnJvckFuYWx5c2lzQWxnb3JpdGhtKGZpbmFsIE9wdGltaXplckFsZ29yaXRobSBhbGcpDQorCXsNCisJCUVycm9yQW5hbHlzaXNBbGdvcml0aG0gYWxnb3JpdGhtID0gbnVsbDsNCisJCQ0KKwkJaWYgKGFsZyBpbnN0YW5jZW9mIEF1dG9tYXRpY0V4cGVyaW1lbnQpIHsgLy8gTmVlZCB0byBmaXggdGhpcw0KKwkJCWFsZ29yaXRobSA9IG5ldyBTaW1wbGV4QWxnb3JpdGhtRXhlY3V0ZXIoKTsNCisJCX0NCisJCXJldHVybiBhbGdvcml0aG07DQorCX0NCisNCit9DQpkaWZmIC0tZ2l0IGEvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5hdXRvbWF0aWNleHBlcmltZW50L3NyYy9vcmcvZWNsaXBzZS9zdGVtL2FuYWx5c2lzL2F1dG9tYXRpY2V4cGVyaW1lbnQvRXJyb3JBbmFseXNpc0FsZ29yaXRobUxpc3RlbmVyLmphdmEgYi9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQvc3JjL29yZy9lY2xpcHNlL3N0ZW0vYW5hbHlzaXMvYXV0b21hdGljZXhwZXJpbWVudC9FcnJvckFuYWx5c2lzQWxnb3JpdGhtTGlzdGVuZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNTNkMDc3Ci0tLSAvZGV2L251bGwKKysrIGIvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5hdXRvbWF0aWNleHBlcmltZW50L3NyYy9vcmcvZWNsaXBzZS9zdGVtL2FuYWx5c2lzL2F1dG9tYXRpY2V4cGVyaW1lbnQvRXJyb3JBbmFseXNpc0FsZ29yaXRobUxpc3RlbmVyLmphdmEKQEAgLTAsMCArMSwxNiBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOSwyMDEwIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5hdXRvbWF0aWNleHBlcmltZW50OworCitwdWJsaWMgaW50ZXJmYWNlIEVycm9yQW5hbHlzaXNBbGdvcml0aG1MaXN0ZW5lciB7CisKKwlwdWJsaWMgdm9pZCBldmVudFJlY2VpdmVkKEVycm9yQW5hbHlzaXNBbGdvcml0aG1FdmVudCBldnQpOworfQpkaWZmIC0tZ2l0IGEvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5hdXRvbWF0aWNleHBlcmltZW50L3NyYy9vcmcvZWNsaXBzZS9zdGVtL2FuYWx5c2lzL2F1dG9tYXRpY2V4cGVyaW1lbnQvTUFOQUdFUl9TVEFUVVMuamF2YSBiL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuYXV0b21hdGljZXhwZXJpbWVudC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9hbmFseXNpcy9hdXRvbWF0aWNleHBlcmltZW50L01BTkFHRVJfU1RBVFVTLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjU3OWYyYgotLS0gL2Rldi9udWxsCisrKyBiL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuYXV0b21hdGljZXhwZXJpbWVudC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9hbmFseXNpcy9hdXRvbWF0aWNleHBlcmltZW50L01BTkFHRVJfU1RBVFVTLmphdmEKQEAgLTAsMCArMSwxNSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOSwyMDEwIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5hdXRvbWF0aWNleHBlcmltZW50OworCitwdWJsaWMgZW51bSBNQU5BR0VSX1NUQVRVUyB7CisJU0NIRURVTEVEOworfQpkaWZmIC0tZ2l0IGEvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5hdXRvbWF0aWNleHBlcmltZW50L3NyYy9vcmcvZWNsaXBzZS9zdGVtL2FuYWx5c2lzL2F1dG9tYXRpY2V4cGVyaW1lbnQvTW9kaWZpYWJsZVBhcmFtZXRlci5qYXZhIGIvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5hdXRvbWF0aWNleHBlcmltZW50L3NyYy9vcmcvZWNsaXBzZS9zdGVtL2FuYWx5c2lzL2F1dG9tYXRpY2V4cGVyaW1lbnQvTW9kaWZpYWJsZVBhcmFtZXRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhmZmNiNDEKLS0tIC9kZXYvbnVsbAorKysgYi9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQvc3JjL29yZy9lY2xpcHNlL3N0ZW0vYW5hbHlzaXMvYXV0b21hdGljZXhwZXJpbWVudC9Nb2RpZmlhYmxlUGFyYW1ldGVyLmphdmEKQEAgLTAsMCArMSwyMjUgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5hdXRvbWF0aWNleHBlcmltZW50Ow0KKw0KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorICogQ29weXJpZ2h0IChjKSAyMDA5IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLg0KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMNCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjANCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdA0KKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sDQorICoNCisgKiBDb250cmlidXRvcnM6DQorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbg0KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KKw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuVVJJOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdDsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVTdHJ1Y3R1cmFsRmVhdHVyZTsNCisNCisvKioNCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKyAqIEEgcmVwcmVzZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPk1vZGlmaWFibGUgUGFyYW1ldGVyPC9iPjwvZW0+Jy4NCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisgKg0KKyAqIDxwPg0KKyAqIFRoZSBmb2xsb3dpbmcgZmVhdHVyZXMgYXJlIHN1cHBvcnRlZDoNCisgKiA8dWw+DQorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuYXV0b21hdGljZXhwZXJpbWVudC5Nb2RpZmlhYmxlUGFyYW1ldGVyI2dldEluaXRpYWxWYWx1ZSA8ZW0+SW5pdGlhbCBWYWx1ZTwvZW0+fTwvbGk+DQorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuYXV0b21hdGljZXhwZXJpbWVudC5Nb2RpZmlhYmxlUGFyYW1ldGVyI2dldEZlYXR1cmUgPGVtPkZlYXR1cmU8L2VtPn08L2xpPg0KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQuTW9kaWZpYWJsZVBhcmFtZXRlciNnZXRTdGVwIDxlbT5TdGVwPC9lbT59PC9saT4NCisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5hdXRvbWF0aWNleHBlcmltZW50Lk1vZGlmaWFibGVQYXJhbWV0ZXIjZ2V0RmVhdHVyZU5hbWUgPGVtPkZlYXR1cmUgTmFtZTwvZW0+fTwvbGk+DQorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuYXV0b21hdGljZXhwZXJpbWVudC5Nb2RpZmlhYmxlUGFyYW1ldGVyI2dldExvd2VyQm91bmQgPGVtPkxvd2VyIEJvdW5kPC9lbT59PC9saT4NCisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5hdXRvbWF0aWNleHBlcmltZW50Lk1vZGlmaWFibGVQYXJhbWV0ZXIjZ2V0VXBwZXJCb3VuZCA8ZW0+VXBwZXIgQm91bmQ8L2VtPn08L2xpPg0KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQuTW9kaWZpYWJsZVBhcmFtZXRlciNnZXRUYXJnZXRVUkkgPGVtPlRhcmdldCBVUkk8L2VtPn08L2xpPg0KKyAqIDwvdWw+DQorICogPC9wPg0KKyAqDQorICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQuQXV0b21hdGljZXhwZXJpbWVudFBhY2thZ2UjZ2V0TW9kaWZpYWJsZVBhcmFtZXRlcigpDQorICogQG1vZGVsDQorICogQGdlbmVyYXRlZA0KKyAqLw0KK3B1YmxpYyBpbnRlcmZhY2UgTW9kaWZpYWJsZVBhcmFtZXRlciBleHRlbmRzIEVPYmplY3Qgew0KKwkvKioNCisJICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+SW5pdGlhbCBWYWx1ZTwvYj48L2VtPicgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8cD4NCisJICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+SW5pdGlhbCBWYWx1ZTwvZW0+JyBhdHRyaWJ1dGUgaXNuJ3QgY2xlYXIsDQorCSAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4NCisJICogPC9wPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+SW5pdGlhbCBWYWx1ZTwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIEBzZWUgI3NldEluaXRpYWxWYWx1ZShkb3VibGUpDQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5hdXRvbWF0aWNleHBlcmltZW50LkF1dG9tYXRpY2V4cGVyaW1lbnRQYWNrYWdlI2dldE1vZGlmaWFibGVQYXJhbWV0ZXJfSW5pdGlhbFZhbHVlKCkNCisJICogQG1vZGVsIHJlcXVpcmVkPSJ0cnVlIg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlkb3VibGUgZ2V0SW5pdGlhbFZhbHVlKCk7DQorDQorCS8qKg0KKwkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQuTW9kaWZpYWJsZVBhcmFtZXRlciNnZXRJbml0aWFsVmFsdWUgPGVtPkluaXRpYWwgVmFsdWU8L2VtPn0nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPkluaXRpYWwgVmFsdWU8L2VtPicgYXR0cmlidXRlLg0KKwkgKiBAc2VlICNnZXRJbml0aWFsVmFsdWUoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwl2b2lkIHNldEluaXRpYWxWYWx1ZShkb3VibGUgdmFsdWUpOw0KKw0KKwkvKioNCisJICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+RmVhdHVyZTwvYj48L2VtPicgcmVmZXJlbmNlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8cD4NCisJICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+RmVhdHVyZTwvZW0+JyByZWZlcmVuY2UgaXNuJ3QgY2xlYXIsDQorCSAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4NCisJICogPC9wPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+RmVhdHVyZTwvZW0+JyByZWZlcmVuY2UuDQorCSAqIEBzZWUgI3NldEZlYXR1cmUoRVN0cnVjdHVyYWxGZWF0dXJlKQ0KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuYXV0b21hdGljZXhwZXJpbWVudC5BdXRvbWF0aWNleHBlcmltZW50UGFja2FnZSNnZXRNb2RpZmlhYmxlUGFyYW1ldGVyX0ZlYXR1cmUoKQ0KKwkgKiBAbW9kZWwgcmVxdWlyZWQ9InRydWUiDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCUVTdHJ1Y3R1cmFsRmVhdHVyZSBnZXRGZWF0dXJlKCk7DQorDQorCS8qKg0KKwkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQuTW9kaWZpYWJsZVBhcmFtZXRlciNnZXRGZWF0dXJlIDxlbT5GZWF0dXJlPC9lbT59JyByZWZlcmVuY2UuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5GZWF0dXJlPC9lbT4nIHJlZmVyZW5jZS4NCisJICogQHNlZSAjZ2V0RmVhdHVyZSgpDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXZvaWQgc2V0RmVhdHVyZShFU3RydWN0dXJhbEZlYXR1cmUgdmFsdWUpOw0KKw0KKwkvKioNCisJICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+U3RlcDwvYj48L2VtPicgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8cD4NCisJICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+U3RlcDwvZW0+JyBhdHRyaWJ1dGUgaXNuJ3QgY2xlYXIsDQorCSAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4NCisJICogPC9wPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+U3RlcDwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIEBzZWUgI3NldFN0ZXAoZG91YmxlKQ0KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuYXV0b21hdGljZXhwZXJpbWVudC5BdXRvbWF0aWNleHBlcmltZW50UGFja2FnZSNnZXRNb2RpZmlhYmxlUGFyYW1ldGVyX1N0ZXAoKQ0KKwkgKiBAbW9kZWwgcmVxdWlyZWQ9InRydWUiDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCWRvdWJsZSBnZXRTdGVwKCk7DQorDQorCS8qKg0KKwkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQuTW9kaWZpYWJsZVBhcmFtZXRlciNnZXRTdGVwIDxlbT5TdGVwPC9lbT59JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5TdGVwPC9lbT4nIGF0dHJpYnV0ZS4NCisJICogQHNlZSAjZ2V0U3RlcCgpDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXZvaWQgc2V0U3RlcChkb3VibGUgdmFsdWUpOw0KKw0KKwkvKioNCisJICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+RmVhdHVyZSBOYW1lPC9iPjwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDxwPg0KKwkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5GZWF0dXJlIE5hbWU8L2VtPicgYXR0cmlidXRlIGlzbid0IGNsZWFyLA0KKwkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uDQorCSAqIDwvcD4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPkZlYXR1cmUgTmFtZTwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIEBzZWUgI3NldEZlYXR1cmVOYW1lKFN0cmluZykNCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQuQXV0b21hdGljZXhwZXJpbWVudFBhY2thZ2UjZ2V0TW9kaWZpYWJsZVBhcmFtZXRlcl9GZWF0dXJlTmFtZSgpDQorCSAqIEBtb2RlbCByZXF1aXJlZD0idHJ1ZSINCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJU3RyaW5nIGdldEZlYXR1cmVOYW1lKCk7DQorDQorCS8qKg0KKwkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQuTW9kaWZpYWJsZVBhcmFtZXRlciNnZXRGZWF0dXJlTmFtZSA8ZW0+RmVhdHVyZSBOYW1lPC9lbT59JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5GZWF0dXJlIE5hbWU8L2VtPicgYXR0cmlidXRlLg0KKwkgKiBAc2VlICNnZXRGZWF0dXJlTmFtZSgpDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXZvaWQgc2V0RmVhdHVyZU5hbWUoU3RyaW5nIHZhbHVlKTsNCisNCisJLyoqDQorCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPkxvd2VyIEJvdW5kPC9iPjwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIGlzIDxjb2RlPiItMSI8L2NvZGU+Lg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8cD4NCisJICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+TG93ZXIgQm91bmQ8L2VtPicgYXR0cmlidXRlIGlzbid0IGNsZWFyLA0KKwkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uDQorCSAqIDwvcD4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPkxvd2VyIEJvdW5kPC9lbT4nIGF0dHJpYnV0ZS4NCisJICogQHNlZSAjc2V0TG93ZXJCb3VuZChkb3VibGUpDQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5hdXRvbWF0aWNleHBlcmltZW50LkF1dG9tYXRpY2V4cGVyaW1lbnRQYWNrYWdlI2dldE1vZGlmaWFibGVQYXJhbWV0ZXJfTG93ZXJCb3VuZCgpDQorCSAqIEBtb2RlbCBkZWZhdWx0PSItMSINCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJZG91YmxlIGdldExvd2VyQm91bmQoKTsNCisNCisJLyoqDQorCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuYXV0b21hdGljZXhwZXJpbWVudC5Nb2RpZmlhYmxlUGFyYW1ldGVyI2dldExvd2VyQm91bmQgPGVtPkxvd2VyIEJvdW5kPC9lbT59JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5Mb3dlciBCb3VuZDwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIEBzZWUgI2dldExvd2VyQm91bmQoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwl2b2lkIHNldExvd2VyQm91bmQoZG91YmxlIHZhbHVlKTsNCisNCisJLyoqDQorCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPlVwcGVyIEJvdW5kPC9iPjwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIGlzIDxjb2RlPiItMSI8L2NvZGU+Lg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8cD4NCisJICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+VXBwZXIgQm91bmQ8L2VtPicgYXR0cmlidXRlIGlzbid0IGNsZWFyLA0KKwkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uDQorCSAqIDwvcD4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPlVwcGVyIEJvdW5kPC9lbT4nIGF0dHJpYnV0ZS4NCisJICogQHNlZSAjc2V0VXBwZXJCb3VuZChkb3VibGUpDQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5hdXRvbWF0aWNleHBlcmltZW50LkF1dG9tYXRpY2V4cGVyaW1lbnRQYWNrYWdlI2dldE1vZGlmaWFibGVQYXJhbWV0ZXJfVXBwZXJCb3VuZCgpDQorCSAqIEBtb2RlbCBkZWZhdWx0PSItMSINCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJZG91YmxlIGdldFVwcGVyQm91bmQoKTsNCisNCisJLyoqDQorCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuYXV0b21hdGljZXhwZXJpbWVudC5Nb2RpZmlhYmxlUGFyYW1ldGVyI2dldFVwcGVyQm91bmQgPGVtPlVwcGVyIEJvdW5kPC9lbT59JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5VcHBlciBCb3VuZDwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIEBzZWUgI2dldFVwcGVyQm91bmQoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwl2b2lkIHNldFVwcGVyQm91bmQoZG91YmxlIHZhbHVlKTsNCisNCisJLyoqDQorCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPlRhcmdldCBVUkk8L2I+PC9lbT4nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPHA+DQorCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPlRhcmdldCBVUkk8L2VtPicgYXR0cmlidXRlIGlzbid0IGNsZWFyLA0KKwkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uDQorCSAqIDwvcD4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPlRhcmdldCBVUkk8L2VtPicgYXR0cmlidXRlLg0KKwkgKiBAc2VlICNzZXRUYXJnZXRVUkkoVVJJKQ0KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuYXV0b21hdGljZXhwZXJpbWVudC5BdXRvbWF0aWNleHBlcmltZW50UGFja2FnZSNnZXRNb2RpZmlhYmxlUGFyYW1ldGVyX1RhcmdldFVSSSgpDQorCSAqIEBtb2RlbCBkYXRhVHlwZT0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5VUkkiDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCVVSSSBnZXRUYXJnZXRVUkkoKTsNCisNCisJLyoqDQorCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuYXV0b21hdGljZXhwZXJpbWVudC5Nb2RpZmlhYmxlUGFyYW1ldGVyI2dldFRhcmdldFVSSSA8ZW0+VGFyZ2V0IFVSSTwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+VGFyZ2V0IFVSSTwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIEBzZWUgI2dldFRhcmdldFVSSSgpDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXZvaWQgc2V0VGFyZ2V0VVJJKFVSSSB2YWx1ZSk7DQorDQorfSAvLyBNb2RpZmlhYmxlUGFyYW1ldGVyDQpkaWZmIC0tZ2l0IGEvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5hdXRvbWF0aWNleHBlcmltZW50L3NyYy9vcmcvZWNsaXBzZS9zdGVtL2FuYWx5c2lzL2F1dG9tYXRpY2V4cGVyaW1lbnQvTmVsZGVyTWVhZEFsZ29yaXRobS5qYXZhIGIvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5hdXRvbWF0aWNleHBlcmltZW50L3NyYy9vcmcvZWNsaXBzZS9zdGVtL2FuYWx5c2lzL2F1dG9tYXRpY2V4cGVyaW1lbnQvTmVsZGVyTWVhZEFsZ29yaXRobS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM4ZGQ2NzgKLS0tIC9kZXYvbnVsbAorKysgYi9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQvc3JjL29yZy9lY2xpcHNlL3N0ZW0vYW5hbHlzaXMvYXV0b21hdGljZXhwZXJpbWVudC9OZWxkZXJNZWFkQWxnb3JpdGhtLmphdmEKQEAgLTAsMCArMSw0NDQgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5hdXRvbWF0aWNleHBlcmltZW50Ow0KKw0KK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0Ow0KKw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLkVycm9yUmVzdWx0Ow0KKw0KKw0KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorICogQ29weXJpZ2h0IChjKSAyMDA5IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLg0KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMNCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjANCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdA0KKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sDQorICoNCisgKiBDb250cmlidXRvcnM6DQorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbg0KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KKw0KKy8qKg0KKyAqIE1pbmltaXplcyBhIGZ1bmN0aW9uIHVzaW5nIHRoZSBOZWxkZXItTWVhZCBhbGdvcml0aG0uDQorICogDQorICogU2ltcGxleCBmdW5jdGlvbiBtaW5pbWlzYXRpb24gcHJvY2VkdXJlIGR1ZSB0byBOZWxkZXIrTWVhZCgxOTY1KSwgYXMNCisgKiBpbXBsZW1lbnRlZCBieSBPJ05laWxsKDE5NzEsIEFwcGwuU3RhdGlzdC4gMjAsIDMzOC00NSksIHdpdGggc3Vic2VxdWVudA0KKyAqIGNvbW1lbnRzIGJ5IENoYW1iZXJzK0VydGVsKDE5NzQsIDIzLCAyNTAtMSksIEJlbnlvbigxOTc2LCAyNSwgOTcpIGFuZA0KKyAqIEhpbGwoMTk3OCwgMjcsIDM4MC0yKQ0KKyAqIA0KKyAqIEF1dGhvcnM6DQorICogDQorICogQmFzZWQgb24gRk9SVFJBTjc3IHZlcnNpb24gYnkgUiBPTmVpbGwgDQorICogDQorICogUmVmZXJlbmNlOg0KKyAqIA0KKyAqIEpvaG4gTmVsZGVyLCBSb2dlciBNZWFkLCBBIHNpbXBsZXggbWV0aG9kIGZvciBmdW5jdGlvbiBtaW5pbWl6YXRpb24sIENvbXB1dGVyDQorICogSm91cm5hbCwgVm9sdW1lIDcsIDE5NjUsIHBhZ2VzIDMwOC0zMTMuDQorICogDQorICogVGhpcyBKYXZhIHZlcnNpb24gYnkgWW9zc2kgTWVzaWthDQorICogUiBPTmVpbGwsIEFsZ29yaXRobSBBUyA0NzogRnVuY3Rpb24gTWluaW1pemF0aW9uIFVzaW5nIGEgU2ltcGxleCBQcm9jZWR1cmUsDQorICogQXBwbGllZCBTdGF0aXN0aWNzLCBWb2x1bWUgMjAsIE51bWJlciAzLCAxOTcxLCBwYWdlcyAzMzgtMzQ1Lg0KKyAqLw0KK3B1YmxpYyBjbGFzcyBOZWxkZXJNZWFkQWxnb3JpdGhtIGltcGxlbWVudHMgU2ltcGxleEFsZ29yaXRobSB7DQorDQorCWRvdWJsZSBjY29lZmYgPSAwLjU7DQorCWRvdWJsZSBkZWw7DQorCWRvdWJsZSBkbjsNCisJZG91YmxlIGRubjsNCisJZG91YmxlIGVjb2VmZiA9IDIuMDsNCisJZG91YmxlIGVwcyA9IDAuMDAxOw0KKwlpbnQgaTsNCisJaW50IGloaTsNCisJaW50IGlsbzsNCisJaW50IGo7DQorCWludCBqY291bnQ7DQorCWludCBsOw0KKwlpbnQgbm47DQorCWRvdWJsZVtdIHA7DQorCWRvdWJsZVtdIHAyc3RhcjsNCisJZG91YmxlW10gcGJhcjsNCisJZG91YmxlW10gcHN0YXI7DQorCWRvdWJsZSByY29lZmYgPSAxLjA7DQorCWRvdWJsZSBycTsNCisJZG91YmxlIHg7DQorCUVycm9yUmVzdWx0W10geTsNCisJRXJyb3JSZXN1bHQgeTJzdGFyOw0KKwlFcnJvclJlc3VsdCB5bG87DQorCUVycm9yUmVzdWx0IHlzdGFyOw0KKwlkb3VibGUgejsNCisNCisJaW50IGlmYXVsdCA9IC0xOw0KKwlpbnQgbnVtcmVzID0gLTE7DQorCWludCBpY291bnQgPSAtMTsNCisJRXJyb3JSZXN1bHQgeW5ld2xvOw0KKwlkb3VibGVbXSB4bWluOw0KKwkNCisJQXJyYXlMaXN0PERvdWJsZT4gbWluUGFyYW1WYWx1ZXMgPSBuZXcgQXJyYXlMaXN0PERvdWJsZT4oKTsNCisJQXJyYXlMaXN0PERvdWJsZT4gbWF4UGFyYW1WYWx1ZXMgPSBuZXcgQXJyYXlMaXN0PERvdWJsZT4oKTsNCisJDQorCXB1YmxpYyB2b2lkIGV4ZWN1dGUoZmluYWwgU2ltcGxleEZ1bmN0aW9uIGZuLCAgZmluYWwgZG91YmxlW10gc3RhcnRQb2ludCwNCisJCQlmaW5hbCBkb3VibGVbXSBzdGVwLCBmaW5hbCBkb3VibGUgdGVybWluYXRpbmdWYXJpYW5jZSwgbG9uZyBtYXhJdGVyKSB7DQorCQlleGVjdXRlKGZuLCBzdGFydFBvaW50LCB0ZXJtaW5hdGluZ1ZhcmlhbmNlLCBzdGVwLA0KKwkJCQkxLCAoaW50KW1heEl0ZXIpOw0KKwl9DQorCQ0KKwkvKioNCisJICogQHBhcmFtIGZuIHRoZSB7QGxpbmsgU2ltcGxleEZ1bmN0aW9ufSB0byBiZSBtaW5pbWl6ZWQNCisJICogQHBhcmFtIHN0YXJ0IGEgc3RhcnRpbmcgcG9pbnQgZm9yIHRoZSBmaXJzdCBpdGVyYXRpb24NCisJICogQHBhcmFtIHJlcW1pbiB0aGUgdGVybWluYXRpbmcgbGltaXQgZm9yIHRoZSB2YXJpYW5jZSBvZiBmdW5jdGlvbiB2YWx1ZXMNCisJICogQHBhcmFtIHN0ZXAgZGV0ZXJtaW5lcyB0aGUgc2l6ZSBhbmQgc2hhcGUgb2YgdGhlIGluaXRpYWwgc2ltcGxleC4gVGhlIHJlbGF0aXZlIG1hZ25pdHVkZXMgb2YgDQorCSAqIGl0cyBlbGVtZW50cyBzaG91bGQgcmVmbGVjdCB0aGUgdW5pdHMgb2YgdGhlIHZhcmlhYmxlcy4NCisJICogQHBhcmFtIGtvbnZnZSB0aGUgY29udmVyZ2VuY2UgY2hlY2sgaXMgY2FycmllZCBvdXQgZXZlcnkgS09OVkdFIGl0ZXJhdGlvbnMNCisJICogQHBhcmFtIGtjb3VuIHRoZSBtYXhpbXVtIG51bWJlciBvZiBmdW5jdGlvbiBldmFsdWF0aW9ucw0KKwkgKi8NCisJcHJpdmF0ZSB2b2lkIGV4ZWN1dGUoU2ltcGxleEZ1bmN0aW9uIGZuLCBkb3VibGUgc3RhcnRbXSwgZG91YmxlIHJlcW1pbiwgZG91YmxlIHN0ZXBbXSwgaW50IGtvbnZnZSwgaW50IGtjb3VudCkgew0KKwkJaW50IG4gPSBzdGFydC5sZW5ndGg7DQorCQkvLw0KKwkJLy8gQ2hlY2sgdGhlIGlucHV0IHBhcmFtZXRlcnMuDQorCQkvLw0KKwkJaWYgKHJlcW1pbiA8PSAwLjApIHsNCisJCQlpZmF1bHQgPSAxOw0KKwkJCXJldHVybjsNCisJCX0NCisNCisJCWlmIChuIDwgMSkgew0KKwkJCWlmYXVsdCA9IDE7DQorCQkJcmV0dXJuOw0KKwkJfQ0KKw0KKwkJaWYgKGtvbnZnZSA8IDEpIHsNCisJCQlpZmF1bHQgPSAxOw0KKwkJCXJldHVybjsNCisJCX0NCisNCisJCXAgPSBuZXcgZG91YmxlW24gKiAobiArIDEpXTsNCisJCXBzdGFyID0gbmV3IGRvdWJsZVtuXTsNCisJCXAyc3RhciA9IG5ldyBkb3VibGVbbl07DQorCQlwYmFyID0gbmV3IGRvdWJsZVtuXTsNCisJCXkgPSBuZXcgRXJyb3JSZXN1bHRbbiArIDFdOw0KKwkJeG1pbiA9IG5ldyBkb3VibGVbbl07DQorDQorCQlpY291bnQgPSAwOw0KKwkJbnVtcmVzID0gMDsNCisNCisJCWpjb3VudCA9IGtvbnZnZTsNCisJCWRuID0gKG4pOw0KKwkJbm4gPSBuICsgMTsNCisJCWRubiA9IChubik7DQorCQlkZWwgPSAxLjA7DQorCQlycSA9IHJlcW1pbiAqIGRuOw0KKwkJLy8NCisJCS8vIEluaXRpYWwgb3IgcmVzdGFydGVkIGxvb3AuDQorCQkvLw0KKwkJZm9yICg7Oykgew0KKwkJCWlmKEF1dG9tYXRpY0V4cGVyaW1lbnRNYW5hZ2VyLlFVSVRfTk9XKSBicmVhazsNCisJCQlmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKSB7DQorCQkJCXBbaSArIG4gKiBuXSA9IHN0YXJ0W2ldOw0KKwkJCX0NCisJCQlsaW1pdChzdGFydCk7DQorCQkJeVtuXSA9IGZuLmdldFZhbHVlKHN0YXJ0KS5jb3B5KCk7DQorCQkJaWNvdW50ID0gaWNvdW50ICsgMTsNCisNCisJCQlmb3IgKGogPSAwOyBqIDwgbjsgaisrKSB7DQorCQkJCXggPSBzdGFydFtqXTsNCisJCQkJc3RhcnRbal0gPSBzdGFydFtqXSArIHN0ZXBbal0gKiBkZWw7DQorCQkJCWZvciAoaSA9IDA7IGkgPCBuOyBpKyspIHsNCisJCQkJCXBbaSArIGogKiBuXSA9IHN0YXJ0W2ldOw0KKwkJCQl9DQorCQkJCWxpbWl0KHN0YXJ0KTsNCisJCQkJeVtqXSA9IGZuLmdldFZhbHVlKHN0YXJ0KS5jb3B5KCk7DQorCQkJCWljb3VudCA9IGljb3VudCArIDE7DQorCQkJCXN0YXJ0W2pdID0geDsNCisJCQkJaWYoQXV0b21hdGljRXhwZXJpbWVudE1hbmFnZXIuUVVJVF9OT1cpIGJyZWFrOw0KKwkJCX0NCisJCQlpZihBdXRvbWF0aWNFeHBlcmltZW50TWFuYWdlci5RVUlUX05PVykgYnJlYWs7DQorDQorCQkJLy8JICAgICAgICAgICAgICAgICAgICANCisJCQkvLyBUaGUgc2ltcGxleCBjb25zdHJ1Y3Rpb24gaXMgY29tcGxldGUuDQorCQkJLy8JICAgICAgICAgICAgICAgICAgICANCisJCQkvLyBGaW5kIGhpZ2hlc3QgYW5kIGxvd2VzdCBZIHZhbHVlcy4gWU5FV0xPID0gWShJSEkpIGluZGljYXRlcw0KKwkJCS8vIHRoZSB2ZXJ0ZXggb2YgdGhlIHNpbXBsZXggdG8gYmUgcmVwbGFjZWQuDQorCQkJLy8JICAgICAgICAgICAgICAgIA0KKwkJCXlsbyA9IHlbMF0uY29weSgpOw0KKwkJCWlsbyA9IDA7DQorDQorCQkJZm9yIChpID0gMTsgaSA8IG5uOyBpKyspIHsNCisJCQkJaWYgKHlbaV0uZ2V0RXJyb3IoKSA8IHlsby5nZXRFcnJvcigpKSB7DQorCQkJCQl5bG8gPSB5W2ldLmNvcHkoKTsNCisJCQkJCWlsbyA9IGk7DQorCQkJCX0NCisJCQl9DQorCQkJLy8NCisJCQkvLyBJbm5lciBsb29wLg0KKwkJCS8vDQorCQkJZm9yICg7Oykgew0KKwkJCQlpZihBdXRvbWF0aWNFeHBlcmltZW50TWFuYWdlci5RVUlUX05PVykgYnJlYWs7DQorCQkJCWlmIChrY291bnQgIT0gLTEgJiYga2NvdW50IDw9IGljb3VudCkgew0KKwkJCQkJYnJlYWs7DQorCQkJCX0NCisJCQkJeW5ld2xvID0geVswXS5jb3B5KCk7DQorCQkJCWloaSA9IDA7DQorDQorCQkJCWZvciAoaSA9IDE7IGkgPCBubjsgaSsrKSB7DQorCQkJCQlpZiAoeW5ld2xvLmdldEVycm9yKCkgPCB5W2ldLmdldEVycm9yKCkpIHsNCisJCQkJCQl5bmV3bG8gPSB5W2ldLmNvcHkoKTsNCisJCQkJCQlpaGkgPSBpOw0KKwkJCQkJfQ0KKwkJCQl9DQorCQkJCS8vDQorCQkJCS8vIENhbGN1bGF0ZSBQQkFSLCB0aGUgY2VudHJvaWQgb2YgdGhlIHNpbXBsZXggdmVydGljZXMNCisJCQkJLy8gZXhjZXB0aW5nIHRoZSB2ZXJ0ZXggd2l0aCBZIHZhbHVlIFlORVdMTy4NCisJCQkJLy8NCisJCQkJZm9yIChpID0gMDsgaSA8IG47IGkrKykgew0KKwkJCQkJeiA9IDAuMDsNCisJCQkJCWZvciAoaiA9IDA7IGogPCBubjsgaisrKSB7DQorCQkJCQkJeiA9IHogKyBwW2kgKyBqICogbl07DQorCQkJCQl9DQorCQkJCQl6ID0geiAtIHBbaSArIGloaSAqIG5dOw0KKwkJCQkJcGJhcltpXSA9IHogLyBkbjsNCisJCQkJfQ0KKwkJCQkvLw0KKwkJCQkvLyBSZWZsZWN0aW9uIHRocm91Z2ggdGhlIGNlbnRyb2lkLg0KKwkJCQkvLw0KKwkJCQlmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKSB7DQorCQkJCQlwc3RhcltpXSA9IHBiYXJbaV0gKyByY29lZmYgKiAocGJhcltpXSAtIHBbaSArIGloaSAqIG5dKTsNCisJCQkJfQ0KKwkJCQlsaW1pdChwc3Rhcik7DQorCQkJCXlzdGFyID0gZm4uZ2V0VmFsdWUocHN0YXIpLmNvcHkoKTsNCisJCQkJaWNvdW50ID0gaWNvdW50ICsgMTsNCisJCQkJLy8NCisJCQkJLy8gU3VjY2Vzc2Z1bCByZWZsZWN0aW9uLCBzbyBleHRlbnNpb24uDQorCQkJCS8vDQorCQkJCWlmICh5c3Rhci5nZXRFcnJvcigpIDwgeWxvLmdldEVycm9yKCkpIHsNCisJCQkJCWZvciAoaSA9IDA7IGkgPCBuOyBpKyspIHsNCisJCQkJCQlwMnN0YXJbaV0gPSBwYmFyW2ldICsgZWNvZWZmICogKHBzdGFyW2ldIC0gcGJhcltpXSk7DQorCQkJCQl9DQorCQkJCQlsaW1pdChwMnN0YXIpOw0KKwkJCQkJeTJzdGFyID0gZm4uZ2V0VmFsdWUocDJzdGFyKS5jb3B5KCk7DQorCQkJCQlpY291bnQgPSBpY291bnQgKyAxOw0KKwkJCQkJLy8NCisJCQkJCS8vIENoZWNrIGV4dGVuc2lvbi4NCisJCQkJCS8vDQorCQkJCQlpZiAoeXN0YXIuZ2V0RXJyb3IoKSA8IHkyc3Rhci5nZXRFcnJvcigpKSB7DQorCQkJCQkJZm9yIChpID0gMDsgaSA8IG47IGkrKykgew0KKwkJCQkJCQlwW2kgKyBpaGkgKiBuXSA9IHBzdGFyW2ldOw0KKwkJCQkJCX0NCisJCQkJCQl5W2loaV0gPSB5c3Rhci5jb3B5KCk7DQorCQkJCQl9DQorCQkJCQkvLw0KKwkJCQkJLy8gUmV0YWluIGV4dGVuc2lvbiBvciBjb250cmFjdGlvbi4NCisJCQkJCS8vDQorCQkJCQllbHNlIHsNCisJCQkJCQlmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKSB7DQorCQkJCQkJCXBbaSArIGloaSAqIG5dID0gcDJzdGFyW2ldOw0KKwkJCQkJCX0NCisJCQkJCQl5W2loaV0gPSB5MnN0YXIuY29weSgpOw0KKwkJCQkJfQ0KKwkJCQl9DQorCQkJCS8vDQorCQkJCS8vIE5vIGV4dGVuc2lvbi4NCisJCQkJLy8NCisJCQkJZWxzZSB7DQorCQkJCQlsID0gMDsNCisJCQkJCWZvciAoaSA9IDA7IGkgPCBubjsgaSsrKSB7DQorCQkJCQkJaWYgKHlzdGFyLmdldEVycm9yKCkgPCB5W2ldLmdldEVycm9yKCkpIHsNCisJCQkJCQkJbCA9IGwgKyAxOw0KKwkJCQkJCX0NCisJCQkJCX0NCisNCisJCQkJCWlmICgxIDwgbCkgew0KKwkJCQkJCWZvciAoaSA9IDA7IGkgPCBuOyBpKyspIHsNCisJCQkJCQkJcFtpICsgaWhpICogbl0gPSBwc3RhcltpXTsNCisJCQkJCQl9DQorCQkJCQkJeVtpaGldID0geXN0YXIuY29weSgpOw0KKwkJCQkJfQ0KKwkJCQkJLy8NCisJCQkJCS8vIENvbnRyYWN0aW9uIG9uIHRoZSBZKElISSkgc2lkZSBvZiB0aGUgY2VudHJvaWQuDQorCQkJCQkvLw0KKwkJCQkJZWxzZSBpZiAobCA9PSAwKSB7DQorCQkJCQkJZm9yIChpID0gMDsgaSA8IG47IGkrKykgew0KKwkJCQkJCQlwMnN0YXJbaV0gPSBwYmFyW2ldICsgY2NvZWZmDQorCQkJCQkJCQkJKiAocFtpICsgaWhpICogbl0gLSBwYmFyW2ldKTsNCisJCQkJCQl9DQorCQkJCQkJbGltaXQocDJzdGFyKTsNCisJCQkJCQl5MnN0YXIgPSBmbi5nZXRWYWx1ZShwMnN0YXIpLmNvcHkoKTsNCisJCQkJCQlpY291bnQgPSBpY291bnQgKyAxOw0KKwkJCQkJCS8vDQorCQkJCQkJLy8gQ29udHJhY3QgdGhlIHdob2xlIHNpbXBsZXguDQorCQkJCQkJLy8NCisJCQkJCQlpZiAoeVtpaGldLmdldEVycm9yKCkgPCB5MnN0YXIuZ2V0RXJyb3IoKSkgew0KKwkJCQkJCQlmb3IgKGogPSAwOyBqIDwgbm47IGorKykgew0KKwkJCQkJCQkJZm9yIChpID0gMDsgaSA8IG47IGkrKykgew0KKwkJCQkJCQkJCXBbaSArIGogKiBuXSA9IChwW2kgKyBqICogbl0gKyBwW2kgKyBpbG8NCisJCQkJCQkJCQkJCSogbl0pICogMC41Ow0KKwkJCQkJCQkJCXhtaW5baV0gPSBwW2kgKyBqICogbl07DQorCQkJCQkJCQl9DQorCQkJCQkJCQlsaW1pdCh4bWluKTsNCisJCQkJCQkJCXlbal0gPSBmbi5nZXRWYWx1ZSh4bWluKS5jb3B5KCk7DQorCQkJCQkJCQlpY291bnQgPSBpY291bnQgKyAxOw0KKwkJCQkJCQl9DQorCQkJCQkJCXlsbyA9IHlbMF07DQorCQkJCQkJCWlsbyA9IDA7DQorDQorCQkJCQkJCWZvciAoaSA9IDE7IGkgPCBubjsgaSsrKSB7DQorCQkJCQkJCQlpZiAoeVtpXS5nZXRFcnJvcigpIDwgeWxvLmdldEVycm9yKCkpIHsNCisJCQkJCQkJCQl5bG8gPSB5W2ldLmNvcHkoKTsNCisJCQkJCQkJCQlpbG8gPSBpOw0KKwkJCQkJCQkJfQ0KKwkJCQkJCQl9DQorCQkJCQkJCWNvbnRpbnVlOw0KKwkJCQkJCX0NCisJCQkJCQkvLw0KKwkJCQkJCS8vIFJldGFpbiBjb250cmFjdGlvbi4NCisJCQkJCQkvLw0KKwkJCQkJCWVsc2Ugew0KKwkJCQkJCQlmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKSB7DQorCQkJCQkJCQlwW2kgKyBpaGkgKiBuXSA9IHAyc3RhcltpXTsNCisJCQkJCQkJfQ0KKwkJCQkJCQl5W2loaV0gPSB5MnN0YXIuY29weSgpOw0KKwkJCQkJCX0NCisJCQkJCX0NCisJCQkJCS8vDQorCQkJCQkvLyBDb250cmFjdGlvbiBvbiB0aGUgcmVmbGVjdGlvbiBzaWRlIG9mIHRoZSBjZW50cm9pZC4NCisJCQkJCS8vDQorCQkJCQllbHNlIGlmIChsID09IDEpIHsNCisJCQkJCQlmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKSB7DQorCQkJCQkJCXAyc3RhcltpXSA9IHBiYXJbaV0gKyBjY29lZmYgKiAocHN0YXJbaV0gLSBwYmFyW2ldKTsNCisJCQkJCQl9DQorCQkJCQkJbGltaXQocDJzdGFyKTsNCisJCQkJCQl5MnN0YXIgPSBmbi5nZXRWYWx1ZShwMnN0YXIpLmNvcHkoKTsNCisJCQkJCQlpY291bnQgPSBpY291bnQgKyAxOw0KKwkJCQkJCS8vDQorCQkJCQkJLy8gUmV0YWluIHJlZmxlY3Rpb24/DQorCQkJCQkJLy8NCisJCQkJCQlpZiAoeTJzdGFyLmdldEVycm9yKCkgPD0geXN0YXIuZ2V0RXJyb3IoKSkgew0KKwkJCQkJCQlmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKSB7DQorCQkJCQkJCQlwW2kgKyBpaGkgKiBuXSA9IHAyc3RhcltpXTsNCisJCQkJCQkJfQ0KKwkJCQkJCQl5W2loaV0gPSB5MnN0YXIuY29weSgpOw0KKwkJCQkJCX0gZWxzZSB7DQorCQkJCQkJCWZvciAoaSA9IDA7IGkgPCBuOyBpKyspIHsNCisJCQkJCQkJCXBbaSArIGloaSAqIG5dID0gcHN0YXJbaV07DQorCQkJCQkJCX0NCisJCQkJCQkJeVtpaGldID0geXN0YXIuY29weSgpOw0KKwkJCQkJCX0NCisJCQkJCX0NCisJCQkJfQ0KKwkJCQkvLw0KKwkJCQkvLyBDaGVjayBpZiBZTE8gaW1wcm92ZWQuDQorCQkJCS8vDQorCQkJCWlmICh5W2loaV0uZ2V0RXJyb3IoKSA8IHlsby5nZXRFcnJvcigpKSB7DQorCQkJCQl5bG8gPSB5W2loaV0uY29weSgpOw0KKwkJCQkJaWxvID0gaWhpOw0KKwkJCQl9DQorCQkJCWpjb3VudCA9IGpjb3VudCAtIDE7DQorDQorCQkJCWlmICgwIDwgamNvdW50KSB7DQorCQkJCQljb250aW51ZTsNCisJCQkJfQ0KKwkJCQkvLw0KKwkJCQkvLyBDaGVjayB0byBzZWUgaWYgbWluaW11bSByZWFjaGVkLg0KKwkJCQkvLw0KKwkJCQlpZiAoa2NvdW50ID09IC0xIHx8IGljb3VudCA8PSBrY291bnQpIHsNCisJCQkJCWpjb3VudCA9IGtvbnZnZTsNCisNCisJCQkJCXogPSAwLjA7DQorCQkJCQlmb3IgKGkgPSAwOyBpIDwgbm47IGkrKykgew0KKwkJCQkJCXogPSB6ICsgeVtpXS5nZXRFcnJvcigpOw0KKwkJCQkJfQ0KKwkJCQkJeCA9IHogLyBkbm47DQorDQorCQkJCQl6ID0gMC4wOw0KKwkJCQkJZm9yIChpID0gMDsgaSA8IG5uOyBpKyspIHsNCisJCQkJCQl6ID0geiArIE1hdGgucG93KHlbaV0uZ2V0RXJyb3IoKSAtIHgsIDIpOw0KKwkJCQkJfQ0KKw0KKwkJCQkJaWYgKHogPD0gcnEpIHsNCisJCQkJCQlicmVhazsNCisJCQkJCX0NCisJCQkJfQ0KKwkJCX0NCisJCQkvLw0KKwkJCS8vIEZhY3RvcmlhbCB0ZXN0cyB0byBjaGVjayB0aGF0IFlORVdMTyBpcyBhIGxvY2FsIG1pbmltdW0uDQorCQkJLy8NCisJCQlmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKSB7DQorCQkJCXhtaW5baV0gPSBwW2kgKyBpbG8gKiBuXTsNCisJCQl9DQorCQkJeW5ld2xvID0geVtpbG9dLmNvcHkoKTsNCisJCQlicmVhazsNCisJCQkvKiBDb21tZW50ZWQgb3V0IGZvciAxLjIuMSByZWxlYXNlLiBUaGUgYXV0b21hdGljIGV4cGVyaW1lbnQNCisJCQkgKiBkb2VzIG5vdCBjb252ZXJnZSB3aXRob3V0IHRha2luZyBvdXQgdGhlIGxvY2FsIG1pbmltdW0gY2hlY2suDQorCQkJICoNCisJCQlpZiAoa2NvdW50ICE9IC0xICYmIGtjb3VudCA8IGljb3VudCkgew0KKwkJCQlpZmF1bHQgPSAyOw0KKwkJCQlicmVhazsNCisJCQl9DQorDQorCQkJaWZhdWx0ID0gMDsNCisNCisJCQlmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKSB7DQorCQkJCWRlbCA9IHN0ZXBbaV0gKiBlcHM7DQorCQkJCXhtaW5baV0gPSB4bWluW2ldICsgZGVsOw0KKwkJCQlsaW1pdCh4bWluKTsNCisJCQkJeiA9IGZuLmdldFZhbHVlKHhtaW4pLmdldEVycm9yKCk7DQorCQkJCWljb3VudCA9IGljb3VudCArIDE7DQorCQkJCWlmICh6IDwgeW5ld2xvLmdldEVycm9yKCkpIHsNCisJCQkJCWlmYXVsdCA9IDI7DQorCQkJCQlicmVhazsNCisJCQkJfQ0KKwkJCQl4bWluW2ldID0geG1pbltpXSAtIGRlbCAtIGRlbDsNCisJCQkJbGltaXQoeG1pbik7DQorCQkJCXogPSBmbi5nZXRWYWx1ZSh4bWluKS5nZXRFcnJvcigpOw0KKwkJCQlpY291bnQgPSBpY291bnQgKyAxOw0KKwkJCQlpZiAoeiA8IHluZXdsby5nZXRFcnJvcigpKSB7DQorCQkJCQlpZmF1bHQgPSAyOw0KKwkJCQkJYnJlYWs7DQorCQkJCX0NCisJCQkJeG1pbltpXSA9IHhtaW5baV0gKyBkZWw7DQorCQkJCWlmKEF1dG9tYXRpY0V4cGVyaW1lbnRNYW5hZ2VyLlFVSVRfTk9XKSBicmVhazsNCisJCQl9DQorDQorCQkJaWYgKGlmYXVsdCA9PSAwIHx8IEF1dG9tYXRpY0V4cGVyaW1lbnRNYW5hZ2VyLlFVSVRfTk9XKSB7DQorCQkJCWJyZWFrOw0KKwkJCX0NCisJCQkvLw0KKwkJCS8vIFJlc3RhcnQgdGhlIHByb2NlZHVyZS4NCisJCQkvLw0KKwkJCWZvciAoaSA9IDA7IGkgPCBuOyBpKyspIHsNCisJCQkJc3RhcnRbaV0gPSB4bWluW2ldOw0KKwkJCX0NCisJCQlkZWwgPSBlcHM7DQorCQkJbnVtcmVzID0gbnVtcmVzICsgMTsNCisJCQlpZihBdXRvbWF0aWNFeHBlcmltZW50TWFuYWdlci5RVUlUX05PVykgYnJlYWs7DQorCQkJKi8NCisJCX0NCisJfQ0KKw0KKwlwcml2YXRlIHZvaWQgbGltaXQoZG91YmxlIFtddmFscykgew0KKwkJZm9yKGludCBpPTA7aTx2YWxzLmxlbmd0aDsrK2kpIHsNCisJCQlpZih2YWxzW2ldPG1pblBhcmFtVmFsdWVzLmdldChpKSkgdmFsc1tpXSA9IG1pblBhcmFtVmFsdWVzLmdldChpKTsgDQorCQkJZWxzZSBpZih2YWxzW2ldPm1heFBhcmFtVmFsdWVzLmdldChpKSkgdmFsc1tpXSA9IG1heFBhcmFtVmFsdWVzLmdldChpKTsgDQorCQl9DQorCX0NCisJcHVibGljIGRvdWJsZSBnZXRNaW5pbXVtRnVuY3Rpb25WYWx1ZSgpIHsNCisJCWlmKHRoaXMueW5ld2xvICE9IG51bGwpDQorCQkJcmV0dXJuIHRoaXMueW5ld2xvLmdldEVycm9yKCk7DQorCQlyZXR1cm4gLTE7IC8vIHRoZSBhbGdvcml0aG0gd2FzIHByb2JhYmx5IGludGVycnVwdGVkLg0KKwl9DQorCXB1YmxpYyBFcnJvclJlc3VsdCBnZXRNaW5pbXVtRXJyb3JSZXN1bHQoKSB7DQorCQlyZXR1cm4gdGhpcy55bmV3bG87DQorCX0NCisJcHVibGljIGRvdWJsZVtdIGdldE1pbmltdW1QYXJhbWV0ZXJzVmFsdWVzKCkgew0KKwkJcmV0dXJuIHRoaXMueG1pbjsNCisJfQ0KKw0KKwlwdWJsaWMgdm9pZCBzZXRQYXJhbWV0ZXJMaW1pdHMoZmluYWwgaW50IHBhcmFtZXRlckluZGV4LA0KKwkJCWZpbmFsIGRvdWJsZSBsb3dlckJvdW5kLCBmaW5hbCBkb3VibGUgdXBwZXJCb3VuZCkgew0KKwkJZm9yKGludCBpPTA7aTxwYXJhbWV0ZXJJbmRleCsxLW1pblBhcmFtVmFsdWVzLnNpemUoKTsrK2kpIG1pblBhcmFtVmFsdWVzLmFkZCgwLjApOw0KKwkJZm9yKGludCBpPTA7aTxwYXJhbWV0ZXJJbmRleCsxLW1heFBhcmFtVmFsdWVzLnNpemUoKTsrK2kpIG1heFBhcmFtVmFsdWVzLmFkZCgwLjApOw0KKwkJbWluUGFyYW1WYWx1ZXMuZW5zdXJlQ2FwYWNpdHkocGFyYW1ldGVySW5kZXgrMSk7DQorCQltYXhQYXJhbVZhbHVlcy5lbnN1cmVDYXBhY2l0eShwYXJhbWV0ZXJJbmRleCsxKTsNCisJCW1pblBhcmFtVmFsdWVzLnNldChwYXJhbWV0ZXJJbmRleCwgbG93ZXJCb3VuZCk7DQorCQltYXhQYXJhbVZhbHVlcy5zZXQocGFyYW1ldGVySW5kZXgsdXBwZXJCb3VuZCk7DQorCQkNCisJfQ0KKw0KK30NCmRpZmYgLS1naXQgYS9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQvc3JjL29yZy9lY2xpcHNlL3N0ZW0vYW5hbHlzaXMvYXV0b21hdGljZXhwZXJpbWVudC9PcHRpbWl6ZXJBbGdvcml0aG0uamF2YSBiL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuYXV0b21hdGljZXhwZXJpbWVudC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9hbmFseXNpcy9hdXRvbWF0aWNleHBlcmltZW50L09wdGltaXplckFsZ29yaXRobS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFjYTM1N2IKLS0tIC9kZXYvbnVsbAorKysgYi9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQvc3JjL29yZy9lY2xpcHNlL3N0ZW0vYW5hbHlzaXMvYXV0b21hdGljZXhwZXJpbWVudC9PcHRpbWl6ZXJBbGdvcml0aG0uamF2YQpAQCAtMCwwICsxLDI3IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuYXV0b21hdGljZXhwZXJpbWVudDsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogCisgKiBDb3B5cmlnaHQgKGMpIDIwMTEgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuIAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyAKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0IAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwgCisgKiAKKyAqIENvbnRyaWJ1dG9yczogCisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLklkZW50aWZpYWJsZTsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogQSByZXByZXNlbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+T3B0aW1pemVyIEFsZ29yaXRobTwvYj48L2VtPicuCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqCisgKgorICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQuQXV0b21hdGljZXhwZXJpbWVudFBhY2thZ2UjZ2V0T3B0aW1pemVyQWxnb3JpdGhtKCkKKyAqIEBtb2RlbAorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgaW50ZXJmYWNlIE9wdGltaXplckFsZ29yaXRobSBleHRlbmRzIElkZW50aWZpYWJsZSB7Cit9IC8vIE9wdGltaXplckFsZ29yaXRobQpkaWZmIC0tZ2l0IGEvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5hdXRvbWF0aWNleHBlcmltZW50L3NyYy9vcmcvZWNsaXBzZS9zdGVtL2FuYWx5c2lzL2F1dG9tYXRpY2V4cGVyaW1lbnQvU2ltcGxleEFsZ29yaXRobS5qYXZhIGIvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5hdXRvbWF0aWNleHBlcmltZW50L3NyYy9vcmcvZWNsaXBzZS9zdGVtL2FuYWx5c2lzL2F1dG9tYXRpY2V4cGVyaW1lbnQvU2ltcGxleEFsZ29yaXRobS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVmMGE3NGIKLS0tIC9kZXYvbnVsbAorKysgYi9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQvc3JjL29yZy9lY2xpcHNlL3N0ZW0vYW5hbHlzaXMvYXV0b21hdGljZXhwZXJpbWVudC9TaW1wbGV4QWxnb3JpdGhtLmphdmEKQEAgLTAsMCArMSwyNCBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQ7DQorDQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuRXJyb3JSZXN1bHQ7DQorDQorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisgKiBDb3B5cmlnaHQgKGMpIDIwMDkgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuDQorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscw0KKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMA0KKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0DQorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwNCisgKg0KKyAqIENvbnRyaWJ1dG9yczoNCisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uDQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQorDQorcHVibGljIGludGVyZmFjZSBTaW1wbGV4QWxnb3JpdGhtIHsNCisJcHVibGljIGZpbmFsIHN0YXRpYyBkb3VibGUgTk9fTElNSVQgPSAtMTsNCisJDQorCXB1YmxpYyB2b2lkIGV4ZWN1dGUoZmluYWwgU2ltcGxleEZ1bmN0aW9uIGZuLCAgZmluYWwgZG91YmxlW10gc3RhcnRQb2ludHMsIGZpbmFsIGRvdWJsZVtdIHN0ZXAsIGZpbmFsIGRvdWJsZSB0ZXJtaW5hdGluZ1ZhcmlhbmNlLCBsb25nIG1heEl0ZXIpOw0KKwlwdWJsaWMgZG91YmxlIGdldE1pbmltdW1GdW5jdGlvblZhbHVlKCk7DQorCXB1YmxpYyBFcnJvclJlc3VsdCBnZXRNaW5pbXVtRXJyb3JSZXN1bHQoKTsNCisJcHVibGljIGRvdWJsZVtdIGdldE1pbmltdW1QYXJhbWV0ZXJzVmFsdWVzKCk7DQorCXB1YmxpYyB2b2lkIHNldFBhcmFtZXRlckxpbWl0cyhmaW5hbCBpbnQgcGFyYW1ldGVySW5kZXgsIGZpbmFsIGRvdWJsZSBsb3dlckJvdW5kLCBmaW5hbCBkb3VibGUgdXBwZXJCb3VuZCk7DQorfQ0KZGlmZiAtLWdpdCBhL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuYXV0b21hdGljZXhwZXJpbWVudC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9hbmFseXNpcy9hdXRvbWF0aWNleHBlcmltZW50L1NpbXBsZXhBbGdvcml0aG1FeGVjdXRlci5qYXZhIGIvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5hdXRvbWF0aWNleHBlcmltZW50L3NyYy9vcmcvZWNsaXBzZS9zdGVtL2FuYWx5c2lzL2F1dG9tYXRpY2V4cGVyaW1lbnQvU2ltcGxleEFsZ29yaXRobUV4ZWN1dGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWQ0YWI4YQotLS0gL2Rldi9udWxsCisrKyBiL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuYXV0b21hdGljZXhwZXJpbWVudC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9hbmFseXNpcy9hdXRvbWF0aWNleHBlcmltZW50L1NpbXBsZXhBbGdvcml0aG1FeGVjdXRlci5qYXZhCkBAIC0wLDAgKzEsMzM2IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuYXV0b21hdGljZXhwZXJpbWVudDsNCisNCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyAqIENvcHlyaWdodCAoYykgMjAwOSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4NCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzDQorICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wDQorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQNCisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbA0KKyAqDQorICogQ29udHJpYnV0b3JzOg0KKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24NCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCisNCisvKioNCisgKiBJbXBsZW1lbnRhdGlvbiB3YXMgdGFrZW4gZnJvbTogaHR0cDovL3d3dy5lZS51Y2wuYWMudWsvfm1mbGFuYWdhL2phdmEvTWluaW1pc2F0aW9uLmh0bWwjc2ltcGxleA0KKyAqLw0KKw0KK2ltcG9ydCBqYXZhLmlvLkZpbGU7DQoraW1wb3J0IGphdmEuaW8uRmlsZVdyaXRlcjsNCitpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsNCitpbXBvcnQgamF2YS51dGlsLkxpc3Q7DQorDQoraW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QbGF0Zm9ybTsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLkVMaXN0Ow0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuVVJJOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUF0dHJpYnV0ZTsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5FcnJvckZ1bmN0aW9uOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLkVycm9yUmVzdWx0Ow0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLlNjZW5hcmlvSW5pdGlhbGl6YXRpb25FeGNlcHRpb247DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuYXV0b21hdGljZXhwZXJpbWVudC52aWV3cy5BdXRvRXhwQ29udHJvbDsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5pbXBsLlJlZmVyZW5jZVNjZW5hcmlvRGF0YU1hcEltcGw7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMudXRpbC5DU1ZzY2VuYXJpb0xvYWRlcjsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLkRlY29yYXRvcjsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLkludGVncmF0aW9uRGVjb3JhdG9yOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2NlbmFyaW8uU2NlbmFyaW87DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5EaXNlYXNlTW9kZWw7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uam9icy5zaW11bGF0aW9uLklTaW11bGF0aW9uOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmpvYnMuc2ltdWxhdGlvbi5TaW11bGF0aW9uOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnV0aWwubG9nZ2Vycy52aWV3cy5DdXN0b21DU1ZMb2dnZXI7DQorDQorDQorcHVibGljIGNsYXNzIFNpbXBsZXhBbGdvcml0aG1FeGVjdXRlciANCisJZXh0ZW5kcyBBYnN0cmFjdEVycm9yQW5hbHlzaXNBbGdvcml0aG0gew0KKwkNCisJcHJpdmF0ZSBJU2ltdWxhdGlvbiBzaW11bGF0aW9uID0gbnVsbDsNCisJcHJpdmF0ZSBDdXN0b21DU1ZMb2dnZXIgY3N2TG9nZ2VyID0gbnVsbDsNCisJcHJpdmF0ZSBmaW5hbCBzdGF0aWMgU3RyaW5nIFNJTVVMQVRJT05fT1VUUFVUX0RJUiA9IFBsYXRmb3JtLmdldExvY2F0aW9uKCkgKyBGaWxlLnNlcGFyYXRvciArICJBdXRvRXhwVGVtcERpciI7DQorCXByaXZhdGUgZmluYWwgc3RhdGljIFN0cmluZyBMT0dfRklMRV9OQU1FID0gU0lNVUxBVElPTl9PVVRQVVRfRElSK0ZpbGUuc2VwYXJhdG9yKyJyZXN1bHRMb2cuY3N2IjsNCisJc3RhdGljIFN0cmluZyBMUyA9IFN5c3RlbS5nZXRQcm9wZXJ0eSgibGluZS5zZXBhcmF0b3IiKTsgDQorCXByaXZhdGUgZmluYWwgQ3VzdG9tU2ltdWxhdGlvbk1hbmFnZXIgc2ltTWdyID0gQ3VzdG9tU2ltdWxhdGlvbk1hbmFnZXIuZ2V0TWFuYWdlcigpOw0KKwlwcml2YXRlIFJlZmVyZW5jZVNjZW5hcmlvRGF0YU1hcEltcGwgcmVmOw0KKwlwcml2YXRlIHN0YXRpYyBBdXRvRXhwQ29udHJvbCBhZUNvbnRyb2wgPSBudWxsOw0KKwkNCisJDQorCS8qKg0KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuYXV0b21hdGljZXhwZXJpbWVudC5BYnN0cmFjdEVycm9yQW5hbHlzaXNBbGdvcml0aG0jZXhlY3V0ZSgpDQorCSAqLw0KKwlAT3ZlcnJpZGUNCisJcHVibGljIHZvaWQgZXhlY3V0ZSgpIHsNCisJCWRvdWJsZSBwcmV2bWluID0gRG91YmxlLk1BWF9WQUxVRTsNCisJCWRvdWJsZSBbXSBwcmV2dmFscyA9IG5ldyBkb3VibGVbaW5pdGlhbFBhcmFtc1ZhbHVlcy5sZW5ndGhdOw0KKwkJZG91YmxlIFtdIG1pbnZhbHM7DQorCQlTdHJpbmcgW10gcGFyYW1ldGVyTmFtZXM9bnVsbDsNCisJCWlmIChwYXJhbWV0ZXJzICE9IG51bGwpIHsNCisJCQlwYXJhbWV0ZXJOYW1lcyA9IG5ldyBTdHJpbmdbcGFyYW1ldGVycy5zaXplKCldOw0KKwkJCWludCBpPTA7DQorCQkJZm9yIChmaW5hbCBNb2RpZmlhYmxlUGFyYW1ldGVyIHBhcmFtOnBhcmFtZXRlcnMpIHsNCisJCQkJcGFyYW1ldGVyTmFtZXNbaSsrXSA9IHBhcmFtLmdldEZlYXR1cmVOYW1lKCk7DQorCQkJfQ0KKwkJfQ0KKwkJDQorCQlmb3IoOzspIHsNCisJCQlmb3IoaW50IGk9MDtpPGluaXRpYWxQYXJhbXNWYWx1ZXMubGVuZ3RoOysraSkgcHJldnZhbHNbaV0gPSBpbml0aWFsUGFyYW1zVmFsdWVzW2ldOw0KKwkJCWxvbmcgYmVmb3JlID0gU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCk7DQorCQkJc2ltcGxleEFsZ29yaXRobS5leGVjdXRlKHNpbXBsZXhGblRvTWluaW1pemUsICBpbml0aWFsUGFyYW1zVmFsdWVzLCBwYXJhbXNJbml0aWFsU3RlcHMsIHRvbGVyYW5jZSwgdGhpcy5tYXhOdW1PZkl0ZXJhdGlvbnMpOw0KKwkJCWxvbmcgYWZ0ZXIgPSBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKTsNCisJCQlpZihBdXRvbWF0aWNFeHBlcmltZW50TWFuYWdlci5RVUlUX05PVykNCisJCQkJQXV0b21hdGljRXhwZXJpbWVudE1hbmFnZXIuc3RvcExhdGNoLmNvdW50RG93bigpOw0KKwkJCWlmKCF0aGlzLnJlcGVhdCB8fCBBdXRvbWF0aWNFeHBlcmltZW50TWFuYWdlci5RVUlUX05PVykgew0KKy8vCQkJCUFjdGl2YXRvci5sb2dJbmZvcm1hdGlvbigic3BsdW5nZSIpOw0KKy8vCQkJCUFjdGl2YXRvci5sb2dJbmZvcm1hdGlvbigiXG5cblRpbWUgdG8gZXhlY3V0ZSB0aGUgTmVkbGVyLU1lYWQgQWxnb3JpdGhtOiAiICsgKGFmdGVyLWJlZm9yZSkvMTAwMCArICIgc2Vjb25kcyIpOw0KKy8vCQkJCUFjdGl2YXRvci5sb2dJbmZvcm1hdGlvbigiTWluaW11bSB2YWx1ZTogIiArIHNpbXBsZXhBbGdvcml0aG0uZ2V0TWluaW11bUZ1bmN0aW9uVmFsdWUoKSk7DQorLy8JCQkJQWN0aXZhdG9yLmxvZ0luZm9ybWF0aW9uKCJWYWxpZGF0aW9uIGVycm9yOiAiICsgc2ltcGxleEFsZ29yaXRobS5nZXRNaW5pbXVtRXJyb3JSZXN1bHQoKS5nZXRWYWxpZGF0aW9uRXJyb3IoKSk7DQorLy8JCQkJQWN0aXZhdG9yLmxvZ0luZm9ybWF0aW9uKCJQYXJhbWV0ZXJzIHZhbHVlczogIiArIEFycmF5cy50b1N0cmluZyhzaW1wbGV4QWxnb3JpdGhtLmdldE1pbmltdW1QYXJhbWV0ZXJzVmFsdWVzKCkpKTsNCisJCQkJbWludmFscyA9IHNpbXBsZXhBbGdvcml0aG0uZ2V0TWluaW11bVBhcmFtZXRlcnNWYWx1ZXMoKTsNCisJCQkJYnJlYWs7DQorCQkJfQ0KKwkJCWRvdWJsZSBuZXdtaW4gPSBzaW1wbGV4QWxnb3JpdGhtLmdldE1pbmltdW1GdW5jdGlvblZhbHVlKCk7DQorCQkJaWYobmV3bWluID49IHByZXZtaW4pIHsNCisvLwkJCQlBY3RpdmF0b3IubG9nSW5mb3JtYXRpb24oIlxuXG5UaW1lIHRvIGV4ZWN1dGUgdGhlIE5lZGxlci1NZWFkIEFsZ29yaXRobTogIiArIChhZnRlci1iZWZvcmUpLzEwMDAgKyAiIHNlY29uZHMiKTsNCisvLwkJCQlBY3RpdmF0b3IubG9nSW5mb3JtYXRpb24oIk1pbmltdW0gdmFsdWU6ICIgKyBwcmV2bWluKTsNCisvLwkJCQlBY3RpdmF0b3IubG9nSW5mb3JtYXRpb24oIlZhbGlkYXRpb24gZXJyb3I6ICIgKyBzaW1wbGV4QWxnb3JpdGhtLmdldE1pbmltdW1FcnJvclJlc3VsdCgpLmdldFZhbGlkYXRpb25FcnJvcigpKTsNCisvLwkJCQlBY3RpdmF0b3IubG9nSW5mb3JtYXRpb24oIlBhcmFtZXRlcnMgdmFsdWVzOiAiICsgQXJyYXlzLnRvU3RyaW5nKHByZXZ2YWxzKSk7DQorCQkJCW1pbnZhbHMgPSBwcmV2dmFsczsNCisJCQkJYnJlYWs7IC8vIHdlIGNvdWxkbid0IGltcHJvdmUNCisJCQl9DQorCQkJLy8gTm90IHNhbWUsIHJlaW5pdCB3aXRoIG5ldyBtaW5pbXVtDQorCQkJcHJldm1pbiA9IHNpbXBsZXhBbGdvcml0aG0uZ2V0TWluaW11bUZ1bmN0aW9uVmFsdWUoKTsNCisJCQkNCisJCQlmb3IoaW50IGk9MDtpPGluaXRpYWxQYXJhbXNWYWx1ZXMubGVuZ3RoOysraSl7DQorCQkJCWluaXRpYWxQYXJhbXNWYWx1ZXNbaV0gPSBzaW1wbGV4QWxnb3JpdGhtLmdldE1pbmltdW1QYXJhbWV0ZXJzVmFsdWVzKClbaV07DQorCQkJCXByZXZ2YWxzW2ldID0gIHNpbXBsZXhBbGdvcml0aG0uZ2V0TWluaW11bVBhcmFtZXRlcnNWYWx1ZXMoKVtpXTsNCisJCQl9DQorCQkJRXJyb3JBbmFseXNpc0FsZ29yaXRobUV2ZW50IG5ld0V2ZW50ID0gbmV3IEVycm9yQW5hbHlzaXNBbGdvcml0aG1FdmVudChzaW1wbGV4QWxnb3JpdGhtLmdldE1pbmltdW1FcnJvclJlc3VsdCgpLCBBTEdPUklUSE1fU1RBVFVTLlJFU1RBUlRFRF9BTEdPUklUSE0pOw0KKwkJCW5ld0V2ZW50LnBhcmFtZXRlck5hbWVzID0gcGFyYW1ldGVyTmFtZXM7DQorCQkJbmV3RXZlbnQucGFyYW1ldGVyVmFsdWVzID0gc2ltcGxleEFsZ29yaXRobS5nZXRNaW5pbXVtUGFyYW1ldGVyc1ZhbHVlcygpOw0KKwkJCXRoaXMuZmlyZUV2ZW50KG5ld0V2ZW50KTsNCisNCisJCX0NCisJCUVycm9yQW5hbHlzaXNBbGdvcml0aG1FdmVudCBuZXdFdmVudCA9IG5ldyBFcnJvckFuYWx5c2lzQWxnb3JpdGhtRXZlbnQoc2ltcGxleEFsZ29yaXRobS5nZXRNaW5pbXVtRXJyb3JSZXN1bHQoKSwgQUxHT1JJVEhNX1NUQVRVUy5GSU5JU0hFRF9BTEdPUklUSE0pOw0KKwkJbmV3RXZlbnQucGFyYW1ldGVyTmFtZXMgPSBwYXJhbWV0ZXJOYW1lczsNCisJCW5ld0V2ZW50LnBhcmFtZXRlclZhbHVlcyA9IG1pbnZhbHM7DQorCQl0aGlzLmZpcmVFdmVudChuZXdFdmVudCk7DQorCX0NCisJDQorCXB1YmxpYyB2b2lkIGluaXQoQXV0b21hdGljRXhwZXJpbWVudCBhdXRvbWF0aWNFeHBlcmltZW50LCBFcnJvckFuYWx5c2lzQWxnb3JpdGhtIGFsZykgew0KKwkJc3VwZXIuaW5pdChhdXRvbWF0aWNFeHBlcmltZW50KTsNCisJCXNpbXBsZXhGblRvTWluaW1pemUgPSBuZXcgTmVkbGVhck1lYWRTaW1wbGV4RnVuY3Rpb24ocGFyYW1ldGVycywgYmFzZVNjZW5hcmlvLCBlcnJvckZ1bmN0aW9uLCBhbGcpOw0KKwkJdHJ5IHsNCisJCQlDU1ZzY2VuYXJpb0xvYWRlciBsb2FkZXIxID0gbmV3IENTVnNjZW5hcmlvTG9hZGVyKHJlZmVyZW5jZURhdGFEaXJlY3RvcnkpOw0KKwkJCWludCByZXMgPSBsb2FkZXIxLmdldE1heFJlc29sdXRpb24oKTsNCisJCQlyZWYgPSBsb2FkZXIxLnBhcnNlQWxsRmlsZXMocmVzKTsNCisJCX0gY2F0Y2ggKFNjZW5hcmlvSW5pdGlhbGl6YXRpb25FeGNlcHRpb24gZSkgew0KKwkJCWUucHJpbnRTdGFja1RyYWNlKCk7DQorCQl9DQorCX0NCisJDQorCUBPdmVycmlkZQ0KKwlwdWJsaWMgdm9pZCBzZXRQYXJhbWV0ZXJzKExpc3Q8TW9kaWZpYWJsZVBhcmFtZXRlcj4gcGFyYW1ldGVycykgew0KKwkJc3VwZXIuc2V0UGFyYW1ldGVycyhwYXJhbWV0ZXJzKTsNCisJCQ0KKwkJLy9TZXQgbG93ZXIgYW5kIHVwcGVyIGJvdW5kcyBjb25zdHJhaW50cyBmb3IgdGhlIHBhcmFtZXRlcnMNCisJCWludCBwYXJhbUluZGV4PTA7DQorCQlmb3IgKGZpbmFsIE1vZGlmaWFibGVQYXJhbWV0ZXIgcGFyYW06cGFyYW1ldGVycykgew0KKwkJCXNpbXBsZXhBbGdvcml0aG0uc2V0UGFyYW1ldGVyTGltaXRzKHBhcmFtSW5kZXgsIHBhcmFtLmdldExvd2VyQm91bmQoKSwgcGFyYW0uZ2V0VXBwZXJCb3VuZCgpKTsNCisJCQlwYXJhbUluZGV4Kys7DQorCQl9DQorCX0NCisJDQorCS8qKg0KKwkgKg0KKwkgKi8NCisJcHVibGljIGNsYXNzIE5lZGxlYXJNZWFkU2ltcGxleEZ1bmN0aW9uDQorCQlpbXBsZW1lbnRzIFNpbXBsZXhGdW5jdGlvbiANCisJewkNCisJICAgIHByaXZhdGUgRXJyb3JGdW5jdGlvbiBlcnJvckZ1bmN0aW9uID0gbnVsbDsNCisJICAgIHByaXZhdGUgU3RyaW5nW10gcGFyYW1ldGVyTmFtZXMgPSBudWxsOw0KKwkgICAgcHJpdmF0ZSBGaWxlV3JpdGVyIHJlc3VsdFdyaXRlcjsNCisJICAgIHByaXZhdGUgVVJJW10gZGVjb3JhdG9yVVJJcyA9IG51bGw7DQorCSAgICBwcml2YXRlIEVycm9yQW5hbHlzaXNBbGdvcml0aG0gYWxnb3JpdGhtID0gbnVsbDsNCisJICAgIA0KKwkJcHVibGljIE5lZGxlYXJNZWFkU2ltcGxleEZ1bmN0aW9uKA0KKwkJCQlmaW5hbCBMaXN0PE1vZGlmaWFibGVQYXJhbWV0ZXI+IHBhcmFtZXRlcnMsDQorCQkJCWZpbmFsIFNjZW5hcmlvIHBCYXNlU2NlbmFyaW8sIA0KKwkJCQlmaW5hbCBFcnJvckZ1bmN0aW9uIGVycm9yRnVuY3Rpb24sIA0KKwkJCQlmaW5hbCBFcnJvckFuYWx5c2lzQWxnb3JpdGhtIGFsZ29yaXRobSkgew0KKwkJCQ0KKwkJCXRyeSB7DQorCQkJCUZpbGUgZD0gbmV3IEZpbGUoU0lNVUxBVElPTl9PVVRQVVRfRElSKTsNCisJCQkJaWYoIWQuZXhpc3RzKCkpZC5ta2RpcnMoKTsNCisJCQkJcmVzdWx0V3JpdGVyID0gbmV3IEZpbGVXcml0ZXIoTE9HX0ZJTEVfTkFNRSk7DQorCQkJCWJhc2VTY2VuYXJpbyA9IHBCYXNlU2NlbmFyaW87DQorCQkJCXRoaXMuZXJyb3JGdW5jdGlvbiA9IGVycm9yRnVuY3Rpb247DQorCQkJCXRoaXMuYWxnb3JpdGhtID0gYWxnb3JpdGhtOw0KKwkJCQkNCisJCQkJaWYgKHBhcmFtZXRlcnMgIT0gbnVsbCkgew0KKwkJCQkJcGFyYW1ldGVyTmFtZXMgPSBuZXcgU3RyaW5nW3BhcmFtZXRlcnMuc2l6ZSgpXTsNCisJCQkJCWRlY29yYXRvclVSSXMgPSBuZXcgVVJJW3BhcmFtZXRlcnMuc2l6ZSgpXTsNCisJCQkJCWludCBpPTA7DQorCQkJCQlmb3IgKGZpbmFsIE1vZGlmaWFibGVQYXJhbWV0ZXIgcGFyYW06cGFyYW1ldGVycykgew0KKwkJCQkJCWRlY29yYXRvclVSSXNbaV09cGFyYW0uZ2V0VGFyZ2V0VVJJKCk7DQorCQkJCQkJcGFyYW1ldGVyTmFtZXNbaSsrXSA9IHBhcmFtLmdldEZlYXR1cmVOYW1lKCk7DQorCQkJCQkJcmVzdWx0V3JpdGVyLndyaXRlKHBhcmFtZXRlck5hbWVzW2ktMV0pOw0KKwkJCQkJCXJlc3VsdFdyaXRlci53cml0ZSgiLCIpOw0KKwkJCQkJfQ0KKwkJCQkJcmVzdWx0V3JpdGVyLndyaXRlKCJlcnJvciIpOw0KKwkJCQkJcmVzdWx0V3JpdGVyLndyaXRlKExTKTsNCisJCQkJfQ0KKwkJCX0gY2F0Y2goSU9FeGNlcHRpb24gaW9lKSB7DQorCQkJCWlvZS5wcmludFN0YWNrVHJhY2UoKTsNCisJCQl9DQorCQl9DQorCQkNCisJCXB1YmxpYyBFcnJvclJlc3VsdCBnZXRWYWx1ZShkb3VibGVbXSBwYXJhbWV0ZXJzKSB7DQorCQkJDQorCQkJDQorCQkJc2ltdWxhdGlvbiA9IGNyZWF0ZVNpbXVsYXRpb24oYmFzZVNjZW5hcmlvKTsNCisJCQlzaW11bGF0aW9uLnNldFNlcXVlbmNlTnVtYmVyKHNpbXVsYXRpb24uZ2V0U2VxdWVuY2VOdW1iZXIoKSsxKTsNCisJCQkNCisJCQkvLyBEZXNjZW5kIGludG8gdGhlIFNjZW5hcmlvIGxvb2tpbmcgZm9yIHNvbWV0aGluZyB3aXRoIGEgZG91YmxlIGZpZWxkDQorCQkJZmluYWwgRUxpc3Q8RGVjb3JhdG9yPiBkZWNzID0gYmFzZVNjZW5hcmlvLmdldENhbm9uaWNhbEdyYXBoKCkuZ2V0RGVjb3JhdG9ycygpOw0KKwkNCisJCQlEZWNvcmF0b3IgZGVmYXVsdERlY29yYXRvciA9IG51bGw7DQorCQkJZm9yIChEZWNvcmF0b3IgZGVjb3JhdG9yIDogZGVjcykgew0KKwkJCQlpZiAoZGVjb3JhdG9yIGluc3RhbmNlb2YgRGlzZWFzZU1vZGVsKSB7DQorCQkJCQlkZWZhdWx0RGVjb3JhdG9yID0gZGVjb3JhdG9yOyANCisJCQkJCWJyZWFrOw0KKwkJCQl9DQorCQkJfQ0KKwkJCQ0KKwkJCWZvcihpbnQgaT0wO2k8cGFyYW1ldGVyTmFtZXMubGVuZ3RoOysraSkgew0KKwkJCQlEZWNvcmF0b3IgZGVjb3JhdG9yID0gZGVmYXVsdERlY29yYXRvcjsNCisJCQkJaWYoZGVjb3JhdG9yVVJJc1tpXSAhPSBudWxsKSANCisJCQkJCWZvcihEZWNvcmF0b3Igc2NlbmFyaW9EZWM6ZGVjcykgDQorCQkJCQkJaWYoZGVjb3JhdG9yVVJJc1tpXS50b1N0cmluZygpLmVxdWFscyhzY2VuYXJpb0RlYy5nZXRVUkkoKS50b1N0cmluZygpKSkgew0KKwkJCQkJCQlkZWNvcmF0b3IgPSBzY2VuYXJpb0RlYzsNCisJCQkJCQkJYnJlYWs7DQorCQkJCQkJfQ0KKwkJCQlmb3IgKEVBdHRyaWJ1dGUgYXR0cmlidXRlIDogZGVjb3JhdG9yLmVDbGFzcygpLmdldEVBbGxBdHRyaWJ1dGVzKCkpIA0KKwkJCQkJaWYoYXR0cmlidXRlLmdldE5hbWUoKS5lcXVhbHMocGFyYW1ldGVyTmFtZXNbaV0pKSANCisJCQkJCQlkZWNvcmF0b3IuZVNldChhdHRyaWJ1dGUsIG5ldyBEb3VibGUocGFyYW1ldGVyc1tpXSkpOw0KKwkJCX0NCisJCQkNCisJCQkNCisJCQlTdHJpbmcgdW5pcXVlSUQgPSBudWxsOw0KKwkJCQ0KKwkJCWlmIChzaW11bGF0aW9uICE9IG51bGwpIHsNCisJCQkJdW5pcXVlSUQgPSBzaW11bGF0aW9uLmdldFVuaXF1ZUlEU3RyaW5nKCk7DQorCQkJfQ0KKwkJCVN0cmluZyBkaXJlY3RvcnlOYW1lID0gU0lNVUxBVElPTl9PVVRQVVRfRElSICsgRmlsZS5zZXBhcmF0b3IrdW5pcXVlSUQgKyBGaWxlLnNlcGFyYXRvcjsNCisJCQkNCisJCQlGaWxlIGRpciA9IG5ldyBGaWxlKGRpcmVjdG9yeU5hbWUpOw0KKwkJCWlmKCFkaXIuZXhpc3RzKCkpDQorCQkJCWRpci5ta2RpcnMoKTsNCisJCQkNCisJCQkNCisJCQljc3ZMb2dnZXIgPSBuZXcgQ3VzdG9tQ1NWTG9nZ2VyKGRpcmVjdG9yeU5hbWUsIHNpbXVsYXRpb24sIChJbnRlZ3JhdGlvbkRlY29yYXRvcikgZGVmYXVsdERlY29yYXRvcik7DQorDQorCQkJLy8gVGhpcyB3aWxsIHJlaW5pdCB0aGUgaW5mZWN0b3JzL2lub2MgZXRjIHRvIHRoZSBuZXcgdmFsdWVzIA0KKwkJCWJhc2VTY2VuYXJpby5yZXNldCgpOw0KKw0KKw0KKwkJCS8vUnVuIHRoZSBzaW11bGF0aW9uIHdpdGggdGhlIG5ldyBwYXJhbWV0ZXJzIGFuZCByZXR1cm4gdGhlIGVycm9yIHZhbHVlDQorLy8JCQlBY3RpdmF0b3IubG9nSW5mb3JtYXRpb24oIlJ1bm5pbmcgdGhlIHNpbXVsYXRpb24gd2l0aCB0aGUgZm9sbG93aW5nIHBhcmFtZXRlcnM6ICIpOw0KKy8vCQkJQWN0aXZhdG9yLmxvZ0luZm9ybWF0aW9uKCJcdFBhcmFtZXRlcnMgTmFtZXM6ICIgKyBBcnJheXMudG9TdHJpbmcocGFyYW1ldGVyTmFtZXMpKTsNCisvLwkJCUFjdGl2YXRvci5sb2dJbmZvcm1hdGlvbigiXHRQYXJhbWV0ZXJzIFZhbHVlczogIiArIEFycmF5cy50b1N0cmluZyhwYXJhbWV0ZXJzKSk7DQorCQkJZG91YmxlIGVycm9yID0gMC4wOw0KKwkJCUVycm9yUmVzdWx0IHJlc3VsdCA9IG51bGw7DQorCQkJdHJ5IHsNCisJCQkJZm9yKGRvdWJsZSB2YWw6cGFyYW1ldGVycykgcmVzdWx0V3JpdGVyLndyaXRlKHZhbCsiLCIpOw0KKwkJCQlFcnJvckFuYWx5c2lzQWxnb3JpdGhtRXZlbnQgbmV3RXZlbnQgPSBuZXcgRXJyb3JBbmFseXNpc0FsZ29yaXRobUV2ZW50KG51bGwsIEFMR09SSVRITV9TVEFUVVMuU1RBUlRJTkdfU0lNVUxBVElPTik7DQorCQkJCW5ld0V2ZW50LnBhcmFtZXRlck5hbWVzID0gcGFyYW1ldGVyTmFtZXM7DQorCQkJCW5ld0V2ZW50LnBhcmFtZXRlclZhbHVlcyA9IHBhcmFtZXRlcnM7DQorCQkJCSgoQWJzdHJhY3RFcnJvckFuYWx5c2lzQWxnb3JpdGhtKWFsZ29yaXRobSkuZmlyZUV2ZW50KA0KKwkJCQkJCW5ld0V2ZW50KTsNCisJCQkJcnVuU2ltdWxhdGlvbihzaW11bGF0aW9uKTsNCisJCQkNCisJCQkJcmVzdWx0ID0gIGdldEVycm9yVmFsdWUoc2ltdWxhdGlvbi5nZXRVbmlxdWVJRFN0cmluZygpKTsNCisJCQkNCisJCQkJbmV3RXZlbnQgPSBuZXcgRXJyb3JBbmFseXNpc0FsZ29yaXRobUV2ZW50KHJlc3VsdCwgQUxHT1JJVEhNX1NUQVRVUy5GSU5JU0hFRF9TSU1VTEFUSU9OKTsNCisJCQkJbmV3RXZlbnQucGFyYW1ldGVyTmFtZXMgPSBwYXJhbWV0ZXJOYW1lczsNCisJCQkJbmV3RXZlbnQucGFyYW1ldGVyVmFsdWVzID0gcGFyYW1ldGVyczsNCisJCQkJDQorCQkJCSgoQWJzdHJhY3RFcnJvckFuYWx5c2lzQWxnb3JpdGhtKWFsZ29yaXRobSkuZmlyZUV2ZW50KA0KKwkJCQkJCW5ld0V2ZW50KTsNCisJCQkJDQorCQkJCWVycm9yID0gcmVzdWx0LmdldEVycm9yKCk7DQorCQkJCQ0KKy8vCQkJCUFjdGl2YXRvci5sb2dJbmZvcm1hdGlvbigiIEVycm9yIGlzOiAiICsgZXJyb3IpOw0KKy8vCQkJCUFjdGl2YXRvci5sb2dJbmZvcm1hdGlvbigiIEVycm9yIGluIHZhbGlkYXRpb24gZGF0YSBzZXQgaXM6ICIgKyByZXN1bHQuZ2V0VmFsaWRhdGlvbkVycm9yKCkpOw0KKwkJCQlyZXN1bHRXcml0ZXIud3JpdGUoZXJyb3IrIiIpOw0KKwkJCQlyZXN1bHRXcml0ZXIud3JpdGUoTFMpOw0KKwkJCQlyZXN1bHRXcml0ZXIuZmx1c2goKTsNCisJCQkJDQorCQkJCS8vIFRPRE86IEdVSSBvdXRwdXQgaGVyZQ0KKwkJCQkNCisJCQkJDQorCQkgCQkNCisJCQl9IGNhdGNoKElPRXhjZXB0aW9uIGlvZSkgew0KKwkJCQlpb2UucHJpbnRTdGFja1RyYWNlKCk7DQorCQkJfQ0KKwkJCWNsZWFudXAoKTsNCisJCQkNCisJCQlyZXR1cm4gcmVzdWx0Ow0KKwkJfQ0KKwkJDQorCQlwcml2YXRlIEVycm9yUmVzdWx0IGdldEVycm9yVmFsdWUoU3RyaW5nIHNpbXVsYXRpb25VbmlxdWVJZCkgew0KKwkJCUVycm9yUmVzdWx0IHJlc3VsdCA9IG51bGw7DQorCQkJdHJ5IHsNCisJCQkJZmluYWwgRUxpc3Q8RGVjb3JhdG9yPiBkZWNzID0gYmFzZVNjZW5hcmlvLmdldENhbm9uaWNhbEdyYXBoKCkuZ2V0RGVjb3JhdG9ycygpOw0KKwkJCQkNCisJCQkJRGlzZWFzZU1vZGVsIGRlZmF1bHREZWNvcmF0b3IgPSBudWxsOw0KKwkJCQlmb3IgKERlY29yYXRvciBkZWNvcmF0b3IgOiBkZWNzKSB7DQorCQkJCQlpZiAoZGVjb3JhdG9yIGluc3RhbmNlb2YgRGlzZWFzZU1vZGVsKSB7DQorCQkJCQkJZGVmYXVsdERlY29yYXRvciA9IChEaXNlYXNlTW9kZWwpZGVjb3JhdG9yOyANCisJCQkJCQlicmVhazsNCisJCQkJCX0NCisJCQkJfQ0KKwkJCQkNCisJCQkJaWYgKGRlZmF1bHREZWNvcmF0b3IgIT0gbnVsbCkgew0KKwkJCQkJQ1NWc2NlbmFyaW9Mb2FkZXIgbG9hZGVyMiA9IG5ldyBDU1ZzY2VuYXJpb0xvYWRlcihTSU1VTEFUSU9OX09VVFBVVF9ESVIgKyBGaWxlLnNlcGFyYXRvciArIHNpbXVsYXRpb25VbmlxdWVJZCArIi8iK2RlZmF1bHREZWNvcmF0b3IuZ2V0RGlzZWFzZU5hbWUoKSsiLyIrZGVmYXVsdERlY29yYXRvci5nZXRQb3B1bGF0aW9uSWRlbnRpZmllcigpKTsNCisJCQkJCWludCBtYXhyZXMgPSBsb2FkZXIyLmdldE1heFJlc29sdXRpb24oKTsNCisJCQkJCVJlZmVyZW5jZVNjZW5hcmlvRGF0YU1hcEltcGwgZGF0YSA9IGxvYWRlcjIucGFyc2VBbGxGaWxlcyhtYXhyZXMpOw0KKwkJDQorCQkJCQlyZXN1bHQgPSBlcnJvckZ1bmN0aW9uLmNhbGN1bGF0ZUVycm9yKHJlZiwgZGF0YSk7DQorCQkJCX0NCisJCQl9IGNhdGNoIChTY2VuYXJpb0luaXRpYWxpemF0aW9uRXhjZXB0aW9uIGUpIHsNCisJCQkJZS5wcmludFN0YWNrVHJhY2UoKTsNCisJCQl9DQorCQkJcmV0dXJuIHJlc3VsdDsNCisJCX0NCisJCQ0KKwkJcHJpdmF0ZSB2b2lkIHJ1blNpbXVsYXRpb24oZmluYWwgSVNpbXVsYXRpb24gc2ltdWxhdGlvblRvUnVuKSB7DQorCQkJbG9uZyBiZWZvcmUgPSBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKTsNCisJCQlzaW11bGF0aW9uVG9SdW4ucnVuKCk7DQorCQkJdHJ5IHsNCisJCQkJc2ltdWxhdGlvblRvUnVuLmpvaW4oKTsNCisJCQl9IGNhdGNoIChJbnRlcnJ1cHRlZEV4Y2VwdGlvbiBlKSB7DQorCQkJCWUucHJpbnRTdGFja1RyYWNlKCk7DQorCQkJfQ0KKwkJCXNpbXVsYXRpb25Ub1J1bi5zdG9wKCk7CQkJDQorCQkJDQorCQkJbG9uZyBhZnRlciA9IFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpOw0KKy8vCQkJQWN0aXZhdG9yLmxvZ0luZm9ybWF0aW9uKCJJdCB0b29rICIgKyAoYWZ0ZXItYmVmb3JlKS8xMDAwICsgIiBzZWNvbmRzIHRvIHJ1biB0aGUgc2ltdWxhdGlvbiIpOw0KKwkJfQ0KKwkJDQorCQlwcml2YXRlIHZvaWQgY2xlYW51cCgpIHsNCisJCQlpZiAoY3N2TG9nZ2VyICE9IG51bGwpIHsNCisJCQkJY3N2TG9nZ2VyLmNsb3NlKCk7DQorCQkJCWNzdkxvZ2dlciA9IG51bGw7DQorCQkJfQ0KKwkJCXNpbU1nci5yZW1vdmVBY3RpdmVTaW11bGF0aW9uKHNpbXVsYXRpb24pOw0KKwkJCSgoU2ltdWxhdGlvbilzaW11bGF0aW9uKS5kZXN0cm95KCk7DQorCQkJc2ltdWxhdGlvbiA9IG51bGw7DQorCQkJQ3VzdG9tU2ltdWxhdGlvbk1hbmFnZXIucmVzZXRTaW11bGF0aW9uTWFuYWdlcigpOw0KKwkJfQ0KKwkJDQorCQlwcml2YXRlIElTaW11bGF0aW9uIGNyZWF0ZVNpbXVsYXRpb24oU2NlbmFyaW8gc2NlbmFyaW8pIHsNCisJCQlTaW11bGF0aW9uIHNpbXVsYXRpb24gPSAoU2ltdWxhdGlvbilzaW1NZ3IuY3JlYXRlU2ltdWxhdGlvbihzY2VuYXJpbywgbnVsbCk7DQorCQkJc2ltdWxhdGlvbi5zaW11bGF0aW9uU2xlZXAgPSBmYWxzZTsNCisJCQlyZXR1cm4gc2ltdWxhdGlvbjsNCisJCX0NCisJfQ0KK30NCisNCisNCmRpZmYgLS1naXQgYS9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQvc3JjL29yZy9lY2xpcHNlL3N0ZW0vYW5hbHlzaXMvYXV0b21hdGljZXhwZXJpbWVudC9TaW1wbGV4RnVuY3Rpb24uamF2YSBiL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuYXV0b21hdGljZXhwZXJpbWVudC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9hbmFseXNpcy9hdXRvbWF0aWNleHBlcmltZW50L1NpbXBsZXhGdW5jdGlvbi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEyNjQ2ZmIKLS0tIC9kZXYvbnVsbAorKysgYi9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQvc3JjL29yZy9lY2xpcHNlL3N0ZW0vYW5hbHlzaXMvYXV0b21hdGljZXhwZXJpbWVudC9TaW1wbGV4RnVuY3Rpb24uamF2YQpAQCAtMCwwICsxLDE5IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuYXV0b21hdGljZXhwZXJpbWVudDsNCisNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5FcnJvclJlc3VsdDsNCis7DQorDQorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisgKiBDb3B5cmlnaHQgKGMpIDIwMDkgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuDQorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscw0KKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMA0KKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0DQorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwNCisgKg0KKyAqIENvbnRyaWJ1dG9yczoNCisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uDQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQorDQorcHVibGljIGludGVyZmFjZSBTaW1wbGV4RnVuY3Rpb24gew0KKwlwdWJsaWMgRXJyb3JSZXN1bHQgZ2V0VmFsdWUoZG91YmxlW10gcGFyYW1ldGVycyk7IA0KK30NCmRpZmYgLS1naXQgYS9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQvc3JjL29yZy9lY2xpcHNlL3N0ZW0vYW5hbHlzaXMvYXV0b21hdGljZXhwZXJpbWVudC9leGVjdXRhYmxlL0F1dG9tYXRpY0V4cGVyaW1lbnRFeGVjdXRhYmxlQWRhcHRlckZhY3RvcnkuamF2YSBiL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuYXV0b21hdGljZXhwZXJpbWVudC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9hbmFseXNpcy9hdXRvbWF0aWNleHBlcmltZW50L2V4ZWN1dGFibGUvQXV0b21hdGljRXhwZXJpbWVudEV4ZWN1dGFibGVBZGFwdGVyRmFjdG9yeS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY4MDczNmUKLS0tIC9kZXYvbnVsbAorKysgYi9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQvc3JjL29yZy9lY2xpcHNlL3N0ZW0vYW5hbHlzaXMvYXV0b21hdGljZXhwZXJpbWVudC9leGVjdXRhYmxlL0F1dG9tYXRpY0V4cGVyaW1lbnRFeGVjdXRhYmxlQWRhcHRlckZhY3RvcnkuamF2YQpAQCAtMCwwICsxLDc2IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuYXV0b21hdGljZXhwZXJpbWVudC5leGVjdXRhYmxlOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA5IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LkFkYXB0ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5hdXRvbWF0aWNleHBlcmltZW50LkF1dG9tYXRpY0V4cGVyaW1lbnQ7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5hdXRvbWF0aWNleHBlcmltZW50LkF1dG9tYXRpY0V4cGVyaW1lbnRNYW5hZ2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuYXV0b21hdGljZXhwZXJpbWVudC5FcnJvckFuYWx5c2lzQWxnb3JpdGhtOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuYXV0b21hdGljZXhwZXJpbWVudC5PcHRpbWl6ZXJBbGdvcml0aG07CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5hdXRvbWF0aWNleHBlcmltZW50LnV0aWwuQXV0b21hdGljZXhwZXJpbWVudEFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uam9icy5hZGFwdGVycy5leGVjdXRhYmxlLmVtZi5FeGVjdXRhYmxlQWRhcHRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmpvYnMuYWRhcHRlcnMuZXhlY3V0YWJsZS5lbWYuRXhlY3V0YWJsZUFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uam9icy5leGVjdXRpb24uSUV4ZWN1dGFibGU7CisKKworLyoqCisgKiBUaGlzIGNsYXNzIGlzIGFuIHtAbGluayBFeGVjdXRhYmxlQWRhcHRlckZhY3Rvcnl9IHRoYXQgY3JlYXRlcyBhZGFwdGVycyB0aGF0CisgKiBhZGFwdCB7QGxpbmsgQXV0b21hdGljRXhwZXJpbWVudH1zIHRvIHtAbGluayBJRXhlY3V0YWJsZX1zLgorICovCitwdWJsaWMgY2xhc3MgQXV0b21hdGljRXhwZXJpbWVudEV4ZWN1dGFibGVBZGFwdGVyRmFjdG9yeSAKKwlleHRlbmRzCUF1dG9tYXRpY2V4cGVyaW1lbnRBZGFwdGVyRmFjdG9yeSAKKwlpbXBsZW1lbnRzIEV4ZWN1dGFibGVBZGFwdGVyRmFjdG9yeSAKK3sKKworCS8qKgorCSAqIERlZmF1bHQgQ29uc3RydWN0b3IKKwkgKi8KKwlwdWJsaWMgQXV0b21hdGljRXhwZXJpbWVudEV4ZWN1dGFibGVBZGFwdGVyRmFjdG9yeSgpIHsKKwkJc3VwZXIoKTsKKwkJRXhlY3V0YWJsZUFkYXB0ZXJGYWN0b3J5LklOU1RBTkNFLmFkZEFkYXB0ZXJGYWN0b3J5KHRoaXMpOworCX0KKwkKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuYXV0b21hdGljZXhwZXJpbWVudC51dGlsLkF1dG9tYXRpY2V4cGVyaW1lbnRBZGFwdGVyRmFjdG9yeSNjcmVhdGVBdXRvbWF0aWNFeHBlcmltZW50QWRhcHRlcigpCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlQXV0b21hdGljRXhwZXJpbWVudEFkYXB0ZXIoKSB7CisJCXJldHVybiBuZXcgQXV0b21hdGljRXhwZXJpbWVudEV4ZWN1dGFibGVBZGFwdGVyKCk7CisJfQorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQudXRpbC5BdXRvbWF0aWNleHBlcmltZW50QWRhcHRlckZhY3RvcnkjaXNGYWN0b3J5Rm9yVHlwZShqYXZhLmxhbmcuT2JqZWN0KQorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBib29sZWFuIGlzRmFjdG9yeUZvclR5cGUoZmluYWwgT2JqZWN0IHR5cGUpIHsKKwkJcmV0dXJuIHR5cGUgPT0gSUV4ZWN1dGFibGUuY2xhc3MgfHwgc3VwZXIuaXNGYWN0b3J5Rm9yVHlwZSh0eXBlKTsKKwl9CisJCisJLyoqCisJICogVGhpcyBjbGFzcyBhZGFwdHMgYW4ge0BsaW5rIEF1dG9tYXRpY0V4cGVyaW1lbnR9IHRvIGFuIHtAbGluayBJRXhlY3V0YWJsZX0uCisJICovCisJcHJvdGVjdGVkIHN0YXRpYyBjbGFzcyBBdXRvbWF0aWNFeHBlcmltZW50RXhlY3V0YWJsZUFkYXB0ZXIgZXh0ZW5kcworCQkJRXhlY3V0YWJsZUFkYXB0ZXIgaW1wbGVtZW50cyBBZGFwdGVyIHsKKworCQkvKioKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmpvYnMuYWRhcHRlcnMuZXhlY3V0YWJsZS5lbWYuRXhlY3V0YWJsZUFkYXB0ZXIjcnVuKCkKKwkJICovCisJCUBPdmVycmlkZQorCQlwdWJsaWMgdm9pZCBydW4oKSB7CisJCQlvcmcuZWNsaXBzZS5zdGVtLnVpLkFjdGl2YXRvci5zd2l0Y2hUb1BlcnNwZWN0aXZlKG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuYXV0b21hdGljZXhwZXJpbWVudC5wZXJzcGVjdGl2ZXMuQXV0b21hdGljRXhwZXJpbWVudC5JRF9TVEVNX0FVVE9NQVRJQ19FWFBFUklNRU5UX1BFUlNQRUNUSVZFKTsKKwkJCUF1dG9tYXRpY0V4cGVyaW1lbnRNYW5hZ2VyIG1hbmFnZXIgPSBBdXRvbWF0aWNFeHBlcmltZW50TWFuYWdlci5nZXRJbnN0YW5jZSgpOworCQkJT3B0aW1pemVyQWxnb3JpdGhtIGFsZyA9IChPcHRpbWl6ZXJBbGdvcml0aG0pZ2V0VGFyZ2V0KCk7CisJCQlFcnJvckFuYWx5c2lzQWxnb3JpdGhtIGFsZ29yaXRobSA9IG1hbmFnZXIuY3JlYXRlQWxnb3JpdGhtKGFsZyk7CisJCQltYW5hZ2VyLmV4ZWN1dGVBbGdvcml0aG0oYWxnb3JpdGhtLCAoQXV0b21hdGljRXhwZXJpbWVudClhbGcpOworCQl9CisJfQorfQpkaWZmIC0tZ2l0IGEvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5hdXRvbWF0aWNleHBlcmltZW50L3NyYy9vcmcvZWNsaXBzZS9zdGVtL2FuYWx5c2lzL2F1dG9tYXRpY2V4cGVyaW1lbnQvaW1wbC9BdXRvbWF0aWNFeHBlcmltZW50SW1wbC5qYXZhIGIvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5hdXRvbWF0aWNleHBlcmltZW50L3NyYy9vcmcvZWNsaXBzZS9zdGVtL2FuYWx5c2lzL2F1dG9tYXRpY2V4cGVyaW1lbnQvaW1wbC9BdXRvbWF0aWNFeHBlcmltZW50SW1wbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI4ZjEzMmIKLS0tIC9kZXYvbnVsbAorKysgYi9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQvc3JjL29yZy9lY2xpcHNlL3N0ZW0vYW5hbHlzaXMvYXV0b21hdGljZXhwZXJpbWVudC9pbXBsL0F1dG9tYXRpY0V4cGVyaW1lbnRJbXBsLmphdmEKQEAgLTAsMCArMSw2MjUgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5hdXRvbWF0aWNleHBlcmltZW50LmltcGw7DQorDQorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisgKiBDb3B5cmlnaHQgKGMpIDIwMDkgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuDQorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscw0KKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMA0KKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0DQorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwNCisgKg0KKyAqIENvbnRyaWJ1dG9yczoNCisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uDQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQorDQorDQoraW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOw0KKw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb247DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbkNoYWluOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuRUxpc3Q7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5JbnRlcm5hbEVPYmplY3Q7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5pbXBsLkVOb3RpZmljYXRpb25JbXBsOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUudXRpbC5FT2JqZWN0Q29udGFpbm1lbnRFTGlzdDsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnV0aWwuSW50ZXJuYWxFTGlzdDsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5FcnJvckZ1bmN0aW9uOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQuQXV0b21hdGljRXhwZXJpbWVudDsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5hdXRvbWF0aWNleHBlcmltZW50LkF1dG9tYXRpY2V4cGVyaW1lbnRQYWNrYWdlOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQuTW9kaWZpYWJsZVBhcmFtZXRlcjsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNjZW5hcmlvLlNjZW5hcmlvOw0KKw0KKw0KKy8qKg0KKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorICogQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPkF1dG9tYXRpYyBFeHBlcmltZW50PC9iPjwvZW0+Jy4NCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisgKiA8cD4NCisgKiBUaGUgZm9sbG93aW5nIGZlYXR1cmVzIGFyZSBpbXBsZW1lbnRlZDoNCisgKiA8dWw+DQorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuYXV0b21hdGljZXhwZXJpbWVudC5pbXBsLkF1dG9tYXRpY0V4cGVyaW1lbnRJbXBsI2dldEJhc2VTY2VuYXJpbyA8ZW0+QmFzZSBTY2VuYXJpbzwvZW0+fTwvbGk+DQorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuYXV0b21hdGljZXhwZXJpbWVudC5pbXBsLkF1dG9tYXRpY0V4cGVyaW1lbnRJbXBsI2dldFBhcmFtZXRlcnMgPGVtPlBhcmFtZXRlcnM8L2VtPn08L2xpPg0KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQuaW1wbC5BdXRvbWF0aWNFeHBlcmltZW50SW1wbCNnZXRFcnJvckFuYWx5c2lzQWxnb3JpdGhtIDxlbT5FcnJvciBBbmFseXNpcyBBbGdvcml0aG08L2VtPn08L2xpPg0KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQuaW1wbC5BdXRvbWF0aWNFeHBlcmltZW50SW1wbCNnZXRFcnJvckZ1bmN0aW9uIDxlbT5FcnJvciBGdW5jdGlvbjwvZW0+fTwvbGk+DQorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuYXV0b21hdGljZXhwZXJpbWVudC5pbXBsLkF1dG9tYXRpY0V4cGVyaW1lbnRJbXBsI2dldFRvbGVyYW5jZSA8ZW0+VG9sZXJhbmNlPC9lbT59PC9saT4NCisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5hdXRvbWF0aWNleHBlcmltZW50LmltcGwuQXV0b21hdGljRXhwZXJpbWVudEltcGwjZ2V0UmVmZXJhbmNlRGF0YURpciA8ZW0+UmVmZXJhbmNlIERhdGEgRGlyPC9lbT59PC9saT4NCisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5hdXRvbWF0aWNleHBlcmltZW50LmltcGwuQXV0b21hdGljRXhwZXJpbWVudEltcGwjZ2V0TWF4aW11bU51bWJlck9mSXRlcmF0aW9ucyA8ZW0+TWF4aW11bSBOdW1iZXIgT2YgSXRlcmF0aW9uczwvZW0+fTwvbGk+DQorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuYXV0b21hdGljZXhwZXJpbWVudC5pbXBsLkF1dG9tYXRpY0V4cGVyaW1lbnRJbXBsI2lzUmVJbml0IDxlbT5SZSBJbml0PC9lbT59PC9saT4NCisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5hdXRvbWF0aWNleHBlcmltZW50LmltcGwuQXV0b21hdGljRXhwZXJpbWVudEltcGwjZ2V0RXJyb3JGdW5jIDxlbT5FcnJvciBGdW5jPC9lbT59PC9saT4NCisgKiA8L3VsPg0KKyAqIDwvcD4NCisgKg0KKyAqIEBnZW5lcmF0ZWQNCisgKi8NCitwdWJsaWMgY2xhc3MgQXV0b21hdGljRXhwZXJpbWVudEltcGwgZXh0ZW5kcyBPcHRpbWl6ZXJBbGdvcml0aG1JbXBsIGltcGxlbWVudHMgQXV0b21hdGljRXhwZXJpbWVudCB7DQorCS8qKg0KKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRCYXNlU2NlbmFyaW8oKSA8ZW0+QmFzZSBTY2VuYXJpbzwvZW0+fScgcmVmZXJlbmNlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHNlZSAjZ2V0QmFzZVNjZW5hcmlvKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJcHJvdGVjdGVkIFNjZW5hcmlvIGJhc2VTY2VuYXJpbzsNCisNCisJLyoqDQorCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldFBhcmFtZXRlcnMoKSA8ZW0+UGFyYW1ldGVyczwvZW0+fScgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3QuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAc2VlICNnZXRQYXJhbWV0ZXJzKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJcHJvdGVjdGVkIEVMaXN0PE1vZGlmaWFibGVQYXJhbWV0ZXI+IHBhcmFtZXRlcnM7DQorDQorCS8qKg0KKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0RXJyb3JBbmFseXNpc0FsZ29yaXRobSgpIDxlbT5FcnJvciBBbmFseXNpcyBBbGdvcml0aG08L2VtPn0nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBzZWUgI2dldEVycm9yQW5hbHlzaXNBbGdvcml0aG0oKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqIEBvcmRlcmVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIFN0cmluZyBFUlJPUl9BTkFMWVNJU19BTEdPUklUSE1fRURFRkFVTFQgPSBudWxsOw0KKw0KKwkvKioNCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0RXJyb3JBbmFseXNpc0FsZ29yaXRobSgpIDxlbT5FcnJvciBBbmFseXNpcyBBbGdvcml0aG08L2VtPn0nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBzZWUgI2dldEVycm9yQW5hbHlzaXNBbGdvcml0aG0oKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqIEBvcmRlcmVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgU3RyaW5nIGVycm9yQW5hbHlzaXNBbGdvcml0aG0gPSBFUlJPUl9BTkFMWVNJU19BTEdPUklUSE1fRURFRkFVTFQ7DQorDQorCS8qKg0KKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0RXJyb3JGdW5jdGlvbigpIDxlbT5FcnJvciBGdW5jdGlvbjwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHNlZSAjZ2V0RXJyb3JGdW5jdGlvbigpDQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgU3RyaW5nIEVSUk9SX0ZVTkNUSU9OX0VERUZBVUxUID0gbnVsbDsNCisNCisJLyoqDQorCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldEVycm9yRnVuY3Rpb24oKSA8ZW0+RXJyb3IgRnVuY3Rpb248L2VtPn0nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBzZWUgI2dldEVycm9yRnVuY3Rpb24oKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqIEBvcmRlcmVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgU3RyaW5nIGVycm9yRnVuY3Rpb24gPSBFUlJPUl9GVU5DVElPTl9FREVGQVVMVDsNCisNCisJLyoqDQorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRUb2xlcmFuY2UoKSA8ZW0+VG9sZXJhbmNlPC9lbT59JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAc2VlICNnZXRUb2xlcmFuY2UoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqIEBvcmRlcmVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIGRvdWJsZSBUT0xFUkFOQ0VfRURFRkFVTFQgPSAwLjA7DQorDQorCS8qKg0KKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRUb2xlcmFuY2UoKSA8ZW0+VG9sZXJhbmNlPC9lbT59JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAc2VlICNnZXRUb2xlcmFuY2UoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqIEBvcmRlcmVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgZG91YmxlIHRvbGVyYW5jZSA9IFRPTEVSQU5DRV9FREVGQVVMVDsNCisNCisJLyoqDQorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRSZWZlcmFuY2VEYXRhRGlyKCkgPGVtPlJlZmVyYW5jZSBEYXRhIERpcjwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHNlZSAjZ2V0UmVmZXJhbmNlRGF0YURpcigpDQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgU3RyaW5nIFJFRkVSQU5DRV9EQVRBX0RJUl9FREVGQVVMVCA9IG51bGw7DQorDQorCS8qKg0KKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRSZWZlcmFuY2VEYXRhRGlyKCkgPGVtPlJlZmVyYW5jZSBEYXRhIERpcjwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHNlZSAjZ2V0UmVmZXJhbmNlRGF0YURpcigpDQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCXByb3RlY3RlZCBTdHJpbmcgcmVmZXJhbmNlRGF0YURpciA9IFJFRkVSQU5DRV9EQVRBX0RJUl9FREVGQVVMVDsNCisNCisJLyoqDQorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRNYXhpbXVtTnVtYmVyT2ZJdGVyYXRpb25zKCkgPGVtPk1heGltdW0gTnVtYmVyIE9mIEl0ZXJhdGlvbnM8L2VtPn0nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBzZWUgI2dldE1heGltdW1OdW1iZXJPZkl0ZXJhdGlvbnMoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqIEBvcmRlcmVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIGxvbmcgTUFYSU1VTV9OVU1CRVJfT0ZfSVRFUkFUSU9OU19FREVGQVVMVCA9IDBMOw0KKw0KKwkvKioNCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0TWF4aW11bU51bWJlck9mSXRlcmF0aW9ucygpIDxlbT5NYXhpbXVtIE51bWJlciBPZiBJdGVyYXRpb25zPC9lbT59JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAc2VlICNnZXRNYXhpbXVtTnVtYmVyT2ZJdGVyYXRpb25zKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJcHJvdGVjdGVkIGxvbmcgbWF4aW11bU51bWJlck9mSXRlcmF0aW9ucyA9IE1BWElNVU1fTlVNQkVSX09GX0lURVJBVElPTlNfRURFRkFVTFQ7DQorDQorCS8qKg0KKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjaXNSZUluaXQoKSA8ZW0+UmUgSW5pdDwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHNlZSAjaXNSZUluaXQoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqIEBvcmRlcmVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIGJvb2xlYW4gUkVfSU5JVF9FREVGQVVMVCA9IGZhbHNlOw0KKw0KKwkvKioNCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjaXNSZUluaXQoKSA8ZW0+UmUgSW5pdDwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHNlZSAjaXNSZUluaXQoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqIEBvcmRlcmVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgYm9vbGVhbiByZUluaXQgPSBSRV9JTklUX0VERUZBVUxUOw0KKw0KKwkvKioNCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0RXJyb3JGdW5jKCkgPGVtPkVycm9yIEZ1bmM8L2VtPn0nIGNvbnRhaW5tZW50IHJlZmVyZW5jZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBzZWUgI2dldEVycm9yRnVuYygpDQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCXByb3RlY3RlZCBFcnJvckZ1bmN0aW9uIGVycm9yRnVuYzsNCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkIE5PVA0KKwkgKi8NCisJcHVibGljIEF1dG9tYXRpY0V4cGVyaW1lbnRJbXBsKCkgew0KKwkJc3VwZXIoKTsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCUBPdmVycmlkZQ0KKwlwcm90ZWN0ZWQgRUNsYXNzIGVTdGF0aWNDbGFzcygpIHsNCisJCXJldHVybiBBdXRvbWF0aWNleHBlcmltZW50UGFja2FnZS5MaXRlcmFscy5BVVRPTUFUSUNfRVhQRVJJTUVOVDsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBTY2VuYXJpbyBnZXRCYXNlU2NlbmFyaW8oKSB7DQorCQlpZiAoYmFzZVNjZW5hcmlvICE9IG51bGwgJiYgYmFzZVNjZW5hcmlvLmVJc1Byb3h5KCkpIHsNCisJCQlJbnRlcm5hbEVPYmplY3Qgb2xkQmFzZVNjZW5hcmlvID0gKEludGVybmFsRU9iamVjdCliYXNlU2NlbmFyaW87DQorCQkJYmFzZVNjZW5hcmlvID0gKFNjZW5hcmlvKWVSZXNvbHZlUHJveHkob2xkQmFzZVNjZW5hcmlvKTsNCisJCQlpZiAoYmFzZVNjZW5hcmlvICE9IG9sZEJhc2VTY2VuYXJpbykgew0KKwkJCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpDQorCQkJCQllTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uUkVTT0xWRSwgQXV0b21hdGljZXhwZXJpbWVudFBhY2thZ2UuQVVUT01BVElDX0VYUEVSSU1FTlRfX0JBU0VfU0NFTkFSSU8sIG9sZEJhc2VTY2VuYXJpbywgYmFzZVNjZW5hcmlvKSk7DQorCQkJfQ0KKwkJfQ0KKwkJcmV0dXJuIGJhc2VTY2VuYXJpbzsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBTY2VuYXJpbyBiYXNpY0dldEJhc2VTY2VuYXJpbygpIHsNCisJCXJldHVybiBiYXNlU2NlbmFyaW87DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgdm9pZCBzZXRCYXNlU2NlbmFyaW8oU2NlbmFyaW8gbmV3QmFzZVNjZW5hcmlvKSB7DQorCQlTY2VuYXJpbyBvbGRCYXNlU2NlbmFyaW8gPSBiYXNlU2NlbmFyaW87DQorCQliYXNlU2NlbmFyaW8gPSBuZXdCYXNlU2NlbmFyaW87DQorCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpDQorCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgQXV0b21hdGljZXhwZXJpbWVudFBhY2thZ2UuQVVUT01BVElDX0VYUEVSSU1FTlRfX0JBU0VfU0NFTkFSSU8sIG9sZEJhc2VTY2VuYXJpbywgYmFzZVNjZW5hcmlvKSk7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgRUxpc3Q8TW9kaWZpYWJsZVBhcmFtZXRlcj4gZ2V0UGFyYW1ldGVycygpIHsNCisJCWlmIChwYXJhbWV0ZXJzID09IG51bGwpIHsNCisJCQlwYXJhbWV0ZXJzID0gbmV3IEVPYmplY3RDb250YWlubWVudEVMaXN0PE1vZGlmaWFibGVQYXJhbWV0ZXI+KE1vZGlmaWFibGVQYXJhbWV0ZXIuY2xhc3MsIHRoaXMsIEF1dG9tYXRpY2V4cGVyaW1lbnRQYWNrYWdlLkFVVE9NQVRJQ19FWFBFUklNRU5UX19QQVJBTUVURVJTKTsNCisJCX0NCisJCXJldHVybiBwYXJhbWV0ZXJzOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIFN0cmluZyBnZXRFcnJvckFuYWx5c2lzQWxnb3JpdGhtKCkgew0KKwkJcmV0dXJuIGVycm9yQW5hbHlzaXNBbGdvcml0aG07DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgdm9pZCBzZXRFcnJvckFuYWx5c2lzQWxnb3JpdGhtKFN0cmluZyBuZXdFcnJvckFuYWx5c2lzQWxnb3JpdGhtKSB7DQorCQlTdHJpbmcgb2xkRXJyb3JBbmFseXNpc0FsZ29yaXRobSA9IGVycm9yQW5hbHlzaXNBbGdvcml0aG07DQorCQllcnJvckFuYWx5c2lzQWxnb3JpdGhtID0gbmV3RXJyb3JBbmFseXNpc0FsZ29yaXRobTsNCisJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkNCisJCQllTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBBdXRvbWF0aWNleHBlcmltZW50UGFja2FnZS5BVVRPTUFUSUNfRVhQRVJJTUVOVF9fRVJST1JfQU5BTFlTSVNfQUxHT1JJVEhNLCBvbGRFcnJvckFuYWx5c2lzQWxnb3JpdGhtLCBlcnJvckFuYWx5c2lzQWxnb3JpdGhtKSk7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgU3RyaW5nIGdldEVycm9yRnVuY3Rpb24oKSB7DQorCQlyZXR1cm4gZXJyb3JGdW5jdGlvbjsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyB2b2lkIHNldEVycm9yRnVuY3Rpb24oU3RyaW5nIG5ld0Vycm9yRnVuY3Rpb24pIHsNCisJCVN0cmluZyBvbGRFcnJvckZ1bmN0aW9uID0gZXJyb3JGdW5jdGlvbjsNCisJCWVycm9yRnVuY3Rpb24gPSBuZXdFcnJvckZ1bmN0aW9uOw0KKwkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQ0KKwkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIEF1dG9tYXRpY2V4cGVyaW1lbnRQYWNrYWdlLkFVVE9NQVRJQ19FWFBFUklNRU5UX19FUlJPUl9GVU5DVElPTiwgb2xkRXJyb3JGdW5jdGlvbiwgZXJyb3JGdW5jdGlvbikpOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIGRvdWJsZSBnZXRUb2xlcmFuY2UoKSB7DQorCQlyZXR1cm4gdG9sZXJhbmNlOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIHZvaWQgc2V0VG9sZXJhbmNlKGRvdWJsZSBuZXdUb2xlcmFuY2UpIHsNCisJCWRvdWJsZSBvbGRUb2xlcmFuY2UgPSB0b2xlcmFuY2U7DQorCQl0b2xlcmFuY2UgPSBuZXdUb2xlcmFuY2U7DQorCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpDQorCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgQXV0b21hdGljZXhwZXJpbWVudFBhY2thZ2UuQVVUT01BVElDX0VYUEVSSU1FTlRfX1RPTEVSQU5DRSwgb2xkVG9sZXJhbmNlLCB0b2xlcmFuY2UpKTsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBTdHJpbmcgZ2V0UmVmZXJhbmNlRGF0YURpcigpIHsNCisJCXJldHVybiByZWZlcmFuY2VEYXRhRGlyOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIHZvaWQgc2V0UmVmZXJhbmNlRGF0YURpcihTdHJpbmcgbmV3UmVmZXJhbmNlRGF0YURpcikgew0KKwkJU3RyaW5nIG9sZFJlZmVyYW5jZURhdGFEaXIgPSByZWZlcmFuY2VEYXRhRGlyOw0KKwkJcmVmZXJhbmNlRGF0YURpciA9IG5ld1JlZmVyYW5jZURhdGFEaXI7DQorCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpDQorCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgQXV0b21hdGljZXhwZXJpbWVudFBhY2thZ2UuQVVUT01BVElDX0VYUEVSSU1FTlRfX1JFRkVSQU5DRV9EQVRBX0RJUiwgb2xkUmVmZXJhbmNlRGF0YURpciwgcmVmZXJhbmNlRGF0YURpcikpOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIGxvbmcgZ2V0TWF4aW11bU51bWJlck9mSXRlcmF0aW9ucygpIHsNCisJCXJldHVybiBtYXhpbXVtTnVtYmVyT2ZJdGVyYXRpb25zOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIHZvaWQgc2V0TWF4aW11bU51bWJlck9mSXRlcmF0aW9ucyhsb25nIG5ld01heGltdW1OdW1iZXJPZkl0ZXJhdGlvbnMpIHsNCisJCWxvbmcgb2xkTWF4aW11bU51bWJlck9mSXRlcmF0aW9ucyA9IG1heGltdW1OdW1iZXJPZkl0ZXJhdGlvbnM7DQorCQltYXhpbXVtTnVtYmVyT2ZJdGVyYXRpb25zID0gbmV3TWF4aW11bU51bWJlck9mSXRlcmF0aW9uczsNCisJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkNCisJCQllTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBBdXRvbWF0aWNleHBlcmltZW50UGFja2FnZS5BVVRPTUFUSUNfRVhQRVJJTUVOVF9fTUFYSU1VTV9OVU1CRVJfT0ZfSVRFUkFUSU9OUywgb2xkTWF4aW11bU51bWJlck9mSXRlcmF0aW9ucywgbWF4aW11bU51bWJlck9mSXRlcmF0aW9ucykpOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIGJvb2xlYW4gaXNSZUluaXQoKSB7DQorCQlyZXR1cm4gcmVJbml0Ow0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIHZvaWQgc2V0UmVJbml0KGJvb2xlYW4gbmV3UmVJbml0KSB7DQorCQlib29sZWFuIG9sZFJlSW5pdCA9IHJlSW5pdDsNCisJCXJlSW5pdCA9IG5ld1JlSW5pdDsNCisJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkNCisJCQllTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBBdXRvbWF0aWNleHBlcmltZW50UGFja2FnZS5BVVRPTUFUSUNfRVhQRVJJTUVOVF9fUkVfSU5JVCwgb2xkUmVJbml0LCByZUluaXQpKTsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBFcnJvckZ1bmN0aW9uIGdldEVycm9yRnVuYygpIHsNCisJCXJldHVybiBlcnJvckZ1bmM7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgTm90aWZpY2F0aW9uQ2hhaW4gYmFzaWNTZXRFcnJvckZ1bmMoRXJyb3JGdW5jdGlvbiBuZXdFcnJvckZ1bmMsIE5vdGlmaWNhdGlvbkNoYWluIG1zZ3MpIHsNCisJCUVycm9yRnVuY3Rpb24gb2xkRXJyb3JGdW5jID0gZXJyb3JGdW5jOw0KKwkJZXJyb3JGdW5jID0gbmV3RXJyb3JGdW5jOw0KKwkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKSB7DQorCQkJRU5vdGlmaWNhdGlvbkltcGwgbm90aWZpY2F0aW9uID0gbmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIEF1dG9tYXRpY2V4cGVyaW1lbnRQYWNrYWdlLkFVVE9NQVRJQ19FWFBFUklNRU5UX19FUlJPUl9GVU5DLCBvbGRFcnJvckZ1bmMsIG5ld0Vycm9yRnVuYyk7DQorCQkJaWYgKG1zZ3MgPT0gbnVsbCkgbXNncyA9IG5vdGlmaWNhdGlvbjsgZWxzZSBtc2dzLmFkZChub3RpZmljYXRpb24pOw0KKwkJfQ0KKwkJcmV0dXJuIG1zZ3M7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgdm9pZCBzZXRFcnJvckZ1bmMoRXJyb3JGdW5jdGlvbiBuZXdFcnJvckZ1bmMpIHsNCisJCWlmIChuZXdFcnJvckZ1bmMgIT0gZXJyb3JGdW5jKSB7DQorCQkJTm90aWZpY2F0aW9uQ2hhaW4gbXNncyA9IG51bGw7DQorCQkJaWYgKGVycm9yRnVuYyAhPSBudWxsKQ0KKwkJCQltc2dzID0gKChJbnRlcm5hbEVPYmplY3QpZXJyb3JGdW5jKS5lSW52ZXJzZVJlbW92ZSh0aGlzLCBFT1BQT1NJVEVfRkVBVFVSRV9CQVNFIC0gQXV0b21hdGljZXhwZXJpbWVudFBhY2thZ2UuQVVUT01BVElDX0VYUEVSSU1FTlRfX0VSUk9SX0ZVTkMsIG51bGwsIG1zZ3MpOw0KKwkJCWlmIChuZXdFcnJvckZ1bmMgIT0gbnVsbCkNCisJCQkJbXNncyA9ICgoSW50ZXJuYWxFT2JqZWN0KW5ld0Vycm9yRnVuYykuZUludmVyc2VBZGQodGhpcywgRU9QUE9TSVRFX0ZFQVRVUkVfQkFTRSAtIEF1dG9tYXRpY2V4cGVyaW1lbnRQYWNrYWdlLkFVVE9NQVRJQ19FWFBFUklNRU5UX19FUlJPUl9GVU5DLCBudWxsLCBtc2dzKTsNCisJCQltc2dzID0gYmFzaWNTZXRFcnJvckZ1bmMobmV3RXJyb3JGdW5jLCBtc2dzKTsNCisJCQlpZiAobXNncyAhPSBudWxsKSBtc2dzLmRpc3BhdGNoKCk7DQorCQl9DQorCQllbHNlIGlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkNCisJCQllTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBBdXRvbWF0aWNleHBlcmltZW50UGFja2FnZS5BVVRPTUFUSUNfRVhQRVJJTUVOVF9fRVJST1JfRlVOQywgbmV3RXJyb3JGdW5jLCBuZXdFcnJvckZ1bmMpKTsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCUBPdmVycmlkZQ0KKwlwdWJsaWMgTm90aWZpY2F0aW9uQ2hhaW4gZUludmVyc2VSZW1vdmUoSW50ZXJuYWxFT2JqZWN0IG90aGVyRW5kLCBpbnQgZmVhdHVyZUlELCBOb3RpZmljYXRpb25DaGFpbiBtc2dzKSB7DQorCQlzd2l0Y2ggKGZlYXR1cmVJRCkgew0KKwkJCWNhc2UgQXV0b21hdGljZXhwZXJpbWVudFBhY2thZ2UuQVVUT01BVElDX0VYUEVSSU1FTlRfX1BBUkFNRVRFUlM6DQorCQkJCXJldHVybiAoKEludGVybmFsRUxpc3Q8Pz4pZ2V0UGFyYW1ldGVycygpKS5iYXNpY1JlbW92ZShvdGhlckVuZCwgbXNncyk7DQorCQkJY2FzZSBBdXRvbWF0aWNleHBlcmltZW50UGFja2FnZS5BVVRPTUFUSUNfRVhQRVJJTUVOVF9fRVJST1JfRlVOQzoNCisJCQkJcmV0dXJuIGJhc2ljU2V0RXJyb3JGdW5jKG51bGwsIG1zZ3MpOw0KKwkJfQ0KKwkJcmV0dXJuIHN1cGVyLmVJbnZlcnNlUmVtb3ZlKG90aGVyRW5kLCBmZWF0dXJlSUQsIG1zZ3MpOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJQE92ZXJyaWRlDQorCXB1YmxpYyBPYmplY3QgZUdldChpbnQgZmVhdHVyZUlELCBib29sZWFuIHJlc29sdmUsIGJvb2xlYW4gY29yZVR5cGUpIHsNCisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7DQorCQkJY2FzZSBBdXRvbWF0aWNleHBlcmltZW50UGFja2FnZS5BVVRPTUFUSUNfRVhQRVJJTUVOVF9fQkFTRV9TQ0VOQVJJTzoNCisJCQkJaWYgKHJlc29sdmUpIHJldHVybiBnZXRCYXNlU2NlbmFyaW8oKTsNCisJCQkJcmV0dXJuIGJhc2ljR2V0QmFzZVNjZW5hcmlvKCk7DQorCQkJY2FzZSBBdXRvbWF0aWNleHBlcmltZW50UGFja2FnZS5BVVRPTUFUSUNfRVhQRVJJTUVOVF9fUEFSQU1FVEVSUzoNCisJCQkJcmV0dXJuIGdldFBhcmFtZXRlcnMoKTsNCisJCQljYXNlIEF1dG9tYXRpY2V4cGVyaW1lbnRQYWNrYWdlLkFVVE9NQVRJQ19FWFBFUklNRU5UX19FUlJPUl9BTkFMWVNJU19BTEdPUklUSE06DQorCQkJCXJldHVybiBnZXRFcnJvckFuYWx5c2lzQWxnb3JpdGhtKCk7DQorCQkJY2FzZSBBdXRvbWF0aWNleHBlcmltZW50UGFja2FnZS5BVVRPTUFUSUNfRVhQRVJJTUVOVF9fRVJST1JfRlVOQ1RJT046DQorCQkJCXJldHVybiBnZXRFcnJvckZ1bmN0aW9uKCk7DQorCQkJY2FzZSBBdXRvbWF0aWNleHBlcmltZW50UGFja2FnZS5BVVRPTUFUSUNfRVhQRVJJTUVOVF9fVE9MRVJBTkNFOg0KKwkJCQlyZXR1cm4gZ2V0VG9sZXJhbmNlKCk7DQorCQkJY2FzZSBBdXRvbWF0aWNleHBlcmltZW50UGFja2FnZS5BVVRPTUFUSUNfRVhQRVJJTUVOVF9fUkVGRVJBTkNFX0RBVEFfRElSOg0KKwkJCQlyZXR1cm4gZ2V0UmVmZXJhbmNlRGF0YURpcigpOw0KKwkJCWNhc2UgQXV0b21hdGljZXhwZXJpbWVudFBhY2thZ2UuQVVUT01BVElDX0VYUEVSSU1FTlRfX01BWElNVU1fTlVNQkVSX09GX0lURVJBVElPTlM6DQorCQkJCXJldHVybiBnZXRNYXhpbXVtTnVtYmVyT2ZJdGVyYXRpb25zKCk7DQorCQkJY2FzZSBBdXRvbWF0aWNleHBlcmltZW50UGFja2FnZS5BVVRPTUFUSUNfRVhQRVJJTUVOVF9fUkVfSU5JVDoNCisJCQkJcmV0dXJuIGlzUmVJbml0KCk7DQorCQkJY2FzZSBBdXRvbWF0aWNleHBlcmltZW50UGFja2FnZS5BVVRPTUFUSUNfRVhQRVJJTUVOVF9fRVJST1JfRlVOQzoNCisJCQkJcmV0dXJuIGdldEVycm9yRnVuYygpOw0KKwkJfQ0KKwkJcmV0dXJuIHN1cGVyLmVHZXQoZmVhdHVyZUlELCByZXNvbHZlLCBjb3JlVHlwZSk7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlAU3VwcHJlc3NXYXJuaW5ncygidW5jaGVja2VkIikNCisJQE92ZXJyaWRlDQorCXB1YmxpYyB2b2lkIGVTZXQoaW50IGZlYXR1cmVJRCwgT2JqZWN0IG5ld1ZhbHVlKSB7DQorCQlzd2l0Y2ggKGZlYXR1cmVJRCkgew0KKwkJCWNhc2UgQXV0b21hdGljZXhwZXJpbWVudFBhY2thZ2UuQVVUT01BVElDX0VYUEVSSU1FTlRfX0JBU0VfU0NFTkFSSU86DQorCQkJCXNldEJhc2VTY2VuYXJpbygoU2NlbmFyaW8pbmV3VmFsdWUpOw0KKwkJCQlyZXR1cm47DQorCQkJY2FzZSBBdXRvbWF0aWNleHBlcmltZW50UGFja2FnZS5BVVRPTUFUSUNfRVhQRVJJTUVOVF9fUEFSQU1FVEVSUzoNCisJCQkJZ2V0UGFyYW1ldGVycygpLmNsZWFyKCk7DQorCQkJCWdldFBhcmFtZXRlcnMoKS5hZGRBbGwoKENvbGxlY3Rpb248PyBleHRlbmRzIE1vZGlmaWFibGVQYXJhbWV0ZXI+KW5ld1ZhbHVlKTsNCisJCQkJcmV0dXJuOw0KKwkJCWNhc2UgQXV0b21hdGljZXhwZXJpbWVudFBhY2thZ2UuQVVUT01BVElDX0VYUEVSSU1FTlRfX0VSUk9SX0FOQUxZU0lTX0FMR09SSVRITToNCisJCQkJc2V0RXJyb3JBbmFseXNpc0FsZ29yaXRobSgoU3RyaW5nKW5ld1ZhbHVlKTsNCisJCQkJcmV0dXJuOw0KKwkJCWNhc2UgQXV0b21hdGljZXhwZXJpbWVudFBhY2thZ2UuQVVUT01BVElDX0VYUEVSSU1FTlRfX0VSUk9SX0ZVTkNUSU9OOg0KKwkJCQlzZXRFcnJvckZ1bmN0aW9uKChTdHJpbmcpbmV3VmFsdWUpOw0KKwkJCQlyZXR1cm47DQorCQkJY2FzZSBBdXRvbWF0aWNleHBlcmltZW50UGFja2FnZS5BVVRPTUFUSUNfRVhQRVJJTUVOVF9fVE9MRVJBTkNFOg0KKwkJCQlzZXRUb2xlcmFuY2UoKERvdWJsZSluZXdWYWx1ZSk7DQorCQkJCXJldHVybjsNCisJCQljYXNlIEF1dG9tYXRpY2V4cGVyaW1lbnRQYWNrYWdlLkFVVE9NQVRJQ19FWFBFUklNRU5UX19SRUZFUkFOQ0VfREFUQV9ESVI6DQorCQkJCXNldFJlZmVyYW5jZURhdGFEaXIoKFN0cmluZyluZXdWYWx1ZSk7DQorCQkJCXJldHVybjsNCisJCQljYXNlIEF1dG9tYXRpY2V4cGVyaW1lbnRQYWNrYWdlLkFVVE9NQVRJQ19FWFBFUklNRU5UX19NQVhJTVVNX05VTUJFUl9PRl9JVEVSQVRJT05TOg0KKwkJCQlzZXRNYXhpbXVtTnVtYmVyT2ZJdGVyYXRpb25zKChMb25nKW5ld1ZhbHVlKTsNCisJCQkJcmV0dXJuOw0KKwkJCWNhc2UgQXV0b21hdGljZXhwZXJpbWVudFBhY2thZ2UuQVVUT01BVElDX0VYUEVSSU1FTlRfX1JFX0lOSVQ6DQorCQkJCXNldFJlSW5pdCgoQm9vbGVhbiluZXdWYWx1ZSk7DQorCQkJCXJldHVybjsNCisJCQljYXNlIEF1dG9tYXRpY2V4cGVyaW1lbnRQYWNrYWdlLkFVVE9NQVRJQ19FWFBFUklNRU5UX19FUlJPUl9GVU5DOg0KKwkJCQlzZXRFcnJvckZ1bmMoKEVycm9yRnVuY3Rpb24pbmV3VmFsdWUpOw0KKwkJCQlyZXR1cm47DQorCQl9DQorCQlzdXBlci5lU2V0KGZlYXR1cmVJRCwgbmV3VmFsdWUpOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJQE92ZXJyaWRlDQorCXB1YmxpYyB2b2lkIGVVbnNldChpbnQgZmVhdHVyZUlEKSB7DQorCQlzd2l0Y2ggKGZlYXR1cmVJRCkgew0KKwkJCWNhc2UgQXV0b21hdGljZXhwZXJpbWVudFBhY2thZ2UuQVVUT01BVElDX0VYUEVSSU1FTlRfX0JBU0VfU0NFTkFSSU86DQorCQkJCXNldEJhc2VTY2VuYXJpbygoU2NlbmFyaW8pbnVsbCk7DQorCQkJCXJldHVybjsNCisJCQljYXNlIEF1dG9tYXRpY2V4cGVyaW1lbnRQYWNrYWdlLkFVVE9NQVRJQ19FWFBFUklNRU5UX19QQVJBTUVURVJTOg0KKwkJCQlnZXRQYXJhbWV0ZXJzKCkuY2xlYXIoKTsNCisJCQkJcmV0dXJuOw0KKwkJCWNhc2UgQXV0b21hdGljZXhwZXJpbWVudFBhY2thZ2UuQVVUT01BVElDX0VYUEVSSU1FTlRfX0VSUk9SX0FOQUxZU0lTX0FMR09SSVRITToNCisJCQkJc2V0RXJyb3JBbmFseXNpc0FsZ29yaXRobShFUlJPUl9BTkFMWVNJU19BTEdPUklUSE1fRURFRkFVTFQpOw0KKwkJCQlyZXR1cm47DQorCQkJY2FzZSBBdXRvbWF0aWNleHBlcmltZW50UGFja2FnZS5BVVRPTUFUSUNfRVhQRVJJTUVOVF9fRVJST1JfRlVOQ1RJT046DQorCQkJCXNldEVycm9yRnVuY3Rpb24oRVJST1JfRlVOQ1RJT05fRURFRkFVTFQpOw0KKwkJCQlyZXR1cm47DQorCQkJY2FzZSBBdXRvbWF0aWNleHBlcmltZW50UGFja2FnZS5BVVRPTUFUSUNfRVhQRVJJTUVOVF9fVE9MRVJBTkNFOg0KKwkJCQlzZXRUb2xlcmFuY2UoVE9MRVJBTkNFX0VERUZBVUxUKTsNCisJCQkJcmV0dXJuOw0KKwkJCWNhc2UgQXV0b21hdGljZXhwZXJpbWVudFBhY2thZ2UuQVVUT01BVElDX0VYUEVSSU1FTlRfX1JFRkVSQU5DRV9EQVRBX0RJUjoNCisJCQkJc2V0UmVmZXJhbmNlRGF0YURpcihSRUZFUkFOQ0VfREFUQV9ESVJfRURFRkFVTFQpOw0KKwkJCQlyZXR1cm47DQorCQkJY2FzZSBBdXRvbWF0aWNleHBlcmltZW50UGFja2FnZS5BVVRPTUFUSUNfRVhQRVJJTUVOVF9fTUFYSU1VTV9OVU1CRVJfT0ZfSVRFUkFUSU9OUzoNCisJCQkJc2V0TWF4aW11bU51bWJlck9mSXRlcmF0aW9ucyhNQVhJTVVNX05VTUJFUl9PRl9JVEVSQVRJT05TX0VERUZBVUxUKTsNCisJCQkJcmV0dXJuOw0KKwkJCWNhc2UgQXV0b21hdGljZXhwZXJpbWVudFBhY2thZ2UuQVVUT01BVElDX0VYUEVSSU1FTlRfX1JFX0lOSVQ6DQorCQkJCXNldFJlSW5pdChSRV9JTklUX0VERUZBVUxUKTsNCisJCQkJcmV0dXJuOw0KKwkJCWNhc2UgQXV0b21hdGljZXhwZXJpbWVudFBhY2thZ2UuQVVUT01BVElDX0VYUEVSSU1FTlRfX0VSUk9SX0ZVTkM6DQorCQkJCXNldEVycm9yRnVuYygoRXJyb3JGdW5jdGlvbiludWxsKTsNCisJCQkJcmV0dXJuOw0KKwkJfQ0KKwkJc3VwZXIuZVVuc2V0KGZlYXR1cmVJRCk7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlAT3ZlcnJpZGUNCisJcHVibGljIGJvb2xlYW4gZUlzU2V0KGludCBmZWF0dXJlSUQpIHsNCisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7DQorCQkJY2FzZSBBdXRvbWF0aWNleHBlcmltZW50UGFja2FnZS5BVVRPTUFUSUNfRVhQRVJJTUVOVF9fQkFTRV9TQ0VOQVJJTzoNCisJCQkJcmV0dXJuIGJhc2VTY2VuYXJpbyAhPSBudWxsOw0KKwkJCWNhc2UgQXV0b21hdGljZXhwZXJpbWVudFBhY2thZ2UuQVVUT01BVElDX0VYUEVSSU1FTlRfX1BBUkFNRVRFUlM6DQorCQkJCXJldHVybiBwYXJhbWV0ZXJzICE9IG51bGwgJiYgIXBhcmFtZXRlcnMuaXNFbXB0eSgpOw0KKwkJCWNhc2UgQXV0b21hdGljZXhwZXJpbWVudFBhY2thZ2UuQVVUT01BVElDX0VYUEVSSU1FTlRfX0VSUk9SX0FOQUxZU0lTX0FMR09SSVRITToNCisJCQkJcmV0dXJuIEVSUk9SX0FOQUxZU0lTX0FMR09SSVRITV9FREVGQVVMVCA9PSBudWxsID8gZXJyb3JBbmFseXNpc0FsZ29yaXRobSAhPSBudWxsIDogIUVSUk9SX0FOQUxZU0lTX0FMR09SSVRITV9FREVGQVVMVC5lcXVhbHMoZXJyb3JBbmFseXNpc0FsZ29yaXRobSk7DQorCQkJY2FzZSBBdXRvbWF0aWNleHBlcmltZW50UGFja2FnZS5BVVRPTUFUSUNfRVhQRVJJTUVOVF9fRVJST1JfRlVOQ1RJT046DQorCQkJCXJldHVybiBFUlJPUl9GVU5DVElPTl9FREVGQVVMVCA9PSBudWxsID8gZXJyb3JGdW5jdGlvbiAhPSBudWxsIDogIUVSUk9SX0ZVTkNUSU9OX0VERUZBVUxULmVxdWFscyhlcnJvckZ1bmN0aW9uKTsNCisJCQljYXNlIEF1dG9tYXRpY2V4cGVyaW1lbnRQYWNrYWdlLkFVVE9NQVRJQ19FWFBFUklNRU5UX19UT0xFUkFOQ0U6DQorCQkJCXJldHVybiB0b2xlcmFuY2UgIT0gVE9MRVJBTkNFX0VERUZBVUxUOw0KKwkJCWNhc2UgQXV0b21hdGljZXhwZXJpbWVudFBhY2thZ2UuQVVUT01BVElDX0VYUEVSSU1FTlRfX1JFRkVSQU5DRV9EQVRBX0RJUjoNCisJCQkJcmV0dXJuIFJFRkVSQU5DRV9EQVRBX0RJUl9FREVGQVVMVCA9PSBudWxsID8gcmVmZXJhbmNlRGF0YURpciAhPSBudWxsIDogIVJFRkVSQU5DRV9EQVRBX0RJUl9FREVGQVVMVC5lcXVhbHMocmVmZXJhbmNlRGF0YURpcik7DQorCQkJY2FzZSBBdXRvbWF0aWNleHBlcmltZW50UGFja2FnZS5BVVRPTUFUSUNfRVhQRVJJTUVOVF9fTUFYSU1VTV9OVU1CRVJfT0ZfSVRFUkFUSU9OUzoNCisJCQkJcmV0dXJuIG1heGltdW1OdW1iZXJPZkl0ZXJhdGlvbnMgIT0gTUFYSU1VTV9OVU1CRVJfT0ZfSVRFUkFUSU9OU19FREVGQVVMVDsNCisJCQljYXNlIEF1dG9tYXRpY2V4cGVyaW1lbnRQYWNrYWdlLkFVVE9NQVRJQ19FWFBFUklNRU5UX19SRV9JTklUOg0KKwkJCQlyZXR1cm4gcmVJbml0ICE9IFJFX0lOSVRfRURFRkFVTFQ7DQorCQkJY2FzZSBBdXRvbWF0aWNleHBlcmltZW50UGFja2FnZS5BVVRPTUFUSUNfRVhQRVJJTUVOVF9fRVJST1JfRlVOQzoNCisJCQkJcmV0dXJuIGVycm9yRnVuYyAhPSBudWxsOw0KKwkJfQ0KKwkJcmV0dXJuIHN1cGVyLmVJc1NldChmZWF0dXJlSUQpOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJQE92ZXJyaWRlDQorCXB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKSB7DQorCQlpZiAoZUlzUHJveHkoKSkgcmV0dXJuIHN1cGVyLnRvU3RyaW5nKCk7DQorDQorCQlTdHJpbmdCdWZmZXIgcmVzdWx0ID0gbmV3IFN0cmluZ0J1ZmZlcihzdXBlci50b1N0cmluZygpKTsNCisJCXJlc3VsdC5hcHBlbmQoIiAoZXJyb3JBbmFseXNpc0FsZ29yaXRobTogIik7DQorCQlyZXN1bHQuYXBwZW5kKGVycm9yQW5hbHlzaXNBbGdvcml0aG0pOw0KKwkJcmVzdWx0LmFwcGVuZCgiLCBlcnJvckZ1bmN0aW9uOiAiKTsNCisJCXJlc3VsdC5hcHBlbmQoZXJyb3JGdW5jdGlvbik7DQorCQlyZXN1bHQuYXBwZW5kKCIsIHRvbGVyYW5jZTogIik7DQorCQlyZXN1bHQuYXBwZW5kKHRvbGVyYW5jZSk7DQorCQlyZXN1bHQuYXBwZW5kKCIsIHJlZmVyYW5jZURhdGFEaXI6ICIpOw0KKwkJcmVzdWx0LmFwcGVuZChyZWZlcmFuY2VEYXRhRGlyKTsNCisJCXJlc3VsdC5hcHBlbmQoIiwgbWF4aW11bU51bWJlck9mSXRlcmF0aW9uczogIik7DQorCQlyZXN1bHQuYXBwZW5kKG1heGltdW1OdW1iZXJPZkl0ZXJhdGlvbnMpOw0KKwkJcmVzdWx0LmFwcGVuZCgiLCByZUluaXQ6ICIpOw0KKwkJcmVzdWx0LmFwcGVuZChyZUluaXQpOw0KKwkJcmVzdWx0LmFwcGVuZCgnKScpOw0KKwkJcmV0dXJuIHJlc3VsdC50b1N0cmluZygpOw0KKwl9DQorDQorfSAvL0F1dG9tYXRpY0V4cGVyaW1lbnRJbXBsDQpkaWZmIC0tZ2l0IGEvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5hdXRvbWF0aWNleHBlcmltZW50L3NyYy9vcmcvZWNsaXBzZS9zdGVtL2FuYWx5c2lzL2F1dG9tYXRpY2V4cGVyaW1lbnQvaW1wbC9BdXRvbWF0aWNleHBlcmltZW50RmFjdG9yeUltcGwuamF2YSBiL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuYXV0b21hdGljZXhwZXJpbWVudC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9hbmFseXNpcy9hdXRvbWF0aWNleHBlcmltZW50L2ltcGwvQXV0b21hdGljZXhwZXJpbWVudEZhY3RvcnlJbXBsLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjllZTJjYQotLS0gL2Rldi9udWxsCisrKyBiL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuYXV0b21hdGljZXhwZXJpbWVudC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9hbmFseXNpcy9hdXRvbWF0aWNleHBlcmltZW50L2ltcGwvQXV0b21hdGljZXhwZXJpbWVudEZhY3RvcnlJbXBsLmphdmEKQEAgLTAsMCArMSwxMjggQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5hdXRvbWF0aWNleHBlcmltZW50LmltcGw7DQorDQorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisgKiBDb3B5cmlnaHQgKGMpIDIwMDkgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuDQorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscw0KKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMA0KKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0DQorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwNCisgKg0KKyAqIENvbnRyaWJ1dG9yczoNCisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uDQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQorDQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0Ow0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRVBhY2thZ2U7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5pbXBsLkVGYWN0b3J5SW1wbDsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnBsdWdpbi5FY29yZVBsdWdpbjsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5hdXRvbWF0aWNleHBlcmltZW50LkF1dG9tYXRpY0V4cGVyaW1lbnQ7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuYXV0b21hdGljZXhwZXJpbWVudC5BdXRvbWF0aWNleHBlcmltZW50RmFjdG9yeTsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5hdXRvbWF0aWNleHBlcmltZW50LkF1dG9tYXRpY2V4cGVyaW1lbnRQYWNrYWdlOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQuTW9kaWZpYWJsZVBhcmFtZXRlcjsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5hdXRvbWF0aWNleHBlcmltZW50Lk9wdGltaXplckFsZ29yaXRobTsNCisNCisNCisvKioNCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKyAqIEFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBtb2RlbCA8Yj5GYWN0b3J5PC9iPi4NCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisgKiBAZ2VuZXJhdGVkDQorICovDQorcHVibGljIGNsYXNzIEF1dG9tYXRpY2V4cGVyaW1lbnRGYWN0b3J5SW1wbCBleHRlbmRzIEVGYWN0b3J5SW1wbCBpbXBsZW1lbnRzIEF1dG9tYXRpY2V4cGVyaW1lbnRGYWN0b3J5IHsNCisJLyoqDQorCSAqIENyZWF0ZXMgdGhlIGRlZmF1bHQgZmFjdG9yeSBpbXBsZW1lbnRhdGlvbi4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBzdGF0aWMgQXV0b21hdGljZXhwZXJpbWVudEZhY3RvcnkgaW5pdCgpIHsNCisJCXRyeSB7DQorCQkJQXV0b21hdGljZXhwZXJpbWVudEZhY3RvcnkgdGhlQXV0b21hdGljZXhwZXJpbWVudEZhY3RvcnkgPSAoQXV0b21hdGljZXhwZXJpbWVudEZhY3RvcnkpRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RUZhY3RvcnkoImh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2F1dG9tYXRpY2V4cGVyaW1lbnQuZWNvcmUiKTsgDQorCQkJaWYgKHRoZUF1dG9tYXRpY2V4cGVyaW1lbnRGYWN0b3J5ICE9IG51bGwpIHsNCisJCQkJcmV0dXJuIHRoZUF1dG9tYXRpY2V4cGVyaW1lbnRGYWN0b3J5Ow0KKwkJCX0NCisJCX0NCisJCWNhdGNoIChFeGNlcHRpb24gZXhjZXB0aW9uKSB7DQorCQkJRWNvcmVQbHVnaW4uSU5TVEFOQ0UubG9nKGV4Y2VwdGlvbik7DQorCQl9DQorCQlyZXR1cm4gbmV3IEF1dG9tYXRpY2V4cGVyaW1lbnRGYWN0b3J5SW1wbCgpOw0KKwl9DQorDQorCS8qKg0KKwkgKiBDcmVhdGVzIGFuIGluc3RhbmNlIG9mIHRoZSBmYWN0b3J5Lg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIEF1dG9tYXRpY2V4cGVyaW1lbnRGYWN0b3J5SW1wbCgpIHsNCisJCXN1cGVyKCk7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlAT3ZlcnJpZGUNCisJcHVibGljIEVPYmplY3QgY3JlYXRlKEVDbGFzcyBlQ2xhc3MpIHsNCisJCXN3aXRjaCAoZUNsYXNzLmdldENsYXNzaWZpZXJJRCgpKSB7DQorCQkJY2FzZSBBdXRvbWF0aWNleHBlcmltZW50UGFja2FnZS5BVVRPTUFUSUNfRVhQRVJJTUVOVDogcmV0dXJuIGNyZWF0ZUF1dG9tYXRpY0V4cGVyaW1lbnQoKTsNCisJCQljYXNlIEF1dG9tYXRpY2V4cGVyaW1lbnRQYWNrYWdlLk1PRElGSUFCTEVfUEFSQU1FVEVSOiByZXR1cm4gY3JlYXRlTW9kaWZpYWJsZVBhcmFtZXRlcigpOw0KKwkJCWNhc2UgQXV0b21hdGljZXhwZXJpbWVudFBhY2thZ2UuT1BUSU1JWkVSX0FMR09SSVRITTogcmV0dXJuIGNyZWF0ZU9wdGltaXplckFsZ29yaXRobSgpOw0KKwkJCWRlZmF1bHQ6DQorCQkJCXRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIlRoZSBjbGFzcyAnIiArIGVDbGFzcy5nZXROYW1lKCkgKyAiJyBpcyBub3QgYSB2YWxpZCBjbGFzc2lmaWVyIik7DQorCQl9DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgQXV0b21hdGljRXhwZXJpbWVudCBjcmVhdGVBdXRvbWF0aWNFeHBlcmltZW50KCkgew0KKwkJQXV0b21hdGljRXhwZXJpbWVudEltcGwgYXV0b21hdGljRXhwZXJpbWVudCA9IG5ldyBBdXRvbWF0aWNFeHBlcmltZW50SW1wbCgpOw0KKwkJcmV0dXJuIGF1dG9tYXRpY0V4cGVyaW1lbnQ7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgTW9kaWZpYWJsZVBhcmFtZXRlciBjcmVhdGVNb2RpZmlhYmxlUGFyYW1ldGVyKCkgew0KKwkJTW9kaWZpYWJsZVBhcmFtZXRlckltcGwgbW9kaWZpYWJsZVBhcmFtZXRlciA9IG5ldyBNb2RpZmlhYmxlUGFyYW1ldGVySW1wbCgpOw0KKwkJcmV0dXJuIG1vZGlmaWFibGVQYXJhbWV0ZXI7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgT3B0aW1pemVyQWxnb3JpdGhtIGNyZWF0ZU9wdGltaXplckFsZ29yaXRobSgpIHsNCisJCU9wdGltaXplckFsZ29yaXRobUltcGwgb3B0aW1pemVyQWxnb3JpdGhtID0gbmV3IE9wdGltaXplckFsZ29yaXRobUltcGwoKTsNCisJCXJldHVybiBvcHRpbWl6ZXJBbGdvcml0aG07DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgQXV0b21hdGljZXhwZXJpbWVudFBhY2thZ2UgZ2V0QXV0b21hdGljZXhwZXJpbWVudFBhY2thZ2UoKSB7DQorCQlyZXR1cm4gKEF1dG9tYXRpY2V4cGVyaW1lbnRQYWNrYWdlKWdldEVQYWNrYWdlKCk7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZGVwcmVjYXRlZA0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlARGVwcmVjYXRlZA0KKwlwdWJsaWMgc3RhdGljIEF1dG9tYXRpY2V4cGVyaW1lbnRQYWNrYWdlIGdldFBhY2thZ2UoKSB7DQorCQlyZXR1cm4gQXV0b21hdGljZXhwZXJpbWVudFBhY2thZ2UuZUlOU1RBTkNFOw0KKwl9DQorDQorfSAvL0F1dG9tYXRpY2V4cGVyaW1lbnRGYWN0b3J5SW1wbA0KZGlmZiAtLWdpdCBhL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuYXV0b21hdGljZXhwZXJpbWVudC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9hbmFseXNpcy9hdXRvbWF0aWNleHBlcmltZW50L2ltcGwvQXV0b21hdGljZXhwZXJpbWVudFBhY2thZ2VJbXBsLmphdmEgYi9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQvc3JjL29yZy9lY2xpcHNlL3N0ZW0vYW5hbHlzaXMvYXV0b21hdGljZXhwZXJpbWVudC9pbXBsL0F1dG9tYXRpY2V4cGVyaW1lbnRQYWNrYWdlSW1wbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVlODkwODUKLS0tIC9kZXYvbnVsbAorKysgYi9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQvc3JjL29yZy9lY2xpcHNlL3N0ZW0vYW5hbHlzaXMvYXV0b21hdGljZXhwZXJpbWVudC9pbXBsL0F1dG9tYXRpY2V4cGVyaW1lbnRQYWNrYWdlSW1wbC5qYXZhCkBAIC0wLDAgKzEsNDIwIEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuYXV0b21hdGljZXhwZXJpbWVudC5pbXBsOw0KKw0KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorICogQ29weXJpZ2h0IChjKSAyMDA5IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLg0KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMNCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjANCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdA0KKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sDQorICoNCisgKiBDb250cmlidXRvcnM6DQorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbg0KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KKw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUF0dHJpYnV0ZTsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzczsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVQYWNrYWdlOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRVJlZmVyZW5jZTsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVjb3JlUGFja2FnZTsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLmltcGwuRVBhY2thZ2VJbXBsOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLkFuYWx5c2lzUGFja2FnZTsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5hdXRvbWF0aWNleHBlcmltZW50LkF1dG9tYXRpY0V4cGVyaW1lbnQ7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuYXV0b21hdGljZXhwZXJpbWVudC5BdXRvbWF0aWNleHBlcmltZW50RmFjdG9yeTsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5hdXRvbWF0aWNleHBlcmltZW50LkF1dG9tYXRpY2V4cGVyaW1lbnRQYWNrYWdlOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQuTW9kaWZpYWJsZVBhcmFtZXRlcjsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5hdXRvbWF0aWNleHBlcmltZW50Lk9wdGltaXplckFsZ29yaXRobTsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5Db21tb25QYWNrYWdlOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguR3JhcGhQYWNrYWdlOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuTW9kZWxQYWNrYWdlOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuTW9kaWZpZXJQYWNrYWdlOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2NlbmFyaW8uU2NlbmFyaW9QYWNrYWdlOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2VxdWVuY2VyLlNlcXVlbmNlclBhY2thZ2U7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zb2x2ZXIuU29sdmVyUGFja2FnZTsNCisNCisNCisvKioNCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKyAqIEFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBtb2RlbCA8Yj5QYWNrYWdlPC9iPi4NCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisgKiBAZ2VuZXJhdGVkDQorICovDQorcHVibGljIGNsYXNzIEF1dG9tYXRpY2V4cGVyaW1lbnRQYWNrYWdlSW1wbCBleHRlbmRzIEVQYWNrYWdlSW1wbCBpbXBsZW1lbnRzIEF1dG9tYXRpY2V4cGVyaW1lbnRQYWNrYWdlIHsNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcml2YXRlIEVDbGFzcyBhdXRvbWF0aWNFeHBlcmltZW50RUNsYXNzID0gbnVsbDsNCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcml2YXRlIEVDbGFzcyBtb2RpZmlhYmxlUGFyYW1ldGVyRUNsYXNzID0gbnVsbDsNCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcml2YXRlIEVDbGFzcyBvcHRpbWl6ZXJBbGdvcml0aG1FQ2xhc3MgPSBudWxsOw0KKw0KKwkvKioNCisJICogQ3JlYXRlcyBhbiBpbnN0YW5jZSBvZiB0aGUgbW9kZWwgPGI+UGFja2FnZTwvYj4sIHJlZ2lzdGVyZWQgd2l0aA0KKwkgKiB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVQYWNrYWdlLlJlZ2lzdHJ5IEVQYWNrYWdlLlJlZ2lzdHJ5fSBieSB0aGUgcGFja2FnZQ0KKwkgKiBwYWNrYWdlIFVSSSB2YWx1ZS4NCisJICogPHA+Tm90ZTogdGhlIGNvcnJlY3Qgd2F5IHRvIGNyZWF0ZSB0aGUgcGFja2FnZSBpcyB2aWEgdGhlIHN0YXRpYw0KKwkgKiBmYWN0b3J5IG1ldGhvZCB7QGxpbmsgI2luaXQgaW5pdCgpfSwgd2hpY2ggYWxzbyBwZXJmb3Jtcw0KKwkgKiBpbml0aWFsaXphdGlvbiBvZiB0aGUgcGFja2FnZSwgb3IgcmV0dXJucyB0aGUgcmVnaXN0ZXJlZCBwYWNrYWdlLA0KKwkgKiBpZiBvbmUgYWxyZWFkeSBleGlzdHMuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FUGFja2FnZS5SZWdpc3RyeQ0KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuYXV0b21hdGljZXhwZXJpbWVudC5BdXRvbWF0aWNleHBlcmltZW50UGFja2FnZSNlTlNfVVJJDQorCSAqIEBzZWUgI2luaXQoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcml2YXRlIEF1dG9tYXRpY2V4cGVyaW1lbnRQYWNrYWdlSW1wbCgpIHsNCisJCXN1cGVyKGVOU19VUkksIEF1dG9tYXRpY2V4cGVyaW1lbnRGYWN0b3J5LmVJTlNUQU5DRSk7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcml2YXRlIHN0YXRpYyBib29sZWFuIGlzSW5pdGVkID0gZmFsc2U7DQorDQorCS8qKg0KKwkgKiBDcmVhdGVzLCByZWdpc3RlcnMsIGFuZCBpbml0aWFsaXplcyB0aGUgPGI+UGFja2FnZTwvYj4gZm9yIHRoaXMgbW9kZWwsIGFuZCBmb3IgYW55IG90aGVycyB1cG9uIHdoaWNoIGl0IGRlcGVuZHMuDQorCSAqIA0KKwkgKiA8cD5UaGlzIG1ldGhvZCBpcyB1c2VkIHRvIGluaXRpYWxpemUge0BsaW5rIEF1dG9tYXRpY2V4cGVyaW1lbnRQYWNrYWdlI2VJTlNUQU5DRX0gd2hlbiB0aGF0IGZpZWxkIGlzIGFjY2Vzc2VkLg0KKwkgKiBDbGllbnRzIHNob3VsZCBub3QgaW52b2tlIGl0IGRpcmVjdGx5LiBJbnN0ZWFkLCB0aGV5IHNob3VsZCBzaW1wbHkgYWNjZXNzIHRoYXQgZmllbGQgdG8gb2J0YWluIHRoZSBwYWNrYWdlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHNlZSAjZU5TX1VSSQ0KKwkgKiBAc2VlICNjcmVhdGVQYWNrYWdlQ29udGVudHMoKQ0KKwkgKiBAc2VlICNpbml0aWFsaXplUGFja2FnZUNvbnRlbnRzKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIHN0YXRpYyBBdXRvbWF0aWNleHBlcmltZW50UGFja2FnZSBpbml0KCkgew0KKwkJaWYgKGlzSW5pdGVkKSByZXR1cm4gKEF1dG9tYXRpY2V4cGVyaW1lbnRQYWNrYWdlKUVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVQYWNrYWdlKEF1dG9tYXRpY2V4cGVyaW1lbnRQYWNrYWdlLmVOU19VUkkpOw0KKw0KKwkJLy8gT2J0YWluIG9yIGNyZWF0ZSBhbmQgcmVnaXN0ZXIgcGFja2FnZQ0KKwkJQXV0b21hdGljZXhwZXJpbWVudFBhY2thZ2VJbXBsIHRoZUF1dG9tYXRpY2V4cGVyaW1lbnRQYWNrYWdlID0gKEF1dG9tYXRpY2V4cGVyaW1lbnRQYWNrYWdlSW1wbCkoRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0KGVOU19VUkkpIGluc3RhbmNlb2YgQXV0b21hdGljZXhwZXJpbWVudFBhY2thZ2VJbXBsID8gRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0KGVOU19VUkkpIDogbmV3IEF1dG9tYXRpY2V4cGVyaW1lbnRQYWNrYWdlSW1wbCgpKTsNCisNCisJCWlzSW5pdGVkID0gdHJ1ZTsNCisNCisJCS8vIEluaXRpYWxpemUgc2ltcGxlIGRlcGVuZGVuY2llcw0KKwkJQW5hbHlzaXNQYWNrYWdlLmVJTlNUQU5DRS5lQ2xhc3MoKTsNCisJCUNvbW1vblBhY2thZ2UuZUlOU1RBTkNFLmVDbGFzcygpOw0KKwkJR3JhcGhQYWNrYWdlLmVJTlNUQU5DRS5lQ2xhc3MoKTsNCisJCU1vZGVsUGFja2FnZS5lSU5TVEFOQ0UuZUNsYXNzKCk7DQorCQlNb2RpZmllclBhY2thZ2UuZUlOU1RBTkNFLmVDbGFzcygpOw0KKwkJU2NlbmFyaW9QYWNrYWdlLmVJTlNUQU5DRS5lQ2xhc3MoKTsNCisJCVNlcXVlbmNlclBhY2thZ2UuZUlOU1RBTkNFLmVDbGFzcygpOw0KKwkJU29sdmVyUGFja2FnZS5lSU5TVEFOQ0UuZUNsYXNzKCk7DQorDQorCQkvLyBDcmVhdGUgcGFja2FnZSBtZXRhLWRhdGEgb2JqZWN0cw0KKwkJdGhlQXV0b21hdGljZXhwZXJpbWVudFBhY2thZ2UuY3JlYXRlUGFja2FnZUNvbnRlbnRzKCk7DQorDQorCQkvLyBJbml0aWFsaXplIGNyZWF0ZWQgbWV0YS1kYXRhDQorCQl0aGVBdXRvbWF0aWNleHBlcmltZW50UGFja2FnZS5pbml0aWFsaXplUGFja2FnZUNvbnRlbnRzKCk7DQorDQorCQkvLyBNYXJrIG1ldGEtZGF0YSB0byBpbmRpY2F0ZSBpdCBjYW4ndCBiZSBjaGFuZ2VkDQorCQl0aGVBdXRvbWF0aWNleHBlcmltZW50UGFja2FnZS5mcmVlemUoKTsNCisNCisgIA0KKwkJLy8gVXBkYXRlIHRoZSByZWdpc3RyeSBhbmQgcmV0dXJuIHRoZSBwYWNrYWdlDQorCQlFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5wdXQoQXV0b21hdGljZXhwZXJpbWVudFBhY2thZ2UuZU5TX1VSSSwgdGhlQXV0b21hdGljZXhwZXJpbWVudFBhY2thZ2UpOw0KKwkJcmV0dXJuIHRoZUF1dG9tYXRpY2V4cGVyaW1lbnRQYWNrYWdlOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIEVDbGFzcyBnZXRBdXRvbWF0aWNFeHBlcmltZW50KCkgew0KKwkJcmV0dXJuIGF1dG9tYXRpY0V4cGVyaW1lbnRFQ2xhc3M7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgRVJlZmVyZW5jZSBnZXRBdXRvbWF0aWNFeHBlcmltZW50X0Jhc2VTY2VuYXJpbygpIHsNCisJCXJldHVybiAoRVJlZmVyZW5jZSlhdXRvbWF0aWNFeHBlcmltZW50RUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMCk7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgRVJlZmVyZW5jZSBnZXRBdXRvbWF0aWNFeHBlcmltZW50X1BhcmFtZXRlcnMoKSB7DQorCQlyZXR1cm4gKEVSZWZlcmVuY2UpYXV0b21hdGljRXhwZXJpbWVudEVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDEpOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIEVBdHRyaWJ1dGUgZ2V0QXV0b21hdGljRXhwZXJpbWVudF9FcnJvckFuYWx5c2lzQWxnb3JpdGhtKCkgew0KKwkJcmV0dXJuIChFQXR0cmlidXRlKWF1dG9tYXRpY0V4cGVyaW1lbnRFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgyKTsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBFQXR0cmlidXRlIGdldEF1dG9tYXRpY0V4cGVyaW1lbnRfRXJyb3JGdW5jdGlvbigpIHsNCisJCXJldHVybiAoRUF0dHJpYnV0ZSlhdXRvbWF0aWNFeHBlcmltZW50RUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMyk7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgRUF0dHJpYnV0ZSBnZXRBdXRvbWF0aWNFeHBlcmltZW50X1RvbGVyYW5jZSgpIHsNCisJCXJldHVybiAoRUF0dHJpYnV0ZSlhdXRvbWF0aWNFeHBlcmltZW50RUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoNCk7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgRUF0dHJpYnV0ZSBnZXRBdXRvbWF0aWNFeHBlcmltZW50X1JlZmVyYW5jZURhdGFEaXIoKSB7DQorCQlyZXR1cm4gKEVBdHRyaWJ1dGUpYXV0b21hdGljRXhwZXJpbWVudEVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDUpOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIEVBdHRyaWJ1dGUgZ2V0QXV0b21hdGljRXhwZXJpbWVudF9NYXhpbXVtTnVtYmVyT2ZJdGVyYXRpb25zKCkgew0KKwkJcmV0dXJuIChFQXR0cmlidXRlKWF1dG9tYXRpY0V4cGVyaW1lbnRFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCg2KTsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBFQXR0cmlidXRlIGdldEF1dG9tYXRpY0V4cGVyaW1lbnRfUmVJbml0KCkgew0KKwkJcmV0dXJuIChFQXR0cmlidXRlKWF1dG9tYXRpY0V4cGVyaW1lbnRFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCg3KTsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBFUmVmZXJlbmNlIGdldEF1dG9tYXRpY0V4cGVyaW1lbnRfRXJyb3JGdW5jKCkgew0KKwkJcmV0dXJuIChFUmVmZXJlbmNlKWF1dG9tYXRpY0V4cGVyaW1lbnRFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCg4KTsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBFQ2xhc3MgZ2V0TW9kaWZpYWJsZVBhcmFtZXRlcigpIHsNCisJCXJldHVybiBtb2RpZmlhYmxlUGFyYW1ldGVyRUNsYXNzOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIEVBdHRyaWJ1dGUgZ2V0TW9kaWZpYWJsZVBhcmFtZXRlcl9Jbml0aWFsVmFsdWUoKSB7DQorCQlyZXR1cm4gKEVBdHRyaWJ1dGUpbW9kaWZpYWJsZVBhcmFtZXRlckVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDApOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIEVSZWZlcmVuY2UgZ2V0TW9kaWZpYWJsZVBhcmFtZXRlcl9GZWF0dXJlKCkgew0KKwkJcmV0dXJuIChFUmVmZXJlbmNlKW1vZGlmaWFibGVQYXJhbWV0ZXJFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgxKTsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBFQXR0cmlidXRlIGdldE1vZGlmaWFibGVQYXJhbWV0ZXJfU3RlcCgpIHsNCisJCXJldHVybiAoRUF0dHJpYnV0ZSltb2RpZmlhYmxlUGFyYW1ldGVyRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMik7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgRUF0dHJpYnV0ZSBnZXRNb2RpZmlhYmxlUGFyYW1ldGVyX0ZlYXR1cmVOYW1lKCkgew0KKwkJcmV0dXJuIChFQXR0cmlidXRlKW1vZGlmaWFibGVQYXJhbWV0ZXJFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgzKTsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBFQXR0cmlidXRlIGdldE1vZGlmaWFibGVQYXJhbWV0ZXJfTG93ZXJCb3VuZCgpIHsNCisJCXJldHVybiAoRUF0dHJpYnV0ZSltb2RpZmlhYmxlUGFyYW1ldGVyRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoNCk7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgRUF0dHJpYnV0ZSBnZXRNb2RpZmlhYmxlUGFyYW1ldGVyX1VwcGVyQm91bmQoKSB7DQorCQlyZXR1cm4gKEVBdHRyaWJ1dGUpbW9kaWZpYWJsZVBhcmFtZXRlckVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDUpOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIEVBdHRyaWJ1dGUgZ2V0TW9kaWZpYWJsZVBhcmFtZXRlcl9UYXJnZXRVUkkoKSB7DQorCQlyZXR1cm4gKEVBdHRyaWJ1dGUpbW9kaWZpYWJsZVBhcmFtZXRlckVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDYpOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIEVDbGFzcyBnZXRPcHRpbWl6ZXJBbGdvcml0aG0oKSB7DQorCQlyZXR1cm4gb3B0aW1pemVyQWxnb3JpdGhtRUNsYXNzOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIEF1dG9tYXRpY2V4cGVyaW1lbnRGYWN0b3J5IGdldEF1dG9tYXRpY2V4cGVyaW1lbnRGYWN0b3J5KCkgew0KKwkJcmV0dXJuIChBdXRvbWF0aWNleHBlcmltZW50RmFjdG9yeSlnZXRFRmFjdG9yeUluc3RhbmNlKCk7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcml2YXRlIGJvb2xlYW4gaXNDcmVhdGVkID0gZmFsc2U7DQorDQorCS8qKg0KKwkgKiBDcmVhdGVzIHRoZSBtZXRhLW1vZGVsIG9iamVjdHMgZm9yIHRoZSBwYWNrYWdlLiAgVGhpcyBtZXRob2QgaXMNCisJICogZ3VhcmRlZCB0byBoYXZlIG5vIGFmZmVjdCBvbiBhbnkgaW52b2NhdGlvbiBidXQgaXRzIGZpcnN0Lg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIHZvaWQgY3JlYXRlUGFja2FnZUNvbnRlbnRzKCkgew0KKwkJaWYgKGlzQ3JlYXRlZCkgcmV0dXJuOw0KKwkJaXNDcmVhdGVkID0gdHJ1ZTsNCisNCisJCS8vIENyZWF0ZSBjbGFzc2VzIGFuZCB0aGVpciBmZWF0dXJlcw0KKwkJYXV0b21hdGljRXhwZXJpbWVudEVDbGFzcyA9IGNyZWF0ZUVDbGFzcyhBVVRPTUFUSUNfRVhQRVJJTUVOVCk7DQorCQljcmVhdGVFUmVmZXJlbmNlKGF1dG9tYXRpY0V4cGVyaW1lbnRFQ2xhc3MsIEFVVE9NQVRJQ19FWFBFUklNRU5UX19CQVNFX1NDRU5BUklPKTsNCisJCWNyZWF0ZUVSZWZlcmVuY2UoYXV0b21hdGljRXhwZXJpbWVudEVDbGFzcywgQVVUT01BVElDX0VYUEVSSU1FTlRfX1BBUkFNRVRFUlMpOw0KKwkJY3JlYXRlRUF0dHJpYnV0ZShhdXRvbWF0aWNFeHBlcmltZW50RUNsYXNzLCBBVVRPTUFUSUNfRVhQRVJJTUVOVF9fRVJST1JfQU5BTFlTSVNfQUxHT1JJVEhNKTsNCisJCWNyZWF0ZUVBdHRyaWJ1dGUoYXV0b21hdGljRXhwZXJpbWVudEVDbGFzcywgQVVUT01BVElDX0VYUEVSSU1FTlRfX0VSUk9SX0ZVTkNUSU9OKTsNCisJCWNyZWF0ZUVBdHRyaWJ1dGUoYXV0b21hdGljRXhwZXJpbWVudEVDbGFzcywgQVVUT01BVElDX0VYUEVSSU1FTlRfX1RPTEVSQU5DRSk7DQorCQljcmVhdGVFQXR0cmlidXRlKGF1dG9tYXRpY0V4cGVyaW1lbnRFQ2xhc3MsIEFVVE9NQVRJQ19FWFBFUklNRU5UX19SRUZFUkFOQ0VfREFUQV9ESVIpOw0KKwkJY3JlYXRlRUF0dHJpYnV0ZShhdXRvbWF0aWNFeHBlcmltZW50RUNsYXNzLCBBVVRPTUFUSUNfRVhQRVJJTUVOVF9fTUFYSU1VTV9OVU1CRVJfT0ZfSVRFUkFUSU9OUyk7DQorCQljcmVhdGVFQXR0cmlidXRlKGF1dG9tYXRpY0V4cGVyaW1lbnRFQ2xhc3MsIEFVVE9NQVRJQ19FWFBFUklNRU5UX19SRV9JTklUKTsNCisJCWNyZWF0ZUVSZWZlcmVuY2UoYXV0b21hdGljRXhwZXJpbWVudEVDbGFzcywgQVVUT01BVElDX0VYUEVSSU1FTlRfX0VSUk9SX0ZVTkMpOw0KKw0KKwkJbW9kaWZpYWJsZVBhcmFtZXRlckVDbGFzcyA9IGNyZWF0ZUVDbGFzcyhNT0RJRklBQkxFX1BBUkFNRVRFUik7DQorCQljcmVhdGVFQXR0cmlidXRlKG1vZGlmaWFibGVQYXJhbWV0ZXJFQ2xhc3MsIE1PRElGSUFCTEVfUEFSQU1FVEVSX19JTklUSUFMX1ZBTFVFKTsNCisJCWNyZWF0ZUVSZWZlcmVuY2UobW9kaWZpYWJsZVBhcmFtZXRlckVDbGFzcywgTU9ESUZJQUJMRV9QQVJBTUVURVJfX0ZFQVRVUkUpOw0KKwkJY3JlYXRlRUF0dHJpYnV0ZShtb2RpZmlhYmxlUGFyYW1ldGVyRUNsYXNzLCBNT0RJRklBQkxFX1BBUkFNRVRFUl9fU1RFUCk7DQorCQljcmVhdGVFQXR0cmlidXRlKG1vZGlmaWFibGVQYXJhbWV0ZXJFQ2xhc3MsIE1PRElGSUFCTEVfUEFSQU1FVEVSX19GRUFUVVJFX05BTUUpOw0KKwkJY3JlYXRlRUF0dHJpYnV0ZShtb2RpZmlhYmxlUGFyYW1ldGVyRUNsYXNzLCBNT0RJRklBQkxFX1BBUkFNRVRFUl9fTE9XRVJfQk9VTkQpOw0KKwkJY3JlYXRlRUF0dHJpYnV0ZShtb2RpZmlhYmxlUGFyYW1ldGVyRUNsYXNzLCBNT0RJRklBQkxFX1BBUkFNRVRFUl9fVVBQRVJfQk9VTkQpOw0KKwkJY3JlYXRlRUF0dHJpYnV0ZShtb2RpZmlhYmxlUGFyYW1ldGVyRUNsYXNzLCBNT0RJRklBQkxFX1BBUkFNRVRFUl9fVEFSR0VUX1VSSSk7DQorDQorCQlvcHRpbWl6ZXJBbGdvcml0aG1FQ2xhc3MgPSBjcmVhdGVFQ2xhc3MoT1BUSU1JWkVSX0FMR09SSVRITSk7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcml2YXRlIGJvb2xlYW4gaXNJbml0aWFsaXplZCA9IGZhbHNlOw0KKw0KKwkvKioNCisJICogQ29tcGxldGUgdGhlIGluaXRpYWxpemF0aW9uIG9mIHRoZSBwYWNrYWdlIGFuZCBpdHMgbWV0YS1tb2RlbC4gIFRoaXMNCisJICogbWV0aG9kIGlzIGd1YXJkZWQgdG8gaGF2ZSBubyBhZmZlY3Qgb24gYW55IGludm9jYXRpb24gYnV0IGl0cyBmaXJzdC4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyB2b2lkIGluaXRpYWxpemVQYWNrYWdlQ29udGVudHMoKSB7DQorCQlpZiAoaXNJbml0aWFsaXplZCkgcmV0dXJuOw0KKwkJaXNJbml0aWFsaXplZCA9IHRydWU7DQorDQorCQkvLyBJbml0aWFsaXplIHBhY2thZ2UNCisJCXNldE5hbWUoZU5BTUUpOw0KKwkJc2V0TnNQcmVmaXgoZU5TX1BSRUZJWCk7DQorCQlzZXROc1VSSShlTlNfVVJJKTsNCisNCisJCS8vIE9idGFpbiBvdGhlciBkZXBlbmRlbnQgcGFja2FnZXMNCisJCVNjZW5hcmlvUGFja2FnZSB0aGVTY2VuYXJpb1BhY2thZ2UgPSAoU2NlbmFyaW9QYWNrYWdlKUVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVQYWNrYWdlKFNjZW5hcmlvUGFja2FnZS5lTlNfVVJJKTsNCisJCUVjb3JlUGFja2FnZSB0aGVFY29yZVBhY2thZ2UgPSAoRWNvcmVQYWNrYWdlKUVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVQYWNrYWdlKEVjb3JlUGFja2FnZS5lTlNfVVJJKTsNCisJCUFuYWx5c2lzUGFja2FnZSB0aGVBbmFseXNpc1BhY2thZ2UgPSAoQW5hbHlzaXNQYWNrYWdlKUVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVQYWNrYWdlKEFuYWx5c2lzUGFja2FnZS5lTlNfVVJJKTsNCisJCUNvbW1vblBhY2thZ2UgdGhlQ29tbW9uUGFja2FnZSA9IChDb21tb25QYWNrYWdlKUVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVQYWNrYWdlKENvbW1vblBhY2thZ2UuZU5TX1VSSSk7DQorDQorCQkvLyBDcmVhdGUgdHlwZSBwYXJhbWV0ZXJzDQorDQorCQkvLyBTZXQgYm91bmRzIGZvciB0eXBlIHBhcmFtZXRlcnMNCisNCisJCS8vIEFkZCBzdXBlcnR5cGVzIHRvIGNsYXNzZXMNCisJCWF1dG9tYXRpY0V4cGVyaW1lbnRFQ2xhc3MuZ2V0RVN1cGVyVHlwZXMoKS5hZGQodGhpcy5nZXRPcHRpbWl6ZXJBbGdvcml0aG0oKSk7DQorCQlvcHRpbWl6ZXJBbGdvcml0aG1FQ2xhc3MuZ2V0RVN1cGVyVHlwZXMoKS5hZGQodGhlQ29tbW9uUGFja2FnZS5nZXRJZGVudGlmaWFibGUoKSk7DQorDQorCQkvLyBJbml0aWFsaXplIGNsYXNzZXMgYW5kIGZlYXR1cmVzOyBhZGQgb3BlcmF0aW9ucyBhbmQgcGFyYW1ldGVycw0KKwkJaW5pdEVDbGFzcyhhdXRvbWF0aWNFeHBlcmltZW50RUNsYXNzLCBBdXRvbWF0aWNFeHBlcmltZW50LmNsYXNzLCAiQXV0b21hdGljRXhwZXJpbWVudCIsICFJU19BQlNUUkFDVCwgIUlTX0lOVEVSRkFDRSwgSVNfR0VORVJBVEVEX0lOU1RBTkNFX0NMQVNTKTsNCisJCWluaXRFUmVmZXJlbmNlKGdldEF1dG9tYXRpY0V4cGVyaW1lbnRfQmFzZVNjZW5hcmlvKCksIHRoZVNjZW5hcmlvUGFja2FnZS5nZXRTY2VuYXJpbygpLCBudWxsLCAiYmFzZVNjZW5hcmlvIiwgbnVsbCwgMSwgMSwgQXV0b21hdGljRXhwZXJpbWVudC5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfQ09NUE9TSVRFLCBJU19SRVNPTFZFX1BST1hJRVMsICFJU19VTlNFVFRBQkxFLCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsNCisJCWluaXRFUmVmZXJlbmNlKGdldEF1dG9tYXRpY0V4cGVyaW1lbnRfUGFyYW1ldGVycygpLCB0aGlzLmdldE1vZGlmaWFibGVQYXJhbWV0ZXIoKSwgbnVsbCwgInBhcmFtZXRlcnMiLCBudWxsLCAxLCAtMSwgQXV0b21hdGljRXhwZXJpbWVudC5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCBJU19DT01QT1NJVEUsICFJU19SRVNPTFZFX1BST1hJRVMsICFJU19VTlNFVFRBQkxFLCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsNCisJCWluaXRFQXR0cmlidXRlKGdldEF1dG9tYXRpY0V4cGVyaW1lbnRfRXJyb3JBbmFseXNpc0FsZ29yaXRobSgpLCB0aGVFY29yZVBhY2thZ2UuZ2V0RVN0cmluZygpLCAiZXJyb3JBbmFseXNpc0FsZ29yaXRobSIsIG51bGwsIDEsIDEsIEF1dG9tYXRpY0V4cGVyaW1lbnQuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7DQorCQlpbml0RUF0dHJpYnV0ZShnZXRBdXRvbWF0aWNFeHBlcmltZW50X0Vycm9yRnVuY3Rpb24oKSwgdGhlRWNvcmVQYWNrYWdlLmdldEVTdHJpbmcoKSwgImVycm9yRnVuY3Rpb24iLCBudWxsLCAxLCAxLCBBdXRvbWF0aWNFeHBlcmltZW50LmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOw0KKwkJaW5pdEVBdHRyaWJ1dGUoZ2V0QXV0b21hdGljRXhwZXJpbWVudF9Ub2xlcmFuY2UoKSwgdGhlRWNvcmVQYWNrYWdlLmdldEVEb3VibGUoKSwgInRvbGVyYW5jZSIsIG51bGwsIDEsIDEsIEF1dG9tYXRpY0V4cGVyaW1lbnQuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7DQorCQlpbml0RUF0dHJpYnV0ZShnZXRBdXRvbWF0aWNFeHBlcmltZW50X1JlZmVyYW5jZURhdGFEaXIoKSwgdGhlRWNvcmVQYWNrYWdlLmdldEVTdHJpbmcoKSwgInJlZmVyYW5jZURhdGFEaXIiLCBudWxsLCAxLCAxLCBBdXRvbWF0aWNFeHBlcmltZW50LmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOw0KKwkJaW5pdEVBdHRyaWJ1dGUoZ2V0QXV0b21hdGljRXhwZXJpbWVudF9NYXhpbXVtTnVtYmVyT2ZJdGVyYXRpb25zKCksIHRoZUVjb3JlUGFja2FnZS5nZXRFTG9uZygpLCAibWF4aW11bU51bWJlck9mSXRlcmF0aW9ucyIsIG51bGwsIDEsIDEsIEF1dG9tYXRpY0V4cGVyaW1lbnQuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7DQorCQlpbml0RUF0dHJpYnV0ZShnZXRBdXRvbWF0aWNFeHBlcmltZW50X1JlSW5pdCgpLCB0aGVFY29yZVBhY2thZ2UuZ2V0RUJvb2xlYW4oKSwgInJlSW5pdCIsIG51bGwsIDEsIDEsIEF1dG9tYXRpY0V4cGVyaW1lbnQuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7DQorCQlpbml0RVJlZmVyZW5jZShnZXRBdXRvbWF0aWNFeHBlcmltZW50X0Vycm9yRnVuYygpLCB0aGVBbmFseXNpc1BhY2thZ2UuZ2V0RXJyb3JGdW5jdGlvbigpLCBudWxsLCAiZXJyb3JGdW5jIiwgbnVsbCwgMSwgMSwgQXV0b21hdGljRXhwZXJpbWVudC5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCBJU19DT01QT1NJVEUsICFJU19SRVNPTFZFX1BST1hJRVMsICFJU19VTlNFVFRBQkxFLCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsNCisNCisJCWluaXRFQ2xhc3MobW9kaWZpYWJsZVBhcmFtZXRlckVDbGFzcywgTW9kaWZpYWJsZVBhcmFtZXRlci5jbGFzcywgIk1vZGlmaWFibGVQYXJhbWV0ZXIiLCAhSVNfQUJTVFJBQ1QsICFJU19JTlRFUkZBQ0UsIElTX0dFTkVSQVRFRF9JTlNUQU5DRV9DTEFTUyk7DQorCQlpbml0RUF0dHJpYnV0ZShnZXRNb2RpZmlhYmxlUGFyYW1ldGVyX0luaXRpYWxWYWx1ZSgpLCB0aGVFY29yZVBhY2thZ2UuZ2V0RURvdWJsZSgpLCAiaW5pdGlhbFZhbHVlIiwgbnVsbCwgMSwgMSwgTW9kaWZpYWJsZVBhcmFtZXRlci5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsNCisJCWluaXRFUmVmZXJlbmNlKGdldE1vZGlmaWFibGVQYXJhbWV0ZXJfRmVhdHVyZSgpLCB0aGVFY29yZVBhY2thZ2UuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlKCksIG51bGwsICJmZWF0dXJlIiwgbnVsbCwgMSwgMSwgTW9kaWZpYWJsZVBhcmFtZXRlci5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfQ09NUE9TSVRFLCBJU19SRVNPTFZFX1BST1hJRVMsICFJU19VTlNFVFRBQkxFLCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsNCisJCWluaXRFQXR0cmlidXRlKGdldE1vZGlmaWFibGVQYXJhbWV0ZXJfU3RlcCgpLCB0aGVFY29yZVBhY2thZ2UuZ2V0RURvdWJsZSgpLCAic3RlcCIsIG51bGwsIDEsIDEsIE1vZGlmaWFibGVQYXJhbWV0ZXIuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7DQorCQlpbml0RUF0dHJpYnV0ZShnZXRNb2RpZmlhYmxlUGFyYW1ldGVyX0ZlYXR1cmVOYW1lKCksIHRoZUVjb3JlUGFja2FnZS5nZXRFU3RyaW5nKCksICJmZWF0dXJlTmFtZSIsIG51bGwsIDEsIDEsIE1vZGlmaWFibGVQYXJhbWV0ZXIuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7DQorCQlpbml0RUF0dHJpYnV0ZShnZXRNb2RpZmlhYmxlUGFyYW1ldGVyX0xvd2VyQm91bmQoKSwgdGhlRWNvcmVQYWNrYWdlLmdldEVEb3VibGUoKSwgImxvd2VyQm91bmQiLCAiLTEiLCAwLCAxLCBNb2RpZmlhYmxlUGFyYW1ldGVyLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOw0KKwkJaW5pdEVBdHRyaWJ1dGUoZ2V0TW9kaWZpYWJsZVBhcmFtZXRlcl9VcHBlckJvdW5kKCksIHRoZUVjb3JlUGFja2FnZS5nZXRFRG91YmxlKCksICJ1cHBlckJvdW5kIiwgIi0xIiwgMCwgMSwgTW9kaWZpYWJsZVBhcmFtZXRlci5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsNCisJCWluaXRFQXR0cmlidXRlKGdldE1vZGlmaWFibGVQYXJhbWV0ZXJfVGFyZ2V0VVJJKCksIHRoZUNvbW1vblBhY2thZ2UuZ2V0VVJJKCksICJ0YXJnZXRVUkkiLCBudWxsLCAwLCAxLCBNb2RpZmlhYmxlUGFyYW1ldGVyLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOw0KKw0KKwkJaW5pdEVDbGFzcyhvcHRpbWl6ZXJBbGdvcml0aG1FQ2xhc3MsIE9wdGltaXplckFsZ29yaXRobS5jbGFzcywgIk9wdGltaXplckFsZ29yaXRobSIsICFJU19BQlNUUkFDVCwgIUlTX0lOVEVSRkFDRSwgSVNfR0VORVJBVEVEX0lOU1RBTkNFX0NMQVNTKTsNCisNCisJCS8vIENyZWF0ZSByZXNvdXJjZQ0KKwkJY3JlYXRlUmVzb3VyY2UoZU5TX1VSSSk7DQorCX0NCisNCit9IC8vQXV0b21hdGljZXhwZXJpbWVudFBhY2thZ2VJbXBsDQpkaWZmIC0tZ2l0IGEvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5hdXRvbWF0aWNleHBlcmltZW50L3NyYy9vcmcvZWNsaXBzZS9zdGVtL2FuYWx5c2lzL2F1dG9tYXRpY2V4cGVyaW1lbnQvaW1wbC9Nb2RpZmlhYmxlUGFyYW1ldGVySW1wbC5qYXZhIGIvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5hdXRvbWF0aWNleHBlcmltZW50L3NyYy9vcmcvZWNsaXBzZS9zdGVtL2FuYWx5c2lzL2F1dG9tYXRpY2V4cGVyaW1lbnQvaW1wbC9Nb2RpZmlhYmxlUGFyYW1ldGVySW1wbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRlY2I4NDAKLS0tIC9kZXYvbnVsbAorKysgYi9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQvc3JjL29yZy9lY2xpcHNlL3N0ZW0vYW5hbHlzaXMvYXV0b21hdGljZXhwZXJpbWVudC9pbXBsL01vZGlmaWFibGVQYXJhbWV0ZXJJbXBsLmphdmEKQEAgLTAsMCArMSw1MDMgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5hdXRvbWF0aWNleHBlcmltZW50LmltcGw7DQorDQorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisgKiBDb3B5cmlnaHQgKGMpIDIwMDkgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuDQorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscw0KKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMA0KKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0DQorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwNCisgKg0KKyAqIENvbnRyaWJ1dG9yczoNCisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uDQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQorDQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlVSSTsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzczsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVTdHJ1Y3R1cmFsRmVhdHVyZTsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkludGVybmFsRU9iamVjdDsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLmltcGwuRU5vdGlmaWNhdGlvbkltcGw7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5pbXBsLkVPYmplY3RJbXBsOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQuQXV0b21hdGljZXhwZXJpbWVudFBhY2thZ2U7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuYXV0b21hdGljZXhwZXJpbWVudC5Nb2RpZmlhYmxlUGFyYW1ldGVyOw0KKw0KKw0KKy8qKg0KKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorICogQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPk1vZGlmaWFibGUgUGFyYW1ldGVyPC9iPjwvZW0+Jy4NCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisgKiA8cD4NCisgKiBUaGUgZm9sbG93aW5nIGZlYXR1cmVzIGFyZSBpbXBsZW1lbnRlZDoNCisgKiA8dWw+DQorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuYXV0b21hdGljZXhwZXJpbWVudC5pbXBsLk1vZGlmaWFibGVQYXJhbWV0ZXJJbXBsI2dldEluaXRpYWxWYWx1ZSA8ZW0+SW5pdGlhbCBWYWx1ZTwvZW0+fTwvbGk+DQorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuYXV0b21hdGljZXhwZXJpbWVudC5pbXBsLk1vZGlmaWFibGVQYXJhbWV0ZXJJbXBsI2dldEZlYXR1cmUgPGVtPkZlYXR1cmU8L2VtPn08L2xpPg0KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQuaW1wbC5Nb2RpZmlhYmxlUGFyYW1ldGVySW1wbCNnZXRTdGVwIDxlbT5TdGVwPC9lbT59PC9saT4NCisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5hdXRvbWF0aWNleHBlcmltZW50LmltcGwuTW9kaWZpYWJsZVBhcmFtZXRlckltcGwjZ2V0RmVhdHVyZU5hbWUgPGVtPkZlYXR1cmUgTmFtZTwvZW0+fTwvbGk+DQorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuYXV0b21hdGljZXhwZXJpbWVudC5pbXBsLk1vZGlmaWFibGVQYXJhbWV0ZXJJbXBsI2dldExvd2VyQm91bmQgPGVtPkxvd2VyIEJvdW5kPC9lbT59PC9saT4NCisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5hdXRvbWF0aWNleHBlcmltZW50LmltcGwuTW9kaWZpYWJsZVBhcmFtZXRlckltcGwjZ2V0VXBwZXJCb3VuZCA8ZW0+VXBwZXIgQm91bmQ8L2VtPn08L2xpPg0KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQuaW1wbC5Nb2RpZmlhYmxlUGFyYW1ldGVySW1wbCNnZXRUYXJnZXRVUkkgPGVtPlRhcmdldCBVUkk8L2VtPn08L2xpPg0KKyAqIDwvdWw+DQorICogPC9wPg0KKyAqDQorICogQGdlbmVyYXRlZA0KKyAqLw0KK3B1YmxpYyBjbGFzcyBNb2RpZmlhYmxlUGFyYW1ldGVySW1wbCBleHRlbmRzIEVPYmplY3RJbXBsIGltcGxlbWVudHMgTW9kaWZpYWJsZVBhcmFtZXRlciB7DQorCS8qKg0KKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0SW5pdGlhbFZhbHVlKCkgPGVtPkluaXRpYWwgVmFsdWU8L2VtPn0nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBzZWUgI2dldEluaXRpYWxWYWx1ZSgpDQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgZG91YmxlIElOSVRJQUxfVkFMVUVfRURFRkFVTFQgPSAwLjA7DQorDQorCS8qKg0KKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRJbml0aWFsVmFsdWUoKSA8ZW0+SW5pdGlhbCBWYWx1ZTwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHNlZSAjZ2V0SW5pdGlhbFZhbHVlKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJcHJvdGVjdGVkIGRvdWJsZSBpbml0aWFsVmFsdWUgPSBJTklUSUFMX1ZBTFVFX0VERUZBVUxUOw0KKw0KKwkvKioNCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0RmVhdHVyZSgpIDxlbT5GZWF0dXJlPC9lbT59JyByZWZlcmVuY2UuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAc2VlICNnZXRGZWF0dXJlKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJcHJvdGVjdGVkIEVTdHJ1Y3R1cmFsRmVhdHVyZSBmZWF0dXJlOw0KKw0KKwkvKioNCisJICogVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldFN0ZXAoKSA8ZW0+U3RlcDwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHNlZSAjZ2V0U3RlcCgpDQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgZG91YmxlIFNURVBfRURFRkFVTFQgPSAwLjA7DQorDQorCS8qKg0KKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRTdGVwKCkgPGVtPlN0ZXA8L2VtPn0nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBzZWUgI2dldFN0ZXAoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqIEBvcmRlcmVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgZG91YmxlIHN0ZXAgPSBTVEVQX0VERUZBVUxUOw0KKw0KKwkvKioNCisJICogVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldEZlYXR1cmVOYW1lKCkgPGVtPkZlYXR1cmUgTmFtZTwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHNlZSAjZ2V0RmVhdHVyZU5hbWUoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqIEBvcmRlcmVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIFN0cmluZyBGRUFUVVJFX05BTUVfRURFRkFVTFQgPSBudWxsOw0KKw0KKwkvKioNCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0RmVhdHVyZU5hbWUoKSA8ZW0+RmVhdHVyZSBOYW1lPC9lbT59JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAc2VlICNnZXRGZWF0dXJlTmFtZSgpDQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCXByb3RlY3RlZCBTdHJpbmcgZmVhdHVyZU5hbWUgPSBGRUFUVVJFX05BTUVfRURFRkFVTFQ7DQorDQorCS8qKg0KKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0TG93ZXJCb3VuZCgpIDxlbT5Mb3dlciBCb3VuZDwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHNlZSAjZ2V0TG93ZXJCb3VuZCgpDQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgZG91YmxlIExPV0VSX0JPVU5EX0VERUZBVUxUID0gLTEuMDsNCisNCisJLyoqDQorCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldExvd2VyQm91bmQoKSA8ZW0+TG93ZXIgQm91bmQ8L2VtPn0nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBzZWUgI2dldExvd2VyQm91bmQoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqIEBvcmRlcmVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgZG91YmxlIGxvd2VyQm91bmQgPSBMT1dFUl9CT1VORF9FREVGQVVMVDsNCisNCisJLyoqDQorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRVcHBlckJvdW5kKCkgPGVtPlVwcGVyIEJvdW5kPC9lbT59JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAc2VlICNnZXRVcHBlckJvdW5kKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBkb3VibGUgVVBQRVJfQk9VTkRfRURFRkFVTFQgPSAtMS4wOw0KKw0KKwkvKioNCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0VXBwZXJCb3VuZCgpIDxlbT5VcHBlciBCb3VuZDwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHNlZSAjZ2V0VXBwZXJCb3VuZCgpDQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCXByb3RlY3RlZCBkb3VibGUgdXBwZXJCb3VuZCA9IFVQUEVSX0JPVU5EX0VERUZBVUxUOw0KKw0KKwkvKioNCisJICogVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldFRhcmdldFVSSSgpIDxlbT5UYXJnZXQgVVJJPC9lbT59JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAc2VlICNnZXRUYXJnZXRVUkkoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqIEBvcmRlcmVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIFVSSSBUQVJHRVRfVVJJX0VERUZBVUxUID0gbnVsbDsNCisNCisJLyoqDQorCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldFRhcmdldFVSSSgpIDxlbT5UYXJnZXQgVVJJPC9lbT59JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAc2VlICNnZXRUYXJnZXRVUkkoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqIEBvcmRlcmVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgVVJJIHRhcmdldFVSSSA9IFRBUkdFVF9VUklfRURFRkFVTFQ7DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIE1vZGlmaWFibGVQYXJhbWV0ZXJJbXBsKCkgew0KKwkJc3VwZXIoKTsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCUBPdmVycmlkZQ0KKwlwcm90ZWN0ZWQgRUNsYXNzIGVTdGF0aWNDbGFzcygpIHsNCisJCXJldHVybiBBdXRvbWF0aWNleHBlcmltZW50UGFja2FnZS5MaXRlcmFscy5NT0RJRklBQkxFX1BBUkFNRVRFUjsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBkb3VibGUgZ2V0SW5pdGlhbFZhbHVlKCkgew0KKwkJcmV0dXJuIGluaXRpYWxWYWx1ZTsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyB2b2lkIHNldEluaXRpYWxWYWx1ZShkb3VibGUgbmV3SW5pdGlhbFZhbHVlKSB7DQorCQlkb3VibGUgb2xkSW5pdGlhbFZhbHVlID0gaW5pdGlhbFZhbHVlOw0KKwkJaW5pdGlhbFZhbHVlID0gbmV3SW5pdGlhbFZhbHVlOw0KKwkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQ0KKwkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIEF1dG9tYXRpY2V4cGVyaW1lbnRQYWNrYWdlLk1PRElGSUFCTEVfUEFSQU1FVEVSX19JTklUSUFMX1ZBTFVFLCBvbGRJbml0aWFsVmFsdWUsIGluaXRpYWxWYWx1ZSkpOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIEVTdHJ1Y3R1cmFsRmVhdHVyZSBnZXRGZWF0dXJlKCkgew0KKwkJaWYgKGZlYXR1cmUgIT0gbnVsbCAmJiBmZWF0dXJlLmVJc1Byb3h5KCkpIHsNCisJCQlJbnRlcm5hbEVPYmplY3Qgb2xkRmVhdHVyZSA9IChJbnRlcm5hbEVPYmplY3QpZmVhdHVyZTsNCisJCQlmZWF0dXJlID0gKEVTdHJ1Y3R1cmFsRmVhdHVyZSllUmVzb2x2ZVByb3h5KG9sZEZlYXR1cmUpOw0KKwkJCWlmIChmZWF0dXJlICE9IG9sZEZlYXR1cmUpIHsNCisJCQkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQ0KKwkJCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlJFU09MVkUsIEF1dG9tYXRpY2V4cGVyaW1lbnRQYWNrYWdlLk1PRElGSUFCTEVfUEFSQU1FVEVSX19GRUFUVVJFLCBvbGRGZWF0dXJlLCBmZWF0dXJlKSk7DQorCQkJfQ0KKwkJfQ0KKwkJcmV0dXJuIGZlYXR1cmU7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgRVN0cnVjdHVyYWxGZWF0dXJlIGJhc2ljR2V0RmVhdHVyZSgpIHsNCisJCXJldHVybiBmZWF0dXJlOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIHZvaWQgc2V0RmVhdHVyZShFU3RydWN0dXJhbEZlYXR1cmUgbmV3RmVhdHVyZSkgew0KKwkJRVN0cnVjdHVyYWxGZWF0dXJlIG9sZEZlYXR1cmUgPSBmZWF0dXJlOw0KKwkJZmVhdHVyZSA9IG5ld0ZlYXR1cmU7DQorCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpDQorCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgQXV0b21hdGljZXhwZXJpbWVudFBhY2thZ2UuTU9ESUZJQUJMRV9QQVJBTUVURVJfX0ZFQVRVUkUsIG9sZEZlYXR1cmUsIGZlYXR1cmUpKTsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBkb3VibGUgZ2V0U3RlcCgpIHsNCisJCXJldHVybiBzdGVwOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIHZvaWQgc2V0U3RlcChkb3VibGUgbmV3U3RlcCkgew0KKwkJZG91YmxlIG9sZFN0ZXAgPSBzdGVwOw0KKwkJc3RlcCA9IG5ld1N0ZXA7DQorCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpDQorCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgQXV0b21hdGljZXhwZXJpbWVudFBhY2thZ2UuTU9ESUZJQUJMRV9QQVJBTUVURVJfX1NURVAsIG9sZFN0ZXAsIHN0ZXApKTsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBTdHJpbmcgZ2V0RmVhdHVyZU5hbWUoKSB7DQorCQlyZXR1cm4gZmVhdHVyZU5hbWU7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgdm9pZCBzZXRGZWF0dXJlTmFtZShTdHJpbmcgbmV3RmVhdHVyZU5hbWUpIHsNCisJCVN0cmluZyBvbGRGZWF0dXJlTmFtZSA9IGZlYXR1cmVOYW1lOw0KKwkJZmVhdHVyZU5hbWUgPSBuZXdGZWF0dXJlTmFtZTsNCisJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkNCisJCQllTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBBdXRvbWF0aWNleHBlcmltZW50UGFja2FnZS5NT0RJRklBQkxFX1BBUkFNRVRFUl9fRkVBVFVSRV9OQU1FLCBvbGRGZWF0dXJlTmFtZSwgZmVhdHVyZU5hbWUpKTsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBkb3VibGUgZ2V0TG93ZXJCb3VuZCgpIHsNCisJCXJldHVybiBsb3dlckJvdW5kOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIHZvaWQgc2V0TG93ZXJCb3VuZChkb3VibGUgbmV3TG93ZXJCb3VuZCkgew0KKwkJZG91YmxlIG9sZExvd2VyQm91bmQgPSBsb3dlckJvdW5kOw0KKwkJbG93ZXJCb3VuZCA9IG5ld0xvd2VyQm91bmQ7DQorCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpDQorCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgQXV0b21hdGljZXhwZXJpbWVudFBhY2thZ2UuTU9ESUZJQUJMRV9QQVJBTUVURVJfX0xPV0VSX0JPVU5ELCBvbGRMb3dlckJvdW5kLCBsb3dlckJvdW5kKSk7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgZG91YmxlIGdldFVwcGVyQm91bmQoKSB7DQorCQlyZXR1cm4gdXBwZXJCb3VuZDsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyB2b2lkIHNldFVwcGVyQm91bmQoZG91YmxlIG5ld1VwcGVyQm91bmQpIHsNCisJCWRvdWJsZSBvbGRVcHBlckJvdW5kID0gdXBwZXJCb3VuZDsNCisJCXVwcGVyQm91bmQgPSBuZXdVcHBlckJvdW5kOw0KKwkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQ0KKwkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIEF1dG9tYXRpY2V4cGVyaW1lbnRQYWNrYWdlLk1PRElGSUFCTEVfUEFSQU1FVEVSX19VUFBFUl9CT1VORCwgb2xkVXBwZXJCb3VuZCwgdXBwZXJCb3VuZCkpOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIFVSSSBnZXRUYXJnZXRVUkkoKSB7DQorCQlyZXR1cm4gdGFyZ2V0VVJJOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIHZvaWQgc2V0VGFyZ2V0VVJJKFVSSSBuZXdUYXJnZXRVUkkpIHsNCisJCVVSSSBvbGRUYXJnZXRVUkkgPSB0YXJnZXRVUkk7DQorCQl0YXJnZXRVUkkgPSBuZXdUYXJnZXRVUkk7DQorCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpDQorCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgQXV0b21hdGljZXhwZXJpbWVudFBhY2thZ2UuTU9ESUZJQUJMRV9QQVJBTUVURVJfX1RBUkdFVF9VUkksIG9sZFRhcmdldFVSSSwgdGFyZ2V0VVJJKSk7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlAT3ZlcnJpZGUNCisJcHVibGljIE9iamVjdCBlR2V0KGludCBmZWF0dXJlSUQsIGJvb2xlYW4gcmVzb2x2ZSwgYm9vbGVhbiBjb3JlVHlwZSkgew0KKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsNCisJCQljYXNlIEF1dG9tYXRpY2V4cGVyaW1lbnRQYWNrYWdlLk1PRElGSUFCTEVfUEFSQU1FVEVSX19JTklUSUFMX1ZBTFVFOg0KKwkJCQlyZXR1cm4gZ2V0SW5pdGlhbFZhbHVlKCk7DQorCQkJY2FzZSBBdXRvbWF0aWNleHBlcmltZW50UGFja2FnZS5NT0RJRklBQkxFX1BBUkFNRVRFUl9fRkVBVFVSRToNCisJCQkJaWYgKHJlc29sdmUpIHJldHVybiBnZXRGZWF0dXJlKCk7DQorCQkJCXJldHVybiBiYXNpY0dldEZlYXR1cmUoKTsNCisJCQljYXNlIEF1dG9tYXRpY2V4cGVyaW1lbnRQYWNrYWdlLk1PRElGSUFCTEVfUEFSQU1FVEVSX19TVEVQOg0KKwkJCQlyZXR1cm4gZ2V0U3RlcCgpOw0KKwkJCWNhc2UgQXV0b21hdGljZXhwZXJpbWVudFBhY2thZ2UuTU9ESUZJQUJMRV9QQVJBTUVURVJfX0ZFQVRVUkVfTkFNRToNCisJCQkJcmV0dXJuIGdldEZlYXR1cmVOYW1lKCk7DQorCQkJY2FzZSBBdXRvbWF0aWNleHBlcmltZW50UGFja2FnZS5NT0RJRklBQkxFX1BBUkFNRVRFUl9fTE9XRVJfQk9VTkQ6DQorCQkJCXJldHVybiBnZXRMb3dlckJvdW5kKCk7DQorCQkJY2FzZSBBdXRvbWF0aWNleHBlcmltZW50UGFja2FnZS5NT0RJRklBQkxFX1BBUkFNRVRFUl9fVVBQRVJfQk9VTkQ6DQorCQkJCXJldHVybiBnZXRVcHBlckJvdW5kKCk7DQorCQkJY2FzZSBBdXRvbWF0aWNleHBlcmltZW50UGFja2FnZS5NT0RJRklBQkxFX1BBUkFNRVRFUl9fVEFSR0VUX1VSSToNCisJCQkJcmV0dXJuIGdldFRhcmdldFVSSSgpOw0KKwkJfQ0KKwkJcmV0dXJuIHN1cGVyLmVHZXQoZmVhdHVyZUlELCByZXNvbHZlLCBjb3JlVHlwZSk7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlAT3ZlcnJpZGUNCisJcHVibGljIHZvaWQgZVNldChpbnQgZmVhdHVyZUlELCBPYmplY3QgbmV3VmFsdWUpIHsNCisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7DQorCQkJY2FzZSBBdXRvbWF0aWNleHBlcmltZW50UGFja2FnZS5NT0RJRklBQkxFX1BBUkFNRVRFUl9fSU5JVElBTF9WQUxVRToNCisJCQkJc2V0SW5pdGlhbFZhbHVlKChEb3VibGUpbmV3VmFsdWUpOw0KKwkJCQlyZXR1cm47DQorCQkJY2FzZSBBdXRvbWF0aWNleHBlcmltZW50UGFja2FnZS5NT0RJRklBQkxFX1BBUkFNRVRFUl9fRkVBVFVSRToNCisJCQkJc2V0RmVhdHVyZSgoRVN0cnVjdHVyYWxGZWF0dXJlKW5ld1ZhbHVlKTsNCisJCQkJcmV0dXJuOw0KKwkJCWNhc2UgQXV0b21hdGljZXhwZXJpbWVudFBhY2thZ2UuTU9ESUZJQUJMRV9QQVJBTUVURVJfX1NURVA6DQorCQkJCXNldFN0ZXAoKERvdWJsZSluZXdWYWx1ZSk7DQorCQkJCXJldHVybjsNCisJCQljYXNlIEF1dG9tYXRpY2V4cGVyaW1lbnRQYWNrYWdlLk1PRElGSUFCTEVfUEFSQU1FVEVSX19GRUFUVVJFX05BTUU6DQorCQkJCXNldEZlYXR1cmVOYW1lKChTdHJpbmcpbmV3VmFsdWUpOw0KKwkJCQlyZXR1cm47DQorCQkJY2FzZSBBdXRvbWF0aWNleHBlcmltZW50UGFja2FnZS5NT0RJRklBQkxFX1BBUkFNRVRFUl9fTE9XRVJfQk9VTkQ6DQorCQkJCXNldExvd2VyQm91bmQoKERvdWJsZSluZXdWYWx1ZSk7DQorCQkJCXJldHVybjsNCisJCQljYXNlIEF1dG9tYXRpY2V4cGVyaW1lbnRQYWNrYWdlLk1PRElGSUFCTEVfUEFSQU1FVEVSX19VUFBFUl9CT1VORDoNCisJCQkJc2V0VXBwZXJCb3VuZCgoRG91YmxlKW5ld1ZhbHVlKTsNCisJCQkJcmV0dXJuOw0KKwkJCWNhc2UgQXV0b21hdGljZXhwZXJpbWVudFBhY2thZ2UuTU9ESUZJQUJMRV9QQVJBTUVURVJfX1RBUkdFVF9VUkk6DQorCQkJCXNldFRhcmdldFVSSSgoVVJJKW5ld1ZhbHVlKTsNCisJCQkJcmV0dXJuOw0KKwkJfQ0KKwkJc3VwZXIuZVNldChmZWF0dXJlSUQsIG5ld1ZhbHVlKTsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCUBPdmVycmlkZQ0KKwlwdWJsaWMgdm9pZCBlVW5zZXQoaW50IGZlYXR1cmVJRCkgew0KKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsNCisJCQljYXNlIEF1dG9tYXRpY2V4cGVyaW1lbnRQYWNrYWdlLk1PRElGSUFCTEVfUEFSQU1FVEVSX19JTklUSUFMX1ZBTFVFOg0KKwkJCQlzZXRJbml0aWFsVmFsdWUoSU5JVElBTF9WQUxVRV9FREVGQVVMVCk7DQorCQkJCXJldHVybjsNCisJCQljYXNlIEF1dG9tYXRpY2V4cGVyaW1lbnRQYWNrYWdlLk1PRElGSUFCTEVfUEFSQU1FVEVSX19GRUFUVVJFOg0KKwkJCQlzZXRGZWF0dXJlKChFU3RydWN0dXJhbEZlYXR1cmUpbnVsbCk7DQorCQkJCXJldHVybjsNCisJCQljYXNlIEF1dG9tYXRpY2V4cGVyaW1lbnRQYWNrYWdlLk1PRElGSUFCTEVfUEFSQU1FVEVSX19TVEVQOg0KKwkJCQlzZXRTdGVwKFNURVBfRURFRkFVTFQpOw0KKwkJCQlyZXR1cm47DQorCQkJY2FzZSBBdXRvbWF0aWNleHBlcmltZW50UGFja2FnZS5NT0RJRklBQkxFX1BBUkFNRVRFUl9fRkVBVFVSRV9OQU1FOg0KKwkJCQlzZXRGZWF0dXJlTmFtZShGRUFUVVJFX05BTUVfRURFRkFVTFQpOw0KKwkJCQlyZXR1cm47DQorCQkJY2FzZSBBdXRvbWF0aWNleHBlcmltZW50UGFja2FnZS5NT0RJRklBQkxFX1BBUkFNRVRFUl9fTE9XRVJfQk9VTkQ6DQorCQkJCXNldExvd2VyQm91bmQoTE9XRVJfQk9VTkRfRURFRkFVTFQpOw0KKwkJCQlyZXR1cm47DQorCQkJY2FzZSBBdXRvbWF0aWNleHBlcmltZW50UGFja2FnZS5NT0RJRklBQkxFX1BBUkFNRVRFUl9fVVBQRVJfQk9VTkQ6DQorCQkJCXNldFVwcGVyQm91bmQoVVBQRVJfQk9VTkRfRURFRkFVTFQpOw0KKwkJCQlyZXR1cm47DQorCQkJY2FzZSBBdXRvbWF0aWNleHBlcmltZW50UGFja2FnZS5NT0RJRklBQkxFX1BBUkFNRVRFUl9fVEFSR0VUX1VSSToNCisJCQkJc2V0VGFyZ2V0VVJJKFRBUkdFVF9VUklfRURFRkFVTFQpOw0KKwkJCQlyZXR1cm47DQorCQl9DQorCQlzdXBlci5lVW5zZXQoZmVhdHVyZUlEKTsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCUBPdmVycmlkZQ0KKwlwdWJsaWMgYm9vbGVhbiBlSXNTZXQoaW50IGZlYXR1cmVJRCkgew0KKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsNCisJCQljYXNlIEF1dG9tYXRpY2V4cGVyaW1lbnRQYWNrYWdlLk1PRElGSUFCTEVfUEFSQU1FVEVSX19JTklUSUFMX1ZBTFVFOg0KKwkJCQlyZXR1cm4gaW5pdGlhbFZhbHVlICE9IElOSVRJQUxfVkFMVUVfRURFRkFVTFQ7DQorCQkJY2FzZSBBdXRvbWF0aWNleHBlcmltZW50UGFja2FnZS5NT0RJRklBQkxFX1BBUkFNRVRFUl9fRkVBVFVSRToNCisJCQkJcmV0dXJuIGZlYXR1cmUgIT0gbnVsbDsNCisJCQljYXNlIEF1dG9tYXRpY2V4cGVyaW1lbnRQYWNrYWdlLk1PRElGSUFCTEVfUEFSQU1FVEVSX19TVEVQOg0KKwkJCQlyZXR1cm4gc3RlcCAhPSBTVEVQX0VERUZBVUxUOw0KKwkJCWNhc2UgQXV0b21hdGljZXhwZXJpbWVudFBhY2thZ2UuTU9ESUZJQUJMRV9QQVJBTUVURVJfX0ZFQVRVUkVfTkFNRToNCisJCQkJcmV0dXJuIEZFQVRVUkVfTkFNRV9FREVGQVVMVCA9PSBudWxsID8gZmVhdHVyZU5hbWUgIT0gbnVsbCA6ICFGRUFUVVJFX05BTUVfRURFRkFVTFQuZXF1YWxzKGZlYXR1cmVOYW1lKTsNCisJCQljYXNlIEF1dG9tYXRpY2V4cGVyaW1lbnRQYWNrYWdlLk1PRElGSUFCTEVfUEFSQU1FVEVSX19MT1dFUl9CT1VORDoNCisJCQkJcmV0dXJuIGxvd2VyQm91bmQgIT0gTE9XRVJfQk9VTkRfRURFRkFVTFQ7DQorCQkJY2FzZSBBdXRvbWF0aWNleHBlcmltZW50UGFja2FnZS5NT0RJRklBQkxFX1BBUkFNRVRFUl9fVVBQRVJfQk9VTkQ6DQorCQkJCXJldHVybiB1cHBlckJvdW5kICE9IFVQUEVSX0JPVU5EX0VERUZBVUxUOw0KKwkJCWNhc2UgQXV0b21hdGljZXhwZXJpbWVudFBhY2thZ2UuTU9ESUZJQUJMRV9QQVJBTUVURVJfX1RBUkdFVF9VUkk6DQorCQkJCXJldHVybiBUQVJHRVRfVVJJX0VERUZBVUxUID09IG51bGwgPyB0YXJnZXRVUkkgIT0gbnVsbCA6ICFUQVJHRVRfVVJJX0VERUZBVUxULmVxdWFscyh0YXJnZXRVUkkpOw0KKwkJfQ0KKwkJcmV0dXJuIHN1cGVyLmVJc1NldChmZWF0dXJlSUQpOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJQE92ZXJyaWRlDQorCXB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKSB7DQorCQlpZiAoZUlzUHJveHkoKSkgcmV0dXJuIHN1cGVyLnRvU3RyaW5nKCk7DQorDQorCQlTdHJpbmdCdWZmZXIgcmVzdWx0ID0gbmV3IFN0cmluZ0J1ZmZlcihzdXBlci50b1N0cmluZygpKTsNCisJCXJlc3VsdC5hcHBlbmQoIiAoaW5pdGlhbFZhbHVlOiAiKTsNCisJCXJlc3VsdC5hcHBlbmQoaW5pdGlhbFZhbHVlKTsNCisJCXJlc3VsdC5hcHBlbmQoIiwgc3RlcDogIik7DQorCQlyZXN1bHQuYXBwZW5kKHN0ZXApOw0KKwkJcmVzdWx0LmFwcGVuZCgiLCBmZWF0dXJlTmFtZTogIik7DQorCQlyZXN1bHQuYXBwZW5kKGZlYXR1cmVOYW1lKTsNCisJCXJlc3VsdC5hcHBlbmQoIiwgbG93ZXJCb3VuZDogIik7DQorCQlyZXN1bHQuYXBwZW5kKGxvd2VyQm91bmQpOw0KKwkJcmVzdWx0LmFwcGVuZCgiLCB1cHBlckJvdW5kOiAiKTsNCisJCXJlc3VsdC5hcHBlbmQodXBwZXJCb3VuZCk7DQorCQlyZXN1bHQuYXBwZW5kKCIsIHRhcmdldFVSSTogIik7DQorCQlyZXN1bHQuYXBwZW5kKHRhcmdldFVSSSk7DQorCQlyZXN1bHQuYXBwZW5kKCcpJyk7DQorCQlyZXR1cm4gcmVzdWx0LnRvU3RyaW5nKCk7DQorCX0NCisNCit9IC8vTW9kaWZpYWJsZVBhcmFtZXRlckltcGwNCmRpZmYgLS1naXQgYS9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQvc3JjL29yZy9lY2xpcHNlL3N0ZW0vYW5hbHlzaXMvYXV0b21hdGljZXhwZXJpbWVudC9pbXBsL09wdGltaXplckFsZ29yaXRobUltcGwuamF2YSBiL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuYXV0b21hdGljZXhwZXJpbWVudC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9hbmFseXNpcy9hdXRvbWF0aWNleHBlcmltZW50L2ltcGwvT3B0aW1pemVyQWxnb3JpdGhtSW1wbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc2MzNkYTcKLS0tIC9kZXYvbnVsbAorKysgYi9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQvc3JjL29yZy9lY2xpcHNlL3N0ZW0vYW5hbHlzaXMvYXV0b21hdGljZXhwZXJpbWVudC9pbXBsL09wdGltaXplckFsZ29yaXRobUltcGwuamF2YQpAQCAtMCwwICsxLDQ3IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuYXV0b21hdGljZXhwZXJpbWVudC5pbXBsOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAKKyAqIENvcHlyaWdodCAoYykgMjAxMSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4gCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIAorICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wIAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQgCisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbCAKKyAqIAorICogQ29udHJpYnV0b3JzOiAKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuYXV0b21hdGljZXhwZXJpbWVudC5BdXRvbWF0aWNleHBlcmltZW50UGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQuT3B0aW1pemVyQWxnb3JpdGhtOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uaW1wbC5JZGVudGlmaWFibGVJbXBsOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiBBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+T3B0aW1pemVyIEFsZ29yaXRobTwvYj48L2VtPicuCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIDxwPgorICogPC9wPgorICoKKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIE9wdGltaXplckFsZ29yaXRobUltcGwgZXh0ZW5kcyBJZGVudGlmaWFibGVJbXBsIGltcGxlbWVudHMgT3B0aW1pemVyQWxnb3JpdGhtIHsKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgT3B0aW1pemVyQWxnb3JpdGhtSW1wbCgpIHsKKwkJc3VwZXIoKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgRUNsYXNzIGVTdGF0aWNDbGFzcygpIHsKKwkJcmV0dXJuIEF1dG9tYXRpY2V4cGVyaW1lbnRQYWNrYWdlLkxpdGVyYWxzLk9QVElNSVpFUl9BTEdPUklUSE07CisJfQorCit9IC8vT3B0aW1pemVyQWxnb3JpdGhtSW1wbApkaWZmIC0tZ2l0IGEvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5hdXRvbWF0aWNleHBlcmltZW50L3NyYy9vcmcvZWNsaXBzZS9zdGVtL2FuYWx5c2lzL2F1dG9tYXRpY2V4cGVyaW1lbnQvcGVyc3BlY3RpdmVzL0F1dG9tYXRpY0V4cGVyaW1lbnQuamF2YSBiL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuYXV0b21hdGljZXhwZXJpbWVudC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9hbmFseXNpcy9hdXRvbWF0aWNleHBlcmltZW50L3BlcnNwZWN0aXZlcy9BdXRvbWF0aWNFeHBlcmltZW50LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDcwNGUxMgotLS0gL2Rldi9udWxsCisrKyBiL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuYXV0b21hdGljZXhwZXJpbWVudC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9hbmFseXNpcy9hdXRvbWF0aWNleHBlcmltZW50L3BlcnNwZWN0aXZlcy9BdXRvbWF0aWNFeHBlcmltZW50LmphdmEKQEAgLTAsMCArMSw3MCBAQAorLy8gQW5hbHlzaXMuamF2YQorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQucGVyc3BlY3RpdmVzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuYXV0b21hdGljZXhwZXJpbWVudC52aWV3cy5BdXRvRXhwVmlldzsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuQ29uc3RhbnRzOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklGb2xkZXJMYXlvdXQ7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuSVBhZ2VMYXlvdXQ7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuSVBlcnNwZWN0aXZlRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5uYXZpZ2F0b3IucmVzb3VyY2VzLlByb2plY3RFeHBsb3JlcjsKKworCisvKioKKyAqIFRoaXMgY2xhc3MgaW1wbGVtZW50cyB0aGUgIkFuYWx5c2lzIiBwZXJzcGVjdGl2ZSBvZiBTVEVNLiBUaGlzIHBlcnNwZWN0aXZlIGlzCisgKiB1c2VkIHRvIHJldmlldyBhbmQgY29tcGFyZSB0aGUgcmVzdWx0cyBvZiBkaWZmZXJlbnQgcnVucy4KKyAqLworcHVibGljIGNsYXNzIEF1dG9tYXRpY0V4cGVyaW1lbnQgaW1wbGVtZW50cyBJUGVyc3BlY3RpdmVGYWN0b3J5IHsKKworCS8qKgorCSAqIFRoZSBpZGVudGlmaWVyIG9mIHRoZSBEZXNpZ25lciBQZXJzcGVjdGl2ZQorCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIElEX1NURU1fQVVUT01BVElDX0VYUEVSSU1FTlRfUEVSU1BFQ1RJVkUgPSBDb25zdGFudHMuSURfUk9PVAorCQkJKyAiLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQucGVyc3BlY3RpdmUiOyAvLyROT04tTkxTLTEkCisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnVpLklQZXJzcGVjdGl2ZUZhY3RvcnkjY3JlYXRlSW5pdGlhbExheW91dChvcmcuZWNsaXBzZS51aQorCSAqICAgICAgLklQYWdlTGF5b3V0KQorCSAqLworCXB1YmxpYyB2b2lkIGNyZWF0ZUluaXRpYWxMYXlvdXQoZmluYWwgSVBhZ2VMYXlvdXQgbGF5b3V0KSB7CisJCWZpbmFsIFN0cmluZyBlZGl0b3JBcmVhID0gbGF5b3V0LmdldEVkaXRvckFyZWEoKTsKKworCQkvLyBXZSBkb24ndCB3YW50IHRvIHNlZSB0aGUgZWRpdG9yCisJCWxheW91dC5zZXRFZGl0b3JBcmVhVmlzaWJsZShmYWxzZSk7CisJCS8vIFB1dCB0aGUgU1RFTSBBbmFseXNpcyBWaWV3IGJ5IGl0c2VsZiBvbiB0aGUgdG9wCisJCWxheW91dC5hZGRTdGFuZGFsb25lVmlldyhBdXRvRXhwVmlldy5JRF9BdXRvRXhwX1ZJRVcsIHRydWUsIElQYWdlTGF5b3V0LlJJR0hULAorCQkJCTAuMGYsIGVkaXRvckFyZWEpOworCQkKKwkJLy8gUHV0IHRoZSBQcm9qZWN0RXhwbG9yZXIgdmlldyBvbiB0aGUgbGVmdAorCQlmaW5hbCBJRm9sZGVyTGF5b3V0IGxlZnQgPSBsYXlvdXQuY3JlYXRlRm9sZGVyKCJsZWZ0IiwgSVBhZ2VMYXlvdXQuTEVGVCwgMC4yMGYsIEF1dG9FeHBWaWV3LklEX0F1dG9FeHBfVklFVyk7CisJCWxlZnQuYWRkVmlldyhQcm9qZWN0RXhwbG9yZXIuVklFV19JRCk7CisJCQorCQkvLyBQdXQgdGhlIEVycm9yIExvZworCQlmaW5hbCBJRm9sZGVyTGF5b3V0IGJvdHRvbSA9IGxheW91dC5jcmVhdGVGb2xkZXIoInJpZ2h0IiwgSVBhZ2VMYXlvdXQuQk9UVE9NLCAvLyROT04tTkxTLTEkCisJCQkJMC42MGYsIEF1dG9FeHBWaWV3LklEX0F1dG9FeHBfVklFVyk7CisJCS8vIGFkZCBFcnJvciBMb2cgdmlldworCQlib3R0b20uYWRkVmlldygib3JnLmVjbGlwc2UucGRlLnJ1bnRpbWUuTG9nVmlldyIpOyAvLyROT04tTkxTLTEkCisJCQorCQkvLyBhZGQgdGhlIHZpZXcgdG8gdGhlICJTaG93IFZpZXdzIiBtZW51CisJCWxheW91dC5hZGRTaG93Vmlld1Nob3J0Y3V0KEF1dG9FeHBWaWV3LklEX0F1dG9FeHBfVklFVyk7CisJCQorCQkvLyBXZSBkb24ndCB3YW50IHRvIHNlZSB0aGUgZWRpdG9yCisJCWxheW91dC5zZXRFZGl0b3JBcmVhVmlzaWJsZShmYWxzZSk7CisKKwkJLy8gQWRkIHRoZSBBbmFseXNpcyBwZXJzcGVjdGl2ZSB0byB0aGUgIk9wZW4gUGVyc3BlY3RpdmUiIG1lbnUKKwkJbGF5b3V0LmFkZFBlcnNwZWN0aXZlU2hvcnRjdXQoSURfU1RFTV9BVVRPTUFUSUNfRVhQRVJJTUVOVF9QRVJTUEVDVElWRSk7CisKKwkJCisJfSAvLyBjcmVhdGVJbml0aWFsTGF5b3V0CisKK30gLy8gQW5hbHlzaXMKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQvc3JjL29yZy9lY2xpcHNlL3N0ZW0vYW5hbHlzaXMvYXV0b21hdGljZXhwZXJpbWVudC9wcmVzZW50YXRpb24vQXV0b21hdGljZXhwZXJpbWVudEFjdGlvbkJhckNvbnRyaWJ1dG9yLmphdmEgYi9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQvc3JjL29yZy9lY2xpcHNlL3N0ZW0vYW5hbHlzaXMvYXV0b21hdGljZXhwZXJpbWVudC9wcmVzZW50YXRpb24vQXV0b21hdGljZXhwZXJpbWVudEFjdGlvbkJhckNvbnRyaWJ1dG9yLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzJhZDNkMwotLS0gL2Rldi9udWxsCisrKyBiL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuYXV0b21hdGljZXhwZXJpbWVudC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9hbmFseXNpcy9hdXRvbWF0aWNleHBlcmltZW50L3ByZXNlbnRhdGlvbi9BdXRvbWF0aWNleHBlcmltZW50QWN0aW9uQmFyQ29udHJpYnV0b3IuamF2YQpAQCAtMCwwICsxLDQyOSBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQucHJlc2VudGF0aW9uOw0KKw0KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorICogQ29weXJpZ2h0IChjKSAyMDA5IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLg0KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMNCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjANCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdA0KKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sDQorICoNCisgKiBDb250cmlidXRvcnM6DQorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbg0KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KKw0KK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0Ow0KK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsNCisNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51aS52aWV3ZXIuSVZpZXdlclByb3ZpZGVyOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5kb21haW4uRWRpdGluZ0RvbWFpbjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQuZG9tYWluLklFZGl0aW5nRG9tYWluUHJvdmlkZXI7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmFjdGlvbi5Db250cm9sQWN0aW9uOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5hY3Rpb24uQ3JlYXRlQ2hpbGRBY3Rpb247DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmFjdGlvbi5DcmVhdGVTaWJsaW5nQWN0aW9uOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5hY3Rpb24uRWRpdGluZ0RvbWFpbkFjdGlvbkJhckNvbnRyaWJ1dG9yOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5hY3Rpb24uTG9hZFJlc291cmNlQWN0aW9uOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5hY3Rpb24uVmFsaWRhdGVBY3Rpb247DQoraW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5BY3Rpb247DQoraW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5BY3Rpb25Db250cmlidXRpb25JdGVtOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSUFjdGlvbjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklDb250cmlidXRpb25JdGVtOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSUNvbnRyaWJ1dGlvbk1hbmFnZXI7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JTWVudUxpc3RlbmVyOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSU1lbnVNYW5hZ2VyOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSVRvb2xCYXJNYW5hZ2VyOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uTWVudU1hbmFnZXI7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5TZXBhcmF0b3I7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5TdWJDb250cmlidXRpb25JdGVtOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb247DQoraW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uUHJvdmlkZXI7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVN0cnVjdHVyZWRTZWxlY3Rpb247DQoraW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuU2VsZWN0aW9uQ2hhbmdlZEV2ZW50Ow0KK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlZpZXdlcjsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5hdXRvbWF0aWNleHBlcmltZW50LnByb3ZpZGVyLkF1dG9tYXRpY2V4cGVyaWVuY2VFZGl0UGx1Z2luOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5JRWRpdG9yUGFydDsNCitpbXBvcnQgb3JnLmVjbGlwc2UudWkuUGFydEluaXRFeGNlcHRpb247DQorDQorDQorLyoqDQorICogVGhpcyBpcyB0aGUgYWN0aW9uIGJhciBjb250cmlidXRvciBmb3IgdGhlIEF1dG9tYXRpY2V4cGVyaW1lbnQgbW9kZWwgZWRpdG9yLg0KKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorICogQGdlbmVyYXRlZA0KKyAqLw0KK3B1YmxpYyBjbGFzcyBBdXRvbWF0aWNleHBlcmltZW50QWN0aW9uQmFyQ29udHJpYnV0b3INCisJZXh0ZW5kcyBFZGl0aW5nRG9tYWluQWN0aW9uQmFyQ29udHJpYnV0b3INCisJaW1wbGVtZW50cyBJU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyIHsNCisJLyoqDQorCSAqIFRoaXMga2VlcHMgdHJhY2sgb2YgdGhlIGFjdGl2ZSBlZGl0b3IuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgSUVkaXRvclBhcnQgYWN0aXZlRWRpdG9yUGFydDsNCisNCisJLyoqDQorCSAqIFRoaXMga2VlcHMgdHJhY2sgb2YgdGhlIGN1cnJlbnQgc2VsZWN0aW9uIHByb3ZpZGVyLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIElTZWxlY3Rpb25Qcm92aWRlciBzZWxlY3Rpb25Qcm92aWRlcjsNCisNCisJLyoqDQorCSAqIFRoaXMgYWN0aW9uIG9wZW5zIHRoZSBQcm9wZXJ0aWVzIHZpZXcuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgSUFjdGlvbiBzaG93UHJvcGVydGllc1ZpZXdBY3Rpb24gPQ0KKwkJbmV3IEFjdGlvbihBdXRvbWF0aWNleHBlcmllbmNlRWRpdFBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoIl9VSV9TaG93UHJvcGVydGllc1ZpZXdfbWVudV9pdGVtIikpIHsNCisJCQlAT3ZlcnJpZGUNCisJCQlwdWJsaWMgdm9pZCBydW4oKSB7DQorCQkJCXRyeSB7DQorCQkJCQlnZXRQYWdlKCkuc2hvd1ZpZXcoIm9yZy5lY2xpcHNlLnVpLnZpZXdzLlByb3BlcnR5U2hlZXQiKTsNCisJCQkJfQ0KKwkJCQljYXRjaCAoUGFydEluaXRFeGNlcHRpb24gZXhjZXB0aW9uKSB7DQorCQkJCQlBdXRvbWF0aWNleHBlcmllbmNlRWRpdFBsdWdpbi5JTlNUQU5DRS5sb2coZXhjZXB0aW9uKTsNCisJCQkJfQ0KKwkJCX0NCisJCX07DQorDQorCS8qKg0KKwkgKiBUaGlzIGFjdGlvbiByZWZyZXNoZXMgdGhlIHZpZXdlciBvZiB0aGUgY3VycmVudCBlZGl0b3IgaWYgdGhlIGVkaXRvcg0KKwkgKiBpbXBsZW1lbnRzIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnVpLnZpZXdlci5JVmlld2VyUHJvdmlkZXJ9Lg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIElBY3Rpb24gcmVmcmVzaFZpZXdlckFjdGlvbiA9DQorCQluZXcgQWN0aW9uKEF1dG9tYXRpY2V4cGVyaWVuY2VFZGl0UGx1Z2luLklOU1RBTkNFLmdldFN0cmluZygiX1VJX1JlZnJlc2hWaWV3ZXJfbWVudV9pdGVtIikpIHsNCisJCQlAT3ZlcnJpZGUNCisJCQlwdWJsaWMgYm9vbGVhbiBpc0VuYWJsZWQoKSB7DQorCQkJCXJldHVybiBhY3RpdmVFZGl0b3JQYXJ0IGluc3RhbmNlb2YgSVZpZXdlclByb3ZpZGVyOw0KKwkJCX0NCisNCisJCQlAT3ZlcnJpZGUNCisJCQlwdWJsaWMgdm9pZCBydW4oKSB7DQorCQkJCWlmIChhY3RpdmVFZGl0b3JQYXJ0IGluc3RhbmNlb2YgSVZpZXdlclByb3ZpZGVyKSB7DQorCQkJCQlWaWV3ZXIgdmlld2VyID0gKChJVmlld2VyUHJvdmlkZXIpYWN0aXZlRWRpdG9yUGFydCkuZ2V0Vmlld2VyKCk7DQorCQkJCQlpZiAodmlld2VyICE9IG51bGwpIHsNCisJCQkJCQl2aWV3ZXIucmVmcmVzaCgpOw0KKwkJCQkJfQ0KKwkJCQl9DQorCQkJfQ0KKwkJfTsNCisNCisJLyoqDQorCSAqIFRoaXMgd2lsbCBjb250YWluIG9uZSB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkuYWN0aW9uLkNyZWF0ZUNoaWxkQWN0aW9ufSBjb3JyZXNwb25kaW5nIHRvIGVhY2ggZGVzY3JpcHRvcg0KKwkgKiBnZW5lcmF0ZWQgZm9yIHRoZSBjdXJyZW50IHNlbGVjdGlvbiBieSB0aGUgaXRlbSBwcm92aWRlci4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCBDb2xsZWN0aW9uPElBY3Rpb24+IGNyZWF0ZUNoaWxkQWN0aW9uczsNCisNCisJLyoqDQorCSAqIFRoaXMgaXMgdGhlIG1lbnUgbWFuYWdlciBpbnRvIHdoaWNoIG1lbnUgY29udHJpYnV0aW9uIGl0ZW1zIHNob3VsZCBiZSBhZGRlZCBmb3IgQ3JlYXRlQ2hpbGQgYWN0aW9ucy4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCBJTWVudU1hbmFnZXIgY3JlYXRlQ2hpbGRNZW51TWFuYWdlcjsNCisNCisJLyoqDQorCSAqIFRoaXMgd2lsbCBjb250YWluIG9uZSB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkuYWN0aW9uLkNyZWF0ZVNpYmxpbmdBY3Rpb259IGNvcnJlc3BvbmRpbmcgdG8gZWFjaCBkZXNjcmlwdG9yDQorCSAqIGdlbmVyYXRlZCBmb3IgdGhlIGN1cnJlbnQgc2VsZWN0aW9uIGJ5IHRoZSBpdGVtIHByb3ZpZGVyLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIENvbGxlY3Rpb248SUFjdGlvbj4gY3JlYXRlU2libGluZ0FjdGlvbnM7DQorDQorCS8qKg0KKwkgKiBUaGlzIGlzIHRoZSBtZW51IG1hbmFnZXIgaW50byB3aGljaCBtZW51IGNvbnRyaWJ1dGlvbiBpdGVtcyBzaG91bGQgYmUgYWRkZWQgZm9yIENyZWF0ZVNpYmxpbmcgYWN0aW9ucy4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCBJTWVudU1hbmFnZXIgY3JlYXRlU2libGluZ01lbnVNYW5hZ2VyOw0KKw0KKwkvKioNCisJICogVGhpcyBjcmVhdGVzIGFuIGluc3RhbmNlIG9mIHRoZSBjb250cmlidXRvci4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBBdXRvbWF0aWNleHBlcmltZW50QWN0aW9uQmFyQ29udHJpYnV0b3IoKSB7DQorCQlzdXBlcihBRERJVElPTlNfTEFTVF9TVFlMRSk7DQorCQlsb2FkUmVzb3VyY2VBY3Rpb24gPSBuZXcgTG9hZFJlc291cmNlQWN0aW9uKCk7DQorCQl2YWxpZGF0ZUFjdGlvbiA9IG5ldyBWYWxpZGF0ZUFjdGlvbigpOw0KKwkJY29udHJvbEFjdGlvbiA9IG5ldyBDb250cm9sQWN0aW9uKCk7DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgYWRkcyBTZXBhcmF0b3JzIGZvciBlZGl0b3IgYWRkaXRpb25zIHRvIHRoZSB0b29sIGJhci4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCUBPdmVycmlkZQ0KKwlwdWJsaWMgdm9pZCBjb250cmlidXRlVG9Ub29sQmFyKElUb29sQmFyTWFuYWdlciB0b29sQmFyTWFuYWdlcikgew0KKwkJdG9vbEJhck1hbmFnZXIuYWRkKG5ldyBTZXBhcmF0b3IoImF1dG9tYXRpY2V4cGVyaW1lbnQtc2V0dGluZ3MiKSk7DQorCQl0b29sQmFyTWFuYWdlci5hZGQobmV3IFNlcGFyYXRvcigiYXV0b21hdGljZXhwZXJpbWVudC1hZGRpdGlvbnMiKSk7DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgYWRkcyB0byB0aGUgbWVudSBiYXIgYSBtZW51IGFuZCBzb21lIHNlcGFyYXRvcnMgZm9yIGVkaXRvciBhZGRpdGlvbnMsDQorCSAqIGFzIHdlbGwgYXMgdGhlIHN1Yi1tZW51cyBmb3Igb2JqZWN0IGNyZWF0aW9uIGl0ZW1zLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJQE92ZXJyaWRlDQorCXB1YmxpYyB2b2lkIGNvbnRyaWJ1dGVUb01lbnUoSU1lbnVNYW5hZ2VyIG1lbnVNYW5hZ2VyKSB7DQorCQlzdXBlci5jb250cmlidXRlVG9NZW51KG1lbnVNYW5hZ2VyKTsNCisNCisJCUlNZW51TWFuYWdlciBzdWJtZW51TWFuYWdlciA9IG5ldyBNZW51TWFuYWdlcihBdXRvbWF0aWNleHBlcmllbmNlRWRpdFBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoIl9VSV9BdXRvbWF0aWNleHBlcmltZW50RWRpdG9yX21lbnUiKSwgIm9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuYXV0b21hdGljZXhwZXJpbWVudE1lbnVJRCIpOw0KKwkJbWVudU1hbmFnZXIuaW5zZXJ0QWZ0ZXIoImFkZGl0aW9ucyIsIHN1Ym1lbnVNYW5hZ2VyKTsNCisJCXN1Ym1lbnVNYW5hZ2VyLmFkZChuZXcgU2VwYXJhdG9yKCJzZXR0aW5ncyIpKTsNCisJCXN1Ym1lbnVNYW5hZ2VyLmFkZChuZXcgU2VwYXJhdG9yKCJhY3Rpb25zIikpOw0KKwkJc3VibWVudU1hbmFnZXIuYWRkKG5ldyBTZXBhcmF0b3IoImFkZGl0aW9ucyIpKTsNCisJCXN1Ym1lbnVNYW5hZ2VyLmFkZChuZXcgU2VwYXJhdG9yKCJhZGRpdGlvbnMtZW5kIikpOw0KKw0KKwkJLy8gUHJlcGFyZSBmb3IgQ3JlYXRlQ2hpbGQgaXRlbSBhZGRpdGlvbiBvciByZW1vdmFsLg0KKwkJLy8NCisJCWNyZWF0ZUNoaWxkTWVudU1hbmFnZXIgPSBuZXcgTWVudU1hbmFnZXIoQXV0b21hdGljZXhwZXJpZW5jZUVkaXRQbHVnaW4uSU5TVEFOQ0UuZ2V0U3RyaW5nKCJfVUlfQ3JlYXRlQ2hpbGRfbWVudV9pdGVtIikpOw0KKwkJc3VibWVudU1hbmFnZXIuaW5zZXJ0QmVmb3JlKCJhZGRpdGlvbnMiLCBjcmVhdGVDaGlsZE1lbnVNYW5hZ2VyKTsNCisNCisJCS8vIFByZXBhcmUgZm9yIENyZWF0ZVNpYmxpbmcgaXRlbSBhZGRpdGlvbiBvciByZW1vdmFsLg0KKwkJLy8NCisJCWNyZWF0ZVNpYmxpbmdNZW51TWFuYWdlciA9IG5ldyBNZW51TWFuYWdlcihBdXRvbWF0aWNleHBlcmllbmNlRWRpdFBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoIl9VSV9DcmVhdGVTaWJsaW5nX21lbnVfaXRlbSIpKTsNCisJCXN1Ym1lbnVNYW5hZ2VyLmluc2VydEJlZm9yZSgiYWRkaXRpb25zIiwgY3JlYXRlU2libGluZ01lbnVNYW5hZ2VyKTsNCisNCisJCS8vIEZvcmNlIGFuIHVwZGF0ZSBiZWNhdXNlIEVjbGlwc2UgaGlkZXMgZW1wdHkgbWVudXMgbm93Lg0KKwkJLy8NCisJCXN1Ym1lbnVNYW5hZ2VyLmFkZE1lbnVMaXN0ZW5lcg0KKwkJCShuZXcgSU1lbnVMaXN0ZW5lcigpIHsNCisJCQkJIHB1YmxpYyB2b2lkIG1lbnVBYm91dFRvU2hvdyhJTWVudU1hbmFnZXIgbWVudU1hbmFnZXIpIHsNCisJCQkJCSBtZW51TWFuYWdlci51cGRhdGVBbGwodHJ1ZSk7DQorCQkJCSB9DQorCQkJIH0pOw0KKw0KKwkJYWRkR2xvYmFsQWN0aW9ucyhzdWJtZW51TWFuYWdlcik7DQorCX0NCisNCisJLyoqDQorCSAqIFdoZW4gdGhlIGFjdGl2ZSBlZGl0b3IgY2hhbmdlcywgdGhpcyByZW1lbWJlcnMgdGhlIGNoYW5nZSBhbmQgcmVnaXN0ZXJzIHdpdGggaXQgYXMgYSBzZWxlY3Rpb24gcHJvdmlkZXIuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlAT3ZlcnJpZGUNCisJcHVibGljIHZvaWQgc2V0QWN0aXZlRWRpdG9yKElFZGl0b3JQYXJ0IHBhcnQpIHsNCisJCXN1cGVyLnNldEFjdGl2ZUVkaXRvcihwYXJ0KTsNCisJCWFjdGl2ZUVkaXRvclBhcnQgPSBwYXJ0Ow0KKw0KKwkJLy8gU3dpdGNoIHRvIHRoZSBuZXcgc2VsZWN0aW9uIHByb3ZpZGVyLg0KKwkJLy8NCisJCWlmIChzZWxlY3Rpb25Qcm92aWRlciAhPSBudWxsKSB7DQorCQkJc2VsZWN0aW9uUHJvdmlkZXIucmVtb3ZlU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyKHRoaXMpOw0KKwkJfQ0KKwkJaWYgKHBhcnQgPT0gbnVsbCkgew0KKwkJCXNlbGVjdGlvblByb3ZpZGVyID0gbnVsbDsNCisJCX0NCisJCWVsc2Ugew0KKwkJCXNlbGVjdGlvblByb3ZpZGVyID0gcGFydC5nZXRTaXRlKCkuZ2V0U2VsZWN0aW9uUHJvdmlkZXIoKTsNCisJCQlzZWxlY3Rpb25Qcm92aWRlci5hZGRTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIodGhpcyk7DQorDQorCQkJLy8gRmFrZSBhIHNlbGVjdGlvbiBjaGFuZ2VkIGV2ZW50IHRvIHVwZGF0ZSB0aGUgbWVudXMuDQorCQkJLy8NCisJCQlpZiAoc2VsZWN0aW9uUHJvdmlkZXIuZ2V0U2VsZWN0aW9uKCkgIT0gbnVsbCkgew0KKwkJCQlzZWxlY3Rpb25DaGFuZ2VkKG5ldyBTZWxlY3Rpb25DaGFuZ2VkRXZlbnQoc2VsZWN0aW9uUHJvdmlkZXIsIHNlbGVjdGlvblByb3ZpZGVyLmdldFNlbGVjdGlvbigpKSk7DQorCQkJfQ0KKwkJfQ0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIGltcGxlbWVudHMge0BsaW5rIG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcn0sDQorCSAqIGhhbmRsaW5nIHtAbGluayBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlNlbGVjdGlvbkNoYW5nZWRFdmVudH1zIGJ5IHF1ZXJ5aW5nIGZvciB0aGUgY2hpbGRyZW4gYW5kIHNpYmxpbmdzDQorCSAqIHRoYXQgY2FuIGJlIGFkZGVkIHRvIHRoZSBzZWxlY3RlZCBvYmplY3QgYW5kIHVwZGF0aW5nIHRoZSBtZW51cyBhY2NvcmRpbmdseS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyB2b2lkIHNlbGVjdGlvbkNoYW5nZWQoU2VsZWN0aW9uQ2hhbmdlZEV2ZW50IGV2ZW50KSB7DQorCQkvLyBSZW1vdmUgYW55IG1lbnUgaXRlbXMgZm9yIG9sZCBzZWxlY3Rpb24uDQorCQkvLw0KKwkJaWYgKGNyZWF0ZUNoaWxkTWVudU1hbmFnZXIgIT0gbnVsbCkgew0KKwkJCWRlcG9wdWxhdGVNYW5hZ2VyKGNyZWF0ZUNoaWxkTWVudU1hbmFnZXIsIGNyZWF0ZUNoaWxkQWN0aW9ucyk7DQorCQl9DQorCQlpZiAoY3JlYXRlU2libGluZ01lbnVNYW5hZ2VyICE9IG51bGwpIHsNCisJCQlkZXBvcHVsYXRlTWFuYWdlcihjcmVhdGVTaWJsaW5nTWVudU1hbmFnZXIsIGNyZWF0ZVNpYmxpbmdBY3Rpb25zKTsNCisJCX0NCisNCisJCS8vIFF1ZXJ5IHRoZSBuZXcgc2VsZWN0aW9uIGZvciBhcHByb3ByaWF0ZSBuZXcgY2hpbGQvc2libGluZyBkZXNjcmlwdG9ycw0KKwkJLy8NCisJCUNvbGxlY3Rpb248Pz4gbmV3Q2hpbGREZXNjcmlwdG9ycyA9IG51bGw7DQorCQlDb2xsZWN0aW9uPD8+IG5ld1NpYmxpbmdEZXNjcmlwdG9ycyA9IG51bGw7DQorDQorCQlJU2VsZWN0aW9uIHNlbGVjdGlvbiA9IGV2ZW50LmdldFNlbGVjdGlvbigpOw0KKwkJaWYgKHNlbGVjdGlvbiBpbnN0YW5jZW9mIElTdHJ1Y3R1cmVkU2VsZWN0aW9uICYmICgoSVN0cnVjdHVyZWRTZWxlY3Rpb24pc2VsZWN0aW9uKS5zaXplKCkgPT0gMSkgew0KKwkJCU9iamVjdCBvYmplY3QgPSAoKElTdHJ1Y3R1cmVkU2VsZWN0aW9uKXNlbGVjdGlvbikuZ2V0Rmlyc3RFbGVtZW50KCk7DQorDQorCQkJRWRpdGluZ0RvbWFpbiBkb21haW4gPSAoKElFZGl0aW5nRG9tYWluUHJvdmlkZXIpYWN0aXZlRWRpdG9yUGFydCkuZ2V0RWRpdGluZ0RvbWFpbigpOw0KKw0KKwkJCW5ld0NoaWxkRGVzY3JpcHRvcnMgPSBkb21haW4uZ2V0TmV3Q2hpbGREZXNjcmlwdG9ycyhvYmplY3QsIG51bGwpOw0KKwkJCW5ld1NpYmxpbmdEZXNjcmlwdG9ycyA9IGRvbWFpbi5nZXROZXdDaGlsZERlc2NyaXB0b3JzKG51bGwsIG9iamVjdCk7DQorCQl9DQorDQorCQkvLyBHZW5lcmF0ZSBhY3Rpb25zIGZvciBzZWxlY3Rpb247IHBvcHVsYXRlIGFuZCByZWRyYXcgdGhlIG1lbnVzLg0KKwkJLy8NCisJCWNyZWF0ZUNoaWxkQWN0aW9ucyA9IGdlbmVyYXRlQ3JlYXRlQ2hpbGRBY3Rpb25zKG5ld0NoaWxkRGVzY3JpcHRvcnMsIHNlbGVjdGlvbik7DQorCQljcmVhdGVTaWJsaW5nQWN0aW9ucyA9IGdlbmVyYXRlQ3JlYXRlU2libGluZ0FjdGlvbnMobmV3U2libGluZ0Rlc2NyaXB0b3JzLCBzZWxlY3Rpb24pOw0KKw0KKwkJaWYgKGNyZWF0ZUNoaWxkTWVudU1hbmFnZXIgIT0gbnVsbCkgew0KKwkJCXBvcHVsYXRlTWFuYWdlcihjcmVhdGVDaGlsZE1lbnVNYW5hZ2VyLCBjcmVhdGVDaGlsZEFjdGlvbnMsIG51bGwpOw0KKwkJCWNyZWF0ZUNoaWxkTWVudU1hbmFnZXIudXBkYXRlKHRydWUpOw0KKwkJfQ0KKwkJaWYgKGNyZWF0ZVNpYmxpbmdNZW51TWFuYWdlciAhPSBudWxsKSB7DQorCQkJcG9wdWxhdGVNYW5hZ2VyKGNyZWF0ZVNpYmxpbmdNZW51TWFuYWdlciwgY3JlYXRlU2libGluZ0FjdGlvbnMsIG51bGwpOw0KKwkJCWNyZWF0ZVNpYmxpbmdNZW51TWFuYWdlci51cGRhdGUodHJ1ZSk7DQorCQl9DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgZ2VuZXJhdGVzIGEge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmFjdGlvbi5DcmVhdGVDaGlsZEFjdGlvbn0gZm9yIGVhY2ggb2JqZWN0IGluIDxjb2RlPmRlc2NyaXB0b3JzPC9jb2RlPiwNCisJICogYW5kIHJldHVybnMgdGhlIGNvbGxlY3Rpb24gb2YgdGhlc2UgYWN0aW9ucy4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCBDb2xsZWN0aW9uPElBY3Rpb24+IGdlbmVyYXRlQ3JlYXRlQ2hpbGRBY3Rpb25zKENvbGxlY3Rpb248Pz4gZGVzY3JpcHRvcnMsIElTZWxlY3Rpb24gc2VsZWN0aW9uKSB7DQorCQlDb2xsZWN0aW9uPElBY3Rpb24+IGFjdGlvbnMgPSBuZXcgQXJyYXlMaXN0PElBY3Rpb24+KCk7DQorCQlpZiAoZGVzY3JpcHRvcnMgIT0gbnVsbCkgew0KKwkJCWZvciAoT2JqZWN0IGRlc2NyaXB0b3IgOiBkZXNjcmlwdG9ycykgew0KKwkJCQlhY3Rpb25zLmFkZChuZXcgQ3JlYXRlQ2hpbGRBY3Rpb24oYWN0aXZlRWRpdG9yUGFydCwgc2VsZWN0aW9uLCBkZXNjcmlwdG9yKSk7DQorCQkJfQ0KKwkJfQ0KKwkJcmV0dXJuIGFjdGlvbnM7DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgZ2VuZXJhdGVzIGEge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmFjdGlvbi5DcmVhdGVTaWJsaW5nQWN0aW9ufSBmb3IgZWFjaCBvYmplY3QgaW4gPGNvZGU+ZGVzY3JpcHRvcnM8L2NvZGU+LA0KKwkgKiBhbmQgcmV0dXJucyB0aGUgY29sbGVjdGlvbiBvZiB0aGVzZSBhY3Rpb25zLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIENvbGxlY3Rpb248SUFjdGlvbj4gZ2VuZXJhdGVDcmVhdGVTaWJsaW5nQWN0aW9ucyhDb2xsZWN0aW9uPD8+IGRlc2NyaXB0b3JzLCBJU2VsZWN0aW9uIHNlbGVjdGlvbikgew0KKwkJQ29sbGVjdGlvbjxJQWN0aW9uPiBhY3Rpb25zID0gbmV3IEFycmF5TGlzdDxJQWN0aW9uPigpOw0KKwkJaWYgKGRlc2NyaXB0b3JzICE9IG51bGwpIHsNCisJCQlmb3IgKE9iamVjdCBkZXNjcmlwdG9yIDogZGVzY3JpcHRvcnMpIHsNCisJCQkJYWN0aW9ucy5hZGQobmV3IENyZWF0ZVNpYmxpbmdBY3Rpb24oYWN0aXZlRWRpdG9yUGFydCwgc2VsZWN0aW9uLCBkZXNjcmlwdG9yKSk7DQorCQkJfQ0KKwkJfQ0KKwkJcmV0dXJuIGFjdGlvbnM7DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgcG9wdWxhdGVzIHRoZSBzcGVjaWZpZWQgPGNvZGU+bWFuYWdlcjwvY29kZT4gd2l0aCB7QGxpbmsgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLkFjdGlvbkNvbnRyaWJ1dGlvbkl0ZW19cw0KKwkgKiBiYXNlZCBvbiB0aGUge0BsaW5rIG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JQWN0aW9ufXMgY29udGFpbmVkIGluIHRoZSA8Y29kZT5hY3Rpb25zPC9jb2RlPiBjb2xsZWN0aW9uLA0KKwkgKiBieSBpbnNlcnRpbmcgdGhlbSBiZWZvcmUgdGhlIHNwZWNpZmllZCBjb250cmlidXRpb24gaXRlbSA8Y29kZT5jb250cmlidXRpb25JRDwvY29kZT4uDQorCSAqIElmIDxjb2RlPmNvbnRyaWJ1dGlvbklEPC9jb2RlPiBpcyA8Y29kZT5udWxsPC9jb2RlPiwgdGhleSBhcmUgc2ltcGx5IGFkZGVkLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIHZvaWQgcG9wdWxhdGVNYW5hZ2VyKElDb250cmlidXRpb25NYW5hZ2VyIG1hbmFnZXIsIENvbGxlY3Rpb248PyBleHRlbmRzIElBY3Rpb24+IGFjdGlvbnMsIFN0cmluZyBjb250cmlidXRpb25JRCkgew0KKwkJaWYgKGFjdGlvbnMgIT0gbnVsbCkgew0KKwkJCWZvciAoSUFjdGlvbiBhY3Rpb24gOiBhY3Rpb25zKSB7DQorCQkJCWlmIChjb250cmlidXRpb25JRCAhPSBudWxsKSB7DQorCQkJCQltYW5hZ2VyLmluc2VydEJlZm9yZShjb250cmlidXRpb25JRCwgYWN0aW9uKTsNCisJCQkJfQ0KKwkJCQllbHNlIHsNCisJCQkJCW1hbmFnZXIuYWRkKGFjdGlvbik7DQorCQkJCX0NCisJCQl9DQorCQl9DQorCX0NCisJCQ0KKwkvKioNCisJICogVGhpcyByZW1vdmVzIGZyb20gdGhlIHNwZWNpZmllZCA8Y29kZT5tYW5hZ2VyPC9jb2RlPiBhbGwge0BsaW5rIG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5BY3Rpb25Db250cmlidXRpb25JdGVtfXMNCisJICogYmFzZWQgb24gdGhlIHtAbGluayBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSUFjdGlvbn1zIGNvbnRhaW5lZCBpbiB0aGUgPGNvZGU+YWN0aW9uczwvY29kZT4gY29sbGVjdGlvbi4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCB2b2lkIGRlcG9wdWxhdGVNYW5hZ2VyKElDb250cmlidXRpb25NYW5hZ2VyIG1hbmFnZXIsIENvbGxlY3Rpb248PyBleHRlbmRzIElBY3Rpb24+IGFjdGlvbnMpIHsNCisJCWlmIChhY3Rpb25zICE9IG51bGwpIHsNCisJCQlJQ29udHJpYnV0aW9uSXRlbVtdIGl0ZW1zID0gbWFuYWdlci5nZXRJdGVtcygpOw0KKwkJCWZvciAoaW50IGkgPSAwOyBpIDwgaXRlbXMubGVuZ3RoOyBpKyspIHsNCisJCQkJLy8gTG9vayBpbnRvIFN1YkNvbnRyaWJ1dGlvbkl0ZW1zDQorCQkJCS8vDQorCQkJCUlDb250cmlidXRpb25JdGVtIGNvbnRyaWJ1dGlvbkl0ZW0gPSBpdGVtc1tpXTsNCisJCQkJd2hpbGUgKGNvbnRyaWJ1dGlvbkl0ZW0gaW5zdGFuY2VvZiBTdWJDb250cmlidXRpb25JdGVtKSB7DQorCQkJCQljb250cmlidXRpb25JdGVtID0gKChTdWJDb250cmlidXRpb25JdGVtKWNvbnRyaWJ1dGlvbkl0ZW0pLmdldElubmVySXRlbSgpOw0KKwkJCQl9DQorDQorCQkJCS8vIERlbGV0ZSB0aGUgQWN0aW9uQ29udHJpYnV0aW9uSXRlbXMgd2l0aCBtYXRjaGluZyBhY3Rpb24uDQorCQkJCS8vDQorCQkJCWlmIChjb250cmlidXRpb25JdGVtIGluc3RhbmNlb2YgQWN0aW9uQ29udHJpYnV0aW9uSXRlbSkgew0KKwkJCQkJSUFjdGlvbiBhY3Rpb24gPSAoKEFjdGlvbkNvbnRyaWJ1dGlvbkl0ZW0pY29udHJpYnV0aW9uSXRlbSkuZ2V0QWN0aW9uKCk7DQorCQkJCQlpZiAoYWN0aW9ucy5jb250YWlucyhhY3Rpb24pKSB7DQorCQkJCQkJbWFuYWdlci5yZW1vdmUoY29udHJpYnV0aW9uSXRlbSk7DQorCQkJCQl9DQorCQkJCX0NCisJCQl9DQorCQl9DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgcG9wdWxhdGVzIHRoZSBwb3AtdXAgbWVudSBiZWZvcmUgaXQgYXBwZWFycy4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCUBPdmVycmlkZQ0KKwlwdWJsaWMgdm9pZCBtZW51QWJvdXRUb1Nob3coSU1lbnVNYW5hZ2VyIG1lbnVNYW5hZ2VyKSB7DQorCQlzdXBlci5tZW51QWJvdXRUb1Nob3cobWVudU1hbmFnZXIpOw0KKwkJTWVudU1hbmFnZXIgc3VibWVudU1hbmFnZXIgPSBudWxsOw0KKw0KKwkJc3VibWVudU1hbmFnZXIgPSBuZXcgTWVudU1hbmFnZXIoQXV0b21hdGljZXhwZXJpZW5jZUVkaXRQbHVnaW4uSU5TVEFOQ0UuZ2V0U3RyaW5nKCJfVUlfQ3JlYXRlQ2hpbGRfbWVudV9pdGVtIikpOw0KKwkJcG9wdWxhdGVNYW5hZ2VyKHN1Ym1lbnVNYW5hZ2VyLCBjcmVhdGVDaGlsZEFjdGlvbnMsIG51bGwpOw0KKwkJbWVudU1hbmFnZXIuaW5zZXJ0QmVmb3JlKCJlZGl0Iiwgc3VibWVudU1hbmFnZXIpOw0KKw0KKwkJc3VibWVudU1hbmFnZXIgPSBuZXcgTWVudU1hbmFnZXIoQXV0b21hdGljZXhwZXJpZW5jZUVkaXRQbHVnaW4uSU5TVEFOQ0UuZ2V0U3RyaW5nKCJfVUlfQ3JlYXRlU2libGluZ19tZW51X2l0ZW0iKSk7DQorCQlwb3B1bGF0ZU1hbmFnZXIoc3VibWVudU1hbmFnZXIsIGNyZWF0ZVNpYmxpbmdBY3Rpb25zLCBudWxsKTsNCisJCW1lbnVNYW5hZ2VyLmluc2VydEJlZm9yZSgiZWRpdCIsIHN1Ym1lbnVNYW5hZ2VyKTsNCisJfQ0KKw0KKwkvKioNCisJICogVGhpcyBpbnNlcnRzIGdsb2JhbCBhY3Rpb25zIGJlZm9yZSB0aGUgImFkZGl0aW9ucy1lbmQiIHNlcGFyYXRvci4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCUBPdmVycmlkZQ0KKwlwcm90ZWN0ZWQgdm9pZCBhZGRHbG9iYWxBY3Rpb25zKElNZW51TWFuYWdlciBtZW51TWFuYWdlcikgew0KKwkJbWVudU1hbmFnZXIuaW5zZXJ0QWZ0ZXIoImFkZGl0aW9ucy1lbmQiLCBuZXcgU2VwYXJhdG9yKCJ1aS1hY3Rpb25zIikpOw0KKwkJbWVudU1hbmFnZXIuaW5zZXJ0QWZ0ZXIoInVpLWFjdGlvbnMiLCBzaG93UHJvcGVydGllc1ZpZXdBY3Rpb24pOw0KKw0KKwkJcmVmcmVzaFZpZXdlckFjdGlvbi5zZXRFbmFibGVkKHJlZnJlc2hWaWV3ZXJBY3Rpb24uaXNFbmFibGVkKCkpOwkJDQorCQltZW51TWFuYWdlci5pbnNlcnRBZnRlcigidWktYWN0aW9ucyIsIHJlZnJlc2hWaWV3ZXJBY3Rpb24pOw0KKw0KKwkJc3VwZXIuYWRkR2xvYmFsQWN0aW9ucyhtZW51TWFuYWdlcik7DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgZW5zdXJlcyB0aGF0IGEgZGVsZXRlIGFjdGlvbiB3aWxsIGNsZWFuIHVwIGFsbCByZWZlcmVuY2VzIHRvIGRlbGV0ZWQgb2JqZWN0cy4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCUBPdmVycmlkZQ0KKwlwcm90ZWN0ZWQgYm9vbGVhbiByZW1vdmVBbGxSZWZlcmVuY2VzT25EZWxldGUoKSB7DQorCQlyZXR1cm4gdHJ1ZTsNCisJfQ0KKw0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQvc3JjL29yZy9lY2xpcHNlL3N0ZW0vYW5hbHlzaXMvYXV0b21hdGljZXhwZXJpbWVudC9wcmVzZW50YXRpb24vQXV0b21hdGljZXhwZXJpbWVudEVkaXRvci5qYXZhIGIvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5hdXRvbWF0aWNleHBlcmltZW50L3NyYy9vcmcvZWNsaXBzZS9zdGVtL2FuYWx5c2lzL2F1dG9tYXRpY2V4cGVyaW1lbnQvcHJlc2VudGF0aW9uL0F1dG9tYXRpY2V4cGVyaW1lbnRFZGl0b3IuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZGM5NWE1Ci0tLSAvZGV2L251bGwKKysrIGIvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5hdXRvbWF0aWNleHBlcmltZW50L3NyYy9vcmcvZWNsaXBzZS9zdGVtL2FuYWx5c2lzL2F1dG9tYXRpY2V4cGVyaW1lbnQvcHJlc2VudGF0aW9uL0F1dG9tYXRpY2V4cGVyaW1lbnRFZGl0b3IuamF2YQpAQCAtMCwwICsxLDE1MjkgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5hdXRvbWF0aWNleHBlcmltZW50LnByZXNlbnRhdGlvbjsNCisNCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyAqIENvcHlyaWdodCAoYykgMjAwOSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4NCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzDQorICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wDQorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQNCisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbA0KKyAqDQorICogQ29udHJpYnV0b3JzOg0KKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24NCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCisNCisNCitpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsNCitpbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbTsNCitpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsNCitpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247DQoraW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uczsNCitpbXBvcnQgamF2YS51dGlsLkV2ZW50T2JqZWN0Ow0KK2ltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsNCitpbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOw0KK2ltcG9ydCBqYXZhLnV0aWwuTGlua2VkSGFzaE1hcDsNCitpbXBvcnQgamF2YS51dGlsLkxpc3Q7DQoraW1wb3J0IGphdmEudXRpbC5NYXA7DQorDQoraW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklGaWxlOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JTWFya2VyOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUmVzb3VyY2U7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklSZXNvdXJjZUNoYW5nZUV2ZW50Ow0KK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUmVzb3VyY2VDaGFuZ2VMaXN0ZW5lcjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVJlc291cmNlRGVsdGE7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklSZXNvdXJjZURlbHRhVmlzaXRvcjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuUmVzb3VyY2VzUGx1Z2luOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQ29yZUV4Y2VwdGlvbjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQYXRoOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVByb2dyZXNzTW9uaXRvcjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLk51bGxQcm9ncmVzc01vbml0b3I7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24uY29tbWFuZC5CYXNpY0NvbW1hbmRTdGFjazsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5jb21tYW5kLkNvbW1hbmQ7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24uY29tbWFuZC5Db21tYW5kU3RhY2s7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24uY29tbWFuZC5Db21tYW5kU3RhY2tMaXN0ZW5lcjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuQWRhcHRlckZhY3Rvcnk7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51aS5NYXJrZXJIZWxwZXI7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udWkuZWRpdG9yLlByb2JsZW1FZGl0b3JQYXJ0Ow0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnVpLnZpZXdlci5JVmlld2VyUHJvdmlkZXI7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5CYXNpY0RpYWdub3N0aWM7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5EaWFnbm9zdGljOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuVVJJOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdDsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVWYWxpZGF0b3I7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5wcm92aWRlci5FY29yZUl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5Ow0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUucmVzb3VyY2UuUmVzb3VyY2U7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5yZXNvdXJjZS5SZXNvdXJjZVNldDsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnV0aWwuRUNvbnRlbnRBZGFwdGVyOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUudXRpbC5FY29yZVV0aWw7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LmRvbWFpbi5BZGFwdGVyRmFjdG9yeUVkaXRpbmdEb21haW47DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LmRvbWFpbi5FZGl0aW5nRG9tYWluOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5kb21haW4uSUVkaXRpbmdEb21haW5Qcm92aWRlcjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuQWRhcHRlckZhY3RvcnlJdGVtRGVsZWdhdG9yOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5Db21wb3NlZEFkYXB0ZXJGYWN0b3J5Ow0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5SZWZsZWN0aXZlSXRlbVByb3ZpZGVyQWRhcHRlckZhY3Rvcnk7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLnJlc291cmNlLlJlc291cmNlSXRlbVByb3ZpZGVyQWRhcHRlckZhY3Rvcnk7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmFjdGlvbi5FZGl0aW5nRG9tYWluQWN0aW9uQmFyQ29udHJpYnV0b3I7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmNlbGxlZGl0b3IuQWRhcHRlckZhY3RvcnlUcmVlRWRpdG9yOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5kbmQuRWRpdGluZ0RvbWFpblZpZXdlckRyb3BBZGFwdGVyOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5kbmQuTG9jYWxUcmFuc2ZlcjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkuZG5kLlZpZXdlckRyYWdBZGFwdGVyOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5wcm92aWRlci5BZGFwdGVyRmFjdG9yeUNvbnRlbnRQcm92aWRlcjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkucHJvdmlkZXIuQWRhcHRlckZhY3RvcnlMYWJlbFByb3ZpZGVyOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5wcm92aWRlci5VbndyYXBwaW5nU2VsZWN0aW9uUHJvdmlkZXI7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLnV0aWwuRWRpdFVJTWFya2VySGVscGVyOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS51dGlsLkVkaXRVSVV0aWw7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLnZpZXcuRXh0ZW5kZWRQcm9wZXJ0eVNoZWV0UGFnZTsNCitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklNZW51TGlzdGVuZXI7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JTWVudU1hbmFnZXI7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JU3RhdHVzTGluZU1hbmFnZXI7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JVG9vbEJhck1hbmFnZXI7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5NZW51TWFuYWdlcjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLlNlcGFyYXRvcjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuZGlhbG9ncy5NZXNzYWdlRGlhbG9nOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5kaWFsb2dzLlByb2dyZXNzTW9uaXRvckRpYWxvZzsNCitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXI7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvblByb3ZpZGVyOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTdHJ1Y3R1cmVkU2VsZWN0aW9uOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlNlbGVjdGlvbkNoYW5nZWRFdmVudDsNCitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5TdHJ1Y3R1cmVkU2VsZWN0aW9uOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlN0cnVjdHVyZWRWaWV3ZXI7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuVHJlZVZpZXdlcjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5WaWV3ZXI7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuYXV0b21hdGljZXhwZXJpbWVudC5wcm92aWRlci5BdXRvbWF0aWNleHBlcmllbmNlRWRpdFBsdWdpbjsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5hdXRvbWF0aWNleHBlcmltZW50LnByb3ZpZGVyLkF1dG9tYXRpY2V4cGVyaW1lbnRJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeTsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5wcm92aWRlci5BbmFseXNpc0l0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5Ow0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLnByb3ZpZGVyLkNvbW1vbkl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5Ow0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGgucHJvdmlkZXIuR3JhcGhJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeTsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLnByb3ZpZGVyLk1vZGVsSXRlbVByb3ZpZGVyQWRhcHRlckZhY3Rvcnk7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5wcm92aWRlci5Nb2RpZmllckl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5Ow0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2NlbmFyaW8ucHJvdmlkZXIuU2NlbmFyaW9JdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeTsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNlcXVlbmNlci5wcm92aWRlci5TZXF1ZW5jZXJJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeTsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNvbHZlci5wcm92aWRlci5Tb2x2ZXJJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeTsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LlNXVDsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmN1c3RvbS5DVGFiRm9sZGVyOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZG5kLkRORDsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmRuZC5UcmFuc2ZlcjsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5Db250cm9sQWRhcHRlcjsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5Db250cm9sRXZlbnQ7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ncmFwaGljcy5Qb2ludDsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5NZW51Ow0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5UcmVlOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5JQWN0aW9uQmFyczsNCitpbXBvcnQgb3JnLmVjbGlwc2UudWkuSUVkaXRvcklucHV0Ow0KK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5JRWRpdG9yUGFydDsNCitpbXBvcnQgb3JnLmVjbGlwc2UudWkuSUVkaXRvclNpdGU7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnVpLklQYXJ0TGlzdGVuZXI7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2hQYXJ0Ow0KK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5QYXJ0SW5pdEV4Y2VwdGlvbjsNCitpbXBvcnQgb3JnLmVjbGlwc2UudWkuYWN0aW9ucy5Xb3Jrc3BhY2VNb2RpZnlPcGVyYXRpb247DQoraW1wb3J0IG9yZy5lY2xpcHNlLnVpLmRpYWxvZ3MuU2F2ZUFzRGlhbG9nOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5pZGUuSUdvdG9NYXJrZXI7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnVpLnBhcnQuRmlsZUVkaXRvcklucHV0Ow0KK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5wYXJ0Lk11bHRpUGFnZUVkaXRvclBhcnQ7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnVpLnZpZXdzLmNvbnRlbnRvdXRsaW5lLkNvbnRlbnRPdXRsaW5lOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS51aS52aWV3cy5jb250ZW50b3V0bGluZS5Db250ZW50T3V0bGluZVBhZ2U7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnVpLnZpZXdzLmNvbnRlbnRvdXRsaW5lLklDb250ZW50T3V0bGluZVBhZ2U7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnVpLnZpZXdzLnByb3BlcnRpZXMuSVByb3BlcnR5U2hlZXRQYWdlOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS51aS52aWV3cy5wcm9wZXJ0aWVzLlByb3BlcnR5U2hlZXQ7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnVpLnZpZXdzLnByb3BlcnRpZXMuUHJvcGVydHlTaGVldFBhZ2U7DQorDQorDQorDQorLyoqDQorICogVGhpcyBpcyBhbiBleGFtcGxlIG9mIGEgQXV0b21hdGljZXhwZXJpbWVudCBtb2RlbCBlZGl0b3IuDQorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisgKiBAZ2VuZXJhdGVkDQorICovDQorcHVibGljIGNsYXNzIEF1dG9tYXRpY2V4cGVyaW1lbnRFZGl0b3INCisJZXh0ZW5kcyBNdWx0aVBhZ2VFZGl0b3JQYXJ0DQorCWltcGxlbWVudHMgSUVkaXRpbmdEb21haW5Qcm92aWRlciwgSVNlbGVjdGlvblByb3ZpZGVyLCBJTWVudUxpc3RlbmVyLCBJVmlld2VyUHJvdmlkZXIsIElHb3RvTWFya2VyIHsNCisJLyoqDQorCSAqIFRoaXMga2VlcHMgdHJhY2sgb2YgdGhlIGVkaXRpbmcgZG9tYWluIHRoYXQgaXMgdXNlZCB0byB0cmFjayBhbGwgY2hhbmdlcyB0byB0aGUgbW9kZWwuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgQWRhcHRlckZhY3RvcnlFZGl0aW5nRG9tYWluIGVkaXRpbmdEb21haW47DQorDQorCS8qKg0KKwkgKiBUaGlzIGlzIHRoZSBvbmUgYWRhcHRlciBmYWN0b3J5IHVzZWQgZm9yIHByb3ZpZGluZyB2aWV3cyBvZiB0aGUgbW9kZWwuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgQ29tcG9zZWRBZGFwdGVyRmFjdG9yeSBhZGFwdGVyRmFjdG9yeTsNCisNCisJLyoqDQorCSAqIFRoaXMgaXMgdGhlIGNvbnRlbnQgb3V0bGluZSBwYWdlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIElDb250ZW50T3V0bGluZVBhZ2UgY29udGVudE91dGxpbmVQYWdlOw0KKw0KKwkvKioNCisJICogVGhpcyBpcyBhIGtsdWRnZS4uLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIElTdGF0dXNMaW5lTWFuYWdlciBjb250ZW50T3V0bGluZVN0YXR1c0xpbmVNYW5hZ2VyOw0KKw0KKwkvKioNCisJICogVGhpcyBpcyB0aGUgY29udGVudCBvdXRsaW5lIHBhZ2UncyB2aWV3ZXIuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgVHJlZVZpZXdlciBjb250ZW50T3V0bGluZVZpZXdlcjsNCisNCisJLyoqDQorCSAqIFRoaXMgaXMgdGhlIHByb3BlcnR5IHNoZWV0IHBhZ2UuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgUHJvcGVydHlTaGVldFBhZ2UgcHJvcGVydHlTaGVldFBhZ2U7DQorDQorCS8qKg0KKwkgKiBUaGlzIGlzIHRoZSB2aWV3ZXIgdGhhdCBzaGFkb3dzIHRoZSBzZWxlY3Rpb24gaW4gdGhlIGNvbnRlbnQgb3V0bGluZS4NCisJICogVGhlIHBhcmVudCByZWxhdGlvbiBtdXN0IGJlIGNvcnJlY3RseSBkZWZpbmVkIGZvciB0aGlzIHRvIHdvcmsuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgVHJlZVZpZXdlciBzZWxlY3Rpb25WaWV3ZXI7DQorDQorCS8qKg0KKwkgKiBUaGlzIGtlZXBzIHRyYWNrIG9mIHRoZSBhY3RpdmUgY29udGVudCB2aWV3ZXIsIHdoaWNoIG1heSBiZSBlaXRoZXIgb25lIG9mIHRoZSB2aWV3ZXJzIGluIHRoZSBwYWdlcyBvciB0aGUgY29udGVudCBvdXRsaW5lIHZpZXdlci4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCBWaWV3ZXIgY3VycmVudFZpZXdlcjsNCisNCisJLyoqDQorCSAqIFRoaXMgbGlzdGVucyB0byB3aGljaCBldmVyIHZpZXdlciBpcyBhY3RpdmUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lciBzZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXI7DQorDQorCS8qKg0KKwkgKiBUaGlzIGtlZXBzIHRyYWNrIG9mIGFsbCB0aGUge0BsaW5rIG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcn1zIHRoYXQgYXJlIGxpc3RlbmluZyB0byB0aGlzIGVkaXRvci4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCBDb2xsZWN0aW9uPElTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXI+IHNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcnMgPSBuZXcgQXJyYXlMaXN0PElTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXI+KCk7DQorDQorCS8qKg0KKwkgKiBUaGlzIGtlZXBzIHRyYWNrIG9mIHRoZSBzZWxlY3Rpb24gb2YgdGhlIGVkaXRvciBhcyBhIHdob2xlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIElTZWxlY3Rpb24gZWRpdG9yU2VsZWN0aW9uID0gU3RydWN0dXJlZFNlbGVjdGlvbi5FTVBUWTsNCisNCisJLyoqDQorCSAqIFRoZSBNYXJrZXJIZWxwZXIgaXMgcmVzcG9uc2libGUgZm9yIGNyZWF0aW5nIHdvcmtzcGFjZSByZXNvdXJjZSBtYXJrZXJzIHByZXNlbnRlZA0KKwkgKiBpbiBFY2xpcHNlJ3MgUHJvYmxlbXMgVmlldy4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCBNYXJrZXJIZWxwZXIgbWFya2VySGVscGVyID0gbmV3IEVkaXRVSU1hcmtlckhlbHBlcigpOw0KKw0KKwkvKioNCisJICogVGhpcyBsaXN0ZW5zIGZvciB3aGVuIHRoZSBvdXRsaW5lIGJlY29tZXMgYWN0aXZlDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgSVBhcnRMaXN0ZW5lciBwYXJ0TGlzdGVuZXIgPQ0KKwkJbmV3IElQYXJ0TGlzdGVuZXIoKSB7DQorCQkJcHVibGljIHZvaWQgcGFydEFjdGl2YXRlZChJV29ya2JlbmNoUGFydCBwKSB7DQorCQkJCWlmIChwIGluc3RhbmNlb2YgQ29udGVudE91dGxpbmUpIHsNCisJCQkJCWlmICgoKENvbnRlbnRPdXRsaW5lKXApLmdldEN1cnJlbnRQYWdlKCkgPT0gY29udGVudE91dGxpbmVQYWdlKSB7DQorCQkJCQkJZ2V0QWN0aW9uQmFyQ29udHJpYnV0b3IoKS5zZXRBY3RpdmVFZGl0b3IoQXV0b21hdGljZXhwZXJpbWVudEVkaXRvci50aGlzKTsNCisNCisJCQkJCQlzZXRDdXJyZW50Vmlld2VyKGNvbnRlbnRPdXRsaW5lVmlld2VyKTsNCisJCQkJCX0NCisJCQkJfQ0KKwkJCQllbHNlIGlmIChwIGluc3RhbmNlb2YgUHJvcGVydHlTaGVldCkgew0KKwkJCQkJaWYgKCgoUHJvcGVydHlTaGVldClwKS5nZXRDdXJyZW50UGFnZSgpID09IHByb3BlcnR5U2hlZXRQYWdlKSB7DQorCQkJCQkJZ2V0QWN0aW9uQmFyQ29udHJpYnV0b3IoKS5zZXRBY3RpdmVFZGl0b3IoQXV0b21hdGljZXhwZXJpbWVudEVkaXRvci50aGlzKTsNCisJCQkJCQloYW5kbGVBY3RpdmF0ZSgpOw0KKwkJCQkJfQ0KKwkJCQl9DQorCQkJCWVsc2UgaWYgKHAgPT0gQXV0b21hdGljZXhwZXJpbWVudEVkaXRvci50aGlzKSB7DQorCQkJCQloYW5kbGVBY3RpdmF0ZSgpOw0KKwkJCQl9DQorCQkJfQ0KKwkJCXB1YmxpYyB2b2lkIHBhcnRCcm91Z2h0VG9Ub3AoSVdvcmtiZW5jaFBhcnQgcCkgew0KKwkJCQkvLyBJZ25vcmUuDQorCQkJfQ0KKwkJCXB1YmxpYyB2b2lkIHBhcnRDbG9zZWQoSVdvcmtiZW5jaFBhcnQgcCkgew0KKwkJCQkvLyBJZ25vcmUuDQorCQkJfQ0KKwkJCXB1YmxpYyB2b2lkIHBhcnREZWFjdGl2YXRlZChJV29ya2JlbmNoUGFydCBwKSB7DQorCQkJCS8vIElnbm9yZS4NCisJCQl9DQorCQkJcHVibGljIHZvaWQgcGFydE9wZW5lZChJV29ya2JlbmNoUGFydCBwKSB7DQorCQkJCS8vIElnbm9yZS4NCisJCQl9DQorCQl9Ow0KKw0KKwkvKioNCisJICogUmVzb3VyY2VzIHRoYXQgaGF2ZSBiZWVuIHJlbW92ZWQgc2luY2UgbGFzdCBhY3RpdmF0aW9uLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIENvbGxlY3Rpb248UmVzb3VyY2U+IHJlbW92ZWRSZXNvdXJjZXMgPSBuZXcgQXJyYXlMaXN0PFJlc291cmNlPigpOw0KKw0KKwkvKioNCisJICogUmVzb3VyY2VzIHRoYXQgaGF2ZSBiZWVuIGNoYW5nZWQgc2luY2UgbGFzdCBhY3RpdmF0aW9uLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIENvbGxlY3Rpb248UmVzb3VyY2U+IGNoYW5nZWRSZXNvdXJjZXMgPSBuZXcgQXJyYXlMaXN0PFJlc291cmNlPigpOw0KKw0KKwkvKioNCisJICogUmVzb3VyY2VzIHRoYXQgaGF2ZSBiZWVuIHNhdmVkLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIENvbGxlY3Rpb248UmVzb3VyY2U+IHNhdmVkUmVzb3VyY2VzID0gbmV3IEFycmF5TGlzdDxSZXNvdXJjZT4oKTsNCisNCisJLyoqDQorCSAqIE1hcCB0byBzdG9yZSB0aGUgZGlhZ25vc3RpYyBhc3NvY2lhdGVkIHdpdGggYSByZXNvdXJjZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCBNYXA8UmVzb3VyY2UsIERpYWdub3N0aWM+IHJlc291cmNlVG9EaWFnbm9zdGljTWFwID0gbmV3IExpbmtlZEhhc2hNYXA8UmVzb3VyY2UsIERpYWdub3N0aWM+KCk7DQorDQorCS8qKg0KKwkgKiBDb250cm9scyB3aGV0aGVyIHRoZSBwcm9ibGVtIGluZGljYXRpb24gc2hvdWxkIGJlIHVwZGF0ZWQuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgYm9vbGVhbiB1cGRhdGVQcm9ibGVtSW5kaWNhdGlvbiA9IHRydWU7DQorDQorCS8qKg0KKwkgKiBBZGFwdGVyIHVzZWQgdG8gdXBkYXRlIHRoZSBwcm9ibGVtIGluZGljYXRpb24gd2hlbiByZXNvdXJjZXMgYXJlIGRlbWFuZGVkIGxvYWRlZC4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCBFQ29udGVudEFkYXB0ZXIgcHJvYmxlbUluZGljYXRpb25BZGFwdGVyID0gDQorCQluZXcgRUNvbnRlbnRBZGFwdGVyKCkgew0KKwkJCUBPdmVycmlkZQ0KKwkJCXB1YmxpYyB2b2lkIG5vdGlmeUNoYW5nZWQoTm90aWZpY2F0aW9uIG5vdGlmaWNhdGlvbikgew0KKwkJCQlpZiAobm90aWZpY2F0aW9uLmdldE5vdGlmaWVyKCkgaW5zdGFuY2VvZiBSZXNvdXJjZSkgew0KKwkJCQkJc3dpdGNoIChub3RpZmljYXRpb24uZ2V0RmVhdHVyZUlEKFJlc291cmNlLmNsYXNzKSkgew0KKwkJCQkJCWNhc2UgUmVzb3VyY2UuUkVTT1VSQ0VfX0lTX0xPQURFRDoNCisJCQkJCQljYXNlIFJlc291cmNlLlJFU09VUkNFX19FUlJPUlM6DQorCQkJCQkJY2FzZSBSZXNvdXJjZS5SRVNPVVJDRV9fV0FSTklOR1M6IHsNCisJCQkJCQkJUmVzb3VyY2UgcmVzb3VyY2UgPSAoUmVzb3VyY2Upbm90aWZpY2F0aW9uLmdldE5vdGlmaWVyKCk7DQorCQkJCQkJCURpYWdub3N0aWMgZGlhZ25vc3RpYyA9IGFuYWx5emVSZXNvdXJjZVByb2JsZW1zKHJlc291cmNlLCBudWxsKTsNCisJCQkJCQkJaWYgKGRpYWdub3N0aWMuZ2V0U2V2ZXJpdHkoKSAhPSBEaWFnbm9zdGljLk9LKSB7DQorCQkJCQkJCQlyZXNvdXJjZVRvRGlhZ25vc3RpY01hcC5wdXQocmVzb3VyY2UsIGRpYWdub3N0aWMpOw0KKwkJCQkJCQl9DQorCQkJCQkJCWVsc2Ugew0KKwkJCQkJCQkJcmVzb3VyY2VUb0RpYWdub3N0aWNNYXAucmVtb3ZlKHJlc291cmNlKTsNCisJCQkJCQkJfQ0KKw0KKwkJCQkJCQlpZiAodXBkYXRlUHJvYmxlbUluZGljYXRpb24pIHsNCisJCQkJCQkJCWdldFNpdGUoKS5nZXRTaGVsbCgpLmdldERpc3BsYXkoKS5hc3luY0V4ZWMNCisJCQkJCQkJCQkobmV3IFJ1bm5hYmxlKCkgew0KKwkJCQkJCQkJCQkgcHVibGljIHZvaWQgcnVuKCkgew0KKwkJCQkJCQkJCQkJIHVwZGF0ZVByb2JsZW1JbmRpY2F0aW9uKCk7DQorCQkJCQkJCQkJCSB9DQorCQkJCQkJCQkJIH0pOw0KKwkJCQkJCQl9DQorCQkJCQkJCWJyZWFrOw0KKwkJCQkJCX0NCisJCQkJCX0NCisJCQkJfQ0KKwkJCQllbHNlIHsNCisJCQkJCXN1cGVyLm5vdGlmeUNoYW5nZWQobm90aWZpY2F0aW9uKTsNCisJCQkJfQ0KKwkJCX0NCisNCisJCQlAT3ZlcnJpZGUNCisJCQlwcm90ZWN0ZWQgdm9pZCBzZXRUYXJnZXQoUmVzb3VyY2UgdGFyZ2V0KSB7DQorCQkJCWJhc2ljU2V0VGFyZ2V0KHRhcmdldCk7DQorCQkJfQ0KKw0KKwkJCUBPdmVycmlkZQ0KKwkJCXByb3RlY3RlZCB2b2lkIHVuc2V0VGFyZ2V0KFJlc291cmNlIHRhcmdldCkgew0KKwkJCQliYXNpY1Vuc2V0VGFyZ2V0KHRhcmdldCk7DQorCQkJfQ0KKwkJfTsNCisNCisJLyoqDQorCSAqIFRoaXMgbGlzdGVucyBmb3Igd29ya3NwYWNlIGNoYW5nZXMuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgSVJlc291cmNlQ2hhbmdlTGlzdGVuZXIgcmVzb3VyY2VDaGFuZ2VMaXN0ZW5lciA9DQorCQluZXcgSVJlc291cmNlQ2hhbmdlTGlzdGVuZXIoKSB7DQorCQkJcHVibGljIHZvaWQgcmVzb3VyY2VDaGFuZ2VkKElSZXNvdXJjZUNoYW5nZUV2ZW50IGV2ZW50KSB7DQorCQkJCUlSZXNvdXJjZURlbHRhIGRlbHRhID0gZXZlbnQuZ2V0RGVsdGEoKTsNCisJCQkJdHJ5IHsNCisJCQkJCWNsYXNzIFJlc291cmNlRGVsdGFWaXNpdG9yIGltcGxlbWVudHMgSVJlc291cmNlRGVsdGFWaXNpdG9yIHsNCisJCQkJCQlwcm90ZWN0ZWQgUmVzb3VyY2VTZXQgcmVzb3VyY2VTZXQgPSBlZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCk7DQorCQkJCQkJcHJvdGVjdGVkIENvbGxlY3Rpb248UmVzb3VyY2U+IGNoYW5nZWRSZXNvdXJjZXMgPSBuZXcgQXJyYXlMaXN0PFJlc291cmNlPigpOw0KKwkJCQkJCXByb3RlY3RlZCBDb2xsZWN0aW9uPFJlc291cmNlPiByZW1vdmVkUmVzb3VyY2VzID0gbmV3IEFycmF5TGlzdDxSZXNvdXJjZT4oKTsNCisNCisJCQkJCQlwdWJsaWMgYm9vbGVhbiB2aXNpdChJUmVzb3VyY2VEZWx0YSBkZWx0YSkgew0KKwkJCQkJCQlpZiAoZGVsdGEuZ2V0UmVzb3VyY2UoKS5nZXRUeXBlKCkgPT0gSVJlc291cmNlLkZJTEUpIHsNCisJCQkJCQkJCWlmIChkZWx0YS5nZXRLaW5kKCkgPT0gSVJlc291cmNlRGVsdGEuUkVNT1ZFRCB8fA0KKwkJCQkJCQkJICAgIGRlbHRhLmdldEtpbmQoKSA9PSBJUmVzb3VyY2VEZWx0YS5DSEFOR0VEICYmIGRlbHRhLmdldEZsYWdzKCkgIT0gSVJlc291cmNlRGVsdGEuTUFSS0VSUykgew0KKwkJCQkJCQkJCVJlc291cmNlIHJlc291cmNlID0gcmVzb3VyY2VTZXQuZ2V0UmVzb3VyY2UoVVJJLmNyZWF0ZVBsYXRmb3JtUmVzb3VyY2VVUkkoZGVsdGEuZ2V0RnVsbFBhdGgoKS50b1N0cmluZygpLCB0cnVlKSwgZmFsc2UpOw0KKwkJCQkJCQkJCWlmIChyZXNvdXJjZSAhPSBudWxsKSB7DQorCQkJCQkJCQkJCWlmIChkZWx0YS5nZXRLaW5kKCkgPT0gSVJlc291cmNlRGVsdGEuUkVNT1ZFRCkgew0KKwkJCQkJCQkJCQkJcmVtb3ZlZFJlc291cmNlcy5hZGQocmVzb3VyY2UpOw0KKwkJCQkJCQkJCQl9DQorCQkJCQkJCQkJCWVsc2UgaWYgKCFzYXZlZFJlc291cmNlcy5yZW1vdmUocmVzb3VyY2UpKSB7DQorCQkJCQkJCQkJCQljaGFuZ2VkUmVzb3VyY2VzLmFkZChyZXNvdXJjZSk7DQorCQkJCQkJCQkJCX0NCisJCQkJCQkJCQl9DQorCQkJCQkJCQl9DQorCQkJCQkJCX0NCisNCisJCQkJCQkJcmV0dXJuIHRydWU7DQorCQkJCQkJfQ0KKw0KKwkJCQkJCXB1YmxpYyBDb2xsZWN0aW9uPFJlc291cmNlPiBnZXRDaGFuZ2VkUmVzb3VyY2VzKCkgew0KKwkJCQkJCQlyZXR1cm4gY2hhbmdlZFJlc291cmNlczsNCisJCQkJCQl9DQorDQorCQkJCQkJcHVibGljIENvbGxlY3Rpb248UmVzb3VyY2U+IGdldFJlbW92ZWRSZXNvdXJjZXMoKSB7DQorCQkJCQkJCXJldHVybiByZW1vdmVkUmVzb3VyY2VzOw0KKwkJCQkJCX0NCisJCQkJCX0NCisNCisJCQkJCWZpbmFsIFJlc291cmNlRGVsdGFWaXNpdG9yIHZpc2l0b3IgPSBuZXcgUmVzb3VyY2VEZWx0YVZpc2l0b3IoKTsNCisJCQkJCWRlbHRhLmFjY2VwdCh2aXNpdG9yKTsNCisNCisJCQkJCWlmICghdmlzaXRvci5nZXRSZW1vdmVkUmVzb3VyY2VzKCkuaXNFbXB0eSgpKSB7DQorCQkJCQkJZ2V0U2l0ZSgpLmdldFNoZWxsKCkuZ2V0RGlzcGxheSgpLmFzeW5jRXhlYw0KKwkJCQkJCQkobmV3IFJ1bm5hYmxlKCkgew0KKwkJCQkJCQkJIHB1YmxpYyB2b2lkIHJ1bigpIHsNCisJCQkJCQkJCQkgcmVtb3ZlZFJlc291cmNlcy5hZGRBbGwodmlzaXRvci5nZXRSZW1vdmVkUmVzb3VyY2VzKCkpOw0KKwkJCQkJCQkJCSBpZiAoIWlzRGlydHkoKSkgew0KKwkJCQkJCQkJCQkgZ2V0U2l0ZSgpLmdldFBhZ2UoKS5jbG9zZUVkaXRvcihBdXRvbWF0aWNleHBlcmltZW50RWRpdG9yLnRoaXMsIGZhbHNlKTsNCisJCQkJCQkJCQkgfQ0KKwkJCQkJCQkJIH0NCisJCQkJCQkJIH0pOw0KKwkJCQkJfQ0KKw0KKwkJCQkJaWYgKCF2aXNpdG9yLmdldENoYW5nZWRSZXNvdXJjZXMoKS5pc0VtcHR5KCkpIHsNCisJCQkJCQlnZXRTaXRlKCkuZ2V0U2hlbGwoKS5nZXREaXNwbGF5KCkuYXN5bmNFeGVjDQorCQkJCQkJCShuZXcgUnVubmFibGUoKSB7DQorCQkJCQkJCQkgcHVibGljIHZvaWQgcnVuKCkgew0KKwkJCQkJCQkJCSBjaGFuZ2VkUmVzb3VyY2VzLmFkZEFsbCh2aXNpdG9yLmdldENoYW5nZWRSZXNvdXJjZXMoKSk7DQorCQkJCQkJCQkJIGlmIChnZXRTaXRlKCkuZ2V0UGFnZSgpLmdldEFjdGl2ZUVkaXRvcigpID09IEF1dG9tYXRpY2V4cGVyaW1lbnRFZGl0b3IudGhpcykgew0KKwkJCQkJCQkJCQkgaGFuZGxlQWN0aXZhdGUoKTsNCisJCQkJCQkJCQkgfQ0KKwkJCQkJCQkJIH0NCisJCQkJCQkJIH0pOw0KKwkJCQkJfQ0KKwkJCQl9DQorCQkJCWNhdGNoIChDb3JlRXhjZXB0aW9uIGV4Y2VwdGlvbikgew0KKwkJCQkJQXV0b21hdGljZXhwZXJpZW5jZUVkaXRQbHVnaW4uSU5TVEFOQ0UubG9nKGV4Y2VwdGlvbik7DQorCQkJCX0NCisJCQl9DQorCQl9Ow0KKw0KKwkvKioNCisJICogSGFuZGxlcyBhY3RpdmF0aW9uIG9mIHRoZSBlZGl0b3Igb3IgaXQncyBhc3NvY2lhdGVkIHZpZXdzLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIHZvaWQgaGFuZGxlQWN0aXZhdGUoKSB7DQorCQkvLyBSZWNvbXB1dGUgdGhlIHJlYWQgb25seSBzdGF0ZS4NCisJCS8vDQorCQlpZiAoZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVRvUmVhZE9ubHlNYXAoKSAhPSBudWxsKSB7DQorCQkgIGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VUb1JlYWRPbmx5TWFwKCkuY2xlYXIoKTsNCisNCisJCSAgLy8gUmVmcmVzaCBhbnkgYWN0aW9ucyB0aGF0IG1heSBiZWNvbWUgZW5hYmxlZCBvciBkaXNhYmxlZC4NCisJCSAgLy8NCisJCSAgc2V0U2VsZWN0aW9uKGdldFNlbGVjdGlvbigpKTsNCisJCX0NCisNCisJCWlmICghcmVtb3ZlZFJlc291cmNlcy5pc0VtcHR5KCkpIHsNCisJCQlpZiAoaGFuZGxlRGlydHlDb25mbGljdCgpKSB7DQorCQkJCWdldFNpdGUoKS5nZXRQYWdlKCkuY2xvc2VFZGl0b3IoQXV0b21hdGljZXhwZXJpbWVudEVkaXRvci50aGlzLCBmYWxzZSk7DQorCQkJfQ0KKwkJCWVsc2Ugew0KKwkJCQlyZW1vdmVkUmVzb3VyY2VzLmNsZWFyKCk7DQorCQkJCWNoYW5nZWRSZXNvdXJjZXMuY2xlYXIoKTsNCisJCQkJc2F2ZWRSZXNvdXJjZXMuY2xlYXIoKTsNCisJCQl9DQorCQl9DQorCQllbHNlIGlmICghY2hhbmdlZFJlc291cmNlcy5pc0VtcHR5KCkpIHsNCisJCQljaGFuZ2VkUmVzb3VyY2VzLnJlbW92ZUFsbChzYXZlZFJlc291cmNlcyk7DQorCQkJaGFuZGxlQ2hhbmdlZFJlc291cmNlcygpOw0KKwkJCWNoYW5nZWRSZXNvdXJjZXMuY2xlYXIoKTsNCisJCQlzYXZlZFJlc291cmNlcy5jbGVhcigpOw0KKwkJfQ0KKwl9DQorDQorCS8qKg0KKwkgKiBIYW5kbGVzIHdoYXQgdG8gZG8gd2l0aCBjaGFuZ2VkIHJlc291cmNlcyBvbiBhY3RpdmF0aW9uLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIHZvaWQgaGFuZGxlQ2hhbmdlZFJlc291cmNlcygpIHsNCisJCWlmICghY2hhbmdlZFJlc291cmNlcy5pc0VtcHR5KCkgJiYgKCFpc0RpcnR5KCkgfHwgaGFuZGxlRGlydHlDb25mbGljdCgpKSkgew0KKwkJCWlmIChpc0RpcnR5KCkpIHsNCisJCQkJY2hhbmdlZFJlc291cmNlcy5hZGRBbGwoZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpLmdldFJlc291cmNlcygpKTsNCisJCQl9DQorCQkJZWRpdGluZ0RvbWFpbi5nZXRDb21tYW5kU3RhY2soKS5mbHVzaCgpOw0KKw0KKwkJCXVwZGF0ZVByb2JsZW1JbmRpY2F0aW9uID0gZmFsc2U7DQorCQkJZm9yIChSZXNvdXJjZSByZXNvdXJjZSA6IGNoYW5nZWRSZXNvdXJjZXMpIHsNCisJCQkJaWYgKHJlc291cmNlLmlzTG9hZGVkKCkpIHsNCisJCQkJCXJlc291cmNlLnVubG9hZCgpOw0KKwkJCQkJdHJ5IHsNCisJCQkJCQlyZXNvdXJjZS5sb2FkKENvbGxlY3Rpb25zLkVNUFRZX01BUCk7DQorCQkJCQl9DQorCQkJCQljYXRjaCAoSU9FeGNlcHRpb24gZXhjZXB0aW9uKSB7DQorCQkJCQkJaWYgKCFyZXNvdXJjZVRvRGlhZ25vc3RpY01hcC5jb250YWluc0tleShyZXNvdXJjZSkpIHsNCisJCQkJCQkJcmVzb3VyY2VUb0RpYWdub3N0aWNNYXAucHV0KHJlc291cmNlLCBhbmFseXplUmVzb3VyY2VQcm9ibGVtcyhyZXNvdXJjZSwgZXhjZXB0aW9uKSk7DQorCQkJCQkJfQ0KKwkJCQkJfQ0KKwkJCQl9DQorCQkJfQ0KKw0KKwkJCWlmIChBZGFwdGVyRmFjdG9yeUVkaXRpbmdEb21haW4uaXNTdGFsZShlZGl0b3JTZWxlY3Rpb24pKSB7DQorCQkJCXNldFNlbGVjdGlvbihTdHJ1Y3R1cmVkU2VsZWN0aW9uLkVNUFRZKTsNCisJCQl9DQorDQorCQkJdXBkYXRlUHJvYmxlbUluZGljYXRpb24gPSB0cnVlOw0KKwkJCXVwZGF0ZVByb2JsZW1JbmRpY2F0aW9uKCk7DQorCQl9DQorCX0NCisgIA0KKwkvKioNCisJICogVXBkYXRlcyB0aGUgcHJvYmxlbXMgaW5kaWNhdGlvbiB3aXRoIHRoZSBpbmZvcm1hdGlvbiBkZXNjcmliZWQgaW4gdGhlIHNwZWNpZmllZCBkaWFnbm9zdGljLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIHZvaWQgdXBkYXRlUHJvYmxlbUluZGljYXRpb24oKSB7DQorCQlpZiAodXBkYXRlUHJvYmxlbUluZGljYXRpb24pIHsNCisJCQlCYXNpY0RpYWdub3N0aWMgZGlhZ25vc3RpYyA9DQorCQkJCW5ldyBCYXNpY0RpYWdub3N0aWMNCisJCQkJCShEaWFnbm9zdGljLk9LLA0KKwkJCQkJICJvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQiLA0KKwkJCQkJIDAsDQorCQkJCQkgbnVsbCwNCisJCQkJCSBuZXcgT2JqZWN0IFtdIHsgZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpIH0pOw0KKwkJCWZvciAoRGlhZ25vc3RpYyBjaGlsZERpYWdub3N0aWMgOiByZXNvdXJjZVRvRGlhZ25vc3RpY01hcC52YWx1ZXMoKSkgew0KKwkJCQlpZiAoY2hpbGREaWFnbm9zdGljLmdldFNldmVyaXR5KCkgIT0gRGlhZ25vc3RpYy5PSykgew0KKwkJCQkJZGlhZ25vc3RpYy5hZGQoY2hpbGREaWFnbm9zdGljKTsNCisJCQkJfQ0KKwkJCX0NCisNCisJCQlpbnQgbGFzdEVkaXRvclBhZ2UgPSBnZXRQYWdlQ291bnQoKSAtIDE7DQorCQkJaWYgKGxhc3RFZGl0b3JQYWdlID49IDAgJiYgZ2V0RWRpdG9yKGxhc3RFZGl0b3JQYWdlKSBpbnN0YW5jZW9mIFByb2JsZW1FZGl0b3JQYXJ0KSB7DQorCQkJCSgoUHJvYmxlbUVkaXRvclBhcnQpZ2V0RWRpdG9yKGxhc3RFZGl0b3JQYWdlKSkuc2V0RGlhZ25vc3RpYyhkaWFnbm9zdGljKTsNCisJCQkJaWYgKGRpYWdub3N0aWMuZ2V0U2V2ZXJpdHkoKSAhPSBEaWFnbm9zdGljLk9LKSB7DQorCQkJCQlzZXRBY3RpdmVQYWdlKGxhc3RFZGl0b3JQYWdlKTsNCisJCQkJfQ0KKwkJCX0NCisJCQllbHNlIGlmIChkaWFnbm9zdGljLmdldFNldmVyaXR5KCkgIT0gRGlhZ25vc3RpYy5PSykgew0KKwkJCQlQcm9ibGVtRWRpdG9yUGFydCBwcm9ibGVtRWRpdG9yUGFydCA9IG5ldyBQcm9ibGVtRWRpdG9yUGFydCgpOw0KKwkJCQlwcm9ibGVtRWRpdG9yUGFydC5zZXREaWFnbm9zdGljKGRpYWdub3N0aWMpOw0KKwkJCQlwcm9ibGVtRWRpdG9yUGFydC5zZXRNYXJrZXJIZWxwZXIobWFya2VySGVscGVyKTsNCisJCQkJdHJ5IHsNCisJCQkJCWFkZFBhZ2UoKytsYXN0RWRpdG9yUGFnZSwgcHJvYmxlbUVkaXRvclBhcnQsIGdldEVkaXRvcklucHV0KCkpOw0KKwkJCQkJc2V0UGFnZVRleHQobGFzdEVkaXRvclBhZ2UsIHByb2JsZW1FZGl0b3JQYXJ0LmdldFBhcnROYW1lKCkpOw0KKwkJCQkJc2V0QWN0aXZlUGFnZShsYXN0RWRpdG9yUGFnZSk7DQorCQkJCQlzaG93VGFicygpOw0KKwkJCQl9DQorCQkJCWNhdGNoIChQYXJ0SW5pdEV4Y2VwdGlvbiBleGNlcHRpb24pIHsNCisJCQkJCUF1dG9tYXRpY2V4cGVyaWVuY2VFZGl0UGx1Z2luLklOU1RBTkNFLmxvZyhleGNlcHRpb24pOw0KKwkJCQl9DQorCQkJfQ0KKw0KKwkJCWlmIChtYXJrZXJIZWxwZXIuaGFzTWFya2VycyhlZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkpKSB7DQorCQkJCW1hcmtlckhlbHBlci5kZWxldGVNYXJrZXJzKGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKSk7DQorCQkJCWlmIChkaWFnbm9zdGljLmdldFNldmVyaXR5KCkgIT0gRGlhZ25vc3RpYy5PSykgew0KKwkJCQkJdHJ5IHsNCisJCQkJCQltYXJrZXJIZWxwZXIuY3JlYXRlTWFya2VycyhkaWFnbm9zdGljKTsNCisJCQkJCX0NCisJCQkJCWNhdGNoIChDb3JlRXhjZXB0aW9uIGV4Y2VwdGlvbikgew0KKwkJCQkJCUF1dG9tYXRpY2V4cGVyaWVuY2VFZGl0UGx1Z2luLklOU1RBTkNFLmxvZyhleGNlcHRpb24pOw0KKwkJCQkJfQ0KKwkJCQl9DQorCQkJfQ0KKwkJfQ0KKwl9DQorDQorCS8qKg0KKwkgKiBTaG93cyBhIGRpYWxvZyB0aGF0IGFza3MgaWYgY29uZmxpY3RpbmcgY2hhbmdlcyBzaG91bGQgYmUgZGlzY2FyZGVkLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIGJvb2xlYW4gaGFuZGxlRGlydHlDb25mbGljdCgpIHsNCisJCXJldHVybg0KKwkJCU1lc3NhZ2VEaWFsb2cub3BlblF1ZXN0aW9uDQorCQkJCShnZXRTaXRlKCkuZ2V0U2hlbGwoKSwNCisJCQkJIGdldFN0cmluZygiX1VJX0ZpbGVDb25mbGljdF9sYWJlbCIpLA0KKwkJCQkgZ2V0U3RyaW5nKCJfV0FSTl9GaWxlQ29uZmxpY3QiKSk7DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgY3JlYXRlcyBhIG1vZGVsIGVkaXRvci4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBBdXRvbWF0aWNleHBlcmltZW50RWRpdG9yKCkgew0KKwkJc3VwZXIoKTsNCisJCWluaXRpYWxpemVFZGl0aW5nRG9tYWluKCk7DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgc2V0cyB1cCB0aGUgZWRpdGluZyBkb21haW4gZm9yIHRoZSBtb2RlbCBlZGl0b3IuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgdm9pZCBpbml0aWFsaXplRWRpdGluZ0RvbWFpbigpIHsNCisJCS8vIENyZWF0ZSBhbiBhZGFwdGVyIGZhY3RvcnkgdGhhdCB5aWVsZHMgaXRlbSBwcm92aWRlcnMuDQorCQkvLw0KKwkJYWRhcHRlckZhY3RvcnkgPSBuZXcgQ29tcG9zZWRBZGFwdGVyRmFjdG9yeShDb21wb3NlZEFkYXB0ZXJGYWN0b3J5LkRlc2NyaXB0b3IuUmVnaXN0cnkuSU5TVEFOQ0UpOw0KKw0KKwkJYWRhcHRlckZhY3RvcnkuYWRkQWRhcHRlckZhY3RvcnkobmV3IFJlc291cmNlSXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkoKSk7DQorCQlhZGFwdGVyRmFjdG9yeS5hZGRBZGFwdGVyRmFjdG9yeShuZXcgQXV0b21hdGljZXhwZXJpbWVudEl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5KCkpOw0KKwkJYWRhcHRlckZhY3RvcnkuYWRkQWRhcHRlckZhY3RvcnkobmV3IEFuYWx5c2lzSXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkoKSk7DQorCQlhZGFwdGVyRmFjdG9yeS5hZGRBZGFwdGVyRmFjdG9yeShuZXcgQ29tbW9uSXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkoKSk7DQorCQlhZGFwdGVyRmFjdG9yeS5hZGRBZGFwdGVyRmFjdG9yeShuZXcgR3JhcGhJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSgpKTsNCisJCWFkYXB0ZXJGYWN0b3J5LmFkZEFkYXB0ZXJGYWN0b3J5KG5ldyBNb2RlbEl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5KCkpOw0KKwkJYWRhcHRlckZhY3RvcnkuYWRkQWRhcHRlckZhY3RvcnkobmV3IE1vZGlmaWVySXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkoKSk7DQorCQlhZGFwdGVyRmFjdG9yeS5hZGRBZGFwdGVyRmFjdG9yeShuZXcgU2NlbmFyaW9JdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSgpKTsNCisJCWFkYXB0ZXJGYWN0b3J5LmFkZEFkYXB0ZXJGYWN0b3J5KG5ldyBTZXF1ZW5jZXJJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSgpKTsNCisJCWFkYXB0ZXJGYWN0b3J5LmFkZEFkYXB0ZXJGYWN0b3J5KG5ldyBTb2x2ZXJJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSgpKTsNCisJCWFkYXB0ZXJGYWN0b3J5LmFkZEFkYXB0ZXJGYWN0b3J5KG5ldyBFY29yZUl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5KCkpOw0KKwkJYWRhcHRlckZhY3RvcnkuYWRkQWRhcHRlckZhY3RvcnkobmV3IFJlZmxlY3RpdmVJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSgpKTsNCisNCisJCS8vIENyZWF0ZSB0aGUgY29tbWFuZCBzdGFjayB0aGF0IHdpbGwgbm90aWZ5IHRoaXMgZWRpdG9yIGFzIGNvbW1hbmRzIGFyZSBleGVjdXRlZC4NCisJCS8vDQorCQlCYXNpY0NvbW1hbmRTdGFjayBjb21tYW5kU3RhY2sgPSBuZXcgQmFzaWNDb21tYW5kU3RhY2soKTsNCisNCisJCS8vIEFkZCBhIGxpc3RlbmVyIHRvIHNldCB0aGUgbW9zdCByZWNlbnQgY29tbWFuZCdzIGFmZmVjdGVkIG9iamVjdHMgdG8gYmUgdGhlIHNlbGVjdGlvbiBvZiB0aGUgdmlld2VyIHdpdGggZm9jdXMuDQorCQkvLw0KKwkJY29tbWFuZFN0YWNrLmFkZENvbW1hbmRTdGFja0xpc3RlbmVyDQorCQkJKG5ldyBDb21tYW5kU3RhY2tMaXN0ZW5lcigpIHsNCisJCQkJIHB1YmxpYyB2b2lkIGNvbW1hbmRTdGFja0NoYW5nZWQoZmluYWwgRXZlbnRPYmplY3QgZXZlbnQpIHsNCisJCQkJCSBnZXRDb250YWluZXIoKS5nZXREaXNwbGF5KCkuYXN5bmNFeGVjDQorCQkJCQkJIChuZXcgUnVubmFibGUoKSB7DQorCQkJCQkJCSAgcHVibGljIHZvaWQgcnVuKCkgew0KKwkJCQkJCQkJICBmaXJlUHJvcGVydHlDaGFuZ2UoSUVkaXRvclBhcnQuUFJPUF9ESVJUWSk7DQorDQorCQkJCQkJCQkgIC8vIFRyeSB0byBzZWxlY3QgdGhlIGFmZmVjdGVkIG9iamVjdHMuDQorCQkJCQkJCQkgIC8vDQorCQkJCQkJCQkgIENvbW1hbmQgbW9zdFJlY2VudENvbW1hbmQgPSAoKENvbW1hbmRTdGFjaylldmVudC5nZXRTb3VyY2UoKSkuZ2V0TW9zdFJlY2VudENvbW1hbmQoKTsNCisJCQkJCQkJCSAgaWYgKG1vc3RSZWNlbnRDb21tYW5kICE9IG51bGwpIHsNCisJCQkJCQkJCQkgIHNldFNlbGVjdGlvblRvVmlld2VyKG1vc3RSZWNlbnRDb21tYW5kLmdldEFmZmVjdGVkT2JqZWN0cygpKTsNCisJCQkJCQkJCSAgfQ0KKwkJCQkJCQkJICBpZiAocHJvcGVydHlTaGVldFBhZ2UgIT0gbnVsbCAmJiAhcHJvcGVydHlTaGVldFBhZ2UuZ2V0Q29udHJvbCgpLmlzRGlzcG9zZWQoKSkgew0KKwkJCQkJCQkJCSAgcHJvcGVydHlTaGVldFBhZ2UucmVmcmVzaCgpOw0KKwkJCQkJCQkJICB9DQorCQkJCQkJCSAgfQ0KKwkJCQkJCSAgfSk7DQorCQkJCSB9DQorCQkJIH0pOw0KKw0KKwkJLy8gQ3JlYXRlIHRoZSBlZGl0aW5nIGRvbWFpbiB3aXRoIGEgc3BlY2lhbCBjb21tYW5kIHN0YWNrLg0KKwkJLy8NCisJCWVkaXRpbmdEb21haW4gPSBuZXcgQWRhcHRlckZhY3RvcnlFZGl0aW5nRG9tYWluKGFkYXB0ZXJGYWN0b3J5LCBjb21tYW5kU3RhY2ssIG5ldyBIYXNoTWFwPFJlc291cmNlLCBCb29sZWFuPigpKTsNCisJfQ0KKw0KKwkvKioNCisJICogVGhpcyBpcyBoZXJlIGZvciB0aGUgbGlzdGVuZXIgdG8gYmUgYWJsZSB0byBjYWxsIGl0Lg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJCQlAT3ZlcnJpZGUNCisJcHJvdGVjdGVkIHZvaWQgZmlyZVByb3BlcnR5Q2hhbmdlKGludCBhY3Rpb24pIHsNCisJCXN1cGVyLmZpcmVQcm9wZXJ0eUNoYW5nZShhY3Rpb24pOw0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIHNldHMgdGhlIHNlbGVjdGlvbiBpbnRvIHdoaWNoZXZlciB2aWV3ZXIgaXMgYWN0aXZlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIHZvaWQgc2V0U2VsZWN0aW9uVG9WaWV3ZXIoQ29sbGVjdGlvbjw/PiBjb2xsZWN0aW9uKSB7DQorCQlmaW5hbCBDb2xsZWN0aW9uPD8+IHRoZVNlbGVjdGlvbiA9IGNvbGxlY3Rpb247DQorCQkvLyBNYWtlIHN1cmUgaXQncyBva2F5Lg0KKwkJLy8NCisJCWlmICh0aGVTZWxlY3Rpb24gIT0gbnVsbCAmJiAhdGhlU2VsZWN0aW9uLmlzRW1wdHkoKSkgew0KKwkJCVJ1bm5hYmxlIHJ1bm5hYmxlID0NCisJCQkJbmV3IFJ1bm5hYmxlKCkgew0KKwkJCQkJcHVibGljIHZvaWQgcnVuKCkgew0KKwkJCQkJCS8vIFRyeSB0byBzZWxlY3QgdGhlIGl0ZW1zIGluIHRoZSBjdXJyZW50IGNvbnRlbnQgdmlld2VyIG9mIHRoZSBlZGl0b3IuDQorCQkJCQkJLy8NCisJCQkJCQlpZiAoY3VycmVudFZpZXdlciAhPSBudWxsKSB7DQorCQkJCQkJCWN1cnJlbnRWaWV3ZXIuc2V0U2VsZWN0aW9uKG5ldyBTdHJ1Y3R1cmVkU2VsZWN0aW9uKHRoZVNlbGVjdGlvbi50b0FycmF5KCkpLCB0cnVlKTsNCisJCQkJCQl9DQorCQkJCQl9DQorCQkJCX07DQorCQkJZ2V0U2l0ZSgpLmdldFNoZWxsKCkuZ2V0RGlzcGxheSgpLmFzeW5jRXhlYyhydW5uYWJsZSk7DQorCQl9DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgcmV0dXJucyB0aGUgZWRpdGluZyBkb21haW4gYXMgcmVxdWlyZWQgYnkgdGhlIHtAbGluayBJRWRpdGluZ0RvbWFpblByb3ZpZGVyfSBpbnRlcmZhY2UuDQorCSAqIFRoaXMgaXMgaW1wb3J0YW50IGZvciBpbXBsZW1lbnRpbmcgdGhlIHN0YXRpYyBtZXRob2RzIG9mIHtAbGluayBBZGFwdGVyRmFjdG9yeUVkaXRpbmdEb21haW59DQorCSAqIGFuZCBmb3Igc3VwcG9ydGluZyB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkuYWN0aW9uLkNvbW1hbmRBY3Rpb259Lg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIEVkaXRpbmdEb21haW4gZ2V0RWRpdGluZ0RvbWFpbigpIHsNCisJCXJldHVybiBlZGl0aW5nRG9tYWluOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIGNsYXNzIFJldmVyc2VBZGFwdGVyRmFjdG9yeUNvbnRlbnRQcm92aWRlciBleHRlbmRzIEFkYXB0ZXJGYWN0b3J5Q29udGVudFByb3ZpZGVyIHsNCisJCS8qKg0KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkJICogQGdlbmVyYXRlZA0KKwkJICovDQorCQlwdWJsaWMgUmV2ZXJzZUFkYXB0ZXJGYWN0b3J5Q29udGVudFByb3ZpZGVyKEFkYXB0ZXJGYWN0b3J5IGFkYXB0ZXJGYWN0b3J5KSB7DQorCQkJc3VwZXIoYWRhcHRlckZhY3RvcnkpOw0KKwkJfQ0KKw0KKwkJLyoqDQorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCQkgKiBAZ2VuZXJhdGVkDQorCQkgKi8NCisJCUBPdmVycmlkZQ0KKwkJcHVibGljIE9iamVjdCBbXSBnZXRFbGVtZW50cyhPYmplY3Qgb2JqZWN0KSB7DQorCQkJT2JqZWN0IHBhcmVudCA9IHN1cGVyLmdldFBhcmVudChvYmplY3QpOw0KKwkJCXJldHVybiAocGFyZW50ID09IG51bGwgPyBDb2xsZWN0aW9ucy5FTVBUWV9TRVQgOiBDb2xsZWN0aW9ucy5zaW5nbGV0b24ocGFyZW50KSkudG9BcnJheSgpOw0KKwkJfQ0KKw0KKwkJLyoqDQorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCQkgKiBAZ2VuZXJhdGVkDQorCQkgKi8NCisJCUBPdmVycmlkZQ0KKwkJcHVibGljIE9iamVjdCBbXSBnZXRDaGlsZHJlbihPYmplY3Qgb2JqZWN0KSB7DQorCQkJT2JqZWN0IHBhcmVudCA9IHN1cGVyLmdldFBhcmVudChvYmplY3QpOw0KKwkJCXJldHVybiAocGFyZW50ID09IG51bGwgPyBDb2xsZWN0aW9ucy5FTVBUWV9TRVQgOiBDb2xsZWN0aW9ucy5zaW5nbGV0b24ocGFyZW50KSkudG9BcnJheSgpOw0KKwkJfQ0KKw0KKwkJLyoqDQorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCQkgKiBAZ2VuZXJhdGVkDQorCQkgKi8NCisJCUBPdmVycmlkZQ0KKwkJcHVibGljIGJvb2xlYW4gaGFzQ2hpbGRyZW4oT2JqZWN0IG9iamVjdCkgew0KKwkJCU9iamVjdCBwYXJlbnQgPSBzdXBlci5nZXRQYXJlbnQob2JqZWN0KTsNCisJCQlyZXR1cm4gcGFyZW50ICE9IG51bGw7DQorCQl9DQorDQorCQkvKioNCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJCSAqIEBnZW5lcmF0ZWQNCisJCSAqLw0KKwkJQE92ZXJyaWRlDQorCQlwdWJsaWMgT2JqZWN0IGdldFBhcmVudChPYmplY3Qgb2JqZWN0KSB7DQorCQkJcmV0dXJuIG51bGw7DQorCQl9DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgbWFrZXMgc3VyZSB0aGF0IG9uZSBjb250ZW50IHZpZXdlciwgZWl0aGVyIGZvciB0aGUgY3VycmVudCBwYWdlIG9yIHRoZSBvdXRsaW5lIHZpZXcsIGlmIGl0IGhhcyBmb2N1cywNCisJICogaXMgdGhlIGN1cnJlbnQgb25lLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIHZvaWQgc2V0Q3VycmVudFZpZXdlcihWaWV3ZXIgdmlld2VyKSB7DQorCQkvLyBJZiBpdCBpcyBjaGFuZ2luZy4uLg0KKwkJLy8NCisJCWlmIChjdXJyZW50Vmlld2VyICE9IHZpZXdlcikgew0KKwkJCWlmIChzZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIgPT0gbnVsbCkgew0KKwkJCQkvLyBDcmVhdGUgdGhlIGxpc3RlbmVyIG9uIGRlbWFuZC4NCisJCQkJLy8NCisJCQkJc2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyID0NCisJCQkJCW5ldyBJU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyKCkgew0KKwkJCQkJCS8vIFRoaXMganVzdCBub3RpZmllcyB0aG9zZSB0aGluZ3MgdGhhdCBhcmUgYWZmZWN0ZWQgYnkgdGhlIHNlY3Rpb24uDQorCQkJCQkJLy8NCisJCQkJCQlwdWJsaWMgdm9pZCBzZWxlY3Rpb25DaGFuZ2VkKFNlbGVjdGlvbkNoYW5nZWRFdmVudCBzZWxlY3Rpb25DaGFuZ2VkRXZlbnQpIHsNCisJCQkJCQkJc2V0U2VsZWN0aW9uKHNlbGVjdGlvbkNoYW5nZWRFdmVudC5nZXRTZWxlY3Rpb24oKSk7DQorCQkJCQkJfQ0KKwkJCQkJfTsNCisJCQl9DQorDQorCQkJLy8gU3RvcCBsaXN0ZW5pbmcgdG8gdGhlIG9sZCBvbmUuDQorCQkJLy8NCisJCQlpZiAoY3VycmVudFZpZXdlciAhPSBudWxsKSB7DQorCQkJCWN1cnJlbnRWaWV3ZXIucmVtb3ZlU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyKHNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcik7DQorCQkJfQ0KKw0KKwkJCS8vIFN0YXJ0IGxpc3RlbmluZyB0byB0aGUgbmV3IG9uZS4NCisJCQkvLw0KKwkJCWlmICh2aWV3ZXIgIT0gbnVsbCkgew0KKwkJCQl2aWV3ZXIuYWRkU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyKHNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcik7DQorCQkJfQ0KKw0KKwkJCS8vIFJlbWVtYmVyIGl0Lg0KKwkJCS8vDQorCQkJY3VycmVudFZpZXdlciA9IHZpZXdlcjsNCisNCisJCQkvLyBTZXQgdGhlIGVkaXRvcnMgc2VsZWN0aW9uIGJhc2VkIG9uIHRoZSBjdXJyZW50IHZpZXdlcidzIHNlbGVjdGlvbi4NCisJCQkvLw0KKwkJCXNldFNlbGVjdGlvbihjdXJyZW50Vmlld2VyID09IG51bGwgPyBTdHJ1Y3R1cmVkU2VsZWN0aW9uLkVNUFRZIDogY3VycmVudFZpZXdlci5nZXRTZWxlY3Rpb24oKSk7DQorCQl9DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgcmV0dXJucyB0aGUgdmlld2VyIGFzIHJlcXVpcmVkIGJ5IHRoZSB7QGxpbmsgSVZpZXdlclByb3ZpZGVyfSBpbnRlcmZhY2UuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgVmlld2VyIGdldFZpZXdlcigpIHsNCisJCXJldHVybiBjdXJyZW50Vmlld2VyOw0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIGNyZWF0ZXMgYSBjb250ZXh0IG1lbnUgZm9yIHRoZSB2aWV3ZXIgYW5kIGFkZHMgYSBsaXN0ZW5lciBhcyB3ZWxsIHJlZ2lzdGVyaW5nIHRoZSBtZW51IGZvciBleHRlbnNpb24uDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgdm9pZCBjcmVhdGVDb250ZXh0TWVudUZvcihTdHJ1Y3R1cmVkVmlld2VyIHZpZXdlcikgew0KKwkJTWVudU1hbmFnZXIgY29udGV4dE1lbnUgPSBuZXcgTWVudU1hbmFnZXIoIiNQb3BVcCIpOw0KKwkJY29udGV4dE1lbnUuYWRkKG5ldyBTZXBhcmF0b3IoImFkZGl0aW9ucyIpKTsNCisJCWNvbnRleHRNZW51LnNldFJlbW92ZUFsbFdoZW5TaG93bih0cnVlKTsNCisJCWNvbnRleHRNZW51LmFkZE1lbnVMaXN0ZW5lcih0aGlzKTsNCisJCU1lbnUgbWVudT0gY29udGV4dE1lbnUuY3JlYXRlQ29udGV4dE1lbnUodmlld2VyLmdldENvbnRyb2woKSk7DQorCQl2aWV3ZXIuZ2V0Q29udHJvbCgpLnNldE1lbnUobWVudSk7DQorCQlnZXRTaXRlKCkucmVnaXN0ZXJDb250ZXh0TWVudShjb250ZXh0TWVudSwgbmV3IFVud3JhcHBpbmdTZWxlY3Rpb25Qcm92aWRlcih2aWV3ZXIpKTsNCisNCisJCWludCBkbmRPcGVyYXRpb25zID0gRE5ELkRST1BfQ09QWSB8IERORC5EUk9QX01PVkUgfCBETkQuRFJPUF9MSU5LOw0KKwkJVHJhbnNmZXJbXSB0cmFuc2ZlcnMgPSBuZXcgVHJhbnNmZXJbXSB7IExvY2FsVHJhbnNmZXIuZ2V0SW5zdGFuY2UoKSB9Ow0KKwkJdmlld2VyLmFkZERyYWdTdXBwb3J0KGRuZE9wZXJhdGlvbnMsIHRyYW5zZmVycywgbmV3IFZpZXdlckRyYWdBZGFwdGVyKHZpZXdlcikpOw0KKwkJdmlld2VyLmFkZERyb3BTdXBwb3J0KGRuZE9wZXJhdGlvbnMsIHRyYW5zZmVycywgbmV3IEVkaXRpbmdEb21haW5WaWV3ZXJEcm9wQWRhcHRlcihlZGl0aW5nRG9tYWluLCB2aWV3ZXIpKTsNCisJfQ0KKw0KKwkvKioNCisJICogVGhpcyBpcyB0aGUgbWV0aG9kIGNhbGxlZCB0byBsb2FkIGEgcmVzb3VyY2UgaW50byB0aGUgZWRpdGluZyBkb21haW4ncyByZXNvdXJjZSBzZXQgYmFzZWQgb24gdGhlIGVkaXRvcidzIGlucHV0Lg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIHZvaWQgY3JlYXRlTW9kZWwoKSB7DQorCQlVUkkgcmVzb3VyY2VVUkkgPSBFZGl0VUlVdGlsLmdldFVSSShnZXRFZGl0b3JJbnB1dCgpKTsNCisJCUV4Y2VwdGlvbiBleGNlcHRpb24gPSBudWxsOw0KKwkJUmVzb3VyY2UgcmVzb3VyY2UgPSBudWxsOw0KKwkJdHJ5IHsNCisJCQkvLyBMb2FkIHRoZSByZXNvdXJjZSB0aHJvdWdoIHRoZSBlZGl0aW5nIGRvbWFpbi4NCisJCQkvLw0KKwkJCXJlc291cmNlID0gZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpLmdldFJlc291cmNlKHJlc291cmNlVVJJLCB0cnVlKTsNCisJCX0NCisJCWNhdGNoIChFeGNlcHRpb24gZSkgew0KKwkJCWV4Y2VwdGlvbiA9IGU7DQorCQkJcmVzb3VyY2UgPSBlZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkuZ2V0UmVzb3VyY2UocmVzb3VyY2VVUkksIGZhbHNlKTsNCisJCX0NCisNCisJCURpYWdub3N0aWMgZGlhZ25vc3RpYyA9IGFuYWx5emVSZXNvdXJjZVByb2JsZW1zKHJlc291cmNlLCBleGNlcHRpb24pOw0KKwkJaWYgKGRpYWdub3N0aWMuZ2V0U2V2ZXJpdHkoKSAhPSBEaWFnbm9zdGljLk9LKSB7DQorCQkJcmVzb3VyY2VUb0RpYWdub3N0aWNNYXAucHV0KHJlc291cmNlLCAgYW5hbHl6ZVJlc291cmNlUHJvYmxlbXMocmVzb3VyY2UsIGV4Y2VwdGlvbikpOw0KKwkJfQ0KKwkJZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpLmVBZGFwdGVycygpLmFkZChwcm9ibGVtSW5kaWNhdGlvbkFkYXB0ZXIpOw0KKwl9DQorDQorCS8qKg0KKwkgKiBSZXR1cm5zIGEgZGlhZ25vc3RpYyBkZXNjcmliaW5nIHRoZSBlcnJvcnMgYW5kIHdhcm5pbmdzIGxpc3RlZCBpbiB0aGUgcmVzb3VyY2UNCisJICogYW5kIHRoZSBzcGVjaWZpZWQgZXhjZXB0aW9uIChpZiBhbnkpLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIERpYWdub3N0aWMgYW5hbHl6ZVJlc291cmNlUHJvYmxlbXMoUmVzb3VyY2UgcmVzb3VyY2UsIEV4Y2VwdGlvbiBleGNlcHRpb24pIHsNCisJCWlmICghcmVzb3VyY2UuZ2V0RXJyb3JzKCkuaXNFbXB0eSgpIHx8ICFyZXNvdXJjZS5nZXRXYXJuaW5ncygpLmlzRW1wdHkoKSkgew0KKwkJCUJhc2ljRGlhZ25vc3RpYyBiYXNpY0RpYWdub3N0aWMgPQ0KKwkJCQluZXcgQmFzaWNEaWFnbm9zdGljDQorCQkJCQkoRGlhZ25vc3RpYy5FUlJPUiwNCisJCQkJCSAib3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5hdXRvbWF0aWNleHBlcmltZW50IiwNCisJCQkJCSAwLA0KKwkJCQkJIGdldFN0cmluZygiX1VJX0NyZWF0ZU1vZGVsRXJyb3JfbWVzc2FnZSIsIHJlc291cmNlLmdldFVSSSgpKSwNCisJCQkJCSBuZXcgT2JqZWN0IFtdIHsgZXhjZXB0aW9uID09IG51bGwgPyAoT2JqZWN0KXJlc291cmNlIDogZXhjZXB0aW9uIH0pOw0KKwkJCWJhc2ljRGlhZ25vc3RpYy5tZXJnZShFY29yZVV0aWwuY29tcHV0ZURpYWdub3N0aWMocmVzb3VyY2UsIHRydWUpKTsNCisJCQlyZXR1cm4gYmFzaWNEaWFnbm9zdGljOw0KKwkJfQ0KKwkJZWxzZSBpZiAoZXhjZXB0aW9uICE9IG51bGwpIHsNCisJCQlyZXR1cm4NCisJCQkJbmV3IEJhc2ljRGlhZ25vc3RpYw0KKwkJCQkJKERpYWdub3N0aWMuRVJST1IsDQorCQkJCQkgIm9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuYXV0b21hdGljZXhwZXJpbWVudCIsDQorCQkJCQkgMCwNCisJCQkJCSBnZXRTdHJpbmcoIl9VSV9DcmVhdGVNb2RlbEVycm9yX21lc3NhZ2UiLCByZXNvdXJjZS5nZXRVUkkoKSksDQorCQkJCQkgbmV3IE9iamVjdFtdIHsgZXhjZXB0aW9uIH0pOw0KKwkJfQ0KKwkJZWxzZSB7DQorCQkJcmV0dXJuIERpYWdub3N0aWMuT0tfSU5TVEFOQ0U7DQorCQl9DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgaXMgdGhlIG1ldGhvZCB1c2VkIGJ5IHRoZSBmcmFtZXdvcmsgdG8gaW5zdGFsbCB5b3VyIG93biBjb250cm9scy4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQgTk9UDQorCSAqLw0KKwlAT3ZlcnJpZGUNCisJcHVibGljIHZvaWQgY3JlYXRlUGFnZXMoKSB7DQorCQkvLyBDcmVhdGVzIHRoZSBtb2RlbCBmcm9tIHRoZSBlZGl0b3IgaW5wdXQNCisJCS8vDQorCQljcmVhdGVNb2RlbCgpOw0KKw0KKwkJLy8gT25seSBjcmVhdGVzIHRoZSBvdGhlciBwYWdlcyBpZiB0aGVyZSBpcyBzb21ldGhpbmcgdGhhdCBjYW4gYmUgZWRpdGVkDQorCQkvLw0KKwkJaWYgKCFnZXRFZGl0aW5nRG9tYWluKCkuZ2V0UmVzb3VyY2VTZXQoKS5nZXRSZXNvdXJjZXMoKS5pc0VtcHR5KCkpIHsNCisJCQkvLyBDcmVhdGUgYSBwYWdlIGZvciB0aGUgc2VsZWN0aW9uIHRyZWUgdmlldy4NCisJCQkvLw0KKwkJCVRyZWUgdHJlZSA9IG5ldyBUcmVlKGdldENvbnRhaW5lcigpLCBTV1QuTVVMVEkpOw0KKwkJCXNlbGVjdGlvblZpZXdlciA9IG5ldyBUcmVlVmlld2VyKHRyZWUpOw0KKwkJCXNldEN1cnJlbnRWaWV3ZXIoc2VsZWN0aW9uVmlld2VyKTsNCisNCisJCQlzZWxlY3Rpb25WaWV3ZXIuc2V0Q29udGVudFByb3ZpZGVyKG5ldyBBZGFwdGVyRmFjdG9yeUNvbnRlbnRQcm92aWRlcihhZGFwdGVyRmFjdG9yeSkpOw0KKwkJCXNlbGVjdGlvblZpZXdlci5zZXRMYWJlbFByb3ZpZGVyKG5ldyBBZGFwdGVyRmFjdG9yeUxhYmVsUHJvdmlkZXIoYWRhcHRlckZhY3RvcnkpKTsNCisvLwkJCXNlbGVjdGlvblZpZXdlci5zZXRJbnB1dChlZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkpOw0KKwkJCXNlbGVjdGlvblZpZXdlci5zZXRJbnB1dChlZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkuZ2V0UmVzb3VyY2VzKCkuZ2V0KDApKTsNCisJCQlzZWxlY3Rpb25WaWV3ZXIuc2V0U2VsZWN0aW9uKG5ldyBTdHJ1Y3R1cmVkU2VsZWN0aW9uKGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKS5nZXRSZXNvdXJjZXMoKS5nZXQoMCkpLCB0cnVlKTsNCisNCisJCQluZXcgQWRhcHRlckZhY3RvcnlUcmVlRWRpdG9yKHNlbGVjdGlvblZpZXdlci5nZXRUcmVlKCksIGFkYXB0ZXJGYWN0b3J5KTsNCisNCisJCQljcmVhdGVDb250ZXh0TWVudUZvcihzZWxlY3Rpb25WaWV3ZXIpOw0KKwkJCWludCBwYWdlSW5kZXggPSBhZGRQYWdlKHRyZWUpOw0KKwkJCXNldFBhZ2VUZXh0KHBhZ2VJbmRleCwgZ2V0U3RyaW5nKCJfVUlfU2VsZWN0aW9uUGFnZV9sYWJlbCIpKTsNCisNCisJCQlnZXRTaXRlKCkuZ2V0U2hlbGwoKS5nZXREaXNwbGF5KCkuYXN5bmNFeGVjDQorCQkJCShuZXcgUnVubmFibGUoKSB7DQorCQkJCQkgcHVibGljIHZvaWQgcnVuKCkgew0KKwkJCQkJCSBzZXRBY3RpdmVQYWdlKDApOw0KKwkJCQkJIH0NCisJCQkJIH0pOw0KKwkJfQ0KKw0KKwkJLy8gRW5zdXJlcyB0aGF0IHRoaXMgZWRpdG9yIHdpbGwgb25seSBkaXNwbGF5IHRoZSBwYWdlJ3MgdGFiDQorCQkvLyBhcmVhIGlmIHRoZXJlIGFyZSBtb3JlIHRoYW4gb25lIHBhZ2UNCisJCS8vDQorCQlnZXRDb250YWluZXIoKS5hZGRDb250cm9sTGlzdGVuZXINCisJCQkobmV3IENvbnRyb2xBZGFwdGVyKCkgew0KKwkJCQlib29sZWFuIGd1YXJkID0gZmFsc2U7DQorCQkJCUBPdmVycmlkZQ0KKwkJCQlwdWJsaWMgdm9pZCBjb250cm9sUmVzaXplZChDb250cm9sRXZlbnQgZXZlbnQpIHsNCisJCQkJCWlmICghZ3VhcmQpIHsNCisJCQkJCQlndWFyZCA9IHRydWU7DQorCQkJCQkJaGlkZVRhYnMoKTsNCisJCQkJCQlndWFyZCA9IGZhbHNlOw0KKwkJCQkJfQ0KKwkJCQl9DQorCQkJIH0pOw0KKw0KKwkJZ2V0U2l0ZSgpLmdldFNoZWxsKCkuZ2V0RGlzcGxheSgpLmFzeW5jRXhlYw0KKwkJCShuZXcgUnVubmFibGUoKSB7DQorCQkJCSBwdWJsaWMgdm9pZCBydW4oKSB7DQorCQkJCQkgdXBkYXRlUHJvYmxlbUluZGljYXRpb24oKTsNCisJCQkJIH0NCisJCQkgfSk7DQorCX0NCisNCisJLyoqDQorCSAqIElmIHRoZXJlIGlzIGp1c3Qgb25lIHBhZ2UgaW4gdGhlIG11bHRpLXBhZ2UgZWRpdG9yIHBhcnQsDQorCSAqIHRoaXMgaGlkZXMgdGhlIHNpbmdsZSB0YWIgYXQgdGhlIGJvdHRvbS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCB2b2lkIGhpZGVUYWJzKCkgew0KKwkJaWYgKGdldFBhZ2VDb3VudCgpIDw9IDEpIHsNCisJCQlzZXRQYWdlVGV4dCgwLCAiIik7DQorCQkJaWYgKGdldENvbnRhaW5lcigpIGluc3RhbmNlb2YgQ1RhYkZvbGRlcikgew0KKwkJCQkoKENUYWJGb2xkZXIpZ2V0Q29udGFpbmVyKCkpLnNldFRhYkhlaWdodCgxKTsNCisJCQkJUG9pbnQgcG9pbnQgPSBnZXRDb250YWluZXIoKS5nZXRTaXplKCk7DQorCQkJCWdldENvbnRhaW5lcigpLnNldFNpemUocG9pbnQueCwgcG9pbnQueSArIDYpOw0KKwkJCX0NCisJCX0NCisJfQ0KKw0KKwkvKioNCisJICogSWYgdGhlcmUgaXMgbW9yZSB0aGFuIG9uZSBwYWdlIGluIHRoZSBtdWx0aS1wYWdlIGVkaXRvciBwYXJ0LA0KKwkgKiB0aGlzIHNob3dzIHRoZSB0YWJzIGF0IHRoZSBib3R0b20uDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgdm9pZCBzaG93VGFicygpIHsNCisJCWlmIChnZXRQYWdlQ291bnQoKSA+IDEpIHsNCisJCQlzZXRQYWdlVGV4dCgwLCBnZXRTdHJpbmcoIl9VSV9TZWxlY3Rpb25QYWdlX2xhYmVsIikpOw0KKwkJCWlmIChnZXRDb250YWluZXIoKSBpbnN0YW5jZW9mIENUYWJGb2xkZXIpIHsNCisJCQkJKChDVGFiRm9sZGVyKWdldENvbnRhaW5lcigpKS5zZXRUYWJIZWlnaHQoU1dULkRFRkFVTFQpOw0KKwkJCQlQb2ludCBwb2ludCA9IGdldENvbnRhaW5lcigpLmdldFNpemUoKTsNCisJCQkJZ2V0Q29udGFpbmVyKCkuc2V0U2l6ZShwb2ludC54LCBwb2ludC55IC0gNik7DQorCQkJfQ0KKwkJfQ0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIGlzIHVzZWQgdG8gdHJhY2sgdGhlIGFjdGl2ZSB2aWV3ZXIuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlAT3ZlcnJpZGUNCisJcHJvdGVjdGVkIHZvaWQgcGFnZUNoYW5nZShpbnQgcGFnZUluZGV4KSB7DQorCQlzdXBlci5wYWdlQ2hhbmdlKHBhZ2VJbmRleCk7DQorDQorCQlpZiAoY29udGVudE91dGxpbmVQYWdlICE9IG51bGwpIHsNCisJCQloYW5kbGVDb250ZW50T3V0bGluZVNlbGVjdGlvbihjb250ZW50T3V0bGluZVBhZ2UuZ2V0U2VsZWN0aW9uKCkpOw0KKwkJfQ0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIGlzIGhvdyB0aGUgZnJhbWV3b3JrIGRldGVybWluZXMgd2hpY2ggaW50ZXJmYWNlcyB3ZSBpbXBsZW1lbnQuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlAU3VwcHJlc3NXYXJuaW5ncygidW5jaGVja2VkIikNCisJQE92ZXJyaWRlDQorCXB1YmxpYyBPYmplY3QgZ2V0QWRhcHRlcihDbGFzcyBrZXkpIHsNCisJCWlmIChrZXkuZXF1YWxzKElDb250ZW50T3V0bGluZVBhZ2UuY2xhc3MpKSB7DQorCQkJcmV0dXJuIHNob3dPdXRsaW5lVmlldygpID8gZ2V0Q29udGVudE91dGxpbmVQYWdlKCkgOiBudWxsOw0KKwkJfQ0KKwkJZWxzZSBpZiAoa2V5LmVxdWFscyhJUHJvcGVydHlTaGVldFBhZ2UuY2xhc3MpKSB7DQorCQkJcmV0dXJuIGdldFByb3BlcnR5U2hlZXRQYWdlKCk7DQorCQl9DQorCQllbHNlIGlmIChrZXkuZXF1YWxzKElHb3RvTWFya2VyLmNsYXNzKSkgew0KKwkJCXJldHVybiB0aGlzOw0KKwkJfQ0KKwkJZWxzZSB7DQorCQkJcmV0dXJuIHN1cGVyLmdldEFkYXB0ZXIoa2V5KTsNCisJCX0NCisJfQ0KKw0KKwkvKioNCisJICogVGhpcyBhY2Nlc3NlcyBhIGNhY2hlZCB2ZXJzaW9uIG9mIHRoZSBjb250ZW50IG91dGxpbmVyLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIElDb250ZW50T3V0bGluZVBhZ2UgZ2V0Q29udGVudE91dGxpbmVQYWdlKCkgew0KKwkJaWYgKGNvbnRlbnRPdXRsaW5lUGFnZSA9PSBudWxsKSB7DQorCQkJLy8gVGhlIGNvbnRlbnQgb3V0bGluZSBpcyBqdXN0IGEgdHJlZS4NCisJCQkvLw0KKwkJCWNsYXNzIE15Q29udGVudE91dGxpbmVQYWdlIGV4dGVuZHMgQ29udGVudE91dGxpbmVQYWdlIHsNCisJCQkJQE92ZXJyaWRlDQorCQkJCXB1YmxpYyB2b2lkIGNyZWF0ZUNvbnRyb2woQ29tcG9zaXRlIHBhcmVudCkgew0KKwkJCQkJc3VwZXIuY3JlYXRlQ29udHJvbChwYXJlbnQpOw0KKwkJCQkJY29udGVudE91dGxpbmVWaWV3ZXIgPSBnZXRUcmVlVmlld2VyKCk7DQorCQkJCQljb250ZW50T3V0bGluZVZpZXdlci5hZGRTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIodGhpcyk7DQorDQorCQkJCQkvLyBTZXQgdXAgdGhlIHRyZWUgdmlld2VyLg0KKwkJCQkJLy8NCisJCQkJCWNvbnRlbnRPdXRsaW5lVmlld2VyLnNldENvbnRlbnRQcm92aWRlcihuZXcgQWRhcHRlckZhY3RvcnlDb250ZW50UHJvdmlkZXIoYWRhcHRlckZhY3RvcnkpKTsNCisJCQkJCWNvbnRlbnRPdXRsaW5lVmlld2VyLnNldExhYmVsUHJvdmlkZXIobmV3IEFkYXB0ZXJGYWN0b3J5TGFiZWxQcm92aWRlcihhZGFwdGVyRmFjdG9yeSkpOw0KKwkJCQkJY29udGVudE91dGxpbmVWaWV3ZXIuc2V0SW5wdXQoZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpKTsNCisNCisJCQkJCS8vIE1ha2Ugc3VyZSBvdXIgcG9wdXBzIHdvcmsuDQorCQkJCQkvLw0KKwkJCQkJY3JlYXRlQ29udGV4dE1lbnVGb3IoY29udGVudE91dGxpbmVWaWV3ZXIpOw0KKw0KKwkJCQkJaWYgKCFlZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkuZ2V0UmVzb3VyY2VzKCkuaXNFbXB0eSgpKSB7DQorCQkJCQkgIC8vIFNlbGVjdCB0aGUgcm9vdCBvYmplY3QgaW4gdGhlIHZpZXcuDQorCQkJCQkgIC8vDQorCQkJCQkgIGNvbnRlbnRPdXRsaW5lVmlld2VyLnNldFNlbGVjdGlvbihuZXcgU3RydWN0dXJlZFNlbGVjdGlvbihlZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkuZ2V0UmVzb3VyY2VzKCkuZ2V0KDApKSwgdHJ1ZSk7DQorCQkJCQl9DQorCQkJCX0NCisNCisJCQkJQE92ZXJyaWRlDQorCQkJCXB1YmxpYyB2b2lkIG1ha2VDb250cmlidXRpb25zKElNZW51TWFuYWdlciBtZW51TWFuYWdlciwgSVRvb2xCYXJNYW5hZ2VyIHRvb2xCYXJNYW5hZ2VyLCBJU3RhdHVzTGluZU1hbmFnZXIgc3RhdHVzTGluZU1hbmFnZXIpIHsNCisJCQkJCXN1cGVyLm1ha2VDb250cmlidXRpb25zKG1lbnVNYW5hZ2VyLCB0b29sQmFyTWFuYWdlciwgc3RhdHVzTGluZU1hbmFnZXIpOw0KKwkJCQkJY29udGVudE91dGxpbmVTdGF0dXNMaW5lTWFuYWdlciA9IHN0YXR1c0xpbmVNYW5hZ2VyOw0KKwkJCQl9DQorDQorCQkJCUBPdmVycmlkZQ0KKwkJCQlwdWJsaWMgdm9pZCBzZXRBY3Rpb25CYXJzKElBY3Rpb25CYXJzIGFjdGlvbkJhcnMpIHsNCisJCQkJCXN1cGVyLnNldEFjdGlvbkJhcnMoYWN0aW9uQmFycyk7DQorCQkJCQlnZXRBY3Rpb25CYXJDb250cmlidXRvcigpLnNoYXJlR2xvYmFsQWN0aW9ucyh0aGlzLCBhY3Rpb25CYXJzKTsNCisJCQkJfQ0KKwkJCX0NCisNCisJCQljb250ZW50T3V0bGluZVBhZ2UgPSBuZXcgTXlDb250ZW50T3V0bGluZVBhZ2UoKTsNCisNCisJCQkvLyBMaXN0ZW4gdG8gc2VsZWN0aW9uIHNvIHRoYXQgd2UgY2FuIGhhbmRsZSBpdCBpcyBhIHNwZWNpYWwgd2F5Lg0KKwkJCS8vDQorCQkJY29udGVudE91dGxpbmVQYWdlLmFkZFNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcg0KKwkJCQkobmV3IElTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIoKSB7DQorCQkJCQkgLy8gVGhpcyBlbnN1cmVzIHRoYXQgd2UgaGFuZGxlIHNlbGVjdGlvbnMgY29ycmVjdGx5Lg0KKwkJCQkJIC8vDQorCQkJCQkgcHVibGljIHZvaWQgc2VsZWN0aW9uQ2hhbmdlZChTZWxlY3Rpb25DaGFuZ2VkRXZlbnQgZXZlbnQpIHsNCisJCQkJCQkgaGFuZGxlQ29udGVudE91dGxpbmVTZWxlY3Rpb24oZXZlbnQuZ2V0U2VsZWN0aW9uKCkpOw0KKwkJCQkJIH0NCisJCQkJIH0pOw0KKwkJfQ0KKw0KKwkJcmV0dXJuIGNvbnRlbnRPdXRsaW5lUGFnZTsNCisJfQ0KKw0KKwkvKioNCisJICogVGhpcyBhY2Nlc3NlcyBhIGNhY2hlZCB2ZXJzaW9uIG9mIHRoZSBwcm9wZXJ0eSBzaGVldC4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBJUHJvcGVydHlTaGVldFBhZ2UgZ2V0UHJvcGVydHlTaGVldFBhZ2UoKSB7DQorCQlpZiAocHJvcGVydHlTaGVldFBhZ2UgPT0gbnVsbCkgew0KKwkJCXByb3BlcnR5U2hlZXRQYWdlID0NCisJCQkJbmV3IEV4dGVuZGVkUHJvcGVydHlTaGVldFBhZ2UoZWRpdGluZ0RvbWFpbikgew0KKwkJCQkJQE92ZXJyaWRlDQorCQkJCQlwdWJsaWMgdm9pZCBzZXRTZWxlY3Rpb25Ub1ZpZXdlcihMaXN0PD8+IHNlbGVjdGlvbikgew0KKwkJCQkJCUF1dG9tYXRpY2V4cGVyaW1lbnRFZGl0b3IudGhpcy5zZXRTZWxlY3Rpb25Ub1ZpZXdlcihzZWxlY3Rpb24pOw0KKwkJCQkJCUF1dG9tYXRpY2V4cGVyaW1lbnRFZGl0b3IudGhpcy5zZXRGb2N1cygpOw0KKwkJCQkJfQ0KKw0KKwkJCQkJQE92ZXJyaWRlDQorCQkJCQlwdWJsaWMgdm9pZCBzZXRBY3Rpb25CYXJzKElBY3Rpb25CYXJzIGFjdGlvbkJhcnMpIHsNCisJCQkJCQlzdXBlci5zZXRBY3Rpb25CYXJzKGFjdGlvbkJhcnMpOw0KKwkJCQkJCWdldEFjdGlvbkJhckNvbnRyaWJ1dG9yKCkuc2hhcmVHbG9iYWxBY3Rpb25zKHRoaXMsIGFjdGlvbkJhcnMpOw0KKwkJCQkJfQ0KKwkJCQl9Ow0KKwkJCXByb3BlcnR5U2hlZXRQYWdlLnNldFByb3BlcnR5U291cmNlUHJvdmlkZXIobmV3IEFkYXB0ZXJGYWN0b3J5Q29udGVudFByb3ZpZGVyKGFkYXB0ZXJGYWN0b3J5KSk7DQorCQl9DQorDQorCQlyZXR1cm4gcHJvcGVydHlTaGVldFBhZ2U7DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgZGVhbHMgd2l0aCBob3cgd2Ugd2FudCBzZWxlY3Rpb24gaW4gdGhlIG91dGxpbmVyIHRvIGFmZmVjdCB0aGUgb3RoZXIgdmlld3MuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgdm9pZCBoYW5kbGVDb250ZW50T3V0bGluZVNlbGVjdGlvbihJU2VsZWN0aW9uIHNlbGVjdGlvbikgew0KKwkJaWYgKHNlbGVjdGlvblZpZXdlciAhPSBudWxsICYmICFzZWxlY3Rpb24uaXNFbXB0eSgpICYmIHNlbGVjdGlvbiBpbnN0YW5jZW9mIElTdHJ1Y3R1cmVkU2VsZWN0aW9uKSB7DQorCQkJSXRlcmF0b3I8Pz4gc2VsZWN0ZWRFbGVtZW50cyA9ICgoSVN0cnVjdHVyZWRTZWxlY3Rpb24pc2VsZWN0aW9uKS5pdGVyYXRvcigpOw0KKwkJCWlmIChzZWxlY3RlZEVsZW1lbnRzLmhhc05leHQoKSkgew0KKwkJCQkvLyBHZXQgdGhlIGZpcnN0IHNlbGVjdGVkIGVsZW1lbnQuDQorCQkJCS8vDQorCQkJCU9iamVjdCBzZWxlY3RlZEVsZW1lbnQgPSBzZWxlY3RlZEVsZW1lbnRzLm5leHQoKTsNCisNCisJCQkJQXJyYXlMaXN0PE9iamVjdD4gc2VsZWN0aW9uTGlzdCA9IG5ldyBBcnJheUxpc3Q8T2JqZWN0PigpOw0KKwkJCQlzZWxlY3Rpb25MaXN0LmFkZChzZWxlY3RlZEVsZW1lbnQpOw0KKwkJCQl3aGlsZSAoc2VsZWN0ZWRFbGVtZW50cy5oYXNOZXh0KCkpIHsNCisJCQkJCXNlbGVjdGlvbkxpc3QuYWRkKHNlbGVjdGVkRWxlbWVudHMubmV4dCgpKTsNCisJCQkJfQ0KKw0KKwkJCQkvLyBTZXQgdGhlIHNlbGVjdGlvbiB0byB0aGUgd2lkZ2V0Lg0KKwkJCQkvLw0KKwkJCQlzZWxlY3Rpb25WaWV3ZXIuc2V0U2VsZWN0aW9uKG5ldyBTdHJ1Y3R1cmVkU2VsZWN0aW9uKHNlbGVjdGlvbkxpc3QpKTsNCisJCQl9DQorCQl9DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgaXMgZm9yIGltcGxlbWVudGluZyB7QGxpbmsgSUVkaXRvclBhcnR9IGFuZCBzaW1wbHkgdGVzdHMgdGhlIGNvbW1hbmQgc3RhY2suDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlAT3ZlcnJpZGUNCisJcHVibGljIGJvb2xlYW4gaXNEaXJ0eSgpIHsNCisJCXJldHVybiAoKEJhc2ljQ29tbWFuZFN0YWNrKWVkaXRpbmdEb21haW4uZ2V0Q29tbWFuZFN0YWNrKCkpLmlzU2F2ZU5lZWRlZCgpOw0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIGlzIGZvciBpbXBsZW1lbnRpbmcge0BsaW5rIElFZGl0b3JQYXJ0fSBhbmQgc2ltcGx5IHNhdmVzIHRoZSBtb2RlbCBmaWxlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJQE92ZXJyaWRlDQorCXB1YmxpYyB2b2lkIGRvU2F2ZShJUHJvZ3Jlc3NNb25pdG9yIHByb2dyZXNzTW9uaXRvcikgew0KKwkJLy8gU2F2ZSBvbmx5IHJlc291cmNlcyB0aGF0IGhhdmUgYWN0dWFsbHkgY2hhbmdlZC4NCisJCS8vDQorCQlmaW5hbCBNYXA8T2JqZWN0LCBPYmplY3Q+IHNhdmVPcHRpb25zID0gbmV3IEhhc2hNYXA8T2JqZWN0LCBPYmplY3Q+KCk7DQorCQlzYXZlT3B0aW9ucy5wdXQoUmVzb3VyY2UuT1BUSU9OX1NBVkVfT05MWV9JRl9DSEFOR0VELCBSZXNvdXJjZS5PUFRJT05fU0FWRV9PTkxZX0lGX0NIQU5HRURfTUVNT1JZX0JVRkZFUik7DQorDQorCQkvLyBEbyB0aGUgd29yayB3aXRoaW4gYW4gb3BlcmF0aW9uIGJlY2F1c2UgdGhpcyBpcyBhIGxvbmcgcnVubmluZyBhY3Rpdml0eSB0aGF0IG1vZGlmaWVzIHRoZSB3b3JrYmVuY2guDQorCQkvLw0KKwkJV29ya3NwYWNlTW9kaWZ5T3BlcmF0aW9uIG9wZXJhdGlvbiA9DQorCQkJbmV3IFdvcmtzcGFjZU1vZGlmeU9wZXJhdGlvbigpIHsNCisJCQkJLy8gVGhpcyBpcyB0aGUgbWV0aG9kIHRoYXQgZ2V0cyBpbnZva2VkIHdoZW4gdGhlIG9wZXJhdGlvbiBydW5zLg0KKwkJCQkvLw0KKwkJCQlAT3ZlcnJpZGUNCisJCQkJcHVibGljIHZvaWQgZXhlY3V0ZShJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IpIHsNCisJCQkJCS8vIFNhdmUgdGhlIHJlc291cmNlcyB0byB0aGUgZmlsZSBzeXN0ZW0uDQorCQkJCQkvLw0KKwkJCQkJYm9vbGVhbiBmaXJzdCA9IHRydWU7DQorCQkJCQlmb3IgKFJlc291cmNlIHJlc291cmNlIDogZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpLmdldFJlc291cmNlcygpKSB7DQorCQkJCQkJaWYgKChmaXJzdCB8fCAhcmVzb3VyY2UuZ2V0Q29udGVudHMoKS5pc0VtcHR5KCkgfHwgaXNQZXJzaXN0ZWQocmVzb3VyY2UpKSAmJiAhZWRpdGluZ0RvbWFpbi5pc1JlYWRPbmx5KHJlc291cmNlKSkgew0KKwkJCQkJCQl0cnkgew0KKwkJCQkJCQkJbG9uZyB0aW1lU3RhbXAgPSByZXNvdXJjZS5nZXRUaW1lU3RhbXAoKTsNCisJCQkJCQkJCXJlc291cmNlLnNhdmUoc2F2ZU9wdGlvbnMpOw0KKwkJCQkJCQkJaWYgKHJlc291cmNlLmdldFRpbWVTdGFtcCgpICE9IHRpbWVTdGFtcCkgew0KKwkJCQkJCQkJCXNhdmVkUmVzb3VyY2VzLmFkZChyZXNvdXJjZSk7DQorCQkJCQkJCQl9DQorCQkJCQkJCX0NCisJCQkJCQkJY2F0Y2ggKEV4Y2VwdGlvbiBleGNlcHRpb24pIHsNCisJCQkJCQkJCXJlc291cmNlVG9EaWFnbm9zdGljTWFwLnB1dChyZXNvdXJjZSwgYW5hbHl6ZVJlc291cmNlUHJvYmxlbXMocmVzb3VyY2UsIGV4Y2VwdGlvbikpOw0KKwkJCQkJCQl9DQorCQkJCQkJCWZpcnN0ID0gZmFsc2U7DQorCQkJCQkJfQ0KKwkJCQkJfQ0KKwkJCQl9DQorCQkJfTsNCisNCisJCXVwZGF0ZVByb2JsZW1JbmRpY2F0aW9uID0gZmFsc2U7DQorCQl0cnkgew0KKwkJCS8vIFRoaXMgcnVucyB0aGUgb3B0aW9ucywgYW5kIHNob3dzIHByb2dyZXNzLg0KKwkJCS8vDQorCQkJbmV3IFByb2dyZXNzTW9uaXRvckRpYWxvZyhnZXRTaXRlKCkuZ2V0U2hlbGwoKSkucnVuKHRydWUsIGZhbHNlLCBvcGVyYXRpb24pOw0KKw0KKwkJCS8vIFJlZnJlc2ggdGhlIG5lY2Vzc2FyeSBzdGF0ZS4NCisJCQkvLw0KKwkJCSgoQmFzaWNDb21tYW5kU3RhY2spZWRpdGluZ0RvbWFpbi5nZXRDb21tYW5kU3RhY2soKSkuc2F2ZUlzRG9uZSgpOw0KKwkJCWZpcmVQcm9wZXJ0eUNoYW5nZShJRWRpdG9yUGFydC5QUk9QX0RJUlRZKTsNCisJCX0NCisJCWNhdGNoIChFeGNlcHRpb24gZXhjZXB0aW9uKSB7DQorCQkJLy8gU29tZXRoaW5nIHdlbnQgd3JvbmcgdGhhdCBzaG91bGRuJ3QuDQorCQkJLy8NCisJCQlBdXRvbWF0aWNleHBlcmllbmNlRWRpdFBsdWdpbi5JTlNUQU5DRS5sb2coZXhjZXB0aW9uKTsNCisJCX0NCisJCXVwZGF0ZVByb2JsZW1JbmRpY2F0aW9uID0gdHJ1ZTsNCisJCXVwZGF0ZVByb2JsZW1JbmRpY2F0aW9uKCk7DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgcmV0dXJucyB3aGV0aGVyIHNvbWV0aGluZyBoYXMgYmVlbiBwZXJzaXN0ZWQgdG8gdGhlIFVSSSBvZiB0aGUgc3BlY2lmaWVkIHJlc291cmNlLg0KKwkgKiBUaGUgaW1wbGVtZW50YXRpb24gdXNlcyB0aGUgVVJJIGNvbnZlcnRlciBmcm9tIHRoZSBlZGl0b3IncyByZXNvdXJjZSBzZXQgdG8gdHJ5IHRvIG9wZW4gYW4gaW5wdXQgc3RyZWFtLiANCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCBib29sZWFuIGlzUGVyc2lzdGVkKFJlc291cmNlIHJlc291cmNlKSB7DQorCQlib29sZWFuIHJlc3VsdCA9IGZhbHNlOw0KKwkJdHJ5IHsNCisJCQlJbnB1dFN0cmVhbSBzdHJlYW0gPSBlZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkuZ2V0VVJJQ29udmVydGVyKCkuY3JlYXRlSW5wdXRTdHJlYW0ocmVzb3VyY2UuZ2V0VVJJKCkpOw0KKwkJCWlmIChzdHJlYW0gIT0gbnVsbCkgew0KKwkJCQlyZXN1bHQgPSB0cnVlOw0KKwkJCQlzdHJlYW0uY2xvc2UoKTsNCisJCQl9DQorCQl9DQorCQljYXRjaCAoSU9FeGNlcHRpb24gZSkgew0KKwkJCS8vIElnbm9yZQ0KKwkJfQ0KKwkJcmV0dXJuIHJlc3VsdDsNCisJfQ0KKw0KKwkvKioNCisJICogVGhpcyBhbHdheXMgcmV0dXJucyB0cnVlIGJlY2F1c2UgaXQgaXMgbm90IGN1cnJlbnRseSBzdXBwb3J0ZWQuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlAT3ZlcnJpZGUNCisJcHVibGljIGJvb2xlYW4gaXNTYXZlQXNBbGxvd2VkKCkgew0KKwkJcmV0dXJuIHRydWU7DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgYWxzbyBjaGFuZ2VzIHRoZSBlZGl0b3IncyBpbnB1dC4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCUBPdmVycmlkZQ0KKwlwdWJsaWMgdm9pZCBkb1NhdmVBcygpIHsNCisJCVNhdmVBc0RpYWxvZyBzYXZlQXNEaWFsb2cgPSBuZXcgU2F2ZUFzRGlhbG9nKGdldFNpdGUoKS5nZXRTaGVsbCgpKTsNCisJCXNhdmVBc0RpYWxvZy5vcGVuKCk7DQorCQlJUGF0aCBwYXRoID0gc2F2ZUFzRGlhbG9nLmdldFJlc3VsdCgpOw0KKwkJaWYgKHBhdGggIT0gbnVsbCkgew0KKwkJCUlGaWxlIGZpbGUgPSBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuZ2V0Um9vdCgpLmdldEZpbGUocGF0aCk7DQorCQkJaWYgKGZpbGUgIT0gbnVsbCkgew0KKwkJCQlkb1NhdmVBcyhVUkkuY3JlYXRlUGxhdGZvcm1SZXNvdXJjZVVSSShmaWxlLmdldEZ1bGxQYXRoKCkudG9TdHJpbmcoKSwgdHJ1ZSksIG5ldyBGaWxlRWRpdG9ySW5wdXQoZmlsZSkpOw0KKwkJCX0NCisJCX0NCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCB2b2lkIGRvU2F2ZUFzKFVSSSB1cmksIElFZGl0b3JJbnB1dCBlZGl0b3JJbnB1dCkgew0KKwkJKGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKS5nZXRSZXNvdXJjZXMoKS5nZXQoMCkpLnNldFVSSSh1cmkpOw0KKwkJc2V0SW5wdXRXaXRoTm90aWZ5KGVkaXRvcklucHV0KTsNCisJCXNldFBhcnROYW1lKGVkaXRvcklucHV0LmdldE5hbWUoKSk7DQorCQlJUHJvZ3Jlc3NNb25pdG9yIHByb2dyZXNzTW9uaXRvciA9DQorCQkJZ2V0QWN0aW9uQmFycygpLmdldFN0YXR1c0xpbmVNYW5hZ2VyKCkgIT0gbnVsbCA/DQorCQkJCWdldEFjdGlvbkJhcnMoKS5nZXRTdGF0dXNMaW5lTWFuYWdlcigpLmdldFByb2dyZXNzTW9uaXRvcigpIDoNCisJCQkJbmV3IE51bGxQcm9ncmVzc01vbml0b3IoKTsNCisJCWRvU2F2ZShwcm9ncmVzc01vbml0b3IpOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIHZvaWQgZ290b01hcmtlcihJTWFya2VyIG1hcmtlcikgew0KKwkJdHJ5IHsNCisJCQlpZiAobWFya2VyLmdldFR5cGUoKS5lcXVhbHMoRVZhbGlkYXRvci5NQVJLRVIpKSB7DQorCQkJCVN0cmluZyB1cmlBdHRyaWJ1dGUgPSBtYXJrZXIuZ2V0QXR0cmlidXRlKEVWYWxpZGF0b3IuVVJJX0FUVFJJQlVURSwgbnVsbCk7DQorCQkJCWlmICh1cmlBdHRyaWJ1dGUgIT0gbnVsbCkgew0KKwkJCQkJVVJJIHVyaSA9IFVSSS5jcmVhdGVVUkkodXJpQXR0cmlidXRlKTsNCisJCQkJCUVPYmplY3QgZU9iamVjdCA9IGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKS5nZXRFT2JqZWN0KHVyaSwgdHJ1ZSk7DQorCQkJCQlpZiAoZU9iamVjdCAhPSBudWxsKSB7DQorCQkJCQkgIHNldFNlbGVjdGlvblRvVmlld2VyKENvbGxlY3Rpb25zLnNpbmdsZXRvbihlZGl0aW5nRG9tYWluLmdldFdyYXBwZXIoZU9iamVjdCkpKTsNCisJCQkJCX0NCisJCQkJfQ0KKwkJCX0NCisJCX0NCisJCWNhdGNoIChDb3JlRXhjZXB0aW9uIGV4Y2VwdGlvbikgew0KKwkJCUF1dG9tYXRpY2V4cGVyaWVuY2VFZGl0UGx1Z2luLklOU1RBTkNFLmxvZyhleGNlcHRpb24pOw0KKwkJfQ0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIGlzIGNhbGxlZCBkdXJpbmcgc3RhcnR1cC4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCUBPdmVycmlkZQ0KKwlwdWJsaWMgdm9pZCBpbml0KElFZGl0b3JTaXRlIHNpdGUsIElFZGl0b3JJbnB1dCBlZGl0b3JJbnB1dCkgew0KKwkJc2V0U2l0ZShzaXRlKTsNCisJCXNldElucHV0V2l0aE5vdGlmeShlZGl0b3JJbnB1dCk7DQorCQlzZXRQYXJ0TmFtZShlZGl0b3JJbnB1dC5nZXROYW1lKCkpOw0KKwkJc2l0ZS5zZXRTZWxlY3Rpb25Qcm92aWRlcih0aGlzKTsNCisJCXNpdGUuZ2V0UGFnZSgpLmFkZFBhcnRMaXN0ZW5lcihwYXJ0TGlzdGVuZXIpOw0KKwkJUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmFkZFJlc291cmNlQ2hhbmdlTGlzdGVuZXIocmVzb3VyY2VDaGFuZ2VMaXN0ZW5lciwgSVJlc291cmNlQ2hhbmdlRXZlbnQuUE9TVF9DSEFOR0UpOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJQE92ZXJyaWRlDQorCXB1YmxpYyB2b2lkIHNldEZvY3VzKCkgew0KKwkJZ2V0Q29udHJvbChnZXRBY3RpdmVQYWdlKCkpLnNldEZvY3VzKCk7DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgaW1wbGVtZW50cyB7QGxpbmsgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uUHJvdmlkZXJ9Lg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIHZvaWQgYWRkU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyKElTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIgbGlzdGVuZXIpIHsNCisJCXNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcnMuYWRkKGxpc3RlbmVyKTsNCisJfQ0KKw0KKwkvKioNCisJICogVGhpcyBpbXBsZW1lbnRzIHtAbGluayBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb25Qcm92aWRlcn0uDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgdm9pZCByZW1vdmVTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIoSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lciBsaXN0ZW5lcikgew0KKwkJc2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVycy5yZW1vdmUobGlzdGVuZXIpOw0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIGltcGxlbWVudHMge0BsaW5rIG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvblByb3ZpZGVyfSB0byByZXR1cm4gdGhpcyBlZGl0b3IncyBvdmVyYWxsIHNlbGVjdGlvbi4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBJU2VsZWN0aW9uIGdldFNlbGVjdGlvbigpIHsNCisJCXJldHVybiBlZGl0b3JTZWxlY3Rpb247DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgaW1wbGVtZW50cyB7QGxpbmsgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uUHJvdmlkZXJ9IHRvIHNldCB0aGlzIGVkaXRvcidzIG92ZXJhbGwgc2VsZWN0aW9uLg0KKwkgKiBDYWxsaW5nIHRoaXMgcmVzdWx0IHdpbGwgbm90aWZ5IHRoZSBsaXN0ZW5lcnMuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgdm9pZCBzZXRTZWxlY3Rpb24oSVNlbGVjdGlvbiBzZWxlY3Rpb24pIHsNCisJCWVkaXRvclNlbGVjdGlvbiA9IHNlbGVjdGlvbjsNCisNCisJCWZvciAoSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lciBsaXN0ZW5lciA6IHNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcnMpIHsNCisJCQlsaXN0ZW5lci5zZWxlY3Rpb25DaGFuZ2VkKG5ldyBTZWxlY3Rpb25DaGFuZ2VkRXZlbnQodGhpcywgc2VsZWN0aW9uKSk7DQorCQl9DQorCQlzZXRTdGF0dXNMaW5lTWFuYWdlcihzZWxlY3Rpb24pOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIHZvaWQgc2V0U3RhdHVzTGluZU1hbmFnZXIoSVNlbGVjdGlvbiBzZWxlY3Rpb24pIHsNCisJCUlTdGF0dXNMaW5lTWFuYWdlciBzdGF0dXNMaW5lTWFuYWdlciA9IGN1cnJlbnRWaWV3ZXIgIT0gbnVsbCAmJiBjdXJyZW50Vmlld2VyID09IGNvbnRlbnRPdXRsaW5lVmlld2VyID8NCisJCQljb250ZW50T3V0bGluZVN0YXR1c0xpbmVNYW5hZ2VyIDogZ2V0QWN0aW9uQmFycygpLmdldFN0YXR1c0xpbmVNYW5hZ2VyKCk7DQorDQorCQlpZiAoc3RhdHVzTGluZU1hbmFnZXIgIT0gbnVsbCkgew0KKwkJCWlmIChzZWxlY3Rpb24gaW5zdGFuY2VvZiBJU3RydWN0dXJlZFNlbGVjdGlvbikgew0KKwkJCQlDb2xsZWN0aW9uPD8+IGNvbGxlY3Rpb24gPSAoKElTdHJ1Y3R1cmVkU2VsZWN0aW9uKXNlbGVjdGlvbikudG9MaXN0KCk7DQorCQkJCXN3aXRjaCAoY29sbGVjdGlvbi5zaXplKCkpIHsNCisJCQkJCWNhc2UgMDogew0KKwkJCQkJCXN0YXR1c0xpbmVNYW5hZ2VyLnNldE1lc3NhZ2UoZ2V0U3RyaW5nKCJfVUlfTm9PYmplY3RTZWxlY3RlZCIpKTsNCisJCQkJCQlicmVhazsNCisJCQkJCX0NCisJCQkJCWNhc2UgMTogew0KKwkJCQkJCVN0cmluZyB0ZXh0ID0gbmV3IEFkYXB0ZXJGYWN0b3J5SXRlbURlbGVnYXRvcihhZGFwdGVyRmFjdG9yeSkuZ2V0VGV4dChjb2xsZWN0aW9uLml0ZXJhdG9yKCkubmV4dCgpKTsNCisJCQkJCQlzdGF0dXNMaW5lTWFuYWdlci5zZXRNZXNzYWdlKGdldFN0cmluZygiX1VJX1NpbmdsZU9iamVjdFNlbGVjdGVkIiwgdGV4dCkpOw0KKwkJCQkJCWJyZWFrOw0KKwkJCQkJfQ0KKwkJCQkJZGVmYXVsdDogew0KKwkJCQkJCXN0YXR1c0xpbmVNYW5hZ2VyLnNldE1lc3NhZ2UoZ2V0U3RyaW5nKCJfVUlfTXVsdGlPYmplY3RTZWxlY3RlZCIsIEludGVnZXIudG9TdHJpbmcoY29sbGVjdGlvbi5zaXplKCkpKSk7DQorCQkJCQkJYnJlYWs7DQorCQkJCQl9DQorCQkJCX0NCisJCQl9DQorCQkJZWxzZSB7DQorCQkJCXN0YXR1c0xpbmVNYW5hZ2VyLnNldE1lc3NhZ2UoIiIpOw0KKwkJCX0NCisJCX0NCisJfQ0KKw0KKwkvKioNCisJICogVGhpcyBsb29rcyB1cCBhIHN0cmluZyBpbiB0aGUgcGx1Z2luJ3MgcGx1Z2luLnByb3BlcnRpZXMgZmlsZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByaXZhdGUgc3RhdGljIFN0cmluZyBnZXRTdHJpbmcoU3RyaW5nIGtleSkgew0KKwkJcmV0dXJuIEF1dG9tYXRpY2V4cGVyaWVuY2VFZGl0UGx1Z2luLklOU1RBTkNFLmdldFN0cmluZyhrZXkpOw0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIGxvb2tzIHVwIGEgc3RyaW5nIGluIHBsdWdpbi5wcm9wZXJ0aWVzLCBtYWtpbmcgYSBzdWJzdGl0dXRpb24uDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcml2YXRlIHN0YXRpYyBTdHJpbmcgZ2V0U3RyaW5nKFN0cmluZyBrZXksIE9iamVjdCBzMSkgew0KKwkJcmV0dXJuIEF1dG9tYXRpY2V4cGVyaWVuY2VFZGl0UGx1Z2luLklOU1RBTkNFLmdldFN0cmluZyhrZXksIG5ldyBPYmplY3QgW10geyBzMSB9KTsNCisJfQ0KKw0KKwkvKioNCisJICogVGhpcyBpbXBsZW1lbnRzIHtAbGluayBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSU1lbnVMaXN0ZW5lcn0gdG8gaGVscCBmaWxsIHRoZSBjb250ZXh0IG1lbnVzIHdpdGggY29udHJpYnV0aW9ucyBmcm9tIHRoZSBFZGl0IG1lbnUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgdm9pZCBtZW51QWJvdXRUb1Nob3coSU1lbnVNYW5hZ2VyIG1lbnVNYW5hZ2VyKSB7DQorCQkoKElNZW51TGlzdGVuZXIpZ2V0RWRpdG9yU2l0ZSgpLmdldEFjdGlvbkJhckNvbnRyaWJ1dG9yKCkpLm1lbnVBYm91dFRvU2hvdyhtZW51TWFuYWdlcik7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgRWRpdGluZ0RvbWFpbkFjdGlvbkJhckNvbnRyaWJ1dG9yIGdldEFjdGlvbkJhckNvbnRyaWJ1dG9yKCkgew0KKwkJcmV0dXJuIChFZGl0aW5nRG9tYWluQWN0aW9uQmFyQ29udHJpYnV0b3IpZ2V0RWRpdG9yU2l0ZSgpLmdldEFjdGlvbkJhckNvbnRyaWJ1dG9yKCk7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgSUFjdGlvbkJhcnMgZ2V0QWN0aW9uQmFycygpIHsNCisJCXJldHVybiBnZXRBY3Rpb25CYXJDb250cmlidXRvcigpLmdldEFjdGlvbkJhcnMoKTsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBBZGFwdGVyRmFjdG9yeSBnZXRBZGFwdGVyRmFjdG9yeSgpIHsNCisJCXJldHVybiBhZGFwdGVyRmFjdG9yeTsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCUBPdmVycmlkZQ0KKwlwdWJsaWMgdm9pZCBkaXNwb3NlKCkgew0KKwkJdXBkYXRlUHJvYmxlbUluZGljYXRpb24gPSBmYWxzZTsNCisNCisJCVJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5yZW1vdmVSZXNvdXJjZUNoYW5nZUxpc3RlbmVyKHJlc291cmNlQ2hhbmdlTGlzdGVuZXIpOw0KKw0KKwkJZ2V0U2l0ZSgpLmdldFBhZ2UoKS5yZW1vdmVQYXJ0TGlzdGVuZXIocGFydExpc3RlbmVyKTsNCisNCisJCWFkYXB0ZXJGYWN0b3J5LmRpc3Bvc2UoKTsNCisNCisJCWlmIChnZXRBY3Rpb25CYXJDb250cmlidXRvcigpLmdldEFjdGl2ZUVkaXRvcigpID09IHRoaXMpIHsNCisJCQlnZXRBY3Rpb25CYXJDb250cmlidXRvcigpLnNldEFjdGl2ZUVkaXRvcihudWxsKTsNCisJCX0NCisNCisJCWlmIChwcm9wZXJ0eVNoZWV0UGFnZSAhPSBudWxsKSB7DQorCQkJcHJvcGVydHlTaGVldFBhZ2UuZGlzcG9zZSgpOw0KKwkJfQ0KKw0KKwkJaWYgKGNvbnRlbnRPdXRsaW5lUGFnZSAhPSBudWxsKSB7DQorCQkJY29udGVudE91dGxpbmVQYWdlLmRpc3Bvc2UoKTsNCisJCX0NCisNCisJCXN1cGVyLmRpc3Bvc2UoKTsNCisJfQ0KKw0KKwkvKioNCisJICogUmV0dXJucyB3aGV0aGVyIHRoZSBvdXRsaW5lIHZpZXcgc2hvdWxkIGJlIHByZXNlbnRlZCB0byB0aGUgdXNlci4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCBib29sZWFuIHNob3dPdXRsaW5lVmlldygpIHsNCisJCXJldHVybiBmYWxzZTsNCisJfQ0KK30NCmRpZmYgLS1naXQgYS9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQvc3JjL29yZy9lY2xpcHNlL3N0ZW0vYW5hbHlzaXMvYXV0b21hdGljZXhwZXJpbWVudC9wcmVzZW50YXRpb24vQXV0b21hdGljZXhwZXJpbWVudE1vZGVsV2l6YXJkLmphdmEgYi9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQvc3JjL29yZy9lY2xpcHNlL3N0ZW0vYW5hbHlzaXMvYXV0b21hdGljZXhwZXJpbWVudC9wcmVzZW50YXRpb24vQXV0b21hdGljZXhwZXJpbWVudE1vZGVsV2l6YXJkLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTU4MTYxOQotLS0gL2Rldi9udWxsCisrKyBiL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuYXV0b21hdGljZXhwZXJpbWVudC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9hbmFseXNpcy9hdXRvbWF0aWNleHBlcmltZW50L3ByZXNlbnRhdGlvbi9BdXRvbWF0aWNleHBlcmltZW50TW9kZWxXaXphcmQuamF2YQpAQCAtMCwwICsxLDYxMiBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQucHJlc2VudGF0aW9uOw0KKw0KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorICogQ29weXJpZ2h0IChjKSAyMDA5IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLg0KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMNCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjANCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdA0KKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sDQorICoNCisgKiBDb250cmlidXRvcnM6DQorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbg0KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KKw0KKw0KK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0Ow0KK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlzOw0KK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsNCitpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb25zOw0KK2ltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsNCitpbXBvcnQgamF2YS51dGlsLkxpc3Q7DQoraW1wb3J0IGphdmEudXRpbC5NYXA7DQoraW1wb3J0IGphdmEudXRpbC5NaXNzaW5nUmVzb3VyY2VFeGNlcHRpb247DQoraW1wb3J0IGphdmEudXRpbC5TdHJpbmdUb2tlbml6ZXI7DQorDQoraW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklDb250YWluZXI7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklGaWxlOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JRm9sZGVyOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdDsNCitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVJlc291cmNlOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5SZXNvdXJjZXNQbHVnaW47DQoraW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUHJvZ3Jlc3NNb25pdG9yOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGF0aDsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5Db21tb25QbHVnaW47DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5VUkk7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3NpZmllcjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3Q7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5yZXNvdXJjZS5SZXNvdXJjZTsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnJlc291cmNlLlJlc291cmNlU2V0Ow0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUucmVzb3VyY2UuaW1wbC5SZXNvdXJjZVNldEltcGw7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS54bWkuWE1MUmVzb3VyY2U7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLnByb3ZpZGVyLkV4dGVuZGVkSW1hZ2VSZWdpc3RyeTsNCitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuZGlhbG9ncy5NZXNzYWdlRGlhbG9nOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb247DQoraW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVN0cnVjdHVyZWRTZWxlY3Rpb247DQoraW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuU3RydWN0dXJlZFNlbGVjdGlvbjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uud2l6YXJkLldpemFyZDsNCitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uud2l6YXJkLldpemFyZFBhZ2U7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuYXV0b21hdGljZXhwZXJpbWVudC5BdXRvbWF0aWNleHBlcmltZW50RmFjdG9yeTsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5hdXRvbWF0aWNleHBlcmltZW50LkF1dG9tYXRpY2V4cGVyaW1lbnRQYWNrYWdlOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQucHJvdmlkZXIuQXV0b21hdGljZXhwZXJpZW5jZUVkaXRQbHVnaW47DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5TV1Q7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuTW9kaWZ5RXZlbnQ7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuTW9kaWZ5TGlzdGVuZXI7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5sYXlvdXQuR3JpZERhdGE7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5sYXlvdXQuR3JpZExheW91dDsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tYm87DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZTsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuTGFiZWw7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnVpLklOZXdXaXphcmQ7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2g7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2hQYWdlOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5JV29ya2JlbmNoUGFydDsNCitpbXBvcnQgb3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaFdpbmRvdzsNCitpbXBvcnQgb3JnLmVjbGlwc2UudWkuUGFydEluaXRFeGNlcHRpb247DQoraW1wb3J0IG9yZy5lY2xpcHNlLnVpLmFjdGlvbnMuV29ya3NwYWNlTW9kaWZ5T3BlcmF0aW9uOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5kaWFsb2dzLldpemFyZE5ld0ZpbGVDcmVhdGlvblBhZ2U7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnVpLnBhcnQuRmlsZUVkaXRvcklucHV0Ow0KK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5wYXJ0LklTZXRTZWxlY3Rpb25UYXJnZXQ7DQorDQorDQorDQorLyoqDQorICogVGhpcyBpcyBhIHNpbXBsZSB3aXphcmQgZm9yIGNyZWF0aW5nIGEgbmV3IG1vZGVsIGZpbGUuDQorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisgKiBAZ2VuZXJhdGVkDQorICovDQorcHVibGljIGNsYXNzIEF1dG9tYXRpY2V4cGVyaW1lbnRNb2RlbFdpemFyZCBleHRlbmRzIFdpemFyZCBpbXBsZW1lbnRzIElOZXdXaXphcmQgew0KKwkvKioNCisJICogVGhlIHN1cHBvcnRlZCBleHRlbnNpb25zIGZvciBjcmVhdGVkIGZpbGVzLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIHN0YXRpYyBmaW5hbCBMaXN0PFN0cmluZz4gRklMRV9FWFRFTlNJT05TID0NCisJCUNvbGxlY3Rpb25zLnVubW9kaWZpYWJsZUxpc3QoQXJyYXlzLmFzTGlzdChBdXRvbWF0aWNleHBlcmllbmNlRWRpdFBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoIl9VSV9BdXRvbWF0aWNleHBlcmltZW50RWRpdG9yRmlsZW5hbWVFeHRlbnNpb25zIikuc3BsaXQoIlxccyosXFxzKiIpKSk7DQorDQorCS8qKg0KKwkgKiBBIGZvcm1hdHRlZCBsaXN0IG9mIHN1cHBvcnRlZCBmaWxlIGV4dGVuc2lvbnMsIHN1aXRhYmxlIGZvciBkaXNwbGF5Lg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgRk9STUFUVEVEX0ZJTEVfRVhURU5TSU9OUyA9DQorCQlBdXRvbWF0aWNleHBlcmllbmNlRWRpdFBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoIl9VSV9BdXRvbWF0aWNleHBlcmltZW50RWRpdG9yRmlsZW5hbWVFeHRlbnNpb25zIikucmVwbGFjZUFsbCgiXFxzKixcXHMqIiwgIiwgIik7DQorDQorCS8qKg0KKwkgKiBUaGlzIGNhY2hlcyBhbiBpbnN0YW5jZSBvZiB0aGUgbW9kZWwgcGFja2FnZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCBBdXRvbWF0aWNleHBlcmltZW50UGFja2FnZSBhdXRvbWF0aWNleHBlcmltZW50UGFja2FnZSA9IEF1dG9tYXRpY2V4cGVyaW1lbnRQYWNrYWdlLmVJTlNUQU5DRTsNCisNCisJLyoqDQorCSAqIFRoaXMgY2FjaGVzIGFuIGluc3RhbmNlIG9mIHRoZSBtb2RlbCBmYWN0b3J5Lg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIEF1dG9tYXRpY2V4cGVyaW1lbnRGYWN0b3J5IGF1dG9tYXRpY2V4cGVyaW1lbnRGYWN0b3J5ID0gYXV0b21hdGljZXhwZXJpbWVudFBhY2thZ2UuZ2V0QXV0b21hdGljZXhwZXJpbWVudEZhY3RvcnkoKTsNCisNCisJLyoqDQorCSAqIFRoaXMgaXMgdGhlIGZpbGUgY3JlYXRpb24gcGFnZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCBBdXRvbWF0aWNleHBlcmltZW50TW9kZWxXaXphcmROZXdGaWxlQ3JlYXRpb25QYWdlIG5ld0ZpbGVDcmVhdGlvblBhZ2U7DQorDQorCS8qKg0KKwkgKiBUaGlzIGlzIHRoZSBpbml0aWFsIG9iamVjdCBjcmVhdGlvbiBwYWdlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIEF1dG9tYXRpY2V4cGVyaW1lbnRNb2RlbFdpemFyZEluaXRpYWxPYmplY3RDcmVhdGlvblBhZ2UgaW5pdGlhbE9iamVjdENyZWF0aW9uUGFnZTsNCisNCisJLyoqDQorCSAqIFJlbWVtYmVyIHRoZSBzZWxlY3Rpb24gZHVyaW5nIGluaXRpYWxpemF0aW9uIGZvciBwb3B1bGF0aW5nIHRoZSBkZWZhdWx0IGNvbnRhaW5lci4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCBJU3RydWN0dXJlZFNlbGVjdGlvbiBzZWxlY3Rpb247DQorDQorCS8qKg0KKwkgKiBSZW1lbWJlciB0aGUgd29ya2JlbmNoIGR1cmluZyBpbml0aWFsaXphdGlvbi4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCBJV29ya2JlbmNoIHdvcmtiZW5jaDsNCisNCisJLyoqDQorCSAqIENhY2hlcyB0aGUgbmFtZXMgb2YgdGhlIHR5cGVzIHRoYXQgY2FuIGJlIGNyZWF0ZWQgYXMgdGhlIHJvb3Qgb2JqZWN0Lg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIExpc3Q8U3RyaW5nPiBpbml0aWFsT2JqZWN0TmFtZXM7DQorDQorCS8qKg0KKwkgKiBUaGlzIGp1c3QgcmVjb3JkcyB0aGUgaW5mb3JtYXRpb24uDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgdm9pZCBpbml0KElXb3JrYmVuY2ggd29ya2JlbmNoLCBJU3RydWN0dXJlZFNlbGVjdGlvbiBzZWxlY3Rpb24pIHsNCisJCXRoaXMud29ya2JlbmNoID0gd29ya2JlbmNoOw0KKwkJdGhpcy5zZWxlY3Rpb24gPSBzZWxlY3Rpb247DQorCQlzZXRXaW5kb3dUaXRsZShBdXRvbWF0aWNleHBlcmllbmNlRWRpdFBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoIl9VSV9XaXphcmRfbGFiZWwiKSk7DQorCQlzZXREZWZhdWx0UGFnZUltYWdlRGVzY3JpcHRvcihFeHRlbmRlZEltYWdlUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0SW1hZ2VEZXNjcmlwdG9yKEF1dG9tYXRpY2V4cGVyaWVuY2VFZGl0UGx1Z2luLklOU1RBTkNFLmdldEltYWdlKCJmdWxsL3dpemJhbi9OZXdBdXRvbWF0aWNleHBlcmltZW50IikpKTsNCisJfQ0KKw0KKwkvKioNCisJICogUmV0dXJucyB0aGUgbmFtZXMgb2YgdGhlIHR5cGVzIHRoYXQgY2FuIGJlIGNyZWF0ZWQgYXMgdGhlIHJvb3Qgb2JqZWN0Lg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIENvbGxlY3Rpb248U3RyaW5nPiBnZXRJbml0aWFsT2JqZWN0TmFtZXMoKSB7DQorCQlpZiAoaW5pdGlhbE9iamVjdE5hbWVzID09IG51bGwpIHsNCisJCQlpbml0aWFsT2JqZWN0TmFtZXMgPSBuZXcgQXJyYXlMaXN0PFN0cmluZz4oKTsNCisJCQlmb3IgKEVDbGFzc2lmaWVyIGVDbGFzc2lmaWVyIDogYXV0b21hdGljZXhwZXJpbWVudFBhY2thZ2UuZ2V0RUNsYXNzaWZpZXJzKCkpIHsNCisJCQkJaWYgKGVDbGFzc2lmaWVyIGluc3RhbmNlb2YgRUNsYXNzKSB7DQorCQkJCQlFQ2xhc3MgZUNsYXNzID0gKEVDbGFzcyllQ2xhc3NpZmllcjsNCisJCQkJCWlmICghZUNsYXNzLmlzQWJzdHJhY3QoKSkgew0KKwkJCQkJCWluaXRpYWxPYmplY3ROYW1lcy5hZGQoZUNsYXNzLmdldE5hbWUoKSk7DQorCQkJCQl9DQorCQkJCX0NCisJCQl9DQorCQkJQ29sbGVjdGlvbnMuc29ydChpbml0aWFsT2JqZWN0TmFtZXMsIENvbW1vblBsdWdpbi5JTlNUQU5DRS5nZXRDb21wYXJhdG9yKCkpOw0KKwkJfQ0KKwkJcmV0dXJuIGluaXRpYWxPYmplY3ROYW1lczsNCisJfQ0KKw0KKwkvKioNCisJICogQ3JlYXRlIGEgbmV3IG1vZGVsLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIEVPYmplY3QgY3JlYXRlSW5pdGlhbE1vZGVsKCkgew0KKwkJRUNsYXNzIGVDbGFzcyA9IChFQ2xhc3MpYXV0b21hdGljZXhwZXJpbWVudFBhY2thZ2UuZ2V0RUNsYXNzaWZpZXIoaW5pdGlhbE9iamVjdENyZWF0aW9uUGFnZS5nZXRJbml0aWFsT2JqZWN0TmFtZSgpKTsNCisJCUVPYmplY3Qgcm9vdE9iamVjdCA9IGF1dG9tYXRpY2V4cGVyaW1lbnRGYWN0b3J5LmNyZWF0ZShlQ2xhc3MpOw0KKwkJcmV0dXJuIHJvb3RPYmplY3Q7DQorCX0NCisNCisJLyoqDQorCSAqIERvIHRoZSB3b3JrIGFmdGVyIGV2ZXJ5dGhpbmcgaXMgc3BlY2lmaWVkLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJQE92ZXJyaWRlDQorCXB1YmxpYyBib29sZWFuIHBlcmZvcm1GaW5pc2goKSB7DQorCQl0cnkgew0KKwkJCS8vIFJlbWVtYmVyIHRoZSBmaWxlLg0KKwkJCS8vDQorCQkJZmluYWwgSUZpbGUgbW9kZWxGaWxlID0gZ2V0TW9kZWxGaWxlKCk7DQorDQorCQkJLy8gRG8gdGhlIHdvcmsgd2l0aGluIGFuIG9wZXJhdGlvbi4NCisJCQkvLw0KKwkJCVdvcmtzcGFjZU1vZGlmeU9wZXJhdGlvbiBvcGVyYXRpb24gPQ0KKwkJCQluZXcgV29ya3NwYWNlTW9kaWZ5T3BlcmF0aW9uKCkgew0KKwkJCQkJQE92ZXJyaWRlDQorCQkJCQlwcm90ZWN0ZWQgdm9pZCBleGVjdXRlKElQcm9ncmVzc01vbml0b3IgcHJvZ3Jlc3NNb25pdG9yKSB7DQorCQkJCQkJdHJ5IHsNCisJCQkJCQkJLy8gQ3JlYXRlIGEgcmVzb3VyY2Ugc2V0DQorCQkJCQkJCS8vDQorCQkJCQkJCVJlc291cmNlU2V0IHJlc291cmNlU2V0ID0gbmV3IFJlc291cmNlU2V0SW1wbCgpOw0KKw0KKwkJCQkJCQkvLyBHZXQgdGhlIFVSSSBvZiB0aGUgbW9kZWwgZmlsZS4NCisJCQkJCQkJLy8NCisJCQkJCQkJVVJJIGZpbGVVUkkgPSBVUkkuY3JlYXRlUGxhdGZvcm1SZXNvdXJjZVVSSShtb2RlbEZpbGUuZ2V0RnVsbFBhdGgoKS50b1N0cmluZygpLCB0cnVlKTsNCisNCisJCQkJCQkJLy8gQ3JlYXRlIGEgcmVzb3VyY2UgZm9yIHRoaXMgZmlsZS4NCisJCQkJCQkJLy8NCisJCQkJCQkJUmVzb3VyY2UgcmVzb3VyY2UgPSByZXNvdXJjZVNldC5jcmVhdGVSZXNvdXJjZShmaWxlVVJJKTsNCisNCisJCQkJCQkJLy8gQWRkIHRoZSBpbml0aWFsIG1vZGVsIG9iamVjdCB0byB0aGUgY29udGVudHMuDQorCQkJCQkJCS8vDQorCQkJCQkJCUVPYmplY3Qgcm9vdE9iamVjdCA9IGNyZWF0ZUluaXRpYWxNb2RlbCgpOw0KKwkJCQkJCQlpZiAocm9vdE9iamVjdCAhPSBudWxsKSB7DQorCQkJCQkJCQlyZXNvdXJjZS5nZXRDb250ZW50cygpLmFkZChyb290T2JqZWN0KTsNCisJCQkJCQkJfQ0KKw0KKwkJCQkJCQkvLyBTYXZlIHRoZSBjb250ZW50cyBvZiB0aGUgcmVzb3VyY2UgdG8gdGhlIGZpbGUgc3lzdGVtLg0KKwkJCQkJCQkvLw0KKwkJCQkJCQlNYXA8T2JqZWN0LCBPYmplY3Q+IG9wdGlvbnMgPSBuZXcgSGFzaE1hcDxPYmplY3QsIE9iamVjdD4oKTsNCisJCQkJCQkJb3B0aW9ucy5wdXQoWE1MUmVzb3VyY2UuT1BUSU9OX0VOQ09ESU5HLCBpbml0aWFsT2JqZWN0Q3JlYXRpb25QYWdlLmdldEVuY29kaW5nKCkpOw0KKwkJCQkJCQlyZXNvdXJjZS5zYXZlKG9wdGlvbnMpOw0KKwkJCQkJCX0NCisJCQkJCQljYXRjaCAoRXhjZXB0aW9uIGV4Y2VwdGlvbikgew0KKwkJCQkJCQlBdXRvbWF0aWNleHBlcmllbmNlRWRpdFBsdWdpbi5JTlNUQU5DRS5sb2coZXhjZXB0aW9uKTsNCisJCQkJCQl9DQorCQkJCQkJZmluYWxseSB7DQorCQkJCQkJCXByb2dyZXNzTW9uaXRvci5kb25lKCk7DQorCQkJCQkJfQ0KKwkJCQkJfQ0KKwkJCQl9Ow0KKw0KKwkJCWdldENvbnRhaW5lcigpLnJ1bihmYWxzZSwgZmFsc2UsIG9wZXJhdGlvbik7DQorDQorCQkJLy8gU2VsZWN0IHRoZSBuZXcgZmlsZSByZXNvdXJjZSBpbiB0aGUgY3VycmVudCB2aWV3Lg0KKwkJCS8vDQorCQkJSVdvcmtiZW5jaFdpbmRvdyB3b3JrYmVuY2hXaW5kb3cgPSB3b3JrYmVuY2guZ2V0QWN0aXZlV29ya2JlbmNoV2luZG93KCk7DQorCQkJSVdvcmtiZW5jaFBhZ2UgcGFnZSA9IHdvcmtiZW5jaFdpbmRvdy5nZXRBY3RpdmVQYWdlKCk7DQorCQkJZmluYWwgSVdvcmtiZW5jaFBhcnQgYWN0aXZlUGFydCA9IHBhZ2UuZ2V0QWN0aXZlUGFydCgpOw0KKwkJCWlmIChhY3RpdmVQYXJ0IGluc3RhbmNlb2YgSVNldFNlbGVjdGlvblRhcmdldCkgew0KKwkJCQlmaW5hbCBJU2VsZWN0aW9uIHRhcmdldFNlbGVjdGlvbiA9IG5ldyBTdHJ1Y3R1cmVkU2VsZWN0aW9uKG1vZGVsRmlsZSk7DQorCQkJCWdldFNoZWxsKCkuZ2V0RGlzcGxheSgpLmFzeW5jRXhlYw0KKwkJCQkJKG5ldyBSdW5uYWJsZSgpIHsNCisJCQkJCQkgcHVibGljIHZvaWQgcnVuKCkgew0KKwkJCQkJCQkgKChJU2V0U2VsZWN0aW9uVGFyZ2V0KWFjdGl2ZVBhcnQpLnNlbGVjdFJldmVhbCh0YXJnZXRTZWxlY3Rpb24pOw0KKwkJCQkJCSB9DQorCQkJCQkgfSk7DQorCQkJfQ0KKw0KKwkJCS8vIE9wZW4gYW4gZWRpdG9yIG9uIHRoZSBuZXcgZmlsZS4NCisJCQkvLw0KKwkJCXRyeSB7DQorCQkJCXBhZ2Uub3BlbkVkaXRvcg0KKwkJCQkJKG5ldyBGaWxlRWRpdG9ySW5wdXQobW9kZWxGaWxlKSwNCisJCQkJCSB3b3JrYmVuY2guZ2V0RWRpdG9yUmVnaXN0cnkoKS5nZXREZWZhdWx0RWRpdG9yKG1vZGVsRmlsZS5nZXRGdWxsUGF0aCgpLnRvU3RyaW5nKCkpLmdldElkKCkpOw0KKwkJCX0NCisJCQljYXRjaCAoUGFydEluaXRFeGNlcHRpb24gZXhjZXB0aW9uKSB7DQorCQkJCU1lc3NhZ2VEaWFsb2cub3BlbkVycm9yKHdvcmtiZW5jaFdpbmRvdy5nZXRTaGVsbCgpLCBBdXRvbWF0aWNleHBlcmllbmNlRWRpdFBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoIl9VSV9PcGVuRWRpdG9yRXJyb3JfbGFiZWwiKSwgZXhjZXB0aW9uLmdldE1lc3NhZ2UoKSk7DQorCQkJCXJldHVybiBmYWxzZTsNCisJCQl9DQorDQorCQkJcmV0dXJuIHRydWU7DQorCQl9DQorCQljYXRjaCAoRXhjZXB0aW9uIGV4Y2VwdGlvbikgew0KKwkJCUF1dG9tYXRpY2V4cGVyaWVuY2VFZGl0UGx1Z2luLklOU1RBTkNFLmxvZyhleGNlcHRpb24pOw0KKwkJCXJldHVybiBmYWxzZTsNCisJCX0NCisJfQ0KKw0KKwkvKioNCisJICogVGhpcyBpcyB0aGUgb25lIHBhZ2Ugb2YgdGhlIHdpemFyZC4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBjbGFzcyBBdXRvbWF0aWNleHBlcmltZW50TW9kZWxXaXphcmROZXdGaWxlQ3JlYXRpb25QYWdlIGV4dGVuZHMgV2l6YXJkTmV3RmlsZUNyZWF0aW9uUGFnZSB7DQorCQkvKioNCisJCSAqIFBhc3MgaW4gdGhlIHNlbGVjdGlvbi4NCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJCSAqIEBnZW5lcmF0ZWQNCisJCSAqLw0KKwkJcHVibGljIEF1dG9tYXRpY2V4cGVyaW1lbnRNb2RlbFdpemFyZE5ld0ZpbGVDcmVhdGlvblBhZ2UoU3RyaW5nIHBhZ2VJZCwgSVN0cnVjdHVyZWRTZWxlY3Rpb24gc2VsZWN0aW9uKSB7DQorCQkJc3VwZXIocGFnZUlkLCBzZWxlY3Rpb24pOw0KKwkJfQ0KKw0KKwkJLyoqDQorCQkgKiBUaGUgZnJhbWV3b3JrIGNhbGxzIHRoaXMgdG8gc2VlIGlmIHRoZSBmaWxlIGlzIGNvcnJlY3QuDQorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCQkgKiBAZ2VuZXJhdGVkDQorCQkgKi8NCisJCUBPdmVycmlkZQ0KKwkJcHJvdGVjdGVkIGJvb2xlYW4gdmFsaWRhdGVQYWdlKCkgew0KKwkJCWlmIChzdXBlci52YWxpZGF0ZVBhZ2UoKSkgew0KKwkJCQlTdHJpbmcgZXh0ZW5zaW9uID0gbmV3IFBhdGgoZ2V0RmlsZU5hbWUoKSkuZ2V0RmlsZUV4dGVuc2lvbigpOw0KKwkJCQlpZiAoZXh0ZW5zaW9uID09IG51bGwgfHwgIUZJTEVfRVhURU5TSU9OUy5jb250YWlucyhleHRlbnNpb24pKSB7DQorCQkJCQlTdHJpbmcga2V5ID0gRklMRV9FWFRFTlNJT05TLnNpemUoKSA+IDEgPyAiX1dBUk5fRmlsZW5hbWVFeHRlbnNpb25zIiA6ICJfV0FSTl9GaWxlbmFtZUV4dGVuc2lvbiI7DQorCQkJCQlzZXRFcnJvck1lc3NhZ2UoQXV0b21hdGljZXhwZXJpZW5jZUVkaXRQbHVnaW4uSU5TVEFOQ0UuZ2V0U3RyaW5nKGtleSwgbmV3IE9iamVjdCBbXSB7IEZPUk1BVFRFRF9GSUxFX0VYVEVOU0lPTlMgfSkpOw0KKwkJCQkJcmV0dXJuIGZhbHNlOw0KKwkJCQl9DQorCQkJCXJldHVybiB0cnVlOw0KKwkJCX0NCisJCQlyZXR1cm4gZmFsc2U7DQorCQl9DQorDQorCQkvKioNCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJCSAqIEBnZW5lcmF0ZWQNCisJCSAqLw0KKwkJcHVibGljIElGaWxlIGdldE1vZGVsRmlsZSgpIHsNCisJCQlyZXR1cm4gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmdldFJvb3QoKS5nZXRGaWxlKGdldENvbnRhaW5lckZ1bGxQYXRoKCkuYXBwZW5kKGdldEZpbGVOYW1lKCkpKTsNCisJCX0NCisJfQ0KKw0KKwkvKioNCisJICogVGhpcyBpcyB0aGUgcGFnZSB3aGVyZSB0aGUgdHlwZSBvZiBvYmplY3QgdG8gY3JlYXRlIGlzIHNlbGVjdGVkLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIGNsYXNzIEF1dG9tYXRpY2V4cGVyaW1lbnRNb2RlbFdpemFyZEluaXRpYWxPYmplY3RDcmVhdGlvblBhZ2UgZXh0ZW5kcyBXaXphcmRQYWdlIHsNCisJCS8qKg0KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkJICogQGdlbmVyYXRlZA0KKwkJICovDQorCQlwcm90ZWN0ZWQgQ29tYm8gaW5pdGlhbE9iamVjdEZpZWxkOw0KKw0KKwkJLyoqDQorCQkgKiBAZ2VuZXJhdGVkDQorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCQkgKi8NCisJCXByb3RlY3RlZCBMaXN0PFN0cmluZz4gZW5jb2RpbmdzOw0KKw0KKwkJLyoqDQorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCQkgKiBAZ2VuZXJhdGVkDQorCQkgKi8NCisJCXByb3RlY3RlZCBDb21ibyBlbmNvZGluZ0ZpZWxkOw0KKw0KKwkJLyoqDQorCQkgKiBQYXNzIGluIHRoZSBzZWxlY3Rpb24uDQorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCQkgKiBAZ2VuZXJhdGVkDQorCQkgKi8NCisJCXB1YmxpYyBBdXRvbWF0aWNleHBlcmltZW50TW9kZWxXaXphcmRJbml0aWFsT2JqZWN0Q3JlYXRpb25QYWdlKFN0cmluZyBwYWdlSWQpIHsNCisJCQlzdXBlcihwYWdlSWQpOw0KKwkJfQ0KKw0KKwkJLyoqDQorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCQkgKiBAZ2VuZXJhdGVkDQorCQkgKi8NCisJCXB1YmxpYyB2b2lkIGNyZWF0ZUNvbnRyb2woQ29tcG9zaXRlIHBhcmVudCkgew0KKwkJCUNvbXBvc2l0ZSBjb21wb3NpdGUgPSBuZXcgQ29tcG9zaXRlKHBhcmVudCwgU1dULk5PTkUpOyB7DQorCQkJCUdyaWRMYXlvdXQgbGF5b3V0ID0gbmV3IEdyaWRMYXlvdXQoKTsNCisJCQkJbGF5b3V0Lm51bUNvbHVtbnMgPSAxOw0KKwkJCQlsYXlvdXQudmVydGljYWxTcGFjaW5nID0gMTI7DQorCQkJCWNvbXBvc2l0ZS5zZXRMYXlvdXQobGF5b3V0KTsNCisNCisJCQkJR3JpZERhdGEgZGF0YSA9IG5ldyBHcmlkRGF0YSgpOw0KKwkJCQlkYXRhLnZlcnRpY2FsQWxpZ25tZW50ID0gR3JpZERhdGEuRklMTDsNCisJCQkJZGF0YS5ncmFiRXhjZXNzVmVydGljYWxTcGFjZSA9IHRydWU7DQorCQkJCWRhdGEuaG9yaXpvbnRhbEFsaWdubWVudCA9IEdyaWREYXRhLkZJTEw7DQorCQkJCWNvbXBvc2l0ZS5zZXRMYXlvdXREYXRhKGRhdGEpOw0KKwkJCX0NCisNCisJCQlMYWJlbCBjb250YWluZXJMYWJlbCA9IG5ldyBMYWJlbChjb21wb3NpdGUsIFNXVC5MRUZUKTsNCisJCQl7DQorCQkJCWNvbnRhaW5lckxhYmVsLnNldFRleHQoQXV0b21hdGljZXhwZXJpZW5jZUVkaXRQbHVnaW4uSU5TVEFOQ0UuZ2V0U3RyaW5nKCJfVUlfTW9kZWxPYmplY3QiKSk7DQorDQorCQkJCUdyaWREYXRhIGRhdGEgPSBuZXcgR3JpZERhdGEoKTsNCisJCQkJZGF0YS5ob3Jpem9udGFsQWxpZ25tZW50ID0gR3JpZERhdGEuRklMTDsNCisJCQkJY29udGFpbmVyTGFiZWwuc2V0TGF5b3V0RGF0YShkYXRhKTsNCisJCQl9DQorDQorCQkJaW5pdGlhbE9iamVjdEZpZWxkID0gbmV3IENvbWJvKGNvbXBvc2l0ZSwgU1dULkJPUkRFUik7DQorCQkJew0KKwkJCQlHcmlkRGF0YSBkYXRhID0gbmV3IEdyaWREYXRhKCk7DQorCQkJCWRhdGEuaG9yaXpvbnRhbEFsaWdubWVudCA9IEdyaWREYXRhLkZJTEw7DQorCQkJCWRhdGEuZ3JhYkV4Y2Vzc0hvcml6b250YWxTcGFjZSA9IHRydWU7DQorCQkJCWluaXRpYWxPYmplY3RGaWVsZC5zZXRMYXlvdXREYXRhKGRhdGEpOw0KKwkJCX0NCisNCisJCQlmb3IgKFN0cmluZyBvYmplY3ROYW1lIDogZ2V0SW5pdGlhbE9iamVjdE5hbWVzKCkpIHsNCisJCQkJaW5pdGlhbE9iamVjdEZpZWxkLmFkZChnZXRMYWJlbChvYmplY3ROYW1lKSk7DQorCQkJfQ0KKw0KKwkJCWlmIChpbml0aWFsT2JqZWN0RmllbGQuZ2V0SXRlbUNvdW50KCkgPT0gMSkgew0KKwkJCQlpbml0aWFsT2JqZWN0RmllbGQuc2VsZWN0KDApOw0KKwkJCX0NCisJCQlpbml0aWFsT2JqZWN0RmllbGQuYWRkTW9kaWZ5TGlzdGVuZXIodmFsaWRhdG9yKTsNCisNCisJCQlMYWJlbCBlbmNvZGluZ0xhYmVsID0gbmV3IExhYmVsKGNvbXBvc2l0ZSwgU1dULkxFRlQpOw0KKwkJCXsNCisJCQkJZW5jb2RpbmdMYWJlbC5zZXRUZXh0KEF1dG9tYXRpY2V4cGVyaWVuY2VFZGl0UGx1Z2luLklOU1RBTkNFLmdldFN0cmluZygiX1VJX1hNTEVuY29kaW5nIikpOw0KKw0KKwkJCQlHcmlkRGF0YSBkYXRhID0gbmV3IEdyaWREYXRhKCk7DQorCQkJCWRhdGEuaG9yaXpvbnRhbEFsaWdubWVudCA9IEdyaWREYXRhLkZJTEw7DQorCQkJCWVuY29kaW5nTGFiZWwuc2V0TGF5b3V0RGF0YShkYXRhKTsNCisJCQl9DQorCQkJZW5jb2RpbmdGaWVsZCA9IG5ldyBDb21ibyhjb21wb3NpdGUsIFNXVC5CT1JERVIpOw0KKwkJCXsNCisJCQkJR3JpZERhdGEgZGF0YSA9IG5ldyBHcmlkRGF0YSgpOw0KKwkJCQlkYXRhLmhvcml6b250YWxBbGlnbm1lbnQgPSBHcmlkRGF0YS5GSUxMOw0KKwkJCQlkYXRhLmdyYWJFeGNlc3NIb3Jpem9udGFsU3BhY2UgPSB0cnVlOw0KKwkJCQllbmNvZGluZ0ZpZWxkLnNldExheW91dERhdGEoZGF0YSk7DQorCQkJfQ0KKw0KKwkJCWZvciAoU3RyaW5nIGVuY29kaW5nIDogZ2V0RW5jb2RpbmdzKCkpIHsNCisJCQkJZW5jb2RpbmdGaWVsZC5hZGQoZW5jb2RpbmcpOw0KKwkJCX0NCisNCisJCQllbmNvZGluZ0ZpZWxkLnNlbGVjdCgwKTsNCisJCQllbmNvZGluZ0ZpZWxkLmFkZE1vZGlmeUxpc3RlbmVyKHZhbGlkYXRvcik7DQorDQorCQkJc2V0UGFnZUNvbXBsZXRlKHZhbGlkYXRlUGFnZSgpKTsNCisJCQlzZXRDb250cm9sKGNvbXBvc2l0ZSk7DQorCQl9DQorDQorCQkvKioNCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJCSAqIEBnZW5lcmF0ZWQNCisJCSAqLw0KKwkJcHJvdGVjdGVkIE1vZGlmeUxpc3RlbmVyIHZhbGlkYXRvciA9DQorCQkJbmV3IE1vZGlmeUxpc3RlbmVyKCkgew0KKwkJCQlwdWJsaWMgdm9pZCBtb2RpZnlUZXh0KE1vZGlmeUV2ZW50IGUpIHsNCisJCQkJCXNldFBhZ2VDb21wbGV0ZSh2YWxpZGF0ZVBhZ2UoKSk7DQorCQkJCX0NCisJCQl9Ow0KKw0KKwkJLyoqDQorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCQkgKiBAZ2VuZXJhdGVkDQorCQkgKi8NCisJCXByb3RlY3RlZCBib29sZWFuIHZhbGlkYXRlUGFnZSgpIHsNCisJCQlyZXR1cm4gZ2V0SW5pdGlhbE9iamVjdE5hbWUoKSAhPSBudWxsICYmIGdldEVuY29kaW5ncygpLmNvbnRhaW5zKGVuY29kaW5nRmllbGQuZ2V0VGV4dCgpKTsNCisJCX0NCisNCisJCS8qKg0KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkJICogQGdlbmVyYXRlZA0KKwkJICovDQorCQlAT3ZlcnJpZGUNCisJCXB1YmxpYyB2b2lkIHNldFZpc2libGUoYm9vbGVhbiB2aXNpYmxlKSB7DQorCQkJc3VwZXIuc2V0VmlzaWJsZSh2aXNpYmxlKTsNCisJCQlpZiAodmlzaWJsZSkgew0KKwkJCQlpZiAoaW5pdGlhbE9iamVjdEZpZWxkLmdldEl0ZW1Db3VudCgpID09IDEpIHsNCisJCQkJCWluaXRpYWxPYmplY3RGaWVsZC5jbGVhclNlbGVjdGlvbigpOw0KKwkJCQkJZW5jb2RpbmdGaWVsZC5zZXRGb2N1cygpOw0KKwkJCQl9DQorCQkJCWVsc2Ugew0KKwkJCQkJZW5jb2RpbmdGaWVsZC5jbGVhclNlbGVjdGlvbigpOw0KKwkJCQkJaW5pdGlhbE9iamVjdEZpZWxkLnNldEZvY3VzKCk7DQorCQkJCX0NCisJCQl9DQorCQl9DQorDQorCQkvKioNCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJCSAqIEBnZW5lcmF0ZWQNCisJCSAqLw0KKwkJcHVibGljIFN0cmluZyBnZXRJbml0aWFsT2JqZWN0TmFtZSgpIHsNCisJCQlTdHJpbmcgbGFiZWwgPSBpbml0aWFsT2JqZWN0RmllbGQuZ2V0VGV4dCgpOw0KKw0KKwkJCWZvciAoU3RyaW5nIG5hbWUgOiBnZXRJbml0aWFsT2JqZWN0TmFtZXMoKSkgew0KKwkJCQlpZiAoZ2V0TGFiZWwobmFtZSkuZXF1YWxzKGxhYmVsKSkgew0KKwkJCQkJcmV0dXJuIG5hbWU7DQorCQkJCX0NCisJCQl9DQorCQkJcmV0dXJuIG51bGw7DQorCQl9DQorDQorCQkvKioNCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJCSAqIEBnZW5lcmF0ZWQNCisJCSAqLw0KKwkJcHVibGljIFN0cmluZyBnZXRFbmNvZGluZygpIHsNCisJCQlyZXR1cm4gZW5jb2RpbmdGaWVsZC5nZXRUZXh0KCk7DQorCQl9DQorDQorCQkvKioNCisJCSAqIFJldHVybnMgdGhlIGxhYmVsIGZvciB0aGUgc3BlY2lmaWVkIHR5cGUgbmFtZS4NCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJCSAqIEBnZW5lcmF0ZWQNCisJCSAqLw0KKwkJcHJvdGVjdGVkIFN0cmluZyBnZXRMYWJlbChTdHJpbmcgdHlwZU5hbWUpIHsNCisJCQl0cnkgew0KKwkJCQlyZXR1cm4gQXV0b21hdGljZXhwZXJpZW5jZUVkaXRQbHVnaW4uSU5TVEFOQ0UuZ2V0U3RyaW5nKCJfVUlfIiArIHR5cGVOYW1lICsgIl90eXBlIik7DQorCQkJfQ0KKwkJCWNhdGNoKE1pc3NpbmdSZXNvdXJjZUV4Y2VwdGlvbiBtcmUpIHsNCisJCQkJQXV0b21hdGljZXhwZXJpZW5jZUVkaXRQbHVnaW4uSU5TVEFOQ0UubG9nKG1yZSk7DQorCQkJfQ0KKwkJCXJldHVybiB0eXBlTmFtZTsNCisJCX0NCisNCisJCS8qKg0KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkJICogQGdlbmVyYXRlZA0KKwkJICovDQorCQlwcm90ZWN0ZWQgQ29sbGVjdGlvbjxTdHJpbmc+IGdldEVuY29kaW5ncygpIHsNCisJCQlpZiAoZW5jb2RpbmdzID09IG51bGwpIHsNCisJCQkJZW5jb2RpbmdzID0gbmV3IEFycmF5TGlzdDxTdHJpbmc+KCk7DQorCQkJCWZvciAoU3RyaW5nVG9rZW5pemVyIHN0cmluZ1Rva2VuaXplciA9IG5ldyBTdHJpbmdUb2tlbml6ZXIoQXV0b21hdGljZXhwZXJpZW5jZUVkaXRQbHVnaW4uSU5TVEFOQ0UuZ2V0U3RyaW5nKCJfVUlfWE1MRW5jb2RpbmdDaG9pY2VzIikpOyBzdHJpbmdUb2tlbml6ZXIuaGFzTW9yZVRva2VucygpOyApIHsNCisJCQkJCWVuY29kaW5ncy5hZGQoc3RyaW5nVG9rZW5pemVyLm5leHRUb2tlbigpKTsNCisJCQkJfQ0KKwkJCX0NCisJCQlyZXR1cm4gZW5jb2RpbmdzOw0KKwkJfQ0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGUgZnJhbWV3b3JrIGNhbGxzIHRoaXMgdG8gY3JlYXRlIHRoZSBjb250ZW50cyBvZiB0aGUgd2l6YXJkLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJCUBPdmVycmlkZQ0KKwlwdWJsaWMgdm9pZCBhZGRQYWdlcygpIHsNCisJCS8vIENyZWF0ZSBhIHBhZ2UsIHNldCB0aGUgdGl0bGUsIGFuZCB0aGUgaW5pdGlhbCBtb2RlbCBmaWxlIG5hbWUuDQorCQkvLw0KKwkJbmV3RmlsZUNyZWF0aW9uUGFnZSA9IG5ldyBBdXRvbWF0aWNleHBlcmltZW50TW9kZWxXaXphcmROZXdGaWxlQ3JlYXRpb25QYWdlKCJXaGF0ZXZlciIsIHNlbGVjdGlvbik7DQorCQluZXdGaWxlQ3JlYXRpb25QYWdlLnNldFRpdGxlKEF1dG9tYXRpY2V4cGVyaWVuY2VFZGl0UGx1Z2luLklOU1RBTkNFLmdldFN0cmluZygiX1VJX0F1dG9tYXRpY2V4cGVyaW1lbnRNb2RlbFdpemFyZF9sYWJlbCIpKTsNCisJCW5ld0ZpbGVDcmVhdGlvblBhZ2Uuc2V0RGVzY3JpcHRpb24oQXV0b21hdGljZXhwZXJpZW5jZUVkaXRQbHVnaW4uSU5TVEFOQ0UuZ2V0U3RyaW5nKCJfVUlfQXV0b21hdGljZXhwZXJpbWVudE1vZGVsV2l6YXJkX2Rlc2NyaXB0aW9uIikpOw0KKwkJbmV3RmlsZUNyZWF0aW9uUGFnZS5zZXRGaWxlTmFtZShBdXRvbWF0aWNleHBlcmllbmNlRWRpdFBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoIl9VSV9BdXRvbWF0aWNleHBlcmltZW50RWRpdG9yRmlsZW5hbWVEZWZhdWx0QmFzZSIpICsgIi4iICsgRklMRV9FWFRFTlNJT05TLmdldCgwKSk7DQorCQlhZGRQYWdlKG5ld0ZpbGVDcmVhdGlvblBhZ2UpOw0KKw0KKwkJLy8gVHJ5IGFuZCBnZXQgdGhlIHJlc291cmNlIHNlbGVjdGlvbiB0byBkZXRlcm1pbmUgYSBjdXJyZW50IGRpcmVjdG9yeSBmb3IgdGhlIGZpbGUgZGlhbG9nLg0KKwkJLy8NCisJCWlmIChzZWxlY3Rpb24gIT0gbnVsbCAmJiAhc2VsZWN0aW9uLmlzRW1wdHkoKSkgew0KKwkJCS8vIEdldCB0aGUgcmVzb3VyY2UuLi4NCisJCQkvLw0KKwkJCU9iamVjdCBzZWxlY3RlZEVsZW1lbnQgPSBzZWxlY3Rpb24uaXRlcmF0b3IoKS5uZXh0KCk7DQorCQkJaWYgKHNlbGVjdGVkRWxlbWVudCBpbnN0YW5jZW9mIElSZXNvdXJjZSkgew0KKwkJCQkvLyBHZXQgdGhlIHJlc291cmNlIHBhcmVudCwgaWYgaXRzIGEgZmlsZS4NCisJCQkJLy8NCisJCQkJSVJlc291cmNlIHNlbGVjdGVkUmVzb3VyY2UgPSAoSVJlc291cmNlKXNlbGVjdGVkRWxlbWVudDsNCisJCQkJaWYgKHNlbGVjdGVkUmVzb3VyY2UuZ2V0VHlwZSgpID09IElSZXNvdXJjZS5GSUxFKSB7DQorCQkJCQlzZWxlY3RlZFJlc291cmNlID0gc2VsZWN0ZWRSZXNvdXJjZS5nZXRQYXJlbnQoKTsNCisJCQkJfQ0KKw0KKwkJCQkvLyBUaGlzIGdpdmVzIHVzIGEgZGlyZWN0b3J5Li4uDQorCQkJCS8vDQorCQkJCWlmIChzZWxlY3RlZFJlc291cmNlIGluc3RhbmNlb2YgSUZvbGRlciB8fCBzZWxlY3RlZFJlc291cmNlIGluc3RhbmNlb2YgSVByb2plY3QpIHsNCisJCQkJCS8vIFNldCB0aGlzIGZvciB0aGUgY29udGFpbmVyLg0KKwkJCQkJLy8NCisJCQkJCW5ld0ZpbGVDcmVhdGlvblBhZ2Uuc2V0Q29udGFpbmVyRnVsbFBhdGgoc2VsZWN0ZWRSZXNvdXJjZS5nZXRGdWxsUGF0aCgpKTsNCisNCisJCQkJCS8vIE1ha2UgdXAgYSB1bmlxdWUgbmV3IG5hbWUgaGVyZS4NCisJCQkJCS8vDQorCQkJCQlTdHJpbmcgZGVmYXVsdE1vZGVsQmFzZUZpbGVuYW1lID0gQXV0b21hdGljZXhwZXJpZW5jZUVkaXRQbHVnaW4uSU5TVEFOQ0UuZ2V0U3RyaW5nKCJfVUlfQXV0b21hdGljZXhwZXJpbWVudEVkaXRvckZpbGVuYW1lRGVmYXVsdEJhc2UiKTsNCisJCQkJCVN0cmluZyBkZWZhdWx0TW9kZWxGaWxlbmFtZUV4dGVuc2lvbiA9IEZJTEVfRVhURU5TSU9OUy5nZXQoMCk7DQorCQkJCQlTdHJpbmcgbW9kZWxGaWxlbmFtZSA9IGRlZmF1bHRNb2RlbEJhc2VGaWxlbmFtZSArICIuIiArIGRlZmF1bHRNb2RlbEZpbGVuYW1lRXh0ZW5zaW9uOw0KKwkJCQkJZm9yIChpbnQgaSA9IDE7ICgoSUNvbnRhaW5lcilzZWxlY3RlZFJlc291cmNlKS5maW5kTWVtYmVyKG1vZGVsRmlsZW5hbWUpICE9IG51bGw7ICsraSkgew0KKwkJCQkJCW1vZGVsRmlsZW5hbWUgPSBkZWZhdWx0TW9kZWxCYXNlRmlsZW5hbWUgKyBpICsgIi4iICsgZGVmYXVsdE1vZGVsRmlsZW5hbWVFeHRlbnNpb247DQorCQkJCQl9DQorCQkJCQluZXdGaWxlQ3JlYXRpb25QYWdlLnNldEZpbGVOYW1lKG1vZGVsRmlsZW5hbWUpOw0KKwkJCQl9DQorCQkJfQ0KKwkJfQ0KKwkJaW5pdGlhbE9iamVjdENyZWF0aW9uUGFnZSA9IG5ldyBBdXRvbWF0aWNleHBlcmltZW50TW9kZWxXaXphcmRJbml0aWFsT2JqZWN0Q3JlYXRpb25QYWdlKCJXaGF0ZXZlcjIiKTsNCisJCWluaXRpYWxPYmplY3RDcmVhdGlvblBhZ2Uuc2V0VGl0bGUoQXV0b21hdGljZXhwZXJpZW5jZUVkaXRQbHVnaW4uSU5TVEFOQ0UuZ2V0U3RyaW5nKCJfVUlfQXV0b21hdGljZXhwZXJpbWVudE1vZGVsV2l6YXJkX2xhYmVsIikpOw0KKwkJaW5pdGlhbE9iamVjdENyZWF0aW9uUGFnZS5zZXREZXNjcmlwdGlvbihBdXRvbWF0aWNleHBlcmllbmNlRWRpdFBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoIl9VSV9XaXphcmRfaW5pdGlhbF9vYmplY3RfZGVzY3JpcHRpb24iKSk7DQorCQlhZGRQYWdlKGluaXRpYWxPYmplY3RDcmVhdGlvblBhZ2UpOw0KKwl9DQorDQorCS8qKg0KKwkgKiBHZXQgdGhlIGZpbGUgZnJvbSB0aGUgcGFnZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBJRmlsZSBnZXRNb2RlbEZpbGUoKSB7DQorCQlyZXR1cm4gbmV3RmlsZUNyZWF0aW9uUGFnZS5nZXRNb2RlbEZpbGUoKTsNCisJfQ0KKw0KK30NCmRpZmYgLS1naXQgYS9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQvc3JjL29yZy9lY2xpcHNlL3N0ZW0vYW5hbHlzaXMvYXV0b21hdGljZXhwZXJpbWVudC9wcm92aWRlci9BdXRvbWF0aWNFeHBlcmltZW50SXRlbVByb3ZpZGVyLmphdmEgYi9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQvc3JjL29yZy9lY2xpcHNlL3N0ZW0vYW5hbHlzaXMvYXV0b21hdGljZXhwZXJpbWVudC9wcm92aWRlci9BdXRvbWF0aWNFeHBlcmltZW50SXRlbVByb3ZpZGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWY5OTZmMAotLS0gL2Rldi9udWxsCisrKyBiL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuYXV0b21hdGljZXhwZXJpbWVudC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9hbmFseXNpcy9hdXRvbWF0aWNleHBlcmltZW50L3Byb3ZpZGVyL0F1dG9tYXRpY0V4cGVyaW1lbnRJdGVtUHJvdmlkZXIuamF2YQpAQCAtMCwwICsxLDM4NSBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQucHJvdmlkZXI7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTAgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKKworaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOworaW1wb3J0IGphdmEudXRpbC5MaXN0OworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5VUkk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVTdHJ1Y3R1cmFsRmVhdHVyZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5Db21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklFZGl0aW5nRG9tYWluSXRlbVByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtTGFiZWxQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbVByb3BlcnR5RGVzY3JpcHRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbVByb3BlcnR5U291cmNlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklTdHJ1Y3R1cmVkSXRlbUNvbnRlbnRQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JVHJlZUl0ZW1Db250ZW50UHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSXRlbVByb3BlcnR5RGVzY3JpcHRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5WaWV3ZXJOb3RpZmljYXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5BbmFseXNpc0ZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5hdXRvbWF0aWNleHBlcmltZW50LkF1dG9tYXRpY0V4cGVyaW1lbnQ7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5hdXRvbWF0aWNleHBlcmltZW50LkF1dG9tYXRpY2V4cGVyaW1lbnRQYWNrYWdlOworCisvKioKKyAqIFRoaXMgaXMgdGhlIGl0ZW0gcHJvdmlkZXIgYWRhcHRlciBmb3IgYSB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5hdXRvbWF0aWNleHBlcmltZW50LkF1dG9tYXRpY0V4cGVyaW1lbnR9IG9iamVjdC4KKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIEF1dG9tYXRpY0V4cGVyaW1lbnRJdGVtUHJvdmlkZXIKKwlleHRlbmRzIE9wdGltaXplckFsZ29yaXRobUl0ZW1Qcm92aWRlcgorCWltcGxlbWVudHMKKwkJSUVkaXRpbmdEb21haW5JdGVtUHJvdmlkZXIsCisJCUlTdHJ1Y3R1cmVkSXRlbUNvbnRlbnRQcm92aWRlciwKKwkJSVRyZWVJdGVtQ29udGVudFByb3ZpZGVyLAorCQlJSXRlbUxhYmVsUHJvdmlkZXIsCisJCUlJdGVtUHJvcGVydHlTb3VyY2UgeworCS8qKgorCSAqIFRoaXMgY29uc3RydWN0cyBhbiBpbnN0YW5jZSBmcm9tIGEgZmFjdG9yeSBhbmQgYSBub3RpZmllci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQXV0b21hdGljRXhwZXJpbWVudEl0ZW1Qcm92aWRlcihBZGFwdGVyRmFjdG9yeSBhZGFwdGVyRmFjdG9yeSkgeworCQlzdXBlcihhZGFwdGVyRmFjdG9yeSk7CisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIHRoZSBwcm9wZXJ0eSBkZXNjcmlwdG9ycyBmb3IgdGhlIGFkYXB0ZWQgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIExpc3Q8SUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I+IGdldFByb3BlcnR5RGVzY3JpcHRvcnMoT2JqZWN0IG9iamVjdCkgeworCQlpZiAoaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMgPT0gbnVsbCkgeworCQkJc3VwZXIuZ2V0UHJvcGVydHlEZXNjcmlwdG9ycyhvYmplY3QpOworCisJCQlhZGRCYXNlU2NlbmFyaW9Qcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0KTsKKwkJCWFkZFBhcmFtZXRlcnNQcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0KTsKKwkJCWFkZEVycm9yQW5hbHlzaXNBbGdvcml0aG1Qcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0KTsKKwkJCWFkZEVycm9yRnVuY3Rpb25Qcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0KTsKKwkJCWFkZFRvbGVyYW5jZVByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QpOworCQkJYWRkUmVmZXJhbmNlRGF0YURpclByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QpOworCQkJYWRkTWF4aW11bU51bWJlck9mSXRlcmF0aW9uc1Byb3BlcnR5RGVzY3JpcHRvcihvYmplY3QpOworCQkJYWRkUmVJbml0UHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCk7CisJCX0KKwkJcmV0dXJuIGl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzOworCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyBhIHByb3BlcnR5IGRlc2NyaXB0b3IgZm9yIHRoZSBCYXNlIFNjZW5hcmlvIGZlYXR1cmUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgYWRkQmFzZVNjZW5hcmlvUHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdCBvYmplY3QpIHsKKwkJaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMuYWRkCisJCQkoY3JlYXRlSXRlbVByb3BlcnR5RGVzY3JpcHRvcgorCQkJCSgoKENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnkpYWRhcHRlckZhY3RvcnkpLmdldFJvb3RBZGFwdGVyRmFjdG9yeSgpLAorCQkJCSBnZXRSZXNvdXJjZUxvY2F0b3IoKSwKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfQXV0b21hdGljRXhwZXJpbWVudF9iYXNlU2NlbmFyaW9fZmVhdHVyZSIpLAorCQkJCSBnZXRTdHJpbmcoIl9VSV9Qcm9wZXJ0eURlc2NyaXB0b3JfZGVzY3JpcHRpb24iLCAiX1VJX0F1dG9tYXRpY0V4cGVyaW1lbnRfYmFzZVNjZW5hcmlvX2ZlYXR1cmUiLCAiX1VJX0F1dG9tYXRpY0V4cGVyaW1lbnRfdHlwZSIpLAorCQkJCSBBdXRvbWF0aWNleHBlcmltZW50UGFja2FnZS5MaXRlcmFscy5BVVRPTUFUSUNfRVhQRVJJTUVOVF9fQkFTRV9TQ0VOQVJJTywKKwkJCQkgdHJ1ZSwKKwkJCQkgZmFsc2UsCisJCQkJIHRydWUsCisJCQkJIG51bGwsCisJCQkJIG51bGwsCisJCQkJIG51bGwpKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFkZHMgYSBwcm9wZXJ0eSBkZXNjcmlwdG9yIGZvciB0aGUgUGFyYW1ldGVycyBmZWF0dXJlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIGFkZFBhcmFtZXRlcnNQcm9wZXJ0eURlc2NyaXB0b3IoT2JqZWN0IG9iamVjdCkgeworCQlpdGVtUHJvcGVydHlEZXNjcmlwdG9ycy5hZGQKKwkJCShjcmVhdGVJdGVtUHJvcGVydHlEZXNjcmlwdG9yCisJCQkJKCgoQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSlhZGFwdGVyRmFjdG9yeSkuZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCksCisJCQkJIGdldFJlc291cmNlTG9jYXRvcigpLAorCQkJCSBnZXRTdHJpbmcoIl9VSV9BdXRvbWF0aWNFeHBlcmltZW50X3BhcmFtZXRlcnNfZmVhdHVyZSIpLAorCQkJCSBnZXRTdHJpbmcoIl9VSV9Qcm9wZXJ0eURlc2NyaXB0b3JfZGVzY3JpcHRpb24iLCAiX1VJX0F1dG9tYXRpY0V4cGVyaW1lbnRfcGFyYW1ldGVyc19mZWF0dXJlIiwgIl9VSV9BdXRvbWF0aWNFeHBlcmltZW50X3R5cGUiKSwKKwkJCQkgQXV0b21hdGljZXhwZXJpbWVudFBhY2thZ2UuTGl0ZXJhbHMuQVVUT01BVElDX0VYUEVSSU1FTlRfX1BBUkFNRVRFUlMsCisJCQkJIHRydWUsCisJCQkJIGZhbHNlLAorCQkJCSB0cnVlLAorCQkJCSBudWxsLAorCQkJCSBudWxsLAorCQkJCSBudWxsKSk7CisJfQorCisJLyoqCisJICogVGhpcyBhZGRzIGEgcHJvcGVydHkgZGVzY3JpcHRvciBmb3IgdGhlIEVycm9yIEFuYWx5c2lzIEFsZ29yaXRobSBmZWF0dXJlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIGFkZEVycm9yQW5hbHlzaXNBbGdvcml0aG1Qcm9wZXJ0eURlc2NyaXB0b3IoT2JqZWN0IG9iamVjdCkgeworCQlpdGVtUHJvcGVydHlEZXNjcmlwdG9ycy5hZGQKKwkJCShjcmVhdGVJdGVtUHJvcGVydHlEZXNjcmlwdG9yCisJCQkJKCgoQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSlhZGFwdGVyRmFjdG9yeSkuZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCksCisJCQkJIGdldFJlc291cmNlTG9jYXRvcigpLAorCQkJCSBnZXRTdHJpbmcoIl9VSV9BdXRvbWF0aWNFeHBlcmltZW50X2Vycm9yQW5hbHlzaXNBbGdvcml0aG1fZmVhdHVyZSIpLAorCQkJCSBnZXRTdHJpbmcoIl9VSV9Qcm9wZXJ0eURlc2NyaXB0b3JfZGVzY3JpcHRpb24iLCAiX1VJX0F1dG9tYXRpY0V4cGVyaW1lbnRfZXJyb3JBbmFseXNpc0FsZ29yaXRobV9mZWF0dXJlIiwgIl9VSV9BdXRvbWF0aWNFeHBlcmltZW50X3R5cGUiKSwKKwkJCQkgQXV0b21hdGljZXhwZXJpbWVudFBhY2thZ2UuTGl0ZXJhbHMuQVVUT01BVElDX0VYUEVSSU1FTlRfX0VSUk9SX0FOQUxZU0lTX0FMR09SSVRITSwKKwkJCQkgdHJ1ZSwKKwkJCQkgZmFsc2UsCisJCQkJIGZhbHNlLAorCQkJCSBJdGVtUHJvcGVydHlEZXNjcmlwdG9yLkdFTkVSSUNfVkFMVUVfSU1BR0UsCisJCQkJIG51bGwsCisJCQkJIG51bGwpKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFkZHMgYSBwcm9wZXJ0eSBkZXNjcmlwdG9yIGZvciB0aGUgRXJyb3IgRnVuY3Rpb24gZmVhdHVyZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBhZGRFcnJvckZ1bmN0aW9uUHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdCBvYmplY3QpIHsKKwkJaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMuYWRkCisJCQkoY3JlYXRlSXRlbVByb3BlcnR5RGVzY3JpcHRvcgorCQkJCSgoKENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnkpYWRhcHRlckZhY3RvcnkpLmdldFJvb3RBZGFwdGVyRmFjdG9yeSgpLAorCQkJCSBnZXRSZXNvdXJjZUxvY2F0b3IoKSwKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfQXV0b21hdGljRXhwZXJpbWVudF9lcnJvckZ1bmN0aW9uX2ZlYXR1cmUiKSwKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfUHJvcGVydHlEZXNjcmlwdG9yX2Rlc2NyaXB0aW9uIiwgIl9VSV9BdXRvbWF0aWNFeHBlcmltZW50X2Vycm9yRnVuY3Rpb25fZmVhdHVyZSIsICJfVUlfQXV0b21hdGljRXhwZXJpbWVudF90eXBlIiksCisJCQkJIEF1dG9tYXRpY2V4cGVyaW1lbnRQYWNrYWdlLkxpdGVyYWxzLkFVVE9NQVRJQ19FWFBFUklNRU5UX19FUlJPUl9GVU5DVElPTiwKKwkJCQkgdHJ1ZSwKKwkJCQkgZmFsc2UsCisJCQkJIGZhbHNlLAorCQkJCSBJdGVtUHJvcGVydHlEZXNjcmlwdG9yLkdFTkVSSUNfVkFMVUVfSU1BR0UsCisJCQkJIG51bGwsCisJCQkJIG51bGwpKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFkZHMgYSBwcm9wZXJ0eSBkZXNjcmlwdG9yIGZvciB0aGUgVG9sZXJhbmNlIGZlYXR1cmUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgYWRkVG9sZXJhbmNlUHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdCBvYmplY3QpIHsKKwkJaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMuYWRkCisJCQkoY3JlYXRlSXRlbVByb3BlcnR5RGVzY3JpcHRvcgorCQkJCSgoKENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnkpYWRhcHRlckZhY3RvcnkpLmdldFJvb3RBZGFwdGVyRmFjdG9yeSgpLAorCQkJCSBnZXRSZXNvdXJjZUxvY2F0b3IoKSwKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfQXV0b21hdGljRXhwZXJpbWVudF90b2xlcmFuY2VfZmVhdHVyZSIpLAorCQkJCSBnZXRTdHJpbmcoIl9VSV9Qcm9wZXJ0eURlc2NyaXB0b3JfZGVzY3JpcHRpb24iLCAiX1VJX0F1dG9tYXRpY0V4cGVyaW1lbnRfdG9sZXJhbmNlX2ZlYXR1cmUiLCAiX1VJX0F1dG9tYXRpY0V4cGVyaW1lbnRfdHlwZSIpLAorCQkJCSBBdXRvbWF0aWNleHBlcmltZW50UGFja2FnZS5MaXRlcmFscy5BVVRPTUFUSUNfRVhQRVJJTUVOVF9fVE9MRVJBTkNFLAorCQkJCSB0cnVlLAorCQkJCSBmYWxzZSwKKwkJCQkgZmFsc2UsCisJCQkJIEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IuUkVBTF9WQUxVRV9JTUFHRSwKKwkJCQkgbnVsbCwKKwkJCQkgbnVsbCkpOworCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyBhIHByb3BlcnR5IGRlc2NyaXB0b3IgZm9yIHRoZSBSZWZlcmFuY2UgRGF0YSBEaXIgZmVhdHVyZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBhZGRSZWZlcmFuY2VEYXRhRGlyUHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdCBvYmplY3QpIHsKKwkJaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMuYWRkCisJCQkoY3JlYXRlSXRlbVByb3BlcnR5RGVzY3JpcHRvcgorCQkJCSgoKENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnkpYWRhcHRlckZhY3RvcnkpLmdldFJvb3RBZGFwdGVyRmFjdG9yeSgpLAorCQkJCSBnZXRSZXNvdXJjZUxvY2F0b3IoKSwKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfQXV0b21hdGljRXhwZXJpbWVudF9yZWZlcmFuY2VEYXRhRGlyX2ZlYXR1cmUiKSwKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfUHJvcGVydHlEZXNjcmlwdG9yX2Rlc2NyaXB0aW9uIiwgIl9VSV9BdXRvbWF0aWNFeHBlcmltZW50X3JlZmVyYW5jZURhdGFEaXJfZmVhdHVyZSIsICJfVUlfQXV0b21hdGljRXhwZXJpbWVudF90eXBlIiksCisJCQkJIEF1dG9tYXRpY2V4cGVyaW1lbnRQYWNrYWdlLkxpdGVyYWxzLkFVVE9NQVRJQ19FWFBFUklNRU5UX19SRUZFUkFOQ0VfREFUQV9ESVIsCisJCQkJIHRydWUsCisJCQkJIGZhbHNlLAorCQkJCSBmYWxzZSwKKwkJCQkgSXRlbVByb3BlcnR5RGVzY3JpcHRvci5HRU5FUklDX1ZBTFVFX0lNQUdFLAorCQkJCSBudWxsLAorCQkJCSBudWxsKSk7CisJfQorCisJLyoqCisJICogVGhpcyBhZGRzIGEgcHJvcGVydHkgZGVzY3JpcHRvciBmb3IgdGhlIE1heGltdW0gTnVtYmVyIE9mIEl0ZXJhdGlvbnMgZmVhdHVyZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBhZGRNYXhpbXVtTnVtYmVyT2ZJdGVyYXRpb25zUHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdCBvYmplY3QpIHsKKwkJaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMuYWRkCisJCQkoY3JlYXRlSXRlbVByb3BlcnR5RGVzY3JpcHRvcgorCQkJCSgoKENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnkpYWRhcHRlckZhY3RvcnkpLmdldFJvb3RBZGFwdGVyRmFjdG9yeSgpLAorCQkJCSBnZXRSZXNvdXJjZUxvY2F0b3IoKSwKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfQXV0b21hdGljRXhwZXJpbWVudF9tYXhpbXVtTnVtYmVyT2ZJdGVyYXRpb25zX2ZlYXR1cmUiKSwKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfUHJvcGVydHlEZXNjcmlwdG9yX2Rlc2NyaXB0aW9uIiwgIl9VSV9BdXRvbWF0aWNFeHBlcmltZW50X21heGltdW1OdW1iZXJPZkl0ZXJhdGlvbnNfZmVhdHVyZSIsICJfVUlfQXV0b21hdGljRXhwZXJpbWVudF90eXBlIiksCisJCQkJIEF1dG9tYXRpY2V4cGVyaW1lbnRQYWNrYWdlLkxpdGVyYWxzLkFVVE9NQVRJQ19FWFBFUklNRU5UX19NQVhJTVVNX05VTUJFUl9PRl9JVEVSQVRJT05TLAorCQkJCSB0cnVlLAorCQkJCSBmYWxzZSwKKwkJCQkgZmFsc2UsCisJCQkJIEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IuSU5URUdSQUxfVkFMVUVfSU1BR0UsCisJCQkJIG51bGwsCisJCQkJIG51bGwpKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFkZHMgYSBwcm9wZXJ0eSBkZXNjcmlwdG9yIGZvciB0aGUgUmUgSW5pdCBmZWF0dXJlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIGFkZFJlSW5pdFByb3BlcnR5RGVzY3JpcHRvcihPYmplY3Qgb2JqZWN0KSB7CisJCWl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzLmFkZAorCQkJKGNyZWF0ZUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IKKwkJCQkoKChDb21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5KWFkYXB0ZXJGYWN0b3J5KS5nZXRSb290QWRhcHRlckZhY3RvcnkoKSwKKwkJCQkgZ2V0UmVzb3VyY2VMb2NhdG9yKCksCisJCQkJIGdldFN0cmluZygiX1VJX0F1dG9tYXRpY0V4cGVyaW1lbnRfcmVJbml0X2ZlYXR1cmUiKSwKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfUHJvcGVydHlEZXNjcmlwdG9yX2Rlc2NyaXB0aW9uIiwgIl9VSV9BdXRvbWF0aWNFeHBlcmltZW50X3JlSW5pdF9mZWF0dXJlIiwgIl9VSV9BdXRvbWF0aWNFeHBlcmltZW50X3R5cGUiKSwKKwkJCQkgQXV0b21hdGljZXhwZXJpbWVudFBhY2thZ2UuTGl0ZXJhbHMuQVVUT01BVElDX0VYUEVSSU1FTlRfX1JFX0lOSVQsCisJCQkJIHRydWUsCisJCQkJIGZhbHNlLAorCQkJCSBmYWxzZSwKKwkJCQkgSXRlbVByb3BlcnR5RGVzY3JpcHRvci5CT09MRUFOX1ZBTFVFX0lNQUdFLAorCQkJCSBudWxsLAorCQkJCSBudWxsKSk7CisJfQorCisJLyoqCisJICogVGhpcyBzcGVjaWZpZXMgaG93IHRvIGltcGxlbWVudCB7QGxpbmsgI2dldENoaWxkcmVufSBhbmQgaXMgdXNlZCB0byBkZWR1Y2UgYW4gYXBwcm9wcmlhdGUgZmVhdHVyZSBmb3IgYW4KKwkgKiB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmVkaXQuY29tbWFuZC5BZGRDb21tYW5kfSwge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lZGl0LmNvbW1hbmQuUmVtb3ZlQ29tbWFuZH0gb3IKKwkgKiB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmVkaXQuY29tbWFuZC5Nb3ZlQ29tbWFuZH0gaW4ge0BsaW5rICNjcmVhdGVDb21tYW5kfS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgQ29sbGVjdGlvbjw/IGV4dGVuZHMgRVN0cnVjdHVyYWxGZWF0dXJlPiBnZXRDaGlsZHJlbkZlYXR1cmVzKE9iamVjdCBvYmplY3QpIHsKKwkJaWYgKGNoaWxkcmVuRmVhdHVyZXMgPT0gbnVsbCkgeworCQkJc3VwZXIuZ2V0Q2hpbGRyZW5GZWF0dXJlcyhvYmplY3QpOworCQkJY2hpbGRyZW5GZWF0dXJlcy5hZGQoQXV0b21hdGljZXhwZXJpbWVudFBhY2thZ2UuTGl0ZXJhbHMuQVVUT01BVElDX0VYUEVSSU1FTlRfX0JBU0VfU0NFTkFSSU8pOworCQkJY2hpbGRyZW5GZWF0dXJlcy5hZGQoQXV0b21hdGljZXhwZXJpbWVudFBhY2thZ2UuTGl0ZXJhbHMuQVVUT01BVElDX0VYUEVSSU1FTlRfX1BBUkFNRVRFUlMpOworCQkJY2hpbGRyZW5GZWF0dXJlcy5hZGQoQXV0b21hdGljZXhwZXJpbWVudFBhY2thZ2UuTGl0ZXJhbHMuQVVUT01BVElDX0VYUEVSSU1FTlRfX0VSUk9SX0ZVTkMpOworCQl9CisJCXJldHVybiBjaGlsZHJlbkZlYXR1cmVzOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCBFU3RydWN0dXJhbEZlYXR1cmUgZ2V0Q2hpbGRGZWF0dXJlKE9iamVjdCBvYmplY3QsIE9iamVjdCBjaGlsZCkgeworCQkvLyBDaGVjayB0aGUgdHlwZSBvZiB0aGUgc3BlY2lmaWVkIGNoaWxkIG9iamVjdCBhbmQgcmV0dXJuIHRoZSBwcm9wZXIgZmVhdHVyZSB0byB1c2UgZm9yCisJCS8vIGFkZGluZyAoc2VlIHtAbGluayBBZGRDb21tYW5kfSkgaXQgYXMgYSBjaGlsZC4KKworCQlyZXR1cm4gc3VwZXIuZ2V0Q2hpbGRGZWF0dXJlKG9iamVjdCwgY2hpbGQpOworCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyBBdXRvbWF0aWNFeHBlcmltZW50LmdpZi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIE9iamVjdCBnZXRJbWFnZShPYmplY3Qgb2JqZWN0KSB7CisJCXJldHVybiBvdmVybGF5SW1hZ2Uob2JqZWN0LCBnZXRSZXNvdXJjZUxvY2F0b3IoKS5nZXRJbWFnZSgiZnVsbC9jdXN0b21vYmoxNi9BdXRvbWF0aWNFeHBlcmltZW50IikpOworCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyB0aGUgbGFiZWwgdGV4dCBmb3IgdGhlIGFkYXB0ZWQgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBTdHJpbmcgZ2V0VGV4dChPYmplY3Qgb2JqZWN0KSB7CisJCVN0cmluZyBsYWJlbCA9ICgoQXV0b21hdGljRXhwZXJpbWVudClvYmplY3QpLmdldFVSSSgpLmxhc3RTZWdtZW50KCk7CisJCXJldHVybiBsYWJlbCA9PSBudWxsIHx8IGxhYmVsLmxlbmd0aCgpID09IDAgPworCQkJZ2V0U3RyaW5nKCJfVUlfQXV0b21hdGljRXhwZXJpbWVudF90eXBlIikgOgorCQkJIGxhYmVsOworCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyB0aGUgbGFiZWwgdGV4dCBmb3IgdGhlIGFkYXB0ZWQgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIFN0cmluZyBnZXRUZXh0R2VuKE9iamVjdCBvYmplY3QpIHsKKwkJVVJJIGxhYmVsVmFsdWUgPSAoKEF1dG9tYXRpY0V4cGVyaW1lbnQpb2JqZWN0KS5nZXRVUkkoKTsKKwkJU3RyaW5nIGxhYmVsID0gbGFiZWxWYWx1ZSA9PSBudWxsID8gbnVsbCA6IGxhYmVsVmFsdWUudG9TdHJpbmcoKTsKKwkJcmV0dXJuIGxhYmVsID09IG51bGwgfHwgbGFiZWwubGVuZ3RoKCkgPT0gMCA/CisJCQlnZXRTdHJpbmcoIl9VSV9BdXRvbWF0aWNFeHBlcmltZW50X3R5cGUiKSA6CisJCQlnZXRTdHJpbmcoIl9VSV9BdXRvbWF0aWNFeHBlcmltZW50X3R5cGUiKSArICIgIiArIGxhYmVsOworCX0KKwkKKwkvKioKKwkgKiBUaGlzIGhhbmRsZXMgbW9kZWwgbm90aWZpY2F0aW9ucyBieSBjYWxsaW5nIHtAbGluayAjdXBkYXRlQ2hpbGRyZW59IHRvIHVwZGF0ZSBhbnkgY2FjaGVkCisJICogY2hpbGRyZW4gYW5kIGJ5IGNyZWF0aW5nIGEgdmlld2VyIG5vdGlmaWNhdGlvbiwgd2hpY2ggaXQgcGFzc2VzIHRvIHtAbGluayAjZmlyZU5vdGlmeUNoYW5nZWR9LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIG5vdGlmeUNoYW5nZWQoTm90aWZpY2F0aW9uIG5vdGlmaWNhdGlvbikgeworCQl1cGRhdGVDaGlsZHJlbihub3RpZmljYXRpb24pOworCisJCXN3aXRjaCAobm90aWZpY2F0aW9uLmdldEZlYXR1cmVJRChBdXRvbWF0aWNFeHBlcmltZW50LmNsYXNzKSkgeworCQkJY2FzZSBBdXRvbWF0aWNleHBlcmltZW50UGFja2FnZS5BVVRPTUFUSUNfRVhQRVJJTUVOVF9fRVJST1JfQU5BTFlTSVNfQUxHT1JJVEhNOgorCQkJY2FzZSBBdXRvbWF0aWNleHBlcmltZW50UGFja2FnZS5BVVRPTUFUSUNfRVhQRVJJTUVOVF9fRVJST1JfRlVOQ1RJT046CisJCQljYXNlIEF1dG9tYXRpY2V4cGVyaW1lbnRQYWNrYWdlLkFVVE9NQVRJQ19FWFBFUklNRU5UX19UT0xFUkFOQ0U6CisJCQljYXNlIEF1dG9tYXRpY2V4cGVyaW1lbnRQYWNrYWdlLkFVVE9NQVRJQ19FWFBFUklNRU5UX19SRUZFUkFOQ0VfREFUQV9ESVI6CisJCQljYXNlIEF1dG9tYXRpY2V4cGVyaW1lbnRQYWNrYWdlLkFVVE9NQVRJQ19FWFBFUklNRU5UX19NQVhJTVVNX05VTUJFUl9PRl9JVEVSQVRJT05TOgorCQkJY2FzZSBBdXRvbWF0aWNleHBlcmltZW50UGFja2FnZS5BVVRPTUFUSUNfRVhQRVJJTUVOVF9fUkVfSU5JVDoKKwkJCQlmaXJlTm90aWZ5Q2hhbmdlZChuZXcgVmlld2VyTm90aWZpY2F0aW9uKG5vdGlmaWNhdGlvbiwgbm90aWZpY2F0aW9uLmdldE5vdGlmaWVyKCksIGZhbHNlLCB0cnVlKSk7CisJCQkJcmV0dXJuOworCQkJY2FzZSBBdXRvbWF0aWNleHBlcmltZW50UGFja2FnZS5BVVRPTUFUSUNfRVhQRVJJTUVOVF9fRVJST1JfRlVOQzoKKwkJCQlmaXJlTm90aWZ5Q2hhbmdlZChuZXcgVmlld2VyTm90aWZpY2F0aW9uKG5vdGlmaWNhdGlvbiwgbm90aWZpY2F0aW9uLmdldE5vdGlmaWVyKCksIHRydWUsIGZhbHNlKSk7CisJCQkJcmV0dXJuOworCQl9CisJCXN1cGVyLm5vdGlmeUNoYW5nZWQobm90aWZpY2F0aW9uKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFkZHMge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lZGl0LmNvbW1hbmQuQ29tbWFuZFBhcmFtZXRlcn1zIGRlc2NyaWJpbmcgdGhlIGNoaWxkcmVuCisJICogdGhhdCBjYW4gYmUgY3JlYXRlZCB1bmRlciB0aGlzIG9iamVjdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgdm9pZCBjb2xsZWN0TmV3Q2hpbGREZXNjcmlwdG9ycyhDb2xsZWN0aW9uPE9iamVjdD4gbmV3Q2hpbGREZXNjcmlwdG9ycywgT2JqZWN0IG9iamVjdCkgeworCQlzdXBlci5jb2xsZWN0TmV3Q2hpbGREZXNjcmlwdG9ycyhuZXdDaGlsZERlc2NyaXB0b3JzLCBvYmplY3QpOworCisJCW5ld0NoaWxkRGVzY3JpcHRvcnMuYWRkCisJCQkoY3JlYXRlQ2hpbGRQYXJhbWV0ZXIKKwkJCQkoQXV0b21hdGljZXhwZXJpbWVudFBhY2thZ2UuTGl0ZXJhbHMuQVVUT01BVElDX0VYUEVSSU1FTlRfX0VSUk9SX0ZVTkMsCisJCQkJIEFuYWx5c2lzRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlRXJyb3JGdW5jdGlvbigpKSk7CisKKwkJbmV3Q2hpbGREZXNjcmlwdG9ycy5hZGQKKwkJCShjcmVhdGVDaGlsZFBhcmFtZXRlcgorCQkJCShBdXRvbWF0aWNleHBlcmltZW50UGFja2FnZS5MaXRlcmFscy5BVVRPTUFUSUNfRVhQRVJJTUVOVF9fRVJST1JfRlVOQywKKwkJCQkgQW5hbHlzaXNGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVUaHJlc2hvbGRFcnJvckZ1bmN0aW9uKCkpKTsKKworCQluZXdDaGlsZERlc2NyaXB0b3JzLmFkZAorCQkJKGNyZWF0ZUNoaWxkUGFyYW1ldGVyCisJCQkJKEF1dG9tYXRpY2V4cGVyaW1lbnRQYWNrYWdlLkxpdGVyYWxzLkFVVE9NQVRJQ19FWFBFUklNRU5UX19FUlJPUl9GVU5DLAorCQkJCSBBbmFseXNpc0ZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZVNpbXBsZUVycm9yRnVuY3Rpb24oKSkpOworCX0KKworfQpkaWZmIC0tZ2l0IGEvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5hdXRvbWF0aWNleHBlcmltZW50L3NyYy9vcmcvZWNsaXBzZS9zdGVtL2FuYWx5c2lzL2F1dG9tYXRpY2V4cGVyaW1lbnQvcHJvdmlkZXIvQXV0b21hdGljZXhwZXJpZW5jZUVkaXRQbHVnaW4uamF2YSBiL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuYXV0b21hdGljZXhwZXJpbWVudC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9hbmFseXNpcy9hdXRvbWF0aWNleHBlcmltZW50L3Byb3ZpZGVyL0F1dG9tYXRpY2V4cGVyaWVuY2VFZGl0UGx1Z2luLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDFhNDRlZgotLS0gL2Rldi9udWxsCisrKyBiL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuYXV0b21hdGljZXhwZXJpbWVudC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9hbmFseXNpcy9hdXRvbWF0aWNleHBlcmltZW50L3Byb3ZpZGVyL0F1dG9tYXRpY2V4cGVyaWVuY2VFZGl0UGx1Z2luLmphdmEKQEAgLTAsMCArMSwxMDQgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5hdXRvbWF0aWNleHBlcmltZW50LnByb3ZpZGVyOw0KKw0KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorICogQ29weXJpZ2h0IChjKSAyMDA5IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLg0KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMNCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjANCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdA0KKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sDQorICoNCisgKiBDb250cmlidXRvcnM6DQorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbg0KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KKw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLkVNRlBsdWdpbjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51aS5FY2xpcHNlVUlQbHVnaW47DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5SZXNvdXJjZUxvY2F0b3I7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5wcm92aWRlci5FY29yZUVkaXRQbHVnaW47DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMucHJvdmlkZXIuQW5hbHlzaXNFZGl0UGx1Z2luOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLnByb3ZpZGVyLkNvcmVFZGl0UGx1Z2luOw0KKw0KKy8qKg0KKyAqIFRoaXMgaXMgdGhlIGNlbnRyYWwgc2luZ2xldG9uIGZvciB0aGUgQXV0b21hdGljZXhwZXJpZW5jZSBlZGl0b3IgcGx1Z2luLg0KKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorICogQGdlbmVyYXRlZA0KKyAqLw0KK3B1YmxpYyBmaW5hbCBjbGFzcyBBdXRvbWF0aWNleHBlcmllbmNlRWRpdFBsdWdpbiBleHRlbmRzIEVNRlBsdWdpbiB7DQorCS8qKg0KKwkgKiBLZWVwIHRyYWNrIG9mIHRoZSBzaW5nbGV0b24uDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgc3RhdGljIGZpbmFsIEF1dG9tYXRpY2V4cGVyaWVuY2VFZGl0UGx1Z2luIElOU1RBTkNFID0gbmV3IEF1dG9tYXRpY2V4cGVyaWVuY2VFZGl0UGx1Z2luKCk7DQorDQorCS8qKg0KKwkgKiBLZWVwIHRyYWNrIG9mIHRoZSBzaW5nbGV0b24uDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcml2YXRlIHN0YXRpYyBJbXBsZW1lbnRhdGlvbiBwbHVnaW47DQorDQorCS8qKg0KKwkgKiBDcmVhdGUgdGhlIGluc3RhbmNlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIEF1dG9tYXRpY2V4cGVyaWVuY2VFZGl0UGx1Z2luKCkgew0KKwkJc3VwZXINCisJCQkobmV3IFJlc291cmNlTG9jYXRvciBbXSB7DQorCQkJCUFuYWx5c2lzRWRpdFBsdWdpbi5JTlNUQU5DRSwNCisJCQkJQ29yZUVkaXRQbHVnaW4uSU5TVEFOQ0UsDQorCQkJCUVjb3JlRWRpdFBsdWdpbi5JTlNUQU5DRSwNCisJCQl9KTsNCisJfQ0KKw0KKwkvKioNCisJICogUmV0dXJucyB0aGUgc2luZ2xldG9uIGluc3RhbmNlIG9mIHRoZSBFY2xpcHNlIHBsdWdpbi4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEByZXR1cm4gdGhlIHNpbmdsZXRvbiBpbnN0YW5jZS4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJQE92ZXJyaWRlDQorCXB1YmxpYyBSZXNvdXJjZUxvY2F0b3IgZ2V0UGx1Z2luUmVzb3VyY2VMb2NhdG9yKCkgew0KKwkJcmV0dXJuIHBsdWdpbjsNCisJfQ0KKw0KKwkvKioNCisJICogUmV0dXJucyB0aGUgc2luZ2xldG9uIGluc3RhbmNlIG9mIHRoZSBFY2xpcHNlIHBsdWdpbi4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEByZXR1cm4gdGhlIHNpbmdsZXRvbiBpbnN0YW5jZS4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIHN0YXRpYyBJbXBsZW1lbnRhdGlvbiBnZXRQbHVnaW4oKSB7DQorCQlyZXR1cm4gcGx1Z2luOw0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGUgYWN0dWFsIGltcGxlbWVudGF0aW9uIG9mIHRoZSBFY2xpcHNlIDxiPlBsdWdpbjwvYj4uDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgc3RhdGljIGNsYXNzIEltcGxlbWVudGF0aW9uIGV4dGVuZHMgRWNsaXBzZVVJUGx1Z2luIHsNCisJCS8qKg0KKwkJICogQ3JlYXRlcyBhbiBpbnN0YW5jZS4NCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJCSAqIEBnZW5lcmF0ZWQNCisJCSAqLw0KKwkJcHVibGljIEltcGxlbWVudGF0aW9uKCkgew0KKwkJCXN1cGVyKCk7DQorCQ0KKwkJCS8vIFJlbWVtYmVyIHRoZSBzdGF0aWMgaW5zdGFuY2UuDQorCQkJLy8NCisJCQlwbHVnaW4gPSB0aGlzOw0KKwkJfQ0KKwl9DQorDQorfQ0KZGlmZiAtLWdpdCBhL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuYXV0b21hdGljZXhwZXJpbWVudC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9hbmFseXNpcy9hdXRvbWF0aWNleHBlcmltZW50L3Byb3ZpZGVyL0F1dG9tYXRpY2V4cGVyaW1lbnRJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeS5qYXZhIGIvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5hdXRvbWF0aWNleHBlcmltZW50L3NyYy9vcmcvZWNsaXBzZS9zdGVtL2FuYWx5c2lzL2F1dG9tYXRpY2V4cGVyaW1lbnQvcHJvdmlkZXIvQXV0b21hdGljZXhwZXJpbWVudEl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTZmMGRmNAotLS0gL2Rldi9udWxsCisrKyBiL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuYXV0b21hdGljZXhwZXJpbWVudC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9hbmFseXNpcy9hdXRvbWF0aWNleHBlcmltZW50L3Byb3ZpZGVyL0F1dG9tYXRpY2V4cGVyaW1lbnRJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeS5qYXZhCkBAIC0wLDAgKzEsMjU1IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuYXV0b21hdGljZXhwZXJpbWVudC5wcm92aWRlcjsNCisNCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyAqIENvcHlyaWdodCAoYykgMjAwOSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4NCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzDQorICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wDQorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQNCisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbA0KKyAqDQorICogQ29udHJpYnV0b3JzOg0KKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24NCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCisNCitpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsNCitpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247DQorDQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LkFkYXB0ZXI7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpZXI7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkNoYW5nZU5vdGlmaWVyOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5Db21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5Ow0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5Db21wb3NlZEFkYXB0ZXJGYWN0b3J5Ow0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JQ2hhbmdlTm90aWZpZXI7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklEaXNwb3NhYmxlOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JRWRpdGluZ0RvbWFpbkl0ZW1Qcm92aWRlcjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1MYWJlbFByb3ZpZGVyOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbVByb3BlcnR5U291cmNlOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JTm90aWZ5Q2hhbmdlZExpc3RlbmVyOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JU3RydWN0dXJlZEl0ZW1Db250ZW50UHJvdmlkZXI7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklUcmVlSXRlbUNvbnRlbnRQcm92aWRlcjsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5hdXRvbWF0aWNleHBlcmltZW50LnV0aWwuQXV0b21hdGljZXhwZXJpbWVudEFkYXB0ZXJGYWN0b3J5Ow0KKw0KKw0KKy8qKg0KKyAqIFRoaXMgaXMgdGhlIGZhY3RvcnkgdGhhdCBpcyB1c2VkIHRvIHByb3ZpZGUgdGhlIGludGVyZmFjZXMgbmVlZGVkIHRvIHN1cHBvcnQgVmlld2Vycy4NCisgKiBUaGUgYWRhcHRlcnMgZ2VuZXJhdGVkIGJ5IHRoaXMgZmFjdG9yeSBjb252ZXJ0IEVNRiBhZGFwdGVyIG5vdGlmaWNhdGlvbnMgaW50byBjYWxscyB0byB7QGxpbmsgI2ZpcmVOb3RpZnlDaGFuZ2VkIGZpcmVOb3RpZnlDaGFuZ2VkfS4NCisgKiBUaGUgYWRhcHRlcnMgYWxzbyBzdXBwb3J0IEVjbGlwc2UgcHJvcGVydHkgc2hlZXRzLg0KKyAqIE5vdGUgdGhhdCBtb3N0IG9mIHRoZSBhZGFwdGVycyBhcmUgc2hhcmVkIGFtb25nIG11bHRpcGxlIGluc3RhbmNlcy4NCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKyAqIEBnZW5lcmF0ZWQNCisgKi8NCitwdWJsaWMgY2xhc3MgQXV0b21hdGljZXhwZXJpbWVudEl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5IGV4dGVuZHMgQXV0b21hdGljZXhwZXJpbWVudEFkYXB0ZXJGYWN0b3J5IGltcGxlbWVudHMgQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSwgSUNoYW5nZU5vdGlmaWVyLCBJRGlzcG9zYWJsZSB7DQorCS8qKg0KKwkgKiBUaGlzIGtlZXBzIHRyYWNrIG9mIHRoZSByb290IGFkYXB0ZXIgZmFjdG9yeSB0aGF0IGRlbGVnYXRlcyB0byB0aGlzIGFkYXB0ZXIgZmFjdG9yeS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCBDb21wb3NlZEFkYXB0ZXJGYWN0b3J5IHBhcmVudEFkYXB0ZXJGYWN0b3J5Ow0KKw0KKwkvKioNCisJICogVGhpcyBpcyB1c2VkIHRvIGltcGxlbWVudCB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUNoYW5nZU5vdGlmaWVyfS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCBJQ2hhbmdlTm90aWZpZXIgY2hhbmdlTm90aWZpZXIgPSBuZXcgQ2hhbmdlTm90aWZpZXIoKTsNCisNCisJLyoqDQorCSAqIFRoaXMga2VlcHMgdHJhY2sgb2YgYWxsIHRoZSBzdXBwb3J0ZWQgdHlwZXMgY2hlY2tlZCBieSB7QGxpbmsgI2lzRmFjdG9yeUZvclR5cGUgaXNGYWN0b3J5Rm9yVHlwZX0uDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgQ29sbGVjdGlvbjxPYmplY3Q+IHN1cHBvcnRlZFR5cGVzID0gbmV3IEFycmF5TGlzdDxPYmplY3Q+KCk7DQorDQorCS8qKg0KKwkgKiBUaGlzIGNvbnN0cnVjdHMgYW4gaW5zdGFuY2UuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgQXV0b21hdGljZXhwZXJpbWVudEl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5KCkgew0KKwkJc3VwcG9ydGVkVHlwZXMuYWRkKElFZGl0aW5nRG9tYWluSXRlbVByb3ZpZGVyLmNsYXNzKTsNCisJCXN1cHBvcnRlZFR5cGVzLmFkZChJU3RydWN0dXJlZEl0ZW1Db250ZW50UHJvdmlkZXIuY2xhc3MpOw0KKwkJc3VwcG9ydGVkVHlwZXMuYWRkKElUcmVlSXRlbUNvbnRlbnRQcm92aWRlci5jbGFzcyk7DQorCQlzdXBwb3J0ZWRUeXBlcy5hZGQoSUl0ZW1MYWJlbFByb3ZpZGVyLmNsYXNzKTsNCisJCXN1cHBvcnRlZFR5cGVzLmFkZChJSXRlbVByb3BlcnR5U291cmNlLmNsYXNzKTsNCisJfQ0KKw0KKwkvKioNCisJICogVGhpcyBrZWVwcyB0cmFjayBvZiB0aGUgb25lIGFkYXB0ZXIgdXNlZCBmb3IgYWxsIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQuQXV0b21hdGljRXhwZXJpbWVudH0gaW5zdGFuY2VzLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIEF1dG9tYXRpY0V4cGVyaW1lbnRJdGVtUHJvdmlkZXIgYXV0b21hdGljRXhwZXJpbWVudEl0ZW1Qcm92aWRlcjsNCisNCisJLyoqDQorCSAqIFRoaXMgY3JlYXRlcyBhbiBhZGFwdGVyIGZvciBhIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQuQXV0b21hdGljRXhwZXJpbWVudH0uDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlAT3ZlcnJpZGUNCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlQXV0b21hdGljRXhwZXJpbWVudEFkYXB0ZXIoKSB7DQorCQlpZiAoYXV0b21hdGljRXhwZXJpbWVudEl0ZW1Qcm92aWRlciA9PSBudWxsKSB7DQorCQkJYXV0b21hdGljRXhwZXJpbWVudEl0ZW1Qcm92aWRlciA9IG5ldyBBdXRvbWF0aWNFeHBlcmltZW50SXRlbVByb3ZpZGVyKHRoaXMpOw0KKwkJfQ0KKw0KKwkJcmV0dXJuIGF1dG9tYXRpY0V4cGVyaW1lbnRJdGVtUHJvdmlkZXI7DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMga2VlcHMgdHJhY2sgb2YgdGhlIG9uZSBhZGFwdGVyIHVzZWQgZm9yIGFsbCB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5hdXRvbWF0aWNleHBlcmltZW50Lk1vZGlmaWFibGVQYXJhbWV0ZXJ9IGluc3RhbmNlcy4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCBNb2RpZmlhYmxlUGFyYW1ldGVySXRlbVByb3ZpZGVyIG1vZGlmaWFibGVQYXJhbWV0ZXJJdGVtUHJvdmlkZXI7DQorDQorCS8qKg0KKwkgKiBUaGlzIGNyZWF0ZXMgYW4gYWRhcHRlciBmb3IgYSB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5hdXRvbWF0aWNleHBlcmltZW50Lk1vZGlmaWFibGVQYXJhbWV0ZXJ9Lg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJQE92ZXJyaWRlDQorCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZU1vZGlmaWFibGVQYXJhbWV0ZXJBZGFwdGVyKCkgew0KKwkJaWYgKG1vZGlmaWFibGVQYXJhbWV0ZXJJdGVtUHJvdmlkZXIgPT0gbnVsbCkgew0KKwkJCW1vZGlmaWFibGVQYXJhbWV0ZXJJdGVtUHJvdmlkZXIgPSBuZXcgTW9kaWZpYWJsZVBhcmFtZXRlckl0ZW1Qcm92aWRlcih0aGlzKTsNCisJCX0NCisNCisJCXJldHVybiBtb2RpZmlhYmxlUGFyYW1ldGVySXRlbVByb3ZpZGVyOw0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIGtlZXBzIHRyYWNrIG9mIHRoZSBvbmUgYWRhcHRlciB1c2VkIGZvciBhbGwge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuYXV0b21hdGljZXhwZXJpbWVudC5PcHRpbWl6ZXJBbGdvcml0aG19IGluc3RhbmNlcy4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCBPcHRpbWl6ZXJBbGdvcml0aG1JdGVtUHJvdmlkZXIgb3B0aW1pemVyQWxnb3JpdGhtSXRlbVByb3ZpZGVyOw0KKw0KKwkvKioNCisJICogVGhpcyBjcmVhdGVzIGFuIGFkYXB0ZXIgZm9yIGEge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuYXV0b21hdGljZXhwZXJpbWVudC5PcHRpbWl6ZXJBbGdvcml0aG19Lg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJQE92ZXJyaWRlDQorCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZU9wdGltaXplckFsZ29yaXRobUFkYXB0ZXIoKSB7DQorCQlpZiAob3B0aW1pemVyQWxnb3JpdGhtSXRlbVByb3ZpZGVyID09IG51bGwpIHsNCisJCQlvcHRpbWl6ZXJBbGdvcml0aG1JdGVtUHJvdmlkZXIgPSBuZXcgT3B0aW1pemVyQWxnb3JpdGhtSXRlbVByb3ZpZGVyKHRoaXMpOw0KKwkJfQ0KKw0KKwkJcmV0dXJuIG9wdGltaXplckFsZ29yaXRobUl0ZW1Qcm92aWRlcjsNCisJfQ0KKw0KKwkvKioNCisJICogVGhpcyByZXR1cm5zIHRoZSByb290IGFkYXB0ZXIgZmFjdG9yeSB0aGF0IGNvbnRhaW5zIHRoaXMgZmFjdG9yeS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBDb21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5IGdldFJvb3RBZGFwdGVyRmFjdG9yeSgpIHsNCisJCXJldHVybiBwYXJlbnRBZGFwdGVyRmFjdG9yeSA9PSBudWxsID8gdGhpcyA6IHBhcmVudEFkYXB0ZXJGYWN0b3J5LmdldFJvb3RBZGFwdGVyRmFjdG9yeSgpOw0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIHNldHMgdGhlIGNvbXBvc2VkIGFkYXB0ZXIgZmFjdG9yeSB0aGF0IGNvbnRhaW5zIHRoaXMgZmFjdG9yeS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyB2b2lkIHNldFBhcmVudEFkYXB0ZXJGYWN0b3J5KENvbXBvc2VkQWRhcHRlckZhY3RvcnkgcGFyZW50QWRhcHRlckZhY3RvcnkpIHsNCisJCXRoaXMucGFyZW50QWRhcHRlckZhY3RvcnkgPSBwYXJlbnRBZGFwdGVyRmFjdG9yeTsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCUBPdmVycmlkZQ0KKwlwdWJsaWMgYm9vbGVhbiBpc0ZhY3RvcnlGb3JUeXBlKE9iamVjdCB0eXBlKSB7DQorCQlyZXR1cm4gc3VwcG9ydGVkVHlwZXMuY29udGFpbnModHlwZSkgfHwgc3VwZXIuaXNGYWN0b3J5Rm9yVHlwZSh0eXBlKTsNCisJfQ0KKw0KKwkvKioNCisJICogVGhpcyBpbXBsZW1lbnRhdGlvbiBzdWJzdGl0dXRlcyB0aGUgZmFjdG9yeSBpdHNlbGYgYXMgdGhlIGtleSBmb3IgdGhlIGFkYXB0ZXIuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlAT3ZlcnJpZGUNCisJcHVibGljIEFkYXB0ZXIgYWRhcHQoTm90aWZpZXIgbm90aWZpZXIsIE9iamVjdCB0eXBlKSB7DQorCQlyZXR1cm4gc3VwZXIuYWRhcHQobm90aWZpZXIsIHRoaXMpOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJQE92ZXJyaWRlDQorCXB1YmxpYyBPYmplY3QgYWRhcHQoT2JqZWN0IG9iamVjdCwgT2JqZWN0IHR5cGUpIHsNCisJCWlmIChpc0ZhY3RvcnlGb3JUeXBlKHR5cGUpKSB7DQorCQkJT2JqZWN0IGFkYXB0ZXIgPSBzdXBlci5hZGFwdChvYmplY3QsIHR5cGUpOw0KKwkJCWlmICghKHR5cGUgaW5zdGFuY2VvZiBDbGFzczw/PikgfHwgKCgoQ2xhc3M8Pz4pdHlwZSkuaXNJbnN0YW5jZShhZGFwdGVyKSkpIHsNCisJCQkJcmV0dXJuIGFkYXB0ZXI7DQorCQkJfQ0KKwkJfQ0KKw0KKwkJcmV0dXJuIG51bGw7DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgYWRkcyBhIGxpc3RlbmVyLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIHZvaWQgYWRkTGlzdGVuZXIoSU5vdGlmeUNoYW5nZWRMaXN0ZW5lciBub3RpZnlDaGFuZ2VkTGlzdGVuZXIpIHsNCisJCWNoYW5nZU5vdGlmaWVyLmFkZExpc3RlbmVyKG5vdGlmeUNoYW5nZWRMaXN0ZW5lcik7DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgcmVtb3ZlcyBhIGxpc3RlbmVyLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIHZvaWQgcmVtb3ZlTGlzdGVuZXIoSU5vdGlmeUNoYW5nZWRMaXN0ZW5lciBub3RpZnlDaGFuZ2VkTGlzdGVuZXIpIHsNCisJCWNoYW5nZU5vdGlmaWVyLnJlbW92ZUxpc3RlbmVyKG5vdGlmeUNoYW5nZWRMaXN0ZW5lcik7DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgZGVsZWdhdGVzIHRvIHtAbGluayAjY2hhbmdlTm90aWZpZXJ9IGFuZCB0byB7QGxpbmsgI3BhcmVudEFkYXB0ZXJGYWN0b3J5fS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyB2b2lkIGZpcmVOb3RpZnlDaGFuZ2VkKE5vdGlmaWNhdGlvbiBub3RpZmljYXRpb24pIHsNCisJCWNoYW5nZU5vdGlmaWVyLmZpcmVOb3RpZnlDaGFuZ2VkKG5vdGlmaWNhdGlvbik7DQorDQorCQlpZiAocGFyZW50QWRhcHRlckZhY3RvcnkgIT0gbnVsbCkgew0KKwkJCXBhcmVudEFkYXB0ZXJGYWN0b3J5LmZpcmVOb3RpZnlDaGFuZ2VkKG5vdGlmaWNhdGlvbik7DQorCQl9DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgZGlzcG9zZXMgYWxsIG9mIHRoZSBpdGVtIHByb3ZpZGVycyBjcmVhdGVkIGJ5IHRoaXMgZmFjdG9yeS4gDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgdm9pZCBkaXNwb3NlKCkgew0KKwkJaWYgKGF1dG9tYXRpY0V4cGVyaW1lbnRJdGVtUHJvdmlkZXIgIT0gbnVsbCkgYXV0b21hdGljRXhwZXJpbWVudEl0ZW1Qcm92aWRlci5kaXNwb3NlKCk7DQorCQlpZiAobW9kaWZpYWJsZVBhcmFtZXRlckl0ZW1Qcm92aWRlciAhPSBudWxsKSBtb2RpZmlhYmxlUGFyYW1ldGVySXRlbVByb3ZpZGVyLmRpc3Bvc2UoKTsNCisJCWlmIChvcHRpbWl6ZXJBbGdvcml0aG1JdGVtUHJvdmlkZXIgIT0gbnVsbCkgb3B0aW1pemVyQWxnb3JpdGhtSXRlbVByb3ZpZGVyLmRpc3Bvc2UoKTsNCisJfQ0KKw0KK30NCmRpZmYgLS1naXQgYS9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQvc3JjL29yZy9lY2xpcHNlL3N0ZW0vYW5hbHlzaXMvYXV0b21hdGljZXhwZXJpbWVudC9wcm92aWRlci9Nb2RpZmlhYmxlUGFyYW1ldGVySXRlbVByb3ZpZGVyLmphdmEgYi9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQvc3JjL29yZy9lY2xpcHNlL3N0ZW0vYW5hbHlzaXMvYXV0b21hdGljZXhwZXJpbWVudC9wcm92aWRlci9Nb2RpZmlhYmxlUGFyYW1ldGVySXRlbVByb3ZpZGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGE2MjM4NAotLS0gL2Rldi9udWxsCisrKyBiL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuYXV0b21hdGljZXhwZXJpbWVudC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9hbmFseXNpcy9hdXRvbWF0aWNleHBlcmltZW50L3Byb3ZpZGVyL01vZGlmaWFibGVQYXJhbWV0ZXJJdGVtUHJvdmlkZXIuamF2YQpAQCAtMCwwICsxLDMwNyBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQucHJvdmlkZXI7DQorDQorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisgKiBDb3B5cmlnaHQgKGMpIDIwMDkgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuDQorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscw0KKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMA0KKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0DQorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwNCisgKg0KKyAqIENvbnRyaWJ1dG9yczoNCisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uDQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQorDQorDQoraW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOw0KK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsNCisNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuQWRhcHRlckZhY3Rvcnk7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlJlc291cmNlTG9jYXRvcjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeTsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUVkaXRpbmdEb21haW5JdGVtUHJvdmlkZXI7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtTGFiZWxQcm92aWRlcjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtUHJvcGVydHlTb3VyY2U7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklTdHJ1Y3R1cmVkSXRlbUNvbnRlbnRQcm92aWRlcjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVRyZWVJdGVtQ29udGVudFByb3ZpZGVyOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JdGVtUHJvcGVydHlEZXNjcmlwdG9yOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JdGVtUHJvdmlkZXJBZGFwdGVyOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5WaWV3ZXJOb3RpZmljYXRpb247DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuYXV0b21hdGljZXhwZXJpbWVudC5BdXRvbWF0aWNleHBlcmltZW50UGFja2FnZTsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5hdXRvbWF0aWNleHBlcmltZW50Lk1vZGlmaWFibGVQYXJhbWV0ZXI7DQorDQorDQorLyoqDQorICogVGhpcyBpcyB0aGUgaXRlbSBwcm92aWRlciBhZGFwdGVyIGZvciBhIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQuTW9kaWZpYWJsZVBhcmFtZXRlcn0gb2JqZWN0Lg0KKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorICogQGdlbmVyYXRlZA0KKyAqLw0KK3B1YmxpYyBjbGFzcyBNb2RpZmlhYmxlUGFyYW1ldGVySXRlbVByb3ZpZGVyDQorCWV4dGVuZHMgSXRlbVByb3ZpZGVyQWRhcHRlcg0KKwlpbXBsZW1lbnRzDQorCQlJRWRpdGluZ0RvbWFpbkl0ZW1Qcm92aWRlciwNCisJCUlTdHJ1Y3R1cmVkSXRlbUNvbnRlbnRQcm92aWRlciwNCisJCUlUcmVlSXRlbUNvbnRlbnRQcm92aWRlciwNCisJCUlJdGVtTGFiZWxQcm92aWRlciwNCisJCUlJdGVtUHJvcGVydHlTb3VyY2Ugew0KKwkvKioNCisJICogVGhpcyBjb25zdHJ1Y3RzIGFuIGluc3RhbmNlIGZyb20gYSBmYWN0b3J5IGFuZCBhIG5vdGlmaWVyLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIE1vZGlmaWFibGVQYXJhbWV0ZXJJdGVtUHJvdmlkZXIoQWRhcHRlckZhY3RvcnkgYWRhcHRlckZhY3RvcnkpIHsNCisJCXN1cGVyKGFkYXB0ZXJGYWN0b3J5KTsNCisJfQ0KKw0KKwkvKioNCisJICogVGhpcyByZXR1cm5zIHRoZSBwcm9wZXJ0eSBkZXNjcmlwdG9ycyBmb3IgdGhlIGFkYXB0ZWQgY2xhc3MuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlAT3ZlcnJpZGUNCisJcHVibGljIExpc3Q8SUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I+IGdldFByb3BlcnR5RGVzY3JpcHRvcnMoT2JqZWN0IG9iamVjdCkgew0KKwkJaWYgKGl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzID09IG51bGwpIHsNCisJCQlzdXBlci5nZXRQcm9wZXJ0eURlc2NyaXB0b3JzKG9iamVjdCk7DQorDQorCQkJYWRkSW5pdGlhbFZhbHVlUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCk7DQorCQkJYWRkRmVhdHVyZVByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QpOw0KKwkJCWFkZFN0ZXBQcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0KTsNCisJCQlhZGRGZWF0dXJlTmFtZVByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QpOw0KKwkJCWFkZExvd2VyQm91bmRQcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0KTsNCisJCQlhZGRVcHBlckJvdW5kUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCk7DQorCQkJYWRkVGFyZ2V0VVJJUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCk7DQorCQl9DQorCQlyZXR1cm4gaXRlbVByb3BlcnR5RGVzY3JpcHRvcnM7DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgYWRkcyBhIHByb3BlcnR5IGRlc2NyaXB0b3IgZm9yIHRoZSBJbml0aWFsIFZhbHVlIGZlYXR1cmUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgdm9pZCBhZGRJbml0aWFsVmFsdWVQcm9wZXJ0eURlc2NyaXB0b3IoT2JqZWN0IG9iamVjdCkgew0KKwkJaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMuYWRkDQorCQkJKGNyZWF0ZUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3INCisJCQkJKCgoQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSlhZGFwdGVyRmFjdG9yeSkuZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCksDQorCQkJCSBnZXRSZXNvdXJjZUxvY2F0b3IoKSwNCisJCQkJIGdldFN0cmluZygiX1VJX01vZGlmaWFibGVQYXJhbWV0ZXJfaW5pdGlhbFZhbHVlX2ZlYXR1cmUiKSwNCisJCQkJIGdldFN0cmluZygiX1VJX1Byb3BlcnR5RGVzY3JpcHRvcl9kZXNjcmlwdGlvbiIsICJfVUlfTW9kaWZpYWJsZVBhcmFtZXRlcl9pbml0aWFsVmFsdWVfZmVhdHVyZSIsICJfVUlfTW9kaWZpYWJsZVBhcmFtZXRlcl90eXBlIiksDQorCQkJCSBBdXRvbWF0aWNleHBlcmltZW50UGFja2FnZS5MaXRlcmFscy5NT0RJRklBQkxFX1BBUkFNRVRFUl9fSU5JVElBTF9WQUxVRSwNCisJCQkJIHRydWUsDQorCQkJCSBmYWxzZSwNCisJCQkJIGZhbHNlLA0KKwkJCQkgSXRlbVByb3BlcnR5RGVzY3JpcHRvci5SRUFMX1ZBTFVFX0lNQUdFLA0KKwkJCQkgbnVsbCwNCisJCQkJIG51bGwpKTsNCisJfQ0KKw0KKwkvKioNCisJICogVGhpcyBhZGRzIGEgcHJvcGVydHkgZGVzY3JpcHRvciBmb3IgdGhlIEZlYXR1cmUgZmVhdHVyZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCB2b2lkIGFkZEZlYXR1cmVQcm9wZXJ0eURlc2NyaXB0b3IoT2JqZWN0IG9iamVjdCkgew0KKwkJaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMuYWRkDQorCQkJKGNyZWF0ZUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3INCisJCQkJKCgoQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSlhZGFwdGVyRmFjdG9yeSkuZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCksDQorCQkJCSBnZXRSZXNvdXJjZUxvY2F0b3IoKSwNCisJCQkJIGdldFN0cmluZygiX1VJX01vZGlmaWFibGVQYXJhbWV0ZXJfZmVhdHVyZV9mZWF0dXJlIiksDQorCQkJCSBnZXRTdHJpbmcoIl9VSV9Qcm9wZXJ0eURlc2NyaXB0b3JfZGVzY3JpcHRpb24iLCAiX1VJX01vZGlmaWFibGVQYXJhbWV0ZXJfZmVhdHVyZV9mZWF0dXJlIiwgIl9VSV9Nb2RpZmlhYmxlUGFyYW1ldGVyX3R5cGUiKSwNCisJCQkJIEF1dG9tYXRpY2V4cGVyaW1lbnRQYWNrYWdlLkxpdGVyYWxzLk1PRElGSUFCTEVfUEFSQU1FVEVSX19GRUFUVVJFLA0KKwkJCQkgdHJ1ZSwNCisJCQkJIGZhbHNlLA0KKwkJCQkgdHJ1ZSwNCisJCQkJIG51bGwsDQorCQkJCSBudWxsLA0KKwkJCQkgbnVsbCkpOw0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIGFkZHMgYSBwcm9wZXJ0eSBkZXNjcmlwdG9yIGZvciB0aGUgU3RlcCBmZWF0dXJlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIHZvaWQgYWRkU3RlcFByb3BlcnR5RGVzY3JpcHRvcihPYmplY3Qgb2JqZWN0KSB7DQorCQlpdGVtUHJvcGVydHlEZXNjcmlwdG9ycy5hZGQNCisJCQkoY3JlYXRlSXRlbVByb3BlcnR5RGVzY3JpcHRvcg0KKwkJCQkoKChDb21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5KWFkYXB0ZXJGYWN0b3J5KS5nZXRSb290QWRhcHRlckZhY3RvcnkoKSwNCisJCQkJIGdldFJlc291cmNlTG9jYXRvcigpLA0KKwkJCQkgZ2V0U3RyaW5nKCJfVUlfTW9kaWZpYWJsZVBhcmFtZXRlcl9zdGVwX2ZlYXR1cmUiKSwNCisJCQkJIGdldFN0cmluZygiX1VJX1Byb3BlcnR5RGVzY3JpcHRvcl9kZXNjcmlwdGlvbiIsICJfVUlfTW9kaWZpYWJsZVBhcmFtZXRlcl9zdGVwX2ZlYXR1cmUiLCAiX1VJX01vZGlmaWFibGVQYXJhbWV0ZXJfdHlwZSIpLA0KKwkJCQkgQXV0b21hdGljZXhwZXJpbWVudFBhY2thZ2UuTGl0ZXJhbHMuTU9ESUZJQUJMRV9QQVJBTUVURVJfX1NURVAsDQorCQkJCSB0cnVlLA0KKwkJCQkgZmFsc2UsDQorCQkJCSBmYWxzZSwNCisJCQkJIEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IuUkVBTF9WQUxVRV9JTUFHRSwNCisJCQkJIG51bGwsDQorCQkJCSBudWxsKSk7DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgYWRkcyBhIHByb3BlcnR5IGRlc2NyaXB0b3IgZm9yIHRoZSBGZWF0dXJlIE5hbWUgZmVhdHVyZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCB2b2lkIGFkZEZlYXR1cmVOYW1lUHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdCBvYmplY3QpIHsNCisJCWl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzLmFkZA0KKwkJCShjcmVhdGVJdGVtUHJvcGVydHlEZXNjcmlwdG9yDQorCQkJCSgoKENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnkpYWRhcHRlckZhY3RvcnkpLmdldFJvb3RBZGFwdGVyRmFjdG9yeSgpLA0KKwkJCQkgZ2V0UmVzb3VyY2VMb2NhdG9yKCksDQorCQkJCSBnZXRTdHJpbmcoIl9VSV9Nb2RpZmlhYmxlUGFyYW1ldGVyX2ZlYXR1cmVOYW1lX2ZlYXR1cmUiKSwNCisJCQkJIGdldFN0cmluZygiX1VJX1Byb3BlcnR5RGVzY3JpcHRvcl9kZXNjcmlwdGlvbiIsICJfVUlfTW9kaWZpYWJsZVBhcmFtZXRlcl9mZWF0dXJlTmFtZV9mZWF0dXJlIiwgIl9VSV9Nb2RpZmlhYmxlUGFyYW1ldGVyX3R5cGUiKSwNCisJCQkJIEF1dG9tYXRpY2V4cGVyaW1lbnRQYWNrYWdlLkxpdGVyYWxzLk1PRElGSUFCTEVfUEFSQU1FVEVSX19GRUFUVVJFX05BTUUsDQorCQkJCSB0cnVlLA0KKwkJCQkgZmFsc2UsDQorCQkJCSBmYWxzZSwNCisJCQkJIEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IuR0VORVJJQ19WQUxVRV9JTUFHRSwNCisJCQkJIG51bGwsDQorCQkJCSBudWxsKSk7DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgYWRkcyBhIHByb3BlcnR5IGRlc2NyaXB0b3IgZm9yIHRoZSBMb3dlciBCb3VuZCBmZWF0dXJlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIHZvaWQgYWRkTG93ZXJCb3VuZFByb3BlcnR5RGVzY3JpcHRvcihPYmplY3Qgb2JqZWN0KSB7DQorCQlpdGVtUHJvcGVydHlEZXNjcmlwdG9ycy5hZGQNCisJCQkoY3JlYXRlSXRlbVByb3BlcnR5RGVzY3JpcHRvcg0KKwkJCQkoKChDb21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5KWFkYXB0ZXJGYWN0b3J5KS5nZXRSb290QWRhcHRlckZhY3RvcnkoKSwNCisJCQkJIGdldFJlc291cmNlTG9jYXRvcigpLA0KKwkJCQkgZ2V0U3RyaW5nKCJfVUlfTW9kaWZpYWJsZVBhcmFtZXRlcl9sb3dlckJvdW5kX2ZlYXR1cmUiKSwNCisJCQkJIGdldFN0cmluZygiX1VJX1Byb3BlcnR5RGVzY3JpcHRvcl9kZXNjcmlwdGlvbiIsICJfVUlfTW9kaWZpYWJsZVBhcmFtZXRlcl9sb3dlckJvdW5kX2ZlYXR1cmUiLCAiX1VJX01vZGlmaWFibGVQYXJhbWV0ZXJfdHlwZSIpLA0KKwkJCQkgQXV0b21hdGljZXhwZXJpbWVudFBhY2thZ2UuTGl0ZXJhbHMuTU9ESUZJQUJMRV9QQVJBTUVURVJfX0xPV0VSX0JPVU5ELA0KKwkJCQkgdHJ1ZSwNCisJCQkJIGZhbHNlLA0KKwkJCQkgZmFsc2UsDQorCQkJCSBJdGVtUHJvcGVydHlEZXNjcmlwdG9yLlJFQUxfVkFMVUVfSU1BR0UsDQorCQkJCSBudWxsLA0KKwkJCQkgbnVsbCkpOw0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIGFkZHMgYSBwcm9wZXJ0eSBkZXNjcmlwdG9yIGZvciB0aGUgVXBwZXIgQm91bmQgZmVhdHVyZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCB2b2lkIGFkZFVwcGVyQm91bmRQcm9wZXJ0eURlc2NyaXB0b3IoT2JqZWN0IG9iamVjdCkgew0KKwkJaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMuYWRkDQorCQkJKGNyZWF0ZUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3INCisJCQkJKCgoQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSlhZGFwdGVyRmFjdG9yeSkuZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCksDQorCQkJCSBnZXRSZXNvdXJjZUxvY2F0b3IoKSwNCisJCQkJIGdldFN0cmluZygiX1VJX01vZGlmaWFibGVQYXJhbWV0ZXJfdXBwZXJCb3VuZF9mZWF0dXJlIiksDQorCQkJCSBnZXRTdHJpbmcoIl9VSV9Qcm9wZXJ0eURlc2NyaXB0b3JfZGVzY3JpcHRpb24iLCAiX1VJX01vZGlmaWFibGVQYXJhbWV0ZXJfdXBwZXJCb3VuZF9mZWF0dXJlIiwgIl9VSV9Nb2RpZmlhYmxlUGFyYW1ldGVyX3R5cGUiKSwNCisJCQkJIEF1dG9tYXRpY2V4cGVyaW1lbnRQYWNrYWdlLkxpdGVyYWxzLk1PRElGSUFCTEVfUEFSQU1FVEVSX19VUFBFUl9CT1VORCwNCisJCQkJIHRydWUsDQorCQkJCSBmYWxzZSwNCisJCQkJIGZhbHNlLA0KKwkJCQkgSXRlbVByb3BlcnR5RGVzY3JpcHRvci5SRUFMX1ZBTFVFX0lNQUdFLA0KKwkJCQkgbnVsbCwNCisJCQkJIG51bGwpKTsNCisJfQ0KKw0KKwkvKioNCisJICogVGhpcyBhZGRzIGEgcHJvcGVydHkgZGVzY3JpcHRvciBmb3IgdGhlIFRhcmdldCBVUkkgZmVhdHVyZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCB2b2lkIGFkZFRhcmdldFVSSVByb3BlcnR5RGVzY3JpcHRvcihPYmplY3Qgb2JqZWN0KSB7DQorCQlpdGVtUHJvcGVydHlEZXNjcmlwdG9ycy5hZGQNCisJCQkoY3JlYXRlSXRlbVByb3BlcnR5RGVzY3JpcHRvcg0KKwkJCQkoKChDb21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5KWFkYXB0ZXJGYWN0b3J5KS5nZXRSb290QWRhcHRlckZhY3RvcnkoKSwNCisJCQkJIGdldFJlc291cmNlTG9jYXRvcigpLA0KKwkJCQkgZ2V0U3RyaW5nKCJfVUlfTW9kaWZpYWJsZVBhcmFtZXRlcl90YXJnZXRVUklfZmVhdHVyZSIpLA0KKwkJCQkgZ2V0U3RyaW5nKCJfVUlfUHJvcGVydHlEZXNjcmlwdG9yX2Rlc2NyaXB0aW9uIiwgIl9VSV9Nb2RpZmlhYmxlUGFyYW1ldGVyX3RhcmdldFVSSV9mZWF0dXJlIiwgIl9VSV9Nb2RpZmlhYmxlUGFyYW1ldGVyX3R5cGUiKSwNCisJCQkJIEF1dG9tYXRpY2V4cGVyaW1lbnRQYWNrYWdlLkxpdGVyYWxzLk1PRElGSUFCTEVfUEFSQU1FVEVSX19UQVJHRVRfVVJJLA0KKwkJCQkgdHJ1ZSwNCisJCQkJIGZhbHNlLA0KKwkJCQkgZmFsc2UsDQorCQkJCSBJdGVtUHJvcGVydHlEZXNjcmlwdG9yLkdFTkVSSUNfVkFMVUVfSU1BR0UsDQorCQkJCSBudWxsLA0KKwkJCQkgbnVsbCkpOw0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIHJldHVybnMgTW9kaWZpYWJsZVBhcmFtZXRlci5naWYuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlAT3ZlcnJpZGUNCisJcHVibGljIE9iamVjdCBnZXRJbWFnZShPYmplY3Qgb2JqZWN0KSB7DQorCQlyZXR1cm4gb3ZlcmxheUltYWdlKG9iamVjdCwgZ2V0UmVzb3VyY2VMb2NhdG9yKCkuZ2V0SW1hZ2UoImZ1bGwvb2JqMTYvTW9kaWZpYWJsZVBhcmFtZXRlciIpKTsNCisJfQ0KKw0KKwkvKioNCisJICogVGhpcyByZXR1cm5zIHRoZSBsYWJlbCB0ZXh0IGZvciB0aGUgYWRhcHRlZCBjbGFzcy4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCUBPdmVycmlkZQ0KKwlwdWJsaWMgU3RyaW5nIGdldFRleHQoT2JqZWN0IG9iamVjdCkgew0KKwkJU3RyaW5nIGxhYmVsID0gKChNb2RpZmlhYmxlUGFyYW1ldGVyKW9iamVjdCkuZ2V0RmVhdHVyZU5hbWUoKTsNCisJCXJldHVybiBsYWJlbCA9PSBudWxsIHx8IGxhYmVsLmxlbmd0aCgpID09IDAgPw0KKwkJCWdldFN0cmluZygiX1VJX01vZGlmaWFibGVQYXJhbWV0ZXJfdHlwZSIpIDoNCisJCQlnZXRTdHJpbmcoIl9VSV9Nb2RpZmlhYmxlUGFyYW1ldGVyX3R5cGUiKSArICIgIiArIGxhYmVsOw0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIGhhbmRsZXMgbW9kZWwgbm90aWZpY2F0aW9ucyBieSBjYWxsaW5nIHtAbGluayAjdXBkYXRlQ2hpbGRyZW59IHRvIHVwZGF0ZSBhbnkgY2FjaGVkDQorCSAqIGNoaWxkcmVuIGFuZCBieSBjcmVhdGluZyBhIHZpZXdlciBub3RpZmljYXRpb24sIHdoaWNoIGl0IHBhc3NlcyB0byB7QGxpbmsgI2ZpcmVOb3RpZnlDaGFuZ2VkfS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCUBPdmVycmlkZQ0KKwlwdWJsaWMgdm9pZCBub3RpZnlDaGFuZ2VkKE5vdGlmaWNhdGlvbiBub3RpZmljYXRpb24pIHsNCisJCXVwZGF0ZUNoaWxkcmVuKG5vdGlmaWNhdGlvbik7DQorDQorCQlzd2l0Y2ggKG5vdGlmaWNhdGlvbi5nZXRGZWF0dXJlSUQoTW9kaWZpYWJsZVBhcmFtZXRlci5jbGFzcykpIHsNCisJCQljYXNlIEF1dG9tYXRpY2V4cGVyaW1lbnRQYWNrYWdlLk1PRElGSUFCTEVfUEFSQU1FVEVSX19JTklUSUFMX1ZBTFVFOg0KKwkJCWNhc2UgQXV0b21hdGljZXhwZXJpbWVudFBhY2thZ2UuTU9ESUZJQUJMRV9QQVJBTUVURVJfX1NURVA6DQorCQkJY2FzZSBBdXRvbWF0aWNleHBlcmltZW50UGFja2FnZS5NT0RJRklBQkxFX1BBUkFNRVRFUl9fRkVBVFVSRV9OQU1FOg0KKwkJCWNhc2UgQXV0b21hdGljZXhwZXJpbWVudFBhY2thZ2UuTU9ESUZJQUJMRV9QQVJBTUVURVJfX0xPV0VSX0JPVU5EOg0KKwkJCWNhc2UgQXV0b21hdGljZXhwZXJpbWVudFBhY2thZ2UuTU9ESUZJQUJMRV9QQVJBTUVURVJfX1VQUEVSX0JPVU5EOg0KKwkJCWNhc2UgQXV0b21hdGljZXhwZXJpbWVudFBhY2thZ2UuTU9ESUZJQUJMRV9QQVJBTUVURVJfX1RBUkdFVF9VUkk6DQorCQkJCWZpcmVOb3RpZnlDaGFuZ2VkKG5ldyBWaWV3ZXJOb3RpZmljYXRpb24obm90aWZpY2F0aW9uLCBub3RpZmljYXRpb24uZ2V0Tm90aWZpZXIoKSwgZmFsc2UsIHRydWUpKTsNCisJCQkJcmV0dXJuOw0KKwkJfQ0KKwkJc3VwZXIubm90aWZ5Q2hhbmdlZChub3RpZmljYXRpb24pOw0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIGFkZHMge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lZGl0LmNvbW1hbmQuQ29tbWFuZFBhcmFtZXRlcn1zIGRlc2NyaWJpbmcgdGhlIGNoaWxkcmVuDQorCSAqIHRoYXQgY2FuIGJlIGNyZWF0ZWQgdW5kZXIgdGhpcyBvYmplY3QuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlAT3ZlcnJpZGUNCisJcHJvdGVjdGVkIHZvaWQgY29sbGVjdE5ld0NoaWxkRGVzY3JpcHRvcnMoQ29sbGVjdGlvbjxPYmplY3Q+IG5ld0NoaWxkRGVzY3JpcHRvcnMsIE9iamVjdCBvYmplY3QpIHsNCisJCXN1cGVyLmNvbGxlY3ROZXdDaGlsZERlc2NyaXB0b3JzKG5ld0NoaWxkRGVzY3JpcHRvcnMsIG9iamVjdCk7DQorCX0NCisNCisJLyoqDQorCSAqIFJldHVybiB0aGUgcmVzb3VyY2UgbG9jYXRvciBmb3IgdGhpcyBpdGVtIHByb3ZpZGVyJ3MgcmVzb3VyY2VzLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJQE92ZXJyaWRlDQorCXB1YmxpYyBSZXNvdXJjZUxvY2F0b3IgZ2V0UmVzb3VyY2VMb2NhdG9yKCkgew0KKwkJcmV0dXJuIEF1dG9tYXRpY2V4cGVyaWVuY2VFZGl0UGx1Z2luLklOU1RBTkNFOw0KKwl9DQorDQorfQ0KZGlmZiAtLWdpdCBhL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuYXV0b21hdGljZXhwZXJpbWVudC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9hbmFseXNpcy9hdXRvbWF0aWNleHBlcmltZW50L3Byb3ZpZGVyL09wdGltaXplckFsZ29yaXRobUl0ZW1Qcm92aWRlci5qYXZhIGIvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5hdXRvbWF0aWNleHBlcmltZW50L3NyYy9vcmcvZWNsaXBzZS9zdGVtL2FuYWx5c2lzL2F1dG9tYXRpY2V4cGVyaW1lbnQvcHJvdmlkZXIvT3B0aW1pemVyQWxnb3JpdGhtSXRlbVByb3ZpZGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjUxYmZjNAotLS0gL2Rldi9udWxsCisrKyBiL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuYXV0b21hdGljZXhwZXJpbWVudC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9hbmFseXNpcy9hdXRvbWF0aWNleHBlcmltZW50L3Byb3ZpZGVyL09wdGltaXplckFsZ29yaXRobUl0ZW1Qcm92aWRlci5qYXZhCkBAIC0wLDAgKzEsMTMwIEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuYXV0b21hdGljZXhwZXJpbWVudC5wcm92aWRlcjsKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIAorICogQ29weXJpZ2h0IChjKSAyMDExIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiAKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdCAKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sIAorICogCisgKiBDb250cmlidXRvcnM6IAorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiAKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5BZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlJlc291cmNlTG9jYXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuVVJJOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklFZGl0aW5nRG9tYWluSXRlbVByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtTGFiZWxQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbVByb3BlcnR5RGVzY3JpcHRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbVByb3BlcnR5U291cmNlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklTdHJ1Y3R1cmVkSXRlbUNvbnRlbnRQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JVHJlZUl0ZW1Db250ZW50UHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5hdXRvbWF0aWNleHBlcmltZW50Lk9wdGltaXplckFsZ29yaXRobTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLnByb3ZpZGVyLklkZW50aWZpYWJsZUl0ZW1Qcm92aWRlcjsKKworLyoqCisgKiBUaGlzIGlzIHRoZSBpdGVtIHByb3ZpZGVyIGFkYXB0ZXIgZm9yIGEge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuYXV0b21hdGljZXhwZXJpbWVudC5PcHRpbWl6ZXJBbGdvcml0aG19IG9iamVjdC4KKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIE9wdGltaXplckFsZ29yaXRobUl0ZW1Qcm92aWRlcgorCWV4dGVuZHMgSWRlbnRpZmlhYmxlSXRlbVByb3ZpZGVyCisJaW1wbGVtZW50cworCQlJRWRpdGluZ0RvbWFpbkl0ZW1Qcm92aWRlciwKKwkJSVN0cnVjdHVyZWRJdGVtQ29udGVudFByb3ZpZGVyLAorCQlJVHJlZUl0ZW1Db250ZW50UHJvdmlkZXIsCisJCUlJdGVtTGFiZWxQcm92aWRlciwKKwkJSUl0ZW1Qcm9wZXJ0eVNvdXJjZSB7CisJLyoqCisJICogVGhpcyBjb25zdHJ1Y3RzIGFuIGluc3RhbmNlIGZyb20gYSBmYWN0b3J5IGFuZCBhIG5vdGlmaWVyLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBPcHRpbWl6ZXJBbGdvcml0aG1JdGVtUHJvdmlkZXIoQWRhcHRlckZhY3RvcnkgYWRhcHRlckZhY3RvcnkpIHsKKwkJc3VwZXIoYWRhcHRlckZhY3RvcnkpOworCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyB0aGUgcHJvcGVydHkgZGVzY3JpcHRvcnMgZm9yIHRoZSBhZGFwdGVkIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBMaXN0PElJdGVtUHJvcGVydHlEZXNjcmlwdG9yPiBnZXRQcm9wZXJ0eURlc2NyaXB0b3JzKE9iamVjdCBvYmplY3QpIHsKKwkJaWYgKGl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzID09IG51bGwpIHsKKwkJCXN1cGVyLmdldFByb3BlcnR5RGVzY3JpcHRvcnMob2JqZWN0KTsKKworCQl9CisJCXJldHVybiBpdGVtUHJvcGVydHlEZXNjcmlwdG9yczsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgT3B0aW1pemVyQWxnb3JpdGhtLmdpZi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgT2JqZWN0IGdldEltYWdlKE9iamVjdCBvYmplY3QpIHsKKwkJcmV0dXJuIG92ZXJsYXlJbWFnZShvYmplY3QsIGdldFJlc291cmNlTG9jYXRvcigpLmdldEltYWdlKCJmdWxsL29iajE2L09wdGltaXplckFsZ29yaXRobSIpKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgdGhlIGxhYmVsIHRleHQgZm9yIHRoZSBhZGFwdGVkIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBTdHJpbmcgZ2V0VGV4dChPYmplY3Qgb2JqZWN0KSB7CisJCVVSSSBsYWJlbFZhbHVlID0gKChPcHRpbWl6ZXJBbGdvcml0aG0pb2JqZWN0KS5nZXRVUkkoKTsKKwkJU3RyaW5nIGxhYmVsID0gbGFiZWxWYWx1ZSA9PSBudWxsID8gbnVsbCA6IGxhYmVsVmFsdWUudG9TdHJpbmcoKTsKKwkJcmV0dXJuIGxhYmVsID09IG51bGwgfHwgbGFiZWwubGVuZ3RoKCkgPT0gMCA/CisJCQlnZXRTdHJpbmcoIl9VSV9PcHRpbWl6ZXJBbGdvcml0aG1fdHlwZSIpIDoKKwkJCWdldFN0cmluZygiX1VJX09wdGltaXplckFsZ29yaXRobV90eXBlIikgKyAiICIgKyBsYWJlbDsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGhhbmRsZXMgbW9kZWwgbm90aWZpY2F0aW9ucyBieSBjYWxsaW5nIHtAbGluayAjdXBkYXRlQ2hpbGRyZW59IHRvIHVwZGF0ZSBhbnkgY2FjaGVkCisJICogY2hpbGRyZW4gYW5kIGJ5IGNyZWF0aW5nIGEgdmlld2VyIG5vdGlmaWNhdGlvbiwgd2hpY2ggaXQgcGFzc2VzIHRvIHtAbGluayAjZmlyZU5vdGlmeUNoYW5nZWR9LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIG5vdGlmeUNoYW5nZWQoTm90aWZpY2F0aW9uIG5vdGlmaWNhdGlvbikgeworCQl1cGRhdGVDaGlsZHJlbihub3RpZmljYXRpb24pOworCQlzdXBlci5ub3RpZnlDaGFuZ2VkKG5vdGlmaWNhdGlvbik7CisJfQorCisJLyoqCisJICogVGhpcyBhZGRzIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuZWRpdC5jb21tYW5kLkNvbW1hbmRQYXJhbWV0ZXJ9cyBkZXNjcmliaW5nIHRoZSBjaGlsZHJlbgorCSAqIHRoYXQgY2FuIGJlIGNyZWF0ZWQgdW5kZXIgdGhpcyBvYmplY3QuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgY29sbGVjdE5ld0NoaWxkRGVzY3JpcHRvcnMoQ29sbGVjdGlvbjxPYmplY3Q+IG5ld0NoaWxkRGVzY3JpcHRvcnMsIE9iamVjdCBvYmplY3QpIHsKKwkJc3VwZXIuY29sbGVjdE5ld0NoaWxkRGVzY3JpcHRvcnMobmV3Q2hpbGREZXNjcmlwdG9ycywgb2JqZWN0KTsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm4gdGhlIHJlc291cmNlIGxvY2F0b3IgZm9yIHRoaXMgaXRlbSBwcm92aWRlcidzIHJlc291cmNlcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgUmVzb3VyY2VMb2NhdG9yIGdldFJlc291cmNlTG9jYXRvcigpIHsKKwkJcmV0dXJuIEF1dG9tYXRpY2V4cGVyaWVuY2VFZGl0UGx1Z2luLklOU1RBTkNFOworCX0KKworfQpkaWZmIC0tZ2l0IGEvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5hdXRvbWF0aWNleHBlcmltZW50L3NyYy9vcmcvZWNsaXBzZS9zdGVtL2FuYWx5c2lzL2F1dG9tYXRpY2V4cGVyaW1lbnQvdWkvQWxnb3JpdGhtQ29tcG9zaXRlRWRpdG9yLmphdmEgYi9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQvc3JjL29yZy9lY2xpcHNlL3N0ZW0vYW5hbHlzaXMvYXV0b21hdGljZXhwZXJpbWVudC91aS9BbGdvcml0aG1Db21wb3NpdGVFZGl0b3IuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZGE5YThhCi0tLSAvZGV2L251bGwKKysrIGIvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5hdXRvbWF0aWNleHBlcmltZW50L3NyYy9vcmcvZWNsaXBzZS9zdGVtL2FuYWx5c2lzL2F1dG9tYXRpY2V4cGVyaW1lbnQvdWkvQWxnb3JpdGhtQ29tcG9zaXRlRWRpdG9yLmphdmEKQEAgLTAsMCArMSwxNyBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQudWk7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQuT3B0aW1pemVyQWxnb3JpdGhtOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZTsKKworcHVibGljIGFic3RyYWN0IGNsYXNzIEFsZ29yaXRobUNvbXBvc2l0ZUVkaXRvciBleHRlbmRzIENvbXBvc2l0ZSB7CisKKwlBbGdvcml0aG1Db21wb3NpdGVFZGl0b3IoZmluYWwgQ29tcG9zaXRlIHBhcmVudCwgZmluYWwgaW50IHN0eWxlKSB7CisJCXN1cGVyKHBhcmVudCwgc3R5bGUpOworCX0KKworCXB1YmxpYyBhYnN0cmFjdCBib29sZWFuIHZhbGlkYXRlKCk7CisJCisJcHVibGljIGFic3RyYWN0IFN0cmluZyBnZXRFcnJvck1lc3NhZ2UoKTsKKwkKKwlwdWJsaWMgYWJzdHJhY3QgT3B0aW1pemVyQWxnb3JpdGhtIGNyZWF0ZUFsZ29yaXRobSgpOworfQpkaWZmIC0tZ2l0IGEvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5hdXRvbWF0aWNleHBlcmltZW50L3NyYy9vcmcvZWNsaXBzZS9zdGVtL2FuYWx5c2lzL2F1dG9tYXRpY2V4cGVyaW1lbnQvdWkvQWxnb3JpdGhtQ29tcG9zaXRlRWRpdG9yQWRhcHRlci5qYXZhIGIvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5hdXRvbWF0aWNleHBlcmltZW50L3NyYy9vcmcvZWNsaXBzZS9zdGVtL2FuYWx5c2lzL2F1dG9tYXRpY2V4cGVyaW1lbnQvdWkvQWxnb3JpdGhtQ29tcG9zaXRlRWRpdG9yQWRhcHRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU3N2U4NzcKLS0tIC9kZXYvbnVsbAorKysgYi9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQvc3JjL29yZy9lY2xpcHNlL3N0ZW0vYW5hbHlzaXMvYXV0b21hdGljZXhwZXJpbWVudC91aS9BbGdvcml0aG1Db21wb3NpdGVFZGl0b3JBZGFwdGVyLmphdmEKQEAgLTAsMCArMSwxNCBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQudWk7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5BZGFwdGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LmltcGwuQWRhcHRlckltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5Nb2RpZnlMaXN0ZW5lcjsKKworcHVibGljIGFic3RyYWN0IGNsYXNzIEFsZ29yaXRobUNvbXBvc2l0ZUVkaXRvckFkYXB0ZXIgZXh0ZW5kcyBBZGFwdGVySW1wbCBpbXBsZW1lbnRzCisJCUFkYXB0ZXIgeworCisJYWJzdHJhY3QgcHVibGljIEFsZ29yaXRobUNvbXBvc2l0ZUVkaXRvciBjcmVhdGVDb21wb3NpdGVFZGl0b3IoCisJCQlBbGdvcml0aG1Db250cm9sIGFsZ0NvbnRyb2wsCisJCQlpbnQgc3R5bGUsIE1vZGlmeUxpc3RlbmVyIHByb2plY3RWYWxpZGF0b3IsIElQcm9qZWN0IHByb2plY3QpOworfQpkaWZmIC0tZ2l0IGEvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5hdXRvbWF0aWNleHBlcmltZW50L3NyYy9vcmcvZWNsaXBzZS9zdGVtL2FuYWx5c2lzL2F1dG9tYXRpY2V4cGVyaW1lbnQvdWkvQWxnb3JpdGhtQ29tcG9zaXRlRWRpdG9yQWRhcHRlckZhY3RvcnkuamF2YSBiL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuYXV0b21hdGljZXhwZXJpbWVudC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9hbmFseXNpcy9hdXRvbWF0aWNleHBlcmltZW50L3VpL0FsZ29yaXRobUNvbXBvc2l0ZUVkaXRvckFkYXB0ZXJGYWN0b3J5LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzQxMzU5NAotLS0gL2Rldi9udWxsCisrKyBiL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuYXV0b21hdGljZXhwZXJpbWVudC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9hbmFseXNpcy9hdXRvbWF0aWNleHBlcmltZW50L3VpL0FsZ29yaXRobUNvbXBvc2l0ZUVkaXRvckFkYXB0ZXJGYWN0b3J5LmphdmEKQEAgLTAsMCArMSwyMiBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQudWk7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5Db21wb3NlZEFkYXB0ZXJGYWN0b3J5OworCisvKioKKyAqIFRoaXMgY2xhc3MgcmVwcmVzZW50cworICovCitwdWJsaWMgaW50ZXJmYWNlIEFsZ29yaXRobUNvbXBvc2l0ZUVkaXRvckFkYXB0ZXJGYWN0b3J5IHsKKworCUFsZ29yaXRobUNvbXBvc2l0ZUVkaXRvckFkYXB0ZXJGYWN0b3J5SW1wbCBJTlNUQU5DRSA9IG5ldyBBbGdvcml0aG1Db21wb3NpdGVFZGl0b3JBZGFwdGVyRmFjdG9yeUltcGwoKTsKKworCXB1YmxpYyBjbGFzcyBBbGdvcml0aG1Db21wb3NpdGVFZGl0b3JBZGFwdGVyRmFjdG9yeUltcGwgZXh0ZW5kcworCQkJQ29tcG9zZWRBZGFwdGVyRmFjdG9yeSBpbXBsZW1lbnRzCisJCQlBbGdvcml0aG1Db21wb3NpdGVFZGl0b3JBZGFwdGVyRmFjdG9yeSB7CisKKwkJQE92ZXJyaWRlCisJCXB1YmxpYyBib29sZWFuIGlzRmFjdG9yeUZvclR5cGUoT2JqZWN0IHR5cGUpIHsKKwkJCXJldHVybiB0eXBlID09IEFsZ29yaXRobUNvbXBvc2l0ZUVkaXRvckFkYXB0ZXIuY2xhc3M7CisJCX0KKworCX0gCit9IApkaWZmIC0tZ2l0IGEvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5hdXRvbWF0aWNleHBlcmltZW50L3NyYy9vcmcvZWNsaXBzZS9zdGVtL2FuYWx5c2lzL2F1dG9tYXRpY2V4cGVyaW1lbnQvdWkvQWxnb3JpdGhtQ29udHJvbC5qYXZhIGIvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5hdXRvbWF0aWNleHBlcmltZW50L3NyYy9vcmcvZWNsaXBzZS9zdGVtL2FuYWx5c2lzL2F1dG9tYXRpY2V4cGVyaW1lbnQvdWkvQWxnb3JpdGhtQ29udHJvbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEyYTMxNmQKLS0tIC9kZXYvbnVsbAorKysgYi9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQvc3JjL29yZy9lY2xpcHNlL3N0ZW0vYW5hbHlzaXMvYXV0b21hdGljZXhwZXJpbWVudC91aS9BbGdvcml0aG1Db250cm9sLmphdmEKQEAgLTAsMCArMSwxMjUgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5hdXRvbWF0aWNleHBlcmltZW50LnVpOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOworaW1wb3J0IGphdmEudXRpbC5NYXA7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQuT3B0aW1pemVyQWxnb3JpdGhtOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuYXV0b21hdGljZXhwZXJpbWVudC52aWV3cy5NZXNzYWdlczsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnVpLkFjdGl2YXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuU1dUOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5jdXN0b20uU3RhY2tMYXlvdXQ7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5Nb2RpZnlMaXN0ZW5lcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGU7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuUGxhdGZvcm1VSTsKKworLyoqCisgKiBUaGlzIGNsYXNzIHJlcHJlc2VudHMgdGhlIFNXVCBjb250cm9sIGZvciBkZWZpbmluZyBhIGRpc2Vhc2UuCisgKi8KK3B1YmxpYyBjbGFzcyBBbGdvcml0aG1Db250cm9sIGV4dGVuZHMgQ29tcG9zaXRlIHsKKworCXByaXZhdGUgc3RhdGljIE9wdGltaXplckFsZ29yaXRobVtdIGFsZ29yaXRobXMgPSBudWxsOworCisJU3RhY2tMYXlvdXQgc3RhY2tMYXlvdXQ7CisJCisKKwlwcml2YXRlIE1hcDxPcHRpbWl6ZXJBbGdvcml0aG0sIEFsZ29yaXRobUNvbXBvc2l0ZUVkaXRvcj5jb21wb3NpdGVNYXAgPSBuZXcgSGFzaE1hcDxPcHRpbWl6ZXJBbGdvcml0aG0sIEFsZ29yaXRobUNvbXBvc2l0ZUVkaXRvcj4oKTsKKwkKKwkvKioKKwkgKiBDcmVhdGUgdGhlIGNvbXBvc2l0ZQorCSAqIAorCSAqIEBwYXJhbSBwYXJlbnQKKwkgKiBAcGFyYW0gc3R5bGUKKwkgKiBAcGFyYW0gcHJvamVjdFZhbGlkYXRvcgorCSAqLworCXB1YmxpYyBBbGdvcml0aG1Db250cm9sKGZpbmFsIENvbXBvc2l0ZSBwYXJlbnQsIGZpbmFsIGludCBzdHlsZSwKKwkJCU1vZGlmeUxpc3RlbmVyIHByb2plY3RWYWxpZGF0b3IsIElQcm9qZWN0IHByb2plY3QsIE9wdGltaXplckFsZ29yaXRobVtdYWxnb3JpdGhtcykgeworCQlzdXBlcihwYXJlbnQsIHN0eWxlKTsKKwkJc3RhY2tMYXlvdXQgPSBuZXcgU3RhY2tMYXlvdXQoKTsKKwkJc2V0TGF5b3V0KHN0YWNrTGF5b3V0KTsKKworCQlBbGdvcml0aG1Db21wb3NpdGVFZGl0b3IgZmlyc3RPbmUgPSBudWxsOworCQlpZiAoYWxnb3JpdGhtcyAhPSBudWxsKSB7CisJCQkvLyBZZXMKKwkJCWZvciAoaW50IGkgPSAwOyBpIDwgYWxnb3JpdGhtcy5sZW5ndGg7IGkrKykgeworCisJCQkJQWxnb3JpdGhtQ29tcG9zaXRlRWRpdG9yQWRhcHRlciBhY2VhID0gKEFsZ29yaXRobUNvbXBvc2l0ZUVkaXRvckFkYXB0ZXIpIEFsZ29yaXRobUNvbXBvc2l0ZUVkaXRvckFkYXB0ZXJGYWN0b3J5LklOU1RBTkNFCisJCQkJCQkuYWRhcHQoYWxnb3JpdGhtc1tpXSwKKwkJCQkJCQkJQWxnb3JpdGhtQ29tcG9zaXRlRWRpdG9yQWRhcHRlci5jbGFzcyk7CisKKwkJCQlmaW5hbCBBbGdvcml0aG1Db21wb3NpdGVFZGl0b3IgYWNlID0gYWNlYQorCQkJCQkJLmNyZWF0ZUNvbXBvc2l0ZUVkaXRvcih0aGlzLCBTV1QuTk9ORSxwcm9qZWN0VmFsaWRhdG9yLCBwcm9qZWN0KTsKKworCQkJCWNvbXBvc2l0ZU1hcC5wdXQoYWxnb3JpdGhtc1tpXSwgYWNlKTsKKwkJCQlpZiAoZmlyc3RPbmUgPT0gbnVsbCkgeworCQkJCQkvLyBZZXMKKwkJCQkJZmlyc3RPbmUgPSBhY2U7CisJCQkJfSAvLyBpZgorCQkJfSAvLyBmb3IgaQorCQl9IC8vIGlmIGFueSBkaXNlYXNlIG1vZGVscz8KKworCQlzdGFja0xheW91dC50b3BDb250cm9sID0gZmlyc3RPbmU7CisJCQorCQlQbGF0Zm9ybVVJLmdldFdvcmtiZW5jaCgpLmdldEhlbHBTeXN0ZW0oKS5zZXRIZWxwKHBhcmVudCwgIm9yZy5lY2xpcHNlLnN0ZW0uZG9jLm5ld2F1dG9leHBfY29udGV4dGlkIik7CisJfS8vIAorCisJCisKKwl2b2lkIGRpc3BsYXlBbGdvcml0aG0oZmluYWwgT3B0aW1pemVyQWxnb3JpdGhtIGFsZ29yaXRobSkgeworCQlmaW5hbCBBbGdvcml0aG1Db21wb3NpdGVFZGl0b3IgYWNlID0gY29tcG9zaXRlTWFwLmdldChhbGdvcml0aG0pOworCQkvLyBEaWQgd2UgZmluZCBpdD8KKwkJaWYgKGFjZSAhPSBudWxsKSB7CisJCQkvLyBZZXMKKwkJCXN0YWNrTGF5b3V0LnRvcENvbnRyb2wgPSBhY2U7CisJCQlsYXlvdXQoKTsKKwkJfSAvLyBpZgorCQllbHNlIHsKKwkJCUFjdGl2YXRvci5sb2dFcnJvcihNZXNzYWdlcy5nZXRTdHJpbmcoIkRNUEMyIikgLy8kTk9OLU5MUy0xJAorCQkJCQkrIGFsZ29yaXRobS5nZXRDbGFzcygpLmdldE5hbWUoKSArICJcIiIsIG51bGwpOyAvLyROT04tTkxTLTEkCisJCX0KKwl9IC8vIAorCQorCQorCQorCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGRpc3Bvc2UoKSB7CisJCXN1cGVyLmRpc3Bvc2UoKTsKKwl9CisKKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgdm9pZCBjaGVja1N1YmNsYXNzKCkgeworCQkvLyBEaXNhYmxlIHRoZSBjaGVjayB0aGF0IHByZXZlbnRzIHN1Yi1jbGFzc2luZyBvZiBTV1QgY29tcG9uZW50cworCX0KKworCS8qKgorCSAqIEByZXR1cm4gPGNvZGU+dHJ1ZTwvY29kZT4gaWYgdGhlIGNvbnRlbnRzIG9mIHRoZSBjb250cm9sIGFyZSB2YWxpZCwKKwkgKiAgICAgICAgIDxjb2RlPmZhbHNlPC9jb2RlPiBvdGhlcndpc2UuCisJICovCisJcHVibGljIGJvb2xlYW4gdmFsaWRhdGUoKSB7CisJCXJldHVybiAoKEFsZ29yaXRobUNvbXBvc2l0ZUVkaXRvcikgKHN0YWNrTGF5b3V0LnRvcENvbnRyb2wpKQorCQkudmFsaWRhdGUoKTsKKwl9IC8vIHZhbGlkYXRlCisKKwkvKioKKwkgKiBAcmV0dXJuIHRoZSBlcnJvciBtZXNzYWdlIHNldCBieSB7QGxpbmsgI3ZhbGlkYXRlKCl9CisJICovCisJcHVibGljIFN0cmluZyBnZXRFcnJvck1lc3NhZ2UoKSB7CisJCXJldHVybiAoKEFsZ29yaXRobUNvbXBvc2l0ZUVkaXRvcikgKHN0YWNrTGF5b3V0LnRvcENvbnRyb2wpKQorCQkuZ2V0RXJyb3JNZXNzYWdlKCk7CisJfQorCisJcHVibGljIE9wdGltaXplckFsZ29yaXRobSBjcmVhdGVBdXRvbWF0aWNFeHBlcmltZW50KCkgeworCQlyZXR1cm4oICgoQWxnb3JpdGhtQ29tcG9zaXRlRWRpdG9yKShzdGFja0xheW91dC50b3BDb250cm9sKSkuY3JlYXRlQWxnb3JpdGhtKCkpOworCX0KK30gLy8gCmRpZmYgLS1naXQgYS9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQvc3JjL29yZy9lY2xpcHNlL3N0ZW0vYW5hbHlzaXMvYXV0b21hdGljZXhwZXJpbWVudC91aS9BdXRvbWF0aWNFeHBlcmltZW50Q29tcG9zaXRlRWRpdG9yLmphdmEgYi9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQvc3JjL29yZy9lY2xpcHNlL3N0ZW0vYW5hbHlzaXMvYXV0b21hdGljZXhwZXJpbWVudC91aS9BdXRvbWF0aWNFeHBlcmltZW50Q29tcG9zaXRlRWRpdG9yLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjQ1Y2FkOQotLS0gL2Rldi9udWxsCisrKyBiL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuYXV0b21hdGljZXhwZXJpbWVudC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9hbmFseXNpcy9hdXRvbWF0aWNleHBlcmltZW50L3VpL0F1dG9tYXRpY0V4cGVyaW1lbnRDb21wb3NpdGVFZGl0b3IuamF2YQpAQCAtMCwwICsxLDY2NSBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQudWk7CisKK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OworCitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3Q7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkNvcmVFeGNlcHRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklDb25maWd1cmF0aW9uRWxlbWVudDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSUV4dGVuc2lvblJlZ2lzdHJ5OworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QbGF0Zm9ybTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUF0dHJpYnV0ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLkVycm9yRnVuY3Rpb247CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5hdXRvbWF0aWNleHBlcmltZW50LkF1dG9tYXRpY0V4cGVyaW1lbnQ7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5hdXRvbWF0aWNleHBlcmltZW50LkF1dG9tYXRpY2V4cGVyaW1lbnRGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuYXV0b21hdGljZXhwZXJpbWVudC5Nb2RpZmlhYmxlUGFyYW1ldGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuYXV0b21hdGljZXhwZXJpbWVudC5PcHRpbWl6ZXJBbGdvcml0aG07CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5hdXRvbWF0aWNleHBlcmltZW50LnZpZXdzLk1lc3NhZ2VzOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uSWRlbnRpZmlhYmxlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uaW1wbC5JZGVudGlmaWFibGVJbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zY2VuYXJpby5TY2VuYXJpbzsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2NlbmFyaW8uaW1wbC5TY2VuYXJpb0ltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS51aS5BY3RpdmF0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS51aS53aWRnZXRzLklkZW50aWZpYWJsZVBpY2tlckRpYWxvZzsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnVpLndpZGdldHMuUGFyYW1ldGVyUGlja2VyRGlhbG9nOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5TV1Q7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5Nb2RpZnlFdmVudDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLk1vZGlmeUxpc3RlbmVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuU2VsZWN0aW9uRXZlbnQ7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5TZWxlY3Rpb25MaXN0ZW5lcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QubGF5b3V0LkZpbGxMYXlvdXQ7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5HcmlkRGF0YTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QubGF5b3V0LkdyaWRMYXlvdXQ7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQnV0dG9uOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbWJvOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5EaXJlY3RvcnlEaWFsb2c7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuRXZlbnQ7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuTGFiZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuTGlzdGVuZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuU2hlbGw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuVGFibGU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuVGFibGVJdGVtOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlRleHQ7CisKK3B1YmxpYyBjbGFzcyBBdXRvbWF0aWNFeHBlcmltZW50Q29tcG9zaXRlRWRpdG9yIGV4dGVuZHMgQWxnb3JpdGhtQ29tcG9zaXRlRWRpdG9yIHsKKworCVRleHQgbWF4SXRlcnNUZXh0OworCVRleHQgcmVmZXJlbmNlRGF0YVRleHQ7CisJVGV4dCBiYXNlU2NlbmFyaW9UZXh0OworCUNvbWJvIGVycm9yRnVuY3Rpb25Db21ibzsKKwlUZXh0IHN0YXJ0VmFsVGV4dDsKKwlUZXh0IHN0ZXBWYWxUZXh0OworCVRleHQgbWluVmFsVGV4dDsKKwlUZXh0IG1heFZhbFRleHQ7CisJVGV4dCB0b2xlcmFuY2VUZXh0OworCVRhYmxlIHRhYmxlOworCQorCWJvb2xlYW4gcmVJbml0ID0gdHJ1ZTsKKwlBcnJheUxpc3Q8SWRlbnRpZmlhYmxlPiBpZGVudGlmaWFibGVMaXN0ID0gbmV3IEFycmF5TGlzdDxJZGVudGlmaWFibGU+KCk7CisJQXJyYXlMaXN0PEVBdHRyaWJ1dGU+IGF0dHJpYnV0ZUxpc3QgPSBuZXcgQXJyYXlMaXN0PEVBdHRyaWJ1dGU+KCk7CisJQXJyYXlMaXN0PERvdWJsZT5taW5MaXN0ID0gbmV3IEFycmF5TGlzdDxEb3VibGU+KCk7CisJQXJyYXlMaXN0PERvdWJsZT5tYXhMaXN0ID0gbmV3IEFycmF5TGlzdDxEb3VibGU+KCk7CisJQXJyYXlMaXN0PERvdWJsZT5zdGFydExpc3QgPSBuZXcgQXJyYXlMaXN0PERvdWJsZT4oKTsKKwlBcnJheUxpc3Q8RG91YmxlPnN0ZXBMaXN0ID0gbmV3IEFycmF5TGlzdDxEb3VibGU+KCk7CisJaW50IGN1cnJlbnRUYWJsZUluZGV4OworCVNjZW5hcmlvIGJhc2VTY2VuYXJpbzsKKwkKKwlTdHJpbmcgZXJyb3JNZXNzYWdlOworCQorCQorCXB1YmxpYyBBdXRvbWF0aWNFeHBlcmltZW50Q29tcG9zaXRlRWRpdG9yKENvbXBvc2l0ZSBwYXJlbnQsIGludCBzdHlsZSwgZmluYWwgTW9kaWZ5TGlzdGVuZXIgcHJvamVjdFZhbGlkYXRvciwgZmluYWwgSVByb2plY3QgcHJvamVjdCkgeworCQlzdXBlcihwYXJlbnQsIHN0eWxlKTsKKwkJLy8gRmlsbCBpbiB0aGUgcmVzdCBoZXJlCisJCQorCQlmaW5hbCBHcmlkTGF5b3V0IGdyaWRMYXlvdXQgPSBuZXcgR3JpZExheW91dCgpOworCQlncmlkTGF5b3V0Lm51bUNvbHVtbnMgPSAzOworCQlzZXRMYXlvdXQoZ3JpZExheW91dCk7CisJCQorCQlMYWJlbCBtYXhJdGVyc0xhYmVsID0gbmV3IExhYmVsKHRoaXMsIFNXVC5OT05FKTsKKwkJbWF4SXRlcnNMYWJlbC5zZXRUZXh0KE1lc3NhZ2VzLmdldFN0cmluZygiTk0uTUFYSVRFUlMiKSk7CisJCUdyaWREYXRhIGdyaWREYXRhID0gbmV3IEdyaWREYXRhKCk7CisJCWdyaWREYXRhLmhvcml6b250YWxTcGFuID0gMTsKKwkJbWF4SXRlcnNMYWJlbC5zZXRMYXlvdXREYXRhKGdyaWREYXRhKTsKKwkJCisJCW1heEl0ZXJzVGV4dCA9IG5ldyBUZXh0KHRoaXMsIFNXVC5OT05FKTsKKwkJbWF4SXRlcnNUZXh0LnNldFRleHQoIi0xIik7CisJCUdyaWREYXRhIGdyaWREYXRhMiA9IG5ldyBHcmlkRGF0YSgpOworCQlncmlkRGF0YTIuaG9yaXpvbnRhbFNwYW4gPSAyOworCQlncmlkRGF0YTIuZ3JhYkV4Y2Vzc0hvcml6b250YWxTcGFjZSA9IHRydWU7CisJCWdyaWREYXRhMi5ob3Jpem9udGFsQWxpZ25tZW50ID0gU1dULkZJTEw7CisJCW1heEl0ZXJzVGV4dC5zZXRMYXlvdXREYXRhKGdyaWREYXRhMik7CisJCW1heEl0ZXJzVGV4dC5hZGRNb2RpZnlMaXN0ZW5lcihwcm9qZWN0VmFsaWRhdG9yKTsKKwkJCisJCUxhYmVsIHJlZkRhdGFMYWJlbCA9IG5ldyBMYWJlbCh0aGlzLCBTV1QuTk9ORSk7CisJCXJlZkRhdGFMYWJlbC5zZXRUZXh0KE1lc3NhZ2VzLmdldFN0cmluZygiTk0uUkVGRVJFTkNFIikpOworCQlHcmlkRGF0YSBncmlkRGF0YTMgPSBuZXcgR3JpZERhdGEoKTsKKwkJZ3JpZERhdGEzLmhvcml6b250YWxTcGFuID0gMTsKKwkJcmVmRGF0YUxhYmVsLnNldExheW91dERhdGEoZ3JpZERhdGEzKTsKKwkJCisJCXJlZmVyZW5jZURhdGFUZXh0ID0gbmV3IFRleHQodGhpcywgU1dULk5PTkUpOworCQlyZWZlcmVuY2VEYXRhVGV4dC5zZXRUZXh0KCIiKTsKKwkJR3JpZERhdGEgZ3JpZERhdGE0ID0gbmV3IEdyaWREYXRhKCk7CisJCWdyaWREYXRhNC5ob3Jpem9udGFsU3BhbiA9IDE7CisJCWdyaWREYXRhNC5ncmFiRXhjZXNzSG9yaXpvbnRhbFNwYWNlID0gdHJ1ZTsKKwkJZ3JpZERhdGE0Lmhvcml6b250YWxBbGlnbm1lbnQgPSBTV1QuRklMTDsKKwkJcmVmZXJlbmNlRGF0YVRleHQuc2V0TGF5b3V0RGF0YShncmlkRGF0YTQpOworCQlyZWZlcmVuY2VEYXRhVGV4dC5hZGRNb2RpZnlMaXN0ZW5lcihwcm9qZWN0VmFsaWRhdG9yKTsKKwkJCisJCUJ1dHRvbiBwaWNrUmVmZXJlY2VCdXR0b24gPSBuZXcgQnV0dG9uKHRoaXMsIFNXVC5OT05FKTsKKwkJcGlja1JlZmVyZWNlQnV0dG9uLnNldFRleHQoTWVzc2FnZXMuZ2V0U3RyaW5nKCJOTS5SRUZQSUNLRk9MREVSIikpOworCQlHcmlkRGF0YSBncmlkRGF0YTUgPSBuZXcgR3JpZERhdGEoKTsKKwkJZ3JpZERhdGE1Lmhvcml6b250YWxTcGFuID0gMTsKKwkJcGlja1JlZmVyZWNlQnV0dG9uLnNldExheW91dERhdGEoZ3JpZERhdGE1KTsKKwkJZmluYWwgU2hlbGwgc2hlbGwgPSB0aGlzLmdldFNoZWxsKCk7CisJCXBpY2tSZWZlcmVjZUJ1dHRvbi5hZGRTZWxlY3Rpb25MaXN0ZW5lcihuZXcgU2VsZWN0aW9uTGlzdGVuZXIoKSB7CisKKwkJCXB1YmxpYyB2b2lkIHdpZGdldFNlbGVjdGVkKFNlbGVjdGlvbkV2ZW50IGUpIHsKKwkJCQlmaW5hbCBEaXJlY3RvcnlEaWFsb2cgZGQgPSBuZXcgRGlyZWN0b3J5RGlhbG9nKHNoZWxsLAorCQkJCQkJU1dULk9QRU4gfCBTV1QuU0lOR0xFKTsKKwkJCQlkZC5zZXRUZXh0KE1lc3NhZ2VzLmdldFN0cmluZygiTk0uUkVGRk9MREVSVElUTEUiKSk7IC8vJE5PTi1OTFMtMSQKKwkJCQkKKwkJCQlTdHJpbmcgc2VsZWN0ZWQgPSBkZC5vcGVuKCk7CisJCQkJaWYoc2VsZWN0ZWQgIT0gbnVsbCkgcmVmZXJlbmNlRGF0YVRleHQuc2V0VGV4dChzZWxlY3RlZCk7CisJCQl9CisKKwkJCXB1YmxpYyB2b2lkIHdpZGdldERlZmF1bHRTZWxlY3RlZChTZWxlY3Rpb25FdmVudCBlKSB7CisJCQl9CisJCX0pOworCQkKKwkJTGFiZWwgYmFzZVNjZW5hcmlvTGFiZWwgPSBuZXcgTGFiZWwodGhpcywgU1dULk5PTkUpOworCQliYXNlU2NlbmFyaW9MYWJlbC5zZXRUZXh0KE1lc3NhZ2VzLmdldFN0cmluZygiTk0uQkFTRVNDRU5BUklPIikpOworCQlHcmlkRGF0YSBncmlkRGF0YTYgPSBuZXcgR3JpZERhdGEoKTsKKwkJZ3JpZERhdGE2Lmhvcml6b250YWxTcGFuID0gMTsKKwkJYmFzZVNjZW5hcmlvTGFiZWwuc2V0TGF5b3V0RGF0YShncmlkRGF0YTYpOworCQkKKwkJYmFzZVNjZW5hcmlvVGV4dCA9IG5ldyBUZXh0KHRoaXMsIFNXVC5OT05FKTsKKwkJYmFzZVNjZW5hcmlvVGV4dC5zZXRUZXh0KCIiKTsKKwkJR3JpZERhdGEgZ3JpZERhdGE3ID0gbmV3IEdyaWREYXRhKCk7CisJCWdyaWREYXRhNy5ob3Jpem9udGFsU3BhbiA9IDE7CisJCWdyaWREYXRhNy5ncmFiRXhjZXNzSG9yaXpvbnRhbFNwYWNlID0gdHJ1ZTsKKwkJZ3JpZERhdGE3Lmhvcml6b250YWxBbGlnbm1lbnQgPSBTV1QuRklMTDsKKwkJYmFzZVNjZW5hcmlvVGV4dC5zZXRMYXlvdXREYXRhKGdyaWREYXRhNyk7CisJCWJhc2VTY2VuYXJpb1RleHQuc2V0RWRpdGFibGUoZmFsc2UpOworCQliYXNlU2NlbmFyaW9UZXh0LmFkZE1vZGlmeUxpc3RlbmVyKHByb2plY3RWYWxpZGF0b3IpOworCQkKKwkJQnV0dG9uIHBpY2tTY2VuYXJpb0J1dHRvbiA9IG5ldyBCdXR0b24odGhpcywgU1dULk5PTkUpOworCQlwaWNrU2NlbmFyaW9CdXR0b24uc2V0VGV4dChNZXNzYWdlcy5nZXRTdHJpbmcoIk5NLlNFTEVDVFNDRU5BUklPIikpOworCQlHcmlkRGF0YSBncmlkRGF0YTggPSBuZXcgR3JpZERhdGEoKTsKKwkJZ3JpZERhdGE4Lmhvcml6b250YWxTcGFuID0gMTsKKwkJcGlja1NjZW5hcmlvQnV0dG9uLnNldExheW91dERhdGEoZ3JpZERhdGE4KTsKKwkJcGlja1NjZW5hcmlvQnV0dG9uLmFkZFNlbGVjdGlvbkxpc3RlbmVyKG5ldyBTZWxlY3Rpb25MaXN0ZW5lcigpIHsKKwkJCQorCQkJcHVibGljIHZvaWQgd2lkZ2V0U2VsZWN0ZWQoU2VsZWN0aW9uRXZlbnQgZSkgeworCQkJCQorCQkJCUlkZW50aWZpYWJsZVBpY2tlckRpYWxvZyBwcERpYWxvZyA9IG5ldyBJZGVudGlmaWFibGVQaWNrZXJEaWFsb2coQXV0b21hdGljRXhwZXJpbWVudENvbXBvc2l0ZUVkaXRvci50aGlzLmdldFNoZWxsKCksIFNXVC5OT05FLCBNZXNzYWdlcy5nZXRTdHJpbmcoIk5NLlBJQ0tTQ0VOQVJJTyIpLCBwcm9qZWN0LCBTY2VuYXJpb0ltcGwuY2xhc3MpOworCQkJCU9iamVjdCAgcmV0ID0gcHBEaWFsb2cub3BlbigpOworCQkJCWlmKHJldCAhPSBudWxsKSB7CisJCQkJCWJhc2VTY2VuYXJpbyA9IChTY2VuYXJpbylyZXQ7CisJCQkJCWJhc2VTY2VuYXJpb1RleHQuc2V0VGV4dChiYXNlU2NlbmFyaW8uZ2V0VVJJKCkudG9TdHJpbmcoKSk7CisJCQkJfQorCQkJfQorCQkJCisJCQlwdWJsaWMgdm9pZCB3aWRnZXREZWZhdWx0U2VsZWN0ZWQoU2VsZWN0aW9uRXZlbnQgZSkgeworCQkJCS8vIFRPRE8gQXV0by1nZW5lcmF0ZWQgbWV0aG9kIHN0dWIKKwkJCQkKKwkJCX0KKwkJfSk7CisJCQorCQkKKwkJTGFiZWwgZXJyb3JGdW5jdGlvbkxhYmVsID0gbmV3IExhYmVsKHRoaXMsIFNXVC5OT05FKTsKKwkJZXJyb3JGdW5jdGlvbkxhYmVsLnNldFRleHQoTWVzc2FnZXMuZ2V0U3RyaW5nKCJOTS5FUlJPUkZVTkNUSU9OIikpOworCQlHcmlkRGF0YSBncmlkRGF0YTkgPSBuZXcgR3JpZERhdGEoKTsKKwkJZ3JpZERhdGE5Lmhvcml6b250YWxTcGFuID0gMTsKKwkJYmFzZVNjZW5hcmlvTGFiZWwuc2V0TGF5b3V0RGF0YShncmlkRGF0YTkpOworCQorCQllcnJvckZ1bmN0aW9uQ29tYm8gPSBuZXcgQ29tYm8odGhpcywgU1dULk5PTkUpOworCQlpbml0aWFsaXplRXJyb3JGdW5jdGlvbkNvbWJvKCk7CisJCUdyaWREYXRhIGdyaWREYXRhMTAgPSBuZXcgR3JpZERhdGEoKTsKKwkJZ3JpZERhdGExMC5ob3Jpem9udGFsU3BhbiA9IDI7CisJCWdyaWREYXRhMTAuZ3JhYkV4Y2Vzc0hvcml6b250YWxTcGFjZSA9IHRydWU7CisJCWdyaWREYXRhMTAuaG9yaXpvbnRhbEFsaWdubWVudCA9IFNXVC5GSUxMOworCQllcnJvckZ1bmN0aW9uQ29tYm8uc2V0TGF5b3V0RGF0YShncmlkRGF0YTEwKTsKKwkJCisJCUxhYmVsIHJlSW5pdExhYmVsID0gbmV3IExhYmVsKHRoaXMsIFNXVC5OT05FKTsKKwkJcmVJbml0TGFiZWwuc2V0VGV4dChNZXNzYWdlcy5nZXRTdHJpbmcoIk5NLlJFSU5JVExBQkVMIikpOworCQlHcmlkRGF0YSBncmlkRGF0YVJJID0gbmV3IEdyaWREYXRhKCk7CisJCWdyaWREYXRhUkkuaG9yaXpvbnRhbFNwYW4gPSAxOworCQlyZUluaXRMYWJlbC5zZXRMYXlvdXREYXRhKGdyaWREYXRhUkkpOworCQkKKwkJQ29tcG9zaXRlIHJhZGlvQ29tcG9zaXRlID0gbmV3IENvbXBvc2l0ZSh0aGlzLCBTV1QuQk9SREVSKTsKKwkgICAgRmlsbExheW91dCBmaWxsTGF5b3V0ID0gbmV3IEZpbGxMYXlvdXQoKTsKKwkgICAgZmlsbExheW91dC50eXBlID0gU1dULkhPUklaT05UQUw7CisJICAgIHJhZGlvQ29tcG9zaXRlLnNldExheW91dChmaWxsTGF5b3V0KTsKKwkgICAgCisJICAgIGZpbmFsIEJ1dHRvbiBmYWxzZUJ1dHRvbiA9IG5ldyBCdXR0b24ocmFkaW9Db21wb3NpdGUsIFNXVC5SQURJTyk7CisJICAgIGZhbHNlQnV0dG9uLnNldFRleHQoTWVzc2FnZXMuZ2V0U3RyaW5nKCJOTS5OTyIpKTsvLyROT04tTkxTLTEkCisJICAgIAorCSAgICBCdXR0b24gdHJ1ZUJ1dHRvbiA9IG5ldyBCdXR0b24ocmFkaW9Db21wb3NpdGUsIFNXVC5SQURJTyk7CisJICAgIHRydWVCdXR0b24uc2V0VGV4dChNZXNzYWdlcy5nZXRTdHJpbmcoIk5NLllFUyIpKTsvLyROT04tTkxTLTEkCisJICAgIAkgICAgCisJICAgCXRydWVCdXR0b24uc2V0U2VsZWN0aW9uKHRydWUpOworCSAgICBmYWxzZUJ1dHRvbi5zZXRTZWxlY3Rpb24oZmFsc2UpOworCSAgICAKKwkgICAgTGlzdGVuZXIgbGlzdGVuZXIgPSBuZXcgTGlzdGVuZXIoKSB7CisJICAgICAgICBwdWJsaWMgdm9pZCBoYW5kbGVFdmVudChFdmVudCBldmVudCkgeworCSAgICAgICAgICBpZiAoZXZlbnQud2lkZ2V0ID09IGZhbHNlQnV0dG9uKSB7CisJICAgICAgICAJcmVJbml0ID0gIWZhbHNlQnV0dG9uLmdldFNlbGVjdGlvbigpOworCSAgICAgICAgICB9CisJICAgICAgICB9CisJICAgICAgfTsKKwkgICAgLy8gdGhlc2UgYXJlIHJhZGlvIGJ1dHRvbnMgc28gd2Ugb25seSBuZWVkIHRvIGFkZCB0aGUgbGlzdGVuZXIgdG8gb25lIG9mIHRoZW0uCisJICAgIGZhbHNlQnV0dG9uLmFkZExpc3RlbmVyKFNXVC5TZWxlY3Rpb24sIGxpc3RlbmVyKTsKKwkgICAgZmluYWwgR3JpZERhdGEgY0dEID0gbmV3IEdyaWREYXRhKCk7CisJICAgIGNHRC5ncmFiRXhjZXNzSG9yaXpvbnRhbFNwYWNlID0gdHJ1ZTsKKwkJY0dELmhvcml6b250YWxBbGlnbm1lbnQgPSBTV1QuRklMTDsKKwkJY0dELmhvcml6b250YWxTcGFuID0gMjsKKwkJcmFkaW9Db21wb3NpdGUuc2V0TGF5b3V0RGF0YShjR0QpOworCQkKKwkJTGFiZWwgdG9sZXJhbmNlVGFiZWwgPSBuZXcgTGFiZWwodGhpcywgU1dULk5PTkUpOworCQl0b2xlcmFuY2VUYWJlbC5zZXRUZXh0KE1lc3NhZ2VzLmdldFN0cmluZygiTk0uVE9MRVJBTkNFIikpOworCQlHcmlkRGF0YSB0b2xHRCA9IG5ldyBHcmlkRGF0YSgpOworCQl0b2xHRC5ob3Jpem9udGFsU3BhbiA9IDE7CisJCXRvbGVyYW5jZVRhYmVsLnNldExheW91dERhdGEodG9sR0QpOworCQkKKwkJdG9sZXJhbmNlVGV4dCA9IG5ldyBUZXh0KHRoaXMsIFNXVC5OT05FKTsKKwkJdG9sZXJhbmNlVGV4dC5zZXRUZXh0KCIxRS05Iik7CisJCUdyaWREYXRhIHRvbDJHRCA9IG5ldyBHcmlkRGF0YSgpOworCQl0b2wyR0QuaG9yaXpvbnRhbFNwYW4gPSAyOworCQl0b2wyR0QuZ3JhYkV4Y2Vzc0hvcml6b250YWxTcGFjZSA9IHRydWU7CisJCXRvbDJHRC5ob3Jpem9udGFsQWxpZ25tZW50ID0gU1dULkZJTEw7CisJCXRvbGVyYW5jZVRleHQuc2V0TGF5b3V0RGF0YSh0b2wyR0QpOworCQkKKwkJdGFibGUgPSBuZXcgVGFibGUodGhpcywgU1dULkJPUkRFUiB8IFNXVC5TSU5HTEUpOworCQlHcmlkRGF0YSBncmlkRGF0YTExID0gbmV3IEdyaWREYXRhKCk7CisJCWdyaWREYXRhMTEuaG9yaXpvbnRhbFNwYW4gPSAxOworCQlncmlkRGF0YTExLmdyYWJFeGNlc3NIb3Jpem9udGFsU3BhY2UgPSB0cnVlOworCQlncmlkRGF0YTExLmhvcml6b250YWxBbGlnbm1lbnQgPSBTV1QuRklMTDsKKwkJZ3JpZERhdGExMS5ncmFiRXhjZXNzVmVydGljYWxTcGFjZSA9IGZhbHNlOworCQl0YWJsZS5zZXRMYXlvdXREYXRhKGdyaWREYXRhMTEpOwkKKwkJCisJCUNvbXBvc2l0ZSBzdGFydFN0ZXBDb21wID0gbmV3IENvbXBvc2l0ZSh0aGlzLCBTV1QuTk9ORSk7CisJCUdyaWRMYXlvdXQgc3RhcnRMYXlvdXQgPSBuZXcgR3JpZExheW91dCgpOworCQlzdGFydExheW91dC5udW1Db2x1bW5zID0gMjsKKwkJc3RhcnRTdGVwQ29tcC5zZXRMYXlvdXQoc3RhcnRMYXlvdXQpOworCQkKKwkJTGFiZWwgc3RhcnRMYWJlbCA9IG5ldyBMYWJlbChzdGFydFN0ZXBDb21wLCBTV1QuTk9ORSk7CisJCXN0YXJ0TGFiZWwuc2V0VGV4dChNZXNzYWdlcy5nZXRTdHJpbmcoIk5NLklOSVRJQUwiKSk7CisJCUdyaWREYXRhIGdyaWREYXRhMTIgPSBuZXcgR3JpZERhdGEoKTsKKwkJZ3JpZERhdGExMi5ob3Jpem9udGFsU3Bhbj0xOworCQlzdGFydExhYmVsLnNldExheW91dERhdGEoZ3JpZERhdGExMik7CisJCUxhYmVsIHN0ZXBMYWJlbCA9IG5ldyBMYWJlbChzdGFydFN0ZXBDb21wLCBTV1QuTk9ORSk7CisJCXN0ZXBMYWJlbC5zZXRUZXh0KE1lc3NhZ2VzLmdldFN0cmluZygiTk0uU1RFUCIpKTsKKwkJR3JpZERhdGEgZ3JpZERhdGExMyA9IG5ldyBHcmlkRGF0YSgpOworCQlncmlkRGF0YTEzLmhvcml6b250YWxTcGFuPTE7CisJCXN0ZXBMYWJlbC5zZXRMYXlvdXREYXRhKGdyaWREYXRhMTMpOworCQlzdGFydFZhbFRleHQgPSBuZXcgVGV4dChzdGFydFN0ZXBDb21wLCBTV1QuTk9ORSk7CisJCUdyaWREYXRhIGdyaWREYXRhMTQgPSBuZXcgR3JpZERhdGEoKTsKKwkJZ3JpZERhdGExMy5ob3Jpem9udGFsU3BhbiA9IDE7CisJCXN0YXJ0VmFsVGV4dC5zZXRMYXlvdXREYXRhKGdyaWREYXRhMTQpOworCQlzdGFydFZhbFRleHQuYWRkTW9kaWZ5TGlzdGVuZXIocHJvamVjdFZhbGlkYXRvcik7CisJCXN0YXJ0VmFsVGV4dC5hZGRNb2RpZnlMaXN0ZW5lcihuZXcgTW9kaWZ5TGlzdGVuZXIoKSB7CisJCQlwdWJsaWMgdm9pZCBtb2RpZnlUZXh0KE1vZGlmeUV2ZW50IGUpIHsKKwkJCQlpZihjdXJyZW50VGFibGVJbmRleCA9PSAtMSkgcmV0dXJuOworCQkJCVN0cmluZyB0eHQgPSBzdGFydFZhbFRleHQuZ2V0VGV4dCgpOworCQkJCWRvdWJsZSBkID0gMC4wOworCQkJCXRyeSB7IAorCQkJCQlkID0gRG91YmxlLnBhcnNlRG91YmxlKHR4dCk7CisJCQkJfSBjYXRjaChOdW1iZXJGb3JtYXRFeGNlcHRpb24gbmZlKSB7CisJCQkJCS8vIElnbm9yZSwgdGhlIHZhbGlkYXRvciB3aWxsIHJlcG9ydCB0aGUgZXJyb3IKKwkJCQl9CisJCQkJc3RhcnRMaXN0LnNldChjdXJyZW50VGFibGVJbmRleCwgZCk7CisJCQl9CisJCX0pOworCQlzdGVwVmFsVGV4dCA9IG5ldyBUZXh0KHN0YXJ0U3RlcENvbXAsIFNXVC5OT05FKTsKKwkJR3JpZERhdGEgZ3JpZERhdGExNSA9IG5ldyBHcmlkRGF0YSgpOworCQlncmlkRGF0YTE1Lmhvcml6b250YWxTcGFuID0gMTsKKwkJc3RlcFZhbFRleHQuc2V0TGF5b3V0RGF0YShncmlkRGF0YTE1KTsKKwkJc3RlcFZhbFRleHQuYWRkTW9kaWZ5TGlzdGVuZXIocHJvamVjdFZhbGlkYXRvcik7CisJCXN0ZXBWYWxUZXh0LmFkZE1vZGlmeUxpc3RlbmVyKG5ldyBNb2RpZnlMaXN0ZW5lcigpIHsKKworCQkJcHVibGljIHZvaWQgbW9kaWZ5VGV4dChNb2RpZnlFdmVudCBlKSB7CisJCQkJaWYoY3VycmVudFRhYmxlSW5kZXggPT0gLTEpIHJldHVybjsKKwkJCQlTdHJpbmcgdHh0ID0gc3RlcFZhbFRleHQuZ2V0VGV4dCgpOworCQkJCWRvdWJsZSBkID0gMC4wOworCQkJCXRyeSB7IAorCQkJCQlkID0gRG91YmxlLnBhcnNlRG91YmxlKHR4dCk7CisJCQkJfSBjYXRjaChOdW1iZXJGb3JtYXRFeGNlcHRpb24gbmZlKSB7CisJCQkJCS8vIElnbm9yZSwgdGhlIHZhbGlkYXRvciB3aWxsIHJlcG9ydCB0aGUgZXJyb3IKKwkJCQl9CisJCQkJc3RlcExpc3Quc2V0KGN1cnJlbnRUYWJsZUluZGV4LCBkKTsKKwkJCX0KKwkJfSk7CisJCQorCQlDb21wb3NpdGUgbWluTWF4Q29tcCA9IG5ldyBDb21wb3NpdGUodGhpcywgU1dULk5PTkUpOworCQlHcmlkTGF5b3V0IG1pbk1heExheW91dCA9IG5ldyBHcmlkTGF5b3V0KCk7CisJCW1pbk1heExheW91dC5udW1Db2x1bW5zID0gMjsKKwkJbWluTWF4Q29tcC5zZXRMYXlvdXQoc3RhcnRMYXlvdXQpOworCisJCUxhYmVsIG1pbkxhYmVsID0gbmV3IExhYmVsKG1pbk1heENvbXAsIFNXVC5OT05FKTsKKwkJbWluTGFiZWwuc2V0VGV4dChNZXNzYWdlcy5nZXRTdHJpbmcoIk5NLk1JTiIpKTsKKwkJR3JpZERhdGEgZ3JpZERhdGExNiA9IG5ldyBHcmlkRGF0YSgpOworCQlncmlkRGF0YTE2Lmhvcml6b250YWxTcGFuPTE7CisJCW1pbkxhYmVsLnNldExheW91dERhdGEoZ3JpZERhdGExMik7CisJCUxhYmVsIG1heExhYmVsID0gbmV3IExhYmVsKG1pbk1heENvbXAsIFNXVC5OT05FKTsKKwkJbWF4TGFiZWwuc2V0VGV4dChNZXNzYWdlcy5nZXRTdHJpbmcoIk5NLk1BWCIpKTsKKwkJR3JpZERhdGEgZ3JpZERhdGExNyA9IG5ldyBHcmlkRGF0YSgpOworCQlncmlkRGF0YTE3Lmhvcml6b250YWxTcGFuPTE7CisJCW1heExhYmVsLnNldExheW91dERhdGEoZ3JpZERhdGExNyk7CisJCW1pblZhbFRleHQgPSBuZXcgVGV4dChtaW5NYXhDb21wLCBTV1QuTk9ORSk7CisJCUdyaWREYXRhIGdyaWREYXRhMTggPSBuZXcgR3JpZERhdGEoKTsKKwkJZ3JpZERhdGExOC5ob3Jpem9udGFsU3BhbiA9IDE7CisJCW1pblZhbFRleHQuc2V0TGF5b3V0RGF0YShncmlkRGF0YTE4KTsKKwkJbWluVmFsVGV4dC5hZGRNb2RpZnlMaXN0ZW5lcihwcm9qZWN0VmFsaWRhdG9yKTsKKwkJbWluVmFsVGV4dC5hZGRNb2RpZnlMaXN0ZW5lcihuZXcgTW9kaWZ5TGlzdGVuZXIoKSB7CisJCQlwdWJsaWMgdm9pZCBtb2RpZnlUZXh0KE1vZGlmeUV2ZW50IGUpIHsKKwkJCQlpZihjdXJyZW50VGFibGVJbmRleCA9PSAtMSkgcmV0dXJuOworCQkJCVN0cmluZyB0eHQgPSBtaW5WYWxUZXh0LmdldFRleHQoKTsKKwkJCQlkb3VibGUgZCA9IDAuMDsKKwkJCQl0cnkgeyAKKwkJCQkJZCA9IERvdWJsZS5wYXJzZURvdWJsZSh0eHQpOworCQkJCX0gY2F0Y2goTnVtYmVyRm9ybWF0RXhjZXB0aW9uIG5mZSkgeworCQkJCQkvLyBJZ25vcmUsIHRoZSB2YWxpZGF0b3Igd2lsbCByZXBvcnQgdGhlIGVycm9yCisJCQkJfQorCQkJCW1pbkxpc3Quc2V0KGN1cnJlbnRUYWJsZUluZGV4LCBkKTsKKwkJCX0KKwkJfSk7CisJCW1heFZhbFRleHQgPSBuZXcgVGV4dChtaW5NYXhDb21wLCBTV1QuTk9ORSk7CisJCUdyaWREYXRhIGdyaWREYXRhMTkgPSBuZXcgR3JpZERhdGEoKTsKKwkJZ3JpZERhdGExOS5ob3Jpem9udGFsU3BhbiA9IDE7CisJCW1heFZhbFRleHQuc2V0TGF5b3V0RGF0YShncmlkRGF0YTE5KTsKKwkJbWF4VmFsVGV4dC5hZGRNb2RpZnlMaXN0ZW5lcihwcm9qZWN0VmFsaWRhdG9yKTsKKwkJbWF4VmFsVGV4dC5hZGRNb2RpZnlMaXN0ZW5lcihuZXcgTW9kaWZ5TGlzdGVuZXIoKSB7CisJCQlwdWJsaWMgdm9pZCBtb2RpZnlUZXh0KE1vZGlmeUV2ZW50IGUpIHsKKwkJCQlpZihjdXJyZW50VGFibGVJbmRleCA9PSAtMSkgcmV0dXJuOworCQkJCVN0cmluZyB0eHQgPSBtYXhWYWxUZXh0LmdldFRleHQoKTsKKwkJCQlkb3VibGUgZCA9IDAuMDsKKwkJCQl0cnkgeyAKKwkJCQkJZCA9IERvdWJsZS5wYXJzZURvdWJsZSh0eHQpOworCQkJCX0gY2F0Y2goTnVtYmVyRm9ybWF0RXhjZXB0aW9uIG5mZSkgeworCQkJCQkvLyBJZ25vcmUsIHRoZSB2YWxpZGF0b3Igd2lsbCByZXBvcnQgdGhlIGVycm9yCisJCQkJfQorCQkJCW1heExpc3Quc2V0KGN1cnJlbnRUYWJsZUluZGV4LCBkKTsKKwkJCX0KKwkJfSk7CisJCW1pblZhbFRleHQuc2V0RW5hYmxlZChmYWxzZSk7CisJCW1heFZhbFRleHQuc2V0RW5hYmxlZChmYWxzZSk7CisJCXN0YXJ0VmFsVGV4dC5zZXRFbmFibGVkKGZhbHNlKTsKKwkJc3RlcFZhbFRleHQuc2V0RW5hYmxlZChmYWxzZSk7CisJCQorCQkKKworCQlDb21wb3NpdGUgcGx1c21pbnVzYnV0dG9ucyA9IG5ldyBDb21wb3NpdGUodGhpcywgU1dULk5PTkUpOworCQlHcmlkTGF5b3V0IGdyaWRMYXlvdXQyID0gbmV3IEdyaWRMYXlvdXQoKTsKKwkJZ3JpZExheW91dDIubnVtQ29sdW1ucyA9IDI7CisJCXBsdXNtaW51c2J1dHRvbnMuc2V0TGF5b3V0KGdyaWRMYXlvdXQyKTsKKwkJCisJCUdyaWREYXRhIGdyaWREYXRhMjAgPSBuZXcgR3JpZERhdGEoKTsKKwkJZ3JpZERhdGEyMC5ob3Jpem9udGFsU3BhbiA9IDE7CisJCWdyaWREYXRhMjAuZ3JhYkV4Y2Vzc0hvcml6b250YWxTcGFjZSA9IHRydWU7CisJCWdyaWREYXRhMjAuaG9yaXpvbnRhbEFsaWdubWVudCA9IFNXVC5GSUxMOworCQlwbHVzbWludXNidXR0b25zLnNldExheW91dERhdGEoZ3JpZERhdGEyMCk7CisJCQorCSAgICBCdXR0b24gcGx1c0J1dHRvbiA9IG5ldyBCdXR0b24ocGx1c21pbnVzYnV0dG9ucywgU1dULk5PTkUpOworCSAgICBwbHVzQnV0dG9uLnNldFRleHQoTWVzc2FnZXMuZ2V0U3RyaW5nKCJOTS5QTFVTIikpOworCSAgICBHcmlkRGF0YSBncmlkRGF0YTIxID0gbmV3IEdyaWREYXRhKCk7CisJCWdyaWREYXRhMjEuaG9yaXpvbnRhbFNwYW4gPSAxOworCQlwbHVzQnV0dG9uLnNldExheW91dERhdGEoZ3JpZERhdGEyMSk7CisJCQorCQlmaW5hbCBCdXR0b24gbWludXNCdXR0b24gPSBuZXcgQnV0dG9uKHBsdXNtaW51c2J1dHRvbnMsIFNXVC5OT05FKTsKKwkJbWludXNCdXR0b24uc2V0VGV4dChNZXNzYWdlcy5nZXRTdHJpbmcoIk5NLk1JTlVTIikpOworCQlHcmlkRGF0YSBncmlkRGF0YTIyID0gbmV3IEdyaWREYXRhKCk7CisJCWdyaWREYXRhMjEuaG9yaXpvbnRhbFNwYW4gPSAxOworCQltaW51c0J1dHRvbi5zZXRMYXlvdXREYXRhKGdyaWREYXRhMjIpOworCQltaW51c0J1dHRvbi5zZXRFbmFibGVkKGZhbHNlKTsKKwkJCQorCQl0YWJsZS5hZGRTZWxlY3Rpb25MaXN0ZW5lcihuZXcgU2VsZWN0aW9uTGlzdGVuZXIoKSB7CisJCQkKKwkJCXB1YmxpYyB2b2lkIHdpZGdldFNlbGVjdGVkKFNlbGVjdGlvbkV2ZW50IGUpIHsKKwkJCQljdXJyZW50VGFibGVJbmRleCA9IHRhYmxlLmdldFNlbGVjdGlvbkluZGV4KCk7CisJCQkJaWYoY3VycmVudFRhYmxlSW5kZXggPiAtMSkgeworCQkJCQltaW5WYWxUZXh0LnNldFRleHQobWluTGlzdC5nZXQoY3VycmVudFRhYmxlSW5kZXgpKyIiKTsKKwkJCQkJbWF4VmFsVGV4dC5zZXRUZXh0KG1heExpc3QuZ2V0KGN1cnJlbnRUYWJsZUluZGV4KSsiIik7CisJCQkJCXN0YXJ0VmFsVGV4dC5zZXRUZXh0KHN0YXJ0TGlzdC5nZXQoY3VycmVudFRhYmxlSW5kZXgpKyIiKTsKKwkJCQkJc3RlcFZhbFRleHQuc2V0VGV4dChzdGVwTGlzdC5nZXQoY3VycmVudFRhYmxlSW5kZXgpKyIiKTsKKwkJCQkJbWluVmFsVGV4dC5zZXRFbmFibGVkKHRydWUpOworCQkJCQltYXhWYWxUZXh0LnNldEVuYWJsZWQodHJ1ZSk7CisJCQkJCXN0YXJ0VmFsVGV4dC5zZXRFbmFibGVkKHRydWUpOworCQkJCQlzdGVwVmFsVGV4dC5zZXRFbmFibGVkKHRydWUpOworCQkJCQltaW51c0J1dHRvbi5zZXRFbmFibGVkKHRydWUpOworCQkJCX0gZWxzZSB7CisJCQkJCW1pblZhbFRleHQuc2V0VGV4dCgiIik7CisJCQkJCW1heFZhbFRleHQuc2V0VGV4dCgiIik7CisJCQkJCXN0YXJ0VmFsVGV4dC5zZXRUZXh0KCIiKTsKKwkJCQkJc3RlcFZhbFRleHQuc2V0VGV4dCgiIik7CisJCQkJCQorCQkJCQltaW5WYWxUZXh0LnNldEVuYWJsZWQoZmFsc2UpOworCQkJCQltYXhWYWxUZXh0LnNldEVuYWJsZWQoZmFsc2UpOworCQkJCQlzdGFydFZhbFRleHQuc2V0RW5hYmxlZChmYWxzZSk7CisJCQkJCXN0ZXBWYWxUZXh0LnNldEVuYWJsZWQoZmFsc2UpOworCQkJCX0KKwkJCX0KKwkJCQorCQkJcHVibGljIHZvaWQgd2lkZ2V0RGVmYXVsdFNlbGVjdGVkKFNlbGVjdGlvbkV2ZW50IGUpIHsKKwkJCQkvLyBUT0RPIEF1dG8tZ2VuZXJhdGVkIG1ldGhvZCBzdHViCisJCQkJCisJCQl9CisJCX0pOworCQkKKworCQlwbHVzQnV0dG9uLmFkZFNlbGVjdGlvbkxpc3RlbmVyKG5ldyBTZWxlY3Rpb25MaXN0ZW5lcigpIHsKKwkJCQorCQkJcHVibGljIHZvaWQgd2lkZ2V0U2VsZWN0ZWQoU2VsZWN0aW9uRXZlbnQgZSkgeworCQkJCQorCQkJCVBhcmFtZXRlclBpY2tlckRpYWxvZyBwcERpYWxvZyA9IG5ldyBQYXJhbWV0ZXJQaWNrZXJEaWFsb2coQXV0b21hdGljRXhwZXJpbWVudENvbXBvc2l0ZUVkaXRvci50aGlzLmdldFNoZWxsKCksIFNXVC5OT05FLCBNZXNzYWdlcy5nZXRTdHJpbmcoIk5NLlBJQ0tQQVJBTSIpLCBwcm9qZWN0LCBJZGVudGlmaWFibGVJbXBsLmNsYXNzKTsKKwkJCQlPYmplY3QgW10gcmV0ID0gcHBEaWFsb2cub3BlbigpOworCQkJCWlmKHJldCAhPSBudWxsKSB7CisJCQkJCUlkZW50aWZpYWJsZSBpZCA9IChJZGVudGlmaWFibGUpcmV0WzBdOworCQkJCQlFQXR0cmlidXRlIGF0dHIgPSAoRUF0dHJpYnV0ZSlyZXRbMV07CisJCQkJCWlkZW50aWZpYWJsZUxpc3QuYWRkKGlkKTsKKwkJCQkJYXR0cmlidXRlTGlzdC5hZGQoYXR0cik7CisJCQkJCVRhYmxlSXRlbSBuZXdSb3c9IG5ldyBUYWJsZUl0ZW0odGFibGUsIFNXVC5OT05FKTsKKwkJCQkJbmV3Um93LnNldFRleHQoYXR0ci5nZXROYW1lKCkrIiAoIitpZC5nZXRVUkkoKS5sYXN0U2VnbWVudCgpKyIpIik7CisJCQkJCW1pbkxpc3QuYWRkKDAuMCk7CisJCQkJCW1heExpc3QuYWRkKDEuMCk7CisJCQkJCXN0YXJ0TGlzdC5hZGQoMC41KTsKKwkJCQkJc3RlcExpc3QuYWRkKDAuMSk7CisJCQkJCXByb2plY3RWYWxpZGF0b3IubW9kaWZ5VGV4dChudWxsKTsvLyAKKworCQkJCX0KKwkJCQorCQkJCQorCQkJCQorCQkJfQorCQkJCisJCQlwdWJsaWMgdm9pZCB3aWRnZXREZWZhdWx0U2VsZWN0ZWQoU2VsZWN0aW9uRXZlbnQgZSkgeworCQkJCS8vIFRPRE8gQXV0by1nZW5lcmF0ZWQgbWV0aG9kIHN0dWIKKwkJCQkKKwkJCX0KKwkJfSk7CisJCQorCQltaW51c0J1dHRvbi5hZGRTZWxlY3Rpb25MaXN0ZW5lcihuZXcgU2VsZWN0aW9uTGlzdGVuZXIoKSB7CisJCQkKKwkJCXB1YmxpYyB2b2lkIHdpZGdldFNlbGVjdGVkKFNlbGVjdGlvbkV2ZW50IGUpIHsKKwkJCQkKKwkJCQlpZihjdXJyZW50VGFibGVJbmRleCA+IC0xKSB7CisJCQkJCXRhYmxlLnJlbW92ZShjdXJyZW50VGFibGVJbmRleCk7CisJCQkJCW1pbkxpc3QucmVtb3ZlKGN1cnJlbnRUYWJsZUluZGV4KTsKKwkJCQkJbWF4TGlzdC5yZW1vdmUoY3VycmVudFRhYmxlSW5kZXgpOworCQkJCQlzdGFydExpc3QucmVtb3ZlKGN1cnJlbnRUYWJsZUluZGV4KTsKKwkJCQkJc3RlcExpc3QucmVtb3ZlKGN1cnJlbnRUYWJsZUluZGV4KTsKKworCQkJCQljdXJyZW50VGFibGVJbmRleCA9IHRhYmxlLmdldFNlbGVjdGlvbkluZGV4KCk7CisKKwkJCQkJbWluVmFsVGV4dC5zZXRUZXh0KCIiKTsKKwkJCQkJbWF4VmFsVGV4dC5zZXRUZXh0KCIiKTsKKwkJCQkJc3RhcnRWYWxUZXh0LnNldFRleHQoIiIpOworCQkJCQlzdGVwVmFsVGV4dC5zZXRUZXh0KCIiKTsKKwkJCQkJaWYobWluTGlzdC5zaXplKCkgPT0gMCkgeworCQkJCQkJbWludXNCdXR0b24uc2V0RW5hYmxlZChmYWxzZSk7CisJCQkJCQltaW5WYWxUZXh0LnNldEVuYWJsZWQoZmFsc2UpOworCQkJCQkJbWF4VmFsVGV4dC5zZXRFbmFibGVkKGZhbHNlKTsKKwkJCQkJCXN0YXJ0VmFsVGV4dC5zZXRFbmFibGVkKGZhbHNlKTsKKwkJCQkJCXN0ZXBWYWxUZXh0LnNldEVuYWJsZWQoZmFsc2UpOworCQkJCQl9CisJCQkJfQorCQkJfQorCQkJCisJCQlwdWJsaWMgdm9pZCB3aWRnZXREZWZhdWx0U2VsZWN0ZWQoU2VsZWN0aW9uRXZlbnQgZSkgeworCQkJCS8vIFRPRE8gQXV0by1nZW5lcmF0ZWQgbWV0aG9kIHN0dWIKKwkJCQkKKwkJCX0KKwkJfSk7CisJCQorCX0KKworCXByaXZhdGUgRXJyb3JGdW5jdGlvbltdIGVycm9yRnVuY3Rpb25zOworCQorCXByaXZhdGUgdm9pZCBpbml0aWFsaXplRXJyb3JGdW5jdGlvbkNvbWJvKCkgeworCQkKKwkJZmluYWwgSUV4dGVuc2lvblJlZ2lzdHJ5IHJlZ2lzdHJ5ID0gUGxhdGZvcm0uZ2V0RXh0ZW5zaW9uUmVnaXN0cnkoKTsKKwkJZmluYWwgSUNvbmZpZ3VyYXRpb25FbGVtZW50W10gZXJyb3JGdW5jdGlvbnNDb25maWdFbGVtZW50cyA9IHJlZ2lzdHJ5CisJCQkJLmdldENvbmZpZ3VyYXRpb25FbGVtZW50c0ZvcihvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLkNvbnN0YW50cy5JRF9FUlJPUkZVTkNUSU9OX0VYVEVOU0lPTl9QT0lOVCk7CisKKwkJCWZpbmFsIGphdmEudXRpbC5MaXN0PEVycm9yRnVuY3Rpb24+IHRlbXAgPSBuZXcgQXJyYXlMaXN0PEVycm9yRnVuY3Rpb24+KCk7CisKKwkJCWVycm9yRnVuY3Rpb25zID0gbmV3IEVycm9yRnVuY3Rpb25bZXJyb3JGdW5jdGlvbnNDb25maWdFbGVtZW50cy5sZW5ndGhdOworCisJCQlmb3IgKGludCBpID0gMDsgaSA8IGVycm9yRnVuY3Rpb25zQ29uZmlnRWxlbWVudHMubGVuZ3RoOyBpKyspIHsKKwkJCQlmaW5hbCBJQ29uZmlndXJhdGlvbkVsZW1lbnQgZWxlbWVudCA9IGVycm9yRnVuY3Rpb25zQ29uZmlnRWxlbWVudHNbaV07CisJCQkKKwkJCQlpZiAoZWxlbWVudC5nZXROYW1lKCkuZXF1YWxzKG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuQ29uc3RhbnRzLkVSUk9SRlVOQ1RJT05fRUxFTUVOVCkpIHsKKwkJCQkJLy8gWWVzCisJCQkJCXRyeSB7CisJCQkJCQl0ZW1wLmFkZCgoRXJyb3JGdW5jdGlvbikgZWxlbWVudAorCQkJCQkJCQkuY3JlYXRlRXhlY3V0YWJsZUV4dGVuc2lvbigiY2xhc3MiKSk7IC8vJE5PTi1OTFMtMSQKKwkJCQkJfSBjYXRjaCAoZmluYWwgQ29yZUV4Y2VwdGlvbiBlKSB7CisJCQkJCQlBY3RpdmF0b3IubG9nRXJyb3IoCisJCQkJCQkJCU1lc3NhZ2VzLmdldFN0cmluZygiVW5hYmxlIHRvIGluc3RhbnRpYXRlIGV4dGVuc2lvbiBwb2ludCAiK2VsZW1lbnQpLCBlKTsgLy8kTk9OLU5MUy0xJAorCQkJCQl9CisJCQkJfSAvLyBpZgorCQkJfSAvLyBmb3IgZWFjaCBjb25maWd1cmF0aW9uIGVsZW1lbnQKKworCQkJZXJyb3JGdW5jdGlvbnMgPSB0ZW1wLnRvQXJyYXkobmV3IEVycm9yRnVuY3Rpb25bXSB7fSk7CisJCisJCWZvcihpbnQgaT0wO2k8ZXJyb3JGdW5jdGlvbnMubGVuZ3RoOysraSkKKwkJCWVycm9yRnVuY3Rpb25Db21iby5hZGQoZXJyb3JGdW5jdGlvbnNbaV0uZUNsYXNzKCkuZ2V0TmFtZSgpKTsKKwkJZXJyb3JGdW5jdGlvbkNvbWJvLnNlbGVjdCgwKTsKKwl9CisJCisJQE92ZXJyaWRlCisJcHVibGljIGJvb2xlYW4gdmFsaWRhdGUoKSB7CisJCWJvb2xlYW4gcmV0VmFsdWUgPSB0cnVlOworCQlkb3VibGUgbWluVmFsPTAsIG1heFZhbD0xLCBzdGFydFZhbD0wLjUsIHN0ZXBWYWw9MC4xOyAvLyB2YWxpZCBzZXQgb2YgdmFsdWVzLCBqdXN0IGluIGNhc2UgdGhlIHRleHQgYm94ZXMgYXJlbid0IGVuYWJsZWQgeWV0LgorCQllcnJvck1lc3NhZ2UgPSAiIjsKKwkJaWYocmV0VmFsdWUpIHsKKwkJCWlmKHN0YXJ0VmFsVGV4dC5pc0VuYWJsZWQoKSkgeworCQkJCVN0cmluZyB2YWwgPSBzdGFydFZhbFRleHQuZ2V0VGV4dCgpOworCQkJCXJldFZhbHVlID0gY2hlY2tEb3VibGUodmFsKTsKKwkJCQlpZighcmV0VmFsdWUpIGVycm9yTWVzc2FnZSA9IE1lc3NhZ2VzLmdldFN0cmluZygiTk0uQkFEU1RBUlQiKTsKKwkJCQllbHNlIHN0YXJ0VmFsID0gRG91YmxlLnBhcnNlRG91YmxlKHZhbCk7CisJCQl9CisJCX0KKworCQlpZihyZXRWYWx1ZSkgeworCQkJaWYoc3RlcFZhbFRleHQuaXNFbmFibGVkKCkpIHsKKwkJCQlTdHJpbmcgdmFsID0gc3RlcFZhbFRleHQuZ2V0VGV4dCgpOworCQkJCXJldFZhbHVlID0gY2hlY2tEb3VibGVOb25aZXJvKHZhbCk7CisJCQkJaWYoIXJldFZhbHVlKSBlcnJvck1lc3NhZ2UgPSBNZXNzYWdlcy5nZXRTdHJpbmcoIk5NLkJBRFNURVAiKTsKKwkJCQllbHNlIHN0ZXBWYWwgPSBEb3VibGUucGFyc2VEb3VibGUodmFsKTsKKwkJCX0KKwkJfQorCisJCWlmKHJldFZhbHVlKSB7CisJCQlpZihtaW5WYWxUZXh0LmlzRW5hYmxlZCgpKSB7CisJCQkJU3RyaW5nIHZhbCA9IG1pblZhbFRleHQuZ2V0VGV4dCgpOworCQkJCXJldFZhbHVlID0gY2hlY2tEb3VibGUodmFsKTsKKwkJCQlpZighcmV0VmFsdWUpIGVycm9yTWVzc2FnZSA9IE1lc3NhZ2VzLmdldFN0cmluZygiTk0uQkFETUlOIik7CisJCQkJZWxzZSBtaW5WYWwgPSBEb3VibGUucGFyc2VEb3VibGUodmFsKTsKKwkJCX0KKwkJfQorCisJCWlmKHJldFZhbHVlKSB7CisJCQlpZihtYXhWYWxUZXh0LmlzRW5hYmxlZCgpKSB7CisJCQkJU3RyaW5nIHZhbCA9IG1heFZhbFRleHQuZ2V0VGV4dCgpOworCQkJCXJldFZhbHVlID0gY2hlY2tEb3VibGUodmFsKTsKKwkJCQlpZighcmV0VmFsdWUpIGVycm9yTWVzc2FnZSA9IE1lc3NhZ2VzLmdldFN0cmluZygiTk0uQkFETUFYIik7CisJCQkJZWxzZSBtYXhWYWwgPSBEb3VibGUucGFyc2VEb3VibGUodmFsKTsKKwkJCX0KKwkJfQorCisJCWlmKHJldFZhbHVlKQorCQkJaWYobWluVmFsID5tYXhWYWwpIHsKKwkJCQkgZXJyb3JNZXNzYWdlID0gTWVzc2FnZXMuZ2V0U3RyaW5nKCJOTS5CQURNSU5NQVgiKTsKKwkJCQkgcmV0VmFsdWUgPSBmYWxzZTsKKwkJCX0KKwkJCisJCWlmKHJldFZhbHVlKQorCQkJaWYobWF4SXRlcnNUZXh0LmlzRW5hYmxlZCgpKSB7CisJCQkJU3RyaW5nIHZhbCA9IG1heEl0ZXJzVGV4dC5nZXRUZXh0KCk7CisJCQkJcmV0VmFsdWUgPSBjaGVja0ludGVnZXJNaW5WYWx1ZSh2YWwsIC0xKTsKKwkJCQlpZighcmV0VmFsdWUpIGVycm9yTWVzc2FnZSA9IE1lc3NhZ2VzLmdldFN0cmluZygiTk0uQkFETUFYSVRFUlMiKTsKKwkJCX0KKwkJaWYocmV0VmFsdWUpCisJCQlpZihyZWZlcmVuY2VEYXRhVGV4dC5nZXRUZXh0KCkgPT0gbnVsbCB8fCByZWZlcmVuY2VEYXRhVGV4dC5nZXRUZXh0KCkudHJpbSgpLmVxdWFscygiIikpIHsKKwkJCQkgZXJyb3JNZXNzYWdlID0gTWVzc2FnZXMuZ2V0U3RyaW5nKCJOTS5CQURSRUZFUkVOQ0UiKTsKKwkJCQkgcmV0VmFsdWUgPSBmYWxzZTsKKwkJCX0KKworCQlpZihyZXRWYWx1ZSkKKwkJCWlmKGJhc2VTY2VuYXJpbyA9PSBudWxsKSB7CisJCQkJIGVycm9yTWVzc2FnZSA9IE1lc3NhZ2VzLmdldFN0cmluZygiTk0uQkFEQkFTRVNDRU5BUklPIik7CisJCQkJIHJldFZhbHVlID0gZmFsc2U7CisJCQl9CisKKwkJaWYocmV0VmFsdWUpCisJCQlpZih0YWJsZS5nZXRJdGVtQ291bnQoKSA9PSAwKSB7CisJCQkJIGVycm9yTWVzc2FnZSA9IE1lc3NhZ2VzLmdldFN0cmluZygiTk0uQVRMRUFTVE9ORVBBUkFNIik7CisJCQkJIHJldFZhbHVlID0gZmFsc2U7CisJCQl9CisJCQorCQlpZihyZXRWYWx1ZSkKKwkJCWlmKHRvbGVyYW5jZVRleHQuaXNFbmFibGVkKCkpIHsKKwkJCQkgcmV0VmFsdWUgPSBjaGVja0RvdWJsZVBvc2l0aXZlTm9uWmVybyh0b2xlcmFuY2VUZXh0LmdldFRleHQoKSk7CisJCQl9CisJCXJldHVybiByZXRWYWx1ZTsKKwl9CisKKwlAT3ZlcnJpZGUKKwlwdWJsaWMgU3RyaW5nIGdldEVycm9yTWVzc2FnZSgpIHsKKwkJcmV0dXJuIGVycm9yTWVzc2FnZTsKKwl9CisKKwlwcml2YXRlIGJvb2xlYW4gY2hlY2tEb3VibGUoU3RyaW5nIGQpIHsKKwkJYm9vbGVhbiByZXRWYWx1ZSA9IHRydWU7CisJCXRyeSB7CisJCQlEb3VibGUucGFyc2VEb3VibGUoZCk7CisJCX0gY2F0Y2goRXhjZXB0aW9uIGUpIHsKKwkJCXJldFZhbHVlID0gZmFsc2U7CisJCX0KKwkJcmV0dXJuIHJldFZhbHVlOworCX0KKwkKKwlAU3VwcHJlc3NXYXJuaW5ncygidW51c2VkIikKKwlwcml2YXRlIGJvb2xlYW4gY2hlY2tEb3VibGVOb25aZXJvKFN0cmluZyBkKSB7CisJCWJvb2xlYW4gcmV0VmFsdWUgPSB0cnVlOworCQl0cnkgeworCQkJZG91YmxlIF9kID0gRG91YmxlLnBhcnNlRG91YmxlKGQpOworCQkJaWYoX2QgPT0gMC4wKSByZXRWYWx1ZSA9IGZhbHNlOworCQl9IGNhdGNoKEV4Y2VwdGlvbiBlKSB7CisJCQlyZXRWYWx1ZSA9IGZhbHNlOworCQl9CisJCXJldHVybiByZXRWYWx1ZTsKKwl9CisJCisJcHJpdmF0ZSBib29sZWFuIGNoZWNrSW50ZWdlck1pblZhbHVlKFN0cmluZyBpLCBpbnQgbWluKSB7CisJCWJvb2xlYW4gcmV0VmFsdWUgPSB0cnVlOworCQl0cnkgeworCQkJaW50IF9pID0gSW50ZWdlci5wYXJzZUludChpKTsKKwkJCWlmKF9pIDwgbWluKSByZXRWYWx1ZSA9IGZhbHNlOworCQl9IGNhdGNoKEV4Y2VwdGlvbiBlKSB7CisJCQlyZXRWYWx1ZSA9IGZhbHNlOworCQl9CisJCXJldHVybiByZXRWYWx1ZTsKKwl9CisKKworCXByaXZhdGUgYm9vbGVhbiBjaGVja0RvdWJsZVBvc2l0aXZlTm9uWmVybyhTdHJpbmcgZCkgeworCQlib29sZWFuIHJldFZhbHVlID0gdHJ1ZTsKKwkJdHJ5IHsKKwkJCWRvdWJsZSBfZCA9IERvdWJsZS5wYXJzZURvdWJsZShkKTsKKwkJCWlmKF9kIDwgMC4wKSByZXRWYWx1ZSA9IGZhbHNlOworCQl9IGNhdGNoKEV4Y2VwdGlvbiBlKSB7CisJCQlyZXRWYWx1ZSA9IGZhbHNlOworCQl9CisJCXJldHVybiByZXRWYWx1ZTsKKwl9CisJCisJQE92ZXJyaWRlCisJcHVibGljIE9wdGltaXplckFsZ29yaXRobSBjcmVhdGVBbGdvcml0aG0oKSB7CisJCUF1dG9tYXRpY0V4cGVyaW1lbnQgYXV0b0V4cGVyaW1lbnQgPSBBdXRvbWF0aWNleHBlcmltZW50RmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlQXV0b21hdGljRXhwZXJpbWVudCgpOworCisJCWF1dG9FeHBlcmltZW50LnNldEJhc2VTY2VuYXJpbyhiYXNlU2NlbmFyaW8pOworCQlpbnQgaW5kID0gZXJyb3JGdW5jdGlvbkNvbWJvLmdldFNlbGVjdGlvbkluZGV4KCk7CisJCWlmKGluZCA9PSAtMSkgaW5kID0gMDsgLy8gZ3JhYiBmaXJzdCBvbmUKKwkJYXV0b0V4cGVyaW1lbnQuc2V0RXJyb3JGdW5jKGVycm9yRnVuY3Rpb25zW2luZF0pOyAKKwkJYXV0b0V4cGVyaW1lbnQuc2V0TWF4aW11bU51bWJlck9mSXRlcmF0aW9ucyhJbnRlZ2VyLnBhcnNlSW50KG1heEl0ZXJzVGV4dC5nZXRUZXh0KCkpKTsKKwkJYXV0b0V4cGVyaW1lbnQuc2V0UmVmZXJhbmNlRGF0YURpcihyZWZlcmVuY2VEYXRhVGV4dC5nZXRUZXh0KCkpOyAvLyBUb0RPOiBVc2UgcGxhdGZvcm0gaW5kZXBlbmRlbnQgbWV0aG9kCisJCWF1dG9FeHBlcmltZW50LnNldFJlSW5pdChyZUluaXQpOworCQlhdXRvRXhwZXJpbWVudC5zZXRUb2xlcmFuY2UoRG91YmxlLnBhcnNlRG91YmxlKHRvbGVyYW5jZVRleHQuZ2V0VGV4dCgpKSk7CisJCQorCQlpbnQgbj0wOworCQlmb3IoSWRlbnRpZmlhYmxlIGlkZW50IDppZGVudGlmaWFibGVMaXN0KSB7CisJCQlNb2RpZmlhYmxlUGFyYW1ldGVyIHBhcmFtID0gQXV0b21hdGljZXhwZXJpbWVudEZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZU1vZGlmaWFibGVQYXJhbWV0ZXIoKTsKKwkJCXBhcmFtLnNldFRhcmdldFVSSShpZGVudC5nZXRVUkkoKSk7CisJCQlwYXJhbS5zZXRGZWF0dXJlTmFtZShhdHRyaWJ1dGVMaXN0LmdldChuKS5nZXROYW1lKCkpOworCQkJcGFyYW0uc2V0SW5pdGlhbFZhbHVlKHN0YXJ0TGlzdC5nZXQobikpOworCQkJcGFyYW0uc2V0U3RlcChzdGVwTGlzdC5nZXQobikpOworCQkJcGFyYW0uc2V0TG93ZXJCb3VuZChtaW5MaXN0LmdldChuKSk7CisJCQlwYXJhbS5zZXRVcHBlckJvdW5kKG1heExpc3QuZ2V0KG4pKTsKKwkJCQorCQkJYXV0b0V4cGVyaW1lbnQuZ2V0UGFyYW1ldGVycygpLmFkZChwYXJhbSk7CisJCQkrK247CisJCX0KKwkJcmV0dXJuIGF1dG9FeHBlcmltZW50OworCX0KK30KZGlmZiAtLWdpdCBhL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuYXV0b21hdGljZXhwZXJpbWVudC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9hbmFseXNpcy9hdXRvbWF0aWNleHBlcmltZW50L3VpL0F1dG9tYXRpY0V4cGVyaW1lbnRDb21wb3NpdGVFZGl0b3JBZGFwdGVyLmphdmEgYi9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQvc3JjL29yZy9lY2xpcHNlL3N0ZW0vYW5hbHlzaXMvYXV0b21hdGljZXhwZXJpbWVudC91aS9BdXRvbWF0aWNFeHBlcmltZW50Q29tcG9zaXRlRWRpdG9yQWRhcHRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRkZTBmZGQKLS0tIC9kZXYvbnVsbAorKysgYi9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQvc3JjL29yZy9lY2xpcHNlL3N0ZW0vYW5hbHlzaXMvYXV0b21hdGljZXhwZXJpbWVudC91aS9BdXRvbWF0aWNFeHBlcmltZW50Q29tcG9zaXRlRWRpdG9yQWRhcHRlci5qYXZhCkBAIC0wLDAgKzEsMTcgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5hdXRvbWF0aWNleHBlcmltZW50LnVpOworCitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3Q7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5Nb2RpZnlMaXN0ZW5lcjsKKworcHVibGljIGNsYXNzIEF1dG9tYXRpY0V4cGVyaW1lbnRDb21wb3NpdGVFZGl0b3JBZGFwdGVyIGV4dGVuZHMKKwkJQWxnb3JpdGhtQ29tcG9zaXRlRWRpdG9yQWRhcHRlciB7CisKKwlAT3ZlcnJpZGUKKwlwdWJsaWMgQWxnb3JpdGhtQ29tcG9zaXRlRWRpdG9yIGNyZWF0ZUNvbXBvc2l0ZUVkaXRvcigKKwkJCUFsZ29yaXRobUNvbnRyb2wgYWxnQ29udHJvbCwgaW50IHN0eWxlLAorCQkJTW9kaWZ5TGlzdGVuZXIgcHJvamVjdFZhbGlkYXRvciwgSVByb2plY3QgcHJvamVjdCkgeworCQkvLyBUT0RPIEF1dG8tZ2VuZXJhdGVkIG1ldGhvZCBzdHViCisJCXJldHVybiBuZXcgQXV0b21hdGljRXhwZXJpbWVudENvbXBvc2l0ZUVkaXRvcihhbGdDb250cm9sLCBzdHlsZSwgcHJvamVjdFZhbGlkYXRvciwgcHJvamVjdCk7CisJfQorCit9CmRpZmYgLS1naXQgYS9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQvc3JjL29yZy9lY2xpcHNlL3N0ZW0vYW5hbHlzaXMvYXV0b21hdGljZXhwZXJpbWVudC91aS9BdXRvbWF0aWNFeHBlcmltZW50Q29tcG9zaXRlRWRpdG9yQWRhcHRlckZhY3RvcnkuamF2YSBiL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuYXV0b21hdGljZXhwZXJpbWVudC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9hbmFseXNpcy9hdXRvbWF0aWNleHBlcmltZW50L3VpL0F1dG9tYXRpY0V4cGVyaW1lbnRDb21wb3NpdGVFZGl0b3JBZGFwdGVyRmFjdG9yeS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk1NjEwOWIKLS0tIC9kZXYvbnVsbAorKysgYi9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQvc3JjL29yZy9lY2xpcHNlL3N0ZW0vYW5hbHlzaXMvYXV0b21hdGljZXhwZXJpbWVudC91aS9BdXRvbWF0aWNFeHBlcmltZW50Q29tcG9zaXRlRWRpdG9yQWRhcHRlckZhY3RvcnkuamF2YQpAQCAtMCwwICsxLDM0IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuYXV0b21hdGljZXhwZXJpbWVudC51aTsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LkFkYXB0ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5hdXRvbWF0aWNleHBlcmltZW50LnV0aWwuQXV0b21hdGljZXhwZXJpbWVudEFkYXB0ZXJGYWN0b3J5OworCitwdWJsaWMgY2xhc3MgQXV0b21hdGljRXhwZXJpbWVudENvbXBvc2l0ZUVkaXRvckFkYXB0ZXJGYWN0b3J5IGV4dGVuZHMKKwkJQXV0b21hdGljZXhwZXJpbWVudEFkYXB0ZXJGYWN0b3J5IGltcGxlbWVudHMKKwkJQWxnb3JpdGhtQ29tcG9zaXRlRWRpdG9yQWRhcHRlckZhY3RvcnkgeworCisJLyoqCisJICogCisJICovCisJcHVibGljIEF1dG9tYXRpY0V4cGVyaW1lbnRDb21wb3NpdGVFZGl0b3JBZGFwdGVyRmFjdG9yeSgpIHsKKwkJc3VwZXIoKTsKKwkJQWxnb3JpdGhtQ29tcG9zaXRlRWRpdG9yQWRhcHRlckZhY3RvcnlJbXBsLklOU1RBTkNFCisJCQkJLmFkZEFkYXB0ZXJGYWN0b3J5KHRoaXMpOworCX0KKworCS8qKgorCSAqIAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZUF1dG9tYXRpY0V4cGVyaW1lbnRBZGFwdGVyKCkgeworCQlyZXR1cm4gbmV3IEF1dG9tYXRpY0V4cGVyaW1lbnRDb21wb3NpdGVFZGl0b3JBZGFwdGVyKCk7CisJfQorCisJLyoqCisJICogCisJICovCisJcHVibGljIGJvb2xlYW4gaXNGYWN0b3J5Rm9yVHlwZShPYmplY3QgdHlwZSkgeworCQlyZXR1cm4gdHlwZSA9PSBBbGdvcml0aG1Db21wb3NpdGVFZGl0b3JBZGFwdGVyLmNsYXNzCisJCQkJfHwgc3VwZXIuaXNGYWN0b3J5Rm9yVHlwZSh0eXBlKTsKKwl9Cit9CmRpZmYgLS1naXQgYS9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQvc3JjL29yZy9lY2xpcHNlL3N0ZW0vYW5hbHlzaXMvYXV0b21hdGljZXhwZXJpbWVudC91aS9OZXdBdXRvbWF0aWNFeHBlcmltZW50V2l6YXJkLmphdmEgYi9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQvc3JjL29yZy9lY2xpcHNlL3N0ZW0vYW5hbHlzaXMvYXV0b21hdGljZXhwZXJpbWVudC91aS9OZXdBdXRvbWF0aWNFeHBlcmltZW50V2l6YXJkLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWJkOGNjOQotLS0gL2Rldi9udWxsCisrKyBiL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuYXV0b21hdGljZXhwZXJpbWVudC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9hbmFseXNpcy9hdXRvbWF0aWNleHBlcmltZW50L3VpL05ld0F1dG9tYXRpY0V4cGVyaW1lbnRXaXphcmQuamF2YQpAQCAtMCwwICsxLDM0MiBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQudWk7DQorDQorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuDQorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscw0KKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMA0KKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0DQorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwNCisgKg0KKyAqIENvbnRyaWJ1dG9yczoNCisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uDQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQorDQoraW1wb3J0IGphdmEuaW8uRmlsZU5vdEZvdW5kRXhjZXB0aW9uOw0KK2ltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOw0KK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0Ow0KKw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLmNvbW1hbmRzLkFic3RyYWN0SGFuZGxlcjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5jb21tYW5kcy5FeGVjdXRpb25FdmVudDsNCitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5jb21tYW5kcy5FeGVjdXRpb25FeGNlcHRpb247DQoraW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUuY29tbWFuZHMuSUhhbmRsZXI7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5Db3JlRXhjZXB0aW9uOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSUNvbmZpZ3VyYXRpb25FbGVtZW50Ow0KK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSUV4dGVuc2lvblJlZ2lzdHJ5Ow0KK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGxhdGZvcm07DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5VUkk7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5yZXNvdXJjZS5SZXNvdXJjZTsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnJlc291cmNlLlJlc291cmNlU2V0Ow0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUucmVzb3VyY2UuaW1wbC5SZXNvdXJjZVNldEltcGw7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuU3RydWN0dXJlZFNlbGVjdGlvbjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uud2l6YXJkLklXaXphcmRQYWdlOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS53aXphcmQuV2l6YXJkRGlhbG9nOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQuQXV0b21hdGljZXhwZXJpbWVudFBhY2thZ2U7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuYXV0b21hdGljZXhwZXJpbWVudC5PcHRpbWl6ZXJBbGdvcml0aG07DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuYXV0b21hdGljZXhwZXJpbWVudC52aWV3cy5NZXNzYWdlczsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLlNURU1VUkk7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5TVEVNWE1JUmVzb3VyY2VGYWN0b3J5SW1wbDsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5JZGVudGlmaWFibGU7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5leHBlcmltZW50LkV4cGVyaW1lbnRQYWNrYWdlOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2NlbmFyaW8uU2NlbmFyaW87DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udWkuQWN0aXZhdG9yOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnVpLndpemFyZHMuRHVibGluQ29yZVBhZ2U7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udWkud2l6YXJkcy5OZXdJZGVudGlmaWFibGVQYWdlOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnVpLndpemFyZHMuTmV3SWRlbnRpZmlhYmxlV2l6YXJkOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnVpLndpemFyZHMuTmV3U1RFTVByb2plY3RXaXphcmQ7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udWkud2l6YXJkcy5TVEVNV2l6YXJkRGlhbG9nOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuU1dUOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLk1vZGlmeUV2ZW50Ow0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLk1vZGlmeUxpc3RlbmVyOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QubGF5b3V0LkdyaWREYXRhOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QubGF5b3V0LkdyaWRMYXlvdXQ7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbWJvOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGU7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkxhYmVsOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5MaXN0Ow0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5TaGVsbDsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuU3Bpbm5lcjsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuVGV4dDsNCitpbXBvcnQgb3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaFdpbmRvdzsNCitpbXBvcnQgb3JnLmVjbGlwc2UudWkuUGxhdGZvcm1VSTsNCitpbXBvcnQgb3JnLmVjbGlwc2UudWkuaGFuZGxlcnMuSGFuZGxlclV0aWw7DQorDQorDQorcHVibGljIGNsYXNzIE5ld0F1dG9tYXRpY0V4cGVyaW1lbnRXaXphcmQgDQorCWV4dGVuZHMgTmV3SWRlbnRpZmlhYmxlV2l6YXJkIHsNCisJDQorCQ0KKwlwdWJsaWMgTmV3QXV0b21hdGljRXhwZXJpbWVudFdpemFyZCgpIHsNCisJCS8vIFRPRE8gQXV0by1nZW5lcmF0ZWQgY29uc3RydWN0b3Igc3R1Yg0KKwl9DQorDQorCS8qKg0KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0udWkud2l6YXJkcy5OZXdJZGVudGlmaWFibGVXaXphcmQjYWRkUGFnZXMoKQ0KKwkgKi8NCisJQE92ZXJyaWRlDQorCXB1YmxpYyB2b2lkIGFkZFBhZ2VzKCkgew0KKwkJc2V0Rm9yY2VQcmV2aW91c0FuZE5leHRCdXR0b25zKGZhbHNlKTsNCisJCW5ld0lkZW50aWZpYWJsZVBhZ2UgPSBjcmVhdGVOZXdJZGVudGlmaWFibGVQYWdlKCk7DQorCQkvLyBXZXJlIHdlIHN1Y2Nlc3NmdWwgaW4gY3JlYXRpbmcgdGhlIHBhZ2U/DQorCQlpZiAobmV3SWRlbnRpZmlhYmxlUGFnZSA9PSBudWxsKSB7DQorCQkJLy8gTm8NCisJCQlyZXR1cm47DQorCQl9DQorCQluZXdEdWJsaW5Db3JlUGFnZSA9IGNyZWF0ZUR1YmxpbkNvcmVQYWdlKCk7DQorCQkvLyBXZXJlIHdlIHN1Y2Nlc3NmdWwgaW4gY3JlYXRpbmcgdGhlIHBhZ2U/DQorCQlpZiAobmV3RHVibGluQ29yZVBhZ2UgPT0gbnVsbCkgew0KKwkJCS8vIE5vDQorCQkJcmV0dXJuOw0KKwkJfQ0KKwkJYWRkUGFnZShuZXdJZGVudGlmaWFibGVQYWdlKTsNCisJCWFkZFBhZ2UobmV3RHVibGluQ29yZVBhZ2UpOw0KKwl9DQorDQorCS8qKg0KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0udWkud2l6YXJkcy5OZXdJZGVudGlmaWFibGVXaXphcmQjZ2V0TmV4dFBhZ2Uob3JnLmVjbGlwc2UuamZhY2Uud2l6YXJkLklXaXphcmRQYWdlKQ0KKwkgKi8NCisJQE92ZXJyaWRlDQorCXB1YmxpYyBJV2l6YXJkUGFnZSBnZXROZXh0UGFnZShJV2l6YXJkUGFnZSBwYWdlKSB7DQorCQlmaW5hbCBJV2l6YXJkUGFnZSBuZXh0UGFnZSA9IHN1cGVyLmdldE5leHRQYWdlKHBhZ2UpOw0KKwkJcmV0dXJuIG5leHRQYWdlOw0KKwl9DQorDQorCUBPdmVycmlkZQ0KKwlwcm90ZWN0ZWQgRHVibGluQ29yZVBhZ2UgY3JlYXRlRHVibGluQ29yZVBhZ2UoKSB7DQorCQlyZXR1cm4gbmV3IER1YmxpbkNvcmVQYWdlKCkgew0KKwkJCS8qKg0KKwkJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS51aS53aXphcmRzLk5ld0lkZW50aWZpYWJsZVdpemFyZC5EdWJsaW5Db3JlUGFnZSNpbml0aWFsaXplRENGaWVsZHMoKQ0KKwkJCSAqLw0KKwkJCUBTdXBwcmVzc1dhcm5pbmdzKCJubHMiKQ0KKwkJCUBPdmVycmlkZQ0KKwkJCXByb3RlY3RlZCB2b2lkIGluaXRpYWxpemVEQ0F0dHJpYnV0ZXMoKSB7DQorCQkJCXN1cGVyLmluaXRpYWxpemVEQ0F0dHJpYnV0ZXMoKTsNCisJCQkJZm9ybWF0LnNldFRleHQoRXhwZXJpbWVudFBhY2thZ2UuZU5TX1VSSSk7DQorCQkJCWZvcm1hdC5zZXRFbmFibGVkKGZhbHNlKTsNCisJCQkJdHlwZS5zZXRUZXh0KFNURU1VUkkuRVhQRVJJTUVOVF9UWVBFX1VSSS50b1N0cmluZygpKTsNCisJCQkJdHlwZS5zZXRFbmFibGVkKGZhbHNlKTsNCisJCQkJDQorDQorCQkJCXRpdGxlVGV4dEZpZWxkLnNldFRleHQoTWVzc2FnZXMuZ2V0U3RyaW5nKCJkY190aXRsZV9hX2V4cCIpKTsNCisJCQkJc291cmNlLnNldFRleHQoTWVzc2FnZXMuZ2V0U3RyaW5nKCJkY19zb3VyY2VfYV9leHAiKSk7DQorCQkJCWRlc2NyaXB0aW9uVGV4dEZpZWxkLnNldFRleHQoTWVzc2FnZXMuZ2V0U3RyaW5nKCJkY19kZXNjX2FfZXhwIikpOw0KKwkJCQkJCQ0KKwkJCX0NCisJCX07DQorCX0NCisNCisJQE92ZXJyaWRlDQorCXByb3RlY3RlZCBJZGVudGlmaWFibGUgY3JlYXRlSWRlbnRpZmlhYmxlKCkgew0KKwkJcmV0dXJuIGNyZWF0ZUF1dG9tYXRpY0V4cGVyaW1lbnQoKTsNCisJfQ0KKwlOZXdBdXRvbWF0aWNFeHBlcmltZW50UGFnZSBwYWdlOw0KKwkNCisJQE92ZXJyaWRlDQorCXByb3RlY3RlZCBOZXdJZGVudGlmaWFibGVQYWdlIGNyZWF0ZU5ld0lkZW50aWZpYWJsZVBhZ2UoKSB7DQorCQl0aGlzLnNldEhlbHBDb250ZXh0SWQoIm9yZy5lY2xpcHNlLnN0ZW0uZG9jLm5ld2F1dG9tYXRpY2V4cF9jb250ZXh0aWQiKTsNCisJCXBhZ2UgPSBuZXcgTmV3QXV0b21hdGljRXhwZXJpbWVudFBhZ2UoZ2V0U2hlbGwoKSwgIk5ldyBBdXRvbWF0aWMgRXhwZXJpbWVudCBXaXphcmQiKTsgLy8kTk9OLU5MUy0xJA0KKwkJcGFnZS5zZXRUaXRsZSgiIik7IC8vJE5PTi1OTFMtMSQNCisJCXJldHVybiBwYWdlOw0KKwl9DQorCQ0KKw0KKwlAT3ZlcnJpZGUNCisJcHJvdGVjdGVkIFN0cmluZyBnZXRTZXJpYWxpemF0aW9uRmlsZU5hbWVFeHRlbnNpb24oKSB7DQorCQlyZXR1cm4gQXV0b21hdGljZXhwZXJpbWVudFBhY2thZ2UuZU5BTUU7DQorCX0NCisNCisJQE92ZXJyaWRlDQorCXByb3RlY3RlZCBTdHJpbmcgZ2V0U2VyaWFsaXphdGlvbkZvbGRlck5hbWUoKSB7DQorCQlyZXR1cm4gTmV3U1RFTVByb2plY3RXaXphcmQuRVhQRVJJTUVOVFNfRk9MREVSX05BTUU7DQorCX0NCisNCisJQE92ZXJyaWRlDQorCXByb3RlY3RlZCBTdHJpbmcgZ2V0V2l6YXJkVGl0bGUoKSB7DQorCQkvLyBUT0RPIEV4dGVybmFsaXNlIHRoaXMgc3RyaW5nDQorCQlyZXR1cm4gIkF1dG9tYXRpYyBFeHBlcmltZW50IFdpemFyZCI7DQorCX0NCisJDQorCXByb3RlY3RlZCBPcHRpbWl6ZXJBbGdvcml0aG0gY3JlYXRlQXV0b21hdGljRXhwZXJpbWVudCgpIHsNCisJCU9wdGltaXplckFsZ29yaXRobSByZXQgPSBwYWdlLmFsZ0NvbnRyb2wuY3JlYXRlQXV0b21hdGljRXhwZXJpbWVudCgpOw0KKwkJcmV0LnNldER1YmxpbkNvcmUobmV3RHVibGluQ29yZVBhZ2UuY3JlYXRlRHVibGluQ29yZSgpKTsNCisJCXJldHVybiByZXQ7DQorCX0NCisJDQorCXByb3RlY3RlZCBTY2VuYXJpbyBjcmVhdGVTY2VuYXJpbyhmaW5hbCBTdHJpbmcgc2NlbmFyaW9GaWxlKSB7DQorCQlmaW5hbCBSZXNvdXJjZVNldCByZXNvdXJjZVNldCA9IG5ldyBSZXNvdXJjZVNldEltcGwoKTsNCisJCXJlc291cmNlU2V0LmdldFJlc291cmNlRmFjdG9yeVJlZ2lzdHJ5KCkuZ2V0RXh0ZW5zaW9uVG9GYWN0b3J5TWFwKCkucHV0KCIqIiwNCisJCQkJU1RFTVhNSVJlc291cmNlRmFjdG9yeUltcGwuSU5TVEFOQ0UpOw0KKw0KKwkJcmVzb3VyY2VTZXQuZ2V0UmVzb3VyY2VGYWN0b3J5UmVnaXN0cnkoKS5nZXRQcm90b2NvbFRvRmFjdG9yeU1hcCgpLnB1dCgicGxhdGZvcm0iLA0KKwkJCQlTVEVNWE1JUmVzb3VyY2VGYWN0b3J5SW1wbC5JTlNUQU5DRSk7DQorCQlmaW5hbCBSZXNvdXJjZSByZXNvdXJjZSA9IHJlc291cmNlU2V0LmdldFJlc291cmNlKFVSSS5jcmVhdGVGaWxlVVJJKHNjZW5hcmlvRmlsZSksDQorCQkJCXRydWUpOw0KKwkJdHJ5IHsJCQkNCisJCQlyZXNvdXJjZS5sb2FkKG51bGwpOw0KKwkJfSBjYXRjaCAoRmlsZU5vdEZvdW5kRXhjZXB0aW9uIGUpIHsNCisJCQkvLyBUT0RPIEF1dG8tZ2VuZXJhdGVkIGNhdGNoIGJsb2NrDQorCQkJZS5wcmludFN0YWNrVHJhY2UoKTsNCisJCX0gY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsNCisJCQkvLyBUT0RPIEF1dG8tZ2VuZXJhdGVkIGNhdGNoIGJsb2NrDQorCQkJZS5wcmludFN0YWNrVHJhY2UoKTsNCisJCX0NCisJCVNjZW5hcmlvIGxvYWRlZFNjZW5hcmlvID0gKFNjZW5hcmlvKXJlc291cmNlLmdldENvbnRlbnRzKCkuZ2V0KDApOw0KKwkJbG9hZGVkU2NlbmFyaW8uaW5pdGlhbGl6ZSgpOw0KKwkJcmV0dXJuIGxvYWRlZFNjZW5hcmlvOw0KKwkJLy9yZXR1cm4gU2NlbmFyaW9UZXN0LmNyZWF0ZUZpeHR1cmUoKTsNCisJfQ0KKwkNCisJcHJvdGVjdGVkIHN0YXRpYyBjbGFzcyBOZXdBdXRvbWF0aWNFeHBlcmltZW50UGFnZSBleHRlbmRzIE5ld0lkZW50aWZpYWJsZVBhZ2Ugew0KKwkJDQorCQlwdWJsaWMgTGlzdCBwYXJhbWV0ZXJzTGlzdCA9IG51bGw7DQorCQlwdWJsaWMgQ29tYm8gYWxnb3JpdGhtQ29tYm8gPSBudWxsOwkJDQorCQlwdWJsaWMgQ29tYm8gZXJyb3JGdW5jdGlvbkNvbWJvID0gbnVsbDsNCisJCXB1YmxpYyBTcGlubmVyIG51bU9mSXRlcmF0aW9uc1NwaW5uZXIgPSBudWxsOw0KKwkJcHVibGljIFRleHQgcmVmRGlyVGV4dCA9IG51bGw7DQorCQlwdWJsaWMgVGV4dCBzY2VuYXJpb1RleHQgPSBudWxsOw0KKwkJcHJvdGVjdGVkIFNoZWxsIHNoZWxsID0gbnVsbDsNCisvLwkJcHVibGljIE5ld0F1dG9tYXRpY0V4cGVyaW1lbnRQYWdlMiBwYWdlMiA9IG51bGw7DQorCQkNCisJCUFsZ29yaXRobUNvbnRyb2wgYWxnQ29udHJvbDsNCisJCQ0KKwkJLyoqDQorCQkgKiBAcGFyYW0gcGFnZU5hbWUNCisJCSAqICAgICAgICAgICAgdGhlIG5hbWUgb2YgdGhlIHBhZ2UNCisJCSAqLw0KKwkJcHJvdGVjdGVkIE5ld0F1dG9tYXRpY0V4cGVyaW1lbnRQYWdlKGZpbmFsIFNoZWxsIHNoZWxsLCBmaW5hbCBTdHJpbmcgcGFnZU5hbWUpIHsNCisJCQlzdXBlcihwYWdlTmFtZSk7DQorCQkJdGhpcy5zaGVsbCA9IHNoZWxsOw0KKy8vCQkJcGFnZTIgPSBuZXcgTmV3QXV0b21hdGljRXhwZXJpbWVudFBhZ2UyKCJQYWdlIDIiKTsNCisvLwkJCXBhZ2UyLnNldFByZXZpb3VzUGFnZSh0aGlzKTsNCisJCX0NCisNCisJCXByb3RlY3RlZCBNb2RpZnlMaXN0ZW5lciBwcm9qZWN0VmFsaWRhdG9yID0gbmV3IE1vZGlmeUxpc3RlbmVyKCkgew0KKwkJCXB1YmxpYyB2b2lkIG1vZGlmeVRleHQoQFN1cHByZXNzV2FybmluZ3MoInVudXNlZCIpIGZpbmFsIE1vZGlmeUV2ZW50IGUpIHsNCisJCQkJc2V0UGFnZUNvbXBsZXRlKHZhbGlkYXRlUGFnZSgpKTsNCisJCQl9DQorCQl9Ow0KKwkJLyoqDQorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0udWkud2l6YXJkcy5OZXdJZGVudGlmaWFibGVQYWdlI2NyZWF0ZVNwZWNpZmljQ29tcG9zaXRlKG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZSkNCisJCSAqLw0KKwkJQE92ZXJyaWRlDQorCQlwcm90ZWN0ZWQgQ29tcG9zaXRlIGNyZWF0ZVNwZWNpZmljQ29tcG9zaXRlKENvbXBvc2l0ZSBwYXJlbnQpIHsNCisJCQkNCisJCQlQbGF0Zm9ybVVJLmdldFdvcmtiZW5jaCgpLmdldEhlbHBTeXN0ZW0oKS5zZXRIZWxwKHBhcmVudCwgIm9yZy5lY2xpcHNlLnN0ZW0uZG9jLm5ld2F1dG9tYXRpY2V4cF9jb250ZXh0aWQiKTsNCisJCQkNCisJCQlmaW5hbCBDb21wb3NpdGUgY29tcG9zaXRlID0gbmV3IENvbXBvc2l0ZShwYXJlbnQsIFNXVC5OT05FKTsNCisJCQlmaW5hbCBHcmlkTGF5b3V0IGdyaWRMYXlvdXQgPSBuZXcgR3JpZExheW91dCgpOw0KKwkJCWdyaWRMYXlvdXQubnVtQ29sdW1ucyA9IDI7DQorCQkJY29tcG9zaXRlLnNldExheW91dChncmlkTGF5b3V0KTsNCisJCQkNCisJCQlmaW5hbCBMYWJlbCBsYWJlbDIxID0gbmV3IExhYmVsKGNvbXBvc2l0ZSwgU1dULk5PTkUpOw0KKwkJCWxhYmVsMjEuc2V0VGV4dCgoTWVzc2FnZXMuZ2V0U3RyaW5nKCJXSVouQUxHT1JJVEhNIikpKTsJCQkJCQ0KKwkJCWFsZ29yaXRobUNvbWJvID0gbmV3IENvbWJvKGNvbXBvc2l0ZSwgU1dULlJFQURfT05MWSk7DQorCQkJaW5pdGlhbGl6ZUFsZ29yaXRobXNDb21ibygpOw0KKwkJCUdyaWREYXRhIGdyaWREYXRhMjEgPSBuZXcgR3JpZERhdGEoR3JpZERhdGEuSE9SSVpPTlRBTF9BTElHTl9CRUdJTk5JTkcpOw0KKwkJCWdyaWREYXRhMjEuaG9yaXpvbnRhbFNwYW4gPSAxOw0KKwkJCWFsZ29yaXRobUNvbWJvLnNldExheW91dERhdGEoZ3JpZERhdGEyMSk7DQorDQorCQkJR3JpZERhdGEgZ3JpZERhdGFDb21ibyA9IG5ldyBHcmlkRGF0YShHcmlkRGF0YS5IT1JJWk9OVEFMX0FMSUdOX0JFR0lOTklORyk7DQorCQkJZ3JpZERhdGFDb21iby5ob3Jpem9udGFsU3BhbiA9IDE7DQorCQkJYWxnb3JpdGhtQ29tYm8uc2V0TGF5b3V0RGF0YShncmlkRGF0YUNvbWJvKTsNCisNCisJCQlMYWJlbCBzZXBhcmF0b3IgPSBuZXcgTGFiZWwoY29tcG9zaXRlLCBTV1QuU0VQQVJBVE9SIHwgU1dULkhPUklaT05UQUwpOw0KKwkJCUdyaWREYXRhIHNlcERhdGEgPSBuZXcgR3JpZERhdGEoU1dULkZJTEwsIFNXVC5UT1AsIHRydWUsIGZhbHNlKTsNCisJCQlzZXBEYXRhLmhvcml6b250YWxTcGFuID0gMjsNCisJCQlzZXBhcmF0b3Iuc2V0TGF5b3V0RGF0YShzZXBEYXRhKTsNCisNCisJCQlhbGdDb250cm9sID0gbmV3IEFsZ29yaXRobUNvbnRyb2woY29tcG9zaXRlLCBTV1QuTk9ORSwgcHJvamVjdFZhbGlkYXRvciwgdGhpcy5nZXRTZWxlY3RlZFByb2plY3QoKSwgYWxnb3JpdGhtcyk7DQorCQkJDQorCQkJR3JpZERhdGEgZ3JpZERhdGFBQ29udHJvbCA9IG5ldyBHcmlkRGF0YShTV1QuRklMTCxTV1QuQ0VOVEVSLCB0cnVlLCBmYWxzZSwgMiwgMSk7DQorLy8JCQlncmlkRGF0YUFDb250cm9sLmhvcml6b250YWxBbGlnbm1lbnQgPSAyOw0KKwkJCWFsZ0NvbnRyb2wuc2V0TGF5b3V0RGF0YShncmlkRGF0YUFDb250cm9sKTsNCisJCQkJCQkJDQorCQkJcmV0dXJuIGNvbXBvc2l0ZTsNCisJCX0NCisJCQ0KKwkJcHJpdmF0ZSBPcHRpbWl6ZXJBbGdvcml0aG1bXSBhbGdvcml0aG1zOw0KKwkJDQorCQlwcml2YXRlIHZvaWQgaW5pdGlhbGl6ZUFsZ29yaXRobXNDb21ibygpIHsNCisJCQkNCisJCQlmaW5hbCBJRXh0ZW5zaW9uUmVnaXN0cnkgcmVnaXN0cnkgPSBQbGF0Zm9ybS5nZXRFeHRlbnNpb25SZWdpc3RyeSgpOw0KKwkJCWZpbmFsIElDb25maWd1cmF0aW9uRWxlbWVudFtdIGFsZ29yaXRobXNDb25maWdFbGVtZW50cyA9IHJlZ2lzdHJ5DQorCQkJCQkuZ2V0Q29uZmlndXJhdGlvbkVsZW1lbnRzRm9yKG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuYXV0b21hdGljZXhwZXJpbWVudC5Db25zdGFudHMuSURfQUxHT1JJVEhNX0VYVEVOU0lPTl9QT0lOVCk7DQorDQorCQkJCWZpbmFsIGphdmEudXRpbC5MaXN0PElkZW50aWZpYWJsZT4gdGVtcCA9IG5ldyBBcnJheUxpc3Q8SWRlbnRpZmlhYmxlPigpOw0KKw0KKwkJCQlhbGdvcml0aG1zID0gbmV3IE9wdGltaXplckFsZ29yaXRobVthbGdvcml0aG1zQ29uZmlnRWxlbWVudHMubGVuZ3RoXTsNCisNCisJCQkJZm9yIChpbnQgaSA9IDA7IGkgPCBhbGdvcml0aG1zQ29uZmlnRWxlbWVudHMubGVuZ3RoOyBpKyspIHsNCisJCQkJCWZpbmFsIElDb25maWd1cmF0aW9uRWxlbWVudCBlbGVtZW50ID0gYWxnb3JpdGhtc0NvbmZpZ0VsZW1lbnRzW2ldOw0KKwkJCQkJLy8gRG9lcyB0aGUgZWxlbWVudCBzcGVjaWZ5IHRoZSBjbGFzcyBvZiB0aGUgZGlzZWFzZSBtb2RlbD8NCisJCQkJCWlmIChlbGVtZW50LmdldE5hbWUoKS5lcXVhbHMob3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5hdXRvbWF0aWNleHBlcmltZW50LkNvbnN0YW50cy5BTEdPUklUSE1fRUxFTUVOVCkpIHsNCisJCQkJCQkvLyBZZXMNCisJCQkJCQl0cnkgew0KKwkJCQkJCQl0ZW1wLmFkZCgoT3B0aW1pemVyQWxnb3JpdGhtKSBlbGVtZW50DQorCQkJCQkJCQkJLmNyZWF0ZUV4ZWN1dGFibGVFeHRlbnNpb24oTWVzc2FnZXMuZ2V0U3RyaW5nKCJBTEcuMSIpKSk7IC8vJE5PTi1OTFMtMSQNCisJCQkJCQl9IGNhdGNoIChmaW5hbCBDb3JlRXhjZXB0aW9uIGUpIHsNCisJCQkJCQkJQWN0aXZhdG9yLmxvZ0Vycm9yKA0KKwkJCQkJCQkJCU1lc3NhZ2VzLmdldFN0cmluZygiQUxHLjMiKSwgZSk7IC8vJE5PTi1OTFMtMSQNCisJCQkJCQl9DQorCQkJCQl9IC8vIGlmDQorCQkJCX0gLy8gZm9yIGVhY2ggY29uZmlndXJhdGlvbiBlbGVtZW50DQorDQorCQkJCWFsZ29yaXRobXMgPSB0ZW1wLnRvQXJyYXkobmV3IE9wdGltaXplckFsZ29yaXRobVtdIHt9KTsNCisJCQ0KKw0KKwkJCWZvcihpbnQgaT0wO2k8YWxnb3JpdGhtcy5sZW5ndGg7KytpKQ0KKwkJCQlhbGdvcml0aG1Db21iby5hZGQoYWxnb3JpdGhtc1tpXS5lQ2xhc3MoKS5nZXROYW1lKCkpOw0KKwkJCWFsZ29yaXRobUNvbWJvLnNlbGVjdCgwKTsNCisJCX0NCisNCisNCisNCisJCS8qKg0KKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnVpLndpemFyZHMuTmV3SWRlbnRpZmlhYmxlUGFnZSN2YWxpZGF0ZVBhZ2UoKQ0KKwkJICovDQorCQlAT3ZlcnJpZGUNCisJCXByb3RlY3RlZCBib29sZWFuIHZhbGlkYXRlUGFnZSgpIHsNCisJCQlib29sZWFuIHJldFZhbHVlID0gc3VwZXIudmFsaWRhdGVQYWdlKCk7DQorCQkJaWYocmV0VmFsdWUpIHsNCisJCQkJc2V0RXJyb3JNZXNzYWdlKG51bGwpOw0KKwkJCQlyZXRWYWx1ZSA9IGFsZ0NvbnRyb2wudmFsaWRhdGUoKTsNCisJCQkJLy8gRXJyb3I/DQorCQkJCWlmICghcmV0VmFsdWUpIHsNCisJCQkJCS8vIFllcw0KKwkJCQkJc2V0RXJyb3JNZXNzYWdlKGFsZ0NvbnRyb2wuZ2V0RXJyb3JNZXNzYWdlKCkpOw0KKwkJCQl9IC8vIGlmDQorCQkJCQ0KKwkJCX0NCisJCQlyZXR1cm4gcmV0VmFsdWU7DQorCQl9DQorDQorCQlAT3ZlcnJpZGUNCisJCXByb3RlY3RlZCBTdHJpbmcgZ2V0RENEZXNjcmlwdGlvbigpIHsNCisJCQlyZXR1cm4gIlNvbWUgZGVzY3JpcHRpb24gZ29lcyBoZXJlIjsNCisJCX0NCisJCQ0KKwl9DQorCQ0KKwkNCisJLyoqDQorCSAqIFRoaXMgY2xhc3MgaXMgYSB7QGxpbmsgSUhhbmRsZXJ9IGZvciB0aGUgY29tbWFuZCB0aGF0IGNyZWF0ZXMgYQ0KKwkgKiB7QGxpbmsgTmV3QXV0b21hdGljRXhwZXJpbWVudFdpemFyZH0NCisJICovDQorCXB1YmxpYyBzdGF0aWMgY2xhc3MgTmV3QXV0b21hdGljRXhwZXJpbWVudFdpemFyZENvbW1hbmRIYW5kbGVyIGV4dGVuZHMgQWJzdHJhY3RIYW5kbGVyDQorCQkJaW1wbGVtZW50cyBJSGFuZGxlciB7DQorDQorCQkvKioNCisJCSAqIEBzZWUgb3JnLmVjbGlwc2UuY29yZS5jb21tYW5kcy5BYnN0cmFjdEhhbmRsZXIjZXhlY3V0ZShvcmcuZWNsaXBzZS5jb3JlLmNvbW1hbmRzLkV4ZWN1dGlvbkV2ZW50KQ0KKwkJICovDQorCQlwdWJsaWMgT2JqZWN0IGV4ZWN1dGUoZmluYWwgRXhlY3V0aW9uRXZlbnQgZXhlY3V0aW9uRXZlbnQpDQorCQkJCXRocm93cyBFeGVjdXRpb25FeGNlcHRpb24gew0KKwkJCWZpbmFsIElXb3JrYmVuY2hXaW5kb3cgd2luZG93ID0gSGFuZGxlclV0aWwNCisJCQkJCS5nZXRBY3RpdmVXb3JrYmVuY2hXaW5kb3dDaGVja2VkKGV4ZWN1dGlvbkV2ZW50KTsNCisJCQlmaW5hbCBOZXdBdXRvbWF0aWNFeHBlcmltZW50V2l6YXJkIHdpemFyZCA9IG5ldyBOZXdBdXRvbWF0aWNFeHBlcmltZW50V2l6YXJkKCk7DQorCQkJd2l6YXJkLmluaXQod2luZG93LmdldFdvcmtiZW5jaCgpLCBTdHJ1Y3R1cmVkU2VsZWN0aW9uLkVNUFRZKTsNCisJCQlmaW5hbCBXaXphcmREaWFsb2cgd2l6YXJkRGlhbG9nID0gbmV3IFNURU1XaXphcmREaWFsb2cod2luZG93DQorCQkJCQkuZ2V0U2hlbGwoKSwgd2l6YXJkKTsNCisJCQl3aXphcmREaWFsb2cub3BlbigpOw0KKwkJCXJldHVybiBudWxsOw0KKwkJfSAvLyBleGVjdXRlDQorCX0NCit9DQpkaWZmIC0tZ2l0IGEvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5hdXRvbWF0aWNleHBlcmltZW50L3NyYy9vcmcvZWNsaXBzZS9zdGVtL2FuYWx5c2lzL2F1dG9tYXRpY2V4cGVyaW1lbnQvdXRpbC9BdXRvbWF0aWNleHBlcmltZW50QWRhcHRlckZhY3RvcnkuamF2YSBiL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuYXV0b21hdGljZXhwZXJpbWVudC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9hbmFseXNpcy9hdXRvbWF0aWNleHBlcmltZW50L3V0aWwvQXV0b21hdGljZXhwZXJpbWVudEFkYXB0ZXJGYWN0b3J5LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzE2Njk3OAotLS0gL2Rldi9udWxsCisrKyBiL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuYXV0b21hdGljZXhwZXJpbWVudC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9hbmFseXNpcy9hdXRvbWF0aWNleHBlcmltZW50L3V0aWwvQXV0b21hdGljZXhwZXJpbWVudEFkYXB0ZXJGYWN0b3J5LmphdmEKQEAgLTAsMCArMSwyMDMgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5hdXRvbWF0aWNleHBlcmltZW50LnV0aWw7DQorDQorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisgKiBDb3B5cmlnaHQgKGMpIDIwMDkgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuDQorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscw0KKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMA0KKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0DQorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwNCisgKg0KKyAqIENvbnRyaWJ1dG9yczoNCisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uDQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQorDQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LkFkYXB0ZXI7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWVyOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5pbXBsLkFkYXB0ZXJGYWN0b3J5SW1wbDsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3Q7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuYXV0b21hdGljZXhwZXJpbWVudC5BdXRvbWF0aWNFeHBlcmltZW50Ow0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQuQXV0b21hdGljZXhwZXJpbWVudFBhY2thZ2U7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuYXV0b21hdGljZXhwZXJpbWVudC5Nb2RpZmlhYmxlUGFyYW1ldGVyOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQuT3B0aW1pemVyQWxnb3JpdGhtOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLklkZW50aWZpYWJsZTsNCisNCisNCisvKioNCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKyAqIFRoZSA8Yj5BZGFwdGVyIEZhY3Rvcnk8L2I+IGZvciB0aGUgbW9kZWwuDQorICogSXQgcHJvdmlkZXMgYW4gYWRhcHRlciA8Y29kZT5jcmVhdGVYWFg8L2NvZGU+IG1ldGhvZCBmb3IgZWFjaCBjbGFzcyBvZiB0aGUgbW9kZWwuDQorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQuQXV0b21hdGljZXhwZXJpbWVudFBhY2thZ2UNCisgKiBAZ2VuZXJhdGVkDQorICovDQorcHVibGljIGNsYXNzIEF1dG9tYXRpY2V4cGVyaW1lbnRBZGFwdGVyRmFjdG9yeSBleHRlbmRzIEFkYXB0ZXJGYWN0b3J5SW1wbCB7DQorCS8qKg0KKwkgKiBUaGUgY2FjaGVkIG1vZGVsIHBhY2thZ2UuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgc3RhdGljIEF1dG9tYXRpY2V4cGVyaW1lbnRQYWNrYWdlIG1vZGVsUGFja2FnZTsNCisNCisJLyoqDQorCSAqIENyZWF0ZXMgYW4gaW5zdGFuY2Ugb2YgdGhlIGFkYXB0ZXIgZmFjdG9yeS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBBdXRvbWF0aWNleHBlcmltZW50QWRhcHRlckZhY3RvcnkoKSB7DQorCQlpZiAobW9kZWxQYWNrYWdlID09IG51bGwpIHsNCisJCQltb2RlbFBhY2thZ2UgPSBBdXRvbWF0aWNleHBlcmltZW50UGFja2FnZS5lSU5TVEFOQ0U7DQorCQl9DQorCX0NCisNCisJLyoqDQorCSAqIFJldHVybnMgd2hldGhlciB0aGlzIGZhY3RvcnkgaXMgYXBwbGljYWJsZSBmb3IgdGhlIHR5cGUgb2YgdGhlIG9iamVjdC4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIDxjb2RlPnRydWU8L2NvZGU+IGlmIHRoZSBvYmplY3QgaXMgZWl0aGVyIHRoZSBtb2RlbCdzIHBhY2thZ2Ugb3IgaXMgYW4gaW5zdGFuY2Ugb2JqZWN0IG9mIHRoZSBtb2RlbC4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEByZXR1cm4gd2hldGhlciB0aGlzIGZhY3RvcnkgaXMgYXBwbGljYWJsZSBmb3IgdGhlIHR5cGUgb2YgdGhlIG9iamVjdC4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJQE92ZXJyaWRlDQorCXB1YmxpYyBib29sZWFuIGlzRmFjdG9yeUZvclR5cGUoT2JqZWN0IG9iamVjdCkgew0KKwkJaWYgKG9iamVjdCA9PSBtb2RlbFBhY2thZ2UpIHsNCisJCQlyZXR1cm4gdHJ1ZTsNCisJCX0NCisJCWlmIChvYmplY3QgaW5zdGFuY2VvZiBFT2JqZWN0KSB7DQorCQkJcmV0dXJuICgoRU9iamVjdClvYmplY3QpLmVDbGFzcygpLmdldEVQYWNrYWdlKCkgPT0gbW9kZWxQYWNrYWdlOw0KKwkJfQ0KKwkJcmV0dXJuIGZhbHNlOw0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGUgc3dpdGNoIHRoYXQgZGVsZWdhdGVzIHRvIHRoZSA8Y29kZT5jcmVhdGVYWFg8L2NvZGU+IG1ldGhvZHMuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgQXV0b21hdGljZXhwZXJpbWVudFN3aXRjaDxBZGFwdGVyPiBtb2RlbFN3aXRjaCA9DQorCQluZXcgQXV0b21hdGljZXhwZXJpbWVudFN3aXRjaDxBZGFwdGVyPigpIHsNCisJCQlAT3ZlcnJpZGUNCisJCQlwdWJsaWMgQWRhcHRlciBjYXNlQXV0b21hdGljRXhwZXJpbWVudChBdXRvbWF0aWNFeHBlcmltZW50IG9iamVjdCkgew0KKwkJCQlyZXR1cm4gY3JlYXRlQXV0b21hdGljRXhwZXJpbWVudEFkYXB0ZXIoKTsNCisJCQl9DQorCQkJQE92ZXJyaWRlDQorCQkJcHVibGljIEFkYXB0ZXIgY2FzZU1vZGlmaWFibGVQYXJhbWV0ZXIoTW9kaWZpYWJsZVBhcmFtZXRlciBvYmplY3QpIHsNCisJCQkJcmV0dXJuIGNyZWF0ZU1vZGlmaWFibGVQYXJhbWV0ZXJBZGFwdGVyKCk7DQorCQkJfQ0KKwkJCUBPdmVycmlkZQ0KKwkJCXB1YmxpYyBBZGFwdGVyIGNhc2VPcHRpbWl6ZXJBbGdvcml0aG0oT3B0aW1pemVyQWxnb3JpdGhtIG9iamVjdCkgew0KKwkJCQlyZXR1cm4gY3JlYXRlT3B0aW1pemVyQWxnb3JpdGhtQWRhcHRlcigpOw0KKwkJCX0NCisJCQlAT3ZlcnJpZGUNCisJCQlwdWJsaWMgPFQ+IEFkYXB0ZXIgY2FzZUNvbXBhcmFibGUoQ29tcGFyYWJsZTxUPiBvYmplY3QpIHsNCisJCQkJcmV0dXJuIGNyZWF0ZUNvbXBhcmFibGVBZGFwdGVyKCk7DQorCQkJfQ0KKwkJCUBPdmVycmlkZQ0KKwkJCXB1YmxpYyBBZGFwdGVyIGNhc2VJZGVudGlmaWFibGUoSWRlbnRpZmlhYmxlIG9iamVjdCkgew0KKwkJCQlyZXR1cm4gY3JlYXRlSWRlbnRpZmlhYmxlQWRhcHRlcigpOw0KKwkJCX0NCisJCQlAT3ZlcnJpZGUNCisJCQlwdWJsaWMgQWRhcHRlciBkZWZhdWx0Q2FzZShFT2JqZWN0IG9iamVjdCkgew0KKwkJCQlyZXR1cm4gY3JlYXRlRU9iamVjdEFkYXB0ZXIoKTsNCisJCQl9DQorCQl9Ow0KKw0KKwkvKioNCisJICogQ3JlYXRlcyBhbiBhZGFwdGVyIGZvciB0aGUgPGNvZGU+dGFyZ2V0PC9jb2RlPi4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBwYXJhbSB0YXJnZXQgdGhlIG9iamVjdCB0byBhZGFwdC4NCisJICogQHJldHVybiB0aGUgYWRhcHRlciBmb3IgdGhlIDxjb2RlPnRhcmdldDwvY29kZT4uDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCUBPdmVycmlkZQ0KKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVBZGFwdGVyKE5vdGlmaWVyIHRhcmdldCkgew0KKwkJcmV0dXJuIG1vZGVsU3dpdGNoLmRvU3dpdGNoKChFT2JqZWN0KXRhcmdldCk7DQorCX0NCisNCisNCisJLyoqDQorCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5hdXRvbWF0aWNleHBlcmltZW50LkF1dG9tYXRpY0V4cGVyaW1lbnQgPGVtPkF1dG9tYXRpYyBFeHBlcmltZW50PC9lbT59Jy4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOw0KKwkgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLg0KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuYXV0b21hdGljZXhwZXJpbWVudC5BdXRvbWF0aWNFeHBlcmltZW50DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZUF1dG9tYXRpY0V4cGVyaW1lbnRBZGFwdGVyKCkgew0KKwkJcmV0dXJuIG51bGw7DQorCX0NCisNCisJLyoqDQorCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5hdXRvbWF0aWNleHBlcmltZW50Lk1vZGlmaWFibGVQYXJhbWV0ZXIgPGVtPk1vZGlmaWFibGUgUGFyYW1ldGVyPC9lbT59Jy4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOw0KKwkgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLg0KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuYXV0b21hdGljZXhwZXJpbWVudC5Nb2RpZmlhYmxlUGFyYW1ldGVyDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZU1vZGlmaWFibGVQYXJhbWV0ZXJBZGFwdGVyKCkgew0KKwkJcmV0dXJuIG51bGw7DQorCX0NCisNCisJLyoqDQorCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5hdXRvbWF0aWNleHBlcmltZW50Lk9wdGltaXplckFsZ29yaXRobSA8ZW0+T3B0aW1pemVyIEFsZ29yaXRobTwvZW0+fScuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsNCisJICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuDQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4NCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQuT3B0aW1pemVyQWxnb3JpdGhtDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZU9wdGltaXplckFsZ29yaXRobUFkYXB0ZXIoKSB7DQorCQlyZXR1cm4gbnVsbDsNCisJfQ0KKw0KKwkvKioNCisJICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBqYXZhLmxhbmcuQ29tcGFyYWJsZSA8ZW0+Q29tcGFyYWJsZTwvZW0+fScuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsNCisJICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuDQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4NCisJICogQHNlZSBqYXZhLmxhbmcuQ29tcGFyYWJsZQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVDb21wYXJhYmxlQWRhcHRlcigpIHsNCisJCXJldHVybiBudWxsOw0KKwl9DQorDQorCS8qKg0KKwkgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uSWRlbnRpZmlhYmxlIDxlbT5JZGVudGlmaWFibGU8L2VtPn0nLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7DQorCSAqIGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZSB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5Lg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuDQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5JZGVudGlmaWFibGUNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlSWRlbnRpZmlhYmxlQWRhcHRlcigpIHsNCisJCXJldHVybiBudWxsOw0KKwl9DQorDQorCS8qKg0KKwkgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIHRoZSBkZWZhdWx0IGNhc2UuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwuDQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlRU9iamVjdEFkYXB0ZXIoKSB7DQorCQlyZXR1cm4gbnVsbDsNCisJfQ0KKw0KK30gLy9BdXRvbWF0aWNleHBlcmltZW50QWRhcHRlckZhY3RvcnkNCmRpZmYgLS1naXQgYS9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQvc3JjL29yZy9lY2xpcHNlL3N0ZW0vYW5hbHlzaXMvYXV0b21hdGljZXhwZXJpbWVudC91dGlsL0F1dG9tYXRpY2V4cGVyaW1lbnRTd2l0Y2guamF2YSBiL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuYXV0b21hdGljZXhwZXJpbWVudC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9hbmFseXNpcy9hdXRvbWF0aWNleHBlcmltZW50L3V0aWwvQXV0b21hdGljZXhwZXJpbWVudFN3aXRjaC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMzYzJlNDcKLS0tIC9kZXYvbnVsbAorKysgYi9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQvc3JjL29yZy9lY2xpcHNlL3N0ZW0vYW5hbHlzaXMvYXV0b21hdGljZXhwZXJpbWVudC91dGlsL0F1dG9tYXRpY2V4cGVyaW1lbnRTd2l0Y2guamF2YQpAQCAtMCwwICsxLDIxNiBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQudXRpbDsNCisNCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyAqIENvcHlyaWdodCAoYykgMjAwOSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4NCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzDQorICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wDQorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQNCisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbA0KKyAqDQorICogQ29udHJpYnV0b3JzOg0KKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24NCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCisNCitpbXBvcnQgamF2YS51dGlsLkxpc3Q7DQorDQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0Ow0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQuQXV0b21hdGljRXhwZXJpbWVudDsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5hdXRvbWF0aWNleHBlcmltZW50LkF1dG9tYXRpY2V4cGVyaW1lbnRQYWNrYWdlOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQuTW9kaWZpYWJsZVBhcmFtZXRlcjsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5hdXRvbWF0aWNleHBlcmltZW50Lk9wdGltaXplckFsZ29yaXRobTsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5JZGVudGlmaWFibGU7DQorDQorDQorLyoqDQorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisgKiBUaGUgPGI+U3dpdGNoPC9iPiBmb3IgdGhlIG1vZGVsJ3MgaW5oZXJpdGFuY2UgaGllcmFyY2h5Lg0KKyAqIEl0IHN1cHBvcnRzIHRoZSBjYWxsIHtAbGluayAjZG9Td2l0Y2goRU9iamVjdCkgZG9Td2l0Y2gob2JqZWN0KX0NCisgKiB0byBpbnZva2UgdGhlIDxjb2RlPmNhc2VYWFg8L2NvZGU+IG1ldGhvZCBmb3IgZWFjaCBjbGFzcyBvZiB0aGUgbW9kZWwsDQorICogc3RhcnRpbmcgd2l0aCB0aGUgYWN0dWFsIGNsYXNzIG9mIHRoZSBvYmplY3QNCisgKiBhbmQgcHJvY2VlZGluZyB1cCB0aGUgaW5oZXJpdGFuY2UgaGllcmFyY2h5DQorICogdW50aWwgYSBub24tbnVsbCByZXN1bHQgaXMgcmV0dXJuZWQsDQorICogd2hpY2ggaXMgdGhlIHJlc3VsdCBvZiB0aGUgc3dpdGNoLg0KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKyAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5hdXRvbWF0aWNleHBlcmltZW50LkF1dG9tYXRpY2V4cGVyaW1lbnRQYWNrYWdlDQorICogQGdlbmVyYXRlZA0KKyAqLw0KK3B1YmxpYyBjbGFzcyBBdXRvbWF0aWNleHBlcmltZW50U3dpdGNoPFQxPiB7DQorCS8qKg0KKwkgKiBUaGUgY2FjaGVkIG1vZGVsIHBhY2thZ2UNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCBzdGF0aWMgQXV0b21hdGljZXhwZXJpbWVudFBhY2thZ2UgbW9kZWxQYWNrYWdlOw0KKw0KKwkvKioNCisJICogQ3JlYXRlcyBhbiBpbnN0YW5jZSBvZiB0aGUgc3dpdGNoLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIEF1dG9tYXRpY2V4cGVyaW1lbnRTd2l0Y2goKSB7DQorCQlpZiAobW9kZWxQYWNrYWdlID09IG51bGwpIHsNCisJCQltb2RlbFBhY2thZ2UgPSBBdXRvbWF0aWNleHBlcmltZW50UGFja2FnZS5lSU5TVEFOQ0U7DQorCQl9DQorCX0NCisNCisJLyoqDQorCSAqIENhbGxzIDxjb2RlPmNhc2VYWFg8L2NvZGU+IGZvciBlYWNoIGNsYXNzIG9mIHRoZSBtb2RlbCB1bnRpbCBvbmUgcmV0dXJucyBhIG5vbiBudWxsIHJlc3VsdDsgaXQgeWllbGRzIHRoYXQgcmVzdWx0Lg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHJldHVybiB0aGUgZmlyc3Qgbm9uLW51bGwgcmVzdWx0IHJldHVybmVkIGJ5IGEgPGNvZGU+Y2FzZVhYWDwvY29kZT4gY2FsbC4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIFQxIGRvU3dpdGNoKEVPYmplY3QgdGhlRU9iamVjdCkgew0KKwkJcmV0dXJuIGRvU3dpdGNoKHRoZUVPYmplY3QuZUNsYXNzKCksIHRoZUVPYmplY3QpOw0KKwl9DQorDQorCS8qKg0KKwkgKiBDYWxscyA8Y29kZT5jYXNlWFhYPC9jb2RlPiBmb3IgZWFjaCBjbGFzcyBvZiB0aGUgbW9kZWwgdW50aWwgb25lIHJldHVybnMgYSBub24gbnVsbCByZXN1bHQ7IGl0IHlpZWxkcyB0aGF0IHJlc3VsdC4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEByZXR1cm4gdGhlIGZpcnN0IG5vbi1udWxsIHJlc3VsdCByZXR1cm5lZCBieSBhIDxjb2RlPmNhc2VYWFg8L2NvZGU+IGNhbGwuDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCBUMSBkb1N3aXRjaChFQ2xhc3MgdGhlRUNsYXNzLCBFT2JqZWN0IHRoZUVPYmplY3QpIHsNCisJCWlmICh0aGVFQ2xhc3MuZUNvbnRhaW5lcigpID09IG1vZGVsUGFja2FnZSkgew0KKwkJCXJldHVybiBkb1N3aXRjaCh0aGVFQ2xhc3MuZ2V0Q2xhc3NpZmllcklEKCksIHRoZUVPYmplY3QpOw0KKwkJfQ0KKwkJZWxzZSB7DQorCQkJTGlzdDxFQ2xhc3M+IGVTdXBlclR5cGVzID0gdGhlRUNsYXNzLmdldEVTdXBlclR5cGVzKCk7DQorCQkJcmV0dXJuDQorCQkJCWVTdXBlclR5cGVzLmlzRW1wdHkoKSA/DQorCQkJCQlkZWZhdWx0Q2FzZSh0aGVFT2JqZWN0KSA6DQorCQkJCQlkb1N3aXRjaChlU3VwZXJUeXBlcy5nZXQoMCksIHRoZUVPYmplY3QpOw0KKwkJfQ0KKwl9DQorDQorCS8qKg0KKwkgKiBDYWxscyA8Y29kZT5jYXNlWFhYPC9jb2RlPiBmb3IgZWFjaCBjbGFzcyBvZiB0aGUgbW9kZWwgdW50aWwgb25lIHJldHVybnMgYSBub24gbnVsbCByZXN1bHQ7IGl0IHlpZWxkcyB0aGF0IHJlc3VsdC4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEByZXR1cm4gdGhlIGZpcnN0IG5vbi1udWxsIHJlc3VsdCByZXR1cm5lZCBieSBhIDxjb2RlPmNhc2VYWFg8L2NvZGU+IGNhbGwuDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCBUMSBkb1N3aXRjaChpbnQgY2xhc3NpZmllcklELCBFT2JqZWN0IHRoZUVPYmplY3QpIHsNCisJCXN3aXRjaCAoY2xhc3NpZmllcklEKSB7DQorCQkJY2FzZSBBdXRvbWF0aWNleHBlcmltZW50UGFja2FnZS5BVVRPTUFUSUNfRVhQRVJJTUVOVDogew0KKwkJCQlBdXRvbWF0aWNFeHBlcmltZW50IGF1dG9tYXRpY0V4cGVyaW1lbnQgPSAoQXV0b21hdGljRXhwZXJpbWVudCl0aGVFT2JqZWN0Ow0KKwkJCQlUMSByZXN1bHQgPSBjYXNlQXV0b21hdGljRXhwZXJpbWVudChhdXRvbWF0aWNFeHBlcmltZW50KTsNCisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlT3B0aW1pemVyQWxnb3JpdGhtKGF1dG9tYXRpY0V4cGVyaW1lbnQpOw0KKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VJZGVudGlmaWFibGUoYXV0b21hdGljRXhwZXJpbWVudCk7DQorCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZUNvbXBhcmFibGUoYXV0b21hdGljRXhwZXJpbWVudCk7DQorCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gZGVmYXVsdENhc2UodGhlRU9iamVjdCk7DQorCQkJCXJldHVybiByZXN1bHQ7DQorCQkJfQ0KKwkJCWNhc2UgQXV0b21hdGljZXhwZXJpbWVudFBhY2thZ2UuTU9ESUZJQUJMRV9QQVJBTUVURVI6IHsNCisJCQkJTW9kaWZpYWJsZVBhcmFtZXRlciBtb2RpZmlhYmxlUGFyYW1ldGVyID0gKE1vZGlmaWFibGVQYXJhbWV0ZXIpdGhlRU9iamVjdDsNCisJCQkJVDEgcmVzdWx0ID0gY2FzZU1vZGlmaWFibGVQYXJhbWV0ZXIobW9kaWZpYWJsZVBhcmFtZXRlcik7DQorCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gZGVmYXVsdENhc2UodGhlRU9iamVjdCk7DQorCQkJCXJldHVybiByZXN1bHQ7DQorCQkJfQ0KKwkJCWNhc2UgQXV0b21hdGljZXhwZXJpbWVudFBhY2thZ2UuT1BUSU1JWkVSX0FMR09SSVRITTogew0KKwkJCQlPcHRpbWl6ZXJBbGdvcml0aG0gb3B0aW1pemVyQWxnb3JpdGhtID0gKE9wdGltaXplckFsZ29yaXRobSl0aGVFT2JqZWN0Ow0KKwkJCQlUMSByZXN1bHQgPSBjYXNlT3B0aW1pemVyQWxnb3JpdGhtKG9wdGltaXplckFsZ29yaXRobSk7DQorCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZUlkZW50aWZpYWJsZShvcHRpbWl6ZXJBbGdvcml0aG0pOw0KKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VDb21wYXJhYmxlKG9wdGltaXplckFsZ29yaXRobSk7DQorCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gZGVmYXVsdENhc2UodGhlRU9iamVjdCk7DQorCQkJCXJldHVybiByZXN1bHQ7DQorCQkJfQ0KKwkJCWRlZmF1bHQ6IHJldHVybiBkZWZhdWx0Q2FzZSh0aGVFT2JqZWN0KTsNCisJCX0NCisJfQ0KKw0KKwkvKioNCisJICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+QXV0b21hdGljIEV4cGVyaW1lbnQ8L2VtPicuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOw0KKwkgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLg0KKwkgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5BdXRvbWF0aWMgRXhwZXJpbWVudDwvZW0+Jy4NCisJICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBUMSBjYXNlQXV0b21hdGljRXhwZXJpbWVudChBdXRvbWF0aWNFeHBlcmltZW50IG9iamVjdCkgew0KKwkJcmV0dXJuIG51bGw7DQorCX0NCisNCisJLyoqDQorCSAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPk1vZGlmaWFibGUgUGFyYW1ldGVyPC9lbT4nLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsNCisJICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guDQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4NCisJICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+TW9kaWZpYWJsZSBQYXJhbWV0ZXI8L2VtPicuDQorCSAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgVDEgY2FzZU1vZGlmaWFibGVQYXJhbWV0ZXIoTW9kaWZpYWJsZVBhcmFtZXRlciBvYmplY3QpIHsNCisJCXJldHVybiBudWxsOw0KKwl9DQorDQorCS8qKg0KKwkgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5PcHRpbWl6ZXIgQWxnb3JpdGhtPC9lbT4nLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsNCisJICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guDQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4NCisJICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+T3B0aW1pemVyIEFsZ29yaXRobTwvZW0+Jy4NCisJICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBUMSBjYXNlT3B0aW1pemVyQWxnb3JpdGhtKE9wdGltaXplckFsZ29yaXRobSBvYmplY3QpIHsNCisJCXJldHVybiBudWxsOw0KKwl9DQorDQorCS8qKg0KKwkgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5Db21wYXJhYmxlPC9lbT4nLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsNCisJICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guDQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4NCisJICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+Q29tcGFyYWJsZTwvZW0+Jy4NCisJICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyA8VD4gVDEgY2FzZUNvbXBhcmFibGUoQ29tcGFyYWJsZTxUPiBvYmplY3QpIHsNCisJCXJldHVybiBudWxsOw0KKwl9DQorDQorCS8qKg0KKwkgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5JZGVudGlmaWFibGU8L2VtPicuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOw0KKwkgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLg0KKwkgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5JZGVudGlmaWFibGU8L2VtPicuDQorCSAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgVDEgY2FzZUlkZW50aWZpYWJsZShJZGVudGlmaWFibGUgb2JqZWN0KSB7DQorCQlyZXR1cm4gbnVsbDsNCisJfQ0KKw0KKwkvKioNCisJICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+RU9iamVjdDwvZW0+Jy4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7DQorCSAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLCBidXQgdGhpcyBpcyB0aGUgbGFzdCBjYXNlIGFueXdheS4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLg0KKwkgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5FT2JqZWN0PC9lbT4nLg0KKwkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIFQxIGRlZmF1bHRDYXNlKEVPYmplY3Qgb2JqZWN0KSB7DQorCQlyZXR1cm4gbnVsbDsNCisJfQ0KKw0KK30gLy9BdXRvbWF0aWNleHBlcmltZW50U3dpdGNoDQpkaWZmIC0tZ2l0IGEvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5hdXRvbWF0aWNleHBlcmltZW50L3NyYy9vcmcvZWNsaXBzZS9zdGVtL2FuYWx5c2lzL2F1dG9tYXRpY2V4cGVyaW1lbnQvdmlld3MvQWdncmVnYXRlVGltZVNlcmllc0NhbnZhcy5qYXZhIGIvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5hdXRvbWF0aWNleHBlcmltZW50L3NyYy9vcmcvZWNsaXBzZS9zdGVtL2FuYWx5c2lzL2F1dG9tYXRpY2V4cGVyaW1lbnQvdmlld3MvQWdncmVnYXRlVGltZVNlcmllc0NhbnZhcy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhlYzI1NWQKLS0tIC9kZXYvbnVsbAorKysgYi9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQvc3JjL29yZy9lY2xpcHNlL3N0ZW0vYW5hbHlzaXMvYXV0b21hdGljZXhwZXJpbWVudC92aWV3cy9BZ2dyZWdhdGVUaW1lU2VyaWVzQ2FudmFzLmphdmEKQEAgLTAsMCArMSwxMjQ3IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuYXV0b21hdGljZXhwZXJpbWVudC52aWV3czsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OworaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOworaW1wb3J0IGphdmEudXRpbC5MaXN0OworaW1wb3J0IGphdmEudXRpbC5NYXA7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5iaXJ0LmNoYXJ0LmRldmljZS5JRGV2aWNlUmVuZGVyZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuYmlydC5jaGFydC5leGNlcHRpb24uQ2hhcnRFeGNlcHRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuYmlydC5jaGFydC5mYWN0b3J5LkdlbmVyYXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5iaXJ0LmNoYXJ0Lm1vZGVsLkNoYXJ0OworaW1wb3J0IG9yZy5lY2xpcHNlLmJpcnQuY2hhcnQubW9kZWwuQ2hhcnRXaXRoQXhlczsKK2ltcG9ydCBvcmcuZWNsaXBzZS5iaXJ0LmNoYXJ0Lm1vZGVsLmF0dHJpYnV0ZS5BbmNob3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuYmlydC5jaGFydC5tb2RlbC5hdHRyaWJ1dGUuQXhpc1R5cGU7CitpbXBvcnQgb3JnLmVjbGlwc2UuYmlydC5jaGFydC5tb2RlbC5hdHRyaWJ1dGUuQm91bmRzOworaW1wb3J0IG9yZy5lY2xpcHNlLmJpcnQuY2hhcnQubW9kZWwuYXR0cmlidXRlLkNvbG9yRGVmaW5pdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5iaXJ0LmNoYXJ0Lm1vZGVsLmF0dHJpYnV0ZS5JbnRlcnNlY3Rpb25UeXBlOworaW1wb3J0IG9yZy5lY2xpcHNlLmJpcnQuY2hhcnQubW9kZWwuYXR0cmlidXRlLkxpbmVBdHRyaWJ1dGVzOworaW1wb3J0IG9yZy5lY2xpcHNlLmJpcnQuY2hhcnQubW9kZWwuYXR0cmlidXRlLkxpbmVTdHlsZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5iaXJ0LmNoYXJ0Lm1vZGVsLmF0dHJpYnV0ZS5Qb3NpdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5iaXJ0LmNoYXJ0Lm1vZGVsLmF0dHJpYnV0ZS5UaWNrU3R5bGU7CitpbXBvcnQgb3JnLmVjbGlwc2UuYmlydC5jaGFydC5tb2RlbC5hdHRyaWJ1dGUuaW1wbC5Cb3VuZHNJbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLmJpcnQuY2hhcnQubW9kZWwuYXR0cmlidXRlLmltcGwuQ29sb3JEZWZpbml0aW9uSW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5iaXJ0LmNoYXJ0Lm1vZGVsLmNvbXBvbmVudC5BeGlzOworaW1wb3J0IG9yZy5lY2xpcHNlLmJpcnQuY2hhcnQubW9kZWwuY29tcG9uZW50LlNlcmllczsKK2ltcG9ydCBvcmcuZWNsaXBzZS5iaXJ0LmNoYXJ0Lm1vZGVsLmNvbXBvbmVudC5pbXBsLlNlcmllc0ltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2UuYmlydC5jaGFydC5tb2RlbC5kYXRhLk51bWJlckRhdGFTZXQ7CitpbXBvcnQgb3JnLmVjbGlwc2UuYmlydC5jaGFydC5tb2RlbC5kYXRhLlNlcmllc0RlZmluaXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuYmlydC5jaGFydC5tb2RlbC5kYXRhLmltcGwuTnVtYmVyRGF0YUVsZW1lbnRJbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLmJpcnQuY2hhcnQubW9kZWwuZGF0YS5pbXBsLk51bWJlckRhdGFTZXRJbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLmJpcnQuY2hhcnQubW9kZWwuZGF0YS5pbXBsLlNlcmllc0RlZmluaXRpb25JbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLmJpcnQuY2hhcnQubW9kZWwuaW1wbC5DaGFydFdpdGhBeGVzSW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5iaXJ0LmNoYXJ0Lm1vZGVsLmxheW91dC5MZWdlbmQ7CitpbXBvcnQgb3JnLmVjbGlwc2UuYmlydC5jaGFydC5tb2RlbC5sYXlvdXQuUGxvdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5iaXJ0LmNoYXJ0Lm1vZGVsLnR5cGUuTGluZVNlcmllczsKK2ltcG9ydCBvcmcuZWNsaXBzZS5iaXJ0LmNoYXJ0Lm1vZGVsLnR5cGUuaW1wbC5TY2F0dGVyU2VyaWVzSW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5iaXJ0LmNoYXJ0LnV0aWwuUGx1Z2luU2V0dGluZ3M7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLkFjdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSUFjdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uTWVudU1hbmFnZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLlNlcGFyYXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQuQWN0aXZhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udWkucHJlZmVyZW5jZXMuVmlzdWFsaXphdGlvblByZWZlcmVuY2VQYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5TV1Q7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5QYWludEV2ZW50OworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuUGFpbnRMaXN0ZW5lcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZ3JhcGhpY3MuQ29sb3I7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmdyYXBoaWNzLkdDOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ncmFwaGljcy5JbWFnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5DYW52YXM7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLk1lbnU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuV2lkZ2V0OworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2hBY3Rpb25Db25zdGFudHM7CisKKy8qKgorICogQWdncmVnYXRlVGltZVNlcmllc0NhbnZhcyBpcyBhIHN1YmNsYXNzIG9mIHtAbGluayBDYW52YXN9IHN1aXRhYmxlIGZvciBjaGFydCBkcmF3aW5ncy4KKyAqLworcHVibGljIGNsYXNzIEFnZ3JlZ2F0ZVRpbWVTZXJpZXNDYW52YXMgZXh0ZW5kcyBDYW52YXMgeworCisJcHJvdGVjdGVkIElEZXZpY2VSZW5kZXJlciBpZHIgPSBudWxsOworCisJLyoqCisJICogVGhpcyBpcyB0aGUge0BsaW5rIENoYXJ0fSB0aGF0IHBsb3RzIHRoZSByZWxhdGl2ZSB2YWx1ZXMuCisJICovCisJcHJvdGVjdGVkIENoYXJ0IGNtID0gbnVsbDsKKworCS8qKgorCSAqIFRoZSBwcm92aWRlciBvZiByZWxhdGl2ZSB2YWx1ZXMuCisJICovCisJLy9wcml2YXRlIFJlbGF0aXZlVmFsdWVIaXN0b3J5UHJvdmlkZXIgcnZocDsKKworCXByaXZhdGUgQW5hbHlzaXNDb250cm9sIGNvbnRyb2wgPSBudWxsOworCQorCS8qKgorCSAqIHRoZSBpbmRleCBvZiB0aGlzIENoYXJ0CisJICovCisJcHJpdmF0ZSBpbnQgY2hhcnRJbmRleCA9IDA7CisJCisKKwkvKioKKwkgKiBzb21lIGV4dHJhIGNvbG9ycworCSAqLworCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgQ29sb3JEZWZpbml0aW9uW10gY29sb3JEZWZhdWx0ID0geworCQkJCQkJCQkJCQkJCQkJQ29sb3JEZWZpbml0aW9uSW1wbC5SRUQoKSwgCisJCQkJCQkJCQkJCQkJCQlDb2xvckRlZmluaXRpb25JbXBsLkdSRUVOKCksIAorCQkJCQkJCQkJCQkJCQkJQ29sb3JEZWZpbml0aW9uSW1wbC5CTFVFKCksIAorCQkJCQkJCQkJCQkJCQkJQ29sb3JEZWZpbml0aW9uSW1wbC5CTEFDSygpLCAKKwkJCQkJCQkJCQkJCQkJCUNvbG9yRGVmaW5pdGlvbkltcGwuR1JFWSgpLAorCQkJCQkJCQkJCQkJCQkJQ29sb3JEZWZpbml0aW9uSW1wbC5DWUFOKCksCisJCQkJCQkJCQkJCQkJCQlDb2xvckRlZmluaXRpb25JbXBsLk9SQU5HRSgpIAorCQkJCQkJCQkJCQkJCQkJfTsKKwkvKioKKwkgKiB1c2VkIGlmIHdlIG5lZWQgdG8gb3ZlcmxheSB0cmFjZXMgaW4gZGlmZmVyZW50IGNvbG9ycworCSAqLworCXByaXZhdGUgYm9vbGVhbiBvdmVybGF5TW9kZSA9IGZhbHNlOworCQorCQorCisJLyoqCisJICogQSBjb250ZXh0IG1lbnUgZm9yIHRoaXMgdmlldworCSAqLworCU1lbnUgcG9wVXBNZW51ID0gbnVsbDsKKwkKKwkvKioKKwkgKiBzZXQgeSBheGlzIHRvIGEgbGluZWFyIHNjYWxlCisJICovCisJcHJpdmF0ZSBMaW5lYXJTY2FsZUFjdGlvbiBsaW5lYXJUaW1lQWN0aW9uOworCS8qKgorCSAqIHNldCB5IGF4aXMgdG8gYSBsb2cgc2NhbGUKKwkgKi8KKwlwcml2YXRlIExvZ1NjYWxlQWN0aW9uIGxvZ1RpbWVBY3Rpb247CisJcHJvdGVjdGVkIGJvb2xlYW4gdXNlTGluZWFyVGltZVNjYWxlID0gdHJ1ZTsKKwkKKworCS8qKgorCSAqIHNob3cgdGhlIGxlZ2VuZCAodHJ1ZSBieSBkZWZhdWx0KQorCSAqLworCXByaXZhdGUgTGVnZW5kVmlld0FjdGlvbiB2aWV3TGVnZW5kOworCisJLyoqCisJICogaGlkZSB0aGUgbGVnZW5kIAorCSAqLworCXByaXZhdGUgTGVnZW5kSGlkZUFjdGlvbiBoaWRlTGVnZW5kOworCXByb3RlY3RlZCBib29sZWFuIHNob3dMZWdlbmQgPSB0cnVlOworCisJcHJvdGVjdGVkIExlZ2VuZCBsZWdlbmQgPSBudWxsOworCQorCisJLyoqCisJICogdGhpcyBpcyBhIG1hcCBvZiB0aGUgRGF0YVNlcmllcyBvYmplY3QgKGtleWVkIGJ5IHByb3BlcnR5IG5hbWUpCisJICovCisJcHJvdGVjdGVkIGZpbmFsIE1hcDxTdHJpbmcsRGF0YVNlcmllcz4gZGF0YVNlcmllc01hcCA9IG5ldyBIYXNoTWFwPFN0cmluZyxEYXRhU2VyaWVzPigpOworCQorCS8qKgorCSAqIEtlZXAgdHJhY2sgb2Ygd2hpY2ggdGltZXNlcmllcyBhcmUgdmlzaWJsZQorCSAqLworCQorCXByb3RlY3RlZCBNYXA8U3RyaW5nLCBCb29sZWFuPnZpc2libGVNYXAgPSAgbmV3IEhhc2hNYXA8U3RyaW5nLEJvb2xlYW4+KCk7CisKKworCS8qKgorCSAqIFRoZXNlIGFyZSB0aGUgY3ljbGUgbnVtYmVycyB0aGF0IG1hdGNoIHRoZSByZWxhdGl2ZSB2YWx1ZXMgdGhhdCB3aWxsIGJlCisJICogcGxvdHRlZAorCSAqIAorCSAqIEBzZWUgI3JlbGF0aXZlVmFsdWVzCisJICovCisJcHJpdmF0ZSBmaW5hbCBMaXN0PEludGVnZXI+IGN5Y2xlTnVtYmVycyA9IG5ldyBBcnJheUxpc3Q8SW50ZWdlcj4oKTsKKworCS8qKgorCSAqIENoYXJ0IGdlbmVyYXRvciBpbnN0YW5jZSAocmVmZXJlbmNlIHRvIGEgc2luZ2xldG9uKQorCSAqLworCUdlbmVyYXRvciBncjsKKworCUF4aXMgeUF4aXNQcmltYXJ5OworCUF4aXMgeEF4aXNQcmltYXJ5OworCS8qKgorCSAqIHRoZSBtYXhZIHZhbHVlIGZvciBzY2FsaW5nCisJICovCisJZG91YmxlIG1heFkgPSAtMS4wOworCisJLyoqCisJICogTG9nIG9mIHplcm8gaXMgbmVnYXRpdmUgaW5maW5pdHkgc28gZm9yIGVhY2ggbG9jYXRpb24gd2Ugd2lsbCBjdXQgb2ZmIHRoZSBtaW5pbXVtIAorCSAqIGF0IHRoZSBtaW4gTk9OWkVSTyBZIHZhbHVlCisJICovCisJcHJpdmF0ZSBkb3VibGUgbWluWXNjYWxlID0gMS4wOworCQorCQorCS8qKgorCSAqIExhYmVsIGZvciBsaW5lIHNlcmllcyBMRUdFTkQKKwkgKi8KKwlwdWJsaWMgU3RyaW5nIE9yZGluYXRlX0xFR0VORCA9ICJZIjsKKwkKKwkvKioKKwkgKiBMYWJlbCBmb3IgbGluZSBzZXJpZXMgWSBheGlzIGxhYmVsCisJICoqLworCXB1YmxpYyBTdHJpbmcgT3JkaW5hdGVfQVhJUyA9ICJZIjsKKwkKKworCS8qKgorCSAqIExhYmVsIGZvciBsaW5lIHNlcmllcyBYIGF4aXMgbGFiZWwKKwkgKiovCisJcHVibGljIFN0cmluZyBYX0FYSVMgPSAiWCI7CisJCisJLyoqIAorCSAqIGN1c3RvbWl6YWJsZSBjb2xvciBkZWZpbml0aW9ucworCSAqLworCXByaXZhdGUgQ29sb3JEZWZpbml0aW9uIGZvcmVHcm91bmQgPSBDb2xvckRlZmluaXRpb25JbXBsLldISVRFKCk7CisJcHJpdmF0ZSBDb2xvckRlZmluaXRpb24gYmFja2dyb3VuZEdyb3VuZCA9IENvbG9yRGVmaW5pdGlvbkltcGwuQkxBQ0soKTsKKwlwcml2YXRlIENvbG9yRGVmaW5pdGlvbiBmcmFtZUNvbG9yID0gQ29sb3JEZWZpbml0aW9uSW1wbC5jcmVhdGUoMTgwLCAxODAsIDIwMCk7CisKKwlJbWFnZSBpbWdDaGFydCA9IG51bGw7CisJCisJLyoqCisJICogVGhpcyBDb25zdHJ1Y3RvciBpcyB1c2VkIHdoZW4gd2Ugd2FudCB0byBwbGFjZSB0aGUgdGltZSBzZXJpZXMgaW4gYSBjb250YWluZXIKKwkgKiB3aGljaCBpcyBhIHN1YiBjb21wb25lbnQgb2YgdGhlIGFjdHVhbCBBbmFseXNpc0NvbnRyb2wKKwkgKiBAcGFyYW0gYW5hbHlzaXNDb250cm9sIAorCSAqIAorCSAqIEBwYXJhbSBwYXJlbnQgIHRoZSBTV1QgcGFyZW50IG9mIHRoZSB7QGxpbmsgV2lkZ2V0fQorCSAqIEBwYXJhbSBvcmRpbmF0ZVN0cmluZyAKKwkgKiBAcGFyYW0geUF4aXNMYWJlbCAKKwkgKiBAcGFyYW0geEF4aXNMYWJlbAorCSAqIEBwYXJhbSBmb3JlZ3JvdW5kIAorCSAqIEBwYXJhbSBiYWNrZ3JvdW5kIAorCSAqIEBwYXJhbSBmcmFtZWNvbG9yIAorCSAqIEBwYXJhbSBjaGFydEluZGV4IHRoZSBpbmRleCBvZiB0aGlzIGNoYXJ0ICgwIGlmIG9ubHkgb25lKQorCSAqIEBwYXJhbSBvdmVybGF5TW9kZSB1c2VkIGlmIHdlIG5lZWQgdG8gb3ZlcmxheSB0cmFjZXMgaW4gZGlmZmVyZW50IGNvbG9ycworCSAqLworCXB1YmxpYyBBZ2dyZWdhdGVUaW1lU2VyaWVzQ2FudmFzKGZpbmFsIEFuYWx5c2lzQ29udHJvbCBhbmFseXNpc0NvbnRyb2wsIGZpbmFsIENvbXBvc2l0ZSBwYXJlbnQsIAorCQkJZmluYWwgU3RyaW5nIG9yZGluYXRlU3RyaW5nLCAKKwkJCWZpbmFsIFN0cmluZyB5QXhpc0xhYmVsLCAKKwkJCWZpbmFsIFN0cmluZyB4QXhpc0xhYmVsLAorCQkJZmluYWwgU3RyaW5nIGZpcnN0UHJvcGVydHksCisJCQlDb2xvckRlZmluaXRpb24gZm9yZWdyb3VuZCwKKwkJCUNvbG9yRGVmaW5pdGlvbiBiYWNrZ3JvdW5kLAorCQkJQ29sb3JEZWZpbml0aW9uIGZyYW1lY29sb3IsCisJCQlpbnQgY2hhcnRJbmRleCwKKwkJCWJvb2xlYW4gb3ZlcmxheU1vZGUJKSB7CisJCXN1cGVyKHBhcmVudCwgU1dULkRPVUJMRV9CVUZGRVJFRCB8IFNXVC5CT1JERVIpOworCQlPcmRpbmF0ZV9MRUdFTkQgPSBvcmRpbmF0ZVN0cmluZzsKKwkJT3JkaW5hdGVfQVhJUyA9IHlBeGlzTGFiZWw7CisJCVhfQVhJUyA9IHhBeGlzTGFiZWw7CisJCWZvcmVHcm91bmQgCQkJPSBmb3JlZ3JvdW5kOworCQliYWNrZ3JvdW5kR3JvdW5kIAk9IGJhY2tncm91bmQ7CisJCWZyYW1lQ29sb3IgCQkJPSBmcmFtZWNvbG9yOworCQl0aGlzLmNoYXJ0SW5kZXggPSBjaGFydEluZGV4OworCQl0aGlzLm92ZXJsYXlNb2RlID0gb3ZlcmxheU1vZGU7CisJCQorCQlnciA9IEdlbmVyYXRvci5pbnN0YW5jZSgpOworCisJCXRyeSB7CisJCQlpZHIgPSBQbHVnaW5TZXR0aW5ncy5pbnN0YW5jZSgpLmdldERldmljZSgiZHYuU1dUIik7IC8vJE5PTi1OTFMtMSQJCQkKKwkJfSBjYXRjaCAoZmluYWwgQ2hhcnRFeGNlcHRpb24gcGV4KSB7CisJCQlBY3RpdmF0b3IubG9nRXJyb3IoIlByb2JsZW0gaW5pdGlhbGl6aW5nIGNoYXJ0IiwgcGV4KTsgLy8kTk9OLU5MUy0xJAorCQkJcmV0dXJuOworCQl9CisKKwkJY29udHJvbCA9IGFuYWx5c2lzQ29udHJvbDsKKworCQkKKwkJY20gPSBjcmVhdGVTaW1wbGVMaW5lQ2hhcnQoZmlyc3RQcm9wZXJ0eSwgZGF0YVNlcmllc01hcCwgY3ljbGVOdW1iZXJzLCBNZXNzYWdlcworCQkJCS5nZXRTdHJpbmcoIkNDLnRpdGxlIikpOyAvLyROT04tTkxTLTEkCisJCQorCQlyZXNldERhdGEoKTsKKwkJYWRkUGFpbnRMaXN0ZW5lcihuZXcgUGFpbnRMaXN0ZW5lcigpIHsKKwkJCXB1YmxpYyB2b2lkIHBhaW50Q29udHJvbChmaW5hbCBQYWludEV2ZW50IHBlKSB7CisKKwkJCQlmaW5hbCBDb21wb3NpdGUgc291cmNlID0gKENvbXBvc2l0ZSkgcGUuZ2V0U291cmNlKCk7CisJCQkJZmluYWwgb3JnLmVjbGlwc2Uuc3d0LmdyYXBoaWNzLlJlY3RhbmdsZSBkID0gc291cmNlCisJCQkJCQkuZ2V0Q2xpZW50QXJlYSgpOworCisJCQkJaWYoaW1nQ2hhcnQgIT0gbnVsbCkgaW1nQ2hhcnQuZGlzcG9zZSgpOworCQkJCWltZ0NoYXJ0ID0gbmV3IEltYWdlKHNvdXJjZS5nZXREaXNwbGF5KCksIGQpOworCQkJCQorCQkJCWlkci5zZXRQcm9wZXJ0eShJRGV2aWNlUmVuZGVyZXIuR1JBUEhJQ1NfQ09OVEVYVCwgbmV3IEdDKAorCQkJCQkJaW1nQ2hhcnQpKTsKKwkJCQlmaW5hbCBCb3VuZHMgYm91bmRzID0gQm91bmRzSW1wbC5jcmVhdGUoZC54LCBkLnksIGQud2lkdGgsCisJCQkJCQlkLmhlaWdodCk7CisJCQkJYm91bmRzLnNjYWxlKDcyZCAvIGlkci5nZXREaXNwbGF5U2VydmVyKCkuZ2V0RHBpUmVzb2x1dGlvbigpKTsKKwkJCQkvLyBCT1VORFMgTVVTVCBCRSBTUEVDSUZJRUQgSU4gUE9JTlRTCisKKwkJCQl0cnkgeworCQkJCQlnci5yZW5kZXIoaWRyLCBnci5idWlsZChpZHIuZ2V0RGlzcGxheVNlcnZlcigpLCBjbSwgYm91bmRzLAorCQkJCQkJCW51bGwsIG51bGwsIG51bGwpKTsKKwkJCQkJcGUuZ2MuZHJhd0ltYWdlKGltZ0NoYXJ0LCBkLngsIGQueSk7CisJCQkJfSBjYXRjaCAoZmluYWwgQ2hhcnRFeGNlcHRpb24gY2UpIHsKKwkJCQkJQWN0aXZhdG9yLmxvZ0Vycm9yKCJQcm9ibGVtIHJlbmRlcmluZyBjaGFydCIsIGNlKTsgLy8kTk9OLU5MUy0xJAorCQkJCX0KKwkJCX0gLy8gcGFpbnRDb250cm9sCisJCX0gLy8gUGFpbnRMaXN0ZW5lcgorCQkpOworCQkKKwkJLy9DcmVhdGUgYSBjb250ZXh0IG1lbnUgZm9yIHRoZSBjYW52YXMKKwkJY3JlYXRlQ29udGV4dE1lbnUodGhpcyk7CisJCQorCisJfSAvLyBBZ2dyZWdhdGVUaW1lU2VyaWVzQ2FudmFzCisJLyoqCisJICogQ29uc3RydWN0b3IuCisJICogCisJICogQHBhcmFtIHBhcmVudCAgdGhlIFNXVCBwYXJlbnQgb2YgdGhlIHtAbGluayBXaWRnZXR9CisJICogQHBhcmFtIG9yZGluYXRlU3RyaW5nIAorCSAqIEBwYXJhbSB5QXhpc0xhYmVsIAorCSAqIEBwYXJhbSB4QXhpc0xhYmVsCisJICogQHBhcmFtIGZvcmVncm91bmQgCisJICogQHBhcmFtIGJhY2tncm91bmQgCisJICogQHBhcmFtIGZyYW1lY29sb3IgCisJICogQHBhcmFtIGNoYXJ0SW5kZXggdGhlIGluZGV4IG9mIHRoaXMgY2hhcnQgKDAgaWYgb25seSBvbmUpCisJICogIAorCSAqLworCXB1YmxpYyBBZ2dyZWdhdGVUaW1lU2VyaWVzQ2FudmFzKGZpbmFsIENvbXBvc2l0ZSBwYXJlbnQsIAorCQkJZmluYWwgU3RyaW5nIG9yZGluYXRlU3RyaW5nLCAKKwkJCWZpbmFsIFN0cmluZyB5QXhpc0xhYmVsLCAKKwkJCWZpbmFsIFN0cmluZyB4QXhpc0xhYmVsLAorCQkJZmluYWwgU3RyaW5nIGZpcnN0UHJvcGVydHksCisJCQlDb2xvckRlZmluaXRpb24gZm9yZWdyb3VuZCwKKwkJCUNvbG9yRGVmaW5pdGlvbiBiYWNrZ3JvdW5kLAorCQkJQ29sb3JEZWZpbml0aW9uIGZyYW1lY29sb3IsCisJCQlpbnQgY2hhcnRJbmRleCkgeworCQlzdXBlcihwYXJlbnQsIFNXVC5ET1VCTEVfQlVGRkVSRUQgfCBTV1QuQk9SREVSKTsKKwkJT3JkaW5hdGVfTEVHRU5EID0gb3JkaW5hdGVTdHJpbmc7CisJCU9yZGluYXRlX0FYSVMgPSB5QXhpc0xhYmVsOworCQlYX0FYSVMgPSB4QXhpc0xhYmVsOworCQlmb3JlR3JvdW5kIAkJCT0gZm9yZWdyb3VuZDsKKwkJYmFja2dyb3VuZEdyb3VuZCAJPSBiYWNrZ3JvdW5kOworCQlmcmFtZUNvbG9yIAkJCT0gZnJhbWVjb2xvcjsKKwkJdGhpcy5jaGFydEluZGV4ID0gY2hhcnRJbmRleDsKKwkJCisJCWdyID0gR2VuZXJhdG9yLmluc3RhbmNlKCk7CisKKwkJdHJ5IHsKKwkJCWlkciA9IFBsdWdpblNldHRpbmdzLmluc3RhbmNlKCkuZ2V0RGV2aWNlKCJkdi5TV1QiKTsgLy8kTk9OLU5MUy0xJAkJCQorCQl9IGNhdGNoIChmaW5hbCBDaGFydEV4Y2VwdGlvbiBwZXgpIHsKKwkJCUFjdGl2YXRvci5sb2dFcnJvcigiUHJvYmxlbSBpbml0aWFsaXppbmcgY2hhcnQiLCBwZXgpOyAvLyROT04tTkxTLTEkCisJCQlyZXR1cm47CisJCX0KKworCQljb250cm9sID0gKEFuYWx5c2lzQ29udHJvbCkgcGFyZW50OworCisJCQorCQljbSA9IGNyZWF0ZVNpbXBsZUxpbmVDaGFydChmaXJzdFByb3BlcnR5LCBkYXRhU2VyaWVzTWFwLCBjeWNsZU51bWJlcnMsIE1lc3NhZ2VzCisJCQkJLmdldFN0cmluZygiQ0MudGl0bGUiKSk7IC8vJE5PTi1OTFMtMSQKKwkJCisJCXJlc2V0RGF0YSgpOworCQkKKwkJYWRkUGFpbnRMaXN0ZW5lcihuZXcgUGFpbnRMaXN0ZW5lcigpIHsKKwkJCXB1YmxpYyB2b2lkIHBhaW50Q29udHJvbChmaW5hbCBQYWludEV2ZW50IHBlKSB7CisJCQkJCisJCQkJZmluYWwgQ29tcG9zaXRlIHNvdXJjZSA9IChDb21wb3NpdGUpIHBlLmdldFNvdXJjZSgpOworCQkJCWZpbmFsIG9yZy5lY2xpcHNlLnN3dC5ncmFwaGljcy5SZWN0YW5nbGUgZCA9IHNvdXJjZQorCQkJCQkJLmdldENsaWVudEFyZWEoKTsKKworCQkJCWlmKGltZ0NoYXJ0ICE9IG51bGwpIGltZ0NoYXJ0LmRpc3Bvc2UoKTsKKwkJCQlpbWdDaGFydCA9IG5ldyBJbWFnZShzb3VyY2UuZ2V0RGlzcGxheSgpLCBkKTsKKwkJCQlpZHIuc2V0UHJvcGVydHkoSURldmljZVJlbmRlcmVyLkdSQVBISUNTX0NPTlRFWFQsIG5ldyBHQygKKwkJCQkJCWltZ0NoYXJ0KSk7CisJCQkJZmluYWwgQm91bmRzIGJvdW5kcyA9IEJvdW5kc0ltcGwuY3JlYXRlKGQueCwgZC55LCBkLndpZHRoLAorCQkJCQkJZC5oZWlnaHQpOworCQkJCWJvdW5kcy5zY2FsZSg3MmQgLyBpZHIuZ2V0RGlzcGxheVNlcnZlcigpLmdldERwaVJlc29sdXRpb24oKSk7CisJCQkJLy8gQk9VTkRTIE1VU1QgQkUgU1BFQ0lGSUVEIElOIFBPSU5UUworCisJCQkJdHJ5IHsKKwkJCQkJZ3IucmVuZGVyKGlkciwgZ3IuYnVpbGQoaWRyLmdldERpc3BsYXlTZXJ2ZXIoKSwgY20sIGJvdW5kcywKKwkJCQkJCQludWxsLCBudWxsLCBudWxsKSk7CisJCQkJCXBlLmdjLmRyYXdJbWFnZShpbWdDaGFydCwgZC54LCBkLnkpOworCQkJCX0gY2F0Y2ggKGZpbmFsIENoYXJ0RXhjZXB0aW9uIGNlKSB7CisJCQkJCUFjdGl2YXRvci5sb2dFcnJvcigiUHJvYmxlbSByZW5kZXJpbmcgY2hhcnQiLCBjZSk7IC8vJE5PTi1OTFMtMSQKKwkJCQl9CisJCQl9IC8vIHBhaW50Q29udHJvbAorCQl9IC8vIFBhaW50TGlzdGVuZXIKKwkJKTsKKwkJCisJCS8vQ3JlYXRlIGEgY29udGV4dCBtZW51IGZvciB0aGUgY2FudmFzCisJCWNyZWF0ZUNvbnRleHRNZW51KHRoaXMpOworCQkKKworCX0gLy8gQWdncmVnYXRlVGltZVNlcmllc0NhbnZhcworCisJCisJCisJLyoqCisJICogVGhlIG1ldGhvZCB3aGljaCBnZXRzIHRoZSB7QGxpbmsgQWdncmVnYXRlVGltZVNlcmllc0NhbnZhc30nIHJlcG9ydHMgbGlzdCwgYW5kCisJICogZHJhd3MgaXQgb24gdGhlIHtAbGluayBBZ2dyZWdhdGVUaW1lU2VyaWVzQ2FudmFzfS4KKwkgKiBAcmV0dXJuIGludGVncmF0ZWREaWZmZXJlbmNlIGZvciBlYWNoIGxpbmUgc2VyaWVzCisJICogCisJICovCisJcHVibGljIHZvaWQgZHJhdygpIHsKKwkJCisJCS8vY2xlYXJEYXRhKCk7CisJCXJlc2V0RGF0YSgpOworCQl5QXhpc1ByaW1hcnkuZ2V0U2VyaWVzRGVmaW5pdGlvbnMoKS5jbGVhcigpOworCQkKKwkJLy8gZ2V0IHRoZSBudW1iZXIgb2YgbGluZXMgdG8gcGxvdCBmb3IgdGhpcyB0eXBlIG9mIGNoYXJ0CisJCWludCBtYXhMaW5lcyA9IGNvbnRyb2wuZ2V0TnVtUHJvcGVydGllcyhjaGFydEluZGV4KTsKKwkKKwkJLy8gYWRkIGFsbCB0aGUgcmVzdCBvZiB0aGUgbGluZSBzZXJpZXMgbm93CisJCWZvciAoaW50IGkgPSAwOyBpIDwgbWF4TGluZXM7IGkgKyspIHsKKwkJCVN0cmluZyBwcm9wZXJ0eSA9IGNvbnRyb2wuZ2V0UHJvcGVydHkoY2hhcnRJbmRleCxpKTsKKwkJCQorCQkJaWYoIWRhdGFTZXJpZXNNYXAuY29udGFpbnNLZXkocHJvcGVydHkpKSB7CisJCQkJLy8gbmV3IHByb3BlcnR5CisJCQkJRGF0YVNlcmllcyBzZXJpZXMgPSBuZXcgRGF0YVNlcmllcyhwcm9wZXJ0eSwgaSwgb3ZlcmxheU1vZGUpOworCQkJCWlmKHZpc2libGVNYXAuY29udGFpbnNLZXkocHJvcGVydHkpKQorCQkJCQkJc2VyaWVzLnNldFZpc2libGUodmlzaWJsZU1hcC5nZXQocHJvcGVydHkpKTsKKwkJCQllbHNlIHsKKwkJCQkJc2VyaWVzLnNldFZpc2libGUodHJ1ZSk7CisJCQkJCXZpc2libGVNYXAucHV0KHByb3BlcnR5LCB0cnVlKTsKKwkJCQl9CisJCQkJCisJCQkJZGF0YVNlcmllc01hcC5wdXQocHJvcGVydHksIHNlcmllcyk7CisJCQl9CisJCQlEYXRhU2VyaWVzIHNlcmllcyA9IGRhdGFTZXJpZXNNYXAuZ2V0KHByb3BlcnR5KTsKKwkJCXNlcmllcy5zaG93KCk7CisJCQkKKwkJfQorCQkKKwkJLy8gdXBkYXRlIHRoZSBjb250ZXh0IG1lbnUgd2l0aCB0aGUgbmV3IHByb3BlcnRpZXMgdG8gcGxvdAorCQkvL3VwZGF0ZUNvbnRleHRNZW51KHRoaXMpOworCQkKKwkJbWF4WSA9IC0xLjA7CisJCQorCQkJYm9vbGVhbiBzZXRDeWNsZXMgPSBmYWxzZTsKKwkJCS8vIEdldCB0aGUgdmFsdWVzIGZvciB0aGUgcHJvcGVydHkgdG8gYmUgcGxvdHRlZAorCQkJaW50IG1heFBvaW50cyA9IDA7CisJCQkKKwkJCWZvciAoaW50IGkgPSAwOyBpIDwgbWF4TGluZXM7IGkrKykgeworCQkJCVN0cmluZyBwcm9wZXJ0eSA9IGNvbnRyb2wuZ2V0UHJvcGVydHkoY2hhcnRJbmRleCxpKTsKKwkJCQlkb3VibGVbXSBkb3VibGVWYWx1ZXMgPSBjb250cm9sLmdldFZhbHVlcyhjaGFydEluZGV4LGkpOworCQkJCWlmKGRvdWJsZVZhbHVlcz09bnVsbCkgeworCQkJCQlkb3VibGVWYWx1ZXMgPSBuZXcgZG91YmxlWzBdOworCQkJCQkvL2RvdWJsZVZhbHVlc1swXSA9IDA7CisJCQkJfQorCQkJCURhdGFTZXJpZXMgc2VyaWVzID0gZGF0YVNlcmllc01hcC5nZXQocHJvcGVydHkpOworCQkJCQorCQkJCWlmKGRhdGFTZXJpZXNNYXAuZ2V0KHByb3BlcnR5KS5pc1Zpc2libGUoKSA9PSB0cnVlKSB7IAorCQkJCQlmb3IgKGludCBqID0gMDsgaiA8IGRvdWJsZVZhbHVlcy5sZW5ndGg7IGorKykgeworCQkJCQkJCisJCQkJCQkKKwkJCQkJCWlmKGRvdWJsZVZhbHVlc1tqXSA8PSBtaW5Zc2NhbGUpIHsKKwkJCQkJCQlpZihkb3VibGVWYWx1ZXNbal0gPiAwLjApIG1pbllzY2FsZSA9IGRvdWJsZVZhbHVlc1tqXTsKKwkJCQkJCX0KKwkJCQkJCQorCQkJCQkJaWYoZG91YmxlVmFsdWVzW2pdID49IG1heFkpIHsKKwkJCQkJCQltYXhZID0gZG91YmxlVmFsdWVzW2pdOworCQkJCQkJCWRvdWJsZSBsb2cgPSBNYXRoLmZsb29yKE1hdGgubG9nMTAobWF4WSkpOworCQkJCQkJCWRvdWJsZSBhZGp1c3RlZE1heCA9IChNYXRoLmNlaWwobWF4WS9NYXRoLnBvdygxMCwgbG9nKSkpKk1hdGgucG93KDEwLCBsb2cpOworCQkJCQkJICAgIGlmKGFkanVzdGVkTWF4IDw9IDEuMCkgYWRqdXN0ZWRNYXggPSAxLjA7CisJCQkJCQkgICAgLy9hZGp1c3RlZE1heCA9IG1heFkqMTAwLjA7CisJCQkJCQkgICAgLy9hZGp1c3RlZE1heCArPSAxLjA7CisJCQkJCQkgICAgLy9pbnQgbXggPSAoaW50KWFkanVzdGVkTWF4OworCQkJCQkJICAgIC8vYWRqdXN0ZWRNYXggPSAoKGRvdWJsZSlteCkvMTAwLjA7CisJCQkJCQkJaWYgKHVzZUxpbmVhclRpbWVTY2FsZSkgeworCQkJCQkJCQl5QXhpc1ByaW1hcnkuZ2V0U2NhbGUoKS5zZXRNYXgoTnVtYmVyRGF0YUVsZW1lbnRJbXBsLmNyZWF0ZShhZGp1c3RlZE1heCkpOworCQkJCQkJCQlkb3VibGUgc3RlcCA9IGFkanVzdGVkTWF4IC8gMTAuMDsKKwkJCQkJCQkJeUF4aXNQcmltYXJ5LmdldFNjYWxlKCkuc2V0U3RlcChzdGVwKTsKKwkJCQkJCQl9IGVsc2UgeworCQkJCQkJCQkvLyBrZWVwIDIgc2lnbmlmaWNhbnQgZmlndXJlcyBvbiBzY2FsZSBheGlzCisJCQkJCQkJCWRvdWJsZSB5bWF4ID0gTWF0aC5sb2coYWRqdXN0ZWRNYXgpOworCQkJCQkJCQlpZihhZGp1c3RlZE1heCA+IDEuMCkgeworCQkJCQkJCQkJeW1heCArPSAwLjQ5OTsKKwkJCQkJCQkJCWxvbmcgaW1heCA9IE1hdGgucm91bmQoeW1heCk7CisJCQkJCQkJCQl5bWF4ID0gaW1heDsKKwkJCQkJCQkJfQorCQkJCQkJCQl5QXhpc1ByaW1hcnkuZ2V0U2NhbGUoKS5zZXRNYXgoTnVtYmVyRGF0YUVsZW1lbnRJbXBsLmNyZWF0ZSh5bWF4KSk7CisJCQkJCQkJCWRvdWJsZSBzdGVwID0geW1heC8xMC4wOworCQkJCQkJCQl5QXhpc1ByaW1hcnkuZ2V0U2NhbGUoKS5zZXRTdGVwKHN0ZXApOworCQkJCQkJCX0KKwkJCQkJCQkKKwkJCQkJCQkKKwkJCQkJCX0KKwkJCQkJfQorCQkJCX0gLy8gaXMgdmlzaWJsZQorCQkJCQorCQkJCQkvLyBBbnkgdmFsdWVzPworCQkJCQlpZiAoZG91YmxlVmFsdWVzLmxlbmd0aCA+IDApIHsKKwkJCQkJCWlmIChtYXhQb2ludHMgPCBkb3VibGVWYWx1ZXMubGVuZ3RoKSB7CisJCQkJCQkJbWF4UG9pbnRzID0gZG91YmxlVmFsdWVzLmxlbmd0aDsKKwkJCQkJCX0KKwkJCQkJCQorCQkJCQkJZm9yIChpbnQgY3ljbGVOdW1iZXIgPSAwOyBjeWNsZU51bWJlciA8IGRvdWJsZVZhbHVlcy5sZW5ndGg7IGN5Y2xlTnVtYmVyKyspIHsKKwkJCQkJCQkKKwkJCQkJCQlEb3VibGUgdmFsdWU7CisJCQkJCQkJZG91YmxlIGRpc3BsYXlWYWx1ZSA9IGRvdWJsZVZhbHVlc1tjeWNsZU51bWJlcl07CisJCQkJCQkJaWYgKGRpc3BsYXlWYWx1ZSA8PSBtaW5Zc2NhbGUpIHsKKwkJCQkJCQkJLy8gTG9nKDAuMCkgaXMgbmVnYXRpdmUgaW5maW5pdHkgc28gZm9yIGRpc3BsYXkgcHVycG9zZXMgb25seQorCQkJCQkJCQkvLyB3ZSBzZXQgdGhlIG1pbmltdW0gYXhpcyB2YWx1ZSBhdCAwLjEvUE9QVUxBVElPTgorCQkJCQkJCQlkaXNwbGF5VmFsdWUgPSBtaW5Zc2NhbGU7CisJCQkJCQkJfQorCQkJCQkJCWlmICh1c2VMaW5lYXJUaW1lU2NhbGUpIHsKKwkJCQkJCQkJdmFsdWUgPSBuZXcgRG91YmxlKGRpc3BsYXlWYWx1ZSk7CisJCQkJCQkJfSBlbHNlIHsKKwkJCQkJCQkJdmFsdWUgPSBuZXcgRG91YmxlKE1hdGgubG9nKGRpc3BsYXlWYWx1ZSkpOworCQkJCQkJCX0KKwkJCQkJCQkKKworCQkJCQkJCXNlcmllcy5hZGRWYWx1ZSh2YWx1ZSk7CisJCQkJCQkJCisJCQkJCQkJLy8gb25seSBkbyBvbmNlIGZvciBmaXJzdCBsaW5lIHNlcmllcworCQkJCQkJCWlmICghc2V0Q3ljbGVzKSB7CisJCQkJCQkJCWN5Y2xlTnVtYmVycy5hZGQoSW50ZWdlci52YWx1ZU9mKGN5Y2xlTnVtYmVyKSk7CQorCQkJCQkJCQl9CisJCQkJCQl9IC8vIGZvciBjeWNsZU51bWJlcgorCQkJCQkJCisJCQkJCQlpZih4QXhpc1ByaW1hcnkuZ2V0U2VyaWVzRGVmaW5pdGlvbnMoKS5nZXQoMCkuZ2V0U2VyaWVzKCkuc2l6ZSgpICE9IGN5Y2xlTnVtYmVycy5zaXplKCkpIHsKKwkJCQkJCQkvLyBUaGUgbnVtYmVyIG9mIGRhdGEgcG9pbnRzIGhhdmUgY2hhbmdlZCwgY3JlYXRlIGEgbmV3IHNlcmllcyBmb3IgdGhlIHggYXhpcworCQkJCQkJCXhBeGlzUHJpbWFyeS5nZXRTZXJpZXNEZWZpbml0aW9ucygpLmNsZWFyKCk7CisJCQkJCQkJZmluYWwgU2VyaWVzIHhBeGlzU2VyaWVzID0gU2VyaWVzSW1wbC5jcmVhdGUoKTsKKworCQkJCQkJCWZpbmFsIE51bWJlckRhdGFTZXQgeFZhbHVlcyA9IE51bWJlckRhdGFTZXRJbXBsLmNyZWF0ZShjeWNsZU51bWJlcnMpOworCQkJCQkJCXhBeGlzU2VyaWVzLnNldERhdGFTZXQoeFZhbHVlcyk7CisJCQkJCQkJZmluYWwgU2VyaWVzRGVmaW5pdGlvbiBzZFggPSBTZXJpZXNEZWZpbml0aW9uSW1wbC5jcmVhdGUoKTsKKworCQkJCQkJCXhBeGlzUHJpbWFyeS5nZXRTZXJpZXNEZWZpbml0aW9ucygpLmFkZChzZFgpOworCQkJCQkJCXNkWC5nZXRTZXJpZXMoKS5hZGQoeEF4aXNTZXJpZXMpOworCQkJCQkJfQorCQkJCQkJCQorCQkJCQkJCisJCQkJCQlzZXRDeWNsZXMgPSB0cnVlOyAvLyB3ZSBzZXQgdGhlbSBvbmx5IG9uY2UKKwkJCQkJCQorCQkJCQl9IGVsc2UgeworCQkJCQkJLy9yZXNldERhdGEoKTsKKwkJCQkJfQorCQkJfSAvLyBmb3IgaSBwcm9wZXJ0aWVzCisKKworCQlpZiAoIXRoaXMuaXNEaXNwb3NlZCgpKSB7CisJCQlyZWRyYXcoKTsKKwkJfQorCQkKKwkJCisJCS8vCWNvbnRyb2wudXBkYXRlTWVzc2FnZShTY2VuYXJpb0FuYWx5c2lzU3VpdGUuV09SS0lOR19NU0cpOworCQkKKwl9IC8vIHBhaW50Q29udHJvbAorCisJLyoqCisJICogQHBhcmFtIGRhdGFTZXJpZXNNYXAKKwkgKiAgICAgICAgICAgIHRoZSB7QGxpbmsgTGlzdH0gdGhhdCB3aWxsIGNvbnRhaW4gdGhlIHJlbGF0aXZlIHZhbHVlcworCSAqICAgICAgICAgICAgKDAuMC0xLjApIHRvIHBsb3QKKwkgKiBAcGFyYW0gY3ljbGVOdW1iZXJzCisJICogICAgICAgICAgICB0aGUge0BsaW5rIExpc3R9IG9mIHNpbXVsYXRpb24gY3ljbGUgbnVtYmVycyB0aGF0IG1hdGNoIHRoZQorCSAqICAgICAgICAgICAgcmVsYXRpdmUgdmFsdWVzCisJICogQHBhcmFtIHNlcmllc0lkZW50aWZpZXIKKwkgKiAgICAgICAgICAgIHRoZSB0aXRsZSBvZiB0aGUgY2hhcnQKKwkgKiBAcmV0dXJuIGEgPGNvZGU+Q2hhcnQ8L2NvZGU+CisJICovCisJcHVibGljIGZpbmFsIENoYXJ0IGNyZWF0ZVNpbXBsZUxpbmVDaGFydCgKKwkJCWZpbmFsIFN0cmluZyBmaXJzdFByb3BlcnR5LAorCQkJZmluYWwgTWFwPFN0cmluZywgRGF0YVNlcmllcz4gZGF0YVNlcmllc01hcCwKKwkJCWZpbmFsIExpc3Q8SW50ZWdlcj4gY3ljbGVOdW1iZXJzLCBmaW5hbCBTdHJpbmcgc2VyaWVzSWRlbnRpZmllcikgeworCQkKKwkJZmluYWwgQ2hhcnRXaXRoQXhlcyByZXRWYWx1ZSA9IENoYXJ0V2l0aEF4ZXNJbXBsLmNyZWF0ZSgpOworCisJCQorCQkvLyBQbG90CisJCXJldFZhbHVlLmdldEJsb2NrKCkuc2V0QmFja2dyb3VuZChmcmFtZUNvbG9yKTsKKwkJZmluYWwgUGxvdCBwID0gcmV0VmFsdWUuZ2V0UGxvdCgpOworCQlwLmdldENsaWVudEFyZWEoKS5zZXRCYWNrZ3JvdW5kKGJhY2tncm91bmRHcm91bmQpOworCisJCS8vIFRpdGxlCisJCS8vIGN3YUxpbmUuZ2V0VGl0bGUoICkuZ2V0TGFiZWwoICkuZ2V0Q2FwdGlvbiggKS5zZXRWYWx1ZSggIkxpbmUgQ2hhcnQiCisJCS8vICk7Ly8kTk9OLU5MUy0xJAorCQlyZXRWYWx1ZS5nZXRUaXRsZSgpLnNldFZpc2libGUoZmFsc2UpOworCisJCS8vIExlZ2VuZAorCQlsZWdlbmQgPSByZXRWYWx1ZS5nZXRMZWdlbmQoKTsKKwkJZmluYWwgTGluZUF0dHJpYnV0ZXMgbGlhID0gbGVnZW5kLmdldE91dGxpbmUoKTsKKwkJbGVnZW5kLmdldFRleHQoKS5nZXRGb250KCkuc2V0U2l6ZSg4KTsKKwkJbGlhLnNldFN0eWxlKExpbmVTdHlsZS5TT0xJRF9MSVRFUkFMKTsKKwkJbGVnZW5kLmdldEluc2V0cygpLnNldCgxMCwgNSwgMCwgMCk7CisJCWxlZ2VuZC5nZXRPdXRsaW5lKCkuc2V0VmlzaWJsZShmYWxzZSk7CisJCWxlZ2VuZC5zZXRBbmNob3IoQW5jaG9yLk5PUlRIX0xJVEVSQUwpOworCQlsZWdlbmQuc2V0UG9zaXRpb24oUG9zaXRpb24uQkVMT1dfTElURVJBTCk7CisJCWxlZ2VuZC5nZXRUZXh0KCkuc2V0Q29sb3IoZm9yZUdyb3VuZCk7CisJCWxlZ2VuZC5nZXRPdXRsaW5lKCkuc2V0Q29sb3IoZm9yZUdyb3VuZCk7CisJCQorCQkvLyBjd2FMaW5lLmdldExlZ2VuZCggKS5nZXRUZXh0KCkuZ2V0Rm9udCgpLnNldFNpemUoMTYpOzsKKwkJLy8gY3dhTGluZS5nZXRMZWdlbmQoICkuc2V0VmlzaWJsZSggdHJ1ZSApOworCisJCS8vIC8vLy8vLy8vLworCQkvLyBYLUF4aXMKKwkJeEF4aXNQcmltYXJ5ID0gcmV0VmFsdWUuZ2V0UHJpbWFyeUJhc2VBeGVzKClbMF07CisJCXhBeGlzUHJpbWFyeS5zZXRUeXBlKEF4aXNUeXBlLlRFWFRfTElURVJBTCk7CisJCXhBeGlzUHJpbWFyeS5nZXRNYWpvckdyaWQoKS5zZXRUaWNrU3R5bGUoVGlja1N0eWxlLkJFTE9XX0xJVEVSQUwpOworCQl4QXhpc1ByaW1hcnkuZ2V0T3JpZ2luKCkuc2V0VHlwZShJbnRlcnNlY3Rpb25UeXBlLlZBTFVFX0xJVEVSQUwpOworCQl4QXhpc1ByaW1hcnkuZ2V0VGl0bGUoKS5zZXRWaXNpYmxlKGZhbHNlKTsKKwkJeEF4aXNQcmltYXJ5LmdldFRpdGxlKCkuZ2V0Q2FwdGlvbigpLmdldEZvbnQoKS5zZXRTaXplKDkpOworCQl4QXhpc1ByaW1hcnkuZ2V0VGl0bGUoKS5nZXRDYXB0aW9uKCkuc2V0Q29sb3IoZm9yZUdyb3VuZCk7CisJCXhBeGlzUHJpbWFyeS5nZXRMYWJlbCgpLmdldENhcHRpb24oKS5zZXRDb2xvcihmb3JlR3JvdW5kKTsKKworCQlmaW5hbCBTZXJpZXMgeEF4aXNTZXJpZXMgPSBTZXJpZXNJbXBsLmNyZWF0ZSgpOworCisJCS8vIG5ldyBjb2xvcnMKKwkJeEF4aXNTZXJpZXMuZ2V0TGFiZWwoKS5nZXRDYXB0aW9uKCkuc2V0Q29sb3IoZm9yZUdyb3VuZCk7CisJCXhBeGlzU2VyaWVzLmdldExhYmVsKCkuZ2V0T3V0bGluZSgpLnNldENvbG9yKGZvcmVHcm91bmQpOworCQkvLwkKKworCQlmaW5hbCBOdW1iZXJEYXRhU2V0IHhWYWx1ZXMgPSBOdW1iZXJEYXRhU2V0SW1wbC5jcmVhdGUoY3ljbGVOdW1iZXJzKTsKKwkJeEF4aXNTZXJpZXMuc2V0RGF0YVNldCh4VmFsdWVzKTsKKwkJZmluYWwgU2VyaWVzRGVmaW5pdGlvbiBzZFggPSBTZXJpZXNEZWZpbml0aW9uSW1wbC5jcmVhdGUoKTsKKworCQl4QXhpc1ByaW1hcnkuZ2V0U2VyaWVzRGVmaW5pdGlvbnMoKS5hZGQoc2RYKTsKKwkJc2RYLmdldFNlcmllcygpLmFkZCh4QXhpc1Nlcmllcyk7CisKKwkJLy8gLy8vLy8vLy8KKwkJLy8gWS1BeGlzCisJCXlBeGlzUHJpbWFyeSA9IHJldFZhbHVlLmdldFByaW1hcnlPcnRob2dvbmFsQXhpcyh4QXhpc1ByaW1hcnkpOworCQl5QXhpc1ByaW1hcnkuZ2V0TWFqb3JHcmlkKCkuc2V0VGlja1N0eWxlKFRpY2tTdHlsZS5MRUZUX0xJVEVSQUwpOworCisJCS8vIE51bWJlckRhdGFTZXRbXSBvcnRob1ZhbHVlcyA9IG5ldyBOdW1iZXJEYXRhU2V0W01BWF9MSU5FU107CisJCS8vIFNlcmllc0RlZmluaXRpb25bXSBzZFkgPSBuZXcgU2VyaWVzRGVmaW5pdGlvbltNQVhfTElORVNdOworCisJCS8vIGVuZCBZLVNlcmllcworCisJCXhBeGlzUHJpbWFyeS5nZXRTY2FsZSgpLnNldE1pbihOdW1iZXJEYXRhRWxlbWVudEltcGwuY3JlYXRlKDAuMCkpOworCQkvLyB4QXhpc1ByaW1hcnkuZ2V0U2NhbGUoICkuc2V0TWF4KCBOdW1iZXJEYXRhRWxlbWVudEltcGwuY3JlYXRlKCAxMC4wICkKKwkJLy8gKTsKKwkJLy8geEF4aXNQcmltYXJ5LmdldFNjYWxlKCApLnNldFN0ZXAoIDEgKTsKKwkJeEF4aXNQcmltYXJ5LmdldExhYmVsKCkuZ2V0Q2FwdGlvbigpLmdldEZvbnQoKS5zZXRTaXplKDkpOworCQl4QXhpc1ByaW1hcnkuZ2V0TGFiZWwoKS5nZXRDYXB0aW9uKCkuc2V0Q29sb3IoZm9yZUdyb3VuZCk7CisJCXhBeGlzUHJpbWFyeS5nZXRUaXRsZSgpLnNldFZpc2libGUodHJ1ZSk7CisJCXhBeGlzUHJpbWFyeS5nZXRUaXRsZSgpLmdldENhcHRpb24oKS5zZXRWYWx1ZShYX0FYSVMpOworCisJCXlBeGlzUHJpbWFyeS5nZXRTY2FsZSgpLnNldE1pbihOdW1iZXJEYXRhRWxlbWVudEltcGwuY3JlYXRlKDAuMCkpOworCQl5QXhpc1ByaW1hcnkuZ2V0U2NhbGUoKS5zZXRNYXgoTnVtYmVyRGF0YUVsZW1lbnRJbXBsLmNyZWF0ZSgxLjApKTsKKwkJeUF4aXNQcmltYXJ5LmdldFNjYWxlKCkuc2V0U3RlcCgwLjI1KTsKKwkJeUF4aXNQcmltYXJ5LmdldExhYmVsKCkuZ2V0Q2FwdGlvbigpLmdldEZvbnQoKS5zZXRTaXplKDkpOworCQl5QXhpc1ByaW1hcnkuZ2V0TGFiZWwoKS5nZXRDYXB0aW9uKCkuc2V0Q29sb3IoZm9yZUdyb3VuZCk7CisJCXlBeGlzUHJpbWFyeS5nZXRUaXRsZSggKS5nZXRDYXB0aW9uKCApLnNldFZhbHVlKCBPcmRpbmF0ZV9BWElTICk7CisJCXlBeGlzUHJpbWFyeS5nZXRUaXRsZSggKS5zZXRWaXNpYmxlKHRydWUpOworCQkvLyB5QXhpc1ByaW1hcnkuZ2V0TWFqb3JHcmlkKCkuZ2V0TGluZUF0dHJpYnV0ZXMoKS5zZXRDb2xvcihmb3JlR3JvdW5kKTsKKwkJCisJCS8vIGZvciBub3cgZ2V0IHJlYWR5IHRvIGNyZWF0ZSBvbmx5IG9uZSBsaW5lIC0gd2UgaGF2ZSBubyBkYXRhIHlldC4KKwkJLy8gd2Ugd2lsbCBhZGQgbW9yZSBsaW5lcyBhcyB3ZSBuZWVkIHRoZW0KKwkJLy8gaGFuZGxlIG51bGwKKwkJaWYoIWRhdGFTZXJpZXNNYXAuY29udGFpbnNLZXkoZmlyc3RQcm9wZXJ0eSkpIHsKKwkJCURhdGFTZXJpZXMgc2VyaWVzID0gbmV3IERhdGFTZXJpZXMoTWVzc2FnZXMuZ2V0U3RyaW5nKCJBVVRPLlRJVExFNCIpLCAwLCBvdmVybGF5TW9kZSk7CisJCQlkYXRhU2VyaWVzTWFwLnB1dChmaXJzdFByb3BlcnR5LCBzZXJpZXMpOworCQl9CisKKwkJcmV0dXJuIHJldFZhbHVlOworCX0gLy8gY3JlYXRlU2ltcGxlTGluZUNoYXJ0CisKKwkKKwkvKioKKwkgKiBDcmVhdGUgdGhlIHZpZXcncyBjb250ZXh0IG1lbnUgYW5kIGFkZCB0aGUgYWN0aW9uIGhhbmRsZXJzIHRvIGl0LgorCSAqLworCXByb3RlY3RlZCB2b2lkIGNyZWF0ZUNvbnRleHRNZW51KGZpbmFsIENvbXBvc2l0ZSBwYXJlbnQpIHsKKworCQkvLyBJbml0IGEgQ29udGV4dCBNZW51IE1hbmFnZXIKKwkJZmluYWwgTWVudU1hbmFnZXIgY29udGV4dE1lbnVNYW5hZ2VyID0gbmV3IE1lbnVNYW5hZ2VyKCk7CisKKwkJLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKwkJbGluZWFyVGltZUFjdGlvbiA9IG5ldyBMaW5lYXJTY2FsZUFjdGlvbigpOworCQlsb2dUaW1lQWN0aW9uID0gbmV3IExvZ1NjYWxlQWN0aW9uKCk7CisJCWNvbnRleHRNZW51TWFuYWdlci5hZGQobGluZWFyVGltZUFjdGlvbik7CisJCWNvbnRleHRNZW51TWFuYWdlci5hZGQobG9nVGltZUFjdGlvbik7CisKKworCQkKKwkJLy8gUGxhY2UgSG9sZGVyIGZvciBNZW51IEFkZGl0aW9ucworCQljb250ZXh0TWVudU1hbmFnZXIuYWRkKG5ldyBTZXBhcmF0b3IoCisJCQkJSVdvcmtiZW5jaEFjdGlvbkNvbnN0YW50cy5NQl9BRERJVElPTlMpKTsKKworCQkvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwkJCisJCXZpZXdMZWdlbmQgPSBuZXcgTGVnZW5kVmlld0FjdGlvbigpOworCQloaWRlTGVnZW5kID0gbmV3IExlZ2VuZEhpZGVBY3Rpb24oKTsKKwkJY29udGV4dE1lbnVNYW5hZ2VyLmFkZCh2aWV3TGVnZW5kKTsKKwkJY29udGV4dE1lbnVNYW5hZ2VyLmFkZChoaWRlTGVnZW5kKTsKKwkJCisJCS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCQkKKwkJCisJCS8vIFBsYWNlIEhvbGRlciBmb3IgTWVudSBBZGRpdGlvbnMKKwkJY29udGV4dE1lbnVNYW5hZ2VyLmFkZChuZXcgU2VwYXJhdG9yKAorCQkJCUlXb3JrYmVuY2hBY3Rpb25Db25zdGFudHMuTUJfQURESVRJT05TKSk7CisKKwkJcG9wVXBNZW51ID0gY29udGV4dE1lbnVNYW5hZ2VyLmNyZWF0ZUNvbnRleHRNZW51KHBhcmVudCk7CisKKwkJLy8gU2V0IHRoZSBjb250ZXh0IG1lbnUgZm9yIHRoZSB2aWV3ZXIKKwkJcGFyZW50LnNldE1lbnUocG9wVXBNZW51KTsKKworCX0gLy8gY3JlYXRlQ29udGV4dE1lbnUKKwkKKwkvKioKKwkgKiBVcGRhdGUgdGhlIHZpZXcncyBjb250ZXh0IG1lbnUgYW5kIGFkZCB0aGUgYWN0aW9uIGhhbmRsZXJzIHRvIGl0LgorCSAqLworCXByaXZhdGUgdm9pZCB1cGRhdGVDb250ZXh0TWVudShmaW5hbCBDb21wb3NpdGUgcGFyZW50KSB7CisKKwkJcG9wVXBNZW51LmRpc3Bvc2UoKTsKKworCQkvLyBJbml0IGEgQ29udGV4dCBNZW51IE1hbmFnZXIKKwkJZmluYWwgTWVudU1hbmFnZXIgY29udGV4dE1lbnVNYW5hZ2VyID0gbmV3IE1lbnVNYW5hZ2VyKCk7CisKKwkJLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKwkJbGluZWFyVGltZUFjdGlvbiA9IG5ldyBMaW5lYXJTY2FsZUFjdGlvbigpOworCQlsb2dUaW1lQWN0aW9uID0gbmV3IExvZ1NjYWxlQWN0aW9uKCk7CisJCWNvbnRleHRNZW51TWFuYWdlci5hZGQobGluZWFyVGltZUFjdGlvbik7CisJCWNvbnRleHRNZW51TWFuYWdlci5hZGQobG9nVGltZUFjdGlvbik7CisJCQorCQkvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworCisJCS8vIFBsYWNlIEhvbGRlciBmb3IgTWVudSBBZGRpdGlvbnMKKwkJY29udGV4dE1lbnVNYW5hZ2VyLmFkZChuZXcgU2VwYXJhdG9yKAorCQkJCUlXb3JrYmVuY2hBY3Rpb25Db25zdGFudHMuTUJfQURESVRJT05TKSk7CisKKwkJLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJCQorCQl2aWV3TGVnZW5kID0gbmV3IExlZ2VuZFZpZXdBY3Rpb24oKTsKKwkJaGlkZUxlZ2VuZCA9IG5ldyBMZWdlbmRIaWRlQWN0aW9uKCk7CisJCWNvbnRleHRNZW51TWFuYWdlci5hZGQodmlld0xlZ2VuZCk7CisJCWNvbnRleHRNZW51TWFuYWdlci5hZGQoaGlkZUxlZ2VuZCk7CisJCQorCQkvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwkJCisJCQorCQkvLyBQbGFjZSBIb2xkZXIgZm9yIE1lbnUgQWRkaXRpb25zCisJCWNvbnRleHRNZW51TWFuYWdlci5hZGQobmV3IFNlcGFyYXRvcigKKwkJCQlJV29ya2JlbmNoQWN0aW9uQ29uc3RhbnRzLk1CX0FERElUSU9OUykpOworCisJCQorCQkvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwkJLy8gYWRkIHRoZSBkaXNwbGF5YWJsZSBwcm9wZXJ0aWVzCisJCWZvciAoaW50IGkgPSAwOyBpIDwgY29udHJvbC5nZXROdW1Qcm9wZXJ0aWVzKGNoYXJ0SW5kZXgpOyBpICsrKSB7CisJCQkKKwkJCVN0cmluZyBuZXh0UHJvcCA9IGNvbnRyb2wuZ2V0UHJvcGVydHkoY2hhcnRJbmRleCxpKTsKKwkJCURhdGFTZXJpZXMgc2VyaWVzID0gZGF0YVNlcmllc01hcC5nZXQobmV4dFByb3ApOworCQkJRGlzcGxheWFibGVQcm9wZXJ0eSBwcm9wZXJ0eSA9IG5ldyBEaXNwbGF5YWJsZVByb3BlcnR5KG5leHRQcm9wLCBzZXJpZXMuaXNWaXNpYmxlKCkpOworCQkJY29udGV4dE1lbnVNYW5hZ2VyLmFkZChwcm9wZXJ0eSk7CisJCX0KKworCQkvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworCQkvLyBQbGFjZSBIb2xkZXIgZm9yIE1lbnUgQWRkaXRpb25zCisJCWNvbnRleHRNZW51TWFuYWdlci5hZGQobmV3IFNlcGFyYXRvcigKKwkJCQlJV29ya2JlbmNoQWN0aW9uQ29uc3RhbnRzLk1CX0FERElUSU9OUykpOworCisJCS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisJCWZpbmFsIE1lbnUgcG9wVXBNZW51ID0gY29udGV4dE1lbnVNYW5hZ2VyLmNyZWF0ZUNvbnRleHRNZW51KHBhcmVudCk7CisKKwkJLy8gU2V0IHRoZSBjb250ZXh0IG1lbnUgZm9yIHRoZSB2aWV3ZXIKKwkJcGFyZW50LnNldE1lbnUocG9wVXBNZW51KTsKKworCisJfSAvLyB1cGRhdGVDb250ZXh0TWVudQorCisKKwkKKwkvKioKKwkgKiBTZXRzIHRoZSBjb2xvcnMgZm9yIGEgbiBhcnJheSBvZiBMaW5lU2VyaWVzIGdpdmVuIHRoZSBwcm9wZXJ0eSB0byBQbG90CisJICogZm9yIGVhY2guIFRyeSB0byBzZXQgY29sb3IgZnJvbSB0aGUgcHJlZmVyZW5jZXMgKGlmIHNwZWNpZmllZCBmb3IgdGhhdAorCSAqIHByb3BlcnR5KSBvdGhlcndpc2Ugc2V0cyBsaW5lIGNvbG9yIHRvIGJsdWUuCisJICogCisJICogQHBhcmFtIHByb3BlcnRpZXNUb1Bsb3QKKwkgKiBAcGFyYW0gbHNMaXN0CisJICovCisJcHVibGljIHN0YXRpYyB2b2lkIHNldENvbG9yRGVmcygKKwkJCWZpbmFsIExpc3Q8U3RyaW5nPiBwcm9wZXJ0aWVzVG9QbG90LAorCQkJZmluYWwgTGlzdDxMaW5lU2VyaWVzPiBsc0xpc3QpIHsKKwkJLy8gdGhlIGRlZmF1bHQgbGluZSBjb2xvcgorCisJCS8vIGlmIHBvc3NpYmxlIGdldCBjb2xvciBmcm9tIHByZWZlcmVuY2VzCisJCWZpbmFsIE1hcDxTdHJpbmcsIENvbG9yPiBjb2xvck1hcCA9IFZpc3VhbGl6YXRpb25QcmVmZXJlbmNlUGFnZQorCQkJCS5nZXRDb2xvck1hcHBpbmcoKTsKKwkJZm9yIChpbnQgaSA9IDA7IGkgPCBsc0xpc3Quc2l6ZSgpOyBpKyspIHsKKwkJCUNvbG9yRGVmaW5pdGlvbiBjb2xvciA9IENvbG9yRGVmaW5pdGlvbkltcGwuQkxVRSgpOworCisJCQlpZiAoKHByb3BlcnRpZXNUb1Bsb3QgIT0gbnVsbCkgJiYgKHByb3BlcnRpZXNUb1Bsb3Quc2l6ZSgpID4gaSkpIHsKKwkJCQlmaW5hbCBTdHJpbmcga2V5ID0gcHJvcGVydGllc1RvUGxvdC5nZXQoaSk7CisJCQkJLy8gbG9vayBvciB0aGUgcHJlZmVyZW5jZSBjb2xvciBieSBuYW1lCisJCQkJaWYgKGNvbG9yTWFwLmNvbnRhaW5zS2V5KGtleSkpIHsKKwkJCQkJZmluYWwgQ29sb3IgYyA9IGNvbG9yTWFwLmdldChrZXkpOworCQkJCQljb2xvciA9IENvbG9yRGVmaW5pdGlvbkltcGwuY3JlYXRlKGMuZ2V0UmVkKCksCisJCQkJCQkJYy5nZXRHcmVlbigpLCBjLmdldEJsdWUoKSk7CisJCQkJfQorCQkJCWxzTGlzdC5nZXQoaSkuc2V0U2VyaWVzSWRlbnRpZmllcihrZXkpOworCQkJCWxzTGlzdC5nZXQoaSkuZ2V0TGluZUF0dHJpYnV0ZXMoKS5zZXRDb2xvcihjb2xvcik7CisJCQl9IGVsc2UgeworCisJCQkJaWYgKGxzTGlzdC5nZXQoaSkgIT0gbnVsbCkgeworCQkJCQlsc0xpc3QuZ2V0KGkpLnNldFNlcmllc0lkZW50aWZpZXIoIiAiKTsKKwkJCQkJbHNMaXN0LmdldChpKS5nZXRMaW5lQXR0cmlidXRlcygpLnNldENvbG9yKGNvbG9yKTsKKwkJCQl9CisJCQl9CisJCX0KKwkJcmV0dXJuOworCX0vLyBnZXRDb2xvckRlZgorCisKKwkKKworCS8qKgorCSAqIERpc3Bvc2VzIHRoZSBDb2xvciBvYmplY3RzCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgZGlzcG9zZSgpIHsKKwkJc3VwZXIuZGlzcG9zZSgpOworCX0KKworCS8qKgorCSAqIHJlc2V0CisJICovCisJcHVibGljIHZvaWQgcmVzZXQoKSB7CisJCXJlc2V0RGF0YSgpOworCQlyZWRyYXcoKTsKKwl9CisKKwlwcm90ZWN0ZWQgdm9pZCByZXNldERhdGEoKSB7CisJCWNsZWFyRGF0YSgpOworCQorCQljeWNsZU51bWJlcnMuYWRkKEludGVnZXIudmFsdWVPZigwKSk7CisJfQorCisJcHJvdGVjdGVkIHZvaWQgY2xlYXJEYXRhKCkgeworCQkKKwkJZGF0YVNlcmllc01hcC5jbGVhcigpOworCQljeWNsZU51bWJlcnMuY2xlYXIoKTsKKwl9CisKKwkKKwkvKioKKwkgKiB0b2dnbGUgdGhlIHNjYWxlIGZyb20gbG9nYXJpdGhtaWMgdG8gbGluZWFyCisJICovCisJdm9pZCB0b2dnbGVBeGlzU2NhbGUoKSB7CisJCWlmICh1c2VMaW5lYXJUaW1lU2NhbGUpIHsgLy9Td2l0Y2ggdG8gbG9nYXJpdGhtaWMgc2NhbGUKKwkJCWxvZ1RpbWVBY3Rpb24uc2V0Q2hlY2tlZCh0cnVlKTsKKwkJCWxpbmVhclRpbWVBY3Rpb24uc2V0Q2hlY2tlZChmYWxzZSk7CisJCQkvL0p1c3QgdXNpbmcgdGhlIGZvbGxvd2luZyBheGlzIHR5cGUsIHRvIG1vdmUgdG8gbG9nIHNjYWxlLCBkaWRuJ3Qgd29yaworCQkJLy95QXhpc1ByaW1hcnkuc2V0VHlwZShBeGlzVHlwZS5MT0dBUklUSE1JQ19MSVRFUkFMKTsKKwkJCXlBeGlzUHJpbWFyeS5nZXRTY2FsZSgpLnNldE1pbihudWxsKTsKKwkJCXlBeGlzUHJpbWFyeS5nZXRTY2FsZSgpLnNldE1heChudWxsKTsKKwkJCXlBeGlzUHJpbWFyeS5nZXRTY2FsZSgpLnVuc2V0U3RlcCgpOworCQkJeUF4aXNQcmltYXJ5LmdldFNjYWxlKCkudW5zZXRTdGVwTnVtYmVyKCk7CisJCX0KKwkJZWxzZSB7IC8vU3dpdGNoIHRvIGxpbmVhciBzY2FsZQorCQkJbG9nVGltZUFjdGlvbi5zZXRDaGVja2VkKGZhbHNlKTsKKwkJCWxpbmVhclRpbWVBY3Rpb24uc2V0Q2hlY2tlZCh0cnVlKTsKKwkJCS8veUF4aXNQcmltYXJ5LnNldFR5cGUoQXhpc1R5cGUuTElORUFSX0xJVEVSQUwpOworCQkJeUF4aXNQcmltYXJ5LmdldFNjYWxlKCkuc2V0TWluKE51bWJlckRhdGFFbGVtZW50SW1wbC5jcmVhdGUoMC4wKSk7CisJCQl5QXhpc1ByaW1hcnkuZ2V0U2NhbGUoKS5zZXRNYXgoTnVtYmVyRGF0YUVsZW1lbnRJbXBsLmNyZWF0ZSgxLjApKTsKKwkJCXlBeGlzUHJpbWFyeS5nZXRTY2FsZSgpLnNldFN0ZXAoMC4yNSk7CisJCX0KKwkJdXNlTGluZWFyVGltZVNjYWxlID0gIXVzZUxpbmVhclRpbWVTY2FsZTsKKwkJZHJhdygpOworCX0KKwkKKworCS8qKgorCSAqIHRvZ2dsZSB0aGUgc2NhbGUgZnJvbSBsb2dhcml0aG1pYyB0byBsaW5lYXIKKwkgKi8KKwl2b2lkIHRvZ2dsZUxlZ2VuZCgpIHsKKwkJaWYgKHNob3dMZWdlbmQpIHsgLy9Td2l0Y2ggdG8gaGlkZQorCQkJdmlld0xlZ2VuZC5zZXRDaGVja2VkKGZhbHNlKTsKKwkJCWhpZGVMZWdlbmQuc2V0Q2hlY2tlZCh0cnVlKTsKKwkJCWxlZ2VuZC5zZXRWaXNpYmxlKGZhbHNlKTsKKwkJfQorCQllbHNlIHsgLy9Td2l0Y2ggdG8gdmlldworCQkJdmlld0xlZ2VuZC5zZXRDaGVja2VkKHRydWUpOworCQkJaGlkZUxlZ2VuZC5zZXRDaGVja2VkKGZhbHNlKTsKKwkJCWxlZ2VuZC5zZXRWaXNpYmxlKHRydWUpOworCQl9CisJCXNob3dMZWdlbmQgPSAhc2hvd0xlZ2VuZDsKKwkJZHJhdygpOworCX0KKworCisJLyoqCisJICogQWN0aW9uIHRvIHNob3cgdGhlIGxlZ2VuZAorCSAqLworCXByb3RlY3RlZCBjbGFzcyBMZWdlbmRWaWV3QWN0aW9uIGV4dGVuZHMgQWN0aW9uIHsKKwkJcHVibGljIExlZ2VuZFZpZXdBY3Rpb24oKQorCQl7CisJCQlzdXBlcihNZXNzYWdlcy5nZXRTdHJpbmcoIkNvbnRleHRNZW51LlNob3dMZWdlbmQiKSwgSUFjdGlvbi5BU19DSEVDS19CT1gpOworCQkJc2V0Q2hlY2tlZChzaG93TGVnZW5kKTsKKwkJfQorCisJCS8qKgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5BY3Rpb24jZ2V0VGV4dCgpCisJCSAqLworCQlAT3ZlcnJpZGUKKwkJcHVibGljIFN0cmluZyBnZXRUZXh0KCkgeworCQkJcmV0dXJuIE1lc3NhZ2VzLmdldFN0cmluZygiQ29udGV4dE1lbnUuU2hvd0xlZ2VuZCIpOworCQl9CisKKwkJLyoqCisJCSAqIEBzZWUgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLkFjdGlvbiNydW4oKQorCQkgKi8KKwkJQE92ZXJyaWRlCisJCXB1YmxpYyB2b2lkIHJ1bigpIHsKKwkJCWlmIChzaG93TGVnZW5kKSB7CisJCQkJc2V0Q2hlY2tlZCh0cnVlKTsKKwkJCQkvL05vdGhpbmcgdG8gZG8uIEl0J3MgYWxyZWFkeSBsaW5lYXItdGltZS4KKwkJCX0KKwkJCWVsc2UgeworCQkJCXRvZ2dsZUxlZ2VuZCgpOworCQkJfQorCQkJZHJhdygpOworCQl9CisJfSAvL0xlZ2VuZFZpZXdBY3Rpb24KKwkKKwkvKioKKwkgKiBBY3Rpb24gdG8gaGlkZSB0aGUgbGVnZW5kCisJICovCisJY2xhc3MgTGVnZW5kSGlkZUFjdGlvbiBleHRlbmRzIEFjdGlvbiAJeworCQlwdWJsaWMgTGVnZW5kSGlkZUFjdGlvbigpCisJCXsKKwkJCXN1cGVyKE1lc3NhZ2VzLmdldFN0cmluZygiQ29udGV4dE1lbnUuSGlkZUxlZ2VuZCIpLCBJQWN0aW9uLkFTX0NIRUNLX0JPWCk7CisJCQlzZXRDaGVja2VkKCFzaG93TGVnZW5kKTsKKwkJfQorCisJCS8qKgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5BY3Rpb24jZ2V0VGV4dCgpCisJCSAqLworCQlAT3ZlcnJpZGUKKwkJcHVibGljIFN0cmluZyBnZXRUZXh0KCkgeworCQkJcmV0dXJuIE1lc3NhZ2VzLmdldFN0cmluZygiQ29udGV4dE1lbnUuSGlkZUxlZ2VuZCIpOworCQl9CisKKwkJLyoqCisJCSAqIEBzZWUgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLkFjdGlvbiNydW4oKQorCQkgKi8KKwkJQE92ZXJyaWRlCisJCXB1YmxpYyB2b2lkIHJ1bigpIHsKKwkJCWlmICghc2hvd0xlZ2VuZCkgeworCQkJCXNldENoZWNrZWQodHJ1ZSk7CisJCQkJLy9Ob3RoaW5nIHRvIGRvLiBJdCdzIGFscmVhZHkgbG9nLXRpbWUuCisJCQl9CisJCQllbHNlIHsKKwkJCQl0b2dnbGVMZWdlbmQoKTsKKwkJCX0KKwkJCWRyYXcoKTsKKwkJfQorCX0vL0xlZ2VuZEhpZGVBY3Rpb24KKworCQorCS8qKgorCSAqIHN3aXRjaCB0byBsaW5lYXIgcGxvdCAKKwkgKiAKKwkgKi8KKwlwcm90ZWN0ZWQgY2xhc3MgTGluZWFyU2NhbGVBY3Rpb24gZXh0ZW5kcyBBY3Rpb24geworCQlwdWJsaWMgTGluZWFyU2NhbGVBY3Rpb24oKQorCQl7CisJCQlzdXBlcihNZXNzYWdlcy5nZXRTdHJpbmcoIkNvbnRleHRNZW51LkxpbmVhclRpbWVTY2FsZSIpLCBJQWN0aW9uLkFTX0NIRUNLX0JPWCk7CisJCQlzZXRDaGVja2VkKHVzZUxpbmVhclRpbWVTY2FsZSk7CisJCX0KKworCQkvKioKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uQWN0aW9uI2dldFRleHQoKQorCQkgKi8KKwkJQE92ZXJyaWRlCisJCXB1YmxpYyBTdHJpbmcgZ2V0VGV4dCgpIHsKKwkJCXJldHVybiBNZXNzYWdlcy5nZXRTdHJpbmcoIkNvbnRleHRNZW51LkxpbmVhclRpbWVTY2FsZSIpOworCQl9CisKKwkJLyoqCisJCSAqIEBzZWUgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLkFjdGlvbiNydW4oKQorCQkgKi8KKwkJQE92ZXJyaWRlCisJCXB1YmxpYyB2b2lkIHJ1bigpIHsKKwkJCWlmICh1c2VMaW5lYXJUaW1lU2NhbGUpIHsKKwkJCQlzZXRDaGVja2VkKHRydWUpOworCQkJCS8vTm90aGluZyB0byBkby4gSXQncyBhbHJlYWR5IGxpbmVhci10aW1lLgorCQkJfQorCQkJZWxzZSB7CisJCQkJdG9nZ2xlQXhpc1NjYWxlKCk7CisJCQl9CisJCQlkcmF3KCk7CisJCX0KKwl9IC8vTGluZWFyU2NhbGVBY3Rpb24KKworCS8qKgorCSAqIHN3aXRjaCB0byBzZW1pLWxvZyBwbG90IChsb2cgc2NhbGUgb24geSBheGlzKQorCSAqIAorCSAqLworCWNsYXNzIExvZ1NjYWxlQWN0aW9uIGV4dGVuZHMgQWN0aW9uIAl7CisJCXB1YmxpYyBMb2dTY2FsZUFjdGlvbigpCisJCXsKKwkJCXN1cGVyKE1lc3NhZ2VzLmdldFN0cmluZygiQ29udGV4dE1lbnUuTG9nVGltZVNjYWxlIiksIElBY3Rpb24uQVNfQ0hFQ0tfQk9YKTsKKwkJCXNldENoZWNrZWQoIXVzZUxpbmVhclRpbWVTY2FsZSk7CisJCX0KKworCQkvKioKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uQWN0aW9uI2dldFRleHQoKQorCQkgKi8KKwkJQE92ZXJyaWRlCisJCXB1YmxpYyBTdHJpbmcgZ2V0VGV4dCgpIHsKKwkJCXJldHVybiBNZXNzYWdlcy5nZXRTdHJpbmcoIkNvbnRleHRNZW51LkxvZ1RpbWVTY2FsZSIpOworCQl9CisKKwkJLyoqCisJCSAqIEBzZWUgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLkFjdGlvbiNydW4oKQorCQkgKi8KKwkJQE92ZXJyaWRlCisJCXB1YmxpYyB2b2lkIHJ1bigpIHsKKwkJCWlmICghdXNlTGluZWFyVGltZVNjYWxlKSB7CisJCQkJc2V0Q2hlY2tlZCh0cnVlKTsKKwkJCQkvL05vdGhpbmcgdG8gZG8uIEl0J3MgYWxyZWFkeSBsb2ctdGltZS4KKwkJCX0KKwkJCWVsc2UgeworCQkJCXRvZ2dsZUF4aXNTY2FsZSgpOworCQkJfQorCQkJZHJhdygpOworCQl9CisJfS8vTG9nU2NhbGVBY3Rpb24KKwkKKwkvKioKKwkgKiBEaXNwbGF5YWJsZVByb3BlcnR5CisJICoKKwkgKi8KKwlwcm90ZWN0ZWQgY2xhc3MgRGlzcGxheWFibGVQcm9wZXJ0eSBleHRlbmRzIEFjdGlvbgorCXsKKwkJU3RyaW5nIHByb3BlcnR5ID0gbnVsbDsKKwkJcHVibGljIERpc3BsYXlhYmxlUHJvcGVydHkoU3RyaW5nIHByb3BlcnR5LCBib29sZWFuIHZpc2liaWxpdHkpCisJCXsKKwkJCQkJc3VwZXIocHJvcGVydHksIElBY3Rpb24uQVNfQ0hFQ0tfQk9YKTsKKwkJCQkJdGhpcy5wcm9wZXJ0eSA9IHByb3BlcnR5OworCQkJCQlzZXRDaGVja2VkKHZpc2liaWxpdHkpOworCQl9CisJCQorCQorCisJCS8qKgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5BY3Rpb24jZ2V0VGV4dCgpCisJCSAqLworCQlAT3ZlcnJpZGUKKwkJcHVibGljIFN0cmluZyBnZXRUZXh0KCkgeworCQkJcmV0dXJuIHByb3BlcnR5OworCQl9CisKKwkJLyoqCisJCSAqIFRvZ2dsZSB0aGUgc3RhdGUKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uQWN0aW9uI3J1bigpCisJCSAqLworCQlAT3ZlcnJpZGUKKwkJcHVibGljIHZvaWQgcnVuKCkgeworCQkJCURhdGFTZXJpZXMgc2VyaWVzID0gZGF0YVNlcmllc01hcC5nZXQocHJvcGVydHkpOworCQkJCXNlcmllcy50b2dnbGVWaXNpYmxlKCk7CisJCQkJZGF0YVNlcmllc01hcC5wdXQocHJvcGVydHksc2VyaWVzKTsKKwkJCQlzZXRDaGVja2VkKHNlcmllcy5pc1Zpc2libGUoKSk7CisJCQkJdmlzaWJsZU1hcC5wdXQocHJvcGVydHksIHNlcmllcy5pc1Zpc2libGUoKSk7CisJCQkJZHJhdygpOworCQl9CisJfS8vIERpc3BsYXlhYmxlUHJvcGVydHkKKwkKKwkKKwkvKioKKwkgKiBJbm5lciBjbGFzcyBEYXRhU2VyaWVzCisJICogYWxsIHRoZSBkYXRhIG9iamVjdHMgZm9yIGEgcGxvdAorCSAqCisJICovCisJcHJvdGVjdGVkIGNsYXNzIERhdGFTZXJpZXMgCisJeworCQlwdWJsaWMgU3RyaW5nIHByb3BlcnR5TmFtZSA9ICIiOworCQkKKwkJcHVibGljIExpc3Q8RG91YmxlPiByZWxhdGl2ZVZhbHVlcyA9IG5ldyBBcnJheUxpc3Q8RG91YmxlPigpOworCQlwdWJsaWMgU2VyaWVzIGxpbmVTZXJpZXMgPSBudWxsOworCQlwcml2YXRlIGJvb2xlYW4gdmlzaWJsZSA9IHRydWU7CisJCXByaXZhdGUgU2VyaWVzRGVmaW5pdGlvbiBzZFkgPSBudWxsOworCQlwcml2YXRlIGludCBzZXJpZXNJbmRleCA9IDA7CisJCXByaXZhdGUgYm9vbGVhbiBvdmVybGF5TW9kZSA9IGZhbHNlOworCQkKKwkJCisJCXB1YmxpYyBib29sZWFuIGlzVmlzaWJsZSgpIHsKKwkJCXJldHVybiB2aXNpYmxlOworCQl9CisJCXB1YmxpYyB2b2lkIHNldFZpc2libGUoYm9vbGVhbiBzdGF0ZSkgeworCQkJdmlzaWJsZSA9IHN0YXRlOworCQl9CisJCQorCQlwdWJsaWMgdm9pZCB0b2dnbGVWaXNpYmxlKCkgeworCQkJdmlzaWJsZSA9ICF2aXNpYmxlOworCQl9CisKKwkJLyoqCisJCSAqIAorCQkgKiBAcGFyYW0gcHJvcGVydHlOYW1lCisJCSAqIEBwYXJhbSBpbmRleAorCQkgKiBAcGFyYW0gb3ZlcmxheSAKKwkJICovCisJCXB1YmxpYyBEYXRhU2VyaWVzKFN0cmluZyBwcm9wZXJ0eU5hbWUsIGludCBpbmRleCwgYm9vbGVhbiBvdmVybGF5KSB7CisJCQl0aGlzLnByb3BlcnR5TmFtZSA9IHByb3BlcnR5TmFtZTsKKwkJCXRoaXMuc2VyaWVzSW5kZXggPSBpbmRleDsKKwkJCXRoaXMub3ZlcmxheU1vZGUgPSBvdmVybGF5OworCQkJcmVsYXRpdmVWYWx1ZXMgPSBuZXcgQXJyYXlMaXN0PERvdWJsZT4oKTsKKwkJCXJlbGF0aXZlVmFsdWVzLmFkZChuZXcgRG91YmxlKDAuMCkpOworCQkJYWRkTGluZVNlcmllcyhwcm9wZXJ0eU5hbWUpOworCQl9CisJCQorCQlwdWJsaWMgdm9pZCBhZGRWYWx1ZShEb3VibGUgdmFsKSB7CisJCQlpZihyZWxhdGl2ZVZhbHVlcz09bnVsbCkgcmVsYXRpdmVWYWx1ZXMgPSBuZXcgQXJyYXlMaXN0PERvdWJsZT4oKTsKKwkJCXJlbGF0aXZlVmFsdWVzLmFkZCh2YWwpOworCQl9CisJCQorCQkvKioKKwkJICogQHBhcmFtIHByb3BlcnR5TmFtZQorCQkgKiAKKwkJICovCisJCUBTdXBwcmVzc1dhcm5pbmdzKCJkZXByZWNhdGlvbiIpCisJCXB1YmxpYyB2b2lkIGFkZExpbmVTZXJpZXMoZmluYWwgU3RyaW5nIHByb3BlcnR5TmFtZSkgeworCQkJCisJCQlmaW5hbCBOdW1iZXJEYXRhU2V0IG9ydGhvVmFsdWVzID0gTnVtYmVyRGF0YVNldEltcGwKKwkJCQkJLmNyZWF0ZShyZWxhdGl2ZVZhbHVlcyk7CisJCQlpZihsaW5lU2VyaWVzID09IG51bGwpIHsKKwkJCQlsaW5lU2VyaWVzID0gU2NhdHRlclNlcmllc0ltcGwuY3JlYXRlKCk7CisJCQkJLyoKKwkJCQkgKiAKKwkJCQkgKiBCYXIgY2hhcnQgc3R5bGUgaXMgdG9vIHNsb3cgZm9yIGdlbmVyYXRpb24gb2YgYSBmaWxsCisJCQkJICogaWYgd2Ugd2FudCBhIGZpbGwgd2UgY2FuIHRyeSB1c2luZyB0aGUgZGlmZmVyZW5jZSBwbG90CisJCQkJICogdG8gYSBzdHJhaWdodCBsaW5lIGF0IHk9MAorCQkJCSAqIAorCQkJCQorCQkJCWlmKHByb3BlcnR5TmFtZS5pbmRleE9mKCIqIik+PTEpIHsKKwkJCQkJLy8gYmFyc2VyaWVzIG1ldGhvZHMKKwkJCQkJbGluZVNlcmllcyA9IChCYXJTZXJpZXMpIEJhclNlcmllc0ltcGwuY3JlYXRlKCk7CisJCQkJfSBlbHNlIHsKKwkJCQkJbGluZVNlcmllcyA9IChTY2F0dGVyU2VyaWVzKSBTY2F0dGVyU2VyaWVzSW1wbC5jcmVhdGUoKTsKKwkJCQl9CisJCQkJCisJCQkJKgorCQkJCSovCisJCQl9IC8vIGlmIGxpbmVTZXJpZXM9PW51bGwKKwkJCWxpbmVTZXJpZXMuc2V0RGF0YVNldChvcnRob1ZhbHVlcyk7CisJCQkoKExpbmVTZXJpZXMpIGxpbmVTZXJpZXMpLmdldExpbmVBdHRyaWJ1dGVzKCkuc2V0VmlzaWJsZSh0cnVlKTsKKwkJCSgoTGluZVNlcmllcykgbGluZVNlcmllcykuZ2V0TGluZUF0dHJpYnV0ZXMoKS5zZXRUaGlja25lc3MoMyk7CisJCQkoKExpbmVTZXJpZXMpIGxpbmVTZXJpZXMpLmdldE1hcmtlcnMoKS5jbGVhcigpOworCQkJCisJCQkvLyBBc3NpZ24gdGhlIGxpbmUgY29sb3IKKwkJCS8vIGJhc2VkIG9uIHNlbGVjdGVkIHByb3BlcnR5LiBEZWZhdWx0IGlzIEJsdWUKKwkJCXNldENvbG9yRGVmcyhzZXJpZXNJbmRleCk7CisJCQkvLyBJZiB0aGlzIGlzIHRoZSAic2VsZWN0ZWQiIHJlZ2lvbiBvZiBhIGdyYXBoIHNldCB0aGUgbWFya2VyIHR5cGUKKwkJCisJCQkvLyB0aGUgc2VyaWVzIGRlZgorCQkJc2RZID0gU2VyaWVzRGVmaW5pdGlvbkltcGwuY3JlYXRlKCk7CisJCQlzZFkuZ2V0U2VyaWVzUGFsZXR0ZSgpLnVwZGF0ZSgtMik7CisJCQlzZFkuZ2V0U2VyaWVzKCkuYWRkKGxpbmVTZXJpZXMpOworCQkJeUF4aXNQcmltYXJ5LmdldFNlcmllc0RlZmluaXRpb25zKCkuYWRkKHNkWSk7CisJCQkKKwkJCXJldHVybjsKKwkJfS8vIGFkZExpbmVTZXJpZXMKKwkJCisJCS8qKiAKKwkJICogaW4gcmVzcG9uc2UgdG8gdXNlciBhY3Rpb24gdGVtcG9yYXJpbHkgcmVtb3ZlIHRoZSBsaW5lIHNlcmllcyBmcm9tIHRoZSBncmFwaAorCQkgKi8KKwkJcHVibGljIHZvaWQgaGlkZSgpIHsKKwkJCWxpbmVTZXJpZXMuc2V0VmlzaWJsZShmYWxzZSk7CisJCQl2aXNpYmxlID0gZmFsc2U7CisJCX0vLyBoaWRlCisJCQorCQkvKiogCisJCSAqIGluIHJlc3BvbnNlIHRvIHVzZXIgYWN0aW9uIGFkZCBiYWNrIHRoZSBsaW5lIHNlcmllcyB0byB0aGUgZ3JhcGgKKwkJICovCisJCXB1YmxpYyB2b2lkIHNob3coKSB7CisJCQlsaW5lU2VyaWVzLnNldFZpc2libGUodHJ1ZSk7CisJCQl2aXNpYmxlID0gdHJ1ZTsKKwkJfS8vIHNob3cKKwkJCisKKwkJLyoqCisJCSAqIE92ZXJsb2FkZWQgYW5kIHNpbXBsZSBtZXRob2QgdG8gc2V0IHRoZSBjb2xvcnMKKwkJICogZG9lcyBub3QgdXNlIHRoZSBwcmVmZXJlbmNlcworCQkgKiAKKwkJICogU2V0cyB0aGUgY29sb3JzIGZvciBhIG4gYXJyYXkgb2YgTGluZVNlcmllcyBnaXZlbiB0aGUgcHJvcGVydHkgdG8gUGxvdAorCQkgKiBmb3IgZWFjaC4gVHJ5IHRvIHNldCBjb2xvciBmcm9tIHRoZSBwcmVmZXJlbmNlcyAoaWYgc3BlY2lmaWVkIGZvciB0aGF0CisJCSAqIHByb3BlcnR5KSBvdGhlcndpc2Ugc2V0cyBsaW5lIGNvbG9yIHRvIGJsdWUuCisJCSAqIEBwYXJhbSBwcm9wZXJ0eU5hbWUgCisJCSAqCisJCSAqLworCQlwdWJsaWMgdm9pZCBzZXRDb2xvckRlZnMoaW50IGluZGV4KSB7CisJCQkvLyB0aGUgZGVmYXVsdCBsaW5lIGNvbG9yCisJCQlpZihpbmRleCA+PSBjb2xvckRlZmF1bHQubGVuZ3RoKSBpbmRleCA9IDA7IC8vIHNob3VsZCBuZXZlciBoYXBwZW4KKwkJCUNvbG9yRGVmaW5pdGlvbiBjb2xvciA9IGNvbG9yRGVmYXVsdFtpbmRleF07CisKKwkJCXRoaXMubGluZVNlcmllcy5zZXRTZXJpZXNJZGVudGlmaWVyKHByb3BlcnR5TmFtZSk7CisJCQlpZiAob3ZlcmxheU1vZGUpIHsKKwkJCQkJKChMaW5lU2VyaWVzKXRoaXMubGluZVNlcmllcykuZ2V0TGluZUF0dHJpYnV0ZXMoKS5zZXRDb2xvcihjb2xvcik7CisJCQkJCSgoTGluZVNlcmllcyl0aGlzLmxpbmVTZXJpZXMpLmdldExpbmVBdHRyaWJ1dGVzKCkuc2V0U3R5bGUoTGluZVN0eWxlLkRPVFRFRF9MSVRFUkFMKTsKKwkJCX0gZWxzZSB7CisJCQkJKChMaW5lU2VyaWVzKXRoaXMubGluZVNlcmllcykuZ2V0TGluZUF0dHJpYnV0ZXMoKS5zZXRDb2xvcihjb2xvcik7CisJCQl9CisJCQkKKwkJCQorCQl9Ly8gZ2V0Q29sb3JEZWZzCisJCQorCQkvKioKKwkJICogU2V0cyB0aGUgY29sb3JzIGZvciBhIG4gYXJyYXkgb2YgTGluZVNlcmllcyBnaXZlbiB0aGUgcHJvcGVydHkgdG8gUGxvdAorCQkgKiBmb3IgZWFjaC4gVHJ5IHRvIHNldCBjb2xvciBmcm9tIHRoZSBwcmVmZXJlbmNlcyAoaWYgc3BlY2lmaWVkIGZvciB0aGF0CisJCSAqIHByb3BlcnR5KSBvdGhlcndpc2Ugc2V0cyBsaW5lIGNvbG9yIHRvIGJsdWUuCisJCSAqIEBwYXJhbSBwcm9wZXJ0eU5hbWUgCisJCSAqCisJCSAqLworCQlwdWJsaWMgdm9pZCBzZXRDb2xvckRlZnMoU3RyaW5nIHByb3BlcnR5TmFtZSkgeworCQkJLy8gdGhlIGRlZmF1bHQgbGluZSBjb2xvcgorCisJCQkvLyBpZiBwb3NzaWJsZSBnZXQgY29sb3IgZnJvbSBwcmVmZXJlbmNlcworCQkJZmluYWwgTWFwPFN0cmluZywgQ29sb3I+IGNvbG9yTWFwID0gVmlzdWFsaXphdGlvblByZWZlcmVuY2VQYWdlLmdldENvbG9yTWFwcGluZygpOworCisJCQkvLyBkZWZhdWx0IGNvbG9yCisJCQlpbnQgY29sb3JJbmRleCA9IHNlcmllc0luZGV4ICUgY29sb3JEZWZhdWx0Lmxlbmd0aDsKKwkJCUNvbG9yRGVmaW5pdGlvbiBjb2xvciA9IGNvbG9yRGVmYXVsdFtjb2xvckluZGV4XTsKKworCQkJLy8gcHJlZmVycmVkIGNvbG9yIGJ5IG5hbWUKKwkJCVN0cmluZyBrZXkgPSBwcm9wZXJ0eU5hbWUuc3Vic3RyaW5nKDAsMSk7CisJCQkKKwkJCWlmIChjb2xvck1hcC5jb250YWluc0tleShrZXkpKSB7CisJCQkJZmluYWwgQ29sb3IgYyA9IGNvbG9yTWFwLmdldChrZXkpOworCQkJCWNvbG9yID0gQ29sb3JEZWZpbml0aW9uSW1wbC5jcmVhdGUoYy5nZXRSZWQoKSwgYy5nZXRHcmVlbigpLCBjLmdldEJsdWUoKSk7CisJCQl9CisJCQkKKwkJCXRoaXMubGluZVNlcmllcy5zZXRTZXJpZXNJZGVudGlmaWVyKHByb3BlcnR5TmFtZSk7CisJCQlpZiAob3ZlcmxheU1vZGUpIHsKKwkJCQkJKChMaW5lU2VyaWVzKXRoaXMubGluZVNlcmllcykuZ2V0TGluZUF0dHJpYnV0ZXMoKS5zZXRDb2xvcihDb2xvckRlZmluaXRpb25JbXBsLkdSRVkoKSk7CisJCQkJCSgoTGluZVNlcmllcyl0aGlzLmxpbmVTZXJpZXMpLmdldExpbmVBdHRyaWJ1dGVzKCkuc2V0U3R5bGUoTGluZVN0eWxlLkRPVFRFRF9MSVRFUkFMKTsKKwkJCX0gZWxzZSB7CisJCQkJKChMaW5lU2VyaWVzKXRoaXMubGluZVNlcmllcykuZ2V0TGluZUF0dHJpYnV0ZXMoKS5zZXRDb2xvcihjb2xvcik7CisJCQl9CisJCQkKKwkJCQorCQl9Ly8gZ2V0Q29sb3JEZWZzCisKKwkJLyoqCisJCSAqIGxlbmd0aCBvZiB0aGUgc2VyaWVzCisJCSAqIEByZXR1cm4gbnVtYmVyIG9mIGRhdGEgcG9pbnRzCisJCSAqLworCQlwdWJsaWMgaW50IGdldERhdGFTaXplKCkgeworCQkJcmV0dXJuIHJlbGF0aXZlVmFsdWVzLnNpemUoKTsKKwkJfQorCQkvLyBBY2Nlc3NvcnMKKwkJcHVibGljIFN0cmluZyBnZXRQcm9wZXJ0eU5hbWUoKSB7CisJCQlyZXR1cm4gcHJvcGVydHlOYW1lOworCQl9CisKKwkJcHVibGljIHZvaWQgc2V0UHJvcGVydHlOYW1lKFN0cmluZyBwcm9wZXJ0eU5hbWUpIHsKKwkJCXRoaXMucHJvcGVydHlOYW1lID0gcHJvcGVydHlOYW1lOworCQl9CisKKwkJcHVibGljIExpc3Q8RG91YmxlPiBnZXRSZWxhdGl2ZVZhbHVlcygpIHsKKwkJCXJldHVybiByZWxhdGl2ZVZhbHVlczsKKwkJfQorCisJCXB1YmxpYyB2b2lkIHNldFJlbGF0aXZlVmFsdWVzKExpc3Q8RG91YmxlPiByZWxhdGl2ZVZhbHVlcykgeworCQkJdGhpcy5yZWxhdGl2ZVZhbHVlcyA9IHJlbGF0aXZlVmFsdWVzOworCQl9CisKKwkJCisKKwkJcHVibGljIHZvaWQgc2V0TGluZVNlcmllcyhMaW5lU2VyaWVzIGxpbmVTZXJpZXMpIHsKKwkJCXRoaXMubGluZVNlcmllcyA9IGxpbmVTZXJpZXM7CisJCX0KKwl9Ly8gRGF0YVNlcmllcworCS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisJCit9IC8vIEFnZ3JlZ2F0ZVRpbWVTZXJpZXNDYW52YXMKZGlmZiAtLWdpdCBhL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuYXV0b21hdGljZXhwZXJpbWVudC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9hbmFseXNpcy9hdXRvbWF0aWNleHBlcmltZW50L3ZpZXdzL0FuYWx5c2lzQ29udHJvbC5qYXZhIGIvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5hdXRvbWF0aWNleHBlcmltZW50L3NyYy9vcmcvZWNsaXBzZS9zdGVtL2FuYWx5c2lzL2F1dG9tYXRpY2V4cGVyaW1lbnQvdmlld3MvQW5hbHlzaXNDb250cm9sLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzI4OWIwYwotLS0gL2Rldi9udWxsCisrKyBiL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuYXV0b21hdGljZXhwZXJpbWVudC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9hbmFseXNpcy9hdXRvbWF0aWNleHBlcmltZW50L3ZpZXdzL0FuYWx5c2lzQ29udHJvbC5qYXZhCkBAIC0wLDAgKzEsMTgzIEBACisvLyBBbmFseXNpc0NvbnRyb2wKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5hdXRvbWF0aWNleHBlcmltZW50LnZpZXdzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA3LCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOworaW1wb3J0IGphdmEudXRpbC5MaXN0OworaW1wb3J0IGphdmEudXRpbC5NYXA7CitpbXBvcnQgamF2YS51dGlsLmNvbmN1cnJlbnQuQ29weU9uV3JpdGVBcnJheUxpc3Q7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LlNXVDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLkRpc3Bvc2VFdmVudDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLkRpc3Bvc2VMaXN0ZW5lcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QubGF5b3V0LkZpbGxMYXlvdXQ7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5Gb3JtTGF5b3V0OworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5MYWJlbDsKKworLyoqCisgKiBBbmFseXNpc0NvbnRyb2wgaXMgYSBzdWJjbGFzcyBvZiBDYW52YXMgc3VpdGFibGUgZm9yIGNoYXJ0IGRyYXdpbmdzLgorICovCithYnN0cmFjdCBwdWJsaWMgY2xhc3MgQW5hbHlzaXNDb250cm9sIGV4dGVuZHMgQ29tcG9zaXRlICB7CisKKworCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgU3RyaW5nIENMRUFSX1RFWFQgPSAiY2xlYXIgbW9uaXRvcnMiOworCisJcHJvdGVjdGVkIExhYmVsIHNpbXVsYXRpb25OYW1lTGFiZWw7CisJCisJLyoqCisJICogU3RhdHVzIHRleHQKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBTVEFUVVNfVEVYVCA9ICJzdGF0dXMiOworCQorCXByb3RlY3RlZCBzdGF0aWMgTWFwPFN0cmluZyxPYmplY3Q+IGNvbnRyb2xQYXJhbWV0ZXJzTWFwID0gbmV3IEhhc2hNYXA8U3RyaW5nLE9iamVjdD4oKTsKKwkKKwkvKiogCisJICogYSBzdHJpbmcgZm9yIHNldHRpbmcgdXNlciBmZWVkYmFjayBtZXNzYWdlcworCSAqLworCXByb3RlY3RlZCBTdHJpbmcgdXNlck1lc3NhZ2UgPSAiIjsKKwkKKwkvKioKKwkgKiBhIGxhYmVsIHRvIGRpc3BsYXkgbWVzc2FnZXMKKwkgKi8KKwlwcm90ZWN0ZWQgTGFiZWwgdXNlck1lc3NhZ2VMYWJlbCA9IG51bGw7CisJCisKKwkKKwkvKioKKwkgKiBUaGUgY29sbGVjdGlvbiBvZiBJU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyIHdhaXRpbmcgdG8gYmUgdG9sZCBhYm91dAorCSAqIHNlbGVjdGlvbnMuCisJICovCisJcHJvdGVjdGVkIGZpbmFsIExpc3Q8SVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcj4gbGlzdGVuZXJzID0gbmV3IENvcHlPbldyaXRlQXJyYXlMaXN0PElTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXI+KCk7CisKKwlwcm90ZWN0ZWQgTGFiZWwgaWRlbnRpZmlhYmxlVGl0bGU7CisKKwkvKioKKwkgKiBUaGUgd2lkdGggb2YgdGhlIGxheW91dCBtYXJnaW4uCisJICovCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBpbnQgTUFSR0lOX1dJRFRIID0gNTsKKworCS8qKgorCSAqIFRoZSBoZWlnaHQgb2YgdGhlIGxheW91dCBtYXJnaW4uCisJICovCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBpbnQgTUFSR0lOX0hFSUdIVCA9IDU7CisKKwkvKioKKwkgKiBAcGFyYW0gcGFyZW50CisJICogQHBhcmFtIHN0eWxlCisJICovCisJcHVibGljIEFuYWx5c2lzQ29udHJvbChmaW5hbCBDb21wb3NpdGUgcGFyZW50LCBmaW5hbCBpbnQgc3R5bGUpIHsKKwkJc3VwZXIocGFyZW50LCBzdHlsZSk7CisKKwkJdGhpcy5hZGREaXNwb3NlTGlzdGVuZXIobmV3IERpc3Bvc2VMaXN0ZW5lcigpIHsKKwkJCS8qKgorCQkJICogQHNlZSBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLkRpc3Bvc2VMaXN0ZW5lciN3aWRnZXREaXNwb3NlZChvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLkRpc3Bvc2VFdmVudCkKKwkJCSAqLworCQkJcHVibGljIHZvaWQgd2lkZ2V0RGlzcG9zZWQoQFN1cHByZXNzV2FybmluZ3MoInVudXNlZCIpCisJCQlmaW5hbCBEaXNwb3NlRXZlbnQgZSkgeworCQkJCWRpc3Bvc2UoKTsKKwkJCX0KKwkJfSk7CisKKwkJZmluYWwgRm9ybUxheW91dCBsYXlvdXQgPSBuZXcgRm9ybUxheW91dCgpOworCQlsYXlvdXQubWFyZ2luSGVpZ2h0ID0gTUFSR0lOX0hFSUdIVDsKKwkJbGF5b3V0Lm1hcmdpbldpZHRoID0gTUFSR0lOX1dJRFRIOworCQlzZXRMYXlvdXQobGF5b3V0KTsKKworCX0gLy8gQW5hbHlzaXNDb250cm9sCisKKwkvKioKKwkgKiBAcGFyYW0gcGFyZW50CisJICogICAgICAgICAgICB0aGUgcGFyZW50IFNXVCBjb250cm9sIHRoYXQgdGhpcyBjb21wb3NpdGUgd2lsbCBiZSBhIGNoaWxkIG9mCisJICogQHJldHVybiB0aGUgU1dUIENvbXBvc2l0ZSB0byBiZSBkaXNwbGF5ZWQgYWJvdmUgdGhlIE1hcENhbnZhcyBpbiB0aGUKKwkgKiAgICAgICAgIGNvbnRyb2wKKwkgKi8KKwlwcm90ZWN0ZWQgQ29tcG9zaXRlIGNyZWF0ZVRvcENvbXBvc2l0ZShmaW5hbCBDb21wb3NpdGUgcGFyZW50KSB7CisJCWZpbmFsIENvbXBvc2l0ZSB0b3BDb21wb3NpdGUgPSBuZXcgQ29tcG9zaXRlKHBhcmVudCwgU1dULk5PTkUpOworCisJCWZpbmFsIEZpbGxMYXlvdXQgdG9wQ29tcG9zaXRlTGF5b3V0ID0gbmV3IEZpbGxMYXlvdXQoU1dULlZFUlRJQ0FMKTsKKwkJdG9wQ29tcG9zaXRlLnNldExheW91dCh0b3BDb21wb3NpdGVMYXlvdXQpOworCisJCXNpbXVsYXRpb25OYW1lTGFiZWwgPSBuZXcgTGFiZWwodG9wQ29tcG9zaXRlLCBTV1QuQ0VOVEVSKTsKKwkJc2ltdWxhdGlvbk5hbWVMYWJlbC5zZXRUZXh0KCIiKTsKKworCQlyZXR1cm4gdG9wQ29tcG9zaXRlOworCX0gLy8gY3JlYXRlVG9wQ29tcG9zaXRlCisJCisJCisKKworCS8qKgorCSAqIAorCSAqIEBwYXJhbSBmb2xkZXJOYW1lCisJICovCisJcHJvdGVjdGVkIGFic3RyYWN0IHZvaWQgaW5pdGlhbGl6ZUhlYWRlcihTdHJpbmcgZm9sZGVyTmFtZSk7CisKKwkKKwkvKioKKwkgKiBBbGwgY29udHJvbGxlcnMgbXVzdCBpbXBsZW1lbnQgdGhpcyAKKwkgKiB0byByZW1vdmUgdGhlIGNvbnRyb2wgZS5nLiBieSBhIHJlbW92ZSBidXR0b24gZXZlbnQKKwkgKi8KKwlwdWJsaWMgYWJzdHJhY3Qgdm9pZCByZW1vdmUoKSA7CisJCisJCisJCisJCisJCisJCisJLyoqCisJICogZ2V0IHZhbHVlcyBmb3IgZ3JhcGhzIGFzIGRvdWJsZSBhcnJheQorCSAqIEBwYXJhbSBjaGFydEluZGV4IGFsbG93cyBtdWx0aXBsZSBjaGFydHMgaW4gYSB2aWV3LiBEZWZhdWx0IGlzIGluZGV4PTAgKG9uZSBjaGFydCkKKwkgKiBAcGFyYW0gc3RhdGUKKwkgKiBAcmV0dXJuIHZhbHVlIGFycmF5CisJICovCisJcHVibGljIGFic3RyYWN0IGRvdWJsZVtdIGdldFZhbHVlcyhpbnQgY2hhcnRJbmRleCwgaW50IHN0YXRlKTsKKwkKKwkvKioKKwkgKiB1cGRhdGUgdGhlIG1lc3NhZ2UgdGV4dAorCSAqLworCXB1YmxpYyB2b2lkIHVwZGF0ZU1lc3NhZ2UoKSB7CisJCWlmKHVzZXJNZXNzYWdlTGFiZWwhPW51bGwpCXVzZXJNZXNzYWdlTGFiZWwuc2V0VGV4dCh1c2VyTWVzc2FnZSk7CisJfQorCQorCS8qKgorCSAqIHVwZGF0ZSB0aGUgbWVzc2FnZSB0ZXh0CisJICogQHBhcmFtIG1lc3NhZ2UgCisJICovCisJcHVibGljIHZvaWQgdXBkYXRlTWVzc2FnZShTdHJpbmcgbWVzc2FnZSkgeworCQl1c2VyTWVzc2FnZSA9IG1lc3NhZ2U7CisJCWlmKHVzZXJNZXNzYWdlTGFiZWwhPW51bGwpCXVzZXJNZXNzYWdlTGFiZWwuc2V0VGV4dCh1c2VyTWVzc2FnZSk7CisJfQorCQorCS8qKgorCSAqIGdldCB0aGUgbmFtZSBvZiB0aGUgdGltZSBzZXJpZXMgZm9yIGEgZ2l2ZW4gc3RhdGUKKwkgKiBAcGFyYW0gY2hhcnRJbmRleCAgYWxsb3dzIG11bHRpcGxlIGNoYXJ0cyBpbiBhIHZpZXcuIERlZmF1bHQgaXMgaW5kZXg9MCAob25lIGNoYXJ0KQorCSAqIEBwYXJhbSBzdGF0ZQorCSAqIEByZXR1cm4gcHJvcGVydHkgbmFtZQorCSAqLworICAgIHB1YmxpYyBhYnN0cmFjdCBTdHJpbmcgZ2V0UHJvcGVydHkoaW50IGNoYXJ0SW5kZXgsIGludCBzdGF0ZSk7CisgICAgCisKKyAgICAvKioKKyAgICAgKiAKKyAgICAgKiBAcGFyYW0gY2hhcnRJbmRleCAgYWxsb3dzIG11bHRpcGxlIGNoYXJ0cyBpbiBhIHZpZXcuIERlZmF1bHQgaXMgaW5kZXg9MCAob25lIGNoYXJ0KQorICAgICAqIEByZXR1cm4gbnVtYmVyIG9mIHByb3BlcnRpZXMgdG8gcGxvdAorICAgICAqLworICAgIHB1YmxpYyBhYnN0cmFjdCBpbnQgZ2V0TnVtUHJvcGVydGllcyhpbnQgY2hhcnRJbmRleCk7CisgICAgCisgICAgCisJCisKKworfSAvLyBBbmFseXNpc0NvbnRyb2wKZGlmZiAtLWdpdCBhL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuYXV0b21hdGljZXhwZXJpbWVudC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9hbmFseXNpcy9hdXRvbWF0aWNleHBlcmltZW50L3ZpZXdzL0FuYWx5c2lzQ29udHJvbEZhY3RvcnkuamF2YSBiL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuYXV0b21hdGljZXhwZXJpbWVudC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9hbmFseXNpcy9hdXRvbWF0aWNleHBlcmltZW50L3ZpZXdzL0FuYWx5c2lzQ29udHJvbEZhY3RvcnkuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45Mjk4N2M5Ci0tLSAvZGV2L251bGwKKysrIGIvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5hdXRvbWF0aWNleHBlcmltZW50L3NyYy9vcmcvZWNsaXBzZS9zdGVtL2FuYWx5c2lzL2F1dG9tYXRpY2V4cGVyaW1lbnQvdmlld3MvQW5hbHlzaXNDb250cm9sRmFjdG9yeS5qYXZhCkBAIC0wLDAgKzEsMzUgQEAKKy8vIEFuYWx5c2lzQ29udHJvbEZhY3RvcnkuamF2YQorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQudmlld3M7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDcsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlOworCisvKioKKyAqIFRoaXMgaW50ZXJmYWNlIGlzIGltcGxlbWVudGVkIGJ5IGZhY3RvcmllcyB0aGF0IGNyZWF0ZSBpbnN0YW5jZXMgb2YKKyAqIHtAbGluayBBbmFseXNpc0NvbnRyb2x9LgorICovCitwdWJsaWMgaW50ZXJmYWNlIEFuYWx5c2lzQ29udHJvbEZhY3RvcnkgeworCisJLyoqCisJICogCisJICogQHBhcmFtIHBhcmVudCAKKwkgKiBAcmV0dXJuIHRoZSBBbmFseXNpc0NvbnRyb2wKKwkgKi8KKwlBbmFseXNpc0NvbnRyb2wgY3JlYXRlKGZpbmFsIENvbXBvc2l0ZSBwYXJlbnQpOworCisJLyoqCisJICogQHJldHVybiBUT0RPIEpGSworCSAqLworCXB1YmxpYyBTdHJpbmcgZ2V0Q29udHJvbFR5cGUoKTsKKworfSAvLyBBbmFseXNpc0NvbnRyb2xGYWN0b3J5CmRpZmYgLS1naXQgYS9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQvc3JjL29yZy9lY2xpcHNlL3N0ZW0vYW5hbHlzaXMvYXV0b21hdGljZXhwZXJpbWVudC92aWV3cy9BbmFseXNpc1ZpZXdlci5qYXZhIGIvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5hdXRvbWF0aWNleHBlcmltZW50L3NyYy9vcmcvZWNsaXBzZS9zdGVtL2FuYWx5c2lzL2F1dG9tYXRpY2V4cGVyaW1lbnQvdmlld3MvQW5hbHlzaXNWaWV3ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hODVkYzFlCi0tLSAvZGV2L251bGwKKysrIGIvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5hdXRvbWF0aWNleHBlcmltZW50L3NyYy9vcmcvZWNsaXBzZS9zdGVtL2FuYWx5c2lzL2F1dG9tYXRpY2V4cGVyaW1lbnQvdmlld3MvQW5hbHlzaXNWaWV3ZXIuamF2YQpAQCAtMCwwICsxLDIxOSBAQAorLy8gQW5hbHlzaXNWaWV3ZXIuamF2YQorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQudmlld3M7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDcsMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5WaWV3ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS51aS52aWV3cy5nZW9ncmFwaGljLm1hcC5NYXBDb250cm9sOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5TV1Q7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5EaXNwb3NlRXZlbnQ7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5EaXNwb3NlTGlzdGVuZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5GaWxsTGF5b3V0OworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db250cm9sOworCisvKioKKyAqIFRoaXMgY2xhc3MgcHJlc2VudHMgInZpZXdzIiBvZiB0aGUgcnVubmluZyBzaW11bGF0aW9ucy4KKyAqLworcHVibGljIGNsYXNzIEFuYWx5c2lzVmlld2VyIGV4dGVuZHMgVmlld2VyICB7CisKKwkKKwkKKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgVVJJX1BSRUZJWCA9ICIvcmVzb3VyY2VzL2RhdGEvc2NlbmFyaW8vZGlzZWFzZS8iOworCQorCQorCisJLyoqCisJICogVGhpcyBpcyB0aGUgdG9wLWxldmVsIGNvbnRyb2wgb2YgdGhlIHZpZXdlci4gSXQgY29udGFpbnMgdGhlCisJICoge0BsaW5rIE1hcENvbnRyb2x9cyB0aGF0IGRpc3BsYXkgdGhlIGN1cnJlbnQgc3RhdGUgb2YgdGhlCisJICoge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uam9icy5zaW11bGF0aW9uLlNpbXVsYXRpb259cy4KKwkgKi8KKwlmaW5hbCBDb21wb3NpdGUgY29tcG9zaXRlOworCisJCisKKworCQorCisJCisKKwkvLyBnZXQgdGhlIHBhdGgKKwkvL3ByaXZhdGUgc3RhdGljIGZpbmFsIElQYXRoIFBBVEggPSBBY3RpdmF0b3IuZ2V0RGVmYXVsdCgpLmdldFN0YXRlTG9jYXRpb24oKTsKKworCS8vcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIHNlcCA9IEZpbGUuc2VwYXJhdG9yOworCQorCS8vcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIHBhdGhTdWZmaXggPSAiYW5hbHlzaXMiK3NlcDsKKwkKKwkKKworCS8qKgorCSAqIFRoaXMgZmFjdG9yeSBpcyB1c2VkIHRvIGNyZWF0ZSBpbnN0YW5jZXMgb2Yge0BsaW5rIEFuYWx5c2lzQ29udHJvbH0gaW4gdGhlCisJICogbWV0aG9kIHtAbGluayAjcG9wdWxhdGVWaWV3KCl9CisJICovCisJcHJpdmF0ZSBmaW5hbCBBbmFseXNpc0NvbnRyb2xGYWN0b3J5IGFjZjsKKworCS8qKgorCSAqIEBwYXJhbSBwYXJlbnQKKwkgKiAgICAgICAgICAgIHRoZSBTV1QgcGFyZW50IG9mIHRoZSBjb250cm9sIHRoYXQgbWFrZXMgdXAgdGhlIHZpZXdlcgorCSAqIEBwYXJhbSBhY2YKKwkgKiAgICAgICAgICAgIHRoZSBmYWN0b3J5IHRoYXQgY3JlYXRlcyBpbnN0YW5jZSBvZiB7QGxpbmsgQW5hbHlzaXNDb250cm9sfQorCSAqLworCXB1YmxpYyBBbmFseXNpc1ZpZXdlcihmaW5hbCBDb21wb3NpdGUgcGFyZW50LCBmaW5hbCBBbmFseXNpc0NvbnRyb2xGYWN0b3J5IGFjZikgeworCisJCWNvbXBvc2l0ZSA9IG5ldyBDb21wb3NpdGUocGFyZW50LCBTV1QuTk9ORSk7CisJCWZpbmFsIEZpbGxMYXlvdXQgY29tcG9zaXRlTGF5b3V0ID0gbmV3IEZpbGxMYXlvdXQoU1dULkhPUklaT05UQUwpOworCQljb21wb3NpdGUuc2V0TGF5b3V0KGNvbXBvc2l0ZUxheW91dCk7CisKKwkJLy8gUmVtZW1iZXIgdGhlIGZhY3RvcnkgdGhhdCB3ZSdsbCB1c2UgdG8gY3JlYXRlIGluc3RhbmNlcyBvZgorCQkvLyBBbmFseXNpc0NvbnRyb2wKKwkJdGhpcy5hY2YgPSBhY2Y7CisJCXJlZnJlc2goKTsKKwkJY29tcG9zaXRlLnBhY2soKTsKKwkJCisJfSAvLyBBbmFseXNpc1ZpZXdlcgorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlZpZXdlciNnZXRDb250cm9sKCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgQ29udHJvbCBnZXRDb250cm9sKCkgeworCQlyZXR1cm4gY29tcG9zaXRlOworCX0gLy8gZ2V0Q29udHJvbAorCisKKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5WaWV3ZXIjcmVmcmVzaCgpCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgcmVmcmVzaCgpIHsKKwkJcG9wdWxhdGVWaWV3KCk7CisJfSAvLyByZWZyZXNoCisKKwkKKwkKKwkKKwkvKioKKwkgKiBDcmVhdGUgYW5kIGRpc3Bvc2Ugb2YgTWFwQ29udHJvbHMgYXMgbmVjZXNzYXJ5IHRvIGRpc3BsYXkgdGhlIHNlbGVjdGVkCisJICogU2ltdWxhdGlvbnMuCisJICovCisJcHJpdmF0ZSB2b2lkIHBvcHVsYXRlVmlldygpIHsKKwkJCisJCQorCQkvLyBwcm9ibGVtIGhlcmUgd2hlbiB3ZSBzdGFydCB1cAorCQkvLyBBcmUgd2UgZG9uZT8KKwkJaWYgKGNvbXBvc2l0ZS5pc0Rpc3Bvc2VkKCkpIHsKKwkJCS8vIFllcworCQkJcmV0dXJuOworCQl9IC8vIGlmCisKKwkgICAKKwkJZmluYWwgQW5hbHlzaXNDb250cm9sIGFuYWx5c2lzQ29udHJvbCA9IGFjZi5jcmVhdGUoY29tcG9zaXRlKTsKKwkKKwkJYW5hbHlzaXNDb250cm9sLmFkZERpc3Bvc2VMaXN0ZW5lcihuZXcgRGlzcG9zZUxpc3RlbmVyKCkgeworCQkJLyoqCisJCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuRGlzcG9zZUxpc3RlbmVyI3dpZGdldERpc3Bvc2VkKG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuRGlzcG9zZUV2ZW50KQorCQkJICovCisJCQlwdWJsaWMgdm9pZCB3aWRnZXREaXNwb3NlZChAU3VwcHJlc3NXYXJuaW5ncygidW51c2VkIikKKwkJCWZpbmFsIERpc3Bvc2VFdmVudCBlKSB7CisJCQkJY29tcG9zaXRlLmxheW91dCh0cnVlLCB0cnVlKTsKKwkJCQljb21wb3NpdGUucmVkcmF3KCk7CisJCQl9CisJCX0pOworCisJCWNvbXBvc2l0ZS5sYXlvdXQodHJ1ZSwgdHJ1ZSk7CisJCWNvbXBvc2l0ZS5yZWRyYXcoKTsKKwl9IC8vIHBvcHVsYXRlVmlldworCQorCQorCQorCisJCisKKwkKKworCQorCS8qKgorCSAqIFJlbW92ZXMgd2hpdGVzcGFjZSwgJywnLCAnLicsIGV0Yy4KKwkgKiBAcGFyYW0gcworCSAqIEByZXR1cm4gYSBmaWx0ZXJlZCBzdHJpbmcKKwkgKi8KKwlwdWJsaWMgc3RhdGljIFN0cmluZyBuYW1lRmlsdGVyIChTdHJpbmcgcykgeworCQlTdHJpbmcgczEgPSBzLnRyaW0oKTsKKwkJczEgPSBzMS5yZXBsYWNlKCciJywnICcpOworCQlzMSA9IHMxLnJlcGxhY2VBbGwoIiAiLCIiKTsKKwkJczEgPSBzMS5yZXBsYWNlKCcsJywnXycpOworCQlzMSA9IHMxLnJlcGxhY2UoJy4nLCdfJyk7CisJCXMxID0gczEucmVwbGFjZUFsbCgiXyIsIiIpOworCQlzID0gczE7CisJCQorCQlyZXR1cm4gczsKKwl9CisKKwkKKwkKKwkKKworCS8qKgorCSAqIGZpbHRlcnMgdGhlIGxvY2F0aW9uIGlkIHByZWZpeCBmcm9tIHRoZSBiZWdpbm5pbmcgb2YKKwkgKiAgYSBub2RlcyBJRCBmb3IgZ2VuZXJhdGlvbiBvZiBhIGZpbGUgbmFtZQorCSAqIEBwYXJhbSB1bmZpbHRlcmVkCisJICogQHJldHVybiB0aGUgZmlsdGVyZWQgZmlsZSBuYW1lIHVzaW5nIGxvY2F0aW9uIGlkLgorCSAqLworCXB1YmxpYyBzdGF0aWMgU3RyaW5nIGZpbHRlckZpbGVuYW1lKFN0cmluZyB1bmZpbHRlcmVkKSB7CisJCWludCBsYXN0ID0gdW5maWx0ZXJlZC5pbmRleE9mKFVSSV9QUkVGSVgpOworCQlpZiAobGFzdCA+PTApIHsKKwkJCWxhc3QgKz0gVVJJX1BSRUZJWC5sZW5ndGgoKTsKKwkJCXJldHVybiB1bmZpbHRlcmVkLnN1YnN0cmluZyhsYXN0LCB1bmZpbHRlcmVkLmxlbmd0aCgpKTsKKwkJfSAKKwkJcmV0dXJuIHVuZmlsdGVyZWQ7CisKKwkKKwl9CisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuVmlld2VyI2dldElucHV0KCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgT2JqZWN0IGdldElucHV0KCkgeworCQkvLyBub3QgdXNlZAorCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuVmlld2VyI3NldElucHV0KGphdmEubGFuZy5PYmplY3QpCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgc2V0SW5wdXQoQFN1cHByZXNzV2FybmluZ3MoInVudXNlZCIpIE9iamVjdCBpbnB1dCkgeworCQkvLyBub3QgdXNlZAorCX0KKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5WaWV3ZXIjc2V0U2VsZWN0aW9uKG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvbiwgYm9vbGVhbikKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBzZXRTZWxlY3Rpb24oQFN1cHByZXNzV2FybmluZ3MoInVudXNlZCIpIElTZWxlY3Rpb24gc2VsZWN0aW9uLCBAU3VwcHJlc3NXYXJuaW5ncygidW51c2VkIikgYm9vbGVhbiByZXZlYWwpIHsKKwkJLy8gbm90IHVzZWQKKwl9CisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuVmlld2VyI2dldFNlbGVjdGlvbigpCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIElTZWxlY3Rpb24gZ2V0U2VsZWN0aW9uKCkgeworCQkvLyBub3QgdXNlZAorCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkKK30gLy8gQW5hbHlzaXNWaWV3ZXIKZGlmZiAtLWdpdCBhL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuYXV0b21hdGljZXhwZXJpbWVudC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9hbmFseXNpcy9hdXRvbWF0aWNleHBlcmltZW50L3ZpZXdzL0F1dG9FeHBDb250cm9sLmphdmEgYi9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQvc3JjL29yZy9lY2xpcHNlL3N0ZW0vYW5hbHlzaXMvYXV0b21hdGljZXhwZXJpbWVudC92aWV3cy9BdXRvRXhwQ29udHJvbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY4MDVjYzkKLS0tIC9kZXYvbnVsbAorKysgYi9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQvc3JjL29yZy9lY2xpcHNlL3N0ZW0vYW5hbHlzaXMvYXV0b21hdGljZXhwZXJpbWVudC92aWV3cy9BdXRvRXhwQ29udHJvbC5qYXZhCkBAIC0wLDAgKzEsMTE5MSBAQAorLy8gQXV0b0V4cENvbnRyb2wuamF2YQorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQudmlld3M7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDcsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmJpcnQuY2hhcnQubW9kZWwuYXR0cmlidXRlLkNvbG9yRGVmaW5pdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5iaXJ0LmNoYXJ0Lm1vZGVsLmF0dHJpYnV0ZS5pbXBsLkNvbG9yRGVmaW5pdGlvbkltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLkVMaXN0OworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnJlc291cmNlLkltYWdlUmVnaXN0cnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5FcnJvclJlc3VsdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQuQUxHT1JJVEhNX1NUQVRVUzsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQuQXV0b21hdGljRXhwZXJpbWVudE1hbmFnZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5hdXRvbWF0aWNleHBlcmltZW50LkF1dG9tYXRpY0V4cGVyaW1lbnRNYW5hZ2VyRXZlbnQ7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5hdXRvbWF0aWNleHBlcmltZW50LkF1dG9tYXRpY0V4cGVyaW1lbnRNYW5hZ2VyTGlzdGVuZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5hdXRvbWF0aWNleHBlcmltZW50LkVycm9yQW5hbHlzaXNBbGdvcml0aG07CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5hdXRvbWF0aWNleHBlcmltZW50LkVycm9yQW5hbHlzaXNBbGdvcml0aG1FdmVudDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQuRXJyb3JBbmFseXNpc0FsZ29yaXRobUxpc3RlbmVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuYXV0b21hdGljZXhwZXJpbWVudC5NQU5BR0VSX1NUQVRVUzsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLklkZW50aWZpYWJsZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnVpLklTaGFyZWRJbWFnZXM7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LlNXVDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuY3VzdG9tLkNMYWJlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuY3VzdG9tLkNUYWJGb2xkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmN1c3RvbS5DVGFiSXRlbTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLk1vZGlmeUV2ZW50OworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuTW9kaWZ5TGlzdGVuZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmdyYXBoaWNzLkNvbG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5sYXlvdXQuRm9ybUF0dGFjaG1lbnQ7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5Gb3JtRGF0YTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QubGF5b3V0LkZvcm1MYXlvdXQ7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5HcmlkRGF0YTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QubGF5b3V0LkdyaWRMYXlvdXQ7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQnV0dG9uOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5EaXNwbGF5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkV2ZW50OworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkxhYmVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkxpc3RlbmVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlRleHQ7CisKKy8qKgorICogVGhpcyBjbGFzcyBpcyBhIFNXVCBHVUkgY29tcG9uZW50IHRoYXQgdXNlcyBCSVJUIHRvIHBsb3QKKyAqLworcHVibGljIGNsYXNzIEF1dG9FeHBDb250cm9sIGV4dGVuZHMgQW5hbHlzaXNDb250cm9sIHsKKwkKKwkKKwlwcml2YXRlIHN0YXRpYyBEaXNwbGF5IGRpc3BsYXkgPSBudWxsOworCQorCXByaXZhdGUgSW1hZ2VSZWdpc3RyeSBpbWFnZVJlZ2lzdHJ5ID0gbnVsbDsKKwkKKwlwcml2YXRlIHN0YXRpYyBBdXRvbWF0aWNFeHBlcmltZW50TWFuYWdlciBtYW5hZ2VyID0gbnVsbDsKKwkKKwkvKioKKwkgKiBGb2xkZXIgdG8gY29udGFpbiB0aGUgZGF0YQorCSAqIAorCSAqLworCXN0YXRpYyBDVGFiRm9sZGVyIHRhYkZvbGRlcjsKKwkKKwlzdGF0aWMgYm9vbGVhbiBwYXVzZVRyaWdnZXIgPSBmYWxzZTsKKwkKKwlzdGF0aWMgZG91YmxlW10gcmVmZXJlbmNlSW5jaWRlbmNlOworCXN0YXRpYyBkb3VibGVbXSBtb2RlbEluY2lkZW5jZTsKKwkKKwkKKwkvKioKKwkgKiBBIGxhYmVsIHRvIHJlcG9ydCBzdGF0dXMgKG5vdCB5ZXQgdXNlZCkKKwkgKi8KKwkvL3N0YXRpYyBMYWJlbCBzdGF0dXNMYWJlbDsKKwkKKwkvKioKKwkgKiBzdG9wIGJ1dHRvbgorCSAqLworCSBCdXR0b24gc3RvcEJ1dHRvbiA9IG51bGw7CisJCisJIC8qKgorCSAgKiByZXN0YXJ0IGJ1dHRvbgorCSAgKi8KKwkgQnV0dG9uIHJlc3RhcnRCdXR0b24gPSBudWxsOyAKKwkvKioKKwkgKiBDb2xvcnMgZm9yIHRoZSB0aW1lIHNlcmllcyBjaGFydAorCSAqLworCXN0YXRpYyBmaW5hbCBDb2xvckRlZmluaXRpb24gZm9yZUdyb3VuZCA9IENvbG9yRGVmaW5pdGlvbkltcGwuY3JlYXRlKDE4MCwgMCwgMCk7CisJc3RhdGljIGZpbmFsIENvbG9yRGVmaW5pdGlvbiBiYWNrZ3JvdW5kR3JvdW5kID0gQ29sb3JEZWZpbml0aW9uSW1wbC5jcmVhdGUoMjU1LCAyNTUsIDIyNSk7CisJc3RhdGljIGZpbmFsIENvbG9yRGVmaW5pdGlvbiBmcmFtZUNvbG9yID0gQ29sb3JEZWZpbml0aW9uSW1wbC5XSElURSgpOworCQorCS8vIHNvbWUgY29sb3JzCisJcHJpdmF0ZSBzdGF0aWMgQ29sb3IgY3lhbjsKKwlwcml2YXRlIHN0YXRpYyBDb2xvciBjeWFuRGFyazsKKwlwcml2YXRlIHN0YXRpYyBDb2xvciBkYXJrUmVkOworCXByaXZhdGUgc3RhdGljIENvbG9yIHdoaXRlOworCXByaXZhdGUgc3RhdGljIENvbG9yIGxpZ2h0R3JlZW47CisJcHJpdmF0ZSBzdGF0aWMgQ29sb3IgbGlnaHRCbHVlOworCQorCQorCQorCXByb3RlY3RlZCBzdGF0aWMgUnVuSGlzdG9yeUNhbnZhcyBlcnJvckNvbnZlcmdlbmNlQnlSdW4gPSBudWxsOworCXN0YXRpYyBmaW5hbCBpbnQgRVJST1JfQ09OVkVSR0VOQ0VfQllfUlVOX0lEID0gMDsKKwkKKwlwcm90ZWN0ZWQgc3RhdGljIEVycm9yVGltZVNlcmllc0NhbnZhcyBjdXJyZW50RXJyb3JCeVRpbWUgPSBudWxsOworCXN0YXRpYyBmaW5hbCBpbnQgQ1VSUkVOVF9FUlJPUl9CWV9USU1FX0lEID0gMTsKKwkKKwlwcm90ZWN0ZWQgc3RhdGljIEFnZ3JlZ2F0ZVRpbWVTZXJpZXNDYW52YXMgYWdncmVnYXRlRXJyb3JCeVRpbWUgPSBudWxsOworCXN0YXRpYyBmaW5hbCBpbnQgQUdHUkVHQVRFX0JZX1RJTUVfSUQgPSAyOworCisKKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgTlVNUk9XUyA9IDEwOworCQorCS8vcHJvdGVjdGVkIHN0YXRpYyBDb21wb3NpdGUgY2hhcnRDb21wb3NpdGU7CisJcHJvdGVjdGVkIHN0YXRpYyBDb21wb3NpdGUgZXJyb3JUaW1lU2VyaWVzQ29tcG9zaXRlOworCXByb3RlY3RlZCBzdGF0aWMgQ29tcG9zaXRlIGFnZ3JlZ2F0ZVRpbWVTZXJpZXNDb21wb3NpdGU7CisJcHJvdGVjdGVkIHN0YXRpYyBDb21wb3NpdGUgcnVuSGlzdG9yeUNvbXBvc2l0ZTsKKwlwcm90ZWN0ZWQgc3RhdGljIENvbXBvc2l0ZSB2YWx1ZXNDb21wb3NpdGU7CisJcHJvdGVjdGVkIHN0YXRpYyBDb21wb3NpdGUgY29udHJvbHNDb21wb3NpdGU7CisJcHJvdGVjdGVkIHN0YXRpYyBDb21wb3NpdGUgY29udHJvbHNBY3Rpb25Db21wb3NpdGU7CisJcHJvdGVjdGVkIHN0YXRpYyBDb21wb3NpdGUgY29udHJvbHNWYWx1ZXNDb21wb3NpdGU7CisJcHJvdGVjdGVkIHN0YXRpYyBDb21wb3NpdGUgc2V0dGluZ3NDb21wb3NpdGU7CisJCisJcHJpdmF0ZSBzdGF0aWMgTGlzdDxEb3VibGU+IGVycm9ySGlzdG9yeUxpc3QgPSBuZXcgQXJyYXlMaXN0PERvdWJsZT4oKTsKKwlwcml2YXRlIHN0YXRpYyBkb3VibGVbXSBlcnJvckhpc3Rvcnk7CisJcHJpdmF0ZSBzdGF0aWMgZG91YmxlW10gYmVzdFNlcmllczsKKwlwcml2YXRlIHN0YXRpYyBkb3VibGUgYmVzdEVycm9yID0gRG91YmxlLk1BWF9WQUxVRTsKKwlwcml2YXRlIHN0YXRpYyBkb3VibGUgYmVzdFZFcnJvciA9IERvdWJsZS5NQVhfVkFMVUU7CisJcHJpdmF0ZSBzdGF0aWMgZG91YmxlW10gbmV3RXJyb3JUaW1lU2VyaWVzOworCQorCXByb3RlY3RlZCBzdGF0aWMgU3RyaW5nW10gcnVuUGFyYW1OYW1lczsKKwlwcm90ZWN0ZWQgc3RhdGljIGRvdWJsZVtdIGJlc3RQYXJhbVZhbHVlczsKKwkKKwlwcm90ZWN0ZWQgc3RhdGljIGRvdWJsZVtdW10gcmVjZW50UGFyYW1WYWx1ZXM7CisJcHJvdGVjdGVkIHN0YXRpYyBkb3VibGVbXSByZXN0YXJ0UGFyYW1WYWx1ZXM7CisJcHJvdGVjdGVkIHN0YXRpYyBkb3VibGVbXSByZWNlbnRFcnJvcnM7CisJcHJvdGVjdGVkIHN0YXRpYyBkb3VibGVbXSByZWNlbnRWRXJyb3JzOworCQorCXByb3RlY3RlZCBzdGF0aWMgQ0xhYmVsW10gYXR0cmlidXRlTGFiZWxzOworCXByb3RlY3RlZCBzdGF0aWMgQ0xhYmVsW10gY29udHJvbExhYmVsczsKKwlwcm90ZWN0ZWQgc3RhdGljIFRleHRbXSBiZXN0VmFsdWVMYWJlbHM7CisJCisJcHJvdGVjdGVkIHN0YXRpYyBUZXh0W11bXSByZWNlbnRWYWx1ZUxhYmVsczsKKwlwcm90ZWN0ZWQgc3RhdGljIFRleHRbXSAgIHJlc3RhcnRWYWx1ZXM7CisJCisJcHJvdGVjdGVkIHN0YXRpYyBzaG9ydCByb3cgPSAwOyAvLyB3aGljaCByb3cgYXJlIHdlIHVwZGF0aW5nCisJCisJcHJvdGVjdGVkIHN0YXRpYyBzaG9ydCBudW1Db2x1bW5zID0gMDsKKwkKKwkvKioKKwkgKiByZXN0YXJ0IHNpbSB1c2VzIGxhdGVzdCB2YWxzIG9yIGJlc3QKKwkgKi8KKwlwcm90ZWN0ZWQgc3RhdGljIGJvb2xlYW4gcmVzdGFydFdpdGhMYXRlc3Q9IHRydWU7CisJCisJLyoqCisJICogVGhlIGRpYWxvZyBmb3IgdGhlIHdpemFyZAorCSAqLworCS8vc3RhdGljIFdpemFyZERpYWxvZyB3aXphcmREaWFsb2c7CQorCQorCS8vUHJvcGVydHlTZWxlY3RvciBwcm9wZXJ0eVNlbGVjdG9yOworCS8vTGlzdDxJdGVtUHJvcGVydHlEZXNjcmlwdG9yPiBzZWxlY3RlZFByb3BlcnRpZXM7CisKKwkvKioKKwkgKiAKKwkgKiBAcGFyYW0gcGFyZW50CisJICovCisJcHVibGljIEF1dG9FeHBDb250cm9sKGZpbmFsIENvbXBvc2l0ZSBwYXJlbnQpIHsKKwkJc3VwZXIocGFyZW50LCBTV1QuTm9uZSk7CisJCWNyZWF0ZUNvbnRlbnRzKCk7CisJfSAvLyBBdXRvRXhwQ29udHJvbAorCQorCQorCisJLyoqCisJICogQ3JlYXRlIHRoZSBjb250ZW50cyBvZiB0aGUgcGxvdHRlcgorCSAqLworCXZvaWQgY3JlYXRlQ29udGVudHMoKSB7CisJCQkJCisJCS8vIFNldCB0aGUgaW1hZ2UgcmVnaXN0cnkKKwkJaWYgKGltYWdlUmVnaXN0cnkgPT0gbnVsbCkgeworCQkJb3JnLmVjbGlwc2Uuc3RlbS51aS5BY3RpdmF0b3IgYWN0aXZhdG9yID0gb3JnLmVjbGlwc2Uuc3RlbS51aS5BY3RpdmF0b3IuZ2V0RGVmYXVsdCgpOworCQkJaW1hZ2VSZWdpc3RyeSA9IGFjdGl2YXRvci5nZXRJbWFnZVJlZ2lzdHJ5KCk7CisJCX0KKwkJLy8gVXNlIGZvcm0gbGF5b3V0CisJCXNldExheW91dChuZXcgRm9ybUxheW91dCgpKTsKKwkJaWYoZGlzcGxheT09bnVsbCkgZGlzcGxheSA9IHRoaXMuZ2V0RGlzcGxheSgpOworCQljeWFuID0gZGlzcGxheS5nZXRTeXN0ZW1Db2xvcihTV1QuQ09MT1JfQ1lBTik7CisJCWN5YW5EYXJrID0gbmV3IENvbG9yKGRpc3BsYXksIDYwLCAyMjAsIDIyMCk7CisJCWRhcmtSZWQgPSBkaXNwbGF5LmdldFN5c3RlbUNvbG9yKFNXVC5DT0xPUl9EQVJLX1JFRCk7CisJCXdoaXRlID0gZGlzcGxheS5nZXRTeXN0ZW1Db2xvcihTV1QuQ09MT1JfV0hJVEUpOworCQlsaWdodEdyZWVuID0gbmV3IENvbG9yKGRpc3BsYXksIDEyOCwgMjU1LCAxMjgpOworCQlsaWdodEJsdWUgPSBuZXcgQ29sb3IoZGlzcGxheSwgMTI4LCAxMjgsIDI1NSk7CisJCQorCQkKKwkJaWRlbnRpZmlhYmxlVGl0bGUgPSBuZXcgTGFiZWwodGhpcywgU1dULk5PTkUpOworCQlpZGVudGlmaWFibGVUaXRsZS5zZXRUZXh0KE1lc3NhZ2VzLmdldFN0cmluZygiQVVUTy5USVRMRUxBQkVMIikpOworCQkKKwkJCisJCWludCBib3R0b20gPSA1OworCQlmaW5hbCBGb3JtRGF0YSB0aXRsZUZvcm1EYXRhID0gbmV3IEZvcm1EYXRhKCk7CisJCWlkZW50aWZpYWJsZVRpdGxlLnNldExheW91dERhdGEodGl0bGVGb3JtRGF0YSk7CisJCXRpdGxlRm9ybURhdGEudG9wID0gbmV3IEZvcm1BdHRhY2htZW50KDAsIDApOworCQl0aXRsZUZvcm1EYXRhLmJvdHRvbSA9IG5ldyBGb3JtQXR0YWNobWVudChib3R0b20sIDApOworCQl0aXRsZUZvcm1EYXRhLmxlZnQgPSBuZXcgRm9ybUF0dGFjaG1lbnQoMCwgMCk7CisJCXRpdGxlRm9ybURhdGEucmlnaHQgPSBuZXcgRm9ybUF0dGFjaG1lbnQoMTAwLCAwKTsKKwkJCisJCWJvdHRvbSArPSAxOworCQkKKwkJdGFiRm9sZGVyID0gbmV3IENUYWJGb2xkZXIodGhpcywgU1dULkJPUkRFUik7CisJCS8vIHNldCB1cCB0aGUgdmFsdWVzIGNvbXBvc2l0ZQorCQl2YWx1ZXNDb21wb3NpdGUgPSBuZXcgQ29tcG9zaXRlKHRhYkZvbGRlciwgU1dULkJPUkRFUik7CisJCQorCQlmaW5hbCBGb3JtRGF0YSB0YWJGb3JtRGF0YSA9IG5ldyBGb3JtRGF0YSgpOworCQl0YWJGb3JtRGF0YS50b3AgPSBuZXcgRm9ybUF0dGFjaG1lbnQoYm90dG9tLCAwKTsKKwkJdGFiRm9ybURhdGEuYm90dG9tID0gbmV3IEZvcm1BdHRhY2htZW50KDEwMCwgMCk7CisJCXRhYkZvcm1EYXRhLmxlZnQgPSBuZXcgRm9ybUF0dGFjaG1lbnQoMCwgMCk7CisJCXRhYkZvcm1EYXRhLnJpZ2h0ID0gbmV3IEZvcm1BdHRhY2htZW50KDEwMCwgMCk7CisJCXRhYkZvbGRlci5zZXRMYXlvdXREYXRhKHRhYkZvcm1EYXRhKTsKKwkJdGFiRm9sZGVyLnNldFNpbXBsZShmYWxzZSk7CisJCQorCQkKKwkJdGFiRm9sZGVyLnNldFNlbGVjdGlvbkJhY2tncm91bmQobmV3IENvbG9yW117CisJCQkJY3lhbiwKKwkJCQl3aGl0ZSwKKwkJCQlsaWdodEJsdWUsCisJCQkJbGlnaHRCbHVlfSwKKwkJCQluZXcgaW50W10gezI1LCA1MCwgMTAwfSk7IAorCQkKKworCQl0YWJGb2xkZXIuc2V0U2VsZWN0aW9uRm9yZWdyb3VuZChkaXNwbGF5LmdldFN5c3RlbUNvbG9yKFNXVC5DT0xPUl9CTEFDSykpOyAKKwkJCisJCXRhYkZvbGRlci5zZXRCYWNrZ3JvdW5kKGN5YW5EYXJrKTsKKwkJdGFiRm9sZGVyLnNldEZvcmVncm91bmQoZGFya1JlZCk7CisJCXRhYkZvbGRlci5zZXRCb3JkZXJWaXNpYmxlKHRydWUpOworCQkKKyAgICAgICAgLy8vLy8vLy8vLy8vLworCQkvLyBSVU4gSElTVE9SWQorCQlDVGFiSXRlbSBpdGVtMCA9IG5ldyBDVGFiSXRlbSh0YWJGb2xkZXIsIFNXVC5CT1JERVIpOworCQlpdGVtMC5zZXRUZXh0ICgiICAiK01lc3NhZ2VzLmdldFN0cmluZygiQVVUTy5ISVNUT1JZIikrIiAiKTsKKwkJcnVuSGlzdG9yeUNvbXBvc2l0ZSA9IG5ldyBDb21wb3NpdGUodGFiRm9sZGVyLCBTV1QuQk9SREVSKTsKKwkJcnVuSGlzdG9yeUNvbXBvc2l0ZS5zZXRMYXlvdXQobmV3IEZvcm1MYXlvdXQoKSk7CisgCQlpdGVtMC5zZXRDb250cm9sKHJ1bkhpc3RvcnlDb21wb3NpdGUpOworIAkJLy8gc2V0IHVwIHRoZSBmb3VyIGRhdGEgdGltZSBzZXJpZXMgaW5zaWRlIHRoZSBjaGFydENvbXBvc2l0ZQorIAkJZ2V0UnVuSGlzdG9yeUNoYXJ0KHJ1bkhpc3RvcnlDb21wb3NpdGUpOyAKKyAJCQorIAkJLy8vLy8vLy8vLy8vLworCQkvLyBBR0dSRUdBVEUgVElNRSBTRVJJRVMKKyAJCUNUYWJJdGVtIGl0ZW0xID0gbmV3IENUYWJJdGVtKHRhYkZvbGRlciwgU1dULkJPUkRFUik7CisJCWl0ZW0xLnNldFRleHQgKCIgICIrTWVzc2FnZXMuZ2V0U3RyaW5nKCJBVVRPLkFHR1JFR0FURVNFUklFUyIpKyIgIik7CisJCWFnZ3JlZ2F0ZVRpbWVTZXJpZXNDb21wb3NpdGUgPSBuZXcgQ29tcG9zaXRlKHRhYkZvbGRlciwgU1dULkJPUkRFUik7CisJCWFnZ3JlZ2F0ZVRpbWVTZXJpZXNDb21wb3NpdGUuc2V0TGF5b3V0KG5ldyBGb3JtTGF5b3V0KCkpOworIAkJaXRlbTEuc2V0Q29udHJvbChhZ2dyZWdhdGVUaW1lU2VyaWVzQ29tcG9zaXRlKTsKKyAJCS8vIHNldCB1cCB0aGUgZm91ciBkYXRhIHRpbWUgc2VyaWVzIGluc2lkZSB0aGUgY2hhcnRDb21wb3NpdGUKKyAJCWdldEFnZ3JlZ2F0ZVRpbWVTZXJpZXNDaGFydChhZ2dyZWdhdGVUaW1lU2VyaWVzQ29tcG9zaXRlKTsgCisgCQkKKyAJCS8vLy8vLy8vLy8vLy8KKwkJLy8gRVJST1IgVElNRSBTRVJJRVMKKyAJCUNUYWJJdGVtIGl0ZW0yID0gbmV3IENUYWJJdGVtKHRhYkZvbGRlciwgU1dULkJPUkRFUik7CisJCWl0ZW0yLnNldFRleHQgKCIgICIrTWVzc2FnZXMuZ2V0U3RyaW5nKCJBVVRPLkVSUk9SU0VSSUVTIikrIiAiKTsKKwkJZXJyb3JUaW1lU2VyaWVzQ29tcG9zaXRlID0gbmV3IENvbXBvc2l0ZSh0YWJGb2xkZXIsIFNXVC5CT1JERVIpOworCQllcnJvclRpbWVTZXJpZXNDb21wb3NpdGUuc2V0TGF5b3V0KG5ldyBGb3JtTGF5b3V0KCkpOworIAkJaXRlbTIuc2V0Q29udHJvbChlcnJvclRpbWVTZXJpZXNDb21wb3NpdGUpOworIAkJLy8gc2V0IHVwIHRoZSBmb3VyIGRhdGEgdGltZSBzZXJpZXMgaW5zaWRlIHRoZSBjaGFydENvbXBvc2l0ZQorIAkJZ2V0RXJyb3JUaW1lU2VyaWVzQ2hhcnQoZXJyb3JUaW1lU2VyaWVzQ29tcG9zaXRlKTsgCisgCQkKKyAJCS8vLy8vLy8vLy8vLy8vCisgCQkvLyBWQUxVRVMKKwkJQ1RhYkl0ZW0gaXRlbTMgPSBuZXcgQ1RhYkl0ZW0odGFiRm9sZGVyLCBTV1QuQk9SREVSKTsKKwkJaXRlbTMuc2V0VGV4dChNZXNzYWdlcy5nZXRTdHJpbmcoIkFVVE8uVkFMVUVTIikpOworCQlpdGVtMy5zZXRDb250cm9sKHZhbHVlc0NvbXBvc2l0ZSk7CisJCQorCQkvLy8vLy8vLy8vLy8vLworIAkJLy8gQ29udHJvbHMKKwkJY29udHJvbHNDb21wb3NpdGUgPSBuZXcgQ29tcG9zaXRlKHRhYkZvbGRlciwgU1dULkJPUkRFUik7CisJCWdldENvbnRyb2xzKCk7CisJCUNUYWJJdGVtIGl0ZW00ID0gbmV3IENUYWJJdGVtKHRhYkZvbGRlciwgU1dULkJPUkRFUik7CisJCWl0ZW00LnNldFRleHQoTWVzc2FnZXMuZ2V0U3RyaW5nKCJBVVRPLkNPTlRST0xTIikpOworCQlpdGVtNC5zZXRDb250cm9sKGNvbnRyb2xzQ29tcG9zaXRlKTsKKwkJCisJCS8vLy8vLy8vLy8vLy8vCisgCQkvLyBTZXR0aW5ncworLy8JCXNldHRpbmdzQ29tcG9zaXRlID0gbmV3IENvbXBvc2l0ZSh0YWJGb2xkZXIsIFNXVC5CT1JERVIpOworLy8JCWdldFNldHRpbmdzKCk7CisvLwkJQ1RhYkl0ZW0gaXRlbTQgPSBuZXcgQ1RhYkl0ZW0odGFiRm9sZGVyLCBTV1QuQk9SREVSKTsKKy8vCQlpdGVtNC5zZXRUZXh0KE1lc3NhZ2VzLmdldFN0cmluZygiQVVUTy5TRVRUSU5HUyIpKTsKKy8vCQlpdGVtNC5zZXRDb250cm9sKHNldHRpbmdzQ29tcG9zaXRlKTsKKwkJCisJCQorCQkKKwkJdGFiRm9sZGVyLnNldFNlbGVjdGlvbihpdGVtMCk7CisJCWlmKG1hbmFnZXI9PW51bGwpIHsKKwkJCW1hbmFnZXIgPSBBdXRvbWF0aWNFeHBlcmltZW50TWFuYWdlci5nZXRJbnN0YW5jZSgpOworCQkJbWFuYWdlci5hZGRMaXN0ZW5lcihuZXcgQXV0b21hdGljRXhwZXJpbWVudE1hbmFnZXJMaXN0ZW5lcigpIHsKKwkJCQkKKwkJCQlwdWJsaWMgdm9pZCBldmVudFJlY2VpdmVkKEF1dG9tYXRpY0V4cGVyaW1lbnRNYW5hZ2VyRXZlbnQgZXZ0KSB7CisJCQkJCWlmKGV2dC5zdGF0dXMgPT0gTUFOQUdFUl9TVEFUVVMuU0NIRURVTEVEKSB7CisJCQkJCQlFcnJvckFuYWx5c2lzQWxnb3JpdGhtIGFsZyA9IGV2dC5hbGdvcml0aG07CisJCQkJCQlkaXNwbGF5LnN5bmNFeGVjKG5ldyBSdW5uYWJsZSgpIHsKKwkJCQkJCQlwdWJsaWMgdm9pZCBydW4oKSB7CisJCQkJCQkJCUF1dG9FeHBDb250cm9sLnRoaXMucmVzZXQoKTsKKwkJCQkJCQkJQXV0b0V4cENvbnRyb2wudGhpcy5zdG9wQnV0dG9uLnNldEVuYWJsZWQodHJ1ZSk7CisJCQkJCQkJCXJlc3RhcnRCdXR0b24uc2V0RW5hYmxlZChmYWxzZSk7CisJCQkJCQkJfQorCQkJCQkJfSk7CisJCQkJCQlhbGcuYWRkTGlzdGVuZXIobmV3IEVycm9yQW5hbHlzaXNBbGdvcml0aG1MaXN0ZW5lcigpIHsKKwkJCQkJCQlwdWJsaWMgdm9pZCBldmVudFJlY2VpdmVkKEVycm9yQW5hbHlzaXNBbGdvcml0aG1FdmVudCBldnQpIHsKKwkJCQkJCQkJCQkJCQkJCQkKKwkJCQkJCQkJaWYoZXZ0LnN0YXR1cyA9PSBBTEdPUklUSE1fU1RBVFVTLlNUQVJUSU5HX1NJTVVMQVRJT04pIHsKKwkJCQkJCQkJCS8vIHNldCB0aGUgbGFiZWwgaW5mbworCQkJCQkJCQkJcnVuUGFyYW1OYW1lcyA9IGV2dC5wYXJhbWV0ZXJOYW1lczsKKwkJCQkJCQkJCWlmKHJlY2VudFBhcmFtVmFsdWVzID09IG51bGwpIHsKKwkJCQkJCQkJCQludW1Db2x1bW5zID0gKHNob3J0KXJ1blBhcmFtTmFtZXMubGVuZ3RoOworCQkJCQkJCQkJCXJlY2VudFBhcmFtVmFsdWVzID0gbmV3IGRvdWJsZVtOVU1ST1dTXVtydW5QYXJhbU5hbWVzLmxlbmd0aCsxXTsKKwkJCQkJCQkJCQlyZXN0YXJ0UGFyYW1WYWx1ZXMgPSBuZXcgZG91YmxlW3J1blBhcmFtTmFtZXMubGVuZ3RoXTsKKwkJCQkJCQkJCQkKKwkJCQkJCQkJCQlyZWNlbnRFcnJvcnMgPSBuZXcgZG91YmxlW05VTVJPV1NdOworCQkJCQkJCQkJCXJlY2VudFZFcnJvcnMgPSBuZXcgZG91YmxlW05VTVJPV1NdOworCQkJCQkJCQkJfSAKKwkJCQkJCQkJCQorCQkJCQkJCQkJaWYocm93IDwgTlVNUk9XUykgeworCQkJCQkJCQkJCXJlY2VudFBhcmFtVmFsdWVzW3Jvd10gPSBjb3B5RG91YmxlQXJyYXkoZXZ0LnBhcmFtZXRlclZhbHVlcyk7CisJCQkJCQkJCQkJcmVjZW50RXJyb3JzW3Jvd10gPSAtMTsgLy8gbm90IGtub3duIHlldAorCQkJCQkJCQkJCXJlY2VudFZFcnJvcnNbcm93KytdID0gLTE7IC8vIG5vdCBrbm93biB5ZXQKKwkJCQkJCQkJCX0gZWxzZSB7CisJCQkJCQkJCQkJLy8gV2UgbmVlZCB0byBzaGlmdCB1cAorCQkJCQkJCQkJCWZvcihpbnQgaT0wO2k8TlVNUk9XUy0xOysraSkgeworCQkJCQkJCQkJCQlmb3IoaW50IGo9MDtqPHJ1blBhcmFtTmFtZXMubGVuZ3RoOysraikgcmVjZW50UGFyYW1WYWx1ZXNbaV1bal0gPSByZWNlbnRQYXJhbVZhbHVlc1tpKzFdW2pdOworCQkJCQkJCQkJCQlyZWNlbnRFcnJvcnNbaV09cmVjZW50RXJyb3JzW2krMV07CisJCQkJCQkJCQkJCXJlY2VudFZFcnJvcnNbaV09cmVjZW50VkVycm9yc1tpKzFdOworCQkJCQkJCQkJCQkKKwkJCQkJCQkJCQl9CisJCQkJCQkJCQkJcmVjZW50UGFyYW1WYWx1ZXNbcm93LTFdID0gY29weURvdWJsZUFycmF5KGV2dC5wYXJhbWV0ZXJWYWx1ZXMpOworCQkJCQkJCQkJCXJlY2VudEVycm9yc1tyb3ctMV0gPSAtMTsgLy8gbm90IGtub3duIHlldAorCQkJCQkJCQkJCXJlY2VudFZFcnJvcnNbcm93LTFdID0gLTE7IC8vIG5vdCBrbm93biB5ZXQKKwkJCQkJCQkJCX0KKwkJCQkJCQkJCQorCQkJCQkJCQkJLy8gY29weSBhbGwgYnV0IHRoZSBlcnJvciAtIGl0IGlzIG5vdCBhIHBhcmFtZXRlcgorCQkJCQkJCQkJZm9yKGludCBpID0gMDsgaSA8IChyZXN0YXJ0UGFyYW1WYWx1ZXMubGVuZ3RoKTsgaSArKykgeworCQkJCQkJCQkJCWlmKHJlc3RhcnRXaXRoTGF0ZXN0KSB7CisJCQkJCQkJCQkJCWlmKHJlY2VudFBhcmFtVmFsdWVzIT1udWxsKSByZXN0YXJ0UGFyYW1WYWx1ZXNbaV0gPSByZWNlbnRQYXJhbVZhbHVlc1tyb3ctMV1baV07CisJCQkJCQkJCQkJfSBlbHNlIHsKKwkJCQkJCQkJCQkJaWYoYmVzdFBhcmFtVmFsdWVzIT1udWxsKSByZXN0YXJ0UGFyYW1WYWx1ZXNbaV0gPSBiZXN0UGFyYW1WYWx1ZXNbaV07CisJCQkJCQkJCQkJfQorCQkJCQkJCQkJCQorCQkJCQkJCQkJfQorCQkJCQkJCQkJCisJCQkJCQkJCQkvLyBBZGQgYSBSdW5uYWJsZSB0byB0aGUgVUkgdGhyZWFkJ3MgZXhlY3V0aW9uIHF1ZXVlIAorCQkJCQkJCQkJZmluYWwgRGlzcGxheSBkaXNwbGF5ID0gRGlzcGxheS5nZXREZWZhdWx0KCk7CisJCQkJCQkJCQlpZiAoIWRpc3BsYXkuaXNEaXNwb3NlZCgpKSB7CisJCQkJCQkJCQkJLy8gWWVzCisJCQkJCQkJCQkJdHJ5IHsKKwkJCQkJCQkJCQkJZGlzcGxheS5hc3luY0V4ZWMobmV3IFJ1bm5hYmxlKCkgeworCQkJCQkJCQkJCQkJcHVibGljIHZvaWQgcnVuKCkgeworCQkJCQkJCQkJCQkJCWlmKCF2YWx1ZXNJbml0aWFsaXplZCkgeworCQkJCQkJCQkJCQkJCQlpbml0aWFsaXplVmFsdWVMYWJlbHMocnVuUGFyYW1OYW1lcyk7CisJCQkJCQkJCQkJCQkJCWluaXRpYWxpemVDb250cm9sTGFiZWxzKHJ1blBhcmFtTmFtZXMpOworCQkJCQkJCQkJCQkJCX0KKwkJCQkJCQkJCQkJCQl1cGRhdGVWYWx1ZUxhYmVscygpOworCQkJCQkJCQkJCQkJfSAvLyBydW4KKwkJCQkJCQkJCQkJfSk7IC8vIGRpc3BsYXkuYXN5bmNFeGVjCisJCQkJCQkJCQkJfSAvLyB0cnkKKwkJCQkJCQkJCQljYXRjaCAoZmluYWwgRXhjZXB0aW9uIGUpIHsKKwkJCQkJCQkJCQkJLy8gSWdub3JlIHRoZXJlIGNvdWxkIGJlIGEgcmFjZSBjb25kaXRpb24gd2l0aCB0aGUgZGlzcGxheSBiZWluZyBkaXNwb3NlZAorCQkJCQkJCQkJCX0gLy8gY2F0Y2ggRXhjZXB0aW9uCisJCQkJCQkJCQl9IC8vIGlmICghZGlzcGxheS5pc0Rpc3Bvc2VkKCkpIAorCQkJCQkJCQkvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworCQkJCQkJCQl9IGVsc2UgaWYoZXZ0LnN0YXR1cyA9PSBBTEdPUklUSE1fU1RBVFVTLkZJTklTSEVEX0FMR09SSVRITSkgeworCQkJCQkJCQkJLy8gVGhlIGFsZ29yaXRobSBoYXMgZmluaXNoZWQuIFNtYWxsZXN0IHZhbHVlIGluIAorCQkJCQkJCQkJLy9ldnQucmVzdWx0CisJCQkJCQkJCQkvLy8vLy8vLy8vLy8vLy8vLworCQkJCQkJCQkJZGlzcGxheS5hc3luY0V4ZWMobmV3IFJ1bm5hYmxlKCkgeworCQkJCQkJCQkJCXB1YmxpYyB2b2lkIHJ1bigpIHsKKwkJCQkJCQkJCQkJcmVzdGFydEJ1dHRvbi5zZXRFbmFibGVkKHRydWUpOworCQkJCQkJCQkJCQlzdG9wQnV0dG9uLnNldEVuYWJsZWQoZmFsc2UpOworCQkJCQkJCQkJCX0KKwkJCQkJCQkJCX0pOworCQkJCQkJCQl9IGVsc2UgaWYoZXZ0LnN0YXR1cyA9PSBBTEdPUklUSE1fU1RBVFVTLkZJTklTSEVEX1NJTVVMQVRJT04pIHsKKwkJCQkJCQkJCS8vIE9uZSBzaW11bGF0aW9uIGlzIGRvbmUuIFRoZSByZXN1bHQgaXMgUkVBRFkgYW5kIHN0b3JlZCBpbiBldnQucmVzdWx0CisJCQkJCQkJCQlFcnJvclJlc3VsdCByZXN1bHQgPSBldnQucmVzdWx0OworCQkJCQkJCQkJZmluYWwgZG91YmxlIHBsb3R0YWJsZUVycm9yID0gcGxvdHRhYmxlRXJyb3IocmVzdWx0LmdldEVycm9yKCkpOworCQkJCQkJCQkJcmVjZW50RXJyb3JzW3Jvdy0xXSA9IGV2dC5yZXN1bHQuZ2V0RXJyb3IoKTsKKwkJCQkJCQkJCXJlY2VudFZFcnJvcnNbcm93LTFdID0gZXZ0LnJlc3VsdC5nZXRWYWxpZGF0aW9uRXJyb3IoKTsKKwkJCQkJCQkJCQorCQkJCQkJCQkJaWYocmVzdWx0ICE9IG51bGwpIHsKKwkJCQkJCQkJCQkvLyBQbG90IDEgZnJvbSByZXN1bHQuZ2V0RXJyb3IoKSAoa2VlcCBhcHBlbmRpbmcpCisJCQkJCQkJCQkJYXBwZW5kTGF0ZXN0RXJyb3JEYXRhKHBsb3R0YWJsZUVycm9yKTsKKwkJCQkJCQkJCQkvLyBQbG90IDIgZnJvbSByZXN1bHQuZ2V0RXJyb3JCeVRpbWVzdGVwKCkgKHNhbWUgYXMgd2Ugc2hvdyBpbiBzY2VuYXJpbyBjb21wYXJpc29uIHZpZXcpCisJCQkJCQkJCQkJc2V0UmVjZW50VGltZVNlcmllcyhyZXN1bHQuZ2V0RXJyb3IoKSwgcmVzdWx0LmdldFZhbGlkYXRpb25FcnJvcigpLCByZXN1bHQuZ2V0RXJyb3JCeVRpbWVTdGVwKCksIHJlc3VsdC5nZXRSZWZlcmVuY2VCeVRpbWUoKSwgcmVzdWx0LmdldE1vZGVsQnlUaW1lKCkgKTsKKwkJCQkJCQkJCQkKKwkJCQkJCQkJCQlpZihiZXN0UGFyYW1WYWx1ZXMgPT0gbnVsbCkgeworCQkJCQkJCQkJCQliZXN0UGFyYW1WYWx1ZXMgPSBjb3B5RG91YmxlQXJyYXkocmVjZW50UGFyYW1WYWx1ZXNbcm93LTFdKTsKKwkJCQkJCQkJCQkJYmVzdEVycm9yID0gcmVzdWx0LmdldEVycm9yKCk7CisJCQkJCQkJCQkJCWJlc3RWRXJyb3IgPSByZXN1bHQuZ2V0VmFsaWRhdGlvbkVycm9yKCk7CisJCQkJCQkJCQkJfQorCQkJCQkJCQkJCQorCQkJCQkJCQkJCS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworCQkJCQkJCQkJCS8vIEFkZCBhIFJ1bm5hYmxlIHRvIHRoZSBVSSB0aHJlYWQncyBleGVjdXRpb24gcXVldWUgCisJCQkJCQkJCQkJZmluYWwgRGlzcGxheSBkaXNwbGF5ID0gRGlzcGxheS5nZXREZWZhdWx0KCk7CisJCQkJCQkJCQkJaWYgKCFkaXNwbGF5LmlzRGlzcG9zZWQoKSkgeworCQkJCQkJCQkJCQkvLyBZZXMKKwkJCQkJCQkJCQkJdHJ5IHsKKwkJCQkJCQkJCQkJCWRpc3BsYXkuYXN5bmNFeGVjKG5ldyBSdW5uYWJsZSgpIHsKKwkJCQkJCQkJCQkJCQlwdWJsaWMgdm9pZCBydW4oKSB7CisJCQkJCQkJCQkJCQkJCXVwZGF0ZUNoYXJ0cygpOworCQkJCQkJCQkJCQkJCQl1cGRhdGVWYWx1ZUxhYmVscygpOworCQkJCQkJCQkJCQkJCX0gLy8gcnVuCisJCQkJCQkJCQkJCQl9KTsgLy8gZGlzcGxheS5hc3luY0V4ZWMKKwkJCQkJCQkJCQkJfSAvLyB0cnkKKwkJCQkJCQkJCQkJY2F0Y2ggKGZpbmFsIEV4Y2VwdGlvbiBlKSB7CisJCQkJCQkJCQkJCQkvLyBJZ25vcmUgdGhlcmUgY291bGQgYmUgYSByYWNlIGNvbmRpdGlvbiB3aXRoIHRoZSBkaXNwbGF5IGJlaW5nIGRpc3Bvc2VkCisJCQkJCQkJCQkJCX0gLy8gY2F0Y2ggRXhjZXB0aW9uCisJCQkJCQkJCQkJfSAvLyBpZiAoIWRpc3BsYXkuaXNEaXNwb3NlZCgpKSAKKwkJCQkJCQkJCX0vLyBpZihyZXN1bHQgIT0gbnVsbCkKKwkJCQkJCQkJfSBlbHNlIGlmKGV2dC5zdGF0dXMgPT0gQUxHT1JJVEhNX1NUQVRVUy5SRVNUQVJURURfQUxHT1JJVEhNKSB7CisJCQkJCQkJCQkvLyBUaGUgYWxnb3JpdGhtIGhhcyByZXN0YXJ0ZWQuIFNtYWxsZXN0IHZhbHVlIGluIAorCQkJCQkJCQkJLy8gZXZ0LnJlc3VsdAorCQkJCQkJCQl9CisJCQkJCQkJfQorCQkJCQkJfSk7CisJCQkJCX0KKwkJCQl9CisJCQl9KTsKKwkJCQorCQl9Ly8gaWYobWFuYWdlciBudWxsKQorCQkKKwkJCisJCXVwZGF0ZUNoYXJ0cygpOworCQkKKwl9IC8vIGNyZWF0ZUNvbnRlbnRzCisJCisJLyoqCisJICogZmlsdGVyICt2ZSwgLXZlIGluZmluaXR5LCBldGMKKwkgKiBAcGFyYW0gZXJyb3IKKwkgKiBAcmV0dXJuCisJICovCisJc3RhdGljIGRvdWJsZSBwbG90dGFibGVFcnJvcihkb3VibGUgZXJyb3IpIHsKKwkJaWYoKGVycm9yPT1Eb3VibGUuUE9TSVRJVkVfSU5GSU5JVFkpCisJCQkJCQkJCQkJCXx8KGVycm9yPT1Eb3VibGUuTkVHQVRJVkVfSU5GSU5JVFkpCisJCQkJCQkJCQkJCXx8RG91YmxlLmlzTmFOKGVycm9yKQorCQkJCQkJCQkJCQl8fChlcnJvcj09RG91YmxlLk1BWF9WQUxVRSkpIHsKKwkJCXJldHVybiAxMDAuMDsKKwkJfSBlbHNlIHsKKwkJCXJldHVybiBlcnJvcjsKKwkJfQorCQkJCQorCQkJCQorCX0KKwkKKwlwcml2YXRlIHZvaWQgcmVzZXQoKSB7CisJCS8vIFJlc2V0IGV2ZXJ5dGhpbmcgYXQgdGhlIGJlZ2lubmluZyBvZiBhbiBhdXRvbWF0ZWQgZXhwZXJpbWVudAorCQllcnJvckhpc3RvcnkgPSBuZXcgZG91YmxlWzFdOworCQllcnJvckhpc3RvcnlbMF0gPSAwOworCQkKKwkJbmV3RXJyb3JUaW1lU2VyaWVzID0gbmV3IGRvdWJsZVsxXTsKKwkJbmV3RXJyb3JUaW1lU2VyaWVzWzBdID0gMDsKKwkJCisJCXJlZmVyZW5jZUluY2lkZW5jZSA9IG5ldyBkb3VibGVbMV07CisJCXJlZmVyZW5jZUluY2lkZW5jZVswXSA9IDA7CisJCQorCQltb2RlbEluY2lkZW5jZSA9IG5ldyBkb3VibGVbMV07CisJCW1vZGVsSW5jaWRlbmNlWzBdID0gMDsKKwkJCisJCWVycm9yQ29udmVyZ2VuY2VCeVJ1bi5yZXNldERhdGEoKTsKKwkJY3VycmVudEVycm9yQnlUaW1lLnJlc2V0RGF0YSgpOworCQlhZ2dyZWdhdGVFcnJvckJ5VGltZS5yZXNldERhdGEoKTsKKwkJLy9lcnJvckNvbnZlcmdlbmNlQnlSdW4uY2xlYXJEYXRhKCk7CisJCS8vY3VycmVudEVycm9yQnlUaW1lLmNsZWFyRGF0YSgpOworCQllcnJvckhpc3RvcnlMaXN0ID0gbmV3IEFycmF5TGlzdDxEb3VibGU+KCk7CisJCQorCQliZXN0U2VyaWVzID0gbnVsbDsKKwkJYmVzdEVycm9yID0gRG91YmxlLk1BWF9WQUxVRTsKKwkJYmVzdFZFcnJvciA9IERvdWJsZS5NQVhfVkFMVUU7CisJCQorCQlydW5QYXJhbU5hbWVzID0gbnVsbDsKKwkJYmVzdFBhcmFtVmFsdWVzID0gbnVsbDsKKwkJcmVzdGFydFBhcmFtVmFsdWVzID0gbnVsbDsKKwkJcmVjZW50UGFyYW1WYWx1ZXMgPSBudWxsOworCQlyZWNlbnRFcnJvcnMgPSBudWxsOworCQlyZWNlbnRWRXJyb3JzID0gbnVsbDsKKwkJCisJCWlmKGF0dHJpYnV0ZUxhYmVscyAhPSBudWxsKQorCQkJZm9yKGludCBpPTA7aTxhdHRyaWJ1dGVMYWJlbHMubGVuZ3RoOysraSkgeworCQkJYXR0cmlidXRlTGFiZWxzW2ldLmRpc3Bvc2UoKTsKKwkJCWF0dHJpYnV0ZUxhYmVsc1tpXSA9IG51bGw7CisJCX0KKwkJYXR0cmlidXRlTGFiZWxzID0gbnVsbDsKKwkJaWYoYmVzdFZhbHVlTGFiZWxzICE9IG51bGwpIAorCQkJZm9yKGludCBpPTA7aTxiZXN0VmFsdWVMYWJlbHMubGVuZ3RoOysraSkgeworCQkJCWJlc3RWYWx1ZUxhYmVsc1tpXS5kaXNwb3NlKCk7CisJCQkJYmVzdFZhbHVlTGFiZWxzW2ldID0gbnVsbDsKKwkJCX0KKwkJYmVzdFZhbHVlTGFiZWxzID0gbnVsbDsKKwkJCisJCWlmKHJlY2VudFZhbHVlTGFiZWxzICE9IG51bGwpCisJCQlmb3IoaW50IGk9MDtpPHJlY2VudFZhbHVlTGFiZWxzLmxlbmd0aDsrK2kpCisJCQkJZm9yKGludCBqPTA7ajxyZWNlbnRWYWx1ZUxhYmVsc1tpXS5sZW5ndGg7KytqKSB7CisJCQkJCXJlY2VudFZhbHVlTGFiZWxzW2ldW2pdLmRpc3Bvc2UoKTsKKwkJCQkJcmVjZW50VmFsdWVMYWJlbHNbaV1bal0gPSBudWxsOworCQkJCX0KKwkJcmVjZW50VmFsdWVMYWJlbHMgPSBudWxsOworCQkKKwkJaWYoY29udHJvbExhYmVscyAhPSBudWxsKQorCQkJZm9yKENMYWJlbCBsYWI6Y29udHJvbExhYmVscykgbGFiLmRpc3Bvc2UoKTsgCisJCQorCQljb250cm9sTGFiZWxzID0gbnVsbDsKKwkJCisJCQorCQlpZihyZXN0YXJ0VmFsdWVzIT1udWxsKQorCQkJZm9yKFRleHQgdDpyZXN0YXJ0VmFsdWVzKSB0LmRpc3Bvc2UoKTsKKwkJCisJCXJvdyA9IDA7IAorCQludW1Db2x1bW5zID0gMDsKKwkJdmFsdWVzSW5pdGlhbGl6ZWQgPSBmYWxzZTsKKwl9CisJCisJLyoqCisJICogdXBkYXRlIHRoZSBncmFwaHMKKwkgKi8KKwlwdWJsaWMgc3RhdGljIHZvaWQgdXBkYXRlQ2hhcnRzKCkgeworCQllcnJvckNvbnZlcmdlbmNlQnlSdW4uZHJhdygpOworCQljdXJyZW50RXJyb3JCeVRpbWUuZHJhdygpOworCQlhZ2dyZWdhdGVFcnJvckJ5VGltZS5kcmF3KCk7CisJfQorCQorCS8qKgorCSAqIHJlZHJhdyB0aGUgZ3JhcGhzCisJICovCisJcHVibGljIHN0YXRpYyB2b2lkIHJlZHJhd0NoYXJ0cygpIHsKKwkJZXJyb3JDb252ZXJnZW5jZUJ5UnVuLnJlZHJhdygpOworCQljdXJyZW50RXJyb3JCeVRpbWUucmVkcmF3KCk7CisJCWFnZ3JlZ2F0ZUVycm9yQnlUaW1lLnJlZHJhdygpOworCX0KKwkKKwkKKwkKKwkvKioKKwkgKiBzZXQgdXAgdGhlIHRpbWUgc2VyaWVzIGNoYXJ0CisJICogQHBhcmFtIGRhdGFDb21wb3NpdGUKKwkgKi8KKwlwcml2YXRlIHZvaWQgZ2V0RXJyb3JUaW1lU2VyaWVzQ2hhcnQoQ29tcG9zaXRlIGRhdGFDb21wb3NpdGUpIHsKKwkJCQkKKwkJLy8gY3VycmVudEVycm9yQnlUaW1lCisJCWN1cnJlbnRFcnJvckJ5VGltZSA9IG5ldyBFcnJvclRpbWVTZXJpZXNDYW52YXModGhpcyxkYXRhQ29tcG9zaXRlLAorCQkJCU1lc3NhZ2VzLmdldFN0cmluZygiQVVUTy5USVRMRTIiKSwKKwkJCQlNZXNzYWdlcy5nZXRTdHJpbmcoIkFVVE8uRVJST1IiKSwvLyB5IGF4aXMKKwkJCQlNZXNzYWdlcy5nZXRTdHJpbmcoIkFVVE8uVElNRSIpLC8vIHggYXhpcworCQkJCU1lc3NhZ2VzLmdldFN0cmluZygiQVVUTy5USVRMRTIiKSwgLy9maXJzdCBwcm9wZXJ0eSAobGluZSBzZXJpZXMgbmFtZSkKKwkJCQlmb3JlR3JvdW5kLAorCQkJCWJhY2tncm91bmRHcm91bmQsCisJCQkJZnJhbWVDb2xvciwgQ1VSUkVOVF9FUlJPUl9CWV9USU1FX0lELCB0cnVlKTsKKwkJZmluYWwgRm9ybURhdGEgdGltZVNlcmllc0Zvcm1EYXRhID0gbmV3IEZvcm1EYXRhKCk7CisJCWN1cnJlbnRFcnJvckJ5VGltZS5zZXRMYXlvdXREYXRhKHRpbWVTZXJpZXNGb3JtRGF0YSk7CisJCXRpbWVTZXJpZXNGb3JtRGF0YS50b3AgPSBuZXcgRm9ybUF0dGFjaG1lbnQoZGF0YUNvbXBvc2l0ZSwgMCk7CisJCXRpbWVTZXJpZXNGb3JtRGF0YS5ib3R0b20gPSBuZXcgRm9ybUF0dGFjaG1lbnQoMTAwLCAwKTsKKwkJdGltZVNlcmllc0Zvcm1EYXRhLmxlZnQgPSBuZXcgRm9ybUF0dGFjaG1lbnQoMCwgMCk7CisJCXRpbWVTZXJpZXNGb3JtRGF0YS5yaWdodCA9IG5ldyBGb3JtQXR0YWNobWVudCgxMDAsIDApOworCQkKKwkJY3VycmVudEVycm9yQnlUaW1lLnJlZHJhdygpOworCQkKKwl9Ly8gZ2V0RXJyb3JUaW1lU2VyaWVzCisJCisJLyoqCisJICogc2V0IHVwIHRoZSB0aW1lIHNlcmllcyBjaGFydAorCSAqIEBwYXJhbSBkYXRhQ29tcG9zaXRlCisJICovCisJcHJpdmF0ZSB2b2lkIGdldEFnZ3JlZ2F0ZVRpbWVTZXJpZXNDaGFydChDb21wb3NpdGUgZGF0YUNvbXBvc2l0ZSkgeworCQkJCQorCQkvLyBjdXJyZW50RXJyb3JCeVRpbWUKKwkJYWdncmVnYXRlRXJyb3JCeVRpbWUgPSBuZXcgQWdncmVnYXRlVGltZVNlcmllc0NhbnZhcyh0aGlzLGRhdGFDb21wb3NpdGUsCisJCQkJTWVzc2FnZXMuZ2V0U3RyaW5nKCJBVVRPLlRJVExFNCIpLAorCQkJCU1lc3NhZ2VzLmdldFN0cmluZygiQVVUTy5JTkNJREVOQ0UiKSwvLyB5IGF4aXMKKwkJCQlNZXNzYWdlcy5nZXRTdHJpbmcoIkFVVE8uVElNRSIpLC8vIHggYXhpcworCQkJCU1lc3NhZ2VzLmdldFN0cmluZygiQVVUTy5USVRMRTQiKSwgLy9maXJzdCBwcm9wZXJ0eSAobGluZSBzZXJpZXMgbmFtZSkKKwkJCQlmb3JlR3JvdW5kLAorCQkJCWJhY2tncm91bmRHcm91bmQsCisJCQkJZnJhbWVDb2xvciwgQUdHUkVHQVRFX0JZX1RJTUVfSUQsIHRydWUpOworCQlmaW5hbCBGb3JtRGF0YSB0aW1lU2VyaWVzRm9ybURhdGEgPSBuZXcgRm9ybURhdGEoKTsKKwkJYWdncmVnYXRlRXJyb3JCeVRpbWUuc2V0TGF5b3V0RGF0YSh0aW1lU2VyaWVzRm9ybURhdGEpOworCQl0aW1lU2VyaWVzRm9ybURhdGEudG9wID0gbmV3IEZvcm1BdHRhY2htZW50KGRhdGFDb21wb3NpdGUsIDApOworCQl0aW1lU2VyaWVzRm9ybURhdGEuYm90dG9tID0gbmV3IEZvcm1BdHRhY2htZW50KDEwMCwgMCk7CisJCXRpbWVTZXJpZXNGb3JtRGF0YS5sZWZ0ID0gbmV3IEZvcm1BdHRhY2htZW50KDAsIDApOworCQl0aW1lU2VyaWVzRm9ybURhdGEucmlnaHQgPSBuZXcgRm9ybUF0dGFjaG1lbnQoMTAwLCAwKTsKKwkJCisJCWFnZ3JlZ2F0ZUVycm9yQnlUaW1lLnJlZHJhdygpOworCQkKKwl9Ly8gZ2V0QWdncmVnYXRlVGltZVNlcmllcworCQorCQorCS8qKgorCSAqIHNldCB1cCB0aGUgcnVuIGhpc3RvcnkgY2hhcnRzCisJICogQHBhcmFtIGRhdGFDb21wb3NpdGUKKwkgKi8KKwlwcml2YXRlIHZvaWQgZ2V0UnVuSGlzdG9yeUNoYXJ0KENvbXBvc2l0ZSBkYXRhQ29tcG9zaXRlKSB7CisJCS8vIGVycm9yQ29udmVyZ2VuY2VCeVJ1bgorCQllcnJvckNvbnZlcmdlbmNlQnlSdW4gPSBuZXcgUnVuSGlzdG9yeUNhbnZhcyh0aGlzLGRhdGFDb21wb3NpdGUsCisJCQkJTWVzc2FnZXMuZ2V0U3RyaW5nKCJBVVRPLlRJVExFMSIpLAorCQkJCU1lc3NhZ2VzLmdldFN0cmluZygiQVVUTy5FUlJPUiIpLCAvLyB5YXhpcworCQkJCU1lc3NhZ2VzLmdldFN0cmluZygiQVVUTy5SVU4iKSwvLyB4IGF4aXMKKwkJCQlNZXNzYWdlcy5nZXRTdHJpbmcoIkFVVE8uVElUTEUxIiksIC8vIGZpcnN0IHByb3BlcnkgKGxpbmUgc2VyaWVzIG5hbWUpCisJCQkJZm9yZUdyb3VuZCwKKwkJCQliYWNrZ3JvdW5kR3JvdW5kLAorCQkJCWZyYW1lQ29sb3IsIEVSUk9SX0NPTlZFUkdFTkNFX0JZX1JVTl9JRCwgdHJ1ZSk7CisJCWZpbmFsIEZvcm1EYXRhIFRpbWVTZXJpZXMxRm9ybURhdGEgPSBuZXcgRm9ybURhdGEoKTsKKwkJZXJyb3JDb252ZXJnZW5jZUJ5UnVuLnNldExheW91dERhdGEoVGltZVNlcmllczFGb3JtRGF0YSk7CisJCVRpbWVTZXJpZXMxRm9ybURhdGEudG9wID0gbmV3IEZvcm1BdHRhY2htZW50KGRhdGFDb21wb3NpdGUsIDApOworCQlUaW1lU2VyaWVzMUZvcm1EYXRhLmJvdHRvbSA9IG5ldyBGb3JtQXR0YWNobWVudCgxMDAsIDApOworCQlUaW1lU2VyaWVzMUZvcm1EYXRhLmxlZnQgPSBuZXcgRm9ybUF0dGFjaG1lbnQoMCwgMCk7CisJCVRpbWVTZXJpZXMxRm9ybURhdGEucmlnaHQgPSBuZXcgRm9ybUF0dGFjaG1lbnQoMTAwLCAwKTsKKwkJCisJCWVycm9yQ29udmVyZ2VuY2VCeVJ1bi5yZWRyYXcoKTsKKwkKKwl9Ly8gZ2V0RXF1YXRpb25TZXJpZXMKKwkKKwkKKwkvKioKKwkgKiBzZXQgdXAgdGhlIGNvbnRyb2xzCisJICogQHBhcmFtIGRhdGFDb21wb3NpdGUKKwkgKi8KKwlwcml2YXRlIHZvaWQgZ2V0Q29udHJvbHMoKSB7CisJCQorCQljb250cm9sc0NvbXBvc2l0ZS5zZXRMYXlvdXQobmV3IEZvcm1MYXlvdXQoKSk7CisJCQorCQlmaW5hbCBGb3JtRGF0YSBjb250cm9sVG9wRm9ybURhdGEgPSBuZXcgRm9ybURhdGEoKTsKKwkJY29udHJvbHNBY3Rpb25Db21wb3NpdGUgPSBuZXcgQ29tcG9zaXRlKGNvbnRyb2xzQ29tcG9zaXRlLFNXVC5CT1JERVIpOworCQljb250cm9sc0FjdGlvbkNvbXBvc2l0ZS5zZXRMYXlvdXREYXRhKGNvbnRyb2xUb3BGb3JtRGF0YSk7CisJCWNvbnRyb2xUb3BGb3JtRGF0YS50b3AgPSBuZXcgRm9ybUF0dGFjaG1lbnQoMCwgMCk7CisJCWNvbnRyb2xUb3BGb3JtRGF0YS5ib3R0b20gPSBuZXcgRm9ybUF0dGFjaG1lbnQoMjAsIDApOworCQljb250cm9sVG9wRm9ybURhdGEubGVmdCA9IG5ldyBGb3JtQXR0YWNobWVudCgwLCAwKTsKKwkJY29udHJvbFRvcEZvcm1EYXRhLnJpZ2h0ID0gbmV3IEZvcm1BdHRhY2htZW50KDEwMCwgMCk7CisJCQorCQkKKwkJZmluYWwgRm9ybURhdGEgY29udHJvbEJvdHRvbUZvcm1EYXRhID0gbmV3IEZvcm1EYXRhKCk7CisJCWNvbnRyb2xzVmFsdWVzQ29tcG9zaXRlID0gbmV3IENvbXBvc2l0ZShjb250cm9sc0NvbXBvc2l0ZSxTV1QuQk9SREVSKTsKKwkJY29udHJvbHNWYWx1ZXNDb21wb3NpdGUuc2V0TGF5b3V0RGF0YShjb250cm9sQm90dG9tRm9ybURhdGEpOworCQljb250cm9sQm90dG9tRm9ybURhdGEudG9wID0gbmV3IEZvcm1BdHRhY2htZW50KGNvbnRyb2xzQWN0aW9uQ29tcG9zaXRlLCAwKTsKKwkJY29udHJvbEJvdHRvbUZvcm1EYXRhLmJvdHRvbSA9IG5ldyBGb3JtQXR0YWNobWVudCgxMDAsIDApOworCQljb250cm9sQm90dG9tRm9ybURhdGEubGVmdCA9IG5ldyBGb3JtQXR0YWNobWVudCgwLCAwKTsKKwkJY29udHJvbEJvdHRvbUZvcm1EYXRhLnJpZ2h0ID0gbmV3IEZvcm1BdHRhY2htZW50KDEwMCwgMCk7CisJCQorCQkKKwkJLy8gVXNlIGZvcm0gbGF5b3V0CisJCUdyaWRMYXlvdXQgZ3JpZExheW91dCA9IG5ldyBHcmlkTGF5b3V0KCk7CisJCWdyaWRMYXlvdXQubnVtQ29sdW1ucyA9IDU7CisJCWdyaWRMYXlvdXQubWFrZUNvbHVtbnNFcXVhbFdpZHRoID0gdHJ1ZTsKKwkJY29udHJvbHNBY3Rpb25Db21wb3NpdGUuc2V0TGF5b3V0KGdyaWRMYXlvdXQpOworCQkKKy8vCQkvLyByb3cgMCBQQVVTRQorLy8JCS8vIGMxCisvLwkJQ0xhYmVsIHBhdXNlTGFiZWwgPSBuZXcgQ0xhYmVsKGNvbnRyb2xzQWN0aW9uQ29tcG9zaXRlLCBTV1QuTk9ORSk7CisvLwkJcGF1c2VMYWJlbC5zZXRUZXh0KE1lc3NhZ2VzLmdldFN0cmluZygiQVVUTy5QQVVTRSIpKTsKKy8vCQkvLyBjMgorLy8JCUJ1dHRvbiBwYXVzZUJ1dHRvbiA9IG5ldyBCdXR0b24oY29udHJvbHNBY3Rpb25Db21wb3NpdGUsIFNXVC5UT0dHTEUpOworLy8JCXBhdXNlQnV0dG9uLnNldEltYWdlKGltYWdlUmVnaXN0cnkuZ2V0KElTaGFyZWRJbWFnZXMuUEFVU0VfSUNPTikpOworLy8JCS8vIGMzCisvLwkJQ0xhYmVsIG5vTGFiZWxhID0gbmV3IENMYWJlbChjb250cm9sc0FjdGlvbkNvbXBvc2l0ZSwgU1dULk5PTkUpOworLy8JCW5vTGFiZWxhLnNldFRleHQoIiIpOworLy8JCS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLwkJLy8gYzQKKy8vCQlDTGFiZWwgbm9MYWJlbGIgPSBuZXcgQ0xhYmVsKGNvbnRyb2xzQWN0aW9uQ29tcG9zaXRlLCBTV1QuTk9ORSk7CisvLwkJbm9MYWJlbGIuc2V0VGV4dCgiIik7CisvLwkJLy8gYzUKKy8vCQlDTGFiZWwgbm9MYWJlbGMgPSBuZXcgQ0xhYmVsKGNvbnRyb2xzQWN0aW9uQ29tcG9zaXRlLCBTV1QuTk9ORSk7CisvLwkJbm9MYWJlbGMuc2V0VGV4dCgiIik7CisJCQorCQkvLyByb3cgMQorCQkvLyBjMS4KKwkJQ0xhYmVsIHN0b3BMYWJlbCA9IG5ldyBDTGFiZWwoY29udHJvbHNBY3Rpb25Db21wb3NpdGUsIFNXVC5OT05FKTsKKwkJc3RvcExhYmVsLnNldFRleHQoTWVzc2FnZXMuZ2V0U3RyaW5nKCJBVVRPLlNUT1AiKSk7CisJCS8vIGMyCisJCXN0b3BCdXR0b24gPSBuZXcgQnV0dG9uKGNvbnRyb2xzQWN0aW9uQ29tcG9zaXRlLCBTV1QuUFVTSCk7CisJCXN0b3BCdXR0b24uc2V0SW1hZ2UoaW1hZ2VSZWdpc3RyeS5nZXQoSVNoYXJlZEltYWdlcy5TVE9QX0lDT04pKTsKKwkJc3RvcEJ1dHRvbi5zZXRFbmFibGVkKGZhbHNlKTsgLy8gd2UnbGwgZW5hYmxlIHdoZW4gYW4gZXhwZXJpbWVudCBpcyBzdGFydGVkCisJCS8vIGMzCisJCUNMYWJlbCBub0xhYmVsMSA9IG5ldyBDTGFiZWwoY29udHJvbHNBY3Rpb25Db21wb3NpdGUsIFNXVC5OT05FKTsKKwkJbm9MYWJlbDEuc2V0VGV4dCgiIik7CisJCQorCQlCdXR0b25bXSByYWRpb3MgPSBuZXcgQnV0dG9uWzJdOworCisJCXJhZGlvc1swXSA9IG5ldyBCdXR0b24oY29udHJvbHNBY3Rpb25Db21wb3NpdGUsIFNXVC5SQURJTyk7CisJICAgIHJhZGlvc1swXS5zZXRTZWxlY3Rpb24odHJ1ZSk7CisJICAgIHJhZGlvc1swXS5zZXRUZXh0KE1lc3NhZ2VzLmdldFN0cmluZygiQVVUTy5MQVRFU1QiKSk7CisJICAgIHJhZGlvc1swXS5zZXRCb3VuZHMoMTAsIDUsIDc1LCAzMCk7CisKKwkgICAgcmFkaW9zWzFdID0gbmV3IEJ1dHRvbihjb250cm9sc0FjdGlvbkNvbXBvc2l0ZSwgU1dULlJBRElPKTsKKwkgICAgcmFkaW9zWzFdLnNldFRleHQoTWVzc2FnZXMuZ2V0U3RyaW5nKCJBVVRPLkJFU1QiKSk7CisJICAgIHJhZGlvc1sxXS5zZXRCb3VuZHMoMTAsIDMwLCA3NSwgMzApOworCSAgICByYWRpb3NbMF0uc2V0U2VsZWN0aW9uKHRydWUpOworCQkKKwkJCisJCQorCQkvLyByb3cgMgorCQkvLyBjMQorCQlDTGFiZWwgcmVzdGFydExhYmVsID0gbmV3IENMYWJlbChjb250cm9sc0FjdGlvbkNvbXBvc2l0ZSwgU1dULk5PTkUpOworCQlyZXN0YXJ0TGFiZWwuc2V0VGV4dChNZXNzYWdlcy5nZXRTdHJpbmcoIkFVVE8uUkVTVEFSVCIpKTsKKwkJLy8gYzIKKwkJcmVzdGFydEJ1dHRvbiA9IG5ldyBCdXR0b24oY29udHJvbHNBY3Rpb25Db21wb3NpdGUsIFNXVC5QVVNIKTsKKwkJcmVzdGFydEJ1dHRvbi5zZXRJbWFnZShpbWFnZVJlZ2lzdHJ5LmdldChJU2hhcmVkSW1hZ2VzLlJFU1RBUlRfSUNPTikpOworCQlyZXN0YXJ0QnV0dG9uLnNldEVuYWJsZWQoZmFsc2UpOworCQkvLyBjMworCQlDTGFiZWwgcGFyYW1zTGFiZWwgPSBuZXcgQ0xhYmVsKGNvbnRyb2xzQWN0aW9uQ29tcG9zaXRlLCBTV1QuTk9ORSk7CisJCXBhcmFtc0xhYmVsLnNldFRleHQoTWVzc2FnZXMuZ2V0U3RyaW5nKCJBVVRPLlJFU1RBUlRfSEVBREVSIikpOworCQkvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworCQkvLyBjNAorCQlDTGFiZWwgbm9MYWJlbDIgPSBuZXcgQ0xhYmVsKGNvbnRyb2xzQWN0aW9uQ29tcG9zaXRlLCBTV1QuTk9ORSk7CisJCW5vTGFiZWwyLnNldFRleHQoIiIpOworCQkvLyBjNQorCQlDTGFiZWwgbm9MYWJlbDMgPSBuZXcgQ0xhYmVsKGNvbnRyb2xzQWN0aW9uQ29tcG9zaXRlLCBTV1QuTk9ORSk7CisJCW5vTGFiZWwzLnNldFRleHQoIiIpOworCQkKKwkJCisJCQorCQkKKwkJLy8gQUNUSU9OUworLy8JCXBhdXNlQnV0dG9uLmFkZExpc3RlbmVyKFNXVC5TZWxlY3Rpb24sIG5ldyBMaXN0ZW5lcigpIHsKKy8vCQkJcHVibGljIHZvaWQgaGFuZGxlRXZlbnQoRXZlbnQgZSkgeworLy8JCQkJc3dpdGNoIChlLnR5cGUpIHsKKy8vCQkJCWNhc2UgU1dULlNlbGVjdGlvbjoKKy8vCQkJCQkvLyB0b2dnbGUKKy8vCQkJCQlwYXVzZVRyaWdnZXIgPSAhcGF1c2VUcmlnZ2VyOworLy8JCQkJCWlmKHBhdXNlVHJpZ2dlcikgeworLy8JCQkJCQlBdXRvbWF0aWNFeHBlcmltZW50TWFuYWdlci5wYXVzZSgpOworLy8JCQkJCX0gZWxzZSB7CisvLwkJCQkJCUF1dG9tYXRpY0V4cGVyaW1lbnRNYW5hZ2VyLmNvbnRpbnVlUnVuKCk7CisvLwkJCQkJfQorLy8JCQkJCQorLy8JCQkJCWJyZWFrOworLy8JCQkJfQorLy8JCQl9CisvLwkJfSk7CisJCQorCQlzdG9wQnV0dG9uLmFkZExpc3RlbmVyKFNXVC5TZWxlY3Rpb24sIG5ldyBMaXN0ZW5lcigpIHsKKwkJCXB1YmxpYyB2b2lkIGhhbmRsZUV2ZW50KEV2ZW50IGUpIHsKKwkJCQlzd2l0Y2ggKGUudHlwZSkgeworCQkJCWNhc2UgU1dULlNlbGVjdGlvbjoKKwkJCQkJc3RvcEJ1dHRvbi5zZXRFbmFibGVkKGZhbHNlKTsKKwkJCQkJQXV0b21hdGljRXhwZXJpbWVudE1hbmFnZXIuZ2V0SW5zdGFuY2UoKS5xdWl0Tm93KCk7CisJCQkJCXJlc3RhcnRCdXR0b24uc2V0RW5hYmxlZCh0cnVlKTsKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJfQorCQl9KTsKKwkJCisJCXJlc3RhcnRCdXR0b24uYWRkTGlzdGVuZXIoU1dULlNlbGVjdGlvbiwgbmV3IExpc3RlbmVyKCkgeworCQkJcHVibGljIHZvaWQgaGFuZGxlRXZlbnQoRXZlbnQgZSkgeworCQkJCXN3aXRjaCAoZS50eXBlKSB7CisJCQkJY2FzZSBTV1QuU2VsZWN0aW9uOgorCQkJCQlBdXRvbWF0aWNFeHBlcmltZW50TWFuYWdlci5nZXRJbnN0YW5jZSgpLnJlc3RhcnROb3cocmVzdGFydFBhcmFtVmFsdWVzKTsKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJfQorCQl9KTsKKwkJCisJCXJhZGlvc1swXS5hZGRMaXN0ZW5lcihTV1QuU2VsZWN0aW9uLCBuZXcgTGlzdGVuZXIoKSB7CisJCQlwdWJsaWMgdm9pZCBoYW5kbGVFdmVudChFdmVudCBlKSB7CisJCQkJc3dpdGNoIChlLnR5cGUpIHsKKwkJCQljYXNlIFNXVC5TZWxlY3Rpb246CisJCQkJCXNlbGVjdExhdGVzdEFjdGlvbigpOworCQkJCQlicmVhazsKKwkJCQl9CisJCQl9CisJCX0pOworCQlyYWRpb3NbMV0uYWRkTGlzdGVuZXIoU1dULlNlbGVjdGlvbiwgbmV3IExpc3RlbmVyKCkgeworCQkJcHVibGljIHZvaWQgaGFuZGxlRXZlbnQoRXZlbnQgZSkgeworCQkJCXN3aXRjaCAoZS50eXBlKSB7CisJCQkJY2FzZSBTV1QuU2VsZWN0aW9uOgorCQkJCQlzZWxlY3RCZXN0QWN0aW9uKCk7CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCX0KKwkJfSk7CisKKwkJY29udHJvbHNDb21wb3NpdGUucGFjaygpOworCQljb250cm9sc0NvbXBvc2l0ZS5sYXlvdXQoKTsKKwkJY29udHJvbHNDb21wb3NpdGUuc2V0VmlzaWJsZSh0cnVlKTsKKwkJCisJfS8vIGdldENvbnRyb2xzCisJCisJCisJLyoqCisJICogc2V0IHVwIHRoZSBjb250cm9scworCSAqIEBwYXJhbSBkYXRhQ29tcG9zaXRlCisJICovCisJcHJpdmF0ZSB2b2lkIGdldFNldHRpbmdzKCkgeworCQkKKwkJc2V0dGluZ3NDb21wb3NpdGUuc2V0TGF5b3V0KG5ldyBGb3JtTGF5b3V0KCkpOworCQkKKwkJCisJCXNldHRpbmdzQ29tcG9zaXRlLnBhY2soKTsKKwkJc2V0dGluZ3NDb21wb3NpdGUubGF5b3V0KCk7CisJCXNldHRpbmdzQ29tcG9zaXRlLnNldFZpc2libGUodHJ1ZSk7CisJCQorCX0vLyBnZXRTRVRUSU5HUworCQorCQorCQorCQorCQorCQorCS8qKgorCSAqIAorCSAqLworCXByaXZhdGUgc3RhdGljIHZvaWQgc2VsZWN0TGF0ZXN0QWN0aW9uKCkgeworCQlyZXN0YXJ0V2l0aExhdGVzdCA9IHRydWU7CisJCWlmKGJlc3RQYXJhbVZhbHVlcyE9bnVsbCkgeworCQkJZm9yKGludCBpID0gMDsgaSA8IChiZXN0UGFyYW1WYWx1ZXMubGVuZ3RoKSAtMTsgaSArKykgeworCQkJCWlmKHJlY2VudFBhcmFtVmFsdWVzIT1udWxsKSByZXN0YXJ0UGFyYW1WYWx1ZXNbaV0gPSByZWNlbnRQYXJhbVZhbHVlc1tyb3ctMV1baV07CisJCQl9CisJCX0KKwkJdXBkYXRlUmVzdGFydExhYmVscyh3aGl0ZSk7CisJfSAvLyBzZWxlY3QgbGF0ZXN0CisJCisJCisJLyoqCisJICogCisJICovCisJcHJpdmF0ZSBzdGF0aWMgdm9pZCBzZWxlY3RCZXN0QWN0aW9uKCkgeworCQlyZXN0YXJ0V2l0aExhdGVzdCA9IGZhbHNlOworCQlpZihiZXN0UGFyYW1WYWx1ZXMgIT0gbnVsbCkgeworCQkJZm9yKGludCBpID0gMDsgaSA8IChiZXN0UGFyYW1WYWx1ZXMubGVuZ3RoKSAtMTsgaSArKykgeworCQkJCXJlc3RhcnRQYXJhbVZhbHVlc1tpXSA9IGJlc3RQYXJhbVZhbHVlc1tpXTsKKwkJCX0KKwkJfQorCQl1cGRhdGVSZXN0YXJ0TGFiZWxzKGxpZ2h0R3JlZW4pOworCX0vLyBzZWxlY3QgYmVzdAorCQorCQorCS8qKgorCSAqIHNldCB1cCB0aGUgZm91ciBkYXRhIHRpbWUgc2VyaWVzIGNoYXJ0cworCSAqIEBwYXJhbSBkYXRhQ29tcG9zaXRlCisJICovCisJcHJvdGVjdGVkIHN0YXRpYyB2b2lkIHVwZGF0ZVZhbHVlTGFiZWxzKCkgeworCQlpZihiZXN0UGFyYW1WYWx1ZXMgIT0gbnVsbCkgeworCQkJZm9yKGludCBpPTA7aTxudW1Db2x1bW5zOysraSkKKwkJCQliZXN0VmFsdWVMYWJlbHNbaV0uc2V0VGV4dChiZXN0UGFyYW1WYWx1ZXNbaV0rIiIpOworCQkJCisJCQliZXN0VmFsdWVMYWJlbHNbbnVtQ29sdW1uc10uc2V0VGV4dChiZXN0RXJyb3IrIiIpOworCQkJYmVzdFZhbHVlTGFiZWxzW251bUNvbHVtbnMrMV0uc2V0VGV4dChiZXN0VkVycm9yKyIiKTsKKwkJfQorCQlmb3IoaW50IGkgPSAwOyBpIDwgTlVNUk9XUzsgKytpKSAKKwkJCWZvcihpbnQgaj0wO2o8bnVtQ29sdW1ucysxOysraikgeworCQkJCWlmKGo8IG51bUNvbHVtbnMpCisJCQkJCXJlY2VudFZhbHVlTGFiZWxzW2ldW2pdLnNldFRleHQocmVjZW50UGFyYW1WYWx1ZXNbaV1bal0rIiIpOworCQkJCWVsc2UgaWYocmVjZW50RXJyb3JzW2ldIT0tMSkgeyAKKwkJCQkJcmVjZW50VmFsdWVMYWJlbHNbaV1bal0uc2V0VGV4dChyZWNlbnRFcnJvcnNbaV0rIiIpOworCQkJCQlyZWNlbnRWYWx1ZUxhYmVsc1tpXVtqKzFdLnNldFRleHQocmVjZW50VkVycm9yc1tpXSsiIik7CisJCQkJfQorCQkJCWVsc2UgeworCQkJCQlyZWNlbnRWYWx1ZUxhYmVsc1tpXVtqXS5zZXRUZXh0KCIuLi4iKTsKKwkJCQkJcmVjZW50VmFsdWVMYWJlbHNbaV1baisxXS5zZXRUZXh0KCIuLi4iKTsKKwkJCQl9CisJCX0KKwkJCisJCXZhbHVlc0NvbXBvc2l0ZS5yZWRyYXcoKTsKKwkJdmFsdWVzQ29tcG9zaXRlLnVwZGF0ZSgpOworCQkKKwkJaWYocmVzdGFydFBhcmFtVmFsdWVzIT1udWxsKSB7CisJCQlmb3IoaW50IGo9MDtqPG51bUNvbHVtbnM7KytqKSB7CisJCQkJcmVzdGFydFZhbHVlc1tqXS5zZXRUZXh0KHJlc3RhcnRQYXJhbVZhbHVlc1tqXSsiIik7CisJCQkJfQorCQkJY29udHJvbHNWYWx1ZXNDb21wb3NpdGUucmVkcmF3KCk7CisJCQljb250cm9sc1ZhbHVlc0NvbXBvc2l0ZS51cGRhdGUoKTsKKwkJfQorCQorCX0vLyB1cGRhdGVWYWx1ZUxhYmVscworCQorCS8qKgorCSAqIGNhbGxlZCBieSByYWRpbyBidXR0b24gYWN0aW9uCisJICovCisJcHJvdGVjdGVkIHN0YXRpYyB2b2lkIHVwZGF0ZVJlc3RhcnRMYWJlbHMoZmluYWwgQ29sb3IgYmcpIHsKKwkJdHJ5IHsKKwkJCWRpc3BsYXkuYXN5bmNFeGVjKG5ldyBSdW5uYWJsZSgpIHsKKwkJCQlwdWJsaWMgdm9pZCBydW4oKSB7CisJCQkJCWlmKHJlc3RhcnRQYXJhbVZhbHVlcyE9bnVsbCkgeworCQkJCQkJZm9yKGludCBqPTA7ajxudW1Db2x1bW5zOysraikgeworCQkJCQkJCXJlc3RhcnRWYWx1ZXNbal0uc2V0VGV4dChyZXN0YXJ0UGFyYW1WYWx1ZXNbal0rIiIpOworCQkJCQkJCXJlc3RhcnRWYWx1ZXNbal0uc2V0QmFja2dyb3VuZChiZyk7CisJCQkJCQkJfQorCQkJCQkJY29udHJvbHNWYWx1ZXNDb21wb3NpdGUucmVkcmF3KCk7CisJCQkJCQljb250cm9sc1ZhbHVlc0NvbXBvc2l0ZS51cGRhdGUoKTsKKwkJCQkJfQorCQkJCX0gLy8gcnVuCisJCQl9KTsgLy8gZGlzcGxheS5hc3luY0V4ZWMKKwkJfSAvLyB0cnkKKwkJY2F0Y2ggKGZpbmFsIEV4Y2VwdGlvbiBlKSB7CisJCQkvLyBJZ25vcmUgdGhlcmUgY291bGQgYmUgYSByYWNlIGNvbmRpdGlvbiB3aXRoIHRoZSBkaXNwbGF5IGJlaW5nIGRpc3Bvc2VkCisJCX0gLy8gY2F0Y2ggRXhjZXB0aW9uCisJfQorCQorCXN0YXRpYyBib29sZWFuIHZhbHVlc0luaXRpYWxpemVkID0gZmFsc2U7CisJLyoqCisJICogCisJICogQHBhcmFtIGF0dHJpYnV0ZXMKKwkgKiBAcGFyYW0gaW5pdGlhbFZhbHVlcworCSAqLworCXByb3RlY3RlZCBzdGF0aWMgdm9pZCBpbml0aWFsaXplVmFsdWVMYWJlbHMoU3RyaW5nW10gYXR0cmlidXRlcykgeworCQkKKwkJaW50IG51bUF0dHJFbnRyaWVzID0gYXR0cmlidXRlcy5sZW5ndGg7CisJCWludCBudW1Db2x1bW5zID0gbnVtQXR0ckVudHJpZXM7CisKKwkJLy8gVXNlIGZvcm0gbGF5b3V0CisJCUdyaWRMYXlvdXQgZ2wgPSBuZXcgR3JpZExheW91dCgpOworCQlnbC5udW1Db2x1bW5zID0gbnVtQ29sdW1ucysyOyAvLyBlcnJvciBhbmQgdmFsaWRhdGlvbiBlcnJvcgorCQl2YWx1ZXNDb21wb3NpdGUuc2V0TGF5b3V0KGdsKTsKKwkJY29udHJvbHNWYWx1ZXNDb21wb3NpdGUuc2V0TGF5b3V0KGdsKTsKKwkJaW50IHdpZHRoID0gODAwL251bUNvbHVtbnM7CisJCQorCQlhdHRyaWJ1dGVMYWJlbHMgPSBuZXcgQ0xhYmVsW251bUNvbHVtbnMrMl07CisJCWJlc3RWYWx1ZUxhYmVscyA9IG5ldyBUZXh0W251bUNvbHVtbnMrMl07CisJCXJlY2VudFZhbHVlTGFiZWxzID0gbmV3IFRleHRbTlVNUk9XU11bbnVtQ29sdW1ucysyXTsKKwkJCisJCQlmb3IoaW50IGkgPSAwOyBpIDwgbnVtQ29sdW1uczsgaSArKykgeworCQkJCWF0dHJpYnV0ZUxhYmVsc1tpXSA9IG5ldyBDTGFiZWwodmFsdWVzQ29tcG9zaXRlLCBTV1QuQk9SREVSKTsKKwkJCQlhdHRyaWJ1dGVMYWJlbHNbaV0uc2V0VGV4dChhdHRyaWJ1dGVzW2ldKTsKKwkJCQlhdHRyaWJ1dGVMYWJlbHNbaV0uc2V0QmFja2dyb3VuZChjeWFuKTsKKwkJCQlmaW5hbCBHcmlkRGF0YSB0aXRsZUdyaWREYXRhID0gbmV3IEdyaWREYXRhKCk7CisJCQkJYXR0cmlidXRlTGFiZWxzW2ldLnNldExheW91dERhdGEodGl0bGVHcmlkRGF0YSk7CisJCQkgICAgdGl0bGVHcmlkRGF0YS5ncmFiRXhjZXNzSG9yaXpvbnRhbFNwYWNlPXRydWU7CisJCQkgICAgdGl0bGVHcmlkRGF0YS5taW5pbXVtV2lkdGg9d2lkdGg7CisJCQkgICAgdGl0bGVHcmlkRGF0YS5ob3Jpem9udGFsQWxpZ25tZW50ID0gR3JpZERhdGEuRklMTDsKKwkJCX0KKwkJCWF0dHJpYnV0ZUxhYmVsc1tudW1Db2x1bW5zXSA9IG5ldyBDTGFiZWwodmFsdWVzQ29tcG9zaXRlLCBTV1QuQk9SREVSKTsKKwkJCWF0dHJpYnV0ZUxhYmVsc1tudW1Db2x1bW5zXS5zZXRUZXh0KCJFcnJvciIpOworCQkJYXR0cmlidXRlTGFiZWxzW251bUNvbHVtbnNdLnNldEJhY2tncm91bmQoY3lhbik7CisJCQlhdHRyaWJ1dGVMYWJlbHNbbnVtQ29sdW1ucysxXSA9IG5ldyBDTGFiZWwodmFsdWVzQ29tcG9zaXRlLCBTV1QuQk9SREVSKTsKKwkJCWF0dHJpYnV0ZUxhYmVsc1tudW1Db2x1bW5zKzFdLnNldFRleHQoIlZFcnJvciIpOworCQkJYXR0cmlidXRlTGFiZWxzW251bUNvbHVtbnMrMV0uc2V0QmFja2dyb3VuZChjeWFuKTsKKwkJCQorCQkJZmluYWwgR3JpZERhdGEgdGl0bGVHcmlkRGF0YSA9IG5ldyBHcmlkRGF0YSgpOworCQkJYXR0cmlidXRlTGFiZWxzW251bUNvbHVtbnNdLnNldExheW91dERhdGEodGl0bGVHcmlkRGF0YSk7CisJCSAgICB0aXRsZUdyaWREYXRhLmdyYWJFeGNlc3NIb3Jpem9udGFsU3BhY2U9dHJ1ZTsKKwkJICAgIHRpdGxlR3JpZERhdGEubWluaW11bVdpZHRoPXdpZHRoOworCQkgICAgdGl0bGVHcmlkRGF0YS5ob3Jpem9udGFsQWxpZ25tZW50ID0gR3JpZERhdGEuRklMTDsKKwkJCQorCQkgICAgZmluYWwgR3JpZERhdGEgdGl0bGVHcmlkRGF0YTIgPSBuZXcgR3JpZERhdGEoKTsKKwkJCWF0dHJpYnV0ZUxhYmVsc1tudW1Db2x1bW5zKzFdLnNldExheW91dERhdGEodGl0bGVHcmlkRGF0YTIpOworCQkgICAgdGl0bGVHcmlkRGF0YTIuZ3JhYkV4Y2Vzc0hvcml6b250YWxTcGFjZT10cnVlOworCQkgICAgdGl0bGVHcmlkRGF0YTIubWluaW11bVdpZHRoPXdpZHRoOworCQkgICAgdGl0bGVHcmlkRGF0YTIuaG9yaXpvbnRhbEFsaWdubWVudCA9IEdyaWREYXRhLkZJTEw7CisJCSAgICAKKwkJCWZvcihpbnQgaSA9IDA7IGkgPCBudW1Db2x1bW5zKzI7IGkgKyspIHsKKwkJCQliZXN0VmFsdWVMYWJlbHNbaV0gPSBuZXcgVGV4dCh2YWx1ZXNDb21wb3NpdGUsIFNXVC5CT1JERVIpOworCQkJCWJlc3RWYWx1ZUxhYmVsc1tpXS5zZXRUZXh0KCIiKTsgLy8gbm90aGluZyB5ZXQKKwkJCQliZXN0VmFsdWVMYWJlbHNbaV0uc2V0QmFja2dyb3VuZChsaWdodEdyZWVuKTsgCisJCQkJZmluYWwgR3JpZERhdGEgdGV4dEdyaWREYXRhID0gbmV3IEdyaWREYXRhKCk7CisJCQkJYmVzdFZhbHVlTGFiZWxzW2ldLnNldExheW91dERhdGEodGV4dEdyaWREYXRhKTsKKwkJCSAgICB0ZXh0R3JpZERhdGEuZ3JhYkV4Y2Vzc0hvcml6b250YWxTcGFjZT10cnVlOworCQkJICAgIHRleHRHcmlkRGF0YS5taW5pbXVtV2lkdGg9d2lkdGg7CisJCQkgICAgdGV4dEdyaWREYXRhLmhvcml6b250YWxBbGlnbm1lbnQgPSBHcmlkRGF0YS5GSUxMOworCQkJfQorCQkJCisJCQlmb3IoaW50IGk9MDtpPE5VTVJPV1M7KytpKQorCQkJCWZvcihpbnQgaj0wO2o8bnVtQ29sdW1ucysyOysraikgeworCQkJCQlyZWNlbnRWYWx1ZUxhYmVsc1tpXVtqXSA9IG5ldyBUZXh0KHZhbHVlc0NvbXBvc2l0ZSwgU1dULkJPUkRFUik7CisJCQkJCXJlY2VudFZhbHVlTGFiZWxzW2ldW2pdLnNldFRleHQoIiIpOyAvLyBub3RoaW5nIHlldAorCQkJCQlyZWNlbnRWYWx1ZUxhYmVsc1tpXVtqXS5zZXRCYWNrZ3JvdW5kKHdoaXRlKTsKKwkJCQkJZmluYWwgR3JpZERhdGEgdGV4dEdyaWREYXRhID0gbmV3IEdyaWREYXRhKCk7CisJCQkJCXJlY2VudFZhbHVlTGFiZWxzW2ldW2pdLnNldExheW91dERhdGEodGV4dEdyaWREYXRhKTsKKwkJCQkgICAgdGV4dEdyaWREYXRhLmdyYWJFeGNlc3NIb3Jpem9udGFsU3BhY2U9dHJ1ZTsKKwkJCQkgICAgdGV4dEdyaWREYXRhLm1pbmltdW1XaWR0aD13aWR0aDsKKwkJCQkgICAgdGV4dEdyaWREYXRhLmhvcml6b250YWxBbGlnbm1lbnQgPSBHcmlkRGF0YS5GSUxMOworCQkJCX0JCisJCSAKKwkJdmFsdWVzQ29tcG9zaXRlLmxheW91dCgpOworCQkvL3ZhbHVlc0NvbXBvc2l0ZS5wYWNrKCk7CisJCS8vdmFsdWVzQ29tcG9zaXRlLnNldFZpc2libGUodHJ1ZSk7CisJCXZhbHVlc0NvbXBvc2l0ZS5yZWRyYXcoKTsKKwkJdmFsdWVzSW5pdGlhbGl6ZWQgPSB0cnVlOworCQorCX0vLyBpbml0aWFsaXplVmFsdWVMYWJlbHMKKwkKKwkKKworCS8qKgorCSAqIAorCSAqIEBwYXJhbSBhdHRyaWJ1dGVzCisJICogQHBhcmFtIGluaXRpYWxWYWx1ZXMKKwkgKi8KKwlwcm90ZWN0ZWQgc3RhdGljIHZvaWQgaW5pdGlhbGl6ZUNvbnRyb2xMYWJlbHMoU3RyaW5nW10gYXR0cmlidXRlcykgeworCQkKKwkJaW50IG51bUF0dHJFbnRyaWVzID0gYXR0cmlidXRlcy5sZW5ndGg7CisJCWludCBudW1Db2x1bW5zID0gbnVtQXR0ckVudHJpZXM7CisKKwkJLy8gVXNlIGZvcm0gbGF5b3V0CisJCUdyaWRMYXlvdXQgZ2wgPSBuZXcgR3JpZExheW91dCgpOworCQlnbC5udW1Db2x1bW5zID0gbnVtQ29sdW1uczsKKwkJCisJCWNvbnRyb2xzVmFsdWVzQ29tcG9zaXRlLnNldExheW91dChnbCk7CisJCWludCB3aWR0aCA9IDgwMC9udW1Db2x1bW5zOworCQkKKwkJY29udHJvbExhYmVscyA9IG5ldyBDTGFiZWxbbnVtQ29sdW1uc107CisJCXJlc3RhcnRWYWx1ZXMgPSBuZXcgVGV4dFtudW1Db2x1bW5zXTsKKwkJCisJCQlmb3IoaW50IGkgPSAwOyBpIDwgbnVtQ29sdW1uczsgaSArKykgeworCQkJCWNvbnRyb2xMYWJlbHNbaV0gPSBuZXcgQ0xhYmVsKGNvbnRyb2xzVmFsdWVzQ29tcG9zaXRlLCBTV1QuQk9SREVSKTsKKwkJCQljb250cm9sTGFiZWxzW2ldLnNldFRleHQoYXR0cmlidXRlc1tpXSk7CisJCQkJY29udHJvbExhYmVsc1tpXS5zZXRCYWNrZ3JvdW5kKGN5YW4pOworCQkJCWZpbmFsIEdyaWREYXRhIHRpdGxlR3JpZERhdGEgPSBuZXcgR3JpZERhdGEoKTsKKwkJCQljb250cm9sTGFiZWxzW2ldLnNldExheW91dERhdGEodGl0bGVHcmlkRGF0YSk7CisJCQkgICAgdGl0bGVHcmlkRGF0YS5ncmFiRXhjZXNzSG9yaXpvbnRhbFNwYWNlPXRydWU7CisJCQkgICAgdGl0bGVHcmlkRGF0YS5taW5pbXVtV2lkdGg9d2lkdGg7CisJCQkgICAgdGl0bGVHcmlkRGF0YS5ob3Jpem9udGFsQWxpZ25tZW50ID0gR3JpZERhdGEuRklMTDsKKwkJCX0KKwkJCisJCQlmaW5hbCBHcmlkRGF0YSB0aXRsZUdyaWREYXRhID0gbmV3IEdyaWREYXRhKCk7CisJCQkKKwkJICAgIHRpdGxlR3JpZERhdGEuZ3JhYkV4Y2Vzc0hvcml6b250YWxTcGFjZT10cnVlOworCQkgICAgdGl0bGVHcmlkRGF0YS5taW5pbXVtV2lkdGg9d2lkdGg7CisJCSAgICB0aXRsZUdyaWREYXRhLmhvcml6b250YWxBbGlnbm1lbnQgPSBHcmlkRGF0YS5GSUxMOworCQkJCisJCQlmb3IoaW50IGo9MDtqPG51bUNvbHVtbnM7KytqKSB7CisJCQkJcmVzdGFydFZhbHVlc1tqXSA9IG5ldyBUZXh0KGNvbnRyb2xzVmFsdWVzQ29tcG9zaXRlLCBTV1QuQk9SREVSKTsKKwkJCQlyZXN0YXJ0VmFsdWVzW2pdLnNldFRleHQoIiIpOyAvLyBub3RoaW5nIHlldAorCQkJCXJlc3RhcnRWYWx1ZXNbal0uc2V0QmFja2dyb3VuZCh3aGl0ZSk7CisJCQkJZmluYWwgR3JpZERhdGEgdGV4dEdyaWREYXRhID0gbmV3IEdyaWREYXRhKCk7CisJCQkJcmVzdGFydFZhbHVlc1tqXS5zZXRMYXlvdXREYXRhKHRleHRHcmlkRGF0YSk7CisJCQkgICAgdGV4dEdyaWREYXRhLmdyYWJFeGNlc3NIb3Jpem9udGFsU3BhY2U9dHJ1ZTsKKwkJCSAgICB0ZXh0R3JpZERhdGEubWluaW11bVdpZHRoPXdpZHRoOworCQkJICAgIHRleHRHcmlkRGF0YS5ob3Jpem9udGFsQWxpZ25tZW50ID0gR3JpZERhdGEuRklMTDsKKwkJCSAgICAKKwkJCSAgICBmaW5hbCBpbnQgaW5kID0gajsKKwkJCSAgICByZXN0YXJ0VmFsdWVzW2pdLmFkZE1vZGlmeUxpc3RlbmVyKG5ldyBNb2RpZnlMaXN0ZW5lcigpIHsKKwkJCQkJCisJCQkJCXB1YmxpYyB2b2lkIG1vZGlmeVRleHQoTW9kaWZ5RXZlbnQgZSkgeworCQkJCQkJdHJ5IHsKKwkJCQkJCQlTdHJpbmcgdGV4dCA9ICgoVGV4dCllLmdldFNvdXJjZSgpKS5nZXRUZXh0KCk7CisJCQkJCQkJcmVzdGFydFBhcmFtVmFsdWVzW2luZF0gPSBEb3VibGUucGFyc2VEb3VibGUodGV4dCk7CisJCQkJCQl9IGNhdGNoKEV4Y2VwdGlvbiBleCkgeworCQkJCQkJCS8vIFRoZSB1c2VyIGVudGVyZWQgYW4gaW52YWxpZCBkb3VibGUgdmFsdWUuIElnbm9yZQorCQkJCQkJfQorCQkJCQl9CisJCQkJfSk7CisJCQl9CQorCQkgCisJCWNvbnRyb2xzVmFsdWVzQ29tcG9zaXRlLmxheW91dCgpOworCQljb250cm9sc1ZhbHVlc0NvbXBvc2l0ZS5yZWRyYXcoKTsKKwkJdmFsdWVzSW5pdGlhbGl6ZWQgPSB0cnVlOworCQorCX0vLyBpbml0aWFsaXplQ29udHJvbExhYmVscworCQorCQorCQorCQorCQorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5XaWRnZXQjZGlzcG9zZSgpCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgZGlzcG9zZSgpIHsKKwkJCQkJCQorCQlzdXBlci5kaXNwb3NlKCk7CisJCQorCX0gLy8gZGlzcG9zZQorCisJCisJLyoqCisJICogbm90IHVzZWQKKwkgKiBAcmV0dXJuIG51bGwKKwkgKi8KKwlwdWJsaWMgSWRlbnRpZmlhYmxlIGdldElkZW50aWZpYWJsZSgpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJCisKKwkvKioKKwkgKiBnZXQgdGhlIHZhbHVlIGZvciBwbG90dGluZworCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS51dGlsLmFuYWx5c2lzLnZpZXdzLkFuYWx5c2lzQ29udHJvbCNnZXRWYWx1ZXMoaW50LCBpbnQpCisJICovCisJcHVibGljIGRvdWJsZVtdIGdldFZhbHVlcyhpbnQgY2hhcnRJbmRleCwgaW50IHN0YXRlKSB7CisJCQorCQlpZihjaGFydEluZGV4ID09IDApIHJldHVybiBlcnJvckhpc3Rvcnk7CisJCWlmKGNoYXJ0SW5kZXggPT0gMSkgeworCQkJaWYoc3RhdGU9PTApIHJldHVybiBuZXdFcnJvclRpbWVTZXJpZXM7CisJCQlpZihzdGF0ZT09MSkgcmV0dXJuIGJlc3RTZXJpZXM7CisJCX0KKwkJaWYoY2hhcnRJbmRleCA9PSAyKSB7CisJCQlpZihzdGF0ZT09MCkgcmV0dXJuIHJlZmVyZW5jZUluY2lkZW5jZTsKKwkJCWlmKHN0YXRlPT0xKSByZXR1cm4gbW9kZWxJbmNpZGVuY2U7CisJCX0KKwkJLy8gc2hvdWxkIG5ldmVyIGhhcHBlbgorCQlyZXR1cm4gbnVsbDsKKwl9CisJCisJLyoqCisJICogTm90IHVzZWQKKwkgKiBAcGFyYW0gY2hhcnRJbmRleCBub3QgdXNlZCAob25seSBvbmUgY2hhcnQpCisJICogQHBhcmFtIHN0YXRlCisJICogQHJldHVybiBwcm9wZXJ0eSBuYW1lCisJICovCisJcHVibGljIFN0cmluZyBnZXRQcm9wZXJ0eShpbnQgY2hhcnRJbmRleCwgaW50IHN0YXRlKSB7CisJCWlmKGNoYXJ0SW5kZXg9PTApIHJldHVybiBNZXNzYWdlcy5nZXRTdHJpbmcoIkFVVE8uVElUTEUxIik7CisJCWlmKGNoYXJ0SW5kZXg9PTEpIHsKKwkJCWlmKHN0YXRlPT0wKSByZXR1cm4gTWVzc2FnZXMuZ2V0U3RyaW5nKCJBVVRPLlRJVExFMiIpOworCQkJaWYoc3RhdGU9PTEpIHJldHVybiBNZXNzYWdlcy5nZXRTdHJpbmcoIkFVVE8uVElUTEUzIik7CisJCX0KKwkJaWYoY2hhcnRJbmRleD09MikgeworCQkJaWYoc3RhdGU9PTApIHJldHVybiBNZXNzYWdlcy5nZXRTdHJpbmcoIkFVVE8uVElUTEU0Iik7CisJCQlpZihzdGF0ZT09MSkgcmV0dXJuIE1lc3NhZ2VzLmdldFN0cmluZygiQVVUTy5USVRMRTUiKTsKKwkJfQorCQlyZXR1cm4gIE1lc3NhZ2VzLmdldFN0cmluZygiQVVUTy5OT1RGT1VOREVSUk9SIik7CisJfQorCQorCQorCQorCQorCQorCS8qKgorCSAqIE5vdCB1c2VkCisJICogQHBhcmFtIGNoYXJ0SW5kZXggbm90IHVzZWQgKG9ubHkgb25lIGNoYXJ0KQorCSAqIEByZXR1cm4gdGhlIG51bWJlciBvZiBwcm9wZXJ0aWVzLCBvbmx5IG9uZQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS51dGlsLmFuYWx5c2lzLnZpZXdzLkFuYWx5c2lzQ29udHJvbCNnZXROdW1Qcm9wZXJ0aWVzKGludCBjaGFydEluZGV4KQorCSAqLworCXB1YmxpYyBpbnQgZ2V0TnVtUHJvcGVydGllcyhpbnQgY2hhcnRJbmRleCkgeworCQlpZihjaGFydEluZGV4PT1FUlJPUl9DT05WRVJHRU5DRV9CWV9SVU5fSUQpIHJldHVybiAxOyAvLyBvbmUgdGhpbmcgdG8gY2hhcnQKKwkJaWYoY2hhcnRJbmRleD09Q1VSUkVOVF9FUlJPUl9CWV9USU1FX0lEKSByZXR1cm4gMjsgLy8gdHdvIHRoaW5ncyB0byBjaGFydAorCQlpZihjaGFydEluZGV4PT1BR0dSRUdBVEVfQllfVElNRV9JRCkgcmV0dXJuIDI7IC8vIHR3byB0aGluZ3MgdG8gY2hhcnQKKwkJcmV0dXJuIDA7IC8vIHNob3VsZCBuZXZlciBoYXBwZW4KKwl9CisKKwkvKioKKwkgKiAKKwkgKiBAcGFyYW0gZXJyb3IKKwkgKi8KKwlwdWJsaWMgc3RhdGljIHZvaWQgYXBwZW5kTGF0ZXN0RXJyb3JEYXRhKGRvdWJsZSBlcnJvcikgeworCQllcnJvckhpc3RvcnlMaXN0LmFkZChuZXcgRG91YmxlKGVycm9yKSk7CisJCWVycm9ySGlzdG9yeSA9IG5ldyBkb3VibGVbZXJyb3JIaXN0b3J5TGlzdC5zaXplKCldOworCQlmb3IoaW50IGkgPSAwOyBpIDwgZXJyb3JIaXN0b3J5TGlzdC5zaXplKCk7IGkgKyspIHsKKwkJCWVycm9ySGlzdG9yeVtpXSA9IGVycm9ySGlzdG9yeUxpc3QuZ2V0KGkpLmRvdWJsZVZhbHVlKCk7CisJCX0KKwl9CisKKwkvKioKKwkgKiAKKwkgKiBAcGFyYW0gZXJyb3IKKwkgKiBAcGFyYW0gdmVycm9yIFZhbGlkYXRpb24gZXJyb3IKKwkgKiBAcGFyYW0gZXJyb3JCeVRpbWVTdGVwCisJICogQHBhcmFtIHJlZkluY2lkZW5jZQorCSAqIEBwYXJhbSBiZXN0SW5jaWRlbmNlCisJICovCisJcHVibGljIHN0YXRpYyB2b2lkIHNldFJlY2VudFRpbWVTZXJpZXMoZG91YmxlIGVycm9yLCBkb3VibGUgdmVycm9yLCBFTGlzdDxEb3VibGU+IGVycm9yQnlUaW1lU3RlcCwgRUxpc3Q8RG91YmxlPiByZWZJbmNpZGVuY2UsIEVMaXN0PERvdWJsZT4gaW5jaWRlbmNlKSB7CisJCW5ld0Vycm9yVGltZVNlcmllcyA9IG5ldyBkb3VibGVbZXJyb3JCeVRpbWVTdGVwLnNpemUoKV07CisJCXJlZmVyZW5jZUluY2lkZW5jZSA9IG5ldyBkb3VibGVbcmVmSW5jaWRlbmNlLnNpemUoKV07CisJCW1vZGVsSW5jaWRlbmNlID0gbmV3IGRvdWJsZVtpbmNpZGVuY2Uuc2l6ZSgpXTsKKwkJZm9yKGludCBpID0gMDsgaSA8IGVycm9yQnlUaW1lU3RlcC5zaXplKCk7IGkgKyspIHsgCisJCQluZXdFcnJvclRpbWVTZXJpZXNbaV0gPSBlcnJvckJ5VGltZVN0ZXAuZ2V0KGkpLmRvdWJsZVZhbHVlKCk7CisJCQlyZWZlcmVuY2VJbmNpZGVuY2VbaV0gPSByZWZJbmNpZGVuY2UuZ2V0KGkpLmRvdWJsZVZhbHVlKCk7CisJCQltb2RlbEluY2lkZW5jZVtpXSA9IGluY2lkZW5jZS5nZXQoaSkuZG91YmxlVmFsdWUoKTsKKwkJfQorCQlpZihiZXN0U2VyaWVzPT1udWxsKSBiZXN0U2VyaWVzID0gbmV3RXJyb3JUaW1lU2VyaWVzOworCQlpZihlcnJvciA8PSBiZXN0RXJyb3IpIHsKKwkJCWJlc3RFcnJvciA9IGVycm9yOworCQkJYmVzdFZFcnJvciA9IHZlcnJvcjsKKwkJCWJlc3RTZXJpZXMgPSBuZXdFcnJvclRpbWVTZXJpZXM7CisJCQliZXN0UGFyYW1WYWx1ZXMgPSBjb3B5RG91YmxlQXJyYXkocmVjZW50UGFyYW1WYWx1ZXNbcm93LTFdKTsKKwkJfQorCQkKKwkJCisJfQorCisKKworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIGluaXRpYWxpemVIZWFkZXIoU3RyaW5nIGZvbGRlck5hbWUpIHsKKwkJLy8gVE9ETyBBdXRvLWdlbmVyYXRlZCBtZXRob2Qgc3R1YgorCQkKKwl9CisKKworCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgcmVtb3ZlKCkgeworCQkvLyBUT0RPIEF1dG8tZ2VuZXJhdGVkIG1ldGhvZCBzdHViCisJfQorCQkKKwlwcm90ZWN0ZWQgc3RhdGljIGRvdWJsZSBbXSBjb3B5RG91YmxlQXJyYXkoZG91YmxlIFtdcykgeworCQlkb3VibGUgW110ID0gbmV3IGRvdWJsZVtzLmxlbmd0aF07CisJCWludCBpPTA7CisJCWZvcihkb3VibGUgZDpzKXRbaSsrXT1kOworCQlyZXR1cm4gdDsKKwl9CisJCisJCisKK30gLy8gQXV0b0V4cENvbnRyb2wKZGlmZiAtLWdpdCBhL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuYXV0b21hdGljZXhwZXJpbWVudC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9hbmFseXNpcy9hdXRvbWF0aWNleHBlcmltZW50L3ZpZXdzL0F1dG9FeHBGYWN0b3J5LmphdmEgYi9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQvc3JjL29yZy9lY2xpcHNlL3N0ZW0vYW5hbHlzaXMvYXV0b21hdGljZXhwZXJpbWVudC92aWV3cy9BdXRvRXhwRmFjdG9yeS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ1YjMxOTkKLS0tIC9kZXYvbnVsbAorKysgYi9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQvc3JjL29yZy9lY2xpcHNlL3N0ZW0vYW5hbHlzaXMvYXV0b21hdGljZXhwZXJpbWVudC92aWV3cy9BdXRvRXhwRmFjdG9yeS5qYXZhCkBAIC0wLDAgKzEsNTEgQEAKKy8vIGF1dG9leHBGYWN0b3J5LmphdmEKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5hdXRvbWF0aWNleHBlcmltZW50LnZpZXdzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA3LCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZTsKKworLyoqCisgKiBUaGlzIGNsYXNzIGlzIGEgZmFjdG9yeSBmb3IgY3JlYXRpbmcge0BsaW5rIEFuYWx5c2lzQ29udHJvbH0gaW5zdGFuY2VzLgorICovCitwdWJsaWMgY2xhc3MgQXV0b0V4cEZhY3RvcnkgaW1wbGVtZW50cyBBbmFseXNpc0NvbnRyb2xGYWN0b3J5IHsKKworCS8qKgorCSAqIHB1YmxpYyBJTlNUQU5DRSBmb3IgdGhpcyBGYWN0b3J5CisJICovCisJcHVibGljIHN0YXRpYyBBdXRvRXhwRmFjdG9yeSBJTlNUQU5DRSA9IG5ldyBBdXRvRXhwRmFjdG9yeSgpOworCisJLyoqCisJICogQ29uc3RhbnRzIAorCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEFOQUxZU0lTX1RZUEUgPSAiQXV0b21hdGljIEV4cGVyaW1lbnQiOworCQorCisJLyoqCisJICogCisJICogQHBhcmFtIHBhcmVudAorCSAqIEByZXR1cm4gbmV3IEF1dG9FeHBDb250cm9sKCkKKwkgKi8KKwlwdWJsaWMgQW5hbHlzaXNDb250cm9sIGNyZWF0ZShmaW5hbCBDb21wb3NpdGUgcGFyZW50KSB7CisJCQkJCisJCXJldHVybiBuZXcgQXV0b0V4cENvbnRyb2wocGFyZW50KTsKKwl9CisKKwkvKioKKwkgKiBAcmV0dXJuIHR5cGUgb2YgYW5hbHlzaXMKKwkgKiAKKwkgKi8KKwlwdWJsaWMgU3RyaW5nIGdldENvbnRyb2xUeXBlKCkgeworCQlyZXR1cm4gQU5BTFlTSVNfVFlQRTsKKwl9CisKK30gLy8gYXV0b2V4cEZhY3RvcnkKZGlmZiAtLWdpdCBhL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuYXV0b21hdGljZXhwZXJpbWVudC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9hbmFseXNpcy9hdXRvbWF0aWNleHBlcmltZW50L3ZpZXdzL0F1dG9FeHBWaWV3LmphdmEgYi9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQvc3JjL29yZy9lY2xpcHNlL3N0ZW0vYW5hbHlzaXMvYXV0b21hdGljZXhwZXJpbWVudC92aWV3cy9BdXRvRXhwVmlldy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRhNGJmMTIKLS0tIC9kZXYvbnVsbAorKysgYi9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQvc3JjL29yZy9lY2xpcHNlL3N0ZW0vYW5hbHlzaXMvYXV0b21hdGljZXhwZXJpbWVudC92aWV3cy9BdXRvRXhwVmlldy5qYXZhCkBAIC0wLDAgKzEsNjcgQEAKKy8vIEF1dG9FeHBWaWV3IAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQudmlld3M7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDcsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGU7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkucGFydC5WaWV3UGFydDsKKworLyoqCisgKiBUaGlzIHZpZXcgcHJvdmlkZXMgYSB0b29sIHRvIGVzdGltYXRlIG1vZGVsIHBhcmFtZXRlcnMgZm9yIGEgbW9kZWwgdGhhdCBtaWdodCBmaXQgYSBzZXQgb2YgcmVmZXJlbmNlIGRhdGEuCisgKi8KKworcHVibGljIGNsYXNzIEF1dG9FeHBWaWV3IGV4dGVuZHMgVmlld1BhcnQgeworCisJLyoqCisJICogVGhlIGlkZW50aWZpZXIgb2YgdGhlIEF1dG9FeHAgVmlldyB7QHZhbHVlfQorCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIElEX0F1dG9FeHBfVklFVyA9ICJvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQiOyAvLyROT04tTkxTLTEkCisKKworCXByaXZhdGUgQW5hbHlzaXNWaWV3ZXIgYW5hbHlzaXNWaWV3ZXI7CisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnVpLnBhcnQuV29ya2JlbmNoUGFydCNjcmVhdGVQYXJ0Q29udHJvbChvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGUpCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgY3JlYXRlUGFydENvbnRyb2woZmluYWwgQ29tcG9zaXRlIHBhcmVudCkgeworCisJCWFuYWx5c2lzVmlld2VyID0gbmV3IEFuYWx5c2lzVmlld2VyKHBhcmVudCwgQXV0b0V4cEZhY3RvcnkuSU5TVEFOQ0UpOworCQkvL2FuYWx5c2lzVmlld2VyLnNldElucHV0KFNpbXVsYXRpb25NYW5hZ2VyLmdldE1hbmFnZXIoKSk7CisKKwkJZ2V0U2l0ZSgpLnNldFNlbGVjdGlvblByb3ZpZGVyKGFuYWx5c2lzVmlld2VyKTsKKworCisJfSAvLyBjcmVhdGVQYXJ0Q29udHJvbAorCisJCisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnVpLnBhcnQuV29ya2JlbmNoUGFydCNkaXNwb3NlKCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBkaXNwb3NlKCkgeworCQlzdXBlci5kaXNwb3NlKCk7CisJfSAvLyBkaXNwb3NlCisKKwkvKioKKwkgKiBUaGlzIGlzIHJlcXVpcmVkIGJ5IHRoZSBpbnRlcmZhY2UsIGJ1dCB3ZSdyZSBub3QgdXNpbmcgaXQuCisJICogCisJICogQHNlZSBvcmcuZWNsaXBzZS51aS5wYXJ0LldvcmtiZW5jaFBhcnQjc2V0Rm9jdXMoKQorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIHNldEZvY3VzKCkgeworCQkvLyBOb3RoaW5nCisJfSAvLyBzZXRGb2N1cworCit9IC8vIEF1dG9FeHBWaWV3CmRpZmYgLS1naXQgYS9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQvc3JjL29yZy9lY2xpcHNlL3N0ZW0vYW5hbHlzaXMvYXV0b21hdGljZXhwZXJpbWVudC92aWV3cy9FcnJvclRpbWVTZXJpZXNDYW52YXMuamF2YSBiL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuYXV0b21hdGljZXhwZXJpbWVudC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9hbmFseXNpcy9hdXRvbWF0aWNleHBlcmltZW50L3ZpZXdzL0Vycm9yVGltZVNlcmllc0NhbnZhcy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcyOTEzZTkKLS0tIC9kZXYvbnVsbAorKysgYi9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQvc3JjL29yZy9lY2xpcHNlL3N0ZW0vYW5hbHlzaXMvYXV0b21hdGljZXhwZXJpbWVudC92aWV3cy9FcnJvclRpbWVTZXJpZXNDYW52YXMuamF2YQpAQCAtMCwwICsxLDEyNDkgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5hdXRvbWF0aWNleHBlcmltZW50LnZpZXdzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7CitpbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CitpbXBvcnQgamF2YS51dGlsLk1hcDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmJpcnQuY2hhcnQuZGV2aWNlLklEZXZpY2VSZW5kZXJlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5iaXJ0LmNoYXJ0LmV4Y2VwdGlvbi5DaGFydEV4Y2VwdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5iaXJ0LmNoYXJ0LmZhY3RvcnkuR2VuZXJhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmJpcnQuY2hhcnQubW9kZWwuQ2hhcnQ7CitpbXBvcnQgb3JnLmVjbGlwc2UuYmlydC5jaGFydC5tb2RlbC5DaGFydFdpdGhBeGVzOworaW1wb3J0IG9yZy5lY2xpcHNlLmJpcnQuY2hhcnQubW9kZWwuYXR0cmlidXRlLkFuY2hvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5iaXJ0LmNoYXJ0Lm1vZGVsLmF0dHJpYnV0ZS5BeGlzVHlwZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5iaXJ0LmNoYXJ0Lm1vZGVsLmF0dHJpYnV0ZS5Cb3VuZHM7CitpbXBvcnQgb3JnLmVjbGlwc2UuYmlydC5jaGFydC5tb2RlbC5hdHRyaWJ1dGUuQ29sb3JEZWZpbml0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmJpcnQuY2hhcnQubW9kZWwuYXR0cmlidXRlLkludGVyc2VjdGlvblR5cGU7CitpbXBvcnQgb3JnLmVjbGlwc2UuYmlydC5jaGFydC5tb2RlbC5hdHRyaWJ1dGUuTGluZUF0dHJpYnV0ZXM7CitpbXBvcnQgb3JnLmVjbGlwc2UuYmlydC5jaGFydC5tb2RlbC5hdHRyaWJ1dGUuTGluZVN0eWxlOworaW1wb3J0IG9yZy5lY2xpcHNlLmJpcnQuY2hhcnQubW9kZWwuYXR0cmlidXRlLlBvc2l0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmJpcnQuY2hhcnQubW9kZWwuYXR0cmlidXRlLlRpY2tTdHlsZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5iaXJ0LmNoYXJ0Lm1vZGVsLmF0dHJpYnV0ZS5pbXBsLkJvdW5kc0ltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2UuYmlydC5jaGFydC5tb2RlbC5hdHRyaWJ1dGUuaW1wbC5Db2xvckRlZmluaXRpb25JbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLmJpcnQuY2hhcnQubW9kZWwuY29tcG9uZW50LkF4aXM7CitpbXBvcnQgb3JnLmVjbGlwc2UuYmlydC5jaGFydC5tb2RlbC5jb21wb25lbnQuU2VyaWVzOworaW1wb3J0IG9yZy5lY2xpcHNlLmJpcnQuY2hhcnQubW9kZWwuY29tcG9uZW50LmltcGwuU2VyaWVzSW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5iaXJ0LmNoYXJ0Lm1vZGVsLmRhdGEuTnVtYmVyRGF0YVNldDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5iaXJ0LmNoYXJ0Lm1vZGVsLmRhdGEuU2VyaWVzRGVmaW5pdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5iaXJ0LmNoYXJ0Lm1vZGVsLmRhdGEuaW1wbC5OdW1iZXJEYXRhRWxlbWVudEltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2UuYmlydC5jaGFydC5tb2RlbC5kYXRhLmltcGwuTnVtYmVyRGF0YVNldEltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2UuYmlydC5jaGFydC5tb2RlbC5kYXRhLmltcGwuU2VyaWVzRGVmaW5pdGlvbkltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2UuYmlydC5jaGFydC5tb2RlbC5pbXBsLkNoYXJ0V2l0aEF4ZXNJbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLmJpcnQuY2hhcnQubW9kZWwubGF5b3V0LkxlZ2VuZDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5iaXJ0LmNoYXJ0Lm1vZGVsLmxheW91dC5QbG90OworaW1wb3J0IG9yZy5lY2xpcHNlLmJpcnQuY2hhcnQubW9kZWwudHlwZS5MaW5lU2VyaWVzOworaW1wb3J0IG9yZy5lY2xpcHNlLmJpcnQuY2hhcnQubW9kZWwudHlwZS5pbXBsLlNjYXR0ZXJTZXJpZXNJbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLmJpcnQuY2hhcnQudXRpbC5QbHVnaW5TZXR0aW5nczsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uQWN0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JQWN0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5NZW51TWFuYWdlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uU2VwYXJhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuYXV0b21hdGljZXhwZXJpbWVudC5BY3RpdmF0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS51aS5wcmVmZXJlbmNlcy5WaXN1YWxpemF0aW9uUHJlZmVyZW5jZVBhZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LlNXVDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLlBhaW50RXZlbnQ7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5QYWludExpc3RlbmVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ncmFwaGljcy5Db2xvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZ3JhcGhpY3MuR0M7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmdyYXBoaWNzLkltYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNhbnZhczsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuTWVudTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5XaWRnZXQ7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaEFjdGlvbkNvbnN0YW50czsKKworLyoqCisgKiBFcnJvclRpbWVTZXJpZXNDYW52YXMgaXMgYSBzdWJjbGFzcyBvZiB7QGxpbmsgQ2FudmFzfSBzdWl0YWJsZSBmb3IgY2hhcnQgZHJhd2luZ3MuCisgKi8KK3B1YmxpYyBjbGFzcyBFcnJvclRpbWVTZXJpZXNDYW52YXMgZXh0ZW5kcyBDYW52YXMgeworCisJcHJvdGVjdGVkIElEZXZpY2VSZW5kZXJlciBpZHIgPSBudWxsOworCisJLyoqCisJICogVGhpcyBpcyB0aGUge0BsaW5rIENoYXJ0fSB0aGF0IHBsb3RzIHRoZSByZWxhdGl2ZSB2YWx1ZXMuCisJICovCisJcHJvdGVjdGVkIENoYXJ0IGNtID0gbnVsbDsKKworCS8qKgorCSAqIFRoZSBwcm92aWRlciBvZiByZWxhdGl2ZSB2YWx1ZXMuCisJICovCisJLy9wcml2YXRlIFJlbGF0aXZlVmFsdWVIaXN0b3J5UHJvdmlkZXIgcnZocDsKKworCXByaXZhdGUgQW5hbHlzaXNDb250cm9sIGNvbnRyb2wgPSBudWxsOworCQorCS8qKgorCSAqIHRoZSBpbmRleCBvZiB0aGlzIENoYXJ0CisJICovCisJcHJpdmF0ZSBpbnQgY2hhcnRJbmRleCA9IDA7CisJCisKKwkvKioKKwkgKiBzb21lIGV4dHJhIGNvbG9ycworCSAqLworCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgQ29sb3JEZWZpbml0aW9uW10gY29sb3JEZWZhdWx0ID0geworCQkJCQkJCQkJCQkJCQkJQ29sb3JEZWZpbml0aW9uSW1wbC5SRUQoKSwgCisJCQkJCQkJCQkJCQkJCQlDb2xvckRlZmluaXRpb25JbXBsLkdSRUVOKCksIAorCQkJCQkJCQkJCQkJCQkJQ29sb3JEZWZpbml0aW9uSW1wbC5CTFVFKCksIAorCQkJCQkJCQkJCQkJCQkJQ29sb3JEZWZpbml0aW9uSW1wbC5CTEFDSygpLCAKKwkJCQkJCQkJCQkJCQkJCUNvbG9yRGVmaW5pdGlvbkltcGwuR1JFWSgpLAorCQkJCQkJCQkJCQkJCQkJQ29sb3JEZWZpbml0aW9uSW1wbC5DWUFOKCksCisJCQkJCQkJCQkJCQkJCQlDb2xvckRlZmluaXRpb25JbXBsLk9SQU5HRSgpIAorCQkJCQkJCQkJCQkJCQkJfTsKKwkvKioKKwkgKiB1c2VkIGlmIHdlIG5lZWQgdG8gb3ZlcmxheSB0cmFjZXMgaW4gZGlmZmVyZW50IGNvbG9ycworCSAqLworCXByaXZhdGUgYm9vbGVhbiBvdmVybGF5TW9kZSA9IGZhbHNlOworCQorCQorCisJLyoqCisJICogQSBjb250ZXh0IG1lbnUgZm9yIHRoaXMgdmlldworCSAqLworCU1lbnUgcG9wVXBNZW51ID0gbnVsbDsKKwkKKwkvKioKKwkgKiBzZXQgeSBheGlzIHRvIGEgbGluZWFyIHNjYWxlCisJICovCisJcHJpdmF0ZSBMaW5lYXJTY2FsZUFjdGlvbiBsaW5lYXJUaW1lQWN0aW9uOworCS8qKgorCSAqIHNldCB5IGF4aXMgdG8gYSBsb2cgc2NhbGUKKwkgKi8KKwlwcml2YXRlIExvZ1NjYWxlQWN0aW9uIGxvZ1RpbWVBY3Rpb247CisJcHJvdGVjdGVkIGJvb2xlYW4gdXNlTGluZWFyVGltZVNjYWxlID0gdHJ1ZTsKKwkKKworCS8qKgorCSAqIHNob3cgdGhlIGxlZ2VuZCAodHJ1ZSBieSBkZWZhdWx0KQorCSAqLworCXByaXZhdGUgTGVnZW5kVmlld0FjdGlvbiB2aWV3TGVnZW5kOworCisJLyoqCisJICogaGlkZSB0aGUgbGVnZW5kIAorCSAqLworCXByaXZhdGUgTGVnZW5kSGlkZUFjdGlvbiBoaWRlTGVnZW5kOworCXByb3RlY3RlZCBib29sZWFuIHNob3dMZWdlbmQgPSB0cnVlOworCisJcHJvdGVjdGVkIExlZ2VuZCBsZWdlbmQgPSBudWxsOworCQorCisJLyoqCisJICogdGhpcyBpcyBhIG1hcCBvZiB0aGUgRGF0YVNlcmllcyBvYmplY3QgKGtleWVkIGJ5IHByb3BlcnR5IG5hbWUpCisJICovCisJcHJvdGVjdGVkIGZpbmFsIE1hcDxTdHJpbmcsRGF0YVNlcmllcz4gZGF0YVNlcmllc01hcCA9IG5ldyBIYXNoTWFwPFN0cmluZyxEYXRhU2VyaWVzPigpOworCQorCS8qKgorCSAqIEtlZXAgdHJhY2sgb2Ygd2hpY2ggdGltZXNlcmllcyBhcmUgdmlzaWJsZQorCSAqLworCQorCXByb3RlY3RlZCBNYXA8U3RyaW5nLCBCb29sZWFuPnZpc2libGVNYXAgPSAgbmV3IEhhc2hNYXA8U3RyaW5nLEJvb2xlYW4+KCk7CisKKworCS8qKgorCSAqIFRoZXNlIGFyZSB0aGUgY3ljbGUgbnVtYmVycyB0aGF0IG1hdGNoIHRoZSByZWxhdGl2ZSB2YWx1ZXMgdGhhdCB3aWxsIGJlCisJICogcGxvdHRlZAorCSAqIAorCSAqIEBzZWUgI3JlbGF0aXZlVmFsdWVzCisJICovCisJcHJpdmF0ZSBmaW5hbCBMaXN0PEludGVnZXI+IGN5Y2xlTnVtYmVycyA9IG5ldyBBcnJheUxpc3Q8SW50ZWdlcj4oKTsKKworCS8qKgorCSAqIENoYXJ0IGdlbmVyYXRvciBpbnN0YW5jZSAocmVmZXJlbmNlIHRvIGEgc2luZ2xldG9uKQorCSAqLworCUdlbmVyYXRvciBncjsKKworCUF4aXMgeUF4aXNQcmltYXJ5OworCUF4aXMgeEF4aXNQcmltYXJ5OworCS8qKgorCSAqIHRoZSBtYXhZIHZhbHVlIGZvciBzY2FsaW5nCisJICovCisJZG91YmxlIG1heFkgPSAtMS4wOworCisJLyoqCisJICogTG9nIG9mIHplcm8gaXMgbmVnYXRpdmUgaW5maW5pdHkgc28gZm9yIGVhY2ggbG9jYXRpb24gd2Ugd2lsbCBjdXQgb2ZmIHRoZSBtaW5pbXVtIAorCSAqIGF0IHRoZSBtaW4gTk9OWkVSTyBZIHZhbHVlCisJICovCisJcHJpdmF0ZSBkb3VibGUgbWluWXNjYWxlID0gMS4wOworCQorCQorCS8qKgorCSAqIExhYmVsIGZvciBsaW5lIHNlcmllcyBMRUdFTkQKKwkgKi8KKwlwdWJsaWMgU3RyaW5nIE9yZGluYXRlX0xFR0VORCA9ICJZIjsKKwkKKwkvKioKKwkgKiBMYWJlbCBmb3IgbGluZSBzZXJpZXMgWSBheGlzIGxhYmVsCisJICoqLworCXB1YmxpYyBTdHJpbmcgT3JkaW5hdGVfQVhJUyA9ICJZIjsKKwkKKworCS8qKgorCSAqIExhYmVsIGZvciBsaW5lIHNlcmllcyBYIGF4aXMgbGFiZWwKKwkgKiovCisJcHVibGljIFN0cmluZyBYX0FYSVMgPSAiWCI7CisJCisJLyoqIAorCSAqIGN1c3RvbWl6YWJsZSBjb2xvciBkZWZpbml0aW9ucworCSAqLworCXByaXZhdGUgQ29sb3JEZWZpbml0aW9uIGZvcmVHcm91bmQgPSBDb2xvckRlZmluaXRpb25JbXBsLldISVRFKCk7CisJcHJpdmF0ZSBDb2xvckRlZmluaXRpb24gYmFja2dyb3VuZEdyb3VuZCA9IENvbG9yRGVmaW5pdGlvbkltcGwuQkxBQ0soKTsKKwlwcml2YXRlIENvbG9yRGVmaW5pdGlvbiBmcmFtZUNvbG9yID0gQ29sb3JEZWZpbml0aW9uSW1wbC5jcmVhdGUoMTgwLCAxODAsIDIwMCk7CisKKwlJbWFnZSBpbWdDaGFydCA9IG51bGw7CisJCisJLyoqCisJICogVGhpcyBDb25zdHJ1Y3RvciBpcyB1c2VkIHdoZW4gd2Ugd2FudCB0byBwbGFjZSB0aGUgdGltZSBzZXJpZXMgaW4gYSBjb250YWluZXIKKwkgKiB3aGljaCBpcyBhIHN1YiBjb21wb25lbnQgb2YgdGhlIGFjdHVhbCBBbmFseXNpc0NvbnRyb2wKKwkgKiBAcGFyYW0gYW5hbHlzaXNDb250cm9sIAorCSAqIAorCSAqIEBwYXJhbSBwYXJlbnQgIHRoZSBTV1QgcGFyZW50IG9mIHRoZSB7QGxpbmsgV2lkZ2V0fQorCSAqIEBwYXJhbSBvcmRpbmF0ZVN0cmluZyAKKwkgKiBAcGFyYW0geUF4aXNMYWJlbCAKKwkgKiBAcGFyYW0geEF4aXNMYWJlbAorCSAqIEBwYXJhbSBmb3JlZ3JvdW5kIAorCSAqIEBwYXJhbSBiYWNrZ3JvdW5kIAorCSAqIEBwYXJhbSBmcmFtZWNvbG9yIAorCSAqIEBwYXJhbSBjaGFydEluZGV4IHRoZSBpbmRleCBvZiB0aGlzIGNoYXJ0ICgwIGlmIG9ubHkgb25lKQorCSAqIEBwYXJhbSBvdmVybGF5TW9kZSB1c2VkIGlmIHdlIG5lZWQgdG8gb3ZlcmxheSB0cmFjZXMgaW4gZGlmZmVyZW50IGNvbG9ycworCSAqLworCXB1YmxpYyBFcnJvclRpbWVTZXJpZXNDYW52YXMoZmluYWwgQW5hbHlzaXNDb250cm9sIGFuYWx5c2lzQ29udHJvbCwgZmluYWwgQ29tcG9zaXRlIHBhcmVudCwgCisJCQlmaW5hbCBTdHJpbmcgb3JkaW5hdGVTdHJpbmcsIAorCQkJZmluYWwgU3RyaW5nIHlBeGlzTGFiZWwsIAorCQkJZmluYWwgU3RyaW5nIHhBeGlzTGFiZWwsCisJCQlmaW5hbCBTdHJpbmcgZmlyc3RQcm9wZXJ0eSwKKwkJCUNvbG9yRGVmaW5pdGlvbiBmb3JlZ3JvdW5kLAorCQkJQ29sb3JEZWZpbml0aW9uIGJhY2tncm91bmQsCisJCQlDb2xvckRlZmluaXRpb24gZnJhbWVjb2xvciwKKwkJCWludCBjaGFydEluZGV4LAorCQkJYm9vbGVhbiBvdmVybGF5TW9kZQkpIHsKKwkJc3VwZXIocGFyZW50LCBTV1QuRE9VQkxFX0JVRkZFUkVEIHwgU1dULkJPUkRFUik7CisJCU9yZGluYXRlX0xFR0VORCA9IG9yZGluYXRlU3RyaW5nOworCQlPcmRpbmF0ZV9BWElTID0geUF4aXNMYWJlbDsKKwkJWF9BWElTID0geEF4aXNMYWJlbDsKKwkJZm9yZUdyb3VuZCAJCQk9IGZvcmVncm91bmQ7CisJCWJhY2tncm91bmRHcm91bmQgCT0gYmFja2dyb3VuZDsKKwkJZnJhbWVDb2xvciAJCQk9IGZyYW1lY29sb3I7CisJCXRoaXMuY2hhcnRJbmRleCA9IGNoYXJ0SW5kZXg7CisJCXRoaXMub3ZlcmxheU1vZGUgPSBvdmVybGF5TW9kZTsKKwkJCisJCWdyID0gR2VuZXJhdG9yLmluc3RhbmNlKCk7CisKKwkJdHJ5IHsKKwkJCWlkciA9IFBsdWdpblNldHRpbmdzLmluc3RhbmNlKCkuZ2V0RGV2aWNlKCJkdi5TV1QiKTsgLy8kTk9OLU5MUy0xJAkJCQorCQl9IGNhdGNoIChmaW5hbCBDaGFydEV4Y2VwdGlvbiBwZXgpIHsKKwkJCUFjdGl2YXRvci5sb2dFcnJvcigiUHJvYmxlbSBpbml0aWFsaXppbmcgY2hhcnQiLCBwZXgpOyAvLyROT04tTkxTLTEkCisJCQlyZXR1cm47CisJCX0KKworCQljb250cm9sID0gYW5hbHlzaXNDb250cm9sOworCisJCQorCQljbSA9IGNyZWF0ZVNpbXBsZUxpbmVDaGFydChmaXJzdFByb3BlcnR5LCBkYXRhU2VyaWVzTWFwLCBjeWNsZU51bWJlcnMsIE1lc3NhZ2VzCisJCQkJLmdldFN0cmluZygiQ0MudGl0bGUiKSk7IC8vJE5PTi1OTFMtMSQKKwkJCisJCXJlc2V0RGF0YSgpOworCQlhZGRQYWludExpc3RlbmVyKG5ldyBQYWludExpc3RlbmVyKCkgeworCQkJcHVibGljIHZvaWQgcGFpbnRDb250cm9sKGZpbmFsIFBhaW50RXZlbnQgcGUpIHsKKworCQkJCWZpbmFsIENvbXBvc2l0ZSBzb3VyY2UgPSAoQ29tcG9zaXRlKSBwZS5nZXRTb3VyY2UoKTsKKwkJCQlmaW5hbCBvcmcuZWNsaXBzZS5zd3QuZ3JhcGhpY3MuUmVjdGFuZ2xlIGQgPSBzb3VyY2UKKwkJCQkJCS5nZXRDbGllbnRBcmVhKCk7CisKKwkJCQlpZihpbWdDaGFydCAhPSBudWxsKSBpbWdDaGFydC5kaXNwb3NlKCk7CisJCQkJaW1nQ2hhcnQgPSBuZXcgSW1hZ2Uoc291cmNlLmdldERpc3BsYXkoKSwgZCk7CisJCQkJCisJCQkJaWRyLnNldFByb3BlcnR5KElEZXZpY2VSZW5kZXJlci5HUkFQSElDU19DT05URVhULCBuZXcgR0MoCisJCQkJCQlpbWdDaGFydCkpOworCQkJCWZpbmFsIEJvdW5kcyBib3VuZHMgPSBCb3VuZHNJbXBsLmNyZWF0ZShkLngsIGQueSwgZC53aWR0aCwKKwkJCQkJCWQuaGVpZ2h0KTsKKwkJCQlib3VuZHMuc2NhbGUoNzJkIC8gaWRyLmdldERpc3BsYXlTZXJ2ZXIoKS5nZXREcGlSZXNvbHV0aW9uKCkpOworCQkJCS8vIEJPVU5EUyBNVVNUIEJFIFNQRUNJRklFRCBJTiBQT0lOVFMKKworCQkJCXRyeSB7CisJCQkJCWdyLnJlbmRlcihpZHIsIGdyLmJ1aWxkKGlkci5nZXREaXNwbGF5U2VydmVyKCksIGNtLCBib3VuZHMsCisJCQkJCQkJbnVsbCwgbnVsbCwgbnVsbCkpOworCQkJCQlwZS5nYy5kcmF3SW1hZ2UoaW1nQ2hhcnQsIGQueCwgZC55KTsKKwkJCQl9IGNhdGNoIChmaW5hbCBDaGFydEV4Y2VwdGlvbiBjZSkgeworCQkJCQlBY3RpdmF0b3IubG9nRXJyb3IoIlByb2JsZW0gcmVuZGVyaW5nIGNoYXJ0IiwgY2UpOyAvLyROT04tTkxTLTEkCisJCQkJfQorCQkJfSAvLyBwYWludENvbnRyb2wKKwkJfSAvLyBQYWludExpc3RlbmVyCisJCSk7CisJCQorCQkvL0NyZWF0ZSBhIGNvbnRleHQgbWVudSBmb3IgdGhlIGNhbnZhcworCQljcmVhdGVDb250ZXh0TWVudSh0aGlzKTsKKwkJCisKKwl9IC8vIEVycm9yVGltZVNlcmllc0NhbnZhcworCS8qKgorCSAqIENvbnN0cnVjdG9yLgorCSAqIAorCSAqIEBwYXJhbSBwYXJlbnQgIHRoZSBTV1QgcGFyZW50IG9mIHRoZSB7QGxpbmsgV2lkZ2V0fQorCSAqIEBwYXJhbSBvcmRpbmF0ZVN0cmluZyAKKwkgKiBAcGFyYW0geUF4aXNMYWJlbCAKKwkgKiBAcGFyYW0geEF4aXNMYWJlbAorCSAqIEBwYXJhbSBmb3JlZ3JvdW5kIAorCSAqIEBwYXJhbSBiYWNrZ3JvdW5kIAorCSAqIEBwYXJhbSBmcmFtZWNvbG9yIAorCSAqIEBwYXJhbSBjaGFydEluZGV4IHRoZSBpbmRleCBvZiB0aGlzIGNoYXJ0ICgwIGlmIG9ubHkgb25lKQorCSAqICAKKwkgKi8KKwlwdWJsaWMgRXJyb3JUaW1lU2VyaWVzQ2FudmFzKGZpbmFsIENvbXBvc2l0ZSBwYXJlbnQsIAorCQkJZmluYWwgU3RyaW5nIG9yZGluYXRlU3RyaW5nLCAKKwkJCWZpbmFsIFN0cmluZyB5QXhpc0xhYmVsLCAKKwkJCWZpbmFsIFN0cmluZyB4QXhpc0xhYmVsLAorCQkJZmluYWwgU3RyaW5nIGZpcnN0UHJvcGVydHksCisJCQlDb2xvckRlZmluaXRpb24gZm9yZWdyb3VuZCwKKwkJCUNvbG9yRGVmaW5pdGlvbiBiYWNrZ3JvdW5kLAorCQkJQ29sb3JEZWZpbml0aW9uIGZyYW1lY29sb3IsCisJCQlpbnQgY2hhcnRJbmRleCkgeworCQlzdXBlcihwYXJlbnQsIFNXVC5ET1VCTEVfQlVGRkVSRUQgfCBTV1QuQk9SREVSKTsKKwkJT3JkaW5hdGVfTEVHRU5EID0gb3JkaW5hdGVTdHJpbmc7CisJCU9yZGluYXRlX0FYSVMgPSB5QXhpc0xhYmVsOworCQlYX0FYSVMgPSB4QXhpc0xhYmVsOworCQlmb3JlR3JvdW5kIAkJCT0gZm9yZWdyb3VuZDsKKwkJYmFja2dyb3VuZEdyb3VuZCAJPSBiYWNrZ3JvdW5kOworCQlmcmFtZUNvbG9yIAkJCT0gZnJhbWVjb2xvcjsKKwkJdGhpcy5jaGFydEluZGV4ID0gY2hhcnRJbmRleDsKKwkJCisJCWdyID0gR2VuZXJhdG9yLmluc3RhbmNlKCk7CisKKwkJdHJ5IHsKKwkJCWlkciA9IFBsdWdpblNldHRpbmdzLmluc3RhbmNlKCkuZ2V0RGV2aWNlKCJkdi5TV1QiKTsgLy8kTk9OLU5MUy0xJAkJCQorCQl9IGNhdGNoIChmaW5hbCBDaGFydEV4Y2VwdGlvbiBwZXgpIHsKKwkJCUFjdGl2YXRvci5sb2dFcnJvcigiUHJvYmxlbSBpbml0aWFsaXppbmcgY2hhcnQiLCBwZXgpOyAvLyROT04tTkxTLTEkCisJCQlyZXR1cm47CisJCX0KKworCQljb250cm9sID0gKEFuYWx5c2lzQ29udHJvbCkgcGFyZW50OworCisJCQorCQljbSA9IGNyZWF0ZVNpbXBsZUxpbmVDaGFydChmaXJzdFByb3BlcnR5LCBkYXRhU2VyaWVzTWFwLCBjeWNsZU51bWJlcnMsIE1lc3NhZ2VzCisJCQkJLmdldFN0cmluZygiQ0MudGl0bGUiKSk7IC8vJE5PTi1OTFMtMSQKKwkJCisJCXJlc2V0RGF0YSgpOworCQkKKwkJYWRkUGFpbnRMaXN0ZW5lcihuZXcgUGFpbnRMaXN0ZW5lcigpIHsKKwkJCXB1YmxpYyB2b2lkIHBhaW50Q29udHJvbChmaW5hbCBQYWludEV2ZW50IHBlKSB7CisJCQkJCisJCQkJZmluYWwgQ29tcG9zaXRlIHNvdXJjZSA9IChDb21wb3NpdGUpIHBlLmdldFNvdXJjZSgpOworCQkJCWZpbmFsIG9yZy5lY2xpcHNlLnN3dC5ncmFwaGljcy5SZWN0YW5nbGUgZCA9IHNvdXJjZQorCQkJCQkJLmdldENsaWVudEFyZWEoKTsKKworCQkJCWlmKGltZ0NoYXJ0ICE9IG51bGwpIGltZ0NoYXJ0LmRpc3Bvc2UoKTsKKwkJCQlpbWdDaGFydCA9IG5ldyBJbWFnZShzb3VyY2UuZ2V0RGlzcGxheSgpLCBkKTsKKwkJCQlpZHIuc2V0UHJvcGVydHkoSURldmljZVJlbmRlcmVyLkdSQVBISUNTX0NPTlRFWFQsIG5ldyBHQygKKwkJCQkJCWltZ0NoYXJ0KSk7CisJCQkJZmluYWwgQm91bmRzIGJvdW5kcyA9IEJvdW5kc0ltcGwuY3JlYXRlKGQueCwgZC55LCBkLndpZHRoLAorCQkJCQkJZC5oZWlnaHQpOworCQkJCWJvdW5kcy5zY2FsZSg3MmQgLyBpZHIuZ2V0RGlzcGxheVNlcnZlcigpLmdldERwaVJlc29sdXRpb24oKSk7CisJCQkJLy8gQk9VTkRTIE1VU1QgQkUgU1BFQ0lGSUVEIElOIFBPSU5UUworCisJCQkJdHJ5IHsKKwkJCQkJZ3IucmVuZGVyKGlkciwgZ3IuYnVpbGQoaWRyLmdldERpc3BsYXlTZXJ2ZXIoKSwgY20sIGJvdW5kcywKKwkJCQkJCQludWxsLCBudWxsLCBudWxsKSk7CisJCQkJCXBlLmdjLmRyYXdJbWFnZShpbWdDaGFydCwgZC54LCBkLnkpOworCQkJCX0gY2F0Y2ggKGZpbmFsIENoYXJ0RXhjZXB0aW9uIGNlKSB7CisJCQkJCUFjdGl2YXRvci5sb2dFcnJvcigiUHJvYmxlbSByZW5kZXJpbmcgY2hhcnQiLCBjZSk7IC8vJE5PTi1OTFMtMSQKKwkJCQl9CisJCQl9IC8vIHBhaW50Q29udHJvbAorCQl9IC8vIFBhaW50TGlzdGVuZXIKKwkJKTsKKwkJCisJCS8vQ3JlYXRlIGEgY29udGV4dCBtZW51IGZvciB0aGUgY2FudmFzCisJCWNyZWF0ZUNvbnRleHRNZW51KHRoaXMpOworCQkKKworCX0gLy8gRXJyb3JUaW1lU2VyaWVzQ2FudmFzCisKKwkKKwkKKwkvKioKKwkgKiBUaGUgbWV0aG9kIHdoaWNoIGdldHMgdGhlIHtAbGluayBFcnJvclRpbWVTZXJpZXNDYW52YXN9JyByZXBvcnRzIGxpc3QsIGFuZAorCSAqIGRyYXdzIGl0IG9uIHRoZSB7QGxpbmsgRXJyb3JUaW1lU2VyaWVzQ2FudmFzfS4KKwkgKiBAcmV0dXJuIGludGVncmF0ZWREaWZmZXJlbmNlIGZvciBlYWNoIGxpbmUgc2VyaWVzCisJICogCisJICovCisJcHVibGljIHZvaWQgZHJhdygpIHsKKwkJCisJCS8vY2xlYXJEYXRhKCk7CisJCXJlc2V0RGF0YSgpOworCQl5QXhpc1ByaW1hcnkuZ2V0U2VyaWVzRGVmaW5pdGlvbnMoKS5jbGVhcigpOworCQkKKwkJLy8gZ2V0IHRoZSBudW1iZXIgb2YgbGluZXMgdG8gcGxvdCBmb3IgdGhpcyB0eXBlIG9mIGNoYXJ0CisJCWludCBtYXhMaW5lcyA9IGNvbnRyb2wuZ2V0TnVtUHJvcGVydGllcyhjaGFydEluZGV4KTsKKwkKKwkJLy8gYWRkIGFsbCB0aGUgcmVzdCBvZiB0aGUgbGluZSBzZXJpZXMgbm93CisJCWZvciAoaW50IGkgPSAwOyBpIDwgbWF4TGluZXM7IGkgKyspIHsKKwkJCVN0cmluZyBwcm9wZXJ0eSA9IGNvbnRyb2wuZ2V0UHJvcGVydHkoY2hhcnRJbmRleCxpKTsKKwkJCQorCQkJaWYoIWRhdGFTZXJpZXNNYXAuY29udGFpbnNLZXkocHJvcGVydHkpKSB7CisJCQkJLy8gbmV3IHByb3BlcnR5CisJCQkJRGF0YVNlcmllcyBzZXJpZXMgPSBuZXcgRGF0YVNlcmllcyhwcm9wZXJ0eSwgaSwgb3ZlcmxheU1vZGUpOworCQkJCWlmKHZpc2libGVNYXAuY29udGFpbnNLZXkocHJvcGVydHkpKQorCQkJCQkJc2VyaWVzLnNldFZpc2libGUodmlzaWJsZU1hcC5nZXQocHJvcGVydHkpKTsKKwkJCQllbHNlIHsKKwkJCQkJc2VyaWVzLnNldFZpc2libGUodHJ1ZSk7CisJCQkJCXZpc2libGVNYXAucHV0KHByb3BlcnR5LCB0cnVlKTsKKwkJCQl9CisJCQkJCisJCQkJZGF0YVNlcmllc01hcC5wdXQocHJvcGVydHksIHNlcmllcyk7CisJCQl9CisJCQlEYXRhU2VyaWVzIHNlcmllcyA9IGRhdGFTZXJpZXNNYXAuZ2V0KHByb3BlcnR5KTsKKwkJCXNlcmllcy5zaG93KCk7CisJCQkKKwkJfQorCQkKKwkJLy8gdXBkYXRlIHRoZSBjb250ZXh0IG1lbnUgd2l0aCB0aGUgbmV3IHByb3BlcnRpZXMgdG8gcGxvdAorCQkvL3VwZGF0ZUNvbnRleHRNZW51KHRoaXMpOworCQkKKwkJbWF4WSA9IC0xLjA7CisJCQorCQkJYm9vbGVhbiBzZXRDeWNsZXMgPSBmYWxzZTsKKwkJCS8vIEdldCB0aGUgdmFsdWVzIGZvciB0aGUgcHJvcGVydHkgdG8gYmUgcGxvdHRlZAorCQkJaW50IG1heFBvaW50cyA9IDA7CisJCQkKKwkJCWZvciAoaW50IGkgPSAwOyBpIDwgbWF4TGluZXM7IGkrKykgeworCQkJCVN0cmluZyBwcm9wZXJ0eSA9IGNvbnRyb2wuZ2V0UHJvcGVydHkoY2hhcnRJbmRleCxpKTsKKwkJCQlkb3VibGVbXSBkb3VibGVWYWx1ZXMgPSBjb250cm9sLmdldFZhbHVlcyhjaGFydEluZGV4LGkpOworCQkJCWlmKGRvdWJsZVZhbHVlcz09bnVsbCkgeworCQkJCQlkb3VibGVWYWx1ZXMgPSBuZXcgZG91YmxlWzBdOworCQkJCQkvL2RvdWJsZVZhbHVlc1swXSA9IDA7CisJCQkJfQorCQkJCURhdGFTZXJpZXMgc2VyaWVzID0gZGF0YVNlcmllc01hcC5nZXQocHJvcGVydHkpOworCQkJCQorCQkJCWlmKGRhdGFTZXJpZXNNYXAuZ2V0KHByb3BlcnR5KS5pc1Zpc2libGUoKSA9PSB0cnVlKSB7IAorCQkJCQlmb3IgKGludCBqID0gMDsgaiA8IGRvdWJsZVZhbHVlcy5sZW5ndGg7IGorKykgeworCQkJCQkJCisJCQkJCQkKKwkJCQkJCWlmKGRvdWJsZVZhbHVlc1tqXSA8PSBtaW5Zc2NhbGUpIHsKKwkJCQkJCQlpZihkb3VibGVWYWx1ZXNbal0gPiAwLjApIG1pbllzY2FsZSA9IGRvdWJsZVZhbHVlc1tqXTsKKwkJCQkJCX0KKwkJCQkJCQorCQkJCQkJaWYoZG91YmxlVmFsdWVzW2pdID49IG1heFkpIHsKKwkJCQkJCQltYXhZID0gZG91YmxlVmFsdWVzW2pdOworCQkJCQkJCWRvdWJsZSBsb2cgPSBNYXRoLmZsb29yKE1hdGgubG9nMTAobWF4WSkpOworCQkJCQkJCWRvdWJsZSBhZGp1c3RlZE1heCA9IChNYXRoLmNlaWwobWF4WS9NYXRoLnBvdygxMCwgbG9nKSkpKk1hdGgucG93KDEwLCBsb2cpOworCQkJCQkJICAgIGlmKGFkanVzdGVkTWF4IDw9IDEuMCkgYWRqdXN0ZWRNYXggPSAxLjA7CisJCQkJCQkgICAgLy9hZGp1c3RlZE1heCA9IG1heFkqMTAwLjA7CisJCQkJCQkgICAgLy9hZGp1c3RlZE1heCArPSAxLjA7CisJCQkJCQkgICAgLy9pbnQgbXggPSAoaW50KWFkanVzdGVkTWF4OworCQkJCQkJICAgIC8vYWRqdXN0ZWRNYXggPSAoKGRvdWJsZSlteCkvMTAwLjA7CisJCQkJCQkJaWYgKHVzZUxpbmVhclRpbWVTY2FsZSkgeworCQkJCQkJCQl5QXhpc1ByaW1hcnkuZ2V0U2NhbGUoKS5zZXRNYXgoTnVtYmVyRGF0YUVsZW1lbnRJbXBsLmNyZWF0ZShhZGp1c3RlZE1heCkpOworCQkJCQkJCQlkb3VibGUgc3RlcCA9IGFkanVzdGVkTWF4IC8gMTAuMDsKKwkJCQkJCQkJeUF4aXNQcmltYXJ5LmdldFNjYWxlKCkuc2V0U3RlcChzdGVwKTsKKwkJCQkJCQl9IGVsc2UgeworCQkJCQkJCQkvLyBrZWVwIDIgc2lnbmlmaWNhbnQgZmlndXJlcyBvbiBzY2FsZSBheGlzCisJCQkJCQkJCWRvdWJsZSB5bWF4ID0gTWF0aC5sb2coYWRqdXN0ZWRNYXgpOworCQkJCQkJCQlpZihhZGp1c3RlZE1heCA+IDEuMCkgeworCQkJCQkJCQkJeW1heCArPSAwLjQ5OTsKKwkJCQkJCQkJCWxvbmcgaW1heCA9IE1hdGgucm91bmQoeW1heCk7CisJCQkJCQkJCQl5bWF4ID0gaW1heDsKKwkJCQkJCQkJfQorCQkJCQkJCQl5QXhpc1ByaW1hcnkuZ2V0U2NhbGUoKS5zZXRNYXgoTnVtYmVyRGF0YUVsZW1lbnRJbXBsLmNyZWF0ZSh5bWF4KSk7CisJCQkJCQkJCWRvdWJsZSBzdGVwID0geW1heC8xMC4wOworCQkJCQkJCQl5QXhpc1ByaW1hcnkuZ2V0U2NhbGUoKS5zZXRTdGVwKHN0ZXApOworCQkJCQkJCX0KKwkJCQkJCQkKKwkJCQkJCQkKKwkJCQkJCX0KKwkJCQkJfQorCQkJCX0gLy8gaXMgdmlzaWJsZQorCQkJCQorCQkJCQkvLyBBbnkgdmFsdWVzPworCQkJCQlpZiAoZG91YmxlVmFsdWVzLmxlbmd0aCA+IDApIHsKKwkJCQkJCWlmIChtYXhQb2ludHMgPCBkb3VibGVWYWx1ZXMubGVuZ3RoKSB7CisJCQkJCQkJbWF4UG9pbnRzID0gZG91YmxlVmFsdWVzLmxlbmd0aDsKKwkJCQkJCX0KKwkJCQkJCQorCQkJCQkJZm9yIChpbnQgY3ljbGVOdW1iZXIgPSAwOyBjeWNsZU51bWJlciA8IGRvdWJsZVZhbHVlcy5sZW5ndGg7IGN5Y2xlTnVtYmVyKyspIHsKKwkJCQkJCQkKKwkJCQkJCQlEb3VibGUgdmFsdWU7CisJCQkJCQkJZG91YmxlIGRpc3BsYXlWYWx1ZSA9IGRvdWJsZVZhbHVlc1tjeWNsZU51bWJlcl07CisJCQkJCQkJaWYgKGRpc3BsYXlWYWx1ZSA8PSBtaW5Zc2NhbGUpIHsKKwkJCQkJCQkJLy8gTG9nKDAuMCkgaXMgbmVnYXRpdmUgaW5maW5pdHkgc28gZm9yIGRpc3BsYXkgcHVycG9zZXMgb25seQorCQkJCQkJCQkvLyB3ZSBzZXQgdGhlIG1pbmltdW0gYXhpcyB2YWx1ZSBhdCAwLjEvUE9QVUxBVElPTgorCQkJCQkJCQlkaXNwbGF5VmFsdWUgPSBtaW5Zc2NhbGU7CisJCQkJCQkJfQorCQkJCQkJCWlmICh1c2VMaW5lYXJUaW1lU2NhbGUpIHsKKwkJCQkJCQkJdmFsdWUgPSBuZXcgRG91YmxlKGRpc3BsYXlWYWx1ZSk7CisJCQkJCQkJfSBlbHNlIHsKKwkJCQkJCQkJdmFsdWUgPSBuZXcgRG91YmxlKE1hdGgubG9nKGRpc3BsYXlWYWx1ZSkpOworCQkJCQkJCX0KKwkJCQkJCQkKKworCQkJCQkJCXNlcmllcy5hZGRWYWx1ZSh2YWx1ZSk7CisJCQkJCQkJCisJCQkJCQkJLy8gb25seSBkbyBvbmNlIGZvciBmaXJzdCBsaW5lIHNlcmllcworCQkJCQkJCWlmICghc2V0Q3ljbGVzKSB7CisJCQkJCQkJCWN5Y2xlTnVtYmVycy5hZGQoSW50ZWdlci52YWx1ZU9mKGN5Y2xlTnVtYmVyKSk7CQorCQkJCQkJCQl9CisJCQkJCQl9IC8vIGZvciBjeWNsZU51bWJlcgorCQkJCQkJCisJCQkJCQlpZih4QXhpc1ByaW1hcnkuZ2V0U2VyaWVzRGVmaW5pdGlvbnMoKS5nZXQoMCkuZ2V0U2VyaWVzKCkuc2l6ZSgpICE9IGN5Y2xlTnVtYmVycy5zaXplKCkpIHsKKwkJCQkJCQkvLyBUaGUgbnVtYmVyIG9mIGRhdGEgcG9pbnRzIGhhdmUgY2hhbmdlZCwgY3JlYXRlIGEgbmV3IHNlcmllcyBmb3IgdGhlIHggYXhpcworCQkJCQkJCXhBeGlzUHJpbWFyeS5nZXRTZXJpZXNEZWZpbml0aW9ucygpLmNsZWFyKCk7CisJCQkJCQkJZmluYWwgU2VyaWVzIHhBeGlzU2VyaWVzID0gU2VyaWVzSW1wbC5jcmVhdGUoKTsKKworCQkJCQkJCWZpbmFsIE51bWJlckRhdGFTZXQgeFZhbHVlcyA9IE51bWJlckRhdGFTZXRJbXBsLmNyZWF0ZShjeWNsZU51bWJlcnMpOworCQkJCQkJCXhBeGlzU2VyaWVzLnNldERhdGFTZXQoeFZhbHVlcyk7CisJCQkJCQkJZmluYWwgU2VyaWVzRGVmaW5pdGlvbiBzZFggPSBTZXJpZXNEZWZpbml0aW9uSW1wbC5jcmVhdGUoKTsKKworCQkJCQkJCXhBeGlzUHJpbWFyeS5nZXRTZXJpZXNEZWZpbml0aW9ucygpLmFkZChzZFgpOworCQkJCQkJCXNkWC5nZXRTZXJpZXMoKS5hZGQoeEF4aXNTZXJpZXMpOworCQkJCQkJfQorCQkJCQkJCQorCQkJCQkJCisJCQkJCQlzZXRDeWNsZXMgPSB0cnVlOyAvLyB3ZSBzZXQgdGhlbSBvbmx5IG9uY2UKKwkJCQkJCQorCQkJCQl9IGVsc2UgeworCQkJCQkJLy9yZXNldERhdGEoKTsKKwkJCQkJfQorCQkJfSAvLyBmb3IgaSBwcm9wZXJ0aWVzCisKKworCQlpZiAoIXRoaXMuaXNEaXNwb3NlZCgpKSB7CisJCQlyZWRyYXcoKTsKKwkJfQorCQkKKwkJCisJCS8vCWNvbnRyb2wudXBkYXRlTWVzc2FnZShTY2VuYXJpb0FuYWx5c2lzU3VpdGUuV09SS0lOR19NU0cpOworCQkKKwl9IC8vIHBhaW50Q29udHJvbAorCisJLyoqCisJICogQHBhcmFtIGRhdGFTZXJpZXNNYXAKKwkgKiAgICAgICAgICAgIHRoZSB7QGxpbmsgTGlzdH0gdGhhdCB3aWxsIGNvbnRhaW4gdGhlIHJlbGF0aXZlIHZhbHVlcworCSAqICAgICAgICAgICAgKDAuMC0xLjApIHRvIHBsb3QKKwkgKiBAcGFyYW0gY3ljbGVOdW1iZXJzCisJICogICAgICAgICAgICB0aGUge0BsaW5rIExpc3R9IG9mIHNpbXVsYXRpb24gY3ljbGUgbnVtYmVycyB0aGF0IG1hdGNoIHRoZQorCSAqICAgICAgICAgICAgcmVsYXRpdmUgdmFsdWVzCisJICogQHBhcmFtIHNlcmllc0lkZW50aWZpZXIKKwkgKiAgICAgICAgICAgIHRoZSB0aXRsZSBvZiB0aGUgY2hhcnQKKwkgKiBAcmV0dXJuIGEgPGNvZGU+Q2hhcnQ8L2NvZGU+CisJICovCisJcHVibGljIGZpbmFsIENoYXJ0IGNyZWF0ZVNpbXBsZUxpbmVDaGFydCgKKwkJCWZpbmFsIFN0cmluZyBmaXJzdFByb3BlcnR5LAorCQkJZmluYWwgTWFwPFN0cmluZywgRGF0YVNlcmllcz4gZGF0YVNlcmllc01hcCwKKwkJCWZpbmFsIExpc3Q8SW50ZWdlcj4gY3ljbGVOdW1iZXJzLCBmaW5hbCBTdHJpbmcgc2VyaWVzSWRlbnRpZmllcikgeworCQkKKwkJZmluYWwgQ2hhcnRXaXRoQXhlcyByZXRWYWx1ZSA9IENoYXJ0V2l0aEF4ZXNJbXBsLmNyZWF0ZSgpOworCisJCQorCQkvLyBQbG90CisJCXJldFZhbHVlLmdldEJsb2NrKCkuc2V0QmFja2dyb3VuZChmcmFtZUNvbG9yKTsKKwkJZmluYWwgUGxvdCBwID0gcmV0VmFsdWUuZ2V0UGxvdCgpOworCQlwLmdldENsaWVudEFyZWEoKS5zZXRCYWNrZ3JvdW5kKGJhY2tncm91bmRHcm91bmQpOworCisJCS8vIFRpdGxlCisJCS8vIGN3YUxpbmUuZ2V0VGl0bGUoICkuZ2V0TGFiZWwoICkuZ2V0Q2FwdGlvbiggKS5zZXRWYWx1ZSggIkxpbmUgQ2hhcnQiCisJCS8vICk7Ly8kTk9OLU5MUy0xJAorCQlyZXRWYWx1ZS5nZXRUaXRsZSgpLnNldFZpc2libGUoZmFsc2UpOworCisJCS8vIExlZ2VuZAorCQlsZWdlbmQgPSByZXRWYWx1ZS5nZXRMZWdlbmQoKTsKKwkJZmluYWwgTGluZUF0dHJpYnV0ZXMgbGlhID0gbGVnZW5kLmdldE91dGxpbmUoKTsKKwkJbGVnZW5kLmdldFRleHQoKS5nZXRGb250KCkuc2V0U2l6ZSg4KTsKKwkJbGlhLnNldFN0eWxlKExpbmVTdHlsZS5TT0xJRF9MSVRFUkFMKTsKKwkJbGVnZW5kLmdldEluc2V0cygpLnNldCgxMCwgNSwgMCwgMCk7CisJCWxlZ2VuZC5nZXRPdXRsaW5lKCkuc2V0VmlzaWJsZShmYWxzZSk7CisJCWxlZ2VuZC5zZXRBbmNob3IoQW5jaG9yLk5PUlRIX0xJVEVSQUwpOworCQlsZWdlbmQuc2V0UG9zaXRpb24oUG9zaXRpb24uQkVMT1dfTElURVJBTCk7CisJCWxlZ2VuZC5nZXRUZXh0KCkuc2V0Q29sb3IoZm9yZUdyb3VuZCk7CisJCWxlZ2VuZC5nZXRPdXRsaW5lKCkuc2V0Q29sb3IoZm9yZUdyb3VuZCk7CisJCQorCQkvLyBjd2FMaW5lLmdldExlZ2VuZCggKS5nZXRUZXh0KCkuZ2V0Rm9udCgpLnNldFNpemUoMTYpOzsKKwkJLy8gY3dhTGluZS5nZXRMZWdlbmQoICkuc2V0VmlzaWJsZSggdHJ1ZSApOworCisJCS8vIC8vLy8vLy8vLworCQkvLyBYLUF4aXMKKwkJeEF4aXNQcmltYXJ5ID0gcmV0VmFsdWUuZ2V0UHJpbWFyeUJhc2VBeGVzKClbMF07CisJCXhBeGlzUHJpbWFyeS5zZXRUeXBlKEF4aXNUeXBlLlRFWFRfTElURVJBTCk7CisJCXhBeGlzUHJpbWFyeS5nZXRNYWpvckdyaWQoKS5zZXRUaWNrU3R5bGUoVGlja1N0eWxlLkJFTE9XX0xJVEVSQUwpOworCQl4QXhpc1ByaW1hcnkuZ2V0T3JpZ2luKCkuc2V0VHlwZShJbnRlcnNlY3Rpb25UeXBlLlZBTFVFX0xJVEVSQUwpOworCQl4QXhpc1ByaW1hcnkuZ2V0VGl0bGUoKS5zZXRWaXNpYmxlKGZhbHNlKTsKKwkJeEF4aXNQcmltYXJ5LmdldFRpdGxlKCkuZ2V0Q2FwdGlvbigpLmdldEZvbnQoKS5zZXRTaXplKDkpOworCQl4QXhpc1ByaW1hcnkuZ2V0VGl0bGUoKS5nZXRDYXB0aW9uKCkuc2V0Q29sb3IoZm9yZUdyb3VuZCk7CisJCXhBeGlzUHJpbWFyeS5nZXRMYWJlbCgpLmdldENhcHRpb24oKS5zZXRDb2xvcihmb3JlR3JvdW5kKTsKKworCQlmaW5hbCBTZXJpZXMgeEF4aXNTZXJpZXMgPSBTZXJpZXNJbXBsLmNyZWF0ZSgpOworCisJCS8vIG5ldyBjb2xvcnMKKwkJeEF4aXNTZXJpZXMuZ2V0TGFiZWwoKS5nZXRDYXB0aW9uKCkuc2V0Q29sb3IoZm9yZUdyb3VuZCk7CisJCXhBeGlzU2VyaWVzLmdldExhYmVsKCkuZ2V0T3V0bGluZSgpLnNldENvbG9yKGZvcmVHcm91bmQpOworCQkvLwkKKworCQlmaW5hbCBOdW1iZXJEYXRhU2V0IHhWYWx1ZXMgPSBOdW1iZXJEYXRhU2V0SW1wbC5jcmVhdGUoY3ljbGVOdW1iZXJzKTsKKwkJeEF4aXNTZXJpZXMuc2V0RGF0YVNldCh4VmFsdWVzKTsKKwkJZmluYWwgU2VyaWVzRGVmaW5pdGlvbiBzZFggPSBTZXJpZXNEZWZpbml0aW9uSW1wbC5jcmVhdGUoKTsKKworCQl4QXhpc1ByaW1hcnkuZ2V0U2VyaWVzRGVmaW5pdGlvbnMoKS5hZGQoc2RYKTsKKwkJc2RYLmdldFNlcmllcygpLmFkZCh4QXhpc1Nlcmllcyk7CisKKwkJLy8gLy8vLy8vLy8KKwkJLy8gWS1BeGlzCisJCXlBeGlzUHJpbWFyeSA9IHJldFZhbHVlLmdldFByaW1hcnlPcnRob2dvbmFsQXhpcyh4QXhpc1ByaW1hcnkpOworCQl5QXhpc1ByaW1hcnkuZ2V0TWFqb3JHcmlkKCkuc2V0VGlja1N0eWxlKFRpY2tTdHlsZS5MRUZUX0xJVEVSQUwpOworCisJCS8vIE51bWJlckRhdGFTZXRbXSBvcnRob1ZhbHVlcyA9IG5ldyBOdW1iZXJEYXRhU2V0W01BWF9MSU5FU107CisJCS8vIFNlcmllc0RlZmluaXRpb25bXSBzZFkgPSBuZXcgU2VyaWVzRGVmaW5pdGlvbltNQVhfTElORVNdOworCisJCS8vIGVuZCBZLVNlcmllcworCisJCXhBeGlzUHJpbWFyeS5nZXRTY2FsZSgpLnNldE1pbihOdW1iZXJEYXRhRWxlbWVudEltcGwuY3JlYXRlKDAuMCkpOworCQkvLyB4QXhpc1ByaW1hcnkuZ2V0U2NhbGUoICkuc2V0TWF4KCBOdW1iZXJEYXRhRWxlbWVudEltcGwuY3JlYXRlKCAxMC4wICkKKwkJLy8gKTsKKwkJLy8geEF4aXNQcmltYXJ5LmdldFNjYWxlKCApLnNldFN0ZXAoIDEgKTsKKwkJeEF4aXNQcmltYXJ5LmdldExhYmVsKCkuZ2V0Q2FwdGlvbigpLmdldEZvbnQoKS5zZXRTaXplKDkpOworCQl4QXhpc1ByaW1hcnkuZ2V0TGFiZWwoKS5nZXRDYXB0aW9uKCkuc2V0Q29sb3IoZm9yZUdyb3VuZCk7CisJCXhBeGlzUHJpbWFyeS5nZXRUaXRsZSgpLnNldFZpc2libGUodHJ1ZSk7CisJCXhBeGlzUHJpbWFyeS5nZXRUaXRsZSgpLmdldENhcHRpb24oKS5zZXRWYWx1ZShYX0FYSVMpOworCisJCXlBeGlzUHJpbWFyeS5nZXRTY2FsZSgpLnNldE1pbihOdW1iZXJEYXRhRWxlbWVudEltcGwuY3JlYXRlKDAuMCkpOworCQl5QXhpc1ByaW1hcnkuZ2V0U2NhbGUoKS5zZXRNYXgoTnVtYmVyRGF0YUVsZW1lbnRJbXBsLmNyZWF0ZSgxLjApKTsKKwkJeUF4aXNQcmltYXJ5LmdldFNjYWxlKCkuc2V0U3RlcCgwLjI1KTsKKwkJeUF4aXNQcmltYXJ5LmdldExhYmVsKCkuZ2V0Q2FwdGlvbigpLmdldEZvbnQoKS5zZXRTaXplKDkpOworCQl5QXhpc1ByaW1hcnkuZ2V0TGFiZWwoKS5nZXRDYXB0aW9uKCkuc2V0Q29sb3IoZm9yZUdyb3VuZCk7CisJCXlBeGlzUHJpbWFyeS5nZXRUaXRsZSggKS5nZXRDYXB0aW9uKCApLnNldFZhbHVlKCBPcmRpbmF0ZV9BWElTICk7CisJCXlBeGlzUHJpbWFyeS5nZXRUaXRsZSggKS5zZXRWaXNpYmxlKHRydWUpOworCQkvLyB5QXhpc1ByaW1hcnkuZ2V0TWFqb3JHcmlkKCkuZ2V0TGluZUF0dHJpYnV0ZXMoKS5zZXRDb2xvcihmb3JlR3JvdW5kKTsKKwkJCisJCS8vIGZvciBub3cgZ2V0IHJlYWR5IHRvIGNyZWF0ZSBvbmx5IG9uZSBsaW5lIC0gd2UgaGF2ZSBubyBkYXRhIHlldC4KKwkJLy8gd2Ugd2lsbCBhZGQgbW9yZSBsaW5lcyBhcyB3ZSBuZWVkIHRoZW0KKwkJLy8gaGFuZGxlIG51bGwKKwkJaWYoIWRhdGFTZXJpZXNNYXAuY29udGFpbnNLZXkoZmlyc3RQcm9wZXJ0eSkpIHsKKwkJCURhdGFTZXJpZXMgc2VyaWVzID0gbmV3IERhdGFTZXJpZXMoTWVzc2FnZXMuZ2V0U3RyaW5nKCJBVVRPLlRJVExFMiIpLCAwLCBvdmVybGF5TW9kZSk7CisJCQlkYXRhU2VyaWVzTWFwLnB1dChmaXJzdFByb3BlcnR5LCBzZXJpZXMpOworCQl9CisKKwkJcmV0dXJuIHJldFZhbHVlOworCX0gLy8gY3JlYXRlU2ltcGxlTGluZUNoYXJ0CisKKwkKKwkvKioKKwkgKiBDcmVhdGUgdGhlIHZpZXcncyBjb250ZXh0IG1lbnUgYW5kIGFkZCB0aGUgYWN0aW9uIGhhbmRsZXJzIHRvIGl0LgorCSAqLworCXByb3RlY3RlZCB2b2lkIGNyZWF0ZUNvbnRleHRNZW51KGZpbmFsIENvbXBvc2l0ZSBwYXJlbnQpIHsKKworCQkvLyBJbml0IGEgQ29udGV4dCBNZW51IE1hbmFnZXIKKwkJZmluYWwgTWVudU1hbmFnZXIgY29udGV4dE1lbnVNYW5hZ2VyID0gbmV3IE1lbnVNYW5hZ2VyKCk7CisKKwkJLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKwkJbGluZWFyVGltZUFjdGlvbiA9IG5ldyBMaW5lYXJTY2FsZUFjdGlvbigpOworCQlsb2dUaW1lQWN0aW9uID0gbmV3IExvZ1NjYWxlQWN0aW9uKCk7CisJCWNvbnRleHRNZW51TWFuYWdlci5hZGQobGluZWFyVGltZUFjdGlvbik7CisJCWNvbnRleHRNZW51TWFuYWdlci5hZGQobG9nVGltZUFjdGlvbik7CisKKworCQkKKwkJLy8gUGxhY2UgSG9sZGVyIGZvciBNZW51IEFkZGl0aW9ucworCQljb250ZXh0TWVudU1hbmFnZXIuYWRkKG5ldyBTZXBhcmF0b3IoCisJCQkJSVdvcmtiZW5jaEFjdGlvbkNvbnN0YW50cy5NQl9BRERJVElPTlMpKTsKKworCQkvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwkJCisJCXZpZXdMZWdlbmQgPSBuZXcgTGVnZW5kVmlld0FjdGlvbigpOworCQloaWRlTGVnZW5kID0gbmV3IExlZ2VuZEhpZGVBY3Rpb24oKTsKKwkJY29udGV4dE1lbnVNYW5hZ2VyLmFkZCh2aWV3TGVnZW5kKTsKKwkJY29udGV4dE1lbnVNYW5hZ2VyLmFkZChoaWRlTGVnZW5kKTsKKwkJCisJCS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCQkKKwkJCisJCS8vIFBsYWNlIEhvbGRlciBmb3IgTWVudSBBZGRpdGlvbnMKKwkJY29udGV4dE1lbnVNYW5hZ2VyLmFkZChuZXcgU2VwYXJhdG9yKAorCQkJCUlXb3JrYmVuY2hBY3Rpb25Db25zdGFudHMuTUJfQURESVRJT05TKSk7CisKKwkJcG9wVXBNZW51ID0gY29udGV4dE1lbnVNYW5hZ2VyLmNyZWF0ZUNvbnRleHRNZW51KHBhcmVudCk7CisKKwkJLy8gU2V0IHRoZSBjb250ZXh0IG1lbnUgZm9yIHRoZSB2aWV3ZXIKKwkJcGFyZW50LnNldE1lbnUocG9wVXBNZW51KTsKKworCX0gLy8gY3JlYXRlQ29udGV4dE1lbnUKKwkKKwkvKioKKwkgKiBVcGRhdGUgdGhlIHZpZXcncyBjb250ZXh0IG1lbnUgYW5kIGFkZCB0aGUgYWN0aW9uIGhhbmRsZXJzIHRvIGl0LgorCSAqLworCXByaXZhdGUgdm9pZCB1cGRhdGVDb250ZXh0TWVudShmaW5hbCBDb21wb3NpdGUgcGFyZW50KSB7CisKKwkJcG9wVXBNZW51LmRpc3Bvc2UoKTsKKworCQkvLyBJbml0IGEgQ29udGV4dCBNZW51IE1hbmFnZXIKKwkJZmluYWwgTWVudU1hbmFnZXIgY29udGV4dE1lbnVNYW5hZ2VyID0gbmV3IE1lbnVNYW5hZ2VyKCk7CisKKwkJLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKwkJbGluZWFyVGltZUFjdGlvbiA9IG5ldyBMaW5lYXJTY2FsZUFjdGlvbigpOworCQlsb2dUaW1lQWN0aW9uID0gbmV3IExvZ1NjYWxlQWN0aW9uKCk7CisJCWNvbnRleHRNZW51TWFuYWdlci5hZGQobGluZWFyVGltZUFjdGlvbik7CisJCWNvbnRleHRNZW51TWFuYWdlci5hZGQobG9nVGltZUFjdGlvbik7CisJCQorCQkvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworCisJCS8vIFBsYWNlIEhvbGRlciBmb3IgTWVudSBBZGRpdGlvbnMKKwkJY29udGV4dE1lbnVNYW5hZ2VyLmFkZChuZXcgU2VwYXJhdG9yKAorCQkJCUlXb3JrYmVuY2hBY3Rpb25Db25zdGFudHMuTUJfQURESVRJT05TKSk7CisKKwkJLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJCQorCQl2aWV3TGVnZW5kID0gbmV3IExlZ2VuZFZpZXdBY3Rpb24oKTsKKwkJaGlkZUxlZ2VuZCA9IG5ldyBMZWdlbmRIaWRlQWN0aW9uKCk7CisJCWNvbnRleHRNZW51TWFuYWdlci5hZGQodmlld0xlZ2VuZCk7CisJCWNvbnRleHRNZW51TWFuYWdlci5hZGQoaGlkZUxlZ2VuZCk7CisJCQorCQkvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwkJCisJCQorCQkvLyBQbGFjZSBIb2xkZXIgZm9yIE1lbnUgQWRkaXRpb25zCisJCWNvbnRleHRNZW51TWFuYWdlci5hZGQobmV3IFNlcGFyYXRvcigKKwkJCQlJV29ya2JlbmNoQWN0aW9uQ29uc3RhbnRzLk1CX0FERElUSU9OUykpOworCisJCQorCQkvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwkJLy8gYWRkIHRoZSBkaXNwbGF5YWJsZSBwcm9wZXJ0aWVzCisJCWZvciAoaW50IGkgPSAwOyBpIDwgY29udHJvbC5nZXROdW1Qcm9wZXJ0aWVzKGNoYXJ0SW5kZXgpOyBpICsrKSB7CisJCQkKKwkJCVN0cmluZyBuZXh0UHJvcCA9IGNvbnRyb2wuZ2V0UHJvcGVydHkoY2hhcnRJbmRleCxpKTsKKwkJCURhdGFTZXJpZXMgc2VyaWVzID0gZGF0YVNlcmllc01hcC5nZXQobmV4dFByb3ApOworCQkJRGlzcGxheWFibGVQcm9wZXJ0eSBwcm9wZXJ0eSA9IG5ldyBEaXNwbGF5YWJsZVByb3BlcnR5KG5leHRQcm9wLCBzZXJpZXMuaXNWaXNpYmxlKCkpOworCQkJY29udGV4dE1lbnVNYW5hZ2VyLmFkZChwcm9wZXJ0eSk7CisJCX0KKworCQkvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworCQkvLyBQbGFjZSBIb2xkZXIgZm9yIE1lbnUgQWRkaXRpb25zCisJCWNvbnRleHRNZW51TWFuYWdlci5hZGQobmV3IFNlcGFyYXRvcigKKwkJCQlJV29ya2JlbmNoQWN0aW9uQ29uc3RhbnRzLk1CX0FERElUSU9OUykpOworCisJCS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisJCWZpbmFsIE1lbnUgcG9wVXBNZW51ID0gY29udGV4dE1lbnVNYW5hZ2VyLmNyZWF0ZUNvbnRleHRNZW51KHBhcmVudCk7CisKKwkJLy8gU2V0IHRoZSBjb250ZXh0IG1lbnUgZm9yIHRoZSB2aWV3ZXIKKwkJcGFyZW50LnNldE1lbnUocG9wVXBNZW51KTsKKworCisJfSAvLyB1cGRhdGVDb250ZXh0TWVudQorCisKKwkKKwkvKioKKwkgKiBTZXRzIHRoZSBjb2xvcnMgZm9yIGEgbiBhcnJheSBvZiBMaW5lU2VyaWVzIGdpdmVuIHRoZSBwcm9wZXJ0eSB0byBQbG90CisJICogZm9yIGVhY2guIFRyeSB0byBzZXQgY29sb3IgZnJvbSB0aGUgcHJlZmVyZW5jZXMgKGlmIHNwZWNpZmllZCBmb3IgdGhhdAorCSAqIHByb3BlcnR5KSBvdGhlcndpc2Ugc2V0cyBsaW5lIGNvbG9yIHRvIGJsdWUuCisJICogCisJICogQHBhcmFtIHByb3BlcnRpZXNUb1Bsb3QKKwkgKiBAcGFyYW0gbHNMaXN0CisJICovCisJcHVibGljIHN0YXRpYyB2b2lkIHNldENvbG9yRGVmcygKKwkJCWZpbmFsIExpc3Q8U3RyaW5nPiBwcm9wZXJ0aWVzVG9QbG90LAorCQkJZmluYWwgTGlzdDxMaW5lU2VyaWVzPiBsc0xpc3QpIHsKKwkJLy8gdGhlIGRlZmF1bHQgbGluZSBjb2xvcgorCisJCS8vIGlmIHBvc3NpYmxlIGdldCBjb2xvciBmcm9tIHByZWZlcmVuY2VzCisJCWZpbmFsIE1hcDxTdHJpbmcsIENvbG9yPiBjb2xvck1hcCA9IFZpc3VhbGl6YXRpb25QcmVmZXJlbmNlUGFnZQorCQkJCS5nZXRDb2xvck1hcHBpbmcoKTsKKwkJZm9yIChpbnQgaSA9IDA7IGkgPCBsc0xpc3Quc2l6ZSgpOyBpKyspIHsKKwkJCUNvbG9yRGVmaW5pdGlvbiBjb2xvciA9IENvbG9yRGVmaW5pdGlvbkltcGwuQkxVRSgpOworCisJCQlpZiAoKHByb3BlcnRpZXNUb1Bsb3QgIT0gbnVsbCkgJiYgKHByb3BlcnRpZXNUb1Bsb3Quc2l6ZSgpID4gaSkpIHsKKwkJCQlmaW5hbCBTdHJpbmcga2V5ID0gcHJvcGVydGllc1RvUGxvdC5nZXQoaSk7CisJCQkJLy8gbG9vayBvciB0aGUgcHJlZmVyZW5jZSBjb2xvciBieSBuYW1lCisJCQkJaWYgKGNvbG9yTWFwLmNvbnRhaW5zS2V5KGtleSkpIHsKKwkJCQkJZmluYWwgQ29sb3IgYyA9IGNvbG9yTWFwLmdldChrZXkpOworCQkJCQljb2xvciA9IENvbG9yRGVmaW5pdGlvbkltcGwuY3JlYXRlKGMuZ2V0UmVkKCksCisJCQkJCQkJYy5nZXRHcmVlbigpLCBjLmdldEJsdWUoKSk7CisJCQkJfQorCQkJCWxzTGlzdC5nZXQoaSkuc2V0U2VyaWVzSWRlbnRpZmllcihrZXkpOworCQkJCWxzTGlzdC5nZXQoaSkuZ2V0TGluZUF0dHJpYnV0ZXMoKS5zZXRDb2xvcihjb2xvcik7CisJCQkJbHNMaXN0LmdldChpKS5nZXRMaW5lQXR0cmlidXRlcygpLnNldFRoaWNrbmVzcyg1KTsKKwkJCX0gZWxzZSB7CisKKwkJCQlpZiAobHNMaXN0LmdldChpKSAhPSBudWxsKSB7CisJCQkJCWxzTGlzdC5nZXQoaSkuc2V0U2VyaWVzSWRlbnRpZmllcigiICIpOworCQkJCQlsc0xpc3QuZ2V0KGkpLmdldExpbmVBdHRyaWJ1dGVzKCkuc2V0Q29sb3IoY29sb3IpOworCQkJCQlsc0xpc3QuZ2V0KGkpLmdldExpbmVBdHRyaWJ1dGVzKCkuc2V0VGhpY2tuZXNzKDUpOworCQkJCX0KKwkJCX0KKwkJfQorCQlyZXR1cm47CisJfS8vIGdldENvbG9yRGVmCisKKworCQorCisJLyoqCisJICogRGlzcG9zZXMgdGhlIENvbG9yIG9iamVjdHMKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBkaXNwb3NlKCkgeworCQlzdXBlci5kaXNwb3NlKCk7CisJfQorCisJLyoqCisJICogcmVzZXQKKwkgKi8KKwlwdWJsaWMgdm9pZCByZXNldCgpIHsKKwkJcmVzZXREYXRhKCk7CisJCXJlZHJhdygpOworCX0KKworCXByb3RlY3RlZCB2b2lkIHJlc2V0RGF0YSgpIHsKKwkJY2xlYXJEYXRhKCk7CisJCisJCWN5Y2xlTnVtYmVycy5hZGQoSW50ZWdlci52YWx1ZU9mKDApKTsKKwl9CisKKwlwcm90ZWN0ZWQgdm9pZCBjbGVhckRhdGEoKSB7CisJCQorCQlkYXRhU2VyaWVzTWFwLmNsZWFyKCk7CisJCWN5Y2xlTnVtYmVycy5jbGVhcigpOworCX0KKworCQorCS8qKgorCSAqIHRvZ2dsZSB0aGUgc2NhbGUgZnJvbSBsb2dhcml0aG1pYyB0byBsaW5lYXIKKwkgKi8KKwl2b2lkIHRvZ2dsZUF4aXNTY2FsZSgpIHsKKwkJaWYgKHVzZUxpbmVhclRpbWVTY2FsZSkgeyAvL1N3aXRjaCB0byBsb2dhcml0aG1pYyBzY2FsZQorCQkJbG9nVGltZUFjdGlvbi5zZXRDaGVja2VkKHRydWUpOworCQkJbGluZWFyVGltZUFjdGlvbi5zZXRDaGVja2VkKGZhbHNlKTsKKwkJCS8vSnVzdCB1c2luZyB0aGUgZm9sbG93aW5nIGF4aXMgdHlwZSwgdG8gbW92ZSB0byBsb2cgc2NhbGUsIGRpZG4ndCB3b3JrCisJCQkvL3lBeGlzUHJpbWFyeS5zZXRUeXBlKEF4aXNUeXBlLkxPR0FSSVRITUlDX0xJVEVSQUwpOworCQkJeUF4aXNQcmltYXJ5LmdldFNjYWxlKCkuc2V0TWluKG51bGwpOworCQkJeUF4aXNQcmltYXJ5LmdldFNjYWxlKCkuc2V0TWF4KG51bGwpOworCQkJeUF4aXNQcmltYXJ5LmdldFNjYWxlKCkudW5zZXRTdGVwKCk7CisJCQl5QXhpc1ByaW1hcnkuZ2V0U2NhbGUoKS51bnNldFN0ZXBOdW1iZXIoKTsKKwkJfQorCQllbHNlIHsgLy9Td2l0Y2ggdG8gbGluZWFyIHNjYWxlCisJCQlsb2dUaW1lQWN0aW9uLnNldENoZWNrZWQoZmFsc2UpOworCQkJbGluZWFyVGltZUFjdGlvbi5zZXRDaGVja2VkKHRydWUpOworCQkJLy95QXhpc1ByaW1hcnkuc2V0VHlwZShBeGlzVHlwZS5MSU5FQVJfTElURVJBTCk7CisJCQl5QXhpc1ByaW1hcnkuZ2V0U2NhbGUoKS5zZXRNaW4oTnVtYmVyRGF0YUVsZW1lbnRJbXBsLmNyZWF0ZSgwLjApKTsKKwkJCXlBeGlzUHJpbWFyeS5nZXRTY2FsZSgpLnNldE1heChOdW1iZXJEYXRhRWxlbWVudEltcGwuY3JlYXRlKDEuMCkpOworCQkJeUF4aXNQcmltYXJ5LmdldFNjYWxlKCkuc2V0U3RlcCgwLjI1KTsKKwkJfQorCQl1c2VMaW5lYXJUaW1lU2NhbGUgPSAhdXNlTGluZWFyVGltZVNjYWxlOworCQlkcmF3KCk7CisJfQorCQorCisJLyoqCisJICogdG9nZ2xlIHRoZSBzY2FsZSBmcm9tIGxvZ2FyaXRobWljIHRvIGxpbmVhcgorCSAqLworCXZvaWQgdG9nZ2xlTGVnZW5kKCkgeworCQlpZiAoc2hvd0xlZ2VuZCkgeyAvL1N3aXRjaCB0byBoaWRlCisJCQl2aWV3TGVnZW5kLnNldENoZWNrZWQoZmFsc2UpOworCQkJaGlkZUxlZ2VuZC5zZXRDaGVja2VkKHRydWUpOworCQkJbGVnZW5kLnNldFZpc2libGUoZmFsc2UpOworCQl9CisJCWVsc2UgeyAvL1N3aXRjaCB0byB2aWV3CisJCQl2aWV3TGVnZW5kLnNldENoZWNrZWQodHJ1ZSk7CisJCQloaWRlTGVnZW5kLnNldENoZWNrZWQoZmFsc2UpOworCQkJbGVnZW5kLnNldFZpc2libGUodHJ1ZSk7CisJCX0KKwkJc2hvd0xlZ2VuZCA9ICFzaG93TGVnZW5kOworCQlkcmF3KCk7CisJfQorCisKKwkvKioKKwkgKiBBY3Rpb24gdG8gc2hvdyB0aGUgbGVnZW5kCisJICovCisJcHJvdGVjdGVkIGNsYXNzIExlZ2VuZFZpZXdBY3Rpb24gZXh0ZW5kcyBBY3Rpb24geworCQlwdWJsaWMgTGVnZW5kVmlld0FjdGlvbigpCisJCXsKKwkJCXN1cGVyKE1lc3NhZ2VzLmdldFN0cmluZygiQ29udGV4dE1lbnUuU2hvd0xlZ2VuZCIpLCBJQWN0aW9uLkFTX0NIRUNLX0JPWCk7CisJCQlzZXRDaGVja2VkKHNob3dMZWdlbmQpOworCQl9CisKKwkJLyoqCisJCSAqIEBzZWUgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLkFjdGlvbiNnZXRUZXh0KCkKKwkJICovCisJCUBPdmVycmlkZQorCQlwdWJsaWMgU3RyaW5nIGdldFRleHQoKSB7CisJCQlyZXR1cm4gTWVzc2FnZXMuZ2V0U3RyaW5nKCJDb250ZXh0TWVudS5TaG93TGVnZW5kIik7CisJCX0KKworCQkvKioKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uQWN0aW9uI3J1bigpCisJCSAqLworCQlAT3ZlcnJpZGUKKwkJcHVibGljIHZvaWQgcnVuKCkgeworCQkJaWYgKHNob3dMZWdlbmQpIHsKKwkJCQlzZXRDaGVja2VkKHRydWUpOworCQkJCS8vTm90aGluZyB0byBkby4gSXQncyBhbHJlYWR5IGxpbmVhci10aW1lLgorCQkJfQorCQkJZWxzZSB7CisJCQkJdG9nZ2xlTGVnZW5kKCk7CisJCQl9CisJCQlkcmF3KCk7CisJCX0KKwl9IC8vTGVnZW5kVmlld0FjdGlvbgorCQorCS8qKgorCSAqIEFjdGlvbiB0byBoaWRlIHRoZSBsZWdlbmQKKwkgKi8KKwljbGFzcyBMZWdlbmRIaWRlQWN0aW9uIGV4dGVuZHMgQWN0aW9uIAl7CisJCXB1YmxpYyBMZWdlbmRIaWRlQWN0aW9uKCkKKwkJeworCQkJc3VwZXIoTWVzc2FnZXMuZ2V0U3RyaW5nKCJDb250ZXh0TWVudS5IaWRlTGVnZW5kIiksIElBY3Rpb24uQVNfQ0hFQ0tfQk9YKTsKKwkJCXNldENoZWNrZWQoIXNob3dMZWdlbmQpOworCQl9CisKKwkJLyoqCisJCSAqIEBzZWUgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLkFjdGlvbiNnZXRUZXh0KCkKKwkJICovCisJCUBPdmVycmlkZQorCQlwdWJsaWMgU3RyaW5nIGdldFRleHQoKSB7CisJCQlyZXR1cm4gTWVzc2FnZXMuZ2V0U3RyaW5nKCJDb250ZXh0TWVudS5IaWRlTGVnZW5kIik7CisJCX0KKworCQkvKioKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uQWN0aW9uI3J1bigpCisJCSAqLworCQlAT3ZlcnJpZGUKKwkJcHVibGljIHZvaWQgcnVuKCkgeworCQkJaWYgKCFzaG93TGVnZW5kKSB7CisJCQkJc2V0Q2hlY2tlZCh0cnVlKTsKKwkJCQkvL05vdGhpbmcgdG8gZG8uIEl0J3MgYWxyZWFkeSBsb2ctdGltZS4KKwkJCX0KKwkJCWVsc2UgeworCQkJCXRvZ2dsZUxlZ2VuZCgpOworCQkJfQorCQkJZHJhdygpOworCQl9CisJfS8vTGVnZW5kSGlkZUFjdGlvbgorCisJCisJLyoqCisJICogc3dpdGNoIHRvIGxpbmVhciBwbG90IAorCSAqIAorCSAqLworCXByb3RlY3RlZCBjbGFzcyBMaW5lYXJTY2FsZUFjdGlvbiBleHRlbmRzIEFjdGlvbiB7CisJCXB1YmxpYyBMaW5lYXJTY2FsZUFjdGlvbigpCisJCXsKKwkJCXN1cGVyKE1lc3NhZ2VzLmdldFN0cmluZygiQ29udGV4dE1lbnUuTGluZWFyVGltZVNjYWxlIiksIElBY3Rpb24uQVNfQ0hFQ0tfQk9YKTsKKwkJCXNldENoZWNrZWQodXNlTGluZWFyVGltZVNjYWxlKTsKKwkJfQorCisJCS8qKgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5BY3Rpb24jZ2V0VGV4dCgpCisJCSAqLworCQlAT3ZlcnJpZGUKKwkJcHVibGljIFN0cmluZyBnZXRUZXh0KCkgeworCQkJcmV0dXJuIE1lc3NhZ2VzLmdldFN0cmluZygiQ29udGV4dE1lbnUuTGluZWFyVGltZVNjYWxlIik7CisJCX0KKworCQkvKioKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uQWN0aW9uI3J1bigpCisJCSAqLworCQlAT3ZlcnJpZGUKKwkJcHVibGljIHZvaWQgcnVuKCkgeworCQkJaWYgKHVzZUxpbmVhclRpbWVTY2FsZSkgeworCQkJCXNldENoZWNrZWQodHJ1ZSk7CisJCQkJLy9Ob3RoaW5nIHRvIGRvLiBJdCdzIGFscmVhZHkgbGluZWFyLXRpbWUuCisJCQl9CisJCQllbHNlIHsKKwkJCQl0b2dnbGVBeGlzU2NhbGUoKTsKKwkJCX0KKwkJCWRyYXcoKTsKKwkJfQorCX0gLy9MaW5lYXJTY2FsZUFjdGlvbgorCisJLyoqCisJICogc3dpdGNoIHRvIHNlbWktbG9nIHBsb3QgKGxvZyBzY2FsZSBvbiB5IGF4aXMpCisJICogCisJICovCisJY2xhc3MgTG9nU2NhbGVBY3Rpb24gZXh0ZW5kcyBBY3Rpb24gCXsKKwkJcHVibGljIExvZ1NjYWxlQWN0aW9uKCkKKwkJeworCQkJc3VwZXIoTWVzc2FnZXMuZ2V0U3RyaW5nKCJDb250ZXh0TWVudS5Mb2dUaW1lU2NhbGUiKSwgSUFjdGlvbi5BU19DSEVDS19CT1gpOworCQkJc2V0Q2hlY2tlZCghdXNlTGluZWFyVGltZVNjYWxlKTsKKwkJfQorCisJCS8qKgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5BY3Rpb24jZ2V0VGV4dCgpCisJCSAqLworCQlAT3ZlcnJpZGUKKwkJcHVibGljIFN0cmluZyBnZXRUZXh0KCkgeworCQkJcmV0dXJuIE1lc3NhZ2VzLmdldFN0cmluZygiQ29udGV4dE1lbnUuTG9nVGltZVNjYWxlIik7CisJCX0KKworCQkvKioKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uQWN0aW9uI3J1bigpCisJCSAqLworCQlAT3ZlcnJpZGUKKwkJcHVibGljIHZvaWQgcnVuKCkgeworCQkJaWYgKCF1c2VMaW5lYXJUaW1lU2NhbGUpIHsKKwkJCQlzZXRDaGVja2VkKHRydWUpOworCQkJCS8vTm90aGluZyB0byBkby4gSXQncyBhbHJlYWR5IGxvZy10aW1lLgorCQkJfQorCQkJZWxzZSB7CisJCQkJdG9nZ2xlQXhpc1NjYWxlKCk7CisJCQl9CisJCQlkcmF3KCk7CisJCX0KKwl9Ly9Mb2dTY2FsZUFjdGlvbgorCQorCS8qKgorCSAqIERpc3BsYXlhYmxlUHJvcGVydHkKKwkgKgorCSAqLworCXByb3RlY3RlZCBjbGFzcyBEaXNwbGF5YWJsZVByb3BlcnR5IGV4dGVuZHMgQWN0aW9uCisJeworCQlTdHJpbmcgcHJvcGVydHkgPSBudWxsOworCQlwdWJsaWMgRGlzcGxheWFibGVQcm9wZXJ0eShTdHJpbmcgcHJvcGVydHksIGJvb2xlYW4gdmlzaWJpbGl0eSkKKwkJeworCQkJCQlzdXBlcihwcm9wZXJ0eSwgSUFjdGlvbi5BU19DSEVDS19CT1gpOworCQkJCQl0aGlzLnByb3BlcnR5ID0gcHJvcGVydHk7CisJCQkJCXNldENoZWNrZWQodmlzaWJpbGl0eSk7CisJCX0KKwkJCisJCisKKwkJLyoqCisJCSAqIEBzZWUgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLkFjdGlvbiNnZXRUZXh0KCkKKwkJICovCisJCUBPdmVycmlkZQorCQlwdWJsaWMgU3RyaW5nIGdldFRleHQoKSB7CisJCQlyZXR1cm4gcHJvcGVydHk7CisJCX0KKworCQkvKioKKwkJICogVG9nZ2xlIHRoZSBzdGF0ZQorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5BY3Rpb24jcnVuKCkKKwkJICovCisJCUBPdmVycmlkZQorCQlwdWJsaWMgdm9pZCBydW4oKSB7CisJCQkJRGF0YVNlcmllcyBzZXJpZXMgPSBkYXRhU2VyaWVzTWFwLmdldChwcm9wZXJ0eSk7CisJCQkJc2VyaWVzLnRvZ2dsZVZpc2libGUoKTsKKwkJCQlkYXRhU2VyaWVzTWFwLnB1dChwcm9wZXJ0eSxzZXJpZXMpOworCQkJCXNldENoZWNrZWQoc2VyaWVzLmlzVmlzaWJsZSgpKTsKKwkJCQl2aXNpYmxlTWFwLnB1dChwcm9wZXJ0eSwgc2VyaWVzLmlzVmlzaWJsZSgpKTsKKwkJCQlkcmF3KCk7CisJCX0KKwl9Ly8gRGlzcGxheWFibGVQcm9wZXJ0eQorCQorCQorCS8qKgorCSAqIElubmVyIGNsYXNzIERhdGFTZXJpZXMKKwkgKiBhbGwgdGhlIGRhdGEgb2JqZWN0cyBmb3IgYSBwbG90CisJICoKKwkgKi8KKwlwcm90ZWN0ZWQgY2xhc3MgRGF0YVNlcmllcyAKKwl7CisJCXB1YmxpYyBTdHJpbmcgcHJvcGVydHlOYW1lID0gIiI7CisJCQorCQlwdWJsaWMgTGlzdDxEb3VibGU+IHJlbGF0aXZlVmFsdWVzID0gbmV3IEFycmF5TGlzdDxEb3VibGU+KCk7CisJCXB1YmxpYyBTZXJpZXMgbGluZVNlcmllcyA9IG51bGw7CisJCXByaXZhdGUgYm9vbGVhbiB2aXNpYmxlID0gdHJ1ZTsKKwkJcHJpdmF0ZSBTZXJpZXNEZWZpbml0aW9uIHNkWSA9IG51bGw7CisJCXByaXZhdGUgaW50IHNlcmllc0luZGV4ID0gMDsKKwkJcHJpdmF0ZSBib29sZWFuIG92ZXJsYXlNb2RlID0gZmFsc2U7CisJCQorCQkKKwkJcHVibGljIGJvb2xlYW4gaXNWaXNpYmxlKCkgeworCQkJcmV0dXJuIHZpc2libGU7CisJCX0KKwkJcHVibGljIHZvaWQgc2V0VmlzaWJsZShib29sZWFuIHN0YXRlKSB7CisJCQl2aXNpYmxlID0gc3RhdGU7CisJCX0KKwkJCisJCXB1YmxpYyB2b2lkIHRvZ2dsZVZpc2libGUoKSB7CisJCQl2aXNpYmxlID0gIXZpc2libGU7CisJCX0KKworCQkvKioKKwkJICogCisJCSAqIEBwYXJhbSBwcm9wZXJ0eU5hbWUKKwkJICogQHBhcmFtIGluZGV4CisJCSAqIEBwYXJhbSBvdmVybGF5IAorCQkgKi8KKwkJcHVibGljIERhdGFTZXJpZXMoU3RyaW5nIHByb3BlcnR5TmFtZSwgaW50IGluZGV4LCBib29sZWFuIG92ZXJsYXkpIHsKKwkJCXRoaXMucHJvcGVydHlOYW1lID0gcHJvcGVydHlOYW1lOworCQkJdGhpcy5zZXJpZXNJbmRleCA9IGluZGV4OworCQkJdGhpcy5vdmVybGF5TW9kZSA9IG92ZXJsYXk7CisJCQlyZWxhdGl2ZVZhbHVlcyA9IG5ldyBBcnJheUxpc3Q8RG91YmxlPigpOworCQkJcmVsYXRpdmVWYWx1ZXMuYWRkKG5ldyBEb3VibGUoMC4wKSk7CisJCQlhZGRMaW5lU2VyaWVzKHByb3BlcnR5TmFtZSk7CisJCX0KKwkJCisJCXB1YmxpYyB2b2lkIGFkZFZhbHVlKERvdWJsZSB2YWwpIHsKKwkJCWlmKHJlbGF0aXZlVmFsdWVzPT1udWxsKSByZWxhdGl2ZVZhbHVlcyA9IG5ldyBBcnJheUxpc3Q8RG91YmxlPigpOworCQkJcmVsYXRpdmVWYWx1ZXMuYWRkKHZhbCk7CisJCX0KKwkJCisJCS8qKgorCQkgKiBAcGFyYW0gcHJvcGVydHlOYW1lCisJCSAqIAorCQkgKi8KKwkJQFN1cHByZXNzV2FybmluZ3MoImRlcHJlY2F0aW9uIikKKwkJcHVibGljIHZvaWQgYWRkTGluZVNlcmllcyhmaW5hbCBTdHJpbmcgcHJvcGVydHlOYW1lKSB7CisJCQkKKwkJCWZpbmFsIE51bWJlckRhdGFTZXQgb3J0aG9WYWx1ZXMgPSBOdW1iZXJEYXRhU2V0SW1wbAorCQkJCQkuY3JlYXRlKHJlbGF0aXZlVmFsdWVzKTsKKwkJCWlmKGxpbmVTZXJpZXMgPT0gbnVsbCkgeworCQkJCWxpbmVTZXJpZXMgPSBTY2F0dGVyU2VyaWVzSW1wbC5jcmVhdGUoKTsKKwkJCQkvKgorCQkJCSAqIAorCQkJCSAqIEJhciBjaGFydCBzdHlsZSBpcyB0b28gc2xvdyBmb3IgZ2VuZXJhdGlvbiBvZiBhIGZpbGwKKwkJCQkgKiBpZiB3ZSB3YW50IGEgZmlsbCB3ZSBjYW4gdHJ5IHVzaW5nIHRoZSBkaWZmZXJlbmNlIHBsb3QKKwkJCQkgKiB0byBhIHN0cmFpZ2h0IGxpbmUgYXQgeT0wCisJCQkJICogCisJCQkJCisJCQkJaWYocHJvcGVydHlOYW1lLmluZGV4T2YoIioiKT49MSkgeworCQkJCQkvLyBiYXJzZXJpZXMgbWV0aG9kcworCQkJCQlsaW5lU2VyaWVzID0gKEJhclNlcmllcykgQmFyU2VyaWVzSW1wbC5jcmVhdGUoKTsKKwkJCQl9IGVsc2UgeworCQkJCQlsaW5lU2VyaWVzID0gKFNjYXR0ZXJTZXJpZXMpIFNjYXR0ZXJTZXJpZXNJbXBsLmNyZWF0ZSgpOworCQkJCX0KKwkJCQkKKwkJCQkqCisJCQkJKi8KKwkJCX0gLy8gaWYgbGluZVNlcmllcz09bnVsbAorCQkJbGluZVNlcmllcy5zZXREYXRhU2V0KG9ydGhvVmFsdWVzKTsKKwkJCSgoTGluZVNlcmllcykgbGluZVNlcmllcykuZ2V0TGluZUF0dHJpYnV0ZXMoKS5zZXRWaXNpYmxlKHRydWUpOworCQkJKChMaW5lU2VyaWVzKSBsaW5lU2VyaWVzKS5nZXRMaW5lQXR0cmlidXRlcygpLnNldFRoaWNrbmVzcygzKTsKKwkJCSgoTGluZVNlcmllcykgbGluZVNlcmllcykuZ2V0TWFya2VycygpLmNsZWFyKCk7CisJCQkKKwkJCS8vIEFzc2lnbiB0aGUgbGluZSBjb2xvcgorCQkJLy8gYmFzZWQgb24gc2VsZWN0ZWQgcHJvcGVydHkuIERlZmF1bHQgaXMgQmx1ZQorCQkJc2V0Q29sb3JEZWZzKHNlcmllc0luZGV4KTsKKwkJCS8vIElmIHRoaXMgaXMgdGhlICJzZWxlY3RlZCIgcmVnaW9uIG9mIGEgZ3JhcGggc2V0IHRoZSBtYXJrZXIgdHlwZQorCQkKKwkJCS8vIHRoZSBzZXJpZXMgZGVmCisJCQlzZFkgPSBTZXJpZXNEZWZpbml0aW9uSW1wbC5jcmVhdGUoKTsKKwkJCXNkWS5nZXRTZXJpZXNQYWxldHRlKCkudXBkYXRlKC0yKTsKKwkJCXNkWS5nZXRTZXJpZXMoKS5hZGQobGluZVNlcmllcyk7CisJCQl5QXhpc1ByaW1hcnkuZ2V0U2VyaWVzRGVmaW5pdGlvbnMoKS5hZGQoc2RZKTsKKwkJCQorCQkJcmV0dXJuOworCQl9Ly8gYWRkTGluZVNlcmllcworCQkKKwkJLyoqIAorCQkgKiBpbiByZXNwb25zZSB0byB1c2VyIGFjdGlvbiB0ZW1wb3JhcmlseSByZW1vdmUgdGhlIGxpbmUgc2VyaWVzIGZyb20gdGhlIGdyYXBoCisJCSAqLworCQlwdWJsaWMgdm9pZCBoaWRlKCkgeworCQkJbGluZVNlcmllcy5zZXRWaXNpYmxlKGZhbHNlKTsKKwkJCXZpc2libGUgPSBmYWxzZTsKKwkJfS8vIGhpZGUKKwkJCisJCS8qKiAKKwkJICogaW4gcmVzcG9uc2UgdG8gdXNlciBhY3Rpb24gYWRkIGJhY2sgdGhlIGxpbmUgc2VyaWVzIHRvIHRoZSBncmFwaAorCQkgKi8KKwkJcHVibGljIHZvaWQgc2hvdygpIHsKKwkJCWxpbmVTZXJpZXMuc2V0VmlzaWJsZSh0cnVlKTsKKwkJCXZpc2libGUgPSB0cnVlOworCQl9Ly8gc2hvdworCQkKKworCQkvKioKKwkJICogT3ZlcmxvYWRlZCBhbmQgc2ltcGxlIG1ldGhvZCB0byBzZXQgdGhlIGNvbG9ycworCQkgKiBkb2VzIG5vdCB1c2UgdGhlIHByZWZlcmVuY2VzCisJCSAqIAorCQkgKiBTZXRzIHRoZSBjb2xvcnMgZm9yIGEgbiBhcnJheSBvZiBMaW5lU2VyaWVzIGdpdmVuIHRoZSBwcm9wZXJ0eSB0byBQbG90CisJCSAqIGZvciBlYWNoLiBUcnkgdG8gc2V0IGNvbG9yIGZyb20gdGhlIHByZWZlcmVuY2VzIChpZiBzcGVjaWZpZWQgZm9yIHRoYXQKKwkJICogcHJvcGVydHkpIG90aGVyd2lzZSBzZXRzIGxpbmUgY29sb3IgdG8gYmx1ZS4KKwkJICogQHBhcmFtIHByb3BlcnR5TmFtZSAKKwkJICoKKwkJICovCisJCXB1YmxpYyB2b2lkIHNldENvbG9yRGVmcyhpbnQgaW5kZXgpIHsKKwkJCS8vIHRoZSBkZWZhdWx0IGxpbmUgY29sb3IKKwkJCWlmKGluZGV4ID49IGNvbG9yRGVmYXVsdC5sZW5ndGgpIGluZGV4ID0gMDsgLy8gc2hvdWxkIG5ldmVyIGhhcHBlbgorCQkJQ29sb3JEZWZpbml0aW9uIGNvbG9yID0gY29sb3JEZWZhdWx0W2luZGV4XTsKKworCQkJdGhpcy5saW5lU2VyaWVzLnNldFNlcmllc0lkZW50aWZpZXIocHJvcGVydHlOYW1lKTsKKwkJCWlmIChvdmVybGF5TW9kZSkgeworCQkJCQkoKExpbmVTZXJpZXMpdGhpcy5saW5lU2VyaWVzKS5nZXRMaW5lQXR0cmlidXRlcygpLnNldENvbG9yKGNvbG9yKTsKKwkJCQkJKChMaW5lU2VyaWVzKXRoaXMubGluZVNlcmllcykuZ2V0TGluZUF0dHJpYnV0ZXMoKS5zZXRTdHlsZShMaW5lU3R5bGUuRE9UVEVEX0xJVEVSQUwpOworCQkJfSBlbHNlIHsKKwkJCQkoKExpbmVTZXJpZXMpdGhpcy5saW5lU2VyaWVzKS5nZXRMaW5lQXR0cmlidXRlcygpLnNldENvbG9yKGNvbG9yKTsKKwkJCX0KKwkJCQorCQkJCisJCX0vLyBnZXRDb2xvckRlZnMKKwkJCisJCS8qKgorCQkgKiBTZXRzIHRoZSBjb2xvcnMgZm9yIGEgbiBhcnJheSBvZiBMaW5lU2VyaWVzIGdpdmVuIHRoZSBwcm9wZXJ0eSB0byBQbG90CisJCSAqIGZvciBlYWNoLiBUcnkgdG8gc2V0IGNvbG9yIGZyb20gdGhlIHByZWZlcmVuY2VzIChpZiBzcGVjaWZpZWQgZm9yIHRoYXQKKwkJICogcHJvcGVydHkpIG90aGVyd2lzZSBzZXRzIGxpbmUgY29sb3IgdG8gYmx1ZS4KKwkJICogQHBhcmFtIHByb3BlcnR5TmFtZSAKKwkJICoKKwkJICovCisJCXB1YmxpYyB2b2lkIHNldENvbG9yRGVmcyhTdHJpbmcgcHJvcGVydHlOYW1lKSB7CisJCQkvLyB0aGUgZGVmYXVsdCBsaW5lIGNvbG9yCisKKwkJCS8vIGlmIHBvc3NpYmxlIGdldCBjb2xvciBmcm9tIHByZWZlcmVuY2VzCisJCQlmaW5hbCBNYXA8U3RyaW5nLCBDb2xvcj4gY29sb3JNYXAgPSBWaXN1YWxpemF0aW9uUHJlZmVyZW5jZVBhZ2UuZ2V0Q29sb3JNYXBwaW5nKCk7CisKKwkJCS8vIGRlZmF1bHQgY29sb3IKKwkJCWludCBjb2xvckluZGV4ID0gc2VyaWVzSW5kZXggJSBjb2xvckRlZmF1bHQubGVuZ3RoOworCQkJQ29sb3JEZWZpbml0aW9uIGNvbG9yID0gY29sb3JEZWZhdWx0W2NvbG9ySW5kZXhdOworCisJCQkvLyBwcmVmZXJyZWQgY29sb3IgYnkgbmFtZQorCQkJU3RyaW5nIGtleSA9IHByb3BlcnR5TmFtZS5zdWJzdHJpbmcoMCwxKTsKKwkJCQorCQkJaWYgKGNvbG9yTWFwLmNvbnRhaW5zS2V5KGtleSkpIHsKKwkJCQlmaW5hbCBDb2xvciBjID0gY29sb3JNYXAuZ2V0KGtleSk7CisJCQkJY29sb3IgPSBDb2xvckRlZmluaXRpb25JbXBsLmNyZWF0ZShjLmdldFJlZCgpLCBjLmdldEdyZWVuKCksIGMuZ2V0Qmx1ZSgpKTsKKwkJCX0KKwkJCQorCQkJdGhpcy5saW5lU2VyaWVzLnNldFNlcmllc0lkZW50aWZpZXIocHJvcGVydHlOYW1lKTsKKwkJCWlmIChvdmVybGF5TW9kZSkgeworCQkJCQkoKExpbmVTZXJpZXMpdGhpcy5saW5lU2VyaWVzKS5nZXRMaW5lQXR0cmlidXRlcygpLnNldENvbG9yKENvbG9yRGVmaW5pdGlvbkltcGwuR1JFWSgpKTsKKwkJCQkJKChMaW5lU2VyaWVzKXRoaXMubGluZVNlcmllcykuZ2V0TGluZUF0dHJpYnV0ZXMoKS5zZXRTdHlsZShMaW5lU3R5bGUuRE9UVEVEX0xJVEVSQUwpOworCQkJfSBlbHNlIHsKKwkJCQkoKExpbmVTZXJpZXMpdGhpcy5saW5lU2VyaWVzKS5nZXRMaW5lQXR0cmlidXRlcygpLnNldENvbG9yKGNvbG9yKTsKKwkJCX0KKwkJCQorCQkJCisJCX0vLyBnZXRDb2xvckRlZnMKKworCQkvKioKKwkJICogbGVuZ3RoIG9mIHRoZSBzZXJpZXMKKwkJICogQHJldHVybiBudW1iZXIgb2YgZGF0YSBwb2ludHMKKwkJICovCisJCXB1YmxpYyBpbnQgZ2V0RGF0YVNpemUoKSB7CisJCQlyZXR1cm4gcmVsYXRpdmVWYWx1ZXMuc2l6ZSgpOworCQl9CisJCS8vIEFjY2Vzc29ycworCQlwdWJsaWMgU3RyaW5nIGdldFByb3BlcnR5TmFtZSgpIHsKKwkJCXJldHVybiBwcm9wZXJ0eU5hbWU7CisJCX0KKworCQlwdWJsaWMgdm9pZCBzZXRQcm9wZXJ0eU5hbWUoU3RyaW5nIHByb3BlcnR5TmFtZSkgeworCQkJdGhpcy5wcm9wZXJ0eU5hbWUgPSBwcm9wZXJ0eU5hbWU7CisJCX0KKworCQlwdWJsaWMgTGlzdDxEb3VibGU+IGdldFJlbGF0aXZlVmFsdWVzKCkgeworCQkJcmV0dXJuIHJlbGF0aXZlVmFsdWVzOworCQl9CisKKwkJcHVibGljIHZvaWQgc2V0UmVsYXRpdmVWYWx1ZXMoTGlzdDxEb3VibGU+IHJlbGF0aXZlVmFsdWVzKSB7CisJCQl0aGlzLnJlbGF0aXZlVmFsdWVzID0gcmVsYXRpdmVWYWx1ZXM7CisJCX0KKworCQkKKworCQlwdWJsaWMgdm9pZCBzZXRMaW5lU2VyaWVzKExpbmVTZXJpZXMgbGluZVNlcmllcykgeworCQkJdGhpcy5saW5lU2VyaWVzID0gbGluZVNlcmllczsKKwkJfQorCX0vLyBEYXRhU2VyaWVzCisJLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKwkKK30gLy8gRXJyb3JUaW1lU2VyaWVzQ2FudmFzCmRpZmYgLS1naXQgYS9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQvc3JjL29yZy9lY2xpcHNlL3N0ZW0vYW5hbHlzaXMvYXV0b21hdGljZXhwZXJpbWVudC92aWV3cy9NZXNzYWdlcy5qYXZhIGIvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5hdXRvbWF0aWNleHBlcmltZW50L3NyYy9vcmcvZWNsaXBzZS9zdGVtL2FuYWx5c2lzL2F1dG9tYXRpY2V4cGVyaW1lbnQvdmlld3MvTWVzc2FnZXMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZTBkNWUxCi0tLSAvZGV2L251bGwKKysrIGIvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5hdXRvbWF0aWNleHBlcmltZW50L3NyYy9vcmcvZWNsaXBzZS9zdGVtL2FuYWx5c2lzL2F1dG9tYXRpY2V4cGVyaW1lbnQvdmlld3MvTWVzc2FnZXMuamF2YQpAQCAtMCwwICsxLDQyIEBACisvLyBNZXNzYWdlcy5qYXZhCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuYXV0b21hdGljZXhwZXJpbWVudC52aWV3czsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqYXZhLnV0aWwuTWlzc2luZ1Jlc291cmNlRXhjZXB0aW9uOworaW1wb3J0IGphdmEudXRpbC5SZXNvdXJjZUJ1bmRsZTsKKworLyoqCisgKiBUaGlzIGNsYXNzIHJlcHJlc2VudHMKKyAqLworcHVibGljIGNsYXNzIE1lc3NhZ2VzIHsKKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgQlVORExFX05BTUUgPSAib3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5hdXRvbWF0aWNleHBlcmltZW50LnZpZXdzLm1lc3NhZ2VzIjsgLy8kTk9OLU5MUy0xJAorCisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgUmVzb3VyY2VCdW5kbGUgUkVTT1VSQ0VfQlVORExFID0gUmVzb3VyY2VCdW5kbGUKKwkJCS5nZXRCdW5kbGUoQlVORExFX05BTUUpOworCisJcHJpdmF0ZSBNZXNzYWdlcygpIHsKKwkJLy8gTm90aGluZworCX0KKworCS8qKgorCSAqIEBwYXJhbSBrZXkKKwkgKiBAcmV0dXJuIHRoZSBzdHJpbmcgbWF0Y2hpbmcgdGhlIGtleQorCSAqLworCXB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldFN0cmluZyhmaW5hbCBTdHJpbmcga2V5KSB7CisJCXRyeSB7CisJCQlyZXR1cm4gUkVTT1VSQ0VfQlVORExFLmdldFN0cmluZyhrZXkpOworCQl9IGNhdGNoIChmaW5hbCBNaXNzaW5nUmVzb3VyY2VFeGNlcHRpb24gZSkgeworCQkJcmV0dXJuICchJyArIGtleSArICchJzsKKwkJfQorCX0KK30gLy8gTWVzc2FnZXMKZGlmZiAtLWdpdCBhL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuYXV0b21hdGljZXhwZXJpbWVudC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9hbmFseXNpcy9hdXRvbWF0aWNleHBlcmltZW50L3ZpZXdzL1J1bkhpc3RvcnlDYW52YXMuamF2YSBiL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuYXV0b21hdGljZXhwZXJpbWVudC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9hbmFseXNpcy9hdXRvbWF0aWNleHBlcmltZW50L3ZpZXdzL1J1bkhpc3RvcnlDYW52YXMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YzZkZTJkCi0tLSAvZGV2L251bGwKKysrIGIvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5hdXRvbWF0aWNleHBlcmltZW50L3NyYy9vcmcvZWNsaXBzZS9zdGVtL2FuYWx5c2lzL2F1dG9tYXRpY2V4cGVyaW1lbnQvdmlld3MvUnVuSGlzdG9yeUNhbnZhcy5qYXZhCkBAIC0wLDAgKzEsMTI0NyBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQudmlld3M7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuTWFwOworCitpbXBvcnQgb3JnLmVjbGlwc2UuYmlydC5jaGFydC5kZXZpY2UuSURldmljZVJlbmRlcmVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmJpcnQuY2hhcnQuZXhjZXB0aW9uLkNoYXJ0RXhjZXB0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmJpcnQuY2hhcnQuZmFjdG9yeS5HZW5lcmF0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuYmlydC5jaGFydC5tb2RlbC5DaGFydDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5iaXJ0LmNoYXJ0Lm1vZGVsLkNoYXJ0V2l0aEF4ZXM7CitpbXBvcnQgb3JnLmVjbGlwc2UuYmlydC5jaGFydC5tb2RlbC5hdHRyaWJ1dGUuQW5jaG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmJpcnQuY2hhcnQubW9kZWwuYXR0cmlidXRlLkF4aXNUeXBlOworaW1wb3J0IG9yZy5lY2xpcHNlLmJpcnQuY2hhcnQubW9kZWwuYXR0cmlidXRlLkJvdW5kczsKK2ltcG9ydCBvcmcuZWNsaXBzZS5iaXJ0LmNoYXJ0Lm1vZGVsLmF0dHJpYnV0ZS5Db2xvckRlZmluaXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuYmlydC5jaGFydC5tb2RlbC5hdHRyaWJ1dGUuSW50ZXJzZWN0aW9uVHlwZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5iaXJ0LmNoYXJ0Lm1vZGVsLmF0dHJpYnV0ZS5MaW5lQXR0cmlidXRlczsKK2ltcG9ydCBvcmcuZWNsaXBzZS5iaXJ0LmNoYXJ0Lm1vZGVsLmF0dHJpYnV0ZS5MaW5lU3R5bGU7CitpbXBvcnQgb3JnLmVjbGlwc2UuYmlydC5jaGFydC5tb2RlbC5hdHRyaWJ1dGUuUG9zaXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuYmlydC5jaGFydC5tb2RlbC5hdHRyaWJ1dGUuVGlja1N0eWxlOworaW1wb3J0IG9yZy5lY2xpcHNlLmJpcnQuY2hhcnQubW9kZWwuYXR0cmlidXRlLmltcGwuQm91bmRzSW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5iaXJ0LmNoYXJ0Lm1vZGVsLmF0dHJpYnV0ZS5pbXBsLkNvbG9yRGVmaW5pdGlvbkltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2UuYmlydC5jaGFydC5tb2RlbC5jb21wb25lbnQuQXhpczsKK2ltcG9ydCBvcmcuZWNsaXBzZS5iaXJ0LmNoYXJ0Lm1vZGVsLmNvbXBvbmVudC5TZXJpZXM7CitpbXBvcnQgb3JnLmVjbGlwc2UuYmlydC5jaGFydC5tb2RlbC5jb21wb25lbnQuaW1wbC5TZXJpZXNJbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLmJpcnQuY2hhcnQubW9kZWwuZGF0YS5OdW1iZXJEYXRhU2V0OworaW1wb3J0IG9yZy5lY2xpcHNlLmJpcnQuY2hhcnQubW9kZWwuZGF0YS5TZXJpZXNEZWZpbml0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmJpcnQuY2hhcnQubW9kZWwuZGF0YS5pbXBsLk51bWJlckRhdGFFbGVtZW50SW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5iaXJ0LmNoYXJ0Lm1vZGVsLmRhdGEuaW1wbC5OdW1iZXJEYXRhU2V0SW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5iaXJ0LmNoYXJ0Lm1vZGVsLmRhdGEuaW1wbC5TZXJpZXNEZWZpbml0aW9uSW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5iaXJ0LmNoYXJ0Lm1vZGVsLmltcGwuQ2hhcnRXaXRoQXhlc0ltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2UuYmlydC5jaGFydC5tb2RlbC5sYXlvdXQuTGVnZW5kOworaW1wb3J0IG9yZy5lY2xpcHNlLmJpcnQuY2hhcnQubW9kZWwubGF5b3V0LlBsb3Q7CitpbXBvcnQgb3JnLmVjbGlwc2UuYmlydC5jaGFydC5tb2RlbC50eXBlLkxpbmVTZXJpZXM7CitpbXBvcnQgb3JnLmVjbGlwc2UuYmlydC5jaGFydC5tb2RlbC50eXBlLmltcGwuU2NhdHRlclNlcmllc0ltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2UuYmlydC5jaGFydC51dGlsLlBsdWdpblNldHRpbmdzOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5BY3Rpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklBY3Rpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLk1lbnVNYW5hZ2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5TZXBhcmF0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5hdXRvbWF0aWNleHBlcmltZW50LkFjdGl2YXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnVpLnByZWZlcmVuY2VzLlZpc3VhbGl6YXRpb25QcmVmZXJlbmNlUGFnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuU1dUOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuUGFpbnRFdmVudDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLlBhaW50TGlzdGVuZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmdyYXBoaWNzLkNvbG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ncmFwaGljcy5HQzsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZ3JhcGhpY3MuSW1hZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ2FudmFzOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5NZW51OworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLldpZGdldDsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5JV29ya2JlbmNoQWN0aW9uQ29uc3RhbnRzOworCisvKioKKyAqIFJ1bkhpc3RvcnlDYW52YXMgaXMgYSBzdWJjbGFzcyBvZiB7QGxpbmsgQ2FudmFzfSBzdWl0YWJsZSBmb3IgY2hhcnQgZHJhd2luZ3MuCisgKi8KK3B1YmxpYyBjbGFzcyBSdW5IaXN0b3J5Q2FudmFzIGV4dGVuZHMgQ2FudmFzIHsKKworCXByb3RlY3RlZCBJRGV2aWNlUmVuZGVyZXIgaWRyID0gbnVsbDsKKworCS8qKgorCSAqIFRoaXMgaXMgdGhlIHtAbGluayBDaGFydH0gdGhhdCBwbG90cyB0aGUgcmVsYXRpdmUgdmFsdWVzLgorCSAqLworCXByb3RlY3RlZCBDaGFydCBjbSA9IG51bGw7CisKKwkvKioKKwkgKiBUaGUgcHJvdmlkZXIgb2YgcmVsYXRpdmUgdmFsdWVzLgorCSAqLworCS8vcHJpdmF0ZSBSZWxhdGl2ZVZhbHVlSGlzdG9yeVByb3ZpZGVyIHJ2aHA7CisKKwlwcml2YXRlIEFuYWx5c2lzQ29udHJvbCBjb250cm9sID0gbnVsbDsKKwkKKwkvKioKKwkgKiB0aGUgaW5kZXggb2YgdGhpcyBDaGFydAorCSAqLworCXByaXZhdGUgaW50IGNoYXJ0SW5kZXggPSAwOworCQorCisJLyoqCisJICogc29tZSBleHRyYSBjb2xvcnMKKwkgKi8KKwlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIENvbG9yRGVmaW5pdGlvbltdIGNvbG9yRGVmYXVsdCA9IHsKKwkJCQkJCQkJCQkJCQkJCUNvbG9yRGVmaW5pdGlvbkltcGwuUkVEKCksIAorCQkJCQkJCQkJCQkJCQkJQ29sb3JEZWZpbml0aW9uSW1wbC5HUkVFTigpLCAKKwkJCQkJCQkJCQkJCQkJCUNvbG9yRGVmaW5pdGlvbkltcGwuQkxVRSgpLCAKKwkJCQkJCQkJCQkJCQkJCUNvbG9yRGVmaW5pdGlvbkltcGwuQkxBQ0soKSwgCisJCQkJCQkJCQkJCQkJCQlDb2xvckRlZmluaXRpb25JbXBsLkdSRVkoKSwKKwkJCQkJCQkJCQkJCQkJCUNvbG9yRGVmaW5pdGlvbkltcGwuQ1lBTigpLAorCQkJCQkJCQkJCQkJCQkJQ29sb3JEZWZpbml0aW9uSW1wbC5PUkFOR0UoKSAKKwkJCQkJCQkJCQkJCQkJCX07CisJLyoqCisJICogdXNlZCBpZiB3ZSBuZWVkIHRvIG92ZXJsYXkgdHJhY2VzIGluIGRpZmZlcmVudCBjb2xvcnMKKwkgKi8KKwlwcml2YXRlIGJvb2xlYW4gb3ZlcmxheU1vZGUgPSBmYWxzZTsKKwkKKwkKKworCS8qKgorCSAqIEEgY29udGV4dCBtZW51IGZvciB0aGlzIHZpZXcKKwkgKi8KKwlNZW51IHBvcFVwTWVudSA9IG51bGw7CisJCisJLyoqCisJICogc2V0IHkgYXhpcyB0byBhIGxpbmVhciBzY2FsZQorCSAqLworCXByaXZhdGUgTGluZWFyU2NhbGVBY3Rpb24gbGluZWFyVGltZUFjdGlvbjsKKwkvKioKKwkgKiBzZXQgeSBheGlzIHRvIGEgbG9nIHNjYWxlCisJICovCisJcHJpdmF0ZSBMb2dTY2FsZUFjdGlvbiBsb2dUaW1lQWN0aW9uOworCXByb3RlY3RlZCBib29sZWFuIHVzZUxpbmVhclRpbWVTY2FsZSA9IHRydWU7CisJCisKKwkvKioKKwkgKiBzaG93IHRoZSBsZWdlbmQgKHRydWUgYnkgZGVmYXVsdCkKKwkgKi8KKwlwcml2YXRlIExlZ2VuZFZpZXdBY3Rpb24gdmlld0xlZ2VuZDsKKworCS8qKgorCSAqIGhpZGUgdGhlIGxlZ2VuZCAKKwkgKi8KKwlwcml2YXRlIExlZ2VuZEhpZGVBY3Rpb24gaGlkZUxlZ2VuZDsKKwlwcm90ZWN0ZWQgYm9vbGVhbiBzaG93TGVnZW5kID0gdHJ1ZTsKKworCXByb3RlY3RlZCBMZWdlbmQgbGVnZW5kID0gbnVsbDsKKwkKKworCS8qKgorCSAqIHRoaXMgaXMgYSBtYXAgb2YgdGhlIERhdGFTZXJpZXMgb2JqZWN0IChrZXllZCBieSBwcm9wZXJ0eSBuYW1lKQorCSAqLworCXByb3RlY3RlZCBmaW5hbCBNYXA8U3RyaW5nLERhdGFTZXJpZXM+IGRhdGFTZXJpZXNNYXAgPSBuZXcgSGFzaE1hcDxTdHJpbmcsRGF0YVNlcmllcz4oKTsKKwkKKwkvKioKKwkgKiBLZWVwIHRyYWNrIG9mIHdoaWNoIFJ1bkhpc3RvcnkgYXJlIHZpc2libGUKKwkgKi8KKwkKKwlwcm90ZWN0ZWQgTWFwPFN0cmluZywgQm9vbGVhbj52aXNpYmxlTWFwID0gIG5ldyBIYXNoTWFwPFN0cmluZyxCb29sZWFuPigpOworCisKKwkvKioKKwkgKiBUaGVzZSBhcmUgdGhlIGN5Y2xlIG51bWJlcnMgdGhhdCBtYXRjaCB0aGUgcmVsYXRpdmUgdmFsdWVzIHRoYXQgd2lsbCBiZQorCSAqIHBsb3R0ZWQKKwkgKiAKKwkgKiBAc2VlICNyZWxhdGl2ZVZhbHVlcworCSAqLworCXByaXZhdGUgZmluYWwgTGlzdDxJbnRlZ2VyPiBjeWNsZU51bWJlcnMgPSBuZXcgQXJyYXlMaXN0PEludGVnZXI+KCk7CisKKwkvKioKKwkgKiBDaGFydCBnZW5lcmF0b3IgaW5zdGFuY2UgKHJlZmVyZW5jZSB0byBhIHNpbmdsZXRvbikKKwkgKi8KKwlHZW5lcmF0b3IgZ3I7CisKKwlBeGlzIHlBeGlzUHJpbWFyeTsKKwlBeGlzIHhBeGlzUHJpbWFyeTsKKwkvKioKKwkgKiB0aGUgbWF4WSB2YWx1ZSBmb3Igc2NhbGluZworCSAqLworCWRvdWJsZSBtYXhZID0gLTEuMDsKKworCS8qKgorCSAqIExvZyBvZiB6ZXJvIGlzIG5lZ2F0aXZlIGluZmluaXR5IHNvIGZvciBlYWNoIGxvY2F0aW9uIHdlIHdpbGwgY3V0IG9mZiB0aGUgbWluaW11bSAKKwkgKiBhdCB0aGUgbWluIE5PTlpFUk8gWSB2YWx1ZQorCSAqLworCXByaXZhdGUgZG91YmxlIG1pbllzY2FsZSA9IDEuMDsKKwkKKwkKKwkvKioKKwkgKiBMYWJlbCBmb3IgbGluZSBzZXJpZXMgTEVHRU5ECisJICovCisJcHVibGljIFN0cmluZyBPcmRpbmF0ZV9MRUdFTkQgPSAiWSI7CisJCisJLyoqCisJICogTGFiZWwgZm9yIGxpbmUgc2VyaWVzIFkgYXhpcyBsYWJlbAorCSAqKi8KKwlwdWJsaWMgU3RyaW5nIE9yZGluYXRlX0FYSVMgPSAiWSI7CisJCisKKwkvKioKKwkgKiBMYWJlbCBmb3IgbGluZSBzZXJpZXMgWCBheGlzIGxhYmVsCisJICoqLworCXB1YmxpYyBTdHJpbmcgWF9BWElTID0gIlgiOworCQorCS8qKiAKKwkgKiBjdXN0b21pemFibGUgY29sb3IgZGVmaW5pdGlvbnMKKwkgKi8KKwlwcml2YXRlIENvbG9yRGVmaW5pdGlvbiBmb3JlR3JvdW5kID0gQ29sb3JEZWZpbml0aW9uSW1wbC5XSElURSgpOworCXByaXZhdGUgQ29sb3JEZWZpbml0aW9uIGJhY2tncm91bmRHcm91bmQgPSBDb2xvckRlZmluaXRpb25JbXBsLkJMQUNLKCk7CisJcHJpdmF0ZSBDb2xvckRlZmluaXRpb24gZnJhbWVDb2xvciA9IENvbG9yRGVmaW5pdGlvbkltcGwuY3JlYXRlKDE4MCwgMTgwLCAyMDApOworCisJSW1hZ2UgaW1nQ2hhcnQgPSBudWxsOworCQorCS8qKgorCSAqIFRoaXMgQ29uc3RydWN0b3IgaXMgdXNlZCB3aGVuIHdlIHdhbnQgdG8gcGxhY2UgdGhlIHRpbWUgc2VyaWVzIGluIGEgY29udGFpbmVyCisJICogd2hpY2ggaXMgYSBzdWIgY29tcG9uZW50IG9mIHRoZSBhY3R1YWwgQW5hbHlzaXNDb250cm9sCisJICogQHBhcmFtIGFuYWx5c2lzQ29udHJvbCAKKwkgKiAKKwkgKiBAcGFyYW0gcGFyZW50ICB0aGUgU1dUIHBhcmVudCBvZiB0aGUge0BsaW5rIFdpZGdldH0KKwkgKiBAcGFyYW0gb3JkaW5hdGVTdHJpbmcgCisJICogQHBhcmFtIHlBeGlzTGFiZWwgCisJICogQHBhcmFtIHhBeGlzTGFiZWwKKwkgKiBAcGFyYW0gZm9yZWdyb3VuZCAKKwkgKiBAcGFyYW0gYmFja2dyb3VuZCAKKwkgKiBAcGFyYW0gZnJhbWVjb2xvciAKKwkgKiBAcGFyYW0gY2hhcnRJbmRleCB0aGUgaW5kZXggb2YgdGhpcyBjaGFydCAoMCBpZiBvbmx5IG9uZSkKKwkgKiBAcGFyYW0gb3ZlcmxheU1vZGUgdXNlZCBpZiB3ZSBuZWVkIHRvIG92ZXJsYXkgdHJhY2VzIGluIGRpZmZlcmVudCBjb2xvcnMKKwkgKi8KKwlwdWJsaWMgUnVuSGlzdG9yeUNhbnZhcyhmaW5hbCBBbmFseXNpc0NvbnRyb2wgYW5hbHlzaXNDb250cm9sLCBmaW5hbCBDb21wb3NpdGUgcGFyZW50LCAKKwkJCWZpbmFsIFN0cmluZyBvcmRpbmF0ZVN0cmluZywgCisJCQlmaW5hbCBTdHJpbmcgeUF4aXNMYWJlbCwgCisJCQlmaW5hbCBTdHJpbmcgeEF4aXNMYWJlbCwKKwkJCWZpbmFsIFN0cmluZyBmaXJzdFByb3BlcnR5LAorCQkJQ29sb3JEZWZpbml0aW9uIGZvcmVncm91bmQsCisJCQlDb2xvckRlZmluaXRpb24gYmFja2dyb3VuZCwKKwkJCUNvbG9yRGVmaW5pdGlvbiBmcmFtZWNvbG9yLAorCQkJaW50IGNoYXJ0SW5kZXgsCisJCQlib29sZWFuIG92ZXJsYXlNb2RlCSkgeworCQlzdXBlcihwYXJlbnQsIFNXVC5ET1VCTEVfQlVGRkVSRUQgfCBTV1QuQk9SREVSKTsKKwkJT3JkaW5hdGVfTEVHRU5EID0gb3JkaW5hdGVTdHJpbmc7CisJCU9yZGluYXRlX0FYSVMgPSB5QXhpc0xhYmVsOworCQlYX0FYSVMgPSB4QXhpc0xhYmVsOworCQlmb3JlR3JvdW5kIAkJCT0gZm9yZWdyb3VuZDsKKwkJYmFja2dyb3VuZEdyb3VuZCAJPSBiYWNrZ3JvdW5kOworCQlmcmFtZUNvbG9yIAkJCT0gZnJhbWVjb2xvcjsKKwkJdGhpcy5jaGFydEluZGV4ID0gY2hhcnRJbmRleDsKKwkJdGhpcy5vdmVybGF5TW9kZSA9IG92ZXJsYXlNb2RlOworCQkKKwkJZ3IgPSBHZW5lcmF0b3IuaW5zdGFuY2UoKTsKKworCQl0cnkgeworCQkJaWRyID0gUGx1Z2luU2V0dGluZ3MuaW5zdGFuY2UoKS5nZXREZXZpY2UoImR2LlNXVCIpOyAvLyROT04tTkxTLTEkCQkJCisJCX0gY2F0Y2ggKGZpbmFsIENoYXJ0RXhjZXB0aW9uIHBleCkgeworCQkJQWN0aXZhdG9yLmxvZ0Vycm9yKCJQcm9ibGVtIGluaXRpYWxpemluZyBjaGFydCIsIHBleCk7IC8vJE5PTi1OTFMtMSQKKwkJCXJldHVybjsKKwkJfQorCisJCWNvbnRyb2wgPSBhbmFseXNpc0NvbnRyb2w7CisKKwkJCisJCWNtID0gY3JlYXRlU2ltcGxlTGluZUNoYXJ0KGZpcnN0UHJvcGVydHksIGRhdGFTZXJpZXNNYXAsIGN5Y2xlTnVtYmVycywgTWVzc2FnZXMKKwkJCQkuZ2V0U3RyaW5nKCJDQy50aXRsZSIpKTsgLy8kTk9OLU5MUy0xJAorCQkKKwkJcmVzZXREYXRhKCk7CisJCWFkZFBhaW50TGlzdGVuZXIobmV3IFBhaW50TGlzdGVuZXIoKSB7CisJCQlwdWJsaWMgdm9pZCBwYWludENvbnRyb2woZmluYWwgUGFpbnRFdmVudCBwZSkgeworCisJCQkJZmluYWwgQ29tcG9zaXRlIHNvdXJjZSA9IChDb21wb3NpdGUpIHBlLmdldFNvdXJjZSgpOworCQkJCWZpbmFsIG9yZy5lY2xpcHNlLnN3dC5ncmFwaGljcy5SZWN0YW5nbGUgZCA9IHNvdXJjZQorCQkJCQkJLmdldENsaWVudEFyZWEoKTsKKworCQkJCWlmKGltZ0NoYXJ0ICE9IG51bGwpIGltZ0NoYXJ0LmRpc3Bvc2UoKTsKKwkJCQlpbWdDaGFydCA9IG5ldyBJbWFnZShzb3VyY2UuZ2V0RGlzcGxheSgpLCBkKTsKKwkJCQkKKwkJCQlpZHIuc2V0UHJvcGVydHkoSURldmljZVJlbmRlcmVyLkdSQVBISUNTX0NPTlRFWFQsIG5ldyBHQygKKwkJCQkJCWltZ0NoYXJ0KSk7CisJCQkJZmluYWwgQm91bmRzIGJvdW5kcyA9IEJvdW5kc0ltcGwuY3JlYXRlKGQueCwgZC55LCBkLndpZHRoLAorCQkJCQkJZC5oZWlnaHQpOworCQkJCWJvdW5kcy5zY2FsZSg3MmQgLyBpZHIuZ2V0RGlzcGxheVNlcnZlcigpLmdldERwaVJlc29sdXRpb24oKSk7CisJCQkJLy8gQk9VTkRTIE1VU1QgQkUgU1BFQ0lGSUVEIElOIFBPSU5UUworCisJCQkJdHJ5IHsKKwkJCQkJZ3IucmVuZGVyKGlkciwgZ3IuYnVpbGQoaWRyLmdldERpc3BsYXlTZXJ2ZXIoKSwgY20sIGJvdW5kcywKKwkJCQkJCQludWxsLCBudWxsLCBudWxsKSk7CisJCQkJCXBlLmdjLmRyYXdJbWFnZShpbWdDaGFydCwgZC54LCBkLnkpOworCQkJCX0gY2F0Y2ggKGZpbmFsIENoYXJ0RXhjZXB0aW9uIGNlKSB7CisJCQkJCUFjdGl2YXRvci5sb2dFcnJvcigiUHJvYmxlbSByZW5kZXJpbmcgY2hhcnQiLCBjZSk7IC8vJE5PTi1OTFMtMSQKKwkJCQl9CisJCQl9IC8vIHBhaW50Q29udHJvbAorCQl9IC8vIFBhaW50TGlzdGVuZXIKKwkJKTsKKwkJCisJCS8vQ3JlYXRlIGEgY29udGV4dCBtZW51IGZvciB0aGUgY2FudmFzCisJCWNyZWF0ZUNvbnRleHRNZW51KHRoaXMpOworCQkKKworCX0gLy8gUnVuSGlzdG9yeUNhbnZhcworCS8qKgorCSAqIENvbnN0cnVjdG9yLgorCSAqIAorCSAqIEBwYXJhbSBwYXJlbnQgIHRoZSBTV1QgcGFyZW50IG9mIHRoZSB7QGxpbmsgV2lkZ2V0fQorCSAqIEBwYXJhbSBvcmRpbmF0ZVN0cmluZyAKKwkgKiBAcGFyYW0geUF4aXNMYWJlbCAKKwkgKiBAcGFyYW0geEF4aXNMYWJlbAorCSAqIEBwYXJhbSBmb3JlZ3JvdW5kIAorCSAqIEBwYXJhbSBiYWNrZ3JvdW5kIAorCSAqIEBwYXJhbSBmcmFtZWNvbG9yIAorCSAqIEBwYXJhbSBjaGFydEluZGV4IHRoZSBpbmRleCBvZiB0aGlzIGNoYXJ0ICgwIGlmIG9ubHkgb25lKQorCSAqICAKKwkgKi8KKwlwdWJsaWMgUnVuSGlzdG9yeUNhbnZhcyhmaW5hbCBDb21wb3NpdGUgcGFyZW50LCAKKwkJCWZpbmFsIFN0cmluZyBvcmRpbmF0ZVN0cmluZywgCisJCQlmaW5hbCBTdHJpbmcgeUF4aXNMYWJlbCwgCisJCQlmaW5hbCBTdHJpbmcgeEF4aXNMYWJlbCwKKwkJCWZpbmFsIFN0cmluZyBmaXJzdFByb3BlcnR5LAorCQkJQ29sb3JEZWZpbml0aW9uIGZvcmVncm91bmQsCisJCQlDb2xvckRlZmluaXRpb24gYmFja2dyb3VuZCwKKwkJCUNvbG9yRGVmaW5pdGlvbiBmcmFtZWNvbG9yLAorCQkJaW50IGNoYXJ0SW5kZXgpIHsKKwkJc3VwZXIocGFyZW50LCBTV1QuRE9VQkxFX0JVRkZFUkVEIHwgU1dULkJPUkRFUik7CisJCU9yZGluYXRlX0xFR0VORCA9IG9yZGluYXRlU3RyaW5nOworCQlPcmRpbmF0ZV9BWElTID0geUF4aXNMYWJlbDsKKwkJWF9BWElTID0geEF4aXNMYWJlbDsKKwkJZm9yZUdyb3VuZCAJCQk9IGZvcmVncm91bmQ7CisJCWJhY2tncm91bmRHcm91bmQgCT0gYmFja2dyb3VuZDsKKwkJZnJhbWVDb2xvciAJCQk9IGZyYW1lY29sb3I7CisJCXRoaXMuY2hhcnRJbmRleCA9IGNoYXJ0SW5kZXg7CisJCQorCQlnciA9IEdlbmVyYXRvci5pbnN0YW5jZSgpOworCisJCXRyeSB7CisJCQlpZHIgPSBQbHVnaW5TZXR0aW5ncy5pbnN0YW5jZSgpLmdldERldmljZSgiZHYuU1dUIik7IC8vJE5PTi1OTFMtMSQJCQkKKwkJfSBjYXRjaCAoZmluYWwgQ2hhcnRFeGNlcHRpb24gcGV4KSB7CisJCQlBY3RpdmF0b3IubG9nRXJyb3IoIlByb2JsZW0gaW5pdGlhbGl6aW5nIGNoYXJ0IiwgcGV4KTsgLy8kTk9OLU5MUy0xJAorCQkJcmV0dXJuOworCQl9CisKKwkJY29udHJvbCA9IChBbmFseXNpc0NvbnRyb2wpIHBhcmVudDsKKworCQkKKwkJY20gPSBjcmVhdGVTaW1wbGVMaW5lQ2hhcnQoZmlyc3RQcm9wZXJ0eSwgZGF0YVNlcmllc01hcCwgY3ljbGVOdW1iZXJzLCBNZXNzYWdlcworCQkJCS5nZXRTdHJpbmcoIkNDLnRpdGxlIikpOyAvLyROT04tTkxTLTEkCisJCQorCQlyZXNldERhdGEoKTsKKwkJCisJCWFkZFBhaW50TGlzdGVuZXIobmV3IFBhaW50TGlzdGVuZXIoKSB7CisJCQlwdWJsaWMgdm9pZCBwYWludENvbnRyb2woZmluYWwgUGFpbnRFdmVudCBwZSkgeworCQkJCQorCQkJCWZpbmFsIENvbXBvc2l0ZSBzb3VyY2UgPSAoQ29tcG9zaXRlKSBwZS5nZXRTb3VyY2UoKTsKKwkJCQlmaW5hbCBvcmcuZWNsaXBzZS5zd3QuZ3JhcGhpY3MuUmVjdGFuZ2xlIGQgPSBzb3VyY2UKKwkJCQkJCS5nZXRDbGllbnRBcmVhKCk7CisKKwkJCQlpZihpbWdDaGFydCAhPSBudWxsKSBpbWdDaGFydC5kaXNwb3NlKCk7CisJCQkJaW1nQ2hhcnQgPSBuZXcgSW1hZ2Uoc291cmNlLmdldERpc3BsYXkoKSwgZCk7CisJCQkJaWRyLnNldFByb3BlcnR5KElEZXZpY2VSZW5kZXJlci5HUkFQSElDU19DT05URVhULCBuZXcgR0MoCisJCQkJCQlpbWdDaGFydCkpOworCQkJCWZpbmFsIEJvdW5kcyBib3VuZHMgPSBCb3VuZHNJbXBsLmNyZWF0ZShkLngsIGQueSwgZC53aWR0aCwKKwkJCQkJCWQuaGVpZ2h0KTsKKwkJCQlib3VuZHMuc2NhbGUoNzJkIC8gaWRyLmdldERpc3BsYXlTZXJ2ZXIoKS5nZXREcGlSZXNvbHV0aW9uKCkpOworCQkJCS8vIEJPVU5EUyBNVVNUIEJFIFNQRUNJRklFRCBJTiBQT0lOVFMKKworCQkJCXRyeSB7CisJCQkJCWdyLnJlbmRlcihpZHIsIGdyLmJ1aWxkKGlkci5nZXREaXNwbGF5U2VydmVyKCksIGNtLCBib3VuZHMsCisJCQkJCQkJbnVsbCwgbnVsbCwgbnVsbCkpOworCQkJCQlwZS5nYy5kcmF3SW1hZ2UoaW1nQ2hhcnQsIGQueCwgZC55KTsKKwkJCQl9IGNhdGNoIChmaW5hbCBDaGFydEV4Y2VwdGlvbiBjZSkgeworCQkJCQlBY3RpdmF0b3IubG9nRXJyb3IoIlByb2JsZW0gcmVuZGVyaW5nIGNoYXJ0IiwgY2UpOyAvLyROT04tTkxTLTEkCisJCQkJfQorCQkJfSAvLyBwYWludENvbnRyb2wKKwkJfSAvLyBQYWludExpc3RlbmVyCisJCSk7CisJCQorCQkvL0NyZWF0ZSBhIGNvbnRleHQgbWVudSBmb3IgdGhlIGNhbnZhcworCQljcmVhdGVDb250ZXh0TWVudSh0aGlzKTsKKwkJCisKKwl9IC8vIFJ1bkhpc3RvcnlDYW52YXMKKworCQorCQorCS8qKgorCSAqIFRoZSBtZXRob2Qgd2hpY2ggZ2V0cyB0aGUge0BsaW5rIFJ1bkhpc3RvcnlDYW52YXN9JyByZXBvcnRzIGxpc3QsIGFuZAorCSAqIGRyYXdzIGl0IG9uIHRoZSB7QGxpbmsgUnVuSGlzdG9yeUNhbnZhc30uCisJICogQHJldHVybiBpbnRlZ3JhdGVkRGlmZmVyZW5jZSBmb3IgZWFjaCBsaW5lIHNlcmllcworCSAqIAorCSAqLworCXB1YmxpYyB2b2lkIGRyYXcoKSB7CisJCQorCQkvL2NsZWFyRGF0YSgpOworCQlyZXNldERhdGEoKTsKKwkJeUF4aXNQcmltYXJ5LmdldFNlcmllc0RlZmluaXRpb25zKCkuY2xlYXIoKTsKKwkJCisJCS8vIGdldCB0aGUgbnVtYmVyIG9mIGxpbmVzIHRvIHBsb3QgZm9yIHRoaXMgdHlwZSBvZiBjaGFydAorCQlpbnQgbWF4TGluZXMgPSBjb250cm9sLmdldE51bVByb3BlcnRpZXMoY2hhcnRJbmRleCk7CisJCisJCS8vIGFkZCBhbGwgdGhlIHJlc3Qgb2YgdGhlIGxpbmUgc2VyaWVzIG5vdworCQlmb3IgKGludCBpID0gMDsgaSA8IG1heExpbmVzOyBpICsrKSB7CisJCQlTdHJpbmcgcHJvcGVydHkgPSBjb250cm9sLmdldFByb3BlcnR5KGNoYXJ0SW5kZXgsaSk7CisJCQkKKwkJCWlmKCFkYXRhU2VyaWVzTWFwLmNvbnRhaW5zS2V5KHByb3BlcnR5KSkgeworCQkJCS8vIG5ldyBwcm9wZXJ0eQorCQkJCURhdGFTZXJpZXMgc2VyaWVzID0gbmV3IERhdGFTZXJpZXMocHJvcGVydHksIGksIG92ZXJsYXlNb2RlKTsKKwkJCQlpZih2aXNpYmxlTWFwLmNvbnRhaW5zS2V5KHByb3BlcnR5KSkKKwkJCQkJCXNlcmllcy5zZXRWaXNpYmxlKHZpc2libGVNYXAuZ2V0KHByb3BlcnR5KSk7CisJCQkJZWxzZSB7CisJCQkJCXNlcmllcy5zZXRWaXNpYmxlKHRydWUpOworCQkJCQl2aXNpYmxlTWFwLnB1dChwcm9wZXJ0eSwgdHJ1ZSk7CisJCQkJfQorCQkJCQorCQkJCWRhdGFTZXJpZXNNYXAucHV0KHByb3BlcnR5LCBzZXJpZXMpOworCQkJfQorCQkJRGF0YVNlcmllcyBzZXJpZXMgPSBkYXRhU2VyaWVzTWFwLmdldChwcm9wZXJ0eSk7CisJCQlzZXJpZXMuc2hvdygpOworCQkJCisJCX0KKwkJCisJCS8vIHVwZGF0ZSB0aGUgY29udGV4dCBtZW51IHdpdGggdGhlIG5ldyBwcm9wZXJ0aWVzIHRvIHBsb3QKKwkJLy91cGRhdGVDb250ZXh0TWVudSh0aGlzKTsKKwkJCisJCW1heFkgPSAtMS4wOworCQkKKwkJCWJvb2xlYW4gc2V0Q3ljbGVzID0gZmFsc2U7CisJCQkvLyBHZXQgdGhlIHZhbHVlcyBmb3IgdGhlIHByb3BlcnR5IHRvIGJlIHBsb3R0ZWQKKwkJCWludCBtYXhQb2ludHMgPSAwOworCQkJCisJCQlmb3IgKGludCBpID0gMDsgaSA8IG1heExpbmVzOyBpKyspIHsKKwkJCQlTdHJpbmcgcHJvcGVydHkgPSBjb250cm9sLmdldFByb3BlcnR5KGNoYXJ0SW5kZXgsaSk7CisJCQkJZG91YmxlW10gZG91YmxlVmFsdWVzID0gY29udHJvbC5nZXRWYWx1ZXMoY2hhcnRJbmRleCxpKTsKKwkJCQlpZihkb3VibGVWYWx1ZXM9PW51bGwpIHsKKwkJCQkJZG91YmxlVmFsdWVzID0gbmV3IGRvdWJsZVswXTsKKwkJCQkJLy9kb3VibGVWYWx1ZXNbMF0gPSAwOworCQkJCX0KKwkJCQlEYXRhU2VyaWVzIHNlcmllcyA9IGRhdGFTZXJpZXNNYXAuZ2V0KHByb3BlcnR5KTsKKwkJCQkKKwkJCQlpZihkYXRhU2VyaWVzTWFwLmdldChwcm9wZXJ0eSkuaXNWaXNpYmxlKCkgPT0gdHJ1ZSkgeyAKKwkJCQkJZm9yIChpbnQgaiA9IDA7IGogPCBkb3VibGVWYWx1ZXMubGVuZ3RoOyBqKyspIHsKKwkJCQkJCQorCQkJCQkJCisJCQkJCQlpZihkb3VibGVWYWx1ZXNbal0gPD0gbWluWXNjYWxlKSB7CisJCQkJCQkJaWYoZG91YmxlVmFsdWVzW2pdID4gMC4wKSBtaW5Zc2NhbGUgPSBkb3VibGVWYWx1ZXNbal07CisJCQkJCQl9CisJCQkJCQkKKwkJCQkJCWlmKGRvdWJsZVZhbHVlc1tqXSA+PSBtYXhZKSB7CisJCQkJCQkJbWF4WSA9IGRvdWJsZVZhbHVlc1tqXTsKKwkJCQkJCQlkb3VibGUgbG9nID0gTWF0aC5mbG9vcihNYXRoLmxvZzEwKG1heFkpKTsKKwkJCQkJCQlkb3VibGUgYWRqdXN0ZWRNYXggPSAoTWF0aC5jZWlsKG1heFkvTWF0aC5wb3coMTAsIGxvZykpKSpNYXRoLnBvdygxMCwgbG9nKTsKKwkJCQkJCSAgICBpZihhZGp1c3RlZE1heCA8PSAxLjApIGFkanVzdGVkTWF4ID0gMS4wOworCQkJCQkJICAgIC8vYWRqdXN0ZWRNYXggPSBtYXhZKjEwMC4wOworCQkJCQkJICAgIC8vYWRqdXN0ZWRNYXggKz0gMS4wOworCQkJCQkJICAgIC8vaW50IG14ID0gKGludClhZGp1c3RlZE1heDsKKwkJCQkJCSAgICAvL2FkanVzdGVkTWF4ID0gKChkb3VibGUpbXgpLzEwMC4wOworCQkJCQkJCWlmICh1c2VMaW5lYXJUaW1lU2NhbGUpIHsKKwkJCQkJCQkJeUF4aXNQcmltYXJ5LmdldFNjYWxlKCkuc2V0TWF4KE51bWJlckRhdGFFbGVtZW50SW1wbC5jcmVhdGUoYWRqdXN0ZWRNYXgpKTsKKwkJCQkJCQkJZG91YmxlIHN0ZXAgPSBhZGp1c3RlZE1heCAvIDEwLjA7CisJCQkJCQkJCXlBeGlzUHJpbWFyeS5nZXRTY2FsZSgpLnNldFN0ZXAoc3RlcCk7CisJCQkJCQkJfSBlbHNlIHsKKwkJCQkJCQkJLy8ga2VlcCAyIHNpZ25pZmljYW50IGZpZ3VyZXMgb24gc2NhbGUgYXhpcworCQkJCQkJCQlkb3VibGUgeW1heCA9IE1hdGgubG9nKGFkanVzdGVkTWF4KTsKKwkJCQkJCQkJaWYoYWRqdXN0ZWRNYXggPiAxLjApIHsKKwkJCQkJCQkJCXltYXggKz0gMC40OTk7CisJCQkJCQkJCQlsb25nIGltYXggPSBNYXRoLnJvdW5kKHltYXgpOworCQkJCQkJCQkJeW1heCA9IGltYXg7CisJCQkJCQkJCX0KKwkJCQkJCQkJeUF4aXNQcmltYXJ5LmdldFNjYWxlKCkuc2V0TWF4KE51bWJlckRhdGFFbGVtZW50SW1wbC5jcmVhdGUoeW1heCkpOworCQkJCQkJCQlkb3VibGUgc3RlcCA9IHltYXgvMTAuMDsKKwkJCQkJCQkJeUF4aXNQcmltYXJ5LmdldFNjYWxlKCkuc2V0U3RlcChzdGVwKTsKKwkJCQkJCQl9CisJCQkJCQkJCisJCQkJCQkJCisJCQkJCQl9CisJCQkJCX0KKwkJCQl9IC8vIGlzIHZpc2libGUKKwkJCQkKKwkJCQkJLy8gQW55IHZhbHVlcz8KKwkJCQkJaWYgKGRvdWJsZVZhbHVlcy5sZW5ndGggPiAwKSB7CisJCQkJCQlpZiAobWF4UG9pbnRzIDwgZG91YmxlVmFsdWVzLmxlbmd0aCkgeworCQkJCQkJCW1heFBvaW50cyA9IGRvdWJsZVZhbHVlcy5sZW5ndGg7CisJCQkJCQl9CisJCQkJCQkKKwkJCQkJCWZvciAoaW50IGN5Y2xlTnVtYmVyID0gMDsgY3ljbGVOdW1iZXIgPCBkb3VibGVWYWx1ZXMubGVuZ3RoOyBjeWNsZU51bWJlcisrKSB7CisJCQkJCQkJCisJCQkJCQkJRG91YmxlIHZhbHVlOworCQkJCQkJCWRvdWJsZSBkaXNwbGF5VmFsdWUgPSBkb3VibGVWYWx1ZXNbY3ljbGVOdW1iZXJdOworCQkJCQkJCWlmIChkaXNwbGF5VmFsdWUgPD0gbWluWXNjYWxlKSB7CisJCQkJCQkJCS8vIExvZygwLjApIGlzIG5lZ2F0aXZlIGluZmluaXR5IHNvIGZvciBkaXNwbGF5IHB1cnBvc2VzIG9ubHkKKwkJCQkJCQkJLy8gd2Ugc2V0IHRoZSBtaW5pbXVtIGF4aXMgdmFsdWUgYXQgMC4xL1BPUFVMQVRJT04KKwkJCQkJCQkJZGlzcGxheVZhbHVlID0gbWluWXNjYWxlOworCQkJCQkJCX0KKwkJCQkJCQlpZiAodXNlTGluZWFyVGltZVNjYWxlKSB7CisJCQkJCQkJCXZhbHVlID0gbmV3IERvdWJsZShkaXNwbGF5VmFsdWUpOworCQkJCQkJCX0gZWxzZSB7CisJCQkJCQkJCXZhbHVlID0gbmV3IERvdWJsZShNYXRoLmxvZyhkaXNwbGF5VmFsdWUpKTsKKwkJCQkJCQl9CisJCQkJCQkJCisKKwkJCQkJCQlzZXJpZXMuYWRkVmFsdWUodmFsdWUpOworCQkJCQkJCQorCQkJCQkJCS8vIG9ubHkgZG8gb25jZSBmb3IgZmlyc3QgbGluZSBzZXJpZXMKKwkJCQkJCQlpZiAoIXNldEN5Y2xlcykgeworCQkJCQkJCQljeWNsZU51bWJlcnMuYWRkKEludGVnZXIudmFsdWVPZihjeWNsZU51bWJlcikpOwkKKwkJCQkJCQkJfQorCQkJCQkJfSAvLyBmb3IgY3ljbGVOdW1iZXIKKwkJCQkJCQorCQkJCQkJaWYoeEF4aXNQcmltYXJ5LmdldFNlcmllc0RlZmluaXRpb25zKCkuZ2V0KDApLmdldFNlcmllcygpLnNpemUoKSAhPSBjeWNsZU51bWJlcnMuc2l6ZSgpKSB7CisJCQkJCQkJLy8gVGhlIG51bWJlciBvZiBkYXRhIHBvaW50cyBoYXZlIGNoYW5nZWQsIGNyZWF0ZSBhIG5ldyBzZXJpZXMgZm9yIHRoZSB4IGF4aXMKKwkJCQkJCQl4QXhpc1ByaW1hcnkuZ2V0U2VyaWVzRGVmaW5pdGlvbnMoKS5jbGVhcigpOworCQkJCQkJCWZpbmFsIFNlcmllcyB4QXhpc1NlcmllcyA9IFNlcmllc0ltcGwuY3JlYXRlKCk7CisKKwkJCQkJCQlmaW5hbCBOdW1iZXJEYXRhU2V0IHhWYWx1ZXMgPSBOdW1iZXJEYXRhU2V0SW1wbC5jcmVhdGUoY3ljbGVOdW1iZXJzKTsKKwkJCQkJCQl4QXhpc1Nlcmllcy5zZXREYXRhU2V0KHhWYWx1ZXMpOworCQkJCQkJCWZpbmFsIFNlcmllc0RlZmluaXRpb24gc2RYID0gU2VyaWVzRGVmaW5pdGlvbkltcGwuY3JlYXRlKCk7CisKKwkJCQkJCQl4QXhpc1ByaW1hcnkuZ2V0U2VyaWVzRGVmaW5pdGlvbnMoKS5hZGQoc2RYKTsKKwkJCQkJCQlzZFguZ2V0U2VyaWVzKCkuYWRkKHhBeGlzU2VyaWVzKTsKKwkJCQkJCX0KKwkJCQkJCQkKKwkJCQkJCQorCQkJCQkJc2V0Q3ljbGVzID0gdHJ1ZTsgLy8gd2Ugc2V0IHRoZW0gb25seSBvbmNlCisJCQkJCQkKKwkJCQkJfSBlbHNlIHsKKwkJCQkJCS8vcmVzZXREYXRhKCk7CisJCQkJCX0KKwkJCX0gLy8gZm9yIGkgcHJvcGVydGllcworCisKKwkJaWYgKCF0aGlzLmlzRGlzcG9zZWQoKSkgeworCQkJcmVkcmF3KCk7CisJCX0KKwkJCisJCQorCQkvLwljb250cm9sLnVwZGF0ZU1lc3NhZ2UoU2NlbmFyaW9BbmFseXNpc1N1aXRlLldPUktJTkdfTVNHKTsKKwkJCisJfSAvLyBwYWludENvbnRyb2wKKworCS8qKgorCSAqIEBwYXJhbSBkYXRhU2VyaWVzTWFwCisJICogICAgICAgICAgICB0aGUge0BsaW5rIExpc3R9IHRoYXQgd2lsbCBjb250YWluIHRoZSByZWxhdGl2ZSB2YWx1ZXMKKwkgKiAgICAgICAgICAgICgwLjAtMS4wKSB0byBwbG90CisJICogQHBhcmFtIGN5Y2xlTnVtYmVycworCSAqICAgICAgICAgICAgdGhlIHtAbGluayBMaXN0fSBvZiBzaW11bGF0aW9uIGN5Y2xlIG51bWJlcnMgdGhhdCBtYXRjaCB0aGUKKwkgKiAgICAgICAgICAgIHJlbGF0aXZlIHZhbHVlcworCSAqIEBwYXJhbSBzZXJpZXNJZGVudGlmaWVyCisJICogICAgICAgICAgICB0aGUgdGl0bGUgb2YgdGhlIGNoYXJ0CisJICogQHJldHVybiBhIDxjb2RlPkNoYXJ0PC9jb2RlPgorCSAqLworCXB1YmxpYyBmaW5hbCBDaGFydCBjcmVhdGVTaW1wbGVMaW5lQ2hhcnQoCisJCQlmaW5hbCBTdHJpbmcgZmlyc3RQcm9wZXJ0eSwKKwkJCWZpbmFsIE1hcDxTdHJpbmcsIERhdGFTZXJpZXM+IGRhdGFTZXJpZXNNYXAsCisJCQlmaW5hbCBMaXN0PEludGVnZXI+IGN5Y2xlTnVtYmVycywgZmluYWwgU3RyaW5nIHNlcmllc0lkZW50aWZpZXIpIHsKKwkJCisJCWZpbmFsIENoYXJ0V2l0aEF4ZXMgcmV0VmFsdWUgPSBDaGFydFdpdGhBeGVzSW1wbC5jcmVhdGUoKTsKKworCQkKKwkJLy8gUGxvdAorCQlyZXRWYWx1ZS5nZXRCbG9jaygpLnNldEJhY2tncm91bmQoZnJhbWVDb2xvcik7CisJCWZpbmFsIFBsb3QgcCA9IHJldFZhbHVlLmdldFBsb3QoKTsKKwkJcC5nZXRDbGllbnRBcmVhKCkuc2V0QmFja2dyb3VuZChiYWNrZ3JvdW5kR3JvdW5kKTsKKworCQkvLyBUaXRsZQorCQkvLyBjd2FMaW5lLmdldFRpdGxlKCApLmdldExhYmVsKCApLmdldENhcHRpb24oICkuc2V0VmFsdWUoICJMaW5lIENoYXJ0IgorCQkvLyApOy8vJE5PTi1OTFMtMSQKKwkJcmV0VmFsdWUuZ2V0VGl0bGUoKS5zZXRWaXNpYmxlKGZhbHNlKTsKKworCQkvLyBMZWdlbmQKKwkJbGVnZW5kID0gcmV0VmFsdWUuZ2V0TGVnZW5kKCk7CisJCWZpbmFsIExpbmVBdHRyaWJ1dGVzIGxpYSA9IGxlZ2VuZC5nZXRPdXRsaW5lKCk7CisJCWxlZ2VuZC5nZXRUZXh0KCkuZ2V0Rm9udCgpLnNldFNpemUoOCk7CisJCWxpYS5zZXRTdHlsZShMaW5lU3R5bGUuU09MSURfTElURVJBTCk7CisJCWxlZ2VuZC5nZXRJbnNldHMoKS5zZXQoMTAsIDUsIDAsIDApOworCQlsZWdlbmQuZ2V0T3V0bGluZSgpLnNldFZpc2libGUoZmFsc2UpOworCQlsZWdlbmQuc2V0QW5jaG9yKEFuY2hvci5OT1JUSF9MSVRFUkFMKTsKKwkJbGVnZW5kLnNldFBvc2l0aW9uKFBvc2l0aW9uLkJFTE9XX0xJVEVSQUwpOworCQlsZWdlbmQuZ2V0VGV4dCgpLnNldENvbG9yKGZvcmVHcm91bmQpOworCQlsZWdlbmQuZ2V0T3V0bGluZSgpLnNldENvbG9yKGZvcmVHcm91bmQpOworCQkKKwkJLy8gY3dhTGluZS5nZXRMZWdlbmQoICkuZ2V0VGV4dCgpLmdldEZvbnQoKS5zZXRTaXplKDE2KTs7CisJCS8vIGN3YUxpbmUuZ2V0TGVnZW5kKCApLnNldFZpc2libGUoIHRydWUgKTsKKworCQkvLyAvLy8vLy8vLy8KKwkJLy8gWC1BeGlzCisJCXhBeGlzUHJpbWFyeSA9IHJldFZhbHVlLmdldFByaW1hcnlCYXNlQXhlcygpWzBdOworCQl4QXhpc1ByaW1hcnkuc2V0VHlwZShBeGlzVHlwZS5URVhUX0xJVEVSQUwpOworCQl4QXhpc1ByaW1hcnkuZ2V0TWFqb3JHcmlkKCkuc2V0VGlja1N0eWxlKFRpY2tTdHlsZS5CRUxPV19MSVRFUkFMKTsKKwkJeEF4aXNQcmltYXJ5LmdldE9yaWdpbigpLnNldFR5cGUoSW50ZXJzZWN0aW9uVHlwZS5WQUxVRV9MSVRFUkFMKTsKKwkJeEF4aXNQcmltYXJ5LmdldFRpdGxlKCkuc2V0VmlzaWJsZShmYWxzZSk7CisJCXhBeGlzUHJpbWFyeS5nZXRUaXRsZSgpLmdldENhcHRpb24oKS5nZXRGb250KCkuc2V0U2l6ZSg5KTsKKwkJeEF4aXNQcmltYXJ5LmdldFRpdGxlKCkuZ2V0Q2FwdGlvbigpLnNldENvbG9yKGZvcmVHcm91bmQpOworCQl4QXhpc1ByaW1hcnkuZ2V0TGFiZWwoKS5nZXRDYXB0aW9uKCkuc2V0Q29sb3IoZm9yZUdyb3VuZCk7CisKKwkJZmluYWwgU2VyaWVzIHhBeGlzU2VyaWVzID0gU2VyaWVzSW1wbC5jcmVhdGUoKTsKKworCQkvLyBuZXcgY29sb3JzCisJCXhBeGlzU2VyaWVzLmdldExhYmVsKCkuZ2V0Q2FwdGlvbigpLnNldENvbG9yKGZvcmVHcm91bmQpOworCQl4QXhpc1Nlcmllcy5nZXRMYWJlbCgpLmdldE91dGxpbmUoKS5zZXRDb2xvcihmb3JlR3JvdW5kKTsKKwkJLy8JCisKKwkJZmluYWwgTnVtYmVyRGF0YVNldCB4VmFsdWVzID0gTnVtYmVyRGF0YVNldEltcGwuY3JlYXRlKGN5Y2xlTnVtYmVycyk7CisJCXhBeGlzU2VyaWVzLnNldERhdGFTZXQoeFZhbHVlcyk7CisJCWZpbmFsIFNlcmllc0RlZmluaXRpb24gc2RYID0gU2VyaWVzRGVmaW5pdGlvbkltcGwuY3JlYXRlKCk7CisKKwkJeEF4aXNQcmltYXJ5LmdldFNlcmllc0RlZmluaXRpb25zKCkuYWRkKHNkWCk7CisJCXNkWC5nZXRTZXJpZXMoKS5hZGQoeEF4aXNTZXJpZXMpOworCisJCS8vIC8vLy8vLy8vCisJCS8vIFktQXhpcworCQl5QXhpc1ByaW1hcnkgPSByZXRWYWx1ZS5nZXRQcmltYXJ5T3J0aG9nb25hbEF4aXMoeEF4aXNQcmltYXJ5KTsKKwkJeUF4aXNQcmltYXJ5LmdldE1ham9yR3JpZCgpLnNldFRpY2tTdHlsZShUaWNrU3R5bGUuTEVGVF9MSVRFUkFMKTsKKworCQkvLyBOdW1iZXJEYXRhU2V0W10gb3J0aG9WYWx1ZXMgPSBuZXcgTnVtYmVyRGF0YVNldFtNQVhfTElORVNdOworCQkvLyBTZXJpZXNEZWZpbml0aW9uW10gc2RZID0gbmV3IFNlcmllc0RlZmluaXRpb25bTUFYX0xJTkVTXTsKKworCQkvLyBlbmQgWS1TZXJpZXMKKworCQl4QXhpc1ByaW1hcnkuZ2V0U2NhbGUoKS5zZXRNaW4oTnVtYmVyRGF0YUVsZW1lbnRJbXBsLmNyZWF0ZSgwLjApKTsKKwkJLy8geEF4aXNQcmltYXJ5LmdldFNjYWxlKCApLnNldE1heCggTnVtYmVyRGF0YUVsZW1lbnRJbXBsLmNyZWF0ZSggMTAuMCApCisJCS8vICk7CisJCS8vIHhBeGlzUHJpbWFyeS5nZXRTY2FsZSggKS5zZXRTdGVwKCAxICk7CisJCXhBeGlzUHJpbWFyeS5nZXRMYWJlbCgpLmdldENhcHRpb24oKS5nZXRGb250KCkuc2V0U2l6ZSg5KTsKKwkJeEF4aXNQcmltYXJ5LmdldExhYmVsKCkuZ2V0Q2FwdGlvbigpLnNldENvbG9yKGZvcmVHcm91bmQpOworCQl4QXhpc1ByaW1hcnkuZ2V0VGl0bGUoKS5zZXRWaXNpYmxlKHRydWUpOworCQl4QXhpc1ByaW1hcnkuZ2V0VGl0bGUoKS5nZXRDYXB0aW9uKCkuc2V0VmFsdWUoWF9BWElTKTsKKworCQl5QXhpc1ByaW1hcnkuZ2V0U2NhbGUoKS5zZXRNaW4oTnVtYmVyRGF0YUVsZW1lbnRJbXBsLmNyZWF0ZSgwLjApKTsKKwkJeUF4aXNQcmltYXJ5LmdldFNjYWxlKCkuc2V0TWF4KE51bWJlckRhdGFFbGVtZW50SW1wbC5jcmVhdGUoMS4wKSk7CisJCXlBeGlzUHJpbWFyeS5nZXRTY2FsZSgpLnNldFN0ZXAoMC4yNSk7CisJCXlBeGlzUHJpbWFyeS5nZXRMYWJlbCgpLmdldENhcHRpb24oKS5nZXRGb250KCkuc2V0U2l6ZSg5KTsKKwkJeUF4aXNQcmltYXJ5LmdldExhYmVsKCkuZ2V0Q2FwdGlvbigpLnNldENvbG9yKGZvcmVHcm91bmQpOworCQl5QXhpc1ByaW1hcnkuZ2V0VGl0bGUoICkuZ2V0Q2FwdGlvbiggKS5zZXRWYWx1ZSggT3JkaW5hdGVfQVhJUyApOworCQl5QXhpc1ByaW1hcnkuZ2V0VGl0bGUoICkuc2V0VmlzaWJsZSh0cnVlKTsKKwkJLy8geUF4aXNQcmltYXJ5LmdldE1ham9yR3JpZCgpLmdldExpbmVBdHRyaWJ1dGVzKCkuc2V0Q29sb3IoZm9yZUdyb3VuZCk7CisJCQorCQkvLyBmb3Igbm93IGdldCByZWFkeSB0byBjcmVhdGUgb25seSBvbmUgbGluZSAtIHdlIGhhdmUgbm8gZGF0YSB5ZXQuCisJCS8vIHdlIHdpbGwgYWRkIG1vcmUgbGluZXMgYXMgd2UgbmVlZCB0aGVtCisJCS8vIGhhbmRsZSBudWxsCisJCWlmKCFkYXRhU2VyaWVzTWFwLmNvbnRhaW5zS2V5KGZpcnN0UHJvcGVydHkpKSB7CisJCQlEYXRhU2VyaWVzIHNlcmllcyA9IG5ldyBEYXRhU2VyaWVzKE1lc3NhZ2VzLmdldFN0cmluZygiQVVUTy5USVRMRTEiKSwgMCwgb3ZlcmxheU1vZGUpOworCQkJZGF0YVNlcmllc01hcC5wdXQoZmlyc3RQcm9wZXJ0eSwgc2VyaWVzKTsKKwkJfQorCisJCXJldHVybiByZXRWYWx1ZTsKKwl9IC8vIGNyZWF0ZVNpbXBsZUxpbmVDaGFydAorCisJCisJLyoqCisJICogQ3JlYXRlIHRoZSB2aWV3J3MgY29udGV4dCBtZW51IGFuZCBhZGQgdGhlIGFjdGlvbiBoYW5kbGVycyB0byBpdC4KKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBjcmVhdGVDb250ZXh0TWVudShmaW5hbCBDb21wb3NpdGUgcGFyZW50KSB7CisKKwkJLy8gSW5pdCBhIENvbnRleHQgTWVudSBNYW5hZ2VyCisJCWZpbmFsIE1lbnVNYW5hZ2VyIGNvbnRleHRNZW51TWFuYWdlciA9IG5ldyBNZW51TWFuYWdlcigpOworCisJCS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisJCWxpbmVhclRpbWVBY3Rpb24gPSBuZXcgTGluZWFyU2NhbGVBY3Rpb24oKTsKKwkJbG9nVGltZUFjdGlvbiA9IG5ldyBMb2dTY2FsZUFjdGlvbigpOworCQljb250ZXh0TWVudU1hbmFnZXIuYWRkKGxpbmVhclRpbWVBY3Rpb24pOworCQljb250ZXh0TWVudU1hbmFnZXIuYWRkKGxvZ1RpbWVBY3Rpb24pOworCisKKwkJCisJCS8vIFBsYWNlIEhvbGRlciBmb3IgTWVudSBBZGRpdGlvbnMKKwkJY29udGV4dE1lbnVNYW5hZ2VyLmFkZChuZXcgU2VwYXJhdG9yKAorCQkJCUlXb3JrYmVuY2hBY3Rpb25Db25zdGFudHMuTUJfQURESVRJT05TKSk7CisKKwkJLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJCQorCQl2aWV3TGVnZW5kID0gbmV3IExlZ2VuZFZpZXdBY3Rpb24oKTsKKwkJaGlkZUxlZ2VuZCA9IG5ldyBMZWdlbmRIaWRlQWN0aW9uKCk7CisJCWNvbnRleHRNZW51TWFuYWdlci5hZGQodmlld0xlZ2VuZCk7CisJCWNvbnRleHRNZW51TWFuYWdlci5hZGQoaGlkZUxlZ2VuZCk7CisJCQorCQkvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwkJCisJCQorCQkvLyBQbGFjZSBIb2xkZXIgZm9yIE1lbnUgQWRkaXRpb25zCisJCWNvbnRleHRNZW51TWFuYWdlci5hZGQobmV3IFNlcGFyYXRvcigKKwkJCQlJV29ya2JlbmNoQWN0aW9uQ29uc3RhbnRzLk1CX0FERElUSU9OUykpOworCisJCXBvcFVwTWVudSA9IGNvbnRleHRNZW51TWFuYWdlci5jcmVhdGVDb250ZXh0TWVudShwYXJlbnQpOworCisJCS8vIFNldCB0aGUgY29udGV4dCBtZW51IGZvciB0aGUgdmlld2VyCisJCXBhcmVudC5zZXRNZW51KHBvcFVwTWVudSk7CisKKwl9IC8vIGNyZWF0ZUNvbnRleHRNZW51CisJCisJLyoqCisJICogVXBkYXRlIHRoZSB2aWV3J3MgY29udGV4dCBtZW51IGFuZCBhZGQgdGhlIGFjdGlvbiBoYW5kbGVycyB0byBpdC4KKwkgKi8KKwlwcml2YXRlIHZvaWQgdXBkYXRlQ29udGV4dE1lbnUoZmluYWwgQ29tcG9zaXRlIHBhcmVudCkgeworCisJCXBvcFVwTWVudS5kaXNwb3NlKCk7CisKKwkJLy8gSW5pdCBhIENvbnRleHQgTWVudSBNYW5hZ2VyCisJCWZpbmFsIE1lbnVNYW5hZ2VyIGNvbnRleHRNZW51TWFuYWdlciA9IG5ldyBNZW51TWFuYWdlcigpOworCisJCS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisJCWxpbmVhclRpbWVBY3Rpb24gPSBuZXcgTGluZWFyU2NhbGVBY3Rpb24oKTsKKwkJbG9nVGltZUFjdGlvbiA9IG5ldyBMb2dTY2FsZUFjdGlvbigpOworCQljb250ZXh0TWVudU1hbmFnZXIuYWRkKGxpbmVhclRpbWVBY3Rpb24pOworCQljb250ZXh0TWVudU1hbmFnZXIuYWRkKGxvZ1RpbWVBY3Rpb24pOworCQkKKwkJLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKworCQkvLyBQbGFjZSBIb2xkZXIgZm9yIE1lbnUgQWRkaXRpb25zCisJCWNvbnRleHRNZW51TWFuYWdlci5hZGQobmV3IFNlcGFyYXRvcigKKwkJCQlJV29ya2JlbmNoQWN0aW9uQ29uc3RhbnRzLk1CX0FERElUSU9OUykpOworCisJCS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCQkKKwkJdmlld0xlZ2VuZCA9IG5ldyBMZWdlbmRWaWV3QWN0aW9uKCk7CisJCWhpZGVMZWdlbmQgPSBuZXcgTGVnZW5kSGlkZUFjdGlvbigpOworCQljb250ZXh0TWVudU1hbmFnZXIuYWRkKHZpZXdMZWdlbmQpOworCQljb250ZXh0TWVudU1hbmFnZXIuYWRkKGhpZGVMZWdlbmQpOworCQkKKwkJLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJCQorCQkKKwkJLy8gUGxhY2UgSG9sZGVyIGZvciBNZW51IEFkZGl0aW9ucworCQljb250ZXh0TWVudU1hbmFnZXIuYWRkKG5ldyBTZXBhcmF0b3IoCisJCQkJSVdvcmtiZW5jaEFjdGlvbkNvbnN0YW50cy5NQl9BRERJVElPTlMpKTsKKworCQkKKwkJLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJCS8vIGFkZCB0aGUgZGlzcGxheWFibGUgcHJvcGVydGllcworCQlmb3IgKGludCBpID0gMDsgaSA8IGNvbnRyb2wuZ2V0TnVtUHJvcGVydGllcyhjaGFydEluZGV4KTsgaSArKykgeworCQkJCisJCQlTdHJpbmcgbmV4dFByb3AgPSBjb250cm9sLmdldFByb3BlcnR5KGNoYXJ0SW5kZXgsaSk7CisJCQlEYXRhU2VyaWVzIHNlcmllcyA9IGRhdGFTZXJpZXNNYXAuZ2V0KG5leHRQcm9wKTsKKwkJCURpc3BsYXlhYmxlUHJvcGVydHkgcHJvcGVydHkgPSBuZXcgRGlzcGxheWFibGVQcm9wZXJ0eShuZXh0UHJvcCwgc2VyaWVzLmlzVmlzaWJsZSgpKTsKKwkJCWNvbnRleHRNZW51TWFuYWdlci5hZGQocHJvcGVydHkpOworCQl9CisKKwkJLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKwkJLy8gUGxhY2UgSG9sZGVyIGZvciBNZW51IEFkZGl0aW9ucworCQljb250ZXh0TWVudU1hbmFnZXIuYWRkKG5ldyBTZXBhcmF0b3IoCisJCQkJSVdvcmtiZW5jaEFjdGlvbkNvbnN0YW50cy5NQl9BRERJVElPTlMpKTsKKworCQkvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworCQlmaW5hbCBNZW51IHBvcFVwTWVudSA9IGNvbnRleHRNZW51TWFuYWdlci5jcmVhdGVDb250ZXh0TWVudShwYXJlbnQpOworCisJCS8vIFNldCB0aGUgY29udGV4dCBtZW51IGZvciB0aGUgdmlld2VyCisJCXBhcmVudC5zZXRNZW51KHBvcFVwTWVudSk7CisKKworCX0gLy8gdXBkYXRlQ29udGV4dE1lbnUKKworCisJCisJLyoqCisJICogU2V0cyB0aGUgY29sb3JzIGZvciBhIG4gYXJyYXkgb2YgTGluZVNlcmllcyBnaXZlbiB0aGUgcHJvcGVydHkgdG8gUGxvdAorCSAqIGZvciBlYWNoLiBUcnkgdG8gc2V0IGNvbG9yIGZyb20gdGhlIHByZWZlcmVuY2VzIChpZiBzcGVjaWZpZWQgZm9yIHRoYXQKKwkgKiBwcm9wZXJ0eSkgb3RoZXJ3aXNlIHNldHMgbGluZSBjb2xvciB0byBibHVlLgorCSAqIAorCSAqIEBwYXJhbSBwcm9wZXJ0aWVzVG9QbG90CisJICogQHBhcmFtIGxzTGlzdAorCSAqLworCXB1YmxpYyBzdGF0aWMgdm9pZCBzZXRDb2xvckRlZnMoCisJCQlmaW5hbCBMaXN0PFN0cmluZz4gcHJvcGVydGllc1RvUGxvdCwKKwkJCWZpbmFsIExpc3Q8TGluZVNlcmllcz4gbHNMaXN0KSB7CisJCS8vIHRoZSBkZWZhdWx0IGxpbmUgY29sb3IKKworCQkvLyBpZiBwb3NzaWJsZSBnZXQgY29sb3IgZnJvbSBwcmVmZXJlbmNlcworCQlmaW5hbCBNYXA8U3RyaW5nLCBDb2xvcj4gY29sb3JNYXAgPSBWaXN1YWxpemF0aW9uUHJlZmVyZW5jZVBhZ2UKKwkJCQkuZ2V0Q29sb3JNYXBwaW5nKCk7CisJCWZvciAoaW50IGkgPSAwOyBpIDwgbHNMaXN0LnNpemUoKTsgaSsrKSB7CisJCQlDb2xvckRlZmluaXRpb24gY29sb3IgPSBDb2xvckRlZmluaXRpb25JbXBsLkJMVUUoKTsKKworCQkJaWYgKChwcm9wZXJ0aWVzVG9QbG90ICE9IG51bGwpICYmIChwcm9wZXJ0aWVzVG9QbG90LnNpemUoKSA+IGkpKSB7CisJCQkJZmluYWwgU3RyaW5nIGtleSA9IHByb3BlcnRpZXNUb1Bsb3QuZ2V0KGkpOworCQkJCS8vIGxvb2sgb3IgdGhlIHByZWZlcmVuY2UgY29sb3IgYnkgbmFtZQorCQkJCWlmIChjb2xvck1hcC5jb250YWluc0tleShrZXkpKSB7CisJCQkJCWZpbmFsIENvbG9yIGMgPSBjb2xvck1hcC5nZXQoa2V5KTsKKwkJCQkJY29sb3IgPSBDb2xvckRlZmluaXRpb25JbXBsLmNyZWF0ZShjLmdldFJlZCgpLAorCQkJCQkJCWMuZ2V0R3JlZW4oKSwgYy5nZXRCbHVlKCkpOworCQkJCX0KKwkJCQlsc0xpc3QuZ2V0KGkpLnNldFNlcmllc0lkZW50aWZpZXIoa2V5KTsKKwkJCQlsc0xpc3QuZ2V0KGkpLmdldExpbmVBdHRyaWJ1dGVzKCkuc2V0Q29sb3IoY29sb3IpOworCQkJfSBlbHNlIHsKKworCQkJCWlmIChsc0xpc3QuZ2V0KGkpICE9IG51bGwpIHsKKwkJCQkJbHNMaXN0LmdldChpKS5zZXRTZXJpZXNJZGVudGlmaWVyKCIgIik7CisJCQkJCWxzTGlzdC5nZXQoaSkuZ2V0TGluZUF0dHJpYnV0ZXMoKS5zZXRDb2xvcihjb2xvcik7CisJCQkJfQorCQkJfQorCQl9CisJCXJldHVybjsKKwl9Ly8gZ2V0Q29sb3JEZWYKKworCisJCisKKwkvKioKKwkgKiBEaXNwb3NlcyB0aGUgQ29sb3Igb2JqZWN0cworCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGRpc3Bvc2UoKSB7CisJCXN1cGVyLmRpc3Bvc2UoKTsKKwl9CisKKwkvKioKKwkgKiByZXNldAorCSAqLworCXB1YmxpYyB2b2lkIHJlc2V0KCkgeworCQlyZXNldERhdGEoKTsKKwkJcmVkcmF3KCk7CisJfQorCisJcHJvdGVjdGVkIHZvaWQgcmVzZXREYXRhKCkgeworCQljbGVhckRhdGEoKTsKKwkKKwkJY3ljbGVOdW1iZXJzLmFkZChJbnRlZ2VyLnZhbHVlT2YoMCkpOworCX0KKworCXByb3RlY3RlZCB2b2lkIGNsZWFyRGF0YSgpIHsKKwkJCisJCWRhdGFTZXJpZXNNYXAuY2xlYXIoKTsKKwkJY3ljbGVOdW1iZXJzLmNsZWFyKCk7CisJfQorCisJCisJLyoqCisJICogdG9nZ2xlIHRoZSBzY2FsZSBmcm9tIGxvZ2FyaXRobWljIHRvIGxpbmVhcgorCSAqLworCXZvaWQgdG9nZ2xlQXhpc1NjYWxlKCkgeworCQlpZiAodXNlTGluZWFyVGltZVNjYWxlKSB7IC8vU3dpdGNoIHRvIGxvZ2FyaXRobWljIHNjYWxlCisJCQlsb2dUaW1lQWN0aW9uLnNldENoZWNrZWQodHJ1ZSk7CisJCQlsaW5lYXJUaW1lQWN0aW9uLnNldENoZWNrZWQoZmFsc2UpOworCQkJLy9KdXN0IHVzaW5nIHRoZSBmb2xsb3dpbmcgYXhpcyB0eXBlLCB0byBtb3ZlIHRvIGxvZyBzY2FsZSwgZGlkbid0IHdvcmsKKwkJCS8veUF4aXNQcmltYXJ5LnNldFR5cGUoQXhpc1R5cGUuTE9HQVJJVEhNSUNfTElURVJBTCk7CisJCQl5QXhpc1ByaW1hcnkuZ2V0U2NhbGUoKS5zZXRNaW4obnVsbCk7CisJCQl5QXhpc1ByaW1hcnkuZ2V0U2NhbGUoKS5zZXRNYXgobnVsbCk7CisJCQl5QXhpc1ByaW1hcnkuZ2V0U2NhbGUoKS51bnNldFN0ZXAoKTsKKwkJCXlBeGlzUHJpbWFyeS5nZXRTY2FsZSgpLnVuc2V0U3RlcE51bWJlcigpOworCQl9CisJCWVsc2UgeyAvL1N3aXRjaCB0byBsaW5lYXIgc2NhbGUKKwkJCWxvZ1RpbWVBY3Rpb24uc2V0Q2hlY2tlZChmYWxzZSk7CisJCQlsaW5lYXJUaW1lQWN0aW9uLnNldENoZWNrZWQodHJ1ZSk7CisJCQkvL3lBeGlzUHJpbWFyeS5zZXRUeXBlKEF4aXNUeXBlLkxJTkVBUl9MSVRFUkFMKTsKKwkJCXlBeGlzUHJpbWFyeS5nZXRTY2FsZSgpLnNldE1pbihOdW1iZXJEYXRhRWxlbWVudEltcGwuY3JlYXRlKDAuMCkpOworCQkJeUF4aXNQcmltYXJ5LmdldFNjYWxlKCkuc2V0TWF4KE51bWJlckRhdGFFbGVtZW50SW1wbC5jcmVhdGUoMS4wKSk7CisJCQl5QXhpc1ByaW1hcnkuZ2V0U2NhbGUoKS5zZXRTdGVwKDAuMjUpOworCQl9CisJCXVzZUxpbmVhclRpbWVTY2FsZSA9ICF1c2VMaW5lYXJUaW1lU2NhbGU7CisJCWRyYXcoKTsKKwl9CisJCisKKwkvKioKKwkgKiB0b2dnbGUgdGhlIHNjYWxlIGZyb20gbG9nYXJpdGhtaWMgdG8gbGluZWFyCisJICovCisJdm9pZCB0b2dnbGVMZWdlbmQoKSB7CisJCWlmIChzaG93TGVnZW5kKSB7IC8vU3dpdGNoIHRvIGhpZGUKKwkJCXZpZXdMZWdlbmQuc2V0Q2hlY2tlZChmYWxzZSk7CisJCQloaWRlTGVnZW5kLnNldENoZWNrZWQodHJ1ZSk7CisJCQlsZWdlbmQuc2V0VmlzaWJsZShmYWxzZSk7CisJCX0KKwkJZWxzZSB7IC8vU3dpdGNoIHRvIHZpZXcKKwkJCXZpZXdMZWdlbmQuc2V0Q2hlY2tlZCh0cnVlKTsKKwkJCWhpZGVMZWdlbmQuc2V0Q2hlY2tlZChmYWxzZSk7CisJCQlsZWdlbmQuc2V0VmlzaWJsZSh0cnVlKTsKKwkJfQorCQlzaG93TGVnZW5kID0gIXNob3dMZWdlbmQ7CisJCWRyYXcoKTsKKwl9CisKKworCS8qKgorCSAqIEFjdGlvbiB0byBzaG93IHRoZSBsZWdlbmQKKwkgKi8KKwlwcm90ZWN0ZWQgY2xhc3MgTGVnZW5kVmlld0FjdGlvbiBleHRlbmRzIEFjdGlvbiB7CisJCXB1YmxpYyBMZWdlbmRWaWV3QWN0aW9uKCkKKwkJeworCQkJc3VwZXIoTWVzc2FnZXMuZ2V0U3RyaW5nKCJDb250ZXh0TWVudS5TaG93TGVnZW5kIiksIElBY3Rpb24uQVNfQ0hFQ0tfQk9YKTsKKwkJCXNldENoZWNrZWQoc2hvd0xlZ2VuZCk7CisJCX0KKworCQkvKioKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uQWN0aW9uI2dldFRleHQoKQorCQkgKi8KKwkJQE92ZXJyaWRlCisJCXB1YmxpYyBTdHJpbmcgZ2V0VGV4dCgpIHsKKwkJCXJldHVybiBNZXNzYWdlcy5nZXRTdHJpbmcoIkNvbnRleHRNZW51LlNob3dMZWdlbmQiKTsKKwkJfQorCisJCS8qKgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5BY3Rpb24jcnVuKCkKKwkJICovCisJCUBPdmVycmlkZQorCQlwdWJsaWMgdm9pZCBydW4oKSB7CisJCQlpZiAoc2hvd0xlZ2VuZCkgeworCQkJCXNldENoZWNrZWQodHJ1ZSk7CisJCQkJLy9Ob3RoaW5nIHRvIGRvLiBJdCdzIGFscmVhZHkgbGluZWFyLXRpbWUuCisJCQl9CisJCQllbHNlIHsKKwkJCQl0b2dnbGVMZWdlbmQoKTsKKwkJCX0KKwkJCWRyYXcoKTsKKwkJfQorCX0gLy9MZWdlbmRWaWV3QWN0aW9uCisJCisJLyoqCisJICogQWN0aW9uIHRvIGhpZGUgdGhlIGxlZ2VuZAorCSAqLworCWNsYXNzIExlZ2VuZEhpZGVBY3Rpb24gZXh0ZW5kcyBBY3Rpb24gCXsKKwkJcHVibGljIExlZ2VuZEhpZGVBY3Rpb24oKQorCQl7CisJCQlzdXBlcihNZXNzYWdlcy5nZXRTdHJpbmcoIkNvbnRleHRNZW51LkhpZGVMZWdlbmQiKSwgSUFjdGlvbi5BU19DSEVDS19CT1gpOworCQkJc2V0Q2hlY2tlZCghc2hvd0xlZ2VuZCk7CisJCX0KKworCQkvKioKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uQWN0aW9uI2dldFRleHQoKQorCQkgKi8KKwkJQE92ZXJyaWRlCisJCXB1YmxpYyBTdHJpbmcgZ2V0VGV4dCgpIHsKKwkJCXJldHVybiBNZXNzYWdlcy5nZXRTdHJpbmcoIkNvbnRleHRNZW51LkhpZGVMZWdlbmQiKTsKKwkJfQorCisJCS8qKgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5BY3Rpb24jcnVuKCkKKwkJICovCisJCUBPdmVycmlkZQorCQlwdWJsaWMgdm9pZCBydW4oKSB7CisJCQlpZiAoIXNob3dMZWdlbmQpIHsKKwkJCQlzZXRDaGVja2VkKHRydWUpOworCQkJCS8vTm90aGluZyB0byBkby4gSXQncyBhbHJlYWR5IGxvZy10aW1lLgorCQkJfQorCQkJZWxzZSB7CisJCQkJdG9nZ2xlTGVnZW5kKCk7CisJCQl9CisJCQlkcmF3KCk7CisJCX0KKwl9Ly9MZWdlbmRIaWRlQWN0aW9uCisKKwkKKwkvKioKKwkgKiBzd2l0Y2ggdG8gbGluZWFyIHBsb3QgCisJICogCisJICovCisJcHJvdGVjdGVkIGNsYXNzIExpbmVhclNjYWxlQWN0aW9uIGV4dGVuZHMgQWN0aW9uIHsKKwkJcHVibGljIExpbmVhclNjYWxlQWN0aW9uKCkKKwkJeworCQkJc3VwZXIoTWVzc2FnZXMuZ2V0U3RyaW5nKCJDb250ZXh0TWVudS5MaW5lYXJUaW1lU2NhbGUiKSwgSUFjdGlvbi5BU19DSEVDS19CT1gpOworCQkJc2V0Q2hlY2tlZCh1c2VMaW5lYXJUaW1lU2NhbGUpOworCQl9CisKKwkJLyoqCisJCSAqIEBzZWUgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLkFjdGlvbiNnZXRUZXh0KCkKKwkJICovCisJCUBPdmVycmlkZQorCQlwdWJsaWMgU3RyaW5nIGdldFRleHQoKSB7CisJCQlyZXR1cm4gTWVzc2FnZXMuZ2V0U3RyaW5nKCJDb250ZXh0TWVudS5MaW5lYXJUaW1lU2NhbGUiKTsKKwkJfQorCisJCS8qKgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5BY3Rpb24jcnVuKCkKKwkJICovCisJCUBPdmVycmlkZQorCQlwdWJsaWMgdm9pZCBydW4oKSB7CisJCQlpZiAodXNlTGluZWFyVGltZVNjYWxlKSB7CisJCQkJc2V0Q2hlY2tlZCh0cnVlKTsKKwkJCQkvL05vdGhpbmcgdG8gZG8uIEl0J3MgYWxyZWFkeSBsaW5lYXItdGltZS4KKwkJCX0KKwkJCWVsc2UgeworCQkJCXRvZ2dsZUF4aXNTY2FsZSgpOworCQkJfQorCQkJZHJhdygpOworCQl9CisJfSAvL0xpbmVhclNjYWxlQWN0aW9uCisKKwkvKioKKwkgKiBzd2l0Y2ggdG8gc2VtaS1sb2cgcGxvdCAobG9nIHNjYWxlIG9uIHkgYXhpcykKKwkgKiAKKwkgKi8KKwljbGFzcyBMb2dTY2FsZUFjdGlvbiBleHRlbmRzIEFjdGlvbiAJeworCQlwdWJsaWMgTG9nU2NhbGVBY3Rpb24oKQorCQl7CisJCQlzdXBlcihNZXNzYWdlcy5nZXRTdHJpbmcoIkNvbnRleHRNZW51LkxvZ1RpbWVTY2FsZSIpLCBJQWN0aW9uLkFTX0NIRUNLX0JPWCk7CisJCQlzZXRDaGVja2VkKCF1c2VMaW5lYXJUaW1lU2NhbGUpOworCQl9CisKKwkJLyoqCisJCSAqIEBzZWUgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLkFjdGlvbiNnZXRUZXh0KCkKKwkJICovCisJCUBPdmVycmlkZQorCQlwdWJsaWMgU3RyaW5nIGdldFRleHQoKSB7CisJCQlyZXR1cm4gTWVzc2FnZXMuZ2V0U3RyaW5nKCJDb250ZXh0TWVudS5Mb2dUaW1lU2NhbGUiKTsKKwkJfQorCisJCS8qKgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5BY3Rpb24jcnVuKCkKKwkJICovCisJCUBPdmVycmlkZQorCQlwdWJsaWMgdm9pZCBydW4oKSB7CisJCQlpZiAoIXVzZUxpbmVhclRpbWVTY2FsZSkgeworCQkJCXNldENoZWNrZWQodHJ1ZSk7CisJCQkJLy9Ob3RoaW5nIHRvIGRvLiBJdCdzIGFscmVhZHkgbG9nLXRpbWUuCisJCQl9CisJCQllbHNlIHsKKwkJCQl0b2dnbGVBeGlzU2NhbGUoKTsKKwkJCX0KKwkJCWRyYXcoKTsKKwkJfQorCX0vL0xvZ1NjYWxlQWN0aW9uCisJCisJLyoqCisJICogRGlzcGxheWFibGVQcm9wZXJ0eQorCSAqCisJICovCisJcHJvdGVjdGVkIGNsYXNzIERpc3BsYXlhYmxlUHJvcGVydHkgZXh0ZW5kcyBBY3Rpb24KKwl7CisJCVN0cmluZyBwcm9wZXJ0eSA9IG51bGw7CisJCXB1YmxpYyBEaXNwbGF5YWJsZVByb3BlcnR5KFN0cmluZyBwcm9wZXJ0eSwgYm9vbGVhbiB2aXNpYmlsaXR5KQorCQl7CisJCQkJCXN1cGVyKHByb3BlcnR5LCBJQWN0aW9uLkFTX0NIRUNLX0JPWCk7CisJCQkJCXRoaXMucHJvcGVydHkgPSBwcm9wZXJ0eTsKKwkJCQkJc2V0Q2hlY2tlZCh2aXNpYmlsaXR5KTsKKwkJfQorCQkKKwkKKworCQkvKioKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uQWN0aW9uI2dldFRleHQoKQorCQkgKi8KKwkJQE92ZXJyaWRlCisJCXB1YmxpYyBTdHJpbmcgZ2V0VGV4dCgpIHsKKwkJCXJldHVybiBwcm9wZXJ0eTsKKwkJfQorCisJCS8qKgorCQkgKiBUb2dnbGUgdGhlIHN0YXRlCisJCSAqIEBzZWUgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLkFjdGlvbiNydW4oKQorCQkgKi8KKwkJQE92ZXJyaWRlCisJCXB1YmxpYyB2b2lkIHJ1bigpIHsKKwkJCQlEYXRhU2VyaWVzIHNlcmllcyA9IGRhdGFTZXJpZXNNYXAuZ2V0KHByb3BlcnR5KTsKKwkJCQlzZXJpZXMudG9nZ2xlVmlzaWJsZSgpOworCQkJCWRhdGFTZXJpZXNNYXAucHV0KHByb3BlcnR5LHNlcmllcyk7CisJCQkJc2V0Q2hlY2tlZChzZXJpZXMuaXNWaXNpYmxlKCkpOworCQkJCXZpc2libGVNYXAucHV0KHByb3BlcnR5LCBzZXJpZXMuaXNWaXNpYmxlKCkpOworCQkJCWRyYXcoKTsKKwkJfQorCX0vLyBEaXNwbGF5YWJsZVByb3BlcnR5CisJCisJCisJLyoqCisJICogSW5uZXIgY2xhc3MgRGF0YVNlcmllcworCSAqIGFsbCB0aGUgZGF0YSBvYmplY3RzIGZvciBhIHBsb3QKKwkgKgorCSAqLworCXByb3RlY3RlZCBjbGFzcyBEYXRhU2VyaWVzIAorCXsKKwkJcHVibGljIFN0cmluZyBwcm9wZXJ0eU5hbWUgPSAiIjsKKwkJCisJCXB1YmxpYyBMaXN0PERvdWJsZT4gcmVsYXRpdmVWYWx1ZXMgPSBuZXcgQXJyYXlMaXN0PERvdWJsZT4oKTsKKwkJcHVibGljIFNlcmllcyBsaW5lU2VyaWVzID0gbnVsbDsKKwkJcHJpdmF0ZSBib29sZWFuIHZpc2libGUgPSB0cnVlOworCQlwcml2YXRlIFNlcmllc0RlZmluaXRpb24gc2RZID0gbnVsbDsKKwkJcHJpdmF0ZSBpbnQgc2VyaWVzSW5kZXggPSAwOworCQlwcml2YXRlIGJvb2xlYW4gb3ZlcmxheU1vZGUgPSBmYWxzZTsKKwkJCisJCQorCQlwdWJsaWMgYm9vbGVhbiBpc1Zpc2libGUoKSB7CisJCQlyZXR1cm4gdmlzaWJsZTsKKwkJfQorCQlwdWJsaWMgdm9pZCBzZXRWaXNpYmxlKGJvb2xlYW4gc3RhdGUpIHsKKwkJCXZpc2libGUgPSBzdGF0ZTsKKwkJfQorCQkKKwkJcHVibGljIHZvaWQgdG9nZ2xlVmlzaWJsZSgpIHsKKwkJCXZpc2libGUgPSAhdmlzaWJsZTsKKwkJfQorCisJCS8qKgorCQkgKiAKKwkJICogQHBhcmFtIHByb3BlcnR5TmFtZQorCQkgKiBAcGFyYW0gaW5kZXgKKwkJICogQHBhcmFtIG92ZXJsYXkgCisJCSAqLworCQlwdWJsaWMgRGF0YVNlcmllcyhTdHJpbmcgcHJvcGVydHlOYW1lLCBpbnQgaW5kZXgsIGJvb2xlYW4gb3ZlcmxheSkgeworCQkJdGhpcy5wcm9wZXJ0eU5hbWUgPSBwcm9wZXJ0eU5hbWU7CisJCQl0aGlzLnNlcmllc0luZGV4ID0gaW5kZXg7CisJCQl0aGlzLm92ZXJsYXlNb2RlID0gb3ZlcmxheTsKKwkJCXJlbGF0aXZlVmFsdWVzID0gbmV3IEFycmF5TGlzdDxEb3VibGU+KCk7CisJCQlyZWxhdGl2ZVZhbHVlcy5hZGQobmV3IERvdWJsZSgwLjApKTsKKwkJCWFkZExpbmVTZXJpZXMocHJvcGVydHlOYW1lKTsKKwkJfQorCQkKKwkJcHVibGljIHZvaWQgYWRkVmFsdWUoRG91YmxlIHZhbCkgeworCQkJaWYocmVsYXRpdmVWYWx1ZXM9PW51bGwpIHJlbGF0aXZlVmFsdWVzID0gbmV3IEFycmF5TGlzdDxEb3VibGU+KCk7CisJCQlyZWxhdGl2ZVZhbHVlcy5hZGQodmFsKTsKKwkJfQorCQkKKwkJLyoqCisJCSAqIEBwYXJhbSBwcm9wZXJ0eU5hbWUKKwkJICogCisJCSAqLworCQlAU3VwcHJlc3NXYXJuaW5ncygiZGVwcmVjYXRpb24iKQorCQlwdWJsaWMgdm9pZCBhZGRMaW5lU2VyaWVzKGZpbmFsIFN0cmluZyBwcm9wZXJ0eU5hbWUpIHsKKwkJCQorCQkJZmluYWwgTnVtYmVyRGF0YVNldCBvcnRob1ZhbHVlcyA9IE51bWJlckRhdGFTZXRJbXBsCisJCQkJCS5jcmVhdGUocmVsYXRpdmVWYWx1ZXMpOworCQkJaWYobGluZVNlcmllcyA9PSBudWxsKSB7CisJCQkJbGluZVNlcmllcyA9IFNjYXR0ZXJTZXJpZXNJbXBsLmNyZWF0ZSgpOworCQkJCS8qCisJCQkJICogCisJCQkJICogQmFyIGNoYXJ0IHN0eWxlIGlzIHRvbyBzbG93IGZvciBnZW5lcmF0aW9uIG9mIGEgZmlsbAorCQkJCSAqIGlmIHdlIHdhbnQgYSBmaWxsIHdlIGNhbiB0cnkgdXNpbmcgdGhlIGRpZmZlcmVuY2UgcGxvdAorCQkJCSAqIHRvIGEgc3RyYWlnaHQgbGluZSBhdCB5PTAKKwkJCQkgKiAKKwkJCQkKKwkJCQlpZihwcm9wZXJ0eU5hbWUuaW5kZXhPZigiKiIpPj0xKSB7CisJCQkJCS8vIGJhcnNlcmllcyBtZXRob2RzCisJCQkJCWxpbmVTZXJpZXMgPSAoQmFyU2VyaWVzKSBCYXJTZXJpZXNJbXBsLmNyZWF0ZSgpOworCQkJCX0gZWxzZSB7CisJCQkJCWxpbmVTZXJpZXMgPSAoU2NhdHRlclNlcmllcykgU2NhdHRlclNlcmllc0ltcGwuY3JlYXRlKCk7CisJCQkJfQorCQkJCQorCQkJCSoKKwkJCQkqLworCQkJfSAvLyBpZiBsaW5lU2VyaWVzPT1udWxsCisJCQlsaW5lU2VyaWVzLnNldERhdGFTZXQob3J0aG9WYWx1ZXMpOworCQkJKChMaW5lU2VyaWVzKSBsaW5lU2VyaWVzKS5nZXRMaW5lQXR0cmlidXRlcygpLnNldFZpc2libGUodHJ1ZSk7CisJCQkoKExpbmVTZXJpZXMpIGxpbmVTZXJpZXMpLmdldExpbmVBdHRyaWJ1dGVzKCkuc2V0VGhpY2tuZXNzKDMpOworCQkJKChMaW5lU2VyaWVzKSBsaW5lU2VyaWVzKS5nZXRNYXJrZXJzKCkuY2xlYXIoKTsKKwkJCQorCQkJLy8gQXNzaWduIHRoZSBsaW5lIGNvbG9yCisJCQkvLyBiYXNlZCBvbiBzZWxlY3RlZCBwcm9wZXJ0eS4gRGVmYXVsdCBpcyBCbHVlCisJCQlzZXRDb2xvckRlZnMoc2VyaWVzSW5kZXgpOworCQkJLy8gSWYgdGhpcyBpcyB0aGUgInNlbGVjdGVkIiByZWdpb24gb2YgYSBncmFwaCBzZXQgdGhlIG1hcmtlciB0eXBlCisJCQorCQkJLy8gdGhlIHNlcmllcyBkZWYKKwkJCXNkWSA9IFNlcmllc0RlZmluaXRpb25JbXBsLmNyZWF0ZSgpOworCQkJc2RZLmdldFNlcmllc1BhbGV0dGUoKS51cGRhdGUoLTIpOworCQkJc2RZLmdldFNlcmllcygpLmFkZChsaW5lU2VyaWVzKTsKKwkJCXlBeGlzUHJpbWFyeS5nZXRTZXJpZXNEZWZpbml0aW9ucygpLmFkZChzZFkpOworCQkJCisJCQlyZXR1cm47CisJCX0vLyBhZGRMaW5lU2VyaWVzCisJCQorCQkvKiogCisJCSAqIGluIHJlc3BvbnNlIHRvIHVzZXIgYWN0aW9uIHRlbXBvcmFyaWx5IHJlbW92ZSB0aGUgbGluZSBzZXJpZXMgZnJvbSB0aGUgZ3JhcGgKKwkJICovCisJCXB1YmxpYyB2b2lkIGhpZGUoKSB7CisJCQlsaW5lU2VyaWVzLnNldFZpc2libGUoZmFsc2UpOworCQkJdmlzaWJsZSA9IGZhbHNlOworCQl9Ly8gaGlkZQorCQkKKwkJLyoqIAorCQkgKiBpbiByZXNwb25zZSB0byB1c2VyIGFjdGlvbiBhZGQgYmFjayB0aGUgbGluZSBzZXJpZXMgdG8gdGhlIGdyYXBoCisJCSAqLworCQlwdWJsaWMgdm9pZCBzaG93KCkgeworCQkJbGluZVNlcmllcy5zZXRWaXNpYmxlKHRydWUpOworCQkJdmlzaWJsZSA9IHRydWU7CisJCX0vLyBzaG93CisJCQorCisJCS8qKgorCQkgKiBPdmVybG9hZGVkIGFuZCBzaW1wbGUgbWV0aG9kIHRvIHNldCB0aGUgY29sb3JzCisJCSAqIGRvZXMgbm90IHVzZSB0aGUgcHJlZmVyZW5jZXMKKwkJICogCisJCSAqIFNldHMgdGhlIGNvbG9ycyBmb3IgYSBuIGFycmF5IG9mIExpbmVTZXJpZXMgZ2l2ZW4gdGhlIHByb3BlcnR5IHRvIFBsb3QKKwkJICogZm9yIGVhY2guIFRyeSB0byBzZXQgY29sb3IgZnJvbSB0aGUgcHJlZmVyZW5jZXMgKGlmIHNwZWNpZmllZCBmb3IgdGhhdAorCQkgKiBwcm9wZXJ0eSkgb3RoZXJ3aXNlIHNldHMgbGluZSBjb2xvciB0byBibHVlLgorCQkgKiBAcGFyYW0gcHJvcGVydHlOYW1lIAorCQkgKgorCQkgKi8KKwkJcHVibGljIHZvaWQgc2V0Q29sb3JEZWZzKGludCBpbmRleCkgeworCQkJLy8gdGhlIGRlZmF1bHQgbGluZSBjb2xvcgorCQkJaWYoaW5kZXggPj0gY29sb3JEZWZhdWx0Lmxlbmd0aCkgaW5kZXggPSAwOyAvLyBzaG91bGQgbmV2ZXIgaGFwcGVuCisJCQlDb2xvckRlZmluaXRpb24gY29sb3IgPSBjb2xvckRlZmF1bHRbaW5kZXhdOworCisJCQl0aGlzLmxpbmVTZXJpZXMuc2V0U2VyaWVzSWRlbnRpZmllcihwcm9wZXJ0eU5hbWUpOworCQkJaWYgKG92ZXJsYXlNb2RlKSB7CisJCQkJCSgoTGluZVNlcmllcyl0aGlzLmxpbmVTZXJpZXMpLmdldExpbmVBdHRyaWJ1dGVzKCkuc2V0Q29sb3IoY29sb3IpOworCQkJCQkoKExpbmVTZXJpZXMpdGhpcy5saW5lU2VyaWVzKS5nZXRMaW5lQXR0cmlidXRlcygpLnNldFN0eWxlKExpbmVTdHlsZS5ET1RURURfTElURVJBTCk7CisJCQl9IGVsc2UgeworCQkJCSgoTGluZVNlcmllcyl0aGlzLmxpbmVTZXJpZXMpLmdldExpbmVBdHRyaWJ1dGVzKCkuc2V0Q29sb3IoY29sb3IpOworCQkJfQorCQkJCisJCQkKKwkJfS8vIGdldENvbG9yRGVmcworCQkKKwkJLyoqCisJCSAqIFNldHMgdGhlIGNvbG9ycyBmb3IgYSBuIGFycmF5IG9mIExpbmVTZXJpZXMgZ2l2ZW4gdGhlIHByb3BlcnR5IHRvIFBsb3QKKwkJICogZm9yIGVhY2guIFRyeSB0byBzZXQgY29sb3IgZnJvbSB0aGUgcHJlZmVyZW5jZXMgKGlmIHNwZWNpZmllZCBmb3IgdGhhdAorCQkgKiBwcm9wZXJ0eSkgb3RoZXJ3aXNlIHNldHMgbGluZSBjb2xvciB0byBibHVlLgorCQkgKiBAcGFyYW0gcHJvcGVydHlOYW1lIAorCQkgKgorCQkgKi8KKwkJcHVibGljIHZvaWQgc2V0Q29sb3JEZWZzKFN0cmluZyBwcm9wZXJ0eU5hbWUpIHsKKwkJCS8vIHRoZSBkZWZhdWx0IGxpbmUgY29sb3IKKworCQkJLy8gaWYgcG9zc2libGUgZ2V0IGNvbG9yIGZyb20gcHJlZmVyZW5jZXMKKwkJCWZpbmFsIE1hcDxTdHJpbmcsIENvbG9yPiBjb2xvck1hcCA9IFZpc3VhbGl6YXRpb25QcmVmZXJlbmNlUGFnZS5nZXRDb2xvck1hcHBpbmcoKTsKKworCQkJLy8gZGVmYXVsdCBjb2xvcgorCQkJaW50IGNvbG9ySW5kZXggPSBzZXJpZXNJbmRleCAlIGNvbG9yRGVmYXVsdC5sZW5ndGg7CisJCQlDb2xvckRlZmluaXRpb24gY29sb3IgPSBjb2xvckRlZmF1bHRbY29sb3JJbmRleF07CisKKwkJCS8vIHByZWZlcnJlZCBjb2xvciBieSBuYW1lCisJCQlTdHJpbmcga2V5ID0gcHJvcGVydHlOYW1lLnN1YnN0cmluZygwLDEpOworCQkJCisJCQlpZiAoY29sb3JNYXAuY29udGFpbnNLZXkoa2V5KSkgeworCQkJCWZpbmFsIENvbG9yIGMgPSBjb2xvck1hcC5nZXQoa2V5KTsKKwkJCQljb2xvciA9IENvbG9yRGVmaW5pdGlvbkltcGwuY3JlYXRlKGMuZ2V0UmVkKCksIGMuZ2V0R3JlZW4oKSwgYy5nZXRCbHVlKCkpOworCQkJfQorCQkJCisJCQl0aGlzLmxpbmVTZXJpZXMuc2V0U2VyaWVzSWRlbnRpZmllcihwcm9wZXJ0eU5hbWUpOworCQkJaWYgKG92ZXJsYXlNb2RlKSB7CisJCQkJCSgoTGluZVNlcmllcyl0aGlzLmxpbmVTZXJpZXMpLmdldExpbmVBdHRyaWJ1dGVzKCkuc2V0Q29sb3IoQ29sb3JEZWZpbml0aW9uSW1wbC5HUkVZKCkpOworCQkJCQkoKExpbmVTZXJpZXMpdGhpcy5saW5lU2VyaWVzKS5nZXRMaW5lQXR0cmlidXRlcygpLnNldFN0eWxlKExpbmVTdHlsZS5ET1RURURfTElURVJBTCk7CisJCQl9IGVsc2UgeworCQkJCSgoTGluZVNlcmllcyl0aGlzLmxpbmVTZXJpZXMpLmdldExpbmVBdHRyaWJ1dGVzKCkuc2V0Q29sb3IoY29sb3IpOworCQkJfQorCQkJCisJCQkKKwkJfS8vIGdldENvbG9yRGVmcworCisJCS8qKgorCQkgKiBsZW5ndGggb2YgdGhlIHNlcmllcworCQkgKiBAcmV0dXJuIG51bWJlciBvZiBkYXRhIHBvaW50cworCQkgKi8KKwkJcHVibGljIGludCBnZXREYXRhU2l6ZSgpIHsKKwkJCXJldHVybiByZWxhdGl2ZVZhbHVlcy5zaXplKCk7CisJCX0KKwkJLy8gQWNjZXNzb3JzCisJCXB1YmxpYyBTdHJpbmcgZ2V0UHJvcGVydHlOYW1lKCkgeworCQkJcmV0dXJuIHByb3BlcnR5TmFtZTsKKwkJfQorCisJCXB1YmxpYyB2b2lkIHNldFByb3BlcnR5TmFtZShTdHJpbmcgcHJvcGVydHlOYW1lKSB7CisJCQl0aGlzLnByb3BlcnR5TmFtZSA9IHByb3BlcnR5TmFtZTsKKwkJfQorCisJCXB1YmxpYyBMaXN0PERvdWJsZT4gZ2V0UmVsYXRpdmVWYWx1ZXMoKSB7CisJCQlyZXR1cm4gcmVsYXRpdmVWYWx1ZXM7CisJCX0KKworCQlwdWJsaWMgdm9pZCBzZXRSZWxhdGl2ZVZhbHVlcyhMaXN0PERvdWJsZT4gcmVsYXRpdmVWYWx1ZXMpIHsKKwkJCXRoaXMucmVsYXRpdmVWYWx1ZXMgPSByZWxhdGl2ZVZhbHVlczsKKwkJfQorCisJCQorCisJCXB1YmxpYyB2b2lkIHNldExpbmVTZXJpZXMoTGluZVNlcmllcyBsaW5lU2VyaWVzKSB7CisJCQl0aGlzLmxpbmVTZXJpZXMgPSBsaW5lU2VyaWVzOworCQl9CisJfS8vIERhdGFTZXJpZXMKKwkvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworCQorfSAvLyBSdW5IaXN0b3J5Q2FudmFzCmRpZmYgLS1naXQgYS9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQvc3JjL29yZy9lY2xpcHNlL3N0ZW0vYW5hbHlzaXMvYXV0b21hdGljZXhwZXJpbWVudC92aWV3cy9tZXNzYWdlcy5wcm9wZXJ0aWVzIGIvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5hdXRvbWF0aWNleHBlcmltZW50L3NyYy9vcmcvZWNsaXBzZS9zdGVtL2FuYWx5c2lzL2F1dG9tYXRpY2V4cGVyaW1lbnQvdmlld3MvbWVzc2FnZXMucHJvcGVydGllcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44OWMwZjNmCi0tLSAvZGV2L251bGwKKysrIGIvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5hdXRvbWF0aWNleHBlcmltZW50L3NyYy9vcmcvZWNsaXBzZS9zdGVtL2FuYWx5c2lzL2F1dG9tYXRpY2V4cGVyaW1lbnQvdmlld3MvbWVzc2FnZXMucHJvcGVydGllcwpAQCAtMCwwICsxLDkzIEBACisjIG1lc3NhZ2VzLnByb3BlcnRpZXMKKyMKKyMgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyMgKiBDb3B5cmlnaHQgKGMpIDIwMDcsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisjICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworIyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorIyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisjICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyMgKgorIyAqIENvbnRyaWJ1dG9yczoKKyMgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisjICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyMgQ29tbWEgc2VwYXJhdGVkIHZhcmlhYmxlCitDU0MudGl0bGU9Q1NWCisKKworCitkY190aXRsZV9hX2V4cCA9IEF1dG9tYXRlZCBFeHBlcmltZW50CitkY19zb3VyY2VfYV9leHAgPSBodHRwOi8vd2lraS5lY2xpcHNlLm9yZy9SdW5uaW5nX2FuX0F1dG9tYXRlZF9FeHBlcmltZW50ICAgKGFuZCByZWZlcmVuY2VzIHRoZXJlLWluKQorZGNfZGVzY19hX2V4cCA9IEF1dG9tYXRlZCBFeHBlcmltZW50cyB1c2UgYSBOZWxkZXItTWVhZCBTaW1wbGV4IGFsZ29yaXRobSB0byBhdXRvbWF0aWNhbGx5IGV4cGxvcmUgYSBzZWxlY3RlZCBwYXJhbWV0ZXIgc3BhY2UgYW5kIGZpbmQgYSBiZXN0IGZpdCBvZiBhIG1vZGVsIHRvIGRhdGEgYmFzZWQgb24gYSBzcGVjaWZpZWQgZXJyb3IgZnVuY3Rpb24uCisKKworIyBBdXRvbWF0aWMgRXhwZXJpbWVudCB2aWV3CitBVVRPLlRJVExFPUF1dG9tYXRpYyBFeHBlcmltZW50CitBVVRPLlRJVExFTEFCRUw9QXV0b21hdGVkIEV4cGVyaW1lbnQKK0FVVE8uRVJST1I9RXJyb3IKK0FVVE8uVElUTEUxPUNvbnZlcmdlbmNlCitBVVRPLlRJVExFMj1FcnJvciB2cyBUaW1lIChMYXRlc3QpCitBVVRPLlRJVExFMz1FcnJvciB2cyBUaW1lIChCZXN0KQorQVVUTy5USVRMRTQ9UmVmIHZzIFRpbWUKK0FVVE8uVElUTEU1PUluY2QgdnMgVGltZSAoTGF0ZXN0KQorQVVUTy5SVU49UnVuIE51bWJlcgorQVVUTy5USU1FPVRpbWUKK0FVVE8uVkFMVUVTPUN1cnJlbnQgVmFsdWVzCitBVVRPLkNIQVJUUz1DaGFydHMKK0FVVE8uSElTVE9SWT1FcnJvciBDb252ZXJnZW5jZQorQVVUTy5FUlJPUlNFUklFUz1FcnJvciB2cyBUaW1lCitBVVRPLklOQ0lERU5DRT1JbmNpZGVuY2UKK0FVVE8uQUdHUkVHQVRFU0VSSUVTPUluY2lkZW5jZSB2cyBUaW1lCitBVVRPLkNPTlRST0xTPUNvbnRyb2xzCitBVVRPLlNFVFRJTkdTPVNldHRpbmdzCitBVVRPLlBBVVNFPVBhdXNlCitBVVRPLlJFU1RBUlQ9UmVzdGFydAorQVVUTy5SRVNUQVJUX0hFQURFUj1XaXRoIFBhcmFtZXRlcnMKK0FVVE8uU1RPUD1TdG9wCitBVVRPLkxBVEVTVD1Vc2UgTGF0ZXN0CitBVVRPLkJFU1Q9VXNlIEJlc3QKK0FVVE8uTk9URk9VTkRFUlJPUj1FUlJPUl9DSEFSVF9OT1RfRk9VTkQKKworIyBDb250ZXh0IG1lbnUgZW50cmllcworQ29udGV4dE1lbnUuTGluZWFyVGltZVNjYWxlPUxpbmVhciBTY2FsZQorQ29udGV4dE1lbnUuTG9nVGltZVNjYWxlPUxvZyBTY2FsZQorQ29udGV4dE1lbnUuTGluZWFyU2NhbGluZz1MaW5lYXIgU2NhbGUKK0NvbnRleHRNZW51LkxvZ1NjYWxpbmc9TG9nIFNjYWxlCitDb250ZXh0TWVudS5TaG93TGVnZW5kPVNob3cgTGVnZW5kCitDb250ZXh0TWVudS5IaWRlTGVnZW5kPUhpZGUgTGVnZW5kCisKKyNXaXphcmQgTWVzc2FnZXMKK1dJWi5BTEdPUklUSE09QWxnb3JpdGhtOgorQUxHLjE9Y2xhc3MKK0FMRy4yPVVuYWJsZSB0byBpbnN0YW50aWF0ZSBleHRlbnNpb24gcG9pbnQKKworI05lZGxlciBtZWFkIGFsZ29yaXRobQorTk0uTUFYSVRFUlM9TWF4aW11bSBJdGVyYXRpb25zCitOTS5SRUZFUkVOQ0U9UmVmZXJlbmNlIERhdGEgRm9sZGVyCitOTS5SRUZQSUNLRk9MREVSPVBpY2sgRm9sZGVyCitOTS5CQVNFU0NFTkFSSU89QmFzZSBTY2VuYXJpbworTk0uU0VMRUNUU0NFTkFSSU89U2VsZWN0IFNjZW5hcmlvCitOTS5FUlJPUkZVTkNUSU9OPUVycm9yIEZ1bmN0aW9uCitOTS5QQVJBTUVURVJTPVBhcmFtZXRlcnMKK05NLlBJQ0tQQVJBTT1QaWNrIGEgcGFyYW1ldGVyCitOTS5JTklUSUFMPUluaXRpYWwKK05NLk1JTj1Mb3dlciBCb3VuZAorTk0uTUFYPVVwcGVyIEJvdW5kCitOTS5TVEVQPVN0ZXAKK05NLkJBRFJFRkVSRU5DRT1TcGVjaWZ5IGEgdmFsaWQgcmVmZXJlbmNlIGZvbGRlcgorTk0uQkFEQkFTRVNDRU5BUklPPVNwZWNpZnkgYSB2YWxpZCBiYXNlIHNjZW5hcmlvCitOTS5CQURTVEFSVD1JbnZhbGlkIGluaXRpYWwgdmFsdWUKK05NLkJBRFNURVA9SW52YWxpZCBzdGVwIHZhbHVlCitOTS5QSUNLU0NFTkFSSU89UGljayBhIHNjZW5hcmlvIGZyb20geW91ciBwcm9qZWN0CitOTS5BVExFQVNUT05FUEFSQU09WW91IG5lZWQgdG8gaGF2ZSBhdCBsZWFzdCBvbmUgcGFyYW1ldGVyIHRvIGZpdCBpbiB5b3VyIG9wdGltaXphdGlvbgorTk0uQkFETUlOTUFYPU1pbiB2YWx1ZSBsYXJnZXIgdGhhbiBtYXggdmFsdWUhCitOTS5CQURNSU49SW52YWxpZCBtaW5pbXVtIHZhbHVlCitOTS5NQURNQVg9SW52YWxpZCBtYXhpbXVtIHZhbHVlCitOTS5CQURNQVhJVEVSUz1JbnZhbGlkIG1heGltdW0gaXRlcmF0aW9ucy4gU3BlY2lmeSBhbiBpbnRlZ2VyICgtMSBtZWFucyBubyBtYXhpbXVtKQorTk0uUkVJTklUTEFCRUw9UmUtaW5pdGlhbGl6ZQorTk0uTk8gPU5PCitOTS5ZRVM9WUVTCitOTS5UT0xFUkFOQ0U9VG9sZXJhbmNlCitOTS5QTFVTPSsKK05NLk1JTlVTPS0KK05NLlJFRkZPTERFUlRJVExFPVBpY2sgYSByZWZlcmVuY2UgZm9sZGVyCmRpZmYgLS1naXQgYS9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQvc3JjL29yZy9lY2xpcHNlL3N0ZW0vYW5hbHlzaXMvYXV0b21hdGljZXhwZXJpbWVudC92aWV3cy9tZXNzYWdlc19kZS5wcm9wZXJ0aWVzIGIvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5hdXRvbWF0aWNleHBlcmltZW50L3NyYy9vcmcvZWNsaXBzZS9zdGVtL2FuYWx5c2lzL2F1dG9tYXRpY2V4cGVyaW1lbnQvdmlld3MvbWVzc2FnZXNfZGUucHJvcGVydGllcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZGI2MDdmCi0tLSAvZGV2L251bGwKKysrIGIvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5hdXRvbWF0aWNleHBlcmltZW50L3NyYy9vcmcvZWNsaXBzZS9zdGVtL2FuYWx5c2lzL2F1dG9tYXRpY2V4cGVyaW1lbnQvdmlld3MvbWVzc2FnZXNfZGUucHJvcGVydGllcwpAQCAtMCwwICsxLDkzIEBACisjIG1lc3NhZ2VzLnByb3BlcnRpZXMKKyMKKyMgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyMgKiBDb3B5cmlnaHQgKGMpIDIwMDcsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisjICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworIyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorIyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisjICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyMgKgorIyAqIENvbnRyaWJ1dG9yczoKKyMgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisjICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyMgQ29tbWEgc2VwYXJhdGVkIHZhcmlhYmxlCitDU0MudGl0bGU9Q1NWCisKKworCitkY190aXRsZV9hX2V4cD1BdXRvbWF0aXNpZXJ0ZXMgRXhwZXJpbWVudAorZGNfc291cmNlX2FfZXhwPWh0dHA6Ly93aWtpLmVjbGlwc2Uub3JnL1J1bm5pbmdfYW5fQXV0b21hdGVkX0V4cGVyaW1lbnQgKHVuZCBSZWZlcmVuemVuIGdpYnQgZXMtaW4pCitkY19kZXNjX2FfZXhwPUF1dG9tYXRpc2llcnRlcyBFeHBlcmltZW50ZSBtaXQgZWluZW0gTmVsZGVyLU1lYWQgU2ltcGxleC1BbGdvcml0aG11cywgdW0gYXV0b21hdGlzY2ggZGVuIGF1c2dld1x1MDBlNGhsdGVuIFBhcmFtZXRlcnJhdW0genUgZXJrdW5kZW4gdW5kIGRpZSBiZXN0ZSBBbnBhc3N1bmcgZGVzIE1vZGVsbHMgYW4gZGllIERhdGVuIHp1IGZpbmRlbgorCisKKyMgQXV0b21hdGljIEV4cGVyaW1lbnQgdmlldworQVVUTy5USVRMRT1BdXRvbWF0aXNjaGVzIEV4cGVyaW1lbnQKK0FVVE8uVElUTEVMQUJFTD1BdXRvbWF0aXNpZXJ0ZXMgRXhwZXJpbWVudAorQVVUTy5FUlJPUj1GZWhsZXIKK0FVVE8uVElUTEUxPUtvbnZlcmdlbnoKK0FVVE8uVElUTEUyPUZlaGxlciBuYWNoIFplaXQgKE5ldWVzdGVyKQorQVVUTy5USVRMRTM9RmVobGVyIG5hY2ggWmVpdCAoQmVzdGVyKQorQVVUTy5USVRMRTQ9UmVmIHZzIFplaXQKK0FVVE8uVElUTEU1PUluQ0QgdnMgWmVpdCAoTmV1ZXN0ZSkKK0FVVE8uUlVOPVJ1biBhdXNmXHUwMGZjaHJlbgorQVVUTy5USU1FPVplaXQKK0FVVE8uVkFMVUVTPURlcnplaXRpZ2UgV2VydGUKK0FVVE8uQ0hBUlRTPUdyYWZpaworQVVUTy5ISVNUT1JZPUVycm9yIEtvbnZlcmdlbnoKK0FVVE8uRVJST1JTRVJJRVM9RmVobGVyIG5hY2ggWmVpdAorQVVUTy5JTkNJREVOQ0U9SW56aWRlbnoKK0FVVE8uQUdHUkVHQVRFU0VSSUVTPUluemlkZW56IHZzIFplaXQKK0FVVE8uQ09OVFJPTFM9U3RldWVydW5nCitBVVRPLlNFVFRJTkdTPUVpbnN0ZWxsdW5nZW4KK0FVVE8uUEFVU0U9UGF1c2llcmVuCitBVVRPLlJFU1RBUlQ9TmV1c3RhcnRlbgorQVVUTy5SRVNUQVJUX0hFQURFUj1NaXQgUGFyYW1ldGVybgorQVVUTy5TVE9QPVN0b3BwCitBVVRPLkxBVEVTVD1MZXR6dGVzIGJlbnV0emVuCitBVVRPLkJFU1Q9QmVzdGVzIGJlbnV0emVuCitBVVRPLk5PVEZPVU5ERVJST1I9RVJST1JfQ0hBUlRfTk9UX0ZPVU5ECisKKyMgQ29udGV4dCBtZW51IGVudHJpZXMKK0NvbnRleHRNZW51LkxpbmVhclRpbWVTY2FsZT1MaW5lYXJlIFNrYWxpZXJ1bmcKK0NvbnRleHRNZW51LkxvZ1RpbWVTY2FsZT1Mb2ctU2thbGEKK0NvbnRleHRNZW51LkxpbmVhclNjYWxpbmc9TGluZWFyZSBTa2FsaWVydW5nCitDb250ZXh0TWVudS5Mb2dTY2FsaW5nPUxvZy1Ta2FsYQorQ29udGV4dE1lbnUuU2hvd0xlZ2VuZD1TaG93IExlZ2VuZAorQ29udGV4dE1lbnUuSGlkZUxlZ2VuZD1MZWdlbmRlIGF1c2JsZW5kZW4KKworI1dpemFyZCBNZXNzYWdlcworV0laLkFMR09SSVRITT1BbGdvcml0aG11czoKK0FMRy4xPUtsYXNzZQorQUxHLjI9RXJ3ZXJpdGVydW5nc3B1bmt0ZSBrXHUwMGY2bm5lbiBuaWNodCBpbml0aWFsaXNpZXJ0IHdlcmRlbgorCisjTmVkbGVyIG1lYWQgYWxnb3JpdGhtCitOTS5NQVhJVEVSUz1NYXhpbWFsZSBJdGVyYXRpb25lbgorTk0uUkVGRVJFTkNFPVJlZnJlbnplbmRhdGVuIFZlcnplaWNobmlzCitOTS5SRUZQSUNLRk9MREVSPU9yZG5lciB3XHUwMGU0aGxlbgorTk0uQkFTRVNDRU5BUklPPUJhc2lzLVN6ZW5hcmlvCitOTS5TRUxFQ1RTQ0VOQVJJTz1TY2VuYXJpbyB3XHUwMGU0aGxlbgorTk0uRVJST1JGVU5DVElPTj1FcnJvci1GdW5rdGlvbgorTk0uUEFSQU1FVEVSUz1QYXJhbWV0ZXIKK05NLlBJQ0tQQVJBTT1XXHUwMGU0aGxlbiBTaWUgZWluZW4gUGFyYW1ldGVyCitOTS5JTklUSUFMPUluaXRpYWwKK05NLk1JTj1VbnRlcmVyIEdyZW56ZQorTk0uTUFYPU9iZXJlIEdyZW56ZQorTk0uU1RFUD1TY2hyaXR0CitOTS5CQURSRUZFUkVOQ0U9R1x1MDBmY2x0aWdlbiBSZWZlcmVuei1PcmRuZXIgYW5nZWJlbgorTk0uQkFEQkFTRVNDRU5BUklPPUdcdTAwZmNsdGlnZXMgQmFzaXMtU3plbmFyaW8gYW5nZWJlbgorTk0uQkFEU1RBUlQ9VW5nXHUwMGZjbHRpZ2VyIEFuZmFuZ3N3ZXJ0CitOTS5CQURTVEVQPVVuZ1x1MDBmY2x0aWdlIFNjaHJpdHR3ZWl0ZQorTk0uUElDS1NDRU5BUklPPVdcdTAwZTRobGVuIFNpZSBlaW4gU3plbmFyaW8gYXVzIGRlbSBQcm9qZWt0CitOTS5BVExFQVNUT05FUEFSQU09U2llIG1cdTAwZmNzc2VuIG1pbmRlc3RlbnMgZWluZW4gUGFyYW1ldGVyIGluIGRlciBPcHRpbWllcnVuZyBhbnBhc3NlbgorTk0uQkFETUlOTUFYPU1pbi1XZXJ0IGdyXHUwMGY2XHUwMGRmZXIgYWxzIG1heC1XZXJ0IQorTk0uQkFETUlOPVVuZ1x1MDBmY2x0aWdlciBNaW5pbWFsd2VydAorTk0uTUFETUFYPVVuZ1x1MDBmY2x0aWdlciBNYXhpbWFsd2VydAorTk0uQkFETUFYSVRFUlM9TWF4aW1hbGUgSXRlcmF0aW9uZW4gdW5nXHUwMGZjbHRpZy4gR2ViZW4gU2llIGVpbmVuIGdhbnp6YWhsaWdlbiBXZXJ0IGVpbiAoLTEgZlx1MDBmY3Iga2VpbiBNYXhpbXVtKQorTk0uUkVJTklUTEFCRUw9UmUtSW5pdGlhbGlzaWVydW5nCitOTS5OTz1OTworTk0uWUVTPUpBCitOTS5UT0xFUkFOQ0U9VG9sZXJhbnoKK05NLlBMVVM9KworTk0uTUlOVVM9LQorTk0uUkVGRk9MREVSVElUTEU9V1x1MDBlNGhsZW4gU2llIGVpbmVuIFJlZmVyZW56b3JkbmVyCmRpZmYgLS1naXQgYS9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQvc3JjL29yZy9lY2xpcHNlL3N0ZW0vYW5hbHlzaXMvYXV0b21hdGljZXhwZXJpbWVudC92aWV3cy9tZXNzYWdlc19rci5wcm9wZXJ0aWVzIGIvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5hdXRvbWF0aWNleHBlcmltZW50L3NyYy9vcmcvZWNsaXBzZS9zdGVtL2FuYWx5c2lzL2F1dG9tYXRpY2V4cGVyaW1lbnQvdmlld3MvbWVzc2FnZXNfa3IucHJvcGVydGllcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YzAzM2IzCi0tLSAvZGV2L251bGwKKysrIGIvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5hdXRvbWF0aWNleHBlcmltZW50L3NyYy9vcmcvZWNsaXBzZS9zdGVtL2FuYWx5c2lzL2F1dG9tYXRpY2V4cGVyaW1lbnQvdmlld3MvbWVzc2FnZXNfa3IucHJvcGVydGllcwpAQCAtMCwwICsxLDkzIEBACisjIG1lc3NhZ2VzLnByb3BlcnRpZXMKKyMKKyMgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyMgKiBDb3B5cmlnaHQgKGMpIDIwMDcsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisjICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworIyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorIyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisjICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyMgKgorIyAqIENvbnRyaWJ1dG9yczoKKyMgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisjICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyMgQ29tbWEgc2VwYXJhdGVkIHZhcmlhYmxlCitDU0MudGl0bGU9Q1NWCisKKworCitkY190aXRsZV9hX2V4cD1cdWM3OTBcdWIzZDlcdWQ2NTRcdWI0MWMgXHVjMmU0XHVkNWQ4CitkY19zb3VyY2VfYV9leHA9aHR0cDovL3dpa2kuZWNsaXBzZS5vcmcvUnVubmluZ19hbl9BdXRvbWF0ZWRfRXhwZXJpbWVudCAoXHVhZGY4XHViOWFjXHVhY2UwIFx1Y2MzOFx1YWNlMCBcdWJiMzhcdWQ1Y2NcdWM1ZDBcdWMxMWMpCitkY19kZXNjX2FfZXhwPVx1Yzc5MFx1YjNkOVx1ZDY1NFx1YjQxYyBcdWMyZTRcdWQ1ZDhcdWM3NDAgXHViMTJjXHViMzU0LVx1YmJmOFx1YjRkYyBcdWMyZWNcdWQ1MGNcdWI4MDlcdWMyYTQgXHVjNTRjXHVhY2UwXHViOWFjXHVjOTk4XHVjNzQ0IFx1YzBhY1x1YzZhOVx1ZDU1OFx1YzVlYyBcdWM3OTBcdWIzZDlcdWM3M2NcdWI4NWMgXHViOWU0XHVhYzFjIFx1YmNjMFx1YzIxOCBcdWFjZjVcdWFjMDRcdWM3NDQgXHVkMGQwXHVhZDZjXHVkNTU4XHVhY2UwIFx1ZDJiOVx1YzgxNSBcdWM1ZDBcdWI3ZWMgXHVkNTY4XHVjMjE4XHViOTdjIFx1YWUzMFx1YmMxOFx1YzczY1x1Yjg1YyBcdWIzNzBcdWM3NzRcdWQxMzAgXHViYWE4XHViMzc4XHVjNzU4IFx1YWMwMFx1YzdhNSBcdWNkNWNcdWM4MDFcdWNlNThcdWI5N2MgXHVjYzNlXHVjNzRjCisKKworIyBBdXRvbWF0aWMgRXhwZXJpbWVudCB2aWV3CitBVVRPLlRJVExFPVx1Yzc5MFx1YjNkOVx1ZDY1NFx1YjQxYyBcdWMyZTRcdWQ1ZDgKK0FVVE8uVElUTEVMQUJFTD1cdWM3OTBcdWIzZDlcdWQ2NTRcdWI0MWMgXHVjMmU0XHVkNWQ4CitBVVRPLkVSUk9SPVx1YzYyNFx1Yjk1OAorQVVUTy5USVRMRTE9XHVjMjE4XHViODM0CitBVVRPLlRJVExFMj1cdWM2MjRcdWI5NTggXHViMzAwIFx1YzJkY1x1YWMwNCAoXHVjZDVjXHVjMmUwKQorQVVUTy5USVRMRTM9XHVjNjI0XHViOTU4IFx1YjMwMCBcdWMyZGNcdWFjMDQgKFx1Y2Q1Y1x1YzEyMCkKK0FVVE8uVElUTEU0PVx1Y2MzOFx1Yzg3MCBcdWIzMDAgXHVjMmRjXHVhYzA0CitBVVRPLlRJVExFNT1JbmNkIFx1YjMwMCBcdWMyZGNcdWFjMDQgKFx1Y2Q1Y1x1YzJlMCkKK0FVVE8uUlVOPVx1YzJlNFx1ZDU4OSBcdWJjODhcdWQ2MzgKK0FVVE8uVElNRT1cdWMyZGNcdWFjMDQKK0FVVE8uVkFMVUVTPVx1ZDYwNFx1YzdhYyBcdWFjMTIKK0FVVE8uQ0hBUlRTPVx1Y2MyOFx1ZDJiOAorQVVUTy5ISVNUT1JZPVx1YzYyNFx1Yjk1OCBcdWNlZThcdWJjODRcdWM4MDRcdWMyYTQKK0FVVE8uRVJST1JTRVJJRVM9XHVjNjI0XHViOTU4IFx1YjMwMCBcdWMyZGNcdWFjMDQKK0FVVE8uSU5DSURFTkNFPVx1YmMxY1x1YzBkZAorQVVUTy5BR0dSRUdBVEVTRVJJRVM9XHViYzFjXHVjMGRkIFx1YjMwMCBcdWMyZGNcdWFjMDQKK0FVVE8uQ09OVFJPTFM9XHVjZWU4XHVkMmI4XHViODY0CitBVVRPLlNFVFRJTkdTPVx1YzEyNFx1YzgxNQorQVVUTy5QQVVTRT1cdWM5MTFcdWM5YzAKK0FVVE8uUkVTVEFSVD1cdWIyZTRcdWMyZGMgXHVjMmRjXHVjNzkxCitBVVRPLlJFU1RBUlRfSEVBREVSPVx1YjllNFx1YWMxYyBcdWJjYzBcdWMyMTgKK0FVVE8uU1RPUD1cdWM5MTFcdWM5YzAKK0FVVE8uTEFURVNUPVx1Y2Q1Y1x1YzJlMCBcdWMwYWNcdWM2YTkKK0FVVE8uQkVTVD1cdWNkNWNcdWMxMjAgXHViYzI5XHVjMmRkIFx1YzBhY1x1YzZhOQorQVVUTy5OT1RGT1VOREVSUk9SPUVSUk9SX0NIQVJUX05PVF9GT1VORAorCisjIENvbnRleHQgbWVudSBlbnRyaWVzCitDb250ZXh0TWVudS5MaW5lYXJUaW1lU2NhbGU9XHVjMTIwXHVkNjE1IFx1YzJhNFx1Y2YwMFx1Yzc3YworQ29udGV4dE1lbnUuTG9nVGltZVNjYWxlPVx1Yjg1Y1x1YWRmOCBcdWMyYTRcdWNmMDBcdWM3N2MKK0NvbnRleHRNZW51LkxpbmVhclNjYWxpbmc9XHVjMTIwXHVkNjE1IFx1YzJhNFx1Y2YwMFx1Yzc3YworQ29udGV4dE1lbnUuTG9nU2NhbGluZz1cdWI4NWNcdWFkZjggXHVjMmE0XHVjZjAwXHVjNzdjCitDb250ZXh0TWVudS5TaG93TGVnZW5kPVx1ZDQ1Y1x1YzJkYyBcdWJjOTRcdWI4NDAKK0NvbnRleHRNZW51LkhpZGVMZWdlbmQ9XHViYzk0XHViODQwIFx1YzIyOFx1YWUzMFx1YWUzMAorCisjV2l6YXJkIE1lc3NhZ2VzCitXSVouQUxHT1JJVEhNPVx1YzU0Y1x1YWNlMFx1YjlhY1x1Yzk5OCA6CitBTEcuMT1cdWQwNzRcdWI3OThcdWMyYTQKK0FMRy4yPVx1ZDY1NVx1YzdhNSBcdWM5YzBcdWM4MTBcdWM3NDQgXHVjNjA4XHVjMmRjXHVkNjU0IFx1ZDU2MCBcdWMyMTggXHVjNWM2XHVjNzRjCisKKyNOZWRsZXIgbWVhZCBhbGdvcml0aG0KK05NLk1BWElURVJTPVx1Y2Q1Y1x1YjMwMCBcdWJjMThcdWJjZjUKK05NLlJFRkVSRU5DRT1cdWNjMzhcdWM4NzAgXHViMzcwXHVjNzc0XHVkMTMwIFx1ZDNmNFx1YjM1NAorTk0uUkVGUElDS0ZPTERFUj1cdWQzZjRcdWIzNTQgXHVjMTIwXHVkMGRkCitOTS5CQVNFU0NFTkFSSU89XHVhZTMwXHViY2Y4IFx1YzJkY1x1YjA5OFx1YjlhY1x1YzYyNAorTk0uU0VMRUNUU0NFTkFSSU89XHVjMmRjXHViMDk4XHViOWFjXHVjNjI0IFx1YzEyMFx1ZDBkZAorTk0uRVJST1JGVU5DVElPTj1cdWM2MjRcdWI5NTggXHVkNTY4XHVjMjE4CitOTS5QQVJBTUVURVJTPVx1YjllNFx1YWMxYyBcdWJjYzBcdWMyMTgKK05NLlBJQ0tQQVJBTT1cdWI5ZTRcdWFjMWMgXHViY2MwXHVjMjE4XHViOTdjIFx1YzEyMFx1ZDBkZAorTk0uSU5JVElBTD1cdWNkMDhcdWFlMzAKK05NLk1JTj1cdWQ1NThcdWM3MDQgXHVhY2JkXHVhY2M0CitOTS5NQVg9XHVjMGMxXHVjNzA0IFx1YmM5NFx1YzcwNAorTk0uU1RFUD1cdWIyZThcdWFjYzQKK05NLkJBRFJFRkVSRU5DRT1cdWM3MjBcdWQ2YThcdWQ1NWMgXHVjYzM4XHVjODcwIFx1ZDNmNFx1YjM1NCBcdWM5YzBcdWM4MTUKK05NLkJBREJBU0VTQ0VOQVJJTz1cdWM3MjBcdWQ2YThcdWQ1NWMgXHVhZTMwXHViY2Y4IFx1YzJkY1x1YjA5OFx1YjlhY1x1YzYyNCBcdWM5YzBcdWM4MTUKK05NLkJBRFNUQVJUPVx1Yzc5OFx1YmFiYlx1YjQxYyBcdWNkMDhcdWFlMzBcdWFjMTIKK05NLkJBRFNURVA9XHVjNzk4XHViYWJiXHViNDFjIFx1YjJlOFx1YWNjNCBcdWFjMTIKK05NLlBJQ0tTQ0VOQVJJTz1cdWQ1MDRcdWI4NWNcdWM4MWRcdWQyYjhcdWM1ZDBcdWMxMWMgXHVjMmRjXHViMDk4XHViOWFjXHVjNjI0XHViOTdjIFx1YzEyMFx1ZDBkZAorTk0uQVRMRUFTVE9ORVBBUkFNPVx1Y2Q1Y1x1YzgwMVx1ZDY1NFx1Yjk3YyBcdWM3MDRcdWQ1NzQgXHVkNTU4XHViMDk4IFx1Yzc3NFx1YzBjMVx1Yzc1OCBcdWI5ZTRcdWFjMWMgXHViY2MwXHVjMjE4IFx1ZDU0NFx1YzY5NAorTk0uQkFETUlOTUFYPVx1Y2Q1Y1x1YzE4Y1x1YWMxMlx1Yzc3NCBcdWNkNWNcdWIzMDBcdWFjMTJcdWJjZjRcdWIyZTQgXHVkMDdjIQorTk0uQkFETUlOPVx1Yzc5OFx1YmFiYlx1YjQxYyBcdWNkNWNcdWMxOGNcdWFjMTIKK05NLk1BRE1BWD1cdWM3OThcdWJhYmJcdWI0MWMgXHVjZDVjXHViMzAwXHVhYzEyCitOTS5CQURNQVhJVEVSUz1cdWM3OThcdWJhYmJcdWI0MWMgXHVjZDVjXHViMzAwIFx1YmMxOFx1YmNmNS4gXHVjODE1XHVjMjE4IFx1YzljMFx1YzgxNVx1ZDU2MCBcdWFjODMgKC0xXHViMjk0IFx1Y2Q1Y1x1YjMwMFx1YWMxMiBcdWM1YzZcdWM3NGNcdWM3NDQgXHVjNzU4XHViYmY4KQorTk0uUkVJTklUTEFCRUw9XHViMmU0XHVjMmRjIFx1Y2QwOFx1YWUzMFx1ZDY1NAorTk0uTk89Tk8KK05NLllFUz1ZRVMKK05NLlRPTEVSQU5DRT1cdWIwYjRcdWM1ZjBcdWMxMzEKK05NLlBMVVM9KworTk0uTUlOVVM9LQorTk0uUkVGRk9MREVSVElUTEU9XHVjYzM4XHVjODcwIFx1ZDNmNFx1YjM1NFx1Yjk3YyBcdWMxMjBcdWQwZGQKZGlmZiAtLWdpdCBhL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuYXV0b21hdGljZXhwZXJpbWVudC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9hbmFseXNpcy9hdXRvbWF0aWNleHBlcmltZW50L3ZpZXdzL21lc3NhZ2VzX3poLnByb3BlcnRpZXMgYi9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQvc3JjL29yZy9lY2xpcHNlL3N0ZW0vYW5hbHlzaXMvYXV0b21hdGljZXhwZXJpbWVudC92aWV3cy9tZXNzYWdlc196aC5wcm9wZXJ0aWVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJjMTVlODMKLS0tIC9kZXYvbnVsbAorKysgYi9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQvc3JjL29yZy9lY2xpcHNlL3N0ZW0vYW5hbHlzaXMvYXV0b21hdGljZXhwZXJpbWVudC92aWV3cy9tZXNzYWdlc196aC5wcm9wZXJ0aWVzCkBAIC0wLDAgKzEsOTMgQEAKKyMgbWVzc2FnZXMucHJvcGVydGllcworIworIyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIyAqIENvcHlyaWdodCAoYykgMjAwNywgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyMgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisjICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisjICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyMgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorIyAqCisjICogQ29udHJpYnV0b3JzOgorIyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworIyBDb21tYSBzZXBhcmF0ZWQgdmFyaWFibGUKK0NTQy50aXRsZT1DU1YKKworCisKK2RjX3RpdGxlX2FfZXhwPVx1ODFlYVx1NTJhOFx1NTMxNlx1NWI5ZVx1OWE4YworZGNfc291cmNlX2FfZXhwPWh0dHA6Ly93aWtpLmVjbGlwc2Uub3JnL1J1bm5pbmdfYW5fQXV0b21hdGVkX0V4cGVyaW1lbnRcdWZmMDhcdTU0OGNcdTUzYzJcdTgwMDNcdThkNDRcdTY1OTlcdTRlMmRcdWZmMDkKK2RjX2Rlc2NfYV9leHA9XHU4MWVhXHU1MmE4XHU1MzE2XHU1YjllXHU5YThjXHU0ZjdmXHU3NTI4XHU3Njg0XHU2NjJmTmVsZGVyIC1NZWFkXHU1MzU1XHU3ZWFmXHU1ZjYyXHU3Yjk3XHU2Y2Q1XHU2NzY1XHU4MWVhXHU1MmE4XHU5MDA5XHU2MmU5XHU0ZTAwXHU0ZTJhXHU1M2MyXHU2NTcwXHU3YTdhXHU5NWY0XHVmZjBjXHU1N2ZhXHU0ZThlXHU0ZTAwXHU0ZTJhXHU3Mjc5XHU1YjlhXHU3Njg0XHU4YmVmXHU1ZGVlXHU1MWZkXHU2NTcwXHU2NzY1XHU2MjdlXHU1MjMwXHU2NzAwXHU5MDAyXHU1NDA4XHU1ZjUzXHU1MjRkXHU2NTcwXHU2MzZlXHU3Njg0XHU2YTIxXHU1NzhiXHUzMDAyCisKKworIyBBdXRvbWF0aWMgRXhwZXJpbWVudCB2aWV3CitBVVRPLlRJVExFPVx1ODFlYVx1NTJhOFx1OGJkNVx1OWE4YworQVVUTy5USVRMRUxBQkVMPVx1ODFlYVx1NTJhOFx1NTMxNlx1NWI5ZVx1OWE4YworQVVUTy5FUlJPUj1cdTk1MTlcdThiZWYKK0FVVE8uVElUTEUxPVx1NjUzNlx1NjU1YgorQVVUTy5USVRMRTI9XHU5NTE5XHU4YmVmVlNcdTY1ZjZcdTk1ZjRcdWZmMDhcdTY3MDBcdTY1YjBcdWZmMDkKK0FVVE8uVElUTEUzPVx1OTUxOVx1OGJlZlZTXHU2NWY2XHU5NWY0XHVmZjA4XHU2NzAwXHU0ZjczXHVmZjA5CitBVVRPLlRJVExFND1cdTUzYzJcdTgwMDNWU1x1NjVmNlx1OTVmNAorQVVUTy5USVRMRTU9XHU1M2QxXHU3NWM1XHU3Mzg3VlNcdTY1ZjZcdTk1ZjQKK0FVVE8uUlVOPVx1OGZkMFx1ODg0Y1x1NjU3MFx1NzZlZQorQVVUTy5USU1FPVx1NjVmNlx1OTVmNAorQVVUTy5WQUxVRVM9XHU1ZjUzXHU1MjRkXHU1MDNjCitBVVRPLkNIQVJUUz1cdTU2ZmVcdTg4NjgKK0FVVE8uSElTVE9SWT1cdThiZWZcdTVkZWVcdTY1MzZcdTY1NWIKK0FVVE8uRVJST1JTRVJJRVM9XHU5NTE5XHU4YmVmVlNcdTY1ZjZcdTk1ZjQKK0FVVE8uSU5DSURFTkNFPVx1NTNkMVx1NzVjNVx1NzM4NworQVVUTy5BR0dSRUdBVEVTRVJJRVM9XHU1M2QxXHU3NWM1XHU3Mzg3VlNcdTY1ZjZcdTk1ZjQKK0FVVE8uQ09OVFJPTFM9XHU2M2E3XHU1MjM2CitBVVRPLlNFVFRJTkdTPVx1OGJiZVx1N2Y2ZQorQVVUTy5QQVVTRT1cdTY2ODJcdTUwNWMKK0FVVE8uUkVTVEFSVD1cdTkxY2RcdTY1YjBcdTU0MmZcdTUyYTgKK0FVVE8uUkVTVEFSVF9IRUFERVI9XHU5NjhmXHU3NzQwXHU1M2MyXHU2NTcwCitBVVRPLlNUT1A9XHU1MDVjXHU2YjYyCitBVVRPLkxBVEVTVD1cdTRmN2ZcdTc1MjhcdTY3MDBcdTY1YjBcdTc2ODQKK0FVVE8uQkVTVD1cdTRmN2ZcdTc1MjhcdTY3MDBcdTRmNzMKK0FVVE8uTk9URk9VTkRFUlJPUj1cdTk1MTlcdThiZWZcdTU2ZmVcdTY4MDdcdTZjYTFcdTY3MDlcdTYyN2VcdTUyMzAKKworIyBDb250ZXh0IG1lbnUgZW50cmllcworQ29udGV4dE1lbnUuTGluZWFyVGltZVNjYWxlPVx1N2ViZlx1NjAyN1x1ODljNFx1NmEyMQorQ29udGV4dE1lbnUuTG9nVGltZVNjYWxlPVx1NjVlNVx1NWZkN1x1N2I0OVx1N2VhNworQ29udGV4dE1lbnUuTGluZWFyU2NhbGluZz1cdTdlYmZcdTYwMjdcdTg5YzRcdTZhMjEKK0NvbnRleHRNZW51LkxvZ1NjYWxpbmc9XHU2NWU1XHU1ZmQ3XHU3YjQ5XHU3ZWE3CitDb250ZXh0TWVudS5TaG93TGVnZW5kPVx1NjYzZVx1NzkzYVx1NTZmZVx1NGY4YgorQ29udGV4dE1lbnUuSGlkZUxlZ2VuZD1cdTk2OTBcdTg1Y2ZcdTU2ZmVcdTRmOGIKKworI1dpemFyZCBNZXNzYWdlcworV0laLkFMR09SSVRITT1cdTdiOTdcdTZjZDVcdWZmMWEKK0FMRy4xPVx1N2M3YgorQUxHLjI9XHU2NWUwXHU2Y2Q1XHU1YjllXHU0ZjhiXHU1MzE2XHU2MjY5XHU1YzU1XHU3MGI5CisKKyNOZWRsZXIgbWVhZCBhbGdvcml0aG0KK05NLk1BWElURVJTPVx1NjcwMFx1NTkyN1x1OGZlZFx1NGVlM1x1NmIyMVx1NjU3MAorTk0uUkVGRVJFTkNFPVx1NTNjMlx1ODAwM1x1NjU3MFx1NjM2ZVx1OGQ0NFx1NjU5OVx1NTkzOQorTk0uUkVGUElDS0ZPTERFUj1cdTkwMDlcdTYyZTlcdTY1ODdcdTRlZjZcdTU5MzkKK05NLkJBU0VTQ0VOQVJJTz1cdTU3ZmFcdTY3MmNcdTY1YjlcdTY4NDgKK05NLlNFTEVDVFNDRU5BUklPPVx1OTAwOVx1NjJlOVx1NjViOVx1Njg0OAorTk0uRVJST1JGVU5DVElPTj1cdThiZWZcdTVkZWVcdTUxZmRcdTY1NzAKK05NLlBBUkFNRVRFUlM9XHU1M2MyXHU2NTcwCitOTS5QSUNLUEFSQU09XHU5MDA5XHU2MmU5XHU0ZTAwXHU0ZTJhXHU1M2MyXHU2NTcwCitOTS5JTklUSUFMPVx1NTIxZFx1NTljYgorTk0uTUlOPVx1NGUwYlx1NzU0YworTk0uTUFYPVx1NGUwYVx1NzU0YworTk0uU1RFUD1cdTZiNjUKK05NLkJBRFJFRkVSRU5DRT1cdTYzMDdcdTViOWFcdTRlMDBcdTRlMmFcdTY3MDlcdTY1NDhcdTc2ODRcdTUzYzJcdTgwMDNcdTY1ODdcdTRlZjZcdTU5MzkKK05NLkJBREJBU0VTQ0VOQVJJTz1cdTYzMDdcdTViOWFcdTRlMDBcdTRlMmFcdTY3MDlcdTY1NDhcdTc2ODRcdTU3ZmFcdTY3MmNcdTY1YjlcdTY4NDgKK05NLkJBRFNUQVJUPVx1NjVlMFx1NjU0OFx1NzY4NFx1NTIxZFx1NTljYlx1NTAzYworTk0uQkFEU1RFUD1cdTY1ZTBcdTY1NDhcdTc2ODRcdTZiNjVcdTk1N2ZcdTUwM2MKK05NLlBJQ0tTQ0VOQVJJTz1cdTRlY2VcdTk4NzlcdTc2ZWVcdTRlMmRcdTkwMDlcdTYyZTlcdTRlMDBcdTRlMmFcdTY1YjlcdTY4NDgKK05NLkFUTEVBU1RPTkVQQVJBTT1cdTYwYThcdTk3MDBcdTg5ODFcdTY3MDlcdTgxZjNcdTVjMTFcdTY3MDlcdTRlMDBcdTRlMmFcdTUzYzJcdTY1NzBcdTU3MjhcdTRmNjBcdTc2ODRcdTRmMThcdTUzMTZcdTRlMmQKK05NLkJBRE1JTk1BWD1cdTY3MDBcdTVjMGZcdTUwM2NcdTZiZDRcdTY3MDBcdTU5MjdcdTUwM2NcdTU5MjdcdWZmMDEKK05NLkJBRE1JTj1cdTY1ZTBcdTY1NDhcdTc2ODRcdTY3MDBcdTRmNGVcdTUwM2MKK05NLk1BRE1BWD1cdTY1ZTBcdTY1NDhcdTc2ODRcdTY3MDBcdTU5MjdcdTUwM2MKK05NLkJBRE1BWElURVJTPVx1NjVlMFx1NjU0OFx1NzY4NFx1NjcwMFx1NTkyN1x1OGZlZFx1NGVlM1x1NjU3MFx1NzZlZVx1MzAwMlx1NjMwN1x1NWI5YVx1NGUwMFx1NGUyYVx1NjU3NFx1NjU3MFx1ZmYwOC0xXHU4ODY4XHU3OTNhXHU2Y2ExXHU2NzA5XHU2NzAwXHU1OTI3XHU1MDNjXHVmZjA5CitOTS5SRUlOSVRMQUJFTD1cdTkxY2RcdTY1YjBcdTUyMWRcdTU5Y2JcdTUzMTYKK05NLk5PPVx1NGUwZFx1NjYyZgorTk0uWUVTPVx1NjYyZgorTk0uVE9MRVJBTkNFPVx1NTE2Y1x1NWRlZQorTk0uUExVUz0rCitOTS5NSU5VUz0tIAorTk0uUkVGRk9MREVSVElUTEU9XHU5MDA5XHU2MmU5XHU0ZTAwXHU0ZTJhXHU1M2MyXHU4MDAzXHU2NTg3XHU0ZWY2XHU1OTM5CmRpZmYgLS1naXQgYS9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLy5jbGFzc3BhdGggYi9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLy5jbGFzc3BhdGgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzA0ZTg2MQotLS0gL2Rldi9udWxsCisrKyBiL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMvLmNsYXNzcGF0aApAQCAtMCwwICsxLDcgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8Y2xhc3NwYXRoPgorCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJzcmMiIHBhdGg9InNyYyIvPgorCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJjb24iIHBhdGg9Im9yZy5lY2xpcHNlLmpkdC5sYXVuY2hpbmcuSlJFX0NPTlRBSU5FUi9vcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwuZGVidWcudWkubGF1bmNoZXIuU3RhbmRhcmRWTVR5cGUvSjJTRS0xLjUiLz4KKwk8Y2xhc3NwYXRoZW50cnkga2luZD0iY29uIiBwYXRoPSJvcmcuZWNsaXBzZS5wZGUuY29yZS5yZXF1aXJlZFBsdWdpbnMiLz4KKwk8Y2xhc3NwYXRoZW50cnkga2luZD0ib3V0cHV0IiBwYXRoPSJiaW4iLz4KKzwvY2xhc3NwYXRoPgpkaWZmIC0tZ2l0IGEvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy8ucHJvamVjdCBiL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMvLnByb2plY3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTZlZGNmMAotLS0gL2Rldi9udWxsCisrKyBiL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMvLnByb2plY3QKQEAgLTAsMCArMSwyOCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxwcm9qZWN0RGVzY3JpcHRpb24+CisJPG5hbWU+b3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpczwvbmFtZT4KKwk8Y29tbWVudD48L2NvbW1lbnQ+CisJPHByb2plY3RzPgorCTwvcHJvamVjdHM+CisJPGJ1aWxkU3BlYz4KKwkJPGJ1aWxkQ29tbWFuZD4KKwkJCTxuYW1lPm9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFidWlsZGVyPC9uYW1lPgorCQkJPGFyZ3VtZW50cz4KKwkJCTwvYXJndW1lbnRzPgorCQk8L2J1aWxkQ29tbWFuZD4KKwkJPGJ1aWxkQ29tbWFuZD4KKwkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5NYW5pZmVzdEJ1aWxkZXI8L25hbWU+CisJCQk8YXJndW1lbnRzPgorCQkJPC9hcmd1bWVudHM+CisJCTwvYnVpbGRDb21tYW5kPgorCQk8YnVpbGRDb21tYW5kPgorCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLlNjaGVtYUJ1aWxkZXI8L25hbWU+CisJCQk8YXJndW1lbnRzPgorCQkJPC9hcmd1bWVudHM+CisJCTwvYnVpbGRDb21tYW5kPgorCTwvYnVpbGRTcGVjPgorCTxuYXR1cmVzPgorCQk8bmF0dXJlPm9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFuYXR1cmU8L25hdHVyZT4KKwkJPG5hdHVyZT5vcmcuZWNsaXBzZS5wZGUuUGx1Z2luTmF0dXJlPC9uYXR1cmU+CisJPC9uYXR1cmVzPgorPC9wcm9qZWN0RGVzY3JpcHRpb24+CmRpZmYgLS1naXQgYS9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcyBiL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk5MTBiNjUKLS0tIC9kZXYvbnVsbAorKysgYi9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcwpAQCAtMCwwICsxLDE1IEBACisjVHVlIFNlcCAwMSAxNjo1NDozNyBFRFQgMjAwOQorZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmRvYy5jb21tZW50LnN1cHBvcnQ9ZGlzYWJsZWQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW52YWxpZEphdmFkb2M9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbnZhbGlkSmF2YWRvY1RhZ3M9ZW5hYmxlZAorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbnZhbGlkSmF2YWRvY1RhZ3NEZXByZWNhdGVkUmVmPWVuYWJsZWQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW52YWxpZEphdmFkb2NUYWdzTm90VmlzaWJsZVJlZj1lbmFibGVkCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmludmFsaWRKYXZhZG9jVGFnc1Zpc2liaWxpdHk9cHVibGljCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdKYXZhZG9jQ29tbWVudHM9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nSmF2YWRvY0NvbW1lbnRzT3ZlcnJpZGluZz1lbmFibGVkCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdKYXZhZG9jQ29tbWVudHNWaXNpYmlsaXR5PXB1YmxpYworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nSmF2YWRvY1RhZ0Rlc2NyaXB0aW9uPXJldHVybl90YWcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0phdmFkb2NUYWdzPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0phdmFkb2NUYWdzT3ZlcnJpZGluZz1lbmFibGVkCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdKYXZhZG9jVGFnc1Zpc2liaWxpdHk9cHVibGljCmRpZmYgLS1naXQgYS9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzL01FVEEtSU5GL01BTklGRVNULk1GIGIvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy9NRVRBLUlORi9NQU5JRkVTVC5NRgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMzNiYmMwCi0tLSAvZGV2L251bGwKKysrIGIvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy9NRVRBLUlORi9NQU5JRkVTVC5NRgpAQCAtMCwwICsxLDIwIEBACitNYW5pZmVzdC1WZXJzaW9uOiAxLjAKK0J1bmRsZS1NYW5pZmVzdFZlcnNpb246IDIKK0J1bmRsZS1OYW1lOiAlcGx1Z2luTmFtZQorQnVuZGxlLVN5bWJvbGljTmFtZTogb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcztzaW5nbGV0b246PXRydWUKK0J1bmRsZS1WZXJzaW9uOiAxLjIuMQorQnVuZGxlLUNsYXNzUGF0aDogLgorQnVuZGxlLVZlbmRvcjogJXByb3ZpZGVyTmFtZQorQnVuZGxlLUxvY2FsaXphdGlvbjogcGx1Z2luCitCdW5kbGUtUmVxdWlyZWRFeGVjdXRpb25FbnZpcm9ubWVudDogSjJTRS0xLjUKK0V4cG9ydC1QYWNrYWdlOiBvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLAorIG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuaW1wbCwKKyBvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLnByb3ZpZGVyLAorIG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMudXRpbAorUmVxdWlyZS1CdW5kbGU6IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZSwKKyBvcmcuZWNsaXBzZS5lbWYuZWNvcmU7dmlzaWJpbGl0eTo9cmVleHBvcnQsCisgb3JnLmVjbGlwc2UuamZhY2UsCisgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLAorIG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLAorIG9yZy5lY2xpcHNlLnVpLmlkZQorQnVuZGxlLUFjdGl2YXRpb25Qb2xpY3k6IGxhenkKZGlmZiAtLWdpdCBhL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMvYnVpbGQucHJvcGVydGllcyBiL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMvYnVpbGQucHJvcGVydGllcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNzY1N2ViCi0tLSAvZGV2L251bGwKKysrIGIvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy9idWlsZC5wcm9wZXJ0aWVzCkBAIC0wLDAgKzEsMTcgQEAKKworIyA8Y29weXJpZ2h0PgorIyA8L2NvcHlyaWdodD4KKyMKKyMgJElkOiBidWlsZC5wcm9wZXJ0aWVzLHYgMS4xIDIwMDkvMDMvMjUgMDA6NTA6Mjkgc2VkbHVuZCBFeHAgJAorCitiaW4uaW5jbHVkZXMgPSAuLFwKKyAgICAgICAgICAgICAgIG1vZGVsLyxcCisgICAgICAgICAgICAgICBNRVRBLUlORi8sXAorICAgICAgICAgICAgICAgcGx1Z2luLnhtbCxcCisgICAgICAgICAgICAgICBwbHVnaW4ucHJvcGVydGllcyxcCisgICAgICAgICAgICAgICBwbHVnaW5femgucHJvcGVydGllcyxcCisgICAgICAgICAgICAgICBwbHVnaW5fa3IucHJvcGVydGllcyxcCisgICAgICAgICAgICAgICBwbHVnaW5fZGUucHJvcGVydGllcworamFycy5jb21waWxlLm9yZGVyID0gLgorc291cmNlLi4gPSBzcmMvCitvdXRwdXQuLiA9IGJpbi8KZGlmZiAtLWdpdCBhL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMvaWNvbnMvZnVsbC9vYmoxNi9BbmFseXNpc01vZGVsRmlsZS5naWYgYi9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzL2ljb25zL2Z1bGwvb2JqMTYvQW5hbHlzaXNNb2RlbEZpbGUuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRlZjI0YmQKLS0tIC9kZXYvbnVsbAorKysgYi9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzL2ljb25zL2Z1bGwvb2JqMTYvQW5hbHlzaXNNb2RlbEZpbGUuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMvaWNvbnMvZnVsbC9vYmoxNi9FcnJvckZ1bmN0aW9uLmdpZiBiL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMvaWNvbnMvZnVsbC9vYmoxNi9FcnJvckZ1bmN0aW9uLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYWRhYWIwCi0tLSAvZGV2L251bGwKKysrIGIvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy9pY29ucy9mdWxsL29iajE2L0Vycm9yRnVuY3Rpb24uZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMvaWNvbnMvZnVsbC9vYmoxNi9FcnJvclJlc3VsdC5naWYgYi9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzL2ljb25zL2Z1bGwvb2JqMTYvRXJyb3JSZXN1bHQuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk4YjM1MWYKLS0tIC9kZXYvbnVsbAorKysgYi9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzL2ljb25zL2Z1bGwvb2JqMTYvRXJyb3JSZXN1bHQuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMvaWNvbnMvZnVsbC9vYmoxNi9SZWZlcmVuY2VTY2VuYXJpb0RhdGFNYXAuZ2lmIGIvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy9pY29ucy9mdWxsL29iajE2L1JlZmVyZW5jZVNjZW5hcmlvRGF0YU1hcC5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWQ4NzQ3NAotLS0gL2Rldi9udWxsCisrKyBiL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMvaWNvbnMvZnVsbC9vYmoxNi9SZWZlcmVuY2VTY2VuYXJpb0RhdGFNYXAuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMvaWNvbnMvZnVsbC9vYmoxNi9TaW1wbGVFcnJvckZ1bmN0aW9uLmdpZiBiL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMvaWNvbnMvZnVsbC9vYmoxNi9TaW1wbGVFcnJvckZ1bmN0aW9uLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMTI0ZjNlCi0tLSAvZGV2L251bGwKKysrIGIvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy9pY29ucy9mdWxsL29iajE2L1NpbXBsZUVycm9yRnVuY3Rpb24uZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMvaWNvbnMvZnVsbC9vYmoxNi9UaHJlc2hvbGRFcnJvckZ1bmN0aW9uLmdpZiBiL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMvaWNvbnMvZnVsbC9vYmoxNi9UaHJlc2hvbGRFcnJvckZ1bmN0aW9uLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40OTgzNjRmCi0tLSAvZGV2L251bGwKKysrIGIvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy9pY29ucy9mdWxsL29iajE2L1RocmVzaG9sZEVycm9yRnVuY3Rpb24uZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMvaWNvbnMvZnVsbC93aXpiYW4vTmV3QW5hbHlzaXMuZ2lmIGIvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy9pY29ucy9mdWxsL3dpemJhbi9OZXdBbmFseXNpcy5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDQwZjM2OQotLS0gL2Rldi9udWxsCisrKyBiL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMvaWNvbnMvZnVsbC93aXpiYW4vTmV3QW5hbHlzaXMuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMvbW9kZWwvYW5hbHlzaXMuZWNvcmUgYi9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzL21vZGVsL2FuYWx5c2lzLmVjb3JlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIzOWEwN2YKLS0tIC9kZXYvbnVsbAorKysgYi9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzL21vZGVsL2FuYWx5c2lzLmVjb3JlCkBAIC0wLDAgKzEsMzUgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8ZWNvcmU6RVBhY2thZ2UgeG1pOnZlcnNpb249IjIuMCIKKyAgICB4bWxuczp4bWk9Imh0dHA6Ly93d3cub21nLm9yZy9YTUkiIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiCisgICAgeG1sbnM6ZWNvcmU9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDIvRWNvcmUiIG5hbWU9ImFuYWx5c2lzIgorICAgIG5zVVJJPSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vYW5hbHlzaXMuZWNvcmUiIG5zUHJlZml4PSJvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzIj4KKyAgPGVDbGFzc2lmaWVycyB4c2k6dHlwZT0iZWNvcmU6RUNsYXNzIiBuYW1lPSJFcnJvckZ1bmN0aW9uIj4KKyAgICA8ZU9wZXJhdGlvbnMgbmFtZT0iY2FsY3VsYXRlRXJyb3IiIGVUeXBlPSIjLy9FcnJvclJlc3VsdCI+CisgICAgICA8ZVBhcmFtZXRlcnMgbmFtZT0icmVmZXJlbmNlIiBlVHlwZT0iIy8vUmVmZXJlbmNlU2NlbmFyaW9EYXRhTWFwIi8+CisgICAgICA8ZVBhcmFtZXRlcnMgbmFtZT0iZGF0YSIgZVR5cGU9IiMvL1JlZmVyZW5jZVNjZW5hcmlvRGF0YU1hcCIvPgorICAgIDwvZU9wZXJhdGlvbnM+CisgIDwvZUNsYXNzaWZpZXJzPgorICA8ZUNsYXNzaWZpZXJzIHhzaTp0eXBlPSJlY29yZTpFQ2xhc3MiIG5hbWU9IlRocmVzaG9sZEVycm9yRnVuY3Rpb24iIGVTdXBlclR5cGVzPSIjLy9FcnJvckZ1bmN0aW9uIi8+CisgIDxlQ2xhc3NpZmllcnMgeHNpOnR5cGU9ImVjb3JlOkVDbGFzcyIgbmFtZT0iUmVmZXJlbmNlU2NlbmFyaW9EYXRhTWFwIi8+CisgIDxlQ2xhc3NpZmllcnMgeHNpOnR5cGU9ImVjb3JlOkVDbGFzcyIgbmFtZT0iU2ltcGxlRXJyb3JGdW5jdGlvbiIgZVN1cGVyVHlwZXM9IiMvL0Vycm9yRnVuY3Rpb24iLz4KKyAgPGVDbGFzc2lmaWVycyB4c2k6dHlwZT0iZWNvcmU6RUNsYXNzIiBuYW1lPSJFcnJvclJlc3VsdCI+CisgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVBdHRyaWJ1dGUiIG5hbWU9ImVycm9yQnlUaW1lU3RlcCIgdHJhbnNpZW50PSJ0cnVlIj4KKyAgICAgIDxlR2VuZXJpY1R5cGUgZUNsYXNzaWZpZXI9ImVjb3JlOkVEYXRhVHlwZSBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2VtZi8yMDAyL0Vjb3JlIy8vRUVMaXN0Ij4KKyAgICAgICAgPGVUeXBlQXJndW1lbnRzIGVDbGFzc2lmaWVyPSJlY29yZTpFRGF0YVR5cGUgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9lbWYvMjAwMi9FY29yZSMvL0VEb3VibGVPYmplY3QiLz4KKyAgICAgIDwvZUdlbmVyaWNUeXBlPgorICAgIDwvZVN0cnVjdHVyYWxGZWF0dXJlcz4KKyAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0iZXJyb3IiIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9lbWYvMjAwMi9FY29yZSMvL0VEb3VibGUiCisgICAgICAgIHRyYW5zaWVudD0idHJ1ZSIvPgorICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJyZWZlcmVuY2VCeVRpbWUiIHRyYW5zaWVudD0idHJ1ZSI+CisgICAgICA8ZUdlbmVyaWNUeXBlIGVDbGFzc2lmaWVyPSJlY29yZTpFRGF0YVR5cGUgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9lbWYvMjAwMi9FY29yZSMvL0VFTGlzdCI+CisgICAgICAgIDxlVHlwZUFyZ3VtZW50cyBlQ2xhc3NpZmllcj0iZWNvcmU6RURhdGFUeXBlIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDIvRWNvcmUjLy9FRG91YmxlT2JqZWN0Ii8+CisgICAgICA8L2VHZW5lcmljVHlwZT4KKyAgICA8L2VTdHJ1Y3R1cmFsRmVhdHVyZXM+CisgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVBdHRyaWJ1dGUiIG5hbWU9Im1vZGVsQnlUaW1lIiB0cmFuc2llbnQ9InRydWUiPgorICAgICAgPGVHZW5lcmljVHlwZSBlQ2xhc3NpZmllcj0iZWNvcmU6RURhdGFUeXBlIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDIvRWNvcmUjLy9FRUxpc3QiPgorICAgICAgICA8ZVR5cGVBcmd1bWVudHMgZUNsYXNzaWZpZXI9ImVjb3JlOkVEYXRhVHlwZSBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2VtZi8yMDAyL0Vjb3JlIy8vRURvdWJsZU9iamVjdCIvPgorICAgICAgPC9lR2VuZXJpY1R5cGU+CisgICAgPC9lU3RydWN0dXJhbEZlYXR1cmVzPgorICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJ2YWxpZGF0aW9uRXJyb3IiIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9lbWYvMjAwMi9FY29yZSMvL0VEb3VibGUiLz4KKyAgPC9lQ2xhc3NpZmllcnM+Cis8L2Vjb3JlOkVQYWNrYWdlPgpkaWZmIC0tZ2l0IGEvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy9tb2RlbC9hbmFseXNpcy5nZW5tb2RlbCBiL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMvbW9kZWwvYW5hbHlzaXMuZ2VubW9kZWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGRlNzRlMAotLS0gL2Rldi9udWxsCisrKyBiL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMvbW9kZWwvYW5hbHlzaXMuZ2VubW9kZWwKQEAgLTAsMCArMSwyOCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxnZW5tb2RlbDpHZW5Nb2RlbCB4bWk6dmVyc2lvbj0iMi4wIgorICAgIHhtbG5zOnhtaT0iaHR0cDovL3d3dy5vbWcub3JnL1hNSSIgeG1sbnM6ZWNvcmU9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDIvRWNvcmUiCisgICAgeG1sbnM6Z2VubW9kZWw9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDIvR2VuTW9kZWwiIG1vZGVsRGlyZWN0b3J5PSIvb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy9zcmMiCisgICAgZWRpdERpcmVjdG9yeT0iL29yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMvc3JjIiBlZGl0b3JEaXJlY3Rvcnk9Ii9vcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzL3NyYyIKKyAgICBtb2RlbFBsdWdpbklEPSJvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzIiBtb2RlbE5hbWU9IkFuYWx5c2lzIiB0ZXN0c0RpcmVjdG9yeT0iL29yZy5lY2xpcHNlLnN0ZW0udGVzdC5hbmFseXNpcy9zcmMiCisgICAgaW1wb3J0ZXJJRD0ib3JnLmVjbGlwc2UuZW1mLmltcG9ydGVyLmphdmEiIGNvbXBsaWFuY2VMZXZlbD0iNS4wIiBjb3B5cmlnaHRGaWVsZHM9ImZhbHNlIj4KKyAgPGZvcmVpZ25Nb2RlbD5AbW9kZWw8L2ZvcmVpZ25Nb2RlbD4KKyAgPGdlblBhY2thZ2VzIHByZWZpeD0iQW5hbHlzaXMiIGJhc2VQYWNrYWdlPSJvcmcuZWNsaXBzZS5zdGVtIiBkaXNwb3NhYmxlUHJvdmlkZXJGYWN0b3J5PSJ0cnVlIgorICAgICAgZWNvcmVQYWNrYWdlPSJhbmFseXNpcy5lY29yZSMvIj4KKyAgICA8Z2VuQ2xhc3NlcyBlY29yZUNsYXNzPSJhbmFseXNpcy5lY29yZSMvL0Vycm9yRnVuY3Rpb24iPgorICAgICAgPGdlbk9wZXJhdGlvbnMgZWNvcmVPcGVyYXRpb249ImFuYWx5c2lzLmVjb3JlIy8vRXJyb3JGdW5jdGlvbi9jYWxjdWxhdGVFcnJvciI+CisgICAgICAgIDxnZW5QYXJhbWV0ZXJzIGVjb3JlUGFyYW1ldGVyPSJhbmFseXNpcy5lY29yZSMvL0Vycm9yRnVuY3Rpb24vY2FsY3VsYXRlRXJyb3IvcmVmZXJlbmNlIi8+CisgICAgICAgIDxnZW5QYXJhbWV0ZXJzIGVjb3JlUGFyYW1ldGVyPSJhbmFseXNpcy5lY29yZSMvL0Vycm9yRnVuY3Rpb24vY2FsY3VsYXRlRXJyb3IvZGF0YSIvPgorICAgICAgPC9nZW5PcGVyYXRpb25zPgorICAgIDwvZ2VuQ2xhc3Nlcz4KKyAgICA8Z2VuQ2xhc3NlcyBlY29yZUNsYXNzPSJhbmFseXNpcy5lY29yZSMvL1RocmVzaG9sZEVycm9yRnVuY3Rpb24iLz4KKyAgICA8Z2VuQ2xhc3NlcyBlY29yZUNsYXNzPSJhbmFseXNpcy5lY29yZSMvL1JlZmVyZW5jZVNjZW5hcmlvRGF0YU1hcCIvPgorICAgIDxnZW5DbGFzc2VzIGVjb3JlQ2xhc3M9ImFuYWx5c2lzLmVjb3JlIy8vU2ltcGxlRXJyb3JGdW5jdGlvbiIvPgorICAgIDxnZW5DbGFzc2VzIGVjb3JlQ2xhc3M9ImFuYWx5c2lzLmVjb3JlIy8vRXJyb3JSZXN1bHQiPgorICAgICAgPGdlbkZlYXR1cmVzIGNyZWF0ZUNoaWxkPSJmYWxzZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFQXR0cmlidXRlIGFuYWx5c2lzLmVjb3JlIy8vRXJyb3JSZXN1bHQvZXJyb3JCeVRpbWVTdGVwIi8+CisgICAgICA8Z2VuRmVhdHVyZXMgY3JlYXRlQ2hpbGQ9ImZhbHNlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVBdHRyaWJ1dGUgYW5hbHlzaXMuZWNvcmUjLy9FcnJvclJlc3VsdC9lcnJvciIvPgorICAgICAgPGdlbkZlYXR1cmVzIGNyZWF0ZUNoaWxkPSJmYWxzZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFQXR0cmlidXRlIGFuYWx5c2lzLmVjb3JlIy8vRXJyb3JSZXN1bHQvcmVmZXJlbmNlQnlUaW1lIi8+CisgICAgICA8Z2VuRmVhdHVyZXMgY3JlYXRlQ2hpbGQ9ImZhbHNlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVBdHRyaWJ1dGUgYW5hbHlzaXMuZWNvcmUjLy9FcnJvclJlc3VsdC9tb2RlbEJ5VGltZSIvPgorICAgICAgPGdlbkZlYXR1cmVzIGNyZWF0ZUNoaWxkPSJmYWxzZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFQXR0cmlidXRlIGFuYWx5c2lzLmVjb3JlIy8vRXJyb3JSZXN1bHQvdmFsaWRhdGlvbkVycm9yIi8+CisgICAgPC9nZW5DbGFzc2VzPgorICA8L2dlblBhY2thZ2VzPgorPC9nZW5tb2RlbDpHZW5Nb2RlbD4KZGlmZiAtLWdpdCBhL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMvcGx1Z2luLnByb3BlcnRpZXMgYi9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzL3BsdWdpbi5wcm9wZXJ0aWVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM4M2RjYzUKLS0tIC9kZXYvbnVsbAorKysgYi9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzL3BsdWdpbi5wcm9wZXJ0aWVzCkBAIC0wLDAgKzEsNjEgQEAKKworIyA8Y29weXJpZ2h0PgorIyA8L2NvcHlyaWdodD4KKyMKKyMgJElkOiBwbHVnaW4ucHJvcGVydGllcyx2IDEuMSAyMDA5LzAzLzI1IDAwOjUwOjI5IHNlZGx1bmQgRXhwICQKKworcGx1Z2luTmFtZSA9IFNURU0gQW5hbHlzaXMKK3Byb3ZpZGVyTmFtZSA9IEVjbGlwc2Uub3JnCitfVUlfQ3JlYXRlQ2hpbGRfdGV4dCA9IHswfQorX1VJX0NyZWF0ZUNoaWxkX3RleHQyID0gezF9IHswfQorX1VJX0NyZWF0ZUNoaWxkX3RleHQzID0gezF9CitfVUlfQ3JlYXRlQ2hpbGRfdG9vbHRpcCA9IENyZWF0ZSBOZXcgezB9IFVuZGVyIHsxfSBGZWF0dXJlCitfVUlfQ3JlYXRlQ2hpbGRfZGVzY3JpcHRpb24gPSBDcmVhdGUgYSBuZXcgY2hpbGQgb2YgdHlwZSB7MH0gZm9yIHRoZSB7MX0gZmVhdHVyZSBvZiB0aGUgc2VsZWN0ZWQgezJ9LgorX1VJX0NyZWF0ZVNpYmxpbmdfZGVzY3JpcHRpb24gPSBDcmVhdGUgYSBuZXcgc2libGluZyBvZiB0eXBlIHswfSBmb3IgdGhlIHNlbGVjdGVkIHsyfSwgdW5kZXIgdGhlIHsxfSBmZWF0dXJlIG9mIHRoZWlyIHBhcmVudC4KK19VSV9Qcm9wZXJ0eURlc2NyaXB0b3JfZGVzY3JpcHRpb24gPSBUaGUgezB9IG9mIHRoZSB7MX0KK19VSV9FcnJvckZ1bmN0aW9uX3R5cGUgPSBFcnJvciBGdW5jdGlvbgorX1VJX1RocmVzaG9sZEVycm9yRnVuY3Rpb25fdHlwZSA9IFRocmVzaG9sZCBFcnJvciBGdW5jdGlvbgorX1VJX1JlZmVyZW5jZVNjZW5hcmlvRGF0YU1hcF90eXBlID0gUmVmZXJlbmNlIFNjZW5hcmlvIERhdGEgTWFwCitfVUlfU2ltcGxlRXJyb3JGdW5jdGlvbl90eXBlID0gU2ltcGxlIEVycm9yIEZ1bmN0aW9uCitfVUlfRXJyb3JSZXN1bHRfdHlwZSA9IEVycm9yIFJlc3VsdAorX1VJX1Vua25vd25fdHlwZSA9IE9iamVjdAorX1VJX1Vua25vd25fZGF0YXR5cGU9IFZhbHVlCitfVUlfRXJyb3JSZXN1bHRfZXJyb3JCeVRpbWVTdGVwX2ZlYXR1cmUgPSBFcnJvciBCeSBUaW1lIFN0ZXAKK19VSV9FcnJvclJlc3VsdF9lcnJvcl9mZWF0dXJlID0gRXJyb3IKK19VSV9FcnJvclJlc3VsdF9yZWZlcmVuY2VCeVRpbWVfZmVhdHVyZSA9IFJlZmVyZW5jZSBCeSBUaW1lCitfVUlfRXJyb3JSZXN1bHRfbW9kZWxCeVRpbWVfZmVhdHVyZSA9IE1vZGVsIEJ5IFRpbWUKK19VSV9FcnJvclJlc3VsdF92YWxpZGF0aW9uRXJyb3JfZmVhdHVyZSA9IFZhbGlkYXRpb24gRXJyb3IKK19VSV9Vbmtub3duX2ZlYXR1cmUgPSBVbnNwZWNpZmllZAorX1VJX0FuYWx5c2lzRWRpdG9yX21lbnUgPSAmQW5hbHlzaXMgRWRpdG9yCitfVUlfQ3JlYXRlQ2hpbGRfbWVudV9pdGVtID0gJk5ldyBDaGlsZAorX1VJX0NyZWF0ZVNpYmxpbmdfbWVudV9pdGVtID0gTiZldyBTaWJsaW5nCitfVUlfU2hvd1Byb3BlcnRpZXNWaWV3X21lbnVfaXRlbSA9IFNob3cgJlByb3BlcnRpZXMgVmlldworX1VJX1JlZnJlc2hWaWV3ZXJfbWVudV9pdGVtID0gJlJlZnJlc2gKK19VSV9TZWxlY3Rpb25QYWdlX2xhYmVsID0gU2VsZWN0aW9uCitfVUlfUGFyZW50UGFnZV9sYWJlbCA9IFBhcmVudAorX1VJX0xpc3RQYWdlX2xhYmVsID0gTGlzdAorX1VJX1RyZWVQYWdlX2xhYmVsID0gVHJlZQorX1VJX1RhYmxlUGFnZV9sYWJlbCA9IFRhYmxlCitfVUlfVHJlZVdpdGhDb2x1bW5zUGFnZV9sYWJlbCA9IFRyZWUgd2l0aCBDb2x1bW5zCitfVUlfT2JqZWN0Q29sdW1uX2xhYmVsID0gT2JqZWN0CitfVUlfU2VsZkNvbHVtbl9sYWJlbCA9IFNlbGYKK19VSV9Ob09iamVjdFNlbGVjdGVkID0gU2VsZWN0ZWQgTm90aGluZworX1VJX1NpbmdsZU9iamVjdFNlbGVjdGVkID0gU2VsZWN0ZWQgT2JqZWN0OiB7MH0KK19VSV9NdWx0aU9iamVjdFNlbGVjdGVkID0gU2VsZWN0ZWQgezB9IE9iamVjdHMKK19VSV9PcGVuRWRpdG9yRXJyb3JfbGFiZWwgPSBPcGVuIEVkaXRvcgorX1VJX1dpemFyZF9jYXRlZ29yeSA9IEV4YW1wbGUgRU1GIE1vZGVsIENyZWF0aW9uIFdpemFyZHMKK19VSV9DcmVhdGVNb2RlbEVycm9yX21lc3NhZ2UgPSBQcm9ibGVtcyBlbmNvdW50ZXJlZCBpbiBmaWxlICJ7MH0iCitfVUlfQW5hbHlzaXNNb2RlbFdpemFyZF9sYWJlbCA9IEFuYWx5c2lzIE1vZGVsCitfVUlfQW5hbHlzaXNNb2RlbFdpemFyZF9kZXNjcmlwdGlvbiA9IENyZWF0ZSBhIG5ldyBBbmFseXNpcyBtb2RlbAorX1VJX0FuYWx5c2lzRWRpdG9yX2xhYmVsID0gQW5hbHlzaXMgTW9kZWwgRWRpdG9yCitfVUlfQW5hbHlzaXNFZGl0b3JGaWxlbmFtZURlZmF1bHRCYXNlID0gTXkKK19VSV9BbmFseXNpc0VkaXRvckZpbGVuYW1lRXh0ZW5zaW9ucyA9IGFuYWx5c2lzCitfVUlfV2l6YXJkX2xhYmVsID0gTmV3CitfV0FSTl9GaWxlbmFtZUV4dGVuc2lvbiA9IFRoZSBmaWxlIG5hbWUgbXVzdCBlbmQgaW4gJycuezB9JycKK19XQVJOX0ZpbGVuYW1lRXh0ZW5zaW9ucyA9IFRoZSBmaWxlIG5hbWUgbXVzdCBoYXZlIG9uZSBvZiB0aGUgZm9sbG93aW5nIGV4dGVuc2lvbnM6IHswfQorX1VJX01vZGVsT2JqZWN0ID0gJk1vZGVsIE9iamVjdAorX1VJX1hNTEVuY29kaW5nID0gJlhNTCBFbmNvZGluZworX1VJX1hNTEVuY29kaW5nQ2hvaWNlcyA9IFVURi04IEFTQ0lJIFVURi0xNiBVVEYtMTZCRSBVVEYtMTZMRSBJU08tODg1OS0xCitfVUlfV2l6YXJkX2luaXRpYWxfb2JqZWN0X2Rlc2NyaXB0aW9uID0gU2VsZWN0IGEgbW9kZWwgb2JqZWN0IHRvIGNyZWF0ZQorX1VJX0ZpbGVDb25mbGljdF9sYWJlbCA9IEZpbGUgQ29uZmxpY3QKK19XQVJOX0ZpbGVDb25mbGljdCA9IFRoZXJlIGFyZSB1bnNhdmVkIGNoYW5nZXMgdGhhdCBjb25mbGljdCB3aXRoIGNoYW5nZXMgbWFkZSBvdXRzaWRlIHRoZSBlZGl0b3IuICBEbyB5b3Ugd2lzaCB0byBkaXNjYXJkIHRoaXMgZWRpdG9yJ3MgY2hhbmdlcz8KZGlmZiAtLWdpdCBhL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMvcGx1Z2luLnhtbCBiL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMvcGx1Z2luLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MjEyN2NmCi0tLSAvZGV2L251bGwKKysrIGIvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy9wbHVnaW4ueG1sCkBAIC0wLDAgKzEsMzQgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8P2VjbGlwc2UgdmVyc2lvbj0iMy4wIj8+CisKKzwhLS0KKyA8Y29weXJpZ2h0PgorIDwvY29weXJpZ2h0PgorCisgJElkOiBwbHVnaW4ueG1sLHYgMS4xIDIwMDkvMDMvMjUgMDA6NTA6Mjkgc2VkbHVuZCBFeHAgJAorLS0+CisKKzxwbHVnaW4+CisKKwk8ZXh0ZW5zaW9uLXBvaW50IGlkPSJlcnJvcmZ1bmN0aW9uIiBuYW1lPSIlRVBfRXJyb3JGdW5jdGlvbiIgc2NoZW1hPSJzY2hlbWEvZXJyb3JmdW5jdGlvbi5leHNkIi8+CisJCisgICA8ZXh0ZW5zaW9uIHBvaW50PSJvcmcuZWNsaXBzZS5lbWYuZWNvcmUuZ2VuZXJhdGVkX3BhY2thZ2UiPgorICAgICAgPHBhY2thZ2UKKyAgICAgICAgICAgIHVyaT0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2FuYWx5c2lzLmVjb3JlIgorICAgICAgICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuQW5hbHlzaXNQYWNrYWdlIgorICAgICAgICAgICAgZ2VuTW9kZWw9Im1vZGVsL2FuYWx5c2lzLmdlbm1vZGVsIi8+CisgICA8L2V4dGVuc2lvbj4KKworPGV4dGVuc2lvbgorICAgICAgICBwb2ludD0ib3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5lcnJvcmZ1bmN0aW9uIj4KKyAgICAgPGNsYXNzZGVmIGNsYXNzPSJvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmltcGwuU2ltcGxlRXJyb3JGdW5jdGlvbkltcGwiLz4KKyAgICAgPGR1Ymxpbl9jb3JlCisgICAgICAgICAgIGNhdGVnb3J5X2lkPSIvIgorICAgICAgICAgICBjcmVhdG9yPSIlZGNfY3JlYXRvcl9lZGx1bmQiCisgICAgICAgICAgIGRlc2NyaXB0aW9uPSIlZGNfZGVzY19ORUxERVIiCisgICAgICAgICAgIGlkZW50aWZpZXI9ImZvbyIKKyAgICAgICAgICAgdGl0bGU9IiVkY19kZXNjX05FTERFUiIvPgorICA8L2V4dGVuc2lvbj4KKworICAKKzwvcGx1Z2luPgpkaWZmIC0tZ2l0IGEvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy9wbHVnaW5fZGUucHJvcGVydGllcyBiL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMvcGx1Z2luX2RlLnByb3BlcnRpZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWMwYzdmMgotLS0gL2Rldi9udWxsCisrKyBiL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMvcGx1Z2luX2RlLnByb3BlcnRpZXMKQEAgLTAsMCArMSw2MSBAQAorCisjIDxjb3B5cmlnaHQ+CisjIDwvY29weXJpZ2h0PgorIworIyAkSWQ6IHBsdWdpbi5wcm9wZXJ0aWVzLHYgMS4xIDIwMDkvMDMvMjUgMDA6NTA6Mjkgc2VkbHVuZCBFeHAgJAorCitwbHVnaW5OYW1lPVNURU0gQW5hbHlzZQorcHJvdmlkZXJOYW1lPUVjbGlwc2Uub3JnCitfVUlfQ3JlYXRlQ2hpbGRfdGV4dD17MH0KK19VSV9DcmVhdGVDaGlsZF90ZXh0Mj17MX0gezB9CitfVUlfQ3JlYXRlQ2hpbGRfdGV4dDM9ezF9CitfVUlfQ3JlYXRlQ2hpbGRfdG9vbHRpcD1OZXVlcyB7MH0gdW50ZXIgezF9IEZlYXR1cmUgZXJzdGVsbGVuCitfVUlfQ3JlYXRlQ2hpbGRfZGVzY3JpcHRpb249TmV1ZXMgS2luZCB2b20gVHlwIHswfSBmXHUwMGZjciBkYXMgezF9IE1lcmttYWwgZGVyIGF1c2dld1x1MDBlNGhsdGVuIHsyfSBlcnN0ZWxsZW4KK19VSV9DcmVhdGVTaWJsaW5nX2Rlc2NyaXB0aW9uPU5ldWVzIEdlc2Nod2lzdGVydGVpbCB2b20gVHlwIHswfSBmXHUwMGZjciBkZW4gYXVzZ2V3XHUwMGU0aGx0ZW4gezJ9IHVudGVyIGRlbSB7MX0gTWVya21hbCBkZXMgRWx0ZXJudGVpbCBlcnN0ZWxsZW4KK19VSV9Qcm9wZXJ0eURlc2NyaXB0b3JfZGVzY3JpcHRpb249ezB9IHZvbiB7MX0KK19VSV9FcnJvckZ1bmN0aW9uX3R5cGU9RXJyb3ItRnVua3Rpb24KK19VSV9UaHJlc2hvbGRFcnJvckZ1bmN0aW9uX3R5cGU9R2VuendlcnQtRXJyb3ItRnVua3Rpb24KK19VSV9SZWZlcmVuY2VTY2VuYXJpb0RhdGFNYXBfdHlwZT1SZWZlcmVuenN6ZW5hcmlvLURhdGVua2FydGUKK19VSV9TaW1wbGVFcnJvckZ1bmN0aW9uX3R5cGU9U2ltcGxlIEVycm9yLUZ1bmt0aW9uCitfVUlfRXJyb3JSZXN1bHRfdHlwZT1GZWhsZXJyZXN1bHRhdAorX1VJX1Vua25vd25fdHlwZT1PYmpla3QKK19VSV9Vbmtub3duX2RhdGF0eXBlPVdlcnQKK19VSV9FcnJvclJlc3VsdF9lcnJvckJ5VGltZVN0ZXBfZmVhdHVyZT1GZWhsZXIgZHVyY2ggVGltZSBTdGVwCitfVUlfRXJyb3JSZXN1bHRfZXJyb3JfZmVhdHVyZT1GZWhsZXIKK19VSV9FcnJvclJlc3VsdF9yZWZlcmVuY2VCeVRpbWVfZmVhdHVyZT1SZWZlcmVueiBuYWNoIFplaXQKK19VSV9FcnJvclJlc3VsdF9tb2RlbEJ5VGltZV9mZWF0dXJlPU1vZGVsbCBuYWNoIFplaXQKK19VSV9FcnJvclJlc3VsdF92YWxpZGF0aW9uRXJyb3JfZmVhdHVyZT1WYWxpZGllcnVuZ3NmZWhsZXIKK19VSV9Vbmtub3duX2ZlYXR1cmU9TmljaHQgc3BlemlmaXppZXJ0CitfVUlfQW5hbHlzaXNFZGl0b3JfbWVudT0mQW5hbHlzaXMgRWRpdG9yCitfVUlfQ3JlYXRlQ2hpbGRfbWVudV9pdGVtPSZOZXcgQ2hpbGQKK19VSV9DcmVhdGVTaWJsaW5nX21lbnVfaXRlbT1OJmV1ZXMgR2VzY2h3aXN0ZXJ0ZWlsCitfVUlfU2hvd1Byb3BlcnRpZXNWaWV3X21lbnVfaXRlbT1TaG93ICYgUHJvcGVydGllcyBWaWV3CitfVUlfUmVmcmVzaFZpZXdlcl9tZW51X2l0ZW09JlJlZnJlc2gKK19VSV9TZWxlY3Rpb25QYWdlX2xhYmVsPUF1c3dhaGwKK19VSV9QYXJlbnRQYWdlX2xhYmVsPUVsdGVybnRlaWwKK19VSV9MaXN0UGFnZV9sYWJlbD1MaXN0ZQorX1VJX1RyZWVQYWdlX2xhYmVsPUJhdW0KK19VSV9UYWJsZVBhZ2VfbGFiZWw9VGFiZWxsZQorX1VJX1RyZWVXaXRoQ29sdW1uc1BhZ2VfbGFiZWw9QmF1bSBtaXQgU3BhbHRlbgorX1VJX09iamVjdENvbHVtbl9sYWJlbD1PYmpla3QKK19VSV9TZWxmQ29sdW1uX2xhYmVsPVNlbGJzdAorX1VJX05vT2JqZWN0U2VsZWN0ZWQ9TmljaHRzIGF1c2dld1x1MDBlNGhsdAorX1VJX1NpbmdsZU9iamVjdFNlbGVjdGVkPUF1c2dld1x1MDBlNGhsdGVzIE9iamVrdDogezB9CitfVUlfTXVsdGlPYmplY3RTZWxlY3RlZD1BdXNnZXdcdTAwZTRobHRlIHswfSBPYmpla3RlCitfVUlfT3BlbkVkaXRvckVycm9yX2xhYmVsPUVkaXRvciBcdTAwZjZmZm5lbgorX1VJX1dpemFyZF9jYXRlZ29yeT1CZWlzcGllbCBFTUYgTW9kZWxsIEVyc3RlbGx1bmdzYXNzaXN0ZW50CitfVUlfQ3JlYXRlTW9kZWxFcnJvcl9tZXNzYWdlPUF1ZmdldHJldGVuZSBQcm9ibGVtZSBpbiBkZXIgRGF0ZWkgInswfSIKK19VSV9BbmFseXNpc01vZGVsV2l6YXJkX2xhYmVsPUFuYWx5c2Vtb2RlbAorX1VJX0FuYWx5c2lzTW9kZWxXaXphcmRfZGVzY3JpcHRpb249TmV1ZXMgQW5hbHlzZS1Nb2RlbGwgZXJzdGVsbGVuCitfVUlfQW5hbHlzaXNFZGl0b3JfbGFiZWw9QW5hbHlzZW1vZGVsIEVkaXRvcgorX1VJX0FuYWx5c2lzRWRpdG9yRmlsZW5hbWVEZWZhdWx0QmFzZT1NZWluCitfVUlfQW5hbHlzaXNFZGl0b3JGaWxlbmFtZUV4dGVuc2lvbnM9QW5hbHlzZQorX1VJX1dpemFyZF9sYWJlbD1OZXUKK19XQVJOX0ZpbGVuYW1lRXh0ZW5zaW9uPURlciBEYXRlaW5hbWUgbXVzcyBhdWYgIi57MH0iIGVuZGVuCitfV0FSTl9GaWxlbmFtZUV4dGVuc2lvbnM9RGVyIERhdGVpbmFtZSBtdXNzIGVpbmUgZGVyIGZvbGdlbmRlbiBFbmR1bmdlbiBoYWJlbjogezB9CitfVUlfTW9kZWxPYmplY3Q9Jk1vZGVsIE9iamVjdAorX1VJX1hNTEVuY29kaW5nPSZYTUwgRW5jb2RpbmcKK19VSV9YTUxFbmNvZGluZ0Nob2ljZXM9VVRGLTggQVNDSUkgVVRGLTE2IFVURi0xNkJFIFVURi0xNkxFIElTTy04ODU5LTEKK19VSV9XaXphcmRfaW5pdGlhbF9vYmplY3RfZGVzY3JpcHRpb249WnUgZXJ6ZXVnZW5kZXMgTW9kZWxsb2JqZWt0IHdcdTAwZTRobGVuCitfVUlfRmlsZUNvbmZsaWN0X2xhYmVsPURhdGVpa29uZmxpa3QKK19XQVJOX0ZpbGVDb25mbGljdD1FcyBnaWJ0IG5pY2h0IGdlc3BlaWNoZXJ0ZSBcdTAwYzRuZGVydW5nZW4sIGRpZSBLb25mbGlrdGUgbWl0IFx1MDBjNG5kZXJ1bmdlbiBhdVx1MDBkZmVyaGFsYiBkZXMgRWRpdG9ycyBlcnpldWdlbi4gTVx1MDBmNmNodGVuIFNpZSBkaWUgXHUwMGM0bmRlcnVuZ2VuIGltIEVkaXRvciB2ZXJ3ZXJmZW4/CmRpZmYgLS1naXQgYS9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzL3BsdWdpbl9rci5wcm9wZXJ0aWVzIGIvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy9wbHVnaW5fa3IucHJvcGVydGllcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYTk1YmJiCi0tLSAvZGV2L251bGwKKysrIGIvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy9wbHVnaW5fa3IucHJvcGVydGllcwpAQCAtMCwwICsxLDYxIEBACisKKyMgPGNvcHlyaWdodD4KKyMgPC9jb3B5cmlnaHQ+CisjCisjICRJZDogcGx1Z2luLnByb3BlcnRpZXMsdiAxLjEgMjAwOS8wMy8yNSAwMDo1MDoyOSBzZWRsdW5kIEV4cCAkCisKK3BsdWdpbk5hbWU9U1RFTSBcdWJkODRcdWMxMWQKK3Byb3ZpZGVyTmFtZT1FY2xpcHNlLm9yZworX1VJX0NyZWF0ZUNoaWxkX3RleHQ9ezB9CitfVUlfQ3JlYXRlQ2hpbGRfdGV4dDI9ezF9IHswfQorX1VJX0NyZWF0ZUNoaWxkX3RleHQzPXsxfQorX1VJX0NyZWF0ZUNoaWxkX3Rvb2x0aXA9ezF9IFx1YWUzMFx1YjJhNSBcdWQ1NThcdWM1ZDAgXHVjMGM4IHswfSBcdWI5Y2NcdWI0ZTRcdWFlMzAKK19VSV9DcmVhdGVDaGlsZF9kZXNjcmlwdGlvbj1cdWMxMjBcdWQwZGRcdWQ1NWMgezJ9XHVjNzU4IHsxfSBcdWFlMzBcdWIyYTVcdWM1ZDAgXHViMzAwXHVkNTVjIFx1ZDYxNVx1YzJkZCB7MH1cdWM3NTggXHVjMGM4XHViODVjXHVjNmI0IENoaWxkXHViOTdjIFx1YjljY1x1YjRlZFx1YjJjOFx1YjJlNC4KK19VSV9DcmVhdGVTaWJsaW5nX2Rlc2NyaXB0aW9uPVx1YmQ4MFx1YmFhOFx1Yzc1OCBcdWMxMjBcdWQwZGRcdWI0MWMgezJ9XHVjNWQwXHVjMTFjIHsxfSBcdWFlMzBcdWIyYTVcdWM1ZDAgXHViMzAwXHVkNTVjIFx1ZDYxNVx1YzJkZCB7MH1cdWM3NTggXHVjMGM4XHViODVjXHVjNmI0IFx1ZDYxNVx1YzgxY1x1Yjk3YyBcdWI5Y2NcdWI0ZWRcdWIyYzhcdWIyZTQuCitfVUlfUHJvcGVydHlEZXNjcmlwdG9yX2Rlc2NyaXB0aW9uPXsxfSBcdWM5MTEgezB9CitfVUlfRXJyb3JGdW5jdGlvbl90eXBlPVx1YzYyNFx1Yjk1OCBcdWQ1NjhcdWMyMTgKK19VSV9UaHJlc2hvbGRFcnJvckZ1bmN0aW9uX3R5cGU9XHVjNzg0XHVhY2M0XHVhYzEyIFx1YzVkMFx1YjdlYyBcdWQ1NjhcdWMyMTgKK19VSV9SZWZlcmVuY2VTY2VuYXJpb0RhdGFNYXBfdHlwZT1cdWNjMzhcdWM4NzAgXHVjMmRjXHViMDk4XHViOWFjXHVjNjI0IFx1YjM3MFx1Yzc3NFx1ZDEzMFx1YzljMFx1YjNjNAorX1VJX1NpbXBsZUVycm9yRnVuY3Rpb25fdHlwZT1cdWFjMDRcdWIyZThcdWQ1NWMgXHVjNWQwXHViN2VjIFx1ZDU2OFx1YzIxOAorX1VJX0Vycm9yUmVzdWx0X3R5cGU9XHVjNjI0XHViOTU4IFx1YWNiMFx1YWNmYworX1VJX1Vua25vd25fdHlwZT1cdWFjMWNcdWNjYjQKK19VSV9Vbmtub3duX2RhdGF0eXBlPVx1YWMxMgorX1VJX0Vycm9yUmVzdWx0X2Vycm9yQnlUaW1lU3RlcF9mZWF0dXJlPVx1YzJkY1x1YWMwNCBcdWIyZThcdWFjYzRcdWM1ZDBcdWMxMWMgXHVjNjI0XHViOTU4IFx1YmMxY1x1YzBkZAorX1VJX0Vycm9yUmVzdWx0X2Vycm9yX2ZlYXR1cmU9XHVjNjI0XHViOTU4CitfVUlfRXJyb3JSZXN1bHRfcmVmZXJlbmNlQnlUaW1lX2ZlYXR1cmU9XHVjMmRjXHVhYzA0IFx1YjMwMFx1YmU0NCBcdWNjMzhcdWM4NzAKK19VSV9FcnJvclJlc3VsdF9tb2RlbEJ5VGltZV9mZWF0dXJlPVx1YzJkY1x1YWMwNFx1YzVkMCBcdWI1MzBcdWI5NzggXHViYWE4XHViMzc4CitfVUlfRXJyb3JSZXN1bHRfdmFsaWRhdGlvbkVycm9yX2ZlYXR1cmU9XHVjNzIwXHVkNmE4XHVjMTMxIFx1YWM4MFx1YzBhYyBcdWM2MjRcdWI5NTgKK19VSV9Vbmtub3duX2ZlYXR1cmU9XHVjOWMwXHVjODE1XHViNDE4XHVjOWMwIFx1YzU0YVx1Yzc0YworX1VJX0FuYWx5c2lzRWRpdG9yX21lbnU9JkFuYWx5c2lzIEVkaXRvcgorX1VJX0NyZWF0ZUNoaWxkX21lbnVfaXRlbT0mTmV3IENoaWxkCitfVUlfQ3JlYXRlU2libGluZ19tZW51X2l0ZW09TiYgIFx1ZDYxNVx1YzgxYyBcdWM3OTBcdWI5ZTQKK19VSV9TaG93UHJvcGVydGllc1ZpZXdfbWVudV9pdGVtPVx1ZDQ1Y1x1YzJkYyBcdWJjMGYgXHVjMThkXHVjMTMxXHViY2Y0XHVhZTMwCitfVUlfUmVmcmVzaFZpZXdlcl9tZW51X2l0ZW09JlJlZnJlc2gKK19VSV9TZWxlY3Rpb25QYWdlX2xhYmVsPVx1YzEyMFx1ZDBkZAorX1VJX1BhcmVudFBhZ2VfbGFiZWw9XHViZDgwXHViYWE4CitfVUlfTGlzdFBhZ2VfbGFiZWw9XHViYWE5XHViODVkCitfVUlfVHJlZVBhZ2VfbGFiZWw9XHViMDk4XHViYjM0CitfVUlfVGFibGVQYWdlX2xhYmVsPVx1ZDE0Y1x1Yzc3NFx1YmUxNAorX1VJX1RyZWVXaXRoQ29sdW1uc1BhZ2VfbGFiZWw9XHViMDk4XHViYjM0XHVjNjQwIFx1YzVmNAorX1VJX09iamVjdENvbHVtbl9sYWJlbD1cdWFjMWNcdWNjYjQKK19VSV9TZWxmQ29sdW1uX2xhYmVsPVx1YzE0MFx1ZDUwNAorX1VJX05vT2JqZWN0U2VsZWN0ZWQ9XHVjNTQ0XHViYjM0XHVhYzgzXHViM2M0IFx1YzU0OCBcdWMxMjBcdWQwZGRcdWQ1NjgKK19VSV9TaW5nbGVPYmplY3RTZWxlY3RlZD1cdWMxMjBcdWQwZGRcdWQ1NWMgXHVhYzFkXHVjY2I0IDogezB9CitfVUlfTXVsdGlPYmplY3RTZWxlY3RlZD1cdWMxMjBcdWQwZGRcdWI0MWMgezB9IFx1YWMxZFx1Y2NiNAorX1VJX09wZW5FZGl0b3JFcnJvcl9sYWJlbD1cdWM2MjRcdWQ1MDggXHVjNWQwXHViNTE0XHVkMTMwCitfVUlfV2l6YXJkX2NhdGVnb3J5PVx1YzYwOFx1YzgxYyBFTUYgXHViYWE4XHViMzc4IFx1YzBkZFx1YzEzMSBcdWI5YzhcdWJjOTVcdWMwYWMKK19VSV9DcmVhdGVNb2RlbEVycm9yX21lc3NhZ2U9XHVkMzBjXHVjNzdjICd7MH0gIlx1YzVkMFx1YzExYyBcdWJiMzhcdWM4MWMgXHViYzFjXHVjMGRkCitfVUlfQW5hbHlzaXNNb2RlbFdpemFyZF9sYWJlbD1cdWJkODRcdWMxMWQgXHViYWE4XHViMzc4CitfVUlfQW5hbHlzaXNNb2RlbFdpemFyZF9kZXNjcmlwdGlvbj1cdWMwYzhcdWI4NWNcdWM2YjQgXHViZDg0XHVjMTFkIFx1YmFhOFx1YjM3OFx1Yzc0NCBcdWM3OTFcdWMxMzEKK19VSV9BbmFseXNpc0VkaXRvcl9sYWJlbD1cdWJkODRcdWMxMWQgXHViYWE4XHViMzc4IFx1ZDNiOFx1YzlkMVx1YWUzMAorX1VJX0FuYWx5c2lzRWRpdG9yRmlsZW5hbWVEZWZhdWx0QmFzZT1cdWIwOThcdWM3NTgKK19VSV9BbmFseXNpc0VkaXRvckZpbGVuYW1lRXh0ZW5zaW9ucz1cdWJkODRcdWMxMWQKK19VSV9XaXphcmRfbGFiZWw9XHVjMGM4XHViODVjXHVjNmI0CitfV0FSTl9GaWxlbmFtZUV4dGVuc2lvbj1cdWQzMGNcdWM3N2MgXHVjNzc0XHViOTg0XHVjNzQwICIuezB9Ilx1Yjg1YyBcdWIwNWRcdWIwOThcdWM1N2NcdWQ1NjguCitfV0FSTl9GaWxlbmFtZUV4dGVuc2lvbnM9XHVkMzBjXHVjNzdjIFx1Yzc3NFx1Yjk4NFx1Yzc0MCBcdWIyZTRcdWM3NGMgXHVkNjU1XHVjN2E1XHVjNzkwIFx1YzkxMSBcdWQ1NThcdWIwOThcdWI5N2MgXHVhYzAwXHVjODM4XHVjNTdjXHVkNTY4IDogezB9CitfVUlfTW9kZWxPYmplY3Q9Jk1vZGVsIE9iamVjdAorX1VJX1hNTEVuY29kaW5nPSZYTUwgRW5jb2RpbmcKK19VSV9YTUxFbmNvZGluZ0Nob2ljZXM9VVRGIC0gOCBBU0NJSSBVVEYgLSAxNiBVVEYgLSAxNkJFIFVURiAtIDE2TEUgSVNPIC0gODg1OSAtIDEKK19VSV9XaXphcmRfaW5pdGlhbF9vYmplY3RfZGVzY3JpcHRpb249XHVjMGRkXHVjMTMxXHVkNTYwIFx1YmFhOFx1YjM3OCBcdWFjMWNcdWNjYjQgXHVjMTIwXHVkMGRkCitfVUlfRmlsZUNvbmZsaWN0X2xhYmVsPVx1ZDMwY1x1Yzc3YyBcdWNkYTlcdWIzY2MKK19XQVJOX0ZpbGVDb25mbGljdD1cdWM4MDBcdWM3YTVcdWI0MThcdWM5YzAgXHVjNTRhXHVjNzQwIFx1YzBhY1x1ZDU2ZFx1YjRlNFx1Yzc3NCBcdWQzYjhcdWM5ZDFcdWFlMzAgXHVjNjc4XHViZDgwXHVjNzU4IFx1YmNjMFx1YWNiZCBcdWMwYWNcdWQ1NmRcdWI0ZTRcdWFjZmMgXHVjZGE5XHViM2NjXHVkNTY4LiBcdWM3NzQgXHVkM2I4XHVjOWQxXHVhZTMwXHVjNzU4IFx1YmNjMFx1YWNiZCBcdWMwYWNcdWQ1NmRcdWI0ZTRcdWM3NDQgXHVjZGU4XHVjMThjIFx1ZDU1OFx1YzJkY1x1YWNhMFx1YzJiNVx1YjJjOFx1YWU0Yz8KZGlmZiAtLWdpdCBhL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMvcGx1Z2luX3poLnByb3BlcnRpZXMgYi9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzL3BsdWdpbl96aC5wcm9wZXJ0aWVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk1MmY1YTIKLS0tIC9kZXYvbnVsbAorKysgYi9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzL3BsdWdpbl96aC5wcm9wZXJ0aWVzCkBAIC0wLDAgKzEsNjEgQEAKKworIyA8Y29weXJpZ2h0PgorIyA8L2NvcHlyaWdodD4KKyMKKyMgJElkOiBwbHVnaW4ucHJvcGVydGllcyx2IDEuMSAyMDA5LzAzLzI1IDAwOjUwOjI5IHNlZGx1bmQgRXhwICQKKworcGx1Z2luTmFtZT1TVEVNXHU1MjA2XHU2NzkwCitwcm92aWRlck5hbWU9RWNsaXBzZS5vcmcKK19VSV9DcmVhdGVDaGlsZF90ZXh0PXswfQorX1VJX0NyZWF0ZUNoaWxkX3RleHQyPXsxfSB7MH0KK19VSV9DcmVhdGVDaGlsZF90ZXh0Mz17MX0KK19VSV9DcmVhdGVDaGlsZF90b29sdGlwPVx1NTIxYlx1NWVmYVx1NTcyOHsxfSB7MH1cdTY1YjBcdTUyOWZcdTgwZmQKK19VSV9DcmVhdGVDaGlsZF9kZXNjcmlwdGlvbj1cdTRlM2FcdTkwMDlcdTViOWFcdTc2ODR7Mn1cdTc2ODR7MX1cdTcyNzlcdTYwMjdcdTY3NjVcdTUyMWJcdTVlZmFcdTRlMDBcdTRlMmFcdTY1YjBcdTc2ODR7MH1cdTViNTBcdTdjN2IKK19VSV9DcmVhdGVTaWJsaW5nX2Rlc2NyaXB0aW9uPVx1NTcyOHsxfVx1NzY4NFx1NzIzNlx1OTZjNlx1NGUyZFx1NGUzYVx1OTAwOVx1NWI5YVx1NzY4NHsyfVx1Njc2NVx1NTIxYlx1NWVmYVx1NGUwMFx1NGUyYXswfVx1N2M3Ylx1NTc4Ylx1NzY4NFx1NjViMFx1NzY4NFx1NTE0NFx1NWYxZlx1N2M3YgorX1VJX1Byb3BlcnR5RGVzY3JpcHRvcl9kZXNjcmlwdGlvbj17MH1cdTRlY2VcdTVjNWV7MX0KK19VSV9FcnJvckZ1bmN0aW9uX3R5cGU9XHU4YmVmXHU1ZGVlXHU1MWZkXHU2NTcwCitfVUlfVGhyZXNob2xkRXJyb3JGdW5jdGlvbl90eXBlPVx1OTYwOFx1NTAzY1x1OGJlZlx1NWRlZVx1NTFmZFx1NjU3MAorX1VJX1JlZmVyZW5jZVNjZW5hcmlvRGF0YU1hcF90eXBlPVx1NTNjMlx1ODAwM1x1NjBjNVx1NjY2Zlx1NzY4NFx1NjU3MFx1NjM2ZVx1NjYyMFx1NWMwNAorX1VJX1NpbXBsZUVycm9yRnVuY3Rpb25fdHlwZT1cdTdiODBcdTUzNTVcdThiZWZcdTVkZWVcdTY1YjlcdTdhMGIKK19VSV9FcnJvclJlc3VsdF90eXBlPVx1OTUxOVx1OGJlZlx1NzY4NFx1N2VkM1x1Njc5YworX1VJX1Vua25vd25fdHlwZT1cdTViZjlcdThjNjEKK19VSV9Vbmtub3duX2RhdGF0eXBlPVx1NGVmN1x1NTAzYworX1VJX0Vycm9yUmVzdWx0X2Vycm9yQnlUaW1lU3RlcF9mZWF0dXJlPVx1OGJlZlx1NWRlZVx1NjVmNlx1OTVmNFx1NmI2NVx1OTU3ZgorX1VJX0Vycm9yUmVzdWx0X2Vycm9yX2ZlYXR1cmU9XHU5NTE5XHU4YmVmCitfVUlfRXJyb3JSZXN1bHRfcmVmZXJlbmNlQnlUaW1lX2ZlYXR1cmU9XHU1M2MyXHU4MDAzXHU2NTg3XHU3MzJlXHU2MzA5XHU2NWY2XHU5NWY0XHU2MzkyXHU1ZThmCitfVUlfRXJyb3JSZXN1bHRfbW9kZWxCeVRpbWVfZmVhdHVyZT1cdTZhMjFcdTU3OGJcdTc2ODRcdTY1ZjZcdTk1ZjQKK19VSV9FcnJvclJlc3VsdF92YWxpZGF0aW9uRXJyb3JfZmVhdHVyZT1cdTlhOGNcdThiYzFcdTk1MTlcdThiZWYKK19VSV9Vbmtub3duX2ZlYXR1cmU9XHU2NzJhXHU2MzA3XHU1YjlhCitfVUlfQW5hbHlzaXNFZGl0b3JfbWVudT0mQW5hbHlzaXMgRWRpdG9yCitfVUlfQ3JlYXRlQ2hpbGRfbWVudV9pdGVtPSZOZXcgQ2hpbGQKK19VSV9DcmVhdGVTaWJsaW5nX21lbnVfaXRlbT1cdTY1YjBcdTc1MWZcdTYyMTBcdTRlMDBcdTRlMmFcdTUxNDRcdTVmMWZcdTdjN2IKK19VSV9TaG93UHJvcGVydGllc1ZpZXdfbWVudV9pdGVtPVx1NjYzZVx1NzkzYVx1NTQ4Y1x1NWM1ZVx1NjAyN1x1NjdlNVx1NzcwYgorX1VJX1JlZnJlc2hWaWV3ZXJfbWVudV9pdGVtPSZSZWZyZXNoCitfVUlfU2VsZWN0aW9uUGFnZV9sYWJlbD1cdTkwMDlcdTYyZTkKK19VSV9QYXJlbnRQYWdlX2xhYmVsPVx1NWJiNlx1OTU3ZgorX1VJX0xpc3RQYWdlX2xhYmVsPVx1NzZlZVx1NWY1NQorX1VJX1RyZWVQYWdlX2xhYmVsPVx1NjgxMQorX1VJX1RhYmxlUGFnZV9sYWJlbD1cdTg4NjgKK19VSV9UcmVlV2l0aENvbHVtbnNQYWdlX2xhYmVsPVx1NTIwNlx1NTIxN1x1NzY4NFx1NjgxMQorX1VJX09iamVjdENvbHVtbl9sYWJlbD1cdTViZjlcdThjNjEKK19VSV9TZWxmQ29sdW1uX2xhYmVsPVx1ODFlYVx1NWRmMQorX1VJX05vT2JqZWN0U2VsZWN0ZWQ9XHU2NWUwXHU5MDA5XHU1YjlhXHU1MTg1XHU1YmI5CitfVUlfU2luZ2xlT2JqZWN0U2VsZWN0ZWQ9XHU5MDA5XHU2MmU5XHU1YmY5XHU4YzYxXHVmZjFhezB9CitfVUlfTXVsdGlPYmplY3RTZWxlY3RlZD1cdTkwMDlcdTYyZTl7MH1cdTViZjlcdThjNjEKK19VSV9PcGVuRWRpdG9yRXJyb3JfbGFiZWw9XHU2MjUzXHU1ZjAwXHU3ZjE2XHU4ZjkxXHU1NjY4CitfVUlfV2l6YXJkX2NhdGVnb3J5PVx1NGY4Ylx1NTk4MkVNRlx1NmEyMVx1NTc4Ylx1NTIxYlx1NWVmYVx1NTQxMVx1NWJmYworX1VJX0NyZWF0ZU1vZGVsRXJyb3JfbWVzc2FnZT1cdTU3MjhcdTY1ODdcdTRlZjZcdTIwMWN7MH1cdTIwMWRcdTRlMmRcdTkwNDdcdTUyMzBcdTc2ODRcdTk1ZWVcdTk4OTgKK19VSV9BbmFseXNpc01vZGVsV2l6YXJkX2xhYmVsPVx1NTIwNlx1Njc5MFx1NmEyMVx1NTc4YgorX1VJX0FuYWx5c2lzTW9kZWxXaXphcmRfZGVzY3JpcHRpb249XHU1MjFiXHU1ZWZhXHU0ZTAwXHU0ZTJhXHU2NWIwXHU3Njg0XHU1MjA2XHU2NzkwXHU2YTIxXHU1NzhiCitfVUlfQW5hbHlzaXNFZGl0b3JfbGFiZWw9XHU1MjA2XHU2NzkwXHU2YTIxXHU1NzhiXHU3ZjE2XHU4ZjkxXHU1NjY4CitfVUlfQW5hbHlzaXNFZGl0b3JGaWxlbmFtZURlZmF1bHRCYXNlPVx1NjIxMVx1NzY4NAorX1VJX0FuYWx5c2lzRWRpdG9yRmlsZW5hbWVFeHRlbnNpb25zPVx1NTIwNlx1Njc5MAorX1VJX1dpemFyZF9sYWJlbD1cdTY1YjBcdTVlZmEKK19XQVJOX0ZpbGVuYW1lRXh0ZW5zaW9uPVx1NjU4N1x1NGVmNlx1NTQwZFx1NWZjNVx1OTg3Ylx1NGVlNSd7MH0gJydcdTdlZDNcdTVjM2UKK19XQVJOX0ZpbGVuYW1lRXh0ZW5zaW9ucz1cdTY1ODdcdTRlZjZcdTU0MGRcdTVmYzVcdTk4N2JcdTUxNzdcdTY3MDlcdTRlZTVcdTRlMGJcdTYyNjlcdTVjNTVcdTU0MGRcdTRlNGJcdTRlMDBcdWZmMWF7MH0KK19VSV9Nb2RlbE9iamVjdD0mTW9kZWwgT2JqZWN0CitfVUlfWE1MRW5jb2Rpbmc9JlhNTCBFbmNvZGluZworX1VJX1hNTEVuY29kaW5nQ2hvaWNlcz1VVEYtOCBBU0NJSSBVVEYtMTYgVVRGLTE2QkUgVVRGLTE2TEUgSVNPLTg4NTktMQorX1VJX1dpemFyZF9pbml0aWFsX29iamVjdF9kZXNjcmlwdGlvbj1cdTkwMDlcdTYyZTlcdTUyMWJcdTVlZmFcdTRlMDBcdTRlMmFcdTZhMjFcdTU3OGJcdTViZjlcdThjNjEKK19VSV9GaWxlQ29uZmxpY3RfbGFiZWw9XHU2NTg3XHU0ZWY2XHU1MWIyXHU3YTgxCitfV0FSTl9GaWxlQ29uZmxpY3Q9XHU2NzA5XHU2NzJhXHU0ZmRkXHU1YjU4XHU3Njg0XHU2NmY0XHU2NTM5XHU0ZTBlXHU3ZjE2XHU4ZjkxXHU1NjY4XHU1OTE2XHU3Njg0XHU2NmY0XHU2NTM5XHU1MWIyXHU3YTgxXHUzMDAyXHU0ZjYwXHU2MGYzXHU2NTNlXHU1ZjAzXHU4ZmQ5XHU0ZTJhXHU3ZjE2XHU4ZjkxXHU1NjY4XHU3Njg0XHU2NmY0XHU2NTM5XHU1NDE3XHVmZjFmCmRpZmYgLS1naXQgYS9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzL3NjaGVtYS9lcnJvcmZ1bmN0aW9uLmV4c2QgYi9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzL3NjaGVtYS9lcnJvcmZ1bmN0aW9uLmV4c2QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWIxMGFjYwotLS0gL2Rldi9udWxsCisrKyBiL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMvc2NoZW1hL2Vycm9yZnVuY3Rpb24uZXhzZApAQCAtMCwwICsxLDEwMSBAQAorPD94bWwgdmVyc2lvbj0nMS4wJyBlbmNvZGluZz0nVVRGLTgnPz4KKzwhLS0gU2NoZW1hIGZpbGUgd3JpdHRlbiBieSBQREUgLS0+Cis8c2NoZW1hIHRhcmdldE5hbWVzcGFjZT0ib3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcyIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIj4KKzxhbm5vdGF0aW9uPgorICAgICAgPGFwcEluZm8+CisgICAgICAgICA8bWV0YS5zY2hlbWEgcGx1Z2luPSJvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzIiBpZD0iZXJyb3JmdW5jdGlvbiIgbmFtZT0ib3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5lcnJvcmZ1bmN0aW9uIi8+CisgICAgICA8L2FwcEluZm8+CisgICAgICA8ZG9jdW1lbnRhdGlvbj4KKyAgICAgICAgIEVycm9yIGZ1bmN0aW9ucyBhcmUgdXNlZCBpbiB0aGUgYW5hbHlzaXMgcGVyc3BlY3RpdmUgdG8gY2FsY3VsYXRlIGVycm9ycyBiZXR3ZWVuIGEgcmVmZXJlbmNlIGFuZCB0aGUgb3V0cHV0IG9mIGEgbW9kZWwuIAorICAgICAgICAgRXJyb3IgZnVuY3Rpb25zIGFyZSBhbHNvIHVzZWQgdG8gZml0IG1vZGVsIHBhcmFtZXRlcnMgdG8gYSByZWZlcmVuY2UgdXNpbmcgdGhlIGF1dG9tYXRlZCBleHBlcmltZW50IGZ1bmN0aW9uYWxpdHkuCisgICAgICA8L2RvY3VtZW50YXRpb24+CisgICA8L2Fubm90YXRpb24+CisKKyAgICA8aW5jbHVkZSBzY2hlbWFMb2NhdGlvbj0ic2NoZW1hOi8vb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NjaGVtYS9kdWJsaW5fY29yZS5leHNkIi8+CisKKyAgICA8ZWxlbWVudCBuYW1lPSJleHRlbnNpb24iPgorICAgICAgPGNvbXBsZXhUeXBlPgorICAgICAgICAgPHNlcXVlbmNlPgorICAgICAgICAgICAgPGVsZW1lbnQgcmVmPSJjbGFzc2RlZiIvPgorICAgICAgICAgICAgPGVsZW1lbnQgcmVmPSJkdWJsaW5fY29yZSIvPgorICAgICAgICAgPC9zZXF1ZW5jZT4KKyAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0icG9pbnQiIHR5cGU9InN0cmluZyIgdXNlPSJyZXF1aXJlZCI+CisgICAgICAgICAgICA8YW5ub3RhdGlvbj4KKyAgICAgICAgICAgICAgIDxkb2N1bWVudGF0aW9uPgorICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICA8L2RvY3VtZW50YXRpb24+CisgICAgICAgICAgICA8L2Fubm90YXRpb24+CisgICAgICAgICA8L2F0dHJpYnV0ZT4KKyAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0iaWQiIHR5cGU9InN0cmluZyI+CisgICAgICAgICAgICA8YW5ub3RhdGlvbj4KKyAgICAgICAgICAgICAgIDxkb2N1bWVudGF0aW9uPgorICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICA8L2RvY3VtZW50YXRpb24+CisgICAgICAgICAgICA8L2Fubm90YXRpb24+CisgICAgICAgICA8L2F0dHJpYnV0ZT4KKyAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0ibmFtZSIgdHlwZT0ic3RyaW5nIj4KKyAgICAgICAgICAgIDxhbm5vdGF0aW9uPgorICAgICAgICAgICAgICAgPGRvY3VtZW50YXRpb24+CisgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgIDwvZG9jdW1lbnRhdGlvbj4KKyAgICAgICAgICAgICAgIDxhcHBJbmZvPgorICAgICAgICAgICAgICAgICAgPG1ldGEuYXR0cmlidXRlIHRyYW5zbGF0YWJsZT0idHJ1ZSIvPgorICAgICAgICAgICAgICAgPC9hcHBJbmZvPgorICAgICAgICAgICAgPC9hbm5vdGF0aW9uPgorICAgICAgICAgPC9hdHRyaWJ1dGU+CisgICAgICA8L2NvbXBsZXhUeXBlPgorICAgPC9lbGVtZW50PgorCisgICA8ZWxlbWVudCBuYW1lPSJjbGFzc2RlZiI+CisgICAgICA8Y29tcGxleFR5cGU+CisgICAgICAgICA8YXR0cmlidXRlIG5hbWU9ImNsYXNzIiB0eXBlPSJzdHJpbmciIHVzZT0icmVxdWlyZWQiPgorICAgICAgICAgICAgPGFubm90YXRpb24+CisgICAgICAgICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KKyAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgorICAgICAgICAgICAgICAgPGFwcEluZm8+CisgICAgICAgICAgICAgICAgICA8bWV0YS5hdHRyaWJ1dGUga2luZD0iamF2YSIgYmFzZWRPbj0ib3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLmltcGwuRGlzZWFzZU1vZGVsSW1wbDpvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuRGlzZWFzZU1vZGVsIi8+CisgICAgICAgICAgICAgICA8L2FwcEluZm8+CisgICAgICAgICAgICA8L2Fubm90YXRpb24+CisgICAgICAgICA8L2F0dHJpYnV0ZT4KKyAgICAgIDwvY29tcGxleFR5cGU+CisgICA8L2VsZW1lbnQ+CisgICAKKyAgIDxhbm5vdGF0aW9uPgorICAgICAgPGFwcEluZm8+CisgICAgICAgICA8bWV0YS5zZWN0aW9uIHR5cGU9InNpbmNlIi8+CisgICAgICA8L2FwcEluZm8+CisgICAgICA8ZG9jdW1lbnRhdGlvbj4KKyAgICAgICAgIFtFbnRlciB0aGUgZmlyc3QgcmVsZWFzZSBpbiB3aGljaCB0aGlzIGV4dGVuc2lvbiBwb2ludCBhcHBlYXJzLl0KKyAgICAgIDwvZG9jdW1lbnRhdGlvbj4KKyAgIDwvYW5ub3RhdGlvbj4KKworICAgPGFubm90YXRpb24+CisgICAgICA8YXBwSW5mbz4KKyAgICAgICAgIDxtZXRhLnNlY3Rpb24gdHlwZT0iZXhhbXBsZXMiLz4KKyAgICAgIDwvYXBwSW5mbz4KKyAgICAgIDxkb2N1bWVudGF0aW9uPgorICAgICAgICAgW0VudGVyIGV4dGVuc2lvbiBwb2ludCB1c2FnZSBleGFtcGxlIGhlcmUuXQorICAgICAgPC9kb2N1bWVudGF0aW9uPgorICAgPC9hbm5vdGF0aW9uPgorCisgICA8YW5ub3RhdGlvbj4KKyAgICAgIDxhcHBJbmZvPgorICAgICAgICAgPG1ldGEuc2VjdGlvbiB0eXBlPSJhcGlpbmZvIi8+CisgICAgICA8L2FwcEluZm8+CisgICAgICA8ZG9jdW1lbnRhdGlvbj4KKyAgICAgICAgIFtFbnRlciBBUEkgaW5mb3JtYXRpb24gaGVyZS5dCisgICAgICA8L2RvY3VtZW50YXRpb24+CisgICA8L2Fubm90YXRpb24+CisKKyAgIDxhbm5vdGF0aW9uPgorICAgICAgPGFwcEluZm8+CisgICAgICAgICA8bWV0YS5zZWN0aW9uIHR5cGU9ImltcGxlbWVudGF0aW9uIi8+CisgICAgICA8L2FwcEluZm8+CisgICAgICA8ZG9jdW1lbnRhdGlvbj4KKyAgICAgICAgIFtFbnRlciBpbmZvcm1hdGlvbiBhYm91dCBzdXBwbGllZCBpbXBsZW1lbnRhdGlvbiBvZiB0aGlzIGV4dGVuc2lvbiBwb2ludC5dCisgICAgICA8L2RvY3VtZW50YXRpb24+CisgICA8L2Fubm90YXRpb24+CisKKworPC9zY2hlbWE+CmRpZmYgLS1naXQgYS9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2FuYWx5c2lzL0FjdGl2YXRvci5qYXZhIGIvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9hbmFseXNpcy9BY3RpdmF0b3IuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZjIyZDgzCi0tLSAvZGV2L251bGwKKysrIGIvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9hbmFseXNpcy9BY3RpdmF0b3IuamF2YQpAQCAtMCwwICsxLDExMiBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA5IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QbHVnaW47CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlN0YXR1czsKK2ltcG9ydCBvcmcub3NnaS5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dDsKKworLyoqCisgKiBUaGUgYWN0aXZhdG9yIGNsYXNzIGNvbnRyb2xzIHRoZSBwbHVnLWluIGxpZmUgY3ljbGUKKyAqLworQFN1cHByZXNzV2FybmluZ3MoImFsbCIpCitwdWJsaWMgY2xhc3MgQWN0aXZhdG9yIGV4dGVuZHMgUGx1Z2luIHsKKworCS8qKgorCSAqIFRoZSBwbHVnLWluIElECisJICovIAorCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFBMVUdJTl9JRCA9ICJvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzIjsgLy8kTk9OLU5MUy0xJAorCisJLy8gVGhlIHNoYXJlZCBpbnN0YW5jZQorCXByaXZhdGUgc3RhdGljIEFjdGl2YXRvciBwbHVnaW47CisJCisJLyoqCisJICogVGhlIGNvbnN0cnVjdG9yCisJICovCisJcHVibGljIEFjdGl2YXRvcigpIHsKKwl9CisJCisJLyoqCisJICogTG9nIGluZm9ybWF0aW9uIHRvIHRoZSBJTG9nIGZvciB0aGlzIHBsdWdpbgorCSAqIFRoZSBtZXRob2QgaXMgb3ZlcmxvYWRlZCB0byBhbGxvdyBmb3IgbG9nSW5mb3JtYXRpb24gd2l0aG91dCBhbiBlcnJvciAKKwkgKiBtZXRob2Qgc2V0cyB0aGUgZXJyb3IgdG8gbnVsbC4gVGhpcyBzaG91bGQgYmUgdXNlZCBpbnN0ZWFkIG9mIFN5c3RlbS5vdXQucHJpbnRsbgorCSAqIHRocm91Z2hvdXQgdGhlIGNvZGUuCisJICogQHBhcmFtIG1lc3NhZ2UKKwkgKiAgICAgICAgICAgIHRoZSBsb2NhbGl6ZWQgaW5mb3JtYXRpb24gbWVzc2FnZSB0ZXh0CisJICoKKwkgKi8KKwlwdWJsaWMgc3RhdGljIHZvaWQgbG9nSW5mb3JtYXRpb24oU3RyaW5nIG1lc3NhZ2UpIHsKKwkJaWYocGx1Z2luICE9IG51bGwpIAorCQkJcGx1Z2luLmdldExvZygpLmxvZygKKwkJCQluZXcgU3RhdHVzKElTdGF0dXMuSU5GTywgcGx1Z2luLmdldEJ1bmRsZSgpLmdldFN5bWJvbGljTmFtZSgpLAorCQkJCQkJMCwgbWVzc2FnZSwgbnVsbCkpOworCQkJZWxzZSAKKwkJCQkvLyBObworCQkJCVN5c3RlbS5vdXQucHJpbnRsbihtZXNzYWdlKTsKKwl9IC8vIGxvZ0luZm9ybWF0aW9uCisKKwkvKioKKwkgKiBMb2cgYW4gZXJyb3IgdG8gdGhlIElMb2cgZm9yIHRoaXMgcGx1Z2luCisJICogCisJICogQHBhcmFtIG1lc3NhZ2UKKwkgKiAgICAgICAgICAgIHRoZSBsb2NhbGl6ZWQgZXJyb3IgbWVzc2FnZSB0ZXh0CisJICogQHBhcmFtIGV4Y2VwdGlvbgorCSAqICAgICAgICAgICAgdGhlIGFzc29jaWF0ZWQgZXhjZXB0aW9uLCBvciBudWxsCisJICovCisJcHVibGljIHN0YXRpYyB2b2lkIGxvZ0Vycm9yKFN0cmluZyBtZXNzYWdlLCBUaHJvd2FibGUgZXhjZXB0aW9uKSB7CisJCS8vIERvIHdlIGhhdmUgYSBwbHVnaW4/CisJCWlmIChwbHVnaW4gIT0gbnVsbCkgeworCQkJLy8gWWVzCisJCQlwbHVnaW4uZ2V0TG9nKCkubG9nKAorCQkJCQluZXcgU3RhdHVzKElTdGF0dXMuRVJST1IsIHBsdWdpbi5nZXRCdW5kbGUoKQorCQkJCQkJCS5nZXRTeW1ib2xpY05hbWUoKSwgMCwgbWVzc2FnZSwgZXhjZXB0aW9uKSk7CisJCX0gZWxzZSB7CisJCQkvLyBObworCQkJU3lzdGVtLm91dC5wcmludGxuKG1lc3NhZ2UpOworCQkJLy8gRXhjZXB0aW9uPworCQkJaWYgKGV4Y2VwdGlvbiAhPSBudWxsKSB7CisJCQkJLy8gWWVzCisJCQkJU3lzdGVtLm91dC5wcmludGxuKGV4Y2VwdGlvbi5nZXRNZXNzYWdlKCkpOworCQkJfSAvLyBpZgorCQl9CisJfSAvLyBsb2dFcnJvcgorCQorCS8qCisJICogQHNlZSBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGx1Z2lucyNzdGFydChvcmcub3NnaS5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBzdGFydChCdW5kbGVDb250ZXh0IGNvbnRleHQpIHRocm93cyBFeGNlcHRpb24geworCQlzdXBlci5zdGFydChjb250ZXh0KTsKKwkJcGx1Z2luID0gdGhpczsKKwl9CisKKwkvKgorCSAqIChub24tSmF2YWRvYykKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QbHVnaW4jc3RvcChvcmcub3NnaS5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBzdG9wKEJ1bmRsZUNvbnRleHQgY29udGV4dCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCXBsdWdpbiA9IG51bGw7CisJCXN1cGVyLnN0b3AoY29udGV4dCk7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgc2hhcmVkIGluc3RhbmNlCisJICoKKwkgKiBAcmV0dXJuIHRoZSBzaGFyZWQgaW5zdGFuY2UKKwkgKi8KKwlwdWJsaWMgc3RhdGljIEFjdGl2YXRvciBnZXREZWZhdWx0KCkgeworCQlyZXR1cm4gcGx1Z2luOworCX0KKworfSAvLyBBY3RpdmF0b3IKZGlmZiAtLWdpdCBhL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vYW5hbHlzaXMvQW5hbHlzaXNGYWN0b3J5LmphdmEgYi9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2FuYWx5c2lzL0FuYWx5c2lzRmFjdG9yeS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEwN2M4Y2QKLS0tIC9kZXYvbnVsbAorKysgYi9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2FuYWx5c2lzL0FuYWx5c2lzRmFjdG9yeS5qYXZhCkBAIC0wLDAgKzEsODcgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpczsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUZhY3Rvcnk7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIFRoZSA8Yj5GYWN0b3J5PC9iPiBmb3IgdGhlIG1vZGVsLgorICogSXQgcHJvdmlkZXMgYSBjcmVhdGUgbWV0aG9kIGZvciBlYWNoIG5vbi1hYnN0cmFjdCBjbGFzcyBvZiB0aGUgbW9kZWwuCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5BbmFseXNpc1BhY2thZ2UKKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGludGVyZmFjZSBBbmFseXNpc0ZhY3RvcnkgZXh0ZW5kcyBFRmFjdG9yeSB7CisJLyoqCisJICogVGhlIHNpbmdsZXRvbiBpbnN0YW5jZSBvZiB0aGUgZmFjdG9yeS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlBbmFseXNpc0ZhY3RvcnkgZUlOU1RBTkNFID0gb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5pbXBsLkFuYWx5c2lzRmFjdG9yeUltcGwuaW5pdCgpOworCisJLyoqCisJICogUmV0dXJucyBhIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5FcnJvciBGdW5jdGlvbjwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+RXJyb3IgRnVuY3Rpb248L2VtPicuCisJICogQGdlbmVyYXRlZAorCSAqLworCUVycm9yRnVuY3Rpb24gY3JlYXRlRXJyb3JGdW5jdGlvbigpOworCisJLyoqCisJICogUmV0dXJucyBhIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5UaHJlc2hvbGQgRXJyb3IgRnVuY3Rpb248L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPlRocmVzaG9sZCBFcnJvciBGdW5jdGlvbjwvZW0+Jy4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJVGhyZXNob2xkRXJyb3JGdW5jdGlvbiBjcmVhdGVUaHJlc2hvbGRFcnJvckZ1bmN0aW9uKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPlJlZmVyZW5jZSBTY2VuYXJpbyBEYXRhIE1hcDwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+UmVmZXJlbmNlIFNjZW5hcmlvIERhdGEgTWFwPC9lbT4nLgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlSZWZlcmVuY2VTY2VuYXJpb0RhdGFNYXAgY3JlYXRlUmVmZXJlbmNlU2NlbmFyaW9EYXRhTWFwKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPlNpbXBsZSBFcnJvciBGdW5jdGlvbjwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+U2ltcGxlIEVycm9yIEZ1bmN0aW9uPC9lbT4nLgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlTaW1wbGVFcnJvckZ1bmN0aW9uIGNyZWF0ZVNpbXBsZUVycm9yRnVuY3Rpb24oKTsKKworCS8qKgorCSAqIFJldHVybnMgYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+RXJyb3IgUmVzdWx0PC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiBhIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5FcnJvciBSZXN1bHQ8L2VtPicuCisJICogQGdlbmVyYXRlZAorCSAqLworCUVycm9yUmVzdWx0IGNyZWF0ZUVycm9yUmVzdWx0KCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBwYWNrYWdlIHN1cHBvcnRlZCBieSB0aGlzIGZhY3RvcnkuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBwYWNrYWdlIHN1cHBvcnRlZCBieSB0aGlzIGZhY3RvcnkuCisJICogQGdlbmVyYXRlZAorCSAqLworCUFuYWx5c2lzUGFja2FnZSBnZXRBbmFseXNpc1BhY2thZ2UoKTsKKworfSAvL0FuYWx5c2lzRmFjdG9yeQpkaWZmIC0tZ2l0IGEvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9hbmFseXNpcy9BbmFseXNpc1BhY2thZ2UuamF2YSBiL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vYW5hbHlzaXMvQW5hbHlzaXNQYWNrYWdlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDM0YWY4MwotLS0gL2Rldi9udWxsCisrKyBiL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vYW5hbHlzaXMvQW5hbHlzaXNQYWNrYWdlLmphdmEKQEAgLTAsMCArMSw0MTcgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpczsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUF0dHJpYnV0ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FUGFja2FnZTsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogVGhlIDxiPlBhY2thZ2U8L2I+IGZvciB0aGUgbW9kZWwuCisgKiBJdCBjb250YWlucyBhY2Nlc3NvcnMgZm9yIHRoZSBtZXRhIG9iamVjdHMgdG8gcmVwcmVzZW50CisgKiA8dWw+CisgKiAgIDxsaT5lYWNoIGNsYXNzLDwvbGk+CisgKiAgIDxsaT5lYWNoIGZlYXR1cmUgb2YgZWFjaCBjbGFzcyw8L2xpPgorICogICA8bGk+ZWFjaCBlbnVtLDwvbGk+CisgKiAgIDxsaT5hbmQgZWFjaCBkYXRhIHR5cGU8L2xpPgorICogPC91bD4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLkFuYWx5c2lzRmFjdG9yeQorICogQG1vZGVsIGtpbmQ9InBhY2thZ2UiCisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBpbnRlcmZhY2UgQW5hbHlzaXNQYWNrYWdlIGV4dGVuZHMgRVBhY2thZ2UgeworCS8qKgorCSAqIFRoZSBwYWNrYWdlIG5hbWUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJU3RyaW5nIGVOQU1FID0gImFuYWx5c2lzIjsKKworCS8qKgorCSAqIFRoZSBwYWNrYWdlIG5hbWVzcGFjZSBVUkkuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJU3RyaW5nIGVOU19VUkkgPSAiaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2FuYWx5c2lzLmVjb3JlIjsKKworCS8qKgorCSAqIFRoZSBwYWNrYWdlIG5hbWVzcGFjZSBuYW1lLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCVN0cmluZyBlTlNfUFJFRklYID0gIm9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMiOworCisJLyoqCisJICogVGhlIHNpbmdsZXRvbiBpbnN0YW5jZSBvZiB0aGUgcGFja2FnZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlBbmFseXNpc1BhY2thZ2UgZUlOU1RBTkNFID0gb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5pbXBsLkFuYWx5c2lzUGFja2FnZUltcGwuaW5pdCgpOworCisJLyoqCisJICogVGhlIG1ldGEgb2JqZWN0IGlkIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmltcGwuRXJyb3JGdW5jdGlvbkltcGwgPGVtPkVycm9yIEZ1bmN0aW9uPC9lbT59JyBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5pbXBsLkVycm9yRnVuY3Rpb25JbXBsCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmltcGwuQW5hbHlzaXNQYWNrYWdlSW1wbCNnZXRFcnJvckZ1bmN0aW9uKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJaW50IEVSUk9SX0ZVTkNUSU9OID0gMDsKKworCS8qKgorCSAqIFRoZSBudW1iZXIgb2Ygc3RydWN0dXJhbCBmZWF0dXJlcyBvZiB0aGUgJzxlbT5FcnJvciBGdW5jdGlvbjwvZW0+JyBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBFUlJPUl9GVU5DVElPTl9GRUFUVVJFX0NPVU5UID0gMDsKKworCisJLyoqCisJICogVGhlIG1ldGEgb2JqZWN0IGlkIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmltcGwuVGhyZXNob2xkRXJyb3JGdW5jdGlvbkltcGwgPGVtPlRocmVzaG9sZCBFcnJvciBGdW5jdGlvbjwvZW0+fScgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuaW1wbC5UaHJlc2hvbGRFcnJvckZ1bmN0aW9uSW1wbAorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5pbXBsLkFuYWx5c2lzUGFja2FnZUltcGwjZ2V0VGhyZXNob2xkRXJyb3JGdW5jdGlvbigpCisJICogQGdlbmVyYXRlZAorCSAqLworCWludCBUSFJFU0hPTERfRVJST1JfRlVOQ1RJT04gPSAxOworCisJLyoqCisJICogVGhlIG51bWJlciBvZiBzdHJ1Y3R1cmFsIGZlYXR1cmVzIG9mIHRoZSAnPGVtPlRocmVzaG9sZCBFcnJvciBGdW5jdGlvbjwvZW0+JyBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBUSFJFU0hPTERfRVJST1JfRlVOQ1RJT05fRkVBVFVSRV9DT1VOVCA9IEVSUk9SX0ZVTkNUSU9OX0ZFQVRVUkVfQ09VTlQgKyAwOworCisJLyoqCisJICogVGhlIG1ldGEgb2JqZWN0IGlkIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmltcGwuUmVmZXJlbmNlU2NlbmFyaW9EYXRhTWFwSW1wbCA8ZW0+UmVmZXJlbmNlIFNjZW5hcmlvIERhdGEgTWFwPC9lbT59JyBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5pbXBsLlJlZmVyZW5jZVNjZW5hcmlvRGF0YU1hcEltcGwKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuaW1wbC5BbmFseXNpc1BhY2thZ2VJbXBsI2dldFJlZmVyZW5jZVNjZW5hcmlvRGF0YU1hcCgpCisJICogQGdlbmVyYXRlZAorCSAqLworCWludCBSRUZFUkVOQ0VfU0NFTkFSSU9fREFUQV9NQVAgPSAyOworCisJLyoqCisJICogVGhlIG51bWJlciBvZiBzdHJ1Y3R1cmFsIGZlYXR1cmVzIG9mIHRoZSAnPGVtPlJlZmVyZW5jZSBTY2VuYXJpbyBEYXRhIE1hcDwvZW0+JyBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBSRUZFUkVOQ0VfU0NFTkFSSU9fREFUQV9NQVBfRkVBVFVSRV9DT1VOVCA9IDA7CisKKwkvKioKKwkgKiBUaGUgbWV0YSBvYmplY3QgaWQgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuaW1wbC5TaW1wbGVFcnJvckZ1bmN0aW9uSW1wbCA8ZW0+U2ltcGxlIEVycm9yIEZ1bmN0aW9uPC9lbT59JyBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5pbXBsLlNpbXBsZUVycm9yRnVuY3Rpb25JbXBsCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmltcGwuQW5hbHlzaXNQYWNrYWdlSW1wbCNnZXRTaW1wbGVFcnJvckZ1bmN0aW9uKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJaW50IFNJTVBMRV9FUlJPUl9GVU5DVElPTiA9IDM7CisKKwkvKioKKwkgKiBUaGUgbnVtYmVyIG9mIHN0cnVjdHVyYWwgZmVhdHVyZXMgb2YgdGhlICc8ZW0+U2ltcGxlIEVycm9yIEZ1bmN0aW9uPC9lbT4nIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNJTVBMRV9FUlJPUl9GVU5DVElPTl9GRUFUVVJFX0NPVU5UID0gRVJST1JfRlVOQ1RJT05fRkVBVFVSRV9DT1VOVCArIDA7CisKKwkvKioKKwkgKiBUaGUgbWV0YSBvYmplY3QgaWQgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuaW1wbC5FcnJvclJlc3VsdEltcGwgPGVtPkVycm9yIFJlc3VsdDwvZW0+fScgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuaW1wbC5FcnJvclJlc3VsdEltcGwKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuaW1wbC5BbmFseXNpc1BhY2thZ2VJbXBsI2dldEVycm9yUmVzdWx0KCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJaW50IEVSUk9SX1JFU1VMVCA9IDQ7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RXJyb3IgQnkgVGltZSBTdGVwPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgRVJST1JfUkVTVUxUX19FUlJPUl9CWV9USU1FX1NURVAgPSAwOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkVycm9yPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgRVJST1JfUkVTVUxUX19FUlJPUiA9IDE7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+UmVmZXJlbmNlIEJ5IFRpbWU8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBFUlJPUl9SRVNVTFRfX1JFRkVSRU5DRV9CWV9USU1FID0gMjsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5Nb2RlbCBCeSBUaW1lPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgRVJST1JfUkVTVUxUX19NT0RFTF9CWV9USU1FID0gMzsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5WYWxpZGF0aW9uIEVycm9yPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgRVJST1JfUkVTVUxUX19WQUxJREFUSU9OX0VSUk9SID0gNDsKKworCS8qKgorCSAqIFRoZSBudW1iZXIgb2Ygc3RydWN0dXJhbCBmZWF0dXJlcyBvZiB0aGUgJzxlbT5FcnJvciBSZXN1bHQ8L2VtPicgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgRVJST1JfUkVTVUxUX0ZFQVRVUkVfQ09VTlQgPSA1OworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5FcnJvckZ1bmN0aW9uIDxlbT5FcnJvciBGdW5jdGlvbjwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJzxlbT5FcnJvciBGdW5jdGlvbjwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuRXJyb3JGdW5jdGlvbgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQ2xhc3MgZ2V0RXJyb3JGdW5jdGlvbigpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5UaHJlc2hvbGRFcnJvckZ1bmN0aW9uIDxlbT5UaHJlc2hvbGQgRXJyb3IgRnVuY3Rpb248L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICc8ZW0+VGhyZXNob2xkIEVycm9yIEZ1bmN0aW9uPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5UaHJlc2hvbGRFcnJvckZ1bmN0aW9uCisJICogQGdlbmVyYXRlZAorCSAqLworCUVDbGFzcyBnZXRUaHJlc2hvbGRFcnJvckZ1bmN0aW9uKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLlJlZmVyZW5jZVNjZW5hcmlvRGF0YU1hcCA8ZW0+UmVmZXJlbmNlIFNjZW5hcmlvIERhdGEgTWFwPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAnPGVtPlJlZmVyZW5jZSBTY2VuYXJpbyBEYXRhIE1hcDwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuUmVmZXJlbmNlU2NlbmFyaW9EYXRhTWFwCisJICogQGdlbmVyYXRlZAorCSAqLworCUVDbGFzcyBnZXRSZWZlcmVuY2VTY2VuYXJpb0RhdGFNYXAoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuU2ltcGxlRXJyb3JGdW5jdGlvbiA8ZW0+U2ltcGxlIEVycm9yIEZ1bmN0aW9uPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAnPGVtPlNpbXBsZSBFcnJvciBGdW5jdGlvbjwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuU2ltcGxlRXJyb3JGdW5jdGlvbgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQ2xhc3MgZ2V0U2ltcGxlRXJyb3JGdW5jdGlvbigpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5FcnJvclJlc3VsdCA8ZW0+RXJyb3IgUmVzdWx0PC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAnPGVtPkVycm9yIFJlc3VsdDwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuRXJyb3JSZXN1bHQKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUNsYXNzIGdldEVycm9yUmVzdWx0KCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuRXJyb3JSZXN1bHQjZ2V0RXJyb3JCeVRpbWVTdGVwIDxlbT5FcnJvciBCeSBUaW1lIFN0ZXA8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxlbT5FcnJvciBCeSBUaW1lIFN0ZXA8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLkVycm9yUmVzdWx0I2dldEVycm9yQnlUaW1lU3RlcCgpCisJICogQHNlZSAjZ2V0RXJyb3JSZXN1bHQoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQXR0cmlidXRlIGdldEVycm9yUmVzdWx0X0Vycm9yQnlUaW1lU3RlcCgpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLkVycm9yUmVzdWx0I2dldEVycm9yIDxlbT5FcnJvcjwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPGVtPkVycm9yPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5FcnJvclJlc3VsdCNnZXRFcnJvcigpCisJICogQHNlZSAjZ2V0RXJyb3JSZXN1bHQoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQXR0cmlidXRlIGdldEVycm9yUmVzdWx0X0Vycm9yKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuRXJyb3JSZXN1bHQjZ2V0UmVmZXJlbmNlQnlUaW1lIDxlbT5SZWZlcmVuY2UgQnkgVGltZTwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPGVtPlJlZmVyZW5jZSBCeSBUaW1lPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5FcnJvclJlc3VsdCNnZXRSZWZlcmVuY2VCeVRpbWUoKQorCSAqIEBzZWUgI2dldEVycm9yUmVzdWx0KCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUF0dHJpYnV0ZSBnZXRFcnJvclJlc3VsdF9SZWZlcmVuY2VCeVRpbWUoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5FcnJvclJlc3VsdCNnZXRNb2RlbEJ5VGltZSA8ZW0+TW9kZWwgQnkgVGltZTwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPGVtPk1vZGVsIEJ5IFRpbWU8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLkVycm9yUmVzdWx0I2dldE1vZGVsQnlUaW1lKCkKKwkgKiBAc2VlICNnZXRFcnJvclJlc3VsdCgpCisJICogQGdlbmVyYXRlZAorCSAqLworCUVBdHRyaWJ1dGUgZ2V0RXJyb3JSZXN1bHRfTW9kZWxCeVRpbWUoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5FcnJvclJlc3VsdCNnZXRWYWxpZGF0aW9uRXJyb3IgPGVtPlZhbGlkYXRpb24gRXJyb3I8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxlbT5WYWxpZGF0aW9uIEVycm9yPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5FcnJvclJlc3VsdCNnZXRWYWxpZGF0aW9uRXJyb3IoKQorCSAqIEBzZWUgI2dldEVycm9yUmVzdWx0KCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUF0dHJpYnV0ZSBnZXRFcnJvclJlc3VsdF9WYWxpZGF0aW9uRXJyb3IoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIGZhY3RvcnkgdGhhdCBjcmVhdGVzIHRoZSBpbnN0YW5jZXMgb2YgdGhlIG1vZGVsLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgZmFjdG9yeSB0aGF0IGNyZWF0ZXMgdGhlIGluc3RhbmNlcyBvZiB0aGUgbW9kZWwuCisJICogQGdlbmVyYXRlZAorCSAqLworCUFuYWx5c2lzRmFjdG9yeSBnZXRBbmFseXNpc0ZhY3RvcnkoKTsKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogRGVmaW5lcyBsaXRlcmFscyBmb3IgdGhlIG1ldGEgb2JqZWN0cyB0aGF0IHJlcHJlc2VudAorCSAqIDx1bD4KKwkgKiAgIDxsaT5lYWNoIGNsYXNzLDwvbGk+CisJICogICA8bGk+ZWFjaCBmZWF0dXJlIG9mIGVhY2ggY2xhc3MsPC9saT4KKwkgKiAgIDxsaT5lYWNoIGVudW0sPC9saT4KKwkgKiAgIDxsaT5hbmQgZWFjaCBkYXRhIHR5cGU8L2xpPgorCSAqIDwvdWw+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCWludGVyZmFjZSBMaXRlcmFscyB7CisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5pbXBsLkVycm9yRnVuY3Rpb25JbXBsIDxlbT5FcnJvciBGdW5jdGlvbjwvZW0+fScgY2xhc3MuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuaW1wbC5FcnJvckZ1bmN0aW9uSW1wbAorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuaW1wbC5BbmFseXNpc1BhY2thZ2VJbXBsI2dldEVycm9yRnVuY3Rpb24oKQorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQ2xhc3MgRVJST1JfRlVOQ1RJT04gPSBlSU5TVEFOQ0UuZ2V0RXJyb3JGdW5jdGlvbigpOworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuaW1wbC5UaHJlc2hvbGRFcnJvckZ1bmN0aW9uSW1wbCA8ZW0+VGhyZXNob2xkIEVycm9yIEZ1bmN0aW9uPC9lbT59JyBjbGFzcy4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5pbXBsLlRocmVzaG9sZEVycm9yRnVuY3Rpb25JbXBsCisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5pbXBsLkFuYWx5c2lzUGFja2FnZUltcGwjZ2V0VGhyZXNob2xkRXJyb3JGdW5jdGlvbigpCisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVDbGFzcyBUSFJFU0hPTERfRVJST1JfRlVOQ1RJT04gPSBlSU5TVEFOQ0UuZ2V0VGhyZXNob2xkRXJyb3JGdW5jdGlvbigpOworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuaW1wbC5SZWZlcmVuY2VTY2VuYXJpb0RhdGFNYXBJbXBsIDxlbT5SZWZlcmVuY2UgU2NlbmFyaW8gRGF0YSBNYXA8L2VtPn0nIGNsYXNzLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmltcGwuUmVmZXJlbmNlU2NlbmFyaW9EYXRhTWFwSW1wbAorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuaW1wbC5BbmFseXNpc1BhY2thZ2VJbXBsI2dldFJlZmVyZW5jZVNjZW5hcmlvRGF0YU1hcCgpCisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVDbGFzcyBSRUZFUkVOQ0VfU0NFTkFSSU9fREFUQV9NQVAgPSBlSU5TVEFOQ0UuZ2V0UmVmZXJlbmNlU2NlbmFyaW9EYXRhTWFwKCk7CisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5pbXBsLlNpbXBsZUVycm9yRnVuY3Rpb25JbXBsIDxlbT5TaW1wbGUgRXJyb3IgRnVuY3Rpb248L2VtPn0nIGNsYXNzLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmltcGwuU2ltcGxlRXJyb3JGdW5jdGlvbkltcGwKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmltcGwuQW5hbHlzaXNQYWNrYWdlSW1wbCNnZXRTaW1wbGVFcnJvckZ1bmN0aW9uKCkKKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUNsYXNzIFNJTVBMRV9FUlJPUl9GVU5DVElPTiA9IGVJTlNUQU5DRS5nZXRTaW1wbGVFcnJvckZ1bmN0aW9uKCk7CisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5pbXBsLkVycm9yUmVzdWx0SW1wbCA8ZW0+RXJyb3IgUmVzdWx0PC9lbT59JyBjbGFzcy4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5pbXBsLkVycm9yUmVzdWx0SW1wbAorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuaW1wbC5BbmFseXNpc1BhY2thZ2VJbXBsI2dldEVycm9yUmVzdWx0KCkKKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUNsYXNzIEVSUk9SX1JFU1VMVCA9IGVJTlNUQU5DRS5nZXRFcnJvclJlc3VsdCgpOworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPkVycm9yIEJ5IFRpbWUgU3RlcDwvYj48L2VtPicgYXR0cmlidXRlIGZlYXR1cmUuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQXR0cmlidXRlIEVSUk9SX1JFU1VMVF9fRVJST1JfQllfVElNRV9TVEVQID0gZUlOU1RBTkNFLmdldEVycm9yUmVzdWx0X0Vycm9yQnlUaW1lU3RlcCgpOworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPkVycm9yPC9iPjwvZW0+JyBhdHRyaWJ1dGUgZmVhdHVyZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVBdHRyaWJ1dGUgRVJST1JfUkVTVUxUX19FUlJPUiA9IGVJTlNUQU5DRS5nZXRFcnJvclJlc3VsdF9FcnJvcigpOworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPlJlZmVyZW5jZSBCeSBUaW1lPC9iPjwvZW0+JyBhdHRyaWJ1dGUgZmVhdHVyZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVBdHRyaWJ1dGUgRVJST1JfUkVTVUxUX19SRUZFUkVOQ0VfQllfVElNRSA9IGVJTlNUQU5DRS5nZXRFcnJvclJlc3VsdF9SZWZlcmVuY2VCeVRpbWUoKTsKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5Nb2RlbCBCeSBUaW1lPC9iPjwvZW0+JyBhdHRyaWJ1dGUgZmVhdHVyZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVBdHRyaWJ1dGUgRVJST1JfUkVTVUxUX19NT0RFTF9CWV9USU1FID0gZUlOU1RBTkNFLmdldEVycm9yUmVzdWx0X01vZGVsQnlUaW1lKCk7CisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+VmFsaWRhdGlvbiBFcnJvcjwvYj48L2VtPicgYXR0cmlidXRlIGZlYXR1cmUuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQXR0cmlidXRlIEVSUk9SX1JFU1VMVF9fVkFMSURBVElPTl9FUlJPUiA9IGVJTlNUQU5DRS5nZXRFcnJvclJlc3VsdF9WYWxpZGF0aW9uRXJyb3IoKTsKKworCX0KKworfSAvL0FuYWx5c2lzUGFja2FnZQpkaWZmIC0tZ2l0IGEvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9hbmFseXNpcy9Db25zdGFudHMuamF2YSBiL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vYW5hbHlzaXMvQ29uc3RhbnRzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmExOGRlMwotLS0gL2Rldi9udWxsCisrKyBiL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vYW5hbHlzaXMvQ29uc3RhbnRzLmphdmEKQEAgLTAsMCArMSwyMSBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA5LDIwMTAgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitwdWJsaWMgY2xhc3MgQ29uc3RhbnRzIHsKKworCXB1YmxpYyBmaW5hbCBzdGF0aWMgU3RyaW5nIElEX0VSUk9SRlVOQ1RJT05fRVhURU5TSU9OX1BPSU5UID0gb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLkNvbnN0YW50cy5JRF9ST09UCisJKyAiLmFuYWx5c2lzLmVycm9yZnVuY3Rpb24iOworCQorCXB1YmxpYyBmaW5hbCBzdGF0aWMgU3RyaW5nIEVSUk9SRlVOQ1RJT05fRUxFTUVOVCA9ICJjbGFzc2RlZiI7CisJCit9CmRpZmYgLS1naXQgYS9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2FuYWx5c2lzL0Rpc2Vhc2VUeXBlLmphdmEgYi9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2FuYWx5c2lzL0Rpc2Vhc2VUeXBlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWQ3YTJmNAotLS0gL2Rldi9udWxsCisrKyBiL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vYW5hbHlzaXMvRGlzZWFzZVR5cGUuamF2YQpAQCAtMCwwICsxLDE5IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXM7CisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA5IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCitwdWJsaWMgZW51bSBEaXNlYXNlVHlwZSB7CisJU0VJUiwgCisJU0lSLAorCVNJLAorCU9USEVSCit9CmRpZmYgLS1naXQgYS9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2FuYWx5c2lzL0Vycm9yRnVuY3Rpb24uamF2YSBiL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vYW5hbHlzaXMvRXJyb3JGdW5jdGlvbi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJiNzQyNzcKLS0tIC9kZXYvbnVsbAorKysgYi9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2FuYWx5c2lzL0Vycm9yRnVuY3Rpb24uamF2YQpAQCAtMCwwICsxLDMxIEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXM7CisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA5IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0OworCisKKy8qKgorICogCisgKiBAYXV0aG9yIGVkbHVuZAorICogQG1vZGVsCisgKi8KK3B1YmxpYyBpbnRlcmZhY2UgRXJyb3JGdW5jdGlvbiBleHRlbmRzIEVPYmplY3QgeworCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAbW9kZWwKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRXJyb3JSZXN1bHQgY2FsY3VsYXRlRXJyb3IoUmVmZXJlbmNlU2NlbmFyaW9EYXRhTWFwIHJlZmVyZW5jZSwgUmVmZXJlbmNlU2NlbmFyaW9EYXRhTWFwIGRhdGEpOworCit9CmRpZmYgLS1naXQgYS9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2FuYWx5c2lzL0Vycm9yUmVzdWx0LmphdmEgYi9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2FuYWx5c2lzL0Vycm9yUmVzdWx0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjY1ZGJhNwotLS0gL2Rldi9udWxsCisrKyBiL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vYW5hbHlzaXMvRXJyb3JSZXN1bHQuamF2YQpAQCAtMCwwICsxLDE3MCBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA5IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5FTGlzdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdDsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogQSByZXByZXNlbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+RXJyb3IgUmVzdWx0PC9iPjwvZW0+Jy4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICoKKyAqIDxwPgorICogVGhlIGZvbGxvd2luZyBmZWF0dXJlcyBhcmUgc3VwcG9ydGVkOgorICogPHVsPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuRXJyb3JSZXN1bHQjZ2V0RXJyb3JCeVRpbWVTdGVwIDxlbT5FcnJvciBCeSBUaW1lIFN0ZXA8L2VtPn08L2xpPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuRXJyb3JSZXN1bHQjZ2V0RXJyb3IgPGVtPkVycm9yPC9lbT59PC9saT4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLkVycm9yUmVzdWx0I2dldFJlZmVyZW5jZUJ5VGltZSA8ZW0+UmVmZXJlbmNlIEJ5IFRpbWU8L2VtPn08L2xpPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuRXJyb3JSZXN1bHQjZ2V0TW9kZWxCeVRpbWUgPGVtPk1vZGVsIEJ5IFRpbWU8L2VtPn08L2xpPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuRXJyb3JSZXN1bHQjZ2V0VmFsaWRhdGlvbkVycm9yIDxlbT5WYWxpZGF0aW9uIEVycm9yPC9lbT59PC9saT4KKyAqIDwvdWw+CisgKiA8L3A+CisgKgorICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLkFuYWx5c2lzUGFja2FnZSNnZXRFcnJvclJlc3VsdCgpCisgKiBAbW9kZWwKKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGludGVyZmFjZSBFcnJvclJlc3VsdCBleHRlbmRzIEVPYmplY3QgeworCisJLyoqCisJICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+RXJyb3IgQnkgVGltZSBTdGVwPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8cD4KKwkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5FcnJvciBCeSBUaW1lIFN0ZXA8L2VtPicgYXR0cmlidXRlIGlzbid0IGNsZWFyLAorCSAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4KKwkgKiA8L3A+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+RXJyb3IgQnkgVGltZSBTdGVwPC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiBAc2VlICNzZXRFcnJvckJ5VGltZVN0ZXAoRUxpc3QpCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLkFuYWx5c2lzUGFja2FnZSNnZXRFcnJvclJlc3VsdF9FcnJvckJ5VGltZVN0ZXAoKQorCSAqIEBtb2RlbCBtYW55PSJmYWxzZSIgdHJhbnNpZW50PSJ0cnVlIgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFTGlzdDxEb3VibGU+IGdldEVycm9yQnlUaW1lU3RlcCgpOworCisJLyoqCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5FcnJvclJlc3VsdCNnZXRFcnJvckJ5VGltZVN0ZXAgPGVtPkVycm9yIEJ5IFRpbWUgU3RlcDwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+RXJyb3IgQnkgVGltZSBTdGVwPC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiBAc2VlICNnZXRFcnJvckJ5VGltZVN0ZXAoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwl2b2lkIHNldEVycm9yQnlUaW1lU3RlcChFTGlzdDxEb3VibGU+IHZhbHVlKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPkVycm9yPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8cD4KKwkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5FcnJvcjwvZW0+JyBhdHRyaWJ1dGUgaXNuJ3QgY2xlYXIsCisJICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLgorCSAqIDwvcD4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5FcnJvcjwvZW0+JyBhdHRyaWJ1dGUuCisJICogQHNlZSAjc2V0RXJyb3IoZG91YmxlKQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5BbmFseXNpc1BhY2thZ2UjZ2V0RXJyb3JSZXN1bHRfRXJyb3IoKQorCSAqIEBtb2RlbCB0cmFuc2llbnQ9InRydWUiCisJICogQGdlbmVyYXRlZAorCSAqLworCWRvdWJsZSBnZXRFcnJvcigpOworCisJLyoqCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5FcnJvclJlc3VsdCNnZXRFcnJvciA8ZW0+RXJyb3I8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPkVycm9yPC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiBAc2VlICNnZXRFcnJvcigpCisJICogQGdlbmVyYXRlZAorCSAqLworCXZvaWQgc2V0RXJyb3IoZG91YmxlIHZhbHVlKTsKKwkKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5SZWZlcmVuY2UgQnkgVGltZTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPHA+CisJICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+UmVmZXJlbmNlIEJ5IFRpbWU8L2VtPicgYXR0cmlidXRlIGlzbid0IGNsZWFyLAorCSAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4KKwkgKiA8L3A+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+UmVmZXJlbmNlIEJ5IFRpbWU8L2VtPicgYXR0cmlidXRlLgorCSAqIEBzZWUgI3NldFJlZmVyZW5jZUJ5VGltZShFTGlzdCkKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuQW5hbHlzaXNQYWNrYWdlI2dldEVycm9yUmVzdWx0X1JlZmVyZW5jZUJ5VGltZSgpCisJICogQG1vZGVsIG1hbnk9ImZhbHNlIiB0cmFuc2llbnQ9InRydWUiCisJICogQGdlbmVyYXRlZAorCSAqLworCUVMaXN0PERvdWJsZT4gZ2V0UmVmZXJlbmNlQnlUaW1lKCk7CisKKwkvKioKKwkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLkVycm9yUmVzdWx0I2dldFJlZmVyZW5jZUJ5VGltZSA8ZW0+UmVmZXJlbmNlIEJ5IFRpbWU8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPlJlZmVyZW5jZSBCeSBUaW1lPC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiBAc2VlICNnZXRSZWZlcmVuY2VCeVRpbWUoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwl2b2lkIHNldFJlZmVyZW5jZUJ5VGltZShFTGlzdDxEb3VibGU+IHZhbHVlKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPk1vZGVsIEJ5IFRpbWU8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDxwPgorCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPk1vZGVsIEJ5IFRpbWU8L2VtPicgYXR0cmlidXRlIGlzbid0IGNsZWFyLAorCSAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4KKwkgKiA8L3A+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+TW9kZWwgQnkgVGltZTwvZW0+JyBhdHRyaWJ1dGUuCisJICogQHNlZSAjc2V0TW9kZWxCeVRpbWUoRUxpc3QpCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLkFuYWx5c2lzUGFja2FnZSNnZXRFcnJvclJlc3VsdF9Nb2RlbEJ5VGltZSgpCisJICogQG1vZGVsIG1hbnk9ImZhbHNlIiB0cmFuc2llbnQ9InRydWUiCisJICogQGdlbmVyYXRlZAorCSAqLworCUVMaXN0PERvdWJsZT4gZ2V0TW9kZWxCeVRpbWUoKTsKKworCS8qKgorCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuRXJyb3JSZXN1bHQjZ2V0TW9kZWxCeVRpbWUgPGVtPk1vZGVsIEJ5IFRpbWU8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPk1vZGVsIEJ5IFRpbWU8L2VtPicgYXR0cmlidXRlLgorCSAqIEBzZWUgI2dldE1vZGVsQnlUaW1lKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJdm9pZCBzZXRNb2RlbEJ5VGltZShFTGlzdDxEb3VibGU+IHZhbHVlKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPlZhbGlkYXRpb24gRXJyb3I8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDxwPgorCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPlZhbGlkYXRpb24gRXJyb3I8L2VtPicgYXR0cmlidXRlIGlzbid0IGNsZWFyLAorCSAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4KKwkgKiA8L3A+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+VmFsaWRhdGlvbiBFcnJvcjwvZW0+JyBhdHRyaWJ1dGUuCisJICogQHNlZSAjc2V0VmFsaWRhdGlvbkVycm9yKGRvdWJsZSkKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuQW5hbHlzaXNQYWNrYWdlI2dldEVycm9yUmVzdWx0X1ZhbGlkYXRpb25FcnJvcigpCisJICogQG1vZGVsCisJICogQGdlbmVyYXRlZAorCSAqLworCWRvdWJsZSBnZXRWYWxpZGF0aW9uRXJyb3IoKTsKKworCS8qKgorCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuRXJyb3JSZXN1bHQjZ2V0VmFsaWRhdGlvbkVycm9yIDxlbT5WYWxpZGF0aW9uIEVycm9yPC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5WYWxpZGF0aW9uIEVycm9yPC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiBAc2VlICNnZXRWYWxpZGF0aW9uRXJyb3IoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwl2b2lkIHNldFZhbGlkYXRpb25FcnJvcihkb3VibGUgdmFsdWUpOworCisJcHVibGljIEVycm9yUmVzdWx0IGNvcHkoKTsKK30gLy8gRXJyb3JSZXN1bHQKZGlmZiAtLWdpdCBhL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vYW5hbHlzaXMvUmVmZXJlbmNlU2NlbmFyaW9EYXRhTWFwLmphdmEgYi9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2FuYWx5c2lzL1JlZmVyZW5jZVNjZW5hcmlvRGF0YU1hcC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY1MDRjYjYKLS0tIC9kZXYvbnVsbAorKysgYi9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2FuYWx5c2lzL1JlZmVyZW5jZVNjZW5hcmlvRGF0YU1hcC5qYXZhCkBAIC0wLDAgKzEsNDAgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpczsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNywgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmltcGwuUmVmZXJlbmNlU2NlbmFyaW9EYXRhTWFwSW1wbDsKKworCisvKioKKyogVGhlIGNsYXNzIHN0b3JlcyBzY2VuYXJpbyByZWZlcmVuY2UgZGF0YSBmb3IgYSBzY2VuYXJpbyBkaXNlYXNlIGFzIHdlbGwgYXMgYWRkaXRpb25hbCBtZXRhLWRhdGEuIAorKiAKKyogQG1vZGVsCisqIEBnZW5lcmF0ZWQgTk9UCisqLworQFN1cHByZXNzV2FybmluZ3MoImFsbCIpCitwdWJsaWMgaW50ZXJmYWNlIFJlZmVyZW5jZVNjZW5hcmlvRGF0YU1hcCBleHRlbmRzIEVPYmplY3QgewkJCisJCisJLyoqCisJICogSXMgdGhpcyBtYXAgKGFuZCB0aGUgbW9kZWwgdGhhdCBjcmVhdGVkIGl0KSBzYW5lPworCSAqIEByZXR1cm4KKwkgKi8KKwlwdWJsaWMgYm9vbGVhbiBzYW5lKCk7CisJCisJLyoqCisJICogSXMgdGhpcyBtYXAgY29uc2lzdGVudCB3aXRoIGFub3RoZXIgbWFwPworCSAqIFRoaXMgaXMgbGlrZSAiZXF1YWwiIGJ1dCBhbGxvd3MgZm9yIHNtYWxsIGRpZmZlcmVuY2VzIHdoZW4gY29tcGFyaW5nIGRvdWJsZShzKQorCSAqIEBwYXJhbSBvdGhlcgorCSAqIEByZXR1cm4KKwkgKi8KKwlwdWJsaWMgYm9vbGVhbiBjb25zaXN0ZW50V2l0aChSZWZlcmVuY2VTY2VuYXJpb0RhdGFNYXBJbXBsIG90aGVyKTsKK30KZGlmZiAtLWdpdCBhL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vYW5hbHlzaXMvU2NlbmFyaW9Jbml0aWFsaXphdGlvbkV4Y2VwdGlvbi5qYXZhIGIvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9hbmFseXNpcy9TY2VuYXJpb0luaXRpYWxpemF0aW9uRXhjZXB0aW9uLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDM4ZWZlMAotLS0gL2Rldi9udWxsCisrKyBiL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vYW5hbHlzaXMvU2NlbmFyaW9Jbml0aWFsaXphdGlvbkV4Y2VwdGlvbi5qYXZhCkBAIC0wLDAgKzEsMzUgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpczsKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDcsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioKKyAqIFRocm93biB3aGVuIHdlIGZhaWwgdG8gbG9hZCBhIHNjZW5hcmlvIGZvciBhbnkgcmVhc29uCisgKi8KKworcHVibGljIGNsYXNzIFNjZW5hcmlvSW5pdGlhbGl6YXRpb25FeGNlcHRpb24gZXh0ZW5kcyBFeGNlcHRpb24geworCXByaXZhdGUgc3RhdGljIGZpbmFsIGxvbmcgc2VyaWFsVmVyc2lvblVJRCA9IDFMOworCisJLyoqCisJICogQ29uc3RydWN0b3IKKwkgKiAKKwkgKiBAcGFyYW0gbWVzc2FnZQorCSAqLworCXB1YmxpYyBTY2VuYXJpb0luaXRpYWxpemF0aW9uRXhjZXB0aW9uKFN0cmluZyBtZXNzYWdlKSB7c3VwZXIobWVzc2FnZSk7fQorCQorCisJLyoqCisJICogQ29uc3RydWN0b3IKKwkgKiAKKwkgKiBAcGFyYW0gdAorCSAqLworCXB1YmxpYyBTY2VuYXJpb0luaXRpYWxpemF0aW9uRXhjZXB0aW9uKFRocm93YWJsZSB0KSB7c3VwZXIodCk7fQorCit9CmRpZmYgLS1naXQgYS9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2FuYWx5c2lzL1NpbXBsZUVycm9yRnVuY3Rpb24uamF2YSBiL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vYW5hbHlzaXMvU2ltcGxlRXJyb3JGdW5jdGlvbi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVmZDcxNGYKLS0tIC9kZXYvbnVsbAorKysgYi9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2FuYWx5c2lzL1NpbXBsZUVycm9yRnVuY3Rpb24uamF2YQpAQCAtMCwwICsxLDI3IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXM7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDkgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIEEgcmVwcmVzZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPlNpbXBsZSBFcnJvciBGdW5jdGlvbjwvYj48L2VtPicuCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqCisgKgorICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLkFuYWx5c2lzUGFja2FnZSNnZXRTaW1wbGVFcnJvckZ1bmN0aW9uKCkKKyAqIEBtb2RlbAorICogQGdlbmVyYXRlZAorICovCitAU3VwcHJlc3NXYXJuaW5ncygiYWxsIikKK3B1YmxpYyBpbnRlcmZhY2UgU2ltcGxlRXJyb3JGdW5jdGlvbiBleHRlbmRzIEVycm9yRnVuY3Rpb24geworfSAvLyBTaW1wbGVFcnJvckZ1bmN0aW9uCmRpZmYgLS1naXQgYS9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2FuYWx5c2lzL1N0YXRlcy5qYXZhIGIvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9hbmFseXNpcy9TdGF0ZXMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYjhkNDdhCi0tLSAvZGV2L251bGwKKysrIGIvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9hbmFseXNpcy9TdGF0ZXMuamF2YQpAQCAtMCwwICsxLDQ2IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXM7CisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA5IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworcHVibGljIGNsYXNzIFN0YXRlcyB7CisJLyoqCisgICAgICogcG9zc2libGUgc3RhdGVzIHdpdGggcGFyYW1ldGVycyB0byBmaXQKKyAgICAgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZ1tdIHN0YXRlc1RvRml0PSB7IlMiLCJFIiwiSSIsIlIiLCJQIiwgIkluY2lkZW5jZSIsIkRpc2Vhc2UgRGVhdGhzIn07CisJLyoqCisJICogIFN1c2NlcHRpYmxlIGluZGV4IChmb3Igc3RhdGVzVG9GaXQpCisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgU1VTQ0VQVElCTEUgPSAwOworCS8qKgorCSAqIEV4cG9zZWQgaW5kZXggKGZvciBzdGF0ZXNUb0ZpdCkKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIGludCBFWFBPU0VEICAgICA9IDE7CisJLyoqCisJICogSW5mZWN0aW91cyBpbmRleCAoZm9yIHN0YXRlc1RvRml0KQorCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IElORkVDVElPVVMgID0gMjsKKwkvKioKKwkgKiAgUmVjb3ZlcmVkIGluZGV4IChmb3Igc3RhdGVzVG9GaXQpCisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgUkVDT1ZFUkVEICAgPSAzOworCS8qKgorCSAqICBJbmZlY3Rpb3VzIHJlY292ZXIgaW5kZXggKGZvciBzdGF0ZXNUb0ZpdCkKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIGludCBQT1BVTEFUSU9OID0gNDsKKwkvKioKKwkgKiAgSW5jaWRlbmNlCisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgSU5DSURFTkNFID0gNTsKKwkvKioKKwkgKiAgRGlzZWFzZSBEZWF0aHMKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIGludCBESVNFQVNFX0RFQVRIUyA9IDY7Cit9CmRpZmYgLS1naXQgYS9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2FuYWx5c2lzL1RocmVzaG9sZEVycm9yRnVuY3Rpb24uamF2YSBiL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vYW5hbHlzaXMvVGhyZXNob2xkRXJyb3JGdW5jdGlvbi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgyZWQ0YzkKLS0tIC9kZXYvbnVsbAorKysgYi9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2FuYWx5c2lzL1RocmVzaG9sZEVycm9yRnVuY3Rpb24uamF2YQpAQCAtMCwwICsxLDI3IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA5IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzOworCisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIEEgcmVwcmVzZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPlRocmVzaG9sZCBFcnJvciBGdW5jdGlvbjwvYj48L2VtPicuCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqCisgKgorICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLkFuYWx5c2lzUGFja2FnZSNnZXRUaHJlc2hvbGRFcnJvckZ1bmN0aW9uKCkKKyAqIEBtb2RlbAorICogQGdlbmVyYXRlZAorICovCitAU3VwcHJlc3NXYXJuaW5ncygiYWxsIikKK3B1YmxpYyBpbnRlcmZhY2UgVGhyZXNob2xkRXJyb3JGdW5jdGlvbiBleHRlbmRzIEVycm9yRnVuY3Rpb24geworfSAvLyBUaHJlc2hvbGRFcnJvckZ1bmN0aW9uCmRpZmYgLS1naXQgYS9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2FuYWx5c2lzL2ltcGwvQW5hbHlzaXNGYWN0b3J5SW1wbC5qYXZhIGIvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9hbmFseXNpcy9pbXBsL0FuYWx5c2lzRmFjdG9yeUltcGwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NTA0NTA2Ci0tLSAvZGV2L251bGwKKysrIGIvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9hbmFseXNpcy9pbXBsL0FuYWx5c2lzRmFjdG9yeUltcGwuamF2YQpAQCAtMCwwICsxLDE1MSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5pbXBsOworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzczsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRVBhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLmltcGwuRUZhY3RvcnlJbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5wbHVnaW4uRWNvcmVQbHVnaW47CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5BbmFseXNpc0ZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5BbmFseXNpc1BhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5FcnJvckZ1bmN0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuRXJyb3JSZXN1bHQ7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5SZWZlcmVuY2VTY2VuYXJpb0RhdGFNYXA7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5TaW1wbGVFcnJvckZ1bmN0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuVGhyZXNob2xkRXJyb3JGdW5jdGlvbjsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIG1vZGVsIDxiPkZhY3Rvcnk8L2I+LgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBBbmFseXNpc0ZhY3RvcnlJbXBsIGV4dGVuZHMgRUZhY3RvcnlJbXBsIGltcGxlbWVudHMgQW5hbHlzaXNGYWN0b3J5IHsKKwkvKioKKwkgKiBDcmVhdGVzIHRoZSBkZWZhdWx0IGZhY3RvcnkgaW1wbGVtZW50YXRpb24uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHN0YXRpYyBBbmFseXNpc0ZhY3RvcnkgaW5pdCgpIHsKKwkJdHJ5IHsKKwkJCUFuYWx5c2lzRmFjdG9yeSB0aGVBbmFseXNpc0ZhY3RvcnkgPSAoQW5hbHlzaXNGYWN0b3J5KUVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVGYWN0b3J5KCJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vYW5hbHlzaXMuZWNvcmUiKTsgCisJCQlpZiAodGhlQW5hbHlzaXNGYWN0b3J5ICE9IG51bGwpIHsKKwkJCQlyZXR1cm4gdGhlQW5hbHlzaXNGYWN0b3J5OworCQkJfQorCQl9CisJCWNhdGNoIChFeGNlcHRpb24gZXhjZXB0aW9uKSB7CisJCQlFY29yZVBsdWdpbi5JTlNUQU5DRS5sb2coZXhjZXB0aW9uKTsKKwkJfQorCQlyZXR1cm4gbmV3IEFuYWx5c2lzRmFjdG9yeUltcGwoKTsKKwl9CisKKwkvKioKKwkgKiBDcmVhdGVzIGFuIGluc3RhbmNlIG9mIHRoZSBmYWN0b3J5LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBBbmFseXNpc0ZhY3RvcnlJbXBsKCkgeworCQlzdXBlcigpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBFT2JqZWN0IGNyZWF0ZShFQ2xhc3MgZUNsYXNzKSB7CisJCXN3aXRjaCAoZUNsYXNzLmdldENsYXNzaWZpZXJJRCgpKSB7CisJCQljYXNlIEFuYWx5c2lzUGFja2FnZS5FUlJPUl9GVU5DVElPTjogcmV0dXJuIGNyZWF0ZUVycm9yRnVuY3Rpb24oKTsKKwkJCWNhc2UgQW5hbHlzaXNQYWNrYWdlLlRIUkVTSE9MRF9FUlJPUl9GVU5DVElPTjogcmV0dXJuIGNyZWF0ZVRocmVzaG9sZEVycm9yRnVuY3Rpb24oKTsKKwkJCWNhc2UgQW5hbHlzaXNQYWNrYWdlLlJFRkVSRU5DRV9TQ0VOQVJJT19EQVRBX01BUDogcmV0dXJuIGNyZWF0ZVJlZmVyZW5jZVNjZW5hcmlvRGF0YU1hcCgpOworCQkJY2FzZSBBbmFseXNpc1BhY2thZ2UuU0lNUExFX0VSUk9SX0ZVTkNUSU9OOiByZXR1cm4gY3JlYXRlU2ltcGxlRXJyb3JGdW5jdGlvbigpOworCQkJY2FzZSBBbmFseXNpc1BhY2thZ2UuRVJST1JfUkVTVUxUOiByZXR1cm4gY3JlYXRlRXJyb3JSZXN1bHQoKTsKKwkJCWRlZmF1bHQ6CisJCQkJdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiVGhlIGNsYXNzICciICsgZUNsYXNzLmdldE5hbWUoKSArICInIGlzIG5vdCBhIHZhbGlkIGNsYXNzaWZpZXIiKTsKKwkJfQorCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFcnJvckZ1bmN0aW9uIGNyZWF0ZUVycm9yRnVuY3Rpb24oKSB7CisJCUVycm9yRnVuY3Rpb25JbXBsIGVycm9yRnVuY3Rpb24gPSBuZXcgRXJyb3JGdW5jdGlvbkltcGwoKTsKKwkJcmV0dXJuIGVycm9yRnVuY3Rpb247CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFRocmVzaG9sZEVycm9yRnVuY3Rpb24gY3JlYXRlVGhyZXNob2xkRXJyb3JGdW5jdGlvbigpIHsKKwkJVGhyZXNob2xkRXJyb3JGdW5jdGlvbkltcGwgdGhyZXNob2xkRXJyb3JGdW5jdGlvbiA9IG5ldyBUaHJlc2hvbGRFcnJvckZ1bmN0aW9uSW1wbCgpOworCQlyZXR1cm4gdGhyZXNob2xkRXJyb3JGdW5jdGlvbjsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgUmVmZXJlbmNlU2NlbmFyaW9EYXRhTWFwIGNyZWF0ZVJlZmVyZW5jZVNjZW5hcmlvRGF0YU1hcCgpIHsKKwkJUmVmZXJlbmNlU2NlbmFyaW9EYXRhTWFwSW1wbCByZWZlcmVuY2VTY2VuYXJpb0RhdGFNYXAgPSBuZXcgUmVmZXJlbmNlU2NlbmFyaW9EYXRhTWFwSW1wbCgpOworCQlyZXR1cm4gcmVmZXJlbmNlU2NlbmFyaW9EYXRhTWFwOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBTaW1wbGVFcnJvckZ1bmN0aW9uIGNyZWF0ZVNpbXBsZUVycm9yRnVuY3Rpb24oKSB7CisJCVNpbXBsZUVycm9yRnVuY3Rpb25JbXBsIHNpbXBsZUVycm9yRnVuY3Rpb24gPSBuZXcgU2ltcGxlRXJyb3JGdW5jdGlvbkltcGwoKTsKKwkJcmV0dXJuIHNpbXBsZUVycm9yRnVuY3Rpb247CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVycm9yUmVzdWx0IGNyZWF0ZUVycm9yUmVzdWx0KCkgeworCQlFcnJvclJlc3VsdEltcGwgZXJyb3JSZXN1bHQgPSBuZXcgRXJyb3JSZXN1bHRJbXBsKCk7CisJCXJldHVybiBlcnJvclJlc3VsdDsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQW5hbHlzaXNQYWNrYWdlIGdldEFuYWx5c2lzUGFja2FnZSgpIHsKKwkJcmV0dXJuIChBbmFseXNpc1BhY2thZ2UpZ2V0RVBhY2thZ2UoKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBkZXByZWNhdGVkCisJICogQGdlbmVyYXRlZAorCSAqLworCUBEZXByZWNhdGVkCisJcHVibGljIHN0YXRpYyBBbmFseXNpc1BhY2thZ2UgZ2V0UGFja2FnZSgpIHsKKwkJcmV0dXJuIEFuYWx5c2lzUGFja2FnZS5lSU5TVEFOQ0U7CisJfQorCit9IC8vQW5hbHlzaXNGYWN0b3J5SW1wbApkaWZmIC0tZ2l0IGEvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9hbmFseXNpcy9pbXBsL0FuYWx5c2lzUGFja2FnZUltcGwuamF2YSBiL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vYW5hbHlzaXMvaW1wbC9BbmFseXNpc1BhY2thZ2VJbXBsLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjRlOTMyOAotLS0gL2Rldi9udWxsCisrKyBiL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vYW5hbHlzaXMvaW1wbC9BbmFseXNpc1BhY2thZ2VJbXBsLmphdmEKQEAgLTAsMCArMSwzMjUgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDkgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuaW1wbDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQXR0cmlidXRlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVHZW5lcmljVHlwZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9wZXJhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRVBhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLmltcGwuRVBhY2thZ2VJbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuQW5hbHlzaXNGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuQW5hbHlzaXNQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuRXJyb3JGdW5jdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLkVycm9yUmVzdWx0OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuUmVmZXJlbmNlU2NlbmFyaW9EYXRhTWFwOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuU2ltcGxlRXJyb3JGdW5jdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLlRocmVzaG9sZEVycm9yRnVuY3Rpb247CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIEFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBtb2RlbCA8Yj5QYWNrYWdlPC9iPi4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgQW5hbHlzaXNQYWNrYWdlSW1wbCBleHRlbmRzIEVQYWNrYWdlSW1wbCBpbXBsZW1lbnRzIEFuYWx5c2lzUGFja2FnZSB7CisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJpdmF0ZSBFQ2xhc3MgZXJyb3JGdW5jdGlvbkVDbGFzcyA9IG51bGw7CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcml2YXRlIEVDbGFzcyB0aHJlc2hvbGRFcnJvckZ1bmN0aW9uRUNsYXNzID0gbnVsbDsKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcml2YXRlIEVDbGFzcyByZWZlcmVuY2VTY2VuYXJpb0RhdGFNYXBFQ2xhc3MgPSBudWxsOworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByaXZhdGUgRUNsYXNzIHNpbXBsZUVycm9yRnVuY3Rpb25FQ2xhc3MgPSBudWxsOworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByaXZhdGUgRUNsYXNzIGVycm9yUmVzdWx0RUNsYXNzID0gbnVsbDsKKwkvKioKKwkgKiBDcmVhdGVzIGFuIGluc3RhbmNlIG9mIHRoZSBtb2RlbCA8Yj5QYWNrYWdlPC9iPiwgcmVnaXN0ZXJlZCB3aXRoCisJICoge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FUGFja2FnZS5SZWdpc3RyeSBFUGFja2FnZS5SZWdpc3RyeX0gYnkgdGhlIHBhY2thZ2UKKwkgKiBwYWNrYWdlIFVSSSB2YWx1ZS4KKwkgKiA8cD5Ob3RlOiB0aGUgY29ycmVjdCB3YXkgdG8gY3JlYXRlIHRoZSBwYWNrYWdlIGlzIHZpYSB0aGUgc3RhdGljCisJICogZmFjdG9yeSBtZXRob2Qge0BsaW5rICNpbml0IGluaXQoKX0sIHdoaWNoIGFsc28gcGVyZm9ybXMKKwkgKiBpbml0aWFsaXphdGlvbiBvZiB0aGUgcGFja2FnZSwgb3IgcmV0dXJucyB0aGUgcmVnaXN0ZXJlZCBwYWNrYWdlLAorCSAqIGlmIG9uZSBhbHJlYWR5IGV4aXN0cy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVQYWNrYWdlLlJlZ2lzdHJ5CisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLkFuYWx5c2lzUGFja2FnZSNlTlNfVVJJCisJICogQHNlZSAjaW5pdCgpCisJICogQGdlbmVyYXRlZAorCSAqLworCXByaXZhdGUgQW5hbHlzaXNQYWNrYWdlSW1wbCgpIHsKKwkJc3VwZXIoZU5TX1VSSSwgQW5hbHlzaXNGYWN0b3J5LmVJTlNUQU5DRSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJpdmF0ZSBzdGF0aWMgYm9vbGVhbiBpc0luaXRlZCA9IGZhbHNlOworCisJLyoqCisJICogQ3JlYXRlcywgcmVnaXN0ZXJzLCBhbmQgaW5pdGlhbGl6ZXMgdGhlIDxiPlBhY2thZ2U8L2I+IGZvciB0aGlzIG1vZGVsLCBhbmQgZm9yIGFueSBvdGhlcnMgdXBvbiB3aGljaCBpdCBkZXBlbmRzLgorCSAqIAorCSAqIDxwPlRoaXMgbWV0aG9kIGlzIHVzZWQgdG8gaW5pdGlhbGl6ZSB7QGxpbmsgQW5hbHlzaXNQYWNrYWdlI2VJTlNUQU5DRX0gd2hlbiB0aGF0IGZpZWxkIGlzIGFjY2Vzc2VkLgorCSAqIENsaWVudHMgc2hvdWxkIG5vdCBpbnZva2UgaXQgZGlyZWN0bHkuIEluc3RlYWQsIHRoZXkgc2hvdWxkIHNpbXBseSBhY2Nlc3MgdGhhdCBmaWVsZCB0byBvYnRhaW4gdGhlIHBhY2thZ2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNlTlNfVVJJCisJICogQHNlZSAjY3JlYXRlUGFja2FnZUNvbnRlbnRzKCkKKwkgKiBAc2VlICNpbml0aWFsaXplUGFja2FnZUNvbnRlbnRzKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHN0YXRpYyBBbmFseXNpc1BhY2thZ2UgaW5pdCgpIHsKKwkJaWYgKGlzSW5pdGVkKSByZXR1cm4gKEFuYWx5c2lzUGFja2FnZSlFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShBbmFseXNpc1BhY2thZ2UuZU5TX1VSSSk7CisKKwkJLy8gT2J0YWluIG9yIGNyZWF0ZSBhbmQgcmVnaXN0ZXIgcGFja2FnZQorCQlBbmFseXNpc1BhY2thZ2VJbXBsIHRoZUFuYWx5c2lzUGFja2FnZSA9IChBbmFseXNpc1BhY2thZ2VJbXBsKShFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXQoZU5TX1VSSSkgaW5zdGFuY2VvZiBBbmFseXNpc1BhY2thZ2VJbXBsID8gRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0KGVOU19VUkkpIDogbmV3IEFuYWx5c2lzUGFja2FnZUltcGwoKSk7CisKKwkJaXNJbml0ZWQgPSB0cnVlOworCisJCS8vIENyZWF0ZSBwYWNrYWdlIG1ldGEtZGF0YSBvYmplY3RzCisJCXRoZUFuYWx5c2lzUGFja2FnZS5jcmVhdGVQYWNrYWdlQ29udGVudHMoKTsKKworCQkvLyBJbml0aWFsaXplIGNyZWF0ZWQgbWV0YS1kYXRhCisJCXRoZUFuYWx5c2lzUGFja2FnZS5pbml0aWFsaXplUGFja2FnZUNvbnRlbnRzKCk7CisKKwkJLy8gTWFyayBtZXRhLWRhdGEgdG8gaW5kaWNhdGUgaXQgY2FuJ3QgYmUgY2hhbmdlZAorCQl0aGVBbmFseXNpc1BhY2thZ2UuZnJlZXplKCk7CisKKyAgCisJCS8vIFVwZGF0ZSB0aGUgcmVnaXN0cnkgYW5kIHJldHVybiB0aGUgcGFja2FnZQorCQlFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5wdXQoQW5hbHlzaXNQYWNrYWdlLmVOU19VUkksIHRoZUFuYWx5c2lzUGFja2FnZSk7CisJCXJldHVybiB0aGVBbmFseXNpc1BhY2thZ2U7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVDbGFzcyBnZXRFcnJvckZ1bmN0aW9uKCkgeworCQlyZXR1cm4gZXJyb3JGdW5jdGlvbkVDbGFzczsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUNsYXNzIGdldFRocmVzaG9sZEVycm9yRnVuY3Rpb24oKSB7CisJCXJldHVybiB0aHJlc2hvbGRFcnJvckZ1bmN0aW9uRUNsYXNzOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQ2xhc3MgZ2V0UmVmZXJlbmNlU2NlbmFyaW9EYXRhTWFwKCkgeworCQlyZXR1cm4gcmVmZXJlbmNlU2NlbmFyaW9EYXRhTWFwRUNsYXNzOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQ2xhc3MgZ2V0U2ltcGxlRXJyb3JGdW5jdGlvbigpIHsKKwkJcmV0dXJuIHNpbXBsZUVycm9yRnVuY3Rpb25FQ2xhc3M7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVDbGFzcyBnZXRFcnJvclJlc3VsdCgpIHsKKwkJcmV0dXJuIGVycm9yUmVzdWx0RUNsYXNzOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQXR0cmlidXRlIGdldEVycm9yUmVzdWx0X0Vycm9yQnlUaW1lU3RlcCgpIHsKKwkJcmV0dXJuIChFQXR0cmlidXRlKWVycm9yUmVzdWx0RUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVBdHRyaWJ1dGUgZ2V0RXJyb3JSZXN1bHRfRXJyb3IoKSB7CisJCXJldHVybiAoRUF0dHJpYnV0ZSllcnJvclJlc3VsdEVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDEpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQXR0cmlidXRlIGdldEVycm9yUmVzdWx0X1JlZmVyZW5jZUJ5VGltZSgpIHsKKwkJcmV0dXJuIChFQXR0cmlidXRlKWVycm9yUmVzdWx0RUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMik7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVBdHRyaWJ1dGUgZ2V0RXJyb3JSZXN1bHRfTW9kZWxCeVRpbWUoKSB7CisJCXJldHVybiAoRUF0dHJpYnV0ZSllcnJvclJlc3VsdEVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDMpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQXR0cmlidXRlIGdldEVycm9yUmVzdWx0X1ZhbGlkYXRpb25FcnJvcigpIHsKKwkJcmV0dXJuIChFQXR0cmlidXRlKWVycm9yUmVzdWx0RUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoNCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEFuYWx5c2lzRmFjdG9yeSBnZXRBbmFseXNpc0ZhY3RvcnkoKSB7CisJCXJldHVybiAoQW5hbHlzaXNGYWN0b3J5KWdldEVGYWN0b3J5SW5zdGFuY2UoKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcml2YXRlIGJvb2xlYW4gaXNDcmVhdGVkID0gZmFsc2U7CisKKwkvKioKKwkgKiBDcmVhdGVzIHRoZSBtZXRhLW1vZGVsIG9iamVjdHMgZm9yIHRoZSBwYWNrYWdlLiAgVGhpcyBtZXRob2QgaXMKKwkgKiBndWFyZGVkIHRvIGhhdmUgbm8gYWZmZWN0IG9uIGFueSBpbnZvY2F0aW9uIGJ1dCBpdHMgZmlyc3QuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgY3JlYXRlUGFja2FnZUNvbnRlbnRzKCkgeworCQlpZiAoaXNDcmVhdGVkKSByZXR1cm47CisJCWlzQ3JlYXRlZCA9IHRydWU7CisKKwkJLy8gQ3JlYXRlIGNsYXNzZXMgYW5kIHRoZWlyIGZlYXR1cmVzCisJCWVycm9yRnVuY3Rpb25FQ2xhc3MgPSBjcmVhdGVFQ2xhc3MoRVJST1JfRlVOQ1RJT04pOworCisJCXRocmVzaG9sZEVycm9yRnVuY3Rpb25FQ2xhc3MgPSBjcmVhdGVFQ2xhc3MoVEhSRVNIT0xEX0VSUk9SX0ZVTkNUSU9OKTsKKworCQlyZWZlcmVuY2VTY2VuYXJpb0RhdGFNYXBFQ2xhc3MgPSBjcmVhdGVFQ2xhc3MoUkVGRVJFTkNFX1NDRU5BUklPX0RBVEFfTUFQKTsKKworCQlzaW1wbGVFcnJvckZ1bmN0aW9uRUNsYXNzID0gY3JlYXRlRUNsYXNzKFNJTVBMRV9FUlJPUl9GVU5DVElPTik7CisKKwkJZXJyb3JSZXN1bHRFQ2xhc3MgPSBjcmVhdGVFQ2xhc3MoRVJST1JfUkVTVUxUKTsKKwkJY3JlYXRlRUF0dHJpYnV0ZShlcnJvclJlc3VsdEVDbGFzcywgRVJST1JfUkVTVUxUX19FUlJPUl9CWV9USU1FX1NURVApOworCQljcmVhdGVFQXR0cmlidXRlKGVycm9yUmVzdWx0RUNsYXNzLCBFUlJPUl9SRVNVTFRfX0VSUk9SKTsKKwkJY3JlYXRlRUF0dHJpYnV0ZShlcnJvclJlc3VsdEVDbGFzcywgRVJST1JfUkVTVUxUX19SRUZFUkVOQ0VfQllfVElNRSk7CisJCWNyZWF0ZUVBdHRyaWJ1dGUoZXJyb3JSZXN1bHRFQ2xhc3MsIEVSUk9SX1JFU1VMVF9fTU9ERUxfQllfVElNRSk7CisJCWNyZWF0ZUVBdHRyaWJ1dGUoZXJyb3JSZXN1bHRFQ2xhc3MsIEVSUk9SX1JFU1VMVF9fVkFMSURBVElPTl9FUlJPUik7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJpdmF0ZSBib29sZWFuIGlzSW5pdGlhbGl6ZWQgPSBmYWxzZTsKKworCS8qKgorCSAqIENvbXBsZXRlIHRoZSBpbml0aWFsaXphdGlvbiBvZiB0aGUgcGFja2FnZSBhbmQgaXRzIG1ldGEtbW9kZWwuICBUaGlzCisJICogbWV0aG9kIGlzIGd1YXJkZWQgdG8gaGF2ZSBubyBhZmZlY3Qgb24gYW55IGludm9jYXRpb24gYnV0IGl0cyBmaXJzdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBpbml0aWFsaXplUGFja2FnZUNvbnRlbnRzKCkgeworCQlpZiAoaXNJbml0aWFsaXplZCkgcmV0dXJuOworCQlpc0luaXRpYWxpemVkID0gdHJ1ZTsKKworCQkvLyBJbml0aWFsaXplIHBhY2thZ2UKKwkJc2V0TmFtZShlTkFNRSk7CisJCXNldE5zUHJlZml4KGVOU19QUkVGSVgpOworCQlzZXROc1VSSShlTlNfVVJJKTsKKworCQkvLyBDcmVhdGUgdHlwZSBwYXJhbWV0ZXJzCisKKwkJLy8gU2V0IGJvdW5kcyBmb3IgdHlwZSBwYXJhbWV0ZXJzCisKKwkJLy8gQWRkIHN1cGVydHlwZXMgdG8gY2xhc3NlcworCQl0aHJlc2hvbGRFcnJvckZ1bmN0aW9uRUNsYXNzLmdldEVTdXBlclR5cGVzKCkuYWRkKHRoaXMuZ2V0RXJyb3JGdW5jdGlvbigpKTsKKwkJc2ltcGxlRXJyb3JGdW5jdGlvbkVDbGFzcy5nZXRFU3VwZXJUeXBlcygpLmFkZCh0aGlzLmdldEVycm9yRnVuY3Rpb24oKSk7CisKKwkJLy8gSW5pdGlhbGl6ZSBjbGFzc2VzIGFuZCBmZWF0dXJlczsgYWRkIG9wZXJhdGlvbnMgYW5kIHBhcmFtZXRlcnMKKwkJaW5pdEVDbGFzcyhlcnJvckZ1bmN0aW9uRUNsYXNzLCBFcnJvckZ1bmN0aW9uLmNsYXNzLCAiRXJyb3JGdW5jdGlvbiIsICFJU19BQlNUUkFDVCwgIUlTX0lOVEVSRkFDRSwgSVNfR0VORVJBVEVEX0lOU1RBTkNFX0NMQVNTKTsKKworCQlFT3BlcmF0aW9uIG9wID0gYWRkRU9wZXJhdGlvbihlcnJvckZ1bmN0aW9uRUNsYXNzLCB0aGlzLmdldEVycm9yUmVzdWx0KCksICJjYWxjdWxhdGVFcnJvciIsIDAsIDEsIElTX1VOSVFVRSwgSVNfT1JERVJFRCk7CisJCWFkZEVQYXJhbWV0ZXIob3AsIHRoaXMuZ2V0UmVmZXJlbmNlU2NlbmFyaW9EYXRhTWFwKCksICJyZWZlcmVuY2UiLCAwLCAxLCBJU19VTklRVUUsIElTX09SREVSRUQpOworCQlhZGRFUGFyYW1ldGVyKG9wLCB0aGlzLmdldFJlZmVyZW5jZVNjZW5hcmlvRGF0YU1hcCgpLCAiZGF0YSIsIDAsIDEsIElTX1VOSVFVRSwgSVNfT1JERVJFRCk7CisKKwkJaW5pdEVDbGFzcyh0aHJlc2hvbGRFcnJvckZ1bmN0aW9uRUNsYXNzLCBUaHJlc2hvbGRFcnJvckZ1bmN0aW9uLmNsYXNzLCAiVGhyZXNob2xkRXJyb3JGdW5jdGlvbiIsICFJU19BQlNUUkFDVCwgIUlTX0lOVEVSRkFDRSwgSVNfR0VORVJBVEVEX0lOU1RBTkNFX0NMQVNTKTsKKworCQlpbml0RUNsYXNzKHJlZmVyZW5jZVNjZW5hcmlvRGF0YU1hcEVDbGFzcywgUmVmZXJlbmNlU2NlbmFyaW9EYXRhTWFwLmNsYXNzLCAiUmVmZXJlbmNlU2NlbmFyaW9EYXRhTWFwIiwgIUlTX0FCU1RSQUNULCAhSVNfSU5URVJGQUNFLCBJU19HRU5FUkFURURfSU5TVEFOQ0VfQ0xBU1MpOworCisJCWluaXRFQ2xhc3Moc2ltcGxlRXJyb3JGdW5jdGlvbkVDbGFzcywgU2ltcGxlRXJyb3JGdW5jdGlvbi5jbGFzcywgIlNpbXBsZUVycm9yRnVuY3Rpb24iLCAhSVNfQUJTVFJBQ1QsICFJU19JTlRFUkZBQ0UsIElTX0dFTkVSQVRFRF9JTlNUQU5DRV9DTEFTUyk7CisKKwkJaW5pdEVDbGFzcyhlcnJvclJlc3VsdEVDbGFzcywgRXJyb3JSZXN1bHQuY2xhc3MsICJFcnJvclJlc3VsdCIsICFJU19BQlNUUkFDVCwgIUlTX0lOVEVSRkFDRSwgSVNfR0VORVJBVEVEX0lOU1RBTkNFX0NMQVNTKTsKKwkJRUdlbmVyaWNUeXBlIGcxID0gY3JlYXRlRUdlbmVyaWNUeXBlKGVjb3JlUGFja2FnZS5nZXRFRUxpc3QoKSk7CisJCUVHZW5lcmljVHlwZSBnMiA9IGNyZWF0ZUVHZW5lcmljVHlwZShlY29yZVBhY2thZ2UuZ2V0RURvdWJsZU9iamVjdCgpKTsKKwkJZzEuZ2V0RVR5cGVBcmd1bWVudHMoKS5hZGQoZzIpOworCQlpbml0RUF0dHJpYnV0ZShnZXRFcnJvclJlc3VsdF9FcnJvckJ5VGltZVN0ZXAoKSwgZzEsICJlcnJvckJ5VGltZVN0ZXAiLCBudWxsLCAwLCAxLCBFcnJvclJlc3VsdC5jbGFzcywgSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOworCQlpbml0RUF0dHJpYnV0ZShnZXRFcnJvclJlc3VsdF9FcnJvcigpLCBlY29yZVBhY2thZ2UuZ2V0RURvdWJsZSgpLCAiZXJyb3IiLCBudWxsLCAwLCAxLCBFcnJvclJlc3VsdC5jbGFzcywgSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOworCQlnMSA9IGNyZWF0ZUVHZW5lcmljVHlwZShlY29yZVBhY2thZ2UuZ2V0RUVMaXN0KCkpOworCQlnMiA9IGNyZWF0ZUVHZW5lcmljVHlwZShlY29yZVBhY2thZ2UuZ2V0RURvdWJsZU9iamVjdCgpKTsKKwkJZzEuZ2V0RVR5cGVBcmd1bWVudHMoKS5hZGQoZzIpOworCQlpbml0RUF0dHJpYnV0ZShnZXRFcnJvclJlc3VsdF9SZWZlcmVuY2VCeVRpbWUoKSwgZzEsICJyZWZlcmVuY2VCeVRpbWUiLCBudWxsLCAwLCAxLCBFcnJvclJlc3VsdC5jbGFzcywgSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOworCQlnMSA9IGNyZWF0ZUVHZW5lcmljVHlwZShlY29yZVBhY2thZ2UuZ2V0RUVMaXN0KCkpOworCQlnMiA9IGNyZWF0ZUVHZW5lcmljVHlwZShlY29yZVBhY2thZ2UuZ2V0RURvdWJsZU9iamVjdCgpKTsKKwkJZzEuZ2V0RVR5cGVBcmd1bWVudHMoKS5hZGQoZzIpOworCQlpbml0RUF0dHJpYnV0ZShnZXRFcnJvclJlc3VsdF9Nb2RlbEJ5VGltZSgpLCBnMSwgIm1vZGVsQnlUaW1lIiwgbnVsbCwgMCwgMSwgRXJyb3JSZXN1bHQuY2xhc3MsIElTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsKKwkJaW5pdEVBdHRyaWJ1dGUoZ2V0RXJyb3JSZXN1bHRfVmFsaWRhdGlvbkVycm9yKCksIGVjb3JlUGFja2FnZS5nZXRFRG91YmxlKCksICJ2YWxpZGF0aW9uRXJyb3IiLCBudWxsLCAwLCAxLCBFcnJvclJlc3VsdC5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsKKworCQkvLyBDcmVhdGUgcmVzb3VyY2UKKwkJY3JlYXRlUmVzb3VyY2UoZU5TX1VSSSk7CisJfQorCit9IC8vQW5hbHlzaXNQYWNrYWdlSW1wbApkaWZmIC0tZ2l0IGEvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9hbmFseXNpcy9pbXBsL0Vycm9yRnVuY3Rpb25JbXBsLmphdmEgYi9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2FuYWx5c2lzL2ltcGwvRXJyb3JGdW5jdGlvbkltcGwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZDllZDk5Ci0tLSAvZGV2L251bGwKKysrIGIvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9hbmFseXNpcy9pbXBsL0Vycm9yRnVuY3Rpb25JbXBsLmphdmEKQEAgLTAsMCArMSwxMjUgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDkgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuaW1wbDsKKworaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5pbXBsLkVPYmplY3RJbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuQW5hbHlzaXNQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuRXJyb3JGdW5jdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLkVycm9yUmVzdWx0OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuUmVmZXJlbmNlU2NlbmFyaW9EYXRhTWFwOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuU3RhdGVzOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuaW1wbC5SZWZlcmVuY2VTY2VuYXJpb0RhdGFNYXBJbXBsLlJlZmVyZW5jZVNjZW5hcmlvRGF0YUluc3RhbmNlOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiBBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+RXJyb3IgRnVuY3Rpb248L2I+PC9lbT4nLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiA8cD4KKyAqIDwvcD4KKyAqCisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBFcnJvckZ1bmN0aW9uSW1wbCBleHRlbmRzIEVPYmplY3RJbXBsIGltcGxlbWVudHMgRXJyb3JGdW5jdGlvbiB7CisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIEVycm9yRnVuY3Rpb25JbXBsKCkgeworCQlzdXBlcigpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCBFQ2xhc3MgZVN0YXRpY0NsYXNzKCkgeworCQlyZXR1cm4gQW5hbHlzaXNQYWNrYWdlLkxpdGVyYWxzLkVSUk9SX0ZVTkNUSU9OOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFcnJvclJlc3VsdCBjYWxjdWxhdGVFcnJvcihSZWZlcmVuY2VTY2VuYXJpb0RhdGFNYXAgcmVmZXJlbmNlLCBSZWZlcmVuY2VTY2VuYXJpb0RhdGFNYXAgZGF0YSkgeworCQkvLyBUT0RPOiBpbXBsZW1lbnQgdGhpcyBtZXRob2QKKwkJLy8gRW5zdXJlIHRoYXQgeW91IHJlbW92ZSBAZ2VuZXJhdGVkIG9yIG1hcmsgaXQgQGdlbmVyYXRlZCBOT1QKKwkJdGhyb3cgbmV3IFVuc3VwcG9ydGVkT3BlcmF0aW9uRXhjZXB0aW9uKCk7CisJfQorCisJLyoqCisJICogRnJvbSB0aGUgZGF0YU1hcCBleHRyYWN0IGEgbGlzdCBvZiBpbmZlY3Rpb3VzCisJICogQHBhcmFtIGRhdGFNYXAKKwkgKiBAcmV0dXJuIGxpc3Qgb2YgaW5mZWN0aW91cyBwZW9wbGUKKwkgKi8KKwlwdWJsaWMgTGlzdDxEb3VibGU+IGdldEluZmVjdGlvdXMoUmVmZXJlbmNlU2NlbmFyaW9EYXRhSW5zdGFuY2UgZGF0YU1hcCkgeworCQkgIAorCQlMaXN0PERvdWJsZT4gaW5mZWN0aW91cyA9IGRhdGFNYXAuZ2V0SXRvdGFscygpOworCQkKKwkJcmV0dXJuIGluZmVjdGlvdXM7CisJfQorCQorCisJLyoqCisJICogRnJvbSB0aGUgZGF0YU1hcCBleHRyYWN0IGEgbGlzdCBvZiBpbmZlY3Rpb3VzCisJICogQHBhcmFtIGRhdGFNYXAKKwkgKiBAcmV0dXJuIGxpc3Qgb2YgaW5mZWN0aW91cyBwZW9wbGUKKwkgKi8KKwlwdWJsaWMgTGlzdDxEb3VibGU+IGdldEluY2lkZW5jZShSZWZlcmVuY2VTY2VuYXJpb0RhdGFJbnN0YW5jZSBkYXRhTWFwKSB7CisJCWZpbmFsIFN0cmluZyBJTkNJREVOQ0UgPSBTdGF0ZXMuc3RhdGVzVG9GaXRbU3RhdGVzLklOQ0lERU5DRV07CisJCQorCQkgCisJCS8vIE1VU1QgZXhpc3QKKwkJTGlzdDxTdHJpbmc+IGluY2lkZW5jZUxpc3QgPSBkYXRhTWFwLmdldERhdGEoSU5DSURFTkNFKTsKKwkJYXNzZXJ0KGluY2lkZW5jZUxpc3QhPW51bGwpOworCQkKKwkJTGlzdDxEb3VibGU+IGluZmVjdGlvdXMgPSBuZXcgQXJyYXlMaXN0PERvdWJsZT4oKTsKKwkJZm9yIChpbnQgaSA9IDA7IGkgPCBpbmNpZGVuY2VMaXN0LnNpemUoKTsgaSArKykgeworCQkJCisJCQlkb3VibGUgaW5mID0gKG5ldyBEb3VibGUoaW5jaWRlbmNlTGlzdC5nZXQoaSkpKS5kb3VibGVWYWx1ZSgpOworCQkJaW5mZWN0aW91cy5hZGQobmV3IERvdWJsZShpbmYpKTsKKwkJfQorCQlyZXR1cm4gaW5mZWN0aW91czsKKwl9CisJCisJLyoqCisJICogRnJvbSB0aGUgZGF0YU1hcCBleHRyYWN0IGEgbGlzdCBvZiBwb3B1bGF0aW9uIHZhbHVlcworCSAqIEBwYXJhbSBkYXRhTWFwCisJICogQHJldHVybiBsaXN0IG9mIGluZmVjdGlvdXMgcGVvcGxlCisJICovCisJcHVibGljIExpc3Q8RG91YmxlPiBnZXRQb3B1bGF0aW9uKFJlZmVyZW5jZVNjZW5hcmlvRGF0YUluc3RhbmNlIGRhdGFNYXApIHsKKwkJZmluYWwgU3RyaW5nIFBPUFVMQVRJT04gPSBTdGF0ZXMuc3RhdGVzVG9GaXRbU3RhdGVzLlBPUFVMQVRJT05dOworCQkKKwkJIAorCQkvLyBNVVNUIGV4aXN0CisJCUxpc3Q8U3RyaW5nPiBwb3BMaXN0ID0gZGF0YU1hcC5nZXREYXRhKFBPUFVMQVRJT04pOworCQkvLyBXZSBzaG91bGQgc3RhbmRhcmRpemUgb24gUCBmb3IgcG9wdWxhdGlvbiBjb3VudAorCQlpZihwb3BMaXN0ID09IG51bGwpIHBvcExpc3QgPSAgZGF0YU1hcC5nZXREYXRhKCJQb3B1bGF0aW9uIENvdW50Iik7CisJCWFzc2VydChwb3BMaXN0IT1udWxsKTsKKwkJCisJCUxpc3Q8RG91YmxlPiBwb3B1bGF0aW9ucyA9IG5ldyBBcnJheUxpc3Q8RG91YmxlPigpOworCQlmb3IgKGludCBpID0gMDsgaSA8IHBvcExpc3Quc2l6ZSgpOyBpICsrKSB7CisJCQkKKwkJCWRvdWJsZSBpbmYgPSAobmV3IERvdWJsZShwb3BMaXN0LmdldChpKSkpLmRvdWJsZVZhbHVlKCk7CisJCQlwb3B1bGF0aW9ucy5hZGQobmV3IERvdWJsZShpbmYpKTsKKwkJfQorCQlyZXR1cm4gcG9wdWxhdGlvbnM7CisJfQorCQorfSAvL0Vycm9yRnVuY3Rpb25JbXBsCmRpZmYgLS1naXQgYS9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2FuYWx5c2lzL2ltcGwvRXJyb3JSZXN1bHRJbXBsLmphdmEgYi9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2FuYWx5c2lzL2ltcGwvRXJyb3JSZXN1bHRJbXBsLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjY0ODU2ZgotLS0gL2Rldi9udWxsCisrKyBiL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vYW5hbHlzaXMvaW1wbC9FcnJvclJlc3VsdEltcGwuamF2YQpAQCAtMCwwICsxLDM2NiBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmltcGw7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDkgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5CYXNpY0VMaXN0OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5FTGlzdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5pbXBsLkVOb3RpZmljYXRpb25JbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5pbXBsLkVPYmplY3RJbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuQW5hbHlzaXNQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuRXJyb3JSZXN1bHQ7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIEFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5FcnJvciBSZXN1bHQ8L2I+PC9lbT4nLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiA8cD4KKyAqIFRoZSBmb2xsb3dpbmcgZmVhdHVyZXMgYXJlIGltcGxlbWVudGVkOgorICogPHVsPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuaW1wbC5FcnJvclJlc3VsdEltcGwjZ2V0RXJyb3JCeVRpbWVTdGVwIDxlbT5FcnJvciBCeSBUaW1lIFN0ZXA8L2VtPn08L2xpPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuaW1wbC5FcnJvclJlc3VsdEltcGwjZ2V0RXJyb3IgPGVtPkVycm9yPC9lbT59PC9saT4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmltcGwuRXJyb3JSZXN1bHRJbXBsI2dldFJlZmVyZW5jZUJ5VGltZSA8ZW0+UmVmZXJlbmNlIEJ5IFRpbWU8L2VtPn08L2xpPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuaW1wbC5FcnJvclJlc3VsdEltcGwjZ2V0TW9kZWxCeVRpbWUgPGVtPk1vZGVsIEJ5IFRpbWU8L2VtPn08L2xpPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuaW1wbC5FcnJvclJlc3VsdEltcGwjZ2V0VmFsaWRhdGlvbkVycm9yIDxlbT5WYWxpZGF0aW9uIEVycm9yPC9lbT59PC9saT4KKyAqIDwvdWw+CisgKiA8L3A+CisgKgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgRXJyb3JSZXN1bHRJbXBsIGV4dGVuZHMgRU9iamVjdEltcGwgaW1wbGVtZW50cyBFcnJvclJlc3VsdCB7CisJLyoqCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0RXJyb3JCeVRpbWVTdGVwKCkgPGVtPkVycm9yIEJ5IFRpbWUgU3RlcDwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZ2V0RXJyb3JCeVRpbWVTdGVwKCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgRUxpc3Q8RG91YmxlPiBlcnJvckJ5VGltZVN0ZXA7CisJLyoqCisJICogVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldEVycm9yKCkgPGVtPkVycm9yPC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNnZXRFcnJvcigpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBkb3VibGUgRVJST1JfRURFRkFVTFQgPSAwLjA7CisJLyoqCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0RXJyb3IoKSA8ZW0+RXJyb3I8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI2dldEVycm9yKCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgZG91YmxlIGVycm9yID0gRVJST1JfRURFRkFVTFQ7CisKKwkvKioKKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRSZWZlcmVuY2VCeVRpbWUoKSA8ZW0+UmVmZXJlbmNlIEJ5IFRpbWU8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI2dldFJlZmVyZW5jZUJ5VGltZSgpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIEVMaXN0PERvdWJsZT4gcmVmZXJlbmNlQnlUaW1lOworCS8qKgorCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldE1vZGVsQnlUaW1lKCkgPGVtPk1vZGVsIEJ5IFRpbWU8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI2dldE1vZGVsQnlUaW1lKCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgRUxpc3Q8RG91YmxlPiBtb2RlbEJ5VGltZTsKKworCS8qKgorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRWYWxpZGF0aW9uRXJyb3IoKSA8ZW0+VmFsaWRhdGlvbiBFcnJvcjwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZ2V0VmFsaWRhdGlvbkVycm9yKCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIGRvdWJsZSBWQUxJREFUSU9OX0VSUk9SX0VERUZBVUxUID0gMC4wOworCS8qKgorCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldFZhbGlkYXRpb25FcnJvcigpIDxlbT5WYWxpZGF0aW9uIEVycm9yPC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNnZXRWYWxpZGF0aW9uRXJyb3IoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBkb3VibGUgdmFsaWRhdGlvbkVycm9yID0gVkFMSURBVElPTl9FUlJPUl9FREVGQVVMVDsKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBFcnJvclJlc3VsdEltcGwoKSB7CisJCXN1cGVyKCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIEVDbGFzcyBlU3RhdGljQ2xhc3MoKSB7CisJCXJldHVybiBBbmFseXNpc1BhY2thZ2UuTGl0ZXJhbHMuRVJST1JfUkVTVUxUOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFTGlzdDxEb3VibGU+IGdldEVycm9yQnlUaW1lU3RlcCgpIHsKKwkJcmV0dXJuIGVycm9yQnlUaW1lU3RlcDsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRFcnJvckJ5VGltZVN0ZXAoRUxpc3Q8RG91YmxlPiBuZXdFcnJvckJ5VGltZVN0ZXApIHsKKwkJRUxpc3Q8RG91YmxlPiBvbGRFcnJvckJ5VGltZVN0ZXAgPSBlcnJvckJ5VGltZVN0ZXA7CisJCWVycm9yQnlUaW1lU3RlcCA9IG5ld0Vycm9yQnlUaW1lU3RlcDsKKwkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQorCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgQW5hbHlzaXNQYWNrYWdlLkVSUk9SX1JFU1VMVF9fRVJST1JfQllfVElNRV9TVEVQLCBvbGRFcnJvckJ5VGltZVN0ZXAsIGVycm9yQnlUaW1lU3RlcCkpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBkb3VibGUgZ2V0RXJyb3IoKSB7CisJCXJldHVybiBlcnJvcjsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRFcnJvcihkb3VibGUgbmV3RXJyb3IpIHsKKwkJZG91YmxlIG9sZEVycm9yID0gZXJyb3I7CisJCWVycm9yID0gbmV3RXJyb3I7CisJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkKKwkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIEFuYWx5c2lzUGFja2FnZS5FUlJPUl9SRVNVTFRfX0VSUk9SLCBvbGRFcnJvciwgZXJyb3IpKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUxpc3Q8RG91YmxlPiBnZXRSZWZlcmVuY2VCeVRpbWUoKSB7CisJCXJldHVybiByZWZlcmVuY2VCeVRpbWU7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgc2V0UmVmZXJlbmNlQnlUaW1lKEVMaXN0PERvdWJsZT4gbmV3UmVmZXJlbmNlQnlUaW1lKSB7CisJCUVMaXN0PERvdWJsZT4gb2xkUmVmZXJlbmNlQnlUaW1lID0gcmVmZXJlbmNlQnlUaW1lOworCQlyZWZlcmVuY2VCeVRpbWUgPSBuZXdSZWZlcmVuY2VCeVRpbWU7CisJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkKKwkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIEFuYWx5c2lzUGFja2FnZS5FUlJPUl9SRVNVTFRfX1JFRkVSRU5DRV9CWV9USU1FLCBvbGRSZWZlcmVuY2VCeVRpbWUsIHJlZmVyZW5jZUJ5VGltZSkpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFTGlzdDxEb3VibGU+IGdldE1vZGVsQnlUaW1lKCkgeworCQlyZXR1cm4gbW9kZWxCeVRpbWU7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgc2V0TW9kZWxCeVRpbWUoRUxpc3Q8RG91YmxlPiBuZXdNb2RlbEJ5VGltZSkgeworCQlFTGlzdDxEb3VibGU+IG9sZE1vZGVsQnlUaW1lID0gbW9kZWxCeVRpbWU7CisJCW1vZGVsQnlUaW1lID0gbmV3TW9kZWxCeVRpbWU7CisJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkKKwkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIEFuYWx5c2lzUGFja2FnZS5FUlJPUl9SRVNVTFRfX01PREVMX0JZX1RJTUUsIG9sZE1vZGVsQnlUaW1lLCBtb2RlbEJ5VGltZSkpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBkb3VibGUgZ2V0VmFsaWRhdGlvbkVycm9yKCkgeworCQlyZXR1cm4gdmFsaWRhdGlvbkVycm9yOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIHNldFZhbGlkYXRpb25FcnJvcihkb3VibGUgbmV3VmFsaWRhdGlvbkVycm9yKSB7CisJCWRvdWJsZSBvbGRWYWxpZGF0aW9uRXJyb3IgPSB2YWxpZGF0aW9uRXJyb3I7CisJCXZhbGlkYXRpb25FcnJvciA9IG5ld1ZhbGlkYXRpb25FcnJvcjsKKwkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQorCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgQW5hbHlzaXNQYWNrYWdlLkVSUk9SX1JFU1VMVF9fVkFMSURBVElPTl9FUlJPUiwgb2xkVmFsaWRhdGlvbkVycm9yLCB2YWxpZGF0aW9uRXJyb3IpKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgT2JqZWN0IGVHZXQoaW50IGZlYXR1cmVJRCwgYm9vbGVhbiByZXNvbHZlLCBib29sZWFuIGNvcmVUeXBlKSB7CisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7CisJCQljYXNlIEFuYWx5c2lzUGFja2FnZS5FUlJPUl9SRVNVTFRfX0VSUk9SX0JZX1RJTUVfU1RFUDoKKwkJCQlyZXR1cm4gZ2V0RXJyb3JCeVRpbWVTdGVwKCk7CisJCQljYXNlIEFuYWx5c2lzUGFja2FnZS5FUlJPUl9SRVNVTFRfX0VSUk9SOgorCQkJCXJldHVybiBnZXRFcnJvcigpOworCQkJY2FzZSBBbmFseXNpc1BhY2thZ2UuRVJST1JfUkVTVUxUX19SRUZFUkVOQ0VfQllfVElNRToKKwkJCQlyZXR1cm4gZ2V0UmVmZXJlbmNlQnlUaW1lKCk7CisJCQljYXNlIEFuYWx5c2lzUGFja2FnZS5FUlJPUl9SRVNVTFRfX01PREVMX0JZX1RJTUU6CisJCQkJcmV0dXJuIGdldE1vZGVsQnlUaW1lKCk7CisJCQljYXNlIEFuYWx5c2lzUGFja2FnZS5FUlJPUl9SRVNVTFRfX1ZBTElEQVRJT05fRVJST1I6CisJCQkJcmV0dXJuIGdldFZhbGlkYXRpb25FcnJvcigpOworCQl9CisJCXJldHVybiBzdXBlci5lR2V0KGZlYXR1cmVJRCwgcmVzb2x2ZSwgY29yZVR5cGUpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBTdXBwcmVzc1dhcm5pbmdzKCJ1bmNoZWNrZWQiKQorCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGVTZXQoaW50IGZlYXR1cmVJRCwgT2JqZWN0IG5ld1ZhbHVlKSB7CisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7CisJCQljYXNlIEFuYWx5c2lzUGFja2FnZS5FUlJPUl9SRVNVTFRfX0VSUk9SX0JZX1RJTUVfU1RFUDoKKwkJCQlzZXRFcnJvckJ5VGltZVN0ZXAoKEVMaXN0PERvdWJsZT4pbmV3VmFsdWUpOworCQkJCXJldHVybjsKKwkJCWNhc2UgQW5hbHlzaXNQYWNrYWdlLkVSUk9SX1JFU1VMVF9fRVJST1I6CisJCQkJc2V0RXJyb3IoKERvdWJsZSluZXdWYWx1ZSk7CisJCQkJcmV0dXJuOworCQkJY2FzZSBBbmFseXNpc1BhY2thZ2UuRVJST1JfUkVTVUxUX19SRUZFUkVOQ0VfQllfVElNRToKKwkJCQlzZXRSZWZlcmVuY2VCeVRpbWUoKEVMaXN0PERvdWJsZT4pbmV3VmFsdWUpOworCQkJCXJldHVybjsKKwkJCWNhc2UgQW5hbHlzaXNQYWNrYWdlLkVSUk9SX1JFU1VMVF9fTU9ERUxfQllfVElNRToKKwkJCQlzZXRNb2RlbEJ5VGltZSgoRUxpc3Q8RG91YmxlPiluZXdWYWx1ZSk7CisJCQkJcmV0dXJuOworCQkJY2FzZSBBbmFseXNpc1BhY2thZ2UuRVJST1JfUkVTVUxUX19WQUxJREFUSU9OX0VSUk9SOgorCQkJCXNldFZhbGlkYXRpb25FcnJvcigoRG91YmxlKW5ld1ZhbHVlKTsKKwkJCQlyZXR1cm47CisJCX0KKwkJc3VwZXIuZVNldChmZWF0dXJlSUQsIG5ld1ZhbHVlKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBlVW5zZXQoaW50IGZlYXR1cmVJRCkgeworCQlzd2l0Y2ggKGZlYXR1cmVJRCkgeworCQkJY2FzZSBBbmFseXNpc1BhY2thZ2UuRVJST1JfUkVTVUxUX19FUlJPUl9CWV9USU1FX1NURVA6CisJCQkJc2V0RXJyb3JCeVRpbWVTdGVwKChFTGlzdDxEb3VibGU+KW51bGwpOworCQkJCXJldHVybjsKKwkJCWNhc2UgQW5hbHlzaXNQYWNrYWdlLkVSUk9SX1JFU1VMVF9fRVJST1I6CisJCQkJc2V0RXJyb3IoRVJST1JfRURFRkFVTFQpOworCQkJCXJldHVybjsKKwkJCWNhc2UgQW5hbHlzaXNQYWNrYWdlLkVSUk9SX1JFU1VMVF9fUkVGRVJFTkNFX0JZX1RJTUU6CisJCQkJc2V0UmVmZXJlbmNlQnlUaW1lKChFTGlzdDxEb3VibGU+KW51bGwpOworCQkJCXJldHVybjsKKwkJCWNhc2UgQW5hbHlzaXNQYWNrYWdlLkVSUk9SX1JFU1VMVF9fTU9ERUxfQllfVElNRToKKwkJCQlzZXRNb2RlbEJ5VGltZSgoRUxpc3Q8RG91YmxlPiludWxsKTsKKwkJCQlyZXR1cm47CisJCQljYXNlIEFuYWx5c2lzUGFja2FnZS5FUlJPUl9SRVNVTFRfX1ZBTElEQVRJT05fRVJST1I6CisJCQkJc2V0VmFsaWRhdGlvbkVycm9yKFZBTElEQVRJT05fRVJST1JfRURFRkFVTFQpOworCQkJCXJldHVybjsKKwkJfQorCQlzdXBlci5lVW5zZXQoZmVhdHVyZUlEKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgYm9vbGVhbiBlSXNTZXQoaW50IGZlYXR1cmVJRCkgeworCQlzd2l0Y2ggKGZlYXR1cmVJRCkgeworCQkJY2FzZSBBbmFseXNpc1BhY2thZ2UuRVJST1JfUkVTVUxUX19FUlJPUl9CWV9USU1FX1NURVA6CisJCQkJcmV0dXJuIGVycm9yQnlUaW1lU3RlcCAhPSBudWxsOworCQkJY2FzZSBBbmFseXNpc1BhY2thZ2UuRVJST1JfUkVTVUxUX19FUlJPUjoKKwkJCQlyZXR1cm4gZXJyb3IgIT0gRVJST1JfRURFRkFVTFQ7CisJCQljYXNlIEFuYWx5c2lzUGFja2FnZS5FUlJPUl9SRVNVTFRfX1JFRkVSRU5DRV9CWV9USU1FOgorCQkJCXJldHVybiByZWZlcmVuY2VCeVRpbWUgIT0gbnVsbDsKKwkJCWNhc2UgQW5hbHlzaXNQYWNrYWdlLkVSUk9SX1JFU1VMVF9fTU9ERUxfQllfVElNRToKKwkJCQlyZXR1cm4gbW9kZWxCeVRpbWUgIT0gbnVsbDsKKwkJCWNhc2UgQW5hbHlzaXNQYWNrYWdlLkVSUk9SX1JFU1VMVF9fVkFMSURBVElPTl9FUlJPUjoKKwkJCQlyZXR1cm4gdmFsaWRhdGlvbkVycm9yICE9IFZBTElEQVRJT05fRVJST1JfRURFRkFVTFQ7CisJCX0KKwkJcmV0dXJuIHN1cGVyLmVJc1NldChmZWF0dXJlSUQpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKSB7CisJCWlmIChlSXNQcm94eSgpKSByZXR1cm4gc3VwZXIudG9TdHJpbmcoKTsKKworCQlTdHJpbmdCdWZmZXIgcmVzdWx0ID0gbmV3IFN0cmluZ0J1ZmZlcihzdXBlci50b1N0cmluZygpKTsKKwkJcmVzdWx0LmFwcGVuZCgiIChlcnJvckJ5VGltZVN0ZXA6ICIpOworCQlyZXN1bHQuYXBwZW5kKGVycm9yQnlUaW1lU3RlcCk7CisJCXJlc3VsdC5hcHBlbmQoIiwgZXJyb3I6ICIpOworCQlyZXN1bHQuYXBwZW5kKGVycm9yKTsKKwkJcmVzdWx0LmFwcGVuZCgiLCByZWZlcmVuY2VCeVRpbWU6ICIpOworCQlyZXN1bHQuYXBwZW5kKHJlZmVyZW5jZUJ5VGltZSk7CisJCXJlc3VsdC5hcHBlbmQoIiwgbW9kZWxCeVRpbWU6ICIpOworCQlyZXN1bHQuYXBwZW5kKG1vZGVsQnlUaW1lKTsKKwkJcmVzdWx0LmFwcGVuZCgiLCB2YWxpZGF0aW9uRXJyb3I6ICIpOworCQlyZXN1bHQuYXBwZW5kKHZhbGlkYXRpb25FcnJvcik7CisJCXJlc3VsdC5hcHBlbmQoJyknKTsKKwkJcmV0dXJuIHJlc3VsdC50b1N0cmluZygpOworCX0KKworCXB1YmxpYyBFcnJvclJlc3VsdCBjb3B5KCkgeworCQlFcnJvclJlc3VsdEltcGwgcmVzID0gbmV3IEVycm9yUmVzdWx0SW1wbCgpOworCQlyZXMuc2V0RXJyb3IodGhpcy5nZXRFcnJvcigpKTsKKwkJcmVzLnNldFZhbGlkYXRpb25FcnJvcih0aGlzLmdldFZhbGlkYXRpb25FcnJvcigpKTsKKwkJRUxpc3Q8RG91YmxlPm5ld2xpc3QgPSBuZXcgQmFzaWNFTGlzdDxEb3VibGU+KCk7CisJCWlmKHRoaXMuZ2V0RXJyb3JCeVRpbWVTdGVwKCkhPW51bGwpIHsKKwkJCWZvcihkb3VibGUgZDp0aGlzLmdldEVycm9yQnlUaW1lU3RlcCgpKW5ld2xpc3QuYWRkKGQpOworCQl9CisJCXJlcy5zZXRFcnJvckJ5VGltZVN0ZXAobmV3bGlzdCk7CisJCXJldHVybiByZXM7CisJfQorCit9IC8vRXJyb3JSZXN1bHRJbXBsCmRpZmYgLS1naXQgYS9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2FuYWx5c2lzL2ltcGwvUmVmZXJlbmNlU2NlbmFyaW9EYXRhTWFwSW1wbC5qYXZhIGIvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9hbmFseXNpcy9pbXBsL1JlZmVyZW5jZVNjZW5hcmlvRGF0YU1hcEltcGwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNTk3NjcxCi0tLSAvZGV2L251bGwKKysrIGIvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9hbmFseXNpcy9pbXBsL1JlZmVyZW5jZVNjZW5hcmlvRGF0YU1hcEltcGwuamF2YQpAQCAtMCwwICsxLDkyOSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5pbXBsOworCitpbXBvcnQgamF2YS5sYW5nLnJlZmxlY3QuSW52b2NhdGlvblRhcmdldEV4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OworaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOworaW1wb3J0IGphdmEudXRpbC5IYXNoU2V0OworaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuTWFwOworaW1wb3J0IGphdmEudXRpbC5NYXAuRW50cnk7CitpbXBvcnQgamF2YS51dGlsLlNldDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUHJvZ3Jlc3NNb25pdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5PcGVyYXRpb25DYW5jZWxlZEV4Y2VwdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5pbXBsLkVPYmplY3RJbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLm9wZXJhdGlvbi5JUnVubmFibGVDb250ZXh0OworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLm9wZXJhdGlvbi5JUnVubmFibGVXaXRoUHJvZ3Jlc3M7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5BY3RpdmF0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5BbmFseXNpc1BhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5EaXNlYXNlVHlwZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLlJlZmVyZW5jZVNjZW5hcmlvRGF0YU1hcDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLlN0YXRlczsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPlJlZmVyZW5jZSBTY2VuYXJpbyBEYXRhIE1hcDwvYj48L2VtPicuCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIDxwPgorICogPC9wPgorICoKKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIFJlZmVyZW5jZVNjZW5hcmlvRGF0YU1hcEltcGwgZXh0ZW5kcyBFT2JqZWN0SW1wbCBpbXBsZW1lbnRzIFJlZmVyZW5jZVNjZW5hcmlvRGF0YU1hcCB7CisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCXByb3RlY3RlZCBSZWZlcmVuY2VTY2VuYXJpb0RhdGFNYXBJbXBsKCkgeworCQlzdXBlcigpOworCQlyZWZlcmVuY2VTY2VuYXJpb0RhdGFNYXAgPSBuZXcgSGFzaE1hcDxTdHJpbmcsIFJlZmVyZW5jZVNjZW5hcmlvRGF0YUluc3RhbmNlPigpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCBFQ2xhc3MgZVN0YXRpY0NsYXNzKCkgeworCQlyZXR1cm4gQW5hbHlzaXNQYWNrYWdlLkxpdGVyYWxzLlJFRkVSRU5DRV9TQ0VOQVJJT19EQVRBX01BUDsKKwl9CisKKwlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBJVEVSQVRJT05fS0VZID0gIml0ZXJhdGlvbiI7Ly8kTk9OLU5MUy0xJAorCS8qKgorCSAqIGtleSBmb3IgaW5jaWRlbmNlIGRhdGEKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBJTkNJREVOQ0VfS0VZID0gIkluY2lkZW5jZSI7Ly8kTk9OLU5MUy0xJAorCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFRJTUVfS0VZID0gInRpbWUiOy8vJE5PTi1OTFMtMSQKKwlwcml2YXRlIGRvdWJsZSBtYXhJbmNpZGVuY2UgPSAwLjA7CisJcHJpdmF0ZSBTdHJpbmcgbWF4SW5jaWRlbmNlTG9jYXRpb247CisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgZG91YmxlIFBQTSA9IDEuMC8xMDAwMDAwLjA7CisJCisJLyoqCisJICogV2UgaGF2ZSBnZW5lcmFsaXplIHRoZSBwb3NzaWJsZSBrZXlzIAorCSAqIHNvIHRoZXJlIGNhbiBiZSBtb3JlIHRoYW4gb25lIG9mIGVhY2ggdHlwZSBidXQgdGhleQorCSAqIGFyZSBzdGlsbCwgZm9yIG5vdywgb2YgdHlwZSBTRUlSLiBJIG1pZ2h0IGJlIElhY3RpdmUgb3IgSWxhdGVudCB0aG91Z2gKKwkgKi8KKwlwdWJsaWMgU2V0PFN0cmluZz4gU19LRVlfU0VUID0gbmV3IEhhc2hTZXQ8U3RyaW5nPigpOworCXB1YmxpYyBTZXQ8U3RyaW5nPiBFX0tFWV9TRVQgPSBuZXcgSGFzaFNldDxTdHJpbmc+KCk7CisJcHVibGljIFNldDxTdHJpbmc+IElfS0VZX1NFVCA9IG5ldyBIYXNoU2V0PFN0cmluZz4oKTsKKwlwdWJsaWMgU2V0PFN0cmluZz4gUl9LRVlfU0VUID0gbmV3IEhhc2hTZXQ8U3RyaW5nPigpOworCXB1YmxpYyBTZXQ8U3RyaW5nPiBJTkNJREVOQ0VfS0VZX1NFVCA9IG5ldyBIYXNoU2V0PFN0cmluZz4oKTsKKwkKKwkKKwkvKioKKwkgKiBBIHNpbmdsZSBSZWZlcmVuY2UgU2NlbmFyaW8gaXMgc3RvcmVkIGluIGEgbWFwCisJICogZm9yIGVhY2ggIGtleTxTdHJpbmc+ID0gUmVnaW9uIGlkCisJICovCisJTWFwPFN0cmluZywgUmVmZXJlbmNlU2NlbmFyaW9EYXRhSW5zdGFuY2U+IHJlZmVyZW5jZVNjZW5hcmlvRGF0YU1hcCA9IG51bGw7CisJCisJLyoqCisJICogRGlyZWN0b3J5IHVzZWQKKwkgKi8KKwkKKwlwcml2YXRlIFN0cmluZyByZWZEaXI7CisJCisJLyoqCisJICogVHlwZSBvZiBkYXRhIChlLmcuIFNJUikKKwkgKi8KKwkKKwlEaXNlYXNlVHlwZSB0eXBlOworCQorCS8qKgorCSAqIGFkZEluc3RhbmNlIEFkZCBhIG5ldyBkYXRhIGluc3RhbmNlIChlLmcuIGRhdGEgZnJvbSAuY3N2IGZpbGUpIHRvIHRoZSBtYXAKKwkgKiAKKwkgKiBAcGFyYW0ga2V5IFRoZSBrZXksIGUuZy4gY2l0eSBpZAorCSAqIEBwYXJhbSBkYXRhIFJlZmVyZW5jZVNjZW5hcmlvRGF0YUluc3RhbmNlIAorCSAqLworCXB1YmxpYyB2b2lkIGFkZEluc3RhbmNlKFN0cmluZyBrZXksIFJlZmVyZW5jZVNjZW5hcmlvRGF0YUluc3RhbmNlIGRhdGEpIHsKKwkJcmVmZXJlbmNlU2NlbmFyaW9EYXRhTWFwLnB1dChrZXksIGRhdGEpOworCX0KKwkKKwkvKioKKwkgKiAKKwkgKi8KKwlwdWJsaWMgdm9pZCBmaW5kTWF4SW5jaWRlbmNlKCkgeworCQlJdGVyYXRvcjxTdHJpbmc+IGl0ZXIgPSByZWZlcmVuY2VTY2VuYXJpb0RhdGFNYXAua2V5U2V0KCkuaXRlcmF0b3IoKTsKKwkJd2hpbGUoKGl0ZXIhPW51bGwpJiYoaXRlci5oYXNOZXh0KCkpICkgeworCQkJU3RyaW5nIGtleSA9IGl0ZXIubmV4dCgpOworCQkJUmVmZXJlbmNlU2NlbmFyaW9EYXRhSW5zdGFuY2UgZGF0YSA9IHJlZmVyZW5jZVNjZW5hcmlvRGF0YU1hcC5nZXQoa2V5KTsKKwkJCWRvdWJsZSBjb3VudCA9IGdldFRvdGFsSW5jaWRlbmNlKGRhdGEpOworCQkJaWYoY291bnQgPj0gbWF4SW5jaWRlbmNlKSB7CisJCQkJbWF4SW5jaWRlbmNlID0gY291bnQ7CisJCQkJbWF4SW5jaWRlbmNlTG9jYXRpb24gPSBrZXk7CisJCQl9CisJCX0KKwl9CisJCisJLyoqCisJICogUmV0dXJuIHRoZSB0eXBlIG9mIHRoZSBkYXRhLiBVc2VkIHRvIGRldGVybWluZSB3aGljaCBwYXJhbWV0ZXIgZXN0aW1hdG9yKHMpCisJICogY2FuIGJlIHVzZWQuCisJICogCisJICogQHJldHVybiBQYXJhbWV0ZXJFc3RpbWF0b3IuVHlwZSBUaGUgdHlwZSwgZS5nLiBTRUlSIAorCSAqLworCQorCXB1YmxpYyBEaXNlYXNlVHlwZSBnZXRUeXBlKCkgeworCQlpZihyZWZlcmVuY2VTY2VuYXJpb0RhdGFNYXAgPT0gbnVsbCB8fCByZWZlcmVuY2VTY2VuYXJpb0RhdGFNYXAuc2l6ZSgpID09IDApIHsKKwkJCXJldHVybiBudWxsOworCQl9CisJCXJldHVybiB0aGlzLnR5cGU7CisJfQorCQorCS8qKgorCSAqIFNldCB0aGUgdHlwZSBvZiB0aGUgZGF0YQorCSAqIAorCSAqIEBwYXJhbSB0IE5ldyB0eXBlIAorCSAqLworCQorCXB1YmxpYyB2b2lkIHNldFR5cGUoRGlzZWFzZVR5cGUgdCwgU2V0PFN0cmluZz4gU2tleXMsIFNldDxTdHJpbmc+IEVrZXlzLCBTZXQ8U3RyaW5nPklrZXlzLCBTZXQ8U3RyaW5nPiBSa2V5cywgU2V0PFN0cmluZz4gSW5jS2V5cykgeworCQl0aGlzLnR5cGUgPSB0OworCQl0aGlzLlNfS0VZX1NFVD1Ta2V5czsKKwkJdGhpcy5FX0tFWV9TRVQ9RWtleXM7CisJCXRoaXMuSV9LRVlfU0VUPUlrZXlzOworCQl0aGlzLlJfS0VZX1NFVD1Sa2V5czsKKwkJdGhpcy5JTkNJREVOQ0VfS0VZX1NFVD1JbmNLZXlzOworCX0KKwkKKwkvKioKKwkgKiAKKwkgKiBAcmV0dXJuCisJICovCisJcHVibGljIFN0cmluZ1tdIGdldFNfS2V5cygpIHsKKwkJU3RyaW5nW10ga2V5cyA9IG5ldyBTdHJpbmdbMF07CisJCWlmKFNfS0VZX1NFVCE9bnVsbCkgeworCQkJa2V5cyA9IFNfS0VZX1NFVC50b0FycmF5KG5ldyBTdHJpbmdbU19LRVlfU0VULnNpemUoKV0pOworCQl9CisJCXJldHVybiBrZXlzOworCX0KKwkKKwkvKioKKwkgKiAKKwkgKiBAcmV0dXJuCisJICovCisJcHVibGljIFN0cmluZ1tdIGdldEVfS2V5cygpIHsKKwkJU3RyaW5nW10ga2V5cyA9IG5ldyBTdHJpbmdbMF07CisJCWlmKEVfS0VZX1NFVCE9bnVsbCkgeworCQkJa2V5cyA9IEVfS0VZX1NFVC50b0FycmF5KG5ldyBTdHJpbmdbRV9LRVlfU0VULnNpemUoKV0pOworCQl9CisJCXJldHVybiBrZXlzOworCX0KKwkKKwkvKioKKwkgKiAKKwkgKiBAcmV0dXJuCisJICovCisJcHVibGljIFN0cmluZ1tdIGdldElfS2V5cygpIHsKKwkJU3RyaW5nW10ga2V5cyA9IG5ldyBTdHJpbmdbMF07CisJCWlmKElfS0VZX1NFVCE9bnVsbCkgeworCQkJa2V5cyA9IElfS0VZX1NFVC50b0FycmF5KG5ldyBTdHJpbmdbSV9LRVlfU0VULnNpemUoKV0pOworCQl9CisJCXJldHVybiBrZXlzOworCX0KKwkKKwkvKioKKwkgKiAKKwkgKiBAcmV0dXJuCisJICovCisJcHVibGljIFN0cmluZ1tdIGdldFJfS2V5cygpIHsKKwkJU3RyaW5nW10ga2V5cyA9IG5ldyBTdHJpbmdbMF07CisJCWlmKFJfS0VZX1NFVCE9bnVsbCkgeworCQkJa2V5cyA9IFJfS0VZX1NFVC50b0FycmF5KG5ldyBTdHJpbmdbUl9LRVlfU0VULnNpemUoKV0pOworCQl9CisJCXJldHVybiBrZXlzOworCX0KKworCXB1YmxpYyBTdHJpbmdbXSBnZXRJbmNfS0VZX1NFVCgpIHsKKwkJU3RyaW5nW10ga2V5cyA9IG5ldyBTdHJpbmdbMF07CisJCWlmKElOQ0lERU5DRV9LRVlfU0VUIT1udWxsKSB7CisJCQlrZXlzID0gSU5DSURFTkNFX0tFWV9TRVQudG9BcnJheShuZXcgU3RyaW5nW0lOQ0lERU5DRV9LRVlfU0VULnNpemUoKV0pOworCQl9CisJCXJldHVybiBrZXlzOworCX0KKworCQorCS8qKgorCSAqIGdldE51bUxvY2F0aW9ucy4gUmV0dXJuIHRoZSBudW1iZXIgb2YgbG9jYXRpb25zIGFuYWx5emVkCisJICogCisJICogQHJldHVybiBpbnQgTnVtYmVyIG9mIGxvY2F0aW9ucworCSAqLworCQorCXB1YmxpYyBpbnQgZ2V0TnVtTG9jYXRpb25zKCkgeworCQlyZXR1cm4gcmVmZXJlbmNlU2NlbmFyaW9EYXRhTWFwLnNpemUoKTsKKwl9CisJCisJLyoqCisJICogZ2V0TG9jYXRpb25zLiBSZXR1cm4gdGhlIGxvY2F0aW9ucworCSAqIAorCSAqIEByZXR1cm4gU2V0PFN0cmluZz4gU2V0IG9mIGFsbCBsb2NhdGlvbnMKKwkgKi8KKwkKKwlwdWJsaWMgU2V0PFN0cmluZz4gZ2V0TG9jYXRpb25zKCkgeworCQlyZXR1cm4gcmVmZXJlbmNlU2NlbmFyaW9EYXRhTWFwLmtleVNldCgpOworCX0KKwkKKwkKKwkvKioKKwkgKiBUaGUgdGhlIHRvdGFsIGluY2lkZW5jZSAoc3VtbWluZyBvdmVyIGFsbCB0aW1lIGZvciBzb21lIGxvY2F0aW9uIGluc3RhbmNlIAorCSAqIEBwYXJhbSBpbnN0YW5jZQorCSAqIEByZXR1cm4gdGhlIHRvdGFsIEluY2lkZW5jZSBjb3VudAorCSAqLworCXB1YmxpYyBkb3VibGUgZ2V0VG90YWxJbmNpZGVuY2UoUmVmZXJlbmNlU2NlbmFyaW9EYXRhSW5zdGFuY2UgaW5zdGFuY2UpIHsKKwkJZG91YmxlIHJldFZhbHVlID0gMC4wOworCQlpZihpbnN0YW5jZS5nZXREYXRhKCkuY29udGFpbnNLZXkoSU5DSURFTkNFX0tFWSkpIHsKKwkJCUxpc3Q8RG91YmxlPiBpbmNpZGVuY2UgPSBpbnN0YW5jZS5nZXREYXRhKCkuZ2V0KElOQ0lERU5DRV9LRVkpOworCQkJZm9yIChpbnQgaSA9IDA7IGkgPCBpbmNpZGVuY2Uuc2l6ZSgpOyBpICsrKSB7CisJCQkJcmV0VmFsdWUgKz0gaW5jaWRlbmNlLmdldChpKS5kb3VibGVWYWx1ZSgpOworCQkJfQorCQl9CisJCXJldHVybiByZXRWYWx1ZTsKKwl9CisJCisJLyoqCisJICogY29udGFpbnNMb2NhdGlvbiBSZXR1cm4gdHJ1ZSBpZiB0aGUgbWFwIGNvbnRhaW5zIHRoZSBzcGVjaWZpZWQgbG9jYXRpb24KKwkgKiAKKwkgKiBAcGFyYW0gbG9jCisJICogQHJldHVybiBib29sZWFuIFRydWUgaWYgdGhlIGxvY2F0aW9uIGlzIGZvdW5kIGluIHRoZSBtYXAKKwkgKi8KKwlwdWJsaWMgYm9vbGVhbiBjb250YWluc0xvY2F0aW9uKFN0cmluZyBsb2MpIHsKKwkJcmV0dXJuIHJlZmVyZW5jZVNjZW5hcmlvRGF0YU1hcC5jb250YWluc0tleShsb2MpOworCX0KKwkKKwkvKioKKwkgKiBnZXRMb2NhdGlvbi4gUmV0dXJuIHRoZSBkYXRhIGZvciB0aGUgZ2l2ZW4gbG9jYXRpb24KKwkgKiBAcGFyYW0gbG9jIAorCSAqIEByZXR1cm4gUmVmZXJlbmNlU2NlbmFyaW9EYXRhSW5zdGFuY2UgTG9jYXRpb24gaW5zdGFuY2UsIG9yIG51bGwgaWYgbm90IGZvdW5kCisJICovCisJCisJcHVibGljIFJlZmVyZW5jZVNjZW5hcmlvRGF0YUluc3RhbmNlIGdldExvY2F0aW9uKFN0cmluZyBsb2MpIHsKKwkJcmV0dXJuIHJlZmVyZW5jZVNjZW5hcmlvRGF0YU1hcC5nZXQobG9jKTsKKwl9CisJCisJLyoqCisJICogQWdncmVnYXRlIG9yIGludGVncmF0ZSBhbGwgZGF0YSBmb3IgYWxsIGxvY2F0aW9ucyBpbiBhIHNjZW5hcmlvLgorCSAqIAorCSAqIEBwYXJhbSBydW5uYWJsZUNvbnRleHQgUnVubmFibGUgY29udGV4dCBmb3IgcHJvZ3Jlc3MgaW5kaWNhdG9yCisJICogQHJldHVybiBSZWZlcmVuY2VTY2VuYXJpb0RhdGFJbnN0YW5jZSBhZ2dyZWdhdGVkIGRhdGEgaW5zdGFuY2UsIG9yIG51bGwgaWYgbm90IGZvdW5kCisJICovCisJCisJcHVibGljIFJlZmVyZW5jZVNjZW5hcmlvRGF0YUluc3RhbmNlIGFnZ3JlZ2F0ZVNjZW5hcmlvRGF0YShJUnVubmFibGVDb250ZXh0IHJ1bm5hYmxlQ29udGV4dCkgeworCQlmaW5hbCBSZWZlcmVuY2VTY2VuYXJpb0RhdGFJbnN0YW5jZSBhZ2dyZWdhdGVkRGF0YSA9IG5ldyBSZWZlcmVuY2VTY2VuYXJpb0RhdGFJbnN0YW5jZSh0aGlzKTsKKwkJCisJCUlSdW5uYWJsZVdpdGhQcm9ncmVzcyBhZ2dyZWdhdGVUYXNrID0gbmV3IElSdW5uYWJsZVdpdGhQcm9ncmVzcygpIHsKKyAgICAgICAgICAgIHB1YmxpYyB2b2lkIHJ1bihJUHJvZ3Jlc3NNb25pdG9yIHByb2dyZXNzKSB7CisgICAgICAgICAgICAJcHJvZ3Jlc3MuYmVnaW5UYXNrKCJBZ2dyZWdhdGluZyBkYXRhLi4uIiwgcmVmZXJlbmNlU2NlbmFyaW9EYXRhTWFwLnNpemUoKSk7ICAgCS8vJE5PTi1OTFMtMSQKKyAgICAgICAgICAgIAlJdGVyYXRvcjxTdHJpbmc+IGl0ZXIgPSByZWZlcmVuY2VTY2VuYXJpb0RhdGFNYXAua2V5U2V0KCkuaXRlcmF0b3IoKTsKKyAgICAgICAgICAgIAl3aGlsZSgoaXRlciE9bnVsbCkmJihpdGVyLmhhc05leHQoKSkpIHsKKyAgICAgICAgICAgIAkJcHJvZ3Jlc3Mud29ya2VkKDEpOworICAgICAgICAgICAgCQlpZihwcm9ncmVzcy5pc0NhbmNlbGVkKCkpIHRocm93IG5ldyBPcGVyYXRpb25DYW5jZWxlZEV4Y2VwdGlvbigpOworICAgICAgICAgICAgCQlTdHJpbmcgbG9jID0gaXRlci5uZXh0KCk7CisJCQkKKyAgICAgICAgICAgIAkJUmVmZXJlbmNlU2NlbmFyaW9EYXRhSW5zdGFuY2UgbG9jYXRpb25EYXRhID0gcmVmZXJlbmNlU2NlbmFyaW9EYXRhTWFwLmdldChsb2MpOworICAgICAgICAgICAgCQlhZ2dyZWdhdGVkRGF0YS5pbnRlZ3JhdGVEYXRhKGxvY2F0aW9uRGF0YS5pbnN0YW5jZSk7CisgICAgICAgICAgICAJfS8vIGFsbCBsb2NhdGlvbnMKKyAgICAgICAgICAgIAlwcm9ncmVzcy5kb25lKCk7CisgICAgICAgICAgICB9CisJCX07CisJCQorCQl0cnkgeworCQkJcnVubmFibGVDb250ZXh0LnJ1bih0cnVlLCB0cnVlLCBhZ2dyZWdhdGVUYXNrKTsKKwkJfSBjYXRjaChJbnRlcnJ1cHRlZEV4Y2VwdGlvbiBpZSkgeworCQkJLy8gVG9EbworCQkJcmV0dXJuIG51bGw7CisJCX0gY2F0Y2goSW52b2NhdGlvblRhcmdldEV4Y2VwdGlvbiBpdGUpIHsKKwkJCS8vIFRvRG8KKwkJCXJldHVybiBudWxsOworCQl9CisJCXJldHVybiBhZ2dyZWdhdGVkRGF0YTsKKwl9CisJCisJLyoqCisJICogZ2V0UmVmZXJlbmNlRGlyZWN0b3J5LiBSZXR1cm4gdGhlIHJlZmVyZW5jZSBkaXJlY3RvcnkgdXNlZAorCSAqIAorCSAqIEByZXR1cm4gU3RyaW5nIFJlZmVyZW5jZSBkaXJlY3RvcnkKKwkgKi8KKwkKKwlwdWJsaWMgU3RyaW5nIGdldFJlZmVyZW5jZURpcmVjdG9yeSgpIHsKKwkJcmV0dXJuIHRoaXMucmVmRGlyOworCX0KKwkKKwkvKioKKwkgKiBzZXRSZWZlcmVuY2VEaXJlY3RveS4gU2V0IHRoZSByZWZlcmVuY2UgZGlyZWN0b3J5CisJICogCisJICogQHBhcmFtIGRpciBUaGUgZGlyZWN0b3J5CisJICovCisJCisJcHVibGljIHZvaWQgc2V0UmVmZXJlbmNlRGlyZWN0b3J5KFN0cmluZyBkKSB7CisJCXRoaXMucmVmRGlyID0gZDsKKwl9CisJCisJLyoqCisJICogCisJICogQHJldHVybiB0aGUgbWF4IGluY2lkZW5jZSBhdCB0aGUgbW9zdCBlZmZlY3RlZCBsb2NhdGlvbiAKKwkgKi8KKwlwdWJsaWMgZG91YmxlIGdldE1heEluY2lkZW5jZSgpIHsKKwkJcmV0dXJuIG1heEluY2lkZW5jZTsKKwl9CisKKwkvKioKKwkgKiAKKwkgKiBAcmV0dXJuIHRoZSBsb2NhdGlvbiB3aXRoIHRoZSBtYXggaW5jaWRlbmNlCisJICovCisJcHVibGljIFN0cmluZyBnZXRNYXhJbmNpZGVuY2VMb2NhdGlvbigpIHsKKwkJcmV0dXJuIG1heEluY2lkZW5jZUxvY2F0aW9uOworCX0KKwkKKwkKKwkvKioKKwkgKiBSZWZlcmVuY2VTY2VuYXJpb0RhdGFJbnN0YW5jZS4gQ29udGFpbnMgZGF0YSBmb3Igb25lIGxvY2F0aW9uICAKKwkKKwkgKi8KKwlwdWJsaWMgY2xhc3MgUmVmZXJlbmNlU2NlbmFyaW9EYXRhSW5zdGFuY2UgaW1wbGVtZW50cyBDbG9uZWFibGUgeworCQkKKwkJcHJpdmF0ZSBkb3VibGUgbWF4UyA9IDAuMDsKKwkJcHJpdmF0ZSBkb3VibGUgbWF4RSA9IDAuMDsKKwkJcHJpdmF0ZSBkb3VibGUgbWF4SSA9IDAuMDsKKwkJcHJpdmF0ZSBkb3VibGUgbWF4UiA9IDAuMDsKKwkJCQorCQkKKworCQkvKioKKwkJICogVGhlIHJlZ2lvbiBkYXRhIG1hcCBpcyBrZXllZCBieSBwcm9wZXJ0eSAoUyxFLCBJLCBSLCBpbmNpZGVuY2UsIGV0YykgYW5kIGNvbnRhaW5zIERhdGEgKG1vc3RseSBEb3VibGVzIGJ1dAorCQkgKiBTVEVNVGltZSBpcyBzdG9yZWQgYXMgYSBTdHJpbmcpIHNvIGFsbCBkYXRhIGlzIHN0b3JlZCBhcyBTdHJpbmcuCisJCSAqLworCQkKKwkJcHVibGljIE1hcDxTdHJpbmcsTGlzdDxTdHJpbmc+PiBpbnN0YW5jZTsKKwkJCisJCQorCisJCXByb3RlY3RlZCBSZWZlcmVuY2VTY2VuYXJpb0RhdGFNYXBJbXBsIGRhdGFNYXA7CisJCQorCQlwdWJsaWMgUmVmZXJlbmNlU2NlbmFyaW9EYXRhTWFwSW1wbCBnZXREYXRhTWFwKCkgeworCQkJcmV0dXJuIGRhdGFNYXA7CisJCX0KKworCQkvKioKKwkJICogQ3JlYXRlIGEgbmV3IGluc3RhbmNlCisJCSAqICAKKwkJICogQHBhcmFtIGRhdGEgTWFwIG9mIHBhcmFtZXRlciAoZS5nLiBhIHN0YXRlKSBhbmQgaXRzIHZhbHVlcworCQkgKiBAcGFyYW0gbWFwIERhdGFNYXAgdGhlIGluc3RhbmNlIGJlbG9uZ3MgdG8KKwkJICovCisJCXB1YmxpYyBSZWZlcmVuY2VTY2VuYXJpb0RhdGFJbnN0YW5jZShNYXA8U3RyaW5nLCBMaXN0PFN0cmluZz4+IGRhdGEsIFJlZmVyZW5jZVNjZW5hcmlvRGF0YU1hcEltcGwgbWFwKSB7CisJCQl0aGlzLmluc3RhbmNlID0gZGF0YTsKKwkJCXRoaXMuZGF0YU1hcCA9IG1hcDsKKwkJfQorCQkKKwkJLyoqCisJCSAqIENyZWF0ZSBhbiBlbXB0eSBpbnN0YW5jZSBvZiBzb21lIHR5cGUKKwkJICogIAorCQkgKiBAcGFyYW0gZGF0YU1hcCBtYXAKKwkJICovCisJCXB1YmxpYyBSZWZlcmVuY2VTY2VuYXJpb0RhdGFJbnN0YW5jZShSZWZlcmVuY2VTY2VuYXJpb0RhdGFNYXBJbXBsIGRhdGFNYXApIHsKKwkJCXRoaXMuaW5zdGFuY2UgPSBuZXcgSGFzaE1hcDxTdHJpbmcsIExpc3Q8U3RyaW5nPj4oKTsKKwkJCXRoaXMuZGF0YU1hcCA9IGRhdGFNYXA7CisJCX0KKwkJCisJCS8qKgorCQkgKiBkZWVwIGNsb25lCisJCSAqIEBzZWUgamF2YS5sYW5nLk9iamVjdCNjbG9uZSgpCisJCSAqLworCQlAT3ZlcnJpZGUKKwkJcHVibGljICBSZWZlcmVuY2VTY2VuYXJpb0RhdGFJbnN0YW5jZSBjbG9uZSgpIHsKKwkJCXRoaXMuZ2V0RGF0YSgpOworCQkJUmVmZXJlbmNlU2NlbmFyaW9EYXRhSW5zdGFuY2UgbmV3SW5zdGFuY2UgPSBuZXcgUmVmZXJlbmNlU2NlbmFyaW9EYXRhSW5zdGFuY2UodGhpcy5kYXRhTWFwKTsKKwkJCUl0ZXJhdG9yPFN0cmluZz4gaXRlciA9IHRoaXMuaW5zdGFuY2Uua2V5U2V0KCkuaXRlcmF0b3IoKTsKKwkJCXdoaWxlKGl0ZXIuaGFzTmV4dCgpKSB7CisJCQkJU3RyaW5nIGtleSA9IGl0ZXIubmV4dCgpOworCQkJCUxpc3Q8U3RyaW5nPiBkYXRhTGlzdCA9IGluc3RhbmNlLmdldChrZXkpOworCQkJCUxpc3Q8U3RyaW5nPiBuZXdMaXN0ID0gbmV3IEFycmF5TGlzdDxTdHJpbmc+KCk7CisJCQkKKwkJCQlmb3IgKGludCBpID0gMDsgaSA8IGRhdGFMaXN0LnNpemUoKTsgaSArKykgeworCQkJCQlTdHJpbmcgdmFsID0gZGF0YUxpc3QuZ2V0KGkpOworCQkJCQluZXdMaXN0LmFkZCh2YWwpOworCQkJCX0KKwkJCQluZXdJbnN0YW5jZS5pbnN0YW5jZS5wdXQoa2V5LG5ld0xpc3QpOworCQkJfQorCQkJbmV3SW5zdGFuY2UuZ2V0RGF0YSgpOworCQkJcmV0dXJuIG5ld0luc3RhbmNlOworCQl9CisJCQorCQkvKioKKwkJICogaW50ZWdyYXRlcyBkYXRhIGZyb20gYW5vdGhlciBpbnN0YW5jZQorCQkgKiBAcGFyYW0gZGF0YQorCQkgKi8KKwkJcHVibGljIHZvaWQgaW50ZWdyYXRlRGF0YShNYXA8U3RyaW5nLCBMaXN0PFN0cmluZz4+IGRhdGEpIHsKKwkJCS8vIGdldCB0aGUgc3RhdGUgdmFyaWFibGVzIFNFSVIuLi4gYXMga2V5cworCQkJZm9yIChFbnRyeTxTdHJpbmcsTGlzdDxTdHJpbmc+PiBlbnRyeSA6IGRhdGEuZW50cnlTZXQoKSkgeworCQkJCS8vIGdldCB0aGUga2V5CisJCQkJU3RyaW5nIHN0YXRlID0gZW50cnkuZ2V0S2V5KCk7CisJCQkJTGlzdDxTdHJpbmc+IHZhbHVlTGlzdCA9IGVudHJ5LmdldFZhbHVlKCk7CisJCQkJaWYodmFsdWVMaXN0LnNpemUoKT49MSkgeworCQkJCQkvLyBnZXQgdGhlIGN1cnJlbnQgbGlzdAorCQkJCQlMaXN0PFN0cmluZz4gYWdncmVnYXRlZExpc3QgPSBuZXcgQXJyYXlMaXN0PFN0cmluZz4oKTsKKwkJCQkJaWYodGhpcy5pbnN0YW5jZS5jb250YWluc0tleShzdGF0ZSkpIHsKKwkJCQkJCWFnZ3JlZ2F0ZWRMaXN0ID0gdGhpcy5pbnN0YW5jZS5nZXQoc3RhdGUpOworCQkJCQl9IGVsc2UgeworCQkJCQkJLy8gY3JlYXRlIGl0IGlmIGl0IGRvZXNuJ3QgZXhpc3QKKwkJCQkJCWZvcihpbnQgaSA9IDA7IGkgPCB2YWx1ZUxpc3Quc2l6ZSgpOyBpICsrKSB7CisJCQkJCQkJYWdncmVnYXRlZExpc3QuYWRkKCIwLjAiKTsvLyROT04tTkxTLTEkCisJCQkJCQl9CisJCQkJCQl0aGlzLmluc3RhbmNlLnB1dChzdGF0ZSxhZ2dyZWdhdGVkTGlzdCk7CisJCQkJCX0KKwkJCQkJCisJCQkJCQorCQkJCQkKKwkJCQkJU3RyaW5nIGZpcnN0ID0gdmFsdWVMaXN0LmdldCgwKTsKKwkJCQkJLy8gY2hlY2sgaWYgdGhpcyBpcyBudW1lcmljIGRhdGEgLSBpdCBtaWdodCBqdXN0IGJlIGEgZGF0ZQorCQkJCQlib29sZWFuIGlzRGF0YSA9IHRydWU7CisJCQkJCXRyeSB7CisJCQkJCQlAU3VwcHJlc3NXYXJuaW5ncygidW51c2VkIikKKwkJCQkJCWRvdWJsZSB2YWwgPSAobmV3IERvdWJsZShmaXJzdCkpLmRvdWJsZVZhbHVlKCk7CisJCQkJCX0gY2F0Y2ggKE51bWJlckZvcm1hdEV4Y2VwdGlvbiBuZmUpIHsKKwkJCQkJCWlzRGF0YSA9IGZhbHNlOworCQkJCQl9CisJCQkJCWZvciAoaW50IGkgPSAwOyBpIDwgdmFsdWVMaXN0LnNpemUoKTsgaSArKykgeworCQkJCQkJU3RyaW5nIHZhbHVlID0gdmFsdWVMaXN0LmdldChpKTsKKwkJCQkJCWlmKGlzRGF0YSkgeworCQkJCQkJCWRvdWJsZSB2YWwgPSAobmV3IERvdWJsZSh2YWx1ZSkpLmRvdWJsZVZhbHVlKCk7CisJCQkJCQkJZG91YmxlIG9sZFZhbCA9IChuZXcgRG91YmxlKGFnZ3JlZ2F0ZWRMaXN0LmdldChpKSkpLmRvdWJsZVZhbHVlKCk7CisJCQkJCQkJaWYoc3RhdGUuaW5kZXhPZihJVEVSQVRJT05fS0VZKT09LTEpIHsKKwkJCQkJCQkJLy8gYWRkIHRoZW0gdXAgZXhjZXB0IGZvciB0aGUgaXRlcmF0aW9uIGNvdW50ZXIgY29sdW1uCisJCQkJCQkJCW9sZFZhbCArPSB2YWw7CisJCQkJCQkJfSBlbHNlIHsKKwkJCQkJCQkJb2xkVmFsID0gdmFsOworCQkJCQkJCX0KKwkJCQkJCQlhZ2dyZWdhdGVkTGlzdC5zZXQoaSwiIitvbGRWYWwpOy8vJE5PTi1OTFMtMSQKKwkJCQkJCQl0aGlzLmluc3RhbmNlLnB1dChzdGF0ZSxhZ2dyZWdhdGVkTGlzdCk7CisJCQkJCQl9IGVsc2UgeworCQkJCQkJCS8vIGp1c3QgY29weSB0aGUgc3RyaW5ncworCQkJCQkJCWFnZ3JlZ2F0ZWRMaXN0LnNldChpLHZhbHVlKTsKKwkJCQkJCQl0aGlzLmluc3RhbmNlLnB1dChzdGF0ZSxhZ2dyZWdhdGVkTGlzdCk7CisJCQkJCQl9CisJCQkJCX0KKwkJCQkJCisJCQkJCQorCQkJCX0KKwkJCQkKKwkJCQkKKwkJCX0KKwkJCQorCQkJCisJCX0KKwkJCisJCQorCQkvKioKKwkJICogZ2V0RGF0YS4gUmV0dXJuIGRhdGEgZm9yIHRoZSBnaXZlbiBwYXJhbWV0ZXIgKGUuZy4gc3RhdGUpCisJCSAqIAorCQkgKiBAcGFyYW0gcGFybSBQYXJhbWV0ZXIKKwkJICogQHJldHVybiBMaXN0PFN0cmluZz4gZGF0YQorCQkgKi8KKwkJCisJCXB1YmxpYyBMaXN0PFN0cmluZz4gZ2V0RGF0YShTdHJpbmcgcGFybSkgeworCQkJcmV0dXJuIGluc3RhbmNlLmdldChwYXJtKTsKKwkJfQorCQkKKwkJLyoqCisJCSAqIGNvbnRhaW5zUGFyYW1ldGVyLiBSZXR1cm4gdHJ1ZSBpZiB0aGUgZGF0YSBjb250YWlucyB0aGUgZ2l2ZW4gcGFyYW1ldGVyIChlLmcuIGEgc3RhdGUpCisJCSAqIAorCQkgKiBAcGFyYW0gcCBQYXJhbWV0ZXIgdG8gY2hlY2sKKwkJICogQHJldHVybiBib29sZWFuIHRydWUgaWYgZm91bmQsIGZhbHNlIG90aGVyd2lzZQorCQkgKi8KKwkJCisJCXB1YmxpYyBib29sZWFuIGNvbnRhaW5zUGFyYW1ldGVyKFN0cmluZyBwKSB7CisJCQlyZXR1cm4gdGhpcy5pbnN0YW5jZS5jb250YWluc0tleShwKTsKKwkJfQorCQkKKwkJLyoqCisJCSAqIGdldCB0aGUgYWxsIHRoZSBkYXRhCisJCSAqIEByZXR1cm4gdGhpcyBpbnN0YW5jZSBtYXAKKwkJICovCisJCXB1YmxpYyBNYXA8U3RyaW5nLCBMaXN0PFN0cmluZz4+IGdldEluc3RhbmNlKCkgeworCQkJcmV0dXJuIGluc3RhbmNlOworCQl9CisJCQorCQkvKioKKwkJICogZmluZCB0aGUgbWF4aW11bSB2YWx1ZXMgZm9yIGV2ZXJ5IHR5cGUgb2Ygc3RhdGUKKwkJICogZ3JvdXBpbmcgIHN0YXRlcyBieSB0eXBlIChTRUlSKQorCQkgKi8KKwkJcHVibGljIHZvaWQgZmluZE1heFZhbHVlcygpIHsKKwkJCQorCQkJCQkKKwkJCQkJU3RyaW5nW10gU19rZXlzID0gdGhpcy5kYXRhTWFwLmdldFNfS2V5cygpOworCQkJCQlTdHJpbmdbXSBFX2tleXMgPSB0aGlzLmRhdGFNYXAuZ2V0RV9LZXlzKCk7CisJCQkJCVN0cmluZ1tdIElfa2V5cyA9IHRoaXMuZGF0YU1hcC5nZXRJX0tleXMoKTsKKwkJCQkJU3RyaW5nW10gUl9rZXlzID0gdGhpcy5kYXRhTWFwLmdldFJfS2V5cygpOworCQkJCQkKKwkJCQkJLy8gUyBzdGF0ZXMKKwkJCQkJaWYodGhpcy5kYXRhTWFwLmdldFNfS2V5cygpICE9IG51bGwpIHsKKwkJCQkJCWZvciAoaW50IGkgPTA7IGkgPCBTX2tleXMubGVuZ3RoOyBpICsrKSB7CisJCQkJCQkJTGlzdDxTdHJpbmc+IGRhdGFMaXN0ID0gdGhpcy5nZXREYXRhKFNfa2V5c1tpXSk7CisJCQkJCQkJaWYoZGF0YUxpc3QgIT0gbnVsbCkgeworCQkJCQkJCQltYXhTID0gbmV3IERvdWJsZShkYXRhTGlzdC5nZXQoMCkpLmRvdWJsZVZhbHVlKCk7CisJCSAgICAgICAgICAgIAkJCWZvcihpbnQgaiA9IDA7IGogPCBkYXRhTGlzdC5zaXplKCk7IGogKyspIHsKKwkJICAgICAgICAgICAgCQkJCWRvdWJsZSB2YWwgPSBuZXcgRG91YmxlKGRhdGFMaXN0LmdldChqKSkuZG91YmxlVmFsdWUoKTsKKwkJICAgICAgICAgICAgCQkJCWlmICh2YWwgPiBtYXhTKSB7CisJCSAgICAgICAgICAgIAkJCQkJbWF4UyA9IHZhbDsKKwkJICAgICAgICAgICAgCQkJCX0KKwkJICAgICAgICAgICAgCQkJfQorCQkJCQkJCX0KKwkJCQkJCX0KKwkJCQkJfQorCQkJCQkKKwkJCQkJLy8gSWYgRSBzdGF0ZQorCQkJCQlpZih0aGlzLmRhdGFNYXAuZ2V0RV9LZXlzKCkgIT0gbnVsbCkgeworCQkJCQkJZm9yIChpbnQgaSA9MDsgaSA8IEVfa2V5cy5sZW5ndGg7IGkgKyspIHsKKwkJCQkJCQlMaXN0PFN0cmluZz4gZGF0YUxpc3QgPSB0aGlzLmdldERhdGEoRV9rZXlzW2ldKTsKKwkJCQkJCQlpZihkYXRhTGlzdCAhPSBudWxsKSB7CisJCQkJCQkJCW1heEUgPSBuZXcgRG91YmxlKGRhdGFMaXN0LmdldCgwKSkuZG91YmxlVmFsdWUoKTsKKwkJICAgICAgICAgICAgCQkJZm9yKGludCBqID0gMDsgaiA8IGRhdGFMaXN0LnNpemUoKTsgaiArKykgeworCQkgICAgICAgICAgICAJCQkJZG91YmxlIHZhbCA9IG5ldyBEb3VibGUoZGF0YUxpc3QuZ2V0KGopKS5kb3VibGVWYWx1ZSgpOworCQkgICAgICAgICAgICAJCQkJaWYgKHZhbCA+IG1heEUpIHsKKwkJICAgICAgICAgICAgCQkJCQltYXhFID0gdmFsOworCQkgICAgICAgICAgICAJCQkJfQorCQkgICAgICAgICAgICAJCQl9CisJCQkJCQkJfQorCQkJCQkJfQorCQkJCQl9CisKKwkJCQkJCisgICAgICAgIAkJCQorICAgICAgICAJCQkvLyBJZiBoYXZlIEkgc3RhdGUgCisJCQkJCWlmKHRoaXMuZGF0YU1hcC5nZXRJX0tleXMoKSAhPSBudWxsKSB7CisJCQkJCQlmb3IgKGludCBpID0wOyBpIDwgSV9rZXlzLmxlbmd0aDsgaSArKykgeworCQkJCQkJCUxpc3Q8U3RyaW5nPiBkYXRhTGlzdCA9IHRoaXMuZ2V0RGF0YShJX2tleXNbaV0pOworCQkJCQkJCWlmKGRhdGFMaXN0ICE9IG51bGwpIHsKKwkJCQkJCQkJbWF4SSA9IG5ldyBEb3VibGUoZGF0YUxpc3QuZ2V0KDApKS5kb3VibGVWYWx1ZSgpOworCQkgICAgICAgICAgICAJCQlmb3IoaW50IGogPSAwOyBqIDwgZGF0YUxpc3Quc2l6ZSgpOyBqICsrKSB7CisJCSAgICAgICAgICAgIAkJCQlkb3VibGUgdmFsID0gbmV3IERvdWJsZShkYXRhTGlzdC5nZXQoaikpLmRvdWJsZVZhbHVlKCk7CisJCSAgICAgICAgICAgIAkJCQlpZiAodmFsID4gbWF4SSkgeworCQkgICAgICAgICAgICAJCQkJCW1heEkgPSB2YWw7CisJCSAgICAgICAgICAgIAkJCQl9CisJCSAgICAgICAgICAgIAkJCX0KKwkJCQkJCQl9CisJCQkJCQl9CisJCQkJCX0KKwkJCQkJCisKKyAgICAgICAgCQkJCisgICAgICAgIAkJCS8vIElmIGhhdmUgUiBzdGF0ZSAKKwkJCQkJaWYodGhpcy5kYXRhTWFwLmdldFJfS2V5cygpICE9IG51bGwpIHsKKwkJCQkJCWZvciAoaW50IGkgPTA7IGkgPCBSX2tleXMubGVuZ3RoOyBpICsrKSB7CisJCQkJCQkJTGlzdDxTdHJpbmc+IGRhdGFMaXN0ID0gdGhpcy5nZXREYXRhKFJfa2V5c1tpXSk7CisJCQkJCQkJaWYoZGF0YUxpc3QgIT0gbnVsbCkgeworCQkJCQkJCQltYXhSID0gbmV3IERvdWJsZShkYXRhTGlzdC5nZXQoMCkpLmRvdWJsZVZhbHVlKCk7CisJCSAgICAgICAgICAgIAkJCWZvcihpbnQgaiA9IDA7IGogPCBkYXRhTGlzdC5zaXplKCk7IGogKyspIHsKKwkJICAgICAgICAgICAgCQkJCWRvdWJsZSB2YWwgPSBuZXcgRG91YmxlKGRhdGFMaXN0LmdldChqKSkuZG91YmxlVmFsdWUoKTsKKwkJICAgICAgICAgICAgCQkJCWlmICh2YWwgPiBtYXhSKSB7CisJCSAgICAgICAgICAgIAkJCQkJbWF4UiA9IHZhbDsKKwkJICAgICAgICAgICAgCQkJCX0KKwkJICAgICAgICAgICAgCQkJfQorCQkJCQkJCX0KKwkJCQkJCX0KKwkJCQkJfQorCQkJCQkKKwkJCQkJICAgCisgICAgICAgIAkJCQorICAgICAgICAJCQkKKwkJfSAvLyBmaW5kTWF4VmFsdWVzCisJCQorCQkKKwkJCisJCS8qKgorCQkgKiBnZXREYXRhLiBSZXR1cm4gdGhlIG1hcCB0aGF0IG9mIHJhdyBkYXRhIChub3QgZmlsdGVyZWQpCisJCSAqIEByZXR1cm4gIE1hcDxTdHJpbmcsIExpc3Q8RG91YmxlPj4gTWFwIHdpdGggc3RhdGUsIHZhbHVlIGxpc3QKKwkJICovCisJCUBTdXBwcmVzc1dhcm5pbmdzKCJib3hpbmciKQorCQlwdWJsaWMgTWFwPFN0cmluZywgTGlzdDxEb3VibGU+PiBnZXREYXRhKCkgeworCQkJCisJCQlIYXNoTWFwPFN0cmluZywgTGlzdDxEb3VibGU+PiBkYXRhID0gbmV3IEhhc2hNYXA8U3RyaW5nLCBMaXN0PERvdWJsZT4+KCk7CisJCQkKKwkJCWZvcihTdHJpbmcgc3RhdGUgOiBpbnN0YW5jZS5rZXlTZXQoKSkgeworCQkJCUFycmF5TGlzdDxEb3VibGU+IGxpc3QgPSBuZXcgQXJyYXlMaXN0PERvdWJsZT4oKTsKKwkJCQlpZihzdGF0ZS5lcXVhbHNJZ25vcmVDYXNlKCJ0aW1lIikpY29udGludWU7Ly8kTk9OLU5MUy0xJAorCQkJCWZvcihTdHJpbmcgc2QgOiBpbnN0YW5jZS5nZXQoc3RhdGUpKSAKKwkJCQkJbGlzdC5hZGQoRG91YmxlLnBhcnNlRG91YmxlKHNkKSk7CisJCQkJZGF0YS5wdXQoc3RhdGUsIGxpc3QpOworCQkJfQorCQkJcmV0dXJuIGRhdGE7CisJCX0KKwkJCisJCS8qKgorCQkgKiBSZXR1cm4gdGhlIHRvdGFscyBvZiB0eXBlIFN1c2NlcHRpYmxlICh0aGVyZSBjb3VsZCBiZSBtb3JlIHRoYW4gb25lLCBlZworCQkgKiBieSBhZ2Ugb3IgaW1tdW5lIGNvbXByb21pc2VkIHN0YXRlKQorCQkgKiBAcmV0dXJuICAKKwkJICovCisJCUBTdXBwcmVzc1dhcm5pbmdzKCJib3hpbmciKQorCQlwdWJsaWMgTGlzdDxEb3VibGU+IGdldFN0b3RhbHMoKSB7CisJCQlTdHJpbmdbXSBrZXlzID0gdGhpcy5nZXREYXRhTWFwKCkuZ2V0U19LZXlzKCk7CisJCQlMaXN0PERvdWJsZT4gZGF0YSA9IG5ldyBBcnJheUxpc3Q8RG91YmxlPigpOworCQkJaWYoa2V5cy5sZW5ndGggPT0gMCkgcmV0dXJuIGRhdGE7CisJCQlMaXN0PFN0cmluZz4gc3RyTGlzdCA9IGluc3RhbmNlLmdldChrZXlzWzBdKTsKKwkJCQorCQkJaWYoc3RyTGlzdCAhPW51bGwpIHsKKwkJCQlmb3IoaW50IGogPSAwOyBqIDwgc3RyTGlzdC5zaXplKCk7IGogKyspIHsKKwkJCQkJZGF0YS5hZGQoaiwgbmV3IERvdWJsZShzdHJMaXN0LmdldChqKSkuZG91YmxlVmFsdWUoKSk7CisJCQkJfQorCQkJfQorCQkJaWYoa2V5cy5sZW5ndGggPj0yKSB7CisJCQkJLy8gaWYgd2UgaGF2ZSBtb3JlIHRoYW4gb25lIEkgY29tcGFydG1lbnQgd2Ugc3VtIHRoZW0gdXAKKwkJCQlmb3IoaW50IGkgPSAxOyBpIDwga2V5cy5sZW5ndGg7IGkgKyspIHsKKwkJCQkJc3RyTGlzdCA9IGluc3RhbmNlLmdldChrZXlzW2ldKTsKKwkJCQkJZm9yKGludCBqID0gMDsgaiA8IHN0ckxpc3Quc2l6ZSgpOyBqICsrKSB7CisJICAgIAkJCQlkb3VibGUgdmFsID0gbmV3IERvdWJsZShzdHJMaXN0LmdldChqKSkuZG91YmxlVmFsdWUoKTsKKwkgICAgCQkJCXZhbCArPSBkYXRhLmdldChqKS5kb3VibGVWYWx1ZSgpOworCSAgICAJCQkJZGF0YS5zZXQoaixuZXcgRG91YmxlKHZhbCkpOworCQkJCQl9CisJCQkJfQorCQkJfQorCQkJcmV0dXJuIGRhdGE7CisJCX0vLyBnZXRTdG90YWxzCisJCQorCQkvKioKKwkJICogUmV0dXJuIHRoZSB0b3RhbHMgb2YgdHlwZSBFICh0aGVyZSBjb3VsZCBiZSBtb3JlIHRoYW4gb25lLCBlZworCQkgKiBieSBhZ2Ugb3IgaW1tdW5lIGNvbXByb21pc2VkIHN0YXRlKQorCQkgKiBAcmV0dXJuICAKKwkJICovCisJCUBTdXBwcmVzc1dhcm5pbmdzKCJib3hpbmciKQorCQlwdWJsaWMgTGlzdDxEb3VibGU+IGdldEV0b3RhbHMoKSB7CisJCQlTdHJpbmdbXSBrZXlzID0gdGhpcy5nZXREYXRhTWFwKCkuZ2V0RV9LZXlzKCk7CisJCQlMaXN0PERvdWJsZT4gZGF0YSA9IG5ldyBBcnJheUxpc3Q8RG91YmxlPigpOworCQkJaWYoa2V5cy5sZW5ndGggPT0gMCkgcmV0dXJuIGRhdGE7IC8vIGVtcHR5CisJCQlMaXN0PFN0cmluZz4gc3RyTGlzdCA9IGluc3RhbmNlLmdldChrZXlzWzBdKTsKKwkJCWlmKHN0ckxpc3QgIT1udWxsKSB7CisJCQkJZm9yKGludCBqID0gMDsgaiA8IHN0ckxpc3Quc2l6ZSgpOyBqICsrKSB7CisJCQkJCWRhdGEuYWRkKGosIG5ldyBEb3VibGUoc3RyTGlzdC5nZXQoaikpLmRvdWJsZVZhbHVlKCkpOworCQkJCX0KKwkJCX0KKwkJCWlmKGtleXMubGVuZ3RoID49MikgeworCQkJCS8vIGlmIHdlIGhhdmUgbW9yZSB0aGFuIG9uZSBJIGNvbXBhcnRtZW50IHdlIHN1bSB0aGVtIHVwCisJCQkJZm9yKGludCBpID0gMTsgaSA8IGtleXMubGVuZ3RoOyBpICsrKSB7CisJCQkJCXN0ckxpc3QgPSBpbnN0YW5jZS5nZXQoa2V5c1tpXSk7CisJCQkJCWZvcihpbnQgaiA9IDA7IGogPCBzdHJMaXN0LnNpemUoKTsgaiArKykgeworCSAgICAJCQkJZG91YmxlIHZhbCA9IG5ldyBEb3VibGUoc3RyTGlzdC5nZXQoaikpLmRvdWJsZVZhbHVlKCk7CisJICAgIAkJCQl2YWwgKz0gZGF0YS5nZXQoaikuZG91YmxlVmFsdWUoKTsKKwkgICAgCQkJCWRhdGEuc2V0KGosbmV3IERvdWJsZSh2YWwpKTsKKwkJCQkJfQorCQkJCX0KKwkJCX0KKwkJCXJldHVybiBkYXRhOworCQl9Ly8gZ2V0RXRvdGFscworCQkKKwkJLyoqCisJCSAqIFJldHVybiB0aGUgdG90YWxzIG9mIHR5cGUgSSAodGhlcmUgY291bGQgYmUgbW9yZSB0aGFuIG9uZSwgZWcKKwkJICogYnkgYWdlIG9yIGltbXVuZSBjb21wcm9taXNlZCBzdGF0ZSkKKwkJICogQHJldHVybiAgCisJCSAqLworCQlAU3VwcHJlc3NXYXJuaW5ncygiYm94aW5nIikKKwkJcHVibGljIExpc3Q8RG91YmxlPiBnZXRJdG90YWxzKCkgeworCQkJU3RyaW5nW10ga2V5cyA9IHRoaXMuZ2V0RGF0YU1hcCgpLmdldElfS2V5cygpOworCQkJTGlzdDxEb3VibGU+IGRhdGEgPSBuZXcgQXJyYXlMaXN0PERvdWJsZT4oKTsKKwkJCWlmKGtleXMubGVuZ3RoID09IDApIHJldHVybiBkYXRhOworCQkJTGlzdDxTdHJpbmc+IHN0ckxpc3QgPSBpbnN0YW5jZS5nZXQoa2V5c1swXSk7CisJCQkKKwkJCWlmKHN0ckxpc3QgIT1udWxsKSB7CisJCQkJZm9yKGludCBqID0gMDsgaiA8IHN0ckxpc3Quc2l6ZSgpOyBqICsrKSB7CisJCQkJCWRhdGEuYWRkKGosIG5ldyBEb3VibGUoc3RyTGlzdC5nZXQoaikpLmRvdWJsZVZhbHVlKCkpOworCQkJCX0KKwkJCX0KKwkJCWlmKGtleXMubGVuZ3RoID49MikgeworCQkJCS8vIGlmIHdlIGhhdmUgbW9yZSB0aGFuIG9uZSBJIGNvbXBhcnRtZW50IHdlIHN1bSB0aGVtIHVwCisJCQkJZm9yKGludCBpID0gMTsgaSA8IGtleXMubGVuZ3RoOyBpICsrKSB7CisJCQkJCXN0ckxpc3QgPSBpbnN0YW5jZS5nZXQoa2V5c1tpXSk7CisJCQkJCWZvcihpbnQgaiA9IDA7IGogPCBzdHJMaXN0LnNpemUoKTsgaiArKykgeworCSAgICAJCQkJZG91YmxlIHZhbCA9IG5ldyBEb3VibGUoc3RyTGlzdC5nZXQoaikpLmRvdWJsZVZhbHVlKCk7CisJICAgIAkJCQl2YWwgKz0gZGF0YS5nZXQoaikuZG91YmxlVmFsdWUoKTsKKwkgICAgCQkJCWRhdGEuc2V0KGosbmV3IERvdWJsZSh2YWwpKTsKKwkJCQkJfQorCQkJCX0KKwkJCX0KKwkJCXJldHVybiBkYXRhOworCQl9Ly8gZ2V0SXRvdGFscworCQkKKwkJLyoqCisJCSAqIFJldHVybiB0aGUgdG90YWxzIG9mIHR5cGUgSSAodGhlcmUgY291bGQgYmUgbW9yZSB0aGFuIG9uZSwgZWcKKwkJICogYnkgYWdlIG9yIGltbXVuZSBjb21wcm9taXNlZCBzdGF0ZSkKKwkJICogQHJldHVybiAgCisJCSAqLworCQlAU3VwcHJlc3NXYXJuaW5ncygiYm94aW5nIikKKwkJcHVibGljIExpc3Q8RG91YmxlPiBnZXRSdG90YWxzKCkgeworCQkJU3RyaW5nW10ga2V5cyA9IHRoaXMuZ2V0RGF0YU1hcCgpLmdldFJfS2V5cygpOworCQkJTGlzdDxEb3VibGU+IGRhdGEgPSBuZXcgQXJyYXlMaXN0PERvdWJsZT4oKTsKKwkJCWlmKGtleXMubGVuZ3RoID09IDApIHJldHVybiBkYXRhOworCQkJTGlzdDxTdHJpbmc+IHN0ckxpc3QgPSBpbnN0YW5jZS5nZXQoa2V5c1swXSk7CisJCQkKKwkJCWlmKHN0ckxpc3QgIT1udWxsKSB7CisJCQkJZm9yKGludCBqID0gMDsgaiA8IHN0ckxpc3Quc2l6ZSgpOyBqICsrKSB7CisJCQkJCWRhdGEuYWRkKGosIG5ldyBEb3VibGUoc3RyTGlzdC5nZXQoaikpLmRvdWJsZVZhbHVlKCkpOworCQkJCX0KKwkJCX0KKwkJCWlmKGtleXMubGVuZ3RoID49MikgeworCQkJCS8vIGlmIHdlIGhhdmUgbW9yZSB0aGFuIG9uZSBJIGNvbXBhcnRtZW50IHdlIHN1bSB0aGVtIHVwCisJCQkJZm9yKGludCBpID0gMTsgaSA8IGtleXMubGVuZ3RoOyBpICsrKSB7CisJCQkJCXN0ckxpc3QgPSBpbnN0YW5jZS5nZXQoa2V5c1tpXSk7CisJCQkJCWZvcihpbnQgaiA9IDA7IGogPCBzdHJMaXN0LnNpemUoKTsgaiArKykgeworCSAgICAJCQkJZG91YmxlIHZhbCA9IG5ldyBEb3VibGUoc3RyTGlzdC5nZXQoaikpLmRvdWJsZVZhbHVlKCk7CisJICAgIAkJCQl2YWwgKz0gZGF0YS5nZXQoaikuZG91YmxlVmFsdWUoKTsKKwkgICAgCQkJCWRhdGEuc2V0KGosbmV3IERvdWJsZSh2YWwpKTsKKwkJCQkJfQorCQkJCX0KKwkJCX0KKwkJCXJldHVybiBkYXRhOworCQl9Ly8gZ2V0UnRvdGFscworCQkKKwkJCisJCQorCQkKKwkJLyoqCisJCSAqIAorCQkgKiBAcmV0dXJuIG1heFMKKwkJICovCisJCXB1YmxpYyBkb3VibGUgZ2V0TWF4UygpIHsKKwkJCXJldHVybiBtYXhTOworCQl9CisKKwkJLyoqCisJCSAqIAorCQkgKiBAcmV0dXJuIG1heEUKKwkJICovCisJCXB1YmxpYyBkb3VibGUgZ2V0TWF4RSgpIHsKKwkJCXJldHVybiBtYXhFOworCQl9CisKKwkJLyoqCisJCSAqIAorCQkgKiBAcmV0dXJuIG1heEkKKwkJICovCisJCXB1YmxpYyBkb3VibGUgZ2V0TWF4SSgpIHsKKwkJCXJldHVybiBtYXhJOworCQl9CisKKwkJLyoqCisJCSAqIAorCQkgKiBAcmV0dXJuIG1heFIKKwkJICovCisJCXB1YmxpYyBkb3VibGUgZ2V0TWF4UigpIHsKKwkJCXJldHVybiBtYXhSOworCQl9CisJCQorCQkvKioKKwkJICogZ2V0U2l6ZS4gUmV0dXJuIHRoZSBudW1iZXIgb2YgZGF0YSByb3dzIGluIHRoZSBpbnN0YW5jZS4gRWFjaCBhcnJheSAodmFsdWUpIGlzIGFzc3VtZWQgc2FtZSBzaXplCisJCSAqIAorCQkgKiBAcmV0dXJuIGludCBUaGUgc2l6ZSBvZiB0aGUgCisJCSAqLworCQkKKwkJcHVibGljIGludCBnZXRTaXplKCkgeworCQkJaWYodGhpcy5pbnN0YW5jZS5zaXplKCkgPT0gMCkgcmV0dXJuIDA7CisJCQlyZXR1cm4gdGhpcy5pbnN0YW5jZS52YWx1ZXMoKS5pdGVyYXRvcigpLm5leHQoKS5zaXplKCk7CisJCX0KKwl9CisKKworCS8qKgorCSAqIFRPRE8gaW1wbGVtZW50IHRoaXMgbWV0aG9kCisJICogVGhpcyBtZXRob2QgaW5zdXJlcyB0aGF0IHRoZSBvdXRwdXQgb2YgYSBkaXNlYXNlIG1vZGVsIChvciB0aGUgb3V0cHV0IG9mIGEgcG9wdWxhdGlvbiBtb2RlbCkgaXMgc2FuZSEKKwkgKiBAcmV0dXJuCisJICovCisJcHVibGljIGJvb2xlYW4gc2FuZSgpIHsKKwkJQWN0aXZhdG9yLmxvZ0luZm9ybWF0aW9uKCJUT0RPICAgUmVmZXJlbmNlU2NlbmFyaW9EYXRhTWFwSW1wbC5zYW5lKCkgbXVzdCBiZSBmdWxseSBpbXBsZW1lbnRlZCAhISEiKTsgLy8kTk9OLU5MUy0xJAorCQkKKwkJSXRlcmF0b3I8U3RyaW5nPiBsb2NhdGlvbkl0ZXIgPSBnZXRMb2NhdGlvbnMoKS5pdGVyYXRvcigpOworCQl3aGlsZShsb2NhdGlvbkl0ZXIhPW51bGwgJiYgbG9jYXRpb25JdGVyLmhhc05leHQoKSkgeworCQkJU3RyaW5nIGxvY2F0aW9uSUQgPSBsb2NhdGlvbkl0ZXIubmV4dCgpOworCQkJUmVmZXJlbmNlU2NlbmFyaW9EYXRhSW5zdGFuY2UgaW5zdGFuY2UgPSBnZXRMb2NhdGlvbihsb2NhdGlvbklEKTsKKwkJCS8vIEdldCB0aGUgZGF0YS4gQWx3YXlzIGhhdmUgYXQgbGVhc3QgUyBhbmQgSQorCQkJTGlzdDxTdHJpbmc+cG9wRGF0YSA9IGluc3RhbmNlLmdldERhdGEoU3RhdGVzLnN0YXRlc1RvRml0W1N0YXRlcy5QT1BVTEFUSU9OXSk7CisJCQlpZihwb3BEYXRhID09IG51bGwpIHBvcERhdGEgPSAgaW5zdGFuY2UuZ2V0RGF0YSgiUG9wdWxhdGlvbiBDb3VudCIpOy8vJE5PTi1OTFMtMSQKKwkJCQorCQkJTGlzdDxTdHJpbmc+c0RhdGEgPSBpbnN0YW5jZS5nZXREYXRhKFN0YXRlcy5zdGF0ZXNUb0ZpdFtTdGF0ZXMuU1VTQ0VQVElCTEVdKTsKKwkJCUxpc3Q8U3RyaW5nPmVEYXRhID0gbnVsbDsKKwkJCUxpc3Q8U3RyaW5nPmlEYXRhID0gaW5zdGFuY2UuZ2V0RGF0YShTdGF0ZXMuc3RhdGVzVG9GaXRbU3RhdGVzLklORkVDVElPVVNdKTsKKwkJCUxpc3Q8U3RyaW5nPnJEYXRhID0gbnVsbDsKKwkJCUxpc3Q8U3RyaW5nPmRkRGF0YSA9IGluc3RhbmNlLmdldERhdGEoU3RhdGVzLnN0YXRlc1RvRml0W1N0YXRlcy5ESVNFQVNFX0RFQVRIU10pOworCQkJCisJCQkvLyBJZiBFIHN0YXRlCisJCQlpZihpbnN0YW5jZS5kYXRhTWFwLmdldFR5cGUoKT09IERpc2Vhc2VUeXBlLlNFSVIpICB7CisJCQkJZURhdGEgPSBpbnN0YW5jZS5nZXREYXRhKFN0YXRlcy5zdGF0ZXNUb0ZpdFtTdGF0ZXMuRVhQT1NFRF0pOworCQkJfQorCQkJLy8gSWYgaGF2ZSBSIHN0YXRlIChpLmUuLCBub3QgYW4gU0kgbW9kZWwKKwkJCWlmKGluc3RhbmNlLmRhdGFNYXAuZ2V0VHlwZSgpIT0gRGlzZWFzZVR5cGUuU0kpICB7CisJCQkJckRhdGEgPSBpbnN0YW5jZS5nZXREYXRhKFN0YXRlcy5zdGF0ZXNUb0ZpdFtTdGF0ZXMuUkVDT1ZFUkVEXSk7CisJCQl9CisJCQkKKwkJCS8vIGNoZWNrIHRoYXQgdGhyZWUgdGhpbmdzIGFyZSB0cnVlIGF0IGV2ZXJ5IHRpbWUgc3RlcC4KKwkJCS8vIDAuIEFsbCBleGlzdGluZyBsaXN0cyBoYXZlIHRoZSBzYW1lIGxlbmd0aAorCQkJLy8gMS4gTm8gZGF0YSBsYWJlbCBzaG91bGQgZXZlciBnbyBuZWdhdGl2ZQorCQkJLy8gMi4gVGhlIHN1bSBvZiB0aGUgZGlzZWFzZSBzdGF0ZXMgPSB0aGUgdG90YWwgcG9wdWxhdGlvbiBhdCB0aGF0IHRpbWUuCisJCQlpbnQgbGVuZ3RoID0gcG9wRGF0YS5zaXplKCk7CisJCQlpZigoc0RhdGEuc2l6ZSgpICE9IGxlbmd0aCl8fChpRGF0YS5zaXplKCkgIT0gbGVuZ3RoKXx8KGRkRGF0YS5zaXplKCkgIT0gbGVuZ3RoKSkgcmV0dXJuIGZhbHNlOworCQkJaWYoKGVEYXRhICE9IG51bGwpJiYoZURhdGEuc2l6ZSgpICE9IGxlbmd0aCkpIHJldHVybiBmYWxzZTsKKwkJCWlmKChyRGF0YSAhPSBudWxsKSYmKHJEYXRhLnNpemUoKSAhPSBsZW5ndGgpKSByZXR1cm4gZmFsc2U7CisJCQkKKwkJCWZvciAoaW50IHQgPSAwOyB0IDwgbGVuZ3RoOyB0ICsrKSB7CisJCQkJZG91YmxlIHN1bSA9IDAuMDsKKwkJCQlkb3VibGUgcyA9IG5ldyBEb3VibGUoc0RhdGEuZ2V0KHQpKS5kb3VibGVWYWx1ZSgpOworCQkJCWRvdWJsZSBpID0gbmV3IERvdWJsZShpRGF0YS5nZXQodCkpLmRvdWJsZVZhbHVlKCk7CisJCQkJZG91YmxlIGRkID0gbmV3IERvdWJsZShkZERhdGEuZ2V0KHQpKS5kb3VibGVWYWx1ZSgpOworCQkJCWRvdWJsZSByID0gMC4wOworCQkJCWRvdWJsZSBlID0gMC4wOworCQkJCWlmKGVEYXRhICE9IG51bGwpIGUgPSBuZXcgRG91YmxlKGVEYXRhLmdldCh0KSkuZG91YmxlVmFsdWUoKTsKKwkJCQlpZihyRGF0YSAhPSBudWxsKSByID0gbmV3IERvdWJsZShyRGF0YS5nZXQodCkpLmRvdWJsZVZhbHVlKCk7CisJCQkJaWYoKHMgPCAwKXx8KGk8MCl8fChlPDApfHwocjwwKXx8KGRkPDApKSB7CisJCQkJCVN5c3RlbS5lcnIucHJpbnRsbigiTmVnYXRpdmUgdmFsdWUgZm91bmQgYXQgdGltZSA9ICIrdCsiIHM9IitzKyIgZT0iK2UrIiBpPSIraSsiIHI9IityKyJkZD0gIitkZCk7CisJCQkJCXJldHVybiBmYWxzZTsgLy8xCisJCQkJfQorCQkJCXN1bSA9IHMrZStpK3I7CisJCQkJaWYoIWNsb3NlRW5vdWdoKHN1bSxuZXcgRG91YmxlKHBvcERhdGEuZ2V0KHQpKS5kb3VibGVWYWx1ZSgpKSkgeworCQkJCQlTeXN0ZW0uZXJyLnByaW50bG4oIlN1bSBub3QgY29ycmVjdCBhdCB0aW1lID0gIit0KyIgZGlmZmVyZW5jZSBpcyAiKyhzdW0tbmV3IERvdWJsZShwb3BEYXRhLmdldCh0KSkuZG91YmxlVmFsdWUoKSkpOwkKKwkJCQkJcmV0dXJuIGZhbHNlOyAvLyAyCisJCQkJfQorCQkJCS8vIG9yIGV4YWN0IGVxdWFsaXR5IGJ1dCB3ZSBuZWVkIHRvIGNoZWNrIGFjcm9zcyBkaWZmZXJlbnQgcHJvY2Vzc29ycworLy8JCQkJaWYoc3VtICE9IG5ldyBEb3VibGUocG9wRGF0YS5nZXQodCkpLmRvdWJsZVZhbHVlKCkpIHsKKy8vCQkJCQlBY3RpdmF0b3IubG9nSW5mb3JtYXRpb24oIlN1bSBub3QgZXhhY3RseSBjb3JyZWN0IGF0IHRpbWUgPSAiK3QrIiBkaWZmZXJlbmNlIGlzICIrKHN1bS1uZXcgRG91YmxlKHBvcERhdGEuZ2V0KHQpKS5kb3VibGVWYWx1ZSgpKSk7CisJCQkJCQorLy8JCQkJfQorCQkJfQorCQkJCisJCX0KKwkJcmV0dXJuIHRydWU7CisJfQorCQorCS8qKgorCSAqIEFyZSB0d28gdmFsdWVzIHdpdGhpbiAxcHBtID8KKwkgKiBAcGFyYW0gZGJsMQorCSAqIEBwYXJhbSBkYmwyCisJICogQHJldHVybgorCSAqLworCWJvb2xlYW4gY2xvc2VFbm91Z2goZG91YmxlIGQxLCBkb3VibGUgZDIpIHsKKwkJYm9vbGVhbiByZXRWYWwgPSB0cnVlOworCQlpZihkMSA9PSAwLjApIHJldHVybiAoTWF0aC5hYnMoZDIpIDwgUFBNKTsKKwkJaWYoZDIgPT0gMC4wKSByZXR1cm4gKE1hdGguYWJzKGQxKSA8IFBQTSk7CisJCWRvdWJsZSBkaWZmID0gKE1hdGguYWJzKDIuMCooZDEtZDIpLyhkMStkMikpKTsKKwkJaWYoZGlmZiA+IFBQTSkgcmV0VmFsID0gZmFsc2U7CisJCXJldHVybiByZXRWYWw7CisJfQorCQorCS8qKgorCSAqIElzIHRoaXMgbWFwIGNvbnNpc3RlbnQgd2l0aCBhbm90aGVyIG1hcD8KKwkgKiBUaGlzIGlzIGxpa2UgImVxdWFsIiBidXQgYWxsb3dzIGZvciBzbWFsbCBkaWZmZXJlbmNlcyB3aGVuIGNvbXBhcmluZyBkb3VibGUocykKKwkgKiBAcGFyYW0gb3RoZXIKKwkgKiBAcmV0dXJuCisJICovCisJcHVibGljIGJvb2xlYW4gY29uc2lzdGVudFdpdGgoUmVmZXJlbmNlU2NlbmFyaW9EYXRhTWFwSW1wbCBvdGhlcikgeworCQlBY3RpdmF0b3IubG9nSW5mb3JtYXRpb24oIlRPRE8gICBSZWZlcmVuY2VTY2VuYXJpb0RhdGFNYXBJbXBsLmNvbnNpc3RlbnRXaXRoKFJlZmVyZW5jZVNjZW5hcmlvRGF0YU1hcCBvdGhlcikgbXVzdCBiZSBmdWxseSBpbXBsZW1lbnRlZCAhISEiKTsvLyROT04tTkxTLTEkCisJCQorCQkvLyBNYWtlIHN1cmUgdGhhdCBib3RoIG1hcHMgY29udGFpbiB0aGUgc2FtZSBsb2NhdGlvbnMKKwkJaWYoZ2V0TG9jYXRpb25zKCkuc2l6ZSgpICE9ICBvdGhlci5nZXRMb2NhdGlvbnMoKS5zaXplKCkpCisJCXsKKwkJCUFjdGl2YXRvci5sb2dJbmZvcm1hdGlvbigiRXJyb3IgbWlzbWF0Y2hlZCBudW1iZXIgb2YgbG9jYXRpb25zIGluIGxvZyBmaWxlcyBmb3IgIitvdGhlci5nZXRSZWZlcmVuY2VEaXJlY3RvcnkoKSsiIHZzICIrZ2V0UmVmZXJlbmNlRGlyZWN0b3J5KCkpOworCQkJcmV0dXJuIGZhbHNlOworCQl9CisJCWZvcihTdHJpbmcgbG9jOmdldExvY2F0aW9ucygpKQorCQkJaWYob3RoZXIuZ2V0TG9jYXRpb24obG9jKSA9PSBudWxsKSB7CisJCQkJQWN0aXZhdG9yLmxvZ0luZm9ybWF0aW9uKCJMb2NhdGlvbiBtaXNzaW5nIGluIGRhdGEgbWFwICIrb3RoZXIuZ2V0UmVmZXJlbmNlRGlyZWN0b3J5KCkpOworCQkJCXJldHVybiBmYWxzZTsKKwkJCX0KKwkJCisJCS8vIE5vdyBjaGVjayBlYWNoIGxvY2F0aW9uIGFuZCBlYWNoIHN0YXRlCisJCWZvcihTdHJpbmcgbG9jOmdldExvY2F0aW9ucygpKSB7CisJCQlSZWZlcmVuY2VTY2VuYXJpb0RhdGFJbnN0YW5jZSBvdGhlckluc3QgPSBvdGhlci5nZXRMb2NhdGlvbihsb2MpOworCQkJUmVmZXJlbmNlU2NlbmFyaW9EYXRhSW5zdGFuY2UgdGhpc0luc3QgPSBnZXRMb2NhdGlvbihsb2MpOworCQkJCisJCQlmb3IoU3RyaW5nIHN0YXRlOnRoaXNJbnN0LmdldEluc3RhbmNlKCkua2V5U2V0KCkpIHsKKwkJCQlMaXN0PFN0cmluZz50aGlzRGF0YSA9IHRoaXNJbnN0LmdldEluc3RhbmNlKCkuZ2V0KHN0YXRlKTsKKwkJCQlMaXN0PFN0cmluZz5vdGhlckRhdGEgPSBvdGhlckluc3QuZ2V0SW5zdGFuY2UoKS5nZXQoc3RhdGUpOworCQkJCWlmKHRoaXNEYXRhLnNpemUoKSAhPSBvdGhlckRhdGEuc2l6ZSgpKSB7CisJCQkJCVN5c3RlbS5lcnIucHJpbnRsbigiRXJyb3IgdGhlIGxpc3Qgb2YgZGF0YSB2YWx1ZXMgZG9lcyBub3QgaGF2ZSB0aGUgc2FtZSBsZW5ndGggZm9yIGxvY2F0aW9uICIrbG9jKyIgZm9sZGVyICIrZ2V0UmVmZXJlbmNlRGlyZWN0b3J5KCkpOworCQkJCQlyZXR1cm4gZmFsc2U7CisJCQkJfQorCQkJCQorCQkJCWZvcihpbnQgaT0wO2k8dGhpc0RhdGEuc2l6ZSgpOysraSkgeworCQkJCQlkb3VibGUgdGhpc0QgPSBEb3VibGUucGFyc2VEb3VibGUodGhpc0RhdGEuZ2V0KGkpKTsKKwkJCQkJZG91YmxlIG90aGVyRCA9IERvdWJsZS5wYXJzZURvdWJsZShvdGhlckRhdGEuZ2V0KGkpKTsKKwkJCQkJCisJCQkJCWlmKCFjbG9zZUVub3VnaCh0aGlzRCwgb3RoZXJEKSkgeworCQkJCQkJU3lzdGVtLmVyci5wcmludGxuKCJFcnJvciBtaXNtYXRjaGVkIHJlc3VsdCBmb3Igc3RhdGUgIitzdGF0ZSsiIGxvY2F0aW9uICIrbG9jKyIgIit0aGlzRCsiIG5vdCBzYW1lIGFzICIrb3RoZXJEKyIgdGltZXN0ZXAgIitpKyIgZm9sZGVyICIrZ2V0UmVmZXJlbmNlRGlyZWN0b3J5KCkrIiB2cyAiK290aGVyLmdldFJlZmVyZW5jZURpcmVjdG9yeSgpKTsKKwkJCQkJCXJldHVybiBmYWxzZTsKKwkJCQkJfQorCQkJCX0KKwkJCQkJCisJCQl9CisJCX0KKwkJCQorCQlyZXR1cm4gdHJ1ZTsKKwl9CisJCisKK30gLy9SZWZlcmVuY2VTY2VuYXJpb0RhdGFNYXBJbXBsCmRpZmYgLS1naXQgYS9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2FuYWx5c2lzL2ltcGwvU2ltcGxlRXJyb3JGdW5jdGlvbkltcGwuamF2YSBiL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vYW5hbHlzaXMvaW1wbC9TaW1wbGVFcnJvckZ1bmN0aW9uSW1wbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRiZTkxMWQKLS0tIC9kZXYvbnVsbAorKysgYi9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2FuYWx5c2lzL2ltcGwvU2ltcGxlRXJyb3JGdW5jdGlvbkltcGwuamF2YQpAQCAtMCwwICsxLDMzNSBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmltcGw7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDkgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7CitpbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOworaW1wb3J0IGphdmEudXRpbC5MaXN0OworaW1wb3J0IGphdmEudXRpbC5NYXA7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuQmFzaWNFTGlzdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuRUxpc3Q7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzczsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLkFuYWx5c2lzRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLkFuYWx5c2lzUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLkVycm9yUmVzdWx0OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuUmVmZXJlbmNlU2NlbmFyaW9EYXRhTWFwOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuU2ltcGxlRXJyb3JGdW5jdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmltcGwuUmVmZXJlbmNlU2NlbmFyaW9EYXRhTWFwSW1wbC5SZWZlcmVuY2VTY2VuYXJpb0RhdGFJbnN0YW5jZTsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPlNpbXBsZSBFcnJvciBGdW5jdGlvbjwvYj48L2VtPicuCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIDxwPgorICogPC9wPgorICoKKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIFNpbXBsZUVycm9yRnVuY3Rpb25JbXBsIGV4dGVuZHMgRXJyb3JGdW5jdGlvbkltcGwgaW1wbGVtZW50cyBTaW1wbGVFcnJvckZ1bmN0aW9uIHsKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJcHVibGljIFNpbXBsZUVycm9yRnVuY3Rpb25JbXBsKCkgeworCQlzdXBlcigpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCBFQ2xhc3MgZVN0YXRpY0NsYXNzKCkgeworCQlyZXR1cm4gQW5hbHlzaXNQYWNrYWdlLkxpdGVyYWxzLlNJTVBMRV9FUlJPUl9GVU5DVElPTjsKKwl9CisKKwkvKioKKwkgKiBpbnB1dAorCSAqLworCU1hcDxTdHJpbmcsTGlzdDxEb3VibGU+PiBjb21tb25JbmZlY3Rpb3VzTG9jYXRpb25zQSA9IG5ldyBIYXNoTWFwPFN0cmluZyxMaXN0PERvdWJsZT4+KCk7CisJTWFwPFN0cmluZyxMaXN0PERvdWJsZT4+IGNvbW1vbkluZmVjdGlvdXNMb2NhdGlvbnNCID0gbmV3IEhhc2hNYXA8U3RyaW5nLExpc3Q8RG91YmxlPj4oKTsKKwlNYXA8U3RyaW5nLExpc3Q8RG91YmxlPj4gY29tbW9uUG9wdWxhdGlvbkxvY2F0aW9uc0EgPSBuZXcgSGFzaE1hcDxTdHJpbmcsTGlzdDxEb3VibGU+PigpOworCU1hcDxTdHJpbmcsTGlzdDxEb3VibGU+PiBjb21tb25Qb3B1bGF0aW9uTG9jYXRpb25zQiA9IG5ldyBIYXNoTWFwPFN0cmluZyxMaXN0PERvdWJsZT4+KCk7CisKKwlNYXA8U3RyaW5nLERvdWJsZT4gY29tbW9uQXZnUG9wdWxhdGlvbkxvY2F0aW9uc0EgPSBuZXcgSGFzaE1hcDxTdHJpbmcsRG91YmxlPigpOworCU1hcDxTdHJpbmcsRG91YmxlPiBjb21tb25BdmdQb3B1bGF0aW9uTG9jYXRpb25zQiA9IG5ldyBIYXNoTWFwPFN0cmluZyxEb3VibGU+KCk7CisJTWFwPFN0cmluZywgRG91YmxlPiBjb21tb25NYXhMb2NhdGlvbnNBID0gbmV3IEhhc2hNYXA8U3RyaW5nLCBEb3VibGU+KCk7CisJCisJLyoqCisJICogbnVtYmVyIGNvbW1vbiBsb2NhdGlvbnMgd2l0aCBub256ZXJvIEluZiBjb3VudCBhdCB0aW1lIHQKKwkgKi8KKwlwdWJsaWMgZG91YmxlW10gbG9jYXRpb25Db3VudDsKKwkvKioKKwkgKiBUaGUgUmVzdWx0CisJICovCisJcHVibGljIGRvdWJsZVtdIG1lYW5TcURpZmY7CisJLyoKKwkgKiB0aW1lCisJICovCisJcHVibGljIGRvdWJsZVtdIHRpbWU7CisJCisJcHJvdGVjdGVkIEFuYWx5c2lzRmFjdG9yeSBhRmFjdG9yeSA9IG5ldyBBbmFseXNpc0ZhY3RvcnlJbXBsKCk7CisKKwkvLyBTZXQgdG8gdHJ1ZSB0byB3ZWlnaHQgdGhlIGF2ZXJhZ2UgYnkgcG9wdWxhdGlvbiBzaXplCisJcHJpdmF0ZSBzdGF0aWMgYm9vbGVhbiBBR0dSRUdBVEVfTlJNU0UgPSB0cnVlOyAvLyBUcnVlIGlmIGFnZ3JlZ2F0ZSBzaWduYWwgZm9yIGxvY2F0aW9ucyBmaXJzdCwgdGhlbiBjYWxjdWxhdGUgTlJNU0UuIEZhbHNlIGlmIHVzZSBOUk1TRSBwZXIgbG9jYXRpb24gdGhlbiBhdmVyYWdlLgorCXByaXZhdGUgc3RhdGljIGJvb2xlYW4gV0VJR0hURURfQVZFUkFHRSA9IHRydWU7IC8vIE9ubHkgdXNlZCBpZiBBR0dSRUdBVEVfTlJNU0UgPSBmYWxzZTsKKwlwcml2YXRlIHN0YXRpYyBib29sZWFuIEZJVF9JTkNJREVOQ0UgPSB0cnVlOworCXByaXZhdGUgc3RhdGljIGJvb2xlYW4gVVNFX1RIUkVTSE9MRCA9IGZhbHNlOworCXByaXZhdGUgc3RhdGljIGRvdWJsZSBUSFJFU0hPTEQgPSAwLjA1OworCQorCS8vIFRoZSB5ZWFyIHRvIHVzZSB0byB2YWxpZGF0ZSBhbmQgaGVuY2UgZXhjbHVkZSBmcm9tIHRoZSBlcnJvciBjYWxjdWxhdGlvbihmb3IgY3Jvc3MtdmFsaWRhdGlvbiBtZXRob2RzKQorCS8vIFRoZSBmaXJzdCB5ZWFyIGlzIHllYXIgMC4gSWYgbm8geWVhciBzaG91bGQgYmUgZXhjbHVkZWQsIHNldCB0byAtMQorCQorCWludCB2YWxpZGF0aW9uWWVhciA9IC0xOworCQorCQorCS8qKgorCSAqIGNhbGN1bGF0ZSBkZWx0YSBmb3IgYSBzaW1wbGUgZXJyb3IgZnVuY3Rpb24KKwkgKiAKKwkgKiAKKwkgKiBAb3ZlcnJpZGUKKwkgKi8KKwkKKwlAT3ZlcnJpZGUKKwlwdWJsaWMgRXJyb3JSZXN1bHQgY2FsY3VsYXRlRXJyb3IoUmVmZXJlbmNlU2NlbmFyaW9EYXRhTWFwIHJlZmVyZW5jZSwgUmVmZXJlbmNlU2NlbmFyaW9EYXRhTWFwIGRhdGEpIHsKKwkJZmluYWwgUmVmZXJlbmNlU2NlbmFyaW9EYXRhTWFwSW1wbCBfcmVmID0gKFJlZmVyZW5jZVNjZW5hcmlvRGF0YU1hcEltcGwpcmVmZXJlbmNlOworCQlmaW5hbCBSZWZlcmVuY2VTY2VuYXJpb0RhdGFNYXBJbXBsIF9kYXRhID0gKFJlZmVyZW5jZVNjZW5hcmlvRGF0YU1hcEltcGwpZGF0YTsKKworCQkvLyBjbGVhcgorCQl0aW1lID0gbnVsbDsKKwkJCisJCUl0ZXJhdG9yPFN0cmluZz4gaXRlcmF0b3JBID0gX3JlZi5nZXRMb2NhdGlvbnMoKS5pdGVyYXRvcigpOworCQlpbnQgbWF4VGltZSA9IC0xOworCQl3aGlsZShpdGVyYXRvckEuaGFzTmV4dCgpKSB7CisJCQlTdHJpbmcgaWQgPSBpdGVyYXRvckEubmV4dCgpOworCQkJCQkKKwkJCWlmKF9kYXRhLmNvbnRhaW5zTG9jYXRpb24oaWQpKSB7CisJCQkJLy8gZ2V0IHRoZSBsaXN0cyBvZiBkYXRhIG9ubHkgZm9yIHRob3NlIGxvY2F0aW9ucyB0aGF0IGFyZSBjb21tb24gdG8gYm90aCBtYXBzCQkJCQkJUmVmZXJlbmNlU2NlbmFyaW9EYXRhSW5zdGFuY2UgZGF0YU1hcEEgPSBtYXBBLmdldExvY2F0aW9uKGlkKTsKKwkJCQlSZWZlcmVuY2VTY2VuYXJpb0RhdGFJbnN0YW5jZSBkYXRhTWFwQSA9IF9yZWYuZ2V0TG9jYXRpb24oaWQpOworCQkJCUxpc3Q8RG91YmxlPiBkYXRhQUkgPSBudWxsOworCQkJCWlmKEZJVF9JTkNJREVOQ0UpIGRhdGFBSSA9IGdldEluY2lkZW5jZShkYXRhTWFwQSk7IAorCQkJCWVsc2UgZGF0YUFJID0gZ2V0SW5mZWN0aW91cyhkYXRhTWFwQSk7CisJCQkJTGlzdDxEb3VibGU+IGRhdGFBUCA9IGdldFBvcHVsYXRpb24oZGF0YU1hcEEpOworCQkJCWNvbW1vbkluZmVjdGlvdXNMb2NhdGlvbnNBLnB1dChpZCxkYXRhQUkpOworCQkJCWNvbW1vblBvcHVsYXRpb25Mb2NhdGlvbnNBLnB1dChpZCwgZGF0YUFQKTsJCQkJCQkJCisJCQkJCQkJCisJCQkJLy8gTWFwIEIKKwkJCQlSZWZlcmVuY2VTY2VuYXJpb0RhdGFJbnN0YW5jZSBkYXRhTWFwQiA9IF9kYXRhLmdldExvY2F0aW9uKGlkKTsKKwkJCQlMaXN0PERvdWJsZT4gZGF0YUJJID0gbnVsbDsKKwkJCQlpZihGSVRfSU5DSURFTkNFKSBkYXRhQkkgPSBnZXRJbmNpZGVuY2UoZGF0YU1hcEIpOyAKKwkJCQllbHNlIGRhdGFCSSA9IGdldEluZmVjdGlvdXMoZGF0YU1hcEIpOworCQkJCUxpc3Q8RG91YmxlPiBkYXRhQlAgPSBnZXRQb3B1bGF0aW9uKGRhdGFNYXBCKTsKKwkJCQljb21tb25JbmZlY3Rpb3VzTG9jYXRpb25zQi5wdXQoaWQsZGF0YUJJKTsKKwkJCQljb21tb25Qb3B1bGF0aW9uTG9jYXRpb25zQi5wdXQoaWQsIGRhdGFCUCk7CisJCQkJCisJCQkJLy8gaW5pdCB0aGUgYXJyYXkgc2l6ZQorCQkJCWlmIChtYXhUaW1lID09IC0xKSBtYXhUaW1lID0gZGF0YUFJLnNpemUoKTsKKwkJCQkJCQorCQkJCS8vIGRpbWVuc2lvbiB0aGUgYXJyYXlzIHRvIHRoZSBsZW5ndGggb2YgdGhlIFNNQUxMRVNUIGFycmF5IGZvciB3aGljaCB3ZSBoYXZlIGRhdGEKKwkJCQlpZihtYXhUaW1lID49IGRhdGFCSS5zaXplKCkgKSBtYXhUaW1lID0gZGF0YUJJLnNpemUoKTsKKwkJCQlpZihtYXhUaW1lID49IGRhdGFBSS5zaXplKCkgKSBtYXhUaW1lID0gZGF0YUFJLnNpemUoKTsKKwkJCX0vLyBpZgorCQl9Ly8gd2hpbGUKKwkJaWYobWF4VGltZTw9MCkgbWF4VGltZSA9IDA7CisJCWlmKHRpbWU9PW51bGwpIHsKKwkJCXRpbWUgPSBuZXcgZG91YmxlW21heFRpbWVdOworCQkJbWVhblNxRGlmZiA9IG5ldyBkb3VibGVbbWF4VGltZV07CisJCQlsb2NhdGlvbkNvdW50ID0gbmV3IGRvdWJsZVttYXhUaW1lXTsKKwkJCWZvcihpbnQgaSA9IDA7IGkgPCBtYXhUaW1lOyBpICsrKSB7CisJCQkJdGltZVtpXSA9IGk7CisJCQkJbWVhblNxRGlmZltpXSA9IDAuMDsKKwkJCQlsb2NhdGlvbkNvdW50W2ldID0gMC4wOworCQkJfQorCQl9CisJCQorCQkvLyBOb3cgZmlndXJlIG91dCB0aGUgYWN0dWFsIGVycm9yCisJCQorCQlkb3VibGUgW10gWHJlZiA9IG5ldyBkb3VibGVbdGltZS5sZW5ndGhdOworCQlkb3VibGUgW10gWGRhdGEgPSBuZXcgZG91YmxlW3RpbWUubGVuZ3RoXTsKKwkJCisJCWRvdWJsZSBmaW5hbGVycm9yID0gMC4wOworCSAgICBkb3VibGUgdmVycm9yID0gMC4wOworCQkKKwkJQmFzaWNFTGlzdDxEb3VibGU+IGxpc3QgPSBuZXcgQmFzaWNFTGlzdDxEb3VibGU+KCk7CisJCWZvcihpbnQgaT0wO2k8dGltZS5sZW5ndGg7KytpKWxpc3QuYWRkKDAuMCk7CisJCQorCQkvLyBHZXQgdGhlIGF2ZXJhZ2UgcG9wdWxhdGlvbiBmb3IgZWFjaCBsb2NhdGlvbgorCQlmb3IoU3RyaW5nIGxvYzpjb21tb25Qb3B1bGF0aW9uTG9jYXRpb25zQS5rZXlTZXQoKSkgeworCQkJTGlzdDxEb3VibGU+bGQgPSBjb21tb25Qb3B1bGF0aW9uTG9jYXRpb25zQS5nZXQobG9jKTsKKwkJCWRvdWJsZSBzdW0gPSAwO2Zvcihkb3VibGUgZDpsZClzdW0rPWQ7CisJCQlzdW0gLz0gKGRvdWJsZSlsZC5zaXplKCk7CisJCQljb21tb25BdmdQb3B1bGF0aW9uTG9jYXRpb25zQS5wdXQobG9jLCBzdW0pOworCQl9CQkKKworCQkvLyBHZXQgdGhlIGF2ZXJhZ2UgcG9wdWxhdGlvbiBmb3IgZWFjaCBsb2NhdGlvbgorCQlmb3IoU3RyaW5nIGxvYzpjb21tb25Qb3B1bGF0aW9uTG9jYXRpb25zQi5rZXlTZXQoKSkgeworCQkJTGlzdDxEb3VibGU+bGQgPSBjb21tb25Qb3B1bGF0aW9uTG9jYXRpb25zQi5nZXQobG9jKTsKKwkJCWRvdWJsZSBzdW0gPSAwO2Zvcihkb3VibGUgZDpsZClzdW0rPWQ7CisJCQlzdW0gLz0gKGRvdWJsZSlsZC5zaXplKCk7CisJCQljb21tb25BdmdQb3B1bGF0aW9uTG9jYXRpb25zQi5wdXQobG9jLCBzdW0pOworCQl9CQkKKworCQkvLyBHZXQgdGhlIG1heGltdW0gdmFsdWUgZm9yIHRoZSBBIHNlcmllcyAocmVmZXJlbmNlKQorCQlmb3IoU3RyaW5nIGxvYzpjb21tb25Qb3B1bGF0aW9uTG9jYXRpb25zQS5rZXlTZXQoKSkgeworCQkJTGlzdDxEb3VibGU+bGQgPSBjb21tb25JbmZlY3Rpb3VzTG9jYXRpb25zQS5nZXQobG9jKTsKKwkJCWRvdWJsZSBtYXggPSBEb3VibGUuTUlOX1ZBTFVFOworCQkJZm9yKGRvdWJsZSBkOmxkKWlmKGQgPm1heCltYXg9ZDsKKwkJCWNvbW1vbk1heExvY2F0aW9uc0EucHV0KGxvYywgbWF4KTsKKwkJfQorCQkKKwkJLy8gQ2FsY3VsYXRlIHRoZSBub3JtYWxpemVkIHJvb3QgbWVhbiBzcXVhcmUgZXJyb3IgZm9yIGVhY2ggbG9jYXRpb24sIHRoZW4KKwkJLy8gZGl2aWRlIGJ5IHRoZSBudW1iZXIgb2YgbG9jYXRpbnMKKwkJCisJCWRvdWJsZSB3ZWlnaHRlZF9kZW5vbSA9IDAuMDsKKwkJCisJCWlmKCFBR0dSRUdBVEVfTlJNU0UpIHsgLy8gVXNlIE5STVNFIHBlciBsb2NhdGlvbiBmaXJzdAorCQkJZm9yKFN0cmluZyBsb2M6Y29tbW9uSW5mZWN0aW91c0xvY2F0aW9uc0Eua2V5U2V0KCkpIHsKKwkJCQlkb3VibGUgbWF4UmVmID0gMC4wOworCQkJCWRvdWJsZSBtaW5SZWYgPSBEb3VibGUuTUFYX1ZBTFVFOworCQkJCS8vIEdldCB0aGUgbnVtYmVycyBhdCBlYWNoIHRpbWUgc3RlcCBmb3IgdGhlIGxvY2F0aW9uCisJCQkJZm9yKGludCBpY291bnQgPTA7IGljb3VudCA8IHRpbWUubGVuZ3RoOyBpY291bnQgKyspIHsKKwkJCQkJTGlzdDxEb3VibGU+IGRhdGFBSSA9IGNvbW1vbkluZmVjdGlvdXNMb2NhdGlvbnNBLmdldChsb2MpOworCQkJCQlMaXN0PERvdWJsZT4gZGF0YUJJID0gY29tbW9uSW5mZWN0aW91c0xvY2F0aW9uc0IuZ2V0KGxvYyk7CisJCQkJCQkJCQkJCQkJCisJCQkJCWRvdWJsZSBpQSA9IGRhdGFBSS5nZXQoaWNvdW50KS5kb3VibGVWYWx1ZSgpOworCQkJCQlkb3VibGUgaUIgPSBkYXRhQkkuZ2V0KGljb3VudCkuZG91YmxlVmFsdWUoKTsKKwkJCQkKKwkJCQkJWHJlZltpY291bnRdPWlBOworCQkJCQlYZGF0YVtpY291bnRdPWlCOworCQkJCX0KKwkJCQorCQkJCWRvdWJsZSBub21pbmF0b3IgPSAwLjA7IAorCQkJCWRvdWJsZSB0aW1lc3RlcHMgPSAwOworCQkJCWZvcihpbnQgaWNvdW50ID0wOyBpY291bnQgPCB0aW1lLmxlbmd0aDsgaWNvdW50ICsrKSB7CisJCQkJCWlmKFhyZWZbaWNvdW50XT5tYXhSZWYpbWF4UmVmID0gWHJlZltpY291bnRdOworCQkJCQlpZihYcmVmW2ljb3VudF08bWluUmVmKW1pblJlZiA9IFhyZWZbaWNvdW50XTsKKwkJCQkJCisJCQkJCS8vIElmIHdlIHVzZSB0aGUgdGhyZXNob2xkIGFuZCBib3RoIHRoZSByZWZlcmVuY2UgYW5kIHRoZSBtb2RlbCBpcyBsZXNzIHRoYW4KKwkJCQkJLy8gdGhlIFRIUkVTSE9MRCpNQVhyZWYobG9jKSB3ZSBkb24ndCBtZWFzdXJlIHRoZSBkYXRhIHBvaW50CisJCQkJCQorCQkJCQlpZihVU0VfVEhSRVNIT0xEICYmIChYcmVmW2ljb3VudF08PVRIUkVTSE9MRCpjb21tb25NYXhMb2NhdGlvbnNBLmdldChsb2MpICYmCisJCQkJCQkJWGRhdGFbaWNvdW50XTw9VEhSRVNIT0xEKmNvbW1vbk1heExvY2F0aW9uc0EuZ2V0KGxvYykpKSBjb250aW51ZTsKKwkJCQkJCisJCQkJCW5vbWluYXRvciA9IG5vbWluYXRvciArIE1hdGgucG93KFhyZWZbaWNvdW50XS1YZGF0YVtpY291bnRdLCAyKTsKKwkJCQkJbGlzdC5zZXQoaWNvdW50LCBsaXN0LmdldChpY291bnQpK01hdGguYWJzKFhyZWZbaWNvdW50XS1YZGF0YVtpY291bnRdKSk7CisJCQkJCSsrdGltZXN0ZXBzOworCQkJCX0KKwkJCQlkb3VibGUgZXJyb3IgPSBEb3VibGUuTUFYX1ZBTFVFOworCQkJICAgIGlmKHRpbWVzdGVwcyA+IDAgJiYgbWF4UmVmLW1pblJlZiA+IDAuMCkgeworCQkJICAgIAllcnJvciA9IE1hdGguc3FydChub21pbmF0b3IvdGltZXN0ZXBzKTsKKwkJCSAgICAJZXJyb3IgPSBlcnJvciAvIChtYXhSZWYtbWluUmVmKTsKKwkJCSAgICAJaWYoV0VJR0hURURfQVZFUkFHRSkgZmluYWxlcnJvciArPSBjb21tb25BdmdQb3B1bGF0aW9uTG9jYXRpb25zQS5nZXQobG9jKSAqIGVycm9yOworCQkJICAgIAllbHNlIGZpbmFsZXJyb3IgKz0gZXJyb3I7CisJCQkgICAgCWlmKFdFSUdIVEVEX0FWRVJBR0UpIHdlaWdodGVkX2Rlbm9tICs9IGNvbW1vbkF2Z1BvcHVsYXRpb25Mb2NhdGlvbnNBLmdldChsb2MpOworCQkJICAgIAllbHNlIHdlaWdodGVkX2Rlbm9tICs9IDEuMDsKKwkJCSAgICB9CisJCQkKKwkJCX0KKwkJCisJCQkvLyBEaXZpZGUgdGhlIGVycm9yIGJ5IHRoZSBudW1iZXIgb2YgbG9jYXRpb25zCisJCQlmaW5hbGVycm9yIC89IHdlaWdodGVkX2Rlbm9tOyAKKwkJfSBlbHNlIHsgLy8gQWdncmVnYXRlIHNpZ25hbCwgdGhlbiBjYWxjdWxhdGUgTlJNU0UgCisJCQlmb3IoaW50IGljb3VudCA9MDsgaWNvdW50IDwgdGltZS5sZW5ndGg7IGljb3VudCArKykgeworCQkJCWZvcihTdHJpbmcgbG9jOmNvbW1vbkluZmVjdGlvdXNMb2NhdGlvbnNBLmtleVNldCgpKSB7CisJCQkJCUxpc3Q8RG91YmxlPiBkYXRhQUkgPSBjb21tb25JbmZlY3Rpb3VzTG9jYXRpb25zQS5nZXQobG9jKTsKKwkJCQkJTGlzdDxEb3VibGU+IGRhdGFCSSA9IGNvbW1vbkluZmVjdGlvdXNMb2NhdGlvbnNCLmdldChsb2MpOworCQkJCQkJCQkJCQkJCQorCQkJCQlkb3VibGUgaUEgPSBkYXRhQUkuZ2V0KGljb3VudCkuZG91YmxlVmFsdWUoKTsKKwkJCQkJZG91YmxlIGlCID0gZGF0YUJJLmdldChpY291bnQpLmRvdWJsZVZhbHVlKCk7CisJCQkJCisJCQkJCVhyZWZbaWNvdW50XSs9aUE7CisJCQkJCVhkYXRhW2ljb3VudF0rPWlCOworCQkJCX0KKwkJCX0KKwkJCQorCQkJZG91YmxlIG1heFJlZiA9IERvdWJsZS5NSU5fVkFMVUU7CisJCQlkb3VibGUgbWluUmVmID0gRG91YmxlLk1BWF9WQUxVRTsKKwkJCWRvdWJsZSBtYXhWYWxpZGF0aW9uUmVmID0gRG91YmxlLk1JTl9WQUxVRTsKKwkJCWRvdWJsZSBtaW5WYWxpZGF0aW9uUmVmID0gRG91YmxlLk1BWF9WQUxVRTsKKwkJCQorCQkJZm9yKGludCBpY291bnQgPTA7IGljb3VudCA8IHRpbWUubGVuZ3RoOyBpY291bnQgKyspIHsKKwkJCQlpZihpY291bnQgPj0gdmFsaWRhdGlvblllYXIqMzY1LjI1ICYmIGljb3VudCA8PSAodmFsaWRhdGlvblllYXIrMSkqMzY1LjI1KSB7CisJCQkJCWlmKFhyZWZbaWNvdW50XT5tYXhWYWxpZGF0aW9uUmVmKW1heFZhbGlkYXRpb25SZWYgPSBYcmVmW2ljb3VudF07CisJCQkJCWlmKFhyZWZbaWNvdW50XTxtaW5WYWxpZGF0aW9uUmVmKW1pblZhbGlkYXRpb25SZWYgPSBYcmVmW2ljb3VudF07CisJCQkJCWNvbnRpbnVlOworCQkJCX0KKwkJCQlpZihYcmVmW2ljb3VudF0+bWF4UmVmKW1heFJlZiA9IFhyZWZbaWNvdW50XTsKKwkJCQlpZihYcmVmW2ljb3VudF08bWluUmVmKW1pblJlZiA9IFhyZWZbaWNvdW50XTsKKwkJCX0KKwkJCWRvdWJsZSBub21pbmF0b3IgPSAwLjAsIHZub21pbmF0b3IgPSAwLjA7CisJCQlkb3VibGUgdGltZXN0ZXBzID0gMC4wLCB2dGltZXN0ZXBzID0gMC4wOworCQkJZm9yKGludCBpY291bnQgPTA7IGljb3VudCA8IHRpbWUubGVuZ3RoOyBpY291bnQgKyspIHsKKwkJCQkKKwkJCQkvLyBDYWxjdWxhdGUgdmFsaWRhdGlvbiBlcnJvciB0aGVuIHNraXAKKwkJCQlpZihpY291bnQgPj0gdmFsaWRhdGlvblllYXIqMzY1LjI1ICYmIGljb3VudCA8PSAodmFsaWRhdGlvblllYXIrMSkqMzY1LjI1KSB7CisJCQkJCWlmKFVTRV9USFJFU0hPTEQgJiYgKFhyZWZbaWNvdW50XTw9VEhSRVNIT0xEKm1heFZhbGlkYXRpb25SZWYgJiYKKwkJCQkJCQlYZGF0YVtpY291bnRdPD1USFJFU0hPTEQqbWF4VmFsaWRhdGlvblJlZikpIGNvbnRpbnVlOworCQkJCQkKKwkJCQkJdm5vbWluYXRvciA9IHZub21pbmF0b3IgKyBNYXRoLnBvdyhYcmVmW2ljb3VudF0tWGRhdGFbaWNvdW50XSwgMik7CisJCQkJCWxpc3Quc2V0KGljb3VudCwgbmV3IERvdWJsZSgwKSk7IC8vIFNldCB0byAwIGZvciB2YWxpZGF0aW9uIGRhdGEgcG9pbnRzCisJCQkJCSsrdnRpbWVzdGVwczsKKwkJCQkJY29udGludWU7CisJCQkJfQorCQkJCS8vIElmIHdlIHVzZSB0aGUgdGhyZXNob2xkIGFuZCBib3RoIHRoZSByZWZlcmVuY2UgYW5kIHRoZSBtb2RlbCBpcyBsZXNzIHRoYW4KKwkJCQkvLyB0aGUgVEhSRVNIT0xEKk1BWHJlZihsb2MpIHdlIGRvbid0IG1lYXN1cmUgdGhlIGRhdGEgcG9pbnQKKwkJCQkKKwkJCQlpZihVU0VfVEhSRVNIT0xEICYmIChYcmVmW2ljb3VudF08PVRIUkVTSE9MRCptYXhSZWYgJiYKKwkJCQkJCVhkYXRhW2ljb3VudF08PVRIUkVTSE9MRCptYXhSZWYpKSBjb250aW51ZTsKKwkJCQkKKwkJCQlub21pbmF0b3IgPSBub21pbmF0b3IgKyBNYXRoLnBvdyhYcmVmW2ljb3VudF0tWGRhdGFbaWNvdW50XSwgMik7CisJCQkJbGlzdC5zZXQoaWNvdW50LCBNYXRoLmFicyhYcmVmW2ljb3VudF0tWGRhdGFbaWNvdW50XSkpOworCQkJCSsrdGltZXN0ZXBzOworCQkJfQorCQkJCisJCQlkb3VibGUgZXJyb3IgPSBEb3VibGUuTUFYX1ZBTFVFOworCQkgICAgaWYodGltZXN0ZXBzID4gMCAmJiBtYXhSZWYtbWluUmVmID4gMC4wKSB7CisJCSAgICAJZXJyb3IgPSBNYXRoLnNxcnQobm9taW5hdG9yL3RpbWVzdGVwcyk7CisJCSAgICAJZmluYWxlcnJvciA9IGVycm9yIC8gKG1heFJlZi1taW5SZWYpOworCQkgICAgfQorCQkgICAgLy8gVmFsaWRhdGlvbgorCQkgICAgZXJyb3IgPSBEb3VibGUuTUFYX1ZBTFVFOworCQkgICAgaWYodnRpbWVzdGVwcyA+IDAgJiYgbWF4VmFsaWRhdGlvblJlZi1taW5WYWxpZGF0aW9uUmVmID4gMC4wKSB7CisJCSAgICAJZXJyb3IgPSBNYXRoLnNxcnQodm5vbWluYXRvci92dGltZXN0ZXBzKTsKKwkJICAgIAl2ZXJyb3IgPSBlcnJvciAvIChtYXhWYWxpZGF0aW9uUmVmLW1pblZhbGlkYXRpb25SZWYpOworCQkgICAgfQorCQl9IC8vIGVsc2UKKwkJRXJyb3JSZXN1bHQgcmVzdWx0b2JqID0gYUZhY3RvcnkuY3JlYXRlRXJyb3JSZXN1bHQoKTsKKwkJcmVzdWx0b2JqLnNldEVycm9yQnlUaW1lU3RlcChsaXN0KTsKKwkJcmVzdWx0b2JqLnNldEVycm9yKGZpbmFsZXJyb3IpOworCQlyZXN1bHRvYmouc2V0VmFsaWRhdGlvbkVycm9yKHZlcnJvcik7CisJCQorCQlFTGlzdDxEb3VibGU+cmVmQnlUaW1lID0gbmV3IEJhc2ljRUxpc3Q8RG91YmxlPigpOworCQlFTGlzdDxEb3VibGU+ZGF0YUJ5VGltZSA9IG5ldyBCYXNpY0VMaXN0PERvdWJsZT4oKTsKKwkJCisJCS8vIFNldCB0aGUgcmVmZXJlbmNlIGFuZCBtb2RlbCBieSB0aW1lCisJCWZvcihpbnQgaWNvdW50PTA7aWNvdW50PHRpbWUubGVuZ3RoOysraWNvdW50KSB7CisJCQlyZWZCeVRpbWUuYWRkKDAuMCk7ZGF0YUJ5VGltZS5hZGQoMC4wKTt9CisJCWZvcihTdHJpbmcgbG9jOmNvbW1vbkluZmVjdGlvdXNMb2NhdGlvbnNBLmtleVNldCgpKSB7CisJCSAJZm9yKGludCBpY291bnQgPTA7IGljb3VudCA8IHRpbWUubGVuZ3RoOyBpY291bnQgKyspIHsKKwkJCQlMaXN0PERvdWJsZT4gZGF0YUFJID0gY29tbW9uSW5mZWN0aW91c0xvY2F0aW9uc0EuZ2V0KGxvYyk7CisJCQkJTGlzdDxEb3VibGU+IGRhdGFCSSA9IGNvbW1vbkluZmVjdGlvdXNMb2NhdGlvbnNCLmdldChsb2MpOworCQkJCQkJCQkJCQkJCisJCQkJZG91YmxlIGlBID0gZGF0YUFJLmdldChpY291bnQpLmRvdWJsZVZhbHVlKCk7CisJCQkJZG91YmxlIGlCID0gZGF0YUJJLmdldChpY291bnQpLmRvdWJsZVZhbHVlKCk7CisJCQkKKwkJCQlyZWZCeVRpbWUuc2V0KGljb3VudCwgcmVmQnlUaW1lLmdldChpY291bnQpK2lBKTsKKwkJCQlkYXRhQnlUaW1lLnNldChpY291bnQsIGRhdGFCeVRpbWUuZ2V0KGljb3VudCkraUIpOworCQkJfQorCQl9CisJCXJlc3VsdG9iai5zZXRSZWZlcmVuY2VCeVRpbWUocmVmQnlUaW1lKTsKKwkJcmVzdWx0b2JqLnNldE1vZGVsQnlUaW1lKGRhdGFCeVRpbWUpOworCQlyZXR1cm4gcmVzdWx0b2JqOwkKKwl9Cit9IC8vU2ltcGxlRXJyb3JGdW5jdGlvbkltcGwKZGlmZiAtLWdpdCBhL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vYW5hbHlzaXMvaW1wbC9UaHJlc2hvbGRFcnJvckZ1bmN0aW9uSW1wbC5qYXZhIGIvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9hbmFseXNpcy9pbXBsL1RocmVzaG9sZEVycm9yRnVuY3Rpb25JbXBsLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTRjZDc0NgotLS0gL2Rldi9udWxsCisrKyBiL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vYW5hbHlzaXMvaW1wbC9UaHJlc2hvbGRFcnJvckZ1bmN0aW9uSW1wbC5qYXZhCkBAIC0wLDAgKzEsMjA2IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA5IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmltcGw7CisKK2ltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKK2ltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CitpbXBvcnQgamF2YS51dGlsLk1hcDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5CYXNpY0VMaXN0OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5BbmFseXNpc0ZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5BbmFseXNpc1BhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5FcnJvclJlc3VsdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLlJlZmVyZW5jZVNjZW5hcmlvRGF0YU1hcDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLlRocmVzaG9sZEVycm9yRnVuY3Rpb247CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5pbXBsLlJlZmVyZW5jZVNjZW5hcmlvRGF0YU1hcEltcGwuUmVmZXJlbmNlU2NlbmFyaW9EYXRhSW5zdGFuY2U7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIEFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5UaHJlc2hvbGQgRXJyb3IgRnVuY3Rpb248L2I+PC9lbT4nLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiA8cD4KKyAqIDwvcD4KKyAqCisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBUaHJlc2hvbGRFcnJvckZ1bmN0aW9uSW1wbCBleHRlbmRzIEVycm9yRnVuY3Rpb25JbXBsIGltcGxlbWVudHMgVGhyZXNob2xkRXJyb3JGdW5jdGlvbiB7CisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCXB1YmxpYyBUaHJlc2hvbGRFcnJvckZ1bmN0aW9uSW1wbCgpIHsKKwkJc3VwZXIoKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgRUNsYXNzIGVTdGF0aWNDbGFzcygpIHsKKwkJcmV0dXJuIEFuYWx5c2lzUGFja2FnZS5MaXRlcmFscy5USFJFU0hPTERfRVJST1JfRlVOQ1RJT047CisJfQorCisJLyoqCisJICogVGltZXNlcmllcyBkYXRhIGZvciBib3RoIGRhdGEgc2V0cyB3aXRoIGNvbW1vbiBsb2NhdGlvbnMKKwkgKi8KKwlNYXA8U3RyaW5nLExpc3Q8RG91YmxlPj4gY29tbW9uSW5mZWN0aW91c0xvY2F0aW9uc0EgPSBuZXcgSGFzaE1hcDxTdHJpbmcsTGlzdDxEb3VibGU+PigpOworCU1hcDxTdHJpbmcsTGlzdDxEb3VibGU+PiBjb21tb25JbmZlY3Rpb3VzTG9jYXRpb25zQiA9IG5ldyBIYXNoTWFwPFN0cmluZyxMaXN0PERvdWJsZT4+KCk7CisKKwkvKioKKwkgKiBNYXggaW5mZWN0aW91cyBwZXIgbG9jYXRpb24KKwkgKi8KKwlNYXA8U3RyaW5nLERvdWJsZT4gbWF4SW5mQSA9IG5ldyBIYXNoTWFwPFN0cmluZyxEb3VibGU+KCk7CisJTWFwPFN0cmluZyxEb3VibGU+IG1heEluZkIgPSBuZXcgSGFzaE1hcDxTdHJpbmcsRG91YmxlPigpOworCQorCS8qKgorCSAqIFRoZSBSZXN1bHQKKwkgKi8KKwlwdWJsaWMgZG91YmxlW10gbWVhblNxRGlmZjsKKwkKKwkvKgorCSAqIHRpbWUKKwkgKi8KKwlwdWJsaWMgZG91YmxlW10gdGltZTsKKwkKKwlwcm90ZWN0ZWQgQW5hbHlzaXNGYWN0b3J5IGFGYWN0b3J5ID0gbmV3IEFuYWx5c2lzRmFjdG9yeUltcGwoKTsKKworCS8vIFRoaXMgaXMgdGhlIHRocmVzaG9sZCBvZiB0aGUgbWF4aW11bSBwZWFrIGZvciBib3RoIGRhdGEgc2V0cworCS8vIHdoZXJlIHdlIGNvbnNpZGVyIHRoZSBlcnJvcgorCQorCXByb3RlY3RlZCBzdGF0aWMgZG91YmxlIFRIUkVTSE9MRCA9IDAuMTsKKwkKKwkvKioKKwkgKiBjYWxjdWxhdGUgZGVsdGEgZm9yIGEgdGhyZXNob2xkIGVycm9yIGZ1bmN0aW9uCisJICogCisJICogCisJICogQG92ZXJyaWRlCisJICovCisJCisJcHVibGljIEVycm9yUmVzdWx0IGNhbGN1bGF0ZUVycm9yKFJlZmVyZW5jZVNjZW5hcmlvRGF0YU1hcCByZWZlcmVuY2UsIFJlZmVyZW5jZVNjZW5hcmlvRGF0YU1hcCBkYXRhKSB7CisJCWZpbmFsIFJlZmVyZW5jZVNjZW5hcmlvRGF0YU1hcEltcGwgX3JlZiA9IChSZWZlcmVuY2VTY2VuYXJpb0RhdGFNYXBJbXBsKXJlZmVyZW5jZTsKKwkJZmluYWwgUmVmZXJlbmNlU2NlbmFyaW9EYXRhTWFwSW1wbCBfZGF0YSA9IChSZWZlcmVuY2VTY2VuYXJpb0RhdGFNYXBJbXBsKWRhdGE7CisKKwkJZG91YmxlIGRlbm9taW5hdG9yID0gMC4wOworCQkvLyBDbGVhcgorCQl0aW1lID0gbnVsbDsKKwkJCisJCUl0ZXJhdG9yPFN0cmluZz4gaXRlcmF0b3JBID0gX3JlZi5nZXRMb2NhdGlvbnMoKS5pdGVyYXRvcigpOworCQlpbnQgbWF4VGltZSA9IC0xOworCQl3aGlsZShpdGVyYXRvckEuaGFzTmV4dCgpKSB7CisJCQlTdHJpbmcgaWQgPSBpdGVyYXRvckEubmV4dCgpOworCQkJCQkKKwkJCWlmKF9kYXRhLmNvbnRhaW5zTG9jYXRpb24oaWQpKSB7CisJCQkJLy8gZ2V0IHRoZSBsaXN0cyBvZiBkYXRhIG9ubHkgZm9yIHRob3NlIGxvY2F0aW9ucyB0aGF0IGFyZSBjb21tb24gdG8gYm90aCBtYXBzCQkJCQkJUmVmZXJlbmNlU2NlbmFyaW9EYXRhSW5zdGFuY2UgZGF0YU1hcEEgPSBtYXBBLmdldExvY2F0aW9uKGlkKTsKKwkJCQlSZWZlcmVuY2VTY2VuYXJpb0RhdGFJbnN0YW5jZSBkYXRhTWFwQSA9IF9yZWYuZ2V0TG9jYXRpb24oaWQpOworCQkJCUxpc3Q8RG91YmxlPiBkYXRhQUkgPSBnZXRJbmZlY3Rpb3VzKGRhdGFNYXBBKTsKKwkJCQorCQkJCWNvbW1vbkluZmVjdGlvdXNMb2NhdGlvbnNBLnB1dChpZCxkYXRhQUkpOworCQkJCQkJCQkJCQkJCisJCQkJLy8gTWFwIEIKKwkJCQlSZWZlcmVuY2VTY2VuYXJpb0RhdGFJbnN0YW5jZSBkYXRhTWFwQiA9IF9kYXRhLmdldExvY2F0aW9uKGlkKTsKKwkJCQlMaXN0PERvdWJsZT4gZGF0YUJJID0gZ2V0SW5mZWN0aW91cyhkYXRhTWFwQik7CisJCQkJY29tbW9uSW5mZWN0aW91c0xvY2F0aW9uc0IucHV0KGlkLGRhdGFCSSk7CisJCQkJCQkJCQkJCQkKKwkJCQkvLyBGaW5kIHRoZSBwZWFrIGluIGJvdGggZGF0YSBzZXRzIGFuZCByZW1lbWJlci4gSXQgd2lsbCBiZSB1c2VkCisJCQkJLy8gdG8gZGV0ZXJtaW5lIHRoZSB0aHJlc2hvbGQKKwkJCQkKKwkJCQlkb3VibGUgbWF4QSA9IC0xOworCQkJCWZvcihkb3VibGUgZCA6IGRhdGFBSSkgaWYoZCA+IG1heEEpIG1heEEgPSBkOworCQkJCQorCQkJCWRvdWJsZSBtYXhCID0gLTE7CisJCQkJZm9yKGRvdWJsZSBkIDogZGF0YUJJKSBpZihkID4gbWF4QikgbWF4QiA9IGQ7CisJCisJCQkJbWF4SW5mQS5wdXQoaWQsIG1heEEpOworCQkJCW1heEluZkIucHV0KGlkLCBtYXhCKTsKKwkJCQkKKwkJCQkvLyBpbml0IHRoZSBhcnJheSBzaXplCisJCQkJaWYgKG1heFRpbWUgPT0gLTEpIG1heFRpbWUgPSBkYXRhQUkuc2l6ZSgpOworCQkJCQkJCisJCQkJLy8gZGltZW5zaW9uIHRoZSBhcnJheXMgdG8gdGhlIGxlbmd0aCBvZiB0aGUgU01BTExFU1QgYXJyYXkgZm9yIHdoaWNoIHdlIGhhdmUgZGF0YQorCQkJCWlmKG1heFRpbWUgPj0gZGF0YUJJLnNpemUoKSApIG1heFRpbWUgPSBkYXRhQkkuc2l6ZSgpOworCQkJCWlmKG1heFRpbWUgPj0gZGF0YUFJLnNpemUoKSApIG1heFRpbWUgPSBkYXRhQUkuc2l6ZSgpOworCQkJfS8vIGlmCisJCX0vLyB3aGlsZQorCQlpZihtYXhUaW1lPD0wKSBtYXhUaW1lID0gMDsKKwkJaWYodGltZT09bnVsbCkgeworCQkJdGltZSA9IG5ldyBkb3VibGVbbWF4VGltZV07CisJCQltZWFuU3FEaWZmID0gbmV3IGRvdWJsZVttYXhUaW1lXTsKKwkJCWZvcihpbnQgaSA9IDA7IGkgPCBtYXhUaW1lOyBpICsrKSB7CisJCQkJdGltZVtpXSA9IGk7CisJCQkJbWVhblNxRGlmZltpXSA9IDAuMDsKKwkJCX0KKwkJfQorCQkKKwkJLy8gTm93IGZpZ3VyZSBvdXQgdGhlIGFjdHVhbCBlcnJvcgorCQkKKwkJZG91YmxlW10gbWF4UG9wdWxhdGlvbiA9IG5ldyBkb3VibGVbdGltZS5sZW5ndGhdOworCisJCWZvcihpbnQgaWNvdW50ID0wOyBpY291bnQgPCB0aW1lLmxlbmd0aDsgaWNvdW50ICsrKSB7CisJCQltYXhQb3B1bGF0aW9uW2ljb3VudF0gPSAwLjA7CisJCQlJdGVyYXRvcjxTdHJpbmc+IGl0ZXIgPSBjb21tb25JbmZlY3Rpb3VzTG9jYXRpb25zQS5rZXlTZXQoKS5pdGVyYXRvcigpOworCQkJLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisJCQkvLyBhbGwgbG9jYXRpb25zCisJCQl3aGlsZShpdGVyLmhhc05leHQoKSkgeworCQkJCVN0cmluZyBpZCA9IGl0ZXIubmV4dCgpOworCQkJCUxpc3Q8RG91YmxlPiBkYXRhQUkgPSBjb21tb25JbmZlY3Rpb3VzTG9jYXRpb25zQS5nZXQoaWQpOworCQkJCUxpc3Q8RG91YmxlPiBkYXRhQkkgPSBjb21tb25JbmZlY3Rpb3VzTG9jYXRpb25zQi5nZXQoaWQpOworCQkJCQkJCQkJCQkJCisJCQkJZG91YmxlIGlBID0gZGF0YUFJLmdldChpY291bnQpLmRvdWJsZVZhbHVlKCk7CisJCQkJZG91YmxlIGlCID0gZGF0YUJJLmdldChpY291bnQpLmRvdWJsZVZhbHVlKCk7CisJCQorCQkJCS8vIGRvdWJsZSBkZW5vbSA9IChpQStpQikvMi4wOworCQkJCS8vIHNxdWFyZSBvZiB0aGUgYXZlcmFnZSBmcmFjdGlvbiBvZiBpbmZlY3Rpb3VzIHBlb3BsZQorCQkJCS8vIGRlbm9tICo9IGRlbm9tOworCQkJCWRvdWJsZSBtYXhBID0gbWF4SW5mQS5nZXQoaWQpOworCQkJCWRvdWJsZSBtYXhCID0gbWF4SW5mQi5nZXQoaWQpOworCisJCQkJaWYgKChpQSA+IG1heEEqVEhSRVNIT0xEKSB8fCAoaUIgPiBtYXhCKlRIUkVTSE9MRCkpIHsKKwkJCQkJLy8gd2UgaGF2ZSBhIGxvY2F0aW9uIHdpdGggbm9uemVybyBkYXRhCisJCQkJCS8vIHNxdWFyZSBvZiB0aGUgRElGRkVSRU5DRQorCQkJCQkJCQorCQkJCQkvLyBDaGFuZ2VkIDIvNC8wOS4gRHJvcCB0aGUgUyBkYXRhIGNvbXBhcmlzb24KKwkJCQkJLy9kb3VibGUgdGVybSA9ICgoaUEgLSBpQikgKiAoaUEgLSBpQikpCisJCQkJCS8vCQkrICgoc0EgLSBzQikgKiAoc0EgLSBzQikpOworCQkJCQkJCQorCQkJCQlkb3VibGUgdGVybSA9IE1hdGguYWJzKGlBIC0gaUIpOworCQkJCQltZWFuU3FEaWZmW2ljb3VudF0gKz0gdGVybTsKKwkJCQkJaWYoaUEgPiBpQikgZGVub21pbmF0b3IrPSBpQTsgZWxzZSBkZW5vbWluYXRvcis9IGlCOyAKKwkJCQl9CQkJCQkKKwkJCX0vLyBhbGwgbG9jYXRpb25zCisJCQkJCisgICAgICAgICAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKwkKKwkJfS8vIGZvciBhbGwgdGltZQorCQkKKwkJCisJCS8vIFN1bSBhbGwgZXJyb3JzIGFuZCBkaXZpZGUgYnkgdGltZQorCQkKKwkJZG91YmxlIHJlc3VsdCA9IDAuMDsKKwkJQmFzaWNFTGlzdDxEb3VibGU+IGxpc3QgPSBuZXcgQmFzaWNFTGlzdDxEb3VibGU+KCk7CisJCWZvcihpbnQgaT0wO2k8dGltZS5sZW5ndGg7KytpKSB7CisJCQltZWFuU3FEaWZmW2ldID0gbWVhblNxRGlmZltpXSAvIGRlbm9taW5hdG9yOworCQkJcmVzdWx0ICs9IG1lYW5TcURpZmZbaV07CisJCQlsaXN0LmFkZChtZWFuU3FEaWZmW2ldKTsKKwkJfQorCQkKKwkJRXJyb3JSZXN1bHQgcmVzdWx0b2JqID0gYUZhY3RvcnkuY3JlYXRlRXJyb3JSZXN1bHQoKTsKKwkJcmVzdWx0b2JqLnNldEVycm9yQnlUaW1lU3RlcChsaXN0KTsKKwkJcmVzdWx0b2JqLnNldEVycm9yKHJlc3VsdCk7CisJCXJldHVybiByZXN1bHRvYmo7CQorCX0KKwkKK30gLy9UaHJlc2hvbGRFcnJvckZ1bmN0aW9uSW1wbApkaWZmIC0tZ2l0IGEvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9hbmFseXNpcy9wcmVzZW50YXRpb24vQW5hbHlzaXNBY3Rpb25CYXJDb250cmlidXRvci5qYXZhIGIvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9hbmFseXNpcy9wcmVzZW50YXRpb24vQW5hbHlzaXNBY3Rpb25CYXJDb250cmlidXRvci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdmOTBjYjMKLS0tIC9kZXYvbnVsbAorKysgYi9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2FuYWx5c2lzL3ByZXNlbnRhdGlvbi9BbmFseXNpc0FjdGlvbkJhckNvbnRyaWJ1dG9yLmphdmEKQEAgLTAsMCArMSw0MjggQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5wcmVzZW50YXRpb247CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIAorICogQ29weXJpZ2h0IChjKSAyMDExIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiAKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdCAKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sIAorICogCisgKiBDb250cmlidXRvcnM6IAorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiAKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udWkudmlld2VyLklWaWV3ZXJQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5kb21haW4uRWRpdGluZ0RvbWFpbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5kb21haW4uSUVkaXRpbmdEb21haW5Qcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5hY3Rpb24uQ29udHJvbEFjdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5hY3Rpb24uQ3JlYXRlQ2hpbGRBY3Rpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkuYWN0aW9uLkNyZWF0ZVNpYmxpbmdBY3Rpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkuYWN0aW9uLkVkaXRpbmdEb21haW5BY3Rpb25CYXJDb250cmlidXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5hY3Rpb24uTG9hZFJlc291cmNlQWN0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmFjdGlvbi5WYWxpZGF0ZUFjdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uQWN0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5BY3Rpb25Db250cmlidXRpb25JdGVtOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JQWN0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JQ29udHJpYnV0aW9uSXRlbTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSUNvbnRyaWJ1dGlvbk1hbmFnZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklNZW51TGlzdGVuZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklNZW51TWFuYWdlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSVRvb2xCYXJNYW5hZ2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5NZW51TWFuYWdlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uU2VwYXJhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5TdWJDb250cmlidXRpb25JdGVtOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU3RydWN0dXJlZFNlbGVjdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlNlbGVjdGlvbkNoYW5nZWRFdmVudDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlZpZXdlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLnByb3ZpZGVyLkFuYWx5c2lzRWRpdFBsdWdpbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5JRWRpdG9yUGFydDsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5QYXJ0SW5pdEV4Y2VwdGlvbjsKKworLyoqCisgKiBUaGlzIGlzIHRoZSBhY3Rpb24gYmFyIGNvbnRyaWJ1dG9yIGZvciB0aGUgQW5hbHlzaXMgbW9kZWwgZWRpdG9yLgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgQW5hbHlzaXNBY3Rpb25CYXJDb250cmlidXRvcgorCWV4dGVuZHMgRWRpdGluZ0RvbWFpbkFjdGlvbkJhckNvbnRyaWJ1dG9yCisJaW1wbGVtZW50cyBJU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyIHsKKwkvKioKKwkgKiBUaGlzIGtlZXBzIHRyYWNrIG9mIHRoZSBhY3RpdmUgZWRpdG9yLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBJRWRpdG9yUGFydCBhY3RpdmVFZGl0b3JQYXJ0OworCisJLyoqCisJICogVGhpcyBrZWVwcyB0cmFjayBvZiB0aGUgY3VycmVudCBzZWxlY3Rpb24gcHJvdmlkZXIuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIElTZWxlY3Rpb25Qcm92aWRlciBzZWxlY3Rpb25Qcm92aWRlcjsKKworCS8qKgorCSAqIFRoaXMgYWN0aW9uIG9wZW5zIHRoZSBQcm9wZXJ0aWVzIHZpZXcuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIElBY3Rpb24gc2hvd1Byb3BlcnRpZXNWaWV3QWN0aW9uID0KKwkJbmV3IEFjdGlvbihBbmFseXNpc0VkaXRQbHVnaW4uSU5TVEFOQ0UuZ2V0U3RyaW5nKCJfVUlfU2hvd1Byb3BlcnRpZXNWaWV3X21lbnVfaXRlbSIpKSB7CisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyB2b2lkIHJ1bigpIHsKKwkJCQl0cnkgeworCQkJCQlnZXRQYWdlKCkuc2hvd1ZpZXcoIm9yZy5lY2xpcHNlLnVpLnZpZXdzLlByb3BlcnR5U2hlZXQiKTsKKwkJCQl9CisJCQkJY2F0Y2ggKFBhcnRJbml0RXhjZXB0aW9uIGV4Y2VwdGlvbikgeworCQkJCQlBbmFseXNpc0VkaXRQbHVnaW4uSU5TVEFOQ0UubG9nKGV4Y2VwdGlvbik7CisJCQkJfQorCQkJfQorCQl9OworCisJLyoqCisJICogVGhpcyBhY3Rpb24gcmVmcmVzaGVzIHRoZSB2aWV3ZXIgb2YgdGhlIGN1cnJlbnQgZWRpdG9yIGlmIHRoZSBlZGl0b3IKKwkgKiBpbXBsZW1lbnRzIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnVpLnZpZXdlci5JVmlld2VyUHJvdmlkZXJ9LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBJQWN0aW9uIHJlZnJlc2hWaWV3ZXJBY3Rpb24gPQorCQluZXcgQWN0aW9uKEFuYWx5c2lzRWRpdFBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoIl9VSV9SZWZyZXNoVmlld2VyX21lbnVfaXRlbSIpKSB7CisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyBib29sZWFuIGlzRW5hYmxlZCgpIHsKKwkJCQlyZXR1cm4gYWN0aXZlRWRpdG9yUGFydCBpbnN0YW5jZW9mIElWaWV3ZXJQcm92aWRlcjsKKwkJCX0KKworCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgdm9pZCBydW4oKSB7CisJCQkJaWYgKGFjdGl2ZUVkaXRvclBhcnQgaW5zdGFuY2VvZiBJVmlld2VyUHJvdmlkZXIpIHsKKwkJCQkJVmlld2VyIHZpZXdlciA9ICgoSVZpZXdlclByb3ZpZGVyKWFjdGl2ZUVkaXRvclBhcnQpLmdldFZpZXdlcigpOworCQkJCQlpZiAodmlld2VyICE9IG51bGwpIHsKKwkJCQkJCXZpZXdlci5yZWZyZXNoKCk7CisJCQkJCX0KKwkJCQl9CisJCQl9CisJCX07CisKKwkvKioKKwkgKiBUaGlzIHdpbGwgY29udGFpbiBvbmUge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmFjdGlvbi5DcmVhdGVDaGlsZEFjdGlvbn0gY29ycmVzcG9uZGluZyB0byBlYWNoIGRlc2NyaXB0b3IKKwkgKiBnZW5lcmF0ZWQgZm9yIHRoZSBjdXJyZW50IHNlbGVjdGlvbiBieSB0aGUgaXRlbSBwcm92aWRlci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgQ29sbGVjdGlvbjxJQWN0aW9uPiBjcmVhdGVDaGlsZEFjdGlvbnM7CisKKwkvKioKKwkgKiBUaGlzIGlzIHRoZSBtZW51IG1hbmFnZXIgaW50byB3aGljaCBtZW51IGNvbnRyaWJ1dGlvbiBpdGVtcyBzaG91bGQgYmUgYWRkZWQgZm9yIENyZWF0ZUNoaWxkIGFjdGlvbnMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIElNZW51TWFuYWdlciBjcmVhdGVDaGlsZE1lbnVNYW5hZ2VyOworCisJLyoqCisJICogVGhpcyB3aWxsIGNvbnRhaW4gb25lIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5hY3Rpb24uQ3JlYXRlU2libGluZ0FjdGlvbn0gY29ycmVzcG9uZGluZyB0byBlYWNoIGRlc2NyaXB0b3IKKwkgKiBnZW5lcmF0ZWQgZm9yIHRoZSBjdXJyZW50IHNlbGVjdGlvbiBieSB0aGUgaXRlbSBwcm92aWRlci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgQ29sbGVjdGlvbjxJQWN0aW9uPiBjcmVhdGVTaWJsaW5nQWN0aW9uczsKKworCS8qKgorCSAqIFRoaXMgaXMgdGhlIG1lbnUgbWFuYWdlciBpbnRvIHdoaWNoIG1lbnUgY29udHJpYnV0aW9uIGl0ZW1zIHNob3VsZCBiZSBhZGRlZCBmb3IgQ3JlYXRlU2libGluZyBhY3Rpb25zLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBJTWVudU1hbmFnZXIgY3JlYXRlU2libGluZ01lbnVNYW5hZ2VyOworCisJLyoqCisJICogVGhpcyBjcmVhdGVzIGFuIGluc3RhbmNlIG9mIHRoZSBjb250cmlidXRvci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQW5hbHlzaXNBY3Rpb25CYXJDb250cmlidXRvcigpIHsKKwkJc3VwZXIoQURESVRJT05TX0xBU1RfU1RZTEUpOworCQlsb2FkUmVzb3VyY2VBY3Rpb24gPSBuZXcgTG9hZFJlc291cmNlQWN0aW9uKCk7CisJCXZhbGlkYXRlQWN0aW9uID0gbmV3IFZhbGlkYXRlQWN0aW9uKCk7CisJCWNvbnRyb2xBY3Rpb24gPSBuZXcgQ29udHJvbEFjdGlvbigpOworCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyBTZXBhcmF0b3JzIGZvciBlZGl0b3IgYWRkaXRpb25zIHRvIHRoZSB0b29sIGJhci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBjb250cmlidXRlVG9Ub29sQmFyKElUb29sQmFyTWFuYWdlciB0b29sQmFyTWFuYWdlcikgeworCQl0b29sQmFyTWFuYWdlci5hZGQobmV3IFNlcGFyYXRvcigiYW5hbHlzaXMtc2V0dGluZ3MiKSk7CisJCXRvb2xCYXJNYW5hZ2VyLmFkZChuZXcgU2VwYXJhdG9yKCJhbmFseXNpcy1hZGRpdGlvbnMiKSk7CisJfQorCisJLyoqCisJICogVGhpcyBhZGRzIHRvIHRoZSBtZW51IGJhciBhIG1lbnUgYW5kIHNvbWUgc2VwYXJhdG9ycyBmb3IgZWRpdG9yIGFkZGl0aW9ucywKKwkgKiBhcyB3ZWxsIGFzIHRoZSBzdWItbWVudXMgZm9yIG9iamVjdCBjcmVhdGlvbiBpdGVtcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBjb250cmlidXRlVG9NZW51KElNZW51TWFuYWdlciBtZW51TWFuYWdlcikgeworCQlzdXBlci5jb250cmlidXRlVG9NZW51KG1lbnVNYW5hZ2VyKTsKKworCQlJTWVudU1hbmFnZXIgc3VibWVudU1hbmFnZXIgPSBuZXcgTWVudU1hbmFnZXIoQW5hbHlzaXNFZGl0UGx1Z2luLklOU1RBTkNFLmdldFN0cmluZygiX1VJX0FuYWx5c2lzRWRpdG9yX21lbnUiKSwgIm9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXNNZW51SUQiKTsKKwkJbWVudU1hbmFnZXIuaW5zZXJ0QWZ0ZXIoImFkZGl0aW9ucyIsIHN1Ym1lbnVNYW5hZ2VyKTsKKwkJc3VibWVudU1hbmFnZXIuYWRkKG5ldyBTZXBhcmF0b3IoInNldHRpbmdzIikpOworCQlzdWJtZW51TWFuYWdlci5hZGQobmV3IFNlcGFyYXRvcigiYWN0aW9ucyIpKTsKKwkJc3VibWVudU1hbmFnZXIuYWRkKG5ldyBTZXBhcmF0b3IoImFkZGl0aW9ucyIpKTsKKwkJc3VibWVudU1hbmFnZXIuYWRkKG5ldyBTZXBhcmF0b3IoImFkZGl0aW9ucy1lbmQiKSk7CisKKwkJLy8gUHJlcGFyZSBmb3IgQ3JlYXRlQ2hpbGQgaXRlbSBhZGRpdGlvbiBvciByZW1vdmFsLgorCQkvLworCQljcmVhdGVDaGlsZE1lbnVNYW5hZ2VyID0gbmV3IE1lbnVNYW5hZ2VyKEFuYWx5c2lzRWRpdFBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoIl9VSV9DcmVhdGVDaGlsZF9tZW51X2l0ZW0iKSk7CisJCXN1Ym1lbnVNYW5hZ2VyLmluc2VydEJlZm9yZSgiYWRkaXRpb25zIiwgY3JlYXRlQ2hpbGRNZW51TWFuYWdlcik7CisKKwkJLy8gUHJlcGFyZSBmb3IgQ3JlYXRlU2libGluZyBpdGVtIGFkZGl0aW9uIG9yIHJlbW92YWwuCisJCS8vCisJCWNyZWF0ZVNpYmxpbmdNZW51TWFuYWdlciA9IG5ldyBNZW51TWFuYWdlcihBbmFseXNpc0VkaXRQbHVnaW4uSU5TVEFOQ0UuZ2V0U3RyaW5nKCJfVUlfQ3JlYXRlU2libGluZ19tZW51X2l0ZW0iKSk7CisJCXN1Ym1lbnVNYW5hZ2VyLmluc2VydEJlZm9yZSgiYWRkaXRpb25zIiwgY3JlYXRlU2libGluZ01lbnVNYW5hZ2VyKTsKKworCQkvLyBGb3JjZSBhbiB1cGRhdGUgYmVjYXVzZSBFY2xpcHNlIGhpZGVzIGVtcHR5IG1lbnVzIG5vdy4KKwkJLy8KKwkJc3VibWVudU1hbmFnZXIuYWRkTWVudUxpc3RlbmVyCisJCQkobmV3IElNZW51TGlzdGVuZXIoKSB7CisJCQkJIHB1YmxpYyB2b2lkIG1lbnVBYm91dFRvU2hvdyhJTWVudU1hbmFnZXIgbWVudU1hbmFnZXIpIHsKKwkJCQkJIG1lbnVNYW5hZ2VyLnVwZGF0ZUFsbCh0cnVlKTsKKwkJCQkgfQorCQkJIH0pOworCisJCWFkZEdsb2JhbEFjdGlvbnMoc3VibWVudU1hbmFnZXIpOworCX0KKworCS8qKgorCSAqIFdoZW4gdGhlIGFjdGl2ZSBlZGl0b3IgY2hhbmdlcywgdGhpcyByZW1lbWJlcnMgdGhlIGNoYW5nZSBhbmQgcmVnaXN0ZXJzIHdpdGggaXQgYXMgYSBzZWxlY3Rpb24gcHJvdmlkZXIuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgc2V0QWN0aXZlRWRpdG9yKElFZGl0b3JQYXJ0IHBhcnQpIHsKKwkJc3VwZXIuc2V0QWN0aXZlRWRpdG9yKHBhcnQpOworCQlhY3RpdmVFZGl0b3JQYXJ0ID0gcGFydDsKKworCQkvLyBTd2l0Y2ggdG8gdGhlIG5ldyBzZWxlY3Rpb24gcHJvdmlkZXIuCisJCS8vCisJCWlmIChzZWxlY3Rpb25Qcm92aWRlciAhPSBudWxsKSB7CisJCQlzZWxlY3Rpb25Qcm92aWRlci5yZW1vdmVTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIodGhpcyk7CisJCX0KKwkJaWYgKHBhcnQgPT0gbnVsbCkgeworCQkJc2VsZWN0aW9uUHJvdmlkZXIgPSBudWxsOworCQl9CisJCWVsc2UgeworCQkJc2VsZWN0aW9uUHJvdmlkZXIgPSBwYXJ0LmdldFNpdGUoKS5nZXRTZWxlY3Rpb25Qcm92aWRlcigpOworCQkJc2VsZWN0aW9uUHJvdmlkZXIuYWRkU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyKHRoaXMpOworCisJCQkvLyBGYWtlIGEgc2VsZWN0aW9uIGNoYW5nZWQgZXZlbnQgdG8gdXBkYXRlIHRoZSBtZW51cy4KKwkJCS8vCisJCQlpZiAoc2VsZWN0aW9uUHJvdmlkZXIuZ2V0U2VsZWN0aW9uKCkgIT0gbnVsbCkgeworCQkJCXNlbGVjdGlvbkNoYW5nZWQobmV3IFNlbGVjdGlvbkNoYW5nZWRFdmVudChzZWxlY3Rpb25Qcm92aWRlciwgc2VsZWN0aW9uUHJvdmlkZXIuZ2V0U2VsZWN0aW9uKCkpKTsKKwkJCX0KKwkJfQorCX0KKworCS8qKgorCSAqIFRoaXMgaW1wbGVtZW50cyB7QGxpbmsgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyfSwKKwkgKiBoYW5kbGluZyB7QGxpbmsgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5TZWxlY3Rpb25DaGFuZ2VkRXZlbnR9cyBieSBxdWVyeWluZyBmb3IgdGhlIGNoaWxkcmVuIGFuZCBzaWJsaW5ncworCSAqIHRoYXQgY2FuIGJlIGFkZGVkIHRvIHRoZSBzZWxlY3RlZCBvYmplY3QgYW5kIHVwZGF0aW5nIHRoZSBtZW51cyBhY2NvcmRpbmdseS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZWxlY3Rpb25DaGFuZ2VkKFNlbGVjdGlvbkNoYW5nZWRFdmVudCBldmVudCkgeworCQkvLyBSZW1vdmUgYW55IG1lbnUgaXRlbXMgZm9yIG9sZCBzZWxlY3Rpb24uCisJCS8vCisJCWlmIChjcmVhdGVDaGlsZE1lbnVNYW5hZ2VyICE9IG51bGwpIHsKKwkJCWRlcG9wdWxhdGVNYW5hZ2VyKGNyZWF0ZUNoaWxkTWVudU1hbmFnZXIsIGNyZWF0ZUNoaWxkQWN0aW9ucyk7CisJCX0KKwkJaWYgKGNyZWF0ZVNpYmxpbmdNZW51TWFuYWdlciAhPSBudWxsKSB7CisJCQlkZXBvcHVsYXRlTWFuYWdlcihjcmVhdGVTaWJsaW5nTWVudU1hbmFnZXIsIGNyZWF0ZVNpYmxpbmdBY3Rpb25zKTsKKwkJfQorCisJCS8vIFF1ZXJ5IHRoZSBuZXcgc2VsZWN0aW9uIGZvciBhcHByb3ByaWF0ZSBuZXcgY2hpbGQvc2libGluZyBkZXNjcmlwdG9ycworCQkvLworCQlDb2xsZWN0aW9uPD8+IG5ld0NoaWxkRGVzY3JpcHRvcnMgPSBudWxsOworCQlDb2xsZWN0aW9uPD8+IG5ld1NpYmxpbmdEZXNjcmlwdG9ycyA9IG51bGw7CisKKwkJSVNlbGVjdGlvbiBzZWxlY3Rpb24gPSBldmVudC5nZXRTZWxlY3Rpb24oKTsKKwkJaWYgKHNlbGVjdGlvbiBpbnN0YW5jZW9mIElTdHJ1Y3R1cmVkU2VsZWN0aW9uICYmICgoSVN0cnVjdHVyZWRTZWxlY3Rpb24pc2VsZWN0aW9uKS5zaXplKCkgPT0gMSkgeworCQkJT2JqZWN0IG9iamVjdCA9ICgoSVN0cnVjdHVyZWRTZWxlY3Rpb24pc2VsZWN0aW9uKS5nZXRGaXJzdEVsZW1lbnQoKTsKKworCQkJRWRpdGluZ0RvbWFpbiBkb21haW4gPSAoKElFZGl0aW5nRG9tYWluUHJvdmlkZXIpYWN0aXZlRWRpdG9yUGFydCkuZ2V0RWRpdGluZ0RvbWFpbigpOworCisJCQluZXdDaGlsZERlc2NyaXB0b3JzID0gZG9tYWluLmdldE5ld0NoaWxkRGVzY3JpcHRvcnMob2JqZWN0LCBudWxsKTsKKwkJCW5ld1NpYmxpbmdEZXNjcmlwdG9ycyA9IGRvbWFpbi5nZXROZXdDaGlsZERlc2NyaXB0b3JzKG51bGwsIG9iamVjdCk7CisJCX0KKworCQkvLyBHZW5lcmF0ZSBhY3Rpb25zIGZvciBzZWxlY3Rpb247IHBvcHVsYXRlIGFuZCByZWRyYXcgdGhlIG1lbnVzLgorCQkvLworCQljcmVhdGVDaGlsZEFjdGlvbnMgPSBnZW5lcmF0ZUNyZWF0ZUNoaWxkQWN0aW9ucyhuZXdDaGlsZERlc2NyaXB0b3JzLCBzZWxlY3Rpb24pOworCQljcmVhdGVTaWJsaW5nQWN0aW9ucyA9IGdlbmVyYXRlQ3JlYXRlU2libGluZ0FjdGlvbnMobmV3U2libGluZ0Rlc2NyaXB0b3JzLCBzZWxlY3Rpb24pOworCisJCWlmIChjcmVhdGVDaGlsZE1lbnVNYW5hZ2VyICE9IG51bGwpIHsKKwkJCXBvcHVsYXRlTWFuYWdlcihjcmVhdGVDaGlsZE1lbnVNYW5hZ2VyLCBjcmVhdGVDaGlsZEFjdGlvbnMsIG51bGwpOworCQkJY3JlYXRlQ2hpbGRNZW51TWFuYWdlci51cGRhdGUodHJ1ZSk7CisJCX0KKwkJaWYgKGNyZWF0ZVNpYmxpbmdNZW51TWFuYWdlciAhPSBudWxsKSB7CisJCQlwb3B1bGF0ZU1hbmFnZXIoY3JlYXRlU2libGluZ01lbnVNYW5hZ2VyLCBjcmVhdGVTaWJsaW5nQWN0aW9ucywgbnVsbCk7CisJCQljcmVhdGVTaWJsaW5nTWVudU1hbmFnZXIudXBkYXRlKHRydWUpOworCQl9CisJfQorCisJLyoqCisJICogVGhpcyBnZW5lcmF0ZXMgYSB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkuYWN0aW9uLkNyZWF0ZUNoaWxkQWN0aW9ufSBmb3IgZWFjaCBvYmplY3QgaW4gPGNvZGU+ZGVzY3JpcHRvcnM8L2NvZGU+LAorCSAqIGFuZCByZXR1cm5zIHRoZSBjb2xsZWN0aW9uIG9mIHRoZXNlIGFjdGlvbnMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIENvbGxlY3Rpb248SUFjdGlvbj4gZ2VuZXJhdGVDcmVhdGVDaGlsZEFjdGlvbnMoQ29sbGVjdGlvbjw/PiBkZXNjcmlwdG9ycywgSVNlbGVjdGlvbiBzZWxlY3Rpb24pIHsKKwkJQ29sbGVjdGlvbjxJQWN0aW9uPiBhY3Rpb25zID0gbmV3IEFycmF5TGlzdDxJQWN0aW9uPigpOworCQlpZiAoZGVzY3JpcHRvcnMgIT0gbnVsbCkgeworCQkJZm9yIChPYmplY3QgZGVzY3JpcHRvciA6IGRlc2NyaXB0b3JzKSB7CisJCQkJYWN0aW9ucy5hZGQobmV3IENyZWF0ZUNoaWxkQWN0aW9uKGFjdGl2ZUVkaXRvclBhcnQsIHNlbGVjdGlvbiwgZGVzY3JpcHRvcikpOworCQkJfQorCQl9CisJCXJldHVybiBhY3Rpb25zOworCX0KKworCS8qKgorCSAqIFRoaXMgZ2VuZXJhdGVzIGEge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmFjdGlvbi5DcmVhdGVTaWJsaW5nQWN0aW9ufSBmb3IgZWFjaCBvYmplY3QgaW4gPGNvZGU+ZGVzY3JpcHRvcnM8L2NvZGU+LAorCSAqIGFuZCByZXR1cm5zIHRoZSBjb2xsZWN0aW9uIG9mIHRoZXNlIGFjdGlvbnMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIENvbGxlY3Rpb248SUFjdGlvbj4gZ2VuZXJhdGVDcmVhdGVTaWJsaW5nQWN0aW9ucyhDb2xsZWN0aW9uPD8+IGRlc2NyaXB0b3JzLCBJU2VsZWN0aW9uIHNlbGVjdGlvbikgeworCQlDb2xsZWN0aW9uPElBY3Rpb24+IGFjdGlvbnMgPSBuZXcgQXJyYXlMaXN0PElBY3Rpb24+KCk7CisJCWlmIChkZXNjcmlwdG9ycyAhPSBudWxsKSB7CisJCQlmb3IgKE9iamVjdCBkZXNjcmlwdG9yIDogZGVzY3JpcHRvcnMpIHsKKwkJCQlhY3Rpb25zLmFkZChuZXcgQ3JlYXRlU2libGluZ0FjdGlvbihhY3RpdmVFZGl0b3JQYXJ0LCBzZWxlY3Rpb24sIGRlc2NyaXB0b3IpKTsKKwkJCX0KKwkJfQorCQlyZXR1cm4gYWN0aW9uczsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHBvcHVsYXRlcyB0aGUgc3BlY2lmaWVkIDxjb2RlPm1hbmFnZXI8L2NvZGU+IHdpdGgge0BsaW5rIG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5BY3Rpb25Db250cmlidXRpb25JdGVtfXMKKwkgKiBiYXNlZCBvbiB0aGUge0BsaW5rIG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JQWN0aW9ufXMgY29udGFpbmVkIGluIHRoZSA8Y29kZT5hY3Rpb25zPC9jb2RlPiBjb2xsZWN0aW9uLAorCSAqIGJ5IGluc2VydGluZyB0aGVtIGJlZm9yZSB0aGUgc3BlY2lmaWVkIGNvbnRyaWJ1dGlvbiBpdGVtIDxjb2RlPmNvbnRyaWJ1dGlvbklEPC9jb2RlPi4KKwkgKiBJZiA8Y29kZT5jb250cmlidXRpb25JRDwvY29kZT4gaXMgPGNvZGU+bnVsbDwvY29kZT4sIHRoZXkgYXJlIHNpbXBseSBhZGRlZC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBwb3B1bGF0ZU1hbmFnZXIoSUNvbnRyaWJ1dGlvbk1hbmFnZXIgbWFuYWdlciwgQ29sbGVjdGlvbjw/IGV4dGVuZHMgSUFjdGlvbj4gYWN0aW9ucywgU3RyaW5nIGNvbnRyaWJ1dGlvbklEKSB7CisJCWlmIChhY3Rpb25zICE9IG51bGwpIHsKKwkJCWZvciAoSUFjdGlvbiBhY3Rpb24gOiBhY3Rpb25zKSB7CisJCQkJaWYgKGNvbnRyaWJ1dGlvbklEICE9IG51bGwpIHsKKwkJCQkJbWFuYWdlci5pbnNlcnRCZWZvcmUoY29udHJpYnV0aW9uSUQsIGFjdGlvbik7CisJCQkJfQorCQkJCWVsc2UgeworCQkJCQltYW5hZ2VyLmFkZChhY3Rpb24pOworCQkJCX0KKwkJCX0KKwkJfQorCX0KKwkJCisJLyoqCisJICogVGhpcyByZW1vdmVzIGZyb20gdGhlIHNwZWNpZmllZCA8Y29kZT5tYW5hZ2VyPC9jb2RlPiBhbGwge0BsaW5rIG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5BY3Rpb25Db250cmlidXRpb25JdGVtfXMKKwkgKiBiYXNlZCBvbiB0aGUge0BsaW5rIG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JQWN0aW9ufXMgY29udGFpbmVkIGluIHRoZSA8Y29kZT5hY3Rpb25zPC9jb2RlPiBjb2xsZWN0aW9uLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIGRlcG9wdWxhdGVNYW5hZ2VyKElDb250cmlidXRpb25NYW5hZ2VyIG1hbmFnZXIsIENvbGxlY3Rpb248PyBleHRlbmRzIElBY3Rpb24+IGFjdGlvbnMpIHsKKwkJaWYgKGFjdGlvbnMgIT0gbnVsbCkgeworCQkJSUNvbnRyaWJ1dGlvbkl0ZW1bXSBpdGVtcyA9IG1hbmFnZXIuZ2V0SXRlbXMoKTsKKwkJCWZvciAoaW50IGkgPSAwOyBpIDwgaXRlbXMubGVuZ3RoOyBpKyspIHsKKwkJCQkvLyBMb29rIGludG8gU3ViQ29udHJpYnV0aW9uSXRlbXMKKwkJCQkvLworCQkJCUlDb250cmlidXRpb25JdGVtIGNvbnRyaWJ1dGlvbkl0ZW0gPSBpdGVtc1tpXTsKKwkJCQl3aGlsZSAoY29udHJpYnV0aW9uSXRlbSBpbnN0YW5jZW9mIFN1YkNvbnRyaWJ1dGlvbkl0ZW0pIHsKKwkJCQkJY29udHJpYnV0aW9uSXRlbSA9ICgoU3ViQ29udHJpYnV0aW9uSXRlbSljb250cmlidXRpb25JdGVtKS5nZXRJbm5lckl0ZW0oKTsKKwkJCQl9CisKKwkJCQkvLyBEZWxldGUgdGhlIEFjdGlvbkNvbnRyaWJ1dGlvbkl0ZW1zIHdpdGggbWF0Y2hpbmcgYWN0aW9uLgorCQkJCS8vCisJCQkJaWYgKGNvbnRyaWJ1dGlvbkl0ZW0gaW5zdGFuY2VvZiBBY3Rpb25Db250cmlidXRpb25JdGVtKSB7CisJCQkJCUlBY3Rpb24gYWN0aW9uID0gKChBY3Rpb25Db250cmlidXRpb25JdGVtKWNvbnRyaWJ1dGlvbkl0ZW0pLmdldEFjdGlvbigpOworCQkJCQlpZiAoYWN0aW9ucy5jb250YWlucyhhY3Rpb24pKSB7CisJCQkJCQltYW5hZ2VyLnJlbW92ZShjb250cmlidXRpb25JdGVtKTsKKwkJCQkJfQorCQkJCX0KKwkJCX0KKwkJfQorCX0KKworCS8qKgorCSAqIFRoaXMgcG9wdWxhdGVzIHRoZSBwb3AtdXAgbWVudSBiZWZvcmUgaXQgYXBwZWFycy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBtZW51QWJvdXRUb1Nob3coSU1lbnVNYW5hZ2VyIG1lbnVNYW5hZ2VyKSB7CisJCXN1cGVyLm1lbnVBYm91dFRvU2hvdyhtZW51TWFuYWdlcik7CisJCU1lbnVNYW5hZ2VyIHN1Ym1lbnVNYW5hZ2VyID0gbnVsbDsKKworCQlzdWJtZW51TWFuYWdlciA9IG5ldyBNZW51TWFuYWdlcihBbmFseXNpc0VkaXRQbHVnaW4uSU5TVEFOQ0UuZ2V0U3RyaW5nKCJfVUlfQ3JlYXRlQ2hpbGRfbWVudV9pdGVtIikpOworCQlwb3B1bGF0ZU1hbmFnZXIoc3VibWVudU1hbmFnZXIsIGNyZWF0ZUNoaWxkQWN0aW9ucywgbnVsbCk7CisJCW1lbnVNYW5hZ2VyLmluc2VydEJlZm9yZSgiZWRpdCIsIHN1Ym1lbnVNYW5hZ2VyKTsKKworCQlzdWJtZW51TWFuYWdlciA9IG5ldyBNZW51TWFuYWdlcihBbmFseXNpc0VkaXRQbHVnaW4uSU5TVEFOQ0UuZ2V0U3RyaW5nKCJfVUlfQ3JlYXRlU2libGluZ19tZW51X2l0ZW0iKSk7CisJCXBvcHVsYXRlTWFuYWdlcihzdWJtZW51TWFuYWdlciwgY3JlYXRlU2libGluZ0FjdGlvbnMsIG51bGwpOworCQltZW51TWFuYWdlci5pbnNlcnRCZWZvcmUoImVkaXQiLCBzdWJtZW51TWFuYWdlcik7CisJfQorCisJLyoqCisJICogVGhpcyBpbnNlcnRzIGdsb2JhbCBhY3Rpb25zIGJlZm9yZSB0aGUgImFkZGl0aW9ucy1lbmQiIHNlcGFyYXRvci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgdm9pZCBhZGRHbG9iYWxBY3Rpb25zKElNZW51TWFuYWdlciBtZW51TWFuYWdlcikgeworCQltZW51TWFuYWdlci5pbnNlcnRBZnRlcigiYWRkaXRpb25zLWVuZCIsIG5ldyBTZXBhcmF0b3IoInVpLWFjdGlvbnMiKSk7CisJCW1lbnVNYW5hZ2VyLmluc2VydEFmdGVyKCJ1aS1hY3Rpb25zIiwgc2hvd1Byb3BlcnRpZXNWaWV3QWN0aW9uKTsKKworCQlyZWZyZXNoVmlld2VyQWN0aW9uLnNldEVuYWJsZWQocmVmcmVzaFZpZXdlckFjdGlvbi5pc0VuYWJsZWQoKSk7CQkKKwkJbWVudU1hbmFnZXIuaW5zZXJ0QWZ0ZXIoInVpLWFjdGlvbnMiLCByZWZyZXNoVmlld2VyQWN0aW9uKTsKKworCQlzdXBlci5hZGRHbG9iYWxBY3Rpb25zKG1lbnVNYW5hZ2VyKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGVuc3VyZXMgdGhhdCBhIGRlbGV0ZSBhY3Rpb24gd2lsbCBjbGVhbiB1cCBhbGwgcmVmZXJlbmNlcyB0byBkZWxldGVkIG9iamVjdHMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIGJvb2xlYW4gcmVtb3ZlQWxsUmVmZXJlbmNlc09uRGVsZXRlKCkgeworCQlyZXR1cm4gdHJ1ZTsKKwl9CisKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2FuYWx5c2lzL3ByZXNlbnRhdGlvbi9BbmFseXNpc0VkaXRvci5qYXZhIGIvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9hbmFseXNpcy9wcmVzZW50YXRpb24vQW5hbHlzaXNFZGl0b3IuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YjMwNGZiCi0tLSAvZGV2L251bGwKKysrIGIvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9hbmFseXNpcy9wcmVzZW50YXRpb24vQW5hbHlzaXNFZGl0b3IuamF2YQpAQCAtMCwwICsxLDE3ODMgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5wcmVzZW50YXRpb247CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIAorICogQ29weXJpZ2h0IChjKSAyMDExIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiAKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdCAKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sIAorICogCisgKiBDb250cmlidXRvcnM6IAorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiAKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtOworaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7CitpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247CitpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb25zOworaW1wb3J0IGphdmEudXRpbC5FdmVudE9iamVjdDsKK2ltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKK2ltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7CitpbXBvcnQgamF2YS51dGlsLkxpbmtlZEhhc2hNYXA7CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CitpbXBvcnQgamF2YS51dGlsLk1hcDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklGaWxlOworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklNYXJrZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVJlc291cmNlOworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklSZXNvdXJjZUNoYW5nZUV2ZW50OworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklSZXNvdXJjZUNoYW5nZUxpc3RlbmVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklSZXNvdXJjZURlbHRhOworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklSZXNvdXJjZURlbHRhVmlzaXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5SZXNvdXJjZXNQbHVnaW47CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkNvcmVFeGNlcHRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQYXRoOworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUHJvZ3Jlc3NNb25pdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5OdWxsUHJvZ3Jlc3NNb25pdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24uY29tbWFuZC5CYXNpY0NvbW1hbmRTdGFjazsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLmNvbW1hbmQuQ29tbWFuZDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLmNvbW1hbmQuQ29tbWFuZFN0YWNrOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24uY29tbWFuZC5Db21tYW5kU3RhY2tMaXN0ZW5lcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5BZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51aS5NYXJrZXJIZWxwZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51aS5WaWV3ZXJQYW5lOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udWkuZWRpdG9yLlByb2JsZW1FZGl0b3JQYXJ0OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udWkudmlld2VyLklWaWV3ZXJQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuQmFzaWNEaWFnbm9zdGljOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5EaWFnbm9zdGljOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5VUkk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3Q7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVWYWxpZGF0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnJlc291cmNlLlJlc291cmNlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5yZXNvdXJjZS5SZXNvdXJjZVNldDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUudXRpbC5FQ29udGVudEFkYXB0ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnV0aWwuRWNvcmVVdGlsOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LmRvbWFpbi5BZGFwdGVyRmFjdG9yeUVkaXRpbmdEb21haW47CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQuZG9tYWluLkVkaXRpbmdEb21haW47CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQuZG9tYWluLklFZGl0aW5nRG9tYWluUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuQWRhcHRlckZhY3RvcnlJdGVtRGVsZWdhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkNvbXBvc2VkQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuUmVmbGVjdGl2ZUl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLnJlc291cmNlLlJlc291cmNlSXRlbVByb3ZpZGVyQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkuYWN0aW9uLkVkaXRpbmdEb21haW5BY3Rpb25CYXJDb250cmlidXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5jZWxsZWRpdG9yLkFkYXB0ZXJGYWN0b3J5VHJlZUVkaXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5kbmQuRWRpdGluZ0RvbWFpblZpZXdlckRyb3BBZGFwdGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmRuZC5Mb2NhbFRyYW5zZmVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmRuZC5WaWV3ZXJEcmFnQWRhcHRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5wcm92aWRlci5BZGFwdGVyRmFjdG9yeUNvbnRlbnRQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5wcm92aWRlci5BZGFwdGVyRmFjdG9yeUxhYmVsUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkucHJvdmlkZXIuVW53cmFwcGluZ1NlbGVjdGlvblByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLnV0aWwuRWRpdFVJTWFya2VySGVscGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLnV0aWwuRWRpdFVJVXRpbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS52aWV3LkV4dGVuZGVkUHJvcGVydHlTaGVldFBhZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklNZW51TGlzdGVuZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklNZW51TWFuYWdlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSVN0YXR1c0xpbmVNYW5hZ2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JVG9vbEJhck1hbmFnZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLk1lbnVNYW5hZ2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5TZXBhcmF0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuZGlhbG9ncy5NZXNzYWdlRGlhbG9nOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmRpYWxvZ3MuUHJvZ3Jlc3NNb25pdG9yRGlhbG9nOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuQ29sdW1uV2VpZ2h0RGF0YTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvblByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVN0cnVjdHVyZWRTZWxlY3Rpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5MaXN0Vmlld2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuU2VsZWN0aW9uQ2hhbmdlZEV2ZW50OworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuU3RydWN0dXJlZFNlbGVjdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlN0cnVjdHVyZWRWaWV3ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5UYWJsZUxheW91dDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlRhYmxlVmlld2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuVHJlZVZpZXdlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlZpZXdlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLnByb3ZpZGVyLkFuYWx5c2lzRWRpdFBsdWdpbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLnByb3ZpZGVyLkFuYWx5c2lzSXRlbVByb3ZpZGVyQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LlNXVDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuY3VzdG9tLkNUYWJGb2xkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmRuZC5ETkQ7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmRuZC5UcmFuc2ZlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLkNvbnRyb2xBZGFwdGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuQ29udHJvbEV2ZW50OworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ncmFwaGljcy5Qb2ludDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QubGF5b3V0LkZpbGxMYXlvdXQ7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLk1lbnU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuVGFibGU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuVGFibGVDb2x1bW47CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuVHJlZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5UcmVlQ29sdW1uOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklBY3Rpb25CYXJzOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklFZGl0b3JJbnB1dDsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5JRWRpdG9yUGFydDsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5JRWRpdG9yU2l0ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5JUGFydExpc3RlbmVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2hQYXJ0OworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLlBhcnRJbml0RXhjZXB0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLmFjdGlvbnMuV29ya3NwYWNlTW9kaWZ5T3BlcmF0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLmRpYWxvZ3MuU2F2ZUFzRGlhbG9nOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLmlkZS5JR290b01hcmtlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5wYXJ0LkZpbGVFZGl0b3JJbnB1dDsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5wYXJ0Lk11bHRpUGFnZUVkaXRvclBhcnQ7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkudmlld3MuY29udGVudG91dGxpbmUuQ29udGVudE91dGxpbmU7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkudmlld3MuY29udGVudG91dGxpbmUuQ29udGVudE91dGxpbmVQYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLnZpZXdzLmNvbnRlbnRvdXRsaW5lLklDb250ZW50T3V0bGluZVBhZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkudmlld3MucHJvcGVydGllcy5JUHJvcGVydHlTaGVldFBhZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkudmlld3MucHJvcGVydGllcy5Qcm9wZXJ0eVNoZWV0OworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLnZpZXdzLnByb3BlcnRpZXMuUHJvcGVydHlTaGVldFBhZ2U7CisKKworLyoqCisgKiBUaGlzIGlzIGFuIGV4YW1wbGUgb2YgYSBBbmFseXNpcyBtb2RlbCBlZGl0b3IuCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBBbmFseXNpc0VkaXRvcgorCWV4dGVuZHMgTXVsdGlQYWdlRWRpdG9yUGFydAorCWltcGxlbWVudHMgSUVkaXRpbmdEb21haW5Qcm92aWRlciwgSVNlbGVjdGlvblByb3ZpZGVyLCBJTWVudUxpc3RlbmVyLCBJVmlld2VyUHJvdmlkZXIsIElHb3RvTWFya2VyIHsKKwkvKioKKwkgKiBUaGlzIGtlZXBzIHRyYWNrIG9mIHRoZSBlZGl0aW5nIGRvbWFpbiB0aGF0IGlzIHVzZWQgdG8gdHJhY2sgYWxsIGNoYW5nZXMgdG8gdGhlIG1vZGVsLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBBZGFwdGVyRmFjdG9yeUVkaXRpbmdEb21haW4gZWRpdGluZ0RvbWFpbjsKKworCS8qKgorCSAqIFRoaXMgaXMgdGhlIG9uZSBhZGFwdGVyIGZhY3RvcnkgdXNlZCBmb3IgcHJvdmlkaW5nIHZpZXdzIG9mIHRoZSBtb2RlbC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgQ29tcG9zZWRBZGFwdGVyRmFjdG9yeSBhZGFwdGVyRmFjdG9yeTsKKworCS8qKgorCSAqIFRoaXMgaXMgdGhlIGNvbnRlbnQgb3V0bGluZSBwYWdlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBJQ29udGVudE91dGxpbmVQYWdlIGNvbnRlbnRPdXRsaW5lUGFnZTsKKworCS8qKgorCSAqIFRoaXMgaXMgYSBrbHVkZ2UuLi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgSVN0YXR1c0xpbmVNYW5hZ2VyIGNvbnRlbnRPdXRsaW5lU3RhdHVzTGluZU1hbmFnZXI7CisKKwkvKioKKwkgKiBUaGlzIGlzIHRoZSBjb250ZW50IG91dGxpbmUgcGFnZSdzIHZpZXdlci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgVHJlZVZpZXdlciBjb250ZW50T3V0bGluZVZpZXdlcjsKKworCS8qKgorCSAqIFRoaXMgaXMgdGhlIHByb3BlcnR5IHNoZWV0IHBhZ2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIFByb3BlcnR5U2hlZXRQYWdlIHByb3BlcnR5U2hlZXRQYWdlOworCisJLyoqCisJICogVGhpcyBpcyB0aGUgdmlld2VyIHRoYXQgc2hhZG93cyB0aGUgc2VsZWN0aW9uIGluIHRoZSBjb250ZW50IG91dGxpbmUuCisJICogVGhlIHBhcmVudCByZWxhdGlvbiBtdXN0IGJlIGNvcnJlY3RseSBkZWZpbmVkIGZvciB0aGlzIHRvIHdvcmsuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIFRyZWVWaWV3ZXIgc2VsZWN0aW9uVmlld2VyOworCisJLyoqCisJICogVGhpcyBpbnZlcnRzIHRoZSByb2xsIG9mIHBhcmVudCBhbmQgY2hpbGQgaW4gdGhlIGNvbnRlbnQgcHJvdmlkZXIgYW5kIHNob3cgcGFyZW50cyBhcyBhIHRyZWUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIFRyZWVWaWV3ZXIgcGFyZW50Vmlld2VyOworCisJLyoqCisJICogVGhpcyBzaG93cyBob3cgYSB0cmVlIHZpZXcgd29ya3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIFRyZWVWaWV3ZXIgdHJlZVZpZXdlcjsKKworCS8qKgorCSAqIFRoaXMgc2hvd3MgaG93IGEgbGlzdCB2aWV3IHdvcmtzLgorCSAqIEEgbGlzdCB2aWV3ZXIgZG9lc24ndCBzdXBwb3J0IGljb25zLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBMaXN0Vmlld2VyIGxpc3RWaWV3ZXI7CisKKwkvKioKKwkgKiBUaGlzIHNob3dzIGhvdyBhIHRhYmxlIHZpZXcgd29ya3MuCisJICogQSB0YWJsZSBjYW4gYmUgdXNlZCBhcyBhIGxpc3Qgd2l0aCBpY29ucy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgVGFibGVWaWV3ZXIgdGFibGVWaWV3ZXI7CisKKwkvKioKKwkgKiBUaGlzIHNob3dzIGhvdyBhIHRyZWUgdmlldyB3aXRoIGNvbHVtbnMgd29ya3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIFRyZWVWaWV3ZXIgdHJlZVZpZXdlcldpdGhDb2x1bW5zOworCisJLyoqCisJICogVGhpcyBrZWVwcyB0cmFjayBvZiB0aGUgYWN0aXZlIHZpZXdlciBwYW5lLCBpbiB0aGUgYm9vay4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgVmlld2VyUGFuZSBjdXJyZW50Vmlld2VyUGFuZTsKKworCS8qKgorCSAqIFRoaXMga2VlcHMgdHJhY2sgb2YgdGhlIGFjdGl2ZSBjb250ZW50IHZpZXdlciwgd2hpY2ggbWF5IGJlIGVpdGhlciBvbmUgb2YgdGhlIHZpZXdlcnMgaW4gdGhlIHBhZ2VzIG9yIHRoZSBjb250ZW50IG91dGxpbmUgdmlld2VyLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBWaWV3ZXIgY3VycmVudFZpZXdlcjsKKworCS8qKgorCSAqIFRoaXMgbGlzdGVucyB0byB3aGljaCBldmVyIHZpZXdlciBpcyBhY3RpdmUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIElTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIgc2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyOworCisJLyoqCisJICogVGhpcyBrZWVwcyB0cmFjayBvZiBhbGwgdGhlIHtAbGluayBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXJ9cyB0aGF0IGFyZSBsaXN0ZW5pbmcgdG8gdGhpcyBlZGl0b3IuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIENvbGxlY3Rpb248SVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcj4gc2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVycyA9IG5ldyBBcnJheUxpc3Q8SVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcj4oKTsKKworCS8qKgorCSAqIFRoaXMga2VlcHMgdHJhY2sgb2YgdGhlIHNlbGVjdGlvbiBvZiB0aGUgZWRpdG9yIGFzIGEgd2hvbGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIElTZWxlY3Rpb24gZWRpdG9yU2VsZWN0aW9uID0gU3RydWN0dXJlZFNlbGVjdGlvbi5FTVBUWTsKKworCS8qKgorCSAqIFRoZSBNYXJrZXJIZWxwZXIgaXMgcmVzcG9uc2libGUgZm9yIGNyZWF0aW5nIHdvcmtzcGFjZSByZXNvdXJjZSBtYXJrZXJzIHByZXNlbnRlZAorCSAqIGluIEVjbGlwc2UncyBQcm9ibGVtcyBWaWV3LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBNYXJrZXJIZWxwZXIgbWFya2VySGVscGVyID0gbmV3IEVkaXRVSU1hcmtlckhlbHBlcigpOworCisJLyoqCisJICogVGhpcyBsaXN0ZW5zIGZvciB3aGVuIHRoZSBvdXRsaW5lIGJlY29tZXMgYWN0aXZlCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIElQYXJ0TGlzdGVuZXIgcGFydExpc3RlbmVyID0KKwkJbmV3IElQYXJ0TGlzdGVuZXIoKSB7CisJCQlwdWJsaWMgdm9pZCBwYXJ0QWN0aXZhdGVkKElXb3JrYmVuY2hQYXJ0IHApIHsKKwkJCQlpZiAocCBpbnN0YW5jZW9mIENvbnRlbnRPdXRsaW5lKSB7CisJCQkJCWlmICgoKENvbnRlbnRPdXRsaW5lKXApLmdldEN1cnJlbnRQYWdlKCkgPT0gY29udGVudE91dGxpbmVQYWdlKSB7CisJCQkJCQlnZXRBY3Rpb25CYXJDb250cmlidXRvcigpLnNldEFjdGl2ZUVkaXRvcihBbmFseXNpc0VkaXRvci50aGlzKTsKKworCQkJCQkJc2V0Q3VycmVudFZpZXdlcihjb250ZW50T3V0bGluZVZpZXdlcik7CisJCQkJCX0KKwkJCQl9CisJCQkJZWxzZSBpZiAocCBpbnN0YW5jZW9mIFByb3BlcnR5U2hlZXQpIHsKKwkJCQkJaWYgKCgoUHJvcGVydHlTaGVldClwKS5nZXRDdXJyZW50UGFnZSgpID09IHByb3BlcnR5U2hlZXRQYWdlKSB7CisJCQkJCQlnZXRBY3Rpb25CYXJDb250cmlidXRvcigpLnNldEFjdGl2ZUVkaXRvcihBbmFseXNpc0VkaXRvci50aGlzKTsKKwkJCQkJCWhhbmRsZUFjdGl2YXRlKCk7CisJCQkJCX0KKwkJCQl9CisJCQkJZWxzZSBpZiAocCA9PSBBbmFseXNpc0VkaXRvci50aGlzKSB7CisJCQkJCWhhbmRsZUFjdGl2YXRlKCk7CisJCQkJfQorCQkJfQorCQkJcHVibGljIHZvaWQgcGFydEJyb3VnaHRUb1RvcChJV29ya2JlbmNoUGFydCBwKSB7CisJCQkJLy8gSWdub3JlLgorCQkJfQorCQkJcHVibGljIHZvaWQgcGFydENsb3NlZChJV29ya2JlbmNoUGFydCBwKSB7CisJCQkJLy8gSWdub3JlLgorCQkJfQorCQkJcHVibGljIHZvaWQgcGFydERlYWN0aXZhdGVkKElXb3JrYmVuY2hQYXJ0IHApIHsKKwkJCQkvLyBJZ25vcmUuCisJCQl9CisJCQlwdWJsaWMgdm9pZCBwYXJ0T3BlbmVkKElXb3JrYmVuY2hQYXJ0IHApIHsKKwkJCQkvLyBJZ25vcmUuCisJCQl9CisJCX07CisKKwkvKioKKwkgKiBSZXNvdXJjZXMgdGhhdCBoYXZlIGJlZW4gcmVtb3ZlZCBzaW5jZSBsYXN0IGFjdGl2YXRpb24uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIENvbGxlY3Rpb248UmVzb3VyY2U+IHJlbW92ZWRSZXNvdXJjZXMgPSBuZXcgQXJyYXlMaXN0PFJlc291cmNlPigpOworCisJLyoqCisJICogUmVzb3VyY2VzIHRoYXQgaGF2ZSBiZWVuIGNoYW5nZWQgc2luY2UgbGFzdCBhY3RpdmF0aW9uLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBDb2xsZWN0aW9uPFJlc291cmNlPiBjaGFuZ2VkUmVzb3VyY2VzID0gbmV3IEFycmF5TGlzdDxSZXNvdXJjZT4oKTsKKworCS8qKgorCSAqIFJlc291cmNlcyB0aGF0IGhhdmUgYmVlbiBzYXZlZC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgQ29sbGVjdGlvbjxSZXNvdXJjZT4gc2F2ZWRSZXNvdXJjZXMgPSBuZXcgQXJyYXlMaXN0PFJlc291cmNlPigpOworCisJLyoqCisJICogTWFwIHRvIHN0b3JlIHRoZSBkaWFnbm9zdGljIGFzc29jaWF0ZWQgd2l0aCBhIHJlc291cmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBNYXA8UmVzb3VyY2UsIERpYWdub3N0aWM+IHJlc291cmNlVG9EaWFnbm9zdGljTWFwID0gbmV3IExpbmtlZEhhc2hNYXA8UmVzb3VyY2UsIERpYWdub3N0aWM+KCk7CisKKwkvKioKKwkgKiBDb250cm9scyB3aGV0aGVyIHRoZSBwcm9ibGVtIGluZGljYXRpb24gc2hvdWxkIGJlIHVwZGF0ZWQuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIGJvb2xlYW4gdXBkYXRlUHJvYmxlbUluZGljYXRpb24gPSB0cnVlOworCisJLyoqCisJICogQWRhcHRlciB1c2VkIHRvIHVwZGF0ZSB0aGUgcHJvYmxlbSBpbmRpY2F0aW9uIHdoZW4gcmVzb3VyY2VzIGFyZSBkZW1hbmRlZCBsb2FkZWQuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIEVDb250ZW50QWRhcHRlciBwcm9ibGVtSW5kaWNhdGlvbkFkYXB0ZXIgPSAKKwkJbmV3IEVDb250ZW50QWRhcHRlcigpIHsKKwkJCUBPdmVycmlkZQorCQkJcHVibGljIHZvaWQgbm90aWZ5Q2hhbmdlZChOb3RpZmljYXRpb24gbm90aWZpY2F0aW9uKSB7CisJCQkJaWYgKG5vdGlmaWNhdGlvbi5nZXROb3RpZmllcigpIGluc3RhbmNlb2YgUmVzb3VyY2UpIHsKKwkJCQkJc3dpdGNoIChub3RpZmljYXRpb24uZ2V0RmVhdHVyZUlEKFJlc291cmNlLmNsYXNzKSkgeworCQkJCQkJY2FzZSBSZXNvdXJjZS5SRVNPVVJDRV9fSVNfTE9BREVEOgorCQkJCQkJY2FzZSBSZXNvdXJjZS5SRVNPVVJDRV9fRVJST1JTOgorCQkJCQkJY2FzZSBSZXNvdXJjZS5SRVNPVVJDRV9fV0FSTklOR1M6IHsKKwkJCQkJCQlSZXNvdXJjZSByZXNvdXJjZSA9IChSZXNvdXJjZSlub3RpZmljYXRpb24uZ2V0Tm90aWZpZXIoKTsKKwkJCQkJCQlEaWFnbm9zdGljIGRpYWdub3N0aWMgPSBhbmFseXplUmVzb3VyY2VQcm9ibGVtcyhyZXNvdXJjZSwgbnVsbCk7CisJCQkJCQkJaWYgKGRpYWdub3N0aWMuZ2V0U2V2ZXJpdHkoKSAhPSBEaWFnbm9zdGljLk9LKSB7CisJCQkJCQkJCXJlc291cmNlVG9EaWFnbm9zdGljTWFwLnB1dChyZXNvdXJjZSwgZGlhZ25vc3RpYyk7CisJCQkJCQkJfQorCQkJCQkJCWVsc2UgeworCQkJCQkJCQlyZXNvdXJjZVRvRGlhZ25vc3RpY01hcC5yZW1vdmUocmVzb3VyY2UpOworCQkJCQkJCX0KKworCQkJCQkJCWlmICh1cGRhdGVQcm9ibGVtSW5kaWNhdGlvbikgeworCQkJCQkJCQlnZXRTaXRlKCkuZ2V0U2hlbGwoKS5nZXREaXNwbGF5KCkuYXN5bmNFeGVjCisJCQkJCQkJCQkobmV3IFJ1bm5hYmxlKCkgeworCQkJCQkJCQkJCSBwdWJsaWMgdm9pZCBydW4oKSB7CisJCQkJCQkJCQkJCSB1cGRhdGVQcm9ibGVtSW5kaWNhdGlvbigpOworCQkJCQkJCQkJCSB9CisJCQkJCQkJCQkgfSk7CisJCQkJCQkJfQorCQkJCQkJCWJyZWFrOworCQkJCQkJfQorCQkJCQl9CisJCQkJfQorCQkJCWVsc2UgeworCQkJCQlzdXBlci5ub3RpZnlDaGFuZ2VkKG5vdGlmaWNhdGlvbik7CisJCQkJfQorCQkJfQorCisJCQlAT3ZlcnJpZGUKKwkJCXByb3RlY3RlZCB2b2lkIHNldFRhcmdldChSZXNvdXJjZSB0YXJnZXQpIHsKKwkJCQliYXNpY1NldFRhcmdldCh0YXJnZXQpOworCQkJfQorCisJCQlAT3ZlcnJpZGUKKwkJCXByb3RlY3RlZCB2b2lkIHVuc2V0VGFyZ2V0KFJlc291cmNlIHRhcmdldCkgeworCQkJCWJhc2ljVW5zZXRUYXJnZXQodGFyZ2V0KTsKKwkJCX0KKwkJfTsKKworCS8qKgorCSAqIFRoaXMgbGlzdGVucyBmb3Igd29ya3NwYWNlIGNoYW5nZXMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIElSZXNvdXJjZUNoYW5nZUxpc3RlbmVyIHJlc291cmNlQ2hhbmdlTGlzdGVuZXIgPQorCQluZXcgSVJlc291cmNlQ2hhbmdlTGlzdGVuZXIoKSB7CisJCQlwdWJsaWMgdm9pZCByZXNvdXJjZUNoYW5nZWQoSVJlc291cmNlQ2hhbmdlRXZlbnQgZXZlbnQpIHsKKwkJCQlJUmVzb3VyY2VEZWx0YSBkZWx0YSA9IGV2ZW50LmdldERlbHRhKCk7CisJCQkJdHJ5IHsKKwkJCQkJY2xhc3MgUmVzb3VyY2VEZWx0YVZpc2l0b3IgaW1wbGVtZW50cyBJUmVzb3VyY2VEZWx0YVZpc2l0b3IgeworCQkJCQkJcHJvdGVjdGVkIFJlc291cmNlU2V0IHJlc291cmNlU2V0ID0gZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpOworCQkJCQkJcHJvdGVjdGVkIENvbGxlY3Rpb248UmVzb3VyY2U+IGNoYW5nZWRSZXNvdXJjZXMgPSBuZXcgQXJyYXlMaXN0PFJlc291cmNlPigpOworCQkJCQkJcHJvdGVjdGVkIENvbGxlY3Rpb248UmVzb3VyY2U+IHJlbW92ZWRSZXNvdXJjZXMgPSBuZXcgQXJyYXlMaXN0PFJlc291cmNlPigpOworCisJCQkJCQlwdWJsaWMgYm9vbGVhbiB2aXNpdChJUmVzb3VyY2VEZWx0YSBkZWx0YSkgeworCQkJCQkJCWlmIChkZWx0YS5nZXRSZXNvdXJjZSgpLmdldFR5cGUoKSA9PSBJUmVzb3VyY2UuRklMRSkgeworCQkJCQkJCQlpZiAoZGVsdGEuZ2V0S2luZCgpID09IElSZXNvdXJjZURlbHRhLlJFTU9WRUQgfHwKKwkJCQkJCQkJICAgIGRlbHRhLmdldEtpbmQoKSA9PSBJUmVzb3VyY2VEZWx0YS5DSEFOR0VEICYmIGRlbHRhLmdldEZsYWdzKCkgIT0gSVJlc291cmNlRGVsdGEuTUFSS0VSUykgeworCQkJCQkJCQkJUmVzb3VyY2UgcmVzb3VyY2UgPSByZXNvdXJjZVNldC5nZXRSZXNvdXJjZShVUkkuY3JlYXRlUGxhdGZvcm1SZXNvdXJjZVVSSShkZWx0YS5nZXRGdWxsUGF0aCgpLnRvU3RyaW5nKCksIHRydWUpLCBmYWxzZSk7CisJCQkJCQkJCQlpZiAocmVzb3VyY2UgIT0gbnVsbCkgeworCQkJCQkJCQkJCWlmIChkZWx0YS5nZXRLaW5kKCkgPT0gSVJlc291cmNlRGVsdGEuUkVNT1ZFRCkgeworCQkJCQkJCQkJCQlyZW1vdmVkUmVzb3VyY2VzLmFkZChyZXNvdXJjZSk7CisJCQkJCQkJCQkJfQorCQkJCQkJCQkJCWVsc2UgaWYgKCFzYXZlZFJlc291cmNlcy5yZW1vdmUocmVzb3VyY2UpKSB7CisJCQkJCQkJCQkJCWNoYW5nZWRSZXNvdXJjZXMuYWRkKHJlc291cmNlKTsKKwkJCQkJCQkJCQl9CisJCQkJCQkJCQl9CisJCQkJCQkJCX0KKwkJCQkJCQl9CisKKwkJCQkJCQlyZXR1cm4gdHJ1ZTsKKwkJCQkJCX0KKworCQkJCQkJcHVibGljIENvbGxlY3Rpb248UmVzb3VyY2U+IGdldENoYW5nZWRSZXNvdXJjZXMoKSB7CisJCQkJCQkJcmV0dXJuIGNoYW5nZWRSZXNvdXJjZXM7CisJCQkJCQl9CisKKwkJCQkJCXB1YmxpYyBDb2xsZWN0aW9uPFJlc291cmNlPiBnZXRSZW1vdmVkUmVzb3VyY2VzKCkgeworCQkJCQkJCXJldHVybiByZW1vdmVkUmVzb3VyY2VzOworCQkJCQkJfQorCQkJCQl9CisKKwkJCQkJZmluYWwgUmVzb3VyY2VEZWx0YVZpc2l0b3IgdmlzaXRvciA9IG5ldyBSZXNvdXJjZURlbHRhVmlzaXRvcigpOworCQkJCQlkZWx0YS5hY2NlcHQodmlzaXRvcik7CisKKwkJCQkJaWYgKCF2aXNpdG9yLmdldFJlbW92ZWRSZXNvdXJjZXMoKS5pc0VtcHR5KCkpIHsKKwkJCQkJCWdldFNpdGUoKS5nZXRTaGVsbCgpLmdldERpc3BsYXkoKS5hc3luY0V4ZWMKKwkJCQkJCQkobmV3IFJ1bm5hYmxlKCkgeworCQkJCQkJCQkgcHVibGljIHZvaWQgcnVuKCkgeworCQkJCQkJCQkJIHJlbW92ZWRSZXNvdXJjZXMuYWRkQWxsKHZpc2l0b3IuZ2V0UmVtb3ZlZFJlc291cmNlcygpKTsKKwkJCQkJCQkJCSBpZiAoIWlzRGlydHkoKSkgeworCQkJCQkJCQkJCSBnZXRTaXRlKCkuZ2V0UGFnZSgpLmNsb3NlRWRpdG9yKEFuYWx5c2lzRWRpdG9yLnRoaXMsIGZhbHNlKTsKKwkJCQkJCQkJCSB9CisJCQkJCQkJCSB9CisJCQkJCQkJIH0pOworCQkJCQl9CisKKwkJCQkJaWYgKCF2aXNpdG9yLmdldENoYW5nZWRSZXNvdXJjZXMoKS5pc0VtcHR5KCkpIHsKKwkJCQkJCWdldFNpdGUoKS5nZXRTaGVsbCgpLmdldERpc3BsYXkoKS5hc3luY0V4ZWMKKwkJCQkJCQkobmV3IFJ1bm5hYmxlKCkgeworCQkJCQkJCQkgcHVibGljIHZvaWQgcnVuKCkgeworCQkJCQkJCQkJIGNoYW5nZWRSZXNvdXJjZXMuYWRkQWxsKHZpc2l0b3IuZ2V0Q2hhbmdlZFJlc291cmNlcygpKTsKKwkJCQkJCQkJCSBpZiAoZ2V0U2l0ZSgpLmdldFBhZ2UoKS5nZXRBY3RpdmVFZGl0b3IoKSA9PSBBbmFseXNpc0VkaXRvci50aGlzKSB7CisJCQkJCQkJCQkJIGhhbmRsZUFjdGl2YXRlKCk7CisJCQkJCQkJCQkgfQorCQkJCQkJCQkgfQorCQkJCQkJCSB9KTsKKwkJCQkJfQorCQkJCX0KKwkJCQljYXRjaCAoQ29yZUV4Y2VwdGlvbiBleGNlcHRpb24pIHsKKwkJCQkJQW5hbHlzaXNFZGl0UGx1Z2luLklOU1RBTkNFLmxvZyhleGNlcHRpb24pOworCQkJCX0KKwkJCX0KKwkJfTsKKworCS8qKgorCSAqIEhhbmRsZXMgYWN0aXZhdGlvbiBvZiB0aGUgZWRpdG9yIG9yIGl0J3MgYXNzb2NpYXRlZCB2aWV3cy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBoYW5kbGVBY3RpdmF0ZSgpIHsKKwkJLy8gUmVjb21wdXRlIHRoZSByZWFkIG9ubHkgc3RhdGUuCisJCS8vCisJCWlmIChlZGl0aW5nRG9tYWluLmdldFJlc291cmNlVG9SZWFkT25seU1hcCgpICE9IG51bGwpIHsKKwkJICBlZGl0aW5nRG9tYWluLmdldFJlc291cmNlVG9SZWFkT25seU1hcCgpLmNsZWFyKCk7CisKKwkJICAvLyBSZWZyZXNoIGFueSBhY3Rpb25zIHRoYXQgbWF5IGJlY29tZSBlbmFibGVkIG9yIGRpc2FibGVkLgorCQkgIC8vCisJCSAgc2V0U2VsZWN0aW9uKGdldFNlbGVjdGlvbigpKTsKKwkJfQorCisJCWlmICghcmVtb3ZlZFJlc291cmNlcy5pc0VtcHR5KCkpIHsKKwkJCWlmIChoYW5kbGVEaXJ0eUNvbmZsaWN0KCkpIHsKKwkJCQlnZXRTaXRlKCkuZ2V0UGFnZSgpLmNsb3NlRWRpdG9yKEFuYWx5c2lzRWRpdG9yLnRoaXMsIGZhbHNlKTsKKwkJCX0KKwkJCWVsc2UgeworCQkJCXJlbW92ZWRSZXNvdXJjZXMuY2xlYXIoKTsKKwkJCQljaGFuZ2VkUmVzb3VyY2VzLmNsZWFyKCk7CisJCQkJc2F2ZWRSZXNvdXJjZXMuY2xlYXIoKTsKKwkJCX0KKwkJfQorCQllbHNlIGlmICghY2hhbmdlZFJlc291cmNlcy5pc0VtcHR5KCkpIHsKKwkJCWNoYW5nZWRSZXNvdXJjZXMucmVtb3ZlQWxsKHNhdmVkUmVzb3VyY2VzKTsKKwkJCWhhbmRsZUNoYW5nZWRSZXNvdXJjZXMoKTsKKwkJCWNoYW5nZWRSZXNvdXJjZXMuY2xlYXIoKTsKKwkJCXNhdmVkUmVzb3VyY2VzLmNsZWFyKCk7CisJCX0KKwl9CisKKwkvKioKKwkgKiBIYW5kbGVzIHdoYXQgdG8gZG8gd2l0aCBjaGFuZ2VkIHJlc291cmNlcyBvbiBhY3RpdmF0aW9uLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIGhhbmRsZUNoYW5nZWRSZXNvdXJjZXMoKSB7CisJCWlmICghY2hhbmdlZFJlc291cmNlcy5pc0VtcHR5KCkgJiYgKCFpc0RpcnR5KCkgfHwgaGFuZGxlRGlydHlDb25mbGljdCgpKSkgeworCQkJaWYgKGlzRGlydHkoKSkgeworCQkJCWNoYW5nZWRSZXNvdXJjZXMuYWRkQWxsKGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKS5nZXRSZXNvdXJjZXMoKSk7CisJCQl9CisJCQllZGl0aW5nRG9tYWluLmdldENvbW1hbmRTdGFjaygpLmZsdXNoKCk7CisKKwkJCXVwZGF0ZVByb2JsZW1JbmRpY2F0aW9uID0gZmFsc2U7CisJCQlmb3IgKFJlc291cmNlIHJlc291cmNlIDogY2hhbmdlZFJlc291cmNlcykgeworCQkJCWlmIChyZXNvdXJjZS5pc0xvYWRlZCgpKSB7CisJCQkJCXJlc291cmNlLnVubG9hZCgpOworCQkJCQl0cnkgeworCQkJCQkJcmVzb3VyY2UubG9hZChDb2xsZWN0aW9ucy5FTVBUWV9NQVApOworCQkJCQl9CisJCQkJCWNhdGNoIChJT0V4Y2VwdGlvbiBleGNlcHRpb24pIHsKKwkJCQkJCWlmICghcmVzb3VyY2VUb0RpYWdub3N0aWNNYXAuY29udGFpbnNLZXkocmVzb3VyY2UpKSB7CisJCQkJCQkJcmVzb3VyY2VUb0RpYWdub3N0aWNNYXAucHV0KHJlc291cmNlLCBhbmFseXplUmVzb3VyY2VQcm9ibGVtcyhyZXNvdXJjZSwgZXhjZXB0aW9uKSk7CisJCQkJCQl9CisJCQkJCX0KKwkJCQl9CisJCQl9CisKKwkJCWlmIChBZGFwdGVyRmFjdG9yeUVkaXRpbmdEb21haW4uaXNTdGFsZShlZGl0b3JTZWxlY3Rpb24pKSB7CisJCQkJc2V0U2VsZWN0aW9uKFN0cnVjdHVyZWRTZWxlY3Rpb24uRU1QVFkpOworCQkJfQorCisJCQl1cGRhdGVQcm9ibGVtSW5kaWNhdGlvbiA9IHRydWU7CisJCQl1cGRhdGVQcm9ibGVtSW5kaWNhdGlvbigpOworCQl9CisJfQorICAKKwkvKioKKwkgKiBVcGRhdGVzIHRoZSBwcm9ibGVtcyBpbmRpY2F0aW9uIHdpdGggdGhlIGluZm9ybWF0aW9uIGRlc2NyaWJlZCBpbiB0aGUgc3BlY2lmaWVkIGRpYWdub3N0aWMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgdXBkYXRlUHJvYmxlbUluZGljYXRpb24oKSB7CisJCWlmICh1cGRhdGVQcm9ibGVtSW5kaWNhdGlvbikgeworCQkJQmFzaWNEaWFnbm9zdGljIGRpYWdub3N0aWMgPQorCQkJCW5ldyBCYXNpY0RpYWdub3N0aWMKKwkJCQkJKERpYWdub3N0aWMuT0ssCisJCQkJCSAib3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcyIsCisJCQkJCSAwLAorCQkJCQkgbnVsbCwKKwkJCQkJIG5ldyBPYmplY3QgW10geyBlZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkgfSk7CisJCQlmb3IgKERpYWdub3N0aWMgY2hpbGREaWFnbm9zdGljIDogcmVzb3VyY2VUb0RpYWdub3N0aWNNYXAudmFsdWVzKCkpIHsKKwkJCQlpZiAoY2hpbGREaWFnbm9zdGljLmdldFNldmVyaXR5KCkgIT0gRGlhZ25vc3RpYy5PSykgeworCQkJCQlkaWFnbm9zdGljLmFkZChjaGlsZERpYWdub3N0aWMpOworCQkJCX0KKwkJCX0KKworCQkJaW50IGxhc3RFZGl0b3JQYWdlID0gZ2V0UGFnZUNvdW50KCkgLSAxOworCQkJaWYgKGxhc3RFZGl0b3JQYWdlID49IDAgJiYgZ2V0RWRpdG9yKGxhc3RFZGl0b3JQYWdlKSBpbnN0YW5jZW9mIFByb2JsZW1FZGl0b3JQYXJ0KSB7CisJCQkJKChQcm9ibGVtRWRpdG9yUGFydClnZXRFZGl0b3IobGFzdEVkaXRvclBhZ2UpKS5zZXREaWFnbm9zdGljKGRpYWdub3N0aWMpOworCQkJCWlmIChkaWFnbm9zdGljLmdldFNldmVyaXR5KCkgIT0gRGlhZ25vc3RpYy5PSykgeworCQkJCQlzZXRBY3RpdmVQYWdlKGxhc3RFZGl0b3JQYWdlKTsKKwkJCQl9CisJCQl9CisJCQllbHNlIGlmIChkaWFnbm9zdGljLmdldFNldmVyaXR5KCkgIT0gRGlhZ25vc3RpYy5PSykgeworCQkJCVByb2JsZW1FZGl0b3JQYXJ0IHByb2JsZW1FZGl0b3JQYXJ0ID0gbmV3IFByb2JsZW1FZGl0b3JQYXJ0KCk7CisJCQkJcHJvYmxlbUVkaXRvclBhcnQuc2V0RGlhZ25vc3RpYyhkaWFnbm9zdGljKTsKKwkJCQlwcm9ibGVtRWRpdG9yUGFydC5zZXRNYXJrZXJIZWxwZXIobWFya2VySGVscGVyKTsKKwkJCQl0cnkgeworCQkJCQlhZGRQYWdlKCsrbGFzdEVkaXRvclBhZ2UsIHByb2JsZW1FZGl0b3JQYXJ0LCBnZXRFZGl0b3JJbnB1dCgpKTsKKwkJCQkJc2V0UGFnZVRleHQobGFzdEVkaXRvclBhZ2UsIHByb2JsZW1FZGl0b3JQYXJ0LmdldFBhcnROYW1lKCkpOworCQkJCQlzZXRBY3RpdmVQYWdlKGxhc3RFZGl0b3JQYWdlKTsKKwkJCQkJc2hvd1RhYnMoKTsKKwkJCQl9CisJCQkJY2F0Y2ggKFBhcnRJbml0RXhjZXB0aW9uIGV4Y2VwdGlvbikgeworCQkJCQlBbmFseXNpc0VkaXRQbHVnaW4uSU5TVEFOQ0UubG9nKGV4Y2VwdGlvbik7CisJCQkJfQorCQkJfQorCisJCQlpZiAobWFya2VySGVscGVyLmhhc01hcmtlcnMoZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpKSkgeworCQkJCW1hcmtlckhlbHBlci5kZWxldGVNYXJrZXJzKGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKSk7CisJCQkJaWYgKGRpYWdub3N0aWMuZ2V0U2V2ZXJpdHkoKSAhPSBEaWFnbm9zdGljLk9LKSB7CisJCQkJCXRyeSB7CisJCQkJCQltYXJrZXJIZWxwZXIuY3JlYXRlTWFya2VycyhkaWFnbm9zdGljKTsKKwkJCQkJfQorCQkJCQljYXRjaCAoQ29yZUV4Y2VwdGlvbiBleGNlcHRpb24pIHsKKwkJCQkJCUFuYWx5c2lzRWRpdFBsdWdpbi5JTlNUQU5DRS5sb2coZXhjZXB0aW9uKTsKKwkJCQkJfQorCQkJCX0KKwkJCX0KKwkJfQorCX0KKworCS8qKgorCSAqIFNob3dzIGEgZGlhbG9nIHRoYXQgYXNrcyBpZiBjb25mbGljdGluZyBjaGFuZ2VzIHNob3VsZCBiZSBkaXNjYXJkZWQuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIGJvb2xlYW4gaGFuZGxlRGlydHlDb25mbGljdCgpIHsKKwkJcmV0dXJuCisJCQlNZXNzYWdlRGlhbG9nLm9wZW5RdWVzdGlvbgorCQkJCShnZXRTaXRlKCkuZ2V0U2hlbGwoKSwKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfRmlsZUNvbmZsaWN0X2xhYmVsIiksCisJCQkJIGdldFN0cmluZygiX1dBUk5fRmlsZUNvbmZsaWN0IikpOworCX0KKworCS8qKgorCSAqIFRoaXMgY3JlYXRlcyBhIG1vZGVsIGVkaXRvci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQW5hbHlzaXNFZGl0b3IoKSB7CisJCXN1cGVyKCk7CisJCWluaXRpYWxpemVFZGl0aW5nRG9tYWluKCk7CisJfQorCisJLyoqCisJICogVGhpcyBzZXRzIHVwIHRoZSBlZGl0aW5nIGRvbWFpbiBmb3IgdGhlIG1vZGVsIGVkaXRvci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBpbml0aWFsaXplRWRpdGluZ0RvbWFpbigpIHsKKwkJLy8gQ3JlYXRlIGFuIGFkYXB0ZXIgZmFjdG9yeSB0aGF0IHlpZWxkcyBpdGVtIHByb3ZpZGVycy4KKwkJLy8KKwkJYWRhcHRlckZhY3RvcnkgPSBuZXcgQ29tcG9zZWRBZGFwdGVyRmFjdG9yeShDb21wb3NlZEFkYXB0ZXJGYWN0b3J5LkRlc2NyaXB0b3IuUmVnaXN0cnkuSU5TVEFOQ0UpOworCisJCWFkYXB0ZXJGYWN0b3J5LmFkZEFkYXB0ZXJGYWN0b3J5KG5ldyBSZXNvdXJjZUl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5KCkpOworCQlhZGFwdGVyRmFjdG9yeS5hZGRBZGFwdGVyRmFjdG9yeShuZXcgQW5hbHlzaXNJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSgpKTsKKwkJYWRhcHRlckZhY3RvcnkuYWRkQWRhcHRlckZhY3RvcnkobmV3IFJlZmxlY3RpdmVJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSgpKTsKKworCQkvLyBDcmVhdGUgdGhlIGNvbW1hbmQgc3RhY2sgdGhhdCB3aWxsIG5vdGlmeSB0aGlzIGVkaXRvciBhcyBjb21tYW5kcyBhcmUgZXhlY3V0ZWQuCisJCS8vCisJCUJhc2ljQ29tbWFuZFN0YWNrIGNvbW1hbmRTdGFjayA9IG5ldyBCYXNpY0NvbW1hbmRTdGFjaygpOworCisJCS8vIEFkZCBhIGxpc3RlbmVyIHRvIHNldCB0aGUgbW9zdCByZWNlbnQgY29tbWFuZCdzIGFmZmVjdGVkIG9iamVjdHMgdG8gYmUgdGhlIHNlbGVjdGlvbiBvZiB0aGUgdmlld2VyIHdpdGggZm9jdXMuCisJCS8vCisJCWNvbW1hbmRTdGFjay5hZGRDb21tYW5kU3RhY2tMaXN0ZW5lcgorCQkJKG5ldyBDb21tYW5kU3RhY2tMaXN0ZW5lcigpIHsKKwkJCQkgcHVibGljIHZvaWQgY29tbWFuZFN0YWNrQ2hhbmdlZChmaW5hbCBFdmVudE9iamVjdCBldmVudCkgeworCQkJCQkgZ2V0Q29udGFpbmVyKCkuZ2V0RGlzcGxheSgpLmFzeW5jRXhlYworCQkJCQkJIChuZXcgUnVubmFibGUoKSB7CisJCQkJCQkJICBwdWJsaWMgdm9pZCBydW4oKSB7CisJCQkJCQkJCSAgZmlyZVByb3BlcnR5Q2hhbmdlKElFZGl0b3JQYXJ0LlBST1BfRElSVFkpOworCisJCQkJCQkJCSAgLy8gVHJ5IHRvIHNlbGVjdCB0aGUgYWZmZWN0ZWQgb2JqZWN0cy4KKwkJCQkJCQkJICAvLworCQkJCQkJCQkgIENvbW1hbmQgbW9zdFJlY2VudENvbW1hbmQgPSAoKENvbW1hbmRTdGFjaylldmVudC5nZXRTb3VyY2UoKSkuZ2V0TW9zdFJlY2VudENvbW1hbmQoKTsKKwkJCQkJCQkJICBpZiAobW9zdFJlY2VudENvbW1hbmQgIT0gbnVsbCkgeworCQkJCQkJCQkJICBzZXRTZWxlY3Rpb25Ub1ZpZXdlcihtb3N0UmVjZW50Q29tbWFuZC5nZXRBZmZlY3RlZE9iamVjdHMoKSk7CisJCQkJCQkJCSAgfQorCQkJCQkJCQkgIGlmIChwcm9wZXJ0eVNoZWV0UGFnZSAhPSBudWxsICYmICFwcm9wZXJ0eVNoZWV0UGFnZS5nZXRDb250cm9sKCkuaXNEaXNwb3NlZCgpKSB7CisJCQkJCQkJCQkgIHByb3BlcnR5U2hlZXRQYWdlLnJlZnJlc2goKTsKKwkJCQkJCQkJICB9CisJCQkJCQkJICB9CisJCQkJCQkgIH0pOworCQkJCSB9CisJCQkgfSk7CisKKwkJLy8gQ3JlYXRlIHRoZSBlZGl0aW5nIGRvbWFpbiB3aXRoIGEgc3BlY2lhbCBjb21tYW5kIHN0YWNrLgorCQkvLworCQllZGl0aW5nRG9tYWluID0gbmV3IEFkYXB0ZXJGYWN0b3J5RWRpdGluZ0RvbWFpbihhZGFwdGVyRmFjdG9yeSwgY29tbWFuZFN0YWNrLCBuZXcgSGFzaE1hcDxSZXNvdXJjZSwgQm9vbGVhbj4oKSk7CisJfQorCisJLyoqCisJICogVGhpcyBpcyBoZXJlIGZvciB0aGUgbGlzdGVuZXIgdG8gYmUgYWJsZSB0byBjYWxsIGl0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCQkJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgZmlyZVByb3BlcnR5Q2hhbmdlKGludCBhY3Rpb24pIHsKKwkJc3VwZXIuZmlyZVByb3BlcnR5Q2hhbmdlKGFjdGlvbik7CisJfQorCisJLyoqCisJICogVGhpcyBzZXRzIHRoZSBzZWxlY3Rpb24gaW50byB3aGljaGV2ZXIgdmlld2VyIGlzIGFjdGl2ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRTZWxlY3Rpb25Ub1ZpZXdlcihDb2xsZWN0aW9uPD8+IGNvbGxlY3Rpb24pIHsKKwkJZmluYWwgQ29sbGVjdGlvbjw/PiB0aGVTZWxlY3Rpb24gPSBjb2xsZWN0aW9uOworCQkvLyBNYWtlIHN1cmUgaXQncyBva2F5LgorCQkvLworCQlpZiAodGhlU2VsZWN0aW9uICE9IG51bGwgJiYgIXRoZVNlbGVjdGlvbi5pc0VtcHR5KCkpIHsKKwkJCVJ1bm5hYmxlIHJ1bm5hYmxlID0KKwkJCQluZXcgUnVubmFibGUoKSB7CisJCQkJCXB1YmxpYyB2b2lkIHJ1bigpIHsKKwkJCQkJCS8vIFRyeSB0byBzZWxlY3QgdGhlIGl0ZW1zIGluIHRoZSBjdXJyZW50IGNvbnRlbnQgdmlld2VyIG9mIHRoZSBlZGl0b3IuCisJCQkJCQkvLworCQkJCQkJaWYgKGN1cnJlbnRWaWV3ZXIgIT0gbnVsbCkgeworCQkJCQkJCWN1cnJlbnRWaWV3ZXIuc2V0U2VsZWN0aW9uKG5ldyBTdHJ1Y3R1cmVkU2VsZWN0aW9uKHRoZVNlbGVjdGlvbi50b0FycmF5KCkpLCB0cnVlKTsKKwkJCQkJCX0KKwkJCQkJfQorCQkJCX07CisJCQlnZXRTaXRlKCkuZ2V0U2hlbGwoKS5nZXREaXNwbGF5KCkuYXN5bmNFeGVjKHJ1bm5hYmxlKTsKKwkJfQorCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyB0aGUgZWRpdGluZyBkb21haW4gYXMgcmVxdWlyZWQgYnkgdGhlIHtAbGluayBJRWRpdGluZ0RvbWFpblByb3ZpZGVyfSBpbnRlcmZhY2UuCisJICogVGhpcyBpcyBpbXBvcnRhbnQgZm9yIGltcGxlbWVudGluZyB0aGUgc3RhdGljIG1ldGhvZHMgb2Yge0BsaW5rIEFkYXB0ZXJGYWN0b3J5RWRpdGluZ0RvbWFpbn0KKwkgKiBhbmQgZm9yIHN1cHBvcnRpbmcge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmFjdGlvbi5Db21tYW5kQWN0aW9ufS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRWRpdGluZ0RvbWFpbiBnZXRFZGl0aW5nRG9tYWluKCkgeworCQlyZXR1cm4gZWRpdGluZ0RvbWFpbjsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgY2xhc3MgUmV2ZXJzZUFkYXB0ZXJGYWN0b3J5Q29udGVudFByb3ZpZGVyIGV4dGVuZHMgQWRhcHRlckZhY3RvcnlDb250ZW50UHJvdmlkZXIgeworCQkvKioKKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCXB1YmxpYyBSZXZlcnNlQWRhcHRlckZhY3RvcnlDb250ZW50UHJvdmlkZXIoQWRhcHRlckZhY3RvcnkgYWRhcHRlckZhY3RvcnkpIHsKKwkJCXN1cGVyKGFkYXB0ZXJGYWN0b3J5KTsKKwkJfQorCisJCS8qKgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJQE92ZXJyaWRlCisJCXB1YmxpYyBPYmplY3QgW10gZ2V0RWxlbWVudHMoT2JqZWN0IG9iamVjdCkgeworCQkJT2JqZWN0IHBhcmVudCA9IHN1cGVyLmdldFBhcmVudChvYmplY3QpOworCQkJcmV0dXJuIChwYXJlbnQgPT0gbnVsbCA/IENvbGxlY3Rpb25zLkVNUFRZX1NFVCA6IENvbGxlY3Rpb25zLnNpbmdsZXRvbihwYXJlbnQpKS50b0FycmF5KCk7CisJCX0KKworCQkvKioKKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUBPdmVycmlkZQorCQlwdWJsaWMgT2JqZWN0IFtdIGdldENoaWxkcmVuKE9iamVjdCBvYmplY3QpIHsKKwkJCU9iamVjdCBwYXJlbnQgPSBzdXBlci5nZXRQYXJlbnQob2JqZWN0KTsKKwkJCXJldHVybiAocGFyZW50ID09IG51bGwgPyBDb2xsZWN0aW9ucy5FTVBUWV9TRVQgOiBDb2xsZWN0aW9ucy5zaW5nbGV0b24ocGFyZW50KSkudG9BcnJheSgpOworCQl9CisKKwkJLyoqCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlAT3ZlcnJpZGUKKwkJcHVibGljIGJvb2xlYW4gaGFzQ2hpbGRyZW4oT2JqZWN0IG9iamVjdCkgeworCQkJT2JqZWN0IHBhcmVudCA9IHN1cGVyLmdldFBhcmVudChvYmplY3QpOworCQkJcmV0dXJuIHBhcmVudCAhPSBudWxsOworCQl9CisKKwkJLyoqCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlAT3ZlcnJpZGUKKwkJcHVibGljIE9iamVjdCBnZXRQYXJlbnQoT2JqZWN0IG9iamVjdCkgeworCQkJcmV0dXJuIG51bGw7CisJCX0KKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRDdXJyZW50Vmlld2VyUGFuZShWaWV3ZXJQYW5lIHZpZXdlclBhbmUpIHsKKwkJaWYgKGN1cnJlbnRWaWV3ZXJQYW5lICE9IHZpZXdlclBhbmUpIHsKKwkJCWlmIChjdXJyZW50Vmlld2VyUGFuZSAhPSBudWxsKSB7CisJCQkJY3VycmVudFZpZXdlclBhbmUuc2hvd0ZvY3VzKGZhbHNlKTsKKwkJCX0KKwkJCWN1cnJlbnRWaWV3ZXJQYW5lID0gdmlld2VyUGFuZTsKKwkJfQorCQlzZXRDdXJyZW50Vmlld2VyKGN1cnJlbnRWaWV3ZXJQYW5lLmdldFZpZXdlcigpKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIG1ha2VzIHN1cmUgdGhhdCBvbmUgY29udGVudCB2aWV3ZXIsIGVpdGhlciBmb3IgdGhlIGN1cnJlbnQgcGFnZSBvciB0aGUgb3V0bGluZSB2aWV3LCBpZiBpdCBoYXMgZm9jdXMsCisJICogaXMgdGhlIGN1cnJlbnQgb25lLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIHNldEN1cnJlbnRWaWV3ZXIoVmlld2VyIHZpZXdlcikgeworCQkvLyBJZiBpdCBpcyBjaGFuZ2luZy4uLgorCQkvLworCQlpZiAoY3VycmVudFZpZXdlciAhPSB2aWV3ZXIpIHsKKwkJCWlmIChzZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIgPT0gbnVsbCkgeworCQkJCS8vIENyZWF0ZSB0aGUgbGlzdGVuZXIgb24gZGVtYW5kLgorCQkJCS8vCisJCQkJc2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyID0KKwkJCQkJbmV3IElTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIoKSB7CisJCQkJCQkvLyBUaGlzIGp1c3Qgbm90aWZpZXMgdGhvc2UgdGhpbmdzIHRoYXQgYXJlIGFmZmVjdGVkIGJ5IHRoZSBzZWN0aW9uLgorCQkJCQkJLy8KKwkJCQkJCXB1YmxpYyB2b2lkIHNlbGVjdGlvbkNoYW5nZWQoU2VsZWN0aW9uQ2hhbmdlZEV2ZW50IHNlbGVjdGlvbkNoYW5nZWRFdmVudCkgeworCQkJCQkJCXNldFNlbGVjdGlvbihzZWxlY3Rpb25DaGFuZ2VkRXZlbnQuZ2V0U2VsZWN0aW9uKCkpOworCQkJCQkJfQorCQkJCQl9OworCQkJfQorCisJCQkvLyBTdG9wIGxpc3RlbmluZyB0byB0aGUgb2xkIG9uZS4KKwkJCS8vCisJCQlpZiAoY3VycmVudFZpZXdlciAhPSBudWxsKSB7CisJCQkJY3VycmVudFZpZXdlci5yZW1vdmVTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIoc2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyKTsKKwkJCX0KKworCQkJLy8gU3RhcnQgbGlzdGVuaW5nIHRvIHRoZSBuZXcgb25lLgorCQkJLy8KKwkJCWlmICh2aWV3ZXIgIT0gbnVsbCkgeworCQkJCXZpZXdlci5hZGRTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIoc2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyKTsKKwkJCX0KKworCQkJLy8gUmVtZW1iZXIgaXQuCisJCQkvLworCQkJY3VycmVudFZpZXdlciA9IHZpZXdlcjsKKworCQkJLy8gU2V0IHRoZSBlZGl0b3JzIHNlbGVjdGlvbiBiYXNlZCBvbiB0aGUgY3VycmVudCB2aWV3ZXIncyBzZWxlY3Rpb24uCisJCQkvLworCQkJc2V0U2VsZWN0aW9uKGN1cnJlbnRWaWV3ZXIgPT0gbnVsbCA/IFN0cnVjdHVyZWRTZWxlY3Rpb24uRU1QVFkgOiBjdXJyZW50Vmlld2VyLmdldFNlbGVjdGlvbigpKTsKKwkJfQorCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyB0aGUgdmlld2VyIGFzIHJlcXVpcmVkIGJ5IHRoZSB7QGxpbmsgSVZpZXdlclByb3ZpZGVyfSBpbnRlcmZhY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFZpZXdlciBnZXRWaWV3ZXIoKSB7CisJCXJldHVybiBjdXJyZW50Vmlld2VyOworCX0KKworCS8qKgorCSAqIFRoaXMgY3JlYXRlcyBhIGNvbnRleHQgbWVudSBmb3IgdGhlIHZpZXdlciBhbmQgYWRkcyBhIGxpc3RlbmVyIGFzIHdlbGwgcmVnaXN0ZXJpbmcgdGhlIG1lbnUgZm9yIGV4dGVuc2lvbi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBjcmVhdGVDb250ZXh0TWVudUZvcihTdHJ1Y3R1cmVkVmlld2VyIHZpZXdlcikgeworCQlNZW51TWFuYWdlciBjb250ZXh0TWVudSA9IG5ldyBNZW51TWFuYWdlcigiI1BvcFVwIik7CisJCWNvbnRleHRNZW51LmFkZChuZXcgU2VwYXJhdG9yKCJhZGRpdGlvbnMiKSk7CisJCWNvbnRleHRNZW51LnNldFJlbW92ZUFsbFdoZW5TaG93bih0cnVlKTsKKwkJY29udGV4dE1lbnUuYWRkTWVudUxpc3RlbmVyKHRoaXMpOworCQlNZW51IG1lbnU9IGNvbnRleHRNZW51LmNyZWF0ZUNvbnRleHRNZW51KHZpZXdlci5nZXRDb250cm9sKCkpOworCQl2aWV3ZXIuZ2V0Q29udHJvbCgpLnNldE1lbnUobWVudSk7CisJCWdldFNpdGUoKS5yZWdpc3RlckNvbnRleHRNZW51KGNvbnRleHRNZW51LCBuZXcgVW53cmFwcGluZ1NlbGVjdGlvblByb3ZpZGVyKHZpZXdlcikpOworCisJCWludCBkbmRPcGVyYXRpb25zID0gRE5ELkRST1BfQ09QWSB8IERORC5EUk9QX01PVkUgfCBETkQuRFJPUF9MSU5LOworCQlUcmFuc2ZlcltdIHRyYW5zZmVycyA9IG5ldyBUcmFuc2ZlcltdIHsgTG9jYWxUcmFuc2Zlci5nZXRJbnN0YW5jZSgpIH07CisJCXZpZXdlci5hZGREcmFnU3VwcG9ydChkbmRPcGVyYXRpb25zLCB0cmFuc2ZlcnMsIG5ldyBWaWV3ZXJEcmFnQWRhcHRlcih2aWV3ZXIpKTsKKwkJdmlld2VyLmFkZERyb3BTdXBwb3J0KGRuZE9wZXJhdGlvbnMsIHRyYW5zZmVycywgbmV3IEVkaXRpbmdEb21haW5WaWV3ZXJEcm9wQWRhcHRlcihlZGl0aW5nRG9tYWluLCB2aWV3ZXIpKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGlzIHRoZSBtZXRob2QgY2FsbGVkIHRvIGxvYWQgYSByZXNvdXJjZSBpbnRvIHRoZSBlZGl0aW5nIGRvbWFpbidzIHJlc291cmNlIHNldCBiYXNlZCBvbiB0aGUgZWRpdG9yJ3MgaW5wdXQuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgY3JlYXRlTW9kZWwoKSB7CisJCVVSSSByZXNvdXJjZVVSSSA9IEVkaXRVSVV0aWwuZ2V0VVJJKGdldEVkaXRvcklucHV0KCkpOworCQlFeGNlcHRpb24gZXhjZXB0aW9uID0gbnVsbDsKKwkJUmVzb3VyY2UgcmVzb3VyY2UgPSBudWxsOworCQl0cnkgeworCQkJLy8gTG9hZCB0aGUgcmVzb3VyY2UgdGhyb3VnaCB0aGUgZWRpdGluZyBkb21haW4uCisJCQkvLworCQkJcmVzb3VyY2UgPSBlZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkuZ2V0UmVzb3VyY2UocmVzb3VyY2VVUkksIHRydWUpOworCQl9CisJCWNhdGNoIChFeGNlcHRpb24gZSkgeworCQkJZXhjZXB0aW9uID0gZTsKKwkJCXJlc291cmNlID0gZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpLmdldFJlc291cmNlKHJlc291cmNlVVJJLCBmYWxzZSk7CisJCX0KKworCQlEaWFnbm9zdGljIGRpYWdub3N0aWMgPSBhbmFseXplUmVzb3VyY2VQcm9ibGVtcyhyZXNvdXJjZSwgZXhjZXB0aW9uKTsKKwkJaWYgKGRpYWdub3N0aWMuZ2V0U2V2ZXJpdHkoKSAhPSBEaWFnbm9zdGljLk9LKSB7CisJCQlyZXNvdXJjZVRvRGlhZ25vc3RpY01hcC5wdXQocmVzb3VyY2UsICBhbmFseXplUmVzb3VyY2VQcm9ibGVtcyhyZXNvdXJjZSwgZXhjZXB0aW9uKSk7CisJCX0KKwkJZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpLmVBZGFwdGVycygpLmFkZChwcm9ibGVtSW5kaWNhdGlvbkFkYXB0ZXIpOworCX0KKworCS8qKgorCSAqIFJldHVybnMgYSBkaWFnbm9zdGljIGRlc2NyaWJpbmcgdGhlIGVycm9ycyBhbmQgd2FybmluZ3MgbGlzdGVkIGluIHRoZSByZXNvdXJjZQorCSAqIGFuZCB0aGUgc3BlY2lmaWVkIGV4Y2VwdGlvbiAoaWYgYW55KS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRGlhZ25vc3RpYyBhbmFseXplUmVzb3VyY2VQcm9ibGVtcyhSZXNvdXJjZSByZXNvdXJjZSwgRXhjZXB0aW9uIGV4Y2VwdGlvbikgeworCQlpZiAoIXJlc291cmNlLmdldEVycm9ycygpLmlzRW1wdHkoKSB8fCAhcmVzb3VyY2UuZ2V0V2FybmluZ3MoKS5pc0VtcHR5KCkpIHsKKwkJCUJhc2ljRGlhZ25vc3RpYyBiYXNpY0RpYWdub3N0aWMgPQorCQkJCW5ldyBCYXNpY0RpYWdub3N0aWMKKwkJCQkJKERpYWdub3N0aWMuRVJST1IsCisJCQkJCSAib3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcyIsCisJCQkJCSAwLAorCQkJCQkgZ2V0U3RyaW5nKCJfVUlfQ3JlYXRlTW9kZWxFcnJvcl9tZXNzYWdlIiwgcmVzb3VyY2UuZ2V0VVJJKCkpLAorCQkJCQkgbmV3IE9iamVjdCBbXSB7IGV4Y2VwdGlvbiA9PSBudWxsID8gKE9iamVjdClyZXNvdXJjZSA6IGV4Y2VwdGlvbiB9KTsKKwkJCWJhc2ljRGlhZ25vc3RpYy5tZXJnZShFY29yZVV0aWwuY29tcHV0ZURpYWdub3N0aWMocmVzb3VyY2UsIHRydWUpKTsKKwkJCXJldHVybiBiYXNpY0RpYWdub3N0aWM7CisJCX0KKwkJZWxzZSBpZiAoZXhjZXB0aW9uICE9IG51bGwpIHsKKwkJCXJldHVybgorCQkJCW5ldyBCYXNpY0RpYWdub3N0aWMKKwkJCQkJKERpYWdub3N0aWMuRVJST1IsCisJCQkJCSAib3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcyIsCisJCQkJCSAwLAorCQkJCQkgZ2V0U3RyaW5nKCJfVUlfQ3JlYXRlTW9kZWxFcnJvcl9tZXNzYWdlIiwgcmVzb3VyY2UuZ2V0VVJJKCkpLAorCQkJCQkgbmV3IE9iamVjdFtdIHsgZXhjZXB0aW9uIH0pOworCQl9CisJCWVsc2UgeworCQkJcmV0dXJuIERpYWdub3N0aWMuT0tfSU5TVEFOQ0U7CisJCX0KKwl9CisKKwkvKioKKwkgKiBUaGlzIGlzIHRoZSBtZXRob2QgdXNlZCBieSB0aGUgZnJhbWV3b3JrIHRvIGluc3RhbGwgeW91ciBvd24gY29udHJvbHMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgY3JlYXRlUGFnZXMoKSB7CisJCS8vIENyZWF0ZXMgdGhlIG1vZGVsIGZyb20gdGhlIGVkaXRvciBpbnB1dAorCQkvLworCQljcmVhdGVNb2RlbCgpOworCisJCS8vIE9ubHkgY3JlYXRlcyB0aGUgb3RoZXIgcGFnZXMgaWYgdGhlcmUgaXMgc29tZXRoaW5nIHRoYXQgY2FuIGJlIGVkaXRlZAorCQkvLworCQlpZiAoIWdldEVkaXRpbmdEb21haW4oKS5nZXRSZXNvdXJjZVNldCgpLmdldFJlc291cmNlcygpLmlzRW1wdHkoKSkgeworCQkJLy8gQ3JlYXRlIGEgcGFnZSBmb3IgdGhlIHNlbGVjdGlvbiB0cmVlIHZpZXcuCisJCQkvLworCQkJeworCQkJCVZpZXdlclBhbmUgdmlld2VyUGFuZSA9CisJCQkJCW5ldyBWaWV3ZXJQYW5lKGdldFNpdGUoKS5nZXRQYWdlKCksIEFuYWx5c2lzRWRpdG9yLnRoaXMpIHsKKwkJCQkJCUBPdmVycmlkZQorCQkJCQkJcHVibGljIFZpZXdlciBjcmVhdGVWaWV3ZXIoQ29tcG9zaXRlIGNvbXBvc2l0ZSkgeworCQkJCQkJCVRyZWUgdHJlZSA9IG5ldyBUcmVlKGNvbXBvc2l0ZSwgU1dULk1VTFRJKTsKKwkJCQkJCQlUcmVlVmlld2VyIG5ld1RyZWVWaWV3ZXIgPSBuZXcgVHJlZVZpZXdlcih0cmVlKTsKKwkJCQkJCQlyZXR1cm4gbmV3VHJlZVZpZXdlcjsKKwkJCQkJCX0KKwkJCQkJCUBPdmVycmlkZQorCQkJCQkJcHVibGljIHZvaWQgcmVxdWVzdEFjdGl2YXRpb24oKSB7CisJCQkJCQkJc3VwZXIucmVxdWVzdEFjdGl2YXRpb24oKTsKKwkJCQkJCQlzZXRDdXJyZW50Vmlld2VyUGFuZSh0aGlzKTsKKwkJCQkJCX0KKwkJCQkJfTsKKwkJCQl2aWV3ZXJQYW5lLmNyZWF0ZUNvbnRyb2woZ2V0Q29udGFpbmVyKCkpOworCisJCQkJc2VsZWN0aW9uVmlld2VyID0gKFRyZWVWaWV3ZXIpdmlld2VyUGFuZS5nZXRWaWV3ZXIoKTsKKwkJCQlzZWxlY3Rpb25WaWV3ZXIuc2V0Q29udGVudFByb3ZpZGVyKG5ldyBBZGFwdGVyRmFjdG9yeUNvbnRlbnRQcm92aWRlcihhZGFwdGVyRmFjdG9yeSkpOworCisJCQkJc2VsZWN0aW9uVmlld2VyLnNldExhYmVsUHJvdmlkZXIobmV3IEFkYXB0ZXJGYWN0b3J5TGFiZWxQcm92aWRlcihhZGFwdGVyRmFjdG9yeSkpOworCQkJCXNlbGVjdGlvblZpZXdlci5zZXRJbnB1dChlZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkpOworCQkJCXNlbGVjdGlvblZpZXdlci5zZXRTZWxlY3Rpb24obmV3IFN0cnVjdHVyZWRTZWxlY3Rpb24oZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpLmdldFJlc291cmNlcygpLmdldCgwKSksIHRydWUpOworCQkJCXZpZXdlclBhbmUuc2V0VGl0bGUoZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpKTsKKworCQkJCW5ldyBBZGFwdGVyRmFjdG9yeVRyZWVFZGl0b3Ioc2VsZWN0aW9uVmlld2VyLmdldFRyZWUoKSwgYWRhcHRlckZhY3RvcnkpOworCisJCQkJY3JlYXRlQ29udGV4dE1lbnVGb3Ioc2VsZWN0aW9uVmlld2VyKTsKKwkJCQlpbnQgcGFnZUluZGV4ID0gYWRkUGFnZSh2aWV3ZXJQYW5lLmdldENvbnRyb2woKSk7CisJCQkJc2V0UGFnZVRleHQocGFnZUluZGV4LCBnZXRTdHJpbmcoIl9VSV9TZWxlY3Rpb25QYWdlX2xhYmVsIikpOworCQkJfQorCisJCQkvLyBDcmVhdGUgYSBwYWdlIGZvciB0aGUgcGFyZW50IHRyZWUgdmlldy4KKwkJCS8vCisJCQl7CisJCQkJVmlld2VyUGFuZSB2aWV3ZXJQYW5lID0KKwkJCQkJbmV3IFZpZXdlclBhbmUoZ2V0U2l0ZSgpLmdldFBhZ2UoKSwgQW5hbHlzaXNFZGl0b3IudGhpcykgeworCQkJCQkJQE92ZXJyaWRlCisJCQkJCQlwdWJsaWMgVmlld2VyIGNyZWF0ZVZpZXdlcihDb21wb3NpdGUgY29tcG9zaXRlKSB7CisJCQkJCQkJVHJlZSB0cmVlID0gbmV3IFRyZWUoY29tcG9zaXRlLCBTV1QuTVVMVEkpOworCQkJCQkJCVRyZWVWaWV3ZXIgbmV3VHJlZVZpZXdlciA9IG5ldyBUcmVlVmlld2VyKHRyZWUpOworCQkJCQkJCXJldHVybiBuZXdUcmVlVmlld2VyOworCQkJCQkJfQorCQkJCQkJQE92ZXJyaWRlCisJCQkJCQlwdWJsaWMgdm9pZCByZXF1ZXN0QWN0aXZhdGlvbigpIHsKKwkJCQkJCQlzdXBlci5yZXF1ZXN0QWN0aXZhdGlvbigpOworCQkJCQkJCXNldEN1cnJlbnRWaWV3ZXJQYW5lKHRoaXMpOworCQkJCQkJfQorCQkJCQl9OworCQkJCXZpZXdlclBhbmUuY3JlYXRlQ29udHJvbChnZXRDb250YWluZXIoKSk7CisKKwkJCQlwYXJlbnRWaWV3ZXIgPSAoVHJlZVZpZXdlcil2aWV3ZXJQYW5lLmdldFZpZXdlcigpOworCQkJCXBhcmVudFZpZXdlci5zZXRBdXRvRXhwYW5kTGV2ZWwoMzApOworCQkJCXBhcmVudFZpZXdlci5zZXRDb250ZW50UHJvdmlkZXIobmV3IFJldmVyc2VBZGFwdGVyRmFjdG9yeUNvbnRlbnRQcm92aWRlcihhZGFwdGVyRmFjdG9yeSkpOworCQkJCXBhcmVudFZpZXdlci5zZXRMYWJlbFByb3ZpZGVyKG5ldyBBZGFwdGVyRmFjdG9yeUxhYmVsUHJvdmlkZXIoYWRhcHRlckZhY3RvcnkpKTsKKworCQkJCWNyZWF0ZUNvbnRleHRNZW51Rm9yKHBhcmVudFZpZXdlcik7CisJCQkJaW50IHBhZ2VJbmRleCA9IGFkZFBhZ2Uodmlld2VyUGFuZS5nZXRDb250cm9sKCkpOworCQkJCXNldFBhZ2VUZXh0KHBhZ2VJbmRleCwgZ2V0U3RyaW5nKCJfVUlfUGFyZW50UGFnZV9sYWJlbCIpKTsKKwkJCX0KKworCQkJLy8gVGhpcyBpcyB0aGUgcGFnZSBmb3IgdGhlIGxpc3Qgdmlld2VyCisJCQkvLworCQkJeworCQkJCVZpZXdlclBhbmUgdmlld2VyUGFuZSA9CisJCQkJCW5ldyBWaWV3ZXJQYW5lKGdldFNpdGUoKS5nZXRQYWdlKCksIEFuYWx5c2lzRWRpdG9yLnRoaXMpIHsKKwkJCQkJCUBPdmVycmlkZQorCQkJCQkJcHVibGljIFZpZXdlciBjcmVhdGVWaWV3ZXIoQ29tcG9zaXRlIGNvbXBvc2l0ZSkgeworCQkJCQkJCXJldHVybiBuZXcgTGlzdFZpZXdlcihjb21wb3NpdGUpOworCQkJCQkJfQorCQkJCQkJQE92ZXJyaWRlCisJCQkJCQlwdWJsaWMgdm9pZCByZXF1ZXN0QWN0aXZhdGlvbigpIHsKKwkJCQkJCQlzdXBlci5yZXF1ZXN0QWN0aXZhdGlvbigpOworCQkJCQkJCXNldEN1cnJlbnRWaWV3ZXJQYW5lKHRoaXMpOworCQkJCQkJfQorCQkJCQl9OworCQkJCXZpZXdlclBhbmUuY3JlYXRlQ29udHJvbChnZXRDb250YWluZXIoKSk7CisJCQkJbGlzdFZpZXdlciA9IChMaXN0Vmlld2VyKXZpZXdlclBhbmUuZ2V0Vmlld2VyKCk7CisJCQkJbGlzdFZpZXdlci5zZXRDb250ZW50UHJvdmlkZXIobmV3IEFkYXB0ZXJGYWN0b3J5Q29udGVudFByb3ZpZGVyKGFkYXB0ZXJGYWN0b3J5KSk7CisJCQkJbGlzdFZpZXdlci5zZXRMYWJlbFByb3ZpZGVyKG5ldyBBZGFwdGVyRmFjdG9yeUxhYmVsUHJvdmlkZXIoYWRhcHRlckZhY3RvcnkpKTsKKworCQkJCWNyZWF0ZUNvbnRleHRNZW51Rm9yKGxpc3RWaWV3ZXIpOworCQkJCWludCBwYWdlSW5kZXggPSBhZGRQYWdlKHZpZXdlclBhbmUuZ2V0Q29udHJvbCgpKTsKKwkJCQlzZXRQYWdlVGV4dChwYWdlSW5kZXgsIGdldFN0cmluZygiX1VJX0xpc3RQYWdlX2xhYmVsIikpOworCQkJfQorCisJCQkvLyBUaGlzIGlzIHRoZSBwYWdlIGZvciB0aGUgdHJlZSB2aWV3ZXIKKwkJCS8vCisJCQl7CisJCQkJVmlld2VyUGFuZSB2aWV3ZXJQYW5lID0KKwkJCQkJbmV3IFZpZXdlclBhbmUoZ2V0U2l0ZSgpLmdldFBhZ2UoKSwgQW5hbHlzaXNFZGl0b3IudGhpcykgeworCQkJCQkJQE92ZXJyaWRlCisJCQkJCQlwdWJsaWMgVmlld2VyIGNyZWF0ZVZpZXdlcihDb21wb3NpdGUgY29tcG9zaXRlKSB7CisJCQkJCQkJcmV0dXJuIG5ldyBUcmVlVmlld2VyKGNvbXBvc2l0ZSk7CisJCQkJCQl9CisJCQkJCQlAT3ZlcnJpZGUKKwkJCQkJCXB1YmxpYyB2b2lkIHJlcXVlc3RBY3RpdmF0aW9uKCkgeworCQkJCQkJCXN1cGVyLnJlcXVlc3RBY3RpdmF0aW9uKCk7CisJCQkJCQkJc2V0Q3VycmVudFZpZXdlclBhbmUodGhpcyk7CisJCQkJCQl9CisJCQkJCX07CisJCQkJdmlld2VyUGFuZS5jcmVhdGVDb250cm9sKGdldENvbnRhaW5lcigpKTsKKwkJCQl0cmVlVmlld2VyID0gKFRyZWVWaWV3ZXIpdmlld2VyUGFuZS5nZXRWaWV3ZXIoKTsKKwkJCQl0cmVlVmlld2VyLnNldENvbnRlbnRQcm92aWRlcihuZXcgQWRhcHRlckZhY3RvcnlDb250ZW50UHJvdmlkZXIoYWRhcHRlckZhY3RvcnkpKTsKKwkJCQl0cmVlVmlld2VyLnNldExhYmVsUHJvdmlkZXIobmV3IEFkYXB0ZXJGYWN0b3J5TGFiZWxQcm92aWRlcihhZGFwdGVyRmFjdG9yeSkpOworCisJCQkJbmV3IEFkYXB0ZXJGYWN0b3J5VHJlZUVkaXRvcih0cmVlVmlld2VyLmdldFRyZWUoKSwgYWRhcHRlckZhY3RvcnkpOworCisJCQkJY3JlYXRlQ29udGV4dE1lbnVGb3IodHJlZVZpZXdlcik7CisJCQkJaW50IHBhZ2VJbmRleCA9IGFkZFBhZ2Uodmlld2VyUGFuZS5nZXRDb250cm9sKCkpOworCQkJCXNldFBhZ2VUZXh0KHBhZ2VJbmRleCwgZ2V0U3RyaW5nKCJfVUlfVHJlZVBhZ2VfbGFiZWwiKSk7CisJCQl9CisKKwkJCS8vIFRoaXMgaXMgdGhlIHBhZ2UgZm9yIHRoZSB0YWJsZSB2aWV3ZXIuCisJCQkvLworCQkJeworCQkJCVZpZXdlclBhbmUgdmlld2VyUGFuZSA9CisJCQkJCW5ldyBWaWV3ZXJQYW5lKGdldFNpdGUoKS5nZXRQYWdlKCksIEFuYWx5c2lzRWRpdG9yLnRoaXMpIHsKKwkJCQkJCUBPdmVycmlkZQorCQkJCQkJcHVibGljIFZpZXdlciBjcmVhdGVWaWV3ZXIoQ29tcG9zaXRlIGNvbXBvc2l0ZSkgeworCQkJCQkJCXJldHVybiBuZXcgVGFibGVWaWV3ZXIoY29tcG9zaXRlKTsKKwkJCQkJCX0KKwkJCQkJCUBPdmVycmlkZQorCQkJCQkJcHVibGljIHZvaWQgcmVxdWVzdEFjdGl2YXRpb24oKSB7CisJCQkJCQkJc3VwZXIucmVxdWVzdEFjdGl2YXRpb24oKTsKKwkJCQkJCQlzZXRDdXJyZW50Vmlld2VyUGFuZSh0aGlzKTsKKwkJCQkJCX0KKwkJCQkJfTsKKwkJCQl2aWV3ZXJQYW5lLmNyZWF0ZUNvbnRyb2woZ2V0Q29udGFpbmVyKCkpOworCQkJCXRhYmxlVmlld2VyID0gKFRhYmxlVmlld2VyKXZpZXdlclBhbmUuZ2V0Vmlld2VyKCk7CisKKwkJCQlUYWJsZSB0YWJsZSA9IHRhYmxlVmlld2VyLmdldFRhYmxlKCk7CisJCQkJVGFibGVMYXlvdXQgbGF5b3V0ID0gbmV3IFRhYmxlTGF5b3V0KCk7CisJCQkJdGFibGUuc2V0TGF5b3V0KGxheW91dCk7CisJCQkJdGFibGUuc2V0SGVhZGVyVmlzaWJsZSh0cnVlKTsKKwkJCQl0YWJsZS5zZXRMaW5lc1Zpc2libGUodHJ1ZSk7CisKKwkJCQlUYWJsZUNvbHVtbiBvYmplY3RDb2x1bW4gPSBuZXcgVGFibGVDb2x1bW4odGFibGUsIFNXVC5OT05FKTsKKwkJCQlsYXlvdXQuYWRkQ29sdW1uRGF0YShuZXcgQ29sdW1uV2VpZ2h0RGF0YSgzLCAxMDAsIHRydWUpKTsKKwkJCQlvYmplY3RDb2x1bW4uc2V0VGV4dChnZXRTdHJpbmcoIl9VSV9PYmplY3RDb2x1bW5fbGFiZWwiKSk7CisJCQkJb2JqZWN0Q29sdW1uLnNldFJlc2l6YWJsZSh0cnVlKTsKKworCQkJCVRhYmxlQ29sdW1uIHNlbGZDb2x1bW4gPSBuZXcgVGFibGVDb2x1bW4odGFibGUsIFNXVC5OT05FKTsKKwkJCQlsYXlvdXQuYWRkQ29sdW1uRGF0YShuZXcgQ29sdW1uV2VpZ2h0RGF0YSgyLCAxMDAsIHRydWUpKTsKKwkJCQlzZWxmQ29sdW1uLnNldFRleHQoZ2V0U3RyaW5nKCJfVUlfU2VsZkNvbHVtbl9sYWJlbCIpKTsKKwkJCQlzZWxmQ29sdW1uLnNldFJlc2l6YWJsZSh0cnVlKTsKKworCQkJCXRhYmxlVmlld2VyLnNldENvbHVtblByb3BlcnRpZXMobmV3IFN0cmluZyBbXSB7ImEiLCAiYiJ9KTsKKwkJCQl0YWJsZVZpZXdlci5zZXRDb250ZW50UHJvdmlkZXIobmV3IEFkYXB0ZXJGYWN0b3J5Q29udGVudFByb3ZpZGVyKGFkYXB0ZXJGYWN0b3J5KSk7CisJCQkJdGFibGVWaWV3ZXIuc2V0TGFiZWxQcm92aWRlcihuZXcgQWRhcHRlckZhY3RvcnlMYWJlbFByb3ZpZGVyKGFkYXB0ZXJGYWN0b3J5KSk7CisKKwkJCQljcmVhdGVDb250ZXh0TWVudUZvcih0YWJsZVZpZXdlcik7CisJCQkJaW50IHBhZ2VJbmRleCA9IGFkZFBhZ2Uodmlld2VyUGFuZS5nZXRDb250cm9sKCkpOworCQkJCXNldFBhZ2VUZXh0KHBhZ2VJbmRleCwgZ2V0U3RyaW5nKCJfVUlfVGFibGVQYWdlX2xhYmVsIikpOworCQkJfQorCisJCQkvLyBUaGlzIGlzIHRoZSBwYWdlIGZvciB0aGUgdGFibGUgdHJlZSB2aWV3ZXIuCisJCQkvLworCQkJeworCQkJCVZpZXdlclBhbmUgdmlld2VyUGFuZSA9CisJCQkJCW5ldyBWaWV3ZXJQYW5lKGdldFNpdGUoKS5nZXRQYWdlKCksIEFuYWx5c2lzRWRpdG9yLnRoaXMpIHsKKwkJCQkJCUBPdmVycmlkZQorCQkJCQkJcHVibGljIFZpZXdlciBjcmVhdGVWaWV3ZXIoQ29tcG9zaXRlIGNvbXBvc2l0ZSkgeworCQkJCQkJCXJldHVybiBuZXcgVHJlZVZpZXdlcihjb21wb3NpdGUpOworCQkJCQkJfQorCQkJCQkJQE92ZXJyaWRlCisJCQkJCQlwdWJsaWMgdm9pZCByZXF1ZXN0QWN0aXZhdGlvbigpIHsKKwkJCQkJCQlzdXBlci5yZXF1ZXN0QWN0aXZhdGlvbigpOworCQkJCQkJCXNldEN1cnJlbnRWaWV3ZXJQYW5lKHRoaXMpOworCQkJCQkJfQorCQkJCQl9OworCQkJCXZpZXdlclBhbmUuY3JlYXRlQ29udHJvbChnZXRDb250YWluZXIoKSk7CisKKwkJCQl0cmVlVmlld2VyV2l0aENvbHVtbnMgPSAoVHJlZVZpZXdlcil2aWV3ZXJQYW5lLmdldFZpZXdlcigpOworCisJCQkJVHJlZSB0cmVlID0gdHJlZVZpZXdlcldpdGhDb2x1bW5zLmdldFRyZWUoKTsKKwkJCQl0cmVlLnNldExheW91dERhdGEobmV3IEZpbGxMYXlvdXQoKSk7CisJCQkJdHJlZS5zZXRIZWFkZXJWaXNpYmxlKHRydWUpOworCQkJCXRyZWUuc2V0TGluZXNWaXNpYmxlKHRydWUpOworCisJCQkJVHJlZUNvbHVtbiBvYmplY3RDb2x1bW4gPSBuZXcgVHJlZUNvbHVtbih0cmVlLCBTV1QuTk9ORSk7CisJCQkJb2JqZWN0Q29sdW1uLnNldFRleHQoZ2V0U3RyaW5nKCJfVUlfT2JqZWN0Q29sdW1uX2xhYmVsIikpOworCQkJCW9iamVjdENvbHVtbi5zZXRSZXNpemFibGUodHJ1ZSk7CisJCQkJb2JqZWN0Q29sdW1uLnNldFdpZHRoKDI1MCk7CisKKwkJCQlUcmVlQ29sdW1uIHNlbGZDb2x1bW4gPSBuZXcgVHJlZUNvbHVtbih0cmVlLCBTV1QuTk9ORSk7CisJCQkJc2VsZkNvbHVtbi5zZXRUZXh0KGdldFN0cmluZygiX1VJX1NlbGZDb2x1bW5fbGFiZWwiKSk7CisJCQkJc2VsZkNvbHVtbi5zZXRSZXNpemFibGUodHJ1ZSk7CisJCQkJc2VsZkNvbHVtbi5zZXRXaWR0aCgyMDApOworCisJCQkJdHJlZVZpZXdlcldpdGhDb2x1bW5zLnNldENvbHVtblByb3BlcnRpZXMobmV3IFN0cmluZyBbXSB7ImEiLCAiYiJ9KTsKKwkJCQl0cmVlVmlld2VyV2l0aENvbHVtbnMuc2V0Q29udGVudFByb3ZpZGVyKG5ldyBBZGFwdGVyRmFjdG9yeUNvbnRlbnRQcm92aWRlcihhZGFwdGVyRmFjdG9yeSkpOworCQkJCXRyZWVWaWV3ZXJXaXRoQ29sdW1ucy5zZXRMYWJlbFByb3ZpZGVyKG5ldyBBZGFwdGVyRmFjdG9yeUxhYmVsUHJvdmlkZXIoYWRhcHRlckZhY3RvcnkpKTsKKworCQkJCWNyZWF0ZUNvbnRleHRNZW51Rm9yKHRyZWVWaWV3ZXJXaXRoQ29sdW1ucyk7CisJCQkJaW50IHBhZ2VJbmRleCA9IGFkZFBhZ2Uodmlld2VyUGFuZS5nZXRDb250cm9sKCkpOworCQkJCXNldFBhZ2VUZXh0KHBhZ2VJbmRleCwgZ2V0U3RyaW5nKCJfVUlfVHJlZVdpdGhDb2x1bW5zUGFnZV9sYWJlbCIpKTsKKwkJCX0KKworCQkJZ2V0U2l0ZSgpLmdldFNoZWxsKCkuZ2V0RGlzcGxheSgpLmFzeW5jRXhlYworCQkJCShuZXcgUnVubmFibGUoKSB7CisJCQkJCSBwdWJsaWMgdm9pZCBydW4oKSB7CisJCQkJCQkgc2V0QWN0aXZlUGFnZSgwKTsKKwkJCQkJIH0KKwkJCQkgfSk7CisJCX0KKworCQkvLyBFbnN1cmVzIHRoYXQgdGhpcyBlZGl0b3Igd2lsbCBvbmx5IGRpc3BsYXkgdGhlIHBhZ2UncyB0YWIKKwkJLy8gYXJlYSBpZiB0aGVyZSBhcmUgbW9yZSB0aGFuIG9uZSBwYWdlCisJCS8vCisJCWdldENvbnRhaW5lcigpLmFkZENvbnRyb2xMaXN0ZW5lcgorCQkJKG5ldyBDb250cm9sQWRhcHRlcigpIHsKKwkJCQlib29sZWFuIGd1YXJkID0gZmFsc2U7CisJCQkJQE92ZXJyaWRlCisJCQkJcHVibGljIHZvaWQgY29udHJvbFJlc2l6ZWQoQ29udHJvbEV2ZW50IGV2ZW50KSB7CisJCQkJCWlmICghZ3VhcmQpIHsKKwkJCQkJCWd1YXJkID0gdHJ1ZTsKKwkJCQkJCWhpZGVUYWJzKCk7CisJCQkJCQlndWFyZCA9IGZhbHNlOworCQkJCQl9CisJCQkJfQorCQkJIH0pOworCisJCWdldFNpdGUoKS5nZXRTaGVsbCgpLmdldERpc3BsYXkoKS5hc3luY0V4ZWMKKwkJCShuZXcgUnVubmFibGUoKSB7CisJCQkJIHB1YmxpYyB2b2lkIHJ1bigpIHsKKwkJCQkJIHVwZGF0ZVByb2JsZW1JbmRpY2F0aW9uKCk7CisJCQkJIH0KKwkJCSB9KTsKKwl9CisKKwkvKioKKwkgKiBJZiB0aGVyZSBpcyBqdXN0IG9uZSBwYWdlIGluIHRoZSBtdWx0aS1wYWdlIGVkaXRvciBwYXJ0LAorCSAqIHRoaXMgaGlkZXMgdGhlIHNpbmdsZSB0YWIgYXQgdGhlIGJvdHRvbS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBoaWRlVGFicygpIHsKKwkJaWYgKGdldFBhZ2VDb3VudCgpIDw9IDEpIHsKKwkJCXNldFBhZ2VUZXh0KDAsICIiKTsKKwkJCWlmIChnZXRDb250YWluZXIoKSBpbnN0YW5jZW9mIENUYWJGb2xkZXIpIHsKKwkJCQkoKENUYWJGb2xkZXIpZ2V0Q29udGFpbmVyKCkpLnNldFRhYkhlaWdodCgxKTsKKwkJCQlQb2ludCBwb2ludCA9IGdldENvbnRhaW5lcigpLmdldFNpemUoKTsKKwkJCQlnZXRDb250YWluZXIoKS5zZXRTaXplKHBvaW50LngsIHBvaW50LnkgKyA2KTsKKwkJCX0KKwkJfQorCX0KKworCS8qKgorCSAqIElmIHRoZXJlIGlzIG1vcmUgdGhhbiBvbmUgcGFnZSBpbiB0aGUgbXVsdGktcGFnZSBlZGl0b3IgcGFydCwKKwkgKiB0aGlzIHNob3dzIHRoZSB0YWJzIGF0IHRoZSBib3R0b20uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgc2hvd1RhYnMoKSB7CisJCWlmIChnZXRQYWdlQ291bnQoKSA+IDEpIHsKKwkJCXNldFBhZ2VUZXh0KDAsIGdldFN0cmluZygiX1VJX1NlbGVjdGlvblBhZ2VfbGFiZWwiKSk7CisJCQlpZiAoZ2V0Q29udGFpbmVyKCkgaW5zdGFuY2VvZiBDVGFiRm9sZGVyKSB7CisJCQkJKChDVGFiRm9sZGVyKWdldENvbnRhaW5lcigpKS5zZXRUYWJIZWlnaHQoU1dULkRFRkFVTFQpOworCQkJCVBvaW50IHBvaW50ID0gZ2V0Q29udGFpbmVyKCkuZ2V0U2l6ZSgpOworCQkJCWdldENvbnRhaW5lcigpLnNldFNpemUocG9pbnQueCwgcG9pbnQueSAtIDYpOworCQkJfQorCQl9CisJfQorCisJLyoqCisJICogVGhpcyBpcyB1c2VkIHRvIHRyYWNrIHRoZSBhY3RpdmUgdmlld2VyLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIHBhZ2VDaGFuZ2UoaW50IHBhZ2VJbmRleCkgeworCQlzdXBlci5wYWdlQ2hhbmdlKHBhZ2VJbmRleCk7CisKKwkJaWYgKGNvbnRlbnRPdXRsaW5lUGFnZSAhPSBudWxsKSB7CisJCQloYW5kbGVDb250ZW50T3V0bGluZVNlbGVjdGlvbihjb250ZW50T3V0bGluZVBhZ2UuZ2V0U2VsZWN0aW9uKCkpOworCQl9CisJfQorCisJLyoqCisJICogVGhpcyBpcyBob3cgdGhlIGZyYW1ld29yayBkZXRlcm1pbmVzIHdoaWNoIGludGVyZmFjZXMgd2UgaW1wbGVtZW50LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBTdXBwcmVzc1dhcm5pbmdzKCJyYXd0eXBlcyIpCisJQE92ZXJyaWRlCisJcHVibGljIE9iamVjdCBnZXRBZGFwdGVyKENsYXNzIGtleSkgeworCQlpZiAoa2V5LmVxdWFscyhJQ29udGVudE91dGxpbmVQYWdlLmNsYXNzKSkgeworCQkJcmV0dXJuIHNob3dPdXRsaW5lVmlldygpID8gZ2V0Q29udGVudE91dGxpbmVQYWdlKCkgOiBudWxsOworCQl9CisJCWVsc2UgaWYgKGtleS5lcXVhbHMoSVByb3BlcnR5U2hlZXRQYWdlLmNsYXNzKSkgeworCQkJcmV0dXJuIGdldFByb3BlcnR5U2hlZXRQYWdlKCk7CisJCX0KKwkJZWxzZSBpZiAoa2V5LmVxdWFscyhJR290b01hcmtlci5jbGFzcykpIHsKKwkJCXJldHVybiB0aGlzOworCQl9CisJCWVsc2UgeworCQkJcmV0dXJuIHN1cGVyLmdldEFkYXB0ZXIoa2V5KTsKKwkJfQorCX0KKworCS8qKgorCSAqIFRoaXMgYWNjZXNzZXMgYSBjYWNoZWQgdmVyc2lvbiBvZiB0aGUgY29udGVudCBvdXRsaW5lci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgSUNvbnRlbnRPdXRsaW5lUGFnZSBnZXRDb250ZW50T3V0bGluZVBhZ2UoKSB7CisJCWlmIChjb250ZW50T3V0bGluZVBhZ2UgPT0gbnVsbCkgeworCQkJLy8gVGhlIGNvbnRlbnQgb3V0bGluZSBpcyBqdXN0IGEgdHJlZS4KKwkJCS8vCisJCQljbGFzcyBNeUNvbnRlbnRPdXRsaW5lUGFnZSBleHRlbmRzIENvbnRlbnRPdXRsaW5lUGFnZSB7CisJCQkJQE92ZXJyaWRlCisJCQkJcHVibGljIHZvaWQgY3JlYXRlQ29udHJvbChDb21wb3NpdGUgcGFyZW50KSB7CisJCQkJCXN1cGVyLmNyZWF0ZUNvbnRyb2wocGFyZW50KTsKKwkJCQkJY29udGVudE91dGxpbmVWaWV3ZXIgPSBnZXRUcmVlVmlld2VyKCk7CisJCQkJCWNvbnRlbnRPdXRsaW5lVmlld2VyLmFkZFNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcih0aGlzKTsKKworCQkJCQkvLyBTZXQgdXAgdGhlIHRyZWUgdmlld2VyLgorCQkJCQkvLworCQkJCQljb250ZW50T3V0bGluZVZpZXdlci5zZXRDb250ZW50UHJvdmlkZXIobmV3IEFkYXB0ZXJGYWN0b3J5Q29udGVudFByb3ZpZGVyKGFkYXB0ZXJGYWN0b3J5KSk7CisJCQkJCWNvbnRlbnRPdXRsaW5lVmlld2VyLnNldExhYmVsUHJvdmlkZXIobmV3IEFkYXB0ZXJGYWN0b3J5TGFiZWxQcm92aWRlcihhZGFwdGVyRmFjdG9yeSkpOworCQkJCQljb250ZW50T3V0bGluZVZpZXdlci5zZXRJbnB1dChlZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkpOworCisJCQkJCS8vIE1ha2Ugc3VyZSBvdXIgcG9wdXBzIHdvcmsuCisJCQkJCS8vCisJCQkJCWNyZWF0ZUNvbnRleHRNZW51Rm9yKGNvbnRlbnRPdXRsaW5lVmlld2VyKTsKKworCQkJCQlpZiAoIWVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKS5nZXRSZXNvdXJjZXMoKS5pc0VtcHR5KCkpIHsKKwkJCQkJICAvLyBTZWxlY3QgdGhlIHJvb3Qgb2JqZWN0IGluIHRoZSB2aWV3LgorCQkJCQkgIC8vCisJCQkJCSAgY29udGVudE91dGxpbmVWaWV3ZXIuc2V0U2VsZWN0aW9uKG5ldyBTdHJ1Y3R1cmVkU2VsZWN0aW9uKGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKS5nZXRSZXNvdXJjZXMoKS5nZXQoMCkpLCB0cnVlKTsKKwkJCQkJfQorCQkJCX0KKworCQkJCUBPdmVycmlkZQorCQkJCXB1YmxpYyB2b2lkIG1ha2VDb250cmlidXRpb25zKElNZW51TWFuYWdlciBtZW51TWFuYWdlciwgSVRvb2xCYXJNYW5hZ2VyIHRvb2xCYXJNYW5hZ2VyLCBJU3RhdHVzTGluZU1hbmFnZXIgc3RhdHVzTGluZU1hbmFnZXIpIHsKKwkJCQkJc3VwZXIubWFrZUNvbnRyaWJ1dGlvbnMobWVudU1hbmFnZXIsIHRvb2xCYXJNYW5hZ2VyLCBzdGF0dXNMaW5lTWFuYWdlcik7CisJCQkJCWNvbnRlbnRPdXRsaW5lU3RhdHVzTGluZU1hbmFnZXIgPSBzdGF0dXNMaW5lTWFuYWdlcjsKKwkJCQl9CisKKwkJCQlAT3ZlcnJpZGUKKwkJCQlwdWJsaWMgdm9pZCBzZXRBY3Rpb25CYXJzKElBY3Rpb25CYXJzIGFjdGlvbkJhcnMpIHsKKwkJCQkJc3VwZXIuc2V0QWN0aW9uQmFycyhhY3Rpb25CYXJzKTsKKwkJCQkJZ2V0QWN0aW9uQmFyQ29udHJpYnV0b3IoKS5zaGFyZUdsb2JhbEFjdGlvbnModGhpcywgYWN0aW9uQmFycyk7CisJCQkJfQorCQkJfQorCisJCQljb250ZW50T3V0bGluZVBhZ2UgPSBuZXcgTXlDb250ZW50T3V0bGluZVBhZ2UoKTsKKworCQkJLy8gTGlzdGVuIHRvIHNlbGVjdGlvbiBzbyB0aGF0IHdlIGNhbiBoYW5kbGUgaXQgaXMgYSBzcGVjaWFsIHdheS4KKwkJCS8vCisJCQljb250ZW50T3V0bGluZVBhZ2UuYWRkU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyCisJCQkJKG5ldyBJU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyKCkgeworCQkJCQkgLy8gVGhpcyBlbnN1cmVzIHRoYXQgd2UgaGFuZGxlIHNlbGVjdGlvbnMgY29ycmVjdGx5LgorCQkJCQkgLy8KKwkJCQkJIHB1YmxpYyB2b2lkIHNlbGVjdGlvbkNoYW5nZWQoU2VsZWN0aW9uQ2hhbmdlZEV2ZW50IGV2ZW50KSB7CisJCQkJCQkgaGFuZGxlQ29udGVudE91dGxpbmVTZWxlY3Rpb24oZXZlbnQuZ2V0U2VsZWN0aW9uKCkpOworCQkJCQkgfQorCQkJCSB9KTsKKwkJfQorCisJCXJldHVybiBjb250ZW50T3V0bGluZVBhZ2U7CisJfQorCisJLyoqCisJICogVGhpcyBhY2Nlc3NlcyBhIGNhY2hlZCB2ZXJzaW9uIG9mIHRoZSBwcm9wZXJ0eSBzaGVldC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgSVByb3BlcnR5U2hlZXRQYWdlIGdldFByb3BlcnR5U2hlZXRQYWdlKCkgeworCQlpZiAocHJvcGVydHlTaGVldFBhZ2UgPT0gbnVsbCkgeworCQkJcHJvcGVydHlTaGVldFBhZ2UgPQorCQkJCW5ldyBFeHRlbmRlZFByb3BlcnR5U2hlZXRQYWdlKGVkaXRpbmdEb21haW4pIHsKKwkJCQkJQE92ZXJyaWRlCisJCQkJCXB1YmxpYyB2b2lkIHNldFNlbGVjdGlvblRvVmlld2VyKExpc3Q8Pz4gc2VsZWN0aW9uKSB7CisJCQkJCQlBbmFseXNpc0VkaXRvci50aGlzLnNldFNlbGVjdGlvblRvVmlld2VyKHNlbGVjdGlvbik7CisJCQkJCQlBbmFseXNpc0VkaXRvci50aGlzLnNldEZvY3VzKCk7CisJCQkJCX0KKworCQkJCQlAT3ZlcnJpZGUKKwkJCQkJcHVibGljIHZvaWQgc2V0QWN0aW9uQmFycyhJQWN0aW9uQmFycyBhY3Rpb25CYXJzKSB7CisJCQkJCQlzdXBlci5zZXRBY3Rpb25CYXJzKGFjdGlvbkJhcnMpOworCQkJCQkJZ2V0QWN0aW9uQmFyQ29udHJpYnV0b3IoKS5zaGFyZUdsb2JhbEFjdGlvbnModGhpcywgYWN0aW9uQmFycyk7CisJCQkJCX0KKwkJCQl9OworCQkJcHJvcGVydHlTaGVldFBhZ2Uuc2V0UHJvcGVydHlTb3VyY2VQcm92aWRlcihuZXcgQWRhcHRlckZhY3RvcnlDb250ZW50UHJvdmlkZXIoYWRhcHRlckZhY3RvcnkpKTsKKwkJfQorCisJCXJldHVybiBwcm9wZXJ0eVNoZWV0UGFnZTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGRlYWxzIHdpdGggaG93IHdlIHdhbnQgc2VsZWN0aW9uIGluIHRoZSBvdXRsaW5lciB0byBhZmZlY3QgdGhlIG90aGVyIHZpZXdzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIGhhbmRsZUNvbnRlbnRPdXRsaW5lU2VsZWN0aW9uKElTZWxlY3Rpb24gc2VsZWN0aW9uKSB7CisJCWlmIChjdXJyZW50Vmlld2VyUGFuZSAhPSBudWxsICYmICFzZWxlY3Rpb24uaXNFbXB0eSgpICYmIHNlbGVjdGlvbiBpbnN0YW5jZW9mIElTdHJ1Y3R1cmVkU2VsZWN0aW9uKSB7CisJCQlJdGVyYXRvcjw/PiBzZWxlY3RlZEVsZW1lbnRzID0gKChJU3RydWN0dXJlZFNlbGVjdGlvbilzZWxlY3Rpb24pLml0ZXJhdG9yKCk7CisJCQlpZiAoc2VsZWN0ZWRFbGVtZW50cy5oYXNOZXh0KCkpIHsKKwkJCQkvLyBHZXQgdGhlIGZpcnN0IHNlbGVjdGVkIGVsZW1lbnQuCisJCQkJLy8KKwkJCQlPYmplY3Qgc2VsZWN0ZWRFbGVtZW50ID0gc2VsZWN0ZWRFbGVtZW50cy5uZXh0KCk7CisKKwkJCQkvLyBJZiBpdCdzIHRoZSBzZWxlY3Rpb24gdmlld2VyLCB0aGVuIHdlIHdhbnQgaXQgdG8gc2VsZWN0IHRoZSBzYW1lIHNlbGVjdGlvbiBhcyB0aGlzIHNlbGVjdGlvbi4KKwkJCQkvLworCQkJCWlmIChjdXJyZW50Vmlld2VyUGFuZS5nZXRWaWV3ZXIoKSA9PSBzZWxlY3Rpb25WaWV3ZXIpIHsKKwkJCQkJQXJyYXlMaXN0PE9iamVjdD4gc2VsZWN0aW9uTGlzdCA9IG5ldyBBcnJheUxpc3Q8T2JqZWN0PigpOworCQkJCQlzZWxlY3Rpb25MaXN0LmFkZChzZWxlY3RlZEVsZW1lbnQpOworCQkJCQl3aGlsZSAoc2VsZWN0ZWRFbGVtZW50cy5oYXNOZXh0KCkpIHsKKwkJCQkJCXNlbGVjdGlvbkxpc3QuYWRkKHNlbGVjdGVkRWxlbWVudHMubmV4dCgpKTsKKwkJCQkJfQorCisJCQkJCS8vIFNldCB0aGUgc2VsZWN0aW9uIHRvIHRoZSB3aWRnZXQuCisJCQkJCS8vCisJCQkJCXNlbGVjdGlvblZpZXdlci5zZXRTZWxlY3Rpb24obmV3IFN0cnVjdHVyZWRTZWxlY3Rpb24oc2VsZWN0aW9uTGlzdCkpOworCQkJCX0KKwkJCQllbHNlIHsKKwkJCQkJLy8gU2V0IHRoZSBpbnB1dCB0byB0aGUgd2lkZ2V0LgorCQkJCQkvLworCQkJCQlpZiAoY3VycmVudFZpZXdlclBhbmUuZ2V0Vmlld2VyKCkuZ2V0SW5wdXQoKSAhPSBzZWxlY3RlZEVsZW1lbnQpIHsKKwkJCQkJCWN1cnJlbnRWaWV3ZXJQYW5lLmdldFZpZXdlcigpLnNldElucHV0KHNlbGVjdGVkRWxlbWVudCk7CisJCQkJCQljdXJyZW50Vmlld2VyUGFuZS5zZXRUaXRsZShzZWxlY3RlZEVsZW1lbnQpOworCQkJCQl9CisJCQkJfQorCQkJfQorCQl9CisJfQorCisJLyoqCisJICogVGhpcyBpcyBmb3IgaW1wbGVtZW50aW5nIHtAbGluayBJRWRpdG9yUGFydH0gYW5kIHNpbXBseSB0ZXN0cyB0aGUgY29tbWFuZCBzdGFjay4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgYm9vbGVhbiBpc0RpcnR5KCkgeworCQlyZXR1cm4gKChCYXNpY0NvbW1hbmRTdGFjayllZGl0aW5nRG9tYWluLmdldENvbW1hbmRTdGFjaygpKS5pc1NhdmVOZWVkZWQoKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGlzIGZvciBpbXBsZW1lbnRpbmcge0BsaW5rIElFZGl0b3JQYXJ0fSBhbmQgc2ltcGx5IHNhdmVzIHRoZSBtb2RlbCBmaWxlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGRvU2F2ZShJUHJvZ3Jlc3NNb25pdG9yIHByb2dyZXNzTW9uaXRvcikgeworCQkvLyBTYXZlIG9ubHkgcmVzb3VyY2VzIHRoYXQgaGF2ZSBhY3R1YWxseSBjaGFuZ2VkLgorCQkvLworCQlmaW5hbCBNYXA8T2JqZWN0LCBPYmplY3Q+IHNhdmVPcHRpb25zID0gbmV3IEhhc2hNYXA8T2JqZWN0LCBPYmplY3Q+KCk7CisJCXNhdmVPcHRpb25zLnB1dChSZXNvdXJjZS5PUFRJT05fU0FWRV9PTkxZX0lGX0NIQU5HRUQsIFJlc291cmNlLk9QVElPTl9TQVZFX09OTFlfSUZfQ0hBTkdFRF9NRU1PUllfQlVGRkVSKTsKKworCQkvLyBEbyB0aGUgd29yayB3aXRoaW4gYW4gb3BlcmF0aW9uIGJlY2F1c2UgdGhpcyBpcyBhIGxvbmcgcnVubmluZyBhY3Rpdml0eSB0aGF0IG1vZGlmaWVzIHRoZSB3b3JrYmVuY2guCisJCS8vCisJCVdvcmtzcGFjZU1vZGlmeU9wZXJhdGlvbiBvcGVyYXRpb24gPQorCQkJbmV3IFdvcmtzcGFjZU1vZGlmeU9wZXJhdGlvbigpIHsKKwkJCQkvLyBUaGlzIGlzIHRoZSBtZXRob2QgdGhhdCBnZXRzIGludm9rZWQgd2hlbiB0aGUgb3BlcmF0aW9uIHJ1bnMuCisJCQkJLy8KKwkJCQlAT3ZlcnJpZGUKKwkJCQlwdWJsaWMgdm9pZCBleGVjdXRlKElQcm9ncmVzc01vbml0b3IgbW9uaXRvcikgeworCQkJCQkvLyBTYXZlIHRoZSByZXNvdXJjZXMgdG8gdGhlIGZpbGUgc3lzdGVtLgorCQkJCQkvLworCQkJCQlib29sZWFuIGZpcnN0ID0gdHJ1ZTsKKwkJCQkJZm9yIChSZXNvdXJjZSByZXNvdXJjZSA6IGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKS5nZXRSZXNvdXJjZXMoKSkgeworCQkJCQkJaWYgKChmaXJzdCB8fCAhcmVzb3VyY2UuZ2V0Q29udGVudHMoKS5pc0VtcHR5KCkgfHwgaXNQZXJzaXN0ZWQocmVzb3VyY2UpKSAmJiAhZWRpdGluZ0RvbWFpbi5pc1JlYWRPbmx5KHJlc291cmNlKSkgeworCQkJCQkJCXRyeSB7CisJCQkJCQkJCWxvbmcgdGltZVN0YW1wID0gcmVzb3VyY2UuZ2V0VGltZVN0YW1wKCk7CisJCQkJCQkJCXJlc291cmNlLnNhdmUoc2F2ZU9wdGlvbnMpOworCQkJCQkJCQlpZiAocmVzb3VyY2UuZ2V0VGltZVN0YW1wKCkgIT0gdGltZVN0YW1wKSB7CisJCQkJCQkJCQlzYXZlZFJlc291cmNlcy5hZGQocmVzb3VyY2UpOworCQkJCQkJCQl9CisJCQkJCQkJfQorCQkJCQkJCWNhdGNoIChFeGNlcHRpb24gZXhjZXB0aW9uKSB7CisJCQkJCQkJCXJlc291cmNlVG9EaWFnbm9zdGljTWFwLnB1dChyZXNvdXJjZSwgYW5hbHl6ZVJlc291cmNlUHJvYmxlbXMocmVzb3VyY2UsIGV4Y2VwdGlvbikpOworCQkJCQkJCX0KKwkJCQkJCQlmaXJzdCA9IGZhbHNlOworCQkJCQkJfQorCQkJCQl9CisJCQkJfQorCQkJfTsKKworCQl1cGRhdGVQcm9ibGVtSW5kaWNhdGlvbiA9IGZhbHNlOworCQl0cnkgeworCQkJLy8gVGhpcyBydW5zIHRoZSBvcHRpb25zLCBhbmQgc2hvd3MgcHJvZ3Jlc3MuCisJCQkvLworCQkJbmV3IFByb2dyZXNzTW9uaXRvckRpYWxvZyhnZXRTaXRlKCkuZ2V0U2hlbGwoKSkucnVuKHRydWUsIGZhbHNlLCBvcGVyYXRpb24pOworCisJCQkvLyBSZWZyZXNoIHRoZSBuZWNlc3Nhcnkgc3RhdGUuCisJCQkvLworCQkJKChCYXNpY0NvbW1hbmRTdGFjayllZGl0aW5nRG9tYWluLmdldENvbW1hbmRTdGFjaygpKS5zYXZlSXNEb25lKCk7CisJCQlmaXJlUHJvcGVydHlDaGFuZ2UoSUVkaXRvclBhcnQuUFJPUF9ESVJUWSk7CisJCX0KKwkJY2F0Y2ggKEV4Y2VwdGlvbiBleGNlcHRpb24pIHsKKwkJCS8vIFNvbWV0aGluZyB3ZW50IHdyb25nIHRoYXQgc2hvdWxkbid0LgorCQkJLy8KKwkJCUFuYWx5c2lzRWRpdFBsdWdpbi5JTlNUQU5DRS5sb2coZXhjZXB0aW9uKTsKKwkJfQorCQl1cGRhdGVQcm9ibGVtSW5kaWNhdGlvbiA9IHRydWU7CisJCXVwZGF0ZVByb2JsZW1JbmRpY2F0aW9uKCk7CisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIHdoZXRoZXIgc29tZXRoaW5nIGhhcyBiZWVuIHBlcnNpc3RlZCB0byB0aGUgVVJJIG9mIHRoZSBzcGVjaWZpZWQgcmVzb3VyY2UuCisJICogVGhlIGltcGxlbWVudGF0aW9uIHVzZXMgdGhlIFVSSSBjb252ZXJ0ZXIgZnJvbSB0aGUgZWRpdG9yJ3MgcmVzb3VyY2Ugc2V0IHRvIHRyeSB0byBvcGVuIGFuIGlucHV0IHN0cmVhbS4gCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIGJvb2xlYW4gaXNQZXJzaXN0ZWQoUmVzb3VyY2UgcmVzb3VyY2UpIHsKKwkJYm9vbGVhbiByZXN1bHQgPSBmYWxzZTsKKwkJdHJ5IHsKKwkJCUlucHV0U3RyZWFtIHN0cmVhbSA9IGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKS5nZXRVUklDb252ZXJ0ZXIoKS5jcmVhdGVJbnB1dFN0cmVhbShyZXNvdXJjZS5nZXRVUkkoKSk7CisJCQlpZiAoc3RyZWFtICE9IG51bGwpIHsKKwkJCQlyZXN1bHQgPSB0cnVlOworCQkJCXN0cmVhbS5jbG9zZSgpOworCQkJfQorCQl9CisJCWNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7CisJCQkvLyBJZ25vcmUKKwkJfQorCQlyZXR1cm4gcmVzdWx0OworCX0KKworCS8qKgorCSAqIFRoaXMgYWx3YXlzIHJldHVybnMgdHJ1ZSBiZWNhdXNlIGl0IGlzIG5vdCBjdXJyZW50bHkgc3VwcG9ydGVkLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBib29sZWFuIGlzU2F2ZUFzQWxsb3dlZCgpIHsKKwkJcmV0dXJuIHRydWU7CisJfQorCisJLyoqCisJICogVGhpcyBhbHNvIGNoYW5nZXMgdGhlIGVkaXRvcidzIGlucHV0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGRvU2F2ZUFzKCkgeworCQlTYXZlQXNEaWFsb2cgc2F2ZUFzRGlhbG9nID0gbmV3IFNhdmVBc0RpYWxvZyhnZXRTaXRlKCkuZ2V0U2hlbGwoKSk7CisJCXNhdmVBc0RpYWxvZy5vcGVuKCk7CisJCUlQYXRoIHBhdGggPSBzYXZlQXNEaWFsb2cuZ2V0UmVzdWx0KCk7CisJCWlmIChwYXRoICE9IG51bGwpIHsKKwkJCUlGaWxlIGZpbGUgPSBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuZ2V0Um9vdCgpLmdldEZpbGUocGF0aCk7CisJCQlpZiAoZmlsZSAhPSBudWxsKSB7CisJCQkJZG9TYXZlQXMoVVJJLmNyZWF0ZVBsYXRmb3JtUmVzb3VyY2VVUkkoZmlsZS5nZXRGdWxsUGF0aCgpLnRvU3RyaW5nKCksIHRydWUpLCBuZXcgRmlsZUVkaXRvcklucHV0KGZpbGUpKTsKKwkJCX0KKwkJfQorCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIGRvU2F2ZUFzKFVSSSB1cmksIElFZGl0b3JJbnB1dCBlZGl0b3JJbnB1dCkgeworCQkoZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpLmdldFJlc291cmNlcygpLmdldCgwKSkuc2V0VVJJKHVyaSk7CisJCXNldElucHV0V2l0aE5vdGlmeShlZGl0b3JJbnB1dCk7CisJCXNldFBhcnROYW1lKGVkaXRvcklucHV0LmdldE5hbWUoKSk7CisJCUlQcm9ncmVzc01vbml0b3IgcHJvZ3Jlc3NNb25pdG9yID0KKwkJCWdldEFjdGlvbkJhcnMoKS5nZXRTdGF0dXNMaW5lTWFuYWdlcigpICE9IG51bGwgPworCQkJCWdldEFjdGlvbkJhcnMoKS5nZXRTdGF0dXNMaW5lTWFuYWdlcigpLmdldFByb2dyZXNzTW9uaXRvcigpIDoKKwkJCQluZXcgTnVsbFByb2dyZXNzTW9uaXRvcigpOworCQlkb1NhdmUocHJvZ3Jlc3NNb25pdG9yKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBnb3RvTWFya2VyKElNYXJrZXIgbWFya2VyKSB7CisJCXRyeSB7CisJCQlpZiAobWFya2VyLmdldFR5cGUoKS5lcXVhbHMoRVZhbGlkYXRvci5NQVJLRVIpKSB7CisJCQkJU3RyaW5nIHVyaUF0dHJpYnV0ZSA9IG1hcmtlci5nZXRBdHRyaWJ1dGUoRVZhbGlkYXRvci5VUklfQVRUUklCVVRFLCBudWxsKTsKKwkJCQlpZiAodXJpQXR0cmlidXRlICE9IG51bGwpIHsKKwkJCQkJVVJJIHVyaSA9IFVSSS5jcmVhdGVVUkkodXJpQXR0cmlidXRlKTsKKwkJCQkJRU9iamVjdCBlT2JqZWN0ID0gZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpLmdldEVPYmplY3QodXJpLCB0cnVlKTsKKwkJCQkJaWYgKGVPYmplY3QgIT0gbnVsbCkgeworCQkJCQkgIHNldFNlbGVjdGlvblRvVmlld2VyKENvbGxlY3Rpb25zLnNpbmdsZXRvbihlZGl0aW5nRG9tYWluLmdldFdyYXBwZXIoZU9iamVjdCkpKTsKKwkJCQkJfQorCQkJCX0KKwkJCX0KKwkJfQorCQljYXRjaCAoQ29yZUV4Y2VwdGlvbiBleGNlcHRpb24pIHsKKwkJCUFuYWx5c2lzRWRpdFBsdWdpbi5JTlNUQU5DRS5sb2coZXhjZXB0aW9uKTsKKwkJfQorCX0KKworCS8qKgorCSAqIFRoaXMgaXMgY2FsbGVkIGR1cmluZyBzdGFydHVwLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGluaXQoSUVkaXRvclNpdGUgc2l0ZSwgSUVkaXRvcklucHV0IGVkaXRvcklucHV0KSB7CisJCXNldFNpdGUoc2l0ZSk7CisJCXNldElucHV0V2l0aE5vdGlmeShlZGl0b3JJbnB1dCk7CisJCXNldFBhcnROYW1lKGVkaXRvcklucHV0LmdldE5hbWUoKSk7CisJCXNpdGUuc2V0U2VsZWN0aW9uUHJvdmlkZXIodGhpcyk7CisJCXNpdGUuZ2V0UGFnZSgpLmFkZFBhcnRMaXN0ZW5lcihwYXJ0TGlzdGVuZXIpOworCQlSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuYWRkUmVzb3VyY2VDaGFuZ2VMaXN0ZW5lcihyZXNvdXJjZUNoYW5nZUxpc3RlbmVyLCBJUmVzb3VyY2VDaGFuZ2VFdmVudC5QT1NUX0NIQU5HRSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgc2V0Rm9jdXMoKSB7CisJCWlmIChjdXJyZW50Vmlld2VyUGFuZSAhPSBudWxsKSB7CisJCQljdXJyZW50Vmlld2VyUGFuZS5zZXRGb2N1cygpOworCQl9CisJCWVsc2UgeworCQkJZ2V0Q29udHJvbChnZXRBY3RpdmVQYWdlKCkpLnNldEZvY3VzKCk7CisJCX0KKwl9CisKKwkvKioKKwkgKiBUaGlzIGltcGxlbWVudHMge0BsaW5rIG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvblByb3ZpZGVyfS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBhZGRTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIoSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lciBsaXN0ZW5lcikgeworCQlzZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXJzLmFkZChsaXN0ZW5lcik7CisJfQorCisJLyoqCisJICogVGhpcyBpbXBsZW1lbnRzIHtAbGluayBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb25Qcm92aWRlcn0uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgcmVtb3ZlU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyKElTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIgbGlzdGVuZXIpIHsKKwkJc2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVycy5yZW1vdmUobGlzdGVuZXIpOworCX0KKworCS8qKgorCSAqIFRoaXMgaW1wbGVtZW50cyB7QGxpbmsgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uUHJvdmlkZXJ9IHRvIHJldHVybiB0aGlzIGVkaXRvcidzIG92ZXJhbGwgc2VsZWN0aW9uLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBJU2VsZWN0aW9uIGdldFNlbGVjdGlvbigpIHsKKwkJcmV0dXJuIGVkaXRvclNlbGVjdGlvbjsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGltcGxlbWVudHMge0BsaW5rIG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvblByb3ZpZGVyfSB0byBzZXQgdGhpcyBlZGl0b3IncyBvdmVyYWxsIHNlbGVjdGlvbi4KKwkgKiBDYWxsaW5nIHRoaXMgcmVzdWx0IHdpbGwgbm90aWZ5IHRoZSBsaXN0ZW5lcnMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgc2V0U2VsZWN0aW9uKElTZWxlY3Rpb24gc2VsZWN0aW9uKSB7CisJCWVkaXRvclNlbGVjdGlvbiA9IHNlbGVjdGlvbjsKKworCQlmb3IgKElTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIgbGlzdGVuZXIgOiBzZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXJzKSB7CisJCQlsaXN0ZW5lci5zZWxlY3Rpb25DaGFuZ2VkKG5ldyBTZWxlY3Rpb25DaGFuZ2VkRXZlbnQodGhpcywgc2VsZWN0aW9uKSk7CisJCX0KKwkJc2V0U3RhdHVzTGluZU1hbmFnZXIoc2VsZWN0aW9uKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRTdGF0dXNMaW5lTWFuYWdlcihJU2VsZWN0aW9uIHNlbGVjdGlvbikgeworCQlJU3RhdHVzTGluZU1hbmFnZXIgc3RhdHVzTGluZU1hbmFnZXIgPSBjdXJyZW50Vmlld2VyICE9IG51bGwgJiYgY3VycmVudFZpZXdlciA9PSBjb250ZW50T3V0bGluZVZpZXdlciA/CisJCQljb250ZW50T3V0bGluZVN0YXR1c0xpbmVNYW5hZ2VyIDogZ2V0QWN0aW9uQmFycygpLmdldFN0YXR1c0xpbmVNYW5hZ2VyKCk7CisKKwkJaWYgKHN0YXR1c0xpbmVNYW5hZ2VyICE9IG51bGwpIHsKKwkJCWlmIChzZWxlY3Rpb24gaW5zdGFuY2VvZiBJU3RydWN0dXJlZFNlbGVjdGlvbikgeworCQkJCUNvbGxlY3Rpb248Pz4gY29sbGVjdGlvbiA9ICgoSVN0cnVjdHVyZWRTZWxlY3Rpb24pc2VsZWN0aW9uKS50b0xpc3QoKTsKKwkJCQlzd2l0Y2ggKGNvbGxlY3Rpb24uc2l6ZSgpKSB7CisJCQkJCWNhc2UgMDogeworCQkJCQkJc3RhdHVzTGluZU1hbmFnZXIuc2V0TWVzc2FnZShnZXRTdHJpbmcoIl9VSV9Ob09iamVjdFNlbGVjdGVkIikpOworCQkJCQkJYnJlYWs7CisJCQkJCX0KKwkJCQkJY2FzZSAxOiB7CisJCQkJCQlTdHJpbmcgdGV4dCA9IG5ldyBBZGFwdGVyRmFjdG9yeUl0ZW1EZWxlZ2F0b3IoYWRhcHRlckZhY3RvcnkpLmdldFRleHQoY29sbGVjdGlvbi5pdGVyYXRvcigpLm5leHQoKSk7CisJCQkJCQlzdGF0dXNMaW5lTWFuYWdlci5zZXRNZXNzYWdlKGdldFN0cmluZygiX1VJX1NpbmdsZU9iamVjdFNlbGVjdGVkIiwgdGV4dCkpOworCQkJCQkJYnJlYWs7CisJCQkJCX0KKwkJCQkJZGVmYXVsdDogeworCQkJCQkJc3RhdHVzTGluZU1hbmFnZXIuc2V0TWVzc2FnZShnZXRTdHJpbmcoIl9VSV9NdWx0aU9iamVjdFNlbGVjdGVkIiwgSW50ZWdlci50b1N0cmluZyhjb2xsZWN0aW9uLnNpemUoKSkpKTsKKwkJCQkJCWJyZWFrOworCQkJCQl9CisJCQkJfQorCQkJfQorCQkJZWxzZSB7CisJCQkJc3RhdHVzTGluZU1hbmFnZXIuc2V0TWVzc2FnZSgiIik7CisJCQl9CisJCX0KKwl9CisKKwkvKioKKwkgKiBUaGlzIGxvb2tzIHVwIGEgc3RyaW5nIGluIHRoZSBwbHVnaW4ncyBwbHVnaW4ucHJvcGVydGllcyBmaWxlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByaXZhdGUgc3RhdGljIFN0cmluZyBnZXRTdHJpbmcoU3RyaW5nIGtleSkgeworCQlyZXR1cm4gQW5hbHlzaXNFZGl0UGx1Z2luLklOU1RBTkNFLmdldFN0cmluZyhrZXkpOworCX0KKworCS8qKgorCSAqIFRoaXMgbG9va3MgdXAgYSBzdHJpbmcgaW4gcGx1Z2luLnByb3BlcnRpZXMsIG1ha2luZyBhIHN1YnN0aXR1dGlvbi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcml2YXRlIHN0YXRpYyBTdHJpbmcgZ2V0U3RyaW5nKFN0cmluZyBrZXksIE9iamVjdCBzMSkgeworCQlyZXR1cm4gQW5hbHlzaXNFZGl0UGx1Z2luLklOU1RBTkNFLmdldFN0cmluZyhrZXksIG5ldyBPYmplY3QgW10geyBzMSB9KTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGltcGxlbWVudHMge0BsaW5rIG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JTWVudUxpc3RlbmVyfSB0byBoZWxwIGZpbGwgdGhlIGNvbnRleHQgbWVudXMgd2l0aCBjb250cmlidXRpb25zIGZyb20gdGhlIEVkaXQgbWVudS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBtZW51QWJvdXRUb1Nob3coSU1lbnVNYW5hZ2VyIG1lbnVNYW5hZ2VyKSB7CisJCSgoSU1lbnVMaXN0ZW5lcilnZXRFZGl0b3JTaXRlKCkuZ2V0QWN0aW9uQmFyQ29udHJpYnV0b3IoKSkubWVudUFib3V0VG9TaG93KG1lbnVNYW5hZ2VyKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRWRpdGluZ0RvbWFpbkFjdGlvbkJhckNvbnRyaWJ1dG9yIGdldEFjdGlvbkJhckNvbnRyaWJ1dG9yKCkgeworCQlyZXR1cm4gKEVkaXRpbmdEb21haW5BY3Rpb25CYXJDb250cmlidXRvcilnZXRFZGl0b3JTaXRlKCkuZ2V0QWN0aW9uQmFyQ29udHJpYnV0b3IoKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgSUFjdGlvbkJhcnMgZ2V0QWN0aW9uQmFycygpIHsKKwkJcmV0dXJuIGdldEFjdGlvbkJhckNvbnRyaWJ1dG9yKCkuZ2V0QWN0aW9uQmFycygpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBBZGFwdGVyRmFjdG9yeSBnZXRBZGFwdGVyRmFjdG9yeSgpIHsKKwkJcmV0dXJuIGFkYXB0ZXJGYWN0b3J5OworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGRpc3Bvc2UoKSB7CisJCXVwZGF0ZVByb2JsZW1JbmRpY2F0aW9uID0gZmFsc2U7CisKKwkJUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLnJlbW92ZVJlc291cmNlQ2hhbmdlTGlzdGVuZXIocmVzb3VyY2VDaGFuZ2VMaXN0ZW5lcik7CisKKwkJZ2V0U2l0ZSgpLmdldFBhZ2UoKS5yZW1vdmVQYXJ0TGlzdGVuZXIocGFydExpc3RlbmVyKTsKKworCQlhZGFwdGVyRmFjdG9yeS5kaXNwb3NlKCk7CisKKwkJaWYgKGdldEFjdGlvbkJhckNvbnRyaWJ1dG9yKCkuZ2V0QWN0aXZlRWRpdG9yKCkgPT0gdGhpcykgeworCQkJZ2V0QWN0aW9uQmFyQ29udHJpYnV0b3IoKS5zZXRBY3RpdmVFZGl0b3IobnVsbCk7CisJCX0KKworCQlpZiAocHJvcGVydHlTaGVldFBhZ2UgIT0gbnVsbCkgeworCQkJcHJvcGVydHlTaGVldFBhZ2UuZGlzcG9zZSgpOworCQl9CisKKwkJaWYgKGNvbnRlbnRPdXRsaW5lUGFnZSAhPSBudWxsKSB7CisJCQljb250ZW50T3V0bGluZVBhZ2UuZGlzcG9zZSgpOworCQl9CisKKwkJc3VwZXIuZGlzcG9zZSgpOworCX0KKworCS8qKgorCSAqIFJldHVybnMgd2hldGhlciB0aGUgb3V0bGluZSB2aWV3IHNob3VsZCBiZSBwcmVzZW50ZWQgdG8gdGhlIHVzZXIuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIGJvb2xlYW4gc2hvd091dGxpbmVWaWV3KCkgeworCQlyZXR1cm4gdHJ1ZTsKKwl9Cit9CmRpZmYgLS1naXQgYS9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2FuYWx5c2lzL3ByZXNlbnRhdGlvbi9BbmFseXNpc01vZGVsV2l6YXJkLmphdmEgYi9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2FuYWx5c2lzL3ByZXNlbnRhdGlvbi9BbmFseXNpc01vZGVsV2l6YXJkLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmQwNGJlMAotLS0gL2Rldi9udWxsCisrKyBiL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vYW5hbHlzaXMvcHJlc2VudGF0aW9uL0FuYWx5c2lzTW9kZWxXaXphcmQuamF2YQpAQCAtMCwwICsxLDYxMSBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLnByZXNlbnRhdGlvbjsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogCisgKiBDb3B5cmlnaHQgKGMpIDIwMTEgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuIAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyAKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0IAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwgCisgKiAKKyAqIENvbnRyaWJ1dG9yczogCisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OworaW1wb3J0IGphdmEudXRpbC5BcnJheXM7CitpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247CitpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb25zOworaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOworaW1wb3J0IGphdmEudXRpbC5MaXN0OworaW1wb3J0IGphdmEudXRpbC5NYXA7CitpbXBvcnQgamF2YS51dGlsLk1pc3NpbmdSZXNvdXJjZUV4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLnV0aWwuU3RyaW5nVG9rZW5pemVyOworCitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUNvbnRhaW5lcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JRmlsZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JRm9sZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0OworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklSZXNvdXJjZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5SZXNvdXJjZXNQbHVnaW47CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQcm9ncmVzc01vbml0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBhdGg7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5Db21tb25QbHVnaW47CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlVSSTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3NpZmllcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUucmVzb3VyY2UuUmVzb3VyY2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnJlc291cmNlLlJlc291cmNlU2V0OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5yZXNvdXJjZS5pbXBsLlJlc291cmNlU2V0SW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUueG1pLlhNTFJlc291cmNlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLnByb3ZpZGVyLkV4dGVuZGVkSW1hZ2VSZWdpc3RyeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5kaWFsb2dzLk1lc3NhZ2VEaWFsb2c7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVN0cnVjdHVyZWRTZWxlY3Rpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5TdHJ1Y3R1cmVkU2VsZWN0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLndpemFyZC5XaXphcmQ7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uud2l6YXJkLldpemFyZFBhZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5BbmFseXNpc0ZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5BbmFseXNpc1BhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5wcm92aWRlci5BbmFseXNpc0VkaXRQbHVnaW47CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LlNXVDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLk1vZGlmeUV2ZW50OworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuTW9kaWZ5TGlzdGVuZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5HcmlkRGF0YTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QubGF5b3V0LkdyaWRMYXlvdXQ7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tYm87CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkxhYmVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklOZXdXaXphcmQ7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaDsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5JV29ya2JlbmNoUGFnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5JV29ya2JlbmNoUGFydDsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5JV29ya2JlbmNoV2luZG93OworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLlBhcnRJbml0RXhjZXB0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLmFjdGlvbnMuV29ya3NwYWNlTW9kaWZ5T3BlcmF0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLmRpYWxvZ3MuV2l6YXJkTmV3RmlsZUNyZWF0aW9uUGFnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5wYXJ0LkZpbGVFZGl0b3JJbnB1dDsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5wYXJ0LklTZXRTZWxlY3Rpb25UYXJnZXQ7CisKKworLyoqCisgKiBUaGlzIGlzIGEgc2ltcGxlIHdpemFyZCBmb3IgY3JlYXRpbmcgYSBuZXcgbW9kZWwgZmlsZS4KKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIEFuYWx5c2lzTW9kZWxXaXphcmQgZXh0ZW5kcyBXaXphcmQgaW1wbGVtZW50cyBJTmV3V2l6YXJkIHsKKwkvKioKKwkgKiBUaGUgc3VwcG9ydGVkIGV4dGVuc2lvbnMgZm9yIGNyZWF0ZWQgZmlsZXMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBMaXN0PFN0cmluZz4gRklMRV9FWFRFTlNJT05TID0KKwkJQ29sbGVjdGlvbnMudW5tb2RpZmlhYmxlTGlzdChBcnJheXMuYXNMaXN0KEFuYWx5c2lzRWRpdFBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoIl9VSV9BbmFseXNpc0VkaXRvckZpbGVuYW1lRXh0ZW5zaW9ucyIpLnNwbGl0KCJcXHMqLFxccyoiKSkpOworCisJLyoqCisJICogQSBmb3JtYXR0ZWQgbGlzdCBvZiBzdXBwb3J0ZWQgZmlsZSBleHRlbnNpb25zLCBzdWl0YWJsZSBmb3IgZGlzcGxheS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBGT1JNQVRURURfRklMRV9FWFRFTlNJT05TID0KKwkJQW5hbHlzaXNFZGl0UGx1Z2luLklOU1RBTkNFLmdldFN0cmluZygiX1VJX0FuYWx5c2lzRWRpdG9yRmlsZW5hbWVFeHRlbnNpb25zIikucmVwbGFjZUFsbCgiXFxzKixcXHMqIiwgIiwgIik7CisKKwkvKioKKwkgKiBUaGlzIGNhY2hlcyBhbiBpbnN0YW5jZSBvZiB0aGUgbW9kZWwgcGFja2FnZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgQW5hbHlzaXNQYWNrYWdlIGFuYWx5c2lzUGFja2FnZSA9IEFuYWx5c2lzUGFja2FnZS5lSU5TVEFOQ0U7CisKKwkvKioKKwkgKiBUaGlzIGNhY2hlcyBhbiBpbnN0YW5jZSBvZiB0aGUgbW9kZWwgZmFjdG9yeS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgQW5hbHlzaXNGYWN0b3J5IGFuYWx5c2lzRmFjdG9yeSA9IGFuYWx5c2lzUGFja2FnZS5nZXRBbmFseXNpc0ZhY3RvcnkoKTsKKworCS8qKgorCSAqIFRoaXMgaXMgdGhlIGZpbGUgY3JlYXRpb24gcGFnZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgQW5hbHlzaXNNb2RlbFdpemFyZE5ld0ZpbGVDcmVhdGlvblBhZ2UgbmV3RmlsZUNyZWF0aW9uUGFnZTsKKworCS8qKgorCSAqIFRoaXMgaXMgdGhlIGluaXRpYWwgb2JqZWN0IGNyZWF0aW9uIHBhZ2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIEFuYWx5c2lzTW9kZWxXaXphcmRJbml0aWFsT2JqZWN0Q3JlYXRpb25QYWdlIGluaXRpYWxPYmplY3RDcmVhdGlvblBhZ2U7CisKKwkvKioKKwkgKiBSZW1lbWJlciB0aGUgc2VsZWN0aW9uIGR1cmluZyBpbml0aWFsaXphdGlvbiBmb3IgcG9wdWxhdGluZyB0aGUgZGVmYXVsdCBjb250YWluZXIuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIElTdHJ1Y3R1cmVkU2VsZWN0aW9uIHNlbGVjdGlvbjsKKworCS8qKgorCSAqIFJlbWVtYmVyIHRoZSB3b3JrYmVuY2ggZHVyaW5nIGluaXRpYWxpemF0aW9uLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBJV29ya2JlbmNoIHdvcmtiZW5jaDsKKworCS8qKgorCSAqIENhY2hlcyB0aGUgbmFtZXMgb2YgdGhlIHR5cGVzIHRoYXQgY2FuIGJlIGNyZWF0ZWQgYXMgdGhlIHJvb3Qgb2JqZWN0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBMaXN0PFN0cmluZz4gaW5pdGlhbE9iamVjdE5hbWVzOworCisJLyoqCisJICogVGhpcyBqdXN0IHJlY29yZHMgdGhlIGluZm9ybWF0aW9uLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIGluaXQoSVdvcmtiZW5jaCB3b3JrYmVuY2gsIElTdHJ1Y3R1cmVkU2VsZWN0aW9uIHNlbGVjdGlvbikgeworCQl0aGlzLndvcmtiZW5jaCA9IHdvcmtiZW5jaDsKKwkJdGhpcy5zZWxlY3Rpb24gPSBzZWxlY3Rpb247CisJCXNldFdpbmRvd1RpdGxlKEFuYWx5c2lzRWRpdFBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoIl9VSV9XaXphcmRfbGFiZWwiKSk7CisJCXNldERlZmF1bHRQYWdlSW1hZ2VEZXNjcmlwdG9yKEV4dGVuZGVkSW1hZ2VSZWdpc3RyeS5JTlNUQU5DRS5nZXRJbWFnZURlc2NyaXB0b3IoQW5hbHlzaXNFZGl0UGx1Z2luLklOU1RBTkNFLmdldEltYWdlKCJmdWxsL3dpemJhbi9OZXdBbmFseXNpcyIpKSk7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgbmFtZXMgb2YgdGhlIHR5cGVzIHRoYXQgY2FuIGJlIGNyZWF0ZWQgYXMgdGhlIHJvb3Qgb2JqZWN0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBDb2xsZWN0aW9uPFN0cmluZz4gZ2V0SW5pdGlhbE9iamVjdE5hbWVzKCkgeworCQlpZiAoaW5pdGlhbE9iamVjdE5hbWVzID09IG51bGwpIHsKKwkJCWluaXRpYWxPYmplY3ROYW1lcyA9IG5ldyBBcnJheUxpc3Q8U3RyaW5nPigpOworCQkJZm9yIChFQ2xhc3NpZmllciBlQ2xhc3NpZmllciA6IGFuYWx5c2lzUGFja2FnZS5nZXRFQ2xhc3NpZmllcnMoKSkgeworCQkJCWlmIChlQ2xhc3NpZmllciBpbnN0YW5jZW9mIEVDbGFzcykgeworCQkJCQlFQ2xhc3MgZUNsYXNzID0gKEVDbGFzcyllQ2xhc3NpZmllcjsKKwkJCQkJaWYgKCFlQ2xhc3MuaXNBYnN0cmFjdCgpKSB7CisJCQkJCQlpbml0aWFsT2JqZWN0TmFtZXMuYWRkKGVDbGFzcy5nZXROYW1lKCkpOworCQkJCQl9CisJCQkJfQorCQkJfQorCQkJQ29sbGVjdGlvbnMuc29ydChpbml0aWFsT2JqZWN0TmFtZXMsIENvbW1vblBsdWdpbi5JTlNUQU5DRS5nZXRDb21wYXJhdG9yKCkpOworCQl9CisJCXJldHVybiBpbml0aWFsT2JqZWN0TmFtZXM7CisJfQorCisJLyoqCisJICogQ3JlYXRlIGEgbmV3IG1vZGVsLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBFT2JqZWN0IGNyZWF0ZUluaXRpYWxNb2RlbCgpIHsKKwkJRUNsYXNzIGVDbGFzcyA9IChFQ2xhc3MpYW5hbHlzaXNQYWNrYWdlLmdldEVDbGFzc2lmaWVyKGluaXRpYWxPYmplY3RDcmVhdGlvblBhZ2UuZ2V0SW5pdGlhbE9iamVjdE5hbWUoKSk7CisJCUVPYmplY3Qgcm9vdE9iamVjdCA9IGFuYWx5c2lzRmFjdG9yeS5jcmVhdGUoZUNsYXNzKTsKKwkJcmV0dXJuIHJvb3RPYmplY3Q7CisJfQorCisJLyoqCisJICogRG8gdGhlIHdvcmsgYWZ0ZXIgZXZlcnl0aGluZyBpcyBzcGVjaWZpZWQuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIGJvb2xlYW4gcGVyZm9ybUZpbmlzaCgpIHsKKwkJdHJ5IHsKKwkJCS8vIFJlbWVtYmVyIHRoZSBmaWxlLgorCQkJLy8KKwkJCWZpbmFsIElGaWxlIG1vZGVsRmlsZSA9IGdldE1vZGVsRmlsZSgpOworCisJCQkvLyBEbyB0aGUgd29yayB3aXRoaW4gYW4gb3BlcmF0aW9uLgorCQkJLy8KKwkJCVdvcmtzcGFjZU1vZGlmeU9wZXJhdGlvbiBvcGVyYXRpb24gPQorCQkJCW5ldyBXb3Jrc3BhY2VNb2RpZnlPcGVyYXRpb24oKSB7CisJCQkJCUBPdmVycmlkZQorCQkJCQlwcm90ZWN0ZWQgdm9pZCBleGVjdXRlKElQcm9ncmVzc01vbml0b3IgcHJvZ3Jlc3NNb25pdG9yKSB7CisJCQkJCQl0cnkgeworCQkJCQkJCS8vIENyZWF0ZSBhIHJlc291cmNlIHNldAorCQkJCQkJCS8vCisJCQkJCQkJUmVzb3VyY2VTZXQgcmVzb3VyY2VTZXQgPSBuZXcgUmVzb3VyY2VTZXRJbXBsKCk7CisKKwkJCQkJCQkvLyBHZXQgdGhlIFVSSSBvZiB0aGUgbW9kZWwgZmlsZS4KKwkJCQkJCQkvLworCQkJCQkJCVVSSSBmaWxlVVJJID0gVVJJLmNyZWF0ZVBsYXRmb3JtUmVzb3VyY2VVUkkobW9kZWxGaWxlLmdldEZ1bGxQYXRoKCkudG9TdHJpbmcoKSwgdHJ1ZSk7CisKKwkJCQkJCQkvLyBDcmVhdGUgYSByZXNvdXJjZSBmb3IgdGhpcyBmaWxlLgorCQkJCQkJCS8vCisJCQkJCQkJUmVzb3VyY2UgcmVzb3VyY2UgPSByZXNvdXJjZVNldC5jcmVhdGVSZXNvdXJjZShmaWxlVVJJKTsKKworCQkJCQkJCS8vIEFkZCB0aGUgaW5pdGlhbCBtb2RlbCBvYmplY3QgdG8gdGhlIGNvbnRlbnRzLgorCQkJCQkJCS8vCisJCQkJCQkJRU9iamVjdCByb290T2JqZWN0ID0gY3JlYXRlSW5pdGlhbE1vZGVsKCk7CisJCQkJCQkJaWYgKHJvb3RPYmplY3QgIT0gbnVsbCkgeworCQkJCQkJCQlyZXNvdXJjZS5nZXRDb250ZW50cygpLmFkZChyb290T2JqZWN0KTsKKwkJCQkJCQl9CisKKwkJCQkJCQkvLyBTYXZlIHRoZSBjb250ZW50cyBvZiB0aGUgcmVzb3VyY2UgdG8gdGhlIGZpbGUgc3lzdGVtLgorCQkJCQkJCS8vCisJCQkJCQkJTWFwPE9iamVjdCwgT2JqZWN0PiBvcHRpb25zID0gbmV3IEhhc2hNYXA8T2JqZWN0LCBPYmplY3Q+KCk7CisJCQkJCQkJb3B0aW9ucy5wdXQoWE1MUmVzb3VyY2UuT1BUSU9OX0VOQ09ESU5HLCBpbml0aWFsT2JqZWN0Q3JlYXRpb25QYWdlLmdldEVuY29kaW5nKCkpOworCQkJCQkJCXJlc291cmNlLnNhdmUob3B0aW9ucyk7CisJCQkJCQl9CisJCQkJCQljYXRjaCAoRXhjZXB0aW9uIGV4Y2VwdGlvbikgeworCQkJCQkJCUFuYWx5c2lzRWRpdFBsdWdpbi5JTlNUQU5DRS5sb2coZXhjZXB0aW9uKTsKKwkJCQkJCX0KKwkJCQkJCWZpbmFsbHkgeworCQkJCQkJCXByb2dyZXNzTW9uaXRvci5kb25lKCk7CisJCQkJCQl9CisJCQkJCX0KKwkJCQl9OworCisJCQlnZXRDb250YWluZXIoKS5ydW4oZmFsc2UsIGZhbHNlLCBvcGVyYXRpb24pOworCisJCQkvLyBTZWxlY3QgdGhlIG5ldyBmaWxlIHJlc291cmNlIGluIHRoZSBjdXJyZW50IHZpZXcuCisJCQkvLworCQkJSVdvcmtiZW5jaFdpbmRvdyB3b3JrYmVuY2hXaW5kb3cgPSB3b3JrYmVuY2guZ2V0QWN0aXZlV29ya2JlbmNoV2luZG93KCk7CisJCQlJV29ya2JlbmNoUGFnZSBwYWdlID0gd29ya2JlbmNoV2luZG93LmdldEFjdGl2ZVBhZ2UoKTsKKwkJCWZpbmFsIElXb3JrYmVuY2hQYXJ0IGFjdGl2ZVBhcnQgPSBwYWdlLmdldEFjdGl2ZVBhcnQoKTsKKwkJCWlmIChhY3RpdmVQYXJ0IGluc3RhbmNlb2YgSVNldFNlbGVjdGlvblRhcmdldCkgeworCQkJCWZpbmFsIElTZWxlY3Rpb24gdGFyZ2V0U2VsZWN0aW9uID0gbmV3IFN0cnVjdHVyZWRTZWxlY3Rpb24obW9kZWxGaWxlKTsKKwkJCQlnZXRTaGVsbCgpLmdldERpc3BsYXkoKS5hc3luY0V4ZWMKKwkJCQkJKG5ldyBSdW5uYWJsZSgpIHsKKwkJCQkJCSBwdWJsaWMgdm9pZCBydW4oKSB7CisJCQkJCQkJICgoSVNldFNlbGVjdGlvblRhcmdldClhY3RpdmVQYXJ0KS5zZWxlY3RSZXZlYWwodGFyZ2V0U2VsZWN0aW9uKTsKKwkJCQkJCSB9CisJCQkJCSB9KTsKKwkJCX0KKworCQkJLy8gT3BlbiBhbiBlZGl0b3Igb24gdGhlIG5ldyBmaWxlLgorCQkJLy8KKwkJCXRyeSB7CisJCQkJcGFnZS5vcGVuRWRpdG9yCisJCQkJCShuZXcgRmlsZUVkaXRvcklucHV0KG1vZGVsRmlsZSksCisJCQkJCSB3b3JrYmVuY2guZ2V0RWRpdG9yUmVnaXN0cnkoKS5nZXREZWZhdWx0RWRpdG9yKG1vZGVsRmlsZS5nZXRGdWxsUGF0aCgpLnRvU3RyaW5nKCkpLmdldElkKCkpOwkJCQkJIAkgCisJCQl9CisJCQljYXRjaCAoUGFydEluaXRFeGNlcHRpb24gZXhjZXB0aW9uKSB7CisJCQkJTWVzc2FnZURpYWxvZy5vcGVuRXJyb3Iod29ya2JlbmNoV2luZG93LmdldFNoZWxsKCksIEFuYWx5c2lzRWRpdFBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoIl9VSV9PcGVuRWRpdG9yRXJyb3JfbGFiZWwiKSwgZXhjZXB0aW9uLmdldE1lc3NhZ2UoKSk7CisJCQkJcmV0dXJuIGZhbHNlOworCQkJfQorCisJCQlyZXR1cm4gdHJ1ZTsKKwkJfQorCQljYXRjaCAoRXhjZXB0aW9uIGV4Y2VwdGlvbikgeworCQkJQW5hbHlzaXNFZGl0UGx1Z2luLklOU1RBTkNFLmxvZyhleGNlcHRpb24pOworCQkJcmV0dXJuIGZhbHNlOworCQl9CisJfQorCisJLyoqCisJICogVGhpcyBpcyB0aGUgb25lIHBhZ2Ugb2YgdGhlIHdpemFyZC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgY2xhc3MgQW5hbHlzaXNNb2RlbFdpemFyZE5ld0ZpbGVDcmVhdGlvblBhZ2UgZXh0ZW5kcyBXaXphcmROZXdGaWxlQ3JlYXRpb25QYWdlIHsKKwkJLyoqCisJCSAqIFBhc3MgaW4gdGhlIHNlbGVjdGlvbi4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCXB1YmxpYyBBbmFseXNpc01vZGVsV2l6YXJkTmV3RmlsZUNyZWF0aW9uUGFnZShTdHJpbmcgcGFnZUlkLCBJU3RydWN0dXJlZFNlbGVjdGlvbiBzZWxlY3Rpb24pIHsKKwkJCXN1cGVyKHBhZ2VJZCwgc2VsZWN0aW9uKTsKKwkJfQorCisJCS8qKgorCQkgKiBUaGUgZnJhbWV3b3JrIGNhbGxzIHRoaXMgdG8gc2VlIGlmIHRoZSBmaWxlIGlzIGNvcnJlY3QuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlAT3ZlcnJpZGUKKwkJcHJvdGVjdGVkIGJvb2xlYW4gdmFsaWRhdGVQYWdlKCkgeworCQkJaWYgKHN1cGVyLnZhbGlkYXRlUGFnZSgpKSB7CisJCQkJU3RyaW5nIGV4dGVuc2lvbiA9IG5ldyBQYXRoKGdldEZpbGVOYW1lKCkpLmdldEZpbGVFeHRlbnNpb24oKTsKKwkJCQlpZiAoZXh0ZW5zaW9uID09IG51bGwgfHwgIUZJTEVfRVhURU5TSU9OUy5jb250YWlucyhleHRlbnNpb24pKSB7CisJCQkJCVN0cmluZyBrZXkgPSBGSUxFX0VYVEVOU0lPTlMuc2l6ZSgpID4gMSA/ICJfV0FSTl9GaWxlbmFtZUV4dGVuc2lvbnMiIDogIl9XQVJOX0ZpbGVuYW1lRXh0ZW5zaW9uIjsKKwkJCQkJc2V0RXJyb3JNZXNzYWdlKEFuYWx5c2lzRWRpdFBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoa2V5LCBuZXcgT2JqZWN0IFtdIHsgRk9STUFUVEVEX0ZJTEVfRVhURU5TSU9OUyB9KSk7CisJCQkJCXJldHVybiBmYWxzZTsKKwkJCQl9CisJCQkJcmV0dXJuIHRydWU7CisJCQl9CisJCQlyZXR1cm4gZmFsc2U7CisJCX0KKworCQkvKioKKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCXB1YmxpYyBJRmlsZSBnZXRNb2RlbEZpbGUoKSB7CisJCQlyZXR1cm4gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmdldFJvb3QoKS5nZXRGaWxlKGdldENvbnRhaW5lckZ1bGxQYXRoKCkuYXBwZW5kKGdldEZpbGVOYW1lKCkpKTsKKwkJfQorCX0KKworCS8qKgorCSAqIFRoaXMgaXMgdGhlIHBhZ2Ugd2hlcmUgdGhlIHR5cGUgb2Ygb2JqZWN0IHRvIGNyZWF0ZSBpcyBzZWxlY3RlZC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgY2xhc3MgQW5hbHlzaXNNb2RlbFdpemFyZEluaXRpYWxPYmplY3RDcmVhdGlvblBhZ2UgZXh0ZW5kcyBXaXphcmRQYWdlIHsKKwkJLyoqCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlwcm90ZWN0ZWQgQ29tYm8gaW5pdGlhbE9iamVjdEZpZWxkOworCisJCS8qKgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKi8KKwkJcHJvdGVjdGVkIExpc3Q8U3RyaW5nPiBlbmNvZGluZ3M7CisKKwkJLyoqCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlwcm90ZWN0ZWQgQ29tYm8gZW5jb2RpbmdGaWVsZDsKKworCQkvKioKKwkJICogUGFzcyBpbiB0aGUgc2VsZWN0aW9uLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJcHVibGljIEFuYWx5c2lzTW9kZWxXaXphcmRJbml0aWFsT2JqZWN0Q3JlYXRpb25QYWdlKFN0cmluZyBwYWdlSWQpIHsKKwkJCXN1cGVyKHBhZ2VJZCk7CisJCX0KKworCQkvKioKKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCXB1YmxpYyB2b2lkIGNyZWF0ZUNvbnRyb2woQ29tcG9zaXRlIHBhcmVudCkgeworCQkJQ29tcG9zaXRlIGNvbXBvc2l0ZSA9IG5ldyBDb21wb3NpdGUocGFyZW50LCBTV1QuTk9ORSk7CisJCQl7CisJCQkJR3JpZExheW91dCBsYXlvdXQgPSBuZXcgR3JpZExheW91dCgpOworCQkJCWxheW91dC5udW1Db2x1bW5zID0gMTsKKwkJCQlsYXlvdXQudmVydGljYWxTcGFjaW5nID0gMTI7CisJCQkJY29tcG9zaXRlLnNldExheW91dChsYXlvdXQpOworCisJCQkJR3JpZERhdGEgZGF0YSA9IG5ldyBHcmlkRGF0YSgpOworCQkJCWRhdGEudmVydGljYWxBbGlnbm1lbnQgPSBHcmlkRGF0YS5GSUxMOworCQkJCWRhdGEuZ3JhYkV4Y2Vzc1ZlcnRpY2FsU3BhY2UgPSB0cnVlOworCQkJCWRhdGEuaG9yaXpvbnRhbEFsaWdubWVudCA9IEdyaWREYXRhLkZJTEw7CisJCQkJY29tcG9zaXRlLnNldExheW91dERhdGEoZGF0YSk7CisJCQl9CisKKwkJCUxhYmVsIGNvbnRhaW5lckxhYmVsID0gbmV3IExhYmVsKGNvbXBvc2l0ZSwgU1dULkxFRlQpOworCQkJeworCQkJCWNvbnRhaW5lckxhYmVsLnNldFRleHQoQW5hbHlzaXNFZGl0UGx1Z2luLklOU1RBTkNFLmdldFN0cmluZygiX1VJX01vZGVsT2JqZWN0IikpOworCisJCQkJR3JpZERhdGEgZGF0YSA9IG5ldyBHcmlkRGF0YSgpOworCQkJCWRhdGEuaG9yaXpvbnRhbEFsaWdubWVudCA9IEdyaWREYXRhLkZJTEw7CisJCQkJY29udGFpbmVyTGFiZWwuc2V0TGF5b3V0RGF0YShkYXRhKTsKKwkJCX0KKworCQkJaW5pdGlhbE9iamVjdEZpZWxkID0gbmV3IENvbWJvKGNvbXBvc2l0ZSwgU1dULkJPUkRFUik7CisJCQl7CisJCQkJR3JpZERhdGEgZGF0YSA9IG5ldyBHcmlkRGF0YSgpOworCQkJCWRhdGEuaG9yaXpvbnRhbEFsaWdubWVudCA9IEdyaWREYXRhLkZJTEw7CisJCQkJZGF0YS5ncmFiRXhjZXNzSG9yaXpvbnRhbFNwYWNlID0gdHJ1ZTsKKwkJCQlpbml0aWFsT2JqZWN0RmllbGQuc2V0TGF5b3V0RGF0YShkYXRhKTsKKwkJCX0KKworCQkJZm9yIChTdHJpbmcgb2JqZWN0TmFtZSA6IGdldEluaXRpYWxPYmplY3ROYW1lcygpKSB7CisJCQkJaW5pdGlhbE9iamVjdEZpZWxkLmFkZChnZXRMYWJlbChvYmplY3ROYW1lKSk7CisJCQl9CisKKwkJCWlmIChpbml0aWFsT2JqZWN0RmllbGQuZ2V0SXRlbUNvdW50KCkgPT0gMSkgeworCQkJCWluaXRpYWxPYmplY3RGaWVsZC5zZWxlY3QoMCk7CisJCQl9CisJCQlpbml0aWFsT2JqZWN0RmllbGQuYWRkTW9kaWZ5TGlzdGVuZXIodmFsaWRhdG9yKTsKKworCQkJTGFiZWwgZW5jb2RpbmdMYWJlbCA9IG5ldyBMYWJlbChjb21wb3NpdGUsIFNXVC5MRUZUKTsKKwkJCXsKKwkJCQllbmNvZGluZ0xhYmVsLnNldFRleHQoQW5hbHlzaXNFZGl0UGx1Z2luLklOU1RBTkNFLmdldFN0cmluZygiX1VJX1hNTEVuY29kaW5nIikpOworCisJCQkJR3JpZERhdGEgZGF0YSA9IG5ldyBHcmlkRGF0YSgpOworCQkJCWRhdGEuaG9yaXpvbnRhbEFsaWdubWVudCA9IEdyaWREYXRhLkZJTEw7CisJCQkJZW5jb2RpbmdMYWJlbC5zZXRMYXlvdXREYXRhKGRhdGEpOworCQkJfQorCQkJZW5jb2RpbmdGaWVsZCA9IG5ldyBDb21ibyhjb21wb3NpdGUsIFNXVC5CT1JERVIpOworCQkJeworCQkJCUdyaWREYXRhIGRhdGEgPSBuZXcgR3JpZERhdGEoKTsKKwkJCQlkYXRhLmhvcml6b250YWxBbGlnbm1lbnQgPSBHcmlkRGF0YS5GSUxMOworCQkJCWRhdGEuZ3JhYkV4Y2Vzc0hvcml6b250YWxTcGFjZSA9IHRydWU7CisJCQkJZW5jb2RpbmdGaWVsZC5zZXRMYXlvdXREYXRhKGRhdGEpOworCQkJfQorCisJCQlmb3IgKFN0cmluZyBlbmNvZGluZyA6IGdldEVuY29kaW5ncygpKSB7CisJCQkJZW5jb2RpbmdGaWVsZC5hZGQoZW5jb2RpbmcpOworCQkJfQorCisJCQllbmNvZGluZ0ZpZWxkLnNlbGVjdCgwKTsKKwkJCWVuY29kaW5nRmllbGQuYWRkTW9kaWZ5TGlzdGVuZXIodmFsaWRhdG9yKTsKKworCQkJc2V0UGFnZUNvbXBsZXRlKHZhbGlkYXRlUGFnZSgpKTsKKwkJCXNldENvbnRyb2woY29tcG9zaXRlKTsKKwkJfQorCisJCS8qKgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJcHJvdGVjdGVkIE1vZGlmeUxpc3RlbmVyIHZhbGlkYXRvciA9CisJCQluZXcgTW9kaWZ5TGlzdGVuZXIoKSB7CisJCQkJcHVibGljIHZvaWQgbW9kaWZ5VGV4dChNb2RpZnlFdmVudCBlKSB7CisJCQkJCXNldFBhZ2VDb21wbGV0ZSh2YWxpZGF0ZVBhZ2UoKSk7CisJCQkJfQorCQkJfTsKKworCQkvKioKKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCXByb3RlY3RlZCBib29sZWFuIHZhbGlkYXRlUGFnZSgpIHsKKwkJCXJldHVybiBnZXRJbml0aWFsT2JqZWN0TmFtZSgpICE9IG51bGwgJiYgZ2V0RW5jb2RpbmdzKCkuY29udGFpbnMoZW5jb2RpbmdGaWVsZC5nZXRUZXh0KCkpOworCQl9CisKKwkJLyoqCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlAT3ZlcnJpZGUKKwkJcHVibGljIHZvaWQgc2V0VmlzaWJsZShib29sZWFuIHZpc2libGUpIHsKKwkJCXN1cGVyLnNldFZpc2libGUodmlzaWJsZSk7CisJCQlpZiAodmlzaWJsZSkgeworCQkJCWlmIChpbml0aWFsT2JqZWN0RmllbGQuZ2V0SXRlbUNvdW50KCkgPT0gMSkgeworCQkJCQlpbml0aWFsT2JqZWN0RmllbGQuY2xlYXJTZWxlY3Rpb24oKTsKKwkJCQkJZW5jb2RpbmdGaWVsZC5zZXRGb2N1cygpOworCQkJCX0KKwkJCQllbHNlIHsKKwkJCQkJZW5jb2RpbmdGaWVsZC5jbGVhclNlbGVjdGlvbigpOworCQkJCQlpbml0aWFsT2JqZWN0RmllbGQuc2V0Rm9jdXMoKTsKKwkJCQl9CisJCQl9CisJCX0KKworCQkvKioKKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCXB1YmxpYyBTdHJpbmcgZ2V0SW5pdGlhbE9iamVjdE5hbWUoKSB7CisJCQlTdHJpbmcgbGFiZWwgPSBpbml0aWFsT2JqZWN0RmllbGQuZ2V0VGV4dCgpOworCisJCQlmb3IgKFN0cmluZyBuYW1lIDogZ2V0SW5pdGlhbE9iamVjdE5hbWVzKCkpIHsKKwkJCQlpZiAoZ2V0TGFiZWwobmFtZSkuZXF1YWxzKGxhYmVsKSkgeworCQkJCQlyZXR1cm4gbmFtZTsKKwkJCQl9CisJCQl9CisJCQlyZXR1cm4gbnVsbDsKKwkJfQorCisJCS8qKgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJcHVibGljIFN0cmluZyBnZXRFbmNvZGluZygpIHsKKwkJCXJldHVybiBlbmNvZGluZ0ZpZWxkLmdldFRleHQoKTsKKwkJfQorCisJCS8qKgorCQkgKiBSZXR1cm5zIHRoZSBsYWJlbCBmb3IgdGhlIHNwZWNpZmllZCB0eXBlIG5hbWUuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlwcm90ZWN0ZWQgU3RyaW5nIGdldExhYmVsKFN0cmluZyB0eXBlTmFtZSkgeworCQkJdHJ5IHsKKwkJCQlyZXR1cm4gQW5hbHlzaXNFZGl0UGx1Z2luLklOU1RBTkNFLmdldFN0cmluZygiX1VJXyIgKyB0eXBlTmFtZSArICJfdHlwZSIpOworCQkJfQorCQkJY2F0Y2goTWlzc2luZ1Jlc291cmNlRXhjZXB0aW9uIG1yZSkgeworCQkJCUFuYWx5c2lzRWRpdFBsdWdpbi5JTlNUQU5DRS5sb2cobXJlKTsKKwkJCX0KKwkJCXJldHVybiB0eXBlTmFtZTsKKwkJfQorCisJCS8qKgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJcHJvdGVjdGVkIENvbGxlY3Rpb248U3RyaW5nPiBnZXRFbmNvZGluZ3MoKSB7CisJCQlpZiAoZW5jb2RpbmdzID09IG51bGwpIHsKKwkJCQllbmNvZGluZ3MgPSBuZXcgQXJyYXlMaXN0PFN0cmluZz4oKTsKKwkJCQlmb3IgKFN0cmluZ1Rva2VuaXplciBzdHJpbmdUb2tlbml6ZXIgPSBuZXcgU3RyaW5nVG9rZW5pemVyKEFuYWx5c2lzRWRpdFBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoIl9VSV9YTUxFbmNvZGluZ0Nob2ljZXMiKSk7IHN0cmluZ1Rva2VuaXplci5oYXNNb3JlVG9rZW5zKCk7ICkgeworCQkJCQllbmNvZGluZ3MuYWRkKHN0cmluZ1Rva2VuaXplci5uZXh0VG9rZW4oKSk7CisJCQkJfQorCQkJfQorCQkJcmV0dXJuIGVuY29kaW5nczsKKwkJfQorCX0KKworCS8qKgorCSAqIFRoZSBmcmFtZXdvcmsgY2FsbHMgdGhpcyB0byBjcmVhdGUgdGhlIGNvbnRlbnRzIG9mIHRoZSB3aXphcmQuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGFkZFBhZ2VzKCkgeworCQkvLyBDcmVhdGUgYSBwYWdlLCBzZXQgdGhlIHRpdGxlLCBhbmQgdGhlIGluaXRpYWwgbW9kZWwgZmlsZSBuYW1lLgorCQkvLworCQluZXdGaWxlQ3JlYXRpb25QYWdlID0gbmV3IEFuYWx5c2lzTW9kZWxXaXphcmROZXdGaWxlQ3JlYXRpb25QYWdlKCJXaGF0ZXZlciIsIHNlbGVjdGlvbik7CisJCW5ld0ZpbGVDcmVhdGlvblBhZ2Uuc2V0VGl0bGUoQW5hbHlzaXNFZGl0UGx1Z2luLklOU1RBTkNFLmdldFN0cmluZygiX1VJX0FuYWx5c2lzTW9kZWxXaXphcmRfbGFiZWwiKSk7CisJCW5ld0ZpbGVDcmVhdGlvblBhZ2Uuc2V0RGVzY3JpcHRpb24oQW5hbHlzaXNFZGl0UGx1Z2luLklOU1RBTkNFLmdldFN0cmluZygiX1VJX0FuYWx5c2lzTW9kZWxXaXphcmRfZGVzY3JpcHRpb24iKSk7CisJCW5ld0ZpbGVDcmVhdGlvblBhZ2Uuc2V0RmlsZU5hbWUoQW5hbHlzaXNFZGl0UGx1Z2luLklOU1RBTkNFLmdldFN0cmluZygiX1VJX0FuYWx5c2lzRWRpdG9yRmlsZW5hbWVEZWZhdWx0QmFzZSIpICsgIi4iICsgRklMRV9FWFRFTlNJT05TLmdldCgwKSk7CisJCWFkZFBhZ2UobmV3RmlsZUNyZWF0aW9uUGFnZSk7CisKKwkJLy8gVHJ5IGFuZCBnZXQgdGhlIHJlc291cmNlIHNlbGVjdGlvbiB0byBkZXRlcm1pbmUgYSBjdXJyZW50IGRpcmVjdG9yeSBmb3IgdGhlIGZpbGUgZGlhbG9nLgorCQkvLworCQlpZiAoc2VsZWN0aW9uICE9IG51bGwgJiYgIXNlbGVjdGlvbi5pc0VtcHR5KCkpIHsKKwkJCS8vIEdldCB0aGUgcmVzb3VyY2UuLi4KKwkJCS8vCisJCQlPYmplY3Qgc2VsZWN0ZWRFbGVtZW50ID0gc2VsZWN0aW9uLml0ZXJhdG9yKCkubmV4dCgpOworCQkJaWYgKHNlbGVjdGVkRWxlbWVudCBpbnN0YW5jZW9mIElSZXNvdXJjZSkgeworCQkJCS8vIEdldCB0aGUgcmVzb3VyY2UgcGFyZW50LCBpZiBpdHMgYSBmaWxlLgorCQkJCS8vCisJCQkJSVJlc291cmNlIHNlbGVjdGVkUmVzb3VyY2UgPSAoSVJlc291cmNlKXNlbGVjdGVkRWxlbWVudDsKKwkJCQlpZiAoc2VsZWN0ZWRSZXNvdXJjZS5nZXRUeXBlKCkgPT0gSVJlc291cmNlLkZJTEUpIHsKKwkJCQkJc2VsZWN0ZWRSZXNvdXJjZSA9IHNlbGVjdGVkUmVzb3VyY2UuZ2V0UGFyZW50KCk7CisJCQkJfQorCisJCQkJLy8gVGhpcyBnaXZlcyB1cyBhIGRpcmVjdG9yeS4uLgorCQkJCS8vCisJCQkJaWYgKHNlbGVjdGVkUmVzb3VyY2UgaW5zdGFuY2VvZiBJRm9sZGVyIHx8IHNlbGVjdGVkUmVzb3VyY2UgaW5zdGFuY2VvZiBJUHJvamVjdCkgeworCQkJCQkvLyBTZXQgdGhpcyBmb3IgdGhlIGNvbnRhaW5lci4KKwkJCQkJLy8KKwkJCQkJbmV3RmlsZUNyZWF0aW9uUGFnZS5zZXRDb250YWluZXJGdWxsUGF0aChzZWxlY3RlZFJlc291cmNlLmdldEZ1bGxQYXRoKCkpOworCisJCQkJCS8vIE1ha2UgdXAgYSB1bmlxdWUgbmV3IG5hbWUgaGVyZS4KKwkJCQkJLy8KKwkJCQkJU3RyaW5nIGRlZmF1bHRNb2RlbEJhc2VGaWxlbmFtZSA9IEFuYWx5c2lzRWRpdFBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoIl9VSV9BbmFseXNpc0VkaXRvckZpbGVuYW1lRGVmYXVsdEJhc2UiKTsKKwkJCQkJU3RyaW5nIGRlZmF1bHRNb2RlbEZpbGVuYW1lRXh0ZW5zaW9uID0gRklMRV9FWFRFTlNJT05TLmdldCgwKTsKKwkJCQkJU3RyaW5nIG1vZGVsRmlsZW5hbWUgPSBkZWZhdWx0TW9kZWxCYXNlRmlsZW5hbWUgKyAiLiIgKyBkZWZhdWx0TW9kZWxGaWxlbmFtZUV4dGVuc2lvbjsKKwkJCQkJZm9yIChpbnQgaSA9IDE7ICgoSUNvbnRhaW5lcilzZWxlY3RlZFJlc291cmNlKS5maW5kTWVtYmVyKG1vZGVsRmlsZW5hbWUpICE9IG51bGw7ICsraSkgeworCQkJCQkJbW9kZWxGaWxlbmFtZSA9IGRlZmF1bHRNb2RlbEJhc2VGaWxlbmFtZSArIGkgKyAiLiIgKyBkZWZhdWx0TW9kZWxGaWxlbmFtZUV4dGVuc2lvbjsKKwkJCQkJfQorCQkJCQluZXdGaWxlQ3JlYXRpb25QYWdlLnNldEZpbGVOYW1lKG1vZGVsRmlsZW5hbWUpOworCQkJCX0KKwkJCX0KKwkJfQorCQlpbml0aWFsT2JqZWN0Q3JlYXRpb25QYWdlID0gbmV3IEFuYWx5c2lzTW9kZWxXaXphcmRJbml0aWFsT2JqZWN0Q3JlYXRpb25QYWdlKCJXaGF0ZXZlcjIiKTsKKwkJaW5pdGlhbE9iamVjdENyZWF0aW9uUGFnZS5zZXRUaXRsZShBbmFseXNpc0VkaXRQbHVnaW4uSU5TVEFOQ0UuZ2V0U3RyaW5nKCJfVUlfQW5hbHlzaXNNb2RlbFdpemFyZF9sYWJlbCIpKTsKKwkJaW5pdGlhbE9iamVjdENyZWF0aW9uUGFnZS5zZXREZXNjcmlwdGlvbihBbmFseXNpc0VkaXRQbHVnaW4uSU5TVEFOQ0UuZ2V0U3RyaW5nKCJfVUlfV2l6YXJkX2luaXRpYWxfb2JqZWN0X2Rlc2NyaXB0aW9uIikpOworCQlhZGRQYWdlKGluaXRpYWxPYmplY3RDcmVhdGlvblBhZ2UpOworCX0KKworCS8qKgorCSAqIEdldCB0aGUgZmlsZSBmcm9tIHRoZSBwYWdlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBJRmlsZSBnZXRNb2RlbEZpbGUoKSB7CisJCXJldHVybiBuZXdGaWxlQ3JlYXRpb25QYWdlLmdldE1vZGVsRmlsZSgpOworCX0KKworfQpkaWZmIC0tZ2l0IGEvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9hbmFseXNpcy9wcm92aWRlci9BbmFseXNpc0VkaXRQbHVnaW4uamF2YSBiL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vYW5hbHlzaXMvcHJvdmlkZXIvQW5hbHlzaXNFZGl0UGx1Z2luLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTg0ODk3NwotLS0gL2Rldi9udWxsCisrKyBiL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vYW5hbHlzaXMvcHJvdmlkZXIvQW5hbHlzaXNFZGl0UGx1Z2luLmphdmEKQEAgLTAsMCArMSw5OCBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLnByb3ZpZGVyOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAKKyAqIENvcHlyaWdodCAoYykgMjAxMSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4gCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIAorICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wIAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQgCisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbCAKKyAqIAorICogQ29udHJpYnV0b3JzOiAKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24uRU1GUGx1Z2luOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udWkuRWNsaXBzZVVJUGx1Z2luOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5SZXNvdXJjZUxvY2F0b3I7CisKKy8qKgorICogVGhpcyBpcyB0aGUgY2VudHJhbCBzaW5nbGV0b24gZm9yIHRoZSBBbmFseXNpcyBlZGl0b3IgcGx1Z2luLgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgZmluYWwgY2xhc3MgQW5hbHlzaXNFZGl0UGx1Z2luIGV4dGVuZHMgRU1GUGx1Z2luIHsKKwkvKioKKwkgKiBLZWVwIHRyYWNrIG9mIHRoZSBzaW5nbGV0b24uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBBbmFseXNpc0VkaXRQbHVnaW4gSU5TVEFOQ0UgPSBuZXcgQW5hbHlzaXNFZGl0UGx1Z2luKCk7CisJCisJLyoqCisJICogS2VlcCB0cmFjayBvZiB0aGUgc2luZ2xldG9uLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByaXZhdGUgc3RhdGljIEltcGxlbWVudGF0aW9uIHBsdWdpbjsKKworCS8qKgorCSAqIENyZWF0ZSB0aGUgaW5zdGFuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEFuYWx5c2lzRWRpdFBsdWdpbigpIHsKKwkJc3VwZXIKKwkJCShuZXcgUmVzb3VyY2VMb2NhdG9yIFtdIHsKKwkJCX0pOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIHNpbmdsZXRvbiBpbnN0YW5jZSBvZiB0aGUgRWNsaXBzZSBwbHVnaW4uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBzaW5nbGV0b24gaW5zdGFuY2UuCisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBSZXNvdXJjZUxvY2F0b3IgZ2V0UGx1Z2luUmVzb3VyY2VMb2NhdG9yKCkgeworCQlyZXR1cm4gcGx1Z2luOworCX0KKwkKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBzaW5nbGV0b24gaW5zdGFuY2Ugb2YgdGhlIEVjbGlwc2UgcGx1Z2luLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgc2luZ2xldG9uIGluc3RhbmNlLgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgc3RhdGljIEltcGxlbWVudGF0aW9uIGdldFBsdWdpbigpIHsKKwkJcmV0dXJuIHBsdWdpbjsKKwl9CisJCisJLyoqCisJICogVGhlIGFjdHVhbCBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgRWNsaXBzZSA8Yj5QbHVnaW48L2I+LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBzdGF0aWMgY2xhc3MgSW1wbGVtZW50YXRpb24gZXh0ZW5kcyBFY2xpcHNlVUlQbHVnaW4geworCQkvKioKKwkJICogQ3JlYXRlcyBhbiBpbnN0YW5jZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCXB1YmxpYyBJbXBsZW1lbnRhdGlvbigpIHsKKwkJCXN1cGVyKCk7CisJCisJCQkvLyBSZW1lbWJlciB0aGUgc3RhdGljIGluc3RhbmNlLgorCQkJLy8KKwkJCXBsdWdpbiA9IHRoaXM7CisJCX0KKwl9CisKK30KZGlmZiAtLWdpdCBhL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vYW5hbHlzaXMvcHJvdmlkZXIvQW5hbHlzaXNJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeS5qYXZhIGIvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9hbmFseXNpcy9wcm92aWRlci9BbmFseXNpc0l0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODQyMDY0YgotLS0gL2Rldi9udWxsCisrKyBiL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vYW5hbHlzaXMvcHJvdmlkZXIvQW5hbHlzaXNJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeS5qYXZhCkBAIC0wLDAgKzEsMzAyIEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMucHJvdmlkZXI7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIAorICogQ29weXJpZ2h0IChjKSAyMDExIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiAKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdCAKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sIAorICogCisgKiBDb250cmlidXRvcnM6IAorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiAKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LkFkYXB0ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkNoYW5nZU5vdGlmaWVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkNvbXBvc2VhYmxlQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuQ29tcG9zZWRBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JQ2hhbmdlTm90aWZpZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSURpc3Bvc2FibGU7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUVkaXRpbmdEb21haW5JdGVtUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1MYWJlbFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtUHJvcGVydHlTb3VyY2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSU5vdGlmeUNoYW5nZWRMaXN0ZW5lcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JU3RydWN0dXJlZEl0ZW1Db250ZW50UHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVRyZWVJdGVtQ29udGVudFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMudXRpbC5BbmFseXNpc0FkYXB0ZXJGYWN0b3J5OworCisvKioKKyAqIFRoaXMgaXMgdGhlIGZhY3RvcnkgdGhhdCBpcyB1c2VkIHRvIHByb3ZpZGUgdGhlIGludGVyZmFjZXMgbmVlZGVkIHRvIHN1cHBvcnQgVmlld2Vycy4KKyAqIFRoZSBhZGFwdGVycyBnZW5lcmF0ZWQgYnkgdGhpcyBmYWN0b3J5IGNvbnZlcnQgRU1GIGFkYXB0ZXIgbm90aWZpY2F0aW9ucyBpbnRvIGNhbGxzIHRvIHtAbGluayAjZmlyZU5vdGlmeUNoYW5nZWQgZmlyZU5vdGlmeUNoYW5nZWR9LgorICogVGhlIGFkYXB0ZXJzIGFsc28gc3VwcG9ydCBFY2xpcHNlIHByb3BlcnR5IHNoZWV0cy4KKyAqIE5vdGUgdGhhdCBtb3N0IG9mIHRoZSBhZGFwdGVycyBhcmUgc2hhcmVkIGFtb25nIG11bHRpcGxlIGluc3RhbmNlcy4KKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIEFuYWx5c2lzSXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkgZXh0ZW5kcyBBbmFseXNpc0FkYXB0ZXJGYWN0b3J5IGltcGxlbWVudHMgQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSwgSUNoYW5nZU5vdGlmaWVyLCBJRGlzcG9zYWJsZSB7CisJLyoqCisJICogVGhpcyBrZWVwcyB0cmFjayBvZiB0aGUgcm9vdCBhZGFwdGVyIGZhY3RvcnkgdGhhdCBkZWxlZ2F0ZXMgdG8gdGhpcyBhZGFwdGVyIGZhY3RvcnkuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIENvbXBvc2VkQWRhcHRlckZhY3RvcnkgcGFyZW50QWRhcHRlckZhY3Rvcnk7CisKKwkvKioKKwkgKiBUaGlzIGlzIHVzZWQgdG8gaW1wbGVtZW50IHtAbGluayBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JQ2hhbmdlTm90aWZpZXJ9LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBJQ2hhbmdlTm90aWZpZXIgY2hhbmdlTm90aWZpZXIgPSBuZXcgQ2hhbmdlTm90aWZpZXIoKTsKKworCS8qKgorCSAqIFRoaXMga2VlcHMgdHJhY2sgb2YgYWxsIHRoZSBzdXBwb3J0ZWQgdHlwZXMgY2hlY2tlZCBieSB7QGxpbmsgI2lzRmFjdG9yeUZvclR5cGUgaXNGYWN0b3J5Rm9yVHlwZX0uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIENvbGxlY3Rpb248T2JqZWN0PiBzdXBwb3J0ZWRUeXBlcyA9IG5ldyBBcnJheUxpc3Q8T2JqZWN0PigpOworCisJLyoqCisJICogVGhpcyBjb25zdHJ1Y3RzIGFuIGluc3RhbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBBbmFseXNpc0l0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5KCkgeworCQlzdXBwb3J0ZWRUeXBlcy5hZGQoSUVkaXRpbmdEb21haW5JdGVtUHJvdmlkZXIuY2xhc3MpOworCQlzdXBwb3J0ZWRUeXBlcy5hZGQoSVN0cnVjdHVyZWRJdGVtQ29udGVudFByb3ZpZGVyLmNsYXNzKTsKKwkJc3VwcG9ydGVkVHlwZXMuYWRkKElUcmVlSXRlbUNvbnRlbnRQcm92aWRlci5jbGFzcyk7CisJCXN1cHBvcnRlZFR5cGVzLmFkZChJSXRlbUxhYmVsUHJvdmlkZXIuY2xhc3MpOworCQlzdXBwb3J0ZWRUeXBlcy5hZGQoSUl0ZW1Qcm9wZXJ0eVNvdXJjZS5jbGFzcyk7CisJfQorCisJLyoqCisJICogVGhpcyBrZWVwcyB0cmFjayBvZiB0aGUgb25lIGFkYXB0ZXIgdXNlZCBmb3IgYWxsIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLkVycm9yRnVuY3Rpb259IGluc3RhbmNlcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgRXJyb3JGdW5jdGlvbkl0ZW1Qcm92aWRlciBlcnJvckZ1bmN0aW9uSXRlbVByb3ZpZGVyOworCisJLyoqCisJICogVGhpcyBjcmVhdGVzIGFuIGFkYXB0ZXIgZm9yIGEge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuRXJyb3JGdW5jdGlvbn0uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlRXJyb3JGdW5jdGlvbkFkYXB0ZXIoKSB7CisJCWlmIChlcnJvckZ1bmN0aW9uSXRlbVByb3ZpZGVyID09IG51bGwpIHsKKwkJCWVycm9yRnVuY3Rpb25JdGVtUHJvdmlkZXIgPSBuZXcgRXJyb3JGdW5jdGlvbkl0ZW1Qcm92aWRlcih0aGlzKTsKKwkJfQorCisJCXJldHVybiBlcnJvckZ1bmN0aW9uSXRlbVByb3ZpZGVyOworCX0KKworCS8qKgorCSAqIFRoaXMga2VlcHMgdHJhY2sgb2YgdGhlIG9uZSBhZGFwdGVyIHVzZWQgZm9yIGFsbCB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5UaHJlc2hvbGRFcnJvckZ1bmN0aW9ufSBpbnN0YW5jZXMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIFRocmVzaG9sZEVycm9yRnVuY3Rpb25JdGVtUHJvdmlkZXIgdGhyZXNob2xkRXJyb3JGdW5jdGlvbkl0ZW1Qcm92aWRlcjsKKworCS8qKgorCSAqIFRoaXMgY3JlYXRlcyBhbiBhZGFwdGVyIGZvciBhIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLlRocmVzaG9sZEVycm9yRnVuY3Rpb259LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZVRocmVzaG9sZEVycm9yRnVuY3Rpb25BZGFwdGVyKCkgeworCQlpZiAodGhyZXNob2xkRXJyb3JGdW5jdGlvbkl0ZW1Qcm92aWRlciA9PSBudWxsKSB7CisJCQl0aHJlc2hvbGRFcnJvckZ1bmN0aW9uSXRlbVByb3ZpZGVyID0gbmV3IFRocmVzaG9sZEVycm9yRnVuY3Rpb25JdGVtUHJvdmlkZXIodGhpcyk7CisJCX0KKworCQlyZXR1cm4gdGhyZXNob2xkRXJyb3JGdW5jdGlvbkl0ZW1Qcm92aWRlcjsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGtlZXBzIHRyYWNrIG9mIHRoZSBvbmUgYWRhcHRlciB1c2VkIGZvciBhbGwge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuUmVmZXJlbmNlU2NlbmFyaW9EYXRhTWFwfSBpbnN0YW5jZXMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIFJlZmVyZW5jZVNjZW5hcmlvRGF0YU1hcEl0ZW1Qcm92aWRlciByZWZlcmVuY2VTY2VuYXJpb0RhdGFNYXBJdGVtUHJvdmlkZXI7CisKKwkvKioKKwkgKiBUaGlzIGNyZWF0ZXMgYW4gYWRhcHRlciBmb3IgYSB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5SZWZlcmVuY2VTY2VuYXJpb0RhdGFNYXB9LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZVJlZmVyZW5jZVNjZW5hcmlvRGF0YU1hcEFkYXB0ZXIoKSB7CisJCWlmIChyZWZlcmVuY2VTY2VuYXJpb0RhdGFNYXBJdGVtUHJvdmlkZXIgPT0gbnVsbCkgeworCQkJcmVmZXJlbmNlU2NlbmFyaW9EYXRhTWFwSXRlbVByb3ZpZGVyID0gbmV3IFJlZmVyZW5jZVNjZW5hcmlvRGF0YU1hcEl0ZW1Qcm92aWRlcih0aGlzKTsKKwkJfQorCisJCXJldHVybiByZWZlcmVuY2VTY2VuYXJpb0RhdGFNYXBJdGVtUHJvdmlkZXI7CisJfQorCisJLyoqCisJICogVGhpcyBrZWVwcyB0cmFjayBvZiB0aGUgb25lIGFkYXB0ZXIgdXNlZCBmb3IgYWxsIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLlNpbXBsZUVycm9yRnVuY3Rpb259IGluc3RhbmNlcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgU2ltcGxlRXJyb3JGdW5jdGlvbkl0ZW1Qcm92aWRlciBzaW1wbGVFcnJvckZ1bmN0aW9uSXRlbVByb3ZpZGVyOworCisJLyoqCisJICogVGhpcyBjcmVhdGVzIGFuIGFkYXB0ZXIgZm9yIGEge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuU2ltcGxlRXJyb3JGdW5jdGlvbn0uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlU2ltcGxlRXJyb3JGdW5jdGlvbkFkYXB0ZXIoKSB7CisJCWlmIChzaW1wbGVFcnJvckZ1bmN0aW9uSXRlbVByb3ZpZGVyID09IG51bGwpIHsKKwkJCXNpbXBsZUVycm9yRnVuY3Rpb25JdGVtUHJvdmlkZXIgPSBuZXcgU2ltcGxlRXJyb3JGdW5jdGlvbkl0ZW1Qcm92aWRlcih0aGlzKTsKKwkJfQorCisJCXJldHVybiBzaW1wbGVFcnJvckZ1bmN0aW9uSXRlbVByb3ZpZGVyOworCX0KKworCS8qKgorCSAqIFRoaXMga2VlcHMgdHJhY2sgb2YgdGhlIG9uZSBhZGFwdGVyIHVzZWQgZm9yIGFsbCB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5FcnJvclJlc3VsdH0gaW5zdGFuY2VzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBFcnJvclJlc3VsdEl0ZW1Qcm92aWRlciBlcnJvclJlc3VsdEl0ZW1Qcm92aWRlcjsKKworCS8qKgorCSAqIFRoaXMgY3JlYXRlcyBhbiBhZGFwdGVyIGZvciBhIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLkVycm9yUmVzdWx0fS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVFcnJvclJlc3VsdEFkYXB0ZXIoKSB7CisJCWlmIChlcnJvclJlc3VsdEl0ZW1Qcm92aWRlciA9PSBudWxsKSB7CisJCQllcnJvclJlc3VsdEl0ZW1Qcm92aWRlciA9IG5ldyBFcnJvclJlc3VsdEl0ZW1Qcm92aWRlcih0aGlzKTsKKwkJfQorCisJCXJldHVybiBlcnJvclJlc3VsdEl0ZW1Qcm92aWRlcjsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgdGhlIHJvb3QgYWRhcHRlciBmYWN0b3J5IHRoYXQgY29udGFpbnMgdGhpcyBmYWN0b3J5LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBDb21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5IGdldFJvb3RBZGFwdGVyRmFjdG9yeSgpIHsKKwkJcmV0dXJuIHBhcmVudEFkYXB0ZXJGYWN0b3J5ID09IG51bGwgPyB0aGlzIDogcGFyZW50QWRhcHRlckZhY3RvcnkuZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCk7CisJfQorCisJLyoqCisJICogVGhpcyBzZXRzIHRoZSBjb21wb3NlZCBhZGFwdGVyIGZhY3RvcnkgdGhhdCBjb250YWlucyB0aGlzIGZhY3RvcnkuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgc2V0UGFyZW50QWRhcHRlckZhY3RvcnkoQ29tcG9zZWRBZGFwdGVyRmFjdG9yeSBwYXJlbnRBZGFwdGVyRmFjdG9yeSkgeworCQl0aGlzLnBhcmVudEFkYXB0ZXJGYWN0b3J5ID0gcGFyZW50QWRhcHRlckZhY3Rvcnk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIGJvb2xlYW4gaXNGYWN0b3J5Rm9yVHlwZShPYmplY3QgdHlwZSkgeworCQlyZXR1cm4gc3VwcG9ydGVkVHlwZXMuY29udGFpbnModHlwZSkgfHwgc3VwZXIuaXNGYWN0b3J5Rm9yVHlwZSh0eXBlKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGltcGxlbWVudGF0aW9uIHN1YnN0aXR1dGVzIHRoZSBmYWN0b3J5IGl0c2VsZiBhcyB0aGUga2V5IGZvciB0aGUgYWRhcHRlci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgQWRhcHRlciBhZGFwdChOb3RpZmllciBub3RpZmllciwgT2JqZWN0IHR5cGUpIHsKKwkJcmV0dXJuIHN1cGVyLmFkYXB0KG5vdGlmaWVyLCB0aGlzKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgT2JqZWN0IGFkYXB0KE9iamVjdCBvYmplY3QsIE9iamVjdCB0eXBlKSB7CisJCWlmIChpc0ZhY3RvcnlGb3JUeXBlKHR5cGUpKSB7CisJCQlPYmplY3QgYWRhcHRlciA9IHN1cGVyLmFkYXB0KG9iamVjdCwgdHlwZSk7CisJCQlpZiAoISh0eXBlIGluc3RhbmNlb2YgQ2xhc3M8Pz4pIHx8ICgoKENsYXNzPD8+KXR5cGUpLmlzSW5zdGFuY2UoYWRhcHRlcikpKSB7CisJCQkJcmV0dXJuIGFkYXB0ZXI7CisJCQl9CisJCX0KKworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFkZHMgYSBsaXN0ZW5lci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBhZGRMaXN0ZW5lcihJTm90aWZ5Q2hhbmdlZExpc3RlbmVyIG5vdGlmeUNoYW5nZWRMaXN0ZW5lcikgeworCQljaGFuZ2VOb3RpZmllci5hZGRMaXN0ZW5lcihub3RpZnlDaGFuZ2VkTGlzdGVuZXIpOworCX0KKworCS8qKgorCSAqIFRoaXMgcmVtb3ZlcyBhIGxpc3RlbmVyLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIHJlbW92ZUxpc3RlbmVyKElOb3RpZnlDaGFuZ2VkTGlzdGVuZXIgbm90aWZ5Q2hhbmdlZExpc3RlbmVyKSB7CisJCWNoYW5nZU5vdGlmaWVyLnJlbW92ZUxpc3RlbmVyKG5vdGlmeUNoYW5nZWRMaXN0ZW5lcik7CisJfQorCisJLyoqCisJICogVGhpcyBkZWxlZ2F0ZXMgdG8ge0BsaW5rICNjaGFuZ2VOb3RpZmllcn0gYW5kIHRvIHtAbGluayAjcGFyZW50QWRhcHRlckZhY3Rvcnl9LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIGZpcmVOb3RpZnlDaGFuZ2VkKE5vdGlmaWNhdGlvbiBub3RpZmljYXRpb24pIHsKKwkJY2hhbmdlTm90aWZpZXIuZmlyZU5vdGlmeUNoYW5nZWQobm90aWZpY2F0aW9uKTsKKworCQlpZiAocGFyZW50QWRhcHRlckZhY3RvcnkgIT0gbnVsbCkgeworCQkJcGFyZW50QWRhcHRlckZhY3RvcnkuZmlyZU5vdGlmeUNoYW5nZWQobm90aWZpY2F0aW9uKTsKKwkJfQorCX0KKworCS8qKgorCSAqIFRoaXMgZGlzcG9zZXMgYWxsIG9mIHRoZSBpdGVtIHByb3ZpZGVycyBjcmVhdGVkIGJ5IHRoaXMgZmFjdG9yeS4gCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgZGlzcG9zZSgpIHsKKwkJaWYgKGVycm9yRnVuY3Rpb25JdGVtUHJvdmlkZXIgIT0gbnVsbCkgZXJyb3JGdW5jdGlvbkl0ZW1Qcm92aWRlci5kaXNwb3NlKCk7CisJCWlmICh0aHJlc2hvbGRFcnJvckZ1bmN0aW9uSXRlbVByb3ZpZGVyICE9IG51bGwpIHRocmVzaG9sZEVycm9yRnVuY3Rpb25JdGVtUHJvdmlkZXIuZGlzcG9zZSgpOworCQlpZiAocmVmZXJlbmNlU2NlbmFyaW9EYXRhTWFwSXRlbVByb3ZpZGVyICE9IG51bGwpIHJlZmVyZW5jZVNjZW5hcmlvRGF0YU1hcEl0ZW1Qcm92aWRlci5kaXNwb3NlKCk7CisJCWlmIChzaW1wbGVFcnJvckZ1bmN0aW9uSXRlbVByb3ZpZGVyICE9IG51bGwpIHNpbXBsZUVycm9yRnVuY3Rpb25JdGVtUHJvdmlkZXIuZGlzcG9zZSgpOworCQlpZiAoZXJyb3JSZXN1bHRJdGVtUHJvdmlkZXIgIT0gbnVsbCkgZXJyb3JSZXN1bHRJdGVtUHJvdmlkZXIuZGlzcG9zZSgpOworCX0KKworfQpkaWZmIC0tZ2l0IGEvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9hbmFseXNpcy9wcm92aWRlci9FcnJvckZ1bmN0aW9uSXRlbVByb3ZpZGVyLmphdmEgYi9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2FuYWx5c2lzL3Byb3ZpZGVyL0Vycm9yRnVuY3Rpb25JdGVtUHJvdmlkZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZjM1YmIxCi0tLSAvZGV2L251bGwKKysrIGIvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9hbmFseXNpcy9wcm92aWRlci9FcnJvckZ1bmN0aW9uSXRlbVByb3ZpZGVyLmphdmEKQEAgLTAsMCArMSwxMjUgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5wcm92aWRlcjsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogCisgKiBDb3B5cmlnaHQgKGMpIDIwMTEgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuIAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyAKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0IAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwgCisgKiAKKyAqIENvbnRyaWJ1dG9yczogCisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LkFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuUmVzb3VyY2VMb2NhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklFZGl0aW5nRG9tYWluSXRlbVByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtTGFiZWxQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbVByb3BlcnR5RGVzY3JpcHRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbVByb3BlcnR5U291cmNlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklTdHJ1Y3R1cmVkSXRlbUNvbnRlbnRQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JVHJlZUl0ZW1Db250ZW50UHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSXRlbVByb3ZpZGVyQWRhcHRlcjsKKworLyoqCisgKiBUaGlzIGlzIHRoZSBpdGVtIHByb3ZpZGVyIGFkYXB0ZXIgZm9yIGEge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuRXJyb3JGdW5jdGlvbn0gb2JqZWN0LgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgRXJyb3JGdW5jdGlvbkl0ZW1Qcm92aWRlcgorCWV4dGVuZHMgSXRlbVByb3ZpZGVyQWRhcHRlcgorCWltcGxlbWVudHMKKwkJSUVkaXRpbmdEb21haW5JdGVtUHJvdmlkZXIsCisJCUlTdHJ1Y3R1cmVkSXRlbUNvbnRlbnRQcm92aWRlciwKKwkJSVRyZWVJdGVtQ29udGVudFByb3ZpZGVyLAorCQlJSXRlbUxhYmVsUHJvdmlkZXIsCisJCUlJdGVtUHJvcGVydHlTb3VyY2UgeworCS8qKgorCSAqIFRoaXMgY29uc3RydWN0cyBhbiBpbnN0YW5jZSBmcm9tIGEgZmFjdG9yeSBhbmQgYSBub3RpZmllci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRXJyb3JGdW5jdGlvbkl0ZW1Qcm92aWRlcihBZGFwdGVyRmFjdG9yeSBhZGFwdGVyRmFjdG9yeSkgeworCQlzdXBlcihhZGFwdGVyRmFjdG9yeSk7CisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIHRoZSBwcm9wZXJ0eSBkZXNjcmlwdG9ycyBmb3IgdGhlIGFkYXB0ZWQgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIExpc3Q8SUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I+IGdldFByb3BlcnR5RGVzY3JpcHRvcnMoT2JqZWN0IG9iamVjdCkgeworCQlpZiAoaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMgPT0gbnVsbCkgeworCQkJc3VwZXIuZ2V0UHJvcGVydHlEZXNjcmlwdG9ycyhvYmplY3QpOworCisJCX0KKwkJcmV0dXJuIGl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzOworCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyBFcnJvckZ1bmN0aW9uLmdpZi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgT2JqZWN0IGdldEltYWdlKE9iamVjdCBvYmplY3QpIHsKKwkJcmV0dXJuIG92ZXJsYXlJbWFnZShvYmplY3QsIGdldFJlc291cmNlTG9jYXRvcigpLmdldEltYWdlKCJmdWxsL29iajE2L0Vycm9yRnVuY3Rpb24iKSk7CisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIHRoZSBsYWJlbCB0ZXh0IGZvciB0aGUgYWRhcHRlZCBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgU3RyaW5nIGdldFRleHQoT2JqZWN0IG9iamVjdCkgeworCQlyZXR1cm4gZ2V0U3RyaW5nKCJfVUlfRXJyb3JGdW5jdGlvbl90eXBlIik7CisJfQorCisJLyoqCisJICogVGhpcyBoYW5kbGVzIG1vZGVsIG5vdGlmaWNhdGlvbnMgYnkgY2FsbGluZyB7QGxpbmsgI3VwZGF0ZUNoaWxkcmVufSB0byB1cGRhdGUgYW55IGNhY2hlZAorCSAqIGNoaWxkcmVuIGFuZCBieSBjcmVhdGluZyBhIHZpZXdlciBub3RpZmljYXRpb24sIHdoaWNoIGl0IHBhc3NlcyB0byB7QGxpbmsgI2ZpcmVOb3RpZnlDaGFuZ2VkfS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBub3RpZnlDaGFuZ2VkKE5vdGlmaWNhdGlvbiBub3RpZmljYXRpb24pIHsKKwkJdXBkYXRlQ2hpbGRyZW4obm90aWZpY2F0aW9uKTsKKwkJc3VwZXIubm90aWZ5Q2hhbmdlZChub3RpZmljYXRpb24pOworCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmVkaXQuY29tbWFuZC5Db21tYW5kUGFyYW1ldGVyfXMgZGVzY3JpYmluZyB0aGUgY2hpbGRyZW4KKwkgKiB0aGF0IGNhbiBiZSBjcmVhdGVkIHVuZGVyIHRoaXMgb2JqZWN0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIGNvbGxlY3ROZXdDaGlsZERlc2NyaXB0b3JzKENvbGxlY3Rpb248T2JqZWN0PiBuZXdDaGlsZERlc2NyaXB0b3JzLCBPYmplY3Qgb2JqZWN0KSB7CisJCXN1cGVyLmNvbGxlY3ROZXdDaGlsZERlc2NyaXB0b3JzKG5ld0NoaWxkRGVzY3JpcHRvcnMsIG9iamVjdCk7CisJfQorCisJLyoqCisJICogUmV0dXJuIHRoZSByZXNvdXJjZSBsb2NhdG9yIGZvciB0aGlzIGl0ZW0gcHJvdmlkZXIncyByZXNvdXJjZXMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIFJlc291cmNlTG9jYXRvciBnZXRSZXNvdXJjZUxvY2F0b3IoKSB7CisJCXJldHVybiBBbmFseXNpc0VkaXRQbHVnaW4uSU5TVEFOQ0U7CisJfQorCit9CmRpZmYgLS1naXQgYS9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2FuYWx5c2lzL3Byb3ZpZGVyL0Vycm9yUmVzdWx0SXRlbVByb3ZpZGVyLmphdmEgYi9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2FuYWx5c2lzL3Byb3ZpZGVyL0Vycm9yUmVzdWx0SXRlbVByb3ZpZGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDZmNjFjOAotLS0gL2Rldi9udWxsCisrKyBiL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vYW5hbHlzaXMvcHJvdmlkZXIvRXJyb3JSZXN1bHRJdGVtUHJvdmlkZXIuamF2YQpAQCAtMCwwICsxLDI2MCBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLnByb3ZpZGVyOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAKKyAqIENvcHlyaWdodCAoYykgMjAxMSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4gCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIAorICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wIAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQgCisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbCAKKyAqIAorICogQ29udHJpYnV0b3JzOiAKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOworaW1wb3J0IGphdmEudXRpbC5MaXN0OworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5FTGlzdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuUmVzb3VyY2VMb2NhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkNvbXBvc2VhYmxlQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUVkaXRpbmdEb21haW5JdGVtUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1MYWJlbFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtUHJvcGVydHlEZXNjcmlwdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtUHJvcGVydHlTb3VyY2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVN0cnVjdHVyZWRJdGVtQ29udGVudFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklUcmVlSXRlbUNvbnRlbnRQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JdGVtUHJvcGVydHlEZXNjcmlwdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkl0ZW1Qcm92aWRlckFkYXB0ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuVmlld2VyTm90aWZpY2F0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuQW5hbHlzaXNQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuRXJyb3JSZXN1bHQ7CisKKy8qKgorICogVGhpcyBpcyB0aGUgaXRlbSBwcm92aWRlciBhZGFwdGVyIGZvciBhIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLkVycm9yUmVzdWx0fSBvYmplY3QuCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBFcnJvclJlc3VsdEl0ZW1Qcm92aWRlcgorCWV4dGVuZHMgSXRlbVByb3ZpZGVyQWRhcHRlcgorCWltcGxlbWVudHMKKwkJSUVkaXRpbmdEb21haW5JdGVtUHJvdmlkZXIsCisJCUlTdHJ1Y3R1cmVkSXRlbUNvbnRlbnRQcm92aWRlciwKKwkJSVRyZWVJdGVtQ29udGVudFByb3ZpZGVyLAorCQlJSXRlbUxhYmVsUHJvdmlkZXIsCisJCUlJdGVtUHJvcGVydHlTb3VyY2UgeworCS8qKgorCSAqIFRoaXMgY29uc3RydWN0cyBhbiBpbnN0YW5jZSBmcm9tIGEgZmFjdG9yeSBhbmQgYSBub3RpZmllci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRXJyb3JSZXN1bHRJdGVtUHJvdmlkZXIoQWRhcHRlckZhY3RvcnkgYWRhcHRlckZhY3RvcnkpIHsKKwkJc3VwZXIoYWRhcHRlckZhY3RvcnkpOworCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyB0aGUgcHJvcGVydHkgZGVzY3JpcHRvcnMgZm9yIHRoZSBhZGFwdGVkIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBMaXN0PElJdGVtUHJvcGVydHlEZXNjcmlwdG9yPiBnZXRQcm9wZXJ0eURlc2NyaXB0b3JzKE9iamVjdCBvYmplY3QpIHsKKwkJaWYgKGl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzID09IG51bGwpIHsKKwkJCXN1cGVyLmdldFByb3BlcnR5RGVzY3JpcHRvcnMob2JqZWN0KTsKKworCQkJYWRkRXJyb3JCeVRpbWVTdGVwUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCk7CisJCQlhZGRFcnJvclByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QpOworCQkJYWRkUmVmZXJlbmNlQnlUaW1lUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCk7CisJCQlhZGRNb2RlbEJ5VGltZVByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QpOworCQkJYWRkVmFsaWRhdGlvbkVycm9yUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCk7CisJCX0KKwkJcmV0dXJuIGl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzOworCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyBhIHByb3BlcnR5IGRlc2NyaXB0b3IgZm9yIHRoZSBFcnJvciBCeSBUaW1lIFN0ZXAgZmVhdHVyZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBhZGRFcnJvckJ5VGltZVN0ZXBQcm9wZXJ0eURlc2NyaXB0b3IoT2JqZWN0IG9iamVjdCkgeworCQlpdGVtUHJvcGVydHlEZXNjcmlwdG9ycy5hZGQKKwkJCShjcmVhdGVJdGVtUHJvcGVydHlEZXNjcmlwdG9yCisJCQkJKCgoQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSlhZGFwdGVyRmFjdG9yeSkuZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCksCisJCQkJIGdldFJlc291cmNlTG9jYXRvcigpLAorCQkJCSBnZXRTdHJpbmcoIl9VSV9FcnJvclJlc3VsdF9lcnJvckJ5VGltZVN0ZXBfZmVhdHVyZSIpLAorCQkJCSBnZXRTdHJpbmcoIl9VSV9Qcm9wZXJ0eURlc2NyaXB0b3JfZGVzY3JpcHRpb24iLCAiX1VJX0Vycm9yUmVzdWx0X2Vycm9yQnlUaW1lU3RlcF9mZWF0dXJlIiwgIl9VSV9FcnJvclJlc3VsdF90eXBlIiksCisJCQkJIEFuYWx5c2lzUGFja2FnZS5MaXRlcmFscy5FUlJPUl9SRVNVTFRfX0VSUk9SX0JZX1RJTUVfU1RFUCwKKwkJCQkgdHJ1ZSwKKwkJCQkgZmFsc2UsCisJCQkJIGZhbHNlLAorCQkJCSBJdGVtUHJvcGVydHlEZXNjcmlwdG9yLkdFTkVSSUNfVkFMVUVfSU1BR0UsCisJCQkJIG51bGwsCisJCQkJIG51bGwpKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFkZHMgYSBwcm9wZXJ0eSBkZXNjcmlwdG9yIGZvciB0aGUgRXJyb3IgZmVhdHVyZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBhZGRFcnJvclByb3BlcnR5RGVzY3JpcHRvcihPYmplY3Qgb2JqZWN0KSB7CisJCWl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzLmFkZAorCQkJKGNyZWF0ZUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IKKwkJCQkoKChDb21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5KWFkYXB0ZXJGYWN0b3J5KS5nZXRSb290QWRhcHRlckZhY3RvcnkoKSwKKwkJCQkgZ2V0UmVzb3VyY2VMb2NhdG9yKCksCisJCQkJIGdldFN0cmluZygiX1VJX0Vycm9yUmVzdWx0X2Vycm9yX2ZlYXR1cmUiKSwKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfUHJvcGVydHlEZXNjcmlwdG9yX2Rlc2NyaXB0aW9uIiwgIl9VSV9FcnJvclJlc3VsdF9lcnJvcl9mZWF0dXJlIiwgIl9VSV9FcnJvclJlc3VsdF90eXBlIiksCisJCQkJIEFuYWx5c2lzUGFja2FnZS5MaXRlcmFscy5FUlJPUl9SRVNVTFRfX0VSUk9SLAorCQkJCSB0cnVlLAorCQkJCSBmYWxzZSwKKwkJCQkgZmFsc2UsCisJCQkJIEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IuUkVBTF9WQUxVRV9JTUFHRSwKKwkJCQkgbnVsbCwKKwkJCQkgbnVsbCkpOworCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyBhIHByb3BlcnR5IGRlc2NyaXB0b3IgZm9yIHRoZSBSZWZlcmVuY2UgQnkgVGltZSBmZWF0dXJlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIGFkZFJlZmVyZW5jZUJ5VGltZVByb3BlcnR5RGVzY3JpcHRvcihPYmplY3Qgb2JqZWN0KSB7CisJCWl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzLmFkZAorCQkJKGNyZWF0ZUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IKKwkJCQkoKChDb21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5KWFkYXB0ZXJGYWN0b3J5KS5nZXRSb290QWRhcHRlckZhY3RvcnkoKSwKKwkJCQkgZ2V0UmVzb3VyY2VMb2NhdG9yKCksCisJCQkJIGdldFN0cmluZygiX1VJX0Vycm9yUmVzdWx0X3JlZmVyZW5jZUJ5VGltZV9mZWF0dXJlIiksCisJCQkJIGdldFN0cmluZygiX1VJX1Byb3BlcnR5RGVzY3JpcHRvcl9kZXNjcmlwdGlvbiIsICJfVUlfRXJyb3JSZXN1bHRfcmVmZXJlbmNlQnlUaW1lX2ZlYXR1cmUiLCAiX1VJX0Vycm9yUmVzdWx0X3R5cGUiKSwKKwkJCQkgQW5hbHlzaXNQYWNrYWdlLkxpdGVyYWxzLkVSUk9SX1JFU1VMVF9fUkVGRVJFTkNFX0JZX1RJTUUsCisJCQkJIHRydWUsCisJCQkJIGZhbHNlLAorCQkJCSBmYWxzZSwKKwkJCQkgSXRlbVByb3BlcnR5RGVzY3JpcHRvci5HRU5FUklDX1ZBTFVFX0lNQUdFLAorCQkJCSBudWxsLAorCQkJCSBudWxsKSk7CisJfQorCisJLyoqCisJICogVGhpcyBhZGRzIGEgcHJvcGVydHkgZGVzY3JpcHRvciBmb3IgdGhlIE1vZGVsIEJ5IFRpbWUgZmVhdHVyZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBhZGRNb2RlbEJ5VGltZVByb3BlcnR5RGVzY3JpcHRvcihPYmplY3Qgb2JqZWN0KSB7CisJCWl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzLmFkZAorCQkJKGNyZWF0ZUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IKKwkJCQkoKChDb21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5KWFkYXB0ZXJGYWN0b3J5KS5nZXRSb290QWRhcHRlckZhY3RvcnkoKSwKKwkJCQkgZ2V0UmVzb3VyY2VMb2NhdG9yKCksCisJCQkJIGdldFN0cmluZygiX1VJX0Vycm9yUmVzdWx0X21vZGVsQnlUaW1lX2ZlYXR1cmUiKSwKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfUHJvcGVydHlEZXNjcmlwdG9yX2Rlc2NyaXB0aW9uIiwgIl9VSV9FcnJvclJlc3VsdF9tb2RlbEJ5VGltZV9mZWF0dXJlIiwgIl9VSV9FcnJvclJlc3VsdF90eXBlIiksCisJCQkJIEFuYWx5c2lzUGFja2FnZS5MaXRlcmFscy5FUlJPUl9SRVNVTFRfX01PREVMX0JZX1RJTUUsCisJCQkJIHRydWUsCisJCQkJIGZhbHNlLAorCQkJCSBmYWxzZSwKKwkJCQkgSXRlbVByb3BlcnR5RGVzY3JpcHRvci5HRU5FUklDX1ZBTFVFX0lNQUdFLAorCQkJCSBudWxsLAorCQkJCSBudWxsKSk7CisJfQorCisJLyoqCisJICogVGhpcyBhZGRzIGEgcHJvcGVydHkgZGVzY3JpcHRvciBmb3IgdGhlIFZhbGlkYXRpb24gRXJyb3IgZmVhdHVyZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBhZGRWYWxpZGF0aW9uRXJyb3JQcm9wZXJ0eURlc2NyaXB0b3IoT2JqZWN0IG9iamVjdCkgeworCQlpdGVtUHJvcGVydHlEZXNjcmlwdG9ycy5hZGQKKwkJCShjcmVhdGVJdGVtUHJvcGVydHlEZXNjcmlwdG9yCisJCQkJKCgoQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSlhZGFwdGVyRmFjdG9yeSkuZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCksCisJCQkJIGdldFJlc291cmNlTG9jYXRvcigpLAorCQkJCSBnZXRTdHJpbmcoIl9VSV9FcnJvclJlc3VsdF92YWxpZGF0aW9uRXJyb3JfZmVhdHVyZSIpLAorCQkJCSBnZXRTdHJpbmcoIl9VSV9Qcm9wZXJ0eURlc2NyaXB0b3JfZGVzY3JpcHRpb24iLCAiX1VJX0Vycm9yUmVzdWx0X3ZhbGlkYXRpb25FcnJvcl9mZWF0dXJlIiwgIl9VSV9FcnJvclJlc3VsdF90eXBlIiksCisJCQkJIEFuYWx5c2lzUGFja2FnZS5MaXRlcmFscy5FUlJPUl9SRVNVTFRfX1ZBTElEQVRJT05fRVJST1IsCisJCQkJIHRydWUsCisJCQkJIGZhbHNlLAorCQkJCSBmYWxzZSwKKwkJCQkgSXRlbVByb3BlcnR5RGVzY3JpcHRvci5SRUFMX1ZBTFVFX0lNQUdFLAorCQkJCSBudWxsLAorCQkJCSBudWxsKSk7CisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIEVycm9yUmVzdWx0LmdpZi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgT2JqZWN0IGdldEltYWdlKE9iamVjdCBvYmplY3QpIHsKKwkJcmV0dXJuIG92ZXJsYXlJbWFnZShvYmplY3QsIGdldFJlc291cmNlTG9jYXRvcigpLmdldEltYWdlKCJmdWxsL29iajE2L0Vycm9yUmVzdWx0IikpOworCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyB0aGUgbGFiZWwgdGV4dCBmb3IgdGhlIGFkYXB0ZWQgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIFN0cmluZyBnZXRUZXh0KE9iamVjdCBvYmplY3QpIHsKKwkJRUxpc3QgbGFiZWxWYWx1ZSA9ICgoRXJyb3JSZXN1bHQpb2JqZWN0KS5nZXRFcnJvckJ5VGltZVN0ZXAoKTsKKwkJU3RyaW5nIGxhYmVsID0gbGFiZWxWYWx1ZSA9PSBudWxsID8gbnVsbCA6IGxhYmVsVmFsdWUudG9TdHJpbmcoKTsKKwkJcmV0dXJuIGxhYmVsID09IG51bGwgfHwgbGFiZWwubGVuZ3RoKCkgPT0gMCA/CisJCQlnZXRTdHJpbmcoIl9VSV9FcnJvclJlc3VsdF90eXBlIikgOgorCQkJZ2V0U3RyaW5nKCJfVUlfRXJyb3JSZXN1bHRfdHlwZSIpICsgIiAiICsgbGFiZWw7CisJfQorCisJLyoqCisJICogVGhpcyBoYW5kbGVzIG1vZGVsIG5vdGlmaWNhdGlvbnMgYnkgY2FsbGluZyB7QGxpbmsgI3VwZGF0ZUNoaWxkcmVufSB0byB1cGRhdGUgYW55IGNhY2hlZAorCSAqIGNoaWxkcmVuIGFuZCBieSBjcmVhdGluZyBhIHZpZXdlciBub3RpZmljYXRpb24sIHdoaWNoIGl0IHBhc3NlcyB0byB7QGxpbmsgI2ZpcmVOb3RpZnlDaGFuZ2VkfS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBub3RpZnlDaGFuZ2VkKE5vdGlmaWNhdGlvbiBub3RpZmljYXRpb24pIHsKKwkJdXBkYXRlQ2hpbGRyZW4obm90aWZpY2F0aW9uKTsKKworCQlzd2l0Y2ggKG5vdGlmaWNhdGlvbi5nZXRGZWF0dXJlSUQoRXJyb3JSZXN1bHQuY2xhc3MpKSB7CisJCQljYXNlIEFuYWx5c2lzUGFja2FnZS5FUlJPUl9SRVNVTFRfX0VSUk9SX0JZX1RJTUVfU1RFUDoKKwkJCWNhc2UgQW5hbHlzaXNQYWNrYWdlLkVSUk9SX1JFU1VMVF9fRVJST1I6CisJCQljYXNlIEFuYWx5c2lzUGFja2FnZS5FUlJPUl9SRVNVTFRfX1JFRkVSRU5DRV9CWV9USU1FOgorCQkJY2FzZSBBbmFseXNpc1BhY2thZ2UuRVJST1JfUkVTVUxUX19NT0RFTF9CWV9USU1FOgorCQkJY2FzZSBBbmFseXNpc1BhY2thZ2UuRVJST1JfUkVTVUxUX19WQUxJREFUSU9OX0VSUk9SOgorCQkJCWZpcmVOb3RpZnlDaGFuZ2VkKG5ldyBWaWV3ZXJOb3RpZmljYXRpb24obm90aWZpY2F0aW9uLCBub3RpZmljYXRpb24uZ2V0Tm90aWZpZXIoKSwgZmFsc2UsIHRydWUpKTsKKwkJCQlyZXR1cm47CisJCX0KKwkJc3VwZXIubm90aWZ5Q2hhbmdlZChub3RpZmljYXRpb24pOworCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmVkaXQuY29tbWFuZC5Db21tYW5kUGFyYW1ldGVyfXMgZGVzY3JpYmluZyB0aGUgY2hpbGRyZW4KKwkgKiB0aGF0IGNhbiBiZSBjcmVhdGVkIHVuZGVyIHRoaXMgb2JqZWN0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIGNvbGxlY3ROZXdDaGlsZERlc2NyaXB0b3JzKENvbGxlY3Rpb248T2JqZWN0PiBuZXdDaGlsZERlc2NyaXB0b3JzLCBPYmplY3Qgb2JqZWN0KSB7CisJCXN1cGVyLmNvbGxlY3ROZXdDaGlsZERlc2NyaXB0b3JzKG5ld0NoaWxkRGVzY3JpcHRvcnMsIG9iamVjdCk7CisJfQorCisJLyoqCisJICogUmV0dXJuIHRoZSByZXNvdXJjZSBsb2NhdG9yIGZvciB0aGlzIGl0ZW0gcHJvdmlkZXIncyByZXNvdXJjZXMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIFJlc291cmNlTG9jYXRvciBnZXRSZXNvdXJjZUxvY2F0b3IoKSB7CisJCXJldHVybiBBbmFseXNpc0VkaXRQbHVnaW4uSU5TVEFOQ0U7CisJfQorCit9CmRpZmYgLS1naXQgYS9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2FuYWx5c2lzL3Byb3ZpZGVyL1JlZmVyZW5jZVNjZW5hcmlvRGF0YU1hcEl0ZW1Qcm92aWRlci5qYXZhIGIvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9hbmFseXNpcy9wcm92aWRlci9SZWZlcmVuY2VTY2VuYXJpb0RhdGFNYXBJdGVtUHJvdmlkZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYWMxNTYxCi0tLSAvZGV2L251bGwKKysrIGIvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9hbmFseXNpcy9wcm92aWRlci9SZWZlcmVuY2VTY2VuYXJpb0RhdGFNYXBJdGVtUHJvdmlkZXIuamF2YQpAQCAtMCwwICsxLDEyNSBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLnByb3ZpZGVyOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAKKyAqIENvcHlyaWdodCAoYykgMjAxMSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4gCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIAorICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wIAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQgCisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbCAKKyAqIAorICogQ29udHJpYnV0b3JzOiAKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOworaW1wb3J0IGphdmEudXRpbC5MaXN0OworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5SZXNvdXJjZUxvY2F0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUVkaXRpbmdEb21haW5JdGVtUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1MYWJlbFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtUHJvcGVydHlEZXNjcmlwdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtUHJvcGVydHlTb3VyY2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVN0cnVjdHVyZWRJdGVtQ29udGVudFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklUcmVlSXRlbUNvbnRlbnRQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JdGVtUHJvdmlkZXJBZGFwdGVyOworCisvKioKKyAqIFRoaXMgaXMgdGhlIGl0ZW0gcHJvdmlkZXIgYWRhcHRlciBmb3IgYSB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5SZWZlcmVuY2VTY2VuYXJpb0RhdGFNYXB9IG9iamVjdC4KKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIFJlZmVyZW5jZVNjZW5hcmlvRGF0YU1hcEl0ZW1Qcm92aWRlcgorCWV4dGVuZHMgSXRlbVByb3ZpZGVyQWRhcHRlcgorCWltcGxlbWVudHMKKwkJSUVkaXRpbmdEb21haW5JdGVtUHJvdmlkZXIsCisJCUlTdHJ1Y3R1cmVkSXRlbUNvbnRlbnRQcm92aWRlciwKKwkJSVRyZWVJdGVtQ29udGVudFByb3ZpZGVyLAorCQlJSXRlbUxhYmVsUHJvdmlkZXIsCisJCUlJdGVtUHJvcGVydHlTb3VyY2UgeworCS8qKgorCSAqIFRoaXMgY29uc3RydWN0cyBhbiBpbnN0YW5jZSBmcm9tIGEgZmFjdG9yeSBhbmQgYSBub3RpZmllci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgUmVmZXJlbmNlU2NlbmFyaW9EYXRhTWFwSXRlbVByb3ZpZGVyKEFkYXB0ZXJGYWN0b3J5IGFkYXB0ZXJGYWN0b3J5KSB7CisJCXN1cGVyKGFkYXB0ZXJGYWN0b3J5KTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgdGhlIHByb3BlcnR5IGRlc2NyaXB0b3JzIGZvciB0aGUgYWRhcHRlZCBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgTGlzdDxJSXRlbVByb3BlcnR5RGVzY3JpcHRvcj4gZ2V0UHJvcGVydHlEZXNjcmlwdG9ycyhPYmplY3Qgb2JqZWN0KSB7CisJCWlmIChpdGVtUHJvcGVydHlEZXNjcmlwdG9ycyA9PSBudWxsKSB7CisJCQlzdXBlci5nZXRQcm9wZXJ0eURlc2NyaXB0b3JzKG9iamVjdCk7CisKKwkJfQorCQlyZXR1cm4gaXRlbVByb3BlcnR5RGVzY3JpcHRvcnM7CisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIFJlZmVyZW5jZVNjZW5hcmlvRGF0YU1hcC5naWYuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIE9iamVjdCBnZXRJbWFnZShPYmplY3Qgb2JqZWN0KSB7CisJCXJldHVybiBvdmVybGF5SW1hZ2Uob2JqZWN0LCBnZXRSZXNvdXJjZUxvY2F0b3IoKS5nZXRJbWFnZSgiZnVsbC9vYmoxNi9SZWZlcmVuY2VTY2VuYXJpb0RhdGFNYXAiKSk7CisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIHRoZSBsYWJlbCB0ZXh0IGZvciB0aGUgYWRhcHRlZCBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgU3RyaW5nIGdldFRleHQoT2JqZWN0IG9iamVjdCkgeworCQlyZXR1cm4gZ2V0U3RyaW5nKCJfVUlfUmVmZXJlbmNlU2NlbmFyaW9EYXRhTWFwX3R5cGUiKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGhhbmRsZXMgbW9kZWwgbm90aWZpY2F0aW9ucyBieSBjYWxsaW5nIHtAbGluayAjdXBkYXRlQ2hpbGRyZW59IHRvIHVwZGF0ZSBhbnkgY2FjaGVkCisJICogY2hpbGRyZW4gYW5kIGJ5IGNyZWF0aW5nIGEgdmlld2VyIG5vdGlmaWNhdGlvbiwgd2hpY2ggaXQgcGFzc2VzIHRvIHtAbGluayAjZmlyZU5vdGlmeUNoYW5nZWR9LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIG5vdGlmeUNoYW5nZWQoTm90aWZpY2F0aW9uIG5vdGlmaWNhdGlvbikgeworCQl1cGRhdGVDaGlsZHJlbihub3RpZmljYXRpb24pOworCQlzdXBlci5ub3RpZnlDaGFuZ2VkKG5vdGlmaWNhdGlvbik7CisJfQorCisJLyoqCisJICogVGhpcyBhZGRzIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuZWRpdC5jb21tYW5kLkNvbW1hbmRQYXJhbWV0ZXJ9cyBkZXNjcmliaW5nIHRoZSBjaGlsZHJlbgorCSAqIHRoYXQgY2FuIGJlIGNyZWF0ZWQgdW5kZXIgdGhpcyBvYmplY3QuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgY29sbGVjdE5ld0NoaWxkRGVzY3JpcHRvcnMoQ29sbGVjdGlvbjxPYmplY3Q+IG5ld0NoaWxkRGVzY3JpcHRvcnMsIE9iamVjdCBvYmplY3QpIHsKKwkJc3VwZXIuY29sbGVjdE5ld0NoaWxkRGVzY3JpcHRvcnMobmV3Q2hpbGREZXNjcmlwdG9ycywgb2JqZWN0KTsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm4gdGhlIHJlc291cmNlIGxvY2F0b3IgZm9yIHRoaXMgaXRlbSBwcm92aWRlcidzIHJlc291cmNlcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgUmVzb3VyY2VMb2NhdG9yIGdldFJlc291cmNlTG9jYXRvcigpIHsKKwkJcmV0dXJuIEFuYWx5c2lzRWRpdFBsdWdpbi5JTlNUQU5DRTsKKwl9CisKK30KZGlmZiAtLWdpdCBhL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vYW5hbHlzaXMvcHJvdmlkZXIvU2ltcGxlRXJyb3JGdW5jdGlvbkl0ZW1Qcm92aWRlci5qYXZhIGIvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9hbmFseXNpcy9wcm92aWRlci9TaW1wbGVFcnJvckZ1bmN0aW9uSXRlbVByb3ZpZGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODQyNzY2NAotLS0gL2Rldi9udWxsCisrKyBiL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vYW5hbHlzaXMvcHJvdmlkZXIvU2ltcGxlRXJyb3JGdW5jdGlvbkl0ZW1Qcm92aWRlci5qYXZhCkBAIC0wLDAgKzEsMTExIEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMucHJvdmlkZXI7CisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAKKyAqIENvcHlyaWdodCAoYykgMjAxMSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4gCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIAorICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wIAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQgCisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbCAKKyAqIAorICogQ29udHJpYnV0b3JzOiAKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOworaW1wb3J0IGphdmEudXRpbC5MaXN0OworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklFZGl0aW5nRG9tYWluSXRlbVByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtTGFiZWxQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbVByb3BlcnR5RGVzY3JpcHRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbVByb3BlcnR5U291cmNlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklTdHJ1Y3R1cmVkSXRlbUNvbnRlbnRQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JVHJlZUl0ZW1Db250ZW50UHJvdmlkZXI7CisKKy8qKgorICogVGhpcyBpcyB0aGUgaXRlbSBwcm92aWRlciBhZGFwdGVyIGZvciBhIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLlNpbXBsZUVycm9yRnVuY3Rpb259IG9iamVjdC4KKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIFNpbXBsZUVycm9yRnVuY3Rpb25JdGVtUHJvdmlkZXIKKwlleHRlbmRzIEVycm9yRnVuY3Rpb25JdGVtUHJvdmlkZXIKKwlpbXBsZW1lbnRzCisJCUlFZGl0aW5nRG9tYWluSXRlbVByb3ZpZGVyLAorCQlJU3RydWN0dXJlZEl0ZW1Db250ZW50UHJvdmlkZXIsCisJCUlUcmVlSXRlbUNvbnRlbnRQcm92aWRlciwKKwkJSUl0ZW1MYWJlbFByb3ZpZGVyLAorCQlJSXRlbVByb3BlcnR5U291cmNlIHsKKwkvKioKKwkgKiBUaGlzIGNvbnN0cnVjdHMgYW4gaW5zdGFuY2UgZnJvbSBhIGZhY3RvcnkgYW5kIGEgbm90aWZpZXIuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFNpbXBsZUVycm9yRnVuY3Rpb25JdGVtUHJvdmlkZXIoQWRhcHRlckZhY3RvcnkgYWRhcHRlckZhY3RvcnkpIHsKKwkJc3VwZXIoYWRhcHRlckZhY3RvcnkpOworCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyB0aGUgcHJvcGVydHkgZGVzY3JpcHRvcnMgZm9yIHRoZSBhZGFwdGVkIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBMaXN0PElJdGVtUHJvcGVydHlEZXNjcmlwdG9yPiBnZXRQcm9wZXJ0eURlc2NyaXB0b3JzKE9iamVjdCBvYmplY3QpIHsKKwkJaWYgKGl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzID09IG51bGwpIHsKKwkJCXN1cGVyLmdldFByb3BlcnR5RGVzY3JpcHRvcnMob2JqZWN0KTsKKworCQl9CisJCXJldHVybiBpdGVtUHJvcGVydHlEZXNjcmlwdG9yczsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgU2ltcGxlRXJyb3JGdW5jdGlvbi5naWYuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIE9iamVjdCBnZXRJbWFnZShPYmplY3Qgb2JqZWN0KSB7CisJCXJldHVybiBvdmVybGF5SW1hZ2Uob2JqZWN0LCBnZXRSZXNvdXJjZUxvY2F0b3IoKS5nZXRJbWFnZSgiZnVsbC9vYmoxNi9TaW1wbGVFcnJvckZ1bmN0aW9uIikpOworCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyB0aGUgbGFiZWwgdGV4dCBmb3IgdGhlIGFkYXB0ZWQgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIFN0cmluZyBnZXRUZXh0KE9iamVjdCBvYmplY3QpIHsKKwkJcmV0dXJuIGdldFN0cmluZygiX1VJX1NpbXBsZUVycm9yRnVuY3Rpb25fdHlwZSIpOworCX0KKworCS8qKgorCSAqIFRoaXMgaGFuZGxlcyBtb2RlbCBub3RpZmljYXRpb25zIGJ5IGNhbGxpbmcge0BsaW5rICN1cGRhdGVDaGlsZHJlbn0gdG8gdXBkYXRlIGFueSBjYWNoZWQKKwkgKiBjaGlsZHJlbiBhbmQgYnkgY3JlYXRpbmcgYSB2aWV3ZXIgbm90aWZpY2F0aW9uLCB3aGljaCBpdCBwYXNzZXMgdG8ge0BsaW5rICNmaXJlTm90aWZ5Q2hhbmdlZH0uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgbm90aWZ5Q2hhbmdlZChOb3RpZmljYXRpb24gbm90aWZpY2F0aW9uKSB7CisJCXVwZGF0ZUNoaWxkcmVuKG5vdGlmaWNhdGlvbik7CisJCXN1cGVyLm5vdGlmeUNoYW5nZWQobm90aWZpY2F0aW9uKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFkZHMge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lZGl0LmNvbW1hbmQuQ29tbWFuZFBhcmFtZXRlcn1zIGRlc2NyaWJpbmcgdGhlIGNoaWxkcmVuCisJICogdGhhdCBjYW4gYmUgY3JlYXRlZCB1bmRlciB0aGlzIG9iamVjdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgdm9pZCBjb2xsZWN0TmV3Q2hpbGREZXNjcmlwdG9ycyhDb2xsZWN0aW9uPE9iamVjdD4gbmV3Q2hpbGREZXNjcmlwdG9ycywgT2JqZWN0IG9iamVjdCkgeworCQlzdXBlci5jb2xsZWN0TmV3Q2hpbGREZXNjcmlwdG9ycyhuZXdDaGlsZERlc2NyaXB0b3JzLCBvYmplY3QpOworCX0KKworfQpkaWZmIC0tZ2l0IGEvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9hbmFseXNpcy9wcm92aWRlci9UaHJlc2hvbGRFcnJvckZ1bmN0aW9uSXRlbVByb3ZpZGVyLmphdmEgYi9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2FuYWx5c2lzL3Byb3ZpZGVyL1RocmVzaG9sZEVycm9yRnVuY3Rpb25JdGVtUHJvdmlkZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMDBiNDVmCi0tLSAvZGV2L251bGwKKysrIGIvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9hbmFseXNpcy9wcm92aWRlci9UaHJlc2hvbGRFcnJvckZ1bmN0aW9uSXRlbVByb3ZpZGVyLmphdmEKQEAgLTAsMCArMSwxMTIgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5wcm92aWRlcjsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogCisgKiBDb3B5cmlnaHQgKGMpIDIwMTEgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuIAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyAKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0IAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwgCisgKiAKKyAqIENvbnRyaWJ1dG9yczogCisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LkFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JRWRpdGluZ0RvbWFpbkl0ZW1Qcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbUxhYmVsUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1Qcm9wZXJ0eVNvdXJjZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JU3RydWN0dXJlZEl0ZW1Db250ZW50UHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVRyZWVJdGVtQ29udGVudFByb3ZpZGVyOworCisvKioKKyAqIFRoaXMgaXMgdGhlIGl0ZW0gcHJvdmlkZXIgYWRhcHRlciBmb3IgYSB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5UaHJlc2hvbGRFcnJvckZ1bmN0aW9ufSBvYmplY3QuCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBUaHJlc2hvbGRFcnJvckZ1bmN0aW9uSXRlbVByb3ZpZGVyCisJZXh0ZW5kcyBFcnJvckZ1bmN0aW9uSXRlbVByb3ZpZGVyCisJaW1wbGVtZW50cworCQlJRWRpdGluZ0RvbWFpbkl0ZW1Qcm92aWRlciwKKwkJSVN0cnVjdHVyZWRJdGVtQ29udGVudFByb3ZpZGVyLAorCQlJVHJlZUl0ZW1Db250ZW50UHJvdmlkZXIsCisJCUlJdGVtTGFiZWxQcm92aWRlciwKKwkJSUl0ZW1Qcm9wZXJ0eVNvdXJjZSB7CisJLyoqCisJICogVGhpcyBjb25zdHJ1Y3RzIGFuIGluc3RhbmNlIGZyb20gYSBmYWN0b3J5IGFuZCBhIG5vdGlmaWVyLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBUaHJlc2hvbGRFcnJvckZ1bmN0aW9uSXRlbVByb3ZpZGVyKEFkYXB0ZXJGYWN0b3J5IGFkYXB0ZXJGYWN0b3J5KSB7CisJCXN1cGVyKGFkYXB0ZXJGYWN0b3J5KTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgdGhlIHByb3BlcnR5IGRlc2NyaXB0b3JzIGZvciB0aGUgYWRhcHRlZCBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgTGlzdDxJSXRlbVByb3BlcnR5RGVzY3JpcHRvcj4gZ2V0UHJvcGVydHlEZXNjcmlwdG9ycyhPYmplY3Qgb2JqZWN0KSB7CisJCWlmIChpdGVtUHJvcGVydHlEZXNjcmlwdG9ycyA9PSBudWxsKSB7CisJCQlzdXBlci5nZXRQcm9wZXJ0eURlc2NyaXB0b3JzKG9iamVjdCk7CisKKwkJfQorCQlyZXR1cm4gaXRlbVByb3BlcnR5RGVzY3JpcHRvcnM7CisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIFRocmVzaG9sZEVycm9yRnVuY3Rpb24uZ2lmLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBPYmplY3QgZ2V0SW1hZ2UoT2JqZWN0IG9iamVjdCkgeworCQlyZXR1cm4gb3ZlcmxheUltYWdlKG9iamVjdCwgZ2V0UmVzb3VyY2VMb2NhdG9yKCkuZ2V0SW1hZ2UoImZ1bGwvb2JqMTYvVGhyZXNob2xkRXJyb3JGdW5jdGlvbiIpKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgdGhlIGxhYmVsIHRleHQgZm9yIHRoZSBhZGFwdGVkIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBTdHJpbmcgZ2V0VGV4dChPYmplY3Qgb2JqZWN0KSB7CisJCXJldHVybiBnZXRTdHJpbmcoIl9VSV9UaHJlc2hvbGRFcnJvckZ1bmN0aW9uX3R5cGUiKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGhhbmRsZXMgbW9kZWwgbm90aWZpY2F0aW9ucyBieSBjYWxsaW5nIHtAbGluayAjdXBkYXRlQ2hpbGRyZW59IHRvIHVwZGF0ZSBhbnkgY2FjaGVkCisJICogY2hpbGRyZW4gYW5kIGJ5IGNyZWF0aW5nIGEgdmlld2VyIG5vdGlmaWNhdGlvbiwgd2hpY2ggaXQgcGFzc2VzIHRvIHtAbGluayAjZmlyZU5vdGlmeUNoYW5nZWR9LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIG5vdGlmeUNoYW5nZWQoTm90aWZpY2F0aW9uIG5vdGlmaWNhdGlvbikgeworCQl1cGRhdGVDaGlsZHJlbihub3RpZmljYXRpb24pOworCQlzdXBlci5ub3RpZnlDaGFuZ2VkKG5vdGlmaWNhdGlvbik7CisJfQorCisJLyoqCisJICogVGhpcyBhZGRzIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuZWRpdC5jb21tYW5kLkNvbW1hbmRQYXJhbWV0ZXJ9cyBkZXNjcmliaW5nIHRoZSBjaGlsZHJlbgorCSAqIHRoYXQgY2FuIGJlIGNyZWF0ZWQgdW5kZXIgdGhpcyBvYmplY3QuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgY29sbGVjdE5ld0NoaWxkRGVzY3JpcHRvcnMoQ29sbGVjdGlvbjxPYmplY3Q+IG5ld0NoaWxkRGVzY3JpcHRvcnMsIE9iamVjdCBvYmplY3QpIHsKKwkJc3VwZXIuY29sbGVjdE5ld0NoaWxkRGVzY3JpcHRvcnMobmV3Q2hpbGREZXNjcmlwdG9ycywgb2JqZWN0KTsKKwl9CisKK30KZGlmZiAtLWdpdCBhL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vYW5hbHlzaXMvdXRpbC9BbmFseXNpc0FkYXB0ZXJGYWN0b3J5LmphdmEgYi9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2FuYWx5c2lzL3V0aWwvQW5hbHlzaXNBZGFwdGVyRmFjdG9yeS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJjYzcyMWIKLS0tIC9kZXYvbnVsbAorKysgYi9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2FuYWx5c2lzL3V0aWwvQW5hbHlzaXNBZGFwdGVyRmFjdG9yeS5qYXZhCkBAIC0wLDAgKzEsMjAzIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA5IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLnV0aWw7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5BZGFwdGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LmltcGwuQWRhcHRlckZhY3RvcnlJbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuQW5hbHlzaXNQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuRXJyb3JGdW5jdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLkVycm9yUmVzdWx0OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuUmVmZXJlbmNlU2NlbmFyaW9EYXRhTWFwOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuU2ltcGxlRXJyb3JGdW5jdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLlRocmVzaG9sZEVycm9yRnVuY3Rpb247CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIFRoZSA8Yj5BZGFwdGVyIEZhY3Rvcnk8L2I+IGZvciB0aGUgbW9kZWwuCisgKiBJdCBwcm92aWRlcyBhbiBhZGFwdGVyIDxjb2RlPmNyZWF0ZVhYWDwvY29kZT4gbWV0aG9kIGZvciBlYWNoIGNsYXNzIG9mIHRoZSBtb2RlbC4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLkFuYWx5c2lzUGFja2FnZQorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgQW5hbHlzaXNBZGFwdGVyRmFjdG9yeSBleHRlbmRzIEFkYXB0ZXJGYWN0b3J5SW1wbCB7CisJLyoqCisJICogVGhlIGNhY2hlZCBtb2RlbCBwYWNrYWdlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBzdGF0aWMgQW5hbHlzaXNQYWNrYWdlIG1vZGVsUGFja2FnZTsKKworCS8qKgorCSAqIENyZWF0ZXMgYW4gaW5zdGFuY2Ugb2YgdGhlIGFkYXB0ZXIgZmFjdG9yeS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQW5hbHlzaXNBZGFwdGVyRmFjdG9yeSgpIHsKKwkJaWYgKG1vZGVsUGFja2FnZSA9PSBudWxsKSB7CisJCQltb2RlbFBhY2thZ2UgPSBBbmFseXNpc1BhY2thZ2UuZUlOU1RBTkNFOworCQl9CisJfQorCisJLyoqCisJICogUmV0dXJucyB3aGV0aGVyIHRoaXMgZmFjdG9yeSBpcyBhcHBsaWNhYmxlIGZvciB0aGUgdHlwZSBvZiB0aGUgb2JqZWN0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIDxjb2RlPnRydWU8L2NvZGU+IGlmIHRoZSBvYmplY3QgaXMgZWl0aGVyIHRoZSBtb2RlbCdzIHBhY2thZ2Ugb3IgaXMgYW4gaW5zdGFuY2Ugb2JqZWN0IG9mIHRoZSBtb2RlbC4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHdoZXRoZXIgdGhpcyBmYWN0b3J5IGlzIGFwcGxpY2FibGUgZm9yIHRoZSB0eXBlIG9mIHRoZSBvYmplY3QuCisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBib29sZWFuIGlzRmFjdG9yeUZvclR5cGUoT2JqZWN0IG9iamVjdCkgeworCQlpZiAob2JqZWN0ID09IG1vZGVsUGFja2FnZSkgeworCQkJcmV0dXJuIHRydWU7CisJCX0KKwkJaWYgKG9iamVjdCBpbnN0YW5jZW9mIEVPYmplY3QpIHsKKwkJCXJldHVybiAoKEVPYmplY3Qpb2JqZWN0KS5lQ2xhc3MoKS5nZXRFUGFja2FnZSgpID09IG1vZGVsUGFja2FnZTsKKwkJfQorCQlyZXR1cm4gZmFsc2U7CisJfQorCisJLyoqCisJICogVGhlIHN3aXRjaCB0aGF0IGRlbGVnYXRlcyB0byB0aGUgPGNvZGU+Y3JlYXRlWFhYPC9jb2RlPiBtZXRob2RzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBBbmFseXNpc1N3aXRjaDxBZGFwdGVyPiBtb2RlbFN3aXRjaCA9CisJCW5ldyBBbmFseXNpc1N3aXRjaDxBZGFwdGVyPigpIHsKKwkJCUBPdmVycmlkZQorCQkJcHVibGljIEFkYXB0ZXIgY2FzZUVycm9yRnVuY3Rpb24oRXJyb3JGdW5jdGlvbiBvYmplY3QpIHsKKwkJCQlyZXR1cm4gY3JlYXRlRXJyb3JGdW5jdGlvbkFkYXB0ZXIoKTsKKwkJCX0KKwkJCUBPdmVycmlkZQorCQkJcHVibGljIEFkYXB0ZXIgY2FzZVRocmVzaG9sZEVycm9yRnVuY3Rpb24oVGhyZXNob2xkRXJyb3JGdW5jdGlvbiBvYmplY3QpIHsKKwkJCQlyZXR1cm4gY3JlYXRlVGhyZXNob2xkRXJyb3JGdW5jdGlvbkFkYXB0ZXIoKTsKKwkJCX0KKwkJCUBPdmVycmlkZQorCQkJcHVibGljIEFkYXB0ZXIgY2FzZVJlZmVyZW5jZVNjZW5hcmlvRGF0YU1hcChSZWZlcmVuY2VTY2VuYXJpb0RhdGFNYXAgb2JqZWN0KSB7CisJCQkJcmV0dXJuIGNyZWF0ZVJlZmVyZW5jZVNjZW5hcmlvRGF0YU1hcEFkYXB0ZXIoKTsKKwkJCX0KKwkJCUBPdmVycmlkZQorCQkJcHVibGljIEFkYXB0ZXIgY2FzZVNpbXBsZUVycm9yRnVuY3Rpb24oU2ltcGxlRXJyb3JGdW5jdGlvbiBvYmplY3QpIHsKKwkJCQlyZXR1cm4gY3JlYXRlU2ltcGxlRXJyb3JGdW5jdGlvbkFkYXB0ZXIoKTsKKwkJCX0KKwkJCUBPdmVycmlkZQorCQkJcHVibGljIEFkYXB0ZXIgY2FzZUVycm9yUmVzdWx0KEVycm9yUmVzdWx0IG9iamVjdCkgeworCQkJCXJldHVybiBjcmVhdGVFcnJvclJlc3VsdEFkYXB0ZXIoKTsKKwkJCX0KKwkJCUBPdmVycmlkZQorCQkJcHVibGljIEFkYXB0ZXIgZGVmYXVsdENhc2UoRU9iamVjdCBvYmplY3QpIHsKKwkJCQlyZXR1cm4gY3JlYXRlRU9iamVjdEFkYXB0ZXIoKTsKKwkJCX0KKwkJfTsKKworCS8qKgorCSAqIENyZWF0ZXMgYW4gYWRhcHRlciBmb3IgdGhlIDxjb2RlPnRhcmdldDwvY29kZT4uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gdGFyZ2V0IHRoZSBvYmplY3QgdG8gYWRhcHQuCisJICogQHJldHVybiB0aGUgYWRhcHRlciBmb3IgdGhlIDxjb2RlPnRhcmdldDwvY29kZT4uCisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZUFkYXB0ZXIoTm90aWZpZXIgdGFyZ2V0KSB7CisJCXJldHVybiBtb2RlbFN3aXRjaC5kb1N3aXRjaCgoRU9iamVjdCl0YXJnZXQpOworCX0KKworCisJLyoqCisJICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLkVycm9yRnVuY3Rpb24gPGVtPkVycm9yIEZ1bmN0aW9uPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsKKwkgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuRXJyb3JGdW5jdGlvbgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVFcnJvckZ1bmN0aW9uQWRhcHRlcigpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLlRocmVzaG9sZEVycm9yRnVuY3Rpb24gPGVtPlRocmVzaG9sZCBFcnJvciBGdW5jdGlvbjwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7CisJICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLlRocmVzaG9sZEVycm9yRnVuY3Rpb24KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlVGhyZXNob2xkRXJyb3JGdW5jdGlvbkFkYXB0ZXIoKSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5SZWZlcmVuY2VTY2VuYXJpb0RhdGFNYXAgPGVtPlJlZmVyZW5jZSBTY2VuYXJpbyBEYXRhIE1hcDwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7CisJICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLlJlZmVyZW5jZVNjZW5hcmlvRGF0YU1hcAorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVSZWZlcmVuY2VTY2VuYXJpb0RhdGFNYXBBZGFwdGVyKCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuU2ltcGxlRXJyb3JGdW5jdGlvbiA8ZW0+U2ltcGxlIEVycm9yIEZ1bmN0aW9uPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsKKwkgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuU2ltcGxlRXJyb3JGdW5jdGlvbgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVTaW1wbGVFcnJvckZ1bmN0aW9uQWRhcHRlcigpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLkVycm9yUmVzdWx0IDxlbT5FcnJvciBSZXN1bHQ8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOworCSAqIGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZSB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5LgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5FcnJvclJlc3VsdAorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVFcnJvclJlc3VsdEFkYXB0ZXIoKSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgdGhlIGRlZmF1bHQgY2FzZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwuCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZUVPYmplY3RBZGFwdGVyKCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKK30gLy9BbmFseXNpc0FkYXB0ZXJGYWN0b3J5CmRpZmYgLS1naXQgYS9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2FuYWx5c2lzL3V0aWwvQW5hbHlzaXNTd2l0Y2guamF2YSBiL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vYW5hbHlzaXMvdXRpbC9BbmFseXNpc1N3aXRjaC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYyNGU4ZTAKLS0tIC9kZXYvbnVsbAorKysgYi9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2FuYWx5c2lzL3V0aWwvQW5hbHlzaXNTd2l0Y2guamF2YQpAQCAtMCwwICsxLDIyNiBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy51dGlsOworCitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuQW5hbHlzaXNQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuRXJyb3JGdW5jdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLkVycm9yUmVzdWx0OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuUmVmZXJlbmNlU2NlbmFyaW9EYXRhTWFwOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuU2ltcGxlRXJyb3JGdW5jdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLlRocmVzaG9sZEVycm9yRnVuY3Rpb247CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIFRoZSA8Yj5Td2l0Y2g8L2I+IGZvciB0aGUgbW9kZWwncyBpbmhlcml0YW5jZSBoaWVyYXJjaHkuCisgKiBJdCBzdXBwb3J0cyB0aGUgY2FsbCB7QGxpbmsgI2RvU3dpdGNoKEVPYmplY3QpIGRvU3dpdGNoKG9iamVjdCl9CisgKiB0byBpbnZva2UgdGhlIDxjb2RlPmNhc2VYWFg8L2NvZGU+IG1ldGhvZCBmb3IgZWFjaCBjbGFzcyBvZiB0aGUgbW9kZWwsCisgKiBzdGFydGluZyB3aXRoIHRoZSBhY3R1YWwgY2xhc3Mgb2YgdGhlIG9iamVjdAorICogYW5kIHByb2NlZWRpbmcgdXAgdGhlIGluaGVyaXRhbmNlIGhpZXJhcmNoeQorICogdW50aWwgYSBub24tbnVsbCByZXN1bHQgaXMgcmV0dXJuZWQsCisgKiB3aGljaCBpcyB0aGUgcmVzdWx0IG9mIHRoZSBzd2l0Y2guCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5BbmFseXNpc1BhY2thZ2UKKyAqIEBnZW5lcmF0ZWQKKyAqLworQFN1cHByZXNzV2FybmluZ3MoImFsbCIpCitwdWJsaWMgY2xhc3MgQW5hbHlzaXNTd2l0Y2g8VD4geworCS8qKgorCSAqIFRoZSBjYWNoZWQgbW9kZWwgcGFja2FnZQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBzdGF0aWMgQW5hbHlzaXNQYWNrYWdlIG1vZGVsUGFja2FnZTsKKworCS8qKgorCSAqIENyZWF0ZXMgYW4gaW5zdGFuY2Ugb2YgdGhlIHN3aXRjaC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQW5hbHlzaXNTd2l0Y2goKSB7CisJCWlmIChtb2RlbFBhY2thZ2UgPT0gbnVsbCkgeworCQkJbW9kZWxQYWNrYWdlID0gQW5hbHlzaXNQYWNrYWdlLmVJTlNUQU5DRTsKKwkJfQorCX0KKworCS8qKgorCSAqIENhbGxzIDxjb2RlPmNhc2VYWFg8L2NvZGU+IGZvciBlYWNoIGNsYXNzIG9mIHRoZSBtb2RlbCB1bnRpbCBvbmUgcmV0dXJucyBhIG5vbiBudWxsIHJlc3VsdDsgaXQgeWllbGRzIHRoYXQgcmVzdWx0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgZmlyc3Qgbm9uLW51bGwgcmVzdWx0IHJldHVybmVkIGJ5IGEgPGNvZGU+Y2FzZVhYWDwvY29kZT4gY2FsbC4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFQgZG9Td2l0Y2goRU9iamVjdCB0aGVFT2JqZWN0KSB7CisJCXJldHVybiBkb1N3aXRjaCh0aGVFT2JqZWN0LmVDbGFzcygpLCB0aGVFT2JqZWN0KTsKKwl9CisKKwkvKioKKwkgKiBDYWxscyA8Y29kZT5jYXNlWFhYPC9jb2RlPiBmb3IgZWFjaCBjbGFzcyBvZiB0aGUgbW9kZWwgdW50aWwgb25lIHJldHVybnMgYSBub24gbnVsbCByZXN1bHQ7IGl0IHlpZWxkcyB0aGF0IHJlc3VsdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIGZpcnN0IG5vbi1udWxsIHJlc3VsdCByZXR1cm5lZCBieSBhIDxjb2RlPmNhc2VYWFg8L2NvZGU+IGNhbGwuCisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBUIGRvU3dpdGNoKEVDbGFzcyB0aGVFQ2xhc3MsIEVPYmplY3QgdGhlRU9iamVjdCkgeworCQlpZiAodGhlRUNsYXNzLmVDb250YWluZXIoKSA9PSBtb2RlbFBhY2thZ2UpIHsKKwkJCXJldHVybiBkb1N3aXRjaCh0aGVFQ2xhc3MuZ2V0Q2xhc3NpZmllcklEKCksIHRoZUVPYmplY3QpOworCQl9CisJCWVsc2UgeworCQkJTGlzdDxFQ2xhc3M+IGVTdXBlclR5cGVzID0gdGhlRUNsYXNzLmdldEVTdXBlclR5cGVzKCk7CisJCQlyZXR1cm4KKwkJCQllU3VwZXJUeXBlcy5pc0VtcHR5KCkgPworCQkJCQlkZWZhdWx0Q2FzZSh0aGVFT2JqZWN0KSA6CisJCQkJCWRvU3dpdGNoKGVTdXBlclR5cGVzLmdldCgwKSwgdGhlRU9iamVjdCk7CisJCX0KKwl9CisKKwkvKioKKwkgKiBDYWxscyA8Y29kZT5jYXNlWFhYPC9jb2RlPiBmb3IgZWFjaCBjbGFzcyBvZiB0aGUgbW9kZWwgdW50aWwgb25lIHJldHVybnMgYSBub24gbnVsbCByZXN1bHQ7IGl0IHlpZWxkcyB0aGF0IHJlc3VsdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIGZpcnN0IG5vbi1udWxsIHJlc3VsdCByZXR1cm5lZCBieSBhIDxjb2RlPmNhc2VYWFg8L2NvZGU+IGNhbGwuCisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBUIGRvU3dpdGNoKGludCBjbGFzc2lmaWVySUQsIEVPYmplY3QgdGhlRU9iamVjdCkgeworCQlzd2l0Y2ggKGNsYXNzaWZpZXJJRCkgeworCQkJY2FzZSBBbmFseXNpc1BhY2thZ2UuRVJST1JfRlVOQ1RJT046IHsKKwkJCQlFcnJvckZ1bmN0aW9uIGVycm9yRnVuY3Rpb24gPSAoRXJyb3JGdW5jdGlvbil0aGVFT2JqZWN0OworCQkJCVQgcmVzdWx0ID0gY2FzZUVycm9yRnVuY3Rpb24oZXJyb3JGdW5jdGlvbik7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBkZWZhdWx0Q2FzZSh0aGVFT2JqZWN0KTsKKwkJCQlyZXR1cm4gcmVzdWx0OworCQkJfQorCQkJY2FzZSBBbmFseXNpc1BhY2thZ2UuVEhSRVNIT0xEX0VSUk9SX0ZVTkNUSU9OOiB7CisJCQkJVGhyZXNob2xkRXJyb3JGdW5jdGlvbiB0aHJlc2hvbGRFcnJvckZ1bmN0aW9uID0gKFRocmVzaG9sZEVycm9yRnVuY3Rpb24pdGhlRU9iamVjdDsKKwkJCQlUIHJlc3VsdCA9IGNhc2VUaHJlc2hvbGRFcnJvckZ1bmN0aW9uKHRocmVzaG9sZEVycm9yRnVuY3Rpb24pOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZUVycm9yRnVuY3Rpb24odGhyZXNob2xkRXJyb3JGdW5jdGlvbik7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBkZWZhdWx0Q2FzZSh0aGVFT2JqZWN0KTsKKwkJCQlyZXR1cm4gcmVzdWx0OworCQkJfQorCQkJY2FzZSBBbmFseXNpc1BhY2thZ2UuUkVGRVJFTkNFX1NDRU5BUklPX0RBVEFfTUFQOiB7CisJCQkJUmVmZXJlbmNlU2NlbmFyaW9EYXRhTWFwIHJlZmVyZW5jZVNjZW5hcmlvRGF0YU1hcCA9IChSZWZlcmVuY2VTY2VuYXJpb0RhdGFNYXApdGhlRU9iamVjdDsKKwkJCQlUIHJlc3VsdCA9IGNhc2VSZWZlcmVuY2VTY2VuYXJpb0RhdGFNYXAocmVmZXJlbmNlU2NlbmFyaW9EYXRhTWFwKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGRlZmF1bHRDYXNlKHRoZUVPYmplY3QpOworCQkJCXJldHVybiByZXN1bHQ7CisJCQl9CisJCQljYXNlIEFuYWx5c2lzUGFja2FnZS5TSU1QTEVfRVJST1JfRlVOQ1RJT046IHsKKwkJCQlTaW1wbGVFcnJvckZ1bmN0aW9uIHNpbXBsZUVycm9yRnVuY3Rpb24gPSAoU2ltcGxlRXJyb3JGdW5jdGlvbil0aGVFT2JqZWN0OworCQkJCVQgcmVzdWx0ID0gY2FzZVNpbXBsZUVycm9yRnVuY3Rpb24oc2ltcGxlRXJyb3JGdW5jdGlvbik7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlRXJyb3JGdW5jdGlvbihzaW1wbGVFcnJvckZ1bmN0aW9uKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGRlZmF1bHRDYXNlKHRoZUVPYmplY3QpOworCQkJCXJldHVybiByZXN1bHQ7CisJCQl9CisJCQljYXNlIEFuYWx5c2lzUGFja2FnZS5FUlJPUl9SRVNVTFQ6IHsKKwkJCQlFcnJvclJlc3VsdCBlcnJvclJlc3VsdCA9IChFcnJvclJlc3VsdCl0aGVFT2JqZWN0OworCQkJCVQgcmVzdWx0ID0gY2FzZUVycm9yUmVzdWx0KGVycm9yUmVzdWx0KTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGRlZmF1bHRDYXNlKHRoZUVPYmplY3QpOworCQkJCXJldHVybiByZXN1bHQ7CisJCQl9CisJCQlkZWZhdWx0OiByZXR1cm4gZGVmYXVsdENhc2UodGhlRU9iamVjdCk7CisJCX0KKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5FcnJvciBGdW5jdGlvbjwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOworCSAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgorCSAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkVycm9yIEZ1bmN0aW9uPC9lbT4nLgorCSAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVCBjYXNlRXJyb3JGdW5jdGlvbihFcnJvckZ1bmN0aW9uIG9iamVjdCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5UaHJlc2hvbGQgRXJyb3IgRnVuY3Rpb248L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsKKwkgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KKwkgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5UaHJlc2hvbGQgRXJyb3IgRnVuY3Rpb248L2VtPicuCisJICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBUIGNhc2VUaHJlc2hvbGRFcnJvckZ1bmN0aW9uKFRocmVzaG9sZEVycm9yRnVuY3Rpb24gb2JqZWN0KSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPlJlZmVyZW5jZSBTY2VuYXJpbyBEYXRhIE1hcDwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOworCSAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgorCSAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPlJlZmVyZW5jZSBTY2VuYXJpbyBEYXRhIE1hcDwvZW0+Jy4KKwkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFQgY2FzZVJlZmVyZW5jZVNjZW5hcmlvRGF0YU1hcChSZWZlcmVuY2VTY2VuYXJpb0RhdGFNYXAgb2JqZWN0KSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPlNpbXBsZSBFcnJvciBGdW5jdGlvbjwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOworCSAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgorCSAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPlNpbXBsZSBFcnJvciBGdW5jdGlvbjwvZW0+Jy4KKwkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFQgY2FzZVNpbXBsZUVycm9yRnVuY3Rpb24oU2ltcGxlRXJyb3JGdW5jdGlvbiBvYmplY3QpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+RXJyb3IgUmVzdWx0PC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7CisJICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCisJICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+RXJyb3IgUmVzdWx0PC9lbT4nLgorCSAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVCBjYXNlRXJyb3JSZXN1bHQoRXJyb3JSZXN1bHQgb2JqZWN0KSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkVPYmplY3Q8L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsKKwkgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaCwgYnV0IHRoaXMgaXMgdGhlIGxhc3QgY2FzZSBhbnl3YXkuCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCisJICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+RU9iamVjdDwvZW0+Jy4KKwkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFQgZGVmYXVsdENhc2UoRU9iamVjdCBvYmplY3QpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCit9IC8vQW5hbHlzaXNTd2l0Y2gKZGlmZiAtLWdpdCBhL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vYW5hbHlzaXMvdXRpbC9DU1ZTY2VuYXJpb1N0cmVhbWVyLmphdmEgYi9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2FuYWx5c2lzL3V0aWwvQ1NWU2NlbmFyaW9TdHJlYW1lci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMwOTFhOWEKLS0tIC9kZXYvbnVsbAorKysgYi9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2FuYWx5c2lzL3V0aWwvQ1NWU2NlbmFyaW9TdHJlYW1lci5qYXZhCkBAIC0wLDAgKzEsMTc3IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMudXRpbDsKKworaW1wb3J0IGphdmEuaW8uQnVmZmVyZWRSZWFkZXI7CitpbXBvcnQgamF2YS5pby5GaWxlOworaW1wb3J0IGphdmEuaW8uRmlsZVJlYWRlcjsKK2ltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOworaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7CitpbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CitpbXBvcnQgamF2YS51dGlsLk1hcDsKK2ltcG9ydCBqYXZhLnV0aWwuU3RyaW5nVG9rZW5pemVyOworCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5TY2VuYXJpb0luaXRpYWxpemF0aW9uRXhjZXB0aW9uOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA3LCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCisvKioKKyAqIEFkZHMgbWV0aG9kcyBmb3Igc3RyZWFtaW5nIGRhdGEgaW5zdGVhZCBvZiBsb2FkaW5nIGFsbCBkYXRhIGZpbGVzIGludG8gbWVtb3J5CisgKi8KK3B1YmxpYyBjbGFzcyBDU1ZTY2VuYXJpb1N0cmVhbWVyIGV4dGVuZHMgQ1NWc2NlbmFyaW9Mb2FkZXIgeworCisJcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgTlVNX0xFQURfQ09MUyA9IDI7CisJCisJTWFwPEludGVnZXIsIE1hcDxTdHJpbmcsIEJ1ZmZlcmVkUmVhZGVyPj4gc3RyZWFtUmVhZGVycyA9IG5ldyBIYXNoTWFwPEludGVnZXIsIE1hcDxTdHJpbmcsIEJ1ZmZlcmVkUmVhZGVyPj4oKTsKKwlNYXA8SW50ZWdlciwgTWFwPFN0cmluZywgSW50ZWdlcj4+IHN0cmVhbVJlYWRlckN1cnJlbnRSb3cgPSBuZXcgSGFzaE1hcDxJbnRlZ2VyLCBNYXA8U3RyaW5nLCBJbnRlZ2VyPj4oKTsKKwlNYXA8SW50ZWdlciwgTWFwPFN0cmluZywgTGlzdDxEb3VibGU+Pj4gc3RyZWFtUmVhZGVyc0xhc3RSb3cgPSBuZXcgSGFzaE1hcDxJbnRlZ2VyLCBNYXA8U3RyaW5nLCBMaXN0PERvdWJsZT4+PigpOworCQorCU1hcDxJbnRlZ2VyLCBMaXN0PFN0cmluZz4+IGhlYWRlcnNNYXAgPSBuZXcgSGFzaE1hcDxJbnRlZ2VyLCBMaXN0PFN0cmluZz4+KCk7CisJCisJcHJpdmF0ZSBpbnQgcm93ID0gLTE7IC8vIFdoaWNoIHJvdworCQorCS8qKgorCSAqIEBwYXJhbSBwYXRoCisJICovCisJCisJcHVibGljIENTVlNjZW5hcmlvU3RyZWFtZXIoU3RyaW5nIHBhdGgpIHRocm93cyBTY2VuYXJpb0luaXRpYWxpemF0aW9uRXhjZXB0aW9uIHsKKwkJc3VwZXIocGF0aCk7CisJfQorCQorCQorCS8qKgorCSAqIHByZXBhcmVGb3JTdHJlYW1pbmcKKwkgKiAKKwkgKiBAcGFyYW0gcmVzb2x1dGlvbiBUaGUgZGVzaXJlZCByZXNvbHV0aW9uLCBvciAtMSBvZiBhbGwgZmlsZXMgc2hvdWxkIGJlIHN0cmVhbWVkCisJICovCisJCisJcHVibGljIHZvaWQgcHJlcGFyZUZvclN0cmVhbWluZyhpbnQgcmVzb2x1dGlvbikgdGhyb3dzIElPRXhjZXB0aW9uIHsKKwkJCisJCWZvcihpbnQgaSA9IDA7IGkgPCBkaXNlYXNlRGF0YS5zaXplKCk7IGkgKyspIHsKKwkJCUZpbGUgZiA9IGRpc2Vhc2VEYXRhLmdldChpKTsKKwkJCVN0cmluZyBuYW1lID0gZi5nZXROYW1lKCk7CisJCQlpZihmLmdldE5hbWUoKS5zdGFydHNXaXRoKCIuIikpIGNvbnRpbnVlOy8vJE5PTi1OTFMtMSQKKwkJCWludCBfaWR4ID0gbmFtZS5sYXN0SW5kZXhPZignXycpOworCQkJaW50IGRvdGlkeCA9IG5hbWUubGFzdEluZGV4T2YoJy4nKTsKKwkJCWlmKF9pZHggPDAgfHwgZG90aWR4IDwgMCB8fCBkb3RpZHggPCBfaWR4KSBjb250aW51ZTsgLy8gbm90IGEgZGF0YSBmaWxlCisJCQlTdHJpbmcgc3RhdGUgPSBuYW1lLnN1YnN0cmluZygwLCBfaWR4KTsKKworCQkJLy8gZGlzY292ZXJlZCBhIHN0YXRlCisJCQlyZWdpc3RlcktleShzdGF0ZSk7CisJCQkKKwkJCWludCByZXMgPSBJbnRlZ2VyLnBhcnNlSW50KG5hbWUuc3Vic3RyaW5nKF9pZHgrMSwgZG90aWR4KSk7CisJCQlpZihyZXNvbHV0aW9uICE9IC0xICYmIHJlcyAhPSByZXNvbHV0aW9uKSBjb250aW51ZTsgLy8gd3JvbmcgcmVzb2x1dGlvbgorCQkJb3BlbkZpbGUoc3RhdGUsIGYsIHJlcyk7CisJCX0KKwl9CisJCisJLyoqCisJICogb3BlbkZpbGUuIE9wZW4gZGF0YSBmaWxlIGFuZCBwcmVwYXJlIGZvciBzdHJlYW1pbmcKKwkgKiAKKwkgKiBAcGFyYW0gc3RhdGUgVGhlIHN0YXRlCisJICogQHBhcmFtIEZpbGUgZmlsZQorCSAqIEBwYXJhbSBhZG1pbkxldmVsCisJICovCisJCisJcHVibGljIHZvaWQgb3BlbkZpbGUoU3RyaW5nIHN0YXRlLCBGaWxlIGYsIGludCBhZG1pbkxldmVsKSB0aHJvd3MgSU9FeGNlcHRpb24geworCQlCdWZmZXJlZFJlYWRlciByZWFkZXIgPSBuZXcgQnVmZmVyZWRSZWFkZXIobmV3IEZpbGVSZWFkZXIoZikpOworCQkKKwkJaWYoIXN0cmVhbVJlYWRlcnMuY29udGFpbnNLZXkoYWRtaW5MZXZlbCkpIHsKKwkJCXN0cmVhbVJlYWRlcnMucHV0KGFkbWluTGV2ZWwsIG5ldyBIYXNoTWFwPFN0cmluZywgQnVmZmVyZWRSZWFkZXI+KCkpOworCQkJc3RyZWFtUmVhZGVyQ3VycmVudFJvdy5wdXQoYWRtaW5MZXZlbCwgbmV3IEhhc2hNYXA8U3RyaW5nLCBJbnRlZ2VyPigpKTsKKwkJCXN0cmVhbVJlYWRlcnNMYXN0Um93LnB1dChhZG1pbkxldmVsLCBuZXcgSGFzaE1hcDxTdHJpbmcsIExpc3Q8RG91YmxlPj4oKSk7CisJCX0KKwkJTWFwPFN0cmluZywgQnVmZmVyZWRSZWFkZXI+c3RhdGVSZWFkZXJNYXAgPSBzdHJlYW1SZWFkZXJzLmdldChhZG1pbkxldmVsKTsKKwkJTWFwPFN0cmluZywgSW50ZWdlcj5zdGF0ZVJvd01hcCA9IHN0cmVhbVJlYWRlckN1cnJlbnRSb3cuZ2V0KGFkbWluTGV2ZWwpOworCQlNYXA8U3RyaW5nLCBMaXN0PERvdWJsZT4+c3RhdGVSb3dEYXRhID0gc3RyZWFtUmVhZGVyc0xhc3RSb3cuZ2V0KGFkbWluTGV2ZWwpOworCQlzdGF0ZVJlYWRlck1hcC5wdXQoc3RhdGUsIHJlYWRlcik7CisJCXN0YXRlUm93TWFwLnB1dChzdGF0ZSwgLTEpOyAvLyBubyByb3cgcmVhZCB5ZXQsIGZpcnN0IHJvdyBpcyByb3cgMAorCQlzdGF0ZVJvd0RhdGEucHV0KHN0YXRlLCBudWxsKTsgLy8gbm8gZGF0YSB5ZXQKKwkJU3RyaW5nIGhlYWRlcjsKKwkJCisJCWlmICggKGhlYWRlcj1yZWFkZXIucmVhZExpbmUoKSkgIT0gbnVsbCApIHsgCisJCQlpZighaGVhZGVyc01hcC5jb250YWluc0tleShhZG1pbkxldmVsKSkgeworCQkJCUxpc3Q8U3RyaW5nPmhlYWRlckVsZW1lbnRzID0gbmV3IEFycmF5TGlzdDxTdHJpbmc+KCk7CisJCQkJaGVhZGVyc01hcC5wdXQoYWRtaW5MZXZlbCwgaGVhZGVyRWxlbWVudHMpOworCQkJCVN0cmluZ1Rva2VuaXplciBzdCA9IG5ldyBTdHJpbmdUb2tlbml6ZXIoaGVhZGVyLCAiLCIpOy8vJE5PTi1OTFMtMSQKKwkKKwkJCQlpbnQgY29sID0gMDsKKwkJCQl3aGlsZSAoc3QuaGFzTW9yZVRva2VucygpKSB7CisJCQkJCVN0cmluZyB2YWwgPSBzdC5uZXh0VG9rZW4oKS50cmltKCk7CisJCQkJCWlmKGNvbCA8IE5VTV9MRUFEX0NPTFMpIHsrK2NvbDtjb250aW51ZTt9CisJCQkJCWhlYWRlckVsZW1lbnRzLmFkZCh2YWwpOworCQkJCQkrK2NvbDsKKwkJCQl9CisJCQl9CisJCX0gLy8gcmVhZCB0aGUgaGVhZGVyCisJCS8vLy8vLy8vLy8vLy8vLy8vLy8vLworCX0KKwkKKwkvKioKKwkgKiBzdHJlYW1Sb3cgU3RyZWFtIG5leHQgcm93IG9mIGRhdGEKKwkgKiAKKwkgKiAKKwkgKiBAcGFyYW0gYWRtaW5MZXZlbCB3aGljaCBhZG1pbiBsZXZlbAorCSAqIEBwYXJhbSBzdGF0ZSBXaGljaCBzdGF0ZSAoZS5nLiBTKQorCSAqIEByZXR1cm4gTGlzdDxEb3VibGU+IFRoZSBkYXRhLCBvciBudWxsIGlmIGVuZCBvZiBsaW5lIGlzIGVuY291bnRlcmVkOworCSAqLworCQorCXB1YmxpYyBMaXN0PERvdWJsZT5zdHJlYW1Sb3coaW50IGFkbWluTGV2ZWwsIFN0cmluZyBzdGF0ZSkgdGhyb3dzIElPRXhjZXB0aW9uIHsKKwkJQnVmZmVyZWRSZWFkZXIgYnIgPSBzdHJlYW1SZWFkZXJzLmdldChhZG1pbkxldmVsKS5nZXQoc3RhdGUpOworCQlpZihiciA9PSBudWxsKSByZXR1cm4gbnVsbDsgLy8gc3RyZWFtIGlzIGNsb3NlZAorCQlTdHJpbmcgZGF0YTsKKwkJaWYgKCAoZGF0YT1ici5yZWFkTGluZSgpKSAhPSBudWxsICkgeyAKKwkJCQorCQkJaWYoc3RyZWFtUmVhZGVyc0xhc3RSb3cuZ2V0KGFkbWluTGV2ZWwpLmdldChzdGF0ZSkgPT0gbnVsbCkgCisJCQkJc3RyZWFtUmVhZGVyc0xhc3RSb3cuZ2V0KGFkbWluTGV2ZWwpLnB1dChzdGF0ZSwgbmV3IEFycmF5TGlzdDxEb3VibGU+KCkpOworCQkJTGlzdDxEb3VibGU+cmVzdWx0ID0gc3RyZWFtUmVhZGVyc0xhc3RSb3cuZ2V0KGFkbWluTGV2ZWwpLmdldChzdGF0ZSk7CisJCQlyZXN1bHQuY2xlYXIoKTsKKwkJCVN0cmluZ1Rva2VuaXplciBzdCA9IG5ldyBTdHJpbmdUb2tlbml6ZXIoZGF0YSwgIiwiKTsvLyROT04tTkxTLTEkCisJCQkKKwkJCWludCBjb2wgPSAwOworCQkJd2hpbGUgKHN0Lmhhc01vcmVUb2tlbnMoKSkgeworCQkJCVN0cmluZyB2YWwgPSBzdC5uZXh0VG9rZW4oKS50cmltKCk7CisJCQkJaWYoY29sIDwgTlVNX0xFQURfQ09MUykgeysrY29sO2NvbnRpbnVlO30KKwkJCQlyZXN1bHQuYWRkKERvdWJsZS5wYXJzZURvdWJsZSh2YWwpKTsKKwkJCQkrK2NvbDsKKwkJCX0KKwkJCXN0cmVhbVJlYWRlckN1cnJlbnRSb3cuZ2V0KGFkbWluTGV2ZWwpLnB1dChzdGF0ZSwgc3RyZWFtUmVhZGVyQ3VycmVudFJvdy5nZXQoYWRtaW5MZXZlbCkuZ2V0KHN0YXRlKSsxKTsKKwkJCQorCQkJcmV0dXJuIHJlc3VsdDsKKwkJfQorCQlici5jbG9zZSgpOworCQlzdHJlYW1SZWFkZXJzLmdldChhZG1pbkxldmVsKS5wdXQoc3RhdGUsIG51bGwpOy8vIGdjIHJlYWRlcgorCQlyZXR1cm4gbnVsbDsgLy8gZW5kIG9mIGZpbGUgcmVhY2hlZAorCX0KKwkKKwlwdWJsaWMgaW50IGdldEN1cnJlbnRSb3coaW50IGFkbWluTGV2ZWwsIFN0cmluZyBzdGF0ZSkgeworCQlyZXR1cm4gc3RyZWFtUmVhZGVyQ3VycmVudFJvdy5nZXQoYWRtaW5MZXZlbCkuZ2V0KHN0YXRlKTsKKwl9CisJCisJLyoqCisJICogc3RyZWFtUm93IFN0cmVhbSBuZXh0IHJvdyBvZiBkYXRhCisJICogCisJICogCisJICogQHBhcmFtIGFkbWluTGV2ZWwgd2hpY2ggYWRtaW4gbGV2ZWwKKwkgKiBAcGFyYW0gc3RhdGUgV2hpY2ggc3RhdGUgKGUuZy4gUykKKwkgKiBAcmV0dXJuIExpc3Q8RG91YmxlPiBUaGUgZGF0YQorCSAqLworCQorCXB1YmxpYyBMaXN0PERvdWJsZT5nZXRMYXN0RmV0Y2hlZFJvdyhpbnQgYWRtaW5MZXZlbCwgU3RyaW5nIHN0YXRlKSB7CisJCUxpc3Q8RG91YmxlPnJlc3VsdCA9IHN0cmVhbVJlYWRlcnNMYXN0Um93LmdldChhZG1pbkxldmVsKS5nZXQoc3RhdGUpOworCQlyZXR1cm4gcmVzdWx0OworCX0KKworCXB1YmxpYyBpbnQgZ2V0RGF0YVBvc2l0aW9uKGludCBhZG1pbkxldmVsLCBTdHJpbmcga2V5KSB7CisJCXJldHVybiBoZWFkZXJzTWFwLmdldChhZG1pbkxldmVsKS5pbmRleE9mKGtleSk7CisJfQorfQpkaWZmIC0tZ2l0IGEvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9hbmFseXNpcy91dGlsL0NTVnNjZW5hcmlvTG9hZGVyLmphdmEgYi9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2FuYWx5c2lzL3V0aWwvQ1NWc2NlbmFyaW9Mb2FkZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZWI0MTZkCi0tLSAvZGV2L251bGwKKysrIGIvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9hbmFseXNpcy91dGlsL0NTVnNjZW5hcmlvTG9hZGVyLmphdmEKQEAgLTAsMCArMSw4NzkgQEAKKy8qKgorICogCisgKi8KK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy51dGlsOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA3LCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGphdmEuaW8uQnVmZmVyZWRSZWFkZXI7CitpbXBvcnQgamF2YS5pby5GaWxlOworaW1wb3J0IGphdmEuaW8uRmlsZU5vdEZvdW5kRXhjZXB0aW9uOworaW1wb3J0IGphdmEuaW8uRmlsZVJlYWRlcjsKK2ltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOworaW1wb3J0IGphdmEubmV0LlVSTDsKK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OworaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOworaW1wb3J0IGphdmEudXRpbC5IYXNoU2V0OworaW1wb3J0IGphdmEudXRpbC5MaXN0OworaW1wb3J0IGphdmEudXRpbC5NYXA7CitpbXBvcnQgamF2YS51dGlsLk5vU3VjaEVsZW1lbnRFeGNlcHRpb247CitpbXBvcnQgamF2YS51dGlsLlNldDsKK2ltcG9ydCBqYXZhLnV0aWwuU3RyaW5nVG9rZW5pemVyOworCitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkZpbGVMb2NhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuQWN0aXZhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuQW5hbHlzaXNGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuRGlzZWFzZVR5cGU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5TY2VuYXJpb0luaXRpYWxpemF0aW9uRXhjZXB0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuaW1wbC5BbmFseXNpc0ZhY3RvcnlJbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuaW1wbC5SZWZlcmVuY2VTY2VuYXJpb0RhdGFNYXBJbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuaW1wbC5SZWZlcmVuY2VTY2VuYXJpb0RhdGFNYXBJbXBsLlJlZmVyZW5jZVNjZW5hcmlvRGF0YUluc3RhbmNlOworCisKKy8qKgorICogTG9hZCBhIGRpc2Vhc2Ugc2NlbmFyaW8gCisgKgorICovCisKK3B1YmxpYyBjbGFzcyBDU1ZzY2VuYXJpb0xvYWRlciB7CisKKwkKKwlwcml2YXRlIFN0cmluZyBkaXJlY3Rvcnk9IiI7Ly8kTk9OLU5MUy0xJAorCisJLy8gVGhlc2UgYXJlIHRoZSBrZXlzIGluIHRoZSBtYXAKKwlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBTX1RZUEUgPSAiUyI7Ly8kTk9OLU5MUy0xJAorCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEVfVFlQRSA9ICJFIjsvLyROT04tTkxTLTEkCisJcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgSV9UWVBFID0gIkkiOy8vJE5PTi1OTFMtMSQKKwlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBSX1RZUEUgPSAiUiI7Ly8kTk9OLU5MUy0xJAorCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIElOQ0lERU5DRV9UWVBFID0gIkluY2lkZW5jZSI7Ly8kTk9OLU5MUy0xJAorCQorCXB1YmxpYyBzdGF0aWMgZmluYWwgU2V0PFN0cmluZz4gU19LRVlfU0VUID0gbmV3IEhhc2hTZXQ8U3RyaW5nPigpOworCXB1YmxpYyBzdGF0aWMgZmluYWwgU2V0PFN0cmluZz4gRV9LRVlfU0VUID0gbmV3IEhhc2hTZXQ8U3RyaW5nPigpOworCXB1YmxpYyBzdGF0aWMgZmluYWwgU2V0PFN0cmluZz4gSV9LRVlfU0VUID0gbmV3IEhhc2hTZXQ8U3RyaW5nPigpOworCXB1YmxpYyBzdGF0aWMgZmluYWwgU2V0PFN0cmluZz4gUl9LRVlfU0VUID0gbmV3IEhhc2hTZXQ8U3RyaW5nPigpOworCS8qKgorCSAqIAorCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgU2V0PFN0cmluZz4gSU5DSURFTkNFX0tFWV9TRVQgPSBuZXcgSGFzaFNldDxTdHJpbmc+KCk7CisJCisJcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUE9QX0NPVU5UX0tFWSA9ICJQb3B1bGF0aW9uIENvdW50IjsvLyROT04tTkxTLTEkCisJCisJcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUExBVEZPUk0gPSAicGxhdGZvcm06IjsvLyROT04tTkxTLTEkCisJcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgRklMRSA9ICJmaWxlOiI7Ly8kTk9OLU5MUy0xJAorCQorCS8qKgorCSAqIEVycm9yIE1lc3NhZ2VzCisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgSU9fRVhDRVBUSU9OX0VSUk9SX01TRyA9ICJDVlNzY2VuYXJpb0xvYWRlcjogSU9FeGNlcHRpb24gZXJyb3IhIjsvLyROT04tTkxTLTEkCisJcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgTk9fRklMRV9NU0cgPSAiQ1ZTc2NlbmFyaW9Mb2FkZXI6IENhbm5vdCBmaW5kIEZJTEU6ICI7Ly8kTk9OLU5MUy0xJAorCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIE5PX0RJUl9NU0cgPSAiQ1ZTc2NlbmFyaW9Mb2FkZXI6IENhbm5vdCBmaW5kIERJUkVDVE9SWTogIjsvLyROT04tTkxTLTEkCisJcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgVU5LTk9XTl9ESVNFQVNFX01TRyA9ICJDVlNzY2VuYXJpb0xvYWRlcjogRGlzZWFzZSB0eXBlIG5vdCByZWNvZ25pemVkIGluIGRpcmVjdG9yeTogIjsvLyROT04tTkxTLTEkCisJcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgRk9STUFUX0VSUl9NU0cgPSAiQ1ZTc2NlbmFyaW9Mb2FkZXI6IE1pc21hdGNoIGJldHdlZW4gY29sdW1ucyBhbmQgdmFsdWVzIGluIHJ1biBwYXJhbWV0ZXIgZmlsZTogIjsvLyROT04tTkxTLTEkCisJCisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIENTVl9FWFRFTlNJT04gPSAiLmNzdiI7Ly8kTk9OLU5MUy0xJAorCisJcHJvdGVjdGVkIExpc3Q8RmlsZT4gZGlzZWFzZURhdGEgPSBuZXcgQXJyYXlMaXN0PEZpbGU+KCk7CisJcHJpdmF0ZSBmaW5hbCBNYXA8U3RyaW5nLCBTdHJpbmc+IHJ1blBhcmFtZXRlcnMgPSBuZXcgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4oKTsKKworCS8qKgorCSAqIE5hbWUgb2YgYWxsIHJ1biBwYXJhbWV0ZXIgZmlsZXMgKG9uZSBwZXIgZGlzZWFzZSBmb2xkZXIKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBSVU5fUEFSQU1FVEVSX0ZJTEVfTkFNRSA9ICJydW5wYXJhbWV0ZXJzLmNzdiI7Ly8kTk9OLU5MUy0xJAorCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFJVTl9QQVJBTUVURVJfRklMRV9OQU1FX09MRCA9ICJydW5wYXJhbXRlcnMuY3N2IjsvLyROT04tTkxTLTEkCisKKwlwcml2YXRlIEFuYWx5c2lzRmFjdG9yeSBhRmFjdG9yeSA9IG5ldyBBbmFseXNpc0ZhY3RvcnlJbXBsKCk7CisKKwkvKioKKwkgKiBUaGlzIGNsYXNzIGxvYWRzIGRhdGEgZnJvbSBhIGZvbGRlciBjb250YWluaW5nIGEgc2F2ZWQgc2NlbmFyaW8gcnVuIGRhdGEgZm9yCisJICogYSBwYXJ0aWN1bGFyIGRpc2Vhc2UgaW5zdGFuY2UKKwkgKiBUaGUgZGF0YSBpbiB0aGUgZm9sZGVyIGlzIGEgc2V0IG9mIGNzdiBmaWxlcywgb25lIHBlciBkaXNlYXNlIHN0YXRlCisJICogCisJICogQHBhcmFtIGRpc2Vhc2VEaXJlY3RvcnkgRGlyZWN0b3J5IGNvbnRhaW5pbmcgZGlzZWFzZSBkYXRhIAorCSAqIEB0aHJvd3MgU2NlbmFyaW9Jbml0aWFsaXphdGlvbkV4Y2VwdGlvbgorCSAqLworCXB1YmxpYyBDU1ZzY2VuYXJpb0xvYWRlcihTdHJpbmcgZGlzZWFzZURpcmVjdG9yeSkgdGhyb3dzIFNjZW5hcmlvSW5pdGlhbGl6YXRpb25FeGNlcHRpb24geworCQljbGVhcigpOworCQlkaXJlY3RvcnkgPSBkaXNlYXNlRGlyZWN0b3J5OworCQlkaXNlYXNlRGF0YSA9IHRoaXMuZ2V0RGF0YUZpbGVzKCk7CisJfQorCisJLyoqCisJICogRW1wdHkgY29uc3RydWN0b3IgdXNlZCB3aGVuIHBhcnNpbmcgYSBzaW5nbGUgZmlsZSwgZS5nLiBhbiBhZ2dyZWdhdGUgZmlsZQorCSAqLworCXB1YmxpYyBDU1ZzY2VuYXJpb0xvYWRlcigpIHsKKwkJY2xlYXIoKTsKKwl9CisKKworCXB1YmxpYyBzdGF0aWMgdm9pZCBjbGVhcigpIHsKKwkJU19LRVlfU0VULmNsZWFyKCk7CisJCUVfS0VZX1NFVC5jbGVhcigpOworCQlJX0tFWV9TRVQuY2xlYXIoKTsKKwkJUl9LRVlfU0VULmNsZWFyKCk7CisJCUlOQ0lERU5DRV9LRVlfU0VULmNsZWFyKCk7CisJCQorCX0KKwkKKwkvKioKKwkgKiByZWFkIGFsbCB0aGUgZGF0YSBmaWxlcyBpbiBhIHNjZW5hcmlvIGZvbGRlcgorCSAqIGZpbHRlciB0byByZXR1cm4ganVzdCB0aGUgY3N2IGZpbGVzIHdpdGggZGF0YQorCSAqIEByZXR1cm4KKwkgKi8KKwlwcml2YXRlIExpc3Q8RmlsZT4gZ2V0RGF0YUZpbGVzKCkgdGhyb3dzIFNjZW5hcmlvSW5pdGlhbGl6YXRpb25FeGNlcHRpb24geworCQlMaXN0PEZpbGU+IGRhdGFGaWxlcyA9IG5ldyBBcnJheUxpc3Q8RmlsZT4oKTsKKwkJRmlsZVtdIGZpbGVzOworCQlVUkwgZlVSTD1udWxsOworCQlGaWxlIGRpciA9IG51bGw7CisJIAorCQlpZihkaXJlY3Rvcnkuc3RhcnRzV2l0aChQTEFURk9STSkgfHwgZGlyZWN0b3J5LnN0YXJ0c1dpdGgoRklMRSkpIHsKKwkJCXRyeSB7CisJCQkJVVJMIGluVVJMID0gbmV3IFVSTChkaXJlY3RvcnkpOworCQkJCWZVUkwgPSBGaWxlTG9jYXRvci50b0ZpbGVVUkwoaW5VUkwpOworCQkJfSBjYXRjaChFeGNlcHRpb24gbXVlKSB7CisJCQkJbXVlLnByaW50U3RhY2tUcmFjZSgpOworCQkJfQorCQkJZGlyID0gbmV3IEZpbGUoZlVSTC5nZXRGaWxlKCkpOworCQl9IGVsc2UgZGlyID0gbmV3IEZpbGUoZGlyZWN0b3J5KTsKKwkJCisJCWlmKGRpci5leGlzdHMoKSYmZGlyLmlzRGlyZWN0b3J5KCkpIHsKKwkJCWZpbGVzID0gZGlyLmxpc3RGaWxlcygpOworCQl9IGVsc2UgdGhyb3cgbmV3IFNjZW5hcmlvSW5pdGlhbGl6YXRpb25FeGNlcHRpb24oTk9fRklMRV9NU0crZGlyKTsKKworCQlmb3IgKGludCBpID0gMDsgaSA8IGZpbGVzLmxlbmd0aDsgaSArKykgIHsKKwkJCUZpbGUgZiA9IGZpbGVzW2ldOworCQkJaWYgKHRoaXMuaXNEYXRhRmlsZShmKSkgZGF0YUZpbGVzLmFkZChmKTsKKwkJCWlmICh0aGlzLmlzUnVuUGFyYW1ldGVyRmlsZShmKSkgcmVhZFJ1blBhcmFtZXRlcnMoZik7CisJCX0KKwkJaWYoZGF0YUZpbGVzLnNpemUoKSA9PSAwKSB0aHJvdyBuZXcgU2NlbmFyaW9Jbml0aWFsaXphdGlvbkV4Y2VwdGlvbihOT19ESVJfTVNHK2RpcmVjdG9yeSk7CisKKwkJcmV0dXJuIGRhdGFGaWxlczsKKwl9Ly8gZ2V0RGF0YUZpbGVzCisKKwkvKioKKwkgKiAKKwkgKiBAcGFyYW0gZGlyZWN0b3J5CisJICogQHJldHVybiB0cnVlIGlzIGEgZGF0YSBkaXJlY3RvcnkgZXhpc3RzCisJICovCisJcHVibGljIHN0YXRpYyBib29sZWFuIHZhbGlkYXRlKFN0cmluZyBkaXJlY3RvcnkpIHsKKwkJRmlsZSBmaWxlID0gbmV3IEZpbGUoZGlyZWN0b3J5KTsKKwkJcmV0dXJuIGZpbGUuZXhpc3RzKCk7CisJfQorCisJLyoqCisJICogdGVzdCBmaWxlIG5hbWUgdG8gc2VlIGlmIGl0IGlzIGEgZGF0YSBmaWxlLiBNdXN0IGhhdmUgZXh0ZW5zaW9uIC50eHQgb3IgLmNzdgorCSAqIG11c3Qgbm90IGJlIHRoZSBydW5wYXJhbWV0ZXJzIHN1bW1hcnkgZmlsZS4KKwkgKiBAcGFyYW0gZmlsZQorCSAqIEByZXR1cm4gdHJ1ZSBpZiBkYXRhIGZpbGUKKwkgKi8KKwlwcml2YXRlIGJvb2xlYW4gaXNEYXRhRmlsZShGaWxlIGZpbGUpIHsKKwkJYm9vbGVhbiByZXRWYWwgPSB0cnVlOworCQlTdHJpbmcgbmFtZSA9IGZpbGUuZ2V0TmFtZSgpOworCQlpZihuYW1lLmluZGV4T2YoUlVOX1BBUkFNRVRFUl9GSUxFX05BTUUpPj0gMCB8fCBuYW1lLmluZGV4T2YoUlVOX1BBUkFNRVRFUl9GSUxFX05BTUVfT0xEKSA+PSAwKSByZXRWYWwgPSBmYWxzZTsKKwkJaWYobmFtZS5pbmRleE9mKENTVl9FWFRFTlNJT04pIDwgMCkgcmV0VmFsID0gZmFsc2U7CisJCXJldHVybiByZXRWYWw7CisJfQorCS8qKgorCSAqIHRlc3QgZmlsZSBuYW1lIHRvIHNlZSBpZiBpdCBpcyB0aGUgUnVuUGFyYW10ZXJzRmlsZQorCSAqIEBwYXJhbSBmaWxlCisJICogQHJldHVybiB0cnVlIGlmIGRhdGEgZmlsZQorCSAqLworCXByaXZhdGUgYm9vbGVhbiBpc1J1blBhcmFtZXRlckZpbGUoRmlsZSBmaWxlKSB7CisJCWJvb2xlYW4gcmV0VmFsID0gZmFsc2U7CisJCVN0cmluZyBuYW1lID0gZmlsZS5nZXROYW1lKCk7CisJCWlmKG5hbWUuaW5kZXhPZihSVU5fUEFSQU1FVEVSX0ZJTEVfTkFNRSk+PSAwIHx8IG5hbWUuaW5kZXhPZihSVU5fUEFSQU1FVEVSX0ZJTEVfTkFNRV9PTEQpPj0gMCkgcmV0VmFsID0gdHJ1ZTsKKwkJcmV0dXJuIHJldFZhbDsKKwl9CisKKwkvKioKKwkgKiByZWFkIHRoZSBydW4gcGFyYW1ldGVycyBmaWxlIGNyZWF0ZWQgd2hlbiBydW5uaW5nIGFuIEV4cGVyaW1lbnQKKwkgKiBAcGFyYW0gZmlsZQorCSAqLworCXByaXZhdGUgdm9pZCByZWFkUnVuUGFyYW1ldGVycyhGaWxlIGZpbGUpIHsKKwkJQnVmZmVyZWRSZWFkZXIgcmVhZGVyID0gbnVsbDsKKwkJdHJ5IHsKKwkJCXJlYWRlciA9IG5ldyBCdWZmZXJlZFJlYWRlcihuZXcgRmlsZVJlYWRlcihmaWxlKSk7CisKKwkJCWlmIChyZWFkZXIgIT0gbnVsbCkgeworCQkJCVN0cmluZyBidWZmZXIgPSBudWxsOworCQkJCVN0cmluZ1Rva2VuaXplciBoZWFkZXJzID0gbnVsbDsKKwkJCQlTdHJpbmdUb2tlbml6ZXIgdmFscyA9IG51bGw7CisJCQkJaW50IGxpbmUgPSAwOworCQkJCXdoaWxlIChFT0YoYnVmZmVyID0gcmVhZGVyLnJlYWRMaW5lKCkpICE9IHRydWUpIHsKKwkJCQkJaWYobGluZSA9PSAwKSBoZWFkZXJzID0gbmV3IFN0cmluZ1Rva2VuaXplcihidWZmZXIsICIsIik7Ly8kTk9OLU5MUy0xJAorCQkJCQllbHNlIHZhbHMgPSBuZXcgU3RyaW5nVG9rZW5pemVyKGJ1ZmZlciwgIiwiKTsvLyROT04tTkxTLTEkCisJCQkJCSsrbGluZTsKKwkJCQl9CisJCQkJd2hpbGUoaGVhZGVycy5oYXNNb3JlVG9rZW5zKCkpIHsKKwkJCQkJU3RyaW5nIHZhbCA9IG51bGw7CisJCQkJCXRyeSB7CisJCQkJCQl2YWwgPSB2YWxzLm5leHRUb2tlbigpOworCQkJCQl9IGNhdGNoKE5vU3VjaEVsZW1lbnRFeGNlcHRpb24gZSkgeworCQkJCQkJQWN0aXZhdG9yLmxvZ0Vycm9yKEZPUk1BVF9FUlJfTVNHLCBlKTsKKwkJCQkJCXJldHVybjsKKwkJCQkJfQorCisJCQkJCXJ1blBhcmFtZXRlcnMucHV0KGhlYWRlcnMubmV4dFRva2VuKCksIHZhbCk7CisJCQkJfQorCQkJfQorCQl9IGNhdGNoIChGaWxlTm90Rm91bmRFeGNlcHRpb24gZm5mZSkgeworCQkJQWN0aXZhdG9yCisJCQkubG9nRXJyb3IoTk9fRklMRV9NU0csZm5mZSk7CisJCX0gY2F0Y2ggKElPRXhjZXB0aW9uIGlvZSkgeworCQkJQWN0aXZhdG9yLmxvZ0Vycm9yKElPX0VYQ0VQVElPTl9FUlJPUl9NU0csIGlvZSk7CisJCX0gZmluYWxseSB7CisJCQl0cnkgeworCQkJCXJlYWRlci5jbG9zZSgpOworCQkJfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKKwkJCX0KKwkJfQorCX0vLyByZWFkUnVuUGFyYW1ldGVycworCQorCQorCS8qKgorCSAqIGZyb20gdGhlIGRpc2NvdmVyZWQga2V5cyByZXR1cm4gdGhlIGRpc2Vhc2UgdHlwZQorCSAqIEByZXR1cm4KKwkgKi8KKwlwdWJsaWMgc3RhdGljIERpc2Vhc2VUeXBlIGdldERpc2Vhc2VUeXBlKCkgeworCQlEaXNlYXNlVHlwZSB0eXBlOworCQlpZiggKFNfS0VZX1NFVC5zaXplKCk+PTEpJiYoRV9LRVlfU0VULnNpemUoKT49MSkmJihJX0tFWV9TRVQuc2l6ZSgpPj0xKSYmKFJfS0VZX1NFVC5zaXplKCk+PTEpICkKKwkJCXR5cGUgPSBEaXNlYXNlVHlwZS5TRUlSOworCQllbHNlICBpZiggKFNfS0VZX1NFVC5zaXplKCk+PTEpJiYoSV9LRVlfU0VULnNpemUoKT49MSkmJihSX0tFWV9TRVQuc2l6ZSgpPj0xKSApCisJCQl0eXBlID0gRGlzZWFzZVR5cGUuU0lSOworCQllbHNlICBpZiggKFNfS0VZX1NFVC5zaXplKCk+PTEpJiYoSV9LRVlfU0VULnNpemUoKT49MSkgKQorCQkJdHlwZSA9IERpc2Vhc2VUeXBlLlNJOworCQkKKwkJZWxzZSB0eXBlID0gRGlzZWFzZVR5cGUuT1RIRVI7CisJCXJldHVybiB0eXBlOworCX0KKwkKKwkvKioKKwkgKiAKKwkgKiBAcGFyYW0gc3RhdGUKKwkgKi8KKwlwdWJsaWMgc3RhdGljIHZvaWQgcmVnaXN0ZXJLZXkoU3RyaW5nIHN0YXRlKSB7CisKKwkJaWYoc3RhdGUuaW5kZXhPZihJTkNJREVOQ0VfVFlQRSk+PTApeworCQkJSU5DSURFTkNFX0tFWV9TRVQuYWRkKHN0YXRlKTsKKwkJCXJldHVybjsKKwkJfQorCQkvLyBkaXNjb3ZlcmVkIGEgc3RhdGUKKwkJaWYoc3RhdGUuc3Vic3RyaW5nKDAsMSkuZXF1YWxzKFNfVFlQRSkpIFNfS0VZX1NFVC5hZGQoc3RhdGUpOworCQlpZihzdGF0ZS5zdWJzdHJpbmcoMCwxKS5lcXVhbHMoRV9UWVBFKSkgRV9LRVlfU0VULmFkZChzdGF0ZSk7CisJCWlmKHN0YXRlLnN1YnN0cmluZygwLDEpLmVxdWFscyhJX1RZUEUpKSBJX0tFWV9TRVQuYWRkKHN0YXRlKTsKKwkJaWYoc3RhdGUuc3Vic3RyaW5nKDAsMSkuZXF1YWxzKFJfVFlQRSkpIFJfS0VZX1NFVC5hZGQoc3RhdGUpOworCX0KKworCS8qKgorCSAqIEEgc2luZ2xlIFJlZmVyZW5jZSBTY2VuYXJpbyBpcyBzdG9yZWQgaW4gYSBtYXAKKwkgKiBmb3IgZWFjaCAga2V5PFN0cmluZz4gPSBSZWdpb24gaWQKKwkgKiB0aGUgTWFwIGNvbnRhaW5zIGEgTWFwIG9mIGRhdGEgcGVyIHJlZ2lvbi4KKwkgKiBUaGUgcmVnaW9uIGRhdGEgbWFwIGlzIGtleWVkIGJ5IHByb3BlcnR5IChTLEUsIEksIFIsIGV0YykgYW5kIGNvbnRhaW5zIERhdGEgKG1vc3RseSBEb3VibGVzIGJ1dAorCSAqIFNURU1UaW1lIGlzIHN0b3JlZCBhcyBhIFN0cmluZykgc28gYWxsIGRhdGEgaXMgc3RvcmVkIGFzIFN0cmluZy4KKwkgKiBAcGFyYW0gZmlsdGVyU2V0IAorCSAqIEBwYXJhbSByZXNvbHV0aW9uIFdoaWNoIG1hcCByZXNvbHV0aW9uIHRvIGxvYWQsIC0xIGlmIGFsbAorCSAqIEByZXR1cm4gdGhlIFJlZmVyZW5jZVNjZW5hcmlvRGF0YU1hcCBvYmplY3QKKwkgKiBAdGhyb3dzIFNjZW5hcmlvSW5pdGlhbGl6YXRpb25FeGNlcHRpb24gCisJICovCisKKwlwdWJsaWMgUmVmZXJlbmNlU2NlbmFyaW9EYXRhTWFwSW1wbCBwYXJzZUFsbEZpbGVzKFNldDxTdHJpbmc+IGZpbHRlclNldCwgaW50IHJlc29sdXRpb24pIHRocm93cyBTY2VuYXJpb0luaXRpYWxpemF0aW9uRXhjZXB0aW9uIHsKKwkJUmVmZXJlbmNlU2NlbmFyaW9EYXRhTWFwSW1wbCBzY2VuYXJpb0RhdGFNYXAgPSAoUmVmZXJlbmNlU2NlbmFyaW9EYXRhTWFwSW1wbClhRmFjdG9yeS5jcmVhdGVSZWZlcmVuY2VTY2VuYXJpb0RhdGFNYXAoKTsKKwkJZm9yKGludCBpID0gMDsgaSA8IGRpc2Vhc2VEYXRhLnNpemUoKTsgaSArKykgeworCQkJRmlsZSBmID0gZGlzZWFzZURhdGEuZ2V0KGkpOworCQkJU3RyaW5nIG5hbWUgPSBmLmdldE5hbWUoKTsKKwkJCWlmKGYuZ2V0TmFtZSgpLnN0YXJ0c1dpdGgoIi4iKSkgY29udGludWU7Ly8kTk9OLU5MUy0xJAorCQkJaW50IF9pZHggPSBuYW1lLmxhc3RJbmRleE9mKCdfJyk7CisJCQlpbnQgZG90aWR4ID0gbmFtZS5sYXN0SW5kZXhPZignLicpOworCQkJaWYoX2lkeCA8MCB8fCBkb3RpZHggPCAwIHx8IGRvdGlkeCA8IF9pZHgpIGNvbnRpbnVlOyAvLyBub3QgYSBkYXRhIGZpbGUKKwkJCVN0cmluZyBzdGF0ZSA9IG5hbWUuc3Vic3RyaW5nKDAsIF9pZHgpOworCisJCQkvLyBkaXNjb3ZlcmVkIGEgc3RhdGUKKwkJCXJlZ2lzdGVyS2V5KHN0YXRlKTsKKwkJCQorCQkJaW50IHJlcyA9IEludGVnZXIucGFyc2VJbnQobmFtZS5zdWJzdHJpbmcoX2lkeCsxLCBkb3RpZHgpKTsKKwkJCWlmKHJlc29sdXRpb24gIT0gLTEgJiYgcmVzICE9IHJlc29sdXRpb24pIGNvbnRpbnVlOyAvLyB3cm9uZyByZXNvbHV0aW9uCisJCQlwcm9jZXNzQW5kRmlsdGVyRmlsZXMoZmlsdGVyU2V0LCBzY2VuYXJpb0RhdGFNYXAsIHN0YXRlLCBmKTsKKwkJfQorCQlzY2VuYXJpb0RhdGFNYXAuc2V0UmVmZXJlbmNlRGlyZWN0b3J5KGRpcmVjdG9yeSk7CisKKwkJRGlzZWFzZVR5cGUgdHlwZSA9IGdldERpc2Vhc2VUeXBlKCk7CisJCQkKKwkJc2NlbmFyaW9EYXRhTWFwLnNldFR5cGUodHlwZSxTX0tFWV9TRVQsRV9LRVlfU0VULElfS0VZX1NFVCxSX0tFWV9TRVQsSU5DSURFTkNFX0tFWV9TRVQpOworCQkKKwkJcmV0dXJuIHNjZW5hcmlvRGF0YU1hcDsKKwl9CisKKwkvKioKKwkgKiBBIHNpbmdsZSBSZWZlcmVuY2UgU2NlbmFyaW8gaXMgc3RvcmVkIGluIGEgbWFwCisJICogZm9yIGVhY2ggIGtleTxTdHJpbmc+ID0gUmVnaW9uIGlkCisJICogdGhlIE1hcCBjb250YWlucyBhIE1hcCBvZiBkYXRhIHBlciByZWdpb24uCisJICogVGhlIHJlZ2lvbiBkYXRhIG1hcCBpcyBrZXllZCBieSBwcm9wZXJ0eSAoUyxFLCBJLCBSLCBldGMpIGFuZCBjb250YWlucyBEYXRhIChtb3N0bHkgRG91YmxlcyBidXQKKwkgKiBTVEVNVGltZSBpcyBzdG9yZWQgYXMgYSBTdHJpbmcpIHNvIGFsbCBkYXRhIGlzIHN0b3JlZCBhcyBTdHJpbmcuCisJICogCisJICogQHBhcmFtIHJlc29sdXRpb24gV2hpY2ggbWFwIHJlc29sdXRpb24gdG8gbG9hZCwgLTEgaWYgYWxsCisJICogQHJldHVybiB0aGUgUmVmZXJlbmNlU2NlbmFyaW9EYXRhTWFwIG9iamVjdAorCSAqIEB0aHJvd3MgU2NlbmFyaW9Jbml0aWFsaXphdGlvbkV4Y2VwdGlvbiAKKwkgKi8KKworCXB1YmxpYyBSZWZlcmVuY2VTY2VuYXJpb0RhdGFNYXBJbXBsIHBhcnNlQWxsRmlsZXMoaW50IHJlc29sdXRpb24pIHRocm93cyBTY2VuYXJpb0luaXRpYWxpemF0aW9uRXhjZXB0aW9uIHsKKwkJUmVmZXJlbmNlU2NlbmFyaW9EYXRhTWFwSW1wbCBzY2VuYXJpb0RhdGFNYXAgPSAoUmVmZXJlbmNlU2NlbmFyaW9EYXRhTWFwSW1wbClhRmFjdG9yeS5jcmVhdGVSZWZlcmVuY2VTY2VuYXJpb0RhdGFNYXAoKTsKKwkJQXJyYXlMaXN0PFN0cmluZz5zdGF0ZXMgPSBuZXcgQXJyYXlMaXN0PFN0cmluZz4oKTsgLy8ga2VlcHMgdHJhY2sgb2YgdGhlIHN0YXRlcyBzZWVuIAorCQlmb3IoaW50IGkgPSAwOyBpIDwgZGlzZWFzZURhdGEuc2l6ZSgpOyBpICsrKSB7CisJCQlGaWxlIGYgPSBkaXNlYXNlRGF0YS5nZXQoaSk7CisJCQlTdHJpbmcgbmFtZSA9IGYuZ2V0TmFtZSgpOworCisJCQlpZihuYW1lLnN0YXJ0c1dpdGgoIi4iKSkgY29udGludWU7IC8vJE5PTi1OTFMtMSQgLy9za2lwIHN5c3RlbSBmaWxlcworCQkJaW50IF9pZHggPSBuYW1lLmxhc3RJbmRleE9mKCdfJyk7CisJCQlpbnQgZG90aWR4ID0gbmFtZS5sYXN0SW5kZXhPZignLicpOworCQkJaWYoX2lkeCA8MCB8fCBkb3RpZHggPCAwIHx8IGRvdGlkeCA8IF9pZHgpIGNvbnRpbnVlOyAvLyBub3QgYSBkYXRhIGZpbGUKKwkJCVN0cmluZyBzdGF0ZSA9IG5hbWUuc3Vic3RyaW5nKDAsIF9pZHgpOworCQkJaWYoIXN0YXRlcy5jb250YWlucyhzdGF0ZSkpIHN0YXRlcy5hZGQoc3RhdGUpOworCQkJCisJCQkvLyBkaXNjb3ZlcmVkIGEgc3RhdGUKKwkJCXJlZ2lzdGVyS2V5KHN0YXRlKTsKKwkJCQorCQkJaW50IHJlcyA9IEludGVnZXIucGFyc2VJbnQobmFtZS5zdWJzdHJpbmcoX2lkeCsxLCBkb3RpZHgpKTsKKwkJCWlmKHJlc29sdXRpb24gIT0gLTEgJiYgcmVzICE9IHJlc29sdXRpb24pIGNvbnRpbnVlOyAvLyB3cm9uZyByZXNvbHV0aW9uCisJCQlwcm9jZXNzRmlsZShzY2VuYXJpb0RhdGFNYXAsIHN0YXRlLCBmKTsKKwkJfQorCQlzY2VuYXJpb0RhdGFNYXAuc2V0UmVmZXJlbmNlRGlyZWN0b3J5KGRpcmVjdG9yeSk7CisKKwkJRGlzZWFzZVR5cGUgdHlwZSA9IGdldERpc2Vhc2VUeXBlKCk7CisJCQorCQlzY2VuYXJpb0RhdGFNYXAuc2V0VHlwZSh0eXBlLFNfS0VZX1NFVCxFX0tFWV9TRVQsSV9LRVlfU0VULFJfS0VZX1NFVCxJTkNJREVOQ0VfS0VZX1NFVCk7CisJCQorCQlyZXR1cm4gc2NlbmFyaW9EYXRhTWFwOworCX0KKworCS8qKgorCSAqIFJlYWQgc2NlbmFyaW8gZm9yIGFsbCByZXNvbHV0aW9ucyBhdmFpbGFibGUKKwkgKiAKKwkgKiBAcmV0dXJuIFJlZmVyZW5jZVNjZW5hcmlvRGF0YU1hcCBNYXAgd2l0aCBhbGwgbm9kZXMgbG9hZGVkCisJICogQHRocm93cyBTY2VuYXJpb0luaXRpYWxpemF0aW9uRXhjZXB0aW9uCisJICovCisKKwlwdWJsaWMgUmVmZXJlbmNlU2NlbmFyaW9EYXRhTWFwSW1wbCBwYXJzZUFsbEZpbGVzKCkgdGhyb3dzIFNjZW5hcmlvSW5pdGlhbGl6YXRpb25FeGNlcHRpb24geworCQlyZXR1cm4gdGhpcy5wYXJzZUFsbEZpbGVzKG51bGwsIC0xKTsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm4gdGhlIHR5cGUgb2YgdGhlIGxvZ2dlZCBkYXRhLgorCSAqIAorCSAqIEByZXR1cm4gUGFyYW1ldGVyRXN0aW1hdG9yLlR5cGUgVGhlIHR5cGUgb2YgdGhlIGRhdGEKKwkgKiBAdGhyb3dzIFNjZW5hcmlvSW5pdGlhbGl6YXRpb25FeGNlcHRpb24gSWYgdGhlIHR5cGUgaXMgbm90IHJlY29nbml6ZWQKKwkgKi8KKworCXB1YmxpYyBEaXNlYXNlVHlwZSBnZXRUeXBlKCkgdGhyb3dzIFNjZW5hcmlvSW5pdGlhbGl6YXRpb25FeGNlcHRpb24geworCQlBcnJheUxpc3Q8U3RyaW5nPnN0YXRlcyA9IG5ldyBBcnJheUxpc3Q8U3RyaW5nPigpOyAvLyBrZWVwcyB0cmFjayBvZiB0aGUgc3RhdGVzIHNlZW4gCisJCWZvcihpbnQgaSA9IDA7IGkgPCBkaXNlYXNlRGF0YS5zaXplKCk7IGkgKyspIHsKKwkJCUZpbGUgZiA9IGRpc2Vhc2VEYXRhLmdldChpKTsKKwkJCVN0cmluZyBuYW1lID0gZi5nZXROYW1lKCk7CisJCQlpbnQgX2lkeCA9IG5hbWUubGFzdEluZGV4T2YoJ18nKTsKKwkJCWludCBkb3RpZHggPSBuYW1lLmxhc3RJbmRleE9mKCcuJyk7CisJCQlpZihfaWR4IDwwIHx8IGRvdGlkeCA8IDAgfHwgZG90aWR4IDwgX2lkeCkgY29udGludWU7IC8vIG5vdCBhIGRhdGEgZmlsZQorCQkJU3RyaW5nIHN0YXRlID0gbmFtZS5zdWJzdHJpbmcoMCwgX2lkeCk7CisJCQlpZighc3RhdGVzLmNvbnRhaW5zKHN0YXRlKSkgc3RhdGVzLmFkZChzdGF0ZSk7CisKKwkJCS8vIGRpc2NvdmVyZWQgYSBzdGF0ZQorCQkJcmVnaXN0ZXJLZXkoc3RhdGUpOworCQkJCisJCX0KKworCQlEaXNlYXNlVHlwZSB0eXBlID0gZ2V0RGlzZWFzZVR5cGUoKTsKKworCQlyZXR1cm4gdHlwZTsKKwl9CisKKwkvKioKKwkgKiBSZXRyaWV2ZSByZXNvbHV0aW9ucyBhdmFpbGFibGUgaW4gdGhlIGRpc2Vhc2UgZm9sZGVyCisJICogCisJICogQHJldHVybiBBcnJheUxpc3Q8SW50ZWdlcj4gQXZhaWxhYmxlIHJlc29sdXRpb25zCisJICovCisKKwlAU3VwcHJlc3NXYXJuaW5ncygiYm94aW5nIikKKwlwdWJsaWMgQXJyYXlMaXN0PEludGVnZXI+IGdldFJlc29sdXRpb25zKCkgeworCQlBcnJheUxpc3Q8SW50ZWdlcj4gcmVzdWx0ID0gbmV3IEFycmF5TGlzdDxJbnRlZ2VyPigpOworCisJCWZvcihpbnQgaSA9IDA7IGkgPCBkaXNlYXNlRGF0YS5zaXplKCk7IGkgKyspIHsKKwkJCUZpbGUgZiA9IGRpc2Vhc2VEYXRhLmdldChpKTsKKwkJCVN0cmluZyBuYW1lID0gZi5nZXROYW1lKCk7CisJCQlpbnQgX2lkeCA9IG5hbWUubGFzdEluZGV4T2YoJ18nKTsKKwkJCWludCBkb3RpZHggPSBuYW1lLmxhc3RJbmRleE9mKCcuJyk7CisJCQlpZihfaWR4IDwwIHx8IGRvdGlkeCA8IDAgfHwgZG90aWR4IDwgX2lkeCkgY29udGludWU7IC8vIG5vdCBhIGRhdGEgZmlsZQorCQkJaW50IHJlcyA9IEludGVnZXIucGFyc2VJbnQobmFtZS5zdWJzdHJpbmcoX2lkeCsxLCBkb3RpZHgpKTsKKwkJCWlmKCFyZXN1bHQuY29udGFpbnMocmVzKSkgcmVzdWx0LmFkZChyZXMpOworCisJCX0KKwkJcmV0dXJuIHJlc3VsdDsKKwl9CisKKwkvKioKKwkgKiBSZXRyaWV2ZSByZXNvbHV0aW9ucyBhdmFpbGFibGUgaW4gdGhlIGRpc2Vhc2UgZm9sZGVyCisJICogCisJICogQHJldHVybiBBcnJheUxpc3Q8SW50ZWdlcj4gQXZhaWxhYmxlIHJlc29sdXRpb25zCisJICovCisKKwlwdWJsaWMgaW50IGdldE1heFJlc29sdXRpb24oKSB7CisJCWludCByZXN1bHQgPSAtMTsKKworCQlmb3IoaW50IGkgPSAwOyBpIDwgZGlzZWFzZURhdGEuc2l6ZSgpOyBpICsrKSB7CisJCQlGaWxlIGYgPSBkaXNlYXNlRGF0YS5nZXQoaSk7CisJCQlTdHJpbmcgbmFtZSA9IGYuZ2V0TmFtZSgpOworCQkJaW50IF9pZHggPSBuYW1lLmxhc3RJbmRleE9mKCdfJyk7CisJCQlpbnQgZG90aWR4ID0gbmFtZS5sYXN0SW5kZXhPZignLicpOworCQkJaWYoX2lkeCA8MCB8fCBkb3RpZHggPCAwIHx8IGRvdGlkeCA8IF9pZHgpIGNvbnRpbnVlOyAvLyBub3QgYSBkYXRhIGZpbGUKKwkJCWludCByZXMgPSBJbnRlZ2VyLnBhcnNlSW50KG5hbWUuc3Vic3RyaW5nKF9pZHgrMSwgZG90aWR4KSk7CisJCQlpZihyZXN1bHQgPCByZXMpIHJlc3VsdCA9IHJlczsKKworCQl9CisJCXJldHVybiByZXN1bHQ7CisJfQorCisJLyoqCisJICogcHJvY2VzcyB0aGUgaW5wdXQgZmlsZQorCSAqIAorCSAqIEBwYXJhbSBkYXRhTWFwIE1hcCB0byBzdG9yZSBmaWxlIGluc2lkZQorCSAqIEBwYXJhbSBzdGF0ZSBUaGUgc3RhdGUKKwkgKiBAcGFyYW0gZmlsZQorCSAqIAorCSAqIEB0aHJvd3MgU2NlbmFyaW9Jbml0aWFsaXphdGlvbkV4Y2VwdGlvbiAKKwkgKi8KKworCXB1YmxpYyB2b2lkIHByb2Nlc3NGaWxlKFJlZmVyZW5jZVNjZW5hcmlvRGF0YU1hcEltcGwgZGF0YU1hcCwgU3RyaW5nIHN0YXRlLCBGaWxlIGZpbGUpIHRocm93cyBTY2VuYXJpb0luaXRpYWxpemF0aW9uRXhjZXB0aW9uIHsKKwkJQnVmZmVyZWRSZWFkZXIgcmVhZGVyID0gbnVsbDsKKwkJdHJ5IHsKKwkJCVN0cmluZyByZWNvcmQ7ICAKKwkJCVN0cmluZyBoZWFkZXI7CisJCQlpbnQgcmVjQ291bnQgPSAwOworCQkJTGlzdDxTdHJpbmc+IGhlYWRlckVsZW1lbnRzID0gbmV3IEFycmF5TGlzdDxTdHJpbmc+KCk7CisJCQlyZWFkZXIgPSBuZXcgQnVmZmVyZWRSZWFkZXIobmV3IEZpbGVSZWFkZXIoZmlsZSkpOworCisJCQkvLworCQkJLy8gUmVhZCB0aGUgZmlsZSBoZWFkZXIgKGl0ZXIsIHRpbWUsIGxvY2F0aW9ucy4uLikKKwkJCS8vCisJCQlpZiAoIChoZWFkZXI9cmVhZGVyLnJlYWRMaW5lKCkpICE9IG51bGwgKSB7IAorCisJCQkJU3RyaW5nVG9rZW5pemVyIHN0ID0gbmV3IFN0cmluZ1Rva2VuaXplcihoZWFkZXIsICIsIik7Ly8kTk9OLU5MUy0xJAorCisJCQkJd2hpbGUgKHN0Lmhhc01vcmVUb2tlbnMoKSkgeworCQkJCQlTdHJpbmcgdmFsID0gc3QubmV4dFRva2VuKCkudHJpbSgpOworCQkJCQloZWFkZXJFbGVtZW50cy5hZGQodmFsKTsKKwkJCQl9CisJCQl9IC8vIHJlYWQgdGhlIGhlYWRlcgorCQkJLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKKwkJCS8vIHNldCB1cCB0aGUgZW1wdHkgbGlzdHMKKwkJCWludCBudW1Db2x1bW5zID0gaGVhZGVyRWxlbWVudHMuc2l6ZSgpOworCQkJZm9yIChpbnQgaSA9IDA7IGkgPCBudW1Db2x1bW5zOyBpICsrKSB7CisJCQkJU3RyaW5nIGtleSA9IGhlYWRlckVsZW1lbnRzLmdldChpKTsKKwkJCQlpZihrZXkuZXF1YWxzKFJlZmVyZW5jZVNjZW5hcmlvRGF0YU1hcEltcGwuSVRFUkFUSU9OX0tFWSkgfHwKKwkJCQkJCWtleS5lcXVhbHMoUmVmZXJlbmNlU2NlbmFyaW9EYXRhTWFwSW1wbC5USU1FX0tFWSkpCisJCQkJCWNvbnRpbnVlOworCQkJCU1hcDxTdHJpbmcsIExpc3Q8U3RyaW5nPj4gZGF0YTsKKwkJCQlSZWZlcmVuY2VTY2VuYXJpb0RhdGFJbnN0YW5jZSByZXN1bHQgPSBudWxsOworCQkJCWlmKCFkYXRhTWFwLmNvbnRhaW5zTG9jYXRpb24oa2V5KSkgeworCQkJCQlkYXRhID0gbmV3IEhhc2hNYXA8U3RyaW5nLCBMaXN0PFN0cmluZz4+KCk7CisJCQkJCXJlc3VsdCA9IGRhdGFNYXAubmV3IFJlZmVyZW5jZVNjZW5hcmlvRGF0YUluc3RhbmNlKGRhdGEsIGRhdGFNYXApOworCQkJCQlkYXRhTWFwLmFkZEluc3RhbmNlKGtleSwgcmVzdWx0KTsgLy8gQWRkIG5ldyBsb2NhdGlvbiB0byAKKwkJCQl9IGVsc2UgeworCQkJCQlyZXN1bHQgPSBkYXRhTWFwLmdldExvY2F0aW9uKGtleSk7CisJCQkJCWRhdGEgPSByZXN1bHQuZ2V0SW5zdGFuY2UoKTsKKwkJCQl9CisJCQkJZGF0YS5wdXQoc3RhdGUsIG5ldyBBcnJheUxpc3Q8U3RyaW5nPigpKTsgLy8gQWRkIHRoZSBuZXcgc3RhdGUKKwkJCX0KKworCQkJLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworCQkJLy8gUmVhZCB0aGUgZGF0YQorCQkJLy8KKwkJCXdoaWxlICggKHJlY29yZD1yZWFkZXIucmVhZExpbmUoKSkgIT0gbnVsbCApIHsgCisJCQkJcmVjQ291bnQrKzsgCisKKwkJCQlTdHJpbmdUb2tlbml6ZXIgc3QgPSBuZXcgU3RyaW5nVG9rZW5pemVyKHJlY29yZCwiLCIpOy8vJE5PTi1OTFMtMSQKKwkJCQlpbnQgdGNvdW50ID0gMDsKKwkJCQl3aGlsZSAoc3QuaGFzTW9yZVRva2VucygpICYmIHRjb3VudCA8IGhlYWRlckVsZW1lbnRzLnNpemUoKSApIHsvLyBqdXN0IHRvIG1ha2Ugc3VyZQorCQkJCQlTdHJpbmcgdmFsID0gc3QubmV4dFRva2VuKCk7CisJCQkJCVN0cmluZyBrZXkgPSBoZWFkZXJFbGVtZW50cy5nZXQodGNvdW50KTsKKwkJCQkJaWYoa2V5LmVxdWFscyhSZWZlcmVuY2VTY2VuYXJpb0RhdGFNYXBJbXBsLklURVJBVElPTl9LRVkpIHx8CisJCQkJCQkJa2V5LmVxdWFscyhSZWZlcmVuY2VTY2VuYXJpb0RhdGFNYXBJbXBsLlRJTUVfS0VZKSkKKwkJCQkJeysrdGNvdW50O2NvbnRpbnVlO30KKwkJCQkJUmVmZXJlbmNlU2NlbmFyaW9EYXRhSW5zdGFuY2UgcmVzdWx0ID0gZGF0YU1hcC5nZXRMb2NhdGlvbihrZXkpOworCQkJCQlNYXA8U3RyaW5nLCBMaXN0PFN0cmluZz4+ZGF0YSA9IHJlc3VsdC5nZXRJbnN0YW5jZSgpOworCQkJCQlkYXRhLmdldChzdGF0ZSkuYWRkKHZhbC50cmltKCkpOworCQkJCQl0Y291bnQgKys7CisJCQkJfQorCQkJfSAvLyB3aGlsZSBmaWxlIGhhcyBkYXRhCisJCX0gY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsgCisJCQkvLyBjYXRjaCBpbyBlcnJvcnMgZnJvbSBGaWxlSW5wdXRTdHJlYW0gb3IgcmVhZExpbmUoKQorCQkJQWN0aXZhdG9yLmxvZ0Vycm9yKElPX0VYQ0VQVElPTl9FUlJPUl9NU0csIGUpOworCQkJdGhyb3cgbmV3IFNjZW5hcmlvSW5pdGlhbGl6YXRpb25FeGNlcHRpb24oZSk7CisJCX0gZmluYWxseSB7CisJCQl0cnkgeworCQkJCXJlYWRlci5jbG9zZSgpOworCQkJfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKKwkJCX0KKwkJfQorCX0KKworCS8qKgorCSAqIHByb2Nlc3MgdGhlIGlucHV0IGZpbGUKKwkgKiBAcGFyYW0gcmVzb2x1dGlvbiAKKwkgKiAKKwkgKiBAcmV0dXJuIHNldCBvZiBsb2NhdGlvbnMgaW4gYSBmaWxlCisJICogCisJICogQHRocm93cyBTY2VuYXJpb0luaXRpYWxpemF0aW9uRXhjZXB0aW9uIAorCSAqLworCXB1YmxpYyBTZXQ8U3RyaW5nPiBnZXRMb2NhdGlvbnMoaW50IHJlc29sdXRpb24pIHRocm93cyBTY2VuYXJpb0luaXRpYWxpemF0aW9uRXhjZXB0aW9uIHsKKwkJU2V0PFN0cmluZz4gbG9jYXRpb25zID0gbmV3IEhhc2hTZXQ8U3RyaW5nPigpOworCQlBcnJheUxpc3Q8U3RyaW5nPnN0YXRlcyA9IG5ldyBBcnJheUxpc3Q8U3RyaW5nPigpOyAvLyBrZWVwcyB0cmFjayBvZiB0aGUgc3RhdGVzIHNlZW4gCisKKwkJZm9yKGludCBpID0gMDsgaSA8IGRpc2Vhc2VEYXRhLnNpemUoKTsgaSArKykgeworCQkJRmlsZSBmaWxlID0gZGlzZWFzZURhdGEuZ2V0KGkpOworCQkJU3RyaW5nIG5hbWUgPSBmaWxlLmdldE5hbWUoKTsKKwkJCWludCBfaWR4ID0gbmFtZS5sYXN0SW5kZXhPZignXycpOworCQkJaW50IGRvdGlkeCA9IG5hbWUubGFzdEluZGV4T2YoJy4nKTsKKwkJCWlmKF9pZHggPDAgfHwgZG90aWR4IDwgMCB8fCBkb3RpZHggPCBfaWR4KSBjb250aW51ZTsgLy8gbm90IGEgZGF0YSBmaWxlCisJCQlTdHJpbmcgc3RhdGUgPSBuYW1lLnN1YnN0cmluZygwLCBfaWR4KTsKKwkJCWlmKCFzdGF0ZXMuY29udGFpbnMoc3RhdGUpKSBzdGF0ZXMuYWRkKHN0YXRlKTsKKwkJCWludCByZXMgPSBJbnRlZ2VyLnBhcnNlSW50KG5hbWUuc3Vic3RyaW5nKF9pZHgrMSwgZG90aWR4KSk7CisJCQlpZihyZXNvbHV0aW9uICE9IC0xICYmIHJlcyAhPSByZXNvbHV0aW9uKSBjb250aW51ZTsgLy8gd3JvbmcgcmVzb2x1dGlvbgorCQkJCisJCQlCdWZmZXJlZFJlYWRlciByZWFkZXIgPSBudWxsOworCQkJdHJ5IHsgIAorCQkJCVN0cmluZyBoZWFkZXI7CisJCQkJTGlzdDxTdHJpbmc+IGhlYWRlckVsZW1lbnRzID0gbmV3IEFycmF5TGlzdDxTdHJpbmc+KCk7CisJCQkJcmVhZGVyID0gbmV3IEJ1ZmZlcmVkUmVhZGVyKG5ldyBGaWxlUmVhZGVyKGZpbGUpKTsKKwkJCQkvLyBSZWFkIHRoZSBmaWxlIGhlYWRlciAoaXRlciwgdGltZSwgbG9jYXRpb25zLi4uKQorCQkJCS8vCisJCQkJaWYgKCAoaGVhZGVyPSByZWFkZXIucmVhZExpbmUoKSkgIT0gbnVsbCApIHsgCisJCQkJCVN0cmluZ1Rva2VuaXplciBzdCA9IG5ldyBTdHJpbmdUb2tlbml6ZXIoaGVhZGVyLCAiLCIpOy8vJE5PTi1OTFMtMSQKKwkJCQkJd2hpbGUgKHN0Lmhhc01vcmVUb2tlbnMoKSkgeworCQkJCQkJU3RyaW5nIHZhbCA9IHN0Lm5leHRUb2tlbigpLnRyaW0oKTsKKwkJCQkJCWhlYWRlckVsZW1lbnRzLmFkZCh2YWwpOworCQkJCQl9CisJCQkJfSAvLyByZWFkIHRoZSBoZWFkZXIKKwkJCQkvLy8vLy8vLy8vLy8vLy8vLy8vLy8gCisJCQkJLy8gc2V0IHVwIHRoZSBlbXB0eSBsaXN0cworCQkJCWludCBudW1Db2x1bW5zID0gaGVhZGVyRWxlbWVudHMuc2l6ZSgpOworCQkJCWZvciAoaW50IGlpID0gMDsgaWkgPCBudW1Db2x1bW5zOyBpaSArKykgeworCQkJCQlTdHJpbmcga2V5ID0gaGVhZGVyRWxlbWVudHMuZ2V0KGlpKTsKKwkJCQkJaWYoISgoa2V5LmVxdWFscyhSZWZlcmVuY2VTY2VuYXJpb0RhdGFNYXBJbXBsLklURVJBVElPTl9LRVkpIHx8CWtleS5lcXVhbHMoUmVmZXJlbmNlU2NlbmFyaW9EYXRhTWFwSW1wbC5USU1FX0tFWSkpKSkgeworCQkJCQkJbG9jYXRpb25zLmFkZChrZXkpOworCQkJCQl9CisJCQkJfSAvLyB3aGlsZSBmaWxlIGhhcyBkYXRhCisJCQl9IGNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7IAorCQkJCS8vIGNhdGNoIGlvIGVycm9ycyBmcm9tIEZpbGVJbnB1dFN0cmVhbSBvciByZWFkTGluZSgpCisJCQkJQWN0aXZhdG9yLmxvZ0Vycm9yKElPX0VYQ0VQVElPTl9FUlJPUl9NU0csIGUpOworCQkJCXRocm93IG5ldyBTY2VuYXJpb0luaXRpYWxpemF0aW9uRXhjZXB0aW9uKGUpOworCQkJfSBmaW5hbGx5IHsKKwkJCQl0cnkgeworCQkJCQlyZWFkZXIuY2xvc2UoKTsKKwkJCQl9IGNhdGNoIChFeGNlcHRpb24gZSkgeworCQkJCQkKKwkJCQl9CisJCQl9CisJCX0KKworCQlyZXR1cm4gbG9jYXRpb25zOworCX0KKworCisJLyoqCisJICogcHJvY2VzcyB0aGUgaW5wdXQgZmlsZQorCSAqIEBwYXJhbSBsb2NhdGlvbkZpbHRlciAKKwkgKiAKKwkgKiBAcGFyYW0gZGF0YU1hcCBNYXAgdG8gc3RvcmUgZmlsZSBpbnNpZGUKKwkgKiBAcGFyYW0gc3RhdGUgVGhlIHN0YXRlCisJICogQHBhcmFtIGZpbGUKKwkgKiAKKwkgKiBAdGhyb3dzIFNjZW5hcmlvSW5pdGlhbGl6YXRpb25FeGNlcHRpb24gCisJICovCisJcHVibGljIHZvaWQgcHJvY2Vzc0FuZEZpbHRlckZpbGVzKFNldDxTdHJpbmc+bG9jYXRpb25GaWx0ZXIsIFJlZmVyZW5jZVNjZW5hcmlvRGF0YU1hcEltcGwgZGF0YU1hcCwgU3RyaW5nIHN0YXRlLCBGaWxlIGZpbGUpIHRocm93cyBTY2VuYXJpb0luaXRpYWxpemF0aW9uRXhjZXB0aW9uIHsKKwkJCisJCUJ1ZmZlcmVkUmVhZGVyIHJlYWRlciA9IG51bGw7CisJCXRyeSB7CisJCQlTdHJpbmcgcmVjb3JkOyAgCisJCQlTdHJpbmcgaGVhZGVyOworCQkJaW50IHJlY0NvdW50ID0gMDsKKwkJCUxpc3Q8U3RyaW5nPiBoZWFkZXJFbGVtZW50cyA9IG5ldyBBcnJheUxpc3Q8U3RyaW5nPigpOworCisJCQlyZWFkZXIgPSBuZXcgQnVmZmVyZWRSZWFkZXIobmV3IEZpbGVSZWFkZXIoZmlsZSkpOworCisJCQkvLworCQkJLy8gUmVhZCB0aGUgZmlsZSBoZWFkZXIgKGl0ZXIsIHRpbWUsIGxvY2F0aW9ucy4uLikKKwkJCS8vCisJCQlpZiAoIChoZWFkZXI9cmVhZGVyLnJlYWRMaW5lKCkpICE9IG51bGwgKSB7IAorCisJCQkJU3RyaW5nVG9rZW5pemVyIHN0ID0gbmV3IFN0cmluZ1Rva2VuaXplcihoZWFkZXIsICIsIik7Ly8kTk9OLU5MUy0xJAorCisJCQkJd2hpbGUgKHN0Lmhhc01vcmVUb2tlbnMoKSkgeworCQkJCQlTdHJpbmcgdmFsID0gc3QubmV4dFRva2VuKCkudHJpbSgpOworCQkJCQloZWFkZXJFbGVtZW50cy5hZGQodmFsKTsKKwkJCQl9CisJCQl9IC8vIHJlYWQgdGhlIGhlYWRlcgorCQkJLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKKwkJCS8vIHNldCB1cCB0aGUgZW1wdHkgbGlzdHMKKwkJCWludCBudW1Db2x1bW5zID0gaGVhZGVyRWxlbWVudHMuc2l6ZSgpOworCQkJZm9yIChpbnQgaSA9IDA7IGkgPCBudW1Db2x1bW5zOyBpICsrKSB7CisJCQkJU3RyaW5nIGtleSA9IGhlYWRlckVsZW1lbnRzLmdldChpKTsKKwkJCQkvLyBpZiBmaWx0ZXIgaXMgbnVsbCBqdXN0IGRvbid0IGZpbHRlcgorCQkJCWlmKGxvY2F0aW9uRmlsdGVyPT1udWxsIHx8IGxvY2F0aW9uRmlsdGVyLmNvbnRhaW5zKGtleSkpIHsKKwkJCQkJaWYoa2V5LmVxdWFscyhSZWZlcmVuY2VTY2VuYXJpb0RhdGFNYXBJbXBsLklURVJBVElPTl9LRVkpIHx8CisJCQkJCQkJa2V5LmVxdWFscyhSZWZlcmVuY2VTY2VuYXJpb0RhdGFNYXBJbXBsLlRJTUVfS0VZKSkKKwkJCQkJCWNvbnRpbnVlOworCQkJCQlNYXA8U3RyaW5nLCBMaXN0PFN0cmluZz4+IGRhdGE7CisJCQkJCVJlZmVyZW5jZVNjZW5hcmlvRGF0YUluc3RhbmNlIHJlc3VsdCA9IG51bGw7CisJCQkJCWlmKCFkYXRhTWFwLmNvbnRhaW5zTG9jYXRpb24oa2V5KSkgeworCQkJCQkJZGF0YSA9IG5ldyBIYXNoTWFwPFN0cmluZywgTGlzdDxTdHJpbmc+PigpOworCQkJCQkJcmVzdWx0ID0gZGF0YU1hcC5uZXcgUmVmZXJlbmNlU2NlbmFyaW9EYXRhSW5zdGFuY2UoZGF0YSwgZGF0YU1hcCk7CisJCQkJCQlkYXRhTWFwLmFkZEluc3RhbmNlKGtleSwgcmVzdWx0KTsgLy8gQWRkIG5ldyBsb2NhdGlvbiB0byAKKwkJCQkJfSBlbHNlIHsKKwkJCQkJCXJlc3VsdCA9IGRhdGFNYXAuZ2V0TG9jYXRpb24oa2V5KTsKKwkJCQkJCWRhdGEgPSByZXN1bHQuZ2V0SW5zdGFuY2UoKTsKKwkJCQkJfQorCQkJCQlkYXRhLnB1dChzdGF0ZSwgbmV3IEFycmF5TGlzdDxTdHJpbmc+KCkpOyAvLyBBZGQgdGhlIG5ldyBzdGF0ZQorCQkJCX0KKwkJCX0KKworCQkJLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworCQkJLy8gUmVhZCB0aGUgZGF0YQorCQkJLy8KKwkJCXdoaWxlICggKHJlY29yZD1yZWFkZXIucmVhZExpbmUoKSkgIT0gbnVsbCApIHsgCisJCQkJcmVjQ291bnQrKzsgCisKKwkJCQlTdHJpbmdUb2tlbml6ZXIgc3QgPSBuZXcgU3RyaW5nVG9rZW5pemVyKHJlY29yZCwiLCIpOy8vJE5PTi1OTFMtMSQKKwkJCQlpbnQgdGNvdW50ID0gMDsKKwkJCQl3aGlsZSAoc3QuaGFzTW9yZVRva2VucygpICYmIHRjb3VudCA8IGhlYWRlckVsZW1lbnRzLnNpemUoKSApIHsvLyBqdXN0IHRvIG1ha2Ugc3VyZQorCQkJCQlTdHJpbmcgdmFsID0gc3QubmV4dFRva2VuKCk7CisJCQkJCVN0cmluZyBrZXkgPSBoZWFkZXJFbGVtZW50cy5nZXQodGNvdW50KTsKKwkJCQkJLy8gaWYgZmlsdGVyIGlzIG51bGwganVzdCBkb24ndCBmaWx0ZXIKKwkJCQkJaWYobG9jYXRpb25GaWx0ZXI9PW51bGwgfHwgbG9jYXRpb25GaWx0ZXIuY29udGFpbnMoa2V5KSkgeworCQkJCQkJaWYoa2V5LmVxdWFscyhSZWZlcmVuY2VTY2VuYXJpb0RhdGFNYXBJbXBsLklURVJBVElPTl9LRVkpIHx8CisJCQkJCQkJCWtleS5lcXVhbHMoUmVmZXJlbmNlU2NlbmFyaW9EYXRhTWFwSW1wbC5USU1FX0tFWSkpCisJCQkJCQl7Kyt0Y291bnQ7Y29udGludWU7fQorCQkJCQkJUmVmZXJlbmNlU2NlbmFyaW9EYXRhSW5zdGFuY2UgcmVzdWx0ID0gZGF0YU1hcC5nZXRMb2NhdGlvbihrZXkpOworCQkJCQkJTWFwPFN0cmluZywgTGlzdDxTdHJpbmc+PmRhdGEgPSByZXN1bHQuZ2V0SW5zdGFuY2UoKTsKKwkJCQkJCWRhdGEuZ2V0KHN0YXRlKS5hZGQodmFsLnRyaW0oKSk7CisJCQkJCX0KKwkJCQkJdGNvdW50ICsrOworCQkJCX0KKwkJCX0gLy8gd2hpbGUgZmlsZSBoYXMgZGF0YQorCQl9IGNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7IAorCQkJLy8gY2F0Y2ggaW8gZXJyb3JzIGZyb20gRmlsZUlucHV0U3RyZWFtIG9yIHJlYWRMaW5lKCkKKwkJCUFjdGl2YXRvci5sb2dFcnJvcihJT19FWENFUFRJT05fRVJST1JfTVNHLCBlKTsKKwkJCXRocm93IG5ldyBTY2VuYXJpb0luaXRpYWxpemF0aW9uRXhjZXB0aW9uKGUpOworCQl9IGZpbmFsbHkgeworCQkJdHJ5IHsKKwkJCQlyZWFkZXIuY2xvc2UoKTsKKwkJCX0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CisJCQl9CisJCX0KKwl9Ly8gcHJvY2Vzc0FuZEZpbHRlckZpbGVzCisKKwkvKioKKwkgKiBQYXJzZSBhIHNpbmdsZSBhZ2dyZWdhdGUgZGF0YSBmaWxlCisJICogCisJICogQHBhcmFtIGZpbGUgRmlsZSB0byBwYXJzZQorCSAqIEByZXR1cm4gdGhlIFJlZmVyZW5jZVNjZW5hcmlvRGF0YU1hcCBvYmplY3QKKwkgKiBAdGhyb3dzIFNjZW5hcmlvSW5pdGlhbGl6YXRpb25FeGNlcHRpb24gCisJICovCisJcHVibGljIFJlZmVyZW5jZVNjZW5hcmlvRGF0YU1hcEltcGwgcGFyc2VBZ2dyZWdhdGVGaWxlKFN0cmluZyBmaWxlKSB0aHJvd3MgU2NlbmFyaW9Jbml0aWFsaXphdGlvbkV4Y2VwdGlvbiB7CisJCVJlZmVyZW5jZVNjZW5hcmlvRGF0YU1hcEltcGwgc2NlbmFyaW9EYXRhTWFwID0gKFJlZmVyZW5jZVNjZW5hcmlvRGF0YU1hcEltcGwpYUZhY3RvcnkuY3JlYXRlUmVmZXJlbmNlU2NlbmFyaW9EYXRhTWFwKCk7CisJCUZpbGUgZiA9IG5ldyBGaWxlKGZpbGUpOworCQlTdHJpbmcgbmFtZSA9IGYuZ2V0TmFtZSgpOyAgLy8gRGlzZWFzZSBuYW1lCisJCWludCBpZHggPSBuYW1lLmluZGV4T2YoIi4iKTsvLyROT04tTkxTLTEkCisJCVN0cmluZyBpZCA9IG5hbWUuc3Vic3RyaW5nKDAsaWR4KTsKKworCQlIYXNoTWFwPFN0cmluZywgTGlzdDxTdHJpbmc+PiBkYXRhID0gbmV3IEhhc2hNYXA8U3RyaW5nLExpc3Q8U3RyaW5nPj4oKTsKKwkJQnVmZmVyZWRSZWFkZXIgcmVhZGVyID0gbnVsbDsKKwkJdHJ5IHsKKwkJCVN0cmluZyByZWNvcmQ7ICAKKwkJCVN0cmluZyBoZWFkZXI7CisJCQlpbnQgcmVjQ291bnQgPSAwOworCQkJTGlzdDxTdHJpbmc+IGhlYWRlckVsZW1lbnRzID0gbmV3IEFycmF5TGlzdDxTdHJpbmc+KCk7CisJCQlyZWFkZXIgPSBuZXcgQnVmZmVyZWRSZWFkZXIobmV3IEZpbGVSZWFkZXIoZmlsZSkpOworCisJCQkvLworCQkJLy8gUmVhZCB0aGUgZmlsZSBoZWFkZXIKKwkJCS8vCisJCQlpZiAoIChoZWFkZXI9cmVhZGVyLnJlYWRMaW5lKCkpICE9IG51bGwgKSB7IAorCisJCQkJU3RyaW5nVG9rZW5pemVyIHN0ID0gbmV3IFN0cmluZ1Rva2VuaXplcihoZWFkZXIgKTsKKworCQkJCXdoaWxlIChzdC5oYXNNb3JlVG9rZW5zKCkpIHsKKwkJCQkJU3RyaW5nIHZhbCA9IHN0Lm5leHRUb2tlbigiLCIpOy8vJE5PTi1OTFMtMSQKKwkJCQkJaGVhZGVyRWxlbWVudHMuYWRkKHZhbC50cmltKCkpOworCQkJCX0KKwkJCX0gLy8gcmVhZCB0aGUgaGVhZGVyCisJCQkvLy8vLy8vLy8vLy8vLy8vLy8vLy8KKworCQkJLy8gc2V0IHVwIHRoZSBlbXB0eSBsaXN0cworCQkJaW50IG51bUNvbHVtbnMgPSBoZWFkZXJFbGVtZW50cy5zaXplKCk7CisJCQlmb3IgKGludCBpID0gMDsgaSA8IG51bUNvbHVtbnM7IGkgKyspIHsKKwkJCQlTdHJpbmcga2V5ID0gaGVhZGVyRWxlbWVudHMuZ2V0KGkpOworCQkJCWRhdGEucHV0KGtleSwgbmV3IEFycmF5TGlzdDxTdHJpbmc+KCkpOworCQkJfQorCisJCQkvLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisJCQkvLyBSZWFkIHRoZSBkYXRhCisJCQkvLworCQkJd2hpbGUgKCAocmVjb3JkPXJlYWRlci5yZWFkTGluZSgpKSAhPSBudWxsICkgeyAKKwkJCQlyZWNDb3VudCsrOyAKKworCQkJCVN0cmluZ1Rva2VuaXplciBzdCA9IG5ldyBTdHJpbmdUb2tlbml6ZXIocmVjb3JkICk7CisJCQkJaW50IHRjb3VudCA9IDA7CisJCQkJd2hpbGUgKHN0Lmhhc01vcmVUb2tlbnMoKSkgeworCQkJCQlTdHJpbmcgdmFsID0gc3QubmV4dFRva2VuKCIsIik7Ly8kTk9OLU5MUy0xJAorCQkJCQlTdHJpbmcga2V5ID0gaGVhZGVyRWxlbWVudHMuZ2V0KHRjb3VudCk7CisJCQkJCShkYXRhLmdldChrZXkpKS5hZGQodmFsLnRyaW0oKSk7CisJCQkJCXRjb3VudCArKzsKKwkJCQl9CisJCQl9IC8vIHdoaWxlIGZpbGUgaGFzIGRhdGEKKwkJfSBjYXRjaCAoSU9FeGNlcHRpb24gZSkgeyAKKwkJCS8vIGNhdGNoIGlvIGVycm9ycyBmcm9tIEZpbGVJbnB1dFN0cmVhbSBvciByZWFkTGluZSgpCisJCQlBY3RpdmF0b3IubG9nRXJyb3IoSU9fRVhDRVBUSU9OX0VSUk9SX01TRywgZSk7CisJCQl0aHJvdyBuZXcgU2NlbmFyaW9Jbml0aWFsaXphdGlvbkV4Y2VwdGlvbihlKTsKKwkJfSBmaW5hbGx5IHsKKwkJCXRyeSB7CisJCQkJcmVhZGVyLmNsb3NlKCk7CisJCQl9IGNhdGNoIChFeGNlcHRpb24gZSkgeworCQkJCQorCQkJfQorCQl9CisKKwkJc2NlbmFyaW9EYXRhTWFwLmFkZEluc3RhbmNlKAorCQkJCWlkLCAgIAorCQkJCXNjZW5hcmlvRGF0YU1hcC5uZXcgUmVmZXJlbmNlU2NlbmFyaW9EYXRhSW5zdGFuY2UoZGF0YSwgc2NlbmFyaW9EYXRhTWFwKSk7CisJCXJldHVybiBzY2VuYXJpb0RhdGFNYXA7CisJfQorCS8qKgorCSAqIHByb2Nlc3MgYW4gaW5jaWRlbmNlIGZpbGUKKwkgKiBBbiBpbmNpZGVuY2UgZmlsZSBkb2VzIG5vdCBjb250YWluIFNJIGRhdGEgc28gaXQgY2FuIG5vdCByZXR1cm4gCisJICogYSBSZWZlcmVuY2VTY2VuYXJpb0RhdGFJbnN0YW5jZSAoaXQgaXMgbm90IHVzZWQgdG8gZXN0aW1hdGUgcGFyYW1ldGVycykuCisJICogSW5zdGVhZCB0aGlzIG1ldGhvZCByZXR1cm5zIHRoZSByYXcgZGF0YSBpbiBhIG1hcAorCSAqIAorCSAqIEBwYXJhbSBmaWxlTmFtZQorCSAqIEByZXR1cm4gYSBtYXAgb2Ygc2NlbmFyaW8gZGF0YSBrZXllZCBieSBsb2NhdGlvbiBJRAorCSAqIEB0aHJvd3MgU2NlbmFyaW9Jbml0aWFsaXphdGlvbkV4Y2VwdGlvbiAKKwkgKi8KKwlwdWJsaWMgTWFwPFN0cmluZywgTGlzdDxTdHJpbmc+PiBwcm9jZXNzSW5jaWRlbmNlRmlsZShTdHJpbmcgZmlsZU5hbWUpIHRocm93cyBTY2VuYXJpb0luaXRpYWxpemF0aW9uRXhjZXB0aW9uIHsKKwkJRmlsZSBmaWxlID0gbmV3IEZpbGUoZmlsZU5hbWUpOworCQlIYXNoTWFwPFN0cmluZywgTGlzdDxTdHJpbmc+PiBkYXRhID0gbmV3IEhhc2hNYXA8U3RyaW5nLExpc3Q8U3RyaW5nPj4oKTsKKworCQlCdWZmZXJlZFJlYWRlciByZWFkZXIgPSBudWxsOworCQl0cnkgeworCQkJU3RyaW5nIHJlY29yZDsgIAorCQkJU3RyaW5nIGhlYWRlcjsKKwkJCWludCByZWNDb3VudCA9IDA7CisJCQlMaXN0PFN0cmluZz4gaGVhZGVyRWxlbWVudHMgPSBuZXcgQXJyYXlMaXN0PFN0cmluZz4oKTsKKwkJCXJlYWRlciA9IG5ldyBCdWZmZXJlZFJlYWRlcihuZXcgRmlsZVJlYWRlcihmaWxlKSk7CisKKwkJCS8vCisJCQkvLyBSZWFkIHRoZSBmaWxlIGhlYWRlcgorCQkJLy8KKwkJCWlmICggKGhlYWRlcj1yZWFkZXIucmVhZExpbmUoKSkgIT0gbnVsbCApIHsgCisKKwkJCQlTdHJpbmdUb2tlbml6ZXIgc3QgPSBuZXcgU3RyaW5nVG9rZW5pemVyKGhlYWRlciApOworCisJCQkJd2hpbGUgKHN0Lmhhc01vcmVUb2tlbnMoKSkgeworCQkJCQlTdHJpbmcgdmFsID0gc3QubmV4dFRva2VuKCIsIik7Ly8kTk9OLU5MUy0xJAorCQkJCQloZWFkZXJFbGVtZW50cy5hZGQodmFsLnRyaW0oKSk7CisJCQkJfQorCQkJfSAvLyByZWFkIHRoZSBoZWFkZXIKKwkJCS8vLy8vLy8vLy8vLy8vLy8vLy8vLworCisJCQkvLyBzZXQgdXAgdGhlIGVtcHR5IGxpc3RzCisJCQlpbnQgbnVtQ29sdW1ucyA9IGhlYWRlckVsZW1lbnRzLnNpemUoKTsKKwkJCWZvciAoaW50IGkgPSAwOyBpIDwgbnVtQ29sdW1uczsgaSArKykgeworCQkJCVN0cmluZyBrZXkgPSBoZWFkZXJFbGVtZW50cy5nZXQoaSk7CisJCQkJZGF0YS5wdXQoa2V5LCBuZXcgQXJyYXlMaXN0PFN0cmluZz4oKSk7CisJCQl9CisKKwkJCS8vIEhlcmUgd2UgY2hlY2sgdGhlIHR5cGUgb2YgdGhlIGRhdGEgZmlsZQorCQkJLy8gYnkgY2hlY2tpbmcgdGhlIGhlYWRlciBlbGVtZW50cworCisKKworCisJCQkvLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisJCQkvLyBSZWFkIHRoZSBkYXRhCisJCQkvLworCQkJd2hpbGUgKCAocmVjb3JkPXJlYWRlci5yZWFkTGluZSgpKSAhPSBudWxsICkgeyAKKwkJCQlyZWNDb3VudCsrOyAKKworCQkJCVN0cmluZ1Rva2VuaXplciBzdCA9IG5ldyBTdHJpbmdUb2tlbml6ZXIocmVjb3JkICk7CisJCQkJaW50IHRjb3VudCA9IDA7CisJCQkJd2hpbGUgKHN0Lmhhc01vcmVUb2tlbnMoKSkgeworCQkJCQlTdHJpbmcgdmFsID0gc3QubmV4dFRva2VuKCIsIik7Ly8kTk9OLU5MUy0xJAorCQkJCQlTdHJpbmcga2V5ID0gaGVhZGVyRWxlbWVudHMuZ2V0KHRjb3VudCk7CisJCQkJCShkYXRhLmdldChrZXkpKS5hZGQodmFsLnRyaW0oKSk7CisJCQkJCXRjb3VudCArKzsKKwkJCQl9CisJCQl9IC8vIHdoaWxlIGZpbGUgaGFzIGRhdGEKKwkJfSBjYXRjaCAoSU9FeGNlcHRpb24gZSkgeyAKKwkJCS8vIGNhdGNoIGlvIGVycm9ycyBmcm9tIEZpbGVJbnB1dFN0cmVhbSBvciByZWFkTGluZSgpCisJCQlBY3RpdmF0b3IubG9nRXJyb3IoSU9fRVhDRVBUSU9OX0VSUk9SX01TRywgZSk7CisJCQl0aHJvdyBuZXcgU2NlbmFyaW9Jbml0aWFsaXphdGlvbkV4Y2VwdGlvbihlKTsKKwkJfSBmaW5hbGx5IHsKKwkJCXRyeSB7CisJCQkJcmVhZGVyLmNsb3NlKCk7CisJCQl9IGNhdGNoIChFeGNlcHRpb24gZSkgeworCQkJfQorCQl9CisJCXJldHVybiBkYXRhOworCX0KKworCisJLyoqCisJICogSW5kaWNhdGUgRW5kLU9mLUZpbGUKKwkgKiAKKwkgKiBAcGFyYW0gYnVmZmVyCisJICogICAgICAgICAgICBBIGJ1ZmZlciBvZiBkaXZhIGRhdGEKKwkgKiAKKwkgKiBAcmV0dXJuIFRydWUgaWYgd2UgaGF2ZSByZWFjaGVkIEVuZC1PZi1GaWxlCisJICovCisJc3RhdGljIHByb3RlY3RlZCBib29sZWFuIEVPRihTdHJpbmcgYnVmZmVyKSB7CisJCWlmIChidWZmZXIgPT0gbnVsbCB8fCBidWZmZXIubGVuZ3RoKCkgPT0gMCkKKwkJCXJldHVybiB0cnVlOworCQlyZXR1cm4gZmFsc2U7CisJfQorCisJLyoqCisJICogUmV0dXJuIHRoZSBydW4gcGFyYW1ldGVycworCSAqIAorCSAqIEByZXR1cm4gTWFwPFN0cmluZywgU3RyaW5nPiBUaGUgcnVuIHBhcmFtZXRlcnMKKwkgKi8KKworCXB1YmxpYyBNYXA8U3RyaW5nLCBTdHJpbmc+IGdldFJ1blBhcmFtZXRlcnMoKSB7CisJCXJldHVybiBydW5QYXJhbWV0ZXJzOworCX0KKwkKKwlwdWJsaWMgc3RhdGljIFNldDxTdHJpbmc+IGdldHNLZXlTZXQoKSB7CisJCXJldHVybiBTX0tFWV9TRVQ7CisJfQorCisJcHVibGljIHN0YXRpYyBTZXQ8U3RyaW5nPiBnZXRlS2V5U2V0KCkgeworCQlyZXR1cm4gRV9LRVlfU0VUOworCX0KKworCXB1YmxpYyBzdGF0aWMgU2V0PFN0cmluZz4gZ2V0aUtleVNldCgpIHsKKwkJcmV0dXJuIElfS0VZX1NFVDsKKwl9CisKKwlwdWJsaWMgc3RhdGljIFNldDxTdHJpbmc+IGdldHJLZXlTZXQoKSB7CisJCXJldHVybiBSX0tFWV9TRVQ7CisJfQorCQorCXB1YmxpYyBzdGF0aWMgU2V0PFN0cmluZz4gZ2V0SW5jaWRlbmNlS2V5U2V0KCkgeworCQlyZXR1cm4gSU5DSURFTkNFX0tFWV9TRVQ7CisJfQorCit9CmRpZmYgLS1naXQgYS9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLnV0aWwuYW5hbHlzaXMvLmNkdHByb2plY3QgYi9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLnV0aWwuYW5hbHlzaXMvLmNkdHByb2plY3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWIyZWE4MwotLS0gL2Rldi9udWxsCisrKyBiL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0udXRpbC5hbmFseXNpcy8uY2R0cHJvamVjdApAQCAtMCwwICsxLDQgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8P2VjbGlwc2UtY2R0IHZlcnNpb249IjIuMCI/PgorCis8Y2R0cHJvamVjdC8+CmRpZmYgLS1naXQgYS9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLnV0aWwuYW5hbHlzaXMvLmNsYXNzcGF0aCBiL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0udXRpbC5hbmFseXNpcy8uY2xhc3NwYXRoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMwNGU4NjEKLS0tIC9kZXYvbnVsbAorKysgYi9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLnV0aWwuYW5hbHlzaXMvLmNsYXNzcGF0aApAQCAtMCwwICsxLDcgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8Y2xhc3NwYXRoPgorCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJzcmMiIHBhdGg9InNyYyIvPgorCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJjb24iIHBhdGg9Im9yZy5lY2xpcHNlLmpkdC5sYXVuY2hpbmcuSlJFX0NPTlRBSU5FUi9vcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwuZGVidWcudWkubGF1bmNoZXIuU3RhbmRhcmRWTVR5cGUvSjJTRS0xLjUiLz4KKwk8Y2xhc3NwYXRoZW50cnkga2luZD0iY29uIiBwYXRoPSJvcmcuZWNsaXBzZS5wZGUuY29yZS5yZXF1aXJlZFBsdWdpbnMiLz4KKwk8Y2xhc3NwYXRoZW50cnkga2luZD0ib3V0cHV0IiBwYXRoPSJiaW4iLz4KKzwvY2xhc3NwYXRoPgpkaWZmIC0tZ2l0IGEvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS51dGlsLmFuYWx5c2lzLy5jcHJvamVjdCBiL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0udXRpbC5hbmFseXNpcy8uY3Byb2plY3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjYxOWM1NgotLS0gL2Rldi9udWxsCisrKyBiL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0udXRpbC5hbmFseXNpcy8uY3Byb2plY3QKQEAgLTAsMCArMSwxMyBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzw/ZmlsZVZlcnNpb24gNC4wLjA/PgorCis8Y3Byb2plY3Q+Cis8c3RvcmFnZU1vZHVsZSBtb2R1bGVJZD0ib3JnLmVjbGlwc2UuY2R0LmNvcmUuc2V0dGluZ3MiPgorPGNjb25maWd1cmF0aW9uIGlkPSJjb252ZXJ0ZWQuY29uZmlnLjkwNzg0NTI2NCI+Cis8c3RvcmFnZU1vZHVsZSBidWlsZFN5c3RlbUlkPSJvcmcuZWNsaXBzZS5jZHQuY29yZS5kZWZhdWx0Q29uZmlnRGF0YVByb3ZpZGVyIiBpZD0iY29udmVydGVkLmNvbmZpZy45MDc4NDUyNjQiIG1vZHVsZUlkPSJvcmcuZWNsaXBzZS5jZHQuY29yZS5zZXR0aW5ncyIgbmFtZT0iY29udmVydGVkQ29uZmlnIj4KKzxleHRlcm5hbFNldHRpbmdzLz4KKzxleHRlbnNpb25zLz4KKzwvc3RvcmFnZU1vZHVsZT4KKzwvY2NvbmZpZ3VyYXRpb24+Cis8L3N0b3JhZ2VNb2R1bGU+Cis8L2Nwcm9qZWN0PgpkaWZmIC0tZ2l0IGEvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS51dGlsLmFuYWx5c2lzLy5wcm9qZWN0IGIvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS51dGlsLmFuYWx5c2lzLy5wcm9qZWN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY2NmQxZDkKLS0tIC9kZXYvbnVsbAorKysgYi9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLnV0aWwuYW5hbHlzaXMvLnByb2plY3QKQEAgLTAsMCArMSwzNCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxwcm9qZWN0RGVzY3JpcHRpb24+CisJPG5hbWU+b3JnLmVjbGlwc2Uuc3RlbS51dGlsLmFuYWx5c2lzPC9uYW1lPgorCTxjb21tZW50PjwvY29tbWVudD4KKwk8cHJvamVjdHM+CisJPC9wcm9qZWN0cz4KKwk8YnVpbGRTcGVjPgorCQk8YnVpbGRDb21tYW5kPgorCQkJPG5hbWU+b3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YWJ1aWxkZXI8L25hbWU+CisJCQk8YXJndW1lbnRzPgorCQkJPC9hcmd1bWVudHM+CisJCTwvYnVpbGRDb21tYW5kPgorCQk8YnVpbGRDb21tYW5kPgorCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLk1hbmlmZXN0QnVpbGRlcjwvbmFtZT4KKwkJCTxhcmd1bWVudHM+CisJCQk8L2FyZ3VtZW50cz4KKwkJPC9idWlsZENvbW1hbmQ+CisJCTxidWlsZENvbW1hbmQ+CisJCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuU2NoZW1hQnVpbGRlcjwvbmFtZT4KKwkJCTxhcmd1bWVudHM+CisJCQk8L2FyZ3VtZW50cz4KKwkJPC9idWlsZENvbW1hbmQ+CisJCTxidWlsZENvbW1hbmQ+CisJCQk8bmFtZT5uZXQuc291cmNlZm9yZ2UubWV0cmljcy5idWlsZGVyPC9uYW1lPgorCQkJPGFyZ3VtZW50cz4KKwkJCTwvYXJndW1lbnRzPgorCQk8L2J1aWxkQ29tbWFuZD4KKwk8L2J1aWxkU3BlYz4KKwk8bmF0dXJlcz4KKwkJPG5hdHVyZT5vcmcuZWNsaXBzZS5wZGUuUGx1Z2luTmF0dXJlPC9uYXR1cmU+CisJCTxuYXR1cmU+b3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YW5hdHVyZTwvbmF0dXJlPgorCQk8bmF0dXJlPm5ldC5zb3VyY2Vmb3JnZS5tZXRyaWNzLm5hdHVyZTwvbmF0dXJlPgorCTwvbmF0dXJlcz4KKzwvcHJvamVjdERlc2NyaXB0aW9uPgpkaWZmIC0tZ2l0IGEvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS51dGlsLmFuYWx5c2lzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcyBiL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0udXRpbC5hbmFseXNpcy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjkyOTc4NQotLS0gL2Rldi9udWxsCisrKyBiL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0udXRpbC5hbmFseXNpcy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMKQEAgLTAsMCArMSw3NCBAQAorI1RodSBOb3YgMDEgMTQ6NTA6MzggRURUIDIwMDcKK2VjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb2RlZ2VuLmlubGluZUpzckJ5dGVjb2RlPWVuYWJsZWQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvZGVnZW4udGFyZ2V0UGxhdGZvcm09MS41CitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb2RlZ2VuLnVudXNlZExvY2FsPXByZXNlcnZlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb21wbGlhbmNlPTEuNQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuZGVidWcubGluZU51bWJlcj1nZW5lcmF0ZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuZGVidWcubG9jYWxWYXJpYWJsZT1nZW5lcmF0ZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuZGVidWcuc291cmNlRmlsZT1nZW5lcmF0ZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuZG9jLmNvbW1lbnQuc3VwcG9ydD1lbmFibGVkCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmFubm90YXRpb25TdXBlckludGVyZmFjZT13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmFzc2VydElkZW50aWZpZXI9ZXJyb3IKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uYXV0b2JveGluZz13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRlcHJlY2F0aW9uPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZGVwcmVjYXRpb25JbkRlcHJlY2F0ZWRDb2RlPWRpc2FibGVkCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRlcHJlY2F0aW9uV2hlbk92ZXJyaWRpbmdEZXByZWNhdGVkTWV0aG9kPWRpc2FibGVkCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRpc2NvdXJhZ2VkUmVmZXJlbmNlPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZW1wdHlTdGF0ZW1lbnQ9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5lbnVtSWRlbnRpZmllcj1lcnJvcgorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5mYWxsdGhyb3VnaENhc2U9aWdub3JlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZpZWxkSGlkaW5nPWlnbm9yZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5maW5hbFBhcmFtZXRlckJvdW5kPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZmluYWxseUJsb2NrTm90Q29tcGxldGluZ05vcm1hbGx5PXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZm9yYmlkZGVuUmVmZXJlbmNlPWVycm9yCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmhpZGRlbkNhdGNoQmxvY2s9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbmNvbXBhdGlibGVOb25Jbmhlcml0ZWRJbnRlcmZhY2VNZXRob2Q9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbmNvbXBsZXRlRW51bVN3aXRjaD1pZ25vcmUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW5kaXJlY3RTdGF0aWNBY2Nlc3M9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbnZhbGlkSmF2YWRvYz13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmludmFsaWRKYXZhZG9jVGFncz1lbmFibGVkCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmludmFsaWRKYXZhZG9jVGFnc0RlcHJlY2F0ZWRSZWY9ZW5hYmxlZAorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbnZhbGlkSmF2YWRvY1RhZ3NOb3RWaXNpYmxlUmVmPWVuYWJsZWQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW52YWxpZEphdmFkb2NUYWdzVmlzaWJpbGl0eT1wdWJsaWMKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubG9jYWxWYXJpYWJsZUhpZGluZz1pZ25vcmUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWV0aG9kV2l0aENvbnN0cnVjdG9yTmFtZT13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdEZXByZWNhdGVkQW5ub3RhdGlvbj13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdKYXZhZG9jQ29tbWVudHM9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nSmF2YWRvY0NvbW1lbnRzT3ZlcnJpZGluZz1lbmFibGVkCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdKYXZhZG9jQ29tbWVudHNWaXNpYmlsaXR5PXB1YmxpYworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nSmF2YWRvY1RhZ3M9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nSmF2YWRvY1RhZ3NPdmVycmlkaW5nPWVuYWJsZWQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0phdmFkb2NUYWdzVmlzaWJpbGl0eT1wdWJsaWMKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ092ZXJyaWRlQW5ub3RhdGlvbj1pZ25vcmUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ1NlcmlhbFZlcnNpb249d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5ub0VmZmVjdEFzc2lnbm1lbnQ9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5ub0ltcGxpY2l0U3RyaW5nQ29udmVyc2lvbj13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm5vbkV4dGVybmFsaXplZFN0cmluZ0xpdGVyYWw9aWdub3JlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm51bGxSZWZlcmVuY2U9aWdub3JlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm92ZXJyaWRpbmdQYWNrYWdlRGVmYXVsdE1ldGhvZD13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnBhcmFtZXRlckFzc2lnbm1lbnQ9aWdub3JlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnBvc3NpYmxlQWNjaWRlbnRhbEJvb2xlYW5Bc3NpZ25tZW50PXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ucmF3VHlwZVJlZmVyZW5jZT1pZ25vcmUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uc3BlY2lhbFBhcmFtZXRlckhpZGluZ0ZpZWxkPWRpc2FibGVkCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnN0YXRpY0FjY2Vzc1JlY2VpdmVyPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uc3VwcHJlc3NXYXJuaW5ncz1lbmFibGVkCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnN5bnRoZXRpY0FjY2Vzc0VtdWxhdGlvbj13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnR5cGVQYXJhbWV0ZXJIaWRpbmc9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bmNoZWNrZWRUeXBlT3BlcmF0aW9uPWlnbm9yZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bmRvY3VtZW50ZWRFbXB0eUJsb2NrPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5oYW5kbGVkV2FybmluZ1Rva2VuPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5uZWNlc3NhcnlFbHNlPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5uZWNlc3NhcnlUeXBlQ2hlY2s9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnF1YWxpZmllZEZpZWxkQWNjZXNzPWlnbm9yZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWREZWNsYXJlZFRocm93bkV4Y2VwdGlvbj13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZERlY2xhcmVkVGhyb3duRXhjZXB0aW9uV2hlbk92ZXJyaWRpbmc9ZW5hYmxlZAorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRJbXBvcnQ9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRMYWJlbD13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZExvY2FsPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkUGFyYW1ldGVyPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkUGFyYW1ldGVyV2hlbkltcGxlbWVudGluZ0Fic3RyYWN0PWVuYWJsZWQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkUGFyYW1ldGVyV2hlbk92ZXJyaWRpbmdDb25jcmV0ZT1lbmFibGVkCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZFByaXZhdGVNZW1iZXI9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS52YXJhcmdzQXJndW1lbnROZWVkQ2FzdD13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5zb3VyY2U9MS41CmRpZmYgLS1naXQgYS9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLnV0aWwuYW5hbHlzaXMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC51aS5wcmVmcyBiL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0udXRpbC5hbmFseXNpcy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LnVpLnByZWZzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg4MWRiN2EKLS0tIC9kZXYvbnVsbAorKysgYi9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLnV0aWwuYW5hbHlzaXMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC51aS5wcmVmcwpAQCAtMCwwICsxLDUwIEBACisjTW9uIEZlYiAyNSAxMjoyOToyMyBQU1QgMjAwOAorY2xlYW51cC5hZGRfZGVmYXVsdF9zZXJpYWxfdmVyc2lvbl9pZD10cnVlCitjbGVhbnVwLmFkZF9nZW5lcmF0ZWRfc2VyaWFsX3ZlcnNpb25faWQ9ZmFsc2UKK2NsZWFudXAuYWRkX21pc3NpbmdfYW5ub3RhdGlvbnM9dHJ1ZQorY2xlYW51cC5hZGRfbWlzc2luZ19kZXByZWNhdGVkX2Fubm90YXRpb25zPXRydWUKK2NsZWFudXAuYWRkX21pc3NpbmdfbmxzX3RhZ3M9ZmFsc2UKK2NsZWFudXAuYWRkX21pc3Npbmdfb3ZlcnJpZGVfYW5ub3RhdGlvbnM9dHJ1ZQorY2xlYW51cC5hZGRfc2VyaWFsX3ZlcnNpb25faWQ9ZmFsc2UKK2NsZWFudXAuYWx3YXlzX3VzZV9ibG9ja3M9dHJ1ZQorY2xlYW51cC5hbHdheXNfdXNlX3BhcmVudGhlc2VzX2luX2V4cHJlc3Npb25zPXRydWUKK2NsZWFudXAuYWx3YXlzX3VzZV90aGlzX2Zvcl9ub25fc3RhdGljX2ZpZWxkX2FjY2Vzcz1mYWxzZQorY2xlYW51cC5hbHdheXNfdXNlX3RoaXNfZm9yX25vbl9zdGF0aWNfbWV0aG9kX2FjY2Vzcz1mYWxzZQorY2xlYW51cC5jb252ZXJ0X3RvX2VuaGFuY2VkX2Zvcl9sb29wPXRydWUKK2NsZWFudXAuZm9ybWF0X3NvdXJjZV9jb2RlPXRydWUKK2NsZWFudXAubWFrZV9sb2NhbF92YXJpYWJsZV9maW5hbD10cnVlCitjbGVhbnVwLm1ha2VfcGFyYW1ldGVyc19maW5hbD10cnVlCitjbGVhbnVwLm1ha2VfcHJpdmF0ZV9maWVsZHNfZmluYWw9dHJ1ZQorY2xlYW51cC5tYWtlX3ZhcmlhYmxlX2RlY2xhcmF0aW9uc19maW5hbD10cnVlCitjbGVhbnVwLm5ldmVyX3VzZV9ibG9ja3M9ZmFsc2UKK2NsZWFudXAubmV2ZXJfdXNlX3BhcmVudGhlc2VzX2luX2V4cHJlc3Npb25zPWZhbHNlCitjbGVhbnVwLm9yZ2FuaXplX2ltcG9ydHM9dHJ1ZQorY2xlYW51cC5xdWFsaWZ5X3N0YXRpY19maWVsZF9hY2Nlc3Nlc193aXRoX2RlY2xhcmluZ19jbGFzcz1mYWxzZQorY2xlYW51cC5xdWFsaWZ5X3N0YXRpY19tZW1iZXJfYWNjZXNzZXNfdGhyb3VnaF9pbnN0YW5jZXNfd2l0aF9kZWNsYXJpbmdfY2xhc3M9dHJ1ZQorY2xlYW51cC5xdWFsaWZ5X3N0YXRpY19tZW1iZXJfYWNjZXNzZXNfdGhyb3VnaF9zdWJ0eXBlc193aXRoX2RlY2xhcmluZ19jbGFzcz10cnVlCitjbGVhbnVwLnF1YWxpZnlfc3RhdGljX21lbWJlcl9hY2Nlc3Nlc193aXRoX2RlY2xhcmluZ19jbGFzcz10cnVlCitjbGVhbnVwLnF1YWxpZnlfc3RhdGljX21ldGhvZF9hY2Nlc3Nlc193aXRoX2RlY2xhcmluZ19jbGFzcz1mYWxzZQorY2xlYW51cC5yZW1vdmVfcHJpdmF0ZV9jb25zdHJ1Y3RvcnM9dHJ1ZQorY2xlYW51cC5yZW1vdmVfdHJhaWxpbmdfd2hpdGVzcGFjZXM9dHJ1ZQorY2xlYW51cC5yZW1vdmVfdHJhaWxpbmdfd2hpdGVzcGFjZXNfYWxsPXRydWUKK2NsZWFudXAucmVtb3ZlX3RyYWlsaW5nX3doaXRlc3BhY2VzX2lnbm9yZV9lbXB0eT1mYWxzZQorY2xlYW51cC5yZW1vdmVfdW5uZWNlc3NhcnlfY2FzdHM9dHJ1ZQorY2xlYW51cC5yZW1vdmVfdW5uZWNlc3NhcnlfbmxzX3RhZ3M9dHJ1ZQorY2xlYW51cC5yZW1vdmVfdW51c2VkX2ltcG9ydHM9dHJ1ZQorY2xlYW51cC5yZW1vdmVfdW51c2VkX2xvY2FsX3ZhcmlhYmxlcz10cnVlCitjbGVhbnVwLnJlbW92ZV91bnVzZWRfcHJpdmF0ZV9maWVsZHM9dHJ1ZQorY2xlYW51cC5yZW1vdmVfdW51c2VkX3ByaXZhdGVfbWVtYmVycz10cnVlCitjbGVhbnVwLnJlbW92ZV91bnVzZWRfcHJpdmF0ZV9tZXRob2RzPXRydWUKK2NsZWFudXAucmVtb3ZlX3VudXNlZF9wcml2YXRlX3R5cGVzPXRydWUKK2NsZWFudXAuc29ydF9tZW1iZXJzPWZhbHNlCitjbGVhbnVwLnNvcnRfbWVtYmVyc19hbGw9ZmFsc2UKK2NsZWFudXAudXNlX2Jsb2Nrcz10cnVlCitjbGVhbnVwLnVzZV9ibG9ja3Nfb25seV9mb3JfcmV0dXJuX2FuZF90aHJvdz1mYWxzZQorY2xlYW51cC51c2VfcGFyZW50aGVzZXNfaW5fZXhwcmVzc2lvbnM9ZmFsc2UKK2NsZWFudXAudXNlX3RoaXNfZm9yX25vbl9zdGF0aWNfZmllbGRfYWNjZXNzPWZhbHNlCitjbGVhbnVwLnVzZV90aGlzX2Zvcl9ub25fc3RhdGljX2ZpZWxkX2FjY2Vzc19vbmx5X2lmX25lY2Vzc2FyeT10cnVlCitjbGVhbnVwLnVzZV90aGlzX2Zvcl9ub25fc3RhdGljX21ldGhvZF9hY2Nlc3M9ZmFsc2UKK2NsZWFudXAudXNlX3RoaXNfZm9yX25vbl9zdGF0aWNfbWV0aG9kX2FjY2Vzc19vbmx5X2lmX25lY2Vzc2FyeT10cnVlCitjbGVhbnVwX3Byb2ZpbGU9X3JlbGVuZyBjb2RlIGNsZWFudXAKK2NsZWFudXBfc2V0dGluZ3NfdmVyc2lvbj0yCitlY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQpkaWZmIC0tZ2l0IGEvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS51dGlsLmFuYWx5c2lzL01FVEEtSU5GL01BTklGRVNULk1GIGIvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS51dGlsLmFuYWx5c2lzL01FVEEtSU5GL01BTklGRVNULk1GCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI5MzJmNGMKLS0tIC9kZXYvbnVsbAorKysgYi9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLnV0aWwuYW5hbHlzaXMvTUVUQS1JTkYvTUFOSUZFU1QuTUYKQEAgLTAsMCArMSwyMCBAQAorTWFuaWZlc3QtVmVyc2lvbjogMS4wCitCdW5kbGUtTWFuaWZlc3RWZXJzaW9uOiAyCitCdW5kbGUtTmFtZTogJXBsdWdpbk5hbWUKK0J1bmRsZS1TeW1ib2xpY05hbWU6IG9yZy5lY2xpcHNlLnN0ZW0udXRpbC5hbmFseXNpcztzaW5nbGV0b246PXRydWUKK0J1bmRsZS1WZXJzaW9uOiAxLjIuMQorQnVuZGxlLUFjdGl2YXRvcjogb3JnLmVjbGlwc2Uuc3RlbS51dGlsLmFuYWx5c2lzLkFjdGl2YXRvcgorQnVuZGxlLVZlbmRvcjogJXByb3ZpZGVyTmFtZQorQnVuZGxlLUxvY2FsaXphdGlvbjogcGx1Z2luCitSZXF1aXJlLUJ1bmRsZTogb3JnLmVjbGlwc2UuYmlydC5jaGFydC5lbmdpbmU7dmlzaWJpbGl0eTo9cmVleHBvcnQsCisgb3JnLmVjbGlwc2UuYmlydC5jb3JlLnVpLAorIG9yZy5lY2xpcHNlLnN0ZW0udWksCisgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucywKKyBvcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5LAorIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscywKKyBvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzCitCdW5kbGUtQWN0aXZhdGlvblBvbGljeTogbGF6eQorRXhwb3J0LVBhY2thZ2U6IG9yZy5lY2xpcHNlLnN0ZW0udXRpbC5hbmFseXNpcywKKyBvcmcuZWNsaXBzZS5zdGVtLnV0aWwuYW5hbHlzaXMudmlld3MKK0J1bmRsZS1SZXF1aXJlZEV4ZWN1dGlvbkVudmlyb25tZW50OiBKMlNFLTEuNQorQnVuZGxlLUNsYXNzUGF0aDogLgpkaWZmIC0tZ2l0IGEvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS51dGlsLmFuYWx5c2lzL2J1aWxkLnByb3BlcnRpZXMgYi9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLnV0aWwuYW5hbHlzaXMvYnVpbGQucHJvcGVydGllcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZmIxMzRmCi0tLSAvZGV2L251bGwKKysrIGIvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS51dGlsLmFuYWx5c2lzL2J1aWxkLnByb3BlcnRpZXMKQEAgLTAsMCArMSwxMCBAQAorc291cmNlLi4gPSBzcmMvCitvdXRwdXQuLiA9IGJpbi8KK2Jpbi5pbmNsdWRlcyA9IHBsdWdpbi54bWwsXAorICAgICAgICAgICAgICAgTUVUQS1JTkYvLFwKKyAgICAgICAgICAgICAgIC4sXAorICAgICAgICAgICAgICAgaWNvbnMvLFwKKyAgICAgICAgICAgICAgIHBsdWdpbi5wcm9wZXJ0aWVzLFwKKyAgICAgICAgICAgICAgIHBsdWdpbl96aC5wcm9wZXJ0aWVzLFwKKyAgICAgICAgICAgICAgIHBsdWdpbl9rci5wcm9wZXJ0aWVzLFwKKyAgICAgICAgICAgICAgIHBsdWdpbl9kZS5wcm9wZXJ0aWVzCmRpZmYgLS1naXQgYS9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLnV0aWwuYW5hbHlzaXMvaWNvbnMvZnVsbC9jdXN0b21vYmoxNi8uY3ZzaWdub3JlIGIvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS51dGlsLmFuYWx5c2lzL2ljb25zL2Z1bGwvY3VzdG9tb2JqMTYvLmN2c2lnbm9yZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wODVlOGJhCi0tLSAvZGV2L251bGwKKysrIGIvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS51dGlsLmFuYWx5c2lzL2ljb25zL2Z1bGwvY3VzdG9tb2JqMTYvLmN2c2lnbm9yZQpAQCAtMCwwICsxIEBACitUaHVtYnMuZGIKZGlmZiAtLWdpdCBhL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0udXRpbC5hbmFseXNpcy9pY29ucy9mdWxsL2N1c3RvbW9iajE2L0FuYWx5c2lzLmdpZiBiL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0udXRpbC5hbmFseXNpcy9pY29ucy9mdWxsL2N1c3RvbW9iajE2L0FuYWx5c2lzLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NmFlZWJiCi0tLSAvZGV2L251bGwKKysrIGIvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS51dGlsLmFuYWx5c2lzL2ljb25zL2Z1bGwvY3VzdG9tb2JqMTYvQW5hbHlzaXMuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0udXRpbC5hbmFseXNpcy9pY29ucy9mdWxsL2N1c3RvbW9iajE2L1N0YXRpY0xhYmVsLmdpZiBiL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0udXRpbC5hbmFseXNpcy9pY29ucy9mdWxsL2N1c3RvbW9iajE2L1N0YXRpY0xhYmVsLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMzE0MmI1Ci0tLSAvZGV2L251bGwKKysrIGIvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS51dGlsLmFuYWx5c2lzL2ljb25zL2Z1bGwvY3VzdG9tb2JqMTYvU3RhdGljTGFiZWwuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0udXRpbC5hbmFseXNpcy9pY29ucy9mdWxsL2N1c3RvbW9iajE2L1RyaWdnZXIuZ2lmIGIvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS51dGlsLmFuYWx5c2lzL2ljb25zL2Z1bGwvY3VzdG9tb2JqMTYvVHJpZ2dlci5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzYzMjQ2OAotLS0gL2Rldi9udWxsCisrKyBiL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0udXRpbC5hbmFseXNpcy9pY29ucy9mdWxsL2N1c3RvbW9iajE2L1RyaWdnZXIuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0udXRpbC5hbmFseXNpcy9pY29ucy9mdWxsL29iajE2L0NvbW1vbk1vZGVsRmlsZS5naWYgYi9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLnV0aWwuYW5hbHlzaXMvaWNvbnMvZnVsbC9vYmoxNi9Db21tb25Nb2RlbEZpbGUuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIyZWM3NWIKLS0tIC9kZXYvbnVsbAorKysgYi9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLnV0aWwuYW5hbHlzaXMvaWNvbnMvZnVsbC9vYmoxNi9Db21tb25Nb2RlbEZpbGUuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0udXRpbC5hbmFseXNpcy9pY29ucy9mdWxsL29iajE2L0V4cGVyaW1lbnRNb2RlbEZpbGUuZ2lmIGIvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS51dGlsLmFuYWx5c2lzL2ljb25zL2Z1bGwvb2JqMTYvRXhwZXJpbWVudE1vZGVsRmlsZS5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDZkZTNiMQotLS0gL2Rldi9udWxsCisrKyBiL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0udXRpbC5hbmFseXNpcy9pY29ucy9mdWxsL29iajE2L0V4cGVyaW1lbnRNb2RlbEZpbGUuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0udXRpbC5hbmFseXNpcy9pY29ucy9mdWxsL29iajE2L0dyYXBoTW9kZWxGaWxlLmdpZiBiL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0udXRpbC5hbmFseXNpcy9pY29ucy9mdWxsL29iajE2L0dyYXBoTW9kZWxGaWxlLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNTIxNmJhCi0tLSAvZGV2L251bGwKKysrIGIvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS51dGlsLmFuYWx5c2lzL2ljb25zL2Z1bGwvb2JqMTYvR3JhcGhNb2RlbEZpbGUuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0udXRpbC5hbmFseXNpcy9pY29ucy9mdWxsL29iajE2L01vZGVsTW9kZWxGaWxlLmdpZiBiL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0udXRpbC5hbmFseXNpcy9pY29ucy9mdWxsL29iajE2L01vZGVsTW9kZWxGaWxlLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYTAxMzNiCi0tLSAvZGV2L251bGwKKysrIGIvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS51dGlsLmFuYWx5c2lzL2ljb25zL2Z1bGwvb2JqMTYvTW9kZWxNb2RlbEZpbGUuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0udXRpbC5hbmFseXNpcy9pY29ucy9mdWxsL29iajE2L1ByZWRpY2F0ZU1vZGVsRmlsZS5naWYgYi9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLnV0aWwuYW5hbHlzaXMvaWNvbnMvZnVsbC9vYmoxNi9QcmVkaWNhdGVNb2RlbEZpbGUuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ2Yjc1OGQKLS0tIC9kZXYvbnVsbAorKysgYi9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLnV0aWwuYW5hbHlzaXMvaWNvbnMvZnVsbC9vYmoxNi9QcmVkaWNhdGVNb2RlbEZpbGUuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0udXRpbC5hbmFseXNpcy9pY29ucy9mdWxsL29iajE2L1NjZW5hcmlvTW9kZWxGaWxlLmdpZiBiL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0udXRpbC5hbmFseXNpcy9pY29ucy9mdWxsL29iajE2L1NjZW5hcmlvTW9kZWxGaWxlLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNjZmOWZmCi0tLSAvZGV2L251bGwKKysrIGIvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS51dGlsLmFuYWx5c2lzL2ljb25zL2Z1bGwvb2JqMTYvU2NlbmFyaW9Nb2RlbEZpbGUuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0udXRpbC5hbmFseXNpcy9pY29ucy9mdWxsL29iajE2L1NlcXVlbmNlck1vZGVsRmlsZS5naWYgYi9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLnV0aWwuYW5hbHlzaXMvaWNvbnMvZnVsbC9vYmoxNi9TZXF1ZW5jZXJNb2RlbEZpbGUuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVhN2VkOWIKLS0tIC9kZXYvbnVsbAorKysgYi9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLnV0aWwuYW5hbHlzaXMvaWNvbnMvZnVsbC9vYmoxNi9TZXF1ZW5jZXJNb2RlbEZpbGUuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0udXRpbC5hbmFseXNpcy9pY29ucy9mdWxsL29iajE2L1RyaWdnZXJNb2RlbEZpbGUuZ2lmIGIvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS51dGlsLmFuYWx5c2lzL2ljb25zL2Z1bGwvb2JqMTYvVHJpZ2dlck1vZGVsRmlsZS5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTMxNjAzOAotLS0gL2Rldi9udWxsCisrKyBiL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0udXRpbC5hbmFseXNpcy9pY29ucy9mdWxsL29iajE2L1RyaWdnZXJNb2RlbEZpbGUuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0udXRpbC5hbmFseXNpcy9pY29ucy9mdWxsL3dpemJhbi9OZXdDb21tb24uZ2lmIGIvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS51dGlsLmFuYWx5c2lzL2ljb25zL2Z1bGwvd2l6YmFuL05ld0NvbW1vbi5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjU5NzA0YwotLS0gL2Rldi9udWxsCisrKyBiL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0udXRpbC5hbmFseXNpcy9pY29ucy9mdWxsL3dpemJhbi9OZXdDb21tb24uZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0udXRpbC5hbmFseXNpcy9pY29ucy9mdWxsL3dpemJhbi9OZXdFeHBlcmltZW50LmdpZiBiL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0udXRpbC5hbmFseXNpcy9pY29ucy9mdWxsL3dpemJhbi9OZXdFeHBlcmltZW50LmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNmI0MmU3Ci0tLSAvZGV2L251bGwKKysrIGIvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS51dGlsLmFuYWx5c2lzL2ljb25zL2Z1bGwvd2l6YmFuL05ld0V4cGVyaW1lbnQuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0udXRpbC5hbmFseXNpcy9pY29ucy9mdWxsL3dpemJhbi9OZXdHcmFwaC5naWYgYi9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLnV0aWwuYW5hbHlzaXMvaWNvbnMvZnVsbC93aXpiYW4vTmV3R3JhcGguZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYzODI5ZWQKLS0tIC9kZXYvbnVsbAorKysgYi9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLnV0aWwuYW5hbHlzaXMvaWNvbnMvZnVsbC93aXpiYW4vTmV3R3JhcGguZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0udXRpbC5hbmFseXNpcy9pY29ucy9mdWxsL3dpemJhbi9OZXdNb2RlbC5naWYgYi9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLnV0aWwuYW5hbHlzaXMvaWNvbnMvZnVsbC93aXpiYW4vTmV3TW9kZWwuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRjZjdmODkKLS0tIC9kZXYvbnVsbAorKysgYi9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLnV0aWwuYW5hbHlzaXMvaWNvbnMvZnVsbC93aXpiYW4vTmV3TW9kZWwuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0udXRpbC5hbmFseXNpcy9pY29ucy9mdWxsL3dpemJhbi9OZXdTY2VuYXJpby5naWYgYi9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLnV0aWwuYW5hbHlzaXMvaWNvbnMvZnVsbC93aXpiYW4vTmV3U2NlbmFyaW8uZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU4NWYxZGEKLS0tIC9kZXYvbnVsbAorKysgYi9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLnV0aWwuYW5hbHlzaXMvaWNvbnMvZnVsbC93aXpiYW4vTmV3U2NlbmFyaW8uZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0udXRpbC5hbmFseXNpcy9pY29ucy9mdWxsL3dpemJhbi9OZXdTZXF1ZW5jZXIuZ2lmIGIvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS51dGlsLmFuYWx5c2lzL2ljb25zL2Z1bGwvd2l6YmFuL05ld1NlcXVlbmNlci5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjllODBmMAotLS0gL2Rldi9udWxsCisrKyBiL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0udXRpbC5hbmFseXNpcy9pY29ucy9mdWxsL3dpemJhbi9OZXdTZXF1ZW5jZXIuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0udXRpbC5hbmFseXNpcy9pY29ucy9zYW1wbGUuZ2lmIGIvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS51dGlsLmFuYWx5c2lzL2ljb25zL3NhbXBsZS5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzRmYjNjOQotLS0gL2Rldi9udWxsCisrKyBiL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0udXRpbC5hbmFseXNpcy9pY29ucy9zYW1wbGUuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0udXRpbC5hbmFseXNpcy9wbHVnaW4ucHJvcGVydGllcyBiL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0udXRpbC5hbmFseXNpcy9wbHVnaW4ucHJvcGVydGllcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNDNiMzkzCi0tLSAvZGV2L251bGwKKysrIGIvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS51dGlsLmFuYWx5c2lzL3BsdWdpbi5wcm9wZXJ0aWVzCkBAIC0wLDAgKzEsNiBAQAorCitwbHVnaW5OYW1lID0gU1RFTSBDaGFydCBhbmQgQW5hbHlzaXMgVXRpbGl0aWVzCitwcm92aWRlck5hbWUgPSBFY2xpcHNlLm9yZworCisjIFBlcnNwZWN0aXZlcworX1VUSUxfQW5hbHlzaXNfUGVyc3BlY3RpdmUgPSBBbmFseXNpcwpkaWZmIC0tZ2l0IGEvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS51dGlsLmFuYWx5c2lzL3BsdWdpbi54bWwgYi9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLnV0aWwuYW5hbHlzaXMvcGx1Z2luLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YzQ1YzQzCi0tLSAvZGV2L251bGwKKysrIGIvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS51dGlsLmFuYWx5c2lzL3BsdWdpbi54bWwKQEAgLTAsMCArMSw3OCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzw/ZWNsaXBzZSB2ZXJzaW9uPSIzLjIiPz4KKzxwbHVnaW4+CisgICA8ZXh0ZW5zaW9uCisgICAgICAgICBpZD0ib3JnLmVjbGlwc2Uuc3RlbS51aS5TVEVNUGVyc3BlY3RpdmUiCisgICAgICAgICBwb2ludD0ib3JnLmVjbGlwc2UudWkucGVyc3BlY3RpdmVzIj4KKyAgICAgIDxwZXJzcGVjdGl2ZQorICAgICAgICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLnN0ZW0udXRpbC5hbmFseXNpcy5wZXJzcGVjdGl2ZXMuQW5hbHlzaXMiCisgICAgICAgICAgICBpY29uPSJpY29ucy9mdWxsL2N1c3RvbW9iajE2L0FuYWx5c2lzLmdpZiIKKyAgICAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5zdGVtLnV0aWwuYW5hbHlzaXMucGVyc3BlY3RpdmVzLlNURU1BbmFseXNpc1BlcnNwZWN0aXZlIgorICAgICAgICAgICAgbmFtZT0iJV9VVElMX0FuYWx5c2lzX1BlcnNwZWN0aXZlIj4KKyAgICAgIDwvcGVyc3BlY3RpdmU+CisgICA8L2V4dGVuc2lvbj4KKworICAgPGV4dGVuc2lvbgorICAgICAgICAgcG9pbnQ9Im9yZy5lY2xpcHNlLnVpLnZpZXdzIj4KKyAgICAgIDx2aWV3CisgICAgICAgICAgICBhbGxvd011bHRpcGxlPSJ0cnVlIgorICAgICAgICAgICAgY2F0ZWdvcnk9Im9yZy5lY2xpcHNlLnN0ZW0udWkudmlld3MiCisgICAgICAgICAgICBjbGFzcz0ib3JnLmVjbGlwc2Uuc3RlbS51dGlsLmFuYWx5c2lzLnZpZXdzLkVzdGltYXRvclZpZXciCisgICAgICAgICAgICBpY29uPSJpY29ucy9zYW1wbGUuZ2lmIgorICAgICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLnN0ZW0udXRpbC5hbmFseXNpcy52aWV3cy5lc3RpbWF0b3IiCisgICAgICAgICAgICBuYW1lPSJFc3RpbWF0b3IiPgorICAgICAgICAgUmVwb3J0cworICAgICAgPC92aWV3PgorICAgICAgPHZpZXcKKyAgICAgICAgICAgIGFsbG93TXVsdGlwbGU9InRydWUiCisgICAgICAgICAgICBjYXRlZ29yeT0ib3JnLmVjbGlwc2Uuc3RlbS51aS52aWV3cyIKKyAgICAgICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS5zdGVtLnV0aWwuYW5hbHlzaXMudmlld3MuU2NlbmFyaW9Db21wYXJpc29uVmlldyIKKyAgICAgICAgICAgIGljb249Imljb25zL3NhbXBsZS5naWYiCisgICAgICAgICAgICBpZD0ib3JnLmVjbGlwc2Uuc3RlbS51dGlsLmFuYWx5c2lzLnZpZXdzLmNvbXBhcmlzb24iCisgICAgICAgICAgICBuYW1lPSJTY2VuYXJpb0NvbXBhcmlzb24iCisgICAgICAgICAgICByZXN0b3JhYmxlPSJ0cnVlIj4KKyAgICAgIDwvdmlldz4KKyAgICAgIDx2aWV3CisgICAgICAgICAgICBhbGxvd011bHRpcGxlPSJ0cnVlIgorICAgICAgICAgICAgY2F0ZWdvcnk9Im9yZy5lY2xpcHNlLnN0ZW0udWkudmlld3MiCisgICAgICAgICAgICBjbGFzcz0ib3JnLmVjbGlwc2Uuc3RlbS51dGlsLmFuYWx5c2lzLnZpZXdzLkx5YXB1bm92VmlldyIKKyAgICAgICAgICAgIGljb249Imljb25zL3NhbXBsZS5naWYiCisgICAgICAgICAgICBpZD0ib3JnLmVjbGlwc2Uuc3RlbS51dGlsLmFuYWx5c2lzLnZpZXdzLmx5YXB1bm92IgorICAgICAgICAgICAgbmFtZT0iTHlhcHVub3YiCisgICAgICAgICAgICByZXN0b3JhYmxlPSJ0cnVlIj4KKyAgICAgIDwvdmlldz4KKyAgICAgICA8dmlldworICAgICAgICAgICAgYWxsb3dNdWx0aXBsZT0idHJ1ZSIKKyAgICAgICAgICAgIGNhdGVnb3J5PSJvcmcuZWNsaXBzZS5zdGVtLnVpLnZpZXdzIgorICAgICAgICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLnN0ZW0udXRpbC5hbmFseXNpcy52aWV3cy5FcGlkZW1pY1ZpZXciCisgICAgICAgICAgICBpY29uPSJpY29ucy9zYW1wbGUuZ2lmIgorICAgICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLnN0ZW0udXRpbC5hbmFseXNpcy52aWV3cy5hZ2dyZWdhdGUiCisgICAgICAgICAgICBuYW1lPSJFcGlkZW1pYyIKKyAgICAgICAgICAgIHJlc3RvcmFibGU9InRydWUiPgorICAgICAgPC92aWV3PgorICAgICAgPHZpZXcKKyAgICAgICAgICAgIGFsbG93TXVsdGlwbGU9InRydWUiCisgICAgICAgICAgICBjYXRlZ29yeT0ib3JnLmVjbGlwc2Uuc3RlbS51aS52aWV3cyIKKyAgICAgICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS5zdGVtLnV0aWwuYW5hbHlzaXMudmlld3MuUHJvY2Vzc29yVmlldyIKKyAgICAgICAgICAgIGljb249Imljb25zL3NhbXBsZS5naWYiCisgICAgICAgICAgICBpZD0ib3JnLmVjbGlwc2Uuc3RlbS51dGlsLmFuYWx5c2lzLnZpZXdzLnByb2Nlc3NvciIKKyAgICAgICAgICAgIG5hbWU9IlByb2Nlc3NvciIKKyAgICAgICAgICAgIHJlc3RvcmFibGU9InRydWUiPgorICAgICAgPC92aWV3PgorICAgPC9leHRlbnNpb24+CisgICA8ZXh0ZW5zaW9uCisgICAgICAgICBwb2ludD0ib3JnLmVjbGlwc2UudWkucG9wdXBNZW51cyI+CisgICAgICA8dmlld2VyQ29udHJpYnV0aW9uCisgICAgICAgICAgICBpZD0ib3JnLmVjbGlwc2Uuc3RlbS51dGlsLmFuYWx5c2lzLnZpZXdzIgorICAgICAgICAgICAgdGFyZ2V0SUQ9Im9yZy5lY2xpcHNlLnN0ZW0udWkudmlld3MuZ2VvZ3JhcGhpYy5tYXAuY29udGV4dCI+CisgICAgICAgICA8YWN0aW9uCisgICAgICAgICAgICAgICBjbGFzcz0ib3JnLmVjbGlwc2Uuc3RlbS51dGlsLmFuYWx5c2lzLnZpZXdzLlJlcG9ydHNDb250ZXh0TWVudUFjdGlvbiIKKyAgICAgICAgICAgICAgIGlkPSJBbmFseXNpcyIKKyAgICAgICAgICAgICAgIGxhYmVsPSJBbmFseXNpcyIKKyAgICAgICAgICAgICAgIG1lbnViYXJQYXRoPSJyZXBvcnRzL2FkZGl0aW9ucyIKKyAgICAgICAgICAgICAgIHN0YXRlPSJ0cnVlIj4KKyAgICAgICAgIDwvYWN0aW9uPgorICAgICAgPC92aWV3ZXJDb250cmlidXRpb24+CisgICA8L2V4dGVuc2lvbj4KKworPC9wbHVnaW4+CmRpZmYgLS1naXQgYS9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLnV0aWwuYW5hbHlzaXMvcGx1Z2luX2RlLnByb3BlcnRpZXMgYi9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLnV0aWwuYW5hbHlzaXMvcGx1Z2luX2RlLnByb3BlcnRpZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2EyMDY1MgotLS0gL2Rldi9udWxsCisrKyBiL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0udXRpbC5hbmFseXNpcy9wbHVnaW5fZGUucHJvcGVydGllcwpAQCAtMCwwICsxLDYgQEAKKworcGx1Z2luTmFtZT1TVEVNIEdyYWZpay0gdW5kIEFuYWx5c2V3ZXJremV1Z2UKK3Byb3ZpZGVyTmFtZT1FY2xpcHNlLm9yZworCisjIFBlcnNwZWN0aXZlcworX1VUSUxfQW5hbHlzaXNfUGVyc3BlY3RpdmU9QW5hbHlzZQpkaWZmIC0tZ2l0IGEvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS51dGlsLmFuYWx5c2lzL3BsdWdpbl9rci5wcm9wZXJ0aWVzIGIvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS51dGlsLmFuYWx5c2lzL3BsdWdpbl9rci5wcm9wZXJ0aWVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdmNDJhYWYKLS0tIC9kZXYvbnVsbAorKysgYi9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLnV0aWwuYW5hbHlzaXMvcGx1Z2luX2tyLnByb3BlcnRpZXMKQEAgLTAsMCArMSw2IEBACisKK3BsdWdpbk5hbWU9U1RFTSBcdWNjMjhcdWQyYjggXHViZDg0XHVjMTFkIFx1YzcyMFx1ZDJmOFx1YjlhY1x1ZDJmMAorcHJvdmlkZXJOYW1lPUVjbGlwc2Uub3JnCisKKyMgUGVyc3BlY3RpdmVzCitfVVRJTF9BbmFseXNpc19QZXJzcGVjdGl2ZT1cdWJkODRcdWMxMWQKZGlmZiAtLWdpdCBhL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0udXRpbC5hbmFseXNpcy9wbHVnaW5femgucHJvcGVydGllcyBiL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0udXRpbC5hbmFseXNpcy9wbHVnaW5femgucHJvcGVydGllcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNDhiMGRkCi0tLSAvZGV2L251bGwKKysrIGIvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS51dGlsLmFuYWx5c2lzL3BsdWdpbl96aC5wcm9wZXJ0aWVzCkBAIC0wLDAgKzEsNiBAQAorCitwbHVnaW5OYW1lPVNURU1cdTU2ZmVcdTg4NjhcdTU0OGNcdTUyMDZcdTY3OTBcdTVkZTVcdTUxNzcKK3Byb3ZpZGVyTmFtZT1FY2xpcHNlLm9yZworCisjIFBlcnNwZWN0aXZlcworX1VUSUxfQW5hbHlzaXNfUGVyc3BlY3RpdmU9XHU1MjA2XHU2NzkwCmRpZmYgLS1naXQgYS9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLnV0aWwuYW5hbHlzaXMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdXRpbC9hbmFseXNpcy9BY3RpdmF0b3IuamF2YSBiL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0udXRpbC5hbmFseXNpcy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91dGlsL2FuYWx5c2lzL0FjdGl2YXRvci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU3MzUyODQKLS0tIC9kZXYvbnVsbAorKysgYi9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLnV0aWwuYW5hbHlzaXMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdXRpbC9hbmFseXNpcy9BY3RpdmF0b3IuamF2YQpAQCAtMCwwICsxLDE0NyBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnV0aWwuYW5hbHlzaXM7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYsIDIwMDcsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlN0YXR1czsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5yZXNvdXJjZS5JbWFnZURlc2NyaXB0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkucGx1Z2luLkFic3RyYWN0VUlQbHVnaW47CitpbXBvcnQgb3JnLm9zZ2kuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHQ7CisKKy8qKgorICogVGhlIGFjdGl2YXRvciBjbGFzcyBjb250cm9scyB0aGUgcGx1Zy1pbiBsaWZlIGN5Y2xlCisgKi8KK3B1YmxpYyBjbGFzcyBBY3RpdmF0b3IgZXh0ZW5kcyBBYnN0cmFjdFVJUGx1Z2luIHsKKworCS8qKgorCSAqIFRoZSBwbHVnLWluIElECisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUExVR0lOX0lEID0gIm9yZy5lY2xpcHNlLnN0ZW0udXRpbC5hbmFseXNpcyI7IC8vJE5PTi1OTFMtMSQKKworCS8vIFRoZSBzaGFyZWQgaW5zdGFuY2UKKwlwcml2YXRlIHN0YXRpYyBBY3RpdmF0b3IgcGx1Z2luOworCisJLyoqCisJICogVGhlIGNvbnN0cnVjdG9yCisJICovCisJcHVibGljIEFjdGl2YXRvcigpIHsKKwkJcGx1Z2luID0gdGhpczsKKwl9CisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnVpLnBsdWdpbi5BYnN0cmFjdFVJUGx1Z2luI3N0YXJ0KG9yZy5vc2dpLmZyYW1ld29yay5CdW5kbGVDb250ZXh0KQorCSAqLworCXB1YmxpYyB2b2lkIHN0YXJ0KEJ1bmRsZUNvbnRleHQgY29udGV4dCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCXN1cGVyLnN0YXJ0KGNvbnRleHQpOworCX0KKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2UudWkucGx1Z2luLkFic3RyYWN0VUlQbHVnaW4jc3RvcChvcmcub3NnaS5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dCkKKwkgKi8KKwlwdWJsaWMgdm9pZCBzdG9wKEJ1bmRsZUNvbnRleHQgY29udGV4dCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCXBsdWdpbiA9IG51bGw7CisJCXN1cGVyLnN0b3AoY29udGV4dCk7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgc2hhcmVkIGluc3RhbmNlCisJICogCisJICogQHJldHVybiB0aGUgc2hhcmVkIGluc3RhbmNlCisJICovCisJcHVibGljIHN0YXRpYyBBY3RpdmF0b3IgZ2V0RGVmYXVsdCgpIHsKKwkJcmV0dXJuIHBsdWdpbjsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIGFuIGltYWdlIGRlc2NyaXB0b3IgZm9yIHRoZSBpbWFnZSBmaWxlIGF0IHRoZSBnaXZlbiBwbHVnLWluCisJICogcmVsYXRpdmUgcGF0aAorCSAqIAorCSAqIEBwYXJhbSBwYXRoCisJICogICAgICAgICAgICB0aGUgcGF0aAorCSAqIEByZXR1cm4gdGhlIGltYWdlIGRlc2NyaXB0b3IKKwkgKi8KKwlwdWJsaWMgc3RhdGljIEltYWdlRGVzY3JpcHRvciBnZXRJbWFnZURlc2NyaXB0b3IoU3RyaW5nIHBhdGgpIHsKKwkJcmV0dXJuIGltYWdlRGVzY3JpcHRvckZyb21QbHVnaW4oUExVR0lOX0lELCBwYXRoKTsKKwl9CisKKwkvKioKKwkgKiBMb2cgYW4gZXJyb3IgdG8gdGhlIElMb2cgZm9yIHRoaXMgcGx1Z2luCisJICogCisJICogQHBhcmFtIG1lc3NhZ2UKKwkgKiAgICAgICAgICAgIHRoZSBsb2NhbGl6ZWQgZXJyb3IgbWVzc2FnZSB0ZXh0CisJICogQHBhcmFtIGV4Y2VwdGlvbgorCSAqICAgICAgICAgICAgdGhlIGFzc29jaWF0ZWQgZXhjZXB0aW9uLCBvciBudWxsCisJICovCisJcHVibGljIHN0YXRpYyB2b2lkIGxvZ0Vycm9yKFN0cmluZyBtZXNzYWdlLCBUaHJvd2FibGUgZXhjZXB0aW9uKSB7CisJCS8vIERvIHdlIGhhdmUgYSBwbHVnaW4/CisJCWlmIChwbHVnaW4gIT0gbnVsbCkgeworCQkJLy8gWWVzCisJCQlwbHVnaW4uZ2V0TG9nKCkubG9nKAorCQkJCQluZXcgU3RhdHVzKElTdGF0dXMuRVJST1IsIHBsdWdpbi5nZXRCdW5kbGUoKQorCQkJCQkJCS5nZXRTeW1ib2xpY05hbWUoKSwgMCwgbWVzc2FnZSwgZXhjZXB0aW9uKSk7CisJCX0gZWxzZSB7CisJCQkvLyBObworCQkJU3lzdGVtLm91dC5wcmludGxuKG1lc3NhZ2UpOworCQkJLy8gRXhjZXB0aW9uPworCQkJaWYgKGV4Y2VwdGlvbiAhPSBudWxsKSB7CisJCQkJLy8gWWVzCisJCQkJU3lzdGVtLm91dC5wcmludGxuKGV4Y2VwdGlvbi5nZXRNZXNzYWdlKCkpOworCQkJfSAvLyBpZgorCQl9CisJfSAvLyBsb2dFcnJvcgorCisJLyoqCisJICogTG9nIGluZm9ybWF0aW9uIHRvIHRoZSBJTG9nIGZvciB0aGlzIHBsdWdpbgorCSAqIAorCSAqIEBwYXJhbSBtZXNzYWdlCisJICogICAgICAgICAgICB0aGUgbG9jYWxpemVkIGluZm9ybWF0aW9uIG1lc3NhZ2UgdGV4dAorCSAqIEBwYXJhbSBleGNlcHRpb24KKwkgKiAgICAgICAgICAgIHRoZSBhc3NvY2lhdGVkIGV4Y2VwdGlvbiwgb3IgbnVsbAorCSAqLworCXB1YmxpYyBzdGF0aWMgdm9pZCBsb2dJbmZvcm1hdGlvbihTdHJpbmcgbWVzc2FnZSwgVGhyb3dhYmxlIGV4Y2VwdGlvbikgeworCQkvLyBEbyB3ZSBoYXZlIGEgcGx1Z2luPworCQlpZiAocGx1Z2luICE9IG51bGwpIHsKKwkJCS8vIFllcworCQkJcGx1Z2luLmdldExvZygpLmxvZygKKwkJCQkJbmV3IFN0YXR1cyhJU3RhdHVzLklORk8sIHBsdWdpbi5nZXRCdW5kbGUoKQorCQkJCQkJCS5nZXRTeW1ib2xpY05hbWUoKSwgMCwgbWVzc2FnZSwgZXhjZXB0aW9uKSk7CisJCX0gZWxzZSB7CisJCQkvLyBObworCQkJU3lzdGVtLm91dC5wcmludGxuKG1lc3NhZ2UpOworCQkJLy8gRXhjZXB0aW9uPworCQkJaWYgKGV4Y2VwdGlvbiAhPSBudWxsKSB7CisJCQkJLy8gWWVzCisJCQkJU3lzdGVtLm91dC5wcmludGxuKGV4Y2VwdGlvbi5nZXRNZXNzYWdlKCkpOworCQkJfSAvLyBpZgorCQl9CisJfSAvLyBsb2dJbmZvcm1hdGlvbgorCQorCS8qKgorCSAqIExvZyBpbmZvcm1hdGlvbiB0byB0aGUgSUxvZyBmb3IgdGhpcyBwbHVnaW4KKwkgKiBUaGUgbWV0aG9kIGlzIG92ZXJsb2FkZWQgdG8gYWxsb3cgZm9yIGxvZ0luZm9ybWF0aW9uIHdpdGhvdXQgYW4gZXJyb3IgCisJICogbWV0aG9kIHNldHMgdGhlIGVycm9yIHRvIG51bGwuIFRoaXMgc2hvdWxkIGJlIHVzZWQgaW5zdGVhZCBvZiBTeXN0ZW0ub3V0LnByaW50bG4KKwkgKiB0aHJvdWdob3V0IHRoZSBjb2RlLgorCSAqIEBwYXJhbSBtZXNzYWdlCisJICogICAgICAgICAgICB0aGUgbG9jYWxpemVkIGluZm9ybWF0aW9uIG1lc3NhZ2UgdGV4dAorCSAqCisJICovCisJcHVibGljIHN0YXRpYyB2b2lkIGxvZ0luZm9ybWF0aW9uKFN0cmluZyBtZXNzYWdlKSB7CisJCWlmKHBsdWdpbiAhPSBudWxsKSAKKwkJCXBsdWdpbi5nZXRMb2coKS5sb2coCisJCQkJbmV3IFN0YXR1cyhJU3RhdHVzLklORk8sIHBsdWdpbi5nZXRCdW5kbGUoKS5nZXRTeW1ib2xpY05hbWUoKSwKKwkJCQkJCTAsIG1lc3NhZ2UsIG51bGwpKTsKKwkJCWVsc2UgCisJCQkJLy8gTm8KKwkJCQlTeXN0ZW0ub3V0LnByaW50bG4obWVzc2FnZSk7CisJfSAvLyBsb2dJbmZvcm1hdGlvbgorCQorfSAvLyBBY3RpdmF0b3IKZGlmZiAtLWdpdCBhL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0udXRpbC5hbmFseXNpcy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91dGlsL2FuYWx5c2lzL0FnZ3JlZ2F0ZURhdGFXcml0ZXIuamF2YSBiL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0udXRpbC5hbmFseXNpcy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91dGlsL2FuYWx5c2lzL0FnZ3JlZ2F0ZURhdGFXcml0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMWMyYzhiCi0tLSAvZGV2L251bGwKKysrIGIvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS51dGlsLmFuYWx5c2lzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3V0aWwvYW5hbHlzaXMvQWdncmVnYXRlRGF0YVdyaXRlci5qYXZhCkBAIC0wLDAgKzEsMzY4IEBACisvLyBBZ2dyZWdhdGVEYXRhV3JpdGVyCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0udXRpbC5hbmFseXNpczsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNywyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGphdmEuaW8uRmlsZTsKK2ltcG9ydCBqYXZhLmlvLkZpbGVXcml0ZXI7CitpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OworaW1wb3J0IGphdmEudXRpbC5IYXNoU2V0OworaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuTWFwOworaW1wb3J0IGphdmEudXRpbC5TZXQ7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5SZXNvdXJjZXNQbHVnaW47CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQYXRoOworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QYXRoOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuaW1wbC5SZWZlcmVuY2VTY2VuYXJpb0RhdGFNYXBJbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuaW1wbC5SZWZlcmVuY2VTY2VuYXJpb0RhdGFNYXBJbXBsLlJlZmVyZW5jZVNjZW5hcmlvRGF0YUluc3RhbmNlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5BY3RpdmF0b3I7CisKKy8qKgorICogd3JpdGVzIENTViBGaWxlcworICogCisgKi8KK3B1YmxpYyBjbGFzcyBBZ2dyZWdhdGVEYXRhV3JpdGVyIHsKKworCS8vIHByaXZhdGUgc3RhdGljIGZpbmFsIERhdGVGb3JtYXQgZGYgPQorCS8vIERhdGVGb3JtYXQuZ2V0RGF0ZVRpbWVJbnN0YW5jZShEYXRlRm9ybWF0LlNIT1JULERhdGVGb3JtYXQuTUVESVVNKTsKKworCS8qKgorCSAqIAorCSAqLworCXByaXZhdGUgZmluYWwgU3RyaW5nIGFnZ3JlZ2F0ZUZpbGVOYW1lOworCQorCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBrZXlTID0gIlMiOworCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBrZXlFID0gIkUiOworCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBrZXlJID0gIkkiOworCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBrZXlSID0gIlIiOworCQorCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBrZXlCaXJ0aHMgPSAiQmlydGhzIjsKKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcga2V5RGVhdGhzID0gIkRlYXRocyI7CisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIGtleVBvcHVsYXRpb24gPSAiUG9wdWxhdGlvbiI7CisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIGtleURlbHRhQmlydGhzID0gImRlbHRhQmlydGhzIjsKKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcga2V5RGVsdGFEZWF0aHMgPSAiZGVsdGFEZWF0aHMiOworCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBrZXlJbmNpZGVuY2UgPSAiSW5jaWRlbmNlIjsKKwlwcml2YXRlIHN0YXRpYyBMaXN0PFN0cmluZz4gYmlydGhzTGlzdD1udWxsOworCXByaXZhdGUgc3RhdGljIExpc3Q8U3RyaW5nPiBkZWF0aHNMaXN0PW51bGw7CisJcHJpdmF0ZSBzdGF0aWMgTGlzdDxTdHJpbmc+IGRlbHRhQmlydGhzTGlzdD1uZXcgQXJyYXlMaXN0PFN0cmluZz4oKTsKKwlwcml2YXRlIHN0YXRpYyBMaXN0PFN0cmluZz4gZGVsdGFEZWF0aHNMaXN0PW5ldyBBcnJheUxpc3Q8U3RyaW5nPigpOworCQorCS8qKgorCSAqIGluZGljYXRlcyBpZiBiaXJ0aCBjb3VudHMgZXhpc3QgaW4gZGF0YSBzZXQKKwkgKi8KKwlwcml2YXRlIGJvb2xlYW4gaGF2ZUJpcnRocyA9IGZhbHNlOworCS8qKgorCSAqIGluZGljYXRlcyBpZiBkZWF0aCBjb3VudHMgZXhpc3QgaW4gZGF0YSBzZXQKKwkgKi8KKwlwcml2YXRlIGJvb2xlYW4gaGF2ZURlYXRocyA9IGZhbHNlOworCS8qKiAKKwkgKiBCaXJ0aHMgYXJlIHN0b3JlZCBjdW11bGF0aXZlbHkgYnV0IHdlIHdhbnQgdG8gbG9nIHRoZSBkZXJpdmF0aXZlCisJICogc28gd2Ugd2lsbCBzdG9yZSB0aGUgcHJldmlvdXMgdmFsdWUgYW5kIHN1YnRyYWN0IGl0IHRvIGdldCB0aGUgaW5zdGFudGFuZW91cyB2YWx1ZQorCSAqLworCXByaXZhdGUgc3RhdGljIGRvdWJsZSBwYXN0QmlydGhzID0gMC4wOworCS8qKiAKKwkgKiBEZWF0aHMgYXJlIHN0b3JlZCBjdW11bGF0aXZlbHkgYnV0IHdlIHdhbnQgdG8gbG9nIHRoZSBkZXJpdmF0aXZlCisJICogc28gd2Ugd2lsbCBzdG9yZSB0aGUgcHJldmlvdXMgdmFsdWUgYW5kIHN1YnRyYWN0IGl0IHRvIGdldCB0aGUgaW5zdGFudGFuZW91cyB2YWx1ZQorCSAqLworCXByaXZhdGUgc3RhdGljIGRvdWJsZSBwYXN0RGVhdGhzID0gMC4wOworCQorCQorCXByaXZhdGUgc3RhdGljIGZpbmFsIElQYXRoIFBBVEggPSBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuZ2V0Um9vdCgpLmdldExvY2F0aW9uKCk7CisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIHNlcCA9IEZpbGUuc2VwYXJhdG9yOworCQorCS8qKgorCSAqIERpcmVjdG9yeSBjb250YWluaW5nIHNjZW5hcmlvIGZvbGRlcnMKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBBTkFMWVNJU0ZPTERFUiA9IFBBVEgudG9PU1N0cmluZygpOworCisJLyoqCisJICogRm9sZGVyIG5hbWUgZm9yIGZpbGVzIGNvbnRhaW5pbmcgYWdncmVnYXRlIGRhdGEKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBBR0dSRUdBVEVfRk9MREVSTkFNRSA9ICJhZ2dyZWdhdGUiOworCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBhZ2dyZWdhdGVQYXRoU3VmZml4ID0gQUdHUkVHQVRFX0ZPTERFUk5BTUUrc2VwOworCS8vIFRPRE8gZm9yIG5vdyBhbGwgYWdncmVnYXRlIGRhdGEgd2lsbCBiZSBpbiBvbmUgZm9sZGVyIGNhbGxlZCBjc3YvYWdncmVnYXRlCisJcHJpdmF0ZSBTdHJpbmcgYWdncmVnYXRlRGlyZWN0b3J5TmFtZSA9IFBBVEguYXBwZW5kKHNlcCArIGFnZ3JlZ2F0ZVBhdGhTdWZmaXgpLnRvT1NTdHJpbmcoKTsKKwkKKwlwcml2YXRlIEZpbGVXcml0ZXIgZncxOworCisJLyoqCisJICogCisJICogQHBhcmFtIGRhdGFGb2xkZXIKKwkgKiBAcGFyYW0gYWdncmVnYXRlRGF0YUZpbGVOYW1lCisJICovCisJcHVibGljIEFnZ3JlZ2F0ZURhdGFXcml0ZXIoZmluYWwgU3RyaW5nIGRhdGFGb2xkZXIsIGZpbmFsIFN0cmluZyBhZ2dyZWdhdGVEYXRhRmlsZU5hbWUpIHsKKwkJLy8gRGV0ZXJtaW5lIHRoZSBhZ2dyZWdhdGUgZm9sZGVyIG5hbWUgZnJvbSB0aGUgZGF0YSBmb2xkZXIKKwkJSVBhdGggcCA9IG5ldyBQYXRoKGRhdGFGb2xkZXIpOworCQlwID0gcC5yZW1vdmVMYXN0U2VnbWVudHMoMSk7IC8vIGdldCByaWQgb2YgZGlzZWFzZSBmb2xkZXIKKwkJcCA9IHAuYXBwZW5kKEFHR1JFR0FURV9GT0xERVJOQU1FKTsKKwkJdGhpcy5hZ2dyZWdhdGVEaXJlY3RvcnlOYW1lID0gcC50b09TU3RyaW5nKCk7CisJCS8vIGNoZWNrIHRoYXQgdGhlIGRpcmVjdG9yeSBleGlzdHMJCisJCWZpbmFsIEZpbGUgZGlyID0gbmV3IEZpbGUodGhpcy5hZ2dyZWdhdGVEaXJlY3RvcnlOYW1lKTsKKwkJaWYgKCghZGlyLmV4aXN0cygpKSB8fCAoIWRpci5pc0RpcmVjdG9yeSgpKSkgeworCQkJLy8gY3JlYXRlIGl0LgorCQkJYm9vbGVhbiBzdWNjZXNzID0gZGlyLm1rZGlycygpOworCQkJaWYgKCFzdWNjZXNzKSB7CisJCQkJQWN0aXZhdG9yLmxvZ0Vycm9yKAorCQkJCQkJIkZhaWxlZCB0byBDcmVhdGUgRGlyZWN0b3J5IiArIGFnZ3JlZ2F0ZURpcmVjdG9yeU5hbWUsCisJCQkJCQluZXcgSU9FeGNlcHRpb24oIkZhaWxlZCB0byBDcmVhdGUgRHJpZWN0b3J5IgorCQkJCQkJCQkrIGFnZ3JlZ2F0ZURpcmVjdG9yeU5hbWUpKTsKKwkJCX0KKwkJfQorCQkKKwkJYWdncmVnYXRlRmlsZU5hbWUgPSBhZ2dyZWdhdGVEaXJlY3RvcnlOYW1lK3NlcCthZ2dyZWdhdGVEYXRhRmlsZU5hbWU7CisJCXRyeSB7CisJCQlmdzEgPSBuZXcgRmlsZVdyaXRlcihhZ2dyZWdhdGVGaWxlTmFtZSk7CisJCX0gY2F0Y2ggKGZpbmFsIElPRXhjZXB0aW9uIGUpIHsKKwkJCUFjdGl2YXRvci5sb2dFcnJvcigiRXJyb3Igb3BlbmluZyBkYXRhIGZpbGUiICArIGFnZ3JlZ2F0ZURpcmVjdG9yeU5hbWUgKyAiICIrIGFnZ3JlZ2F0ZUZpbGVOYW1lLCBlKTsKKwkJfQorCX0gLy8gQWdncmVnYXRlRGF0YVdyaXRlcgorCisJLyoqCisJICogbG9nIHRoZSBkYXRhIGZvciBhbiBpbnN0YW5jZQorCSAqIEBwYXJhbSBkYXRhCisJICogQHBhcmFtIGFscGhhIHRoZSBpbW11bml0eSBMb3NzIFJhdGUKKwkgKiBAcmV0dXJuIEZpbGVuYW1lIChpbmNsdWRpbmcgcGF0aCkgb2YgbG9nIGZpbGUKKwkgKi8KKwlwdWJsaWMgU3RyaW5nIGxvZ0RhdGFJbnN0YW5jZShmaW5hbCBSZWZlcmVuY2VTY2VuYXJpb0RhdGFJbnN0YW5jZSBkYXRhLCBkb3VibGUgYWxwaGEpIHsKKwkJICAgIAorCQkgICAgU3RyaW5nW10gcmV0VmFsID0gbmV3IFN0cmluZ1syXTsKKwkJCU1hcDxTdHJpbmcsTGlzdDxTdHJpbmc+PiBpbnN0YW5jZSA9IGRhdGEuZ2V0SW5zdGFuY2UoKTsJCisJCQlTZXQ8U3RyaW5nPiBrZXlTZXQgPSBpbnN0YW5jZS5rZXlTZXQoKTsKKwkJCVN0cmluZ1tdIGtleXMgPSBzb3J0S2V5cyhrZXlTZXQsIGRhdGEpOworCQkJCisJCQlMaXN0PFN0cmluZz4gZGF0YUxpc3QgPSBpbnN0YW5jZS5nZXQoa2V5c1swXSk7CisJCQkKKwkJCVN0cmluZyBoZWFkZXIgPSBrZXlzWzBdOyAvLyB0aGlzIGlzIHRoZSBJVEVSQVRJT05fS0VZID0gIml0ZXJhdGlvbiI7IGNvbHVtbgorCQkJU3RyaW5nQnVpbGRlciBzdHJCbGRyID0gbmV3IFN0cmluZ0J1aWxkZXIoaGVhZGVyKTsKKwkJCWZvciAoaW50IGkgPSAxOyBpIDwga2V5cy5sZW5ndGg7IGkgKyspIHsKKwkJCQkvLyBsb2cgdGhlIGhlYWRlcgorCQkJCXN0ckJsZHIuYXBwZW5kKCIsIik7CisJCQkJc3RyQmxkci5hcHBlbmQoa2V5c1tpXS50b1N0cmluZygpLnRyaW0oKSk7CisJCQl9CisJCQlzdHJCbGRyLmFwcGVuZCgiXG4iKTsKKwkJCQorCQkJdHJ5IHsKKwkJCQlmdzEuYXBwZW5kKHN0ckJsZHIudG9TdHJpbmcoKSk7CisJCQl9IGNhdGNoIChmaW5hbCBJT0V4Y2VwdGlvbiBlKSB7CisJCQkJQWN0aXZhdG9yLmxvZ0Vycm9yKCJFcnJvciB3cml0aW5nIGFnZ3JlZ2F0ZSBkYXRhIGZpbGUiICArIGFnZ3JlZ2F0ZURpcmVjdG9yeU5hbWUgKyAiICIrIGFnZ3JlZ2F0ZUZpbGVOYW1lLCBlKTsKKwkJCX0KKwkJCQorCQkJLy8gZ2V0IHRoZSBiaXJ0aHMgCisJCQliaXJ0aHNMaXN0ID0gZGF0YS5nZXRJbnN0YW5jZSgpLmdldChrZXlCaXJ0aHMpOworCQkJZGF0YS5nZXRJbnN0YW5jZSgpLnB1dChrZXlCaXJ0aHMsIGJpcnRoc0xpc3QpOworCQkJCisJCQkvLyBnZXQgdGhlIGRlYXRocyBsaXN0CisJCQlkZWF0aHNMaXN0ID0gZGF0YS5nZXRJbnN0YW5jZSgpLmdldChrZXlEZWF0aHMpOworCQkJZGF0YS5nZXRJbnN0YW5jZSgpLnB1dChrZXlEZWF0aHMsIGRlYXRoc0xpc3QpOworCQkJCisJCQkKKwkJCWludCBkYXRhU2l6ZSA9IGRhdGFMaXN0LnNpemUoKTsKKwkJCS8vIHdyaXRlIHRoZSBkYXRhCisJCQlmb3IoaW50IGkgPSAwOyBpIDwgZGF0YVNpemU7IGkgKyspIHsKKwkJCQkvLyBnZXQgdGhlIGZpcnN0IGNvbHVtbiAoIml0ZXJhdGlvbnMiKQorCQkJCVN0cmluZyBrZXkgPSBrZXlzWzBdLnRvU3RyaW5nKCk7CisJCQkJTGlzdDxTdHJpbmc+IHZhbHVlTGlzdCA9IGRhdGEuZ2V0SW5zdGFuY2UoKS5nZXQoa2V5KTsKKwkJCQkKKwkJCQlzdHJCbGRyID0gbmV3IFN0cmluZ0J1aWxkZXIoKTsKKwkJCQlzdHJCbGRyLmFwcGVuZCh2YWx1ZUxpc3QuZ2V0KGkpKTsKKwkJCQlzdHJCbGRyLmFwcGVuZCgiICIpOworCisJCQkJZm9yIChpbnQgaiA9IDE7IGogPCBrZXlzLmxlbmd0aDsgaisrKSB7CisJCQkJCWtleSA9IGtleXNbal0udG9TdHJpbmcoKTsKKwkJCQkJdmFsdWVMaXN0ID0gZGF0YS5nZXRJbnN0YW5jZSgpLmdldChrZXkpOwkKKwkJCQkJc3RyQmxkci5hcHBlbmQoIiwgIik7CisJCQkJCXN0ckJsZHIuYXBwZW5kKHZhbHVlTGlzdC5nZXQoaSkpOworCQkJCX0vLyBmb3IgYWxsIGtleXMKKwkJCQlzdHJCbGRyLmFwcGVuZCgiXG4iKTsKKwkJCQl0cnkgeworCQkJCQlmdzEuYXBwZW5kKHN0ckJsZHIudG9TdHJpbmcoKSk7CisJCQkJfSBjYXRjaCAoZmluYWwgSU9FeGNlcHRpb24gZSkgeworCQkJCQlBY3RpdmF0b3IubG9nRXJyb3IoIkVycm9yIHdyaXRpbmcgYWdncmVnYXRlIGRhdGEgZmlsZSIgICsgYWdncmVnYXRlRGlyZWN0b3J5TmFtZSArIGFnZ3JlZ2F0ZUZpbGVOYW1lLCBlKTsKKwkJCQl9CisJCQl9Ly8gZm9yIGFsbCBwb2ludHMKKwkJCQorCQkJLy9zdHIgPSAiIjsKKwkJCXRyeSB7CisJCQkJaWYgKGZ3MSAhPSBudWxsKSB7CisJCQkJCWZ3MS5mbHVzaCgpOworCQkJCQlmdzEuY2xvc2UoKTsKKwkJCQl9CisJCQl9IGNhdGNoIChmaW5hbCBJT0V4Y2VwdGlvbiBlKSB7CisJCQkJLy8gZG8gbm90aGluZworCQkJfQorCQkJCisJCQloYXZlQmlydGhzID0gZmFsc2U7CisJCQlpZihiaXJ0aHNMaXN0IT1udWxsKSB7CisJCQkJaGF2ZUJpcnRocyA9IHRydWU7CisJCQkJLy8gZ2V0IHRoZSBkZXJpdmF0aXZlIGZvciB0aGUgYmlydGhzIGxpc3QKKwkJCQlmb3IgKGludCBpID0gMDtpIDwgYmlydGhzTGlzdC5zaXplKCk7IGkgKyspIHsKKwkJCQkJZGVsdGFCaXJ0aHNMaXN0LmFkZChpLGJpcnRoc0xpc3QuZ2V0KGkpKTsKKwkJCQl9CisJCQkJaWYgKGRlbHRhQmlydGhzTGlzdCAhPSBudWxsKSB7CisJCQkJCXBhc3RCaXJ0aHMgPSAwOworCQkJCQlmb3IgKGludCBpaSA9IDA7IGlpIDwgZGVsdGFCaXJ0aHNMaXN0LnNpemUoKTsgaWkrKykgeworCQkJCQkJZmluYWwgZG91YmxlIGJpcnRocyA9IChuZXcgRG91YmxlKGRlbHRhQmlydGhzTGlzdC5nZXQoaWkpKSkuZG91YmxlVmFsdWUoKTsKKwkJCQkJCWRlbHRhQmlydGhzTGlzdC5zZXQoaWksICIiICsgKGJpcnRocyAtIHBhc3RCaXJ0aHMpKTsKKwkJCQkJCXBhc3RCaXJ0aHMgPSBiaXJ0aHM7CisJCQkJCX0KKwkJCQl9CisJCQl9CisJCQkKKwkJCWhhdmVEZWF0aHMgPSBmYWxzZTsKKwkJCWlmKGRlYXRoc0xpc3QhPW51bGwpIHsKKwkJCQloYXZlRGVhdGhzID0gdHJ1ZTsKKwkJCQkvLyBnZXQgdGhlIGRlcml2YXRpdmUgZm9yIHRoZSBkZWF0aHMgbGlzdAorCQkJCWZvciAoaW50IGkgPSAwO2kgPCBkZWF0aHNMaXN0LnNpemUoKTsgaSArKykgeworCQkJCQlkZWx0YURlYXRoc0xpc3QuYWRkKGksZGVhdGhzTGlzdC5nZXQoaSkpOworCQkJCX0KKwkJCQlpZiAoZGVsdGFEZWF0aHNMaXN0ICE9IG51bGwpIHsKKwkJCQkJcGFzdERlYXRocyA9IDA7CisJCQkJCWZvciAoaW50IGlpID0gMDsgaWkgPCBkZWx0YURlYXRoc0xpc3Quc2l6ZSgpOyBpaSsrKSB7CisJCQkJCQlmaW5hbCBkb3VibGUgZGVhdGhzID0gKG5ldyBEb3VibGUoZGVsdGFEZWF0aHNMaXN0LmdldChpaSkpKS5kb3VibGVWYWx1ZSgpOworCQkJCQkJZGVsdGFEZWF0aHNMaXN0LnNldChpaSwgIiIgKyAoZGVhdGhzIC0gcGFzdERlYXRocykpOworCQkJCQkJcGFzdERlYXRocyA9IGRlYXRoczsKKwkJCQkJfQorCQkJCX0KKwkJCX0KKwkJCQorCQkJZGF0YS5nZXRJbnN0YW5jZSgpLnB1dChrZXlEZWx0YUJpcnRocywgZGVsdGFCaXJ0aHNMaXN0KTsKKwkJCWRhdGEuZ2V0SW5zdGFuY2UoKS5wdXQoa2V5RGVsdGFEZWF0aHMsIGRlbHRhRGVhdGhzTGlzdCk7CisJCQkKKwkJCXJldHVybiB0aGlzLmFnZ3JlZ2F0ZUZpbGVOYW1lOworCX0vLyBsb2cgdGhlIGRhdGEKKworCS8qKgorCSAqIElmIHRoZSBrZXlTZXQgY29udGFpbnMgdGhlIHByZWZlcnJlZCBrZXlzLCByZXR1cm4gdGhlIHByZWZlcnJlZCBvbmVzIGluIHRoZSBwcmVmZXJyZWQgb3JkZXIsCisJICogb3RoZXJ3aXNlIGp1c3QgcmV0dXJucyB0aGVtLgorCSAqIEBwYXJhbSBrZXlTZXQKKwkgKiBAcmV0dXJuIHRoZSBzb3J0ZWQga2V5cworCSAqLworCXByaXZhdGUgU3RyaW5nW10gc29ydEtleXMoU2V0PFN0cmluZz4ga2V5U2V0LCBmaW5hbCBSZWZlcmVuY2VTY2VuYXJpb0RhdGFJbnN0YW5jZSBkYXRhKSB7CisJCQorCQlMaXN0PFN0cmluZz4gcHJlZmVycmVkS2V5T3JkZXIgPSBnZXRQcmVmZXJyZWRLZXlPcmRlcihkYXRhKTsKKwkJCisJCVN0cmluZ1tdIGtleXMgPSBuZXcgU3RyaW5nW2tleVNldC5zaXplKCldOworCQlpbnQgaWNvdW50ID0gMDsKKwkJLy8gZmlyc3QgYWRkIHRoZSBwcmVmZXJyZWQga2V5cyAoaWYgdGhleSBleGlzdCkgaW4gdGhlIGNvcnJlY3Qgb3JkZXIKKwkgICAgU2V0PFN0cmluZz4gZG9uZVNldCA9IG5ldyBIYXNoU2V0PFN0cmluZz4oKTsKKwkJZm9yIChpbnQgaSA9IDA7IGkgPCBwcmVmZXJyZWRLZXlPcmRlci5zaXplKCk7IGkgKyspIHsKKwkJCWlmKGtleVNldC5jb250YWlucyhwcmVmZXJyZWRLZXlPcmRlci5nZXQoaSkpKSB7CisJCQkJa2V5c1tpY291bnRdID0gcHJlZmVycmVkS2V5T3JkZXIuZ2V0KGkpLnRyaW0oKTsKKwkJCQlpY291bnQgKys7CisJCQkJZG9uZVNldC5hZGQocHJlZmVycmVkS2V5T3JkZXIuZ2V0KGkpKTsKKwkJCX0KKwkJfQorICAKKwkJLy8gdGhlbiBhZGQgYW55IG90aGVyIGtleXMKKwkJSXRlcmF0b3I8U3RyaW5nPiBpdGVyID0ga2V5U2V0Lml0ZXJhdG9yKCk7CisJCXdoaWxlKChpdGVyIT1udWxsKSYmKGl0ZXIuaGFzTmV4dCgpKSl7CisJCQlTdHJpbmcgbmV4dEtleSA9IGl0ZXIubmV4dCgpOworCQkJaWYoIWRvbmVTZXQuY29udGFpbnMobmV4dEtleSkpIHsKKwkJCQlrZXlzW2ljb3VudF0gPSBuZXh0S2V5OworCQkJICAgIGljb3VudCArKzsKKwkJCX0KKwkJfQorCQkKKwkJcmV0dXJuIGtleXM7CisJfQorCQorCS8qKgorCSAqIAorCSAqIEBwYXJhbSBkYXRhCisJICogQHJldHVybgorCSAqLworCXB1YmxpYyBMaXN0PFN0cmluZz4gZ2V0UHJlZmVycmVkS2V5T3JkZXIoZmluYWwgUmVmZXJlbmNlU2NlbmFyaW9EYXRhSW5zdGFuY2UgZGF0YSkgeworCQlMaXN0PFN0cmluZz4gcHJlZmVycmVkS2V5T3JkZXIgPSBuZXcgQXJyYXlMaXN0PFN0cmluZz4oKTsKKwkJcHJlZmVycmVkS2V5T3JkZXIuYWRkKFJlZmVyZW5jZVNjZW5hcmlvRGF0YU1hcEltcGwuSVRFUkFUSU9OX0tFWSk7CisJCXByZWZlcnJlZEtleU9yZGVyLmFkZChSZWZlcmVuY2VTY2VuYXJpb0RhdGFNYXBJbXBsLlRJTUVfS0VZKTsKKwkJCisJCVN0cmluZ1tdIHNLZXlzID0gZGF0YS5nZXREYXRhTWFwKCkuZ2V0U19LZXlzKCk7CisJCVN0cmluZ1tdIGVLZXlzID0gZGF0YS5nZXREYXRhTWFwKCkuZ2V0RV9LZXlzKCk7CisJCVN0cmluZ1tdIGlLZXlzID0gZGF0YS5nZXREYXRhTWFwKCkuZ2V0SV9LZXlzKCk7CisJCVN0cmluZ1tdIHJLZXlzID0gZGF0YS5nZXREYXRhTWFwKCkuZ2V0Ul9LZXlzKCk7CisJCQorCQkKKwkJaWYoc0tleXMgIT0gbnVsbCkgeworCQkJZm9yKGludCBpID0gMDsgaSA8IHNLZXlzLmxlbmd0aDsgaSArKykgeworCQkJCXByZWZlcnJlZEtleU9yZGVyLmFkZChzS2V5c1tpXSk7CisJCQl9CisJCX0KKwkJCisJCWlmKGVLZXlzICE9IG51bGwpIHsKKwkJCWZvcihpbnQgaSA9IDA7IGkgPCBlS2V5cy5sZW5ndGg7IGkgKyspIHsKKwkJCQlwcmVmZXJyZWRLZXlPcmRlci5hZGQoZUtleXNbaV0pOworCQkJfQorCQl9CisJCQorCQlpZihpS2V5cyAhPSBudWxsKSB7CisJCQlmb3IoaW50IGkgPSAwOyBpIDwgaUtleXMubGVuZ3RoOyBpICsrKSB7CisJCQkJcHJlZmVycmVkS2V5T3JkZXIuYWRkKGlLZXlzW2ldKTsKKwkJCX0KKwkJfQorCQkKKwkJaWYocktleXMgIT0gbnVsbCkgeworCQkJZm9yKGludCBpID0gMDsgaSA8IHJLZXlzLmxlbmd0aDsgaSArKykgeworCQkJCXByZWZlcnJlZEtleU9yZGVyLmFkZChyS2V5c1tpXSk7CisJCQl9CisJCX0KKwkKKwkJcHJlZmVycmVkS2V5T3JkZXIuYWRkKGtleUJpcnRocyk7CisJCXByZWZlcnJlZEtleU9yZGVyLmFkZChrZXlEZWF0aHMpOworCQkKKwkJcmV0dXJuIHByZWZlcnJlZEtleU9yZGVyOworCX0KKwkKKwkvKioKKwkgKiBnZXQgdGhlIGtleSB1c2UgZm9yIFN1c2NlcHRpYmxlIGRhdGEKKwkgKiBAcmV0dXJuICdTJworCSAqLworCXB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldEtleVMoKSB7CisJCXJldHVybiBrZXlTOworCX0KKwkKKwkvKioKKwkgKiBnZXQgdGhlIGtleSB1c2UgZm9yIEV4cG9zZWQgZGF0YQorCSAqIEByZXR1cm4gJ0UnCisJICovCisJcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0S2V5RSgpIHsKKwkJcmV0dXJuIGtleUU7CisJfQorCS8qKgorCSAqIGdldCB0aGUga2V5IHVzZSBmb3IgSW5mZWN0aW91cyBkYXRhCisJICogQHJldHVybiAnSScKKwkgKi8KKwlwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRLZXlJKCkgeworCQlyZXR1cm4ga2V5STsKKwl9CisJLyoqCisJICogZ2V0IHRoZSBrZXkgdXNlIGZvciBSZWNvdmVyZWQgZGF0YQorCSAqIEByZXR1cm4gJ1InCisJICovCisJcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0S2V5UigpIHsKKwkJcmV0dXJuIGtleVI7CisJfQorCisJCisKKwkvKioKKwkgKiBnZXQgdGhlIGtleSB1c2UgZm9yIEluY2lkZW5jZSBkYXRhCisJICogQHJldHVybiAnSW5jaWRlbmNlJworCSAqLworCXB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldEtleUluY2lkZW5jZSgpIHsKKwkJcmV0dXJuIGtleUluY2lkZW5jZTsKKwl9CisKKworfS8vIEFnZ3JlZ2F0ZURhdGFXcml0ZXIKZGlmZiAtLWdpdCBhL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0udXRpbC5hbmFseXNpcy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91dGlsL2FuYWx5c2lzL0NTVkFuYWx5c2lzV3JpdGVyLmphdmEgYi9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLnV0aWwuYW5hbHlzaXMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdXRpbC9hbmFseXNpcy9DU1ZBbmFseXNpc1dyaXRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYzOGE1ZWEKLS0tIC9kZXYvbnVsbAorKysgYi9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLnV0aWwuYW5hbHlzaXMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdXRpbC9hbmFseXNpcy9DU1ZBbmFseXNpc1dyaXRlci5qYXZhCkBAIC0wLDAgKzEsMzk3IEBACisvLyBDU1ZBbmFseXNpc1dyaXRlcgorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnV0aWwuYW5hbHlzaXM7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDcsMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqYXZhLmlvLkZpbGU7CitpbXBvcnQgamF2YS5pby5GaWxlV3JpdGVyOworaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247CitpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CitpbXBvcnQgamF2YS51dGlsLk1hcDsKK2ltcG9ydCBqYXZhLnV0aWwuU2V0OworCitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQYXRoOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5FTGlzdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLkVycm9yUmVzdWx0OworCisKKy8qKgorICogd3JpdGVzIENTViBGaWxlcworICogCisgKi8KK3B1YmxpYyBjbGFzcyBDU1ZBbmFseXNpc1dyaXRlciAgeworCisJLy8gcHJpdmF0ZSBzdGF0aWMgZmluYWwgRGF0ZUZvcm1hdCBkZiA9CisJLy8gRGF0ZUZvcm1hdC5nZXREYXRlVGltZUluc3RhbmNlKERhdGVGb3JtYXQuU0hPUlQsRGF0ZUZvcm1hdC5NRURJVU0pOworCisJLyoqCisJICogCisJICovCisJcHJpdmF0ZSBTdHJpbmcgb3V0cHV0RmlsZU5hbWUgPSAiIjsKKworCisJLyoqCisJICogVE9ETyBuZWVkIHRvIGdldCBkaXNlYXNlIHBhcmFtZXRlcnMgZm9yIHRoZSBzY2VuYXJpbyBhbmQgd3JpdGUgdGhlbSB0byBhCisJICogZmlsZQorCSAqLworCXByb3RlY3RlZCBTdHJpbmcgcGFyYW1GaWxlTmFtZTsKKworCS8vcHJpdmF0ZSBzdGF0aWMgU2ltcGxlRGF0ZUZvcm1hdCBkYXRlRm9ybWF0ID0gbmV3IFNpbXBsZURhdGVGb3JtYXQoIkVFRSBkIE1NTSB5eSIsIExvY2FsZS5nZXREZWZhdWx0KCkpOworCisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgSVBhdGggUEFUSCA9IG9yZy5lY2xpcHNlLnN0ZW0udXRpbC5hbmFseXNpcy5BY3RpdmF0b3IuZ2V0RGVmYXVsdCgpLmdldFN0YXRlTG9jYXRpb24oKTsKKworCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBzZXAgPSBGaWxlLnNlcGFyYXRvcjsKKworCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgU3RyaW5nIENTViA9ICJjc3YiOworCisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFBBVEhfU1VGRklYID0gQ1NWK3NlcDsKKworCXByaXZhdGUgIHN0YXRpYyBTdHJpbmcgYWRpciA9IFBBVEguYXBwZW5kKHNlcCArIFBBVEhfU1VGRklYKS50b09TU3RyaW5nKCk7CisKKwlwcml2YXRlIEZpbGVXcml0ZXIgZnc7CisKKwkvKioKKwkgKiBkZWNpbWFsIGZvcm1hdAorCSAqLworCS8vIHByaXZhdGUgc3RhdGljIGZpbmFsIERlY2ltYWxGb3JtYXQgZGYxID0gbmV3IERlY2ltYWxGb3JtYXQoICIwLjAiICk7CisJLy8gcHJpdmF0ZSBzdGF0aWMgZmluYWwgRGVjaW1hbEZvcm1hdCBkZjIgPSBuZXcgRGVjaW1hbEZvcm1hdCggIjAuMDAiICk7CisJLy8gcHJpdmF0ZSBzdGF0aWMgZmluYWwgRGVjaW1hbEZvcm1hdCBkZjMgPSBuZXcgRGVjaW1hbEZvcm1hdCggIjAuMDAwIiApOworCS8vIHByaXZhdGUgc3RhdGljIGZpbmFsIERlY2ltYWxGb3JtYXQgZGY0ID0gbmV3IERlY2ltYWxGb3JtYXQoICIwLjAwMDAiICk7CisJLy8gcHJpdmF0ZSBzdGF0aWMgZmluYWwgRGVjaW1hbEZvcm1hdCBkZjUgPSBuZXcgRGVjaW1hbEZvcm1hdCggIjAuMDAwMDAiICk7CisKKworCisKKwkvKioKKwkgKiAKKwkgKiBAcGFyYW0gZmlsZU5hbWUKKwkgKi8KKwlwdWJsaWMgQ1NWQW5hbHlzaXNXcml0ZXIoZmluYWwgU3RyaW5nIGZpbGVOYW1lKSB7CisKKwkJb3V0cHV0RmlsZU5hbWUgPSBhZGlyK2ZpbGVOYW1lKyIuIitDU1Y7CisJCWZpbmFsIEZpbGUgZGlyID0gbmV3IEZpbGUoYWRpcik7CisJCWlmICgoIWRpci5leGlzdHMoKSkgfHwgKCFkaXIuaXNEaXJlY3RvcnkoKSkpIHsKKwkJCS8vIGNyZWF0ZSBpdC4KKwkJCWJvb2xlYW4gc3VjY2VzcyA9IGRpci5ta2RpcnMoKTsKKwkJCWlmICghc3VjY2VzcykgeworCQkJCUFjdGl2YXRvci5sb2dFcnJvcigKKwkJCQkJCSJGYWlsZWQgdG8gQ3JlYXRlIERyaWVjdG9yeSIgKyBvdXRwdXRGaWxlTmFtZSwKKwkJCQkJCW5ldyBJT0V4Y2VwdGlvbigiRmFpbGVkIHRvIENyZWF0ZSBEcmllY3RvcnkiCisJCQkJCQkJCSsgb3V0cHV0RmlsZU5hbWUpKTsKKwkJCX0KKworCQl9CisKKwkJdHJ5IHsKKwkJCWZ3ID0gbmV3IEZpbGVXcml0ZXIob3V0cHV0RmlsZU5hbWUpOworCQl9IGNhdGNoIChmaW5hbCBJT0V4Y2VwdGlvbiBlKSB7CisJCQlBY3RpdmF0b3IubG9nRXJyb3IoCisJCQkJCSJFcnJvciBjbG9zaW5nIENTViBhbmFseXNpcyBmaWxlIgorCQkJCQkrIG91dHB1dEZpbGVOYW1lICsgb3V0cHV0RmlsZU5hbWUsIGUpOworCQl9CisKKwl9IC8vIENTVkFuYWx5c2lzV3JpdGVyCisKKwkvKioKKwkgKiAKKwkgKiBAcGFyYW0gZGlyZWN0b3J5CisJICogQHBhcmFtIGZpbGVOYW1lCisJICovCisJcHVibGljIENTVkFuYWx5c2lzV3JpdGVyKGZpbmFsIFN0cmluZyBkaXJlY3RvcnksIGZpbmFsIFN0cmluZyBmaWxlTmFtZSkgeworCisKKwkJYWRpciA9IGRpcmVjdG9yeTsKKwkJb3V0cHV0RmlsZU5hbWUgPSBhZGlyK2ZpbGVOYW1lKyIuIitDU1Y7CisKKwkJZmluYWwgRmlsZSBkaXIgPSBuZXcgRmlsZShhZGlyKTsKKwkJaWYgKCghZGlyLmV4aXN0cygpKSB8fCAoIWRpci5pc0RpcmVjdG9yeSgpKSkgeworCQkJLy8gY3JlYXRlIGl0LgorCQkJYm9vbGVhbiBzdWNjZXNzID0gZGlyLm1rZGlycygpOworCQkJaWYgKCFzdWNjZXNzKSB7CisJCQkJQWN0aXZhdG9yLmxvZ0Vycm9yKAorCQkJCQkJIkZhaWxlZCB0byBDcmVhdGUgRHJpZWN0b3J5IiArIG91dHB1dEZpbGVOYW1lLAorCQkJCQkJbmV3IElPRXhjZXB0aW9uKCJGYWlsZWQgdG8gQ3JlYXRlIERyaWVjdG9yeSIKKwkJCQkJCQkJKyBvdXRwdXRGaWxlTmFtZSkpOworCQkJfQorCisJCX0KKworCQl0cnkgeworCQkJZncgPSBuZXcgRmlsZVdyaXRlcihvdXRwdXRGaWxlTmFtZSk7CisJCX0gY2F0Y2ggKGZpbmFsIElPRXhjZXB0aW9uIGUpIHsKKwkJCUFjdGl2YXRvci5sb2dFcnJvcigKKwkJCQkJIkVycm9yIGNsb3NpbmcgQ1NWIGFuYWx5c2lzIGZpbGUiCisJCQkJCSsgb3V0cHV0RmlsZU5hbWUgKyBvdXRwdXRGaWxlTmFtZSwgZSk7CisJCX0KKworCX0gLy8gQ1NWQW5hbHlzaXNXcml0ZXIKKworCisKKwkvKioKKwkgKiBMb2cgdGhlIGRhdGEgZnJvbSBhIHNpbXBsZSBsaXN0CisJICogQHBhcmFtIGRhdGFMaXN0IAorCSAqLworCXB1YmxpYyB2b2lkIGxvZ0RhdGEoTGlzdDxFTGlzdDxEb3VibGU+PiBkYXRhTGlzdCkgeworCisKKwkJLy8gZ2V0IHRoZSBzaXplIG9mIHRoZSBsb25nZXN0IGFycmF5CisJCWludCBtYXhSb3dzID0gMDsKKwkJaW50IG51bUFycmF5cyA9IGRhdGFMaXN0LnNpemUoKTsKKwkJZm9yKGludCBpID0gMDsgaSA8IG51bUFycmF5czsgaSArKykgeworCQkJRUxpc3Q8RG91YmxlPiBkYXRhID0gZGF0YUxpc3QuZ2V0KGkpOworCQkJaWYoZGF0YS5zaXplKCkgPj0gbWF4Um93cykgbWF4Um93cyA9IGRhdGEuc2l6ZSgpOworCQl9CisKKworCQkvLyByb3dzCisJCWZvcihpbnQgeSA9IDA7IHkgPCBtYXhSb3dzOyB5ICsrKSB7CisJCQkvL1N0cmluZyBzdHIgPSAiIjsKKwkJCVN0cmluZ0J1aWxkZXIgc3RyQmxkciA9IG5ldyBTdHJpbmdCdWlsZGVyKCk7CisJCQkvLyBjb2x1bW5zCisJCQlmb3IoaW50IHggPSAwOyB4IDwgbnVtQXJyYXlzOyB4ICsrKSB7CisJCQkJRUxpc3Q8RG91YmxlPiBkYXRhID0gZGF0YUxpc3QuZ2V0KHgpOworCQkJCWlmKGRhdGEuc2l6ZSgpPj0gbWF4Um93cykgeworCQkJCQlzdHJCbGRyLmFwcGVuZChkYXRhLmdldCh5KSk7CisJCQkJCWlmKHggPCBudW1BcnJheXMtMSkgeworCQkJCQkJc3RyQmxkci5hcHBlbmQoIiwgIik7CisJCQkJCX0KKwkJCQl9CisJCQl9CisKKwkJCXN0ckJsZHIuYXBwZW5kKCJcbiIpOworCQkJdHJ5IHsKKwkJCQlmdy53cml0ZShzdHJCbGRyLnRvU3RyaW5nKCkpOworCQkJfSBjYXRjaCAoZmluYWwgSU9FeGNlcHRpb24gZSkgeworCQkJCUFjdGl2YXRvci5sb2dFcnJvcigiRXJyb3Igd3JpdGluZyBkYXRhIHRvIENTViBBbmFseXNpcyBmaWxlIgorCQkJCQkJKyBvdXRwdXRGaWxlTmFtZSArIG91dHB1dEZpbGVOYW1lLCBlKTsKKwkJCX0KKwkJfQorCisJCXRyeSB7CisJCQlmdy5mbHVzaCgpOworCQkJZncuY2xvc2UoKTsKKwkJfSBjYXRjaCAoZmluYWwgSU9FeGNlcHRpb24gZSkgeworCQkJQWN0aXZhdG9yLmxvZ0Vycm9yKAorCQkJCQkiRXJyb3IgY2xvc2luZyBDU1YgYW5hbHlzaXMgZmlsZSIKKwkJCQkJKyBvdXRwdXRGaWxlTmFtZSArIG91dHB1dEZpbGVOYW1lLCBlKTsKKwkJfQorCX0vLyBsb2cgZGF0YQorCisJLyoqCisJICogTG9nIHRoZSBkYXRhIGZyb20gYSBzaW1wbGUgbGlzdAorCSAqIEBwYXJhbSBoZWFkZXIgCisJICogQHBhcmFtIGRhdGFMaXN0IAorCSAqLworCXB1YmxpYyB2b2lkIGxvZ0RhdGEoTGlzdDxTdHJpbmc+IGhlYWRlciwgTGlzdDxkb3VibGVbXT4gZGF0YUxpc3QpIHsKKworCQlTdHJpbmcgc3RySGVhZGVyID0gIml0ZXJhdGlvbiI7CisJCVN0cmluZ0J1aWxkZXIgc3RyQmxkciA9IG5ldyBTdHJpbmdCdWlsZGVyKHN0ckhlYWRlcik7CisJCS8vIGhlYWRlciBjb2x1bW5zCisJCWZvcihpbnQgeCA9IDA7IHggPCBoZWFkZXIuc2l6ZSgpOyB4ICsrKSB7CisJCQlzdHJCbGRyLmFwcGVuZCgiLCAiKTsKKwkJCXN0ckJsZHIuYXBwZW5kKGhlYWRlci5nZXQoeCkpOworCQl9CisJCXN0ckJsZHIuYXBwZW5kKCJcbiIpOworCQl0cnkgeworCQkJZncud3JpdGUoc3RyQmxkci50b1N0cmluZygpKTsKKwkJfSBjYXRjaCAoZmluYWwgSU9FeGNlcHRpb24gZSkgeworCQkJQWN0aXZhdG9yLmxvZ0Vycm9yKCJFcnJvciB3cml0aW5nIEhFQURFUiB0byBDU1YgQW5hbHlzaXMgZmlsZSIKKwkJCQkJKyBvdXRwdXRGaWxlTmFtZSArIG91dHB1dEZpbGVOYW1lLCBlKTsKKwkJfQorCisJCS8vIGdldCB0aGUgc2l6ZSBvZiB0aGUgbG9uZ2VzdCBhcnJheQorCQlpbnQgbWF4Um93cyA9IDA7CisJCWludCBudW1BcnJheXMgPSBkYXRhTGlzdC5zaXplKCk7CisJCWZvcihpbnQgaSA9IDA7IGkgPCBudW1BcnJheXM7IGkgKyspIHsKKwkJCWRvdWJsZVtdIGRhdGEgPSBkYXRhTGlzdC5nZXQoaSk7CisJCQlpZihkYXRhLmxlbmd0aCA+PSBtYXhSb3dzKSBtYXhSb3dzID0gZGF0YS5sZW5ndGg7CisJCX0KKworCisJCS8vIHJvd3MKKwkJZm9yKGludCB5ID0gMDsgeSA8IG1heFJvd3M7IHkgKyspIHsKKwkJCS8vU3RyaW5nIHN0ciA9IHkrIiAiOworCQkJLy8gY29sdW1ucworCQkJCisJCQlzdHJCbGRyID0gbmV3IFN0cmluZ0J1aWxkZXIoKTsKKwkJCXN0ckJsZHIuYXBwZW5kKHkpOworCQkJc3RyQmxkci5hcHBlbmQoIiAiKTsKKwkJCQorCQkJZm9yKGludCB4ID0gMDsgeCA8IG51bUFycmF5czsgeCArKykgeworCQkJCWRvdWJsZVtdIGRhdGEgPSBkYXRhTGlzdC5nZXQoeCk7CisJCQkJaWYoZGF0YS5sZW5ndGg+PSBtYXhSb3dzKSB7CisJCQkJCXN0ckJsZHIuYXBwZW5kKCIsICIpOworCQkJCQlzdHJCbGRyLmFwcGVuZChkYXRhW3ldKTsKKwkJCQl9CisJCQl9CisKKwkJCXN0ckJsZHIuYXBwZW5kKCJcbiIpOworCQkJdHJ5IHsKKwkJCQlmdy53cml0ZShzdHJCbGRyLnRvU3RyaW5nKCkpOworCQkJfSBjYXRjaCAoZmluYWwgSU9FeGNlcHRpb24gZSkgeworCQkJCUFjdGl2YXRvci5sb2dFcnJvcigiRXJyb3Igd3JpdGluZyBkYXRhIHRvIENTViBBbmFseXNpcyBmaWxlIgorCQkJCQkJKyBvdXRwdXRGaWxlTmFtZSArIG91dHB1dEZpbGVOYW1lLCBlKTsKKwkJCX0KKwkJfQorCisJCXRyeSB7CisJCQlmdy5mbHVzaCgpOworCQkJZncuY2xvc2UoKTsKKwkJfSBjYXRjaCAoZmluYWwgSU9FeGNlcHRpb24gZSkgeworCQkJQWN0aXZhdG9yLmxvZ0Vycm9yKAorCQkJCQkiRXJyb3IgY2xvc2luZyBDU1YgYW5hbHlzaXMgZmlsZSIKKwkJCQkJKyBvdXRwdXRGaWxlTmFtZSArIG91dHB1dEZpbGVOYW1lLCBlKTsKKwkJfQorCX0vLyBsb2cgZGF0YQorCisKKwkvKioKKwkgKiBMb2cgdGhlIGRhdGEgZm9yIGEgbGlzdCBvZiB0cmFqZWN0b3JpZXMKKwkgKiBAcGFyYW0gZGltZW5zaW9uIG9mIHRoZSBzcGFjZSAoYWx3YXlzIDIgZm9yIG5vdykKKwkgKiBAcGFyYW0gZGF0YUxpc3QgCisJICovCisJcHVibGljIHZvaWQgbG9nRGF0YShpbnQgZGltZW5zaW9uLCBMaXN0PFBoYXNlU3BhY2VDb29yZGluYXRlW10+IGRhdGFMaXN0KSB7CisKKworCQkvLyBnZXQgdGhlIHNpemUgb2YgdGhlIGxvbmdlc3QgYXJyYXkKKwkJaW50IG1heFJvd3MgPSAwOworCQlpbnQgbnVtQXJyYXlzID0gZGF0YUxpc3Quc2l6ZSgpOworCQlmb3IoaW50IGkgPSAwOyBpIDwgbnVtQXJyYXlzOyBpICsrKSB7CisJCQlQaGFzZVNwYWNlQ29vcmRpbmF0ZVtdIGRhdGEgPSBkYXRhTGlzdC5nZXQoaSk7CisJCQlpZihkYXRhLmxlbmd0aCA+PSBtYXhSb3dzKSBtYXhSb3dzID0gZGF0YS5sZW5ndGg7CisJCX0KKworCisJCS8vIHJvd3MKKwkJZm9yKGludCB5ID0gMDsgeSA8IG1heFJvd3M7IHkgKyspIHsKKwkJCS8vIGNvbHVtbnMKKwkJCS8vU3RyaW5nIHN0ciA9ICIiOworCisJCQlTdHJpbmdCdWlsZGVyIHN0ckJsZHIgPSBuZXcgU3RyaW5nQnVpbGRlcigpOworCisJCQlmb3IoaW50IHggPSAwOyB4IDwgbnVtQXJyYXlzOyB4ICsrKSB7CisJCQkJUGhhc2VTcGFjZUNvb3JkaW5hdGVbXSBkYXRhID0gZGF0YUxpc3QuZ2V0KHgpOworCQkJCWlmKGRhdGEubGVuZ3RoPj0gbWF4Um93cykgeworCQkJCQlzdHJCbGRyLmFwcGVuZChkYXRhW3ldLnhWYWx1ZSk7CisJCQkJCXN0ckJsZHIuYXBwZW5kKCIsICIpOworCQkJCQlzdHJCbGRyLmFwcGVuZChkYXRhW3ldLnlWYWx1ZSk7CisJCQkJCXN0ckJsZHIuYXBwZW5kKCIgICIpOworCQkJCQlpZih4IDwgbnVtQXJyYXlzLTEpIHsKKwkJCQkJCXN0ckJsZHIuYXBwZW5kKCIsICIpOworCQkJCQl9CisJCQkJfQorCQkJfQorCQkJc3RyQmxkci5hcHBlbmQoIlxuIik7CisJCQl0cnkgeworCQkJCWZ3LndyaXRlKHN0ckJsZHIudG9TdHJpbmcoKSk7CisJCQl9IGNhdGNoIChmaW5hbCBJT0V4Y2VwdGlvbiBlKSB7CisJCQkJQWN0aXZhdG9yLmxvZ0Vycm9yKCJFcnJvciB3cml0aW5nIGRhdGEgdG8gQ1NWIEFuYWx5c2lzIGZpbGUiCisJCQkJCQkrIG91dHB1dEZpbGVOYW1lICsgb3V0cHV0RmlsZU5hbWUsIGUpOworCQkJfQorCQl9CisKKwkJdHJ5IHsKKwkJCWZ3LmZsdXNoKCk7CisJCQlmdy5jbG9zZSgpOworCQl9IGNhdGNoIChmaW5hbCBJT0V4Y2VwdGlvbiBlKSB7CisJCQlBY3RpdmF0b3IubG9nRXJyb3IoCisJCQkJCSJFcnJvciBjbG9zaW5nIENTViBhbmFseXNpcyBmaWxlIgorCQkJCQkrIG91dHB1dEZpbGVOYW1lICsgb3V0cHV0RmlsZU5hbWUsIGUpOworCQl9CisKKworCisKKwl9Ly8gbG9nIGRhdGEKKworCisJLyoqCisJICogTG9nIHRoZSBkYXRhIGZvciBhIGNvbXBhcmlzb24gb2YgbXVsdGlwbGUgc2NlbmFyaW9zIHZlcnN1cyBhIHJlZmVyZW5jZQorCSAqIHNjZW5hcmlvCisJICogQHBhcmFtIGRhdGEgCisJICovCisJcHVibGljIHZvaWQgbG9nRGF0YShNYXA8TWFwPFN0cmluZywgU3RyaW5nPiwgRXJyb3JSZXN1bHQ+IGRhdGEpIHsKKwkJLy8gd3JpdGUgdGhlIGhlYWRlciBwYXJhbSBuYW1lcyBwbHVzIHRoZSBoZWFkZXIgZm9yIHRoZSBSTVMgZGlmZmVyZW5jZQorCQkvLyBKdXN0IGdldCB0aGUgZmlyc3Qga2V5IGFuZCB1c2UgdGhlIHBhcmFtIG5hbWVzIGZyb20gaXQKKwkJdHJ5IHsKKwkJCU1hcDxTdHJpbmcsIFN0cmluZz4gZmlyc3RSZXN1bHQgPSBkYXRhLmtleVNldCgpLml0ZXJhdG9yKCkubmV4dCgpOworCQkJU2V0PFN0cmluZz4gcGFybXMgPSBmaXJzdFJlc3VsdC5rZXlTZXQoKTsKKwkJCWZvcihTdHJpbmcgcCA6IHBhcm1zKSB7CisJCQkJZncud3JpdGUocCk7CisJCQkJZncud3JpdGUoIiwiKTsKKwkJCX0KKwkJCWZ3LndyaXRlKCJSTVMiKTsKKwkJCWZ3LndyaXRlKCJcbiIpOworCisJCQkvLyBOb3cgd3JpdGUgdGhlIHJlc3VsdAorCisJCQlmb3IoTWFwPFN0cmluZywgU3RyaW5nPiBlbnRyeSA6IGRhdGEua2V5U2V0KCkpIHsKKwkJCQlFcnJvclJlc3VsdCByZXMgPSBkYXRhLmdldChlbnRyeSk7CisJCQkJLy8gQ29tcHV0ZSBhdmVyYWdlCisJCQkJQ29sbGVjdGlvbjxTdHJpbmc+IHB2YWx1ZXMgPSBlbnRyeS52YWx1ZXMoKTsKKwkJCQlmb3IoU3RyaW5nIHB2YWwgOiBwdmFsdWVzKSB7Zncud3JpdGUocHZhbCk7Zncud3JpdGUoIiwiKTt9CisJCQkJZG91YmxlIGVycm9yID0gMDsKKwkJCQlpZihyZXMhPW51bGwpeworCQkJCQllcnJvciA9IHJlcy5nZXRFcnJvcigpOworCQkJCX0KKwkJCQlmdy53cml0ZShlcnJvcisiIik7CisJCQkJZncud3JpdGUoIlxuIik7CisKKwkJCX0KKwkJfSBjYXRjaChJT0V4Y2VwdGlvbiBpb2UpIHsKKwkJCUFjdGl2YXRvci5sb2dFcnJvcigKKwkJCQkJIkVycm9yIGNsb3NpbmcgQ1NWIGFuYWx5c2lzIGZpbGUiCisJCQkJCSsgb3V0cHV0RmlsZU5hbWUgKyBvdXRwdXRGaWxlTmFtZSwgaW9lKTsKKwkJfQkKKworCX0KKworCisJLyoKKwkgKiBwcml2YXRlIEdyYXBoIGdldEdyYXBoKGZpbmFsIE5vZGUgbm9kZSkgeyByZXR1cm4gKEdyYXBoKQorCSAqIG5vZGUuZUNvbnRhaW5lcigpLmVDb250YWluZXIoKTsgfSAvLyBnZXRHcmFwaAorCSAqLworCisJLyoqCisJICogRmx1c2ggYW5kIENsb3NlIHRoZSBmaWxlCisJICovCisJcHVibGljIHZvaWQgZmx1c2hMb2dnZXJEYXRhKCkgeworCQl0cnkgeworCQkJaWYgKGZ3ICE9IG51bGwpIGZ3LmZsdXNoKCk7CisJCX0gY2F0Y2ggKGZpbmFsIElPRXhjZXB0aW9uIGUpIHsKKwkJCS8vIGRvIG5vdGhpbmcKKwkJfQorCisJfSAvLyBmbHVzaCBBbGwgRGF0YQorCisJLyoqCisJICogRmx1c2ggYW5kIENsb3NlIHRoZSBmaWxlCisJICovCisJcHVibGljIHZvaWQgY2xvc2VMb2dnZXJEYXRhKCkgeworCQlmbHVzaExvZ2dlckRhdGEoKTsKKworCQlpZiAoZncgPT0gbnVsbCkgeworCQkJcmV0dXJuOworCQl9CisKKwkJdHJ5IHsKKwkJCWZ3LmNsb3NlKCk7CisJCX0gY2F0Y2ggKGZpbmFsIElPRXhjZXB0aW9uIGUpIHsKKwkJCUFjdGl2YXRvci5sb2dFcnJvcigiRXJyb3IgQ0xPU0lORyBDU1YgTG9nZ2VyIGZpbGUiICsgb3V0cHV0RmlsZU5hbWUKKwkJCQkJKyBvdXRwdXRGaWxlTmFtZSwgZSk7CisJCX0KKwkJLy8gZm9yIHRlc3RpbmcKKwl9IC8vIGxvZ0FsbCBEYXRhCisKK30KZGlmZiAtLWdpdCBhL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0udXRpbC5hbmFseXNpcy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91dGlsL2FuYWx5c2lzL0N5Y2xlQ29tcHJlc3Nvci5qYXZhIGIvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS51dGlsLmFuYWx5c2lzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3V0aWwvYW5hbHlzaXMvQ3ljbGVDb21wcmVzc29yLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzE5ZjEyMQotLS0gL2Rldi9udWxsCisrKyBiL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0udXRpbC5hbmFseXNpcy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91dGlsL2FuYWx5c2lzL0N5Y2xlQ29tcHJlc3Nvci5qYXZhCkBAIC0wLDAgKzEsMjcwIEBACisvKioKKyAqIAorICovCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0udXRpbC5hbmFseXNpczsKKworaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmltcGwuUmVmZXJlbmNlU2NlbmFyaW9EYXRhTWFwSW1wbC5SZWZlcmVuY2VTY2VuYXJpb0RhdGFJbnN0YW5jZTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNywgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKgorICogVGhpcyBjbGFzcyBpcyBkZXNpZ25lZCB0byB0YWtlIGEgdGltZSBzZXJpZXMgd2l0aCBtdWx0aXBsZSBlcGlkZW1pYyB3YXZlcy4gSXQgY29sbGFwc2VzIHRoZSBkYXRhIGludG8KKyAqIGEgc2luZ2xlICJhdmVyYWdlZCIgY3ljbGUgYWxpZ25pbmcgdGhlIHBlYWtzIG9mIGVhY2ggZXBpZGVtaWMgdXNpbmcgYSBzbW9vdGhpbmcgYW5kIHBlYWsgZmluZGluZyBhbGdvcml0aG0KKyovCitwdWJsaWMgY2xhc3MgQ3ljbGVDb21wcmVzc29yIHsKKwkKKwlvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmltcGwuUmVmZXJlbmNlU2NlbmFyaW9EYXRhTWFwSW1wbC5SZWZlcmVuY2VTY2VuYXJpb0RhdGFJbnN0YW5jZSBkYXRhOworCQorCS8qKgorCSAqIHRoaXMgcGhhc2Ugc2hpZnQgbWF4aW1pemVzIHRoZSBjb3JyZWxhdGlvbiBiZXR3ZWVuIHRoZSB0d28gdmVjdG9ycworCSAqLworCXN0YXRpYyBmaW5hbCBpbnQgV0lORE9XID0gMzY1OworCQorCS8qKgorCSAqIGJ5IGRlZmF1bHQgd2Ugd2lsbCB0cnkgdG8gZmluZCBtYXggY29ycmVsYXRpb24gZm9yIGEgc2hpZnQgb2YgKy8tIDMwIGRheXMKKwkgKiBpZiB0aGUgdmVjdG9ycyBhcmUgc2hvcnRlciB0aGFuIHRoaXMgd2UgcmVkdWNlIHRoZSB3aW5kb3cKKwkgKi8KKwlzdGF0aWMgZmluYWwgaW50IElOSVRJQUxfUEhBU0VfU0hJRlQgPSAzMDsKKwkKKwkvKioKKwkgKiB0aGUgcGVhayBwb3NpdGlvbnMKKwkgKi8KKwlwdWJsaWMgc3RhdGljIExpc3Q8SW50ZWdlcj4gcGVha1Bvc2l0aW9ucyA9IG5ldyBBcnJheUxpc3Q8SW50ZWdlcj4oKTsKKwkKKwlzdGF0aWMgTGlzdDxEb3VibGU+IGNvbXByZXNzZWRDeWNsZXMgPSBuZXcgQXJyYXlMaXN0PERvdWJsZT4oKTsKKwkKKwlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIGludFtdIERBWV9PRl9DSEFOTlVLQSA9IHsgMzQ3LCA3MDIsIDEwODYsIDE0MzAsIDE3OTQsIDIxNzksCisJCQkJCQkJCQkJICAgMjUzMywgMjkxNiwgMzI3MSwgMzYyNSwgNDAwOCB9OworCisJCisJCisJLyoqCisJICogVGhpcyBjbGFzcyBpcyBkZXNpZ25lZCB0byB0YWtlIGEgUmVmZXJlbmNlU2NlbmFyaW9EYXRhSW5zdGFuY2UocykgYW5kIHRvIHJlY29uc3RydWN0IGEgc2luZ2xlICJhdmVyYWdlZCIgb3IgCisJICogdHlwaWNhbCBlcGlkZW1pYyB3YXZlIGZyb20gYSB0aW1lIHNlcmllcyBjb250YWluaW5nIG1hbnkgc3VjaCB3YXZlcy4KKwkgKiBOb3RlIHRoYXQgdGhlIHBlYWsgZmluZGVyIGFsZ29yaXRobSBvcGVyYXRlcyBvbiBzbW9vdGhlZCBkYXRhIGJ1dCBvbmNlIHRoZSBwZWFrcyBhcmUgbG9jYXRlZAorCSAqIHRoZSBpbnRlZ3JhdGlvbiBhbmQgbm9ybWFsaXphdGlvbiBpcyBkb25lIHdpdGggdGhlIHJhdyBkYXRhLgorCSAqIEBwYXJhbSBkYXRhSW5zdGFuY2UKKwkgKiAKKwkgKi8KKwlwdWJsaWMgQ3ljbGVDb21wcmVzc29yKFJlZmVyZW5jZVNjZW5hcmlvRGF0YUluc3RhbmNlIGRhdGFJbnN0YW5jZSkgeworCQlkYXRhID0gZGF0YUluc3RhbmNlOworCQlTdHJpbmcga2V5ID0gIkluY2lkZW5jZSI7IC8vIHRoaXMgb25seSB3b3JrcyBmb3IgaW5jaWRlbmNlIGRhdGEgcmlnaHQgbm93CisJCXBlYWtQb3NpdGlvbnMgPSB0aGlzLmdldERlbGF5QWZ0ZXJDaGFubnVrYShkYXRhLCBrZXkgKTsKKwkJLy9wZWFrUG9zaXRpb25zID0gdGhpcy5nZXRQZWFrUG9zaXRpb25zKGRhdGEsIGtleSApOworCQkKKwkJCisJCWZvciAoaW50IGkgPSAwOyBpIDwgcGVha1Bvc2l0aW9ucy5zaXplKCk7IGkgKyspIHsKKwkJCWludCBwZWFrID0gcGVha1Bvc2l0aW9ucy5nZXQoaSkuaW50VmFsdWUoKTsKKwkJCVN5c3RlbS5vdXQucHJpbnQoIiIrcGVhaysiLCIpOworCQl9CisJCUFjdGl2YXRvci5sb2dJbmZvcm1hdGlvbigiLTEiKTsKKwkJCisJCWNvbXByZXNzZWRDeWNsZXMgPSB0aGlzLmNvbXByZXNzRGF0YShkYXRhLCBwZWFrUG9zaXRpb25zLCBrZXkpOworCX0KKwkKKwkvKioKKwkgKiBGaW5kcyBpbmRleCBvZiBwZWFrcywgcmV0dXJucyBhcyBsaXN0CisJICogQHBhcmFtIGluc3RhbmNlCisJICogQHBhcmFtIGtleSAKKwkgKiBAcGFyYW1ldGVyIGtleSAobXVzdCBiZSBJLCBFLCBvciBpbmNpZGVuY2UgLSB0aGV5IGhhdmUgcGVha3MpCisJICogQHJldHVybiBsaXN0IG9mIHBlYWsgcG9zaXRpb25zCisJICovCisJcHVibGljIExpc3Q8SW50ZWdlcj4gZ2V0UGVha1Bvc2l0aW9ucyhSZWZlcmVuY2VTY2VuYXJpb0RhdGFJbnN0YW5jZSBpbnN0YW5jZSwgU3RyaW5nIGtleSkgeworCQlMaXN0PEludGVnZXI+IHBlYWtzID0gbmV3IEFycmF5TGlzdDxJbnRlZ2VyPigpOworCQkKKwkJTGlzdDxEb3VibGU+IHZlY3RvciA9IGluc3RhbmNlLmdldERhdGEoKS5nZXQoa2V5KTsKKwkJTGlzdDxEb3VibGU+IHNtb290aGVkT25jZSA9IHNtb290aDModmVjdG9yKTsKKwkJTGlzdDxEb3VibGU+IHNtb290aGVkID0gc21vb3RoMyhzbW9vdGhlZE9uY2UpOworCQlpbnQgaXN0YXJ0ID0gMDsKKwkJaW50IGlzdG9wID0gSU5JVElBTF9QSEFTRV9TSElGVDsKKwkJaW50IHBlYWtQb3MgPSBmaW5kUGVhayhzbW9vdGhlZCxpc3RhcnQsaXN0b3ApOworCQlpZihwZWFrUG9zIT1pc3RhcnQpIHBlYWtzLmFkZChJbnRlZ2VyLnZhbHVlT2YocGVha1BvcykpOworCQlpbnQgbWF4U3RhcnRJbmRleCA9IHNtb290aGVkLnNpemUoKSAtIFdJTkRPVy8yOworCQl3aGlsZShwZWFrUG9zIDwgbWF4U3RhcnRJbmRleCApIHsKKwkJCWlzdGFydCA9IHBlYWtQb3MrKFdJTkRPVy8yKTsKKwkJCWlzdG9wID0gaXN0YXJ0ICsgV0lORE9XOworCQkJcGVha1Bvcz0gZmluZFBlYWsoc21vb3RoZWQsaXN0YXJ0LGlzdG9wKTsKKwkJCXBlYWtzLmFkZChJbnRlZ2VyLnZhbHVlT2YocGVha1BvcykpOworCQl9CisJCXJldHVybiBwZWFrczsKKwl9CisJCisJCisJCisKKwkvKioKKwkgKiBGaW5kcyBpbmRleCBvZiBwZWFrcywgcmV0dXJucyBhcyBsaXN0CisJICogQHBhcmFtIGluc3RhbmNlCisJICogQHBhcmFtIGtleSAKKwkgKiBAcGFyYW1ldGVyIGtleSAobXVzdCBiZSBJLCBFLCBvciBpbmNpZGVuY2UgLSB0aGV5IGhhdmUgcGVha3MpCisJICogQHJldHVybiBsaXN0IG9mIHBlYWsgcG9zaXRpb25zCisJICovCisJcHVibGljIExpc3Q8SW50ZWdlcj4gZ2V0RGVsYXlBZnRlckNoYW5udWthKFJlZmVyZW5jZVNjZW5hcmlvRGF0YUluc3RhbmNlIGluc3RhbmNlLCBTdHJpbmcga2V5KSB7CisJCUxpc3Q8SW50ZWdlcj4gcGVha3MgPSBuZXcgQXJyYXlMaXN0PEludGVnZXI+KCk7CisJCQorCQlMaXN0PERvdWJsZT4gdmVjdG9yID0gaW5zdGFuY2UuZ2V0RGF0YSgpLmdldChrZXkpOworCQlMaXN0PERvdWJsZT4gc21vb3RoZWRPbmNlID0gc21vb3RoMyh2ZWN0b3IpOworCQlMaXN0PERvdWJsZT4gc21vb3RoZWQgPSBzbW9vdGgzKHNtb290aGVkT25jZSk7CisJCQorCQlmb3IgKGludCBpID0gMDsgaSA8IERBWV9PRl9DSEFOTlVLQS5sZW5ndGg7IGkgKyspIHsKKwkJCWludCBpc3RhcnQgPSBEQVlfT0ZfQ0hBTk5VS0FbaV0tMzA7CisJCQlpbnQgaXN0b3AgPSBpc3RhcnQgKyA5MDsKKwkJCS8vaW50IHBlYWtQb3MgPSBmaW5kRmlyc3RQZWFrKHNtb290aGVkLGlzdGFydCxpc3RvcCk7CisJCQlpbnQgcGVha1BvcyA9IGZpbmRQZWFrKHNtb290aGVkLGlzdGFydCxpc3RvcCk7CisJCQlwZWFrcy5hZGQoSW50ZWdlci52YWx1ZU9mKHBlYWtQb3MpKTsKKwkJfQorCQkKKwkJcmV0dXJuIHBlYWtzOworCX0KKwkKKwkKKwkvKioKKwkgKiBDcmVhdGVkIGFuZCAiYXZlcmFnZWQiIGN5Y2xlIGZyb20gc2V2ZXJhbCBwZXJpb2RzIG9mIGRhdGEKKwkgKiBAcGFyYW0gaW5zdGFuY2UKKwkgKiBAcGFyYW0gcGVha3MKKwkgKiBAcGFyYW0ga2V5CisJICogQHJldHVybiB0aGUgY29tcHJlc3NlZCBkYXRhCisJICovCisJcHVibGljIExpc3Q8RG91YmxlPiBjb21wcmVzc0RhdGEoUmVmZXJlbmNlU2NlbmFyaW9EYXRhSW5zdGFuY2UgaW5zdGFuY2UsIExpc3Q8SW50ZWdlcj4gcGVha3MsIFN0cmluZyBrZXkpIHsKKwkJCisJCUxpc3Q8RG91YmxlPiBkYXRhID0gaW5zdGFuY2UuZ2V0RGF0YSgpLmdldChrZXkpOworCQlkb3VibGVbXSBzdW0gPSBuZXcgZG91YmxlW1dJTkRPV107CisJCWRvdWJsZVtdIGRlbm9tID0gbmV3IGRvdWJsZVtXSU5ET1ddOworCQkvLzEuICBpbml0CisJCWZvcihpbnQgaSA9IDA7IGkgPCBXSU5ET1c7IGkgKyspIHsKKwkJCXN1bVtpXSA9IDAuMDsKKwkJCWRlbm9tW2ldID0gMC4wOworCQl9CisJICAgIC8vMi4gIGludGVncmF0ZSBhbGwgY3ljbGVzCisJCWZvciAoaW50IGlQZWFrID0gMDsgaVBlYWsgPCBwZWFrcy5zaXplKCk7IGlQZWFrICsrKSB7CisJCQlpbnQgbmV4dFBlYWsgPSBwZWFrcy5nZXQoaVBlYWspLmludFZhbHVlKCk7CisJCQlpbnQgaXN0YXJ0ID0gbmV4dFBlYWstV0lORE9XLzI7CisJCQkKKwkJCWludCBpbmRleCA9IGlzdGFydDsJCisJCQlmb3IoaW50IGkgPSAwOyBpIDwgV0lORE9XOyBpICsrKSB7CisJCQkJaWYoKGluZGV4ID49MCkmJihpbmRleCA8IGRhdGEuc2l6ZSgpKSkgeworCQkJCQlkb3VibGUgdmFsID0gZGF0YS5nZXQoaW5kZXgpLmRvdWJsZVZhbHVlKCk7CisJCQkJCXN1bVtpXSArPSB2YWw7CisJCQkJCWRlbm9tW2ldICs9IDEuMDsKKwkJCQl9Ly8gaWYgaW4gYm91bmRzCisJCQkJaW5kZXggKys7CisJCQl9Ly8gYWxsIGRhdGEgaW4gd2luZG93CisJCQkKKwkJfS8vIGFsbCBwZWFrcworCQkvLzMuICBub3JtYWxpemUgdGhlIHJlc3VsdCAKKwkJTGlzdDxEb3VibGU+IGNvbXByZXNzZWQgPSBuZXcgQXJyYXlMaXN0PERvdWJsZT4oKTsKKwkJZm9yKGludCBpID0gMDsgaSA8IFdJTkRPVzsgaSArKykgeworCQkJCWlmKGRlbm9tW2ldIDw9IDAuMCkgZGVub21baV0gPSAxLjA7IC8vIGFsd2F5cworCQkJCWRvdWJsZSB2YWwgPSBzdW1baV0gLyBkZW5vbVtpXTsKKwkJCQljb21wcmVzc2VkLmFkZChpLG5ldyBEb3VibGUodmFsKSk7CisJCX0vLyBhbGwgZGF0YSBpbiB3aW5kb3cKKwkJCisJCXJldHVybiBjb21wcmVzc2VkOworCX0KKwkKKworCS8qKgorCSAqIEBwYXJhbSBkYXRhTGlzdAorCSAqIEBwYXJhbSBpc3RhcnQKKwkgKiBAcGFyYW0gaXN0b3AKKwkgKiBAcmV0dXJuIGluZGV4IG9mIHBlYWsgcG9zaXRpb24gd2l0aGluIHdpbmRvdworCSAqLworCXB1YmxpYyBzdGF0aWMgaW50IGZpbmRQZWFrKExpc3Q8RG91YmxlPiBkYXRhTGlzdCwgaW50IGlzdGFydCwgaW50IGlzdG9wKSB7CisJCWludCBwZWFrSW5kZXggPSBpc3RhcnQ7CisJCWRvdWJsZSBwZWFrVmFsID0gMC4wOworCQlmb3IgKGludCBpID0gaXN0YXJ0OyBpIDwgaXN0b3A7IGkgKyspIHsKKwkJCWlmKGkgPCBkYXRhTGlzdC5zaXplKCkgKSB7CisJCQkJZG91YmxlIHZhbCA9IGRhdGFMaXN0LmdldChpKS5kb3VibGVWYWx1ZSgpOworCQkJCWlmKHZhbD5wZWFrVmFsKSB7CisJCQkJCXBlYWtWYWwgPSB2YWw7CisJCQkJCXBlYWtJbmRleCA9IGk7CisJCQkJfS8vIGlmIHBlYWsKKwkJCX0vLyBpZiBub3QgZW5kIG9mIGRhdGEKKwkJfS8vIGZvciBhbGwgZGF0YQorCQkvL0FjdGl2YXRvci5sb2dJbmZvcm1hdGlvbigiZm91bmQgcGVhayBhdCAiK3BlYWtJbmRleCsiIHZhbD0iK3BlYWtWYWwpOworCQlyZXR1cm4gcGVha0luZGV4OworCX0vLyBmaW5kUGVhaworCisKKwkvKioKKwkgKiBAcGFyYW0gZGF0YUxpc3QKKwkgKiBAcGFyYW0gaXN0YXJ0CisJICogQHBhcmFtIGlzdG9wCisJICogQHJldHVybiBpbmRleCBvZiBwZWFrIHBvc2l0aW9uIHdpdGhpbiB3aW5kb3cKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGludCBmaW5kRmlyc3RQZWFrKExpc3Q8RG91YmxlPiBkYXRhTGlzdCwgaW50IGlzdGFydCwgaW50IGlzdG9wKSB7CisJCWludCBwZWFrSW5kZXggPSBpc3RhcnQ7CisJCWRvdWJsZSBwZWFrVmFsID0gMC4wOworCQlmb3IgKGludCBpID0gaXN0YXJ0OyBpIDwgaXN0b3A7IGkgKyspIHsKKwkJCWlmKGkgPCBkYXRhTGlzdC5zaXplKCkgKSB7CisJCQkJZG91YmxlIHZhbCA9IGRhdGFMaXN0LmdldChpKS5kb3VibGVWYWx1ZSgpOworCQkJCWlmKHZhbD49cGVha1ZhbCkgeworCQkJCQlwZWFrVmFsID0gdmFsOworCQkJCQlwZWFrSW5kZXggPSBpOworCQkJCX0vLyBpZiBwZWFrCisJCQkJZWxzZSB7CisJCQkJCXJldHVybiBwZWFrSW5kZXg7CisJCQkJfQorCQkJfS8vIGlmIG5vdCBlbmQgb2YgZGF0YQorCQl9Ly8gZm9yIGFsbCBkYXRhCisJCS8vQWN0aXZhdG9yLmxvZ0luZm9ybWF0aW9uKCJmb3VuZCBwZWFrIGF0ICIrcGVha0luZGV4KyIgdmFsPSIrcGVha1ZhbCk7CisJCXJldHVybiBwZWFrSW5kZXg7CisJfS8vIGZpbmRQZWFrCisJCisJCisJCisJLyoqIAorCSAqIGRvIGEgdGhyZWUgcG9pbnQgc21vb3RoCisJICogQHBhcmFtIGRhdGFMaXN0CisJICogQHJldHVybiB0aGUgc21vb3RoZWQgZGF0YQorCSAqLworCXB1YmxpYyBzdGF0aWMgTGlzdDxEb3VibGU+IHNtb290aDMoTGlzdDxEb3VibGU+IGRhdGFMaXN0KSB7CisJCUxpc3Q8RG91YmxlPiBzbW9vdGggPSBuZXcgQXJyYXlMaXN0PERvdWJsZT4oKTsKKwkJZG91YmxlIHYwID0gZGF0YUxpc3QuZ2V0KDApLmRvdWJsZVZhbHVlKCk7CisJCWRvdWJsZSB2MSA9IGRhdGFMaXN0LmdldCgxKS5kb3VibGVWYWx1ZSgpOworCQkvLyBhZGQgdGhlIGZpcnN0IGVuZHBvaW50CisJCXNtb290aC5hZGQoIG5ldyBEb3VibGUoICh2MCt2MSkvMi4wKSApOworCQkKKwkJLy8gYWRkIHRoZSBvdGhlcnMKKwkJZm9yIChpbnQgaSA9IDE7IGkgPCBkYXRhTGlzdC5zaXplKCktMTsgaSArKykgeworCQkJZG91YmxlIGQxID0gZGF0YUxpc3QuZ2V0KGktMSkuZG91YmxlVmFsdWUoKTsKKwkJCWRvdWJsZSBkMiA9IGRhdGFMaXN0LmdldChpKS5kb3VibGVWYWx1ZSgpOworCQkJZG91YmxlIGQzID0gZGF0YUxpc3QuZ2V0KGkrMSkuZG91YmxlVmFsdWUoKTsKKwkJCXNtb290aC5hZGQoaSwgbmV3IERvdWJsZSggKGQxK2QyK2QzKS8zLjApICk7CisJCX0KKwkJaW50IGlMYXN0ID0gZGF0YUxpc3Quc2l6ZSgpIC0xOworCQkvLyBhZGQgdGhlIGxhc3QgZW5kIHBvaW50CisJCXYwID0gZGF0YUxpc3QuZ2V0KGlMYXN0KS5kb3VibGVWYWx1ZSgpOworCQl2MSA9IGRhdGFMaXN0LmdldChpTGFzdC0xKS5kb3VibGVWYWx1ZSgpOworCQlzbW9vdGguYWRkKCBuZXcgRG91YmxlKCAodjArdjEpLzIuMCkgKTsKKwkJCisJCXJldHVybiBzbW9vdGg7CisJfS8vIHNtb290aAorCQorCisKKwkvKioKKwkgKiBnZXQgdGhlIHJlc3VsdAorCSAqIEByZXR1cm4gY3ljbGUgY29tcHJlc3NlZCBkYXRhCisJICovCisJcHVibGljIGRvdWJsZVtdIGdldENvbXByZXNzZWREYXRhKCkgeworCQlkb3VibGVbXSB2YWx1ZXMgPSBuZXcgZG91YmxlW2NvbXByZXNzZWRDeWNsZXMuc2l6ZSgpXTsKKwkJZm9yIChpbnQgaSA9IDA7IGkgPCBjb21wcmVzc2VkQ3ljbGVzLnNpemUoKTsgaSArKykgeworCQkJdmFsdWVzW2ldID0gY29tcHJlc3NlZEN5Y2xlcy5nZXQoaSkuZG91YmxlVmFsdWUoKTsKKwkJfQorCQlyZXR1cm4gdmFsdWVzOworCX0KKyAKK30KZGlmZiAtLWdpdCBhL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0udXRpbC5hbmFseXNpcy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91dGlsL2FuYWx5c2lzL0RhdGFQcm9jZXNzb3IuamF2YSBiL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0udXRpbC5hbmFseXNpcy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91dGlsL2FuYWx5c2lzL0RhdGFQcm9jZXNzb3IuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MDExNGU2Ci0tLSAvZGV2L251bGwKKysrIGIvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS51dGlsLmFuYWx5c2lzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3V0aWwvYW5hbHlzaXMvRGF0YVByb2Nlc3Nvci5qYXZhCkBAIC0wLDAgKzEsNzUyIEBACisvLyBEYXRhUHJvY2Vzc29yLmphdmEKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS51dGlsLmFuYWx5c2lzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA3LCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGphdmEuaW8uQnVmZmVyZWRSZWFkZXI7CitpbXBvcnQgamF2YS5pby5GaWxlOworaW1wb3J0IGphdmEuaW8uRmlsZVJlYWRlcjsKK2ltcG9ydCBqYXZhLmlvLkZpbGVXcml0ZXI7CitpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLmlvLldyaXRlcjsKK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OworaW1wb3J0IGphdmEudXRpbC5BcnJheXM7CitpbXBvcnQgamF2YS51dGlsLkNhbGVuZGFyOworaW1wb3J0IGphdmEudXRpbC5EYXRlOworaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOworaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuTWFwOworaW1wb3J0IGphdmEudXRpbC5TdHJpbmdUb2tlbml6ZXI7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLlNjZW5hcmlvSW5pdGlhbGl6YXRpb25FeGNlcHRpb247CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5BY3RpdmF0b3I7CisKKy8qKgorICogVGhpcyBjbGFzcyByZWFkcyBpbmNpZGVuY2UgZGF0YSBmcm9tIGZpbGVzIChmaWxlIG5hbWVzIGtleWVkIGJ5IGxvY2F0aW9uKSBhbmQgCisgKiBjcmVhdGVzIHRoZSBuZXcgZm9ybWF0IENTViBmaWxlcyBmb3IgU1RFTS4KKyAqIEl0IHJld3JpdGVzIHRoZSBpbmNpZGVuY2UuCisgKiBJdCBjb21wdXRlcyBhbmQgd3JpdGVzIHRoZSBTSVIgYXBwcm94aW1hdGlvbnMgZnJvbSB0aGUgaW5jaWRlbmNlIGFuZCB0aGUgCisgKiBwb3B1bGF0aW9uIGRhdGEuCisgKi8KK3B1YmxpYyBjbGFzcyBEYXRhUHJvY2Vzc29yIHsKKworCS8qKiAKKwkgKiBOYW1lIG9mIHRoZSByZXN1bHQgZmlsZXMKKwkgKi8KKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgSU5DSURFTkNFX0ZJTEVfTkFNRSA9ICJJbmNpZGVuY2VfMi5jc3YiOworCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBTVVNDRVBUSUJMRV9GSUxFX05BTUUgPSAiU18yLmNzdiI7CisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIElORkVDVElPVVNfRklMRV9OQU1FID0gIklfMi5jc3YiOworCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBSRUNPVkVSRURfRklMRV9OQU1FID0gIlJfMi5jc3YiOworCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBQT1BVTEFUSU9OX0ZJTEVfTkFNRSA9ICJQXzIuY3N2IjsKKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgUkVQT1JUSU5HX0ZSQUNUSU9OX0ZJTEVfTkFNRSA9ICJyZXBvcnRpbmdGcmFjdGlvbi5jc3YiOworCisJLyoqCisJICogSW5jaWRlbmNlcyBwZXIgbG9jYXRpb24gaWQKKwkgKi8KKwlwcml2YXRlIE1hcDxTdHJpbmcsTGlzdDxEYXRhPj4gaW5jaWRlbmNlTWFwID0gbmV3IEhhc2hNYXA8U3RyaW5nLExpc3Q8RGF0YT4+KCk7CisJCisJLyoqCisJICogUG9wdWxhdGlvbiBzaXplIHBlciBsb2NhdGlvbiBpZAorCSAqLworCXByaXZhdGUgTWFwPFN0cmluZyxEb3VibGU+IHBvcHVsYXRpb25NYXAgPSBuZXcgSGFzaE1hcDxTdHJpbmcsRG91YmxlPigpOworCisJLyoqCisJICogTWF4aW11bSBudW1iZXIgb2YgaXRlcmF0aW9ucyAoZGF5cykgZm9yIGEgc3BlY2lmaWMgbG9jYXRpb24gCisJICovCisJcHJpdmF0ZSBpbnQgbWF4SXRlcmF0aW9uID0gMDsKKwkKKwkvKioKKwkgKiBSZWZlcmVuY2UgcG9wdWxhdGlvbiBkYXkgKGRheSBvZiBwb3B1bGF0aW9uIGRhdGEgdmVyc3VzIHRoZSBzdGFydCBkYXRlIAorCSAqIG9mIHRoZSBkYXRhKQorCSAqLworCXByaXZhdGUgbG9uZyByZWZlcmVuY2VQb3B1bGF0aW9uRGF5OworCQorCS8qKgorCSAqIFBvcHVsYXRpb24gY2hhbmdlIHBlciBkYXkgKHBvcHVsYXRpb24gc2l6ZSBhdCB0aGUgc3RhcnQgZGF0ZSBvZiB0aGUgZGF0YSAKKwkgKiB2ZXJzdXMgdGhlIHNpemUgYXQgdGhlIGVuZCBkYXRlIG9mIHRoZSBkYXRhKQorCSAqLworCXByaXZhdGUgZG91YmxlIGZyYWN0Q2hhbmdlUG9wdWxhdGlvblBlckRheTsKKwkKKwkvKioKKwkgKiBDb21wdXRlcyBhbmQgd3JpdGVzIHRoZSBTSVIgYXBwcm94aW1hdGlvbnMgZnJvbSB0aGUgaW5jaWRlbmNlIGFuZCB0aGUgCisJICogcG9wdWxhdGlvbiBkYXRhLgorCSAqIAorCSAqIEBwYXJhbSBzb3VyY2VGb2xkZXIgVGhlIGZvbGRlciBvZiB0aGUgc291cmNlIGRhdGEKKwkgKiBAcGFyYW0gdGFyZ2V0Rm9sZGVyIFRoZSB0YXJnZXQgZm9sZGVyIG9mIHRoZSByZXN1bHRzCisJICogQHBhcmFtIHN0YXJ0RGF0ZSBUaGUgZGF0ZSBpbiB3aGljaCB0aGUgZGF0YSBzdGFydHMKKwkgKiBAcGFyYW0gZW5kRGF0ZSBUaGUgZGF0ZSBpbiB3aGljaCB0aGUgZGF0YSBlbmRzCisJICogQHBhcmFtIHBvcHVsYXRpb25EYXRhRmlsZSBUaGUgcG9wdWxhdGlvbiBkYXRhIGZpbGUKKwkgKiBAcGFyYW0gcG9wdWxhdGlvblNpemVTdGFydFllYXIgUG9wdWxhdGlvbiBzaXplIGluIHRoZSBmaXJzdCB5ZWFyIG9mIHRoZSBkYXRhCisJICogQHBhcmFtIHBvcHVsYXRpb25TaXplRW5kWWVhciBQb3B1bGF0aW9uIHNpemUgaW4gdGhlIGxhc3QgeWVhciBvZiB0aGUgZGF0YQorCSAqIEBwYXJhbSByZWNvdmVyeVJhdGUgQXZlcmFnZSB0aW1lIGl0IHRha2VzIGFuIGluZmVjdGlvdXMgcGVyc29uIHRvIHJlY292ZXIKKwkgKiBAcGFyYW0gc3VzY2VwdGlibGVSYXRlIFJhdGUgb2YgaW5pdGlhbCBzdXNjZXB0aWJsZSB0byBkaXNlYXNlCisJICogQHBhcmFtIGltbXVuaXR5TG9zc1JhdGUgSW1tdW5pdHkgbG9zcyByYXRlIHRvIGRpc2Vhc2UKKwkgKiAKKwkgKiBAdGhyb3dzIFNjZW5hcmlvSW5pdGlhbGl6YXRpb25FeGNlcHRpb24gVGhyb3duIHdoZW4gdGhlIHByb2Nlc3MgZmFpbHMKKwkgKi8KKwlwdWJsaWMgdm9pZCBwcm9jZXNzKAorCQkJU3RyaW5nIHNvdXJjZUZvbGRlciwKKwkJCVN0cmluZyB0YXJnZXRGb2xkZXIsCisJCQlEYXRlIHN0YXJ0RGF0ZSwKKwkJCURhdGUgZW5kRGF0ZSwKKwkJCVN0cmluZyBwb3B1bGF0aW9uRGF0YUZpbGUsCisJCQlsb25nIHBvcHVsYXRpb25TaXplU3RhcnRZZWFyLAorCQkJbG9uZyBwb3B1bGF0aW9uU2l6ZUVuZFllYXIsCisJCQlkb3VibGUgcmVjb3ZlcnlSYXRlLAorCQkJZG91YmxlIHN1c2NlcHRpYmxlUmF0ZSwKKwkJCWRvdWJsZSBpbW11bml0eUxvc3NSYXRlKSB0aHJvd3MgU2NlbmFyaW9Jbml0aWFsaXphdGlvbkV4Y2VwdGlvbiB7CisKKwkJcmVhZFBvcHVsYXRpb25EYXRhKAorCQkJCXBvcHVsYXRpb25EYXRhRmlsZSwgCisJCQkJc3RhcnREYXRlLCAKKwkJCQllbmREYXRlLCAKKwkJCQlwb3B1bGF0aW9uU2l6ZVN0YXJ0WWVhciwgCisJCQkJcG9wdWxhdGlvblNpemVFbmRZZWFyKTsKKwkJCisJCXJlYWRTb3VyY2VEYXRhKHNvdXJjZUZvbGRlcik7CisJCQorCQltb2RlbERpc2Vhc2VTdGF0ZShyZWNvdmVyeVJhdGUsIHN1c2NlcHRpYmxlUmF0ZSwgaW1tdW5pdHlMb3NzUmF0ZSk7CisJCQorCQl3cml0ZVJlc3VsdHModGFyZ2V0Rm9sZGVyKTsKKwkJCisJfSAvLyBwcm9jZXNzCisKKwkvKioKKwkgKiBSZWFkIHRoZSBwb3B1bGF0aW9uIGRhdGEuCisJICogCisJICogQHBhcmFtIHBvcHVsYXRpb25EYXRhRmlsZSBUaGUgcG9wdWxhdGlvbiBkYXRhIGZpbGVzCisJICogQHBhcmFtIHN0YXJ0RGF0ZSBUaGUgZGF0ZSBpbiB3aGljaCB0aGUgZGF0YSBzdGFydHMKKwkgKiBAcGFyYW0gZW5kRGF0ZSBUaGUgZGF0ZSBpbiB3aGljaCB0aGUgZGF0YSBlbmRzCisJICogQHBhcmFtIHBvcHVsYXRpb25TaXplU3RhcnRZZWFyIFBvcHVsYXRpb24gc2l6ZSBpbiB0aGUgZmlyc3QgeWVhciBvZiB0aGUgZGF0YQorCSAqIEBwYXJhbSBwb3B1bGF0aW9uU2l6ZUVuZFllYXIgUG9wdWxhdGlvbiBzaXplIGluIHRoZSBsYXN0IHllYXIgb2YgdGhlIGRhdGEKKwkgKiAKKwkgKiBAZXhjZXB0aW9uIFNjZW5hcmlvSW5pdGlhbGl6YXRpb25FeGNlcHRpb24gCisJICogCQkJICBUaHJvd24gd2hlbiBmYWlsZWQgdG8gbG9hZCB0aGUgcG9wdWxhdGlvbiBkYXRhCisJICovCisJcHJpdmF0ZSB2b2lkIHJlYWRQb3B1bGF0aW9uRGF0YSgKKwkJCVN0cmluZyBwb3B1bGF0aW9uRGF0YUZpbGUsCisJCQlEYXRlIHN0YXJ0RGF0ZSwKKwkJCURhdGUgZW5kRGF0ZSwKKwkJCWxvbmcgcG9wdWxhdGlvblNpemVTdGFydFllYXIsCisJCQlsb25nIHBvcHVsYXRpb25TaXplRW5kWWVhcikgdGhyb3dzIFNjZW5hcmlvSW5pdGlhbGl6YXRpb25FeGNlcHRpb24geworCisJCWZpbmFsIFN0cmluZyBQT1BVTEFUSU9OX1lFQVIgPSAiWUVBUiI7CisKKwkJRmlsZSBmaWxlID0gbmV3IEZpbGUocG9wdWxhdGlvbkRhdGFGaWxlKTsKKwkJCisJCUJ1ZmZlcmVkUmVhZGVyIGZpbGVSZWFkZXIgPSBvcGVuUmVhZGVyKGZpbGUpOworCQlpZiAoZmlsZVJlYWRlciA9PSBudWxsKSB7CisJCQl0aHJvdyBuZXcgU2NlbmFyaW9Jbml0aWFsaXphdGlvbkV4Y2VwdGlvbigKKwkJCQkJIkZhaWxlZCB0byBvcGVuIHBvcHVsYXRpb24gZGF0YSBmaWxlICIgKyBwb3B1bGF0aW9uRGF0YUZpbGUpOworCQl9CisJCQorCQkvLyBpbml0aWFsaXplIHRoZSBwb3B1bGF0aW9uIGRhdGEgeWVhciB0byB0aGUgZmlyc3QgeWVhciBvZiB0aGUgZGF0YSAgCisJCUNhbGVuZGFyIGNhbCA9IENhbGVuZGFyLmdldEluc3RhbmNlKCk7CisJCWNhbC5zZXRUaW1lKHN0YXJ0RGF0ZSk7CisJCWludCBwb3B1bGF0aW9uRGF0YVllYXIgPSBjYWwuZ2V0KENhbGVuZGFyLllFQVIpOworCQkKKwkJdHJ5IHsKKwkJCVN0cmluZyBidWZmZXIgPSBudWxsOworCQkJd2hpbGUgKEVPRihidWZmZXIgPSBmaWxlUmVhZGVyLnJlYWRMaW5lKCkpICE9IHRydWUpIHsKKwkJCQlpbnQgaWR4ID0gYnVmZmVyLmluZGV4T2YoIj0iKTsKKwkJCQlpZihpZHggPj0gMCkgeworCQkJCQlTdHJpbmcgaWQgPSAoYnVmZmVyLnN1YnN0cmluZygwLGlkeCkpLnRyaW0oKTsKKwkJCQkJU3RyaW5nIHZhbHVlID0gKGJ1ZmZlci5zdWJzdHJpbmcoaWR4KzEsYnVmZmVyLmxlbmd0aCgpKSkudHJpbSgpOworCQkJCQlpZihpZC5lcXVhbHMoUE9QVUxBVElPTl9ZRUFSKSkgeworCQkJCQkJLy8gZXh0cmFjdHMgdGhlIHBvcHVsYXRpb24gZGF0YSB5ZWFyIGZyb20gdGhlIGZpbGUKKwkJCQkJCXRyeSB7CisJCQkJCQkJcG9wdWxhdGlvbkRhdGFZZWFyID0gSW50ZWdlci5wYXJzZUludCh2YWx1ZSk7CisJCQkJCQl9IGNhdGNoIChOdW1iZXJGb3JtYXRFeGNlcHRpb24gZXgpIHsKKwkJCQkJCQkvLyBpZ25vcmUKKwkJCQkJCQlBY3RpdmF0b3IubG9nSW5mb3JtYXRpb24oIkZhaWxlZCB0byByZWFkIHBvcHVsYXRpb24geWVhciIsIGV4KTsKKwkJCQkJCX0KKwkJCQkJfSBlbHNlIGlmKGlkLmluZGV4T2YoIi0iKSA+PSAwKXsKKwkJCQkJCXRyeSB7CisJCQkJCQkJcG9wdWxhdGlvbk1hcC5wdXQoaWQsbmV3IERvdWJsZSh2YWx1ZSkpOworCQkJCQkJfSBjYXRjaCAoTnVtYmVyRm9ybWF0RXhjZXB0aW9uIGV4KSB7CisJCQkJCQkJLy8gaWdub3JlCisJCQkJCQkJQWN0aXZhdG9yLmxvZ0luZm9ybWF0aW9uKCJGYWlsZWQgdG8gcmVhZCBwb3B1bGF0aW9uIGZvciAiICsgaWQsIGV4KTsKKwkJCQkJCX0KKwkJCQkJfQorCQkJCX0KKwkJCX0KKworCQkJaWYocG9wdWxhdGlvbk1hcC5pc0VtcHR5KCkpIHsKKwkJCQl0aHJvdyBuZXcgU2NlbmFyaW9Jbml0aWFsaXphdGlvbkV4Y2VwdGlvbigiRmFpbGVkIHRvIHJlYWQgcG9wdWxhdGlvbiBkYXRhIGZyb20gIiArIGZpbGUuZ2V0TmFtZSgpKTsKKwkJCX0KKworCQkJLy8gY29tcHV0YXRpb24gb2YgcmVmZXJlbmNlIHBvcHVsYXRpb24gZGF5CisJCQljYWwgPSBDYWxlbmRhci5nZXRJbnN0YW5jZSgpOworCQkJY2FsLnNldChDYWxlbmRhci5EQVlfT0ZfWUVBUiwgMSk7CisJCQljYWwuc2V0KENhbGVuZGFyLllFQVIsIHBvcHVsYXRpb25EYXRhWWVhcik7IC8vIHBvcHVsYXRpb24gZGF0YSB5ZWFyCisJCQlsb25nIG9mZnNldCA9IGNhbC5nZXRUaW1lSW5NaWxsaXMoKS1zdGFydERhdGUuZ2V0VGltZSgpOyAvLyBpbiBtaWxsaXNlY29uZHMKKwkJCXJlZmVyZW5jZVBvcHVsYXRpb25EYXkgPSBvZmZzZXQvKDEwMDAqNjAqNjAqMjQpOworCQkJCisJCQkvLyBjb21wdXRhdGlvbiBvZiBwb3B1bGF0aW9uIGNoYW5nZSBwZXIgZGF5CisJCQlvZmZzZXQgPSBlbmREYXRlLmdldFRpbWUoKS1zdGFydERhdGUuZ2V0VGltZSgpOyAvLyBpbiBtaWxsaXNlY29uZHMKKwkJCWxvbmcgb2Zmc2V0RGF5cyA9IG9mZnNldC8oMTAwMCo2MCo2MCoyNCk7CisJCQlkb3VibGUgY2hhbmdlUG9wdWxhdGlvblBlckRheSA9IAorCQkJCSgoZG91YmxlKXBvcHVsYXRpb25TaXplRW5kWWVhciAtIChkb3VibGUpcG9wdWxhdGlvblNpemVTdGFydFllYXIpLyhvZmZzZXREYXlzKzEpOworCQkJCisJCQlmcmFjdENoYW5nZVBvcHVsYXRpb25QZXJEYXkgPSBjaGFuZ2VQb3B1bGF0aW9uUGVyRGF5L3BvcHVsYXRpb25TaXplU3RhcnRZZWFyOworCisJCX0gY2F0Y2goSU9FeGNlcHRpb24gZXgpIHsKKwkJCXRocm93IG5ldyBTY2VuYXJpb0luaXRpYWxpemF0aW9uRXhjZXB0aW9uKGV4KTsKKwkJfQorCQkKKwl9IC8vIHJlYWRQb3B1bGF0aW9uRGF0YQorCQorCS8qKgorCSAqIFJlYWQgdGhlIHNvdXJjZSBkYXRhLgorCSAqIAorCSAqIEBwYXJhbSBzb3VyY2VGb2xkZXIgVGhlIGZvbGRlciBvZiB0aGUgc291cmNlIGRhdGEKKwkgKiAKKwkgKiBAZXhjZXB0aW9uIFNjZW5hcmlvSW5pdGlhbGl6YXRpb25FeGNlcHRpb24gCisJICogCQkJICBUaHJvd24gd2hlbiBmYWlsZWQgdG8gbG9hZCB0aGUgc291cmNlIGRhdGEgZmlsZXMKKwkgKi8KKwlwcml2YXRlIHZvaWQgcmVhZFNvdXJjZURhdGEoCisJCQlTdHJpbmcgc291cmNlRm9sZGVyKSB0aHJvd3MgU2NlbmFyaW9Jbml0aWFsaXphdGlvbkV4Y2VwdGlvbiB7CisJCQorCQlGaWxlIGZpbGUgPSBuZXcgRmlsZShzb3VyY2VGb2xkZXIpOworCQkJCisJCWludCBudW1GaWxlcyA9IDA7CisJCUZpbGVbXSBhbGxGaWxlcyA9IGZpbGUubGlzdEZpbGVzKCk7CisJCWZvciAoaW50IGkgPSAwOyBpIDwgYWxsRmlsZXMubGVuZ3RoOyBpKyspIHsKKwkJCXRyeSB7CisJCQkJcmVhZERhdGFGcm9tU291cmNlRmlsZShhbGxGaWxlc1tpXSk7CisJCQkJbnVtRmlsZXMgKys7CisJCQl9IGNhdGNoKFNjZW5hcmlvSW5pdGlhbGl6YXRpb25FeGNlcHRpb24gZXgpIHsKKwkJCQlBY3RpdmF0b3IubG9nSW5mb3JtYXRpb24oIkZhaWxlZCB0byByZWFkIGRhdGEgZnJvbSAiICsgYWxsRmlsZXNbaV0uZ2V0TmFtZSgpLCBleCk7CisJCQl9CisJCX0KKwkJCisJCWlmKG51bUZpbGVzID09IDApIHsKKwkJCXRocm93IG5ldyBTY2VuYXJpb0luaXRpYWxpemF0aW9uRXhjZXB0aW9uKCJGYWlsZWQgdG8gcmVhZCBzb3VyY2UgZGF0YSBmcm9tICIgKyBzb3VyY2VGb2xkZXIpOworCQl9CisJCQorCX0gLy8gcmVhZFNvdXJjZURhdGEKKwkKKwkvKioKKwkgKiBSZWFkIGRhdGEgZnJvbSBhIHNvdXJjZSBmaWxlLgorCSAqIAorCSAqIEBwYXJhbSBmaWxlIEEgc291cmNlIGZpbGUKKwkgKiAKKwkgKiBAZXhjZXB0aW9uIFNjZW5hcmlvSW5pdGlhbGl6YXRpb25FeGNlcHRpb24gCisJICogCQkJICBUaHJvd24gd2hlbiBmYWlsZWQgdG8gbG9hZCBhIHNvdXJjZSBmaWxlCisJICovCisJcHJpdmF0ZSB2b2lkIHJlYWREYXRhRnJvbVNvdXJjZUZpbGUoCisJCQlGaWxlIGZpbGUpIHRocm93cyBTY2VuYXJpb0luaXRpYWxpemF0aW9uRXhjZXB0aW9uIHsKKwkJCisJCVN0cmluZyBmaWxlTmFtZSA9IGZpbGUuZ2V0TmFtZSgpOworCQlpZiAoZmlsZU5hbWUuaW5kZXhPZigiLnR4dCIpIDwgMCkgeworCQkJcmV0dXJuOyAvLyBpZ25vcmUKKwkJfQorCisJCUJ1ZmZlcmVkUmVhZGVyIGZpbGVSZWFkZXIgPSBvcGVuUmVhZGVyKGZpbGUpOworCQlpZiAoZmlsZVJlYWRlciA9PSBudWxsKSB7CisJCQl0aHJvdyBuZXcgU2NlbmFyaW9Jbml0aWFsaXphdGlvbkV4Y2VwdGlvbigiRmFpbGVkIHRvIG9wZW4gZmlsZSAiICsgZmlsZU5hbWUpOworCQl9CisJCQorCQlpbnQgaWR4ID0gZmlsZU5hbWUuaW5kZXhPZigiLnR4dCIpOworCQlTdHJpbmcgaWRJbnB1dCA9IGZpbGVOYW1lLnN1YnN0cmluZygwLGlkeCk7CisJCVN0cmluZyBpZCA9IGNvbnZlcnRJRChpZElucHV0KTsKKwkJaWYgKGlkID09IG51bGwpIHsKKwkJCXRocm93IG5ldyBTY2VuYXJpb0luaXRpYWxpemF0aW9uRXhjZXB0aW9uKCJGYWlsZWQgdG8gY29udmVydCAiICsgaWRJbnB1dCArICIgdG8gU1RFTSBJRCIpOworCQl9CisJCQorCQlEb3VibGUgcG9wdWxhdGlvbiA9IHBvcHVsYXRpb25NYXAuZ2V0KGlkKTsKKwkJaWYgKHBvcHVsYXRpb24gPT0gbnVsbCkgeworCQkJdGhyb3cgbmV3IFNjZW5hcmlvSW5pdGlhbGl6YXRpb25FeGNlcHRpb24oIk5vIHBvcHVsYXRpb24gZm91bmQgZm9yICIgKyBpZCArICIgZnJvbSAiICsgaWRJbnB1dCk7CisJCX0KKworCQlpZighaW5jaWRlbmNlTWFwLmNvbnRhaW5zS2V5KGlkKSkgeworCQkJTGlzdDxEYXRhPiBpbmNMaXN0ID0gbmV3IEFycmF5TGlzdDxEYXRhPigpOworCQkJaW5jaWRlbmNlTWFwLnB1dChpZCwgaW5jTGlzdCk7CisJCX0KKwkJTGlzdDxEYXRhPiBpbmNMaXN0ID0gaW5jaWRlbmNlTWFwLmdldChpZCk7CisKKwkJdHJ5IHsKKwkJCVN0cmluZyBidWZmZXIgPSBudWxsOworCQkJZmlsZVJlYWRlci5yZWFkTGluZSgpOyAvLyBza2lwIHRoZSBoZWFkZXIKKwkJCXdoaWxlIChFT0YoYnVmZmVyID0gZmlsZVJlYWRlci5yZWFkTGluZSgpKSAhPSB0cnVlKSB7CisKKwkJCQlTdHJpbmdUb2tlbml6ZXIgdG9rZW5pemVyID0gbmV3IFN0cmluZ1Rva2VuaXplcihidWZmZXIsICIsIik7IC8vJE5PTi1OTFMtMSQKKwkJICAgICAgICBTdHJpbmcgaXRlcmF0aW9uID0gdG9rZW5pemVyLm5leHRUb2tlbigiLCIpOworCQkgICAgICAgIFN0cmluZyB0aW1lID0gdG9rZW5pemVyLm5leHRUb2tlbigiLCIpOworCQkgICAgICAgIFN0cmluZyBpbmMgPSB0b2tlbml6ZXIubmV4dFRva2VuKCIsIik7CisJCQkgICAgCisJCSAgICAgICAgSW50ZWdlciBjb3VudCA9IG5ldyBJbnRlZ2VyKGl0ZXJhdGlvbi50cmltKCkpOworCQkJICAgIGRvdWJsZSByZXBvcnRzID0gKG5ldyBEb3VibGUoaW5jKSkuZG91YmxlVmFsdWUoKTsKKwkJCSAgICBkb3VibGUgcG9wID0gZ2V0UG9wdWxhdGlvbihjb3VudC5pbnRWYWx1ZSgpLCBwb3B1bGF0aW9uLmRvdWJsZVZhbHVlKCkpOworCQkJICAgIERhdGEgZGF0YSA9IG5ldyBEYXRhKGNvdW50LCB0aW1lLCByZXBvcnRzLCBwb3ApOworCQkJICAgIGluY0xpc3QuYWRkKGRhdGEpOworCQkJICAgIGlmKGluY0xpc3Quc2l6ZSgpID4gbWF4SXRlcmF0aW9uKSB7CisJCQkgICAgCW1heEl0ZXJhdGlvbiA9IGluY0xpc3Quc2l6ZSgpOworCQkJICAgIH0KKwkJCX0KKwkJfSBjYXRjaChJT0V4Y2VwdGlvbiBleCkgeworCQkJdGhyb3cgbmV3IFNjZW5hcmlvSW5pdGlhbGl6YXRpb25FeGNlcHRpb24oZXgpOworCQl9CisJCQorCX0gLy8gcmVhZERhdGFGcm9tU291cmNlRmlsZQorCisJLyoqCisJICogTW9kZWwgdGhlIFMsSSxSIGRpc2Vhc2UgcGFyYW1ldGVycyBmcm9tIGluY2lkZW5jZSBkYXRhLCBwb3B1bGF0aW9uLCBhbmQgCisJICogbW9kZWxlZCBwYXJhbWV0ZXJzIGZvciByZXBvcnRpbmcgZnJhY3Rpb24gYW5kIHJlY292ZXJ5IHJhdGUuCisJICogCisJICogQHBhcmFtIHJlY292ZXJ5UmF0ZSBBdmVyYWdlIHRpbWUgaXQgdGFrZXMgYW4gaW5mZWN0aW91cyBwZXJzb24gdG8gcmVjb3ZlcgorCSAqIEBwYXJhbSBzdXNjZXB0aWJsZVJhdGUgUmF0ZSBvZiBpbml0aWFsIHN1c2NlcHRpYmxlIHRvIGRpc2Vhc2UKKwkgKiBAcGFyYW0gaW1tdW5pdHlMb3NzUmF0ZSBJbW11bml0eSBsb3NzIHJhdGUgdG8gZGlzZWFzZQorCSAqLworCXByaXZhdGUgdm9pZCBtb2RlbERpc2Vhc2VTdGF0ZSgKKwkJCWRvdWJsZSByZWNvdmVyeVJhdGUsCisJCQlkb3VibGUgc3VzY2VwdGlibGVSYXRlLAorCQkJZG91YmxlIGltbXVuaXR5TG9zc1JhdGUpIHsKKwkJCisJCS8vIGZvciBhbGwgbG9jYXRpb25zCisJCUl0ZXJhdG9yPFN0cmluZz4gaXRlciA9IHBvcHVsYXRpb25NYXAua2V5U2V0KCkuaXRlcmF0b3IoKTsKKwkJd2hpbGUoaXRlci5oYXNOZXh0KCkpIHsKKwkJCVN0cmluZyBpZCA9IGl0ZXIubmV4dCgpOworCQkJCisJCQlpZighaW5jaWRlbmNlTWFwLmNvbnRhaW5zS2V5KGlkKSkgeworCQkJCS8vIGlnbm9yZSAtIG5vIGluY2lkZW5jZXMgZm9yIHRoaXMgbG9jYXRpb24gaWQKKwkJCQljb250aW51ZTsKKwkJCX0KKworCQkJTGlzdDxEYXRhPiBkYXRhTGlzdCA9IGluY2lkZW5jZU1hcC5nZXQoaWQpOworCQkJCQorCQkJZG91YmxlIG1pbkZyYWN0aW9uID0gMTAuMDsKKwkJCWRvdWJsZSBiZXN0RnJhY3Rpb24gPSAxLjA7CisJCQlkb3VibGUgbWluU2xvcGUgPSBEb3VibGUuTUFYX1ZBTFVFOworCQkJCisJCQkvLyBkcm9wIHRoZSByZXBvcnRpbmcgZnJhY3Rpb24gdW50aWwgd2UgaGl0IG5lZ2F0aXZlIFMgCisJCQkvLyB0aGlzIHNldHMgdGhlIE1JTiByZXBvcnRpbmcgZnJhY3Rpb24KKwkJCWJvb2xlYW4gdmFsaWQgPSB0cnVlOworCQkJYm9vbGVhbiBwb2ludE9LID0gdHJ1ZTsKKwkJCWZpbmFsIGludCBtYXhkZWx0YSA9IDEwMDA7CisJCQlpbnQgaWRlbHRhID0gbWF4ZGVsdGE7CisJCSAgICBkb3VibGUgc2NhbGUgPSAxMDAwMDA7CisJCQlmb3IgKGludCBpZnJhY3Rpb24gPSAoaW50KXNjYWxlOyAoKGlmcmFjdGlvbiA+IDEpJiZ2YWxpZCk7IGlmcmFjdGlvbiAtPSBpZGVsdGEpIHsKKwkJCQlwb2ludE9LID0gdHJ1ZTsKKwkJCQlpZigoaWZyYWN0aW9uPD0gaWRlbHRhKSYmKGlkZWx0YSA+PTEwKSl7CisJCQkJCWlkZWx0YSAvPSAxMDsKKwkJCQl9CisJCQkJZG91YmxlIGZyYWN0aW9uID0gaWZyYWN0aW9uL3NjYWxlOworCQkJCQorCQkJCS8vIGZvciBhbGwgaXRlcmF0aW9ucworCQkJCS8vIHJlLXNjYWxlIHRoZSBpbmNpZGVuY2UgYW5kIGludGVncmF0ZSBpdCBvdmVyIHRpbWUKKwkJCQkvLyBhbmQgc3VidHJhY3RpbmcgZnJvbSB0aGUgc3VzY2VwdGlibGUgYXQgZWFjaCB0aW1lIHN0ZXAKKwkJCQlkb3VibGUgaW50ZWdyYXRlZEluZmVjdGlvdXMgPSAwLjA7CisJCQkJZG91YmxlIGludGVncmF0ZWRSZWNvdmVyaWVzID0gMC4wOworCQkJCWRvdWJsZVtdIHlkYXRhUyA9IG5ldyBkb3VibGVbbWF4SXRlcmF0aW9uXTsKKwkJCQlkb3VibGVbXSB5ZGF0YVIgPSBuZXcgZG91YmxlW21heEl0ZXJhdGlvbl07CisJCQkJZG91YmxlW10geGRhdGEgPSBuZXcgZG91YmxlW21heEl0ZXJhdGlvbl07CisJCQkJZm9yKGludCBpPTA7IGk8bWF4SXRlcmF0aW9uOyBpKyspIHsKKwkJCQkJeWRhdGFTW2ldID0gMC4wOworCQkJCQl5ZGF0YVJbaV0gPSAwLjA7CisJCQkJCXhkYXRhW2ldID0gMC4wOworCQkJCX0KKwkJCQkKKwkJCQlmb3IgKGludCBpID0gMDsgKChpIDwgZGF0YUxpc3Quc2l6ZSgpKSYmdmFsaWQpOyBpICsrKSB7CisJCQkJCURhdGEgZGF0YSA9IGRhdGFMaXN0LmdldChpKTsKKwkJCQkJZG91YmxlIGluY2lkZW5jZSA9IGRhdGEucmVwb3J0cy9mcmFjdGlvbjsKKwkJCQkJZG91YmxlIHBvcHVsYXRpb24gPSBkYXRhLnBvcHVsYXRpb247CisJCQkJCWludGVncmF0ZWRJbmZlY3Rpb3VzICs9IGluY2lkZW5jZTsKKwkJCQkJZG91YmxlIHJlY292ZXJpZXMgPSBpbnRlZ3JhdGVkSW5mZWN0aW91cyAqIHJlY292ZXJ5UmF0ZTsgCisJCQkJCWludGVncmF0ZWRSZWNvdmVyaWVzICs9IHJlY292ZXJpZXM7CisJCQkJCS8vIHNldCB0aGUgaW5pdGlhbCByZWNvdmVyZWQKKwkJCQkJaWYoaT09MCl7IAorCQkJCQkJaW50ZWdyYXRlZFJlY292ZXJpZXMgKz0gKDEuMC1zdXNjZXB0aWJsZVJhdGUpICogcG9wdWxhdGlvbjsKKwkJCQkJfQorCQkJCQlpbnRlZ3JhdGVkSW5mZWN0aW91cyAtPSByZWNvdmVyaWVzOworCQkJCQlkb3VibGUgaW5mZWN0aW91cyA9IGludGVncmF0ZWRJbmZlY3Rpb3VzOworCQkJCQlpbnRlZ3JhdGVkUmVjb3ZlcmllcyAqPSAoMS4wIC0gaW1tdW5pdHlMb3NzUmF0ZSk7CisJCQkJCWRvdWJsZSByZWNvdmVyZWQgPSBpbnRlZ3JhdGVkUmVjb3ZlcmllczsKKwkJCQkJZG91YmxlIHN1c2NlcHRpYmxlID0gcG9wdWxhdGlvbiAtIChpbmZlY3Rpb3VzICsgcmVjb3ZlcmVkKTsKKwkJCQkJeWRhdGFTW2ldID0gc3VzY2VwdGlibGUvcG9wdWxhdGlvbjsKKwkJCQkJeWRhdGFSW2ldID0gcmVjb3ZlcmVkL3BvcHVsYXRpb247CisJCQkJCXhkYXRhW2ldID0gaTsKKwkJCQkJaWYoKHN1c2NlcHRpYmxlID49IDAuMCkgJiYocmVjb3ZlcmVkPj0wLjApJiYoaW5mZWN0aW91cz49IDAuMCkpeworCQkJCQkJbWluRnJhY3Rpb24gPSBmcmFjdGlvbjsKKwkJCQkJCWRhdGEucmVwb3J0aW5nRnJhY3Rpb24gPSBtaW5GcmFjdGlvbjsKKwkJCQkJfSBlbHNlIHsKKwkJCQkJCXBvaW50T0sgPSBmYWxzZTsKKwkJCQkJCWlmKGlkZWx0YSA+IDEpIHsKKwkJCQkJCQkvLyBiYWNrIHVwIGFuZCB0YWtlIHNtYWxsZXIgc3RlcHMKKwkJCQkJCQlpZnJhY3Rpb24gKz0gaWRlbHRhOworCQkJCQkJCWlkZWx0YSAvPSAxMDsKKwkJCQkJCX0gZWxzZSB7CisJCQkJCQkJdmFsaWQgPSBmYWxzZTsKKwkJCQkJCQlpZGVsdGEgPSBtYXhkZWx0YTsKKwkJCQkJCX0KKwkJCQkJCWJyZWFrOworCQkJCQl9CisJCQkJCWlmKCEodmFsaWQmJnBvaW50T0spKSBicmVhazsKKwkJCQl9IC8vIGZvciBpIHRpbWUgc3RlcHMKKwkJCQkKKwkJCQlpZih2YWxpZCYmcG9pbnRPSykgeworCQkJCQlkb3VibGUgc2xvcGUgPSBnZXRTbG9wZUxpbmVhcih4ZGF0YSx5ZGF0YVMpOworCQkJCQlpZiAoTWF0aC5hYnMoc2xvcGUpIDw9IG1pblNsb3BlKSB7CisJCQkJCQltaW5TbG9wZSA9IE1hdGguYWJzKHNsb3BlKTsKKwkJCQkJCWJlc3RGcmFjdGlvbiA9IGZyYWN0aW9uOworCQkJCQl9CisJCQkJfQorCQkJCQorCQkJfSAvLyBmb3IgYWxsIHJlcG9ydGluZyBmcmFjdGlvbnMKKworCQkJLy8gc2V0IHRoZSBmcmFjdGlvbnMKKwkJCWZvciAoaW50IGkgPSAwOyAoKGkgPCBkYXRhTGlzdC5zaXplKCkpJiZ2YWxpZCk7IGkgKyspIHsKKwkJCQlEYXRhIGRhdGEgPSBkYXRhTGlzdC5nZXQoaSk7CisJCQkJaWYoKGJlc3RGcmFjdGlvbjwgMC45KSYmKGJlc3RGcmFjdGlvbiA+PSBkYXRhLnJlcG9ydGluZ0ZyYWN0aW9uKSl7CisJCQkJCWRhdGEucmVwb3J0aW5nRnJhY3Rpb24gPSBiZXN0RnJhY3Rpb247CisJCQkJfQorCQkJfSAvLyBmb3IgYWxsIHRpbWVzCisJCX0gLy8gZm9yIGFsbCBsb2NhdGlvbnMKKwkJCisJCS8vIGZvciBhbGwgbG9jYXRpb25zCisJCWl0ZXIgPSBwb3B1bGF0aW9uTWFwLmtleVNldCgpLml0ZXJhdG9yKCk7CisJCXdoaWxlKGl0ZXIuaGFzTmV4dCgpKSB7CisJCQlTdHJpbmcgaWQgPSBpdGVyLm5leHQoKTsKKwkJCWlmKCFpbmNpZGVuY2VNYXAuY29udGFpbnNLZXkoaWQpKSB7CisJCQkJLy8gaWdub3JlIC0gbm8gaW5jaWRlbmNlcyBmb3IgdGhpcyBsb2NhdGlvbiBpZAorCQkJCWNvbnRpbnVlOworCQkJfQorCQkJTGlzdDxEYXRhPiBkYXRhTGlzdCA9IGluY2lkZW5jZU1hcC5nZXQoaWQpOworCisJCQkvLyBmb3IgYWxsIGl0ZXJhdGlvbnMKKwkJCS8vIHJlLXNjYWxlIHRoZSBpbmNpZGVuY2UgYW5kIGludGVncmF0ZSBpdCBvdmVyIHRpbWUKKwkJCS8vIGFuZCBzdWJ0cmFjdGluZyBmcm9tIHRoZSBzdXNjZXB0aWJsZSBhdCBlYWNoIHRpbWUgc3RlcAorCQkJZG91YmxlIGludGVncmF0ZWRJbmZlY3Rpb3VzID0gMC4wOworCQkJZG91YmxlIGludGVncmF0ZWRSZWNvdmVyaWVzID0gMC4wOworCisJCQkvLyBzZXQgdGhlIGRhdGEKKwkJCWZvciAoaW50IGkgPSAwOyAoaSA8IGRhdGFMaXN0LnNpemUoKSk7IGkgKyspIHsKKwkJCQlEYXRhIGRhdGEgPSBkYXRhTGlzdC5nZXQoaSk7CisJCQkJZG91YmxlIGZyYWN0aW9uID0gZGF0YS5yZXBvcnRpbmdGcmFjdGlvbjsKKwkJCQlkb3VibGUgaW5jaWRlbmNlID0gZGF0YS5yZXBvcnRzL2ZyYWN0aW9uOworCQkJCWRvdWJsZSBwb3B1bGF0aW9uID0gZGF0YS5wb3B1bGF0aW9uOworCQkJCWludGVncmF0ZWRJbmZlY3Rpb3VzICs9IGluY2lkZW5jZTsKKwkJCQlkb3VibGUgcmVjb3ZlcmllcyA9IGludGVncmF0ZWRJbmZlY3Rpb3VzICogcmVjb3ZlcnlSYXRlOworCQkJCWludGVncmF0ZWRSZWNvdmVyaWVzICs9IHJlY292ZXJpZXM7CisJCQkJLy8gc2V0IHRoZSBpbml0aWFsIHJlY292ZXJlZAorCQkJCWlmKGk9PTApeworCQkJCQlpbnRlZ3JhdGVkUmVjb3ZlcmllcyArPSAoMS4wLXN1c2NlcHRpYmxlUmF0ZSkgKiBwb3B1bGF0aW9uOworCQkJCX0KKwkJCQlpbnRlZ3JhdGVkSW5mZWN0aW91cyAtPSByZWNvdmVyaWVzOworCQkJCWRhdGEuaW5mZWN0aW91cyA9IGludGVncmF0ZWRJbmZlY3Rpb3VzOworCQkJCWludGVncmF0ZWRSZWNvdmVyaWVzICo9ICgxLjAgLSBpbW11bml0eUxvc3NSYXRlKTsKKwkJCQlkYXRhLnJlY292ZXJlZCA9IGludGVncmF0ZWRSZWNvdmVyaWVzOworCQkJCWRhdGEuc3VzY2VwdGlibGUgPSBwb3B1bGF0aW9uIC0gKGRhdGEuaW5mZWN0aW91cyArIGRhdGEucmVjb3ZlcmVkKTsKKwkJCQkKKwkJCX0gLy8gZm9yIGkgdGltZSBzdGVwcworCQkJCisJCX0gLy8gZm9yIGFsbCBsb2NhdGlvbnMKKwkJCisJfSAvLyBtb2RlbERpc2Vhc2VTdGF0ZQorCisJLyoqCisJICogV3JpdGUgdGhlIHJlc3VsdHMgdG8gdGhlIHRhcmdldCBmb2xkZXIuCisJICogCisJICogQHBhcmFtIHRhcmdldEZvbGRlciBUaGUgdGFyZ2V0IGZvbGRlciBvZiB0aGUgcmVzdWx0cworCSAqIAorCSAqIEBleGNlcHRpb24gU2NlbmFyaW9Jbml0aWFsaXphdGlvbkV4Y2VwdGlvbiAKKwkgKiAJCQkgIFRocm93biB3aGVuIGZhaWxlZCB0byB3cml0ZSByZXN1bHRzCisJICovCisJcHJpdmF0ZSB2b2lkIHdyaXRlUmVzdWx0cygKKwkJCVN0cmluZyB0YXJnZXRGb2xkZXIpIHRocm93cyBTY2VuYXJpb0luaXRpYWxpemF0aW9uRXhjZXB0aW9uIHsKKworCQl0cnkgeworCQkJaWYoIXRhcmdldEZvbGRlci5lbmRzV2l0aChGaWxlLnNlcGFyYXRvcikpIHsKKwkJCQl0YXJnZXRGb2xkZXIgKz0gRmlsZS5zZXBhcmF0b3I7CisJCQl9CisJCQkKKwkJCVdyaXRlciBmdzEgPSBuZXcgRmlsZVdyaXRlcih0YXJnZXRGb2xkZXIgKyBJTkNJREVOQ0VfRklMRV9OQU1FKTsKKwkJCVdyaXRlciBmdzIgPSBuZXcgRmlsZVdyaXRlcih0YXJnZXRGb2xkZXIgKyBTVVNDRVBUSUJMRV9GSUxFX05BTUUpOworCQkJV3JpdGVyIGZ3MyA9IG5ldyBGaWxlV3JpdGVyKHRhcmdldEZvbGRlciArIElORkVDVElPVVNfRklMRV9OQU1FKTsKKwkJCVdyaXRlciBmdzQgPSBuZXcgRmlsZVdyaXRlcih0YXJnZXRGb2xkZXIgKyBSRUNPVkVSRURfRklMRV9OQU1FKTsKKwkJCVdyaXRlciBmdzUgPSBuZXcgRmlsZVdyaXRlcih0YXJnZXRGb2xkZXIgKyBQT1BVTEFUSU9OX0ZJTEVfTkFNRSk7CisJCQlXcml0ZXIgZnc2ID0gbmV3IEZpbGVXcml0ZXIodGFyZ2V0Rm9sZGVyICsgUkVQT1JUSU5HX0ZSQUNUSU9OX0ZJTEVfTkFNRSk7CisJCQkKKwkJCVN0cmluZ1tdIGtleXMgPSBuZXcgU3RyaW5nW3BvcHVsYXRpb25NYXAua2V5U2V0KCkuc2l6ZSgpXTsKKwkJCUl0ZXJhdG9yPFN0cmluZz4gaXRlciA9IHBvcHVsYXRpb25NYXAua2V5U2V0KCkuaXRlcmF0b3IoKTsKKwkJCWludCBjb3VudGVyPTA7CisJCQl3aGlsZShpdGVyLmhhc05leHQoKSkgeworCQkJCWtleXNbY291bnRlcisrXSA9IGl0ZXIubmV4dCgpOworCQkJfQorCQkJCisJCQlBcnJheXMuc29ydChrZXlzKTsKKwkJCQorCQkJU3RyaW5nIGhlYWRlclRleHQgPSAiaXRlcmF0aW9uLHRpbWUiOworCQkJU3RyaW5nQnVpbGRlciBzdHJCbGRyID0gbmV3IFN0cmluZ0J1aWxkZXIoaGVhZGVyVGV4dCk7CisJCQlmb3IgKGludCBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyBpICsrKSB7CisJCQkJaWYgKGluY2lkZW5jZU1hcC5jb250YWluc0tleShrZXlzW2ldKSkgeworCQkJCQlzdHJCbGRyLmFwcGVuZCgiLCIpOworCQkJCQlzdHJCbGRyLmFwcGVuZChrZXlzW2ldKTsKKwkJCQl9CisJCQkJCisJCQl9CisJCQlzdHJCbGRyLmFwcGVuZCgiXG4iKTsKKwkJCVN0cmluZyBoZWFkZXIgPSBzdHJCbGRyLnRvU3RyaW5nKCk7CisJCQlmdzEud3JpdGUoaGVhZGVyKTsKKwkJCWZ3Mi53cml0ZShoZWFkZXIpOworCQkJZnczLndyaXRlKGhlYWRlcik7CisJCQlmdzQud3JpdGUoaGVhZGVyKTsKKwkJCWZ3NS53cml0ZShoZWFkZXIpOworCQkJZnc2LndyaXRlKGhlYWRlcik7CisJCQkKKwkJCS8vIGZvciBhbGwgaXRlcmF0aW9ucworCQkJZm9yIChpbnQgaSA9IDA7IGkgPCBtYXhJdGVyYXRpb247IGkgKyspIHsKKwkJCQkvLyBmb3IgYWxsIGlkIChjb2x1bW5zKQorCQkJCVN0cmluZyBsaW5lMSA9ICIiOworCQkJCVN0cmluZyBsaW5lMiA9ICIiOworCQkJCVN0cmluZyBsaW5lMyA9ICIiOworCQkJCVN0cmluZyBsaW5lNCA9ICIiOworCQkJCVN0cmluZyBsaW5lNSA9ICIiOworCQkJCVN0cmluZyBsaW5lNiA9ICIwLDAiOworCQkJCQorCQkJCWZvciAoaW50IGogPSAwOyBqIDwga2V5cy5sZW5ndGg7IGogKyspIHsKKwkJCQkJU3RyaW5nIGlkID0ga2V5c1tqXTsKKwkJCQkJaWYgKGluY2lkZW5jZU1hcC5jb250YWluc0tleShpZCkpIHsKKwkJCQkJCUxpc3Q8RGF0YT4gZGF0YUxpc3QgPSBpbmNpZGVuY2VNYXAuZ2V0KGlkKTsKKwkJCQkJCWlmKGkgPj0gZGF0YUxpc3Quc2l6ZSgpKSB7CisJCQkJCQkJYnJlYWs7CisJCQkJCQl9CisJCQkJCQlEYXRhIGRhdGEgPSBkYXRhTGlzdC5nZXQoaSk7CisJCQkJCQlpZihpPT0wKSB7CisJCQkJCQkJbGluZTYgKz0gIiwiK2RhdGEucmVwb3J0aW5nRnJhY3Rpb247CisJCQkJCQl9CisJCQkJCQlpZihqID09IDApIHsKKwkJCQkJCQlsaW5lMSArPSBkYXRhLml0ZXJhdGlvbi5pbnRWYWx1ZSgpKyIsIitkYXRhLnRpbWU7CisJCQkJCQkJbGluZTIgKz0gZGF0YS5pdGVyYXRpb24uaW50VmFsdWUoKSsiLCIrZGF0YS50aW1lOworCQkJCQkJCWxpbmUzICs9IGRhdGEuaXRlcmF0aW9uLmludFZhbHVlKCkrIiwiK2RhdGEudGltZTsKKwkJCQkJCQlsaW5lNCArPSBkYXRhLml0ZXJhdGlvbi5pbnRWYWx1ZSgpKyIsIitkYXRhLnRpbWU7CisJCQkJCQkJbGluZTUgKz0gZGF0YS5pdGVyYXRpb24uaW50VmFsdWUoKSsiLCIrZGF0YS50aW1lOworCQkJCQkJfQorCQkJCQkJbGluZTEgKz0gIiwiK2RhdGEucmVwb3J0czsKKwkJCQkJCWxpbmUyICs9ICIsIitkYXRhLnN1c2NlcHRpYmxlOworCQkJCQkJbGluZTMgKz0gIiwiK2RhdGEuaW5mZWN0aW91czsKKwkJCQkJCWxpbmU0ICs9ICIsIitkYXRhLnJlY292ZXJlZDsKKwkJCQkJCWxpbmU1ICs9ICIsIitkYXRhLnBvcHVsYXRpb247CisJCQkJCX0KKwkJCQl9CisJCQkJbGluZTEgKz0gIlxuIjsKKwkJCQlsaW5lMiArPSAiXG4iOworCQkJCWxpbmUzICs9ICJcbiI7CisJCQkJbGluZTQgKz0gIlxuIjsKKwkJCQlsaW5lNSArPSAiXG4iOworCQkJCWlmIChpPT0wKSBsaW5lNiArPSAiXG4iOworCQkJCWZ3MS53cml0ZShsaW5lMSk7CisJCQkJZncyLndyaXRlKGxpbmUyKTsKKwkJCQlmdzMud3JpdGUobGluZTMpOworCQkJCWZ3NC53cml0ZShsaW5lNCk7CisJCQkJZnc1LndyaXRlKGxpbmU1KTsKKwkJCQlpZiAoaT09MCkgZnc2LndyaXRlKGxpbmU2KTsKKwkJCX0KKwkJCWZ3MS5mbHVzaCgpOworCQkJZncxLmNsb3NlKCk7CisJCQlmdzIuZmx1c2goKTsKKwkJCWZ3Mi5jbG9zZSgpOworCQkJZnczLmZsdXNoKCk7CisJCQlmdzMuY2xvc2UoKTsKKwkJCWZ3NC5mbHVzaCgpOworCQkJZnc0LmNsb3NlKCk7CisJCQlmdzUuZmx1c2goKTsKKwkJCWZ3NS5jbG9zZSgpOworCQkJZnc2LmZsdXNoKCk7CisJCQlmdzYuY2xvc2UoKTsKKwkJfSBjYXRjaCAoSU9FeGNlcHRpb24gZXgpIHsKKwkJCXRocm93IG5ldyBTY2VuYXJpb0luaXRpYWxpemF0aW9uRXhjZXB0aW9uKGV4KTsKKwkJfQorCQkKKwl9IC8vIHdyaXRlUmVzdWx0cworCQorCS8qKgorCSAqIFJldHVybnMgdGhlIFNURU0gSUQgY29ycmVzcG9uZGluZyB0byB0aGUgaW5wdXQgSUQKKwkgKiAKKwkgKiBAcGFyYW0gaW5wdXRJRCBUaGUgbG9jYXRpb24gaWQgYXMgZXh0cmFjdGVkIGZyb20gdGhlIGZpbGUgbmFtZQorCSAqIAorCSAqIEByZXR1cm4gVGhlIFNURU0gSUQgYXMgZXh0cmFjdGVkIGZyb20gdGhlIHBvcHVsYXRpb24gZmlsZQorCSAqLworCXB1YmxpYyBTdHJpbmcgY29udmVydElEKFN0cmluZyBpbnB1dElEKSB7CisJCQorCQlTdHJpbmcgaW5wdXRDb2RlMiA9IGdldEFkbWluMkNvZGUoaW5wdXRJRCk7CisJCUl0ZXJhdG9yPFN0cmluZz4gaXRlciA9IHBvcHVsYXRpb25NYXAua2V5U2V0KCkuaXRlcmF0b3IoKTsKKwkJd2hpbGUoaXRlci5oYXNOZXh0KCkpIHsKKwkJCVN0cmluZyBpZCA9IGl0ZXIubmV4dCgpOworCQkJaWYoZ2V0QWRtaW4yQ29kZShpZCkuZXF1YWxzSWdub3JlQ2FzZShpbnB1dENvZGUyKSkgcmV0dXJuIGlkOworCQl9CisJCXJldHVybiBudWxsOworCQkKKwl9IC8vIGNvbnZlcnRJRAorCQorCS8qKgorCSAqIEZpbmQgdGhlIFNURU0gSUQgYnkgbWF0Y2hpbmcgcmVnaW9uMiBjb2RlIHBhcnQKKwkgKiAKKwkgKiBAcGFyYW0gaWQgVGhlIGxvY2F0aW9uIGlkIGFzIGV4dHJhY3RlZCBmcm9tIHRoZSBmaWxlIG5hbWUKKwkgKiAKKwkgKiBAcmV0dXJuIFRoZSBTVEVNIElEIGFzIGV4dHJhY3RlZCBmcm9tIHRoZSBwb3B1bGF0aW9uIGZpbGUKKwkgKi8KKwlwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRBZG1pbjJDb2RlKFN0cmluZyBpZCkgeworCQkKKwkJaW50IGlkeCA9IGlkLmxhc3RJbmRleE9mKCItIik7CisJCXJldHVybiBpZC5zdWJzdHJpbmcoaWR4KzEsaWQubGVuZ3RoKCkpOworCQkKKwl9IC8vIGdldEFkbWluMkNvZGUKKwkKKwkvKioKKwkgKiBEbyB0aGUgbGluZWFyIGZpdHRpbmcuCisJICogCisJICogQHBhcmFtIHhEYXRhCisJICogQHBhcmFtIHlEYXRhCisJICogCisJICogQHJldHVybiBzbG9wZQorCSAqLworCXByaXZhdGUgZG91YmxlIGdldFNsb3BlTGluZWFyKGRvdWJsZVtdIHhEYXRhLCBkb3VibGVbXSB5RGF0YSkgeworCQkKKwkJTGluZWFyTGVhc3RTcXVhcmVzRml0IGxpbkZpdCA9IG5ldyBMaW5lYXJMZWFzdFNxdWFyZXNGaXQoeERhdGEsIHlEYXRhKTsKKwkJCisJCXJldHVybiBsaW5GaXQuZ2V0U2xvcGUoKTsKKwkJCisJfSAvLyBnZXRTbG9wZUxpbmVhcgorCQorCS8qKgorCSAqIFJldHVybnMgdGhlIHBvcHVsYXRpb24gc2l6ZSBmb3IgYSBnaXZlbiBpdGVyYXRpb24uCisJICogY29tcHV0YXRpb24gaXMgYmFzZWQgb24KKwkgKiBwaih0KSA9IHBqMCArIGZyYWN0Q2hhbmdlUG9wdWxhdGlvblBlckRheSooaXRlcmF0aW9uLXJlZmVyZW5jZVBvcHVsYXRpb25EYXkpCisgICAgICogCisJICogQHBhcmFtIGl0ZXJhdGlvbiBUaGUgaXRlcmF0aW9uIGNvdW50IChkYXkgbnVtYmVyKQorCSAqIEBwYXJhbSByZWZQb3AgVGhlIHNpemUgb2YgdGhlIHBvcHVsYXRpb24gYXMgZXh0cmFjdGVkIGZyb20gdGhlIGZpbGUKKwkgKiAKKwkgKiBAcmV0dXJuIFRoZSBwb3B1bGF0aW9uIHNpemUgZm9yIGEgZ2l2ZW4gaXRlcmF0aW9uCisJICovCisJcHJpdmF0ZSBkb3VibGUgZ2V0UG9wdWxhdGlvbihpbnQgaXRlcmF0aW9uLCBkb3VibGUgcmVmUG9wKSB7CisJCQorCQlkb3VibGUgaW5jcmVhc2UgPSAoaXRlcmF0aW9uLXJlZmVyZW5jZVBvcHVsYXRpb25EYXkpICogZnJhY3RDaGFuZ2VQb3B1bGF0aW9uUGVyRGF5OworCQlyZXR1cm4gcmVmUG9wKigxICsgaW5jcmVhc2UpOworCQkKKwl9IC8vIGdldFBvcHVsYXRpb24KKwkKKwkvKioKKwkgKiBDcmVhdGUgYSBuZXcgQnVmZmVyZWRSZWFkZXIKKwkgKiAKKwkgKiBAcGFyYW0gZiBUaGUgZmlsZSB3ZSB3YW50IHRvIG9wZW4gZm9yIHJlYWRpbmcKKwkgKiAKKwkgKiBAcmV0dXJuIGEgcmVhZGVyIHRvIGEgZ2l2ZW4gZmlsZQorCSAqLworCXB1YmxpYyBzdGF0aWMgQnVmZmVyZWRSZWFkZXIgb3BlblJlYWRlcihGaWxlIGYpIHsKKworCQl0cnkgeworCQkJaWYgKGYuZXhpc3RzKCkgPT0gZmFsc2UpIHsKKwkJCQlyZXR1cm4gbnVsbDsKKwkJCX0KKwkJCXJldHVybiBuZXcgQnVmZmVyZWRSZWFkZXIobmV3IEZpbGVSZWFkZXIoZikpOworCQl9IGNhdGNoIChFeGNlcHRpb24gZSkgeworCQkJZS5wcmludFN0YWNrVHJhY2UoKTsKKwkJfQorCQlyZXR1cm4gbnVsbDsKKwkJCisJfSAvLyBvcGVuUmVhZGVyCisJCisJLyoqCisJICogSW5kaWNhdGUgRW5kLU9mLUZpbGUKKwkgKiAKKwkgKiBAcGFyYW0gYnVmZmVyIEEgYnVmZmVyIG9mIGRhdGEKKwkgKiAKKwkgKiBAcmV0dXJuIFRydWUgaWYgd2UgaGF2ZSByZWFjaGVkIEVuZC1PZi1GaWxlCisJICovCisJcHVibGljIHN0YXRpYyBib29sZWFuIEVPRihTdHJpbmcgYnVmZmVyKSB7CisJCQorCQlpZiAoYnVmZmVyID09IG51bGwgfHwgYnVmZmVyLmxlbmd0aCgpID09IDApCisJCQlyZXR1cm4gdHJ1ZTsKKwkJcmV0dXJuIGZhbHNlOworCQkKKwl9IC8vIEVPRgorCQorCS8qKgorCSAqIENsYXNzIGZvciBlYWNoIHJvdyBpbiB0aGUgaW5wdXQgZmlsZXMKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGNsYXNzIERhdGEgeworCQkKKwkJLyoqCisJCSAqIFJlcG9ydGVkIGluY2lkZW5jZQorCQkgKi8KKwkJcHVibGljIGRvdWJsZSByZXBvcnRzOyAKKwkJCisJCS8qKgorCQkgKiBSZXBvcnRpbmcgZnJhY3Rpb24KKwkJICovCisJCXB1YmxpYyBkb3VibGUgcmVwb3J0aW5nRnJhY3Rpb24gPSAtMS4wOworCQkKKwkJLyoqCisJCSAqIFMKKwkJICovCisJCXB1YmxpYyBkb3VibGUgc3VzY2VwdGlibGUgPSAwLjA7CisJCQorCQkvKioKKwkJICogSQorCQkgKi8KKwkJcHVibGljIGRvdWJsZSBpbmZlY3Rpb3VzID0gMC4wOworCQkKKwkJLyoqCisJCSAqIFIKKwkJICovCisJCXB1YmxpYyBkb3VibGUgcmVjb3ZlcmVkID0gMC4wOworCQkKKwkJLyoqCisJCSAqIFBvcHVsYXRpb24gc2l6ZQorCQkgKi8KKwkJcHVibGljIGRvdWJsZSBwb3B1bGF0aW9uID0gMC4wOworCQkKKwkJLyoqCisJCSAqIEl0ZXJhdGlvbiBjb3VudCAoZGF5IG51bWJlcikKKwkJICovCisJCXB1YmxpYyBJbnRlZ2VyIGl0ZXJhdGlvbjsKKworCQkvKioKKwkJICogVGltZSBhc3NvY2lhdGVkIHdpdGggdGhpcyByb3cKKwkJICovCisJCXB1YmxpYyBTdHJpbmcgdGltZTsKKwkJCisJCS8qKgorCQkgKiBAcGFyYW0gaXRlciBJdGVyYXRpb24gY291bnQgKGRheSBudW1iZXIpCisJCSAqIEBwYXJhbSB0aW1lIFRoZSBkYXRlIG9mIHRoZSByZXBvcnQKKwkJICogQHBhcmFtIHJlcG9ydGVkIE51bWJlciBvZiByZXBvcnRlZCBpbmNpZGVuY2UKKwkJICogQHBhcmFtIHBvcCBQb3B1bGF0aW9uIHNpemUKKwkJICovCisJCXB1YmxpYyBEYXRhKEludGVnZXIgaXRlciwgU3RyaW5nIHRpbWUsIGRvdWJsZSByZXBvcnRlZCwgZG91YmxlIHBvcCkgeworCQkJdGhpcy5pdGVyYXRpb24gPSBpdGVyOworCQkJdGhpcy50aW1lID0gdGltZTsKKwkJCXRoaXMucmVwb3J0cyA9IHJlcG9ydGVkOworCQkJdGhpcy5wb3B1bGF0aW9uID0gcG9wOworCQl9CisJCQorCQkvKioKKwkJICogQHJldHVybiBUaGUgcmVmZXJlbmNlIHBvcHVsYXRpb24gc2l6ZQorCQkgKi8KKwkJcHVibGljIGRvdWJsZSBnZXRSZWZlcmVuY2VQb3B1bGF0aW9uKCkgeworCQkJcmV0dXJuIHBvcHVsYXRpb247CisJCX0KKworCQkvKioKKwkJICogU2V0IHRoZSByZWZlcmVuY2UgcG9wdWxhdGlvbiBzaXplCisJCSAqIAorCQkgKiBAcGFyYW0gbG9jYWxQb3B1bGF0aW9uIFRoZSByZWZlcmVuY2UgcG9wdWxhdGlvbiBzaXplCisJCSAqLworCQlwdWJsaWMgdm9pZCBzZXRMb2NhbFBvcHVsYXRpb24oZG91YmxlIGxvY2FsUG9wdWxhdGlvbikgeworCQkJdGhpcy5wb3B1bGF0aW9uID0gbG9jYWxQb3B1bGF0aW9uOworCQkJdGhpcy5zdXNjZXB0aWJsZSA9IGxvY2FsUG9wdWxhdGlvbjsgLy8gaW5pdGlhbGx5CisJCX0KKworCX0gLy8gRGF0YQorCit9IC8vIERhdGFQcm9jZXNzb3IKZGlmZiAtLWdpdCBhL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0udXRpbC5hbmFseXNpcy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91dGlsL2FuYWx5c2lzL0Vycm9yLmphdmEgYi9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLnV0aWwuYW5hbHlzaXMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdXRpbC9hbmFseXNpcy9FcnJvci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc0ZjUwNjgKLS0tIC9kZXYvbnVsbAorKysgYi9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLnV0aWwuYW5hbHlzaXMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdXRpbC9hbmFseXNpcy9FcnJvci5qYXZhCkBAIC0wLDAgKzEsMTcgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS51dGlsLmFuYWx5c2lzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA3LDIwMDgsIDIwMDkgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKK3B1YmxpYyBpbnRlcmZhY2UgRXJyb3IgeworIC8vIEVtcHR5Cit9CmRpZmYgLS1naXQgYS9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLnV0aWwuYW5hbHlzaXMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdXRpbC9hbmFseXNpcy9FcnJvckNhbGN1bGF0b3IuamF2YSBiL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0udXRpbC5hbmFseXNpcy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91dGlsL2FuYWx5c2lzL0Vycm9yQ2FsY3VsYXRvci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY0N2ZmYjEKLS0tIC9kZXYvbnVsbAorKysgYi9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLnV0aWwuYW5hbHlzaXMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdXRpbC9hbmFseXNpcy9FcnJvckNhbGN1bGF0b3IuamF2YQpAQCAtMCwwICsxLDEwMyBAQAorLyoqCisgKiAKKyAqLworcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnV0aWwuYW5hbHlzaXM7CisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA3LCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGphdmEubGFuZy5yZWZsZWN0Lkludm9jYXRpb25UYXJnZXRFeGNlcHRpb247CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVByb2dyZXNzTW9uaXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5vcGVyYXRpb24uSVJ1bm5hYmxlQ29udGV4dDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5vcGVyYXRpb24uSVJ1bm5hYmxlV2l0aFByb2dyZXNzOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuQW5hbHlzaXNGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuRXJyb3JGdW5jdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLkVycm9yUmVzdWx0OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuaW1wbC5BbmFseXNpc0ZhY3RvcnlJbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuaW1wbC5SZWZlcmVuY2VTY2VuYXJpb0RhdGFNYXBJbXBsOworCisKKyAgIAorCisvKiogCisgKiB0aGlzIGNsYXNzIGNvbXB1dGVzIHRoZSBtZWFuIHNxdWFyZSBkaWZmZXJlbmNlIGJldHdlZW4gdHdvIHNjZW5hcmlvcyBhcyBhIGZ1bmN0aW9uIG9mIHRpbWUKKyAqIDEuIEl0IG9ubHkgbG9va3MgYXQgbG9jYXRpb25zIHdoaWNoIGFyZSBDT01NT04gdG8gYm90aCBzY2VuYXJpb3MKKyAqIDIuIFRoZSB0aW1lIHNlcmllcyBzaG91bGQgYmUgdGhlIHNhbWUgbGVuZ3RoLiBJZiB0aGV5IGFyZSBub3QgdGhpcyB3aWxsIGNvbXBhcmUgb2YgYSBwZXJpb2QgZXF1YWwgdG8KKyAqICAgIHRoZSBTSE9SVEVTVCBvZiBhbGwgdGhlIHRpbWUgc2VyaWVzLiAKKyAqIDMuIEl0IG9ubHkgY29uc2lkZXJzIGxvY2F0aW9ucyB3aGVyZSBpbmZlY3Rpb3VzIGNvdW50IGlzIG5vbnplcm8gaW4gb25lIG9yIHRoZSBvdGhlciAtIG5vdCBpbnRlcmVzdGVkIGluIHdlaWdodGluZyByZWdpb25zIHdpdGggbm8gZGlzZWFzZS4KKyAqIAorICogVGhlIHNpbXBsaWZpZWQgdmVyc2lvbiBvbmx5IGRlYWxzIHdpdGggYWJzb2x1dGUgSSBjb21wYXJpc29uCisgKgorICovCisKK3B1YmxpYyBjbGFzcyBFcnJvckNhbGN1bGF0b3IgeworCQorCVJlZmVyZW5jZVNjZW5hcmlvRGF0YU1hcEltcGwgcmVmOworCVJlZmVyZW5jZVNjZW5hcmlvRGF0YU1hcEltcGwgZGF0YTsKKwlFcnJvclJlc3VsdCByZXN1bHQ7CisJCisJc3RhdGljIEFuYWx5c2lzRmFjdG9yeSBhRmFjdG9yeSA9IG5ldyBBbmFseXNpc0ZhY3RvcnlJbXBsKCk7CisJRXJyb3JGdW5jdGlvbiBlcnJvckZ1bmN0aW9uOworCQorCS8qKgorCSAqIGlucHV0CisJICovCisJLy9NYXA8U3RyaW5nLExpc3Q8RG91YmxlPj4gY29tbW9uSW5mZWN0aW91c0xvY2F0aW9uc0EgPSBuZXcgSGFzaE1hcDxTdHJpbmcsTGlzdDxEb3VibGU+PigpOworCS8vTWFwPFN0cmluZyxMaXN0PERvdWJsZT4+IGNvbW1vbkluZmVjdGlvdXNMb2NhdGlvbnNCID0gbmV3IEhhc2hNYXA8U3RyaW5nLExpc3Q8RG91YmxlPj4oKTsKKwkKKwkKKwkKKwkKKwkvKioKKwkgKiBEZXRlcm1pbmVzIHRoZSBNZWFuU3F1YXJlIGRpZmZlcmVuY2UgYmV0d2VlbiB0d28gc2NlbmFyaW8gZGF0YSBzZXRzIG92ZXIgdGltZSBlYWNoIHN0b3JlZCBpbiBhIG1hcAorCSAqIEBwYXJhbSBzY2VuYXJpb01hcEEgCisJICogQHBhcmFtIHNjZW5hcmlvTWFwQiAKKwkgKi8KKwlwdWJsaWMgRXJyb3JDYWxjdWxhdG9yKFJlZmVyZW5jZVNjZW5hcmlvRGF0YU1hcEltcGwgc2NlbmFyaW9NYXBBLCBSZWZlcmVuY2VTY2VuYXJpb0RhdGFNYXBJbXBsIHNjZW5hcmlvTWFwQiwgRXJyb3JGdW5jdGlvbiBlcnJvckZ1bmMpIHsKKwkJcmVmID0gc2NlbmFyaW9NYXBBOworCQlkYXRhID0gc2NlbmFyaW9NYXBCOworCQllcnJvckZ1bmN0aW9uID0gZXJyb3JGdW5jOworCX0vLyBjb25zdHJ1Y3RvciBNZWFuU3F1YXJlRGlmZmVyZW5jZQorCQorCQorCQorCQorCS8qKgorCSAqIHNvbHZlcyBmb3IgdGhlIFJvb3QgTWVhblNxdWFyZURpZmZlcmVuY2UgdnMgdGltZQorCSAqIHVzaW5nIGluZmVjdGlvdXMgZGF0YSBvbmx5IGZvciBub3cKKwkgKiAKKwkgKiBAcGFyYW0gcnVubmFibGVDb250ZXh0IFJ1bm5hYmxlIGNvbnRleHQgZm9yIHByb2dyZXNzIGluZGljYXRvcgorCSAqIEByZXR1cm4gY29tcGFyaXNvbiB0aW1lIHNlcmllcyBhcyBkb3VibGVbXQorCSAqLworCXB1YmxpYyBFcnJvclJlc3VsdCBzb2x2ZShJUnVubmFibGVDb250ZXh0IHJ1bm5hYmxlQ29udGV4dCkgeworCQlmaW5hbCBFcnJvckNhbGN1bGF0b3Igc2VsZiA9IHRoaXM7CisJCUlSdW5uYWJsZVdpdGhQcm9ncmVzcyB0YXNrID0gbmV3IElSdW5uYWJsZVdpdGhQcm9ncmVzcygpIHsKKyAgICAgICAgICAgIHB1YmxpYyB2b2lkIHJ1bihJUHJvZ3Jlc3NNb25pdG9yIHByb2dyZXNzKSB7CisgICAgICAgICAgICAJcHJvZ3Jlc3MuYmVnaW5UYXNrKCJTb2x2aW5nLi4uIiwgMTAwKTsKKyAgICAgICAgICAgIAkKKyAgICAgICAgICAgIAlzZWxmLnJlc3VsdCA9IGVycm9yRnVuY3Rpb24uY2FsY3VsYXRlRXJyb3Ioc2VsZi5yZWYsIHNlbGYuZGF0YSk7CisgICAgICAgICAgICAJcHJvZ3Jlc3MuZG9uZSgpOworICAgICAgICAgICAgfQorCQl9OworCQkKKwkJdHJ5IHsKKwkJCXJ1bm5hYmxlQ29udGV4dC5ydW4odHJ1ZSwgZmFsc2UsIHRhc2spOworCQl9IGNhdGNoKEludGVycnVwdGVkRXhjZXB0aW9uIGllKSB7CisJCQkvLyBUYXNrIGlzIG5vdCBpbnRlcnJ1cHRhYmxlCisJCX0gY2F0Y2goSW52b2NhdGlvblRhcmdldEV4Y2VwdGlvbiBpdGUpIHsKKwkJCS8vIFRhc2sgaXMgbm90IGludGVycnVwdGFibGUKKwkJfQorCQlyZXR1cm4gdGhpcy5yZXN1bHQ7CisJfS8vIHNvbHZlKCkKKworCQorCQorfSAvLyBjbGFzcyBTaW1wbGVNZWFuU3F1YXJlRGlmZmVyZW5jZQpkaWZmIC0tZ2l0IGEvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS51dGlsLmFuYWx5c2lzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3V0aWwvYW5hbHlzaXMvTGluZWFyTGVhc3RTcXVhcmVzRml0LmphdmEgYi9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLnV0aWwuYW5hbHlzaXMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdXRpbC9hbmFseXNpcy9MaW5lYXJMZWFzdFNxdWFyZXNGaXQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNDFhZWMxCi0tLSAvZGV2L251bGwKKysrIGIvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS51dGlsLmFuYWx5c2lzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3V0aWwvYW5hbHlzaXMvTGluZWFyTGVhc3RTcXVhcmVzRml0LmphdmEKQEAgLTAsMCArMSwyMTEgQEAKKworcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnV0aWwuYW5hbHlzaXM7CisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA3LCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGphdmEudXRpbC5MaXN0OworCisvKioKKyAqIERvIGEgbGVhc3Qgc3F1YXJlZCBmaXQgZm9yIGEgc2V0IG9mIHgseSBkYXRhIAorICogRGF0YSBpcyBwYXNzZWQgYXMgc2VwYXJhdGUgbGlzdHMgaW4gdGhlIGNvbnN0cnVjdG9yCisgKgorICovCitwdWJsaWMgY2xhc3MgTGluZWFyTGVhc3RTcXVhcmVzRml0IHsKKwkKKwkvKioKKwkgKiBiZXN0IGZpdCBzbG9wZQorCSAqLworCXByaXZhdGUgZG91YmxlIHNsb3BlID0gMDsKKwkvKioKKwkgKiBiZXN0IGZpdCBpbnRlcmNlcHQKKwkgKi8KKwlwcml2YXRlIGRvdWJsZSBpbnRlcmNlcHQgPSAwOworCS8qKgorCSAqIHZhcmlhbmNlIG9mIHNsb3BlIGZpdAorCSAqLworCXByaXZhdGUgZG91YmxlIHNsb3BlVmFyaWFuY2UgPSAwOworCQorCisKKwkvKioKKwkgKiB2YXJpYW5jZSBvZiBpbnRlcmNlcHQgZml0CisJICovCisJcHJpdmF0ZSBkb3VibGUgaW50ZXJjZXB0VmFyaWFuY2UgPSAwOworCS8qKgorCSAqIHN0YW5kYXJkIGRldmlhdGlvbiBvZiBzbG9wZSBmaXQKKwkgKi8KKwlwcml2YXRlIGRvdWJsZSBzbG9wZVN0ZERldiA9IDA7CisJLyoqCisJICogc3RhbmRhcmQgZGV2aWF0aW9uIG9mIGludGVyY2VwdCBmaXQKKwkgKi8KKwlwcml2YXRlIGRvdWJsZSBpbnRlcmNlcHRTdGREZXYgPSAwOworCQorCQorCS8qKgorCSAqIGNvbnN0cnVjdG9yCisJICogQHBhcmFtIHhMaXN0CisJICogQHBhcmFtIHlMaXN0CisJICovCisJcHVibGljIExpbmVhckxlYXN0U3F1YXJlc0ZpdChMaXN0PERvdWJsZT4geExpc3QsIExpc3Q8RG91YmxlPiB5TGlzdCkgeworCQkKKwkJaW50IG5wdHMgPSB4TGlzdC5zaXplKCk7CisJCWFzc2VydChucHRzID09IHlMaXN0LnNpemUoKSk7CisJCQorCQkvL3gsIHkgZm9yIGxlYXN0IHNxdWFyZXMgZml0dGluZyB0byBsaW5lIHkgPSBhbHBoYSp4IC0gYmV0YQorCQlkb3VibGVbXSB4ID0gbmV3IGRvdWJsZVtucHRzXTsKKwkJZG91YmxlW10geSA9IG5ldyBkb3VibGVbbnB0c107CisJCQorCQlmb3IoaW50IGogPSAwOyBqIDwgbnB0czsgaisrKXsKKwkJCXhbal0gPSB4TGlzdC5nZXQoaikuZG91YmxlVmFsdWUoKTsKKwkJCXlbal0gPSB5TGlzdC5nZXQoaikuZG91YmxlVmFsdWUoKTsKKwkJfQorCQorCQkvLyBkbyB0aGUgZml0CisJCWRvdWJsZSBzdW14ICA9IDA7CisJCWRvdWJsZSBzdW15ID0gMDsKKwkJZG91YmxlIHN1bXh5ID0gMDsKKwkJZG91YmxlIHN1bXgyID0gMDsKKwkJZG91YmxlIHN1bXkyID0gMDsKKwkJZG91YmxlIHN1bSA9IDA7CisJCQorCQlmb3IoaW50IGogPSAwOyBqIDwgbnB0czsgaisrKXsKKwkJCXN1bXggKz0geFtqXTsKKwkJCXN1bXkgKz0geVtqXTsKKwkJCXN1bXh5ICs9IHhbal0gKiB5W2pdOworCQkJc3VteDIgKz0geFtqXSAqIHhbal07CisJCQlzdW15MiArPSB5W2pdICogeVtqXTsKKwkJCXN1bSArPSAxOworCQl9CisJCQorCQlkb3VibGUgZGVsdGEgPSAtKHN1bSAqIHN1bXgyIC0gc3VteCAqIHN1bXgpOworCQkvLyBnZXQgdGhlIGludGVyY2VwdAorCQlpbnRlcmNlcHQgPSAoc3VteCAqIHN1bXh5IC0gc3VteSAqIHN1bXgyKS9kZWx0YTsKKwkJCisJCS8vIGdldCB0aGUgc2xvcGUKKwkJc2xvcGUgPSAoc3VteCAqIHN1bXkgLSBzdW0gKiBzdW14eSApL2RlbHRhOworCQkKKwkJLy92YXJpYW5jZSBhbmQgc3RkCisJCWRvdWJsZSB2YXJpYW5jZSA9IChzdW15MitpbnRlcmNlcHQqaW50ZXJjZXB0KnN1bStzbG9wZSpzbG9wZSpzdW14MgorCQkJCS0yKigtaW50ZXJjZXB0KnN1bXkrc2xvcGUqc3VteHkraW50ZXJjZXB0KnNsb3BlKnN1bXgpKS8obnB0cy0yKTsKKwkJCisJCWludGVyY2VwdFZhcmlhbmNlID0gTWF0aC5hYnMoKHZhcmlhbmNlL2RlbHRhKSpzdW14Mik7CisJCXNsb3BlVmFyaWFuY2UgPSBNYXRoLmFicygodmFyaWFuY2UvZGVsdGEpKnN1bSk7CisJCQorCQlpbnRlcmNlcHRTdGREZXYgPSBNYXRoLnNxcnQoaW50ZXJjZXB0VmFyaWFuY2UpOworCQlzbG9wZVN0ZERldiA9IE1hdGguc3FydChzbG9wZVZhcmlhbmNlKTsKKwkJCisJfQorCQorCS8qKgorCSAqIGNvbnN0cnVjdG9yIHVzaW5nIHNpbXBsZSBhcnJheXMKKwkgKiBAcGFyYW0geExpc3QKKwkgKiBAcGFyYW0geUxpc3QKKwkgKi8KKwlwdWJsaWMgTGluZWFyTGVhc3RTcXVhcmVzRml0KGRvdWJsZVtdIHhMaXN0LCBkb3VibGVbXSB5TGlzdCkgeworCQkKKwkJaW50IG5wdHMgPSB4TGlzdC5sZW5ndGg7CisJCWFzc2VydChucHRzID09IHlMaXN0Lmxlbmd0aCk7CisJCQorCQkvL3gsIHkgZm9yIGxlYXN0IHNxdWFyZXMgZml0dGluZyB0byBsaW5lIHkgPSBhbHBoYSp4IC0gYmV0YQorCQlkb3VibGVbXSB4ID0geExpc3Q7CisJCWRvdWJsZVtdIHkgPSB5TGlzdDsKKwkJCisJCisJCS8vIGRvIHRoZSBmaXQKKwkJZG91YmxlIHN1bXggID0gMDsKKwkJZG91YmxlIHN1bXkgPSAwOworCQlkb3VibGUgc3VteHkgPSAwOworCQlkb3VibGUgc3VteDIgPSAwOworCQlkb3VibGUgc3VteTIgPSAwOworCQlkb3VibGUgc3VtID0gMDsKKwkJCisJCWZvcihpbnQgaiA9IDA7IGogPCBucHRzOyBqKyspeworCQkJc3VteCArPSB4W2pdOworCQkJc3VteSArPSB5W2pdOworCQkJc3VteHkgKz0geFtqXSAqIHlbal07CisJCQlzdW14MiArPSB4W2pdICogeFtqXTsKKwkJCXN1bXkyICs9IHlbal0gKiB5W2pdOworCQkJc3VtICs9IDE7CisJCX0KKwkJCisJCWRvdWJsZSBkZWx0YSA9IC0oc3VtICogc3VteDIgLSBzdW14ICogc3VteCk7CisJCS8vIGdldCB0aGUgaW50ZXJjZXB0CisJCWludGVyY2VwdCA9IChzdW14ICogc3VteHkgLSBzdW15ICogc3VteDIpL2RlbHRhOworCQkKKwkJLy8gZ2V0IHRoZSBzbG9wZQorCQlzbG9wZSA9IChzdW14ICogc3VteSAtIHN1bSAqIHN1bXh5ICkvZGVsdGE7CisJCQorCQkvL3ZhcmlhbmNlIGFuZCBzdGQKKwkJZG91YmxlIHZhcmlhbmNlID0gKHN1bXkyK2ludGVyY2VwdCppbnRlcmNlcHQqc3VtK3Nsb3BlKnNsb3BlKnN1bXgyCisJCQkJLTIqKC1pbnRlcmNlcHQqc3VteStzbG9wZSpzdW14eStpbnRlcmNlcHQqc2xvcGUqc3VteCkpLyhucHRzLTIpOworCQkKKwkJaW50ZXJjZXB0VmFyaWFuY2UgPSBNYXRoLmFicygodmFyaWFuY2UvZGVsdGEpKnN1bXgyKTsKKwkJc2xvcGVWYXJpYW5jZSA9IE1hdGguYWJzKCh2YXJpYW5jZS9kZWx0YSkqc3VtKTsKKwkJCisJCWludGVyY2VwdFN0ZERldiA9IE1hdGguc3FydChpbnRlcmNlcHRWYXJpYW5jZSk7CisJCXNsb3BlU3RkRGV2ID0gTWF0aC5zcXJ0KHNsb3BlVmFyaWFuY2UpOworCQkKKwl9CisJCisJLyoqCisJICogCisJICogQHJldHVybiB0aGUgc2xvcGUKKwkgKi8KKwlwdWJsaWMgZG91YmxlIGdldFNsb3BlKCkgeworCQlyZXR1cm4gc2xvcGU7CisJfQorCisKKwkvKioKKwkgKiAKKwkgKiBAcmV0dXJuIHRoZSBpbnRlcmNlcHQKKwkgKi8KKwlwdWJsaWMgZG91YmxlIGdldEludGVyY2VwdCgpIHsKKwkJcmV0dXJuIGludGVyY2VwdDsKKwl9CisKKworCS8qKgorCSAqIAorCSAqIEByZXR1cm4gc2xvcGVWYXJpYW5jZQorCSAqLworCXB1YmxpYyBkb3VibGUgZ2V0U2xvcGVWYXJpYW5jZSgpIHsKKwkJcmV0dXJuIHNsb3BlVmFyaWFuY2U7CisJfQorCisKKwkvKioKKwkgKiAKKwkgKiBAcmV0dXJuIGludGVyY2VwdFZhcmlhbmNlCisJICovCisJcHVibGljIGRvdWJsZSBnZXRJbnRlcmNlcHRWYXJpYW5jZSgpIHsKKwkJcmV0dXJuIGludGVyY2VwdFZhcmlhbmNlOworCX0KKworCisJLyoqCisJICogCisJICogQHJldHVybiBzbG9wZVN0ZERldgorCSAqLworCXB1YmxpYyBkb3VibGUgZ2V0U2xvcGVTdGREZXYoKSB7CisJCXJldHVybiBzbG9wZVN0ZERldjsKKwl9CisKKworCS8qKgorCSAqIAorCSAqIEByZXR1cm4gaW50ZXJjZXB0U3RkRGV2CisJICovCisJcHVibGljIGRvdWJsZSBnZXRJbnRlcmNlcHRTdGREZXYoKSB7CisJCXJldHVybiBpbnRlcmNlcHRTdGREZXY7CisJfQorCit9CmRpZmYgLS1naXQgYS9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLnV0aWwuYW5hbHlzaXMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdXRpbC9hbmFseXNpcy9MeWFwdW5vdkFuYWx5c2lzLmphdmEgYi9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLnV0aWwuYW5hbHlzaXMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdXRpbC9hbmFseXNpcy9MeWFwdW5vdkFuYWx5c2lzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGFjNmJiMAotLS0gL2Rldi9udWxsCisrKyBiL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0udXRpbC5hbmFseXNpcy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91dGlsL2FuYWx5c2lzL0x5YXB1bm92QW5hbHlzaXMuamF2YQpAQCAtMCwwICsxLDM0OCBAQAorLyoqCisgKiAKKyAqLworcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnV0aWwuYW5hbHlzaXM7CisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA3LCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGphdmEubGFuZy5yZWZsZWN0Lkludm9jYXRpb25UYXJnZXRFeGNlcHRpb247CitpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKK2ltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CitpbXBvcnQgamF2YS51dGlsLk1hcDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUHJvZ3Jlc3NNb25pdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5PcGVyYXRpb25DYW5jZWxlZEV4Y2VwdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuQmFzaWNFTGlzdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuRUxpc3Q7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uub3BlcmF0aW9uLklSdW5uYWJsZUNvbnRleHQ7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uub3BlcmF0aW9uLklSdW5uYWJsZVdpdGhQcm9ncmVzczsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmltcGwuUmVmZXJlbmNlU2NlbmFyaW9EYXRhTWFwSW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmltcGwuUmVmZXJlbmNlU2NlbmFyaW9EYXRhTWFwSW1wbC5SZWZlcmVuY2VTY2VuYXJpb0RhdGFJbnN0YW5jZTsKKworCisgICAKKworLyoqIAorICogdGhpcyBjbGFzcyBjb21wdXRlcyB0aGUgbWVhbiBzcXVhcmUgZGlmZmVyZW5jZSBiZXR3ZWVuIHR3byBzY2VuYXJpb3MgYXMgYSBmdW5jdGlvbiBvZiB0aW1lCisgKiAxLiBJdCBvbmx5IGxvb2tzIGF0IGxvY2F0aW9ucyB3aGljaCBhcmUgQ09NTU9OIHRvIGJvdGggc2NlbmFyaW9zCisgKiAyLiBUaGUgdGltZSBzZXJpZXMgc2hvdWxkIGJlIHRoZSBzYW1lIGxlbmd0aC4gSWYgdGhleSBhcmUgbm90IHRoaXMgd2lsbCBjb21wYXJlIG9mIGEgcGVyaW9kIGVxdWFsIHRvCisgKiAgICB0aGUgU0hPUlRFU1Qgb2YgYWxsIHRoZSB0aW1lIHNlcmllcy4gCisgKiAzLiBJdCBvbmx5IGNvbnNpZGVycyBsb2NhdGlvbnMgd2hlcmUgaW5mZWN0aW91cyBjb3VudCBpcyBub256ZXJvIGluIG9uZSBvciB0aGUgb3RoZXIgLSBub3QgaW50ZXJlc3RlZCBpbiB3ZWlnaHRpbmcgcmVnaW9ucyB3aXRoIG5vIGRpc2Vhc2UuCisgKgorICoKKyAqLworcHVibGljIGNsYXNzIEx5YXB1bm92QW5hbHlzaXMgeworCQorCS8qKgorCSAqIGlucHV0CisJICovCisJTWFwPFN0cmluZyxMaXN0PFBoYXNlU3BhY2VDb29yZGluYXRlPj4gY29tbW9uUGhhc2VTcGFjZUEgPSBuZXcgSGFzaE1hcDxTdHJpbmcsTGlzdDxQaGFzZVNwYWNlQ29vcmRpbmF0ZT4+KCk7CisJTWFwPFN0cmluZyxMaXN0PFBoYXNlU3BhY2VDb29yZGluYXRlPj4gY29tbW9uUGhhc2VTcGFjZUIgPSBuZXcgSGFzaE1hcDxTdHJpbmcsTGlzdDxQaGFzZVNwYWNlQ29vcmRpbmF0ZT4+KCk7CisJCisJTWFwPFN0cmluZyxMaXN0PERvdWJsZT4+IHRvdGFsUG9wdWxhdGlvbiA9IG5ldyBIYXNoTWFwPFN0cmluZyxMaXN0PERvdWJsZT4+KCk7CisJCisJCisJLyoqCisJICogbnVtYmVyIGNvbW1vbiBsb2NhdGlvbnMgd2l0aCBub256ZXJvIEluZiBjb3VudCBhdCB0aW1lIHQKKwkgKi8KKwlwdWJsaWMgZG91YmxlW10gbG9jYXRpb25Db3VudDsKKwkKKwkvKioKKwkgKiBTY2VuYXJpbyBBCisJICovCisJcHVibGljIFBoYXNlU3BhY2VDb29yZGluYXRlW10gdHJhamVjdG9yeUE7CisJCisJLyoqCisJICogU2NlbmFyaW8gQgorCSAqLworCXB1YmxpYyBQaGFzZVNwYWNlQ29vcmRpbmF0ZVtdIHRyYWplY3RvcnlCOworCQorCQorCS8qKgorCSAqIHRpbWUKKwkgKi8KKwlwdWJsaWMgZG91YmxlW10gdGltZTsKKwkKKwkvKioKKwkgKiBEZXRlcm1pbmVzIHRoZSBNZWFuU3F1YXJlIGRpZmZlcmVuY2UgYmV0d2VlbiB0d28gc2NlbmFyaW8gZGF0YSBzZXRzIG92ZXIgdGltZSBlYWNoIHN0b3JlZCBpbiBhIG1hcAorCSAqIEBwYXJhbSBzY2VuYXJpb01hcEEgCisJICogQHBhcmFtIHNjZW5hcmlvTWFwQiAKKwkgKiBAcGFyYW0gcnVubmFibGVDb250ZXh0IEZvciBwcm9ncmVzcyBpbmRpY2F0b3IKKwkgKi8KKwlwdWJsaWMgTHlhcHVub3ZBbmFseXNpcyhSZWZlcmVuY2VTY2VuYXJpb0RhdGFNYXBJbXBsIHNjZW5hcmlvTWFwQSwgUmVmZXJlbmNlU2NlbmFyaW9EYXRhTWFwSW1wbCBzY2VuYXJpb01hcEIsIElSdW5uYWJsZUNvbnRleHQgcnVubmFibGVDb250ZXh0KSB7CisJCWZpbmFsIFJlZmVyZW5jZVNjZW5hcmlvRGF0YU1hcEltcGwgbWFwQSA9IHNjZW5hcmlvTWFwQTsKKwkJZmluYWwgUmVmZXJlbmNlU2NlbmFyaW9EYXRhTWFwSW1wbCBtYXBCID0gc2NlbmFyaW9NYXBCOworCQkKKwkJSVJ1bm5hYmxlV2l0aFByb2dyZXNzIHRhc2sgPSBuZXcgSVJ1bm5hYmxlV2l0aFByb2dyZXNzKCkgeworICAgICAgICAgICAgcHVibGljIHZvaWQgcnVuKElQcm9ncmVzc01vbml0b3IgcHJvZ3Jlc3MpIHsKKyAgICAgICAgICAgIAlwcm9ncmVzcy5iZWdpblRhc2soIkNhbGN1bGF0aW5nIGNvbW1vbiBsb2NhdGlvbnMuLi4iLCBtYXBBLmdldE51bUxvY2F0aW9ucygpKTsKKyAgICAKKwkJCQlJdGVyYXRvcjxTdHJpbmc+IGl0ZXJhdG9yQSA9IG1hcEEuZ2V0TG9jYXRpb25zKCkuaXRlcmF0b3IoKTsKKwkJCQlpbnQgbWF4VGltZSA9IC0xOworCQkJCXdoaWxlKGl0ZXJhdG9yQS5oYXNOZXh0KCkpIHsKKwkJCQkJcHJvZ3Jlc3Mud29ya2VkKDEpOworCQkJCQlpZihwcm9ncmVzcy5pc0NhbmNlbGVkKCkpIHRocm93IG5ldyBPcGVyYXRpb25DYW5jZWxlZEV4Y2VwdGlvbigpOworCQkJCQlTdHJpbmcgaWQgPSBpdGVyYXRvckEubmV4dCgpOworCQkJCQkKKwkJCQkJaWYobWFwQi5jb250YWluc0xvY2F0aW9uKGlkKSkgeworCQkJCQkJCisJCQkJCQkvLyBnZXQgdGhlIGxpc3RzIG9mIGRhdGEgb25seSBmb3IgdGhvc2UgbG9jYXRpb25zIHRoYXQgYXJlIGNvbW1vbiB0byBib3RoIG1hcHMKKwkJCQkJCVJlZmVyZW5jZVNjZW5hcmlvRGF0YUluc3RhbmNlIGRhdGFNYXBBID0gbWFwQS5nZXRMb2NhdGlvbihpZCk7CisJCQkJCQlMaXN0PFBoYXNlU3BhY2VDb29yZGluYXRlPiBhRGF0YSA9IGdldE5vcm1hbGl6ZWRUcmFqZWN0b3J5KGRhdGFNYXBBKTsKKwkJCQkJCisJCQkJCQljb21tb25QaGFzZVNwYWNlQS5wdXQoaWQsYURhdGEpOworCQkJCQkJCisJCQkJCQkvLyBnZXQgdGhlIHRvdGFsIHBvcHVsYXRpb24gZnJvbSBNYXAgQSAoc2FtZSBhcyBtYXAgQiBmb3Igbm93CisJCQkJCQl0b3RhbFBvcHVsYXRpb24ucHV0KGlkLCBnZXRUb3RhbFBvcHVsYXRpb24oZGF0YU1hcEEpKTsKKwkJCQkJCQorCQkJCQkJLy8gTWFwIEIKKwkJCQkJCVJlZmVyZW5jZVNjZW5hcmlvRGF0YUluc3RhbmNlIGRhdGFNYXBCID0gbWFwQi5nZXRMb2NhdGlvbihpZCk7CisJCQkJCQlMaXN0PFBoYXNlU3BhY2VDb29yZGluYXRlPiBiRGF0YSA9IGdldE5vcm1hbGl6ZWRUcmFqZWN0b3J5KGRhdGFNYXBCKTsKKwkJCQkJCQorCQkJCQkJY29tbW9uUGhhc2VTcGFjZUIucHV0KGlkLGJEYXRhKTsKKwkJCQkJCisJCQkJCQkJCQkJCisJCQkJCQkvLyBpbml0IHRoZSBhcnJheXMKKwkJCQkJCWlmIChtYXhUaW1lID09IC0xKSBtYXhUaW1lID0gYURhdGEuc2l6ZSgpOworCQkJCQkJaWYoYURhdGEuc2l6ZSgpIDwgbWF4VGltZSkgbWF4VGltZSA9IGFEYXRhLnNpemUoKTsKKwkJCQkJCWlmKGJEYXRhLnNpemUoKSA8IG1heFRpbWUpIG1heFRpbWUgPSBiRGF0YS5zaXplKCk7CisJCQkJCX0vLyBpZgorCQkJCX0vLyB3aGlsZQorCQkJCXByb2dyZXNzLmRvbmUoKTsKKwkJCQlpZih0aW1lPT1udWxsKSB7CisJCQkJCXRpbWUgPSBuZXcgZG91YmxlW21heFRpbWVdOworCQkJCQl0cmFqZWN0b3J5QSA9IG5ldyBQaGFzZVNwYWNlQ29vcmRpbmF0ZVttYXhUaW1lXTsKKwkJCQkJdHJhamVjdG9yeUIgPSBuZXcgUGhhc2VTcGFjZUNvb3JkaW5hdGVbbWF4VGltZV07CisJCQorCQkJCQlsb2NhdGlvbkNvdW50ID0gbmV3IGRvdWJsZVttYXhUaW1lXTsKKwkJCQkJZm9yKGludCBpID0gMDsgaSA8IG1heFRpbWU7IGkgKyspIHsKKwkJCQkJCXRpbWVbaV0gPSBpOworCQkJCQkJdHJhamVjdG9yeUFbaV0gPSBuZXcgUGhhc2VTcGFjZUNvb3JkaW5hdGUoMC4wLDAuMCk7CisJCQkJCQl0cmFqZWN0b3J5QltpXSA9IG5ldyBQaGFzZVNwYWNlQ29vcmRpbmF0ZSgwLjAsMC4wKTsKKwkJCQkJCWxvY2F0aW9uQ291bnRbaV0gPSAwLjA7CisJCQkJCX0KKwkJCQl9CisgICAgICAgICAgICB9IC8vIHJ1bgorCQl9OworCQl0cnkgeworCQkJcnVubmFibGVDb250ZXh0LnJ1bih0cnVlLCBmYWxzZSwgdGFzayk7CisJCX0gY2F0Y2goSW50ZXJydXB0ZWRFeGNlcHRpb24gaWUpIHsKKwkJCWllLnByaW50U3RhY2tUcmFjZSgpOworCQl9IGNhdGNoKEludm9jYXRpb25UYXJnZXRFeGNlcHRpb24gaXZlKSB7CisJCQlpdmUucHJpbnRTdGFja1RyYWNlKCk7CisJCX0KKwl9Ly8gY29uc3RydWN0b3IgTWVhblNxdWFyZURpZmZlcmVuY2UKKwkKKwkKKwkvKioKKwkgKiBGcm9tIHRoZSBkYXRhTWFwIGV4dHJhY3QgYSBsaXN0IG9mIG5vcm1hbGl6ZSBpbmZlY3Rpb3VzIChmcmFjdGlvbiBvZiB0b3RhbCBwb3B1bGF0aW9uKQorCSAqIEBwYXJhbSBkYXRhTWFwCisJICogQHJldHVybiBub3JtYWxpemUgbGlzdCBvZiBpbmZlY3Rpb3VzIHBlb3BsZQorCSAqLworCXB1YmxpYyBMaXN0PFBoYXNlU3BhY2VDb29yZGluYXRlPiBnZXROb3JtYWxpemVkVHJhamVjdG9yeShSZWZlcmVuY2VTY2VuYXJpb0RhdGFJbnN0YW5jZSBkYXRhTWFwKSB7CisJCS8vIG1heSBvciBtYXkgbm90IGV4aXN0CisJCUxpc3Q8RG91YmxlPiBleHBvc2VkTGlzdCA9IGRhdGFNYXAuZ2V0RXRvdGFscygpOworCQlMaXN0PERvdWJsZT4gcmVjb3ZlcmVkTGlzdCA9IGRhdGFNYXAuZ2V0UnRvdGFscygpOworCQkKKwkJLy8gTVVTVCBleGlzdAorCQlMaXN0PERvdWJsZT4gaW5mZWN0aW91c0xpc3QgPSBkYXRhTWFwLmdldEl0b3RhbHMoKTsKKwkJTGlzdDxEb3VibGU+IHN1c2NlcHRpYmxlTGlzdCA9IGRhdGFNYXAuZ2V0U3RvdGFscygpOwkKKwkJIAorCQlhc3NlcnQoaW5mZWN0aW91c0xpc3QhPW51bGwpOworCQlhc3NlcnQoc3VzY2VwdGlibGVMaXN0IT1udWxsKTsKKwkJCisJCQorCQlMaXN0PFBoYXNlU3BhY2VDb29yZGluYXRlPiBub3JtYWxpemVkVHJhamVjdG9yeSA9IG5ldyBBcnJheUxpc3Q8UGhhc2VTcGFjZUNvb3JkaW5hdGU+KCk7CisJCisJCWRvdWJsZVtdIHRvdGFsUG9wID0gbmV3IGRvdWJsZVtpbmZlY3Rpb3VzTGlzdC5zaXplKCldOworCQlmb3IgKGludCBpID0gMDsgaSA8IGluZmVjdGlvdXNMaXN0LnNpemUoKTsgaSArKykgeworCQkJCisJCQlkb3VibGUgaW5mID0gaW5mZWN0aW91c0xpc3QuZ2V0KGkpLmRvdWJsZVZhbHVlKCk7CisJCQlkb3VibGUgc3VzYyA9IHN1c2NlcHRpYmxlTGlzdC5nZXQoaSkuZG91YmxlVmFsdWUoKTsKKwkJCWRvdWJsZSBleHBvc2VkID0gMC4wOworCQkJZG91YmxlIHJlY292ZXJlZCA9IDAuMDsKKwkJCWlmKChleHBvc2VkTGlzdCE9bnVsbCkmJihleHBvc2VkTGlzdC5zaXplKCk+MCkpIHsKKwkJCQlleHBvc2VkID0gZXhwb3NlZExpc3QuZ2V0KGkpLmRvdWJsZVZhbHVlKCk7CisJCQl9CisJCQlpZigocmVjb3ZlcmVkTGlzdCE9bnVsbCkmJihyZWNvdmVyZWRMaXN0LnNpemUoKT4wKSkgeworCQkJCXJlY292ZXJlZCA9IHJlY292ZXJlZExpc3QuZ2V0KGkpLmRvdWJsZVZhbHVlKCk7CisJCQl9CisJCQkKKwkJCXRvdGFsUG9wW2ldID0gaW5mK3N1c2MrZXhwb3NlZCtyZWNvdmVyZWQ7CisJCQlpbmYgLz0gdG90YWxQb3BbaV07CisJCQlzdXNjIC89IHRvdGFsUG9wW2ldOworCQkJCisJCQlQaGFzZVNwYWNlQ29vcmRpbmF0ZSBwb2ludCA9IG5ldyBQaGFzZVNwYWNlQ29vcmRpbmF0ZShzdXNjLGluZik7CisJCQlub3JtYWxpemVkVHJhamVjdG9yeS5hZGQocG9pbnQpOworCQl9CisJCXJldHVybiBub3JtYWxpemVkVHJhamVjdG9yeTsKKwl9CisJCisJCisJCisJLyoqCisJICogRnJvbSB0aGUgZGF0YU1hcCBleHRyYWN0IGEgbGlzdCBvZiB0aGUgdG90YWwgcG9wdWxhdGlvbikKKwkgKiBAcGFyYW0gZGF0YU1hcAorCSAqIEByZXR1cm4gdG90YWwgcG9wdWxhdGlvbgorCSAqLworCXB1YmxpYyBMaXN0PERvdWJsZT4gZ2V0VG90YWxQb3B1bGF0aW9uKG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuaW1wbC5SZWZlcmVuY2VTY2VuYXJpb0RhdGFNYXBJbXBsLlJlZmVyZW5jZVNjZW5hcmlvRGF0YUluc3RhbmNlIGRhdGFNYXApIHsKKwkJLy8gbWF5IG9yIG1heSBub3QgZXhpc3QKKwkJTGlzdDxEb3VibGU+IGV4cG9zZWRMaXN0ID0gZGF0YU1hcC5nZXRFdG90YWxzKCk7CisJCUxpc3Q8RG91YmxlPiByZWNvdmVyZWRMaXN0ID0gZGF0YU1hcC5nZXRSdG90YWxzKCk7CisJCQorCQkvLyBNVVNUIGV4aXN0CisJCUxpc3Q8RG91YmxlPiBpbmZlY3Rpb3VzTGlzdCA9IGRhdGFNYXAuZ2V0SXRvdGFscygpOworCQlMaXN0PERvdWJsZT4gc3VzY2VwdGlibGVMaXN0ID0gZGF0YU1hcC5nZXRTdG90YWxzKCk7CQorCQkgCisJCWFzc2VydChpbmZlY3Rpb3VzTGlzdCE9bnVsbCk7CisJCWFzc2VydChzdXNjZXB0aWJsZUxpc3QhPW51bGwpOworCQkKKwkJTGlzdDxEb3VibGU+IHBvcHVsYXRpb24gPSBuZXcgQXJyYXlMaXN0PERvdWJsZT4oKTsKKwkKKwkJZm9yIChpbnQgaSA9IDA7IGkgPCBpbmZlY3Rpb3VzTGlzdC5zaXplKCk7IGkgKyspIHsKKwkJCWRvdWJsZSB0b3RhbFBvcCA9IDAuMDsKKworCQkJZG91YmxlIGluZiA9IGluZmVjdGlvdXNMaXN0LmdldChpKS5kb3VibGVWYWx1ZSgpOworCQkJZG91YmxlIHN1c2MgPSBzdXNjZXB0aWJsZUxpc3QuZ2V0KGkpLmRvdWJsZVZhbHVlKCk7CisJCQlkb3VibGUgZXhwb3NlZCA9IDAuMDsKKwkJCWRvdWJsZSByZWNvdmVyZWQgPSAwLjA7CisJCQlpZigoZXhwb3NlZExpc3QhPW51bGwpJiYoZXhwb3NlZExpc3Quc2l6ZSgpPjApKSB7CisJCQkJZXhwb3NlZCA9IGV4cG9zZWRMaXN0LmdldChpKS5kb3VibGVWYWx1ZSgpOworCQkJfQorCQkJaWYoKHJlY292ZXJlZExpc3QhPW51bGwpJiYocmVjb3ZlcmVkTGlzdC5zaXplKCk+MCkpIHsKKwkJCQlyZWNvdmVyZWQgPSByZWNvdmVyZWRMaXN0LmdldChpKS5kb3VibGVWYWx1ZSgpOworCQkJfQorCQkJCisJCQl0b3RhbFBvcCA9IGluZitzdXNjK2V4cG9zZWQrcmVjb3ZlcmVkOworCQkJcG9wdWxhdGlvbi5hZGQobmV3IERvdWJsZSh0b3RhbFBvcCkpOworCQl9CisJCXJldHVybiBwb3B1bGF0aW9uOworCX0KKwkKKwkvKioKKwkgKiBzb2x2ZXMgZm9yIHRoZSBSb290IE1lYW5TcXVhcmVEaWZmZXJlbmNlIHZzIHRpbWUKKwkgKiB1c2luZyBpbmZlY3Rpb3VzIGRhdGEgb25seSBmb3Igbm93CisJICogCisJICogQHBhcmFtIHJ1bm5hYmxlQ29udGV4dCBSdW5uYWJsZSBjb250ZXh0IGZvciBwcm9ncmVzcyBpbmRpY2F0b3IKKwkgKiBAcmV0dXJuIGNvbXBhcmlzb24gdGltZSBzZXJpZXMgYXMgZG91YmxlW10KKwkgKi8KKwkKKwlwdWJsaWMgTGlzdDxQaGFzZVNwYWNlQ29vcmRpbmF0ZVtdPiBnZXRMeWFwdW5vdlRyYWplY3RvcnkoSVJ1bm5hYmxlQ29udGV4dCBydW5uYWJsZUNvbnRleHQpIHsKKwkJZmluYWwgTGlzdDxQaGFzZVNwYWNlQ29vcmRpbmF0ZVtdPiByZXRWYWwgPSBuZXcgQXJyYXlMaXN0PFBoYXNlU3BhY2VDb29yZGluYXRlW10+KCk7CisJCUlSdW5uYWJsZVdpdGhQcm9ncmVzcyB0YXNrID0gbmV3IElSdW5uYWJsZVdpdGhQcm9ncmVzcygpIHsKKyAgICAgICAgICAgIHB1YmxpYyB2b2lkIHJ1bihJUHJvZ3Jlc3NNb25pdG9yIHByb2dyZXNzKSB7CisgICAgICAgICAgICAJcHJvZ3Jlc3MuYmVnaW5UYXNrKCJHZXR0aW5nIEx5YXB1bm92IHRyYWplY3RvcnkiLCB0aW1lLmxlbmd0aCk7CisgICAgCisJCQkJZG91YmxlW10gbWF4UG9wdWxhdGlvbiA9IG5ldyBkb3VibGVbdGltZS5sZW5ndGhdOworCQkJCWZvcihpbnQgaWNvdW50ID0wOyBpY291bnQgPCB0aW1lLmxlbmd0aDsgaWNvdW50ICsrKSB7CisJCQkJCXByb2dyZXNzLndvcmtlZCgxKTsKKwkJCQkJaWYocHJvZ3Jlc3MuaXNDYW5jZWxlZCgpKSB0aHJvdyBuZXcgT3BlcmF0aW9uQ2FuY2VsZWRFeGNlcHRpb24oKTsKKwkJCQkJCisJCQkJCW1heFBvcHVsYXRpb25baWNvdW50XSA9IDAuMDsKKwkJCQkJSXRlcmF0b3I8U3RyaW5nPiBpdGVyID0gY29tbW9uUGhhc2VTcGFjZUEua2V5U2V0KCkuaXRlcmF0b3IoKTsKKwkJCQkJLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisJCQkJCS8vIGFsbCBsb2NhdGlvbnMKKwkJCQkJd2hpbGUoaXRlci5oYXNOZXh0KCkpIHsKKwkJCQkJCVN0cmluZyBpZCA9IGl0ZXIubmV4dCgpOworCQkJCQkJCisJCQkJCQlMaXN0PFBoYXNlU3BhY2VDb29yZGluYXRlPiBhRGF0YSA9IGNvbW1vblBoYXNlU3BhY2VBLmdldChpZCk7CisJCQkJCQlMaXN0PFBoYXNlU3BhY2VDb29yZGluYXRlPiBiRGF0YSA9IGNvbW1vblBoYXNlU3BhY2VCLmdldChpZCk7CisJCQkJCQkJCQkJCisJCQkJCQlMaXN0PERvdWJsZT4gcG9wdWxhdGlvbiA9IHRvdGFsUG9wdWxhdGlvbi5nZXQoaWQpOworCQkJCQkJLy8geSBheGlzIGlzIEluZmVjdGlvdXMKKwkJCQkJCWRvdWJsZSBpQSA9IGFEYXRhLmdldChpY291bnQpLmdldFlWYWx1ZSgpOworCQkJCQkJZG91YmxlIGlCID0gYkRhdGEuZ2V0KGljb3VudCkuZ2V0WVZhbHVlKCk7CisJCQkJCQkKKwkJCQkJCS8vIHggYXhpcyBpcyBTdXNjZXB0aWJsZQorCQkJCQkJZG91YmxlIHNBID0gYURhdGEuZ2V0KGljb3VudCkuZ2V0WFZhbHVlKCk7CisJCQkJCQlkb3VibGUgc0IgPSBiRGF0YS5nZXQoaWNvdW50KS5nZXRYVmFsdWUoKTsKKwkJCQkJCQorCQkJCQkJZG91YmxlIHBvcCA9IHBvcHVsYXRpb24uZ2V0KGljb3VudCkuZG91YmxlVmFsdWUoKTsKKwkJCQkJCQorCQkJCQkJLy9kb3VibGUgZGVub20gPSAoaUEraUIpLzIuMDsKKwkJCQkJCS8vIHNxdWFyZSBvZiB0aGUgYXZlcmFnZSBmcmFjdGlvbiBvZiBpbmZlY3Rpb3VzIHBlb3BsZQorCQkJCQkJLy9kZW5vbSAqPSBkZW5vbTsgCisJCQkJCQlpZigoaUE+MC4wKXx8KGlCPjAuMCkpIHsKKwkJCQkJCQkvLyB3ZSBoYXZlIGEgbG9jYXRpb24gd2l0aCBub256ZXJvIGRhdGEKKwkJCQkJCQkvLyB3ZWlnaHQgYnkgdGhlIHRvdGFsIHBvcHVsYXRpb24KKwkJCQkJCQlsb2NhdGlvbkNvdW50W2ljb3VudF0gKz0gMS4wOworCQkJCQkJCW1heFBvcHVsYXRpb25baWNvdW50XSArPSBwb3A7CisJCQkJCQkJdHJhamVjdG9yeUFbaWNvdW50XS5pbnRlZ3JhdGVQYXRoKHNBKnBvcCwgaUEqcG9wKSA7CisJCQkJCQkJdHJhamVjdG9yeUJbaWNvdW50XS5pbnRlZ3JhdGVQYXRoKHNCKnBvcCwgaUIqcG9wKSA7CisJCQkJCQl9CisJCQkJCX0vLyBhbGwgbG9jYXRpb25zCisJCSAgICAgICAgICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworCQkJCQkKKwkJCQkJLy8gbm9ybWFsaXplIAorCQkJCQlpZihsb2NhdGlvbkNvdW50W2ljb3VudF0gPj0gMS4wKSB7CisJCQkJCQl0cmFqZWN0b3J5QVtpY291bnRdLm5vcm1hbGl6ZShtYXhQb3B1bGF0aW9uW2ljb3VudF0pOworCQkJCQkJdHJhamVjdG9yeUJbaWNvdW50XS5ub3JtYWxpemUobWF4UG9wdWxhdGlvbltpY291bnRdKTsKKwkJCQkJfQorCQkJCX0vLyBmb3IgYWxsIHRpbWUKKwkJCisJCQkJcmV0VmFsLmFkZCh0cmFqZWN0b3J5QSk7CisJCQkJcmV0VmFsLmFkZCh0cmFqZWN0b3J5Qik7CisJCQkJcHJvZ3Jlc3MuZG9uZSgpOworICAgICAgICAgICAgfSAvLyBydW4KKwkJfTsKKwkJCisJCXRyeSB7CisJCQlydW5uYWJsZUNvbnRleHQucnVuKHRydWUsIHRydWUsIHRhc2spOworCQl9IGNhdGNoKEludGVycnVwdGVkRXhjZXB0aW9uIGllKSB7CisJCQlyZXR1cm4gbnVsbDsKKwkJfSBjYXRjaChJbnZvY2F0aW9uVGFyZ2V0RXhjZXB0aW9uIGl2ZSkgeworCQkJcmV0dXJuIG51bGw7CisJCX0KKwkJCisJCXJldHVybiByZXRWYWw7CQorCX0vLyBnZXRMeWFwdW5vdlRyYWplY3RvcnkoKQorCQorCS8qKgorCSAqIAorCSAqIEBwYXJhbSB0cmFqZWN0b3J5TGlzdAorCSAqIEByZXR1cm4gdGhlIGN1bXVsYXRpdmUgZGlzdGFuY2UgYmV0d2VlbiB0aGUgdHJhamVjdG9yaWVzCisJICovCisJQFN1cHByZXNzV2FybmluZ3MoImJveGluZyIpCisJcHVibGljIHN0YXRpYyBMaXN0PEVMaXN0PERvdWJsZT4+IGdldEN1bXVsYXRpdmVQaGFzZVNwYWNlRGV2aWF0aW9uKExpc3Q8UGhhc2VTcGFjZUNvb3JkaW5hdGVbXT4gdHJhamVjdG9yeUxpc3QpIHsKKwkJTGlzdDxFTGlzdDxEb3VibGU+PiBkZXZpYXRpb25MaXN0ID0gbmV3IEFycmF5TGlzdDxFTGlzdDxEb3VibGU+PigpOworCQlQaGFzZVNwYWNlQ29vcmRpbmF0ZVtdIHJlZmVyZW5jZVRyYWplY3RvcnkgPSB0cmFqZWN0b3J5TGlzdC5nZXQoMCk7CisJCQorCQlpZih0cmFqZWN0b3J5TGlzdC5zaXplKCk+PTIpIHsKKwkJCWZvciAoaW50IGkgPSAxOyBpIDwgdHJhamVjdG9yeUxpc3Quc2l6ZSgpOyBpICsrICkgeworCQkJCVBoYXNlU3BhY2VDb29yZGluYXRlW10gY29tcGFyaXNvblRyYWplY3RvcnkgPSB0cmFqZWN0b3J5TGlzdC5nZXQoaSk7CisJCQkJCisJCQkJRUxpc3Q8RG91YmxlPiBkZXZpYXRpb24gPSBuZXcgQmFzaWNFTGlzdDxEb3VibGU+KHJlZmVyZW5jZVRyYWplY3RvcnkubGVuZ3RoKTsKKwkJCQkKKwkJCQkvL2RvdWJsZSBtaW5EZXZpYXRpb24gPSA5OTk5OTkuMDsKKwkJCQlmb3IgKGludCBqID0gMDsgaiA8IGRldmlhdGlvbi5zaXplKCk7IGogKyspIHsKKwkJCQkJZGV2aWF0aW9uLnNldChqLCAwLjApOworCQkJCQlpZihjb21wYXJpc29uVHJhamVjdG9yeS5sZW5ndGg+PSBqKSB7CisJCQkJCQlQaGFzZVNwYWNlQ29vcmRpbmF0ZSByZWYgPSByZWZlcmVuY2VUcmFqZWN0b3J5W2pdOworCQkJCQkJUGhhc2VTcGFjZUNvb3JkaW5hdGUgY29tcCA9IGNvbXBhcmlzb25UcmFqZWN0b3J5W2pdOworCQkJCQkJZGV2aWF0aW9uLnNldChqLCBkZXZpYXRpb24uZ2V0KGopK3JlZi5nZXREaXN0YW5jZShjb21wKSk7CisJCQkJCQlpZiAoaiA+PSAxKSBkZXZpYXRpb24uc2V0KGosIGRldmlhdGlvbi5nZXQoai0xKSArIGRldmlhdGlvbi5nZXQoaikpOworCQkJCQl9CisJCQkJfQorCQkJCS8qKgorCQkJCSAqIHRha2UgdGhlIGxvZworCQkJCSAqLworCQkJCWZvciAoaW50IGogPSAwOyBqIDwgZGV2aWF0aW9uLnNpemUoKTsgaiArKykgeworCQkJCQlpZihkZXZpYXRpb24uZ2V0KGopID4gMC4wKSBkZXZpYXRpb24uc2V0KGosIE1hdGgubG9nKGRldmlhdGlvbi5nZXQoaikpKTsKKwkJCQl9CisJCQkJZGV2aWF0aW9uTGlzdC5hZGQoZGV2aWF0aW9uKTsKKwkJCX0KKwkJfQorCQkKKwkJcmV0dXJuIGRldmlhdGlvbkxpc3Q7CisJfQorfSAvLyBjbGFzcyBNZWFuU3F1YXJlRGlmZmVyZW5jZQpkaWZmIC0tZ2l0IGEvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS51dGlsLmFuYWx5c2lzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3V0aWwvYW5hbHlzaXMvTWVhblNxdWFyZURpZmZlcmVuY2UuamF2YSBiL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0udXRpbC5hbmFseXNpcy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91dGlsL2FuYWx5c2lzL01lYW5TcXVhcmVEaWZmZXJlbmNlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWNiYmFiZQotLS0gL2Rldi9udWxsCisrKyBiL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0udXRpbC5hbmFseXNpcy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91dGlsL2FuYWx5c2lzL01lYW5TcXVhcmVEaWZmZXJlbmNlLmphdmEKQEAgLTAsMCArMSwzMzIgQEAKKy8qKgorICogCisgKi8KK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS51dGlsLmFuYWx5c2lzOworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNywgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqYXZhLmxhbmcucmVmbGVjdC5JbnZvY2F0aW9uVGFyZ2V0RXhjZXB0aW9uOworaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7CitpbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7CitpbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOworaW1wb3J0IGphdmEudXRpbC5MaXN0OworaW1wb3J0IGphdmEudXRpbC5NYXA7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVByb2dyZXNzTW9uaXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuT3BlcmF0aW9uQ2FuY2VsZWRFeGNlcHRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uub3BlcmF0aW9uLklSdW5uYWJsZUNvbnRleHQ7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uub3BlcmF0aW9uLklSdW5uYWJsZVdpdGhQcm9ncmVzczsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmltcGwuUmVmZXJlbmNlU2NlbmFyaW9EYXRhTWFwSW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmltcGwuUmVmZXJlbmNlU2NlbmFyaW9EYXRhTWFwSW1wbC5SZWZlcmVuY2VTY2VuYXJpb0RhdGFJbnN0YW5jZTsKKworLyoqIAorICogdGhpcyBjbGFzcyBjb21wdXRlcyB0aGUgbWVhbiBzcXVhcmUgZGlmZmVyZW5jZSBiZXR3ZWVuIHR3byBzY2VuYXJpb3MgYXMgYSBmdW5jdGlvbiBvZiB0aW1lCisgKiAxLiBJdCBvbmx5IGxvb2tzIGF0IGxvY2F0aW9ucyB3aGljaCBhcmUgQ09NTU9OIHRvIGJvdGggc2NlbmFyaW9zCisgKiAyLiBUaGUgdGltZSBzZXJpZXMgc2hvdWxkIGJlIHRoZSBzYW1lIGxlbmd0aC4gSWYgdGhleSBhcmUgbm90IHRoaXMgd2lsbCBjb21wYXJlIG9mIGEgcGVyaW9kIGVxdWFsIHRvCisgKiAgICB0aGUgU0hPUlRFU1Qgb2YgYWxsIHRoZSB0aW1lIHNlcmllcy4gCisgKiAzLiBJdCBvbmx5IGNvbnNpZGVycyBsb2NhdGlvbnMgd2hlcmUgaW5mZWN0aW91cyBjb3VudCBpcyBub256ZXJvIGluIG9uZSBvciB0aGUgb3RoZXIgLSBub3QgaW50ZXJlc3RlZCBpbiB3ZWlnaHRpbmcgcmVnaW9ucyB3aXRoIG5vIGRpc2Vhc2UuCisgKiBAYXV0aG9yIGphbWVzCisgKgorICovCitwdWJsaWMgY2xhc3MgTWVhblNxdWFyZURpZmZlcmVuY2UgeworCQorCS8qKgorCSAqIGlucHV0CisJICovCisJTWFwPFN0cmluZyxMaXN0PERvdWJsZT4+IGNvbW1vbkluZmVjdGlvdXNMb2NhdGlvbnNBID0gbmV3IEhhc2hNYXA8U3RyaW5nLExpc3Q8RG91YmxlPj4oKTsKKwlNYXA8U3RyaW5nLExpc3Q8RG91YmxlPj4gY29tbW9uSW5mZWN0aW91c0xvY2F0aW9uc0IgPSBuZXcgSGFzaE1hcDxTdHJpbmcsTGlzdDxEb3VibGU+PigpOworCU1hcDxTdHJpbmcsTGlzdDxEb3VibGU+PiBjb21tb25TdXNjZXB0aWJsZUxvY2F0aW9uc0EgPSBuZXcgSGFzaE1hcDxTdHJpbmcsTGlzdDxEb3VibGU+PigpOworCU1hcDxTdHJpbmcsTGlzdDxEb3VibGU+PiBjb21tb25TdXNjZXB0aWJsZUxvY2F0aW9uc0IgPSBuZXcgSGFzaE1hcDxTdHJpbmcsTGlzdDxEb3VibGU+PigpOworCU1hcDxTdHJpbmcsTGlzdDxEb3VibGU+PiB0b3RhbFBvcHVsYXRpb24gPSBuZXcgSGFzaE1hcDxTdHJpbmcsTGlzdDxEb3VibGU+PigpOworCQorCQorCS8qKgorCSAqIG51bWJlciBjb21tb24gbG9jYXRpb25zIHdpdGggbm9uemVybyBJbmYgY291bnQgYXQgdGltZSB0CisJICovCisJcHVibGljIGRvdWJsZVtdIGxvY2F0aW9uQ291bnQ7CisJLyoqCisJICogVGhlIFJlc3VsdAorCSAqLworCXB1YmxpYyBkb3VibGVbXSBtZWFuU3FEaWZmOworCS8qKgorCSAqIHRpbWUKKwkgKi8KKwlwdWJsaWMgZG91YmxlW10gdGltZTsKKwkKKwkvKioKKwkgKiBEZXRlcm1pbmVzIHRoZSBNZWFuU3F1YXJlIGRpZmZlcmVuY2UgYmV0d2VlbiB0d28gc2NlbmFyaW8gZGF0YSBzZXRzIG92ZXIgdGltZSBlYWNoIHN0b3JlZCBpbiBhIG1hcAorCSAqIEBwYXJhbSBzY2VuYXJpb01hcEEgCisJICogQHBhcmFtIHNjZW5hcmlvTWFwQiAKKwkgKiBAcGFyYW0gcnVubmFibGVDb250ZXh0IFJ1bm5hYmxlIGNvbnRleHQgZm9yIHByb2dyZXNzIGluZGljYXRvcgorCSAqLworCXB1YmxpYyBNZWFuU3F1YXJlRGlmZmVyZW5jZShSZWZlcmVuY2VTY2VuYXJpb0RhdGFNYXBJbXBsIHNjZW5hcmlvTWFwQSwgUmVmZXJlbmNlU2NlbmFyaW9EYXRhTWFwSW1wbCBzY2VuYXJpb01hcEIsIElSdW5uYWJsZUNvbnRleHQgcnVubmFibGVDb250ZXh0KSB7CisJCWZpbmFsIFJlZmVyZW5jZVNjZW5hcmlvRGF0YU1hcEltcGwgbWFwQSA9IHNjZW5hcmlvTWFwQTsKKwkJZmluYWwgUmVmZXJlbmNlU2NlbmFyaW9EYXRhTWFwSW1wbCBtYXBCID0gc2NlbmFyaW9NYXBCOworCQlJUnVubmFibGVXaXRoUHJvZ3Jlc3MgdGFzayA9IG5ldyBJUnVubmFibGVXaXRoUHJvZ3Jlc3MoKSB7CisgICAgICAgICAgICBwdWJsaWMgdm9pZCBydW4oSVByb2dyZXNzTW9uaXRvciBwcm9ncmVzcykgeworICAgICAgICAgICAgCXByb2dyZXNzLmJlZ2luVGFzaygiQ2FsY3VsYXRpbmcgY29tbW9uIGxvY2F0aW9ucy4uLiIsIG1hcEEuZ2V0TnVtTG9jYXRpb25zKCkpOworICAgICAKKwkJCQlJdGVyYXRvcjxTdHJpbmc+IGl0ZXJhdG9yQSA9IG1hcEEuZ2V0TG9jYXRpb25zKCkuaXRlcmF0b3IoKTsKKwkJCQlpbnQgbWF4VGltZSA9IC0xOworCQkJCXdoaWxlKGl0ZXJhdG9yQS5oYXNOZXh0KCkpIHsKKwkJCQkJcHJvZ3Jlc3Mud29ya2VkKDEpOworCQkJCQlpZihwcm9ncmVzcy5pc0NhbmNlbGVkKCkpIHRocm93IG5ldyBPcGVyYXRpb25DYW5jZWxlZEV4Y2VwdGlvbigpOworCQkJCQlTdHJpbmcgaWQgPSBpdGVyYXRvckEubmV4dCgpOworCQkJCQkKKwkJCQkJaWYobWFwQi5jb250YWluc0xvY2F0aW9uKGlkKSkgeworCQkJCQkJCisJCQkJCQkvLyBnZXQgdGhlIGxpc3RzIG9mIGRhdGEgb25seSBmb3IgdGhvc2UgbG9jYXRpb25zIHRoYXQgYXJlIGNvbW1vbiB0byBib3RoIG1hcHMKKwkJCQkJCVJlZmVyZW5jZVNjZW5hcmlvRGF0YUluc3RhbmNlIGRhdGFNYXBBID0gbWFwQS5nZXRMb2NhdGlvbihpZCk7CisJCQkJCQlMaXN0PERvdWJsZT4gZGF0YUFJID0gZ2V0Tm9ybWFsaXplZEluZmVjdGlvdXMoZGF0YU1hcEEpOworCQkJCQkJY29tbW9uSW5mZWN0aW91c0xvY2F0aW9uc0EucHV0KGlkLGRhdGFBSSk7CisJCQkJCQkKKwkJCQkJCUxpc3Q8RG91YmxlPiBkYXRhQVMgPSBnZXROb3JtYWxpemVkU3VzY2VwdGlibGUoZGF0YU1hcEEpOworCQkJCQkJY29tbW9uU3VzY2VwdGlibGVMb2NhdGlvbnNBLnB1dChpZCxkYXRhQVMpOworCQkJCQkJCisJCQkJCQkKKwkJCQkJCS8vIGdldCB0aGUgdG90YWwgcG9wdWxhdGlvbiBmcm9tIE1hcCBBIChzYW1lIGFzIG1hcCBCIGZvciBub3cKKwkJCQkJCXRvdGFsUG9wdWxhdGlvbi5wdXQoaWQsIGdldFRvdGFsUG9wdWxhdGlvbihkYXRhTWFwQSkpOworCQkJCQkJCisJCQkJCQkvLyBNYXAgQgorCQkJCQkJUmVmZXJlbmNlU2NlbmFyaW9EYXRhSW5zdGFuY2UgZGF0YU1hcEIgPSBtYXBCLmdldExvY2F0aW9uKGlkKTsKKwkJCQkJCUxpc3Q8RG91YmxlPiBkYXRhQkkgPSBnZXROb3JtYWxpemVkSW5mZWN0aW91cyhkYXRhTWFwQik7CisJCQkJCQljb21tb25JbmZlY3Rpb3VzTG9jYXRpb25zQi5wdXQoaWQsZGF0YUJJKTsKKwkJCQkJCQorCQkJCQkJTGlzdDxEb3VibGU+IGRhdGFCUyA9IGdldE5vcm1hbGl6ZWRTdXNjZXB0aWJsZShkYXRhTWFwQik7CisJCQkJCQljb21tb25TdXNjZXB0aWJsZUxvY2F0aW9uc0IucHV0KGlkLGRhdGFCUyk7CisJCQkJCQkKKwkJCQkJCS8vIGluaXQgdGhlIGFycmF5IHNpemUKKwkJCQkJCWlmIChtYXhUaW1lID09IC0xKSBtYXhUaW1lID0gZGF0YUFJLnNpemUoKTsKKwkJCQkJCQorCQkJCQkJLy8gZGltZW5zaW9uIHRoZSBhcnJheXMgdG8gdGhlIGxlbmd0aCBvZiB0aGUgU01BTExFU1QgYXJyYXkgZm9yIHdoaWNoIHdlIGhhdmUgZGF0YQorCQkJCQkJaWYobWF4VGltZSA+PSBkYXRhQkkuc2l6ZSgpICkgbWF4VGltZSA9IGRhdGFCSS5zaXplKCk7CisJCQkJCQlpZihtYXhUaW1lID49IGRhdGFBSS5zaXplKCkgKSBtYXhUaW1lID0gZGF0YUFJLnNpemUoKTsKKwkJCQkJfS8vIGlmCisJCQkJfS8vIHdoaWxlCisJCQkJcHJvZ3Jlc3MuZG9uZSgpOworCQkJCWlmKG1heFRpbWU8PTApIG1heFRpbWUgPSAwOworCQkJCWlmKHRpbWU9PW51bGwpIHsKKwkJCQkJdGltZSA9IG5ldyBkb3VibGVbbWF4VGltZV07CisJCQkJCW1lYW5TcURpZmYgPSBuZXcgZG91YmxlW21heFRpbWVdOworCQkJCQlsb2NhdGlvbkNvdW50ID0gbmV3IGRvdWJsZVttYXhUaW1lXTsKKwkJCQkJZm9yKGludCBpID0gMDsgaSA8IG1heFRpbWU7IGkgKyspIHsKKwkJCQkJCXRpbWVbaV0gPSBpOworCQkJCQkJbWVhblNxRGlmZltpXSA9IDAuMDsKKwkJCQkJCWxvY2F0aW9uQ291bnRbaV0gPSAwLjA7CisJCQkJCX0KKwkJCQl9CisgICAgICAgICAgICB9CisJCX07CisJCXRyeSB7CisJCQlydW5uYWJsZUNvbnRleHQucnVuKHRydWUsIGZhbHNlLCB0YXNrKTsKKwkJfSBjYXRjaChJbnRlcnJ1cHRlZEV4Y2VwdGlvbiBpZSkgeworCQkJLy8gVGFzayBpcyBub3QgaW50ZXJydXB0YWJsZQorCQl9IGNhdGNoKEludm9jYXRpb25UYXJnZXRFeGNlcHRpb24gaXRlKSB7CisJCQkvLyBUYXNrIGlzIG5vdCBpbnRlcnJ1cHRhYmxlCisJCX0KKwl9Ly8gY29uc3RydWN0b3IgTWVhblNxdWFyZURpZmZlcmVuY2UKKwkKKwkKKwkvKioKKwkgKiBGcm9tIHRoZSBkYXRhTWFwIGV4dHJhY3QgYSBsaXN0IG9mIG5vcm1hbGl6ZSBpbmZlY3Rpb3VzIChmcmFjdGlvbiBvZiB0b3RhbCBwb3B1bGF0aW9uKQorCSAqIEBwYXJhbSBkYXRhTWFwCisJICogQHJldHVybiBub3JtYWxpemUgbGlzdCBvZiBpbmZlY3Rpb3VzIHBlb3BsZQorCSAqLworCXB1YmxpYyBMaXN0PERvdWJsZT4gZ2V0Tm9ybWFsaXplZEluZmVjdGlvdXMoUmVmZXJlbmNlU2NlbmFyaW9EYXRhSW5zdGFuY2UgZGF0YU1hcCkgeworCQkKKwkJLy8gbWF5IG9yIG1heSBub3QgZXhpc3QKKwkJTGlzdDxEb3VibGU+IGV4cG9zZWRMaXN0ID0gZGF0YU1hcC5nZXRFdG90YWxzKCk7CisJCUxpc3Q8RG91YmxlPiByZWNvdmVyZWRMaXN0ID0gZGF0YU1hcC5nZXRSdG90YWxzKCk7CisJCQorCQkvLyBNVVNUIGV4aXN0CisJCUxpc3Q8RG91YmxlPiBpbmZlY3Rpb3VzTGlzdCA9IGRhdGFNYXAuZ2V0SXRvdGFscygpOworCQlMaXN0PERvdWJsZT4gc3VzY2VwdGlibGVMaXN0ID0gZGF0YU1hcC5nZXRTdG90YWxzKCk7CQorCQlhc3NlcnQoaW5mZWN0aW91c0xpc3QhPW51bGwpOworCQlhc3NlcnQoc3VzY2VwdGlibGVMaXN0IT1udWxsKTsKKwkJCisJCQorCQlMaXN0PERvdWJsZT4gbm9ybWFsaXplZEluZmVjdGlvdXMgPSBuZXcgQXJyYXlMaXN0PERvdWJsZT4oKTsKKwkJZG91YmxlW10gdG90YWxQb3AgPSBuZXcgZG91YmxlW2luZmVjdGlvdXNMaXN0LnNpemUoKV07CisJCWZvciAoaW50IGkgPSAwOyBpIDwgaW5mZWN0aW91c0xpc3Quc2l6ZSgpOyBpICsrKSB7CisJCQkKKwkJCWRvdWJsZSBpbmYgPSBpbmZlY3Rpb3VzTGlzdC5nZXQoaSkuZG91YmxlVmFsdWUoKTsKKwkJCWRvdWJsZSBzdXNjID0gc3VzY2VwdGlibGVMaXN0LmdldChpKS5kb3VibGVWYWx1ZSgpOworCQkJZG91YmxlIGV4cG9zZWQgPSAwLjA7CisJCQlkb3VibGUgcmVjb3ZlcmVkID0gMC4wOworCQkJaWYoKGV4cG9zZWRMaXN0IT1udWxsKSYmKGV4cG9zZWRMaXN0LnNpemUoKT49aSkpIHsKKwkJCQlleHBvc2VkID0gZXhwb3NlZExpc3QuZ2V0KGkpLmRvdWJsZVZhbHVlKCk7CisJCQl9CisJCQlpZigocmVjb3ZlcmVkTGlzdCE9bnVsbCkmJihyZWNvdmVyZWRMaXN0LnNpemUoKT49aSkpIHsKKwkJCQlyZWNvdmVyZWQgPSByZWNvdmVyZWRMaXN0LmdldChpKS5kb3VibGVWYWx1ZSgpOworCQkJfQorCQkJdG90YWxQb3BbaV0gPSBpbmYrc3VzYytleHBvc2VkK3JlY292ZXJlZDsKKwkJCWluZiAvPSB0b3RhbFBvcFtpXTsKKwkJCW5vcm1hbGl6ZWRJbmZlY3Rpb3VzLmFkZChuZXcgRG91YmxlKGluZikpOworCQl9CisJCXJldHVybiBub3JtYWxpemVkSW5mZWN0aW91czsKKwl9CisJCisJCisJLyoqCisJICogRnJvbSB0aGUgZGF0YU1hcCBleHRyYWN0IGEgbGlzdCBvZiBub3JtYWxpemUgaW5mZWN0aW91cyAoZnJhY3Rpb24gb2YgdG90YWwgcG9wdWxhdGlvbikKKwkgKiBAcGFyYW0gZGF0YU1hcAorCSAqIEByZXR1cm4gbm9ybWFsaXplIGxpc3Qgb2YgaW5mZWN0aW91cyBwZW9wbGUKKwkgKi8KKwlwdWJsaWMgTGlzdDxEb3VibGU+IGdldE5vcm1hbGl6ZWRTdXNjZXB0aWJsZShSZWZlcmVuY2VTY2VuYXJpb0RhdGFJbnN0YW5jZSBkYXRhTWFwKSB7CisJCS8vIG1heSBvciBtYXkgbm90IGV4aXN0CisJCUxpc3Q8RG91YmxlPiBleHBvc2VkTGlzdCA9IGRhdGFNYXAuZ2V0RXRvdGFscygpOworCQlMaXN0PERvdWJsZT4gcmVjb3ZlcmVkTGlzdCA9IGRhdGFNYXAuZ2V0UnRvdGFscygpOworCQkKKwkJLy8gTVVTVCBleGlzdAorCQlMaXN0PERvdWJsZT4gaW5mZWN0aW91c0xpc3QgPSBkYXRhTWFwLmdldEl0b3RhbHMoKTsKKwkJTGlzdDxEb3VibGU+IHN1c2NlcHRpYmxlTGlzdCA9IGRhdGFNYXAuZ2V0U3RvdGFscygpOwkKKwkJYXNzZXJ0KGluZmVjdGlvdXNMaXN0IT1udWxsKTsKKwkJYXNzZXJ0KHN1c2NlcHRpYmxlTGlzdCE9bnVsbCk7CisJCQorCQkKKwkJCisJCUxpc3Q8RG91YmxlPiBub3JtYWxpemVkU3VzY2VwdGlibGUgPSBuZXcgQXJyYXlMaXN0PERvdWJsZT4oKTsKKwkJZG91YmxlW10gdG90YWxQb3AgPSBuZXcgZG91YmxlW3N1c2NlcHRpYmxlTGlzdC5zaXplKCldOworCQlmb3IgKGludCBpID0gMDsgaSA8IHN1c2NlcHRpYmxlTGlzdC5zaXplKCk7IGkgKyspIHsKKwkJCQorCQkJZG91YmxlIGluZiA9IGluZmVjdGlvdXNMaXN0LmdldChpKS5kb3VibGVWYWx1ZSgpOworCQkJZG91YmxlIHN1c2MgPSBzdXNjZXB0aWJsZUxpc3QuZ2V0KGkpLmRvdWJsZVZhbHVlKCk7CisJCQlkb3VibGUgZXhwb3NlZCA9IDAuMDsKKwkJCWRvdWJsZSByZWNvdmVyZWQgPSAwLjA7CisJCQlpZigoZXhwb3NlZExpc3QhPW51bGwpJiYoZXhwb3NlZExpc3Quc2l6ZSgpPj1pKSkgeworCQkJCWV4cG9zZWQgPSBleHBvc2VkTGlzdC5nZXQoaSkuZG91YmxlVmFsdWUoKTsKKwkJCX0KKwkJCWlmKChyZWNvdmVyZWRMaXN0IT1udWxsKSYmKHJlY292ZXJlZExpc3Quc2l6ZSgpPj1pKSkgeworCQkJCXJlY292ZXJlZCA9IHJlY292ZXJlZExpc3QuZ2V0KGkpLmRvdWJsZVZhbHVlKCk7CisJCQl9CisJCQl0b3RhbFBvcFtpXSA9IGluZitzdXNjK2V4cG9zZWQrcmVjb3ZlcmVkOworCQkJaWYodG90YWxQb3BbaV0gIT0gMC4wKSBzdXNjIC89IHRvdGFsUG9wW2ldOworCQkJZWxzZSBzdXNjID0gMDsgLy8gc29tZSBwcm9ibGVtIGZvciBhaXIgdHJhbnNwb3JhdGlvbiBub2RlcyBzbyBhZGRlZCB0aGlzIGZpeAorCQkJbm9ybWFsaXplZFN1c2NlcHRpYmxlLmFkZChuZXcgRG91YmxlKHN1c2MpKTsKKwkJfQorCQlyZXR1cm4gbm9ybWFsaXplZFN1c2NlcHRpYmxlOworCX0KKwkKKwkvKioKKwkgKiBGcm9tIHRoZSBkYXRhTWFwIGV4dHJhY3QgYSBsaXN0IG9mIHRoZSB0b3RhbCBwb3B1bGF0aW9uKQorCSAqIEBwYXJhbSBkYXRhTWFwCisJICogQHJldHVybiB0b3RhbCBwb3B1bGF0aW9uCisJICovCisJcHVibGljIExpc3Q8RG91YmxlPiBnZXRUb3RhbFBvcHVsYXRpb24oUmVmZXJlbmNlU2NlbmFyaW9EYXRhSW5zdGFuY2UgZGF0YU1hcCkgeworCQkvLyBtYXkgb3IgbWF5IG5vdCBleGlzdAorCQlMaXN0PERvdWJsZT4gZXhwb3NlZExpc3QgPSBkYXRhTWFwLmdldEV0b3RhbHMoKTsKKwkJTGlzdDxEb3VibGU+IHJlY292ZXJlZExpc3QgPSBkYXRhTWFwLmdldFJ0b3RhbHMoKTsKKwkJCisJCS8vIE1VU1QgZXhpc3QKKwkJTGlzdDxEb3VibGU+IGluZmVjdGlvdXNMaXN0ID0gZGF0YU1hcC5nZXRJdG90YWxzKCk7CisJCUxpc3Q8RG91YmxlPiBzdXNjZXB0aWJsZUxpc3QgPSBkYXRhTWFwLmdldFN0b3RhbHMoKTsJCisJCSAKKwkJYXNzZXJ0KGluZmVjdGlvdXNMaXN0IT1udWxsKTsKKwkJYXNzZXJ0KHN1c2NlcHRpYmxlTGlzdCE9bnVsbCk7CisJCQorCQkKKwkJTGlzdDxEb3VibGU+IHBvcHVsYXRpb24gPSBuZXcgQXJyYXlMaXN0PERvdWJsZT4oKTsKKwkKKwkJZm9yIChpbnQgaSA9IDA7IGkgPCBpbmZlY3Rpb3VzTGlzdC5zaXplKCk7IGkgKyspIHsKKwkJCWRvdWJsZSB0b3RhbFBvcCA9IDAuMDsKKwkJCWRvdWJsZSBpbmYgPSBpbmZlY3Rpb3VzTGlzdC5nZXQoaSkuZG91YmxlVmFsdWUoKTsKKwkJCWRvdWJsZSBzdXNjID0gc3VzY2VwdGlibGVMaXN0LmdldChpKS5kb3VibGVWYWx1ZSgpOworCQkJZG91YmxlIGV4cG9zZWQgPSAwLjA7CisJCQlkb3VibGUgcmVjb3ZlcmVkID0gMC4wOworCQkJaWYoKGV4cG9zZWRMaXN0IT1udWxsKSYmKGV4cG9zZWRMaXN0LnNpemUoKT49aSkpIHsKKwkJCQlleHBvc2VkID0gZXhwb3NlZExpc3QuZ2V0KGkpLmRvdWJsZVZhbHVlKCk7CisJCQl9CisJCQlpZigocmVjb3ZlcmVkTGlzdCE9bnVsbCkmJihyZWNvdmVyZWRMaXN0LnNpemUoKT49aSkpIHsKKwkJCQlyZWNvdmVyZWQgPSByZWNvdmVyZWRMaXN0LmdldChpKS5kb3VibGVWYWx1ZSgpOworCQkJfQorCQkJdG90YWxQb3AgPSBpbmYrc3VzYytleHBvc2VkK3JlY292ZXJlZDsKKwkJCXBvcHVsYXRpb24uYWRkKG5ldyBEb3VibGUodG90YWxQb3ApKTsKKwkJfQorCQlyZXR1cm4gcG9wdWxhdGlvbjsKKwl9CisJCisJLyoqCisJICogc29sdmVzIGZvciB0aGUgUm9vdCBNZWFuU3F1YXJlRGlmZmVyZW5jZSB2cyB0aW1lCisJICogdXNpbmcgaW5mZWN0aW91cyBkYXRhIG9ubHkgZm9yIG5vdworCSAqIAorCSAqIEBwYXJhbSBydW5uYWJsZUNvbnRleHQgUnVubmFibGUgY29udGV4dCBmb3IgcHJvZ3Jlc3MgaW5kaWNhdG9yCisJICogQHJldHVybiBjb21wYXJpc29uIHRpbWUgc2VyaWVzIGFzIGRvdWJsZVtdCisJICovCisJcHVibGljIGRvdWJsZVtdIHNvbHZlKElSdW5uYWJsZUNvbnRleHQgcnVubmFibGVDb250ZXh0KSB7CisJCUlSdW5uYWJsZVdpdGhQcm9ncmVzcyB0YXNrID0gbmV3IElSdW5uYWJsZVdpdGhQcm9ncmVzcygpIHsKKyAgICAgICAgICAgIHB1YmxpYyB2b2lkIHJ1bihJUHJvZ3Jlc3NNb25pdG9yIHByb2dyZXNzKSB7CisgICAgICAgICAgICAJcHJvZ3Jlc3MuYmVnaW5UYXNrKCJTb2x2aW5nLi4uIiwgdGltZS5sZW5ndGgpOworCQkJCWRvdWJsZVtdIG1heFBvcHVsYXRpb24gPSBuZXcgZG91YmxlW3RpbWUubGVuZ3RoXTsKKwkJCQlmb3IoaW50IGljb3VudCA9MDsgaWNvdW50IDwgdGltZS5sZW5ndGg7IGljb3VudCArKykgeworCQkJCQlwcm9ncmVzcy53b3JrZWQoMSk7CisJCQkJCWlmKHByb2dyZXNzLmlzQ2FuY2VsZWQoKSkgdGhyb3cgbmV3IE9wZXJhdGlvbkNhbmNlbGVkRXhjZXB0aW9uKCk7CisJCQkJCW1heFBvcHVsYXRpb25baWNvdW50XSA9IDAuMDsKKwkJCQkJSXRlcmF0b3I8U3RyaW5nPiBpdGVyID0gY29tbW9uSW5mZWN0aW91c0xvY2F0aW9uc0Eua2V5U2V0KCkuaXRlcmF0b3IoKTsKKwkJCQkJLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisJCQkJCS8vIGFsbCBsb2NhdGlvbnMKKwkJCQkJd2hpbGUoaXRlci5oYXNOZXh0KCkpIHsKKwkJCQkJCVN0cmluZyBpZCA9IGl0ZXIubmV4dCgpOworCQkJCQkJTGlzdDxEb3VibGU+IGRhdGFBSSA9IGNvbW1vbkluZmVjdGlvdXNMb2NhdGlvbnNBLmdldChpZCk7CisJCQkJCQlMaXN0PERvdWJsZT4gZGF0YUJJID0gY29tbW9uSW5mZWN0aW91c0xvY2F0aW9uc0IuZ2V0KGlkKTsKKwkJCQkJCQorCQkJCQkJTGlzdDxEb3VibGU+IHBvcHVsYXRpb24gPSB0b3RhbFBvcHVsYXRpb24uZ2V0KGlkKTsKKwkJCQkJCQorCQkJCQkJZG91YmxlIGlBID0gZGF0YUFJLmdldChpY291bnQpLmRvdWJsZVZhbHVlKCk7CisJCQkJCQlkb3VibGUgaUIgPSBkYXRhQkkuZ2V0KGljb3VudCkuZG91YmxlVmFsdWUoKTsKKwkJCQkJCWRvdWJsZSBwb3AgPSBwb3B1bGF0aW9uLmdldChpY291bnQpLmRvdWJsZVZhbHVlKCk7CisJCQorCQkJCQkJLy8gZG91YmxlIGRlbm9tID0gKGlBK2lCKS8yLjA7CisJCQkJCQkvLyBzcXVhcmUgb2YgdGhlIGF2ZXJhZ2UgZnJhY3Rpb24gb2YgaW5mZWN0aW91cyBwZW9wbGUKKwkJCQkJCS8vIGRlbm9tICo9IGRlbm9tOworCQkJCQkJaWYgKChpQSA+IDAuMCkgfHwgKGlCID4gMC4wKSkgeworCQkJCQkJCS8vIHdlIGhhdmUgYSBsb2NhdGlvbiB3aXRoIG5vbnplcm8gZGF0YQorCQkJCQkJCWxvY2F0aW9uQ291bnRbaWNvdW50XSArPSAxLjA7CisJCQkJCQkJbWF4UG9wdWxhdGlvbltpY291bnRdICs9IHBvcDsKKwkJCQkJCQkvLyBzcXVhcmUgb2YgdGhlIERJRkZFUkVOQ0UKKwkJCQkJCQkKKwkJCQkJCQkvLyBDaGFuZ2VkIDIvNC8wOS4gRHJvcCB0aGUgUyBkYXRhIGNvbXBhcmlzb24KKwkJCQkJCQkvL2RvdWJsZSB0ZXJtID0gKChpQSAtIGlCKSAqIChpQSAtIGlCKSkKKwkJCQkJCQkvLwkJKyAoKHNBIC0gc0IpICogKHNBIC0gc0IpKTsKKwkJCQkJCQkKKwkJCQkJCQlkb3VibGUgdGVybSA9ICgoaUEgLSBpQikgKiAoaUEgLSBpQikpOworCQkJCQkKKwkJCQkJCQlkb3VibGUgbnVtZXIgPSBwb3AgKiBNYXRoLnNxcnQodGVybSk7CisJCQkJCQkJLy8gbm9ybWFsaXplCisJCQkJCQkJbWVhblNxRGlmZltpY291bnRdICs9IG51bWVyOworCQkJCQkJfQorCQkJCQkJCisJCQkJCQorCQkJCQl9Ly8gYWxsIGxvY2F0aW9ucworCQkJCQkKKyAgICAgICAgICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworCQkJCisJCQkJCS8vIG5vcm1hbGl6ZSAKKwkJCQkJaWYobG9jYXRpb25Db3VudFtpY291bnRdID49IDEuMCkgeworCQkJCQkJbWVhblNxRGlmZltpY291bnRdIC89IG1heFBvcHVsYXRpb25baWNvdW50XTsKKwkJCQkJfQorCQkJCX0vLyBmb3IgYWxsIHRpbWUKKwkJCQlwcm9ncmVzcy5kb25lKCk7CisgICAgICAgICAgICB9IC8vIHJ1bgorCQl9OworCQkKKwkJdHJ5IHsKKwkJCXJ1bm5hYmxlQ29udGV4dC5ydW4odHJ1ZSwgdHJ1ZSwgdGFzayk7CisJCX0gY2F0Y2goSW50ZXJydXB0ZWRFeGNlcHRpb24gaWUpIHsKKwkJCXJldHVybiBudWxsOworCQl9IGNhdGNoKEludm9jYXRpb25UYXJnZXRFeGNlcHRpb24gaXZlKSB7CisJCQlyZXR1cm4gbnVsbDsKKwkJfQorCQlyZXR1cm4gbWVhblNxRGlmZjsJCisJfS8vIHNvbHZlKCkKKworCQorCQorfSAvLyBjbGFzcyBNZWFuU3F1YXJlRGlmZmVyZW5jZQpkaWZmIC0tZ2l0IGEvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS51dGlsLmFuYWx5c2lzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3V0aWwvYW5hbHlzaXMvTW9kZWxQYXJhbWV0ZXJzLmphdmEgYi9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLnV0aWwuYW5hbHlzaXMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdXRpbC9hbmFseXNpcy9Nb2RlbFBhcmFtZXRlcnMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYTNlYzAyCi0tLSAvZGV2L251bGwKKysrIGIvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS51dGlsLmFuYWx5c2lzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3V0aWwvYW5hbHlzaXMvTW9kZWxQYXJhbWV0ZXJzLmphdmEKQEAgLTAsMCArMSwzNTggQEAKKy8qKgorICogCisgKi8KK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS51dGlsLmFuYWx5c2lzOworCitpbXBvcnQgamF2YS51dGlsLkFycmF5czsKK2ltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKK2ltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CitpbXBvcnQgamF2YS51dGlsLk1hcDsKK2ltcG9ydCBqYXZhLnV0aWwuTWFwLkVudHJ5OworaW1wb3J0IGphdmEudXRpbC5TZXQ7CisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNywgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworLyoqCisgKiBUaGlzIGNsYXNzIGhvbGRzIGFsbCB0aGUgcGFyYW1ldGVycyB0aGF0IHdlIG1pZ2h0IHdhbnQgdG8gZXN0aW1hdGUKKyAqIGFuZCB0aGVpciBzdGFuZGFyZCBkZXZpYXRpb25zIGFuZCB2YXJpYW5jZXMuCisgKi8KK3B1YmxpYyBjbGFzcyBNb2RlbFBhcmFtZXRlcnMgeworCisJLyoqCisJICogQWxsIG1vZGVsIHBhcmFtZXRlcnMgYXJlIHN0b3JlZCBpbiB0aGlzIG1hcAorCSAqLworCXByaXZhdGUgZmluYWwgSGFzaE1hcDxTdHJpbmcsIFBhcmFtZXRlcj4gcGFyYW1ldGVycyA9IG5ldyBIYXNoTWFwPFN0cmluZywgUGFyYW1ldGVyPigpOworCisKKwkvKioKKwkgKiBBbGwgc2VsZWN0ZWQgZGF0YSBhcyBhIExpc3Q8ZG91YmxlW11bXT4ga2V5ZWQgYnkgbG9jYXRpb24KKwkgKiBmb3IgZGlzcGxheS4gVGhlIGRvdWJsZSBpbmRpY2VzIGFyZSBkYXRhW3N0YXRlXVtjaGFydEluZGV4XVt0aW1lXQorCSAqIHdoZXJlIHN0YXRlIGluZGljYXRlcyBlaXRoZXIgcmF3IGRhdGEgKHN0YXRlPTApIG9yIHRoZSBzZWxlY3RlZCB0aW1lIHJlZ2lvbiBvZiB0aGUgZGF0YSAoc3RhdGU9MSkgCisJICogY2hhcnQgaW5kZXggc2VsZWN0ZWQgZm9yIGVhY2ggb2YgdGhlIHN0YXRlIHZhcmlhYmxlcyBTLEUsSSxSIChjaGFydEluZGV4IDAtMykKKwkgKi8KKwlwcml2YXRlIGZpbmFsIEhhc2hNYXA8U3RyaW5nLCBMaXN0PGRvdWJsZVtdW10+ID4gc2VsZWN0ZWREYXRhID0gbmV3IEhhc2hNYXA8U3RyaW5nLCBMaXN0PGRvdWJsZVtdW10+PigpOworCisJLyoqCisJICogQWxsIHNlbGVjdGVkIHJlZ3Jlc3Npb24gYXMgYSBMaXN0PGRvdWJsZVtdW10+IGtleWVkIGJ5IGxvY2F0aW9uCisJICogZm9yIGRpc3BsYXkuIFRoZSBkb3VibGUgaW5kaWNlcyBhcmUgZGF0YVtzdGF0ZV1bdGltZV0KKwkgKiB3aGVyZSBzdGF0ZSBpbmRpY2F0ZXMgZWl0aGVyIHggYXhpcyAoc3RhdGU9MCkgb3IgeSBheGlzIChzdGF0ZT0xKSAKKwkgKiBjaGFydCBpbmRleCBzZWxlY3RlZCBmb3IgZWFjaCBvZiB0aGUgc3RhdGUgZXF1YXRpb25zIChjaGFydEluZGV4IDAtMykKKwkgKi8KKwlwcml2YXRlIGZpbmFsIEhhc2hNYXA8U3RyaW5nLCBMaXN0PGRvdWJsZVtdW10+ID4gcmVncmVzc2lvbkRhdGEgPSBuZXcgSGFzaE1hcDxTdHJpbmcsIExpc3Q8ZG91YmxlW11bXT4+KCk7CisKKworCS8qKgorCSAqIEFsbCBzZWxlY3RlZCBmaXRzIHRvIHRoZSByZWdyZXNzaW9uIGFzIGEgTGlzdDxkb3VibGVbXVtdPiBrZXllZCBieSBsb2NhdGlvbgorCSAqIGZvciBkaXNwbGF5LiBUaGUgZG91YmxlIGluZGljZXMgYXJlIGRhdGFbc3RhdGVdW3RpbWVdCisJICogd2hlcmUgc3RhdGUgaW5kaWNhdGVzIGVpdGhlciB4IGF4aXMgKHN0YXRlPTApIG9yIHkgYXhpcyAoc3RhdGU9MSkgCisJICogY2hhcnQgaW5kZXggc2VsZWN0ZWQgZm9yIGVhY2ggb2YgdGhlIHN0YXRlIGVxdWF0aW9ucyAoY2hhcnRJbmRleCAwLTMpCisJICovCisJcHJpdmF0ZSBmaW5hbCBIYXNoTWFwPFN0cmluZywgTGlzdDxkb3VibGVbXVtdPiA+IGZpdHRlZERhdGEgPSBuZXcgSGFzaE1hcDxTdHJpbmcsIExpc3Q8ZG91YmxlW11bXT4+KCk7CisKKworCisKKwkvKioKKwkgKiB0aGUgcmVmZXJlbmNlIHBvcHVsYXRpb24gZGVuc2l0eQorCSAqIHJlcXVpcmVkIHRvIGRvIGFuIGF2ZXJhZ2UgYWNyb3NzIGxvY2F0aW9ucyB3aXRoIHZhcnlpbmcgZGVuc2l0eQorCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgZG91YmxlIFJFRkVSRU5DRV9QT1BVTEFUSU9OX0RFTlNJVFkgPSAxMDAuMDsKKworCisJLyoqCisJICogZW1wdHkgY29uc3RydWN0b3IKKwkgKi8KKwlwdWJsaWMgTW9kZWxQYXJhbWV0ZXJzKCkgeworCQkvLyBOb3RoaW5nIGhlcmUKKwl9CisKKworCS8qKgorCSAqIGF2ZXJhZ2UgdGhlIGRhdGEgaW4gYSBtYXAgb2YgbW9kZWwgcGFyYW1ldGVycworCSAqIEBwYXJhbSBwYXJhbWV0ZXJJZE1hcAorCSAqIEByZXR1cm4gdGhlIGF2ZXJhZ2VkIG1vZGVsUGFyYW1ldGVycworCSAqLworCXB1YmxpYyBNb2RlbFBhcmFtZXRlcnMgYXZlcmFnZShNYXA8U3RyaW5nLE1vZGVsUGFyYW1ldGVycz4gcGFyYW1ldGVySWRNYXApIHsKKwkJLy9JdGVyYXRvcjxTdHJpbmc+IGl0ZXIgPSBwYXJhbWV0ZXJJZE1hcC5rZXlTZXQoKS5pdGVyYXRvcigpOworCQlmb3IgKEVudHJ5PFN0cmluZyxNb2RlbFBhcmFtZXRlcnM+IGVudHJ5IDogcGFyYW1ldGVySWRNYXAuZW50cnlTZXQoKSkgeworCisJCQkvL3doaWxlKChpdGVyIT1udWxsKSYmKGl0ZXIuaGFzTmV4dCgpKSkgeworCQkJLy9TdHJpbmcga2V5ID0gaXRlci5uZXh0KCk7CisJCQlNb2RlbFBhcmFtZXRlcnMgcGFybXMgPSBlbnRyeS5nZXRWYWx1ZSgpOworCQkJdGhpcy5hY2N1bXVsYXRlTnVtZXJhdG9yKHBhcm1zKTsKKwkJCXRoaXMuYWNjdW11bGF0ZURlbm9taW5hdG9yKHBhcm1zKTsKKworCQkJLy8gYW5kIGZvciBkaXNwbGF5IHB1cnBvc2VzIHNhdmUgdGhlIGRhdGEsIGJ5IGxvY2F0aW9uLCB0aGF0IHdlbnQgaW50byB0aGUgZml0CisJCQlJdGVyYXRvcjxTdHJpbmc+IGl0ZXIyID0gcGFybXMuc2VsZWN0ZWREYXRhLmtleVNldCgpLml0ZXJhdG9yKCk7CisJCQl3aGlsZSgoaXRlcjIhPW51bGwpJiYoaXRlcjIuaGFzTmV4dCgpKSkgeworCQkJCVN0cmluZyBpZCA9IGl0ZXIyLm5leHQoKTsKKwkJCQlMaXN0PGRvdWJsZVtdW10+IGRhdGEgPSBwYXJtcy5zZWxlY3RlZERhdGEuZ2V0KGlkKTsKKwkJCQl0aGlzLnNlbGVjdGVkRGF0YS5wdXQoaWQsIGRhdGEpOworCQkJfQkKKwkJCS8vIGFuZCBmb3IgZGlzcGxheSBwdXJwb3NlcyBzYXZlIHRoZSByZWdyZXNzaW9uLCBieSBsb2NhdGlvbiwgdGhhdCB3ZW50IGludG8gdGhlIGZpdAorCQkJSXRlcmF0b3I8U3RyaW5nPiBpdGVyMyA9IHBhcm1zLnJlZ3Jlc3Npb25EYXRhLmtleVNldCgpLml0ZXJhdG9yKCk7CisJCQl3aGlsZSgoaXRlcjMhPW51bGwpJiYoaXRlcjMuaGFzTmV4dCgpKSkgeworCQkJCVN0cmluZyBpZCA9IGl0ZXIzLm5leHQoKTsKKwkJCQlMaXN0PGRvdWJsZVtdW10+IGRhdGEgPSBwYXJtcy5yZWdyZXNzaW9uRGF0YS5nZXQoaWQpOworCQkJCXRoaXMucmVncmVzc2lvbkRhdGEucHV0KGlkLCBkYXRhKTsKKwkJCX0JCisKKwkJCS8vIGFuZCBmb3IgZGlzcGxheSBwdXJwb3NlcyBzYXZlIHRoZSBmaXR0ZWQgZGF0YSwgYnkgbG9jYXRpb24sIHRoYXQgd2VudCBpbnRvIHRoZSBmaXQKKwkJCUl0ZXJhdG9yPFN0cmluZz4gaXRlcjQgPSBwYXJtcy5maXR0ZWREYXRhLmtleVNldCgpLml0ZXJhdG9yKCk7CisJCQl3aGlsZSgoaXRlcjQhPW51bGwpJiYoaXRlcjQuaGFzTmV4dCgpKSkgeworCQkJCVN0cmluZyBpZCA9IGl0ZXI0Lm5leHQoKTsKKwkJCQlMaXN0PGRvdWJsZVtdW10+IGRhdGEgPSBwYXJtcy5maXR0ZWREYXRhLmdldChpZCk7CisJCQkJdGhpcy5maXR0ZWREYXRhLnB1dChpZCwgZGF0YSk7CisJCQl9CQorCQl9Ly8gYWxsIGxvY2F0aW9ucworCQl0aGlzLmF2ZXJhZ2UoKTsKKwkJdGhpcy5jYWxjdWxhdGVTdGRBdmcoKTsKKwkJcmV0dXJuIHRoaXM7CisJfQorCisKKwlIYXNoTWFwIDxTdHJpbmcsIERvdWJsZT4gbnVtZXJhdG9ycyA9IG5ldyBIYXNoTWFwPFN0cmluZywgRG91YmxlPigpOworCisJLyoqCisJICogYWNjdW11bGF0ZSBudW1lcmF0b3IgdmFsdWVzIGZyb20gYW5vdGhlciBNb2RlbFBhcmFtZXRlcnMgaW5zdGFuY2UgZm9yIGNhbGN1bGF0aW5nIGF2ZXJhZ2UKKwkgKiBAcGFyYW0gb3RoZXIKKwkgKi8KKwlAU3VwcHJlc3NXYXJuaW5ncygiYm94aW5nIikKKwlwcml2YXRlIHZvaWQgYWNjdW11bGF0ZU51bWVyYXRvcihNb2RlbFBhcmFtZXRlcnMgb3RoZXIpIHsKKworCQlmb3IoUGFyYW1ldGVyIHBhcm0gOiBvdGhlci5nZXRQYXJhbWV0ZXJzKCkudmFsdWVzKCkpIHsKKwkJCWlmKG51bWVyYXRvcnMuY29udGFpbnNLZXkocGFybS5uYW1lKSkKKwkJCQludW1lcmF0b3JzLnB1dChwYXJtLm5hbWUsIAorCQkJCQkJbnVtZXJhdG9ycy5nZXQocGFybS5uYW1lKSArIChwYXJtLnZhbHVlIC8gcGFybS52YXJpYW5jZSkpOworCQkJZWxzZQorCQkJCW51bWVyYXRvcnMucHV0KHBhcm0ubmFtZSwgCisJCQkJCQlwYXJtLnZhbHVlIC8gcGFybS52YXJpYW5jZSk7CisJCX0KKwl9CisKKwlIYXNoTWFwIDxTdHJpbmcsIERvdWJsZT4gZGVub21pbmF0b3JzID0gbmV3IEhhc2hNYXA8U3RyaW5nLCBEb3VibGU+KCk7CisKKwkvKioKKwkgKiBhY2N1bXVsYXRlIGRlbm9taW5hdG9yIHZhbHVlcyBmcm9tIGFub3RoZXIgTW9kZWxQYXJhbWV0ZXJzIGluc3RhbmNlIGZvciBjYWxjdWxhdGluZyBhdmVyYWdlCisJICogQHBhcmFtIG90aGVyCisJICovCisJQFN1cHByZXNzV2FybmluZ3MoImJveGluZyIpCisJcHJpdmF0ZSB2b2lkIGFjY3VtdWxhdGVEZW5vbWluYXRvcihNb2RlbFBhcmFtZXRlcnMgb3RoZXIpIHsKKworCQlmb3IoUGFyYW1ldGVyIHBhcm0gOiBvdGhlci5nZXRQYXJhbWV0ZXJzKCkudmFsdWVzKCkpIHsKKwkJCWlmKGRlbm9taW5hdG9ycy5jb250YWluc0tleShwYXJtLm5hbWUpKQorCQkJCWRlbm9taW5hdG9ycy5wdXQocGFybS5uYW1lLCAKKwkJCQkJCWRlbm9taW5hdG9ycy5nZXQocGFybS5uYW1lKSArICgxLjAgLyBwYXJtLnZhcmlhbmNlKSk7CisJCQllbHNlCisJCQkJZGVub21pbmF0b3JzLnB1dChwYXJtLm5hbWUsIAorCQkJCQkJKDEuMCAvIHBhcm0udmFyaWFuY2UpKTsKKwkJfQorCX0KKworCS8qKgorCSAqIGRpdmlkZSB0byBnZXQgYXZlcmFnZQorCSAqLworCXByaXZhdGUgdm9pZCBhdmVyYWdlKCkgeworCQlmb3IoU3RyaW5nIHBhcm0gOiB0aGlzLm51bWVyYXRvcnMua2V5U2V0KCkpIHsKKwkJCWRvdWJsZSBudW0gPSBudW1lcmF0b3JzLmdldChwYXJtKS5kb3VibGVWYWx1ZSgpOworCQkJZG91YmxlIGRlbm9tID0gZGVub21pbmF0b3JzLmdldChwYXJtKS5kb3VibGVWYWx1ZSgpOworCQkJdGhpcy5hZGRQYXJhbWV0ZXIocGFybSwgbmV3IFBhcmFtZXRlcihwYXJtLCBudW0gLyBkZW5vbSAgKSk7CisJCX0vLyBmb3IKKwl9Ly8gYXZlcmFnZQorCisJLyoqCisJICogZmluZCBzdGQgb2YgZWFjaCBwYXJhbWV0ZXIgYXZlcmFnZQorCSAqLworCUBTdXBwcmVzc1dhcm5pbmdzKCJib3hpbmciKQorCXByaXZhdGUgdm9pZCBjYWxjdWxhdGVTdGRBdmcoKSB7CisJCWZvcihTdHJpbmcgcGFybSA6IHRoaXMubnVtZXJhdG9ycy5rZXlTZXQoKSkgeworCQkJUGFyYW1ldGVyIHAgPSB0aGlzLmdldFBhcmFtZXRlcihwYXJtKTsKKwkJCXAuc3RkZGV2ID0gTWF0aC5zcXJ0KDEuMCAvIGRlbm9taW5hdG9ycy5nZXQocGFybSkpOworCQl9CisKKwkJLy8gSSBhc3N1bWUgdGhlICs9IGJlbG93IHdhcyBhIGJ1Zz8gLSBTRUQKKwkJLyoJCXN0ZEJldGEgKz0gTWF0aC5zcXJ0KDEvZGVub21pbmF0b3JCZXRhKTsKKwkJc3RkQWxwaGEgKz0gTWF0aC5zcXJ0KDEvZGVub21pbmF0b3JBbHBoYSk7CisJCXN0ZEdhbW1hICs9IE1hdGguc3FydCgxL2Rlbm9taW5hdG9yR2FtbWEpOworCQlzdGRFcHNpbG9uICs9IE1hdGguc3FydCgxL2Rlbm9taW5hdG9yRXBzaWxvbik7CisJCXN0ZEJldGEyICs9IE1hdGguc3FydCgxL2Rlbm9taW5hdG9yQmV0YTIpOworCQlzdGRBbHBoYTIgKz0gTWF0aC5zcXJ0KDEvZGVub21pbmF0b3JBbHBoYTIpOworCQlzdGRHYW1tYTIgKz0gTWF0aC5zcXJ0KDEvZGVub21pbmF0b3JHYW1tYTIpOworCQlzdGRFcHNpbG9uMiArPSBNYXRoLnNxcnQoMS9kZW5vbWluYXRvckVwc2lsb24yKTsKKwkJc3RkTGFtYmRhICs9IE1hdGguc3FydCgxL2Rlbm9taW5hdG9yTGFtYmRhKTsKKwkJICovCisJfQorCisKKwkvKioKKwkgKiBhZGQgYSBuZXcgcGFyYW1ldGVyIHRvIHRoZSBtYXAKKwkgKiBAcGFyYW0gbmFtZSBQYXJhbWV0ZXIgbmFtZQorCSAqIEBwYXJhbSBwYXJtIFBhcmFtZXRlciBpbnN0YW5jZQorCSAqLworCXB1YmxpYyB2b2lkIGFkZFBhcmFtZXRlcihTdHJpbmcgbmFtZSwgUGFyYW1ldGVyIHBhcm0pIHsKKwkJdGhpcy5wYXJhbWV0ZXJzLnB1dChuYW1lLCBwYXJtKTsKKwl9CisKKwkvKioKKwkgKiBhZGQgc2VsZWN0ZWQgZGF0YSBmb3IgZGlzcGxheQorCSAqIEBwYXJhbSBuYW1lIGxvY2F0aW9uIG5hbWUKKwkgKiBAcGFyYW0gZGF0YSB0aGUgc2VsZWN0ZWQgZGF0YQorCSAqLworCXB1YmxpYyB2b2lkIGFkZFNlbGVjdGVkRGF0YShTdHJpbmcgbmFtZSwgTGlzdDxkb3VibGVbXVtdPiBkYXRhKSB7CisJCXRoaXMuc2VsZWN0ZWREYXRhLnB1dChuYW1lLCBkYXRhKTsKKwl9CisKKwkvKioKKwkgKiBhZGQgc2VsZWN0ZWQgcmVncmVzc2lvbiBmb3IgZGlzcGxheQorCSAqIEBwYXJhbSBuYW1lIGxvY2F0aW9uIG5hbWUKKwkgKiBAcGFyYW0gZGF0YSB0aGUgc2VsZWN0ZWQgZGF0YQorCSAqLworCXB1YmxpYyB2b2lkIGFkZFJlZ3Jlc3Npb25EYXRhKFN0cmluZyBuYW1lLCBMaXN0PGRvdWJsZVtdW10+IGRhdGEpIHsKKwkJdGhpcy5yZWdyZXNzaW9uRGF0YS5wdXQobmFtZSwgZGF0YSk7CisJfQorCisKKwkvKioKKwkgKiBhZGQgZml0dGVkIGRhdGEgZm9yIGRpc3BsYXkKKwkgKiBAcGFyYW0gbmFtZSBsb2NhdGlvbiBuYW1lCisJICogQHBhcmFtIGRhdGEgdGhlIHNlbGVjdGVkIGRhdGEKKwkgKi8KKwlwdWJsaWMgdm9pZCBhZGRGaXR0ZWREYXRhKFN0cmluZyBuYW1lLCBMaXN0PGRvdWJsZVtdW10+IGRhdGEpIHsKKwkJdGhpcy5maXR0ZWREYXRhLnB1dChuYW1lLCBkYXRhKTsKKwl9CisKKworCS8qKgorCSAqIFJldHVybnMgdGhlIHJhdyBkYXRhIChzdGF0ZSAwKSBhbmQgdGhlIHNlbGVjdGVkIGRhdGEgKHN0YXRlIDEpIAorCSAqIGZvciBlYWNoIG9mIHRoZSBzdGF0ZSB2YXJpYWJsZXMgUyxFLEksUiAoY2hhcnRJbmRleCAwLTMpCisJICogQHBhcmFtIGlkIAorCSAqIEBwYXJhbSBjaGFydEluZGV4IAorCSAqIEBwYXJhbSBzdGF0ZQorCSAqIEByZXR1cm4gdGhlIGRhdGEgdG8gcGxvdAorCSAqLworCXB1YmxpYyBkb3VibGVbXSBnZXREYXRhVmFsdWVzKFN0cmluZyBpZCwgaW50IGNoYXJ0SW5kZXgsIGludCBzdGF0ZSkgeworCQlMaXN0PGRvdWJsZVtdW10+IGRhdGFMaXN0ID0gc2VsZWN0ZWREYXRhLmdldChpZCk7CisJCWRvdWJsZVtdW10gZGF0YSA9IGRhdGFMaXN0LmdldChjaGFydEluZGV4KTsKKwkJLy8gcGljayB0aGUgcmlnaHQgZGF0YSBmb3IgdGhlIHJpZ2h0IGNoYXJ0CisJCXJldHVybiBkYXRhW3N0YXRlXTsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSByZWdyZXNzaW9uIGRhdGEgKHggPSBzdGF0ZSAwLCB5ID0gc3RhdGUgMSkgCisJICogZm9yIGVhY2ggb2YgdGhlIHN0YXRlIGVxdWF0aW9ucyAoY2hhcnRJbmRleCAwLTMpCisJICogQHBhcmFtIGlkIAorCSAqIEBwYXJhbSBjaGFydEluZGV4IAorCSAqIEBwYXJhbSBzdGF0ZQorCSAqIEByZXR1cm4gdGhlIGRhdGEgdG8gcGxvdAorCSAqLworCXB1YmxpYyBkb3VibGVbXSBnZXRSZWdyZXNzaW9uVmFsdWVzKFN0cmluZyBpZCwgaW50IGNoYXJ0SW5kZXgsIGludCBzdGF0ZSkgeworCQlMaXN0PGRvdWJsZVtdW10+IGRhdGFMaXN0ID0gcmVncmVzc2lvbkRhdGEuZ2V0KGlkKTsKKwkJZG91YmxlW11bXSBkYXRhID0gZGF0YUxpc3QuZ2V0KGNoYXJ0SW5kZXgpOworCQkvLyBwaWNrIHRoZSByaWdodCBkYXRhIGZvciB0aGUgcmlnaHQgY2hhcnQKKwkJcmV0dXJuIGRhdGFbc3RhdGVdOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIGZpdHRlZCBkYXRhICh4ID0gc3RhdGUgMCwgeSA9IHN0YXRlIDEpIAorCSAqIGZvciBlYWNoIG9mIHRoZSBzdGF0ZSBlcXVhdGlvbnMgKGNoYXJ0SW5kZXggMC0zKQorCSAqIEBwYXJhbSBpZCAKKwkgKiBAcGFyYW0gY2hhcnRJbmRleCAKKwkgKiBAcGFyYW0gc3RhdGUKKwkgKiBAcmV0dXJuIHRoZSBkYXRhIHRvIHBsb3QKKwkgKi8KKwlwdWJsaWMgZG91YmxlW10gZ2V0Rml0dGVkVmFsdWVzKFN0cmluZyBpZCwgaW50IGNoYXJ0SW5kZXgsIGludCBzdGF0ZSkgeworCQlMaXN0PGRvdWJsZVtdW10+IGRhdGFMaXN0ID0gZml0dGVkRGF0YS5nZXQoaWQpOworCQlkb3VibGVbXVtdIGRhdGEgPSBkYXRhTGlzdC5nZXQoY2hhcnRJbmRleCk7CisJCS8vIHBpY2sgdGhlIHJpZ2h0IGRhdGEgZm9yIHRoZSByaWdodCBjaGFydAorCQlyZXR1cm4gZGF0YVtzdGF0ZV07CisJfQorCisJLyoqCisJICogdmFsaWRhdGUgdGhlIGtleQorCSAqIEBwYXJhbSBpZAorCSAqIEByZXR1cm4gdHJ1ZSBpZiB2YWxpZAorCSAqLworCXB1YmxpYyBib29sZWFuIHZhbGlkRGF0YUlEKFN0cmluZyBpZCkgeworCQlib29sZWFuIHJldFZhbCA9IGZhbHNlOworCQlpZiAoKGlkICE9IG51bGwpJiYoc2VsZWN0ZWREYXRhLmNvbnRhaW5zS2V5KGlkKSkpIHJldFZhbCA9IHRydWU7CisJCXJldHVybiByZXRWYWw7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgbG9jYXRpb24gSURzIGZvciB3aGljaCB3ZSBhbmFseXplZCBkYXRhIGFuZAorCSAqIHN0b3JlZCB0aGUgbGlzdHMgb2Ygc2VsZWN0ZWQgZGF0YQorCSAqIEByZXR1cm4gdGhlIGxvY2F0aW9uIGtleXMKKwkgKi8KKwlwdWJsaWMgU3RyaW5nW10gZ2V0RGF0YUxvY2F0aW9ucygpIHsKKwkJU2V0PFN0cmluZz4ga2V5cyA9IHNlbGVjdGVkRGF0YS5rZXlTZXQoKTsKKwkJLy8gcGljayB0aGUgcmlnaHQgZGF0YSBmb3IgdGhlIHJpZ2h0IGNoYXJ0CisJCVN0cmluZ1tdIGlkcyA9IG5ldyBTdHJpbmdba2V5cy5zaXplKCldOworCQlJdGVyYXRvcjxTdHJpbmc+IGl0ZXIgPSBrZXlzLml0ZXJhdG9yKCk7CisJCWludCBpID0gMDsKKwkJd2hpbGUoaXRlciE9bnVsbCYmaXRlci5oYXNOZXh0KCkpIHsKKwkJCWlkc1tpXSA9IGl0ZXIubmV4dCgpOworCQkJaSsrOworCQl9CisJCUFycmF5cy5zb3J0KGlkcyk7CisJCXJldHVybiBpZHM7CisJfQorCisKKworCS8qKgorCSAqIFJldHVybiB0aGUgcGFyYW1ldGVycworCSAqIEByZXR1cm4gTWFwPFN0cmluZywgUGFyYW1ldGVyPiBUaGUgcGFyYW1ldGVycworCSAqLworCisJcHVibGljIE1hcDxTdHJpbmcsIFBhcmFtZXRlcj4gZ2V0UGFyYW1ldGVycygpIHsKKwkJcmV0dXJuIHRoaXMucGFyYW1ldGVyczsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBzcGVjaWZpZWQgcGFyYW1ldGVyCisJICogQHBhcmFtIHAgVGhlIHBhcmFtZXRlciBuYW1lCisJICogQHJldHVybiBQYXJhbWV0ZXIgCisJICovCisKKwlwdWJsaWMgUGFyYW1ldGVyIGdldFBhcmFtZXRlcihTdHJpbmcgcCkgeworCQlyZXR1cm4gdGhpcy5wYXJhbWV0ZXJzLmdldChwKTsKKwl9CisJLyoqCisJICogY29udGFpbnNQYXJhbWV0ZXIgQ2hlY2sgaWYgdGhlIGdpdmVuIHBhcmFtZXRlciBpcyBpbiB0aGlzIG1vZGVsCisJICogCisJICogQHBhcmFtIHAgVGhlIHBhcmFtZXRlcgorCSAqIEByZXR1cm4gYm9vbGVhbiBUcnVlIGlmIHAgaXMgaW4gdGhlIG1vZGVsCisJICovCisKKwlwdWJsaWMgYm9vbGVhbiBjb250YWluc1BhcmFtZXRlcihTdHJpbmcgcCkgeworCQlyZXR1cm4gdGhpcy5wYXJhbWV0ZXJzLmNvbnRhaW5zS2V5KHApOworCX0KKwkvKioKKwkgKiByZXR1cm4gdmFsdWVzIGFzIGEgc3RyaW5nCisJICogQHNlZSBqYXZhLmxhbmcuT2JqZWN0I3RvU3RyaW5nKCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkgeworCQlTdHJpbmdCdWZmZXIgYnVmZmVyID0gbmV3IFN0cmluZ0J1ZmZlcigpOworCisJCWZvcihQYXJhbWV0ZXIgcGFybTp0aGlzLnBhcmFtZXRlcnMudmFsdWVzKCkpIHsKKwkJCWJ1ZmZlci5hcHBlbmQocGFybS5uYW1lKS5hcHBlbmQoIj0iKS5hcHBlbmQocGFybS52YWx1ZSkuYXBwZW5kKCJcbiIpOworCQkJYnVmZmVyLmFwcGVuZCgiZGV2aWF0aW9uKCIpLmFwcGVuZChwYXJtLm5hbWUpLmFwcGVuZCgiKSIpLmFwcGVuZCgiPSIpLmFwcGVuZChwYXJtLnN0ZGRldikuYXBwZW5kKCJcbiIpOworCQkJYnVmZmVyLmFwcGVuZCgidmFyaWFuY2UoIikuYXBwZW5kKHBhcm0ubmFtZSkuYXBwZW5kKCIpIikuYXBwZW5kKCI9IikuYXBwZW5kKHBhcm0udmFyaWFuY2UpLmFwcGVuZCgiXG4iKTsJCisJCX0JCQorCQlyZXR1cm4gYnVmZmVyLnRvU3RyaW5nKCk7CisJfSAKKworfQpkaWZmIC0tZ2l0IGEvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS51dGlsLmFuYWx5c2lzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3V0aWwvYW5hbHlzaXMvTW9uaXRvclByZWZlcmVuY2VzLmphdmEgYi9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLnV0aWwuYW5hbHlzaXMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdXRpbC9hbmFseXNpcy9Nb25pdG9yUHJlZmVyZW5jZXMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NTVkZGEwCi0tLSAvZGV2L251bGwKKysrIGIvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS51dGlsLmFuYWx5c2lzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3V0aWwvYW5hbHlzaXMvTW9uaXRvclByZWZlcmVuY2VzLmphdmEKQEAgLTAsMCArMSwxMzEgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS51dGlsLmFuYWx5c2lzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA3IDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBsdWdpbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUHJlZmVyZW5jZXM7CisKKy8qKgorICogVGhpcyBjbGFzcyByZXByZXNlbnRzCisgKi8KK3B1YmxpYyBjbGFzcyBNb25pdG9yUHJlZmVyZW5jZXMgeworCisJUGx1Z2luIHBsdWdpbiA9IEFjdGl2YXRvci5nZXREZWZhdWx0KCk7CisKKwkvKioKKwkgKiB0aGUgdXNlcnMgcHJlZmVyZW5jZXMKKwkgKi8KKwlQcmVmZXJlbmNlcyBwcmVmcyA9IHBsdWdpbi5nZXRQbHVnaW5QcmVmZXJlbmNlcygpOworCisJLyoqCisJICogdGhlIElEIG9mIHRoZSBkZWZhdWx0IGxvY2F0aW9uIHRoZSBsb2NhdGlvbiBJRCBmb3IgdGhlIGFnZ3JlZ2F0ZWQgZGF0YSBhdAorCSAqIHRoZSB3b3JsZCBsZXZlbAorCSAqLworCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBERUZBVUxUX1BSRUZFUkVOQ0UgPSAiUFJFVklPVVNfRk9MREVSIjsKKwkKKwkvKioKKwkgKiB0aGUgSUQgb2YgdGhlIGVzdGltYXRvciBtZXRob2QKKwkgKi8KKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgRVNUSU1BVE9SX1BSRUZFUkVOQ0UgPSAiRVNUSU1BVE9SX01FVEhPRCI7CisKKwkKKwkvKioKKwkgKiB0aGUgZGVmYXVsdCBmb2xkZXIgbG9jYXRpb24KKwkgKi8KKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgREVGQVVMVF9QUkVGX1ZBTFVFID0gIiI7CisgICAgCisJU3RyaW5nIHJlY2VudEZvbGRlciA9IG51bGw7CisJCisJU3RyaW5nIHJlY2VudEVzdGltYXRpb25NZXRob2QgPSBudWxsOworCQorCisJLyoqCisJICogCisJICovCisJcHVibGljIE1vbml0b3JQcmVmZXJlbmNlcygpIHsKKwkJaWYgKHByZWZzLmNvbnRhaW5zKERFRkFVTFRfUFJFRkVSRU5DRSkpIHsKKwkJCXJlY2VudEZvbGRlciA9IHByZWZzLmdldFN0cmluZyhERUZBVUxUX1BSRUZFUkVOQ0UpOworCQl9ICBlbHNlIHsKKwkJCS8vIGZpcnN0IHRpbWUgb25seQorCQkJcmVjZW50Rm9sZGVyID0gREVGQVVMVF9QUkVGX1ZBTFVFOworCQkJc2V0UHJlZmVyZW5jZXMoKTsKKwkJfQorCQkKKwkJaWYgKHByZWZzLmNvbnRhaW5zKEVTVElNQVRPUl9QUkVGRVJFTkNFKSkgeworCQkJcmVjZW50RXN0aW1hdGlvbk1ldGhvZCA9IHByZWZzLmdldFN0cmluZyhFU1RJTUFUT1JfUFJFRkVSRU5DRSk7CisJCX0gIGVsc2UgeworCQkJcmVjZW50RXN0aW1hdGlvbk1ldGhvZCA9IG51bGw7CisJCQlzZXRQcmVmZXJlbmNlcygpOworCQl9CisJfSAvLyBjb25zdHJ1Y3RvcgorCisJLyoqCisJICogIHNldCB0aGUgcHJlZmVyZW5jZXMKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRQcmVmZXJlbmNlcygpIHsKKwkJcHJlZnMuc2V0VmFsdWUoREVGQVVMVF9QUkVGRVJFTkNFLCByZWNlbnRGb2xkZXIpOworCQlpZihyZWNlbnRFc3RpbWF0aW9uTWV0aG9kICE9IG51bGwpIHByZWZzLnNldFZhbHVlKEVTVElNQVRPUl9QUkVGRVJFTkNFLCByZWNlbnRFc3RpbWF0aW9uTWV0aG9kKTsKKwkJcGx1Z2luLnNhdmVQbHVnaW5QcmVmZXJlbmNlcygpOworCX0KKwkKKwkKKworCQorCisJLyoqCisJICogIHNldCB0aGUgcHJlZmVyZW5jZXMgYmFzZWQgb24gdXNlciBhY3Rpb24KKwkgKiBAcGFyYW0gY29uc3VtZXIgc3BlY2lmaWMgY2xhc3MgdGhhdCBzZXRzIG9yIGdldHMgdGhpcyBmb2xkZXIgcHJlZmVyZW5jZQorCSAqIEBwYXJhbSByZWNlbnQgCisJICovCisJcHVibGljIHZvaWQgc2V0UmVjZW50Rm9sZGVyKFN0cmluZyBjb25zdW1lciwgU3RyaW5nIHJlY2VudCkgeworCQlyZWNlbnRGb2xkZXI9cmVjZW50OworCQlwcmVmcy5zZXRWYWx1ZShjb25zdW1lcisiXyIrREVGQVVMVF9QUkVGRVJFTkNFLCByZWNlbnRGb2xkZXIpOworCQlwbHVnaW4uc2F2ZVBsdWdpblByZWZlcmVuY2VzKCk7CisJfQorCisJLyoqCisJICogIHNldCB0aGUgcHJlZmVyZW5jZXMgYmFzZWQgb24gdXNlciBhY3Rpb24KKwkgKiBAcGFyYW0gbWV0aG9kIAorCSAqLworCXB1YmxpYyB2b2lkIHNldEVzdGltYXRvck1ldGhvZChTdHJpbmcgbWV0aG9kKSB7CisJCXJlY2VudEVzdGltYXRpb25NZXRob2Q9bWV0aG9kOworCQlwcmVmcy5zZXRWYWx1ZShFU1RJTUFUT1JfUFJFRkVSRU5DRSwgcmVjZW50RXN0aW1hdGlvbk1ldGhvZCk7CisJCXBsdWdpbi5zYXZlUGx1Z2luUHJlZmVyZW5jZXMoKTsKKwl9CisJCisJCisJCisJLyoqCisJICogCisJICogQHBhcmFtIGNvbnN1bWVyIAorCSAqIEByZXR1cm4gcmVjZW50bHkgdXNlZCBmb2xkZXIKKwkgKi8KKwlwdWJsaWMgU3RyaW5nIGdldFJlY2VudEZvbGRlcihTdHJpbmcgY29uc3VtZXIpIHsKKwkJcmVjZW50Rm9sZGVyID0gcHJlZnMuZ2V0U3RyaW5nKGNvbnN1bWVyKyJfIitERUZBVUxUX1BSRUZFUkVOQ0UpOworCQlpZigocmVjZW50Rm9sZGVyPT1udWxsKXx8KHJlY2VudEZvbGRlci5sZW5ndGgoKT09MCkpIHsKKwkJCXJlY2VudEZvbGRlciA9IERFRkFVTFRfUFJFRl9WQUxVRTsKKwkJCXNldFJlY2VudEZvbGRlcihjb25zdW1lciwgcmVjZW50Rm9sZGVyKTsKKwkJCX0KKwkJcmV0dXJuIHJlY2VudEZvbGRlcjsKKwl9CisJCisJCisJCisJCisJLyoqCisJICogCisJICogQHJldHVybiByZWNlbnRseSB1c2VkIGVzdGltYXRpb24gbWV0aG9kCisJICovCisJcHVibGljIFN0cmluZyBnZXRSZWNlbnRFc3RpbWF0b3JNZXRob2QoKSB7CisJCXJldHVybiByZWNlbnRFc3RpbWF0aW9uTWV0aG9kOworCX0KK30vLyBjbGFzcwpkaWZmIC0tZ2l0IGEvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS51dGlsLmFuYWx5c2lzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3V0aWwvYW5hbHlzaXMvTm9uTGluZWFyU0VJUlBhcmFtZXRlckVzdGltYXRvci5qYXZhIGIvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS51dGlsLmFuYWx5c2lzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3V0aWwvYW5hbHlzaXMvTm9uTGluZWFyU0VJUlBhcmFtZXRlckVzdGltYXRvci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY3MDIwZWMKLS0tIC9kZXYvbnVsbAorKysgYi9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLnV0aWwuYW5hbHlzaXMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdXRpbC9hbmFseXNpcy9Ob25MaW5lYXJTRUlSUGFyYW1ldGVyRXN0aW1hdG9yLmphdmEKQEAgLTAsMCArMSwyNDkgQEAKKworcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnV0aWwuYW5hbHlzaXM7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDcsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuaW1wbC5SZWZlcmVuY2VTY2VuYXJpb0RhdGFNYXBJbXBsLlJlZmVyZW5jZVNjZW5hcmlvRGF0YUluc3RhbmNlOworCisvKioKKyAqIEVzdGltYXRlIHBhcmFtZXRlcnMgZm9yIGFuIFNJLCBTSVIgb3IgU0VJUiBtb2RlbAorICogCisgKgorICovCitwdWJsaWMgY2xhc3MgTm9uTGluZWFyU0VJUlBhcmFtZXRlckVzdGltYXRvciBleHRlbmRzIFNFSVJwYXJhbWV0ZXJFc3RpbWF0b3IgeworCisJLy8gVW5pcXVlIHN0YXRlcyBmb3IgdGhpcyBlc3RpbWF0b3IKKwlkb3VibGUgW10gZTsKKwlkb3VibGUgW10gcjsKKwkKKwkvKioKKwkgKiBAcGFyYW0gZGF0YQorCSAqLworCXB1YmxpYyBOb25MaW5lYXJTRUlSUGFyYW1ldGVyRXN0aW1hdG9yKFJlZmVyZW5jZVNjZW5hcmlvRGF0YUluc3RhbmNlIGRhdGEpIHsKKwkJc3VwZXIoZGF0YSk7CisJCUxpc3Q8RG91YmxlPiBzVG9GaXQgPSBuZXcgQXJyYXlMaXN0PERvdWJsZT4oKTsKKwkJTGlzdDxEb3VibGU+IGVUb0ZpdCA9IG5ldyBBcnJheUxpc3Q8RG91YmxlPigpOworCQlMaXN0PERvdWJsZT4gaVRvRml0ID0gbmV3IEFycmF5TGlzdDxEb3VibGU+KCk7CisJCUxpc3Q8RG91YmxlPiByVG9GaXQgPSBuZXcgQXJyYXlMaXN0PERvdWJsZT4oKTsKKwkJCisJCQorCQlMaXN0PERvdWJsZT4gc0xpc3QgPSBkYXRhLmdldFN0b3RhbHMoKTsKKwkJTGlzdDxEb3VibGU+IGVMaXN0ID0gZGF0YS5nZXRFdG90YWxzKCk7CisJCUxpc3Q8RG91YmxlPiBpTGlzdCA9IGRhdGEuZ2V0SXRvdGFscygpOworCQlMaXN0PERvdWJsZT4gckxpc3QgPSBkYXRhLmdldFJ0b3RhbHMoKTsKKwkJCisJCS8vIFRvRG86IFdoeSBhcmUgd2Ugc2tpcHBpbmcgdGhlIGZpcnN0IHZhbHVlPworCQlmb3IgKGludCBpY291bnQgPSAxOyBpY291bnQgPCBpTGlzdC5zaXplKCk7IGljb3VudCArKykgeworCQkJCWlUb0ZpdC5hZGQoaUxpc3QuZ2V0KGljb3VudCkpOworCQkJCWVUb0ZpdC5hZGQoZUxpc3QuZ2V0KGljb3VudCkpOworCQkJCXNUb0ZpdC5hZGQoc0xpc3QuZ2V0KGljb3VudCkpOworCQkJCXJUb0ZpdC5hZGQockxpc3QuZ2V0KGljb3VudCkpOworCQl9CisJCQorCQl0aGlzLm51bURhdGFQb2ludHMgPSBpVG9GaXQuc2l6ZSgpOworCQlpZihudW1EYXRhUG9pbnRzIDwgTUlOU0laRSkgcmV0dXJuOworCQlkYXRhVmFsaWQgPSB0cnVlOworCQl0aGlzLnMgPSBuZXcgZG91YmxlW3RoaXMubnVtRGF0YVBvaW50c107CisJCXRoaXMuZSA9IG5ldyBkb3VibGVbdGhpcy5udW1EYXRhUG9pbnRzXTsKKwkJdGhpcy5pID0gbmV3IGRvdWJsZVt0aGlzLm51bURhdGFQb2ludHNdOworCQl0aGlzLnIgPSBuZXcgZG91YmxlW3RoaXMubnVtRGF0YVBvaW50c107CisJCXRoaXMudCA9IG5ldyBkb3VibGVbdGhpcy5udW1EYXRhUG9pbnRzXTsKKwkJaW50IG5wdHMgPSB0aGlzLm51bURhdGFQb2ludHM7CisJCWRvdWJsZVtdW10gZGF0YVMgPSBuZXcgZG91YmxlWzJdW25wdHMgLSAxXTsKKwkJZG91YmxlW11bXSBkYXRhRSA9IG5ldyBkb3VibGVbMl1bbnB0cyAtIDFdOworCQlkb3VibGVbXVtdIGRhdGFJID0gbmV3IGRvdWJsZVsyXVtucHRzIC0gMV07CisJCWRvdWJsZVtdW10gZGF0YVIgPSBuZXcgZG91YmxlWzJdW25wdHMgLSAxXTsKKwkJCisJCWZvciAoaW50IGljb3VudCA9IDA7IGljb3VudCA8IHRoaXMubnVtRGF0YVBvaW50czsgaWNvdW50ICsrKSB7CisJCQlzW2ljb3VudF0gPSBzVG9GaXQuZ2V0KGljb3VudCkuZG91YmxlVmFsdWUoKTsKKwkJCWVbaWNvdW50XSA9IGVUb0ZpdC5nZXQoaWNvdW50KS5kb3VibGVWYWx1ZSgpOworCQkJaVtpY291bnRdID0gaVRvRml0LmdldChpY291bnQpLmRvdWJsZVZhbHVlKCk7CisJCQlyW2ljb3VudF0gPSByVG9GaXQuZ2V0KGljb3VudCkuZG91YmxlVmFsdWUoKTsKKwkJCXRbaWNvdW50XSA9IGljb3VudDsKKworCQkJLy8gaW5pdCB0aGUgcmF3IGRhdGEgZm9yIHBsb3R0aW5nCisJCQkvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCQkJLy8gVE9ETyBuZWVkIHRvIGZpbGwgdGhlIHNlbGVjdGVkIGFycmF5IGluIHRoZSBjb2RlIGZvciB0aGlzIGNsYXNzICoqKioqKioqKioqKioqKioqKioqKioqKioKKwkJCS8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisJCQlpZihpY291bnQgPCB0aGlzLm51bURhdGFQb2ludHMtMSkgeworCQkJCWRhdGFTWzBdW2ljb3VudF0gPSAoc1tpY291bnRdK3NbaWNvdW50KzFdKS8yLjA7CisJCQkJZGF0YUVbMF1baWNvdW50XSA9IChlW2ljb3VudF0rZVtpY291bnQrMV0pLzIuMDsKKwkJCQlkYXRhSVswXVtpY291bnRdID0gKGlbaWNvdW50XStpW2ljb3VudCsxXSkvMi4wOworCQkJCWRhdGFSWzBdW2ljb3VudF0gPSAocltpY291bnRdK3JbaWNvdW50KzFdKS8yLjA7CisJCQkJZGF0YVNbMV1baWNvdW50XSA9IChzW2ljb3VudF0rc1tpY291bnQrMV0pLzIuMDsKKwkJCQlkYXRhRVsxXVtpY291bnRdID0gKGVbaWNvdW50XStlW2ljb3VudCsxXSkvMi4wOworCQkJCWRhdGFJWzFdW2ljb3VudF0gPSAoaVtpY291bnRdK2lbaWNvdW50KzFdKS8yLjA7CisJCQkJZGF0YVJbMV1baWNvdW50XSA9IChyW2ljb3VudF0rcltpY291bnQrMV0pLzIuMDsKKwkJCQkvLyBpbml0IHRoZSBzZWxlY3RlZCBkYXRhIGFycmF5CisJCQkJZm9yIChpbnQgY2hhcnRJbmRleCA9IDA7IGNoYXJ0SW5kZXggPCA0OyBjaGFydEluZGV4ICsrICkgeworCQkJCQkvLyBUSElTIElTIFdST05HCisJCQkJCWRhdGFTWzFdW2ljb3VudF0gPSAwLjA7CisJCQkJCWRhdGFFWzFdW2ljb3VudF0gPSAwLjA7CisJCQkJCWRhdGFJWzFdW2ljb3VudF0gPSAwLjA7CisJCQkJCWRhdGFSWzFdW2ljb3VudF0gPSAwLjA7CisJCQkJfS8vIGluaXQgc2VsZWN0ZWQKKwkJCX0vLyBpbml0IHRoZSBkYXRlCisKKwkJfS8vIGZvciBpY291bnQKKwl9Ly8gY29uc3RydWN0b3IKKworCS8qKgorCSAqIEVzdGltYXRlIHRoZSBwYXJhbWV0ZXJzCisJICogQHBhcmFtIGxvY2FsRGVuc2l0eSAKKwkgKiBAcGFyYW0gbG9jYWxQb3B1bGF0aW9uIAorCSAqIEBwYXJhbSBsb2NhdGlvbklEIAorCSAqIEByZXR1cm4gdGhlIE1vZGVsUGFyYW1ldGVycyBlc3RpbWF0ZQorCSAqLworCXB1YmxpYyBNb2RlbFBhcmFtZXRlcnMgZXN0aW1hdGUoZG91YmxlIGxvY2FsRGVuc2l0eSwgZG91YmxlIGxvY2FsUG9wdWxhdGlvbiwgU3RyaW5nIGxvY2F0aW9uSUQpIHsKKwkJCisJCU1vZGVsUGFyYW1ldGVycyBmaXR0ZWRQYXJtcyA9IG51bGw7CisJCWZpbmFsIGRvdWJsZSBDUklUSUNBTF9TVVNDRVBUSUJMRSA9IDAuMzsKKwkJCisJCWludCBucHRzID0gcy5sZW5ndGg7CisJCWFzc2VydChucHRzID09IGUubGVuZ3RoKTsKKwkJYXNzZXJ0KG5wdHM9PWkubGVuZ3RoKTsKKwkJYXNzZXJ0KG5wdHM9PXIubGVuZ3RoKTsKKwkJCisJCS8qCisJCSAqIEJlZ2luIFNFSVIgZml0dGluZyB0byBmaW5kIHBhcmFtZXRlcnMgaW5jbHVkaW5nIGJldGEgZnVuY3Rpb24KKwkJICovCisJCQorCQkvL2ZpcnN0IGZpbmQgYWxwaGEgYW5kIGVwc2lsb24KKwkJZG91YmxlW10gZFMgPSBuZXcgZG91YmxlW25wdHNdOworCQlkb3VibGVbXSBsbkUgPSBuZXcgZG91YmxlW25wdHNdOworCQlkb3VibGVbXSBkbG5FID0gbmV3IGRvdWJsZVtucHRzXTsKKwkJCisJCWZvcihpbnQgaiA9IDA7IGogPCBucHRzOyBqKyspeworCQkJbG5FW2pdID0gTWF0aC5sb2coZVtqXSk7CisJCX0KKwkJCisJCQorCQkvL2Rlcml2YXRpdmVzIG9mIGVuZHBvaW50cworCQlkU1swXSA9IHNbMV0gLSBzWzBdOworCQlkU1tucHRzLTFdID0gc1tucHRzLTFdIC0gc1tucHRzLTJdOworCQlkbG5FWzBdID0gbG5FWzFdIC0gbG5FWzBdOyAKKwkJZGxuRVtucHRzLTFdID0gbG5FW25wdHMtMV0gLSBsbkVbbnB0cy0yXTsKKworCQkvL2Rlcml2YXRpdmVzIG9mIGFsbCBvdGhlciBwb2ludHMKKwkJZm9yKGludCBqID0gMTtqIDwgbnB0cy0xO2orKykKKwkJeworCQkJZFNbal0gPSAoc1tqKzFdIC0gc1tqLTFdKS8yOworCQkJZGxuRVtqXSA9IChsbkVbaisxXSAtIGxuRVtqLTFdKS8yOworCQl9CisJCQorCQorCQkvL3ggYW5kIHkgZm9yIGxlYXN0IHNxdWFyZXMgZml0dGluZworCQlkb3VibGVbXSB4ID0gbmV3IGRvdWJsZVtucHRzXTsKKwkJZG91YmxlW10geSA9IG5ldyBkb3VibGVbbnB0c107CisJCQorCQlmb3IoaW50IGogPSAwOyBqIDwgbnB0czsgaisrKXsKKwkJCXhbal0gPSByW2pdL2Vbal07CisJCQl5W2pdID0gKDEvZVtqXSkqZFNbal0rZGxuRVtqXTsKKwkJfQorCQkKKwkJLy9zdW1zIGZvciBsZWFzdCBzcXVhcmVzIGZpdHRpbmcKKwkJZG91YmxlIHN1bXggID0gMDsKKwkJZG91YmxlIHN1bXkgPSAwOworCQlkb3VibGUgc3VteHkgPSAwOworCQlkb3VibGUgc3VteDIgPSAwOworCQlkb3VibGUgc3VteTIgPSAwOworCQlkb3VibGUgc3VtID0gMDsKKwkJCisJCWZvcihpbnQgaiA9IDA7IGogPCBucHRzOyBqKyspeworCQkJc3VteCArPSB4W2pdOworCQkJc3VteSArPSB5W2pdOworCQkJc3VteHkgKz0geFtqXSAqIHlbal07CisJCQlzdW14MiArPSB4W2pdICogeFtqXTsKKwkJCXN1bXkyICs9IHlbal0gKiB5W2pdOworCQkJc3VtICs9IDE7CisJCX0KKwkJCisJCS8vZGVsdGEgZm9yIENyYW1lcidzIFJ1bGUKKwkJZG91YmxlIGRlbHRhID0gLShzdW0qc3VteDIgLSBzdW14KnN1bXgpOworCQlkb3VibGUgYWxwaGEgPSAtKHN1bSpzdW14eSAtIHN1bXgqc3VteSkvZGVsdGE7CisJCWRvdWJsZSBlcHNpbG9uID0gKHN1bXgyKnN1bXkgLSBzdW14KnN1bXh5KS9kZWx0YTsKKwkJCisJCS8vdmFyaWFuY2UgYW5kIHN0ZAorCQlkb3VibGUgdmFyaWFuY2UgPSAoc3VteTIgKyBzdW0qZXBzaWxvbiplcHNpbG9uICsgYWxwaGEqYWxwaGEqc3VteDIKKwkJCQktMiooYWxwaGEqc3VteHkgLSBlcHNpbG9uKnN1bXkgKyBlcHNpbG9uKmFscGhhKnN1bXgpKS8obnB0cy0yKTsKKwkJCisJCWRvdWJsZSB2YXJBbHBoYSA9IC0odmFyaWFuY2UvZGVsdGEpKnN1bTsKKwkJZG91YmxlIHZhckVwc2lsb24gPSAtKHZhcmlhbmNlL2RlbHRhKSpzdW14MjsKKwkJCisJCWRvdWJsZSBzdGRBbHBoYSA9IE1hdGguc3FydCh2YXJBbHBoYSk7CisJCWRvdWJsZSBzdGRFcHNpbG9uID0gTWF0aC5zcXJ0KHZhckVwc2lsb24pOworCQkKKwkJLy9ub3cgZmluZCBiZXRhIGFuZCBsYW1iZGEKKwkJCisJCS8veCBhbmQgeSBmb3IgbGVhc3Qgc3F1YXJlcyBmaXR0aW5nCisJCQorCQkvLyBUT0RPIFF1ZXN0aW9uIGZvciBCYXJiYXJhIEpvbmUKKwkJLy8gUFJPQkxFTTogd2hhdCBkb2VzIGl0IG1lYW4gd2hlbiAKKwkJLy8gKGFscGhhKnIgLSBkUykgaXMgbmVnYXRpdmUgID8/CisJCS8vICB0aGlzIGdpdmVzIE5hTiBmb3IgbG9nCisJCWZvcihpbnQgaiA9IDA7IGogPCBucHRzOyBqKyspeworCQkJeFtqXSA9IE1hdGgubG9nKCgoc1tqXStlW2pdK2lbal0pLUNSSVRJQ0FMX1NVU0NFUFRJQkxFKS8oMS1DUklUSUNBTF9TVVNDRVBUSUJMRSkpOworCQkJeVtqXSA9IE1hdGgubG9nKChhbHBoYSpyW2pdIC0gZFNbal0pLyhzW2pdKmlbal0pKTsKKwkJfQorCQkKKwkJLy9zdW1zIGZvciBsZWFzdCBzcXVhcmVzIGZpdHRpbmcsIHNldCBiYWNrIHRvIHplcm8KKwkgICAgc3VteCAgPSAwOworCSAgICBzdW15ID0gMDsKKwkJc3VteHkgPSAwOworCQlzdW14MiA9IDA7CisJCXN1bXkyID0gMDsKKwkJc3VtID0gMDsKKwkJCisJCWZvcihpbnQgaiA9IDA7IGogPCBucHRzOyBqKyspeworCQkJc3VteCArPSB4W2pdOworCQkJc3VteSArPSB5W2pdOworCQkJc3VteHkgKz0geFtqXSAqIHlbal07CisJCQlzdW14MiArPSB4W2pdICogeFtqXTsKKwkJCXN1bXkyICs9IHlbal0gKiB5W2pdOworCQkJc3VtICs9IDE7CisJCX0KKwkJCisJCWRlbHRhID0gc3VtKnN1bXgyIC0gc3VteCpzdW14OworCQlkb3VibGUgbG5CZXRhID0gKHN1bXkqc3VteDIgLSBzdW14KnN1bXh5KS9kZWx0YTsKKwkJZG91YmxlIGxhbWJkYSA9IChzdW0qc3VteHkgLSBzdW14KnN1bXkpL2RlbHRhOworCQkKKwkJZG91YmxlIGJldGEgPSBNYXRoLmV4cChsbkJldGEpOworCQkKKwkJLy92YXJpYW5jZSBhbmQgc3RkCisJCXZhcmlhbmNlID0gKHN1bXkyICsgbG5CZXRhKmxuQmV0YSpzdW0gKyBsYW1iZGEqbGFtYmRhKnN1bXgyCisJCQkJLTIqKGxuQmV0YSpzdW15ICsgbGFtYmRhKnN1bXh5ICsgbG5CZXRhKmxhbWJkYSpzdW14KSkvKG5wdHMtMik7CisJCQorCQlkb3VibGUgdmFyTG5CZXRhID0gKHZhcmlhbmNlL2RlbHRhKSpzdW14MjsKKwkJZG91YmxlIHZhckxhbWJkYSA9ICh2YXJpYW5jZS9kZWx0YSkqc3VtOworCQkKKwkJZG91YmxlIHN0ZExuQmV0YSA9IE1hdGguc3FydCh2YXJMbkJldGEpOworCQlkb3VibGUgc3RkTGFtYmRhID0gTWF0aC5zcXJ0KHZhckxhbWJkYSk7CisJCQorCQkvL1RPRE8gSG93IHRvIGZpbmQgc3RkIGFuZCB2YXJpYW5jZSBvZiBCZXRhIHJhdGhlciB0aGFuIGxuQmV0YQorCQkKKwkJZml0dGVkUGFybXMgPSBuZXcgTW9kZWxQYXJhbWV0ZXJzKCk7CisJCWRvdWJsZSBuZXdiZXRhID0gYmV0YTsKKwkJaWYoIXVzZUZyZXFEZXBlbmRhbnRCZXRhKSBuZXdiZXRhICo9ICgoTW9kZWxQYXJhbWV0ZXJzLlJFRkVSRU5DRV9QT1BVTEFUSU9OX0RFTlNJVFkpL2xvY2FsRGVuc2l0eSk7CisJCWZpdHRlZFBhcm1zLmFkZFBhcmFtZXRlcihQYXJhbWV0ZXIuQkVUQSwgbmV3IFBhcmFtZXRlcihQYXJhbWV0ZXIuQkVUQSwgbmV3YmV0YSkpOworCQlmaXR0ZWRQYXJtcy5hZGRQYXJhbWV0ZXIoUGFyYW1ldGVyLkxOQkVUQSwgbmV3IFBhcmFtZXRlcihQYXJhbWV0ZXIuTE5CRVRBLCBsbkJldGEsIHN0ZExuQmV0YSwgdmFyTG5CZXRhKSk7CisJCWZpdHRlZFBhcm1zLmFkZFBhcmFtZXRlcihQYXJhbWV0ZXIuQUxQSEEsIG5ldyBQYXJhbWV0ZXIoUGFyYW1ldGVyLkFMUEhBLCBhbHBoYSwgc3RkQWxwaGEsIHZhckFscGhhKSk7CisJCWZpdHRlZFBhcm1zLmFkZFBhcmFtZXRlcihQYXJhbWV0ZXIuRVBTSUxPTiwgbmV3IFBhcmFtZXRlcihQYXJhbWV0ZXIuRVBTSUxPTiwgZXBzaWxvbiwgc3RkRXBzaWxvbiwgdmFyRXBzaWxvbikpOworCQlmaXR0ZWRQYXJtcy5hZGRQYXJhbWV0ZXIoUGFyYW1ldGVyLkxBTUJEQSwgbmV3IFBhcmFtZXRlcihQYXJhbWV0ZXIuTEFNQkRBLCBsYW1iZGEsIHN0ZExhbWJkYSwgdmFyTGFtYmRhKSk7CisJICAgICAgIAorCQlyZXR1cm4gZml0dGVkUGFybXM7CisJfSAvLyBlc3RpbWF0ZQorCQorCQorfQpkaWZmIC0tZ2l0IGEvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS51dGlsLmFuYWx5c2lzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3V0aWwvYW5hbHlzaXMvUGFyYW1ldGVyLmphdmEgYi9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLnV0aWwuYW5hbHlzaXMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdXRpbC9hbmFseXNpcy9QYXJhbWV0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYTY1OWJlCi0tLSAvZGV2L251bGwKKysrIGIvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS51dGlsLmFuYWx5c2lzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3V0aWwvYW5hbHlzaXMvUGFyYW1ldGVyLmphdmEKQEAgLTAsMCArMSwxNzcgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS51dGlsLmFuYWx5c2lzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA3LCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqCisgKiBBIGZpdHRlZCBwYXJhbWV0ZXIKKyAqLworcHVibGljIGNsYXNzIFBhcmFtZXRlciB7CisJCisJLyoKKwkgKiBUaGVzZSBhcmUgY29tbW9uIHBhcmFtZXRlcnMgdXNlZCBmb3IgZXN0aW1hdGlvbi4KKwkgKiBPYnNlcnZlIHRoYXQgbm90IGFsbCBwYXJhbWV0ZXJzIGFyZSB1c2VkIGluIGEgZ2l2ZW4KKwkgKiBzY2VuYXJpbworCSAqLworCQorCS8qKgorCSAqIGJldGEgaXMgdGhlIGRpc2Vhc2UgdHJhbnNtaXNzaW9uIHJhdGUKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBSRUpFQ1QgPSAicmVqZWN0ZWQiOworCQorCS8qKgorCSAqIGJldGEgaXMgdGhlIGRpc2Vhc2UgdHJhbnNtaXNzaW9uIHJhdGUKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBCRVRBID0gImJldGEiOworCQorCS8qKgorCSAqIGJldGEyIGlzIHRoZSBzZWNvbmQgZml0dGVkIGRpc2Vhc2UgdHJhbnNtaXNzaW9uIHJhdGUgaW4gbWV0aG9kIHR3bworCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEJFVEEyID0gImJldGEyIjsKKwkKKwkvKioKKwkgKiBsbkJldGEgZm9yIG5vbmxpbmVhciBmaXQKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBMTkJFVEEgPSAibG5iZXRhIjsKKwkKKwkvKioKKwkgKiBhbHBoYSBpcyB0aGUgaW1tdW5pdHkgbG9zcyByYXRlCisJICovCisJCisJcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgQUxQSEEgPSAiYWxwaGEiOworCQorCS8qKgorCSAqIGFscGhhMiBpcyB0aGUgc2Vjb25kIGZpdHRlZCBpbW11bml0eSBsb3NzIHJhdGUgaW4gbWV0aG9kIHR3bworCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEFMUEhBMiA9ICJhbHBoYTIiOworCisJLyoqCisJICogZXBzaWxvbiBpcyB0aGUgaW5jdWJhdGlvbiByYXRlCisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgRVBTSUxPTiA9ICJlcHNpbG9uIjsKKworCS8qKgorCSAqIGVwc2lsb24yIGlzIHRoZSBzZWNvbmQgZml0dGVkIGluY3ViYXRpb24gcmF0ZSBmb3VuZCBpbiBtZXRob2QgdHdvCisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgRVBTSUxPTjIgPSAiZXBzaWxvbjIiOworCQkKKwkvKioKKwkgKmdhbW1hIGlzIHRoZSBpbmZlY3Rpb3VzIHJlY292ZXJ5IHJhdGUgCisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgR0FNTUEgPSAiZ2FtbWEiOworCQorCS8qKgorCSAqIGdhbW1hMiBpcyB0aGUgc2Vjb25kIGZpdHRlZCBpbmZlY3Rpb3VzIHJlY292ZXJ5IHJhdGUgaW4gbWV0aG9kIHR3bworCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEdBTU1BMiA9ICJnYW1tYTIiOworCQorCS8qKgorCSAqIGxhbWJkYSBpcyB0aGUgaW5mZWN0aW91cyByZWNvdmVyeSByYXRlIAorCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIExBTUJEQSA9ICJsYW1iZGEiOworCQorCS8qKgorCSAqIFJkUgorCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFJkUiA9ICJSZFIiOworCQorCS8qKgorCSAqIFJkUworCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFJkUyA9ICJSZFMiOworCQorCS8qKgorCSAqIFJkSQorCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFJkSSA9ICJSZEkiOworCQorCS8qKgorCSAqIEJFVEFWQVIKKwkgKi8KKwkKKwlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBCRVRBVkFSID0gIkJFVEFWQVIiOworCQorCS8qKgorCSAqIEdBTU1BVkFSCisJICovCisJCisJcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgR0FNTUFWQVIgPSAiR0FNTUFWQVIiOworCQorCQorCS8qKiBFTkQgUEFSQU1FVEVSIERFQ0xBUkFUSU9OICovCisJCisJLyoqCisJICogUGFyYW1ldGVyIG5hbWUgKGZvciBtYXAga2V5cyBldGMuKQorCSAqLworCXB1YmxpYyBTdHJpbmcgbmFtZTsKKwkvKioKKwkgKiBUaGUgcGFyYW1ldGVyIHZhbHVlCisJICovCisJcHVibGljIGRvdWJsZSB2YWx1ZSA9IDAuMDsKKwkvKioKKwkgKiBUaGUgcGFyYW1ldGVyIHN0YW5kYXJkIGRldmlhdGlvbgorCSAqLworCXB1YmxpYyBkb3VibGUgc3RkZGV2ID0gMS4wOworCS8qKgorCSAqIFRoZSBwYXJhbWV0ZXIgdmFyaWFuY2UKKwkgKi8KKwlwdWJsaWMgZG91YmxlIHZhcmlhbmNlPSAxLjA7CisJCisJLyoqCisJICogUHJpdmF0ZSBudWxsIGNvbnN0cnVjdG9yIChmb3JjZSBhIG5hbWUpCisJICogCisJICovCisJCisJcHJpdmF0ZSBQYXJhbWV0ZXIoKSB7CisJCS8vIE5vdGhpbmcgaGVyZQorCX0KKwkKKwkvKioKKwkgKiBDb25zdHJ1Y3RvciAxCisJICogCisJICogQHBhcmFtIG5hbWUgU3RyaW5nCisJICovCisJCisJcHVibGljIFBhcmFtZXRlcihTdHJpbmcgbmFtZSkgeworCQl0aGlzKCk7CisJCXRoaXMubmFtZSA9IG5hbWU7CisJfQorCQorCS8qKgorCSAqIENvbnN0cnVjdG9yIDIKKwkgKiAKKwkgKiBAcGFyYW0gbmFtZSBTdHJpbmcKKwkgKiBAcGFyYW0gdmFsdWUgU2V0IHZhbHVlCisJICogQHBhcmFtIGRldiBTZXQgc3RhbmRhcmQgZGV2aWF0aW9uCisJICogQHBhcmFtIHZhciBTZXQgdmFyaWF0aW9uCisJICovCisJCisJcHVibGljIFBhcmFtZXRlcihTdHJpbmcgbmFtZSwgZG91YmxlIHZhbHVlLCBkb3VibGUgZGV2LCBkb3VibGUgdmFyKSB7CisJCXRoaXMoKTsKKwkJdGhpcy5uYW1lID0gbmFtZTsKKwkJdGhpcy5zdGRkZXYgPSBkZXY7CisJCXRoaXMudmFsdWUgPSB2YWx1ZTsKKwkJdGhpcy52YXJpYW5jZSA9IHZhcjsKKwl9CisJCisJLyoqCisJICogQ29uc3RydWN0b3IgMyBTZXQgb25seSB2YWx1ZQorCSAqIAorCSAqIEBwYXJhbSBuYW1lIFN0cmluZworCSAqIEBwYXJhbSB2YWx1ZSBTZXQgdmFsdWUKKwkgKi8KKwkKKwlwdWJsaWMgUGFyYW1ldGVyKFN0cmluZyBuYW1lLCBkb3VibGUgdmFsdWUpIHsKKwkJdGhpcygpOworCQl0aGlzLm5hbWUgPSBuYW1lOworCQl0aGlzLnZhbHVlID0gdmFsdWU7CisJfQorfQpkaWZmIC0tZ2l0IGEvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS51dGlsLmFuYWx5c2lzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3V0aWwvYW5hbHlzaXMvUGFyYW1ldGVyRXN0aW1hdG9yLmphdmEgYi9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLnV0aWwuYW5hbHlzaXMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdXRpbC9hbmFseXNpcy9QYXJhbWV0ZXJFc3RpbWF0b3IuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NzNkMWZjCi0tLSAvZGV2L251bGwKKysrIGIvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS51dGlsLmFuYWx5c2lzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3V0aWwvYW5hbHlzaXMvUGFyYW1ldGVyRXN0aW1hdG9yLmphdmEKQEAgLTAsMCArMSwyNzMgQEAKKworcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnV0aWwuYW5hbHlzaXM7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDcsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OworaW1wb3J0IGphdmEudXRpbC5BcnJheXM7CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CitpbXBvcnQgamF2YS51dGlsLk1hcDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuaW1wbC5SZWZlcmVuY2VTY2VuYXJpb0RhdGFNYXBJbXBsLlJlZmVyZW5jZVNjZW5hcmlvRGF0YUluc3RhbmNlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udXRpbC5hbmFseXNpcy52aWV3cy5Fc3RpbWF0b3JDb250cm9sOworCisvKioKKyAqIEVzdGltYXRlIHBhcmFtZXRlcnMgZm9yIGFuIFNJLCBTSVIgb3IgU0VJUiBtb2RlbAorICogCisgKi8KKworcHVibGljIGFic3RyYWN0IGNsYXNzIFBhcmFtZXRlckVzdGltYXRvciB7CisJCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBTdHJpbmcga2V5UyA9ICJTIjsKKwlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIFN0cmluZyBrZXlFID0gIkUiOworCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgU3RyaW5nIGtleUkgPSAiSSI7CisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBTdHJpbmcga2V5UiA9ICJSIjsKKwlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIFN0cmluZyBrZXlTZWxlY3RlZFMgPSAiUyoiOworCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgU3RyaW5nIGtleVNlbGVjdGVkRSA9ICJFKiI7CisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBTdHJpbmcga2V5U2VsZWN0ZWRJID0gIkkqIjsKKwlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIFN0cmluZyBrZXlTZWxlY3RlZFIgPSAiUioiOworCQorCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgU3RyaW5nIGtleVhZMSA9ICJYMXZzWTEiOworCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgU3RyaW5nIGtleVhZMiA9ICJYMnZzWTIiOworCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgU3RyaW5nIGtleVhZMyA9ICJYM3ZzWTMiOworCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgU3RyaW5nIGtleVhZNCA9ICJYNHZzWTQiOworCQorCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgU3RyaW5nIGtleUZpdDEgPSAiRml0IFhZMSI7CisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBTdHJpbmcga2V5Rml0MiA9ICJGaXQgWFkyIjsKKwlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIFN0cmluZyBrZXlGaXQzID0gIkZpdCBYWTMiOworCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgU3RyaW5nIGtleUZpdDQgPSAiRml0IFhZNCI7CisJCisJCisJcHJvdGVjdGVkIHN0YXRpYyBkb3VibGUgbWluU3RocmVzaG9sZCA9IDAuMDE7CisJcHJvdGVjdGVkIHN0YXRpYyBkb3VibGUgbWluRXRocmVzaG9sZCA9IDAuMDE7CisJcHJvdGVjdGVkIHN0YXRpYyBkb3VibGUgbWluSXRocmVzaG9sZCA9IDAuMDE7CisJcHJvdGVjdGVkIHN0YXRpYyBkb3VibGUgbWluUnRocmVzaG9sZCA9IDAuMDE7CisJCisJcHJvdGVjdGVkIHN0YXRpYyBkb3VibGUgbWF4U3RocmVzaG9sZCA9IDAuOTk7CisJcHJvdGVjdGVkIHN0YXRpYyBkb3VibGUgbWF4RXRocmVzaG9sZCA9IDAuOTk7CisJcHJvdGVjdGVkIHN0YXRpYyBkb3VibGUgbWF4SXRocmVzaG9sZCA9IDAuOTk7CisJcHJvdGVjdGVkIHN0YXRpYyBkb3VibGUgbWF4UnRocmVzaG9sZCA9IDAuOTk7CisJCisJcHJvdGVjdGVkIHN0YXRpYyBib29sZWFuIHVzZUZyZXFEZXBlbmRhbnRCZXRhID0gdHJ1ZTsKKwkKKworCS8qKgorCSAqIHJlamVjdGVkIGRhdGEgd2hlcmUgZml0IGZhaWxlZAorCSAqLworCXByb3RlY3RlZCBkb3VibGUgcmVqZWN0Q291bnQgPSAwLjA7CisJCisJLyoKKwkgKiB0aGUgU0VMRUNURUQgZGF0YSB0byBwbG90CisJICovCisJTGlzdDxkb3VibGVbXVtdPiAgZGF0YVRvUGxvdCA9IG5ldyBBcnJheUxpc3Q8ZG91YmxlW11bXT4oKTsKKwkKKwkKKwlMaXN0PGRvdWJsZVtdW10+IHJlZ3Jlc3Npb25WYWx1ZXMgPSBuZXcgQXJyYXlMaXN0PGRvdWJsZVtdW10+KCk7CisJCisKKwlMaXN0PGRvdWJsZVtdW10+IGZpdHRlZFZhbHVlcyA9IG5ldyBBcnJheUxpc3Q8ZG91YmxlW11bXT4oKTsKKwkKKwkKKwlwcm90ZWN0ZWQgUmVmZXJlbmNlU2NlbmFyaW9EYXRhSW5zdGFuY2UgZGF0YTsKKwkKKwkvKioKKwkgKiBTZXRzIHRoZSBtaW5pbXVtIG51bWJlciBvZiBwb2ludHMgbmVlZGVkIHRvIGRvIGEgcmVhc29uYWJsZSBmaXQKKwkgKiBUT0RPIHNob3VsZCBub3QgYmUgaGFyZCBjb2RlZAorCSAqLworCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgaW50IE1JTlNJWkUgPSA3OworCQorCS8qKgorCSAqIElmIGRlcml2YXRpdmVNZXRob2QgPSBMSU5FQVJfREVSSVZBVElWRSAgdGhlbiBhIGxpbmVhciBhbGdvcml0aG0KKwkgKiBpcyB1c2VkIHRvIGNvbXB1dGUgZGVyaXZhdGl2ZXMKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIGludCBMSU5FQVJfREVSSVZBVElWRSA9IDE7CisJCisJCisJLyoqCisJICogSWYgZGVyaXZhdGl2ZU1ldGhvZCA9IFBPTFlOT01JQUxfREVSSVZBVElWRSAgdGhlbiBhIHBvbHlub21pYWwgYWxnb3JpdGhtCisJICogaXMgdXNlZCB0byBjb21wdXRlIGRlcml2YXRpdmVzCisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgUE9MWU5PTUlBTF9ERVJJVkFUSVZFID0gMjsKKwkKKwkvLyBBbGwgbW9kZWxzIGhhdmUgdGhlc2UgdmVjdG9ycworCWRvdWJsZVtdIHA7CisJZG91YmxlW10gczsKKwlkb3VibGVbXSBpOworCWRvdWJsZVtdIHQ7CisJCQorCS8qKgorCSAqIHNldCB0byB0cnVlIG9ubHkgaWYgdGhlcmUgYXJlIGVub3VnaCBwb2ludHMgdG8gZG8gYSByZWFzb25hYmxlIGZpdAorCSAqLworCXB1YmxpYyBib29sZWFuIGRhdGFWYWxpZCA9IGZhbHNlOworCQorCWludCBudW1EYXRhUG9pbnRzOworCQorCisJLyoqCisJICogY29uc3RydWN0IGEgbmV3IGVzdGltYXRvciBmb3IgdGhlIGlucHV0IGRhdGFbXSBTSVIKKwkgKiBAcGFyYW0gZGF0YQorCSAqLworCXB1YmxpYyBQYXJhbWV0ZXJFc3RpbWF0b3IoUmVmZXJlbmNlU2NlbmFyaW9EYXRhSW5zdGFuY2UgZGF0YSkgeworCQl0aGlzLmRhdGEgPSBkYXRhOworCQkvLyBBbHdheXMgUHJlcGFyZSB0aGUgZGF0YSBmb3IgYW5hbHlzaXMKKwkJdGhpcy5kYXRhLmZpbmRNYXhWYWx1ZXMoKTsKKwl9CisJCisJLyoqCisJICogVGhlIGNvbnRyb2wgbmVlZHMgdGhpcyBpbmZvcm1hdGlvbiBidXQgbXVzdCBnZXQgaXQgdGhyb3VnaCB0aGUgYW5hbHl6ZXIgZnJvbSB0aGUgRXN0aW1hdG9yCisJICogY3JlYXRlZCBieSB0aGUgZmFjdG9yeQorCSAqIHRoZSBudW1iZXIgb2YgZGlmZmVyZW50aWFsIGVxdWF0aW9ucyBpbiB0aGUgc29sdXRpb24KKwkgKiBAcmV0dXJuIG51bWJlciBvZiBlcXVhdGlvbnMgZGV0ZXJtaW5lcyB0aGUgbnVtYmVyIG9mIGdyYXBocworCSAqLworCXB1YmxpYyBhYnN0cmFjdCBpbnQgZ2V0TnVtUHJvcGVydGllcygpOworCQorCS8qKgorCSAqIFRoZSBjb250cm9sIG5lZWRzIHRoaXMgaW5mb3JtYXRpb24gYnV0IG11c3QgZ2V0IGl0IHRocm91Z2ggdGhlIGFuYWx5emVyIGZyb20gdGhlIEVzdGltYXRvcgorCSAqIGNyZWF0ZWQgYnkgdGhlIGZhY3RvcnkKKwkgKiBAcGFyYW0gZXF1YXRpb25JbmRleCAsIG9uZSBjaGFydCBwZXIgc3RhdGUgUywgRSwgSSwgYW5kIFIuCisJICogQHBhcmFtIHN0YXRlIDAgb3IgMSByZXByZXNlbnRpbmcgUyBhbmQgU3NlbGVjdGVkLCBJIGFuZCBJIHNlbGVjdGVkLGV0Yy4KKwkgKiBAcmV0dXJuIHByb3BlcnR5IG5hbWUKKwkgKi8KKwlwdWJsaWMgU3RyaW5nIGdldFByb3BlcnR5KGludCBlcXVhdGlvbkluZGV4LCBpbnQgc3RhdGUpIHsKKwkJIHN3aXRjaCAoZXF1YXRpb25JbmRleCkgeworICAgICAgICAgY2FzZSAwOiAgCisgICAgICAgIAkgaWYoc3RhdGU9PTApIHsKKyAgICAgICAgCQkgcmV0dXJuIGtleVM7CisgICAgICAgIAkgfSBlbHNlIGlmIChzdGF0ZT09MSkgeworICAgICAgICAJCSByZXR1cm4ga2V5U2VsZWN0ZWRTOworICAgICAgICAJIH0gZWxzZSBpZiAoKHN0YXRlPT0yKXx8KHN0YXRlPT0zKSkgeworICAgICAgICAJCSByZXR1cm4ga2V5WFkxOworICAgICAgICAJIH1lbHNlICB7CisgICAgICAgIAkJIHJldHVybiBrZXlGaXQxOworICAgICAgICAJIH0KKyAgICAgICAgCSAKKyAgICAgICAgIGNhc2UgMTogIAorICAgICAgICAJIGlmKHN0YXRlPT0wKSB7CisgICAgICAgIAkJIHJldHVybiBrZXlJOworICAgICAgICAJIH0gZWxzZSBpZiAoc3RhdGU9PTEpIHsKKyAgICAgICAgCQkgcmV0dXJuIGtleVNlbGVjdGVkSTsKKyAgICAgICAgCSB9IGVsc2UgaWYgKChzdGF0ZT09Mil8fChzdGF0ZT09MykpIHsKKyAgICAgICAgCQkgcmV0dXJuIGtleVhZMjsKKyAgICAgICAgCSB9ZWxzZSAgeworICAgICAgICAJCSByZXR1cm4ga2V5Rml0MjsKKyAgICAgICAgCSB9CisgICAgICAgIAkgCisgICAgICAgICBjYXNlIDI6ICAKKyAgICAgICAgCSBpZihzdGF0ZT09MCkgeworICAgICAgICAJCSByZXR1cm4ga2V5UjsKKyAgICAgICAgCSB9IGVsc2UgaWYgKHN0YXRlPT0xKSB7CisgICAgICAgIAkJIHJldHVybiBrZXlTZWxlY3RlZFI7CisgICAgICAgIAkgfSBlbHNlIGlmICgoc3RhdGU9PTIpfHwoc3RhdGU9PTMpKSB7CisgICAgICAgIAkJIHJldHVybiBrZXlYWTM7CisgICAgICAgIAkgfWVsc2UgIHsKKyAgICAgICAgCQkgcmV0dXJuIGtleUZpdDM7CisgICAgICAgIAkgfQorICAgICAgICAJIAorICAgICAgICAgY2FzZSAzOiAgIAorICAgICAgICAJIGlmKHN0YXRlPT0wKSB7CisgICAgICAgIAkJIHJldHVybiBrZXlFOworICAgICAgICAJIH0gZWxzZSBpZiAoc3RhdGU9PTEpIHsKKyAgICAgICAgCQkgcmV0dXJuIGtleVNlbGVjdGVkRTsKKyAgICAgICAgCSB9IGVsc2UgaWYgKChzdGF0ZT09Mil8fChzdGF0ZT09MykpIHsKKyAgICAgICAgCQkgcmV0dXJuIGtleVhZNDsKKyAgICAgICAgCSB9ZWxzZSAgeworICAgICAgICAJCSByZXR1cm4ga2V5Rml0NDsKKyAgICAgICAgCSB9CisgICAgICAgIAkgCisgICAgICAgICBkZWZhdWx0OiByZXR1cm4gbnVsbDsKKwkJIH0vLyBzd2l0Y2gJCisJfS8vIGdldFByb3BlcnR5CisJCisJLyoqCisJICogdXBkYXRlIHRoZSBtaW4gYW5kIG1heCB0aHJlc2hvbGRzIGZyb20gdGhlCisJICogRXN0aW1hdG9yQ29udHJvbCBVSSBzcGlubmVycworCSAqIEBwYXJhbSBjb250cm9sUGFyYW1ldGVyc01hcCAKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRBbGxQYXJhbWV0ZXJzKE1hcDxTdHJpbmcsT2JqZWN0PiBjb250cm9sUGFyYW1ldGVyc01hcCkgeworCQlpZihjb250cm9sUGFyYW1ldGVyc01hcCAgIT1udWxsKSB7CisJCQltYXhTdGhyZXNob2xkID0gKChEb3VibGUpY29udHJvbFBhcmFtZXRlcnNNYXAuZ2V0KEVzdGltYXRvckNvbnRyb2wuTUFYX1NfS0VZKSkuZG91YmxlVmFsdWUoKTsKKwkJCW1pblN0aHJlc2hvbGQgPSAoKERvdWJsZSljb250cm9sUGFyYW1ldGVyc01hcC5nZXQoRXN0aW1hdG9yQ29udHJvbC5NSU5fU19LRVkpKS5kb3VibGVWYWx1ZSgpOworCQkKKwkJCW1heEV0aHJlc2hvbGQgPSAoKERvdWJsZSljb250cm9sUGFyYW1ldGVyc01hcC5nZXQoRXN0aW1hdG9yQ29udHJvbC5NQVhfRV9LRVkpKS5kb3VibGVWYWx1ZSgpOworCQkJbWluRXRocmVzaG9sZCA9ICgoRG91YmxlKWNvbnRyb2xQYXJhbWV0ZXJzTWFwLmdldChFc3RpbWF0b3JDb250cm9sLk1JTl9FX0tFWSkpLmRvdWJsZVZhbHVlKCk7CisJCQkKKwkJCW1heEl0aHJlc2hvbGQgPSAoKERvdWJsZSljb250cm9sUGFyYW1ldGVyc01hcC5nZXQoRXN0aW1hdG9yQ29udHJvbC5NQVhfSV9LRVkpKS5kb3VibGVWYWx1ZSgpOworCQkJbWluSXRocmVzaG9sZCA9ICgoRG91YmxlKWNvbnRyb2xQYXJhbWV0ZXJzTWFwLmdldChFc3RpbWF0b3JDb250cm9sLk1JTl9JX0tFWSkpLmRvdWJsZVZhbHVlKCk7CisJCQorCQkJbWF4UnRocmVzaG9sZCA9ICgoRG91YmxlKWNvbnRyb2xQYXJhbWV0ZXJzTWFwLmdldChFc3RpbWF0b3JDb250cm9sLk1BWF9SX0tFWSkpLmRvdWJsZVZhbHVlKCk7CisJCQltaW5SdGhyZXNob2xkID0gKChEb3VibGUpY29udHJvbFBhcmFtZXRlcnNNYXAuZ2V0KEVzdGltYXRvckNvbnRyb2wuTUlOX1JfS0VZKSkuZG91YmxlVmFsdWUoKTsKKwkJCQorCQkJdXNlRnJlcURlcGVuZGFudEJldGEgPSAoKEJvb2xlYW4pIGNvbnRyb2xQYXJhbWV0ZXJzTWFwLmdldChFc3RpbWF0b3JDb250cm9sLkZSRVFfTU9ERV9LRVkpICkuYm9vbGVhblZhbHVlKCk7CisJCQkKKwkJfQorCQlyZXR1cm47CisJfS8vIHVwZGF0ZSBUaHJlc2hvbGRzCisJCisJCisJCisJLyoqCisJICogRXN0aW1hdGUgdGhlIHBhcmFtZXRlcnMKKwkgKiBAcGFyYW0gbG9jYWxEZW5zaXR5IAorCSAqIEBwYXJhbSBsb2NhbFBvcHVsYXRpb24gIAorCSAqIEBwYXJhbSBsb2NhdGlvbklEIAorCSAqIEByZXR1cm4gdGhlIE1vZGVsUGFyYW1ldGVycyBlc3RpbWF0ZQorCSAqLworCXB1YmxpYyBhYnN0cmFjdCBNb2RlbFBhcmFtZXRlcnMgZXN0aW1hdGUoZG91YmxlIGxvY2FsRGVuc2l0eSwgZG91YmxlIGxvY2FsUG9wdWxhdGlvbiwgU3RyaW5nIGxvY2F0aW9uSUQpIDsKKwkKKwkKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSByYXcgZGF0YSAoc3RhdGUgMCkgYW5kIHRoZSBzZWxlY3RlZCBkYXRhIChzdGF0ZSAxKSAKKwkgKiBmb3IgZWFjaCBvZiB0aGUgc3RhdGUgdmFyaWFibGVzIFMsRSxJLFIgKGNoYXJ0SW5kZXggMC0zKQorCSAqIEBwYXJhbSBjaGFydEluZGV4IAorCSAqIEBwYXJhbSBzdGF0ZQorCSAqIEByZXR1cm4gdGhlIGRhdGEgdG8gcGxvdAorCSAqLworCXB1YmxpYyBkb3VibGVbXSBnZXRWYWx1ZXMoaW50IGNoYXJ0SW5kZXgsIGludCBzdGF0ZSkgeworCQkvLyBwaWNrIHRoZSByaWdodCBkYXRhIGZvciB0aGUgcmlnaHQgY2hhcnQKKwkJaWYoc3RhdGUgPD0gMSkgeworCQkJZG91YmxlW11bXSBkYXRhID0gZGF0YVRvUGxvdC5nZXQoY2hhcnRJbmRleCk7CisJCQlyZXR1cm4gZGF0YVtzdGF0ZV07CisJCX0gCisJCS8vIHJlZ3Jlc3Npb24gZGF0YQorCQlkb3VibGVbXVtdIHJlZ3Jlc3Npb24gPSByZWdyZXNzaW9uVmFsdWVzLmdldChjaGFydEluZGV4KTsKKwkJcmV0dXJuIHJlZ3Jlc3Npb25bc3RhdGUtMl07CisJfS8vIGdldFZhbHVlcworCQorCQorCS8qKgorCSAqIGNyZWF0ZSBhIHNvcnRlZCByZWdyZXNzaW9uIChvcmRlcmVkIGJ5IHRoZSB4IGNvb3JkaW5hdGUpCisJICogQHBhcmFtIHhMaXN0CisJICogQHBhcmFtIHlMaXN0CisJICogQHJldHVybiB0aGUgcmVncmVzc2lvbgorCSAqLworCXB1YmxpYyBkb3VibGVbXVtdIGdldFNvcnRlZFJlZ3Jlc3Npb24oTGlzdDxEb3VibGU+IHhMaXN0LCBMaXN0PERvdWJsZT4geUxpc3QpIHsKKwkJZG91YmxlW11bXSByZWdyZXNzaW9uID0gbmV3IGRvdWJsZVsyXVt4TGlzdC5zaXplKCldOworCQlpZih5TGlzdC5zaXplKCkgIT0geExpc3Quc2l6ZSgpKSByZXR1cm4gcmVncmVzc2lvbjsKKwkJTGlzdDxQaGFzZVNwYWNlQ29vcmRpbmF0ZT4gY29vcmRzID0gbmV3IEFycmF5TGlzdDxQaGFzZVNwYWNlQ29vcmRpbmF0ZT4oKTsKKwkJZm9yIChpbnQgaSA9IDA7IGkgPCB4TGlzdC5zaXplKCk7IGkgKyspIHsKKwkJCWRvdWJsZSB4ID0geExpc3QuZ2V0KGkpLmRvdWJsZVZhbHVlKCk7CisJCQlkb3VibGUgeSA9IHlMaXN0LmdldChpKS5kb3VibGVWYWx1ZSgpOworCQkJUGhhc2VTcGFjZUNvb3JkaW5hdGUgY29vcmQgPSBuZXcgUGhhc2VTcGFjZUNvb3JkaW5hdGUoeCx5KTsKKwkJCWNvb3Jkcy5hZGQoY29vcmQpOworCQl9CisJCU9iamVjdFtdIGNvb3JkQXJyYXkgPSBjb29yZHMudG9BcnJheSgpOworCQlBcnJheXMuc29ydChjb29yZEFycmF5KTsKKwkJZm9yIChpbnQgaSA9IDA7IGkgPCB4TGlzdC5zaXplKCk7IGkgKyspIHsKKwkJCVBoYXNlU3BhY2VDb29yZGluYXRlIGNvb3JkID0gKFBoYXNlU3BhY2VDb29yZGluYXRlKWNvb3JkQXJyYXlbaV07CisJCQlyZWdyZXNzaW9uWzBdW2ldID0gY29vcmQueFZhbHVlOworCQkJcmVncmVzc2lvblsxXVtpXSA9IGNvb3JkLnlWYWx1ZTsKKwkJfQorCQlyZXR1cm4gcmVncmVzc2lvbjsKKwl9Ly9nZXRTb3J0ZWRSZWdyZXNzaW9uCisJCit9CmRpZmYgLS1naXQgYS9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLnV0aWwuYW5hbHlzaXMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdXRpbC9hbmFseXNpcy9QYXJhbWV0ZXJFc3RpbWF0b3JGYWN0b3J5LmphdmEgYi9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLnV0aWwuYW5hbHlzaXMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdXRpbC9hbmFseXNpcy9QYXJhbWV0ZXJFc3RpbWF0b3JGYWN0b3J5LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWE0ZjhlOQotLS0gL2Rldi9udWxsCisrKyBiL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0udXRpbC5hbmFseXNpcy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91dGlsL2FuYWx5c2lzL1BhcmFtZXRlckVzdGltYXRvckZhY3RvcnkuamF2YQpAQCAtMCwwICsxLDUzIEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0udXRpbC5hbmFseXNpczsKKworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuaW1wbC5SZWZlcmVuY2VTY2VuYXJpb0RhdGFNYXBJbXBsLlJlZmVyZW5jZVNjZW5hcmlvRGF0YUluc3RhbmNlOworCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNywgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKgorICogRmFjdG9yeSB0aGF0IGNyZWF0ZXMgUGFyYW1ldGVyRXNpbWF0b3IgaW5zdGFuY2VzCisgKi8KK3B1YmxpYyBjbGFzcyBQYXJhbWV0ZXJFc3RpbWF0b3JGYWN0b3J5IHsKKworCS8qKgorCSAqIENyZWF0ZSBuZXcgUGFyYW1ldGVyRXN0aW1hdG9yCisJICogCisJICogQHBhcmFtIG1ldGhvZCBNZXRob2QgdXNlZCB0byBlc3RpbWF0ZSBwYXJhbWV0ZXJzCisJICogQHBhcmFtIGRhdGEgRXN0aW1hdG9yIGRhdGEKKwkgKiBAcmV0dXJuIFBhcmFtZXRlckVzdGltYXRvcgorCSAqLworCXB1YmxpYyBzdGF0aWMgUGFyYW1ldGVyRXN0aW1hdG9yIGNyZWF0ZUVzdGltYXRvcigKKwkJCVBhcmFtZXRlckVzdGltYXRvck1ldGhvZCBtZXRob2QsIAorCQkJUmVmZXJlbmNlU2NlbmFyaW9EYXRhSW5zdGFuY2UgZGF0YSkgeworCQlQYXJhbWV0ZXJFc3RpbWF0b3IgcmVzdWx0ID0gbnVsbDsKKwkJCisJCXN3aXRjaChtZXRob2QpIHsKKwkJCWNhc2UgU0VJUjoKKwkJCQlyZXN1bHQgPSBuZXcgU0VJUnBhcmFtZXRlckVzdGltYXRvcihkYXRhKTsKKwkJCQlicmVhazsKKwkJCWNhc2UgU0lSOgorCQkJCSByZXN1bHQgPSBuZXcgU0lScGFyYW1ldGVyRXN0aW1hdG9yKGRhdGEpOworCQkJCSBicmVhazsKKwkJCWNhc2UgU0k6CisJCQkJIHJlc3VsdCA9IG5ldyBTSXBhcmFtZXRlckVzdGltYXRvcihkYXRhKTsKKwkJCQkgYnJlYWs7CQorCQkJY2FzZSBOT05MSU5FQVJTRUlSOgorCQkJCSByZXN1bHQgPSBuZXcgTm9uTGluZWFyU0VJUlBhcmFtZXRlckVzdGltYXRvcihkYXRhKTsKKwkJCQkgYnJlYWs7CQorCQkJZGVmYXVsdDoKKwkJCQlBY3RpdmF0b3IubG9nRXJyb3IoIlVua25vd24gbWV0aG9kOiAiK21ldGhvZCwgbnVsbCk7CisJCX0KKwkJcmV0dXJuIHJlc3VsdDsKKwl9Cit9CmRpZmYgLS1naXQgYS9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLnV0aWwuYW5hbHlzaXMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdXRpbC9hbmFseXNpcy9QYXJhbWV0ZXJFc3RpbWF0b3JNZXRob2QuamF2YSBiL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0udXRpbC5hbmFseXNpcy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91dGlsL2FuYWx5c2lzL1BhcmFtZXRlckVzdGltYXRvck1ldGhvZC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFkYWYyMjAKLS0tIC9kZXYvbnVsbAorKysgYi9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLnV0aWwuYW5hbHlzaXMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdXRpbC9hbmFseXNpcy9QYXJhbWV0ZXJFc3RpbWF0b3JNZXRob2QuamF2YQpAQCAtMCwwICsxLDc0IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0udXRpbC5hbmFseXNpczsKKworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuRGlzZWFzZVR5cGU7CisKKworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDcsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioKKyAqIEFkZCBhbnkgbmV3IHBhcmFtZXRlciBlc3RpbWF0aW9uIG1ldGhvZCB5b3UgY3JlYXRlIHRvIHRoZSBsaXN0IGluIHRoaXMgZW51bWVyYXRpb24KKyAqIHRvIGVuc3VyZSBpdCBiZWNvbWVzIGF2YWlsYWJsZSBmcm9tIHRoZSBwYXJhbWV0ZXIgZXN0aW1hdG9yIHNlbGVjdGlvbgorICogd2l6YXJkLiBBbHNvIHByb3ZpZGUgYSBicmllZiBkZXNjcmlwdGlvbiBvZiB0aGUgbWV0aG9kLgorICogCisgKiBZb3UgYWxzbyBuZWVkIHRvIG1vZGlmeSB0aGUgZmFjdG9yeSBtZXRob2QgdG8gZW5zdXJlIGl0IGNhbiBjcmVhdGUKKyAqIGFuIGluc3RhbmNlIG9mIHRoZSBwYXJhbWV0ZXIgZXN0aW1hdG9yIGltcGxlbWVudGluZyB0aGUgbWV0aG9kLgorICovCitwdWJsaWMgZW51bSBQYXJhbWV0ZXJFc3RpbWF0b3JNZXRob2QgewkKKwkvKioKKwkgKiBJZiBtZXRob2QgPSBTRUlSX01FVEhPRCwgdGhlbiBTRUlSIG1vZGVsIHVzZWQKKwkgKi8KKwlTRUlSKCJTRUlSIiwgIkFuIFNFSVIgcGFyYW1ldGVyIGVzdGltYXRvciIsIERpc2Vhc2VUeXBlLlNFSVIpLAorCS8qKgorCSAqIElmIG1ldGhvZCA9IFNJUl9NRVRIT0QsIHRoZW4gU0lSIG1vZGVsIHVzZWQKKwkgKi8KKwlTSVIoIlNJUiIsICJBbiBTSVIgcGFyYW1ldGVyIGVzdGltYXRvciIsIERpc2Vhc2VUeXBlLlNJUiksCisJLyoqCisJICogSWYgbWV0aG9kID0gU0lfTUVUSE9ELCB0aGVuIFNJIG1vZGVsIHVzZWQKKwkgKi8KKwlTSSgiU0kiLCAiQW4gU0kgcGFyYW1ldGVyIGVzdGltYXRvciIsIERpc2Vhc2VUeXBlLlNJKSwKKwkvKioKKwkgKiBJZiBtZXRob2QgPSBOT05MSU5FQVJfU0VJUl9NRVRIT0QsIHRoZW4gU0VJUiBtZXRob2QgZm9yIGJldGEgZnVuY3Rpb24gdXNlZAorCSAqLworCU5PTkxJTkVBUlNFSVIoIk5vbkxpbmVhciBTRUlSIiwgIkEgbm9uLWxpbmVhciBTRUlSIHBhcmFtZXRlciBlc3RpbWF0b3IiLCBEaXNlYXNlVHlwZS5TRUlSKTsKKwkKKwlTdHJpbmcgbmFtZTsKKwlTdHJpbmcgZGVzY3JpcHRvbjsKKwlEaXNlYXNlVHlwZSB0eXBlOworCQorCXByaXZhdGUgUGFyYW1ldGVyRXN0aW1hdG9yTWV0aG9kKFN0cmluZyBuYW1lLCBTdHJpbmcgZGVzY3JpcHRpb24sIERpc2Vhc2VUeXBlIHR5cGUpIHsKKwkJdGhpcy5uYW1lID0gbmFtZTsKKwkJdGhpcy5kZXNjcmlwdG9uID0gZGVzY3JpcHRpb247CisJCXRoaXMudHlwZSA9IHR5cGU7CisJfQorCQorCS8qKgorCSAqIE5hbWUgKGFzIGl0IHNob3dzIHVwIGluIHRoZSB3aXphcmQpCisJICogQHJldHVybiBTdHJpbmcgVGhlIG5hbWUKKwkgKi8KKwlwdWJsaWMgU3RyaW5nIGdldE5hbWUoKSB7cmV0dXJuIHRoaXMubmFtZTt9CisJCisJLyoqCisJICogRGVzY3JpcHRpb24gKGFzIGl0IHNob3dzIHVwIGluIHRoZSBXaXphcmQpCisJICogQHJldHVybiBTdHJpbmcgRGVzY3JpcHRpb24KKwkgKi8KKwlwdWJsaWMgU3RyaW5nIGdldERlc2NyaXB0aW9uKCkge3JldHVybiB0aGlzLmRlc2NyaXB0b247fQorCQorCS8qKgorCSAqIGdldFR5cGUuIFJldHVybiB0aGUgdHlwZSBvZiB0aGUgbWV0aG9kIChkZXRlcm1pbmVzCisJICogd2hpY2ggaW5wdXQgZGF0YSBjYW4gYmUgdXNlZCkKKwkgKiBAcmV0dXJuIERpc2Vhc2VUeXBlIFRoZSB0eXBlCisJICovCisJcHVibGljIERpc2Vhc2VUeXBlIGdldFR5cGUoKSB7cmV0dXJuIHRoaXMudHlwZTt9CisJCit9CmRpZmYgLS1naXQgYS9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLnV0aWwuYW5hbHlzaXMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdXRpbC9hbmFseXNpcy9QaGFzZVNwYWNlQ29vcmRpbmF0ZS5qYXZhIGIvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS51dGlsLmFuYWx5c2lzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3V0aWwvYW5hbHlzaXMvUGhhc2VTcGFjZUNvb3JkaW5hdGUuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMTk5NTVmCi0tLSAvZGV2L251bGwKKysrIGIvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS51dGlsLmFuYWx5c2lzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3V0aWwvYW5hbHlzaXMvUGhhc2VTcGFjZUNvb3JkaW5hdGUuamF2YQpAQCAtMCwwICsxLDExOCBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnV0aWwuYW5hbHlzaXM7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDkgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKKy8qKgorICogQW4geC15IGNvb3JkaW5hdGUgaW4gUGhhc2UgU3BhY2UgCisgKiBVc2VkLCBmb3IgZXhhbXBsZSwgIHRvIGNvbXB1dGUgdHJhamVjdG9yeSBhbmQgTHlhcHVub3YgRXhwb25lbnQKKyAqCisgKi8KK3B1YmxpYyBjbGFzcyBQaGFzZVNwYWNlQ29vcmRpbmF0ZSBpbXBsZW1lbnRzIENvbXBhcmFibGUgeworCQorCQkKKwkJZG91YmxlIHhWYWx1ZTsKKwkJZG91YmxlIHlWYWx1ZTsKKwkJCisJCS8qKgorCQkgKiBjb25zdHJ1Y3RvcgorCQkgKiBAcGFyYW0geAorCQkgKiBAcGFyYW0geQorCQkgKi8KKwkJcHVibGljIFBoYXNlU3BhY2VDb29yZGluYXRlKGRvdWJsZSB4LGRvdWJsZSB5KSB7CisJCQl4VmFsdWUgPSB4OworCQkJeVZhbHVlID0geTsKKwkJfQorCQkKKwkJLyoqCisJCSAqIGdldFgKKwkJICogQHJldHVybiB4VmFsdWUKKwkJICovCisJCXB1YmxpYyBkb3VibGUgZ2V0WFZhbHVlKCkgeworCQkJcmV0dXJuIHhWYWx1ZTsKKwkJfQorCisJCS8qKgorCQkgKiBzZXQgeFZhbHVlCisJCSAqIEBwYXJhbSB2YWx1ZSAKKwkJICovCisJCXB1YmxpYyB2b2lkIHNldFhWYWx1ZShkb3VibGUgdmFsdWUpIHsKKwkJCXhWYWx1ZSA9IHZhbHVlOworCQl9CisKKwkJLyoqCisJCSAqIGdldFkKKwkJICogQHJldHVybiBZVmFsdWUKKwkJICovCisJCXB1YmxpYyBkb3VibGUgZ2V0WVZhbHVlKCkgeworCQkJcmV0dXJuIHlWYWx1ZTsKKwkJfQorCisJCS8qKgorCQkgKiBzZXQgeVZhbHVlCisJCSAqIEBwYXJhbSB2YWx1ZSAKKwkJICovCisJCXB1YmxpYyB2b2lkIHNldFlWYWx1ZShkb3VibGUgdmFsdWUpIHsKKwkJCXlWYWx1ZSA9IHZhbHVlOworCQl9CisJCisJCS8qKgorCQkgKiBpbnRlZ3JhdGUgKHN1bSkgcGF0aCB2YWx1ZXMKKwkJICogQHBhcmFtIGRlbHRhWHZhbHVlIAorCQkgKiBAcGFyYW0gZGVsdGFZdmFsdWUgCisJCSAqLworCQlwdWJsaWMgdm9pZCBpbnRlZ3JhdGVQYXRoKGRvdWJsZSBkZWx0YVh2YWx1ZSwgZG91YmxlIGRlbHRhWXZhbHVlKSB7CisJCQl4VmFsdWUgKz0gZGVsdGFYdmFsdWU7CisJCQl5VmFsdWUgKz0gZGVsdGFZdmFsdWU7CisJCX0KKwkJCisJCS8qKgorCQkgKiBub3JtYWxpemUgdGhlIGNvb3JkaW5hdGVzCisJCSAqIEBwYXJhbSBub3JtYWxpemF0aW9uCisJCSAqIAorCQkgKi8KKwkJcHVibGljIHZvaWQgbm9ybWFsaXplKGRvdWJsZSBub3JtYWxpemF0aW9uKSB7CisJCQl4VmFsdWUgLz0gbm9ybWFsaXphdGlvbjsKKwkJCXlWYWx1ZSAvPSBub3JtYWxpemF0aW9uOworCQl9CisJCQorCQkvKioKKwkJICogCisJCSAqIEBwYXJhbSBvdGhlclBvaW50CisJCSAqIEByZXR1cm4gdGhlIGRpc3RhbmNlIGJldHdlZW4gdGhpcyBwb2ludCBhbmQgb3RoZXIgcG9pbnQgaW4gcGhhc2Ugc3BhY2UKKwkJICovCisJCXB1YmxpYyBkb3VibGUgZ2V0RGlzdGFuY2UoUGhhc2VTcGFjZUNvb3JkaW5hdGUgb3RoZXJQb2ludCkgeworCQkJZG91YmxlIGRpc3QyID0gKCh0aGlzLnhWYWx1ZSAtIG90aGVyUG9pbnQueFZhbHVlKSoodGhpcy54VmFsdWUgLSBvdGhlclBvaW50LnhWYWx1ZSkpKworCQkJCQkJICAgKCh0aGlzLnlWYWx1ZSAtIG90aGVyUG9pbnQueVZhbHVlKSoodGhpcy55VmFsdWUgLSBvdGhlclBvaW50LnlWYWx1ZSkpCTsKKwkJCWRvdWJsZSBkaXN0ID0gTWF0aC5zcXJ0KGRpc3QyKTsKKwkJCQorCQkJcmV0dXJuIGRpc3Q7CisJCX0KKwkJCisJCS8qKgorCQkgKiBmb3Igc29ydGluZyBjb29yZGluYXRlcyBieSB0aGVpciB4IHZhbHVlCisJCSAqIEBzZWUgamF2YS5sYW5nLkNvbXBhcmFibGUjY29tcGFyZVRvKGphdmEubGFuZy5PYmplY3QpCisJCSAqLworCQkgcHVibGljIGludCBjb21wYXJlVG8oT2JqZWN0IG90aGVyQ29vcmQpIHRocm93cyBDbGFzc0Nhc3RFeGNlcHRpb24geworCQkJICAgIGlmICghKG90aGVyQ29vcmQgaW5zdGFuY2VvZiBQaGFzZVNwYWNlQ29vcmRpbmF0ZSkpIHRocm93IG5ldyBDbGFzc0Nhc3RFeGNlcHRpb24oIkEgUGVyc29uIG9iamVjdCBleHBlY3RlZC4iKTsKKwkJCSAgICBkb3VibGUgb3RoZXJYID0gKChQaGFzZVNwYWNlQ29vcmRpbmF0ZSlvdGhlckNvb3JkKS54VmFsdWU7CisJCQkgICAgaWYgKHRoaXMueFZhbHVlIDwgb3RoZXJYKSByZXR1cm4gLTE7CisJCQkgICAgaWYgKHRoaXMueFZhbHVlID4gb3RoZXJYKSByZXR1cm4gMTsKKwkJCSAgICByZXR1cm4gMDsKKwkJIH0KKworCQorCQkKKwkJCisJCisKK30vL1BoYXNlU3BhY2VDb29yZGluYXRlIGNsYXNzCmRpZmYgLS1naXQgYS9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLnV0aWwuYW5hbHlzaXMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdXRpbC9hbmFseXNpcy9QaGFzZVN5bmNocm9uaXplci5qYXZhIGIvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS51dGlsLmFuYWx5c2lzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3V0aWwvYW5hbHlzaXMvUGhhc2VTeW5jaHJvbml6ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYzc3YzA2Ci0tLSAvZGV2L251bGwKKysrIGIvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS51dGlsLmFuYWx5c2lzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3V0aWwvYW5hbHlzaXMvUGhhc2VTeW5jaHJvbml6ZXIuamF2YQpAQCAtMCwwICsxLDExMyBAQAorLyoqCisgKiAKKyAqLworcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnV0aWwuYW5hbHlzaXM7CisKK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OworaW1wb3J0IGphdmEudXRpbC5MaXN0OworCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5pbXBsLlJlZmVyZW5jZVNjZW5hcmlvRGF0YU1hcEltcGwuUmVmZXJlbmNlU2NlbmFyaW9EYXRhSW5zdGFuY2U7CisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNywgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKgorICAqIFRoaXMgY2xhc3MgaXMgZGVzaWduZWQgdG8gdGFrZSBhIHBhaXIgb2YgdGltZSBzZXJpZXMgZWFjaCBpbnZvbHZpbmcgbXVsdGlwbGUgZXBpZGVtaWMgd2F2ZXMuIEl0IHVzZXMgb25lIAorICAqIHNlcmllcyBhcyBhIHJlZmVyZW5jZSBhbiB0aGVuIHBoYXNlIHNoaWZ0cyB0aGUgcGVha3Mgd2l0aGluIHRoZSBzZWNvbmQgZGF0YSBzZXJpZXMgc28gdGhhdCB0aGUgZXBpZGVtaWNzCisgICogYXJlICJzeW5jaHJvbml6ZWQiLiBUaGlzIGlzIG5lY2Vzc2FyeSBpbiBvcmRlciB0byBhY2N1cmF0ZWx5IGZpdCBtb2RlbCBwYXJhbWV0ZXJzIG9mIG1hbnkgbG9jYXRpb25zIHdpdGhvdXQgaW1wb3NpbmcgYQorICAqIHRyYW5zcG9ydGF0aW9uIG1vZGVsLiBBcyB0aGUgZXBpZGVtaWMgIm1vdmVzIiwgcGVha3Mgb2NjdXIgYXQgZGlmZmVyZW50IHRpbWVzLiBTeW5jaHJvbml6aW5nIGFsbG93cyB1cyB0byBlc3RpbWF0ZSB0aGUgZXBpZGVtaWMKKyAgKiBwYXJhbWV0ZXJzIHdpdGhvdXQgYSB0cmFuc3BvcnRhdGlvbiBtb2RlbC4gVGhpcyBjbGFzcyBpcyB1c2VkIHdoZW4gdGhlIGZpdHRpbmcgaXMgZG9uZSBieSBhZGRpbmcgc3luY2hyb25pemVkIGRhdGEgb3ZlciBhbGwgbG9jYXRpb25zLgorICAqIFRoaXMgaXMgbm90IG5lY2Vzc2FyeSBpZiB3ZSBjYW4gZml0IGVhY2ggbG9jYXRpb24gaW5kZXBlbmRhbnRseSwgYnV0IGlzIG5lY2Vzc2FyeSB3aGVuIHRoZSBhbW91bnQgb2YgZGF0YSBpcyBzY2FyY2UgKGVnIGZvciByZWFsCisgICogZXBpZGVtaWMgaW5jaWRlbmNlIGRhdGEpLgorICovCitwdWJsaWMgY2xhc3MgUGhhc2VTeW5jaHJvbml6ZXIgeworCQorCVJlZmVyZW5jZVNjZW5hcmlvRGF0YUluc3RhbmNlIHJlZmVyZW5jZTsKKwkvL1JlZmVyZW5jZVNjZW5hcmlvRGF0YUluc3RhbmNlIGRhdGE7CisJCisJLyoqCisJICogdGhpcyBwaGFzZSBzaGlmdCBtYXhpbWl6ZXMgdGhlIGNvcnJlbGF0aW9uIGJldHdlZW4gdGhlIHR3byB2ZWN0b3JzCisJICovCisJLy9pbnQgcGhhc2VTaGlmdDsKKwkKKwkvKioKKwkgKiBieSBkZWZhdWx0IHdlIHdpbGwgdHJ5IHRvIGZpbmQgbWF4IGNvcnJlbGF0aW9uIGZvciBhIHNoaWZ0IG9mICsvLSAzMCBkYXlzCisJICogaWYgdGhlIHZlY3RvcnMgYXJlIHNob3J0ZXIgdGhhbiB0aGlzIHdlIHJlZHVjZSB0aGUgd2luZG93CisJICovCisJLy9pbnQgZGVmYXVsdFNoaWZ0V2luZG93ID0gMzA7CisJCisJLyoqCisJICogVGhpcyBjbGFzcyBpcyBkZXNpZ25lZCB0byB0YWtlIGEgcGFpciBvZiBSZWZlcmVuY2VTY2VuYXJpb0RhdGFJbnN0YW5jZShzKSBlYWNoIGludm9sdmluZyBtdWx0aXBsZSBlcGlkZW1pYyB3YXZlcy4gSXQgdXNlcyBvbmUgCisJICogc2VyaWVzIGFzIGEgcmVmZXJlbmNlIGFuIHRoZW4gcGhhc2Ugc2hpZnRzIHRoZSBwZWFrcyB3aXRoaW4gdGhlIHNlY29uZCBpbmNpZGVuY2UgZGF0YSBzZXJpZXMgc28gdGhhdCB0aGUgZXBpZGVtaWNzCisJICogYXJlICJzeW5jaHJvbml6ZWQiLiBUaGlzIGlzIG5lY2Vzc2FyeSBpbiBvcmRlciB0byBhY2N1cmF0ZWx5IGZpdCBtb2RlbCBwYXJhbWV0ZXJzIG9mIG1hbnkgbG9jYXRpb25zIHdpdGhvdXQgaW1wb3NpbmcgYQorCSAqIHRyYW5zcG9ydGF0aW9uIG1vZGVsLiBBcyB0aGUgZXBpZGVtaWMgIm1vdmVzIiwgcGVha3Mgb2NjdXIgYXQgZGlmZmVyZW50IHRpbWVzLiBTeW5jaHJvbml6aW5nIGFsbG93cyB1cyB0byBlc3RpbWF0ZSB0aGUgZXBpZGVtaWMKKwkgKiBwYXJhbWV0ZXJzIHdpdGhvdXQgYSB0cmFuc3BvcnRhdGlvbiBtb2RlbC4gVGhpcyBjbGFzcyBpcyB1c2VkIHdoZW4gdGhlIGZpdHRpbmcgaXMgZG9uZSBieSBhZGRpbmcgc3luY2hyb25pemVkIGRhdGEgb3ZlciBhbGwgbG9jYXRpb25zLgorCSAqIFRoaXMgaXMgbm90IG5lY2Vzc2FyeSBpZiB3ZSBjYW4gZml0IGVhY2ggbG9jYXRpb24gaW5kZXBlbmRlbnRseSwgYnV0IGlzIG5lY2Vzc2FyeSB3aGVuIHRoZSBhbW91bnQgb2YgZGF0YSBpcyBzY2FyY2UgKGVnIGZvciByZWFsCisJICogZXBpZGVtaWMgaW5jaWRlbmNlIGRhdGEpLgorCSAqIEBwYXJhbSByZWZJbnN0YW5jZQorCSAqIAorCSAqLworCXB1YmxpYyBQaGFzZVN5bmNocm9uaXplcihSZWZlcmVuY2VTY2VuYXJpb0RhdGFJbnN0YW5jZSByZWZJbnN0YW5jZSkgeworCQlyZWZlcmVuY2UgPSByZWZJbnN0YW5jZTsKKwkJdGhpcy5nZXRQZWFrUG9zaXRpb25zKHJlZmVyZW5jZSwgIkluY2lkZW5jZSIpOworCX0KKwkKKwkvKioKKwkgKiBGaW5kcyBpbmRleCBvZiBwZWFrcywgcmV0dXJucyBhcyBsaXN0CisJICogQHBhcmFtIGluc3RhbmNlCisJICogQHBhcmFtIGtleSAKKwkgKiBAcGFyYW1ldGVyIGtleSAobXVzdCBiZSBJLCBFLCBvciBpbmNpZGVuY2UgLSB0aGV5IGhhdmUgcGVha3MpCisJICogQHJldHVybiBsaXN0IG9mIHBlYWsgcG9zaXRpb25zCisJICovCisJcHVibGljIExpc3Q8SW50ZWdlcj4gZ2V0UGVha1Bvc2l0aW9ucyhSZWZlcmVuY2VTY2VuYXJpb0RhdGFJbnN0YW5jZSBpbnN0YW5jZSwgU3RyaW5nIGtleSkgeworCQlMaXN0PERvdWJsZT4gdmVjdG9yID0gaW5zdGFuY2UuZ2V0RGF0YSgpLmdldChrZXkpOworCQlMaXN0PEludGVnZXI+IHBlYWtzID0gbmV3IEFycmF5TGlzdDxJbnRlZ2VyPigpOworCQlmb3IgKGludCBpID0gMDsgaSA8IHZlY3Rvci5zaXplKCk7IGkgKyspIHsKKwkJCWRvdWJsZSB2YWx1ZSA9IHZlY3Rvci5nZXQoaSkuZG91YmxlVmFsdWUoKTsKKwkJCWRvdWJsZSBuZXh0ID0gMC4wOworCQkJZG91YmxlIGxhc3QgPSAwLjA7CisJCQlpZiAoaTwodmVjdG9yLnNpemUoKS0xKSkgbmV4dCA9IHZlY3Rvci5nZXQoaSsxKS5kb3VibGVWYWx1ZSgpOworCQkJaWYgKGk+MCkgbGFzdCA9IHZlY3Rvci5nZXQoaS0xKS5kb3VibGVWYWx1ZSgpOworCQkJaWYoKHZhbHVlID4gbmV4dCkmJih2YWx1ZT5sYXN0KSkgeworCQkJCXBlYWtzLmFkZChJbnRlZ2VyLnZhbHVlT2YoaSkpOworCQkJCS8vIERFQlVHCisJCQkJLy9BY3RpdmF0b3IubG9nSW5mb3JtYXRpb24oImZvdW5kIHBlYWsgYXQgaT0iK2krIiwgdmFsdWU9Iit2YWx1ZSk7CisJCQl9CisJCX0KKwkJcmV0dXJuIHBlYWtzOworCX0KKwkKKwkvKioKKwkgKiBSb3RhdGVzIHRoZSB2ZWN0b3IgKExpc3QpIGJ5IFNoaWZ0IC0gd3JhcHBpbmcgdmFsdWVzIGZyb20gYmVnaW5uaW5nIHRvIGVuZCBvciB2aWNlIHZlcnNhIGFzIG5lY2Vzc2FyeQorCSAqIFRoaXMgc2hvdWxkIHdvcmsgZm9yIHF1YXNpIHBlcmlvZGljIHRpbWUgc2VyaWVzCisJICogQHBhcmFtIHNoaWZ0CisJICogQHBhcmFtIHZlY3RvcgorCSAqIEByZXR1cm4gc2hpZnRlZCB2ZWN0b3IKKwkgKi8KKwlwdWJsaWMgTGlzdDxEb3VibGU+IGdldFNoaWZ0ZWRWZWN0b3IoaW50IHNoaWZ0LCBMaXN0PERvdWJsZT4gdmVjdG9yKXsKKwkJTGlzdCBzaGlmdGVkID0gbmV3IEFycmF5TGlzdDxEb3VibGU+KCk7CisJCWludCBtYXggPSB2ZWN0b3Iuc2l6ZSgpOworCQlmb3IgKGludCBpID0gMDsgaSA8IG1heDsgaSArKykgeworCQkJaW50IGogPSBpIC0gc2hpZnQ7CisJCQlpZiAoaiA+PSBtYXgpIHsKKwkJCQlqID0gaiAtIG1heDsKKwkJCX0KKwkJCWlmIChqIDwgMCkgeworCQkJCWogPSBtYXgrajsKKwkJCX0KKwkJCXNoaWZ0ZWQuYWRkKGksdmVjdG9yLmdldChqKSk7CisJCX0KKwkJCisJCXJldHVybiBzaGlmdGVkOworCX0KKyAKK30KZGlmZiAtLWdpdCBhL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0udXRpbC5hbmFseXNpcy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91dGlsL2FuYWx5c2lzL1NFSVJwYXJhbWV0ZXJFc3RpbWF0b3IuamF2YSBiL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0udXRpbC5hbmFseXNpcy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91dGlsL2FuYWx5c2lzL1NFSVJwYXJhbWV0ZXJFc3RpbWF0b3IuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYmNiM2VlCi0tLSAvZGV2L251bGwKKysrIGIvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS51dGlsLmFuYWx5c2lzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3V0aWwvYW5hbHlzaXMvU0VJUnBhcmFtZXRlckVzdGltYXRvci5qYXZhCkBAIC0wLDAgKzEsNDIxIEBACisKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS51dGlsLmFuYWx5c2lzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA3LCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmltcGwuUmVmZXJlbmNlU2NlbmFyaW9EYXRhTWFwSW1wbC5SZWZlcmVuY2VTY2VuYXJpb0RhdGFJbnN0YW5jZTsKKworLyoqCisgKiBFc3RpbWF0ZSBwYXJhbWV0ZXJzIGZvciBhbiBTRUlSIG1vZGVsCisgKiAKKyAqCisgKi8KK3B1YmxpYyBjbGFzcyBTRUlScGFyYW1ldGVyRXN0aW1hdG9yIGV4dGVuZHMgUGFyYW1ldGVyRXN0aW1hdG9yIHsKKwkKKwkvLyBVbmlxdWUgc3RhdGVzIGZvciBTRUlSIGVzdGltYXRvcgorCWRvdWJsZVtdIGU7CisJZG91YmxlW10gcjsKKwkKKwkvKioKKwkgKiBAcGFyYW0gZGF0YSBEYXRhIAorCSAqLworCXB1YmxpYyBTRUlScGFyYW1ldGVyRXN0aW1hdG9yKFJlZmVyZW5jZVNjZW5hcmlvRGF0YUluc3RhbmNlIGRhdGEpIHsKKwkJc3VwZXIoZGF0YSk7CisJCUxpc3Q8RG91YmxlPiBzVG9GaXQgPSBuZXcgQXJyYXlMaXN0PERvdWJsZT4oKTsKKwkJTGlzdDxEb3VibGU+IGVUb0ZpdCA9IG5ldyBBcnJheUxpc3Q8RG91YmxlPigpOworCQlMaXN0PERvdWJsZT4gaVRvRml0ID0gbmV3IEFycmF5TGlzdDxEb3VibGU+KCk7CisJCUxpc3Q8RG91YmxlPiByVG9GaXQgPSBuZXcgQXJyYXlMaXN0PERvdWJsZT4oKTsKKwkJCisJCUxpc3Q8RG91YmxlPiBzTGlzdCA9IGRhdGEuZ2V0U3RvdGFscygpOworCQlMaXN0PERvdWJsZT4gZUxpc3QgPSBkYXRhLmdldEV0b3RhbHMoKTsKKwkJTGlzdDxEb3VibGU+IGlMaXN0ID0gZGF0YS5nZXRJdG90YWxzKCk7CisJCUxpc3Q8RG91YmxlPiByTGlzdCA9IGRhdGEuZ2V0UnRvdGFscygpOworCQkKKwkJLy8gVG9EbzogV2h5IGFyZSB3ZSBza2lwcGluZyB0aGUgZmlyc3QgdmFsdWU/CisJCWZvciAoaW50IGljb3VudCA9IDE7IGljb3VudCA8IGlMaXN0LnNpemUoKTsgaWNvdW50ICsrKSB7CisJCQkJaVRvRml0LmFkZChpTGlzdC5nZXQoaWNvdW50KSk7CisJCQkJZVRvRml0LmFkZChlTGlzdC5nZXQoaWNvdW50KSk7CisJCQkJc1RvRml0LmFkZChzTGlzdC5nZXQoaWNvdW50KSk7CisJCQkJclRvRml0LmFkZChyTGlzdC5nZXQoaWNvdW50KSk7CisJCX0KKwkJCisJCQorCQl0aGlzLm51bURhdGFQb2ludHMgPSBpVG9GaXQuc2l6ZSgpOworCQlpZihudW1EYXRhUG9pbnRzIDwgTUlOU0laRSkgcmV0dXJuOworCQlkYXRhVmFsaWQgPSB0cnVlOworCQl0aGlzLnAgPSBuZXcgZG91YmxlW3RoaXMubnVtRGF0YVBvaW50c107CisJCXRoaXMucyA9IG5ldyBkb3VibGVbdGhpcy5udW1EYXRhUG9pbnRzXTsKKwkJdGhpcy5lID0gbmV3IGRvdWJsZVt0aGlzLm51bURhdGFQb2ludHNdOworCQl0aGlzLmkgPSBuZXcgZG91YmxlW3RoaXMubnVtRGF0YVBvaW50c107CisJCXRoaXMuciA9IG5ldyBkb3VibGVbdGhpcy5udW1EYXRhUG9pbnRzXTsKKwkJdGhpcy50ID0gbmV3IGRvdWJsZVt0aGlzLm51bURhdGFQb2ludHNdOworCQkgCisJCQorCQlmb3IgKGludCBpY291bnQgPSAwOyBpY291bnQgPCB0aGlzLm51bURhdGFQb2ludHM7IGljb3VudCArKykgeworCQkJc1tpY291bnRdID0gc1RvRml0LmdldChpY291bnQpLmRvdWJsZVZhbHVlKCk7CisJCQllW2ljb3VudF0gPSBlVG9GaXQuZ2V0KGljb3VudCkuZG91YmxlVmFsdWUoKTsKKwkJCWlbaWNvdW50XSA9IGlUb0ZpdC5nZXQoaWNvdW50KS5kb3VibGVWYWx1ZSgpOworCQkJcltpY291bnRdID0gclRvRml0LmdldChpY291bnQpLmRvdWJsZVZhbHVlKCk7CisJCQlwW2ljb3VudF0gPSBzW2ljb3VudF0rZVtpY291bnRdK2lbaWNvdW50XStyW2ljb3VudF07CisJCQl0W2ljb3VudF0gPSBpY291bnQ7CQkKKwkJfS8vIGZvciBpY291bnQKKwl9Ly8gY29udHNydWN0b3IKKworCS8qKgorCSAqIEVzdGltYXRlIHRoZSBwYXJhbWV0ZXJzCisJICogQHBhcmFtIGxvY2FsRGVuc2l0eSAKKwkgKiBAcGFyYW0gbG9jYWxQb3B1bGF0aW9uIAorCSAqIEBwYXJhbSBsb2NhdGlvbklEIAorCSAqIEByZXR1cm4gdGhlIE1vZGVsUGFyYW1ldGVycyBlc3RpbWF0ZQorCSAqLworCXB1YmxpYyBNb2RlbFBhcmFtZXRlcnMgZXN0aW1hdGUoZG91YmxlIGxvY2FsRGVuc2l0eSwgZG91YmxlIGxvY2FsUG9wdWxhdGlvbiwgU3RyaW5nIGxvY2F0aW9uSUQpIHsKKwkJCisJCU1vZGVsUGFyYW1ldGVycyBmaXR0ZWRQYXJtcyA9IG5ldyBNb2RlbFBhcmFtZXRlcnMoKTsKKwkJCisJCWludCBucHRzID0gcy5sZW5ndGg7CisJCWFzc2VydChucHRzID09IGUubGVuZ3RoKTsKKwkJYXNzZXJ0KG5wdHM9PWkubGVuZ3RoKTsKKwkJYXNzZXJ0KG5wdHM9PXIubGVuZ3RoKTsKKwkJCisJCisJCQkKKwkJCWRvdWJsZVtdIGxuUyA9IG5ldyBkb3VibGVbbnB0c107CisJCQlkb3VibGVbXSBkbG5TID0gbmV3IGRvdWJsZVtucHRzLTFdOworCQkJZG91YmxlW10gbG5FID0gbmV3IGRvdWJsZVtucHRzXTsKKwkJCWRvdWJsZVtdIGRsbkUgPSBuZXcgZG91YmxlW25wdHMtMV07CisJCQlkb3VibGVbXSBsbkkgPSBuZXcgZG91YmxlW25wdHNdOworCQkJZG91YmxlW10gZGxuSSA9IG5ldyBkb3VibGVbbnB0cy0xXTsKKwkJCWRvdWJsZVtdIGxuUiA9IG5ldyBkb3VibGVbbnB0c107CisJCQlkb3VibGVbXSBkbG5SID0gbmV3IGRvdWJsZVtucHRzLTFdOworCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgCisJCQkKKwkJCQorCQkJLy8gYXZlcmFnZSB2YWx1ZXMgYWJvdXQgZGVyaXZhdGl2ZQorCQkJZG91YmxlW10gc0F2ZyA9IG5ldyBkb3VibGVbbnB0cy0xXTsKKwkJCWRvdWJsZVtdIGVBdmcgPSBuZXcgZG91YmxlW25wdHMtMV07CisJCQlkb3VibGVbXSBpQXZnID0gbmV3IGRvdWJsZVtucHRzLTFdOworCQkJZG91YmxlW10gckF2ZyA9IG5ldyBkb3VibGVbbnB0cy0xXTsKKwkJCWRvdWJsZVtdIHBBdmcgPSBuZXcgZG91YmxlW25wdHMtMV07CisJCQlkb3VibGVbXVtdIGRhdGFTID0gbmV3IGRvdWJsZVsyXVtucHRzIC0gMV07CisJCQlkb3VibGVbXVtdIGRhdGFFID0gbmV3IGRvdWJsZVsyXVtucHRzIC0gMV07CisJCQlkb3VibGVbXVtdIGRhdGFJID0gbmV3IGRvdWJsZVsyXVtucHRzIC0gMV07CisJCQlkb3VibGVbXVtdIGRhdGFSID0gbmV3IGRvdWJsZVsyXVtucHRzIC0gMV07CisJCQkgICAgICAgIAorCQkJLy8gZ2V0IHRoZSBsb2dhcml0aG1zCisJCQlkb3VibGUgY3V0b2ZmID0gMC4wMDAwMDAwMDA1OworCisJCQlmb3IoaW50IGogPSAwOyBqIDwgbnB0czsgaisrKXsKKwkJCQlpZihzW2pdID49IGN1dG9mZikgeworCQkJCQlsblNbal0gPSBNYXRoLmxvZyhzW2pdKTsKKwkJCQl9IGVsc2UgeworCQkJCQlsblNbal0gPSBNYXRoLmxvZyhjdXRvZmYpOyAgLy8gVE9ETyBmaXggdGhpcworCQkJCX0KKwkJCQlpZihlW2pdID49IGN1dG9mZikgeworCQkJCQlsbkVbal0gPSBNYXRoLmxvZyhlW2pdKTsKKwkJCQl9IGVsc2UgeworCQkJCQlsbkVbal0gPSBNYXRoLmxvZyhjdXRvZmYpOyAgLy8gVE9ETyBmaXggdGhpcworCQkJCX0KKwkJCQlpZihpW2pdID49IGN1dG9mZikgeworCQkJCQlsbklbal0gPSBNYXRoLmxvZyhpW2pdKTsKKwkJCQl9IGVsc2UgeworCQkJCQlsbklbal0gPSBNYXRoLmxvZyhjdXRvZmYpOyAgLy8gVE9ETyBmaXggdGhpcworCQkJCX0KKwkJCQlpZihyW2pdID49IGN1dG9mZikgeworCQkJCQlsblJbal0gPSBNYXRoLmxvZyhyW2pdKTsKKwkJCQl9IGVsc2UgeworCQkJCQlsblJbal0gPSBNYXRoLmxvZyhjdXRvZmYpOyAgLy8gVE9ETyBmaXggdGhpcworCQkJCX0KKwkJCX0KKworCQkJZG91YmxlIHNNYXggPSAwLjA7CisJCQlkb3VibGUgZU1heCA9IDAuMDsKKwkJCWRvdWJsZSBpTWF4ID0gMC4wOworCQkJZG91YmxlIHJNYXggPSAwLjA7CisJCQkvL2Rlcml2YXRpdmVzIG9mIGxvZ2FyaXRobXMgYW5kIGF2ZXJhZ2VzIG9mIG90aGVyIHBvaW50cworCQkJZm9yKGludCBqID0gMTtqIDwgbnB0cy0xO2orKykKKwkJCXsKKwkJCQlkbG5TW2otMV0gPSAobG5TW2pdLWxuU1tqLTFdKTsgLy8gZHQgPSAxCisJCQkJZGxuRVtqLTFdID0gKGxuRVtqXS1sbkVbai0xXSk7IC8vIGR0ID0gMQorCQkJCWRsbklbai0xXSA9IChsbklbal0tbG5JW2otMV0pOyAvLyBkdCA9IDEKKwkJCQlkbG5SW2otMV0gPSAobG5SW2pdLWxuUltqLTFdKTsgLy8gZHQgPSAxCisJCQkJCisJCQkJc0F2Z1tqLTFdID0gKHNbal0gKyBzW2otMV0pLzIuMDsKKwkJCQllQXZnW2otMV0gPSAoZVtqXSArIGVbai0xXSkvMi4wOworCQkJCWlBdmdbai0xXSA9IChpW2pdICsgaVtqLTFdKS8yLjA7CisJCQkJckF2Z1tqLTFdID0gKHJbal0gKyByW2otMV0pLzIuMDsKKwkJCQkJCisJCQkJCisJCQkJaWYoc0F2Z1tqLTFdID49IHNNYXgpIHNNYXggPSBzQXZnW2otMV07CisJCQkJaWYoZUF2Z1tqLTFdID49IGVNYXgpIGVNYXggPSBlQXZnW2otMV07CisJCQkJaWYoaUF2Z1tqLTFdID49IGlNYXgpIGlNYXggPSBpQXZnW2otMV07CisJCQkJaWYockF2Z1tqLTFdID49IHJNYXgpIHJNYXggPSByQXZnW2otMV07CisJCQkJCisJCQkJcEF2Z1tqLTFdID0gKHBbal0gKyBwW2otMV0pLzIuMDsKKwkJCX0KKwkKKwkJCS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwkJCQorCQkJLy8gZFMvZHQtPiBlcXVhdGlvbiAxLgorCQkJLy94LCB5IGZvciBsZWFzdCBzcXVhcmVzIGZpdHRpbmcgdG8gbGluZSB5ID0gYWxwaGEqeCAtIGJldGEKKwkJCS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworCQkJLy8KKwkJCUxpc3Q8RG91YmxlPiB4TGlzdDEgPSBuZXcgQXJyYXlMaXN0PERvdWJsZT4oKTsKKwkJCUxpc3Q8RG91YmxlPiB5TGlzdDEgPSBuZXcgQXJyYXlMaXN0PERvdWJsZT4oKTsKKwkJCUxpc3Q8RG91YmxlPiBmaXRMaXN0MSA9IG5ldyBBcnJheUxpc3Q8RG91YmxlPigpOworCQkJCisJCQlmb3IoaW50IGogPSAwOyBqIDwgbnB0cy0xOyBqKyspeworCQkJCWRvdWJsZSBzTm9ybSA9IHNBdmdbal0vc01heDsKKwkJCQlkb3VibGUgaU5vcm0gPSBpQXZnW2pdL2lNYXg7CisJCQkJZG91YmxlIHJOb3JtID0gckF2Z1tqXS9yTWF4OworCQkJCWRvdWJsZSBlTm9ybSA9IGVBdmdbal0vZU1heDsKKwkJCQlkYXRhU1swXVtqXSA9IHNOb3JtOworCQkJCWRhdGFJWzBdW2pdID0gaU5vcm07CisJCQkJZGF0YVJbMF1bal0gPSByTm9ybTsKKwkJCQlkYXRhRVswXVtqXSA9IGVOb3JtOworCQkJCS8vIGJ5IGRlZmF1bHQsIHNlbGVjdGVkIGRhdGEgaXMgdGhlIFNBTUUKKwkJCQlkYXRhU1sxXVtqXSA9IHNOb3JtOworCQkJCWRhdGFJWzFdW2pdID0gaU5vcm07CisJCQkJZGF0YVJbMV1bal0gPSByTm9ybTsKKwkJCQlkYXRhRVsxXVtqXSA9IGVOb3JtOworCQkJCQorCQkJCWlmKChzTm9ybTw9bWF4U3RocmVzaG9sZCkmJihzTm9ybT49bWluU3RocmVzaG9sZCkmJihpTm9ybT49bWluSXRocmVzaG9sZCkmJihyTm9ybTw9bWF4UnRocmVzaG9sZCkpIHsKKwkJCQkJCWRvdWJsZSBudW1lciA9IChwQXZnW2pdKnJBdmdbal0pIC8gc0F2Z1tqXTsKKwkJCQkJCWRvdWJsZSB4VmFsdWUgPSAgbnVtZXIvIGlBdmdbal07CisJCQkJCQlkb3VibGUgeVZhbHVlID0gKHBBdmdbal0qIGRsblNbal0pIC8gaUF2Z1tqXTsKKwkJCQkJCXhMaXN0MS5hZGQobmV3IERvdWJsZSh4VmFsdWUpICk7CisJCQkJCQl5TGlzdDEuYWRkKG5ldyBEb3VibGUoeVZhbHVlKSk7CisJCQkJfSBlbHNlIHsKKwkJCQkJLy8gKioqKiBmb3IgcGxvdHRpbmcgKioqKioqCisJCQkJCS8vIGhlcmUgd2UgZGVmaW5lIFMqLCBJKiwgUioKKwkJCQkJLy8gTk9UIFNlbGVjdGVkID0gMC4wCisJCQkJCWRhdGFTWzFdW2pdID0gMC4wOworCQkJCQlkYXRhSVsxXVtqXSA9IDAuMDsKKwkJCQkJZGF0YVJbMV1bal0gPSAwLjA7CisJCQkJCS8vLy8qKioqKioqKioqKioqKioqKiovLy8vLworCQkJCX0KKwkJCX0vLyBmb3IgagorCQkJCisJCQlMaW5lYXJMZWFzdFNxdWFyZXNGaXQgbGluZUZpdDEgID0gbnVsbDsKKwkJCWlmKHhMaXN0MS5zaXplKCkgPiAyKSB7CisJCQkJbGluZUZpdDEgPSBuZXcgTGluZWFyTGVhc3RTcXVhcmVzRml0KHhMaXN0MSx5TGlzdDEpOworCQkJCS8vIGluY3B0CisJCQkJZG91YmxlIGJldGEgCT0gLTEuMCpsaW5lRml0MS5nZXRJbnRlcmNlcHQoKTsgCisJCQkJZG91YmxlIHZhckJldGEgCT0gbGluZUZpdDEuZ2V0SW50ZXJjZXB0VmFyaWFuY2UoKTsKKwkJCQlkb3VibGUgc3RkQmV0YSAJPSBsaW5lRml0MS5nZXRJbnRlcmNlcHRTdGREZXYoKTsKKwkJCQkvLyBzbG9wZQorCQkJCWRvdWJsZSBhbHBoYSAJPSBsaW5lRml0MS5nZXRTbG9wZSgpOworCQkJCWRvdWJsZSB2YXJBbHBoYSA9IGxpbmVGaXQxLmdldFNsb3BlVmFyaWFuY2UoKTsKKwkJCQlkb3VibGUgc3RkQWxwaGEgPSBsaW5lRml0MS5nZXRTbG9wZVN0ZERldigpOworCQkJCWRvdWJsZSBuZXdiZXRhID0gYmV0YTsKKwkJCQlpZighdXNlRnJlcURlcGVuZGFudEJldGEpIG5ld2JldGEgKj0gKChNb2RlbFBhcmFtZXRlcnMuUkVGRVJFTkNFX1BPUFVMQVRJT05fREVOU0lUWSkvbG9jYWxEZW5zaXR5KTsKKwkJCQlmaXR0ZWRQYXJtcy5hZGRQYXJhbWV0ZXIoUGFyYW1ldGVyLkJFVEEsIG5ldyBQYXJhbWV0ZXIoUGFyYW1ldGVyLkJFVEEsIG5ld2JldGEsIHN0ZEJldGEsIHZhckJldGEpKTsKKwkJCQlmaXR0ZWRQYXJtcy5hZGRQYXJhbWV0ZXIoUGFyYW1ldGVyLkFMUEhBLCBuZXcgUGFyYW1ldGVyKFBhcmFtZXRlci5BTFBIQSwgYWxwaGEsIHN0ZEFscGhhLCB2YXJBbHBoYSkpOworCQkJCS8vIGZpdAorCQkJCWZvciAoaW50IGkgPSAwOyBpPCB4TGlzdDEuc2l6ZSgpOyBpICsrKSB7CisJCQkJCWRvdWJsZSB2YWwgPSAobGluZUZpdDEuZ2V0U2xvcGUoKSp4TGlzdDEuZ2V0KGkpLmRvdWJsZVZhbHVlKCkpICsgbGluZUZpdDEuZ2V0SW50ZXJjZXB0KCk7IAorCQkJCQlmaXRMaXN0MS5hZGQobmV3IERvdWJsZSh2YWwpKTsKKwkJCQl9CisJCQl9IC8vIGlmIGZpdCB2YWxpZAorCQkJZWxzZSB7CisJCQkJcmVqZWN0Q291bnQgKz0gMS4wOworCQkJfQorCQkJCisJCisJCQkvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKwkJCS8vRXF1YXRpb24gMiArPiBkRS9kdCBzZWNvbmQgZml0IGZvciBiZXRhIGFuZCBlcHNpbG9uCisJCQlMaXN0PERvdWJsZT4geExpc3QyID0gbmV3IEFycmF5TGlzdDxEb3VibGU+KCk7CisJCQlMaXN0PERvdWJsZT4geUxpc3QyID0gbmV3IEFycmF5TGlzdDxEb3VibGU+KCk7CisJCQlMaXN0PERvdWJsZT4gZml0TGlzdDIgPSBuZXcgQXJyYXlMaXN0PERvdWJsZT4oKTsKKwkJCQorCQkJLy94LCB5IGZvciBsZWFzdCBzcXVhcmVzIGZpdHRpbmcgdG8gbGluZSB5ID0gYmV0YSp4IC0gZXBzaWxvbgorCQkJZm9yKGludCBqID0gMDsgaiA8IG5wdHMtMTsgaisrKXsKKwkJCQlkb3VibGUgc05vcm0gPSBzQXZnW2pdL3NNYXg7CisJCQkJLy9kb3VibGUgaU5vcm0gPSBpQXZnW2pdL2lNYXg7CisJCQkJZG91YmxlIGVOb3JtID0gZUF2Z1tqXS9lTWF4OworCQkJCWlmKChzTm9ybTw9bWF4U3RocmVzaG9sZCkmJihzTm9ybT49bWluU3RocmVzaG9sZCkmJihlTm9ybT49bWluRXRocmVzaG9sZCkgKSB7CisJCQkJCS8vIGlmIGRhdGEgaW4gcmFuZ2UKKwkJCQkJZG91YmxlIHhWYWx1ZSA9IChzQXZnW2pdICogaUF2Z1tqXSkgLyAocEF2Z1tqXSplQXZnW2pdKTsKKwkJCQkJZG91YmxlIHlWYWx1ZSA9IGRsbkVbal07CisJCQkJCXhMaXN0Mi5hZGQobmV3IERvdWJsZSh4VmFsdWUpKTsKKwkJCQkJeUxpc3QyLmFkZChuZXcgRG91YmxlKHlWYWx1ZSkpOworCQkJCX0gZWxzZSB7CisJCQkJCS8vICoqKiogZm9yIHBsb3R0aW5nICoqKioqKgorCQkJCQkvLyBoZXJlIHdlIGRlZmluZSBFKgorCQkJCQkvLyBOT1QgU2VsZWN0ZWQgPSAwLjAKKwkJCQkJZGF0YUVbMV1bal0gPSAwLjA7CisJCQkJCS8vLy8qKioqKioqKioqKioqKioqKiovLy8vLworCQkJCX0KKwkJCX0KKwkJCS8vIFRPRE86ICBQbG90IHJlc3RyaWN0ZWQgZGF0YQorCQkJTGluZWFyTGVhc3RTcXVhcmVzRml0IGxpbmVGaXQyICA9IG51bGw7CisJCQlpZih4TGlzdDIuc2l6ZSgpID4gMikgeworCQkJCWxpbmVGaXQyID0gbmV3IExpbmVhckxlYXN0U3F1YXJlc0ZpdCh4TGlzdDIseUxpc3QyKTsKKwkJCQkvLyBpbmNwdAorCQkJCWRvdWJsZSBlcHNpbG9uCQk9IC0xLjAqbGluZUZpdDIuZ2V0SW50ZXJjZXB0KCk7IAorCQkJCWRvdWJsZSB2YXJFcHNpbG9uIAk9IGxpbmVGaXQyLmdldEludGVyY2VwdFZhcmlhbmNlKCk7CisJCQkJZG91YmxlIHN0ZEVwc2lsb24gCT0gbGluZUZpdDIuZ2V0SW50ZXJjZXB0U3RkRGV2KCk7CisJCQkJLy8gc2xvcGUKKwkJCQlkb3VibGUgYmV0YTIgCQk9IGxpbmVGaXQyLmdldFNsb3BlKCk7CisJCQkJZG91YmxlIHZhckJldGEyCQk9IGxpbmVGaXQyLmdldFNsb3BlVmFyaWFuY2UoKTsKKwkJCQlkb3VibGUgc3RkQmV0YTIgCT0gbGluZUZpdDIuZ2V0U2xvcGVTdGREZXYoKTsKKwkJCQlkb3VibGUgbmV3YmV0YTIgPSBiZXRhMiA7CisJCQkJaWYoIXVzZUZyZXFEZXBlbmRhbnRCZXRhKSBuZXdiZXRhMiAqPSAoKE1vZGVsUGFyYW1ldGVycy5SRUZFUkVOQ0VfUE9QVUxBVElPTl9ERU5TSVRZKS9sb2NhbERlbnNpdHkpOworCQkJCWZpdHRlZFBhcm1zLmFkZFBhcmFtZXRlcihQYXJhbWV0ZXIuQkVUQTIsIG5ldyBQYXJhbWV0ZXIoUGFyYW1ldGVyLkJFVEEyLCBuZXdiZXRhMiwgc3RkQmV0YTIsIHZhckJldGEyKSk7CisJCQkJZml0dGVkUGFybXMuYWRkUGFyYW1ldGVyKFBhcmFtZXRlci5FUFNJTE9OLCBuZXcgUGFyYW1ldGVyKFBhcmFtZXRlci5FUFNJTE9OLCBlcHNpbG9uLCBzdGRFcHNpbG9uLCB2YXJFcHNpbG9uKSk7CisJCQkJLy8gZml0IDIKKwkJCQlmb3IgKGludCBpID0gMDsgaTwgeExpc3QyLnNpemUoKTsgaSArKykgeworCQkJCQlkb3VibGUgdmFsID0gKGxpbmVGaXQyLmdldFNsb3BlKCkqeExpc3QyLmdldChpKS5kb3VibGVWYWx1ZSgpKSArIGxpbmVGaXQyLmdldEludGVyY2VwdCgpOyAKKwkJCQkJZml0TGlzdDIuYWRkKG5ldyBEb3VibGUodmFsKSk7CisJCQkJfQorCQkJfS8vIGlmIGZpdCB2YWxpZAorCQkJZWxzZSB7CisJCQkJcmVqZWN0Q291bnQgKz0gMS4wOworCQkJfQorCQkJCisJCQkKKwkJCQorCQkJLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworCQkJLy9FcXVhdGlvbiAzLiB0aGlyZCBmaW5kIGVwc2lsb24gYW5kIGdhbW1hCisJCQlMaXN0PERvdWJsZT4geExpc3QzID0gbmV3IEFycmF5TGlzdDxEb3VibGU+KCk7CisJCQlMaXN0PERvdWJsZT4geUxpc3QzID0gbmV3IEFycmF5TGlzdDxEb3VibGU+KCk7CisJCQlMaXN0PERvdWJsZT4gZml0TGlzdDMgPSBuZXcgQXJyYXlMaXN0PERvdWJsZT4oKTsKKwkJCQorCQkJLy9kZXJpdmF0aXZlcyBvZiBhbGwgb3RoZXIgcG9pbnRzCisJCQlmb3IoaW50IGogPSAwO2ogPCBucHRzLTE7aisrKQorCQkJeworCQkJCWRvdWJsZSBpTm9ybSA9IGlBdmdbal0vaU1heDsKKwkJCQlkb3VibGUgZU5vcm0gPSBlQXZnW2pdL2VNYXg7CisJCQkJaWYoKGlOb3JtPj1taW5JdGhyZXNob2xkKSYmKGVOb3JtPj1taW5FdGhyZXNob2xkKSApIHsKKwkJCQkJeExpc3QzLmFkZChuZXcgRG91YmxlKGVBdmdbal0gLyBpQXZnW2pdICkgKTsKKwkJCQkJeUxpc3QzLmFkZChuZXcgRG91YmxlKGRsbklbal0pKTsKKwkJCQl9CisJCQl9CisJCQkvLyBUT0RPOiAgUGxvdCByZXN0cmljdGVkIGRhdGEKKwkJCUxpbmVhckxlYXN0U3F1YXJlc0ZpdCBsaW5lRml0MyA9IG51bGw7CisJCQlpZih4TGlzdDMuc2l6ZSgpID4gMikgeworCQkJCWxpbmVGaXQzID0gbmV3IExpbmVhckxlYXN0U3F1YXJlc0ZpdCh4TGlzdDMseUxpc3QzKTsKKwkJCQkvLyBpbmNwdAorCQkJCWRvdWJsZSBnYW1tYQkJPSAtMS4wKmxpbmVGaXQzLmdldEludGVyY2VwdCgpOyAKKwkJCQlkb3VibGUgdmFyR2FtbWEgCT0gbGluZUZpdDMuZ2V0SW50ZXJjZXB0VmFyaWFuY2UoKTsKKwkJCQlkb3VibGUgc3RkR2FtbWEgCT0gbGluZUZpdDMuZ2V0SW50ZXJjZXB0U3RkRGV2KCk7CisJCQkJLy8gc2xvcGUKKwkJCQlkb3VibGUgZXBzaWxvbjIgCQk9IGxpbmVGaXQzLmdldFNsb3BlKCk7CisJCQkJZG91YmxlIHZhckVwc2lsb24yCQk9IGxpbmVGaXQzLmdldFNsb3BlVmFyaWFuY2UoKTsKKwkJCQlkb3VibGUgc3RkRXBzaWxvbjIgCQk9IGxpbmVGaXQzLmdldFNsb3BlU3RkRGV2KCk7CisJCQkJZml0dGVkUGFybXMuYWRkUGFyYW1ldGVyKFBhcmFtZXRlci5HQU1NQSwgbmV3IFBhcmFtZXRlcihQYXJhbWV0ZXIuR0FNTUEsIGdhbW1hLCBzdGRHYW1tYSwgdmFyR2FtbWEpKTsKKwkJCQlmaXR0ZWRQYXJtcy5hZGRQYXJhbWV0ZXIoUGFyYW1ldGVyLkVQU0lMT04yLCBuZXcgUGFyYW1ldGVyKFBhcmFtZXRlci5FUFNJTE9OMiwgZXBzaWxvbjIsIHN0ZEVwc2lsb24yLCB2YXJFcHNpbG9uMikpOwkJCisJCQkJLy8gZml0IDMKKwkJCQlmb3IgKGludCBpID0gMDsgaTwgeExpc3QzLnNpemUoKTsgaSArKykgeworCQkJCQlkb3VibGUgdmFsID0gKGxpbmVGaXQzLmdldFNsb3BlKCkqeExpc3QzLmdldChpKS5kb3VibGVWYWx1ZSgpKSArIGxpbmVGaXQzLmdldEludGVyY2VwdCgpOyAKKwkJCQkJZml0TGlzdDMuYWRkKG5ldyBEb3VibGUodmFsKSk7CisJCQkJfQorCQkJfS8vIGlmIGZpdCB2YWxpZAorCQkJZWxzZSB7CisJCQkJcmVqZWN0Q291bnQgKz0gMS4wOworCQkJfQorCQkJCisJCQorCQkJLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworCQkJLy8gRXF1YXRpb24gNC4gIGZpbmQgZ2FtbWEgYW5kIGFscGhhCisJCQkvLyBsZWFzdCBzcXVhcmVzIGZpdHRpbmcgdG8gbGluZSB5ID0gZ2FtbWEqeCAtIGFscGhhCisJCQlMaXN0PERvdWJsZT4geExpc3Q0ID0gbmV3IEFycmF5TGlzdDxEb3VibGU+KCk7CisJCQlMaXN0PERvdWJsZT4geUxpc3Q0ID0gbmV3IEFycmF5TGlzdDxEb3VibGU+KCk7CisJCQlMaXN0PERvdWJsZT4gZml0TGlzdDQgPSBuZXcgQXJyYXlMaXN0PERvdWJsZT4oKTsKKwkJCQorCQkJLy9kZXJpdmF0aXZlcyBvZiBhbGwgb3RoZXIgcG9pbnRzCisJCQlmb3IoaW50IGogPSAwO2ogPCBucHRzLTE7aisrKSB7CisJCQkJZG91YmxlIGlOb3JtID0gaUF2Z1tqXS9pTWF4OworCQkJCWRvdWJsZSByTm9ybSA9IHJBdmdbal0vck1heDsKKwkJCQlpZigoaU5vcm0+PW1pbkl0aHJlc2hvbGQpJiYock5vcm0+PW1pblJ0aHJlc2hvbGQpJiYock5vcm08PW1heFJ0aHJlc2hvbGQpICkgeworCQkJCQl4TGlzdDQuYWRkKG5ldyBEb3VibGUoaUF2Z1tqXSAvIHJBdmdbal0gKSApOworCQkJCQl5TGlzdDQuYWRkKG5ldyBEb3VibGUoZGxuUltqXSkpOworCQkJCX0KKwkJCX0KKwkJCS8vIFRPRE86ICBQbG90IHJlc3RyaWN0ZWQgZGF0YQorCQkJTGluZWFyTGVhc3RTcXVhcmVzRml0IGxpbmVGaXQ0ID0gbnVsbDsKKwkJCWlmKHhMaXN0NC5zaXplKCkgPiAyKSB7CisJCQkJbGluZUZpdDQgPSBuZXcgTGluZWFyTGVhc3RTcXVhcmVzRml0KHhMaXN0NCx5TGlzdDQpOworCQkJCS8vIGluY3B0CisJCQkJLy8gVE9ETyB3aHkgaXMgdGhpcyBjb21pbmcgb3V0IG5lZ2F0aXZlIHNvbWV0aW1lcz8KKwkJCQlkb3VibGUgYWxwaGEyIAkJPSBNYXRoLmFicygtMS4wKmxpbmVGaXQ0LmdldEludGVyY2VwdCgpKTsKKwkJCQlkb3VibGUgdmFyQWxwaGEyCT0gbGluZUZpdDQuZ2V0SW50ZXJjZXB0VmFyaWFuY2UoKTsKKwkJCQlkb3VibGUgc3RkQWxwaGEyCT0gbGluZUZpdDQuZ2V0SW50ZXJjZXB0U3RkRGV2KCk7CisJCQkJLy8gc2xvcGUKKwkJCQlkb3VibGUgZ2FtbWEyCQkJPSBsaW5lRml0NC5nZXRTbG9wZSgpOworCQkJCWRvdWJsZSB2YXJHYW1tYTIJCT0gbGluZUZpdDQuZ2V0U2xvcGVWYXJpYW5jZSgpOworCQkJCWRvdWJsZSBzdGRHYW1tYTIgCQk9IGxpbmVGaXQ0LmdldFNsb3BlU3RkRGV2KCk7CisJCQkJZml0dGVkUGFybXMuYWRkUGFyYW1ldGVyKFBhcmFtZXRlci5BTFBIQTIsIG5ldyBQYXJhbWV0ZXIoUGFyYW1ldGVyLkFMUEhBMiwgYWxwaGEyLCBzdGRBbHBoYTIsIHZhckFscGhhMikpOworCQkJCWZpdHRlZFBhcm1zLmFkZFBhcmFtZXRlcihQYXJhbWV0ZXIuR0FNTUEyLCBuZXcgUGFyYW1ldGVyKFBhcmFtZXRlci5HQU1NQTIsIGdhbW1hMiwgc3RkR2FtbWEyLCB2YXJHYW1tYTIpKTsKKwkJCQkvLyBmaXQgNAorCQkJCWZvciAoaW50IGkgPSAwOyBpPCB4TGlzdDQuc2l6ZSgpOyBpICsrKSB7CisJCQkJCWRvdWJsZSB2YWwgPSAobGluZUZpdDQuZ2V0U2xvcGUoKSp4TGlzdDQuZ2V0KGkpLmRvdWJsZVZhbHVlKCkpICsgbGluZUZpdDQuZ2V0SW50ZXJjZXB0KCk7IAorCQkJCQlmaXRMaXN0NC5hZGQobmV3IERvdWJsZSh2YWwpKTsKKwkJCQl9CisJCQl9Ly8gaWYgZml0IHZhbGlkCisJCQllbHNlIHsKKwkJCQlyZWplY3RDb3VudCArPSAxLjA7CisJCQl9CisJCQkJCisJCQkvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisJCQkvLyBET05FCisJCQkvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisJCQlmaXR0ZWRQYXJtcy5hZGRQYXJhbWV0ZXIoUGFyYW1ldGVyLlJFSkVDVCwgbmV3IFBhcmFtZXRlcihQYXJhbWV0ZXIuUkVKRUNULCByZWplY3RDb3VudCkpOwkKKwkJCWRhdGFUb1Bsb3QuYWRkKGRhdGFTKTsKKwkJCWRhdGFUb1Bsb3QuYWRkKGRhdGFJKTsKKwkJCWRhdGFUb1Bsb3QuYWRkKGRhdGFSKTsKKwkJCWRhdGFUb1Bsb3QuYWRkKGRhdGFFKTsKKwkJCWZpdHRlZFBhcm1zLmFkZFNlbGVjdGVkRGF0YShsb2NhdGlvbklELCBkYXRhVG9QbG90KTsKKwkJCQorCQkJCisJCQlkb3VibGVbXVtdIHJlZ3Jlc3Npb24xID0gZ2V0U29ydGVkUmVncmVzc2lvbih4TGlzdDEsIHlMaXN0MSk7IAorCQkJZG91YmxlW11bXSByZWdyZXNzaW9uMiA9IGdldFNvcnRlZFJlZ3Jlc3Npb24oeExpc3QyLCB5TGlzdDIpOyAKKwkJCWRvdWJsZVtdW10gcmVncmVzc2lvbjMgPSBnZXRTb3J0ZWRSZWdyZXNzaW9uKHhMaXN0MywgeUxpc3QzKTsgCisJCQlkb3VibGVbXVtdIHJlZ3Jlc3Npb240ID0gZ2V0U29ydGVkUmVncmVzc2lvbih4TGlzdDQsIHlMaXN0NCk7IAorCQkJCisJCQlkb3VibGVbXVtdIGZpdDEgPSBnZXRTb3J0ZWRSZWdyZXNzaW9uKHhMaXN0MSwgZml0TGlzdDEpOyAKKwkJCWRvdWJsZVtdW10gZml0MiA9IGdldFNvcnRlZFJlZ3Jlc3Npb24oeExpc3QyLCBmaXRMaXN0Mik7IAorCQkJZG91YmxlW11bXSBmaXQzID0gZ2V0U29ydGVkUmVncmVzc2lvbih4TGlzdDMsIGZpdExpc3QzKTsgCisJCQlkb3VibGVbXVtdIGZpdDQgPSBnZXRTb3J0ZWRSZWdyZXNzaW9uKHhMaXN0NCwgZml0TGlzdDQpOyAKKwkJCQorCQkJcmVncmVzc2lvblZhbHVlcy5hZGQocmVncmVzc2lvbjEpOworCQkJcmVncmVzc2lvblZhbHVlcy5hZGQocmVncmVzc2lvbjIpOworCQkJcmVncmVzc2lvblZhbHVlcy5hZGQocmVncmVzc2lvbjMpOworCQkJcmVncmVzc2lvblZhbHVlcy5hZGQocmVncmVzc2lvbjQpOworCQkJCisJCQkKKwkJCWZpdHRlZFZhbHVlcy5hZGQoZml0MSk7CisJCQlmaXR0ZWRWYWx1ZXMuYWRkKGZpdDIpOworCQkJZml0dGVkVmFsdWVzLmFkZChmaXQzKTsKKwkJCWZpdHRlZFZhbHVlcy5hZGQoZml0NCk7CisJCQkKKwkJCWZpdHRlZFBhcm1zLmFkZFJlZ3Jlc3Npb25EYXRhKGxvY2F0aW9uSUQsIHJlZ3Jlc3Npb25WYWx1ZXMpOworCQkJZml0dGVkUGFybXMuYWRkRml0dGVkRGF0YShsb2NhdGlvbklELCBmaXR0ZWRWYWx1ZXMpOworCQkJCisJCQkKKwkJcmV0dXJuIGZpdHRlZFBhcm1zOworCX0gLy8gZXN0aW1hdGUKKwkKKwkKKworCQorCQorCS8qKgorCSAqIFNFSVIgbW9kZWxzIGhhdmUgNCBwcm9wZXJ0aWVzCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnV0aWwuYW5hbHlzaXMuUGFyYW1ldGVyRXN0aW1hdG9yI2dldE51bVByb3BlcnRpZXMoKQorCSAqLworCXB1YmxpYyBpbnQgZ2V0TnVtUHJvcGVydGllcygpIHsKKwkJcmV0dXJuIDQ7CisJfQorCit9CmRpZmYgLS1naXQgYS9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLnV0aWwuYW5hbHlzaXMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdXRpbC9hbmFseXNpcy9TSVJwYXJhbWV0ZXJFc3RpbWF0b3IuamF2YSBiL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0udXRpbC5hbmFseXNpcy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91dGlsL2FuYWx5c2lzL1NJUnBhcmFtZXRlckVzdGltYXRvci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg3ZGRmNDIKLS0tIC9kZXYvbnVsbAorKysgYi9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLnV0aWwuYW5hbHlzaXMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdXRpbC9hbmFseXNpcy9TSVJwYXJhbWV0ZXJFc3RpbWF0b3IuamF2YQpAQCAtMCwwICsxLDM0OSBAQAorCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0udXRpbC5hbmFseXNpczsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNywgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OworaW1wb3J0IGphdmEudXRpbC5MaXN0OworCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5pbXBsLlJlZmVyZW5jZVNjZW5hcmlvRGF0YU1hcEltcGwuUmVmZXJlbmNlU2NlbmFyaW9EYXRhSW5zdGFuY2U7CisKKy8qKgorICogRXN0aW1hdGUgcGFyYW1ldGVycyBmb3IgYW4gU0lSIG1vZGVsCisgKiAKKyAqCisgKi8KK3B1YmxpYyBjbGFzcyBTSVJwYXJhbWV0ZXJFc3RpbWF0b3IgZXh0ZW5kcyBQYXJhbWV0ZXJFc3RpbWF0b3J7CisKKwkvLyBVbmlxdWUgc3RhdGUgZm9yIHRoaXMgZXN0aW1hdG9yCisJZG91YmxlIFtdIHI7CisJCisJc3RhdGljIGZpbmFsIGRvdWJsZSBNSU5DVVRPRkYgPSAwLjAwNTsKKwkKKwkvKioKKwkgKiBAcGFyYW0gZGF0YQorCSAqLworCXB1YmxpYyBTSVJwYXJhbWV0ZXJFc3RpbWF0b3IoUmVmZXJlbmNlU2NlbmFyaW9EYXRhSW5zdGFuY2UgZGF0YSkgeworCQkKKwkJc3VwZXIoZGF0YSk7CisJCQorCQlMaXN0PERvdWJsZT4gc1RvRml0ID0gbmV3IEFycmF5TGlzdDxEb3VibGU+KCk7CisJCUxpc3Q8RG91YmxlPiBpVG9GaXQgPSBuZXcgQXJyYXlMaXN0PERvdWJsZT4oKTsKKwkJTGlzdDxEb3VibGU+IHJUb0ZpdCA9IG5ldyBBcnJheUxpc3Q8RG91YmxlPigpOworCQkKKwkJTGlzdDxEb3VibGU+IHNMaXN0ID0gZGF0YS5nZXRTdG90YWxzKCk7CisJCUxpc3Q8RG91YmxlPiBpTGlzdCA9IGRhdGEuZ2V0SXRvdGFscygpOworCQlMaXN0PERvdWJsZT4gckxpc3QgPSBkYXRhLmdldFJ0b3RhbHMoKTsKKwkJCisJCS8vIFRvRG86IFdoeSBhcmUgd2Ugc2tpcHBpbmcgdGhlIGZpcnN0IHZhbHVlPworCQlmb3IgKGludCBpY291bnQgPSAxOyBpY291bnQgPCBpTGlzdC5zaXplKCk7IGljb3VudCArKykgeworCQkJCWlUb0ZpdC5hZGQoaUxpc3QuZ2V0KGljb3VudCkpOworCQkJCXNUb0ZpdC5hZGQoc0xpc3QuZ2V0KGljb3VudCkpOworCQkJCXJUb0ZpdC5hZGQockxpc3QuZ2V0KGljb3VudCkpOworCQl9CisJCQorCQl0aGlzLm51bURhdGFQb2ludHMgPSBpVG9GaXQuc2l6ZSgpOworCQlpZihudW1EYXRhUG9pbnRzIDwgTUlOU0laRSkgcmV0dXJuOworCQlkYXRhVmFsaWQgPSB0cnVlOworCQl0aGlzLnAgPSBuZXcgZG91YmxlW3RoaXMubnVtRGF0YVBvaW50c107CisJCXRoaXMucyA9IG5ldyBkb3VibGVbdGhpcy5udW1EYXRhUG9pbnRzXTsKKwkJdGhpcy5pID0gbmV3IGRvdWJsZVt0aGlzLm51bURhdGFQb2ludHNdOworCQl0aGlzLnIgPSBuZXcgZG91YmxlW3RoaXMubnVtRGF0YVBvaW50c107CisJCXRoaXMudCA9IG5ldyBkb3VibGVbdGhpcy5udW1EYXRhUG9pbnRzXTsKKwkJIAorCQlmb3IgKGludCBpY291bnQgPSAwOyBpY291bnQgPCB0aGlzLm51bURhdGFQb2ludHM7IGljb3VudCArKykgeworCQkJc1tpY291bnRdID0gc1RvRml0LmdldChpY291bnQpLmRvdWJsZVZhbHVlKCk7CisJCQlpW2ljb3VudF0gPSBpVG9GaXQuZ2V0KGljb3VudCkuZG91YmxlVmFsdWUoKTsKKwkJCXJbaWNvdW50XSA9IHJUb0ZpdC5nZXQoaWNvdW50KS5kb3VibGVWYWx1ZSgpOworCQkJcFtpY291bnRdID0gc1tpY291bnRdK2lbaWNvdW50XStyW2ljb3VudF07CisJCQl0W2ljb3VudF0gPSBpY291bnQ7CisJCX0vLyBmb3IgaWNvdW50CisJfS8vIGNvbnN0cnVjdG9yCisKKworCS8qKgorCSAqIEVzdGltYXRlIHRoZSBwYXJhbWV0ZXJzCisJICogQHBhcmFtIGxvY2FsRGVuc2l0eSAKKwkgKiBAcGFyYW0gbG9jYWxQb3B1bGF0aW9uIAorCSAqIEBwYXJhbSBsb2NhdGlvbklEIAorCSAqIEByZXR1cm4gdGhlIE1vZGVsUGFyYW1ldGVycyBlc3RpbWF0ZQorCSAqLworCXB1YmxpYyBNb2RlbFBhcmFtZXRlcnMgZXN0aW1hdGUoZG91YmxlIGxvY2FsRGVuc2l0eSwgZG91YmxlIGxvY2FsUG9wdWxhdGlvbiwgU3RyaW5nIGxvY2F0aW9uSUQpIHsKKworCQlNb2RlbFBhcmFtZXRlcnMgZml0dGVkUGFybXMgPSBuZXcgTW9kZWxQYXJhbWV0ZXJzKCk7CisJCQorCQkvL2RvdWJsZSByZXBvcnRCZXRhMSA9IDA7CisJCS8vZG91YmxlIHJlcG9ydEJldGEyID0gMDsKKwkJCisJCQkJCisJCWludCBucHRzID0gcy5sZW5ndGg7CisJCWFzc2VydChucHRzPT1pLmxlbmd0aCk7CisJCWFzc2VydChucHRzPT1yLmxlbmd0aCk7CisJCQorCQkJZG91YmxlW10gbG5TID0gbmV3IGRvdWJsZVtucHRzXTsKKwkJCWRvdWJsZVtdIGRsblMgPSBuZXcgZG91YmxlW25wdHMtMV07CisJCQlkb3VibGVbXSBsbkkgPSBuZXcgZG91YmxlW25wdHNdOworCQkJZG91YmxlW10gZGxuSSA9IG5ldyBkb3VibGVbbnB0cy0xXTsKKwkJCWRvdWJsZVtdIGxuUiA9IG5ldyBkb3VibGVbbnB0c107CisJCQlkb3VibGVbXSBkbG5SID0gbmV3IGRvdWJsZVtucHRzLTFdOworCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgCisJCQkKKwkJCQorCQkJLy8gYXZlcmFnZSB2YWx1ZXMgYWJvdXQgZGVyaXZhdGl2ZQorCQkJZG91YmxlW10gc0F2ZyA9IG5ldyBkb3VibGVbbnB0cy0xXTsKKwkJCWRvdWJsZVtdIGlBdmcgPSBuZXcgZG91YmxlW25wdHMtMV07CisJCQlkb3VibGVbXSByQXZnID0gbmV3IGRvdWJsZVtucHRzLTFdOworCQkJZG91YmxlW10gcEF2ZyA9IG5ldyBkb3VibGVbbnB0cy0xXTsKKwkJCWRvdWJsZVtdW10gZGF0YVMgPSBuZXcgZG91YmxlWzJdW25wdHMgLSAxXTsKKwkJCWRvdWJsZVtdW10gZGF0YUkgPSBuZXcgZG91YmxlWzJdW25wdHMgLSAxXTsKKwkJCWRvdWJsZVtdW10gZGF0YVIgPSBuZXcgZG91YmxlWzJdW25wdHMgLSAxXTsKKwkJCSAgICAgICAgCisJCQkvLyBnZXQgdGhlIGxvZ2FyaXRobXMKKwkJCWRvdWJsZSBjdXRvZmYgPSAwLjAwMDAwMDAwMDU7CisKKwkJCWZvcihpbnQgaiA9IDA7IGogPCBucHRzOyBqKyspeworCQkJCWlmKHNbal0gPj0gY3V0b2ZmKSB7CisJCQkJCWxuU1tqXSA9IE1hdGgubG9nKHNbal0pOworCQkJCX0gZWxzZSB7CisJCQkJCWxuU1tqXSA9IE1hdGgubG9nKGN1dG9mZik7ICAvLyBUT0RPIGZpeCB0aGlzCisJCQkJfQorCQkJCWlmKGlbal0gPj0gY3V0b2ZmKSB7CisJCQkJCWxuSVtqXSA9IE1hdGgubG9nKGlbal0pOworCQkJCX0gZWxzZSB7CisJCQkJCWxuSVtqXSA9IE1hdGgubG9nKGN1dG9mZik7ICAvLyBUT0RPIGZpeCB0aGlzCisJCQkJfQorCQkJCWlmKHJbal0gPj0gY3V0b2ZmKSB7CisJCQkJCWxuUltqXSA9IE1hdGgubG9nKHJbal0pOworCQkJCX0gZWxzZSB7CisJCQkJCWxuUltqXSA9IE1hdGgubG9nKGN1dG9mZik7ICAvLyBUT0RPIGZpeCB0aGlzCisJCQkJfQorCQkJfQorCQkJCisJCQkvL2Rlcml2YXRpdmVzIG9mIGxvZ2FyaXRobXMgYW5kIGF2ZXJhZ2VzIG9mIG90aGVyIHBvaW50cworCQkJZG91YmxlIHNNYXggPSAwLjA7CisJCQlkb3VibGUgaU1heCA9IDAuMDsKKwkJCWRvdWJsZSByTWF4ID0gMC4wOworCQkJZm9yKGludCBqID0gMTtqIDwgbnB0cy0xO2orKykKKwkJCXsKKwkJCQlkbG5TW2otMV0gPSAobG5TW2pdLWxuU1tqLTFdKTsgLy8gZHQgPSAxCisJCQkJCisJCQkJZGxuSVtqLTFdID0gKGxuSVtqXS1sbklbai0xXSk7IC8vIGR0ID0gMQorCQkJCWRsblJbai0xXSA9IChsblJbal0tbG5SW2otMV0pOyAvLyBkdCA9IDEKKwkJCQkKKwkJCQlzQXZnW2otMV0gPSAoc1tqXSArIHNbai0xXSkvMi4wOworCQkJCWlBdmdbai0xXSA9IChpW2pdICsgaVtqLTFdKS8yLjA7CisJCQkJckF2Z1tqLTFdID0gKHJbal0gKyByW2otMV0pLzIuMDsKKwkJCQkJCQkJCisJCQkJaWYoc0F2Z1tqLTFdID49IHNNYXgpIHNNYXggPSBzQXZnW2otMV07CisJCQkJaWYoaUF2Z1tqLTFdID49IGlNYXgpIGlNYXggPSBpQXZnW2otMV07CisJCQkJaWYockF2Z1tqLTFdID49IHJNYXgpIHJNYXggPSByQXZnW2otMV07CisJCQkJCisJCQkJcEF2Z1tqLTFdID0gKHBbal0gKyBwW2otMV0pLzIuMDsKKwkJCX0KKwkJCQorCQkJLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCQkJCisJCQkvLyBkUy9kdC0+IGVxdWF0aW9uIDEuCisJCQkvL3gsIHkgZm9yIGxlYXN0IHNxdWFyZXMgZml0dGluZyB0byBsaW5lIHkgPSBhbHBoYSp4IC0gYmV0YQorCQkJLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisJCQkvLworCQkJTGlzdDxEb3VibGU+IHhMaXN0MSA9IG5ldyBBcnJheUxpc3Q8RG91YmxlPigpOworCQkJTGlzdDxEb3VibGU+IHlMaXN0MSA9IG5ldyBBcnJheUxpc3Q8RG91YmxlPigpOworCQkJTGlzdDxEb3VibGU+IGZpdExpc3QxID0gbmV3IEFycmF5TGlzdDxEb3VibGU+KCk7CisJCQlmb3IoaW50IGogPSAwOyBqIDwgbnB0cy0xOyBqKyspeworCQkJCWRvdWJsZSBzTm9ybSA9IHNBdmdbal0vc01heDsKKwkJCQlkb3VibGUgaU5vcm0gPSBpQXZnW2pdL2lNYXg7CisJCQkJZG91YmxlIHJOb3JtID0gckF2Z1tqXS9yTWF4OworCQkJCQorCQkJCWRhdGFTWzBdW2pdID0gc05vcm07CisJCQkJZGF0YUlbMF1bal0gPSBpTm9ybTsKKwkJCQlkYXRhUlswXVtqXSA9IHJOb3JtOworCQkJCS8vIGJ5IGRlZmF1bHQsIHNlbGVjdGVkIGRhdGEgaXMgdGhlIFNBTUUKKwkJCQlkYXRhU1sxXVtqXSA9IHNOb3JtOworCQkJCWRhdGFJWzFdW2pdID0gaU5vcm07CisJCQkJZGF0YVJbMV1bal0gPSByTm9ybTsKKwkJCQkKKwkJCQlpZigoc05vcm08PW1heFN0aHJlc2hvbGQpJiYoc05vcm0+PW1pblN0aHJlc2hvbGQpJiYoaU5vcm0+PW1pbkl0aHJlc2hvbGQpJiYock5vcm08PW1heFJ0aHJlc2hvbGQpKSB7CisJCQkJCWRvdWJsZSBudW1lciA9IChwQXZnW2pdKnJBdmdbal0pIC8gc0F2Z1tqXTsKKwkJCQkJeExpc3QxLmFkZChuZXcgRG91YmxlKCBudW1lci8gaUF2Z1tqXSApICk7CisJCQkJCXlMaXN0MS5hZGQobmV3IERvdWJsZSggZGxuU1tqXSAqIChwQXZnW2pdL2lBdmdbal0pICApKTsKKwkJCQkJCisJCQkJfWVsc2UgeworCQkJCQkvLyAqKioqIGZvciBwbG90dGluZyAqKioqKioKKwkJCQkJLy8gaGVyZSB3ZSBkZWZpbmUgUyosIEkqLCBSKgorCQkJCQkvLyBOT1QgU2VsZWN0ZWQgPSAwLjAKKwkJCQkJZGF0YVNbMV1bal0gPSAwLjA7CisJCQkJCWRhdGFJWzFdW2pdID0gMC4wOworCQkJCQlkYXRhUlsxXVtqXSA9IDAuMDsKKwkJCQkJLy8vLyoqKioqKioqKioqKioqKioqKi8vLy8vCisJCQkJfQorCQkJfQorCQkJTGluZWFyTGVhc3RTcXVhcmVzRml0IGxpbmVGaXQxID0gbnVsbDsKKwkJCWlmKHhMaXN0MS5zaXplKCkgPjIpIHsKKwkJCQlsaW5lRml0MSA9IG5ldyBMaW5lYXJMZWFzdFNxdWFyZXNGaXQoeExpc3QxLHlMaXN0MSk7CisJCQkJLy8gaW5jcHQKKwkJCQlkb3VibGUgYmV0YSAJPSAtMS4wKmxpbmVGaXQxLmdldEludGVyY2VwdCgpOworCQkJCWRvdWJsZSB2YXJCZXRhIAk9IGxpbmVGaXQxLmdldEludGVyY2VwdFZhcmlhbmNlKCk7CisJCQkJZG91YmxlIHN0ZEJldGEgCT0gbGluZUZpdDEuZ2V0SW50ZXJjZXB0U3RkRGV2KCk7CisJCQkJLy8gc2xvcGUKKwkJCQlkb3VibGUgYWxwaGEgCT0gbGluZUZpdDEuZ2V0U2xvcGUoKTsKKwkJCQlkb3VibGUgdmFyQWxwaGEgPSBsaW5lRml0MS5nZXRTbG9wZVZhcmlhbmNlKCk7CisJCQkJZG91YmxlIHN0ZEFscGhhID0gbGluZUZpdDEuZ2V0U2xvcGVTdGREZXYoKTsKKwkJCQlkb3VibGUgbmV3YmV0YSA9IGJldGE7CisJCQkJLy9yZXBvcnRCZXRhMSA9IGJldGE7CisJCQkJaWYoIXVzZUZyZXFEZXBlbmRhbnRCZXRhKSBuZXdiZXRhICo9ICgoTW9kZWxQYXJhbWV0ZXJzLlJFRkVSRU5DRV9QT1BVTEFUSU9OX0RFTlNJVFkpL2xvY2FsRGVuc2l0eSk7CisJCQkJZml0dGVkUGFybXMuYWRkUGFyYW1ldGVyKFBhcmFtZXRlci5CRVRBLCBuZXcgUGFyYW1ldGVyKFBhcmFtZXRlci5CRVRBLCBuZXdiZXRhLCBzdGRCZXRhLCB2YXJCZXRhKSk7CisJCQkJZml0dGVkUGFybXMuYWRkUGFyYW1ldGVyKFBhcmFtZXRlci5BTFBIQSwgbmV3IFBhcmFtZXRlcihQYXJhbWV0ZXIuQUxQSEEsIGFscGhhLCBzdGRBbHBoYSwgdmFyQWxwaGEpKTsKKwkJCQkvL0FjdGl2YXRvci5sb2dJbmZvcm1hdGlvbigiYmV0YTEgPSAiK25ld2JldGErIiwgYWxwaGExID0gIithbHBoYSk7CisJCQkJCisJCQkJLy8gZml0IDEKKwkJCQlmb3IgKGludCBpID0gMDsgaTwgeExpc3QxLnNpemUoKTsgaSArKykgeworCQkJCQlkb3VibGUgdmFsID0gKC1saW5lRml0MS5nZXRTbG9wZSgpKnhMaXN0MS5nZXQoaSkuZG91YmxlVmFsdWUoKSkgKyBsaW5lRml0MS5nZXRJbnRlcmNlcHQoKTsgCisJCQkJCWZpdExpc3QxLmFkZChuZXcgRG91YmxlKHZhbCkpOworCQkJCX0KKwkJCX0vLyBpZiBmaXQgdmFsaWQKKwkJCWVsc2UgeworCQkJCXJlamVjdENvdW50ICs9IDEuMDsKKwkJCX0KKwkJCQorCQkJLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisJCQkvL0VxdWF0aW9uIDIgKz4gZEkvZHQgc2Vjb25kIGZpdCBmb3IgYmV0YSBhbmQgZXBzaWxvbgorCQkJTGlzdDxEb3VibGU+IHhMaXN0MiA9IG5ldyBBcnJheUxpc3Q8RG91YmxlPigpOworCQkJTGlzdDxEb3VibGU+IHlMaXN0MiA9IG5ldyBBcnJheUxpc3Q8RG91YmxlPigpOworCQkJTGlzdDxEb3VibGU+IGZpdExpc3QyID0gbmV3IEFycmF5TGlzdDxEb3VibGU+KCk7CisJCQkvL3gsIHkgZm9yIGxlYXN0IHNxdWFyZXMgZml0dGluZyB0byBsaW5lIHkgPSBiZXRhKnggLSBlcHNpbG9uCisJCQlmb3IoaW50IGogPSAwOyBqIDwgbnB0cy0xOyBqKyspeworCQkJCWRvdWJsZSBzTm9ybSA9IHNBdmdbal0vc01heDsKKwkJCQlkb3VibGUgaU5vcm0gPSBpQXZnW2pdL2lNYXg7CisJCQkJaWYoKHNOb3JtPD1tYXhTdGhyZXNob2xkKSYmKHNOb3JtPj1taW5TdGhyZXNob2xkKSYmKGlOb3JtPj1taW5JdGhyZXNob2xkKSApIHsKKwkJCQkJZG91YmxlIHJhdGlvID0gcEF2Z1tqXSAvIHNBdmdbal07CisJCQkJCXhMaXN0Mi5hZGQobmV3IERvdWJsZSggcmF0aW8gKSk7CisJCQkJCXlMaXN0Mi5hZGQobmV3IERvdWJsZShyYXRpbypkbG5JW2pdKSk7CisJCQkJfS8vIGlmIGRhdGEgaW4gcmFuZ2UKKwkJCX0KKwkJCS8vIFRPRE86ICBQbG90IHJlc3RyaWN0ZWQgZGF0YQorCQkJTGluZWFyTGVhc3RTcXVhcmVzRml0IGxpbmVGaXQyID0gbnVsbDsKKwkJCWlmKHhMaXN0Mi5zaXplKCkgPiAyKSB7CisJCQkJbGluZUZpdDIgPSBuZXcgTGluZWFyTGVhc3RTcXVhcmVzRml0KHhMaXN0Mix5TGlzdDIpOworCQkJCS8vIHNsb3BlCisJCQkJZG91YmxlIGdhbW1hCQk9IC0xLjAqIGxpbmVGaXQyLmdldFNsb3BlKCk7IAorCQkJCWRvdWJsZSB2YXJHYW1tYSAJPSBsaW5lRml0Mi5nZXRTbG9wZVZhcmlhbmNlKCk7CisJCQkJZG91YmxlIHN0ZEdhbW1hIAk9IGxpbmVGaXQyLmdldFNsb3BlU3RkRGV2KCk7CisJCQkJLy8gaW5jcHQKKwkJCQlkb3VibGUgYmV0YTIgCQk9IGxpbmVGaXQyLmdldEludGVyY2VwdCgpOworCQkJCWRvdWJsZSB2YXJCZXRhMgkJPSBsaW5lRml0Mi5nZXRJbnRlcmNlcHRWYXJpYW5jZSgpOworCQkJCWRvdWJsZSBzdGRCZXRhMiAJPSBsaW5lRml0Mi5nZXRJbnRlcmNlcHRTdGREZXYoKTsKKwkJCQlkb3VibGUgbmV3YmV0YTIgPSBiZXRhMjsKKwkJCQkvL3JlcG9ydEJldGEyID0gYmV0YTI7CisJCQkJaWYoIXVzZUZyZXFEZXBlbmRhbnRCZXRhKSBuZXdiZXRhMiAqPSAoKE1vZGVsUGFyYW1ldGVycy5SRUZFUkVOQ0VfUE9QVUxBVElPTl9ERU5TSVRZKS9sb2NhbERlbnNpdHkpOworCQkJCWZpdHRlZFBhcm1zLmFkZFBhcmFtZXRlcihQYXJhbWV0ZXIuQkVUQTIsIG5ldyBQYXJhbWV0ZXIoUGFyYW1ldGVyLkJFVEEyLCBuZXdiZXRhMiwgc3RkQmV0YTIsIHZhckJldGEyKSk7CisJCQkJZml0dGVkUGFybXMuYWRkUGFyYW1ldGVyKFBhcmFtZXRlci5HQU1NQSwgbmV3IFBhcmFtZXRlcihQYXJhbWV0ZXIuR0FNTUEsIGdhbW1hLCBzdGRHYW1tYSwgdmFyR2FtbWEpKTsKKwkJCQkKKwkJCQkvLyBmaXQgMgorCQkJCWZvciAoaW50IGkgPSAwOyBpPCB4TGlzdDIuc2l6ZSgpOyBpICsrKSB7CisJCQkJCWRvdWJsZSB2YWwgPSAobGluZUZpdDIuZ2V0U2xvcGUoKSp4TGlzdDIuZ2V0KGkpLmRvdWJsZVZhbHVlKCkpICsgbGluZUZpdDIuZ2V0SW50ZXJjZXB0KCk7IAorCQkJCQlmaXRMaXN0Mi5hZGQobmV3IERvdWJsZSh2YWwpKTsKKwkJCQl9CisJCQkJCisJCQkJLy9BY3RpdmF0b3IubG9nSW5mb3JtYXRpb24oImJldGEyID0gIituZXdiZXRhMisiLCBnYW1tYTEgPSAiK2dhbW1hKTsKKwkJCX0vLyBpZiBmaXQgdmFsaWQKKwkJCWVsc2UgeworCQkJCXJlamVjdENvdW50ICs9IDEuMDsKKwkJCX0KKwkJCQorCQkJCisJCQkvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisJCQkvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisJCQkvLyBFcXVhdGlvbiAzLiAgZmluZCBnYW1tYSBhbmQgYWxwaGEKKwkJCS8vIGxlYXN0IHNxdWFyZXMgZml0dGluZyB0byBsaW5lIHkgPSBnYW1tYSp4IC0gYWxwaGEKKwkJCUxpc3Q8RG91YmxlPiB4TGlzdDMgPSBuZXcgQXJyYXlMaXN0PERvdWJsZT4oKTsKKwkJCUxpc3Q8RG91YmxlPiB5TGlzdDMgPSBuZXcgQXJyYXlMaXN0PERvdWJsZT4oKTsKKwkJCUxpc3Q8RG91YmxlPiBmaXRMaXN0MyA9IG5ldyBBcnJheUxpc3Q8RG91YmxlPigpOworCQkJLy9kZXJpdmF0aXZlcyBvZiBhbGwgb3RoZXIgcG9pbnRzCisJCQlmb3IoaW50IGogPSAwO2ogPCBucHRzLTE7aisrKSB7CisJCQkJZG91YmxlIGlOb3JtID0gaUF2Z1tqXS9pTWF4OworCQkJCWRvdWJsZSByTm9ybSA9IHJBdmdbal0vck1heDsKKwkJCQlpZigoaU5vcm0+PW1pbkl0aHJlc2hvbGQpJiYock5vcm0+PW1pblJ0aHJlc2hvbGQpJiYock5vcm08PW1heFJ0aHJlc2hvbGQpICkgeworCQkJCQl4TGlzdDMuYWRkKG5ldyBEb3VibGUoaUF2Z1tqXSAvIHJBdmdbal0gKSApOworCQkJCQl5TGlzdDMuYWRkKG5ldyBEb3VibGUoZGxuUltqXSkpOworCQkJCX0KKwkJCX0KKwkJCS8vIFRPRE86ICBQbG90IHJlc3RyaWN0ZWQgZGF0YQorCQkJTGluZWFyTGVhc3RTcXVhcmVzRml0IGxpbmVGaXQzID0gbnVsbDsKKwkJCWlmKHhMaXN0My5zaXplKCkgPiAyKSB7CisJCQkJbGluZUZpdDMgPSBuZXcgTGluZWFyTGVhc3RTcXVhcmVzRml0KHhMaXN0Myx5TGlzdDMpOworCQkJCS8vIGluY3B0CisJCQkJLy8gVE9ETyB3aHkgaXMgdGhpcyBjb21pbmcgb3V0IG5lZ2F0aXZlIHNvbWV0aW1lcz8KKwkJCQlkb3VibGUgYWxwaGEyIAkJPSBNYXRoLmFicygtMS4wKmxpbmVGaXQzLmdldEludGVyY2VwdCgpKTsgCisJCQkJZG91YmxlIHZhckFscGhhMgk9IGxpbmVGaXQzLmdldEludGVyY2VwdFZhcmlhbmNlKCk7CisJCQkJZG91YmxlIHN0ZEFscGhhMgk9IGxpbmVGaXQzLmdldEludGVyY2VwdFN0ZERldigpOworCQkJCS8vIHNsb3BlCisJCQkJZG91YmxlIGdhbW1hMgkJCT0gbGluZUZpdDMuZ2V0U2xvcGUoKTsKKwkJCQlkb3VibGUgdmFyR2FtbWEyCQk9IGxpbmVGaXQzLmdldFNsb3BlVmFyaWFuY2UoKTsKKwkJCQlkb3VibGUgc3RkR2FtbWEyIAkJPSBsaW5lRml0My5nZXRTbG9wZVN0ZERldigpOworCQkJCWZpdHRlZFBhcm1zLmFkZFBhcmFtZXRlcihQYXJhbWV0ZXIuQUxQSEEyLCBuZXcgUGFyYW1ldGVyKFBhcmFtZXRlci5BTFBIQTIsIGFscGhhMiwgc3RkQWxwaGEyLCB2YXJBbHBoYTIpKTsKKwkJCQlmaXR0ZWRQYXJtcy5hZGRQYXJhbWV0ZXIoUGFyYW1ldGVyLkdBTU1BMiwgbmV3IFBhcmFtZXRlcihQYXJhbWV0ZXIuR0FNTUEyLCBnYW1tYTIsIHN0ZEdhbW1hMiwgdmFyR2FtbWEyKSk7CisJCQkJLy9BY3RpdmF0b3IubG9nSW5mb3JtYXRpb24oImFscGhhMiA9ICIrYWxwaGEyKyIsIGdhbW1hMiA9ICIrZ2FtbWEyKTsKKwkJCQkKKwkJCQkvLyBmaXQgMworCQkJCWZvciAoaW50IGkgPSAwOyBpPCB4TGlzdDMuc2l6ZSgpOyBpICsrKSB7CisJCQkJCWRvdWJsZSB2YWwgPSAobGluZUZpdDMuZ2V0U2xvcGUoKSp4TGlzdDMuZ2V0KGkpLmRvdWJsZVZhbHVlKCkpICsgbGluZUZpdDMuZ2V0SW50ZXJjZXB0KCk7IAorCQkJCQlmaXRMaXN0My5hZGQobmV3IERvdWJsZSh2YWwpKTsKKwkJCQl9CisJCQl9IGVsc2UgeworCQkJCXJlamVjdENvdW50ICs9IDEuMDsKKwkJCX0KKwkJCQorCQkJZml0dGVkUGFybXMuYWRkUGFyYW1ldGVyKFBhcmFtZXRlci5SRUpFQ1QsIG5ldyBQYXJhbWV0ZXIoUGFyYW1ldGVyLlJFSkVDVCwgcmVqZWN0Q291bnQpKTsJCisJCQkvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisJCQkvLyBET05FCisJCQkvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisJCQlkYXRhVG9QbG90LmFkZChkYXRhUyk7CisJCQlkYXRhVG9QbG90LmFkZChkYXRhSSk7CisJCQlkYXRhVG9QbG90LmFkZChkYXRhUik7CisJCQlmaXR0ZWRQYXJtcy5hZGRTZWxlY3RlZERhdGEobG9jYXRpb25JRCwgZGF0YVRvUGxvdCk7CisJCQkKKwkJCWRvdWJsZVtdW10gcmVncmVzc2lvbjEgPSBnZXRTb3J0ZWRSZWdyZXNzaW9uKHhMaXN0MSwgeUxpc3QxKTsgCisJCQlkb3VibGVbXVtdIHJlZ3Jlc3Npb24yID0gZ2V0U29ydGVkUmVncmVzc2lvbih4TGlzdDIsIHlMaXN0Mik7IAorCQkJZG91YmxlW11bXSByZWdyZXNzaW9uMyA9IGdldFNvcnRlZFJlZ3Jlc3Npb24oeExpc3QzLCB5TGlzdDMpOworCQkJCisJCQlkb3VibGVbXVtdIGZpdDEgPSBnZXRTb3J0ZWRSZWdyZXNzaW9uKHhMaXN0MSwgZml0TGlzdDEpOyAKKwkJCWRvdWJsZVtdW10gZml0MiA9IGdldFNvcnRlZFJlZ3Jlc3Npb24oeExpc3QyLCBmaXRMaXN0Mik7IAorCQkJZG91YmxlW11bXSBmaXQzID0gZ2V0U29ydGVkUmVncmVzc2lvbih4TGlzdDMsIGZpdExpc3QzKTsgCisJCQkKKwkJCXJlZ3Jlc3Npb25WYWx1ZXMuYWRkKHJlZ3Jlc3Npb24xKTsKKwkJCXJlZ3Jlc3Npb25WYWx1ZXMuYWRkKHJlZ3Jlc3Npb24yKTsKKwkJCXJlZ3Jlc3Npb25WYWx1ZXMuYWRkKHJlZ3Jlc3Npb24zKTsKKwkJCQorCQkJZml0dGVkVmFsdWVzLmFkZChmaXQxKTsKKwkJCWZpdHRlZFZhbHVlcy5hZGQoZml0Mik7CisJCQlmaXR0ZWRWYWx1ZXMuYWRkKGZpdDMpOworCQorCQkJZml0dGVkUGFybXMuYWRkUmVncmVzc2lvbkRhdGEobG9jYXRpb25JRCwgcmVncmVzc2lvblZhbHVlcyk7CisJCQlmaXR0ZWRQYXJtcy5hZGRGaXR0ZWREYXRhKGxvY2F0aW9uSUQsIGZpdHRlZFZhbHVlcyk7CisJCQkvL0FjdGl2YXRvci5sb2dJbmZvcm1hdGlvbigiIitsb2NhbFBvcHVsYXRpb24rIiwgIityZXBvcnRCZXRhMSsiLCAiK3JlcG9ydEJldGEyKTsKKwkJCQorCQlyZXR1cm4gZml0dGVkUGFybXM7CisJfSAvLyBlc3RpbWF0ZQorCQorCS8qKgorCSAqIFRoZSBjb250cm9sIG5lZWRzIHRoaXMgaW5mb3JtYXRpb24gYnV0IG11c3QgZ2V0IGl0IHRocm91Z2ggdGhlIGFuYWx5emVyIGZyb20gdGhlIEVzdGltYXRvcgorCSAqIGNyZWF0ZWQgYnkgdGhlIGZhY3RvcnkKKwkgKiBTSVIgbW9kZWxzIGhhdmUgMyBwcm9wZXJ0aWVzCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnV0aWwuYW5hbHlzaXMuUGFyYW1ldGVyRXN0aW1hdG9yI2dldE51bVByb3BlcnRpZXMoKQorCSAqLworCXB1YmxpYyBpbnQgZ2V0TnVtUHJvcGVydGllcygpIHsKKwkJcmV0dXJuIDM7CisJfQorCQorCQorCQorfQpkaWZmIC0tZ2l0IGEvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS51dGlsLmFuYWx5c2lzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3V0aWwvYW5hbHlzaXMvU0lwYXJhbWV0ZXJFc3RpbWF0b3IuamF2YSBiL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0udXRpbC5hbmFseXNpcy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91dGlsL2FuYWx5c2lzL1NJcGFyYW1ldGVyRXN0aW1hdG9yLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODM1YjRkMwotLS0gL2Rldi9udWxsCisrKyBiL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0udXRpbC5hbmFseXNpcy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91dGlsL2FuYWx5c2lzL1NJcGFyYW1ldGVyRXN0aW1hdG9yLmphdmEKQEAgLTAsMCArMSwyNTAgQEAKKworcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnV0aWwuYW5hbHlzaXM7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDcsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuaW1wbC5SZWZlcmVuY2VTY2VuYXJpb0RhdGFNYXBJbXBsLlJlZmVyZW5jZVNjZW5hcmlvRGF0YUluc3RhbmNlOworCisvKioKKyAqIEVzdGltYXRlIHBhcmFtZXRlcnMgZm9yIGFuIFNJUiBtb2RlbAorICogCisgKgorICovCitwdWJsaWMgY2xhc3MgU0lwYXJhbWV0ZXJFc3RpbWF0b3IgZXh0ZW5kcyBQYXJhbWV0ZXJFc3RpbWF0b3J7CisKKwkvKioKKwkgKiBAcGFyYW0gZGF0YSAKKwkgKi8KKwlwdWJsaWMgU0lwYXJhbWV0ZXJFc3RpbWF0b3IoUmVmZXJlbmNlU2NlbmFyaW9EYXRhSW5zdGFuY2UgZGF0YSkgeworCQlzdXBlcihkYXRhKTsKKwkJCisJCUxpc3Q8RG91YmxlPiBzVG9GaXQgPSBuZXcgQXJyYXlMaXN0PERvdWJsZT4oKTsKKwkJTGlzdDxEb3VibGU+IGlUb0ZpdCA9IG5ldyBBcnJheUxpc3Q8RG91YmxlPigpOworCQkKKwkJTGlzdDxEb3VibGU+IHNMaXN0ID0gZGF0YS5nZXRTdG90YWxzKCk7CisJCUxpc3Q8RG91YmxlPiBpTGlzdCA9IGRhdGEuZ2V0SXRvdGFscygpOworCQkKKwkJLy8gVG9EbzogV2h5IGFyZSB3ZSBza2lwcGluZyB0aGUgZmlyc3QgdmFsdWU/CisJCWZvciAoaW50IGljb3VudCA9IDE7IGljb3VudCA8IGlMaXN0LnNpemUoKTsgaWNvdW50ICsrKSB7CisJCQkJaVRvRml0LmFkZChpTGlzdC5nZXQoaWNvdW50KSk7CisJCQkJc1RvRml0LmFkZChzTGlzdC5nZXQoaWNvdW50KSk7CisJCX0KKwkJCisJCXRoaXMubnVtRGF0YVBvaW50cyA9IGlUb0ZpdC5zaXplKCk7CisJCWlmKG51bURhdGFQb2ludHMgPCBNSU5TSVpFKSByZXR1cm47CisJCWRhdGFWYWxpZCA9IHRydWU7CisJCXRoaXMucCA9IG5ldyBkb3VibGVbdGhpcy5udW1EYXRhUG9pbnRzXTsKKwkJdGhpcy5zID0gbmV3IGRvdWJsZVt0aGlzLm51bURhdGFQb2ludHNdOworCQl0aGlzLmkgPSBuZXcgZG91YmxlW3RoaXMubnVtRGF0YVBvaW50c107CisJCXRoaXMudCA9IG5ldyBkb3VibGVbdGhpcy5udW1EYXRhUG9pbnRzXTsKKworCQlmb3IgKGludCBpY291bnQgPSAwOyBpY291bnQgPCB0aGlzLm51bURhdGFQb2ludHM7IGljb3VudCArKykgeworCQkJc1tpY291bnRdID0gc1RvRml0LmdldChpY291bnQpLmRvdWJsZVZhbHVlKCk7CisJCQlpW2ljb3VudF0gPSBpVG9GaXQuZ2V0KGljb3VudCkuZG91YmxlVmFsdWUoKTsKKwkJCXBbaWNvdW50XSA9IHNbaWNvdW50XStpW2ljb3VudF07CisJCQl0W2ljb3VudF0gPSBpY291bnQ7CisJCX0vLyBmb3IgaWNvdW50CisJfQorCisJLyoqCisJICogRXN0aW1hdGUgdGhlIHBhcmFtZXRlcnMKKwkgKiBAcGFyYW0gbG9jYWxEZW5zaXR5IAorCSAqIEBwYXJhbSBsb2NhbFBvcHVsYXRpb24gCisJICogQHBhcmFtIGxvY2F0aW9uSUQgCisJICogQHJldHVybiB0aGUgTW9kZWxQYXJhbWV0ZXJzIGVzdGltYXRlCisJICovCisJcHVibGljIE1vZGVsUGFyYW1ldGVycyBlc3RpbWF0ZShkb3VibGUgbG9jYWxEZW5zaXR5LCBkb3VibGUgbG9jYWxQb3B1bGF0aW9uLCBTdHJpbmcgbG9jYXRpb25JRCkgeworCQkKKwkJTW9kZWxQYXJhbWV0ZXJzIGZpdHRlZFBhcm1zID0gbmV3IE1vZGVsUGFyYW1ldGVycygpOworCQkKKwkJaW50IG5wdHMgPSBzLmxlbmd0aDsKKwkJYXNzZXJ0KG5wdHM9PWkubGVuZ3RoKTsKKwkJCisJCQlkb3VibGVbXSBsblMgPSBuZXcgZG91YmxlW25wdHNdOworCQkJZG91YmxlW10gZGxuUyA9IG5ldyBkb3VibGVbbnB0cy0xXTsKKwkJCWRvdWJsZVtdIGxuSSA9IG5ldyBkb3VibGVbbnB0c107CisJCQlkb3VibGVbXSBkbG5JID0gbmV3IGRvdWJsZVtucHRzLTFdOworCQkJCisJCQkvLyBhdmVyYWdlIHZhbHVlcyBhYm91dCBkZXJpdmF0aXZlCisJCQlkb3VibGVbXSBzQXZnID0gbmV3IGRvdWJsZVtucHRzLTFdOworCQkJZG91YmxlW10gaUF2ZyA9IG5ldyBkb3VibGVbbnB0cy0xXTsKKwkJCWRvdWJsZVtdIHBBdmcgPSBuZXcgZG91YmxlW25wdHMtMV07CisJCQlkb3VibGVbXVtdIGRhdGFTID0gbmV3IGRvdWJsZVsyXVtucHRzIC0gMV07CisJCQlkb3VibGVbXVtdIGRhdGFJID0gbmV3IGRvdWJsZVsyXVtucHRzIC0gMV07CisJCQkKKwkJCS8vIGdldCB0aGUgbG9nYXJpdGhtcworCQkJZm9yKGludCBqID0gMDsgaiA8IG5wdHM7IGorKyl7CisJCQkJaWYoc1tqXSA+PSAwLjApIHsKKwkJCQkJbG5TW2pdID0gTWF0aC5sb2coc1tqXSk7CisJCQkJfSBlbHNlIHsKKwkJCQkJbG5TW2pdID0gLTEuMDsgIC8vIFRPRE8gZml4IHRoaXMKKwkJCQl9CisJCQkJaWYoaVtqXSA+PSAwLjApIHsKKwkJCQkJbG5JW2pdID0gTWF0aC5sb2coaVtqXSk7CisJCQkJfSBlbHNlIHsKKwkJCQkJbG5JW2pdID0gLTEuMDsgIC8vIFRPRE8gZml4IHRoaXMKKwkJCQl9CisJCQl9CisJCQkKKwkJCS8vZGVyaXZhdGl2ZXMgb2YgbG9nYXJpdGhtcyBhbmQgYXZlcmFnZXMgb2Ygb3RoZXIgcG9pbnRzCisJCQlmb3IoaW50IGogPSAxO2ogPCBucHRzLTE7aisrKQorCQkJeworCQkJCWRsblNbai0xXSA9IChsblNbal0tbG5TW2otMV0pOyAvLyBkdCA9IDEKKwkJCQlkbG5JW2otMV0gPSAobG5JW2pdLWxuSVtqLTFdKTsgLy8gZHQgPSAxCisJCQkJCisJCQkJc0F2Z1tqLTFdID0gKHNbal0gKyBzW2otMV0pLzIuMDsKKwkJCQlpQXZnW2otMV0gPSAoaVtqXSArIGlbai0xXSkvMi4wOworCQkJCXBBdmdbai0xXSA9IChwW2pdICsgcFtqLTFdKS8yLjA7CisJCQl9CisJCQkKKwkJCWRvdWJsZSBzTWF4ID0gZGF0YS5nZXRNYXhTKCk7CisJCQlkb3VibGUgaU1heCA9IGRhdGEuZ2V0TWF4SSgpOworCQkJCisJCQkKKwkJCS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwkJCQorCQkJLy8gZFMvZHQtPiBlcXVhdGlvbiAxLgorCQkJLy94LCB5IGZvciBsZWFzdCBzcXVhcmVzIGZpdHRpbmcgdG8gbGluZSB5ID0gYWxwaGEqeCAtIGJldGEKKwkJCS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworCQkJLy8KKwkJCUxpc3Q8RG91YmxlPiB4TGlzdDEgPSBuZXcgQXJyYXlMaXN0PERvdWJsZT4oKTsKKwkJCUxpc3Q8RG91YmxlPiB5TGlzdDEgPSBuZXcgQXJyYXlMaXN0PERvdWJsZT4oKTsKKwkJCUxpc3Q8RG91YmxlPiBmaXRMaXN0MSA9IG5ldyBBcnJheUxpc3Q8RG91YmxlPigpOworCQkJCisJCQlmb3IoaW50IGogPSAwOyBqIDwgbnB0cy0xOyBqKyspeworCQkJCWRvdWJsZSBzTm9ybSA9IHNBdmdbal0vc01heDsKKwkJCQlkb3VibGUgaU5vcm0gPSBpQXZnW2pdL2lNYXg7CisJCQkJZGF0YVNbMF1bal0gPSBzTm9ybTsKKwkJCQlkYXRhSVswXVtqXSA9IGlOb3JtOworCQkJCS8vIGJ5IGRlZmF1bHQsIHNlbGVjdGVkIGRhdGEgaXMgdGhlIFNBTUUKKwkJCQlkYXRhU1sxXVtqXSA9IHNOb3JtOworCQkJCWRhdGFJWzFdW2pdID0gaU5vcm07CisJCQkJCisJCQkJaWYoKHNOb3JtPD1tYXhTdGhyZXNob2xkKSYmKHNOb3JtPj1taW5TdGhyZXNob2xkKSYmKGlOb3JtPj1taW5JdGhyZXNob2xkKSApIHsKKwkJCQkJZG91YmxlIG51bWVyID0gKHBBdmdbal0gLyBzQXZnW2pdKTsKKwkJCQkJeExpc3QxLmFkZChuZXcgRG91YmxlKCBudW1lciApICk7CisJCQkJCXlMaXN0MS5hZGQobmV3IERvdWJsZSggKHBBdmdbal0vaUF2Z1tqXSkgKiBkbG5TW2pdICApKTsKKwkJCQl9ZWxzZSB7CisJCQkJCS8vICoqKiogZm9yIHBsb3R0aW5nICoqKioqKgorCQkJCQkvLyBoZXJlIHdlIGRlZmluZSBTKiwgSSosIFIqCisJCQkJCS8vIE5PVCBTZWxlY3RlZCA9IDAuMAorCQkJCQlkYXRhU1sxXVtqXSA9IDAuMDsKKwkJCQkJZGF0YUlbMV1bal0gPSAwLjA7CisJCQkJCS8vLy8qKioqKioqKioqKioqKioqKiovLy8vLworCQkJCX0KKwkJCX0KKwkJCUxpbmVhckxlYXN0U3F1YXJlc0ZpdCBsaW5lRml0MSA9IG51bGw7CisJCQlpZih4TGlzdDEuc2l6ZSgpID4gMikgeworCQkJCWxpbmVGaXQxID0gbmV3IExpbmVhckxlYXN0U3F1YXJlc0ZpdCh4TGlzdDEseUxpc3QxKTsKKwkJCQkvLyBpbmNwdAorCQkJCWRvdWJsZSBiZXRhIAk9IGxpbmVGaXQxLmdldEludGVyY2VwdCgpOyAKKwkJCQlkb3VibGUgdmFyQmV0YSAJPSBsaW5lRml0MS5nZXRJbnRlcmNlcHRWYXJpYW5jZSgpOworCQkJCWRvdWJsZSBzdGRCZXRhIAk9IGxpbmVGaXQxLmdldEludGVyY2VwdFN0ZERldigpOworCQkJCS8vIHNsb3BlCisJCQkJZG91YmxlIGFscGhhIAk9IGxpbmVGaXQxLmdldFNsb3BlKCk7CisJCQkJZG91YmxlIHZhckFscGhhID0gbGluZUZpdDEuZ2V0U2xvcGVWYXJpYW5jZSgpOworCQkJCWRvdWJsZSBzdGRBbHBoYSA9IGxpbmVGaXQxLmdldFNsb3BlU3RkRGV2KCk7CisJCQkJZG91YmxlIG5ld2JldGEgPSBiZXRhOworCQkJCWlmKCF1c2VGcmVxRGVwZW5kYW50QmV0YSkgbmV3YmV0YSAqPSAoKE1vZGVsUGFyYW1ldGVycy5SRUZFUkVOQ0VfUE9QVUxBVElPTl9ERU5TSVRZKS9sb2NhbERlbnNpdHkpOworCQkJCWZpdHRlZFBhcm1zLmFkZFBhcmFtZXRlcihQYXJhbWV0ZXIuQkVUQSwgbmV3IFBhcmFtZXRlcihQYXJhbWV0ZXIuQkVUQSwgbmV3YmV0YSwgc3RkQmV0YSwgdmFyQmV0YSkpOworCQkJCWZpdHRlZFBhcm1zLmFkZFBhcmFtZXRlcihQYXJhbWV0ZXIuQUxQSEEsIG5ldyBQYXJhbWV0ZXIoUGFyYW1ldGVyLkFMUEhBLCBhbHBoYSwgc3RkQWxwaGEsIHZhckFscGhhKSk7CisJCQkJLy8gZml0CisJCQkJZm9yIChpbnQgaSA9IDA7IGk8IHhMaXN0MS5zaXplKCk7IGkgKyspIHsKKwkJCQkJZG91YmxlIHZhbCA9IChsaW5lRml0MS5nZXRTbG9wZSgpKnhMaXN0MS5nZXQoaSkuZG91YmxlVmFsdWUoKSkgKyBsaW5lRml0MS5nZXRJbnRlcmNlcHQoKTsgCisJCQkJCWZpdExpc3QxLmFkZChuZXcgRG91YmxlKHZhbCkpOworCQkJCX0KKwkJCX0vLyBpZiBmaXQgdmFsaWQKKwkJCWVsc2UgeworCQkJCXJlamVjdENvdW50ICs9IDEuMDsKKwkJCX0KKwkJCS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworCQkJLy9FcXVhdGlvbiAyICs+IGRJL2R0IHNlY29uZCBmaXQgZm9yIGJldGEgYW5kIGVwc2lsb24KKwkJCUxpc3Q8RG91YmxlPiB4TGlzdDIgPSBuZXcgQXJyYXlMaXN0PERvdWJsZT4oKTsKKwkJCUxpc3Q8RG91YmxlPiB5TGlzdDIgPSBuZXcgQXJyYXlMaXN0PERvdWJsZT4oKTsKKwkJCUxpc3Q8RG91YmxlPiBmaXRMaXN0MiA9IG5ldyBBcnJheUxpc3Q8RG91YmxlPigpOworCQkJCisJCQkvL3gsIHkgZm9yIGxlYXN0IHNxdWFyZXMgZml0dGluZyB0byBsaW5lIHkgPSBiZXRhKnggLSBlcHNpbG9uCisJCQlmb3IoaW50IGogPSAwOyBqIDwgbnB0cy0xOyBqKyspeworCQkJCWRvdWJsZSBzTm9ybSA9IHNBdmdbal0vc01heDsKKwkJCQlkb3VibGUgaU5vcm0gPSBpQXZnW2pdL2lNYXg7CisJCQkJaWYoKHNOb3JtPD1tYXhTdGhyZXNob2xkKSYmKHNOb3JtPj1taW5TdGhyZXNob2xkKSYmKGlOb3JtPj1taW5JdGhyZXNob2xkKSApIHsKKwkJCQkJeExpc3QyLmFkZChuZXcgRG91YmxlKCAoIHBBdmdbal0gLyBzQXZnW2pdKSApKTsKKwkJCQkJeUxpc3QyLmFkZChuZXcgRG91YmxlKChwQXZnW2pdL3NBdmdbal0pICpkbG5JW2pdKSk7CisJCQkJfS8vIGlmIGRhdGEgaW4gcmFuZ2UKKwkJCX0KKwkJCS8vIFRPRE86ICBQbG90IHJlc3RyaWN0ZWQgZGF0YQorCQkJTGluZWFyTGVhc3RTcXVhcmVzRml0IGxpbmVGaXQyID0gbnVsbDsKKwkJCWlmKHhMaXN0Mi5zaXplKCkgPiAyKSB7CisJCQkJbGluZUZpdDIgPSBuZXcgTGluZWFyTGVhc3RTcXVhcmVzRml0KHhMaXN0Mix5TGlzdDIpOworCQkJCS8vIGluY3B0CisJCQkJZG91YmxlIGJldGEyCQk9IGxpbmVGaXQyLmdldEludGVyY2VwdCgpOyAKKwkJCQlkb3VibGUgdmFyQmV0YTIgCT0gbGluZUZpdDIuZ2V0SW50ZXJjZXB0VmFyaWFuY2UoKTsKKwkJCQlkb3VibGUgc3RkQmV0YTIgCT0gbGluZUZpdDIuZ2V0SW50ZXJjZXB0U3RkRGV2KCk7CisJCQkJLy8gc2xvcGUKKwkJCQlkb3VibGUgYWxwaGEyIAkJPSBsaW5lRml0Mi5nZXRTbG9wZSgpOworCQkJCWRvdWJsZSB2YXJBbHBoYTIJPSBsaW5lRml0Mi5nZXRTbG9wZVZhcmlhbmNlKCk7CisJCQkJZG91YmxlIHN0ZEFscGhhMiAJPSBsaW5lRml0Mi5nZXRTbG9wZVN0ZERldigpOworCQkJCWRvdWJsZSBuZXdiZXRhMiA9IGJldGEyICogKChNb2RlbFBhcmFtZXRlcnMuUkVGRVJFTkNFX1BPUFVMQVRJT05fREVOU0lUWSkvbG9jYWxEZW5zaXR5KTsKKwkJCQlmaXR0ZWRQYXJtcy5hZGRQYXJhbWV0ZXIoUGFyYW1ldGVyLkJFVEEyLCBuZXcgUGFyYW1ldGVyKFBhcmFtZXRlci5CRVRBMiwgbmV3YmV0YTIsIHN0ZEJldGEyLCB2YXJCZXRhMikpOworCQkJCWZpdHRlZFBhcm1zLmFkZFBhcmFtZXRlcihQYXJhbWV0ZXIuQUxQSEEyLCBuZXcgUGFyYW1ldGVyKFBhcmFtZXRlci5BTFBIQTIsIGFscGhhMiwgc3RkQWxwaGEyLCB2YXJBbHBoYTIpKTsKKwkJCisJCQkJLy8gZml0CisJCQkJZm9yIChpbnQgaSA9IDA7IGk8IHhMaXN0Mi5zaXplKCk7IGkgKyspIHsKKwkJCQkJZG91YmxlIHZhbCA9IChsaW5lRml0Mi5nZXRTbG9wZSgpKnhMaXN0Mi5nZXQoaSkuZG91YmxlVmFsdWUoKSkgKyBsaW5lRml0Mi5nZXRJbnRlcmNlcHQoKTsgCisJCQkJCWZpdExpc3QyLmFkZChuZXcgRG91YmxlKHZhbCkpOworCQkJCX0JCQorCQkJfSAvLyBpZiBmaXQgdmFsaWQKKwkJCWVsc2UgeworCQkJCXJlamVjdENvdW50ICs9IDEuMDsKKwkJCX0KKwkJCQorCQkJLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworCQkJLy8gRE9ORQorCQkJLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworCQkJZml0dGVkUGFybXMuYWRkUGFyYW1ldGVyKFBhcmFtZXRlci5SRUpFQ1QsIG5ldyBQYXJhbWV0ZXIoUGFyYW1ldGVyLlJFSkVDVCwgcmVqZWN0Q291bnQpKTsKKwkJCQorCQkJZGF0YVRvUGxvdC5hZGQoZGF0YVMpOworCQkJZGF0YVRvUGxvdC5hZGQoZGF0YUkpOworCQkJZml0dGVkUGFybXMuYWRkU2VsZWN0ZWREYXRhKGxvY2F0aW9uSUQsIGRhdGFUb1Bsb3QpOworCQkJCisJCQlkb3VibGVbXVtdIHJlZ3Jlc3Npb24xID0gZ2V0U29ydGVkUmVncmVzc2lvbih4TGlzdDEsIHlMaXN0MSk7IAorCQkJZG91YmxlW11bXSByZWdyZXNzaW9uMiA9IGdldFNvcnRlZFJlZ3Jlc3Npb24oeExpc3QyLCB5TGlzdDIpOworCQkJCisJCQlkb3VibGVbXVtdIGZpdDEgPSBnZXRTb3J0ZWRSZWdyZXNzaW9uKHhMaXN0MSwgZml0TGlzdDEpOyAKKwkJCWRvdWJsZVtdW10gZml0MiA9IGdldFNvcnRlZFJlZ3Jlc3Npb24oeExpc3QyLCBmaXRMaXN0Mik7IAorCQkJCisJCQlyZWdyZXNzaW9uVmFsdWVzLmFkZChyZWdyZXNzaW9uMSk7CisJCQlyZWdyZXNzaW9uVmFsdWVzLmFkZChyZWdyZXNzaW9uMik7CisKKwkJCWZpdHRlZFZhbHVlcy5hZGQoZml0MSk7CisJCQlmaXR0ZWRWYWx1ZXMuYWRkKGZpdDIpOworCQkJCisJCQlmaXR0ZWRQYXJtcy5hZGRSZWdyZXNzaW9uRGF0YShsb2NhdGlvbklELCByZWdyZXNzaW9uVmFsdWVzKTsKKwkJCWZpdHRlZFBhcm1zLmFkZEZpdHRlZERhdGEobG9jYXRpb25JRCwgZml0dGVkVmFsdWVzKTsKKwkJCQorCQkJCisJCQkKKwkJcmV0dXJuIGZpdHRlZFBhcm1zOworCX0gLy8gZXN0aW1hdGUKKwkKKwkvKioKKwkgKiBTSSBtb2RlbHMgaGF2ZSAyIHByb3BlcnRpZXMKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0udXRpbC5hbmFseXNpcy5QYXJhbWV0ZXJFc3RpbWF0b3IjZ2V0TnVtUHJvcGVydGllcygpCisJICovCisJcHVibGljIGludCBnZXROdW1Qcm9wZXJ0aWVzKCkgeworCQlyZXR1cm4gMjsKKwl9CisJCisJCit9CmRpZmYgLS1naXQgYS9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLnV0aWwuYW5hbHlzaXMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdXRpbC9hbmFseXNpcy9TY2VuYXJpb0FuYWx5c2lzU3VpdGUuamF2YSBiL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0udXRpbC5hbmFseXNpcy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91dGlsL2FuYWx5c2lzL1NjZW5hcmlvQW5hbHlzaXNTdWl0ZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYwMThmMDUKLS0tIC9kZXYvbnVsbAorKysgYi9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLnV0aWwuYW5hbHlzaXMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdXRpbC9hbmFseXNpcy9TY2VuYXJpb0FuYWx5c2lzU3VpdGUuamF2YQpAQCAtMCwwICsxLDM2MyBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnV0aWwuYW5hbHlzaXM7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDcsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgamF2YS5pby5GaWxlOworaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOworaW1wb3J0IGphdmEudXRpbC5MaXN0OworaW1wb3J0IGphdmEudXRpbC5NYXA7CitpbXBvcnQgamF2YS51dGlsLk1hcC5FbnRyeTsKK2ltcG9ydCBqYXZhLnV0aWwuU2V0OworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLkVMaXN0OworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLm9wZXJhdGlvbi5JUnVubmFibGVDb250ZXh0OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuRXJyb3JGdW5jdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLkVycm9yUmVzdWx0OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuU2NlbmFyaW9Jbml0aWFsaXphdGlvbkV4Y2VwdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmltcGwuUmVmZXJlbmNlU2NlbmFyaW9EYXRhTWFwSW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmltcGwuUmVmZXJlbmNlU2NlbmFyaW9EYXRhTWFwSW1wbC5SZWZlcmVuY2VTY2VuYXJpb0RhdGFJbnN0YW5jZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLnV0aWwuQ1NWc2NlbmFyaW9Mb2FkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNjZW5hcmlvLlNjZW5hcmlvOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udXRpbC5hbmFseXNpcy52aWV3cy5BbmFseXNpc0NvbnRyb2w7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS51dGlsLmFuYWx5c2lzLnZpZXdzLkVzdGltYXRvckNvbnRyb2w7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS51dGlsLmFuYWx5c2lzLnZpZXdzLk1lc3NhZ2VzOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlRhc2tCYXI7CisKKy8qKgorICogQW5hbHl6ZXMgYSB7QGxpbmsgU2NlbmFyaW99IGFuZCBjb21wYXJlcyBzY2VuYXJpb3MKKyAqLworcHVibGljIGNsYXNzIFNjZW5hcmlvQW5hbHlzaXNTdWl0ZSB7CisJLyoqCisJICogRm9yIHRlc3RpbmcKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBSRUZFUkVOQ0VfUk9PVF9ESVJFQ1RPUlkgPSBBZ2dyZWdhdGVEYXRhV3JpdGVyLkFOQUxZU0lTRk9MREVSOworCisJLyoqCisJICogV2hlcmUgd2Ugc3RhcnQgbG9va2luZyBmb3IgcmVjb3JkZWQgc2NlbmFyaW8gZmlsZXMKKwkgKi8KKwlwdWJsaWMgc3RhdGljIFN0cmluZyBSRUZFUkVOQ0VfVEVTVElOR19ESVJFQ1RPUlkgPSBSRUZFUkVOQ0VfUk9PVF9ESVJFQ1RPUlk7CisKKwkvKioKKwkgKiBTZXQgdG8gYW4gYWN0dWFsIGZvbGRlciBiZWxvdyAoaWYgZm91bmQpCisJICovCisJcHVibGljIHN0YXRpYyBTdHJpbmcgUkVGRVJFTkNFX1RFU1RJTkdfQUdHUkVHQVRFX0ZJTEUgPSBSRUZFUkVOQ0VfUk9PVF9ESVJFQ1RPUlkrRmlsZS5zZXBhcmF0b3IrQWdncmVnYXRlRGF0YVdyaXRlci5BR0dSRUdBVEVfRk9MREVSTkFNRStGaWxlLnNlcGFyYXRvcisiYWdncmVnYXRlLmNzdiI7CisJCisJcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIERFRkFVTFRfQUdHUkVHQVRFX0ZJTEVOQU1FID0gImFnZ3JlZ2F0ZSI7CisJCisJcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIENPTVBBUklTT05fRklMRV9OQU1FID0gIlJNU0NvbXBhcmlzb25SZXN1bHRzIjsKKwkJCisJLyoqCisJICogTWVzc2FnZSBpZiBkaXJlY3Rvcnkgbm90IGZvdW5kCisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgTk9UX0ZPVU5EX01TRyA9IE1lc3NhZ2VzLmdldFN0cmluZygiQ09NTU9OLk5PVEZPVU5EIik7CisJCisJLyoqCisJICogTWVzc2FnZSBpZiBkYXRhIG5vdCB2YWxpZAorCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIElOVkFMSURfREFUQV9NU0cgPSBNZXNzYWdlcy5nZXRTdHJpbmcoIkNPTU1PTi5OT1REQVRBIik7CisJCisJLyoqCisJICogTWVzc2FnZSBpZiBkb25lCisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgRE9ORV9NU0cgPSBNZXNzYWdlcy5nZXRTdHJpbmcoIkNPTU1PTi5ET05FIik7CisJCisJLyoqCisJICogTWVzc2FnZSBpZiBSZWFkeQorCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFJFQURZX01TRyA9IE1lc3NhZ2VzLmdldFN0cmluZygiQ09NTU9OLlJFQURZIik7CisJCisJLyoqCisJICogTWVzc2FnZSBpZiBXb3JraW5nCisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgV09SS0lOR19NU0cgPSBNZXNzYWdlcy5nZXRTdHJpbmcoIkNPTU1PTi5XT1JLSU5HIik7CisJCisJCisJLyoqCisJICogQ29udGFpbnMgYWxsIHJlZmVyZW5jZSBzY2VuYXJpbyBkYXRhCisJICovCisJUmVmZXJlbmNlU2NlbmFyaW9EYXRhTWFwSW1wbCByZWZlcmVuY2VTY2VuYXJpb0RhdGFNYXAgPSBudWxsOworCQorCS8qKgorCSAqIENvbnRhaW5zIGFsbCByZWZlcmVuY2Ugc2NlbmFyaW8gZGF0YSAoZm9yIGNvbXBhcmlzb24pCisJICovCisJUmVmZXJlbmNlU2NlbmFyaW9EYXRhTWFwSW1wbCBjb21wYXJpc29uU2NlbmFyaW9EYXRhTWFwID0gbnVsbDsKKwkKKwkvKiogCisJICogdGhlIEVzdGltYXRvciBpbnN0YW5jZQorCSAqLworCVNjZW5hcmlvUGFyYW1ldGVyRXN0aW1hdG9yIGVzdGltYXRvciA9IG51bGw7CisJCisJQW5hbHlzaXNDb250cm9sIGNvbnRyb2wgPSBudWxsOworCQorCQorCS8qKgorCSAqIEBwYXJhbSBjdHJsIAorCSAqIAorCSAqLworCXB1YmxpYyBTY2VuYXJpb0FuYWx5c2lzU3VpdGUoQW5hbHlzaXNDb250cm9sIGN0cmwpIHsKKwkJY29udHJvbCA9IGN0cmw7CisJCS8vIE5vdGhpbmcKKwl9CisKKwkvKioKKwkgKiBBZ2dyZWdhdGUgZGF0YQorCSAqIAorCSAqIEBwYXJhbSBmb2xkZXIgU2NlbmFyaW8gZm9sZGVyCisJICogQHBhcmFtIHJ1bm5hYmxlQ29udGV4dCBSdW5uYWJsZSBjb250ZXh0CisJICogQHBhcmFtIGFscGhhIHRoZSBJbW11bml0eSBMb3NzIFJhdGUuIFRoaXMgaXMgbmVlZGVkIHRvIGNvbXB1dGUgdGhlIGluY2lkZW5jZQorCSAqIEByZXR1cm4gU3RyaW5nW10gZmlsZW5hbWUgd2hlcmUgZmlsZW5hbWVbMF0gPSBhZ2dyZWdhdGUgZGF0YSBmaWxlIGFuZCBmaWxlbmFtZVsxXSA9IGluY2lkZW5jZSBkYXRhIGZpbGUKKwkgKiBAdGhyb3dzIFNjZW5hcmlvSW5pdGlhbGl6YXRpb25FeGNlcHRpb24gVGhyb3duIGlmIHByb2JsZW0gcmVhZGluZyBkYXRhCisJICovCisJCisJcHVibGljIFN0cmluZyBhZ2dyZWdhdGVEYXRhKFN0cmluZyBmb2xkZXIsIElSdW5uYWJsZUNvbnRleHQgcnVubmFibGVDb250ZXh0LCBkb3VibGUgYWxwaGEpIHRocm93cyBTY2VuYXJpb0luaXRpYWxpemF0aW9uRXhjZXB0aW9uewkKKwkJQ1NWc2NlbmFyaW9Mb2FkZXIgbG9hZGVyID0gbmV3IENTVnNjZW5hcmlvTG9hZGVyKGZvbGRlcik7CisJCWludCBtYXhSZXNvbHV0aW9uID0gbG9hZGVyLmdldE1heFJlc29sdXRpb24oKTsKKyAgICAgICAgUmVmZXJlbmNlU2NlbmFyaW9EYXRhTWFwSW1wbCBtYXAgPSBsb2FkZXIucGFyc2VBbGxGaWxlcyhtYXhSZXNvbHV0aW9uKTsKKyAgICAgICAgU3RyaW5nIGFnZ3JlZ2F0ZUZpbGVOYW1lID0gZ2V0QWdncmVnYXRlRmlsZU5hbWUoZm9sZGVyKTsKKyAgICAgICAgUmVmZXJlbmNlU2NlbmFyaW9EYXRhSW5zdGFuY2UgYWdncmVnYXRlZERhdGEgPSBtYXAuYWdncmVnYXRlU2NlbmFyaW9EYXRhKHJ1bm5hYmxlQ29udGV4dCk7CisgICAgICAgIEFnZ3JlZ2F0ZURhdGFXcml0ZXIgd3JpdGVyID0gbmV3IEFnZ3JlZ2F0ZURhdGFXcml0ZXIoZm9sZGVyLCBhZ2dyZWdhdGVGaWxlTmFtZSk7CisgICAgIAorCQlyZXR1cm4gd3JpdGVyLmxvZ0RhdGFJbnN0YW5jZShhZ2dyZWdhdGVkRGF0YSwgYWxwaGEpOworCX0KKwkKKwkKKwkvKioKKwkgKiBBZ2dyZWdhdGUgZGF0YSBidXQgZmlsdGVyIHRoZSBsb2NhdGlvbnMgdGhhdCBnZXQgYWdncmVnYXRlIHRvIG1hdGNoIHRoZSBsb2NhdGlvbnMKKwkgKiBpbiB0aGUgcmVmZXJlbmNlRm9sZGVyCisJICogQHBhcmFtIHJlZmVyZW5jZUZvbGRlciAKKwkgKiBAcGFyYW0gZm9sZGVyIFNjZW5hcmlvIGZvbGRlcgorCSAqIEBwYXJhbSBydW5uYWJsZUNvbnRleHQgUnVubmFibGUgY29udGV4dAorCSAqIEBwYXJhbSBhbHBoYSB0aGUgSW1tdW5pdHkgTG9zcyBSYXRlLiBUaGlzIGlzIG5lZWRlZCB0byBjb21wdXRlIHRoZSBpbmNpZGVuY2UKKwkgKiBAcmV0dXJuIFN0cmluZ1tdIGZpbGVuYW1lIHdoZXJlIGZpbGVuYW1lWzBdID0gYWdncmVnYXRlIGRhdGEgZmlsZSBhbmQgZmlsZW5hbWVbMV0gPSBpbmNpZGVuY2UgZGF0YSBmaWxlCisJICogQHRocm93cyBTY2VuYXJpb0luaXRpYWxpemF0aW9uRXhjZXB0aW9uIFRocm93biBpZiBwcm9ibGVtIHJlYWRpbmcgZGF0YQorCSAqLworCQorCXB1YmxpYyBTdHJpbmcgYWdncmVnYXRlQnlGaWx0ZXIoU3RyaW5nIHJlZmVyZW5jZUZvbGRlciwgU3RyaW5nIGZvbGRlciwgSVJ1bm5hYmxlQ29udGV4dCBydW5uYWJsZUNvbnRleHQsIGRvdWJsZSBhbHBoYSkgdGhyb3dzIFNjZW5hcmlvSW5pdGlhbGl6YXRpb25FeGNlcHRpb257CQkJCisJCUNTVnNjZW5hcmlvTG9hZGVyIHJlZkxvYWRlciA9IG5ldyBDU1ZzY2VuYXJpb0xvYWRlcihyZWZlcmVuY2VGb2xkZXIpOworCQlpbnQgbWF4UmVzID0gcmVmTG9hZGVyLmdldE1heFJlc29sdXRpb24oKTsKKwkJU2V0PFN0cmluZz4gbG9jYXRpb25zVG9BZ2dyZWdhdGUgPSByZWZMb2FkZXIuZ2V0TG9jYXRpb25zKG1heFJlcyk7CQorCQlDU1ZzY2VuYXJpb0xvYWRlciBsb2FkZXIgPSBuZXcgQ1NWc2NlbmFyaW9Mb2FkZXIoZm9sZGVyKTsKKwkJaW50IG1heFJlc29sdXRpb24gPSBsb2FkZXIuZ2V0TWF4UmVzb2x1dGlvbigpOworICAgICAgICBSZWZlcmVuY2VTY2VuYXJpb0RhdGFNYXBJbXBsIG1hcCA9IGxvYWRlci5wYXJzZUFsbEZpbGVzKGxvY2F0aW9uc1RvQWdncmVnYXRlLCBtYXhSZXNvbHV0aW9uKTsKKyAgICAgICAgU3RyaW5nIGFnZ3JlZ2F0ZUZpbGVOYW1lID0gZ2V0QWdncmVnYXRlRmlsZU5hbWUoZm9sZGVyKTsKKyAgICAgICAgUmVmZXJlbmNlU2NlbmFyaW9EYXRhSW5zdGFuY2UgYWdncmVnYXRlZERhdGEgPSBtYXAuYWdncmVnYXRlU2NlbmFyaW9EYXRhKHJ1bm5hYmxlQ29udGV4dCk7CisgICAgICAgIEFnZ3JlZ2F0ZURhdGFXcml0ZXIgd3JpdGVyID0gbmV3IEFnZ3JlZ2F0ZURhdGFXcml0ZXIoZm9sZGVyLCBhZ2dyZWdhdGVGaWxlTmFtZSk7CisgICAgICAgICAgCisJCXJldHVybiB3cml0ZXIubG9nRGF0YUluc3RhbmNlKGFnZ3JlZ2F0ZWREYXRhLCBhbHBoYSk7CisJfQorCQorCS8qKgorCSAqIEVzdGltYXRlcyB0aGUgbW9kZWwgcGFyYW1ldGVycyBmb3Igc2NlbmFyaW8gZGF0YSBsb2NhdGVkIGluIHRoZSByZWZlcmVuY2VEaXJlY3RvcnkKKwkgKiBAcGFyYW0gZGF0YU1hcCBEYXRhCisJICogQHBhcmFtIHBhcmFtZXRlckVzdGltYXRvck1ldGhvZCBXaGljaCBtZXRob2QgZG8gd2UgdXNlIHRvIGVzdGltYXRlCisJICogQHBhcmFtIHJ1bm5hYmxlQ29udGV4dCBDb250ZXh0IHVzZWQgZm9yIGxvbmcgcnVubmluZyB0YXNrcworCSAqIEByZXR1cm4gYSBzZXQgb2YgZml0dGVkIG1vZGVsIHBhcmFtZXRlcnMKKwkgKi8KKwlwdWJsaWMgTW9kZWxQYXJhbWV0ZXJzIGVzdGltYXRlUGFyYW1ldGVycyhSZWZlcmVuY2VTY2VuYXJpb0RhdGFNYXBJbXBsIGRhdGFNYXAsIFBhcmFtZXRlckVzdGltYXRvck1ldGhvZCBwYXJhbWV0ZXJFc3RpbWF0b3JNZXRob2QsIElSdW5uYWJsZUNvbnRleHQgcnVubmFibGVDb250ZXh0KSB7CQorCQkJdGhpcy5yZWZlcmVuY2VTY2VuYXJpb0RhdGFNYXAgPSBkYXRhTWFwOworCQkJZXN0aW1hdG9yID0gbmV3IFNjZW5hcmlvUGFyYW1ldGVyRXN0aW1hdG9yKHRoaXMucmVmZXJlbmNlU2NlbmFyaW9EYXRhTWFwLCBwYXJhbWV0ZXJFc3RpbWF0b3JNZXRob2QpOworCQkJCisJCQlNb2RlbFBhcmFtZXRlcnMgYmVzdEVzdGltYXRlID0gbmV3IE1vZGVsUGFyYW1ldGVycygpOworCQkJCisJCQkvLyBUaGUgdXNlciBjYW4gc2V0IHRoaXMKKwkJCWJvb2xlYW4gc3VtQWxsTG9jYXRpb25zID0gZmFsc2U7CisJCQlNYXA8U3RyaW5nLE9iamVjdD4gY29udHJvbFBhcmFtZXRlcnNNYXAgPSBjb250cm9sLmdldENvbnRyb2xQYXJhbWV0ZXJzTWFwKCk7CisJCQlpZihjb250cm9sUGFyYW1ldGVyc01hcCAhPSBudWxsKSB7CisJCQkJc3VtQWxsTG9jYXRpb25zID0gKChCb29sZWFuKSBjb250cm9sUGFyYW1ldGVyc01hcC5nZXQoRXN0aW1hdG9yQ29udHJvbC5TVU1fTE9DQVRJT05TX0tFWSkpLmJvb2xlYW5WYWx1ZSgpOworCQkJfQorCQkJCisJCQlpZihzdW1BbGxMb2NhdGlvbnMpIHsKKwkJCQliZXN0RXN0aW1hdGUgPSBlc3RpbWF0b3IuYXZlcmFnZVRoZW5Fc3RpbWF0ZVBhcmFtZXRlcnMoY29udHJvbFBhcmFtZXRlcnNNYXAsIHJ1bm5hYmxlQ29udGV4dCk7CisJCQl9IGVsc2UgeworCQkJCU1hcDxTdHJpbmcsTW9kZWxQYXJhbWV0ZXJzPiBmaXR0ZWRQYXJhbWV0ZXJzID0gZXN0aW1hdG9yLmVzdGltYXRlUGFyYW1ldGVycyhjb250cm9sUGFyYW1ldGVyc01hcCwgcnVubmFibGVDb250ZXh0KTsJCQorCQkJCWJlc3RFc3RpbWF0ZS5hdmVyYWdlKGZpdHRlZFBhcmFtZXRlcnMpOworCQkJfQorCQkJCisJCQkKKwkJICAgIHJldHVybiBiZXN0RXN0aW1hdGU7CisJfQorCQorCS8qKgorCSAqIFRoZSBhZ2dyZWdhdGUgZmlsZSBpcyBuYW1lZCBhZnRlciB0aGUgZGF0YSBkaXJlY3RvcnkgdW5kZXIgY3N2CisJICogQHBhcmFtIGRpcgorCSAqIEByZXR1cm4KKwkgKi8KKwlwcml2YXRlIHN0YXRpYyBTdHJpbmcgZ2V0QWdncmVnYXRlRmlsZU5hbWUoU3RyaW5nIGRpcikgeworCQlpbnQgc3RhcnQgPSBkaXIubGFzdEluZGV4T2YoRmlsZS5zZXBhcmF0b3JDaGFyKTsKKwkJCisJCVN0cmluZyBmaWxlbmFtZSA9IERFRkFVTFRfQUdHUkVHQVRFX0ZJTEVOQU1FOworCQlpZihzdGFydCA+PTApIHsKKwkJCWZpbGVuYW1lID0gZGlyLnN1YnN0cmluZyhzdGFydCsxLGRpci5sZW5ndGgoKSk7CisJCX0KKwkJZmlsZW5hbWUgPSBmaWxlbmFtZSArIi5jc3YiOworCQlyZXR1cm4gZmlsZW5hbWU7CisJfQorCQorCS8qKgorCSAqIFJvb3QgTWVhbiBTcXVhcmUgRGlmZmVyZW5jZSBDb21wYXJpc29uCisJICogQ29tcGFyZXMgZGF0YSBmcm9tIHR3byBzY2VuYXJpb3M6IHRoZSByZWZlcmVuY2VEaXJlY3RvcnkgYW5kIHRoZSBjb21wYXJpc29uRGlyZWN0b3J5CisJICogVGhlIGNvbXBhcmlzb24gZGlyZWN0b3J5IHdpbGwgcmVjdXJzaXZlbHkgdHJhdmVyc2UgZGlyZWN0b3JpZXMgdG8gc2VhcmNoIGZvciBsb2cgZmlsZXMuCisJICogV2hlbiBmb3VuZCwgYSBjb21wYXJpc29uIGlzIGRvbmUgYW5kIHRoZSByZXN1bHRzIGlzIHdyaXR0ZW4gdG8gdGhlIGNvbXBhcmlzb24gZGlyZWN0b3J5CisJICogaW5jbHVkaW5nIHRoZSBwYXJhbWV0ZXJzIHVzZWQgZm9yIHRoZSBzaW11bGF0aW9uCisJICogCisJICogQHBhcmFtIHJlZmVyZW5jZURpcmVjdG9yeQorCSAqIEBwYXJhbSBjb21wYXJpc29uRGlyZWN0b3J5CisJICogQHBhcmFtIHJ1bm5hYmxlQ29udGV4dCBDb250ZXh0IGZvciBsb25nIHJ1bm5pbmcgdGFzaworCSAqIEByZXR1cm4gRXJyb3JSZXN1bHQKKwkgKiBAdGhyb3dzIFNjZW5hcmlvSW5pdGlhbGl6YXRpb25FeGNlcHRpb24gCisJICovCisJCisJcHVibGljIEVycm9yUmVzdWx0IGNvbXBhcmUoU3RyaW5nIHJlZmVyZW5jZURpcmVjdG9yeSwgU3RyaW5nIGNvbXBhcmlzb25EaXJlY3RvcnksIElSdW5uYWJsZUNvbnRleHQgcnVubmFibGVDb250ZXh0LCBFcnJvckZ1bmN0aW9uIGVycm9yZnVuYykgdGhyb3dzIFNjZW5hcmlvSW5pdGlhbGl6YXRpb25FeGNlcHRpb24geworCQlDU1ZzY2VuYXJpb0xvYWRlciByZWZlcmVuY2VMb2FkZXIgPSBuZXcgQ1NWc2NlbmFyaW9Mb2FkZXIocmVmZXJlbmNlRGlyZWN0b3J5KTsKKwkJLy8gV2Ugd2lsbCB3cml0ZSB0aGUgcmVzdWx0IHRvIGEgZmlsZSBpbiB0aGUgY29tcGFyaXNvbiBkaXJlY3RvcnkgZm9sZGVyCisJCVN0cmluZyByZXN1bHRGaWxlID0gQ09NUEFSSVNPTl9GSUxFX05BTUU7CisJCQorCQlDU1ZBbmFseXNpc1dyaXRlciByZXN1bHRXcml0ZXIgPSBuZXcgQ1NWQW5hbHlzaXNXcml0ZXIocmVzdWx0RmlsZSk7CQorCQlNYXA8TWFwPFN0cmluZywgU3RyaW5nPiwgRXJyb3JSZXN1bHQ+IHJlc3VsdCA9IG5ldyBIYXNoTWFwPE1hcDxTdHJpbmcsIFN0cmluZz4sIEVycm9yUmVzdWx0PigpOworCQljb21wYXJlUmVjdXJzaXZlKHJlZmVyZW5jZUxvYWRlciwgY29tcGFyaXNvbkRpcmVjdG9yeSwgcmVzdWx0LCBydW5uYWJsZUNvbnRleHQsIGVycm9yZnVuYyk7CisJCXJlc3VsdFdyaXRlci5sb2dEYXRhKHJlc3VsdCk7CisJCXJlc3VsdFdyaXRlci5mbHVzaExvZ2dlckRhdGEoKTsKKwkJcmVzdWx0V3JpdGVyLmNsb3NlTG9nZ2VyRGF0YSgpOworCQkvLyBGaW5kIHRoZSBzbWFsbGVzdCBSTVMgZGlmZmVyZW5jZSBhbmQgcmV0dXJuIGl0cyBkb3VibGUgbGlzdAorCQlkb3VibGUgc21hbGxlc3RFcnJvciA9IERvdWJsZS5NQVhfVkFMVUU7CisJCUVycm9yUmVzdWx0IHJldHVybkVycm9yPW51bGw7CisJCWZvcihFbnRyeTxNYXA8U3RyaW5nLCBTdHJpbmc+LEVycm9yUmVzdWx0PiBlbnRyeSA6IHJlc3VsdC5lbnRyeVNldCgpKSB7CisJCQlFcnJvclJlc3VsdCByZXMgPSBlbnRyeS5nZXRWYWx1ZSgpOworCQkJLy8gQ29tcHV0ZSBhdmVyYWdlCisJCQlkb3VibGUgZXJyb3IgPSAwLjA7CisJCQlpZihyZXMgIT1udWxsKSB7CisJCQkJZXJyb3IgPSByZXMuZ2V0RXJyb3IoKTsKKwkJCX0KKwkJCWlmKGVycm9yIDwgc21hbGxlc3RFcnJvcikge3NtYWxsZXN0RXJyb3IgPSBlcnJvcjtyZXR1cm5FcnJvciA9IHJlczt9CisJCX0KKwkJcmV0dXJuIHJldHVybkVycm9yOworCX0KKwkKKwkvKioKKwkgKiBSb290IE1lYW4gU3F1YXJlIERpZmZlcmVuY2UgQ29tcGFyaXNvbgorCSAqIENvbXBhcmVzIGRhdGEgZnJvbSB0d28gc2NlbmFyaW9zOiB0aGUgcmVmZXJlbmNlRGlyZWN0b3J5IGFuZCB0aGUgY29tcGFyaXNvbkRpcmVjdG9yeQorCSAqIFRoZSBjb21wYXJpc29uIGRpcmVjdG9yeSB3aWxsIHJlY3Vyc2l2ZWx5IHRyYXZlcnNlIGRpcmVjdG9yaWVzIHRvIHNlYXJjaCBmb3IgbG9nIGZpbGVzLgorCSAqIFdoZW4gZm91bmQsIGEgY29tcGFyaXNvbiBpcyBkb25lIGFuZCB0aGUgcmVzdWx0cyBpcyB3cml0dGVuIHRvIHRoZSBjb21wYXJpc29uIGRpcmVjdG9yeQorCSAqIGluY2x1ZGluZyB0aGUgcGFyYW1ldGVycyB1c2VkIGZvciB0aGUgc2ltdWxhdGlvbgorCSAqIAorCSAqIEBwYXJhbSByZWZlcmVuY2VMb2FkZXIKKwkgKiBAcGFyYW0gY29tcGFyaXNvbkRpcmVjdG9yeQorCSAqIEBwYXJhbSByZXN1bHQKKwkgKiBAcGFyYW0gcnVubmFibGVDb250ZXh0IENvbnRleHQgZm9yIGxvbmcgcnVubmluZyB0YXNrCisJICogQHRocm93cyBTY2VuYXJpb0luaXRpYWxpemF0aW9uRXhjZXB0aW9uIAorCSAqLworCXB1YmxpYyB2b2lkIGNvbXBhcmVSZWN1cnNpdmUoQ1NWc2NlbmFyaW9Mb2FkZXIgcmVmZXJlbmNlTG9hZGVyLCBTdHJpbmcgY29tcGFyaXNvbkRpcmVjdG9yeSwgTWFwPE1hcDxTdHJpbmcsIFN0cmluZz4sIEVycm9yUmVzdWx0PiByZXN1bHQsIElSdW5uYWJsZUNvbnRleHQgcnVubmFibGVDb250ZXh0LCBFcnJvckZ1bmN0aW9uIGVycm9yZnVuYykgdGhyb3dzIFNjZW5hcmlvSW5pdGlhbGl6YXRpb25FeGNlcHRpb24gewkJCisJCXRyeSB7CisJCQlDU1ZzY2VuYXJpb0xvYWRlciBjb21wYXJpc29uTG9hZGVyID0gbmV3IENTVnNjZW5hcmlvTG9hZGVyKGNvbXBhcmlzb25EaXJlY3RvcnkpOworCQkJLy8gQSB2YWxpZCBzY2VuYXJpbyBmb2xkZXIgd2FzIGZvdW5kLiBEbyB0aGUgY29tcGFyaXNvbgorCQkJRXJyb3JSZXN1bHQgcmVzID0gX2NvbXBhcmUocmVmZXJlbmNlTG9hZGVyLCBjb21wYXJpc29uTG9hZGVyLCBydW5uYWJsZUNvbnRleHQsIGVycm9yZnVuYyk7CisJCQlNYXA8U3RyaW5nLCBTdHJpbmc+cnVuUGFybXMgPSBjb21wYXJpc29uTG9hZGVyLmdldFJ1blBhcmFtZXRlcnMoKTsKKwkJCXJlc3VsdC5wdXQocnVuUGFybXMsIHJlcyk7CisJCX0gY2F0Y2goU2NlbmFyaW9Jbml0aWFsaXphdGlvbkV4Y2VwdGlvbiBzaWUpIHsKKwkJCS8vIFRoZSBmb2xkZXIgZGlkIG5vdCBjb250YWluIHZhbGlkIGxvZyBmaWxlcy4gUmVjdXJzZSBkb3duIHN1YmRpcmVjdG9yaWVzCisJCQkvLyBsb29raW5nIGZvciBsb2cgZmlsZXMKKwkJCUZpbGUgZiA9IG5ldyBGaWxlKGNvbXBhcmlzb25EaXJlY3RvcnkpOworCQkJU3RyaW5nIFtdIGRpcnMgPSBmLmxpc3QoKTsKKwkJCWlmKGRpcnMgIT0gbnVsbCkgCisJCQkJZm9yKFN0cmluZyBkaXIgOiBkaXJzKSBjb21wYXJlUmVjdXJzaXZlKHJlZmVyZW5jZUxvYWRlciwgY29tcGFyaXNvbkRpcmVjdG9yeStGaWxlLnNlcGFyYXRvcitkaXIsIHJlc3VsdCwgcnVubmFibGVDb250ZXh0LCBlcnJvcmZ1bmMpOworCQl9CisJfQorCisJCQorCS8qKgorCSAqIFJvb3QgTWVhbiBTcXVhcmUgRGlmZmVyZW5jZSBDb21wYXJpc29uCisJICogQ29tcGFyZXMgZGF0YSBmcm9tIHR3byBzY2VuYXJpb3M6IHRoZSByZWZlcmVuY2VEaXJlY3RvcnkgYW5kIHRoZSBjb21wYXJpc29uRGlyZWN0b3J5CisJICogQHBhcmFtIHJlZkxvYWRlcgorCSAqIEBwYXJhbSBjb21wTG9hZGVyCisJICogQHBhcmFtIHJ1bm5hYmxlQ29udGV4dCBDb250ZXh0IGZvciBsb25nIHJ1bm5pbmcge0BsaW5rIFRhc2tCYXJ9CisJICogQHBhcmFtIEVycm9yRnVuYyBFcnJvciBmdW5jdGlvbgorCSAqIEByZXR1cm4gdGhlIG1lYW4gc3F1YXJlIGRpZmYKKwkgKiBAdGhyb3dzIFNjZW5hcmlvSW5pdGlhbGl6YXRpb25FeGNlcHRpb24gCisJICovCisJcHJpdmF0ZSBFcnJvclJlc3VsdCBfY29tcGFyZShDU1ZzY2VuYXJpb0xvYWRlciByZWZMb2FkZXIsIENTVnNjZW5hcmlvTG9hZGVyIGNvbXBMb2FkZXIsIElSdW5uYWJsZUNvbnRleHQgcnVubmFibGVDb250ZXh0LCBFcnJvckZ1bmN0aW9uIGVycm9yZnVuYykgdGhyb3dzIFNjZW5hcmlvSW5pdGlhbGl6YXRpb25FeGNlcHRpb24geworCQkJaW50IG1heFJlZiA9IHJlZkxvYWRlci5nZXRNYXhSZXNvbHV0aW9uKCk7CQkKKwkJCWludCBtYXhDb21wID0gY29tcExvYWRlci5nZXRNYXhSZXNvbHV0aW9uKCk7CQkJCQorCQkJLy8gRmluZCB0aGUgaGlnaGVzdCByZXNvbHV0aW9uIGNvbW1vbiB0d28gYm90aCBsb2NhdGlvbnMgYW5kIAorCQkJLy8gdXNlIGl0IGZvciBjb21wYXJpc29uLgorCQkJaW50IGFjdHVhbFJlcyA9IChtYXhSZWYgPiBtYXhDb21wKT9tYXhDb21wOm1heFJlZjsKKwkJCQkKKwkJCXRoaXMucmVmZXJlbmNlU2NlbmFyaW9EYXRhTWFwID0gcmVmTG9hZGVyLnBhcnNlQWxsRmlsZXMoYWN0dWFsUmVzKTsKKwkJCQkJCisJCQl0aGlzLmNvbXBhcmlzb25TY2VuYXJpb0RhdGFNYXAgPSBjb21wTG9hZGVyLnBhcnNlQWxsRmlsZXMoYWN0dWFsUmVzKTsKKwkJCQkJCisJCQlFcnJvckNhbGN1bGF0b3IgbXNkID0gbmV3IEVycm9yQ2FsY3VsYXRvcihyZWZlcmVuY2VTY2VuYXJpb0RhdGFNYXAsIGNvbXBhcmlzb25TY2VuYXJpb0RhdGFNYXAsIGVycm9yZnVuYyk7CisJCQkJCQorCQkJRXJyb3JSZXN1bHQgcmVzdWx0ID0gCW1zZC5zb2x2ZShydW5uYWJsZUNvbnRleHQpOwkKKwkJCXJldHVybiByZXN1bHQ7CisJfQorCQorCS8qKgorCSAqIAorCSAqIEBwYXJhbSBkaXJlY3RvcnkKKwkgKiBAcmV0dXJuIHRydWUgaXMgYSBkYXRhIGRpcmVjdG9yeSBleGlzdHMKKwkgKi8KKwlwdWJsaWMgYm9vbGVhbiB2YWxpZGF0ZShTdHJpbmcgZGlyZWN0b3J5KSB7CisJCXJldHVybiBDU1ZzY2VuYXJpb0xvYWRlci52YWxpZGF0ZShkaXJlY3RvcnkpOworCX0KKwkKKwkvKioKKwkgKiBSb290IE1lYW4gU3F1YXJlIERpZmZlcmVuY2UgQ29tcGFyaXNvbgorCSAqIENvbXBhcmVzIGRhdGEgZnJvbSB0d28gc2NlbmFyaW9zOiB0aGUgcmVmZXJlbmNlRGlyZWN0b3J5IGFuZCB0aGUgY29tcGFyaXNvbkRpcmVjdG9yeQorCSAqIEBwYXJhbSByZWZlcmVuY2VEaXJlY3RvcnkKKwkgKiBAcGFyYW0gY29tcGFyaXNvbkRpcmVjdG9yeQorCSAqIEBwYXJhbSBydW5uYWJsZUNvbnRleHQgQ29udGV4dCBmb3IgbG9uZyBydW5uaW5nIHRhc2tzCisJICogQHJldHVybiB0aGUgbWVhbiBzcXVhcmUgZGlmZgorCSAqIEB0aHJvd3MgU2NlbmFyaW9Jbml0aWFsaXphdGlvbkV4Y2VwdGlvbiBUaHJvd24gaWYgcHJvYmxlbXMgZW5jb3VudGVyZWQgcmVhZGluZyBkYXRhCisJICovCisJCisJcHVibGljIExpc3Q8UGhhc2VTcGFjZUNvb3JkaW5hdGVbXT4gZ2V0THlhcHVub3ZUcmFqZWN0b3J5KFN0cmluZyByZWZlcmVuY2VEaXJlY3RvcnksIFN0cmluZyBjb21wYXJpc29uRGlyZWN0b3J5LCBJUnVubmFibGVDb250ZXh0IHJ1bm5hYmxlQ29udGV4dCkgdGhyb3dzIFNjZW5hcmlvSW5pdGlhbGl6YXRpb25FeGNlcHRpb24geworCQkgICAKKwkJCS8vIGZvciByZWZlcmVuY2UgYW5kIGZvciBzaW5nbGUgc2NlbmFyaW8gYW5hbHlzaXMKKwkJCUNTVnNjZW5hcmlvTG9hZGVyIHJlZkxvYWRlciA9IG5ldyBDU1ZzY2VuYXJpb0xvYWRlcihyZWZlcmVuY2VEaXJlY3RvcnkpOworCQkJaW50IG1heFJlZiA9IHJlZkxvYWRlci5nZXRNYXhSZXNvbHV0aW9uKCk7CisJCQlpZihtYXhSZWYgPD0tMSkgcmV0dXJuIG51bGw7CisJCQkvLyBmb3IgdGVzdGluZyBjb21wYXJpc29uIGZ1bmN0aW9ucworCQkJQ1NWc2NlbmFyaW9Mb2FkZXIgY29tcExvYWRlciA9IG5ldyBDU1ZzY2VuYXJpb0xvYWRlcihjb21wYXJpc29uRGlyZWN0b3J5KTsKKwkJCWludCBtYXhDb21wID0gY29tcExvYWRlci5nZXRNYXhSZXNvbHV0aW9uKCk7CisJCQlpbnQgYWN0dWFsUmVzID0gKG1heFJlZiA+IG1heENvbXApP21heENvbXA6bWF4UmVmOworCQkJaWYoYWN0dWFsUmVzPD0tMSkgcmV0dXJuIG51bGw7CisJCQl0aGlzLnJlZmVyZW5jZVNjZW5hcmlvRGF0YU1hcCA9IHJlZkxvYWRlci5wYXJzZUFsbEZpbGVzKGFjdHVhbFJlcyk7CisJCQl0aGlzLmNvbXBhcmlzb25TY2VuYXJpb0RhdGFNYXAgPSBjb21wTG9hZGVyLnBhcnNlQWxsRmlsZXMoYWN0dWFsUmVzKTsKKwkJCQorCQkJTHlhcHVub3ZBbmFseXNpcyBseWFwID0gbmV3IEx5YXB1bm92QW5hbHlzaXMocmVmZXJlbmNlU2NlbmFyaW9EYXRhTWFwLCBjb21wYXJpc29uU2NlbmFyaW9EYXRhTWFwLCBydW5uYWJsZUNvbnRleHQpOworCQkJCisJCQlMaXN0PFBoYXNlU3BhY2VDb29yZGluYXRlW10+IHJldFZhbCA9IGx5YXAuZ2V0THlhcHVub3ZUcmFqZWN0b3J5KHJ1bm5hYmxlQ29udGV4dCk7CQorCQkJcmV0dXJuIHJldFZhbDsKKwl9CisJCisJLyoqCisJICogCisJICogQHBhcmFtIHRyYWplY3RvcnlMaXN0CisJICogQHJldHVybiB0aGUgZGV2aWF0aW9uIGFzIExpc3QoZG91YmxlW10pCisJICovCisJcHVibGljIHN0YXRpYyBMaXN0PEVMaXN0PERvdWJsZT4+IGdldEN1bXVsYXRpdmVQaGFzZVNwYWNlRGV2aWF0aW9uKExpc3Q8UGhhc2VTcGFjZUNvb3JkaW5hdGVbXT4gdHJhamVjdG9yeUxpc3QpIHsKKwkJTGlzdDxFTGlzdDxEb3VibGU+PiBkZXZpYXRpb24gPSBMeWFwdW5vdkFuYWx5c2lzLmdldEN1bXVsYXRpdmVQaGFzZVNwYWNlRGV2aWF0aW9uKHRyYWplY3RvcnlMaXN0KTsKKwkJcmV0dXJuIGRldmlhdGlvbjsKKwkJCisJfQorCQorCS8qKgorCSAqIAorCSAqIEByZXR1cm4gdGhlIGN1cnJlbnQgZXN0aW1hdG9yCisJICovCisJcHVibGljIFBhcmFtZXRlckVzdGltYXRvciBnZXRFc3RpbWF0b3IoKSB7CisJCXJldHVybiBlc3RpbWF0b3IuZ2V0RXN0aW1hdG9yKCk7CisJfQorCisKKworfQpkaWZmIC0tZ2l0IGEvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS51dGlsLmFuYWx5c2lzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3V0aWwvYW5hbHlzaXMvU2NlbmFyaW9QYXJhbWV0ZXJFc3RpbWF0b3IuamF2YSBiL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0udXRpbC5hbmFseXNpcy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91dGlsL2FuYWx5c2lzL1NjZW5hcmlvUGFyYW1ldGVyRXN0aW1hdG9yLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjc0NGUzOQotLS0gL2Rldi9udWxsCisrKyBiL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0udXRpbC5hbmFseXNpcy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91dGlsL2FuYWx5c2lzL1NjZW5hcmlvUGFyYW1ldGVyRXN0aW1hdG9yLmphdmEKQEAgLTAsMCArMSw1ODAgQEAKKy8qKgorICogCisgKi8KK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS51dGlsLmFuYWx5c2lzOworCitpbXBvcnQgamF2YS5sYW5nLnJlZmxlY3QuSW52b2NhdGlvblRhcmdldEV4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKK2ltcG9ydCBqYXZhLnV0aWwuSGFzaFNldDsKK2ltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CitpbXBvcnQgamF2YS51dGlsLk1hcDsKK2ltcG9ydCBqYXZhLnV0aWwuU2V0OworCitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQcm9ncmVzc01vbml0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLk9wZXJhdGlvbkNhbmNlbGVkRXhjZXB0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5VUkk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnJlc291cmNlLlJlc291cmNlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5yZXNvdXJjZS5SZXNvdXJjZVNldDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUucmVzb3VyY2UuaW1wbC5SZXNvdXJjZVNldEltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnhtaS5pbXBsLlhNSVJlc291cmNlRmFjdG9yeUltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uub3BlcmF0aW9uLklSdW5uYWJsZUNvbnRleHQ7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uub3BlcmF0aW9uLklSdW5uYWJsZVdpdGhQcm9ncmVzczsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmltcGwuUmVmZXJlbmNlU2NlbmFyaW9EYXRhTWFwSW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmltcGwuUmVmZXJlbmNlU2NlbmFyaW9EYXRhTWFwSW1wbC5SZWZlcmVuY2VTY2VuYXJpb0RhdGFJbnN0YW5jZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLklkZW50aWZpYWJsZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguR3JhcGg7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuQXJlYUxhYmVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLlBvcHVsYXRpb25MYWJlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnVpLlV0aWxpdHk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS51dGlsLmFuYWx5c2lzLnZpZXdzLkVzdGltYXRvckNvbnRyb2w7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS51dGlsLmFuYWx5c2lzLnZpZXdzLk1lc3NhZ2VzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA3LCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCisvKioKKyAqIEVzdGltYXRlcyByYXRlIGNvbnN0YW50cyBmb3IgYSBzY2VuYXJpbworICovCitwdWJsaWMgY2xhc3MgU2NlbmFyaW9QYXJhbWV0ZXJFc3RpbWF0b3IgeworCQorCS8qKgorCSAqIFRoZSBzY2VuYXJpbyBkYXRhIHVzZWQgZm9yIGVzdGltYXRpb24KKwkgKi8KKwkKKwlSZWZlcmVuY2VTY2VuYXJpb0RhdGFNYXBJbXBsIHJlZmVyZW5jZVNjZW5hcmlvRGF0YU1hcCA9IG51bGw7CisJCisJLyoqCisJICogVGhlIFBhcmFtZXRlciBFc3RpbWF0b3IgbWV0aG9kIHdlIHVzZQorCSAqLworCQorCVBhcmFtZXRlckVzdGltYXRvck1ldGhvZCBwYXJhbWV0ZXJFc3RpbWF0b3JNZXRob2QgPSBudWxsOworCQorCS8qKgorCSAqIFRoaXMgU2V0IHdpbGwgY29udGFpbiBsb2NhdGlvbnMgd2l0aCAiZ29vZCIgZGF0YS4gR29vZCBkYXRhIGltcGxpZXMgdGhhdCBhdCBsZWFzdAorCSAqIHRoZSAiSSIgc3RhdGUgaXMgZGVmaW5lZCBhbmQgdGhhdCBtYXhpbXVtIG51bWJlciBvZiBwb2VwbGUgaW4gdGhlICJJIiBzdGF0ZSBhdCBzb21lIHRpbWUKKwkgKiBpcyBsYXJnZSBlbm91Z2ggZm9yIHRoZSBlc3RpbWF0b3IgdG8gcmV0dXJuIGFuIGFwcHJveGltYXRlIGJldGEgY29lZmZpY2llbnQgCisJICovCisJU2V0PFN0cmluZz4gcmVmZXJlbmNlTG9jYXRpb25zOworCQorCS8qKgorCSAqIGFyZWFzIG9mIHRoZSByZWZlcmVuY2UgbG9jYXRpb25zCisJICogbG9hZGVkIGZyb20gdGhlIHNjZW5hcmlvIGdyYXBoIGJ5IElECisJICovCisJTWFwPFN0cmluZyxEb3VibGU+IHJlZmVyZW5jZUFyZWFEYXRhTWFwOworCQorCS8qKgorCSAqIHBvcHVsYXRpb25zIG9mIHRoZSByZWZlcmVuY2UgbG9jYXRpb25zCisJICogbG9hZGVkIGZyb20gdGhlIHNjZW5hcmlvIGdyYXBoIGJ5IElECisJICovCisJTWFwPFN0cmluZyxEb3VibGU+IHJlZmVyZW5jZVBvcHVsYXRpb25EYXRhTWFwOworCQorCS8qKgorCSAqIHJlbWVtYmVyIHRoZSBtYXggSW5mZWN0aW91cyBhdCBlYWNoIGxvY2F0aW9uCisJICovCisJTWFwPFN0cmluZyxEb3VibGU+IG1heEluZmVjdGlvdXNNYXAgPSBuZXcgSGFzaE1hcDxTdHJpbmcsRG91YmxlPigpOworCQorCVBhcmFtZXRlckVzdGltYXRvciBlc3RpbWF0b3I7CisJCisJLyoqCisJICogUHJlZml4IGZvciBhcmVhLiBGb3JtYXQgaXMKKwkgKiAgIHN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL2xhYmVsL2FyZWEvVVNBLzIvVVMtR0EtMTMzMDcKKwkgKi8KKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgQVJFQV9VUklfUFJFRklYID0gb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuQXJlYUxhYmVsLlVSSV9UWVBFX0FSRUFfTEFCRUxfU0VHTUVOVDsKKwkKKwkvKioKKwkgKiBwcmVmaXggZm9yIHBvcHVsYXRpb24uIEZvcm1hdCBpcworCSAqIHN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL2xhYmVsL3BvcHVsYXRpb24vVVNBLzIvVVMtR0EtMTMzMDcvaHVtYW4KKwkgKiAgICAKKwkgKi8KKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgUE9QVUxBVElPTl9VUklfUFJFRklYID0gb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuUG9wdWxhdGlvbkxhYmVsLlVSSV9UWVBFX1BPUFVMQVRJT05fTEFCRUxfU0VHTUVOVDsKKwkKKwkvKioKKwkgKiBUT0RPIG1ha2UgZ3VpIGl0ZW0KKwkgKiBzeW50YXggaXMgIAorCSAqIHN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL2xhYmVsL3BvcHVsYXRpb24vSVNSLzIvaHVtYW4vMjAwNi9JTC0wNS02MjMKKwkgKiBIdW1hbiBvbmx5IGZvciBub3cKKwkgKi8KKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgU1BFQ0lFUyA9ICJodW1hbiI7CisJCisJCQorCS8qKgorCSAqIGFuYWx5c2lzIG1vZGUgdXNpbmcgQUxMIGRhdGEgaW5jbHVkaW5nIHplcm9zCisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgQUxMX01PREUgPSAwOworCQorCS8qKgorCSAqIGFuYWx5c2lzIG1vZGUgYW5hbHl6aW5nIGRhdGEgb25seSB3aGVuIFMsRSxJLFIgYXJlIGFsbCA+IDAuMDsKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIGludCBOT05fWkVST19EQVRBX01PREUgPSAxOworCQorCQorCS8qKgorCSAqIGNvbnN0YW50CisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgTEVWRUxfU1RSSU5HID0gImxldmVsIjsgCQorCQorCS8vIGZpdCBhbGwgbG9jYXRpb25zIHdpdGggbWF4IGluZmVjdGlvdXMgcG9wdWxhdGlvbnMgPj0gRklUVElOR19GUkFDVElPTiAqIExBUkdFU1QgSW5mZWN0aW91cyBQb3B1bGF0aW9uCisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgZG91YmxlIEZJVFRJTkdfRlJBQ1RJT04gPSAwLjA1OworCQorCS8qKgorCSAqIFRoZSBwYXJlbnQgY29udHJvbAorCSAqLworCXByb3RlY3RlZCBFc3RpbWF0b3JDb250cm9sIGNvbnRyb2wgPSBudWxsOworCQorCS8qKgorCSAqIAorCSAqIEBwYXJhbSBzY2VuYXJpb0RhdGFNYXAKKwkgKiBAcGFyYW0gcGFyYW1ldGVyRXN0aW1hdG9yTWV0aG9kIAorCSAqLworCXB1YmxpYyBTY2VuYXJpb1BhcmFtZXRlckVzdGltYXRvcihSZWZlcmVuY2VTY2VuYXJpb0RhdGFNYXBJbXBsIHNjZW5hcmlvRGF0YU1hcCwgUGFyYW1ldGVyRXN0aW1hdG9yTWV0aG9kIHBhcmFtZXRlckVzdGltYXRvck1ldGhvZCkgeworCQlyZWZlcmVuY2VTY2VuYXJpb0RhdGFNYXAgPSBzY2VuYXJpb0RhdGFNYXA7CisJCXRoaXMucGFyYW1ldGVyRXN0aW1hdG9yTWV0aG9kID0gcGFyYW1ldGVyRXN0aW1hdG9yTWV0aG9kOworCQlyZWZlcmVuY2VMb2NhdGlvbnMgPSBnZXRSZWZlcmVuY2VMb2NhdGlvbnMoKTsKKwkJZ2V0QXJlYURhdGFNYXAoKTsKKwkJZ2V0UG9wdWxhdGlvbkRhdGFNYXAoKTsKKwl9CisJCisJLyoqCisJICogRXN0aW1hdGUgdGhlIHJhdGUgcGFyYW1ldGVycyBmcm9tIHRoZSBleGlzdGluZyBzY2VuYXJpbyBkYXRhCisJICogQHBhcmFtIGNvbnRyb2xQYXJhbXRlcnNNYXAgCisgICAgICogQHBhcmFtIHJ1bm5hYmxlQ29udGV4dCBDb250ZXh0IGZvciBsb25nIHJ1bm5pbmcgdGFza3MKKwkgKiBAcmV0dXJuIG1hcCBvZiBwYXJhbWV0ZXJzCisJICovCisJcHVibGljIE1hcDxTdHJpbmcsTW9kZWxQYXJhbWV0ZXJzPiBlc3RpbWF0ZVBhcmFtZXRlcnMoTWFwPFN0cmluZyxPYmplY3Q+IGNvbnRyb2xQYXJhbXRlcnNNYXAsIElSdW5uYWJsZUNvbnRleHQgcnVubmFibGVDb250ZXh0KSB7IAkJCisJCWZpbmFsIE1hcDxTdHJpbmcsT2JqZWN0PiBmaW5hbFBhcmFtZXRlck1hcCA9IGNvbnRyb2xQYXJhbXRlcnNNYXA7CisJCQorCQlmaW5hbCBQYXJhbWV0ZXJFc3RpbWF0b3JNZXRob2QgbWV0aG9kID0gdGhpcy5wYXJhbWV0ZXJFc3RpbWF0b3JNZXRob2Q7CisJCQorCQlJU2NlbmFyaW9QYXJhbWV0ZXJFc3RpbWF0b3JSdW5uYWJsZVdpdGhQcm9ncmVzcyBhbmFseXNpc1Rhc2sgPSBuZXcgSVNjZW5hcmlvUGFyYW1ldGVyRXN0aW1hdG9yUnVubmFibGVXaXRoUHJvZ3Jlc3MoKSB7CisJCQlwdWJsaWMgTWFwPFN0cmluZyxNb2RlbFBhcmFtZXRlcnM+IGZpdHRlZFBhcmFtZXRlcnMgPSBuZXcgSGFzaE1hcDxTdHJpbmcsTW9kZWxQYXJhbWV0ZXJzPigpOworICAgICAgICAgICAgcHVibGljIHZvaWQgcnVuKElQcm9ncmVzc01vbml0b3IgcHJvZ3Jlc3MpIHsKKyAgICAgICAgICAgIAlJdGVyYXRvcjxTdHJpbmc+IGl0ZXIgPSByZWZlcmVuY2VMb2NhdGlvbnMuaXRlcmF0b3IoKTsKKyAgICAgICAgICAgIAlpbnQgaWNvdW50ID0gMDsKKyAgICAgICAgICAgICAgICBwcm9ncmVzcy5iZWdpblRhc2soIkVzdGltYXRpbmcgcGFyYW1ldGVycyIsIHJlZmVyZW5jZUxvY2F0aW9ucy5zaXplKCkpOworICAgICAgICAgICAgICAgIC8vIFRPRE8gU1RBUlQgdGhpcyBjb2RlIGV4aXN0cyBvbmx5IHRvIFRFU1QgdGhlIEN5Y2xlQ29tcHJlc3NvciBjbGFzcworICAgICAgICAJCS8vIFRPRE8gU1RBUlQgdGhpcyBjb2RlIGV4aXN0cyBvbmx5IHRvIFRFU1QgdGhlIEN5Y2xlQ29tcHJlc3NvciBjbGFzcworICAgICAgICAgICAgICAgIC8vIFRPRE8gU0hPVUxEIEVWRU5UVUFMTFkgQkUgUEFSVCBPRiBST05JJ3MgbmV3IFZJRVcKKyAgICAgICAgCQkvL0xpc3Q8U3RyaW5nPiBhbGxJRHMgPSBuZXcgQXJyYXlMaXN0PFN0cmluZz4oKTsKKyAgICAgICAgCQkvL0xpc3Q8ZG91YmxlW10+IGFsbENvbXByZXNzZWRJbmNpZGVuY2UgPSBuZXcgQXJyYXlMaXN0PGRvdWJsZVtdPigpOworICAgICAgICAJCS8vIFRPRE8gRU5EIHRoaXMgY29kZSBleGlzdHMgb25seSB0byBURVNUIHRoZSBDeWNsZUNvbXByZXNzb3IgY2xhc3MKKyAgICAgICAgCQkvLyBUT0RPIEVORCB0aGlzIGNvZGUgZXhpc3RzIG9ubHkgdG8gVEVTVCB0aGUgQ3ljbGVDb21wcmVzc29yIGNsYXNzCisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgd2hpbGUoaXRlci5oYXNOZXh0KCkpIHsJCisgICAgICAgICAgICAgICAgCWljb3VudCArKzsKKyAgICAgICAgICAgIAkJLy9pZiAoaWNvdW50JTEwMD09MCkgQWN0aXZhdG9yLmxvZ0luZm9ybWF0aW9uKCIuIik7CisgICAgICAgICAgICAJCQkKKyAgICAgICAgICAgIAkJU3RyaW5nIGlkID0gaXRlci5uZXh0KCk7CisgICAgICAgICAgICAJCQkKKyAgICAgICAgICAgIAkJUmVmZXJlbmNlU2NlbmFyaW9EYXRhSW5zdGFuY2UgbG9jYXRpb25EYXRhTWFwID0gcmVmZXJlbmNlU2NlbmFyaW9EYXRhTWFwLmdldExvY2F0aW9uKGlkKTsKKyAgICAgICAgICAgIAkKKyAgICAgICAgICAgIAkJLy8gVE9ETyBTVEFSVCB0aGlzIGNvZGUgZXhpc3RzIG9ubHkgdG8gVEVTVCB0aGUgQ3ljbGVDb21wcmVzc29yIGNsYXNzCisgICAgICAgICAgICAJCS8vIFRPRE8gU1RBUlQgdGhpcyBjb2RlIGV4aXN0cyBvbmx5IHRvIFRFU1QgdGhlIEN5Y2xlQ29tcHJlc3NvciBjbGFzcworICAgICAgICAgICAgCQkvLyBUT0RPIFNIT1VMRCBFVkVOVFVBTExZIEJFIFBBUlQgT0YgUk9OSSdzIG5ldyBWSUVXCisgICAgICAgICAgICAJCS8vYWxsSURzLmFkZChpZCk7CisgICAgICAgICAgICAJCS8vQ3ljbGVDb21wcmVzc29yIGNvbXByZXNzb3IgPSBuZXcgQ3ljbGVDb21wcmVzc29yKGxvY2F0aW9uRGF0YU1hcCk7CisgICAgICAgICAgICAJCS8vZG91YmxlW10gcmVzdWx0ID0gY29tcHJlc3Nvci5nZXRDb21wcmVzc2VkRGF0YSgpOworICAgICAgICAgICAgCQkvL2FsbENvbXByZXNzZWRJbmNpZGVuY2UuYWRkKHJlc3VsdCk7CisgICAgICAgICAgICAJCS8vIFRPRE8gRU5EIHRoaXMgY29kZSBleGlzdHMgb25seSB0byBURVNUIHRoZSBDeWNsZUNvbXByZXNzb3IgY2xhc3MKKyAgICAgICAgICAgIAkJLy8gVE9ETyBFTkQgdGhpcyBjb2RlIGV4aXN0cyBvbmx5IHRvIFRFU1QgdGhlIEN5Y2xlQ29tcHJlc3NvciBjbGFzcworICAgICAgICAgICAgCQkKKyAgICAgICAgICAgIAkJCisgICAgICAgICAgIAkJCWVzdGltYXRvciA9IFBhcmFtZXRlckVzdGltYXRvckZhY3RvcnkuY3JlYXRlRXN0aW1hdG9yKG1ldGhvZCwgbG9jYXRpb25EYXRhTWFwKTsKKyAgICAgICAgICAgCQkJZXN0aW1hdG9yLnNldEFsbFBhcmFtZXRlcnMoZmluYWxQYXJhbWV0ZXJNYXApOworICAgICAgICAgICAJCQkKKyAgICAgICAgICAgCQkJZG91YmxlIGxvY2FsQXJlYSA9IGdldEFyZWEoaWQpLmRvdWJsZVZhbHVlKCk7CisgICAgICAgICAgIAkJCWFzc2VydChsb2NhbEFyZWEgPiAwLjApOworICAgICAgICAgICAJCQlpZihsb2NhbEFyZWEgPT0gMCkgbG9jYWxBcmVhID0gMS4wOyAvLyBzaG91bGQgbmV2ZXIgaGFwcGVuCisgICAgICAgICAgIAkJCWZpbmFsIGRvdWJsZSBsb2NhbFBvcHVsYXRpb24gPSBnZXRQb3B1bGF0aW9uKGlkKS5kb3VibGVWYWx1ZSgpOworICAgICAgICAgICAJCQlmaW5hbCBkb3VibGUgbG9jYWxEZW5zaXR5ID0gbG9jYWxQb3B1bGF0aW9uL2xvY2FsQXJlYTsKKyAgICAgICAgICAgCQkJTW9kZWxQYXJhbWV0ZXJzIHBhcmFtZXRlcnMgPSBlc3RpbWF0b3IuZXN0aW1hdGUobG9jYWxEZW5zaXR5LCBsb2NhbFBvcHVsYXRpb24saWQpOworICAgICAgICAgICAJCQkvL0FjdGl2YXRvci5sb2dJbmZvcm1hdGlvbigiZ290IHBhcmFtZXRlcnMgIitwYXJhbWV0ZXJzLnRvU3RyaW5nKCkpOworICAgICAgICAgICAJCQlmaXR0ZWRQYXJhbWV0ZXJzLnB1dChpZCwgcGFyYW1ldGVycyk7CisgICAgICAgICAgICAJCWlmIChwcm9ncmVzcy5pc0NhbmNlbGVkKCkpCisgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgT3BlcmF0aW9uQ2FuY2VsZWRFeGNlcHRpb24oKTsKKyAgICAgICAgICAgIAkJcHJvZ3Jlc3Mud29ya2VkKDEpOworICAgICAgICAgICAgCX0gLy8gd2hpbGUKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAvLyBUT0RPIFNUQVJUIHRoaXMgY29kZSBleGlzdHMgb25seSB0byBURVNUIHRoZSBDeWNsZUNvbXByZXNzb3IgY2xhc3MKKyAgICAgICAgCQkvLyBUT0RPIFNUQVJUIHRoaXMgY29kZSBleGlzdHMgb25seSB0byBURVNUIHRoZSBDeWNsZUNvbXByZXNzb3IgY2xhc3MKKyAgICAgICAgICAgICAgICAvLyBUT0RPIFNIT1VMRCBFVkVOVFVBTExZIEJFIFBBUlQgT0YgUk9OSSdzIG5ldyBWSUVXCisgICAgICAgICAgICAgICAgLy9DU1ZBbmFseXNpc1dyaXRlciB3cml0ZXIgPSBuZXcgQ1NWQW5hbHlzaXNXcml0ZXIoIkM6L3J1bnRpbWUtc3RlbS5wcm9kdWN0L01lY2lkcy9yZWNvcmRlZHNpbXVsYXRpb25zL0luZmx1ZW56YS9jeWNsZUNvbXByZXNzZWQvIiwiSW5jaWRlbmNlIik7CisgICAgICAgIAkJLy93cml0ZXIubG9nRGF0YShhbGxJRHMsIGFsbENvbXByZXNzZWRJbmNpZGVuY2UpOworICAgICAgICAJCS8vIFRPRE8gRU5EIHRoaXMgY29kZSBleGlzdHMgb25seSB0byBURVNUIHRoZSBDeWNsZUNvbXByZXNzb3IgY2xhc3MKKyAgICAgICAgCQkvLyBUT0RPIEVORCB0aGlzIGNvZGUgZXhpc3RzIG9ubHkgdG8gVEVTVCB0aGUgQ3ljbGVDb21wcmVzc29yIGNsYXNzCisgICAgICAgIAkJCisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgcHJvZ3Jlc3MuZG9uZSgpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICAvKioKKyAgICAgICAgICAgICAqIFJldHVybiB0aGUgZml0dGVkIHBhcmFtZXRlcnMKKyAgICAgICAgICAgICAqIEByZXR1cm4gTWFwPFN0cmluZywgTW9kZWxQYXJhbWV0ZXJzPiByZXN1bHQKKyAgICAgICAgICAgICAqLworICAgICAgICAgICAgcHVibGljIE1hcDxTdHJpbmcsIE1vZGVsUGFyYW1ldGVycz4gZ2V0Rml0dGVkUGFyYW1ldGVycygpIHsKKyAgICAgICAgICAgIAlyZXR1cm4gdGhpcy5maXR0ZWRQYXJhbWV0ZXJzOworICAgICAgICAgICAgfQorICAgICAgICAgfTsKKyAgICAgICAgIHRyeSB7CisgICAgICAgIAkgcnVubmFibGVDb250ZXh0LnJ1bih0cnVlLCB0cnVlLCBhbmFseXNpc1Rhc2spOworICAgICAgICAgfSBjYXRjaChJbnRlcnJ1cHRlZEV4Y2VwdGlvbiBpZSkgeworICAgICAgICAJIEFjdGl2YXRvci5sb2dFcnJvcigiIiwgaWUpOworICAgICAgICAJIHJldHVybiBudWxsOworICAgICAgICAgfSBjYXRjaChJbnZvY2F0aW9uVGFyZ2V0RXhjZXB0aW9uIGl0ZSkgeworICAgICAgICAJIEFjdGl2YXRvci5sb2dFcnJvcigiIiwgaXRlKTsKKyAgICAgICAgCSByZXR1cm4gbnVsbDsKKyAgICAgICAgIH0KKyAgICAgICAgIHJldHVybiBhbmFseXNpc1Rhc2suZ2V0Rml0dGVkUGFyYW1ldGVycygpOworCX0vL2VzdGltYXRlUGFyYW1ldGVycygpIAorCQorCS8qKgorCSAqIEF2ZXJhZ2UgQWxsIGRhdGEgVEhFTiBFc3RpbWF0ZSB0aGUgcmF0ZSBwYXJhbWV0ZXJzIGZyb20gdGhlIGF2ZXJhZ2VkIHNjZW5hcmlvIGRhdGEKKwkgKiBAcGFyYW0gY29udHJvbFBhcmFtdGVyc01hcCAKKwkgKiBAcGFyYW0gcnVubmFibGVDb250ZXh0IENvbnRleHQgZm9yIGxvbmcgcnVubmluZyB0YXNrcworCSAqIEByZXR1cm4gbWFwIG9mIHBhcmFtZXRlcnMKKwkgKi8KKwlwdWJsaWMgTW9kZWxQYXJhbWV0ZXJzIGF2ZXJhZ2VUaGVuRXN0aW1hdGVQYXJhbWV0ZXJzKE1hcDxTdHJpbmcsT2JqZWN0PiBjb250cm9sUGFyYW10ZXJzTWFwLCBJUnVubmFibGVDb250ZXh0IHJ1bm5hYmxlQ29udGV4dCkgeyAJCSAJCQorCQlmaW5hbCBNYXA8U3RyaW5nLE9iamVjdD4gZmluYWxQYXJhbWV0ZXJNYXAgPSBjb250cm9sUGFyYW10ZXJzTWFwOworCQlmaW5hbCBQYXJhbWV0ZXJFc3RpbWF0b3JNZXRob2QgbWV0aG9kID0gdGhpcy5wYXJhbWV0ZXJFc3RpbWF0b3JNZXRob2Q7CisJCQorCQlJQXZlcmFnZWRQYXJhbWV0ZXJFc3RpbWF0b3JSdW5uYWJsZVdpdGhQcm9ncmVzcyBhbmFseXNpc1Rhc2sgPSBuZXcgSUF2ZXJhZ2VkUGFyYW1ldGVyRXN0aW1hdG9yUnVubmFibGVXaXRoUHJvZ3Jlc3MoKSB7CisJCQlNb2RlbFBhcmFtZXRlcnMgbW9kZWxQYXJhbWV0ZXJzID0gbnVsbDsKKyAgICAgICAgICAgIHB1YmxpYyB2b2lkIHJ1bihJUHJvZ3Jlc3NNb25pdG9yIHByb2dyZXNzKSB7CisgICAgICAgICAgICAJSXRlcmF0b3I8U3RyaW5nPiBpdGVyID0gcmVmZXJlbmNlTG9jYXRpb25zLml0ZXJhdG9yKCk7CisgICAgCisgICAgICAgICAgICAgICAgcHJvZ3Jlc3MuYmVnaW5UYXNrKCJBdmVyYWdpbmcgZGF0YSIsIHJlZmVyZW5jZUxvY2F0aW9ucy5zaXplKCkpOworICAgICAgICAgICAgICAgIFJlZmVyZW5jZVNjZW5hcmlvRGF0YUluc3RhbmNlIGF2ZXJhZ2VkRGF0YU1hcCA9IG51bGw7CisgICAgICAgICAgICAgICAgZG91YmxlIGxvY2FsQXJlYSA9IDAuMDsKKyAgICAgICAgICAgICAgICBkb3VibGUgbG9jYWxQb3B1bGF0aW9uID0gMC4wOworICAgICAgICAgICAgICAgIHJlZmVyZW5jZVNjZW5hcmlvRGF0YU1hcC5maW5kTWF4SW5jaWRlbmNlKCk7CisgICAgICAgICAgICAgICAgU3RyaW5nIGlkTWF4ID0gcmVmZXJlbmNlU2NlbmFyaW9EYXRhTWFwLmdldE1heEluY2lkZW5jZUxvY2F0aW9uKCk7CisgICAgICAgICAgICAgICAgLy9kb3VibGUgbWF4ID0gcmVmZXJlbmNlU2NlbmFyaW9EYXRhTWFwLmdldE1heEluY2lkZW5jZSgpOworICAgICAgICAgICAgICAgIC8vQWN0aXZhdG9yLmxvZ0luZm9ybWF0aW9uKCIgbWF4IGluY2lkZW5jZSBpcyAiK21heCsiIGF0ICIraWRNYXgpOworICAgICAgICAgICAgICAJbG9jYWxBcmVhICs9IGdldEFyZWEoaWRNYXgpLmRvdWJsZVZhbHVlKCk7CisgICAgICAgICAgICAgICAgbG9jYWxQb3B1bGF0aW9uICs9IGdldFBvcHVsYXRpb24oaWRNYXgpLmRvdWJsZVZhbHVlKCk7CisgICAgICAgICAgICAgICAgUmVmZXJlbmNlU2NlbmFyaW9EYXRhSW5zdGFuY2UgbWF4bG9jYXRpb25EYXRhTWFwID0gcmVmZXJlbmNlU2NlbmFyaW9EYXRhTWFwLmdldExvY2F0aW9uKGlkTWF4KTsKKyAgICAgICAgICAgICAgICBhdmVyYWdlZERhdGFNYXAgPSBtYXhsb2NhdGlvbkRhdGFNYXAuY2xvbmUoKTsKKyAgICAgICAgICAgICAgIC8vIFBoYXNlU3luY2hyb25pemVyIHN5bmNocm9uaXplciA9IG5ldyBQaGFzZVN5bmNocm9uaXplcihhdmVyYWdlZERhdGFNYXApOworICAgICAgICAgICAgICAgIAkKKyAgICAgICAgICAgICAgICB3aGlsZShpdGVyLmhhc05leHQoKSkgewkKKyAgICAgICAgICAgIAkJU3RyaW5nIGlkID0gaXRlci5uZXh0KCk7CisgICAgICAgICAgICAJCWlmKCFpZC5lcXVhbHNJZ25vcmVDYXNlKGlkTWF4KSkgeworICAgICAgICAgICAgCQkJbG9jYWxBcmVhICs9IGdldEFyZWEoaWQpLmRvdWJsZVZhbHVlKCk7CisgICAgICAgICAgICAgICAgCQlsb2NhbFBvcHVsYXRpb24gKz0gZ2V0UG9wdWxhdGlvbihpZCkuZG91YmxlVmFsdWUoKTsKKyAgICAgICAgICAgICAgICAJCVJlZmVyZW5jZVNjZW5hcmlvRGF0YUluc3RhbmNlIGxvY2F0aW9uRGF0YU1hcCA9IHJlZmVyZW5jZVNjZW5hcmlvRGF0YU1hcC5nZXRMb2NhdGlvbihpZCk7CisgICAgICAgICAgICAgICAgCQlhdmVyYWdlZERhdGFNYXAuaW50ZWdyYXRlRGF0YShsb2NhdGlvbkRhdGFNYXAuaW5zdGFuY2UpOworICAgICAgICAgICAgCQl9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIAorICAgICAgIAkJCWVzdGltYXRvciA9IFBhcmFtZXRlckVzdGltYXRvckZhY3RvcnkuY3JlYXRlRXN0aW1hdG9yKG1ldGhvZCwgYXZlcmFnZWREYXRhTWFwKTsKKyAgICAgICAJCQllc3RpbWF0b3Iuc2V0QWxsUGFyYW1ldGVycyhmaW5hbFBhcmFtZXRlck1hcCk7CisgICAgICAgCQkJYXNzZXJ0KGxvY2FsQXJlYSA+IDAuMCk7CisgICAgICAgCQkJaWYobG9jYWxBcmVhID09IDApIGxvY2FsQXJlYSA9IDEuMDsgLy8gc2hvdWxkIG5ldmVyIGhhcHBlbgorICAgICAgIAkJCWZpbmFsIGRvdWJsZSBsb2NhbERlbnNpdHkgPSBsb2NhbFBvcHVsYXRpb24vbG9jYWxBcmVhOworICAgICAgICAJCQkJCQorICAgICAgIAkJCW1vZGVsUGFyYW1ldGVycyA9IGVzdGltYXRvci5lc3RpbWF0ZShsb2NhbERlbnNpdHksIGxvY2FsUG9wdWxhdGlvbiwgTWVzc2FnZXMuZ2V0U3RyaW5nKCJFU1QuQVZFUkFHRSIpKTsKKyAgICAgICAJCQkKKyAgICAgICAgCQlpZiAocHJvZ3Jlc3MuaXNDYW5jZWxlZCgpKQorICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgT3BlcmF0aW9uQ2FuY2VsZWRFeGNlcHRpb24oKTsKKyAgICAgICAgICAgIAkJcHJvZ3Jlc3Mud29ya2VkKDEpOworICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgcHJvZ3Jlc3MuZG9uZSgpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICAvKioKKyAgICAgICAgICAgICAqIFJldHVybiB0aGUgZml0dGVkIHBhcmFtZXRlcnMKKyAgICAgICAgICAgICAqIEByZXR1cm4gTWFwPFN0cmluZywgTW9kZWxQYXJhbWV0ZXJzPiByZXN1bHQKKyAgICAgICAgICAgICAqLworICAgICAgICAgICAgcHVibGljIE1vZGVsUGFyYW1ldGVycyBnZXRNb2RlbFBhcmFtZXRlcnMoKSB7CisgICAgICAgICAgICAJcmV0dXJuIHRoaXMubW9kZWxQYXJhbWV0ZXJzOworICAgICAgICAgICAgfQorICAgICAgICAgfTsKKyAgICAgICAgIHRyeSB7CisgICAgICAgIAkgcnVubmFibGVDb250ZXh0LnJ1bih0cnVlLCB0cnVlLCBhbmFseXNpc1Rhc2spOworICAgICAgICAgfSBjYXRjaChJbnRlcnJ1cHRlZEV4Y2VwdGlvbiBpZSkgeworICAgICAgICAJIEFjdGl2YXRvci5sb2dFcnJvcigiIiwgaWUpOworICAgICAgICAJIHJldHVybiBudWxsOworICAgICAgICAgfSBjYXRjaChJbnZvY2F0aW9uVGFyZ2V0RXhjZXB0aW9uIGl0ZSkgeworICAgICAgICAJIEFjdGl2YXRvci5sb2dFcnJvcigiIiwgaXRlKTsKKyAgICAgICAgCSByZXR1cm4gbnVsbDsKKyAgICAgICAgIH0KKyAgICAgICAgIHJldHVybiBhbmFseXNpc1Rhc2suZ2V0TW9kZWxQYXJhbWV0ZXJzKCk7CisJfS8vYXZlcmFnZVRoZW5Fc3RpbWF0ZVBhcmFtZXRlcnMoKSAKKwkKKwkvKioKKwkgKiBSZXR1cm5zIGEgc2V0IG9mIGxvY2F0aW9ucyB3aGVyZSB0aGUgbWF4IEluZmVjdGlvdXMgcG9wdWxhdGlvbiBzYXRpc2ZpZXMgdGhlIGNyaXRlcmlvbjoKKwkgKiBsb2NhbE1heEkgPj0gRklUVElOR19GUkFDVElPTipnbG9iYWxNYXhJCisJICogVGhlcmUgaXMgbm90IHBvaW50IGluIGFuYWx5emluZyBsb2NhdGlvbnMgd2hlcmUgbm8tb25lIGdldHMgc2ljaworCSAqIEByZXR1cm4gc2V0IG9mIHJlZmVyZW5jZUxvY2F0aW9ucworCSAqLworCXByaXZhdGUgU2V0PFN0cmluZz4gZ2V0UmVmZXJlbmNlTG9jYXRpb25zKCkgeworCQlTZXQ8U3RyaW5nPiBsb2NhdGlvbnNUb0ZpdCA9IG5ldyBIYXNoU2V0PFN0cmluZz4oKTsKKwkJU2V0PFN0cmluZz4gYWxsTG9jYXRpb25zID0gcmVmZXJlbmNlU2NlbmFyaW9EYXRhTWFwLmdldExvY2F0aW9ucygpOworCQkKKwkJZG91YmxlIGdsb2JhbE1heEkgPSAwLjA7CisJCQorCQkvLyAxLiBnZXQgdGhlIGxvY2FsIG1heCBpbmZlY3Rpb3VzIGNvdW50IGJ5IHJlZ2lvbiBpZCBmb3IgYWxsIHJlZ2lvbnMKKwkJSXRlcmF0b3I8U3RyaW5nPiBpdGVyID0gYWxsTG9jYXRpb25zLml0ZXJhdG9yKCk7CisJCXdoaWxlKChpdGVyIT1udWxsKSYmKGl0ZXIuaGFzTmV4dCgpKSkgIHsKKwkJCVN0cmluZyBpZCA9IGl0ZXIubmV4dCgpOworCQkJUmVmZXJlbmNlU2NlbmFyaW9EYXRhSW5zdGFuY2UgbG9jYXRpb25EYXRhTWFwID0gcmVmZXJlbmNlU2NlbmFyaW9EYXRhTWFwLmdldExvY2F0aW9uKGlkKTsKKwkJCUxpc3Q8RG91YmxlPiBpRGF0YSA9IGxvY2F0aW9uRGF0YU1hcC5nZXRJdG90YWxzKCk7CisJCQlkb3VibGUgbG9jYWxNYXggPSAwLjA7CisJCQkJCisJCQlmb3IoaW50IGkgPSAwOyBpIDwgaURhdGEuc2l6ZSgpOyBpICsrKSB7CisJCQkJZG91YmxlIGluZmVjdGlvdXMgPSBpRGF0YS5nZXQoaSkuZG91YmxlVmFsdWUoKTsKKwkJCQlpZiAobG9jYWxNYXggPCBpbmZlY3Rpb3VzKSBsb2NhbE1heCA9IGluZmVjdGlvdXM7CisJCQkJaWYgKGdsb2JhbE1heEkgPCBsb2NhbE1heCkgZ2xvYmFsTWF4SSA9IGxvY2FsTWF4OworCQkJfQorCQkJbWF4SW5mZWN0aW91c01hcC5wdXQoaWQsbmV3IERvdWJsZShsb2NhbE1heCkpOworCQkJCisJCX0KKwkJCisJCS8vIDIuIFNlbGVjdCB0aG9zZSByZWdpb25zIHdpdGggIG1heCBpbmZlY3Rpb3VzIGNvdW50ICA+PSBGSVRUSU5HX0ZSQUNUSU9OICogTEFSR0VTVCBJbmZlY3Rpb3VzIFBvcHVsYXRpb24KKwkJSXRlcmF0b3I8U3RyaW5nPiBpdGVyMiA9IG1heEluZmVjdGlvdXNNYXAua2V5U2V0KCkuaXRlcmF0b3IoKTsKKwkJd2hpbGUoKGl0ZXIyIT1udWxsKSYmKGl0ZXIyLmhhc05leHQoKSkpICB7CisJCQlTdHJpbmcgaWQgPSBpdGVyMi5uZXh0KCk7CisJCQlkb3VibGUgbG9jYWxNYXhJID0gCW1heEluZmVjdGlvdXNNYXAuZ2V0KGlkKS5kb3VibGVWYWx1ZSgpOworCQkJaWYgKGxvY2FsTWF4SSA+PSBGSVRUSU5HX0ZSQUNUSU9OKmdsb2JhbE1heEkpIHsKKwkJCQlsb2NhdGlvbnNUb0ZpdC5hZGQoaWQpOworCQkJfQorCQkJCisJCX0KKwkJCisJICAJcmV0dXJuIGxvY2F0aW9uc1RvRml0OworCX0KKwkKKwkvKioKKwkgKiAKKwkgKiBAcGFyYW0gSUQKKwkgKiBAcmV0dXJuCisJICovCisJRG91YmxlIGdldEFyZWEoU3RyaW5nIGlkKSB7CisJCWRvdWJsZSBhcmVhID0gMC4wOworCQlVUkkgdXJpID0gZ2V0QXJlYVVSSShpZCk7IAorCQkvLyBOZXcgdXRpbGl0eSBtZXRob2QKKwkJQXJlYUxhYmVsIGFyZWFMYWJlbCA9IChBcmVhTGFiZWwpb3JnLmVjbGlwc2Uuc3RlbS51aS5VdGlsaXR5LmdldExhYmVsKHVyaSk7CisJCWlmKGFyZWFMYWJlbD09bnVsbCkgQWN0aXZhdG9yLmxvZ0Vycm9yKCJhcmVhIGxhYmVsIGlzIG51bGwiLCBuZXcgTnVtYmVyRm9ybWF0RXhjZXB0aW9uKCJudWxsIGFyZWEiKSk7CisJCWFyZWEgPSBhcmVhTGFiZWwuZ2V0Q3VycmVudEFyZWFWYWx1ZSgpLmdldEFyZWEoKTsKKwkJcmV0dXJuIG5ldyBEb3VibGUoYXJlYSk7CisJfQorCQorCS8qKgorCSAqIAorCSAqIEBwYXJhbSBJRAorCSAqIEByZXR1cm4KKwkgKi8KKwlEb3VibGUgZ2V0UG9wdWxhdGlvbihTdHJpbmcgaWQpIHsKKwkJZG91YmxlIHBvcCA9IDAuMDsKKwkJVVJJIHVyaSA9IGdldFBvcHVsYXRpb25VUkkoaWQpOyAKKwkJLy8gTmV3IHV0aWxpdHkgbWV0aG9kCisJCVBvcHVsYXRpb25MYWJlbCBwb3BMYWJlbCA9IChQb3B1bGF0aW9uTGFiZWwpb3JnLmVjbGlwc2Uuc3RlbS51aS5VdGlsaXR5LmdldExhYmVsKHVyaSk7CisJCWlmKHBvcExhYmVsPT1udWxsKSBBY3RpdmF0b3IubG9nRXJyb3IoIlBvcHVsYXRpb24gbGFiZWwgaXMgbnVsbCIsIG5ldyBOdW1iZXJGb3JtYXRFeGNlcHRpb24oIm51bGwgcG9wdWxhdGlvbiIpKTsKKwkJcG9wID0gcG9wTGFiZWwuZ2V0Q3VycmVudFBvcHVsYXRpb25WYWx1ZSgpLmdldENvdW50KCk7CisJCXJldHVybiBuZXcgRG91YmxlKHBvcCk7CisJfQorCQorCS8qKgorCSAqIAorCSAqIEByZXR1cm4gdGhlIGFyZWEgbWFwCisJICovCisJTWFwPFN0cmluZyxEb3VibGU+IGdldEFyZWFEYXRhTWFwKCkgeworCQlNYXA8U3RyaW5nLERvdWJsZT4gYXJlYU1hcCA9IG5ldyBIYXNoTWFwPFN0cmluZyxEb3VibGU+KCk7CisJCUl0ZXJhdG9yPFN0cmluZz4gaXRlciA9IHJlZmVyZW5jZUxvY2F0aW9ucy5pdGVyYXRvcigpOworCQl3aGlsZShpdGVyLmhhc05leHQoKSkgeworCQkJU3RyaW5nIGlkID0gaXRlci5uZXh0KCk7CisJCQlEb3VibGUgYXJlYSA9IGdldEFyZWEoaWQpOworCQkJYXJlYU1hcC5wdXQoaWQsIGFyZWEpOworCQl9CisJCXJldHVybiBhcmVhTWFwOworCX0KKwkKKwkvKioKKwkgKiAKKwkgKiBAcmV0dXJuIHRoZSBwb3B1bGF0aW9uIG1hcAorCSAqLworCU1hcDxTdHJpbmcsRG91YmxlPiBnZXRQb3B1bGF0aW9uRGF0YU1hcCgpIHsKKwkJTWFwPFN0cmluZyxEb3VibGU+IHBvcE1hcCA9IG5ldyBIYXNoTWFwPFN0cmluZyxEb3VibGU+KCk7CisJCUl0ZXJhdG9yPFN0cmluZz4gaXRlciA9IHJlZmVyZW5jZUxvY2F0aW9ucy5pdGVyYXRvcigpOworCQl3aGlsZShpdGVyLmhhc05leHQoKSkgeworCQkJU3RyaW5nIGlkID0gaXRlci5uZXh0KCk7CisJCQlEb3VibGUgcG9wdWxhdGlvbiA9IGdldFBvcHVsYXRpb24oaWQpOworCQkJcG9wTWFwLnB1dChpZCwgcG9wdWxhdGlvbik7CisJCX0JCisJCXJldHVybiBwb3BNYXA7CisJfQorCQorCS8qKgorCSAqIGNvbnZlcnQgYSBMaXN0IG9mIFN0cmluZyBpbnRvIGFuZCBhcnJheSBvZiBkb3VibGUKKwkgKiBAcGFyYW0gZGF0YUxpc3QKKwkgKiBAcmV0dXJuIGRvdWJsZVtdIG9mIHZhbHVlcworCSAqLworCXB1YmxpYyBzdGF0aWMgZG91YmxlW10gZ2V0RG91YmxlVmFsdWVzKExpc3Q8U3RyaW5nPiBkYXRhTGlzdCkgeworCQlkb3VibGVbXSByZXRWYWx1ZSA9IG5ldyBkb3VibGVbZGF0YUxpc3Quc2l6ZSgpXTsKKwkJdHJ5IHsKKwkJCWZvciAoaW50IGkgPSAwOyBpIDwgZGF0YUxpc3Quc2l6ZSgpOyBpICsrKSB7CisJCQkJRG91YmxlIGRibGVPYmogPSBuZXcgRG91YmxlKGRhdGFMaXN0LmdldChpKSk7CisJCQkJcmV0VmFsdWVbaV0gPSBkYmxlT2JqLmRvdWJsZVZhbHVlKCk7CisJCQl9CisJCX0gY2F0Y2goRXhjZXB0aW9uIGUpIHsKKwkJCUFjdGl2YXRvci5sb2dFcnJvcigiU3RyaW5nIERhdGEgbm90IHZhbGlkLiBFeHBlY3RpbmcgRG91YmxlIHZhbHVlcyIsIGUpOworCQl9CisJCQorCQlyZXR1cm4gcmV0VmFsdWU7CisJfQorCQorCisKKyAgICAvKioKKyAgICAgKiBAcmV0dXJuIHRoZSBFc3RpbWF0b3IKKyAgICAgKi8KKyAgICBwdWJsaWMgUGFyYW1ldGVyRXN0aW1hdG9yIGdldEVzdGltYXRvcigpIHsKKwkJcmV0dXJuIGVzdGltYXRvcjsKKwl9CisJCisJCisJLyoqCisJICogCisJICogQHBhcmFtIGlkCisJICogQHJldHVybgorCSAqLworCVVSSSBnZXRBcmVhVVJJKFN0cmluZyBpZCkgeworCQlpbnQgbGV2ZWwgPSBnZXRMZXZlbChpZCk7CisJCVN0cmluZyBjb3VudHJ5Q29kZTsKKwkJLy8gbmVlZCB1cmkgb2YgZm9ybTogICBzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9sYWJlbC9hcmVhL1VTQS8yL1VTLUdBLTEzMzA3CisJCWlmIChsZXZlbCA9PSAwKSAgeworCQkJY291bnRyeUNvZGUgPSBpZDsKKwkJfSBlbHNlIHsKKwkJCVN0cmluZyB0d29MZXR0ZXJDb2RlID0gaWQuc3Vic3RyaW5nKDAsMik7CisJCQljb3VudHJ5Q29kZSA9IG9yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkuR2VvZ3JhcGhpY01hcHBlci5nZXRBbHBoYTModHdvTGV0dGVyQ29kZSk7CisJCX0KKwkJU3RyaW5nIGNvbXBvc2l0ZSA9ICJzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS8iK0FSRUFfVVJJX1BSRUZJWCArICIvIiArIGNvdW50cnlDb2RlICsiLyIrZ2V0TGV2ZWwoaWQpKyIvIitpZDsKKwkJVVJJIHVyaSA9IFVSSS5jcmVhdGVVUkkoY29tcG9zaXRlKTsJCisJCXJldHVybiB1cmk7CisJfS8vIGdldEFyZWFVUkkKKwkKKwkKKwkvKioKKwkgKiAKKwkgKiBAcGFyYW0gaWQKKwkgKiBAcmV0dXJuCisJICovCisJVVJJIGdldFBvcHVsYXRpb25VUkkoU3RyaW5nIGlkKSB7CisJCWludCBsZXZlbCA9IGdldExldmVsKGlkKTsKKwkJU3RyaW5nIGNvdW50cnlDb2RlOworCQkvLyBjb21wb3NlIHRoZSBpbnB1dCBzdHJpbmcKKwkJaWYgKGxldmVsID09IDApICB7CisJCQljb3VudHJ5Q29kZSA9IGlkOworCQl9IGVsc2UgeworCQkJU3RyaW5nIHR3b0xldHRlckNvZGUgPSBpZC5zdWJzdHJpbmcoMCwyKTsKKwkJCWNvdW50cnlDb2RlID0gb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS5HZW9ncmFwaGljTWFwcGVyLmdldEFscGhhMyh0d29MZXR0ZXJDb2RlKTsKKwkJfQorCQkvLyBzeW50YXggaXMKKwkJLy8gc3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vbGFiZWwvcG9wdWxhdGlvbi9JU1IvMi9odW1hbi8yMDA2L0lMLTA1LTYyMworCQkKKwkJLy8gSGFjayB0byBmaXggeWVhciBwcm9ibGVtLiBXZSBkb24ndCBrbm93IHRoZSB5ZWFyLCB0cnkgdW50aWwgd2UgZ3Vlc3MgcmlnaHQKKwkJU3RyaW5nIGNvbXBvc2l0ZSA9IG51bGw7CisJCWZvcihpbnQgeWVhcj0yMDAwO3llYXI8MjAyMDsrK3llYXIpIHsKKwkJCWNvbXBvc2l0ZSA9ICJzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS8iK1BPUFVMQVRJT05fVVJJX1BSRUZJWCArICIvIiArIGNvdW50cnlDb2RlICsiLyIrZ2V0TGV2ZWwoaWQpKyIvIitTUEVDSUVTKyIvIit5ZWFyKyIvIitpZDsKKwkJCQorCQkJdHJ5IHsKKwkJCQlmaW5hbCBVUkkgcG9wdWxhdGlvbkdyYXBoVVJJID0gVXRpbGl0eS5jcmVhdGVQb3B1bGF0aW9uR3JhcGhVUkkoVVJJLmNyZWF0ZVVSSShjb21wb3NpdGUpKTsKKwkJCQkKKwkJCQkvLyBuZWVkIHRvIGNhdGNoIGFueSBleGNlcHRpb24gaGVyZS4uLndlIHRha2UgdGhlIGRhdGEgZm9yIGFueSB5ZWFyIGZvciB0aGlzIGVzdGltYXRlCisJCQkJZmluYWwgUmVzb3VyY2VTZXQgcmVzb3VyY2VTZXQgPSBuZXcgUmVzb3VyY2VTZXRJbXBsKCk7CisJCQkJcmVzb3VyY2VTZXQuZ2V0UmVzb3VyY2VGYWN0b3J5UmVnaXN0cnkoKS5nZXRFeHRlbnNpb25Ub0ZhY3RvcnlNYXAoKS5wdXQoIioiLCBuZXcgWE1JUmVzb3VyY2VGYWN0b3J5SW1wbCgpKTsKKwkJCQlyZXNvdXJjZVNldC5nZXRSZXNvdXJjZUZhY3RvcnlSZWdpc3RyeSgpLmdldFByb3RvY29sVG9GYWN0b3J5TWFwKCkucHV0KCJwbGF0Zm9ybSIsIG5ldyBYTUlSZXNvdXJjZUZhY3RvcnlJbXBsKCkpOworCQkJCWZpbmFsIFJlc291cmNlIHJlc291cmNlID0gcmVzb3VyY2VTZXQuZ2V0UmVzb3VyY2UocG9wdWxhdGlvbkdyYXBoVVJJLHRydWUpOworCQkJCUlkZW50aWZpYWJsZSBpZGVudCA9IChJZGVudGlmaWFibGUpIHJlc291cmNlLmdldENvbnRlbnRzKCkuZ2V0KDApOworCQkJCWZpbmFsIEdyYXBoIHBvcHVsYXRpb25HcmFwaCA9IChHcmFwaCkgaWRlbnQ7CisJCQkJCisJCQkJLy8gZGlkIHdlIGdldCB0aGUgZGF0YQorCQkJCWlmKHBvcHVsYXRpb25HcmFwaCAhPSBudWxsKSBicmVhazsKKwkJCX0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CisJCQkJLy9kbyBub3RoaW5nLiBub3QgYW4gZXJyb3IgQWN0aXZhdG9yLmxvZ0luZm9ybWF0aW9uKCJObyBFcnJvciBsb29raW5nIGZvciBkYXRhOiAiK2NvbXBvc2l0ZSk7CisJCQl9CisJCQkKKwkJfQorCQlVUkkgdXJpID0gVVJJLmNyZWF0ZVVSSShjb21wb3NpdGUpOwkKKwkJcmV0dXJuIHVyaTsKKwl9Ly8gZ2V0UG9wdWxhdGlvblVSSQorCQorCS8qKgorCSAqIGZpbmRzIHRoZSBhZG1pbiBsZXZlbCBvZiB0aGUgaWQgYnkgY291bnRpbmcgJy0nIGNoYXJhY3RlcnMKKwkgKiBAcGFyYW0gaWQKKwkgKiBAcmV0dXJuCisJICovCisJcHJpdmF0ZSBpbnQgZ2V0TGV2ZWwoU3RyaW5nIGlkKSB7CisJCQorCQlpZihpZC5pbmRleE9mKCItIikgPT0tMSkgcmV0dXJuIDA7CisJCQorCQlpbnQgaWR4MSA9IGlkLmluZGV4T2YoIi0iKTsKKwkJU3RyaW5nIGZpcnN0UGFydCA9IGlkLnN1YnN0cmluZyhpZHgxKzEsaWQubGVuZ3RoKCkpOworCQlpZihmaXJzdFBhcnQuaW5kZXhPZigiLSIpID09LTEpIHJldHVybiAxOworCQkKKwkJaW50IGlkeDIgPSBmaXJzdFBhcnQuaW5kZXhPZigiLSIpOworCQlTdHJpbmcgc2Vjb25kUGFydCA9IGZpcnN0UGFydC5zdWJzdHJpbmcoaWR4MisxLGZpcnN0UGFydC5sZW5ndGgoKSk7CisJCWlmKHNlY29uZFBhcnQuaW5kZXhPZigiLSIpID09LTEpIHJldHVybiAyOworCQkKKworCQlpbnQgaWR4MyA9IHNlY29uZFBhcnQuaW5kZXhPZigiLSIpOworCQlTdHJpbmcgdGhpcmRQYXJ0ID0gc2Vjb25kUGFydC5zdWJzdHJpbmcoaWR4MysxLHNlY29uZFBhcnQubGVuZ3RoKCkpOworCQlpZih0aGlyZFBhcnQuaW5kZXhPZigiLSIpID09LTEpIHsKKwkJCXJldHVybiAzOworCQl9IAorCQkvLyBUT0RPIHNob3VsZCBnZW5lcmFsaXplIHRoaXMuCisJCXJldHVybiA0OyAvLyB0d28gbGV2ZWxzIHBhc3Qgd2hlcmUgd2Ugbm93IGhhdmUgZGF0YS4uLi4KKwkJCisJfQorCQorCQorCisJCisJCisJLyoqCisJICogSW50ZXJuYWwgaW50ZXJmYWNlIGZvciBsb25nIHJ1bm5pbmcgdGFzaworCSAqLworCXByaXZhdGUgaW50ZXJmYWNlIElTY2VuYXJpb1BhcmFtZXRlckVzdGltYXRvclJ1bm5hYmxlV2l0aFByb2dyZXNzIGV4dGVuZHMgSVJ1bm5hYmxlV2l0aFByb2dyZXNzIHsKKwkJIC8qKgorICAgICAgICAgKiBSZXR1cm4gdGhlIGZpdHRlZCBwYXJhbWV0ZXJzCisgICAgICAgICAqIEByZXR1cm4gTWFwPFN0cmluZywgTW9kZWxQYXJhbWV0ZXJzPiByZXN1bHQKKyAgICAgICAgICovCisgICAgICAgIHB1YmxpYyBNYXA8U3RyaW5nLCBNb2RlbFBhcmFtZXRlcnM+IGdldEZpdHRlZFBhcmFtZXRlcnMoKTsKKwl9CisJCisKKwkKKwkvKioKKwkgKiBJbnRlcm5hbCBpbnRlcmZhY2UgZm9yIGxvbmcgcnVubmluZyB0YXNrCisJICovCisJcHJpdmF0ZSBpbnRlcmZhY2UgSUF2ZXJhZ2VkUGFyYW1ldGVyRXN0aW1hdG9yUnVubmFibGVXaXRoUHJvZ3Jlc3MgZXh0ZW5kcyBJUnVubmFibGVXaXRoUHJvZ3Jlc3MgeworCQkgLyoqCisgICAgICAgICAqIFJldHVybiB0aGUgZml0dGVkIHBhcmFtZXRlcnMKKyAgICAgICAgICogQHJldHVybiBNb2RlbFBhcmFtZXRlcnMgIHJlc3VsdAorICAgICAgICAgKi8KKyAgICAgICAgcHVibGljIE1vZGVsUGFyYW1ldGVycyBnZXRNb2RlbFBhcmFtZXRlcnMoKTsKKwl9CisJCisJLyoqCisJICogR2V0IHRoZSB2YWx1ZXMgdG8gcGxvdCBmcm9tIHRoZSBlc3RpbWF0b3IKKwkgKiBAcGFyYW0gY2hhcnRJbmRleAorCSAqIEBwYXJhbSBzdGF0ZQorCSAqIEByZXR1cm4gdGhlIGFycmF5IG9mIGRhdGEgdG8gcGxvdAorCSAqLworCXB1YmxpYyBkb3VibGVbXSBnZXRWYWx1ZXMoaW50IGNoYXJ0SW5kZXgsIGludCBzdGF0ZSkgeworCQlyZXR1cm4gZXN0aW1hdG9yLmdldFZhbHVlcyhjaGFydEluZGV4LCBzdGF0ZSk7CisJfQorCQorfS8vIGdldExldmVsCmRpZmYgLS1naXQgYS9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLnV0aWwuYW5hbHlzaXMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdXRpbC9hbmFseXNpcy9UaHJlc2hvbGRNZWFuU3F1YXJlRGlmZmVyZW5jZS5qYXZhIGIvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS51dGlsLmFuYWx5c2lzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3V0aWwvYW5hbHlzaXMvVGhyZXNob2xkTWVhblNxdWFyZURpZmZlcmVuY2UuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNTliMmQ0Ci0tLSAvZGV2L251bGwKKysrIGIvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS51dGlsLmFuYWx5c2lzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3V0aWwvYW5hbHlzaXMvVGhyZXNob2xkTWVhblNxdWFyZURpZmZlcmVuY2UuamF2YQpAQCAtMCwwICsxLDEwNCBAQAorLyoqCisgKiAKKyAqLworcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnV0aWwuYW5hbHlzaXM7CisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA3LCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGphdmEubGFuZy5yZWZsZWN0Lkludm9jYXRpb25UYXJnZXRFeGNlcHRpb247CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVByb2dyZXNzTW9uaXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5vcGVyYXRpb24uSVJ1bm5hYmxlQ29udGV4dDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5vcGVyYXRpb24uSVJ1bm5hYmxlV2l0aFByb2dyZXNzOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuQW5hbHlzaXNGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuRXJyb3JSZXN1bHQ7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5UaHJlc2hvbGRFcnJvckZ1bmN0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuaW1wbC5BbmFseXNpc0ZhY3RvcnlJbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuaW1wbC5SZWZlcmVuY2VTY2VuYXJpb0RhdGFNYXBJbXBsOworCisKKyAgIAorCisvKiogCisgKiB0aGlzIGNsYXNzIGNvbXB1dGVzIHRoZSBtZWFuIHNxdWFyZSBkaWZmZXJlbmNlIGJldHdlZW4gdHdvIHNjZW5hcmlvcyBhcyBhIGZ1bmN0aW9uIG9mIHRpbWUKKyAqIDEuIEl0IG9ubHkgbG9va3MgYXQgbG9jYXRpb25zIHdoaWNoIGFyZSBDT01NT04gdG8gYm90aCBzY2VuYXJpb3MKKyAqIDIuIFRoZSB0aW1lIHNlcmllcyBzaG91bGQgYmUgdGhlIHNhbWUgbGVuZ3RoLiBJZiB0aGV5IGFyZSBub3QgdGhpcyB3aWxsIGNvbXBhcmUgb2YgYSBwZXJpb2QgZXF1YWwgdG8KKyAqICAgIHRoZSBTSE9SVEVTVCBvZiBhbGwgdGhlIHRpbWUgc2VyaWVzLiAKKyAqIDMuIEl0IG9ubHkgY29uc2lkZXJzIGxvY2F0aW9ucyB3aGVyZSBpbmZlY3Rpb3VzIGNvdW50IGlzIG5vbnplcm8gaW4gb25lIG9yIHRoZSBvdGhlciAtIG5vdCBpbnRlcmVzdGVkIGluIHdlaWdodGluZyByZWdpb25zIHdpdGggbm8gZGlzZWFzZS4KKyAqIDQuIFRoZXJlIGlzIGEgdGhyZXNob2xkIHdoZXJlIHdlICBpZ25vcmUgZXJyb3IgaWYgaXQncyBiZWxvdyB0aGUgdGhyZXNob2xkLiAKKyAqIAorICogCisgKiBUaGUgc2ltcGxpZmllZCB2ZXJzaW9uIG9ubHkgZGVhbHMgd2l0aCBhYnNvbHV0ZSBJIGNvbXBhcmlzb24KKyAqCisgKi8KKworcHVibGljIGNsYXNzIFRocmVzaG9sZE1lYW5TcXVhcmVEaWZmZXJlbmNlIHsKKwkKKwlSZWZlcmVuY2VTY2VuYXJpb0RhdGFNYXBJbXBsIHJlZjsKKwlSZWZlcmVuY2VTY2VuYXJpb0RhdGFNYXBJbXBsIGRhdGE7CisJRXJyb3JSZXN1bHQgcmVzdWx0OworCQorCXN0YXRpYyBBbmFseXNpc0ZhY3RvcnkgYUZhY3RvcnkgPSBuZXcgQW5hbHlzaXNGYWN0b3J5SW1wbCgpOworCXN0YXRpYyBUaHJlc2hvbGRFcnJvckZ1bmN0aW9uIGVycm9yRnVuY3Rpb24gPSBhRmFjdG9yeS5jcmVhdGVUaHJlc2hvbGRFcnJvckZ1bmN0aW9uKCk7CisJCisJLyoqCisJICogaW5wdXQKKwkgKi8KKwkvL01hcDxTdHJpbmcsTGlzdDxEb3VibGU+PiBjb21tb25JbmZlY3Rpb3VzTG9jYXRpb25zQSA9IG5ldyBIYXNoTWFwPFN0cmluZyxMaXN0PERvdWJsZT4+KCk7CisJLy9NYXA8U3RyaW5nLExpc3Q8RG91YmxlPj4gY29tbW9uSW5mZWN0aW91c0xvY2F0aW9uc0IgPSBuZXcgSGFzaE1hcDxTdHJpbmcsTGlzdDxEb3VibGU+PigpOworCQorCQorCQorCQorCS8qKgorCSAqIERldGVybWluZXMgdGhlIE1lYW5TcXVhcmUgZGlmZmVyZW5jZSBiZXR3ZWVuIHR3byBzY2VuYXJpbyBkYXRhIHNldHMgb3ZlciB0aW1lIGVhY2ggc3RvcmVkIGluIGEgbWFwCisJICogQHBhcmFtIHNjZW5hcmlvTWFwQSAKKwkgKiBAcGFyYW0gc2NlbmFyaW9NYXBCIAorCSAqLworCXB1YmxpYyBUaHJlc2hvbGRNZWFuU3F1YXJlRGlmZmVyZW5jZShSZWZlcmVuY2VTY2VuYXJpb0RhdGFNYXBJbXBsIHNjZW5hcmlvTWFwQSwgUmVmZXJlbmNlU2NlbmFyaW9EYXRhTWFwSW1wbCBzY2VuYXJpb01hcEIpIHsKKwkJcmVmID0gc2NlbmFyaW9NYXBBOworCQlkYXRhID0gc2NlbmFyaW9NYXBCOworCX0vLyBjb25zdHJ1Y3RvciBNZWFuU3F1YXJlRGlmZmVyZW5jZQorCQorCQorCQorCQorCS8qKgorCSAqIHNvbHZlcyBmb3IgdGhlIFJvb3QgTWVhblNxdWFyZURpZmZlcmVuY2UgdnMgdGltZQorCSAqIHVzaW5nIGluZmVjdGlvdXMgZGF0YSBvbmx5IGZvciBub3cKKwkgKiAKKwkgKiBAcGFyYW0gcnVubmFibGVDb250ZXh0IFJ1bm5hYmxlIGNvbnRleHQgZm9yIHByb2dyZXNzIGluZGljYXRvcgorCSAqIEByZXR1cm4gY29tcGFyaXNvbiB0aW1lIHNlcmllcyBhcyBkb3VibGVbXQorCSAqLworCXB1YmxpYyBFcnJvclJlc3VsdCBzb2x2ZShJUnVubmFibGVDb250ZXh0IHJ1bm5hYmxlQ29udGV4dCkgeworCQlmaW5hbCBUaHJlc2hvbGRNZWFuU3F1YXJlRGlmZmVyZW5jZSBzZWxmID0gdGhpczsKKwkJSVJ1bm5hYmxlV2l0aFByb2dyZXNzIHRhc2sgPSBuZXcgSVJ1bm5hYmxlV2l0aFByb2dyZXNzKCkgeworICAgICAgICAgICAgcHVibGljIHZvaWQgcnVuKElQcm9ncmVzc01vbml0b3IgcHJvZ3Jlc3MpIHsKKyAgICAgICAgICAgIAlwcm9ncmVzcy5iZWdpblRhc2soIlNvbHZpbmcuLi4iLCAxMDApOworICAgICAgICAgICAgCQorICAgICAgICAgICAgCXNlbGYucmVzdWx0ID0gZXJyb3JGdW5jdGlvbi5jYWxjdWxhdGVFcnJvcihzZWxmLnJlZiwgc2VsZi5kYXRhKTsKKyAgICAgICAgICAgIAlwcm9ncmVzcy5kb25lKCk7CisgICAgICAgICAgICB9CisJCX07CisJCQorCQl0cnkgeworCQkJcnVubmFibGVDb250ZXh0LnJ1bih0cnVlLCBmYWxzZSwgdGFzayk7CisJCX0gY2F0Y2goSW50ZXJydXB0ZWRFeGNlcHRpb24gaWUpIHsKKwkJCS8vIFRhc2sgaXMgbm90IGludGVycnVwdGFibGUKKwkJfSBjYXRjaChJbnZvY2F0aW9uVGFyZ2V0RXhjZXB0aW9uIGl0ZSkgeworCQkJLy8gVGFzayBpcyBub3QgaW50ZXJydXB0YWJsZQorCQl9CisJCXJldHVybiB0aGlzLnJlc3VsdDsKKwl9Ly8gc29sdmUoKQorCisJCisJCit9IC8vIGNsYXNzIFRocmVzaG9sZE1lYW5TcXVhcmVEaWZmZXJlbmNlCmRpZmYgLS1naXQgYS9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLnV0aWwuYW5hbHlzaXMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdXRpbC9hbmFseXNpcy9wZXJzcGVjdGl2ZXMvQW5hbHlzaXMuamF2YSBiL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0udXRpbC5hbmFseXNpcy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91dGlsL2FuYWx5c2lzL3BlcnNwZWN0aXZlcy9BbmFseXNpcy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVlY2FlMzgKLS0tIC9kZXYvbnVsbAorKysgYi9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLnV0aWwuYW5hbHlzaXMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdXRpbC9hbmFseXNpcy9wZXJzcGVjdGl2ZXMvQW5hbHlzaXMuamF2YQpAQCAtMCwwICsxLDgxIEBACisvLyBBbmFseXNpcy5qYXZhCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0udXRpbC5hbmFseXNpcy5wZXJzcGVjdGl2ZXM7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLkNvbnN0YW50czsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnV0aWwuYW5hbHlzaXMudmlld3MuRXBpZGVtaWNWaWV3OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udXRpbC5hbmFseXNpcy52aWV3cy5Fc3RpbWF0b3JWaWV3OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udXRpbC5hbmFseXNpcy52aWV3cy5MeWFwdW5vdlZpZXc7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS51dGlsLmFuYWx5c2lzLnZpZXdzLlByb2Nlc3NvclZpZXc7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS51dGlsLmFuYWx5c2lzLnZpZXdzLlNjZW5hcmlvQ29tcGFyaXNvblZpZXc7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuSUZvbGRlckxheW91dDsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5JUGFnZUxheW91dDsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5JUGVyc3BlY3RpdmVGYWN0b3J5OworCisKKy8qKgorICogVGhpcyBjbGFzcyBpbXBsZW1lbnRzIHRoZSAiQW5hbHlzaXMiIHBlcnNwZWN0aXZlIG9mIFNURU0uIFRoaXMgcGVyc3BlY3RpdmUgaXMKKyAqIHVzZWQgdG8gcmV2aWV3IGFuZCBjb21wYXJlIHRoZSByZXN1bHRzIG9mIGRpZmZlcmVudCBydW5zLgorICovCitwdWJsaWMgY2xhc3MgQW5hbHlzaXMgaW1wbGVtZW50cyBJUGVyc3BlY3RpdmVGYWN0b3J5IHsKKworCS8qKgorCSAqIFRoZSBpZGVudGlmaWVyIG9mIHRoZSBEZXNpZ25lciBQZXJzcGVjdGl2ZQorCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIElEX1NURU1fQU5BTFlTSVNfUEVSU1BFQ1RJVkUgPSBDb25zdGFudHMuSURfUk9PVAorCQkJKyAiLnV0aWwuYW5hbHlzaXMucGVyc3BlY3RpdmVzLlNURU1BbmFseXNpc1BlcnNwZWN0aXZlIjsgLy8kTk9OLU5MUy0xJAorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS51aS5JUGVyc3BlY3RpdmVGYWN0b3J5I2NyZWF0ZUluaXRpYWxMYXlvdXQob3JnLmVjbGlwc2UudWkKKwkgKiAgICAgIC5JUGFnZUxheW91dCkKKwkgKi8KKwlwdWJsaWMgdm9pZCBjcmVhdGVJbml0aWFsTGF5b3V0KGZpbmFsIElQYWdlTGF5b3V0IGxheW91dCkgeworCQlmaW5hbCBTdHJpbmcgZWRpdG9yQXJlYSA9IGxheW91dC5nZXRFZGl0b3JBcmVhKCk7CisKKwkJLy8gV2UgZG9uJ3Qgd2FudCB0byBzZWUgdGhlIGVkaXRvcgorCQlsYXlvdXQuc2V0RWRpdG9yQXJlYVZpc2libGUoZmFsc2UpOworCQkKKwkJLy8gUHV0IHRoZSBTVEVNIEFuYWx5c2lzIFZpZXdzIG9uIHRvcAorCQlmaW5hbCBJRm9sZGVyTGF5b3V0IHRvcCA9IGxheW91dC5jcmVhdGVGb2xkZXIoCisJCQkJInRvcCIsIElQYWdlTGF5b3V0LlRPUCwgLy8kTk9OLU5MUy0xJAorCQkJCTEuMDBmLCBlZGl0b3JBcmVhKTsKKwkJCisJCXRvcC5hZGRWaWV3KFByb2Nlc3NvclZpZXcuSURfUHJvY2Vzc29yX1ZJRVcpOworCQl0b3AuYWRkVmlldyhFc3RpbWF0b3JWaWV3LklEX0VzdGltYXRvcl9WSUVXKTsKKwkJdG9wLmFkZFZpZXcoU2NlbmFyaW9Db21wYXJpc29uVmlldy5JRF9Db21wYXJpc29uX1ZJRVcpOworCQl0b3AuYWRkVmlldyhMeWFwdW5vdlZpZXcuSURfTHlhcHVub3ZfVklFVyk7CisJCXRvcC5hZGRWaWV3KEVwaWRlbWljVmlldy5JRF9BZ2dyZWdhdGVfVklFVyk7CisJCQorCQkvLyBUT0RPIGZpeCBoYXJkIGNvZGVkIGlkcworCQlsYXlvdXQuYWRkU2hvd1ZpZXdTaG9ydGN1dChQcm9jZXNzb3JWaWV3LklEX1Byb2Nlc3Nvcl9WSUVXKTsKKwkJbGF5b3V0LmFkZFNob3dWaWV3U2hvcnRjdXQoRXN0aW1hdG9yVmlldy5JRF9Fc3RpbWF0b3JfVklFVyk7CisJCWxheW91dC5hZGRTaG93Vmlld1Nob3J0Y3V0KFNjZW5hcmlvQ29tcGFyaXNvblZpZXcuSURfQ29tcGFyaXNvbl9WSUVXKTsKKwkJbGF5b3V0LmFkZFNob3dWaWV3U2hvcnRjdXQoTHlhcHVub3ZWaWV3LklEX0x5YXB1bm92X1ZJRVcpOworCQlsYXlvdXQuYWRkU2hvd1ZpZXdTaG9ydGN1dChFcGlkZW1pY1ZpZXcuSURfQWdncmVnYXRlX1ZJRVcpOworCQkKKwkJLy90b3AuYWRkVmlldyhQcm9qZWN0RXhwbG9yZXIuVklFV19JRCk7CisKKwkJLy8gUHV0IHRoZSBHcmFwaHMgVmlldyBvbiB0aGUgYm90dG9tIHdpdGggdGhlIFRhc2tzIFZpZXcKKwkJLy8gQFN1cHByZXNzV2FybmluZ3MoInVudXNlZCIpCisJCS8vCQlJRm9sZGVyTGF5b3V0IGJvdHRvbSA9IGxheW91dC5jcmVhdGVGb2xkZXIoImJvdHRvbSIsIC8vJE5PTi1OTFMtMSQKKwkJLy8gSVBhZ2VMYXlvdXQuQk9UVE9NLCAwLjY2ZiwgZWRpdG9yQXJlYSk7CisKKwkJLy8gV2UgZG9uJ3Qgd2FudCB0byBzZWUgdGhlIGVkaXRvcgorCQlsYXlvdXQuc2V0RWRpdG9yQXJlYVZpc2libGUoZmFsc2UpOworCisJCS8vIEFkZCB0aGUgQW5hbHlzaXMgcGVyc3BlY3RpdmUgdG8gdGhlICJPcGVuIFBlcnNwZWN0aXZlIiBtZW51CisJCWxheW91dC5hZGRQZXJzcGVjdGl2ZVNob3J0Y3V0KElEX1NURU1fQU5BTFlTSVNfUEVSU1BFQ1RJVkUpOworCisJfSAvLyBjcmVhdGVJbml0aWFsTGF5b3V0CisKK30gLy8gQW5hbHlzaXMKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLnV0aWwuYW5hbHlzaXMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdXRpbC9hbmFseXNpcy91dGlscy9BZ2dyZWdhdGVDU1ZGaWxlLmphdmEgYi9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLnV0aWwuYW5hbHlzaXMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdXRpbC9hbmFseXNpcy91dGlscy9BZ2dyZWdhdGVDU1ZGaWxlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2I0NzNmNQotLS0gL2Rldi9udWxsCisrKyBiL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0udXRpbC5hbmFseXNpcy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91dGlsL2FuYWx5c2lzL3V0aWxzL0FnZ3JlZ2F0ZUNTVkZpbGUuamF2YQpAQCAtMCwwICsxLDk3IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0udXRpbC5hbmFseXNpcy51dGlsczsKKworaW1wb3J0IGphdmEuaW8uQnVmZmVyZWRSZWFkZXI7CitpbXBvcnQgamF2YS5pby5GaWxlSW5wdXRTdHJlYW07CitpbXBvcnQgamF2YS5pby5GaWxlV3JpdGVyOworaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW1SZWFkZXI7CitpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuTWFwOworaW1wb3J0IGphdmEudXRpbC5TdHJpbmdUb2tlbml6ZXI7CisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNywgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKgorICogVXRpbGl0eSB0aGF0IHJlYWRzIGEgU1RFTSBDU1YgZmlsZSBhbmQgZ2VuZXJhdGVzIGFub3RoZXIgY3N2IGZpbGUgY29udGFpbmluZyAKKyAqIGFuIGFnZ3JlZ2F0ZSBjb2x1bW4gZm9yIGFsbCBsb2NhdGlvbnMgaW4gdGhlIG9yaWdpbmFsIGZpbGUKKyAqLworcHVibGljIGNsYXNzIEFnZ3JlZ2F0ZUNTVkZpbGUgeworCisJLyoqCisJICogQHBhcmFtIGFyZ3MKKwkgKi8KKwlAU3VwcHJlc3NXYXJuaW5ncygiYm94aW5nIikKKwlwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CisJCWlmKGFyZ3MubGVuZ3RoID09IDApIHsKKwkJCVN5c3RlbS5lcnIucHJpbnRsbigiVXNhZ2U6IEFnZ3JlZ2F0ZUNTVkZpbGUgPGNzdiBmaWxlPiA8b3V0cHV0IGZpbGU+XG5PdXRwdXQgZmlsZSBpcyBvcHRpb25hbCBhbmQgaWYgbm90IHNwZWNpZmllZCB0aGUgbmFtZSB3aWxsIGJlIGdlbmVyYXRlZCBmcm9tIHRoZSBpbnB1dCBmaWxlLiIpOworCQkJU3lzdGVtLmV4aXQoLTEpOworCQl9CisJCQorCQlTdHJpbmcgY3ZzZmlsZW5hbWUgPSBhcmdzWzBdOworCQlTdHJpbmcgb3V0ZmlsZW5hbWUgPSBudWxsOworCQlpZihhcmdzLmxlbmd0aCA9PSAxKSBvdXRmaWxlbmFtZSA9IGFyZ3NbMF0rIl9hZ2dyZWdhdGUuY3N2IjsKKwkJZWxzZSBvdXRmaWxlbmFtZT0gYXJnc1sxXTsKKwkJCisJCU1hcDxJbnRlZ2VyLCBEb3VibGU+YWdncmVnYXRlID0gbmV3IEhhc2hNYXA8SW50ZWdlciwgRG91YmxlPigpOworCQlMaXN0PEludGVnZXI+IGl0ZXJhdGlvbiA9IG5ldyBBcnJheUxpc3Q8SW50ZWdlcj4oKTsKKwkJTGlzdDxTdHJpbmc+IHRpbWUgPSBuZXcgQXJyYXlMaXN0PFN0cmluZz4oKTsKKwkJdHJ5IHsKKwkJCSBGaWxlSW5wdXRTdHJlYW0gZmlzID0gbmV3IEZpbGVJbnB1dFN0cmVhbShjdnNmaWxlbmFtZSk7IAorCQkgICAgIEJ1ZmZlcmVkUmVhZGVyIGQgPSBuZXcgQnVmZmVyZWRSZWFkZXIobmV3IElucHV0U3RyZWFtUmVhZGVyKGZpcykpOworCQkgICAgIFN0cmluZyBoZWFkZXIgPSBudWxsOworCQkgICAgIGhlYWRlcj1kLnJlYWRMaW5lKCk7CisJCSAgICAgaWYoaGVhZGVyID09IG51bGwpIHsKKwkJICAgIAkgU3lzdGVtLmVyci5wcmludGxuKCJFcnJvciwgZmlsZSBpcyBlbXB0eSEiKTsKKwkJICAgIAkgU3lzdGVtLmV4aXQoLTIpOworCQkgICAgIH0KKwkJICAgIFN0cmluZyBkYXRhID0gbnVsbDsgCisJCSAgICB3aGlsZSAoIChkYXRhPWQucmVhZExpbmUoKSkgIT0gbnVsbCApIHsgCisJCSAgICAJU3RyaW5nVG9rZW5pemVyIHN0ID0gbmV3IFN0cmluZ1Rva2VuaXplcihkYXRhLCAiLCIpOworCQkgICAgCWludCBjb2x1bW4gPSAwOworCQkgICAgCWludCBpdD0wOworCQkJCXdoaWxlIChzdC5oYXNNb3JlVG9rZW5zKCkpIHsKKwkJCQkJU3RyaW5nIHZhbCA9IHN0Lm5leHRUb2tlbigpLnRyaW0oKTsKKwkJCQkJaWYoY29sdW1uID09IDApIHsKKwkJCQkJCWl0ID0gSW50ZWdlci5wYXJzZUludCh2YWwpOworCQkJCQkJaXRlcmF0aW9uLmFkZChpdCk7CisJCQkJCX0KKwkJCQkJZWxzZSBpZihjb2x1bW4gPT0gMSkgdGltZS5hZGQodmFsKTsKKwkJCQkJZWxzZSB7IC8vIGNvbHVtbiA+IDEsIGxvY2F0aW9uIGNvbHVtbgorCQkJCQkJaWYoYWdncmVnYXRlLmNvbnRhaW5zS2V5KGl0KSkgCisJCQkJCQkJYWdncmVnYXRlLnB1dChpdCwgYWdncmVnYXRlLmdldChpdCkrRG91YmxlLnBhcnNlRG91YmxlKHZhbCkpOworCQkJCQkJZWxzZSBhZ2dyZWdhdGUucHV0KGl0LCBEb3VibGUucGFyc2VEb3VibGUodmFsKSk7CisJCQkJCX0KKwkJCQkgICAgKysgY29sdW1uOworCQkJICAgICB9IC8vIHJlYWQgdG9rZW5zCisJCSAgICB9IC8vcmVhZCBpdGVyYXRpb24gbGluZQorCQkgICAgCisJCSAgICBkLmNsb3NlKCk7CisJCSAgICAvLyBXcml0ZQorCQkgICAgRmlsZVdyaXRlciBmdyA9IG5ldyBGaWxlV3JpdGVyKG91dGZpbGVuYW1lKTsKKwkJICAgIGZ3LndyaXRlKCJpdGVyYXRpb24sdGltZSxhZ2dyZWdhdGVcbiIpOyAvLyBoZWFkZXIKKwkJICAgIGludCByb3cgPSAwOworCQkgICAgZm9yKGludCBpdDppdGVyYXRpb24pIHsKKwkJICAgIAlmdy53cml0ZShpdCsiLCIpOworCQkgICAgCWZ3LndyaXRlKHRpbWUuZ2V0KHJvdykrIiwiKTsKKwkJICAgIAlmdy53cml0ZShhZ2dyZWdhdGUuZ2V0KGl0KSsiXG4iKTsKKwkJICAgIAkrK3JvdzsKKwkJICAgIH0KKwkJICAgIGZ3LmZsdXNoKCk7CisJCSAgICBmdy5jbG9zZSgpOworCQl9IGNhdGNoKEV4Y2VwdGlvbiBlKSB7CisJCQllLnByaW50U3RhY2tUcmFjZSgpOworCQl9CisJfQorCit9CmRpZmYgLS1naXQgYS9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLnV0aWwuYW5hbHlzaXMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdXRpbC9hbmFseXNpcy92aWV3cy9BbmFseXNpc0NvbnRyb2wuamF2YSBiL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0udXRpbC5hbmFseXNpcy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91dGlsL2FuYWx5c2lzL3ZpZXdzL0FuYWx5c2lzQ29udHJvbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA5ODc5M2EKLS0tIC9kZXYvbnVsbAorKysgYi9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLnV0aWwuYW5hbHlzaXMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdXRpbC9hbmFseXNpcy92aWV3cy9BbmFseXNpc0NvbnRyb2wuamF2YQpAQCAtMCwwICsxLDI5MyBAQAorLy8gQW5hbHlzaXNDb250cm9sCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0udXRpbC5hbmFseXNpcy52aWV3czsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNywgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKK2ltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CitpbXBvcnQgamF2YS51dGlsLk1hcDsKK2ltcG9ydCBqYXZhLnV0aWwuU2V0OworaW1wb3J0IGphdmEudXRpbC5jb25jdXJyZW50LkNvcHlPbldyaXRlQXJyYXlMaXN0OworCitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBsYXRmb3JtOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLklkZW50aWZpYWJsZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnV0aWwuYW5hbHlzaXMuTW9uaXRvclByZWZlcmVuY2VzOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5TV1Q7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5EaXNwb3NlRXZlbnQ7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5EaXNwb3NlTGlzdGVuZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmdyYXBoaWNzLkZvbnQ7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmdyYXBoaWNzLkZvbnREYXRhOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5sYXlvdXQuRmlsbExheW91dDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QubGF5b3V0LkZvcm1MYXlvdXQ7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQnV0dG9uOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5EaXNwbGF5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkxhYmVsOworCisvKioKKyAqIEFuYWx5c2lzQ29udHJvbCBpcyBhIHN1YmNsYXNzIG9mIENhbnZhcyBzdWl0YWJsZSBmb3IgY2hhcnQgZHJhd2luZ3MuCisgKi8KK2Fic3RyYWN0IHB1YmxpYyBjbGFzcyBBbmFseXNpc0NvbnRyb2wgZXh0ZW5kcyBDb21wb3NpdGUgIHsKKwkKKwkvKioKKwkgKiB1c2VyIHByZWZlcmVuY2VzCisJICovCisJTW9uaXRvclByZWZlcmVuY2VzIHByZWZzID0gbmV3IE1vbml0b3JQcmVmZXJlbmNlcygpOworCisJcHJvdGVjdGVkIExhYmVsIHNpbXVsYXRpb25OYW1lTGFiZWw7CisKKwkvKioKKwkgKiAKKwkgKi8KKwlzdGF0aWMgZmluYWwgU3RyaW5nIFJPT1RfUEFUSCA9ICBQbGF0Zm9ybS5nZXRMb2NhdGlvbigpLnRvT1NTdHJpbmcoKTsKKwkKKwkJCisJcHJvdGVjdGVkIHN0YXRpYyBNYXA8U3RyaW5nLE9iamVjdD4gY29udHJvbFBhcmFtZXRlcnNNYXAgPSBuZXcgSGFzaE1hcDxTdHJpbmcsT2JqZWN0PigpOworCQorCS8qKiAKKwkgKiBhIHN0cmluZyBmb3Igc2V0dGluZyB1c2VyIGZlZWRiYWNrIG1lc3NhZ2VzCisJICovCisJcHJvdGVjdGVkIFN0cmluZyB1c2VyTWVzc2FnZSA9ICIiOworCQorCS8qKgorCSAqIG5vbiBOTFMnZCBTdHJpbmcKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBJTkNJREVOQ0UgICA9ICJJbmNpZGVuY2UiOworCS8qKgorCSAqIG5vbiBOTFMnZCBTdHJpbmcKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBERUxUQUJJUlRIUyA9ICJkZWx0YUJpcnRocyI7CisJLyoqCisJICogbm9uIE5MUydkIFN0cmluZworCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIERFTFRBREVBVEhTID0gImRlbHRhRGVhdGhzIjsKKwkvKioKKwkgKiBub24gTkxTJ2QgU3RyaW5nCisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgVElNRSAgICAgICAgPSAidGltZSI7CisJLyoqCisJICogbm9uIE5MUydkIFN0cmluZworCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIElURVJBVElPTiAgID0gIiNpdGVyYXRpb24iOworCQorCQorCS8qKgorCSAqIGEgbGFiZWwgdG8gZGlzcGxheSBtZXNzYWdlcworCSAqLworCXByb3RlY3RlZCBMYWJlbCB1c2VyTWVzc2FnZUxhYmVsID0gbnVsbDsKKwkKKworCisJLyoqCisJICogYnV0dG9uIHRvIHRyaWdnZXIgdGhlIGFuYWx5c2lzCisJICovCisJcHJvdGVjdGVkIEJ1dHRvbiBhbmFseXplQnV0dG9uID0gbnVsbDsKKworCXByb3RlY3RlZCBCdXR0b24gc2VsZWN0RXN0aW1hdG9yQnV0dG9uID0gbnVsbDsKKworCQorCS8qKgorCSAqIFRoZSBjb2xsZWN0aW9uIG9mIElTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIgd2FpdGluZyB0byBiZSB0b2xkIGFib3V0CisJICogc2VsZWN0aW9ucy4KKwkgKi8KKwlwcm90ZWN0ZWQgZmluYWwgTGlzdDxJU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyPiBsaXN0ZW5lcnMgPSBuZXcgQ29weU9uV3JpdGVBcnJheUxpc3Q8SVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcj4oKTsKKworCS8qKgorCSAqIFRoZSBjb2xsZWN0aW9uIG9mIElTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIgd2FpdGluZyB0byBiZSB0b2xkIGFib3V0CisJICogc2VsZWN0aW9ucy4KKwkgKi8KKwlwcm90ZWN0ZWQgZmluYWwgTGlzdDxJUmVtb3ZlTGlzdGVuZXI+IHJlbW92ZUxpc3RlbmVycyA9IG5ldyBDb3B5T25Xcml0ZUFycmF5TGlzdDxJUmVtb3ZlTGlzdGVuZXI+KCk7CisKKwkKKworCXByb3RlY3RlZCBMYWJlbCBpZGVudGlmaWFibGVUaXRsZTsKKworCS8qKgorCSAqIFRoZSB3aWR0aCBvZiB0aGUgbGF5b3V0IG1hcmdpbi4KKwkgKi8KKwlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIGludCBNQVJHSU5fV0lEVEggPSA1OworCisJLyoqCisJICogVGhlIGhlaWdodCBvZiB0aGUgbGF5b3V0IG1hcmdpbi4KKwkgKi8KKwlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIGludCBNQVJHSU5fSEVJR0hUID0gNTsKKworCS8qKgorCSAqIEBwYXJhbSBwYXJlbnQKKwkgKiBAcGFyYW0gc3R5bGUKKwkgKi8KKwlwdWJsaWMgQW5hbHlzaXNDb250cm9sKGZpbmFsIENvbXBvc2l0ZSBwYXJlbnQsIGZpbmFsIGludCBzdHlsZSkgeworCQlzdXBlcihwYXJlbnQsIHN0eWxlKTsKKworCQl0aGlzLmFkZERpc3Bvc2VMaXN0ZW5lcihuZXcgRGlzcG9zZUxpc3RlbmVyKCkgeworCQkJLyoqCisJCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuRGlzcG9zZUxpc3RlbmVyI3dpZGdldERpc3Bvc2VkKG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuRGlzcG9zZUV2ZW50KQorCQkJICovCisJCQlwdWJsaWMgdm9pZCB3aWRnZXREaXNwb3NlZChAU3VwcHJlc3NXYXJuaW5ncygidW51c2VkIikKKwkJCWZpbmFsIERpc3Bvc2VFdmVudCBlKSB7CisJCQkJZGlzcG9zZSgpOworCQkJfQorCQl9KTsKKworCQlmaW5hbCBGb3JtTGF5b3V0IGxheW91dCA9IG5ldyBGb3JtTGF5b3V0KCk7CisJCWxheW91dC5tYXJnaW5IZWlnaHQgPSBNQVJHSU5fSEVJR0hUOworCQlsYXlvdXQubWFyZ2luV2lkdGggPSBNQVJHSU5fV0lEVEg7CisJCXNldExheW91dChsYXlvdXQpOworCisJfSAvLyBBbmFseXNpc0NvbnRyb2wKKworCS8qKgorCSAqIEBwYXJhbSBwYXJlbnQKKwkgKiAgICAgICAgICAgIHRoZSBwYXJlbnQgU1dUIGNvbnRyb2wgdGhhdCB0aGlzIGNvbXBvc2l0ZSB3aWxsIGJlIGEgY2hpbGQgb2YKKwkgKiBAcmV0dXJuIHRoZSBTV1QgQ29tcG9zaXRlIHRvIGJlIGRpc3BsYXllZCBhYm92ZSB0aGUgTWFwQ2FudmFzIGluIHRoZQorCSAqICAgICAgICAgY29udHJvbAorCSAqLworCXByb3RlY3RlZCBDb21wb3NpdGUgY3JlYXRlVG9wQ29tcG9zaXRlKGZpbmFsIENvbXBvc2l0ZSBwYXJlbnQpIHsKKwkJZmluYWwgQ29tcG9zaXRlIHRvcENvbXBvc2l0ZSA9IG5ldyBDb21wb3NpdGUocGFyZW50LCBTV1QuTk9ORSk7CisKKwkJZmluYWwgRmlsbExheW91dCB0b3BDb21wb3NpdGVMYXlvdXQgPSBuZXcgRmlsbExheW91dChTV1QuVkVSVElDQUwpOworCQl0b3BDb21wb3NpdGUuc2V0TGF5b3V0KHRvcENvbXBvc2l0ZUxheW91dCk7CisKKwkJc2ltdWxhdGlvbk5hbWVMYWJlbCA9IG5ldyBMYWJlbCh0b3BDb21wb3NpdGUsIFNXVC5DRU5URVIpOworCQlzaW11bGF0aW9uTmFtZUxhYmVsLnNldFRleHQoIiIpOworCisJCXJldHVybiB0b3BDb21wb3NpdGU7CisJfSAvLyBjcmVhdGVUb3BDb21wb3NpdGUKKwkKKwkvKioKKwkgKiBjcmVhdGVzIHRoZSBBbmFseXplQnV0dG9uQ29tcG9zaXRlIGFuZCBpdHMgY29tcG9zaXRlIGNvbnRhaW5lcgorCSAqIEBwYXJhbSBjb250cm9sCisJICogQHBhcmFtIHRoZSBidXR0b24gbGFiZWwKKwkgKiBAcmV0dXJuIHRoZSBjb21wb3NpdGUKKwkgKi8KKwlDb21wb3NpdGUgZ2V0QW5hbHl6ZUJ1dHRvbkNvbXBvc2l0ZShBbmFseXNpc0NvbnRyb2wgY29udHJvbCwgU3RyaW5nIGxhYmVsKSB7CisJCUNvbXBvc2l0ZSBhbmFseXplQ29tcG9zaXRlID0gbmV3IENvbXBvc2l0ZShjb250cm9sLCBTV1QuQk9SREVSKTsKKwkgICAgRmlsbExheW91dCBmaWxsTGF5b3V0ID0gbmV3IEZpbGxMYXlvdXQoKTsKKwkgICAgZmlsbExheW91dC50eXBlID0gU1dULkhPUklaT05UQUw7CisJICAgIGFuYWx5emVDb21wb3NpdGUuc2V0TGF5b3V0KGZpbGxMYXlvdXQpOworCSAgICBMYWJlbCBsZWZ0TGFiZWwgPSBuZXcgTGFiZWwoYW5hbHl6ZUNvbXBvc2l0ZSwgU1dULk5PTkUpOworCSAgICBsZWZ0TGFiZWwuc2V0VGV4dCgiICIpOy8vIGp1c3QgYSBzcGFjZXIKKwkgICAgYW5hbHl6ZUJ1dHRvbiA9IG5ldyBCdXR0b24oYW5hbHl6ZUNvbXBvc2l0ZSwgU1dULk5PTkUpOworCQlhbmFseXplQnV0dG9uLnNldFRleHQobGFiZWwpOworCQlMYWJlbCByaWdodExhYmVsID0gbmV3IExhYmVsKGFuYWx5emVDb21wb3NpdGUsIFNXVC5OT05FKTsKKwkJcmlnaHRMYWJlbC5zZXRUZXh0KCIgIik7Ly8ganVzdCBhIHNwYWNlcgorCSAgIAorCSAgICByZXR1cm4gYW5hbHl6ZUNvbXBvc2l0ZTsKKwl9Ly9nZXRBbmFseXplQnV0dG9uQ29tcG9zaXRlCisJCisKKworCS8qKgorCSAqIAorCSAqIEBwYXJhbSBmb2xkZXJOYW1lCisJICovCisJcHJvdGVjdGVkIGFic3RyYWN0IHZvaWQgaW5pdGlhbGl6ZUhlYWRlcihTdHJpbmcgZm9sZGVyTmFtZSk7CisKKwkKKwkvKioKKwkgKiBBbGwgY29udHJvbGxlcnMgbXVzdCBpbXBsZW1lbnQgdGhpcyAKKwkgKiB0byByZW1vdmUgdGhlIGNvbnRyb2wgZS5nLiBieSBhIHJlbW92ZSBidXR0b24gZXZlbnQKKwkgKi8KKwlwdWJsaWMgYWJzdHJhY3Qgdm9pZCByZW1vdmUoKSA7CisJCisJCisJCisJCisJLyoqCisJICogCisJICogQHBhcmFtIGxpc3RlbmVyCisJICovCisJcHVibGljIHZvaWQgYWRkSVJlbW92ZUxpc3RlbmVyKElSZW1vdmVMaXN0ZW5lciBsaXN0ZW5lcikgeworCQlyZW1vdmVMaXN0ZW5lcnMuYWRkKGxpc3RlbmVyKTsKKwl9CisJCisJLyoqCisJICogCisJICogQHBhcmFtIGxpc3RlbmVyCisJICovCisJcHVibGljIHZvaWQgcmVtb3ZlSVJlbW92ZUxpc3RlbmVyKElSZW1vdmVMaXN0ZW5lciBsaXN0ZW5lcikgeworCQlyZW1vdmVMaXN0ZW5lcnMucmVtb3ZlKGxpc3RlbmVyKTsKKwl9CisJCisJLyoqCisJICogc2V0IG9mIGlkZW50aWZpYWJsZXNUb0ZpdAorCSAqIEBwYXJhbSBpZGVudGlmaWFibGVzVG9GaXQKKwkgKi8KKwlwdWJsaWMgdm9pZCBmaXJlUmVtb3ZlRXZlbnQoU2V0PElkZW50aWZpYWJsZT4gaWRlbnRpZmlhYmxlc1RvRml0KSB7CisJCWZvciAoZmluYWwgSVJlbW92ZUxpc3RlbmVyIGxpc3RlbmVyIDogcmVtb3ZlTGlzdGVuZXJzKSB7CisJCQlJdGVyYXRvcjxJZGVudGlmaWFibGU+IGl0ZXIgPSBpZGVudGlmaWFibGVzVG9GaXQuaXRlcmF0b3IoKTsKKwkJCXdoaWxlKChpdGVyIT1udWxsKSYmKGl0ZXIuaGFzTmV4dCgpKSkgeworCQkJCUlkZW50aWZpYWJsZSBpZGVudCA9IGl0ZXIubmV4dCgpOworCQkJCWxpc3RlbmVyLmlkZW50aWZpYWJsZVJlbW92ZWQoaWRlbnQpOworCQkJfQorCQkJCisJCX0gLy8gZm9yIGVhY2ggSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcgorCX0KKworCS8qKgorCSAqIGdldCB2YWx1ZXMgZm9yIGdyYXBocyBhcyBkb3VibGUgYXJyYXkKKwkgKiBAcGFyYW0gY2hhcnRJbmRleCBhbGxvd3MgbXVsdGlwbGUgY2hhcnRzIGluIGEgdmlldy4gRGVmYXVsdCBpcyBpbmRleD0wIChvbmUgY2hhcnQpCisJICogQHBhcmFtIHN0YXRlCisJICogQHJldHVybiB2YWx1ZSBhcnJheQorCSAqLworCXB1YmxpYyBhYnN0cmFjdCBkb3VibGVbXSBnZXRWYWx1ZXMoaW50IGNoYXJ0SW5kZXgsIGludCBzdGF0ZSk7CisJCisJLyoqCisJICogdXBkYXRlIHRoZSBtZXNzYWdlIHRleHQKKwkgKi8KKwlwdWJsaWMgdm9pZCB1cGRhdGVNZXNzYWdlKCkgeworCQlpZih1c2VyTWVzc2FnZUxhYmVsIT1udWxsKQl1c2VyTWVzc2FnZUxhYmVsLnNldFRleHQodXNlck1lc3NhZ2UpOworCX0KKwkKKwkvKioKKwkgKiB1cGRhdGUgdGhlIG1lc3NhZ2UgdGV4dAorCSAqIEBwYXJhbSBtZXNzYWdlIAorCSAqLworCXB1YmxpYyB2b2lkIHVwZGF0ZU1lc3NhZ2UoU3RyaW5nIG1lc3NhZ2UpIHsKKwkJdXNlck1lc3NhZ2UgPSBtZXNzYWdlOworCQlpZih1c2VyTWVzc2FnZUxhYmVsIT1udWxsKQl1c2VyTWVzc2FnZUxhYmVsLnNldFRleHQodXNlck1lc3NhZ2UpOworCX0KKwkKKwkvKioKKwkgKiBnZXQgdGhlIG5hbWUgb2YgdGhlIHRpbWUgc2VyaWVzIGZvciBhIGdpdmVuIHN0YXRlCisJICogQHBhcmFtIGNoYXJ0SW5kZXggIGFsbG93cyBtdWx0aXBsZSBjaGFydHMgaW4gYSB2aWV3LiBEZWZhdWx0IGlzIGluZGV4PTAgKG9uZSBjaGFydCkKKwkgKiBAcGFyYW0gc3RhdGUKKwkgKiBAcmV0dXJuIHByb3BlcnR5IG5hbWUKKwkgKi8KKyAgICBwdWJsaWMgYWJzdHJhY3QgU3RyaW5nIGdldFByb3BlcnR5KGludCBjaGFydEluZGV4LCBpbnQgc3RhdGUpOworICAgIAorCisgICAgLyoqCisgICAgICogCisgICAgICogQHBhcmFtIGNoYXJ0SW5kZXggIGFsbG93cyBtdWx0aXBsZSBjaGFydHMgaW4gYSB2aWV3LiBEZWZhdWx0IGlzIGluZGV4PTAgKG9uZSBjaGFydCkKKyAgICAgKiBAcmV0dXJuIG51bWJlciBvZiBwcm9wZXJ0aWVzIHRvIHBsb3QKKyAgICAgKi8KKyAgICBwdWJsaWMgYWJzdHJhY3QgaW50IGdldE51bVByb3BlcnRpZXMoaW50IGNoYXJ0SW5kZXgpOworICAgIAorICAgIC8qKgorCSAqIEVhY2ggQ29udHJvbCBjbGFzcyBtYXkgYWRkIG9iamVjdHMgdG8gdGhpcyBtYXAKKwkgKiBAcmV0dXJuIHRoZSBjb250cm9sIHBhcmFtZXRlcnMgbWFwcworCSAqLworCXB1YmxpYyBhYnN0cmFjdCBNYXA8U3RyaW5nLCBPYmplY3Q+IGdldENvbnRyb2xQYXJhbWV0ZXJzTWFwKCkgOworCQorCisJcHJvdGVjdGVkIEZvbnQgZ2V0TGFyZ2VyRm9udChpbnQgc2l6ZSwgRGlzcGxheSBkaXNwbGF5KSB7CisJCUZvbnREYXRhW10gZm9udERhdGEgPSBpZGVudGlmaWFibGVUaXRsZS5nZXRGb250KCkuZ2V0Rm9udERhdGEoKTsKKwkJZm9yKGludCBpID0gMDsgaSA8IGZvbnREYXRhLmxlbmd0aDsgKytpKQorCQkgICAgZm9udERhdGFbaV0uc2V0SGVpZ2h0KHNpemUpOworCisJCSByZXR1cm4gbmV3IEZvbnQoZGlzcGxheSwgZm9udERhdGEpOworCX0KKworfSAvLyBBbmFseXNpc0NvbnRyb2wKZGlmZiAtLWdpdCBhL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0udXRpbC5hbmFseXNpcy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91dGlsL2FuYWx5c2lzL3ZpZXdzL0FuYWx5c2lzQ29udHJvbEZhY3RvcnkuamF2YSBiL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0udXRpbC5hbmFseXNpcy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91dGlsL2FuYWx5c2lzL3ZpZXdzL0FuYWx5c2lzQ29udHJvbEZhY3RvcnkuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MTM1NjQ3Ci0tLSAvZGV2L251bGwKKysrIGIvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS51dGlsLmFuYWx5c2lzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3V0aWwvYW5hbHlzaXMvdmlld3MvQW5hbHlzaXNDb250cm9sRmFjdG9yeS5qYXZhCkBAIC0wLDAgKzEsMzYgQEAKKy8vIEFuYWx5c2lzQ29udHJvbEZhY3RvcnkuamF2YQorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnV0aWwuYW5hbHlzaXMudmlld3M7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDcsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlOworCisvKioKKyAqIFRoaXMgaW50ZXJmYWNlIGlzIGltcGxlbWVudGVkIGJ5IGZhY3RvcmllcyB0aGF0IGNyZWF0ZSBpbnN0YW5jZXMgb2YKKyAqIHtAbGluayBBbmFseXNpc0NvbnRyb2x9LgorICovCitwdWJsaWMgaW50ZXJmYWNlIEFuYWx5c2lzQ29udHJvbEZhY3RvcnkgeworCisJLyoqCisJICogCisJICogQHBhcmFtIHBhcmVudAorCSAqIEBwYXJhbSBkaXJOYW1lIAorCSAqIEByZXR1cm4gdGhlIEFuYWx5c2lzQ29udHJvbAorCSAqLworCUFuYWx5c2lzQ29udHJvbCBjcmVhdGUoZmluYWwgQ29tcG9zaXRlIHBhcmVudCwgU3RyaW5nIGRpck5hbWUpOworCisJLyoqCisJICogQHJldHVybiBUT0RPIEpGSworCSAqLworCXB1YmxpYyBTdHJpbmcgZ2V0Q29udHJvbFR5cGUoKTsKKworfSAvLyBBbmFseXNpc0NvbnRyb2xGYWN0b3J5CmRpZmYgLS1naXQgYS9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLnV0aWwuYW5hbHlzaXMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdXRpbC9hbmFseXNpcy92aWV3cy9BbmFseXNpc1ZpZXdlci5qYXZhIGIvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS51dGlsLmFuYWx5c2lzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3V0aWwvYW5hbHlzaXMvdmlld3MvQW5hbHlzaXNWaWV3ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42M2U1NDFiCi0tLSAvZGV2L251bGwKKysrIGIvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS51dGlsLmFuYWx5c2lzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3V0aWwvYW5hbHlzaXMvdmlld3MvQW5hbHlzaXNWaWV3ZXIuamF2YQpAQCAtMCwwICsxLDIwOCBAQAorLy8gQW5hbHlzaXNWaWV3ZXIuamF2YQorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnV0aWwuYW5hbHlzaXMudmlld3M7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDcsMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5WaWV3ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS51aS52aWV3cy5nZW9ncmFwaGljLm1hcC5NYXBDb250cm9sOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5TV1Q7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5EaXNwb3NlRXZlbnQ7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5EaXNwb3NlTGlzdGVuZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5GaWxsTGF5b3V0OworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db250cm9sOworCisvKioKKyAqIFRoaXMgY2xhc3MgcHJlc2VudHMgInZpZXdzIiBvZiB0aGUgcnVubmluZyBzaW11bGF0aW9ucy4KKyAqLworcHVibGljIGNsYXNzIEFuYWx5c2lzVmlld2VyIGV4dGVuZHMgVmlld2VyICB7CisKKwkKKwkKKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgVVJJX1BSRUZJWCA9ICIvcmVzb3VyY2VzL2RhdGEvc2NlbmFyaW8vZGlzZWFzZS8iOworCQorCQorCisJLyoqCisJICogVGhpcyBpcyB0aGUgdG9wLWxldmVsIGNvbnRyb2wgb2YgdGhlIHZpZXdlci4gSXQgY29udGFpbnMgdGhlCisJICoge0BsaW5rIE1hcENvbnRyb2x9cyB0aGF0IGRpc3BsYXkgdGhlIGN1cnJlbnQgc3RhdGUgb2YgdGhlCisJICoge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uam9icy5zaW11bGF0aW9uLlNpbXVsYXRpb259cy4KKwkgKi8KKwlmaW5hbCBDb21wb3NpdGUgY29tcG9zaXRlOworCisJCisKKworCS8qKgorCSAqIFRoaXMgZmFjdG9yeSBpcyB1c2VkIHRvIGNyZWF0ZSBpbnN0YW5jZXMgb2Yge0BsaW5rIEFuYWx5c2lzQ29udHJvbH0gaW4gdGhlCisJICogbWV0aG9kIHtAbGluayAjcG9wdWxhdGVWaWV3KCl9CisJICovCisJcHJpdmF0ZSBmaW5hbCBBbmFseXNpc0NvbnRyb2xGYWN0b3J5IGFjZjsKKworCS8qKgorCSAqIEBwYXJhbSBwYXJlbnQKKwkgKiAgICAgICAgICAgIHRoZSBTV1QgcGFyZW50IG9mIHRoZSBjb250cm9sIHRoYXQgbWFrZXMgdXAgdGhlIHZpZXdlcgorCSAqIEBwYXJhbSBhY2YKKwkgKiAgICAgICAgICAgIHRoZSBmYWN0b3J5IHRoYXQgY3JlYXRlcyBpbnN0YW5jZSBvZiB7QGxpbmsgQW5hbHlzaXNDb250cm9sfQorCSAqLworCXB1YmxpYyBBbmFseXNpc1ZpZXdlcihmaW5hbCBDb21wb3NpdGUgcGFyZW50LCBmaW5hbCBBbmFseXNpc0NvbnRyb2xGYWN0b3J5IGFjZikgeworCisJCWNvbXBvc2l0ZSA9IG5ldyBDb21wb3NpdGUocGFyZW50LCBTV1QuTk9ORSk7CisJCWZpbmFsIEZpbGxMYXlvdXQgY29tcG9zaXRlTGF5b3V0ID0gbmV3IEZpbGxMYXlvdXQoU1dULkhPUklaT05UQUwpOworCQljb21wb3NpdGUuc2V0TGF5b3V0KGNvbXBvc2l0ZUxheW91dCk7CisKKwkJLy8gUmVtZW1iZXIgdGhlIGZhY3RvcnkgdGhhdCB3ZSdsbCB1c2UgdG8gY3JlYXRlIGluc3RhbmNlcyBvZgorCQkvLyBBbmFseXNpc0NvbnRyb2wKKwkJdGhpcy5hY2YgPSBhY2Y7CisJCXJlZnJlc2goKTsKKwkJY29tcG9zaXRlLnBhY2soKTsKKwkJCisJfSAvLyBBbmFseXNpc1ZpZXdlcgorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlZpZXdlciNnZXRDb250cm9sKCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgQ29udHJvbCBnZXRDb250cm9sKCkgeworCQlyZXR1cm4gY29tcG9zaXRlOworCX0gLy8gZ2V0Q29udHJvbAorCisKKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5WaWV3ZXIjcmVmcmVzaCgpCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgcmVmcmVzaCgpIHsKKwkJcG9wdWxhdGVWaWV3KCk7CisJfSAvLyByZWZyZXNoCisKKwkKKwkKKwkKKwkvKioKKwkgKiBDcmVhdGUgYW5kIGRpc3Bvc2Ugb2YgTWFwQ29udHJvbHMgYXMgbmVjZXNzYXJ5IHRvIGRpc3BsYXkgdGhlIHNlbGVjdGVkCisJICogU2ltdWxhdGlvbnMuCisJICovCisJcHJpdmF0ZSB2b2lkIHBvcHVsYXRlVmlldygpIHsKKwkJCisJCQorCQkvLyBwcm9ibGVtIGhlcmUgd2hlbiB3ZSBzdGFydCB1cAorCQkvLyBBcmUgd2UgZG9uZT8KKwkJaWYgKGNvbXBvc2l0ZS5pc0Rpc3Bvc2VkKCkpIHsKKwkJCS8vIFllcworCQkJcmV0dXJuOworCQl9IC8vIGlmCisKKwkgICAgU3RyaW5nIGRpcmVjdG9yeSA9ICJkYXRhIGRpcmVjdG9yeSBoZXJlIjsKKwkJZmluYWwgQW5hbHlzaXNDb250cm9sIGFuYWx5c2lzQ29udHJvbCA9IGFjZi5jcmVhdGUoCisJCQkJY29tcG9zaXRlLAorCQkJCWRpcmVjdG9yeSk7CisJCisJCWFuYWx5c2lzQ29udHJvbC5hZGREaXNwb3NlTGlzdGVuZXIobmV3IERpc3Bvc2VMaXN0ZW5lcigpIHsKKwkJCS8qKgorCQkJICogQHNlZSBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLkRpc3Bvc2VMaXN0ZW5lciN3aWRnZXREaXNwb3NlZChvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLkRpc3Bvc2VFdmVudCkKKwkJCSAqLworCQkJcHVibGljIHZvaWQgd2lkZ2V0RGlzcG9zZWQoQFN1cHByZXNzV2FybmluZ3MoInVudXNlZCIpCisJCQlmaW5hbCBEaXNwb3NlRXZlbnQgZSkgeworCQkJCWNvbXBvc2l0ZS5sYXlvdXQodHJ1ZSwgdHJ1ZSk7CisJCQkJY29tcG9zaXRlLnJlZHJhdygpOworCQkJfQorCQl9KTsKKworCQljb21wb3NpdGUubGF5b3V0KHRydWUsIHRydWUpOworCQljb21wb3NpdGUucmVkcmF3KCk7CisJfSAvLyBwb3B1bGF0ZVZpZXcKKwkKKwkKKwkKKworCQorCisJCisKKwkKKwkvKioKKwkgKiBSZW1vdmVzIHdoaXRlc3BhY2UsICcsJywgJy4nLCBldGMuCisJICogQHBhcmFtIHMKKwkgKiBAcmV0dXJuIGEgZmlsdGVyZWQgc3RyaW5nCisJICovCisJcHVibGljIHN0YXRpYyBTdHJpbmcgbmFtZUZpbHRlciAoU3RyaW5nIHMpIHsKKwkJU3RyaW5nIHMxID0gcy50cmltKCk7CisJCXMxID0gczEucmVwbGFjZSgnIicsJyAnKTsKKwkJczEgPSBzMS5yZXBsYWNlQWxsKCIgIiwiIik7CisJCXMxID0gczEucmVwbGFjZSgnLCcsJ18nKTsKKwkJczEgPSBzMS5yZXBsYWNlKCcuJywnXycpOworCQlzMSA9IHMxLnJlcGxhY2VBbGwoIl8iLCIiKTsKKwkJcyA9IHMxOworCQkKKwkJcmV0dXJuIHM7CisJfQorCisJCisJCisJCisKKwkvKioKKwkgKiBmaWx0ZXJzIHRoZSBsb2NhdGlvbiBpZCBwcmVmaXggZnJvbSB0aGUgYmVnaW5uaW5nIG9mCisJICogIGEgbm9kZXMgSUQgZm9yIGdlbmVyYXRpb24gb2YgYSBmaWxlIG5hbWUKKwkgKiBAcGFyYW0gdW5maWx0ZXJlZAorCSAqIEByZXR1cm4gdGhlIGZpbHRlcmVkIGZpbGUgbmFtZSB1c2luZyBsb2NhdGlvbiBpZC4KKwkgKi8KKwlwdWJsaWMgc3RhdGljIFN0cmluZyBmaWx0ZXJGaWxlbmFtZShTdHJpbmcgdW5maWx0ZXJlZCkgeworCQlpbnQgbGFzdCA9IHVuZmlsdGVyZWQuaW5kZXhPZihVUklfUFJFRklYKTsKKwkJaWYgKGxhc3QgPj0wKSB7CisJCQlsYXN0ICs9IFVSSV9QUkVGSVgubGVuZ3RoKCk7CisJCQlyZXR1cm4gdW5maWx0ZXJlZC5zdWJzdHJpbmcobGFzdCwgdW5maWx0ZXJlZC5sZW5ndGgoKSk7CisJCX0gCisJCXJldHVybiB1bmZpbHRlcmVkOworCisJCisJfQorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlZpZXdlciNnZXRJbnB1dCgpCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIE9iamVjdCBnZXRJbnB1dCgpIHsKKwkJLy8gbm90IHVzZWQKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlZpZXdlciNzZXRJbnB1dChqYXZhLmxhbmcuT2JqZWN0KQorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIHNldElucHV0KEBTdXBwcmVzc1dhcm5pbmdzKCJ1bnVzZWQiKSBPYmplY3QgaW5wdXQpIHsKKwkJLy8gbm90IHVzZWQKKwl9CisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuVmlld2VyI3NldFNlbGVjdGlvbihvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb24sIGJvb2xlYW4pCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgc2V0U2VsZWN0aW9uKEBTdXBwcmVzc1dhcm5pbmdzKCJ1bnVzZWQiKSBJU2VsZWN0aW9uIHNlbGVjdGlvbiwgQFN1cHByZXNzV2FybmluZ3MoInVudXNlZCIpIGJvb2xlYW4gcmV2ZWFsKSB7CisJCS8vIG5vdCB1c2VkCisJfQorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlZpZXdlciNnZXRTZWxlY3Rpb24oKQorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBJU2VsZWN0aW9uIGdldFNlbGVjdGlvbigpIHsKKwkJLy8gbm90IHVzZWQKKwkJcmV0dXJuIG51bGw7CisJfQorCisJCit9IC8vIEFuYWx5c2lzVmlld2VyCmRpZmYgLS1naXQgYS9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLnV0aWwuYW5hbHlzaXMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdXRpbC9hbmFseXNpcy92aWV3cy9FcGlkZW1pY0NvbnRyb2wuamF2YSBiL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0udXRpbC5hbmFseXNpcy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91dGlsL2FuYWx5c2lzL3ZpZXdzL0VwaWRlbWljQ29udHJvbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVlMjkyMmUKLS0tIC9kZXYvbnVsbAorKysgYi9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLnV0aWwuYW5hbHlzaXMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdXRpbC9hbmFseXNpcy92aWV3cy9FcGlkZW1pY0NvbnRyb2wuamF2YQpAQCAtMCwwICsxLDc1NCBAQAorLy8gRXN0aW1hdG9yQ29udHJvbC5qYXZhCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0udXRpbC5hbmFseXNpcy52aWV3czsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNywgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OworaW1wb3J0IGphdmEudXRpbC5BcnJheXM7CitpbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOworaW1wb3J0IGphdmEudXRpbC5MaXN0OworaW1wb3J0IGphdmEudXRpbC5NYXA7CitpbXBvcnQgamF2YS51dGlsLlNldDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmJpcnQuY2hhcnQubW9kZWwuYXR0cmlidXRlLkNvbG9yRGVmaW5pdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5iaXJ0LmNoYXJ0Lm1vZGVsLmF0dHJpYnV0ZS5pbXBsLkNvbG9yRGVmaW5pdGlvbkltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuZGlhbG9ncy5Qcm9ncmVzc01vbml0b3JEaWFsb2c7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5TY2VuYXJpb0luaXRpYWxpemF0aW9uRXhjZXB0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuaW1wbC5SZWZlcmVuY2VTY2VuYXJpb0RhdGFNYXBJbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuaW1wbC5SZWZlcmVuY2VTY2VuYXJpb0RhdGFNYXBJbXBsLlJlZmVyZW5jZVNjZW5hcmlvRGF0YUluc3RhbmNlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMudXRpbC5DU1ZzY2VuYXJpb0xvYWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLklkZW50aWZpYWJsZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuQWN0aXZhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udXRpbC5hbmFseXNpcy5BZ2dyZWdhdGVEYXRhV3JpdGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udXRpbC5hbmFseXNpcy5TY2VuYXJpb0FuYWx5c2lzU3VpdGU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LlNXVDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLlNlbGVjdGlvbkFkYXB0ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5TZWxlY3Rpb25FdmVudDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZ3JhcGhpY3MuQ29sb3I7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmdyYXBoaWNzLkZvbnQ7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5GaWxsTGF5b3V0OworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5sYXlvdXQuRm9ybUF0dGFjaG1lbnQ7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5Gb3JtRGF0YTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QubGF5b3V0LkZvcm1MYXlvdXQ7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQnV0dG9uOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5EaXJlY3RvcnlEaWFsb2c7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuRGlzcGxheTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5GaWxlRGlhbG9nOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkxhYmVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlNoZWxsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlRleHQ7CisKKy8qKgorICogR1VJIGZvciBhZ2dyZWdhdGUgdmlldworICovCitwdWJsaWMgY2xhc3MgRXBpZGVtaWNDb250cm9sIGV4dGVuZHMgQW5hbHlzaXNDb250cm9sIHsKKworCQorCS8qKgorCSAqIHVzZWQgdG8gaWRlbnRpZnkgdXNlciBwcmVmZXJlbmNlcyBmb3IgdGhpcyBjbGFzcworCSAqIFRoaXMgU3RyaW5nIGlzIG5vdCBodW1hbiByZWFkYWJsZSBzbyBkb2VzIG5vdCBuZWVkIHRvIGJlIE5MUydkLiBJdCBpcyBhIGtleSBpbiBhIG1hcAorCSAqLworCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBDT05TVU1FUiA9ICJFUElERU1JQ19DT05UUk9MIjsKKwkKKwkvKioKKwkgKiB1c2VkIHRvIHJlbWVtYmVyIHRoZSBhZ2dyZWdhdGUgZGlyZWN0b3J5IGluIHRoZSB1c2VyIHByZWZlcmVuY2VzCisJICogVGhpcyBTdHJpbmcgaXMgbm90IGh1bWFuIHJlYWRhYmxlIHNvIGRvZXMgbm90IG5lZWQgdG8gYmUgTkxTJ2QuIEl0IGlzIGEga2V5IGluIGEgbWFwCisJICovCisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEFHR1JFR0FURV9GT0xERVJfS0VZID0gQ09OU1VNRVIrIl9BR0dSRUdBVEUiOworCQorCS8qKgorCSAqIHVzZWQgdG8gcmVtZW1iZXIgdGhlIHJlZmVyZW5jZSBkaXJlY3RvcnkgaW4gdGhlIHVzZXIgcHJlZmVyZW5jZXMKKwkgKiBUaGlzIFN0cmluZyBpcyBub3QgaHVtYW4gcmVhZGFibGUgc28gZG9lcyBub3QgbmVlZCB0byBiZSBOTFMnZC4gSXQgaXMgYSBrZXkgaW4gYSBtYXAKKwkgKi8KKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgUkVGRVJFTkNFX0ZPTERFUl9LRVkgPSBDT05TVU1FUisiX1JFRkVSRU5DRSI7CisJCisJLyoqCisJICogQSBsYWJlbCB0byByZXBvcnQgc3RhdHVzIChub3QgeWV0IHVzZWQpCisJICovCisJc3RhdGljIExhYmVsIHN0YXR1c0xhYmVsOworCQorCS8qKgorCSAqICBMYWJlbCBmb3IgY3VycmVudCBzY2VuYXJpbyBmb2xkZXIKKwkgKi8KKwlzdGF0aWMgTGFiZWwgc2NlbmFyaW9Gb2xkZXJMYWJlbDsKKwkKKwkKKwkKKwkvKioKKwkgKiBMYWJlbCBmb3IgYWdncmVnYXRlIGZpbGUKKwkgKi8KKwkKKwlzdGF0aWMgTGFiZWwgYWdncmVnYXRlRmlsZUxhYmVsOworCQorCS8qKgorCSAqIElucHV0IHRleHQgZmllbGQgZm9yIHRoZSBzY2VuYXJpbyBmb2xkZXIgb2YgZGF0YSB0byBhZ2dyZWdhdGUKKwkgKi8KKwlwdWJsaWMgc3RhdGljIFRleHQgYWdncmVnYXRlRGlydGV4dDsKKwkKKwkvKioKKwkgKiBJbnB1dCB0ZXh0IGZpZWxkIGZvciB0aGUgcmVmZXJlbmNlIHNjZW5hcmlvIGZvbGRlciB0aGF0IGZpbHRlcnMgdGhlIGxvY2F0aW9ucyB0byBhZ2dyZWdhdGUKKwkgKi8KKwlwdWJsaWMgc3RhdGljIFRleHQgcmVmZXJlbmNlRGlydGV4dDsKKwkKKwkKKwkvKioKKwkgKiBJbnB1dCB0ZXh0IGZpZWxkIGZvciB0aGUgYWdncmVnYXRlIGRhdGEgZmlsZQorCSAqLworCXB1YmxpYyBzdGF0aWMgVGV4dCBmaWxldGV4dEFnZ3JlZ2F0ZTsKKwkKKwkvKioKKwkgKiBhbHBoYSBpcyB0aGUgSW1tdW5pdHkgTG9zcyBSYXRlCisJICogVE9ETyB0aGlzIG5lZWRzIHRvIGJlIHNldCBpbiB0aGUgR1VJCisJICovCisJcHJvdGVjdGVkIHN0YXRpYyBkb3VibGUgYWxwaGEgPSAwLjAwMzsKKwkvKioKKwkgKiBUaW1lIHNlcmllcyBjYW52YXMKKwkgKi8KKwlUaW1lU2VyaWVzQ2FudmFzIGFnZ3JlZ2F0ZURhdGFDYW52YXM7CisJCisJLyoqCisJICogTmV3IEluY2lkZW5jZSBjYW52YXMKKwkgKi8KKwlUaW1lU2VyaWVzQ2FudmFzIG5ld0luY2lkZW5jZUNhbnZhczsKKwkKKwkvKioKKyAgICAgKiBwb3NzaWJsZSBzdGF0ZXMgd2l0aCBwYXJhbWV0ZXJzIHRvIGZpdAorICAgICAqLworCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgU3RyaW5nW10gaW5jaWRlbmNlU3RhdGVzID0ge0FuYWx5c2lzQ29udHJvbC5JTkNJREVOQ0UsQW5hbHlzaXNDb250cm9sLkRFTFRBQklSVEhTLEFuYWx5c2lzQ29udHJvbC5ERUxUQURFQVRIU307CisJCisJCisJCisJLy8gdGhlc2UgYXJlIG5vdCB5IGF4aXMgbnVtZXJpYyBkYXRhIGFuZCBzaG91bGQgbm90IGJlIHBsb3R0ZWQgaW4gdGhlIGFnZ3JlZ2F0ZSBwbG90CisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nW10gT01JVF9MSVNUID0ge0FuYWx5c2lzQ29udHJvbC5USU1FLEFuYWx5c2lzQ29udHJvbC5JVEVSQVRJT04sQW5hbHlzaXNDb250cm9sLklOQ0lERU5DRX07CisJCQorCQorCS8qKgorCSAqIENvbG9ycyBmb3IgdGhlIHRpbWUgc2VyaWVzIGNoYXJ0CisJICovCisJc3RhdGljIGZpbmFsIENvbG9yRGVmaW5pdGlvbiBmb3JlR3JvdW5kID0gQ29sb3JEZWZpbml0aW9uSW1wbC5jcmVhdGUoMTgwLCAwLCAwKTsKKwlzdGF0aWMgZmluYWwgQ29sb3JEZWZpbml0aW9uIGJhY2tncm91bmRHcm91bmQgPSBDb2xvckRlZmluaXRpb25JbXBsLmNyZWF0ZSgyNTUsIDI1NSwgMjI1KTsKKwlzdGF0aWMgZmluYWwgQ29sb3JEZWZpbml0aW9uIGZyYW1lQ29sb3IgPSBDb2xvckRlZmluaXRpb25JbXBsLldISVRFKCk7CisJZmluYWwgQ29sb3Igd2hpdGU9IHRoaXMuZ2V0RGlzcGxheSgpLmdldFN5c3RlbUNvbG9yKFNXVC5DT0xPUl9XSElURSk7CisJZmluYWwgQ29sb3IgZ3JleT0gdGhpcy5nZXREaXNwbGF5KCkuZ2V0U3lzdGVtQ29sb3IoU1dULkNPTE9SX0dSQVkpOworCQorCQorCQorCVNjZW5hcmlvQW5hbHlzaXNTdWl0ZSBhbmFseXplciA9IG5ldyBTY2VuYXJpb0FuYWx5c2lzU3VpdGUodGhpcyk7CisJCisJcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIFRJVExFX1RFWFQgPSBNZXNzYWdlcy5nZXRTdHJpbmcoIkNPTU1PTi5BR0dSRUdBVEVfVElUTEUiKTsKKwkKKwkvKioKKwkgKiBTdG9yZSB0aGUgYWdncmVnYXRlIGRhdGEgZm9yIHRoZSBzdGF0ZXMKKwkgKi8KKwlwdWJsaWMgTGlzdDxMaXN0PERvdWJsZT4+IGFnZ3JlZ2F0ZURhdGEgPSBuZXcgQXJyYXlMaXN0PExpc3Q8RG91YmxlPj4oKTsKKwkKKwkvKioKKwkgKiBTdG9yZSB0aGUgaW5jaWRlbmNlIGRhdGEgZm9yIHRoZSBzdGF0ZXMKKwkgKi8KKwlwdWJsaWMgTGlzdDxMaXN0PERvdWJsZT4+IGluY2lkZW5jZURhdGEgPSBuZXcgQXJyYXlMaXN0PExpc3Q8RG91YmxlPj4oKTsKKwkKKwkvKioKKwkgKiBUaGUgaWRlbnRpZmllciBvZiBlYWNoIGRhdGEgTGlzdDxEb3VibGU+IGluIHRoZSBwcmltYXJ5IHRpbWUgc2VyaWVzCisJICovCisJcHVibGljIExpc3Q8U3RyaW5nPiBwcmltYXJ5UHJvcGVydGllc1RvUGxvdCA9IG5ldyBBcnJheUxpc3Q8U3RyaW5nPigpOworCQorCS8qKgorCSAqIFRoZSBpZGVudGlmaWVyIG9mIGVhY2ggZGF0YSBMaXN0PERvdWJsZT4gaW4gdGhlIHNlY29uZGFyeSB0aW1lIHNlcmllcworCSAqLworCXB1YmxpYyBMaXN0PFN0cmluZz4gc2Vjb25kYXJ5UHJvcGVydGllc1RvUGxvdCA9IG5ldyBBcnJheUxpc3Q8U3RyaW5nPigpOworCQorCS8qKgorCSAqIGJ1dHRvbiB0byBhZ2dyZWdhdGUgZGF0YQorCSAqLworCXByaXZhdGUgQnV0dG9uIGFnZ3JlZ2F0ZUJ1dHRvbjsKKwkKKworCQorCS8qKgorCSAqIGNoZWNrYm94IHRvIHVzZSBhIHJlZmVyZW5jZSBkYXRhIHNldCBmb3IgZmlsdGVyaW5nIGxvY2F0aW9ucyB0byBhZ2dyZWdhdGUKKwkgKi8KKwlwcm90ZWN0ZWQgQnV0dG9uIHVzZVJlZmVyZW5jZUNoZWNrYm94OworCQorCXByb3RlY3RlZCBCdXR0b24gcGlja1JlZkJ1dHRvbjsKKwkKKwkKKwkvKioKKwkgKiBidXR0b24gdG8gcGxvdCB0aGUgZGF0YQorCSAqLworCXByaXZhdGUgQnV0dG9uIHBsb3RCdXR0b247CisJCisJLyoqCisJICogCisJICogQHBhcmFtIHBhcmVudAorCSAqLworCXB1YmxpYyBFcGlkZW1pY0NvbnRyb2woZmluYWwgQ29tcG9zaXRlIHBhcmVudCkgeworCQlzdXBlcihwYXJlbnQsIFNXVC5Ob25lKTsKKwkJY3JlYXRlQ29udGVudHMoKTsKKwl9IC8vIEVzdGltYXRvckNvbnRyb2wKKworCS8qKgorCSAqIENyZWF0ZSB0aGUgY29udGVudHMgb2YgdGhlIHBsb3R0ZXIKKwkgKi8KKwl2b2lkIGNyZWF0ZUNvbnRlbnRzKCkgeworCQkvLyBVc2UgZm9ybSBsYXlvdXQKKwkJc2V0TGF5b3V0KG5ldyBGb3JtTGF5b3V0KCkpOworCisJCURpc3BsYXkgZGlzcGxheSA9IHRoaXMuZ2V0RGlzcGxheSgpOworCQkKKwkJaWRlbnRpZmlhYmxlVGl0bGUgPSBuZXcgTGFiZWwodGhpcywgU1dULk5PTkUpOworCQlpZGVudGlmaWFibGVUaXRsZS5zZXRUZXh0KFRJVExFX1RFWFQpOworCQlmaW5hbCBGb250IG5ld0ZvbnQgPSBnZXRMYXJnZXJGb250KDE4LCBkaXNwbGF5KTsKKwkJaWRlbnRpZmlhYmxlVGl0bGUuc2V0Rm9udChuZXdGb250KTsKKwkJCisJCWZpbmFsIEZvcm1EYXRhIHRpdGxlRm9ybURhdGEgPSBuZXcgRm9ybURhdGEoKTsKKwkJaWRlbnRpZmlhYmxlVGl0bGUuc2V0TGF5b3V0RGF0YSh0aXRsZUZvcm1EYXRhKTsKKwkJdGl0bGVGb3JtRGF0YS50b3AgPSBuZXcgRm9ybUF0dGFjaG1lbnQoMCwgMCk7CisJCXRpdGxlRm9ybURhdGEubGVmdCA9IG5ldyBGb3JtQXR0YWNobWVudCgwLCAwKTsKKwkJdGl0bGVGb3JtRGF0YS5yaWdodCA9IG5ldyBGb3JtQXR0YWNobWVudCgxMDAsIDApOworCQkKKwkJCisJCWludCBzcGFjZXIgPSAgMTA7CisJCWludCBidXR0b25zcGFjZXIgPSA1OworCQlzY2VuYXJpb0ZvbGRlckxhYmVsID0gbmV3IExhYmVsKHRoaXMsIFNXVC5CT1JERVIpOworCQkKKwkJc2NlbmFyaW9Gb2xkZXJMYWJlbC5zZXRUZXh0KE1lc3NhZ2VzLmdldFN0cmluZygiRVBJVklFVy5TQ0VOQVJJT0ZPTERFUkxBQkVMIikpOworCisJCWZpbmFsIEZvcm1EYXRhIHNjZW5hcmlvTGFiZWxGb3JtRGF0YSA9IG5ldyBGb3JtRGF0YSgpOworCQlzY2VuYXJpb0ZvbGRlckxhYmVsLnNldExheW91dERhdGEoc2NlbmFyaW9MYWJlbEZvcm1EYXRhKTsKKwkJc2NlbmFyaW9MYWJlbEZvcm1EYXRhLnRvcCA9IG5ldyBGb3JtQXR0YWNobWVudChpZGVudGlmaWFibGVUaXRsZSwgc3BhY2VyKTsKKwkJc2NlbmFyaW9MYWJlbEZvcm1EYXRhLmxlZnQgPSBuZXcgRm9ybUF0dGFjaG1lbnQoMCwgMCk7CisJCXNjZW5hcmlvTGFiZWxGb3JtRGF0YS5yaWdodCA9IG5ldyBGb3JtQXR0YWNobWVudCgxNSwgMCk7CisJCQorCQlhZ2dyZWdhdGVEaXJ0ZXh0ID0gbmV3IFRleHQodGhpcywgU1dULkJPUkRFUik7CisJICAgIGFnZ3JlZ2F0ZURpcnRleHQuc2V0Qm91bmRzKDEwLCAxMCwgMTAwLCAyMCk7CisJICAgIFN0cmluZyByZWNlbnRGb2xkZXIgPSBwcmVmcy5nZXRSZWNlbnRGb2xkZXIoQ09OU1VNRVIpOworCSAgICBpZihyZWNlbnRGb2xkZXI9PSBudWxsKSB7CisJICAgIAlyZWNlbnRGb2xkZXIgPSBTY2VuYXJpb0FuYWx5c2lzU3VpdGUuUkVGRVJFTkNFX1RFU1RJTkdfRElSRUNUT1JZOworCSAgICB9CisJICAgIGFnZ3JlZ2F0ZURpcnRleHQuc2V0VGV4dChyZWNlbnRGb2xkZXIpOworCSAgICBmaW5hbCBGb3JtRGF0YSBkaXJUZXh0Rm9ybURhdGEgPSBuZXcgRm9ybURhdGEoKTsKKwkgICAgYWdncmVnYXRlRGlydGV4dC5zZXRMYXlvdXREYXRhKGRpclRleHRGb3JtRGF0YSk7CisJICAgIGRpclRleHRGb3JtRGF0YS50b3AgPSBuZXcgRm9ybUF0dGFjaG1lbnQoaWRlbnRpZmlhYmxlVGl0bGUsIHNwYWNlcik7CisJICAgIGRpclRleHRGb3JtRGF0YS5sZWZ0ID0gbmV3IEZvcm1BdHRhY2htZW50KHNjZW5hcmlvRm9sZGVyTGFiZWwsIDUpOworCSAgICBkaXJUZXh0Rm9ybURhdGEucmlnaHQgPSBuZXcgRm9ybUF0dGFjaG1lbnQoODAsIDApOworCQkKKwkgICAgQnV0dG9uIHBpY2tEaXJCdXR0b24gPSBuZXcgQnV0dG9uKHRoaXMsIFNXVC5OT05FKTsKKwkgICAgcGlja0RpckJ1dHRvbi5zZXRUZXh0KE1lc3NhZ2VzLmdldFN0cmluZygiRVBJVklFVy5TRUxFQ1RESVIiKSk7CisJICAgIGZpbmFsIEZvcm1EYXRhIHBpY2tEaXJCdXR0b25Gb3JtRGF0YSA9IG5ldyBGb3JtRGF0YSgpOworCSAgICBwaWNrRGlyQnV0dG9uRm9ybURhdGEudG9wID0gbmV3IEZvcm1BdHRhY2htZW50KGlkZW50aWZpYWJsZVRpdGxlLCBidXR0b25zcGFjZXIpOworCSAgICBwaWNrRGlyQnV0dG9uRm9ybURhdGEubGVmdCA9IG5ldyBGb3JtQXR0YWNobWVudChhZ2dyZWdhdGVEaXJ0ZXh0LCA1KTsKKwkgICAgcGlja0RpckJ1dHRvbi5zZXRMYXlvdXREYXRhKHBpY2tEaXJCdXR0b25Gb3JtRGF0YSk7CisJICAgIHBpY2tEaXJCdXR0b24uc2V0RW5hYmxlZCh0cnVlKTsKKwkJCisJICAgIGZpbmFsIFNoZWxsIHNoZWxsID0gdGhpcy5nZXRTaGVsbCgpOworCSAgICBwaWNrRGlyQnV0dG9uLmFkZFNlbGVjdGlvbkxpc3RlbmVyKG5ldyBTZWxlY3Rpb25BZGFwdGVyKCkgeworCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgdm9pZCB3aWRnZXRTZWxlY3RlZChAU3VwcHJlc3NXYXJuaW5ncygidW51c2VkIikKKwkJCWZpbmFsIFNlbGVjdGlvbkV2ZW50IGUpIHsKKwkJCQlmaW5hbCBEaXJlY3RvcnlEaWFsb2cgZGQgPSBuZXcgRGlyZWN0b3J5RGlhbG9nKAorCQkJCQkJc2hlbGwsIFNXVC5PUEVOKTsKKwkJCQkJZGQuc2V0VGV4dChNZXNzYWdlcy5nZXRTdHJpbmcoIkVQSVZJRVcuU0VMRUNUU0NFTkFSSU9GT0xERVIiKSk7IC8vJE5PTi1OTFMtMSQKKwkJCQkJU3RyaW5nIGJlZ2luU2VhcmNoID0gYWdncmVnYXRlRGlydGV4dC5nZXRUZXh0KCk7CisJCQkJCWlmKChiZWdpblNlYXJjaD09bnVsbCl8fChiZWdpblNlYXJjaC5sZW5ndGgoKTwxKSkgYmVnaW5TZWFyY2ggPSBST09UX1BBVEg7CisJCQkJCQorCQkJCQlkZC5zZXRGaWx0ZXJQYXRoKGJlZ2luU2VhcmNoKTsKKwkJCQkJZmluYWwgU3RyaW5nIHNlbGVjdGVkID0gZGQub3BlbigpOworCQkJCQlpZihzZWxlY3RlZCE9bnVsbCkgYWdncmVnYXRlRGlydGV4dC5zZXRUZXh0KHNlbGVjdGVkKTsKKwkJCX0KKwkJfSk7CisJICAgCisJICAgIAorCSAgICAvLy8vLy8vLy8vLy8gUkVGRVJFTkNFIEZPTERFUi8vLy8vLy8vLy8KKwkgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisJICAgIAorCSAgICB1c2VSZWZlcmVuY2VDaGVja2JveD0gbmV3IEJ1dHRvbih0aGlzLCBTV1QuQ0hFQ0spOworCSAgICB1c2VSZWZlcmVuY2VDaGVja2JveC5zZXRUZXh0KE1lc3NhZ2VzLmdldFN0cmluZygiRVBJVklFVy5SRUZFUkVOQ0VGT0xERVJMQUJFTCIpKTsKKwkgICAgdXNlUmVmZXJlbmNlQ2hlY2tib3guYWRkU2VsZWN0aW9uTGlzdGVuZXIobmV3IFNlbGVjdGlvbkFkYXB0ZXIoKSB7CisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyB2b2lkIHdpZGdldFNlbGVjdGVkKEBTdXBwcmVzc1dhcm5pbmdzKCJ1bnVzZWQiKQorCQkJZmluYWwgU2VsZWN0aW9uRXZlbnQgZSkgeworCQkJCWlmKHVzZVJlZmVyZW5jZUNoZWNrYm94LmdldFNlbGVjdGlvbigpKSB7CisJCQkJCXJlZmVyZW5jZURpcnRleHQuc2V0QmFja2dyb3VuZCh3aGl0ZSk7CisJCQkJCSBTdHJpbmcgcmVmRm9sZGVyID0gcHJlZnMuZ2V0UmVjZW50Rm9sZGVyKFJFRkVSRU5DRV9GT0xERVJfS0VZKTsKKwkJCQkJICAgIGlmKHJlZkZvbGRlcj09IG51bGwpIHsKKwkJCQkJICAgIAlyZWZGb2xkZXIgPSBhZ2dyZWdhdGVEaXJ0ZXh0LmdldFRleHQoKTsKKwkJCQkJICAgIAlpZigocmVmRm9sZGVyPT1udWxsKXx8KHJlZkZvbGRlci5sZW5ndGgoKTwxKSkgcmVmRm9sZGVyID0gUk9PVF9QQVRIOworCQkJCQkgICAgfQorCQkJCQlyZWZlcmVuY2VEaXJ0ZXh0LnNldFRleHQocmVmRm9sZGVyKTsKKwkJCQkJcGlja1JlZkJ1dHRvbi5zZXRFbmFibGVkKHRydWUpOworCQkJCX0gZWxzZSB7CisJCQkJCXJlZmVyZW5jZURpcnRleHQuc2V0QmFja2dyb3VuZChncmV5KTsKKwkJCQkJcGlja1JlZkJ1dHRvbi5zZXRFbmFibGVkKGZhbHNlKTsKKwkJCQl9CisJCQl9CisJCX0pOworCisJCWZpbmFsIEZvcm1EYXRhIHJlZmVyZW5jZUxhYmVsRm9ybURhdGEgPSBuZXcgRm9ybURhdGEoKTsKKwkJdXNlUmVmZXJlbmNlQ2hlY2tib3guc2V0TGF5b3V0RGF0YShyZWZlcmVuY2VMYWJlbEZvcm1EYXRhKTsKKwkJcmVmZXJlbmNlTGFiZWxGb3JtRGF0YS50b3AgPSBuZXcgRm9ybUF0dGFjaG1lbnQoc2NlbmFyaW9Gb2xkZXJMYWJlbCwgc3BhY2VyKTsKKwkJcmVmZXJlbmNlTGFiZWxGb3JtRGF0YS5sZWZ0ID0gbmV3IEZvcm1BdHRhY2htZW50KDAsIDApOworCQlyZWZlcmVuY2VMYWJlbEZvcm1EYXRhLnJpZ2h0ID0gbmV3IEZvcm1BdHRhY2htZW50KDE1LCAwKTsKKwkJCisJCXJlZmVyZW5jZURpcnRleHQgPSBuZXcgVGV4dCh0aGlzLCBTV1QuQk9SREVSKTsKKwkgICAgcmVmZXJlbmNlRGlydGV4dC5zZXRCb3VuZHMoMTAsIDEwLCAxMDAsIDIwKTsKKwkgICAgU3RyaW5nIHJlZkZvbGRlciA9IHByZWZzLmdldFJlY2VudEZvbGRlcihSRUZFUkVOQ0VfRk9MREVSX0tFWSk7CisJICAgIGlmKHJlZkZvbGRlcj09IG51bGwpIHsKKwkgICAgCXJlZkZvbGRlciA9IHJlY2VudEZvbGRlcjsKKwkgICAgfQorCSAKKwkgICAgcmVmZXJlbmNlRGlydGV4dC5zZXRUZXh0KHJlZkZvbGRlcik7CisJICAgIGZpbmFsIEZvcm1EYXRhIHJlZkRpclRleHRGb3JtRGF0YSA9IG5ldyBGb3JtRGF0YSgpOworCSAgICByZWZlcmVuY2VEaXJ0ZXh0LnNldExheW91dERhdGEocmVmRGlyVGV4dEZvcm1EYXRhKTsKKwkgICAgcmVmRGlyVGV4dEZvcm1EYXRhLnRvcCA9IG5ldyBGb3JtQXR0YWNobWVudChzY2VuYXJpb0ZvbGRlckxhYmVsLCBzcGFjZXIpOworCSAgICByZWZEaXJUZXh0Rm9ybURhdGEubGVmdCA9IG5ldyBGb3JtQXR0YWNobWVudCh1c2VSZWZlcmVuY2VDaGVja2JveCwgNSk7CisJICAgIHJlZkRpclRleHRGb3JtRGF0YS5yaWdodCA9IG5ldyBGb3JtQXR0YWNobWVudCg4MCwgMCk7CisJCQorCSAgICBwaWNrUmVmQnV0dG9uID0gbmV3IEJ1dHRvbih0aGlzLCBTV1QuTk9ORSk7CisJICAgIHBpY2tSZWZCdXR0b24uc2V0VGV4dChNZXNzYWdlcy5nZXRTdHJpbmcoIkVQSVZJRVcuU0VMRUNURElSIikpOworCSAgICBmaW5hbCBGb3JtRGF0YSBwaWNrUmVmQnV0dG9uRm9ybURhdGEgPSBuZXcgRm9ybURhdGEoKTsKKwkgICAgcGlja1JlZkJ1dHRvbkZvcm1EYXRhLnRvcCA9IG5ldyBGb3JtQXR0YWNobWVudChzY2VuYXJpb0ZvbGRlckxhYmVsLCBidXR0b25zcGFjZXIpOworCSAgICBwaWNrUmVmQnV0dG9uRm9ybURhdGEubGVmdCA9IG5ldyBGb3JtQXR0YWNobWVudChyZWZlcmVuY2VEaXJ0ZXh0LCA1KTsKKwkgICAgcGlja1JlZkJ1dHRvbi5zZXRMYXlvdXREYXRhKHBpY2tSZWZCdXR0b25Gb3JtRGF0YSk7CisJICAgIHBpY2tSZWZCdXR0b24uc2V0RW5hYmxlZCh0cnVlKTsKKwkJCisJICAgIHBpY2tSZWZCdXR0b24uYWRkU2VsZWN0aW9uTGlzdGVuZXIobmV3IFNlbGVjdGlvbkFkYXB0ZXIoKSB7CisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyB2b2lkIHdpZGdldFNlbGVjdGVkKEBTdXBwcmVzc1dhcm5pbmdzKCJ1bnVzZWQiKQorCQkJZmluYWwgU2VsZWN0aW9uRXZlbnQgZSkgeworCQkJCWZpbmFsIERpcmVjdG9yeURpYWxvZyBkZCA9IG5ldyBEaXJlY3RvcnlEaWFsb2coCisJCQkJCQlzaGVsbCwgU1dULk9QRU4pOworCQkJCQlkZC5zZXRUZXh0KE1lc3NhZ2VzLmdldFN0cmluZygiRVBJVklFVy5TRUxFQ1RSRUZFUkVOQ0VGT0xERVIiKSk7IC8vJE5PTi1OTFMtMSQKKwkJCQkJU3RyaW5nIGJlZ2luU2VhcmNoID0gcmVmZXJlbmNlRGlydGV4dC5nZXRUZXh0KCk7CisJCQkJCWlmKChiZWdpblNlYXJjaD09bnVsbCl8fChiZWdpblNlYXJjaC5sZW5ndGgoKTwxKSkgYmVnaW5TZWFyY2ggPSBST09UX1BBVEg7CisJCQkJCWRkLnNldEZpbHRlclBhdGgoYmVnaW5TZWFyY2gpOworCQkJCQlmaW5hbCBTdHJpbmcgc2VsZWN0ZWQgPSBkZC5vcGVuKCk7CisJCQkJCWlmKHNlbGVjdGVkIT1udWxsKSByZWZlcmVuY2VEaXJ0ZXh0LnNldFRleHQoc2VsZWN0ZWQpOworCQkJfQorCQl9KTsKKwkgIAorCSAgICAvLyBkZWZhdWx0IG5vdCBzZWxlY3RlZAorCSAgICB1c2VSZWZlcmVuY2VDaGVja2JveC5zZXRTZWxlY3Rpb24oZmFsc2UpOworCSAgICByZWZlcmVuY2VEaXJ0ZXh0LnNldEJhY2tncm91bmQoZ3JleSk7CisJCXBpY2tSZWZCdXR0b24uc2V0RW5hYmxlZChmYWxzZSk7CisJCQorCSAgICAvLy8vLy8vLy8vLy8gRU5EIFJFRkVSRU5DRSBGT0xERVIgLy8vLy8vLy8KKwkgICAgCisJICAgIENvbXBvc2l0ZSBhZ2dyZWdhdGVDb21wb3NpdGUgPSBnZXRBZ2dyZWdhdGVCdXR0b25Db21wb3NpdGUodGhpcywgTWVzc2FnZXMuZ2V0U3RyaW5nKCJFUElWSUVXLkFHR1JFR0FURURBVEEiKSk7CisKKwkgICAgZmluYWwgRm9ybURhdGEgYWdncmVnYXRlQnV0dG9uRm9ybURhdGEgPSBuZXcgRm9ybURhdGEoKTsKKwkgICAgYWdncmVnYXRlQnV0dG9uRm9ybURhdGEudG9wID0gbmV3IEZvcm1BdHRhY2htZW50KHVzZVJlZmVyZW5jZUNoZWNrYm94LCBzcGFjZXIpOworCSAgICBhZ2dyZWdhdGVCdXR0b25Gb3JtRGF0YS5sZWZ0ID0gbmV3IEZvcm1BdHRhY2htZW50KDAsIDApOworCSAgICBhZ2dyZWdhdGVCdXR0b25Gb3JtRGF0YS5yaWdodCA9IG5ldyBGb3JtQXR0YWNobWVudCgxMDAsIDApOworCSAgICBhZ2dyZWdhdGVDb21wb3NpdGUuc2V0TGF5b3V0RGF0YShhZ2dyZWdhdGVCdXR0b25Gb3JtRGF0YSk7CisJICAgIAorCSAgICBmaW5hbCBQcm9ncmVzc01vbml0b3JEaWFsb2cgcHJvZ3Jlc3NEaWFsb2cgPSBuZXcgUHJvZ3Jlc3NNb25pdG9yRGlhbG9nKHRoaXMuZ2V0U2hlbGwoKSk7CisJICAgIAorCSAgICBhZ2dyZWdhdGVCdXR0b24uYWRkU2VsZWN0aW9uTGlzdGVuZXIobmV3IFNlbGVjdGlvbkFkYXB0ZXIoKSB7CisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyB2b2lkIHdpZGdldFNlbGVjdGVkKEBTdXBwcmVzc1dhcm5pbmdzKCJ1bnVzZWQiKQorCQkJZmluYWwgU2VsZWN0aW9uRXZlbnQgZSkgeworCQkJCVN0cmluZyByZWZlcmVuY2VEaXJlY3RvcnkgPSBhZ2dyZWdhdGVEaXJ0ZXh0LmdldFRleHQoKTsKKwkJCQkKKwkJCQlpZighYW5hbHl6ZXIudmFsaWRhdGUocmVmZXJlbmNlRGlyZWN0b3J5KSkgeworCQkJCQlpZGVudGlmaWFibGVUaXRsZS5zZXRUZXh0KFNjZW5hcmlvQW5hbHlzaXNTdWl0ZS5OT1RfRk9VTkRfTVNHKTsKKwkJCQkJdXBkYXRlTWVzc2FnZShTY2VuYXJpb0FuYWx5c2lzU3VpdGUuTk9UX0ZPVU5EX01TRyk7CisJCQkJCXJldHVybjsKKwkJCQl9CisJCQkJdXBkYXRlTWVzc2FnZShTY2VuYXJpb0FuYWx5c2lzU3VpdGUuV09SS0lOR19NU0cpOworCQkJCVN0cmluZyBhZ2dyZWdhdGVGaWxlbmFtZSA9IG51bGw7CisJCQkJdHJ5IHsJCQkJCisJCQkJCWlmKHVzZVJlZmVyZW5jZUNoZWNrYm94LmdldFNlbGVjdGlvbigpKSB7CisJCQkJCQlhZ2dyZWdhdGVGaWxlbmFtZSA9IGFuYWx5emVyLmFnZ3JlZ2F0ZUJ5RmlsdGVyKHJlZmVyZW5jZURpcnRleHQuZ2V0VGV4dCgpLGFnZ3JlZ2F0ZURpcnRleHQuZ2V0VGV4dCgpLCBwcm9ncmVzc0RpYWxvZywgYWxwaGEpOworCQkJCQl9IGVsc2UgeworCQkJCQkJYWdncmVnYXRlRmlsZW5hbWUgPSBhbmFseXplci5hZ2dyZWdhdGVEYXRhKGFnZ3JlZ2F0ZURpcnRleHQuZ2V0VGV4dCgpLCBwcm9ncmVzc0RpYWxvZywgYWxwaGEpOworCQkJCQl9CisJCQkJICAgIC8vIHZhbGlkIHNvIHJlbWVtYmVyIHRoZSBwcmVmZXJlbmNlcworCQkJCQlwcmVmcy5zZXRSZWNlbnRGb2xkZXIoQ09OU1VNRVIsYWdncmVnYXRlRGlydGV4dC5nZXRUZXh0KCkpOworCQkJCQlwcmVmcy5zZXRSZWNlbnRGb2xkZXIoUkVGRVJFTkNFX0ZPTERFUl9LRVkscmVmZXJlbmNlRGlydGV4dC5nZXRUZXh0KCkpOworCQkJCQkvLyByZW1lbWJlciB0aGUgb3V0cHV0IGZpbGVzIGFzIHdlbGwKKwkJCQkJcHJlZnMuc2V0UmVjZW50Rm9sZGVyKEFHR1JFR0FURV9GT0xERVJfS0VZLGFnZ3JlZ2F0ZUZpbGVuYW1lKTsKKwkJCQl9IGNhdGNoKFNjZW5hcmlvSW5pdGlhbGl6YXRpb25FeGNlcHRpb24gc2llKSB7CisJCQkJCXVwZGF0ZU1lc3NhZ2UoU2NlbmFyaW9BbmFseXNpc1N1aXRlLklOVkFMSURfREFUQV9NU0cpOworCQkJCQlBY3RpdmF0b3IubG9nRXJyb3Ioc2llLmdldE1lc3NhZ2UoKSwgc2llKTsKKwkJCQl9CisJCQkJCisJCQkJZmlsZXRleHRBZ2dyZWdhdGUuc2V0VGV4dChhZ2dyZWdhdGVGaWxlbmFtZSk7CisJCQkJdXBkYXRlTWVzc2FnZShTY2VuYXJpb0FuYWx5c2lzU3VpdGUuUkVBRFlfTVNHKTsKKwkJCX0KKwkJfSk7CisJICAgIAorCSAgICAKKwkJYWdncmVnYXRlRmlsZUxhYmVsID0gbmV3IExhYmVsKHRoaXMsIFNXVC5CT1JERVIpOworCQlhZ2dyZWdhdGVGaWxlTGFiZWwuc2V0VGV4dChNZXNzYWdlcy5nZXRTdHJpbmcoIkVQSVZJRVcuQUdHRklMRUxBQkVMIikpOworCQlmaW5hbCBGb3JtRGF0YSBhZ2dyZWdhdGVGaWxlTGFiZWxGb3JtRGF0YSA9IG5ldyBGb3JtRGF0YSgpOworCQlhZ2dyZWdhdGVGaWxlTGFiZWwuc2V0TGF5b3V0RGF0YShhZ2dyZWdhdGVGaWxlTGFiZWxGb3JtRGF0YSk7CisJCWFnZ3JlZ2F0ZUZpbGVMYWJlbEZvcm1EYXRhLnRvcCA9IG5ldyBGb3JtQXR0YWNobWVudChhZ2dyZWdhdGVDb21wb3NpdGUsIHNwYWNlcik7CisJCWFnZ3JlZ2F0ZUZpbGVMYWJlbEZvcm1EYXRhLmxlZnQgPSBuZXcgRm9ybUF0dGFjaG1lbnQoMCwgMCk7CisJCWFnZ3JlZ2F0ZUZpbGVMYWJlbEZvcm1EYXRhLnJpZ2h0ID0gbmV3IEZvcm1BdHRhY2htZW50KDE1LCAwKTsKKwkJCisJCWZpbGV0ZXh0QWdncmVnYXRlID0gbmV3IFRleHQodGhpcywgU1dULkJPUkRFUik7CisJCWZpbGV0ZXh0QWdncmVnYXRlLnNldEJvdW5kcygxMCwgMTAsIDEwMCwgMjApOworCQlTdHJpbmcgYWdncmVnYXRlRGlyPXByZWZzLmdldFJlY2VudEZvbGRlcihBR0dSRUdBVEVfRk9MREVSX0tFWSk7CisJCWZpbGV0ZXh0QWdncmVnYXRlLnNldFRleHQoYWdncmVnYXRlRGlyKTsKKwkgICAgZmluYWwgRm9ybURhdGEgZmlsZVRleHRBZ2dyZWdhdGVGb3JtRGF0YSA9IG5ldyBGb3JtRGF0YSgpOworCSAgICBmaWxldGV4dEFnZ3JlZ2F0ZS5zZXRMYXlvdXREYXRhKGZpbGVUZXh0QWdncmVnYXRlRm9ybURhdGEpOworCSAgICBmaWxlVGV4dEFnZ3JlZ2F0ZUZvcm1EYXRhLnRvcCA9IG5ldyBGb3JtQXR0YWNobWVudChhZ2dyZWdhdGVDb21wb3NpdGUsIHNwYWNlcik7CisJICAgIGZpbGVUZXh0QWdncmVnYXRlRm9ybURhdGEubGVmdCA9IG5ldyBGb3JtQXR0YWNobWVudChhZ2dyZWdhdGVGaWxlTGFiZWwsIDUpOworCSAgICBmaWxlVGV4dEFnZ3JlZ2F0ZUZvcm1EYXRhLnJpZ2h0ID0gbmV3IEZvcm1BdHRhY2htZW50KDgwLCAwKTsKKwkJCisJICAgIEJ1dHRvbiBwaWNrQWdncmVnYXRlRmlsZUJ1dHRvbiA9IG5ldyBCdXR0b24odGhpcywgU1dULk5PTkUpOworCSAgICAKKwkgICAgcGlja0FnZ3JlZ2F0ZUZpbGVCdXR0b24uc2V0VGV4dChNZXNzYWdlcy5nZXRTdHJpbmcoIkVQSVZJRVcuU0VMRUNUQUdHRklMRSIpKTsKKwkgICAgZmluYWwgRm9ybURhdGEgcGlja0FnZ3JlZ2F0ZUZpbGVCdXR0b25Gb3JtRGF0YSA9IG5ldyBGb3JtRGF0YSgpOworCSAgICBwaWNrQWdncmVnYXRlRmlsZUJ1dHRvbkZvcm1EYXRhLnRvcCA9IG5ldyBGb3JtQXR0YWNobWVudChhZ2dyZWdhdGVDb21wb3NpdGUsIGJ1dHRvbnNwYWNlcik7CisJICAgIHBpY2tBZ2dyZWdhdGVGaWxlQnV0dG9uRm9ybURhdGEubGVmdCA9IG5ldyBGb3JtQXR0YWNobWVudChmaWxldGV4dEFnZ3JlZ2F0ZSwgNSk7CisJICAgIHBpY2tBZ2dyZWdhdGVGaWxlQnV0dG9uLnNldExheW91dERhdGEocGlja0FnZ3JlZ2F0ZUZpbGVCdXR0b25Gb3JtRGF0YSk7CisJICAgIHBpY2tBZ2dyZWdhdGVGaWxlQnV0dG9uLnNldEVuYWJsZWQodHJ1ZSk7CisJICAgIHBpY2tBZ2dyZWdhdGVGaWxlQnV0dG9uLmFkZFNlbGVjdGlvbkxpc3RlbmVyKG5ldyBTZWxlY3Rpb25BZGFwdGVyKCkgeworCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgdm9pZCB3aWRnZXRTZWxlY3RlZChAU3VwcHJlc3NXYXJuaW5ncygidW51c2VkIikKKwkJCWZpbmFsIFNlbGVjdGlvbkV2ZW50IGUpIHsKKwkJCQlmaW5hbCBGaWxlRGlhbG9nIGRkID0gbmV3IEZpbGVEaWFsb2coCisJCQkJCQlzaGVsbCwgU1dULk9QRU4pOworCQkJCQlkZC5zZXRUZXh0KE1lc3NhZ2VzLmdldFN0cmluZygiRVBJVklFVy5TRUxFQ1RBR0dGSUxFIikpOworCQkJCQlTdHJpbmcgYmVnaW5TZWFyY2ggPSBmaWxldGV4dEFnZ3JlZ2F0ZS5nZXRUZXh0KCk7CisJCQkJCWlmKChiZWdpblNlYXJjaD09bnVsbCl8fChiZWdpblNlYXJjaC5sZW5ndGgoKTwxKSkgYmVnaW5TZWFyY2ggPSBST09UX1BBVEg7CisJCQkJCWRkLnNldEZpbHRlclBhdGgoYmVnaW5TZWFyY2gpOworCQkJCQkKKwkJCQkJZmluYWwgU3RyaW5nIHNlbGVjdGVkID0gZGQub3BlbigpOworCQkJCQlpZihzZWxlY3RlZCE9bnVsbCkgZmlsZXRleHRBZ2dyZWdhdGUuc2V0VGV4dChzZWxlY3RlZCk7CisJCQl9CisJCX0pOworCSAgICAKKwkgICAgQ29tcG9zaXRlIHBsb3RCdXR0b25Db21wb3NpdGUgPSBnZXRQbG90QnV0dG9uQ29tcG9zaXRlKHRoaXMsIE1lc3NhZ2VzLmdldFN0cmluZygiRVBJVklFVy5QTE9UVEVYVCIpKTsKKwkgICAgCisJICAgIGZpbmFsIEZvcm1EYXRhIHBsb3RCdXR0b25Gb3JtRGF0YSA9IG5ldyBGb3JtRGF0YSgpOworCSAgICBwbG90QnV0dG9uRm9ybURhdGEudG9wID0gbmV3IEZvcm1BdHRhY2htZW50KGFnZ3JlZ2F0ZUZpbGVMYWJlbCwgc3BhY2VyKTsKKwkgICAgcGxvdEJ1dHRvbkZvcm1EYXRhLmxlZnQgPSBuZXcgRm9ybUF0dGFjaG1lbnQoMCwgMCk7CisJICAgIHBsb3RCdXR0b25Gb3JtRGF0YS5yaWdodCA9IG5ldyBGb3JtQXR0YWNobWVudCgxMDAsIDApOworCSAgICBwbG90QnV0dG9uQ29tcG9zaXRlLnNldExheW91dERhdGEocGxvdEJ1dHRvbkZvcm1EYXRhKTsKKwkgCisJICAgIGZpbmFsIEVwaWRlbWljQ29udHJvbCBhQ3RybCA9IHRoaXM7CisJICAgIHBsb3RCdXR0b24uYWRkU2VsZWN0aW9uTGlzdGVuZXIobmV3IFNlbGVjdGlvbkFkYXB0ZXIoKSB7CisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyB2b2lkIHdpZGdldFNlbGVjdGVkKEBTdXBwcmVzc1dhcm5pbmdzKCJ1bnVzZWQiKQorCQkJZmluYWwgU2VsZWN0aW9uRXZlbnQgZSkgeworCQkJCQorCQkJCQorCQkJCS8qCisJCQkJICogcmVpbml0aWFsaXplIHRoZSBncmFwaAorCQkJCSAqLworCQkJCWFnZ3JlZ2F0ZURhdGEuY2xlYXIoKTsKKwkJCQlwcmltYXJ5UHJvcGVydGllc1RvUGxvdC5jbGVhcigpOworCQkJCXNlY29uZGFyeVByb3BlcnRpZXNUb1Bsb3QuY2xlYXIoKTsKKwkJCQlhZ2dyZWdhdGVEYXRhQ2FudmFzLnJlc2V0KCk7CisJCQkJbmV3SW5jaWRlbmNlQ2FudmFzLnJlc2V0KCk7CisJCQkJCisJCQkJCisJCQkJLy8gYW5kIHBsb3QgYWdhaW4KKwkJCQlDU1ZzY2VuYXJpb0xvYWRlciBsb2FkZXIgPSBuZXcgQ1NWc2NlbmFyaW9Mb2FkZXIoKTsKKwkJCQlSZWZlcmVuY2VTY2VuYXJpb0RhdGFNYXBJbXBsIGFnZ3JlZ2F0ZU1hcCA9IG51bGw7CisJCQkJdHJ5IHsKKwkJCQkJYWdncmVnYXRlTWFwID0gbG9hZGVyLnBhcnNlQWdncmVnYXRlRmlsZShmaWxldGV4dEFnZ3JlZ2F0ZS5nZXRUZXh0KCkpOworCQkJCX0gY2F0Y2ggKFNjZW5hcmlvSW5pdGlhbGl6YXRpb25FeGNlcHRpb24gZTEpIHsKKwkJCQkJQWN0aXZhdG9yLmxvZ0Vycm9yKGUxLmdldE1lc3NhZ2UoKSwgZTEpOworCQkJCX0KKwkJCQkKKwkJCQlmb3IoU3RyaW5nIGxvY2F0aW9uIDogYWdncmVnYXRlTWFwLmdldExvY2F0aW9ucygpKSB7CisJCQkJCVJlZmVyZW5jZVNjZW5hcmlvRGF0YUluc3RhbmNlIGluc3RhbmNlID0gYWdncmVnYXRlTWFwLmdldExvY2F0aW9uKGxvY2F0aW9uKTsKKwkJCQkJTWFwPFN0cmluZywgTGlzdDxEb3VibGU+PiByYXdkYXRhID0gaW5zdGFuY2UuZ2V0RGF0YSgpOworCQkJCisJCQkJCVN0cmluZ1tdIHN0YXRlcyA9IGZpbHRlckRpc3BsYXlhYmxlU3RhdGVzKHJhd2RhdGEua2V5U2V0KCkpOworCQkJCQkKKwkJCQkJQXJyYXlzLnNvcnQoc3RhdGVzKTsKKwkJCQkJLy9UT0RPIGFkZCBzZWxlY3Rpb24gbWV0aG9kIGZvciBzdGF0ZXMKKwkJCQkJZm9yIChpbnQgaSA9IDA7IGkgPCBzdGF0ZXMubGVuZ3RoOyBpICsrICkgeworCQkJCQkJaWYocmF3ZGF0YS5nZXQoc3RhdGVzW2ldKSE9bnVsbCkgeworCQkJCQkJCWFnZ3JlZ2F0ZURhdGEuYWRkKHJhd2RhdGEuZ2V0KHN0YXRlc1tpXSkpOworCQkJCQkJCXByaW1hcnlQcm9wZXJ0aWVzVG9QbG90LmFkZChzdGF0ZXNbaV0pOworCQkJCQkJfQorCQkJCQl9CisJCQkJCQorCQkJCQlhQ3RybC5hZ2dyZWdhdGVEYXRhQ2FudmFzLmRyYXcoKTsKKwkJCQl9Ly8gZm9yIGFsbCBsb2NhdGlvbnMgaW4gYWdncmVnYXRlTWFwIChvbmx5IG9uZSBmb3IgYWdncmVnYXRlIGRhdGEpCisJCQkJCisJCQkJCisJCQkJCisJCQkJCisJCQkJLy8gYW5kIG5vdyBwbG90IHRoZSBpbmNpZGVuY2UgZGF0YQorCQkJCQorCQkJCU1hcDxTdHJpbmcsIExpc3Q8U3RyaW5nPj4gZGF0YU1hcCA9IG51bGw7CisJCQkJdHJ5IHsKKwkJCQkJZGF0YU1hcCA9IGxvYWRlci5wcm9jZXNzSW5jaWRlbmNlRmlsZShmaWxldGV4dEFnZ3JlZ2F0ZS5nZXRUZXh0KCkpOworCQkJCX0gY2F0Y2ggKFNjZW5hcmlvSW5pdGlhbGl6YXRpb25FeGNlcHRpb24gZTEpIHsKKwkJCQkJQWN0aXZhdG9yLmxvZ0Vycm9yKGUxLmdldE1lc3NhZ2UoKSwgZTEpOworCQkJCX0KKwkJCQkKKwkJCQkJaW5jaWRlbmNlRGF0YSA9IG5ldyBBcnJheUxpc3Q8TGlzdDxEb3VibGU+PigpOworCQkJCQkKKwkJCQkJCisJCQkJCQorCQkJCQkvLyB2YWxpZGF0ZSBhbmQgYWRkIGRhdGEKKwkJCQkJZm9yIChpbnQgaSA9IDA7IGkgPCBpbmNpZGVuY2VTdGF0ZXMubGVuZ3RoOyBpICsrICkgeworCQkJCQkJaWYoZGF0YU1hcC5nZXQoaW5jaWRlbmNlU3RhdGVzW2ldKSE9bnVsbCkgeworCQkJCQkJCQorCQkJCQkJCUxpc3Q8RG91YmxlPiBuZXh0RGF0YSA9IG5ldyBBcnJheUxpc3Q8RG91YmxlPigpOworCQkJCQkJCUxpc3Q8U3RyaW5nPiBkYXRhTGlzdCA9IGRhdGFNYXAuZ2V0KGluY2lkZW5jZVN0YXRlc1tpXSk7CisJCQkJCQkJCisJCQkJCQkJZm9yIChpbnQgaiA9IDA7IGogPCBkYXRhTGlzdC5zaXplKCk7IGogKyspIHsKKwkJCQkJCQkJdHJ5IHsKKwkJCQkJCQkJCURvdWJsZSBkYmwgPSBuZXcgRG91YmxlKGRhdGFMaXN0LmdldChqKSk7CisJCQkJCQkJCQlpZiAoZGJsIT1udWxsKSBuZXh0RGF0YS5hZGQoZGJsKTsKKwkJCQkJCQkJfSBjYXRjaChFeGNlcHRpb24gZUlnbm9yZSkgeworCQkJCQkJCQkJLy8gbm90aGluZyBpZiBub3QgZG91YmxlIGRhdGEgd2UganVzdCBkb24ndCB1c2UgaXQuCisJCQkJCQkJCX0KKwkJCQkJCQl9CisJCQkJCQkJaWYobmV4dERhdGEuc2l6ZSgpID49MSkgaW5jaWRlbmNlRGF0YS5hZGQobmV4dERhdGEpOworCQkJCQkJCXNlY29uZGFyeVByb3BlcnRpZXNUb1Bsb3QuYWRkKGluY2lkZW5jZVN0YXRlc1tpXSk7CisJCQkJCQl9CisJCQkJCX0JCisJCQkJCWFDdHJsLm5ld0luY2lkZW5jZUNhbnZhcy5kcmF3KCk7CisJCQkJCisJCQl9CisJCX0pOworCSAgICAKKwkJc3RhdHVzTGFiZWwgPSBuZXcgTGFiZWwodGhpcywgU1dULkJPUkRFUik7CisJCXN0YXR1c0xhYmVsLnNldFRleHQoIiIpOworCQkKKwkJLy8gUGxvdAorCQkKKwkJLy8gYWdncmVnYXRlIHRpbWUgc2VyaWVzIGRhdGEKKwkJYWdncmVnYXRlRGF0YUNhbnZhcyA9IG5ldyBUaW1lU2VyaWVzQ2FudmFzKHRoaXMsCisJCQkJTWVzc2FnZXMuZ2V0U3RyaW5nKCJFUElWSUVXLkFHR1JFR0FURUxFR0VORCIpLAorCQkJCU1lc3NhZ2VzLmdldFN0cmluZygiRVBJVklFVy5ZQVhJUyIpLAorCQkJCUFnZ3JlZ2F0ZURhdGFXcml0ZXIuZ2V0S2V5UygpLAorCQkJCWZvcmVHcm91bmQsCisJCQkJYmFja2dyb3VuZEdyb3VuZCwKKwkJCQlmcmFtZUNvbG9yLCAwKTsKKwkJCisJCWZpbmFsIEZvcm1EYXRhIGFuYWx5c2lzQ2hhcnRGb3JtRGF0YSA9IG5ldyBGb3JtRGF0YSgpOworCQlhZ2dyZWdhdGVEYXRhQ2FudmFzLnNldExheW91dERhdGEoYW5hbHlzaXNDaGFydEZvcm1EYXRhKTsKKwkJYW5hbHlzaXNDaGFydEZvcm1EYXRhLnRvcCA9IG5ldyBGb3JtQXR0YWNobWVudChwaWNrQWdncmVnYXRlRmlsZUJ1dHRvbiwgc3BhY2VyKTsKKwkJYW5hbHlzaXNDaGFydEZvcm1EYXRhLmJvdHRvbSA9IG5ldyBGb3JtQXR0YWNobWVudCgxMDAsIDApOworCQlhbmFseXNpc0NoYXJ0Rm9ybURhdGEubGVmdCA9IG5ldyBGb3JtQXR0YWNobWVudCgwLCAwKTsKKwkJYW5hbHlzaXNDaGFydEZvcm1EYXRhLnJpZ2h0ID0gbmV3IEZvcm1BdHRhY2htZW50KDUwLCAwKTsKKwkJCisJCS8vIG5ldyBJbmNpZGVuY2UgQ2FudmFzIHNlcmllcyBkYXRhCisJCW5ld0luY2lkZW5jZUNhbnZhcyA9IG5ldyBUaW1lU2VyaWVzQ2FudmFzKHRoaXMsCisJCQkJTWVzc2FnZXMuZ2V0U3RyaW5nKCJJTkNWSUVXLklOQ0lERU5DRUxFR0VORCIpLAorCQkJCU1lc3NhZ2VzLmdldFN0cmluZygiSU5DVklFVy5ZQVhJUyIpLAorCQkJCWluY2lkZW5jZVN0YXRlc1swXSwKKwkJCQlmb3JlR3JvdW5kLAorCQkJCWJhY2tncm91bmRHcm91bmQsCisJCQkJZnJhbWVDb2xvciwgMSk7CisJCQorCQlmaW5hbCBGb3JtRGF0YSBpbmNpZGVuY2VDaGFydEZvcm1EYXRhID0gbmV3IEZvcm1EYXRhKCk7CisJCW5ld0luY2lkZW5jZUNhbnZhcy5zZXRMYXlvdXREYXRhKGluY2lkZW5jZUNoYXJ0Rm9ybURhdGEpOworCQlpbmNpZGVuY2VDaGFydEZvcm1EYXRhLnRvcCA9IG5ldyBGb3JtQXR0YWNobWVudChwaWNrQWdncmVnYXRlRmlsZUJ1dHRvbiwgMCk7CisJCWluY2lkZW5jZUNoYXJ0Rm9ybURhdGEuYm90dG9tID0gbmV3IEZvcm1BdHRhY2htZW50KDEwMCwgMCk7CisJCWluY2lkZW5jZUNoYXJ0Rm9ybURhdGEubGVmdCA9IG5ldyBGb3JtQXR0YWNobWVudCg1MCwgMCk7CisJCWluY2lkZW5jZUNoYXJ0Rm9ybURhdGEucmlnaHQgPSBuZXcgRm9ybUF0dGFjaG1lbnQoMTAwLCAwKTsKKwkKKwl9IC8vIGNyZWF0ZUNvbnRlbnRzCisJCisJLyoqCisJICogY3JlYXRlcyBhIEFnZ3JlZ2F0ZSBCdXR0b24gY29tcG9zaXRlIGFuZCBpdHMgY29tcG9zaXRlIGNvbnRhaW5lcgorCSAqIEBwYXJhbSBjb250cm9sCisJICogQHBhcmFtIHRoZSBBZ2dyZWdhdGUgYnV0dG9uIGxhYmVsCisJICogQHJldHVybiB0aGUgQWdncmVnYXRlIGNvbXBvc2l0ZQorCSAqLworCUNvbXBvc2l0ZSBnZXRBZ2dyZWdhdGVCdXR0b25Db21wb3NpdGUoQW5hbHlzaXNDb250cm9sIGNvbnRyb2wsIFN0cmluZyBsYWJlbCkgeworCQlDb21wb3NpdGUgYWdncmVnYXRlQ29tcG9zaXRlID0gbmV3IENvbXBvc2l0ZShjb250cm9sLCBTV1QuQk9SREVSKTsKKwkgICAgRmlsbExheW91dCBmaWxsTGF5b3V0ID0gbmV3IEZpbGxMYXlvdXQoKTsKKwkgICAgZmlsbExheW91dC50eXBlID0gU1dULkhPUklaT05UQUw7CisJICAgIGFnZ3JlZ2F0ZUNvbXBvc2l0ZS5zZXRMYXlvdXQoZmlsbExheW91dCk7CisJICAgIExhYmVsIGxlZnRMYWJlbCA9IG5ldyBMYWJlbChhZ2dyZWdhdGVDb21wb3NpdGUsIFNXVC5OT05FKTsKKwkgICAgbGVmdExhYmVsLnNldFRleHQoIiAiKTsvLyBqdXN0IGEgc3BhY2VyCisJICAgIGFnZ3JlZ2F0ZUJ1dHRvbiA9IG5ldyBCdXR0b24oYWdncmVnYXRlQ29tcG9zaXRlLCBTV1QuTk9ORSk7CisJICAgIGFnZ3JlZ2F0ZUJ1dHRvbiAuc2V0VGV4dChsYWJlbCk7CisJCUxhYmVsIHJpZ2h0TGFiZWwgPSBuZXcgTGFiZWwoYWdncmVnYXRlQ29tcG9zaXRlLCBTV1QuTk9ORSk7CisJCXJpZ2h0TGFiZWwuc2V0VGV4dCgiICIpOy8vIGp1c3QgYSBzcGFjZXIKKwkJYWdncmVnYXRlQnV0dG9uLnNldEVuYWJsZWQodHJ1ZSk7CisJICAgIHJldHVybiBhZ2dyZWdhdGVDb21wb3NpdGU7CisJfS8vZ2V0QWdncmVnYXRlQnV0dG9uQ29tcG9zaXRlCisJCisJCisJCisJCisJLyoqCisJICogY3JlYXRlcyBhIFBsb3RCdXR0b24gY29tcG9zaXRlIGFuZCBpdHMgY29tcG9zaXRlIGNvbnRhaW5lcgorCSAqIEBwYXJhbSBjb250cm9sCisJICogQHBhcmFtIHRoZSBwbG90IGJ1dHRvbiBsYWJlbAorCSAqIEByZXR1cm4gdGhlIGNvbXBvc2l0ZQorCSAqLworCUNvbXBvc2l0ZSBnZXRQbG90QnV0dG9uQ29tcG9zaXRlKEFuYWx5c2lzQ29udHJvbCBjb250cm9sLCBTdHJpbmcgbGFiZWwpIHsKKwkJQ29tcG9zaXRlIHBsb3RDb21wb3NpdGUgPSBuZXcgQ29tcG9zaXRlKGNvbnRyb2wsIFNXVC5CT1JERVIpOworCSAgICBGaWxsTGF5b3V0IGZpbGxMYXlvdXQgPSBuZXcgRmlsbExheW91dCgpOworCSAgICBmaWxsTGF5b3V0LnR5cGUgPSBTV1QuSE9SSVpPTlRBTDsKKwkgICAgcGxvdENvbXBvc2l0ZS5zZXRMYXlvdXQoZmlsbExheW91dCk7CisJICAgIHVzZXJNZXNzYWdlTGFiZWwgPSBuZXcgTGFiZWwocGxvdENvbXBvc2l0ZSwgU1dULk5PTkUpOworCSAgICB1c2VyTWVzc2FnZUxhYmVsLnNldFRleHQodXNlck1lc3NhZ2UpOy8vIGp1c3QgYSBzcGFjZXIKKwkgICAgcGxvdEJ1dHRvbiA9IG5ldyBCdXR0b24ocGxvdENvbXBvc2l0ZSwgU1dULk5PTkUpOworCSAgICBwbG90QnV0dG9uIC5zZXRUZXh0KGxhYmVsKTsKKwkJTGFiZWwgcmlnaHRMYWJlbCA9IG5ldyBMYWJlbChwbG90Q29tcG9zaXRlLCBTV1QuTk9ORSk7CisJCXJpZ2h0TGFiZWwuc2V0VGV4dCgiICIpOy8vIGp1c3QgYSBzcGFjZXIKKwkJcGxvdEJ1dHRvbi5zZXRFbmFibGVkKHRydWUpOworCSAgICByZXR1cm4gcGxvdENvbXBvc2l0ZTsKKwl9Ly9nZXRQbG90QnV0dG9uQ29tcG9zaXRlCisJCisJCisJLyoqCisJICogRW5hYmxlIG9yIGRpc2FibGUgdGhlIGFuYWx5c2lzIGJ1dHRvbgorCSAqIAorCSAqIEBwYXJhbSBiCisJICovCisJCisJcHVibGljIHZvaWQgZW5hYmxlQW5hbHlzaXMoYm9vbGVhbiBiKSB7CisJCWlmKGIpIHRoaXMuYW5hbHl6ZUJ1dHRvbi5zZXRFbmFibGVkKHRydWUpOworCQllbHNlIHRoaXMuYW5hbHl6ZUJ1dHRvbi5zZXRFbmFibGVkKGZhbHNlKTsKKwl9CisJCisJCisJLyoqCisJICogdG8gcmVtb3ZlIHRoZSBjb250cm9sIGUuZy4gYnkgYSByZW1vdmUgYnV0dG9uIGV2ZW50CisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgcmVtb3ZlKCkgeworCQkKKwkJdXBkYXRlU3RhdHVzTGFiZWwoKTsKKwl9CisKKwkKKwkKKworCXByb3RlY3RlZCB2b2lkIHVwZGF0ZVN0YXR1c0xhYmVsKCkgeworCQlzdGF0dXNMYWJlbC5zZXRUZXh0KE1lc3NhZ2VzLmdldFN0cmluZygiQ09NTU9OLlNUQVRVUyIpKTsKKwl9CisJCisKKwkvKioKKwkgKiBJbml0aWFsaXplIHRoZSBoZWFkZXIgbGFiZWwKKwkgKiAKKwkgKiBAcGFyYW0gZm9sZGVyTmFtZQorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIGluaXRpYWxpemVIZWFkZXIoU3RyaW5nIGZvbGRlck5hbWUpIHsKKwkJc2ltdWxhdGlvbk5hbWVMYWJlbC5zZXRUZXh0KCJhbmFseXppbmcgIitmb2xkZXJOYW1lKTsKKworCX0gLy8gaW5pdGlhbGl6ZUZyb21TaW11bGF0aW9uCisKKworCQorCQorCQorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5XaWRnZXQjZGlzcG9zZSgpCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgZGlzcG9zZSgpIHsKKwkJCQkJCQorCQlzdXBlci5kaXNwb3NlKCk7CisJCQorCX0gLy8gZGlzcG9zZQorCisJCisJLyoqCisJICogbm90IHVzZWQKKwkgKiBAcmV0dXJuIG51bGwKKwkgKi8KKwlwdWJsaWMgSWRlbnRpZmlhYmxlIGdldElkZW50aWZpYWJsZSgpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJCisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBhZ2dyZWdhdGUgZGF0YQorCSAqIEBwYXJhbSBjaGFydEluZGV4IAorCSAqIEBwYXJhbSBzdGF0ZQorCSAqIEByZXR1cm4gQ3VtdWxhdGl2ZSBkZXZpYXRpb24gZnJvbSByZWZlcmVuY2UgdHJhamVjdG9yeQorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBkb3VibGVbXSBnZXRWYWx1ZXMoaW50IGNoYXJ0SW5kZXgsIGludCBzdGF0ZSkgeworCQkvLyBwaWNrIHRoZSByaWdodCBkYXRhIGZvciB0aGUgcmlnaHQgY2hhcnQKKwkJTGlzdDxMaXN0PERvdWJsZT4+IGRhdGEgPSBhZ2dyZWdhdGVEYXRhOworCQlpZihjaGFydEluZGV4ID49IDEpIGRhdGEgPSBpbmNpZGVuY2VEYXRhOworCQkKKwkJZG91YmxlIFtdIHJlc3VsdCA9IG5ldyBkb3VibGVbZGF0YS5nZXQoc3RhdGUpLnNpemUoKV07CisJCWludCBpPTA7CisJCWZvcihkb3VibGUgZDpkYXRhLmdldChzdGF0ZSkpCisJCQlyZXN1bHRbaSsrXT1kOworCQlyZXR1cm4gcmVzdWx0OworCX0KKwkKKwkvKioKKwkgKiBnZXQgdGhlIG5hbWUgb2YgdGhlIGRhdGEgdGltZSBzZXJpZXMKKwkgKiBAcGFyYW0gY2hhcnRJbmRleCAKKwkgKiBAcGFyYW0gc3RhdGUKKwkgKiBAcmV0dXJuIHByb3BlcnR5IG5hbWUKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgU3RyaW5nIGdldFByb3BlcnR5KGludCBjaGFydEluZGV4LGludCBzdGF0ZSkgeworCQkvLyByZXR1cm4gdGhlIHJpZ2h0IHByb3BlcnR5IGZvciB0aGUgcmVxdWVzdGVkIGNoYXJ0CisJCWlmKGNoYXJ0SW5kZXg9PTApIHsKKwkJCXJldHVybiBwcmltYXJ5UHJvcGVydGllc1RvUGxvdC5nZXQoc3RhdGUpOworCQl9CisJCXJldHVybiBzZWNvbmRhcnlQcm9wZXJ0aWVzVG9QbG90LmdldChzdGF0ZSk7CQkJCisJfQorCQorCS8qKgorCSAqIHJldHVybnMgdGhlIG51bWJlciBvZiBwcm9wZXJ0aWVzIHRvIHBsb3QKKwkgKiBAcGFyYW0gY2hhcnRJbmRleCAKKwkgKiBAcmV0dXJuIHRoZSBudW1iZXIgb2YgcHJvcGVydGllcworCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS51dGlsLmFuYWx5c2lzLnZpZXdzLkFuYWx5c2lzQ29udHJvbCNnZXROdW1Qcm9wZXJ0aWVzKGludCBjaGFydEluZGV4KQorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBpbnQgZ2V0TnVtUHJvcGVydGllcyhpbnQgY2hhcnRJbmRleCkgeworCQkvLyByZXR1cm4gdGhlIHJpZ2h0IG51bWJlciBvZiBwcm9wZXJ0aWVzIGZvciB0aGUgcmVxdWVzdGVkIGNoYXJ0CisJCWlmKGNoYXJ0SW5kZXg9PTApIHsKKwkJCXJldHVybiBwcmltYXJ5UHJvcGVydGllc1RvUGxvdC5zaXplKCk7CisJCX0KKwkJcmV0dXJuIHNlY29uZGFyeVByb3BlcnRpZXNUb1Bsb3Quc2l6ZSgpOwkKKwl9CisJCisJcHJvdGVjdGVkIFN0cmluZ1tdIGZpbHRlckRpc3BsYXlhYmxlU3RhdGVzKFNldDxTdHJpbmc+IGlucHV0U2V0KSB7CisJCQorCQkvLyByZW1vdmUgbm9uIHktYXhpcyBkYXRhIGl0ZW1zCisJCWZvciAoaW50IGkgPSAwOyBpIDwgT01JVF9MSVNULmxlbmd0aDsgaSArKykgeworCQkJaW5wdXRTZXQucmVtb3ZlKE9NSVRfTElTVFtpXSk7CisJCX0KKwkJCisJCVN0cmluZ1tdIHJldFZhbCA9IG5ldyBTdHJpbmdbaW5wdXRTZXQuc2l6ZSgpXTsKKwkJaW50IGljb3VudCA9IDA7CisJCUl0ZXJhdG9yPFN0cmluZz4gaXRlciA9IGlucHV0U2V0Lml0ZXJhdG9yKCk7CisJCXdoaWxlKChpdGVyIT1udWxsKSYmKGl0ZXIuaGFzTmV4dCgpKSkgeworCQkJU3RyaW5nIGtleSA9IGl0ZXIubmV4dCgpOworCQkJcmV0VmFsW2ljb3VudF0gPSBrZXk7CisJCSAgICBpY291bnQgKys7CQorCQl9CisJCUFycmF5cy5zb3J0KHJldFZhbCk7CisJCQorCQlyZXR1cm4gcmV0VmFsOworCX0KKwkKKwkgLyoqCisJICogRWFjaCBDb250cm9sIGNsYXNzIG1heSBhZGQgb2JqZWN0cyB0byB0aGlzIG1hcAorCSAqIEByZXR1cm4gdGhlIGNvbnRyb2wgcGFyYW1ldGVycyBtYXBzCisJICovCisJcHVibGljIE1hcDxTdHJpbmcsIE9iamVjdD4gZ2V0Q29udHJvbFBhcmFtZXRlcnNNYXAoKSB7CisJCS8vIGFkZCBub3RoaW5nIGZvciBub3cKKwkJcmV0dXJuIGNvbnRyb2xQYXJhbWV0ZXJzTWFwOworCX0KKwkKK30gLy8gRXN0aW1hdG9yQ29udHJvbApkaWZmIC0tZ2l0IGEvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS51dGlsLmFuYWx5c2lzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3V0aWwvYW5hbHlzaXMvdmlld3MvRXBpZGVtaWNGYWN0b3J5LmphdmEgYi9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLnV0aWwuYW5hbHlzaXMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdXRpbC9hbmFseXNpcy92aWV3cy9FcGlkZW1pY0ZhY3RvcnkuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZjc4MzFiCi0tLSAvZGV2L251bGwKKysrIGIvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS51dGlsLmFuYWx5c2lzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3V0aWwvYW5hbHlzaXMvdmlld3MvRXBpZGVtaWNGYWN0b3J5LmphdmEKQEAgLTAsMCArMSw1MiBAQAorLy8gRXN0aW1hdG9yRmFjdG9yeS5qYXZhCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0udXRpbC5hbmFseXNpcy52aWV3czsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNywgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGU7CisKKy8qKgorICogVGhpcyBjbGFzcyBpcyBhIGZhY3RvcnkgZm9yIGNyZWF0aW5nIHtAbGluayBBbmFseXNpc0NvbnRyb2x9IGluc3RhbmNlcy4KKyAqLworcHVibGljIGNsYXNzIEVwaWRlbWljRmFjdG9yeSBpbXBsZW1lbnRzIEFuYWx5c2lzQ29udHJvbEZhY3RvcnkgeworCisJLyoqCisJICogcHVibGljIElOU1RBTkNFIGZvciB0aGlzIEZhY3RvcnkKKwkgKi8KKwlwdWJsaWMgc3RhdGljIEVwaWRlbWljRmFjdG9yeSBJTlNUQU5DRSA9IG5ldyBFcGlkZW1pY0ZhY3RvcnkoKTsKKworCS8qKgorCSAqIENvbnN0YW50cyAKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBBTkFMWVNJU19UWVBFID0gIkFnZ3JlZ2F0ZSI7CisJCisKKwkvKioKKwkgKiAKKwkgKiBAcGFyYW0gcGFyZW50CisJICogQHBhcmFtIGRpck5hbWUKKwkgKiBAcmV0dXJuIG5ldyBFc3RpbWF0b3JDb250cm9sKCkKKwkgKi8KKwlwdWJsaWMgQW5hbHlzaXNDb250cm9sIGNyZWF0ZShmaW5hbCBDb21wb3NpdGUgcGFyZW50LCBTdHJpbmcgZGlyTmFtZSkgeworCQkJCQorCQlyZXR1cm4gbmV3IEVwaWRlbWljQ29udHJvbChwYXJlbnQpOworCX0KKworCS8qKgorCSAqIEByZXR1cm4gdHlwZSBvZiBhbmFseXNpcworCSAqIAorCSAqLworCXB1YmxpYyBTdHJpbmcgZ2V0Q29udHJvbFR5cGUoKSB7CisJCXJldHVybiBBTkFMWVNJU19UWVBFOworCX0KKworfSAvLyBFc3RpbWF0b3JGYWN0b3J5CmRpZmYgLS1naXQgYS9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLnV0aWwuYW5hbHlzaXMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdXRpbC9hbmFseXNpcy92aWV3cy9FcGlkZW1pY1ZpZXcuamF2YSBiL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0udXRpbC5hbmFseXNpcy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91dGlsL2FuYWx5c2lzL3ZpZXdzL0VwaWRlbWljVmlldy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZlZDljNTYKLS0tIC9kZXYvbnVsbAorKysgYi9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLnV0aWwuYW5hbHlzaXMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdXRpbC9hbmFseXNpcy92aWV3cy9FcGlkZW1pY1ZpZXcuamF2YQpAQCAtMCwwICsxLDY1IEBACisvLyBFc3RpbWF0b3JWaWV3IAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnV0aWwuYW5hbHlzaXMudmlld3M7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDcsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmpvYnMuc2ltdWxhdGlvbi5TaW11bGF0aW9uTWFuYWdlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGU7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkucGFydC5WaWV3UGFydDsKKworLyoqCisgKiBUaGUgdmlldyBwcm92aWRlcyBhIHRvb2wgZm9yIGFuYWx5emluZyBhZ2dyZWdhdGUgZGF0YQorICovCisKK3B1YmxpYyBjbGFzcyBFcGlkZW1pY1ZpZXcgZXh0ZW5kcyBWaWV3UGFydCB7CisKKwkvKioKKwkgKiBUaGUgaWRlbnRpZmllciBvZiB0aGUgQWdncmVnYXRlIFZpZXcge0B2YWx1ZX0KKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBJRF9BZ2dyZWdhdGVfVklFVyA9ICJvcmcuZWNsaXBzZS5zdGVtLnV0aWwuYW5hbHlzaXMudmlld3MuYWdncmVnYXRlIjsgLy8kTk9OLU5MUy0xJAorCisKKwlwcml2YXRlIEFuYWx5c2lzVmlld2VyIGFuYWx5c2lzVmlld2VyOworCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS51aS5wYXJ0LldvcmtiZW5jaFBhcnQjY3JlYXRlUGFydENvbnRyb2wob3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlKQorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGNyZWF0ZVBhcnRDb250cm9sKGZpbmFsIENvbXBvc2l0ZSBwYXJlbnQpIHsKKwkJYW5hbHlzaXNWaWV3ZXIgPSBuZXcgQW5hbHlzaXNWaWV3ZXIocGFyZW50LCBFcGlkZW1pY0ZhY3RvcnkuSU5TVEFOQ0UpOworCQlhbmFseXNpc1ZpZXdlci5zZXRJbnB1dChTaW11bGF0aW9uTWFuYWdlci5nZXRNYW5hZ2VyKCkpOworCisJCWdldFNpdGUoKS5zZXRTZWxlY3Rpb25Qcm92aWRlcihhbmFseXNpc1ZpZXdlcik7CisJfSAvLyBjcmVhdGVQYXJ0Q29udHJvbAorCisJCisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnVpLnBhcnQuV29ya2JlbmNoUGFydCNkaXNwb3NlKCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBkaXNwb3NlKCkgeworCQlzdXBlci5kaXNwb3NlKCk7CisJfSAvLyBkaXNwb3NlCisKKwkvKioKKwkgKiBUaGlzIGlzIHJlcXVpcmVkIGJ5IHRoZSBpbnRlcmZhY2UsIGJ1dCB3ZSdyZSBub3QgdXNpbmcgaXQuCisJICogCisJICogQHNlZSBvcmcuZWNsaXBzZS51aS5wYXJ0LldvcmtiZW5jaFBhcnQjc2V0Rm9jdXMoKQorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIHNldEZvY3VzKCkgeworCQkvLyBOb3RoaW5nCisJfSAvLyBzZXRGb2N1cworCit9IC8vIEVzdGltYXRvclZpZXcKZGlmZiAtLWdpdCBhL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0udXRpbC5hbmFseXNpcy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91dGlsL2FuYWx5c2lzL3ZpZXdzL0VzdGltYXRvckNhbnZhcy5qYXZhIGIvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS51dGlsLmFuYWx5c2lzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3V0aWwvYW5hbHlzaXMvdmlld3MvRXN0aW1hdG9yQ2FudmFzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDk0MTZkNQotLS0gL2Rldi9udWxsCisrKyBiL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0udXRpbC5hbmFseXNpcy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91dGlsL2FuYWx5c2lzL3ZpZXdzL0VzdGltYXRvckNhbnZhcy5qYXZhCkBAIC0wLDAgKzEsMzcyIEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0udXRpbC5hbmFseXNpcy52aWV3czsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OworaW1wb3J0IGphdmEudXRpbC5BcnJheXM7CitpbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOworaW1wb3J0IGphdmEudXRpbC5NYXA7CitpbXBvcnQgamF2YS51dGlsLk1hcC5FbnRyeTsKK2ltcG9ydCBqYXZhLnV0aWwuU2V0OworaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5iaXJ0LmNoYXJ0LmRldmljZS5JRGV2aWNlUmVuZGVyZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuYmlydC5jaGFydC5leGNlcHRpb24uQ2hhcnRFeGNlcHRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuYmlydC5jaGFydC5mYWN0b3J5LkdlbmVyYXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5iaXJ0LmNoYXJ0Lm1vZGVsLkNoYXJ0OworaW1wb3J0IG9yZy5lY2xpcHNlLmJpcnQuY2hhcnQubW9kZWwuQ2hhcnRXaXRoQXhlczsKK2ltcG9ydCBvcmcuZWNsaXBzZS5iaXJ0LmNoYXJ0Lm1vZGVsLmF0dHJpYnV0ZS5BbmNob3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuYmlydC5jaGFydC5tb2RlbC5hdHRyaWJ1dGUuQXhpc1R5cGU7CitpbXBvcnQgb3JnLmVjbGlwc2UuYmlydC5jaGFydC5tb2RlbC5hdHRyaWJ1dGUuQm91bmRzOworaW1wb3J0IG9yZy5lY2xpcHNlLmJpcnQuY2hhcnQubW9kZWwuYXR0cmlidXRlLkNoYXJ0RGltZW5zaW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmJpcnQuY2hhcnQubW9kZWwuYXR0cmlidXRlLkNvbG9yRGVmaW5pdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5iaXJ0LmNoYXJ0Lm1vZGVsLmF0dHJpYnV0ZS5JbnRlcnNlY3Rpb25UeXBlOworaW1wb3J0IG9yZy5lY2xpcHNlLmJpcnQuY2hhcnQubW9kZWwuYXR0cmlidXRlLlBvc2l0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmJpcnQuY2hhcnQubW9kZWwuYXR0cmlidXRlLlRpY2tTdHlsZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5iaXJ0LmNoYXJ0Lm1vZGVsLmF0dHJpYnV0ZS5pbXBsLkJvdW5kc0ltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2UuYmlydC5jaGFydC5tb2RlbC5hdHRyaWJ1dGUuaW1wbC5Db2xvckRlZmluaXRpb25JbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLmJpcnQuY2hhcnQubW9kZWwuY29tcG9uZW50LkF4aXM7CitpbXBvcnQgb3JnLmVjbGlwc2UuYmlydC5jaGFydC5tb2RlbC5jb21wb25lbnQuU2VyaWVzOworaW1wb3J0IG9yZy5lY2xpcHNlLmJpcnQuY2hhcnQubW9kZWwuY29tcG9uZW50LmltcGwuU2VyaWVzSW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5iaXJ0LmNoYXJ0Lm1vZGVsLmRhdGEuTnVtYmVyRGF0YVNldDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5iaXJ0LmNoYXJ0Lm1vZGVsLmRhdGEuU2VyaWVzRGVmaW5pdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5iaXJ0LmNoYXJ0Lm1vZGVsLmRhdGEuVGV4dERhdGFTZXQ7CitpbXBvcnQgb3JnLmVjbGlwc2UuYmlydC5jaGFydC5tb2RlbC5kYXRhLmltcGwuTnVtYmVyRGF0YVNldEltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2UuYmlydC5jaGFydC5tb2RlbC5kYXRhLmltcGwuU2VyaWVzRGVmaW5pdGlvbkltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2UuYmlydC5jaGFydC5tb2RlbC5kYXRhLmltcGwuVGV4dERhdGFTZXRJbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLmJpcnQuY2hhcnQubW9kZWwuaW1wbC5DaGFydFdpdGhBeGVzSW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5iaXJ0LmNoYXJ0Lm1vZGVsLmxheW91dC5MZWdlbmQ7CitpbXBvcnQgb3JnLmVjbGlwc2UuYmlydC5jaGFydC5tb2RlbC5sYXlvdXQuUGxvdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5iaXJ0LmNoYXJ0Lm1vZGVsLnR5cGUuQmFyU2VyaWVzOworaW1wb3J0IG9yZy5lY2xpcHNlLmJpcnQuY2hhcnQubW9kZWwudHlwZS5pbXBsLkJhclNlcmllc0ltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2UuYmlydC5jaGFydC51dGlsLlBsdWdpblNldHRpbmdzOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udXRpbC5hbmFseXNpcy5BY3RpdmF0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS51dGlsLmFuYWx5c2lzLlBhcmFtZXRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuU1dUOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuUGFpbnRFdmVudDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLlBhaW50TGlzdGVuZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmdyYXBoaWNzLkdDOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ncmFwaGljcy5JbWFnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5DYW52YXM7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLldpZGdldDsKKworLyoqCisgKiBUaW1lU2VyaWVzQ2FudmFzIGlzIGEgc3ViY2xhc3Mgb2Yge0BsaW5rIENhbnZhc30gc3VpdGFibGUgZm9yIGNoYXJ0IGRyYXdpbmdzLgorICovCitwdWJsaWMgY2xhc3MgRXN0aW1hdG9yQ2FudmFzIGV4dGVuZHMgQ2FudmFzIHsKKworCXByb3RlY3RlZCBJRGV2aWNlUmVuZGVyZXIgaWRyID0gbnVsbDsKKworCS8qKgorCSAqIFRoaXMgaXMgdGhlIHtAbGluayBDaGFydH0gdGhhdCBwbG90cyB0aGUgcmVsYXRpdmUgdmFsdWVzLgorCSAqLworCXByb3RlY3RlZCBDaGFydCBjbSA9IG51bGw7CisKKwkvL3ByaXZhdGUgRXN0aW1hdG9yQ29udHJvbCBjb250cm9sID0gbnVsbDsKKworCXN0YXRpYyBDb2xvckRlZmluaXRpb25bXSBiYXJDb2xvcnMgPSB7Q29sb3JEZWZpbml0aW9uSW1wbC5SRUQoKSwKKwkJQ29sb3JEZWZpbml0aW9uSW1wbC5CTFVFKCksCisJCUNvbG9yRGVmaW5pdGlvbkltcGwuT1JBTkdFKCksCisJCUNvbG9yRGVmaW5pdGlvbkltcGwuWUVMTE9XKCksCisJCUNvbG9yRGVmaW5pdGlvbkltcGwuR1JFRU4oKSwKKwkJQ29sb3JEZWZpbml0aW9uSW1wbC5QSU5LKCksCisJCUNvbG9yRGVmaW5pdGlvbkltcGwuQkxBQ0soKSB9OworCisKKwkvKioKKwkgKiB0aGUgY2hhcnQgdGl0bGUKKwkgKi8KKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgVElUTEUgPSAiRXN0aW1hdGVkIFBhcmFtZXRlcnMiOworCisJLyoqCisJICogdGhlIGxlZ2VuZAorCSAqLworCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBWQUxVRVMgPSAiUGFyYW1ldGVyIFZhbHVlcyI7CisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFZBTFVFU19MT1dFUiA9ICJWYWx1ZSAtIFN0ZC5EZXYuIjsKKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgVkFMVUVTX0hJR0hFUiA9ICJWYWx1ZSArIFN0ZC5EZXYuIjsKKworCXByaXZhdGUgc3RhdGljIGZpbmFsIGJvb2xlYW4gU0hPV19TVERfREVWID0gZmFsc2U7CisKKworCS8qKgorCSAqIENvbGxlY3Rpb24gb2YgdmFsdWVzIGZvciB0aGUgWC1TRVJJRVMgYmFyIGxhYmVscworCSAqKi8KKwlwcml2YXRlIHN0YXRpYyBWZWN0b3I8U3RyaW5nPiB4QXhpc1BhcmFtZXRlck5hbWVzID0gbmV3IFZlY3RvcjxTdHJpbmc+KCk7CisKKwkvKioKKwkgKiBDb2xsZWN0aW9uIG9mIHZhbHVlcyBmb3IgdGhlIFktU0VSSUVTIGJhcnMKKwkgKiovCisJcHJpdmF0ZSBzdGF0aWMgQXJyYXlMaXN0PERvdWJsZT4gYmFyVmFsdWVzID0gbmV3IEFycmF5TGlzdDxEb3VibGU+KCk7CisJcHJpdmF0ZSBzdGF0aWMgTnVtYmVyRGF0YVNldCBiYXJPcnRob1ZhbHVlczsKKworCisJLyoqCisJICogQ29sbGVjdGlvbiBvZiB2YWx1ZXMgZm9yIHRoZSBZLVNFUklFUzIgc3RhbmRhcmQgZGV2aWF0aW9uIGxvd2VyIGFuZCBoaWdoZXIgYmFycworCSAqKi8KKwlwcml2YXRlIHN0YXRpYyBBcnJheUxpc3Q8RG91YmxlPiBiYXJTdGREZXZMb3dlciA9IG5ldyBBcnJheUxpc3Q8RG91YmxlPigpOworCXByaXZhdGUgc3RhdGljIEFycmF5TGlzdDxEb3VibGU+IGJhclN0ZERldkhpZ2hlciA9IG5ldyBBcnJheUxpc3Q8RG91YmxlPigpOworCXByaXZhdGUgc3RhdGljIE51bWJlckRhdGFTZXQgYmFyT3J0aG9TdGREZXZMb3dlcjsKKwlwcml2YXRlIHN0YXRpYyBOdW1iZXJEYXRhU2V0IGJhck9ydGhvU3RkRGV2SGlnaGVyCisJOworCisJLyoqCisJICogQ2hhcnQgZ2VuZXJhdG9yIGluc3RhbmNlIChyZWZlcmVuY2UgdG8gYSBzaW5nbGV0b24pCisJICovCisJR2VuZXJhdG9yIGdyOworCisJSW1hZ2UgaW1nQ2hhcnQgPSBudWxsOworCisJLyoqCisJICogQ29uc3RydWN0b3IuCisJICogCisJICogQHBhcmFtIHBhcmVudAorCSAqICAgICAgICAgICAgdGhlIFNXVCBwYXJlbnQgb2YgdGhlIHtAbGluayBXaWRnZXR9CisJICovCisJcHVibGljIEVzdGltYXRvckNhbnZhcyhmaW5hbCBDb21wb3NpdGUgcGFyZW50KSB7CisJCXN1cGVyKHBhcmVudCwgU1dULkRPVUJMRV9CVUZGRVJFRCB8IFNXVC5CT1JERVIpOworCisJCWdyID0gR2VuZXJhdG9yLmluc3RhbmNlKCk7CisKKwkJdHJ5IHsKKwkJCWlkciA9IFBsdWdpblNldHRpbmdzLmluc3RhbmNlKCkuZ2V0RGV2aWNlKCJkdi5TV1QiKTsgLy8kTk9OLU5MUy0xJAkJCQorCQl9IGNhdGNoIChmaW5hbCBDaGFydEV4Y2VwdGlvbiBwZXgpIHsKKwkJCUFjdGl2YXRvci5sb2dFcnJvcigiUHJvYmxlbSBpbml0aWFsaXppbmcgY2hhcnQiLCBwZXgpOyAvLyROT04tTkxTLTEkCisJCQlyZXR1cm47CisJCX0KKworCQkvL2NvbnRyb2wgPSAoRXN0aW1hdG9yQ29udHJvbCkgcGFyZW50OworCisJCVZlY3RvcjxTdHJpbmc+IHhBeGlzUGFyYW1ldGVycyA9IG5ldyBWZWN0b3I8U3RyaW5nPigpOworCQl4QXhpc1BhcmFtZXRlcnMuYWRkKCJiZXRhIik7CisJCXhBeGlzUGFyYW1ldGVycy5hZGQoImFscGhhIik7CisJCXhBeGlzUGFyYW1ldGVycy5hZGQoImVwc2lsb24iKTsKKwkJeEF4aXNQYXJhbWV0ZXJzLmFkZCgiZ2FtbWEiKTsKKworCQkvL01hcDxTdHJpbmcsRG91YmxlPiBpbml0TWFwID0gTW9kZWxQYXJhbWV0ZXJzOworCQkvL2NtID0gY3JlYXRlQmFyQ2hhcnQoaW5pdE1hcCk7IAorCisJCWFkZFBhaW50TGlzdGVuZXIobmV3IFBhaW50TGlzdGVuZXIoKSB7CisJCQlwdWJsaWMgdm9pZCBwYWludENvbnRyb2woZmluYWwgUGFpbnRFdmVudCBwZSkgeworCQkJCWlmKGNtID09IG51bGwpIHJldHVybjsKKwkJCQlmaW5hbCBDb21wb3NpdGUgc291cmNlID0gKENvbXBvc2l0ZSkgcGUuZ2V0U291cmNlKCk7CisJCQkJZmluYWwgb3JnLmVjbGlwc2Uuc3d0LmdyYXBoaWNzLlJlY3RhbmdsZSBkID0gc291cmNlCisJCQkJLmdldENsaWVudEFyZWEoKTsKKworCQkJCWlmKGltZ0NoYXJ0ICE9IG51bGwpIGltZ0NoYXJ0LmRpc3Bvc2UoKTsKKwkJCQlpbWdDaGFydCA9IG5ldyBJbWFnZShzb3VyY2UuZ2V0RGlzcGxheSgpLCBkKTsKKwkJCQlpZHIuc2V0UHJvcGVydHkoSURldmljZVJlbmRlcmVyLkdSQVBISUNTX0NPTlRFWFQsIG5ldyBHQygKKwkJCQkJCWltZ0NoYXJ0KSk7CisJCQkJZmluYWwgQm91bmRzIGJvdW5kcyA9IEJvdW5kc0ltcGwuY3JlYXRlKGQueCwgZC55LCBkLndpZHRoLAorCQkJCQkJZC5oZWlnaHQpOworCQkJCWJvdW5kcy5zY2FsZSg3MmQgLyBpZHIuZ2V0RGlzcGxheVNlcnZlcigpLmdldERwaVJlc29sdXRpb24oKSk7CisJCQkJLy8gQk9VTkRTIE1VU1QgQkUgU1BFQ0lGSUVEIElOIFBPSU5UUworCisJCQkJdHJ5IHsKKwkJCQkJZ3IucmVuZGVyKGlkciwgZ3IuYnVpbGQoaWRyLmdldERpc3BsYXlTZXJ2ZXIoKSwgY20sIGJvdW5kcywKKwkJCQkJCQludWxsLCBudWxsLCBudWxsKSk7CisJCQkJCXBlLmdjLmRyYXdJbWFnZShpbWdDaGFydCwgZC54LCBkLnkpOworCQkJCX0gY2F0Y2ggKGZpbmFsIENoYXJ0RXhjZXB0aW9uIGNlKSB7CisJCQkJCUFjdGl2YXRvci5sb2dFcnJvcigiUHJvYmxlbSByZW5kZXJpbmcgY2hhcnQiLCBjZSk7IC8vJE5PTi1OTFMtMSQKKwkJCQl9CisKKwkJCX0gLy8gcGFpbnRDb250cm9sCisJCX0gLy8gUGFpbnRMaXN0ZW5lcgorCisJCSk7CisKKwl9IC8vIEVzdGltYXRvckNhbnZhcyBjb25zdHJ1Y3RvcgorCisJLyoqCisJICogKiBjcmVhdGVzIHRoZSBjaGFydAorCSAqIEBwYXJhbSBiYXJEYXRhTWFwCisJICogQHJldHVybiBhIGJhciBjaGFydAorCSAqLworCUBTdXBwcmVzc1dhcm5pbmdzKCJkZXByZWNhdGlvbiIpCisJcHVibGljIHN0YXRpYyBDaGFydCBjcmVhdGVCYXJDaGFydChNYXA8U3RyaW5nLFBhcmFtZXRlcj4gYmFyRGF0YU1hcCkgeworCQkvLyBSZXNldCBldmVyeXRoaW5nCisJCXhBeGlzUGFyYW1ldGVyTmFtZXMuY2xlYXIoKTsKKwkJYmFyVmFsdWVzLmNsZWFyKCk7CisJCWJhclN0ZERldkxvd2VyLmNsZWFyKCk7CisJCWJhclN0ZERldkhpZ2hlci5jbGVhcigpOworCisJCS8vIEJBUiBDSEFSVFMgQVJFIEJBU0VEIE9OIENIQVJUUyBUSEFUIENPTlRBSU4gQVhFUworCQlDaGFydFdpdGhBeGVzIGN3YUJhciA9IENoYXJ0V2l0aEF4ZXNJbXBsLmNyZWF0ZSgpOworCQljd2FCYXIuZ2V0QmxvY2soKS5zZXRCYWNrZ3JvdW5kKENvbG9yRGVmaW5pdGlvbkltcGwuV0hJVEUoKSk7CisJCWN3YUJhci5nZXRCbG9jaygpLmdldE91dGxpbmUoKS5zZXRWaXNpYmxlKHRydWUpOworCQljd2FCYXIuc2V0RGltZW5zaW9uKENoYXJ0RGltZW5zaW9uLlRXT19ESU1FTlNJT05BTF9XSVRIX0RFUFRIX0xJVEVSQUwpOworCisJCS8vIENVU1RPTUlaRSBUSEUgUExPVAorCQlQbG90IHAgPSBjd2FCYXIuZ2V0UGxvdCgpOworCQlwLmdldENsaWVudEFyZWEoKS5zZXRCYWNrZ3JvdW5kKENvbG9yRGVmaW5pdGlvbkltcGwuY3JlYXRlKDI1NSwgMjU1LCAyMjUpKTsKKwkJcC5nZXRPdXRsaW5lKCkuc2V0VmlzaWJsZShmYWxzZSk7CisJCWN3YUJhci5nZXRUaXRsZSgpLmdldExhYmVsKCkuZ2V0Q2FwdGlvbigpLnNldFZhbHVlKFRJVExFKTsKKworCQkvLyBDVVNUT01JWkUgVEhFIExFR0VORAorCQlMZWdlbmQgbGcgPSBjd2FCYXIuZ2V0TGVnZW5kKCk7CisJCWxnLmdldFRleHQoKS5nZXRGb250KCkuc2V0U2l6ZSgxNik7CisJCWxnLmdldEluc2V0cygpLnNldCgxMCwgNSwgMCwgMCk7CisJCWxnLnNldEFuY2hvcihBbmNob3IuTk9SVEhfTElURVJBTCk7CisKKwkJLy8gQ1VTVE9NSVpFIFRIRSBYLUFYSVMKKwkJQXhpcyB4QXhpc1ByaW1hcnkgPSBjd2FCYXIuZ2V0UHJpbWFyeUJhc2VBeGVzKClbMF07CisJCXhBeGlzUHJpbWFyeS5zZXRUeXBlKEF4aXNUeXBlLlRFWFRfTElURVJBTCk7CisJCXhBeGlzUHJpbWFyeS5nZXRNYWpvckdyaWQoKS5zZXRUaWNrU3R5bGUoVGlja1N0eWxlLkJFTE9XX0xJVEVSQUwpOworCQl4QXhpc1ByaW1hcnkuZ2V0T3JpZ2luKCkuc2V0VHlwZShJbnRlcnNlY3Rpb25UeXBlLlZBTFVFX0xJVEVSQUwpOworCQl4QXhpc1ByaW1hcnkuZ2V0VGl0bGUoKS5zZXRWaXNpYmxlKGZhbHNlKTsKKworCQkvLyBDVVNUT01JWkUgVEhFIFktQVhJUworCQlBeGlzIHlBeGlzUHJpbWFyeSA9IGN3YUJhci5nZXRQcmltYXJ5T3J0aG9nb25hbEF4aXMoeEF4aXNQcmltYXJ5KTsKKwkJeUF4aXNQcmltYXJ5LmdldE1ham9yR3JpZCgpLnNldFRpY2tTdHlsZShUaWNrU3R5bGUuTEVGVF9MSVRFUkFMKTsKKwkJeUF4aXNQcmltYXJ5LnNldFR5cGUoQXhpc1R5cGUuTElORUFSX0xJVEVSQUwpOworCQl5QXhpc1ByaW1hcnkuZ2V0TGFiZWwoKS5nZXRDYXB0aW9uKCkuZ2V0Rm9udCgpLnNldFJvdGF0aW9uKDkwKTsKKworCisJCS8vIHBvcHVsYXRlIGZyb20gdGhlIG1hcAorCQlTZXQ8U3RyaW5nPiBrZXlTZXQgPSBiYXJEYXRhTWFwLmtleVNldCgpOworCQlTdHJpbmdbXSBrZXlzID0gbmV3IFN0cmluZ1trZXlTZXQuc2l6ZSgpXTsKKwkJSXRlcmF0b3I8U3RyaW5nPiBpdGVyID0ga2V5U2V0Lml0ZXJhdG9yKCk7CisJCWludCBpY291bnQgPSAwOworCQl3aGlsZShpdGVyLmhhc05leHQoKSkgeworCQkJa2V5c1tpY291bnRdID0gaXRlci5uZXh0KCk7CisJCQlpY291bnQgKys7CisJCX0KKwkJQXJyYXlzLnNvcnQoa2V5cyk7CisJCWZvciAoaW50IGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7IGkrKykgeworCQkJU3RyaW5nIHBhcmFtTmFtZSA9IGtleXNbaV07CisJCQl4QXhpc1BhcmFtZXRlck5hbWVzLmFkZChwYXJhbU5hbWUpOworCQkJRG91YmxlIGRWYWx1ZSA9IG5ldyBEb3VibGUoYmFyRGF0YU1hcC5nZXQocGFyYW1OYW1lKS52YWx1ZSk7CisKKwkJCWJhclN0ZERldkxvd2VyLmFkZChkVmFsdWUpOworCQkJYmFyVmFsdWVzLmFkZChkVmFsdWUpOworCQkJYmFyU3RkRGV2SGlnaGVyLmFkZChkVmFsdWUpOworCQl9CisKKwkJVGV4dERhdGFTZXQgY2F0ZWdvcnlWYWx1ZXMgPSBUZXh0RGF0YVNldEltcGwuY3JlYXRlKHhBeGlzUGFyYW1ldGVyTmFtZXMpOworCisJCWJhck9ydGhvVmFsdWVzID0gTnVtYmVyRGF0YVNldEltcGwuY3JlYXRlKGJhclZhbHVlcyk7CisJCWJhck9ydGhvU3RkRGV2TG93ZXIgPSBOdW1iZXJEYXRhU2V0SW1wbC5jcmVhdGUoYmFyU3RkRGV2TG93ZXIpOworCQliYXJPcnRob1N0ZERldkhpZ2hlciA9IE51bWJlckRhdGFTZXRJbXBsLmNyZWF0ZShiYXJTdGREZXZIaWdoZXIpOworCisJCS8vIENSRUFURSBUSEUgQ0FURUdPUlkgQkFTRSBTRVJJRVMKKwkJU2VyaWVzIHNlQ2F0ZWdvcnkgPSBTZXJpZXNJbXBsLmNyZWF0ZSgpOworCQlzZUNhdGVnb3J5LnNldERhdGFTZXQoY2F0ZWdvcnlWYWx1ZXMpOworCisJCS8vIENyZWF0ZSB0aGUgZmlyc3Qgc2VyaWVzIG9mIGRhdGFWYWx1ZXMgdGhlIE9SVEhPR09OQUwgVmFsdWUtU3RhdG5kYXJkIGRldmlhdGlvbnMgTE9XRVIgU0VSSUVTCisJCUJhclNlcmllcyBic0xvd2VyID0gKEJhclNlcmllcykgQmFyU2VyaWVzSW1wbC5jcmVhdGUoKTsKKwkJYnNMb3dlci5zZXRTZXJpZXNJZGVudGlmaWVyKFZBTFVFU19MT1dFUik7CisJCWJzTG93ZXIuc2V0RGF0YVNldChiYXJPcnRob1N0ZERldkxvd2VyKTsKKwkJYnNMb3dlci5zZXRSaXNlck91dGxpbmUobnVsbCk7CisJCWJzTG93ZXIuZ2V0TGFiZWwoKS5zZXRWaXNpYmxlKHRydWUpOworCQlic0xvd2VyLnNldExhYmVsUG9zaXRpb24oUG9zaXRpb24uSU5TSURFX0xJVEVSQUwpOworCisJCS8vIENyZWF0ZSB0aGUgVmFsdWVzIHNlcmllcyBvZiBkYXRhVmFsdWVzIHRoZSBPUlRIT0dPTkFMIFNFUklFUworCQlCYXJTZXJpZXMgYnNWYWx1ZXMgPSAoQmFyU2VyaWVzKSBCYXJTZXJpZXNJbXBsLmNyZWF0ZSgpOworCQlic1ZhbHVlcy5zZXRTZXJpZXNJZGVudGlmaWVyKFZBTFVFUyk7CisJCWJzVmFsdWVzLnNldERhdGFTZXQoYmFyT3J0aG9WYWx1ZXMpOworCQlic1ZhbHVlcy5zZXRSaXNlck91dGxpbmUobnVsbCk7CisJCWJzVmFsdWVzLmdldExhYmVsKCkuc2V0VmlzaWJsZSh0cnVlKTsKKwkJYnNWYWx1ZXMuc2V0TGFiZWxQb3NpdGlvbihQb3NpdGlvbi5JTlNJREVfTElURVJBTCk7CisKKwkJLy8gQ3JlYXRlIHRoZSBUSElSRCBzZXJpZXMgb2YgZGF0YVZhbHVlcyB0aGUgT1JUSE9HT05BTCBWYWx1ZStTdGREZXYgSElHSEVSIFNFUklFUworCQlCYXJTZXJpZXMgYnNIaWdoZXIgPSAoQmFyU2VyaWVzKSBCYXJTZXJpZXNJbXBsLmNyZWF0ZSgpOworCQlic0hpZ2hlci5zZXRTZXJpZXNJZGVudGlmaWVyKFZBTFVFU19ISUdIRVIpOworCQlic0hpZ2hlci5zZXREYXRhU2V0KGJhck9ydGhvU3RkRGV2SGlnaGVyKTsKKwkJYnNIaWdoZXIuc2V0UmlzZXJPdXRsaW5lKG51bGwpOworCQlic0hpZ2hlci5nZXRMYWJlbCgpLnNldFZpc2libGUodHJ1ZSk7CisJCWJzSGlnaGVyLnNldExhYmVsUG9zaXRpb24oUG9zaXRpb24uSU5TSURFX0xJVEVSQUwpOworCisJCS8vIFdSQVAgVEhFIEJBU0UgU0VSSUVTIElOIFRIRSBYLUFYSVMgU0VSSUVTIERFRklOSVRJT04KKwkJU2VyaWVzRGVmaW5pdGlvbiBzZFggPSBTZXJpZXNEZWZpbml0aW9uSW1wbC5jcmVhdGUoKTsKKwkJc2RYLmdldFNlcmllc1BhbGV0dGUoKS51cGRhdGUoMCk7IC8vIFNFVCBUSEUgQ09MT1JTIElOIFRIRSBQQUxFVFRFCisJCXhBeGlzUHJpbWFyeS5nZXRTZXJpZXNEZWZpbml0aW9ucygpLmFkZChzZFgpOworCQlzZFguZ2V0U2VyaWVzKCkuYWRkKHNlQ2F0ZWdvcnkpOworCisJCWlmIChTSE9XX1NURF9ERVYpIHsKKwkJCS8vIE9uZSBUSEUgT1JUSE9HT05BTCBWQUxVRVMtU1RELURFViBsb3dlciBTRVJJRVMgRm9yIHRoZSBZLUFYSVMgU0VSSUVTIERFRklOSVRJT04KKwkJCVNlcmllc0RlZmluaXRpb24gc2RZbG93ZXIgPSBTZXJpZXNEZWZpbml0aW9uSW1wbC5jcmVhdGUoKTsKKwkJCXNkWWxvd2VyLmdldFNlcmllc1BhbGV0dGUoKS51cGRhdGUoMSk7IC8vIFNFVCBUSEUgQ09MT1IgSU4gVEhFIFBBTEVUVEUKKwkJCXlBeGlzUHJpbWFyeS5nZXRTZXJpZXNEZWZpbml0aW9ucygpLmFkZChzZFlsb3dlcik7CisJCQlzZFlsb3dlci5nZXRTZXJpZXMoKS5hZGQoYnNMb3dlcik7CisJCX0KKworCisJCS8vIFR3byBUSEUgT1JUSE9HT05BTCBWQUxVRVMgU0VSSUVTIEZvciB0aGUgWS1BWElTIFNFUklFUyBERUZJTklUSU9OCisJCVNlcmllc0RlZmluaXRpb24gc2RZMSA9IFNlcmllc0RlZmluaXRpb25JbXBsLmNyZWF0ZSgpOworCQlzZFkxLmdldFNlcmllc1BhbGV0dGUoKS51cGRhdGUoMSk7IC8vIFNFVCBUSEUgQ09MT1IgSU4gVEhFIFBBTEVUVEUKKwkJeUF4aXNQcmltYXJ5LmdldFNlcmllc0RlZmluaXRpb25zKCkuYWRkKHNkWTEpOworCQlzZFkxLmdldFNlcmllcygpLmFkZChic1ZhbHVlcyk7CisKKwkJaWYgKFNIT1dfU1REX0RFVikgeworCQkJLy8gVGhyZWUgVEhFIE9SVEhPR09OQUwgVkFMVUVTK1NURERFViBIaWdoZXIgU0VSSUVTIEZvciB0aGUgWS1BWElTIFNFUklFUyBERUZJTklUSU9OCisJCQlTZXJpZXNEZWZpbml0aW9uIHNkWUhpZ2hlciA9IFNlcmllc0RlZmluaXRpb25JbXBsLmNyZWF0ZSgpOworCQkJc2RZSGlnaGVyLmdldFNlcmllc1BhbGV0dGUoKS51cGRhdGUoMSk7IC8vIFNFVCBUSEUgQ09MT1IgSU4gVEhFIFBBTEVUVEUKKwkJCXlBeGlzUHJpbWFyeS5nZXRTZXJpZXNEZWZpbml0aW9ucygpLmFkZChzZFlIaWdoZXIpOworCQkJc2RZSGlnaGVyLmdldFNlcmllcygpLmFkZChic0hpZ2hlcik7CisJCX0KKworCisJCXJldHVybiBjd2FCYXI7CisKKwl9Ly8gY3JlYXRlQmFyQ2hhcnQKKworCS8qKgorCSAqIHJlZnJlc2hlcyAoc29tZSBvZikgdGhlIGRhdGEgaW4gdGhlIGJhciBjaGFydCBieSBrZXkgdmFsdWVzCisJICogQHBhcmFtIGJhckRhdGFNYXAgQWxsIHBhcmFtZXRlcnMKKwkgKi8KKwlwdWJsaWMgc3RhdGljIHZvaWQgcmVmcmVzaChNYXA8U3RyaW5nLFBhcmFtZXRlcj4gYmFyRGF0YU1hcCkgeworCQkvL0l0ZXJhdG9yPFN0cmluZz4gaXRlciA9IGJhckRhdGFNYXAua2V5U2V0KCkuaXRlcmF0b3IoKTsKKwkJLy93aGlsZShpdGVyLmhhc05leHQoKSkgeworCisKKwkJZm9yIChFbnRyeTxTdHJpbmcsUGFyYW1ldGVyPiBlbnRyeSA6IGJhckRhdGFNYXAuZW50cnlTZXQoKSkgeworCQkJaW50IGljb3VudCA9IHhBeGlzUGFyYW1ldGVyTmFtZXMuaW5kZXhPZihlbnRyeS5nZXRLZXkoKSk7CisJCQlpZiAoaWNvdW50ID49IDApIHsKKwkJCQlkb3VibGUgdmFsdWUgPSBlbnRyeS5nZXRWYWx1ZSgpLnZhbHVlOworCQkJCS8vIGFuZCB0aGUgaGlnaGVyL2xvd2VyIHZhbHVlcworCQkJCWRvdWJsZSBkZXZpYXRpb24gPSBlbnRyeS5nZXRWYWx1ZSgpLnN0ZGRldjsKKwkJCQlEb3VibGUgbG93ZXIgPSBuZXcgRG91YmxlKHZhbHVlLWRldmlhdGlvbik7CisJCQkJRG91YmxlIGhpZ2hlciA9IG5ldyBEb3VibGUodmFsdWUgKyBkZXZpYXRpb24pOworCisJCQkJYmFyVmFsdWVzLnNldChpY291bnQsbmV3IERvdWJsZSh2YWx1ZSkpOworCQkJCWJhclN0ZERldkxvd2VyLnNldChpY291bnQsbG93ZXIpOworCQkJCWJhclN0ZERldkhpZ2hlci5zZXQoaWNvdW50LGhpZ2hlcik7CisJCQl9CisKKwkJfS8vIHdoaWxlIGhhdmUga2V5cworCX0vLyByZWZyZXNoCisKKwkvKioKKwkgKiBUaGUgbWV0aG9kIHdoaWNoIGdldHMgdGhlIHtAbGluayBFc3RpbWF0b3JDYW52YXN9JyByZXBvcnRzIGxpc3QsIGFuZAorCSAqIGRyYXdzIGl0IG9uIHRoZSB7QGxpbmsgRXN0aW1hdG9yQ2FudmFzfS4KKwkgKiBAcGFyYW0gYmFyRGF0YU1hcCBQYXJhbWV0ZXIgbWFwCisJICogCisJICovCisJcHVibGljIHZvaWQgZHJhdyhNYXA8U3RyaW5nLFBhcmFtZXRlcj4gYmFyRGF0YU1hcCkgeworCQljbSA9IEVzdGltYXRvckNhbnZhcy5jcmVhdGVCYXJDaGFydChiYXJEYXRhTWFwKTsKKwkJLy9yZWZyZXNoKGJhckRhdGFNYXApOworCisJCWlmICghdGhpcy5pc0Rpc3Bvc2VkKCkpIHsKKwkJCXJlZHJhdygpOworCQl9CisJfSAvLyBwYWludENvbnRyb2wKKworCS8qKgorCSAqIERpc3Bvc2VzIHRoZSBDb2xvciBvYmplY3RzCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgZGlzcG9zZSgpIHsKKwkJc3VwZXIuZGlzcG9zZSgpOworCX0KKworCit9IC8vIFRpbWVTZXJpZXNDYW52YXMKZGlmZiAtLWdpdCBhL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0udXRpbC5hbmFseXNpcy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91dGlsL2FuYWx5c2lzL3ZpZXdzL0VzdGltYXRvckNvbnRyb2wuamF2YSBiL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0udXRpbC5hbmFseXNpcy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91dGlsL2FuYWx5c2lzL3ZpZXdzL0VzdGltYXRvckNvbnRyb2wuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZGUwMDA4Ci0tLSAvZGV2L251bGwKKysrIGIvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS51dGlsLmFuYWx5c2lzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3V0aWwvYW5hbHlzaXMvdmlld3MvRXN0aW1hdG9yQ29udHJvbC5qYXZhCkBAIC0wLDAgKzEsMTA4MSBAQAorLy8gRXN0aW1hdG9yQ29udHJvbC5qYXZhCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0udXRpbC5hbmFseXNpcy52aWV3czsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNywgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqYXZhLnV0aWwuTWFwOworCitpbXBvcnQgb3JnLmVjbGlwc2UuYmlydC5jaGFydC5tb2RlbC5hdHRyaWJ1dGUuQ29sb3JEZWZpbml0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmJpcnQuY2hhcnQubW9kZWwuYXR0cmlidXRlLmltcGwuQ29sb3JEZWZpbml0aW9uSW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5kaWFsb2dzLlByb2dyZXNzTW9uaXRvckRpYWxvZzsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS53aXphcmQuV2l6YXJkRGlhbG9nOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuaW1wbC5SZWZlcmVuY2VTY2VuYXJpb0RhdGFNYXBJbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMudXRpbC5DU1ZzY2VuYXJpb0xvYWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLklkZW50aWZpYWJsZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLkFjdGl2YXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnV0aWwuYW5hbHlzaXMuQWdncmVnYXRlRGF0YVdyaXRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnV0aWwuYW5hbHlzaXMuTW9kZWxQYXJhbWV0ZXJzOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udXRpbC5hbmFseXNpcy5QYXJhbWV0ZXJFc3RpbWF0b3JNZXRob2Q7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS51dGlsLmFuYWx5c2lzLlNjZW5hcmlvQW5hbHlzaXNTdWl0ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuU1dUOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuU2VsZWN0aW9uQWRhcHRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLlNlbGVjdGlvbkV2ZW50OworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5sYXlvdXQuRmlsbExheW91dDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QubGF5b3V0LkZvcm1BdHRhY2htZW50OworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5sYXlvdXQuRm9ybURhdGE7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5Gb3JtTGF5b3V0OworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5sYXlvdXQuR3JpZExheW91dDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5CdXR0b247CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tYm87CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkxhYmVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlNoZWxsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlNwaW5uZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuVGFiRm9sZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlRhYkl0ZW07CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuVGV4dDsKKworLyoqCisgKiBUaGlzIGNsYXNzIGlzIGEgU1dUIEdVSSBjb21wb25lbnQgdGhhdCB1c2VzIEJJUlQgdG8gcGxvdAorICovCitwdWJsaWMgY2xhc3MgRXN0aW1hdG9yQ29udHJvbCBleHRlbmRzIEFuYWx5c2lzQ29udHJvbCB7CisJCisJCisJCisJLyoqCisJICoga2VlcCB0aGUgcmVjZW50IGZvbGRlciBuYW1lCisJICovCisJU3RyaW5nIHJlY2VudEZvbGRlcjsKKwkKKwkvKioKKwkgKiB1c2VkIHRvIGlkZW50aWZ5IHVzZXIgcHJlZmVyZW5jZXMgZm9yIHRoaXMgY2xhc3MKKwkgKiBUaGlzIFN0cmluZyBpcyBub3QgaHVtYW4gcmVhZGFibGUgc28gZG9lcyBub3QgbmVlZCB0byBiZSBOTFMnZC4gSXQgaXMgYSBrZXkgaW4gYSBtYXAKKwkgKi8KKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgQ09OU1VNRVIgPSAiRVNUSU1BVE9SX0NPTlRST0wiOworCisJCisJLyoqCisJICogIExhYmVsIGZvciBjdXJyZW50IHNjZW5hcmlvIGZvbGRlcgorCSAqLworCXN0YXRpYyBMYWJlbCBzY2VuYXJpb0ZvbGRlckxhYmVsOworCQorCS8qKgorCSAqICBMYWJlbCBmb3IgY3VycmVudCBwYXJhbWV0ZXIgZXN0aW1hdG9yCisJICovCisJCisJc3RhdGljIExhYmVsIGVzdGltYXRvckZvbGRlckxhYmVsOworCS8qKgorCSAqIElucHV0IHRleHQgZmllbGQgZm9yIHRoZSBzY2VuYXJpbyBmb2xkZXIgb2YgZGF0YSB0byB1c2UgaW4gbWFraW5nIHRoZSBlc3RpbWF0aW9uCisJICovCisJcHVibGljIHN0YXRpYyBUZXh0IHRleHQxOworCQorCS8qKgorCSAqIFRleHQgZGlzcGxheWluZyB0aGUgY3VycmVudGx5IHNlbGVjdGVkIHBhcmFtZXRlciBlc3RpbWF0b3IKKwkgKi8KKwkKKwlwdWJsaWMgc3RhdGljIFRleHQgZXN0aW1hdG9yVGV4dDsKKwkKKwkvKioKKwkgKiBBIGxhYmVsIHRvIHJlcG9ydCBzdGF0dXMgKG5vdCB5ZXQgdXNlZCkKKwkgKi8KKwlzdGF0aWMgTGFiZWwgc3RhdHVzTGFiZWw7CisJCisJLyoqCisJICogUmFkaW8gYnV0dG9ucyBmb3IgZml0IHRoZW4gYXZlcmFnZSBvciBzdW0gb3ZlciBsb2NhdGlvbiB0aGVuCisJICovCisJcHVibGljIHN0YXRpYyBCdXR0b25bXSBkYXRhQXZlcmFnZVJhZGlvQnV0dG9ucyA9IG5ldyBCdXR0b25bMl07CisJCQorCS8qKgorCSAqIFJhZGlvIGJ1dHRvbnMgZm9yIGZyZXF1ZW5jeSB2cyBkZW5zaXR5IGRlcGVuZGVudCBiZXRhCisJICovCisJcHVibGljIHN0YXRpYyBCdXR0b25bXSBiZXRhTW9kZVJhZGlvQnV0dG9ucyA9IG5ldyBCdXR0b25bMl07CisJCisJLyoqCisJICogdGhyZWUgZGVjaW1hbCBwbGFjZXMKKwkgKi8KKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgU1BJTk5FUl9SRVNPTFVUSU9OID0gMTAwMDsKKwkKKwkvKioKKwkgKiAwLjAwMQorCSAqLworCXByaXZhdGUgc3RhdGljIGZpbmFsIGludCBTUElOTkVSX0lOQ1JFTUVOVCA9IDE7CisJCisJCisJLyoqIG1pbiBTIHRocmVzaG9sZCBmb3IgYW5hbHlzaXMgKi8KKwlwcm90ZWN0ZWQgc3RhdGljIFNwaW5uZXIgbWluVGhyZXNob2xkU3Bpbm5lclM7CisJLyoqIG1heCBTIHRocmVzaG9sZCBmb3IgYW5hbHlzaXMgKi8KKwlwcm90ZWN0ZWQgc3RhdGljIFNwaW5uZXIgbWF4VGhyZXNob2xkU3Bpbm5lclM7CisJLyoqIFMgc3Bpbm5lciBsYWJlbCAqLworCXN0YXRpYyBMYWJlbCBtaW5TcGlubmVyTGFiZWxTOworCS8qKiBTIHNwaW5uZXIgbGFiZWwgKi8KKwlzdGF0aWMgTGFiZWwgbWF4U3Bpbm5lckxhYmVsUzsKKwkKKwkvKioKKwkgKiBrZXlzIGZvciBmaW5kaW5nIGNvbnRyb2wgcGFyYW1ldGVycyBmcm9tIHRoZSBtYXAKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBNSU5fU19LRVkgPSAiTUlOUyI7CisJLyoqCisJICoga2V5cyBmb3IgZmluZGluZyBjb250cm9sIHBhcmFtZXRlcnMgZnJvbSB0aGUgbWFwCisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgTUlOX0VfS0VZID0gIk1JTkUiOworCS8qKgorCSAqIGtleXMgZm9yIGZpbmRpbmcgY29udHJvbCBwYXJhbWV0ZXJzIGZyb20gdGhlIG1hcAorCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIE1JTl9JX0tFWSA9ICJNSU5JIjsKKwkvKioKKwkgKiBrZXlzIGZvciBmaW5kaW5nIGNvbnRyb2wgcGFyYW1ldGVycyBmcm9tIHRoZSBtYXAKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBNSU5fUl9LRVkgPSAiTUlOUiI7CisJLyoqCisJICoga2V5cyBmb3IgZmluZGluZyBjb250cm9sIHBhcmFtZXRlcnMgZnJvbSB0aGUgbWFwCisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgTUFYX1NfS0VZID0gIk1BWFMiOworCS8qKgorCSAqIGtleXMgZm9yIGZpbmRpbmcgY29udHJvbCBwYXJhbWV0ZXJzIGZyb20gdGhlIG1hcAorCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIE1BWF9FX0tFWSA9ICJNQVhFIjsKKwkvKioKKwkgKiBrZXlzIGZvciBmaW5kaW5nIGNvbnRyb2wgcGFyYW1ldGVycyBmcm9tIHRoZSBtYXAKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBNQVhfSV9LRVkgPSAiTUFYSSI7CisJLyoqCisJICoga2V5cyBmb3IgZmluZGluZyBjb250cm9sIHBhcmFtZXRlcnMgZnJvbSB0aGUgbWFwCisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgTUFYX1JfS0VZID0gIk1BWFIiOworCS8qKgorCSAqIGtleXMgZm9yIGZpbmRpbmcgY29udHJvbCBwYXJhbWV0ZXJzIGZyb20gdGhlIG1hcAorCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFNVTV9MT0NBVElPTlNfS0VZID0gIlNVTV9MT0NBVElPTlMiOworCS8qKgorCSAqIGtleXMgZm9yIGZpbmRpbmcgY29udHJvbCBwYXJhbWV0ZXJzIGZyb20gdGhlIG1hcAorCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEZSRVFfTU9ERV9LRVkgPSAiRlJFUV9NT0RFIjsKKwkKKwkvKiogUmVnaW9uIFNlbGVjdG9yIENvbWJvIGJveCAqKi8KKwlwcm90ZWN0ZWQgc3RhdGljIENvbWJvIGRpc3BsYXlSZWdpb25Db21ibzsKKwlwcm90ZWN0ZWQgc3RhdGljIFN0cmluZyByZWdpb25Ub0Rpc3BsYXkgPSAiIjsKKwkKKwkvKiogbWluIEUgdGhyZXNob2xkIGZvciBhbmFseXNpcyAqLworCXByb3RlY3RlZCBzdGF0aWMgU3Bpbm5lciBtaW5UaHJlc2hvbGRTcGlubmVyRTsKKwkvKiogbWF4IEUgdGhyZXNob2xkIGZvciBhbmFseXNpcyAqLworCXByb3RlY3RlZCBzdGF0aWMgU3Bpbm5lciBtYXhUaHJlc2hvbGRTcGlubmVyRTsKKwkvKiogRSBzcGlubmVyIGxhYmVsICovCisJc3RhdGljIExhYmVsIG1pblNwaW5uZXJMYWJlbEU7CisJLyoqIEUgc3Bpbm5lciBsYWJlbCAqLworCXN0YXRpYyBMYWJlbCBtYXhTcGlubmVyTGFiZWxFOworCQorCS8qKiBtaW4gSSB0aHJlc2hvbGQgZm9yIGFuYWx5c2lzICovCisJcHJvdGVjdGVkIHN0YXRpYyBTcGlubmVyIG1pblRocmVzaG9sZFNwaW5uZXJJOworCS8qKiBtYXggSSB0aHJlc2hvbGQgZm9yIGFuYWx5c2lzICovCisJcHJvdGVjdGVkIHN0YXRpYyBTcGlubmVyIG1heFRocmVzaG9sZFNwaW5uZXJJOworCS8qKiBJIHNwaW5uZXIgbGFiZWwgKi8KKwlzdGF0aWMgTGFiZWwgbWluU3Bpbm5lckxhYmVsSTsKKwkvKiogKCBzcGlubmVyIGxhYmVsICovCisJc3RhdGljIExhYmVsIG1heFNwaW5uZXJMYWJlbEk7CisJCisJLyoqIG1pbiBSIHRocmVzaG9sZCBmb3IgYW5hbHlzaXMgKi8KKwlwcm90ZWN0ZWQgc3RhdGljIFNwaW5uZXIgbWluVGhyZXNob2xkU3Bpbm5lclI7CisJLyoqIG1heCBSIHRocmVzaG9sZCBmb3IgYW5hbHlzaXMgKi8KKwlwcm90ZWN0ZWQgc3RhdGljIFNwaW5uZXIgbWF4VGhyZXNob2xkU3Bpbm5lclI7CQorCS8qKiBSIHNwaW5uZXIgbGFiZWwgKi8KKwlzdGF0aWMgTGFiZWwgbWluU3Bpbm5lckxhYmVsUjsKKwkvKiogUiBzcGlubmVyIGxhYmVsICovCisJc3RhdGljIExhYmVsIG1heFNwaW5uZXJMYWJlbFI7CisJCisJCisJCisJLyoqCisJICogVGhlIHJlc3VsdHMgYW5kIGRhdGEgdGhhdCBnbyBpbnRvIG1ha2luZyBhbiBlc3RpbWF0ZQorCSAqLworCXN0YXRpYyBNb2RlbFBhcmFtZXRlcnMgYXZlcmFnZVBhcm1zOworCQorCisJLyoqCisJICogRm9sZGVyIHRvIGNvbnRhaW4gdGhlIGFuYWx5c2lzIGdyYXBocworCSAqIAorCSAqLworCXN0YXRpYyBUYWJGb2xkZXIgdGFiRm9sZGVyOworCisJLyoqCisJICogdGhlIGNoYXJ0IG9mIHJlc3VsdHMKKwkgKi8KKwlzdGF0aWMgRXN0aW1hdG9yQ2FudmFzIGVzdGltYXRvckNhbnZhczsKKwkKKwkvKioKKwkgKiBDb2xvcnMgZm9yIHRoZSB0aW1lIHNlcmllcyBjaGFydAorCSAqLworCXN0YXRpYyBmaW5hbCBDb2xvckRlZmluaXRpb24gZm9yZUdyb3VuZCA9IENvbG9yRGVmaW5pdGlvbkltcGwuY3JlYXRlKDE4MCwgMCwgMCk7CisJc3RhdGljIGZpbmFsIENvbG9yRGVmaW5pdGlvbiBiYWNrZ3JvdW5kR3JvdW5kID0gQ29sb3JEZWZpbml0aW9uSW1wbC5jcmVhdGUoMjU1LCAyNTUsIDIyNSk7CisJc3RhdGljIGZpbmFsIENvbG9yRGVmaW5pdGlvbiBmcmFtZUNvbG9yID0gQ29sb3JEZWZpbml0aW9uSW1wbC5XSElURSgpOworCQorCS8qKgorCSAqIEZvciBub3cgd2Ugd2lsbCBhbHdheXMgc2V0IHVwIGZvciBmb3VyIG9mIHRoZXNlCisJICogd2Ugd2lsbCB1c2UgMi00IGRlcGVuZGluZyBvbiB0aGUgdHlwZSBvZiBtb2RlbCAoU0ksU0lSLCBTRUlSLCBldGMpLgorCSAqLworCXByb3RlY3RlZCBzdGF0aWMgVGltZVNlcmllc0NhbnZhc1tdIGVxdWF0aW9uU2VyaWVzID0gbmV3IFRpbWVTZXJpZXNDYW52YXNbNF07CisJCisJLyoqCisJICogRm9yIG5vdyB3ZSB3aWxsIGFsd2F5cyBzZXQgdXAgZm9yIGZvdXIgb2YgdGhlc2UKKwkgKiB3ZSB3aWxsIHVzZSAyLTQgZGVwZW5kaW5nIG9uIHRoZSB0eXBlIG9mIG1vZGVsIChTSSxTSVIsIFNFSVIsIGV0YykuCisJICovCisJcHJvdGVjdGVkIHN0YXRpYyBYWVNlcmllc0NhbnZhc1tdIHJlZ3Jlc3Npb25TZXJpZXMgPSBuZXcgWFlTZXJpZXNDYW52YXNbNF07CisJCisJLyoqCisJICogV2l6YXJkIGZvciBzZWxlY3RpbmcgYSBuZXcgcGFyYW1ldGVyIGVzdGltYXRvcgorCSAqLworCQorCXN0YXRpYyBQYXJhbWV0ZXJFc3RpbWF0b3JXaXphcmQgcGFyYW1ldGVyRXN0aW1hdG9yV2l6YXJkOworCQorCS8qKgorCSAqIFRoZSBkaWFsb2cgZm9yIHRoZSB3aXphcmQKKwkgKi8KKwlzdGF0aWMgV2l6YXJkRGlhbG9nIHdpemFyZERpYWxvZzsJCisJcHJvdGVjdGVkIHN0YXRpYyBTY2VuYXJpb0FuYWx5c2lzU3VpdGUgYW5hbHl6ZXI7CisJCisJLy9Qcm9wZXJ0eVNlbGVjdG9yIHByb3BlcnR5U2VsZWN0b3I7CisJLy9MaXN0PEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I+IHNlbGVjdGVkUHJvcGVydGllczsKKworCS8qKgorCSAqIAorCSAqIEBwYXJhbSBwYXJlbnQKKwkgKi8KKwlwdWJsaWMgRXN0aW1hdG9yQ29udHJvbChmaW5hbCBDb21wb3NpdGUgcGFyZW50KSB7CisJCXN1cGVyKHBhcmVudCwgU1dULk5vbmUpOworCQljcmVhdGVDb250ZW50cygpOworCX0gLy8gRXN0aW1hdG9yQ29udHJvbAorCisJLyoqCisJICogQ3JlYXRlIHRoZSBjb250ZW50cyBvZiB0aGUgcGxvdHRlcgorCSAqLworCXZvaWQgY3JlYXRlQ29udGVudHMoKSB7CisJCQorCQlhbmFseXplciA9IG5ldyBTY2VuYXJpb0FuYWx5c2lzU3VpdGUodGhpcyk7CisJCQorCQlzZXRMYXlvdXQobmV3IEZvcm1MYXlvdXQoKSk7CisKKwkJaWRlbnRpZmlhYmxlVGl0bGUgPSBuZXcgTGFiZWwodGhpcywgU1dULk5PTkUpOworCQlpZGVudGlmaWFibGVUaXRsZS5zZXRUZXh0KE1lc3NhZ2VzLmdldFN0cmluZygiRVNULlRJVExFIikpOworCQkKKwkJaWRlbnRpZmlhYmxlVGl0bGUuc2V0Rm9udChnZXRMYXJnZXJGb250KDE4LCBnZXREaXNwbGF5KCkpKTsKKwkJCisJCQkKKwkJc3RhdHVzTGFiZWwgPSBuZXcgTGFiZWwodGhpcywgU1dULkJPUkRFUik7CisJCXN0YXR1c0xhYmVsLnNldFRleHQoIiIpOworCQkKKwkJc2NlbmFyaW9Gb2xkZXJMYWJlbCA9IG5ldyBMYWJlbCh0aGlzLCBTV1QuQk9SREVSKTsKKwkJc2NlbmFyaW9Gb2xkZXJMYWJlbC5zZXRUZXh0KE1lc3NhZ2VzLmdldFN0cmluZygiRVNULlNDRk9MREVSIikpOworCQkKKwkJZXN0aW1hdG9yRm9sZGVyTGFiZWwgPSBuZXcgTGFiZWwodGhpcywgU1dULkJPUkRFUik7CisJCWVzdGltYXRvckZvbGRlckxhYmVsLnNldFRleHQoTWVzc2FnZXMuZ2V0U3RyaW5nKCJFU1QuUEFSQU1FU1RJTUFUT1IiKSk7CisJCQorCQl0ZXh0MSA9IG5ldyBUZXh0KHRoaXMsIFNXVC5CT1JERVIpOworCSAgICB0ZXh0MS5zZXRCb3VuZHMoMTAsIDEwLCAxMDAsIDIwKTsKKwkgICAgCisJICAgIHJlY2VudEZvbGRlciA9IHByZWZzLmdldFJlY2VudEZvbGRlcihDT05TVU1FUik7CisJICAgIGlmKHJlY2VudEZvbGRlcj09IG51bGwpIHsKKwkgICAgCXJlY2VudEZvbGRlciA9IFNjZW5hcmlvQW5hbHlzaXNTdWl0ZS5SRUZFUkVOQ0VfVEVTVElOR19ESVJFQ1RPUlk7CisJICAgIH0KKwkgICAgdGV4dDEuc2V0VGV4dChyZWNlbnRGb2xkZXIpOworCQkgIAorCSAgICBTdHJpbmcgZXN0aW1hdG9yTWV0aG9kID0gcHJlZnMuZ2V0UmVjZW50RXN0aW1hdG9yTWV0aG9kKCk7CisJICAgIGVzdGltYXRvclRleHQgPSBuZXcgVGV4dCh0aGlzLCBTV1QuQk9SREVSKTsKKwkgICAgZXN0aW1hdG9yVGV4dC5zZXRCb3VuZHMoMTAsIDEwLCAxMDAsIDIwKTsKKwkgICAgaWYoZXN0aW1hdG9yTWV0aG9kICE9IG51bGwpIGVzdGltYXRvclRleHQuc2V0VGV4dChlc3RpbWF0b3JNZXRob2QpOworCSAgICBlbHNlIGVzdGltYXRvclRleHQuc2V0VGV4dCgiIik7CisJICAgIAorCSAgICBzZWxlY3RFc3RpbWF0b3JCdXR0b24gPSBuZXcgQnV0dG9uKHRoaXMsIFNXVC5OT05FKTsKKwkgICAgc2VsZWN0RXN0aW1hdG9yQnV0dG9uLnNldFRleHQoTWVzc2FnZXMuZ2V0U3RyaW5nKCJFU1QuU0VMRUNURVNUSU1BVE9SIikpOworCSAgICAKKwkgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisJICAgIC8vCisJICAgIC8vICBjb21wb25lbnRzIGZvciB1c2VyIGludGVyYWN0aW9uIHdpdGggZml0dGluZyBhbGdvcml0aG0KKwkgICAgLy8KKwkgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKwkgICAgQ29tcG9zaXRlIGRpc3BsYXlDb21wb3NpdGUgPSBnZXRSZWdpb25TZWxlY3RvckNvbWJvQ29tcG9zaXRlKHRoaXMpOworCSAgICBDb21wb3NpdGUgcmFkaW9Db21wb3NpdGUgPSBnZXREYXRhQXZnUmFkaW9CdXR0b25zQ29tcG9zaXRlKHRoaXMpOworCSAgICBDb21wb3NpdGUgc3Bpbm5lckNvbXBvc2l0ZSA9IGdldFNwaW5uZXJDb21wb3NpdGUodGhpcyk7CisJICAgIENvbXBvc2l0ZSBiZXRhTW9kZUNvbXBvc2l0ZSA9IGdldGJldGFNb2RlUmFkaW9CdXR0b25zQ29tcG9zaXRlKHRoaXMpOworCSAgICBDb21wb3NpdGUgZG9Fc3RpbWF0aW9uQ29tcG9zaXRlID0gZ2V0QW5hbHl6ZUJ1dHRvbkNvbXBvc2l0ZSh0aGlzLE1lc3NhZ2VzLmdldFN0cmluZygiRVNULkVTVElNQVRFIikpOworCQkKKwkJCisJCXRhYkZvbGRlciA9IG5ldyBUYWJGb2xkZXIgKHRoaXMsIFNXVC5OT05FKTsKKwkJLy8gcmVzdWx0cwkKKwkJVGFiSXRlbSBpdGVtMCA9IG5ldyBUYWJJdGVtKHRhYkZvbGRlciwgU1dULkJPUkRFUik7CisJCWl0ZW0wLnNldFRleHQoTWVzc2FnZXMuZ2V0U3RyaW5nKCJFU1QuUkVTVUxUUyIpKTsKKwkJZXN0aW1hdG9yQ2FudmFzID0gbmV3IEVzdGltYXRvckNhbnZhcyh0YWJGb2xkZXIpOworCQlpdGVtMC5zZXRDb250cm9sKGVzdGltYXRvckNhbnZhcyk7CisJCQorCQkvLyBkYXRhCisJCVRhYkl0ZW0gaXRlbTEgPSBuZXcgVGFiSXRlbSAodGFiRm9sZGVyLCBTV1QuTlVMTCk7CisJCWl0ZW0xLnNldFRleHQgKE1lc3NhZ2VzLmdldFN0cmluZygiRVNULklOUFVUREFUQSIpKTsKKwkJQ29tcG9zaXRlIGRhdGFDb21wb3NpdGUgPSBuZXcgQ29tcG9zaXRlKHRhYkZvbGRlciwgU1dULkJPUkRFUik7CisgICAgCUdyaWRMYXlvdXQgZ3JpZExheW91dCA9IG5ldyBHcmlkTGF5b3V0KCk7CisJCWdyaWRMYXlvdXQubnVtQ29sdW1ucyA9IDI7CisgCQlkYXRhQ29tcG9zaXRlLnNldExheW91dChuZXcgRm9ybUxheW91dCgpKTsKKyAJCWl0ZW0xLnNldENvbnRyb2woZGF0YUNvbXBvc2l0ZSk7CisgCQkvLyBzZXQgdXAgdGhlIGZvdXIgZGF0YSB0aW1lIHNlcmllcyBpbnNpZGUgdGhlIGRhdGFDb21wb3NpdGUKKyAJCWdldEVxdWF0aW9uU2VyaWVzQ2hhcnRzKGRhdGFDb21wb3NpdGUpOyAKKyAJCQorCQkvLyByZWdyZXNzaW9uIENoYXJ0cyBnbyAqKiogaGVyZSAqKioKKwkJVGFiSXRlbSBpdGVtMiA9IG5ldyBUYWJJdGVtICh0YWJGb2xkZXIsIFNXVC5OVUxMKTsKKwkJaXRlbTIuc2V0VGV4dCAoTWVzc2FnZXMuZ2V0U3RyaW5nKCJFU1QuUkVHUkVTU0lPTiIpKTsKKwkJQ29tcG9zaXRlIHJlZ3Jlc3Npb25Db21wb3NpdGUgPSBuZXcgQ29tcG9zaXRlKHRhYkZvbGRlciwgU1dULkJPUkRFUik7CisgICAgCXJlZ3Jlc3Npb25Db21wb3NpdGUuc2V0TGF5b3V0KG5ldyBGb3JtTGF5b3V0KCkpOworIAkJaXRlbTIuc2V0Q29udHJvbChyZWdyZXNzaW9uQ29tcG9zaXRlKTsKKyAJICAgIC8vIHNldCB1cCB0aGUgZm91ciByZWdyZXNzaW9uIFhZIHNlcmllcyBwbG90cyBpbnNpZGUgdGhlIGRhdGFDb21wb3NpdGUKKyAJCWdldFJlZ3Jlc3Npb25TZXJpZXNDaGFydHMocmVncmVzc2lvbkNvbXBvc2l0ZSk7IAorCQkKKwkJCisJCS8vIEZPcm0gZGF0YQorIAkJaW50IHNwYWNlciA9IDU7CisgCQlpbnQgYnV0dG9uc3BhY2VyID0gMDsKKyAJCQorCQlmaW5hbCBGb3JtRGF0YSB0aXRsZUZvcm1EYXRhID0gbmV3IEZvcm1EYXRhKCk7CisJCWlkZW50aWZpYWJsZVRpdGxlLnNldExheW91dERhdGEodGl0bGVGb3JtRGF0YSk7CisJCXRpdGxlRm9ybURhdGEudG9wID0gbmV3IEZvcm1BdHRhY2htZW50KDAsIDApOworCQl0aXRsZUZvcm1EYXRhLmxlZnQgPSBuZXcgRm9ybUF0dGFjaG1lbnQoMCwgMCk7CisJCXRpdGxlRm9ybURhdGEucmlnaHQgPSBuZXcgRm9ybUF0dGFjaG1lbnQoMTAwLCAwKTsKKworCQkvLyBUZXh0RmllbGQgZm9sZGVyIGxhYmVsCisJCWZpbmFsIEZvcm1EYXRhIHNjZW5hcmlvRm9sZGVyTGFiZWxGb3JtRGF0YSA9IG5ldyBGb3JtRGF0YSgpOworCQlzY2VuYXJpb0ZvbGRlckxhYmVsRm9ybURhdGEudG9wID0gbmV3IEZvcm1BdHRhY2htZW50KGlkZW50aWZpYWJsZVRpdGxlLCBzcGFjZXIpOworCQlzY2VuYXJpb0ZvbGRlckxhYmVsRm9ybURhdGEubGVmdCA9IG5ldyBGb3JtQXR0YWNobWVudCgwLCAwKTsKKwkJc2NlbmFyaW9Gb2xkZXJMYWJlbEZvcm1EYXRhLnJpZ2h0ID0gbmV3IEZvcm1BdHRhY2htZW50KDE1LCAwKTsKKwkJc2NlbmFyaW9Gb2xkZXJMYWJlbC5zZXRMYXlvdXREYXRhKHNjZW5hcmlvRm9sZGVyTGFiZWxGb3JtRGF0YSk7CisJCQorCQkKKwkJLy8gZmlyc3QgdGV4dCBmaWVsZCBmb3IgcGFyYW1ldGVyIEVzdGltYXRvcgorCQlmaW5hbCBGb3JtRGF0YSB0ZXh0MUZvcm1EYXRhID0gbmV3IEZvcm1EYXRhKCk7CisJCXRleHQxRm9ybURhdGEudG9wID0gbmV3IEZvcm1BdHRhY2htZW50KGlkZW50aWZpYWJsZVRpdGxlLCBzcGFjZXIpOworCQl0ZXh0MUZvcm1EYXRhLmxlZnQgPSBuZXcgRm9ybUF0dGFjaG1lbnQoc2NlbmFyaW9Gb2xkZXJMYWJlbCwgNSk7CisJCXRleHQxRm9ybURhdGEucmlnaHQgPSBuZXcgRm9ybUF0dGFjaG1lbnQoODUsIDApOworCQl0ZXh0MS5zZXRMYXlvdXREYXRhKHRleHQxRm9ybURhdGEpOworCQl0ZXh0MS5zZXRFZGl0YWJsZShmYWxzZSk7IC8vIENhbiBvbmx5IGJlIHNlbGVjdGVkIHRocm91Z2ggd2l6YXJkCisJCQkKKwkJZmluYWwgRm9ybURhdGEgc2VsZWN0RXN0aW1hdG9yQnV0dG9uRm9ybURhdGEgPSBuZXcgRm9ybURhdGEoKTsJCQorCQlzZWxlY3RFc3RpbWF0b3JCdXR0b25Gb3JtRGF0YS50b3AgPSBuZXcgRm9ybUF0dGFjaG1lbnQoaWRlbnRpZmlhYmxlVGl0bGUsIGJ1dHRvbnNwYWNlcik7CisJCXNlbGVjdEVzdGltYXRvckJ1dHRvbkZvcm1EYXRhLmxlZnQgPSBuZXcgRm9ybUF0dGFjaG1lbnQodGV4dDEsIDUpOworCQlzZWxlY3RFc3RpbWF0b3JCdXR0b24uc2V0TGF5b3V0RGF0YShzZWxlY3RFc3RpbWF0b3JCdXR0b25Gb3JtRGF0YSk7CisKKwkJZmluYWwgRm9ybURhdGEgZXN0aW1hdG9yTGFiZWxGb3JtRGF0YSA9IG5ldyBGb3JtRGF0YSgpOworCQllc3RpbWF0b3JMYWJlbEZvcm1EYXRhLnRvcCA9IG5ldyBGb3JtQXR0YWNobWVudChzY2VuYXJpb0ZvbGRlckxhYmVsLCBzcGFjZXIpOworCQllc3RpbWF0b3JMYWJlbEZvcm1EYXRhLmxlZnQgPSBuZXcgRm9ybUF0dGFjaG1lbnQoMCwgMCk7CisJCWVzdGltYXRvckxhYmVsRm9ybURhdGEucmlnaHQgPSBuZXcgRm9ybUF0dGFjaG1lbnQoMTUsIDApOworCQllc3RpbWF0b3JGb2xkZXJMYWJlbC5zZXRMYXlvdXREYXRhKGVzdGltYXRvckxhYmVsRm9ybURhdGEpOworCQkKKwkJCisJCS8vIGZpcnN0IHRleHQgZmllbGQgZm9yIHBhcmFtZXRlciBFc3RpbWF0b3IKKwkJZmluYWwgRm9ybURhdGEgZXN0aW1hdG9yVGV4dEZvcm1EYXRhID0gbmV3IEZvcm1EYXRhKCk7CisJCWVzdGltYXRvclRleHRGb3JtRGF0YS50b3AgPSBuZXcgRm9ybUF0dGFjaG1lbnQoc2NlbmFyaW9Gb2xkZXJMYWJlbCwgc3BhY2VyKTsKKwkJZXN0aW1hdG9yVGV4dEZvcm1EYXRhLmxlZnQgPSBuZXcgRm9ybUF0dGFjaG1lbnQoc2NlbmFyaW9Gb2xkZXJMYWJlbCwgNSk7CisJCWVzdGltYXRvclRleHRGb3JtRGF0YS5yaWdodCA9IG5ldyBGb3JtQXR0YWNobWVudCg4NSwgMCk7CisJCWVzdGltYXRvclRleHQuc2V0TGF5b3V0RGF0YShlc3RpbWF0b3JUZXh0Rm9ybURhdGEpOworCQllc3RpbWF0b3JUZXh0LnNldEVkaXRhYmxlKGZhbHNlKTsgLy8gQ2FuIG9ubHkgYmUgc2VsZWN0ZWQgdGhyb3VnaCB3aXphcmQKKwkJCisJCQorCQkvLyBEaXNwbGF5IHJlZ2lvblNlbGVjdG9yQ29tYm8KKwkJZmluYWwgRm9ybURhdGEgZGlzcGxheUNvbWJvQ29tcG9zaXRlRm9ybURhdGEgPSBuZXcgRm9ybURhdGEoKTsKKwkJZGlzcGxheUNvbWJvQ29tcG9zaXRlRm9ybURhdGEudG9wID0gbmV3IEZvcm1BdHRhY2htZW50KGVzdGltYXRvclRleHQsIHNwYWNlcik7CisJCWRpc3BsYXlDb21ib0NvbXBvc2l0ZUZvcm1EYXRhLmxlZnQgPSBuZXcgRm9ybUF0dGFjaG1lbnQoMCwwKTsKKwkJZGlzcGxheUNvbWJvQ29tcG9zaXRlRm9ybURhdGEucmlnaHQgPSBuZXcgRm9ybUF0dGFjaG1lbnQoMjQsIDApOworCQlkaXNwbGF5Q29tcG9zaXRlLnNldExheW91dERhdGEoZGlzcGxheUNvbWJvQ29tcG9zaXRlRm9ybURhdGEpOworCQkKKwkJCisJCS8vIGJldGEgbW9kZSBDb21wb3NpdGUKKwkJZmluYWwgRm9ybURhdGEgYmV0YU1vZGVSYWRpb0NvbXBvc2l0ZUZvcm1EYXRhID0gbmV3IEZvcm1EYXRhKCk7CisJCWJldGFNb2RlUmFkaW9Db21wb3NpdGVGb3JtRGF0YS50b3AgPSBuZXcgRm9ybUF0dGFjaG1lbnQoZXN0aW1hdG9yVGV4dCwgc3BhY2VyKTsKKwkJYmV0YU1vZGVSYWRpb0NvbXBvc2l0ZUZvcm1EYXRhLmxlZnQgPSBuZXcgRm9ybUF0dGFjaG1lbnQoMjUsMCk7CisJCWJldGFNb2RlUmFkaW9Db21wb3NpdGVGb3JtRGF0YS5yaWdodCA9IG5ldyBGb3JtQXR0YWNobWVudCgzOSwgMCk7CisJCWJldGFNb2RlQ29tcG9zaXRlLnNldExheW91dERhdGEoYmV0YU1vZGVSYWRpb0NvbXBvc2l0ZUZvcm1EYXRhKTsKKwkJCisJCS8vIHJhZGlvIGJ1dHRvbnMgQ29tcG9zaXRlCisJCWZpbmFsIEZvcm1EYXRhIHJhZGlvQ29tcG9zaXRlRm9ybURhdGEgPSBuZXcgRm9ybURhdGEoKTsKKwkJcmFkaW9Db21wb3NpdGVGb3JtRGF0YS50b3AgPSBuZXcgRm9ybUF0dGFjaG1lbnQoZXN0aW1hdG9yVGV4dCwgc3BhY2VyKTsKKwkJcmFkaW9Db21wb3NpdGVGb3JtRGF0YS5ib3R0b20gPSBuZXcgRm9ybUF0dGFjaG1lbnQoZG9Fc3RpbWF0aW9uQ29tcG9zaXRlLCAtNSk7CisJCXJhZGlvQ29tcG9zaXRlRm9ybURhdGEubGVmdCA9IG5ldyBGb3JtQXR0YWNobWVudCg0MCwgMCk7CisJCXJhZGlvQ29tcG9zaXRlRm9ybURhdGEucmlnaHQgPSBuZXcgRm9ybUF0dGFjaG1lbnQoNjEsMCk7CisJCXJhZGlvQ29tcG9zaXRlLnNldExheW91dERhdGEocmFkaW9Db21wb3NpdGVGb3JtRGF0YSk7CisJCQorCQkvLyBTcGlubmVyIENvbXBvc2l0ZSAKKwkJZmluYWwgRm9ybURhdGEgc3Bpbm5lckZvcm1EYXRhID0gbmV3IEZvcm1EYXRhKCk7CisJCXNwaW5uZXJGb3JtRGF0YS50b3AgPSBuZXcgRm9ybUF0dGFjaG1lbnQoZXN0aW1hdG9yVGV4dCwgc3BhY2VyKTsKKwkJc3Bpbm5lckZvcm1EYXRhLmJvdHRvbSA9IG5ldyBGb3JtQXR0YWNobWVudChkb0VzdGltYXRpb25Db21wb3NpdGUsIC01KTsKKwkJc3Bpbm5lckZvcm1EYXRhLmxlZnQgPSBuZXcgRm9ybUF0dGFjaG1lbnQoNjIsIDApOworCQlzcGlubmVyRm9ybURhdGEucmlnaHQgPSBuZXcgRm9ybUF0dGFjaG1lbnQoMTAwLCAwKTsKKwkJc3Bpbm5lckNvbXBvc2l0ZS5zZXRMYXlvdXREYXRhKHNwaW5uZXJGb3JtRGF0YSk7CisJCQorCQkvL3RvcCA9IGJvdHRvbTsKKwkJCisJCQorCQkvLyBBbmFseXplIGJ1dHRvbgorCisJCWZpbmFsIEZvcm1EYXRhIGFuYWx5c2lzQnV0dG9uRm9ybURhdGEgPSBuZXcgRm9ybURhdGEoKTsKKwkJYW5hbHlzaXNCdXR0b25Gb3JtRGF0YS50b3AgPSBuZXcgRm9ybUF0dGFjaG1lbnQoZXN0aW1hdG9yRm9sZGVyTGFiZWwsIDE4KnNwYWNlcik7CisJCWFuYWx5c2lzQnV0dG9uRm9ybURhdGEubGVmdCA9IG5ldyBGb3JtQXR0YWNobWVudCgwLCAwKTsKKwkJYW5hbHlzaXNCdXR0b25Gb3JtRGF0YS5yaWdodCA9IG5ldyBGb3JtQXR0YWNobWVudCgxMDAsIDApOworCQlkb0VzdGltYXRpb25Db21wb3NpdGUuc2V0TGF5b3V0RGF0YShhbmFseXNpc0J1dHRvbkZvcm1EYXRhKTsKKwkJaWYocmVjZW50Rm9sZGVyICE9IG51bGwgJiYgZXN0aW1hdG9yTWV0aG9kICE9IG51bGwpCisJCQlhbmFseXplQnV0dG9uLnNldEVuYWJsZWQodHJ1ZSk7CisJCWVsc2UgYW5hbHl6ZUJ1dHRvbi5zZXRFbmFibGVkKGZhbHNlKTsKKwkJCisJCQorCQlmaW5hbCBGb3JtRGF0YSB0YWJGb3JtRGF0YSA9IG5ldyBGb3JtRGF0YSgpOworCQl0YWJGb2xkZXIuc2V0TGF5b3V0RGF0YSh0YWJGb3JtRGF0YSk7CisJCXRhYkZvcm1EYXRhLnRvcCA9IG5ldyBGb3JtQXR0YWNobWVudChkb0VzdGltYXRpb25Db21wb3NpdGUsIDApOworCQl0YWJGb3JtRGF0YS5ib3R0b20gPSBuZXcgRm9ybUF0dGFjaG1lbnQoMTAwLCAwKTsKKwkJdGFiRm9ybURhdGEubGVmdCA9IG5ldyBGb3JtQXR0YWNobWVudCgwLCAwKTsKKwkJdGFiRm9ybURhdGEucmlnaHQgPSBuZXcgRm9ybUF0dGFjaG1lbnQoMTAwLCAwKTsKKwkJCisJCWZpbmFsIFNoZWxsIHNoZWxsID0gdGhpcy5nZXRTaGVsbCgpOworCQlmaW5hbCBFc3RpbWF0b3JDb250cm9sIGVDb250cm9sID0gdGhpczsKKwkJc2VsZWN0RXN0aW1hdG9yQnV0dG9uLmFkZFNlbGVjdGlvbkxpc3RlbmVyKG5ldyBTZWxlY3Rpb25BZGFwdGVyKCkgeworCQkJcHVibGljIHZvaWQgd2lkZ2V0U2VsZWN0ZWQoQFN1cHByZXNzV2FybmluZ3MoInVudXNlZCIpCisJCQkJCWZpbmFsIFNlbGVjdGlvbkV2ZW50IGUpIHsKKwkJCQlTdHJpbmcgZGlyID0gbnVsbDsKKwkJCQlpZihwYXJhbWV0ZXJFc3RpbWF0b3JXaXphcmQgIT0gbnVsbCkKKwkJCQkJZGlyID0gcGFyYW1ldGVyRXN0aW1hdG9yV2l6YXJkLnNlbGVjdEZvbGRlclBhZ2UuZ2V0RGlyTmFtZSgpOworCQkJCWVsc2UgZGlyID0gcmVjZW50Rm9sZGVyOworCQkJCQorCQkJCWlmKChkaXI9PW51bGwpfHwoZGlyLmxlbmd0aCgpPDEpKSBkaXIgPSBST09UX1BBVEg7CisJCQkJCisJCQkJcGFyYW1ldGVyRXN0aW1hdG9yV2l6YXJkID0gbmV3IFBhcmFtZXRlckVzdGltYXRvcldpemFyZChlQ29udHJvbCwgZGlyKTsKKwkJCQkKKwkJCQkvL3BhcmFtZXRlckVzdGltYXRvcldpemFyZC5pbml0KHNlbGVjdEVzdGltYXRvckJ1dHRvbi4pOworCQkJICAgIC8vdGhpcy4KKwkJCQkvLyBJbnN0YW50aWF0ZXMgdGhlIHdpemFyZCBjb250YWluZXIgd2l0aCB0aGUgd2l6YXJkIGFuZCBvcGVucyBpdAorCQkJCXdpemFyZERpYWxvZyA9IG5ldyBXaXphcmREaWFsb2coc2hlbGwsIHBhcmFtZXRlckVzdGltYXRvcldpemFyZCk7CisJCQkJd2l6YXJkRGlhbG9nLmNyZWF0ZSgpOworCQkJCWVDb250cm9sLmFuYWx5emVCdXR0b24uc2V0RW5hYmxlZChmYWxzZSk7CisJCQkJRXN0aW1hdG9yQ29udHJvbC5lc3RpbWF0b3JUZXh0LnNldFRleHQoIiIpOworCQkJICAgIHdpemFyZERpYWxvZy5vcGVuKCk7CQkJCQorCQkJfQorCQl9KTsKKwkJZmluYWwgUHJvZ3Jlc3NNb25pdG9yRGlhbG9nIHByb2dyZXNzRGlhbG9nID0gbmV3IFByb2dyZXNzTW9uaXRvckRpYWxvZyh0aGlzLmdldFNoZWxsKCkpOworCQkKKwkJYW5hbHl6ZUJ1dHRvbi5hZGRTZWxlY3Rpb25MaXN0ZW5lcihuZXcgU2VsZWN0aW9uQWRhcHRlcigpIHsKKwkJCUBPdmVycmlkZQorCQkJcHVibGljIHZvaWQgd2lkZ2V0U2VsZWN0ZWQoQFN1cHByZXNzV2FybmluZ3MoInVudXNlZCIpCisJCQlmaW5hbCBTZWxlY3Rpb25FdmVudCBlKSB7CisKKwkJCQlyZWNlbnRGb2xkZXIgPSB0ZXh0MS5nZXRUZXh0KCk7CisJCQkJU3RyaW5nIG1ldGhvZHR4dCA9IGVzdGltYXRvclRleHQuZ2V0VGV4dCgpOworCQkJCWlkZW50aWZpYWJsZVRpdGxlLnNldFRleHQoTWVzc2FnZXMuZ2V0U3RyaW5nKCJFU1QuVElUTEUiKSk7CisJCQkJCisJCQkJLyoKKwkJCQkgKiBWQUxJREFURSB0aGUgdGV4dCBpbnB1dCBGaWVsZHMKKwkJCQkgKi8KKwkJCQlpZighYW5hbHl6ZXIudmFsaWRhdGUocmVjZW50Rm9sZGVyKSkgeworCQkJCQlpZGVudGlmaWFibGVUaXRsZS5zZXRUZXh0KFNjZW5hcmlvQW5hbHlzaXNTdWl0ZS5OT1RfRk9VTkRfTVNHKTsKKwkJCQkJdGV4dDEuc2V0VGV4dCgiIik7CisJCQkJCXJldHVybjsKKwkJCQl9IAorCQkJCS8vIGVsc2UgdmFsaWQgc28gcmVtZW1iZXIgdGhlIHByZWZlcmVuY2VzCisJCQkJcHJlZnMuc2V0UmVjZW50Rm9sZGVyKENPTlNVTUVSLHJlY2VudEZvbGRlcik7CisJCQkJcHJlZnMuc2V0RXN0aW1hdG9yTWV0aG9kKG1ldGhvZHR4dCk7CisJCQkJCisJCQkJUmVmZXJlbmNlU2NlbmFyaW9EYXRhTWFwSW1wbCBkYXRhTWFwOworCQkJCVBhcmFtZXRlckVzdGltYXRvck1ldGhvZCBtZXRob2Q7CisJCQkKKwkJCQlpZihwYXJhbWV0ZXJFc3RpbWF0b3JXaXphcmQgIT0gbnVsbCkgeworCQkJCQlkYXRhTWFwID0gcGFyYW1ldGVyRXN0aW1hdG9yV2l6YXJkLmdldFJlZmVyZW5jZVNjZW5hcmlvRGF0YU1hcCgpOworCQkJCQltZXRob2QgPSBwYXJhbWV0ZXJFc3RpbWF0b3JXaXphcmQuZ2V0UGFyYW1ldGVyRXN0aW1hdG9yTWV0aG9kKCk7CisJCQkJfSBlbHNlIHsKKwkJCQkJLy8gV2UgaGF2ZW4ndCBnb25lIHRocm91Z2ggdGhlIHdpemFyZCBhbmQgbG9hZGVkIGRhdGEgeWV0LCBidXQKKwkJCQkJLy8gYXNzdW1pbmcgdGhlIGZvbGRlciBhbmQgdGhlIG1ldGhvZCBpcyBzZXQgd2UgY2FuIGxvYWQgdGhlIGRhdGEgaGVyZQorCQkJCQl0cnkgeworCQkJCQkJQ1NWc2NlbmFyaW9Mb2FkZXIgbG9hZGVyID0gbmV3IENTVnNjZW5hcmlvTG9hZGVyKHJlY2VudEZvbGRlcik7CisJCQkJCQkvLyBQaWNrIHRoZSBoaWdoZXN0IHJlc29sdXRpb24gYXZhaWxhYmxlCisJCQkJCQlpbnQgbWF4UmVzb2x1dGlvbiA9IGxvYWRlci5nZXRNYXhSZXNvbHV0aW9uKCk7CisJCQkJCQlkYXRhTWFwID0gbG9hZGVyLnBhcnNlQWxsRmlsZXMobWF4UmVzb2x1dGlvbik7CisJCQkJCQltZXRob2QgPSBQYXJhbWV0ZXJFc3RpbWF0b3JNZXRob2QudmFsdWVPZihtZXRob2R0eHQpOworCQkJCQl9IGNhdGNoKEV4Y2VwdGlvbiBleCkgeworCQkJCQkJQWN0aXZhdG9yLmxvZ0Vycm9yKGV4LmdldE1lc3NhZ2UoKSwgZXgpOworCQkJCQkJcmV0dXJuOworCQkJCQl9CisJCQkJfQorCQkJCQorCQkJCS8vU3RyaW5nIGNvbXBhcmlzb25EaXJlY3RvcnkgPSBTY2VuYXJpb0FuYWx5c2lzU3VpdGUuQ09NUEFSSVNPTl9URVNUSU5HX0RJUkVDVE9SWTsKKwkJCQlhdmVyYWdlUGFybXMgPSBhbmFseXplci5lc3RpbWF0ZVBhcmFtZXRlcnMoCisJCQkJCQlkYXRhTWFwLAorCQkJCQkJbWV0aG9kLCAKKwkJCQkJCXByb2dyZXNzRGlhbG9nCisJCQkJCQkpOworCQkJCQorCQkJCVN0cmluZ1tdIGRpc3BsYXlhYmxlUmVnaW9ucyA9IGF2ZXJhZ2VQYXJtcy5nZXREYXRhTG9jYXRpb25zKCk7CisJCQkJCisJCQkJZGlzcGxheVJlZ2lvbkNvbWJvLnNldEl0ZW1zIChkaXNwbGF5YWJsZVJlZ2lvbnMpOworCQkJCWRpc3BsYXlSZWdpb25Db21iby5zZWxlY3QoMCk7CisJCQkJcmVnaW9uVG9EaXNwbGF5ID0gZGlzcGxheWFibGVSZWdpb25zWzBdOworCQkJCQkJCisJCQkJCisJCQkKKwkJCQl1cGRhdGVDaGFydHMoKTsKKwkJCQorCQkJfQorCQl9KTsKKwkJCisJCQorCQltYXhUaHJlc2hvbGRTcGlubmVyUy5hZGRTZWxlY3Rpb25MaXN0ZW5lcihuZXcgU2VsZWN0aW9uQWRhcHRlcigpIHsKKwkJICAgICAgcHVibGljIHZvaWQgd2lkZ2V0U2VsZWN0ZWQoQFN1cHByZXNzV2FybmluZ3MoInVudXNlZCIpIFNlbGVjdGlvbkV2ZW50IGUpIHsKKwkJICAgICAgICBpbnQgbWF4ID0gbWF4VGhyZXNob2xkU3Bpbm5lclMuZ2V0U2VsZWN0aW9uKCk7CisJCSAgICAgICAgaW50IG1pbiA9IG1pblRocmVzaG9sZFNwaW5uZXJTLmdldFNlbGVjdGlvbigpOworCQkgICAgICAgIGludCBtaW5UaHJlc2ggPSBtYXgtU1BJTk5FUl9JTkNSRU1FTlQ7CisJCSAgICAgICAgaW50IG1heFRocmVzaCA9IG1pbitTUElOTkVSX0lOQ1JFTUVOVDsKKwkJICAgICAgIAorCQkgICAgICAgIG1heFRocmVzaG9sZFNwaW5uZXJTLnNldE1pbmltdW0obWF4VGhyZXNoKTsKKwkJICAgICAgICBtaW5UaHJlc2hvbGRTcGlubmVyUy5zZXRNYXhpbXVtKG1pblRocmVzaCk7ICAKKwkJICAgICAgfQorCQkgICAgfSk7Ly8gbWF4VGhyZXNob2xkU3Bpbm5lclMKKwkJCisJCW1pblRocmVzaG9sZFNwaW5uZXJTLmFkZFNlbGVjdGlvbkxpc3RlbmVyKG5ldyBTZWxlY3Rpb25BZGFwdGVyKCkgeworCQkgICAgICBwdWJsaWMgdm9pZCB3aWRnZXRTZWxlY3RlZChAU3VwcHJlc3NXYXJuaW5ncygidW51c2VkIikgU2VsZWN0aW9uRXZlbnQgZSkgeyAgCisJCSAgICAgICAgaW50IG1heCA9IG1heFRocmVzaG9sZFNwaW5uZXJTLmdldFNlbGVjdGlvbigpOworCQkgICAgICAgIGludCBtaW4gPSBtaW5UaHJlc2hvbGRTcGlubmVyUy5nZXRTZWxlY3Rpb24oKTsKKwkJICAgICAgICBpbnQgbWluVGhyZXNoID0gbWF4LVNQSU5ORVJfSU5DUkVNRU5UOworCQkgICAgICAgIGludCBtYXhUaHJlc2ggPSBtaW4rU1BJTk5FUl9JTkNSRU1FTlQ7CisJCSAgICAgIAorCQkgICAgICAgIG1heFRocmVzaG9sZFNwaW5uZXJTLnNldE1pbmltdW0obWF4VGhyZXNoKTsKKwkJICAgICAgICBtaW5UaHJlc2hvbGRTcGlubmVyUy5zZXRNYXhpbXVtKG1pblRocmVzaCk7ICAKKwkJICAgICAgfQorCQkgICAgfSk7Ly8gbWF4VGhyZXNob2xkU3Bpbm5lclMKKwkJCisJfSAvLyBjcmVhdGVDb250ZW50cworCQorCS8qKgorCSAqIGNyZWF0ZXMgdGhlIGRhdGFBdmVyYWdlUmFkaW9CdXR0b25zIGFuZCB0aGVpciBjb21wb3NpdGUgY29udGFpbmVyCisJICogQHBhcmFtIGNvbnRyb2wKKwkgKiBAcmV0dXJuIHRoZSBjb21wb3NpdGUKKwkgKi8KKwlDb21wb3NpdGUgZ2V0RGF0YUF2Z1JhZGlvQnV0dG9uc0NvbXBvc2l0ZShFc3RpbWF0b3JDb250cm9sIGNvbnRyb2wpIHsKKwkJQ29tcG9zaXRlIHJhZGlvQ29tcG9zaXRlID0gbmV3IENvbXBvc2l0ZShjb250cm9sLCBTV1QuQk9SREVSKTsKKwkgICAgRmlsbExheW91dCBmaWxsTGF5b3V0ID0gbmV3IEZpbGxMYXlvdXQoKTsKKwkgICAgZmlsbExheW91dC50eXBlID0gU1dULlZFUlRJQ0FMOworCSAgICByYWRpb0NvbXBvc2l0ZS5zZXRMYXlvdXQoZmlsbExheW91dCk7CisJICAgIAorCSAgICBkYXRhQXZlcmFnZVJhZGlvQnV0dG9uc1swXSA9IG5ldyBCdXR0b24ocmFkaW9Db21wb3NpdGUsIFNXVC5SQURJTyk7CisJICAgIGRhdGFBdmVyYWdlUmFkaW9CdXR0b25zWzBdLnNldFNlbGVjdGlvbih0cnVlKTsKKwkgICAgZGF0YUF2ZXJhZ2VSYWRpb0J1dHRvbnNbMF0uc2V0VGV4dChNZXNzYWdlcy5nZXRTdHJpbmcoIkVTVC5DSE9JQ0UxIikpOworCSAgICBkYXRhQXZlcmFnZVJhZGlvQnV0dG9uc1swXS5zZXRCb3VuZHMoMTAsIDUsIDc1LCAzMCk7CisKKwkgICAgZGF0YUF2ZXJhZ2VSYWRpb0J1dHRvbnNbMV0gPSBuZXcgQnV0dG9uKHJhZGlvQ29tcG9zaXRlLCBTV1QuUkFESU8pOworCSAgICBkYXRhQXZlcmFnZVJhZGlvQnV0dG9uc1sxXS5zZXRUZXh0KE1lc3NhZ2VzLmdldFN0cmluZygiRVNULkNIT0lDRTIiKSk7CisJICAgIGRhdGFBdmVyYWdlUmFkaW9CdXR0b25zWzFdLnNldEJvdW5kcygxMCwgMzAsIDc1LCAzMCk7CisJICAgIAkgICAgCisJICAgIHJldHVybiByYWRpb0NvbXBvc2l0ZTsKKwl9Ly9nZXREYXRhQXZnUmFkaW9CdXR0b25zQ29tcG9zaXRlCisJCisKKwkvKioKKwkgKiBjcmVhdGVzIHRoZSBiZXRhTW9kZVJhZGlvQnV0dG9ucyBhbmQgdGhlaXIgY29tcG9zaXRlIGNvbnRhaW5lcgorCSAqIEBwYXJhbSBjb250cm9sCisJICogQHJldHVybiB0aGUgY29tcG9zaXRlCisJICovCisJQ29tcG9zaXRlIGdldGJldGFNb2RlUmFkaW9CdXR0b25zQ29tcG9zaXRlKEVzdGltYXRvckNvbnRyb2wgY29udHJvbCkgeworCQlDb21wb3NpdGUgcmFkaW9Db21wb3NpdGUgPSBuZXcgQ29tcG9zaXRlKGNvbnRyb2wsIFNXVC5CT1JERVIpOworCSAgICBGaWxsTGF5b3V0IGZpbGxMYXlvdXQgPSBuZXcgRmlsbExheW91dCgpOworCSAgICBmaWxsTGF5b3V0LnR5cGUgPSBTV1QuVkVSVElDQUw7CisJICAgIHJhZGlvQ29tcG9zaXRlLnNldExheW91dChmaWxsTGF5b3V0KTsKKwkgICAgCisJICAgIGJldGFNb2RlUmFkaW9CdXR0b25zWzBdID0gbmV3IEJ1dHRvbihyYWRpb0NvbXBvc2l0ZSwgU1dULlJBRElPKTsKKwkgICAgYmV0YU1vZGVSYWRpb0J1dHRvbnNbMF0uc2V0U2VsZWN0aW9uKHRydWUpOworCSAgICBiZXRhTW9kZVJhZGlvQnV0dG9uc1swXS5zZXRUZXh0KE1lc3NhZ2VzLmdldFN0cmluZygiRVNULkZSRVFCRVRBIikpOworCSAgICBiZXRhTW9kZVJhZGlvQnV0dG9uc1swXS5zZXRCb3VuZHMoMTAsIDUsIDc1LCAzMCk7CisKKwkgICAgYmV0YU1vZGVSYWRpb0J1dHRvbnNbMV0gPSBuZXcgQnV0dG9uKHJhZGlvQ29tcG9zaXRlLCBTV1QuUkFESU8pOworCSAgICBiZXRhTW9kZVJhZGlvQnV0dG9uc1sxXS5zZXRUZXh0KE1lc3NhZ2VzLmdldFN0cmluZygiRVNULkRFTlNJVFlCRVRBIikpOworCSAgICBiZXRhTW9kZVJhZGlvQnV0dG9uc1sxXS5zZXRCb3VuZHMoMTAsIDMwLCA3NSwgMzApOworCSAgICByZXR1cm4gcmFkaW9Db21wb3NpdGU7CisJfS8vZ2V0YmV0YU1vZGVSYWRpb0J1dHRvbnNDb21wb3NpdGUKKwkKKwkKKwkKKwkvKioKKwkgKiBjcmVhdGVzIHRoZSByZWdpb25TZWxlY3RvciBjb21ibyBib3ggYW5kIGl0cyBjb21wb3NpdGUgY29udGFpbmVyCisJICogQHBhcmFtIGNvbnRyb2wKKwkgKiBAcmV0dXJuIHRoZSBjb21wb3NpdGUKKwkgKi8KKwlDb21wb3NpdGUgZ2V0UmVnaW9uU2VsZWN0b3JDb21ib0NvbXBvc2l0ZShFc3RpbWF0b3JDb250cm9sIGNvbnRyb2wpIHsKKwkJQ29tcG9zaXRlIGNvbWJvQ29tcG9zaXRlID0gbmV3IENvbXBvc2l0ZShjb250cm9sLCBTV1QuQk9SREVSKTsKKwkgICAgRmlsbExheW91dCBmaWxsTGF5b3V0ID0gbmV3IEZpbGxMYXlvdXQoKTsKKwkgICAgZmlsbExheW91dC50eXBlID0gU1dULlZFUlRJQ0FMOworCSAgICBjb21ib0NvbXBvc2l0ZS5zZXRMYXlvdXQoZmlsbExheW91dCk7CisJICAgIAorCQlkaXNwbGF5UmVnaW9uQ29tYm8gPSBuZXcgQ29tYm8gKGNvbWJvQ29tcG9zaXRlLCBTV1QuUkVBRF9PTkxZKTsKKwkJZGlzcGxheVJlZ2lvbkNvbWJvLnNldEl0ZW1zIChuZXcgU3RyaW5nIFtdIHsgTWVzc2FnZXMuZ2V0U3RyaW5nKCJFU1QuQVZFUkFHRSIpIH0pOworCQlkaXNwbGF5UmVnaW9uQ29tYm8uc2V0U2l6ZSAoMjAwLCAyMDApOworCQlkaXNwbGF5UmVnaW9uQ29tYm8ucGFjaygpOworCSAgIAorCQlMYWJlbCBjb21ib0xhYmVsID0gbmV3IExhYmVsKGNvbWJvQ29tcG9zaXRlLCBTV1QuTk9ORSk7CisJICAgIGNvbWJvTGFiZWwuc2V0VGV4dChNZXNzYWdlcy5nZXRTdHJpbmcoIkVTVC5ESVNQTEFZIikpOworCSAgICAKKwkgICAgZGlzcGxheVJlZ2lvbkNvbWJvLmFkZFNlbGVjdGlvbkxpc3RlbmVyKG5ldyBTZWxlY3Rpb25BZGFwdGVyKCkgeworCSAgICAJICAgICAgcHVibGljIHZvaWQgd2lkZ2V0U2VsZWN0ZWQoQFN1cHByZXNzV2FybmluZ3MoInVudXNlZCIpIFNlbGVjdGlvbkV2ZW50IGUpIHsKKwkgICAgCSAgICAJICByZWdpb25Ub0Rpc3BsYXkgPSBkaXNwbGF5UmVnaW9uQ29tYm8uZ2V0VGV4dCgpOworCSAgICAJICAgIAkgIHVwZGF0ZUNoYXJ0cygpOworCSAgICAJICAgICAgfQorCSAgICAJICAgIH0pOworCQorCisJCQorCSAgICByZXR1cm4gY29tYm9Db21wb3NpdGU7CisJfS8vZ2V0YmV0YU1vZGVSYWRpb0J1dHRvbnNDb21wb3NpdGUKKwkKKwkKKwkvKioKKwkgKiB1cGRhdGUgdGhlIGdyYXBocworCSAqLworCXByb3RlY3RlZCBzdGF0aWMgdm9pZCB1cGRhdGVDaGFydHMoKSB7CisJCXN0YXR1c0xhYmVsLnNldFRleHQoTWVzc2FnZXMuZ2V0U3RyaW5nKCJFU1QuQ09NUExFVEUiKSk7CisJCWVzdGltYXRvckNhbnZhcy5kcmF3KGF2ZXJhZ2VQYXJtcy5nZXRQYXJhbWV0ZXJzKCkpOworCQkKKwkJaW50IG51bURhdGFDaGFydHMgPSBhbmFseXplci5nZXRFc3RpbWF0b3IoKS5nZXROdW1Qcm9wZXJ0aWVzKCk7CisJCWZvciAoaW50IGkgPSAwOyBpIDwgbnVtRGF0YUNoYXJ0czsgaSsrKSB7CisJCQkvLyB0ZWxsIHRoZSBjYW52YXMgdG8gdGhlIHRoZSBkYXRhIGZyb20gdGhpcyBjb250cm9sCisJCQkvLyB0aGUgY29udHJvbCBnZXRzIGl0IGZyb20gdGhlIGFuYWx5emVyIHdoaWNoIGdldHMgaXQgZm9ybSB0aGUKKwkJCS8vIGVzdGltYXRvcnMKKwkJCWVxdWF0aW9uU2VyaWVzW2ldLmRyYXcoKTsKKwkJCXJlZ3Jlc3Npb25TZXJpZXNbaV0uZHJhdygpOworCQl9CisJCQorCX0KKwkKKwkKKwkKKworCQorCS8qKgorCSAqIGNyZWF0ZXMgdGhlIHNwaW5uZXJzIGZvciB0aGUgbWluIGFuZCBtYXggdGhyZXNob2xkIHNldHRpbmdzIGFuZCB0aGVpciBjb21wb3NpdGUgY29udGFpbmVyCisJICogQHBhcmFtIGNvbnRyb2wKKwkgKiBAcmV0dXJuIHRoZSBjb21wb3NpdGUKKwkgKi8KKwlDb21wb3NpdGUgZ2V0U3Bpbm5lckNvbXBvc2l0ZShFc3RpbWF0b3JDb250cm9sIGNvbnRyb2wpIHsKKwkJQ29tcG9zaXRlIHNwaW5uZXJDb21wb3NpdGUgPSBuZXcgQ29tcG9zaXRlKGNvbnRyb2wsIFNXVC5CT1JERVIpOworCQlHcmlkTGF5b3V0IGdyaWRMYXlvdXQgPSBuZXcgR3JpZExheW91dCgpOworCQlncmlkTGF5b3V0Lm51bUNvbHVtbnMgPSA4OworCSAgICBzcGlubmVyQ29tcG9zaXRlLnNldExheW91dChncmlkTGF5b3V0KTsKKwkgICAgCisJICAgIC8vIG1heCBTCisJICAgIG1heFRocmVzaG9sZFNwaW5uZXJTID0gbmV3IFNwaW5uZXIoc3Bpbm5lckNvbXBvc2l0ZSwgU1dULk5PTkUpOworCSAgICBtYXhUaHJlc2hvbGRTcGlubmVyUy5zZXREaWdpdHMoMyk7IAkJLy8gYWxsb3cgMyBkZWNpbWFsIHBsYWNlcworCSAgICBtYXhUaHJlc2hvbGRTcGlubmVyUy5zZXRNaW5pbXVtKDEpOwkJLy8gc2V0IHRoZSBtaW5pbXVtIHZhbHVlIHRvIDAuMDAxCisJICAgIG1heFRocmVzaG9sZFNwaW5uZXJTLnNldE1heGltdW0oU1BJTk5FUl9SRVNPTFVUSU9OKTsJLy8gc2V0IHRoZSBtYXhpbXVtIHZhbHVlIHRvIDEuMAorCSAgICBtYXhUaHJlc2hvbGRTcGlubmVyUy5zZXRJbmNyZW1lbnQoMSk7CS8vIHNldCB0aGUgaW5jcmVtZW50IHZhbHVlIHRvIDAuMDAxCisJICAgIG1heFRocmVzaG9sZFNwaW5uZXJTLnNldFNlbGVjdGlvbig5OTApOwkvLyBzZXQgdGhlIGluaXRpYWwgdmFsdWUgMC45OTAKKwkgICAgbWF4U3Bpbm5lckxhYmVsUyA9IG5ldyBMYWJlbChzcGlubmVyQ29tcG9zaXRlLCBTV1QuTk9ORSk7CisJICAgIG1heFNwaW5uZXJMYWJlbFMuc2V0VGV4dChNZXNzYWdlcy5nZXRTdHJpbmcoIkVTVC5NQVhUSFJFU0hPTERTIikpOworCSAgICAvLyBtYXggRQorCSAgICBtYXhUaHJlc2hvbGRTcGlubmVyRSA9IG5ldyBTcGlubmVyKHNwaW5uZXJDb21wb3NpdGUsIFNXVC5OT05FKTsKKwkgICAgbWF4VGhyZXNob2xkU3Bpbm5lckUuc2V0RGlnaXRzKDMpOyAJCS8vIGFsbG93IDMgZGVjaW1hbCBwbGFjZXMKKwkgICAgbWF4VGhyZXNob2xkU3Bpbm5lckUuc2V0TWluaW11bSgxKTsJCS8vIHNldCB0aGUgbWluaW11bSB2YWx1ZSB0byAwLjAwMQorCSAgICBtYXhUaHJlc2hvbGRTcGlubmVyRS5zZXRNYXhpbXVtKFNQSU5ORVJfUkVTT0xVVElPTik7CS8vIHNldCB0aGUgbWF4aW11bSB2YWx1ZSB0byAxLjAKKwkgICAgbWF4VGhyZXNob2xkU3Bpbm5lckUuc2V0SW5jcmVtZW50KDEpOwkvLyBzZXQgdGhlIGluY3JlbWVudCB2YWx1ZSB0byAwLjAwMQorCSAgICBtYXhUaHJlc2hvbGRTcGlubmVyRS5zZXRTZWxlY3Rpb24oU1BJTk5FUl9SRVNPTFVUSU9OKTsJLy8gc2V0IHRoZSBpbml0aWFsIHZhbHVlIDAuOTkwCisJICAgIG1heFNwaW5uZXJMYWJlbEUgPSBuZXcgTGFiZWwoc3Bpbm5lckNvbXBvc2l0ZSwgU1dULk5PTkUpOworCSAgICBtYXhTcGlubmVyTGFiZWxFLnNldFRleHQoTWVzc2FnZXMuZ2V0U3RyaW5nKCJFU1QuTUFYVEhSRVNIT0xERSIpKTsKKwkgICAgLy8gbWF4IEkKKwkgICAgbWF4VGhyZXNob2xkU3Bpbm5lckkgPSBuZXcgU3Bpbm5lcihzcGlubmVyQ29tcG9zaXRlLCBTV1QuTk9ORSk7CisJICAgIG1heFRocmVzaG9sZFNwaW5uZXJJLnNldERpZ2l0cygzKTsgCQkvLyBhbGxvdyAzIGRlY2ltYWwgcGxhY2VzCisJICAgIG1heFRocmVzaG9sZFNwaW5uZXJJLnNldE1pbmltdW0oMSk7CQkvLyBzZXQgdGhlIG1pbmltdW0gdmFsdWUgdG8gMC4wMDEKKwkgICAgbWF4VGhyZXNob2xkU3Bpbm5lckkuc2V0TWF4aW11bShTUElOTkVSX1JFU09MVVRJT04pOwkvLyBzZXQgdGhlIG1heGltdW0gdmFsdWUgdG8gMS4wCisJICAgIG1heFRocmVzaG9sZFNwaW5uZXJJLnNldEluY3JlbWVudCgxKTsJLy8gc2V0IHRoZSBpbmNyZW1lbnQgdmFsdWUgdG8gMC4wMDEKKwkgICAgbWF4VGhyZXNob2xkU3Bpbm5lckkuc2V0U2VsZWN0aW9uKFNQSU5ORVJfUkVTT0xVVElPTik7CS8vIHNldCB0aGUgaW5pdGlhbCB2YWx1ZSAwLjk5MAorCSAgICBtYXhTcGlubmVyTGFiZWxJID0gbmV3IExhYmVsKHNwaW5uZXJDb21wb3NpdGUsIFNXVC5OT05FKTsKKwkgICAgbWF4U3Bpbm5lckxhYmVsSS5zZXRUZXh0KE1lc3NhZ2VzLmdldFN0cmluZygiRVNULk1BWFRIUkVTSE9MREkiKSk7CisJICAgIC8vIG1heCBSCisJICAgIG1heFRocmVzaG9sZFNwaW5uZXJSID0gbmV3IFNwaW5uZXIoc3Bpbm5lckNvbXBvc2l0ZSwgU1dULk5PTkUpOworCSAgICBtYXhUaHJlc2hvbGRTcGlubmVyUi5zZXREaWdpdHMoMyk7IAkJLy8gYWxsb3cgMyBkZWNpbWFsIHBsYWNlcworCSAgICBtYXhUaHJlc2hvbGRTcGlubmVyUi5zZXRNaW5pbXVtKDEpOwkJLy8gc2V0IHRoZSBtaW5pbXVtIHZhbHVlIHRvIDAuMDAxCisJICAgIG1heFRocmVzaG9sZFNwaW5uZXJSLnNldE1heGltdW0oU1BJTk5FUl9SRVNPTFVUSU9OKTsJLy8gc2V0IHRoZSBtYXhpbXVtIHZhbHVlIHRvIDEuMAorCSAgICBtYXhUaHJlc2hvbGRTcGlubmVyUi5zZXRJbmNyZW1lbnQoMSk7CS8vIHNldCB0aGUgaW5jcmVtZW50IHZhbHVlIHRvIDAuMDAxCisJICAgIG1heFRocmVzaG9sZFNwaW5uZXJSLnNldFNlbGVjdGlvbig5OTApOwkvLyBzZXQgdGhlIGluaXRpYWwgdmFsdWUgMC45OTAKKwkgICAgbWF4U3Bpbm5lckxhYmVsUiA9IG5ldyBMYWJlbChzcGlubmVyQ29tcG9zaXRlLCBTV1QuTk9ORSk7CisJICAgIG1heFNwaW5uZXJMYWJlbFIuc2V0VGV4dChNZXNzYWdlcy5nZXRTdHJpbmcoIkVTVC5NQVhUSFJFU0hPTERSIikpOworCSAgICAKKwkgICAgLy8gbWluIFMKKwkgICAgbWluVGhyZXNob2xkU3Bpbm5lclMgPSBuZXcgU3Bpbm5lcihzcGlubmVyQ29tcG9zaXRlLCBTV1QuTk9ORSk7CisJICAgIG1pblRocmVzaG9sZFNwaW5uZXJTLnNldERpZ2l0cygzKTsgCQkvLyBhbGxvdyAzIGRlY2ltYWwgcGxhY2VzCisJICAgIG1pblRocmVzaG9sZFNwaW5uZXJTLnNldE1pbmltdW0oMSk7CQkvLyBzZXQgdGhlIG1pbmltdW0gdmFsdWUgdG8gMC4wMDEKKwkgICAgbWluVGhyZXNob2xkU3Bpbm5lclMuc2V0TWF4aW11bShTUElOTkVSX1JFU09MVVRJT04pOwkvLyBzZXQgdGhlIG1heGltdW0gdmFsdWUgdG8gMS4wCisJICAgIG1pblRocmVzaG9sZFNwaW5uZXJTLnNldEluY3JlbWVudChTUElOTkVSX0lOQ1JFTUVOVCk7CS8vIHNldCB0aGUgaW5jcmVtZW50IHZhbHVlIHRvIDAuMDAxCisJICAgIG1pblRocmVzaG9sZFNwaW5uZXJTLnNldFNlbGVjdGlvbigxMCk7CS8vIHNldCB0aGUgaW5pdGlhbCB2YWx1ZSAwLjAwMQorCSAgICBtaW5TcGlubmVyTGFiZWxTID0gbmV3IExhYmVsKHNwaW5uZXJDb21wb3NpdGUsIFNXVC5OT05FKTsKKwkgICAgbWluU3Bpbm5lckxhYmVsUy5zZXRUZXh0KE1lc3NhZ2VzLmdldFN0cmluZygiRVNULk1JTlRIUkVTSE9MRFMiKSk7CisJICAgIC8vIG1pbiBFCisJICAgIG1pblRocmVzaG9sZFNwaW5uZXJFID0gbmV3IFNwaW5uZXIoc3Bpbm5lckNvbXBvc2l0ZSwgU1dULk5PTkUpOworCSAgICBtaW5UaHJlc2hvbGRTcGlubmVyRS5zZXREaWdpdHMoMyk7IAkJLy8gYWxsb3cgMyBkZWNpbWFsIHBsYWNlcworCSAgICBtaW5UaHJlc2hvbGRTcGlubmVyRS5zZXRNaW5pbXVtKDEpOwkJLy8gc2V0IHRoZSBtaW5pbXVtIHZhbHVlIHRvIDAuMDAxCisJICAgIG1pblRocmVzaG9sZFNwaW5uZXJFLnNldE1heGltdW0oU1BJTk5FUl9SRVNPTFVUSU9OKTsJLy8gc2V0IHRoZSBtYXhpbXVtIHZhbHVlIHRvIDEuMAorCSAgICBtaW5UaHJlc2hvbGRTcGlubmVyRS5zZXRJbmNyZW1lbnQoU1BJTk5FUl9JTkNSRU1FTlQpOwkvLyBzZXQgdGhlIGluY3JlbWVudCB2YWx1ZSB0byAwLjAwMQorCSAgICBtaW5UaHJlc2hvbGRTcGlubmVyRS5zZXRTZWxlY3Rpb24oMTAwKTsJLy8gc2V0IHRoZSBpbml0aWFsIHZhbHVlIDAuMDAxCisJICAgIG1pblNwaW5uZXJMYWJlbEUgPSBuZXcgTGFiZWwoc3Bpbm5lckNvbXBvc2l0ZSwgU1dULk5PTkUpOworCSAgICBtaW5TcGlubmVyTGFiZWxFLnNldFRleHQoTWVzc2FnZXMuZ2V0U3RyaW5nKCJFU1QuTUlOVEhSRVNIT0xERSIpKTsgIAorCSAgICAvLyBtaW4gSQorCSAgICBtaW5UaHJlc2hvbGRTcGlubmVySSA9IG5ldyBTcGlubmVyKHNwaW5uZXJDb21wb3NpdGUsIFNXVC5OT05FKTsKKwkgICAgbWluVGhyZXNob2xkU3Bpbm5lckkuc2V0RGlnaXRzKDMpOyAJCS8vIGFsbG93IDMgZGVjaW1hbCBwbGFjZXMKKwkgICAgbWluVGhyZXNob2xkU3Bpbm5lckkuc2V0TWluaW11bSgxKTsJCS8vIHNldCB0aGUgbWluaW11bSB2YWx1ZSB0byAwLjAwMQorCSAgICBtaW5UaHJlc2hvbGRTcGlubmVySS5zZXRNYXhpbXVtKFNQSU5ORVJfUkVTT0xVVElPTik7CS8vIHNldCB0aGUgbWF4aW11bSB2YWx1ZSB0byAxLjAKKwkgICAgbWluVGhyZXNob2xkU3Bpbm5lckkuc2V0SW5jcmVtZW50KFNQSU5ORVJfSU5DUkVNRU5UKTsJLy8gc2V0IHRoZSBpbmNyZW1lbnQgdmFsdWUgdG8gMC4wMDEKKwkgICAgbWluVGhyZXNob2xkU3Bpbm5lckkuc2V0U2VsZWN0aW9uKDEwMCk7CS8vIHNldCB0aGUgaW5pdGlhbCB2YWx1ZSAwLjAwMQorCSAgICBtaW5TcGlubmVyTGFiZWxJID0gbmV3IExhYmVsKHNwaW5uZXJDb21wb3NpdGUsIFNXVC5OT05FKTsKKwkgICAgbWluU3Bpbm5lckxhYmVsSS5zZXRUZXh0KE1lc3NhZ2VzLmdldFN0cmluZygiRVNULk1JTlRIUkVTSE9MREkiKSk7CisJICAgIC8vIG1pbiBSCisJICAgIG1pblRocmVzaG9sZFNwaW5uZXJSID0gbmV3IFNwaW5uZXIoc3Bpbm5lckNvbXBvc2l0ZSwgU1dULk5PTkUpOworCSAgICBtaW5UaHJlc2hvbGRTcGlubmVyUi5zZXREaWdpdHMoMyk7IAkJLy8gYWxsb3cgMyBkZWNpbWFsIHBsYWNlcworCSAgICBtaW5UaHJlc2hvbGRTcGlubmVyUi5zZXRNaW5pbXVtKDEpOwkJLy8gc2V0IHRoZSBtaW5pbXVtIHZhbHVlIHRvIDAuMDAxCisJICAgIG1pblRocmVzaG9sZFNwaW5uZXJSLnNldE1heGltdW0oU1BJTk5FUl9SRVNPTFVUSU9OKTsJLy8gc2V0IHRoZSBtYXhpbXVtIHZhbHVlIHRvIDEuMAorCSAgICBtaW5UaHJlc2hvbGRTcGlubmVyUi5zZXRJbmNyZW1lbnQoU1BJTk5FUl9JTkNSRU1FTlQpOwkvLyBzZXQgdGhlIGluY3JlbWVudCB2YWx1ZSB0byAwLjAwMQorCSAgICBtaW5UaHJlc2hvbGRTcGlubmVyUi5zZXRTZWxlY3Rpb24oMSk7CS8vIHNldCB0aGUgaW5pdGlhbCB2YWx1ZSAwLjAwMQorCSAgICBtaW5TcGlubmVyTGFiZWxSID0gbmV3IExhYmVsKHNwaW5uZXJDb21wb3NpdGUsIFNXVC5OT05FKTsKKwkgICAgbWluU3Bpbm5lckxhYmVsUi5zZXRUZXh0KE1lc3NhZ2VzLmdldFN0cmluZygiRVNULk1JTlRIUkVTSE9MRFIiKSk7CisJICAgIAorCSAgICBzcGlubmVyQ29tcG9zaXRlLnBhY2soKTsKKwkgICAgCisJICAgIHJldHVybiBzcGlubmVyQ29tcG9zaXRlOworCX0vL2dldFNwaW5uZXJDb21wb3NpdGVyCisJCisJCisJLyoqCisJICogc2V0IHVwIHRoZSBmb3VyIGRhdGEgdGltZSBzZXJpZXMgY2hhcnRzCisJICogQHBhcmFtIGRhdGFDb21wb3NpdGUKKwkgKi8KKwlwcml2YXRlIHZvaWQgZ2V0RXF1YXRpb25TZXJpZXNDaGFydHMoQ29tcG9zaXRlIGRhdGFDb21wb3NpdGUpIHsKKwkJLy8gUworIAkJZXF1YXRpb25TZXJpZXNbMF0gPSBuZXcgVGltZVNlcmllc0NhbnZhcyh0aGlzLGRhdGFDb21wb3NpdGUsCisJCQkJTWVzc2FnZXMuZ2V0U3RyaW5nKCJFU1QuRVFVQVRJT04xIiksCisJCQkJTWVzc2FnZXMuZ2V0U3RyaW5nKCJFU1QuQVhJU0xBQkVMMSIpLAorCQkJCUFnZ3JlZ2F0ZURhdGFXcml0ZXIuZ2V0S2V5UygpLC8vIGVxdWF0aW9uIDEgYWx3YXlzIGhhcyBTCisJCQkJZm9yZUdyb3VuZCwKKwkJCQliYWNrZ3JvdW5kR3JvdW5kLAorCQkJCWZyYW1lQ29sb3IsIDAsIHRydWUpOworCQlmaW5hbCBGb3JtRGF0YSBlcU9uZUZvcm1EYXRhID0gbmV3IEZvcm1EYXRhKCk7CisJCWVxdWF0aW9uU2VyaWVzWzBdLnNldExheW91dERhdGEoZXFPbmVGb3JtRGF0YSk7CisJCWVxT25lRm9ybURhdGEudG9wID0gbmV3IEZvcm1BdHRhY2htZW50KGRhdGFDb21wb3NpdGUsIDApOworCQllcU9uZUZvcm1EYXRhLmJvdHRvbSA9IG5ldyBGb3JtQXR0YWNobWVudCg1MCwgMCk7CisJCWVxT25lRm9ybURhdGEubGVmdCA9IG5ldyBGb3JtQXR0YWNobWVudCgwLCAwKTsKKwkJZXFPbmVGb3JtRGF0YS5yaWdodCA9IG5ldyBGb3JtQXR0YWNobWVudCg1MCwgMCk7CisJCQorCQkvLyBJCisJCWVxdWF0aW9uU2VyaWVzWzFdID0gbmV3IFRpbWVTZXJpZXNDYW52YXModGhpcyxkYXRhQ29tcG9zaXRlLAorCQkJCU1lc3NhZ2VzLmdldFN0cmluZygiRVNULkVRVUFUSU9OMyIpLAorCQkJCU1lc3NhZ2VzLmdldFN0cmluZygiRVNULkFYSVNMQUJFTDMiKSwKKwkJCQlBZ2dyZWdhdGVEYXRhV3JpdGVyLmdldEtleUkoKSwvLyBlcXVhdGlvbiAzIGFsd2F5cyBoYXMgSQorCQkJCWZvcmVHcm91bmQsCisJCQkJYmFja2dyb3VuZEdyb3VuZCwKKwkJCQlmcmFtZUNvbG9yLCAxLCB0cnVlKTsKKwkJZmluYWwgRm9ybURhdGEgZXFUaHJlZUZvcm1EYXRhID0gbmV3IEZvcm1EYXRhKCk7CisJCWVxdWF0aW9uU2VyaWVzWzFdLnNldExheW91dERhdGEoZXFUaHJlZUZvcm1EYXRhKTsKKwkJZXFUaHJlZUZvcm1EYXRhLnRvcCA9IG5ldyBGb3JtQXR0YWNobWVudCg1MSwgMCk7CisJCWVxVGhyZWVGb3JtRGF0YS5ib3R0b20gPSBuZXcgRm9ybUF0dGFjaG1lbnQoMTAwLCAwKTsKKwkJZXFUaHJlZUZvcm1EYXRhLmxlZnQgPSBuZXcgRm9ybUF0dGFjaG1lbnQoMCwgMCk7CisJCWVxVGhyZWVGb3JtRGF0YS5yaWdodCA9IG5ldyBGb3JtQXR0YWNobWVudCg1MCwgMCk7CisJCQorCQkvLyBSCisJCWVxdWF0aW9uU2VyaWVzWzJdID0gbmV3IFRpbWVTZXJpZXNDYW52YXModGhpcyxkYXRhQ29tcG9zaXRlLAorCQkJCU1lc3NhZ2VzLmdldFN0cmluZygiRVNULkVRVUFUSU9ONCIpLAorCQkJCU1lc3NhZ2VzLmdldFN0cmluZygiRVNULkFYSVNMQUJFTDQiKSwKKwkJCQlBZ2dyZWdhdGVEYXRhV3JpdGVyLmdldEtleVIoKSwvLyBlcXVhdGlvbiA0IGFsd2F5cyBoYXMgUgorCQkJCWZvcmVHcm91bmQsCisJCQkJYmFja2dyb3VuZEdyb3VuZCwKKwkJCQlmcmFtZUNvbG9yLCAyLCB0cnVlKTsKKwkJZmluYWwgRm9ybURhdGEgZXFGb3VyRm9ybURhdGEgPSBuZXcgRm9ybURhdGEoKTsKKwkJZXF1YXRpb25TZXJpZXNbMl0uc2V0TGF5b3V0RGF0YShlcUZvdXJGb3JtRGF0YSk7CisJCWVxRm91ckZvcm1EYXRhLnRvcCA9IG5ldyBGb3JtQXR0YWNobWVudCg1MSwgMCk7CisJCWVxRm91ckZvcm1EYXRhLmJvdHRvbSA9IG5ldyBGb3JtQXR0YWNobWVudCgxMDAsIDApOworCQllcUZvdXJGb3JtRGF0YS5sZWZ0ID0gbmV3IEZvcm1BdHRhY2htZW50KDUxLCAwKTsKKwkJZXFGb3VyRm9ybURhdGEucmlnaHQgPSBuZXcgRm9ybUF0dGFjaG1lbnQoMTAwLCAwKTsKKwkJCisJCS8vIEUKKwkJZXF1YXRpb25TZXJpZXNbM10gPSBuZXcgVGltZVNlcmllc0NhbnZhcyh0aGlzLGRhdGFDb21wb3NpdGUsCisJCQkJTWVzc2FnZXMuZ2V0U3RyaW5nKCJFU1QuRVFVQVRJT04yIiksCisJCQkJTWVzc2FnZXMuZ2V0U3RyaW5nKCJFU1QuQVhJU0xBQkVMMiIpLAorCQkJCUFnZ3JlZ2F0ZURhdGFXcml0ZXIuZ2V0S2V5RSgpLC8vIGVxdWF0aW9uIDIgYWx3YXlzIGhhcyBFCisJCQkJZm9yZUdyb3VuZCwKKwkJCQliYWNrZ3JvdW5kR3JvdW5kLAorCQkJCWZyYW1lQ29sb3IsIDMsIHRydWUpOworCQlmaW5hbCBGb3JtRGF0YSBlcVR3b0Zvcm1EYXRhID0gbmV3IEZvcm1EYXRhKCk7CisJCWVxdWF0aW9uU2VyaWVzWzNdLnNldExheW91dERhdGEoZXFUd29Gb3JtRGF0YSk7CisJCWVxVHdvRm9ybURhdGEudG9wID0gbmV3IEZvcm1BdHRhY2htZW50KGRhdGFDb21wb3NpdGUsIDApOworCQllcVR3b0Zvcm1EYXRhLmJvdHRvbSA9IG5ldyBGb3JtQXR0YWNobWVudCg1MCwgMCk7CisJCWVxVHdvRm9ybURhdGEubGVmdCA9IG5ldyBGb3JtQXR0YWNobWVudCg1MSwgMCk7CisJCWVxVHdvRm9ybURhdGEucmlnaHQgPSBuZXcgRm9ybUF0dGFjaG1lbnQoMTAwLCAwKTsKKwl9Ly8gZ2V0RXF1YXRpb25TZXJpZXMKKwkKKwkKKwkKKwkKKwkKKwkvKioKKwkgKiBzZXQgdXAgdGhlIGZvdXIgcmVncmVzc2lvbiBYWXNlcmllcyBjaGFydHMKKwkgKiBAcGFyYW0gcmVncmVzc2lvbkNvbXBvc2l0ZQorCSAqLworCXByaXZhdGUgdm9pZCBnZXRSZWdyZXNzaW9uU2VyaWVzQ2hhcnRzKENvbXBvc2l0ZSByZWdyZXNzaW9uQ29tcG9zaXRlKSB7CisJCS8vIEVxdWF0aW9uIDEgZnJvbSBkUy9kVAorIAkJcmVncmVzc2lvblNlcmllc1swXSA9IG5ldyBYWVNlcmllc0NhbnZhcyh0aGlzLHJlZ3Jlc3Npb25Db21wb3NpdGUsCisJCQkJTWVzc2FnZXMuZ2V0U3RyaW5nKCJFU1QuRVFVQVRJT04xIiksCisJCQkJTWVzc2FnZXMuZ2V0U3RyaW5nKCJFU1QuUkFYSVNMQUJFTDEiKSwKKwkJCQlmb3JlR3JvdW5kLAorCQkJCWJhY2tncm91bmRHcm91bmQsCisJCQkJZnJhbWVDb2xvciwgMCk7CisJCWZpbmFsIEZvcm1EYXRhIGVxT25lRm9ybURhdGEgPSBuZXcgRm9ybURhdGEoKTsKKwkJcmVncmVzc2lvblNlcmllc1swXS5zZXRMYXlvdXREYXRhKGVxT25lRm9ybURhdGEpOworCQllcU9uZUZvcm1EYXRhLnRvcCA9IG5ldyBGb3JtQXR0YWNobWVudChyZWdyZXNzaW9uQ29tcG9zaXRlLCAwKTsKKwkJZXFPbmVGb3JtRGF0YS5ib3R0b20gPSBuZXcgRm9ybUF0dGFjaG1lbnQoNTAsIDApOworCQllcU9uZUZvcm1EYXRhLmxlZnQgPSBuZXcgRm9ybUF0dGFjaG1lbnQoMCwgMCk7CisJCWVxT25lRm9ybURhdGEucmlnaHQgPSBuZXcgRm9ybUF0dGFjaG1lbnQoNTAsIDApOworCQkKKwkJLy8gRXF1YXRpb24gMiBmcm9tIGRJL2RUCisJCXJlZ3Jlc3Npb25TZXJpZXNbMV0gPSBuZXcgWFlTZXJpZXNDYW52YXModGhpcyxyZWdyZXNzaW9uQ29tcG9zaXRlLAorCQkJCU1lc3NhZ2VzLmdldFN0cmluZygiRVNULkVRVUFUSU9OMyIpLAorCQkJCU1lc3NhZ2VzLmdldFN0cmluZygiRVNULlJBWElTTEFCRUwzIiksCisJCQkJZm9yZUdyb3VuZCwKKwkJCQliYWNrZ3JvdW5kR3JvdW5kLAorCQkJCWZyYW1lQ29sb3IsIDEpOworCQlmaW5hbCBGb3JtRGF0YSBlcVRocmVlRm9ybURhdGEgPSBuZXcgRm9ybURhdGEoKTsKKwkJcmVncmVzc2lvblNlcmllc1sxXS5zZXRMYXlvdXREYXRhKGVxVGhyZWVGb3JtRGF0YSk7CisJCWVxVGhyZWVGb3JtRGF0YS50b3AgPSBuZXcgRm9ybUF0dGFjaG1lbnQoNTEsIDApOworCQllcVRocmVlRm9ybURhdGEuYm90dG9tID0gbmV3IEZvcm1BdHRhY2htZW50KDEwMCwgMCk7CisJCWVxVGhyZWVGb3JtRGF0YS5sZWZ0ID0gbmV3IEZvcm1BdHRhY2htZW50KDAsIDApOworCQllcVRocmVlRm9ybURhdGEucmlnaHQgPSBuZXcgRm9ybUF0dGFjaG1lbnQoNTAsIDApOworCQkKKwkJLy8gRXF1YXRpb24gMyBmcm9tIGRSL2RUCisJCXJlZ3Jlc3Npb25TZXJpZXNbMl0gPSBuZXcgWFlTZXJpZXNDYW52YXModGhpcyxyZWdyZXNzaW9uQ29tcG9zaXRlLAorCQkJCU1lc3NhZ2VzLmdldFN0cmluZygiRVNULkVRVUFUSU9ONCIpLAorCQkJCU1lc3NhZ2VzLmdldFN0cmluZygiRVNULlJBWElTTEFCRUw0IiksCisJCQkJZm9yZUdyb3VuZCwKKwkJCQliYWNrZ3JvdW5kR3JvdW5kLAorCQkJCWZyYW1lQ29sb3IsIDIpOworCQlmaW5hbCBGb3JtRGF0YSBlcUZvdXJGb3JtRGF0YSA9IG5ldyBGb3JtRGF0YSgpOworCQlyZWdyZXNzaW9uU2VyaWVzWzJdLnNldExheW91dERhdGEoZXFGb3VyRm9ybURhdGEpOworCQllcUZvdXJGb3JtRGF0YS50b3AgPSBuZXcgRm9ybUF0dGFjaG1lbnQoNTEsIDApOworCQllcUZvdXJGb3JtRGF0YS5ib3R0b20gPSBuZXcgRm9ybUF0dGFjaG1lbnQoMTAwLCAwKTsKKwkJZXFGb3VyRm9ybURhdGEubGVmdCA9IG5ldyBGb3JtQXR0YWNobWVudCg1MSwgMCk7CisJCWVxRm91ckZvcm1EYXRhLnJpZ2h0ID0gbmV3IEZvcm1BdHRhY2htZW50KDEwMCwgMCk7CisJCQorCQkvLyBFcXVhdGlvbiA0IGZyb20gZEUvZFQKKwkJcmVncmVzc2lvblNlcmllc1szXSA9IG5ldyBYWVNlcmllc0NhbnZhcyh0aGlzLHJlZ3Jlc3Npb25Db21wb3NpdGUsCisJCQkJTWVzc2FnZXMuZ2V0U3RyaW5nKCJFU1QuRVFVQVRJT04yIiksCisJCQkJTWVzc2FnZXMuZ2V0U3RyaW5nKCJFU1QuUkFYSVNMQUJFTDIiKSwKKwkJCQlmb3JlR3JvdW5kLAorCQkJCWJhY2tncm91bmRHcm91bmQsCisJCQkJZnJhbWVDb2xvciwgMyk7CisJCWZpbmFsIEZvcm1EYXRhIGVxVHdvRm9ybURhdGEgPSBuZXcgRm9ybURhdGEoKTsKKwkJcmVncmVzc2lvblNlcmllc1szXS5zZXRMYXlvdXREYXRhKGVxVHdvRm9ybURhdGEpOworCQllcVR3b0Zvcm1EYXRhLnRvcCA9IG5ldyBGb3JtQXR0YWNobWVudChyZWdyZXNzaW9uQ29tcG9zaXRlLCAwKTsKKwkJZXFUd29Gb3JtRGF0YS5ib3R0b20gPSBuZXcgRm9ybUF0dGFjaG1lbnQoNTAsIDApOworCQllcVR3b0Zvcm1EYXRhLmxlZnQgPSBuZXcgRm9ybUF0dGFjaG1lbnQoNTEsIDApOworCQllcVR3b0Zvcm1EYXRhLnJpZ2h0ID0gbmV3IEZvcm1BdHRhY2htZW50KDEwMCwgMCk7CisJfS8vIGdldCByZWdyZXNzaW9uIHNlcmllcyBjb21wb3NpdGUKKwkKKwkKKwkvKioKKwkgKiBFbmFibGUgb3IgZGlzYWJsZSB0aGUgYW5hbHlzaXMgYnV0dG9uCisJICogCisJICogQHBhcmFtIGIKKwkgKi8KKwlwdWJsaWMgdm9pZCBlbmFibGVBbmFseXNpcyhib29sZWFuIGIpIHsKKwkJaWYoYikgdGhpcy5hbmFseXplQnV0dG9uLnNldEVuYWJsZWQodHJ1ZSk7CisJCWVsc2UgdGhpcy5hbmFseXplQnV0dG9uLnNldEVuYWJsZWQoZmFsc2UpOworCX0KKwkKKwkKKwkvKioKKwkgKiB0byByZW1vdmUgdGhlIGNvbnRyb2wgZS5nLiBieSBhIHJlbW92ZSBidXR0b24gZXZlbnQKKwkgKi8KKwlwdWJsaWMgdm9pZCByZW1vdmUoKSB7CisJCQorCQl1cGRhdGVTdGF0dXNMYWJlbCgpOworCX0KKworCQorCQorCisJcHJvdGVjdGVkIHZvaWQgdXBkYXRlU3RhdHVzTGFiZWwoKSB7CisJCXN0YXR1c0xhYmVsLnNldFRleHQoTWVzc2FnZXMuZ2V0U3RyaW5nKCJDT01NT04uU1RBVFVTIikpOworCX0KKwkKKworCS8qKgorCSAqIEluaXRpYWxpemUgdGhlIGhlYWRlciBsYWJlbAorCSAqIAorCSAqIEBwYXJhbSBmb2xkZXJOYW1lCisJICovCisJcHJvdGVjdGVkIHZvaWQgaW5pdGlhbGl6ZUhlYWRlcihTdHJpbmcgZm9sZGVyTmFtZSkgeworCQlzaW11bGF0aW9uTmFtZUxhYmVsLnNldFRleHQoImFuYWx5emluZyAiK2ZvbGRlck5hbWUpOworCisJfSAvLyBpbml0aWFsaXplRnJvbVNpbXVsYXRpb24KKworCisJCisJCisJCisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLldpZGdldCNkaXNwb3NlKCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBkaXNwb3NlKCkgeworCQkJCQkJCisJCXN1cGVyLmRpc3Bvc2UoKTsKKwkJCisJfSAvLyBkaXNwb3NlCisKKwkKKwkvKioKKwkgKiBub3QgdXNlZAorCSAqIEByZXR1cm4gbnVsbAorCSAqLworCXB1YmxpYyBJZGVudGlmaWFibGUgZ2V0SWRlbnRpZmlhYmxlKCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkKKworCS8qKgorCSAqIGdldCB0aGUgdmFsdWUgZm9yIHBsb3R0aW5nCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnV0aWwuYW5hbHlzaXMudmlld3MuQW5hbHlzaXNDb250cm9sI2dldFZhbHVlcyhpbnQsIGludCkKKwkgKi8KKwlwdWJsaWMgZG91YmxlW10gZ2V0VmFsdWVzKGludCBjaGFydEluZGV4LCBpbnQgc3RhdGUpIHsKKwkJaWYgKHN0YXRlIDw9IDEpIHsKKwkJCXJldHVybiBhdmVyYWdlUGFybXMuZ2V0RGF0YVZhbHVlcyhyZWdpb25Ub0Rpc3BsYXksIGNoYXJ0SW5kZXgsIHN0YXRlKTsKKwkJfSBlbHNlIGlmIChzdGF0ZSA8PTMpIHsKKwkJCXJldHVybiBhdmVyYWdlUGFybXMuZ2V0UmVncmVzc2lvblZhbHVlcyhyZWdpb25Ub0Rpc3BsYXksIGNoYXJ0SW5kZXgsIHN0YXRlLTIpOworCQl9IGVsc2UgeworCQkJcmV0dXJuIGF2ZXJhZ2VQYXJtcy5nZXRGaXR0ZWRWYWx1ZXMocmVnaW9uVG9EaXNwbGF5LCBjaGFydEluZGV4LCBzdGF0ZS00KTsKKwkJfQorCQkKKwkJCisJCS8vcmV0dXJuIGFuYWx5emVyLmdldEVzdGltYXRvcigpLmdldFZhbHVlcyhjaGFydEluZGV4LCBzdGF0ZSk7CisJfQorCQorCS8qKgorCSAqIE5vdCB1c2VkCisJICogQHBhcmFtIGNoYXJ0SW5kZXggbm90IHVzZWQgKG9ubHkgb25lIGNoYXJ0KQorCSAqIEBwYXJhbSBzdGF0ZQorCSAqIEByZXR1cm4gcHJvcGVydHkgbmFtZQorCSAqLworCXB1YmxpYyBTdHJpbmcgZ2V0UHJvcGVydHkoaW50IGNoYXJ0SW5kZXgsIGludCBzdGF0ZSkgeworCQlyZXR1cm4gYW5hbHl6ZXIuZ2V0RXN0aW1hdG9yKCkuZ2V0UHJvcGVydHkoY2hhcnRJbmRleCwgc3RhdGUpOworCX0KKwkKKwkvKioKKwkgKiBAcmV0dXJuIHRoZSBtYXggIFMgdmFsdWUgdGhyZXNob2xkIGZyb20gdGhlIHNwaW5uZXIgYXMgYSBkb3VibGUKKwkgKi8KKwlwdWJsaWMgZG91YmxlIGdldE1heFRocmVzaG9sZFMoKSB7CisJCWRvdWJsZSBzZWxlY3Rpb24gPSBtYXhUaHJlc2hvbGRTcGlubmVyUy5nZXRTZWxlY3Rpb24oKTsvLyByZWFsbHkgYW4gaW50CisJCWRvdWJsZSByZXMgPSBTUElOTkVSX1JFU09MVVRJT047IC8vIDEwMDAgbWVhbnMgMyBkZWNpbWFsIHBsYWNlcworCQlyZXR1cm4gc2VsZWN0aW9uL3JlczsKKwl9CisJLyoqCisJICogQHJldHVybiB0aGUgbWluIFMgdmFsdWUgdGhyZXNob2xkIGZyb20gdGhlIHNwaW5uZXIgYXMgYSBkb3VibGUKKwkgKi8KKwlwdWJsaWMgZG91YmxlIGdldE1pblRocmVzaG9sZFMoKSB7CisJCWRvdWJsZSBzZWxlY3Rpb24gPSBtaW5UaHJlc2hvbGRTcGlubmVyUy5nZXRTZWxlY3Rpb24oKTsvLyByZWFsbHkgYW4gaW50CisJCWRvdWJsZSByZXMgPSBTUElOTkVSX1JFU09MVVRJT047IC8vIDEwMDAgbWVhbnMgMyBkZWNpbWFsIHBsYWNlcworCQlyZXR1cm4gc2VsZWN0aW9uL3JlczsKKwl9CisJCisJLyoqCisJICogQHJldHVybiB0aGUgbWF4ICBFIHZhbHVlIHRocmVzaG9sZCBmcm9tIHRoZSBzcGlubmVyIGFzIGEgZG91YmxlCisJICovCisJcHVibGljIGRvdWJsZSBnZXRNYXhUaHJlc2hvbGRFKCkgeworCQlkb3VibGUgc2VsZWN0aW9uID0gbWF4VGhyZXNob2xkU3Bpbm5lckUuZ2V0U2VsZWN0aW9uKCk7Ly8gcmVhbGx5IGFuIGludAorCQlkb3VibGUgcmVzID0gU1BJTk5FUl9SRVNPTFVUSU9OOyAvLyAxMDAwIG1lYW5zIDMgZGVjaW1hbCBwbGFjZXMKKwkJcmV0dXJuIHNlbGVjdGlvbi9yZXM7CisJfQorCS8qKgorCSAqIEByZXR1cm4gdGhlIG1pbiBFIHZhbHVlIHRocmVzaG9sZCBmcm9tIHRoZSBzcGlubmVyIGFzIGEgZG91YmxlCisJICovCisJcHVibGljIGRvdWJsZSBnZXRNaW5UaHJlc2hvbGRFKCkgeworCQlkb3VibGUgc2VsZWN0aW9uID0gbWluVGhyZXNob2xkU3Bpbm5lckUuZ2V0U2VsZWN0aW9uKCk7Ly8gcmVhbGx5IGFuIGludAorCQlkb3VibGUgcmVzID0gU1BJTk5FUl9SRVNPTFVUSU9OOyAvLyAxMDAwIG1lYW5zIDMgZGVjaW1hbCBwbGFjZXMKKwkJcmV0dXJuIHNlbGVjdGlvbi9yZXM7CisJfQorCQorCS8qKgorCSAqIEByZXR1cm4gdGhlIG1heCAgSSB2YWx1ZSB0aHJlc2hvbGQgZnJvbSB0aGUgc3Bpbm5lciBhcyBhIGRvdWJsZQorCSAqLworCXB1YmxpYyBkb3VibGUgZ2V0TWF4VGhyZXNob2xkSSgpIHsKKwkJZG91YmxlIHNlbGVjdGlvbiA9IG1heFRocmVzaG9sZFNwaW5uZXJJLmdldFNlbGVjdGlvbigpOy8vIHJlYWxseSBhbiBpbnQKKwkJZG91YmxlIHJlcyA9IFNQSU5ORVJfUkVTT0xVVElPTjsgLy8gMTAwMCBtZWFucyAzIGRlY2ltYWwgcGxhY2VzCisJCXJldHVybiBzZWxlY3Rpb24vcmVzOworCX0KKwkvKioKKwkgKiBAcmV0dXJuIHRoZSBtaW4gSSB2YWx1ZSB0aHJlc2hvbGQgZnJvbSB0aGUgc3Bpbm5lciBhcyBhIGRvdWJsZQorCSAqLworCXB1YmxpYyBkb3VibGUgZ2V0TWluVGhyZXNob2xkSSgpIHsKKwkJZG91YmxlIHNlbGVjdGlvbiA9IG1pblRocmVzaG9sZFNwaW5uZXJJLmdldFNlbGVjdGlvbigpOy8vIHJlYWxseSBhbiBpbnQKKwkJZG91YmxlIHJlcyA9IFNQSU5ORVJfUkVTT0xVVElPTjsgLy8gMTAwMCBtZWFucyAzIGRlY2ltYWwgcGxhY2VzCisJCXJldHVybiBzZWxlY3Rpb24vcmVzOworCX0KKwkKKwkvKioKKwkgKiBAcmV0dXJuIHRoZSBtYXggIFIgdmFsdWUgdGhyZXNob2xkIGZyb20gdGhlIHNwaW5uZXIgYXMgYSBkb3VibGUKKwkgKi8KKwlwdWJsaWMgZG91YmxlIGdldE1heFRocmVzaG9sZFIoKSB7CisJCWRvdWJsZSBzZWxlY3Rpb24gPSBtYXhUaHJlc2hvbGRTcGlubmVyUi5nZXRTZWxlY3Rpb24oKTsvLyByZWFsbHkgYW4gaW50CisJCWRvdWJsZSByZXMgPSBTUElOTkVSX1JFU09MVVRJT047IC8vIDEwMDAgbWVhbnMgMyBkZWNpbWFsIHBsYWNlcworCQlyZXR1cm4gc2VsZWN0aW9uL3JlczsKKwl9CisJLyoqCisJICogQHJldHVybiB0aGUgbWluIFIgdmFsdWUgdGhyZXNob2xkIGZyb20gdGhlIHNwaW5uZXIgYXMgYSBkb3VibGUKKwkgKi8KKwlwdWJsaWMgZG91YmxlIGdldE1pblRocmVzaG9sZFIoKSB7CisJCWRvdWJsZSBzZWxlY3Rpb24gPSBtaW5UaHJlc2hvbGRTcGlubmVyUi5nZXRTZWxlY3Rpb24oKTsvLyByZWFsbHkgYW4gaW50CisJCWRvdWJsZSByZXMgPSBTUElOTkVSX1JFU09MVVRJT047IC8vIDEwMDAgbWVhbnMgMyBkZWNpbWFsIHBsYWNlcworCQlyZXR1cm4gc2VsZWN0aW9uL3JlczsKKwl9CisJCisJLyoqCisJICogTm90IHVzZWQKKwkgKiBAcGFyYW0gY2hhcnRJbmRleCBub3QgdXNlZCAob25seSBvbmUgY2hhcnQpCisJICogQHJldHVybiB0aGUgbnVtYmVyIG9mIHByb3BlcnRpZXMsIG9ubHkgb25lCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnV0aWwuYW5hbHlzaXMudmlld3MuQW5hbHlzaXNDb250cm9sI2dldE51bVByb3BlcnRpZXMoaW50IGNoYXJ0SW5kZXgpCisJICovCisJcHVibGljIGludCBnZXROdW1Qcm9wZXJ0aWVzKGludCBjaGFydEluZGV4KSB7CisJCWlmKGFuYWx5emVyIT1udWxsKSB7CisJCQkvLyB3ZSBhbHdheXMgcmV0dXJuIDIgYmVjYXVzZSB3ZSBjaGFydCB0aGUgdmFyaWFibGUgYWxvbmcgd2l0aCB0aGUgc2VsZWN0ZWQgcmFuZ2UuLi4KKwkJCS8vIHNvIDIgcGVyIGNoYXJ0IFMsIFNzZWxlY3RlZCwgb3IgSSwgSXNlbGVjdGVkLCBldGMuCisJCQlyZXR1cm4gMjsKKwkJfQorCQlyZXR1cm4gMDsKKwl9CisJCisJLyoqCisJICogRWFjaCBDb250cm9sIGNsYXNzIG1heSBhZGQgb2JqZWN0cyB0byB0aGlzIG1hcAorCSAqIEByZXR1cm4gdGhlIGNvbnRyb2wgcGFyYW1ldGVycyBtYXBzCisJICovCisJcHVibGljIE1hcDxTdHJpbmcsIE9iamVjdD4gZ2V0Q29udHJvbFBhcmFtZXRlcnNNYXAoKSB7CisJCS8vIGFkZCBub3RoaW5nIGZvciBub3cKKwkJY29udHJvbFBhcmFtZXRlcnNNYXAucHV0KE1JTl9TX0tFWSwgbmV3IERvdWJsZShnZXRNaW5UaHJlc2hvbGRTKCkpKTsKKwkJY29udHJvbFBhcmFtZXRlcnNNYXAucHV0KE1JTl9FX0tFWSwgbmV3IERvdWJsZShnZXRNaW5UaHJlc2hvbGRFKCkpKTsKKwkJY29udHJvbFBhcmFtZXRlcnNNYXAucHV0KE1JTl9JX0tFWSwgbmV3IERvdWJsZShnZXRNaW5UaHJlc2hvbGRJKCkpKTsKKwkJY29udHJvbFBhcmFtZXRlcnNNYXAucHV0KE1JTl9SX0tFWSwgbmV3IERvdWJsZShnZXRNaW5UaHJlc2hvbGRSKCkpKTsKKwkJCisJCWNvbnRyb2xQYXJhbWV0ZXJzTWFwLnB1dChNQVhfU19LRVksIG5ldyBEb3VibGUoZ2V0TWF4VGhyZXNob2xkUygpKSk7CisJCWNvbnRyb2xQYXJhbWV0ZXJzTWFwLnB1dChNQVhfRV9LRVksIG5ldyBEb3VibGUoZ2V0TWF4VGhyZXNob2xkRSgpKSk7CisJCWNvbnRyb2xQYXJhbWV0ZXJzTWFwLnB1dChNQVhfSV9LRVksIG5ldyBEb3VibGUoZ2V0TWF4VGhyZXNob2xkSSgpKSk7CisJCWNvbnRyb2xQYXJhbWV0ZXJzTWFwLnB1dChNQVhfUl9LRVksIG5ldyBEb3VibGUoZ2V0TWF4VGhyZXNob2xkUigpKSk7CisJCQorCQlib29sZWFuIHN1bUFsbExvY2F0aW9ucyA9IGRhdGFBdmVyYWdlUmFkaW9CdXR0b25zWzFdLmdldFNlbGVjdGlvbigpOworCQlib29sZWFuIGZyZXFEZXBlbmRhbnRCZXRhTW9kZSA9IGJldGFNb2RlUmFkaW9CdXR0b25zWzBdLmdldFNlbGVjdGlvbigpOworCQkKKwkJY29udHJvbFBhcmFtZXRlcnNNYXAucHV0KFNVTV9MT0NBVElPTlNfS0VZLCBCb29sZWFuLnZhbHVlT2Yoc3VtQWxsTG9jYXRpb25zKSk7CisJCWNvbnRyb2xQYXJhbWV0ZXJzTWFwLnB1dChGUkVRX01PREVfS0VZLCBCb29sZWFuLnZhbHVlT2YoZnJlcURlcGVuZGFudEJldGFNb2RlKSk7CisJCQorCQkKKwkJCisJCXJldHVybiBjb250cm9sUGFyYW1ldGVyc01hcDsKKwl9CisKKwkKKworfSAvLyBFc3RpbWF0b3JDb250cm9sCmRpZmYgLS1naXQgYS9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLnV0aWwuYW5hbHlzaXMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdXRpbC9hbmFseXNpcy92aWV3cy9Fc3RpbWF0b3JGYWN0b3J5LmphdmEgYi9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLnV0aWwuYW5hbHlzaXMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdXRpbC9hbmFseXNpcy92aWV3cy9Fc3RpbWF0b3JGYWN0b3J5LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODY5M2ZhMQotLS0gL2Rldi9udWxsCisrKyBiL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0udXRpbC5hbmFseXNpcy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91dGlsL2FuYWx5c2lzL3ZpZXdzL0VzdGltYXRvckZhY3RvcnkuamF2YQpAQCAtMCwwICsxLDUyIEBACisvLyBFc3RpbWF0b3JGYWN0b3J5LmphdmEKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS51dGlsLmFuYWx5c2lzLnZpZXdzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA3LCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZTsKKworLyoqCisgKiBUaGlzIGNsYXNzIGlzIGEgZmFjdG9yeSBmb3IgY3JlYXRpbmcge0BsaW5rIEFuYWx5c2lzQ29udHJvbH0gaW5zdGFuY2VzLgorICovCitwdWJsaWMgY2xhc3MgRXN0aW1hdG9yRmFjdG9yeSBpbXBsZW1lbnRzIEFuYWx5c2lzQ29udHJvbEZhY3RvcnkgeworCisJLyoqCisJICogcHVibGljIElOU1RBTkNFIGZvciB0aGlzIEZhY3RvcnkKKwkgKi8KKwlwdWJsaWMgc3RhdGljIEVzdGltYXRvckZhY3RvcnkgSU5TVEFOQ0UgPSBuZXcgRXN0aW1hdG9yRmFjdG9yeSgpOworCisJLyoqCisJICogQ29uc3RhbnRzIAorCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEFOQUxZU0lTX1RZUEUgPSAiRXN0aW1hdG9yIjsKKwkKKworCS8qKgorCSAqIAorCSAqIEBwYXJhbSBwYXJlbnQKKwkgKiBAcGFyYW0gZGlyTmFtZQorCSAqIEByZXR1cm4gbmV3IEVzdGltYXRvckNvbnRyb2woKQorCSAqLworCXB1YmxpYyBBbmFseXNpc0NvbnRyb2wgY3JlYXRlKGZpbmFsIENvbXBvc2l0ZSBwYXJlbnQsIFN0cmluZyBkaXJOYW1lKSB7CisJCQkJCisJCXJldHVybiBuZXcgRXN0aW1hdG9yQ29udHJvbChwYXJlbnQpOworCX0KKworCS8qKgorCSAqIEByZXR1cm4gdHlwZSBvZiBhbmFseXNpcworCSAqIAorCSAqLworCXB1YmxpYyBTdHJpbmcgZ2V0Q29udHJvbFR5cGUoKSB7CisJCXJldHVybiBBTkFMWVNJU19UWVBFOworCX0KKworfSAvLyBFc3RpbWF0b3JGYWN0b3J5CmRpZmYgLS1naXQgYS9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLnV0aWwuYW5hbHlzaXMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdXRpbC9hbmFseXNpcy92aWV3cy9Fc3RpbWF0b3JWaWV3LmphdmEgYi9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLnV0aWwuYW5hbHlzaXMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdXRpbC9hbmFseXNpcy92aWV3cy9Fc3RpbWF0b3JWaWV3LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTc0Y2JmMQotLS0gL2Rldi9udWxsCisrKyBiL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0udXRpbC5hbmFseXNpcy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91dGlsL2FuYWx5c2lzL3ZpZXdzL0VzdGltYXRvclZpZXcuamF2YQpAQCAtMCwwICsxLDY4IEBACisvLyBFc3RpbWF0b3JWaWV3IAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnV0aWwuYW5hbHlzaXMudmlld3M7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDcsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmpvYnMuc2ltdWxhdGlvbi5TaW11bGF0aW9uTWFuYWdlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGU7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkucGFydC5WaWV3UGFydDsKKworLyoqCisgKiBUaGlzIHZpZXcgcHJvdmlkZXMgYSB0b29sIHRvIGVzdGltYXRlIG1vZGVsIHBhcmFtZXRlcnMgZm9yIGEgbW9kZWwgdGhhdCBtaWdodCBmaXQgYSBzZXQgb2YgcmVmZXJlbmNlIGRhdGEuCisgKi8KKworcHVibGljIGNsYXNzIEVzdGltYXRvclZpZXcgZXh0ZW5kcyBWaWV3UGFydCB7CisKKwkvKioKKwkgKiBUaGUgaWRlbnRpZmllciBvZiB0aGUgRXN0aW1hdG9yIFZpZXcge0B2YWx1ZX0KKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBJRF9Fc3RpbWF0b3JfVklFVyA9ICJvcmcuZWNsaXBzZS5zdGVtLnV0aWwuYW5hbHlzaXMudmlld3MuZXN0aW1hdG9yIjsgLy8kTk9OLU5MUy0xJAorCisKKwlwcml2YXRlIEFuYWx5c2lzVmlld2VyIGFuYWx5c2lzVmlld2VyOworCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS51aS5wYXJ0LldvcmtiZW5jaFBhcnQjY3JlYXRlUGFydENvbnRyb2wob3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlKQorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGNyZWF0ZVBhcnRDb250cm9sKGZpbmFsIENvbXBvc2l0ZSBwYXJlbnQpIHsKKworCQlhbmFseXNpc1ZpZXdlciA9IG5ldyBBbmFseXNpc1ZpZXdlcihwYXJlbnQsIEVzdGltYXRvckZhY3RvcnkuSU5TVEFOQ0UpOworCQlhbmFseXNpc1ZpZXdlci5zZXRJbnB1dChTaW11bGF0aW9uTWFuYWdlci5nZXRNYW5hZ2VyKCkpOworCisJCWdldFNpdGUoKS5zZXRTZWxlY3Rpb25Qcm92aWRlcihhbmFseXNpc1ZpZXdlcik7CisKKworCX0gLy8gY3JlYXRlUGFydENvbnRyb2wKKworCQorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS51aS5wYXJ0LldvcmtiZW5jaFBhcnQjZGlzcG9zZSgpCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgZGlzcG9zZSgpIHsKKwkJc3VwZXIuZGlzcG9zZSgpOworCX0gLy8gZGlzcG9zZQorCisJLyoqCisJICogVGhpcyBpcyByZXF1aXJlZCBieSB0aGUgaW50ZXJmYWNlLCBidXQgd2UncmUgbm90IHVzaW5nIGl0LgorCSAqIAorCSAqIEBzZWUgb3JnLmVjbGlwc2UudWkucGFydC5Xb3JrYmVuY2hQYXJ0I3NldEZvY3VzKCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBzZXRGb2N1cygpIHsKKwkJLy8gTm90aGluZworCX0gLy8gc2V0Rm9jdXMKKworfSAvLyBFc3RpbWF0b3JWaWV3CmRpZmYgLS1naXQgYS9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLnV0aWwuYW5hbHlzaXMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdXRpbC9hbmFseXNpcy92aWV3cy9JUmVtb3ZlTGlzdGVuZXIuamF2YSBiL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0udXRpbC5hbmFseXNpcy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91dGlsL2FuYWx5c2lzL3ZpZXdzL0lSZW1vdmVMaXN0ZW5lci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJjNjkyM2YKLS0tIC9kZXYvbnVsbAorKysgYi9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLnV0aWwuYW5hbHlzaXMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdXRpbC9hbmFseXNpcy92aWV3cy9JUmVtb3ZlTGlzdGVuZXIuamF2YQpAQCAtMCwwICsxLDMwIEBACisvLyBJUmVtb3ZlTGlzdGVuZXIKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS51dGlsLmFuYWx5c2lzLnZpZXdzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA3LDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5JZGVudGlmaWFibGU7CisKKy8qKgorICogV2hlbiB0aGUgcmVtb3ZlIGJ1dHRvbiBpcyBwcmVzc2VkIGJ5IHRoZSB1c2VyCisgKiBAYXV0aG9yIEphbWVzCisgKgorICovCitwdWJsaWMgaW50ZXJmYWNlIElSZW1vdmVMaXN0ZW5lciB7CisJLyoqCisJICogCisJICogQHBhcmFtIGlkZW50aWZpYWJsZQorCSAqLworCXZvaWQgaWRlbnRpZmlhYmxlUmVtb3ZlZChJZGVudGlmaWFibGUgaWRlbnRpZmlhYmxlKSA7CisJCisKK30KZGlmZiAtLWdpdCBhL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0udXRpbC5hbmFseXNpcy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91dGlsL2FuYWx5c2lzL3ZpZXdzL0x5YXB1bm92Q29udHJvbC5qYXZhIGIvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS51dGlsLmFuYWx5c2lzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3V0aWwvYW5hbHlzaXMvdmlld3MvTHlhcHVub3ZDb250cm9sLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGQzYTgxZQotLS0gL2Rldi9udWxsCisrKyBiL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0udXRpbC5hbmFseXNpcy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91dGlsL2FuYWx5c2lzL3ZpZXdzL0x5YXB1bm92Q29udHJvbC5qYXZhCkBAIC0wLDAgKzEsNTU1IEBACisvLyBFc3RpbWF0b3JDb250cm9sLmphdmEKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS51dGlsLmFuYWx5c2lzLnZpZXdzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA3LCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CitpbXBvcnQgamF2YS51dGlsLk1hcDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmJpcnQuY2hhcnQubW9kZWwuYXR0cmlidXRlLkNvbG9yRGVmaW5pdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5iaXJ0LmNoYXJ0Lm1vZGVsLmF0dHJpYnV0ZS5pbXBsLkNvbG9yRGVmaW5pdGlvbkltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLkVMaXN0OworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmRpYWxvZ3MuUHJvZ3Jlc3NNb25pdG9yRGlhbG9nOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuU2NlbmFyaW9Jbml0aWFsaXphdGlvbkV4Y2VwdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuQWN0aXZhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udXRpbC5hbmFseXNpcy5DU1ZBbmFseXNpc1dyaXRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnV0aWwuYW5hbHlzaXMuUGhhc2VTcGFjZUNvb3JkaW5hdGU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS51dGlsLmFuYWx5c2lzLlNjZW5hcmlvQW5hbHlzaXNTdWl0ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuU1dUOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuU2VsZWN0aW9uQWRhcHRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLlNlbGVjdGlvbkV2ZW50OworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5sYXlvdXQuRm9ybUF0dGFjaG1lbnQ7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5Gb3JtRGF0YTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QubGF5b3V0LkZvcm1MYXlvdXQ7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQnV0dG9uOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5EaXJlY3RvcnlEaWFsb2c7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuRGlzcGxheTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5MYWJlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5TaGVsbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5UZXh0OworCisvKioKKyAqIFRoaXMgY2xhc3MgaXMgYSBTV1QgR1VJIGNvbXBvbmVudCB0aGF0IHVzZXMgQklSVCB0byBwbG90CisgKi8KK3B1YmxpYyBjbGFzcyBMeWFwdW5vdkNvbnRyb2wgZXh0ZW5kcyBBbmFseXNpc0NvbnRyb2wgeworCQorCQkKKwkvKioKKwkgKiB1c2VkIHRvIGlkZW50aWZ5IHVzZXIgcHJlZmVyZW5jZXMgZm9yIHRoaXMgY2xhc3MKKwkgKiBUaGlzIFN0cmluZyBpcyBub3QgaHVtYW4gcmVhZGFibGUgc28gZG9lcyBub3QgbmVlZCB0byBiZSBOTFMnZC4gSXQgaXMgYSBrZXkgaW4gYSBtYXAKKwkgKi8KKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgQ09OU1VNRVIgPSAiTFlBUFVOT1ZfQ09OVFJPTCI7CisJCisJLyoqCisJICogdXNlZCB0byByZW1lbWJlciB0aGUgcHJpbWFyeSBkaXJlY3RvcnkgaW4gdGhlIHVzZXIgcHJlZmVyZW5jZXMKKwkgKiBUaGlzIFN0cmluZyBpcyBub3QgaHVtYW4gcmVhZGFibGUgc28gZG9lcyBub3QgbmVlZCB0byBiZSBOTFMnZC4gSXQgaXMgYSBrZXkgaW4gYSBtYXAKKwkgKi8KKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgUFJJTUFSWV9GT0xERVJfS0VZID0gQ09OU1VNRVIrIl9QUklNQVJZIjsKKwkvKioKKwkgKiB1c2VkIHRvIHJlbWVtYmVyIHRoZSBzZWNvbmRhcnkgZGlyZWN0b3J5IGluIHRoZSB1c2VyIHByZWZlcmVuY2VzCisJICogVGhpcyBTdHJpbmcgaXMgbm90IGh1bWFuIHJlYWRhYmxlIHNvIGRvZXMgbm90IG5lZWQgdG8gYmUgTkxTJ2QuIEl0IGlzIGEga2V5IGluIGEgbWFwCisJICovCisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFNFQ09OREFSWV9GT0xERVJfS0VZID0gQ09OU1VNRVIrIl9TRUNPTkRBUlkiOworCisJLyoqCisJICogIEZpcnN0IFNjZW5hcmlvIExhYmVsIC0gaW5kaWNhdGVzIG51bWJlciBvZiByZWdpb25zIGJlaW5nIHdhdGNoZWQgZm9yIGFuYWx5c2lzLgorCSAqICBUaGVyZSBhcmUgbG9jYXRpb25zIHdpdGggcmVsYXRpdmUgdmFsdWUgaGlzdG9yeSBwcm92aWRlcnMgYXR0YWNoZWQKKwkgKi8KKwlMYWJlbCBmaXJzdFNjZW5hcmlvRm9sZGVyTGFiZWw7CisJCisJLyoqCisJICogIFNlY29uZCBTY2VuYXJpbyBMYWJlbCAtIGluZGljYXRlcyBudW1iZXIgb2YgcmVnaW9ucyBiZWluZyB3YXRjaGVkIGZvciBhbmFseXNpcy4KKwkgKiAgVGhlcmUgYXJlIGxvY2F0aW9ucyB3aXRoIHJlbGF0aXZlIHZhbHVlIGhpc3RvcnkgcHJvdmlkZXJzIGF0dGFjaGVkCisJICovCisJTGFiZWwgc2Vjb25kU2NlbmFyaW9Gb2xkZXJMYWJlbDsKKwkKKwkvKioKKwkgKiAgQSBMYWJlbCB0byBnaXZlIGZlZWRiYWsgb24gdGhlIGNvbXB1dGF0aW9uIGFjdGlvbgorCSAqLworCS8vTGFiZWwgdXNlckZlZWRiYWNrTGFiZWw7CisJCisJLyoqCisJICogRmlyc3QgaW5wdXQgdGV4dCBmaWVsZCBmb3IgdGhlIHNjZW5hcmlvIGZvbGRlciBvZiBkYXRhIHRvIHVzZSBpbiBtYWtpbmcgdGhlIGVzdGltYXRpb24KKwkgKi8KKwlUZXh0IHRleHQxOworCQorCisJLyoqCisJICogU2Vjb25kIElucHV0IHRleHQgZmllbGQgZm9yIHRoZSBzY2VuYXJpbyBmb2xkZXIgb2YgZGF0YSB0byBiZSBjb21wYXJlZAorCSAqKi8KKwlUZXh0IHRleHQyOworCQorCisJCisJCisJLyoqCisJICogQSBsYWJlbCB0byByZXBvcnQgc3RhdHVzIChub3QgeWV0IHVzZWQpCisJICovCisJTGFiZWwgc3RhdHVzTGFiZWw7CisJCisJCisJLyoqCisJICogUmVzdWx0cyBvZiBhbmFseXNpcworCSAqLworCUxhYmVsIHJlc3VsdHNMYWJlbDsKKwkKKwkvKioKKwkgKiB0aGUgY2hhcnQgb2YgdHdvIChvciBtb3JlKSB0cmFqZWN0b3JpZXMgaW4gcGhhc2Ugc3BhY2UKKwkgKi8KKwlMeWFwdW5vdlRyYWplY3RvcnlDYW52YXMgbHlhcHVub3ZUcmFqZWN0b3J5Q2FudmFzOworCQorCS8qKgorCSAqIHRoZSB0aW1lIHNlcmllcyBjaGFydCBvZiB0aGUgZGl2ZXJnZW5jZSBvZiB0aGUgTHlhcHVub3YgdHJhamVjdG9yeShpZXMpIGZyb20gdGhlIHJlZmVyZW5jZSB0cmFqZWN0b3J5CisJICovCisJVGltZVNlcmllc0NhbnZhcyB0aW1lU2VyaWVzQ2FudmFzOworCS8qKgorCSAqIENvbG9ycyBmb3IgdGhlIHRpbWUgc2VyaWVzIGNoYXJ0CisJICovCisJc3RhdGljIGZpbmFsIENvbG9yRGVmaW5pdGlvbiBmb3JlR3JvdW5kID0gQ29sb3JEZWZpbml0aW9uSW1wbC5jcmVhdGUoMTgwLCAwLCAwKTsKKwlzdGF0aWMgZmluYWwgQ29sb3JEZWZpbml0aW9uIGJhY2tncm91bmRHcm91bmQgPSBDb2xvckRlZmluaXRpb25JbXBsLmNyZWF0ZSgyNTUsIDI1NSwgMjI1KTsKKwlzdGF0aWMgZmluYWwgQ29sb3JEZWZpbml0aW9uIGZyYW1lQ29sb3IgPSBDb2xvckRlZmluaXRpb25JbXBsLldISVRFKCk7CisJCisJLyoqCisJICogTGFiZWwgZm9yIGxpbmUgc2VyaWVzIERhdGEgKGxlZ2VuZCkKKwkgKi8KKworCQorCS8qKgorCSAqIHRoZSByZXN1bHRzIG9mIHZhcmlvdXMgc2NlbmFyaW8gY29tcGFyaXNvbnMKKwkgKiBUT0RPOiBldmVudHVhbGx5IHRoaXMgbWlnaHQgYmUgYSBtYXAga2V5ZWQgYnkgY29tcGFyaXNvbiBpZAorCSAqIGZvciBub3cgdGhlcmUgaXMgb25seSBvbmUgY29tcGFyaXNvbiwgdGhlIG1lYW4gc3F1YXJlIGRpZmZlcmVuY2UuCisJICovCisJTGlzdDxQaGFzZVNwYWNlQ29vcmRpbmF0ZVtdPiBjb21wYXJpc29uVmFsdWVzID0gbmV3IEFycmF5TGlzdDxQaGFzZVNwYWNlQ29vcmRpbmF0ZVtdPigpOworCQorCS8qKgorCSAqIHRoaXMgaXMgdGhlIGN1bXVsYXRpdmUgZGV2aWF0aW9uIGJldHdlZW4gdGhlIHRyYWplY3RvcmllcyAocmVsYXRpdmUgdG8gdGhlIHJlZmVyZW5jZQorCSAqIHRyYWplY3RvcnkKKwkgKi8KKwlMaXN0PEVMaXN0PERvdWJsZT4+IGN1bXVsYXRpdmVEZXZpYXRpb24gPSBuZXcgQXJyYXlMaXN0PEVMaXN0PERvdWJsZT4+KCk7CisJCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBTdHJpbmcgTFlBUFVOT1ZfRklMRV9QUkVGSVggPSBNZXNzYWdlcy5nZXRTdHJpbmcoIkxZQS5USVRMRSIpOworCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgU3RyaW5nIExZQVBVTk9WX0RFVklBVElPTl9GSUxFX1BSRUZJWCA9IE1lc3NhZ2VzLmdldFN0cmluZygiTFlBLkRFVklBVElPTiIpOworCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgU3RyaW5nIFNFTEVDVF9GT0xERVJfRElBTE9HX1RFWFQgPSBNZXNzYWdlcy5nZXRTdHJpbmcoIkxZQS5TRUxFQ1RGT0xERVJESUFMRyIpOworCQorCVNjZW5hcmlvQW5hbHlzaXNTdWl0ZSBhbmFseXplciA9IG5ldyBTY2VuYXJpb0FuYWx5c2lzU3VpdGUodGhpcyk7CisJCisJQ29tcG9zaXRlIHBhcmVudENvbXBvc2l0ZTsKKwkKKwkvKioKKwkgKiAKKwkgKiBAcGFyYW0gcGFyZW50CisJICovCisJcHVibGljIEx5YXB1bm92Q29udHJvbChmaW5hbCBDb21wb3NpdGUgcGFyZW50KSB7CisJCXN1cGVyKHBhcmVudCwgU1dULk5vbmUpOworCQlwYXJlbnRDb21wb3NpdGUgPSBwYXJlbnQ7CisJCWNyZWF0ZUNvbnRlbnRzKCk7CisJfSAvLyBFc3RpbWF0b3JDb250cm9sCisKKwkvKioKKwkgKiBDcmVhdGUgdGhlIGNvbnRlbnRzIG9mIHRoZSBwbG90dGVyCisJICovCisJcHJpdmF0ZSB2b2lkIGNyZWF0ZUNvbnRlbnRzKCkgeworCQlzZXRMYXlvdXQobmV3IEZvcm1MYXlvdXQoKSk7CisJCURpc3BsYXkgZGlzcGxheSA9IHRoaXMuZ2V0RGlzcGxheSgpOworCisJCWlkZW50aWZpYWJsZVRpdGxlID0gbmV3IExhYmVsKHRoaXMsIFNXVC5CT1JERVIpOworCQlpZGVudGlmaWFibGVUaXRsZS5zZXRUZXh0KE1lc3NhZ2VzLmdldFN0cmluZygiTFlBLlRJVExFIikpOworCQlpZGVudGlmaWFibGVUaXRsZS5zZXRGb250KGdldExhcmdlckZvbnQoMTgsIGRpc3BsYXkpKTsKKwkJCisJCQorCQkKKwkJCisJCXN0YXR1c0xhYmVsID0gbmV3IExhYmVsKHRoaXMsIFNXVC5CT1JERVIpOworCQlzdGF0dXNMYWJlbC5zZXRUZXh0KCIiKTsKKwkJCisJCWZpcnN0U2NlbmFyaW9Gb2xkZXJMYWJlbCA9IG5ldyBMYWJlbCh0aGlzLCBTV1QuTk9ORSk7CisJCS8vZmlyc3RTY2VuYXJpb0ZvbGRlckxhYmVsLnNldEJhY2tncm91bmQobGFiZWxCYWNrZ3JvdW5kKTsKKwkJZmlyc3RTY2VuYXJpb0ZvbGRlckxhYmVsLnNldFRleHQoTWVzc2FnZXMuZ2V0U3RyaW5nKCJMWUEuRk9MREVSMUxBQkVMIikpOworCQkKKwkJdGV4dDEgPSBuZXcgVGV4dCh0aGlzLCBTV1QuQk9SREVSKTsKKwkgICAgdGV4dDEuc2V0Qm91bmRzKDEwLCAxMCwgMTAwLCAyMCk7CisJICAgIFN0cmluZyBwcmltYXJ5RGlyPXByZWZzLmdldFJlY2VudEZvbGRlcihQUklNQVJZX0ZPTERFUl9LRVkpOworCSAgICB0ZXh0MS5zZXRUZXh0KHByaW1hcnlEaXIpOworCSAgICAKKwkgICAgc2Vjb25kU2NlbmFyaW9Gb2xkZXJMYWJlbCA9IG5ldyBMYWJlbCh0aGlzLCBTV1QuTk9ORSk7CisJICAgIC8vIHNlY29uZFNjZW5hcmlvRm9sZGVyTGFiZWwuc2V0QmFja2dyb3VuZChsYWJlbEJhY2tncm91bmQpOworCSAgICBzZWNvbmRTY2VuYXJpb0ZvbGRlckxhYmVsLnNldFRleHQoTWVzc2FnZXMuZ2V0U3RyaW5nKCJMWUEuRk9MREVSMkxBQkVMIikpOworCQkKKwkJdGV4dDIgPSBuZXcgVGV4dCh0aGlzLCBTV1QuQk9SREVSKTsKKwkgICAgdGV4dDIuc2V0Qm91bmRzKDEwLCAxMCwgMTAwLCAyMCk7CisJICAgIFN0cmluZyBzZWNvbmRhcnlEaXI9cHJlZnMuZ2V0UmVjZW50Rm9sZGVyKFNFQ09OREFSWV9GT0xERVJfS0VZKTsKKwkgICAgdGV4dDIuc2V0VGV4dChzZWNvbmRhcnlEaXIpOworCQkgIAorCSAgICBDb21wb3NpdGUgYW5hbHl6ZUJ1dHRvbkNvbXBvc2l0ZSA9IGdldEFuYWx5emVCdXR0b25Db21wb3NpdGUodGhpcyxNZXNzYWdlcy5nZXRTdHJpbmcoIkxZQS5DT01QQVJJU09OIikpOworCisJCXJlc3VsdHNMYWJlbCA9IG5ldyBMYWJlbCh0aGlzLCBTV1QuU0hBRE9XX09VVCk7CisJCXJlc3VsdHNMYWJlbC5zZXRUZXh0KCIiKTsKKwkJCisJCWZpbmFsIEZvcm1EYXRhIHRpdGxlRm9ybURhdGEgPSBuZXcgRm9ybURhdGEoKTsKKwkJaWRlbnRpZmlhYmxlVGl0bGUuc2V0TGF5b3V0RGF0YSh0aXRsZUZvcm1EYXRhKTsKKwkJdGl0bGVGb3JtRGF0YS50b3AgPSBuZXcgRm9ybUF0dGFjaG1lbnQoMCwgMCk7CisJCXRpdGxlRm9ybURhdGEubGVmdCA9IG5ldyBGb3JtQXR0YWNobWVudCgwLCAwKTsKKwkJdGl0bGVGb3JtRGF0YS5yaWdodCA9IG5ldyBGb3JtQXR0YWNobWVudCgyNSwgMCk7CisJCQorCQlmaW5hbCBGb3JtRGF0YSByZXN1bHRzRm9ybURhdGEgPSBuZXcgRm9ybURhdGEoKTsKKwkJcmVzdWx0c0xhYmVsLnNldExheW91dERhdGEocmVzdWx0c0Zvcm1EYXRhKTsKKwkJcmVzdWx0c0Zvcm1EYXRhLnRvcCA9IG5ldyBGb3JtQXR0YWNobWVudCgwLCAwKTsKKwkJcmVzdWx0c0Zvcm1EYXRhLmxlZnQgPSBuZXcgRm9ybUF0dGFjaG1lbnQoMjUsIDApOworCQlyZXN1bHRzRm9ybURhdGEucmlnaHQgPSBuZXcgRm9ybUF0dGFjaG1lbnQoNzUsIDApOworCisJCWludCBzcGFjZXIgPSAxMDsKKwkJaW50IGJ1dHRvbnNwYWNlciA9IDU7CisJCQorICAgICAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisJCS8vIFRleHRGaWVsZCBmb2xkZXIgbGFiZWwKKwkJZmluYWwgRm9ybURhdGEgZmlyc3RTY2VuYXJpb0ZvbGRlckxhYmVsRm9ybURhdGEgPSBuZXcgRm9ybURhdGEoKTsKKwkJLy8gcHJvcGVydHlTZWxlY3RvckZvcm1EYXRhLnRvcCA9IG5ldyBGb3JtQXR0YWNobWVudChjU1ZMb2dnZXJDYW52YXMsCisJCS8vIDApOworCQlmaXJzdFNjZW5hcmlvRm9sZGVyTGFiZWxGb3JtRGF0YS50b3AgPSBuZXcgRm9ybUF0dGFjaG1lbnQoaWRlbnRpZmlhYmxlVGl0bGUsIHNwYWNlcik7CisJCS8vZmlyc3RTY2VuYXJpb0ZvbGRlckxhYmVsRm9ybURhdGEuYm90dG9tID0gbmV3IEZvcm1BdHRhY2htZW50KGJvdHRvbSwgMCk7CisJCWZpcnN0U2NlbmFyaW9Gb2xkZXJMYWJlbEZvcm1EYXRhLmxlZnQgPSBuZXcgRm9ybUF0dGFjaG1lbnQoMCwgMCk7CisJCWZpcnN0U2NlbmFyaW9Gb2xkZXJMYWJlbEZvcm1EYXRhLnJpZ2h0ID0gbmV3IEZvcm1BdHRhY2htZW50KDE1LCAwKTsKKwkJZmlyc3RTY2VuYXJpb0ZvbGRlckxhYmVsLnNldExheW91dERhdGEoZmlyc3RTY2VuYXJpb0ZvbGRlckxhYmVsRm9ybURhdGEpOworCisJCS8vIGZpcnN0IHRleHQgZmllbGQgZm9yIHBhcmFtZXRlciBFc3RpbWF0b3IKKwkJZmluYWwgRm9ybURhdGEgdGV4dDFGb3JtRGF0YSA9IG5ldyBGb3JtRGF0YSgpOworCQl0ZXh0MUZvcm1EYXRhLnRvcCA9IG5ldyBGb3JtQXR0YWNobWVudChpZGVudGlmaWFibGVUaXRsZSwgc3BhY2VyKTsKKwkJdGV4dDFGb3JtRGF0YS5sZWZ0ID0gbmV3IEZvcm1BdHRhY2htZW50KGZpcnN0U2NlbmFyaW9Gb2xkZXJMYWJlbCwgNSk7CisJCXRleHQxRm9ybURhdGEucmlnaHQgPSBuZXcgRm9ybUF0dGFjaG1lbnQoODUsIDApOworCQl0ZXh0MS5zZXRMYXlvdXREYXRhKHRleHQxRm9ybURhdGEpOworCQkKKwkJQnV0dG9uIHNlbGVjdEZvbGRlcjFCdXR0b24gPSBuZXcgQnV0dG9uKHRoaXMsIFNXVC5OT05FKTsKKwkJc2VsZWN0Rm9sZGVyMUJ1dHRvbi5zZXRUZXh0KE1lc3NhZ2VzLmdldFN0cmluZygiTFlBLlNFTEVDVEZPTERFUiIpKTsKKwkJZmluYWwgRm9ybURhdGEgc2VsZWN0Rm9sZGVyMUZvcm1EYXRhID0gbmV3IEZvcm1EYXRhKCk7CisJCXNlbGVjdEZvbGRlcjFGb3JtRGF0YS50b3AgPSBuZXcgRm9ybUF0dGFjaG1lbnQoaWRlbnRpZmlhYmxlVGl0bGUsIGJ1dHRvbnNwYWNlcik7CisJCS8vc2VsZWN0Rm9sZGVyMUZvcm1EYXRhLmJvdHRvbSA9IG5ldyBGb3JtQXR0YWNobWVudChib3R0b20sIDApOworCQlzZWxlY3RGb2xkZXIxRm9ybURhdGEubGVmdCA9IG5ldyBGb3JtQXR0YWNobWVudCh0ZXh0MSwgNSk7CisJCXNlbGVjdEZvbGRlcjFCdXR0b24uc2V0TGF5b3V0RGF0YShzZWxlY3RGb2xkZXIxRm9ybURhdGEpOworCQkKKwkJZmluYWwgU2hlbGwgc2hlbGwgPSB0aGlzLmdldFNoZWxsKCk7CisJCQorCQlzZWxlY3RGb2xkZXIxQnV0dG9uLmFkZFNlbGVjdGlvbkxpc3RlbmVyKG5ldyBTZWxlY3Rpb25BZGFwdGVyKCkgeworCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgdm9pZCB3aWRnZXRTZWxlY3RlZChAU3VwcHJlc3NXYXJuaW5ncygidW51c2VkIikKKwkJCWZpbmFsIFNlbGVjdGlvbkV2ZW50IGUpIHsKKwkJCQlmaW5hbCBEaXJlY3RvcnlEaWFsb2cgZGQgPSBuZXcgRGlyZWN0b3J5RGlhbG9nKAorCQkJCQkJc2hlbGwsIFNXVC5PUEVOKTsKKwkJCQkJZGQuc2V0VGV4dChNZXNzYWdlcy5nZXRTdHJpbmcoIkxZQS5TRUxFQ1RGT0xERVJESUFMT0ciKSk7IC8vJE5PTi1OTFMtMSQKKwkJCQkJU3RyaW5nIGJlZ2luU2VhcmNoID0gdGV4dDEuZ2V0VGV4dCgpOworCQkJCQlpZigoYmVnaW5TZWFyY2g9PW51bGwpfHwoYmVnaW5TZWFyY2gubGVuZ3RoKCk8MSkpIGJlZ2luU2VhcmNoID0gUk9PVF9QQVRIOworCQkJCQkKKwkJCQkJZGQuc2V0RmlsdGVyUGF0aChiZWdpblNlYXJjaCk7CisJCQkJCWZpbmFsIFN0cmluZyBzZWxlY3RlZCA9IGRkLm9wZW4oKTsKKwkJCQkJaWYoc2VsZWN0ZWQhPW51bGwpIHRleHQxLnNldFRleHQoc2VsZWN0ZWQpOworCQkJfQorCQl9KTsKKyAgICAgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworCQkKKwkvLwlib3R0b20gKz0gZGVsdGFCb3R0b207CisJCQorICAgICAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisJCS8vIFRleHRGaWVsZCBmb2xkZXIgbGFiZWwKKwkJZmluYWwgRm9ybURhdGEgc2Vjb25kU2NlbmFyaW9Gb2xkZXJMYWJlbEZvcm1EYXRhID0gbmV3IEZvcm1EYXRhKCk7CisJCS8vIHByb3BlcnR5U2VsZWN0b3JGb3JtRGF0YS50b3AgPSBuZXcgRm9ybUF0dGFjaG1lbnQoY1NWTG9nZ2VyQ2FudmFzLAorCQkvLyAwKTsKKwkJc2Vjb25kU2NlbmFyaW9Gb2xkZXJMYWJlbEZvcm1EYXRhLnRvcCA9IG5ldyBGb3JtQXR0YWNobWVudChmaXJzdFNjZW5hcmlvRm9sZGVyTGFiZWwsIHNwYWNlcik7CisJCXNlY29uZFNjZW5hcmlvRm9sZGVyTGFiZWxGb3JtRGF0YS5sZWZ0ID0gbmV3IEZvcm1BdHRhY2htZW50KDAsIDApOworCQlzZWNvbmRTY2VuYXJpb0ZvbGRlckxhYmVsRm9ybURhdGEucmlnaHQgPSBuZXcgRm9ybUF0dGFjaG1lbnQoMTUsIDApOworCQlzZWNvbmRTY2VuYXJpb0ZvbGRlckxhYmVsLnNldExheW91dERhdGEoc2Vjb25kU2NlbmFyaW9Gb2xkZXJMYWJlbEZvcm1EYXRhKTsKKworCQkvLyBmaXJzdCB0ZXh0IGZpZWxkIGZvciBwYXJhbWV0ZXIgRXN0aW1hdG9yCisJCWZpbmFsIEZvcm1EYXRhIHRleHQyRm9ybURhdGEgPSBuZXcgRm9ybURhdGEoKTsKKwkJdGV4dDJGb3JtRGF0YS50b3AgPSBuZXcgRm9ybUF0dGFjaG1lbnQoZmlyc3RTY2VuYXJpb0ZvbGRlckxhYmVsLCBzcGFjZXIpOworCQl0ZXh0MkZvcm1EYXRhLmxlZnQgPSBuZXcgRm9ybUF0dGFjaG1lbnQoc2Vjb25kU2NlbmFyaW9Gb2xkZXJMYWJlbCwgNSk7CisJCXRleHQyRm9ybURhdGEucmlnaHQgPSBuZXcgRm9ybUF0dGFjaG1lbnQoODUsIDApOworCQl0ZXh0Mi5zZXRMYXlvdXREYXRhKHRleHQyRm9ybURhdGEpOworCQkKKwkJQnV0dG9uIHNlbGVjdEZvbGRlcjJCdXR0b24gPSBuZXcgQnV0dG9uKHRoaXMsIFNXVC5OT05FKTsKKwkJc2VsZWN0Rm9sZGVyMkJ1dHRvbi5zZXRUZXh0KE1lc3NhZ2VzLmdldFN0cmluZygiTFlBLlNFTEVDVEZPTERFUiIpKTsKKwkJZmluYWwgRm9ybURhdGEgc2VsZWN0Rm9sZGVyMkZvcm1EYXRhID0gbmV3IEZvcm1EYXRhKCk7CisJCXNlbGVjdEZvbGRlcjJGb3JtRGF0YS50b3AgPSBuZXcgRm9ybUF0dGFjaG1lbnQoZmlyc3RTY2VuYXJpb0ZvbGRlckxhYmVsLCBidXR0b25zcGFjZXIpOworCQlzZWxlY3RGb2xkZXIyRm9ybURhdGEubGVmdCA9IG5ldyBGb3JtQXR0YWNobWVudCh0ZXh0MiwgNSk7CisJCXNlbGVjdEZvbGRlcjJCdXR0b24uc2V0TGF5b3V0RGF0YShzZWxlY3RGb2xkZXIyRm9ybURhdGEpOworCQkKKwkJc2VsZWN0Rm9sZGVyMkJ1dHRvbi5hZGRTZWxlY3Rpb25MaXN0ZW5lcihuZXcgU2VsZWN0aW9uQWRhcHRlcigpIHsKKwkJCUBPdmVycmlkZQorCQkJcHVibGljIHZvaWQgd2lkZ2V0U2VsZWN0ZWQoQFN1cHByZXNzV2FybmluZ3MoInVudXNlZCIpCisJCQlmaW5hbCBTZWxlY3Rpb25FdmVudCBlKSB7CisJCQkJZmluYWwgRGlyZWN0b3J5RGlhbG9nIGRkID0gbmV3IERpcmVjdG9yeURpYWxvZygKKwkJCQkJCXNoZWxsLCBTV1QuT1BFTik7CisJCQkJCWRkLnNldFRleHQoU0VMRUNUX0ZPTERFUl9ESUFMT0dfVEVYVCk7IC8vJE5PTi1OTFMtMSQKKwkJCQkJU3RyaW5nIGJlZ2luU2VhcmNoID0gdGV4dDIuZ2V0VGV4dCgpOworCQkJCQlpZigoYmVnaW5TZWFyY2g9PW51bGwpfHwoYmVnaW5TZWFyY2gubGVuZ3RoKCk8MSkpIGJlZ2luU2VhcmNoID0gUk9PVF9QQVRIOworCQkJCQkKKwkJCQkJZGQuc2V0RmlsdGVyUGF0aChiZWdpblNlYXJjaCk7CisJCQkJCWZpbmFsIFN0cmluZyBzZWxlY3RlZCA9IGRkLm9wZW4oKTsKKwkJCQkJaWYoc2VsZWN0ZWQhPW51bGwpIHRleHQyLnNldFRleHQoc2VsZWN0ZWQpOworCQkJfQorCQl9KTsKKwkJCisJCS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKwkJCisJLy8JYm90dG9tICs9IGRlbHRhQm90dG9tOworCQkvLyBBbmFseXplQnV0dG9uCisJCWZpbmFsIEZvcm1EYXRhIGFuYWx5c2lzQnV0dG9uRm9ybURhdGEgPSBuZXcgRm9ybURhdGEoKTsKKwkJLy8gcHJvcGVydHlTZWxlY3RvckZvcm1EYXRhWC50b3AgPSBuZXcgRm9ybUF0dGFjaG1lbnQocHJvcGVydHlTZWxlY3RvclksCisJCS8vIDApOworCQlhbmFseXNpc0J1dHRvbkZvcm1EYXRhLnRvcCA9IG5ldyBGb3JtQXR0YWNobWVudChzZWNvbmRTY2VuYXJpb0ZvbGRlckxhYmVsLCBzcGFjZXIpOworCQkvL2FuYWx5c2lzQnV0dG9uRm9ybURhdGEuYm90dG9tID0gbmV3IEZvcm1BdHRhY2htZW50KGJvdHRvbSwgMCk7CisJCWFuYWx5c2lzQnV0dG9uRm9ybURhdGEubGVmdCA9IG5ldyBGb3JtQXR0YWNobWVudCgwLCAwKTsKKwkJYW5hbHlzaXNCdXR0b25Gb3JtRGF0YS5yaWdodCA9IG5ldyBGb3JtQXR0YWNobWVudCgxMDAsIDApOworCQlhbmFseXplQnV0dG9uQ29tcG9zaXRlLnNldExheW91dERhdGEoYW5hbHlzaXNCdXR0b25Gb3JtRGF0YSk7CisJCQorCQkKKwkJCisJCS8vIFRyYWplY3RvcmllcworCQlseWFwdW5vdlRyYWplY3RvcnlDYW52YXMgPSBuZXcgTHlhcHVub3ZUcmFqZWN0b3J5Q2FudmFzKHRoaXMpOworCQlmaW5hbCBGb3JtRGF0YSB0cmFqZWN0b3J5Q2hhcnRGb3JtRGF0YSA9IG5ldyBGb3JtRGF0YSgpOworCQlseWFwdW5vdlRyYWplY3RvcnlDYW52YXMuc2V0TGF5b3V0RGF0YSh0cmFqZWN0b3J5Q2hhcnRGb3JtRGF0YSk7CisJCXRyYWplY3RvcnlDaGFydEZvcm1EYXRhLnRvcCA9IG5ldyBGb3JtQXR0YWNobWVudChhbmFseXplQnV0dG9uQ29tcG9zaXRlLCAwKTsKKwkJdHJhamVjdG9yeUNoYXJ0Rm9ybURhdGEuYm90dG9tID0gbmV3IEZvcm1BdHRhY2htZW50KDEwMCwgMCk7CisJCXRyYWplY3RvcnlDaGFydEZvcm1EYXRhLmxlZnQgPSBuZXcgRm9ybUF0dGFjaG1lbnQoMCwgMCk7CisJCXRyYWplY3RvcnlDaGFydEZvcm1EYXRhLnJpZ2h0ID0gbmV3IEZvcm1BdHRhY2htZW50KDUwLCAwKTsKKwkJCisJCS8vIGRpdmVyZ2VuY2UgZ3JhcGgKKwkJdGltZVNlcmllc0NhbnZhcyA9IG5ldyBUaW1lU2VyaWVzQ2FudmFzKHRoaXMsCisJCQkJCQkJCQkJCQkJTWVzc2FnZXMuZ2V0U3RyaW5nKCJMWUEuRElWRVJHRU5DRUxFR0VORCIpLAorCQkJCQkJCQkJCQkJCU1lc3NhZ2VzLmdldFN0cmluZygiTFlBLkRJVkVSR0VOQ0VZQVhJUyIpLAorCQkJCQkJCQkJCQkJCU1lc3NhZ2VzLmdldFN0cmluZygiTFlBLkRJVkVSR0VOQ0VZQVhJUyIpLAorCQkJCQkJCQkJCQkJCWZvcmVHcm91bmQsCisJCQkJCQkJCQkJCQkJYmFja2dyb3VuZEdyb3VuZCwKKwkJCQkJCQkJCQkJCQlmcmFtZUNvbG9yLCAwKTsKKwkJCisJCQorCQkKKwkJZmluYWwgRm9ybURhdGEgYW5hbHlzaXNDaGFydEZvcm1EYXRhID0gbmV3IEZvcm1EYXRhKCk7CisJCXRpbWVTZXJpZXNDYW52YXMuc2V0TGF5b3V0RGF0YShhbmFseXNpc0NoYXJ0Rm9ybURhdGEpOworCQlhbmFseXNpc0NoYXJ0Rm9ybURhdGEudG9wID0gbmV3IEZvcm1BdHRhY2htZW50KGFuYWx5emVCdXR0b25Db21wb3NpdGUsIDApOworCQlhbmFseXNpc0NoYXJ0Rm9ybURhdGEuYm90dG9tID0gbmV3IEZvcm1BdHRhY2htZW50KDEwMCwgMCk7CisJCWFuYWx5c2lzQ2hhcnRGb3JtRGF0YS5sZWZ0ID0gbmV3IEZvcm1BdHRhY2htZW50KDUwLCAwKTsKKwkJYW5hbHlzaXNDaGFydEZvcm1EYXRhLnJpZ2h0ID0gbmV3IEZvcm1BdHRhY2htZW50KDEwMCwgMCk7CisJCQorCQkKKwkJZmluYWwgUHJvZ3Jlc3NNb25pdG9yRGlhbG9nIHByb2dyZXNzRGlhbG9nID0gbmV3IFByb2dyZXNzTW9uaXRvckRpYWxvZyh0aGlzLmdldFNoZWxsKCkpOworCisJCWFuYWx5emVCdXR0b24uYWRkU2VsZWN0aW9uTGlzdGVuZXIobmV3IFNlbGVjdGlvbkFkYXB0ZXIoKSB7CisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyB2b2lkIHdpZGdldFNlbGVjdGVkKEBTdXBwcmVzc1dhcm5pbmdzKCJ1bnVzZWQiKQorCQkJZmluYWwgU2VsZWN0aW9uRXZlbnQgZSkgeworCQkJCQorCQkJCVN0cmluZyByZWZlcmVuY2VEaXJlY3RvcnkgID0gdGV4dDEuZ2V0VGV4dCgpOworCQkJCVN0cmluZyBjb21wYXJpc29uRGlyZWN0b3J5ID0gdGV4dDIuZ2V0VGV4dCgpOworCQkJCURpc3BsYXkgZGlzcGxheSA9IHBhcmVudENvbXBvc2l0ZS5nZXREaXNwbGF5KCk7CisJCQkJLyoKKwkJCQkgKiByZXNldCB0aGUgbGFiZWwgdGV4dAorCQkJCSAqLworCQkJICAgIGlkZW50aWZpYWJsZVRpdGxlLnNldFRleHQoTWVzc2FnZXMuZ2V0U3RyaW5nKCJMWUEuVElUTEUiKSk7CisJCQkgICAgcmVzdWx0c0xhYmVsLnNldFRleHQoTWVzc2FnZXMuZ2V0U3RyaW5nKCJMWUEuV09SS0lORyIpKTsKKwkJCSAgICAvKgorCQkJCSAqIHJlaW5pdGlhbGl6ZSB0aGUgZ3JhcGgKKwkJCQkgKi8KKwkJCQljb21wYXJpc29uVmFsdWVzLmNsZWFyKCk7CisJCQkJY3VtdWxhdGl2ZURldmlhdGlvbi5jbGVhcigpOworCQkJCWx5YXB1bm92VHJhamVjdG9yeUNhbnZhcy5yZXNldCgpOworCQkJICAgIAorCQkJCS8qCisJCQkJICogVkFMSURBVEUgdGhlIHRleHQgaW5wdXQgRmllbGRzCisJCQkJICovCisJCQkJaWYoIWFuYWx5emVyLnZhbGlkYXRlKHJlZmVyZW5jZURpcmVjdG9yeSkpIHsKKwkJCQkJaWRlbnRpZmlhYmxlVGl0bGUuc2V0VGV4dChTY2VuYXJpb0FuYWx5c2lzU3VpdGUuTk9UX0ZPVU5EX01TRyk7CisJCQkJCXRleHQxLnNldFRleHQoIiIpOworCQkJCX0KKyAgICAgICAgICAgICAgICBpZighYW5hbHl6ZXIudmFsaWRhdGUoY29tcGFyaXNvbkRpcmVjdG9yeSkpIHsKKyAgICAgICAgICAgICAgICAJaWRlbnRpZmlhYmxlVGl0bGUuc2V0VGV4dChTY2VuYXJpb0FuYWx5c2lzU3VpdGUuTk9UX0ZPVU5EX01TRyk7CisgICAgICAgICAgICAgICAgCXRleHQyLnNldFRleHQoIiIpOworCQkJCX0KKyAgICAgICAgICAgICAgICBpZigoIWFuYWx5emVyLnZhbGlkYXRlKHJlZmVyZW5jZURpcmVjdG9yeSkpIHx8ICghYW5hbHl6ZXIudmFsaWRhdGUoY29tcGFyaXNvbkRpcmVjdG9yeSkpKSB7CisgICAgICAgICAgICAgICAgCXJldHVybjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgCisJCQkJdHJ5IHsKKwkJCQkJCisJCQkJCUxpc3Q8UGhhc2VTcGFjZUNvb3JkaW5hdGVbXT4gZGF0YSA9IGFuYWx5emVyLmdldEx5YXB1bm92VHJhamVjdG9yeShyZWZlcmVuY2VEaXJlY3RvcnksIGNvbXBhcmlzb25EaXJlY3RvcnksIHByb2dyZXNzRGlhbG9nKTsKKwkJCQkJaWYoZGF0YT09bnVsbCkgeworCQkJCQkJcmVzdWx0c0xhYmVsLnNldEJhY2tncm91bmQoZGlzcGxheS5nZXRTeXN0ZW1Db2xvcihTV1QuQ09MT1JfUkVEKSk7CisJCQkJCSAgICByZXN1bHRzTGFiZWwuc2V0VGV4dChNZXNzYWdlcy5nZXRTdHJpbmcoIkxZQS5FUlJPUjEiKSk7CisJCQkJCSAgICAKKwkJCQkJfSBlbHNlIHsKKwkJCQkJCWNvbXBhcmlzb25WYWx1ZXMuYWRkQWxsKGRhdGEpOworCQkJCQkJLy9zdWNjZXNzLi4uIHJlbWVtYmVyIHRoZSB1c2VycyBwcmVmcworCQkJCQkJcHJlZnMuc2V0UmVjZW50Rm9sZGVyKFBSSU1BUllfRk9MREVSX0tFWSxyZWZlcmVuY2VEaXJlY3RvcnkpOworCQkJCQkJcHJlZnMuc2V0UmVjZW50Rm9sZGVyKFNFQ09OREFSWV9GT0xERVJfS0VZLGNvbXBhcmlzb25EaXJlY3RvcnkpOworCQkJCQkJCisJCQkJCQljdW11bGF0aXZlRGV2aWF0aW9uLmFkZEFsbChTY2VuYXJpb0FuYWx5c2lzU3VpdGUuZ2V0Q3VtdWxhdGl2ZVBoYXNlU3BhY2VEZXZpYXRpb24oY29tcGFyaXNvblZhbHVlcykpOworCQkJCQkJCisJCQkJCQkvLworCQkJCQkJLy8gbm93IHVkYXRlIGV2ZXJ5dGhpbmcKKwkJCQkJCS8vCisJCQkJCQlseWFwdW5vdlRyYWplY3RvcnlDYW52YXMuZHJhdygpOworCQkJCQkJLy8gTG9nIHRoZSB0cmFqZWN0b3J5IGRhdGEKKwkJCQkJCVN0cmluZyBvdXRGaWxlTmFtZSA9IExZQVBVTk9WX0ZJTEVfUFJFRklYKyJfIisKKwkJCQkJCSBnZXRTY2VuYXJpb05hbWVGcm9tRGlyZWN0b3J5TmFtZShyZWZlcmVuY2VEaXJlY3RvcnkpKworCQkJCQkJICJfIisKKwkJCQkJCSBnZXRTY2VuYXJpb05hbWVGcm9tRGlyZWN0b3J5TmFtZShjb21wYXJpc29uRGlyZWN0b3J5KTsKKwkJCQkJCQorCQkJCQkJQ1NWQW5hbHlzaXNXcml0ZXIgd3JpdGVyID0gbmV3IENTVkFuYWx5c2lzV3JpdGVyKG91dEZpbGVOYW1lKTsKKwkJCQkJCXdyaXRlci5sb2dEYXRhKDIsY29tcGFyaXNvblZhbHVlcyk7CisKKwkJCQkJCS8vIExvZyB0aGUgY3VtdWxhdGl2ZSBkZXZpYXRpb24gZGF0YQorCQkJCQkJb3V0RmlsZU5hbWUgPSBMWUFQVU5PVl9ERVZJQVRJT05fRklMRV9QUkVGSVgrIl8iKworCQkJCQkJIGdldFNjZW5hcmlvTmFtZUZyb21EaXJlY3RvcnlOYW1lKHJlZmVyZW5jZURpcmVjdG9yeSkrCisJCQkJCQkgIl8iKworCQkJCQkJIGdldFNjZW5hcmlvTmFtZUZyb21EaXJlY3RvcnlOYW1lKGNvbXBhcmlzb25EaXJlY3RvcnkpOworCQkJCQkJIENTVkFuYWx5c2lzV3JpdGVyIHdyaXRlcjIgPSBuZXcgQ1NWQW5hbHlzaXNXcml0ZXIob3V0RmlsZU5hbWUpOworCQkJCQkJIHdyaXRlcjIubG9nRGF0YShjdW11bGF0aXZlRGV2aWF0aW9uKTsKKwkJCQkJCSB0aW1lU2VyaWVzQ2FudmFzLmRyYXcoKTsKKwkJCQkJCSByZXN1bHRzTGFiZWwuc2V0VGV4dChNZXNzYWdlcy5nZXRTdHJpbmcoIkxZQS5DT01QTEVURSIpKTsKKwkJCQkJfQorIAkJCQkJCisJCQkJfSBjYXRjaChTY2VuYXJpb0luaXRpYWxpemF0aW9uRXhjZXB0aW9uIHNpZSkgeworCQkJCQlBY3RpdmF0b3IubG9nRXJyb3IoIiIsIHNpZSk7CisJCQkJfQorCQkJCQorCQkJCS8vIGRvbmUKKwkJCX0KKwkJfSk7CisJCQorCX0gLy8gY3JlYXRlQ29udGVudHMKKwkKKwkKKwkKKworCisJLyoqCisJICogQHBhcmFtIGRpck5hbWUKKwkgKiBAcmV0dXJuIHNob3J0IG5hbWUgb2Ygc2NlbmFyaW8KKwkgKi8KKwlwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRTY2VuYXJpb05hbWVGcm9tRGlyZWN0b3J5TmFtZShTdHJpbmcgZGlyTmFtZSkgeworCQlpbnQgbGFzdCA9IGRpck5hbWUubGFzdEluZGV4T2YoIi8iKTsKKwkJaW50IGxhc3QyID0gZGlyTmFtZS5sYXN0SW5kZXhPZigiXFwiKTsKKwkJaWYgKGxhc3QyID4gbGFzdCkKKwkJCWxhc3QgPSBsYXN0MjsKKwkJaWYgKGxhc3QgPD0gMCkKKwkJCWxhc3QgPSAwOworCQlTdHJpbmcgcmV0VmFsID0gZGlyTmFtZS5zdWJzdHJpbmcobGFzdCArIDEsIGRpck5hbWUubGVuZ3RoKCkpOworCQlyZXR1cm4gcmV0VmFsOworCX0KKwkKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgdGhlIHJlc3VsdHMgb2YgYSBjb21wYXJpc29uIG9mIHR5cGUgY29tcGFyaXNvblR5cGUKKwkgKiBhcyBhbiBhcnJheSBvZiBkb3VibGUuIAorCSAqIAorCSAqIEBwYXJhbSB0cmFqZWN0b3J5IHRoZSB0cmFqZWN0b3J5IHRvIHJldHVybgorCSAqIEByZXR1cm4gY29tcGFyaXNvbgorCSAqLworCXB1YmxpYyBQaGFzZVNwYWNlQ29vcmRpbmF0ZVtdIGdldFBvaW50VmFsdWVzKGludCB0cmFqZWN0b3J5KSB7CisJCQorCQlyZXR1cm4gY29tcGFyaXNvblZhbHVlcy5nZXQodHJhamVjdG9yeSk7CisJfQorCQorCS8qKgorCSAqIHJldHVybnMgdGhlIGFuYWx5c2lzIG9mIGx5YXB1bm92IHRyYWN0b3J5KGllcykgcmVsYXRpdmUgdG8gcmVmZXJlbmNlLgorCSAqIEBwYXJhbSBjaGFydEluZGV4IG5vdCB1c2VkIChvbmx5IG9uZSBjaGFydCkKKwkgKiBAcGFyYW0gdHJhamVjdG9yeSAKKwkgKiBAcmV0dXJuIEN1bXVsYXRpdmUgZGV2aWF0aW9uIGZyb20gcmVmZXJlbmNlIHRyYWplY3RvcnkKKwkgKi8KKwlAU3VwcHJlc3NXYXJuaW5ncygiYm94aW5nIikKKwlAT3ZlcnJpZGUKKwlwdWJsaWMgZG91YmxlW10gZ2V0VmFsdWVzKGludCBjaGFydEluZGV4LCBpbnQgdHJhamVjdG9yeSkgeworCQkKKwkJRUxpc3Q8RG91YmxlPiBsID0gY3VtdWxhdGl2ZURldmlhdGlvbi5nZXQodHJhamVjdG9yeSk7CisJCWRvdWJsZSBbXSByZXMgPSBuZXcgZG91YmxlW2wuc2l6ZSgpXTsKKwkJZm9yKGludCBpPTA7aTxyZXMubGVuZ3RoOysraSkgcmVzW2ldID0gbC5nZXQoaSk7CisJCXJldHVybiByZXM7CisJfQorCisJLyoqCisJICogTm90IHVzZWQKKwkgKiBAcGFyYW0gY2hhcnRJbmRleCBub3QgdXNlZCAob25seSBvbmUgY2hhcnQpCisJICogQHBhcmFtIHN0YXRlCisJICogQHJldHVybiBwcm9wZXJ0eSBuYW1lCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIFN0cmluZyBnZXRQcm9wZXJ0eShpbnQgY2hhcnRJbmRleCwgaW50IHN0YXRlKSB7CisJCXJldHVybiBNZXNzYWdlcy5nZXRTdHJpbmcoIkxZQS5ESVZFUkdFTkNFWUFYSVMiKTsKKwl9CisJCisJLyoqCisJICogT25seSBvbmUgcHJvcGVydHkgdG8gcGxvdCA9IHRoZSBSTVMgZGlmZmVyZW5jZQorCSAqIEBwYXJhbSBjaGFydEluZGV4IG5vdCB1c2VkIChvbmx5IG9uZSBjaGFydCkKKwkgKiBAcmV0dXJuIHRoZSBudW1iZXIgb2YgcHJvcGVydGllcworCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS51dGlsLmFuYWx5c2lzLnZpZXdzLkFuYWx5c2lzQ29udHJvbCNnZXROdW1Qcm9wZXJ0aWVzKGludCBjaGFydEluZGV4KQorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBpbnQgZ2V0TnVtUHJvcGVydGllcyhpbnQgY2hhcnRJbmRleCkgeworCQlyZXR1cm4gMTsKKwl9CisKKworCQorCQorCS8qKgorCSAqIHRvIHJlbW92ZSB0aGUgY29udHJvbCBlLmcuIGJ5IGEgcmVtb3ZlIGJ1dHRvbiBldmVudAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIHJlbW92ZSgpIHsKKwkJdXBkYXRlU3RhdHVzTGFiZWwoKTsKKwl9CisKKwkKKwkKKworCXByb3RlY3RlZCB2b2lkIHVwZGF0ZVN0YXR1c0xhYmVsKCkgeworCQlzdGF0dXNMYWJlbC5zZXRUZXh0KE1lc3NhZ2VzLmdldFN0cmluZygiQ09NTU9OLlNUQVRVUyIpKTsKKwl9CisJCisJCisKKwkvKioKKwkgKiBJbml0aWFsaXplIHRoZSBoZWFkZXIgbGFiZWwKKwkgKiAKKwkgKiBAcGFyYW0gZm9sZGVyTmFtZQorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIGluaXRpYWxpemVIZWFkZXIoU3RyaW5nIGZvbGRlck5hbWUpIHsKKwkJc2ltdWxhdGlvbk5hbWVMYWJlbC5zZXRUZXh0KCJhbmFseXppbmcgIitmb2xkZXJOYW1lKTsKKworCX0gLy8gaW5pdGlhbGl6ZUZyb21TaW11bGF0aW9uCisKKworCQorCQorCQorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5XaWRnZXQjZGlzcG9zZSgpCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgZGlzcG9zZSgpIHsKKwkJCQkJCQorCQlzdXBlci5kaXNwb3NlKCk7CisJCQorCX0gLy8gZGlzcG9zZQorCisJLyoqCisJICogRWFjaCBDb250cm9sIGNsYXNzIG1heSBhZGQgb2JqZWN0cyB0byB0aGlzIG1hcAorCSAqIEByZXR1cm4gdGhlIGNvbnRyb2wgcGFyYW1ldGVycyBtYXBzCisJICovCisJcHVibGljIE1hcDxTdHJpbmcsIE9iamVjdD4gZ2V0Q29udHJvbFBhcmFtZXRlcnNNYXAoKSB7CisJCS8vIGFkZCBub3RoaW5nIGZvciBub3cKKwkJcmV0dXJuIGNvbnRyb2xQYXJhbWV0ZXJzTWFwOworCX0KKwkKKworfSAvLyBFc3RpbWF0b3JDb250cm9sCmRpZmYgLS1naXQgYS9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLnV0aWwuYW5hbHlzaXMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdXRpbC9hbmFseXNpcy92aWV3cy9MeWFwdW5vdkZhY3RvcnkuamF2YSBiL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0udXRpbC5hbmFseXNpcy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91dGlsL2FuYWx5c2lzL3ZpZXdzL0x5YXB1bm92RmFjdG9yeS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYzMGZhYTQKLS0tIC9kZXYvbnVsbAorKysgYi9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLnV0aWwuYW5hbHlzaXMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdXRpbC9hbmFseXNpcy92aWV3cy9MeWFwdW5vdkZhY3RvcnkuamF2YQpAQCAtMCwwICsxLDUzIEBACisvLyBFc3RpbWF0b3JGYWN0b3J5LmphdmEKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS51dGlsLmFuYWx5c2lzLnZpZXdzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA3LCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZTsKKworLyoqCisgKiBUaGlzIGNsYXNzIGlzIGEgZmFjdG9yeSBmb3IgY3JlYXRpbmcge0BsaW5rIEFuYWx5c2lzQ29udHJvbH0gaW5zdGFuY2VzLgorICovCitwdWJsaWMgY2xhc3MgTHlhcHVub3ZGYWN0b3J5IGltcGxlbWVudHMgQW5hbHlzaXNDb250cm9sRmFjdG9yeSB7CisKKwkvKioKKwkgKiBwdWJsaWMgSU5TVEFOQ0UgZm9yIHRoaXMgRmFjdG9yeQorCSAqLworCXB1YmxpYyBzdGF0aWMgTHlhcHVub3ZGYWN0b3J5IElOU1RBTkNFID0gbmV3IEx5YXB1bm92RmFjdG9yeSgpOworCisJLyoqCisJICogQ29uc3RhbnRzIAorCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEFOQUxZU0lTX1RZUEUgPSAiTHlhcHVub3YiOworCQorCisJLyoqCisJICogCisJICogQHBhcmFtIHBhcmVudAorCSAqIEBwYXJhbSBkaXJOYW1lCisJICogQHJldHVybiBuZXcgTHlhcHVub3ZDb250cm9sKCkKKwkgKi8KKwlwdWJsaWMgQW5hbHlzaXNDb250cm9sIGNyZWF0ZShmaW5hbCBDb21wb3NpdGUgcGFyZW50LCBTdHJpbmcgZGlyTmFtZSkgeworCQkJCQorCQlyZXR1cm4gbmV3IEx5YXB1bm92Q29udHJvbChwYXJlbnQpOworCX0KKwkKKworCS8qKgorCSAqIEByZXR1cm4gdHlwZSBvZiBhbmFseXNpcworCSAqIAorCSAqLworCXB1YmxpYyBTdHJpbmcgZ2V0Q29udHJvbFR5cGUoKSB7CisJCXJldHVybiBBTkFMWVNJU19UWVBFOworCX0KKworfSAvLyBFc3RpbWF0b3JGYWN0b3J5CmRpZmYgLS1naXQgYS9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLnV0aWwuYW5hbHlzaXMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdXRpbC9hbmFseXNpcy92aWV3cy9MeWFwdW5vdlRyYWplY3RvcnlDYW52YXMuamF2YSBiL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0udXRpbC5hbmFseXNpcy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91dGlsL2FuYWx5c2lzL3ZpZXdzL0x5YXB1bm92VHJhamVjdG9yeUNhbnZhcy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc3MDYwZDkKLS0tIC9kZXYvbnVsbAorKysgYi9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLnV0aWwuYW5hbHlzaXMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdXRpbC9hbmFseXNpcy92aWV3cy9MeWFwdW5vdlRyYWplY3RvcnlDYW52YXMuamF2YQpAQCAtMCwwICsxLDQwMCBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnV0aWwuYW5hbHlzaXMudmlld3M7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmJpcnQuY2hhcnQuZGV2aWNlLklEZXZpY2VSZW5kZXJlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5iaXJ0LmNoYXJ0LmV4Y2VwdGlvbi5DaGFydEV4Y2VwdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5iaXJ0LmNoYXJ0LmZhY3RvcnkuR2VuZXJhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmJpcnQuY2hhcnQubW9kZWwuQ2hhcnQ7CitpbXBvcnQgb3JnLmVjbGlwc2UuYmlydC5jaGFydC5tb2RlbC5DaGFydFdpdGhBeGVzOworaW1wb3J0IG9yZy5lY2xpcHNlLmJpcnQuY2hhcnQubW9kZWwuYXR0cmlidXRlLkF4aXNUeXBlOworaW1wb3J0IG9yZy5lY2xpcHNlLmJpcnQuY2hhcnQubW9kZWwuYXR0cmlidXRlLkJvdW5kczsKK2ltcG9ydCBvcmcuZWNsaXBzZS5iaXJ0LmNoYXJ0Lm1vZGVsLmF0dHJpYnV0ZS5Db2xvckRlZmluaXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuYmlydC5jaGFydC5tb2RlbC5hdHRyaWJ1dGUuSW50ZXJzZWN0aW9uVHlwZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5iaXJ0LmNoYXJ0Lm1vZGVsLmF0dHJpYnV0ZS5UaWNrU3R5bGU7CitpbXBvcnQgb3JnLmVjbGlwc2UuYmlydC5jaGFydC5tb2RlbC5hdHRyaWJ1dGUuaW1wbC5Cb3VuZHNJbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLmJpcnQuY2hhcnQubW9kZWwuYXR0cmlidXRlLmltcGwuQ29sb3JEZWZpbml0aW9uSW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5iaXJ0LmNoYXJ0Lm1vZGVsLmNvbXBvbmVudC5BeGlzOworaW1wb3J0IG9yZy5lY2xpcHNlLmJpcnQuY2hhcnQubW9kZWwuY29tcG9uZW50LlNlcmllczsKK2ltcG9ydCBvcmcuZWNsaXBzZS5iaXJ0LmNoYXJ0Lm1vZGVsLmNvbXBvbmVudC5pbXBsLlNlcmllc0ltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2UuYmlydC5jaGFydC5tb2RlbC5kYXRhLk51bWJlckRhdGFTZXQ7CitpbXBvcnQgb3JnLmVjbGlwc2UuYmlydC5jaGFydC5tb2RlbC5kYXRhLlNlcmllc0RlZmluaXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuYmlydC5jaGFydC5tb2RlbC5kYXRhLmltcGwuTnVtYmVyRGF0YUVsZW1lbnRJbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLmJpcnQuY2hhcnQubW9kZWwuZGF0YS5pbXBsLk51bWJlckRhdGFTZXRJbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLmJpcnQuY2hhcnQubW9kZWwuZGF0YS5pbXBsLlNlcmllc0RlZmluaXRpb25JbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLmJpcnQuY2hhcnQubW9kZWwuaW1wbC5DaGFydFdpdGhBeGVzSW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5iaXJ0LmNoYXJ0Lm1vZGVsLmxheW91dC5MZWdlbmQ7CitpbXBvcnQgb3JnLmVjbGlwc2UuYmlydC5jaGFydC5tb2RlbC5sYXlvdXQuUGxvdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5iaXJ0LmNoYXJ0Lm1vZGVsLnR5cGUuTGluZVNlcmllczsKK2ltcG9ydCBvcmcuZWNsaXBzZS5iaXJ0LmNoYXJ0Lm1vZGVsLnR5cGUuU2NhdHRlclNlcmllczsKK2ltcG9ydCBvcmcuZWNsaXBzZS5iaXJ0LmNoYXJ0Lm1vZGVsLnR5cGUuaW1wbC5TY2F0dGVyU2VyaWVzSW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5iaXJ0LmNoYXJ0LnV0aWwuUGx1Z2luU2V0dGluZ3M7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS51dGlsLmFuYWx5c2lzLkFjdGl2YXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnV0aWwuYW5hbHlzaXMuUGhhc2VTcGFjZUNvb3JkaW5hdGU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LlNXVDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLlBhaW50RXZlbnQ7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5QYWludExpc3RlbmVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ncmFwaGljcy5HQzsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZ3JhcGhpY3MuSW1hZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ2FudmFzOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5XaWRnZXQ7CisKKy8qKgorICogTHlhcHVub3ZDb21wYXJpc29uQ2FudmFzIGlzIGEgc3ViY2xhc3Mgb2Yge0BsaW5rIENhbnZhc30gc3VpdGFibGUgZm9yIGNoYXJ0CisgKiBkcmF3aW5ncy4KKyAqLworcHVibGljIGNsYXNzIEx5YXB1bm92VHJhamVjdG9yeUNhbnZhcyBleHRlbmRzIENhbnZhcyB7CisKKwlwcm90ZWN0ZWQgSURldmljZVJlbmRlcmVyIGlkciA9IG51bGw7CisKKwkvKioKKwkgKiBUaGlzIGlzIHRoZSB7QGxpbmsgQ2hhcnR9IHRoYXQgcGxvdHMgdGhlIHJlbGF0aXZlIHZhbHVlcy4KKwkgKi8KKwlwcm90ZWN0ZWQgQ2hhcnQgY20gPSBudWxsOworCisJLyoqCisJICogVGhlIGNvbnRyb2wgZm9yIHRoaXMgY2FudmFzCisJICovCisJcHJpdmF0ZSBMeWFwdW5vdkNvbnRyb2wgY29udHJvbCA9IG51bGw7CisKKwkvKioKKwkgKiBUaGVzZSBhcmUgdGhlIHZhbHVlcyB0aGF0IHdpbGwgYmUgcGxvdHRlZCBpbiBYCisJICogCisJICovCisJcHJpdmF0ZSBmaW5hbCBMaXN0PExpc3Q8RG91YmxlPj4gcmVsYXRpdmVWYWx1ZXNYID0gbmV3IEFycmF5TGlzdDxMaXN0PERvdWJsZT4+KCk7CisKKwkvKioKKwkgKiBUaGVzZSBhcmUgdGhlIHZhbHVlcyB0aGF0IHdpbGwgYmUgcGxvdHRlZCBpbiBZCisJICogCisJICovCisJcHJpdmF0ZSBmaW5hbCBMaXN0PExpc3Q8RG91YmxlPj4gcmVsYXRpdmVWYWx1ZXNZID0gbmV3IEFycmF5TGlzdDxMaXN0PERvdWJsZT4+KCk7CisKKwkvKioKKwkgKiBDaGFydCBnZW5lcmF0b3IgaW5zdGFuY2UgKHJlZmVyZW5jZSB0byBhIHNpbmdsZXRvbikKKwkgKi8KKwlHZW5lcmF0b3IgZ3I7CisKKwlwcml2YXRlIGZpbmFsIExpc3Q8TGluZVNlcmllcz4gbGluZVNlcmllc0xpc3QgPSBuZXcgQXJyYXlMaXN0PExpbmVTZXJpZXM+KCk7CisJQXhpcyB5QXhpc1ByaW1hcnk7CisJQXhpcyB4QXhpc1ByaW1hcnk7CisJZG91YmxlIG1heFggPSAtMS4wOworCWRvdWJsZSBtYXhZID0gLTEuMDsKKworCUNvbG9yRGVmaW5pdGlvbltdIGxpbmVDb2xvcnMgPSB7IENvbG9yRGVmaW5pdGlvbkltcGwuUkVEKCksCisJCQlDb2xvckRlZmluaXRpb25JbXBsLkJMVUUoKSwgQ29sb3JEZWZpbml0aW9uSW1wbC5PUkFOR0UoKSwKKwkJCUNvbG9yRGVmaW5pdGlvbkltcGwuWUVMTE9XKCksIENvbG9yRGVmaW5pdGlvbkltcGwuR1JFRU4oKSwKKwkJCUNvbG9yRGVmaW5pdGlvbkltcGwuUElOSygpLCBDb2xvckRlZmluaXRpb25JbXBsLkJMQUNLKCkgfTsKKworCS8qKgorCSAqIFRPRE8gZXZlbnR1YWxseSB0aGlzIHNob3VsZCBub3QgYmUgaGFyZCBjb2RlZCBidXQgc2hvdWxkIGJlIGJhc2VkIG9uIHRoZQorCSAqIG51bWJlciBvZiBmaWxlcyBiZWluZyByZWFkIGluIGluIHRoZSBHVUkKKwkgKi8KKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgTlVNX1RSQUpFQ1RPUklFUyA9IDI7CisKKwkvKioKKwkgKiBMYWJlbCBmb3IgVGltZSBhY2Nlc3MgKFRPRE8gbmVlZCB0byBubHMgdGhpcykKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBUSU1FX0xBQkVMID0gInRpbWUiOworCisJLyoqCisJICogTGFiZWwgZm9yIGxpbmUgc2VyaWVzIElkZW50aWZpZXIgKGxlZ2VuZCkKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBSTVNfTEFCRUwgPSAiSVtBXSB2cyBJW0JdIjsKKworCUltYWdlIGltZ0NoYXJ0ID0gbnVsbDsKKwkKKwkvKioKKwkgKiBDb25zdHJ1Y3Rvci4KKwkgKiAKKwkgKiBAcGFyYW0gcGFyZW50CisJICogICAgICAgICAgICB0aGUgU1dUIHBhcmVudCBvZiB0aGUge0BsaW5rIFdpZGdldH0KKwkgKi8KKwlwdWJsaWMgTHlhcHVub3ZUcmFqZWN0b3J5Q2FudmFzKGZpbmFsIENvbXBvc2l0ZSBwYXJlbnQpIHsKKwkJc3VwZXIocGFyZW50LCBTV1QuRE9VQkxFX0JVRkZFUkVEIHwgU1dULkJPUkRFUik7CisJCXdoaWxlIChyZWxhdGl2ZVZhbHVlc1guc2l6ZSgpIDwgTlVNX1RSQUpFQ1RPUklFUykgeworCQkJcmVsYXRpdmVWYWx1ZXNYLmFkZChuZXcgQXJyYXlMaXN0PERvdWJsZT4oKSk7CisJCX0KKwkJd2hpbGUgKHJlbGF0aXZlVmFsdWVzWS5zaXplKCkgPCBOVU1fVFJBSkVDVE9SSUVTKSB7CisJCQlyZWxhdGl2ZVZhbHVlc1kuYWRkKG5ldyBBcnJheUxpc3Q8RG91YmxlPigpKTsKKwkJfQorCQlyZXNldERhdGEoKTsKKwkJZ3IgPSBHZW5lcmF0b3IuaW5zdGFuY2UoKTsKKworCQl0cnkgeworCQkJaWRyID0gUGx1Z2luU2V0dGluZ3MuaW5zdGFuY2UoKS5nZXREZXZpY2UoImR2LlNXVCIpOyAvLyROT04tTkxTLTEkCQkJCisJCX0gY2F0Y2ggKGZpbmFsIENoYXJ0RXhjZXB0aW9uIHBleCkgeworCQkJQWN0aXZhdG9yLmxvZ0Vycm9yKCJQcm9ibGVtIGluaXRpYWxpemluZyBjaGFydCIsIHBleCk7IC8vJE5PTi1OTFMtMSQKKwkJCXJldHVybjsKKwkJfQorCisJCWNvbnRyb2wgPSAoTHlhcHVub3ZDb250cm9sKSBwYXJlbnQ7CisKKwkJY20gPSBjcmVhdGVMeWFwdW5vdlRyYWplY3RvcnlDaGFydChyZWxhdGl2ZVZhbHVlc1gsIHJlbGF0aXZlVmFsdWVzWSwKKwkJCQlNZXNzYWdlcy5nZXRTdHJpbmcoIlBILnRpdGxlIikpOyAvLyROT04tTkxTLTEkCisJCWFkZFBhaW50TGlzdGVuZXIobmV3IFBhaW50TGlzdGVuZXIoKSB7CisJCQlwdWJsaWMgdm9pZCBwYWludENvbnRyb2woZmluYWwgUGFpbnRFdmVudCBwZSkgeworCisJCQkJZmluYWwgQ29tcG9zaXRlIHNvdXJjZSA9IChDb21wb3NpdGUpIHBlLmdldFNvdXJjZSgpOworCQkJCWZpbmFsIG9yZy5lY2xpcHNlLnN3dC5ncmFwaGljcy5SZWN0YW5nbGUgZCA9IHNvdXJjZQorCQkJCQkJLmdldENsaWVudEFyZWEoKTsKKworCQkJCWlmKGltZ0NoYXJ0ICE9IG51bGwpIGltZ0NoYXJ0LmRpc3Bvc2UoKTsKKwkJCQlpbWdDaGFydCA9IG5ldyBJbWFnZShzb3VyY2UuZ2V0RGlzcGxheSgpLCBkKTsKKwkJCQkKKwkJCQlpZHIuc2V0UHJvcGVydHkoSURldmljZVJlbmRlcmVyLkdSQVBISUNTX0NPTlRFWFQsIG5ldyBHQygKKwkJCQkJCWltZ0NoYXJ0KSk7CisJCQkJZmluYWwgQm91bmRzIGJvdW5kcyA9IEJvdW5kc0ltcGwuY3JlYXRlKGQueCwgZC55LCBkLndpZHRoLAorCQkJCQkJZC5oZWlnaHQpOworCQkJCWJvdW5kcy5zY2FsZSg3MmQgLyBpZHIuZ2V0RGlzcGxheVNlcnZlcigpLmdldERwaVJlc29sdXRpb24oKSk7CisJCQkJLy8gQk9VTkRTIE1VU1QgQkUgU1BFQ0lGSUVEIElOIFBPSU5UUworCisJCQkJdHJ5IHsKKwkJCQkJZ3IucmVuZGVyKGlkciwgZ3IuYnVpbGQoaWRyLmdldERpc3BsYXlTZXJ2ZXIoKSwgY20sIGJvdW5kcywKKwkJCQkJCQludWxsLCBudWxsLCBudWxsKSk7CisJCQkJCXBlLmdjLmRyYXdJbWFnZShpbWdDaGFydCwgZC54LCBkLnkpOworCQkJCX0gY2F0Y2ggKGZpbmFsIENoYXJ0RXhjZXB0aW9uIGNlKSB7CisJCQkJCUFjdGl2YXRvci5sb2dFcnJvcigiUHJvYmxlbSByZW5kZXJpbmcgY2hhcnQiLCBjZSk7IC8vJE5PTi1OTFMtMSQKKwkJCQl9CisKKwkJCX0gLy8gcGFpbnRDb250cm9sCisJCX0gLy8gUGFpbnRMaXN0ZW5lcgorCisJCSk7CisKKwl9IC8vIEx5YXB1bm92Q29tcGFyaXNvbkNhbnZhcworCisJLyoqCisJICogVGhlIG1ldGhvZCB3aGljaCBnZXRzIHRoZSB7QGxpbmsgTHlhcHVub3ZUcmFqZWN0b3J5Q2FudmFzfScgcmVwb3J0cyBsaXN0LAorCSAqIGFuZCBkcmF3cyBpdCBvbiB0aGUge0BsaW5rIEx5YXB1bm92VHJhamVjdG9yeUNhbnZhc30uCisJICogCisJICovCisJcHVibGljIHZvaWQgZHJhdygpIHsKKwkJLy8gSGFzIGEgcmVsYXRpdmUgdmFsdWUgcHJvdmlkZXIgYmVlbiBwcm92aWRlZD8KKwkJY2xlYXJEYXRhKCk7CisJCXNldENvbG9yRGVmcyhsaW5lU2VyaWVzTGlzdCk7CisKKwkJLy8gc2V0IHVwIHRvIGF1dG9zY2FsZQorCQltYXhYID0gLTEuMDsKKwkJbWF4WSA9IC0xLjA7CisKKwkJZm9yIChpbnQgaSA9IDA7IGkgPCBOVU1fVFJBSkVDVE9SSUVTOyBpKyspIHsKKworCQkJZmluYWwgUGhhc2VTcGFjZUNvb3JkaW5hdGVbXSB0cmFqZWN0b3J5ID0gY29udHJvbC5nZXRQb2ludFZhbHVlcyhpKTsKKworCQkJaWYgKHRyYWplY3RvcnkubGVuZ3RoID4gMCkgeworCisJCQkJZm9yIChpbnQgaiA9IDA7IGogPCB0cmFqZWN0b3J5Lmxlbmd0aDsgaisrKSB7CisKKwkJCQkJaWYgKHRyYWplY3Rvcnlbal0uZ2V0WFZhbHVlKCkgPj0gbWF4WCkgeworCQkJCQkJbWF4WCA9IHRyYWplY3Rvcnlbal0uZ2V0WFZhbHVlKCk7CisJCQkJCQl4QXhpc1ByaW1hcnkuZ2V0U2NhbGUoKS5zZXRNYXgoCisJCQkJCQkJCU51bWJlckRhdGFFbGVtZW50SW1wbC5jcmVhdGUobWF4WCkpOworCQkJCQl9CisKKwkJCQkJaWYgKHRyYWplY3Rvcnlbal0uZ2V0WVZhbHVlKCkgPj0gbWF4WSkgeworCQkJCQkJbWF4WSA9IHRyYWplY3Rvcnlbal0uZ2V0WVZhbHVlKCk7CisJCQkJCQl5QXhpc1ByaW1hcnkuZ2V0U2NhbGUoKS5zZXRNYXgoCisJCQkJCQkJCU51bWJlckRhdGFFbGVtZW50SW1wbC5jcmVhdGUobWF4WSkpOworCQkJCQl9CisJCQkJfQorCisJCQkJZm9yIChpbnQgY3ljbGVOdW1iZXIgPSAwOyBjeWNsZU51bWJlciA8IHRyYWplY3RvcnkubGVuZ3RoOyBjeWNsZU51bWJlcisrKSB7CisJCQkJCXRoaXMucmVsYXRpdmVWYWx1ZXNYLmdldChpKS5hZGQoCisJCQkJCQkJbmV3IERvdWJsZSh0cmFqZWN0b3J5W2N5Y2xlTnVtYmVyXS5nZXRYVmFsdWUoKSkpOworCQkJCQl0aGlzLnJlbGF0aXZlVmFsdWVzWS5nZXQoaSkuYWRkKAorCQkJCQkJCW5ldyBEb3VibGUodHJhamVjdG9yeVtjeWNsZU51bWJlcl0uZ2V0WVZhbHVlKCkpKTsKKwkJCQl9IC8vIGZvciBjeWNsZU51bWJlcgorCQkJfSBlbHNlIHsKKwkJCQlyZXNldERhdGEoKTsKKwkJCX0KKwkJfS8vIGZvciBOVU1fVFJBSkVDVE9SSUVTCisJCWlmICghdGhpcy5pc0Rpc3Bvc2VkKCkpIHsKKwkJCXJlZHJhdygpOworCQl9CisJfSAvLyBwYWludENvbnRyb2wKKworCS8qKgorCSAqIEBwYXJhbSByZWxhdGl2ZVZhbHVlc1gKKwkgKiAgICAgICAgICAgIHRoZSA8Y29kZT5MaXN0PC9jb2RlPiB0aGF0IHdpbGwgY29udGFpbiB0aGUgcmVsYXRpdmUgWCBheGlzCisJICogICAgICAgICAgICB2YWx1ZXMgKDAuMC0xLjApIHRvIHBsb3QKKwkgKiBAcGFyYW0gcmVsYXRpdmVWYWx1ZXNZCisJICogICAgICAgICAgICB0aGF0IHdpbGwgY29udGFpbiB0aGUgcmVsYXRpdmUgWSBheGlzIHZhbHVlcyAoMC4wLTEuMCkgdG8gcGxvdAorCSAqIEBwYXJhbSBzZXJpZXNJZGVudGlmaWVyCisJICogICAgICAgICAgICB0aGUgdGl0bGUgb2YgdGhlIGdyYXBoCisJICogQHJldHVybiBhIDxjb2RlPkNoYXJ0PC9jb2RlPgorCSAqLworCUBTdXBwcmVzc1dhcm5pbmdzKCJkZXByZWNhdGlvbiIpCisJcHVibGljIGZpbmFsIENoYXJ0IGNyZWF0ZUx5YXB1bm92VHJhamVjdG9yeUNoYXJ0KAorCQkJZmluYWwgTGlzdDxMaXN0PERvdWJsZT4+IHJlbGF0aXZlVmFsdWVzWCwKKwkJCWZpbmFsIExpc3Q8TGlzdDxEb3VibGU+PiByZWxhdGl2ZVZhbHVlc1ksCisJCQlmaW5hbCBTdHJpbmcgc2VyaWVzSWRlbnRpZmllcikgeworCQlmaW5hbCBDaGFydFdpdGhBeGVzIHJldFZhbHVlID0gQ2hhcnRXaXRoQXhlc0ltcGwuY3JlYXRlKCk7CisKKwkJLy8gZ2V0IHRoZSBOTFMgZGVmYXVsdCBsYWJlbHMKKwkJLy8gZGVmYXVsdEF4aXNMYWJlbF9YID0gTWVzc2FnZXMuZ2V0U3RyaW5nKCJYQVhJU0RFRi50aXRsZSIpOworCQkvLyBkZWZhdWx0QXhpc0xhYmVsX1kgPSBNZXNzYWdlcy5nZXRTdHJpbmcoIllBWElTREVGLnRpdGxlIik7CisJCVN0cmluZyBkZWZhdWx0QXhpc0xhYmVsX1ggPSAiUyI7CisJCVN0cmluZyBkZWZhdWx0QXhpc0xhYmVsX1kgPSAiSSI7CisKKwkJLy8gUGxvdAorCQlyZXRWYWx1ZS5nZXRCbG9jaygpLnNldEJhY2tncm91bmQoQ29sb3JEZWZpbml0aW9uSW1wbC5XSElURSgpKTsKKwkJZmluYWwgUGxvdCBwID0gcmV0VmFsdWUuZ2V0UGxvdCgpOworCQlwLmdldENsaWVudEFyZWEoKS5zZXRCYWNrZ3JvdW5kKAorCQkJCUNvbG9yRGVmaW5pdGlvbkltcGwuY3JlYXRlKDI1NSwgMjU1LCAyMjUpKTsKKworCQkvLyBUaXRsZQorCQkvLyBjd2FMaW5lLmdldFRpdGxlKCApLmdldExhYmVsKCApLmdldENhcHRpb24oICkuc2V0VmFsdWUoICJMaW5lIENoYXJ0IgorCQkvLyApOy8vJE5PTi1OTFMtMSQKKwkJcmV0VmFsdWUuZ2V0VGl0bGUoKS5zZXRWaXNpYmxlKGZhbHNlKTsKKworCQkvLyBMZWdlbmQKKwkJZmluYWwgTGVnZW5kIGxnID0gcmV0VmFsdWUuZ2V0TGVnZW5kKCk7CisJCWxnLnNldFZpc2libGUoZmFsc2UpOworCQkvKgorCQkgKiBmaW5hbCBMaW5lQXR0cmlidXRlcyBsaWEgPSBsZy5nZXRPdXRsaW5lKCk7CisJCSAqIGxnLmdldFRleHQoKS5nZXRGb250KCkuc2V0U2l6ZSg4KTsKKwkJICogbGlhLnNldFN0eWxlKExpbmVTdHlsZS5TT0xJRF9MSVRFUkFMKTsgbGcuZ2V0SW5zZXRzKCkuc2V0KDEwLCA1LCAwLAorCQkgKiAwKTsgbGcuZ2V0T3V0bGluZSgpLnNldFZpc2libGUoZmFsc2UpOworCQkgKiBsZy5zZXRBbmNob3IoQW5jaG9yLk5PUlRIX0xJVEVSQUwpOworCQkgKiBsZy5zZXRQb3NpdGlvbihQb3NpdGlvbi5CRUxPV19MSVRFUkFMKTsKKwkJICovCisJCS8vIGN3YUxpbmUuZ2V0TGVnZW5kKCApLmdldFRleHQoKS5nZXRGb250KCkuc2V0U2l6ZSgxNik7OworCQkvLyBjd2FMaW5lLmdldExlZ2VuZCggKS5zZXRWaXNpYmxlKCB0cnVlICk7CisJCS8vIFgtQXhpcworCQl4QXhpc1ByaW1hcnkgPSByZXRWYWx1ZS5nZXRQcmltYXJ5QmFzZUF4ZXMoKVswXTsKKwkJeEF4aXNQcmltYXJ5LnNldFR5cGUoQXhpc1R5cGUuTElORUFSX0xJVEVSQUwpOworCQkvLyBZLUF4aXMKKwkJeUF4aXNQcmltYXJ5ID0gcmV0VmFsdWUuZ2V0UHJpbWFyeU9ydGhvZ29uYWxBeGlzKHhBeGlzUHJpbWFyeSk7CisKKwkJLy8geEF4aXNQcmltYXJ5LnNldFR5cGUoQXhpc1R5cGUuVEVYVF9MSVRFUkFMKTsKKworCQl4QXhpc1ByaW1hcnkuZ2V0TWFqb3JHcmlkKCkuc2V0VGlja1N0eWxlKFRpY2tTdHlsZS5CRUxPV19MSVRFUkFMKTsKKwkJeUF4aXNQcmltYXJ5LmdldE1ham9yR3JpZCgpLnNldFRpY2tTdHlsZShUaWNrU3R5bGUuTEVGVF9MSVRFUkFMKTsKKworCQl4QXhpc1ByaW1hcnkuZ2V0T3JpZ2luKCkuc2V0VHlwZShJbnRlcnNlY3Rpb25UeXBlLlZBTFVFX0xJVEVSQUwpOworCisJCXhBeGlzUHJpbWFyeS5nZXRUaXRsZSgpLmdldENhcHRpb24oKS5nZXRGb250KCkuc2V0U2l6ZSg4KTsKKwkJU3RyaW5nIHhBeGlzTGFiZWwgPSBkZWZhdWx0QXhpc0xhYmVsX1g7CisJCXhBeGlzUHJpbWFyeS5nZXRUaXRsZSgpLmdldENhcHRpb24oKS5zZXRWYWx1ZSh4QXhpc0xhYmVsKTsKKwkJeEF4aXNQcmltYXJ5LmdldFRpdGxlKCkuc2V0VmlzaWJsZSh0cnVlKTsKKworCQl5QXhpc1ByaW1hcnkuZ2V0VGl0bGUoKS5nZXRDYXB0aW9uKCkuZ2V0Rm9udCgpLnNldFNpemUoOCk7CisJCVN0cmluZyB5QXhpc0xhYmVsID0gZGVmYXVsdEF4aXNMYWJlbF9ZOworCQl5QXhpc1ByaW1hcnkuZ2V0VGl0bGUoKS5nZXRDYXB0aW9uKCkuc2V0VmFsdWUoeUF4aXNMYWJlbCk7CisJCXlBeGlzUHJpbWFyeS5nZXRUaXRsZSgpLnNldFZpc2libGUodHJ1ZSk7CisKKwkJZmluYWwgaW50IE1BWENPTE9SUyA9IGxpbmVDb2xvcnMubGVuZ3RoOworCQkvLyBmb3IgYWxsIHJlbGF0aXZlIHZhbHVlcyBsaXN0cworCQkvLyBYIG11c3QgYmUgc2FtZSBzaXplIGFzIFkKKwkJZm9yIChpbnQgaSA9IDA7IGkgPCByZWxhdGl2ZVZhbHVlc1guc2l6ZSgpOyBpKyspIHsKKwkJCWZpbmFsIE51bWJlckRhdGFTZXQgb3J0aG9WYWx1ZXNYID0gTnVtYmVyRGF0YVNldEltcGwKKwkJCQkJLmNyZWF0ZShyZWxhdGl2ZVZhbHVlc1guZ2V0KGkpKTsKKwkJCWZpbmFsIE51bWJlckRhdGFTZXQgb3J0aG9WYWx1ZXNZID0gTnVtYmVyRGF0YVNldEltcGwKKwkJCQkJLmNyZWF0ZShyZWxhdGl2ZVZhbHVlc1kuZ2V0KGkpKTsKKworCQkJLy8gWC1TZXJpZXMKKwkJCWZpbmFsIFNlcmllcyBsc3ggPSBTZXJpZXNJbXBsLmNyZWF0ZSgpOworCQkJLy8gZmluYWwgTGluZVNlcmllcyBsc3ggPSAoU2NhdHRlclNlcmllcykKKwkJCS8vIFNjYXR0ZXJTZXJpZXNJbXBsLmNyZWF0ZSgpOworCQkJLy8gc2VDYXRlZ29yeS5zZXREYXRhU2V0KG9ydGhvVmFsdWVzWCk7CisJCQlsc3guc2V0RGF0YVNldChvcnRob1ZhbHVlc1gpOworCisJCQkvLyBZLVNlcmllcworCQkJZmluYWwgU2NhdHRlclNlcmllcyBsc3kgPSAoU2NhdHRlclNlcmllcykgU2NhdHRlclNlcmllc0ltcGwKKwkJCQkJLmNyZWF0ZSgpOworCQkJbHN5LnNldERhdGFTZXQob3J0aG9WYWx1ZXNZKTsKKwkJCWxzeS5nZXRMaW5lQXR0cmlidXRlcygpLnNldFZpc2libGUodHJ1ZSk7CisKKwkJCWludCBjb2xvckluZGV4ID0gaSAlIE1BWENPTE9SUzsKKwkJCWxzeS5nZXRMaW5lQXR0cmlidXRlcygpLnNldENvbG9yKGxpbmVDb2xvcnNbY29sb3JJbmRleF0pOworCQkJbHN5LnNldFNlcmllc0lkZW50aWZpZXIoc2VyaWVzSWRlbnRpZmllcik7CisJCQkKKwkJCWxzeS5nZXRNYXJrZXJzKCkuY2xlYXIoKTsKKworCQkJZmluYWwgU2VyaWVzRGVmaW5pdGlvbiBzZFggPSBTZXJpZXNEZWZpbml0aW9uSW1wbC5jcmVhdGUoKTsKKwkJCWZpbmFsIFNlcmllc0RlZmluaXRpb24gc2RZID0gU2VyaWVzRGVmaW5pdGlvbkltcGwuY3JlYXRlKCk7CisKKwkJCXNkWS5nZXRTZXJpZXNQYWxldHRlKCkudXBkYXRlKC0yKTsKKworCQkJeEF4aXNQcmltYXJ5LmdldFNlcmllc0RlZmluaXRpb25zKCkuYWRkKHNkWCk7CisJCQl5QXhpc1ByaW1hcnkuZ2V0U2VyaWVzRGVmaW5pdGlvbnMoKS5hZGQoc2RZKTsKKworCQkJLy8gc2RYLmdldFNlcmllcygpLmFkZChzZUNhdGVnb3J5KTsKKwkJCXNkWC5nZXRTZXJpZXMoKS5hZGQobHN4KTsKKwkJCXNkWS5nZXRTZXJpZXMoKS5hZGQobHN5KTsKKworCQl9Ly8gRk9SIEFMTCBEQVRBIFNFVFMKKworCQl4QXhpc1ByaW1hcnkuZ2V0U2NhbGUoKS5zZXRNaW4oTnVtYmVyRGF0YUVsZW1lbnRJbXBsLmNyZWF0ZSgwLjApKTsKKwkJeEF4aXNQcmltYXJ5LmdldFNjYWxlKCkuc2V0TWF4KE51bWJlckRhdGFFbGVtZW50SW1wbC5jcmVhdGUoMS4wKSk7CisJCXhBeGlzUHJpbWFyeS5nZXRTY2FsZSgpLnNldFN0ZXAoMC4yNSk7CisJCXhBeGlzUHJpbWFyeS5nZXRMYWJlbCgpLmdldENhcHRpb24oKS5nZXRGb250KCkuc2V0U2l6ZSg5KTsKKworCQl5QXhpc1ByaW1hcnkuZ2V0U2NhbGUoKS5zZXRNaW4oTnVtYmVyRGF0YUVsZW1lbnRJbXBsLmNyZWF0ZSgwLjApKTsKKwkJeUF4aXNQcmltYXJ5LmdldFNjYWxlKCkuc2V0TWF4KE51bWJlckRhdGFFbGVtZW50SW1wbC5jcmVhdGUoMS4wKSk7CisJCXlBeGlzUHJpbWFyeS5nZXRTY2FsZSgpLnNldFN0ZXAoMC4yNSk7CisJCXlBeGlzUHJpbWFyeS5nZXRMYWJlbCgpLmdldENhcHRpb24oKS5nZXRGb250KCkuc2V0U2l6ZSg5KTsKKworCQlyZXR1cm4gcmV0VmFsdWU7CisJfSAvLyBjcmVhdGVQaGFzZVNwYWNlTGluZUNoYXJ0CisKKwkvKioKKwkgKiBTZXRzIHRoZSBjb2xvcnMgZm9yIGEgbiBhcnJheSBvZiBMaW5lU2VyaWVzIGFsbCB0byBibHVlIFRPRE86IGV2ZW50dWFsbHkKKwkgKiB3ZSBuZWVkIHRvIHBpY2sgc29tZSBiZXR0ZXIgY29sb3JzIGFuZCBjb25uZWN0IHRvIGEgbGVnZW5kLi4uCisJICogCisJICogQHBhcmFtIGxzTGlzdAorCSAqLworCXB1YmxpYyBzdGF0aWMgdm9pZCBzZXRDb2xvckRlZnMoZmluYWwgTGlzdDxMaW5lU2VyaWVzPiBsc0xpc3QpIHsKKwkJLy8gdGhlIGRlZmF1bHQgbGluZSBjb2xvcgorCQlmb3IgKGludCBpID0gMDsgaSA8IGxzTGlzdC5zaXplKCk7IGkrKykgeworCQkJQ29sb3JEZWZpbml0aW9uIGNvbG9yID0gQ29sb3JEZWZpbml0aW9uSW1wbC5CTFVFKCk7CisJCQlsc0xpc3QuZ2V0KGkpLmdldExpbmVBdHRyaWJ1dGVzKCkuc2V0Q29sb3IoY29sb3IpOworCQl9CisJCXJldHVybjsKKwl9Ly8gZ2V0Q29sb3JEZWYKKworCS8qKgorCSAqIERpc3Bvc2VzIHRoZSBDb2xvciBvYmplY3RzCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgZGlzcG9zZSgpIHsKKwkJc3VwZXIuZGlzcG9zZSgpOworCX0KKworCS8qKgorCSAqIHJlc2V0CisJICovCisJcHVibGljIHZvaWQgcmVzZXQoKSB7CisJCXJlc2V0RGF0YSgpOworCQlyZWRyYXcoKTsKKwl9CisKKwlwcm90ZWN0ZWQgdm9pZCByZXNldERhdGEoKSB7CisKKwkJY2xlYXJEYXRhKCk7CisJCWZvciAoaW50IGkgPSAwOyBpIDwgcmVsYXRpdmVWYWx1ZXNYLnNpemUoKTsgaSsrKSB7CisJCQlyZWxhdGl2ZVZhbHVlc1guZ2V0KGkpLmFkZChuZXcgRG91YmxlKDEuMCkpOworCQkJcmVsYXRpdmVWYWx1ZXNZLmdldChpKS5hZGQobmV3IERvdWJsZSgwLjApKTsKKwkJfQorCX0KKworCXByaXZhdGUgdm9pZCBjbGVhckRhdGEoKSB7CisJCWZvciAoaW50IGkgPSAwOyBpIDwgcmVsYXRpdmVWYWx1ZXNYLnNpemUoKTsgaSsrKSB7CisJCQlyZWxhdGl2ZVZhbHVlc1guZ2V0KGkpLmNsZWFyKCk7CisJCQlyZWxhdGl2ZVZhbHVlc1kuZ2V0KGkpLmNsZWFyKCk7CisJCX0KKwl9Cit9IC8vIEx5YXB1bm92Q29tcGFyaXNvbkNhbnZhcwpkaWZmIC0tZ2l0IGEvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS51dGlsLmFuYWx5c2lzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3V0aWwvYW5hbHlzaXMvdmlld3MvTHlhcHVub3ZWaWV3LmphdmEgYi9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLnV0aWwuYW5hbHlzaXMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdXRpbC9hbmFseXNpcy92aWV3cy9MeWFwdW5vdlZpZXcuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMDFlYzQ0Ci0tLSAvZGV2L251bGwKKysrIGIvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS51dGlsLmFuYWx5c2lzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3V0aWwvYW5hbHlzaXMvdmlld3MvTHlhcHVub3ZWaWV3LmphdmEKQEAgLTAsMCArMSw2OCBAQAorLy8gRXN0aW1hdG9yVmlldyAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS51dGlsLmFuYWx5c2lzLnZpZXdzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA3LCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5qb2JzLnNpbXVsYXRpb24uU2ltdWxhdGlvbk1hbmFnZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLnBhcnQuVmlld1BhcnQ7CisKKy8qKgorICogVGhpcyB2aWV3IHByb3ZpZGVzIGZvciBhIEx5YXB1bm92IGFuYWx5c2lzLCBjb21wYXJpbmcgdHdvIHNjZW5hcmlvcworICovCisKK3B1YmxpYyBjbGFzcyBMeWFwdW5vdlZpZXcgZXh0ZW5kcyBWaWV3UGFydCB7CisKKwkvKioKKwkgKiBUaGUgaWRlbnRpZmllciBvZiB0aGUgTHlhcHVub3YgVmlldyB7QHZhbHVlfQorCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIElEX0x5YXB1bm92X1ZJRVcgPSAib3JnLmVjbGlwc2Uuc3RlbS51dGlsLmFuYWx5c2lzLnZpZXdzLmx5YXB1bm92IjsgLy8kTk9OLU5MUy0xJAorCisKKwlwcml2YXRlIEFuYWx5c2lzVmlld2VyIGFuYWx5c2lzVmlld2VyOworCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS51aS5wYXJ0LldvcmtiZW5jaFBhcnQjY3JlYXRlUGFydENvbnRyb2wob3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlKQorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGNyZWF0ZVBhcnRDb250cm9sKGZpbmFsIENvbXBvc2l0ZSBwYXJlbnQpIHsKKworCQlhbmFseXNpc1ZpZXdlciA9IG5ldyBBbmFseXNpc1ZpZXdlcihwYXJlbnQsIEx5YXB1bm92RmFjdG9yeS5JTlNUQU5DRSk7CisJCWFuYWx5c2lzVmlld2VyLnNldElucHV0KFNpbXVsYXRpb25NYW5hZ2VyLmdldE1hbmFnZXIoKSk7CisKKwkJZ2V0U2l0ZSgpLnNldFNlbGVjdGlvblByb3ZpZGVyKGFuYWx5c2lzVmlld2VyKTsKKworCisJfSAvLyBjcmVhdGVQYXJ0Q29udHJvbAorCisJCisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnVpLnBhcnQuV29ya2JlbmNoUGFydCNkaXNwb3NlKCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBkaXNwb3NlKCkgeworCQlzdXBlci5kaXNwb3NlKCk7CisJfSAvLyBkaXNwb3NlCisKKwkvKioKKwkgKiBUaGlzIGlzIHJlcXVpcmVkIGJ5IHRoZSBpbnRlcmZhY2UsIGJ1dCB3ZSdyZSBub3QgdXNpbmcgaXQuCisJICogCisJICogQHNlZSBvcmcuZWNsaXBzZS51aS5wYXJ0LldvcmtiZW5jaFBhcnQjc2V0Rm9jdXMoKQorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIHNldEZvY3VzKCkgeworCQkvLyBOb3RoaW5nCisJfSAvLyBzZXRGb2N1cworCit9IC8vIEVzdGltYXRvclZpZXcKZGlmZiAtLWdpdCBhL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0udXRpbC5hbmFseXNpcy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91dGlsL2FuYWx5c2lzL3ZpZXdzL01lc3NhZ2VzLmphdmEgYi9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLnV0aWwuYW5hbHlzaXMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdXRpbC9hbmFseXNpcy92aWV3cy9NZXNzYWdlcy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI4NjhjMjYKLS0tIC9kZXYvbnVsbAorKysgYi9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLnV0aWwuYW5hbHlzaXMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdXRpbC9hbmFseXNpcy92aWV3cy9NZXNzYWdlcy5qYXZhCkBAIC0wLDAgKzEsNDIgQEAKKy8vIE1lc3NhZ2VzLmphdmEKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS51dGlsLmFuYWx5c2lzLnZpZXdzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA3LCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGphdmEudXRpbC5NaXNzaW5nUmVzb3VyY2VFeGNlcHRpb247CitpbXBvcnQgamF2YS51dGlsLlJlc291cmNlQnVuZGxlOworCisvKioKKyAqIFRoaXMgY2xhc3MgcmVwcmVzZW50cworICovCitwdWJsaWMgY2xhc3MgTWVzc2FnZXMgeworCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBCVU5ETEVfTkFNRSA9ICJvcmcuZWNsaXBzZS5zdGVtLnV0aWwuYW5hbHlzaXMudmlld3MubWVzc2FnZXMiOyAvLyROT04tTkxTLTEkCisKKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBSZXNvdXJjZUJ1bmRsZSBSRVNPVVJDRV9CVU5ETEUgPSBSZXNvdXJjZUJ1bmRsZQorCQkJLmdldEJ1bmRsZShCVU5ETEVfTkFNRSk7CisKKwlwcml2YXRlIE1lc3NhZ2VzKCkgeworCQkvLyBOb3RoaW5nCisJfQorCisJLyoqCisJICogQHBhcmFtIGtleQorCSAqIEByZXR1cm4gdGhlIHN0cmluZyBtYXRjaGluZyB0aGUga2V5CisJICovCisJcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0U3RyaW5nKGZpbmFsIFN0cmluZyBrZXkpIHsKKwkJdHJ5IHsKKwkJCXJldHVybiBSRVNPVVJDRV9CVU5ETEUuZ2V0U3RyaW5nKGtleSk7CisJCX0gY2F0Y2ggKGZpbmFsIE1pc3NpbmdSZXNvdXJjZUV4Y2VwdGlvbiBlKSB7CisJCQlyZXR1cm4gJyEnICsga2V5ICsgJyEnOworCQl9CisJfQorfSAvLyBNZXNzYWdlcwpkaWZmIC0tZ2l0IGEvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS51dGlsLmFuYWx5c2lzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3V0aWwvYW5hbHlzaXMvdmlld3MvUGFyYW1ldGVyRXN0aW1hdG9yV2l6YXJkLmphdmEgYi9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLnV0aWwuYW5hbHlzaXMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdXRpbC9hbmFseXNpcy92aWV3cy9QYXJhbWV0ZXJFc3RpbWF0b3JXaXphcmQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNTk2MTE3Ci0tLSAvZGV2L251bGwKKysrIGIvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS51dGlsLmFuYWx5c2lzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3V0aWwvYW5hbHlzaXMvdmlld3MvUGFyYW1ldGVyRXN0aW1hdG9yV2l6YXJkLmphdmEKQEAgLTAsMCArMSw0MjAgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS51dGlsLmFuYWx5c2lzLnZpZXdzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU3RydWN0dXJlZFNlbGVjdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS53aXphcmQuSVdpemFyZFBhZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uud2l6YXJkLldpemFyZDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS53aXphcmQuV2l6YXJkUGFnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLkRpc2Vhc2VUeXBlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuaW1wbC5SZWZlcmVuY2VTY2VuYXJpb0RhdGFNYXBJbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMudXRpbC5DU1ZzY2VuYXJpb0xvYWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnV0aWwuYW5hbHlzaXMuUGFyYW1ldGVyRXN0aW1hdG9yTWV0aG9kOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5TV1Q7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5TZWxlY3Rpb25BZGFwdGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuU2VsZWN0aW9uRXZlbnQ7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5HcmlkRGF0YTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QubGF5b3V0LkdyaWRMYXlvdXQ7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQnV0dG9uOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5EaXJlY3RvcnlEaWFsb2c7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuTGFiZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuU2hlbGw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuVGV4dDsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5JV29ya2JlbmNoOworCisvKioKKyAqIEEgd2l6YXJkIGZvciBzZWxlY3RpbmcgYSBzY2VuYXJpbyBmb2xkZXIgYW5kIGEgcGFyYW1ldGVyIGVzdGltYXRvcgorICogCisgKi8KK3B1YmxpYyBjbGFzcyBQYXJhbWV0ZXJFc3RpbWF0b3JXaXphcmQgZXh0ZW5kcyBXaXphcmQgeworCS8qKgorCSAqIFRoaXMgcGFnZSBpcyBmb3Igc2VsZWN0aW5nIHNjZW5hcmlvIGZvbGRlcgorCSAqLworCXByb3RlY3RlZCBQYXJhbWV0ZXJFc3RpbWF0b3JXaXphcmRTZWxlY3RGb2xkZXJQYWdlIHNlbGVjdEZvbGRlclBhZ2U7CisKKwkvKioKKwkgKiBUaGlzIHBhZ2UgaXMgZm9yIHNlbGVjdGluZyB3aGljaCBwYXJhbWV0ZXIgZXN0aW1hdG9yIHRvIGFwcGx5CisJICovCisJcHJvdGVjdGVkIFBhcmFtZXRlckVzdGltYXRvcldpemFyZFNlbGVjdEVzdGltYXRvclBhZ2Ugc2VsZWN0RXN0aW1hdG9yUGFnZTsKKworCS8qKgorCSAqIFJlbWVtYmVyIHRoZSB3b3JrYmVuY2ggZHVyaW5nIGluaXRpYWxpemF0aW9uLgorCSAqLworCXByb3RlY3RlZCBJV29ya2JlbmNoIHdvcmtiZW5jaDsKKwkKKwkvKioKKwkgKiBTZWxlY3Rpb24sIGkuZS4gdGhlIHNlbGVjdGVkIHdpZGdldCB0aGF0IG9wZW5lZCB0aGUgd2l6YXJkCisJICovCisJCisJLy9JU3RydWN0dXJlZFNlbGVjdGlvbiBzZWxlY3Rpb247CisJCisJLyoqCisJICogVGhlIEVzdGltYXRvciBDb250cm9sLiBXZSB1c2UgaXQgdG8gdXBkYXRlIGZpZWxkcyBpbmRpY2F0aW5nCisJICogdGhlIGN1cnJlbnQgZm9sZGVyL2VzdGltYXRvcgorCSAqIAorCSAqLworCQorCUVzdGltYXRvckNvbnRyb2wgZXN0aW1hdG9yQ29udHJvbDsKKwkKKwkvKioKKwkgKiBXaGVuIHRoZSB3aXphcmQgaXMgY29tcGxldGUsIHdlIGhhdmUgbG9hZGVkIGRhdGEgaW50bworCSAqIHRoaXMgbWFwIAorCSAqLworCQorCVJlZmVyZW5jZVNjZW5hcmlvRGF0YU1hcEltcGwgcmVmZXJlbmNlU2NlbmFyaW9EYXRhTWFwOworCQorCS8qKgorCSAqIFdoZW4gdGhlIHdpemFyZCBpcyBjb21wbGV0ZSwgd2UgaGF2ZSBzZWxlY3RlZCBhCisJICogcGFyYW1ldGVyIGVzdGltYXRvciBtZXRob2QKKwkgKi8KKwkKKwlwdWJsaWMgUGFyYW1ldGVyRXN0aW1hdG9yTWV0aG9kIHBhcmFtZXRlckVzdGltYXRvck1ldGhvZDsKKwkKKwlwcml2YXRlIFN0cmluZyBpbml0RGlyID0gbnVsbDsKKwkKKwkvKioKKwkgKiBDb25zdHJ1Y3RvcgorCSAqIAorCSAqIEBwYXJhbSBjdHJsIEVzdGltYXRvckNvbnRyb2wKKwkgKiBAcGFyYW0gaW5pdERpciBJbml0aWFsIGRpcmVjdG9yeQorCSAqLworCQorCXB1YmxpYyBQYXJhbWV0ZXJFc3RpbWF0b3JXaXphcmQoRXN0aW1hdG9yQ29udHJvbCBjdHJsLCBTdHJpbmcgaW5pdERpcikgeworCQl0aGlzLmVzdGltYXRvckNvbnRyb2wgPSBjdHJsOworCQl0aGlzLmluaXREaXIgPSBpbml0RGlyOworCQl0aGlzLnNldEZvcmNlUHJldmlvdXNBbmROZXh0QnV0dG9ucyh0cnVlKTsKKwl9CisJCisJLyoqCisJICogSW5pdGlhbGl6ZQorCSAqIAorCSAqIEBwYXJhbSB3b3JrYmVuY2gKKwkgKiBAcGFyYW0gc2VsZWN0aW9uIFNlbGVjdGlvbiAKKwkgKi8KKwkKKwlwdWJsaWMgdm9pZCBpbml0KElXb3JrYmVuY2ggd29ya2JlbmNoLCBJU3RydWN0dXJlZFNlbGVjdGlvbiBzZWxlY3Rpb24pIHsKKwkJdGhpcy53b3JrYmVuY2ggPSB3b3JrYmVuY2g7CisJCS8vdGhpcy5zZWxlY3Rpb24gPSBzZWxlY3Rpb247CisJCXNldFdpbmRvd1RpdGxlKCJDcmVhdGUgUGFyYW1ldGVyIEVzdGltYXRvciIpOyAvLyROT04tTkxTLTEkCisJfQorCisJLyoqCisJICogRG9uZSBzZWxlY3RpbmcgcGFyYW1ldGVyIGVzdGltYXRvcgorCSAqIAorCSAqIEByZXR1cm4gYm9vbGVhbgorCSAqLworCisJcHVibGljIGJvb2xlYW4gcGVyZm9ybUZpbmlzaCgpIHsKKwkJRXN0aW1hdG9yQ29udHJvbC50ZXh0MS5zZXRUZXh0KHNlbGVjdEZvbGRlclBhZ2UuZ2V0RGlyTmFtZSgpKTsKKwkJRXN0aW1hdG9yQ29udHJvbC5lc3RpbWF0b3JUZXh0LnNldFRleHQodGhpcy5wYXJhbWV0ZXJFc3RpbWF0b3JNZXRob2QuZ2V0TmFtZSgpKTsKKwkJZXN0aW1hdG9yQ29udHJvbC5lbmFibGVBbmFseXNpcyh0cnVlKTsKKwkJcmV0dXJuIHRydWU7CisJfQorCisJLyoqCisJICogZ2V0UmVmZXJlbmNlU2NlbmFyaW9EYXRhTWFwLiBSZXR1cm4gdGhlIHJlZmVyZW5jZSBzY2VuYXJpbyBkYXRhIG1hcAorCSAqICAKKwkgKiBAcmV0dXJuIFJlZmVyZW5jZVNjZW5hcmlvRGF0YU1hcAorCSAqLworCQorCXB1YmxpYyBSZWZlcmVuY2VTY2VuYXJpb0RhdGFNYXBJbXBsIGdldFJlZmVyZW5jZVNjZW5hcmlvRGF0YU1hcCgpIHtyZXR1cm4gdGhpcy5yZWZlcmVuY2VTY2VuYXJpb0RhdGFNYXA7fQorCQorCS8qKgorCSAqIGdldFBhcmFtZXRlckVzdGltYXRvci4gUmV0dXJuIHRoZSBwYXJhbWV0ZXIgZXN0aW1hdG9yIG1ldGhvZCBzZWxlY3RlZAorCSAqICAKKwkgKiBAcmV0dXJuIFBhcmFtZXRlckVzdGltYXRvcgorCSAqLworCQorCXB1YmxpYyBQYXJhbWV0ZXJFc3RpbWF0b3JNZXRob2QgZ2V0UGFyYW1ldGVyRXN0aW1hdG9yTWV0aG9kKCkge3JldHVybiB0aGlzLnBhcmFtZXRlckVzdGltYXRvck1ldGhvZDt9CisJCisJCisJLyoqCisgICAgICogV2Ugb3ZlcnJpZGUgY3JlYXRlUGFnZUNvbnRyb2xzIHRvIGF2b2lkIGNyZWF0aW5nIHRoZSBjb250cm9scworICAgICAqIGZvciB0aGUgc2Vjb25kIHBhZ2UgdW50aWwgd2UgYXJlIHJlYWR5LgorICAgICAqIAorICAgICAqIEBwYXJhbSBwYWdlQ29udGFpbmVyCisgICAgICovCisgICAgcHVibGljIHZvaWQgY3JlYXRlUGFnZUNvbnRyb2xzKENvbXBvc2l0ZSBwYWdlQ29udGFpbmVyKSB7CisgICAgCS8vSVdpemFyZFBhZ2UgcGFnZSA9IHNlbGVjdEZvbGRlclBhZ2U7CisgICAgICAgIC8vcGFnZS5jcmVhdGVDb250cm9sKHBhZ2VDb250YWluZXIpOworICAgIH0KKyAgICAKKwkvKioKKwkgKiBQYWdlIGZvciBzZWxlY3Rpbmcgc2NlbmFyaW8gZm9sZGVyCisJICovCisJcHVibGljIGNsYXNzIFBhcmFtZXRlckVzdGltYXRvcldpemFyZFNlbGVjdEZvbGRlclBhZ2UgZXh0ZW5kcyBXaXphcmRQYWdlIHsKKwkJVGV4dCBmb2xkZXJUZXh0ID0gbnVsbDsKKwkJcHJpdmF0ZSBTdHJpbmcgZGlyZWN0b3J5OworCQkKKwkJLyoqCisJCSAqIFBhc3MgaW4gdGhlIHNlbGVjdGlvbi4KKwkJICogCisJCSAqIEBwYXJhbSBwYWdlSWQKKwkJICovCisJCXB1YmxpYyBQYXJhbWV0ZXJFc3RpbWF0b3JXaXphcmRTZWxlY3RGb2xkZXJQYWdlKFN0cmluZyBwYWdlSWQpIHsKKwkJCXN1cGVyKHBhZ2VJZCk7CisJCX0KKworCQkvKioKKwkJICogVGhlIGZyYW1ld29yayBjYWxscyB0aGlzIHRvIHNlZSBpZiB0aGUgZmlsZSBpcyBjb3JyZWN0LgorCQkgKi8KKwkJcHJvdGVjdGVkIGJvb2xlYW4gdmFsaWRhdGVQYWdlKCkgeworCQkJcmV0dXJuIHRydWU7CisJCX0KKworCQkvKioKKwkJICogQ3JlYXRlIGxheW91dAorCQkgKiAKKwkJICogQHBhcmFtIHBhcmVudAorCQkgKi8KKwkJcHVibGljIHZvaWQgY3JlYXRlQ29udHJvbChDb21wb3NpdGUgcGFyZW50KSB7CisJCQlDb21wb3NpdGUgY29tcG9zaXRlID0gbmV3IENvbXBvc2l0ZShwYXJlbnQsIFNXVC5OT05FKTsKKwkJCXsKKwkJCQlHcmlkTGF5b3V0IGxheW91dCA9IG5ldyBHcmlkTGF5b3V0KCk7CisJCQkJbGF5b3V0Lm51bUNvbHVtbnMgPSAyOworCQkJCWxheW91dC52ZXJ0aWNhbFNwYWNpbmcgPSAxMjsKKwkJCQljb21wb3NpdGUuc2V0TGF5b3V0KGxheW91dCk7CisKKwkJCQlHcmlkRGF0YSBkYXRhID0gbmV3IEdyaWREYXRhKCk7CisJCQkJZGF0YS52ZXJ0aWNhbEFsaWdubWVudCA9IEdyaWREYXRhLkZJTEw7CisJCQkJZGF0YS5ncmFiRXhjZXNzVmVydGljYWxTcGFjZSA9IHRydWU7CisJCQkJZGF0YS5ob3Jpem9udGFsQWxpZ25tZW50ID0gR3JpZERhdGEuRklMTDsKKwkJCQljb21wb3NpdGUuc2V0TGF5b3V0RGF0YShkYXRhKTsKKwkJCX0KKwkJCUxhYmVsIGNvbnRhaW5lckxhYmVsID0gbmV3IExhYmVsKGNvbXBvc2l0ZSwgU1dULkxFRlQpOworCQkJeworCQkJCWNvbnRhaW5lckxhYmVsLnNldFRleHQoTWVzc2FnZXMuZ2V0U3RyaW5nKCJFU1QuU0NGT0xERVIiKSk7IC8vJE5PTi1OTFMtMSQKKworCQkJCUdyaWREYXRhIGRhdGEgPSBuZXcgR3JpZERhdGEoKTsKKwkJCQlkYXRhLmhvcml6b250YWxBbGlnbm1lbnQgPSBHcmlkRGF0YS5GSUxMOworCQkJCWNvbnRhaW5lckxhYmVsLnNldExheW91dERhdGEoZGF0YSk7CisJCQl9CisJCQlmb2xkZXJUZXh0ID0gbmV3IFRleHQoY29tcG9zaXRlLCBTV1QuTEVGVCk7CisJCQl7CisJCQkJZm9sZGVyVGV4dC5zZXRUZXh0KHRoaXMuZ2V0RGlyTmFtZSgpKTsKKwkJCQlHcmlkRGF0YSBkYXRhID0gbmV3IEdyaWREYXRhKCk7CisJCQkJZGF0YS5ob3Jpem9udGFsQWxpZ25tZW50ID0gR3JpZERhdGEuRklMTDsKKwkJCQlkYXRhLmdyYWJFeGNlc3NIb3Jpem9udGFsU3BhY2UgPSB0cnVlOworCQkJCWRhdGEubWluaW11bVdpZHRoID0gMTAwOworCQkJCWZvbGRlclRleHQuc2V0TGF5b3V0RGF0YShkYXRhKTsKKwkJCX0KKwkJCUJ1dHRvbiBzZWxlY3RGb2xkZXJCdXR0b24gPSBuZXcgQnV0dG9uKGNvbXBvc2l0ZSwgU1dULkxFRlQpOworCQkJeworCQkJCXNlbGVjdEZvbGRlckJ1dHRvbi5zZXRUZXh0KE1lc3NhZ2VzLmdldFN0cmluZygiRVNULlNFTEVDVEZPTERFQlVUVE9OIikpOworCQkJCUdyaWREYXRhIGRhdGEgPSBuZXcgR3JpZERhdGEoKTsKKwkJCQlkYXRhLmhvcml6b250YWxBbGlnbm1lbnQgPSBHcmlkRGF0YS5GSUxMOworCQkJCXNlbGVjdEZvbGRlckJ1dHRvbi5zZXRMYXlvdXREYXRhKGRhdGEpOworCQkJfQorCQkJCisJCQlmaW5hbCBTaGVsbCBzaGVsbCA9IHRoaXMuZ2V0U2hlbGwoKTsKKwkJCQorCQkJc2VsZWN0Rm9sZGVyQnV0dG9uLmFkZFNlbGVjdGlvbkxpc3RlbmVyKG5ldyBTZWxlY3Rpb25BZGFwdGVyKCkgeworCQkJCXB1YmxpYyB2b2lkIHdpZGdldFNlbGVjdGVkKEBTdXBwcmVzc1dhcm5pbmdzKCJ1bnVzZWQiKQorCQkJCQkJZmluYWwgU2VsZWN0aW9uRXZlbnQgZSkgeworCQkJCQlmaW5hbCBEaXJlY3RvcnlEaWFsb2cgZGQgPSBuZXcgRGlyZWN0b3J5RGlhbG9nKAorCQkJCQkJc2hlbGwsIFNXVC5PUEVOKTsKKwkJCQkJZGQuc2V0VGV4dChNZXNzYWdlcy5nZXRTdHJpbmcoIkVTVC5TRUxFQ1RGT0xERURJQUxPR1RJVExFIikpOyAvLyROT04tTkxTLTEkCisJCQkJCWRkLnNldEZpbHRlclBhdGgoZm9sZGVyVGV4dC5nZXRUZXh0KCkpOworCQkJCQlmaW5hbCBTdHJpbmcgc2VsZWN0ZWQgPSBkZC5vcGVuKCk7CisJCQkJCWlmKHNlbGVjdGVkICE9IG51bGwpIGZvbGRlclRleHQuc2V0VGV4dChzZWxlY3RlZCk7CisJCQkJfQorCQkJfSk7CisJCQlzZXRQYWdlQ29tcGxldGUodmFsaWRhdGVQYWdlKCkpOworCQkJc2V0Q29udHJvbChjb21wb3NpdGUpOworCQl9CisJCQorCQkvKioKKwkJICogU2V0IHRoZSBjdXJyZW50IGRpcmVjdG9yeSBuYW1lCisJCSAqIAorCQkgKiBAcGFyYW0gZGlyIERpcmVjdG9yeQorCQkgKi8KKwkJCisJCXB1YmxpYyB2b2lkIHNldERpck5hbWUoU3RyaW5nIGRpcikgeworCQkJdGhpcy5kaXJlY3RvcnkgPSBkaXI7CisJCX0KKworCQkvKioKKwkJICogR2V0IHRoZSBkaXJlY3RvcnkKKwkJICogCisJCSAqIEByZXR1cm4gU3RyaW5nIERpcmVjdG9yeQorCQkgKi8KKwkJcHVibGljIFN0cmluZyBnZXREaXJOYW1lKCkgeworCQkJcmV0dXJuIHRoaXMuZGlyZWN0b3J5OworCQl9CisJCQorCQkvKioKKwkJICogY2FuRmxpcFRvTmV4dFBhZ2UuIEZpZ3VyZSBvdXQgd2hldGhlciBmb2xkZXIgaXMgc2V0LiAKKwkJICogCisJCSAqIEByZXR1cm4gYm9vbGVhbiBUcnVlIGlmIHBhZ2UgaXMgdmFsaWQKKwkJICovCisJCQorCQlwdWJsaWMgYm9vbGVhbiBjYW5GbGlwVG9OZXh0UGFnZSgpeworCQkJICByZXR1cm4gdGhpcy52YWxpZGF0ZVBhZ2UoKTsKKwkJfQorCQkKKwkJLyoqCisJCSAqIGlzUGFnZUNvbXBsZXRlLgorCQkgKiAKKwkJICogQHJldHVybiBib29sZWFuIFRydWUgaWYgY29tcGxldGUKKwkJICovCisJCXB1YmxpYyBib29sZWFuIGlzUGFnZUNvbXBsZXRlKCkgeworCQkJcmV0dXJuIHRoaXMudmFsaWRhdGVQYWdlKCk7CisJCX0KKwkJCisJCS8qKgorCQkgKiBPdmVycmlkZSB0byBsb2FkIGZvbGRlciBkYXRhIGFuZCB2YWxpZGF0ZQorCQkgKiAKKwkJICogQHJldHVybiBJV2l6YXJkUGFnZQorCQkgKi8KKwkJCisJCXB1YmxpYyBJV2l6YXJkUGFnZSBnZXROZXh0UGFnZSgpIHsKKwkJCXRyeSB7CisJCQkJc2VsZWN0RXN0aW1hdG9yUGFnZSA9IG5ldyBQYXJhbWV0ZXJFc3RpbWF0b3JXaXphcmRTZWxlY3RFc3RpbWF0b3JQYWdlKCJFc3RpbWF0b3IiKTsgLy8kTk9OLU5MUy0xJAorCQkJCXNlbGVjdEVzdGltYXRvclBhZ2Uuc2V0VGl0bGUoTWVzc2FnZXMuZ2V0U3RyaW5nKCJFU1QuUEFSQU1FU1RUSVRMRSIpKTsKKwkJCQlzZWxlY3RFc3RpbWF0b3JQYWdlLnNldERlc2NyaXB0aW9uKCIiKTsgLy8kTk9OLU5MUy0xJAorCQkJCXNlbGVjdEVzdGltYXRvclBhZ2Uuc2V0V2l6YXJkKHRoaXMuZ2V0V2l6YXJkKCkpOworCQkJCUNTVnNjZW5hcmlvTG9hZGVyIGxvYWRlciA9IG5ldyBDU1ZzY2VuYXJpb0xvYWRlcih0aGlzLmZvbGRlclRleHQuZ2V0VGV4dCgpKTsKKwkJCQkvLyBQaWNrIHRoZSBoaWdoZXN0IHJlc29sdXRpb24gYXZhaWxhYmxlCisJCQkJaW50IG1heFJlc29sdXRpb24gPSBsb2FkZXIuZ2V0TWF4UmVzb2x1dGlvbigpOworCQkJCVJlZmVyZW5jZVNjZW5hcmlvRGF0YU1hcEltcGwgbWFwID0gbG9hZGVyLnBhcnNlQWxsRmlsZXMobWF4UmVzb2x1dGlvbik7CisJCQkJKChQYXJhbWV0ZXJFc3RpbWF0b3JXaXphcmQpdGhpcy5nZXRXaXphcmQoKSkucmVmZXJlbmNlU2NlbmFyaW9EYXRhTWFwID0gbWFwOworCQkJCXRoaXMuc2V0RGlyTmFtZSh0aGlzLmZvbGRlclRleHQuZ2V0VGV4dCgpKTsKKwkJCX0gY2F0Y2goRXhjZXB0aW9uIGUpIHsKKwkJCQl0aGlzLnNldEVycm9yTWVzc2FnZShlLmdldE1lc3NhZ2UoKSk7CisJCQkJcmV0dXJuIHRoaXM7CisJCQl9CisJICAgICAgICByZXR1cm4gc2VsZWN0RXN0aW1hdG9yUGFnZTsKKwkJfQorCX0KKworCS8qKgorCSAqIFBhZ2UgZm9yIHNlbGVjdGluZyBlc3RpbWF0b3IKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGNsYXNzIFBhcmFtZXRlckVzdGltYXRvcldpemFyZFNlbGVjdEVzdGltYXRvclBhZ2UgZXh0ZW5kcyBXaXphcmRQYWdlIHsKKworCQkvKioKKwkJICogUGFzcyBpbiB0aGUgc2VsZWN0aW9uLgorCQkgKiAKKwkJICogQHBhcmFtIHBhZ2VJZAorCQkgKi8KKwkJcHVibGljIFBhcmFtZXRlckVzdGltYXRvcldpemFyZFNlbGVjdEVzdGltYXRvclBhZ2UoU3RyaW5nIHBhZ2VJZCkgeworCQkJc3VwZXIocGFnZUlkKTsKKwkJfQorCisJCS8qKgorCQkgKiBUaGUgZnJhbWV3b3JrIGNhbGxzIHRoaXMgdG8gc2VlIGlmIHRoZSBmaWxlIGlzIGNvcnJlY3QuCisJCSAqLworCQlwcm90ZWN0ZWQgYm9vbGVhbiB2YWxpZGF0ZVBhZ2UoKSB7CisJCQlyZXR1cm4gKCgoUGFyYW1ldGVyRXN0aW1hdG9yV2l6YXJkKXRoaXMuZ2V0V2l6YXJkKCkpLnBhcmFtZXRlckVzdGltYXRvck1ldGhvZCAhPSBudWxsKTsKKwkJfQorCisJCS8qKgorCQkgKiBDcmVhdGUgbGF5b3V0CisJCSAqIAorCQkgKiBAcGFyYW0gcGFyZW50CisJCSAqLworCQlwdWJsaWMgdm9pZCBjcmVhdGVDb250cm9sKENvbXBvc2l0ZSBwYXJlbnQpIHsKKwkJCUNvbXBvc2l0ZSBjb21wb3NpdGUgPSBuZXcgQ29tcG9zaXRlKHBhcmVudCwgU1dULk5PTkUpOworCQkJeworCQkJCUdyaWRMYXlvdXQgbGF5b3V0ID0gbmV3IEdyaWRMYXlvdXQoKTsKKwkJCQlsYXlvdXQubnVtQ29sdW1ucyA9IDE7CisJCQkJbGF5b3V0LnZlcnRpY2FsU3BhY2luZyA9IDEyOworCQkJCWNvbXBvc2l0ZS5zZXRMYXlvdXQobGF5b3V0KTsKKworCQkJCUdyaWREYXRhIGRhdGEgPSBuZXcgR3JpZERhdGEoKTsKKwkJCQlkYXRhLnZlcnRpY2FsQWxpZ25tZW50ID0gR3JpZERhdGEuRklMTDsKKwkJCQlkYXRhLmdyYWJFeGNlc3NWZXJ0aWNhbFNwYWNlID0gdHJ1ZTsKKwkJCQlkYXRhLmhvcml6b250YWxBbGlnbm1lbnQgPSBHcmlkRGF0YS5GSUxMOworCQkJCWNvbXBvc2l0ZS5zZXRMYXlvdXREYXRhKGRhdGEpOworCQkJfQorCisJCQlMYWJlbCBjb250YWluZXJMYWJlbCA9IG5ldyBMYWJlbChjb21wb3NpdGUsIFNXVC5MRUZUKTsKKwkJCXsKKwkJCQljb250YWluZXJMYWJlbC5zZXRUZXh0KE1lc3NhZ2VzLmdldFN0cmluZygiRVNULlBBUkFNRVNUTEFCRUwiKSk7IC8vJE5PTi1OTFMtMSQKKworCQkJCUdyaWREYXRhIGRhdGEgPSBuZXcgR3JpZERhdGEoKTsKKwkJCQlkYXRhLmhvcml6b250YWxBbGlnbm1lbnQgPSBHcmlkRGF0YS5GSUxMOworCQkJCWNvbnRhaW5lckxhYmVsLnNldExheW91dERhdGEoZGF0YSk7CisJCQl9CisJCQkKKwkJCUxhYmVsIGRlc2NyaXB0aW9uTGFiZWwgPSBuZXcgTGFiZWwoY29tcG9zaXRlLCBTV1QuTEVGVCk7CisJCQl7CisJCQkJZGVzY3JpcHRpb25MYWJlbC5zZXRUZXh0KCIiKTsgLy8kTk9OLU5MUy0xJAorCisJCQkJR3JpZERhdGEgZGF0YSA9IG5ldyBHcmlkRGF0YSgpOworCQkJCWRhdGEuaG9yaXpvbnRhbEFsaWdubWVudCA9IEdyaWREYXRhLkZJTEw7CisJCQkJZGVzY3JpcHRpb25MYWJlbC5zZXRMYXlvdXREYXRhKGRhdGEpOworCQkJfQorCQkJCisJCQlib29sZWFuIGZpcnN0ID0gdHJ1ZTsKKwkJCWZvcihQYXJhbWV0ZXJFc3RpbWF0b3JNZXRob2QgbWV0aG9kIDogUGFyYW1ldGVyRXN0aW1hdG9yTWV0aG9kLnZhbHVlcygpKSB7CisJCQkJRGlzZWFzZVR5cGUgZGF0YVR5cGUgPSAoKFBhcmFtZXRlckVzdGltYXRvcldpemFyZCl0aGlzLmdldFdpemFyZCgpKS5yZWZlcmVuY2VTY2VuYXJpb0RhdGFNYXAuZ2V0VHlwZSgpOworCQkJCWlmKG1ldGhvZC5nZXRUeXBlKCkgIT0gZGF0YVR5cGUpIGNvbnRpbnVlOworCQkJCUJ1dHRvbiBidXR0b24gPSBuZXcgQnV0dG9uKGNvbXBvc2l0ZSwgU1dULlJBRElPKTsKKwkJCSAgICBidXR0b24uc2V0VGV4dChtZXRob2QuZ2V0TmFtZSgpKTsKKwkJCSAgICBpZihmaXJzdCkgeworCQkJICAgIAlidXR0b24uc2V0U2VsZWN0aW9uKHRydWUpOworCQkJICAgIAkoKFBhcmFtZXRlckVzdGltYXRvcldpemFyZCl0aGlzLmdldFdpemFyZCgpKS5wYXJhbWV0ZXJFc3RpbWF0b3JNZXRob2QgPSBtZXRob2Q7CisJCQkgICAgCWRlc2NyaXB0aW9uTGFiZWwuc2V0VGV4dChtZXRob2QuZ2V0RGVzY3JpcHRpb24oKSk7CisJCQkgICAgCWZpcnN0ID0gZmFsc2U7CisJCQkgICAgfQorCQkJICAgIGZpbmFsIFBhcmFtZXRlckVzdGltYXRvcldpemFyZCB3aXphcmQgPSAoUGFyYW1ldGVyRXN0aW1hdG9yV2l6YXJkKXRoaXMuZ2V0V2l6YXJkKCk7CisJCQkgICAgZmluYWwgUGFyYW1ldGVyRXN0aW1hdG9yTWV0aG9kIGN1cnJlbnRNZXRob2QgPSBtZXRob2Q7CisJCQkgICAgZmluYWwgTGFiZWwgZGVzY0xhYmVsID0gZGVzY3JpcHRpb25MYWJlbDsKKwkJCSAgICBidXR0b24uYWRkU2VsZWN0aW9uTGlzdGVuZXIobmV3IFNlbGVjdGlvbkFkYXB0ZXIoKSB7CisJCQkJCXB1YmxpYyB2b2lkIHdpZGdldFNlbGVjdGVkKEBTdXBwcmVzc1dhcm5pbmdzKCJ1bnVzZWQiKQorCQkJCQkJCWZpbmFsIFNlbGVjdGlvbkV2ZW50IGUpIHsKKwkJCQkJCXdpemFyZC5wYXJhbWV0ZXJFc3RpbWF0b3JNZXRob2QgPSBjdXJyZW50TWV0aG9kOworCQkJCQkJZGVzY0xhYmVsLnNldFRleHQoY3VycmVudE1ldGhvZC5nZXREZXNjcmlwdGlvbigpKTsKKwkJCQkJCXdpemFyZC5nZXRDb250YWluZXIoKS51cGRhdGVCdXR0b25zKCk7CisJCQkJCX0KKwkJCSAgICB9KTsKKwkJCX0KKwkJCQorCQkJc2V0UGFnZUNvbXBsZXRlKHZhbGlkYXRlUGFnZSgpKTsKKwkJCXNldENvbnRyb2woY29tcG9zaXRlKTsKKwkJCQorCQl9CisJCQorCQkvKioKKwkJICogY2FuRmxpcFRvTmV4dFBhZ2UuIEZhbHNlIHNpbmNlIHRoZXJlIGlzIG5vIG5leHQgcGFnZQorCQkgKiAKKwkJICogQHJldHVybiBib29sZWFuIFRydWUgaWYgY2FuIGZsaXAKKwkJICovCisJCQorCQlwdWJsaWMgYm9vbGVhbiBjYW5GbGlwVG9OZXh0UGFnZSgpeworCQkJICByZXR1cm4gZmFsc2U7IC8vIFRoZXJlIGlzIG5vIG5leHQgcGFnZXIKKwkJfQorCQorCQkvKioKKwkJICogaXNQYWdlQ29tcGxldGUuCisJCSAqIAorCQkgKiBAcmV0dXJuIGJvb2xlYW4gVHJ1ZSBpZiBjb21wbGV0ZQorCQkgKi8KKwkJcHVibGljIGJvb2xlYW4gaXNQYWdlQ29tcGxldGUoKSB7CisJCQlyZXR1cm4gdGhpcy52YWxpZGF0ZVBhZ2UoKTsKKwkJfQorCX0KKworCS8qKgorCSAqIFRoZSBmcmFtZXdvcmsgY2FsbHMgdGhpcyB0byBjcmVhdGUgdGhlIGNvbnRlbnRzIG9mIHRoZSB3aXphcmQuCisJICovCisJcHVibGljIHZvaWQgYWRkUGFnZXMoKSB7CisJCXNlbGVjdEZvbGRlclBhZ2UgPSBuZXcgUGFyYW1ldGVyRXN0aW1hdG9yV2l6YXJkU2VsZWN0Rm9sZGVyUGFnZSgiRm9sZGVyIik7IC8vJE5PTi1OTFMtMSQKKwkJc2VsZWN0Rm9sZGVyUGFnZS5zZXRUaXRsZShNZXNzYWdlcy5nZXRTdHJpbmcoIkVTVC5XSVpBUkRQQUdFMVRJVExFIikpOworCQlzZWxlY3RGb2xkZXJQYWdlLnNldERlc2NyaXB0aW9uKCIiKTsgLy8kTk9OLU5MUy0xJAorCQlzZWxlY3RGb2xkZXJQYWdlLnNldERpck5hbWUodGhpcy5pbml0RGlyKTsKKwkJYWRkUGFnZShzZWxlY3RGb2xkZXJQYWdlKTsKKwl9Cit9CmRpZmYgLS1naXQgYS9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLnV0aWwuYW5hbHlzaXMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdXRpbC9hbmFseXNpcy92aWV3cy9Qcm9jZXNzb3JDb250cm9sLmphdmEgYi9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLnV0aWwuYW5hbHlzaXMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdXRpbC9hbmFseXNpcy92aWV3cy9Qcm9jZXNzb3JDb250cm9sLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzVmNTM0ZQotLS0gL2Rldi9udWxsCisrKyBiL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0udXRpbC5hbmFseXNpcy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91dGlsL2FuYWx5c2lzL3ZpZXdzL1Byb2Nlc3NvckNvbnRyb2wuamF2YQpAQCAtMCwwICsxLDU4NiBAQAorLy8gUHJvY2Vzc29yQ29udHJvbC5qYXZhCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0udXRpbC5hbmFseXNpcy52aWV3czsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNywgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqYXZhLmlvLkJ1ZmZlcmVkUmVhZGVyOworaW1wb3J0IGphdmEuaW8uRmlsZTsKK2ltcG9ydCBqYXZhLnRleHQuRGF0ZUZvcm1hdDsKK2ltcG9ydCBqYXZhLnRleHQuU2ltcGxlRGF0ZUZvcm1hdDsKK2ltcG9ydCBqYXZhLnV0aWwuQ2FsZW5kYXI7CitpbXBvcnQgamF2YS51dGlsLkRhdGU7CitpbXBvcnQgamF2YS51dGlsLk1hcDsKK2ltcG9ydCBqYXZhLnV0aWwuU3RyaW5nVG9rZW5pemVyOworCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5TY2VuYXJpb0luaXRpYWxpemF0aW9uRXhjZXB0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udXRpbC5hbmFseXNpcy5EYXRhUHJvY2Vzc29yOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5TV1Q7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5Nb2RpZnlFdmVudDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLk1vZGlmeUxpc3RlbmVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuU2VsZWN0aW9uQWRhcHRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLlNlbGVjdGlvbkV2ZW50OworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5sYXlvdXQuRm9ybUF0dGFjaG1lbnQ7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5Gb3JtRGF0YTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QubGF5b3V0LkZvcm1MYXlvdXQ7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5HcmlkTGF5b3V0OworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkJ1dHRvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29udHJvbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5EaXJlY3RvcnlEaWFsb2c7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuRGlzcGxheTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5GaWxlRGlhbG9nOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkxhYmVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlNoZWxsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlNwaW5uZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuVGV4dDsKKworLyoqCisgKiBHVUkgZm9yIHByb2Nlc3NpbmcgZGF0YSAtIHJlYWRpbmcgaW5jaWRlbmNlIGRhdGEgZnJvbSBmaWxlcyAoZmlsZSBuYW1lcyAKKyAqIGtleWVkIGJ5IGxvY2F0aW9uKSBhbmQgY3JlYXRpbmcgdGhlIG5ldyBmb3JtYXQgQ1NWIGZpbGVzIGZvciBTVEVNIAorICovCitwdWJsaWMgY2xhc3MgUHJvY2Vzc29yQ29udHJvbCBleHRlbmRzIEFuYWx5c2lzQ29udHJvbCB7CisKKwkvKioKKwkgKiBUaGUgZm9ybWF0IG9mIHRoZSB0aW1lIGluIHRoZSBpbnB1dCBmaWxlcworCSAqLworCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBUSU1FX0ZPUk1BVCA9ICJ5eXl5LU1NLWRkIjsKKwkKKwkvKioKKwkgKiBJbnB1dCB0ZXh0IGZpZWxkIGZvciB0aGUgc291cmNlIGZvbGRlciBvZiB0aGUgcmF3IGRhdGEKKwkgKi8KKwlwcm90ZWN0ZWQgc3RhdGljIFRleHQgc291cmNlRm9sZGVyOworCisJLyoqCisJICogSW5wdXQgdGV4dCBmaWVsZCBmb3IgdGhlIHRhcmdldCBmb2xkZXIgb2YgdGhlIHByb2Nlc3NlZCBkYXRhCisJICovCisJcHJvdGVjdGVkIHN0YXRpYyBUZXh0IHRhcmdldEZvbGRlcjsKKworCS8qKgorCSAqIElucHV0IHRleHQgZmllbGQgZm9yIHRoZSBwb3B1bGF0aW9uIGRhdGEgZmlsZQorCSAqLworCXByb3RlY3RlZCBzdGF0aWMgVGV4dCBwb3B1bGF0aW9uRGF0YUZpbGU7CisKKwkvKioKKwkgKiBSZWNvdmVyeSByYXRlCisJICovCisJcHJvdGVjdGVkIHN0YXRpYyBTcGlubmVyIHJlY292ZXJ5UmF0ZTsgCisKKwkvKioKKwkgKiBTdXNjZXB0aWJsZSByYXRlCisJICovCisJcHJvdGVjdGVkIHN0YXRpYyBTcGlubmVyIHN1c2NlcHRpYmxlUmF0ZTsKKworCS8qKgorCSAqIEltbXVuaXR5IGxvc3MgcmF0ZQorCSAqLworCXByb3RlY3RlZCBzdGF0aWMgU3Bpbm5lciBpbW11bml0eUxvc3NSYXRlOworCisJLyoqCisJICogUG9wdWxhdGlvbiBzaXplIGluIHRoZSBzdGFydCB5ZWFyCisJICovCisJcHJvdGVjdGVkIHN0YXRpYyBTcGlubmVyIHBvcHVsYXRpb25TaXplU3RhcnRZZWFyOworCisJLyoqCisJICogUG9wdWxhdGlvbiBzaXplIGluIHRoZSBlbmQgeWVhcgorCSAqLworCXByb3RlY3RlZCBzdGF0aWMgU3Bpbm5lciBwb3B1bGF0aW9uU2l6ZUVuZFllYXI7CisJCisJLyoqCisJICogQnV0dG9uIHRvIHRyaWdnZXIgdGhlIGRhdGEgcHJvY2Vzc2luZworCSAqLworCXByb3RlY3RlZCBCdXR0b24gcHJvY2Vzc0J1dHRvbjsKKwkKKwkvKioKKwkgKiBBIGxhYmVsIHRvIHJlcG9ydCBzdGF0dXMKKwkgKi8KKwlwcm90ZWN0ZWQgc3RhdGljIExhYmVsIHN0YXR1c0xhYmVsOworCisJLyoqCisJICogU3RhcnQgZGF0ZSBvZiB0aGUgZGF0YQorCSAqLworCXByb3RlY3RlZCBzdGF0aWMgRGF0ZSBzdGFydERhdGU7IAorCisJLyoqCisJICogRW5kIGRhdGUgb2YgdGhlIGRhdGEKKwkgKi8KKwlwcm90ZWN0ZWQgc3RhdGljIERhdGUgZW5kRGF0ZTsKKworCS8qKgorCSAqIEBwYXJhbSBwYXJlbnQKKwkgKi8KKwlwdWJsaWMgUHJvY2Vzc29yQ29udHJvbChmaW5hbCBDb21wb3NpdGUgcGFyZW50KSB7CisKKwkJc3VwZXIocGFyZW50LCBTV1QuTm9uZSk7CisJCWNyZWF0ZUNvbnRlbnRzKCk7CisJCisJfSAvLyBQcm9jZXNzb3JDb250cm9sCisKKwkvKioKKwkgKiBDcmVhdGUgdGhlIGNvbnRlbnRzIG9mIHRoZSBwbG90dGVyCisJICovCisJdm9pZCBjcmVhdGVDb250ZW50cygpIHsKKwkKKwkJZmluYWwgU2hlbGwgc2hlbGwgPSB0aGlzLmdldFNoZWxsKCk7CisKKwkJc2V0TGF5b3V0KG5ldyBGb3JtTGF5b3V0KCkpOworCisJCWlkZW50aWZpYWJsZVRpdGxlID0gbmV3IExhYmVsKHRoaXMsIFNXVC5OT05FKTsKKwkJaWRlbnRpZmlhYmxlVGl0bGUuc2V0VGV4dChNZXNzYWdlcy5nZXRTdHJpbmcoIlBST0NFU1NPUi5USVRMRSIpKTsKKwkJRGlzcGxheSBkaXNwbGF5ID0gdGhpcy5nZXREaXNwbGF5KCk7CisJCWlkZW50aWZpYWJsZVRpdGxlLnNldEZvbnQodGhpcy5nZXRMYXJnZXJGb250KDE4LCBkaXNwbGF5KSk7CisKKwkJLy8gc3RhdHVzIGxhYmVsCisJCXN0YXR1c0xhYmVsID0gbmV3IExhYmVsKHRoaXMsIFNXVC5CT1JERVIpOworCQlzdGF0dXNMYWJlbC5zZXRUZXh0KCIiKTsKKwkJCisJCS8vIHNvdXJjZSBmb2xkZXIKKwkJTGFiZWwgc291cmNlRm9sZGVyTGFiZWwgPSBuZXcgTGFiZWwodGhpcywgU1dULkJPUkRFUik7CisJCXNvdXJjZUZvbGRlckxhYmVsLnNldFRleHQoTWVzc2FnZXMuZ2V0U3RyaW5nKCJQUk9DRVNTT1IuU09VUkNFRk9MREVSIikpOworCisJCXNvdXJjZUZvbGRlciA9IG5ldyBUZXh0KHRoaXMsIFNXVC5CT1JERVIpOworCQlzb3VyY2VGb2xkZXIuc2V0VGV4dCgiIik7CisJCXNvdXJjZUZvbGRlci5zZXRFZGl0YWJsZShmYWxzZSk7IC8vIGNhbiBvbmx5IGJlIHNlbGVjdGVkIHRocm91Z2ggZGlhbG9nCisJCQorCSAgICBCdXR0b24gc2VsZWN0U291cmNlRm9sZGVyQnV0dG9uID0gbmV3IEJ1dHRvbih0aGlzLCBTV1QuTk9ORSk7CisJICAgIHNlbGVjdFNvdXJjZUZvbGRlckJ1dHRvbi5zZXRUZXh0KE1lc3NhZ2VzLmdldFN0cmluZygiUFJPQ0VTU09SLlNFTEVDVFNPVVJDRUZPTERFUiIpKTsKKwkJc2VsZWN0U291cmNlRm9sZGVyQnV0dG9uLmFkZFNlbGVjdGlvbkxpc3RlbmVyKG5ldyBTZWxlY3Rpb25BZGFwdGVyKCkgeworCQkJcHVibGljIHZvaWQgd2lkZ2V0U2VsZWN0ZWQoQFN1cHByZXNzV2FybmluZ3MoInVudXNlZCIpIGZpbmFsIFNlbGVjdGlvbkV2ZW50IGUpIHsKKwkJCQlmaW5hbCBEaXJlY3RvcnlEaWFsb2cgZGQgPSBuZXcgRGlyZWN0b3J5RGlhbG9nKHNoZWxsLCBTV1QuT1BFTik7CisJCQkJZGQuc2V0VGV4dChNZXNzYWdlcy5nZXRTdHJpbmcoIlBST0NFU1NPUi5TRUxFQ1RTT1VSQ0VGT0xERURJQUxPR1RJVExFIikpOworCisJCQkJU3RyaW5nIGRpciA9IHNvdXJjZUZvbGRlci5nZXRUZXh0KCk7CisJCQkJaWYoKGRpcj09bnVsbCl8fChkaXIubGVuZ3RoKCk8MSkpIGRpciA9IFJPT1RfUEFUSDsKKwkJCQkKKwkJCQlkZC5zZXRGaWx0ZXJQYXRoKGRpcik7CisJCQkJZmluYWwgU3RyaW5nIHNlbGVjdGVkID0gZGQub3BlbigpOworCQkJCWlmKHNlbGVjdGVkIT1udWxsKSBzb3VyY2VGb2xkZXIuc2V0VGV4dChzZWxlY3RlZCk7CisJCQkJaWYoc2VsZWN0ZWQgIT0gbnVsbCAmJiBzZWxlY3RlZC5sZW5ndGgoKSAhPSAwKSB7CisJCQkJCXN0YXR1c0xhYmVsLnNldFRleHQoTWVzc2FnZXMuZ2V0U3RyaW5nKCJQUk9DRVNTT1IuUkVBRElOR0RBVEEiKSk7CisJCQkJCXBvcHVsYXRpb25TaXplU3RhcnRZZWFyLnNldEVuYWJsZWQoZmFsc2UpOworCQkJCQlwb3B1bGF0aW9uU2l6ZUVuZFllYXIuc2V0RW5hYmxlZChmYWxzZSk7CisJCQkJCWluaXRpYWxpemVEYXRlcygpOworCQkJCQlpZihzdGFydERhdGUgIT0gbnVsbCAmJiBlbmREYXRlICE9IG51bGwpIHsKKwkJCQkJCURhdGVGb3JtYXQgZm9ybWF0ID0gbmV3IFNpbXBsZURhdGVGb3JtYXQoVElNRV9GT1JNQVQpOworCQkJCQkJc3RhdHVzTGFiZWwuc2V0VGV4dCgiUHJvY2Vzc2luZyBkYXRhIGZyb20gIiArIGZvcm1hdC5mb3JtYXQoc3RhcnREYXRlKSArICIgdG8gIiArIGZvcm1hdC5mb3JtYXQoZW5kRGF0ZSkpOworCQkJCQkJCisJCQkJCQkvLyBpbml0aWFsaXplIHRhcmdldCBmb2xkZXIgdG8gdGhlIHNvdXJjZSBmb2xkZXIKKwkJCQkJCWlmICh0YXJnZXRGb2xkZXIuZ2V0VGV4dCgpID09IG51bGwgfHwgdGFyZ2V0Rm9sZGVyLmdldFRleHQoKS5sZW5ndGgoKSA9PSAwKSB7CisJCQkJCQkJdGFyZ2V0Rm9sZGVyLnNldFRleHQoc2VsZWN0ZWQpOworCQkJCQkJfQorCQkJCQkJCisJCQkJCQlDYWxlbmRhciBzdGFydENhbCA9IENhbGVuZGFyLmdldEluc3RhbmNlKCk7CisJCQkJCQlzdGFydENhbC5zZXRUaW1lKHN0YXJ0RGF0ZSk7CisJCQkJCQlDYWxlbmRhciBlbmRDYWwgPSBDYWxlbmRhci5nZXRJbnN0YW5jZSgpOworCQkJCQkJZW5kQ2FsLnNldFRpbWUoZW5kRGF0ZSk7CisJCQkJCQlwb3B1bGF0aW9uU2l6ZVN0YXJ0WWVhci5zZXRFbmFibGVkKHRydWUpOworCQkJCQkJaWYoc3RhcnRDYWwuZ2V0KENhbGVuZGFyLllFQVIpIDwgZW5kQ2FsLmdldChDYWxlbmRhci5ZRUFSKSkgeworCQkJCQkJCXBvcHVsYXRpb25TaXplRW5kWWVhci5zZXRFbmFibGVkKHRydWUpOworCQkJCQkJfQorCQkJCQl9IGVsc2UgeworCQkJCQkJLy8gZmFpbGVkIHRvIHJlYWQgZGF0YSAtIGludmFsaWQgZGF0YQorCQkJCQkJc3RhdHVzTGFiZWwuc2V0VGV4dChNZXNzYWdlcy5nZXRTdHJpbmcoIlBST0NFU1NPUi5GQUlMRURSRUFEREFUQSIpKTsKKwkJCQkJCXNvdXJjZUZvbGRlci5zZXRUZXh0KCIiKTsKKwkJCQkJfQorCQkJCX0KKwkJCQllbmFibGVQcm9jZXNzQnV0dG9uKCk7CisJCQl9CisJCX0pOworCisJICAgIC8vIHRhcmdldCBmb2xkZXIKKwkJTGFiZWwgdGFyZ2V0Rm9sZGVyTGFiZWwgPSBuZXcgTGFiZWwodGhpcywgU1dULkJPUkRFUik7CisJCXRhcmdldEZvbGRlckxhYmVsLnNldFRleHQoTWVzc2FnZXMuZ2V0U3RyaW5nKCJQUk9DRVNTT1IuVEFSR0VURk9MREVSIikpOworCisJCXRhcmdldEZvbGRlciA9IG5ldyBUZXh0KHRoaXMsIFNXVC5CT1JERVIpOworCQl0YXJnZXRGb2xkZXIuc2V0Qm91bmRzKDEwLCAxMCwgMTAwLCAyMCk7CisJCXRhcmdldEZvbGRlci5zZXRUZXh0KCIiKTsKKwkJdGFyZ2V0Rm9sZGVyLnNldEVkaXRhYmxlKGZhbHNlKTsgLy8gY2FuIG9ubHkgYmUgc2VsZWN0ZWQgdGhyb3VnaCBkaWFsb2cKKworCQlCdXR0b24gc2VsZWN0VGFyZ2V0Rm9sZGVyQnV0dG9uID0gbmV3IEJ1dHRvbih0aGlzLCBTV1QuTk9ORSk7CisJICAgIHNlbGVjdFRhcmdldEZvbGRlckJ1dHRvbi5zZXRUZXh0KE1lc3NhZ2VzLmdldFN0cmluZygiUFJPQ0VTU09SLlNFTEVDVFRBUkdFVEZPTERFUiIpKTsKKwkJc2VsZWN0VGFyZ2V0Rm9sZGVyQnV0dG9uLmFkZFNlbGVjdGlvbkxpc3RlbmVyKG5ldyBTZWxlY3Rpb25BZGFwdGVyKCkgeworCQkJcHVibGljIHZvaWQgd2lkZ2V0U2VsZWN0ZWQoQFN1cHByZXNzV2FybmluZ3MoInVudXNlZCIpIGZpbmFsIFNlbGVjdGlvbkV2ZW50IGUpIHsKKwkJCQlmaW5hbCBEaXJlY3RvcnlEaWFsb2cgZGQgPSBuZXcgRGlyZWN0b3J5RGlhbG9nKHNoZWxsLCBTV1QuT1BFTik7CisJCQkJZGQuc2V0VGV4dChNZXNzYWdlcy5nZXRTdHJpbmcoIlBST0NFU1NPUi5TRUxFQ1RUQVJHRVRGT0xERURJQUxPR1RJVExFIikpOworCQkJCQorCQkJCVN0cmluZyBkaXIgPSB0YXJnZXRGb2xkZXIuZ2V0VGV4dCgpOworCQkJCWlmKChkaXI9PW51bGwpfHwoZGlyLmxlbmd0aCgpPDEpKSBkaXIgPSBST09UX1BBVEg7CisJCQkJCisJCQkJZGQuc2V0RmlsdGVyUGF0aChkaXIpOworCQkJCWZpbmFsIFN0cmluZyBzZWxlY3RlZCA9IGRkLm9wZW4oKTsKKwkJCQlpZihzZWxlY3RlZCE9bnVsbCkgdGFyZ2V0Rm9sZGVyLnNldFRleHQoc2VsZWN0ZWQpOworCQkJCWVuYWJsZVByb2Nlc3NCdXR0b24oKTsKKwkJCX0KKwkJfSk7CisKKwkgICAgLy8gcG9wdWxhdGlvbiBkYXRhIGZpbGUKKwkJTGFiZWwgcG9wdWxhdGlvbkRhdGFGaWxlTGFiZWwgPSBuZXcgTGFiZWwodGhpcywgU1dULkJPUkRFUik7CisJCXBvcHVsYXRpb25EYXRhRmlsZUxhYmVsLnNldFRleHQoTWVzc2FnZXMuZ2V0U3RyaW5nKCJQUk9DRVNTT1IuUE9QVUxBVElPTkRBVEFGSUxFIikpOworCisJCXBvcHVsYXRpb25EYXRhRmlsZSA9IG5ldyBUZXh0KHRoaXMsIFNXVC5CT1JERVIpOworCQlwb3B1bGF0aW9uRGF0YUZpbGUuc2V0Qm91bmRzKDEwLCAxMCwgMTAwLCAyMCk7CisJCXBvcHVsYXRpb25EYXRhRmlsZS5zZXRUZXh0KCIiKTsKKwkJcG9wdWxhdGlvbkRhdGFGaWxlLnNldEVkaXRhYmxlKGZhbHNlKTsgLy8gY2FuIG9ubHkgYmUgc2VsZWN0ZWQgdGhyb3VnaCBkaWFsb2cKKworCQlCdXR0b24gc2VsZWN0UG9wdWxhdGlvbkRhdGFGaWxlQnV0dG9uID0gbmV3IEJ1dHRvbih0aGlzLCBTV1QuTk9ORSk7CisJCXNlbGVjdFBvcHVsYXRpb25EYXRhRmlsZUJ1dHRvbi5zZXRUZXh0KE1lc3NhZ2VzLmdldFN0cmluZygiUFJPQ0VTU09SLlNFTEVDVFBPUFVMQVRJT05EQVRBRklMRSIpKTsKKwkJc2VsZWN0UG9wdWxhdGlvbkRhdGFGaWxlQnV0dG9uLmFkZFNlbGVjdGlvbkxpc3RlbmVyKG5ldyBTZWxlY3Rpb25BZGFwdGVyKCkgeworCQkJcHVibGljIHZvaWQgd2lkZ2V0U2VsZWN0ZWQoQFN1cHByZXNzV2FybmluZ3MoInVudXNlZCIpIGZpbmFsIFNlbGVjdGlvbkV2ZW50IGUpIHsKKwkJCQlmaW5hbCBGaWxlRGlhbG9nIGZkID0gbmV3IEZpbGVEaWFsb2coc2hlbGwsIFNXVC5PUEVOKTsKKwkJCQlmZC5zZXRUZXh0KE1lc3NhZ2VzLmdldFN0cmluZygiUFJPQ0VTU09SLlNFTEVDVFBPUFVMQVRJT05EQVRBRklMRURJQUxPR1RJVExFIikpOworCQkJCVN0cmluZyBiZWdpblNlYXJjaCA9IHBvcHVsYXRpb25EYXRhRmlsZS5nZXRUZXh0KCk7CisJCQkJaWYoKGJlZ2luU2VhcmNoPT1udWxsKXx8KGJlZ2luU2VhcmNoLmxlbmd0aCgpPDEpKSBiZWdpblNlYXJjaCA9IFJPT1RfUEFUSDsKKwkJCQkKKwkJCQlmZC5zZXRGaWx0ZXJQYXRoKGJlZ2luU2VhcmNoKTsKKwkJCQlmaW5hbCBTdHJpbmcgc2VsZWN0ZWQgPSBmZC5vcGVuKCk7CisJCQkJaWYoc2VsZWN0ZWQhPW51bGwpIHBvcHVsYXRpb25EYXRhRmlsZS5zZXRUZXh0KHNlbGVjdGVkKTsKKwkJCQllbmFibGVQcm9jZXNzQnV0dG9uKCk7CisJCQl9CisJCX0pOworCisJCS8vIHBhcmFtZXRlcnMKKwkJTGFiZWwgcGFyYW1ldGVyc0xhYmVsID0gbmV3IExhYmVsKHRoaXMsIFNXVC5CT1JERVIpOworCQlwYXJhbWV0ZXJzTGFiZWwuc2V0VGV4dChNZXNzYWdlcy5nZXRTdHJpbmcoIlBST0NFU1NPUi5QQVJBTUVURVJTIikpOworCisJCUNvbXBvc2l0ZSBzcGlubmVyQ29tcG9zaXRlID0gbmV3IENvbXBvc2l0ZSh0aGlzLCBTV1QuQk9SREVSKTsKKwkJR3JpZExheW91dCBncmlkTGF5b3V0ID0gbmV3IEdyaWRMYXlvdXQoKTsKKwkJZ3JpZExheW91dC5udW1Db2x1bW5zID0gNjsKKwkgICAgc3Bpbm5lckNvbXBvc2l0ZS5zZXRMYXlvdXQoZ3JpZExheW91dCk7CisJCQorCQkvLyByZWNvdmVyeSByYXRlCisJCUxhYmVsIHJlY292ZXJ5UmF0ZUxhYmVsID0gbmV3IExhYmVsKHNwaW5uZXJDb21wb3NpdGUsIFNXVC5OT05FKTsKKwkJcmVjb3ZlcnlSYXRlTGFiZWwuc2V0VGV4dChNZXNzYWdlcy5nZXRTdHJpbmcoIlBST0NFU1NPUi5SRUNPVkVSWVJBVEUiKSk7CisKKwkJcmVjb3ZlcnlSYXRlID0gbmV3IFNwaW5uZXIoc3Bpbm5lckNvbXBvc2l0ZSwgU1dULk5PTkUpOworCQlyZWNvdmVyeVJhdGUuc2V0RGlnaXRzKDIpOyAvLyBhbGxvdyAyIGRlY2ltYWwgcGxhY2VzCisJCXJlY292ZXJ5UmF0ZS5zZXRNaW5pbXVtKDApOwkvLyBzZXQgdGhlIG1pbmltdW0gdmFsdWUgdG8gMAorCQlyZWNvdmVyeVJhdGUuc2V0TWF4aW11bSgxMDApOyAvLyBzZXQgdGhlIG1heGltdW0gdmFsdWUgdG8gMS4wCisJCXJlY292ZXJ5UmF0ZS5zZXRJbmNyZW1lbnQoMSk7IC8vIHNldCB0aGUgaW5jcmVtZW50IHZhbHVlIHRvIDAuMDEKKwkJcmVjb3ZlcnlSYXRlLnNldFNlbGVjdGlvbigyMCk7CS8vIHNldCB0aGUgaW5pdGlhbCB2YWx1ZSAwLjIKKwkJcmVjb3ZlcnlSYXRlLmFkZE1vZGlmeUxpc3RlbmVyKG5ldyBNb2RpZnlMaXN0ZW5lcigpIHsKKwkJCXB1YmxpYyB2b2lkIG1vZGlmeVRleHQoQFN1cHByZXNzV2FybmluZ3MoInVudXNlZCIpIGZpbmFsIE1vZGlmeUV2ZW50IGUpIHsKKwkJCQllbmFibGVQcm9jZXNzQnV0dG9uKCk7CisJCQl9CisJCX0pOworCisJCS8vIHN1c2NlcHRpYmxlIHJhdGUKKwkJTGFiZWwgc3VzY2VwdGlibGVSYXRlTGFiZWwgPSBuZXcgTGFiZWwoc3Bpbm5lckNvbXBvc2l0ZSwgU1dULk5PTkUpOworCQlzdXNjZXB0aWJsZVJhdGVMYWJlbC5zZXRUZXh0KE1lc3NhZ2VzLmdldFN0cmluZygiUFJPQ0VTU09SLlNVU0NFUFRJQkxFUkFURSIpKTsKKworCQlzdXNjZXB0aWJsZVJhdGUgPSBuZXcgU3Bpbm5lcihzcGlubmVyQ29tcG9zaXRlLCBTV1QuTk9ORSk7CisJCXN1c2NlcHRpYmxlUmF0ZS5zZXREaWdpdHMoMyk7IC8vIGFsbG93IDMgZGVjaW1hbCBwbGFjZXMKKwkJc3VzY2VwdGlibGVSYXRlLnNldE1pbmltdW0oMCk7CS8vIHNldCB0aGUgbWluaW11bSB2YWx1ZSB0byAwCisJCXN1c2NlcHRpYmxlUmF0ZS5zZXRNYXhpbXVtKDEwMDApOyAvLyBzZXQgdGhlIG1heGltdW0gdmFsdWUgdG8gMS4wCisJCXN1c2NlcHRpYmxlUmF0ZS5zZXRJbmNyZW1lbnQoMSk7IC8vIHNldCB0aGUgaW5jcmVtZW50IHZhbHVlIHRvIDAuMDAxCisJCXN1c2NlcHRpYmxlUmF0ZS5zZXRTZWxlY3Rpb24oMzMzKTsJLy8gc2V0IHRoZSBpbml0aWFsIHZhbHVlIDAuMDAxCisJCXN1c2NlcHRpYmxlUmF0ZS5hZGRNb2RpZnlMaXN0ZW5lcihuZXcgTW9kaWZ5TGlzdGVuZXIoKSB7CisJCQlwdWJsaWMgdm9pZCBtb2RpZnlUZXh0KEBTdXBwcmVzc1dhcm5pbmdzKCJ1bnVzZWQiKSBmaW5hbCBNb2RpZnlFdmVudCBlKSB7CisJCQkJZW5hYmxlUHJvY2Vzc0J1dHRvbigpOworCQkJfQorCQl9KTsKKworCQkvLyBpbW11bml0eSBsb3NzIHJhdGUKKwkJTGFiZWwgaW1tdW5pdHlMb3NzUmF0ZUxhYmVsID0gbmV3IExhYmVsKHNwaW5uZXJDb21wb3NpdGUsIFNXVC5OT05FKTsKKwkJaW1tdW5pdHlMb3NzUmF0ZUxhYmVsLnNldFRleHQoTWVzc2FnZXMuZ2V0U3RyaW5nKCJQUk9DRVNTT1IuSU1NVU5JVFlMT1NTUkFURSIpKTsKKworCQlpbW11bml0eUxvc3NSYXRlID0gbmV3IFNwaW5uZXIoc3Bpbm5lckNvbXBvc2l0ZSwgU1dULk5PTkUpOworCQlpbW11bml0eUxvc3NSYXRlLnNldERpZ2l0cyg0KTsgLy8gYWxsb3cgNCBkZWNpbWFsIHBsYWNlcworCQlpbW11bml0eUxvc3NSYXRlLnNldE1pbmltdW0oMCk7CS8vIHNldCB0aGUgbWluaW11bSB2YWx1ZSB0byAwCisJCWltbXVuaXR5TG9zc1JhdGUuc2V0TWF4aW11bSgxMDAwMCk7IC8vIHNldCB0aGUgbWF4aW11bSB2YWx1ZSB0byAxLjAKKwkJaW1tdW5pdHlMb3NzUmF0ZS5zZXRJbmNyZW1lbnQoMSk7IC8vIHNldCB0aGUgaW5jcmVtZW50IHZhbHVlIHRvIDAuMDAwMQorCQlpbW11bml0eUxvc3NSYXRlLnNldFNlbGVjdGlvbig5KTsJLy8gc2V0IHRoZSBpbml0aWFsIHZhbHVlIDAuMDAwOQorCQlpbW11bml0eUxvc3NSYXRlLmFkZE1vZGlmeUxpc3RlbmVyKG5ldyBNb2RpZnlMaXN0ZW5lcigpIHsKKwkJCXB1YmxpYyB2b2lkIG1vZGlmeVRleHQoQFN1cHByZXNzV2FybmluZ3MoInVudXNlZCIpIGZpbmFsIE1vZGlmeUV2ZW50IGUpIHsKKwkJCQllbmFibGVQcm9jZXNzQnV0dG9uKCk7CisJCQl9CisJCX0pOworCisJCXNwaW5uZXJDb21wb3NpdGUucGFjaygpOworCisJCS8vIHBvcHVsYXRpb24gc2l6ZQorCQlMYWJlbCBwb3B1bGF0aW9uU2l6ZUxhYmVsID0gbmV3IExhYmVsKHRoaXMsIFNXVC5CT1JERVIpOworCQlwb3B1bGF0aW9uU2l6ZUxhYmVsLnNldFRleHQoTWVzc2FnZXMuZ2V0U3RyaW5nKCJQUk9DRVNTT1IuUE9QVUxBVElPTlNJWkUiKSk7CisKKwkJQ29tcG9zaXRlIHNpemVDb21wb3NpdGUgPSBuZXcgQ29tcG9zaXRlKHRoaXMsIFNXVC5CT1JERVIpOworCQlncmlkTGF5b3V0ID0gbmV3IEdyaWRMYXlvdXQoKTsKKwkJZ3JpZExheW91dC5udW1Db2x1bW5zID0gNDsKKwkgICAgc2l6ZUNvbXBvc2l0ZS5zZXRMYXlvdXQoZ3JpZExheW91dCk7CisKKwkJLy8gc3RhcnQgeWVhcgorCQlMYWJlbCBwb3B1bGF0aW9uU2l6ZVN0YXJ0WWVhckxhYmVsID0gbmV3IExhYmVsKHNpemVDb21wb3NpdGUsIFNXVC5OT05FKTsKKwkJcG9wdWxhdGlvblNpemVTdGFydFllYXJMYWJlbC5zZXRUZXh0KE1lc3NhZ2VzLmdldFN0cmluZygiUFJPQ0VTU09SLlNUQVJUWUVBUiIpKTsKKworCQlwb3B1bGF0aW9uU2l6ZVN0YXJ0WWVhciA9IG5ldyBTcGlubmVyKHNpemVDb21wb3NpdGUsIFNXVC5OT05FKTsKKwkJcG9wdWxhdGlvblNpemVTdGFydFllYXIuc2V0RGlnaXRzKDApOyAvLyBhbGxvdyAwIGRlY2ltYWwgcGxhY2VzCisJCXBvcHVsYXRpb25TaXplU3RhcnRZZWFyLnNldE1pbmltdW0oMCk7CS8vIHNldCB0aGUgbWluaW11bSB2YWx1ZSB0byAwCisJCXBvcHVsYXRpb25TaXplU3RhcnRZZWFyLnNldE1heGltdW0oMTAwMDAwMDAwKTsgLy8gc2V0IHRoZSBtYXhpbXVtIHZhbHVlIHRvIDEwMCwwMDAsMDAwCisJCXBvcHVsYXRpb25TaXplU3RhcnRZZWFyLnNldEluY3JlbWVudCgxMDAwKTsgLy8gc2V0IHRoZSBpbmNyZW1lbnQgdmFsdWUgdG8gMTAwMAorCQlwb3B1bGF0aW9uU2l6ZVN0YXJ0WWVhci5zZXRTZWxlY3Rpb24oMTAwMDAwMDApOwkvLyBzZXQgdGhlIGluaXRpYWwgdmFsdWUgMTAsMDAwLDAwMAorCQlwb3B1bGF0aW9uU2l6ZVN0YXJ0WWVhci5zZXRFbmFibGVkKGZhbHNlKTsKKwkJcG9wdWxhdGlvblNpemVTdGFydFllYXIuYWRkTW9kaWZ5TGlzdGVuZXIobmV3IE1vZGlmeUxpc3RlbmVyKCkgeworCQkJcHVibGljIHZvaWQgbW9kaWZ5VGV4dChAU3VwcHJlc3NXYXJuaW5ncygidW51c2VkIikgZmluYWwgTW9kaWZ5RXZlbnQgZSkgeworCQkJCWVuYWJsZVByb2Nlc3NCdXR0b24oKTsKKwkJCX0KKwkJfSk7CisKKwkJLy8gZW5kIHllYXIKKwkJTGFiZWwgcG9wdWxhdGlvblNpemVFbmRZZWFyTGFiZWwgPSBuZXcgTGFiZWwoc2l6ZUNvbXBvc2l0ZSwgU1dULk5PTkUpOworCQlwb3B1bGF0aW9uU2l6ZUVuZFllYXJMYWJlbC5zZXRUZXh0KE1lc3NhZ2VzLmdldFN0cmluZygiUFJPQ0VTU09SLkVORFlFQVIiKSk7CisKKwkJcG9wdWxhdGlvblNpemVFbmRZZWFyID0gbmV3IFNwaW5uZXIoc2l6ZUNvbXBvc2l0ZSwgU1dULk5PTkUpOworCQlwb3B1bGF0aW9uU2l6ZUVuZFllYXIuc2V0RGlnaXRzKDApOyAvLyBhbGxvdyAwIGRlY2ltYWwgcGxhY2VzCisJCXBvcHVsYXRpb25TaXplRW5kWWVhci5zZXRNaW5pbXVtKDApOwkvLyBzZXQgdGhlIG1pbmltdW0gdmFsdWUgdG8gMAorCQlwb3B1bGF0aW9uU2l6ZUVuZFllYXIuc2V0TWF4aW11bSgxMDAwMDAwMDApOyAvLyBzZXQgdGhlIG1heGltdW0gdmFsdWUgdG8gMTAwLDAwMCwwMDAKKwkJcG9wdWxhdGlvblNpemVFbmRZZWFyLnNldEluY3JlbWVudCgxMDAwKTsgLy8gc2V0IHRoZSBpbmNyZW1lbnQgdmFsdWUgdG8gMTAwMAorCQlwb3B1bGF0aW9uU2l6ZUVuZFllYXIuc2V0U2VsZWN0aW9uKDEwMDAwMDAwKTsJLy8gc2V0IHRoZSBpbml0aWFsIHZhbHVlIDEwLDAwMCwwMDAKKwkJcG9wdWxhdGlvblNpemVFbmRZZWFyLnNldEVuYWJsZWQoZmFsc2UpOworCQlwb3B1bGF0aW9uU2l6ZUVuZFllYXIuYWRkTW9kaWZ5TGlzdGVuZXIobmV3IE1vZGlmeUxpc3RlbmVyKCkgeworCQkJcHVibGljIHZvaWQgbW9kaWZ5VGV4dChAU3VwcHJlc3NXYXJuaW5ncygidW51c2VkIikgZmluYWwgTW9kaWZ5RXZlbnQgZSkgeworCQkJCWVuYWJsZVByb2Nlc3NCdXR0b24oKTsKKwkJCX0KKwkJfSk7CisKKwkJc2l6ZUNvbXBvc2l0ZS5wYWNrKCk7CisJICAgIAorCQkvLyBwcm9jZXNzIGJ1dHRvbgorCQlwcm9jZXNzQnV0dG9uID0gbmV3IEJ1dHRvbih0aGlzLCBTV1QuTk9ORSk7CisJCXByb2Nlc3NCdXR0b24uc2V0VGV4dChNZXNzYWdlcy5nZXRTdHJpbmcoIlBST0NFU1NPUi5QUk9DRVNTIikpOworCQlwcm9jZXNzQnV0dG9uLmFkZFNlbGVjdGlvbkxpc3RlbmVyKG5ldyBTZWxlY3Rpb25BZGFwdGVyKCkgeworCQkJcHVibGljIHZvaWQgd2lkZ2V0U2VsZWN0ZWQoQFN1cHByZXNzV2FybmluZ3MoInVudXNlZCIpIGZpbmFsIFNlbGVjdGlvbkV2ZW50IGUpIHsKKwkJCQl0cnkgeworCQkJCQlEYXRhUHJvY2Vzc29yIHByb2Nlc3NvciA9IG5ldyBEYXRhUHJvY2Vzc29yKCk7CisJCQkJCXByb2Nlc3Nvci5wcm9jZXNzKAorCQkJCQkJCXNvdXJjZUZvbGRlci5nZXRUZXh0KCksIAorCQkJCQkJCXRhcmdldEZvbGRlci5nZXRUZXh0KCksIAorCQkJCQkJCXN0YXJ0RGF0ZSwgCisJCQkJCQkJZW5kRGF0ZSwgCisJCQkJCQkJcG9wdWxhdGlvbkRhdGFGaWxlLmdldFRleHQoKSwgCisJCQkJCQkJTG9uZy5wYXJzZUxvbmcocG9wdWxhdGlvblNpemVTdGFydFllYXIuZ2V0VGV4dCgpKSwgCisJCQkJCQkJTG9uZy5wYXJzZUxvbmcocG9wdWxhdGlvblNpemVFbmRZZWFyLmdldFRleHQoKSksCisJCQkJCQkJRG91YmxlLnBhcnNlRG91YmxlKHJlY292ZXJ5UmF0ZS5nZXRUZXh0KCkpLCAKKwkJCQkJCQlEb3VibGUucGFyc2VEb3VibGUoc3VzY2VwdGlibGVSYXRlLmdldFRleHQoKSksCisJCQkJCQkJRG91YmxlLnBhcnNlRG91YmxlKGltbXVuaXR5TG9zc1JhdGUuZ2V0VGV4dCgpKSk7CisJCQkJCXN0YXR1c0xhYmVsLnNldFRleHQoTWVzc2FnZXMuZ2V0U3RyaW5nKCJDT01NT04uRE9ORSIpKTsKKwkJCQl9IGNhdGNoKFNjZW5hcmlvSW5pdGlhbGl6YXRpb25FeGNlcHRpb24gZXgpIHsKKwkJCQkJc3RhdHVzTGFiZWwuc2V0VGV4dChleC5nZXRNZXNzYWdlKCkpOworCQkJCX0KKwkJCX0KKwkJfSk7CisJCWVuYWJsZVByb2Nlc3NCdXR0b24oKTsKKworCQljcmVhdGVGb3JtRGF0YShudWxsLCBpZGVudGlmaWFibGVUaXRsZSwgbnVsbCwgbnVsbCwgMCk7CisJCWNyZWF0ZUZvcm1EYXRhKGlkZW50aWZpYWJsZVRpdGxlLCBzb3VyY2VGb2xkZXJMYWJlbCwgc291cmNlRm9sZGVyLCBzZWxlY3RTb3VyY2VGb2xkZXJCdXR0b24sIDUpOworCQljcmVhdGVGb3JtRGF0YShzb3VyY2VGb2xkZXJMYWJlbCwgdGFyZ2V0Rm9sZGVyTGFiZWwsIHRhcmdldEZvbGRlciwgc2VsZWN0VGFyZ2V0Rm9sZGVyQnV0dG9uLCA1KTsKKwkJY3JlYXRlRm9ybURhdGEodGFyZ2V0Rm9sZGVyTGFiZWwsIHBvcHVsYXRpb25EYXRhRmlsZUxhYmVsLCBwb3B1bGF0aW9uRGF0YUZpbGUsIHNlbGVjdFBvcHVsYXRpb25EYXRhRmlsZUJ1dHRvbiwgNSk7CisJCWNyZWF0ZUZvcm1EYXRhKHBvcHVsYXRpb25EYXRhRmlsZUxhYmVsLCBwYXJhbWV0ZXJzTGFiZWwsIHNwaW5uZXJDb21wb3NpdGUsIG51bGwsIDIwKTsKKwkJY3JlYXRlRm9ybURhdGEoc3Bpbm5lckNvbXBvc2l0ZSwgcG9wdWxhdGlvblNpemVMYWJlbCwgc2l6ZUNvbXBvc2l0ZSwgbnVsbCwgNSk7CisJCWNyZWF0ZUZvcm1EYXRhKHNpemVDb21wb3NpdGUsIG51bGwsIG51bGwsIHByb2Nlc3NCdXR0b24sIDUpOworCQljcmVhdGVGb3JtRGF0YShwcm9jZXNzQnV0dG9uLCBzdGF0dXNMYWJlbCwgbnVsbCwgbnVsbCwgMTAwKTsKKworCX0gLy8gY3JlYXRlQ29udGVudHMKKwkKKwkvKioKKwkgKiBFbmFibGUgb3IgZGlzYWJsZSB0aGUgcHJvY2VzcyBidXR0b24KKwkgKi8KKwl2b2lkIGVuYWJsZVByb2Nlc3NCdXR0b24oKSB7CisJCQorCQlib29sZWFuIGVuYWJsZWQgPSB0cnVlOworCQlpZiAoZW5hYmxlZCAmJiAoc291cmNlRm9sZGVyLmdldFRleHQoKSA9PSBudWxsIHx8IHNvdXJjZUZvbGRlci5nZXRUZXh0KCkubGVuZ3RoKCkgPT0gMCkpCisJCQllbmFibGVkID0gZmFsc2U7CisJCWlmIChlbmFibGVkICYmICh0YXJnZXRGb2xkZXIuZ2V0VGV4dCgpID09IG51bGwgfHwgdGFyZ2V0Rm9sZGVyLmdldFRleHQoKS5sZW5ndGgoKSA9PSAwKSkKKwkJCWVuYWJsZWQgPSBmYWxzZTsKKwkJaWYgKGVuYWJsZWQgJiYgKHBvcHVsYXRpb25EYXRhRmlsZS5nZXRUZXh0KCkgPT0gbnVsbCB8fCBwb3B1bGF0aW9uRGF0YUZpbGUuZ2V0VGV4dCgpLmxlbmd0aCgpID09IDApKQorCQkJZW5hYmxlZCA9IGZhbHNlOworCQlpZiAoZW5hYmxlZCAmJiAocmVjb3ZlcnlSYXRlLmdldFRleHQoKSA9PSBudWxsIHx8IHJlY292ZXJ5UmF0ZS5nZXRUZXh0KCkubGVuZ3RoKCkgPT0gMCkpCisJCQllbmFibGVkID0gZmFsc2U7CisJCWlmIChlbmFibGVkICYmIChzdXNjZXB0aWJsZVJhdGUuZ2V0VGV4dCgpID09IG51bGwgfHwgc3VzY2VwdGlibGVSYXRlLmdldFRleHQoKS5sZW5ndGgoKSA9PSAwKSkKKwkJCWVuYWJsZWQgPSBmYWxzZTsKKwkJaWYgKGVuYWJsZWQgJiYgKGltbXVuaXR5TG9zc1JhdGUuZ2V0VGV4dCgpID09IG51bGwgfHwgaW1tdW5pdHlMb3NzUmF0ZS5nZXRUZXh0KCkubGVuZ3RoKCkgPT0gMCkpCisJCQllbmFibGVkID0gZmFsc2U7CisJCWlmIChlbmFibGVkICYmIChwb3B1bGF0aW9uU2l6ZVN0YXJ0WWVhci5nZXRUZXh0KCkgPT0gbnVsbCB8fCBwb3B1bGF0aW9uU2l6ZVN0YXJ0WWVhci5nZXRUZXh0KCkubGVuZ3RoKCkgPT0gMCkpCisJCQllbmFibGVkID0gZmFsc2U7CisJCWlmIChlbmFibGVkICYmIChwb3B1bGF0aW9uU2l6ZUVuZFllYXIuZ2V0VGV4dCgpID09IG51bGwgfHwgcG9wdWxhdGlvblNpemVFbmRZZWFyLmdldFRleHQoKS5sZW5ndGgoKSA9PSAwKSkKKwkJCWVuYWJsZWQgPSBmYWxzZTsKKwkJdGhpcy5wcm9jZXNzQnV0dG9uLnNldEVuYWJsZWQoZW5hYmxlZCk7CisJCisJfSAvLyBlbmFibGVQcm9jZXNzQnV0dG9uCisJCisJLyoqCisJICogSW5pdGlhbGl6ZXMgdGhlIHN0YXJ0IGFuZCBlbmQgZGF0ZXMgb2YgdGhlIGRhdGEuCisJICovCisJcHJvdGVjdGVkIHZvaWQgaW5pdGlhbGl6ZURhdGVzKCkgeworCQorCQlzdGFydERhdGUgPSBudWxsOworCQllbmREYXRlID0gbnVsbDsKKworCQlGaWxlIGZpbGUgPSBuZXcgRmlsZShzb3VyY2VGb2xkZXIuZ2V0VGV4dCgpKTsKKwkJCisJCUZpbGVbXSBhbGxGaWxlcyA9IGZpbGUubGlzdEZpbGVzKCk7CisJCWZvciAoaW50IGkgPSAwOyBpIDwgYWxsRmlsZXMubGVuZ3RoOyBpKyspIHsKKwkJCVN0cmluZyBmaWxlTmFtZSA9IGFsbEZpbGVzW2ldLmdldE5hbWUoKTsKKwkJCWlmIChmaWxlTmFtZS5pbmRleE9mKCIudHh0IikgPj0gMCkgeworCQkJCUJ1ZmZlcmVkUmVhZGVyIGZpbGVSZWFkZXIgPSBEYXRhUHJvY2Vzc29yLm9wZW5SZWFkZXIoYWxsRmlsZXNbaV0pOworCQkJCWlmIChmaWxlUmVhZGVyICE9IG51bGwpIHsKKwkJCQkJdHJ5IHsKKwkJCQkJCVN0cmluZyBidWZmZXIgPSBudWxsOworCQkJCQkJZmlsZVJlYWRlci5yZWFkTGluZSgpOyAvLyBza2lwIHRoZSBoZWFkZXIKKwkJCQkJCXdoaWxlIChEYXRhUHJvY2Vzc29yLkVPRihidWZmZXIgPSBmaWxlUmVhZGVyLnJlYWRMaW5lKCkpICE9IHRydWUpIHsKKwkJCQkJCQlTdHJpbmdUb2tlbml6ZXIgdG9rZW5pemVyID0gbmV3IFN0cmluZ1Rva2VuaXplcihidWZmZXIsICIsIik7IC8vJE5PTi1OTFMtMSQKKwkJCQkJCQlpZih0b2tlbml6ZXIuY291bnRUb2tlbnMoKSA9PSAzKSB7CisJCQkJCQkJCXRva2VuaXplci5uZXh0VG9rZW4oIiwiKTsgLy8gaXRlcmF0aW9uCisJCQkJCQkJCVN0cmluZyB0aW1lID0gdG9rZW5pemVyLm5leHRUb2tlbigiLCIpOworCQkJCQkJCQl0b2tlbml6ZXIubmV4dFRva2VuKCIsIik7IC8vIGluY2lkZW5jZQorCQkJCQkJCQkKKwkJCQkJCQkJaWYodGltZSE9IG51bGwpIHsKKwkJCQkJCQkJCURhdGVGb3JtYXQgZm9ybWF0ID0gbmV3IFNpbXBsZURhdGVGb3JtYXQoVElNRV9GT1JNQVQpOworCQkJCQkJCQkJRGF0ZSBkYXRlID0gZm9ybWF0LnBhcnNlKHRpbWUpOworCQkJCQkJCQkJaWYoc3RhcnREYXRlID09IG51bGwgfHwgZGF0ZS5iZWZvcmUoc3RhcnREYXRlKSkgeworCQkJCQkJCQkJCXN0YXJ0RGF0ZSA9IGRhdGU7CisJCQkJCQkJCQl9CisJCQkJCQkJCQlpZihlbmREYXRlID09IG51bGwgfHwgZGF0ZS5hZnRlcihlbmREYXRlKSkgeworCQkJCQkJCQkJCWVuZERhdGUgPSBkYXRlOworCQkJCQkJCQkJfQorCQkJCQkJCQl9CisJCQkJCQkJfQorCQkJCQkJfQorCQkJCQl9IGNhdGNoKEV4Y2VwdGlvbiBleCkgeworCQkJCQkJLy8gaWdub3JlCisJCQkJCX0KKwkJCQl9IC8vIGlmICEgbnVsbAorCQkJfSAvLyBpZiB2YWxpZCBmaWxlbmFtZQorCQl9IC8vIGZvcgorCQkKKwl9IC8vIGluaXRpYWxpemVEYXRlcworCisJLyoqCisJICogQ29uc3RydWN0cyBhIG5ldyBpbnN0YW5jZSBvZiBGb3JtRGF0YSB3aGljaCBjb250YWlucyBMYWJlbCwgQ29udHJvbCBhbmQgQnV0dG9uLgorCSAqIAorCSAqIEBwYXJhbSB0b3BDb250cm9sIFRoZSBjb250cm9sIGF0IHRoZSB0b3Agb2YgdGhpcyBGb3JtRGF0YQorCSAqIEBwYXJhbSBsYWJlbCBUaGUgbGFiZWwgb2YgdGhpcyBGb3JtRGF0YQorCSAqIEBwYXJhbSB0ZXh0IFRoZSBjb250cm9sIG9mIHRoaXMgRm9ybURhdGEKKwkgKiBAcGFyYW0gYnV0dG9uIFRoZSBidXR0b24gb2YgdGhpcyBGb3JtRGF0YQorCSAqIEBwYXJhbSBzcGFjZXIgVmVydGljYWwgc3BhY2UgYmV0d2VlbiBjb250cm9scworCSAqLworCQorCXByaXZhdGUgdm9pZCBjcmVhdGVGb3JtRGF0YShDb250cm9sIHRvcENvbnRyb2wsIExhYmVsIGxhYmVsLCBDb250cm9sIHRleHQsIEJ1dHRvbiBidXR0b24sIGludCBzcGFjZXIpIHsgCisKKwkJLy8gbGFiZWwKKwkJaWYgKGxhYmVsICE9IG51bGwpIHsKKwkJCWZpbmFsIEZvcm1EYXRhIGxhYmVsRm9ybURhdGEgPSBuZXcgRm9ybURhdGEoKTsKKwkJCWlmICh0b3BDb250cm9sICE9IG51bGwpCisJCQkJbGFiZWxGb3JtRGF0YS50b3AgPSBuZXcgRm9ybUF0dGFjaG1lbnQodG9wQ29udHJvbCwgc3BhY2VyKTsKKwkJCWVsc2UKKwkJCQlsYWJlbEZvcm1EYXRhLnRvcCA9IG5ldyBGb3JtQXR0YWNobWVudCgwLCAwKTsKKy8vCQkJbGFiZWxGb3JtRGF0YS5ib3R0b20gPSBuZXcgRm9ybUF0dGFjaG1lbnQoYm90dG9tLCAwKTsKKwkJCWxhYmVsRm9ybURhdGEubGVmdCA9IG5ldyBGb3JtQXR0YWNobWVudCgwLCAwKTsKKwkJCWludCBudW1lcmF0b3IgPSAxNTsKKwkJCWlmICh0ZXh0ID09IG51bGwgJiYgYnV0dG9uID09IG51bGwpCisJCQkJbnVtZXJhdG9yID0gMTAwOworCQkJbGFiZWxGb3JtRGF0YS5yaWdodCA9IG5ldyBGb3JtQXR0YWNobWVudChudW1lcmF0b3IsIDApOworCQkJbGFiZWwuc2V0TGF5b3V0RGF0YShsYWJlbEZvcm1EYXRhKTsKKwkJfQorCQkKKwkJLy8gdGV4dCBmaWVsZAorCQlpZiAodGV4dCAhPSBudWxsKSB7CisJCQlmaW5hbCBGb3JtRGF0YSB0ZXh0RmllbGRGb3JtRGF0YSA9IG5ldyBGb3JtRGF0YSgpOworCQkJaWYgKHRvcENvbnRyb2wgIT0gbnVsbCkKKwkJCQl0ZXh0RmllbGRGb3JtRGF0YS50b3AgPSBuZXcgRm9ybUF0dGFjaG1lbnQodG9wQ29udHJvbCwgc3BhY2VyKTsKKwkJCWVsc2UKKwkJCQl0ZXh0RmllbGRGb3JtRGF0YS50b3AgPSBuZXcgRm9ybUF0dGFjaG1lbnQoMCwgMCk7CisvLwkJCXRleHRGaWVsZEZvcm1EYXRhLmJvdHRvbSA9IG5ldyBGb3JtQXR0YWNobWVudChib3R0b20sIDApOworCQkJaWYgKGxhYmVsICE9IG51bGwpCisJCQkJdGV4dEZpZWxkRm9ybURhdGEubGVmdCA9IG5ldyBGb3JtQXR0YWNobWVudChsYWJlbCwgNSk7CisJCQllbHNlCisJCQkJdGV4dEZpZWxkRm9ybURhdGEubGVmdCA9IG5ldyBGb3JtQXR0YWNobWVudCgwLCAwKTsKKwkJCWludCBudW1lcmF0b3IgPSA4MDsKKwkJCWlmIChidXR0b24gPT0gbnVsbCkKKwkJCQludW1lcmF0b3IgPSAxMDA7CisJCQl0ZXh0RmllbGRGb3JtRGF0YS5yaWdodCA9IG5ldyBGb3JtQXR0YWNobWVudChudW1lcmF0b3IsIDApOworCQkJdGV4dC5zZXRMYXlvdXREYXRhKHRleHRGaWVsZEZvcm1EYXRhKTsKKwkJfQorCQkKKwkJLy8gc2VsZWN0aW9uIGJ1dHRvbgorCQlpZiAoYnV0dG9uICE9IG51bGwpIHsKKwkJCWZpbmFsIEZvcm1EYXRhIGJ1dHRvbkZvcm1EYXRhID0gbmV3IEZvcm1EYXRhKCk7CQkKKwkJCWlmICh0b3BDb250cm9sICE9IG51bGwpCisJCQkJYnV0dG9uRm9ybURhdGEudG9wID0gbmV3IEZvcm1BdHRhY2htZW50KHRvcENvbnRyb2wsIDApOworCQkJZWxzZQorCQkJCWJ1dHRvbkZvcm1EYXRhLnRvcCA9IG5ldyBGb3JtQXR0YWNobWVudCgwLCAwKTsKKy8vCQkJYnV0dG9uRm9ybURhdGEuYm90dG9tID0gbmV3IEZvcm1BdHRhY2htZW50KGJvdHRvbSwgMCk7CisJCQlpZiAodGV4dCAhPSBudWxsKQorCQkJCWJ1dHRvbkZvcm1EYXRhLmxlZnQgPSBuZXcgRm9ybUF0dGFjaG1lbnQodGV4dCwgNSk7CisJCQllbHNlIGlmIChsYWJlbCAhPSBudWxsKQorCQkJCWJ1dHRvbkZvcm1EYXRhLmxlZnQgPSBuZXcgRm9ybUF0dGFjaG1lbnQobGFiZWwsIDUpOworCQkJZWxzZQorCQkJCWJ1dHRvbkZvcm1EYXRhLmxlZnQgPSBuZXcgRm9ybUF0dGFjaG1lbnQoMCwgMCk7CisJCQlidXR0b25Gb3JtRGF0YS5yaWdodCA9IG5ldyBGb3JtQXR0YWNobWVudCgxMDAsIDApOworCQkJYnV0dG9uLnNldExheW91dERhdGEoYnV0dG9uRm9ybURhdGEpOworCQl9CisKKwl9IC8vIGNyZWF0ZUZvcm1EYXRhCisJCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5XaWRnZXQjZGlzcG9zZSgpCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgZGlzcG9zZSgpIHsKKwkJc3VwZXIuZGlzcG9zZSgpOworCX0gLy8gZGlzcG9zZQorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnV0aWwuYW5hbHlzaXMudmlld3MuQW5hbHlzaXNDb250cm9sI3JlbW92ZSgpCisJICovCisJcHVibGljIHZvaWQgcmVtb3ZlKCkgeworCQkvLyBkbyBub3RoaW5nIGZvciBub3cKKwl9IC8vIHJlbW92ZQorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnV0aWwuYW5hbHlzaXMudmlld3MuQW5hbHlzaXNDb250cm9sI2luaXRpYWxpemVIZWFkZXIoU3RyaW5nKQorCSAqLworCXByb3RlY3RlZCB2b2lkIGluaXRpYWxpemVIZWFkZXIoQFN1cHByZXNzV2FybmluZ3MoInVudXNlZCIpIFN0cmluZyBmb2xkZXJOYW1lKSB7CisJCS8vIGRvIG5vdGhpbmcgZm9yIG5vdworCX0gLy8gaW5pdGlhbGl6ZUhlYWRlcgorCisJLyoqCisJICogTm90IHVzZWQKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0udXRpbC5hbmFseXNpcy52aWV3cy5BbmFseXNpc0NvbnRyb2wjZ2V0VmFsdWVzKGludCwgaW50KQorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBkb3VibGVbXSBnZXRWYWx1ZXMoQFN1cHByZXNzV2FybmluZ3MoInVudXNlZCIpaW50IGNoYXJ0SW5kZXgsIEBTdXBwcmVzc1dhcm5pbmdzKCJ1bnVzZWQiKWludCB0cmFqZWN0b3J5KSB7CisJCXJldHVybiBudWxsOworCX0gLy8gZ2V0VmFsdWVzCisJCisJLyoqCisJICogTm90IHVzZWQKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0udXRpbC5hbmFseXNpcy52aWV3cy5BbmFseXNpc0NvbnRyb2wjZ2V0UHJvcGVydHkoaW50LCBpbnQpCisJICovCisJcHVibGljIFN0cmluZyBnZXRQcm9wZXJ0eShAU3VwcHJlc3NXYXJuaW5ncygidW51c2VkIikgaW50IGNoYXJ0SW5kZXgsIEBTdXBwcmVzc1dhcm5pbmdzKCJ1bnVzZWQiKSBpbnQgc3RhdGUpIHsKKwkJcmV0dXJuIG51bGw7CisJfSAvLyBnZXRQcm9wZXJ0eQorCQorCS8qKgorCSAqIE5vdCB1c2VkCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnV0aWwuYW5hbHlzaXMudmlld3MuQW5hbHlzaXNDb250cm9sI2dldE51bVByb3BlcnRpZXMoaW50IGNoYXJ0SW5kZXgpCisJICovCisJcHVibGljIGludCBnZXROdW1Qcm9wZXJ0aWVzKEBTdXBwcmVzc1dhcm5pbmdzKCJ1bnVzZWQiKSBpbnQgY2hhcnRJbmRleCkgeworCQlyZXR1cm4gMDsKKwl9IC8vIGdldE51bVByb3BlcnRpZXMKKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS51dGlsLmFuYWx5c2lzLnZpZXdzLkFuYWx5c2lzQ29udHJvbCNnZXRDb250cm9sUGFyYW1ldGVyc01hcCgpCisJICovCisJcHVibGljIE1hcDxTdHJpbmcsIE9iamVjdD4gZ2V0Q29udHJvbFBhcmFtZXRlcnNNYXAoKSB7CisKKwkJLy8gYWRkIG5vdGhpbmcgZm9yIG5vdworCQlyZXR1cm4gY29udHJvbFBhcmFtZXRlcnNNYXA7CisJfSAvLyBnZXRDb250cm9sUGFyYW1ldGVyc01hcAorCQorfSAvLyBQcm9jZXNzb3JDb250cm9sCmRpZmYgLS1naXQgYS9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLnV0aWwuYW5hbHlzaXMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdXRpbC9hbmFseXNpcy92aWV3cy9Qcm9jZXNzb3JGYWN0b3J5LmphdmEgYi9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLnV0aWwuYW5hbHlzaXMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdXRpbC9hbmFseXNpcy92aWV3cy9Qcm9jZXNzb3JGYWN0b3J5LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2IxZWFhZAotLS0gL2Rldi9udWxsCisrKyBiL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0udXRpbC5hbmFseXNpcy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91dGlsL2FuYWx5c2lzL3ZpZXdzL1Byb2Nlc3NvckZhY3RvcnkuamF2YQpAQCAtMCwwICsxLDUxIEBACisvLyBQcm9jZXNzb3JGYWN0b3J5LmphdmEKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS51dGlsLmFuYWx5c2lzLnZpZXdzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA3LCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZTsKKworLyoqCisgKiBUaGlzIGNsYXNzIGlzIGEgZmFjdG9yeSBmb3IgY3JlYXRpbmcge0BsaW5rIFByb2Nlc3NvckNvbnRyb2x9IGluc3RhbmNlcy4KKyAqLworcHVibGljIGNsYXNzIFByb2Nlc3NvckZhY3RvcnkgaW1wbGVtZW50cyBBbmFseXNpc0NvbnRyb2xGYWN0b3J5IHsKKworCS8qKgorCSAqIHB1YmxpYyBJTlNUQU5DRSBmb3IgdGhpcyBGYWN0b3J5CisJICovCisJcHVibGljIHN0YXRpYyBQcm9jZXNzb3JGYWN0b3J5IElOU1RBTkNFID0gbmV3IFByb2Nlc3NvckZhY3RvcnkoKTsKKworCS8qKgorCSAqIENvbnN0YW50cyAKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBBTkFMWVNJU19UWVBFID0gIlByb2Nlc3NvciI7CisJCisJLyoqCisJICogCisJICogQHBhcmFtIHBhcmVudAorCSAqIEBwYXJhbSBkaXJOYW1lCisJICogQHJldHVybiBuZXcgUHJvY2Vzc29yQ29udHJvbCgpCisJICovCisJcHVibGljIEFuYWx5c2lzQ29udHJvbCBjcmVhdGUoZmluYWwgQ29tcG9zaXRlIHBhcmVudCwgU3RyaW5nIGRpck5hbWUpIHsKKwkJCQkKKwkJcmV0dXJuIG5ldyBQcm9jZXNzb3JDb250cm9sKHBhcmVudCk7CisJfQorCisJLyoqCisJICogQHJldHVybiB0eXBlIG9mIGFuYWx5c2lzCisJICogCisJICovCisJcHVibGljIFN0cmluZyBnZXRDb250cm9sVHlwZSgpIHsKKwkJcmV0dXJuIEFOQUxZU0lTX1RZUEU7CisJfQorCit9IC8vIFByb2Nlc3NvckZhY3RvcnkKZGlmZiAtLWdpdCBhL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0udXRpbC5hbmFseXNpcy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91dGlsL2FuYWx5c2lzL3ZpZXdzL1Byb2Nlc3NvclZpZXcuamF2YSBiL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0udXRpbC5hbmFseXNpcy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91dGlsL2FuYWx5c2lzL3ZpZXdzL1Byb2Nlc3NvclZpZXcuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZGYxOTU2Ci0tLSAvZGV2L251bGwKKysrIGIvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS51dGlsLmFuYWx5c2lzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3V0aWwvYW5hbHlzaXMvdmlld3MvUHJvY2Vzc29yVmlldy5qYXZhCkBAIC0wLDAgKzEsNjMgQEAKKy8vIFByb2Nlc3NvclZpZXcgCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0udXRpbC5hbmFseXNpcy52aWV3czsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNywgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uam9icy5zaW11bGF0aW9uLlNpbXVsYXRpb25NYW5hZ2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5wYXJ0LlZpZXdQYXJ0OworCisvKioKKyAqIFRoaXMgdmlldyBwcm92aWRlcyBhIHRvb2wgdG8gZXN0aW1hdGUgcGFyYW1ldGVycyBmb3IgYSBzZXQgb2YgcmVmZXJlbmNlIGRhdGEKKyAqLworcHVibGljIGNsYXNzIFByb2Nlc3NvclZpZXcgZXh0ZW5kcyBWaWV3UGFydCB7CisKKwkvKioKKwkgKiBUaGUgaWRlbnRpZmllciBvZiB0aGUgUHJvY2Vzc29yIFZpZXcge0B2YWx1ZX0KKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBJRF9Qcm9jZXNzb3JfVklFVyA9ICJvcmcuZWNsaXBzZS5zdGVtLnV0aWwuYW5hbHlzaXMudmlld3MucHJvY2Vzc29yIjsgLy8kTk9OLU5MUy0xJAorCisJcHJpdmF0ZSBBbmFseXNpc1ZpZXdlciBhbmFseXNpc1ZpZXdlcjsKKworCS8qKgorLy8JICogQHNlZSBvcmcuZWNsaXBzZS51aS5wYXJ0LldvcmtiZW5jaFBhcnQjY3JlYXRlUGFydENvbnRyb2wob3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlKQorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGNyZWF0ZVBhcnRDb250cm9sKGZpbmFsIENvbXBvc2l0ZSBwYXJlbnQpIHsKKworCQlhbmFseXNpc1ZpZXdlciA9IG5ldyBBbmFseXNpc1ZpZXdlcihwYXJlbnQsIFByb2Nlc3NvckZhY3RvcnkuSU5TVEFOQ0UpOworCQlhbmFseXNpc1ZpZXdlci5zZXRJbnB1dChTaW11bGF0aW9uTWFuYWdlci5nZXRNYW5hZ2VyKCkpOworCisJCWdldFNpdGUoKS5zZXRTZWxlY3Rpb25Qcm92aWRlcihhbmFseXNpc1ZpZXdlcik7CisKKwl9IC8vIGNyZWF0ZVBhcnRDb250cm9sCisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnVpLnBhcnQuV29ya2JlbmNoUGFydCNkaXNwb3NlKCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBkaXNwb3NlKCkgeworCQlzdXBlci5kaXNwb3NlKCk7CisJfSAvLyBkaXNwb3NlCisKKwkvKioKKwkgKiBUaGlzIGlzIHJlcXVpcmVkIGJ5IHRoZSBpbnRlcmZhY2UsIGJ1dCB3ZSdyZSBub3QgdXNpbmcgaXQuCisJICogCisJICogQHNlZSBvcmcuZWNsaXBzZS51aS5wYXJ0LldvcmtiZW5jaFBhcnQjc2V0Rm9jdXMoKQorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIHNldEZvY3VzKCkgeworCQkvLyBOb3RoaW5nCisJfSAvLyBzZXRGb2N1cworCit9IC8vIFByb2Nlc3NvclZpZXcKZGlmZiAtLWdpdCBhL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0udXRpbC5hbmFseXNpcy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91dGlsL2FuYWx5c2lzL3ZpZXdzL1JlcG9ydHNDb250ZXh0TWVudUFjdGlvbi5qYXZhIGIvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS51dGlsLmFuYWx5c2lzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3V0aWwvYW5hbHlzaXMvdmlld3MvUmVwb3J0c0NvbnRleHRNZW51QWN0aW9uLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWFmOGQ5NQotLS0gL2Rldi9udWxsCisrKyBiL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0udXRpbC5hbmFseXNpcy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91dGlsL2FuYWx5c2lzL3ZpZXdzL1JlcG9ydHNDb250ZXh0TWVudUFjdGlvbi5qYXZhCkBAIC0wLDAgKzEsNjQgQEAKKy8vIFJlcG9ydHNDb250ZXh0TWVudUFjdGlvbiAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS51dGlsLmFuYWx5c2lzLnZpZXdzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA2LCAyMDA3LCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udWkudmlld3MuZ2VvZ3JhcGhpYy5tYXAuU2VsZWN0ZWRSZXBvcnRzTWFuYWdlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5JVmlld0FjdGlvbkRlbGVnYXRlOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklWaWV3UGFydDsKKworLyoqCisgKiBUaGUgY2xhc3MgaXMgYSBkZWxlZ2F0aW9uIGZvciB0aGUgcG9wdXAgbWVudSBvZiB0aGUKKyAqIDxjb2RlPkdlb2dyYXBoaWNSZW5kZXJlcjwvY29kZT4uIFRoZSBwdXJwb3NlIG9mIHRoaXMgY2xhc3MgaXMgdG8gaGFuZGxlCisgKiB0aGUgYWN0aXZpdHkgaW4gdGhlIHJlcG9ydHMgY29udGV4dCBtZW51IGFuZCBrZWVwIHRoZSBjdXJyZW50IHN0YXRlIG9mIGFsbAorICogZW5hYmxlZC9kaXNhYmxlZCByZXBvcnRzIGZyb20gdGhhdCBtZW51LiBUaGUgcmVwb3J0J3MgPGNvZGU+Vmlld1BhcnQ8L2NvZGU+CisgKiBvYmplY3Qgd2lsbCB1c2UgdGhpcyBjbGFzcyBmb3IgY2hlY2tpbmcgd2hldGhlciB0byBnZW5lcmF0ZSBhIHJlcG9ydCBvciBub3QuCisgKi8KK3B1YmxpYyBjbGFzcyBSZXBvcnRzQ29udGV4dE1lbnVBY3Rpb24gCisJaW1wbGVtZW50cyBJVmlld0FjdGlvbkRlbGVnYXRlIHsKKwkKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnVpLklBY3Rpb25EZWxlZ2F0ZSNydW4ob3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklBY3Rpb24pCisJICovCisJcHVibGljIHZvaWQgcnVuKG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JQWN0aW9uIGFjdGlvbikgeworCQlTdHJpbmcgcmVwb3J0SWQgPSBhY3Rpb24uZ2V0SWQoKTsKKwkJCisJCWlmIChTZWxlY3RlZFJlcG9ydHNNYW5hZ2VyLmdldEluc3RhbmNlKCkuaXNSZXBvcnRFbmFibGVkKHJlcG9ydElkKSkgeyAvLyBUaGUgcmVwb3J0IHdhcyBwcmV2aW91c2x5IGVuYWJsZWQgc28gZGlzYWJsZSBpdAorCQkJU2VsZWN0ZWRSZXBvcnRzTWFuYWdlci5nZXRJbnN0YW5jZSgpLmRpc2FibGVSZXBvcnRGb3JJZGVudGlmaWFibGUocmVwb3J0SWQpOworCQkJYWN0aW9uLnNldENoZWNrZWQoZmFsc2UpOworCQl9CisJCWVsc2UKKwkJeworCQkJU2VsZWN0ZWRSZXBvcnRzTWFuYWdlci5nZXRJbnN0YW5jZSgpLmVuYWJsZVJlcG9ydEZvcklkZW50aWZpYWJsZShyZXBvcnRJZCk7CisJCQlhY3Rpb24uc2V0Q2hlY2tlZCh0cnVlKTsKKwkJfQorCX0KKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2UudWkuSUFjdGlvbkRlbGVnYXRlI3NlbGVjdGlvbkNoYW5nZWQob3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklBY3Rpb24sCisJICogICAgICBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb24pCisJICovCisJcHVibGljIHZvaWQgc2VsZWN0aW9uQ2hhbmdlZChAU3VwcHJlc3NXYXJuaW5ncygidW51c2VkIikKKwlvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSUFjdGlvbiBhY3Rpb24sCisJCQlAU3VwcHJlc3NXYXJuaW5ncygidW51c2VkIikKKwkJCW9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvbiBzZWxlY3Rpb24pIHsKKwkJLy8gRG8gTm90aGluZworCX0KKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2UudWkuSVZpZXdBY3Rpb25EZWxlZ2F0ZSNpbml0KG9yZy5lY2xpcHNlLnVpLklWaWV3UGFydCkKKwkgKi8KKwlwdWJsaWMgdm9pZCBpbml0KEBTdXBwcmVzc1dhcm5pbmdzKCJ1bnVzZWQiKQorCUlWaWV3UGFydCBhcmcwKSB7CisJCS8vIERvIE5vdGhpbmcKKwl9Cit9CmRpZmYgLS1naXQgYS9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLnV0aWwuYW5hbHlzaXMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdXRpbC9hbmFseXNpcy92aWV3cy9TY2VuYXJpb0NvbXBhcmlzb25Db250cm9sLmphdmEgYi9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLnV0aWwuYW5hbHlzaXMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdXRpbC9hbmFseXNpcy92aWV3cy9TY2VuYXJpb0NvbXBhcmlzb25Db250cm9sLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGNmN2QwOAotLS0gL2Rldi9udWxsCisrKyBiL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0udXRpbC5hbmFseXNpcy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91dGlsL2FuYWx5c2lzL3ZpZXdzL1NjZW5hcmlvQ29tcGFyaXNvbkNvbnRyb2wuamF2YQpAQCAtMCwwICsxLDU4MCBAQAorLy8gRXN0aW1hdG9yQ29udHJvbC5qYXZhCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0udXRpbC5hbmFseXNpcy52aWV3czsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNywgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OworaW1wb3J0IGphdmEudXRpbC5MaXN0OworaW1wb3J0IGphdmEudXRpbC5NYXA7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5iaXJ0LmNoYXJ0Lm1vZGVsLmF0dHJpYnV0ZS5Db2xvckRlZmluaXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuYmlydC5jaGFydC5tb2RlbC5hdHRyaWJ1dGUuaW1wbC5Db2xvckRlZmluaXRpb25JbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5Db3JlRXhjZXB0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JQ29uZmlndXJhdGlvbkVsZW1lbnQ7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklFeHRlbnNpb25SZWdpc3RyeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGxhdGZvcm07CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLkVMaXN0OworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmRpYWxvZ3MuUHJvZ3Jlc3NNb25pdG9yRGlhbG9nOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuRXJyb3JGdW5jdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLkVycm9yUmVzdWx0OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuU2NlbmFyaW9Jbml0aWFsaXphdGlvbkV4Y2VwdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnV0aWwuYW5hbHlzaXMuQWN0aXZhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udXRpbC5hbmFseXNpcy5DU1ZBbmFseXNpc1dyaXRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnV0aWwuYW5hbHlzaXMuU2NlbmFyaW9BbmFseXNpc1N1aXRlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5TV1Q7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5EaXNwb3NlRXZlbnQ7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5EaXNwb3NlTGlzdGVuZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5TZWxlY3Rpb25BZGFwdGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuU2VsZWN0aW9uRXZlbnQ7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmdyYXBoaWNzLkZvbnQ7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5Gb3JtQXR0YWNobWVudDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QubGF5b3V0LkZvcm1EYXRhOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5sYXlvdXQuRm9ybUxheW91dDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5CdXR0b247CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tYm87CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkRpcmVjdG9yeURpYWxvZzsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5EaXNwbGF5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkxhYmVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlNoZWxsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlRleHQ7CisKKy8qKgorICogVGhpcyBjbGFzcyBpcyBhIFNXVCBHVUkgY29tcG9uZW50IHRoYXQgdXNlcyBCSVJUIHRvIHBsb3QKKyAqLworcHVibGljIGNsYXNzIFNjZW5hcmlvQ29tcGFyaXNvbkNvbnRyb2wgZXh0ZW5kcyBBbmFseXNpc0NvbnRyb2wgeworCQorCS8qKgorCSAqIHVzZWQgdG8gaWRlbnRpZnkgdXNlciBwcmVmZXJlbmNlcyBmb3IgdGhpcyBjbGFzcworCSAqIFRoaXMgU3RyaW5nIGlzIG5vdCBodW1hbiByZWFkYWJsZSBzbyBkb2VzIG5vdCBuZWVkIHRvIGJlIE5MUydkLiBJdCBpcyBhIGtleSBpbiBhIG1hcAorCSAqLworCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBDT05TVU1FUiA9ICJTQ0VOQVJJT0NPTVBBUklTT05fQ09OVFJPTCI7CisJCisJLyoqCisJICogdXNlZCB0byByZW1lbWJlciB0aGUgcHJpbWFyeSBkaXJlY3RvcnkgaW4gdGhlIHVzZXIgcHJlZmVyZW5jZXMKKwkgKiBUaGlzIFN0cmluZyBpcyBub3QgaHVtYW4gcmVhZGFibGUgc28gZG9lcyBub3QgbmVlZCB0byBiZSBOTFMnZC4gSXQgaXMgYSBrZXkgaW4gYSBtYXAKKwkgKi8KKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgUFJJTUFSWV9GT0xERVJfS0VZID0gQ09OU1VNRVIrIl9QUklNQVJZIjsKKwkvKioKKwkgKiB1c2VkIHRvIHJlbWVtYmVyIHRoZSBzZWNvbmRhcnkgZGlyZWN0b3J5IGluIHRoZSB1c2VyIHByZWZlcmVuY2VzCisJICogVGhpcyBTdHJpbmcgaXMgbm90IGh1bWFuIHJlYWRhYmxlIHNvIGRvZXMgbm90IG5lZWQgdG8gYmUgTkxTJ2QuIEl0IGlzIGEga2V5IGluIGEgbWFwCisJICovCisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFNFQ09OREFSWV9GT0xERVJfS0VZID0gQ09OU1VNRVIrIl9TRUNPTkRBUlkiOworCisJLyoqCisJICogIEZpcnN0IFNjZW5hcmlvIExhYmVsIC0gaW5kaWNhdGVzIG51bWJlciBvZiByZWdpb25zIGJlaW5nIHdhdGNoZWQgZm9yIGFuYWx5c2lzLgorCSAqICBUaGVyZSBhcmUgbG9jYXRpb25zIHdpdGggcmVsYXRpdmUgdmFsdWUgaGlzdG9yeSBwcm92aWRlcnMgYXR0YWNoZWQKKwkgKi8KKwlMYWJlbCBmaXJzdFNjZW5hcmlvRm9sZGVyTGFiZWw7CisJCisJLyoqCisJICogIFNlY29uZCBTY2VuYXJpbyBMYWJlbCAtIGluZGljYXRlcyBudW1iZXIgb2YgcmVnaW9ucyBiZWluZyB3YXRjaGVkIGZvciBhbmFseXNpcy4KKwkgKiAgVGhlcmUgYXJlIGxvY2F0aW9ucyB3aXRoIHJlbGF0aXZlIHZhbHVlIGhpc3RvcnkgcHJvdmlkZXJzIGF0dGFjaGVkCisJICovCisJTGFiZWwgc2Vjb25kU2NlbmFyaW9Gb2xkZXJMYWJlbDsKKwkKKwkvKioKKwkgKiBGaXJzdCBpbnB1dCB0ZXh0IGZpZWxkIGZvciB0aGUgc2NlbmFyaW8gZm9sZGVyIG9mIGRhdGEgdG8gdXNlIGluIG1ha2luZyB0aGUgZXN0aW1hdGlvbgorCSAqLworCVRleHQgdGV4dDE7CisJCisKKwkvKioKKwkgKiBTZWNvbmQgSW5wdXQgdGV4dCBmaWVsZCBmb3IgdGhlIHNjZW5hcmlvIGZvbGRlciBvZiBkYXRhIHRvIGJlIGNvbXBhcmVkCisJICoqLworCVRleHQgdGV4dDI7CisJCisJCisJcHJvdGVjdGVkIENvbWJvIGVycm9yRnVuY3Rpb25Db21ibzsKKwlwcm90ZWN0ZWQgRXJyb3JGdW5jdGlvbiBbXSBlcnJvckZ1bmN0aW9uczsKKwkKKwkvKioKKwkgKiBSZXN1bHRzIG9mIGFuYWx5c2lzCisJICovCisJTGFiZWwgc3RhdHVzTGFiZWw7CisJCisJCisJLyoqCisJICogQ29sb3JzIGZvciB0aGUgdGltZSBzZXJpZXMgY2hhcnQKKwkgKi8KKwlzdGF0aWMgZmluYWwgQ29sb3JEZWZpbml0aW9uIGZvcmVHcm91bmQgPSBDb2xvckRlZmluaXRpb25JbXBsLkJMQUNLKCk7CisJc3RhdGljIGZpbmFsIENvbG9yRGVmaW5pdGlvbiBiYWNrZ3JvdW5kR3JvdW5kID0gQ29sb3JEZWZpbml0aW9uSW1wbC5jcmVhdGUoMjU1LCAyMzEsIDE4Nik7Ly9jb2xvciBpcyBjYWxsZWQgd2hlYXQKKwlzdGF0aWMgZmluYWwgQ29sb3JEZWZpbml0aW9uIGZyYW1lQ29sb3IgPSBDb2xvckRlZmluaXRpb25JbXBsLmNyZWF0ZSgyMjAsIDIyMCwgMjIwKTsKKwkKKwlzdGF0aWMgZmluYWwgU3RyaW5nIFJPT1RfUEFUSCA9ICBQbGF0Zm9ybS5nZXRMb2NhdGlvbigpLnRvT1NTdHJpbmcoKTsKKwkvKioKKwkgKiB0aGUgY2hhcnQgb2YgcmVzdWx0cworCSAqLworCXN0YXRpYyBUaW1lU2VyaWVzQ2FudmFzIHRpbWVTZXJpZXNDYW52YXM7CisJCisJCisJCisJLyoqCisJICogdGhlIHJlc3VsdHMgb2YgdmFyaW91cyBzY2VuYXJpbyBjb21wYXJpc29ucworCSAqIFRPRE86IGV2ZW50dWFsbHkgdGhpcyBtaWdodCBiZSBhIG1hcCBrZXllZCBieSBjb21wYXJpc29uIGlkCisJICogZm9yIG5vdyB0aGVyZSBpcyBvbmx5IG9uZSBjb21wYXJpc29uLCB0aGUgbWVhbiBzcXVhcmUgZGlmZmVyZW5jZS4KKwkgKi8KKwlMaXN0PEVMaXN0PERvdWJsZT4+IGNvbXBhcmlzb25WYWx1ZXMgPSBuZXcgQXJyYXlMaXN0PEVMaXN0PERvdWJsZT4+KCk7CisJCisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIENPTVBBUklTT05fRklMRV9OQU1FID0gIlJNU0NvbXBhcmUiOworCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBTRUxFQ1RfRk9MREVSX0RJQUxPR19URVhUID0gIlBpY2sgYSBzY2VuYXJpbyBmb2xkZXIiOworCQorCVNjZW5hcmlvQW5hbHlzaXNTdWl0ZSBhbmFseXplciA9IG5ldyBTY2VuYXJpb0FuYWx5c2lzU3VpdGUodGhpcyk7CisJCisJLyoqCisJICogCisJICogQHBhcmFtIHBhcmVudAorCSAqLworCXB1YmxpYyBTY2VuYXJpb0NvbXBhcmlzb25Db250cm9sKGZpbmFsIENvbXBvc2l0ZSBwYXJlbnQpIHsKKwkJc3VwZXIocGFyZW50LCBTV1QuTm9uZSk7CisJCWNyZWF0ZUNvbnRlbnRzKCk7CisJfSAvLyBFc3RpbWF0b3JDb250cm9sCisKKwkvKioKKwkgKiBDcmVhdGUgdGhlIGNvbnRlbnRzIG9mIHRoZSBwbG90dGVyCisJICovCisJcHJpdmF0ZSB2b2lkIGNyZWF0ZUNvbnRlbnRzKCkgeworCQlEaXNwbGF5IGRpc3BsYXkgPSB0aGlzLmdldERpc3BsYXkoKTsKKwkJc2V0TGF5b3V0KG5ldyBGb3JtTGF5b3V0KCkpOworCisJCWlkZW50aWZpYWJsZVRpdGxlID0gbmV3IExhYmVsKHRoaXMsIFNXVC5OT05FKTsKKwkKKwkJZmluYWwgRm9udCBuZXdGb250ID0gZ2V0TGFyZ2VyRm9udCgxOCwgZGlzcGxheSk7CisJCQorCQlpZGVudGlmaWFibGVUaXRsZS5zZXRGb250KG5ld0ZvbnQpOworCQkvLyBTaW5jZSB5b3UgY3JlYXRlZCB0aGUgZm9udCwgeW91IG11c3QgZGlzcG9zZSBpdAkKKwkJaWRlbnRpZmlhYmxlVGl0bGUuYWRkRGlzcG9zZUxpc3RlbmVyKG5ldyBEaXNwb3NlTGlzdGVuZXIoKSB7CQkKKwkJICAgIHB1YmxpYyB2b2lkIHdpZGdldERpc3Bvc2VkKERpc3Bvc2VFdmVudCBlKSB7CisJCSAgICAgICAgbmV3Rm9udC5kaXNwb3NlKCk7CisJCSAgICB9CisJCX0pOworCQlpZGVudGlmaWFibGVUaXRsZS5zZXRUZXh0KE1lc3NhZ2VzLmdldFN0cmluZygiQ09NUC5USVRMRSIpKTsKKwkJLy9wcm9wZXJ0eVNlbGVjdG9yID0gbmV3IFByb3BlcnR5U2VsZWN0b3IodGhpcywgU1dULk5PTkUpOworCQkKKwkJCisJCXN0YXR1c0xhYmVsID0gbmV3IExhYmVsKHRoaXMsIFNXVC5CT1JERVIpOworCQlzdGF0dXNMYWJlbC5zZXRUZXh0KCIiKTsKKwkJCisJCWZpcnN0U2NlbmFyaW9Gb2xkZXJMYWJlbCA9IG5ldyBMYWJlbCh0aGlzLCBTV1QuQk9SREVSKTsKKwkJZmlyc3RTY2VuYXJpb0ZvbGRlckxhYmVsLnNldFRleHQoTWVzc2FnZXMuZ2V0U3RyaW5nKCJDT01QLkZPTERFUjFMQUJFTCIpKTsKKwkJCisJCXRleHQxID0gbmV3IFRleHQodGhpcywgU1dULkJPUkRFUik7CisJICAgIFN0cmluZyBwcmltYXJ5RGlyPXByZWZzLmdldFJlY2VudEZvbGRlcihQUklNQVJZX0ZPTERFUl9LRVkpOworCSAgICB0ZXh0MS5zZXRUZXh0KHByaW1hcnlEaXIpOworCSAgICAKKwkgICAgc2Vjb25kU2NlbmFyaW9Gb2xkZXJMYWJlbCA9IG5ldyBMYWJlbCh0aGlzLCBTV1QuQk9SREVSKTsKKwkgICAgc2Vjb25kU2NlbmFyaW9Gb2xkZXJMYWJlbC5zZXRUZXh0KE1lc3NhZ2VzLmdldFN0cmluZygiQ09NUC5GT0xERVIyTEFCRUwiKSk7CisJCQorCQl0ZXh0MiA9IG5ldyBUZXh0KHRoaXMsIFNXVC5CT1JERVIpOworCSAgICBTdHJpbmcgc2Vjb25kYXJ5RGlyPXByZWZzLmdldFJlY2VudEZvbGRlcihTRUNPTkRBUllfRk9MREVSX0tFWSk7CisJICAgIHRleHQyLnNldFRleHQoc2Vjb25kYXJ5RGlyKTsKKworCSAgICBDb21wb3NpdGUgYW5hbHl6ZUJ1dHRvbkNvbXBvc2l0ZSA9IGdldEFuYWx5emVCdXR0b25Db21wb3NpdGUodGhpcyxNZXNzYWdlcy5nZXRTdHJpbmcoIkNPTVAuQU5BTFlaRSIpKTsKKworCQlzdGF0dXNMYWJlbCA9IG5ldyBMYWJlbCh0aGlzLCBTV1QuU0hBRE9XX09VVCk7CisJCXN0YXR1c0xhYmVsLnNldEJhY2tncm91bmQoZGlzcGxheS5nZXRTeXN0ZW1Db2xvcihTV1QuQ09MT1JfV0hJVEUpKTsKKwkJc3RhdHVzTGFiZWwuc2V0VGV4dChNZXNzYWdlcy5nZXRTdHJpbmcoIkNPTVAuUkVTVUxUUyIpKTsKKwkJCisJCWludCBzcGFjZXIgPSA1OworCQlpbnQgYnV0dG9uc3BhY2VyID0gMDsKKwkJCisJCWZpbmFsIEZvcm1EYXRhIHRpdGxlRm9ybURhdGEgPSBuZXcgRm9ybURhdGEoKTsKKwkJaWRlbnRpZmlhYmxlVGl0bGUuc2V0TGF5b3V0RGF0YSh0aXRsZUZvcm1EYXRhKTsKKwkJdGl0bGVGb3JtRGF0YS50b3AgPSBuZXcgRm9ybUF0dGFjaG1lbnQoMCwgMCk7CisvLwkJdGl0bGVGb3JtRGF0YS5ib3R0b20gPSBuZXcgRm9ybUF0dGFjaG1lbnQoYm90dG9tLCAwKTsKKwkJdGl0bGVGb3JtRGF0YS5sZWZ0ID0gbmV3IEZvcm1BdHRhY2htZW50KDAsIDApOworCQl0aXRsZUZvcm1EYXRhLnJpZ2h0ID0gbmV3IEZvcm1BdHRhY2htZW50KDEwMCwgMCk7CisKKy8vCQlib3R0b20gKz0gZGVsdGFCb3R0b207CisgICAgICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKwkJLy8gVGV4dEZpZWxkIGZvbGRlciBsYWJlbAorCQlmaW5hbCBGb3JtRGF0YSBmaXJzdFNjZW5hcmlvRm9sZGVyTGFiZWxGb3JtRGF0YSA9IG5ldyBGb3JtRGF0YSgpOworCQkvLyBwcm9wZXJ0eVNlbGVjdG9yRm9ybURhdGEudG9wID0gbmV3IEZvcm1BdHRhY2htZW50KGNTVkxvZ2dlckNhbnZhcywKKwkJLy8gMCk7CisJCWZpcnN0U2NlbmFyaW9Gb2xkZXJMYWJlbEZvcm1EYXRhLnRvcCA9IG5ldyBGb3JtQXR0YWNobWVudChpZGVudGlmaWFibGVUaXRsZSwgc3BhY2VyKTsKKy8vCQlmaXJzdFNjZW5hcmlvRm9sZGVyTGFiZWxGb3JtRGF0YS5ib3R0b20gPSBuZXcgRm9ybUF0dGFjaG1lbnQoYm90dG9tLCAwKTsKKwkJZmlyc3RTY2VuYXJpb0ZvbGRlckxhYmVsRm9ybURhdGEubGVmdCA9IG5ldyBGb3JtQXR0YWNobWVudCgwLCAwKTsKKwkJZmlyc3RTY2VuYXJpb0ZvbGRlckxhYmVsRm9ybURhdGEucmlnaHQgPSBuZXcgRm9ybUF0dGFjaG1lbnQoMTUsIDApOworCQlmaXJzdFNjZW5hcmlvRm9sZGVyTGFiZWwuc2V0TGF5b3V0RGF0YShmaXJzdFNjZW5hcmlvRm9sZGVyTGFiZWxGb3JtRGF0YSk7CisJCS8vIGZpcnN0IHRleHQgZmllbGQgZm9yIHBhcmFtZXRlciBFc3RpbWF0b3IKKwkJZmluYWwgRm9ybURhdGEgdGV4dDFGb3JtRGF0YSA9IG5ldyBGb3JtRGF0YSgpOworCQl0ZXh0MUZvcm1EYXRhLnRvcCA9IG5ldyBGb3JtQXR0YWNobWVudChpZGVudGlmaWFibGVUaXRsZSxzcGFjZXIpOworCS8vCXRleHQxRm9ybURhdGEuYm90dG9tID0gbmV3IEZvcm1BdHRhY2htZW50KGJvdHRvbSwgMCk7CisJCXRleHQxRm9ybURhdGEubGVmdCA9IG5ldyBGb3JtQXR0YWNobWVudChmaXJzdFNjZW5hcmlvRm9sZGVyTGFiZWwsIDApOworCQl0ZXh0MUZvcm1EYXRhLnJpZ2h0ID0gbmV3IEZvcm1BdHRhY2htZW50KDg1LCAwKTsKKwkJdGV4dDEuc2V0TGF5b3V0RGF0YSh0ZXh0MUZvcm1EYXRhKTsKKwkJCisJCisJCUJ1dHRvbiBzZWxlY3RGb2xkZXIxQnV0dG9uID0gbmV3IEJ1dHRvbih0aGlzLCBTV1QuTk9ORSk7CisJCXNlbGVjdEZvbGRlcjFCdXR0b24uc2V0VGV4dChNZXNzYWdlcy5nZXRTdHJpbmcoIkNPTVAuU0VMRUNURk9MREVSQlVUVE9OIikpOworCQlmaW5hbCBGb3JtRGF0YSBzZWxlY3RGb2xkZXIxRm9ybURhdGEgPSBuZXcgRm9ybURhdGEoKTsKKwkJc2VsZWN0Rm9sZGVyMUZvcm1EYXRhLnRvcCA9IG5ldyBGb3JtQXR0YWNobWVudChpZGVudGlmaWFibGVUaXRsZSwgYnV0dG9uc3BhY2VyKTsKKwkvLwlzZWxlY3RGb2xkZXIxRm9ybURhdGEuYm90dG9tID0gbmV3IEZvcm1BdHRhY2htZW50KGJvdHRvbSwgMCk7CisJCXNlbGVjdEZvbGRlcjFGb3JtRGF0YS5sZWZ0ID0gbmV3IEZvcm1BdHRhY2htZW50KHRleHQxLCAwKTsKKwkvLwlzZWxlY3RGb2xkZXIxRm9ybURhdGEucmlnaHQgPSBuZXcgRm9ybUF0dGFjaG1lbnQoMTAwLCAwKTsKKwkJc2VsZWN0Rm9sZGVyMUJ1dHRvbi5zZXRMYXlvdXREYXRhKHNlbGVjdEZvbGRlcjFGb3JtRGF0YSk7CisJCQorCQlmaW5hbCBTaGVsbCBzaGVsbCA9IHRoaXMuZ2V0U2hlbGwoKTsKKwkKKwkJc2VsZWN0Rm9sZGVyMUJ1dHRvbi5hZGRTZWxlY3Rpb25MaXN0ZW5lcihuZXcgU2VsZWN0aW9uQWRhcHRlcigpIHsKKwkJCUBPdmVycmlkZQorCQkJcHVibGljIHZvaWQgd2lkZ2V0U2VsZWN0ZWQoQFN1cHByZXNzV2FybmluZ3MoInVudXNlZCIpCisJCQlmaW5hbCBTZWxlY3Rpb25FdmVudCBlKSB7CisJCQkJZmluYWwgRGlyZWN0b3J5RGlhbG9nIGRkID0gbmV3IERpcmVjdG9yeURpYWxvZygKKwkJCQkJCXNoZWxsLCBTV1QuT1BFTik7CisJCQkJCWRkLnNldFRleHQoU0VMRUNUX0ZPTERFUl9ESUFMT0dfVEVYVCk7IC8vJE5PTi1OTFMtMSQKKwkJCQkJU3RyaW5nIGJlZ2luU2VhcmNoID0gdGV4dDEuZ2V0VGV4dCgpOworCQkJCQlpZigoYmVnaW5TZWFyY2g9PW51bGwpfHwoYmVnaW5TZWFyY2gubGVuZ3RoKCk8MSkpIGJlZ2luU2VhcmNoID0gUk9PVF9QQVRIOworCQkJCQkKKwkJCQkJZGQuc2V0RmlsdGVyUGF0aChiZWdpblNlYXJjaCk7CisJCQkJCWZpbmFsIFN0cmluZyBzZWxlY3RlZCA9IGRkLm9wZW4oKTsKKwkJCQkJaWYoc2VsZWN0ZWQhPW51bGwpIHRleHQxLnNldFRleHQoc2VsZWN0ZWQpOworCQkJfQorCQl9KTsKKwkJCisJCisJCQorICAgICAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisJCQorLy8JCWJvdHRvbSArPSBkZWx0YUJvdHRvbTsKKwkJCisgICAgICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKwkJLy8gVGV4dEZpZWxkIGZvbGRlciBsYWJlbAorCQlmaW5hbCBGb3JtRGF0YSBzZWNvbmRTY2VuYXJpb0ZvbGRlckxhYmVsRm9ybURhdGEgPSBuZXcgRm9ybURhdGEoKTsKKwkJLy8gcHJvcGVydHlTZWxlY3RvckZvcm1EYXRhLnRvcCA9IG5ldyBGb3JtQXR0YWNobWVudChjU1ZMb2dnZXJDYW52YXMsCisJCS8vIDApOworCQlzZWNvbmRTY2VuYXJpb0ZvbGRlckxhYmVsRm9ybURhdGEudG9wID0gbmV3IEZvcm1BdHRhY2htZW50KGZpcnN0U2NlbmFyaW9Gb2xkZXJMYWJlbCxzcGFjZXIpOworLy8JCXNlY29uZFNjZW5hcmlvRm9sZGVyTGFiZWxGb3JtRGF0YS5ib3R0b20gPSBuZXcgRm9ybUF0dGFjaG1lbnQoYm90dG9tLCAwKTsKKwkJc2Vjb25kU2NlbmFyaW9Gb2xkZXJMYWJlbEZvcm1EYXRhLmxlZnQgPSBuZXcgRm9ybUF0dGFjaG1lbnQoMCwgMCk7CisJCXNlY29uZFNjZW5hcmlvRm9sZGVyTGFiZWxGb3JtRGF0YS5yaWdodCA9IG5ldyBGb3JtQXR0YWNobWVudCgxNSwgMCk7CisJCXNlY29uZFNjZW5hcmlvRm9sZGVyTGFiZWwuc2V0TGF5b3V0RGF0YShzZWNvbmRTY2VuYXJpb0ZvbGRlckxhYmVsRm9ybURhdGEpOworCQkvLyBmaXJzdCB0ZXh0IGZpZWxkIGZvciBwYXJhbWV0ZXIgRXN0aW1hdG9yCisJCWZpbmFsIEZvcm1EYXRhIHRleHQyRm9ybURhdGEgPSBuZXcgRm9ybURhdGEoKTsKKwkJdGV4dDJGb3JtRGF0YS50b3AgPSBuZXcgRm9ybUF0dGFjaG1lbnQodGV4dDEsIHNwYWNlcik7CisvLwkJdGV4dDJGb3JtRGF0YS5ib3R0b20gPSBuZXcgRm9ybUF0dGFjaG1lbnQoYm90dG9tLCAwKTsKKwkJdGV4dDJGb3JtRGF0YS5sZWZ0ID0gbmV3IEZvcm1BdHRhY2htZW50KHNlY29uZFNjZW5hcmlvRm9sZGVyTGFiZWwsIDApOworCQl0ZXh0MkZvcm1EYXRhLnJpZ2h0ID0gbmV3IEZvcm1BdHRhY2htZW50KDg1LCAwKTsKKwkJdGV4dDIuc2V0TGF5b3V0RGF0YSh0ZXh0MkZvcm1EYXRhKTsKKwkJCisJCUJ1dHRvbiBzZWxlY3RGb2xkZXIyQnV0dG9uID0gbmV3IEJ1dHRvbih0aGlzLCBTV1QuTk9ORSk7CisJCXNlbGVjdEZvbGRlcjJCdXR0b24uc2V0VGV4dChNZXNzYWdlcy5nZXRTdHJpbmcoIkNPTVAuU0VMRUNURk9MREVSQlVUVE9OIikpOworCQlmaW5hbCBGb3JtRGF0YSBzZWxlY3RGb2xkZXIyRm9ybURhdGEgPSBuZXcgRm9ybURhdGEoKTsKKwkJc2VsZWN0Rm9sZGVyMkZvcm1EYXRhLnRvcCA9IG5ldyBGb3JtQXR0YWNobWVudCh0ZXh0MSwgYnV0dG9uc3BhY2VyKTsKKy8vCQlzZWxlY3RGb2xkZXIyRm9ybURhdGEuYm90dG9tID0gbmV3IEZvcm1BdHRhY2htZW50KGJvdHRvbSwgMCk7CisJCXNlbGVjdEZvbGRlcjJGb3JtRGF0YS5sZWZ0ID0gbmV3IEZvcm1BdHRhY2htZW50KHRleHQyLCAwKTsKKy8vCQlzZWxlY3RGb2xkZXIyRm9ybURhdGEucmlnaHQgPSBuZXcgRm9ybUF0dGFjaG1lbnQoMTAwLCAwKTsKKwkJc2VsZWN0Rm9sZGVyMkJ1dHRvbi5zZXRMYXlvdXREYXRhKHNlbGVjdEZvbGRlcjJGb3JtRGF0YSk7CisJCQorCQlzZWxlY3RGb2xkZXIyQnV0dG9uLmFkZFNlbGVjdGlvbkxpc3RlbmVyKG5ldyBTZWxlY3Rpb25BZGFwdGVyKCkgeworCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgdm9pZCB3aWRnZXRTZWxlY3RlZChAU3VwcHJlc3NXYXJuaW5ncygidW51c2VkIikKKwkJCWZpbmFsIFNlbGVjdGlvbkV2ZW50IGUpIHsKKwkJCQlmaW5hbCBEaXJlY3RvcnlEaWFsb2cgZGQgPSBuZXcgRGlyZWN0b3J5RGlhbG9nKAorCQkJCQkJc2hlbGwsIFNXVC5PUEVOKTsKKwkJCQkJZGQuc2V0VGV4dChNZXNzYWdlcy5nZXRTdHJpbmcoIkNPTVAuU0VMRUNURk9MREVSRElBTE9HIikpOyAvLyROT04tTkxTLTEkCisJCQkJCVN0cmluZyBiZWdpblNlYXJjaCA9IHRleHQyLmdldFRleHQoKTsKKwkJCQkJaWYoKGJlZ2luU2VhcmNoPT1udWxsKXx8KGJlZ2luU2VhcmNoLmxlbmd0aCgpPDEpKSBiZWdpblNlYXJjaCA9IFJPT1RfUEFUSDsKKwkJCQkJCisJCQkJCWRkLnNldEZpbHRlclBhdGgoYmVnaW5TZWFyY2gpOworCQkJCQlmaW5hbCBTdHJpbmcgc2VsZWN0ZWQgPSBkZC5vcGVuKCk7CisJCQkJCWlmKHNlbGVjdGVkIT1udWxsKSB0ZXh0Mi5zZXRUZXh0KHNlbGVjdGVkKTsKKwkJCX0KKwkJfSk7CisJCQorCQkvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisJCQorLy8JCWJvdHRvbSArPSBkZWx0YUJvdHRvbTsKKwkJCisJCUxhYmVsIGVycm9yRnVuY3Rpb25MYWJlbCA9IG5ldyBMYWJlbCh0aGlzLCBTV1QuTk9ORSk7CisJCWZpbmFsIEZvcm1EYXRhIGVycm9yRnVuY3Rpb25MYWJlbEZvcm1EYXRhID0gbmV3IEZvcm1EYXRhKCk7CisJCS8vIHByb3BlcnR5U2VsZWN0b3JGb3JtRGF0YVgudG9wID0gbmV3IEZvcm1BdHRhY2htZW50KHByb3BlcnR5U2VsZWN0b3JZLAorCQkvLyAwKTsKKwkJZXJyb3JGdW5jdGlvbkxhYmVsRm9ybURhdGEudG9wID0gbmV3IEZvcm1BdHRhY2htZW50KHRleHQyLCBzcGFjZXIpOworCQllcnJvckZ1bmN0aW9uTGFiZWxGb3JtRGF0YS5sZWZ0ID0gbmV3IEZvcm1BdHRhY2htZW50KDAsIDApOworCQllcnJvckZ1bmN0aW9uTGFiZWxGb3JtRGF0YS5yaWdodCA9IG5ldyBGb3JtQXR0YWNobWVudCgxNSwgMCk7CisJCWVycm9yRnVuY3Rpb25MYWJlbC5zZXRMYXlvdXREYXRhKGVycm9yRnVuY3Rpb25MYWJlbEZvcm1EYXRhKTsKKwkJZXJyb3JGdW5jdGlvbkxhYmVsLnNldFRleHQoTWVzc2FnZXMuZ2V0U3RyaW5nKCJDT01QLkVSUk9SRlVOQ1RJT04iKSk7CisJCisJCWVycm9yRnVuY3Rpb25Db21ibyA9IG5ldyBDb21ibyh0aGlzLCBTV1QuTk9ORSk7CisJCWZpbmFsIEZvcm1EYXRhIGVycm9yRnVuY3Rpb25Db21ib0Zvcm1EYXRhID0gbmV3IEZvcm1EYXRhKCk7CisJCWVycm9yRnVuY3Rpb25Db21ib0Zvcm1EYXRhLnRvcCA9IG5ldyBGb3JtQXR0YWNobWVudCh0ZXh0Miwgc3BhY2VyKTsKKy8vCQllcnJvckZ1bmN0aW9uQ29tYm9Gb3JtRGF0YS5ib3R0b20gPSBuZXcgRm9ybUF0dGFjaG1lbnQoYm90dG9tLCAwKTsKKwkJZXJyb3JGdW5jdGlvbkNvbWJvRm9ybURhdGEubGVmdCA9IG5ldyBGb3JtQXR0YWNobWVudChlcnJvckZ1bmN0aW9uTGFiZWwsIDUpOworLy8JCWVycm9yRnVuY3Rpb25Db21ib0Zvcm1EYXRhLnJpZ2h0ID0gbmV3IEZvcm1BdHRhY2htZW50KDgwLCAwKTsKKwkJZXJyb3JGdW5jdGlvbkNvbWJvLnNldExheW91dERhdGEoZXJyb3JGdW5jdGlvbkNvbWJvRm9ybURhdGEpOworCQkKKwkJcG9wdWxhdGVFcnJvckZ1bmN0aW9uQ29tYm8oKTsKKwkJCisvLwkJYm90dG9tICs9IGRlbHRhQm90dG9tOworCQkKKwkJLy8gQW5hbHl6ZUJ1dHRvbgorCQlmaW5hbCBGb3JtRGF0YSBhbmFseXNpc0J1dHRvbkZvcm1EYXRhID0gbmV3IEZvcm1EYXRhKCk7CisJCS8vIHByb3BlcnR5U2VsZWN0b3JGb3JtRGF0YVgudG9wID0gbmV3IEZvcm1BdHRhY2htZW50KHByb3BlcnR5U2VsZWN0b3JZLAorCQkvLyAwKTsKKwkJYW5hbHlzaXNCdXR0b25Gb3JtRGF0YS50b3AgPSBuZXcgRm9ybUF0dGFjaG1lbnQoZXJyb3JGdW5jdGlvbkNvbWJvLCBzcGFjZXIpOworLy8JCWFuYWx5c2lzQnV0dG9uRm9ybURhdGEuYm90dG9tID0gbmV3IEZvcm1BdHRhY2htZW50KGJvdHRvbSwgMCk7CisJCWFuYWx5c2lzQnV0dG9uRm9ybURhdGEubGVmdCA9IG5ldyBGb3JtQXR0YWNobWVudCgwLCAwKTsKKwkJYW5hbHlzaXNCdXR0b25Gb3JtRGF0YS5yaWdodCA9IG5ldyBGb3JtQXR0YWNobWVudCgxMDAsIDApOworCQlhbmFseXplQnV0dG9uQ29tcG9zaXRlLnNldExheW91dERhdGEoYW5hbHlzaXNCdXR0b25Gb3JtRGF0YSk7CisJCQorCQkKKwkJCisJCS8vIFJlc3VsdHMgR3JhcGgKKwkJdGltZVNlcmllc0NhbnZhcyA9IG5ldyBUaW1lU2VyaWVzQ2FudmFzKHRoaXMsCisJCQkJCQkJCQkJCQkJTWVzc2FnZXMuZ2V0U3RyaW5nKCJDT01QLlJNU0RJRkZFUkVOQ0VMQUJFTCIpLAorCQkJCQkJCQkJCQkJCU1lc3NhZ2VzLmdldFN0cmluZygiQ09NUC5STVNTVFJJTkciKSwKKwkJCQkJCQkJCQkJCQlNZXNzYWdlcy5nZXRTdHJpbmcoIkNPTVAuUk1TU1RSSU5HIiksCisJCQkJCQkJCQkJCQkJZm9yZUdyb3VuZCwKKwkJCQkJCQkJCQkJCQliYWNrZ3JvdW5kR3JvdW5kLAorCQkJCQkJCQkJCQkJCWZyYW1lQ29sb3IsIDApOworCQkKKwkJZmluYWwgRm9ybURhdGEgY2hhcnRGb3JtRGF0YSA9IG5ldyBGb3JtRGF0YSgpOworCQl0aW1lU2VyaWVzQ2FudmFzLnNldExheW91dERhdGEoY2hhcnRGb3JtRGF0YSk7CisJCWNoYXJ0Rm9ybURhdGEudG9wID0gbmV3IEZvcm1BdHRhY2htZW50KGFuYWx5emVCdXR0b25Db21wb3NpdGUsIDApOworCQljaGFydEZvcm1EYXRhLmJvdHRvbSA9IG5ldyBGb3JtQXR0YWNobWVudCg5MCwgMCk7CisJCWNoYXJ0Rm9ybURhdGEubGVmdCA9IG5ldyBGb3JtQXR0YWNobWVudCgwLCAwKTsKKwkJY2hhcnRGb3JtRGF0YS5yaWdodCA9IG5ldyBGb3JtQXR0YWNobWVudCgxMDAsIDApOworCQkKKwkJLyoKKwkJZmluYWwgRm9ybURhdGEgcmVzdWx0c1NlbGVjdG9yRm9ybURhdGEgPSBuZXcgRm9ybURhdGEoKTsKKwkJcmVzdWx0c1NlbGVjdG9yRm9ybURhdGEudG9wID0gbmV3IEZvcm1BdHRhY2htZW50KGFuYWx5emVCdXR0b24sIDApOworCQlyZXN1bHRzU2VsZWN0b3JGb3JtRGF0YS5ib3R0b20gPSBuZXcgRm9ybUF0dGFjaG1lbnQoYm90dG9tLCAwKTsKKwkJcmVzdWx0c1NlbGVjdG9yRm9ybURhdGEubGVmdCA9IG5ldyBGb3JtQXR0YWNobWVudCgwLCAwKTsKKwkJcmVzdWx0c1NlbGVjdG9yRm9ybURhdGEucmlnaHQgPSBuZXcgRm9ybUF0dGFjaG1lbnQoMTAwLCAwKTsKKwkJc3RhdHVzTGFiZWwuc2V0TGF5b3V0RGF0YShyZXN1bHRzU2VsZWN0b3JGb3JtRGF0YSk7CisJCSovCisJCS8vIFN0YXR1cyBsYWJlbAorCQlmaW5hbCBGb3JtRGF0YSBzdGF0dXNGb3JtRGF0YSA9IG5ldyBGb3JtRGF0YSgpOworCQlzdGF0dXNGb3JtRGF0YS50b3AgPSBuZXcgRm9ybUF0dGFjaG1lbnQoOTAsIDApOworCQlzdGF0dXNGb3JtRGF0YS5ib3R0b20gPSBuZXcgRm9ybUF0dGFjaG1lbnQoMTAwLCAwKTsKKwkJc3RhdHVzRm9ybURhdGEubGVmdCA9IG5ldyBGb3JtQXR0YWNobWVudCgwLCAwKTsKKwkJc3RhdHVzRm9ybURhdGEucmlnaHQgPSBuZXcgRm9ybUF0dGFjaG1lbnQoMTAwLCAwKTsKKwkJc3RhdHVzTGFiZWwuc2V0TGF5b3V0RGF0YShzdGF0dXNGb3JtRGF0YSk7CisJCQorCQkKKwkJZmluYWwgUHJvZ3Jlc3NNb25pdG9yRGlhbG9nIHByb2dyZXNzRGlhbG9nID0gbmV3IFByb2dyZXNzTW9uaXRvckRpYWxvZyh0aGlzLmdldFNoZWxsKCkpOworCisJCWFuYWx5emVCdXR0b24uYWRkU2VsZWN0aW9uTGlzdGVuZXIobmV3IFNlbGVjdGlvbkFkYXB0ZXIoKSB7CisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyB2b2lkIHdpZGdldFNlbGVjdGVkKEBTdXBwcmVzc1dhcm5pbmdzKCJ1bnVzZWQiKQorCQkJZmluYWwgU2VsZWN0aW9uRXZlbnQgZSkgeworCQkJCS8qCisJCQkJICogcmVpbml0aWFsaXplIHRoZSBncmFwaAorCQkJCSAqLworCQkJCXRpbWVTZXJpZXNDYW52YXMucmVzZXQoKTsKKwkJCQljb21wYXJpc29uVmFsdWVzLmNsZWFyKCk7CisJCQkJdGltZVNlcmllc0NhbnZhcy5kcmF3KCk7CisJCQkJLy8gcmVpbml0aWFsaXplIHRoZSBzdGF0dXMgbGFiZWwKKwkJCQlzdGF0dXNMYWJlbC5zZXRUZXh0KE1lc3NhZ2VzLmdldFN0cmluZygiQ09NTU9OLlNUQVRVUyIpKTsKKwkJCQkKKwkJCQkKKwkJCQlTdHJpbmcgcmVmZXJlbmNlRGlyZWN0b3J5ICA9IHRleHQxLmdldFRleHQoKTsKKwkJCQlTdHJpbmcgY29tcGFyaXNvbkRpcmVjdG9yeSA9IHRleHQyLmdldFRleHQoKTsKKwkJCQkKKwkJCQkvKgorCQkJCSAqIFZBTElEQVRFIHRoZSB0ZXh0IGlucHV0IEZpZWxkcworCQkJCSAqLworCQkJCWlmKCFhbmFseXplci52YWxpZGF0ZShyZWZlcmVuY2VEaXJlY3RvcnkpKSB7CisJCQkJCXN0YXR1c0xhYmVsLnNldFRleHQoU2NlbmFyaW9BbmFseXNpc1N1aXRlLk5PVF9GT1VORF9NU0cpOworCQkJCQl0ZXh0MS5zZXRUZXh0KCIiKTsKKwkJCQl9CisgICAgICAgICAgICAgICAgaWYoIWFuYWx5emVyLnZhbGlkYXRlKGNvbXBhcmlzb25EaXJlY3RvcnkpKSB7CisgICAgICAgICAgICAgICAgCXN0YXR1c0xhYmVsLnNldFRleHQoU2NlbmFyaW9BbmFseXNpc1N1aXRlLk5PVF9GT1VORF9NU0cpOworICAgICAgICAgICAgICAgIAl0ZXh0Mi5zZXRUZXh0KCIiKTsKKwkJCQl9CisgICAgICAgICAgICAgICAgaWYoKCFhbmFseXplci52YWxpZGF0ZShyZWZlcmVuY2VEaXJlY3RvcnkpKSB8fCAoIWFuYWx5emVyLnZhbGlkYXRlKGNvbXBhcmlzb25EaXJlY3RvcnkpKSkgeworICAgICAgICAgICAgICAgIAlyZXR1cm47CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIEVycm9yUmVzdWx0IHJlc3VsdD1udWxsOworICAgICAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgCWludCBpbmRleCA9IChlcnJvckZ1bmN0aW9uQ29tYm8uZ2V0U2VsZWN0aW9uSW5kZXgoKSA9PSAtMSk/IDA6ZXJyb3JGdW5jdGlvbkNvbWJvLmdldFNlbGVjdGlvbkluZGV4KCk7CisgICAgICAgICAgICAgICAgCXJlc3VsdCA9IGFuYWx5emVyLmNvbXBhcmUocmVmZXJlbmNlRGlyZWN0b3J5LCBjb21wYXJpc29uRGlyZWN0b3J5LCBwcm9ncmVzc0RpYWxvZywgZXJyb3JGdW5jdGlvbnNbaW5kZXhdKTsKKyAgICAgICAgICAgICAgICAJaWYocmVzdWx0ICE9bnVsbCkgeworICAgICAgICAgICAgICAgIAkJY29tcGFyaXNvblZhbHVlcy5hZGQocmVzdWx0LmdldEVycm9yQnlUaW1lU3RlcCgpKTsKKyAgICAgICAgICAgICAgICAJfQorICAgICAgICAgICAgICAgIAkKKyAgICAgICAgICAgICAgICAJLy9zdWNjZXNzLi4uIHJlbWVtYmVyIHRoZSB1c2VycyBwcmVmcworCQkJCQlwcmVmcy5zZXRSZWNlbnRGb2xkZXIoUFJJTUFSWV9GT0xERVJfS0VZLHJlZmVyZW5jZURpcmVjdG9yeSk7CisJCQkJCXByZWZzLnNldFJlY2VudEZvbGRlcihTRUNPTkRBUllfRk9MREVSX0tFWSxjb21wYXJpc29uRGlyZWN0b3J5KTsKKyAgICAgICAgICAgICAgICB9IGNhdGNoKFNjZW5hcmlvSW5pdGlhbGl6YXRpb25FeGNlcHRpb24gc2llKSB7CisgICAgICAgICAgICAgICAgCUFjdGl2YXRvci5sb2dFcnJvcigiIiwgc2llKTsKKyAgICAgICAgICAgICAgICB9CisJCQkJCisJCQkJdGltZVNlcmllc0NhbnZhcy5kcmF3KCk7CisJCQkJCisJCQkJU3RyaW5nIG91dEZpbGVOYW1lID0gQ09NUEFSSVNPTl9GSUxFX05BTUUrIl8iKworCQkJCQkJCQkJIGdldFNjZW5hcmlvTmFtZUZyb21EaXJlY3RvcnlOYW1lKHJlZmVyZW5jZURpcmVjdG9yeSkrCisJCQkJCQkJCQkgIl8iKworCQkJCQkJCQkJIGdldFNjZW5hcmlvTmFtZUZyb21EaXJlY3RvcnlOYW1lKGNvbXBhcmlzb25EaXJlY3RvcnkpOworCQkJCQkJCQkJIAorCQkJCUNTVkFuYWx5c2lzV3JpdGVyIHdyaXRlciA9IG5ldyBDU1ZBbmFseXNpc1dyaXRlcihvdXRGaWxlTmFtZSk7CisJCQkgICAgd3JpdGVyLmxvZ0RhdGEoY29tcGFyaXNvblZhbHVlcyk7CisJCQkgICAgU3RyaW5nIHJlc3VsdHMgPSAiUk1TIERpZmZlcmVuY2UgPSAiOworCQkJICAgIGlmKHJlc3VsdCAhPW51bGwpIHsKKwkJCSAgICAJcmVzdWx0cyArPSByZXN1bHQuZ2V0RXJyb3IoKTsKKwkJCSAgICB9CisJCQkgICAgCisJCQkJc3RhdHVzTGFiZWwuc2V0VGV4dChyZXN1bHRzKTsKKwkJCX0KKwkJfSk7CisJCQorCX0gLy8gY3JlYXRlQ29udGVudHMKKwkKKwkKKwkKKwkKKwkvKioKKwkgKiBAcGFyYW0gZGlyTmFtZQorCSAqIEByZXR1cm4gc2hvcnQgbmFtZSBvZiBzY2VuYXJpbworCSAqLworCXB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldFNjZW5hcmlvTmFtZUZyb21EaXJlY3RvcnlOYW1lKFN0cmluZyBkaXJOYW1lKSB7CisJCWludCBsYXN0ID0gZGlyTmFtZS5sYXN0SW5kZXhPZigiLyIpOworCQlpbnQgbGFzdDIgPSAgZGlyTmFtZS5sYXN0SW5kZXhPZigiXFwiKTsKKwkJaWYobGFzdDI+bGFzdCkgbGFzdCA9IGxhc3QyOworCQlpZihsYXN0IDw9MCApIGxhc3QgPSAwOworCQlTdHJpbmcgcmV0VmFsID0gZGlyTmFtZS5zdWJzdHJpbmcobGFzdCsxLCBkaXJOYW1lLmxlbmd0aCgpKTsKKwkJcmV0dXJuIHJldFZhbDsKKwl9CisJCisJLyoqCisJICogVGhpcyByZXR1cm5zIHRoZSByZXN1bHRzIG9mIGEgY29tcGFyaXNvbiBvZiB0eXBlIGNvbXBhcmlzb25UeXBlCisJICogYXMgYW4gYXJyYXkgb2YgZG91YmxlLiAKKwkgKiBUT0RPIGZvciBub3cgdGhlcmUgaXMgb25seSBvbmUgdHlwZSwgdGhlIE1FQU4gU1EgRGlmZgorCSAqIEBwYXJhbSBjaGFydEluZGV4IG5vdCB1c2VkIChvbmx5IG9uZSBjaGFydCkKKwkgKiBAcGFyYW0gY29tcGFyaXNvblR5cGUKKwkgKiBAcmV0dXJuIEN1bXVsYXRpdmUgZGV2aWF0aW9uIGZyb20gcmVmZXJlbmNlIHRyYWplY3RvcnkKKwkgKi8KKwlAU3VwcHJlc3NXYXJuaW5ncygiYm94aW5nIikKKwlAT3ZlcnJpZGUKKwlwdWJsaWMgZG91YmxlW10gZ2V0VmFsdWVzKGludCBjaGFydEluZGV4LCBpbnQgY29tcGFyaXNvblR5cGUpIHsKKwkJaWYoKGNvbXBhcmlzb25WYWx1ZXM9PW51bGwpfHwoY29tcGFyaXNvblZhbHVlcy5zaXplKCk9PTApKSByZXR1cm4gbmV3IGRvdWJsZVswXTsKKwkJRUxpc3Q8RG91YmxlPiByID0gY29tcGFyaXNvblZhbHVlcy5nZXQoMCk7CisJCWRvdWJsZSBbXXJlc3VsdCA9IG5ldyBkb3VibGVbci5zaXplKCldOworCQlmb3IoaW50IGk9MDtpPHIuc2l6ZSgpOysraSkgcmVzdWx0W2ldPXIuZ2V0KGkpOworCQlyZXR1cm4gcmVzdWx0OworCX0KKwkKK3ByaXZhdGUgdm9pZCBwb3B1bGF0ZUVycm9yRnVuY3Rpb25Db21ibygpIHsKKwkJCisJCWZpbmFsIElFeHRlbnNpb25SZWdpc3RyeSByZWdpc3RyeSA9IFBsYXRmb3JtLmdldEV4dGVuc2lvblJlZ2lzdHJ5KCk7CisJCWZpbmFsIElDb25maWd1cmF0aW9uRWxlbWVudFtdIGVycm9yRnVuY3Rpb25zQ29uZmlnRWxlbWVudHMgPSByZWdpc3RyeQorCQkJCS5nZXRDb25maWd1cmF0aW9uRWxlbWVudHNGb3Iob3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5Db25zdGFudHMuSURfRVJST1JGVU5DVElPTl9FWFRFTlNJT05fUE9JTlQpOworCisJCQlmaW5hbCBqYXZhLnV0aWwuTGlzdDxFcnJvckZ1bmN0aW9uPiB0ZW1wID0gbmV3IEFycmF5TGlzdDxFcnJvckZ1bmN0aW9uPigpOworCisJCQllcnJvckZ1bmN0aW9ucyA9IG5ldyBFcnJvckZ1bmN0aW9uW2Vycm9yRnVuY3Rpb25zQ29uZmlnRWxlbWVudHMubGVuZ3RoXTsKKworCQkJZm9yIChpbnQgaSA9IDA7IGkgPCBlcnJvckZ1bmN0aW9uc0NvbmZpZ0VsZW1lbnRzLmxlbmd0aDsgaSsrKSB7CisJCQkJZmluYWwgSUNvbmZpZ3VyYXRpb25FbGVtZW50IGVsZW1lbnQgPSBlcnJvckZ1bmN0aW9uc0NvbmZpZ0VsZW1lbnRzW2ldOworCQkJCisJCQkJaWYgKGVsZW1lbnQuZ2V0TmFtZSgpLmVxdWFscyhvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLkNvbnN0YW50cy5FUlJPUkZVTkNUSU9OX0VMRU1FTlQpKSB7CisJCQkJCS8vIFllcworCQkJCQl0cnkgeworCQkJCQkJdGVtcC5hZGQoKEVycm9yRnVuY3Rpb24pIGVsZW1lbnQKKwkJCQkJCQkJLmNyZWF0ZUV4ZWN1dGFibGVFeHRlbnNpb24oImNsYXNzIikpOyAvLyROT04tTkxTLTEkCisJCQkJCX0gY2F0Y2ggKGZpbmFsIENvcmVFeGNlcHRpb24gZSkgeworCQkJCQkJQWN0aXZhdG9yLmxvZ0Vycm9yKAorCQkJCQkJCQlNZXNzYWdlcy5nZXRTdHJpbmcoIlVuYWJsZSB0byBpbnN0YW50aWF0ZSBleHRlbnNpb24gcG9pbnQgIitlbGVtZW50KSwgZSk7IC8vJE5PTi1OTFMtMSQKKwkJCQkJfQorCQkJCX0gLy8gaWYKKwkJCX0gLy8gZm9yIGVhY2ggY29uZmlndXJhdGlvbiBlbGVtZW50CisKKwkJCWVycm9yRnVuY3Rpb25zID0gdGVtcC50b0FycmF5KG5ldyBFcnJvckZ1bmN0aW9uW10ge30pOworCQorCQlmb3IoaW50IGk9MDtpPGVycm9yRnVuY3Rpb25zLmxlbmd0aDsrK2kpCisJCQllcnJvckZ1bmN0aW9uQ29tYm8uYWRkKGVycm9yRnVuY3Rpb25zW2ldLmVDbGFzcygpLmdldE5hbWUoKSk7CisJCWVycm9yRnVuY3Rpb25Db21iby5zZWxlY3QoMCk7CisJfQorCisJLyoqCisJICogCisJICogQHBhcmFtIGNoYXJ0SW5kZXggbm90IHVzZWQgKG9ubHkgb25lIGNoYXJ0KQorCSAqIEBwYXJhbSBzdGF0ZQorCSAqIEByZXR1cm4gcHJvcGVydHkgbmFtZQorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBTdHJpbmcgZ2V0UHJvcGVydHkoaW50IGNoYXJ0SW5kZXgsIGludCBzdGF0ZSkgeworCQlyZXR1cm4gTWVzc2FnZXMuZ2V0U3RyaW5nKCJDT01QLlJNU1NUUklORyIpOworCX0KKwkKKwkvKioKKwkgKiBPbmx5IG9uZSBwcm9wZXJ0eSB0byBwbG90ID0gdGhlIFJNUyBkaWZmZXJlbmNlCisJICogQHBhcmFtIGNoYXJ0SW5kZXggbm90IHVzZWQgKG9ubHkgb25lIGNoYXJ0KQorCSAqIEByZXR1cm4gdGhlIG51bWJlciBvZiBwcm9wZXJ0aWVzCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnV0aWwuYW5hbHlzaXMudmlld3MuQW5hbHlzaXNDb250cm9sI2dldE51bVByb3BlcnRpZXMoaW50IGNoYXJ0SW5kZXgpCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIGludCBnZXROdW1Qcm9wZXJ0aWVzKGludCBjaGFydEluZGV4KSB7CisJCXJldHVybiAxOworCX0KKworCQorCQorCQorCQorCS8qKgorCSAqIHRvIHJlbW92ZSB0aGUgY29udHJvbCBlLmcuIGJ5IGEgcmVtb3ZlIGJ1dHRvbiBldmVudAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIHJlbW92ZSgpIHsKKwkJdXBkYXRlU3RhdHVzTGFiZWwoKTsKKwl9CisKKwkKKwkKKworCXByb3RlY3RlZCB2b2lkIHVwZGF0ZVN0YXR1c0xhYmVsKCkgeworCQlzdGF0dXNMYWJlbC5zZXRUZXh0KE1lc3NhZ2VzLmdldFN0cmluZygiQ09NTU9OLlNUQVRVUyIpKTsKKwl9CisJCisJCisKKwkvKioKKwkgKiBJbml0aWFsaXplIHRoZSBoZWFkZXIgbGFiZWwKKwkgKiAKKwkgKiBAcGFyYW0gZm9sZGVyTmFtZQorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIGluaXRpYWxpemVIZWFkZXIoU3RyaW5nIGZvbGRlck5hbWUpIHsKKwkJc2ltdWxhdGlvbk5hbWVMYWJlbC5zZXRUZXh0KCJhbmFseXppbmcgIitmb2xkZXJOYW1lKTsKKworCX0gLy8gaW5pdGlhbGl6ZUZyb21TaW11bGF0aW9uCisKKworCQorCQorCQorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5XaWRnZXQjZGlzcG9zZSgpCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgZGlzcG9zZSgpIHsKKwkJCQkJCQorCQlzdXBlci5kaXNwb3NlKCk7CisJCQorCX0gLy8gZGlzcG9zZQorCisKKwkKKwkvKioKKwkgKiBFYWNoIENvbnRyb2wgY2xhc3MgbWF5IGFkZCBvYmplY3RzIHRvIHRoaXMgbWFwCisJICogQHJldHVybiB0aGUgY29udHJvbCBwYXJhbWV0ZXJzIG1hcHMKKwkgKi8KKwlwdWJsaWMgTWFwPFN0cmluZywgT2JqZWN0PiBnZXRDb250cm9sUGFyYW1ldGVyc01hcCgpIHsKKwkJLy8gYWRkIG5vdGhpbmcgZm9yIG5vdworCQlyZXR1cm4gY29udHJvbFBhcmFtZXRlcnNNYXA7CisJfQorCQorCit9IC8vIEVzdGltYXRvckNvbnRyb2wKZGlmZiAtLWdpdCBhL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0udXRpbC5hbmFseXNpcy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91dGlsL2FuYWx5c2lzL3ZpZXdzL1NjZW5hcmlvQ29tcGFyaXNvbkZhY3RvcnkuamF2YSBiL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0udXRpbC5hbmFseXNpcy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91dGlsL2FuYWx5c2lzL3ZpZXdzL1NjZW5hcmlvQ29tcGFyaXNvbkZhY3RvcnkuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYzMxZDg0Ci0tLSAvZGV2L251bGwKKysrIGIvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS51dGlsLmFuYWx5c2lzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3V0aWwvYW5hbHlzaXMvdmlld3MvU2NlbmFyaW9Db21wYXJpc29uRmFjdG9yeS5qYXZhCkBAIC0wLDAgKzEsNTMgQEAKKy8vIEVzdGltYXRvckZhY3RvcnkuamF2YQorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnV0aWwuYW5hbHlzaXMudmlld3M7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDcsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlOworCisvKioKKyAqIFRoaXMgY2xhc3MgaXMgYSBmYWN0b3J5IGZvciBjcmVhdGluZyB7QGxpbmsgQW5hbHlzaXNDb250cm9sfSBpbnN0YW5jZXMuCisgKi8KK3B1YmxpYyBjbGFzcyBTY2VuYXJpb0NvbXBhcmlzb25GYWN0b3J5IGltcGxlbWVudHMgQW5hbHlzaXNDb250cm9sRmFjdG9yeSB7CisKKwkvKioKKwkgKiBwdWJsaWMgSU5TVEFOQ0UgZm9yIHRoaXMgRmFjdG9yeQorCSAqLworCXB1YmxpYyBzdGF0aWMgU2NlbmFyaW9Db21wYXJpc29uRmFjdG9yeSBJTlNUQU5DRSA9IG5ldyBTY2VuYXJpb0NvbXBhcmlzb25GYWN0b3J5KCk7CisKKwkvKioKKwkgKiBDb25zdGFudHMgCisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgQU5BTFlTSVNfVFlQRSA9IE1lc3NhZ2VzLmdldFN0cmluZygiQ09NTU9OLlNZTkNIUk9OSVpFUiIpOworCQorCisJLyoqCisJICogCisJICogQHBhcmFtIHBhcmVudAorCSAqIEBwYXJhbSBkaXJOYW1lCisJICogQHJldHVybiBuZXcgU2NlbmFyaW9Db21wYXJpc29uQ29udHJvbCgpCisJICovCisJcHVibGljIEFuYWx5c2lzQ29udHJvbCBjcmVhdGUoZmluYWwgQ29tcG9zaXRlIHBhcmVudCwgU3RyaW5nIGRpck5hbWUpIHsKKwkJCQkKKwkJcmV0dXJuIG5ldyBTY2VuYXJpb0NvbXBhcmlzb25Db250cm9sKHBhcmVudCk7CisJfQorCQorCisJLyoqCisJICogQHJldHVybiB0eXBlIG9mIGFuYWx5c2lzCisJICogCisJICovCisJcHVibGljIFN0cmluZyBnZXRDb250cm9sVHlwZSgpIHsKKwkJcmV0dXJuIEFOQUxZU0lTX1RZUEU7CisJfQorCit9IC8vIEVzdGltYXRvckZhY3RvcnkKZGlmZiAtLWdpdCBhL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0udXRpbC5hbmFseXNpcy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91dGlsL2FuYWx5c2lzL3ZpZXdzL1NjZW5hcmlvQ29tcGFyaXNvblZpZXcuamF2YSBiL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0udXRpbC5hbmFseXNpcy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91dGlsL2FuYWx5c2lzL3ZpZXdzL1NjZW5hcmlvQ29tcGFyaXNvblZpZXcuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZDI5ZjJlCi0tLSAvZGV2L251bGwKKysrIGIvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS51dGlsLmFuYWx5c2lzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3V0aWwvYW5hbHlzaXMvdmlld3MvU2NlbmFyaW9Db21wYXJpc29uVmlldy5qYXZhCkBAIC0wLDAgKzEsNzAgQEAKKy8vIEVzdGltYXRvclZpZXcgCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0udXRpbC5hbmFseXNpcy52aWV3czsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNywgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uam9icy5zaW11bGF0aW9uLlNpbXVsYXRpb25NYW5hZ2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5wYXJ0LlZpZXdQYXJ0OworCisvKioKKyAqIFRoaXMgdmlldyBwcm92aWRlcyBmb3IgYSBDcm9zcyBQaGFzZVN5bmNocm9uaXplciBhbmFseXNpcywgY29tcGFyaW5nIHR3byBzY2VuYXJpb3MKKyAqLworCitwdWJsaWMgY2xhc3MgU2NlbmFyaW9Db21wYXJpc29uVmlldyBleHRlbmRzIFZpZXdQYXJ0IHsKKworCisJLyoqCisJICogVGhlIGlkZW50aWZpZXIgb2YgdGhlIENvbXBhcmlzb24gVmlldyB7QHZhbHVlfQorCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIElEX0NvbXBhcmlzb25fVklFVyA9ICJvcmcuZWNsaXBzZS5zdGVtLnV0aWwuYW5hbHlzaXMudmlld3MuY29tcGFyaXNvbiI7IC8vJE5PTi1OTFMtMSQKKworCisKKwlwcml2YXRlIEFuYWx5c2lzVmlld2VyIGFuYWx5c2lzVmlld2VyOworCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS51aS5wYXJ0LldvcmtiZW5jaFBhcnQjY3JlYXRlUGFydENvbnRyb2wob3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlKQorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGNyZWF0ZVBhcnRDb250cm9sKGZpbmFsIENvbXBvc2l0ZSBwYXJlbnQpIHsKKworCQlhbmFseXNpc1ZpZXdlciA9IG5ldyBBbmFseXNpc1ZpZXdlcihwYXJlbnQsIFNjZW5hcmlvQ29tcGFyaXNvbkZhY3RvcnkuSU5TVEFOQ0UpOworCQlhbmFseXNpc1ZpZXdlci5zZXRJbnB1dChTaW11bGF0aW9uTWFuYWdlci5nZXRNYW5hZ2VyKCkpOworCisJCWdldFNpdGUoKS5zZXRTZWxlY3Rpb25Qcm92aWRlcihhbmFseXNpc1ZpZXdlcik7CisKKworCX0gLy8gY3JlYXRlUGFydENvbnRyb2wKKworCQorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS51aS5wYXJ0LldvcmtiZW5jaFBhcnQjZGlzcG9zZSgpCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgZGlzcG9zZSgpIHsKKwkJc3VwZXIuZGlzcG9zZSgpOworCX0gLy8gZGlzcG9zZQorCisJLyoqCisJICogVGhpcyBpcyByZXF1aXJlZCBieSB0aGUgaW50ZXJmYWNlLCBidXQgd2UncmUgbm90IHVzaW5nIGl0LgorCSAqIAorCSAqIEBzZWUgb3JnLmVjbGlwc2UudWkucGFydC5Xb3JrYmVuY2hQYXJ0I3NldEZvY3VzKCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBzZXRGb2N1cygpIHsKKwkJLy8gTm90aGluZworCX0gLy8gc2V0Rm9jdXMKKworfSAvLyBFc3RpbWF0b3JWaWV3CmRpZmYgLS1naXQgYS9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLnV0aWwuYW5hbHlzaXMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdXRpbC9hbmFseXNpcy92aWV3cy9UaW1lU2VyaWVzQ2FudmFzLmphdmEgYi9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLnV0aWwuYW5hbHlzaXMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdXRpbC9hbmFseXNpcy92aWV3cy9UaW1lU2VyaWVzQ2FudmFzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2ZkM2U3MgotLS0gL2Rldi9udWxsCisrKyBiL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0udXRpbC5hbmFseXNpcy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91dGlsL2FuYWx5c2lzL3ZpZXdzL1RpbWVTZXJpZXNDYW52YXMuamF2YQpAQCAtMCwwICsxLDEyOTQgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS51dGlsLmFuYWx5c2lzLnZpZXdzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7CitpbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CitpbXBvcnQgamF2YS51dGlsLk1hcDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmJpcnQuY2hhcnQuZGV2aWNlLklEZXZpY2VSZW5kZXJlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5iaXJ0LmNoYXJ0LmV4Y2VwdGlvbi5DaGFydEV4Y2VwdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5iaXJ0LmNoYXJ0LmZhY3RvcnkuR2VuZXJhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmJpcnQuY2hhcnQubW9kZWwuQ2hhcnQ7CitpbXBvcnQgb3JnLmVjbGlwc2UuYmlydC5jaGFydC5tb2RlbC5DaGFydFdpdGhBeGVzOworaW1wb3J0IG9yZy5lY2xpcHNlLmJpcnQuY2hhcnQubW9kZWwuYXR0cmlidXRlLkFuY2hvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5iaXJ0LmNoYXJ0Lm1vZGVsLmF0dHJpYnV0ZS5BeGlzVHlwZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5iaXJ0LmNoYXJ0Lm1vZGVsLmF0dHJpYnV0ZS5Cb3VuZHM7CitpbXBvcnQgb3JnLmVjbGlwc2UuYmlydC5jaGFydC5tb2RlbC5hdHRyaWJ1dGUuQ29sb3JEZWZpbml0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmJpcnQuY2hhcnQubW9kZWwuYXR0cmlidXRlLkludGVyc2VjdGlvblR5cGU7CitpbXBvcnQgb3JnLmVjbGlwc2UuYmlydC5jaGFydC5tb2RlbC5hdHRyaWJ1dGUuTGluZUF0dHJpYnV0ZXM7CitpbXBvcnQgb3JnLmVjbGlwc2UuYmlydC5jaGFydC5tb2RlbC5hdHRyaWJ1dGUuTGluZVN0eWxlOworaW1wb3J0IG9yZy5lY2xpcHNlLmJpcnQuY2hhcnQubW9kZWwuYXR0cmlidXRlLlBvc2l0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmJpcnQuY2hhcnQubW9kZWwuYXR0cmlidXRlLlRpY2tTdHlsZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5iaXJ0LmNoYXJ0Lm1vZGVsLmF0dHJpYnV0ZS5pbXBsLkJvdW5kc0ltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2UuYmlydC5jaGFydC5tb2RlbC5hdHRyaWJ1dGUuaW1wbC5Db2xvckRlZmluaXRpb25JbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLmJpcnQuY2hhcnQubW9kZWwuY29tcG9uZW50LkF4aXM7CitpbXBvcnQgb3JnLmVjbGlwc2UuYmlydC5jaGFydC5tb2RlbC5jb21wb25lbnQuU2VyaWVzOworaW1wb3J0IG9yZy5lY2xpcHNlLmJpcnQuY2hhcnQubW9kZWwuY29tcG9uZW50LmltcGwuU2VyaWVzSW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5iaXJ0LmNoYXJ0Lm1vZGVsLmRhdGEuTnVtYmVyRGF0YVNldDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5iaXJ0LmNoYXJ0Lm1vZGVsLmRhdGEuU2VyaWVzRGVmaW5pdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5iaXJ0LmNoYXJ0Lm1vZGVsLmRhdGEuaW1wbC5OdW1iZXJEYXRhRWxlbWVudEltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2UuYmlydC5jaGFydC5tb2RlbC5kYXRhLmltcGwuTnVtYmVyRGF0YVNldEltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2UuYmlydC5jaGFydC5tb2RlbC5kYXRhLmltcGwuU2VyaWVzRGVmaW5pdGlvbkltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2UuYmlydC5jaGFydC5tb2RlbC5pbXBsLkNoYXJ0V2l0aEF4ZXNJbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLmJpcnQuY2hhcnQubW9kZWwubGF5b3V0LkxlZ2VuZDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5iaXJ0LmNoYXJ0Lm1vZGVsLmxheW91dC5QbG90OworaW1wb3J0IG9yZy5lY2xpcHNlLmJpcnQuY2hhcnQubW9kZWwudHlwZS5MaW5lU2VyaWVzOworaW1wb3J0IG9yZy5lY2xpcHNlLmJpcnQuY2hhcnQubW9kZWwudHlwZS5pbXBsLlNjYXR0ZXJTZXJpZXNJbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLmJpcnQuY2hhcnQudXRpbC5QbHVnaW5TZXR0aW5nczsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uQWN0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JQWN0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5NZW51TWFuYWdlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uU2VwYXJhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udWkucHJlZmVyZW5jZXMuVmlzdWFsaXphdGlvblByZWZlcmVuY2VQYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udXRpbC5hbmFseXNpcy5BY3RpdmF0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS51dGlsLmFuYWx5c2lzLkFnZ3JlZ2F0ZURhdGFXcml0ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS51dGlsLmFuYWx5c2lzLlNjZW5hcmlvQW5hbHlzaXNTdWl0ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuU1dUOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuUGFpbnRFdmVudDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLlBhaW50TGlzdGVuZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmdyYXBoaWNzLkNvbG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ncmFwaGljcy5HQzsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZ3JhcGhpY3MuSW1hZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ2FudmFzOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5NZW51OworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLldpZGdldDsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5JV29ya2JlbmNoQWN0aW9uQ29uc3RhbnRzOworCisvKioKKyAqIFRpbWVTZXJpZXNDYW52YXMgaXMgYSBzdWJjbGFzcyBvZiB7QGxpbmsgQ2FudmFzfSBzdWl0YWJsZSBmb3IgY2hhcnQgZHJhd2luZ3MuCisgKi8KK3B1YmxpYyBjbGFzcyBUaW1lU2VyaWVzQ2FudmFzIGV4dGVuZHMgQ2FudmFzIHsKKworCXByb3RlY3RlZCBJRGV2aWNlUmVuZGVyZXIgaWRyID0gbnVsbDsKKworCS8qKgorCSAqIFRoaXMgaXMgdGhlIHtAbGluayBDaGFydH0gdGhhdCBwbG90cyB0aGUgcmVsYXRpdmUgdmFsdWVzLgorCSAqLworCXByb3RlY3RlZCBDaGFydCBjbSA9IG51bGw7CisKKwkvKioKKwkgKiBUaGUgcHJvdmlkZXIgb2YgcmVsYXRpdmUgdmFsdWVzLgorCSAqLworCS8vcHJpdmF0ZSBSZWxhdGl2ZVZhbHVlSGlzdG9yeVByb3ZpZGVyIHJ2aHA7CisKKwlwcml2YXRlIEFuYWx5c2lzQ29udHJvbCBjb250cm9sID0gbnVsbDsKKwkKKwkvKioKKwkgKiB0aGUgaW5kZXggb2YgdGhpcyBDaGFydAorCSAqLworCXByaXZhdGUgaW50IGNoYXJ0SW5kZXggPSAwOworCQorCisJcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIGRlZmF1bHRLZXkgPSBBZ2dyZWdhdGVEYXRhV3JpdGVyLmdldEtleVMoKTsKKworCS8qKgorCSAqIHNvbWUgZXh0cmEgY29sb3JzCisJICovCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBDb2xvckRlZmluaXRpb25bXSBjb2xvckRlZmF1bHQgPSB7CisJCQkJCQkJCQkJCQkJCQlDb2xvckRlZmluaXRpb25JbXBsLkJMVUUoKSwgCisJCQkJCQkJCQkJCQkJCQlDb2xvckRlZmluaXRpb25JbXBsLkJMQUNLKCksIAorCQkJCQkJCQkJCQkJCQkJQ29sb3JEZWZpbml0aW9uSW1wbC5HUkVZKCksCisJCQkJCQkJCQkJCQkJCQlDb2xvckRlZmluaXRpb25JbXBsLkNZQU4oKSwKKwkJCQkJCQkJCQkJCQkJCUNvbG9yRGVmaW5pdGlvbkltcGwuT1JBTkdFKCkgCisJCQkJCQkJCQkJCQkJCQl9OworCS8qKgorCSAqIHVzZWQgaWYgd2UgbmVlZCB0byBvdmVybGF5IHRyYWNlcyBpbiBkaWZmZXJlbnQgY29sb3JzCisJICovCisJcHJpdmF0ZSBib29sZWFuIG92ZXJsYXlNb2RlID0gZmFsc2U7CisJCisJLyoqCisJICogdXNlZCB0byBpbmRleCB0aGUgbGluZSBzZXJpZXMgc28gd2UgY2FuIHN0ZXAgdGhyb3VnaCBkZWZhdWx0IGNvbG9ycworCSAqIHdoZW4gYSB1c2VyIGN1c3RvbSBjb2xvciBpcyBub3QgeWV0IGFzc2lnbmVkCisJICovCisJcHJpdmF0ZSBpbnQgc2VyaWVzQ291bnQgID0gMDsKKwkKKworCS8qKgorCSAqIEEgY29udGV4dCBtZW51IGZvciB0aGlzIHZpZXcKKwkgKi8KKwlNZW51IHBvcFVwTWVudSA9IG51bGw7CisJCisJLyoqCisJICogc2V0IHkgYXhpcyB0byBhIGxpbmVhciBzY2FsZQorCSAqLworCXByaXZhdGUgTGluZWFyU2NhbGVBY3Rpb24gbGluZWFyVGltZUFjdGlvbjsKKwkvKioKKwkgKiBzZXQgeSBheGlzIHRvIGEgbG9nIHNjYWxlCisJICovCisJcHJpdmF0ZSBMb2dTY2FsZUFjdGlvbiBsb2dUaW1lQWN0aW9uOworCXByb3RlY3RlZCBib29sZWFuIHVzZUxpbmVhclRpbWVTY2FsZSA9IHRydWU7CisJCisKKwkvKioKKwkgKiBzaG93IHRoZSBsZWdlbmQgKHRydWUgYnkgZGVmYXVsdCkKKwkgKi8KKwlwcml2YXRlIExlZ2VuZFZpZXdBY3Rpb24gdmlld0xlZ2VuZDsKKworCS8qKgorCSAqIGhpZGUgdGhlIGxlZ2VuZCAKKwkgKi8KKwlwcml2YXRlIExlZ2VuZEhpZGVBY3Rpb24gaGlkZUxlZ2VuZDsKKwlwcm90ZWN0ZWQgYm9vbGVhbiBzaG93TGVnZW5kID0gdHJ1ZTsKKworCXByb3RlY3RlZCBMZWdlbmQgbGVnZW5kID0gbnVsbDsKKwkKKworCS8qKgorCSAqIHRoaXMgaXMgYSBtYXAgb2YgdGhlIERhdGFTZXJpZXMgb2JqZWN0IChrZXllZCBieSBwcm9wZXJ0eSBuYW1lKQorCSAqLworCXByb3RlY3RlZCBmaW5hbCBNYXA8U3RyaW5nLERhdGFTZXJpZXM+IGRhdGFTZXJpZXNNYXAgPSBuZXcgSGFzaE1hcDxTdHJpbmcsRGF0YVNlcmllcz4oKTsKKwkKKwkvKioKKwkgKiBLZWVwIHRyYWNrIG9mIHdoaWNoIHRpbWVzZXJpZXMgYXJlIHZpc2libGUKKwkgKi8KKwkKKwlwcm90ZWN0ZWQgTWFwPFN0cmluZywgQm9vbGVhbj52aXNpYmxlTWFwID0gIG5ldyBIYXNoTWFwPFN0cmluZyxCb29sZWFuPigpOworCisKKwkvKioKKwkgKiBUaGVzZSBhcmUgdGhlIGN5Y2xlIG51bWJlcnMgdGhhdCBtYXRjaCB0aGUgcmVsYXRpdmUgdmFsdWVzIHRoYXQgd2lsbCBiZQorCSAqIHBsb3R0ZWQKKwkgKiAKKwkgKiBAc2VlICNyZWxhdGl2ZVZhbHVlcworCSAqLworCXByaXZhdGUgZmluYWwgTGlzdDxJbnRlZ2VyPiBjeWNsZU51bWJlcnMgPSBuZXcgQXJyYXlMaXN0PEludGVnZXI+KCk7CisKKwkvKioKKwkgKiBDaGFydCBnZW5lcmF0b3IgaW5zdGFuY2UgKHJlZmVyZW5jZSB0byBhIHNpbmdsZXRvbikKKwkgKi8KKwlHZW5lcmF0b3IgZ3I7CisKKwlBeGlzIHlBeGlzUHJpbWFyeTsKKwlBeGlzIHhBeGlzUHJpbWFyeTsKKwkvKioKKwkgKiB0aGUgbWF4WSB2YWx1ZSBmb3Igc2NhbGluZworCSAqLworCWRvdWJsZSBtYXhZID0gLTEuMDsKKworCS8qKgorCSAqIExvZyBvZiB6ZXJvIGlzIG5lZ2F0aXZlIGluZmluaXR5IHNvIGZvciBlYWNoIGxvY2F0aW9uIHdlIHdpbGwgY3V0IG9mZiB0aGUgbWluaW11bSAKKwkgKiBhdCB0aGUgbWluIE5PTlpFUk8gWSB2YWx1ZQorCSAqLworCXByaXZhdGUgZG91YmxlIG1pbllzY2FsZSA9IDEuMDsKKwkKKwkKKwkvKioKKwkgKiBMYWJlbCBmb3IgbGluZSBzZXJpZXMgTEVHRU5ECisJICovCisJcHVibGljIFN0cmluZyBPcmRpbmF0ZV9MRUdFTkQgPSAiWSI7CisJCisJLyoqCisJICogTGFiZWwgZm9yIGxpbmUgc2VyaWVzIFkgYXhpcyBsYWJlbAorCSAqKi8KKwlwdWJsaWMgU3RyaW5nIE9yZGluYXRlX0FYSVMgPSAiWSI7CisJCisJLyoqIAorCSAqIGN1c3RvbWl6YWJsZSBjb2xvciBkZWZpbml0aW9ucworCSAqLworCXByaXZhdGUgQ29sb3JEZWZpbml0aW9uIGZvcmVHcm91bmQgPSBDb2xvckRlZmluaXRpb25JbXBsLldISVRFKCk7CisJcHJpdmF0ZSBDb2xvckRlZmluaXRpb24gYmFja2dyb3VuZEdyb3VuZCA9IENvbG9yRGVmaW5pdGlvbkltcGwuQkxBQ0soKTsKKwlwcml2YXRlIENvbG9yRGVmaW5pdGlvbiBmcmFtZUNvbG9yID0gQ29sb3JEZWZpbml0aW9uSW1wbC5jcmVhdGUoMTgwLCAxODAsIDIwMCk7CisKKwlJbWFnZSBpbWdDaGFydCA9IG51bGw7CisJCisJLyoqCisJICogVGhpcyBDb25zdHJ1Y3RvciBpcyB1c2VkIHdoZW4gd2Ugd2FudCB0byBwbGFjZSB0aGUgdGltZSBzZXJpZXMgaW4gYSBjb250YWluZXIKKwkgKiB3aGljaCBpcyBhIHN1YiBjb21wb25lbnQgb2YgdGhlIGFjdHVhbCBBbmFseXNpc0NvbnRyb2wKKwkgKiBAcGFyYW0gYW5hbHlzaXNDb250cm9sIAorCSAqIAorCSAqIEBwYXJhbSBwYXJlbnQgIHRoZSBTV1QgcGFyZW50IG9mIHRoZSB7QGxpbmsgV2lkZ2V0fQorCSAqIEBwYXJhbSBvcmRpbmF0ZVN0cmluZyAKKwkgKiBAcGFyYW0geUF4aXNMYWJlbCAKKwkgKiBAcGFyYW0gZGVmYXVsdFlEYXRhVHlwZSAKKwkgKiBAcGFyYW0gZm9yZWdyb3VuZCAKKwkgKiBAcGFyYW0gYmFja2dyb3VuZCAKKwkgKiBAcGFyYW0gZnJhbWVjb2xvciAKKwkgKiBAcGFyYW0gY2hhcnRJbmRleCB0aGUgaW5kZXggb2YgdGhpcyBjaGFydCAoMCBpZiBvbmx5IG9uZSkKKwkgKiBAcGFyYW0gb3ZlcmxheU1vZGUgdXNlZCBpZiB3ZSBuZWVkIHRvIG92ZXJsYXkgdHJhY2VzIGluIGRpZmZlcmVudCBjb2xvcnMKKwkgKi8KKwlwdWJsaWMgVGltZVNlcmllc0NhbnZhcyhmaW5hbCBBbmFseXNpc0NvbnRyb2wgYW5hbHlzaXNDb250cm9sLCBmaW5hbCBDb21wb3NpdGUgcGFyZW50LCAKKwkJCWZpbmFsIFN0cmluZyBvcmRpbmF0ZVN0cmluZywgCisJCQlmaW5hbCBTdHJpbmcgeUF4aXNMYWJlbCwgCisJCQlmaW5hbCBTdHJpbmcgZGVmYXVsdFlEYXRhVHlwZSwKKwkJCUNvbG9yRGVmaW5pdGlvbiBmb3JlZ3JvdW5kLAorCQkJQ29sb3JEZWZpbml0aW9uIGJhY2tncm91bmQsCisJCQlDb2xvckRlZmluaXRpb24gZnJhbWVjb2xvciwKKwkJCWludCBjaGFydEluZGV4LAorCQkJYm9vbGVhbiBvdmVybGF5TW9kZQkpIHsKKwkJc3VwZXIocGFyZW50LCBTV1QuRE9VQkxFX0JVRkZFUkVEIHwgU1dULkJPUkRFUik7CisJCU9yZGluYXRlX0xFR0VORCA9IG9yZGluYXRlU3RyaW5nOworCQlPcmRpbmF0ZV9BWElTID0geUF4aXNMYWJlbDsKKwkJZGVmYXVsdEtleSA9IGRlZmF1bHRZRGF0YVR5cGU7CisJCWZvcmVHcm91bmQgCQkJPSBmb3JlZ3JvdW5kOworCQliYWNrZ3JvdW5kR3JvdW5kIAk9IGJhY2tncm91bmQ7CisJCWZyYW1lQ29sb3IgCQkJPSBmcmFtZWNvbG9yOworCQl0aGlzLmNoYXJ0SW5kZXggPSBjaGFydEluZGV4OworCQl0aGlzLm92ZXJsYXlNb2RlID0gb3ZlcmxheU1vZGU7CisJCQorCQlnciA9IEdlbmVyYXRvci5pbnN0YW5jZSgpOworCisJCXRyeSB7CisJCQlpZHIgPSBQbHVnaW5TZXR0aW5ncy5pbnN0YW5jZSgpLmdldERldmljZSgiZHYuU1dUIik7IC8vJE5PTi1OTFMtMSQJCQkKKwkJfSBjYXRjaCAoZmluYWwgQ2hhcnRFeGNlcHRpb24gcGV4KSB7CisJCQlBY3RpdmF0b3IubG9nRXJyb3IoTWVzc2FnZXMuZ2V0U3RyaW5nKCJDT01NT04uRVJST1JJTklUIiksIHBleCk7IAorCQkJcmV0dXJuOworCQl9CisKKwkJY29udHJvbCA9IGFuYWx5c2lzQ29udHJvbDsKKworCQkKKwkJY20gPSBjcmVhdGVTaW1wbGVMaW5lQ2hhcnQoZGF0YVNlcmllc01hcCwgY3ljbGVOdW1iZXJzLCBNZXNzYWdlcworCQkJCS5nZXRTdHJpbmcoIkNDLnRpdGxlIikpOyAvLyROT04tTkxTLTEkCisJCQorCQlyZXNldERhdGEoKTsKKwkJYWRkUGFpbnRMaXN0ZW5lcihuZXcgUGFpbnRMaXN0ZW5lcigpIHsKKwkJCXB1YmxpYyB2b2lkIHBhaW50Q29udHJvbChmaW5hbCBQYWludEV2ZW50IHBlKSB7CisKKwkJCQlmaW5hbCBDb21wb3NpdGUgc291cmNlID0gKENvbXBvc2l0ZSkgcGUuZ2V0U291cmNlKCk7CisJCQkJZmluYWwgb3JnLmVjbGlwc2Uuc3d0LmdyYXBoaWNzLlJlY3RhbmdsZSBkID0gc291cmNlCisJCQkJCQkuZ2V0Q2xpZW50QXJlYSgpOworCisJCQkJaWYoaW1nQ2hhcnQgIT0gbnVsbCkgaW1nQ2hhcnQuZGlzcG9zZSgpOworCQkJCWltZ0NoYXJ0ID0gbmV3IEltYWdlKHNvdXJjZS5nZXREaXNwbGF5KCksIGQpOworCQkJCQorCQkJCWlkci5zZXRQcm9wZXJ0eShJRGV2aWNlUmVuZGVyZXIuR1JBUEhJQ1NfQ09OVEVYVCwgbmV3IEdDKAorCQkJCQkJaW1nQ2hhcnQpKTsKKwkJCQlmaW5hbCBCb3VuZHMgYm91bmRzID0gQm91bmRzSW1wbC5jcmVhdGUoZC54LCBkLnksIGQud2lkdGgsCisJCQkJCQlkLmhlaWdodCk7CisJCQkJYm91bmRzLnNjYWxlKDcyZCAvIGlkci5nZXREaXNwbGF5U2VydmVyKCkuZ2V0RHBpUmVzb2x1dGlvbigpKTsKKwkJCQkvLyBCT1VORFMgTVVTVCBCRSBTUEVDSUZJRUQgSU4gUE9JTlRTCisKKwkJCQl0cnkgeworCQkJCQlnci5yZW5kZXIoaWRyLCBnci5idWlsZChpZHIuZ2V0RGlzcGxheVNlcnZlcigpLCBjbSwgYm91bmRzLAorCQkJCQkJCW51bGwsIG51bGwsIG51bGwpKTsKKwkJCQkJcGUuZ2MuZHJhd0ltYWdlKGltZ0NoYXJ0LCBkLngsIGQueSk7CisJCQkJfSBjYXRjaCAoZmluYWwgQ2hhcnRFeGNlcHRpb24gY2UpIHsKKwkJCQkJQWN0aXZhdG9yLmxvZ0Vycm9yKE1lc3NhZ2VzLmdldFN0cmluZygiQ09NTU9OLkVSUk9SSU5JVCIpLCBjZSk7IAorCQkJCX0KKwkJCX0gLy8gcGFpbnRDb250cm9sCisJCX0gLy8gUGFpbnRMaXN0ZW5lcgorCQkpOworCQkKKwkJLy9DcmVhdGUgYSBjb250ZXh0IG1lbnUgZm9yIHRoZSBjYW52YXMKKwkJY3JlYXRlQ29udGV4dE1lbnUodGhpcyk7CisJCQorCisJfSAvLyBUaW1lU2VyaWVzQ2FudmFzCisJLyoqCisJICogQ29uc3RydWN0b3IuCisJICogCisJICogQHBhcmFtIHBhcmVudCAgdGhlIFNXVCBwYXJlbnQgb2YgdGhlIHtAbGluayBXaWRnZXR9CisJICogQHBhcmFtIG9yZGluYXRlU3RyaW5nIAorCSAqIEBwYXJhbSB5QXhpc0xhYmVsIAorCSAqIEBwYXJhbSBkZWZhdWx0WURhdGFUeXBlIAorCSAqIEBwYXJhbSBmb3JlZ3JvdW5kIAorCSAqIEBwYXJhbSBiYWNrZ3JvdW5kIAorCSAqIEBwYXJhbSBmcmFtZWNvbG9yIAorCSAqIEBwYXJhbSBjaGFydEluZGV4IHRoZSBpbmRleCBvZiB0aGlzIGNoYXJ0ICgwIGlmIG9ubHkgb25lKQorCSAqICAKKwkgKi8KKwlwdWJsaWMgVGltZVNlcmllc0NhbnZhcyhmaW5hbCBDb21wb3NpdGUgcGFyZW50LCAKKwkJCWZpbmFsIFN0cmluZyBvcmRpbmF0ZVN0cmluZywgCisJCQlmaW5hbCBTdHJpbmcgeUF4aXNMYWJlbCwgCisJCQlmaW5hbCBTdHJpbmcgZGVmYXVsdFlEYXRhVHlwZSwKKwkJCUNvbG9yRGVmaW5pdGlvbiBmb3JlZ3JvdW5kLAorCQkJQ29sb3JEZWZpbml0aW9uIGJhY2tncm91bmQsCisJCQlDb2xvckRlZmluaXRpb24gZnJhbWVjb2xvciwKKwkJCWludCBjaGFydEluZGV4KSB7CisJCXN1cGVyKHBhcmVudCwgU1dULkRPVUJMRV9CVUZGRVJFRCB8IFNXVC5CT1JERVIpOworCQlPcmRpbmF0ZV9MRUdFTkQgPSBvcmRpbmF0ZVN0cmluZzsKKwkJT3JkaW5hdGVfQVhJUyA9IHlBeGlzTGFiZWw7CisJCWRlZmF1bHRLZXkgPSBkZWZhdWx0WURhdGFUeXBlOworCQlmb3JlR3JvdW5kIAkJCT0gZm9yZWdyb3VuZDsKKwkJYmFja2dyb3VuZEdyb3VuZCAJPSBiYWNrZ3JvdW5kOworCQlmcmFtZUNvbG9yIAkJCT0gZnJhbWVjb2xvcjsKKwkJdGhpcy5jaGFydEluZGV4ID0gY2hhcnRJbmRleDsKKwkJCisJCWdyID0gR2VuZXJhdG9yLmluc3RhbmNlKCk7CisKKwkJdHJ5IHsKKwkJCWlkciA9IFBsdWdpblNldHRpbmdzLmluc3RhbmNlKCkuZ2V0RGV2aWNlKCJkdi5TV1QiKTsgLy8kTk9OLU5MUy0xJAkJCQorCQl9IGNhdGNoIChmaW5hbCBDaGFydEV4Y2VwdGlvbiBwZXgpIHsKKwkJCUFjdGl2YXRvci5sb2dFcnJvcihNZXNzYWdlcy5nZXRTdHJpbmcoIkNPTU1PTi5FUlJPUklOSVQiKSwgcGV4KTsgLy8kTk9OLU5MUy0xJAorCQkJcmV0dXJuOworCQl9CisKKwkJY29udHJvbCA9IChBbmFseXNpc0NvbnRyb2wpIHBhcmVudDsKKworCQkKKwkJY20gPSBjcmVhdGVTaW1wbGVMaW5lQ2hhcnQoZGF0YVNlcmllc01hcCwgY3ljbGVOdW1iZXJzLCBNZXNzYWdlcworCQkJCS5nZXRTdHJpbmcoIkNDLnRpdGxlIikpOyAvLyROT04tTkxTLTEkCisJCQorCQlyZXNldERhdGEoKTsKKwkJCisJCWFkZFBhaW50TGlzdGVuZXIobmV3IFBhaW50TGlzdGVuZXIoKSB7CisJCQlwdWJsaWMgdm9pZCBwYWludENvbnRyb2woZmluYWwgUGFpbnRFdmVudCBwZSkgeworCQkJCQorCQkJCWZpbmFsIENvbXBvc2l0ZSBzb3VyY2UgPSAoQ29tcG9zaXRlKSBwZS5nZXRTb3VyY2UoKTsKKwkJCQlmaW5hbCBvcmcuZWNsaXBzZS5zd3QuZ3JhcGhpY3MuUmVjdGFuZ2xlIGQgPSBzb3VyY2UKKwkJCQkJCS5nZXRDbGllbnRBcmVhKCk7CisKKwkJCQlpZihpbWdDaGFydCAhPSBudWxsKSBpbWdDaGFydC5kaXNwb3NlKCk7CisJCQkJaW1nQ2hhcnQgPSBuZXcgSW1hZ2Uoc291cmNlLmdldERpc3BsYXkoKSwgZCk7CisJCQkJaWRyLnNldFByb3BlcnR5KElEZXZpY2VSZW5kZXJlci5HUkFQSElDU19DT05URVhULCBuZXcgR0MoCisJCQkJCQlpbWdDaGFydCkpOworCQkJCWZpbmFsIEJvdW5kcyBib3VuZHMgPSBCb3VuZHNJbXBsLmNyZWF0ZShkLngsIGQueSwgZC53aWR0aCwKKwkJCQkJCWQuaGVpZ2h0KTsKKwkJCQlib3VuZHMuc2NhbGUoNzJkIC8gaWRyLmdldERpc3BsYXlTZXJ2ZXIoKS5nZXREcGlSZXNvbHV0aW9uKCkpOworCQkJCS8vIEJPVU5EUyBNVVNUIEJFIFNQRUNJRklFRCBJTiBQT0lOVFMKKworCQkJCXRyeSB7CisJCQkJCWdyLnJlbmRlcihpZHIsIGdyLmJ1aWxkKGlkci5nZXREaXNwbGF5U2VydmVyKCksIGNtLCBib3VuZHMsCisJCQkJCQkJbnVsbCwgbnVsbCwgbnVsbCkpOworCQkJCQlwZS5nYy5kcmF3SW1hZ2UoaW1nQ2hhcnQsIGQueCwgZC55KTsKKwkJCQl9IGNhdGNoIChmaW5hbCBDaGFydEV4Y2VwdGlvbiBjZSkgeworCQkJCQlBY3RpdmF0b3IubG9nRXJyb3IoIlByb2JsZW0gcmVuZGVyaW5nIGNoYXJ0IiwgY2UpOyAvLyROT04tTkxTLTEkCisJCQkJfQorCQkJfSAvLyBwYWludENvbnRyb2wKKwkJfSAvLyBQYWludExpc3RlbmVyCisJCSk7CisJCQorCQkvL0NyZWF0ZSBhIGNvbnRleHQgbWVudSBmb3IgdGhlIGNhbnZhcworCQljcmVhdGVDb250ZXh0TWVudSh0aGlzKTsKKwkJCisKKwl9IC8vIFRpbWVTZXJpZXNDYW52YXMKKworCQorCQorCS8qKgorCSAqIFRoZSBtZXRob2Qgd2hpY2ggZ2V0cyB0aGUge0BsaW5rIFRpbWVTZXJpZXNDYW52YXN9JyByZXBvcnRzIGxpc3QsIGFuZAorCSAqIGRyYXdzIGl0IG9uIHRoZSB7QGxpbmsgVGltZVNlcmllc0NhbnZhc30uCisJICogQHJldHVybiBpbnRlZ3JhdGVkRGlmZmVyZW5jZSBmb3IgZWFjaCBsaW5lIHNlcmllcworCSAqIAorCSAqLworCXB1YmxpYyBkb3VibGVbXSBkcmF3KCkgeworCQkKKwkJLy9jbGVhckRhdGEoKTsKKwkJcmVzZXREYXRhKCk7CisKKwkJeUF4aXNQcmltYXJ5LmdldFNlcmllc0RlZmluaXRpb25zKCkuY2xlYXIoKTsKKwkJCisJCWludCBtYXhMaW5lcyA9IGNvbnRyb2wuZ2V0TnVtUHJvcGVydGllcyhjaGFydEluZGV4KTsKKwkKKwkJLy8gYWRkIGFsbCB0aGUgcmVzdCBvZiB0aGUgbGluZSBzZXJpZXMgbm93CisJCWZvciAoaW50IGkgPSAwOyBpIDwgbWF4TGluZXM7IGkgKyspIHsKKwkJCVN0cmluZyBwcm9wZXJ0eSA9IGNvbnRyb2wuZ2V0UHJvcGVydHkoY2hhcnRJbmRleCxpKTsKKwkJCQorCQkJaWYoIWRhdGFTZXJpZXNNYXAuY29udGFpbnNLZXkocHJvcGVydHkpKSB7CisJCQkJLy8gbmV3IHByb3BlcnR5CisJCQkJRGF0YVNlcmllcyBzZXJpZXMgPSBuZXcgRGF0YVNlcmllcyhwcm9wZXJ0eSwgc2VyaWVzQ291bnQsIG92ZXJsYXlNb2RlKTsKKwkJCQlpZih2aXNpYmxlTWFwLmNvbnRhaW5zS2V5KHByb3BlcnR5KSkKKwkJCQkJCXNlcmllcy5zZXRWaXNpYmxlKHZpc2libGVNYXAuZ2V0KHByb3BlcnR5KS5ib29sZWFuVmFsdWUoKSk7CisJCQkJZWxzZSB7CisJCQkJCXNlcmllcy5zZXRWaXNpYmxlKHRydWUpOworCQkJCQl2aXNpYmxlTWFwLnB1dChwcm9wZXJ0eSxCb29sZWFuLlRSVUUpOworCQkJCX0KKwkJCQlzZXJpZXNDb3VudCArKzsKKwkJCQlkYXRhU2VyaWVzTWFwLnB1dChwcm9wZXJ0eSwgc2VyaWVzKTsKKwkJCX0KKwkJCURhdGFTZXJpZXMgc2VyaWVzID0gZGF0YVNlcmllc01hcC5nZXQocHJvcGVydHkpOworCQkJaWYoc2VyaWVzLmlzVmlzaWJsZSgpKSB7CisJCQkJc2VyaWVzLnNob3coKTsKKwkJCX0gZWxzZSB7CisJCQkJc2VyaWVzLmhpZGUoKTsKKwkJCX0KKwkJfQorCQorCisJCS8vIHVwZGF0ZSB0aGUgY29udGV4dCBtZW51IHdpdGggdGhlIG5ldyBwcm9wZXJ0aWVzIHRvIHBsb3QKKwkJdXBkYXRlQ29udGV4dE1lbnUodGhpcyk7CisJCQorCQkKKwkJCisJCWRvdWJsZVtdIGludGVncmF0ZWREaWZmZXJlbmNlID0gbmV3IGRvdWJsZVttYXhMaW5lc107CisJCWZvciAoaW50IGkgPSAwOyBpIDwgbWF4TGluZXM7IGkrKykgeworCQkJaW50ZWdyYXRlZERpZmZlcmVuY2VbaV0gPSAwLjA7CisJCX0KKwkJCisJCW1heFkgPSAtMS4wOworCQkKKwkJCWJvb2xlYW4gc2V0Q3ljbGVzID0gZmFsc2U7CisJCQkvLyBHZXQgdGhlIHZhbHVlcyBmb3IgdGhlIHByb3BlcnR5IHRvIGJlIHBsb3R0ZWQKKwkJCWludCBtYXhQb2ludHMgPSAwOworCQkJCisJCQlmb3IgKGludCBpID0gMDsgaSA8IG1heExpbmVzOyBpKyspIHsKKwkJCQlTdHJpbmcgcHJvcGVydHkgPSBjb250cm9sLmdldFByb3BlcnR5KGNoYXJ0SW5kZXgsaSk7CisJCQkJZmluYWwgZG91YmxlW10gZG91YmxlVmFsdWVzID0gY29udHJvbC5nZXRWYWx1ZXMoY2hhcnRJbmRleCxpKTsKKwkJCQkKKwkJCQlEYXRhU2VyaWVzIHNlcmllcyA9IGRhdGFTZXJpZXNNYXAuZ2V0KHByb3BlcnR5KTsKKwkJCQkKKwkJCQlpZihkYXRhU2VyaWVzTWFwLmdldChwcm9wZXJ0eSkuaXNWaXNpYmxlKCkgPT0gdHJ1ZSkgeyAKKwkJCQkJZm9yIChpbnQgaiA9IDA7IGogPCBkb3VibGVWYWx1ZXMubGVuZ3RoOyBqKyspIHsKKwkJCQkJCWludGVncmF0ZWREaWZmZXJlbmNlW2ldICs9IGRvdWJsZVZhbHVlc1tqXTsKKwkJCQkJCQorCQkJCQkJaWYoZG91YmxlVmFsdWVzW2pdIDw9IG1pbllzY2FsZSkgeworCQkJCQkJCWlmKGRvdWJsZVZhbHVlc1tqXSA+IDAuMCkgbWluWXNjYWxlID0gZG91YmxlVmFsdWVzW2pdOworCQkJCQkJfQorCQkJCQkJCisJCQkJCQlpZihkb3VibGVWYWx1ZXNbal0gPj0gbWF4WSkgeworCQkJCQkJCW1heFkgPSBkb3VibGVWYWx1ZXNbal07CisJCQkJCQkJZG91YmxlIGxvZyA9IE1hdGguZmxvb3IoTWF0aC5sb2cxMChtYXhZKSk7CisJCQkJCQkJZG91YmxlIGFkanVzdGVkTWF4ID0gKE1hdGguY2VpbChtYXhZL01hdGgucG93KDEwLCBsb2cpKSkqTWF0aC5wb3coMTAsIGxvZyk7CisJCQkJCQkgICAgaWYoYWRqdXN0ZWRNYXggPD0gMS4wKSBhZGp1c3RlZE1heCA9IDEuMDsKKwkJCQkJCSAgICAvL2FkanVzdGVkTWF4ID0gbWF4WSoxMDAuMDsKKwkJCQkJCSAgICAvL2FkanVzdGVkTWF4ICs9IDEuMDsKKwkJCQkJCSAgICAvL2ludCBteCA9IChpbnQpYWRqdXN0ZWRNYXg7CisJCQkJCQkgICAgLy9hZGp1c3RlZE1heCA9ICgoZG91YmxlKW14KS8xMDAuMDsKKwkJCQkJCQlpZiAodXNlTGluZWFyVGltZVNjYWxlKSB7CisJCQkJCQkJCXlBeGlzUHJpbWFyeS5nZXRTY2FsZSgpLnNldE1heChOdW1iZXJEYXRhRWxlbWVudEltcGwuY3JlYXRlKGFkanVzdGVkTWF4KSk7CisJCQkJCQkJCWRvdWJsZSBzdGVwID0gYWRqdXN0ZWRNYXggLyAxMC4wOworCQkJCQkJCQl5QXhpc1ByaW1hcnkuZ2V0U2NhbGUoKS5zZXRTdGVwKHN0ZXApOworCQkJCQkJCX0gZWxzZSB7CisJCQkJCQkJCS8vIGtlZXAgMiBzaWduaWZpY2FudCBmaWd1cmVzIG9uIHNjYWxlIGF4aXMKKwkJCQkJCQkJZG91YmxlIHltYXggPSBNYXRoLmxvZyhhZGp1c3RlZE1heCk7CisJCQkJCQkJCWlmKGFkanVzdGVkTWF4ID4gMS4wKSB7CisJCQkJCQkJCQl5bWF4ICs9IDAuNDk5OworCQkJCQkJCQkJbG9uZyBpbWF4ID0gTWF0aC5yb3VuZCh5bWF4KTsKKwkJCQkJCQkJCXltYXggPSBpbWF4OworCQkJCQkJCQl9CisJCQkJCQkJCXlBeGlzUHJpbWFyeS5nZXRTY2FsZSgpLnNldE1heChOdW1iZXJEYXRhRWxlbWVudEltcGwuY3JlYXRlKHltYXgpKTsKKwkJCQkJCQkJZG91YmxlIHN0ZXAgPSB5bWF4LzEwLjA7CisJCQkJCQkJCXlBeGlzUHJpbWFyeS5nZXRTY2FsZSgpLnNldFN0ZXAoc3RlcCk7CisJCQkJCQkJfQorCQkJCQkJCQorCQkJCQkJCQorCQkJCQkJfQorCQkJCQl9CisJCQkJfSAvLyBpcyB2aXNpYmxlCisJCQkJaW50ZWdyYXRlZERpZmZlcmVuY2VbaV0gLz0gZG91YmxlVmFsdWVzLmxlbmd0aDsKKwkJCQkJLy8gQW55IHZhbHVlcz8KKwkJCQkJaWYgKGRvdWJsZVZhbHVlcy5sZW5ndGggPiAwKSB7CisJCQkJCQlpZiAobWF4UG9pbnRzIDwgZG91YmxlVmFsdWVzLmxlbmd0aCkgeworCQkJCQkJCW1heFBvaW50cyA9IGRvdWJsZVZhbHVlcy5sZW5ndGg7CisJCQkJCQl9CisJCQkJCQkKKwkJCQkJCWZvciAoaW50IGN5Y2xlTnVtYmVyID0gMDsgY3ljbGVOdW1iZXIgPCBkb3VibGVWYWx1ZXMubGVuZ3RoOyBjeWNsZU51bWJlcisrKSB7CisJCQkJCQkJCisJCQkJCQkJRG91YmxlIHZhbHVlOworCQkJCQkJCWRvdWJsZSBkaXNwbGF5VmFsdWUgPSBkb3VibGVWYWx1ZXNbY3ljbGVOdW1iZXJdOworCQkJCQkJCWlmIChkaXNwbGF5VmFsdWUgPD0gbWluWXNjYWxlKSB7CisJCQkJCQkJCS8vIExvZygwLjApIGlzIG5lZ2F0aXZlIGluZmluaXR5IHNvIGZvciBkaXNwbGF5IHB1cnBvc2VzIG9ubHkKKwkJCQkJCQkJLy8gd2Ugc2V0IHRoZSBtaW5pbXVtIGF4aXMgdmFsdWUgYXQgMC4xL1BPUFVMQVRJT04KKwkJCQkJCQkJZGlzcGxheVZhbHVlID0gbWluWXNjYWxlOworCQkJCQkJCX0KKwkJCQkJCQlpZiAodXNlTGluZWFyVGltZVNjYWxlKSB7CisJCQkJCQkJCXZhbHVlID0gbmV3IERvdWJsZShkaXNwbGF5VmFsdWUpOworCQkJCQkJCX0gZWxzZSB7CisJCQkJCQkJCXZhbHVlID0gbmV3IERvdWJsZShNYXRoLmxvZyhkaXNwbGF5VmFsdWUpKTsKKwkJCQkJCQl9CisJCQkJCQkJCisKKwkJCQkJCQlzZXJpZXMuYWRkVmFsdWUodmFsdWUpOworCQkJCQkJCQorCQkJCQkJCS8vIG9ubHkgZG8gb25jZSBmb3IgZmlyc3QgbGluZSBzZXJpZXMKKwkJCQkJCQlpZiAoIXNldEN5Y2xlcykgeworCQkJCQkJCQljeWNsZU51bWJlcnMuYWRkKEludGVnZXIudmFsdWVPZihjeWNsZU51bWJlcikpOwkKKwkJCQkJCQkJfQorCQkJCQkJfSAvLyBmb3IgY3ljbGVOdW1iZXIKKwkJCQkJCQorCQkJCQkJaWYoeEF4aXNQcmltYXJ5LmdldFNlcmllc0RlZmluaXRpb25zKCkuZ2V0KDApLmdldFNlcmllcygpLnNpemUoKSAhPSBjeWNsZU51bWJlcnMuc2l6ZSgpKSB7CisJCQkJCQkJLy8gVGhlIG51bWJlciBvZiBkYXRhIHBvaW50cyBoYXZlIGNoYW5nZWQsIGNyZWF0ZSBhIG5ldyBzZXJpZXMgZm9yIHRoZSB4IGF4aXMKKwkJCQkJCQl4QXhpc1ByaW1hcnkuZ2V0U2VyaWVzRGVmaW5pdGlvbnMoKS5jbGVhcigpOworCQkJCQkJCWZpbmFsIFNlcmllcyB4QXhpc1NlcmllcyA9IFNlcmllc0ltcGwuY3JlYXRlKCk7CisKKwkJCQkJCQlmaW5hbCBOdW1iZXJEYXRhU2V0IHhWYWx1ZXMgPSBOdW1iZXJEYXRhU2V0SW1wbC5jcmVhdGUoY3ljbGVOdW1iZXJzKTsKKwkJCQkJCQl4QXhpc1Nlcmllcy5zZXREYXRhU2V0KHhWYWx1ZXMpOworCQkJCQkJCWZpbmFsIFNlcmllc0RlZmluaXRpb24gc2RYID0gU2VyaWVzRGVmaW5pdGlvbkltcGwuY3JlYXRlKCk7CisKKwkJCQkJCQl4QXhpc1ByaW1hcnkuZ2V0U2VyaWVzRGVmaW5pdGlvbnMoKS5hZGQoc2RYKTsKKwkJCQkJCQlzZFguZ2V0U2VyaWVzKCkuYWRkKHhBeGlzU2VyaWVzKTsKKwkJCQkJCX0KKwkJCQkJCQkKKwkJCQkJCQorCQkJCQkJc2V0Q3ljbGVzID0gdHJ1ZTsgLy8gd2Ugc2V0IHRoZW0gb25seSBvbmNlCisJCQkJCQkKKwkJCQkJfSBlbHNlIHsKKwkJCQkJCS8vcmVzZXREYXRhKCk7CisJCQkJCX0KKwkJCX0gLy8gZm9yIGkgcHJvcGVydGllcworCisKKwkJaWYgKCF0aGlzLmlzRGlzcG9zZWQoKSkgeworCQkJcmVkcmF3KCk7CisJCX0KKwkJCisJCWlmKHRoaXMuY2hhcnRJbmRleD09MSkgeworCQkJY29udHJvbC51cGRhdGVNZXNzYWdlKFNjZW5hcmlvQW5hbHlzaXNTdWl0ZS5SRUFEWV9NU0cpOworCQl9IGVsc2UgeworCQkJY29udHJvbC51cGRhdGVNZXNzYWdlKFNjZW5hcmlvQW5hbHlzaXNTdWl0ZS5XT1JLSU5HX01TRyk7CisJCX0KKwkJcmV0dXJuIGludGVncmF0ZWREaWZmZXJlbmNlOworCX0gLy8gcGFpbnRDb250cm9sCisKKwkvKioKKwkgKiBAcGFyYW0gZGF0YVNlcmllc01hcAorCSAqICAgICAgICAgICAgdGhlIHtAbGluayBMaXN0fSB0aGF0IHdpbGwgY29udGFpbiB0aGUgcmVsYXRpdmUgdmFsdWVzCisJICogICAgICAgICAgICAoMC4wLTEuMCkgdG8gcGxvdAorCSAqIEBwYXJhbSBjeWNsZU51bWJlcnMKKwkgKiAgICAgICAgICAgIHRoZSB7QGxpbmsgTGlzdH0gb2Ygc2ltdWxhdGlvbiBjeWNsZSBudW1iZXJzIHRoYXQgbWF0Y2ggdGhlCisJICogICAgICAgICAgICByZWxhdGl2ZSB2YWx1ZXMKKwkgKiBAcGFyYW0gc2VyaWVzSWRlbnRpZmllcgorCSAqICAgICAgICAgICAgdGhlIHRpdGxlIG9mIHRoZSBjaGFydAorCSAqIEByZXR1cm4gYSA8Y29kZT5DaGFydDwvY29kZT4KKwkgKi8KKwlwdWJsaWMgZmluYWwgQ2hhcnQgY3JlYXRlU2ltcGxlTGluZUNoYXJ0KAorCQkJZmluYWwgTWFwPFN0cmluZywgRGF0YVNlcmllcz4gZGF0YVNlcmllc01hcCwKKwkJCWZpbmFsIExpc3Q8SW50ZWdlcj4gY3ljbGVOdW1iZXJzLCBmaW5hbCBTdHJpbmcgc2VyaWVzSWRlbnRpZmllcikgeworCQkKKwkJZmluYWwgQ2hhcnRXaXRoQXhlcyByZXRWYWx1ZSA9IENoYXJ0V2l0aEF4ZXNJbXBsLmNyZWF0ZSgpOworCisJCQorCQkvLyBQbG90CisJCXJldFZhbHVlLmdldEJsb2NrKCkuc2V0QmFja2dyb3VuZChmcmFtZUNvbG9yKTsKKwkJZmluYWwgUGxvdCBwID0gcmV0VmFsdWUuZ2V0UGxvdCgpOworCQlwLmdldENsaWVudEFyZWEoKS5zZXRCYWNrZ3JvdW5kKGJhY2tncm91bmRHcm91bmQpOworCisJCS8vIFRpdGxlCisJCS8vIGN3YUxpbmUuZ2V0VGl0bGUoICkuZ2V0TGFiZWwoICkuZ2V0Q2FwdGlvbiggKS5zZXRWYWx1ZSggIkxpbmUgQ2hhcnQiCisJCS8vICk7Ly8kTk9OLU5MUy0xJAorCQlyZXRWYWx1ZS5nZXRUaXRsZSgpLnNldFZpc2libGUoZmFsc2UpOworCisJCS8vIExlZ2VuZAorCQlsZWdlbmQgPSByZXRWYWx1ZS5nZXRMZWdlbmQoKTsKKwkJZmluYWwgTGluZUF0dHJpYnV0ZXMgbGlhID0gbGVnZW5kLmdldE91dGxpbmUoKTsKKwkJbGVnZW5kLmdldFRleHQoKS5nZXRGb250KCkuc2V0U2l6ZSg4KTsKKwkJbGlhLnNldFN0eWxlKExpbmVTdHlsZS5TT0xJRF9MSVRFUkFMKTsKKwkJbGVnZW5kLmdldEluc2V0cygpLnNldCgxMCwgNSwgMCwgMCk7CisJCWxlZ2VuZC5nZXRPdXRsaW5lKCkuc2V0VmlzaWJsZShmYWxzZSk7CisJCWxlZ2VuZC5zZXRBbmNob3IoQW5jaG9yLk5PUlRIX0xJVEVSQUwpOworCQlsZWdlbmQuc2V0UG9zaXRpb24oUG9zaXRpb24uQkVMT1dfTElURVJBTCk7CisJCWxlZ2VuZC5nZXRUZXh0KCkuc2V0Q29sb3IoZm9yZUdyb3VuZCk7CisJCWxlZ2VuZC5nZXRPdXRsaW5lKCkuc2V0Q29sb3IoZm9yZUdyb3VuZCk7CisJCQorCQkvLyBjd2FMaW5lLmdldExlZ2VuZCggKS5nZXRUZXh0KCkuZ2V0Rm9udCgpLnNldFNpemUoMTYpOzsKKwkJLy8gY3dhTGluZS5nZXRMZWdlbmQoICkuc2V0VmlzaWJsZSggdHJ1ZSApOworCisJCS8vIC8vLy8vLy8vLworCQkvLyBYLUF4aXMKKwkJeEF4aXNQcmltYXJ5ID0gcmV0VmFsdWUuZ2V0UHJpbWFyeUJhc2VBeGVzKClbMF07CisJCXhBeGlzUHJpbWFyeS5zZXRUeXBlKEF4aXNUeXBlLlRFWFRfTElURVJBTCk7CisJCXhBeGlzUHJpbWFyeS5nZXRNYWpvckdyaWQoKS5zZXRUaWNrU3R5bGUoVGlja1N0eWxlLkJFTE9XX0xJVEVSQUwpOworCQl4QXhpc1ByaW1hcnkuZ2V0T3JpZ2luKCkuc2V0VHlwZShJbnRlcnNlY3Rpb25UeXBlLlZBTFVFX0xJVEVSQUwpOworCQl4QXhpc1ByaW1hcnkuZ2V0VGl0bGUoKS5zZXRWaXNpYmxlKGZhbHNlKTsKKwkJeEF4aXNQcmltYXJ5LmdldFRpdGxlKCkuZ2V0Q2FwdGlvbigpLmdldEZvbnQoKS5zZXRTaXplKDkpOworCQl4QXhpc1ByaW1hcnkuZ2V0VGl0bGUoKS5nZXRDYXB0aW9uKCkuc2V0Q29sb3IoZm9yZUdyb3VuZCk7CisJCXhBeGlzUHJpbWFyeS5nZXRMYWJlbCgpLmdldENhcHRpb24oKS5zZXRDb2xvcihmb3JlR3JvdW5kKTsKKworCQlmaW5hbCBTZXJpZXMgeEF4aXNTZXJpZXMgPSBTZXJpZXNJbXBsLmNyZWF0ZSgpOworCisJCS8vIG5ldyBjb2xvcnMKKwkJeEF4aXNTZXJpZXMuZ2V0TGFiZWwoKS5nZXRDYXB0aW9uKCkuc2V0Q29sb3IoZm9yZUdyb3VuZCk7CisJCXhBeGlzU2VyaWVzLmdldExhYmVsKCkuZ2V0T3V0bGluZSgpLnNldENvbG9yKGZvcmVHcm91bmQpOworCQkvLwkKKworCQlmaW5hbCBOdW1iZXJEYXRhU2V0IHhWYWx1ZXMgPSBOdW1iZXJEYXRhU2V0SW1wbC5jcmVhdGUoY3ljbGVOdW1iZXJzKTsKKwkJeEF4aXNTZXJpZXMuc2V0RGF0YVNldCh4VmFsdWVzKTsKKwkJZmluYWwgU2VyaWVzRGVmaW5pdGlvbiBzZFggPSBTZXJpZXNEZWZpbml0aW9uSW1wbC5jcmVhdGUoKTsKKworCQl4QXhpc1ByaW1hcnkuZ2V0U2VyaWVzRGVmaW5pdGlvbnMoKS5hZGQoc2RYKTsKKwkJc2RYLmdldFNlcmllcygpLmFkZCh4QXhpc1Nlcmllcyk7CisKKwkJLy8gLy8vLy8vLy8KKwkJLy8gWS1BeGlzCisJCXlBeGlzUHJpbWFyeSA9IHJldFZhbHVlLmdldFByaW1hcnlPcnRob2dvbmFsQXhpcyh4QXhpc1ByaW1hcnkpOworCQl5QXhpc1ByaW1hcnkuZ2V0TWFqb3JHcmlkKCkuc2V0VGlja1N0eWxlKFRpY2tTdHlsZS5MRUZUX0xJVEVSQUwpOworCisJCS8vIE51bWJlckRhdGFTZXRbXSBvcnRob1ZhbHVlcyA9IG5ldyBOdW1iZXJEYXRhU2V0W01BWF9MSU5FU107CisJCS8vIFNlcmllc0RlZmluaXRpb25bXSBzZFkgPSBuZXcgU2VyaWVzRGVmaW5pdGlvbltNQVhfTElORVNdOworCisJCS8vIGVuZCBZLVNlcmllcworCisJCXhBeGlzUHJpbWFyeS5nZXRTY2FsZSgpLnNldE1pbihOdW1iZXJEYXRhRWxlbWVudEltcGwuY3JlYXRlKDAuMCkpOworCQkvLyB4QXhpc1ByaW1hcnkuZ2V0U2NhbGUoICkuc2V0TWF4KCBOdW1iZXJEYXRhRWxlbWVudEltcGwuY3JlYXRlKCAxMC4wICkKKwkJLy8gKTsKKwkJLy8geEF4aXNQcmltYXJ5LmdldFNjYWxlKCApLnNldFN0ZXAoIDEgKTsKKwkJeEF4aXNQcmltYXJ5LmdldExhYmVsKCkuZ2V0Q2FwdGlvbigpLmdldEZvbnQoKS5zZXRTaXplKDkpOworCQl4QXhpc1ByaW1hcnkuZ2V0TGFiZWwoKS5nZXRDYXB0aW9uKCkuc2V0Q29sb3IoZm9yZUdyb3VuZCk7CisJCXhBeGlzUHJpbWFyeS5nZXRUaXRsZSgpLnNldFZpc2libGUodHJ1ZSk7CisJCXhBeGlzUHJpbWFyeS5nZXRUaXRsZSgpLmdldENhcHRpb24oKS5zZXRWYWx1ZShNZXNzYWdlcy5nZXRTdHJpbmcoIlRTLlRJTUVMQUJFTCIpKTsKKworCQl5QXhpc1ByaW1hcnkuZ2V0U2NhbGUoKS5zZXRNaW4oTnVtYmVyRGF0YUVsZW1lbnRJbXBsLmNyZWF0ZSgwLjApKTsKKwkJeUF4aXNQcmltYXJ5LmdldFNjYWxlKCkuc2V0TWF4KE51bWJlckRhdGFFbGVtZW50SW1wbC5jcmVhdGUoMS4wKSk7CisJCXlBeGlzUHJpbWFyeS5nZXRTY2FsZSgpLnNldFN0ZXAoMC4yNSk7CisJCXlBeGlzUHJpbWFyeS5nZXRMYWJlbCgpLmdldENhcHRpb24oKS5nZXRGb250KCkuc2V0U2l6ZSg5KTsKKwkJeUF4aXNQcmltYXJ5LmdldExhYmVsKCkuZ2V0Q2FwdGlvbigpLnNldENvbG9yKGZvcmVHcm91bmQpOworCQl5QXhpc1ByaW1hcnkuZ2V0VGl0bGUoICkuZ2V0Q2FwdGlvbiggKS5zZXRWYWx1ZSggT3JkaW5hdGVfQVhJUyApOworCQl5QXhpc1ByaW1hcnkuZ2V0VGl0bGUoICkuc2V0VmlzaWJsZSh0cnVlKTsKKwkJLy8geUF4aXNQcmltYXJ5LmdldE1ham9yR3JpZCgpLmdldExpbmVBdHRyaWJ1dGVzKCkuc2V0Q29sb3IoZm9yZUdyb3VuZCk7CisJCQorCQkvLyBmb3Igbm93IGdldCByZWFkeSB0byBjcmVhdGUgb25seSBvbmUgbGluZSAtIHdlIGhhdmUgbm8gZGF0YSB5ZXQuCisJCS8vIHdlIHdpbGwgYWRkIG1vcmUgbGluZXMgYXMgd2UgbmVlZCB0aGVtCisJCS8vIGhhbmRsZSBudWxsCisJCWlmKCFkYXRhU2VyaWVzTWFwLmNvbnRhaW5zS2V5KGRlZmF1bHRLZXkpKSB7CisJCQlEYXRhU2VyaWVzIHNlcmllcyA9IG5ldyBEYXRhU2VyaWVzKGRlZmF1bHRLZXksIHNlcmllc0NvdW50LCBvdmVybGF5TW9kZSk7CisJCQlzZXJpZXNDb3VudCArKzsKKwkJCWRhdGFTZXJpZXNNYXAucHV0KGRlZmF1bHRLZXksIHNlcmllcyk7CisJCX0KKworCQlyZXR1cm4gcmV0VmFsdWU7CisJfSAvLyBjcmVhdGVTaW1wbGVMaW5lQ2hhcnQKKworCQorCS8qKgorCSAqIENyZWF0ZSB0aGUgdmlldydzIGNvbnRleHQgbWVudSBhbmQgYWRkIHRoZSBhY3Rpb24gaGFuZGxlcnMgdG8gaXQuCisJICovCisJcHJvdGVjdGVkIHZvaWQgY3JlYXRlQ29udGV4dE1lbnUoZmluYWwgQ29tcG9zaXRlIHBhcmVudCkgeworCisJCS8vIEluaXQgYSBDb250ZXh0IE1lbnUgTWFuYWdlcgorCQlmaW5hbCBNZW51TWFuYWdlciBjb250ZXh0TWVudU1hbmFnZXIgPSBuZXcgTWVudU1hbmFnZXIoKTsKKworCQkvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworCQlsaW5lYXJUaW1lQWN0aW9uID0gbmV3IExpbmVhclNjYWxlQWN0aW9uKCk7CisJCWxvZ1RpbWVBY3Rpb24gPSBuZXcgTG9nU2NhbGVBY3Rpb24oKTsKKwkJY29udGV4dE1lbnVNYW5hZ2VyLmFkZChsaW5lYXJUaW1lQWN0aW9uKTsKKwkJY29udGV4dE1lbnVNYW5hZ2VyLmFkZChsb2dUaW1lQWN0aW9uKTsKKworCisJCQorCQkvLyBQbGFjZSBIb2xkZXIgZm9yIE1lbnUgQWRkaXRpb25zCisJCWNvbnRleHRNZW51TWFuYWdlci5hZGQobmV3IFNlcGFyYXRvcigKKwkJCQlJV29ya2JlbmNoQWN0aW9uQ29uc3RhbnRzLk1CX0FERElUSU9OUykpOworCisJCS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCQkKKwkJdmlld0xlZ2VuZCA9IG5ldyBMZWdlbmRWaWV3QWN0aW9uKCk7CisJCWhpZGVMZWdlbmQgPSBuZXcgTGVnZW5kSGlkZUFjdGlvbigpOworCQljb250ZXh0TWVudU1hbmFnZXIuYWRkKHZpZXdMZWdlbmQpOworCQljb250ZXh0TWVudU1hbmFnZXIuYWRkKGhpZGVMZWdlbmQpOworCQkKKwkJLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJCQorCQkKKwkJLy8gUGxhY2UgSG9sZGVyIGZvciBNZW51IEFkZGl0aW9ucworCQljb250ZXh0TWVudU1hbmFnZXIuYWRkKG5ldyBTZXBhcmF0b3IoCisJCQkJSVdvcmtiZW5jaEFjdGlvbkNvbnN0YW50cy5NQl9BRERJVElPTlMpKTsKKworCQlwb3BVcE1lbnUgPSBjb250ZXh0TWVudU1hbmFnZXIuY3JlYXRlQ29udGV4dE1lbnUocGFyZW50KTsKKworCQkvLyBTZXQgdGhlIGNvbnRleHQgbWVudSBmb3IgdGhlIHZpZXdlcgorCQlwYXJlbnQuc2V0TWVudShwb3BVcE1lbnUpOworCisJfSAvLyBjcmVhdGVDb250ZXh0TWVudQorCQorCS8qKgorCSAqIFVwZGF0ZSB0aGUgdmlldydzIGNvbnRleHQgbWVudSBhbmQgYWRkIHRoZSBhY3Rpb24gaGFuZGxlcnMgdG8gaXQuCisJICovCisJcHJpdmF0ZSB2b2lkIHVwZGF0ZUNvbnRleHRNZW51KGZpbmFsIENvbXBvc2l0ZSBwYXJlbnQpIHsKKworCQlwb3BVcE1lbnUuZGlzcG9zZSgpOworCisJCS8vIEluaXQgYSBDb250ZXh0IE1lbnUgTWFuYWdlcgorCQlmaW5hbCBNZW51TWFuYWdlciBjb250ZXh0TWVudU1hbmFnZXIgPSBuZXcgTWVudU1hbmFnZXIoKTsKKworCQkvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworCQlsaW5lYXJUaW1lQWN0aW9uID0gbmV3IExpbmVhclNjYWxlQWN0aW9uKCk7CisJCWxvZ1RpbWVBY3Rpb24gPSBuZXcgTG9nU2NhbGVBY3Rpb24oKTsKKwkJY29udGV4dE1lbnVNYW5hZ2VyLmFkZChsaW5lYXJUaW1lQWN0aW9uKTsKKwkJY29udGV4dE1lbnVNYW5hZ2VyLmFkZChsb2dUaW1lQWN0aW9uKTsKKwkJCisJCS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisKKwkJLy8gUGxhY2UgSG9sZGVyIGZvciBNZW51IEFkZGl0aW9ucworCQljb250ZXh0TWVudU1hbmFnZXIuYWRkKG5ldyBTZXBhcmF0b3IoCisJCQkJSVdvcmtiZW5jaEFjdGlvbkNvbnN0YW50cy5NQl9BRERJVElPTlMpKTsKKworCQkvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwkJCisJCXZpZXdMZWdlbmQgPSBuZXcgTGVnZW5kVmlld0FjdGlvbigpOworCQloaWRlTGVnZW5kID0gbmV3IExlZ2VuZEhpZGVBY3Rpb24oKTsKKwkJY29udGV4dE1lbnVNYW5hZ2VyLmFkZCh2aWV3TGVnZW5kKTsKKwkJY29udGV4dE1lbnVNYW5hZ2VyLmFkZChoaWRlTGVnZW5kKTsKKwkJCisJCS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCQkKKwkJCisJCS8vIFBsYWNlIEhvbGRlciBmb3IgTWVudSBBZGRpdGlvbnMKKwkJY29udGV4dE1lbnVNYW5hZ2VyLmFkZChuZXcgU2VwYXJhdG9yKAorCQkJCUlXb3JrYmVuY2hBY3Rpb25Db25zdGFudHMuTUJfQURESVRJT05TKSk7CisKKwkJCisJCS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCQkvLyBhZGQgdGhlIGRpc3BsYXlhYmxlIHByb3BlcnRpZXMKKwkJZm9yIChpbnQgaSA9IDA7IGkgPCBjb250cm9sLmdldE51bVByb3BlcnRpZXMoY2hhcnRJbmRleCk7IGkgKyspIHsKKwkJCQorCQkJU3RyaW5nIG5leHRQcm9wID0gY29udHJvbC5nZXRQcm9wZXJ0eShjaGFydEluZGV4LGkpOworCQkJRGF0YVNlcmllcyBzZXJpZXMgPSBkYXRhU2VyaWVzTWFwLmdldChuZXh0UHJvcCk7CisJCQlEaXNwbGF5YWJsZVByb3BlcnR5IHByb3BlcnR5ID0gbmV3IERpc3BsYXlhYmxlUHJvcGVydHkobmV4dFByb3AsIHNlcmllcy5pc1Zpc2libGUoKSk7CisJCQljb250ZXh0TWVudU1hbmFnZXIuYWRkKHByb3BlcnR5KTsKKwkJfQorCisJCS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisJCS8vIFBsYWNlIEhvbGRlciBmb3IgTWVudSBBZGRpdGlvbnMKKwkJY29udGV4dE1lbnVNYW5hZ2VyLmFkZChuZXcgU2VwYXJhdG9yKAorCQkJCUlXb3JrYmVuY2hBY3Rpb25Db25zdGFudHMuTUJfQURESVRJT05TKSk7CisKKwkJLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKwkJZmluYWwgTWVudSBwb3BVcE1lbnUgPSBjb250ZXh0TWVudU1hbmFnZXIuY3JlYXRlQ29udGV4dE1lbnUocGFyZW50KTsKKworCQkvLyBTZXQgdGhlIGNvbnRleHQgbWVudSBmb3IgdGhlIHZpZXdlcgorCQlwYXJlbnQuc2V0TWVudShwb3BVcE1lbnUpOworCisKKwl9IC8vIHVwZGF0ZUNvbnRleHRNZW51CisKKworCQorCS8qKgorCSAqIFNldHMgdGhlIGNvbG9ycyBmb3IgYSBuIGFycmF5IG9mIExpbmVTZXJpZXMgZ2l2ZW4gdGhlIHByb3BlcnR5IHRvIFBsb3QKKwkgKiBmb3IgZWFjaC4gVHJ5IHRvIHNldCBjb2xvciBmcm9tIHRoZSBwcmVmZXJlbmNlcyAoaWYgc3BlY2lmaWVkIGZvciB0aGF0CisJICogcHJvcGVydHkpIG90aGVyd2lzZSBzZXRzIGxpbmUgY29sb3IgdG8gYmx1ZS4KKwkgKiAKKwkgKiBAcGFyYW0gcHJvcGVydGllc1RvUGxvdAorCSAqIEBwYXJhbSBsc0xpc3QKKwkgKi8KKwlwdWJsaWMgc3RhdGljIHZvaWQgc2V0Q29sb3JEZWZzKAorCQkJZmluYWwgTGlzdDxTdHJpbmc+IHByb3BlcnRpZXNUb1Bsb3QsCisJCQlmaW5hbCBMaXN0PExpbmVTZXJpZXM+IGxzTGlzdCkgeworCQkvLyB0aGUgZGVmYXVsdCBsaW5lIGNvbG9yCisKKwkJLy8gaWYgcG9zc2libGUgZ2V0IGNvbG9yIGZyb20gcHJlZmVyZW5jZXMKKwkJZmluYWwgTWFwPFN0cmluZywgQ29sb3I+IGNvbG9yTWFwID0gVmlzdWFsaXphdGlvblByZWZlcmVuY2VQYWdlCisJCQkJLmdldENvbG9yTWFwcGluZygpOworCQlmb3IgKGludCBpID0gMDsgaSA8IGxzTGlzdC5zaXplKCk7IGkrKykgeworCQkJQ29sb3JEZWZpbml0aW9uIGNvbG9yID0gQ29sb3JEZWZpbml0aW9uSW1wbC5CTFVFKCk7CisKKwkJCWlmICgocHJvcGVydGllc1RvUGxvdCAhPSBudWxsKSAmJiAocHJvcGVydGllc1RvUGxvdC5zaXplKCkgPiBpKSkgeworCQkJCWZpbmFsIFN0cmluZyBwcm9wZXJ0eU5hbWUgPSBwcm9wZXJ0aWVzVG9QbG90LmdldChpKTsKKwkJCQkKKwkJCQkvLyBDaGVjayBmb3IgYSBwcmVmaXggbWF0Y2gKKwkJCQlmb3IgKFN0cmluZyBrZXkgOiBjb2xvck1hcC5rZXlTZXQoKSkgeworCQkJCQkKKwkJCQkJaWYoKHByb3BlcnR5TmFtZS5zdGFydHNXaXRoKGtleSkpJiYoa2V5Lmxlbmd0aCgpPj0xKSkgeworCQkJCQkJLy8gbWlnaHQgYmUgcmlnaHQKKwkJCQkJCVN0cmluZyB0YWlsID0gcHJvcGVydHlOYW1lLnN1YnN0cmluZyhrZXkubGVuZ3RoKCksIHByb3BlcnR5TmFtZS5sZW5ndGgoKSk7CisJCQkJCQlpZigodGFpbD09bnVsbCl8fCh0YWlsLmxlbmd0aCgpPT0wKSkgeworCQkJCQkJCWZpbmFsIENvbG9yIGMgPSBjb2xvck1hcC5nZXQoa2V5KTsKKwkJCQkJCQljb2xvciA9IENvbG9yRGVmaW5pdGlvbkltcGwuY3JlYXRlKGMuZ2V0UmVkKCksIGMuZ2V0R3JlZW4oKSwgYy5nZXRCbHVlKCkpOworCQkJCQkJCWJyZWFrOworCQkJCQkJfQorCQkJCQkJCisJCQkJCQlib29sZWFuIGhpdCA9IHRydWU7CisJCQkJCQlmb3IgKGNoYXIgYyA6IHRhaWwudG9DaGFyQXJyYXkoKSkgeworCQkJCQkJCWlmICghQ2hhcmFjdGVyLmlzRGlnaXQoYykpIHsKKwkJCQkJCQkJaGl0ID0gZmFsc2U7CisJCQkJCQkJCWJyZWFrOworCQkJCQkJCX0KKwkJCQkJCX0vLyBhbGwgY2hhcmFjdGVycyBpbiB0YWlsCisJCQkJCQlpZihoaXQpeworCQkJCQkJCWZpbmFsIENvbG9yIGMgPSBjb2xvck1hcC5nZXQoa2V5KTsKKwkJCQkJCQljb2xvciA9IENvbG9yRGVmaW5pdGlvbkltcGwuY3JlYXRlKGMuZ2V0UmVkKCksIGMuZ2V0R3JlZW4oKSwgYy5nZXRCbHVlKCkpOworCQkJCQkJCWJyZWFrOworCQkJCQkJfQorCQkJCQl9CisJCQkJfQorCQkJCQorLy8JCQkJaWYgKGNvbG9yTWFwLmNvbnRhaW5zS2V5KHByb3BlcnR5TmFtZSkpIHsKKy8vCQkJCQlmaW5hbCBDb2xvciBjID0gY29sb3JNYXAuZ2V0KHByb3BlcnR5TmFtZSk7CisvLwkJCQkJY29sb3IgPSBDb2xvckRlZmluaXRpb25JbXBsLmNyZWF0ZShjLmdldFJlZCgpLCBjLmdldEdyZWVuKCksIGMuZ2V0Qmx1ZSgpKTsKKy8vCQkJCX0KKwkJCQkKKwkJCQkKKwkJCQkKKwkJCQlsc0xpc3QuZ2V0KGkpLnNldFNlcmllc0lkZW50aWZpZXIocHJvcGVydHlOYW1lKTsKKwkJCQlsc0xpc3QuZ2V0KGkpLmdldExpbmVBdHRyaWJ1dGVzKCkuc2V0Q29sb3IoY29sb3IpOworCQkJfSBlbHNlIHsKKworCQkJCWlmIChsc0xpc3QuZ2V0KGkpICE9IG51bGwpIHsKKwkJCQkJbHNMaXN0LmdldChpKS5zZXRTZXJpZXNJZGVudGlmaWVyKCIgIik7CisJCQkJCWxzTGlzdC5nZXQoaSkuZ2V0TGluZUF0dHJpYnV0ZXMoKS5zZXRDb2xvcihjb2xvcik7CisJCQkJfQorCQkJfQorCQl9CisJCXJldHVybjsKKwl9Ly8gZ2V0Q29sb3JEZWYKKworCisJCisKKwkvKioKKwkgKiBEaXNwb3NlcyB0aGUgQ29sb3Igb2JqZWN0cworCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGRpc3Bvc2UoKSB7CisJCXN1cGVyLmRpc3Bvc2UoKTsKKwl9CisKKwkvKioKKwkgKiByZXNldAorCSAqLworCXB1YmxpYyB2b2lkIHJlc2V0KCkgeworCQlyZXNldERhdGEoKTsKKwkJcmVkcmF3KCk7CisJfQorCisJcHJvdGVjdGVkIHZvaWQgcmVzZXREYXRhKCkgeworCQljbGVhckRhdGEoKTsKKwkJc2VyaWVzQ291bnQgPSAwOyAvLyBhbHdheXMgc3RhcnQgd2l0aCB0aGUgc2FtZSBmaXJzdCBjb2xvcgorCQljeWNsZU51bWJlcnMuYWRkKEludGVnZXIudmFsdWVPZigwKSk7CisJfQorCisJcHJpdmF0ZSB2b2lkIGNsZWFyRGF0YSgpIHsKKwkJCisJCWRhdGFTZXJpZXNNYXAuY2xlYXIoKTsKKwkJY3ljbGVOdW1iZXJzLmNsZWFyKCk7CisJfQorCisJCisJLyoqCisJICogdG9nZ2xlIHRoZSBzY2FsZSBmcm9tIGxvZ2FyaXRobWljIHRvIGxpbmVhcgorCSAqLworCXZvaWQgdG9nZ2xlQXhpc1NjYWxlKCkgeworCQlpZiAodXNlTGluZWFyVGltZVNjYWxlKSB7IC8vU3dpdGNoIHRvIGxvZ2FyaXRobWljIHNjYWxlCisJCQlsb2dUaW1lQWN0aW9uLnNldENoZWNrZWQodHJ1ZSk7CisJCQlsaW5lYXJUaW1lQWN0aW9uLnNldENoZWNrZWQoZmFsc2UpOworCQkJLy9KdXN0IHVzaW5nIHRoZSBmb2xsb3dpbmcgYXhpcyB0eXBlLCB0byBtb3ZlIHRvIGxvZyBzY2FsZSwgZGlkbid0IHdvcmsKKwkJCS8veUF4aXNQcmltYXJ5LnNldFR5cGUoQXhpc1R5cGUuTE9HQVJJVEhNSUNfTElURVJBTCk7CisJCQl5QXhpc1ByaW1hcnkuZ2V0U2NhbGUoKS5zZXRNaW4obnVsbCk7CisJCQl5QXhpc1ByaW1hcnkuZ2V0U2NhbGUoKS5zZXRNYXgobnVsbCk7CisJCQl5QXhpc1ByaW1hcnkuZ2V0U2NhbGUoKS51bnNldFN0ZXAoKTsKKwkJCXlBeGlzUHJpbWFyeS5nZXRTY2FsZSgpLnVuc2V0U3RlcE51bWJlcigpOworCQl9CisJCWVsc2UgeyAvL1N3aXRjaCB0byBsaW5lYXIgc2NhbGUKKwkJCWxvZ1RpbWVBY3Rpb24uc2V0Q2hlY2tlZChmYWxzZSk7CisJCQlsaW5lYXJUaW1lQWN0aW9uLnNldENoZWNrZWQodHJ1ZSk7CisJCQkvL3lBeGlzUHJpbWFyeS5zZXRUeXBlKEF4aXNUeXBlLkxJTkVBUl9MSVRFUkFMKTsKKwkJCXlBeGlzUHJpbWFyeS5nZXRTY2FsZSgpLnNldE1pbihOdW1iZXJEYXRhRWxlbWVudEltcGwuY3JlYXRlKDAuMCkpOworCQkJeUF4aXNQcmltYXJ5LmdldFNjYWxlKCkuc2V0TWF4KE51bWJlckRhdGFFbGVtZW50SW1wbC5jcmVhdGUoMS4wKSk7CisJCQl5QXhpc1ByaW1hcnkuZ2V0U2NhbGUoKS5zZXRTdGVwKDAuMjUpOworCQl9CisJCXVzZUxpbmVhclRpbWVTY2FsZSA9ICF1c2VMaW5lYXJUaW1lU2NhbGU7CisJCWRyYXcoKTsKKwl9CisJCisKKwkvKioKKwkgKiB0b2dnbGUgdGhlIHNjYWxlIGZyb20gbG9nYXJpdGhtaWMgdG8gbGluZWFyCisJICovCisJdm9pZCB0b2dnbGVMZWdlbmQoKSB7CisJCWlmIChzaG93TGVnZW5kKSB7IC8vU3dpdGNoIHRvIGhpZGUKKwkJCXZpZXdMZWdlbmQuc2V0Q2hlY2tlZChmYWxzZSk7CisJCQloaWRlTGVnZW5kLnNldENoZWNrZWQodHJ1ZSk7CisJCQlsZWdlbmQuc2V0VmlzaWJsZShmYWxzZSk7CisJCX0KKwkJZWxzZSB7IC8vU3dpdGNoIHRvIHZpZXcKKwkJCXZpZXdMZWdlbmQuc2V0Q2hlY2tlZCh0cnVlKTsKKwkJCWhpZGVMZWdlbmQuc2V0Q2hlY2tlZChmYWxzZSk7CisJCQlsZWdlbmQuc2V0VmlzaWJsZSh0cnVlKTsKKwkJfQorCQlzaG93TGVnZW5kID0gIXNob3dMZWdlbmQ7CisJCWRyYXcoKTsKKwl9CisKKworCS8qKgorCSAqIEFjdGlvbiB0byBzaG93IHRoZSBsZWdlbmQKKwkgKi8KKwlwcm90ZWN0ZWQgY2xhc3MgTGVnZW5kVmlld0FjdGlvbiBleHRlbmRzIEFjdGlvbiB7CisJCXB1YmxpYyBMZWdlbmRWaWV3QWN0aW9uKCkKKwkJeworCQkJc3VwZXIoTWVzc2FnZXMuZ2V0U3RyaW5nKCJDb250ZXh0TWVudS5TaG93TGVnZW5kIiksIElBY3Rpb24uQVNfQ0hFQ0tfQk9YKTsKKwkJCXNldENoZWNrZWQoc2hvd0xlZ2VuZCk7CisJCX0KKworCQkvKioKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uQWN0aW9uI2dldFRleHQoKQorCQkgKi8KKwkJQE92ZXJyaWRlCisJCXB1YmxpYyBTdHJpbmcgZ2V0VGV4dCgpIHsKKwkJCXJldHVybiBNZXNzYWdlcy5nZXRTdHJpbmcoIkNvbnRleHRNZW51LlNob3dMZWdlbmQiKTsKKwkJfQorCisJCS8qKgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5BY3Rpb24jcnVuKCkKKwkJICovCisJCUBPdmVycmlkZQorCQlwdWJsaWMgdm9pZCBydW4oKSB7CisJCQlpZiAoc2hvd0xlZ2VuZCkgeworCQkJCXNldENoZWNrZWQodHJ1ZSk7CisJCQkJLy9Ob3RoaW5nIHRvIGRvLiBJdCdzIGFscmVhZHkgbGluZWFyLXRpbWUuCisJCQl9CisJCQllbHNlIHsKKwkJCQl0b2dnbGVMZWdlbmQoKTsKKwkJCX0KKwkJCWRyYXcoKTsKKwkJfQorCX0gLy9MZWdlbmRWaWV3QWN0aW9uCisJCisJLyoqCisJICogQWN0aW9uIHRvIGhpZGUgdGhlIGxlZ2VuZAorCSAqLworCWNsYXNzIExlZ2VuZEhpZGVBY3Rpb24gZXh0ZW5kcyBBY3Rpb24gCXsKKwkJcHVibGljIExlZ2VuZEhpZGVBY3Rpb24oKQorCQl7CisJCQlzdXBlcihNZXNzYWdlcy5nZXRTdHJpbmcoIkNvbnRleHRNZW51LkhpZGVMZWdlbmQiKSwgSUFjdGlvbi5BU19DSEVDS19CT1gpOworCQkJc2V0Q2hlY2tlZCghc2hvd0xlZ2VuZCk7CisJCX0KKworCQkvKioKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uQWN0aW9uI2dldFRleHQoKQorCQkgKi8KKwkJQE92ZXJyaWRlCisJCXB1YmxpYyBTdHJpbmcgZ2V0VGV4dCgpIHsKKwkJCXJldHVybiBNZXNzYWdlcy5nZXRTdHJpbmcoIkNvbnRleHRNZW51LkhpZGVMZWdlbmQiKTsKKwkJfQorCisJCS8qKgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5BY3Rpb24jcnVuKCkKKwkJICovCisJCUBPdmVycmlkZQorCQlwdWJsaWMgdm9pZCBydW4oKSB7CisJCQlpZiAoIXNob3dMZWdlbmQpIHsKKwkJCQlzZXRDaGVja2VkKHRydWUpOworCQkJCS8vTm90aGluZyB0byBkby4gSXQncyBhbHJlYWR5IGxvZy10aW1lLgorCQkJfQorCQkJZWxzZSB7CisJCQkJdG9nZ2xlTGVnZW5kKCk7CisJCQl9CisJCQlkcmF3KCk7CisJCX0KKwl9Ly9MZWdlbmRIaWRlQWN0aW9uCisKKwkKKwkvKioKKwkgKiBzd2l0Y2ggdG8gbGluZWFyIHBsb3QgCisJICogCisJICovCisJcHJvdGVjdGVkIGNsYXNzIExpbmVhclNjYWxlQWN0aW9uIGV4dGVuZHMgQWN0aW9uIHsKKwkJcHVibGljIExpbmVhclNjYWxlQWN0aW9uKCkKKwkJeworCQkJc3VwZXIoTWVzc2FnZXMuZ2V0U3RyaW5nKCJDb250ZXh0TWVudS5MaW5lYXJUaW1lU2NhbGUiKSwgSUFjdGlvbi5BU19DSEVDS19CT1gpOworCQkJc2V0Q2hlY2tlZCh1c2VMaW5lYXJUaW1lU2NhbGUpOworCQl9CisKKwkJLyoqCisJCSAqIEBzZWUgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLkFjdGlvbiNnZXRUZXh0KCkKKwkJICovCisJCUBPdmVycmlkZQorCQlwdWJsaWMgU3RyaW5nIGdldFRleHQoKSB7CisJCQlyZXR1cm4gTWVzc2FnZXMuZ2V0U3RyaW5nKCJDb250ZXh0TWVudS5MaW5lYXJUaW1lU2NhbGUiKTsKKwkJfQorCisJCS8qKgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5BY3Rpb24jcnVuKCkKKwkJICovCisJCUBPdmVycmlkZQorCQlwdWJsaWMgdm9pZCBydW4oKSB7CisJCQlpZiAodXNlTGluZWFyVGltZVNjYWxlKSB7CisJCQkJc2V0Q2hlY2tlZCh0cnVlKTsKKwkJCQkvL05vdGhpbmcgdG8gZG8uIEl0J3MgYWxyZWFkeSBsaW5lYXItdGltZS4KKwkJCX0KKwkJCWVsc2UgeworCQkJCXRvZ2dsZUF4aXNTY2FsZSgpOworCQkJfQorCQkJZHJhdygpOworCQl9CisJfSAvL0xpbmVhclNjYWxlQWN0aW9uCisKKwkvKioKKwkgKiBzd2l0Y2ggdG8gc2VtaS1sb2cgcGxvdCAobG9nIHNjYWxlIG9uIHkgYXhpcykKKwkgKiAKKwkgKi8KKwljbGFzcyBMb2dTY2FsZUFjdGlvbiBleHRlbmRzIEFjdGlvbiAJeworCQlwdWJsaWMgTG9nU2NhbGVBY3Rpb24oKQorCQl7CisJCQlzdXBlcihNZXNzYWdlcy5nZXRTdHJpbmcoIkNvbnRleHRNZW51LkxvZ1RpbWVTY2FsZSIpLCBJQWN0aW9uLkFTX0NIRUNLX0JPWCk7CisJCQlzZXRDaGVja2VkKCF1c2VMaW5lYXJUaW1lU2NhbGUpOworCQl9CisKKwkJLyoqCisJCSAqIEBzZWUgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLkFjdGlvbiNnZXRUZXh0KCkKKwkJICovCisJCUBPdmVycmlkZQorCQlwdWJsaWMgU3RyaW5nIGdldFRleHQoKSB7CisJCQlyZXR1cm4gTWVzc2FnZXMuZ2V0U3RyaW5nKCJDb250ZXh0TWVudS5Mb2dUaW1lU2NhbGUiKTsKKwkJfQorCisJCS8qKgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5BY3Rpb24jcnVuKCkKKwkJICovCisJCUBPdmVycmlkZQorCQlwdWJsaWMgdm9pZCBydW4oKSB7CisJCQlpZiAoIXVzZUxpbmVhclRpbWVTY2FsZSkgeworCQkJCXNldENoZWNrZWQodHJ1ZSk7CisJCQkJLy9Ob3RoaW5nIHRvIGRvLiBJdCdzIGFscmVhZHkgbG9nLXRpbWUuCisJCQl9CisJCQllbHNlIHsKKwkJCQl0b2dnbGVBeGlzU2NhbGUoKTsKKwkJCX0KKwkJCWRyYXcoKTsKKwkJfQorCX0vL0xvZ1NjYWxlQWN0aW9uCisJCisJLyoqCisJICogRGlzcGxheWFibGVQcm9wZXJ0eQorCSAqCisJICovCisJcHJvdGVjdGVkIGNsYXNzIERpc3BsYXlhYmxlUHJvcGVydHkgZXh0ZW5kcyBBY3Rpb24KKwl7CisJCVN0cmluZyBwcm9wZXJ0eSA9IG51bGw7CisJCXB1YmxpYyBEaXNwbGF5YWJsZVByb3BlcnR5KFN0cmluZyBwcm9wZXJ0eSwgYm9vbGVhbiB2aXNpYmlsaXR5KQorCQl7CisJCQkJCXN1cGVyKHByb3BlcnR5LCBJQWN0aW9uLkFTX0NIRUNLX0JPWCk7CisJCQkJCXRoaXMucHJvcGVydHkgPSBwcm9wZXJ0eTsKKwkJCQkJc2V0Q2hlY2tlZCh2aXNpYmlsaXR5KTsKKwkJfQorCQkKKwkKKworCQkvKioKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uQWN0aW9uI2dldFRleHQoKQorCQkgKi8KKwkJQE92ZXJyaWRlCisJCXB1YmxpYyBTdHJpbmcgZ2V0VGV4dCgpIHsKKwkJCXJldHVybiBwcm9wZXJ0eTsKKwkJfQorCisJCS8qKgorCQkgKiBUb2dnbGUgdGhlIHN0YXRlCisJCSAqIEBzZWUgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLkFjdGlvbiNydW4oKQorCQkgKi8KKwkJQE92ZXJyaWRlCisJCXB1YmxpYyB2b2lkIHJ1bigpIHsKKwkJCQlEYXRhU2VyaWVzIHNlcmllcyA9IGRhdGFTZXJpZXNNYXAuZ2V0KHByb3BlcnR5KTsKKwkJCQlzZXJpZXMudG9nZ2xlVmlzaWJsZSgpOworCQkJCWRhdGFTZXJpZXNNYXAucHV0KHByb3BlcnR5LHNlcmllcyk7CisJCQkJc2V0Q2hlY2tlZChzZXJpZXMuaXNWaXNpYmxlKCkpOworCQkJCXZpc2libGVNYXAucHV0KHByb3BlcnR5LCBCb29sZWFuLnZhbHVlT2Yoc2VyaWVzLmlzVmlzaWJsZSgpKSk7CisJCQkJZHJhdygpOworCQl9CisJfS8vIERpc3BsYXlhYmxlUHJvcGVydHkKKwkKKwkKKwkvKioKKwkgKiBJbm5lciBjbGFzcyBEYXRhU2VyaWVzCisJICogYWxsIHRoZSBkYXRhIG9iamVjdHMgZm9yIGEgcGxvdAorCSAqCisJICovCisJcHJvdGVjdGVkIGNsYXNzIERhdGFTZXJpZXMgCisJeworCQlwdWJsaWMgU3RyaW5nIHByb3BlcnR5TmFtZSA9ICIiOworCQkKKwkJcHVibGljIExpc3Q8RG91YmxlPiByZWxhdGl2ZVZhbHVlcyA9IG5ldyBBcnJheUxpc3Q8RG91YmxlPigpOworCQlwdWJsaWMgU2VyaWVzIGxpbmVTZXJpZXMgPSBudWxsOworCQlwcml2YXRlIGJvb2xlYW4gdmlzaWJsZSA9IHRydWU7CisJCXByaXZhdGUgU2VyaWVzRGVmaW5pdGlvbiBzZFkgPSBudWxsOworCQlwcml2YXRlIGludCBzZXJpZXNJbmRleCA9IDA7CisJCXByaXZhdGUgYm9vbGVhbiBvdmVybGF5TW9kZSA9IGZhbHNlOworCQkKKwkJCisJCXB1YmxpYyBib29sZWFuIGlzVmlzaWJsZSgpIHsKKwkJCXJldHVybiB2aXNpYmxlOworCQl9CisJCXB1YmxpYyB2b2lkIHNldFZpc2libGUoYm9vbGVhbiBzdGF0ZSkgeworCQkJdmlzaWJsZSA9IHN0YXRlOworCQl9CisJCQorCQlwdWJsaWMgdm9pZCB0b2dnbGVWaXNpYmxlKCkgeworCQkJdmlzaWJsZSA9ICF2aXNpYmxlOworCQl9CisKKwkJLyoqCisJCSAqIAorCQkgKiBAcGFyYW0gcHJvcGVydHlOYW1lCisJCSAqIEBwYXJhbSBpbmRleAorCQkgKiBAcGFyYW0gb3ZlcmxheSAKKwkJICovCisJCXB1YmxpYyBEYXRhU2VyaWVzKFN0cmluZyBwcm9wZXJ0eU5hbWUsIGludCBpbmRleCwgYm9vbGVhbiBvdmVybGF5KSB7CisJCQl0aGlzLnByb3BlcnR5TmFtZSA9IHByb3BlcnR5TmFtZTsKKwkJCXRoaXMuc2VyaWVzSW5kZXggPSBpbmRleDsKKwkJCXRoaXMub3ZlcmxheU1vZGUgPSBvdmVybGF5OworCQkJcmVsYXRpdmVWYWx1ZXMgPSBuZXcgQXJyYXlMaXN0PERvdWJsZT4oKTsKKwkJCXJlbGF0aXZlVmFsdWVzLmFkZChuZXcgRG91YmxlKDAuMCkpOworCQkJYWRkTGluZVNlcmllcyhwcm9wZXJ0eU5hbWUpOworCQl9CisJCQorCQlwdWJsaWMgdm9pZCBhZGRWYWx1ZShEb3VibGUgdmFsKSB7CisJCQlpZihyZWxhdGl2ZVZhbHVlcz09bnVsbCkgcmVsYXRpdmVWYWx1ZXMgPSBuZXcgQXJyYXlMaXN0PERvdWJsZT4oKTsKKwkJCXJlbGF0aXZlVmFsdWVzLmFkZCh2YWwpOworCQl9CisJCQorCQkvKioKKwkJICogQHBhcmFtIHByb3BlcnR5TmFtZQorCQkgKiAKKwkJICovCisJCUBTdXBwcmVzc1dhcm5pbmdzKCJkZXByZWNhdGlvbiIpCisJCXB1YmxpYyB2b2lkIGFkZExpbmVTZXJpZXMoZmluYWwgU3RyaW5nIHByb3BlcnR5TmFtZSkgeworCQkJCisJCQlmaW5hbCBOdW1iZXJEYXRhU2V0IG9ydGhvVmFsdWVzID0gTnVtYmVyRGF0YVNldEltcGwKKwkJCQkJLmNyZWF0ZShyZWxhdGl2ZVZhbHVlcyk7CisJCQlpZihsaW5lU2VyaWVzID09IG51bGwpIHsKKwkJCQlsaW5lU2VyaWVzID0gU2NhdHRlclNlcmllc0ltcGwuY3JlYXRlKCk7CisJCQkJLyoKKwkJCQkgKiAKKwkJCQkgKiBCYXIgY2hhcnQgc3R5bGUgaXMgdG9vIHNsb3cgZm9yIGdlbmVyYXRpb24gb2YgYSBmaWxsCisJCQkJICogaWYgd2Ugd2FudCBhIGZpbGwgd2UgY2FuIHRyeSB1c2luZyB0aGUgZGlmZmVyZW5jZSBwbG90CisJCQkJICogdG8gYSBzdHJhaWdodCBsaW5lIGF0IHk9MAorCQkJCSAqIAorCQkJCQorCQkJCWlmKHByb3BlcnR5TmFtZS5pbmRleE9mKCIqIik+PTEpIHsKKwkJCQkJLy8gYmFyc2VyaWVzIG1ldGhvZHMKKwkJCQkJbGluZVNlcmllcyA9IChCYXJTZXJpZXMpIEJhclNlcmllc0ltcGwuY3JlYXRlKCk7CisJCQkJfSBlbHNlIHsKKwkJCQkJbGluZVNlcmllcyA9IChTY2F0dGVyU2VyaWVzKSBTY2F0dGVyU2VyaWVzSW1wbC5jcmVhdGUoKTsKKwkJCQl9CisJCQkJCisJCQkJKgorCQkJCSovCisJCQl9IC8vIGlmIGxpbmVTZXJpZXM9PW51bGwKKwkJCWxpbmVTZXJpZXMuc2V0RGF0YVNldChvcnRob1ZhbHVlcyk7CisJCQkoKExpbmVTZXJpZXMpIGxpbmVTZXJpZXMpLmdldExpbmVBdHRyaWJ1dGVzKCkuc2V0VmlzaWJsZSh0cnVlKTsKKwkJCSgoTGluZVNlcmllcykgbGluZVNlcmllcykuZ2V0TWFya2VycygpLmNsZWFyKCk7CisJCQkKKwkJCS8vIEFzc2lnbiB0aGUgbGluZSBjb2xvcgorCQkJLy8gYmFzZWQgb24gc2VsZWN0ZWQgcHJvcGVydHkuIERlZmF1bHQgaXMgQmx1ZQorCQkJc2V0Q29sb3JEZWZzKHByb3BlcnR5TmFtZSk7CisJCQkvLyBJZiB0aGlzIGlzIHRoZSAic2VsZWN0ZWQiIHJlZ2lvbiBvZiBhIGdyYXBoIHNldCB0aGUgbWFya2VyIHR5cGUKKwkJCisJCQkvLyB0aGUgc2VyaWVzIGRlZgorCQkJc2RZID0gU2VyaWVzRGVmaW5pdGlvbkltcGwuY3JlYXRlKCk7CisJCQlzZFkuZ2V0U2VyaWVzUGFsZXR0ZSgpLnVwZGF0ZSgtMik7CisJCQlzZFkuZ2V0U2VyaWVzKCkuYWRkKGxpbmVTZXJpZXMpOworCQkJeUF4aXNQcmltYXJ5LmdldFNlcmllc0RlZmluaXRpb25zKCkuYWRkKHNkWSk7CisJCQkKKwkJCXJldHVybjsKKwkJfS8vIGFkZExpbmVTZXJpZXMKKwkJCisJCS8qKiAKKwkJICogaW4gcmVzcG9uc2UgdG8gdXNlciBhY3Rpb24gdGVtcG9yYXJpbHkgcmVtb3ZlIHRoZSBsaW5lIHNlcmllcyBmcm9tIHRoZSBncmFwaAorCQkgKi8KKwkJcHVibGljIHZvaWQgaGlkZSgpIHsKKwkJCWxpbmVTZXJpZXMuc2V0VmlzaWJsZShmYWxzZSk7CisJCQl2aXNpYmxlID0gZmFsc2U7CisJCX0vLyBoaWRlCisJCQorCQkvKiogCisJCSAqIGluIHJlc3BvbnNlIHRvIHVzZXIgYWN0aW9uIGFkZCBiYWNrIHRoZSBsaW5lIHNlcmllcyB0byB0aGUgZ3JhcGgKKwkJICovCisJCXB1YmxpYyB2b2lkIHNob3coKSB7CisJCQlsaW5lU2VyaWVzLnNldFZpc2libGUodHJ1ZSk7CisJCQl2aXNpYmxlID0gdHJ1ZTsKKwkJfS8vIHNob3cKKwkJCisKKwkJLyoqCisJCSAqIFNldHMgdGhlIGNvbG9ycyBmb3IgYSBuIGFycmF5IG9mIExpbmVTZXJpZXMgZ2l2ZW4gdGhlIHByb3BlcnR5IHRvIFBsb3QKKwkJICogZm9yIGVhY2guIFRyeSB0byBzZXQgY29sb3IgZnJvbSB0aGUgcHJlZmVyZW5jZXMgKGlmIHNwZWNpZmllZCBmb3IgdGhhdAorCQkgKiBwcm9wZXJ0eSkgb3RoZXJ3aXNlIHNldHMgbGluZSBjb2xvciB0byBibHVlLgorCQkgKiBAcGFyYW0gcHJvcGVydHlOYW1lIAorCQkgKgorCQkgKi8KKwkJcHVibGljIHZvaWQgc2V0Q29sb3JEZWZzKFN0cmluZyBwcm9wZXJ0eU5hbWUpIHsKKwkJCS8vIHRoZSBkZWZhdWx0IGxpbmUgY29sb3IKKworCQkJLy8gaWYgcG9zc2libGUgZ2V0IGNvbG9yIGZyb20gcHJlZmVyZW5jZXMKKwkJCWZpbmFsIE1hcDxTdHJpbmcsIENvbG9yPiBjb2xvck1hcCA9IFZpc3VhbGl6YXRpb25QcmVmZXJlbmNlUGFnZS5nZXRDb2xvck1hcHBpbmcoKTsKKworCQkJLy8gZGVmYXVsdCBjb2xvcgorCQkJaW50IGNvbG9ySW5kZXggPSBzZXJpZXNJbmRleCAlIGNvbG9yRGVmYXVsdC5sZW5ndGg7CisJCQlDb2xvckRlZmluaXRpb24gY29sb3IgPSBjb2xvckRlZmF1bHRbY29sb3JJbmRleF07CisKKwkJCS8vIHByZWZlcnJlZCBjb2xvciBieSBuYW1lCisJCQkvL1N0cmluZyBrZXkgPSBwcm9wZXJ0eU5hbWUuc3Vic3RyaW5nKDAsMSk7CisJCQkvL1N0cmluZyBrZXkgPSBwcm9wZXJ0eU5hbWU7CisJCQkKKwkJCS8vIENoZWNrIGZvciBhIHByZWZpeCBtYXRjaAorCQkJZm9yIChTdHJpbmcga2V5IDogY29sb3JNYXAua2V5U2V0KCkpIHsKKwkJCQkKKwkJCQlpZigocHJvcGVydHlOYW1lLnN0YXJ0c1dpdGgoa2V5KSkmJihrZXkubGVuZ3RoKCk+PTEpKSB7CisJCQkJCS8vIG1pZ2h0IGJlIHJpZ2h0CisJCQkJCVN0cmluZyB0YWlsID0gcHJvcGVydHlOYW1lLnN1YnN0cmluZyhrZXkubGVuZ3RoKCksIHByb3BlcnR5TmFtZS5sZW5ndGgoKSk7CisJCQkJCWlmKCh0YWlsPT1udWxsKXx8KHRhaWwubGVuZ3RoKCk9PTApKSB7CisJCQkJCQlmaW5hbCBDb2xvciBjID0gY29sb3JNYXAuZ2V0KGtleSk7CisJCQkJCQljb2xvciA9IENvbG9yRGVmaW5pdGlvbkltcGwuY3JlYXRlKGMuZ2V0UmVkKCksIGMuZ2V0R3JlZW4oKSwgYy5nZXRCbHVlKCkpOworCQkJCQkJYnJlYWs7CisJCQkJCX0KKwkJCQkJCisJCQkJCWJvb2xlYW4gaGl0ID0gdHJ1ZTsKKwkJCQkJZm9yIChjaGFyIGMgOiB0YWlsLnRvQ2hhckFycmF5KCkpIHsKKwkJCQkJCWlmICghQ2hhcmFjdGVyLmlzRGlnaXQoYykpIHsKKwkJCQkJCQloaXQgPSBmYWxzZTsKKwkJCQkJCQlicmVhazsKKwkJCQkJCX0KKwkJCQkJfS8vIGFsbCBjaGFyYWN0ZXJzIGluIHRhaWwKKwkJCQkJaWYoaGl0KXsKKwkJCQkJCWZpbmFsIENvbG9yIGMgPSBjb2xvck1hcC5nZXQoa2V5KTsKKwkJCQkJCWNvbG9yID0gQ29sb3JEZWZpbml0aW9uSW1wbC5jcmVhdGUoYy5nZXRSZWQoKSwgYy5nZXRHcmVlbigpLCBjLmdldEJsdWUoKSk7CisJCQkJCQlicmVhazsKKwkJCQkJfQorCQkJCX0KKwkJCX0KKwkJCQorLy8JCQlpZiAoY29sb3JNYXAuY29udGFpbnNLZXkocHJvcGVydHlOYW1lKSkgeworLy8JCQkJZmluYWwgQ29sb3IgYyA9IGNvbG9yTWFwLmdldChwcm9wZXJ0eU5hbWUpOworLy8JCQkJY29sb3IgPSBDb2xvckRlZmluaXRpb25JbXBsLmNyZWF0ZShjLmdldFJlZCgpLCBjLmdldEdyZWVuKCksIGMuZ2V0Qmx1ZSgpKTsKKy8vCQkJfQorCQkJCisJCQkKKwkJCQorCQkJdGhpcy5saW5lU2VyaWVzLnNldFNlcmllc0lkZW50aWZpZXIocHJvcGVydHlOYW1lKTsKKwkJCWlmIChvdmVybGF5TW9kZSkgeworCQkJCWlmKHByb3BlcnR5TmFtZS5pbmRleE9mKCIqIik+PTEpIHsKKwkJCQkJLy8gYmFyc2VyaWVzIG1ldGhvZHMKKwkJCQkJKChMaW5lU2VyaWVzKXRoaXMubGluZVNlcmllcykuZ2V0TGluZUF0dHJpYnV0ZXMoKS5zZXRDb2xvcihjb2xvcik7CisJCQkJfSBlbHNlIHsKKwkJCQkJKChMaW5lU2VyaWVzKXRoaXMubGluZVNlcmllcykuZ2V0TGluZUF0dHJpYnV0ZXMoKS5zZXRDb2xvcihDb2xvckRlZmluaXRpb25JbXBsLkdSRVkoKSk7CisJCQkJCSgoTGluZVNlcmllcyl0aGlzLmxpbmVTZXJpZXMpLmdldExpbmVBdHRyaWJ1dGVzKCkuc2V0U3R5bGUoTGluZVN0eWxlLkRPVFRFRF9MSVRFUkFMKTsKKwkJCQl9CisJCQl9IGVsc2UgeworCQkJCSgoTGluZVNlcmllcyl0aGlzLmxpbmVTZXJpZXMpLmdldExpbmVBdHRyaWJ1dGVzKCkuc2V0Q29sb3IoY29sb3IpOworCQkJfQorCQkJCisJCQkKKwkJfS8vIGdldENvbG9yRGVmcworCisJCS8qKgorCQkgKiBsZW5ndGggb2YgdGhlIHNlcmllcworCQkgKiBAcmV0dXJuIG51bWJlciBvZiBkYXRhIHBvaW50cworCQkgKi8KKwkJcHVibGljIGludCBnZXREYXRhU2l6ZSgpIHsKKwkJCXJldHVybiByZWxhdGl2ZVZhbHVlcy5zaXplKCk7CisJCX0KKwkJLy8gQWNjZXNzb3JzCisJCXB1YmxpYyBTdHJpbmcgZ2V0UHJvcGVydHlOYW1lKCkgeworCQkJcmV0dXJuIHByb3BlcnR5TmFtZTsKKwkJfQorCisJCXB1YmxpYyB2b2lkIHNldFByb3BlcnR5TmFtZShTdHJpbmcgcHJvcGVydHlOYW1lKSB7CisJCQl0aGlzLnByb3BlcnR5TmFtZSA9IHByb3BlcnR5TmFtZTsKKwkJfQorCisJCXB1YmxpYyBMaXN0PERvdWJsZT4gZ2V0UmVsYXRpdmVWYWx1ZXMoKSB7CisJCQlyZXR1cm4gcmVsYXRpdmVWYWx1ZXM7CisJCX0KKworCQlwdWJsaWMgdm9pZCBzZXRSZWxhdGl2ZVZhbHVlcyhMaXN0PERvdWJsZT4gcmVsYXRpdmVWYWx1ZXMpIHsKKwkJCXRoaXMucmVsYXRpdmVWYWx1ZXMgPSByZWxhdGl2ZVZhbHVlczsKKwkJfQorCisJCQorCisJCXB1YmxpYyB2b2lkIHNldExpbmVTZXJpZXMoTGluZVNlcmllcyBsaW5lU2VyaWVzKSB7CisJCQl0aGlzLmxpbmVTZXJpZXMgPSBsaW5lU2VyaWVzOworCQl9CisJfS8vIERhdGFTZXJpZXMKKwkvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworCQorfSAvLyBUaW1lU2VyaWVzQ2FudmFzCmRpZmYgLS1naXQgYS9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLnV0aWwuYW5hbHlzaXMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdXRpbC9hbmFseXNpcy92aWV3cy9YWVNlcmllc0NhbnZhcy5qYXZhIGIvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS51dGlsLmFuYWx5c2lzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3V0aWwvYW5hbHlzaXMvdmlld3MvWFlTZXJpZXNDYW52YXMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZWViZTIwCi0tLSAvZGV2L251bGwKKysrIGIvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS51dGlsLmFuYWx5c2lzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3V0aWwvYW5hbHlzaXMvdmlld3MvWFlTZXJpZXNDYW52YXMuamF2YQpAQCAtMCwwICsxLDExNjMgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS51dGlsLmFuYWx5c2lzLnZpZXdzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7CitpbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7CitpbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOworaW1wb3J0IGphdmEudXRpbC5MaXN0OworaW1wb3J0IGphdmEudXRpbC5NYXA7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5iaXJ0LmNoYXJ0LmRldmljZS5JRGV2aWNlUmVuZGVyZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuYmlydC5jaGFydC5leGNlcHRpb24uQ2hhcnRFeGNlcHRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuYmlydC5jaGFydC5mYWN0b3J5LkdlbmVyYXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5iaXJ0LmNoYXJ0Lm1vZGVsLkNoYXJ0OworaW1wb3J0IG9yZy5lY2xpcHNlLmJpcnQuY2hhcnQubW9kZWwuQ2hhcnRXaXRoQXhlczsKK2ltcG9ydCBvcmcuZWNsaXBzZS5iaXJ0LmNoYXJ0Lm1vZGVsLmF0dHJpYnV0ZS5BbmNob3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuYmlydC5jaGFydC5tb2RlbC5hdHRyaWJ1dGUuQXhpc1R5cGU7CitpbXBvcnQgb3JnLmVjbGlwc2UuYmlydC5jaGFydC5tb2RlbC5hdHRyaWJ1dGUuQm91bmRzOworaW1wb3J0IG9yZy5lY2xpcHNlLmJpcnQuY2hhcnQubW9kZWwuYXR0cmlidXRlLkNvbG9yRGVmaW5pdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5iaXJ0LmNoYXJ0Lm1vZGVsLmF0dHJpYnV0ZS5JbnRlcnNlY3Rpb25UeXBlOworaW1wb3J0IG9yZy5lY2xpcHNlLmJpcnQuY2hhcnQubW9kZWwuYXR0cmlidXRlLkxpbmVBdHRyaWJ1dGVzOworaW1wb3J0IG9yZy5lY2xpcHNlLmJpcnQuY2hhcnQubW9kZWwuYXR0cmlidXRlLkxpbmVTdHlsZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5iaXJ0LmNoYXJ0Lm1vZGVsLmF0dHJpYnV0ZS5NYXJrZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuYmlydC5jaGFydC5tb2RlbC5hdHRyaWJ1dGUuTWFya2VyVHlwZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5iaXJ0LmNoYXJ0Lm1vZGVsLmF0dHJpYnV0ZS5Qb3NpdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5iaXJ0LmNoYXJ0Lm1vZGVsLmF0dHJpYnV0ZS5UaWNrU3R5bGU7CitpbXBvcnQgb3JnLmVjbGlwc2UuYmlydC5jaGFydC5tb2RlbC5hdHRyaWJ1dGUuaW1wbC5Cb3VuZHNJbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLmJpcnQuY2hhcnQubW9kZWwuYXR0cmlidXRlLmltcGwuQ29sb3JEZWZpbml0aW9uSW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5iaXJ0LmNoYXJ0Lm1vZGVsLmF0dHJpYnV0ZS5pbXBsLk1hcmtlckltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2UuYmlydC5jaGFydC5tb2RlbC5jb21wb25lbnQuQXhpczsKK2ltcG9ydCBvcmcuZWNsaXBzZS5iaXJ0LmNoYXJ0Lm1vZGVsLmNvbXBvbmVudC5TZXJpZXM7CitpbXBvcnQgb3JnLmVjbGlwc2UuYmlydC5jaGFydC5tb2RlbC5jb21wb25lbnQuaW1wbC5TZXJpZXNJbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLmJpcnQuY2hhcnQubW9kZWwuZGF0YS5OdW1iZXJEYXRhU2V0OworaW1wb3J0IG9yZy5lY2xpcHNlLmJpcnQuY2hhcnQubW9kZWwuZGF0YS5TZXJpZXNEZWZpbml0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmJpcnQuY2hhcnQubW9kZWwuZGF0YS5pbXBsLk51bWJlckRhdGFFbGVtZW50SW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5iaXJ0LmNoYXJ0Lm1vZGVsLmRhdGEuaW1wbC5OdW1iZXJEYXRhU2V0SW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5iaXJ0LmNoYXJ0Lm1vZGVsLmRhdGEuaW1wbC5TZXJpZXNEZWZpbml0aW9uSW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5iaXJ0LmNoYXJ0Lm1vZGVsLmltcGwuQ2hhcnRXaXRoQXhlc0ltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2UuYmlydC5jaGFydC5tb2RlbC5sYXlvdXQuTGVnZW5kOworaW1wb3J0IG9yZy5lY2xpcHNlLmJpcnQuY2hhcnQubW9kZWwubGF5b3V0LlBsb3Q7CitpbXBvcnQgb3JnLmVjbGlwc2UuYmlydC5jaGFydC5tb2RlbC50eXBlLlNjYXR0ZXJTZXJpZXM7CitpbXBvcnQgb3JnLmVjbGlwc2UuYmlydC5jaGFydC5tb2RlbC50eXBlLmltcGwuU2NhdHRlclNlcmllc0ltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2UuYmlydC5jaGFydC51dGlsLlBsdWdpblNldHRpbmdzOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5BY3Rpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklBY3Rpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLk1lbnVNYW5hZ2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5TZXBhcmF0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS51aS5wcmVmZXJlbmNlcy5WaXN1YWxpemF0aW9uUHJlZmVyZW5jZVBhZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS51dGlsLmFuYWx5c2lzLkFjdGl2YXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuU1dUOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuUGFpbnRFdmVudDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLlBhaW50TGlzdGVuZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmdyYXBoaWNzLkNvbG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ncmFwaGljcy5HQzsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZ3JhcGhpY3MuSW1hZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ2FudmFzOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5NZW51OworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLldpZGdldDsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5JV29ya2JlbmNoQWN0aW9uQ29uc3RhbnRzOworCisvKioKKyAqIFRpbWVTZXJpZXNDYW52YXMgaXMgYSBzdWJjbGFzcyBvZiB7QGxpbmsgQ2FudmFzfSBzdWl0YWJsZSBmb3IgY2hhcnQgZHJhd2luZ3MuCisgKi8KK3B1YmxpYyBjbGFzcyBYWVNlcmllc0NhbnZhcyBleHRlbmRzIENhbnZhcyB7CisKKwlwcm90ZWN0ZWQgSURldmljZVJlbmRlcmVyIGlkciA9IG51bGw7CisKKwkvKioKKwkgKiBUaGlzIGlzIHRoZSB7QGxpbmsgQ2hhcnR9IHRoYXQgcGxvdHMgdGhlIHJlbGF0aXZlIHZhbHVlcy4KKwkgKi8KKwlwcm90ZWN0ZWQgQ2hhcnQgY20gPSBudWxsOworCisJLyoqCisJICogVGhlIHByb3ZpZGVyIG9mIHJlbGF0aXZlIHZhbHVlcy4KKwkgKi8KKwkvL3ByaXZhdGUgUmVsYXRpdmVWYWx1ZUhpc3RvcnlQcm92aWRlciBydmhwOworCisJcHJpdmF0ZSBBbmFseXNpc0NvbnRyb2wgY29udHJvbCA9IG51bGw7CisJCisJLyoqCisJICogdGhlIGluZGV4IG9mIHRoaXMgQ2hhcnQKKwkgKi8KKwlwcm90ZWN0ZWQgaW50IGNoYXJ0SW5kZXggPSAwOworCQorCisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIERFRkFVTFRfS0VZX1BSRUZJWCA9ICJYWSI7CisJCisJcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIGRlZmF1bHRLZXkgPSBERUZBVUxUX0tFWV9QUkVGSVg7CisKKwkvKioKKwkgKiBzb21lIGV4dHJhIGNvbG9ycworCSAqLworCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgaW50W11bXSBjb2xvckRlZmF1bHQgPSB7CisJCQkJCQkJCQkJCQkJezAsIDAsIDI1NX0sIAkJLy9CbHVlCisJCQkJCQkJCQkJCQkJezI1NSwgMCwgMH0sIAkJLy9SZWQKKwkJCQkJCQkJCQkJCQl7MCwgMjU1LCAwfSwgCQkvL0dyZWVuCisJCQkJCQkJCQkJCQkJezI1NSwgMjU1LCAwfSwgCQkvL1llbGxvdworCQkJCQkJCQkJCQkJCXswLCAwLCAwfSwgCQkJLy9CbGFjayAKKwkJCQkJCQkJCQkJCQl7MTI3LCAxMjcsIDEyN30sIAkvL0dyZXkKKwkJCQkJCQkJCQkJCQl7MjU1LCAyNTUsIDI1NX0sCS8vQ3lhbgorCQkJCQkJCQkJCQkJCXsyNTUsIDE5NywgNDF9CQkvL09yYW5nZSAKKwkJCQkJCQkJCQkJCQl9OworCQorCS8qKgorCSAqIHVzZWQgdG8gaW5kZXggdGhlIGxpbmUgc2VyaWVzIHNvIHdlIGNhbiBzdGVwIHRocm91Z2ggZGVmYXVsdCBjb2xvcnMKKwkgKiB3aGVuIGEgdXNlciBjdXN0b20gY29sb3IgaXMgbm90IHlldCBhc3NpZ25lZAorCSAqLworCXByaXZhdGUgaW50IHNlcmllc0NvdW50ICA9IDA7CisJCisKKwkvKioKKwkgKiBBIGNvbnRleHQgbWVudSBmb3IgdGhpcyB2aWV3CisJICovCisJTWVudSBwb3BVcE1lbnUgPSBudWxsOworCQorCS8qKgorCSAqIHNldCB5IGF4aXMgdG8gYSBsaW5lYXIgc2NhbGUKKwkgKi8KKwlwcml2YXRlIExpbmVhclNjYWxlQWN0aW9uIGxpbmVhclRpbWVBY3Rpb247CisJLyoqCisJICogc2V0IHkgYXhpcyB0byBhIGxvZyBzY2FsZQorCSAqLworCXByaXZhdGUgTG9nU2NhbGVBY3Rpb24gbG9nVGltZUFjdGlvbjsKKwlwcm90ZWN0ZWQgYm9vbGVhbiB1c2VMaW5lYXJUaW1lU2NhbGUgPSB0cnVlOworCQorCisJLyoqCisJICogc2hvdyB0aGUgbGVnZW5kICh0cnVlIGJ5IGRlZmF1bHQpCisJICovCisJcHJpdmF0ZSBMZWdlbmRWaWV3QWN0aW9uIHZpZXdMZWdlbmQ7CisKKwkvKioKKwkgKiBoaWRlIHRoZSBsZWdlbmQgCisJICovCisJcHJpdmF0ZSBMZWdlbmRIaWRlQWN0aW9uIGhpZGVMZWdlbmQ7CisJcHJvdGVjdGVkIGJvb2xlYW4gc2hvd0xlZ2VuZCA9IHRydWU7CisKKwlwcm90ZWN0ZWQgTGVnZW5kIGxlZ2VuZCA9IG51bGw7CisJCisKKwkvKioKKwkgKiB0aGlzIGlzIGEgbWFwIG9mIHRoZSBEYXRhWFlTZXJpZXMgb2JqZWN0IChrZXllZCBieSBwcm9wZXJ0eSBuYW1lKQorCSAqLworCXByb3RlY3RlZCBmaW5hbCBNYXA8U3RyaW5nLERhdGFYWVNlcmllcz4gZGF0YVNlcmllc01hcCA9IG5ldyBIYXNoTWFwPFN0cmluZyxEYXRhWFlTZXJpZXM+KCk7CisKKwkvKioKKwkgKiBDaGFydCBnZW5lcmF0b3IgaW5zdGFuY2UgKHJlZmVyZW5jZSB0byBhIHNpbmdsZXRvbikKKwkgKi8KKwlHZW5lcmF0b3IgZ3I7CisKKwlBeGlzIHlBeGlzUHJpbWFyeTsKKwlBeGlzIHhBeGlzUHJpbWFyeTsKKwkvKioKKwkgKiB0aGUgbWF4WSB2YWx1ZSBmb3Igc2NhbGluZworCSAqLworCWRvdWJsZSBtYXhZID0gRG91YmxlLk1JTl9WQUxVRTsKKwkKKwkvKioKKwkgKiB0aGUgbWF4WSB2YWx1ZSBmb3Igc2NhbGluZworCSAqLworCWRvdWJsZSBtYXhYID0gRG91YmxlLk1JTl9WQUxVRTsKKworCS8qKgorCSAqIHRoZSBtaW5ZIHZhbHVlIGZvciBzY2FsaW5nCisJICovCisJcHJpdmF0ZSBkb3VibGUgbWluWSA9IERvdWJsZS5NQVhfVkFMVUU7CisJCisJLyoqCisJICogdGhlIG1pblggdmFsdWUgZm9yIHNjYWxpbmcKKwkgKi8KKwlwcml2YXRlIGRvdWJsZSBtaW5YID0gRG91YmxlLk1BWF9WQUxVRTsKKwkKKwkKKwkvKioKKwkgKiBMYWJlbCBmb3IgbGluZSBzZXJpZXMgTEVHRU5ECisJICovCisJcHVibGljIFN0cmluZyBPcmRpbmF0ZV9MRUdFTkQgPSAiWSI7CisJCisJLyoqCisJICogTGFiZWwgZm9yIGxpbmUgc2VyaWVzIFkgYXhpcyBsYWJlbAorCSAqKi8KKwlwdWJsaWMgU3RyaW5nIE9yZGluYXRlX0FYSVMgPSAiWSI7CisJCisJLyoqIAorCSAqIGN1c3RvbWl6YWJsZSBjb2xvciBkZWZpbml0aW9ucworCSAqLworCXByb3RlY3RlZCBDb2xvckRlZmluaXRpb24gZm9yZUdyb3VuZCA9IENvbG9yRGVmaW5pdGlvbkltcGwuV0hJVEUoKTsKKwlwcml2YXRlIENvbG9yRGVmaW5pdGlvbiBiYWNrZ3JvdW5kR3JvdW5kID0gQ29sb3JEZWZpbml0aW9uSW1wbC5CTEFDSygpOworCXByaXZhdGUgQ29sb3JEZWZpbml0aW9uIGZyYW1lQ29sb3IgPSBDb2xvckRlZmluaXRpb25JbXBsLmNyZWF0ZSgxODAsIDE4MCwgMjAwKTsKKworCUltYWdlIGltZ0NoYXJ0ID0gbnVsbDsKKwkKKwkvKioKKwkgKiBUaGlzIENvbnN0cnVjdG9yIGlzIHVzZWQgd2hlbiB3ZSB3YW50IHRvIHBsYWNlIHRoZSB0aW1lIHNlcmllcyBpbiBhIGNvbnRhaW5lcgorCSAqIHdoaWNoIGlzIGEgc3ViIGNvbXBvbmVudCBvZiB0aGUgYWN0dWFsIEFuYWx5c2lzQ29udHJvbAorCSAqIEBwYXJhbSBhbmFseXNpc0NvbnRyb2wgCisJICogCisJICogQHBhcmFtIHBhcmVudCAgdGhlIFNXVCBwYXJlbnQgb2YgdGhlIHtAbGluayBXaWRnZXR9CisJICogQHBhcmFtIG9yZGluYXRlU3RyaW5nIAorCSAqIEBwYXJhbSB5QXhpc0xhYmVsIAorCSAqIEBwYXJhbSBmb3JlZ3JvdW5kIAorCSAqIEBwYXJhbSBiYWNrZ3JvdW5kIAorCSAqIEBwYXJhbSBmcmFtZWNvbG9yIAorCSAqIEBwYXJhbSBjaGFydEluZGV4IHRoZSBpbmRleCBvZiB0aGlzIGNoYXJ0ICgwIGlmIG9ubHkgb25lKQorCSAqICAKKwkgKi8KKwlwdWJsaWMgWFlTZXJpZXNDYW52YXMoZmluYWwgQW5hbHlzaXNDb250cm9sIGFuYWx5c2lzQ29udHJvbCwgZmluYWwgQ29tcG9zaXRlIHBhcmVudCwgCisJCQlmaW5hbCBTdHJpbmcgb3JkaW5hdGVTdHJpbmcsIAorCQkJZmluYWwgU3RyaW5nIHlBeGlzTGFiZWwsIAorCQkJQ29sb3JEZWZpbml0aW9uIGZvcmVncm91bmQsCisJCQlDb2xvckRlZmluaXRpb24gYmFja2dyb3VuZCwKKwkJCUNvbG9yRGVmaW5pdGlvbiBmcmFtZWNvbG9yLAorCQkJaW50IGNoYXJ0SW5kZXgpIHsKKwkJc3VwZXIocGFyZW50LCBTV1QuRE9VQkxFX0JVRkZFUkVEIHwgU1dULkJPUkRFUik7CisJCU9yZGluYXRlX0xFR0VORCA9IG9yZGluYXRlU3RyaW5nOworCQlPcmRpbmF0ZV9BWElTID0geUF4aXNMYWJlbDsKKwkJZGVmYXVsdEtleSA9IERFRkFVTFRfS0VZX1BSRUZJWCtjaGFydEluZGV4OworCQlmb3JlR3JvdW5kIAkJCT0gZm9yZWdyb3VuZDsKKwkJYmFja2dyb3VuZEdyb3VuZCAJPSBiYWNrZ3JvdW5kOworCQlmcmFtZUNvbG9yIAkJCT0gZnJhbWVjb2xvcjsKKwkJdGhpcy5jaGFydEluZGV4ID0gY2hhcnRJbmRleDsKKwkJCisJCWdyID0gR2VuZXJhdG9yLmluc3RhbmNlKCk7CisKKwkJdHJ5IHsKKwkJCWlkciA9IFBsdWdpblNldHRpbmdzLmluc3RhbmNlKCkuZ2V0RGV2aWNlKCJkdi5TV1QiKTsgLy8kTk9OLU5MUy0xJAkJCQorCQl9IGNhdGNoIChmaW5hbCBDaGFydEV4Y2VwdGlvbiBwZXgpIHsKKwkJCUFjdGl2YXRvci5sb2dFcnJvcihNZXNzYWdlcy5nZXRTdHJpbmcoIkNPTU1PTi5FUlJPUklOSVQiKSwgcGV4KTsgLy8kTk9OLU5MUy0xJAorCQkJcmV0dXJuOworCQl9CisKKwkJY29udHJvbCA9IGFuYWx5c2lzQ29udHJvbDsKKworCQkKKwkJY20gPSBjcmVhdGVTaW1wbGVMaW5lQ2hhcnQoZGF0YVNlcmllc01hcCwgTWVzc2FnZXMuZ2V0U3RyaW5nKCJDQy50aXRsZSIpKTsgLy8kTk9OLU5MUy0xJAorCQkKKwkJcmVzZXREYXRhKCk7CisJCWFkZFBhaW50TGlzdGVuZXIobmV3IFBhaW50TGlzdGVuZXIoKSB7CisJCQlwdWJsaWMgdm9pZCBwYWludENvbnRyb2woZmluYWwgUGFpbnRFdmVudCBwZSkgeworCisJCQkJZmluYWwgQ29tcG9zaXRlIHNvdXJjZSA9IChDb21wb3NpdGUpIHBlLmdldFNvdXJjZSgpOworCQkJCWZpbmFsIG9yZy5lY2xpcHNlLnN3dC5ncmFwaGljcy5SZWN0YW5nbGUgZCA9IHNvdXJjZQorCQkJCQkJLmdldENsaWVudEFyZWEoKTsKKworCQkJCWlmKGltZ0NoYXJ0ICE9IG51bGwpIGltZ0NoYXJ0LmRpc3Bvc2UoKTsKKwkJCQlpbWdDaGFydCA9IG5ldyBJbWFnZShzb3VyY2UuZ2V0RGlzcGxheSgpLCBkKTsKKwkJCQlpZHIuc2V0UHJvcGVydHkoSURldmljZVJlbmRlcmVyLkdSQVBISUNTX0NPTlRFWFQsIG5ldyBHQygKKwkJCQkJCWltZ0NoYXJ0KSk7CisJCQkJZmluYWwgQm91bmRzIGJvdW5kcyA9IEJvdW5kc0ltcGwuY3JlYXRlKGQueCwgZC55LCBkLndpZHRoLAorCQkJCQkJZC5oZWlnaHQpOworCQkJCWJvdW5kcy5zY2FsZSg3MmQgLyBpZHIuZ2V0RGlzcGxheVNlcnZlcigpLmdldERwaVJlc29sdXRpb24oKSk7CisJCQkJLy8gQk9VTkRTIE1VU1QgQkUgU1BFQ0lGSUVEIElOIFBPSU5UUworCisJCQkJdHJ5IHsKKwkJCQkJZ3IucmVuZGVyKGlkciwgZ3IuYnVpbGQoaWRyLmdldERpc3BsYXlTZXJ2ZXIoKSwgY20sIGJvdW5kcywKKwkJCQkJCQludWxsLCBudWxsLCBudWxsKSk7CisJCQkJCXBlLmdjLmRyYXdJbWFnZShpbWdDaGFydCwgZC54LCBkLnkpOworCQkJCX0gY2F0Y2ggKGZpbmFsIENoYXJ0RXhjZXB0aW9uIGNlKSB7CisJCQkJCUFjdGl2YXRvci5sb2dFcnJvcigiUHJvYmxlbSByZW5kZXJpbmcgY2hhcnQiLCBjZSk7IC8vJE5PTi1OTFMtMSQKKwkJCQl9CisJCQl9IC8vIHBhaW50Q29udHJvbAorCQl9IC8vIFBhaW50TGlzdGVuZXIKKwkJKTsKKwkJCisJCS8vQ3JlYXRlIGEgY29udGV4dCBtZW51IGZvciB0aGUgY2FudmFzCisJCWNyZWF0ZUNvbnRleHRNZW51KHRoaXMpOworCQkKKworCX0gLy8gVGltZVNlcmllc0NhbnZhcworCS8qKgorCSAqIENvbnN0cnVjdG9yLgorCSAqIAorCSAqIEBwYXJhbSBwYXJlbnQgIHRoZSBTV1QgcGFyZW50IG9mIHRoZSB7QGxpbmsgV2lkZ2V0fQorCSAqIEBwYXJhbSBvcmRpbmF0ZVN0cmluZyAKKwkgKiBAcGFyYW0geUF4aXNMYWJlbCAKKwkgKiBAcGFyYW0gZm9yZWdyb3VuZCAKKwkgKiBAcGFyYW0gYmFja2dyb3VuZCAKKwkgKiBAcGFyYW0gZnJhbWVjb2xvciAKKwkgKiBAcGFyYW0gY2hhcnRJbmRleCB0aGUgaW5kZXggb2YgdGhpcyBjaGFydCAoMCBpZiBvbmx5IG9uZSkKKwkgKiAgCisJICovCisJcHVibGljIFhZU2VyaWVzQ2FudmFzKGZpbmFsIENvbXBvc2l0ZSBwYXJlbnQsIAorCQkJZmluYWwgU3RyaW5nIG9yZGluYXRlU3RyaW5nLCAKKwkJCWZpbmFsIFN0cmluZyB5QXhpc0xhYmVsLCAKKwkJCUNvbG9yRGVmaW5pdGlvbiBmb3JlZ3JvdW5kLAorCQkJQ29sb3JEZWZpbml0aW9uIGJhY2tncm91bmQsCisJCQlDb2xvckRlZmluaXRpb24gZnJhbWVjb2xvciwKKwkJCWludCBjaGFydEluZGV4KSB7CisJCXN1cGVyKHBhcmVudCwgU1dULkRPVUJMRV9CVUZGRVJFRCB8IFNXVC5CT1JERVIpOworCQlPcmRpbmF0ZV9MRUdFTkQgPSBvcmRpbmF0ZVN0cmluZzsKKwkJT3JkaW5hdGVfQVhJUyA9IHlBeGlzTGFiZWw7CisJCWRlZmF1bHRLZXkgPSBERUZBVUxUX0tFWV9QUkVGSVgrY2hhcnRJbmRleDsKKwkJZm9yZUdyb3VuZCAJCQk9IGZvcmVncm91bmQ7CisJCWJhY2tncm91bmRHcm91bmQgCT0gYmFja2dyb3VuZDsKKwkJZnJhbWVDb2xvciAJCQk9IGZyYW1lY29sb3I7CisJCXRoaXMuY2hhcnRJbmRleCA9IGNoYXJ0SW5kZXg7CisJCQorCQlnciA9IEdlbmVyYXRvci5pbnN0YW5jZSgpOworCisJCXRyeSB7CisJCQlpZHIgPSBQbHVnaW5TZXR0aW5ncy5pbnN0YW5jZSgpLmdldERldmljZSgiZHYuU1dUIik7IC8vJE5PTi1OTFMtMSQJCQkKKwkJfSBjYXRjaCAoZmluYWwgQ2hhcnRFeGNlcHRpb24gcGV4KSB7CisJCQlBY3RpdmF0b3IubG9nRXJyb3IoTWVzc2FnZXMuZ2V0U3RyaW5nKCJDT01NT04uRVJST1JJTklUIiksIHBleCk7IC8vJE5PTi1OTFMtMSQKKwkJCXJldHVybjsKKwkJfQorCisJCWNvbnRyb2wgPSAoQW5hbHlzaXNDb250cm9sKSBwYXJlbnQ7CisKKwkJCisJCWNtID0gY3JlYXRlU2ltcGxlTGluZUNoYXJ0KGRhdGFTZXJpZXNNYXAsIE1lc3NhZ2VzCisJCQkJLmdldFN0cmluZygiQ0MudGl0bGUiKSk7IC8vJE5PTi1OTFMtMSQKKwkJCisJCXJlc2V0RGF0YSgpOworCQlhZGRQYWludExpc3RlbmVyKG5ldyBQYWludExpc3RlbmVyKCkgeworCQkJcHVibGljIHZvaWQgcGFpbnRDb250cm9sKGZpbmFsIFBhaW50RXZlbnQgcGUpIHsKKworCQkJCWZpbmFsIENvbXBvc2l0ZSBzb3VyY2UgPSAoQ29tcG9zaXRlKSBwZS5nZXRTb3VyY2UoKTsKKwkJCQlmaW5hbCBvcmcuZWNsaXBzZS5zd3QuZ3JhcGhpY3MuUmVjdGFuZ2xlIGQgPSBzb3VyY2UKKwkJCQkJCS5nZXRDbGllbnRBcmVhKCk7CisKKwkJCQlpZihpbWdDaGFydCAhPSBudWxsKSBpbWdDaGFydC5kaXNwb3NlKCk7CisJCQkJaW1nQ2hhcnQgPSBuZXcgSW1hZ2Uoc291cmNlLmdldERpc3BsYXkoKSwgZCk7CisJCQkJaWRyLnNldFByb3BlcnR5KElEZXZpY2VSZW5kZXJlci5HUkFQSElDU19DT05URVhULCBuZXcgR0MoCisJCQkJCQlpbWdDaGFydCkpOworCQkJCWZpbmFsIEJvdW5kcyBib3VuZHMgPSBCb3VuZHNJbXBsLmNyZWF0ZShkLngsIGQueSwgZC53aWR0aCwKKwkJCQkJCWQuaGVpZ2h0KTsKKwkJCQlib3VuZHMuc2NhbGUoNzJkIC8gaWRyLmdldERpc3BsYXlTZXJ2ZXIoKS5nZXREcGlSZXNvbHV0aW9uKCkpOworCQkJCS8vIEJPVU5EUyBNVVNUIEJFIFNQRUNJRklFRCBJTiBQT0lOVFMKKworCQkJCXRyeSB7CisJCQkJCWdyLnJlbmRlcihpZHIsIGdyLmJ1aWxkKGlkci5nZXREaXNwbGF5U2VydmVyKCksIGNtLCBib3VuZHMsCisJCQkJCQkJbnVsbCwgbnVsbCwgbnVsbCkpOworCQkJCQlwZS5nYy5kcmF3SW1hZ2UoaW1nQ2hhcnQsIGQueCwgZC55KTsKKwkJCQl9IGNhdGNoIChmaW5hbCBDaGFydEV4Y2VwdGlvbiBjZSkgeworCQkJCQlBY3RpdmF0b3IubG9nRXJyb3IoTWVzc2FnZXMuZ2V0U3RyaW5nKCJDT01NT04uRVJST1JJTklUIiksIGNlKTsgLy8kTk9OLU5MUy0xJAorCQkJCX0KKwkJCX0gLy8gcGFpbnRDb250cm9sCisJCX0gLy8gUGFpbnRMaXN0ZW5lcgorCQkpOworCQkKKwkJLy9DcmVhdGUgYSBjb250ZXh0IG1lbnUgZm9yIHRoZSBjYW52YXMKKwkJY3JlYXRlQ29udGV4dE1lbnUodGhpcyk7CisJCQorCisJfSAvLyBUaW1lU2VyaWVzQ2FudmFzCisKKwkKKwkKKwkvKioKKwkgKiBUaGUgbWV0aG9kIHdoaWNoIGdldHMgdGhlIHtAbGluayBYWVNlcmllc0NhbnZhc30nIHJlcG9ydHMgbGlzdCwgYW5kCisJICogZHJhd3MgaXQgb24gdGhlIHtAbGluayBYWVNlcmllc0NhbnZhc30uCisJICogCisJICovCisJcHVibGljIHZvaWQgZHJhdygpIHsKKworCQkKKwkJCisJCQorCQlyZXNldERhdGEoKTsKKwkJCisJCW1heFkgPSAtMS4wOworCQltaW5ZID0gMC4wOworCQltYXhYID0gLTEuMDsKKwkJbWluWCA9IDAuMDsKKwkJZG91YmxlIGFkanVzdGVkTWF4WSA9IDAuMDsKKwkJZG91YmxlIGFkanVzdGVkTWF4WCA9IDAuMDsKKwkJCisJCS8vIGdldCB0aGUgeCx5IGRhdGEgKGk9MCkKKwkJLy8gYW5kIHRoZSB4LCBmaXRZIGRhdGEgKGk9MSkKKwkJZm9yKGludCBpID0gMDsgaSA8PSAxOyBpICsrKSB7CisJCQkKKwkJCS8vIG9uZSBYWSBkYXRhIHNldCBwZXIgY2hhcnQKKwkJCS8vZm9yIChpbnQgaSA9IDA7IGkgPCBtYXhMaW5lczsgaSArKykgeworCQkJU3RyaW5nIHByb3BlcnR5ID0gIlhZIitjaGFydEluZGV4OworCQkJaWYoaT09MSkgcHJvcGVydHkgPSAiRklUIitjaGFydEluZGV4OworCQkJCisJCQlpZighZGF0YVNlcmllc01hcC5jb250YWluc0tleShwcm9wZXJ0eSkpIHsKKwkJCQkvLyBuZXcgcHJvcGVydHkKKwkJCQlEYXRhWFlTZXJpZXMgc2VyaWVzID0gbmV3IERhdGFYWVNlcmllcyhwcm9wZXJ0eSk7CisJCQkJc2VyaWVzQ291bnQgKys7CisJCQkJZGF0YVNlcmllc01hcC5wdXQocHJvcGVydHksIHNlcmllcyk7CisJCQl9CisJCQlEYXRhWFlTZXJpZXMgc2VyaWVzID0gZGF0YVNlcmllc01hcC5nZXQocHJvcGVydHkpOworCQkJaWYoc2VyaWVzLmlzVmlzaWJsZSgpKSB7CisJCQkJc2VyaWVzLnNob3coKTsKKwkJCX0gZWxzZSB7CisJCQkJc2VyaWVzLmhpZGUoKTsKKwkJCX0KKwkJCQorCQkJLy8gR2V0IHRoZSB2YWx1ZXMgZm9yIHRoZSBwcm9wZXJ0eSB0byBiZSBwbG90dGVkCisJCQlpbnQgbWF4UG9pbnRzID0gMDsKKwkJCQorCQkJZmluYWwgZG91YmxlW10gZG91YmxlVmFsdWVzWCA9IGNvbnRyb2wuZ2V0VmFsdWVzKGNoYXJ0SW5kZXgsKDIqaSkrMik7CisJCQlmaW5hbCBkb3VibGVbXSBkb3VibGVWYWx1ZXNZID0gY29udHJvbC5nZXRWYWx1ZXMoY2hhcnRJbmRleCwoMippKSszKTsKKwkJCQorCQkJLy8gdXBkYXRlIHRoZSBtaW4gbWF4IHNjYWxlcworCQkJZm9yIChpbnQgaiA9IDA7IGogPCBkb3VibGVWYWx1ZXNYLmxlbmd0aDsgaisrKSB7CQorCQkJCWlmKGRvdWJsZVZhbHVlc1lbal0gPD0gbWluWSkgeworCQkJCQltaW5ZID0gZG91YmxlVmFsdWVzWVtqXTsKKwkJCQkJbWluWSA9IE1hdGgucm91bmQobWluWSk7CisJCQkJfQorCQkJCWlmKGRvdWJsZVZhbHVlc1hbal0gPD0gbWluWCkgeworCQkJCQltaW5YID0gZG91YmxlVmFsdWVzWFtqXTsKKwkJCQkJbWluWCA9IE1hdGgucm91bmQobWluWCk7CisJCQkJfQorCQkJCQorCQkJCWlmKGRvdWJsZVZhbHVlc1lbal0gPj0gbWF4WSkgeworCQkJCQltYXhZID0gZG91YmxlVmFsdWVzWVtqXTsKKwkJCQkJZG91YmxlIGxvZyA9IE1hdGguZmxvb3IoTWF0aC5sb2cxMChtYXhZKSk7CisJCQkJCWFkanVzdGVkTWF4WSA9IChNYXRoLmNlaWwobWF4WS9NYXRoLnBvdygxMCwgbG9nKSkpKk1hdGgucG93KDEwLCBsb2cpOworCQkJCSAgLy8gIGlmKGFkanVzdGVkTWF4WSA8PSAxLjApIGFkanVzdGVkTWF4WSA9IDEuMDsKKwkJCQl9Ly8gbWF4WQorCQkJCWlmKGRvdWJsZVZhbHVlc1hbal0gPj0gbWF4WCkgeworCQkJCQltYXhYID0gMS4wMipkb3VibGVWYWx1ZXNYW2pdOworCQkJCQlkb3VibGUgbG9nID0gTWF0aC5mbG9vcihNYXRoLmxvZzEwKG1heFgpKTsKKwkJCQkJYWRqdXN0ZWRNYXhYID0gKE1hdGguY2VpbChtYXhYL01hdGgucG93KDEwLCBsb2cpKSkqTWF0aC5wb3coMTAsIGxvZyk7CisJCQkJICAgIC8vaWYoYWRqdXN0ZWRNYXhYIDw9IDEuMCkgYWRqdXN0ZWRNYXhYID0gMS4wOworCQkJCX0vLyBtYXhYCisJCQl9Ly8gZm9yIGFsbCBwb2ludHMKKwkJCQorCQkJCisJCQkKKwkJCS8vU3lzdGVtLm91dC5wcmludGxuKCJhZGp1c3RlZE1heFggPSAiK2FkanVzdGVkTWF4WCk7CisJCQl4QXhpc1ByaW1hcnkuZ2V0U2NhbGUoKS5zZXRNaW4oTnVtYmVyRGF0YUVsZW1lbnRJbXBsLmNyZWF0ZSgwLjApKTsKKwkJCXhBeGlzUHJpbWFyeS5nZXRTY2FsZSgpLnNldE1heChOdW1iZXJEYXRhRWxlbWVudEltcGwuY3JlYXRlKGFkanVzdGVkTWF4WCkpOworCQkJZG91YmxlIHN0ZXBYID0gYWRqdXN0ZWRNYXhYIC8gMTAuMDsKKwkJCS8vU3lzdGVtLm91dC5wcmludGxuKCJzdGVwID0gIitzdGVwWCk7CisJCQl4QXhpc1ByaW1hcnkuZ2V0U2NhbGUoKS5zZXRTdGVwKHN0ZXBYKTsKKwkJCXhBeGlzUHJpbWFyeS5zZXRUeXBlKEF4aXNUeXBlLkxJTkVBUl9MSVRFUkFMKTsKKworCisJCQl5QXhpc1ByaW1hcnkuZ2V0U2NhbGUoKS5zZXRNaW4oTnVtYmVyRGF0YUVsZW1lbnRJbXBsLmNyZWF0ZShtaW5ZKSk7CisJCQl5QXhpc1ByaW1hcnkuZ2V0U2NhbGUoKS5zZXRNYXgoTnVtYmVyRGF0YUVsZW1lbnRJbXBsLmNyZWF0ZShhZGp1c3RlZE1heFkpKTsKKwkJCWRvdWJsZSBzdGVwWSA9IGFkanVzdGVkTWF4WSAvIDEwLjA7CisJCQl5QXhpc1ByaW1hcnkuZ2V0U2NhbGUoKS5zZXRTdGVwKHN0ZXBZKTsKKwkJCXlBeGlzUHJpbWFyeS5zZXRUeXBlKEF4aXNUeXBlLkxJTkVBUl9MSVRFUkFMKTsKKworCQkJLy8gQW55IHZhbHVlcz8KKwkJCWlmIChkb3VibGVWYWx1ZXNYLmxlbmd0aCA+IDApIHsKKwkJCQlpZiAobWF4UG9pbnRzIDwgZG91YmxlVmFsdWVzWC5sZW5ndGgpIHsKKwkJCQkJbWF4UG9pbnRzID0gZG91YmxlVmFsdWVzWC5sZW5ndGg7CisJCQkJfQorCQkJCisJCQkJZm9yIChpbnQgY3ljbGVOdW1iZXIgPSAwOyBjeWNsZU51bWJlciA8IGRvdWJsZVZhbHVlc1gubGVuZ3RoOyBjeWNsZU51bWJlcisrKSB7CisJCQkJCURvdWJsZSB2YWx1ZVggPSBuZXcgRG91YmxlKGRvdWJsZVZhbHVlc1hbY3ljbGVOdW1iZXJdKTsKKwkJCQkJRG91YmxlIHZhbHVlWSA9IG5ldyBEb3VibGUoZG91YmxlVmFsdWVzWVtjeWNsZU51bWJlcl0pOworCQkJCQlzZXJpZXMuYWRkVmFsdWUodmFsdWVYLHZhbHVlWSk7CisJCQkJfSAvLyBmb3IgY3ljbGVOdW1iZXIKKwkJCQkKKwkJCX0gZWxzZSB7CisJCQkJLy9yZXNldERhdGEoKTsKKwkJCX0KKwkJCQorCQl9Ly8geHkgZGF0YSBhbmQgZml0CisJCQorCisJCWlmICghdGhpcy5pc0Rpc3Bvc2VkKCkpIHsKKwkJCXJlZHJhdygpOworCQl9CisJCQorCQkKKwkJCisJCXJldHVybjsKKwl9IC8vIHBhaW50Q29udHJvbAorCisJLyoqCisJICogQHBhcmFtIGRhdGFYWVNlcmllc01hcAorCSAqICAgICAgICAgICAgdGhlIHtAbGluayBMaXN0fSB0aGF0IHdpbGwgY29udGFpbiB0aGUgcmVsYXRpdmUgdmFsdWVzCisJICogICAgICAgICAgICAoMC4wLTEuMCkgdG8gcGxvdAorCSAqIEBwYXJhbSBzZXJpZXNJZGVudGlmaWVyCisJICogICAgICAgICAgICB0aGUgdGl0bGUgb2YgdGhlIGNoYXJ0CisJICogQHJldHVybiBhIDxjb2RlPkNoYXJ0PC9jb2RlPgorCSAqLworCXB1YmxpYyBmaW5hbCBDaGFydCBjcmVhdGVTaW1wbGVMaW5lQ2hhcnQoCisJCQlmaW5hbCBNYXA8U3RyaW5nLCBEYXRhWFlTZXJpZXM+IGRhdGFYWVNlcmllc01hcCwgZmluYWwgU3RyaW5nIHNlcmllc0lkZW50aWZpZXIpIHsKKwkJCisJCWZpbmFsIENoYXJ0V2l0aEF4ZXMgcmV0VmFsdWUgPSBDaGFydFdpdGhBeGVzSW1wbC5jcmVhdGUoKTsKKworCQkKKwkJLy8gUGxvdAorCQlyZXRWYWx1ZS5nZXRCbG9jaygpLnNldEJhY2tncm91bmQoZnJhbWVDb2xvcik7CisJCWZpbmFsIFBsb3QgcCA9IHJldFZhbHVlLmdldFBsb3QoKTsKKwkJcC5nZXRDbGllbnRBcmVhKCkuc2V0QmFja2dyb3VuZChiYWNrZ3JvdW5kR3JvdW5kKTsKKworCQkvLyBUaXRsZQorCQkvLyBjd2FMaW5lLmdldFRpdGxlKCApLmdldExhYmVsKCApLmdldENhcHRpb24oICkuc2V0VmFsdWUoICJMaW5lIENoYXJ0IgorCQkvLyApOy8vJE5PTi1OTFMtMSQKKwkJcmV0VmFsdWUuZ2V0VGl0bGUoKS5zZXRWaXNpYmxlKGZhbHNlKTsKKworCQkvLyBMZWdlbmQKKwkJbGVnZW5kID0gcmV0VmFsdWUuZ2V0TGVnZW5kKCk7CisJCWZpbmFsIExpbmVBdHRyaWJ1dGVzIGxpYSA9IGxlZ2VuZC5nZXRPdXRsaW5lKCk7CisJCWxlZ2VuZC5nZXRUZXh0KCkuZ2V0Rm9udCgpLnNldFNpemUoOCk7CisJCWxpYS5zZXRTdHlsZShMaW5lU3R5bGUuU09MSURfTElURVJBTCk7CisJCWxlZ2VuZC5nZXRJbnNldHMoKS5zZXQoMTAsIDUsIDAsIDApOworCQlsZWdlbmQuZ2V0T3V0bGluZSgpLnNldFZpc2libGUoZmFsc2UpOworCQlsZWdlbmQuc2V0QW5jaG9yKEFuY2hvci5OT1JUSF9MSVRFUkFMKTsKKwkJbGVnZW5kLnNldFBvc2l0aW9uKFBvc2l0aW9uLkJFTE9XX0xJVEVSQUwpOworCQlsZWdlbmQuZ2V0VGV4dCgpLnNldENvbG9yKGZvcmVHcm91bmQpOworCQlsZWdlbmQuZ2V0T3V0bGluZSgpLnNldENvbG9yKGZvcmVHcm91bmQpOworCQkKKwkJLy8gY3dhTGluZS5nZXRMZWdlbmQoICkuZ2V0VGV4dCgpLmdldEZvbnQoKS5zZXRTaXplKDE2KTs7CisJCS8vIGN3YUxpbmUuZ2V0TGVnZW5kKCApLnNldFZpc2libGUoIHRydWUgKTsKKworCQkvLyAvLy8vLy8vLy8KKwkJLy8gWC1BeGlzCisJCXhBeGlzUHJpbWFyeSA9IHJldFZhbHVlLmdldFByaW1hcnlCYXNlQXhlcygpWzBdOworCQl4QXhpc1ByaW1hcnkuc2V0VHlwZShBeGlzVHlwZS5URVhUX0xJVEVSQUwpOworCQl4QXhpc1ByaW1hcnkuZ2V0TWFqb3JHcmlkKCkuc2V0VGlja1N0eWxlKFRpY2tTdHlsZS5CRUxPV19MSVRFUkFMKTsKKwkJeEF4aXNQcmltYXJ5LmdldE9yaWdpbigpLnNldFR5cGUoSW50ZXJzZWN0aW9uVHlwZS5WQUxVRV9MSVRFUkFMKTsKKwkJeEF4aXNQcmltYXJ5LmdldFRpdGxlKCkuc2V0VmlzaWJsZShmYWxzZSk7CisJCXhBeGlzUHJpbWFyeS5nZXRUaXRsZSgpLmdldENhcHRpb24oKS5nZXRGb250KCkuc2V0U2l6ZSg5KTsKKwkJeEF4aXNQcmltYXJ5LmdldFRpdGxlKCkuZ2V0Q2FwdGlvbigpLnNldENvbG9yKGZvcmVHcm91bmQpOworCQl4QXhpc1ByaW1hcnkuZ2V0TGFiZWwoKS5nZXRDYXB0aW9uKCkuc2V0Q29sb3IoZm9yZUdyb3VuZCk7CisKKwkJLy8gLy8vLy8vLy8KKwkJLy8gWS1BeGlzCisJCXlBeGlzUHJpbWFyeSA9IHJldFZhbHVlLmdldFByaW1hcnlPcnRob2dvbmFsQXhpcyh4QXhpc1ByaW1hcnkpOworCQl5QXhpc1ByaW1hcnkuZ2V0TWFqb3JHcmlkKCkuc2V0VGlja1N0eWxlKFRpY2tTdHlsZS5MRUZUX0xJVEVSQUwpOworCisJCS8vIE51bWJlckRhdGFTZXRbXSBvcnRob1ZhbHVlcyA9IG5ldyBOdW1iZXJEYXRhU2V0W01BWF9MSU5FU107CisJCS8vIFNlcmllc0RlZmluaXRpb25bXSBzZFkgPSBuZXcgU2VyaWVzRGVmaW5pdGlvbltNQVhfTElORVNdOworCisJCS8vIGVuZCBZLVNlcmllcworCisJCS8vIHhBeGlzCisJCXhBeGlzUHJpbWFyeS5nZXRTY2FsZSgpLnNldE1pbihOdW1iZXJEYXRhRWxlbWVudEltcGwuY3JlYXRlKDAuMCkpOworCQl4QXhpc1ByaW1hcnkuZ2V0U2NhbGUoKS5zZXRNYXgoTnVtYmVyRGF0YUVsZW1lbnRJbXBsLmNyZWF0ZSgxLjApKTsKKwkJeEF4aXNQcmltYXJ5LmdldFNjYWxlKCkuc2V0U3RlcCgwLjEpOworCQl4QXhpc1ByaW1hcnkuZ2V0TGFiZWwoKS5nZXRDYXB0aW9uKCkuZ2V0Rm9udCgpLnNldFNpemUoOSk7CisJCXhBeGlzUHJpbWFyeS5nZXRMYWJlbCgpLmdldENhcHRpb24oKS5zZXRDb2xvcihmb3JlR3JvdW5kKTsKKwkJeEF4aXNQcmltYXJ5LmdldFRpdGxlKCkuc2V0VmlzaWJsZSh0cnVlKTsKKwkJeEF4aXNQcmltYXJ5LmdldFRpdGxlKCkuZ2V0Q2FwdGlvbigpLnNldFZhbHVlKE1lc3NhZ2VzLmdldFN0cmluZygiVFMuVElNRUxBQkVMIikpOworCisJCXlBeGlzUHJpbWFyeS5nZXRTY2FsZSgpLnNldE1pbihOdW1iZXJEYXRhRWxlbWVudEltcGwuY3JlYXRlKDAuMCkpOworCQl5QXhpc1ByaW1hcnkuZ2V0U2NhbGUoKS5zZXRNYXgoTnVtYmVyRGF0YUVsZW1lbnRJbXBsLmNyZWF0ZSgxLjApKTsKKwkJeUF4aXNQcmltYXJ5LmdldFNjYWxlKCkuc2V0U3RlcCgwLjEpOworCQl5QXhpc1ByaW1hcnkuZ2V0TGFiZWwoKS5nZXRDYXB0aW9uKCkuZ2V0Rm9udCgpLnNldFNpemUoOSk7CisJCXlBeGlzUHJpbWFyeS5nZXRMYWJlbCgpLmdldENhcHRpb24oKS5zZXRDb2xvcihmb3JlR3JvdW5kKTsKKwkJeUF4aXNQcmltYXJ5LmdldFRpdGxlKCApLmdldENhcHRpb24oICkuc2V0VmFsdWUoIE9yZGluYXRlX0FYSVMgKTsKKwkJeUF4aXNQcmltYXJ5LmdldFRpdGxlKCApLnNldFZpc2libGUodHJ1ZSk7CisJCS8vIHlBeGlzUHJpbWFyeS5nZXRNYWpvckdyaWQoKS5nZXRMaW5lQXR0cmlidXRlcygpLnNldENvbG9yKGZvcmVHcm91bmQpOworCQkKKwkJLy8gZm9yIG5vdyBnZXQgcmVhZHkgdG8gY3JlYXRlIG9ubHkgb25lIGxpbmUgLSB3ZSBoYXZlIG5vIGRhdGEgeWV0LgorCQkvLyB3ZSB3aWxsIGFkZCBtb3JlIGxpbmVzIGFzIHdlIG5lZWQgdGhlbQorCQkvLyBoYW5kbGUgbnVsbAorCQlpZighZGF0YVhZU2VyaWVzTWFwLmNvbnRhaW5zS2V5KGRlZmF1bHRLZXkpKSB7CisJCQlEYXRhWFlTZXJpZXMgc2VyaWVzID0gbmV3IERhdGFYWVNlcmllcyhkZWZhdWx0S2V5KTsKKwkJCXNlcmllc0NvdW50ICsrOworCQkJZGF0YVhZU2VyaWVzTWFwLnB1dChkZWZhdWx0S2V5LCBzZXJpZXMpOworCQl9CisKKwkJcmV0dXJuIHJldFZhbHVlOworCX0gLy8gY3JlYXRlU2ltcGxlTGluZUNoYXJ0CisKKwkKKwkvKioKKwkgKiBDcmVhdGUgdGhlIHZpZXcncyBjb250ZXh0IG1lbnUgYW5kIGFkZCB0aGUgYWN0aW9uIGhhbmRsZXJzIHRvIGl0LgorCSAqLworCXByb3RlY3RlZCB2b2lkIGNyZWF0ZUNvbnRleHRNZW51KGZpbmFsIENvbXBvc2l0ZSBwYXJlbnQpIHsKKworCQkvLyBJbml0IGEgQ29udGV4dCBNZW51IE1hbmFnZXIKKwkJZmluYWwgTWVudU1hbmFnZXIgY29udGV4dE1lbnVNYW5hZ2VyID0gbmV3IE1lbnVNYW5hZ2VyKCk7CisKKwkJLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKwkJbGluZWFyVGltZUFjdGlvbiA9IG5ldyBMaW5lYXJTY2FsZUFjdGlvbigpOworCQlsb2dUaW1lQWN0aW9uID0gbmV3IExvZ1NjYWxlQWN0aW9uKCk7CisJCWNvbnRleHRNZW51TWFuYWdlci5hZGQobGluZWFyVGltZUFjdGlvbik7CisJCWNvbnRleHRNZW51TWFuYWdlci5hZGQobG9nVGltZUFjdGlvbik7CisKKworCQkKKwkJLy8gUGxhY2UgSG9sZGVyIGZvciBNZW51IEFkZGl0aW9ucworCQljb250ZXh0TWVudU1hbmFnZXIuYWRkKG5ldyBTZXBhcmF0b3IoCisJCQkJSVdvcmtiZW5jaEFjdGlvbkNvbnN0YW50cy5NQl9BRERJVElPTlMpKTsKKworCQkvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwkJCisJCXZpZXdMZWdlbmQgPSBuZXcgTGVnZW5kVmlld0FjdGlvbigpOworCQloaWRlTGVnZW5kID0gbmV3IExlZ2VuZEhpZGVBY3Rpb24oKTsKKwkJY29udGV4dE1lbnVNYW5hZ2VyLmFkZCh2aWV3TGVnZW5kKTsKKwkJY29udGV4dE1lbnVNYW5hZ2VyLmFkZChoaWRlTGVnZW5kKTsKKwkJCisJCS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCQkKKwkJCisJCS8vIFBsYWNlIEhvbGRlciBmb3IgTWVudSBBZGRpdGlvbnMKKwkJY29udGV4dE1lbnVNYW5hZ2VyLmFkZChuZXcgU2VwYXJhdG9yKAorCQkJCUlXb3JrYmVuY2hBY3Rpb25Db25zdGFudHMuTUJfQURESVRJT05TKSk7CisKKwkJcG9wVXBNZW51ID0gY29udGV4dE1lbnVNYW5hZ2VyLmNyZWF0ZUNvbnRleHRNZW51KHBhcmVudCk7CisKKwkJLy8gU2V0IHRoZSBjb250ZXh0IG1lbnUgZm9yIHRoZSB2aWV3ZXIKKwkJcGFyZW50LnNldE1lbnUocG9wVXBNZW51KTsKKworCX0gLy8gY3JlYXRlQ29udGV4dE1lbnUKKwkKKwkvKioKKwkgKiBVcGRhdGUgdGhlIHZpZXcncyBjb250ZXh0IG1lbnUgYW5kIGFkZCB0aGUgYWN0aW9uIGhhbmRsZXJzIHRvIGl0LgorCSAqLworCUBTdXBwcmVzc1dhcm5pbmdzKCJ1bnVzZWQiKQorCXByaXZhdGUgdm9pZCB1cGRhdGVDb250ZXh0TWVudShmaW5hbCBDb21wb3NpdGUgcGFyZW50KSB7CisKKwkJcG9wVXBNZW51LmRpc3Bvc2UoKTsKKworCQkvLyBJbml0IGEgQ29udGV4dCBNZW51IE1hbmFnZXIKKwkJZmluYWwgTWVudU1hbmFnZXIgY29udGV4dE1lbnVNYW5hZ2VyID0gbmV3IE1lbnVNYW5hZ2VyKCk7CisKKwkJLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKwkJbGluZWFyVGltZUFjdGlvbiA9IG5ldyBMaW5lYXJTY2FsZUFjdGlvbigpOworCQlsb2dUaW1lQWN0aW9uID0gbmV3IExvZ1NjYWxlQWN0aW9uKCk7CisJCWNvbnRleHRNZW51TWFuYWdlci5hZGQobGluZWFyVGltZUFjdGlvbik7CisJCWNvbnRleHRNZW51TWFuYWdlci5hZGQobG9nVGltZUFjdGlvbik7CisJCQorCQkvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworCisJCS8vIFBsYWNlIEhvbGRlciBmb3IgTWVudSBBZGRpdGlvbnMKKwkJY29udGV4dE1lbnVNYW5hZ2VyLmFkZChuZXcgU2VwYXJhdG9yKAorCQkJCUlXb3JrYmVuY2hBY3Rpb25Db25zdGFudHMuTUJfQURESVRJT05TKSk7CisKKwkJLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJCQorCQl2aWV3TGVnZW5kID0gbmV3IExlZ2VuZFZpZXdBY3Rpb24oKTsKKwkJaGlkZUxlZ2VuZCA9IG5ldyBMZWdlbmRIaWRlQWN0aW9uKCk7CisJCWNvbnRleHRNZW51TWFuYWdlci5hZGQodmlld0xlZ2VuZCk7CisJCWNvbnRleHRNZW51TWFuYWdlci5hZGQoaGlkZUxlZ2VuZCk7CisJCQorCQkvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwkJCisJCQorCQkvLyBQbGFjZSBIb2xkZXIgZm9yIE1lbnUgQWRkaXRpb25zCisJCWNvbnRleHRNZW51TWFuYWdlci5hZGQobmV3IFNlcGFyYXRvcigKKwkJCQlJV29ya2JlbmNoQWN0aW9uQ29uc3RhbnRzLk1CX0FERElUSU9OUykpOworCisJCQorCQkvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwkJLy8gYWRkIHRoZSBkaXNwbGF5YWJsZSBwcm9wZXJ0aWVzCisJCWZvciAoaW50IGkgPSAwOyBpIDwgY29udHJvbC5nZXROdW1Qcm9wZXJ0aWVzKGNoYXJ0SW5kZXgpOyBpICsrKSB7CisJCQkKKwkJCVN0cmluZyBuZXh0UHJvcCA9IGNvbnRyb2wuZ2V0UHJvcGVydHkoY2hhcnRJbmRleCxpKTsKKwkJCURhdGFYWVNlcmllcyBzZXJpZXMgPSBkYXRhU2VyaWVzTWFwLmdldChuZXh0UHJvcCk7CisJCQlEaXNwbGF5YWJsZVByb3BlcnR5IHByb3BlcnR5ID0gbmV3IERpc3BsYXlhYmxlUHJvcGVydHkobmV4dFByb3AsIHNlcmllcy5pc1Zpc2libGUoKSk7CisJCQljb250ZXh0TWVudU1hbmFnZXIuYWRkKHByb3BlcnR5KTsKKwkJfQorCisJCS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisJCS8vIFBsYWNlIEhvbGRlciBmb3IgTWVudSBBZGRpdGlvbnMKKwkJY29udGV4dE1lbnVNYW5hZ2VyLmFkZChuZXcgU2VwYXJhdG9yKAorCQkJCUlXb3JrYmVuY2hBY3Rpb25Db25zdGFudHMuTUJfQURESVRJT05TKSk7CisKKwkJLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKwkJZmluYWwgTWVudSBwb3BVcE1lbnUgPSBjb250ZXh0TWVudU1hbmFnZXIuY3JlYXRlQ29udGV4dE1lbnUocGFyZW50KTsKKworCQkvLyBTZXQgdGhlIGNvbnRleHQgbWVudSBmb3IgdGhlIHZpZXdlcgorCQlwYXJlbnQuc2V0TWVudShwb3BVcE1lbnUpOworCisKKwl9IC8vIHVwZGF0ZUNvbnRleHRNZW51CisKKworCQorCS8qKgorCSAqIFNldHMgdGhlIGNvbG9ycyBmb3IgYSBuIGFycmF5IG9mIFNjYXR0ZXJTZXJpZXMgZ2l2ZW4gdGhlIHByb3BlcnR5IHRvIFBsb3QKKwkgKiBmb3IgZWFjaC4gVHJ5IHRvIHNldCBjb2xvciBmcm9tIHRoZSBwcmVmZXJlbmNlcyAoaWYgc3BlY2lmaWVkIGZvciB0aGF0CisJICogcHJvcGVydHkpIG90aGVyd2lzZSBzZXRzIGxpbmUgY29sb3IgdG8gYmx1ZS4KKwkgKiAKKwkgKiBAcGFyYW0gcHJvcGVydGllc1RvUGxvdAorCSAqIEBwYXJhbSBsc0xpc3QKKwkgKi8KKwlwdWJsaWMgc3RhdGljIHZvaWQgc2V0Q29sb3JEZWZzKAorCQkJZmluYWwgTGlzdDxTdHJpbmc+IHByb3BlcnRpZXNUb1Bsb3QsCisJCQlmaW5hbCBMaXN0PFNjYXR0ZXJTZXJpZXM+IGxzTGlzdCkgeworCQkvLyB0aGUgZGVmYXVsdCBsaW5lIGNvbG9yCisKKwkJLy8gaWYgcG9zc2libGUgZ2V0IGNvbG9yIGZyb20gcHJlZmVyZW5jZXMKKwkJZmluYWwgTWFwPFN0cmluZywgQ29sb3I+IGNvbG9yTWFwID0gVmlzdWFsaXphdGlvblByZWZlcmVuY2VQYWdlCisJCQkJLmdldENvbG9yTWFwcGluZygpOworCQlmb3IgKGludCBpID0gMDsgaSA8IGxzTGlzdC5zaXplKCk7IGkrKykgeworCQkJQ29sb3JEZWZpbml0aW9uIGNvbG9yID0gQ29sb3JEZWZpbml0aW9uSW1wbC5CTFVFKCk7CisKKwkJCWlmICgocHJvcGVydGllc1RvUGxvdCAhPSBudWxsKSAmJiAocHJvcGVydGllc1RvUGxvdC5zaXplKCkgPiBpKSkgeworCQkJCWZpbmFsIFN0cmluZyBrZXkgPSBwcm9wZXJ0aWVzVG9QbG90LmdldChpKTsKKwkJCQkvLyBsb29rIG9yIHRoZSBwcmVmZXJlbmNlIGNvbG9yIGJ5IG5hbWUKKwkJCQlpZiAoY29sb3JNYXAuY29udGFpbnNLZXkoa2V5KSkgeworCQkJCQlmaW5hbCBDb2xvciBjID0gY29sb3JNYXAuZ2V0KGtleSk7CisJCQkJCWNvbG9yID0gQ29sb3JEZWZpbml0aW9uSW1wbC5jcmVhdGUoYy5nZXRSZWQoKSwKKwkJCQkJCQljLmdldEdyZWVuKCksIGMuZ2V0Qmx1ZSgpKTsKKwkJCQl9CisJCQkJbHNMaXN0LmdldChpKS5zZXRTZXJpZXNJZGVudGlmaWVyKGtleSk7CisJCQkJbHNMaXN0LmdldChpKS5nZXRMaW5lQXR0cmlidXRlcygpLnNldENvbG9yKGNvbG9yKTsKKwkJCX0gZWxzZSB7CisKKwkJCQlpZiAobHNMaXN0LmdldChpKSAhPSBudWxsKSB7CisJCQkJCWxzTGlzdC5nZXQoaSkuc2V0U2VyaWVzSWRlbnRpZmllcigiICIpOworCQkJCQlsc0xpc3QuZ2V0KGkpLmdldExpbmVBdHRyaWJ1dGVzKCkuc2V0Q29sb3IoY29sb3IpOworCQkJCX0KKwkJCX0KKwkJfQorCQlyZXR1cm47CisJfS8vIGdldENvbG9yRGVmCisKKworCQorCisJLyoqCisJICogRGlzcG9zZXMgdGhlIENvbG9yIG9iamVjdHMKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBkaXNwb3NlKCkgeworCQlzdXBlci5kaXNwb3NlKCk7CisJfQorCisJLyoqCisJICogcmVzZXQKKwkgKi8KKwlwdWJsaWMgdm9pZCByZXNldCgpIHsKKwkJcmVzZXREYXRhKCk7CisJCXJlZHJhdygpOworCX0KKworCXByb3RlY3RlZCB2b2lkIHJlc2V0RGF0YSgpIHsKKwkJY2xlYXJEYXRhKCk7CisJfQorCisJcHJpdmF0ZSB2b2lkIGNsZWFyRGF0YSgpIHsKKwkJCisJCUl0ZXJhdG9yPFN0cmluZz4gaXRlciA9IGRhdGFTZXJpZXNNYXAua2V5U2V0KCkuaXRlcmF0b3IoKTsKKwkJd2hpbGUoKGl0ZXIhPW51bGwpJiYoaXRlci5oYXNOZXh0KCkpKSB7CisJCQlTdHJpbmcga2V5ID0gaXRlci5uZXh0KCk7CisJCQlEYXRhWFlTZXJpZXMgc2VyaWVzID0gZGF0YVNlcmllc01hcC5nZXQoa2V5KTsKKwkJCXNlcmllcy55VmFsdWVzLmNsZWFyKCk7CisJCQlzZXJpZXMueFZhbHVlcy5jbGVhcigpOworCQkJc2VyaWVzLmFkZFZhbHVlKG5ldyBEb3VibGUoMC4wKSwgbmV3IERvdWJsZSgwLjApKTsKKwkJfQorCQkKKwl9CisKKwkKKwkvKioKKwkgKiB0b2dnbGUgdGhlIHNjYWxlIGZyb20gbG9nYXJpdGhtaWMgdG8gbGluZWFyCisJICovCisJdm9pZCB0b2dnbGVBeGlzU2NhbGUoKSB7CisvLwkJaWYgKHVzZUxpbmVhclRpbWVTY2FsZSkgeyAvL1N3aXRjaCB0byBsb2dhcml0aG1pYyBzY2FsZQorLy8JCQlsb2dUaW1lQWN0aW9uLnNldENoZWNrZWQodHJ1ZSk7CisvLwkJCWxpbmVhclRpbWVBY3Rpb24uc2V0Q2hlY2tlZChmYWxzZSk7CisvLwkJCS8vSnVzdCB1c2luZyB0aGUgZm9sbG93aW5nIGF4aXMgdHlwZSwgdG8gbW92ZSB0byBsb2cgc2NhbGUsIGRpZG4ndCB3b3JrCisvLwkJCS8veUF4aXNQcmltYXJ5LnNldFR5cGUoQXhpc1R5cGUuTE9HQVJJVEhNSUNfTElURVJBTCk7CisvLwkJCXlBeGlzUHJpbWFyeS5nZXRTY2FsZSgpLnNldE1pbihudWxsKTsKKy8vCQkJeUF4aXNQcmltYXJ5LmdldFNjYWxlKCkuc2V0TWF4KG51bGwpOworLy8JCQl5QXhpc1ByaW1hcnkuZ2V0U2NhbGUoKS51bnNldFN0ZXAoKTsKKy8vCQkJeUF4aXNQcmltYXJ5LmdldFNjYWxlKCkudW5zZXRTdGVwTnVtYmVyKCk7CisvLwkJfQorLy8JCWVsc2UgeyAvL1N3aXRjaCB0byBsaW5lYXIgc2NhbGUKKy8vCQkJbG9nVGltZUFjdGlvbi5zZXRDaGVja2VkKGZhbHNlKTsKKy8vCQkJbGluZWFyVGltZUFjdGlvbi5zZXRDaGVja2VkKHRydWUpOworLy8JCQkvL3lBeGlzUHJpbWFyeS5zZXRUeXBlKEF4aXNUeXBlLkxJTkVBUl9MSVRFUkFMKTsKKy8vCQkJeUF4aXNQcmltYXJ5LmdldFNjYWxlKCkuc2V0TWluKE51bWJlckRhdGFFbGVtZW50SW1wbC5jcmVhdGUoMC4wKSk7CisvLwkJCXlBeGlzUHJpbWFyeS5nZXRTY2FsZSgpLnNldE1heChOdW1iZXJEYXRhRWxlbWVudEltcGwuY3JlYXRlKDEuMCkpOworLy8JCQl5QXhpc1ByaW1hcnkuZ2V0U2NhbGUoKS5zZXRTdGVwKDAuMjUpOworLy8JCX0KKy8vCQl1c2VMaW5lYXJUaW1lU2NhbGUgPSAhdXNlTGluZWFyVGltZVNjYWxlOworLy8JCWRyYXcoKTsKKwl9CisJCisKKwkvKioKKwkgKiB0b2dnbGUgdGhlIHNjYWxlIGZyb20gbG9nYXJpdGhtaWMgdG8gbGluZWFyCisJICovCisJdm9pZCB0b2dnbGVMZWdlbmQoKSB7CisJCWlmIChzaG93TGVnZW5kKSB7IC8vU3dpdGNoIHRvIGhpZGUKKwkJCXZpZXdMZWdlbmQuc2V0Q2hlY2tlZChmYWxzZSk7CisJCQloaWRlTGVnZW5kLnNldENoZWNrZWQodHJ1ZSk7CisJCQlsZWdlbmQuc2V0VmlzaWJsZShmYWxzZSk7CisJCX0KKwkJZWxzZSB7IC8vU3dpdGNoIHRvIHZpZXcKKwkJCXZpZXdMZWdlbmQuc2V0Q2hlY2tlZCh0cnVlKTsKKwkJCWhpZGVMZWdlbmQuc2V0Q2hlY2tlZChmYWxzZSk7CisJCQlsZWdlbmQuc2V0VmlzaWJsZSh0cnVlKTsKKwkJfQorCQlzaG93TGVnZW5kID0gIXNob3dMZWdlbmQ7CisJCWRyYXcoKTsKKwl9CisKKworCS8qKgorCSAqIEFjdGlvbiB0byBzaG93IHRoZSBsZWdlbmQKKwkgKi8KKwlwcm90ZWN0ZWQgY2xhc3MgTGVnZW5kVmlld0FjdGlvbiBleHRlbmRzIEFjdGlvbiB7CisJCXB1YmxpYyBMZWdlbmRWaWV3QWN0aW9uKCkKKwkJeworCQkJc3VwZXIoTWVzc2FnZXMuZ2V0U3RyaW5nKCJDb250ZXh0TWVudS5TaG93TGVnZW5kIiksIElBY3Rpb24uQVNfQ0hFQ0tfQk9YKTsKKwkJCXNldENoZWNrZWQoc2hvd0xlZ2VuZCk7CisJCX0KKworCQkvKioKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uQWN0aW9uI2dldFRleHQoKQorCQkgKi8KKwkJQE92ZXJyaWRlCisJCXB1YmxpYyBTdHJpbmcgZ2V0VGV4dCgpIHsKKwkJCXJldHVybiBNZXNzYWdlcy5nZXRTdHJpbmcoIkNvbnRleHRNZW51LlNob3dMZWdlbmQiKTsKKwkJfQorCisJCS8qKgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5BY3Rpb24jcnVuKCkKKwkJICovCisJCUBPdmVycmlkZQorCQlwdWJsaWMgdm9pZCBydW4oKSB7CisJCQlpZiAoc2hvd0xlZ2VuZCkgeworCQkJCXNldENoZWNrZWQodHJ1ZSk7CisJCQkJLy9Ob3RoaW5nIHRvIGRvLiBJdCdzIGFscmVhZHkgbGluZWFyLXRpbWUuCisJCQl9CisJCQllbHNlIHsKKwkJCQl0b2dnbGVMZWdlbmQoKTsKKwkJCX0KKwkJCWRyYXcoKTsKKwkJfQorCX0gLy9MZWdlbmRWaWV3QWN0aW9uCisJCisJLyoqCisJICogQWN0aW9uIHRvIGhpZGUgdGhlIGxlZ2VuZAorCSAqLworCWNsYXNzIExlZ2VuZEhpZGVBY3Rpb24gZXh0ZW5kcyBBY3Rpb24gCXsKKwkJcHVibGljIExlZ2VuZEhpZGVBY3Rpb24oKQorCQl7CisJCQlzdXBlcihNZXNzYWdlcy5nZXRTdHJpbmcoIkNvbnRleHRNZW51LkhpZGVMZWdlbmQiKSwgSUFjdGlvbi5BU19DSEVDS19CT1gpOworCQkJc2V0Q2hlY2tlZCghc2hvd0xlZ2VuZCk7CisJCX0KKworCQkvKioKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uQWN0aW9uI2dldFRleHQoKQorCQkgKi8KKwkJQE92ZXJyaWRlCisJCXB1YmxpYyBTdHJpbmcgZ2V0VGV4dCgpIHsKKwkJCXJldHVybiBNZXNzYWdlcy5nZXRTdHJpbmcoIkNvbnRleHRNZW51LkhpZGVMZWdlbmQiKTsKKwkJfQorCisJCS8qKgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5BY3Rpb24jcnVuKCkKKwkJICovCisJCUBPdmVycmlkZQorCQlwdWJsaWMgdm9pZCBydW4oKSB7CisJCQlpZiAoIXNob3dMZWdlbmQpIHsKKwkJCQlzZXRDaGVja2VkKHRydWUpOworCQkJCS8vTm90aGluZyB0byBkby4gSXQncyBhbHJlYWR5IGxvZy10aW1lLgorCQkJfQorCQkJZWxzZSB7CisJCQkJdG9nZ2xlTGVnZW5kKCk7CisJCQl9CisJCQlkcmF3KCk7CisJCX0KKwl9Ly9MZWdlbmRIaWRlQWN0aW9uCisKKwkKKwkvKioKKwkgKiBzd2l0Y2ggdG8gbGluZWFyIHBsb3QgCisJICogCisJICovCisJcHJvdGVjdGVkIGNsYXNzIExpbmVhclNjYWxlQWN0aW9uIGV4dGVuZHMgQWN0aW9uIHsKKwkJcHVibGljIExpbmVhclNjYWxlQWN0aW9uKCkKKwkJeworCQkJc3VwZXIoTWVzc2FnZXMuZ2V0U3RyaW5nKCJDb250ZXh0TWVudS5MaW5lYXJUaW1lU2NhbGUiKSwgSUFjdGlvbi5BU19DSEVDS19CT1gpOworCQkJc2V0Q2hlY2tlZCh1c2VMaW5lYXJUaW1lU2NhbGUpOworCQl9CisKKwkJLyoqCisJCSAqIEBzZWUgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLkFjdGlvbiNnZXRUZXh0KCkKKwkJICovCisJCUBPdmVycmlkZQorCQlwdWJsaWMgU3RyaW5nIGdldFRleHQoKSB7CisJCQlyZXR1cm4gTWVzc2FnZXMuZ2V0U3RyaW5nKCJDb250ZXh0TWVudS5MaW5lYXJUaW1lU2NhbGUiKTsKKwkJfQorCisJCS8qKgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5BY3Rpb24jcnVuKCkKKwkJICovCisJCUBPdmVycmlkZQorCQlwdWJsaWMgdm9pZCBydW4oKSB7CisJCQlpZiAodXNlTGluZWFyVGltZVNjYWxlKSB7CisJCQkJc2V0Q2hlY2tlZCh0cnVlKTsKKwkJCQkvL05vdGhpbmcgdG8gZG8uIEl0J3MgYWxyZWFkeSBsaW5lYXItdGltZS4KKwkJCX0KKwkJCWVsc2UgeworCQkJCXRvZ2dsZUF4aXNTY2FsZSgpOworCQkJfQorCQkJZHJhdygpOworCQl9CisJfSAvL0xpbmVhclNjYWxlQWN0aW9uCisKKwkvKioKKwkgKiBzd2l0Y2ggdG8gc2VtaS1sb2cgcGxvdCAobG9nIHNjYWxlIG9uIHkgYXhpcykKKwkgKiAKKwkgKi8KKwljbGFzcyBMb2dTY2FsZUFjdGlvbiBleHRlbmRzIEFjdGlvbiAJeworCQlwdWJsaWMgTG9nU2NhbGVBY3Rpb24oKQorCQl7CisJCQlzdXBlcihNZXNzYWdlcy5nZXRTdHJpbmcoIkNvbnRleHRNZW51LkxvZ1RpbWVTY2FsZSIpLCBJQWN0aW9uLkFTX0NIRUNLX0JPWCk7CisJCQlzZXRDaGVja2VkKCF1c2VMaW5lYXJUaW1lU2NhbGUpOworCQl9CisKKwkJLyoqCisJCSAqIEBzZWUgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLkFjdGlvbiNnZXRUZXh0KCkKKwkJICovCisJCUBPdmVycmlkZQorCQlwdWJsaWMgU3RyaW5nIGdldFRleHQoKSB7CisJCQlyZXR1cm4gTWVzc2FnZXMuZ2V0U3RyaW5nKCJDb250ZXh0TWVudS5Mb2dUaW1lU2NhbGUiKTsKKwkJfQorCisJCS8qKgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5BY3Rpb24jcnVuKCkKKwkJICovCisJCUBPdmVycmlkZQorCQlwdWJsaWMgdm9pZCBydW4oKSB7CisJCQlpZiAoIXVzZUxpbmVhclRpbWVTY2FsZSkgeworCQkJCXNldENoZWNrZWQodHJ1ZSk7CisJCQkJLy9Ob3RoaW5nIHRvIGRvLiBJdCdzIGFscmVhZHkgbG9nLXRpbWUuCisJCQl9CisJCQllbHNlIHsKKwkJCQl0b2dnbGVBeGlzU2NhbGUoKTsKKwkJCX0KKwkJCWRyYXcoKTsKKwkJfQorCX0vL0xvZ1NjYWxlQWN0aW9uCisJCisJLyoqCisJICogRGlzcGxheWFibGVQcm9wZXJ0eQorCSAqCisJICovCisJcHJvdGVjdGVkIGNsYXNzIERpc3BsYXlhYmxlUHJvcGVydHkgZXh0ZW5kcyBBY3Rpb24KKwl7CisJCVN0cmluZyBwcm9wZXJ0eSA9IG51bGw7CisJCXB1YmxpYyBEaXNwbGF5YWJsZVByb3BlcnR5KFN0cmluZyBwcm9wZXJ0eSwgYm9vbGVhbiB2aXNpYmlsaXR5KQorCQl7CisJCQkJCXN1cGVyKHByb3BlcnR5LCBJQWN0aW9uLkFTX0NIRUNLX0JPWCk7CisJCQkJCXRoaXMucHJvcGVydHkgPSBwcm9wZXJ0eTsKKwkJCQkJc2V0Q2hlY2tlZCh2aXNpYmlsaXR5KTsKKwkJfQorCQkKKwkKKworCQkvKioKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uQWN0aW9uI2dldFRleHQoKQorCQkgKi8KKwkJQE92ZXJyaWRlCisJCXB1YmxpYyBTdHJpbmcgZ2V0VGV4dCgpIHsKKwkJCXJldHVybiBwcm9wZXJ0eTsKKwkJfQorCisJCS8qKgorCQkgKiBUb2dnbGUgdGhlIHN0YXRlCisJCSAqIEBzZWUgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLkFjdGlvbiNydW4oKQorCQkgKi8KKwkJQE92ZXJyaWRlCisJCXB1YmxpYyB2b2lkIHJ1bigpIHsKKwkJCQlEYXRhWFlTZXJpZXMgc2VyaWVzID0gZGF0YVNlcmllc01hcC5nZXQocHJvcGVydHkpOworCQkJCXNlcmllcy50b2dnbGVWaXNpYmxlKCk7CisJCQkJZGF0YVNlcmllc01hcC5wdXQocHJvcGVydHksc2VyaWVzKTsKKwkJCQlzZXRDaGVja2VkKHNlcmllcy5pc1Zpc2libGUoKSk7CisJCQkJZHJhdygpOworCQl9CisJfS8vIERpc3BsYXlhYmxlUHJvcGVydHkKKwkKKwkKKwkvKioKKwkgKiBJbm5lciBjbGFzcyBEYXRhWFlTZXJpZXMKKwkgKiBhbGwgdGhlIGRhdGEgb2JqZWN0cyBmb3IgYSBwbG90CisJICoKKwkgKi8KKwlwcm90ZWN0ZWQgY2xhc3MgRGF0YVhZU2VyaWVzIAorCXsKKwkJcHVibGljIFN0cmluZyBwcm9wZXJ0eU5hbWUgPSAiIjsKKwkJCisJCXB1YmxpYyBMaXN0PERvdWJsZT4geVZhbHVlcyA9IG5ldyBBcnJheUxpc3Q8RG91YmxlPigpOworCQlwdWJsaWMgTGlzdDxEb3VibGU+IHhWYWx1ZXMgPSBuZXcgQXJyYXlMaXN0PERvdWJsZT4oKTsKKwkJCisJCXB1YmxpYyBTZXJpZXMgc2VyaWVzWCA9IG51bGw7CisJCXB1YmxpYyBTY2F0dGVyU2VyaWVzIHNjYXR0ZXJTZXJpZXNZID0gbnVsbDsKKwkJcHJpdmF0ZSBib29sZWFuIHZpc2libGUgPSB0cnVlOworCQlwcml2YXRlIFNlcmllc0RlZmluaXRpb24gc2RZID0gbnVsbDsKKwkJcHJpdmF0ZSBTZXJpZXNEZWZpbml0aW9uIHNkWCA9IG51bGw7CisJCQorCQkKKwkJcHVibGljIGJvb2xlYW4gaXNWaXNpYmxlKCkgeworCQkJcmV0dXJuIHZpc2libGU7CisJCX0KKwkJcHVibGljIHZvaWQgc2V0VmlzaWJsZShib29sZWFuIHN0YXRlKSB7CisJCQl2aXNpYmxlID0gc3RhdGU7CisJCX0KKwkJCisJCXB1YmxpYyB2b2lkIHRvZ2dsZVZpc2libGUoKSB7CisJCQl2aXNpYmxlID0gIXZpc2libGU7CisJCX0KKworCQkvKioKKwkJICogCisJCSAqIEBwYXJhbSBwcm9wZXJ0eU5hbWUKKwkJICovCisJCXB1YmxpYyBEYXRhWFlTZXJpZXMoU3RyaW5nIHByb3BlcnR5TmFtZSkgeworCQkJdGhpcy5wcm9wZXJ0eU5hbWUgPSBwcm9wZXJ0eU5hbWU7CisJCQl5VmFsdWVzID0gbmV3IEFycmF5TGlzdDxEb3VibGU+KCk7CisJCQl5VmFsdWVzLmFkZChuZXcgRG91YmxlKDAuMCkpOworCQkJCisJCQl4VmFsdWVzID0gbmV3IEFycmF5TGlzdDxEb3VibGU+KCk7CisJCQl4VmFsdWVzLmFkZChuZXcgRG91YmxlKDAuMCkpOworCQkJCisJCQlhZGRTY2F0dGVyU2VyaWVzKHByb3BlcnR5TmFtZSk7CisJCX0KKwkJCisJCS8qKgorCQkgKiBhZGQgYW4gWFkgdmFsdWUgcGFpcgorCQkgKiBAcGFyYW0gdmFsWAorCQkgKiBAcGFyYW0gdmFsWQorCQkgKi8KKwkJcHVibGljIHZvaWQgYWRkVmFsdWUoRG91YmxlIHZhbFgsIERvdWJsZSB2YWxZKSB7CisJCQlpZih5VmFsdWVzPT1udWxsKSB5VmFsdWVzID0gbmV3IEFycmF5TGlzdDxEb3VibGU+KCk7CisJCQlpZih4VmFsdWVzPT1udWxsKSB4VmFsdWVzID0gbmV3IEFycmF5TGlzdDxEb3VibGU+KCk7CisJCQl4VmFsdWVzLmFkZCh2YWxYKTsKKwkJCXlWYWx1ZXMuYWRkKHZhbFkpOworCQl9CisJCQorCQkvKioKKwkJICogQHBhcmFtIHByb3BlcnR5TmFtZQorCQkgKiAKKwkJICovCisJCXB1YmxpYyB2b2lkIGFkZFNjYXR0ZXJTZXJpZXMoZmluYWwgU3RyaW5nIHByb3BlcnR5TmFtZSkgeworCQkJCisJCQlmaW5hbCBOdW1iZXJEYXRhU2V0IG9ydGhvVmFsdWVzID0gTnVtYmVyRGF0YVNldEltcGwuY3JlYXRlKHlWYWx1ZXMpOworCQkJZmluYWwgTnVtYmVyRGF0YVNldCB4QXhpc1ZhbHVlcyA9IE51bWJlckRhdGFTZXRJbXBsLmNyZWF0ZSh4VmFsdWVzKTsKKwkJCQorCQkJc2RYID0gU2VyaWVzRGVmaW5pdGlvbkltcGwuY3JlYXRlKCk7CisJCQkvL0ZyYWN0aW9uTnVtYmVyRm9ybWF0U3BlY2lmaWVyIHNmID0gRnJhY3Rpb25OdW1iZXJGb3JtYXRTcGVjaWZpZXJJbXBsLmNyZWF0ZSgpOworCQkJLy9zZi5zZXRQcmVjaXNlKHRydWUpOworCQkJLy9zZFguc2V0Rm9ybWF0U3BlY2lmaWVyKHNmKTsKKwkJCXhBeGlzUHJpbWFyeS5nZXRTZXJpZXNEZWZpbml0aW9ucygpLmFkZChzZFgpOworCQkJCisJCQkKKwkJCWlmKHNjYXR0ZXJTZXJpZXNZID09IG51bGwpIHsKKwkJCQlzZFkgPSBTZXJpZXNEZWZpbml0aW9uSW1wbC5jcmVhdGUoKTsKKwkJCQkKKwkJCQlzY2F0dGVyU2VyaWVzWSA9IChTY2F0dGVyU2VyaWVzKVNjYXR0ZXJTZXJpZXNJbXBsLmNyZWF0ZSgpOworCQkJCXNlcmllc1ggPSBTZXJpZXNJbXBsLmNyZWF0ZSgpOworCQkJfSAvLyBpZiBzY2F0dGVyU2VyaWVzWT09bnVsbAorCQkJLy8gbmV3IGNvbG9ycworCQkJc2VyaWVzWC5nZXRMYWJlbCgpLmdldENhcHRpb24oKS5zZXRDb2xvcihmb3JlR3JvdW5kKTsKKwkJCXNlcmllc1guZ2V0TGFiZWwoKS5nZXRPdXRsaW5lKCkuc2V0Q29sb3IoZm9yZUdyb3VuZCk7CisJCQlzZXJpZXNYLnNldERhdGFTZXQoeEF4aXNWYWx1ZXMpOworCQkJc2RYLmdldFNlcmllcygpLmFkZChzZXJpZXNYKTsKKwkJCisJCQlzY2F0dGVyU2VyaWVzWS5zZXREYXRhU2V0KG9ydGhvVmFsdWVzKTsKKwkJCQorCQkJLy8gQXNzaWduIHRoZSBsaW5lIGNvbG9yCisJCQkvLyBiYXNlZCBvbiBzZWxlY3RlZCBwcm9wZXJ0eS4gRGVmYXVsdCBpcyBCbHVlCisJCQlzZXRDb2xvckRlZnMocHJvcGVydHlOYW1lKTsKKwkJCS8vIElmIHRoaXMgaXMgdGhlICJzZWxlY3RlZCIgcmVnaW9uIG9mIGEgZ3JhcGggc2V0IHRoZSBtYXJrZXIgdHlwZQorCQkJCisJCQkvLyB0aGUgc2VyaWVzIGRlZgorCQkJQ29sb3JEZWZpbml0aW9uIGNvbG9yID0gQ29sb3JEZWZpbml0aW9uSW1wbC5jcmVhdGUoCisJCQkJCWNvbG9yRGVmYXVsdFtjaGFydEluZGV4XVswXSwgCisJCQkJCWNvbG9yRGVmYXVsdFtjaGFydEluZGV4XVsxXSwgCisJCQkJCWNvbG9yRGVmYXVsdFtjaGFydEluZGV4XVsyXSk7CisJCQlzZFkuZ2V0U2VyaWVzUGFsZXR0ZSgpLnVwZGF0ZShjb2xvcik7CisJCQlzZFkuZ2V0U2VyaWVzKCkuYWRkKHNjYXR0ZXJTZXJpZXNZKTsKKwkJCXlBeGlzUHJpbWFyeS5nZXRTZXJpZXNEZWZpbml0aW9ucygpLmFkZChzZFkpOworCQkJCisJCQlyZXR1cm47CisJCX0vLyBhZGRTY2F0dGVyU2VyaWVzCisJCQorCQkvKiogCisJCSAqIGluIHJlc3BvbnNlIHRvIHVzZXIgYWN0aW9uIHRlbXBvcmFyaWx5IHJlbW92ZSB0aGUgbGluZSBzZXJpZXMgZnJvbSB0aGUgZ3JhcGgKKwkJICovCisJCXB1YmxpYyB2b2lkIGhpZGUoKSB7CisJCQlzY2F0dGVyU2VyaWVzWS5zZXRWaXNpYmxlKGZhbHNlKTsKKwkJCXZpc2libGUgPSBmYWxzZTsKKwkJfS8vIGhpZGUKKwkJCisJCS8qKiAKKwkJICogaW4gcmVzcG9uc2UgdG8gdXNlciBhY3Rpb24gYWRkIGJhY2sgdGhlIGxpbmUgc2VyaWVzIHRvIHRoZSBncmFwaAorCQkgKi8KKwkJcHVibGljIHZvaWQgc2hvdygpIHsKKwkJCXNjYXR0ZXJTZXJpZXNZLnNldFZpc2libGUodHJ1ZSk7CisJCQl2aXNpYmxlID0gdHJ1ZTsKKwkJfS8vIHNob3cKKwkJCisKKwkJLyoqCisJCSAqIFNldHMgdGhlIGNvbG9ycyBmb3IgYSBuIGFycmF5IG9mIFNjYXR0ZXJTZXJpZXMgZ2l2ZW4gdGhlIHByb3BlcnR5IHRvIFBsb3QKKwkJICogZm9yIGVhY2guIFRyeSB0byBzZXQgY29sb3IgZnJvbSB0aGUgcHJlZmVyZW5jZXMgKGlmIHNwZWNpZmllZCBmb3IgdGhhdAorCQkgKiBwcm9wZXJ0eSkgb3RoZXJ3aXNlIHNldHMgbGluZSBjb2xvciB0byBibHVlLgorCQkgKiBAcGFyYW0gcHJvcGVydHlOYW1lIAorCQkgKgorCQkgKi8KKwkJQFN1cHByZXNzV2FybmluZ3MoImNhc3QiKQorCQlwdWJsaWMgdm9pZCBzZXRDb2xvckRlZnMoU3RyaW5nIHByb3BlcnR5TmFtZSkgeworCQkJdGhpcy5zY2F0dGVyU2VyaWVzWS5zZXRTZXJpZXNJZGVudGlmaWVyKHByb3BlcnR5TmFtZSk7CisJCQlpZihwcm9wZXJ0eU5hbWUuaW5kZXhPZigiWFkiKT49MCkgeworCQkJCS8vIHRoZSBkYXRhCisJCQkJc2NhdHRlclNlcmllc1kuc2V0UGFsZXR0ZUxpbmVDb2xvcih0cnVlKTsJCQkJCisJCQkJLy9zY2F0dGVyU2VyaWVzWS5nZXRMaW5lQXR0cmlidXRlcygpLnNldENvbG9yKGNvbG9yKTsKKwkJCQkvL3NjYXR0ZXJTZXJpZXNZLmdldExpbmVBdHRyaWJ1dGVzKCkuc2V0U3R5bGUoTGluZVN0eWxlLlNPTElEX0xJVEVSQUwpOworCQkJCU1hcmtlciBtYXJrZXIgPSBNYXJrZXJJbXBsLmNyZWF0ZShNYXJrZXJUeXBlLkNJUkNMRV9MSVRFUkFMLCAyKTsKKwkJCQlzY2F0dGVyU2VyaWVzWS5nZXRNYXJrZXJzKCkuY2xlYXIoKTsKKwkJCQlzY2F0dGVyU2VyaWVzWS5nZXRNYXJrZXJzKCkuYWRkKG1hcmtlcik7CisJCQkJc2NhdHRlclNlcmllc1kuZ2V0TGluZUF0dHJpYnV0ZXMoKS5zZXRWaXNpYmxlKGZhbHNlKTsKKwkJCX0gZWxzZSB7CisJCQkJLy8gdGhlIGZpdAorCQkJCXNjYXR0ZXJTZXJpZXNZLmdldExpbmVBdHRyaWJ1dGVzKCkuc2V0Q29sb3IoQ29sb3JEZWZpbml0aW9uSW1wbC5CTEFDSygpKTsKKwkJCQlzY2F0dGVyU2VyaWVzWS5nZXRMaW5lQXR0cmlidXRlcygpLnNldFN0eWxlKExpbmVTdHlsZS5ET1RURURfTElURVJBTCk7CisJCQkJc2NhdHRlclNlcmllc1kuZ2V0TGluZUF0dHJpYnV0ZXMoKS5zZXRWaXNpYmxlKHRydWUpOworCQkJCWlmICghc2NhdHRlclNlcmllc1kuZ2V0TWFya2VycygpLmlzRW1wdHkoKSkgeworCQkJCQlNYXJrZXIgbWFya2VyID0gKE1hcmtlcilzY2F0dGVyU2VyaWVzWS5nZXRNYXJrZXJzKCkuZ2V0KDApOworCQkJCQltYXJrZXIuc2V0VmlzaWJsZShmYWxzZSk7CisJCQkJfQorCQkJfQorCQkJCisJCX0vLyBnZXRDb2xvckRlZnMKKworCQkvKioKKwkJICogbGVuZ3RoIG9mIHRoZSBzZXJpZXMKKwkJICogQHJldHVybiBudW1iZXIgb2YgZGF0YSBwb2ludHMKKwkJICovCisJCXB1YmxpYyBpbnQgZ2V0RGF0YVNpemUoKSB7CisJCQlyZXR1cm4geVZhbHVlcy5zaXplKCk7CisJCX0KKwkJLy8gQWNjZXNzb3JzCisJCXB1YmxpYyBTdHJpbmcgZ2V0UHJvcGVydHlOYW1lKCkgeworCQkJcmV0dXJuIHByb3BlcnR5TmFtZTsKKwkJfQorCisJCXB1YmxpYyB2b2lkIHNldFByb3BlcnR5TmFtZShTdHJpbmcgcHJvcGVydHlOYW1lKSB7CisJCQl0aGlzLnByb3BlcnR5TmFtZSA9IHByb3BlcnR5TmFtZTsKKwkJfQorCisJCXB1YmxpYyBMaXN0PERvdWJsZT4gZ2V0eVZhbHVlcygpIHsKKwkJCXJldHVybiB5VmFsdWVzOworCQl9CisKKwkJcHVibGljIHZvaWQgc2V0eVZhbHVlcyhMaXN0PERvdWJsZT4geVZhbHVlcykgeworCQkJdGhpcy55VmFsdWVzID0geVZhbHVlczsKKwkJfQorCisJCQorCisJCXB1YmxpYyB2b2lkIHNldFNjYXR0ZXJTZXJpZXMoU2NhdHRlclNlcmllcyBsaW5lU2VyaWVzKSB7CisJCQl0aGlzLnNjYXR0ZXJTZXJpZXNZID0gbGluZVNlcmllczsKKwkJfQorCX0vLyBEYXRhWFlTZXJpZXMKKwkvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworCQorfSAvLyBYWVNlcmllc0NhbnZhcwpkaWZmIC0tZ2l0IGEvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS51dGlsLmFuYWx5c2lzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3V0aWwvYW5hbHlzaXMvdmlld3MvbWVzc2FnZXMucHJvcGVydGllcyBiL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0udXRpbC5hbmFseXNpcy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91dGlsL2FuYWx5c2lzL3ZpZXdzL21lc3NhZ2VzLnByb3BlcnRpZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzU5MDA3NAotLS0gL2Rldi9udWxsCisrKyBiL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0udXRpbC5hbmFseXNpcy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91dGlsL2FuYWx5c2lzL3ZpZXdzL21lc3NhZ2VzLnByb3BlcnRpZXMKQEAgLTAsMCArMSwxNjUgQEAKKyMgbWVzc2FnZXMucHJvcGVydGllcworIworIyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIyAqIENvcHlyaWdodCAoYykgMjAwNywgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyMgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisjICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisjICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyMgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorIyAqCisjICogQ29udHJpYnV0b3JzOgorIyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworIyBDb21tYSBzZXBhcmF0ZWQgdmFyaWFibGUKK0NTQy50aXRsZT1DU1YKKworIyBDb21tb24KK0NPTU1PTi5OT1RGT1VORD1TY2VuYXJpbyBmb2xkZXIgbm90IGZvdW5kIQorQ09NTU9OLk5PVERBVEE9SW52YWxpZCBkYXRhIG9yIHBhdGghCitDT01NT04uRE9ORT1Eb25lCitDT01NT04uUkVBRFk9UmVhZHkgdG8gUGxvdAorQ09NTU9OLldPUktJTkc9V29ya2luZworQ09NTU9OLlNUQVRVUz1TdGF0dXMKK0NPTU1PTi5DTEVBUj1DbGVhciBNb25pdG9ycworQ09NTU9OLklOQ0lERU5DRT1JbmNpZGVuY2UKK0NPTU1PTi5ERUxUQUJJUlRIUz1kZWx0YUJpcnRocworQ09NTU9OLkRFTFRBREVBVEhTPWRlbHRhRGVhdGhzCitDT01NT04uVElNRT10aW1lCitDT01NT04uSVRFUkFUSU9OPSNpdGVyYXRpb24KK0NPTU1PTi5BR0dSRUdBVEVfVElUTEU9RXBpZGVtaWMgQWdncmVnYXRlIERhdGEgVmlldworQ09NTU9OLlNZTkNIUk9OSVpFUj1QaGFzZVN5bmNocm9uaXplcgorQ09NTU9OLkVSUk9SSU5JVD1Qcm9ibGVtIGluaXRpYWxpemluZyBjaGFydAorCisKKworIyBFcGlkZW1pYyB2aWV3CitFUElWSUVXLlNFTEVDVERJUj1TZWxlY3QgRm9sZGVyCitFUElWSUVXLkFHR1JFR0FURURBVEE9QWdncmVnYXRlIGRhdGEKK0VQSVZJRVcuUkVGRVJFTkNFRk9MREVSTEFCRUw9VXNlIFJlZmVyZW5jZSBGaWx0ZXIKK0VQSVZJRVcuU0VMRUNURklMRT1TZWxlY3QgRmlsZQorRVBJVklFVy5TRUxFQ1RTQ0VOQVJJT0ZPTERFUj1TZWxlY3Qgc2NlbmFyaW8gZm9sZGVyCitFUElWSUVXLlNFTEVDVFJFRkVSRU5DRUZPTERFUj1TZWxlY3QgcmVmZXJlbmNlIGZvbGRlcgorRVBJVklFVy5TRUxFQ1RBR0dGSUxFPVNlbGVjdCBBZ2dyZWdhdGUgZmlsZQorRVBJVklFVy5TRUxFQ1RJTkNGSUxFPVNlbGVjdCBJbmNpZGVuY2UgZmlsZQorRVBJVklFVy5QTE9UVEVYVD1QbG90CitFUElWSUVXLkFHR1JFR0FURUxFR0VORD1FcGlkZW1pYworRVBJVklFVy5ZQVhJUz1Qb3B1bGF0aW9uCitFUElWSUVXLlNDRU5BUklPRk9MREVSTEFCRUw9U2NlbmFyaW8gRm9sZGVyOgorRVBJVklFVy5BR0dGSUxFTEFCRUw9IFNjZW5hcmlvIEFnZ3JlZ2F0ZSBGaWxlCitFUElWSUVXLklOQ0ZJTEVMQUJFTD0gU2NlbmFyaW8gSW5jaWRlbmNlIEZpbGUKKworIyBJbmNpZGVuY2UgY2hhcnQgcGFydCBvZiBFUElWSUVXCitJTkNWSUVXLklOQ0lERU5DRUxFR0VORD1JbmNpZGVuY2UKK0lOQ1ZJRVcuWUFYSVM9SW5jaWRlbmNlCisKKyMgRXN0aW1hdG9yIHZpZXcKK0VTVC5USVRMRT1QYXJhbWV0ZXIgRXN0aW1hdGlvbgorRVNULkVTVElNQVRFPUVzdGltYXRlIFBhcmFtZXRlcnMKK0VTVC5TRUxFQ1RFU1RJTUFUT1I9U2VsZWN0CitFU1QuUkVTVUxUUz1SZXN1bHRzOgorRVNULkNPTVBMRVRFPVBhcmFtZXRlciBFc3RpbWF0aW9uIENvbXBsZXRlCitFU1QuU0NGT0xERVI9U2NlbmFyaW8gRm9sZGVyOgorRVNULlBBUkFNRVNUSU1BVE9SPVBhcmFtZXRlciBFc3RpbWF0b3I6CitFU1QuU0VMRUNURk9MREVCVVRUT049U2VsZWN0IFNjZW5hcmlvIEZvbGRlcgorRVNULlNFTEVDVEZPTERFRElBTE9HVElUTEU9Q2hvb3NlIFNjZW5hcmlvIEZvbGRlcgorRVNULlBBUkFNRVNUVElUTEU9U2VsZWN0IFBhcmFtZXRlciBFc3RpbWF0b3IKK0VTVC5QQVJBTUVTVExBQkVMPVNlbGVjdCBQYXJhbWV0ZXIgRXN0aW1hdG9yOgorRVNULldJWkFSRFBBR0UxVElUTEU9U2VsZWN0IFNjZW5hcmlvIEZvbGRlcgorRVNULkNIT0lDRTE9Rml0IEVhY2ggTG9jYXRpb24gVGhlbiBBdmVyYWdlCitFU1QuQ0hPSUNFMj1TdW0gT3ZlciBBbGwgTG9jYXRpb25zIFRoZW4gRml0CitFU1QuTUFYVEhSRVNIT0xEUz1NYXggUyAKK0VTVC5NSU5USFJFU0hPTERTPU1pbiBTIAorRVNULk1BWFRIUkVTSE9MREU9TWF4IEUgCitFU1QuTUlOVEhSRVNIT0xERT1NaW4gRSAKK0VTVC5NQVhUSFJFU0hPTERJPU1heCBJIAorRVNULk1JTlRIUkVTSE9MREk9TWluIEkgCitFU1QuTUFYVEhSRVNIT0xEUj1NYXggUiAKK0VTVC5NSU5USFJFU0hPTERSPU1heCBSIAorRVNULlJFU1VMVFM9UmVzdWx0cworRVNULklOUFVUREFUQT1JbnB1dCBEYXRhCitFU1QuUkVHUkVTU0lPTj1SZWdyZXNzaW9uCitFU1QuQVZFUkFHRT1BdmVyYWdlCitFU1QuRElTUExBWT1EYXRhIHRvIERpc3BsYXkKK0VTVC5FUVVBVElPTjE9RXEuMQorRVNULkVRVUFUSU9OMj1FcS4yCitFU1QuRVFVQVRJT04zPUVxLjMKK0VTVC5FUVVBVElPTjQ9RXEuNAorRVNULkFYSVNMQUJFTDE9UyxTKgorRVNULkFYSVNMQUJFTDI9RSxFKgorRVNULkFYSVNMQUJFTDM9SSxJKgorRVNULkFYSVNMQUJFTDQ9UixSKgorRVNULlJBWElTTEFCRUwxPWZyb20gZFMvZFQKK0VTVC5SQVhJU0xBQkVMMj1mcm9tIGRFL2RUCitFU1QuUkFYSVNMQUJFTDM9ZnJvbSBkSS9kVAorRVNULlJBWElTTEFCRUw0PWZyb20gZFIvZFQKKyMKKyMgYmV0YShmKQorRVNULkZSRVFCRVRBPVx1MDNiMihmKQorIyBiZXRhKHJobykKK0VTVC5ERU5TSVRZQkVUQT1cdTAzYjIoXHUwM2MxKQorCisjIEx5YXB1bm92IHZpZXcKK0xZQS5ESVZFUkdFTkNFTEVHRU5EPUx5YXB1bm92IFRyYWplY3RvcnkgRGl2ZXJnZW5jZQorTFlBLkRJVkVSR0VOQ0VZQVhJUz1sbltkZWx0YV0KK0xZQS5USVRMRT1MeWFwdW5vdiBBbmFseXNpcworTFlBLkNPTVBBUklTT049Q29tcHV0ZSBMeWFwdW5vdiBFeHBvbmVudAorTFlBLlJFU1VMVFM9UmVzdWx0cworTFlBLldPUktJTkc9Li4ud29ya2luZworTFlBLkRPTkU9ZG9uZS4KK0xZQS5FUlJPUjE9SW52YWxpZCBGb2xkZXIuIFBsZWFzZSBwaWNrIGEgY29tcGxldGUgU0NFTkFSSU8gZm9sZGVyLiBOb3QgKGUuZy4pIGFuIGFnZ3JlZ2F0ZSBmb2xkZXIuIAorTFlBLkNPTVBMRVRFPUNvbXBhcmlzb24gQ29tcGxldGUKK0xZQS5TRUxFQ1RGT0xERVI9U2VsZWN0IFNjZW5hcmlvIEZvbGRlcgorTFlBLlNFTEVDVEZPTERFUkRJQUxHPVBpY2sgYSBzY2VuYXJpbyBmb2xkZXIKK0xZQS5GT0xERVIxTEFCRUw9U2NlbmFyaW8gRm9sZGVyIDE6CitMWUEuRk9MREVSMkxBQkVMPVNjZW5hcmlvIEZvbGRlciAyOgorTFlBLkRFVklBVElPTj1MeWFwdW5vdkRldmlhdGlvbgorCisjIFNjZW5hcmlvIGNvbXBhcmlzb24gdmlldworQ09NUC5STVNESUZGRVJFTkNFTEFCRUwgPSBFcnJvcgorQ09NUC5STVNTVFJJTkc9RXJyb3IKK0NPTVAuQU5BTFlaRT1BbmFseXplCitDT01QLlRJVExFID0gU2NlbmFyaW8gQ29tcGFyaXNvbgorQ09NUC5DT01QQVJFID0gUk1TIENvbXBhcmUKK0NPTVAuUkVTVUxUUyA9IFJlc3VsdHM6CitDT01QLlNFTEVDVEZPTERFUkJVVFRPTj1TZWxlY3QgRm9sZGVyCitDT01QLlNFTEVDVEZPTERFUkRJQUxPRz1QaWNrIGEgc2NlbmFyaW8gZm9sZGVyCitDT01QLkZPTERFUjFMQUJFTD1SZWZlcmVuY2UgU2NlbmFyaW8gRm9sZGVyOgorQ09NUC5GT0xERVIyTEFCRUw9Q29tcGFyZSBTY2VuYXJpbyBGb2xkZXIocyk6CitDT01QLkVSUk9SRlVOQ1RJT049RXJyb3IgRnVuY3Rpb24KKworIyBQcm9jZXNzb3IgdmlldworUFJPQ0VTU09SLlRJVExFID1EYXRhIFByb2Nlc3NvcgorUFJPQ0VTU09SLlNPVVJDRUZPTERFUj1Tb3VyY2UgRm9sZGVyOgorUFJPQ0VTU09SLlNFTEVDVFNPVVJDRUZPTERFUj1TZWxlY3QgU291cmNlIEZvbGRlcgorUFJPQ0VTU09SLlNFTEVDVFNPVVJDRUZPTERFRElBTE9HVElUTEU9Q2hvb3NlIFNvdXJjZSBGb2xkZXIKK1BST0NFU1NPUi5UQVJHRVRGT0xERVI9VGFyZ2V0IEZvbGRlcjoKK1BST0NFU1NPUi5TRUxFQ1RUQVJHRVRGT0xERVI9U2VsZWN0IFRhcmdldCBGb2xkZXIKK1BST0NFU1NPUi5TRUxFQ1RUQVJHRVRGT0xERURJQUxPR1RJVExFPUNob29zZSBUYXJnZXQgRm9sZGVyCitQUk9DRVNTT1IuUE9QVUxBVElPTkRBVEFGSUxFPVBvcHVsYXRpb24gRGF0YSBGaWxlOgorUFJPQ0VTU09SLlNFTEVDVFBPUFVMQVRJT05EQVRBRklMRT1TZWxlY3QgUG9wdWxhdGlvbiBEYXRhIEZpbGUKK1BST0NFU1NPUi5TRUxFQ1RQT1BVTEFUSU9OREFUQUZJTEVESUFMT0dUSVRMRT1DaG9vc2UgUG9wdWxhdGlvbiBEYXRhIEZpbGUKK1BST0NFU1NPUi5OQU1FREFUQUZJTEU9TmFtZSBEYXRhIEZpbGU6CitQUk9DRVNTT1IuU0VMRUNUTkFNRURBVEFGSUxFPVNlbGVjdCBOYW1lIERhdGEgRmlsZQorUFJPQ0VTU09SLlNFTEVDVE5BTUVEQVRBRklMRURJQUxPR1RJVExFPUNob29zZSBOYW1lIERhdGEgRmlsZQorUFJPQ0VTU09SLlJFQ09WRVJZUkFURT1SZWNvdmVyeSBSYXRlCitQUk9DRVNTT1IuU1VTQ0VQVElCTEVSQVRFPVN1c2NlcHRpYmxlIFJhdGUKK1BST0NFU1NPUi5JTU1VTklUWUxPU1NSQVRFPUltbXVuaXR5IExvc3MgUmF0ZQorUFJPQ0VTU09SLlBST0NFU1M9IFByb2Nlc3MgRGF0YQorUFJPQ0VTU09SLlBBUkFNRVRFUlM9RGlzZWFzZSBQYXJhbWV0ZXJzOgorUFJPQ0VTU09SLlBPUFVMQVRJT05TSVpFPVBvcHVsYXRpb24gU2l6ZToKK1BST0NFU1NPUi5TVEFSVFlFQVI9U3RhcnQgWWVhcgorUFJPQ0VTU09SLkVORFlFQVI9RW5kIFllYXIKK1BST0NFU1NPUi5SRUFESU5HREFUQT1SZWFkaW5nIGRhdGEuLi4KK1BST0NFU1NPUi5GQUlMRURSRUFEREFUQT1JbnZhbGlkIGRhdGEKKworIyBUaW1lIHNlcmllcyBjaGFydAorVFMuVElNRUxBQkVMPVRpbWUKKworIyBDb250ZXh0IG1lbnUgZW50cmllcworQ29udGV4dE1lbnUuTGluZWFyVGltZVNjYWxlPUxpbmVhciBTY2FsZQorQ29udGV4dE1lbnUuTG9nVGltZVNjYWxlPUxvZyBTY2FsZQorQ29udGV4dE1lbnUuTGluZWFyU2NhbGluZz1MaW5lYXIgU2NhbGUKK0NvbnRleHRNZW51LkxvZ1NjYWxpbmc9TG9nIFNjYWxlCitDb250ZXh0TWVudS5TaG93TGVnZW5kPVNob3cgTGVnZW5kCitDb250ZXh0TWVudS5IaWRlTGVnZW5kPUhpZGUgTGVnZW5kCmRpZmYgLS1naXQgYS9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLnV0aWwuYW5hbHlzaXMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdXRpbC9hbmFseXNpcy92aWV3cy9tZXNzYWdlc19kZS5wcm9wZXJ0aWVzIGIvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS51dGlsLmFuYWx5c2lzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3V0aWwvYW5hbHlzaXMvdmlld3MvbWVzc2FnZXNfZGUucHJvcGVydGllcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MTJmM2MwCi0tLSAvZGV2L251bGwKKysrIGIvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS51dGlsLmFuYWx5c2lzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3V0aWwvYW5hbHlzaXMvdmlld3MvbWVzc2FnZXNfZGUucHJvcGVydGllcwpAQCAtMCwwICsxLDE2NSBAQAorIyBtZXNzYWdlcy5wcm9wZXJ0aWVzCisjCisjIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjICogQ29weXJpZ2h0IChjKSAyMDA3LCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorIyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyMgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyMgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorIyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisjICoKKyMgKiBDb250cmlidXRvcnM6CisjICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorIyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjIENvbW1hIHNlcGFyYXRlZCB2YXJpYWJsZQorQ1NDLnRpdGxlPUNTVgorCisjIENvbW1vbgorQ09NTU9OLk5PVEZPVU5EPVNjZW5hcmlvb3JkbmVyIHd1cmRlIG5pY2h0IGdlZnVuZGVuIQorQ09NTU9OLk5PVERBVEE9VW5nXHUwMGZjbHRpZ2UgRGF0ZW4gb2RlciBQZmFkIQorQ09NTU9OLkRPTkU9RXJsZWRpZ3QKK0NPTU1PTi5SRUFEWT1CZXJlaXQgenVtIFBsb3R0ZW4KK0NPTU1PTi5XT1JLSU5HPUFtIGFyYmVpdGVuCitDT01NT04uU1RBVFVTPVN0YXR1cworQ09NTU9OLkNMRUFSPU1vbml0b3JlIGVudGZlcm5lbgorQ09NTU9OLklOQ0lERU5DRT1JbnppZGVuegorQ09NTU9OLkRFTFRBQklSVEhTPURlbHRhIEdlYnVydGVuCitDT01NT04uREVMVEFERUFUSFM9RGVsdGEgVG9kZXNmXHUwMGU0bGxlCitDT01NT04uVElNRT1aZWl0CitDT01NT04uSVRFUkFUSU9OPSNpdGVyYXRpb24KK0NPTU1PTi5BR0dSRUdBVEVfVElUTEU9RXBpZGVtaWVkYXRlbi1BdWZzdW1taWVyZW4tQW56ZWlnZQorQ09NTU9OLlNZTkNIUk9OSVpFUj1QaGFzZW5TeW5jaHJvbmlzaWVyZXIKK0NPTU1PTi5FUlJPUklOSVQ9UHJvYmxlbSBiZWltIEluaXRpYWxpc2llcmVuIHZvbiBUYWJlbGxlCisKKworCisjIEVwaWRlbWljIHZpZXcKK0VQSVZJRVcuU0VMRUNURElSPU9yZG5lciB3XHUwMGU0aGxlbgorRVBJVklFVy5BR0dSRUdBVEVEQVRBPUF1ZnN1bW1pZXJ0ZSBEYXRlbgorRVBJVklFVy5SRUZFUkVOQ0VGT0xERVJMQUJFTD1SZWZlcmVuemZpbHRlciBiZW51dHplbgorRVBJVklFVy5TRUxFQ1RGSUxFPURhdGVpIHdcdTAwZTRobGVuCitFUElWSUVXLlNFTEVDVFNDRU5BUklPRk9MREVSPVN6ZW5hcmlvb3JkbmVyIHdcdTAwZTRobGVuCitFUElWSUVXLlNFTEVDVFJFRkVSRU5DRUZPTERFUj1SZWZlcmVuem9yZG5lciB3XHUwMGU0aGxlbgorRVBJVklFVy5TRUxFQ1RBR0dGSUxFPUF1ZnN1bW1pZXJ1bmdzLURhdGVpIHdcdTAwZTRobGVuCitFUElWSUVXLlNFTEVDVElOQ0ZJTEU9SW56aWRlbnotRGF0ZWkgd1x1MDBlNGhsZW4KK0VQSVZJRVcuUExPVFRFWFQ9UGxvdAorRVBJVklFVy5BR0dSRUdBVEVMRUdFTkQ9RXBpZGVtaWUKK0VQSVZJRVcuWUFYSVM9QmV2XHUwMGY2bGtlcnVuZworRVBJVklFVy5TQ0VOQVJJT0ZPTERFUkxBQkVMPVN6ZW5hcmlvb3JkbmVyOgorRVBJVklFVy5BR0dGSUxFTEFCRUw9U3plbmFyaW8tQXVmc3VtbWllcnVuZ3NkYXRlaQorRVBJVklFVy5JTkNGSUxFTEFCRUw9U3plbmFyaW8tSW56aWRlbnpkYXRlaQorCisjIEluY2lkZW5jZSBjaGFydCBwYXJ0IG9mIEVQSVZJRVcKK0lOQ1ZJRVcuSU5DSURFTkNFTEVHRU5EPUluemlkZW56CitJTkNWSUVXLllBWElTPUluemlkZW56CisKKyMgRXN0aW1hdG9yIHZpZXcKK0VTVC5USVRMRT1QYXJhbWV0ZXJzY2hcdTAwZTR0enVuZworRVNULkVTVElNQVRFPVBhcmFtZXRlciBzY2hcdTAwZTR0emVuCitFU1QuU0VMRUNURVNUSU1BVE9SPVdcdTAwZTRobGVuCitFU1QuUkVTVUxUUz1FcmdlYm5pc3NlOgorRVNULkNPTVBMRVRFPVBhcmFtZXRlcnNjaFx1MDBlNHR6dW5nIHZvbGxzdFx1MDBlNG5kaWcKK0VTVC5TQ0ZPTERFUj1TemVuYXJpb29yZG5lcjoKK0VTVC5QQVJBTUVTVElNQVRPUj1QYXJhbWV0ZXJzY2hcdTAwZTR0emVyOgorRVNULlNFTEVDVEZPTERFQlVUVE9OPVN6ZW5hcmlvb3JkbmVyIHdcdTAwZTRobGVuCitFU1QuU0VMRUNURk9MREVESUFMT0dUSVRMRT1TY2VuYXJpbyBPcmRuZXIgd1x1MDBlNGhsZW4KK0VTVC5QQVJBTUVTVFRJVExFPVBhcmFtZXRlcnNjaFx1MDBlNHR6ZXIgd1x1MDBlNGhsZW4KK0VTVC5QQVJBTUVTVExBQkVMPVBhcmFtZXRlcnNjaFx1MDBlNHR6ZXIgd1x1MDBlNGhsZW46CitFU1QuV0laQVJEUEFHRTFUSVRMRT1TemVuYXJpb29yZG5lciB3XHUwMGU0aGxlbgorRVNULkNIT0lDRTE9SmVkZW4gT3J0IGFucGFzc2VuIERhbm4gRHVyY2hzY2huaXR0IGJpbGRlbgorRVNULkNIT0lDRTI9XHUwMGRjYmVyIGFsbGUgT3J0ZSBzdW1taWVyZW4gdW5kIGRhbm4gYW5wYXNzZW4KK0VTVC5NQVhUSFJFU0hPTERTPU1heCBTCitFU1QuTUlOVEhSRVNIT0xEUz1NaW4gUworRVNULk1BWFRIUkVTSE9MREU9TWF4IEUKK0VTVC5NSU5USFJFU0hPTERFPU1pbiBFCitFU1QuTUFYVEhSRVNIT0xEST1NYXggSQorRVNULk1JTlRIUkVTSE9MREk9TWluLiBJCitFU1QuTUFYVEhSRVNIT0xEUj1NYXggUgorRVNULk1JTlRIUkVTSE9MRFI9TWF4IFIKK0VTVC5SRVNVTFRTPUVyZ2Vibmlzc2UKK0VTVC5JTlBVVERBVEE9SW5wdXQtRGF0ZW4KK0VTVC5SRUdSRVNTSU9OPVJlZ3Jlc3Npb24KK0VTVC5BVkVSQUdFPUR1cmNoc2Nobml0dAorRVNULkRJU1BMQVk9RGF0ZW4genVtIERpc3BsYXkKK0VTVC5FUVVBVElPTjE9R2xlaWNodW5nIDEKK0VTVC5FUVVBVElPTjI9R2xlaWNodW5nIDIKK0VTVC5FUVVBVElPTjM9R2xlaWNodW5nIDMKK0VTVC5FUVVBVElPTjQ9R2xlaWNodW5nIDQKK0VTVC5BWElTTEFCRUwxPVMsIFMgKgorRVNULkFYSVNMQUJFTDI9RSwgRSAqCitFU1QuQVhJU0xBQkVMMz1JLCAqIEkKK0VTVC5BWElTTEFCRUw0PVIsIFIgKgorRVNULlJBWElTTEFCRUwxPXZvbiBkUy9kVAorRVNULlJBWElTTEFCRUwyPXZvbiBkRS9kVAorRVNULlJBWElTTEFCRUwzPXZvbiBkSS9kVAorRVNULlJBWElTTEFCRUw0PXZvbiBkUi9kVAorIworIyBiZXRhKGYpCitFU1QuRlJFUUJFVEE9XCBVMDNiMiAoZikKKyMgYmV0YShyaG8pCitFU1QuREVOU0lUWUJFVEE9XCBVMDNiMiAoXCB1MDNjMSkKKworIyBMeWFwdW5vdiB2aWV3CitMWUEuRElWRVJHRU5DRUxFR0VORD1MeWFwdW5vdiBUcmFqZWt0b3JpZSBEaXZlcmdlbnoKK0xZQS5ESVZFUkdFTkNFWUFYSVM9bG5bZGVsdGFdCitMWUEuVElUTEU9THlhcHVub3YtQW5hbHlzZQorTFlBLkNPTVBBUklTT049THlhcHVub3YgRXhwb25lbnQgYmVyZWNobmVuCitMWUEuUkVTVUxUUz1FcmdlYm5pc3NlCitMWUEuV09SS0lORz0uLi5yZWNobmV0CitMWUEuRE9ORT1kdXJjaGdlZlx1MDBmY2hydC4KK0xZQS5FUlJPUjE9VW5nXHUwMGZjbHRpZ2VyIE9yZG5lci4gQml0dGUgd1x1MDBlNGhsZW4gU2llIGVpbmVuIGtvbXBsZXR0ZW4gU3plbmFyaW8tT3JkbmVyLiBOaWNodCBlaW5lbiBBZ2dyZWdhdGUgT3JkbmVyIG9kZXIgXHUwMGU0aG5saWNoZXMuCitMWUEuQ09NUExFVEU9VmVyZ2xlaWNoIENvbXBsZXRlCitMWUEuU0VMRUNURk9MREVSPVN6ZW5hcmlvb3JkbmVyIHdcdTAwZTRobGVuCitMWUEuU0VMRUNURk9MREVSRElBTEc9V1x1MDBlNGhsZW4gU2llIGVpbmVuIFN6ZW5hcmlvb3JkbmVyCitMWUEuRk9MREVSMUxBQkVMPVN6ZW5hcmlvb3JkbmVyIDE6CitMWUEuRk9MREVSMkxBQkVMPVN6ZW5hcmlvb3JkbmVyIDI6CitMWUEuREVWSUFUSU9OPUx5YXB1bm92QWJ3ZWljaHVuZworCisjIFNjZW5hcmlvIGNvbXBhcmlzb24gdmlldworQ09NUC5STVNESUZGRVJFTkNFTEFCRUw9RmVobGVyCitDT01QLlJNU1NUUklORz1GZWhsZXIKK0NPTVAuQU5BTFlaRT1BbmFseXNpZXJlbgorQ09NUC5USVRMRT1TemVuYXJpby1WZXJnbGVpY2gKK0NPTVAuQ09NUEFSRT1STVMgdmVyZ2xlaWNoZW4KK0NPTVAuUkVTVUxUUz1FcmdlYm5pc3NlOgorQ09NUC5TRUxFQ1RGT0xERVJCVVRUT049T3JkbmVyIHdcdTAwZTRobGVuCitDT01QLlNFTEVDVEZPTERFUkRJQUxPRz1XXHUwMGU0aGxlbiBTaWUgZWluZW4gU3plbmFyaW9vcmRuZXIKK0NPTVAuRk9MREVSMUxBQkVMPVJlZmVyZW56c3plbmFyaW8tVmVyemVpY2huaXM6CitDT01QLkZPTERFUjJMQUJFTD1TemVuYXJpbyBPcmRuZXIgdmVyZ2xlaWNoZW46CitDT01QLkVSUk9SRlVOQ1RJT049RXJyb3ItRnVua3Rpb24KKworIyBQcm9jZXNzb3IgdmlldworUFJPQ0VTU09SLlRJVExFPURhdGVucHJvemVzc29yCitQUk9DRVNTT1IuU09VUkNFRk9MREVSPVF1ZWxsb3JkbmVyOgorUFJPQ0VTU09SLlNFTEVDVFNPVVJDRUZPTERFUj1RdWVsbG9yZG5lciB3XHUwMGU0aGxlbgorUFJPQ0VTU09SLlNFTEVDVFNPVVJDRUZPTERFRElBTE9HVElUTEU9U291cmNlIE9yZG5lciB3XHUwMGU0aGxlbgorUFJPQ0VTU09SLlRBUkdFVEZPTERFUj1aaWVsb3JkbmVyOgorUFJPQ0VTU09SLlNFTEVDVFRBUkdFVEZPTERFUj1aaWVsb3JkbmVyIHdcdTAwZTRobGVuCitQUk9DRVNTT1IuU0VMRUNUVEFSR0VURk9MREVESUFMT0dUSVRMRT1aaWVsb3JkbmVyIHdcdTAwZTRobGVuCitQUk9DRVNTT1IuUE9QVUxBVElPTkRBVEFGSUxFPUJldlx1MDBmNmxrZXJ1bmdzLURhdGVuZmlsZToKK1BST0NFU1NPUi5TRUxFQ1RQT1BVTEFUSU9OREFUQUZJTEU9QmV2XHUwMGY2bGtlcnVuZ3MtRGF0ZW5maWxlIHdcdTAwZTRobGVuCitQUk9DRVNTT1IuU0VMRUNUUE9QVUxBVElPTkRBVEFGSUxFRElBTE9HVElUTEU9RGF0ZWkgbWl0IEJldlx1MDBmNmxrZXJ1bmdzZGF0ZW4gd1x1MDBlNGhsZW4KK1BST0NFU1NPUi5OQU1FREFUQUZJTEU9TmFtZW4tRGF0ZW5maWxlOgorUFJPQ0VTU09SLlNFTEVDVE5BTUVEQVRBRklMRT1OYW1lbi1EYXRlbmZpbGUgd1x1MDBlNGhsZW4KK1BST0NFU1NPUi5TRUxFQ1ROQU1FREFUQUZJTEVESUFMT0dUSVRMRT1EYXRlaSBtaXQgTmFtZW5zZGF0ZW4gd1x1MDBlNGhsZW4KK1BST0NFU1NPUi5SRUNPVkVSWVJBVEU9R2VuZXN1bmdzcmF0ZQorUFJPQ0VTU09SLlNVU0NFUFRJQkxFUkFURT1FbXBmXHUwMGU0bmdsaWNoa2VpdHNyYXRlCitQUk9DRVNTT1IuSU1NVU5JVFlMT1NTUkFURT1FbnRpbW11bmlzaWVydW5nc3JhdGUKK1BST0NFU1NPUi5QUk9DRVNTPVByb3plc3NkYXRlbgorUFJPQ0VTU09SLlBBUkFNRVRFUlM9S3JhbmtoZWl0c3BhcmFtZXRlcjoKK1BST0NFU1NPUi5QT1BVTEFUSU9OU0laRT1CZXZcdTAwZjZsa2VydW5nc2dyXHUwMGY2XHUwMGRmZToKK1BST0NFU1NPUi5TVEFSVFlFQVI9U3RhcnQtSmFocgorUFJPQ0VTU09SLkVORFlFQVI9RW5kamFocgorUFJPQ0VTU09SLlJFQURJTkdEQVRBPUxlc2VuIHZvbiBEYXRlbiAuLi4KK1BST0NFU1NPUi5GQUlMRURSRUFEREFUQT1VbmdcdTAwZmNsdGlnZSBEYXRlbgorCisjIFRpbWUgc2VyaWVzIGNoYXJ0CitUUy5USU1FTEFCRUw9WmVpdAorCisjIENvbnRleHQgbWVudSBlbnRyaWVzCitDb250ZXh0TWVudS5MaW5lYXJUaW1lU2NhbGU9TGluZWFyZSBTa2FsaWVydW5nCitDb250ZXh0TWVudS5Mb2dUaW1lU2NhbGU9TG9nLVNrYWxhCitDb250ZXh0TWVudS5MaW5lYXJTY2FsaW5nPUxpbmVhcmUgU2thbGllcnVuZworQ29udGV4dE1lbnUuTG9nU2NhbGluZz1Mb2ctU2thbGEKK0NvbnRleHRNZW51LlNob3dMZWdlbmQ9U2hvdyBMZWdlbmQKK0NvbnRleHRNZW51LkhpZGVMZWdlbmQ9TGVnZW5kZSBhdXNibGVuZGVuCmRpZmYgLS1naXQgYS9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLnV0aWwuYW5hbHlzaXMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdXRpbC9hbmFseXNpcy92aWV3cy9tZXNzYWdlc19rci5wcm9wZXJ0aWVzIGIvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS51dGlsLmFuYWx5c2lzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3V0aWwvYW5hbHlzaXMvdmlld3MvbWVzc2FnZXNfa3IucHJvcGVydGllcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZjFkMDQzCi0tLSAvZGV2L251bGwKKysrIGIvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS51dGlsLmFuYWx5c2lzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3V0aWwvYW5hbHlzaXMvdmlld3MvbWVzc2FnZXNfa3IucHJvcGVydGllcwpAQCAtMCwwICsxLDE2NSBAQAorIyBtZXNzYWdlcy5wcm9wZXJ0aWVzCisjCisjIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjICogQ29weXJpZ2h0IChjKSAyMDA3LCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorIyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyMgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyMgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorIyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisjICoKKyMgKiBDb250cmlidXRvcnM6CisjICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorIyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjIENvbW1hIHNlcGFyYXRlZCB2YXJpYWJsZQorQ1NDLnRpdGxlPUNTVgorCisjIENvbW1vbgorQ09NTU9OLk5PVEZPVU5EPVx1YzJkY1x1YjA5OFx1YjlhY1x1YzYyNCBcdWQzZjRcdWIzNTRcdWI5N2MgXHVjYzNlXHVjNzQ0IFx1YzIxOCBcdWM1YzZcdWM3NGMhCitDT01NT04uTk9UREFUQT1cdWM3OThcdWJhYmJcdWI0MWMgXHViMzcwXHVjNzc0XHVkMTMwIFx1YjYxMFx1YjI5NCBcdWFjYmRcdWI4NWMhCitDT01NT04uRE9ORT1cdWM2NDRcdWI4Y2MKK0NPTU1PTi5SRUFEWT1cdWQ1MGNcdWI4NmYgXHVjOTAwXHViZTQ0XHVjNjQ0XHViOGNjCitDT01NT04uV09SS0lORz1cdWM3OTFcdWM1YzUgXHVjOTExCitDT01NT04uU1RBVFVTPVx1YzBjMVx1ZDBkYworQ09NTU9OLkNMRUFSPVx1YmFhOFx1YjJjOFx1ZDEzMCBcdWM4MTVcdWI5YWMKK0NPTU1PTi5JTkNJREVOQ0U9XHViYzFjXHVjMGRkCitDT01NT04uREVMVEFCSVJUSFM9ZGVsdGFCaXJ0aHMKK0NPTU1PTi5ERUxUQURFQVRIUz1kZWx0YURlYXRocworQ09NTU9OLlRJTUU9XHVjMmRjXHVhYzA0CitDT01NT04uSVRFUkFUSU9OPSNpdGVyYXRpb24KK0NPTU1PTi5BR0dSRUdBVEVfVElUTEU9XHVjODA0XHVjNWZjXHViY2QxIFx1YjIwNFx1YWNjNCBcdWIzNzBcdWM3NzRcdWQxMzBcdWJjZjRcdWFlMzAKK0NPTU1PTi5TWU5DSFJPTklaRVI9XHViMmU4XHVhY2M0XHVjMmYxXHVkMDZjXHViODVjXHViMDk4XHVjNzc0XHVjODAwCitDT01NT04uRVJST1JJTklUPVx1Y2MyOFx1ZDJiOCBcdWNkMDhcdWFlMzBcdWQ2NTQgXHVjOTExIFx1YmIzOFx1YzgxYyBcdWJjMWNcdWMwZGQKKworCisKKyMgRXBpZGVtaWMgdmlldworRVBJVklFVy5TRUxFQ1RESVI9XHVkM2Y0XHViMzU0IFx1YzEyMFx1ZDBkZAorRVBJVklFVy5BR0dSRUdBVEVEQVRBPVx1YzlkMVx1YWNjNCBcdWIzNzBcdWM3NzRcdWQxMzAKK0VQSVZJRVcuUkVGRVJFTkNFRk9MREVSTEFCRUw9XHVjYzM4XHVhY2UwIFx1ZDU0NFx1ZDEzMFx1Yjk3YyBcdWMwYWNcdWM2YTkKK0VQSVZJRVcuU0VMRUNURklMRT1cdWQzMGNcdWM3N2MgXHVjMTIwXHVkMGRkCitFUElWSUVXLlNFTEVDVFNDRU5BUklPRk9MREVSPVx1YzJkY1x1YjA5OFx1YjlhY1x1YzYyNCBcdWQzZjRcdWIzNTQgXHVjMTIwXHVkMGRkCitFUElWSUVXLlNFTEVDVFJFRkVSRU5DRUZPTERFUj1cdWNjMzhcdWM4NzAgXHVkM2Y0XHViMzU0IFx1YzEyMFx1ZDBkZAorRVBJVklFVy5TRUxFQ1RBR0dGSUxFPVx1YjIwNFx1YWNjNCBcdWQzMGNcdWM3N2NcdWM3NDQgXHVjMTIwXHVkMGRkCitFUElWSUVXLlNFTEVDVElOQ0ZJTEU9XHVjMGFjXHViODQwIFx1ZDMwY1x1Yzc3Y1x1Yzc0NCBcdWMxMjBcdWQwZGQKK0VQSVZJRVcuUExPVFRFWFQ9XHVjOTA0XHVhYzcwXHViOWFjCitFUElWSUVXLkFHR1JFR0FURUxFR0VORD1cdWM4MDRcdWM1ZmNcdWJjZDEKK0VQSVZJRVcuWUFYSVM9XHVjNzc4XHVhZDZjCitFUElWSUVXLlNDRU5BUklPRk9MREVSTEFCRUw9XHVjMmRjXHViMDk4XHViOWFjXHVjNjI0IFx1ZDNmNFx1YjM1NCA6CitFUElWSUVXLkFHR0ZJTEVMQUJFTD1cdWMyZGNcdWIwOThcdWI5YWNcdWM2MjQgXHVjOWQxXHVhY2M0IFx1ZDMwY1x1Yzc3YworRVBJVklFVy5JTkNGSUxFTEFCRUw9XHVjMmRjXHViMDk4XHViOWFjXHVjNjI0IFx1YzBhY1x1YWM3NCBcdWQzMGNcdWM3N2MKKworIyBJbmNpZGVuY2UgY2hhcnQgcGFydCBvZiBFUElWSUVXCitJTkNWSUVXLklOQ0lERU5DRUxFR0VORD1cdWJjMWNcdWMwZGQKK0lOQ1ZJRVcuWUFYSVM9XHViYzFjXHVjMGRkCisKKyMgRXN0aW1hdG9yIHZpZXcKK0VTVC5USVRMRT1cdWI5ZTRcdWFjMWMgXHViY2MwXHVjMjE4IFx1Y2Q5NFx1YzgxNQorRVNULkVTVElNQVRFPVx1YWNhY1x1YzgwMSBcdWI5ZTRcdWFjMWMgXHViY2MwXHVjMjE4CitFU1QuU0VMRUNURVNUSU1BVE9SPVx1YzEyMFx1ZDBkZAorRVNULlJFU1VMVFM9XHVhY2IwXHVhY2ZjIDoKK0VTVC5DT01QTEVURT1cdWI5ZTRcdWFjMWMgXHViY2MwXHVjMjE4IFx1Y2Q5NFx1YzgxNSBcdWM2NDRcdWI4Y2MKK0VTVC5TQ0ZPTERFUj1cdWMyZGNcdWIwOThcdWI5YWNcdWM2MjQgXHVkM2Y0XHViMzU0IDoKK0VTVC5QQVJBTUVTVElNQVRPUj1cdWI5ZTRcdWFjMWMgXHViY2MwXHVjMjE4IFx1YWNhY1x1YzgwMSBcdWIzYzRcdWFkNmMgKFRyYWZmaWMgRXN0aW1hdG9yKSA6CitFU1QuU0VMRUNURk9MREVCVVRUT049XHVjMmRjXHViMDk4XHViOWFjXHVjNjI0IFx1ZDNmNFx1YjM1NCBcdWMxMjBcdWQwZGQKK0VTVC5TRUxFQ1RGT0xERURJQUxPR1RJVExFPVx1YzJkY1x1YjA5OFx1YjlhY1x1YzYyNCBcdWQzZjRcdWIzNTRcdWI5N2MgXHVjMTIwXHVkMGRkCitFU1QuUEFSQU1FU1RUSVRMRT1cdWI5ZTRcdWFjMWMgXHViY2MwXHVjMjE4IFx1YzEyMFx1ZDBkZAorRVNULlBBUkFNRVNUTEFCRUw9XHViOWU0XHVhYzFjIFx1YmNjMFx1YzIxOCBcdWMxMjBcdWQwZGQgOgorRVNULldJWkFSRFBBR0UxVElUTEU9XHVjMmRjXHViMDk4XHViOWFjXHVjNjI0IFx1ZDNmNFx1YjM1NCBcdWMxMjBcdWQwZGQKK0VTVC5DSE9JQ0UxPVx1YWMwMSBcdWM3MDRcdWNlNTggXHViOWRlXHVjZDk0XHVhZTMwIFx1YWRmOFx1YjlhY1x1YWNlMCBcdWQzYzlcdWFkZTAgXHViMGI0XHVhZTMwCitFU1QuQ0hPSUNFMj1cdWJhYThcdWI0ZTAgXHVjNzA0XHVjZTU4XHVjNzU4IFx1ZDU2OVx1YWNjNCBcdWFkNmNcdWQ1NWMgXHVkNmM0IFx1YjlkZVx1Y2Q5NFx1YWUzMAorRVNULk1BWFRIUkVTSE9MRFM9XHVjZDVjXHViMzAwIFMKK0VTVC5NSU5USFJFU0hPTERTPVx1Y2Q1Y1x1YzE4YyBTCitFU1QuTUFYVEhSRVNIT0xERT1cdWI5ZTVcdWMyYTQgRQorRVNULk1JTlRIUkVTSE9MREU9XHVjZDVjXHVjMThjIEUKK0VTVC5NQVhUSFJFU0hPTERJPVx1Y2Q1Y1x1YjMwMCBJCitFU1QuTUlOVEhSRVNIT0xEST1cdWNkNWNcdWMxOGMgSQorRVNULk1BWFRIUkVTSE9MRFI9XHVjZDVjXHViMzAwIFIKK0VTVC5NSU5USFJFU0hPTERSPVx1Y2Q1Y1x1YjMwMCBSCitFU1QuUkVTVUxUUz1cdWFjYjBcdWFjZmMKK0VTVC5JTlBVVERBVEE9XHVjNzg1XHViODI1IFx1YjM3MFx1Yzc3NFx1ZDEzMAorRVNULlJFR1JFU1NJT049XHVkNjhjXHVhZGMwCitFU1QuQVZFUkFHRT1cdWQzYzlcdWFkZTAKK0VTVC5ESVNQTEFZPVx1ZDQ1Y1x1YzJkYyBcdWIzNzBcdWM3NzRcdWQxMzAKK0VTVC5FUVVBVElPTjE9RXEuMQorRVNULkVRVUFUSU9OMj1FcS4yCitFU1QuRVFVQVRJT04zPUVxLjMKK0VTVC5FUVVBVElPTjQ9RXEuNAorRVNULkFYSVNMQUJFTDE9UywgUyAqCitFU1QuQVhJU0xBQkVMMj1FLCBFICoKK0VTVC5BWElTTEFCRUwzPUksSSoKK0VTVC5BWElTTEFCRUw0PVIsIFIgKgorRVNULlJBWElTTEFCRUwxPWRTIC8gZFRcdWM1ZDBcdWMxMWMKK0VTVC5SQVhJU0xBQkVMMj1kRSAvIGRUXHVjNWQwXHVjMTFjCitFU1QuUkFYSVNMQUJFTDM9ZEkgLyBkVFx1YzVkMFx1YzExYworRVNULlJBWElTTEFCRUw0PWRSIC8gZFRcdWM1ZDBcdWMxMWMKKyMKKyMgYmV0YShmKQorRVNULkZSRVFCRVRBPVwgdTAzYjIgKEYpCisjIGJldGEocmhvKQorRVNULkRFTlNJVFlCRVRBPVwgdTAzYjIgKFwgdTAzYzEpCisKKyMgTHlhcHVub3YgdmlldworTFlBLkRJVkVSR0VOQ0VMRUdFTkQ9THlhcHVub3ZcdWM3NTggXHVkMGM0XHViM2M0IFx1YmMxY1x1YzBiMAorTFlBLkRJVkVSR0VOQ0VZQVhJUz1sbiBbXHViMzc4XHVkMGMwXQorTFlBLlRJVExFPUx5YXB1bm92IFx1YmQ4NFx1YzExZAorTFlBLkNPTVBBUklTT049THlhcHVub3YgXHVjOWMwXHVjMjE4IFx1YWNjNFx1YzBiMAorTFlBLlJFU1VMVFM9XHVhY2IwXHVhY2ZjCitMWUEuV09SS0lORz0uLi4gXHVjNzkxXHVjNWM1IFx1YzkxMQorTFlBLkRPTkU9XHVjNjQ0XHViOGNjCitMWUEuRVJST1IxPVx1Yzc5OFx1YmFiYlx1YjQxYyBcdWQzZjRcdWIzNTQuIFx1YzY0NFx1YzgwNFx1ZDU1YyBcdWMyZGNcdWIwOThcdWI5YWNcdWM2MjQgXHVkM2Y0XHViMzU0XHViOTdjIFx1YzEyMFx1ZDBkZFx1ZDU1OFx1YzJlZFx1YzJkY1x1YzYyNC4gIChcdWM2MDhcdWI5N2MgXHViNGU0XHVjNWI0KSBcdWM5ZDFcdWFjYzQgXHVkM2Y0XHViMzU0XHViOTdjIFx1YzEyMFx1ZDBkZFx1ZDU1OFx1YzljMCBcdWI5YzhcdWMyZGNcdWM2MjQuCitMWUEuQ09NUExFVEU9XHViZTQ0XHVhZDUwIFx1YzY0NFx1YjhjYworTFlBLlNFTEVDVEZPTERFUj1cdWMyZGNcdWIwOThcdWI5YWNcdWM2MjQgXHVkM2Y0XHViMzU0IFx1YzEyMFx1ZDBkZAorTFlBLlNFTEVDVEZPTERFUkRJQUxHPVx1YzJkY1x1YjA5OFx1YjlhY1x1YzYyNCBcdWQzZjRcdWIzNTRcdWI5N2MgXHVjMTIwXHVkMGRkCitMWUEuRk9MREVSMUxBQkVMPVx1YzJkY1x1YjA5OFx1YjlhY1x1YzYyNCBcdWQzZjRcdWIzNTQgMSA6CitMWUEuRk9MREVSMkxBQkVMPVx1YzJkY1x1YjA5OFx1YjlhY1x1YzYyNCBcdWQzZjRcdWIzNTQgMiA6CitMWUEuREVWSUFUSU9OPUx5YXB1bm92RGV2aWF0aW9uCisKKyMgU2NlbmFyaW8gY29tcGFyaXNvbiB2aWV3CitDT01QLlJNU0RJRkZFUkVOQ0VMQUJFTD1cdWM2MjRcdWI5NTgKK0NPTVAuUk1TU1RSSU5HPVx1YzYyNFx1Yjk1OAorQ09NUC5BTkFMWVpFPVx1YmQ4NFx1YzExZAorQ09NUC5USVRMRT1cdWMyZGNcdWIwOThcdWI5YWNcdWM2MjQgXHViZTQ0XHVhZDUwCitDT01QLkNPTVBBUkU9Uk1TIFx1YmU0NFx1YWQ1MAorQ09NUC5SRVNVTFRTPVx1YWNiMFx1YWNmYyA6CitDT01QLlNFTEVDVEZPTERFUkJVVFRPTj1cdWQzZjRcdWIzNTQgXHVjMTIwXHVkMGRkCitDT01QLlNFTEVDVEZPTERFUkRJQUxPRz1cdWMyZGNcdWIwOThcdWI5YWNcdWM2MjQgXHVkM2Y0XHViMzU0XHViOTdjIFx1YzEyMFx1ZDBkZAorQ09NUC5GT0xERVIxTEFCRUw9XHVjYzM4XHVjODcwIFx1YzJkY1x1YjA5OFx1YjlhY1x1YzYyNCBcdWQzZjRcdWIzNTQgOgorQ09NUC5GT0xERVIyTEFCRUw9OiBcdWMyZGNcdWIwOThcdWI5YWNcdWM2MjQgXHVkM2Y0XHViMzU0IChcdWI0ZTQpXHVjNzQ0IFx1YmU0NFx1YWQ1MAorQ09NUC5FUlJPUkZVTkNUSU9OPVx1YzYyNFx1Yjk1OCBcdWQ1NjhcdWMyMTgKKworIyBQcm9jZXNzb3IgdmlldworUFJPQ0VTU09SLlRJVExFPVx1YjM3MFx1Yzc3NFx1ZDEzMCBcdWQ1MDRcdWI4NWNcdWMxMzhcdWMxMWMKK1BST0NFU1NPUi5TT1VSQ0VGT0xERVI9XHVjMThjXHVjMmE0IFx1ZDNmNFx1YjM1NCA6CitQUk9DRVNTT1IuU0VMRUNUU09VUkNFRk9MREVSPVx1YzZkMFx1YmNmOCBcdWQzZjRcdWIzNTQgXHVjMTIwXHVkMGRkCitQUk9DRVNTT1IuU0VMRUNUU09VUkNFRk9MREVESUFMT0dUSVRMRT1cdWM2ZDBcdWJjZjggXHVkM2Y0XHViMzU0XHViOTdjIFx1YzEyMFx1ZDBkZAorUFJPQ0VTU09SLlRBUkdFVEZPTERFUj1cdWIzMDBcdWMwYzEgXHVkM2Y0XHViMzU0IDoKK1BST0NFU1NPUi5TRUxFQ1RUQVJHRVRGT0xERVI9XHViMzAwXHVjMGMxIFx1ZDNmNFx1YjM1NCBcdWMxMjBcdWQwZGQKK1BST0NFU1NPUi5TRUxFQ1RUQVJHRVRGT0xERURJQUxPR1RJVExFPVx1YjMwMFx1YzBjMSBcdWQzZjRcdWIzNTRcdWI5N2MgXHVjMTIwXHVkMGRkCitQUk9DRVNTT1IuUE9QVUxBVElPTkRBVEFGSUxFPVx1Yzc3OFx1YWQ2YyBcdWIzNzBcdWM3NzRcdWQxMzAgXHVkMzBjXHVjNzdjIDoKK1BST0NFU1NPUi5TRUxFQ1RQT1BVTEFUSU9OREFUQUZJTEU9XHVjNzc4XHVhZDZjIFx1YjM3MFx1Yzc3NFx1ZDEzMCBcdWQzMGNcdWM3N2MgXHVjMTIwXHVkMGRkCitQUk9DRVNTT1IuU0VMRUNUUE9QVUxBVElPTkRBVEFGSUxFRElBTE9HVElUTEU9XHVjNzc4XHVhZDZjIFx1YjM3MFx1Yzc3NFx1ZDEzMCBcdWQzMGNcdWM3N2NcdWM3NDQgXHVjMTIwXHVkMGRkCitQUk9DRVNTT1IuTkFNRURBVEFGSUxFPVx1Yzc3NFx1Yjk4NCBcdWIzNzBcdWM3NzRcdWQxMzAgXHVkMzBjXHVjNzdjIDoKK1BST0NFU1NPUi5TRUxFQ1ROQU1FREFUQUZJTEU9XHVjNzc0XHViOTg0IFx1YjM3MFx1Yzc3NFx1ZDEzMCBcdWQzMGNcdWM3N2MgXHVjMTIwXHVkMGRkCitQUk9DRVNTT1IuU0VMRUNUTkFNRURBVEFGSUxFRElBTE9HVElUTEU9XHVjNzc0XHViOTg0IFx1YjM3MFx1Yzc3NFx1ZDEzMCBcdWQzMGNcdWM3N2NcdWM3NDQgXHVjMTIwXHVkMGRkCitQUk9DRVNTT1IuUkVDT1ZFUllSQVRFPVx1YmNmNVx1YWQ2YyBcdWMxOGRcdWIzYzQKK1BST0NFU1NPUi5TVVNDRVBUSUJMRVJBVEU9XHVhYzEwXHVjNWZjIFx1Y2RlOFx1YzU3ZCBcdWJlNDRcdWM3MjgKK1BST0NFU1NPUi5JTU1VTklUWUxPU1NSQVRFPVx1YmE3NFx1YzVlZFx1YjgyNSBcdWMxOTBcdWMyZTRcdWM3MjgKK1BST0NFU1NPUi5QUk9DRVNTPVx1YjM3MFx1Yzc3NFx1ZDEzMCBcdWQ1MDRcdWI4NWNcdWMxMzhcdWMyYTQKK1BST0NFU1NPUi5QQVJBTUVURVJTPVx1YzljOFx1YmNkMSBcdWI5ZTRcdWFjMWMgXHViY2MwXHVjMjE4IDoKK1BST0NFU1NPUi5QT1BVTEFUSU9OU0laRT1cdWM3NzhcdWFkNmMgXHVkMDZjXHVhZTMwIDoKK1BST0NFU1NPUi5TVEFSVFlFQVI9XHVjMmRjXHVjNzkxIFx1YzVmMFx1YjNjNAorUFJPQ0VTU09SLkVORFlFQVI9XHVjZDVjXHVjODg1IFx1YjE0NFx1YjNjNAorUFJPQ0VTU09SLlJFQURJTkdEQVRBPVx1YjM3MFx1Yzc3NFx1ZDEzMCBcdWM3N2RcdWIyOTQgXHVjOTExCitQUk9DRVNTT1IuRkFJTEVEUkVBRERBVEE9XHVjNzk4XHViYWJiXHViNDFjIFx1YjM3MFx1Yzc3NFx1ZDEzMAorCisjIFRpbWUgc2VyaWVzIGNoYXJ0CitUUy5USU1FTEFCRUw9XHVjMmRjXHVhYzA0CisKKyMgQ29udGV4dCBtZW51IGVudHJpZXMKK0NvbnRleHRNZW51LkxpbmVhclRpbWVTY2FsZT1cdWMxMjBcdWQ2MTUgXHVjMmE0XHVjZjAwXHVjNzdjCitDb250ZXh0TWVudS5Mb2dUaW1lU2NhbGU9XHViODVjXHVhZGY4IFx1YzJhNFx1Y2YwMFx1Yzc3YworQ29udGV4dE1lbnUuTGluZWFyU2NhbGluZz1cdWMxMjBcdWQ2MTUgXHVjMmE0XHVjZjAwXHVjNzdjCitDb250ZXh0TWVudS5Mb2dTY2FsaW5nPVx1Yjg1Y1x1YWRmOCBcdWMyYTRcdWNmMDBcdWM3N2MKK0NvbnRleHRNZW51LlNob3dMZWdlbmQ9XHVkNDVjXHVjMmRjIFx1YmM5NFx1Yjg0MAorQ29udGV4dE1lbnUuSGlkZUxlZ2VuZD1cdWJjOTRcdWI4NDAgXHVjMjI4XHVhZTMwXHVhZTMwCmRpZmYgLS1naXQgYS9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLnV0aWwuYW5hbHlzaXMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdXRpbC9hbmFseXNpcy92aWV3cy9tZXNzYWdlc196aC5wcm9wZXJ0aWVzIGIvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS51dGlsLmFuYWx5c2lzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3V0aWwvYW5hbHlzaXMvdmlld3MvbWVzc2FnZXNfemgucHJvcGVydGllcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNWUwMGE0Ci0tLSAvZGV2L251bGwKKysrIGIvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS51dGlsLmFuYWx5c2lzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3V0aWwvYW5hbHlzaXMvdmlld3MvbWVzc2FnZXNfemgucHJvcGVydGllcwpAQCAtMCwwICsxLDE2NSBAQAorIyBtZXNzYWdlcy5wcm9wZXJ0aWVzCisjCisjIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjICogQ29weXJpZ2h0IChjKSAyMDA3LCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorIyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyMgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyMgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorIyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisjICoKKyMgKiBDb250cmlidXRvcnM6CisjICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorIyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjIENvbW1hIHNlcGFyYXRlZCB2YXJpYWJsZQorQ1NDLnRpdGxlPUNTVgorCisjIENvbW1vbgorQ09NTU9OLk5PVEZPVU5EPVx1NjBjNVx1NjY2Zlx1NjU4N1x1NGVmNlx1NTkzOVx1NmNhMVx1NjcwOVx1NjI3ZVx1NTIzMFx1ZmYwMQorQ09NTU9OLk5PVERBVEE9XHU2NWUwXHU2NTQ4XHU3Njg0XHU2NTcwXHU2MzZlXHU2MjE2XHU4ZGVmXHU1Zjg0XHVmZjAxCitDT01NT04uRE9ORT1cdTViOGNcdTYyMTAKK0NPTU1PTi5SRUFEWT1cdTUzZWZcdTRlZTVcdTVmMDBcdTU5Y2JcdTc1M2JcdTU2ZmUKK0NPTU1PTi5XT1JLSU5HPVx1NmI2M1x1NTcyOFx1OGZkYlx1ODg0YworQ09NTU9OLlNUQVRVUz1cdTcyYjZcdTYwMDEKK0NPTU1PTi5DTEVBUj1cdTZlMDVcdTk2NjRcdTY2M2VcdTc5M2FcdTU2NjgKK0NPTU1PTi5JTkNJREVOQ0U9XHU1M2QxXHU3NWM1XHU3Mzg3CitDT01NT04uREVMVEFCSVJUSFM9XHU1MWZhXHU3NTFmXHU2NTcwXHU3NmVlXHU1ZGVlXHU1MDNjCitDT01NT04uREVMVEFERUFUSFM9XHU2YjdiXHU0ZWExXHU2NTcwXHU3NmVlXHU1ZGVlXHU1MDNjCitDT01NT04uVElNRT1cdTY1ZjZcdTk1ZjQKK0NPTU1PTi5JVEVSQVRJT049I2l0ZXJhdGlvbgorQ09NTU9OLkFHR1JFR0FURV9USVRMRT1cdTc1YWJcdTYwYzVcdTZjNDdcdTYwM2JcdTY1NzBcdTYzNmVcdTg5YzZcdTU2ZmUKK0NPTU1PTi5TWU5DSFJPTklaRVI9XHU3NmY4XHU1NDBjXHU2YjY1CitDT01NT04uRVJST1JJTklUPVx1NTZmZVx1ODg2OFx1NTIxZFx1NTljYlx1NTMxNlx1OTVlZVx1OTg5OAorCisKKworIyBFcGlkZW1pYyB2aWV3CitFUElWSUVXLlNFTEVDVERJUj1cdTkwMDlcdTYyZTlcdTY1ODdcdTRlZjZcdTU5MzkKK0VQSVZJRVcuQUdHUkVHQVRFREFUQT1cdTdkMmZcdTUyYTBcdTY1NzBcdTYzNmUKK0VQSVZJRVcuUkVGRVJFTkNFRk9MREVSTEFCRUw9XHU0ZjdmXHU3NTI4XHU1NTljXHU1OTdkXHU4ZmM3XHU2ZWU0XHU1NjY4CitFUElWSUVXLlNFTEVDVEZJTEU9XHU5MDA5XHU2MmU5XHU2NTg3XHU0ZWY2CitFUElWSUVXLlNFTEVDVFNDRU5BUklPRk9MREVSPVx1OTAwOVx1NjJlOVx1NjViOVx1Njg0OFx1NjU4N1x1NGVmNlx1NTkzOQorRVBJVklFVy5TRUxFQ1RSRUZFUkVOQ0VGT0xERVI9XHU5MDA5XHU2MmU5XHU1M2MyXHU4MDAzXHU2NTg3XHU0ZWY2XHU1OTM5CitFUElWSUVXLlNFTEVDVEFHR0ZJTEU9XHU5MDA5XHU2MmU5XHU3ZWZjXHU1NDA4XHU2NTg3XHU0ZWY2CitFUElWSUVXLlNFTEVDVElOQ0ZJTEU9XHU5MDA5XHU2MmU5XHU1M2QxXHU3NWM1XHU3Mzg3XHU2NTg3XHU0ZWY2CitFUElWSUVXLlBMT1RURVhUPVx1NzUzYlx1NTZmZQorRVBJVklFVy5BR0dSRUdBVEVMRUdFTkQ9XHU3NWFiXHU2MGM1CitFUElWSUVXLllBWElTPVx1NzljZFx1N2ZhNAorRVBJVklFVy5TQ0VOQVJJT0ZPTERFUkxBQkVMPVx1NjBjNVx1NjY2Zlx1NjU4N1x1NGVmNlx1NTkzOQorRVBJVklFVy5BR0dGSUxFTEFCRUw9XHU2NWI5XHU2ODQ4XHU2MDNiXHU3ZWQzXHU2NTg3XHU0ZWY2CitFUElWSUVXLklOQ0ZJTEVMQUJFTD1cdTYwYzVcdTY2NmZcdTUzZDFcdTc1YzVcdTczODdcdTZhMjFcdTU3OGIKKworIyBJbmNpZGVuY2UgY2hhcnQgcGFydCBvZiBFUElWSUVXCitJTkNWSUVXLklOQ0lERU5DRUxFR0VORD1cdTUzZDFcdTc1YzVcdTczODcKK0lOQ1ZJRVcuWUFYSVM9XHU1M2QxXHU3NWM1XHU3Mzg3CisKKyMgRXN0aW1hdG9yIHZpZXcKK0VTVC5USVRMRT1cdTUzYzJcdTY1NzBcdTRmMzBcdThiYTEKK0VTVC5FU1RJTUFURT1cdTRmMzBcdThiYTFcdTUzYzJcdTY1NzAKK0VTVC5TRUxFQ1RFU1RJTUFUT1I9XHU5MDA5XHU2MmU5CitFU1QuUkVTVUxUUz1cdTdlZDNcdTY3OWNcdWZmMWEKK0VTVC5DT01QTEVURT1cdTUzYzJcdTY1NzBcdTRmMzBcdThiYTFcdTViOGNcdTYyMTAKK0VTVC5TQ0ZPTERFUj1cdTYwYzVcdTY2NmZcdTY1ODdcdTRlZjZcdTU5MzkKK0VTVC5QQVJBTUVTVElNQVRPUj1cdTUzYzJcdTY1NzBcdTRmMzBcdTdiOTdcdWZmMWEKK0VTVC5TRUxFQ1RGT0xERUJVVFRPTj1cdTkwMDlcdTYyZTlcdTY1YjlcdTY4NDhcdTY1ODdcdTRlZjZcdTU5MzkKK0VTVC5TRUxFQ1RGT0xERURJQUxPR1RJVExFPVx1OTAwOVx1NjJlOVx1NjViOVx1Njg0OFx1NjU4N1x1NGVmNlx1NTkzOQorRVNULlBBUkFNRVNUVElUTEU9XHU5MDA5XHU2MmU5XHU1M2MyXHU2NTcwXHU0ZjMwXHU4YmExCitFU1QuUEFSQU1FU1RMQUJFTD1cdTkwMDlcdTYyZTlcdTUzYzJcdTY1NzBcdTRmMzBcdThiYTFcdWZmMWEKK0VTVC5XSVpBUkRQQUdFMVRJVExFPVx1OTAwOVx1NjJlOVx1NjViOVx1Njg0OFx1NjU4N1x1NGVmNlx1NTkzOQorRVNULkNIT0lDRTE9XHU1ODZiXHU1MTQ1XHU2YmNmXHU0ZTJhXHU0ZjRkXHU3ZjZlXHVmZjBjXHU3MTM2XHU1NDBlXHU1ZTczXHU1NzQ3CitFU1QuQ0hPSUNFMj1cdTVjMDZcdTYyNDBcdTY3MDlcdTUzM2FcdTU3ZGZcdTc2ZjhcdTUyYTBcdWZmMGNcdTcxMzZcdTU0MGVcdThjMDNcdTY1NzQKK0VTVC5NQVhUSFJFU0hPTERTPVx1NjcwMFx1NTkyN1MKK0VTVC5NSU5USFJFU0hPTERTPVx1NjcwMFx1NWMwZlx1NzY4NFMKK0VTVC5NQVhUSFJFU0hPTERFPVx1NjcwMFx1NTkyN1x1MDBjYgorRVNULk1JTlRIUkVTSE9MREU9XHU2NzAwXHU1YzBmXHU3Njg0RQorRVNULk1BWFRIUkVTSE9MREk9XHU2NzAwXHU1OTI3SQorRVNULk1JTlRIUkVTSE9MREk9XHU2NzAwXHU1YzBmXHU3Njg0SQorRVNULk1BWFRIUkVTSE9MRFI9XHU2NzAwXHU1OTI3UgorRVNULk1JTlRIUkVTSE9MRFI9XHU2NzAwXHU1OTI3UgorRVNULlJFU1VMVFM9XHU3ZWQzXHU2NzljCitFU1QuSU5QVVREQVRBPVx1OGY5M1x1NTE2NVx1NjU3MFx1NjM2ZQorRVNULlJFR1JFU1NJT049XHU1NmRlXHU1ZjUyCitFU1QuQVZFUkFHRT1cdTVlNzNcdTU3NDcKK0VTVC5ESVNQTEFZPVx1NjU3MFx1NjM2ZVx1NjYzZVx1NzkzYQorRVNULkVRVUFUSU9OMT1FcS4xCitFU1QuRVFVQVRJT04yPUVxLjIKK0VTVC5FUVVBVElPTjM9RXEuMworRVNULkVRVUFUSU9OND1FcS40CitFU1QuQVhJU0xBQkVMMT1TXHVmZjBjUyAqCitFU1QuQVhJU0xBQkVMMj1FXHVmZjBjRSAqCitFU1QuQVhJU0xBQkVMMz1JLEkqCitFU1QuQVhJU0xBQkVMND1SXHVmZjBjUiAqCitFU1QuUkFYSVNMQUJFTDE9XHU0ZWNlZFMgLyBkVAorRVNULlJBWElTTEFCRUwyPVx1NGVjZWRFIC8gZFQKK0VTVC5SQVhJU0xBQkVMMz1cdTRlY2VkSSAvIGRUCitFU1QuUkFYSVNMQUJFTDQ9XHU0ZWNlZFIgLyBkVAorIworIyBiZXRhKGYpCitFU1QuRlJFUUJFVEE9XCB1MDNiMlx1ZmYwOEZcdWZmMDkKKyMgYmV0YShyaG8pCitFU1QuREVOU0lUWUJFVEE9XCB1MDNiMlx1ZmYwOFwgdTAzYzFcdWZmMDkKKworIyBMeWFwdW5vdiB2aWV3CitMWUEuRElWRVJHRU5DRUxFR0VORD1cdTY3NGVcdTk2YzVcdTY2NmVcdThiZmFcdTU5MmJcdThmNjhcdThmZjlcdTUzZDFcdTY1NjMKK0xZQS5ESVZFUkdFTkNFWUFYSVM9bG5bZGVsdGFdCitMWUEuVElUTEU9XHU2NzRlXHU5NmM1XHU2NjZlXHU4YmZhXHU1OTJiXHU1MjA2XHU2NzkwCitMWUEuQ09NUEFSSVNPTj1cdThiYTFcdTdiOTdMeWFwdW5vdlx1NjMwN1x1NjU3MAorTFlBLlJFU1VMVFM9XHU3ZWQzXHU2NzljCitMWUEuV09SS0lORz1cdTZiNjNcdTU3MjhcdThmZDBcdTg4NGMKK0xZQS5ET05FPVx1NWI4Y1x1NjIxMFx1MzAwMgorTFlBLkVSUk9SMT1cdTY1ZTBcdTY1NDhcdTc2ODRcdTY1ODdcdTRlZjZcdTU5MzlcdTMwMDJcdThiZjdcdTkwMDlcdTYyZTlcdTRlMDBcdTRlMmFcdTViOGNcdTY1NzRcdTc2ODRcdTYwYzVcdTY2NmZcdTY1ODdcdTRlZjZcdTU5MzlcdTMwMDJcdTVlNzZcdTRlMGRcdTY2MmZcdWZmMDhcdTRmOGJcdTU5ODJcdWZmMDlcdTRlMDBcdTRlMmFcdTk2YzZcdTU0MDhcdTc2ODRcdTY1ODdcdTRlZjZcdTU5MzlcdTMwMDIKK0xZQS5DT01QTEVURT1cdTZiZDRcdThmODNcdTViOGNcdTYyMTAKK0xZQS5TRUxFQ1RGT0xERVI9XHU5MDA5XHU2MmU5XHU2NWI5XHU2ODQ4XHU2NTg3XHU0ZWY2XHU1OTM5CitMWUEuU0VMRUNURk9MREVSRElBTEc9XHU5MDA5XHU2MmU5XHU0ZTAwXHU0ZTJhXHU1NzNhXHU2NjZmXHU2NTg3XHU0ZWY2XHU1OTM5CitMWUEuRk9MREVSMUxBQkVMPVx1NjBjNVx1NjY2Zlx1NjU4N1x1NGVmNlx1NTkzOTEKK0xZQS5GT0xERVIyTEFCRUw9XHU2MGM1XHU2NjZmXHU2NTg3XHU0ZWY2XHU1OTM5MgorTFlBLkRFVklBVElPTj1cdTY3NGVcdTk2YzVcdTY2NmVcdThiZmFcdTU5MmJcdTUwNGZcdTVkZWUKKworIyBTY2VuYXJpbyBjb21wYXJpc29uIHZpZXcKK0NPTVAuUk1TRElGRkVSRU5DRUxBQkVMPVx1OTUxOVx1OGJlZgorQ09NUC5STVNTVFJJTkc9XHU5NTE5XHU4YmVmCitDT01QLkFOQUxZWkU9XHU1MjA2XHU2NzkwCitDT01QLlRJVExFPVx1NjViOVx1Njg0OFx1NmJkNFx1OGY4MworQ09NUC5DT01QQVJFPVJNU1x1NmJkNFx1OGY4MworQ09NUC5SRVNVTFRTPVx1N2VkM1x1Njc5Y1x1ZmYxYQorQ09NUC5TRUxFQ1RGT0xERVJCVVRUT049XHU5MDA5XHU2MmU5XHU2NTg3XHU0ZWY2XHU1OTM5CitDT01QLlNFTEVDVEZPTERFUkRJQUxPRz1cdTkwMDlcdTYyZTlcdTRlMDBcdTRlMmFcdTU3M2FcdTY2NmZcdTY1ODdcdTRlZjZcdTU5MzkKK0NPTVAuRk9MREVSMUxBQkVMPVx1NTNjMlx1ODAwM1x1NjBjNVx1NjY2Zlx1NjU4N1x1NGVmNlx1NTkzOVx1ZmYxYQorQ09NUC5GT0xERVIyTEFCRUw9XHU2YmQ0XHU4ZjgzXHU2NWI5XHU2ODQ4XHU2NTg3XHU0ZWY2XHU1OTM5XHVmZjA4U1x1ZmYwOVx1ZmYxYQorQ09NUC5FUlJPUkZVTkNUSU9OPVx1OGJlZlx1NWRlZVx1NTFmZFx1NjU3MAorCisjIFByb2Nlc3NvciB2aWV3CitQUk9DRVNTT1IuVElUTEU9XHU2NTcwXHU2MzZlXHU1OTA0XHU3NDA2XHU1NjY4CitQUk9DRVNTT1IuU09VUkNFRk9MREVSPVx1NmU5MFx1NjU4N1x1NGVmNlx1NTkzOVx1ZmYxYQorUFJPQ0VTU09SLlNFTEVDVFNPVVJDRUZPTERFUj1cdTkwMDlcdTYyZTlcdTZlOTBcdTY1ODdcdTRlZjZcdTU5MzkKK1BST0NFU1NPUi5TRUxFQ1RTT1VSQ0VGT0xERURJQUxPR1RJVExFPVx1OTAwOVx1NjJlOVx1NmU5MFx1NjU4N1x1NGVmNlx1NTkzOQorUFJPQ0VTU09SLlRBUkdFVEZPTERFUj1cdTc2ZWVcdTY4MDdcdTY1ODdcdTRlZjZcdTU5MzlcdWZmMWEKK1BST0NFU1NPUi5TRUxFQ1RUQVJHRVRGT0xERVI9XHU5MDA5XHU2MmU5XHU3NmVlXHU2ODA3XHU2NTg3XHU0ZWY2XHU1OTM5CitQUk9DRVNTT1IuU0VMRUNUVEFSR0VURk9MREVESUFMT0dUSVRMRT1cdTkwMDlcdTYyZTlcdTc2ZWVcdTY4MDdcdTY1ODdcdTRlZjZcdTU5MzkKK1BST0NFU1NPUi5QT1BVTEFUSU9OREFUQUZJTEU9XHU3OWNkXHU3ZmE0XHU2NTcwXHU2MzZlXHU2NTg3XHU0ZWY2XHVmZjFhCitQUk9DRVNTT1IuU0VMRUNUUE9QVUxBVElPTkRBVEFGSUxFPVx1OTAwOVx1NjJlOVx1NzljZFx1N2ZhNFx1NjU3MFx1NjM2ZVx1NjU4N1x1NGVmNgorUFJPQ0VTU09SLlNFTEVDVFBPUFVMQVRJT05EQVRBRklMRURJQUxPR1RJVExFPVx1OTAwOVx1NjJlOVx1NzljZFx1N2ZhNFx1NjU3MFx1NjM2ZVx1NjU4N1x1NGVmNgorUFJPQ0VTU09SLk5BTUVEQVRBRklMRT1cdTdlZDlcdTY1NzBcdTYzNmVcdTY1ODdcdTRlZjZcdTU0N2RcdTU0MGRcdWZmMWEKK1BST0NFU1NPUi5TRUxFQ1ROQU1FREFUQUZJTEU9XHU5MDA5XHU2MmU5XHU1NDBkXHU3OWYwXHU2NTcwXHU2MzZlXHU2NTg3XHU0ZWY2CitQUk9DRVNTT1IuU0VMRUNUTkFNRURBVEFGSUxFRElBTE9HVElUTEU9XHU5MDA5XHU2MmU5XHU1NDBkXHU3OWYwXHU2NTcwXHU2MzZlXHU2NTg3XHU0ZWY2CitQUk9DRVNTT1IuUkVDT1ZFUllSQVRFPVx1NWViN1x1NTkwZFx1NzM4NworUFJPQ0VTU09SLlNVU0NFUFRJQkxFUkFURT1cdTY2MTNcdTYxMWZcdTY3ZDNcdTczODcKK1BST0NFU1NPUi5JTU1VTklUWUxPU1NSQVRFPVx1NTE0ZFx1NzVhYlx1NjM1Zlx1NTkzMVx1NzM4NworUFJPQ0VTU09SLlBST0NFU1M9XHU1OTA0XHU3NDA2XHU2NTcwXHU2MzZlCitQUk9DRVNTT1IuUEFSQU1FVEVSUz1cdTc1YmVcdTc1YzVcdTUzYzJcdTY1NzBcdWZmMWEKK1BST0NFU1NPUi5QT1BVTEFUSU9OU0laRT1cdTc5Y2RcdTdmYTRcdTg5YzRcdTZhMjFcdWZmMWEKK1BST0NFU1NPUi5TVEFSVFlFQVI9XHU1ZjAwXHU1OWNiXHU1ZTc0XHU0ZWZkCitQUk9DRVNTT1IuRU5EWUVBUj1cdTdlZDNcdTY3NWZcdTVlNzRcdTRlZmQKK1BST0NFU1NPUi5SRUFESU5HREFUQT1cdThiZmJcdTUzZDZcdTY1NzBcdTYzNmUuLi4gLi4uCitQUk9DRVNTT1IuRkFJTEVEUkVBRERBVEE9XHU2NWUwXHU2NTQ4XHU3Njg0XHU2NTcwXHU2MzZlCisKKyMgVGltZSBzZXJpZXMgY2hhcnQKK1RTLlRJTUVMQUJFTD1cdTY1ZjZcdTk1ZjQKKworIyBDb250ZXh0IG1lbnUgZW50cmllcworQ29udGV4dE1lbnUuTGluZWFyVGltZVNjYWxlPVx1N2ViZlx1NjAyN1x1ODljNFx1NmEyMQorQ29udGV4dE1lbnUuTG9nVGltZVNjYWxlPVx1NjVlNVx1NWZkN1x1N2I0OVx1N2VhNworQ29udGV4dE1lbnUuTGluZWFyU2NhbGluZz1cdTdlYmZcdTYwMjdcdTg5YzRcdTZhMjEKK0NvbnRleHRNZW51LkxvZ1NjYWxpbmc9XHU2NWU1XHU1ZmQ3XHU3YjQ5XHU3ZWE3CitDb250ZXh0TWVudS5TaG93TGVnZW5kPVx1NjYzZVx1NzkzYVx1NTZmZVx1NGY4YgorQ29udGV4dE1lbnUuSGlkZUxlZ2VuZD1cdTk2OTBcdTg1Y2ZcdTU2ZmVcdTRmOGIKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLy5jbGFzc3BhdGggYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS8uY2xhc3NwYXRoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMwNGU4NjEKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS8uY2xhc3NwYXRoCkBAIC0wLDAgKzEsNyBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxjbGFzc3BhdGg+CisJPGNsYXNzcGF0aGVudHJ5IGtpbmQ9InNyYyIgcGF0aD0ic3JjIi8+CisJPGNsYXNzcGF0aGVudHJ5IGtpbmQ9ImNvbiIgcGF0aD0ib3JnLmVjbGlwc2UuamR0LmxhdW5jaGluZy5KUkVfQ09OVEFJTkVSL29yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC5kZWJ1Zy51aS5sYXVuY2hlci5TdGFuZGFyZFZNVHlwZS9KMlNFLTEuNSIvPgorCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJjb24iIHBhdGg9Im9yZy5lY2xpcHNlLnBkZS5jb3JlLnJlcXVpcmVkUGx1Z2lucyIvPgorCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJvdXRwdXQiIHBhdGg9ImJpbiIvPgorPC9jbGFzc3BhdGg+CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS8uY3ZzaWdub3JlIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvLmN2c2lnbm9yZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZTI3YmU3Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvLmN2c2lnbm9yZQpAQCAtMCwwICsxIEBACit0ZXh0CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS8uZmJwcmVmcyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLy5mYnByZWZzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM0Nzk0MmYKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS8uZmJwcmVmcwpAQCAtMCwwICsxLDE0NyBAQAorI0ZpbmRCdWdzIFVzZXIgUHJlZmVyZW5jZXMKKyNUdWUgTWF5IDI3IDE1OjM4OjU0IEVEVCAyMDA4CitkZXRlY3RvckFwcGVuZGluZ1RvQW5PYmplY3RPdXRwdXRTdHJlYW09QXBwZW5kaW5nVG9Bbk9iamVjdE91dHB1dFN0cmVhbXx0cnVlCitkZXRlY3RvckJDUE1ldGhvZFJldHVybkNoZWNrPUJDUE1ldGhvZFJldHVybkNoZWNrfGZhbHNlCitkZXRlY3RvckJhZEFwcGxldENvbnN0cnVjdG9yPUJhZEFwcGxldENvbnN0cnVjdG9yfGZhbHNlCitkZXRlY3RvckJhZFJlc3VsdFNldEFjY2Vzcz1CYWRSZXN1bHRTZXRBY2Nlc3N8dHJ1ZQorZGV0ZWN0b3JCYWRTeW50YXhGb3JSZWd1bGFyRXhwcmVzc2lvbj1CYWRTeW50YXhGb3JSZWd1bGFyRXhwcmVzc2lvbnx0cnVlCitkZXRlY3RvckJhZFVzZU9mUmV0dXJuVmFsdWU9QmFkVXNlT2ZSZXR1cm5WYWx1ZXx0cnVlCitkZXRlY3RvckJhZGx5T3ZlcnJpZGRlbkFkYXB0ZXI9QmFkbHlPdmVycmlkZGVuQWRhcHRlcnx0cnVlCitkZXRlY3RvckJvb2xlYW5SZXR1cm5OdWxsPUJvb2xlYW5SZXR1cm5OdWxsfHRydWUKK2RldGVjdG9yQ2FsbGVkTWV0aG9kcz1DYWxsZWRNZXRob2RzfHRydWUKK2RldGVjdG9yQ2hlY2tDYWxscz1DaGVja0NhbGxzfGZhbHNlCitkZXRlY3RvckNoZWNrSW1tdXRhYmxlQW5ub3RhdGlvbj1DaGVja0ltbXV0YWJsZUFubm90YXRpb258dHJ1ZQorZGV0ZWN0b3JDaGVja1R5cGVRdWFsaWZpZXJzPUNoZWNrVHlwZVF1YWxpZmllcnN8dHJ1ZQorZGV0ZWN0b3JDbG9uZUlkaW9tPUNsb25lSWRpb218dHJ1ZQorZGV0ZWN0b3JDb21wYXJhdG9ySWRpb209Q29tcGFyYXRvcklkaW9tfHRydWUKK2RldGVjdG9yQ29uZnVzZWRJbmhlcml0YW5jZT1Db25mdXNlZEluaGVyaXRhbmNlfHRydWUKK2RldGVjdG9yQ29uZnVzaW9uQmV0d2VlbkluaGVyaXRlZEFuZE91dGVyTWV0aG9kPUNvbmZ1c2lvbkJldHdlZW5Jbmhlcml0ZWRBbmRPdXRlck1ldGhvZHx0cnVlCitkZXRlY3RvckNyb3NzU2l0ZVNjcmlwdGluZz1Dcm9zc1NpdGVTY3JpcHRpbmd8dHJ1ZQorZGV0ZWN0b3JEb0luc2lkZURvUHJpdmlsZWdlZD1Eb0luc2lkZURvUHJpdmlsZWdlZHx0cnVlCitkZXRlY3RvckRvbnRDYXRjaElsbGVnYWxNb25pdG9yU3RhdGVFeGNlcHRpb249RG9udENhdGNoSWxsZWdhbE1vbml0b3JTdGF0ZUV4Y2VwdGlvbnx0cnVlCitkZXRlY3RvckRvbnRVc2VFbnVtPURvbnRVc2VFbnVtfHRydWUKK2RldGVjdG9yRHJvcHBlZEV4Y2VwdGlvbj1Ecm9wcGVkRXhjZXB0aW9ufHRydWUKK2RldGVjdG9yRHVtYk1ldGhvZEludm9jYXRpb25zPUR1bWJNZXRob2RJbnZvY2F0aW9uc3x0cnVlCitkZXRlY3RvckR1bWJNZXRob2RzPUR1bWJNZXRob2RzfHRydWUKK2RldGVjdG9yRHVwbGljYXRlQnJhbmNoZXM9RHVwbGljYXRlQnJhbmNoZXN8dHJ1ZQorZGV0ZWN0b3JFbXB0eVppcEZpbGVFbnRyeT1FbXB0eVppcEZpbGVFbnRyeXx0cnVlCitkZXRlY3RvckVxU3RyaW5nVGVzdD1FcVN0cmluZ1Rlc3R8ZmFsc2UKK2RldGVjdG9yRmllbGRJdGVtU3VtbWFyeT1GaWVsZEl0ZW1TdW1tYXJ5fHRydWUKK2RldGVjdG9yRmluYWxpemVyTnVsbHNGaWVsZHM9RmluYWxpemVyTnVsbHNGaWVsZHN8dHJ1ZQorZGV0ZWN0b3JGaW5kQmFkQ2FzdD1GaW5kQmFkQ2FzdHxmYWxzZQorZGV0ZWN0b3JGaW5kQmFkQ2FzdDI9RmluZEJhZENhc3QyfHRydWUKK2RldGVjdG9yRmluZEJhZEVxdWFsc0ltcGxlbWVudGF0aW9uPUZpbmRCYWRFcXVhbHNJbXBsZW1lbnRhdGlvbnxmYWxzZQorZGV0ZWN0b3JGaW5kQmFkRm9yTG9vcD1GaW5kQmFkRm9yTG9vcHx0cnVlCitkZXRlY3RvckZpbmRCdWdzU3VtbWFyeVN0YXRzPUZpbmRCdWdzU3VtbWFyeVN0YXRzfHRydWUKK2RldGVjdG9yRmluZENpcmN1bGFyRGVwZW5kZW5jaWVzPUZpbmRDaXJjdWxhckRlcGVuZGVuY2llc3xmYWxzZQorZGV0ZWN0b3JGaW5kRGVhZExvY2FsU3RvcmVzPUZpbmREZWFkTG9jYWxTdG9yZXN8dHJ1ZQorZGV0ZWN0b3JGaW5kRG91YmxlQ2hlY2s9RmluZERvdWJsZUNoZWNrfHRydWUKK2RldGVjdG9yRmluZEVtcHR5U3luY2hyb25pemVkQmxvY2s9RmluZEVtcHR5U3luY2hyb25pemVkQmxvY2t8dHJ1ZQorZGV0ZWN0b3JGaW5kRmllbGRTZWxmQXNzaWdubWVudD1GaW5kRmllbGRTZWxmQXNzaWdubWVudHx0cnVlCitkZXRlY3RvckZpbmRGaW5hbGl6ZUludm9jYXRpb25zPUZpbmRGaW5hbGl6ZUludm9jYXRpb25zfHRydWUKK2RldGVjdG9yRmluZEZsb2F0RXF1YWxpdHk9RmluZEZsb2F0RXF1YWxpdHl8dHJ1ZQorZGV0ZWN0b3JGaW5kRmxvYXRNYXRoPUZpbmRGbG9hdE1hdGh8ZmFsc2UKK2RldGVjdG9yRmluZEhFbWlzbWF0Y2g9RmluZEhFbWlzbWF0Y2h8dHJ1ZQorZGV0ZWN0b3JGaW5kSW5jb25zaXN0ZW50U3luYzI9RmluZEluY29uc2lzdGVudFN5bmMyfHRydWUKK2RldGVjdG9yRmluZEpTUjE2NkxvY2tNb25pdG9yZW50ZXI9RmluZEpTUjE2NkxvY2tNb25pdG9yZW50ZXJ8dHJ1ZQorZGV0ZWN0b3JGaW5kTG9jYWxTZWxmQXNzaWdubWVudDI9RmluZExvY2FsU2VsZkFzc2lnbm1lbnQyfHRydWUKK2RldGVjdG9yRmluZE1hc2tlZEZpZWxkcz1GaW5kTWFza2VkRmllbGRzfHRydWUKK2RldGVjdG9yRmluZE1pc21hdGNoZWRXYWl0T3JOb3RpZnk9RmluZE1pc21hdGNoZWRXYWl0T3JOb3RpZnl8dHJ1ZQorZGV0ZWN0b3JGaW5kTmFrZWROb3RpZnk9RmluZE5ha2VkTm90aWZ5fHRydWUKK2RldGVjdG9yRmluZE5vblNlcmlhbGl6YWJsZVN0b3JlSW50b1Nlc3Npb249RmluZE5vblNlcmlhbGl6YWJsZVN0b3JlSW50b1Nlc3Npb258dHJ1ZQorZGV0ZWN0b3JGaW5kTm9uU2VyaWFsaXphYmxlVmFsdWVQYXNzZWRUb1dyaXRlT2JqZWN0PUZpbmROb25TZXJpYWxpemFibGVWYWx1ZVBhc3NlZFRvV3JpdGVPYmplY3R8dHJ1ZQorZGV0ZWN0b3JGaW5kTm9uU2hvcnRDaXJjdWl0PUZpbmROb25TaG9ydENpcmN1aXR8dHJ1ZQorZGV0ZWN0b3JGaW5kTnVsbERlcmVmPUZpbmROdWxsRGVyZWZ8dHJ1ZQorZGV0ZWN0b3JGaW5kT3BlblN0cmVhbT1GaW5kT3BlblN0cmVhbXx0cnVlCitkZXRlY3RvckZpbmRQdXp6bGVycz1GaW5kUHV6emxlcnN8dHJ1ZQorZGV0ZWN0b3JGaW5kUmVmQ29tcGFyaXNvbj1GaW5kUmVmQ29tcGFyaXNvbnx0cnVlCitkZXRlY3RvckZpbmRSZXR1cm5SZWY9RmluZFJldHVyblJlZnx0cnVlCitkZXRlY3RvckZpbmRSdW5JbnZvY2F0aW9ucz1GaW5kUnVuSW52b2NhdGlvbnN8dHJ1ZQorZGV0ZWN0b3JGaW5kU2VsZkNvbXBhcmlzb249RmluZFNlbGZDb21wYXJpc29ufHRydWUKK2RldGVjdG9yRmluZFNlbGZDb21wYXJpc29uMj1GaW5kU2VsZkNvbXBhcmlzb24yfHRydWUKK2RldGVjdG9yRmluZFNsZWVwV2l0aExvY2tIZWxkPUZpbmRTbGVlcFdpdGhMb2NrSGVsZHx0cnVlCitkZXRlY3RvckZpbmRTcGluTG9vcD1GaW5kU3Bpbkxvb3B8dHJ1ZQorZGV0ZWN0b3JGaW5kU3FsSW5qZWN0aW9uPUZpbmRTcWxJbmplY3Rpb258dHJ1ZQorZGV0ZWN0b3JGaW5kVHdvTG9ja1dhaXQ9RmluZFR3b0xvY2tXYWl0fHRydWUKK2RldGVjdG9yRmluZFVuY2FsbGVkUHJpdmF0ZU1ldGhvZHM9RmluZFVuY2FsbGVkUHJpdmF0ZU1ldGhvZHN8dHJ1ZQorZGV0ZWN0b3JGaW5kVW5jb25kaXRpb25hbFdhaXQ9RmluZFVuY29uZGl0aW9uYWxXYWl0fHRydWUKK2RldGVjdG9yRmluZFVuaW5pdGlhbGl6ZWRHZXQ9RmluZFVuaW5pdGlhbGl6ZWRHZXR8dHJ1ZQorZGV0ZWN0b3JGaW5kVW5yZWxhdGVkVHlwZXNJbkdlbmVyaWNDb250YWluZXI9RmluZFVucmVsYXRlZFR5cGVzSW5HZW5lcmljQ29udGFpbmVyfHRydWUKK2RldGVjdG9yRmluZFVucmVsZWFzZWRMb2NrPUZpbmRVbnJlbGVhc2VkTG9ja3x0cnVlCitkZXRlY3RvckZpbmRVbnNhdGlzZmllZE9ibGlnYXRpb249RmluZFVuc2F0aXNmaWVkT2JsaWdhdGlvbnxmYWxzZQorZGV0ZWN0b3JGaW5kVW5zeW5jR2V0PUZpbmRVbnN5bmNHZXR8dHJ1ZQorZGV0ZWN0b3JGaW5kVXNlbGVzc0NvbnRyb2xGbG93PUZpbmRVc2VsZXNzQ29udHJvbEZsb3d8dHJ1ZQorZGV0ZWN0b3JIdWdlU2hhcmVkU3RyaW5nQ29uc3RhbnRzPUh1Z2VTaGFyZWRTdHJpbmdDb25zdGFudHN8dHJ1ZQorZGV0ZWN0b3JJRGl2UmVzdWx0Q2FzdFRvRG91YmxlPUlEaXZSZXN1bHRDYXN0VG9Eb3VibGV8dHJ1ZQorZGV0ZWN0b3JJbmNvbXBhdE1hc2s9SW5jb21wYXRNYXNrfHRydWUKK2RldGVjdG9ySW5lZmZpY2llbnRNZW1iZXJBY2Nlc3M9SW5lZmZpY2llbnRNZW1iZXJBY2Nlc3N8ZmFsc2UKK2RldGVjdG9ySW5lZmZpY2llbnRUb0FycmF5PUluZWZmaWNpZW50VG9BcnJheXx0cnVlCitkZXRlY3RvckluZmluaXRlTG9vcD1JbmZpbml0ZUxvb3B8dHJ1ZQorZGV0ZWN0b3JJbmZpbml0ZVJlY3Vyc2l2ZUxvb3A9SW5maW5pdGVSZWN1cnNpdmVMb29wfHRydWUKK2RldGVjdG9ySW5maW5pdGVSZWN1cnNpdmVMb29wMj1JbmZpbml0ZVJlY3Vyc2l2ZUxvb3AyfGZhbHNlCitkZXRlY3RvckluaGVyaXRhbmNlVW5zYWZlR2V0UmVzb3VyY2U9SW5oZXJpdGFuY2VVbnNhZmVHZXRSZXNvdXJjZXx0cnVlCitkZXRlY3RvckluaXRpYWxpemF0aW9uQ2hhaW49SW5pdGlhbGl6YXRpb25DaGFpbnxmYWxzZQorZGV0ZWN0b3JJbnN0YW50aWF0ZVN0YXRpY0NsYXNzPUluc3RhbnRpYXRlU3RhdGljQ2xhc3N8dHJ1ZQorZGV0ZWN0b3JJbnZhbGlkSlVuaXRUZXN0PUludmFsaWRKVW5pdFRlc3R8dHJ1ZQorZGV0ZWN0b3JJdGVyYXRvcklkaW9tcz1JdGVyYXRvcklkaW9tc3x0cnVlCitkZXRlY3RvckxhenlJbml0PUxhenlJbml0fHRydWUKK2RldGVjdG9yTG9hZE9mS25vd25OdWxsVmFsdWU9TG9hZE9mS25vd25OdWxsVmFsdWV8dHJ1ZQorZGV0ZWN0b3JMb2NrZWRGaWVsZHM9TG9ja2VkRmllbGRzfGZhbHNlCitkZXRlY3Rvck1ldGhvZFJldHVybkNoZWNrPU1ldGhvZFJldHVybkNoZWNrfHRydWUKK2RldGVjdG9yTWV0aG9kcz1NZXRob2RzfHRydWUKK2RldGVjdG9yTXVsdGl0aHJlYWRlZEluc3RhbmNlQWNjZXNzPU11bHRpdGhyZWFkZWRJbnN0YW5jZUFjY2Vzc3x0cnVlCitkZXRlY3Rvck11dGFibGVMb2NrPU11dGFibGVMb2NrfHRydWUKK2RldGVjdG9yTXV0YWJsZVN0YXRpY0ZpZWxkcz1NdXRhYmxlU3RhdGljRmllbGRzfHRydWUKK2RldGVjdG9yTmFtaW5nPU5hbWluZ3x0cnVlCitkZXRlY3Rvck5vdGVBbm5vdGF0aW9uUmV0ZW50aW9uPU5vdGVBbm5vdGF0aW9uUmV0ZW50aW9ufHRydWUKK2RldGVjdG9yTm90ZUNoZWNrUmV0dXJuVmFsdWU9Tm90ZUNoZWNrUmV0dXJuVmFsdWV8dHJ1ZQorZGV0ZWN0b3JOb3RlQ2hlY2tSZXR1cm5WYWx1ZUFubm90YXRpb25zPU5vdGVDaGVja1JldHVyblZhbHVlQW5ub3RhdGlvbnN8dHJ1ZQorZGV0ZWN0b3JOb3RlRGlyZWN0bHlSZWxldmFudFR5cGVRdWFsaWZpZXJzPU5vdGVEaXJlY3RseVJlbGV2YW50VHlwZVF1YWxpZmllcnN8dHJ1ZQorZGV0ZWN0b3JOb3RlSkNJUEFubm90YXRpb249Tm90ZUpDSVBBbm5vdGF0aW9ufHRydWUKK2RldGVjdG9yTm90ZU5vbk51bGxBbm5vdGF0aW9ucz1Ob3RlTm9uTnVsbEFubm90YXRpb25zfHRydWUKK2RldGVjdG9yTm90ZU5vbm51bGxSZXR1cm5WYWx1ZXM9Tm90ZU5vbm51bGxSZXR1cm5WYWx1ZXN8dHJ1ZQorZGV0ZWN0b3JOb3RlU3VwcHJlc3NlZFdhcm5pbmdzPU5vdGVTdXBwcmVzc2VkV2FybmluZ3N8dHJ1ZQorZGV0ZWN0b3JOb3RlVW5jb25kaXRpb25hbFBhcmFtRGVyZWZzPU5vdGVVbmNvbmRpdGlvbmFsUGFyYW1EZXJlZnN8dHJ1ZQorZGV0ZWN0b3JOdW1iZXJDb25zdHJ1Y3Rvcj1OdW1iZXJDb25zdHJ1Y3RvcnxmYWxzZQorZGV0ZWN0b3JPdmVycmlkaW5nRXF1YWxzTm90U3ltbWV0cmljYWw9T3ZlcnJpZGluZ0VxdWFsc05vdFN5bW1ldHJpY2FsfHRydWUKK2RldGVjdG9yUHJlZmVyWmVyb0xlbmd0aEFycmF5cz1QcmVmZXJaZXJvTGVuZ3RoQXJyYXlzfHRydWUKK2RldGVjdG9yUHVibGljU2VtYXBob3Jlcz1QdWJsaWNTZW1hcGhvcmVzfGZhbHNlCitkZXRlY3RvclF1ZXN0aW9uYWJsZUJvb2xlYW5Bc3NpZ25tZW50PVF1ZXN0aW9uYWJsZUJvb2xlYW5Bc3NpZ25tZW50fHRydWUKK2RldGVjdG9yUmVhZFJldHVyblNob3VsZEJlQ2hlY2tlZD1SZWFkUmV0dXJuU2hvdWxkQmVDaGVja2VkfHRydWUKK2RldGVjdG9yUmVkdW5kYW50SW50ZXJmYWNlcz1SZWR1bmRhbnRJbnRlcmZhY2VzfHRydWUKK2RldGVjdG9yUmVmbGVjdGl2ZUNsYXNzZXM9UmVmbGVjdGl2ZUNsYXNzZXN8dHJ1ZQorZGV0ZWN0b3JSZXNvbHZlQWxsUmVmZXJlbmNlcz1SZXNvbHZlQWxsUmVmZXJlbmNlc3xmYWxzZQorZGV0ZWN0b3JSdW50aW1lRXhjZXB0aW9uQ2FwdHVyZT1SdW50aW1lRXhjZXB0aW9uQ2FwdHVyZXx0cnVlCitkZXRlY3RvclNlcmlhbGl6YWJsZUlkaW9tPVNlcmlhbGl6YWJsZUlkaW9tfHRydWUKK2RldGVjdG9yU3RhcnRJbkNvbnN0cnVjdG9yPVN0YXJ0SW5Db25zdHJ1Y3Rvcnx0cnVlCitkZXRlY3RvclN0YXRpY0NhbGVuZGFyRGV0ZWN0b3I9U3RhdGljQ2FsZW5kYXJEZXRlY3Rvcnx0cnVlCitkZXRlY3RvclN0cmluZ0NvbmNhdGVuYXRpb249U3RyaW5nQ29uY2F0ZW5hdGlvbnx0cnVlCitkZXRlY3RvclN1cGVyZmx1b3VzSW5zdGFuY2VPZj1TdXBlcmZsdW91c0luc3RhbmNlT2Z8dHJ1ZQorZGV0ZWN0b3JTdXNwaWNpb3VzVGhyZWFkSW50ZXJydXB0ZWQ9U3VzcGljaW91c1RocmVhZEludGVycnVwdGVkfHRydWUKK2RldGVjdG9yU3dpdGNoRmFsbHRocm91Z2g9U3dpdGNoRmFsbHRocm91Z2h8dHJ1ZQorZGV0ZWN0b3JTeW5jaHJvbml6YXRpb25PblNoYXJlZEJ1aWx0aW5Db25zdGFudD1TeW5jaHJvbml6YXRpb25PblNoYXJlZEJ1aWx0aW5Db25zdGFudHx0cnVlCitkZXRlY3RvclN5bmNocm9uaXplQW5kTnVsbENoZWNrRmllbGQ9U3luY2hyb25pemVBbmROdWxsQ2hlY2tGaWVsZHx0cnVlCitkZXRlY3RvclN5bmNocm9uaXplT25DbGFzc0xpdGVyYWxOb3RHZXRDbGFzcz1TeW5jaHJvbml6ZU9uQ2xhc3NMaXRlcmFsTm90R2V0Q2xhc3N8dHJ1ZQorZGV0ZWN0b3JTeW5jaHJvbml6aW5nT25Db250ZW50c09mRmllbGRUb1Byb3RlY3RGaWVsZD1TeW5jaHJvbml6aW5nT25Db250ZW50c09mRmllbGRUb1Byb3RlY3RGaWVsZHx0cnVlCitkZXRlY3RvclRlc3RBU009VGVzdEFTTXxmYWxzZQorZGV0ZWN0b3JUZXN0RGF0YWZsb3dBbmFseXNpcz1UZXN0RGF0YWZsb3dBbmFseXNpc3xmYWxzZQorZGV0ZWN0b3JUZXN0aW5nR3JvdW5kPVRlc3RpbmdHcm91bmR8ZmFsc2UKK2RldGVjdG9yVHJhaW5GaWVsZFN0b3JlVHlwZXM9VHJhaW5GaWVsZFN0b3JlVHlwZXN8dHJ1ZQorZGV0ZWN0b3JUcmFpbk5vbk51bGxBbm5vdGF0aW9ucz1UcmFpbk5vbk51bGxBbm5vdGF0aW9uc3x0cnVlCitkZXRlY3RvclRyYWluVW5jb25kaXRpb25hbERlcmVmUGFyYW1zPVRyYWluVW5jb25kaXRpb25hbERlcmVmUGFyYW1zfHRydWUKK2RldGVjdG9yVVJMUHJvYmxlbXM9VVJMUHJvYmxlbXN8dHJ1ZQorZGV0ZWN0b3JVbmNhbGxhYmxlTWV0aG9kT2ZBbm9ueW1vdXNDbGFzcz1VbmNhbGxhYmxlTWV0aG9kT2ZBbm9ueW1vdXNDbGFzc3x0cnVlCitkZXRlY3RvclVubmVjZXNzYXJ5TWF0aD1Vbm5lY2Vzc2FyeU1hdGh8dHJ1ZQorZGV0ZWN0b3JVbnJlYWRGaWVsZHM9VW5yZWFkRmllbGRzfHRydWUKK2RldGVjdG9yVXNlT2JqZWN0RXF1YWxzPVVzZU9iamVjdEVxdWFsc3xmYWxzZQorZGV0ZWN0b3JVc2VsZXNzU3ViY2xhc3NNZXRob2Q9VXNlbGVzc1N1YmNsYXNzTWV0aG9kfGZhbHNlCitkZXRlY3RvclZhckFyZ3NQcm9ibGVtcz1WYXJBcmdzUHJvYmxlbXN8dHJ1ZQorZGV0ZWN0b3JWb2xhdGlsZVVzYWdlPVZvbGF0aWxlVXNhZ2V8dHJ1ZQorZGV0ZWN0b3JXYWl0SW5Mb29wPVdhaXRJbkxvb3B8dHJ1ZQorZGV0ZWN0b3JXcm9uZ01hcEl0ZXJhdG9yPVdyb25nTWFwSXRlcmF0b3J8dHJ1ZQorZGV0ZWN0b3JYTUxGYWN0b3J5QnlwYXNzPVhNTEZhY3RvcnlCeXBhc3N8dHJ1ZQorZGV0ZWN0b3JfdGhyZXNob2xkPTIKK2VmZm9ydD1kZWZhdWx0CitleGNsdWRlZmlsdGVyMD0uc2V0dGluZ3MvZmluZGJ1Z3MuZXhjbHVkZS54bWwKK2ZpbHRlcl9zZXR0aW5ncz1NZWRpdW18QkFEX1BSQUNUSUNFLENPUlJFQ1RORVNTLEkxOE4sTUFMSUNJT1VTX0NPREUsTVRfQ09SUkVDVE5FU1MsUEVSRk9STUFOQ0UsU0VDVVJJVFksU1RZTEV8ZmFsc2UKK2ZpbHRlcl9zZXR0aW5nc19uZWc9fApkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvLnByb2plY3QgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS8ucHJvamVjdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNmJiMzIwCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvLnByb2plY3QKQEAgLTAsMCArMSwzNCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxwcm9qZWN0RGVzY3JpcHRpb24+CisJPG5hbWU+b3JnLmVjbGlwc2Uuc3RlbS5jb3JlPC9uYW1lPgorCTxjb21tZW50PjwvY29tbWVudD4KKwk8cHJvamVjdHM+CisJPC9wcm9qZWN0cz4KKwk8YnVpbGRTcGVjPgorCQk8YnVpbGRDb21tYW5kPgorCQkJPG5hbWU+b3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YWJ1aWxkZXI8L25hbWU+CisJCQk8YXJndW1lbnRzPgorCQkJPC9hcmd1bWVudHM+CisJCTwvYnVpbGRDb21tYW5kPgorCQk8YnVpbGRDb21tYW5kPgorCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLk1hbmlmZXN0QnVpbGRlcjwvbmFtZT4KKwkJCTxhcmd1bWVudHM+CisJCQk8L2FyZ3VtZW50cz4KKwkJPC9idWlsZENvbW1hbmQ+CisJCTxidWlsZENvbW1hbmQ+CisJCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuU2NoZW1hQnVpbGRlcjwvbmFtZT4KKwkJCTxhcmd1bWVudHM+CisJCQk8L2FyZ3VtZW50cz4KKwkJPC9idWlsZENvbW1hbmQ+CisJCTxidWlsZENvbW1hbmQ+CisJCQk8bmFtZT5lZHUudW1kLmNzLmZpbmRidWdzLnBsdWdpbi5lY2xpcHNlLmZpbmRidWdzQnVpbGRlcjwvbmFtZT4KKwkJCTxhcmd1bWVudHM+CisJCQk8L2FyZ3VtZW50cz4KKwkJPC9idWlsZENvbW1hbmQ+CisJPC9idWlsZFNwZWM+CisJPG5hdHVyZXM+CisJCTxuYXR1cmU+b3JnLmVjbGlwc2UucGRlLlBsdWdpbk5hdHVyZTwvbmF0dXJlPgorCQk8bmF0dXJlPm9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFuYXR1cmU8L25hdHVyZT4KKwkJPG5hdHVyZT5lZHUudW1kLmNzLmZpbmRidWdzLnBsdWdpbi5lY2xpcHNlLmZpbmRidWdzTmF0dXJlPC9uYXR1cmU+CisJPC9uYXR1cmVzPgorPC9wcm9qZWN0RGVzY3JpcHRpb24+CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS8uc2V0dGluZ3MvZmluZGJ1Z3MuZXhjbHVkZS54bWwgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS8uc2V0dGluZ3MvZmluZGJ1Z3MuZXhjbHVkZS54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGE3ZmZmOAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLy5zZXR0aW5ncy9maW5kYnVncy5leGNsdWRlLnhtbApAQCAtMCwwICsxLDYgQEAKKzxGaW5kQnVnc0ZpbHRlcj4KKyAgICA8TWF0Y2g+CisgICAgICAgIDxQYWNrYWdlIG5hbWU9In5vcmdcLmVjbGlwc2VcLnN0ZW1cLmNvcmUuKiIgLz4KKyAgICAgICAgPEJ1ZyBjb2RlPSJJQyxVckYsU0lDLFNULE1TLEVDLEVxLEJDLERMUyIgLz4KKyAgICA8L01hdGNoPgorPC9GaW5kQnVnc0ZpbHRlcj4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjg1YjllMQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcwpAQCAtMCwwICsxLDY5IEBACisjTW9uIEphbiAyMSAxMjozNzowOCBFU1QgMjAwOAorZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvZGVnZW4udGFyZ2V0UGxhdGZvcm09MS41CitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb21wbGlhbmNlPTEuNQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuZG9jLmNvbW1lbnQuc3VwcG9ydD1lbmFibGVkCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmFubm90YXRpb25TdXBlckludGVyZmFjZT13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmFzc2VydElkZW50aWZpZXI9ZXJyb3IKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uYXV0b2JveGluZz13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRlcHJlY2F0aW9uPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZGVwcmVjYXRpb25JbkRlcHJlY2F0ZWRDb2RlPWRpc2FibGVkCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRlcHJlY2F0aW9uV2hlbk92ZXJyaWRpbmdEZXByZWNhdGVkTWV0aG9kPWRpc2FibGVkCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRpc2NvdXJhZ2VkUmVmZXJlbmNlPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZW1wdHlTdGF0ZW1lbnQ9aWdub3JlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmVudW1JZGVudGlmaWVyPWVycm9yCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZhbGx0aHJvdWdoQ2FzZT1pZ25vcmUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZmllbGRIaWRpbmc9aWdub3JlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZpbmFsUGFyYW1ldGVyQm91bmQ9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5maW5hbGx5QmxvY2tOb3RDb21wbGV0aW5nTm9ybWFsbHk9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5mb3JiaWRkZW5SZWZlcmVuY2U9ZXJyb3IKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaGlkZGVuQ2F0Y2hCbG9jaz13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmluY29tcGF0aWJsZU5vbkluaGVyaXRlZEludGVyZmFjZU1ldGhvZD13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmluY29tcGxldGVFbnVtU3dpdGNoPWlnbm9yZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbmRpcmVjdFN0YXRpY0FjY2Vzcz13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmludmFsaWRKYXZhZG9jPWlnbm9yZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbnZhbGlkSmF2YWRvY1RhZ3M9ZW5hYmxlZAorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbnZhbGlkSmF2YWRvY1RhZ3NEZXByZWNhdGVkUmVmPWVuYWJsZWQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW52YWxpZEphdmFkb2NUYWdzTm90VmlzaWJsZVJlZj1lbmFibGVkCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmludmFsaWRKYXZhZG9jVGFnc1Zpc2liaWxpdHk9cHVibGljCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmxvY2FsVmFyaWFibGVIaWRpbmc9aWdub3JlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1ldGhvZFdpdGhDb25zdHJ1Y3Rvck5hbWU9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nRGVwcmVjYXRlZEFubm90YXRpb249aWdub3JlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdKYXZhZG9jQ29tbWVudHM9aWdub3JlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdKYXZhZG9jQ29tbWVudHNPdmVycmlkaW5nPWVuYWJsZWQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0phdmFkb2NDb21tZW50c1Zpc2liaWxpdHk9cHVibGljCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdKYXZhZG9jVGFncz1pZ25vcmUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0phdmFkb2NUYWdzT3ZlcnJpZGluZz1lbmFibGVkCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdKYXZhZG9jVGFnc1Zpc2liaWxpdHk9cHVibGljCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdPdmVycmlkZUFubm90YXRpb249aWdub3JlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdTZXJpYWxWZXJzaW9uPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubm9FZmZlY3RBc3NpZ25tZW50PXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubm9JbXBsaWNpdFN0cmluZ0NvbnZlcnNpb249d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5ub25FeHRlcm5hbGl6ZWRTdHJpbmdMaXRlcmFsPWlnbm9yZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5udWxsUmVmZXJlbmNlPWlnbm9yZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5vdmVycmlkaW5nUGFja2FnZURlZmF1bHRNZXRob2Q9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5wYXJhbWV0ZXJBc3NpZ25tZW50PWlnbm9yZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5wb3NzaWJsZUFjY2lkZW50YWxCb29sZWFuQXNzaWdubWVudD13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnJhd1R5cGVSZWZlcmVuY2U9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5zcGVjaWFsUGFyYW1ldGVySGlkaW5nRmllbGQ9ZGlzYWJsZWQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uc3RhdGljQWNjZXNzUmVjZWl2ZXI9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5zdXBwcmVzc1dhcm5pbmdzPWVuYWJsZWQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uc3ludGhldGljQWNjZXNzRW11bGF0aW9uPWlnbm9yZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS50eXBlUGFyYW1ldGVySGlkaW5nPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5jaGVja2VkVHlwZU9wZXJhdGlvbj13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVuZG9jdW1lbnRlZEVtcHR5QmxvY2s9aWdub3JlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVuaGFuZGxlZFdhcm5pbmdUb2tlbj13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVubmVjZXNzYXJ5RWxzZT1pZ25vcmUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5uZWNlc3NhcnlUeXBlQ2hlY2s9aWdub3JlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVucXVhbGlmaWVkRmllbGRBY2Nlc3M9aWdub3JlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZERlY2xhcmVkVGhyb3duRXhjZXB0aW9uPWlnbm9yZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWREZWNsYXJlZFRocm93bkV4Y2VwdGlvbldoZW5PdmVycmlkaW5nPWVuYWJsZWQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkSW1wb3J0PWVycm9yCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZExhYmVsPWlnbm9yZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRMb2NhbD1pZ25vcmUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkUGFyYW1ldGVyPWlnbm9yZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRQYXJhbWV0ZXJXaGVuSW1wbGVtZW50aW5nQWJzdHJhY3Q9ZW5hYmxlZAorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRQYXJhbWV0ZXJXaGVuT3ZlcnJpZGluZ0NvbmNyZXRlPWVuYWJsZWQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkUHJpdmF0ZU1lbWJlcj1pZ25vcmUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udmFyYXJnc0FyZ3VtZW50TmVlZENhc3Q9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuc291cmNlPTEuNQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC51aS5wcmVmcyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQudWkucHJlZnMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDhjYmI0NAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQudWkucHJlZnMKQEAgLTAsMCArMSw1MSBAQAorI01vbiBGZWIgMjUgMTI6Mjk6MjMgUFNUIDIwMDgKK2NsZWFudXAuYWRkX2RlZmF1bHRfc2VyaWFsX3ZlcnNpb25faWQ9dHJ1ZQorY2xlYW51cC5hZGRfZ2VuZXJhdGVkX3NlcmlhbF92ZXJzaW9uX2lkPWZhbHNlCitjbGVhbnVwLmFkZF9taXNzaW5nX2Fubm90YXRpb25zPXRydWUKK2NsZWFudXAuYWRkX21pc3NpbmdfZGVwcmVjYXRlZF9hbm5vdGF0aW9ucz10cnVlCitjbGVhbnVwLmFkZF9taXNzaW5nX25sc190YWdzPWZhbHNlCitjbGVhbnVwLmFkZF9taXNzaW5nX292ZXJyaWRlX2Fubm90YXRpb25zPXRydWUKK2NsZWFudXAuYWRkX3NlcmlhbF92ZXJzaW9uX2lkPWZhbHNlCitjbGVhbnVwLmFsd2F5c191c2VfYmxvY2tzPXRydWUKK2NsZWFudXAuYWx3YXlzX3VzZV9wYXJlbnRoZXNlc19pbl9leHByZXNzaW9ucz10cnVlCitjbGVhbnVwLmFsd2F5c191c2VfdGhpc19mb3Jfbm9uX3N0YXRpY19maWVsZF9hY2Nlc3M9ZmFsc2UKK2NsZWFudXAuYWx3YXlzX3VzZV90aGlzX2Zvcl9ub25fc3RhdGljX21ldGhvZF9hY2Nlc3M9ZmFsc2UKK2NsZWFudXAuY29udmVydF90b19lbmhhbmNlZF9mb3JfbG9vcD10cnVlCitjbGVhbnVwLmZvcm1hdF9zb3VyY2VfY29kZT10cnVlCitjbGVhbnVwLm1ha2VfbG9jYWxfdmFyaWFibGVfZmluYWw9dHJ1ZQorY2xlYW51cC5tYWtlX3BhcmFtZXRlcnNfZmluYWw9dHJ1ZQorY2xlYW51cC5tYWtlX3ByaXZhdGVfZmllbGRzX2ZpbmFsPXRydWUKK2NsZWFudXAubWFrZV92YXJpYWJsZV9kZWNsYXJhdGlvbnNfZmluYWw9dHJ1ZQorY2xlYW51cC5uZXZlcl91c2VfYmxvY2tzPWZhbHNlCitjbGVhbnVwLm5ldmVyX3VzZV9wYXJlbnRoZXNlc19pbl9leHByZXNzaW9ucz1mYWxzZQorY2xlYW51cC5vcmdhbml6ZV9pbXBvcnRzPXRydWUKK2NsZWFudXAucXVhbGlmeV9zdGF0aWNfZmllbGRfYWNjZXNzZXNfd2l0aF9kZWNsYXJpbmdfY2xhc3M9ZmFsc2UKK2NsZWFudXAucXVhbGlmeV9zdGF0aWNfbWVtYmVyX2FjY2Vzc2VzX3Rocm91Z2hfaW5zdGFuY2VzX3dpdGhfZGVjbGFyaW5nX2NsYXNzPXRydWUKK2NsZWFudXAucXVhbGlmeV9zdGF0aWNfbWVtYmVyX2FjY2Vzc2VzX3Rocm91Z2hfc3VidHlwZXNfd2l0aF9kZWNsYXJpbmdfY2xhc3M9dHJ1ZQorY2xlYW51cC5xdWFsaWZ5X3N0YXRpY19tZW1iZXJfYWNjZXNzZXNfd2l0aF9kZWNsYXJpbmdfY2xhc3M9dHJ1ZQorY2xlYW51cC5xdWFsaWZ5X3N0YXRpY19tZXRob2RfYWNjZXNzZXNfd2l0aF9kZWNsYXJpbmdfY2xhc3M9ZmFsc2UKK2NsZWFudXAucmVtb3ZlX3ByaXZhdGVfY29uc3RydWN0b3JzPXRydWUKK2NsZWFudXAucmVtb3ZlX3RyYWlsaW5nX3doaXRlc3BhY2VzPXRydWUKK2NsZWFudXAucmVtb3ZlX3RyYWlsaW5nX3doaXRlc3BhY2VzX2FsbD10cnVlCitjbGVhbnVwLnJlbW92ZV90cmFpbGluZ193aGl0ZXNwYWNlc19pZ25vcmVfZW1wdHk9ZmFsc2UKK2NsZWFudXAucmVtb3ZlX3VubmVjZXNzYXJ5X2Nhc3RzPXRydWUKK2NsZWFudXAucmVtb3ZlX3VubmVjZXNzYXJ5X25sc190YWdzPXRydWUKK2NsZWFudXAucmVtb3ZlX3VudXNlZF9pbXBvcnRzPXRydWUKK2NsZWFudXAucmVtb3ZlX3VudXNlZF9sb2NhbF92YXJpYWJsZXM9dHJ1ZQorY2xlYW51cC5yZW1vdmVfdW51c2VkX3ByaXZhdGVfZmllbGRzPXRydWUKK2NsZWFudXAucmVtb3ZlX3VudXNlZF9wcml2YXRlX21lbWJlcnM9dHJ1ZQorY2xlYW51cC5yZW1vdmVfdW51c2VkX3ByaXZhdGVfbWV0aG9kcz10cnVlCitjbGVhbnVwLnJlbW92ZV91bnVzZWRfcHJpdmF0ZV90eXBlcz10cnVlCitjbGVhbnVwLnNvcnRfbWVtYmVycz1mYWxzZQorY2xlYW51cC5zb3J0X21lbWJlcnNfYWxsPWZhbHNlCitjbGVhbnVwLnVzZV9ibG9ja3M9dHJ1ZQorY2xlYW51cC51c2VfYmxvY2tzX29ubHlfZm9yX3JldHVybl9hbmRfdGhyb3c9ZmFsc2UKK2NsZWFudXAudXNlX3BhcmVudGhlc2VzX2luX2V4cHJlc3Npb25zPWZhbHNlCitjbGVhbnVwLnVzZV90aGlzX2Zvcl9ub25fc3RhdGljX2ZpZWxkX2FjY2Vzcz1mYWxzZQorY2xlYW51cC51c2VfdGhpc19mb3Jfbm9uX3N0YXRpY19maWVsZF9hY2Nlc3Nfb25seV9pZl9uZWNlc3Nhcnk9dHJ1ZQorY2xlYW51cC51c2VfdGhpc19mb3Jfbm9uX3N0YXRpY19tZXRob2RfYWNjZXNzPWZhbHNlCitjbGVhbnVwLnVzZV90aGlzX2Zvcl9ub25fc3RhdGljX21ldGhvZF9hY2Nlc3Nfb25seV9pZl9uZWNlc3Nhcnk9dHJ1ZQorY2xlYW51cF9wcm9maWxlPV9yZWxlbmcgY29kZSBjbGVhbnVwCitjbGVhbnVwX3NldHRpbmdzX3ZlcnNpb249MgorZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKK29yZy5lY2xpcHNlLmpkdC51aS50ZXh0LmN1c3RvbV9jb2RlX3RlbXBsYXRlcz08P3htbCB2ZXJzaW9uXD0iMS4wIiBlbmNvZGluZ1w9IlVURi04Ij8+PHRlbXBsYXRlcy8+CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS8udGVtcGxhdGUgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS8udGVtcGxhdGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGQxZjJiZQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLy50ZW1wbGF0ZQpAQCAtMCwwICsxLDMgQEAKKzxodG1sPgorVGhpcyBpcyB0aGUgd2VsY29tZSBwYWdlIGZvciB0aGUgImNvcmUiIHBsdWctaW4gb2YgdGhlIFNURU0gc3lzdGVtLgorPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL01FVEEtSU5GL01BTklGRVNULk1GIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvTUVUQS1JTkYvTUFOSUZFU1QuTUYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2EwNWVkMQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL01FVEEtSU5GL01BTklGRVNULk1GCkBAIC0wLDAgKzEsNjQgQEAKK01hbmlmZXN0LVZlcnNpb246IDEuMAorQnVuZGxlLU1hbmlmZXN0VmVyc2lvbjogMgorQnVuZGxlLU5hbWU6ICVwbHVnaW5OYW1lCitCdW5kbGUtU3ltYm9saWNOYW1lOiBvcmcuZWNsaXBzZS5zdGVtLmNvcmU7c2luZ2xldG9uOj10cnVlCitCdW5kbGUtVmVyc2lvbjogMS4yLjEKK0J1bmRsZS1BY3RpdmF0b3I6IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5Db3JlUGx1Z2luCitCdW5kbGUtVmVuZG9yOiAlcHJvdmlkZXJOYW1lCitCdW5kbGUtTG9jYWxpemF0aW9uOiBwbHVnaW4KK1JlcXVpcmUtQnVuZGxlOiBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUsCisgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnhtaTt2aXNpYmlsaXR5Oj1yZWV4cG9ydCwKKyBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aTt2aXNpYmlsaXR5Oj1yZWV4cG9ydCwKKyBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcywKKyBvcmcuZWNsaXBzZS5oZWxwCitCdW5kbGUtQWN0aXZhdGlvblBvbGljeTogbGF6eQorRXhwb3J0LVBhY2thZ2U6IG9yZy5lY2xpcHNlLnN0ZW0uYWRhcHRlcnMuZmlsZSwKKyBvcmcuZWNsaXBzZS5zdGVtLmFkYXB0ZXJzLmhpc3RvcnksCisgb3JnLmVjbGlwc2Uuc3RlbS5hZGFwdGVycy50aW1lLAorIG9yZy5lY2xpcHNlLnN0ZW0uY29yZSwKKyBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLAorIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uaW1wbCwKKyBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLnByb3ZpZGVyLAorIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24udXRpbCwKKyBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZXhwZXJpbWVudCwKKyBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZXhwZXJpbWVudC5pbXBsLAorIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5leHBlcmltZW50LnByb3ZpZGVyLAorIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5leHBlcmltZW50LnV0aWwsCisgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLAorIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5pbXBsLAorIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5wcm92aWRlciwKKyBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGgudXRpbCwKKyBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubG9nZ2VyLAorIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5sb2dnZXIuaW1wbCwKKyBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubG9nZ2VyLnByb3ZpZGVyLAorIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5sb2dnZXIudXRpbCwKKyBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubWF0aCwKKyBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwsCisgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLmltcGwsCisgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLnByb3ZpZGVyLAorIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC51dGlsLAorIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllciwKKyBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuaW1wbCwKKyBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIucHJvdmlkZXIsCisgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLnV0aWwsCisgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZSwKKyBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlLmltcGwsCisgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZS5wcm92aWRlciwKKyBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlLnV0aWwsCisgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNjZW5hcmlvLAorIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zY2VuYXJpby5pbXBsLAorIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zY2VuYXJpby5wcm92aWRlciwKKyBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2NlbmFyaW8udXRpbCwKKyBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2VxdWVuY2VyLAorIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zZXF1ZW5jZXIuaW1wbCwKKyBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2VxdWVuY2VyLnByb3ZpZGVyLAorIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zZXF1ZW5jZXIudXRpbCwKKyBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc29sdmVyLAorIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zb2x2ZXIuaW1wbCwKKyBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc29sdmVyLnByb3ZpZGVyLAorIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zb2x2ZXIudXRpbCwKKyBvcmcuZWNsaXBzZS5zdGVtLmNvcmUudHJpZ2dlciwKKyBvcmcuZWNsaXBzZS5zdGVtLmNvcmUudHJpZ2dlci5pbXBsLAorIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS50cmlnZ2VyLnByb3ZpZGVyLAorIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS50cmlnZ2VyLnV0aWwKK0J1bmRsZS1SZXF1aXJlZEV4ZWN1dGlvbkVudmlyb25tZW50OiBKMlNFLTEuNQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvYnVpbGQucHJvcGVydGllcyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL2J1aWxkLnByb3BlcnRpZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzliYjk4NwotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL2J1aWxkLnByb3BlcnRpZXMKQEAgLTAsMCArMSwxNCBAQAorc291cmNlLi4gPSBzcmMvCitvdXRwdXQuLiA9IGJpbi8KK2Jpbi5pbmNsdWRlcyA9IE1FVEEtSU5GLyxcCisgICAgICAgICAgICAgICAuLFwKKyAgICAgICAgICAgICAgIHBsdWdpbi54bWwsXAorICAgICAgICAgICAgICAgcGx1Z2luLnByb3BlcnRpZXMsXAorICAgICAgICAgICAgICAgYmluLyxcCisgICAgICAgICAgICAgICByZXNvdXJjZXMvLFwKKyAgICAgICAgICAgICAgIGljb25zLyxcCisgICAgICAgICAgICAgICBlcGwtdjEwLmh0bWwsXAorICAgICAgICAgICAgICAgbm90aWNlLmh0bWwsXAorICAgICAgICAgICAgICAgcGx1Z2luX3poLnByb3BlcnRpZXMsXAorICAgICAgICAgICAgICAgcGx1Z2luX2tyLnByb3BlcnRpZXMsXAorICAgICAgICAgICAgICAgcGx1Z2luX2RlLnByb3BlcnRpZXMKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL2RvY3VtZW50YXRpb24vY29tbW9uLnBkZiBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL2RvY3VtZW50YXRpb24vY29tbW9uLnBkZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZmJkOWFiCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvZG9jdW1lbnRhdGlvbi9jb21tb24ucGRmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL2RvY3VtZW50YXRpb24vY29tbW9uLnV4ZiBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL2RvY3VtZW50YXRpb24vY29tbW9uLnV4ZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wOTI5N2MxCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvZG9jdW1lbnRhdGlvbi9jb21tb24udXhmCkBAIC0wLDAgKzEsNTMgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+PHVtbGV0X2RpYWdyYW0+PGhlbHBfdGV4dD4vL1VuY29tbWVudCB0aGUgZm9sbG93aW5nIGxpbmUgdG8gY2hhbmdlIHRoZSBmb250c2l6ZToKKy8vZm9udHNpemU9MTQKKworLy9XZWxjb21lIHRvIFVNTGV0IQorCisvLyAqRG91YmxlLWNsaWNrIG9uIFVNTCBlbGVtZW50cyB0byBhZGQgdGhlbSB0byB0aGUgZGlhZ3JhbS4KKy8vICpFZGl0IGVsZW1lbnQgcHJvcGVydGllcyBieSBtb2RpZnlpbmcgdGhlIHRleHQgaW4gdGhpcyBwYW5lbC4KKy8vICpFZGl0IHRoZSBmaWxlcyBpbiB0aGUgJ3BhbGV0dGVzJyBkaXJlY3RvcnkgdG8gc3RvcmUgeW91ciBvd24gZWxlbWVudCBwYWxldHRlcy4KKy8vICpQcmVzcyBEZWwgb3IgQmFja3NwYWNlIHRvIHJlbW92ZSBlbGVtZW50cyBmcm9tIHRoZSBkaWFncmFtLgorLy8gKkhvbGQgZG93biBDdHJsIGtleSB0byBzZWxlY3QgbXVsdGlwbGUgZWxlbWVudHMuCisvLyAqUHJlc3MgYyB0byBjb3B5IHRoZSBVTUwgZGlhZ3JhbSB0byB0aGUgc3lzdGVtIGNsaXBib2FyZC4KKy8vICogVGhpcyB0ZXh0IHdpbGwgYmUgc3RvcmVkIHdpdGggZWFjaCBkaWFncmFtLiBGZWVsIGZyZWUgdG8gdXNlIHRoZSBhcmVhIGZvciBub3Rlcy4KKzwvaGVscF90ZXh0PjxlbGVtZW50Pjx0eXBlPmNvbS51bWxldC5lbGVtZW50LmJhc2UuQ2xhc3M8L3R5cGU+PGNvb3JkaW5hdGVzPjx4PjQ5MDwveD48eT4zMTA8L3k+PHc+MjAwPC93PjxoPjQxMDwvaD48L2Nvb3JkaW5hdGVzPjxwYW5lbF9hdHRyaWJ1dGVzPkR1YmxpbkNvcmUKKy0tCistIGJpYmxpb2dyYXBoaWNDaXRhdGlvbjogU3RyaW5nCistIGNvbnRyaWJ1dG9yOiBTdHJpbmcKKy0gY292ZXJhZ2U6IFN0cmluZworLSBjcmVhdGVkOiBTdHJpbmcKKy0gY3JlYXRvcjogU3RyaW5nCistIGRhdGU6IFN0cmluZworLSBkZXNjcmlwdGlvbjogU3RyaW5nCistIGZvcm1hdDogU3RyaW5nCistIGlkZW50aWZpZXI6IFN0cmluZworLSBsYW5ndWFnZTogU3RyaW5nCistIGxpY2Vuc2U6IFN0cmluZworLSBwdWJsaXNoZXI6IFN0cmluZworLSByZWxhdGlvbjogU3RyaW5nCistIHJlcXVpcmVkOiBTdHJpbmcKKy0gcmlnaHRzOiBTdHJpbmcKKy0gc291cmNlOiBTdHJpbmcKKy0gc3BhdGlhbDogU3RyaW5nCistIHN1YmplY3Q6IFN0cmluZworLSB0aXRsZTogU3RyaW5nCistIHR5cGU6IFN0cmluZworLSB2YWxpZDogU3RyaW5nCistLQorPC9wYW5lbF9hdHRyaWJ1dGVzPjxhZGRpdGlvbmFsX2F0dHJpYnV0ZXMvPjwvZWxlbWVudD48ZWxlbWVudD48dHlwZT5jb20udW1sZXQuZWxlbWVudC5iYXNlLlJlbGF0aW9uPC90eXBlPjxjb29yZGluYXRlcz48eD4zMzA8L3g+PHk+MzMwPC95Pjx3PjE4MDwvdz48aD40MDwvaD48L2Nvb3JkaW5hdGVzPjxwYW5lbF9hdHRyaWJ1dGVzPmx0PSZsdDsmbHQ7Jmx0OyZsdDstCityMj1kdWJsaW5Db3JlCittMj0wLi4xCis8L3BhbmVsX2F0dHJpYnV0ZXM+PGFkZGl0aW9uYWxfYXR0cmlidXRlcz4yMDsyMDsxNjA7MjA8L2FkZGl0aW9uYWxfYXR0cmlidXRlcz48L2VsZW1lbnQ+PGVsZW1lbnQ+PHR5cGU+Y29tLnVtbGV0LmVsZW1lbnQuYmFzZS5Ob3RlPC90eXBlPjxjb29yZGluYXRlcz48eD4zODA8L3g+PHk+NTA8L3k+PHc+MjQwPC93PjxoPjMwPC9oPjwvY29vcmRpbmF0ZXM+PHBhbmVsX2F0dHJpYnV0ZXM+Y29tLmlibS5hbG1hZGVuLnN0ZW0uY29tbW9uPC9wYW5lbF9hdHRyaWJ1dGVzPjxhZGRpdGlvbmFsX2F0dHJpYnV0ZXMvPjwvZWxlbWVudD48ZWxlbWVudD48dHlwZT5jb20udW1sZXQuZWxlbWVudC5iYXNlLkNsYXNzPC90eXBlPjxjb29yZGluYXRlcz48eD4xMTA8L3g+PHk+MzIwPC95Pjx3PjI0MDwvdz48aD43MDwvaD48L2Nvb3JkaW5hdGVzPjxwYW5lbF9hdHRyaWJ1dGVzPi9JZGVudGlmaWFibGUvCistLQorLXVyaTogVVJJCistdXJpOiB0eXBlVVJJCistLQorCis8L3BhbmVsX2F0dHJpYnV0ZXM+PGFkZGl0aW9uYWxfYXR0cmlidXRlcy8+PC9lbGVtZW50PjxlbGVtZW50Pjx0eXBlPmNvbS51bWxldC5lbGVtZW50LmJhc2UuUmVsYXRpb248L3R5cGU+PGNvb3JkaW5hdGVzPjx4PjE2MTwveD48eT4yMTA8L3k+PHc+MTM4PC93PjxoPjEzMDwvaD48L2Nvb3JkaW5hdGVzPjxwYW5lbF9hdHRyaWJ1dGVzPmx0PSZsdDsuCismbHQ7Jmx0O2luc3RhbmNlT2YmZ3Q7Jmd0OzwvcGFuZWxfYXR0cmlidXRlcz48YWRkaXRpb25hbF9hdHRyaWJ1dGVzPjY5OzIwOzY5OzExMDwvYWRkaXRpb25hbF9hdHRyaWJ1dGVzPjwvZWxlbWVudD48ZWxlbWVudD48dHlwZT5jb20udW1sZXQuZWxlbWVudC5iYXNlLkNsYXNzPC90eXBlPjxjb29yZGluYXRlcz48eD4xMTA8L3g+PHk+MTMwPC95Pjx3PjI0MDwvdz48aD4xMDA8L2g+PC9jb29yZGluYXRlcz48cGFuZWxfYXR0cmlidXRlcz4mbHQ7Jmx0O0ludGVyZmFjZSZndDsmZ3Q7CitTYW5pdHlDaGVja2VyCistLQorIAorLS0KKytib29sZWFuOiBzYW5lKCkKKyA8L3BhbmVsX2F0dHJpYnV0ZXM+PGFkZGl0aW9uYWxfYXR0cmlidXRlcy8+PC9lbGVtZW50PjwvdW1sZXRfZGlhZ3JhbT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9kb2N1bWVudGF0aW9uL2V4cGVyaW1lbnQucGRmIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvZG9jdW1lbnRhdGlvbi9leHBlcmltZW50LnBkZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xN2U2YzM0Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvZG9jdW1lbnRhdGlvbi9leHBlcmltZW50LnBkZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9kb2N1bWVudGF0aW9uL2V4cGVyaW1lbnQudXhmIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvZG9jdW1lbnRhdGlvbi9leHBlcmltZW50LnV4ZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZTg5NDM4Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvZG9jdW1lbnRhdGlvbi9leHBlcmltZW50LnV4ZgpAQCAtMCwwICsxLDI5IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/Pjx1bWxldF9kaWFncmFtPjxoZWxwX3RleHQ+Ly9VbmNvbW1lbnQgdGhlIGZvbGxvd2luZyBsaW5lIHRvIGNoYW5nZSB0aGUgZm9udHNpemU6CisvL2ZvbnRzaXplPTE0CisKKy8vV2VsY29tZSB0byBVTUxldCEKKworLy8gKkRvdWJsZS1jbGljayBvbiBVTUwgZWxlbWVudHMgdG8gYWRkIHRoZW0gdG8gdGhlIGRpYWdyYW0uCisvLyAqRWRpdCBlbGVtZW50IHByb3BlcnRpZXMgYnkgbW9kaWZ5aW5nIHRoZSB0ZXh0IGluIHRoaXMgcGFuZWwuCisvLyAqRWRpdCB0aGUgZmlsZXMgaW4gdGhlICdwYWxldHRlcycgZGlyZWN0b3J5IHRvIHN0b3JlIHlvdXIgb3duIGVsZW1lbnQgcGFsZXR0ZXMuCisvLyAqUHJlc3MgRGVsIG9yIEJhY2tzcGFjZSB0byByZW1vdmUgZWxlbWVudHMgZnJvbSB0aGUgZGlhZ3JhbS4KKy8vICpIb2xkIGRvd24gQ3RybCBrZXkgdG8gc2VsZWN0IG11bHRpcGxlIGVsZW1lbnRzLgorLy8gKlByZXNzIGMgdG8gY29weSB0aGUgVU1MIGRpYWdyYW0gdG8gdGhlIHN5c3RlbSBjbGlwYm9hcmQuCisvLyAqIFRoaXMgdGV4dCB3aWxsIGJlIHN0b3JlZCB3aXRoIGVhY2ggZGlhZ3JhbS4gRmVlbCBmcmVlIHRvIHVzZSB0aGUgYXJlYSBmb3Igbm90ZXMuCis8L2hlbHBfdGV4dD48ZWxlbWVudD48dHlwZT5jb20udW1sZXQuZWxlbWVudC5iYXNlLlJlbGF0aW9uPC90eXBlPjxjb29yZGluYXRlcz48eD40NTE8L3g+PHk+MzQwPC95Pjx3PjU5PC93PjxoPjEzMDwvaD48L2Nvb3JkaW5hdGVzPjxwYW5lbF9hdHRyaWJ1dGVzPmx0PSZsdDstCittMT0wLi5uCityMT1tb2RpZmllcnMKKzwvcGFuZWxfYXR0cmlidXRlcz48YWRkaXRpb25hbF9hdHRyaWJ1dGVzPjI5OzExMDsyOTsyMDwvYWRkaXRpb25hbF9hdHRyaWJ1dGVzPjwvZWxlbWVudD48ZWxlbWVudD48dHlwZT5jb20udW1sZXQuZWxlbWVudC5iYXNlLkNsYXNzPC90eXBlPjxjb29yZGluYXRlcz48eD40MzA8L3g+PHk+NDUwPC95Pjx3PjI2MDwvdz48aD4zMDwvaD48L2Nvb3JkaW5hdGVzPjxwYW5lbF9hdHRyaWJ1dGVzPm9yZy5lY2xpcHNlLnN0ZW0ubW9kaWZpZXI6Ok1vZGlmaWVyPC9wYW5lbF9hdHRyaWJ1dGVzPjxhZGRpdGlvbmFsX2F0dHJpYnV0ZXMvPjwvZWxlbWVudD48ZWxlbWVudD48dHlwZT5jb20udW1sZXQuZWxlbWVudC5iYXNlLlJlbGF0aW9uPC90eXBlPjxjb29yZGluYXRlcz48eD4yNzM8L3g+PHk+MzQwPC95Pjx3PjU1PC93PjxoPjEzMDwvaD48L2Nvb3JkaW5hdGVzPjxwYW5lbF9hdHRyaWJ1dGVzPmx0PSZsdDstCittMT0xCityMT1zY2VuYXJpbzwvcGFuZWxfYXR0cmlidXRlcz48YWRkaXRpb25hbF9hdHRyaWJ1dGVzPjI3OzExMDsyNzsyMDwvYWRkaXRpb25hbF9hdHRyaWJ1dGVzPjwvZWxlbWVudD48ZWxlbWVudD48dHlwZT5jb20udW1sZXQuZWxlbWVudC5iYXNlLkNsYXNzPC90eXBlPjxjb29yZGluYXRlcz48eD44MDwveD48eT40NTA8L3k+PHc+MzEwPC93PjxoPjMwPC9oPjwvY29vcmRpbmF0ZXM+PHBhbmVsX2F0dHJpYnV0ZXM+b3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNjZW5hcmlvOjpTY2VuYXJpbworPC9wYW5lbF9hdHRyaWJ1dGVzPjxhZGRpdGlvbmFsX2F0dHJpYnV0ZXMvPjwvZWxlbWVudD48ZWxlbWVudD48dHlwZT5jb20udW1sZXQuZWxlbWVudC5iYXNlLk5vdGU8L3R5cGU+PGNvb3JkaW5hdGVzPjx4PjI4MDwveD48eT40MDwveT48dz4yNjA8L3c+PGg+MzA8L2g+PC9jb29yZGluYXRlcz48cGFuZWxfYXR0cmlidXRlcz5vcmcuZWNsaXBzZS5zdGVtLmNvcmUuZXhwZXJpbWVudDwvcGFuZWxfYXR0cmlidXRlcz48YWRkaXRpb25hbF9hdHRyaWJ1dGVzLz48L2VsZW1lbnQ+PGVsZW1lbnQ+PHR5cGU+Y29tLnVtbGV0LmVsZW1lbnQuYmFzZS5SZWxhdGlvbjwvdHlwZT48Y29vcmRpbmF0ZXM+PHg+MzYwPC94Pjx5PjE2MDwveT48dz40MDwvdz48aD4xMjA8L2g+PC9jb29yZGluYXRlcz48cGFuZWxfYXR0cmlidXRlcz5sdD0mbHQ7Jmx0Oy08L3BhbmVsX2F0dHJpYnV0ZXM+PGFkZGl0aW9uYWxfYXR0cmlidXRlcz4yMDsyMDsyMDsxMDA8L2FkZGl0aW9uYWxfYXR0cmlidXRlcz48L2VsZW1lbnQ+PGVsZW1lbnQ+PHR5cGU+Y29tLnVtbGV0LmVsZW1lbnQuYmFzZS5DbGFzczwvdHlwZT48Y29vcmRpbmF0ZXM+PHg+MjMwPC94Pjx5PjEyMDwveT48dz4zMjA8L3c+PGg+NjA8L2g+PC9jb29yZGluYXRlcz48cGFuZWxfYXR0cmlidXRlcz5vcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLklkZW50aWZpYWJsZQorLS0KKyAKKy0tCis8L3BhbmVsX2F0dHJpYnV0ZXM+PGFkZGl0aW9uYWxfYXR0cmlidXRlcy8+PC9lbGVtZW50PjxlbGVtZW50Pjx0eXBlPmNvbS51bWxldC5lbGVtZW50LmJhc2UuQ2xhc3M8L3R5cGU+PGNvb3JkaW5hdGVzPjx4PjI1MDwveD48eT4yNjA8L3k+PHc+MjYwPC93PjxoPjEwMDwvaD48L2Nvb3JkaW5hdGVzPjxwYW5lbF9hdHRyaWJ1dGVzPkV4cGVyaW1lbnQKKy0tCisgCistLQorZ2V0TmV4dFNjZW5hcmlvKFNjZW5hcmlvKTogU2NlbmFyaW8KK2dldE1vZGlmaWNhdGlvblN1bW1hcnkoKSA6IExpc3QmbHQ7U3RyaW5nJmd0OworaXNDb21wbGV0ZSgpOiBib29sZWFuPC9wYW5lbF9hdHRyaWJ1dGVzPjxhZGRpdGlvbmFsX2F0dHJpYnV0ZXMvPjwvZWxlbWVudD48L3VtbGV0X2RpYWdyYW0+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvZG9jdW1lbnRhdGlvbi9ncmFwaC5wZGYgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9kb2N1bWVudGF0aW9uL2dyYXBoLnBkZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZTg0MTA2Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvZG9jdW1lbnRhdGlvbi9ncmFwaC5wZGYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvZG9jdW1lbnRhdGlvbi9ncmFwaC51eGYgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9kb2N1bWVudGF0aW9uL2dyYXBoLnV4ZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40OWNiOGRjCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvZG9jdW1lbnRhdGlvbi9ncmFwaC51eGYKQEAgLTAsMCArMSw5MyBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz48dW1sZXRfZGlhZ3JhbT48ZWxlbWVudD48dHlwZT5jb20udW1sZXQuZWxlbWVudC5iYXNlLlJlbGF0aW9uPC90eXBlPjxjb29yZGluYXRlcz48eD43MzA8L3g+PHk+MjQwPC95Pjx3PjI2MDwvdz48aD40NDA8L2g+PC9jb29yZGluYXRlcz48cGFuZWxfYXR0cmlidXRlcz5sdD0mbHQ7Jmx0OyZsdDsmbHQ7LQorcjI9Z3JhcGhMYWJlbHMKK20yPTAuLio8L3BhbmVsX2F0dHJpYnV0ZXM+PGFkZGl0aW9uYWxfYXR0cmlidXRlcz4yNDA7NDIwOzI0MDsyMDsyMDsyMDwvYWRkaXRpb25hbF9hdHRyaWJ1dGVzPjwvZWxlbWVudD48ZWxlbWVudD48dHlwZT5jb20udW1sZXQuZWxlbWVudC5iYXNlLlJlbGF0aW9uPC90eXBlPjxjb29yZGluYXRlcz48eD4xMTAwPC94Pjx5PjUwMDwveT48dz4xODY8L3c+PGg+MTgwPC9oPjwvY29vcmRpbmF0ZXM+PHBhbmVsX2F0dHJpYnV0ZXM+bHQ9Jmx0OyZsdDsmbHQ7Jmx0Oy0KK3IyPXVucmVzb2x2ZWRJZGVudGlmaWFibGVzCittMj0wLi4xCis8L3BhbmVsX2F0dHJpYnV0ZXM+PGFkZGl0aW9uYWxfYXR0cmlidXRlcz4yMDsxNjA7MTUwOzIwPC9hZGRpdGlvbmFsX2F0dHJpYnV0ZXM+PC9lbGVtZW50PjxlbGVtZW50Pjx0eXBlPmNvbS51bWxldC5lbGVtZW50LmJhc2UuQ2xhc3M8L3R5cGU+PGNvb3JkaW5hdGVzPjx4PjExNDA8L3g+PHk+MzcwPC95Pjx3PjIzMDwvdz48aD4xNTA8L2g+PC9jb29yZGluYXRlcz48cGFuZWxfYXR0cmlidXRlcz5VbnJlc29sdmVkSWRlbnRpZmlhYmxlCistLQorLSBpZGVudGlmaWFibGU6IElkZW50aWZpYWJsZQorLSB1bnJlc29sdmVkVVJJOiBVUkkKKy0gZmllbGROYW1lOiBTdHJpbmcKKy0gc2NlbmFyaW86IElkZW50aWZpYWJsZQorLSBtb2RlbDogSWRlbnRpZmlhYmxlCistIGdyYXBoOiBJZGVudGlmaWFibGUKKy0tCisKKyA8L3BhbmVsX2F0dHJpYnV0ZXM+PGFkZGl0aW9uYWxfYXR0cmlidXRlcy8+PC9lbGVtZW50PjxlbGVtZW50Pjx0eXBlPmNvbS51bWxldC5lbGVtZW50LmJhc2UuQ2xhc3M8L3R5cGU+PGNvb3JkaW5hdGVzPjx4PjU2MDwveD48eT41NTA8L3k+PHc+MjUwPC93PjxoPjgwPC9oPjwvY29vcmRpbmF0ZXM+PHBhbmVsX2F0dHJpYnV0ZXM+Jmx0OyZsdDtBYnN0cmFjdCZndDsmZ3Q7CisvTGFiZWxWYWx1ZS8KKy0tCisgIAorLS0KKysgcmVzZXQoKTogdm9pZDwvcGFuZWxfYXR0cmlidXRlcz48YWRkaXRpb25hbF9hdHRyaWJ1dGVzLz48L2VsZW1lbnQ+PGVsZW1lbnQ+PHR5cGU+Y29tLnVtbGV0LmVsZW1lbnQuYmFzZS5SZWxhdGlvbjwvdHlwZT48Y29vcmRpbmF0ZXM+PHg+MzUwPC94Pjx5PjQ5MDwveT48dz40MDwvdz48aD4xMzA8L2g+PC9jb29yZGluYXRlcz48cGFuZWxfYXR0cmlidXRlcz5sdD0mbHQ7Jmx0Oy08L3BhbmVsX2F0dHJpYnV0ZXM+PGFkZGl0aW9uYWxfYXR0cmlidXRlcz4yMDsyMDsyMDsxMTA8L2FkZGl0aW9uYWxfYXR0cmlidXRlcz48L2VsZW1lbnQ+PGVsZW1lbnQ+PHR5cGU+Y29tLnVtbGV0LmVsZW1lbnQuYmFzZS5DbGFzczwvdHlwZT48Y29vcmRpbmF0ZXM+PHg+MjYwPC94Pjx5PjYwMDwveT48dz4xMzA8L3c+PGg+NjA8L2g+PC9jb29yZGluYXRlcz48cGFuZWxfYXR0cmlidXRlcz5TdGF0aWNOb2RlTGFiZWwKKy0tCisgCistLQorPC9wYW5lbF9hdHRyaWJ1dGVzPjxhZGRpdGlvbmFsX2F0dHJpYnV0ZXMvPjwvZWxlbWVudD48ZWxlbWVudD48dHlwZT5jb20udW1sZXQuZWxlbWVudC5iYXNlLlJlbGF0aW9uPC90eXBlPjxjb29yZGluYXRlcz48eD40MjA8L3g+PHk+NDkwPC95Pjx3PjQwPC93PjxoPjEzMDwvaD48L2Nvb3JkaW5hdGVzPjxwYW5lbF9hdHRyaWJ1dGVzPmx0PSZsdDsmbHQ7LTwvcGFuZWxfYXR0cmlidXRlcz48YWRkaXRpb25hbF9hdHRyaWJ1dGVzPjIwOzIwOzIwOzExMDwvYWRkaXRpb25hbF9hdHRyaWJ1dGVzPjwvZWxlbWVudD48ZWxlbWVudD48dHlwZT5jb20udW1sZXQuZWxlbWVudC5iYXNlLkNsYXNzPC90eXBlPjxjb29yZGluYXRlcz48eD40MDA8L3g+PHk+NjAwPC95Pjx3PjEzMDwvdz48aD42MDwvaD48L2Nvb3JkaW5hdGVzPjxwYW5lbF9hdHRyaWJ1dGVzPkR5bmFtaWNOb2RlTGFiZWwKKy0tCisgCistLQorPC9wYW5lbF9hdHRyaWJ1dGVzPjxhZGRpdGlvbmFsX2F0dHJpYnV0ZXMvPjwvZWxlbWVudD48ZWxlbWVudD48dHlwZT5jb20udW1sZXQuZWxlbWVudC5iYXNlLlJlbGF0aW9uPC90eXBlPjxjb29yZGluYXRlcz48eD41Mzk8L3g+PHk+MzAwPC95Pjx3PjgyPC93PjxoPjI3MDwvaD48L2Nvb3JkaW5hdGVzPjxwYW5lbF9hdHRyaWJ1dGVzPmx0PSZsdDsmbHQ7Jmx0OyZsdDstCityMj1jdXJyZW50VmFsdWUKK20yPSAxPC9wYW5lbF9hdHRyaWJ1dGVzPjxhZGRpdGlvbmFsX2F0dHJpYnV0ZXM+NDE7MjA7NDE7MjUwPC9hZGRpdGlvbmFsX2F0dHJpYnV0ZXM+PC9lbGVtZW50PjxlbGVtZW50Pjx0eXBlPmNvbS51bWxldC5lbGVtZW50LmJhc2UuUmVsYXRpb248L3R5cGU+PGNvb3JkaW5hdGVzPjx4PjY4MDwveD48eT4zMDA8L3k+PHc+NDA8L3c+PGg+MTAwPC9oPjwvY29vcmRpbmF0ZXM+PHBhbmVsX2F0dHJpYnV0ZXM+bHQ9Jmx0OyZsdDstPC9wYW5lbF9hdHRyaWJ1dGVzPjxhZGRpdGlvbmFsX2F0dHJpYnV0ZXM+MjA7MjA7MjA7ODA8L2FkZGl0aW9uYWxfYXR0cmlidXRlcz48L2VsZW1lbnQ+PGVsZW1lbnQ+PHR5cGU+Y29tLnVtbGV0LmVsZW1lbnQuYmFzZS5SZWxhdGlvbjwvdHlwZT48Y29vcmRpbmF0ZXM+PHg+NDIwPC94Pjx5PjMwMDwveT48dz40MDwvdz48aD4xNzA8L2g+PC9jb29yZGluYXRlcz48cGFuZWxfYXR0cmlidXRlcz5sdD0mbHQ7Jmx0Oy08L3BhbmVsX2F0dHJpYnV0ZXM+PGFkZGl0aW9uYWxfYXR0cmlidXRlcz4yMDsyMDsyMDsxNTA8L2FkZGl0aW9uYWxfYXR0cmlidXRlcz48L2VsZW1lbnQ+PGVsZW1lbnQ+PHR5cGU+Y29tLnVtbGV0LmVsZW1lbnQuYmFzZS5SZWxhdGlvbjwvdHlwZT48Y29vcmRpbmF0ZXM+PHg+MTMwPC94Pjx5PjUyMDwveT48dz44MjA8L3c+PGg+MjIwPC9oPjwvY29vcmRpbmF0ZXM+PHBhbmVsX2F0dHJpYnV0ZXM+bHQ9Jmx0OyZsdDsmbHQ7Jmx0Oy0KK3IyPW5vZGVzCittMj0xCis8L3BhbmVsX2F0dHJpYnV0ZXM+PGFkZGl0aW9uYWxfYXR0cmlidXRlcz44MDA7MjAwOzIwOzIwMDsyMDsyMDwvYWRkaXRpb25hbF9hdHRyaWJ1dGVzPjwvZWxlbWVudD48ZWxlbWVudD48dHlwZT5jb20udW1sZXQuZWxlbWVudC5iYXNlLlJlbGF0aW9uPC90eXBlPjxjb29yZGluYXRlcz48eD40Nzk8L3g+PHk+NDkwPC95Pjx3PjQ3MTwvdz48aD4yMTA8L2g+PC9jb29yZGluYXRlcz48cGFuZWxfYXR0cmlidXRlcz5sdD0mbHQ7Jmx0OyZsdDsmbHQ7LQorcjI9bm9kZUxhYmVscworbTI9MQorPC9wYW5lbF9hdHRyaWJ1dGVzPjxhZGRpdGlvbmFsX2F0dHJpYnV0ZXM+NDUxOzE5MDs5MTsxOTA7MjE7MjA8L2FkZGl0aW9uYWxfYXR0cmlidXRlcz48L2VsZW1lbnQ+PGVsZW1lbnQ+PHR5cGU+Y29tLnVtbGV0LmVsZW1lbnQuYmFzZS5DbGFzczwvdHlwZT48Y29vcmRpbmF0ZXM+PHg+OTMwPC94Pjx5PjY2MDwveT48dz4yMTA8L3c+PGg+MTAwPC9oPjwvY29vcmRpbmF0ZXM+PHBhbmVsX2F0dHJpYnV0ZXM+R3JhcGgKKy0tCisgCistLQorK2FkZEdyYXBoKEdyYXBoKQorK3N3aXRjaFRvTmV4dFZhbHVlKCk6IHZvaWQKKy0tCis8L3BhbmVsX2F0dHJpYnV0ZXM+PGFkZGl0aW9uYWxfYXR0cmlidXRlcy8+PC9lbGVtZW50PjxlbGVtZW50Pjx0eXBlPmNvbS51bWxldC5lbGVtZW50LmJhc2UuQ2xhc3M8L3R5cGU+PGNvb3JkaW5hdGVzPjx4PjM1MDwveD48eT40NTA8L3k+PHc+MTkwPC93PjxoPjYwPC9oPjwvY29vcmRpbmF0ZXM+PHBhbmVsX2F0dHJpYnV0ZXM+Tm9kZUxhYmVsCistLQorIAorLS0KKzwvcGFuZWxfYXR0cmlidXRlcz48YWRkaXRpb25hbF9hdHRyaWJ1dGVzLz48L2VsZW1lbnQ+PGVsZW1lbnQ+PHR5cGU+Y29tLnVtbGV0LmVsZW1lbnQuYmFzZS5SZWxhdGlvbjwvdHlwZT48Y29vcmRpbmF0ZXM+PHg+MjQwPC94Pjx5PjQ2MDwveT48dz4xMzA8L3c+PGg+NDA8L2g+PC9jb29yZGluYXRlcz48cGFuZWxfYXR0cmlidXRlcz5sdD0mbHQ7LQorbTE9MC4ubgorcjE9bGFiZWxzPC9wYW5lbF9hdHRyaWJ1dGVzPjxhZGRpdGlvbmFsX2F0dHJpYnV0ZXM+MTEwOzIwOzIwOzIwPC9hZGRpdGlvbmFsX2F0dHJpYnV0ZXM+PC9lbGVtZW50PjxlbGVtZW50Pjx0eXBlPmNvbS51bWxldC5lbGVtZW50LmJhc2UuUmVsYXRpb248L3R5cGU+PGNvb3JkaW5hdGVzPjx4PjU2MDwveD48eT41MDwveT48dz41NDA8L3c+PGg+NjMwPC9oPjwvY29vcmRpbmF0ZXM+PHBhbmVsX2F0dHJpYnV0ZXM+bHQ9Jmx0OyZsdDstPC9wYW5lbF9hdHRyaWJ1dGVzPjxhZGRpdGlvbmFsX2F0dHJpYnV0ZXM+MjA7MjA7NTIwOzEyMDs1MjA7NjEwPC9hZGRpdGlvbmFsX2F0dHJpYnV0ZXM+PC9lbGVtZW50PjxlbGVtZW50Pjx0eXBlPmNvbS51bWxldC5lbGVtZW50LmJhc2UuQ2xhc3M8L3R5cGU+PGNvb3JkaW5hdGVzPjx4PjcwPC94Pjx5PjQ1MDwveT48dz4xOTA8L3c+PGg+OTA8L2g+PC9jb29yZGluYXRlcz48cGFuZWxfYXR0cmlidXRlcz5Ob2RlCistLQorIAorLS0KKytnZXRFZGdlKFVSSSkgOiBFZGdlCisrZ2V0TGFiZWwoVVJJKSA6IExhYmVsCis8L3BhbmVsX2F0dHJpYnV0ZXM+PGFkZGl0aW9uYWxfYXR0cmlidXRlcy8+PC9lbGVtZW50PjxlbGVtZW50Pjx0eXBlPmNvbS51bWxldC5lbGVtZW50LmJhc2UuQ2xhc3M8L3R5cGU+PGNvb3JkaW5hdGVzPjx4PjYwMDwveD48eT4zODA8L3k+PHc+MTkwPC93PjxoPjkwPC9oPjwvY29vcmRpbmF0ZXM+PHBhbmVsX2F0dHJpYnV0ZXM+Jmx0OyZsdDtJbnRlcmZhY2UmZ3Q7Jmd0OworRHluYW1pY0xhYmVsCistLQorIAorLS0KKytzd2l0Y2hUb05leHRWYWx1ZSgpIDogdm9pZDwvcGFuZWxfYXR0cmlidXRlcz48YWRkaXRpb25hbF9hdHRyaWJ1dGVzLz48L2VsZW1lbnQ+PGVsZW1lbnQ+PHR5cGU+Y29tLnVtbGV0LmVsZW1lbnQuYmFzZS5SZWxhdGlvbjwvdHlwZT48Y29vcmRpbmF0ZXM+PHg+MzAwPC94Pjx5PjE3MDwveT48dz43NDA8L3c+PGg+NTEwPC9oPjwvY29vcmRpbmF0ZXM+PHBhbmVsX2F0dHJpYnV0ZXM+bHQ9Jmx0OyZsdDsmbHQ7Jmx0Oy0KK3IyPWVkZ2VzCittMj0xCis8L3BhbmVsX2F0dHJpYnV0ZXM+PGFkZGl0aW9uYWxfYXR0cmlidXRlcz43MjA7NDkwOzcyMDsyMDsyMDsyMDwvYWRkaXRpb25hbF9hdHRyaWJ1dGVzPjwvZWxlbWVudD48ZWxlbWVudD48dHlwZT5jb20udW1sZXQuZWxlbWVudC5iYXNlLlJlbGF0aW9uPC90eXBlPjxjb29yZGluYXRlcz48eD43NzA8L3g+PHk+NDUwPC95Pjx3PjE5MDwvdz48aD4yMzA8L2g+PC9jb29yZGluYXRlcz48cGFuZWxfYXR0cmlidXRlcz5sdD0mbHQ7LQorbTE9MC4uKgorcjE9ZHluYW1pY0xhYmVsczwvcGFuZWxfYXR0cmlidXRlcz48YWRkaXRpb25hbF9hdHRyaWJ1dGVzPjIwOzIwOzE3MDsyMTA8L2FkZGl0aW9uYWxfYXR0cmlidXRlcz48L2VsZW1lbnQ+PGVsZW1lbnQ+PHR5cGU+Y29tLnVtbGV0LmVsZW1lbnQuYmFzZS5SZWxhdGlvbjwvdHlwZT48Y29vcmRpbmF0ZXM+PHg+NjU4PC94Pjx5PjQ1MDwveT48dz42NDwvdz48aD4xMjA8L2g+PC9jb29yZGluYXRlcz48cGFuZWxfYXR0cmlidXRlcz5sdD0mbHQ7Jmx0OyZsdDsmbHQ7LQorcjI9bmV4dFZhbHVlCittMj0xCis8L3BhbmVsX2F0dHJpYnV0ZXM+PGFkZGl0aW9uYWxfYXR0cmlidXRlcz4zMjsyMDszMjsxMDA8L2FkZGl0aW9uYWxfYXR0cmlidXRlcz48L2VsZW1lbnQ+PGVsZW1lbnQ+PHR5cGU+Y29tLnVtbGV0LmVsZW1lbnQuYmFzZS5SZWxhdGlvbjwvdHlwZT48Y29vcmRpbmF0ZXM+PHg+MzAwPC94Pjx5PjIzMDwveT48dz4xNDA8L3c+PGg+NDA8L2g+PC9jb29yZGluYXRlcz48cGFuZWxfYXR0cmlidXRlcz5sdD0mbHQ7Jmx0OyZsdDsmbHQ7LQorcjI9bGFiZWwKK20yPTAuLjEKKzwvcGFuZWxfYXR0cmlidXRlcz48YWRkaXRpb25hbF9hdHRyaWJ1dGVzPjIwOzIwOzEyMDsyMDwvYWRkaXRpb25hbF9hdHRyaWJ1dGVzPjwvZWxlbWVudD48ZWxlbWVudD48dHlwZT5jb20udW1sZXQuZWxlbWVudC5iYXNlLkNsYXNzPC90eXBlPjxjb29yZGluYXRlcz48eD40MjA8L3g+PHk+MjMwPC95Pjx3PjMzMDwvdz48aD45MDwvaD48L2Nvb3JkaW5hdGVzPjxwYW5lbF9hdHRyaWJ1dGVzPiZsdDsmbHQ7QWJzdHJhY3QmZ3Q7Jmd0OworTGFiZWwKKy0tCistVVJJT2ZJZGVudGlmaWFibGVUb0JlTGFiZWxlZDogVVJJCistLTwvcGFuZWxfYXR0cmlidXRlcz48YWRkaXRpb25hbF9hdHRyaWJ1dGVzLz48L2VsZW1lbnQ+PGVsZW1lbnQ+PHR5cGU+Y29tLnVtbGV0LmVsZW1lbnQuYmFzZS5SZWxhdGlvbjwvdHlwZT48Y29vcmRpbmF0ZXM+PHg+NDYwPC94Pjx5PjUwPC95Pjx3PjQwPC93PjxoPjIwMDwvaD48L2Nvb3JkaW5hdGVzPjxwYW5lbF9hdHRyaWJ1dGVzPmx0PSZsdDsmbHQ7LTwvcGFuZWxfYXR0cmlidXRlcz48YWRkaXRpb25hbF9hdHRyaWJ1dGVzPjIwOzIwOzIwOzE4MDwvYWRkaXRpb25hbF9hdHRyaWJ1dGVzPjwvZWxlbWVudD48ZWxlbWVudD48dHlwZT5jb20udW1sZXQuZWxlbWVudC5iYXNlLkNsYXNzPC90eXBlPjxjb29yZGluYXRlcz48eD4xMjA8L3g+PHk+MTgwPC95Pjx3PjIwMDwvdz48aD4xMjA8L2g+PC9jb29yZGluYXRlcz48cGFuZWxfYXR0cmlidXRlcz5FZGdlCistLQorLSBkaXJlY3RlZCA6IEJvb2xlYW4KKy0gYVVSTDogVVJMCistIGJVUkw6IFVSTAorLS0KKytnZXRPdGhlck5vZGUoTm9kZSkgOiBOb2RlCisraXNEaXJlY3RlZEF0KE5vZGUpIDogQm9vbGVhbgorPC9wYW5lbF9hdHRyaWJ1dGVzPjxhZGRpdGlvbmFsX2F0dHJpYnV0ZXMvPjwvZWxlbWVudD48ZWxlbWVudD48dHlwZT5jb20udW1sZXQuZWxlbWVudC5iYXNlLlJlbGF0aW9uPC90eXBlPjxjb29yZGluYXRlcz48eD4xODA8L3g+PHk+MjgwPC95Pjx3PjQxPC93PjxoPjE5MDwvaD48L2Nvb3JkaW5hdGVzPjxwYW5lbF9hdHRyaWJ1dGVzPmx0PSZsdDstCittMT0wLi5uCityMT1lZGdlcworPC9wYW5lbF9hdHRyaWJ1dGVzPjxhZGRpdGlvbmFsX2F0dHJpYnV0ZXM+MjA7MjA7MjA7MTcwPC9hZGRpdGlvbmFsX2F0dHJpYnV0ZXM+PC9lbGVtZW50PjxlbGVtZW50Pjx0eXBlPmNvbS51bWxldC5lbGVtZW50LmJhc2UuUmVsYXRpb248L3R5cGU+PGNvb3JkaW5hdGVzPjx4PjExMDwveD48eT4yODA8L3k+PHc+NDA8L3c+PGg+MTkwPC9oPjwvY29vcmRpbmF0ZXM+PHBhbmVsX2F0dHJpYnV0ZXM+bHQ9Jmx0Oy0KK20xPTAuLjEKK3IxPSAgYjwvcGFuZWxfYXR0cmlidXRlcz48YWRkaXRpb25hbF9hdHRyaWJ1dGVzPjIwOzE3MDsyMDsyMDwvYWRkaXRpb25hbF9hdHRyaWJ1dGVzPjwvZWxlbWVudD48ZWxlbWVudD48dHlwZT5jb20udW1sZXQuZWxlbWVudC5iYXNlLlJlbGF0aW9uPC90eXBlPjxjb29yZGluYXRlcz48eD4xNDA8L3g+PHk+MjgwPC95Pjx3PjQwPC93PjxoPjE5MDwvaD48L2Nvb3JkaW5hdGVzPjxwYW5lbF9hdHRyaWJ1dGVzPmx0PSZsdDstCittMT0gMC4uMQorcjE9ICBhPC9wYW5lbF9hdHRyaWJ1dGVzPjxhZGRpdGlvbmFsX2F0dHJpYnV0ZXM+MjA7MTcwOzIwOzIwPC9hZGRpdGlvbmFsX2F0dHJpYnV0ZXM+PC9lbGVtZW50PjxlbGVtZW50Pjx0eXBlPmNvbS51bWxldC5lbGVtZW50LmJhc2UuUmVsYXRpb248L3R5cGU+PGNvb3JkaW5hdGVzPjx4PjcwPC94Pjx5PjUwPC95Pjx3PjI4MDwvdz48aD40MjA8L2g+PC9jb29yZGluYXRlcz48cGFuZWxfYXR0cmlidXRlcz5sdD0mbHQ7Jmx0Oy08L3BhbmVsX2F0dHJpYnV0ZXM+PGFkZGl0aW9uYWxfYXR0cmlidXRlcz4yNjA7MjA7MjA7MTAwOzIwOzQwMDwvYWRkaXRpb25hbF9hdHRyaWJ1dGVzPjwvZWxlbWVudD48ZWxlbWVudD48dHlwZT5jb20udW1sZXQuZWxlbWVudC5iYXNlLk5vdGU8L3R5cGU+PGNvb3JkaW5hdGVzPjx4PjY4MDwveD48eT4zMDwveT48dz4yMjA8L3c+PGg+MzA8L2g+PC9jb29yZGluYXRlcz48cGFuZWxfYXR0cmlidXRlcz5vcmcuZWNsaXBzZS5zdGVtLmdyYXBoPC9wYW5lbF9hdHRyaWJ1dGVzPjxhZGRpdGlvbmFsX2F0dHJpYnV0ZXMvPjwvZWxlbWVudD48ZWxlbWVudD48dHlwZT5jb20udW1sZXQuZWxlbWVudC5iYXNlLkNsYXNzPC90eXBlPjxjb29yZGluYXRlcz48eD4zMDA8L3g+PHk+NDA8L3k+PHc+MzEwPC93PjxoPjMwPC9oPjwvY29vcmRpbmF0ZXM+PHBhbmVsX2F0dHJpYnV0ZXM+L29yZy5lY2xpcHNlLnN0ZW0uY29tbW9uLklkZW50aWZpYWJsZS8KKworPC9wYW5lbF9hdHRyaWJ1dGVzPjxhZGRpdGlvbmFsX2F0dHJpYnV0ZXMvPjwvZWxlbWVudD48ZWxlbWVudD48dHlwZT5jb20udW1sZXQuZWxlbWVudC5iYXNlLlJlbGF0aW9uPC90eXBlPjxjb29yZGluYXRlcz48eD4yMDA8L3g+PHk+NTA8L3k+PHc+MTcwPC93PjxoPjE1MDwvaD48L2Nvb3JkaW5hdGVzPjxwYW5lbF9hdHRyaWJ1dGVzPmx0PSZsdDsmbHQ7LTwvcGFuZWxfYXR0cmlidXRlcz48YWRkaXRpb25hbF9hdHRyaWJ1dGVzPjE1MDsyMDsyMDsxMzA8L2FkZGl0aW9uYWxfYXR0cmlidXRlcz48L2VsZW1lbnQ+PC91bWxldF9kaWFncmFtPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL2RvY3VtZW50YXRpb24vbW9kZWwucGRmIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvZG9jdW1lbnRhdGlvbi9tb2RlbC5wZGYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDFkMDIzNQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL2RvY3VtZW50YXRpb24vbW9kZWwucGRmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL2RvY3VtZW50YXRpb24vbW9kZWwudXhmIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvZG9jdW1lbnRhdGlvbi9tb2RlbC51eGYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmVmYzM4MAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL2RvY3VtZW50YXRpb24vbW9kZWwudXhmCkBAIC0wLDAgKzEsNTkgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+PHVtbGV0X2RpYWdyYW0+PGVsZW1lbnQ+PHR5cGU+Y29tLnVtbGV0LmVsZW1lbnQuYmFzZS5DbGFzczwvdHlwZT48Y29vcmRpbmF0ZXM+PHg+OTYwPC94Pjx5PjM3MDwveT48dz4zMDA8L3c+PGg+MzA8L2g+PC9jb29yZGluYXRlcz48cGFuZWxfYXR0cmlidXRlcz5vcmcuZWNsaXBzZS5zdGVtLmdyYXBoLkR5bmFtaWNMYWJlbDwvcGFuZWxfYXR0cmlidXRlcz48YWRkaXRpb25hbF9hdHRyaWJ1dGVzLz48L2VsZW1lbnQ+PGVsZW1lbnQ+PHR5cGU+Y29tLnVtbGV0LmVsZW1lbnQuYmFzZS5Ob3RlPC90eXBlPjxjb29yZGluYXRlcz48eD41OTA8L3g+PHk+MTA8L3k+PHc+MjIwPC93PjxoPjMwPC9oPjwvY29vcmRpbmF0ZXM+PHBhbmVsX2F0dHJpYnV0ZXM+b3JnLmVjbGlwc2Uuc3RlbS5tb2RlbDwvcGFuZWxfYXR0cmlidXRlcz48YWRkaXRpb25hbF9hdHRyaWJ1dGVzLz48L2VsZW1lbnQ+PGVsZW1lbnQ+PHR5cGU+Y29tLnVtbGV0LmVsZW1lbnQuYmFzZS5DbGFzczwvdHlwZT48Y29vcmRpbmF0ZXM+PHg+NTA8L3g+PHk+NTQwPC95Pjx3PjI1MDwvdz48aD4zMDwvaD48L2Nvb3JkaW5hdGVzPjxwYW5lbF9hdHRyaWJ1dGVzPm9yZy5lY2xpcHNlLnN0ZW0uZ3JhcGguR3JhcGgKKworPC9wYW5lbF9hdHRyaWJ1dGVzPjxhZGRpdGlvbmFsX2F0dHJpYnV0ZXMvPjwvZWxlbWVudD48ZWxlbWVudD48dHlwZT5jb20udW1sZXQuZWxlbWVudC5iYXNlLkNsYXNzPC90eXBlPjxjb29yZGluYXRlcz48eD4yMTA8L3g+PHk+NzA8L3k+PHc+MzEwPC93PjxoPjMwPC9oPjwvY29vcmRpbmF0ZXM+PHBhbmVsX2F0dHJpYnV0ZXM+L29yZy5lY2xpcHNlLnN0ZW0uY29tbW9uLklkZW50aWZpYWJsZS88L3BhbmVsX2F0dHJpYnV0ZXM+PGFkZGl0aW9uYWxfYXR0cmlidXRlcy8+PC9lbGVtZW50PjxlbGVtZW50Pjx0eXBlPmNvbS51bWxldC5lbGVtZW50LmJhc2UuUmVsYXRpb248L3R5cGU+PGNvb3JkaW5hdGVzPjx4PjQyMDwveD48eT40MjA8L3k+PHc+MzgwPC93PjxoPjExMDwvaD48L2Nvb3JkaW5hdGVzPjxwYW5lbF9hdHRyaWJ1dGVzPmx0PSZsdDsmbHQ7Jmx0OyZsdDstCittMj0wLi4qCityMj1lZGdlRGVjb3JhdG9ycworPC9wYW5lbF9hdHRyaWJ1dGVzPjxhZGRpdGlvbmFsX2F0dHJpYnV0ZXM+MjA7MjA7MzYwOzkwPC9hZGRpdGlvbmFsX2F0dHJpYnV0ZXM+PC9lbGVtZW50PjxlbGVtZW50Pjx0eXBlPmNvbS51bWxldC5lbGVtZW50LmJhc2UuUmVsYXRpb248L3R5cGU+PGNvb3JkaW5hdGVzPjx4PjQyMDwveD48eT40MDA8L3k+PHc+MjcwPC93PjxoPjQwPC9oPjwvY29vcmRpbmF0ZXM+PHBhbmVsX2F0dHJpYnV0ZXM+bHQ9Jmx0OyZsdDsmbHQ7Jmx0Oy0KK3IyPWdyYXBoRGVjb3JhdG9ycworbTI9MC4uKgorPC9wYW5lbF9hdHRyaWJ1dGVzPjxhZGRpdGlvbmFsX2F0dHJpYnV0ZXM+MjA7MjA7MjUwOzIwPC9hZGRpdGlvbmFsX2F0dHJpYnV0ZXM+PC9lbGVtZW50PjxlbGVtZW50Pjx0eXBlPmNvbS51bWxldC5lbGVtZW50LmJhc2UuUmVsYXRpb248L3R5cGU+PGNvb3JkaW5hdGVzPjx4Pjc5MDwveD48eT4yNzA8L3k+PHc+NDA8L3c+PGg+NzA8L2g+PC9jb29yZGluYXRlcz48cGFuZWxfYXR0cmlidXRlcz5sdD0mbHQ7Jmx0Oy08L3BhbmVsX2F0dHJpYnV0ZXM+PGFkZGl0aW9uYWxfYXR0cmlidXRlcz4yMDsyMDsyMDs1MDwvYWRkaXRpb25hbF9hdHRyaWJ1dGVzPjwvZWxlbWVudD48ZWxlbWVudD48dHlwZT5jb20udW1sZXQuZWxlbWVudC5iYXNlLkNsYXNzPC90eXBlPjxjb29yZGluYXRlcz48eD42MDA8L3g+PHk+MzIwPC95Pjx3PjI3MDwvdz48aD43MDwvaD48L2Nvb3JkaW5hdGVzPjxwYW5lbF9hdHRyaWJ1dGVzPk5vZGVEZWNvcmF0b3IKKy0tCisgCistLQorIAorPC9wYW5lbF9hdHRyaWJ1dGVzPjxhZGRpdGlvbmFsX2F0dHJpYnV0ZXMvPjwvZWxlbWVudD48ZWxlbWVudD48dHlwZT5jb20udW1sZXQuZWxlbWVudC5iYXNlLkNsYXNzPC90eXBlPjxjb29yZGluYXRlcz48eD43ODA8L3g+PHk+NDgwPC95Pjx3PjI3MDwvdz48aD43MDwvaD48L2Nvb3JkaW5hdGVzPjxwYW5lbF9hdHRyaWJ1dGVzPkVkZ2VEZWNvcmF0b3IKKy0tCisgCistLQorCisKKzwvcGFuZWxfYXR0cmlidXRlcz48YWRkaXRpb25hbF9hdHRyaWJ1dGVzLz48L2VsZW1lbnQ+PGVsZW1lbnQ+PHR5cGU+Y29tLnVtbGV0LmVsZW1lbnQuYmFzZS5DbGFzczwvdHlwZT48Y29vcmRpbmF0ZXM+PHg+NjcwPC94Pjx5PjQwMDwveT48dz4yNzA8L3c+PGg+NzA8L2g+PC9jb29yZGluYXRlcz48cGFuZWxfYXR0cmlidXRlcz5HcmFwaERlY29yYXRvcgorLS0KKyAKKy0tCisKKzwvcGFuZWxfYXR0cmlidXRlcz48YWRkaXRpb25hbF9hdHRyaWJ1dGVzLz48L2VsZW1lbnQ+PGVsZW1lbnQ+PHR5cGU+Y29tLnVtbGV0LmVsZW1lbnQuYmFzZS5SZWxhdGlvbjwvdHlwZT48Y29vcmRpbmF0ZXM+PHg+NDIwPC94Pjx5PjMzMDwveT48dz4yMDA8L3c+PGg+NDA8L2g+PC9jb29yZGluYXRlcz48cGFuZWxfYXR0cmlidXRlcz5sdD0mbHQ7Jmx0OyZsdDsmbHQ7LQorbTI9MC4uKgorcjI9bm9kZURlY29yYXRvcnMKKzwvcGFuZWxfYXR0cmlidXRlcz48YWRkaXRpb25hbF9hdHRyaWJ1dGVzPjIwOzIwOzE4MDsyMDwvYWRkaXRpb25hbF9hdHRyaWJ1dGVzPjwvZWxlbWVudD48ZWxlbWVudD48dHlwZT5jb20udW1sZXQuZWxlbWVudC5iYXNlLkNsYXNzPC90eXBlPjxjb29yZGluYXRlcz48eD43ODA8L3g+PHk+MTYwPC95Pjx3PjI5MDwvdz48aD4xMzA8L2g+PC9jb29yZGluYXRlcz48cGFuZWxfYXR0cmlidXRlcz4mbHQ7Jmx0O2Fic3RyYWN0Jmd0OyZndDsgCisvRGVjb3JhdG9yLworLS0KKy1pbmRleDogaW50CistLQorICsgZGVjb3JhdGVHcmFwaChHcmFwaCkgOiB2b2lkCisrIHVwZGF0ZUxhYmVscyhHcmFwaCwgU1RFTVRpbWUpIDogdm9pZAorCistLQorPC9wYW5lbF9hdHRyaWJ1dGVzPjxhZGRpdGlvbmFsX2F0dHJpYnV0ZXMvPjwvZWxlbWVudD48ZWxlbWVudD48dHlwZT5jb20udW1sZXQuZWxlbWVudC5iYXNlLlJlbGF0aW9uPC90eXBlPjxjb29yZGluYXRlcz48eD45MzA8L3g+PHk+MjcwPC95Pjx3PjQwPC93PjxoPjIzMDwvaD48L2Nvb3JkaW5hdGVzPjxwYW5lbF9hdHRyaWJ1dGVzPmx0PSZsdDsmbHQ7LTwvcGFuZWxfYXR0cmlidXRlcz48YWRkaXRpb25hbF9hdHRyaWJ1dGVzPjIwOzIwOzIwOzIxMDwvYWRkaXRpb25hbF9hdHRyaWJ1dGVzPjwvZWxlbWVudD48ZWxlbWVudD48dHlwZT5jb20udW1sZXQuZWxlbWVudC5iYXNlLkNsYXNzPC90eXBlPjxjb29yZGluYXRlcz48eD42MDwveD48eT4zMjA8L3k+PHc+MzgwPC93PjxoPjE0MDwvaD48L2Nvb3JkaW5hdGVzPjxwYW5lbF9hdHRyaWJ1dGVzPk1vZGVsCistLQorIAorLS0KKysgZ2V0Q2Fub25pY2FsR3JhcGgoKSA6IEdyYXBoCisrIGdldENhbm9uaWNhbE5vZGVEZWNvcmF0b3JzKCkgOiBOb2RlRGVjb3JhdG9yCisrIGdldENhbm9uaWNhbEVkZ2VEZWNvcmF0b3JzKCk6IEVkZ2VEZWNvcmF0b3IKKysgZ2V0Q2Fub25pY2FsR3JhcGhEZWNvcmF0b3JzKCk6IEdyYXBoRGVjb3JhdG9yCistLQorPC9wYW5lbF9hdHRyaWJ1dGVzPjxhZGRpdGlvbmFsX2F0dHJpYnV0ZXMvPjwvZWxlbWVudD48ZWxlbWVudD48dHlwZT5jb20udW1sZXQuZWxlbWVudC5iYXNlLlJlbGF0aW9uPC90eXBlPjxjb29yZGluYXRlcz48eD45OTA8L3g+PHk+MjcwPC95Pjx3PjEwMDwvdz48aD4xMjA8L2g+PC9jb29yZGluYXRlcz48cGFuZWxfYXR0cmlidXRlcz5sdD0mbHQ7LQorbTE9MC4uMQorcjE9bGFiZWxzVG9VcGRhdGU8L3BhbmVsX2F0dHJpYnV0ZXM+PGFkZGl0aW9uYWxfYXR0cmlidXRlcz41MDsxMDA7NTA7MjA8L2FkZGl0aW9uYWxfYXR0cmlidXRlcz48L2VsZW1lbnQ+PGVsZW1lbnQ+PHR5cGU+Y29tLnVtbGV0LmVsZW1lbnQuYmFzZS5SZWxhdGlvbjwvdHlwZT48Y29vcmRpbmF0ZXM+PHg+MDwveD48eT4zNjA8L3k+PHc+MTIwPC93PjxoPjE1MDwvaD48L2Nvb3JkaW5hdGVzPjxwYW5lbF9hdHRyaWJ1dGVzPmx0PSZsdDsmbHQ7Jmx0OyZsdDstCittMj0gICAwLi4qCityMj1tb2RlbHMKKzwvcGFuZWxfYXR0cmlidXRlcz48YWRkaXRpb25hbF9hdHRyaWJ1dGVzPjYwOzIwOzIwOzIwOzIwOzEzMDsxMDA7MTMwOzEwMDsxMDA8L2FkZGl0aW9uYWxfYXR0cmlidXRlcz48L2VsZW1lbnQ+PGVsZW1lbnQ+PHR5cGU+Y29tLnVtbGV0LmVsZW1lbnQuYmFzZS5SZWxhdGlvbjwvdHlwZT48Y29vcmRpbmF0ZXM+PHg+ODcwPC94Pjx5PjI3MDwveT48dz40MDwvdz48aD4xNTA8L2g+PC9jb29yZGluYXRlcz48cGFuZWxfYXR0cmlidXRlcz5sdD0mbHQ7Jmx0Oy08L3BhbmVsX2F0dHJpYnV0ZXM+PGFkZGl0aW9uYWxfYXR0cmlidXRlcz4yMDsyMDsyMDsxMzA8L2FkZGl0aW9uYWxfYXR0cmlidXRlcz48L2VsZW1lbnQ+PGVsZW1lbnQ+PHR5cGU+Y29tLnVtbGV0LmVsZW1lbnQuYmFzZS5SZWxhdGlvbjwvdHlwZT48Y29vcmRpbmF0ZXM+PHg+MjMwPC94Pjx5PjgwPC95Pjx3PjQwPC93PjxoPjI2MDwvaD48L2Nvb3JkaW5hdGVzPjxwYW5lbF9hdHRyaWJ1dGVzPmx0PSZsdDsmbHQ7LTwvcGFuZWxfYXR0cmlidXRlcz48YWRkaXRpb25hbF9hdHRyaWJ1dGVzPjIwOzIwOzIwOzI0MDwvYWRkaXRpb25hbF9hdHRyaWJ1dGVzPjwvZWxlbWVudD48ZWxlbWVudD48dHlwZT5jb20udW1sZXQuZWxlbWVudC5iYXNlLkNsYXNzPC90eXBlPjxjb29yZGluYXRlcz48eD41MDwveD48eT41OTA8L3k+PHc+MjQwPC93PjxoPjkwPC9oPjwvY29vcmRpbmF0ZXM+PHBhbmVsX2F0dHJpYnV0ZXM+U1RFTVRpbWUKKy0tCistIGN1cnJlbnRUaW1lOiBqYXZhLnV0aWwuRGF0ZQorLSBzdGFydFRpbWU6IGphdmEudXRpbC5EYXRlCistLQorKyBnZXRFbGFwc2VkVGltZSgpOiBqYXZhLnV0aWwuRGF0ZTwvcGFuZWxfYXR0cmlidXRlcz48YWRkaXRpb25hbF9hdHRyaWJ1dGVzLz48L2VsZW1lbnQ+PGVsZW1lbnQ+PHR5cGU+Y29tLnVtbGV0LmVsZW1lbnQuYmFzZS5SZWxhdGlvbjwvdHlwZT48Y29vcmRpbmF0ZXM+PHg+MTUwPC94Pjx5PjQ0MDwveT48dz40NTwvdz48aD4xMjA8L2g+PC9jb29yZGluYXRlcz48cGFuZWxfYXR0cmlidXRlcz5sdD0mbHQ7Jmx0OyZsdDsmbHQ7LQorbTI9MC4uKgorcjI9Z3JhcGhzCis8L3BhbmVsX2F0dHJpYnV0ZXM+PGFkZGl0aW9uYWxfYXR0cmlidXRlcz4yMjsyMDsyMjsxMDA8L2FkZGl0aW9uYWxfYXR0cmlidXRlcz48L2VsZW1lbnQ+PGVsZW1lbnQ+PHR5cGU+Y29tLnVtbGV0LmVsZW1lbnQuYmFzZS5SZWxhdGlvbjwvdHlwZT48Y29vcmRpbmF0ZXM+PHg+NDMwPC94Pjx5PjgwPC95Pjx3PjQ1MDwvdz48aD4xMDA8L2g+PC9jb29yZGluYXRlcz48cGFuZWxfYXR0cmlidXRlcz5sdD0mbHQ7Jmx0Oy08L3BhbmVsX2F0dHJpYnV0ZXM+PGFkZGl0aW9uYWxfYXR0cmlidXRlcz4yMDsyMDs0MzA7ODA8L2FkZGl0aW9uYWxfYXR0cmlidXRlcz48L2VsZW1lbnQ+PC91bWxldF9kaWFncmFtPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL2RvY3VtZW50YXRpb24vbW9kaWZpZXIucGRmIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvZG9jdW1lbnRhdGlvbi9tb2RpZmllci5wZGYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2UwY2I3YwotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL2RvY3VtZW50YXRpb24vbW9kaWZpZXIucGRmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL2RvY3VtZW50YXRpb24vbW9kaWZpZXIudXhmIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvZG9jdW1lbnRhdGlvbi9tb2RpZmllci51eGYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODkzOGZhZQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL2RvY3VtZW50YXRpb24vbW9kaWZpZXIudXhmCkBAIC0wLDAgKzEsNTYgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+PHVtbGV0X2RpYWdyYW0+PGhlbHBfdGV4dD4vL1VuY29tbWVudCB0aGUgZm9sbG93aW5nIGxpbmUgdG8gY2hhbmdlIHRoZSBmb250c2l6ZToKKy8vZm9udHNpemU9MTQKKworLy9XZWxjb21lIHRvIFVNTGV0IQorCisvLyAqRG91YmxlLWNsaWNrIG9uIFVNTCBlbGVtZW50cyB0byBhZGQgdGhlbSB0byB0aGUgZGlhZ3JhbS4KKy8vICpFZGl0IGVsZW1lbnQgcHJvcGVydGllcyBieSBtb2RpZnlpbmcgdGhlIHRleHQgaW4gdGhpcyBwYW5lbC4KKy8vICpFZGl0IHRoZSBmaWxlcyBpbiB0aGUgJ3BhbGV0dGVzJyBkaXJlY3RvcnkgdG8gc3RvcmUgeW91ciBvd24gZWxlbWVudCBwYWxldHRlcy4KKy8vICpQcmVzcyBEZWwgb3IgQmFja3NwYWNlIHRvIHJlbW92ZSBlbGVtZW50cyBmcm9tIHRoZSBkaWFncmFtLgorLy8gKkhvbGQgZG93biBDdHJsIGtleSB0byBzZWxlY3QgbXVsdGlwbGUgZWxlbWVudHMuCisvLyAqUHJlc3MgYyB0byBjb3B5IHRoZSBVTUwgZGlhZ3JhbSB0byB0aGUgc3lzdGVtIGNsaXBib2FyZC4KKy8vICogVGhpcyB0ZXh0IHdpbGwgYmUgc3RvcmVkIHdpdGggZWFjaCBkaWFncmFtLiBGZWVsIGZyZWUgdG8gdXNlIHRoZSBhcmVhIGZvciBub3Rlcy4KKzwvaGVscF90ZXh0PjxlbGVtZW50Pjx0eXBlPmNvbS51bWxldC5lbGVtZW50LmJhc2UuTm90ZTwvdHlwZT48Y29vcmRpbmF0ZXM+PHg+NzAwPC94Pjx5PjEzMDwveT48dz4yNDA8L3c+PGg+MzA8L2g+PC9jb29yZGluYXRlcz48cGFuZWxfYXR0cmlidXRlcz5vcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXI8L3BhbmVsX2F0dHJpYnV0ZXM+PGFkZGl0aW9uYWxfYXR0cmlidXRlcy8+PC9lbGVtZW50PjxlbGVtZW50Pjx0eXBlPmNvbS51bWxldC5lbGVtZW50LmJhc2UuUmVsYXRpb248L3R5cGU+PGNvb3JkaW5hdGVzPjx4Pjc1MDwveD48eT4yMjA8L3k+PHc+NDA8L3c+PGg+MTMwPC9oPjwvY29vcmRpbmF0ZXM+PHBhbmVsX2F0dHJpYnV0ZXM+bHQ9Jmx0OyZsdDstPC9wYW5lbF9hdHRyaWJ1dGVzPjxhZGRpdGlvbmFsX2F0dHJpYnV0ZXM+MjA7MjA7MjA7MTEwPC9hZGRpdGlvbmFsX2F0dHJpYnV0ZXM+PC9lbGVtZW50PjxlbGVtZW50Pjx0eXBlPmNvbS51bWxldC5lbGVtZW50LmJhc2UuQ2xhc3M8L3R5cGU+PGNvb3JkaW5hdGVzPjx4PjYyMDwveD48eT4yMDA8L3k+PHc+MzIwPC93PjxoPjQwPC9oPjwvY29vcmRpbmF0ZXM+PHBhbmVsX2F0dHJpYnV0ZXM+b3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5JZGVudGlmaWFibGUKKzwvcGFuZWxfYXR0cmlidXRlcz48YWRkaXRpb25hbF9hdHRyaWJ1dGVzLz48L2VsZW1lbnQ+PGVsZW1lbnQ+PHR5cGU+Y29tLnVtbGV0LmVsZW1lbnQuYmFzZS5DbGFzczwvdHlwZT48Y29vcmRpbmF0ZXM+PHg+NzgwPC94Pjx5Pjc3MDwveT48dz4xNzA8L3c+PGg+MTAwPC9oPjwvY29vcmRpbmF0ZXM+PHBhbmVsX2F0dHJpYnV0ZXM+U1RFTVRpbWVSYW5nZU1vZGlmaWVyCistLQorc3RhcnRWYWx1ZTogU1RFTVRpbWUKK2VuZFZhbHVlOiBTVEVNVGltZQoraW5jcmVtZW50OiBsb25nCistLTwvcGFuZWxfYXR0cmlidXRlcz48YWRkaXRpb25hbF9hdHRyaWJ1dGVzLz48L2VsZW1lbnQ+PGVsZW1lbnQ+PHR5cGU+Y29tLnVtbGV0LmVsZW1lbnQuYmFzZS5DbGFzczwvdHlwZT48Y29vcmRpbmF0ZXM+PHg+NTkwPC94Pjx5Pjc3MDwveT48dz4xODA8L3c+PGg+MTAwPC9oPjwvY29vcmRpbmF0ZXM+PHBhbmVsX2F0dHJpYnV0ZXM+SW50ZWdlclJhbmdlTW9kaWZpZXIKKy0tCitzdGFydFZhbHVlOiBJbnRlZ2VyCitlbmRWYWx1ZTogSW50ZWdlcgoraW5jcmVtZW50OiBpbnQKKy0tPC9wYW5lbF9hdHRyaWJ1dGVzPjxhZGRpdGlvbmFsX2F0dHJpYnV0ZXMvPjwvZWxlbWVudD48ZWxlbWVudD48dHlwZT5jb20udW1sZXQuZWxlbWVudC5iYXNlLkNsYXNzPC90eXBlPjxjb29yZGluYXRlcz48eD40MzA8L3g+PHk+NzcwPC95Pjx3PjE1MDwvdz48aD4xMDA8L2g+PC9jb29yZGluYXRlcz48cGFuZWxfYXR0cmlidXRlcz5Eb3VibGVSYW5nZU1vZGlmaWVyCistLQorc3RhcnRWYWx1ZTogRG91YmxlCitlbmRWYWx1ZTogRG91YmxlCitpbmNyZW1lbnQ6IGRvdWJsZQorLS08L3BhbmVsX2F0dHJpYnV0ZXM+PGFkZGl0aW9uYWxfYXR0cmlidXRlcy8+PC9lbGVtZW50PjxlbGVtZW50Pjx0eXBlPmNvbS51bWxldC5lbGVtZW50LmJhc2UuQ2xhc3M8L3R5cGU+PGNvb3JkaW5hdGVzPjx4PjY2MDwveD48eT40ODA8L3k+PHc+MjQwPC93PjxoPjEwMDwvaD48L2Nvb3JkaW5hdGVzPjxwYW5lbF9hdHRyaWJ1dGVzPi9GZWF0dXJlTW9kaWZpZXIvCistLQorZVN0cnVjdHVyYWxGZWF0dXJlIDogRVN0cnVjdHVyYWxGZWF0dXJlCistLQordXBkYXRlRmVhdHVyZShFT2JqZWN0KTogdm9pZAorZ2V0TW9kaWZpY2F0aW9uU3VtbWFyeSgpOiBTdHJpbmcKK2lzQ29tcGxldGUoKSA6IGJvb2xlYW48L3BhbmVsX2F0dHJpYnV0ZXM+PGFkZGl0aW9uYWxfYXR0cmlidXRlcy8+PC9lbGVtZW50PjxlbGVtZW50Pjx0eXBlPmNvbS51bWxldC5lbGVtZW50LmJhc2UuUmVsYXRpb248L3R5cGU+PGNvb3JkaW5hdGVzPjx4PjY2MDwveD48eT41ODA8L3k+PHc+MjUwPC93PjxoPjcwPC9oPjwvY29vcmRpbmF0ZXM+PHBhbmVsX2F0dHJpYnV0ZXM+bHQ9LQorPC9wYW5lbF9hdHRyaWJ1dGVzPjxhZGRpdGlvbmFsX2F0dHJpYnV0ZXM+MjA7NTA7MjA7MjA7MjMwOzIwOzIzMDs1MDwvYWRkaXRpb25hbF9hdHRyaWJ1dGVzPjwvZWxlbWVudD48ZWxlbWVudD48dHlwZT5jb20udW1sZXQuZWxlbWVudC5iYXNlLkNsYXNzPC90eXBlPjxjb29yZGluYXRlcz48eD42NDA8L3g+PHk+MzMwPC95Pjx3PjI2MDwvdz48aD4xMDA8L2g+PC9jb29yZGluYXRlcz48cGFuZWxfYXR0cmlidXRlcz5Nb2RpZmllcgorLS0KKyB0YXJnZXQ6IFVSSQorLS0KK3VwZGF0ZVNjZW5hcmlvKFNjZW5hcmlvKTogdm9pZAorZ2V0TW9kaWZpY2F0aW9uU3VtbWFyeSgpOiBMaXN0Jmx0O1N0cmluZyZndDsKK2lzQ29tcGxldGUoKTogYm9vbGVhbjwvcGFuZWxfYXR0cmlidXRlcz48YWRkaXRpb25hbF9hdHRyaWJ1dGVzLz48L2VsZW1lbnQ+PGVsZW1lbnQ+PHR5cGU+Y29tLnVtbGV0LmVsZW1lbnQuYmFzZS5SZWxhdGlvbjwvdHlwZT48Y29vcmRpbmF0ZXM+PHg+NzUwPC94Pjx5PjU2MDwveT48dz40MDwvdz48aD42MDwvaD48L2Nvb3JkaW5hdGVzPjxwYW5lbF9hdHRyaWJ1dGVzPmx0PSZsdDsmbHQ7LTwvcGFuZWxfYXR0cmlidXRlcz48YWRkaXRpb25hbF9hdHRyaWJ1dGVzPjIwOzIwOzIwOzQwPC9hZGRpdGlvbmFsX2F0dHJpYnV0ZXM+PC9lbGVtZW50PjxlbGVtZW50Pjx0eXBlPmNvbS51bWxldC5lbGVtZW50LmJhc2UuUmVsYXRpb248L3R5cGU+PGNvb3JkaW5hdGVzPjx4PjcxOTwveD48eT40MTA8L3k+PHc+MTAzPC93PjxoPjkwPC9oPjwvY29vcmRpbmF0ZXM+PHBhbmVsX2F0dHJpYnV0ZXM+bHQ9Jmx0OyZsdDsmbHQ7Jmx0Oy0KK20yPTAuLm4KK3IyPWZlYXR1cmVNb2RpZmllcnM8L3BhbmVsX2F0dHJpYnV0ZXM+PGFkZGl0aW9uYWxfYXR0cmlidXRlcz41MTsyMDs1MTs3MDwvYWRkaXRpb25hbF9hdHRyaWJ1dGVzPjwvZWxlbWVudD48ZWxlbWVudD48dHlwZT5jb20udW1sZXQuZWxlbWVudC5iYXNlLlJlbGF0aW9uPC90eXBlPjxjb29yZGluYXRlcz48eD40ODA8L3g+PHk+NzIwPC95Pjx3PjM5MDwvdz48aD43MDwvaD48L2Nvb3JkaW5hdGVzPjxwYW5lbF9hdHRyaWJ1dGVzPmx0PS08L3BhbmVsX2F0dHJpYnV0ZXM+PGFkZGl0aW9uYWxfYXR0cmlidXRlcz4yMDs1MDsyMDsyMDszNzA7MjA7MzcwOzUwPC9hZGRpdGlvbmFsX2F0dHJpYnV0ZXM+PC9lbGVtZW50PjxlbGVtZW50Pjx0eXBlPmNvbS51bWxldC5lbGVtZW50LmJhc2UuUmVsYXRpb248L3R5cGU+PGNvb3JkaW5hdGVzPjx4PjY2MDwveD48eT43MjA8L3k+PHc+NDA8L3c+PGg+NzA8L2g+PC9jb29yZGluYXRlcz48cGFuZWxfYXR0cmlidXRlcz5sdD0tPC9wYW5lbF9hdHRyaWJ1dGVzPjxhZGRpdGlvbmFsX2F0dHJpYnV0ZXM+MjA7MjA7MjA7NTA8L2FkZGl0aW9uYWxfYXR0cmlidXRlcz48L2VsZW1lbnQ+PGVsZW1lbnQ+PHR5cGU+Y29tLnVtbGV0LmVsZW1lbnQuYmFzZS5SZWxhdGlvbjwvdHlwZT48Y29vcmRpbmF0ZXM+PHg+NjYwPC94Pjx5PjY4MDwveT48dz40MDwvdz48aD44MDwvaD48L2Nvb3JkaW5hdGVzPjxwYW5lbF9hdHRyaWJ1dGVzPmx0PSZsdDsmbHQ7LTwvcGFuZWxfYXR0cmlidXRlcz48YWRkaXRpb25hbF9hdHRyaWJ1dGVzPjIwOzIwOzIwOzYwPC9hZGRpdGlvbmFsX2F0dHJpYnV0ZXM+PC9lbGVtZW50PjxlbGVtZW50Pjx0eXBlPmNvbS51bWxldC5lbGVtZW50LmJhc2UuQ2xhc3M8L3R5cGU+PGNvb3JkaW5hdGVzPjx4Pjc5MDwveD48eT42MzA8L3k+PHc+MjEwPC93PjxoPjgwPC9oPjwvY29vcmRpbmF0ZXM+PHBhbmVsX2F0dHJpYnV0ZXM+L1NlcXVlbmNlTW9kaWZpZXIvCistLQorIAorLS0KK2dldFNlcXVlbmNlU2l6ZSgpOiBpbnQKKworPC9wYW5lbF9hdHRyaWJ1dGVzPjxhZGRpdGlvbmFsX2F0dHJpYnV0ZXMvPjwvZWxlbWVudD48Z3JvdXA+PGVsZW1lbnQ+PHR5cGU+Y29tLnVtbGV0LmVsZW1lbnQuYmFzZS5DbGFzczwvdHlwZT48Y29vcmRpbmF0ZXM+PHg+NjIwPC94Pjx5PjYzMDwveT48dz4xMjA8L3c+PGg+NzA8L2g+PC9jb29yZGluYXRlcz48cGFuZWxfYXR0cmlidXRlcz4vUmFuZ2VNb2RpZmllci8KKy0tCisgCistLQorCisKKzwvcGFuZWxfYXR0cmlidXRlcz48YWRkaXRpb25hbF9hdHRyaWJ1dGVzLz48L2VsZW1lbnQ+PC9ncm91cD48L3VtbGV0X2RpYWdyYW0+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvZG9jdW1lbnRhdGlvbi9wcmVkaWNhdGUucGRmIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvZG9jdW1lbnRhdGlvbi9wcmVkaWNhdGUucGRmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkzOGIxNDYKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9kb2N1bWVudGF0aW9uL3ByZWRpY2F0ZS5wZGYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvZG9jdW1lbnRhdGlvbi9wcmVkaWNhdGUudXhmIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvZG9jdW1lbnRhdGlvbi9wcmVkaWNhdGUudXhmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhiMzk0M2YKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9kb2N1bWVudGF0aW9uL3ByZWRpY2F0ZS51eGYKQEAgLTAsMCArMSwxMzAgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+PHVtbGV0X2RpYWdyYW0+PGhlbHBfdGV4dD4vL1VuY29tbWVudCB0aGUgZm9sbG93aW5nIGxpbmUgdG8gY2hhbmdlIHRoZSBmb250c2l6ZToKKy8vZm9udHNpemU9MTQKKworLy9XZWxjb21lIHRvIFVNTGV0IQorCisvLyAqRG91YmxlLWNsaWNrIG9uIFVNTCBlbGVtZW50cyB0byBhZGQgdGhlbSB0byB0aGUgZGlhZ3JhbS4KKy8vICpFZGl0IGVsZW1lbnQgcHJvcGVydGllcyBieSBtb2RpZnlpbmcgdGhlIHRleHQgaW4gdGhpcyBwYW5lbC4KKy8vICpFZGl0IHRoZSBmaWxlcyBpbiB0aGUgJ3BhbGV0dGVzJyBkaXJlY3RvcnkgdG8gc3RvcmUgeW91ciBvd24gZWxlbWVudCBwYWxldHRlcy4KKy8vICpQcmVzcyBEZWwgb3IgQmFja3NwYWNlIHRvIHJlbW92ZSBlbGVtZW50cyBmcm9tIHRoZSBkaWFncmFtLgorLy8gKkhvbGQgZG93biBDdHJsIGtleSB0byBzZWxlY3QgbXVsdGlwbGUgZWxlbWVudHMuCisvLyAqUHJlc3MgYyB0byBjb3B5IHRoZSBVTUwgZGlhZ3JhbSB0byB0aGUgc3lzdGVtIGNsaXBib2FyZC4KKy8vICogVGhpcyB0ZXh0IHdpbGwgYmUgc3RvcmVkIHdpdGggZWFjaCBkaWFncmFtLiBGZWVsIGZyZWUgdG8gdXNlIHRoZSBhcmVhIGZvciBub3Rlcy4KKzwvaGVscF90ZXh0PjxlbGVtZW50Pjx0eXBlPmNvbS51bWxldC5lbGVtZW50LmJhc2UuUmVsYXRpb248L3R5cGU+PGNvb3JkaW5hdGVzPjx4PjE3MDwveD48eT4yMzA8L3k+PHc+MjQwPC93PjxoPjQ0MDwvaD48L2Nvb3JkaW5hdGVzPjxwYW5lbF9hdHRyaWJ1dGVzPmx0PSZsdDsmbHQ7Jmx0OyZsdDstCittMj0yLi4qCityMj1vcGVyYW5kczwvcGFuZWxfYXR0cmlidXRlcz48YWRkaXRpb25hbF9hdHRyaWJ1dGVzPjE3MDs0MjA7MTcwOzM5MDsyMDszOTA7MjA7MjA7MjIwOzIwPC9hZGRpdGlvbmFsX2F0dHJpYnV0ZXM+PC9lbGVtZW50PjxlbGVtZW50Pjx0eXBlPmNvbS51bWxldC5lbGVtZW50LmJhc2UuUmVsYXRpb248L3R5cGU+PGNvb3JkaW5hdGVzPjx4PjMzMDwveD48eT41NzA8L3k+PHc+NDA8L3c+PGg+MTAwPC9oPjwvY29vcmRpbmF0ZXM+PHBhbmVsX2F0dHJpYnV0ZXM+bHQ9Jmd0OyZndDsKKzwvcGFuZWxfYXR0cmlidXRlcz48YWRkaXRpb25hbF9hdHRyaWJ1dGVzPjIwOzgwOzIwOzIwPC9hZGRpdGlvbmFsX2F0dHJpYnV0ZXM+PC9lbGVtZW50PjxlbGVtZW50Pjx0eXBlPmNvbS51bWxldC5lbGVtZW50LmJhc2UuUmVsYXRpb248L3R5cGU+PGNvb3JkaW5hdGVzPjx4PjIxMDwveD48eT41NzA8L3k+PHc+NDA8L3c+PGg+MTAwPC9oPjwvY29vcmRpbmF0ZXM+PHBhbmVsX2F0dHJpYnV0ZXM+bHQ9Jmd0OyZndDsKKzwvcGFuZWxfYXR0cmlidXRlcz48YWRkaXRpb25hbF9hdHRyaWJ1dGVzPjIwOzgwOzIwOzIwPC9hZGRpdGlvbmFsX2F0dHJpYnV0ZXM+PC9lbGVtZW50PjxlbGVtZW50Pjx0eXBlPmNvbS51bWxldC5lbGVtZW50LmJhc2UuUmVsYXRpb248L3R5cGU+PGNvb3JkaW5hdGVzPjx4Pjg2MDwveD48eT4xNTA8L3k+PHc+NDA8L3c+PGg+MjgwPC9oPjwvY29vcmRpbmF0ZXM+PHBhbmVsX2F0dHJpYnV0ZXM+bHQ9Jmd0OyZndDsKKzwvcGFuZWxfYXR0cmlidXRlcz48YWRkaXRpb25hbF9hdHRyaWJ1dGVzPjIwOzI2MDsyMDsyMDwvYWRkaXRpb25hbF9hdHRyaWJ1dGVzPjwvZWxlbWVudD48ZWxlbWVudD48dHlwZT5jb20udW1sZXQuZWxlbWVudC5iYXNlLkNsYXNzPC90eXBlPjxjb29yZGluYXRlcz48eD42NTA8L3g+PHk+MTQwPC95Pjx3PjMyMDwvdz48aD4zMDwvaD48L2Nvb3JkaW5hdGVzPjxwYW5lbF9hdHRyaWJ1dGVzPm9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb246OklkZW50aWZpYWJsZTwvcGFuZWxfYXR0cmlidXRlcz48YWRkaXRpb25hbF9hdHRyaWJ1dGVzLz48L2VsZW1lbnQ+PGVsZW1lbnQ+PHR5cGU+Y29tLnVtbGV0LmVsZW1lbnQuYmFzZS5Ob3RlPC90eXBlPjxjb29yZGluYXRlcz48eD41MjA8L3g+PHk+ODA8L3k+PHc+MjYwPC93PjxoPjMwPC9oPjwvY29vcmRpbmF0ZXM+PHBhbmVsX2F0dHJpYnV0ZXM+b3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZTwvcGFuZWxfYXR0cmlidXRlcz48YWRkaXRpb25hbF9hdHRyaWJ1dGVzLz48L2VsZW1lbnQ+PGVsZW1lbnQ+PHR5cGU+Y29tLnVtbGV0LmVsZW1lbnQuYmFzZS5SZWxhdGlvbjwvdHlwZT48Y29vcmRpbmF0ZXM+PHg+NzAwPC94Pjx5PjI2MDwveT48dz4xMDA8L3c+PGg+MTcwPC9oPjwvY29vcmRpbmF0ZXM+PHBhbmVsX2F0dHJpYnV0ZXM+bHQ9Jmd0OyZndDsKKzwvcGFuZWxfYXR0cmlidXRlcz48YWRkaXRpb25hbF9hdHRyaWJ1dGVzPjgwOzE1MDs4MDsxMDA7MjA7MTAwOzIwOzIwPC9hZGRpdGlvbmFsX2F0dHJpYnV0ZXM+PC9lbGVtZW50PjxlbGVtZW50Pjx0eXBlPmNvbS51bWxldC5lbGVtZW50LmJhc2UuQ2xhc3M8L3R5cGU+PGNvb3JkaW5hdGVzPjx4Pjc1MDwveD48eT40MTA8L3k+PHc+MjEwPC93PjxoPjYwPC9oPjwvY29vcmRpbmF0ZXM+PHBhbmVsX2F0dHJpYnV0ZXM+L0lkZW50aWZhYmxlUHJlZGljYXRlLworLS0KKyAKKy0tCisgPC9wYW5lbF9hdHRyaWJ1dGVzPjxhZGRpdGlvbmFsX2F0dHJpYnV0ZXMvPjwvZWxlbWVudD48ZWxlbWVudD48dHlwZT5jb20udW1sZXQuZWxlbWVudC5iYXNlLlJlbGF0aW9uPC90eXBlPjxjb29yZGluYXRlcz48eD45MjA8L3g+PHk+NDUwPC95Pjx3PjQwPC93PjxoPjI0MDwvaD48L2Nvb3JkaW5hdGVzPjxwYW5lbF9hdHRyaWJ1dGVzPmx0PSZndDsmZ3Q7Cis8L3BhbmVsX2F0dHJpYnV0ZXM+PGFkZGl0aW9uYWxfYXR0cmlidXRlcz4yMDsyMjA7MjA7MjA8L2FkZGl0aW9uYWxfYXR0cmlidXRlcz48L2VsZW1lbnQ+PGVsZW1lbnQ+PHR5cGU+Y29tLnVtbGV0LmVsZW1lbnQuYmFzZS5DbGFzczwvdHlwZT48Y29vcmRpbmF0ZXM+PHg+NDEwPC94Pjx5Pjc3MDwveT48dz43MDwvdz48aD43MDwvaD48L2Nvb3JkaW5hdGVzPjxwYW5lbF9hdHRyaWJ1dGVzPk9yCistLQorIAorLS0KKyAKKyAKKyA8L3BhbmVsX2F0dHJpYnV0ZXM+PGFkZGl0aW9uYWxfYXR0cmlidXRlcy8+PC9lbGVtZW50PjxlbGVtZW50Pjx0eXBlPmNvbS51bWxldC5lbGVtZW50LmJhc2UuQ2xhc3M8L3R5cGU+PGNvb3JkaW5hdGVzPjx4PjMzMDwveD48eT43NzA8L3k+PHc+NzA8L3c+PGg+NzA8L2g+PC9jb29yZGluYXRlcz48cGFuZWxfYXR0cmlidXRlcz5BbmQKKy0tCisgCistLQorIAorIAorIDwvcGFuZWxfYXR0cmlidXRlcz48YWRkaXRpb25hbF9hdHRyaWJ1dGVzLz48L2VsZW1lbnQ+PGVsZW1lbnQ+PHR5cGU+Y29tLnVtbGV0LmVsZW1lbnQuYmFzZS5SZWxhdGlvbjwvdHlwZT48Y29vcmRpbmF0ZXM+PHg+NTQwPC94Pjx5PjgzMDwveT48dz40MDwvdz48aD4xNDA8L2g+PC9jb29yZGluYXRlcz48cGFuZWxfYXR0cmlidXRlcz5sdD0mbHQ7Jmx0OyZsdDsmbHQ7LQorbTI9MQorcjI9dGltZTwvcGFuZWxfYXR0cmlidXRlcz48YWRkaXRpb25hbF9hdHRyaWJ1dGVzPjIwOzIwOzIwOzEyMDwvYWRkaXRpb25hbF9hdHRyaWJ1dGVzPjwvZWxlbWVudD48ZWxlbWVudD48dHlwZT5jb20udW1sZXQuZWxlbWVudC5iYXNlLkNsYXNzPC90eXBlPjxjb29yZGluYXRlcz48eD40NzA8L3g+PHk+OTUwPC95Pjx3PjMxMDwvdz48aD4zMDwvaD48L2Nvb3JkaW5hdGVzPjxwYW5lbF9hdHRyaWJ1dGVzPm9yZy5lY2xpcHNlLnN0ZW0ubW9kZWw6OlNURU1UaW1lPC9wYW5lbF9hdHRyaWJ1dGVzPjxhZGRpdGlvbmFsX2F0dHJpYnV0ZXMvPjwvZWxlbWVudD48ZWxlbWVudD48dHlwZT5jb20udW1sZXQuZWxlbWVudC5iYXNlLlJlbGF0aW9uPC90eXBlPjxjb29yZGluYXRlcz48eD42ODA8L3g+PHk+NzIwPC95Pjx3PjQwPC93PjxoPjgwPC9oPjwvY29vcmRpbmF0ZXM+PHBhbmVsX2F0dHJpYnV0ZXM+bHQ9Jmd0OyZndDsKKzwvcGFuZWxfYXR0cmlidXRlcz48YWRkaXRpb25hbF9hdHRyaWJ1dGVzPjIwOzYwOzIwOzIwPC9hZGRpdGlvbmFsX2F0dHJpYnV0ZXM+PC9lbGVtZW50PjxlbGVtZW50Pjx0eXBlPmNvbS51bWxldC5lbGVtZW50LmJhc2UuQ2xhc3M8L3R5cGU+PGNvb3JkaW5hdGVzPjx4PjY5MDwveD48eT43ODA8L3k+PHc+MjQwPC93PjxoPjExMDwvaD48L2Nvb3JkaW5hdGVzPjxwYW5lbF9hdHRyaWJ1dGVzPkVsYXBzZWRUaW1lVGVzdAorLS0KKyAtbnVtYmVyb2ZEYXlzOiBpbnQKKy1yZWZlcmVuY2VUaW1lVmFsaWQ6IGJvb2xlYW4KKy0tCisrZ2V0RWxhcHNlZE1pbGxpc2Vjb25kcygpOiBsb25nCisraXNSZWZlcmVuY2VUaW1lVmFsaWQoKTogYm9vbGVhbgorPC9wYW5lbF9hdHRyaWJ1dGVzPjxhZGRpdGlvbmFsX2F0dHJpYnV0ZXMvPjwvZWxlbWVudD48ZWxlbWVudD48dHlwZT5jb20udW1sZXQuZWxlbWVudC5iYXNlLlJlbGF0aW9uPC90eXBlPjxjb29yZGluYXRlcz48eD42MjA8L3g+PHk+NzIwPC95Pjx3PjQwPC93PjxoPjgwPC9oPjwvY29vcmRpbmF0ZXM+PHBhbmVsX2F0dHJpYnV0ZXM+bHQ9Jmd0OyZndDsKKzwvcGFuZWxfYXR0cmlidXRlcz48YWRkaXRpb25hbF9hdHRyaWJ1dGVzPjIwOzYwOzIwOzIwPC9hZGRpdGlvbmFsX2F0dHJpYnV0ZXM+PC9lbGVtZW50PjxlbGVtZW50Pjx0eXBlPmNvbS51bWxldC5lbGVtZW50LmJhc2UuQ2xhc3M8L3R5cGU+PGNvb3JkaW5hdGVzPjx4Pjg4MDwveD48eT42NzA8L3k+PHc+MTEwPC93PjxoPjcwPC9oPjwvY29vcmRpbmF0ZXM+PHBhbmVsX2F0dHJpYnV0ZXM+SWRlbnRpZmFibGVUZXN0CistLQorIAorLS0KKworPC9wYW5lbF9hdHRyaWJ1dGVzPjxhZGRpdGlvbmFsX2F0dHJpYnV0ZXMvPjwvZWxlbWVudD48ZWxlbWVudD48dHlwZT5jb20udW1sZXQuZWxlbWVudC5iYXNlLkNsYXNzPC90eXBlPjxjb29yZGluYXRlcz48eD42MjA8L3g+PHk+NjcwPC95Pjx3PjkwPC93PjxoPjcwPC9oPjwvY29vcmRpbmF0ZXM+PHBhbmVsX2F0dHJpYnV0ZXM+L1RpbWVUZXN0LworLS0KKyAKKy0tCisgPC9wYW5lbF9hdHRyaWJ1dGVzPjxhZGRpdGlvbmFsX2F0dHJpYnV0ZXMvPjwvZWxlbWVudD48ZWxlbWVudD48dHlwZT5jb20udW1sZXQuZWxlbWVudC5iYXNlLlJlbGF0aW9uPC90eXBlPjxjb29yZGluYXRlcz48eD42ODA8L3g+PHk+NTcwPC95Pjx3PjQwPC93PjxoPjEyMDwvaD48L2Nvb3JkaW5hdGVzPjxwYW5lbF9hdHRyaWJ1dGVzPmx0PSZndDsmZ3Q7Cis8L3BhbmVsX2F0dHJpYnV0ZXM+PGFkZGl0aW9uYWxfYXR0cmlidXRlcz4yMDsxMDA7MjA7MjA8L2FkZGl0aW9uYWxfYXR0cmlidXRlcz48L2VsZW1lbnQ+PGVsZW1lbnQ+PHR5cGU+Y29tLnVtbGV0LmVsZW1lbnQuYmFzZS5SZWxhdGlvbjwvdHlwZT48Y29vcmRpbmF0ZXM+PHg+MzAwPC94Pjx5PjQwMDwveT48dz40MDwvdz48aD4xNDA8L2g+PC9jb29yZGluYXRlcz48cGFuZWxfYXR0cmlidXRlcz5sdD0mZ3Q7Jmd0OworPC9wYW5lbF9hdHRyaWJ1dGVzPjxhZGRpdGlvbmFsX2F0dHJpYnV0ZXM+MjA7MTIwOzIwOzIwPC9hZGRpdGlvbmFsX2F0dHJpYnV0ZXM+PC9lbGVtZW50PjxlbGVtZW50Pjx0eXBlPmNvbS51bWxldC5lbGVtZW50LmJhc2UuUmVsYXRpb248L3R5cGU+PGNvb3JkaW5hdGVzPjx4PjQyMDwveD48eT40MDA8L3k+PHc+NDA8L3c+PGg+MTQwPC9oPjwvY29vcmRpbmF0ZXM+PHBhbmVsX2F0dHJpYnV0ZXM+bHQ9Jmd0OyZndDsKKzwvcGFuZWxfYXR0cmlidXRlcz48YWRkaXRpb25hbF9hdHRyaWJ1dGVzPjIwOzEyMDsyMDsyMDwvYWRkaXRpb25hbF9hdHRyaWJ1dGVzPjwvZWxlbWVudD48ZWxlbWVudD48dHlwZT5jb20udW1sZXQuZWxlbWVudC5iYXNlLlJlbGF0aW9uPC90eXBlPjxjb29yZGluYXRlcz48eD41NTA8L3g+PHk+MjYwPC95Pjx3PjYwPC93PjxoPjI4MDwvaD48L2Nvb3JkaW5hdGVzPjxwYW5lbF9hdHRyaWJ1dGVzPmx0PSZsdDsmbHQ7Jmx0Oy0KK20yPTEKK3IyPXByZWRpY2F0ZTwvcGFuZWxfYXR0cmlidXRlcz48YWRkaXRpb25hbF9hdHRyaWJ1dGVzPjMwOzI2MDszMDsyMDwvYWRkaXRpb25hbF9hdHRyaWJ1dGVzPjwvZWxlbWVudD48ZWxlbWVudD48dHlwZT5jb20udW1sZXQuZWxlbWVudC5iYXNlLlJlbGF0aW9uPC90eXBlPjxjb29yZGluYXRlcz48eD42ODA8L3g+PHk+MjYwPC95Pjx3PjQwPC93PjxoPjI4MDwvaD48L2Nvb3JkaW5hdGVzPjxwYW5lbF9hdHRyaWJ1dGVzPmx0PSZndDsmZ3Q7Cis8L3BhbmVsX2F0dHJpYnV0ZXM+PGFkZGl0aW9uYWxfYXR0cmlidXRlcz4yMDsyNjA7MjA7MjA8L2FkZGl0aW9uYWxfYXR0cmlidXRlcz48L2VsZW1lbnQ+PGVsZW1lbnQ+PHR5cGU+Y29tLnVtbGV0LmVsZW1lbnQuYmFzZS5DbGFzczwvdHlwZT48Y29vcmRpbmF0ZXM+PHg+NjkwPC94Pjx5PjUyMDwveT48dz4yMTA8L3c+PGg+NzA8L2g+PC9jb29yZGluYXRlcz48cGFuZWxfYXR0cmlidXRlcz4vVGVzdC8KKy0tCisgCistLQorIDwvcGFuZWxfYXR0cmlidXRlcz48YWRkaXRpb25hbF9hdHRyaWJ1dGVzLz48L2VsZW1lbnQ+PGVsZW1lbnQ+PHR5cGU+Y29tLnVtbGV0LmVsZW1lbnQuYmFzZS5DbGFzczwvdHlwZT48Y29vcmRpbmF0ZXM+PHg+NTMwPC94Pjx5PjUyMDwveT48dz4xNTA8L3c+PGg+NzA8L2g+PC9jb29yZGluYXRlcz48cGFuZWxfYXR0cmlidXRlcz5QcmVkaWNhdGVSZWZlcmVuY2UKKy0tCistcHJlZGljYXRlOiBQcmVkaWNhdGUKKy0tCisgPC9wYW5lbF9hdHRyaWJ1dGVzPjxhZGRpdGlvbmFsX2F0dHJpYnV0ZXMvPjwvZWxlbWVudD48ZWxlbWVudD48dHlwZT5jb20udW1sZXQuZWxlbWVudC5iYXNlLkNsYXNzPC90eXBlPjxjb29yZGluYXRlcz48eD4zNzA8L3g+PHk+NTIwPC95Pjx3PjE1MDwvdz48aD43MDwvaD48L2Nvb3JkaW5hdGVzPjxwYW5lbF9hdHRyaWJ1dGVzPlByZWRpY2F0ZUV4cHJlc3Npb24KKy0tCistcHJlZGljYXRlOiBQcmVkaWNhdGUKKy0tCisgPC9wYW5lbF9hdHRyaWJ1dGVzPjxhZGRpdGlvbmFsX2F0dHJpYnV0ZXMvPjwvZWxlbWVudD48ZWxlbWVudD48dHlwZT5jb20udW1sZXQuZWxlbWVudC5iYXNlLkNsYXNzPC90eXBlPjxjb29yZGluYXRlcz48eD4yMDA8L3g+PHk+NTIwPC95Pjx3PjE2MDwvdz48aD43MDwvaD48L2Nvb3JkaW5hdGVzPjxwYW5lbF9hdHRyaWJ1dGVzPi9Cb29sZWFuT3BlcmF0b3IvCistLQorIAorLS0KKyAKKyA8L3BhbmVsX2F0dHJpYnV0ZXM+PGFkZGl0aW9uYWxfYXR0cmlidXRlcy8+PC9lbGVtZW50PjxlbGVtZW50Pjx0eXBlPmNvbS51bWxldC5lbGVtZW50LmJhc2UuQ2xhc3M8L3R5cGU+PGNvb3JkaW5hdGVzPjx4PjMyMDwveD48eT42NTA8L3k+PHc+MTYwPC93PjxoPjcwPC9oPjwvY29vcmRpbmF0ZXM+PHBhbmVsX2F0dHJpYnV0ZXM+L05hcnlCb29sZWFuT3BlcmF0b3IvCistLQorIAorLS0KKyAKKyAKKyA8L3BhbmVsX2F0dHJpYnV0ZXM+PGFkZGl0aW9uYWxfYXR0cmlidXRlcy8+PC9lbGVtZW50PjxlbGVtZW50Pjx0eXBlPmNvbS51bWxldC5lbGVtZW50LmJhc2UuQ2xhc3M8L3R5cGU+PGNvb3JkaW5hdGVzPjx4PjcyMDwveD48eT42NzA8L3k+PHc+NzA8L3c+PGg+NzA8L2g+PC9jb29yZGluYXRlcz48cGFuZWxfYXR0cmlidXRlcz5UcnVlCistLQorIAorLS0KKyA8L3BhbmVsX2F0dHJpYnV0ZXM+PGFkZGl0aW9uYWxfYXR0cmlidXRlcy8+PC9lbGVtZW50PjxlbGVtZW50Pjx0eXBlPmNvbS51bWxldC5lbGVtZW50LmJhc2UuQ2xhc3M8L3R5cGU+PGNvb3JkaW5hdGVzPjx4PjI4MDwveD48eT4zNTA8L3k+PHc+MjEwPC93PjxoPjcwPC9oPjwvY29vcmRpbmF0ZXM+PHBhbmVsX2F0dHJpYnV0ZXM+L0Jvb2xlYW5FeHByZXNzaW9uLworLS0KKyAKKy0tCisgPC9wYW5lbF9hdHRyaWJ1dGVzPjxhZGRpdGlvbmFsX2F0dHJpYnV0ZXMvPjwvZWxlbWVudD48ZWxlbWVudD48dHlwZT5jb20udW1sZXQuZWxlbWVudC5iYXNlLlJlbGF0aW9uPC90eXBlPjxjb29yZGluYXRlcz48eD40MTA8L3g+PHk+MjYwPC95Pjx3PjQwPC93PjxoPjExMDwvaD48L2Nvb3JkaW5hdGVzPjxwYW5lbF9hdHRyaWJ1dGVzPmx0PSZndDsmZ3Q7Cis8L3BhbmVsX2F0dHJpYnV0ZXM+PGFkZGl0aW9uYWxfYXR0cmlidXRlcz4yMDs5MDsyMDsyMDwvYWRkaXRpb25hbF9hdHRyaWJ1dGVzPjwvZWxlbWVudD48ZWxlbWVudD48dHlwZT5jb20udW1sZXQuZWxlbWVudC5iYXNlLlJlbGF0aW9uPC90eXBlPjxjb29yZGluYXRlcz48eD42ODQ8L3g+PHk+ODcwPC95Pjx3PjkyPC93PjxoPjEwMDwvaD48L2Nvb3JkaW5hdGVzPjxwYW5lbF9hdHRyaWJ1dGVzPmx0PSZsdDsmbHQ7Jmx0OyZsdDstCittMj0xCityMj1yZWZlcmVuY2VUaW1lPC9wYW5lbF9hdHRyaWJ1dGVzPjxhZGRpdGlvbmFsX2F0dHJpYnV0ZXM+NDY7MjA7NDY7ODA8L2FkZGl0aW9uYWxfYXR0cmlidXRlcz48L2VsZW1lbnQ+PGVsZW1lbnQ+PHR5cGU+Y29tLnVtbGV0LmVsZW1lbnQuYmFzZS5DbGFzczwvdHlwZT48Y29vcmRpbmF0ZXM+PHg+NTEwPC94Pjx5Pjc4MDwveT48dz4xNjA8L3c+PGg+NzA8L2g+PC9jb29yZGluYXRlcz48cGFuZWxfYXR0cmlidXRlcz5BYnNvbHV0ZVRpbWVUZXN0CistLQorIAorLS0KKyArc2V0VGltZShTVEVNVGltZSk8L3BhbmVsX2F0dHJpYnV0ZXM+PGFkZGl0aW9uYWxfYXR0cmlidXRlcy8+PC9lbGVtZW50PjxlbGVtZW50Pjx0eXBlPmNvbS51bWxldC5lbGVtZW50LmJhc2UuUmVsYXRpb248L3R5cGU+PGNvb3JkaW5hdGVzPjx4Pjg3MDwveD48eT41NzA8L3k+PHc+NDA8L3c+PGg+MTIwPC9oPjwvY29vcmRpbmF0ZXM+PHBhbmVsX2F0dHJpYnV0ZXM+bHQ9Jmd0OyZndDsKKzwvcGFuZWxfYXR0cmlidXRlcz48YWRkaXRpb25hbF9hdHRyaWJ1dGVzPjIwOzEwMDsyMDsyMDwvYWRkaXRpb25hbF9hdHRyaWJ1dGVzPjwvZWxlbWVudD48ZWxlbWVudD48dHlwZT5jb20udW1sZXQuZWxlbWVudC5iYXNlLlJlbGF0aW9uPC90eXBlPjxjb29yZGluYXRlcz48eD44MTA8L3g+PHk+NTcwPC95Pjx3PjQwPC93PjxoPjEyMDwvaD48L2Nvb3JkaW5hdGVzPjxwYW5lbF9hdHRyaWJ1dGVzPmx0PSZndDsmZ3Q7Cis8L3BhbmVsX2F0dHJpYnV0ZXM+PGFkZGl0aW9uYWxfYXR0cmlidXRlcz4yMDsxMDA7MjA7MjA8L2FkZGl0aW9uYWxfYXR0cmlidXRlcz48L2VsZW1lbnQ+PGVsZW1lbnQ+PHR5cGU+Y29tLnVtbGV0LmVsZW1lbnQuYmFzZS5SZWxhdGlvbjwvdHlwZT48Y29vcmRpbmF0ZXM+PHg+NzQwPC94Pjx5PjU3MDwveT48dz40MDwvdz48aD4xMjA8L2g+PC9jb29yZGluYXRlcz48cGFuZWxfYXR0cmlidXRlcz5sdD0mZ3Q7Jmd0OworPC9wYW5lbF9hdHRyaWJ1dGVzPjxhZGRpdGlvbmFsX2F0dHJpYnV0ZXM+MjA7MTAwOzIwOzIwPC9hZGRpdGlvbmFsX2F0dHJpYnV0ZXM+PC9lbGVtZW50PjxlbGVtZW50Pjx0eXBlPmNvbS51bWxldC5lbGVtZW50LmJhc2UuQ2xhc3M8L3R5cGU+PGNvb3JkaW5hdGVzPjx4PjgwMDwveD48eT42NzA8L3k+PHc+NzA8L3c+PGg+NzA8L2g+PC9jb29yZGluYXRlcz48cGFuZWxfYXR0cmlidXRlcz5GYWxzZQorLS0KKyAKKy0tCisgPC9wYW5lbF9hdHRyaWJ1dGVzPjxhZGRpdGlvbmFsX2F0dHJpYnV0ZXMvPjwvZWxlbWVudD48ZWxlbWVudD48dHlwZT5jb20udW1sZXQuZWxlbWVudC5iYXNlLlJlbGF0aW9uPC90eXBlPjxjb29yZGluYXRlcz48eD40MjA8L3g+PHk+NzAwPC95Pjx3PjQwPC93PjxoPjkwPC9oPjwvY29vcmRpbmF0ZXM+PHBhbmVsX2F0dHJpYnV0ZXM+bHQ9Jmd0OyZndDsKKzwvcGFuZWxfYXR0cmlidXRlcz48YWRkaXRpb25hbF9hdHRyaWJ1dGVzPjIwOzcwOzIwOzIwPC9hZGRpdGlvbmFsX2F0dHJpYnV0ZXM+PC9lbGVtZW50PjxlbGVtZW50Pjx0eXBlPmNvbS51bWxldC5lbGVtZW50LmJhc2UuUmVsYXRpb248L3R5cGU+PGNvb3JkaW5hdGVzPjx4PjM0MDwveD48eT43MDA8L3k+PHc+NDA8L3c+PGg+OTA8L2g+PC9jb29yZGluYXRlcz48cGFuZWxfYXR0cmlidXRlcz5sdD0mZ3Q7Jmd0OworPC9wYW5lbF9hdHRyaWJ1dGVzPjxhZGRpdGlvbmFsX2F0dHJpYnV0ZXM+MjA7NzA7MjA7MjA8L2FkZGl0aW9uYWxfYXR0cmlidXRlcz48L2VsZW1lbnQ+PGVsZW1lbnQ+PHR5cGU+Y29tLnVtbGV0LmVsZW1lbnQuYmFzZS5SZWxhdGlvbjwvdHlwZT48Y29vcmRpbmF0ZXM+PHg+MjAwPC94Pjx5PjcwMDwveT48dz40MDwvdz48aD45MDwvaD48L2Nvb3JkaW5hdGVzPjxwYW5lbF9hdHRyaWJ1dGVzPmx0PSZndDsmZ3Q7Cis8L3BhbmVsX2F0dHJpYnV0ZXM+PGFkZGl0aW9uYWxfYXR0cmlidXRlcz4yMDs3MDsyMDsyMDwvYWRkaXRpb25hbF9hdHRyaWJ1dGVzPjwvZWxlbWVudD48ZWxlbWVudD48dHlwZT5jb20udW1sZXQuZWxlbWVudC5iYXNlLkNsYXNzPC90eXBlPjxjb29yZGluYXRlcz48eD4xOTA8L3g+PHk+NzcwPC95Pjx3PjcwPC93PjxoPjcwPC9oPjwvY29vcmRpbmF0ZXM+PHBhbmVsX2F0dHJpYnV0ZXM+Tm90CistLQorIAorLS0KKyAKKyAKKyA8L3BhbmVsX2F0dHJpYnV0ZXM+PGFkZGl0aW9uYWxfYXR0cmlidXRlcy8+PC9lbGVtZW50PjxlbGVtZW50Pjx0eXBlPmNvbS51bWxldC5lbGVtZW50LmJhc2UuUmVsYXRpb248L3R5cGU+PGNvb3JkaW5hdGVzPjx4PjE0MDwveD48eT4xOTA8L3k+PHc+MjcwPC93PjxoPjQ4MDwvaD48L2Nvb3JkaW5hdGVzPjxwYW5lbF9hdHRyaWJ1dGVzPmx0PSZsdDsmbHQ7Jmx0OyZsdDstCittMj0xCityMj1vcGVyYW5kPC9wYW5lbF9hdHRyaWJ1dGVzPjxhZGRpdGlvbmFsX2F0dHJpYnV0ZXM+MjA7NDYwOzIwOzIwOzI1MDsyMDwvYWRkaXRpb25hbF9hdHRyaWJ1dGVzPjwvZWxlbWVudD48ZWxlbWVudD48dHlwZT5jb20udW1sZXQuZWxlbWVudC5iYXNlLkNsYXNzPC90eXBlPjxjb29yZGluYXRlcz48eD4xNTA8L3g+PHk+NjUwPC95Pjx3PjE2MDwvdz48aD43MDwvaD48L2Nvb3JkaW5hdGVzPjxwYW5lbF9hdHRyaWJ1dGVzPi9VbmFyeUJvb2xlYW5PcGVyYXRvci8KKy0tCisgCistLQorIAorIAorIDwvcGFuZWxfYXR0cmlidXRlcz48YWRkaXRpb25hbF9hdHRyaWJ1dGVzLz48L2VsZW1lbnQ+PGVsZW1lbnQ+PHR5cGU+Y29tLnVtbGV0LmVsZW1lbnQuYmFzZS5DbGFzczwvdHlwZT48Y29vcmRpbmF0ZXM+PHg+MzkwPC94Pjx5PjE5MDwveT48dz4zNDA8L3c+PGg+OTA8L2g+PC9jb29yZGluYXRlcz48cGFuZWxfYXR0cmlidXRlcz4vUHJlZGljYXRlLworLS0KKyAKKy0tCisjZXZhbHV0ZShTVEVNVGltZSwgbG9uZywgRGVjb3JhdG9yKTogYm9vbGVhbgorCis8L3BhbmVsX2F0dHJpYnV0ZXM+PGFkZGl0aW9uYWxfYXR0cmlidXRlcy8+PC9lbGVtZW50PjwvdW1sZXRfZGlhZ3JhbT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9kb2N1bWVudGF0aW9uL3NjZW5hcmlvLnBkZiBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL2RvY3VtZW50YXRpb24vc2NlbmFyaW8ucGRmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE1Y2M0Y2EKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9kb2N1bWVudGF0aW9uL3NjZW5hcmlvLnBkZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9kb2N1bWVudGF0aW9uL3NjZW5hcmlvLnV4ZiBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL2RvY3VtZW50YXRpb24vc2NlbmFyaW8udXhmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkxOGY5MjcKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9kb2N1bWVudGF0aW9uL3NjZW5hcmlvLnV4ZgpAQCAtMCwwICsxLDMzIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/Pjx1bWxldF9kaWFncmFtPjxlbGVtZW50Pjx0eXBlPmNvbS51bWxldC5lbGVtZW50LmJhc2UuTm90ZTwvdHlwZT48Y29vcmRpbmF0ZXM+PHg+NDcwPC94Pjx5PjEwPC95Pjx3PjIzMDwvdz48aD4zMDwvaD48L2Nvb3JkaW5hdGVzPjxwYW5lbF9hdHRyaWJ1dGVzPm9yZy5lY2xpcHNlLnN0ZW0uc2NlbmFyaW88L3BhbmVsX2F0dHJpYnV0ZXM+PGFkZGl0aW9uYWxfYXR0cmlidXRlcy8+PC9lbGVtZW50PjxlbGVtZW50Pjx0eXBlPmNvbS51bWxldC5lbGVtZW50LmJhc2UuQ2xhc3M8L3R5cGU+PGNvb3JkaW5hdGVzPjx4PjI4MDwveD48eT42MDwveT48dz4zMTA8L3c+PGg+MzA8L2g+PC9jb29yZGluYXRlcz48cGFuZWxfYXR0cmlidXRlcz5vcmcuZWNsaXBzZS5zdGVtLmNvbW1vbi5JZGVudGlmaWFibGU8L3BhbmVsX2F0dHJpYnV0ZXM+PGFkZGl0aW9uYWxfYXR0cmlidXRlcy8+PC9lbGVtZW50PjxlbGVtZW50Pjx0eXBlPmNvbS51bWxldC5lbGVtZW50LmJhc2UuUmVsYXRpb248L3R5cGU+PGNvb3JkaW5hdGVzPjx4PjUyMDwveD48eT43MDwveT48dz40MDwvdz48aD4xOTA8L2g+PC9jb29yZGluYXRlcz48cGFuZWxfYXR0cmlidXRlcz5sdD0mbHQ7Jmx0Oy08L3BhbmVsX2F0dHJpYnV0ZXM+PGFkZGl0aW9uYWxfYXR0cmlidXRlcz4yMDsyMDsyMDsxNzA8L2FkZGl0aW9uYWxfYXR0cmlidXRlcz48L2VsZW1lbnQ+PGVsZW1lbnQ+PHR5cGU+Y29tLnVtbGV0LmVsZW1lbnQuYmFzZS5DbGFzczwvdHlwZT48Y29vcmRpbmF0ZXM+PHg+MjUwPC94Pjx5PjY2MDwveT48dz4yNTA8L3c+PGg+MzA8L2g+PC9jb29yZGluYXRlcz48cGFuZWxfYXR0cmlidXRlcz5jb20uaWJtLmFsbWFkZW4uc3RlbS5tb2RlbC5Nb2RlbAorPC9wYW5lbF9hdHRyaWJ1dGVzPjxhZGRpdGlvbmFsX2F0dHJpYnV0ZXMvPjwvZWxlbWVudD48ZWxlbWVudD48dHlwZT5jb20udW1sZXQuZWxlbWVudC5iYXNlLkNsYXNzPC90eXBlPjxjb29yZGluYXRlcz48eD45MDwveD48eT42MDA8L3k+PHc+MjUwPC93PjxoPjMwPC9oPjwvY29vcmRpbmF0ZXM+PHBhbmVsX2F0dHJpYnV0ZXM+b3JnLmVjbGlwc2Uuc3RlbS5ncmFwaC5HcmFwaAorPC9wYW5lbF9hdHRyaWJ1dGVzPjxhZGRpdGlvbmFsX2F0dHJpYnV0ZXMvPjwvZWxlbWVudD48ZWxlbWVudD48dHlwZT5jb20udW1sZXQuZWxlbWVudC5iYXNlLlJlbGF0aW9uPC90eXBlPjxjb29yZGluYXRlcz48eD4yNTA8L3g+PHk+MzQwPC95Pjx3PjEwMDwvdz48aD4yODA8L2g+PC9jb29yZGluYXRlcz48cGFuZWxfYXR0cmlidXRlcz5sdD0mbHQ7Jmx0OyZsdDsmbHQ7LQorbTI9MQorcjI9Y2Fub25pY2FsR3JhcGg8L3BhbmVsX2F0dHJpYnV0ZXM+PGFkZGl0aW9uYWxfYXR0cmlidXRlcz41MDsyMDs1MDsyNjA8L2FkZGl0aW9uYWxfYXR0cmlidXRlcz48L2VsZW1lbnQ+PGVsZW1lbnQ+PHR5cGU+Y29tLnVtbGV0LmVsZW1lbnQuYmFzZS5SZWxhdGlvbjwvdHlwZT48Y29vcmRpbmF0ZXM+PHg+MzUwPC94Pjx5PjM0MDwveT48dz40MDwvdz48aD4zNDA8L2g+PC9jb29yZGluYXRlcz48cGFuZWxfYXR0cmlidXRlcz5sdD0mbHQ7Jmx0OyZsdDsmbHQ7LQorbTI9MQorcjI9bW9kZWw8L3BhbmVsX2F0dHJpYnV0ZXM+PGFkZGl0aW9uYWxfYXR0cmlidXRlcz4yMDsyMDsyMDszMjA8L2FkZGl0aW9uYWxfYXR0cmlidXRlcz48L2VsZW1lbnQ+PGVsZW1lbnQ+PHR5cGU+Y29tLnVtbGV0LmVsZW1lbnQuYmFzZS5SZWxhdGlvbjwvdHlwZT48Y29vcmRpbmF0ZXM+PHg+MTY8L3g+PHk+MzQwPC95Pjx3PjEwOTwvdz48aD4xOTA8L2g+PC9jb29yZGluYXRlcz48cGFuZWxfYXR0cmlidXRlcz5sdD0mbHQ7Jmx0OyZsdDsmbHQ7LQorbTI9MC4uKgorcjI9bW9kZWxEZWNvcmF0b3JzPC9wYW5lbF9hdHRyaWJ1dGVzPjxhZGRpdGlvbmFsX2F0dHJpYnV0ZXM+NTQ7MjA7NTQ7MTcwPC9hZGRpdGlvbmFsX2F0dHJpYnV0ZXM+PC9lbGVtZW50PjxlbGVtZW50Pjx0eXBlPmNvbS51bWxldC5lbGVtZW50LmJhc2UuUmVsYXRpb248L3R5cGU+PGNvb3JkaW5hdGVzPjx4PjEzODwveD48eT4zNDA8L3k+PHc+MTI0PC93PjxoPjE5MDwvaD48L2Nvb3JkaW5hdGVzPjxwYW5lbF9hdHRyaWJ1dGVzPmx0PSZsdDsmbHQ7Jmx0OyZsdDstCittMj0wLi4qCityMj1zY2VuYXJpb0RlY29yYXRvcnM8L3BhbmVsX2F0dHJpYnV0ZXM+PGFkZGl0aW9uYWxfYXR0cmlidXRlcz42MjsyMDs2MjsxNzA8L2FkZGl0aW9uYWxfYXR0cmlidXRlcz48L2VsZW1lbnQ+PGVsZW1lbnQ+PHR5cGU+Y29tLnVtbGV0LmVsZW1lbnQuYmFzZS5DbGFzczwvdHlwZT48Y29vcmRpbmF0ZXM+PHg+NDA8L3g+PHk+NTEwPC95Pjx3PjI1MDwvdz48aD4zMDwvaD48L2Nvb3JkaW5hdGVzPjxwYW5lbF9hdHRyaWJ1dGVzPm9yZy5lY2xpcHNlLnN0ZW0ubW9kZWwuRGVjb3JhdG9yCis8L3BhbmVsX2F0dHJpYnV0ZXM+PGFkZGl0aW9uYWxfYXR0cmlidXRlcy8+PC9lbGVtZW50PjxlbGVtZW50Pjx0eXBlPmNvbS51bWxldC5lbGVtZW50LmJhc2UuQ2xhc3M8L3R5cGU+PGNvb3JkaW5hdGVzPjx4PjUwPC94Pjx5PjE4MDwveT48dz4zMzA8L3c+PGg+MTgwPC9oPjwvY29vcmRpbmF0ZXM+PHBhbmVsX2F0dHJpYnV0ZXM+U2NlbmFyaW8KKy0tCisgLSB0aXRsZTogU3RyaW5nCistLQorKyBpbml0aWFsaXplKCk6IHZvaWQKKysgc3RlcCgpOiB2b2lkCisrIHJlc2V0KCk6IHZvaWQKKzwvcGFuZWxfYXR0cmlidXRlcz48YWRkaXRpb25hbF9hdHRyaWJ1dGVzLz48L2VsZW1lbnQ+PGVsZW1lbnQ+PHR5cGU+Y29tLnVtbGV0LmVsZW1lbnQuYmFzZS5DbGFzczwvdHlwZT48Y29vcmRpbmF0ZXM+PHg+NDgwPC94Pjx5PjQwMDwveT48dz4yNDA8L3c+PGg+MTIwPC9oPjwvY29vcmRpbmF0ZXM+PHBhbmVsX2F0dHJpYnV0ZXM+L1NlcXVlbnRpYWxTZXF1ZW5jZXIvCistLQorIAorLS0KKytnZXRDdXJyZW50VGltZSgpOiBTVEVNVGltZQorK2dldE5leHRUaW1lKCk6IFNURU1UaW1lPC9wYW5lbF9hdHRyaWJ1dGVzPjxhZGRpdGlvbmFsX2F0dHJpYnV0ZXMvPjwvZWxlbWVudD48ZWxlbWVudD48dHlwZT5jb20udW1sZXQuZWxlbWVudC5iYXNlLlJlbGF0aW9uPC90eXBlPjxjb29yZGluYXRlcz48eD4yODA8L3g+PHk+NzA8L3k+PHc+NDA8L3c+PGg+MTMwPC9oPjwvY29vcmRpbmF0ZXM+PHBhbmVsX2F0dHJpYnV0ZXM+bHQ9Jmx0OyZsdDstPC9wYW5lbF9hdHRyaWJ1dGVzPjxhZGRpdGlvbmFsX2F0dHJpYnV0ZXM+MjA7MjA7MjA7MTEwPC9hZGRpdGlvbmFsX2F0dHJpYnV0ZXM+PC9lbGVtZW50PjxlbGVtZW50Pjx0eXBlPmNvbS51bWxldC5lbGVtZW50LmJhc2UuUmVsYXRpb248L3R5cGU+PGNvb3JkaW5hdGVzPjx4PjU4MDwveD48eT4zNDA8L3k+PHc+NDA8L3c+PGg+ODA8L2g+PC9jb29yZGluYXRlcz48cGFuZWxfYXR0cmlidXRlcz5sdD0mbHQ7Jmx0Oy08L3BhbmVsX2F0dHJpYnV0ZXM+PGFkZGl0aW9uYWxfYXR0cmlidXRlcz4yMDsyMDsyMDs2MDwvYWRkaXRpb25hbF9hdHRyaWJ1dGVzPjwvZWxlbWVudD48ZWxlbWVudD48dHlwZT5jb20udW1sZXQuZWxlbWVudC5iYXNlLkNsYXNzPC90eXBlPjxjb29yZGluYXRlcz48eD40ODA8L3g+PHk+MjQwPC95Pjx3PjI0MDwvdz48aD4xMjA8L2g+PC9jb29yZGluYXRlcz48cGFuZWxfYXR0cmlidXRlcz4mbHQ7Jmx0O0Fic3RyYWN0Jmd0OyZndDsKKy9TZXF1ZW5jZXIvCistLQorIAorLS0KKytnZXRDdXJyZW50VGltZSgpOiBTVEVNVGltZQorK2dldE5leHRUaW1lKCk6IFNURU1UaW1lPC9wYW5lbF9hdHRyaWJ1dGVzPjxhZGRpdGlvbmFsX2F0dHJpYnV0ZXMvPjwvZWxlbWVudD48ZWxlbWVudD48dHlwZT5jb20udW1sZXQuZWxlbWVudC5iYXNlLlJlbGF0aW9uPC90eXBlPjxjb29yZGluYXRlcz48eD4zNjA8L3g+PHk+MjUwPC95Pjx3PjE0MDwvdz48aD40MDwvaD48L2Nvb3JkaW5hdGVzPjxwYW5lbF9hdHRyaWJ1dGVzPmx0PSZsdDsmbHQ7Jmx0OyZsdDstCittMj0xCityMj1zZXF1ZW5jZXIKKzwvcGFuZWxfYXR0cmlidXRlcz48YWRkaXRpb25hbF9hdHRyaWJ1dGVzPjIwOzIwOzEyMDsyMDwvYWRkaXRpb25hbF9hdHRyaWJ1dGVzPjwvZWxlbWVudD48L3VtbGV0X2RpYWdyYW0+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvZG9jdW1lbnRhdGlvbi9zZXF1ZW5jZXIucGRmIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvZG9jdW1lbnRhdGlvbi9zZXF1ZW5jZXIucGRmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY0NGQyODgKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9kb2N1bWVudGF0aW9uL3NlcXVlbmNlci5wZGYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvZG9jdW1lbnRhdGlvbi9zZXF1ZW5jZXIudXhmIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvZG9jdW1lbnRhdGlvbi9zZXF1ZW5jZXIudXhmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA4NmEwZmQKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9kb2N1bWVudGF0aW9uL3NlcXVlbmNlci51eGYKQEAgLTAsMCArMSw0NiBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz48dW1sZXRfZGlhZ3JhbT48aGVscF90ZXh0Pi8vVW5jb21tZW50IHRoZSBmb2xsb3dpbmcgbGluZSB0byBjaGFuZ2UgdGhlIGZvbnRzaXplOgorLy9mb250c2l6ZT0xNAorCisvL1dlbGNvbWUgdG8gVU1MZXQhCisKKy8vICpEb3VibGUtY2xpY2sgb24gVU1MIGVsZW1lbnRzIHRvIGFkZCB0aGVtIHRvIHRoZSBkaWFncmFtLgorLy8gKkVkaXQgZWxlbWVudCBwcm9wZXJ0aWVzIGJ5IG1vZGlmeWluZyB0aGUgdGV4dCBpbiB0aGlzIHBhbmVsLgorLy8gKkVkaXQgdGhlIGZpbGVzIGluIHRoZSAncGFsZXR0ZXMnIGRpcmVjdG9yeSB0byBzdG9yZSB5b3VyIG93biBlbGVtZW50IHBhbGV0dGVzLgorLy8gKlByZXNzIERlbCBvciBCYWNrc3BhY2UgdG8gcmVtb3ZlIGVsZW1lbnRzIGZyb20gdGhlIGRpYWdyYW0uCisvLyAqSG9sZCBkb3duIEN0cmwga2V5IHRvIHNlbGVjdCBtdWx0aXBsZSBlbGVtZW50cy4KKy8vICpQcmVzcyBjIHRvIGNvcHkgdGhlIFVNTCBkaWFncmFtIHRvIHRoZSBzeXN0ZW0gY2xpcGJvYXJkLgorLy8gKiBUaGlzIHRleHQgd2lsbCBiZSBzdG9yZWQgd2l0aCBlYWNoIGRpYWdyYW0uIEZlZWwgZnJlZSB0byB1c2UgdGhlIGFyZWEgZm9yIG5vdGVzLgorPC9oZWxwX3RleHQ+PGVsZW1lbnQ+PHR5cGU+Y29tLnVtbGV0LmVsZW1lbnQuYmFzZS5DbGFzczwvdHlwZT48Y29vcmRpbmF0ZXM+PHg+NDAwPC94Pjx5PjE4MDwveT48dz4yMTA8L3c+PGg+MjQwPC9oPjwvY29vcmRpbmF0ZXM+PHBhbmVsX2F0dHJpYnV0ZXM+L1NlcXVlbmNlci8KKy0tCistIHRpbWVEZWx0YTogbG9uZworLSB3b3JrQ29tcGxldGU6IGRvdWJsZQorLSBkdXJhdGlvbjogaW50CistIGN5Y2xlOiBpbnQKKy0tCisrZ2V0TmV4dFRpbWUoKTogU1RFTVRpbWUKKytnZXRUaW1lRGVsdGEoKTogbG9uZworK2dldER1cmF0aW9uKCk6IGxvbmcKKytpc1RpbWVUb1N0b3AoKTogYm9vbGVhbgorK3Jlc2V0KCk6IHZvaWQKKytnZXRXb3JrQ29tcGxldGUoKTogZG91YmxlCisrZ2V0V29ya0luY3JlbWVudCgpOiBpbnQKKytnZXRDeWNsZSgpOiBpbnQKKyAKKyA8L3BhbmVsX2F0dHJpYnV0ZXM+PGFkZGl0aW9uYWxfYXR0cmlidXRlcy8+PC9lbGVtZW50PjxlbGVtZW50Pjx0eXBlPmNvbS51bWxldC5lbGVtZW50LmJhc2UuUmVsYXRpb248L3R5cGU+PGNvb3JkaW5hdGVzPjx4PjQ4MDwveD48eT41NDA8L3k+PHc+NDA8L3c+PGg+MTAwPC9oPjwvY29vcmRpbmF0ZXM+PHBhbmVsX2F0dHJpYnV0ZXM+bHQ9Jmx0OyZsdDstPC9wYW5lbF9hdHRyaWJ1dGVzPjxhZGRpdGlvbmFsX2F0dHJpYnV0ZXM+MjA7MjA7MjA7ODA8L2FkZGl0aW9uYWxfYXR0cmlidXRlcz48L2VsZW1lbnQ+PGVsZW1lbnQ+PHR5cGU+Y29tLnVtbGV0LmVsZW1lbnQuYmFzZS5SZWxhdGlvbjwvdHlwZT48Y29vcmRpbmF0ZXM+PHg+NDgwPC94Pjx5PjQwMDwveT48dz40MDwvdz48aD45MDwvaD48L2Nvb3JkaW5hdGVzPjxwYW5lbF9hdHRyaWJ1dGVzPmx0PSZsdDsmbHQ7LTwvcGFuZWxfYXR0cmlidXRlcz48YWRkaXRpb25hbF9hdHRyaWJ1dGVzPjIwOzIwOzIwOzcwPC9hZGRpdGlvbmFsX2F0dHJpYnV0ZXM+PC9lbGVtZW50PjxlbGVtZW50Pjx0eXBlPmNvbS51bWxldC5lbGVtZW50LmJhc2UuQ2xhc3M8L3R5cGU+PGNvb3JkaW5hdGVzPjx4PjQwMDwveD48eT42MjA8L3k+PHc+MjEwPC93PjxoPjcwPC9oPjwvY29vcmRpbmF0ZXM+PHBhbmVsX2F0dHJpYnV0ZXM+UmVhbFRpbWVTZXF1ZW5jZXIKKy0tCisgCistLQorIAorIDwvcGFuZWxfYXR0cmlidXRlcz48YWRkaXRpb25hbF9hdHRyaWJ1dGVzLz48L2VsZW1lbnQ+PGVsZW1lbnQ+PHR5cGU+Y29tLnVtbGV0LmVsZW1lbnQuYmFzZS5DbGFzczwvdHlwZT48Y29vcmRpbmF0ZXM+PHg+NDAwPC94Pjx5PjQ3MDwveT48dz4yMTA8L3c+PGg+OTA8L2g+PC9jb29yZGluYXRlcz48cGFuZWxfYXR0cmlidXRlcz5TZXF1bnRpYWxTZXF1ZW5jZXIKKy0tCistdGltZUluY3JlbWVudDogbG9uZworLS0KKytnZXRUaW1lSW5jcmVtZW50KCk6IGxvbmcKKytzZXRUaW1lSW5jcmVtZW50KGxvbmcpCis8L3BhbmVsX2F0dHJpYnV0ZXM+PGFkZGl0aW9uYWxfYXR0cmlidXRlcy8+PC9lbGVtZW50PjxlbGVtZW50Pjx0eXBlPmNvbS51bWxldC5lbGVtZW50LmJhc2UuUmVsYXRpb248L3R5cGU+PGNvb3JkaW5hdGVzPjx4PjI2MjwveD48eT4zMDA8L3k+PHc+MTU4PC93PjxoPjkwPC9oPjwvY29vcmRpbmF0ZXM+PHBhbmVsX2F0dHJpYnV0ZXM+bHQ9Jmx0OyZsdDsmbHQ7Jmx0Oy0KK20yPTEKK3IyPWN1cnJlbnRUaW1lPC9wYW5lbF9hdHRyaWJ1dGVzPjxhZGRpdGlvbmFsX2F0dHJpYnV0ZXM+MTM4OzIwOzM4OzIwOzM4OzcwPC9hZGRpdGlvbmFsX2F0dHJpYnV0ZXM+PC9lbGVtZW50PjxlbGVtZW50Pjx0eXBlPmNvbS51bWxldC5lbGVtZW50LmJhc2UuUmVsYXRpb248L3R5cGU+PGNvb3JkaW5hdGVzPjx4PjE4MjwveD48eT4yNTA8L3k+PHc+MjM4PC93PjxoPjE0MDwvaD48L2Nvb3JkaW5hdGVzPjxwYW5lbF9hdHRyaWJ1dGVzPmx0PSZsdDsmbHQ7Jmx0OyZsdDstCittMj0wLi4xCityMj1lbmRUaW1lPC9wYW5lbF9hdHRyaWJ1dGVzPjxhZGRpdGlvbmFsX2F0dHJpYnV0ZXM+MjE4OzIwOzI4OzIwOzI4OzEyMDwvYWRkaXRpb25hbF9hdHRyaWJ1dGVzPjwvZWxlbWVudD48ZWxlbWVudD48dHlwZT5jb20udW1sZXQuZWxlbWVudC5iYXNlLlJlbGF0aW9uPC90eXBlPjxjb29yZGluYXRlcz48eD43MDwveD48eT4yMDA8L3k+PHc+MzUwPC93PjxoPjE5MDwvaD48L2Nvb3JkaW5hdGVzPjxwYW5lbF9hdHRyaWJ1dGVzPmx0PSZsdDsmbHQ7Jmx0OyZsdDstCittMj0xCityMj1zdGFydFRpbWU8L3BhbmVsX2F0dHJpYnV0ZXM+PGFkZGl0aW9uYWxfYXR0cmlidXRlcz4zMzA7MjA7MzA7MjA7MzA7MTcwPC9hZGRpdGlvbmFsX2F0dHJpYnV0ZXM+PC9lbGVtZW50PjxlbGVtZW50Pjx0eXBlPmNvbS51bWxldC5lbGVtZW50LmJhc2UuQ2xhc3M8L3R5cGU+PGNvb3JkaW5hdGVzPjx4PjcwPC94Pjx5PjM3MDwveT48dz4yOTA8L3c+PGg+MzA8L2g+PC9jb29yZGluYXRlcz48cGFuZWxfYXR0cmlidXRlcz5vcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWw6OlNURU1UaW1lPC9wYW5lbF9hdHRyaWJ1dGVzPjxhZGRpdGlvbmFsX2F0dHJpYnV0ZXMvPjwvZWxlbWVudD48ZWxlbWVudD48dHlwZT5jb20udW1sZXQuZWxlbWVudC5iYXNlLk5vdGU8L3R5cGU+PGNvb3JkaW5hdGVzPjx4PjM4MDwveD48eT4xMzA8L3k+PHc+MjUwPC93PjxoPjMwPC9oPjwvY29vcmRpbmF0ZXM+PHBhbmVsX2F0dHJpYnV0ZXM+b3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNlcXVlbmNlcjwvcGFuZWxfYXR0cmlidXRlcz48YWRkaXRpb25hbF9hdHRyaWJ1dGVzLz48L2VsZW1lbnQ+PC91bWxldF9kaWFncmFtPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL2RvY3VtZW50YXRpb24vdHJpZ2dlci5wZGYgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9kb2N1bWVudGF0aW9uL3RyaWdnZXIucGRmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlkZDAzOGUKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9kb2N1bWVudGF0aW9uL3RyaWdnZXIucGRmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL2RvY3VtZW50YXRpb24vdHJpZ2dlci51eGYgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9kb2N1bWVudGF0aW9uL3RyaWdnZXIudXhmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2YmQ0OWUKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9kb2N1bWVudGF0aW9uL3RyaWdnZXIudXhmCkBAIC0wLDAgKzEsMjIgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+PHVtbGV0X2RpYWdyYW0+PGhlbHBfdGV4dD4vL1VuY29tbWVudCB0aGUgZm9sbG93aW5nIGxpbmUgdG8gY2hhbmdlIHRoZSBmb250c2l6ZToKKy8vZm9udHNpemU9MTQKKworLy9XZWxjb21lIHRvIFVNTGV0IQorCisvLyAqRG91YmxlLWNsaWNrIG9uIFVNTCBlbGVtZW50cyB0byBhZGQgdGhlbSB0byB0aGUgZGlhZ3JhbS4KKy8vICpFZGl0IGVsZW1lbnQgcHJvcGVydGllcyBieSBtb2RpZnlpbmcgdGhlIHRleHQgaW4gdGhpcyBwYW5lbC4KKy8vICpFZGl0IHRoZSBmaWxlcyBpbiB0aGUgJ3BhbGV0dGVzJyBkaXJlY3RvcnkgdG8gc3RvcmUgeW91ciBvd24gZWxlbWVudCBwYWxldHRlcy4KKy8vICpQcmVzcyBEZWwgb3IgQmFja3NwYWNlIHRvIHJlbW92ZSBlbGVtZW50cyBmcm9tIHRoZSBkaWFncmFtLgorLy8gKkhvbGQgZG93biBDdHJsIGtleSB0byBzZWxlY3QgbXVsdGlwbGUgZWxlbWVudHMuCisvLyAqUHJlc3MgYyB0byBjb3B5IHRoZSBVTUwgZGlhZ3JhbSB0byB0aGUgc3lzdGVtIGNsaXBib2FyZC4KKy8vICogVGhpcyB0ZXh0IHdpbGwgYmUgc3RvcmVkIHdpdGggZWFjaCBkaWFncmFtLiBGZWVsIGZyZWUgdG8gdXNlIHRoZSBhcmVhIGZvciBub3Rlcy4KKzwvaGVscF90ZXh0PjxlbGVtZW50Pjx0eXBlPmNvbS51bWxldC5lbGVtZW50LmJhc2UuTm90ZTwvdHlwZT48Y29vcmRpbmF0ZXM+PHg+NjgwPC94Pjx5PjMwPC95Pjx3PjIzMDwvdz48aD4zMDwvaD48L2Nvb3JkaW5hdGVzPjxwYW5lbF9hdHRyaWJ1dGVzPm9yZy5lY2xpcHNlLnN0ZW0uY29yZS50cmlnZ2VyPC9wYW5lbF9hdHRyaWJ1dGVzPjxhZGRpdGlvbmFsX2F0dHJpYnV0ZXMvPjwvZWxlbWVudD48ZWxlbWVudD48dHlwZT5jb20udW1sZXQuZWxlbWVudC5iYXNlLlJlbGF0aW9uPC90eXBlPjxjb29yZGluYXRlcz48eD41OTA8L3g+PHk+MTQwPC95Pjx3PjYwPC93PjxoPjE3MDwvaD48L2Nvb3JkaW5hdGVzPjxwYW5lbF9hdHRyaWJ1dGVzPmx0PSZsdDsmbHQ7Jmx0Oy0KK20yPTEKK3IyPXByZWRpY2F0ZTwvcGFuZWxfYXR0cmlidXRlcz48YWRkaXRpb25hbF9hdHRyaWJ1dGVzPjMwOzIwOzMwOzE1MDwvYWRkaXRpb25hbF9hdHRyaWJ1dGVzPjwvZWxlbWVudD48ZWxlbWVudD48dHlwZT5jb20udW1sZXQuZWxlbWVudC5iYXNlLlJlbGF0aW9uPC90eXBlPjxjb29yZGluYXRlcz48eD40NjA8L3g+PHk+MTQwPC95Pjx3PjQwPC93PjxoPjE3MDwvaD48L2Nvb3JkaW5hdGVzPjxwYW5lbF9hdHRyaWJ1dGVzPmx0PSZsdDsmbHQ7Jmx0Oy0KK20yPTEKK3IyPWFjdGlvbjwvcGFuZWxfYXR0cmlidXRlcz48YWRkaXRpb25hbF9hdHRyaWJ1dGVzPjIwOzIwOzIwOzE1MDwvYWRkaXRpb25hbF9hdHRyaWJ1dGVzPjwvZWxlbWVudD48ZWxlbWVudD48dHlwZT5jb20udW1sZXQuZWxlbWVudC5iYXNlLkNsYXNzPC90eXBlPjxjb29yZGluYXRlcz48eD4yMzA8L3g+PHk+MjkwPC95Pjx3PjI5MDwvdz48aD4zMDwvaD48L2Nvb3JkaW5hdGVzPjxwYW5lbF9hdHRyaWJ1dGVzPm9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbDo6RGVjb3JhdG9yPC9wYW5lbF9hdHRyaWJ1dGVzPjxhZGRpdGlvbmFsX2F0dHJpYnV0ZXMvPjwvZWxlbWVudD48ZWxlbWVudD48dHlwZT5jb20udW1sZXQuZWxlbWVudC5iYXNlLkNsYXNzPC90eXBlPjxjb29yZGluYXRlcz48eD41NTA8L3g+PHk+MjkwPC95Pjx3PjI5MDwvdz48aD4zMDwvaD48L2Nvb3JkaW5hdGVzPjxwYW5lbF9hdHRyaWJ1dGVzPm9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGU6OlByZWRpY2F0ZTwvcGFuZWxfYXR0cmlidXRlcz48YWRkaXRpb25hbF9hdHRyaWJ1dGVzLz48L2VsZW1lbnQ+PGVsZW1lbnQ+PHR5cGU+Y29tLnVtbGV0LmVsZW1lbnQuYmFzZS5DbGFzczwvdHlwZT48Y29vcmRpbmF0ZXM+PHg+NDQwPC94Pjx5PjkwPC95Pjx3PjIxMDwvdz48aD43MDwvaD48L2Nvb3JkaW5hdGVzPjxwYW5lbF9hdHRyaWJ1dGVzPlRyaWdnZXIKKy0tCisgCistLQorIAorPC9wYW5lbF9hdHRyaWJ1dGVzPjxhZGRpdGlvbmFsX2F0dHJpYnV0ZXMvPjwvZWxlbWVudD48L3VtbGV0X2RpYWdyYW0+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvZXBsLXYxMC5odG1sIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvZXBsLXYxMC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVkNGIxOTYKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9lcGwtdjEwLmh0bWwKQEAgLTAsMCArMSwzMjggQEAKKzxodG1sIHhtbG5zOm89InVybjpzY2hlbWFzLW1pY3Jvc29mdC1jb206b2ZmaWNlOm9mZmljZSIKK3htbG5zOnc9InVybjpzY2hlbWFzLW1pY3Jvc29mdC1jb206b2ZmaWNlOndvcmQiCit4bWxucz0iaHR0cDovL3d3dy53My5vcmcvVFIvUkVDLWh0bWw0MCI+CisKKzxoZWFkPgorPG1ldGEgaHR0cC1lcXVpdj1Db250ZW50LVR5cGUgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PXdpbmRvd3MtMTI1MiI+Cis8bWV0YSBuYW1lPVByb2dJZCBjb250ZW50PVdvcmQuRG9jdW1lbnQ+Cis8bWV0YSBuYW1lPUdlbmVyYXRvciBjb250ZW50PSJNaWNyb3NvZnQgV29yZCA5Ij4KKzxtZXRhIG5hbWU9T3JpZ2luYXRvciBjb250ZW50PSJNaWNyb3NvZnQgV29yZCA5Ij4KKzxsaW5rIHJlbD1GaWxlLUxpc3QKK2hyZWY9Ii4vRWNsaXBzZSUyMEVQTCUyMDIwMDNfMTFfMTAlMjBGaW5hbF9maWxlcy9maWxlbGlzdC54bWwiPgorPHRpdGxlPkVjbGlwc2UgUHVibGljIExpY2Vuc2UgLSBWZXJzaW9uIDEuMDwvdGl0bGU+Cis8IS0tW2lmIGd0ZSBtc28gOV0+PHhtbD4KKyA8bzpEb2N1bWVudFByb3BlcnRpZXM+CisgIDxvOlJldmlzaW9uPjI8L286UmV2aXNpb24+CisgIDxvOlRvdGFsVGltZT4zPC9vOlRvdGFsVGltZT4KKyAgPG86Q3JlYXRlZD4yMDA0LTAzLTA1VDIzOjAzOjAwWjwvbzpDcmVhdGVkPgorICA8bzpMYXN0U2F2ZWQ+MjAwNC0wMy0wNVQyMzowMzowMFo8L286TGFzdFNhdmVkPgorICA8bzpQYWdlcz40PC9vOlBhZ2VzPgorICA8bzpXb3Jkcz4xNjI2PC9vOldvcmRzPgorICA8bzpDaGFyYWN0ZXJzPjkyNzA8L286Q2hhcmFjdGVycz4KKyAgIDxvOkxpbmVzPjc3PC9vOkxpbmVzPgorICA8bzpQYXJhZ3JhcGhzPjE4PC9vOlBhcmFncmFwaHM+CisgIDxvOkNoYXJhY3RlcnNXaXRoU3BhY2VzPjExMzg0PC9vOkNoYXJhY3RlcnNXaXRoU3BhY2VzPgorICA8bzpWZXJzaW9uPjkuNDQwMjwvbzpWZXJzaW9uPgorIDwvbzpEb2N1bWVudFByb3BlcnRpZXM+Cis8L3htbD48IVtlbmRpZl0tLT48IS0tW2lmIGd0ZSBtc28gOV0+PHhtbD4KKyA8dzpXb3JkRG9jdW1lbnQ+CisgIDx3OlRyYWNrUmV2aXNpb25zLz4KKyA8L3c6V29yZERvY3VtZW50PgorPC94bWw+PCFbZW5kaWZdLS0+Cis8c3R5bGU+Cis8IS0tCisgLyogRm9udCBEZWZpbml0aW9ucyAqLworQGZvbnQtZmFjZQorCXtmb250LWZhbWlseTpUYWhvbWE7CisJcGFub3NlLTE6MiAxMSA2IDQgMyA1IDQgNCAyIDQ7CisJbXNvLWZvbnQtY2hhcnNldDowOworCW1zby1nZW5lcmljLWZvbnQtZmFtaWx5OnN3aXNzOworCW1zby1mb250LXBpdGNoOnZhcmlhYmxlOworCW1zby1mb250LXNpZ25hdHVyZTo1NTM2Nzk0OTUgLTIxNDc0ODM2NDggOCAwIDY2MDQ3IDA7fQorIC8qIFN0eWxlIERlZmluaXRpb25zICovCitwLk1zb05vcm1hbCwgbGkuTXNvTm9ybWFsLCBkaXYuTXNvTm9ybWFsCisJe21zby1zdHlsZS1wYXJlbnQ6IiI7CisJbWFyZ2luOjBpbjsKKwltYXJnaW4tYm90dG9tOi4wMDAxcHQ7CisJbXNvLXBhZ2luYXRpb246d2lkb3ctb3JwaGFuOworCWZvbnQtc2l6ZToxMi4wcHQ7CisJZm9udC1mYW1pbHk6IlRpbWVzIE5ldyBSb21hbiI7CisJbXNvLWZhcmVhc3QtZm9udC1mYW1pbHk6IlRpbWVzIE5ldyBSb21hbiI7fQorcAorCXttYXJnaW4tcmlnaHQ6MGluOworCW1zby1tYXJnaW4tdG9wLWFsdDphdXRvOworCW1zby1tYXJnaW4tYm90dG9tLWFsdDphdXRvOworCW1hcmdpbi1sZWZ0OjBpbjsKKwltc28tcGFnaW5hdGlvbjp3aWRvdy1vcnBoYW47CisJZm9udC1zaXplOjEyLjBwdDsKKwlmb250LWZhbWlseToiVGltZXMgTmV3IFJvbWFuIjsKKwltc28tZmFyZWFzdC1mb250LWZhbWlseToiVGltZXMgTmV3IFJvbWFuIjt9CitwLkJhbGxvb25UZXh0LCBsaS5CYWxsb29uVGV4dCwgZGl2LkJhbGxvb25UZXh0CisJe21zby1zdHlsZS1uYW1lOiJCYWxsb29uIFRleHQiOworCW1hcmdpbjowaW47CisJbWFyZ2luLWJvdHRvbTouMDAwMXB0OworCW1zby1wYWdpbmF0aW9uOndpZG93LW9ycGhhbjsKKwlmb250LXNpemU6OC4wcHQ7CisJZm9udC1mYW1pbHk6VGFob21hOworCW1zby1mYXJlYXN0LWZvbnQtZmFtaWx5OiJUaW1lcyBOZXcgUm9tYW4iO30KK0BwYWdlIFNlY3Rpb24xCisJe3NpemU6OC41aW4gMTEuMGluOworCW1hcmdpbjoxLjBpbiAxLjI1aW4gMS4waW4gMS4yNWluOworCW1zby1oZWFkZXItbWFyZ2luOi41aW47CisJbXNvLWZvb3Rlci1tYXJnaW46LjVpbjsKKwltc28tcGFwZXItc291cmNlOjA7fQorZGl2LlNlY3Rpb24xCisJe3BhZ2U6U2VjdGlvbjE7fQorLS0+Cis8L3N0eWxlPgorPC9oZWFkPgorCis8Ym9keSBsYW5nPUVOLVVTIHN0eWxlPSd0YWItaW50ZXJ2YWw6LjVpbic+CisKKzxkaXYgY2xhc3M9U2VjdGlvbjE+CisKKzxwIGFsaWduPWNlbnRlciBzdHlsZT0ndGV4dC1hbGlnbjpjZW50ZXInPjxiPkVjbGlwc2UgUHVibGljIExpY2Vuc2UgLSB2IDEuMDwvYj4KKzwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPlRIRSBBQ0NPTVBBTllJTkcgUFJPR1JBTSBJUyBQUk9WSURFRCBVTkRFUgorVEhFIFRFUk1TIE9GIFRISVMgRUNMSVBTRSBQVUJMSUMgTElDRU5TRSAoJnF1b3Q7QUdSRUVNRU5UJnF1b3Q7KS4gQU5ZIFVTRSwKK1JFUFJPRFVDVElPTiBPUiBESVNUUklCVVRJT04gT0YgVEhFIFBST0dSQU0gQ09OU1RJVFVURVMgUkVDSVBJRU5UJ1MgQUNDRVBUQU5DRQorT0YgVEhJUyBBR1JFRU1FTlQuPC9zcGFuPiA8L3A+CisKKzxwPjxiPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4xLiBERUZJTklUSU9OUzwvc3Bhbj48L2I+IDwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPiZxdW90O0NvbnRyaWJ1dGlvbiZxdW90OyBtZWFuczo8L3NwYW4+IDwvcD4KKworPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YSkKK2luIHRoZSBjYXNlIG9mIHRoZSBpbml0aWFsIENvbnRyaWJ1dG9yLCB0aGUgaW5pdGlhbCBjb2RlIGFuZCBkb2N1bWVudGF0aW9uCitkaXN0cmlidXRlZCB1bmRlciB0aGlzIEFncmVlbWVudCwgYW5kPGJyIGNsZWFyPWxlZnQ+CitiKSBpbiB0aGUgY2FzZSBvZiBlYWNoIHN1YnNlcXVlbnQgQ29udHJpYnV0b3I6PC9zcGFuPjwvcD4KKworPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+aSkKK2NoYW5nZXMgdG8gdGhlIFByb2dyYW0sIGFuZDwvc3Bhbj48L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmlpKQorYWRkaXRpb25zIHRvIHRoZSBQcm9ncmFtOzwvc3Bhbj48L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPndoZXJlCitzdWNoIGNoYW5nZXMgYW5kL29yIGFkZGl0aW9ucyB0byB0aGUgUHJvZ3JhbSBvcmlnaW5hdGUgZnJvbSBhbmQgYXJlIGRpc3RyaWJ1dGVkCitieSB0aGF0IHBhcnRpY3VsYXIgQ29udHJpYnV0b3IuIEEgQ29udHJpYnV0aW9uICdvcmlnaW5hdGVzJyBmcm9tIGEgQ29udHJpYnV0b3IKK2lmIGl0IHdhcyBhZGRlZCB0byB0aGUgUHJvZ3JhbSBieSBzdWNoIENvbnRyaWJ1dG9yIGl0c2VsZiBvciBhbnlvbmUgYWN0aW5nIG9uCitzdWNoIENvbnRyaWJ1dG9yJ3MgYmVoYWxmLiBDb250cmlidXRpb25zIGRvIG5vdCBpbmNsdWRlIGFkZGl0aW9ucyB0byB0aGUKK1Byb2dyYW0gd2hpY2g6IChpKSBhcmUgc2VwYXJhdGUgbW9kdWxlcyBvZiBzb2Z0d2FyZSBkaXN0cmlidXRlZCBpbiBjb25qdW5jdGlvbgord2l0aCB0aGUgUHJvZ3JhbSB1bmRlciB0aGVpciBvd24gbGljZW5zZSBhZ3JlZW1lbnQsIGFuZCAoaWkpIGFyZSBub3QgZGVyaXZhdGl2ZQord29ya3Mgb2YgdGhlIFByb2dyYW0uIDwvc3Bhbj48L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4mcXVvdDtDb250cmlidXRvciZxdW90OyBtZWFucyBhbnkgcGVyc29uIG9yCitlbnRpdHkgdGhhdCBkaXN0cmlidXRlcyB0aGUgUHJvZ3JhbS48L3NwYW4+IDwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPiZxdW90O0xpY2Vuc2VkIFBhdGVudHMgJnF1b3Q7IG1lYW4gcGF0ZW50CitjbGFpbXMgbGljZW5zYWJsZSBieSBhIENvbnRyaWJ1dG9yIHdoaWNoIGFyZSBuZWNlc3NhcmlseSBpbmZyaW5nZWQgYnkgdGhlIHVzZQorb3Igc2FsZSBvZiBpdHMgQ29udHJpYnV0aW9uIGFsb25lIG9yIHdoZW4gY29tYmluZWQgd2l0aCB0aGUgUHJvZ3JhbS4gPC9zcGFuPjwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPiZxdW90O1Byb2dyYW0mcXVvdDsgbWVhbnMgdGhlIENvbnRyaWJ1dGlvbnMKK2Rpc3RyaWJ1dGVkIGluIGFjY29yZGFuY2Ugd2l0aCB0aGlzIEFncmVlbWVudC48L3NwYW4+IDwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPiZxdW90O1JlY2lwaWVudCZxdW90OyBtZWFucyBhbnlvbmUgd2hvCityZWNlaXZlcyB0aGUgUHJvZ3JhbSB1bmRlciB0aGlzIEFncmVlbWVudCwgaW5jbHVkaW5nIGFsbCBDb250cmlidXRvcnMuPC9zcGFuPiA8L3A+CisKKzxwPjxiPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4yLiBHUkFOVCBPRiBSSUdIVFM8L3NwYW4+PC9iPiA8L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmEpCitTdWJqZWN0IHRvIHRoZSB0ZXJtcyBvZiB0aGlzIEFncmVlbWVudCwgZWFjaCBDb250cmlidXRvciBoZXJlYnkgZ3JhbnRzIFJlY2lwaWVudAorYSBub24tZXhjbHVzaXZlLCB3b3JsZHdpZGUsIHJveWFsdHktZnJlZSBjb3B5cmlnaHQgbGljZW5zZSB0bzxzcGFuCitzdHlsZT0nY29sb3I6cmVkJz4gPC9zcGFuPnJlcHJvZHVjZSwgcHJlcGFyZSBkZXJpdmF0aXZlIHdvcmtzIG9mLCBwdWJsaWNseQorZGlzcGxheSwgcHVibGljbHkgcGVyZm9ybSwgZGlzdHJpYnV0ZSBhbmQgc3VibGljZW5zZSB0aGUgQ29udHJpYnV0aW9uIG9mIHN1Y2gKK0NvbnRyaWJ1dG9yLCBpZiBhbnksIGFuZCBzdWNoIGRlcml2YXRpdmUgd29ya3MsIGluIHNvdXJjZSBjb2RlIGFuZCBvYmplY3QgY29kZQorZm9ybS48L3NwYW4+PC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5iKQorU3ViamVjdCB0byB0aGUgdGVybXMgb2YgdGhpcyBBZ3JlZW1lbnQsIGVhY2ggQ29udHJpYnV0b3IgaGVyZWJ5IGdyYW50cworUmVjaXBpZW50IGEgbm9uLWV4Y2x1c2l2ZSwgd29ybGR3aWRlLDxzcGFuIHN0eWxlPSdjb2xvcjpncmVlbic+IDwvc3Bhbj5yb3lhbHR5LWZyZWUKK3BhdGVudCBsaWNlbnNlIHVuZGVyIExpY2Vuc2VkIFBhdGVudHMgdG8gbWFrZSwgdXNlLCBzZWxsLCBvZmZlciB0byBzZWxsLCBpbXBvcnQKK2FuZCBvdGhlcndpc2UgdHJhbnNmZXIgdGhlIENvbnRyaWJ1dGlvbiBvZiBzdWNoIENvbnRyaWJ1dG9yLCBpZiBhbnksIGluIHNvdXJjZQorY29kZSBhbmQgb2JqZWN0IGNvZGUgZm9ybS4gVGhpcyBwYXRlbnQgbGljZW5zZSBzaGFsbCBhcHBseSB0byB0aGUgY29tYmluYXRpb24KK29mIHRoZSBDb250cmlidXRpb24gYW5kIHRoZSBQcm9ncmFtIGlmLCBhdCB0aGUgdGltZSB0aGUgQ29udHJpYnV0aW9uIGlzIGFkZGVkCitieSB0aGUgQ29udHJpYnV0b3IsIHN1Y2ggYWRkaXRpb24gb2YgdGhlIENvbnRyaWJ1dGlvbiBjYXVzZXMgc3VjaCBjb21iaW5hdGlvbgordG8gYmUgY292ZXJlZCBieSB0aGUgTGljZW5zZWQgUGF0ZW50cy4gVGhlIHBhdGVudCBsaWNlbnNlIHNoYWxsIG5vdCBhcHBseSB0bworYW55IG90aGVyIGNvbWJpbmF0aW9ucyB3aGljaCBpbmNsdWRlIHRoZSBDb250cmlidXRpb24uIE5vIGhhcmR3YXJlIHBlciBzZSBpcworbGljZW5zZWQgaGVyZXVuZGVyLiA8L3NwYW4+PC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5jKQorUmVjaXBpZW50IHVuZGVyc3RhbmRzIHRoYXQgYWx0aG91Z2ggZWFjaCBDb250cmlidXRvciBncmFudHMgdGhlIGxpY2Vuc2VzIHRvIGl0cworQ29udHJpYnV0aW9ucyBzZXQgZm9ydGggaGVyZWluLCBubyBhc3N1cmFuY2VzIGFyZSBwcm92aWRlZCBieSBhbnkgQ29udHJpYnV0b3IKK3RoYXQgdGhlIFByb2dyYW0gZG9lcyBub3QgaW5mcmluZ2UgdGhlIHBhdGVudCBvciBvdGhlciBpbnRlbGxlY3R1YWwgcHJvcGVydHkKK3JpZ2h0cyBvZiBhbnkgb3RoZXIgZW50aXR5LiBFYWNoIENvbnRyaWJ1dG9yIGRpc2NsYWltcyBhbnkgbGlhYmlsaXR5IHRvIFJlY2lwaWVudAorZm9yIGNsYWltcyBicm91Z2h0IGJ5IGFueSBvdGhlciBlbnRpdHkgYmFzZWQgb24gaW5mcmluZ2VtZW50IG9mIGludGVsbGVjdHVhbAorcHJvcGVydHkgcmlnaHRzIG9yIG90aGVyd2lzZS4gQXMgYSBjb25kaXRpb24gdG8gZXhlcmNpc2luZyB0aGUgcmlnaHRzIGFuZAorbGljZW5zZXMgZ3JhbnRlZCBoZXJldW5kZXIsIGVhY2ggUmVjaXBpZW50IGhlcmVieSBhc3N1bWVzIHNvbGUgcmVzcG9uc2liaWxpdHkKK3RvIHNlY3VyZSBhbnkgb3RoZXIgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBuZWVkZWQsIGlmIGFueS4gRm9yIGV4YW1wbGUsCitpZiBhIHRoaXJkIHBhcnR5IHBhdGVudCBsaWNlbnNlIGlzIHJlcXVpcmVkIHRvIGFsbG93IFJlY2lwaWVudCB0byBkaXN0cmlidXRlCit0aGUgUHJvZ3JhbSwgaXQgaXMgUmVjaXBpZW50J3MgcmVzcG9uc2liaWxpdHkgdG8gYWNxdWlyZSB0aGF0IGxpY2Vuc2UgYmVmb3JlCitkaXN0cmlidXRpbmcgdGhlIFByb2dyYW0uPC9zcGFuPjwvcD4KKworPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+ZCkKK0VhY2ggQ29udHJpYnV0b3IgcmVwcmVzZW50cyB0aGF0IHRvIGl0cyBrbm93bGVkZ2UgaXQgaGFzIHN1ZmZpY2llbnQgY29weXJpZ2h0CityaWdodHMgaW4gaXRzIENvbnRyaWJ1dGlvbiwgaWYgYW55LCB0byBncmFudCB0aGUgY29weXJpZ2h0IGxpY2Vuc2Ugc2V0IGZvcnRoIGluCit0aGlzIEFncmVlbWVudC4gPC9zcGFuPjwvcD4KKworPHA+PGI+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPjMuIFJFUVVJUkVNRU5UUzwvc3Bhbj48L2I+IDwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkEgQ29udHJpYnV0b3IgbWF5IGNob29zZSB0byBkaXN0cmlidXRlIHRoZQorUHJvZ3JhbSBpbiBvYmplY3QgY29kZSBmb3JtIHVuZGVyIGl0cyBvd24gbGljZW5zZSBhZ3JlZW1lbnQsIHByb3ZpZGVkIHRoYXQ6PC9zcGFuPgorPC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5hKQoraXQgY29tcGxpZXMgd2l0aCB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhpcyBBZ3JlZW1lbnQ7IGFuZDwvc3Bhbj48L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmIpCitpdHMgbGljZW5zZSBhZ3JlZW1lbnQ6PC9zcGFuPjwvcD4KKworPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+aSkKK2VmZmVjdGl2ZWx5IGRpc2NsYWltcyBvbiBiZWhhbGYgb2YgYWxsIENvbnRyaWJ1dG9ycyBhbGwgd2FycmFudGllcyBhbmQKK2NvbmRpdGlvbnMsIGV4cHJlc3MgYW5kIGltcGxpZWQsIGluY2x1ZGluZyB3YXJyYW50aWVzIG9yIGNvbmRpdGlvbnMgb2YgdGl0bGUKK2FuZCBub24taW5mcmluZ2VtZW50LCBhbmQgaW1wbGllZCB3YXJyYW50aWVzIG9yIGNvbmRpdGlvbnMgb2YgbWVyY2hhbnRhYmlsaXR5CithbmQgZml0bmVzcyBmb3IgYSBwYXJ0aWN1bGFyIHB1cnBvc2U7IDwvc3Bhbj48L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmlpKQorZWZmZWN0aXZlbHkgZXhjbHVkZXMgb24gYmVoYWxmIG9mIGFsbCBDb250cmlidXRvcnMgYWxsIGxpYWJpbGl0eSBmb3IgZGFtYWdlcywKK2luY2x1ZGluZyBkaXJlY3QsIGluZGlyZWN0LCBzcGVjaWFsLCBpbmNpZGVudGFsIGFuZCBjb25zZXF1ZW50aWFsIGRhbWFnZXMsIHN1Y2gKK2FzIGxvc3QgcHJvZml0czsgPC9zcGFuPjwvcD4KKworPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+aWlpKQorc3RhdGVzIHRoYXQgYW55IHByb3Zpc2lvbnMgd2hpY2ggZGlmZmVyIGZyb20gdGhpcyBBZ3JlZW1lbnQgYXJlIG9mZmVyZWQgYnkgdGhhdAorQ29udHJpYnV0b3IgYWxvbmUgYW5kIG5vdCBieSBhbnkgb3RoZXIgcGFydHk7IGFuZDwvc3Bhbj48L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPml2KQorc3RhdGVzIHRoYXQgc291cmNlIGNvZGUgZm9yIHRoZSBQcm9ncmFtIGlzIGF2YWlsYWJsZSBmcm9tIHN1Y2ggQ29udHJpYnV0b3IsIGFuZAoraW5mb3JtcyBsaWNlbnNlZXMgaG93IHRvIG9idGFpbiBpdCBpbiBhIHJlYXNvbmFibGUgbWFubmVyIG9uIG9yIHRocm91Z2ggYQorbWVkaXVtIGN1c3RvbWFyaWx5IHVzZWQgZm9yIHNvZnR3YXJlIGV4Y2hhbmdlLjxzcGFuIHN0eWxlPSdjb2xvcjpibHVlJz4gPC9zcGFuPjwvc3Bhbj48L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5XaGVuIHRoZSBQcm9ncmFtIGlzIG1hZGUgYXZhaWxhYmxlIGluIHNvdXJjZQorY29kZSBmb3JtOjwvc3Bhbj4gPC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5hKQoraXQgbXVzdCBiZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGlzIEFncmVlbWVudDsgYW5kIDwvc3Bhbj48L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmIpIGEKK2NvcHkgb2YgdGhpcyBBZ3JlZW1lbnQgbXVzdCBiZSBpbmNsdWRlZCB3aXRoIGVhY2ggY29weSBvZiB0aGUgUHJvZ3JhbS4gPC9zcGFuPjwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkNvbnRyaWJ1dG9ycyBtYXkgbm90IHJlbW92ZSBvciBhbHRlciBhbnkKK2NvcHlyaWdodCBub3RpY2VzIGNvbnRhaW5lZCB3aXRoaW4gdGhlIFByb2dyYW0uIDwvc3Bhbj48L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5FYWNoIENvbnRyaWJ1dG9yIG11c3QgaWRlbnRpZnkgaXRzZWxmIGFzIHRoZQorb3JpZ2luYXRvciBvZiBpdHMgQ29udHJpYnV0aW9uLCBpZiBhbnksIGluIGEgbWFubmVyIHRoYXQgcmVhc29uYWJseSBhbGxvd3MKK3N1YnNlcXVlbnQgUmVjaXBpZW50cyB0byBpZGVudGlmeSB0aGUgb3JpZ2luYXRvciBvZiB0aGUgQ29udHJpYnV0aW9uLiA8L3NwYW4+PC9wPgorCis8cD48Yj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+NC4gQ09NTUVSQ0lBTCBESVNUUklCVVRJT048L3NwYW4+PC9iPiA8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5Db21tZXJjaWFsIGRpc3RyaWJ1dG9ycyBvZiBzb2Z0d2FyZSBtYXkKK2FjY2VwdCBjZXJ0YWluIHJlc3BvbnNpYmlsaXRpZXMgd2l0aCByZXNwZWN0IHRvIGVuZCB1c2VycywgYnVzaW5lc3MgcGFydG5lcnMKK2FuZCB0aGUgbGlrZS4gV2hpbGUgdGhpcyBsaWNlbnNlIGlzIGludGVuZGVkIHRvIGZhY2lsaXRhdGUgdGhlIGNvbW1lcmNpYWwgdXNlCitvZiB0aGUgUHJvZ3JhbSwgdGhlIENvbnRyaWJ1dG9yIHdobyBpbmNsdWRlcyB0aGUgUHJvZ3JhbSBpbiBhIGNvbW1lcmNpYWwKK3Byb2R1Y3Qgb2ZmZXJpbmcgc2hvdWxkIGRvIHNvIGluIGEgbWFubmVyIHdoaWNoIGRvZXMgbm90IGNyZWF0ZSBwb3RlbnRpYWwKK2xpYWJpbGl0eSBmb3Igb3RoZXIgQ29udHJpYnV0b3JzLiBUaGVyZWZvcmUsIGlmIGEgQ29udHJpYnV0b3IgaW5jbHVkZXMgdGhlCitQcm9ncmFtIGluIGEgY29tbWVyY2lhbCBwcm9kdWN0IG9mZmVyaW5nLCBzdWNoIENvbnRyaWJ1dG9yICgmcXVvdDtDb21tZXJjaWFsCitDb250cmlidXRvciZxdW90OykgaGVyZWJ5IGFncmVlcyB0byBkZWZlbmQgYW5kIGluZGVtbmlmeSBldmVyeSBvdGhlcgorQ29udHJpYnV0b3IgKCZxdW90O0luZGVtbmlmaWVkIENvbnRyaWJ1dG9yJnF1b3Q7KSBhZ2FpbnN0IGFueSBsb3NzZXMsIGRhbWFnZXMgYW5kCitjb3N0cyAoY29sbGVjdGl2ZWx5ICZxdW90O0xvc3NlcyZxdW90OykgYXJpc2luZyBmcm9tIGNsYWltcywgbGF3c3VpdHMgYW5kIG90aGVyCitsZWdhbCBhY3Rpb25zIGJyb3VnaHQgYnkgYSB0aGlyZCBwYXJ0eSBhZ2FpbnN0IHRoZSBJbmRlbW5pZmllZCBDb250cmlidXRvciB0bwordGhlIGV4dGVudCBjYXVzZWQgYnkgdGhlIGFjdHMgb3Igb21pc3Npb25zIG9mIHN1Y2ggQ29tbWVyY2lhbCBDb250cmlidXRvciBpbgorY29ubmVjdGlvbiB3aXRoIGl0cyBkaXN0cmlidXRpb24gb2YgdGhlIFByb2dyYW0gaW4gYSBjb21tZXJjaWFsIHByb2R1Y3QKK29mZmVyaW5nLiBUaGUgb2JsaWdhdGlvbnMgaW4gdGhpcyBzZWN0aW9uIGRvIG5vdCBhcHBseSB0byBhbnkgY2xhaW1zIG9yIExvc3NlcworcmVsYXRpbmcgdG8gYW55IGFjdHVhbCBvciBhbGxlZ2VkIGludGVsbGVjdHVhbCBwcm9wZXJ0eSBpbmZyaW5nZW1lbnQuIEluIG9yZGVyCit0byBxdWFsaWZ5LCBhbiBJbmRlbW5pZmllZCBDb250cmlidXRvciBtdXN0OiBhKSBwcm9tcHRseSBub3RpZnkgdGhlIENvbW1lcmNpYWwKK0NvbnRyaWJ1dG9yIGluIHdyaXRpbmcgb2Ygc3VjaCBjbGFpbSwgYW5kIGIpIGFsbG93IHRoZSBDb21tZXJjaWFsIENvbnRyaWJ1dG9yCit0byBjb250cm9sLCBhbmQgY29vcGVyYXRlIHdpdGggdGhlIENvbW1lcmNpYWwgQ29udHJpYnV0b3IgaW4sIHRoZSBkZWZlbnNlIGFuZAorYW55IHJlbGF0ZWQgc2V0dGxlbWVudCBuZWdvdGlhdGlvbnMuIFRoZSBJbmRlbW5pZmllZCBDb250cmlidXRvciBtYXkgcGFydGljaXBhdGUKK2luIGFueSBzdWNoIGNsYWltIGF0IGl0cyBvd24gZXhwZW5zZS48L3NwYW4+IDwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkZvciBleGFtcGxlLCBhIENvbnRyaWJ1dG9yIG1pZ2h0IGluY2x1ZGUgdGhlCitQcm9ncmFtIGluIGEgY29tbWVyY2lhbCBwcm9kdWN0IG9mZmVyaW5nLCBQcm9kdWN0IFguIFRoYXQgQ29udHJpYnV0b3IgaXMgdGhlbiBhCitDb21tZXJjaWFsIENvbnRyaWJ1dG9yLiBJZiB0aGF0IENvbW1lcmNpYWwgQ29udHJpYnV0b3IgdGhlbiBtYWtlcyBwZXJmb3JtYW5jZQorY2xhaW1zLCBvciBvZmZlcnMgd2FycmFudGllcyByZWxhdGVkIHRvIFByb2R1Y3QgWCwgdGhvc2UgcGVyZm9ybWFuY2UgY2xhaW1zIGFuZAord2FycmFudGllcyBhcmUgc3VjaCBDb21tZXJjaWFsIENvbnRyaWJ1dG9yJ3MgcmVzcG9uc2liaWxpdHkgYWxvbmUuIFVuZGVyIHRoaXMKK3NlY3Rpb24sIHRoZSBDb21tZXJjaWFsIENvbnRyaWJ1dG9yIHdvdWxkIGhhdmUgdG8gZGVmZW5kIGNsYWltcyBhZ2FpbnN0IHRoZQorb3RoZXIgQ29udHJpYnV0b3JzIHJlbGF0ZWQgdG8gdGhvc2UgcGVyZm9ybWFuY2UgY2xhaW1zIGFuZCB3YXJyYW50aWVzLCBhbmQgaWYgYQorY291cnQgcmVxdWlyZXMgYW55IG90aGVyIENvbnRyaWJ1dG9yIHRvIHBheSBhbnkgZGFtYWdlcyBhcyBhIHJlc3VsdCwgdGhlCitDb21tZXJjaWFsIENvbnRyaWJ1dG9yIG11c3QgcGF5IHRob3NlIGRhbWFnZXMuPC9zcGFuPiA8L3A+CisKKzxwPjxiPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz41LiBOTyBXQVJSQU5UWTwvc3Bhbj48L2I+IDwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkVYQ0VQVCBBUyBFWFBSRVNTTFkgU0VUIEZPUlRIIElOIFRISVMKK0FHUkVFTUVOVCwgVEhFIFBST0dSQU0gSVMgUFJPVklERUQgT04gQU4gJnF1b3Q7QVMgSVMmcXVvdDsgQkFTSVMsIFdJVEhPVVQKK1dBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgRUlUSEVSIEVYUFJFU1MgT1IgSU1QTElFRCBJTkNMVURJTkcsCitXSVRIT1VUIExJTUlUQVRJT04sIEFOWSBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgVElUTEUsIE5PTi1JTkZSSU5HRU1FTlQsCitNRVJDSEFOVEFCSUxJVFkgT1IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIEVhY2ggUmVjaXBpZW50IGlzIHNvbGVseQorcmVzcG9uc2libGUgZm9yIGRldGVybWluaW5nIHRoZSBhcHByb3ByaWF0ZW5lc3Mgb2YgdXNpbmcgYW5kIGRpc3RyaWJ1dGluZyB0aGUKK1Byb2dyYW0gYW5kIGFzc3VtZXMgYWxsIHJpc2tzIGFzc29jaWF0ZWQgd2l0aCBpdHMgZXhlcmNpc2Ugb2YgcmlnaHRzIHVuZGVyIHRoaXMKK0FncmVlbWVudCAsIGluY2x1ZGluZyBidXQgbm90IGxpbWl0ZWQgdG8gdGhlIHJpc2tzIGFuZCBjb3N0cyBvZiBwcm9ncmFtIGVycm9ycywKK2NvbXBsaWFuY2Ugd2l0aCBhcHBsaWNhYmxlIGxhd3MsIGRhbWFnZSB0byBvciBsb3NzIG9mIGRhdGEsIHByb2dyYW1zIG9yCitlcXVpcG1lbnQsIGFuZCB1bmF2YWlsYWJpbGl0eSBvciBpbnRlcnJ1cHRpb24gb2Ygb3BlcmF0aW9ucy4gPC9zcGFuPjwvcD4KKworPHA+PGI+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPjYuIERJU0NMQUlNRVIgT0YgTElBQklMSVRZPC9zcGFuPjwvYj4gPC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+RVhDRVBUIEFTIEVYUFJFU1NMWSBTRVQgRk9SVEggSU4gVEhJUworQUdSRUVNRU5ULCBORUlUSEVSIFJFQ0lQSUVOVCBOT1IgQU5ZIENPTlRSSUJVVE9SUyBTSEFMTCBIQVZFIEFOWSBMSUFCSUxJVFkgRk9SCitBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyhJTkNMVURJTkcgV0lUSE9VVCBMSU1JVEFUSU9OIExPU1QgUFJPRklUUyksIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCitPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORworTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPUiBESVNUUklCVVRJT04gT0YKK1RIRSBQUk9HUkFNIE9SIFRIRSBFWEVSQ0lTRSBPRiBBTlkgUklHSFRTIEdSQU5URUQgSEVSRVVOREVSLCBFVkVOIElGIEFEVklTRUQgT0YKK1RIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRVMuPC9zcGFuPiA8L3A+CisKKzxwPjxiPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz43LiBHRU5FUkFMPC9zcGFuPjwvYj4gPC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+SWYgYW55IHByb3Zpc2lvbiBvZiB0aGlzIEFncmVlbWVudCBpcyBpbnZhbGlkCitvciB1bmVuZm9yY2VhYmxlIHVuZGVyIGFwcGxpY2FibGUgbGF3LCBpdCBzaGFsbCBub3QgYWZmZWN0IHRoZSB2YWxpZGl0eSBvcgorZW5mb3JjZWFiaWxpdHkgb2YgdGhlIHJlbWFpbmRlciBvZiB0aGUgdGVybXMgb2YgdGhpcyBBZ3JlZW1lbnQsIGFuZCB3aXRob3V0CitmdXJ0aGVyIGFjdGlvbiBieSB0aGUgcGFydGllcyBoZXJldG8sIHN1Y2ggcHJvdmlzaW9uIHNoYWxsIGJlIHJlZm9ybWVkIHRvIHRoZQorbWluaW11bSBleHRlbnQgbmVjZXNzYXJ5IHRvIG1ha2Ugc3VjaCBwcm92aXNpb24gdmFsaWQgYW5kIGVuZm9yY2VhYmxlLjwvc3Bhbj4gPC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+SWYgUmVjaXBpZW50IGluc3RpdHV0ZXMgcGF0ZW50IGxpdGlnYXRpb24KK2FnYWluc3QgYW55IGVudGl0eSAoaW5jbHVkaW5nIGEgY3Jvc3MtY2xhaW0gb3IgY291bnRlcmNsYWltIGluIGEgbGF3c3VpdCkKK2FsbGVnaW5nIHRoYXQgdGhlIFByb2dyYW0gaXRzZWxmIChleGNsdWRpbmcgY29tYmluYXRpb25zIG9mIHRoZSBQcm9ncmFtIHdpdGgKK290aGVyIHNvZnR3YXJlIG9yIGhhcmR3YXJlKSBpbmZyaW5nZXMgc3VjaCBSZWNpcGllbnQncyBwYXRlbnQocyksIHRoZW4gc3VjaAorUmVjaXBpZW50J3MgcmlnaHRzIGdyYW50ZWQgdW5kZXIgU2VjdGlvbiAyKGIpIHNoYWxsIHRlcm1pbmF0ZSBhcyBvZiB0aGUgZGF0ZQorc3VjaCBsaXRpZ2F0aW9uIGlzIGZpbGVkLiA8L3NwYW4+PC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+QWxsIFJlY2lwaWVudCdzIHJpZ2h0cyB1bmRlciB0aGlzIEFncmVlbWVudAorc2hhbGwgdGVybWluYXRlIGlmIGl0IGZhaWxzIHRvIGNvbXBseSB3aXRoIGFueSBvZiB0aGUgbWF0ZXJpYWwgdGVybXMgb3IKK2NvbmRpdGlvbnMgb2YgdGhpcyBBZ3JlZW1lbnQgYW5kIGRvZXMgbm90IGN1cmUgc3VjaCBmYWlsdXJlIGluIGEgcmVhc29uYWJsZQorcGVyaW9kIG9mIHRpbWUgYWZ0ZXIgYmVjb21pbmcgYXdhcmUgb2Ygc3VjaCBub25jb21wbGlhbmNlLiBJZiBhbGwgUmVjaXBpZW50J3MKK3JpZ2h0cyB1bmRlciB0aGlzIEFncmVlbWVudCB0ZXJtaW5hdGUsIFJlY2lwaWVudCBhZ3JlZXMgdG8gY2Vhc2UgdXNlIGFuZAorZGlzdHJpYnV0aW9uIG9mIHRoZSBQcm9ncmFtIGFzIHNvb24gYXMgcmVhc29uYWJseSBwcmFjdGljYWJsZS4gSG93ZXZlciwKK1JlY2lwaWVudCdzIG9ibGlnYXRpb25zIHVuZGVyIHRoaXMgQWdyZWVtZW50IGFuZCBhbnkgbGljZW5zZXMgZ3JhbnRlZCBieQorUmVjaXBpZW50IHJlbGF0aW5nIHRvIHRoZSBQcm9ncmFtIHNoYWxsIGNvbnRpbnVlIGFuZCBzdXJ2aXZlLiA8L3NwYW4+PC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+RXZlcnlvbmUgaXMgcGVybWl0dGVkIHRvIGNvcHkgYW5kIGRpc3RyaWJ1dGUKK2NvcGllcyBvZiB0aGlzIEFncmVlbWVudCwgYnV0IGluIG9yZGVyIHRvIGF2b2lkIGluY29uc2lzdGVuY3kgdGhlIEFncmVlbWVudCBpcworY29weXJpZ2h0ZWQgYW5kIG1heSBvbmx5IGJlIG1vZGlmaWVkIGluIHRoZSBmb2xsb3dpbmcgbWFubmVyLiBUaGUgQWdyZWVtZW50CitTdGV3YXJkIHJlc2VydmVzIHRoZSByaWdodCB0byBwdWJsaXNoIG5ldyB2ZXJzaW9ucyAoaW5jbHVkaW5nIHJldmlzaW9ucykgb2YKK3RoaXMgQWdyZWVtZW50IGZyb20gdGltZSB0byB0aW1lLiBObyBvbmUgb3RoZXIgdGhhbiB0aGUgQWdyZWVtZW50IFN0ZXdhcmQgaGFzCit0aGUgcmlnaHQgdG8gbW9kaWZ5IHRoaXMgQWdyZWVtZW50LiBUaGUgRWNsaXBzZSBGb3VuZGF0aW9uIGlzIHRoZSBpbml0aWFsCitBZ3JlZW1lbnQgU3Rld2FyZC4gVGhlIEVjbGlwc2UgRm91bmRhdGlvbiBtYXkgYXNzaWduIHRoZSByZXNwb25zaWJpbGl0eSB0bworc2VydmUgYXMgdGhlIEFncmVlbWVudCBTdGV3YXJkIHRvIGEgc3VpdGFibGUgc2VwYXJhdGUgZW50aXR5LiBFYWNoIG5ldyB2ZXJzaW9uCitvZiB0aGUgQWdyZWVtZW50IHdpbGwgYmUgZ2l2ZW4gYSBkaXN0aW5ndWlzaGluZyB2ZXJzaW9uIG51bWJlci4gVGhlIFByb2dyYW0KKyhpbmNsdWRpbmcgQ29udHJpYnV0aW9ucykgbWF5IGFsd2F5cyBiZSBkaXN0cmlidXRlZCBzdWJqZWN0IHRvIHRoZSB2ZXJzaW9uIG9mCit0aGUgQWdyZWVtZW50IHVuZGVyIHdoaWNoIGl0IHdhcyByZWNlaXZlZC4gSW4gYWRkaXRpb24sIGFmdGVyIGEgbmV3IHZlcnNpb24gb2YKK3RoZSBBZ3JlZW1lbnQgaXMgcHVibGlzaGVkLCBDb250cmlidXRvciBtYXkgZWxlY3QgdG8gZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbQorKGluY2x1ZGluZyBpdHMgQ29udHJpYnV0aW9ucykgdW5kZXIgdGhlIG5ldyB2ZXJzaW9uLiBFeGNlcHQgYXMgZXhwcmVzc2x5IHN0YXRlZAoraW4gU2VjdGlvbnMgMihhKSBhbmQgMihiKSBhYm92ZSwgUmVjaXBpZW50IHJlY2VpdmVzIG5vIHJpZ2h0cyBvciBsaWNlbnNlcyB0bwordGhlIGludGVsbGVjdHVhbCBwcm9wZXJ0eSBvZiBhbnkgQ29udHJpYnV0b3IgdW5kZXIgdGhpcyBBZ3JlZW1lbnQsIHdoZXRoZXIKK2V4cHJlc3NseSwgYnkgaW1wbGljYXRpb24sIGVzdG9wcGVsIG9yIG90aGVyd2lzZS4gQWxsIHJpZ2h0cyBpbiB0aGUgUHJvZ3JhbSBub3QKK2V4cHJlc3NseSBncmFudGVkIHVuZGVyIHRoaXMgQWdyZWVtZW50IGFyZSByZXNlcnZlZC48L3NwYW4+IDwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPlRoaXMgQWdyZWVtZW50IGlzIGdvdmVybmVkIGJ5IHRoZSBsYXdzIG9mIHRoZQorU3RhdGUgb2YgTmV3IFlvcmsgYW5kIHRoZSBpbnRlbGxlY3R1YWwgcHJvcGVydHkgbGF3cyBvZiB0aGUgVW5pdGVkIFN0YXRlcyBvZgorQW1lcmljYS4gTm8gcGFydHkgdG8gdGhpcyBBZ3JlZW1lbnQgd2lsbCBicmluZyBhIGxlZ2FsIGFjdGlvbiB1bmRlciB0aGlzCitBZ3JlZW1lbnQgbW9yZSB0aGFuIG9uZSB5ZWFyIGFmdGVyIHRoZSBjYXVzZSBvZiBhY3Rpb24gYXJvc2UuIEVhY2ggcGFydHkgd2FpdmVzCitpdHMgcmlnaHRzIHRvIGEganVyeSB0cmlhbCBpbiBhbnkgcmVzdWx0aW5nIGxpdGlnYXRpb24uPC9zcGFuPiA8L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbD48IVtpZiAhc3VwcG9ydEVtcHR5UGFyYXNdPiZuYnNwOzwhW2VuZGlmXT48bzpwPjwvbzpwPjwvcD4KKworPC9kaXY+CisKKzwvYm9keT4KKworPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL2ljb25zL2Z1bGwvY3Rvb2wxNi9DcmVhdGVEb3VibGVWYWx1ZUxpc3RfdmFsdWVzX0RvdWJsZVZhbHVlLmdpZiBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL2ljb25zL2Z1bGwvY3Rvb2wxNi9DcmVhdGVEb3VibGVWYWx1ZUxpc3RfdmFsdWVzX0RvdWJsZVZhbHVlLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMDlhYmI2Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvaWNvbnMvZnVsbC9jdG9vbDE2L0NyZWF0ZURvdWJsZVZhbHVlTGlzdF92YWx1ZXNfRG91YmxlVmFsdWUuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL2ljb25zL2Z1bGwvY3Rvb2wxNi9DcmVhdGVEb3VibGVWYWx1ZU1hdHJpeF92YWx1ZUxpc3RzX0RvdWJsZVZhbHVlTGlzdC5naWYgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9pY29ucy9mdWxsL2N0b29sMTYvQ3JlYXRlRG91YmxlVmFsdWVNYXRyaXhfdmFsdWVMaXN0c19Eb3VibGVWYWx1ZUxpc3QuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMzNDQwYmYKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9pY29ucy9mdWxsL2N0b29sMTYvQ3JlYXRlRG91YmxlVmFsdWVNYXRyaXhfdmFsdWVMaXN0c19Eb3VibGVWYWx1ZUxpc3QuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL2ljb25zL2Z1bGwvY3Rvb2wxNi9DcmVhdGVFZGdlX2xhYmVsX0R5bmFtaWNMYWJlbC5naWYgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9pY29ucy9mdWxsL2N0b29sMTYvQ3JlYXRlRWRnZV9sYWJlbF9EeW5hbWljTGFiZWwuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlmMzZiMzgKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9pY29ucy9mdWxsL2N0b29sMTYvQ3JlYXRlRWRnZV9sYWJlbF9EeW5hbWljTGFiZWwuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL2ljb25zL2Z1bGwvY3Rvb2wxNi9DcmVhdGVFZGdlX2xhYmVsX0xhYmVsLmdpZiBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL2ljb25zL2Z1bGwvY3Rvb2wxNi9DcmVhdGVFZGdlX2xhYmVsX0xhYmVsLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43Y2MxOGYxCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvaWNvbnMvZnVsbC9jdG9vbDE2L0NyZWF0ZUVkZ2VfbGFiZWxfTGFiZWwuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL2ljb25zL2Z1bGwvY3Rvb2wxNi9DcmVhdGVFeHBlcmltZW50X21vZGlmaWVyc19Nb2RpZmllci5naWYgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9pY29ucy9mdWxsL2N0b29sMTYvQ3JlYXRlRXhwZXJpbWVudF9tb2RpZmllcnNfTW9kaWZpZXIuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE5YWUxNDQKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9pY29ucy9mdWxsL2N0b29sMTYvQ3JlYXRlRXhwZXJpbWVudF9tb2RpZmllcnNfTW9kaWZpZXIuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL2ljb25zL2Z1bGwvY3Rvb2wxNi9DcmVhdGVFeHBlcmltZW50X3NjZW5hcmlvX1NjZW5hcmlvLmdpZiBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL2ljb25zL2Z1bGwvY3Rvb2wxNi9DcmVhdGVFeHBlcmltZW50X3NjZW5hcmlvX1NjZW5hcmlvLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MmJlMWE1Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvaWNvbnMvZnVsbC9jdG9vbDE2L0NyZWF0ZUV4cGVyaW1lbnRfc2NlbmFyaW9fU2NlbmFyaW8uZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL2ljb25zL2Z1bGwvY3Rvb2wxNi9DcmVhdGVHcmFwaF9kZWNvcmF0b3JzX0RlY29yYXRvci5naWYgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9pY29ucy9mdWxsL2N0b29sMTYvQ3JlYXRlR3JhcGhfZGVjb3JhdG9yc19EZWNvcmF0b3IuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg5NjZkMTEKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9pY29ucy9mdWxsL2N0b29sMTYvQ3JlYXRlR3JhcGhfZGVjb3JhdG9yc19EZWNvcmF0b3IuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL2ljb25zL2Z1bGwvY3Rvb2wxNi9DcmVhdGVHcmFwaF9kZWNvcmF0b3JzX0VkZ2VEZWNvcmF0b3IuZ2lmIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvaWNvbnMvZnVsbC9jdG9vbDE2L0NyZWF0ZUdyYXBoX2RlY29yYXRvcnNfRWRnZURlY29yYXRvci5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTU3NjcxOAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL2ljb25zL2Z1bGwvY3Rvb2wxNi9DcmVhdGVHcmFwaF9kZWNvcmF0b3JzX0VkZ2VEZWNvcmF0b3IuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL2ljb25zL2Z1bGwvY3Rvb2wxNi9DcmVhdGVHcmFwaF9kZWNvcmF0b3JzX0dyYXBoRGVjb3JhdG9yLmdpZiBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL2ljb25zL2Z1bGwvY3Rvb2wxNi9DcmVhdGVHcmFwaF9kZWNvcmF0b3JzX0dyYXBoRGVjb3JhdG9yLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NjI1YTY0Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvaWNvbnMvZnVsbC9jdG9vbDE2L0NyZWF0ZUdyYXBoX2RlY29yYXRvcnNfR3JhcGhEZWNvcmF0b3IuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL2ljb25zL2Z1bGwvY3Rvb2wxNi9DcmVhdGVHcmFwaF9kZWNvcmF0b3JzX05vZGVEZWNvcmF0b3IuZ2lmIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvaWNvbnMvZnVsbC9jdG9vbDE2L0NyZWF0ZUdyYXBoX2RlY29yYXRvcnNfTm9kZURlY29yYXRvci5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTZhZWE2NAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL2ljb25zL2Z1bGwvY3Rvb2wxNi9DcmVhdGVHcmFwaF9kZWNvcmF0b3JzX05vZGVEZWNvcmF0b3IuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL2ljb25zL2Z1bGwvY3Rvb2wxNi9DcmVhdGVHcmFwaF9lZGdlc01hcF9VUklUb0VkZ2VNYXBFbnRyeS5naWYgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9pY29ucy9mdWxsL2N0b29sMTYvQ3JlYXRlR3JhcGhfZWRnZXNNYXBfVVJJVG9FZGdlTWFwRW50cnkuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFkYzcxMTEKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9pY29ucy9mdWxsL2N0b29sMTYvQ3JlYXRlR3JhcGhfZWRnZXNNYXBfVVJJVG9FZGdlTWFwRW50cnkuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL2ljb25zL2Z1bGwvY3Rvb2wxNi9DcmVhdGVHcmFwaF9lZGdlc19VUklUb0lkZW50aWZpYWJsZU1hcEVudHJ5LmdpZiBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL2ljb25zL2Z1bGwvY3Rvb2wxNi9DcmVhdGVHcmFwaF9lZGdlc19VUklUb0lkZW50aWZpYWJsZU1hcEVudHJ5LmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MzQ3NzhmCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvaWNvbnMvZnVsbC9jdG9vbDE2L0NyZWF0ZUdyYXBoX2VkZ2VzX1VSSVRvSWRlbnRpZmlhYmxlTWFwRW50cnkuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL2ljb25zL2Z1bGwvY3Rvb2wxNi9DcmVhdGVHcmFwaF9ncmFwaExhYmVsc19VUklUb0lkZW50aWZpYWJsZU1hcEVudHJ5LmdpZiBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL2ljb25zL2Z1bGwvY3Rvb2wxNi9DcmVhdGVHcmFwaF9ncmFwaExhYmVsc19VUklUb0lkZW50aWZpYWJsZU1hcEVudHJ5LmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MzQ3NzhmCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvaWNvbnMvZnVsbC9jdG9vbDE2L0NyZWF0ZUdyYXBoX2dyYXBoTGFiZWxzX1VSSVRvSWRlbnRpZmlhYmxlTWFwRW50cnkuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL2ljb25zL2Z1bGwvY3Rvb2wxNi9DcmVhdGVHcmFwaF9ub2RlTGFiZWxzX1VSSVRvSWRlbnRpZmlhYmxlTWFwRW50cnkuZ2lmIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvaWNvbnMvZnVsbC9jdG9vbDE2L0NyZWF0ZUdyYXBoX25vZGVMYWJlbHNfVVJJVG9JZGVudGlmaWFibGVNYXBFbnRyeS5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODM0Nzc4ZgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL2ljb25zL2Z1bGwvY3Rvb2wxNi9DcmVhdGVHcmFwaF9ub2RlTGFiZWxzX1VSSVRvSWRlbnRpZmlhYmxlTWFwRW50cnkuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL2ljb25zL2Z1bGwvY3Rvb2wxNi9DcmVhdGVHcmFwaF9ub2Rlc01hcF9VUklUb05vZGVNYXBFbnRyeS5naWYgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9pY29ucy9mdWxsL2N0b29sMTYvQ3JlYXRlR3JhcGhfbm9kZXNNYXBfVVJJVG9Ob2RlTWFwRW50cnkuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFiNDAyMzYKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9pY29ucy9mdWxsL2N0b29sMTYvQ3JlYXRlR3JhcGhfbm9kZXNNYXBfVVJJVG9Ob2RlTWFwRW50cnkuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL2ljb25zL2Z1bGwvY3Rvb2wxNi9DcmVhdGVHcmFwaF9ub2Rlc19VUklUb0lkZW50aWZpYWJsZU1hcEVudHJ5LmdpZiBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL2ljb25zL2Z1bGwvY3Rvb2wxNi9DcmVhdGVHcmFwaF9ub2Rlc19VUklUb0lkZW50aWZpYWJsZU1hcEVudHJ5LmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MzQ3NzhmCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvaWNvbnMvZnVsbC9jdG9vbDE2L0NyZWF0ZUdyYXBoX25vZGVzX1VSSVRvSWRlbnRpZmlhYmxlTWFwRW50cnkuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL2ljb25zL2Z1bGwvY3Rvb2wxNi9DcmVhdGVHcmFwaF91bnJlc29sdmVkSWRlbnRpZmlhYmxlc19VbnJlc29sdmVkSWRlbnRpZmlhYmxlLmdpZiBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL2ljb25zL2Z1bGwvY3Rvb2wxNi9DcmVhdGVHcmFwaF91bnJlc29sdmVkSWRlbnRpZmlhYmxlc19VbnJlc29sdmVkSWRlbnRpZmlhYmxlLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43OTM2MTg0Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvaWNvbnMvZnVsbC9jdG9vbDE2L0NyZWF0ZUdyYXBoX3VucmVzb2x2ZWRJZGVudGlmaWFibGVzX1VucmVzb2x2ZWRJZGVudGlmaWFibGUuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL2ljb25zL2Z1bGwvY3Rvb2wxNi9DcmVhdGVJZGVudGlmaWFibGVfZHVibGluQ29yZV9EdWJsaW5Db3JlLmdpZiBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL2ljb25zL2Z1bGwvY3Rvb2wxNi9DcmVhdGVJZGVudGlmaWFibGVfZHVibGluQ29yZV9EdWJsaW5Db3JlLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMWE0NjNmCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvaWNvbnMvZnVsbC9jdG9vbDE2L0NyZWF0ZUlkZW50aWZpYWJsZV9kdWJsaW5Db3JlX0R1YmxpbkNvcmUuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL2ljb25zL2Z1bGwvY3Rvb2wxNi9DcmVhdGVNb2RlbF9lZGdlRGVjb3JhdG9yc19FZGdlRGVjb3JhdG9yLmdpZiBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL2ljb25zL2Z1bGwvY3Rvb2wxNi9DcmVhdGVNb2RlbF9lZGdlRGVjb3JhdG9yc19FZGdlRGVjb3JhdG9yLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ODc4YjdkCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvaWNvbnMvZnVsbC9jdG9vbDE2L0NyZWF0ZU1vZGVsX2VkZ2VEZWNvcmF0b3JzX0VkZ2VEZWNvcmF0b3IuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL2ljb25zL2Z1bGwvY3Rvb2wxNi9DcmVhdGVNb2RlbF9ncmFwaERlY29yYXRvcnNfR3JhcGhEZWNvcmF0b3IuZ2lmIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvaWNvbnMvZnVsbC9jdG9vbDE2L0NyZWF0ZU1vZGVsX2dyYXBoRGVjb3JhdG9yc19HcmFwaERlY29yYXRvci5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGQ3Yjk5OAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL2ljb25zL2Z1bGwvY3Rvb2wxNi9DcmVhdGVNb2RlbF9ncmFwaERlY29yYXRvcnNfR3JhcGhEZWNvcmF0b3IuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL2ljb25zL2Z1bGwvY3Rvb2wxNi9DcmVhdGVNb2RlbF9ncmFwaHNfR3JhcGguZ2lmIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvaWNvbnMvZnVsbC9jdG9vbDE2L0NyZWF0ZU1vZGVsX2dyYXBoc19HcmFwaC5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzljMTg5OQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL2ljb25zL2Z1bGwvY3Rvb2wxNi9DcmVhdGVNb2RlbF9ncmFwaHNfR3JhcGguZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL2ljb25zL2Z1bGwvY3Rvb2wxNi9DcmVhdGVNb2RlbF9tb2RlbHNfTW9kZWwuZ2lmIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvaWNvbnMvZnVsbC9jdG9vbDE2L0NyZWF0ZU1vZGVsX21vZGVsc19Nb2RlbC5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmMzMzlhNQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL2ljb25zL2Z1bGwvY3Rvb2wxNi9DcmVhdGVNb2RlbF9tb2RlbHNfTW9kZWwuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL2ljb25zL2Z1bGwvY3Rvb2wxNi9DcmVhdGVNb2RlbF9ub2RlRGVjb3JhdG9yc19Ob2RlRGVjb3JhdG9yLmdpZiBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL2ljb25zL2Z1bGwvY3Rvb2wxNi9DcmVhdGVNb2RlbF9ub2RlRGVjb3JhdG9yc19Ob2RlRGVjb3JhdG9yLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kN2M3MzhlCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvaWNvbnMvZnVsbC9jdG9vbDE2L0NyZWF0ZU1vZGVsX25vZGVEZWNvcmF0b3JzX05vZGVEZWNvcmF0b3IuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL2ljb25zL2Z1bGwvY3Rvb2wxNi9DcmVhdGVNb2RpZmllcl9mZWF0dXJlTW9kaWZpZXJzX0Jvb2xlYW5TZXF1ZW5jZU1vZGlmaWVyLmdpZiBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL2ljb25zL2Z1bGwvY3Rvb2wxNi9DcmVhdGVNb2RpZmllcl9mZWF0dXJlTW9kaWZpZXJzX0Jvb2xlYW5TZXF1ZW5jZU1vZGlmaWVyLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYjVlNzQ5Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvaWNvbnMvZnVsbC9jdG9vbDE2L0NyZWF0ZU1vZGlmaWVyX2ZlYXR1cmVNb2RpZmllcnNfQm9vbGVhblNlcXVlbmNlTW9kaWZpZXIuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL2ljb25zL2Z1bGwvY3Rvb2wxNi9DcmVhdGVNb2RpZmllcl9mZWF0dXJlTW9kaWZpZXJzX0RvdWJsZU5PUE1vZGlmaWVyLmdpZiBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL2ljb25zL2Z1bGwvY3Rvb2wxNi9DcmVhdGVNb2RpZmllcl9mZWF0dXJlTW9kaWZpZXJzX0RvdWJsZU5PUE1vZGlmaWVyLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40Njk5ZTk0Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvaWNvbnMvZnVsbC9jdG9vbDE2L0NyZWF0ZU1vZGlmaWVyX2ZlYXR1cmVNb2RpZmllcnNfRG91YmxlTk9QTW9kaWZpZXIuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL2ljb25zL2Z1bGwvY3Rvb2wxNi9DcmVhdGVNb2RpZmllcl9mZWF0dXJlTW9kaWZpZXJzX0RvdWJsZVJhbmdlTW9kaWZpZXIuZ2lmIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvaWNvbnMvZnVsbC9jdG9vbDE2L0NyZWF0ZU1vZGlmaWVyX2ZlYXR1cmVNb2RpZmllcnNfRG91YmxlUmFuZ2VNb2RpZmllci5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2I1ZTc0OQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL2ljb25zL2Z1bGwvY3Rvb2wxNi9DcmVhdGVNb2RpZmllcl9mZWF0dXJlTW9kaWZpZXJzX0RvdWJsZVJhbmdlTW9kaWZpZXIuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL2ljb25zL2Z1bGwvY3Rvb2wxNi9DcmVhdGVNb2RpZmllcl9mZWF0dXJlTW9kaWZpZXJzX0RvdWJsZVNlcXVlbmNlTW9kaWZpZXIuZ2lmIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvaWNvbnMvZnVsbC9jdG9vbDE2L0NyZWF0ZU1vZGlmaWVyX2ZlYXR1cmVNb2RpZmllcnNfRG91YmxlU2VxdWVuY2VNb2RpZmllci5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTE2MTliYwotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL2ljb25zL2Z1bGwvY3Rvb2wxNi9DcmVhdGVNb2RpZmllcl9mZWF0dXJlTW9kaWZpZXJzX0RvdWJsZVNlcXVlbmNlTW9kaWZpZXIuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL2ljb25zL2Z1bGwvY3Rvb2wxNi9DcmVhdGVNb2RpZmllcl9mZWF0dXJlTW9kaWZpZXJzX0ludGVnZXJOT1BNb2RpZmllci5naWYgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9pY29ucy9mdWxsL2N0b29sMTYvQ3JlYXRlTW9kaWZpZXJfZmVhdHVyZU1vZGlmaWVyc19JbnRlZ2VyTk9QTW9kaWZpZXIuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZjMWEyZTgKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9pY29ucy9mdWxsL2N0b29sMTYvQ3JlYXRlTW9kaWZpZXJfZmVhdHVyZU1vZGlmaWVyc19JbnRlZ2VyTk9QTW9kaWZpZXIuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL2ljb25zL2Z1bGwvY3Rvb2wxNi9DcmVhdGVNb2RpZmllcl9mZWF0dXJlTW9kaWZpZXJzX0ludGVnZXJSYW5nZU1vZGlmaWVyLmdpZiBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL2ljb25zL2Z1bGwvY3Rvb2wxNi9DcmVhdGVNb2RpZmllcl9mZWF0dXJlTW9kaWZpZXJzX0ludGVnZXJSYW5nZU1vZGlmaWVyLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZGRhYjU4Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvaWNvbnMvZnVsbC9jdG9vbDE2L0NyZWF0ZU1vZGlmaWVyX2ZlYXR1cmVNb2RpZmllcnNfSW50ZWdlclJhbmdlTW9kaWZpZXIuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL2ljb25zL2Z1bGwvY3Rvb2wxNi9DcmVhdGVNb2RpZmllcl9mZWF0dXJlTW9kaWZpZXJzX0ludGVnZXJTZXF1ZW5jZU1vZGlmaWVyLmdpZiBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL2ljb25zL2Z1bGwvY3Rvb2wxNi9DcmVhdGVNb2RpZmllcl9mZWF0dXJlTW9kaWZpZXJzX0ludGVnZXJTZXF1ZW5jZU1vZGlmaWVyLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zOTJkMGQxCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvaWNvbnMvZnVsbC9jdG9vbDE2L0NyZWF0ZU1vZGlmaWVyX2ZlYXR1cmVNb2RpZmllcnNfSW50ZWdlclNlcXVlbmNlTW9kaWZpZXIuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL2ljb25zL2Z1bGwvY3Rvb2wxNi9DcmVhdGVNb2RpZmllcl9mZWF0dXJlTW9kaWZpZXJzX0xvbmdOT1BNb2RpZmllci5naWYgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9pY29ucy9mdWxsL2N0b29sMTYvQ3JlYXRlTW9kaWZpZXJfZmVhdHVyZU1vZGlmaWVyc19Mb25nTk9QTW9kaWZpZXIuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJhM2JjYjMKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9pY29ucy9mdWxsL2N0b29sMTYvQ3JlYXRlTW9kaWZpZXJfZmVhdHVyZU1vZGlmaWVyc19Mb25nTk9QTW9kaWZpZXIuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL2ljb25zL2Z1bGwvY3Rvb2wxNi9DcmVhdGVNb2RpZmllcl9mZWF0dXJlTW9kaWZpZXJzX0xvbmdSYW5nZU1vZGlmaWVyLmdpZiBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL2ljb25zL2Z1bGwvY3Rvb2wxNi9DcmVhdGVNb2RpZmllcl9mZWF0dXJlTW9kaWZpZXJzX0xvbmdSYW5nZU1vZGlmaWVyLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NDVkZTBmCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvaWNvbnMvZnVsbC9jdG9vbDE2L0NyZWF0ZU1vZGlmaWVyX2ZlYXR1cmVNb2RpZmllcnNfTG9uZ1JhbmdlTW9kaWZpZXIuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL2ljb25zL2Z1bGwvY3Rvb2wxNi9DcmVhdGVNb2RpZmllcl9mZWF0dXJlTW9kaWZpZXJzX0xvbmdTZXF1ZW5jZU1vZGlmaWVyLmdpZiBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL2ljb25zL2Z1bGwvY3Rvb2wxNi9DcmVhdGVNb2RpZmllcl9mZWF0dXJlTW9kaWZpZXJzX0xvbmdTZXF1ZW5jZU1vZGlmaWVyLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42Y2IzYTI3Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvaWNvbnMvZnVsbC9jdG9vbDE2L0NyZWF0ZU1vZGlmaWVyX2ZlYXR1cmVNb2RpZmllcnNfTG9uZ1NlcXVlbmNlTW9kaWZpZXIuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL2ljb25zL2Z1bGwvY3Rvb2wxNi9DcmVhdGVNb2RpZmllcl9mZWF0dXJlTW9kaWZpZXJzX05PUE1vZGlmaWVyLmdpZiBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL2ljb25zL2Z1bGwvY3Rvb2wxNi9DcmVhdGVNb2RpZmllcl9mZWF0dXJlTW9kaWZpZXJzX05PUE1vZGlmaWVyLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZTFiZjZkCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvaWNvbnMvZnVsbC9jdG9vbDE2L0NyZWF0ZU1vZGlmaWVyX2ZlYXR1cmVNb2RpZmllcnNfTk9QTW9kaWZpZXIuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL2ljb25zL2Z1bGwvY3Rvb2wxNi9DcmVhdGVNb2RpZmllcl9mZWF0dXJlTW9kaWZpZXJzX1NURU1UaW1lTk9QTW9kaWZpZXIuZ2lmIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvaWNvbnMvZnVsbC9jdG9vbDE2L0NyZWF0ZU1vZGlmaWVyX2ZlYXR1cmVNb2RpZmllcnNfU1RFTVRpbWVOT1BNb2RpZmllci5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmNiM2EyNwotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL2ljb25zL2Z1bGwvY3Rvb2wxNi9DcmVhdGVNb2RpZmllcl9mZWF0dXJlTW9kaWZpZXJzX1NURU1UaW1lTk9QTW9kaWZpZXIuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL2ljb25zL2Z1bGwvY3Rvb2wxNi9DcmVhdGVNb2RpZmllcl9mZWF0dXJlTW9kaWZpZXJzX1NURU1UaW1lUmFuZ2VNb2RpZmllci5naWYgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9pY29ucy9mdWxsL2N0b29sMTYvQ3JlYXRlTW9kaWZpZXJfZmVhdHVyZU1vZGlmaWVyc19TVEVNVGltZVJhbmdlTW9kaWZpZXIuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI2MWUwNWMKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9pY29ucy9mdWxsL2N0b29sMTYvQ3JlYXRlTW9kaWZpZXJfZmVhdHVyZU1vZGlmaWVyc19TVEVNVGltZVJhbmdlTW9kaWZpZXIuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL2ljb25zL2Z1bGwvY3Rvb2wxNi9DcmVhdGVNb2RpZmllcl9mZWF0dXJlTW9kaWZpZXJzX1NURU1UaW1lU2VxdWVuY2VNb2RpZmllci5naWYgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9pY29ucy9mdWxsL2N0b29sMTYvQ3JlYXRlTW9kaWZpZXJfZmVhdHVyZU1vZGlmaWVyc19TVEVNVGltZVNlcXVlbmNlTW9kaWZpZXIuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJmNzU0MDcKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9pY29ucy9mdWxsL2N0b29sMTYvQ3JlYXRlTW9kaWZpZXJfZmVhdHVyZU1vZGlmaWVyc19TVEVNVGltZVNlcXVlbmNlTW9kaWZpZXIuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL2ljb25zL2Z1bGwvY3Rvb2wxNi9DcmVhdGVNb2RpZmllcl9mZWF0dXJlTW9kaWZpZXJzX1NlcXVlbmNlTW9kaWZpZXIuZ2lmIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvaWNvbnMvZnVsbC9jdG9vbDE2L0NyZWF0ZU1vZGlmaWVyX2ZlYXR1cmVNb2RpZmllcnNfU2VxdWVuY2VNb2RpZmllci5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTVlZTYwYgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL2ljb25zL2Z1bGwvY3Rvb2wxNi9DcmVhdGVNb2RpZmllcl9mZWF0dXJlTW9kaWZpZXJzX1NlcXVlbmNlTW9kaWZpZXIuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL2ljb25zL2Z1bGwvY3Rvb2wxNi9DcmVhdGVNb2RpZmllcl9mZWF0dXJlTW9kaWZpZXJzX1N0cmluZ05PUE1vZGlmaWVyLmdpZiBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL2ljb25zL2Z1bGwvY3Rvb2wxNi9DcmVhdGVNb2RpZmllcl9mZWF0dXJlTW9kaWZpZXJzX1N0cmluZ05PUE1vZGlmaWVyLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNWJmMmVkCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvaWNvbnMvZnVsbC9jdG9vbDE2L0NyZWF0ZU1vZGlmaWVyX2ZlYXR1cmVNb2RpZmllcnNfU3RyaW5nTk9QTW9kaWZpZXIuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL2ljb25zL2Z1bGwvY3Rvb2wxNi9DcmVhdGVNb2RpZmllcl9mZWF0dXJlTW9kaWZpZXJzX1N0cmluZ1NlcXVlbmNlTW9kaWZpZXIuZ2lmIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvaWNvbnMvZnVsbC9jdG9vbDE2L0NyZWF0ZU1vZGlmaWVyX2ZlYXR1cmVNb2RpZmllcnNfU3RyaW5nU2VxdWVuY2VNb2RpZmllci5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODVlNzkwNgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL2ljb25zL2Z1bGwvY3Rvb2wxNi9DcmVhdGVNb2RpZmllcl9mZWF0dXJlTW9kaWZpZXJzX1N0cmluZ1NlcXVlbmNlTW9kaWZpZXIuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL2ljb25zL2Z1bGwvY3Rvb2wxNi9DcmVhdGVOYXJ5Qm9vbGVhbk9wZXJhdG9yX29wZXJhbmRzX0Fic29sdXRlVGltZVRlc3QuZ2lmIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvaWNvbnMvZnVsbC9jdG9vbDE2L0NyZWF0ZU5hcnlCb29sZWFuT3BlcmF0b3Jfb3BlcmFuZHNfQWJzb2x1dGVUaW1lVGVzdC5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGQ5Y2JlOQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL2ljb25zL2Z1bGwvY3Rvb2wxNi9DcmVhdGVOYXJ5Qm9vbGVhbk9wZXJhdG9yX29wZXJhbmRzX0Fic29sdXRlVGltZVRlc3QuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL2ljb25zL2Z1bGwvY3Rvb2wxNi9DcmVhdGVOYXJ5Qm9vbGVhbk9wZXJhdG9yX29wZXJhbmRzX0FuZC5naWYgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9pY29ucy9mdWxsL2N0b29sMTYvQ3JlYXRlTmFyeUJvb2xlYW5PcGVyYXRvcl9vcGVyYW5kc19BbmQuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIzZmRiZWEKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9pY29ucy9mdWxsL2N0b29sMTYvQ3JlYXRlTmFyeUJvb2xlYW5PcGVyYXRvcl9vcGVyYW5kc19BbmQuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL2ljb25zL2Z1bGwvY3Rvb2wxNi9DcmVhdGVOYXJ5Qm9vbGVhbk9wZXJhdG9yX29wZXJhbmRzX0VsYXBzZWRUaW1lVGVzdC5naWYgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9pY29ucy9mdWxsL2N0b29sMTYvQ3JlYXRlTmFyeUJvb2xlYW5PcGVyYXRvcl9vcGVyYW5kc19FbGFwc2VkVGltZVRlc3QuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU5NmMyN2YKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9pY29ucy9mdWxsL2N0b29sMTYvQ3JlYXRlTmFyeUJvb2xlYW5PcGVyYXRvcl9vcGVyYW5kc19FbGFwc2VkVGltZVRlc3QuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL2ljb25zL2Z1bGwvY3Rvb2wxNi9DcmVhdGVOYXJ5Qm9vbGVhbk9wZXJhdG9yX29wZXJhbmRzX0ZhbHNlLmdpZiBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL2ljb25zL2Z1bGwvY3Rvb2wxNi9DcmVhdGVOYXJ5Qm9vbGVhbk9wZXJhdG9yX29wZXJhbmRzX0ZhbHNlLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YTVkZmQ0Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvaWNvbnMvZnVsbC9jdG9vbDE2L0NyZWF0ZU5hcnlCb29sZWFuT3BlcmF0b3Jfb3BlcmFuZHNfRmFsc2UuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL2ljb25zL2Z1bGwvY3Rvb2wxNi9DcmVhdGVOYXJ5Qm9vbGVhbk9wZXJhdG9yX29wZXJhbmRzX0lkZW50aWZpYWJsZVByZWRpY2F0ZUV4cHJlc3Npb24uZ2lmIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvaWNvbnMvZnVsbC9jdG9vbDE2L0NyZWF0ZU5hcnlCb29sZWFuT3BlcmF0b3Jfb3BlcmFuZHNfSWRlbnRpZmlhYmxlUHJlZGljYXRlRXhwcmVzc2lvbi5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDVhMTQ3NAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL2ljb25zL2Z1bGwvY3Rvb2wxNi9DcmVhdGVOYXJ5Qm9vbGVhbk9wZXJhdG9yX29wZXJhbmRzX0lkZW50aWZpYWJsZVByZWRpY2F0ZUV4cHJlc3Npb24uZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL2ljb25zL2Z1bGwvY3Rvb2wxNi9DcmVhdGVOYXJ5Qm9vbGVhbk9wZXJhdG9yX29wZXJhbmRzX05vdC5naWYgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9pY29ucy9mdWxsL2N0b29sMTYvQ3JlYXRlTmFyeUJvb2xlYW5PcGVyYXRvcl9vcGVyYW5kc19Ob3QuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZhNWRmZDQKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9pY29ucy9mdWxsL2N0b29sMTYvQ3JlYXRlTmFyeUJvb2xlYW5PcGVyYXRvcl9vcGVyYW5kc19Ob3QuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL2ljb25zL2Z1bGwvY3Rvb2wxNi9DcmVhdGVOYXJ5Qm9vbGVhbk9wZXJhdG9yX29wZXJhbmRzX09yLmdpZiBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL2ljb25zL2Z1bGwvY3Rvb2wxNi9DcmVhdGVOYXJ5Qm9vbGVhbk9wZXJhdG9yX29wZXJhbmRzX09yLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZGUyMjQ0Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvaWNvbnMvZnVsbC9jdG9vbDE2L0NyZWF0ZU5hcnlCb29sZWFuT3BlcmF0b3Jfb3BlcmFuZHNfT3IuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL2ljb25zL2Z1bGwvY3Rvb2wxNi9DcmVhdGVOYXJ5Qm9vbGVhbk9wZXJhdG9yX29wZXJhbmRzX1ByZWRpY2F0ZUV4cHJlc3Npb24uZ2lmIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvaWNvbnMvZnVsbC9jdG9vbDE2L0NyZWF0ZU5hcnlCb29sZWFuT3BlcmF0b3Jfb3BlcmFuZHNfUHJlZGljYXRlRXhwcmVzc2lvbi5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDU0MjExYgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL2ljb25zL2Z1bGwvY3Rvb2wxNi9DcmVhdGVOYXJ5Qm9vbGVhbk9wZXJhdG9yX29wZXJhbmRzX1ByZWRpY2F0ZUV4cHJlc3Npb24uZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL2ljb25zL2Z1bGwvY3Rvb2wxNi9DcmVhdGVOYXJ5Qm9vbGVhbk9wZXJhdG9yX29wZXJhbmRzX1ByZWRpY2F0ZVJlZmVyZW5jZS5naWYgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9pY29ucy9mdWxsL2N0b29sMTYvQ3JlYXRlTmFyeUJvb2xlYW5PcGVyYXRvcl9vcGVyYW5kc19QcmVkaWNhdGVSZWZlcmVuY2UuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQwYjQwNzgKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9pY29ucy9mdWxsL2N0b29sMTYvQ3JlYXRlTmFyeUJvb2xlYW5PcGVyYXRvcl9vcGVyYW5kc19QcmVkaWNhdGVSZWZlcmVuY2UuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL2ljb25zL2Z1bGwvY3Rvb2wxNi9DcmVhdGVOYXJ5Qm9vbGVhbk9wZXJhdG9yX29wZXJhbmRzX1RpbWVUZXN0LmdpZiBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL2ljb25zL2Z1bGwvY3Rvb2wxNi9DcmVhdGVOYXJ5Qm9vbGVhbk9wZXJhdG9yX29wZXJhbmRzX1RpbWVUZXN0LmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iN2ZkYjE0Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvaWNvbnMvZnVsbC9jdG9vbDE2L0NyZWF0ZU5hcnlCb29sZWFuT3BlcmF0b3Jfb3BlcmFuZHNfVGltZVRlc3QuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL2ljb25zL2Z1bGwvY3Rvb2wxNi9DcmVhdGVOYXJ5Qm9vbGVhbk9wZXJhdG9yX29wZXJhbmRzX1RydWUuZ2lmIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvaWNvbnMvZnVsbC9jdG9vbDE2L0NyZWF0ZU5hcnlCb29sZWFuT3BlcmF0b3Jfb3BlcmFuZHNfVHJ1ZS5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmZlMjg2MwotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL2ljb25zL2Z1bGwvY3Rvb2wxNi9DcmVhdGVOYXJ5Qm9vbGVhbk9wZXJhdG9yX29wZXJhbmRzX1RydWUuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL2ljb25zL2Z1bGwvY3Rvb2wxNi9DcmVhdGVQcmVkaWNhdGVFeHByZXNzaW9uX3ByZWRpY2F0ZV9BYnNvbHV0ZVRpbWVUZXN0LmdpZiBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL2ljb25zL2Z1bGwvY3Rvb2wxNi9DcmVhdGVQcmVkaWNhdGVFeHByZXNzaW9uX3ByZWRpY2F0ZV9BYnNvbHV0ZVRpbWVUZXN0LmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ODAwNWFlCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvaWNvbnMvZnVsbC9jdG9vbDE2L0NyZWF0ZVByZWRpY2F0ZUV4cHJlc3Npb25fcHJlZGljYXRlX0Fic29sdXRlVGltZVRlc3QuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL2ljb25zL2Z1bGwvY3Rvb2wxNi9DcmVhdGVQcmVkaWNhdGVFeHByZXNzaW9uX3ByZWRpY2F0ZV9BbmQuZ2lmIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvaWNvbnMvZnVsbC9jdG9vbDE2L0NyZWF0ZVByZWRpY2F0ZUV4cHJlc3Npb25fcHJlZGljYXRlX0FuZC5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTJkNDA3ZQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL2ljb25zL2Z1bGwvY3Rvb2wxNi9DcmVhdGVQcmVkaWNhdGVFeHByZXNzaW9uX3ByZWRpY2F0ZV9BbmQuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL2ljb25zL2Z1bGwvY3Rvb2wxNi9DcmVhdGVQcmVkaWNhdGVFeHByZXNzaW9uX3ByZWRpY2F0ZV9FbGFwc2VkVGltZVRlc3QuZ2lmIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvaWNvbnMvZnVsbC9jdG9vbDE2L0NyZWF0ZVByZWRpY2F0ZUV4cHJlc3Npb25fcHJlZGljYXRlX0VsYXBzZWRUaW1lVGVzdC5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzM1M2NmNgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL2ljb25zL2Z1bGwvY3Rvb2wxNi9DcmVhdGVQcmVkaWNhdGVFeHByZXNzaW9uX3ByZWRpY2F0ZV9FbGFwc2VkVGltZVRlc3QuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL2ljb25zL2Z1bGwvY3Rvb2wxNi9DcmVhdGVQcmVkaWNhdGVFeHByZXNzaW9uX3ByZWRpY2F0ZV9GYWxzZS5naWYgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9pY29ucy9mdWxsL2N0b29sMTYvQ3JlYXRlUHJlZGljYXRlRXhwcmVzc2lvbl9wcmVkaWNhdGVfRmFsc2UuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBjZjI3YjIKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9pY29ucy9mdWxsL2N0b29sMTYvQ3JlYXRlUHJlZGljYXRlRXhwcmVzc2lvbl9wcmVkaWNhdGVfRmFsc2UuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL2ljb25zL2Z1bGwvY3Rvb2wxNi9DcmVhdGVQcmVkaWNhdGVFeHByZXNzaW9uX3ByZWRpY2F0ZV9JZGVudGlmaWFibGVQcmVkaWNhdGVFeHByZXNzaW9uLmdpZiBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL2ljb25zL2Z1bGwvY3Rvb2wxNi9DcmVhdGVQcmVkaWNhdGVFeHByZXNzaW9uX3ByZWRpY2F0ZV9JZGVudGlmaWFibGVQcmVkaWNhdGVFeHByZXNzaW9uLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMzAzNzYxCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvaWNvbnMvZnVsbC9jdG9vbDE2L0NyZWF0ZVByZWRpY2F0ZUV4cHJlc3Npb25fcHJlZGljYXRlX0lkZW50aWZpYWJsZVByZWRpY2F0ZUV4cHJlc3Npb24uZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL2ljb25zL2Z1bGwvY3Rvb2wxNi9DcmVhdGVQcmVkaWNhdGVFeHByZXNzaW9uX3ByZWRpY2F0ZV9Ob3QuZ2lmIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvaWNvbnMvZnVsbC9jdG9vbDE2L0NyZWF0ZVByZWRpY2F0ZUV4cHJlc3Npb25fcHJlZGljYXRlX05vdC5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGNmMjdiMgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL2ljb25zL2Z1bGwvY3Rvb2wxNi9DcmVhdGVQcmVkaWNhdGVFeHByZXNzaW9uX3ByZWRpY2F0ZV9Ob3QuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL2ljb25zL2Z1bGwvY3Rvb2wxNi9DcmVhdGVQcmVkaWNhdGVFeHByZXNzaW9uX3ByZWRpY2F0ZV9Pci5naWYgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9pY29ucy9mdWxsL2N0b29sMTYvQ3JlYXRlUHJlZGljYXRlRXhwcmVzc2lvbl9wcmVkaWNhdGVfT3IuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRmN2VlNTIKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9pY29ucy9mdWxsL2N0b29sMTYvQ3JlYXRlUHJlZGljYXRlRXhwcmVzc2lvbl9wcmVkaWNhdGVfT3IuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL2ljb25zL2Z1bGwvY3Rvb2wxNi9DcmVhdGVQcmVkaWNhdGVFeHByZXNzaW9uX3ByZWRpY2F0ZV9QcmVkaWNhdGVFeHByZXNzaW9uLmdpZiBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL2ljb25zL2Z1bGwvY3Rvb2wxNi9DcmVhdGVQcmVkaWNhdGVFeHByZXNzaW9uX3ByZWRpY2F0ZV9QcmVkaWNhdGVFeHByZXNzaW9uLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYTlhZDFjCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvaWNvbnMvZnVsbC9jdG9vbDE2L0NyZWF0ZVByZWRpY2F0ZUV4cHJlc3Npb25fcHJlZGljYXRlX1ByZWRpY2F0ZUV4cHJlc3Npb24uZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL2ljb25zL2Z1bGwvY3Rvb2wxNi9DcmVhdGVQcmVkaWNhdGVFeHByZXNzaW9uX3ByZWRpY2F0ZV9QcmVkaWNhdGVSZWZlcmVuY2UuZ2lmIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvaWNvbnMvZnVsbC9jdG9vbDE2L0NyZWF0ZVByZWRpY2F0ZUV4cHJlc3Npb25fcHJlZGljYXRlX1ByZWRpY2F0ZVJlZmVyZW5jZS5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGE1Zjk1YwotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL2ljb25zL2Z1bGwvY3Rvb2wxNi9DcmVhdGVQcmVkaWNhdGVFeHByZXNzaW9uX3ByZWRpY2F0ZV9QcmVkaWNhdGVSZWZlcmVuY2UuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL2ljb25zL2Z1bGwvY3Rvb2wxNi9DcmVhdGVQcmVkaWNhdGVFeHByZXNzaW9uX3ByZWRpY2F0ZV9UaW1lVGVzdC5naWYgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9pY29ucy9mdWxsL2N0b29sMTYvQ3JlYXRlUHJlZGljYXRlRXhwcmVzc2lvbl9wcmVkaWNhdGVfVGltZVRlc3QuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZhODE0ZGMKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9pY29ucy9mdWxsL2N0b29sMTYvQ3JlYXRlUHJlZGljYXRlRXhwcmVzc2lvbl9wcmVkaWNhdGVfVGltZVRlc3QuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL2ljb25zL2Z1bGwvY3Rvb2wxNi9DcmVhdGVQcmVkaWNhdGVFeHByZXNzaW9uX3ByZWRpY2F0ZV9UcnVlLmdpZiBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL2ljb25zL2Z1bGwvY3Rvb2wxNi9DcmVhdGVQcmVkaWNhdGVFeHByZXNzaW9uX3ByZWRpY2F0ZV9UcnVlLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZmNmMmM3Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvaWNvbnMvZnVsbC9jdG9vbDE2L0NyZWF0ZVByZWRpY2F0ZUV4cHJlc3Npb25fcHJlZGljYXRlX1RydWUuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL2ljb25zL2Z1bGwvY3Rvb2wxNi9DcmVhdGVTY2VuYXJpb19tb2RlbF9Nb2RlbC5naWYgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9pY29ucy9mdWxsL2N0b29sMTYvQ3JlYXRlU2NlbmFyaW9fbW9kZWxfTW9kZWwuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkwZjQ4MjgKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9pY29ucy9mdWxsL2N0b29sMTYvQ3JlYXRlU2NlbmFyaW9fbW9kZWxfTW9kZWwuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL2ljb25zL2Z1bGwvY3Rvb2wxNi9DcmVhdGVTY2VuYXJpb19zY2VuYXJpb0RlY29yYXRvcnNfRGVjb3JhdG9yLmdpZiBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL2ljb25zL2Z1bGwvY3Rvb2wxNi9DcmVhdGVTY2VuYXJpb19zY2VuYXJpb0RlY29yYXRvcnNfRGVjb3JhdG9yLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iODIyMzc0Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvaWNvbnMvZnVsbC9jdG9vbDE2L0NyZWF0ZVNjZW5hcmlvX3NjZW5hcmlvRGVjb3JhdG9yc19EZWNvcmF0b3IuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL2ljb25zL2Z1bGwvY3Rvb2wxNi9DcmVhdGVTY2VuYXJpb19zY2VuYXJpb0RlY29yYXRvcnNfRWRnZURlY29yYXRvci5naWYgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9pY29ucy9mdWxsL2N0b29sMTYvQ3JlYXRlU2NlbmFyaW9fc2NlbmFyaW9EZWNvcmF0b3JzX0VkZ2VEZWNvcmF0b3IuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQyNDUwYTgKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9pY29ucy9mdWxsL2N0b29sMTYvQ3JlYXRlU2NlbmFyaW9fc2NlbmFyaW9EZWNvcmF0b3JzX0VkZ2VEZWNvcmF0b3IuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL2ljb25zL2Z1bGwvY3Rvb2wxNi9DcmVhdGVTY2VuYXJpb19zY2VuYXJpb0RlY29yYXRvcnNfR3JhcGhEZWNvcmF0b3IuZ2lmIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvaWNvbnMvZnVsbC9jdG9vbDE2L0NyZWF0ZVNjZW5hcmlvX3NjZW5hcmlvRGVjb3JhdG9yc19HcmFwaERlY29yYXRvci5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmE2YTVlZQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL2ljb25zL2Z1bGwvY3Rvb2wxNi9DcmVhdGVTY2VuYXJpb19zY2VuYXJpb0RlY29yYXRvcnNfR3JhcGhEZWNvcmF0b3IuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL2ljb25zL2Z1bGwvY3Rvb2wxNi9DcmVhdGVTY2VuYXJpb19zY2VuYXJpb0RlY29yYXRvcnNfTm9kZURlY29yYXRvci5naWYgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9pY29ucy9mdWxsL2N0b29sMTYvQ3JlYXRlU2NlbmFyaW9fc2NlbmFyaW9EZWNvcmF0b3JzX05vZGVEZWNvcmF0b3IuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmViZTQwZWEKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9pY29ucy9mdWxsL2N0b29sMTYvQ3JlYXRlU2NlbmFyaW9fc2NlbmFyaW9EZWNvcmF0b3JzX05vZGVEZWNvcmF0b3IuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL2ljb25zL2Z1bGwvY3Rvb2wxNi9DcmVhdGVTY2VuYXJpb19zZXF1ZW5jZXJfUmVhbFRpbWVTZXF1ZW5jZXIuZ2lmIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvaWNvbnMvZnVsbC9jdG9vbDE2L0NyZWF0ZVNjZW5hcmlvX3NlcXVlbmNlcl9SZWFsVGltZVNlcXVlbmNlci5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTM0NDlmNQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL2ljb25zL2Z1bGwvY3Rvb2wxNi9DcmVhdGVTY2VuYXJpb19zZXF1ZW5jZXJfUmVhbFRpbWVTZXF1ZW5jZXIuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL2ljb25zL2Z1bGwvY3Rvb2wxNi9DcmVhdGVTY2VuYXJpb19zZXF1ZW5jZXJfU2VxdWVudGlhbFNlcXVlbmNlci5naWYgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9pY29ucy9mdWxsL2N0b29sMTYvQ3JlYXRlU2NlbmFyaW9fc2VxdWVuY2VyX1NlcXVlbnRpYWxTZXF1ZW5jZXIuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIyY2FmNDcKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9pY29ucy9mdWxsL2N0b29sMTYvQ3JlYXRlU2NlbmFyaW9fc2VxdWVuY2VyX1NlcXVlbnRpYWxTZXF1ZW5jZXIuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL2ljb25zL2Z1bGwvY3Rvb2wxNi9DcmVhdGVTY2VuYXJpb19zb2x2ZXJfU29sdmVyLmdpZiBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL2ljb25zL2Z1bGwvY3Rvb2wxNi9DcmVhdGVTY2VuYXJpb19zb2x2ZXJfU29sdmVyLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZGQ5OWJhCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvaWNvbnMvZnVsbC9jdG9vbDE2L0NyZWF0ZVNjZW5hcmlvX3NvbHZlcl9Tb2x2ZXIuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL2ljb25zL2Z1bGwvY3Rvb2wxNi9DcmVhdGVTZXF1ZW5jZXJfY3VycmVudFRpbWVfU1RFTVRpbWUuZ2lmIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvaWNvbnMvZnVsbC9jdG9vbDE2L0NyZWF0ZVNlcXVlbmNlcl9jdXJyZW50VGltZV9TVEVNVGltZS5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWI0NTNmNAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL2ljb25zL2Z1bGwvY3Rvb2wxNi9DcmVhdGVTZXF1ZW5jZXJfY3VycmVudFRpbWVfU1RFTVRpbWUuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL2ljb25zL2Z1bGwvY3Rvb2wxNi9DcmVhdGVTZXF1ZW5jZXJfZW5kVGltZV9TVEVNVGltZS5naWYgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9pY29ucy9mdWxsL2N0b29sMTYvQ3JlYXRlU2VxdWVuY2VyX2VuZFRpbWVfU1RFTVRpbWUuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFiNDUzZjQKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9pY29ucy9mdWxsL2N0b29sMTYvQ3JlYXRlU2VxdWVuY2VyX2VuZFRpbWVfU1RFTVRpbWUuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL2ljb25zL2Z1bGwvY3Rvb2wxNi9DcmVhdGVTZXF1ZW5jZXJfc3RhcnRUaW1lX1NURU1UaW1lLmdpZiBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL2ljb25zL2Z1bGwvY3Rvb2wxNi9DcmVhdGVTZXF1ZW5jZXJfc3RhcnRUaW1lX1NURU1UaW1lLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYjQ1M2Y0Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvaWNvbnMvZnVsbC9jdG9vbDE2L0NyZWF0ZVNlcXVlbmNlcl9zdGFydFRpbWVfU1RFTVRpbWUuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL2ljb25zL2Z1bGwvY3Rvb2wxNi9DcmVhdGVTdHJpbmdWYWx1ZUxpc3RfdmFsdWVzX1N0cmluZ1ZhbHVlLmdpZiBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL2ljb25zL2Z1bGwvY3Rvb2wxNi9DcmVhdGVTdHJpbmdWYWx1ZUxpc3RfdmFsdWVzX1N0cmluZ1ZhbHVlLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMmRkNjhlCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvaWNvbnMvZnVsbC9jdG9vbDE2L0NyZWF0ZVN0cmluZ1ZhbHVlTGlzdF92YWx1ZXNfU3RyaW5nVmFsdWUuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL2ljb25zL2Z1bGwvY3Rvb2wxNi9DcmVhdGVUaW1lVGVzdF90aW1lX1NURU1UaW1lLmdpZiBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL2ljb25zL2Z1bGwvY3Rvb2wxNi9DcmVhdGVUaW1lVGVzdF90aW1lX1NURU1UaW1lLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZTFiZjZkCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvaWNvbnMvZnVsbC9jdG9vbDE2L0NyZWF0ZVRpbWVUZXN0X3RpbWVfU1RFTVRpbWUuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL2ljb25zL2Z1bGwvY3Rvb2wxNi9DcmVhdGVUcmlnZ2VyX2FjdGlvbnNfRGVjb3JhdG9yLmdpZiBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL2ljb25zL2Z1bGwvY3Rvb2wxNi9DcmVhdGVUcmlnZ2VyX2FjdGlvbnNfRGVjb3JhdG9yLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYzNhNGZkCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvaWNvbnMvZnVsbC9jdG9vbDE2L0NyZWF0ZVRyaWdnZXJfYWN0aW9uc19EZWNvcmF0b3IuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL2ljb25zL2Z1bGwvY3Rvb2wxNi9DcmVhdGVUcmlnZ2VyX2FjdGlvbnNfRWRnZURlY29yYXRvci5naWYgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9pY29ucy9mdWxsL2N0b29sMTYvQ3JlYXRlVHJpZ2dlcl9hY3Rpb25zX0VkZ2VEZWNvcmF0b3IuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY5ODc3MTEKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9pY29ucy9mdWxsL2N0b29sMTYvQ3JlYXRlVHJpZ2dlcl9hY3Rpb25zX0VkZ2VEZWNvcmF0b3IuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL2ljb25zL2Z1bGwvY3Rvb2wxNi9DcmVhdGVUcmlnZ2VyX2FjdGlvbnNfR3JhcGhEZWNvcmF0b3IuZ2lmIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvaWNvbnMvZnVsbC9jdG9vbDE2L0NyZWF0ZVRyaWdnZXJfYWN0aW9uc19HcmFwaERlY29yYXRvci5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjg4ZWUzYQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL2ljb25zL2Z1bGwvY3Rvb2wxNi9DcmVhdGVUcmlnZ2VyX2FjdGlvbnNfR3JhcGhEZWNvcmF0b3IuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL2ljb25zL2Z1bGwvY3Rvb2wxNi9DcmVhdGVUcmlnZ2VyX2FjdGlvbnNfTW9kaWZpZXIuZ2lmIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvaWNvbnMvZnVsbC9jdG9vbDE2L0NyZWF0ZVRyaWdnZXJfYWN0aW9uc19Nb2RpZmllci5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmVmY2Q5MwotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL2ljb25zL2Z1bGwvY3Rvb2wxNi9DcmVhdGVUcmlnZ2VyX2FjdGlvbnNfTW9kaWZpZXIuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL2ljb25zL2Z1bGwvY3Rvb2wxNi9DcmVhdGVUcmlnZ2VyX2FjdGlvbnNfTm9kZURlY29yYXRvci5naWYgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9pY29ucy9mdWxsL2N0b29sMTYvQ3JlYXRlVHJpZ2dlcl9hY3Rpb25zX05vZGVEZWNvcmF0b3IuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU5ZTE3NGQKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9pY29ucy9mdWxsL2N0b29sMTYvQ3JlYXRlVHJpZ2dlcl9hY3Rpb25zX05vZGVEZWNvcmF0b3IuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL2ljb25zL2Z1bGwvY3Rvb2wxNi9DcmVhdGVUcmlnZ2VyX2FjdGlvbnNfVHJpZ2dlci5naWYgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9pY29ucy9mdWxsL2N0b29sMTYvQ3JlYXRlVHJpZ2dlcl9hY3Rpb25zX1RyaWdnZXIuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNhMTdiMWMKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9pY29ucy9mdWxsL2N0b29sMTYvQ3JlYXRlVHJpZ2dlcl9hY3Rpb25zX1RyaWdnZXIuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL2ljb25zL2Z1bGwvY3Rvb2wxNi9DcmVhdGVVbmFyeUJvb2xlYW5PcGVyYXRvcl9vcGVyYW5kX0Fic29sdXRlVGltZVRlc3QuZ2lmIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvaWNvbnMvZnVsbC9jdG9vbDE2L0NyZWF0ZVVuYXJ5Qm9vbGVhbk9wZXJhdG9yX29wZXJhbmRfQWJzb2x1dGVUaW1lVGVzdC5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTg2ZmI5YwotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL2ljb25zL2Z1bGwvY3Rvb2wxNi9DcmVhdGVVbmFyeUJvb2xlYW5PcGVyYXRvcl9vcGVyYW5kX0Fic29sdXRlVGltZVRlc3QuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL2ljb25zL2Z1bGwvY3Rvb2wxNi9DcmVhdGVVbmFyeUJvb2xlYW5PcGVyYXRvcl9vcGVyYW5kX0FuZC5naWYgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9pY29ucy9mdWxsL2N0b29sMTYvQ3JlYXRlVW5hcnlCb29sZWFuT3BlcmF0b3Jfb3BlcmFuZF9BbmQuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk2YjM0N2UKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9pY29ucy9mdWxsL2N0b29sMTYvQ3JlYXRlVW5hcnlCb29sZWFuT3BlcmF0b3Jfb3BlcmFuZF9BbmQuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL2ljb25zL2Z1bGwvY3Rvb2wxNi9DcmVhdGVVbmFyeUJvb2xlYW5PcGVyYXRvcl9vcGVyYW5kX0VsYXBzZWRUaW1lVGVzdC5naWYgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9pY29ucy9mdWxsL2N0b29sMTYvQ3JlYXRlVW5hcnlCb29sZWFuT3BlcmF0b3Jfb3BlcmFuZF9FbGFwc2VkVGltZVRlc3QuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFmM2EyOTUKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9pY29ucy9mdWxsL2N0b29sMTYvQ3JlYXRlVW5hcnlCb29sZWFuT3BlcmF0b3Jfb3BlcmFuZF9FbGFwc2VkVGltZVRlc3QuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL2ljb25zL2Z1bGwvY3Rvb2wxNi9DcmVhdGVVbmFyeUJvb2xlYW5PcGVyYXRvcl9vcGVyYW5kX0ZhbHNlLmdpZiBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL2ljb25zL2Z1bGwvY3Rvb2wxNi9DcmVhdGVVbmFyeUJvb2xlYW5PcGVyYXRvcl9vcGVyYW5kX0ZhbHNlLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wN2RlYTQwCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvaWNvbnMvZnVsbC9jdG9vbDE2L0NyZWF0ZVVuYXJ5Qm9vbGVhbk9wZXJhdG9yX29wZXJhbmRfRmFsc2UuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL2ljb25zL2Z1bGwvY3Rvb2wxNi9DcmVhdGVVbmFyeUJvb2xlYW5PcGVyYXRvcl9vcGVyYW5kX0lkZW50aWZpYWJsZVByZWRpY2F0ZUV4cHJlc3Npb24uZ2lmIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvaWNvbnMvZnVsbC9jdG9vbDE2L0NyZWF0ZVVuYXJ5Qm9vbGVhbk9wZXJhdG9yX29wZXJhbmRfSWRlbnRpZmlhYmxlUHJlZGljYXRlRXhwcmVzc2lvbi5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjEyMDI1OAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL2ljb25zL2Z1bGwvY3Rvb2wxNi9DcmVhdGVVbmFyeUJvb2xlYW5PcGVyYXRvcl9vcGVyYW5kX0lkZW50aWZpYWJsZVByZWRpY2F0ZUV4cHJlc3Npb24uZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL2ljb25zL2Z1bGwvY3Rvb2wxNi9DcmVhdGVVbmFyeUJvb2xlYW5PcGVyYXRvcl9vcGVyYW5kX05vdC5naWYgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9pY29ucy9mdWxsL2N0b29sMTYvQ3JlYXRlVW5hcnlCb29sZWFuT3BlcmF0b3Jfb3BlcmFuZF9Ob3QuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA3ZGVhNDAKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9pY29ucy9mdWxsL2N0b29sMTYvQ3JlYXRlVW5hcnlCb29sZWFuT3BlcmF0b3Jfb3BlcmFuZF9Ob3QuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL2ljb25zL2Z1bGwvY3Rvb2wxNi9DcmVhdGVVbmFyeUJvb2xlYW5PcGVyYXRvcl9vcGVyYW5kX09yLmdpZiBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL2ljb25zL2Z1bGwvY3Rvb2wxNi9DcmVhdGVVbmFyeUJvb2xlYW5PcGVyYXRvcl9vcGVyYW5kX09yLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMzY5ODRkCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvaWNvbnMvZnVsbC9jdG9vbDE2L0NyZWF0ZVVuYXJ5Qm9vbGVhbk9wZXJhdG9yX29wZXJhbmRfT3IuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL2ljb25zL2Z1bGwvY3Rvb2wxNi9DcmVhdGVVbmFyeUJvb2xlYW5PcGVyYXRvcl9vcGVyYW5kX1ByZWRpY2F0ZUV4cHJlc3Npb24uZ2lmIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvaWNvbnMvZnVsbC9jdG9vbDE2L0NyZWF0ZVVuYXJ5Qm9vbGVhbk9wZXJhdG9yX29wZXJhbmRfUHJlZGljYXRlRXhwcmVzc2lvbi5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTUwMDk1NQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL2ljb25zL2Z1bGwvY3Rvb2wxNi9DcmVhdGVVbmFyeUJvb2xlYW5PcGVyYXRvcl9vcGVyYW5kX1ByZWRpY2F0ZUV4cHJlc3Npb24uZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL2ljb25zL2Z1bGwvY3Rvb2wxNi9DcmVhdGVVbmFyeUJvb2xlYW5PcGVyYXRvcl9vcGVyYW5kX1ByZWRpY2F0ZVJlZmVyZW5jZS5naWYgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9pY29ucy9mdWxsL2N0b29sMTYvQ3JlYXRlVW5hcnlCb29sZWFuT3BlcmF0b3Jfb3BlcmFuZF9QcmVkaWNhdGVSZWZlcmVuY2UuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc2ZTZmM2IKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9pY29ucy9mdWxsL2N0b29sMTYvQ3JlYXRlVW5hcnlCb29sZWFuT3BlcmF0b3Jfb3BlcmFuZF9QcmVkaWNhdGVSZWZlcmVuY2UuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL2ljb25zL2Z1bGwvY3Rvb2wxNi9DcmVhdGVVbmFyeUJvb2xlYW5PcGVyYXRvcl9vcGVyYW5kX1RpbWVUZXN0LmdpZiBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL2ljb25zL2Z1bGwvY3Rvb2wxNi9DcmVhdGVVbmFyeUJvb2xlYW5PcGVyYXRvcl9vcGVyYW5kX1RpbWVUZXN0LmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZTlhYmIyCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvaWNvbnMvZnVsbC9jdG9vbDE2L0NyZWF0ZVVuYXJ5Qm9vbGVhbk9wZXJhdG9yX29wZXJhbmRfVGltZVRlc3QuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL2ljb25zL2Z1bGwvY3Rvb2wxNi9DcmVhdGVVbmFyeUJvb2xlYW5PcGVyYXRvcl9vcGVyYW5kX1RydWUuZ2lmIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvaWNvbnMvZnVsbC9jdG9vbDE2L0NyZWF0ZVVuYXJ5Qm9vbGVhbk9wZXJhdG9yX29wZXJhbmRfVHJ1ZS5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzBlOTY1MwotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL2ljb25zL2Z1bGwvY3Rvb2wxNi9DcmVhdGVVbmFyeUJvb2xlYW5PcGVyYXRvcl9vcGVyYW5kX1RydWUuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL2ljb25zL2Z1bGwvY3VzdG9tb2JqMTYvLmN2c2lnbm9yZSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL2ljb25zL2Z1bGwvY3VzdG9tb2JqMTYvLmN2c2lnbm9yZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wODVlOGJhCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvaWNvbnMvZnVsbC9jdXN0b21vYmoxNi8uY3ZzaWdub3JlCkBAIC0wLDAgKzEgQEAKK1RodW1icy5kYgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvaWNvbnMvZnVsbC9jdXN0b21vYmoxNi9BbmQucG5nIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvaWNvbnMvZnVsbC9jdXN0b21vYmoxNi9BbmQucG5nCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjkwNzQ2MGUKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9pY29ucy9mdWxsL2N1c3RvbW9iajE2L0FuZC5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvaWNvbnMvZnVsbC9jdXN0b21vYmoxNi9EZWNvcmF0b3IuZ2lmIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvaWNvbnMvZnVsbC9jdXN0b21vYmoxNi9EZWNvcmF0b3IuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNjMzc2YWQKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9pY29ucy9mdWxsL2N1c3RvbW9iajE2L0RlY29yYXRvci5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvaWNvbnMvZnVsbC9jdXN0b21vYmoxNi9Eb3VibGVNb2RpZmllci5wbmcgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9pY29ucy9mdWxsL2N1c3RvbW9iajE2L0RvdWJsZU1vZGlmaWVyLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi43ZWM2YTAxCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvaWNvbnMvZnVsbC9jdXN0b21vYmoxNi9Eb3VibGVNb2RpZmllci5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvaWNvbnMvZnVsbC9jdXN0b21vYmoxNi9Eb3VibGVWYWx1ZS5naWYgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9pY29ucy9mdWxsL2N1c3RvbW9iajE2L0RvdWJsZVZhbHVlLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MjYwNjg0Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvaWNvbnMvZnVsbC9jdXN0b21vYmoxNi9Eb3VibGVWYWx1ZS5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvaWNvbnMvZnVsbC9jdXN0b21vYmoxNi9EdWJsaW5Db3JlLmdpZiBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL2ljb25zL2Z1bGwvY3VzdG9tb2JqMTYvRHVibGluQ29yZS5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjBjNTI3MwotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL2ljb25zL2Z1bGwvY3VzdG9tb2JqMTYvRHVibGluQ29yZS5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvaWNvbnMvZnVsbC9jdXN0b21vYmoxNi9EeW5hbWljTGFiZWwuZ2lmIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvaWNvbnMvZnVsbC9jdXN0b21vYmoxNi9EeW5hbWljTGFiZWwuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFiOWUzNTMKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9pY29ucy9mdWxsL2N1c3RvbW9iajE2L0R5bmFtaWNMYWJlbC5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvaWNvbnMvZnVsbC9jdXN0b21vYmoxNi9FZGdlLmdpZiBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL2ljb25zL2Z1bGwvY3VzdG9tb2JqMTYvRWRnZS5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmFkZGI5ZQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL2ljb25zL2Z1bGwvY3VzdG9tb2JqMTYvRWRnZS5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvaWNvbnMvZnVsbC9jdXN0b21vYmoxNi9FbGFwc2VkVGltZVRlc3QucG5nIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvaWNvbnMvZnVsbC9jdXN0b21vYmoxNi9FbGFwc2VkVGltZVRlc3QucG5nCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjg2ZTMxZDQKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9pY29ucy9mdWxsL2N1c3RvbW9iajE2L0VsYXBzZWRUaW1lVGVzdC5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvaWNvbnMvZnVsbC9jdXN0b21vYmoxNi9FeHBlcmltZW50LmdpZiBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL2ljb25zL2Z1bGwvY3VzdG9tb2JqMTYvRXhwZXJpbWVudC5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDZkZTNiMQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL2ljb25zL2Z1bGwvY3VzdG9tb2JqMTYvRXhwZXJpbWVudC5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvaWNvbnMvZnVsbC9jdXN0b21vYmoxNi9HcmFwaC5naWYgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9pY29ucy9mdWxsL2N1c3RvbW9iajE2L0dyYXBoLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NzBiMzU1Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvaWNvbnMvZnVsbC9jdXN0b21vYmoxNi9HcmFwaC5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvaWNvbnMvZnVsbC9jdXN0b21vYmoxNi9HcmFwaE1vZGVsRmlsZS5naWYgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9pY29ucy9mdWxsL2N1c3RvbW9iajE2L0dyYXBoTW9kZWxGaWxlLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MDBiMDY2Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvaWNvbnMvZnVsbC9jdXN0b21vYmoxNi9HcmFwaE1vZGVsRmlsZS5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvaWNvbnMvZnVsbC9jdXN0b21vYmoxNi9JbnRlZ2VyTW9kaWZpZXIucG5nIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvaWNvbnMvZnVsbC9jdXN0b21vYmoxNi9JbnRlZ2VyTW9kaWZpZXIucG5nCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjdlYzZhMDEKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9pY29ucy9mdWxsL2N1c3RvbW9iajE2L0ludGVnZXJNb2RpZmllci5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvaWNvbnMvZnVsbC9jdXN0b21vYmoxNi9MYWJlbC5naWYgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9pY29ucy9mdWxsL2N1c3RvbW9iajE2L0xhYmVsLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNWZmM2Q5Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvaWNvbnMvZnVsbC9jdXN0b21vYmoxNi9MYWJlbC5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvaWNvbnMvZnVsbC9jdXN0b21vYmoxNi9MaXN0LmdpZiBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL2ljb25zL2Z1bGwvY3VzdG9tb2JqMTYvTGlzdC5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGRhMTEwYQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL2ljb25zL2Z1bGwvY3VzdG9tb2JqMTYvTGlzdC5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvaWNvbnMvZnVsbC9jdXN0b21vYmoxNi9Mb25nTW9kaWZpZXIucG5nIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvaWNvbnMvZnVsbC9jdXN0b21vYmoxNi9Mb25nTW9kaWZpZXIucG5nCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjdlYzZhMDEKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9pY29ucy9mdWxsL2N1c3RvbW9iajE2L0xvbmdNb2RpZmllci5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvaWNvbnMvZnVsbC9jdXN0b21vYmoxNi9NYXRyaXguZ2lmIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvaWNvbnMvZnVsbC9jdXN0b21vYmoxNi9NYXRyaXguZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdjY2JlYjEKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9pY29ucy9mdWxsL2N1c3RvbW9iajE2L01hdHJpeC5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvaWNvbnMvZnVsbC9jdXN0b21vYmoxNi9Nb2RlbC5naWYgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9pY29ucy9mdWxsL2N1c3RvbW9iajE2L01vZGVsLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYTAxMzNiCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvaWNvbnMvZnVsbC9jdXN0b21vYmoxNi9Nb2RlbC5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvaWNvbnMvZnVsbC9jdXN0b21vYmoxNi9Nb2RlbE1vZGVsRmlsZS5naWYgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9pY29ucy9mdWxsL2N1c3RvbW9iajE2L01vZGVsTW9kZWxGaWxlLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZDYxN2UyCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvaWNvbnMvZnVsbC9jdXN0b21vYmoxNi9Nb2RlbE1vZGVsRmlsZS5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvaWNvbnMvZnVsbC9jdXN0b21vYmoxNi9Nb2RpZmllci5naWYgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9pY29ucy9mdWxsL2N1c3RvbW9iajE2L01vZGlmaWVyLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MDM4Y2Q4Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvaWNvbnMvZnVsbC9jdXN0b21vYmoxNi9Nb2RpZmllci5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvaWNvbnMvZnVsbC9jdXN0b21vYmoxNi9Ob2RlLmdpZiBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL2ljb25zL2Z1bGwvY3VzdG9tb2JqMTYvTm9kZS5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzYxNDhmOAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL2ljb25zL2Z1bGwvY3VzdG9tb2JqMTYvTm9kZS5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvaWNvbnMvZnVsbC9jdXN0b21vYmoxNi9Ob3QucG5nIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvaWNvbnMvZnVsbC9jdXN0b21vYmoxNi9Ob3QucG5nCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmViZjBhYzAKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9pY29ucy9mdWxsL2N1c3RvbW9iajE2L05vdC5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvaWNvbnMvZnVsbC9jdXN0b21vYmoxNi9Pci5wbmcgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9pY29ucy9mdWxsL2N1c3RvbW9iajE2L09yLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4yM2IzNGViCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvaWNvbnMvZnVsbC9jdXN0b21vYmoxNi9Pci5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvaWNvbnMvZnVsbC9jdXN0b21vYmoxNi9QcmVkaWNhdGUuZ2lmIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvaWNvbnMvZnVsbC9jdXN0b21vYmoxNi9QcmVkaWNhdGUuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ2Yjc1OGQKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9pY29ucy9mdWxsL2N1c3RvbW9iajE2L1ByZWRpY2F0ZS5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvaWNvbnMvZnVsbC9jdXN0b21vYmoxNi9SZWFsVGltZVNlcXVlbmNlci5naWYgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9pY29ucy9mdWxsL2N1c3RvbW9iajE2L1JlYWxUaW1lU2VxdWVuY2VyLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYmM0ZmNhCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvaWNvbnMvZnVsbC9jdXN0b21vYmoxNi9SZWFsVGltZVNlcXVlbmNlci5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvaWNvbnMvZnVsbC9jdXN0b21vYmoxNi9TY2VuYXJpby5naWYgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9pY29ucy9mdWxsL2N1c3RvbW9iajE2L1NjZW5hcmlvLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NGZmNjQxCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvaWNvbnMvZnVsbC9jdXN0b21vYmoxNi9TY2VuYXJpby5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvaWNvbnMvZnVsbC9jdXN0b21vYmoxNi9TY2VuYXJpb01vZGVsRmlsZS5naWYgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9pY29ucy9mdWxsL2N1c3RvbW9iajE2L1NjZW5hcmlvTW9kZWxGaWxlLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40OTE4ZWFhCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvaWNvbnMvZnVsbC9jdXN0b21vYmoxNi9TY2VuYXJpb01vZGVsRmlsZS5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvaWNvbnMvZnVsbC9jdXN0b21vYmoxNi9TZXF1ZW5jZXIuZ2lmIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvaWNvbnMvZnVsbC9jdXN0b21vYmoxNi9TZXF1ZW5jZXIuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVhN2VkOWIKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9pY29ucy9mdWxsL2N1c3RvbW9iajE2L1NlcXVlbmNlci5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvaWNvbnMvZnVsbC9jdXN0b21vYmoxNi9TZXF1ZW5jZXJNb2RpZmllci5wbmcgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9pY29ucy9mdWxsL2N1c3RvbW9iajE2L1NlcXVlbmNlck1vZGlmaWVyLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi43ZWM2YTAxCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvaWNvbnMvZnVsbC9jdXN0b21vYmoxNi9TZXF1ZW5jZXJNb2RpZmllci5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvaWNvbnMvZnVsbC9jdXN0b21vYmoxNi9TdGF0aWNMYWJlbC5naWYgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9pY29ucy9mdWxsL2N1c3RvbW9iajE2L1N0YXRpY0xhYmVsLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMzE0MmI1Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvaWNvbnMvZnVsbC9jdXN0b21vYmoxNi9TdGF0aWNMYWJlbC5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvaWNvbnMvZnVsbC9jdXN0b21vYmoxNi9TdHJpbmdWYWx1ZS5naWYgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9pY29ucy9mdWxsL2N1c3RvbW9iajE2L1N0cmluZ1ZhbHVlLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMTA3ZjllCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvaWNvbnMvZnVsbC9jdXN0b21vYmoxNi9TdHJpbmdWYWx1ZS5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvaWNvbnMvZnVsbC9jdXN0b21vYmoxNi9UcmlnZ2VyLmdpZiBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL2ljb25zL2Z1bGwvY3VzdG9tb2JqMTYvVHJpZ2dlci5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTMxNjAzOAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL2ljb25zL2Z1bGwvY3VzdG9tb2JqMTYvVHJpZ2dlci5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvaWNvbnMvZnVsbC9vYmoxNi8uY3ZzaWdub3JlIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvaWNvbnMvZnVsbC9vYmoxNi8uY3ZzaWdub3JlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA4NWU4YmEKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9pY29ucy9mdWxsL29iajE2Ly5jdnNpZ25vcmUKQEAgLTAsMCArMSBAQAorVGh1bWJzLmRiCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9pY29ucy9mdWxsL29iajE2L0Fic29sdXRlVGltZVRlc3QuZ2lmIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvaWNvbnMvZnVsbC9vYmoxNi9BYnNvbHV0ZVRpbWVUZXN0LmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZGQzYjc2Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvaWNvbnMvZnVsbC9vYmoxNi9BYnNvbHV0ZVRpbWVUZXN0LmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9pY29ucy9mdWxsL29iajE2L0FuZC5naWYgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9pY29ucy9mdWxsL29iajE2L0FuZC5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTM1MDBkYQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL2ljb25zL2Z1bGwvb2JqMTYvQW5kLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9pY29ucy9mdWxsL29iajE2L0NvbW1vbk1vZGVsRmlsZS5naWYgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9pY29ucy9mdWxsL29iajE2L0NvbW1vbk1vZGVsRmlsZS5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjJlYzc1YgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL2ljb25zL2Z1bGwvb2JqMTYvQ29tbW9uTW9kZWxGaWxlLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9pY29ucy9mdWxsL29iajE2L0RvdWJsZU1vZGlmaWVyLmdpZiBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL2ljb25zL2Z1bGwvb2JqMTYvRG91YmxlTW9kaWZpZXIuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM4ZDM4MWYKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9pY29ucy9mdWxsL29iajE2L0RvdWJsZU1vZGlmaWVyLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9pY29ucy9mdWxsL29iajE2L0RvdWJsZVZhbHVlLmdpZiBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL2ljb25zL2Z1bGwvb2JqMTYvRG91YmxlVmFsdWUuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIxMjRmM2UKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9pY29ucy9mdWxsL29iajE2L0RvdWJsZVZhbHVlLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9pY29ucy9mdWxsL29iajE2L0RvdWJsZVZhbHVlTGlzdC5naWYgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9pY29ucy9mdWxsL29iajE2L0RvdWJsZVZhbHVlTGlzdC5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzY3M2E1MgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL2ljb25zL2Z1bGwvb2JqMTYvRG91YmxlVmFsdWVMaXN0LmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9pY29ucy9mdWxsL29iajE2L0RvdWJsZVZhbHVlTWF0cml4LmdpZiBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL2ljb25zL2Z1bGwvb2JqMTYvRG91YmxlVmFsdWVNYXRyaXguZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmExN2RjN2QKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9pY29ucy9mdWxsL29iajE2L0RvdWJsZVZhbHVlTWF0cml4LmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9pY29ucy9mdWxsL29iajE2L0VsYXBzZWRUaW1lVGVzdC5naWYgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9pY29ucy9mdWxsL29iajE2L0VsYXBzZWRUaW1lVGVzdC5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTI1MGZlYwotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL2ljb25zL2Z1bGwvb2JqMTYvRWxhcHNlZFRpbWVUZXN0LmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9pY29ucy9mdWxsL29iajE2L0V4Y2hhbmdlLmdpZiBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL2ljb25zL2Z1bGwvb2JqMTYvRXhjaGFuZ2UuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMwZjBjNDgKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9pY29ucy9mdWxsL29iajE2L0V4Y2hhbmdlLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9pY29ucy9mdWxsL29iajE2L0ZhbHNlLmdpZiBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL2ljb25zL2Z1bGwvb2JqMTYvRmFsc2UuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg5YWQ1ZGEKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9pY29ucy9mdWxsL29iajE2L0ZhbHNlLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9pY29ucy9mdWxsL29iajE2L0dyYXBoTW9kZWxGaWxlLmdpZiBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL2ljb25zL2Z1bGwvb2JqMTYvR3JhcGhNb2RlbEZpbGUuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcwMGIwNjYKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9pY29ucy9mdWxsL29iajE2L0dyYXBoTW9kZWxGaWxlLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9pY29ucy9mdWxsL29iajE2L0dyYXBoUGFydGl0aW9uZXIuZ2lmIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvaWNvbnMvZnVsbC9vYmoxNi9HcmFwaFBhcnRpdGlvbmVyLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MzUwMGRhCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvaWNvbnMvZnVsbC9vYmoxNi9HcmFwaFBhcnRpdGlvbmVyLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9pY29ucy9mdWxsL29iajE2L0lkZW50aWZpYWJsZS5naWYgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9pY29ucy9mdWxsL29iajE2L0lkZW50aWZpYWJsZS5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2MyYWFhYwotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL2ljb25zL2Z1bGwvb2JqMTYvSWRlbnRpZmlhYmxlLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9pY29ucy9mdWxsL29iajE2L0lkZW50aWZpYWJsZUZpbHRlci5naWYgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9pY29ucy9mdWxsL29iajE2L0lkZW50aWZpYWJsZUZpbHRlci5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWE5YmM3NQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL2ljb25zL2Z1bGwvb2JqMTYvSWRlbnRpZmlhYmxlRmlsdGVyLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9pY29ucy9mdWxsL29iajE2L0lkZW50aWZpYWJsZVByZWRpY2F0ZUV4cHJlc3Npb24uZ2lmIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvaWNvbnMvZnVsbC9vYmoxNi9JZGVudGlmaWFibGVQcmVkaWNhdGVFeHByZXNzaW9uLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MzllYmJmCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvaWNvbnMvZnVsbC9vYmoxNi9JZGVudGlmaWFibGVQcmVkaWNhdGVFeHByZXNzaW9uLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9pY29ucy9mdWxsL29iajE2L0ludGVnZXJNb2RpZmllci5naWYgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9pY29ucy9mdWxsL29iajE2L0ludGVnZXJNb2RpZmllci5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOThiMzUxZgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL2ljb25zL2Z1bGwvb2JqMTYvSW50ZWdlck1vZGlmaWVyLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9pY29ucy9mdWxsL29iajE2L0xvZ2dlci5naWYgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9pY29ucy9mdWxsL29iajE2L0xvZ2dlci5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2I3YzQyOAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL2ljb25zL2Z1bGwvb2JqMTYvTG9nZ2VyLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9pY29ucy9mdWxsL29iajE2L0xvbmdNb2RpZmllci5naWYgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9pY29ucy9mdWxsL29iajE2L0xvbmdNb2RpZmllci5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTE3ZGM3ZAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL2ljb25zL2Z1bGwvb2JqMTYvTG9uZ01vZGlmaWVyLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9pY29ucy9mdWxsL29iajE2L01vZGVsTW9kZWxGaWxlLmdpZiBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL2ljb25zL2Z1bGwvb2JqMTYvTW9kZWxNb2RlbEZpbGUuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNkNjE3ZTIKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9pY29ucy9mdWxsL29iajE2L01vZGVsTW9kZWxGaWxlLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9pY29ucy9mdWxsL29iajE2L05PUE1vZGlmaWVyLmdpZiBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL2ljb25zL2Z1bGwvb2JqMTYvTk9QTW9kaWZpZXIuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJhZGFhYjAKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9pY29ucy9mdWxsL29iajE2L05PUE1vZGlmaWVyLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9pY29ucy9mdWxsL29iajE2L05vZGVMYWJlbC5naWYgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9pY29ucy9mdWxsL29iajE2L05vZGVMYWJlbC5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzAwYWVkZgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL2ljb25zL2Z1bGwvb2JqMTYvTm9kZUxhYmVsLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9pY29ucy9mdWxsL29iajE2L05vdC5naWYgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9pY29ucy9mdWxsL29iajE2L05vdC5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODlhZDVkYQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL2ljb25zL2Z1bGwvb2JqMTYvTm90LmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9pY29ucy9mdWxsL29iajE2L09yLmdpZiBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL2ljb25zL2Z1bGwvb2JqMTYvT3IuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM2NzNhNTIKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9pY29ucy9mdWxsL29iajE2L09yLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9pY29ucy9mdWxsL29iajE2L1ByZWRpY2F0ZS5naWYgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9pY29ucy9mdWxsL29iajE2L1ByZWRpY2F0ZS5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2JhYzRmZAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL2ljb25zL2Z1bGwvb2JqMTYvUHJlZGljYXRlLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9pY29ucy9mdWxsL29iajE2L1ByZWRpY2F0ZUV4cHJlc3Npb24uZ2lmIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvaWNvbnMvZnVsbC9vYmoxNi9QcmVkaWNhdGVFeHByZXNzaW9uLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMzhmYjhkCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvaWNvbnMvZnVsbC9vYmoxNi9QcmVkaWNhdGVFeHByZXNzaW9uLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9pY29ucy9mdWxsL29iajE2L1ByZWRpY2F0ZVJlZmVyZW5jZS5naWYgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9pY29ucy9mdWxsL29iajE2L1ByZWRpY2F0ZVJlZmVyZW5jZS5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjEyNGYzZQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL2ljb25zL2Z1bGwvb2JqMTYvUHJlZGljYXRlUmVmZXJlbmNlLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9pY29ucy9mdWxsL29iajE2L1JhbmdlTW9kaWZpZXIuZ2lmIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvaWNvbnMvZnVsbC9vYmoxNi9SYW5nZU1vZGlmaWVyLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMTdkYzdkCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvaWNvbnMvZnVsbC9vYmoxNi9SYW5nZU1vZGlmaWVyLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9pY29ucy9mdWxsL29iajE2L1NURU1UaW1lLmdpZiBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL2ljb25zL2Z1bGwvb2JqMTYvU1RFTVRpbWUuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJhZGFhYjAKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9pY29ucy9mdWxsL29iajE2L1NURU1UaW1lLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9pY29ucy9mdWxsL29iajE2L1NURU1UaW1lTW9kaWZpZXIuZ2lmIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvaWNvbnMvZnVsbC9vYmoxNi9TVEVNVGltZU1vZGlmaWVyLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YzJhYWFjCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvaWNvbnMvZnVsbC9vYmoxNi9TVEVNVGltZU1vZGlmaWVyLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9pY29ucy9mdWxsL29iajE2L1NjZW5hcmlvTW9kZWxGaWxlLmdpZiBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL2ljb25zL2Z1bGwvb2JqMTYvU2NlbmFyaW9Nb2RlbEZpbGUuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ5MThlYWEKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9pY29ucy9mdWxsL29iajE2L1NjZW5hcmlvTW9kZWxGaWxlLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9pY29ucy9mdWxsL29iajE2L1NlcXVlbmNlTW9kaWZpZXIuZ2lmIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvaWNvbnMvZnVsbC9vYmoxNi9TZXF1ZW5jZU1vZGlmaWVyLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZTIyNDYzCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvaWNvbnMvZnVsbC9vYmoxNi9TZXF1ZW5jZU1vZGlmaWVyLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9pY29ucy9mdWxsL29iajE2L1NpbXBsZUdyYXBoUGFydGl0aW9uZXIuZ2lmIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvaWNvbnMvZnVsbC9vYmoxNi9TaW1wbGVHcmFwaFBhcnRpdGlvbmVyLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNDE0ZmU5Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvaWNvbnMvZnVsbC9vYmoxNi9TaW1wbGVHcmFwaFBhcnRpdGlvbmVyLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9pY29ucy9mdWxsL29iajE2L1NvbHZlci5naWYgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9pY29ucy9mdWxsL29iajE2L1NvbHZlci5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOThiMzUxZgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL2ljb25zL2Z1bGwvb2JqMTYvU29sdmVyLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9pY29ucy9mdWxsL29iajE2L1NxdWFyZUdyYXBoTGF0dGljZUdlbmVyYXRvci5naWYgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9pY29ucy9mdWxsL29iajE2L1NxdWFyZUdyYXBoTGF0dGljZUdlbmVyYXRvci5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzM5ZWJiZgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL2ljb25zL2Z1bGwvb2JqMTYvU3F1YXJlR3JhcGhMYXR0aWNlR2VuZXJhdG9yLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9pY29ucy9mdWxsL29iajE2L1N0cmluZ1ZhbHVlLmdpZiBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL2ljb25zL2Z1bGwvb2JqMTYvU3RyaW5nVmFsdWUuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM0MTRmZTkKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9pY29ucy9mdWxsL29iajE2L1N0cmluZ1ZhbHVlLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9pY29ucy9mdWxsL29iajE2L1N0cmluZ1ZhbHVlTGlzdC5naWYgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9pY29ucy9mdWxsL29iajE2L1N0cmluZ1ZhbHVlTGlzdC5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzM4ZmI4ZAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL2ljb25zL2Z1bGwvb2JqMTYvU3RyaW5nVmFsdWVMaXN0LmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9pY29ucy9mdWxsL29iajE2L1Rlc3QuZ2lmIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvaWNvbnMvZnVsbC9vYmoxNi9UZXN0LmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NTczMWZlCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvaWNvbnMvZnVsbC9vYmoxNi9UZXN0LmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9pY29ucy9mdWxsL29iajE2L1RyaWdnZXIuZ2lmIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvaWNvbnMvZnVsbC9vYmoxNi9UcmlnZ2VyLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYTU4YTY1Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvaWNvbnMvZnVsbC9vYmoxNi9UcmlnZ2VyLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9pY29ucy9mdWxsL29iajE2L1RydWUuZ2lmIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvaWNvbnMvZnVsbC9vYmoxNi9UcnVlLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NTczMWZlCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvaWNvbnMvZnVsbC9vYmoxNi9UcnVlLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9pY29ucy9mdWxsL3dpemJhbi9OZXdDb21tb24uZ2lmIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvaWNvbnMvZnVsbC93aXpiYW4vTmV3Q29tbW9uLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNTk3MDRjCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvaWNvbnMvZnVsbC93aXpiYW4vTmV3Q29tbW9uLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9pY29ucy9mdWxsL3dpemJhbi9OZXdHcmFwaC5naWYgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9pY29ucy9mdWxsL3dpemJhbi9OZXdHcmFwaC5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjM4MjllZAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL2ljb25zL2Z1bGwvd2l6YmFuL05ld0dyYXBoLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9pY29ucy9mdWxsL3dpemJhbi9OZXdNb2RlbC5naWYgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9pY29ucy9mdWxsL3dpemJhbi9OZXdNb2RlbC5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGNmN2Y4OQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL2ljb25zL2Z1bGwvd2l6YmFuL05ld01vZGVsLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9pY29ucy9mdWxsL3dpemJhbi9OZXdTY2VuYXJpby5naWYgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9pY29ucy9mdWxsL3dpemJhbi9OZXdTY2VuYXJpby5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTg1ZjFkYQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL2ljb25zL2Z1bGwvd2l6YmFuL05ld1NjZW5hcmlvLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9tb2RlbC9jb21tb24uZWNvcmUgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9tb2RlbC9jb21tb24uZWNvcmUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjQyMmU2NwotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL21vZGVsL2NvbW1vbi5lY29yZQpAQCAtMCwwICsxLDcyIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/Pg0KKzxlY29yZTpFUGFja2FnZSB4bWk6dmVyc2lvbj0iMi4wIg0KKyAgICB4bWxuczp4bWk9Imh0dHA6Ly93d3cub21nLm9yZy9YTUkiIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiDQorICAgIHhtbG5zOmVjb3JlPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2VtZi8yMDAyL0Vjb3JlIiBuYW1lPSJjb21tb24iDQorICAgIG5zVVJJPSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9jb21tb24uZWNvcmUiIG5zUHJlZml4PSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uIj4NCisgIDxlQ2xhc3NpZmllcnMgeHNpOnR5cGU9ImVjb3JlOkVDbGFzcyIgbmFtZT0iRHVibGluQ29yZSI+DQorICAgIDxlT3BlcmF0aW9ucyBuYW1lPSJwb3B1bGF0ZSIgZVR5cGU9IiMvL0R1YmxpbkNvcmUiLz4NCisgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVBdHRyaWJ1dGUiIG5hbWU9InRpdGxlIiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDIvRWNvcmUjLy9FU3RyaW5nIi8+DQorICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJpZGVudGlmaWVyIiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDIvRWNvcmUjLy9FU3RyaW5nIi8+DQorICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJkZXNjcmlwdGlvbiIgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2VtZi8yMDAyL0Vjb3JlIy8vRVN0cmluZyIvPg0KKyAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0iY3JlYXRvciIgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2VtZi8yMDAyL0Vjb3JlIy8vRVN0cmluZyIvPg0KKyAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0iZGF0ZSIgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2VtZi8yMDAyL0Vjb3JlIy8vRVN0cmluZyIvPg0KKyAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0iZm9ybWF0IiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDIvRWNvcmUjLy9FU3RyaW5nIi8+DQorICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJwdWJsaXNoZXIiIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9lbWYvMjAwMi9FY29yZSMvL0VTdHJpbmciLz4NCisgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVBdHRyaWJ1dGUiIG5hbWU9ImNvdmVyYWdlIiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDIvRWNvcmUjLy9FU3RyaW5nIi8+DQorICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJjb250cmlidXRvciIgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2VtZi8yMDAyL0Vjb3JlIy8vRVN0cmluZyIvPg0KKyAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0icmVsYXRpb24iIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9lbWYvMjAwMi9FY29yZSMvL0VTdHJpbmciLz4NCisgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVBdHRyaWJ1dGUiIG5hbWU9InJpZ2h0cyIgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2VtZi8yMDAyL0Vjb3JlIy8vRVN0cmluZyIvPg0KKyAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0ic291cmNlIiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDIvRWNvcmUjLy9FU3RyaW5nIi8+DQorICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJzdWJqZWN0IiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDIvRWNvcmUjLy9FU3RyaW5nIi8+DQorICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJ0eXBlIiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDIvRWNvcmUjLy9FU3RyaW5nIi8+DQorICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJsYW5ndWFnZSIgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2VtZi8yMDAyL0Vjb3JlIy8vRVN0cmluZyIvPg0KKyAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0iYmlibGlvZ3JhcGhpY0NpdGF0aW9uIg0KKyAgICAgICAgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2VtZi8yMDAyL0Vjb3JlIy8vRVN0cmluZyIvPg0KKyAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0iY3JlYXRlZCIgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2VtZi8yMDAyL0Vjb3JlIy8vRVN0cmluZyIvPg0KKyAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0ibGljZW5zZSIgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2VtZi8yMDAyL0Vjb3JlIy8vRVN0cmluZyIvPg0KKyAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0icmVxdWlyZWQiIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9lbWYvMjAwMi9FY29yZSMvL0VTdHJpbmciLz4NCisgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVBdHRyaWJ1dGUiIG5hbWU9InNwYXRpYWwiIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9lbWYvMjAwMi9FY29yZSMvL0VTdHJpbmciLz4NCisgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVBdHRyaWJ1dGUiIG5hbWU9InZhbGlkIiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDIvRWNvcmUjLy9FU3RyaW5nIi8+DQorICA8L2VDbGFzc2lmaWVycz4NCisgIDxlQ2xhc3NpZmllcnMgeHNpOnR5cGU9ImVjb3JlOkVDbGFzcyIgbmFtZT0iSWRlbnRpZmlhYmxlIiBhYnN0cmFjdD0idHJ1ZSI+DQorICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJ1UkkiIGxvd2VyQm91bmQ9IjEiIGVUeXBlPSIjLy9VUkkiLz4NCisgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVBdHRyaWJ1dGUiIG5hbWU9InR5cGVVUkkiIGxvd2VyQm91bmQ9IjEiDQorICAgICAgICBlVHlwZT0iIy8vVVJJIi8+DQorICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFUmVmZXJlbmNlIiBuYW1lPSJkdWJsaW5Db3JlIiBsb3dlckJvdW5kPSIxIg0KKyAgICAgICAgZVR5cGU9IiMvL0R1YmxpbkNvcmUiIGNvbnRhaW5tZW50PSJ0cnVlIiByZXNvbHZlUHJveGllcz0iZmFsc2UiLz4NCisgICAgPGVHZW5lcmljU3VwZXJUeXBlcyBlQ2xhc3NpZmllcj0iIy8vQ29tcGFyYWJsZSI+DQorICAgICAgPGVUeXBlQXJndW1lbnRzIGVDbGFzc2lmaWVyPSIjLy9JZGVudGlmaWFibGUiLz4NCisgICAgPC9lR2VuZXJpY1N1cGVyVHlwZXM+DQorICAgIDxlR2VuZXJpY1N1cGVyVHlwZXMgZUNsYXNzaWZpZXI9IiMvL1Nhbml0eUNoZWNrZXIiLz4NCisgIDwvZUNsYXNzaWZpZXJzPg0KKyAgPGVDbGFzc2lmaWVycyB4c2k6dHlwZT0iZWNvcmU6RUNsYXNzIiBuYW1lPSJDb21wYXJhYmxlIiBpbnN0YW5jZUNsYXNzTmFtZT0iamF2YS5sYW5nLkNvbXBhcmFibGUiDQorICAgICAgYWJzdHJhY3Q9InRydWUiIGludGVyZmFjZT0idHJ1ZSI+DQorICAgIDxlVHlwZVBhcmFtZXRlcnMgbmFtZT0iVCIvPg0KKyAgPC9lQ2xhc3NpZmllcnM+DQorICA8ZUNsYXNzaWZpZXJzIHhzaTp0eXBlPSJlY29yZTpFRGF0YVR5cGUiIG5hbWU9IlVSSSIgaW5zdGFuY2VDbGFzc05hbWU9Im9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5VUkkiLz4NCisgIDxlQ2xhc3NpZmllcnMgeHNpOnR5cGU9ImVjb3JlOkVDbGFzcyIgbmFtZT0iSWRlbnRpZmlhYmxlRmlsdGVyIi8+DQorICA8ZUNsYXNzaWZpZXJzIHhzaTp0eXBlPSJlY29yZTpFQ2xhc3MiIG5hbWU9IkRvdWJsZVZhbHVlTGlzdCI+DQorICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFUmVmZXJlbmNlIiBuYW1lPSJ2YWx1ZXMiIHVwcGVyQm91bmQ9Ii0xIg0KKyAgICAgICAgZVR5cGU9IiMvL0RvdWJsZVZhbHVlIiBjb250YWlubWVudD0idHJ1ZSIvPg0KKyAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0iaWRlbnRpZmllciIgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLmVtZi5lY29yZS9tb2RlbC9FY29yZS5lY29yZSMvL0VTdHJpbmciLz4NCisgIDwvZUNsYXNzaWZpZXJzPg0KKyAgPGVDbGFzc2lmaWVycyB4c2k6dHlwZT0iZWNvcmU6RUNsYXNzIiBuYW1lPSJEb3VibGVWYWx1ZU1hdHJpeCI+DQorICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFUmVmZXJlbmNlIiBuYW1lPSJ2YWx1ZUxpc3RzIiB1cHBlckJvdW5kPSItMSINCisgICAgICAgIGVUeXBlPSIjLy9Eb3VibGVWYWx1ZUxpc3QiIGNvbnRhaW5tZW50PSJ0cnVlIi8+DQorICA8L2VDbGFzc2lmaWVycz4NCisgIDxlQ2xhc3NpZmllcnMgeHNpOnR5cGU9ImVjb3JlOkVDbGFzcyIgbmFtZT0iRG91YmxlVmFsdWUiIGVTdXBlclR5cGVzPSJtb2RpZmllci5lY29yZSMvL01vZGlmaWFibGUiPg0KKyAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0iaWRlbnRpZmllciIgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLmVtZi5lY29yZS9tb2RlbC9FY29yZS5lY29yZSMvL0VTdHJpbmciLz4NCisgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVBdHRyaWJ1dGUiIG5hbWU9InZhbHVlIiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIHBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2UuZW1mLmVjb3JlL21vZGVsL0Vjb3JlLmVjb3JlIy8vRURvdWJsZSINCisgICAgICAgIGRlZmF1bHRWYWx1ZUxpdGVyYWw9IjAuMCIvPg0KKyAgPC9lQ2xhc3NpZmllcnM+DQorICA8ZUNsYXNzaWZpZXJzIHhzaTp0eXBlPSJlY29yZTpFQ2xhc3MiIG5hbWU9IlN0cmluZ1ZhbHVlTGlzdCI+DQorICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFUmVmZXJlbmNlIiBuYW1lPSJ2YWx1ZXMiIHVwcGVyQm91bmQ9Ii0xIg0KKyAgICAgICAgZVR5cGU9IiMvL1N0cmluZ1ZhbHVlIiBjb250YWlubWVudD0idHJ1ZSIvPg0KKyAgPC9lQ2xhc3NpZmllcnM+DQorICA8ZUNsYXNzaWZpZXJzIHhzaTp0eXBlPSJlY29yZTpFQ2xhc3MiIG5hbWU9IlN0cmluZ1ZhbHVlIiBlU3VwZXJUeXBlcz0ibW9kaWZpZXIuZWNvcmUjLy9Nb2RpZmlhYmxlIj4NCisgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVBdHRyaWJ1dGUiIG5hbWU9InZhbHVlIiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIHBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2UuZW1mLmVjb3JlL21vZGVsL0Vjb3JlLmVjb3JlIy8vRVN0cmluZyIvPg0KKyAgPC9lQ2xhc3NpZmllcnM+DQorICA8ZUNsYXNzaWZpZXJzIHhzaTp0eXBlPSJlY29yZTpFQ2xhc3MiIG5hbWU9IlNhbml0eUNoZWNrZXIiIGFic3RyYWN0PSJ0cnVlIiBpbnRlcmZhY2U9InRydWUiPg0KKyAgICA8ZU9wZXJhdGlvbnMgbmFtZT0ic2FuZSIgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLmVtZi5lY29yZS9tb2RlbC9FY29yZS5lY29yZSMvL0VCb29sZWFuIi8+DQorICA8L2VDbGFzc2lmaWVycz4NCis8L2Vjb3JlOkVQYWNrYWdlPg0KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL21vZGVsL2NvcmUuZ2VubW9kZWwgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9tb2RlbC9jb3JlLmdlbm1vZGVsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJlNTZkYzcKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9tb2RlbC9jb3JlLmdlbm1vZGVsCkBAIC0wLDAgKzEsNTgxIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPGdlbm1vZGVsOkdlbk1vZGVsIHhtaTp2ZXJzaW9uPSIyLjAiCisgICAgeG1sbnM6eG1pPSJodHRwOi8vd3d3Lm9tZy5vcmcvWE1JIiB4bWxuczplY29yZT0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9lbWYvMjAwMi9FY29yZSIKKyAgICB4bWxuczpnZW5tb2RlbD0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9lbWYvMjAwMi9HZW5Nb2RlbCIgbW9kZWxEaXJlY3Rvcnk9Ii9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjIgorICAgIGVkaXREaXJlY3Rvcnk9Ii9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjIiBlZGl0b3JEaXJlY3Rvcnk9Ii9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYyIKKyAgICBtb2RlbFBsdWdpbklEPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUiIG1vZGVsTmFtZT0iQ29yZSIgbW9kZWxQbHVnaW5DbGFzcz0iIiBlZGl0b3JQbHVnaW5DbGFzcz0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5wcmVzZW50YXRpb24uQ29yZUVkaXRvclBsdWdpbiIKKyAgICBub25OTFNNYXJrZXJzPSJ0cnVlIiB0ZXN0c0RpcmVjdG9yeT0iL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9zcmMiIGltcG9ydGVySUQ9Im9yZy5lY2xpcHNlLmVtZi5pbXBvcnRlci5lY29yZSIKKyAgICBjb21wbGlhbmNlTGV2ZWw9IjUuMCIgY29weXJpZ2h0RmllbGRzPSJmYWxzZSIgcnVudGltZVZlcnNpb249IjIuNiIgdXNlZEdlblBhY2thZ2VzPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLmVtZi5lY29yZS9tb2RlbC9FY29yZS5nZW5tb2RlbCMvL2Vjb3JlIj4KKyAgPGZvcmVpZ25Nb2RlbD5jb21tb24uZWNvcmU8L2ZvcmVpZ25Nb2RlbD4KKyAgPGZvcmVpZ25Nb2RlbD5leHBlcmltZW50LmVjb3JlPC9mb3JlaWduTW9kZWw+CisgIDxmb3JlaWduTW9kZWw+Z3JhcGguZWNvcmU8L2ZvcmVpZ25Nb2RlbD4KKyAgPGZvcmVpZ25Nb2RlbD5tb2RlbC5lY29yZTwvZm9yZWlnbk1vZGVsPgorICA8Zm9yZWlnbk1vZGVsPm1vZGlmaWVyLmVjb3JlPC9mb3JlaWduTW9kZWw+CisgIDxmb3JlaWduTW9kZWw+cHJlZGljYXRlLmVjb3JlPC9mb3JlaWduTW9kZWw+CisgIDxmb3JlaWduTW9kZWw+c2NlbmFyaW8uZWNvcmU8L2ZvcmVpZ25Nb2RlbD4KKyAgPGZvcmVpZ25Nb2RlbD5zZXF1ZW5jZXIuZWNvcmU8L2ZvcmVpZ25Nb2RlbD4KKyAgPGZvcmVpZ25Nb2RlbD50cmlnZ2VyLmVjb3JlPC9mb3JlaWduTW9kZWw+CisgIDxmb3JlaWduTW9kZWw+c29sdmVyLmVjb3JlPC9mb3JlaWduTW9kZWw+CisgIDxmb3JlaWduTW9kZWw+bG9nZ2VyLmVjb3JlPC9mb3JlaWduTW9kZWw+CisgIDxnZW5QYWNrYWdlcyBwcmVmaXg9IkNvbW1vbiIgYmFzZVBhY2thZ2U9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZSIgZGlzcG9zYWJsZVByb3ZpZGVyRmFjdG9yeT0idHJ1ZSIKKyAgICAgIGdlbmVyYXRlRXhhbXBsZUNsYXNzPSJmYWxzZSIgbXVsdGlwbGVFZGl0b3JQYWdlcz0iZmFsc2UiIGdlbmVyYXRlTW9kZWxXaXphcmQ9ImZhbHNlIgorICAgICAgY29udGVudFR5cGVJZGVudGlmaWVyPSIiIGVjb3JlUGFja2FnZT0iY29tbW9uLmVjb3JlIy8iPgorICAgIDxnZW5EYXRhVHlwZXMgZWNvcmVEYXRhVHlwZT0iY29tbW9uLmVjb3JlIy8vVVJJIi8+CisgICAgPGdlbkNsYXNzZXMgaW1hZ2U9ImZhbHNlIiBlY29yZUNsYXNzPSJjb21tb24uZWNvcmUjLy9EdWJsaW5Db3JlIj4KKyAgICAgIDxnZW5GZWF0dXJlcyBjcmVhdGVDaGlsZD0iZmFsc2UiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RUF0dHJpYnV0ZSBjb21tb24uZWNvcmUjLy9EdWJsaW5Db3JlL3RpdGxlIi8+CisgICAgICA8Z2VuRmVhdHVyZXMgcHJvcGVydHk9IlJlYWRvbmx5IiBjcmVhdGVDaGlsZD0iZmFsc2UiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RUF0dHJpYnV0ZSBjb21tb24uZWNvcmUjLy9EdWJsaW5Db3JlL2lkZW50aWZpZXIiLz4KKyAgICAgIDxnZW5GZWF0dXJlcyBjcmVhdGVDaGlsZD0iZmFsc2UiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RUF0dHJpYnV0ZSBjb21tb24uZWNvcmUjLy9EdWJsaW5Db3JlL2Rlc2NyaXB0aW9uIi8+CisgICAgICA8Z2VuRmVhdHVyZXMgY3JlYXRlQ2hpbGQ9ImZhbHNlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVBdHRyaWJ1dGUgY29tbW9uLmVjb3JlIy8vRHVibGluQ29yZS9jcmVhdG9yIi8+CisgICAgICA8Z2VuRmVhdHVyZXMgY3JlYXRlQ2hpbGQ9ImZhbHNlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVBdHRyaWJ1dGUgY29tbW9uLmVjb3JlIy8vRHVibGluQ29yZS9kYXRlIi8+CisgICAgICA8Z2VuRmVhdHVyZXMgcHJvcGVydHk9IlJlYWRvbmx5IiBjcmVhdGVDaGlsZD0iZmFsc2UiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RUF0dHJpYnV0ZSBjb21tb24uZWNvcmUjLy9EdWJsaW5Db3JlL2Zvcm1hdCIvPgorICAgICAgPGdlbkZlYXR1cmVzIGNyZWF0ZUNoaWxkPSJmYWxzZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFQXR0cmlidXRlIGNvbW1vbi5lY29yZSMvL0R1YmxpbkNvcmUvcHVibGlzaGVyIi8+CisgICAgICA8Z2VuRmVhdHVyZXMgY3JlYXRlQ2hpbGQ9ImZhbHNlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVBdHRyaWJ1dGUgY29tbW9uLmVjb3JlIy8vRHVibGluQ29yZS9jb3ZlcmFnZSIvPgorICAgICAgPGdlbkZlYXR1cmVzIGNyZWF0ZUNoaWxkPSJmYWxzZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFQXR0cmlidXRlIGNvbW1vbi5lY29yZSMvL0R1YmxpbkNvcmUvY29udHJpYnV0b3IiLz4KKyAgICAgIDxnZW5GZWF0dXJlcyBjcmVhdGVDaGlsZD0iZmFsc2UiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RUF0dHJpYnV0ZSBjb21tb24uZWNvcmUjLy9EdWJsaW5Db3JlL3JlbGF0aW9uIi8+CisgICAgICA8Z2VuRmVhdHVyZXMgY3JlYXRlQ2hpbGQ9ImZhbHNlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVBdHRyaWJ1dGUgY29tbW9uLmVjb3JlIy8vRHVibGluQ29yZS9yaWdodHMiLz4KKyAgICAgIDxnZW5GZWF0dXJlcyBjcmVhdGVDaGlsZD0iZmFsc2UiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RUF0dHJpYnV0ZSBjb21tb24uZWNvcmUjLy9EdWJsaW5Db3JlL3NvdXJjZSIvPgorICAgICAgPGdlbkZlYXR1cmVzIGNyZWF0ZUNoaWxkPSJmYWxzZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFQXR0cmlidXRlIGNvbW1vbi5lY29yZSMvL0R1YmxpbkNvcmUvc3ViamVjdCIvPgorICAgICAgPGdlbkZlYXR1cmVzIHByb3BlcnR5PSJSZWFkb25seSIgY3JlYXRlQ2hpbGQ9ImZhbHNlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVBdHRyaWJ1dGUgY29tbW9uLmVjb3JlIy8vRHVibGluQ29yZS90eXBlIi8+CisgICAgICA8Z2VuRmVhdHVyZXMgY3JlYXRlQ2hpbGQ9ImZhbHNlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVBdHRyaWJ1dGUgY29tbW9uLmVjb3JlIy8vRHVibGluQ29yZS9sYW5ndWFnZSIvPgorICAgICAgPGdlbkZlYXR1cmVzIGNyZWF0ZUNoaWxkPSJmYWxzZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFQXR0cmlidXRlIGNvbW1vbi5lY29yZSMvL0R1YmxpbkNvcmUvYmlibGlvZ3JhcGhpY0NpdGF0aW9uIi8+CisgICAgICA8Z2VuRmVhdHVyZXMgY3JlYXRlQ2hpbGQ9ImZhbHNlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVBdHRyaWJ1dGUgY29tbW9uLmVjb3JlIy8vRHVibGluQ29yZS9jcmVhdGVkIi8+CisgICAgICA8Z2VuRmVhdHVyZXMgY3JlYXRlQ2hpbGQ9ImZhbHNlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVBdHRyaWJ1dGUgY29tbW9uLmVjb3JlIy8vRHVibGluQ29yZS9saWNlbnNlIi8+CisgICAgICA8Z2VuRmVhdHVyZXMgY3JlYXRlQ2hpbGQ9ImZhbHNlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVBdHRyaWJ1dGUgY29tbW9uLmVjb3JlIy8vRHVibGluQ29yZS9yZXF1aXJlZCIvPgorICAgICAgPGdlbkZlYXR1cmVzIGNyZWF0ZUNoaWxkPSJmYWxzZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFQXR0cmlidXRlIGNvbW1vbi5lY29yZSMvL0R1YmxpbkNvcmUvc3BhdGlhbCIvPgorICAgICAgPGdlbkZlYXR1cmVzIGNyZWF0ZUNoaWxkPSJmYWxzZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFQXR0cmlidXRlIGNvbW1vbi5lY29yZSMvL0R1YmxpbkNvcmUvdmFsaWQiLz4KKyAgICAgIDxnZW5PcGVyYXRpb25zIGVjb3JlT3BlcmF0aW9uPSJjb21tb24uZWNvcmUjLy9EdWJsaW5Db3JlL3BvcHVsYXRlIi8+CisgICAgPC9nZW5DbGFzc2VzPgorICAgIDxnZW5DbGFzc2VzIGVjb3JlQ2xhc3M9ImNvbW1vbi5lY29yZSMvL0lkZW50aWZpYWJsZSI+CisgICAgICA8Z2VuRmVhdHVyZXMgY3JlYXRlQ2hpbGQ9ImZhbHNlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVBdHRyaWJ1dGUgY29tbW9uLmVjb3JlIy8vSWRlbnRpZmlhYmxlL3VSSSIvPgorICAgICAgPGdlbkZlYXR1cmVzIHByb3BlcnR5PSJSZWFkb25seSIgY3JlYXRlQ2hpbGQ9ImZhbHNlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVBdHRyaWJ1dGUgY29tbW9uLmVjb3JlIy8vSWRlbnRpZmlhYmxlL3R5cGVVUkkiLz4KKyAgICAgIDxnZW5GZWF0dXJlcyBwcm9wZXJ0eT0iTm9uZSIgY3JlYXRlQ2hpbGQ9ImZhbHNlIiBwcm9wZXJ0eUNhdGVnb3J5PSIiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RVJlZmVyZW5jZSBjb21tb24uZWNvcmUjLy9JZGVudGlmaWFibGUvZHVibGluQ29yZSIvPgorICAgICAgPGdlbk9wZXJhdGlvbnMgZWNvcmVPcGVyYXRpb249ImNvbW1vbi5lY29yZSMvL0lkZW50aWZpYWJsZS9zYW5lIi8+CisgICAgPC9nZW5DbGFzc2VzPgorICAgIDxnZW5DbGFzc2VzIGltYWdlPSJmYWxzZSIgZWNvcmVDbGFzcz0iY29tbW9uLmVjb3JlIy8vQ29tcGFyYWJsZSI+CisgICAgICA8Z2VuVHlwZVBhcmFtZXRlcnMgZWNvcmVUeXBlUGFyYW1ldGVyPSJjb21tb24uZWNvcmUjLy9Db21wYXJhYmxlL1QiLz4KKyAgICA8L2dlbkNsYXNzZXM+CisgICAgPGdlbkNsYXNzZXMgZWNvcmVDbGFzcz0iY29tbW9uLmVjb3JlIy8vSWRlbnRpZmlhYmxlRmlsdGVyIi8+CisgICAgPGdlbkNsYXNzZXMgZWNvcmVDbGFzcz0iY29tbW9uLmVjb3JlIy8vRG91YmxlVmFsdWVMaXN0Ij4KKyAgICAgIDxnZW5GZWF0dXJlcyBwcm9wZXJ0eT0iTm9uZSIgY2hpbGRyZW49InRydWUiIGNyZWF0ZUNoaWxkPSJ0cnVlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVSZWZlcmVuY2UgY29tbW9uLmVjb3JlIy8vRG91YmxlVmFsdWVMaXN0L3ZhbHVlcyIvPgorICAgICAgPGdlbkZlYXR1cmVzIGNyZWF0ZUNoaWxkPSJmYWxzZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFQXR0cmlidXRlIGNvbW1vbi5lY29yZSMvL0RvdWJsZVZhbHVlTGlzdC9pZGVudGlmaWVyIi8+CisgICAgPC9nZW5DbGFzc2VzPgorICAgIDxnZW5DbGFzc2VzIGVjb3JlQ2xhc3M9ImNvbW1vbi5lY29yZSMvL0RvdWJsZVZhbHVlTWF0cml4Ij4KKyAgICAgIDxnZW5GZWF0dXJlcyBwcm9wZXJ0eT0iTm9uZSIgY2hpbGRyZW49InRydWUiIGNyZWF0ZUNoaWxkPSJ0cnVlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVSZWZlcmVuY2UgY29tbW9uLmVjb3JlIy8vRG91YmxlVmFsdWVNYXRyaXgvdmFsdWVMaXN0cyIvPgorICAgIDwvZ2VuQ2xhc3Nlcz4KKyAgICA8Z2VuQ2xhc3NlcyBlY29yZUNsYXNzPSJjb21tb24uZWNvcmUjLy9Eb3VibGVWYWx1ZSI+CisgICAgICA8Z2VuRmVhdHVyZXMgY3JlYXRlQ2hpbGQ9ImZhbHNlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVBdHRyaWJ1dGUgY29tbW9uLmVjb3JlIy8vRG91YmxlVmFsdWUvaWRlbnRpZmllciIvPgorICAgICAgPGdlbkZlYXR1cmVzIGNyZWF0ZUNoaWxkPSJmYWxzZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFQXR0cmlidXRlIGNvbW1vbi5lY29yZSMvL0RvdWJsZVZhbHVlL3ZhbHVlIi8+CisgICAgPC9nZW5DbGFzc2VzPgorICAgIDxnZW5DbGFzc2VzIGVjb3JlQ2xhc3M9ImNvbW1vbi5lY29yZSMvL1N0cmluZ1ZhbHVlTGlzdCI+CisgICAgICA8Z2VuRmVhdHVyZXMgcHJvcGVydHk9Ik5vbmUiIGNoaWxkcmVuPSJ0cnVlIiBjcmVhdGVDaGlsZD0idHJ1ZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFUmVmZXJlbmNlIGNvbW1vbi5lY29yZSMvL1N0cmluZ1ZhbHVlTGlzdC92YWx1ZXMiLz4KKyAgICA8L2dlbkNsYXNzZXM+CisgICAgPGdlbkNsYXNzZXMgZWNvcmVDbGFzcz0iY29tbW9uLmVjb3JlIy8vU3RyaW5nVmFsdWUiPgorICAgICAgPGdlbkZlYXR1cmVzIGNyZWF0ZUNoaWxkPSJmYWxzZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFQXR0cmlidXRlIGNvbW1vbi5lY29yZSMvL1N0cmluZ1ZhbHVlL3ZhbHVlIi8+CisgICAgPC9nZW5DbGFzc2VzPgorICAgIDxnZW5DbGFzc2VzIGltYWdlPSJmYWxzZSIgZWNvcmVDbGFzcz0iY29tbW9uLmVjb3JlIy8vU2FuaXR5Q2hlY2tlciI+CisgICAgICA8Z2VuT3BlcmF0aW9ucyBlY29yZU9wZXJhdGlvbj0iY29tbW9uLmVjb3JlIy8vU2FuaXR5Q2hlY2tlci9zYW5lIi8+CisgICAgPC9nZW5DbGFzc2VzPgorICA8L2dlblBhY2thZ2VzPgorICA8Z2VuUGFja2FnZXMgcHJlZml4PSJFeHBlcmltZW50IiBiYXNlUGFja2FnZT0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlIiBkaXNwb3NhYmxlUHJvdmlkZXJGYWN0b3J5PSJ0cnVlIgorICAgICAgZ2VuZXJhdGVFeGFtcGxlQ2xhc3M9ImZhbHNlIiBtdWx0aXBsZUVkaXRvclBhZ2VzPSJmYWxzZSIgZ2VuZXJhdGVNb2RlbFdpemFyZD0iZmFsc2UiCisgICAgICBlY29yZVBhY2thZ2U9ImV4cGVyaW1lbnQuZWNvcmUjLyI+CisgICAgPGdlbkNsYXNzZXMgaW1hZ2U9ImZhbHNlIiBlY29yZUNsYXNzPSJleHBlcmltZW50LmVjb3JlIy8vRXhwZXJpbWVudCI+CisgICAgICA8Z2VuRmVhdHVyZXMgcHJvcGVydHk9Ik5vbmUiIGNoaWxkcmVuPSJ0cnVlIiBjcmVhdGVDaGlsZD0iZmFsc2UiIHByb3BlcnR5U29ydENob2ljZXM9InRydWUiCisgICAgICAgICAgZWNvcmVGZWF0dXJlPSJlY29yZTpFUmVmZXJlbmNlIGV4cGVyaW1lbnQuZWNvcmUjLy9FeHBlcmltZW50L21vZGlmaWVycyIvPgorICAgICAgPGdlbkZlYXR1cmVzIHByb3BlcnR5PSJSZWFkb25seSIgY3JlYXRlQ2hpbGQ9ImZhbHNlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVBdHRyaWJ1dGUgZXhwZXJpbWVudC5lY29yZSMvL0V4cGVyaW1lbnQvY29tcGxldGUiLz4KKyAgICAgIDxnZW5GZWF0dXJlcyBwcm9wZXJ0eT0iTm9uZSIgY2hpbGRyZW49InRydWUiIGNyZWF0ZUNoaWxkPSJmYWxzZSIgcHJvcGVydHlDYXRlZ29yeT0iIgorICAgICAgICAgIHByb3BlcnR5RGVzY3JpcHRpb249IiIgZWNvcmVGZWF0dXJlPSJlY29yZTpFUmVmZXJlbmNlIGV4cGVyaW1lbnQuZWNvcmUjLy9FeHBlcmltZW50L3NjZW5hcmlvIi8+CisgICAgICA8Z2VuT3BlcmF0aW9ucyBlY29yZU9wZXJhdGlvbj0iZXhwZXJpbWVudC5lY29yZSMvL0V4cGVyaW1lbnQvdXBkYXRlU2NlbmFyaW8iLz4KKyAgICAgIDxnZW5PcGVyYXRpb25zIGVjb3JlT3BlcmF0aW9uPSJleHBlcmltZW50LmVjb3JlIy8vRXhwZXJpbWVudC9pbml0U2NlbmFyaW8iLz4KKyAgICA8L2dlbkNsYXNzZXM+CisgIDwvZ2VuUGFja2FnZXM+CisgIDxnZW5QYWNrYWdlcyBwcmVmaXg9IkdyYXBoIiBiYXNlUGFja2FnZT0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlIiBkaXNwb3NhYmxlUHJvdmlkZXJGYWN0b3J5PSJ0cnVlIgorICAgICAgZ2VuZXJhdGVFeGFtcGxlQ2xhc3M9ImZhbHNlIiBtdWx0aXBsZUVkaXRvclBhZ2VzPSJmYWxzZSIgZ2VuZXJhdGVNb2RlbFdpemFyZD0iZmFsc2UiCisgICAgICBlY29yZVBhY2thZ2U9ImdyYXBoLmVjb3JlIy8iPgorICAgIDxnZW5FbnVtcyB0eXBlU2FmZUVudW1Db21wYXRpYmxlPSJmYWxzZSIgZWNvcmVFbnVtPSJncmFwaC5lY29yZSMvL0V4Y2hhbmdlVHlwZSI+CisgICAgICA8Z2VuRW51bUxpdGVyYWxzIGVjb3JlRW51bUxpdGVyYWw9ImdyYXBoLmVjb3JlIy8vRXhjaGFuZ2VUeXBlL0JJUlRIU19BTkRfREVBVEhTIi8+CisgICAgICA8Z2VuRW51bUxpdGVyYWxzIGVjb3JlRW51bUxpdGVyYWw9ImdyYXBoLmVjb3JlIy8vRXhjaGFuZ2VUeXBlL01JR1JBVElPTiIvPgorICAgICAgPGdlbkVudW1MaXRlcmFscyBlY29yZUVudW1MaXRlcmFsPSJncmFwaC5lY29yZSMvL0V4Y2hhbmdlVHlwZS9BR0lORyIvPgorICAgIDwvZ2VuRW51bXM+CisgICAgPGdlbkRhdGFUeXBlcyBlY29yZURhdGFUeXBlPSJncmFwaC5lY29yZSMvL0lsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiIvPgorICAgIDxnZW5DbGFzc2VzIGltYWdlPSJmYWxzZSIgZWNvcmVDbGFzcz0iZ3JhcGguZWNvcmUjLy9EeW5hbWljTGFiZWwiPgorICAgICAgPGdlbkZlYXR1cmVzIGNyZWF0ZUNoaWxkPSJmYWxzZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFQXR0cmlidXRlIGdyYXBoLmVjb3JlIy8vRHluYW1pY0xhYmVsL25leHRWYWx1ZVZhbGlkIi8+CisgICAgICA8Z2VuRmVhdHVyZXMgcHJvcGVydHk9Ik5vbmUiIGNyZWF0ZUNoaWxkPSJmYWxzZSIgcHJvcGVydHlEZXNjcmlwdGlvbj0iIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVSZWZlcmVuY2UgZ3JhcGguZWNvcmUjLy9EeW5hbWljTGFiZWwvbmV4dFZhbHVlIi8+CisgICAgICA8Z2VuRmVhdHVyZXMgcHJvcGVydHk9Ik5vbmUiIG5vdGlmeT0iZmFsc2UiIGNyZWF0ZUNoaWxkPSJmYWxzZSIgcHJvcGVydHlDYXRlZ29yeT0iIgorICAgICAgICAgIHByb3BlcnR5RGVzY3JpcHRpb249IiIgcHJvcGVydHlTb3J0Q2hvaWNlcz0idHJ1ZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFUmVmZXJlbmNlIGdyYXBoLmVjb3JlIy8vRHluYW1pY0xhYmVsL2RlY29yYXRvciIvPgorICAgICAgPGdlbk9wZXJhdGlvbnMgZWNvcmVPcGVyYXRpb249ImdyYXBoLmVjb3JlIy8vRHluYW1pY0xhYmVsL3Jlc2V0Ii8+CisgICAgICA8Z2VuT3BlcmF0aW9ucyBlY29yZU9wZXJhdGlvbj0iZ3JhcGguZWNvcmUjLy9EeW5hbWljTGFiZWwvc3dpdGNoVG9OZXh0VmFsdWUiLz4KKyAgICA8L2dlbkNsYXNzZXM+CisgICAgPGdlbkNsYXNzZXMgaW1hZ2U9ImZhbHNlIiBlY29yZUNsYXNzPSJncmFwaC5lY29yZSMvL0R5bmFtaWNOb2RlTGFiZWwiLz4KKyAgICA8Z2VuQ2xhc3NlcyBpbWFnZT0iZmFsc2UiIGVjb3JlQ2xhc3M9ImdyYXBoLmVjb3JlIy8vRWRnZSI+CisgICAgICA8Z2VuRmVhdHVyZXMgbm90aWZ5PSJmYWxzZSIgY3JlYXRlQ2hpbGQ9ImZhbHNlIiBwcm9wZXJ0eVNvcnRDaG9pY2VzPSJ0cnVlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVSZWZlcmVuY2UgZ3JhcGguZWNvcmUjLy9FZGdlL2EiLz4KKyAgICAgIDxnZW5GZWF0dXJlcyBwcm9wZXJ0eT0iUmVhZG9ubHkiIG5vdGlmeT0iZmFsc2UiIGNyZWF0ZUNoaWxkPSJmYWxzZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFQXR0cmlidXRlIGdyYXBoLmVjb3JlIy8vRWRnZS9ub2RlQVVSSSIvPgorICAgICAgPGdlbkZlYXR1cmVzIG5vdGlmeT0iZmFsc2UiIGNyZWF0ZUNoaWxkPSJmYWxzZSIgcHJvcGVydHlTb3J0Q2hvaWNlcz0idHJ1ZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFUmVmZXJlbmNlIGdyYXBoLmVjb3JlIy8vRWRnZS9iIi8+CisgICAgICA8Z2VuRmVhdHVyZXMgcHJvcGVydHk9IlJlYWRvbmx5IiBub3RpZnk9ImZhbHNlIiBjcmVhdGVDaGlsZD0iZmFsc2UiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RUF0dHJpYnV0ZSBncmFwaC5lY29yZSMvL0VkZ2Uvbm9kZUJVUkkiLz4KKyAgICAgIDxnZW5GZWF0dXJlcyBwcm9wZXJ0eT0iTm9uZSIgY2hpbGRyZW49InRydWUiIGNyZWF0ZUNoaWxkPSJ0cnVlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVSZWZlcmVuY2UgZ3JhcGguZWNvcmUjLy9FZGdlL2xhYmVsIi8+CisgICAgICA8Z2VuRmVhdHVyZXMgY3JlYXRlQ2hpbGQ9ImZhbHNlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVBdHRyaWJ1dGUgZ3JhcGguZWNvcmUjLy9FZGdlL2RpcmVjdGVkIi8+CisgICAgICA8Z2VuT3BlcmF0aW9ucyBlY29yZU9wZXJhdGlvbj0iZ3JhcGguZWNvcmUjLy9FZGdlL2dldE90aGVyTm9kZSI+CisgICAgICAgIDxnZW5QYXJhbWV0ZXJzIGVjb3JlUGFyYW1ldGVyPSJncmFwaC5lY29yZSMvL0VkZ2UvZ2V0T3RoZXJOb2RlL25vZGUiLz4KKyAgICAgIDwvZ2VuT3BlcmF0aW9ucz4KKyAgICAgIDxnZW5PcGVyYXRpb25zIGVjb3JlT3BlcmF0aW9uPSJncmFwaC5lY29yZSMvL0VkZ2UvaXNEaXJlY3RlZEF0Ij4KKyAgICAgICAgPGdlblBhcmFtZXRlcnMgZWNvcmVQYXJhbWV0ZXI9ImdyYXBoLmVjb3JlIy8vRWRnZS9pc0RpcmVjdGVkQXQvbm9kZSIvPgorICAgICAgPC9nZW5PcGVyYXRpb25zPgorICAgIDwvZ2VuQ2xhc3Nlcz4KKyAgICA8Z2VuQ2xhc3NlcyBwcm92aWRlcj0iU3RhdGVmdWwiIGltYWdlPSJmYWxzZSIgZWNvcmVDbGFzcz0iZ3JhcGguZWNvcmUjLy9HcmFwaCI+CisgICAgICA8Z2VuRmVhdHVyZXMgcHJvcGVydHk9Ik5vbmUiIGNyZWF0ZUNoaWxkPSJmYWxzZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFUmVmZXJlbmNlIGdyYXBoLmVjb3JlIy8vR3JhcGgvZWRnZXMiLz4KKyAgICAgIDxnZW5GZWF0dXJlcyBwcm9wZXJ0eT0iTm9uZSIgY3JlYXRlQ2hpbGQ9ImZhbHNlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVSZWZlcmVuY2UgZ3JhcGguZWNvcmUjLy9HcmFwaC9ub2RlcyIvPgorICAgICAgPGdlbkZlYXR1cmVzIHByb3BlcnR5PSJOb25lIiBjcmVhdGVDaGlsZD0iZmFsc2UiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RVJlZmVyZW5jZSBncmFwaC5lY29yZSMvL0dyYXBoL2dyYXBoTGFiZWxzIi8+CisgICAgICA8Z2VuRmVhdHVyZXMgcHJvcGVydHk9Ik5vbmUiIGNyZWF0ZUNoaWxkPSJmYWxzZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFUmVmZXJlbmNlIGdyYXBoLmVjb3JlIy8vR3JhcGgvbm9kZUxhYmVscyIvPgorICAgICAgPGdlbkZlYXR1cmVzIHByb3BlcnR5PSJOb25lIiBub3RpZnk9ImZhbHNlIiBjcmVhdGVDaGlsZD0iZmFsc2UiIHByb3BlcnR5U29ydENob2ljZXM9InRydWUiCisgICAgICAgICAgZWNvcmVGZWF0dXJlPSJlY29yZTpFUmVmZXJlbmNlIGdyYXBoLmVjb3JlIy8vR3JhcGgvZHluYW1pY0xhYmVscyIvPgorICAgICAgPGdlbkZlYXR1cmVzIHByb3BlcnR5PSJOb25lIiBjcmVhdGVDaGlsZD0iZmFsc2UiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RUF0dHJpYnV0ZSBncmFwaC5lY29yZSMvL0dyYXBoL251bUVkZ2VzIi8+CisgICAgICA8Z2VuRmVhdHVyZXMgcHJvcGVydHk9Ik5vbmUiIGNyZWF0ZUNoaWxkPSJmYWxzZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFQXR0cmlidXRlIGdyYXBoLmVjb3JlIy8vR3JhcGgvbnVtTm9kZXMiLz4KKyAgICAgIDxnZW5GZWF0dXJlcyBwcm9wZXJ0eT0iTm9uZSIgY3JlYXRlQ2hpbGQ9ImZhbHNlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVBdHRyaWJ1dGUgZ3JhcGguZWNvcmUjLy9HcmFwaC9udW1HcmFwaExhYmVscyIvPgorICAgICAgPGdlbkZlYXR1cmVzIHByb3BlcnR5PSJOb25lIiBjcmVhdGVDaGlsZD0iZmFsc2UiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RUF0dHJpYnV0ZSBncmFwaC5lY29yZSMvL0dyYXBoL251bU5vZGVMYWJlbHMiLz4KKyAgICAgIDxnZW5GZWF0dXJlcyBwcm9wZXJ0eT0iTm9uZSIgY3JlYXRlQ2hpbGQ9ImZhbHNlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVBdHRyaWJ1dGUgZ3JhcGguZWNvcmUjLy9HcmFwaC9udW1EeW5hbWljTGFiZWxzIi8+CisgICAgICA8Z2VuRmVhdHVyZXMgcHJvcGVydHk9Ik5vbmUiIGNoaWxkcmVuPSJ0cnVlIiBjcmVhdGVDaGlsZD0iZmFsc2UiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RVJlZmVyZW5jZSBncmFwaC5lY29yZSMvL0dyYXBoL3VucmVzb2x2ZWRJZGVudGlmaWFibGVzIi8+CisgICAgICA8Z2VuRmVhdHVyZXMgcHJvcGVydHk9Ik5vbmUiIGNoaWxkcmVuPSJ0cnVlIiBjcmVhdGVDaGlsZD0iZmFsc2UiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RVJlZmVyZW5jZSBncmFwaC5lY29yZSMvL0dyYXBoL2RlY29yYXRvcnMiLz4KKyAgICAgIDxnZW5GZWF0dXJlcyBwcm9wZXJ0eT0iUmVhZG9ubHkiIG5vdGlmeT0iZmFsc2UiIGNyZWF0ZUNoaWxkPSJmYWxzZSIgcHJvcGVydHlTb3J0Q2hvaWNlcz0idHJ1ZSIKKyAgICAgICAgICBlY29yZUZlYXR1cmU9ImVjb3JlOkVSZWZlcmVuY2UgZ3JhcGguZWNvcmUjLy9HcmFwaC90aW1lIi8+CisgICAgICA8Z2VuT3BlcmF0aW9ucyBlY29yZU9wZXJhdGlvbj0iZ3JhcGguZWNvcmUjLy9HcmFwaC9nZXROb2RlTGFiZWxzQnlUeXBlVVJJIj4KKyAgICAgICAgPGdlblBhcmFtZXRlcnMgZWNvcmVQYXJhbWV0ZXI9ImdyYXBoLmVjb3JlIy8vR3JhcGgvZ2V0Tm9kZUxhYmVsc0J5VHlwZVVSSS90eXBlVVJJIi8+CisgICAgICA8L2dlbk9wZXJhdGlvbnM+CisgICAgICA8Z2VuT3BlcmF0aW9ucyBlY29yZU9wZXJhdGlvbj0iZ3JhcGguZWNvcmUjLy9HcmFwaC9hZGRHcmFwaCI+CisgICAgICAgIDxnZW5QYXJhbWV0ZXJzIGVjb3JlUGFyYW1ldGVyPSJncmFwaC5lY29yZSMvL0dyYXBoL2FkZEdyYXBoL2dyYXBoIi8+CisgICAgICAgIDxnZW5QYXJhbWV0ZXJzIGVjb3JlUGFyYW1ldGVyPSJncmFwaC5lY29yZSMvL0dyYXBoL2FkZEdyYXBoL2ZpbHRlciIvPgorICAgICAgPC9nZW5PcGVyYXRpb25zPgorICAgICAgPGdlbk9wZXJhdGlvbnMgZWNvcmVPcGVyYXRpb249ImdyYXBoLmVjb3JlIy8vR3JhcGgvcHV0RWRnZSI+CisgICAgICAgIDxnZW5QYXJhbWV0ZXJzIGVjb3JlUGFyYW1ldGVyPSJncmFwaC5lY29yZSMvL0dyYXBoL3B1dEVkZ2UvZWRnZSIvPgorICAgICAgPC9nZW5PcGVyYXRpb25zPgorICAgICAgPGdlbk9wZXJhdGlvbnMgZWNvcmVPcGVyYXRpb249ImdyYXBoLmVjb3JlIy8vR3JhcGgvZ2V0RWRnZSI+CisgICAgICAgIDxnZW5QYXJhbWV0ZXJzIGVjb3JlUGFyYW1ldGVyPSJncmFwaC5lY29yZSMvL0dyYXBoL2dldEVkZ2UvdXJpIi8+CisgICAgICA8L2dlbk9wZXJhdGlvbnM+CisgICAgICA8Z2VuT3BlcmF0aW9ucyBlY29yZU9wZXJhdGlvbj0iZ3JhcGguZWNvcmUjLy9HcmFwaC9wdXROb2RlIj4KKyAgICAgICAgPGdlblBhcmFtZXRlcnMgZWNvcmVQYXJhbWV0ZXI9ImdyYXBoLmVjb3JlIy8vR3JhcGgvcHV0Tm9kZS9ub2RlIi8+CisgICAgICA8L2dlbk9wZXJhdGlvbnM+CisgICAgICA8Z2VuT3BlcmF0aW9ucyBlY29yZU9wZXJhdGlvbj0iZ3JhcGguZWNvcmUjLy9HcmFwaC9nZXROb2RlIj4KKyAgICAgICAgPGdlblBhcmFtZXRlcnMgZWNvcmVQYXJhbWV0ZXI9ImdyYXBoLmVjb3JlIy8vR3JhcGgvZ2V0Tm9kZS91cmkiLz4KKyAgICAgIDwvZ2VuT3BlcmF0aW9ucz4KKyAgICAgIDxnZW5PcGVyYXRpb25zIGVjb3JlT3BlcmF0aW9uPSJncmFwaC5lY29yZSMvL0dyYXBoL3B1dE5vZGVMYWJlbCI+CisgICAgICAgIDxnZW5QYXJhbWV0ZXJzIGVjb3JlUGFyYW1ldGVyPSJncmFwaC5lY29yZSMvL0dyYXBoL3B1dE5vZGVMYWJlbC9sYWJlbCIvPgorICAgICAgPC9nZW5PcGVyYXRpb25zPgorICAgICAgPGdlbk9wZXJhdGlvbnMgZWNvcmVPcGVyYXRpb249ImdyYXBoLmVjb3JlIy8vR3JhcGgvZ2V0Tm9kZUxhYmVsIj4KKyAgICAgICAgPGdlblBhcmFtZXRlcnMgZWNvcmVQYXJhbWV0ZXI9ImdyYXBoLmVjb3JlIy8vR3JhcGgvZ2V0Tm9kZUxhYmVsL3VyaSIvPgorICAgICAgPC9nZW5PcGVyYXRpb25zPgorICAgICAgPGdlbk9wZXJhdGlvbnMgZWNvcmVPcGVyYXRpb249ImdyYXBoLmVjb3JlIy8vR3JhcGgvcHV0R3JhcGhMYWJlbCI+CisgICAgICAgIDxnZW5QYXJhbWV0ZXJzIGVjb3JlUGFyYW1ldGVyPSJncmFwaC5lY29yZSMvL0dyYXBoL3B1dEdyYXBoTGFiZWwvbGFiZWwiLz4KKyAgICAgIDwvZ2VuT3BlcmF0aW9ucz4KKyAgICAgIDxnZW5PcGVyYXRpb25zIGVjb3JlT3BlcmF0aW9uPSJncmFwaC5lY29yZSMvL0dyYXBoL2dldEdyYXBoTGFiZWwiPgorICAgICAgICA8Z2VuUGFyYW1ldGVycyBlY29yZVBhcmFtZXRlcj0iZ3JhcGguZWNvcmUjLy9HcmFwaC9nZXRHcmFwaExhYmVsL3VyaSIvPgorICAgICAgPC9nZW5PcGVyYXRpb25zPgorICAgICAgPGdlbk9wZXJhdGlvbnMgZWNvcmVPcGVyYXRpb249ImdyYXBoLmVjb3JlIy8vR3JhcGgvYWRkRHluYW1pY0xhYmVsIj4KKyAgICAgICAgPGdlblBhcmFtZXRlcnMgZWNvcmVQYXJhbWV0ZXI9ImdyYXBoLmVjb3JlIy8vR3JhcGgvYWRkRHluYW1pY0xhYmVsL2R5bmFtaWNsYWJlbCIvPgorICAgICAgPC9nZW5PcGVyYXRpb25zPgorICAgICAgPGdlbk9wZXJhdGlvbnMgZWNvcmVPcGVyYXRpb249ImdyYXBoLmVjb3JlIy8vR3JhcGgvc3dpdGNoVG9OZXh0VmFsdWUiPgorICAgICAgICA8Z2VuUGFyYW1ldGVycyBlY29yZVBhcmFtZXRlcj0iZ3JhcGguZWNvcmUjLy9HcmFwaC9zd2l0Y2hUb05leHRWYWx1ZS9jdXJyZW50VGltZSIvPgorICAgICAgPC9nZW5PcGVyYXRpb25zPgorICAgIDwvZ2VuQ2xhc3Nlcz4KKyAgICA8Z2VuQ2xhc3NlcyBpbWFnZT0iZmFsc2UiIGVjb3JlQ2xhc3M9ImdyYXBoLmVjb3JlIy8vTGFiZWwiPgorICAgICAgPGdlbkZlYXR1cmVzIHByb3BlcnR5PSJSZWFkb25seSIgY3JlYXRlQ2hpbGQ9ImZhbHNlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVBdHRyaWJ1dGUgZ3JhcGguZWNvcmUjLy9MYWJlbC91UklPZklkZW50aWZpYWJsZVRvQmVMYWJlbGVkIi8+CisgICAgICA8Z2VuRmVhdHVyZXMgcHJvcGVydHk9Ik5vbmUiIGNoaWxkcmVuPSJ0cnVlIiBjcmVhdGVDaGlsZD0iZmFsc2UiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RVJlZmVyZW5jZSBncmFwaC5lY29yZSMvL0xhYmVsL2N1cnJlbnRWYWx1ZSIvPgorICAgICAgPGdlbkZlYXR1cmVzIHByb3BlcnR5PSJOb25lIiBub3RpZnk9ImZhbHNlIiBjcmVhdGVDaGlsZD0iZmFsc2UiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RVJlZmVyZW5jZSBncmFwaC5lY29yZSMvL0xhYmVsL2lkZW50aWZpYWJsZSIvPgorICAgIDwvZ2VuQ2xhc3Nlcz4KKyAgICA8Z2VuQ2xhc3NlcyBpbWFnZT0iZmFsc2UiIGVjb3JlQ2xhc3M9ImdyYXBoLmVjb3JlIy8vTGFiZWxWYWx1ZSI+CisgICAgICA8Z2VuT3BlcmF0aW9ucyBlY29yZU9wZXJhdGlvbj0iZ3JhcGguZWNvcmUjLy9MYWJlbFZhbHVlL3Jlc2V0Ii8+CisgICAgICA8Z2VuT3BlcmF0aW9ucyBlY29yZU9wZXJhdGlvbj0iZ3JhcGguZWNvcmUjLy9MYWJlbFZhbHVlL3NhbWVWYWx1ZSI+CisgICAgICAgIDxnZW5QYXJhbWV0ZXJzIGVjb3JlUGFyYW1ldGVyPSJncmFwaC5lY29yZSMvL0xhYmVsVmFsdWUvc2FtZVZhbHVlL290aGVyTGFiZWxWYWx1ZSIvPgorICAgICAgPC9nZW5PcGVyYXRpb25zPgorICAgIDwvZ2VuQ2xhc3Nlcz4KKyAgICA8Z2VuQ2xhc3NlcyBpbWFnZT0iZmFsc2UiIGVjb3JlQ2xhc3M9ImdyYXBoLmVjb3JlIy8vTm9kZSI+CisgICAgICA8Z2VuRmVhdHVyZXMgbm90aWZ5PSJmYWxzZSIgY3JlYXRlQ2hpbGQ9ImZhbHNlIiBwcm9wZXJ0eVNvcnRDaG9pY2VzPSJ0cnVlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVSZWZlcmVuY2UgZ3JhcGguZWNvcmUjLy9Ob2RlL2VkZ2VzIi8+CisgICAgICA8Z2VuRmVhdHVyZXMgbm90aWZ5PSJmYWxzZSIgY3JlYXRlQ2hpbGQ9ImZhbHNlIiBwcm9wZXJ0eVNvcnRDaG9pY2VzPSJ0cnVlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVSZWZlcmVuY2UgZ3JhcGguZWNvcmUjLy9Ob2RlL2xhYmVscyIvPgorICAgIDwvZ2VuQ2xhc3Nlcz4KKyAgICA8Z2VuQ2xhc3NlcyBlY29yZUNsYXNzPSJncmFwaC5lY29yZSMvL05vZGVMYWJlbCI+CisgICAgICA8Z2VuRmVhdHVyZXMgbm90aWZ5PSJmYWxzZSIgY3JlYXRlQ2hpbGQ9ImZhbHNlIiBwcm9wZXJ0eVNvcnRDaG9pY2VzPSJ0cnVlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVSZWZlcmVuY2UgZ3JhcGguZWNvcmUjLy9Ob2RlTGFiZWwvbm9kZSIvPgorICAgIDwvZ2VuQ2xhc3Nlcz4KKyAgICA8Z2VuQ2xhc3NlcyBpbWFnZT0iZmFsc2UiIGVjb3JlQ2xhc3M9ImdyYXBoLmVjb3JlIy8vU3RhdGljTm9kZUxhYmVsIi8+CisgICAgPGdlbkNsYXNzZXMgcHJvdmlkZXI9Ik5vbmUiIGltYWdlPSJmYWxzZSIgZWNvcmVDbGFzcz0iZ3JhcGguZWNvcmUjLy9VbnJlc29sdmVkSWRlbnRpZmlhYmxlIj4KKyAgICAgIDxnZW5GZWF0dXJlcyBub3RpZnk9ImZhbHNlIiBjcmVhdGVDaGlsZD0iZmFsc2UiIHByb3BlcnR5U29ydENob2ljZXM9InRydWUiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RVJlZmVyZW5jZSBncmFwaC5lY29yZSMvL1VucmVzb2x2ZWRJZGVudGlmaWFibGUvc2NlbmFyaW8iLz4KKyAgICAgIDxnZW5GZWF0dXJlcyBub3RpZnk9ImZhbHNlIiBjcmVhdGVDaGlsZD0iZmFsc2UiIHByb3BlcnR5U29ydENob2ljZXM9InRydWUiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RVJlZmVyZW5jZSBncmFwaC5lY29yZSMvL1VucmVzb2x2ZWRJZGVudGlmaWFibGUvbW9kZWwiLz4KKyAgICAgIDxnZW5GZWF0dXJlcyBub3RpZnk9ImZhbHNlIiBjcmVhdGVDaGlsZD0iZmFsc2UiIHByb3BlcnR5U29ydENob2ljZXM9InRydWUiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RVJlZmVyZW5jZSBncmFwaC5lY29yZSMvL1VucmVzb2x2ZWRJZGVudGlmaWFibGUvZ3JhcGgiLz4KKyAgICAgIDxnZW5GZWF0dXJlcyBub3RpZnk9ImZhbHNlIiBjcmVhdGVDaGlsZD0iZmFsc2UiIHByb3BlcnR5U29ydENob2ljZXM9InRydWUiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RVJlZmVyZW5jZSBncmFwaC5lY29yZSMvL1VucmVzb2x2ZWRJZGVudGlmaWFibGUvaWRlbnRpZmlhYmxlIi8+CisgICAgICA8Z2VuRmVhdHVyZXMgY3JlYXRlQ2hpbGQ9ImZhbHNlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVBdHRyaWJ1dGUgZ3JhcGguZWNvcmUjLy9VbnJlc29sdmVkSWRlbnRpZmlhYmxlL3VucmVzb2x2ZWRVUkkiLz4KKyAgICAgIDxnZW5GZWF0dXJlcyBjcmVhdGVDaGlsZD0iZmFsc2UiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RUF0dHJpYnV0ZSBncmFwaC5lY29yZSMvL1VucmVzb2x2ZWRJZGVudGlmaWFibGUvZmllbGROYW1lIi8+CisgICAgPC9nZW5DbGFzc2VzPgorICAgIDxnZW5DbGFzc2VzIHByb3ZpZGVyPSJOb25lIiBpbWFnZT0iZmFsc2UiIGVjb3JlQ2xhc3M9ImdyYXBoLmVjb3JlIy8vVVJJVG9JZGVudGlmaWFibGVNYXBFbnRyeSI+CisgICAgICA8Z2VuRmVhdHVyZXMgY3JlYXRlQ2hpbGQ9ImZhbHNlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVBdHRyaWJ1dGUgZ3JhcGguZWNvcmUjLy9VUklUb0lkZW50aWZpYWJsZU1hcEVudHJ5L2tleSIvPgorICAgICAgPGdlbkZlYXR1cmVzIG5vdGlmeT0iZmFsc2UiIGNyZWF0ZUNoaWxkPSJmYWxzZSIgcHJvcGVydHlTb3J0Q2hvaWNlcz0idHJ1ZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFUmVmZXJlbmNlIGdyYXBoLmVjb3JlIy8vVVJJVG9JZGVudGlmaWFibGVNYXBFbnRyeS92YWx1ZSIvPgorICAgIDwvZ2VuQ2xhc3Nlcz4KKyAgICA8Z2VuQ2xhc3NlcyBwcm92aWRlcj0iTm9uZSIgaW1hZ2U9ImZhbHNlIiBlY29yZUNsYXNzPSJncmFwaC5lY29yZSMvL1Nhbml0eUNoZWNrZXIiLz4KKyAgICA8Z2VuQ2xhc3NlcyBpbWFnZT0iZmFsc2UiIGVjb3JlQ2xhc3M9ImdyYXBoLmVjb3JlIy8vRHluYW1pY0VkZ2VMYWJlbCIvPgorICAgIDxnZW5DbGFzc2VzIGltYWdlPSJmYWxzZSIgZWNvcmVDbGFzcz0iZ3JhcGguZWNvcmUjLy9FZGdlTGFiZWwiPgorICAgICAgPGdlbkZlYXR1cmVzIG5vdGlmeT0iZmFsc2UiIGNyZWF0ZUNoaWxkPSJmYWxzZSIgcHJvcGVydHlTb3J0Q2hvaWNlcz0idHJ1ZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFUmVmZXJlbmNlIGdyYXBoLmVjb3JlIy8vRWRnZUxhYmVsL2VkZ2UiLz4KKyAgICA8L2dlbkNsYXNzZXM+CisgICAgPGdlbkNsYXNzZXMgaW1hZ2U9ImZhbHNlIiBlY29yZUNsYXNzPSJncmFwaC5lY29yZSMvL1N0YXRpY0VkZ2VMYWJlbCIvPgorICAgIDxnZW5DbGFzc2VzIHByb3ZpZGVyPSJOb25lIiBpbWFnZT0iZmFsc2UiIGVjb3JlQ2xhc3M9ImdyYXBoLmVjb3JlIy8vVVJJVG9FZGdlTWFwRW50cnkiPgorICAgICAgPGdlbkZlYXR1cmVzIHByb3BlcnR5PSJOb25lIiBub3RpZnk9ImZhbHNlIiBjcmVhdGVDaGlsZD0iZmFsc2UiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RUF0dHJpYnV0ZSBncmFwaC5lY29yZSMvL1VSSVRvRWRnZU1hcEVudHJ5L2tleSIvPgorICAgICAgPGdlbkZlYXR1cmVzIHByb3BlcnR5PSJOb25lIiBub3RpZnk9ImZhbHNlIiBjcmVhdGVDaGlsZD0iZmFsc2UiIHByb3BlcnR5U29ydENob2ljZXM9InRydWUiCisgICAgICAgICAgZWNvcmVGZWF0dXJlPSJlY29yZTpFUmVmZXJlbmNlIGdyYXBoLmVjb3JlIy8vVVJJVG9FZGdlTWFwRW50cnkvdmFsdWUiLz4KKyAgICA8L2dlbkNsYXNzZXM+CisgICAgPGdlbkNsYXNzZXMgcHJvdmlkZXI9Ik5vbmUiIGltYWdlPSJmYWxzZSIgZWNvcmVDbGFzcz0iZ3JhcGguZWNvcmUjLy9VUklUb05vZGVNYXBFbnRyeSI+CisgICAgICA8Z2VuRmVhdHVyZXMgcHJvcGVydHk9Ik5vbmUiIGNyZWF0ZUNoaWxkPSJmYWxzZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFQXR0cmlidXRlIGdyYXBoLmVjb3JlIy8vVVJJVG9Ob2RlTWFwRW50cnkva2V5Ii8+CisgICAgICA8Z2VuRmVhdHVyZXMgbm90aWZ5PSJmYWxzZSIgY3JlYXRlQ2hpbGQ9ImZhbHNlIiBwcm9wZXJ0eVNvcnRDaG9pY2VzPSJ0cnVlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVSZWZlcmVuY2UgZ3JhcGguZWNvcmUjLy9VUklUb05vZGVNYXBFbnRyeS92YWx1ZSIvPgorICAgIDwvZ2VuQ2xhc3Nlcz4KKyAgICA8Z2VuQ2xhc3NlcyBwcm92aWRlcj0iTm9uZSIgaW1hZ2U9ImZhbHNlIiBlY29yZUNsYXNzPSJncmFwaC5lY29yZSMvL1VSSVRvTGFiZWxNYXBFbnRyeSI+CisgICAgICA8Z2VuRmVhdHVyZXMgcHJvcGVydHk9Ik5vbmUiIG5vdGlmeT0iZmFsc2UiIGNyZWF0ZUNoaWxkPSJmYWxzZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFQXR0cmlidXRlIGdyYXBoLmVjb3JlIy8vVVJJVG9MYWJlbE1hcEVudHJ5L2tleSIvPgorICAgICAgPGdlbkZlYXR1cmVzIHByb3BlcnR5PSJOb25lIiBub3RpZnk9ImZhbHNlIiBjcmVhdGVDaGlsZD0iZmFsc2UiIHByb3BlcnR5U29ydENob2ljZXM9InRydWUiCisgICAgICAgICAgZWNvcmVGZWF0dXJlPSJlY29yZTpFUmVmZXJlbmNlIGdyYXBoLmVjb3JlIy8vVVJJVG9MYWJlbE1hcEVudHJ5L3ZhbHVlIi8+CisgICAgPC9nZW5DbGFzc2VzPgorICAgIDxnZW5DbGFzc2VzIHByb3ZpZGVyPSJOb25lIiBpbWFnZT0iZmFsc2UiIGVjb3JlQ2xhc3M9ImdyYXBoLmVjb3JlIy8vVVJJVG9Ob2RlTGFiZWxNYXBFbnRyeSI+CisgICAgICA8Z2VuRmVhdHVyZXMgcHJvcGVydHk9Ik5vbmUiIG5vdGlmeT0iZmFsc2UiIGNyZWF0ZUNoaWxkPSJmYWxzZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFQXR0cmlidXRlIGdyYXBoLmVjb3JlIy8vVVJJVG9Ob2RlTGFiZWxNYXBFbnRyeS9rZXkiLz4KKyAgICAgIDxnZW5GZWF0dXJlcyBwcm9wZXJ0eT0iTm9uZSIgbm90aWZ5PSJmYWxzZSIgY3JlYXRlQ2hpbGQ9ImZhbHNlIiBwcm9wZXJ0eVNvcnRDaG9pY2VzPSJ0cnVlIgorICAgICAgICAgIGVjb3JlRmVhdHVyZT0iZWNvcmU6RVJlZmVyZW5jZSBncmFwaC5lY29yZSMvL1VSSVRvTm9kZUxhYmVsTWFwRW50cnkvdmFsdWUiLz4KKyAgICA8L2dlbkNsYXNzZXM+CisgICAgPGdlbkNsYXNzZXMgaW1hZ2U9ImZhbHNlIiBlY29yZUNsYXNzPSJncmFwaC5lY29yZSMvL1N0YXRpY0xhYmVsIi8+CisgICAgPGdlbkNsYXNzZXMgaW1hZ2U9ImZhbHNlIiBlY29yZUNsYXNzPSJncmFwaC5lY29yZSMvL0dyYXBoUGFydGl0aW9uZXIiPgorICAgICAgPGdlbkZlYXR1cmVzIGNyZWF0ZUNoaWxkPSJmYWxzZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFQXR0cmlidXRlIGdyYXBoLmVjb3JlIy8vR3JhcGhQYXJ0aXRpb25lci9udW1Qcm9jZXNzZXMiLz4KKyAgICAgIDxnZW5PcGVyYXRpb25zIGVjb3JlT3BlcmF0aW9uPSJncmFwaC5lY29yZSMvL0dyYXBoUGFydGl0aW9uZXIvcGFydGl0aW9uRGVjb3JhdG9yTGFiZWxzIj4KKyAgICAgICAgPGdlblBhcmFtZXRlcnMgZWNvcmVQYXJhbWV0ZXI9ImdyYXBoLmVjb3JlIy8vR3JhcGhQYXJ0aXRpb25lci9wYXJ0aXRpb25EZWNvcmF0b3JMYWJlbHMvZGVjb3JhdG9yIi8+CisgICAgICAgIDxnZW5QYXJhbWV0ZXJzIGVjb3JlUGFyYW1ldGVyPSJncmFwaC5lY29yZSMvL0dyYXBoUGFydGl0aW9uZXIvcGFydGl0aW9uRGVjb3JhdG9yTGFiZWxzL3Byb2Nlc3NSYW5rIi8+CisgICAgICA8L2dlbk9wZXJhdGlvbnM+CisgICAgICA8Z2VuT3BlcmF0aW9ucyBlY29yZU9wZXJhdGlvbj0iZ3JhcGguZWNvcmUjLy9HcmFwaFBhcnRpdGlvbmVyL3BhcnRpdGlvbkRlY29yYXRvckxhYmVscy4xIj4KKyAgICAgICAgPGdlblBhcmFtZXRlcnMgZWNvcmVQYXJhbWV0ZXI9ImdyYXBoLmVjb3JlIy8vR3JhcGhQYXJ0aXRpb25lci9wYXJ0aXRpb25EZWNvcmF0b3JMYWJlbHMuMS9kZWNvcmF0b3IiLz4KKyAgICAgIDwvZ2VuT3BlcmF0aW9ucz4KKyAgICAgIDxnZW5PcGVyYXRpb25zIGVjb3JlT3BlcmF0aW9uPSJncmFwaC5lY29yZSMvL0dyYXBoUGFydGl0aW9uZXIvaXNNYW5hZ2VkIj4KKyAgICAgICAgPGdlblBhcmFtZXRlcnMgZWNvcmVQYXJhbWV0ZXI9ImdyYXBoLmVjb3JlIy8vR3JhcGhQYXJ0aXRpb25lci9pc01hbmFnZWQvaWRlbnRpZmlhYmxlIi8+CisgICAgICA8L2dlbk9wZXJhdGlvbnM+CisgICAgPC9nZW5DbGFzc2VzPgorICAgIDxnZW5DbGFzc2VzIGVjb3JlQ2xhc3M9ImdyYXBoLmVjb3JlIy8vU2ltcGxlR3JhcGhQYXJ0aXRpb25lciIvPgorICAgIDxnZW5DbGFzc2VzIGVjb3JlQ2xhc3M9ImdyYXBoLmVjb3JlIy8vRXhjaGFuZ2UiPgorICAgICAgPGdlbkZlYXR1cmVzIG5vdGlmeT0iZmFsc2UiIGNyZWF0ZUNoaWxkPSJmYWxzZSIgcHJvcGVydHlTb3J0Q2hvaWNlcz0idHJ1ZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFUmVmZXJlbmNlIGdyYXBoLmVjb3JlIy8vRXhjaGFuZ2Uvb3RoZXJMYWJlbCIvPgorICAgICAgPGdlbkZlYXR1cmVzIGNyZWF0ZUNoaWxkPSJmYWxzZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFQXR0cmlidXRlIGdyYXBoLmVjb3JlIy8vRXhjaGFuZ2UvY291bnQiLz4KKyAgICAgIDxnZW5GZWF0dXJlcyBjcmVhdGVDaGlsZD0iZmFsc2UiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RUF0dHJpYnV0ZSBncmFwaC5lY29yZSMvL0V4Y2hhbmdlL3R5cGUiLz4KKyAgICA8L2dlbkNsYXNzZXM+CisgICAgPGdlbkNsYXNzZXMgaW1hZ2U9ImZhbHNlIiBlY29yZUNsYXNzPSJncmFwaC5lY29yZSMvL0ludGVncmF0aW9uTGFiZWwiPgorICAgICAgPGdlbkZlYXR1cmVzIG5vdGlmeT0iZmFsc2UiIGNyZWF0ZUNoaWxkPSJmYWxzZSIgcHJvcGVydHlTb3J0Q2hvaWNlcz0idHJ1ZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFUmVmZXJlbmNlIGdyYXBoLmVjb3JlIy8vSW50ZWdyYXRpb25MYWJlbC9kZWx0YVZhbHVlIi8+CisgICAgICA8Z2VuRmVhdHVyZXMgbm90aWZ5PSJmYWxzZSIgY3JlYXRlQ2hpbGQ9ImZhbHNlIiBwcm9wZXJ0eVNvcnRDaG9pY2VzPSJ0cnVlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVSZWZlcmVuY2UgZ3JhcGguZWNvcmUjLy9JbnRlZ3JhdGlvbkxhYmVsL3RlbXBWYWx1ZSIvPgorICAgICAgPGdlbkZlYXR1cmVzIG5vdGlmeT0iZmFsc2UiIGNyZWF0ZUNoaWxkPSJmYWxzZSIgcHJvcGVydHlTb3J0Q2hvaWNlcz0idHJ1ZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFUmVmZXJlbmNlIGdyYXBoLmVjb3JlIy8vSW50ZWdyYXRpb25MYWJlbC9wcm9iZVZhbHVlIi8+CisgICAgICA8Z2VuRmVhdHVyZXMgbm90aWZ5PSJmYWxzZSIgY3JlYXRlQ2hpbGQ9ImZhbHNlIiBwcm9wZXJ0eVNvcnRDaG9pY2VzPSJ0cnVlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVSZWZlcmVuY2UgZ3JhcGguZWNvcmUjLy9JbnRlZ3JhdGlvbkxhYmVsL2Vycm9yU2NhbGUiLz4KKyAgICAgIDxnZW5GZWF0dXJlcyBwcm9wZXJ0eT0iUmVhZG9ubHkiIGNyZWF0ZUNoaWxkPSJmYWxzZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFQXR0cmlidXRlIGdyYXBoLmVjb3JlIy8vSW50ZWdyYXRpb25MYWJlbC9pZGVudGlmaWVyIi8+CisgICAgICA8Z2VuT3BlcmF0aW9ucyBlY29yZU9wZXJhdGlvbj0iZ3JhcGguZWNvcmUjLy9JbnRlZ3JhdGlvbkxhYmVsL3Jlc2V0Ij4KKyAgICAgICAgPGdlblBhcmFtZXRlcnMgZWNvcmVQYXJhbWV0ZXI9ImdyYXBoLmVjb3JlIy8vSW50ZWdyYXRpb25MYWJlbC9yZXNldC90aW1lIi8+CisgICAgICA8L2dlbk9wZXJhdGlvbnM+CisgICAgPC9nZW5DbGFzc2VzPgorICAgIDxnZW5DbGFzc2VzIGltYWdlPSJmYWxzZSIgZWNvcmVDbGFzcz0iZ3JhcGguZWNvcmUjLy9JbnRlZ3JhdGlvbkxhYmVsVmFsdWUiPgorICAgICAgPGdlbkZlYXR1cmVzIG5vdGlmeT0iZmFsc2UiIGNyZWF0ZUNoaWxkPSJmYWxzZSIgcHJvcGVydHlTb3J0Q2hvaWNlcz0idHJ1ZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFUmVmZXJlbmNlIGdyYXBoLmVjb3JlIy8vSW50ZWdyYXRpb25MYWJlbFZhbHVlL2Fycml2YWxzIi8+CisgICAgICA8Z2VuRmVhdHVyZXMgbm90aWZ5PSJmYWxzZSIgY3JlYXRlQ2hpbGQ9ImZhbHNlIiBwcm9wZXJ0eVNvcnRDaG9pY2VzPSJ0cnVlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVSZWZlcmVuY2UgZ3JhcGguZWNvcmUjLy9JbnRlZ3JhdGlvbkxhYmVsVmFsdWUvZGVwYXJ0dXJlcyIvPgorICAgICAgPGdlbk9wZXJhdGlvbnMgZWNvcmVPcGVyYXRpb249ImdyYXBoLmVjb3JlIy8vSW50ZWdyYXRpb25MYWJlbFZhbHVlL3NldCI+CisgICAgICAgIDxnZW5QYXJhbWV0ZXJzIGVjb3JlUGFyYW1ldGVyPSJncmFwaC5lY29yZSMvL0ludGVncmF0aW9uTGFiZWxWYWx1ZS9zZXQvdmFsdWUiLz4KKyAgICAgIDwvZ2VuT3BlcmF0aW9ucz4KKyAgICAgIDxnZW5PcGVyYXRpb25zIGVjb3JlT3BlcmF0aW9uPSJncmFwaC5lY29yZSMvL0ludGVncmF0aW9uTGFiZWxWYWx1ZS9hZGQiPgorICAgICAgICA8Z2VuUGFyYW1ldGVycyBlY29yZVBhcmFtZXRlcj0iZ3JhcGguZWNvcmUjLy9JbnRlZ3JhdGlvbkxhYmVsVmFsdWUvYWRkL3ZhbHVlIi8+CisgICAgICA8L2dlbk9wZXJhdGlvbnM+CisgICAgICA8Z2VuT3BlcmF0aW9ucyBlY29yZU9wZXJhdGlvbj0iZ3JhcGguZWNvcmUjLy9JbnRlZ3JhdGlvbkxhYmVsVmFsdWUvc3ViIj4KKyAgICAgICAgPGdlblBhcmFtZXRlcnMgZWNvcmVQYXJhbWV0ZXI9ImdyYXBoLmVjb3JlIy8vSW50ZWdyYXRpb25MYWJlbFZhbHVlL3N1Yi92YWx1ZSIvPgorICAgICAgPC9nZW5PcGVyYXRpb25zPgorICAgICAgPGdlbk9wZXJhdGlvbnMgZWNvcmVPcGVyYXRpb249ImdyYXBoLmVjb3JlIy8vSW50ZWdyYXRpb25MYWJlbFZhbHVlL3NjYWxlIj4KKyAgICAgICAgPGdlblBhcmFtZXRlcnMgZWNvcmVQYXJhbWV0ZXI9ImdyYXBoLmVjb3JlIy8vSW50ZWdyYXRpb25MYWJlbFZhbHVlL3NjYWxlL3NjYWxlRmFjdG9yIi8+CisgICAgICA8L2dlbk9wZXJhdGlvbnM+CisgICAgICA8Z2VuT3BlcmF0aW9ucyBlY29yZU9wZXJhdGlvbj0iZ3JhcGguZWNvcmUjLy9JbnRlZ3JhdGlvbkxhYmVsVmFsdWUvYWRkLjEiPgorICAgICAgICA8Z2VuUGFyYW1ldGVycyBlY29yZVBhcmFtZXRlcj0iZ3JhcGguZWNvcmUjLy9JbnRlZ3JhdGlvbkxhYmVsVmFsdWUvYWRkLjEvYWRkaXRpb24iLz4KKyAgICAgIDwvZ2VuT3BlcmF0aW9ucz4KKyAgICAgIDxnZW5PcGVyYXRpb25zIGVjb3JlT3BlcmF0aW9uPSJncmFwaC5lY29yZSMvL0ludGVncmF0aW9uTGFiZWxWYWx1ZS9hYnMiLz4KKyAgICAgIDxnZW5PcGVyYXRpb25zIGVjb3JlT3BlcmF0aW9uPSJncmFwaC5lY29yZSMvL0ludGVncmF0aW9uTGFiZWxWYWx1ZS9hdm9pZE5lZ2F0aXZlIj4KKyAgICAgICAgPGdlblBhcmFtZXRlcnMgZWNvcmVQYXJhbWV0ZXI9ImdyYXBoLmVjb3JlIy8vSW50ZWdyYXRpb25MYWJlbFZhbHVlL2F2b2lkTmVnYXRpdmUvdmFsdWUiLz4KKyAgICAgIDwvZ2VuT3BlcmF0aW9ucz4KKyAgICAgIDxnZW5PcGVyYXRpb25zIGVjb3JlT3BlcmF0aW9uPSJncmFwaC5lY29yZSMvL0ludGVncmF0aW9uTGFiZWxWYWx1ZS9jb21wdXRlRGVsdGFBZGp1c3RtZW50Ij4KKyAgICAgICAgPGdlblBhcmFtZXRlcnMgZWNvcmVQYXJhbWV0ZXI9ImdyYXBoLmVjb3JlIy8vSW50ZWdyYXRpb25MYWJlbFZhbHVlL2NvbXB1dGVEZWx0YUFkanVzdG1lbnQvdmFsdWUiLz4KKyAgICAgIDwvZ2VuT3BlcmF0aW9ucz4KKyAgICAgIDxnZW5PcGVyYXRpb25zIGVjb3JlT3BlcmF0aW9uPSJncmFwaC5lY29yZSMvL0ludGVncmF0aW9uTGFiZWxWYWx1ZS9kaXZpZGUiPgorICAgICAgICA8Z2VuUGFyYW1ldGVycyBlY29yZVBhcmFtZXRlcj0iZ3JhcGguZWNvcmUjLy9JbnRlZ3JhdGlvbkxhYmVsVmFsdWUvZGl2aWRlL3ZhbHVlIi8+CisgICAgICA8L2dlbk9wZXJhdGlvbnM+CisgICAgICA8Z2VuT3BlcmF0aW9ucyBlY29yZU9wZXJhdGlvbj0iZ3JhcGguZWNvcmUjLy9JbnRlZ3JhdGlvbkxhYmVsVmFsdWUvbWF4Ii8+CisgICAgICA8Z2VuT3BlcmF0aW9ucyBlY29yZU9wZXJhdGlvbj0iZ3JhcGguZWNvcmUjLy9JbnRlZ3JhdGlvbkxhYmVsVmFsdWUvcHJlcGFyZUN5Y2xlIi8+CisgICAgPC9nZW5DbGFzc2VzPgorICA8L2dlblBhY2thZ2VzPgorICA8Z2VuUGFja2FnZXMgcHJlZml4PSJNb2RlbCIgYmFzZVBhY2thZ2U9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZSIgZGlzcG9zYWJsZVByb3ZpZGVyRmFjdG9yeT0idHJ1ZSIKKyAgICAgIGdlbmVyYXRlRXhhbXBsZUNsYXNzPSJmYWxzZSIgbXVsdGlwbGVFZGl0b3JQYWdlcz0iZmFsc2UiIGdlbmVyYXRlTW9kZWxXaXphcmQ9ImZhbHNlIgorICAgICAgZWNvcmVQYWNrYWdlPSJtb2RlbC5lY29yZSMvIj4KKyAgICA8Z2VuQ2xhc3NlcyBpbWFnZT0iZmFsc2UiIGVjb3JlQ2xhc3M9Im1vZGVsLmVjb3JlIy8vRGVjb3JhdG9yIj4KKyAgICAgIDxnZW5GZWF0dXJlcyBwcm9wZXJ0eT0iTm9uZSIgbm90aWZ5PSJmYWxzZSIgY2hpbGRyZW49InRydWUiIGNyZWF0ZUNoaWxkPSJmYWxzZSIKKyAgICAgICAgICBwcm9wZXJ0eVNvcnRDaG9pY2VzPSJ0cnVlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVSZWZlcmVuY2UgbW9kZWwuZWNvcmUjLy9EZWNvcmF0b3IvbGFiZWxzVG9VcGRhdGUiLz4KKyAgICAgIDxnZW5GZWF0dXJlcyBwcm9wZXJ0eT0iTm9uZSIgbm90aWZ5PSJmYWxzZSIgY3JlYXRlQ2hpbGQ9ImZhbHNlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVSZWZlcmVuY2UgbW9kZWwuZWNvcmUjLy9EZWNvcmF0b3IvZ3JhcGgiLz4KKyAgICAgIDxnZW5GZWF0dXJlcyBwcm9wZXJ0eT0iTm9uZSIgbm90aWZ5PSJmYWxzZSIgY3JlYXRlQ2hpbGQ9ImZhbHNlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVBdHRyaWJ1dGUgbW9kZWwuZWNvcmUjLy9EZWNvcmF0b3IvZW5hYmxlZCIvPgorICAgICAgPGdlbkZlYXR1cmVzIHByb3BlcnR5PSJOb25lIiBub3RpZnk9ImZhbHNlIiBjcmVhdGVDaGlsZD0iZmFsc2UiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RUF0dHJpYnV0ZSBtb2RlbC5lY29yZSMvL0RlY29yYXRvci9ncmFwaERlY29yYXRlZCIvPgorICAgICAgPGdlbkZlYXR1cmVzIHByb3BlcnR5PSJOb25lIiBjcmVhdGVDaGlsZD0iZmFsc2UiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RUF0dHJpYnV0ZSBtb2RlbC5lY29yZSMvL0RlY29yYXRvci9wcm9ncmVzcyIvPgorICAgICAgPGdlbk9wZXJhdGlvbnMgZWNvcmVPcGVyYXRpb249Im1vZGVsLmVjb3JlIy8vRGVjb3JhdG9yL2RlY29yYXRlR3JhcGgiPgorICAgICAgICA8Z2VuUGFyYW1ldGVycyBlY29yZVBhcmFtZXRlcj0ibW9kZWwuZWNvcmUjLy9EZWNvcmF0b3IvZGVjb3JhdGVHcmFwaC90aW1lIi8+CisgICAgICA8L2dlbk9wZXJhdGlvbnM+CisgICAgICA8Z2VuT3BlcmF0aW9ucyBlY29yZU9wZXJhdGlvbj0ibW9kZWwuZWNvcmUjLy9EZWNvcmF0b3IvdXBkYXRlTGFiZWxzIj4KKyAgICAgICAgPGdlblBhcmFtZXRlcnMgZWNvcmVQYXJhbWV0ZXI9Im1vZGVsLmVjb3JlIy8vRGVjb3JhdG9yL3VwZGF0ZUxhYmVscy90aW1lIi8+CisgICAgICAgIDxnZW5QYXJhbWV0ZXJzIGVjb3JlUGFyYW1ldGVyPSJtb2RlbC5lY29yZSMvL0RlY29yYXRvci91cGRhdGVMYWJlbHMvdGltZXJQZXJpb2QiLz4KKyAgICAgICAgPGdlblBhcmFtZXRlcnMgZWNvcmVQYXJhbWV0ZXI9Im1vZGVsLmVjb3JlIy8vRGVjb3JhdG9yL3VwZGF0ZUxhYmVscy9jeWNsZSIvPgorICAgICAgPC9nZW5PcGVyYXRpb25zPgorICAgICAgPGdlbk9wZXJhdGlvbnMgZWNvcmVPcGVyYXRpb249Im1vZGVsLmVjb3JlIy8vRGVjb3JhdG9yL3Jlc2V0TGFiZWxzIi8+CisgICAgICA8Z2VuT3BlcmF0aW9ucyBlY29yZU9wZXJhdGlvbj0ibW9kZWwuZWNvcmUjLy9EZWNvcmF0b3IvcHJlcGFyZSI+CisgICAgICAgIDxnZW5QYXJhbWV0ZXJzIGVjb3JlUGFyYW1ldGVyPSJtb2RlbC5lY29yZSMvL0RlY29yYXRvci9wcmVwYXJlL21vZGVsIi8+CisgICAgICAgIDxnZW5QYXJhbWV0ZXJzIGVjb3JlUGFyYW1ldGVyPSJtb2RlbC5lY29yZSMvL0RlY29yYXRvci9wcmVwYXJlL3RpbWUiLz4KKyAgICAgIDwvZ2VuT3BlcmF0aW9ucz4KKyAgICA8L2dlbkNsYXNzZXM+CisgICAgPGdlbkNsYXNzZXMgaW1hZ2U9ImZhbHNlIiBlY29yZUNsYXNzPSJtb2RlbC5lY29yZSMvL0VkZ2VEZWNvcmF0b3IiLz4KKyAgICA8Z2VuQ2xhc3NlcyBpbWFnZT0iZmFsc2UiIGVjb3JlQ2xhc3M9Im1vZGVsLmVjb3JlIy8vR3JhcGhEZWNvcmF0b3IiLz4KKyAgICA8Z2VuQ2xhc3NlcyBpbWFnZT0iZmFsc2UiIGVjb3JlQ2xhc3M9Im1vZGVsLmVjb3JlIy8vTW9kZWwiPgorICAgICAgPGdlbkZlYXR1cmVzIHByb3BlcnR5PSJOb25lIiBjaGlsZHJlbj0idHJ1ZSIgY3JlYXRlQ2hpbGQ9InRydWUiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RVJlZmVyZW5jZSBtb2RlbC5lY29yZSMvL01vZGVsL21vZGVscyIvPgorICAgICAgPGdlbkZlYXR1cmVzIHByb3BlcnR5PSJOb25lIiBjaGlsZHJlbj0idHJ1ZSIgY3JlYXRlQ2hpbGQ9InRydWUiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RVJlZmVyZW5jZSBtb2RlbC5lY29yZSMvL01vZGVsL2dyYXBocyIvPgorICAgICAgPGdlbkZlYXR1cmVzIHByb3BlcnR5PSJOb25lIiBjaGlsZHJlbj0idHJ1ZSIgY3JlYXRlQ2hpbGQ9ImZhbHNlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVSZWZlcmVuY2UgbW9kZWwuZWNvcmUjLy9Nb2RlbC9ncmFwaERlY29yYXRvcnMiLz4KKyAgICAgIDxnZW5GZWF0dXJlcyBwcm9wZXJ0eT0iTm9uZSIgY2hpbGRyZW49InRydWUiIGNyZWF0ZUNoaWxkPSJmYWxzZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFUmVmZXJlbmNlIG1vZGVsLmVjb3JlIy8vTW9kZWwvbm9kZURlY29yYXRvcnMiLz4KKyAgICAgIDxnZW5GZWF0dXJlcyBwcm9wZXJ0eT0iTm9uZSIgY2hpbGRyZW49InRydWUiIGNyZWF0ZUNoaWxkPSJmYWxzZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFUmVmZXJlbmNlIG1vZGVsLmVjb3JlIy8vTW9kZWwvZWRnZURlY29yYXRvcnMiLz4KKyAgICAgIDxnZW5PcGVyYXRpb25zIGVjb3JlT3BlcmF0aW9uPSJtb2RlbC5lY29yZSMvL01vZGVsL2dldENhbm9uaWNhbEdyYXBoIj4KKyAgICAgICAgPGdlblBhcmFtZXRlcnMgZWNvcmVQYXJhbWV0ZXI9Im1vZGVsLmVjb3JlIy8vTW9kZWwvZ2V0Q2Fub25pY2FsR3JhcGgvdXJpIi8+CisgICAgICAgIDxnZW5QYXJhbWV0ZXJzIGVjb3JlUGFyYW1ldGVyPSJtb2RlbC5lY29yZSMvL01vZGVsL2dldENhbm9uaWNhbEdyYXBoL2ZpbHRlciIvPgorICAgICAgICA8Z2VuUGFyYW1ldGVycyBlY29yZVBhcmFtZXRlcj0ibW9kZWwuZWNvcmUjLy9Nb2RlbC9nZXRDYW5vbmljYWxHcmFwaC90aW1lIi8+CisgICAgICA8L2dlbk9wZXJhdGlvbnM+CisgICAgICA8Z2VuT3BlcmF0aW9ucyBlY29yZU9wZXJhdGlvbj0ibW9kZWwuZWNvcmUjLy9Nb2RlbC9wcmVwYXJlIj4KKyAgICAgICAgPGdlblBhcmFtZXRlcnMgZWNvcmVQYXJhbWV0ZXI9Im1vZGVsLmVjb3JlIy8vTW9kZWwvcHJlcGFyZS90aW1lIi8+CisgICAgICA8L2dlbk9wZXJhdGlvbnM+CisgICAgPC9nZW5DbGFzc2VzPgorICAgIDxnZW5DbGFzc2VzIGltYWdlPSJmYWxzZSIgZWNvcmVDbGFzcz0ibW9kZWwuZWNvcmUjLy9Ob2RlRGVjb3JhdG9yIi8+CisgICAgPGdlbkNsYXNzZXMgZWNvcmVDbGFzcz0ibW9kZWwuZWNvcmUjLy9TVEVNVGltZSI+CisgICAgICA8Z2VuRmVhdHVyZXMgY3JlYXRlQ2hpbGQ9ImZhbHNlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVBdHRyaWJ1dGUgbW9kZWwuZWNvcmUjLy9TVEVNVGltZS90aW1lIi8+CisgICAgICA8Z2VuT3BlcmF0aW9ucyBlY29yZU9wZXJhdGlvbj0ibW9kZWwuZWNvcmUjLy9TVEVNVGltZS9hZGRJbmNyZW1lbnQiPgorICAgICAgICA8Z2VuUGFyYW1ldGVycyBlY29yZVBhcmFtZXRlcj0ibW9kZWwuZWNvcmUjLy9TVEVNVGltZS9hZGRJbmNyZW1lbnQvdGltZUluY3JlbWVudCIvPgorICAgICAgPC9nZW5PcGVyYXRpb25zPgorICAgICAgPGdlbk9wZXJhdGlvbnMgZWNvcmVPcGVyYXRpb249Im1vZGVsLmVjb3JlIy8vU1RFTVRpbWUvdmFsdWVFcXVhbHMiPgorICAgICAgICA8Z2VuUGFyYW1ldGVycyBlY29yZVBhcmFtZXRlcj0ibW9kZWwuZWNvcmUjLy9TVEVNVGltZS92YWx1ZUVxdWFscy9vYmoiLz4KKyAgICAgIDwvZ2VuT3BlcmF0aW9ucz4KKyAgICA8L2dlbkNsYXNzZXM+CisgICAgPGdlbkNsYXNzZXMgaW1hZ2U9ImZhbHNlIiBlY29yZUNsYXNzPSJtb2RlbC5lY29yZSMvL0NvbXBhcmFibGUiPgorICAgICAgPGdlblR5cGVQYXJhbWV0ZXJzIGVjb3JlVHlwZVBhcmFtZXRlcj0ibW9kZWwuZWNvcmUjLy9Db21wYXJhYmxlL1QiLz4KKyAgICA8L2dlbkNsYXNzZXM+CisgICAgPGdlbkNsYXNzZXMgaW1hZ2U9ImZhbHNlIiBlY29yZUNsYXNzPSJtb2RlbC5lY29yZSMvL0ludGVncmF0aW9uRGVjb3JhdG9yIj4KKyAgICAgIDxnZW5PcGVyYXRpb25zIGVjb3JlT3BlcmF0aW9uPSJtb2RlbC5lY29yZSMvL0ludGVncmF0aW9uRGVjb3JhdG9yL2FwcGx5RXh0ZXJuYWxEZWx0YXMiPgorICAgICAgICA8Z2VuUGFyYW1ldGVycyBlY29yZVBhcmFtZXRlcj0ibW9kZWwuZWNvcmUjLy9JbnRlZ3JhdGlvbkRlY29yYXRvci9hcHBseUV4dGVybmFsRGVsdGFzL3RpbWUiLz4KKyAgICAgICAgPGdlblBhcmFtZXRlcnMgZWNvcmVQYXJhbWV0ZXI9Im1vZGVsLmVjb3JlIy8vSW50ZWdyYXRpb25EZWNvcmF0b3IvYXBwbHlFeHRlcm5hbERlbHRhcy90aW1lRGVsdGEiLz4KKyAgICAgICAgPGdlblBhcmFtZXRlcnMgZWNvcmVQYXJhbWV0ZXI9Im1vZGVsLmVjb3JlIy8vSW50ZWdyYXRpb25EZWNvcmF0b3IvYXBwbHlFeHRlcm5hbERlbHRhcy9sYWJlbHMiLz4KKyAgICAgIDwvZ2VuT3BlcmF0aW9ucz4KKyAgICAgIDxnZW5PcGVyYXRpb25zIGVjb3JlT3BlcmF0aW9uPSJtb2RlbC5lY29yZSMvL0ludGVncmF0aW9uRGVjb3JhdG9yL2NhbGN1bGF0ZURlbHRhIj4KKyAgICAgICAgPGdlblBhcmFtZXRlcnMgZWNvcmVQYXJhbWV0ZXI9Im1vZGVsLmVjb3JlIy8vSW50ZWdyYXRpb25EZWNvcmF0b3IvY2FsY3VsYXRlRGVsdGEvdGltZSIvPgorICAgICAgICA8Z2VuUGFyYW1ldGVycyBlY29yZVBhcmFtZXRlcj0ibW9kZWwuZWNvcmUjLy9JbnRlZ3JhdGlvbkRlY29yYXRvci9jYWxjdWxhdGVEZWx0YS90aW1lRGVsdGEiLz4KKyAgICAgICAgPGdlblBhcmFtZXRlcnMgZWNvcmVQYXJhbWV0ZXI9Im1vZGVsLmVjb3JlIy8vSW50ZWdyYXRpb25EZWNvcmF0b3IvY2FsY3VsYXRlRGVsdGEvbGFiZWxzIi8+CisgICAgICA8L2dlbk9wZXJhdGlvbnM+CisgICAgICA8Z2VuT3BlcmF0aW9ucyBlY29yZU9wZXJhdGlvbj0ibW9kZWwuZWNvcmUjLy9JbnRlZ3JhdGlvbkRlY29yYXRvci9kb01vZGVsU3BlY2lmaWNBZGp1c3RtZW50cyI+CisgICAgICAgIDxnZW5QYXJhbWV0ZXJzIGVjb3JlUGFyYW1ldGVyPSJtb2RlbC5lY29yZSMvL0ludGVncmF0aW9uRGVjb3JhdG9yL2RvTW9kZWxTcGVjaWZpY0FkanVzdG1lbnRzL2xhYmVsIi8+CisgICAgICA8L2dlbk9wZXJhdGlvbnM+CisgICAgICA8Z2VuT3BlcmF0aW9ucyBlY29yZU9wZXJhdGlvbj0ibW9kZWwuZWNvcmUjLy9JbnRlZ3JhdGlvbkRlY29yYXRvci9pc0RldGVybWluaXN0aWMiLz4KKyAgICA8L2dlbkNsYXNzZXM+CisgIDwvZ2VuUGFja2FnZXM+CisgIDxnZW5QYWNrYWdlcyBwcmVmaXg9Ik1vZGlmaWVyIiBiYXNlUGFja2FnZT0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlIiBkaXNwb3NhYmxlUHJvdmlkZXJGYWN0b3J5PSJ0cnVlIgorICAgICAgZ2VuZXJhdGVFeGFtcGxlQ2xhc3M9ImZhbHNlIiBtdWx0aXBsZUVkaXRvclBhZ2VzPSJmYWxzZSIgZ2VuZXJhdGVNb2RlbFdpemFyZD0iZmFsc2UiCisgICAgICBlY29yZVBhY2thZ2U9Im1vZGlmaWVyLmVjb3JlIy8iPgorICAgIDxnZW5DbGFzc2VzIGltYWdlPSJmYWxzZSIgZWNvcmVDbGFzcz0ibW9kaWZpZXIuZWNvcmUjLy9Eb3VibGVOT1BNb2RpZmllciIvPgorICAgIDxnZW5DbGFzc2VzIGltYWdlPSJmYWxzZSIgZWNvcmVDbGFzcz0ibW9kaWZpZXIuZWNvcmUjLy9Eb3VibGVSYW5nZU1vZGlmaWVyIj4KKyAgICAgIDxnZW5GZWF0dXJlcyBjcmVhdGVDaGlsZD0iZmFsc2UiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RUF0dHJpYnV0ZSBtb2RpZmllci5lY29yZSMvL0RvdWJsZVJhbmdlTW9kaWZpZXIvc3RhcnRWYWx1ZSIvPgorICAgICAgPGdlbkZlYXR1cmVzIGNyZWF0ZUNoaWxkPSJmYWxzZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFQXR0cmlidXRlIG1vZGlmaWVyLmVjb3JlIy8vRG91YmxlUmFuZ2VNb2RpZmllci9lbmRWYWx1ZSIvPgorICAgICAgPGdlbkZlYXR1cmVzIGNyZWF0ZUNoaWxkPSJmYWxzZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFQXR0cmlidXRlIG1vZGlmaWVyLmVjb3JlIy8vRG91YmxlUmFuZ2VNb2RpZmllci9pbmNyZW1lbnQiLz4KKyAgICAgIDxnZW5GZWF0dXJlcyBwcm9wZXJ0eT0iTm9uZSIgY3JlYXRlQ2hpbGQ9ImZhbHNlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVBdHRyaWJ1dGUgbW9kaWZpZXIuZWNvcmUjLy9Eb3VibGVSYW5nZU1vZGlmaWVyL25leHRWYWx1ZSIvPgorICAgICAgPGdlbkZlYXR1cmVzIHByb3BlcnR5PSJOb25lIiBjcmVhdGVDaGlsZD0iZmFsc2UiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RUF0dHJpYnV0ZSBtb2RpZmllci5lY29yZSMvL0RvdWJsZVJhbmdlTW9kaWZpZXIvb3JpZ2luYWxWYWx1ZSIvPgorICAgIDwvZ2VuQ2xhc3Nlcz4KKyAgICA8Z2VuQ2xhc3NlcyBpbWFnZT0iZmFsc2UiIGVjb3JlQ2xhc3M9Im1vZGlmaWVyLmVjb3JlIy8vRG91YmxlU2VxdWVuY2VNb2RpZmllciI+CisgICAgICA8Z2VuRmVhdHVyZXMgY3JlYXRlQ2hpbGQ9ImZhbHNlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVBdHRyaWJ1dGUgbW9kaWZpZXIuZWNvcmUjLy9Eb3VibGVTZXF1ZW5jZU1vZGlmaWVyL3NlcXVlbmNlIi8+CisgICAgPC9nZW5DbGFzc2VzPgorICAgIDxnZW5DbGFzc2VzIGltYWdlPSJmYWxzZSIgZWNvcmVDbGFzcz0ibW9kaWZpZXIuZWNvcmUjLy9GZWF0dXJlTW9kaWZpZXIiPgorICAgICAgPGdlbkZlYXR1cmVzIHByb3BlcnR5PSJOb25lIiBub3RpZnk9ImZhbHNlIiBjcmVhdGVDaGlsZD0iZmFsc2UiIHByb3BlcnR5U29ydENob2ljZXM9InRydWUiCisgICAgICAgICAgZWNvcmVGZWF0dXJlPSJlY29yZTpFUmVmZXJlbmNlIG1vZGlmaWVyLmVjb3JlIy8vRmVhdHVyZU1vZGlmaWVyL3RhcmdldCIvPgorICAgICAgPGdlbkZlYXR1cmVzIHByb3BlcnR5PSJOb25lIiBub3RpZnk9ImZhbHNlIiBjcmVhdGVDaGlsZD0iZmFsc2UiIHByb3BlcnR5U29ydENob2ljZXM9InRydWUiCisgICAgICAgICAgZWNvcmVGZWF0dXJlPSJlY29yZTpFUmVmZXJlbmNlIG1vZGlmaWVyLmVjb3JlIy8vRmVhdHVyZU1vZGlmaWVyL2VTdHJ1Y3R1cmFsRmVhdHVyZSIvPgorICAgICAgPGdlbkZlYXR1cmVzIHByb3BlcnR5PSJSZWFkb25seSIgY3JlYXRlQ2hpbGQ9ImZhbHNlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVBdHRyaWJ1dGUgbW9kaWZpZXIuZWNvcmUjLy9GZWF0dXJlTW9kaWZpZXIvZmVhdHVyZU5hbWUiLz4KKyAgICAgIDxnZW5GZWF0dXJlcyBwcm9wZXJ0eT0iTm9uZSIgY3JlYXRlQ2hpbGQ9ImZhbHNlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVBdHRyaWJ1dGUgbW9kaWZpZXIuZWNvcmUjLy9GZWF0dXJlTW9kaWZpZXIvZmVhdHVyZUlkIi8+CisgICAgICA8Z2VuRmVhdHVyZXMgcHJvcGVydHk9Ik5vbmUiIGNyZWF0ZUNoaWxkPSJmYWxzZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFQXR0cmlidXRlIG1vZGlmaWVyLmVjb3JlIy8vRmVhdHVyZU1vZGlmaWVyL2N1cnJlbnRWYWx1ZVRleHQiLz4KKyAgICAgIDxnZW5GZWF0dXJlcyBwcm9wZXJ0eT0iUmVhZG9ubHkiIGNyZWF0ZUNoaWxkPSJmYWxzZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFQXR0cmlidXRlIG1vZGlmaWVyLmVjb3JlIy8vRmVhdHVyZU1vZGlmaWVyL2NvbXBsZXRlIi8+CisgICAgICA8Z2VuT3BlcmF0aW9ucyBlY29yZU9wZXJhdGlvbj0ibW9kaWZpZXIuZWNvcmUjLy9GZWF0dXJlTW9kaWZpZXIvdXBkYXRlRmVhdHVyZSIvPgorICAgICAgPGdlbk9wZXJhdGlvbnMgZWNvcmVPcGVyYXRpb249Im1vZGlmaWVyLmVjb3JlIy8vRmVhdHVyZU1vZGlmaWVyL3Jlc2V0Ii8+CisgICAgPC9nZW5DbGFzc2VzPgorICAgIDxnZW5DbGFzc2VzIGltYWdlPSJmYWxzZSIgZWNvcmVDbGFzcz0ibW9kaWZpZXIuZWNvcmUjLy9JbnRlZ2VyTk9QTW9kaWZpZXIiLz4KKyAgICA8Z2VuQ2xhc3NlcyBpbWFnZT0iZmFsc2UiIGVjb3JlQ2xhc3M9Im1vZGlmaWVyLmVjb3JlIy8vSW50ZWdlclJhbmdlTW9kaWZpZXIiPgorICAgICAgPGdlbkZlYXR1cmVzIGNyZWF0ZUNoaWxkPSJmYWxzZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFQXR0cmlidXRlIG1vZGlmaWVyLmVjb3JlIy8vSW50ZWdlclJhbmdlTW9kaWZpZXIvc3RhcnRWYWx1ZSIvPgorICAgICAgPGdlbkZlYXR1cmVzIGNyZWF0ZUNoaWxkPSJmYWxzZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFQXR0cmlidXRlIG1vZGlmaWVyLmVjb3JlIy8vSW50ZWdlclJhbmdlTW9kaWZpZXIvZW5kVmFsdWUiLz4KKyAgICAgIDxnZW5GZWF0dXJlcyBjcmVhdGVDaGlsZD0iZmFsc2UiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RUF0dHJpYnV0ZSBtb2RpZmllci5lY29yZSMvL0ludGVnZXJSYW5nZU1vZGlmaWVyL2luY3JlbWVudCIvPgorICAgICAgPGdlbkZlYXR1cmVzIHByb3BlcnR5PSJOb25lIiBjcmVhdGVDaGlsZD0iZmFsc2UiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RUF0dHJpYnV0ZSBtb2RpZmllci5lY29yZSMvL0ludGVnZXJSYW5nZU1vZGlmaWVyL25leHRWYWx1ZSIvPgorICAgICAgPGdlbkZlYXR1cmVzIHByb3BlcnR5PSJOb25lIiBjcmVhdGVDaGlsZD0iZmFsc2UiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RUF0dHJpYnV0ZSBtb2RpZmllci5lY29yZSMvL0ludGVnZXJSYW5nZU1vZGlmaWVyL29yaWdpbmFsVmFsdWUiLz4KKyAgICA8L2dlbkNsYXNzZXM+CisgICAgPGdlbkNsYXNzZXMgaW1hZ2U9ImZhbHNlIiBlY29yZUNsYXNzPSJtb2RpZmllci5lY29yZSMvL0ludGVnZXJTZXF1ZW5jZU1vZGlmaWVyIj4KKyAgICAgIDxnZW5GZWF0dXJlcyBjcmVhdGVDaGlsZD0iZmFsc2UiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RUF0dHJpYnV0ZSBtb2RpZmllci5lY29yZSMvL0ludGVnZXJTZXF1ZW5jZU1vZGlmaWVyL3NlcXVlbmNlIi8+CisgICAgPC9nZW5DbGFzc2VzPgorICAgIDxnZW5DbGFzc2VzIGltYWdlPSJmYWxzZSIgZWNvcmVDbGFzcz0ibW9kaWZpZXIuZWNvcmUjLy9Mb25nTk9QTW9kaWZpZXIiLz4KKyAgICA8Z2VuQ2xhc3NlcyBpbWFnZT0iZmFsc2UiIGVjb3JlQ2xhc3M9Im1vZGlmaWVyLmVjb3JlIy8vTG9uZ1JhbmdlTW9kaWZpZXIiPgorICAgICAgPGdlbkZlYXR1cmVzIGNyZWF0ZUNoaWxkPSJmYWxzZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFQXR0cmlidXRlIG1vZGlmaWVyLmVjb3JlIy8vTG9uZ1JhbmdlTW9kaWZpZXIvc3RhcnRWYWx1ZSIvPgorICAgICAgPGdlbkZlYXR1cmVzIGNyZWF0ZUNoaWxkPSJmYWxzZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFQXR0cmlidXRlIG1vZGlmaWVyLmVjb3JlIy8vTG9uZ1JhbmdlTW9kaWZpZXIvZW5kVmFsdWUiLz4KKyAgICAgIDxnZW5GZWF0dXJlcyBjcmVhdGVDaGlsZD0iZmFsc2UiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RUF0dHJpYnV0ZSBtb2RpZmllci5lY29yZSMvL0xvbmdSYW5nZU1vZGlmaWVyL2luY3JlbWVudCIvPgorICAgICAgPGdlbkZlYXR1cmVzIHByb3BlcnR5PSJOb25lIiBjcmVhdGVDaGlsZD0iZmFsc2UiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RUF0dHJpYnV0ZSBtb2RpZmllci5lY29yZSMvL0xvbmdSYW5nZU1vZGlmaWVyL25leHRWYWx1ZSIvPgorICAgICAgPGdlbkZlYXR1cmVzIHByb3BlcnR5PSJOb25lIiBjcmVhdGVDaGlsZD0iZmFsc2UiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RUF0dHJpYnV0ZSBtb2RpZmllci5lY29yZSMvL0xvbmdSYW5nZU1vZGlmaWVyL29yaWdpbmFsVmFsdWUiLz4KKyAgICA8L2dlbkNsYXNzZXM+CisgICAgPGdlbkNsYXNzZXMgaW1hZ2U9ImZhbHNlIiBlY29yZUNsYXNzPSJtb2RpZmllci5lY29yZSMvL0xvbmdTZXF1ZW5jZU1vZGlmaWVyIj4KKyAgICAgIDxnZW5GZWF0dXJlcyBjcmVhdGVDaGlsZD0iZmFsc2UiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RUF0dHJpYnV0ZSBtb2RpZmllci5lY29yZSMvL0xvbmdTZXF1ZW5jZU1vZGlmaWVyL3NlcXVlbmNlIi8+CisgICAgPC9nZW5DbGFzc2VzPgorICAgIDxnZW5DbGFzc2VzIGltYWdlPSJmYWxzZSIgZWNvcmVDbGFzcz0ibW9kaWZpZXIuZWNvcmUjLy9Nb2RpZmllciI+CisgICAgICA8Z2VuRmVhdHVyZXMgcHJvcGVydHk9IlJlYWRvbmx5IiBub3RpZnk9ImZhbHNlIiBjcmVhdGVDaGlsZD0iZmFsc2UiIHByb3BlcnR5RGVzY3JpcHRpb249IiIKKyAgICAgICAgICBlY29yZUZlYXR1cmU9ImVjb3JlOkVBdHRyaWJ1dGUgbW9kaWZpZXIuZWNvcmUjLy9Nb2RpZmllci90YXJnZXRVUkkiLz4KKyAgICAgIDxnZW5GZWF0dXJlcyBwcm9wZXJ0eT0iTm9uZSIgY2hpbGRyZW49InRydWUiIGNyZWF0ZUNoaWxkPSJmYWxzZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFUmVmZXJlbmNlIG1vZGlmaWVyLmVjb3JlIy8vTW9kaWZpZXIvZmVhdHVyZU1vZGlmaWVycyIvPgorICAgICAgPGdlbkZlYXR1cmVzIHByb3BlcnR5PSJSZWFkb25seSIgY3JlYXRlQ2hpbGQ9ImZhbHNlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVBdHRyaWJ1dGUgbW9kaWZpZXIuZWNvcmUjLy9Nb2RpZmllci9jb21wbGV0ZSIvPgorICAgICAgPGdlbk9wZXJhdGlvbnMgZWNvcmVPcGVyYXRpb249Im1vZGlmaWVyLmVjb3JlIy8vTW9kaWZpZXIvdXBkYXRlU2NlbmFyaW8iPgorICAgICAgICA8Z2VuUGFyYW1ldGVycyBlY29yZVBhcmFtZXRlcj0ibW9kaWZpZXIuZWNvcmUjLy9Nb2RpZmllci91cGRhdGVTY2VuYXJpby9iYXNlU2NlbmFyaW8iLz4KKyAgICAgIDwvZ2VuT3BlcmF0aW9ucz4KKyAgICAgIDxnZW5PcGVyYXRpb25zIGVjb3JlT3BlcmF0aW9uPSJtb2RpZmllci5lY29yZSMvL01vZGlmaWVyL3Jlc2V0Ii8+CisgICAgPC9nZW5DbGFzc2VzPgorICAgIDxnZW5DbGFzc2VzIGVjb3JlQ2xhc3M9Im1vZGlmaWVyLmVjb3JlIy8vTk9QTW9kaWZpZXIiLz4KKyAgICA8Z2VuQ2xhc3NlcyBlY29yZUNsYXNzPSJtb2RpZmllci5lY29yZSMvL1JhbmdlTW9kaWZpZXIiLz4KKyAgICA8Z2VuQ2xhc3NlcyBpbWFnZT0iZmFsc2UiIGVjb3JlQ2xhc3M9Im1vZGlmaWVyLmVjb3JlIy8vU1RFTVRpbWVOT1BNb2RpZmllciIvPgorICAgIDxnZW5DbGFzc2VzIGltYWdlPSJmYWxzZSIgZWNvcmVDbGFzcz0ibW9kaWZpZXIuZWNvcmUjLy9TVEVNVGltZVJhbmdlTW9kaWZpZXIiPgorICAgICAgPGdlbkZlYXR1cmVzIG5vdGlmeT0iZmFsc2UiIGNyZWF0ZUNoaWxkPSJmYWxzZSIgcHJvcGVydHlTb3J0Q2hvaWNlcz0idHJ1ZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFUmVmZXJlbmNlIG1vZGlmaWVyLmVjb3JlIy8vU1RFTVRpbWVSYW5nZU1vZGlmaWVyL3N0YXJ0VmFsdWUiLz4KKyAgICAgIDxnZW5GZWF0dXJlcyBub3RpZnk9ImZhbHNlIiBjcmVhdGVDaGlsZD0iZmFsc2UiIHByb3BlcnR5U29ydENob2ljZXM9InRydWUiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RVJlZmVyZW5jZSBtb2RpZmllci5lY29yZSMvL1NURU1UaW1lUmFuZ2VNb2RpZmllci9lbmRWYWx1ZSIvPgorICAgICAgPGdlbkZlYXR1cmVzIGNyZWF0ZUNoaWxkPSJmYWxzZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFQXR0cmlidXRlIG1vZGlmaWVyLmVjb3JlIy8vU1RFTVRpbWVSYW5nZU1vZGlmaWVyL2luY3JlbWVudCIvPgorICAgICAgPGdlbkZlYXR1cmVzIG5vdGlmeT0iZmFsc2UiIGNyZWF0ZUNoaWxkPSJmYWxzZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFUmVmZXJlbmNlIG1vZGlmaWVyLmVjb3JlIy8vU1RFTVRpbWVSYW5nZU1vZGlmaWVyL25leHRWYWx1ZSIvPgorICAgICAgPGdlbkZlYXR1cmVzIHByb3BlcnR5PSJOb25lIiBub3RpZnk9ImZhbHNlIiBjcmVhdGVDaGlsZD0iZmFsc2UiIHByb3BlcnR5U29ydENob2ljZXM9InRydWUiCisgICAgICAgICAgZWNvcmVGZWF0dXJlPSJlY29yZTpFUmVmZXJlbmNlIG1vZGlmaWVyLmVjb3JlIy8vU1RFTVRpbWVSYW5nZU1vZGlmaWVyL29yaWdpbmFsVmFsdWUiLz4KKyAgICA8L2dlbkNsYXNzZXM+CisgICAgPGdlbkNsYXNzZXMgaW1hZ2U9ImZhbHNlIiBlY29yZUNsYXNzPSJtb2RpZmllci5lY29yZSMvL1NURU1UaW1lU2VxdWVuY2VNb2RpZmllciI+CisgICAgICA8Z2VuRmVhdHVyZXMgbm90aWZ5PSJmYWxzZSIgY3JlYXRlQ2hpbGQ9ImZhbHNlIiBwcm9wZXJ0eVNvcnRDaG9pY2VzPSJ0cnVlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVSZWZlcmVuY2UgbW9kaWZpZXIuZWNvcmUjLy9TVEVNVGltZVNlcXVlbmNlTW9kaWZpZXIvc2VxdWVuY2UiLz4KKyAgICA8L2dlbkNsYXNzZXM+CisgICAgPGdlbkNsYXNzZXMgZWNvcmVDbGFzcz0ibW9kaWZpZXIuZWNvcmUjLy9TZXF1ZW5jZU1vZGlmaWVyIj4KKyAgICAgIDxnZW5GZWF0dXJlcyBwcm9wZXJ0eT0iUmVhZG9ubHkiIGNyZWF0ZUNoaWxkPSJmYWxzZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFQXR0cmlidXRlIG1vZGlmaWVyLmVjb3JlIy8vU2VxdWVuY2VNb2RpZmllci9zZXF1ZW5jZVNpemUiLz4KKyAgICAgIDxnZW5GZWF0dXJlcyBwcm9wZXJ0eT0iUmVhZG9ubHkiIGNyZWF0ZUNoaWxkPSJmYWxzZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFQXR0cmlidXRlIG1vZGlmaWVyLmVjb3JlIy8vU2VxdWVuY2VNb2RpZmllci9jdXJyZW50U2VxdWVuY2VJbmRleCIvPgorICAgICAgPGdlbkZlYXR1cmVzIHByb3BlcnR5PSJSZWFkb25seSIgY3JlYXRlQ2hpbGQ9ImZhbHNlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVBdHRyaWJ1dGUgbW9kaWZpZXIuZWNvcmUjLy9TZXF1ZW5jZU1vZGlmaWVyL25leHRWYWx1ZSIvPgorICAgICAgPGdlbkZlYXR1cmVzIGNyZWF0ZUNoaWxkPSJmYWxzZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFQXR0cmlidXRlIG1vZGlmaWVyLmVjb3JlIy8vU2VxdWVuY2VNb2RpZmllci9vcmlnaW5hbFZhbHVlIi8+CisgICAgPC9nZW5DbGFzc2VzPgorICAgIDxnZW5DbGFzc2VzIGltYWdlPSJmYWxzZSIgZWNvcmVDbGFzcz0ibW9kaWZpZXIuZWNvcmUjLy9TdHJpbmdOT1BNb2RpZmllciIvPgorICAgIDxnZW5DbGFzc2VzIGltYWdlPSJmYWxzZSIgZWNvcmVDbGFzcz0ibW9kaWZpZXIuZWNvcmUjLy9TdHJpbmdTZXF1ZW5jZU1vZGlmaWVyIj4KKyAgICAgIDxnZW5GZWF0dXJlcyBjcmVhdGVDaGlsZD0iZmFsc2UiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RUF0dHJpYnV0ZSBtb2RpZmllci5lY29yZSMvL1N0cmluZ1NlcXVlbmNlTW9kaWZpZXIvc2VxdWVuY2UiLz4KKyAgICA8L2dlbkNsYXNzZXM+CisgICAgPGdlbkNsYXNzZXMgcHJvdmlkZXI9Ik5vbmUiIGltYWdlPSJmYWxzZSIgZWNvcmVDbGFzcz0ibW9kaWZpZXIuZWNvcmUjLy9Nb2RpZmlhYmxlIi8+CisgICAgPGdlbkNsYXNzZXMgaW1hZ2U9ImZhbHNlIiBlY29yZUNsYXNzPSJtb2RpZmllci5lY29yZSMvL1NpbmdsZVZhbHVlTW9kaWZpZXIiLz4KKyAgICA8Z2VuQ2xhc3NlcyBlY29yZUNsYXNzPSJtb2RpZmllci5lY29yZSMvL0RvdWJsZU1vZGlmaWVyIj4KKyAgICAgIDxnZW5GZWF0dXJlcyBjcmVhdGVDaGlsZD0iZmFsc2UiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RUF0dHJpYnV0ZSBtb2RpZmllci5lY29yZSMvL0RvdWJsZU1vZGlmaWVyL3ZhbHVlIi8+CisgICAgICA8Z2VuRmVhdHVyZXMgcHJvcGVydHk9IlJlYWRvbmx5IiBjcmVhdGVDaGlsZD0iZmFsc2UiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RUF0dHJpYnV0ZSBtb2RpZmllci5lY29yZSMvL0RvdWJsZU1vZGlmaWVyL29yaWdpbmFsVmFsdWUiLz4KKyAgICA8L2dlbkNsYXNzZXM+CisgICAgPGdlbkNsYXNzZXMgZWNvcmVDbGFzcz0ibW9kaWZpZXIuZWNvcmUjLy9JbnRlZ2VyTW9kaWZpZXIiPgorICAgICAgPGdlbkZlYXR1cmVzIGNyZWF0ZUNoaWxkPSJmYWxzZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFQXR0cmlidXRlIG1vZGlmaWVyLmVjb3JlIy8vSW50ZWdlck1vZGlmaWVyL3ZhbHVlIi8+CisgICAgICA8Z2VuRmVhdHVyZXMgcHJvcGVydHk9IlJlYWRvbmx5IiBjcmVhdGVDaGlsZD0iZmFsc2UiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RUF0dHJpYnV0ZSBtb2RpZmllci5lY29yZSMvL0ludGVnZXJNb2RpZmllci9vcmlnaW5hbFZhbHVlIi8+CisgICAgPC9nZW5DbGFzc2VzPgorICAgIDxnZW5DbGFzc2VzIGVjb3JlQ2xhc3M9Im1vZGlmaWVyLmVjb3JlIy8vTG9uZ01vZGlmaWVyIj4KKyAgICAgIDxnZW5GZWF0dXJlcyBjcmVhdGVDaGlsZD0iZmFsc2UiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RUF0dHJpYnV0ZSBtb2RpZmllci5lY29yZSMvL0xvbmdNb2RpZmllci92YWx1ZSIvPgorICAgICAgPGdlbkZlYXR1cmVzIHByb3BlcnR5PSJSZWFkb25seSIgY3JlYXRlQ2hpbGQ9ImZhbHNlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVBdHRyaWJ1dGUgbW9kaWZpZXIuZWNvcmUjLy9Mb25nTW9kaWZpZXIvb3JpZ2luYWxWYWx1ZSIvPgorICAgIDwvZ2VuQ2xhc3Nlcz4KKyAgICA8Z2VuQ2xhc3NlcyBlY29yZUNsYXNzPSJtb2RpZmllci5lY29yZSMvL1NURU1UaW1lTW9kaWZpZXIiPgorICAgICAgPGdlbkZlYXR1cmVzIG5vdGlmeT0iZmFsc2UiIGNyZWF0ZUNoaWxkPSJmYWxzZSIgcHJvcGVydHlTb3J0Q2hvaWNlcz0idHJ1ZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFUmVmZXJlbmNlIG1vZGlmaWVyLmVjb3JlIy8vU1RFTVRpbWVNb2RpZmllci92YWx1ZSIvPgorICAgICAgPGdlbkZlYXR1cmVzIHByb3BlcnR5PSJSZWFkb25seSIgbm90aWZ5PSJmYWxzZSIgY3JlYXRlQ2hpbGQ9ImZhbHNlIiBwcm9wZXJ0eVNvcnRDaG9pY2VzPSJ0cnVlIgorICAgICAgICAgIGVjb3JlRmVhdHVyZT0iZWNvcmU6RVJlZmVyZW5jZSBtb2RpZmllci5lY29yZSMvL1NURU1UaW1lTW9kaWZpZXIvb3JpZ2luYWxWYWx1ZSIvPgorICAgIDwvZ2VuQ2xhc3Nlcz4KKyAgPC9nZW5QYWNrYWdlcz4KKyAgPGdlblBhY2thZ2VzIHByZWZpeD0iUHJlZGljYXRlIiBiYXNlUGFja2FnZT0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlIiBkaXNwb3NhYmxlUHJvdmlkZXJGYWN0b3J5PSJ0cnVlIgorICAgICAgZ2VuZXJhdGVFeGFtcGxlQ2xhc3M9ImZhbHNlIiBtdWx0aXBsZUVkaXRvclBhZ2VzPSJmYWxzZSIgZ2VuZXJhdGVNb2RlbFdpemFyZD0iZmFsc2UiCisgICAgICBleHRlbnNpYmxlUHJvdmlkZXJGYWN0b3J5PSJ0cnVlIiBlY29yZVBhY2thZ2U9InByZWRpY2F0ZS5lY29yZSMvIj4KKyAgICA8Z2VuQ2xhc3NlcyBlY29yZUNsYXNzPSJwcmVkaWNhdGUuZWNvcmUjLy9BbmQiLz4KKyAgICA8Z2VuQ2xhc3NlcyBpbWFnZT0iZmFsc2UiIGVjb3JlQ2xhc3M9InByZWRpY2F0ZS5lY29yZSMvL0Jvb2xlYW5FeHByZXNzaW9uIi8+CisgICAgPGdlbkNsYXNzZXMgaW1hZ2U9ImZhbHNlIiBlY29yZUNsYXNzPSJwcmVkaWNhdGUuZWNvcmUjLy9Cb29sZWFuT3BlcmF0b3IiLz4KKyAgICA8Z2VuQ2xhc3NlcyBlY29yZUNsYXNzPSJwcmVkaWNhdGUuZWNvcmUjLy9GYWxzZSIvPgorICAgIDxnZW5DbGFzc2VzIGltYWdlPSJmYWxzZSIgZWNvcmVDbGFzcz0icHJlZGljYXRlLmVjb3JlIy8vTmFyeUJvb2xlYW5PcGVyYXRvciI+CisgICAgICA8Z2VuRmVhdHVyZXMgcHJvcGVydHk9Ik5vbmUiIGNoaWxkcmVuPSJ0cnVlIiBjcmVhdGVDaGlsZD0idHJ1ZSIgcHJvcGVydHlTb3J0Q2hvaWNlcz0idHJ1ZSIKKyAgICAgICAgICBlY29yZUZlYXR1cmU9ImVjb3JlOkVSZWZlcmVuY2UgcHJlZGljYXRlLmVjb3JlIy8vTmFyeUJvb2xlYW5PcGVyYXRvci9vcGVyYW5kcyIvPgorICAgIDwvZ2VuQ2xhc3Nlcz4KKyAgICA8Z2VuQ2xhc3NlcyBlY29yZUNsYXNzPSJwcmVkaWNhdGUuZWNvcmUjLy9Ob3QiLz4KKyAgICA8Z2VuQ2xhc3NlcyBlY29yZUNsYXNzPSJwcmVkaWNhdGUuZWNvcmUjLy9PciIvPgorICAgIDxnZW5DbGFzc2VzIGVjb3JlQ2xhc3M9InByZWRpY2F0ZS5lY29yZSMvL1ByZWRpY2F0ZSI+CisgICAgICA8Z2VuT3BlcmF0aW9ucyBlY29yZU9wZXJhdGlvbj0icHJlZGljYXRlLmVjb3JlIy8vUHJlZGljYXRlL2V2YWx1YXRlIj4KKyAgICAgICAgPGdlblBhcmFtZXRlcnMgZWNvcmVQYXJhbWV0ZXI9InByZWRpY2F0ZS5lY29yZSMvL1ByZWRpY2F0ZS9ldmFsdWF0ZS90aW1lIi8+CisgICAgICAgIDxnZW5QYXJhbWV0ZXJzIGVjb3JlUGFyYW1ldGVyPSJwcmVkaWNhdGUuZWNvcmUjLy9QcmVkaWNhdGUvZXZhbHVhdGUvdGltZXJQZXJpb2QiLz4KKyAgICAgICAgPGdlblBhcmFtZXRlcnMgZWNvcmVQYXJhbWV0ZXI9InByZWRpY2F0ZS5lY29yZSMvL1ByZWRpY2F0ZS9ldmFsdWF0ZS9ncmFwaCIvPgorICAgICAgPC9nZW5PcGVyYXRpb25zPgorICAgICAgPGdlbk9wZXJhdGlvbnMgZWNvcmVPcGVyYXRpb249InByZWRpY2F0ZS5lY29yZSMvL1ByZWRpY2F0ZS9yZXNldCIvPgorICAgIDwvZ2VuQ2xhc3Nlcz4KKyAgICA8Z2VuQ2xhc3NlcyBlY29yZUNsYXNzPSJwcmVkaWNhdGUuZWNvcmUjLy9QcmVkaWNhdGVSZWZlcmVuY2UiPgorICAgICAgPGdlbkZlYXR1cmVzIHByb3BlcnR5PSJOb25lIiBjaGlsZHJlbj0idHJ1ZSIgY3JlYXRlQ2hpbGQ9ImZhbHNlIiBwcm9wZXJ0eVNvcnRDaG9pY2VzPSJ0cnVlIgorICAgICAgICAgIGVjb3JlRmVhdHVyZT0iZWNvcmU6RVJlZmVyZW5jZSBwcmVkaWNhdGUuZWNvcmUjLy9QcmVkaWNhdGVSZWZlcmVuY2UvcHJlZGljYXRlIi8+CisgICAgPC9nZW5DbGFzc2VzPgorICAgIDxnZW5DbGFzc2VzIGVjb3JlQ2xhc3M9InByZWRpY2F0ZS5lY29yZSMvL1Rlc3QiLz4KKyAgICA8Z2VuQ2xhc3NlcyBlY29yZUNsYXNzPSJwcmVkaWNhdGUuZWNvcmUjLy9UcnVlIi8+CisgICAgPGdlbkNsYXNzZXMgaW1hZ2U9ImZhbHNlIiBlY29yZUNsYXNzPSJwcmVkaWNhdGUuZWNvcmUjLy9VbmFyeUJvb2xlYW5PcGVyYXRvciI+CisgICAgICA8Z2VuRmVhdHVyZXMgcHJvcGVydHk9Ik5vbmUiIGNoaWxkcmVuPSJ0cnVlIiBjcmVhdGVDaGlsZD0idHJ1ZSIgcHJvcGVydHlTb3J0Q2hvaWNlcz0idHJ1ZSIKKyAgICAgICAgICBlY29yZUZlYXR1cmU9ImVjb3JlOkVSZWZlcmVuY2UgcHJlZGljYXRlLmVjb3JlIy8vVW5hcnlCb29sZWFuT3BlcmF0b3Ivb3BlcmFuZCIvPgorICAgIDwvZ2VuQ2xhc3Nlcz4KKyAgICA8Z2VuQ2xhc3NlcyBlY29yZUNsYXNzPSJwcmVkaWNhdGUuZWNvcmUjLy9QcmVkaWNhdGVFeHByZXNzaW9uIj4KKyAgICAgIDxnZW5GZWF0dXJlcyBwcm9wZXJ0eT0iTm9uZSIgY2hpbGRyZW49InRydWUiIGNyZWF0ZUNoaWxkPSJ0cnVlIiBwcm9wZXJ0eVNvcnRDaG9pY2VzPSJ0cnVlIgorICAgICAgICAgIGVjb3JlRmVhdHVyZT0iZWNvcmU6RVJlZmVyZW5jZSBwcmVkaWNhdGUuZWNvcmUjLy9QcmVkaWNhdGVFeHByZXNzaW9uL3ByZWRpY2F0ZSIvPgorICAgIDwvZ2VuQ2xhc3Nlcz4KKyAgICA8Z2VuQ2xhc3NlcyBpbWFnZT0iZmFsc2UiIGVjb3JlQ2xhc3M9InByZWRpY2F0ZS5lY29yZSMvL0lkZW50aWZpYWJsZVByZWRpY2F0ZSIvPgorICAgIDxnZW5DbGFzc2VzIGVjb3JlQ2xhc3M9InByZWRpY2F0ZS5lY29yZSMvL0lkZW50aWZpYWJsZVByZWRpY2F0ZUV4cHJlc3Npb24iLz4KKyAgICA8Z2VuQ2xhc3NlcyBpbWFnZT0iZmFsc2UiIGVjb3JlQ2xhc3M9InByZWRpY2F0ZS5lY29yZSMvL0lkZW50aWZpYWJsZVRlc3QiLz4KKyAgICA8Z2VuQ2xhc3NlcyBpbWFnZT0iZmFsc2UiIGVjb3JlQ2xhc3M9InByZWRpY2F0ZS5lY29yZSMvL1RpbWVUZXN0Ii8+CisgICAgPGdlbkNsYXNzZXMgZWNvcmVDbGFzcz0icHJlZGljYXRlLmVjb3JlIy8vRWxhcHNlZFRpbWVUZXN0Ij4KKyAgICAgIDxnZW5GZWF0dXJlcyBwcm9wZXJ0eT0iTm9uZSIgbm90aWZ5PSJmYWxzZSIgY3JlYXRlQ2hpbGQ9ImZhbHNlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVBdHRyaWJ1dGUgcHJlZGljYXRlLmVjb3JlIy8vRWxhcHNlZFRpbWVUZXN0L3JlZmVyZW5jZVRpbWVWYWxpZCIvPgorICAgICAgPGdlbkZlYXR1cmVzIHByb3BlcnR5PSJOb25lIiBub3RpZnk9ImZhbHNlIiBjcmVhdGVDaGlsZD0iZmFsc2UiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RUF0dHJpYnV0ZSBwcmVkaWNhdGUuZWNvcmUjLy9FbGFwc2VkVGltZVRlc3QvZWxhcHNlZE1pbGxpc2Vjb25kcyIvPgorICAgICAgPGdlbkZlYXR1cmVzIGNyZWF0ZUNoaWxkPSJmYWxzZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFQXR0cmlidXRlIHByZWRpY2F0ZS5lY29yZSMvL0VsYXBzZWRUaW1lVGVzdC9udW1iZXJvZkRheXMiLz4KKyAgICAgIDxnZW5GZWF0dXJlcyBwcm9wZXJ0eT0iTm9uZSIgbm90aWZ5PSJmYWxzZSIgY3JlYXRlQ2hpbGQ9ImZhbHNlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVSZWZlcmVuY2UgcHJlZGljYXRlLmVjb3JlIy8vRWxhcHNlZFRpbWVUZXN0L3JlZmVyZW5jZVRpbWUiLz4KKyAgICA8L2dlbkNsYXNzZXM+CisgIDwvZ2VuUGFja2FnZXM+CisgIDxnZW5QYWNrYWdlcyBwcmVmaXg9IlNjZW5hcmlvIiBiYXNlUGFja2FnZT0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlIiBkaXNwb3NhYmxlUHJvdmlkZXJGYWN0b3J5PSJ0cnVlIgorICAgICAgZ2VuZXJhdGVFeGFtcGxlQ2xhc3M9ImZhbHNlIiBtdWx0aXBsZUVkaXRvclBhZ2VzPSJmYWxzZSIgZ2VuZXJhdGVNb2RlbFdpemFyZD0iZmFsc2UiCisgICAgICBlY29yZVBhY2thZ2U9InNjZW5hcmlvLmVjb3JlIy8iPgorICAgIDxnZW5DbGFzc2VzIGltYWdlPSJmYWxzZSIgZWNvcmVDbGFzcz0ic2NlbmFyaW8uZWNvcmUjLy9TY2VuYXJpbyI+CisgICAgICA8Z2VuRmVhdHVyZXMgcHJvcGVydHk9Ik5vbmUiIGNoaWxkcmVuPSJ0cnVlIiBjcmVhdGVDaGlsZD0idHJ1ZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFUmVmZXJlbmNlIHNjZW5hcmlvLmVjb3JlIy8vU2NlbmFyaW8vbW9kZWwiLz4KKyAgICAgIDxnZW5GZWF0dXJlcyBwcm9wZXJ0eT0iTm9uZSIgY2hpbGRyZW49InRydWUiIGNyZWF0ZUNoaWxkPSJ0cnVlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVSZWZlcmVuY2Ugc2NlbmFyaW8uZWNvcmUjLy9TY2VuYXJpby9zZXF1ZW5jZXIiLz4KKyAgICAgIDxnZW5GZWF0dXJlcyBwcm9wZXJ0eT0iTm9uZSIgY2hpbGRyZW49InRydWUiIGNyZWF0ZUNoaWxkPSJmYWxzZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFUmVmZXJlbmNlIHNjZW5hcmlvLmVjb3JlIy8vU2NlbmFyaW8vc2NlbmFyaW9EZWNvcmF0b3JzIi8+CisgICAgICA8Z2VuRmVhdHVyZXMgcHJvcGVydHk9Ik5vbmUiIG5vdGlmeT0iZmFsc2UiIGNyZWF0ZUNoaWxkPSJmYWxzZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFUmVmZXJlbmNlIHNjZW5hcmlvLmVjb3JlIy8vU2NlbmFyaW8vY2Fub25pY2FsR3JhcGgiLz4KKyAgICAgIDxnZW5GZWF0dXJlcyBwcm9wZXJ0eT0iTm9uZSIgY3JlYXRlQ2hpbGQ9ImZhbHNlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVBdHRyaWJ1dGUgc2NlbmFyaW8uZWNvcmUjLy9TY2VuYXJpby9wcm9ncmVzcyIvPgorICAgICAgPGdlbkZlYXR1cmVzIHByb3BlcnR5PSJOb25lIiBjaGlsZHJlbj0idHJ1ZSIgY3JlYXRlQ2hpbGQ9InRydWUiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RVJlZmVyZW5jZSBzY2VuYXJpby5lY29yZSMvL1NjZW5hcmlvL3NvbHZlciIvPgorICAgICAgPGdlbkZlYXR1cmVzIHByb3BlcnR5PSJOb25lIiBjaGlsZHJlbj0idHJ1ZSIgY3JlYXRlQ2hpbGQ9InRydWUiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RVJlZmVyZW5jZSBzY2VuYXJpby5lY29yZSMvL1NjZW5hcmlvL2xvZ2dlcnMiLz4KKyAgICAgIDxnZW5PcGVyYXRpb25zIGVjb3JlT3BlcmF0aW9uPSJzY2VuYXJpby5lY29yZSMvL1NjZW5hcmlvL3N0ZXAiLz4KKyAgICAgIDxnZW5PcGVyYXRpb25zIGVjb3JlT3BlcmF0aW9uPSJzY2VuYXJpby5lY29yZSMvL1NjZW5hcmlvL3Jlc2V0Ii8+CisgICAgICA8Z2VuT3BlcmF0aW9ucyBlY29yZU9wZXJhdGlvbj0ic2NlbmFyaW8uZWNvcmUjLy9TY2VuYXJpby9pbml0aWFsaXplIi8+CisgICAgICA8Z2VuT3BlcmF0aW9ucyBlY29yZU9wZXJhdGlvbj0ic2NlbmFyaW8uZWNvcmUjLy9TY2VuYXJpby9wcm9kdWNlVGl0bGUiLz4KKyAgICA8L2dlbkNsYXNzZXM+CisgIDwvZ2VuUGFja2FnZXM+CisgIDxnZW5QYWNrYWdlcyBwcmVmaXg9IlNlcXVlbmNlciIgYmFzZVBhY2thZ2U9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZSIgZGlzcG9zYWJsZVByb3ZpZGVyRmFjdG9yeT0idHJ1ZSIKKyAgICAgIGdlbmVyYXRlRXhhbXBsZUNsYXNzPSJmYWxzZSIgbXVsdGlwbGVFZGl0b3JQYWdlcz0iZmFsc2UiIGdlbmVyYXRlTW9kZWxXaXphcmQ9ImZhbHNlIgorICAgICAgZWNvcmVQYWNrYWdlPSJzZXF1ZW5jZXIuZWNvcmUjLyI+CisgICAgPGdlbkNsYXNzZXMgaW1hZ2U9ImZhbHNlIiBlY29yZUNsYXNzPSJzZXF1ZW5jZXIuZWNvcmUjLy9SZWFsVGltZVNlcXVlbmNlciIvPgorICAgIDxnZW5DbGFzc2VzIGltYWdlPSJmYWxzZSIgZWNvcmVDbGFzcz0ic2VxdWVuY2VyLmVjb3JlIy8vU2VxdWVuY2VyIj4KKyAgICAgIDxnZW5GZWF0dXJlcyBjcmVhdGVDaGlsZD0iZmFsc2UiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RVJlZmVyZW5jZSBzZXF1ZW5jZXIuZWNvcmUjLy9TZXF1ZW5jZXIvc3RhcnRUaW1lIi8+CisgICAgICA8Z2VuRmVhdHVyZXMgY3JlYXRlQ2hpbGQ9ImZhbHNlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVSZWZlcmVuY2Ugc2VxdWVuY2VyLmVjb3JlIy8vU2VxdWVuY2VyL2VuZFRpbWUiLz4KKyAgICAgIDxnZW5GZWF0dXJlcyBwcm9wZXJ0eT0iUmVhZG9ubHkiIGNyZWF0ZUNoaWxkPSJmYWxzZSIgcHJvcGVydHlEZXNjcmlwdGlvbj0iIgorICAgICAgICAgIGVjb3JlRmVhdHVyZT0iZWNvcmU6RVJlZmVyZW5jZSBzZXF1ZW5jZXIuZWNvcmUjLy9TZXF1ZW5jZXIvY3VycmVudFRpbWUiLz4KKyAgICAgIDxnZW5GZWF0dXJlcyBwcm9wZXJ0eT0iUmVhZG9ubHkiIG5vdGlmeT0iZmFsc2UiIGNyZWF0ZUNoaWxkPSJmYWxzZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFUmVmZXJlbmNlIHNlcXVlbmNlci5lY29yZSMvL1NlcXVlbmNlci9uZXh0VGltZSIvPgorICAgICAgPGdlbkZlYXR1cmVzIHByb3BlcnR5PSJSZWFkb25seSIgY3JlYXRlQ2hpbGQ9ImZhbHNlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVBdHRyaWJ1dGUgc2VxdWVuY2VyLmVjb3JlIy8vU2VxdWVuY2VyL3RpbWVEZWx0YSIvPgorICAgICAgPGdlbkZlYXR1cmVzIHByb3BlcnR5PSJSZWFkb25seSIgY3JlYXRlQ2hpbGQ9ImZhbHNlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVBdHRyaWJ1dGUgc2VxdWVuY2VyLmVjb3JlIy8vU2VxdWVuY2VyL2R1cmF0aW9uIi8+CisgICAgICA8Z2VuRmVhdHVyZXMgcHJvcGVydHk9IlJlYWRvbmx5IiBjcmVhdGVDaGlsZD0iZmFsc2UiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RUF0dHJpYnV0ZSBzZXF1ZW5jZXIuZWNvcmUjLy9TZXF1ZW5jZXIvdGltZVRvU3RvcCIvPgorICAgICAgPGdlbkZlYXR1cmVzIHByb3BlcnR5PSJSZWFkb25seSIgY3JlYXRlQ2hpbGQ9ImZhbHNlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVBdHRyaWJ1dGUgc2VxdWVuY2VyLmVjb3JlIy8vU2VxdWVuY2VyL3dvcmtDb21wbGV0ZSIvPgorICAgICAgPGdlbkZlYXR1cmVzIHByb3BlcnR5PSJSZWFkb25seSIgY3JlYXRlQ2hpbGQ9ImZhbHNlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVBdHRyaWJ1dGUgc2VxdWVuY2VyLmVjb3JlIy8vU2VxdWVuY2VyL3dvcmtJbmNyZW1lbnQiLz4KKyAgICAgIDxnZW5GZWF0dXJlcyBwcm9wZXJ0eT0iUmVhZG9ubHkiIGNyZWF0ZUNoaWxkPSJmYWxzZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFQXR0cmlidXRlIHNlcXVlbmNlci5lY29yZSMvL1NlcXVlbmNlci9jeWNsZSIvPgorICAgICAgPGdlbk9wZXJhdGlvbnMgZWNvcmVPcGVyYXRpb249InNlcXVlbmNlci5lY29yZSMvL1NlcXVlbmNlci9yZXNldCIvPgorICAgIDwvZ2VuQ2xhc3Nlcz4KKyAgICA8Z2VuQ2xhc3NlcyBpbWFnZT0iZmFsc2UiIGVjb3JlQ2xhc3M9InNlcXVlbmNlci5lY29yZSMvL1NlcXVlbnRpYWxTZXF1ZW5jZXIiPgorICAgICAgPGdlbkZlYXR1cmVzIGNyZWF0ZUNoaWxkPSJmYWxzZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFQXR0cmlidXRlIHNlcXVlbmNlci5lY29yZSMvL1NlcXVlbnRpYWxTZXF1ZW5jZXIvdGltZUluY3JlbWVudCIvPgorICAgIDwvZ2VuQ2xhc3Nlcz4KKyAgPC9nZW5QYWNrYWdlcz4KKyAgPGdlblBhY2thZ2VzIHByZWZpeD0iVHJpZ2dlciIgYmFzZVBhY2thZ2U9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZSIgZGlzcG9zYWJsZVByb3ZpZGVyRmFjdG9yeT0idHJ1ZSIKKyAgICAgIGdlbmVyYXRlRXhhbXBsZUNsYXNzPSJmYWxzZSIgbXVsdGlwbGVFZGl0b3JQYWdlcz0iZmFsc2UiIGdlbmVyYXRlTW9kZWxXaXphcmQ9ImZhbHNlIgorICAgICAgZWNvcmVQYWNrYWdlPSJ0cmlnZ2VyLmVjb3JlIy8iPgorICAgIDxnZW5DbGFzc2VzIGVjb3JlQ2xhc3M9InRyaWdnZXIuZWNvcmUjLy9UcmlnZ2VyIj4KKyAgICAgIDxnZW5GZWF0dXJlcyBwcm9wZXJ0eT0iTm9uZSIgY2hpbGRyZW49InRydWUiIGNyZWF0ZUNoaWxkPSJmYWxzZSIgcHJvcGVydHlTb3J0Q2hvaWNlcz0idHJ1ZSIKKyAgICAgICAgICBlY29yZUZlYXR1cmU9ImVjb3JlOkVSZWZlcmVuY2UgdHJpZ2dlci5lY29yZSMvL1RyaWdnZXIvcHJlZGljYXRlIi8+CisgICAgICA8Z2VuRmVhdHVyZXMgbm90aWZ5PSJmYWxzZSIgY3JlYXRlQ2hpbGQ9ImZhbHNlIiBwcm9wZXJ0eVNvcnRDaG9pY2VzPSJ0cnVlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVSZWZlcmVuY2UgdHJpZ2dlci5lY29yZSMvL1RyaWdnZXIvYWN0aW9ucyIvPgorICAgIDwvZ2VuQ2xhc3Nlcz4KKyAgPC9nZW5QYWNrYWdlcz4KKyAgPGdlblBhY2thZ2VzIHByZWZpeD0iU29sdmVyIiBiYXNlUGFja2FnZT0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlIiBkaXNwb3NhYmxlUHJvdmlkZXJGYWN0b3J5PSJ0cnVlIgorICAgICAgZWNvcmVQYWNrYWdlPSJzb2x2ZXIuZWNvcmUjLyI+CisgICAgPGdlbkNsYXNzZXMgZWNvcmVDbGFzcz0ic29sdmVyLmVjb3JlIy8vU29sdmVyIj4KKyAgICAgIDxnZW5GZWF0dXJlcyBub3RpZnk9ImZhbHNlIiBjcmVhdGVDaGlsZD0iZmFsc2UiIHByb3BlcnR5U29ydENob2ljZXM9InRydWUiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RUF0dHJpYnV0ZSBzb2x2ZXIuZWNvcmUjLy9Tb2x2ZXIvZGVjb3JhdG9ycyIvPgorICAgICAgPGdlbkZlYXR1cmVzIHByb3BlcnR5PSJOb25lIiBjcmVhdGVDaGlsZD0iZmFsc2UiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RUF0dHJpYnV0ZSBzb2x2ZXIuZWNvcmUjLy9Tb2x2ZXIvaW5pdGlhbGl6ZWQiLz4KKyAgICAgIDxnZW5GZWF0dXJlcyBub3RpZnk9ImZhbHNlIiBjcmVhdGVDaGlsZD0iZmFsc2UiIHByb3BlcnR5U29ydENob2ljZXM9InRydWUiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RVJlZmVyZW5jZSBzb2x2ZXIuZWNvcmUjLy9Tb2x2ZXIvcGFydGl0aW9uZXIiLz4KKyAgICAgIDxnZW5PcGVyYXRpb25zIGVjb3JlT3BlcmF0aW9uPSJzb2x2ZXIuZWNvcmUjLy9Tb2x2ZXIvc3RlcCI+CisgICAgICAgIDxnZW5QYXJhbWV0ZXJzIGVjb3JlUGFyYW1ldGVyPSJzb2x2ZXIuZWNvcmUjLy9Tb2x2ZXIvc3RlcC90aW1lIi8+CisgICAgICAgIDxnZW5QYXJhbWV0ZXJzIGVjb3JlUGFyYW1ldGVyPSJzb2x2ZXIuZWNvcmUjLy9Tb2x2ZXIvc3RlcC90aW1lRGVsdGEiLz4KKyAgICAgICAgPGdlblBhcmFtZXRlcnMgZWNvcmVQYXJhbWV0ZXI9InNvbHZlci5lY29yZSMvL1NvbHZlci9zdGVwL2N5Y2xlIi8+CisgICAgICA8L2dlbk9wZXJhdGlvbnM+CisgICAgICA8Z2VuT3BlcmF0aW9ucyBlY29yZU9wZXJhdGlvbj0ic29sdmVyLmVjb3JlIy8vU29sdmVyL3Jlc2V0Ii8+CisgICAgPC9nZW5DbGFzc2VzPgorICA8L2dlblBhY2thZ2VzPgorICA8Z2VuUGFja2FnZXMgcHJlZml4PSJMb2dnZXIiIGJhc2VQYWNrYWdlPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUiIGRpc3Bvc2FibGVQcm92aWRlckZhY3Rvcnk9InRydWUiCisgICAgICBlY29yZVBhY2thZ2U9ImxvZ2dlci5lY29yZSMvIj4KKyAgICA8Z2VuQ2xhc3NlcyBlY29yZUNsYXNzPSJsb2dnZXIuZWNvcmUjLy9Mb2dnZXIiLz4KKyAgPC9nZW5QYWNrYWdlcz4KKzwvZ2VubW9kZWw6R2VuTW9kZWw+CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9tb2RlbC9leHBlcmltZW50LmVjb3JlIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvbW9kZWwvZXhwZXJpbWVudC5lY29yZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMzFmZjQxCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvbW9kZWwvZXhwZXJpbWVudC5lY29yZQpAQCAtMCwwICsxLDE1IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPGVjb3JlOkVQYWNrYWdlIHhtaTp2ZXJzaW9uPSIyLjAiCisgICAgeG1sbnM6eG1pPSJodHRwOi8vd3d3Lm9tZy5vcmcvWE1JIiB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIgorICAgIHhtbG5zOmVjb3JlPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2VtZi8yMDAyL0Vjb3JlIiBuYW1lPSJleHBlcmltZW50IgorICAgIG5zVVJJPSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9leHBlcmltZW50LmVjb3JlIiBuc1ByZWZpeD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmV4cGVyaW1lbnQiPgorICA8ZUNsYXNzaWZpZXJzIHhzaTp0eXBlPSJlY29yZTpFQ2xhc3MiIG5hbWU9IkV4cGVyaW1lbnQiIGVTdXBlclR5cGVzPSJjb21tb24uZWNvcmUjLy9JZGVudGlmaWFibGUiPgorICAgIDxlT3BlcmF0aW9ucyBuYW1lPSJ1cGRhdGVTY2VuYXJpbyIgZVR5cGU9ImVjb3JlOkVDbGFzcyBzY2VuYXJpby5lY29yZSMvL1NjZW5hcmlvIi8+CisgICAgPGVPcGVyYXRpb25zIG5hbWU9ImluaXRTY2VuYXJpbyIgZVR5cGU9ImVjb3JlOkVDbGFzcyBzY2VuYXJpby5lY29yZSMvL1NjZW5hcmlvIi8+CisgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVSZWZlcmVuY2UiIG5hbWU9Im1vZGlmaWVycyIgdXBwZXJCb3VuZD0iLTEiCisgICAgICAgIGVUeXBlPSJlY29yZTpFQ2xhc3MgbW9kaWZpZXIuZWNvcmUjLy9Nb2RpZmllciIvPgorICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJjb21wbGV0ZSIgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2VtZi8yMDAyL0Vjb3JlIy8vRUJvb2xlYW4iCisgICAgICAgIGNoYW5nZWFibGU9ImZhbHNlIiB2b2xhdGlsZT0idHJ1ZSIgdHJhbnNpZW50PSJ0cnVlIi8+CisgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVSZWZlcmVuY2UiIG5hbWU9InNjZW5hcmlvIiBlVHlwZT0iZWNvcmU6RUNsYXNzIHNjZW5hcmlvLmVjb3JlIy8vU2NlbmFyaW8iLz4KKyAgPC9lQ2xhc3NpZmllcnM+Cis8L2Vjb3JlOkVQYWNrYWdlPgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvbW9kZWwvZ3JhcGguZWNvcmUgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9tb2RlbC9ncmFwaC5lY29yZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZDM2NzgxCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvbW9kZWwvZ3JhcGguZWNvcmUKQEAgLTAsMCArMSwyNDIgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+DQorPGVjb3JlOkVQYWNrYWdlIHhtaTp2ZXJzaW9uPSIyLjAiDQorICAgIHhtbG5zOnhtaT0iaHR0cDovL3d3dy5vbWcub3JnL1hNSSIgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSINCisgICAgeG1sbnM6ZWNvcmU9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDIvRWNvcmUiIG5hbWU9ImdyYXBoIg0KKyAgICBuc1VSST0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIG5zUHJlZml4PSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGgiPg0KKyAgPGVDbGFzc2lmaWVycyB4c2k6dHlwZT0iZWNvcmU6RUNsYXNzIiBuYW1lPSJEeW5hbWljTGFiZWwiIGFic3RyYWN0PSJ0cnVlIiBlU3VwZXJUeXBlcz0iIy8vTGFiZWwiPg0KKyAgICA8ZU9wZXJhdGlvbnMgbmFtZT0icmVzZXQiLz4NCisgICAgPGVPcGVyYXRpb25zIG5hbWU9InN3aXRjaFRvTmV4dFZhbHVlIi8+DQorICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJuZXh0VmFsdWVWYWxpZCIgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2VtZi8yMDAyL0Vjb3JlIy8vRUJvb2xlYW4iDQorICAgICAgICBkZWZhdWx0VmFsdWVMaXRlcmFsPSJmYWxzZSIvPg0KKyAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RVJlZmVyZW5jZSIgbmFtZT0ibmV4dFZhbHVlIiBsb3dlckJvdW5kPSIxIg0KKyAgICAgICAgZVR5cGU9IiMvL0xhYmVsVmFsdWUiIGNvbnRhaW5tZW50PSJ0cnVlIiByZXNvbHZlUHJveGllcz0iZmFsc2UiLz4NCisgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVSZWZlcmVuY2UiIG5hbWU9ImRlY29yYXRvciIgZVR5cGU9ImVjb3JlOkVDbGFzcyBtb2RlbC5lY29yZSMvL0RlY29yYXRvciINCisgICAgICAgIGVPcHBvc2l0ZT0ibW9kZWwuZWNvcmUjLy9EZWNvcmF0b3IvbGFiZWxzVG9VcGRhdGUiLz4NCisgIDwvZUNsYXNzaWZpZXJzPg0KKyAgPGVDbGFzc2lmaWVycyB4c2k6dHlwZT0iZWNvcmU6RUNsYXNzIiBuYW1lPSJEeW5hbWljTm9kZUxhYmVsIiBhYnN0cmFjdD0idHJ1ZSIgZVN1cGVyVHlwZXM9IiMvL0R5bmFtaWNMYWJlbCAjLy9Ob2RlTGFiZWwiLz4NCisgIDxlQ2xhc3NpZmllcnMgeHNpOnR5cGU9ImVjb3JlOkVDbGFzcyIgbmFtZT0iRWRnZSIgZVN1cGVyVHlwZXM9ImNvbW1vbi5lY29yZSMvL0lkZW50aWZpYWJsZSBtb2RpZmllci5lY29yZSMvL01vZGlmaWFibGUiPg0KKyAgICA8ZU9wZXJhdGlvbnMgbmFtZT0iZ2V0T3RoZXJOb2RlIiBlVHlwZT0iIy8vTm9kZSIgZUV4Y2VwdGlvbnM9IiMvL0lsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiI+DQorICAgICAgPGVQYXJhbWV0ZXJzIG5hbWU9Im5vZGUiIGVUeXBlPSIjLy9Ob2RlIi8+DQorICAgIDwvZU9wZXJhdGlvbnM+DQorICAgIDxlT3BlcmF0aW9ucyBuYW1lPSJpc0RpcmVjdGVkQXQiIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9lbWYvMjAwMi9FY29yZSMvL0VCb29sZWFuIj4NCisgICAgICA8ZVBhcmFtZXRlcnMgbmFtZT0ibm9kZSIgZVR5cGU9IiMvL05vZGUiLz4NCisgICAgPC9lT3BlcmF0aW9ucz4NCisgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVSZWZlcmVuY2UiIG5hbWU9ImEiIGVUeXBlPSIjLy9Ob2RlIi8+DQorICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJub2RlQVVSSSIgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBjb21tb24uZWNvcmUjLy9VUkkiLz4NCisgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVSZWZlcmVuY2UiIG5hbWU9ImIiIGVUeXBlPSIjLy9Ob2RlIi8+DQorICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJub2RlQlVSSSIgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBjb21tb24uZWNvcmUjLy9VUkkiLz4NCisgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVSZWZlcmVuY2UiIG5hbWU9ImxhYmVsIiBlVHlwZT0iIy8vRWRnZUxhYmVsIg0KKyAgICAgICAgY29udGFpbm1lbnQ9InRydWUiIHJlc29sdmVQcm94aWVzPSJmYWxzZSIgZU9wcG9zaXRlPSIjLy9FZGdlTGFiZWwvZWRnZSIvPg0KKyAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0iZGlyZWN0ZWQiIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9lbWYvMjAwMi9FY29yZSMvL0VCb29sZWFuIg0KKyAgICAgICAgZGVmYXVsdFZhbHVlTGl0ZXJhbD0iZmFsc2UiLz4NCisgIDwvZUNsYXNzaWZpZXJzPg0KKyAgPGVDbGFzc2lmaWVycyB4c2k6dHlwZT0iZWNvcmU6RUNsYXNzIiBuYW1lPSJHcmFwaCIgZVN1cGVyVHlwZXM9ImNvbW1vbi5lY29yZSMvL0lkZW50aWZpYWJsZSI+DQorICAgIDxlT3BlcmF0aW9ucyBuYW1lPSJnZXROb2RlTGFiZWxzQnlUeXBlVVJJIiB1cHBlckJvdW5kPSItMSIgZVR5cGU9IiMvL05vZGVMYWJlbCI+DQorICAgICAgPGVQYXJhbWV0ZXJzIG5hbWU9InR5cGVVUkkiIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgY29tbW9uLmVjb3JlIy8vVVJJIi8+DQorICAgIDwvZU9wZXJhdGlvbnM+DQorICAgIDxlT3BlcmF0aW9ucyBuYW1lPSJhZGRHcmFwaCI+DQorICAgICAgPGVQYXJhbWV0ZXJzIG5hbWU9ImdyYXBoIiBlVHlwZT0iIy8vR3JhcGgiLz4NCisgICAgICA8ZVBhcmFtZXRlcnMgbmFtZT0iZmlsdGVyIiBlVHlwZT0iZWNvcmU6RUNsYXNzIGNvbW1vbi5lY29yZSMvL0lkZW50aWZpYWJsZUZpbHRlciIvPg0KKyAgICA8L2VPcGVyYXRpb25zPg0KKyAgICA8ZU9wZXJhdGlvbnMgbmFtZT0icHV0RWRnZSI+DQorICAgICAgPGVQYXJhbWV0ZXJzIG5hbWU9ImVkZ2UiIGVUeXBlPSIjLy9FZGdlIi8+DQorICAgIDwvZU9wZXJhdGlvbnM+DQorICAgIDxlT3BlcmF0aW9ucyBuYW1lPSJnZXRFZGdlIiBlVHlwZT0iIy8vRWRnZSI+DQorICAgICAgPGVQYXJhbWV0ZXJzIG5hbWU9InVyaSIgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBjb21tb24uZWNvcmUjLy9VUkkiLz4NCisgICAgPC9lT3BlcmF0aW9ucz4NCisgICAgPGVPcGVyYXRpb25zIG5hbWU9InB1dE5vZGUiPg0KKyAgICAgIDxlUGFyYW1ldGVycyBuYW1lPSJub2RlIiBlVHlwZT0iIy8vTm9kZSIvPg0KKyAgICA8L2VPcGVyYXRpb25zPg0KKyAgICA8ZU9wZXJhdGlvbnMgbmFtZT0iZ2V0Tm9kZSIgZVR5cGU9IiMvL05vZGUiPg0KKyAgICAgIDxlUGFyYW1ldGVycyBuYW1lPSJ1cmkiIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgY29tbW9uLmVjb3JlIy8vVVJJIi8+DQorICAgIDwvZU9wZXJhdGlvbnM+DQorICAgIDxlT3BlcmF0aW9ucyBuYW1lPSJwdXROb2RlTGFiZWwiPg0KKyAgICAgIDxlUGFyYW1ldGVycyBuYW1lPSJsYWJlbCIgZVR5cGU9IiMvL05vZGVMYWJlbCIvPg0KKyAgICA8L2VPcGVyYXRpb25zPg0KKyAgICA8ZU9wZXJhdGlvbnMgbmFtZT0iZ2V0Tm9kZUxhYmVsIiBlVHlwZT0iIy8vTm9kZUxhYmVsIj4NCisgICAgICA8ZVBhcmFtZXRlcnMgbmFtZT0idXJpIiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIGNvbW1vbi5lY29yZSMvL1VSSSIvPg0KKyAgICA8L2VPcGVyYXRpb25zPg0KKyAgICA8ZU9wZXJhdGlvbnMgbmFtZT0icHV0R3JhcGhMYWJlbCI+DQorICAgICAgPGVQYXJhbWV0ZXJzIG5hbWU9ImxhYmVsIiBlVHlwZT0iIy8vTGFiZWwiLz4NCisgICAgPC9lT3BlcmF0aW9ucz4NCisgICAgPGVPcGVyYXRpb25zIG5hbWU9ImdldEdyYXBoTGFiZWwiIGVUeXBlPSIjLy9MYWJlbCI+DQorICAgICAgPGVQYXJhbWV0ZXJzIG5hbWU9InVyaSIgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBjb21tb24uZWNvcmUjLy9VUkkiLz4NCisgICAgPC9lT3BlcmF0aW9ucz4NCisgICAgPGVPcGVyYXRpb25zIG5hbWU9ImFkZER5bmFtaWNMYWJlbCI+DQorICAgICAgPGVQYXJhbWV0ZXJzIG5hbWU9ImR5bmFtaWNsYWJlbCIgZVR5cGU9IiMvL0R5bmFtaWNMYWJlbCIvPg0KKyAgICA8L2VPcGVyYXRpb25zPg0KKyAgICA8ZU9wZXJhdGlvbnMgbmFtZT0ic3dpdGNoVG9OZXh0VmFsdWUiPg0KKyAgICAgIDxlUGFyYW1ldGVycyBuYW1lPSJjdXJyZW50VGltZSIgZVR5cGU9ImVjb3JlOkVDbGFzcyBtb2RlbC5lY29yZSMvL1NURU1UaW1lIi8+DQorICAgIDwvZU9wZXJhdGlvbnM+DQorICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFUmVmZXJlbmNlIiBuYW1lPSJlZGdlcyIgdXBwZXJCb3VuZD0iLTEiDQorICAgICAgICBlVHlwZT0iIy8vVVJJVG9FZGdlTWFwRW50cnkiIGNvbnRhaW5tZW50PSJ0cnVlIiByZXNvbHZlUHJveGllcz0iZmFsc2UiLz4NCisgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVSZWZlcmVuY2UiIG5hbWU9Im5vZGVzIiB1cHBlckJvdW5kPSItMSINCisgICAgICAgIGVUeXBlPSIjLy9VUklUb05vZGVNYXBFbnRyeSIgY29udGFpbm1lbnQ9InRydWUiIHJlc29sdmVQcm94aWVzPSJmYWxzZSIvPg0KKyAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RVJlZmVyZW5jZSIgbmFtZT0iZ3JhcGhMYWJlbHMiIHVwcGVyQm91bmQ9Ii0xIg0KKyAgICAgICAgZVR5cGU9IiMvL1VSSVRvTGFiZWxNYXBFbnRyeSIgY29udGFpbm1lbnQ9InRydWUiIHJlc29sdmVQcm94aWVzPSJmYWxzZSIvPg0KKyAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RVJlZmVyZW5jZSIgbmFtZT0ibm9kZUxhYmVscyIgdXBwZXJCb3VuZD0iLTEiDQorICAgICAgICBlVHlwZT0iIy8vVVJJVG9Ob2RlTGFiZWxNYXBFbnRyeSIgY29udGFpbm1lbnQ9InRydWUiIHJlc29sdmVQcm94aWVzPSJmYWxzZSIvPg0KKyAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RVJlZmVyZW5jZSIgbmFtZT0iZHluYW1pY0xhYmVscyIgdXBwZXJCb3VuZD0iLTEiDQorICAgICAgICBlVHlwZT0iIy8vRHluYW1pY0xhYmVsIi8+DQorICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJudW1FZGdlcyIgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2VtZi8yMDAyL0Vjb3JlIy8vRUludCINCisgICAgICAgIGNoYW5nZWFibGU9ImZhbHNlIiB2b2xhdGlsZT0idHJ1ZSIgdHJhbnNpZW50PSJ0cnVlIi8+DQorICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJudW1Ob2RlcyIgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2VtZi8yMDAyL0Vjb3JlIy8vRUludCINCisgICAgICAgIGNoYW5nZWFibGU9ImZhbHNlIiB2b2xhdGlsZT0idHJ1ZSIgdHJhbnNpZW50PSJ0cnVlIi8+DQorICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJudW1HcmFwaExhYmVscyIgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2VtZi8yMDAyL0Vjb3JlIy8vRUludCINCisgICAgICAgIGNoYW5nZWFibGU9ImZhbHNlIiB2b2xhdGlsZT0idHJ1ZSIgdHJhbnNpZW50PSJ0cnVlIi8+DQorICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJudW1Ob2RlTGFiZWxzIiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDIvRWNvcmUjLy9FSW50Ig0KKyAgICAgICAgY2hhbmdlYWJsZT0iZmFsc2UiIHZvbGF0aWxlPSJ0cnVlIiB0cmFuc2llbnQ9InRydWUiLz4NCisgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVBdHRyaWJ1dGUiIG5hbWU9Im51bUR5bmFtaWNMYWJlbHMiIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9lbWYvMjAwMi9FY29yZSMvL0VJbnQiDQorICAgICAgICBjaGFuZ2VhYmxlPSJmYWxzZSIgdm9sYXRpbGU9InRydWUiIHRyYW5zaWVudD0idHJ1ZSIvPg0KKyAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RVJlZmVyZW5jZSIgbmFtZT0idW5yZXNvbHZlZElkZW50aWZpYWJsZXMiDQorICAgICAgICB1cHBlckJvdW5kPSItMSIgZVR5cGU9IiMvL1VucmVzb2x2ZWRJZGVudGlmaWFibGUiIGNvbnRhaW5tZW50PSJ0cnVlIiByZXNvbHZlUHJveGllcz0iZmFsc2UiLz4NCisgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVSZWZlcmVuY2UiIG5hbWU9ImRlY29yYXRvcnMiIHVwcGVyQm91bmQ9Ii0xIg0KKyAgICAgICAgZVR5cGU9ImVjb3JlOkVDbGFzcyBtb2RlbC5lY29yZSMvL0RlY29yYXRvciIgY29udGFpbm1lbnQ9InRydWUiIHJlc29sdmVQcm94aWVzPSJmYWxzZSINCisgICAgICAgIGVPcHBvc2l0ZT0ibW9kZWwuZWNvcmUjLy9EZWNvcmF0b3IvZ3JhcGgiLz4NCisgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVSZWZlcmVuY2UiIG5hbWU9InRpbWUiIGVUeXBlPSJlY29yZTpFQ2xhc3MgbW9kZWwuZWNvcmUjLy9TVEVNVGltZSINCisgICAgICAgIGNvbnRhaW5tZW50PSJ0cnVlIiByZXNvbHZlUHJveGllcz0iZmFsc2UiLz4NCisgIDwvZUNsYXNzaWZpZXJzPg0KKyAgPGVDbGFzc2lmaWVycyB4c2k6dHlwZT0iZWNvcmU6RUNsYXNzIiBuYW1lPSJMYWJlbCIgYWJzdHJhY3Q9InRydWUiIGVTdXBlclR5cGVzPSJjb21tb24uZWNvcmUjLy9JZGVudGlmaWFibGUiPg0KKyAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0idVJJT2ZJZGVudGlmaWFibGVUb0JlTGFiZWxlZCINCisgICAgICAgIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgY29tbW9uLmVjb3JlIy8vVVJJIi8+DQorICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFUmVmZXJlbmNlIiBuYW1lPSJjdXJyZW50VmFsdWUiIGxvd2VyQm91bmQ9IjEiDQorICAgICAgICBlVHlwZT0iIy8vTGFiZWxWYWx1ZSIgY29udGFpbm1lbnQ9InRydWUiIHJlc29sdmVQcm94aWVzPSJmYWxzZSIvPg0KKyAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RVJlZmVyZW5jZSIgbmFtZT0iaWRlbnRpZmlhYmxlIiBlVHlwZT0iZWNvcmU6RUNsYXNzIGNvbW1vbi5lY29yZSMvL0lkZW50aWZpYWJsZSINCisgICAgICAgIHZvbGF0aWxlPSJ0cnVlIiB0cmFuc2llbnQ9InRydWUiLz4NCisgIDwvZUNsYXNzaWZpZXJzPg0KKyAgPGVDbGFzc2lmaWVycyB4c2k6dHlwZT0iZWNvcmU6RUNsYXNzIiBuYW1lPSJMYWJlbFZhbHVlIiBhYnN0cmFjdD0idHJ1ZSIgZVN1cGVyVHlwZXM9ImNvbW1vbi5lY29yZSMvL1Nhbml0eUNoZWNrZXIiPg0KKyAgICA8ZU9wZXJhdGlvbnMgbmFtZT0icmVzZXQiLz4NCisgICAgPGVPcGVyYXRpb25zIG5hbWU9InNhbWVWYWx1ZSIgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLmVtZi5lY29yZS9tb2RlbC9FY29yZS5lY29yZSMvL0VCb29sZWFuIj4NCisgICAgICA8ZVBhcmFtZXRlcnMgbmFtZT0ib3RoZXJMYWJlbFZhbHVlIiBlVHlwZT0iIy8vTGFiZWxWYWx1ZSIvPg0KKyAgICA8L2VPcGVyYXRpb25zPg0KKyAgPC9lQ2xhc3NpZmllcnM+DQorICA8ZUNsYXNzaWZpZXJzIHhzaTp0eXBlPSJlY29yZTpFQ2xhc3MiIG5hbWU9Ik5vZGUiIGVTdXBlclR5cGVzPSJjb21tb24uZWNvcmUjLy9JZGVudGlmaWFibGUiPg0KKyAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RVJlZmVyZW5jZSIgbmFtZT0iZWRnZXMiIHVwcGVyQm91bmQ9Ii0xIg0KKyAgICAgICAgZVR5cGU9IiMvL0VkZ2UiLz4NCisgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVSZWZlcmVuY2UiIG5hbWU9ImxhYmVscyIgdXBwZXJCb3VuZD0iLTEiDQorICAgICAgICBlVHlwZT0iIy8vTm9kZUxhYmVsIiBlT3Bwb3NpdGU9IiMvL05vZGVMYWJlbC9ub2RlIi8+DQorICA8L2VDbGFzc2lmaWVycz4NCisgIDxlQ2xhc3NpZmllcnMgeHNpOnR5cGU9ImVjb3JlOkVDbGFzcyIgbmFtZT0iTm9kZUxhYmVsIiBhYnN0cmFjdD0idHJ1ZSIgZVN1cGVyVHlwZXM9IiMvL0xhYmVsIj4NCisgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVSZWZlcmVuY2UiIG5hbWU9Im5vZGUiIGVUeXBlPSIjLy9Ob2RlIiBlT3Bwb3NpdGU9IiMvL05vZGUvbGFiZWxzIi8+DQorICA8L2VDbGFzc2lmaWVycz4NCisgIDxlQ2xhc3NpZmllcnMgeHNpOnR5cGU9ImVjb3JlOkVDbGFzcyIgbmFtZT0iU3RhdGljTm9kZUxhYmVsIiBhYnN0cmFjdD0idHJ1ZSIgZVN1cGVyVHlwZXM9IiMvL05vZGVMYWJlbCAjLy9TdGF0aWNMYWJlbCIvPg0KKyAgPGVDbGFzc2lmaWVycyB4c2k6dHlwZT0iZWNvcmU6RUNsYXNzIiBuYW1lPSJVbnJlc29sdmVkSWRlbnRpZmlhYmxlIj4NCisgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVSZWZlcmVuY2UiIG5hbWU9InNjZW5hcmlvIiBlVHlwZT0iZWNvcmU6RUNsYXNzIGNvbW1vbi5lY29yZSMvL0lkZW50aWZpYWJsZSIvPg0KKyAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RVJlZmVyZW5jZSIgbmFtZT0ibW9kZWwiIGVUeXBlPSJlY29yZTpFQ2xhc3MgY29tbW9uLmVjb3JlIy8vSWRlbnRpZmlhYmxlIi8+DQorICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFUmVmZXJlbmNlIiBuYW1lPSJncmFwaCIgZVR5cGU9ImVjb3JlOkVDbGFzcyBjb21tb24uZWNvcmUjLy9JZGVudGlmaWFibGUiLz4NCisgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVSZWZlcmVuY2UiIG5hbWU9ImlkZW50aWZpYWJsZSIgZVR5cGU9ImVjb3JlOkVDbGFzcyBjb21tb24uZWNvcmUjLy9JZGVudGlmaWFibGUiLz4NCisgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVBdHRyaWJ1dGUiIG5hbWU9InVucmVzb2x2ZWRVUkkiIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgY29tbW9uLmVjb3JlIy8vVVJJIi8+DQorICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJmaWVsZE5hbWUiIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9lbWYvMjAwMi9FY29yZSMvL0VTdHJpbmciLz4NCisgIDwvZUNsYXNzaWZpZXJzPg0KKyAgPGVDbGFzc2lmaWVycyB4c2k6dHlwZT0iZWNvcmU6RUNsYXNzIiBuYW1lPSJVUklUb0lkZW50aWZpYWJsZU1hcEVudHJ5IiBpbnN0YW5jZUNsYXNzTmFtZT0iamF2YS51dGlsLk1hcCRFbnRyeSI+DQorICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJrZXkiIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgY29tbW9uLmVjb3JlIy8vVVJJIi8+DQorICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFUmVmZXJlbmNlIiBuYW1lPSJ2YWx1ZSIgZVR5cGU9ImVjb3JlOkVDbGFzcyBjb21tb24uZWNvcmUjLy9JZGVudGlmaWFibGUiDQorICAgICAgICBjb250YWlubWVudD0idHJ1ZSIgcmVzb2x2ZVByb3hpZXM9ImZhbHNlIi8+DQorICA8L2VDbGFzc2lmaWVycz4NCisgIDxlQ2xhc3NpZmllcnMgeHNpOnR5cGU9ImVjb3JlOkVDbGFzcyIgbmFtZT0iRHluYW1pY0VkZ2VMYWJlbCIgYWJzdHJhY3Q9InRydWUiIGVTdXBlclR5cGVzPSIjLy9EeW5hbWljTGFiZWwgIy8vRWRnZUxhYmVsIi8+DQorICA8ZUNsYXNzaWZpZXJzIHhzaTp0eXBlPSJlY29yZTpFQ2xhc3MiIG5hbWU9IkVkZ2VMYWJlbCIgYWJzdHJhY3Q9InRydWUiIGVTdXBlclR5cGVzPSIjLy9MYWJlbCI+DQorICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFUmVmZXJlbmNlIiBuYW1lPSJlZGdlIiBlVHlwZT0iIy8vRWRnZSIgZU9wcG9zaXRlPSIjLy9FZGdlL2xhYmVsIi8+DQorICA8L2VDbGFzc2lmaWVycz4NCisgIDxlQ2xhc3NpZmllcnMgeHNpOnR5cGU9ImVjb3JlOkVDbGFzcyIgbmFtZT0iU3RhdGljRWRnZUxhYmVsIiBhYnN0cmFjdD0idHJ1ZSIgZVN1cGVyVHlwZXM9IiMvL0VkZ2VMYWJlbCAjLy9TdGF0aWNMYWJlbCIvPg0KKyAgPGVDbGFzc2lmaWVycyB4c2k6dHlwZT0iZWNvcmU6RUNsYXNzIiBuYW1lPSJVUklUb0VkZ2VNYXBFbnRyeSIgaW5zdGFuY2VDbGFzc05hbWU9ImphdmEudXRpbC5NYXAkRW50cnkiPg0KKyAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0ia2V5IiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIGNvbW1vbi5lY29yZSMvL1VSSSIvPg0KKyAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RVJlZmVyZW5jZSIgbmFtZT0idmFsdWUiIGVUeXBlPSIjLy9FZGdlIg0KKyAgICAgICAgY29udGFpbm1lbnQ9InRydWUiIHJlc29sdmVQcm94aWVzPSJmYWxzZSIvPg0KKyAgPC9lQ2xhc3NpZmllcnM+DQorICA8ZUNsYXNzaWZpZXJzIHhzaTp0eXBlPSJlY29yZTpFQ2xhc3MiIG5hbWU9IlVSSVRvTm9kZU1hcEVudHJ5IiBpbnN0YW5jZUNsYXNzTmFtZT0iamF2YS51dGlsLk1hcCRFbnRyeSI+DQorICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJrZXkiIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgY29tbW9uLmVjb3JlIy8vVVJJIi8+DQorICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFUmVmZXJlbmNlIiBuYW1lPSJ2YWx1ZSIgZVR5cGU9IiMvL05vZGUiDQorICAgICAgICBjb250YWlubWVudD0idHJ1ZSIgcmVzb2x2ZVByb3hpZXM9ImZhbHNlIi8+DQorICA8L2VDbGFzc2lmaWVycz4NCisgIDxlQ2xhc3NpZmllcnMgeHNpOnR5cGU9ImVjb3JlOkVDbGFzcyIgbmFtZT0iVVJJVG9MYWJlbE1hcEVudHJ5IiBpbnN0YW5jZUNsYXNzTmFtZT0iamF2YS51dGlsLk1hcCRFbnRyeSI+DQorICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJrZXkiIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgY29tbW9uLmVjb3JlIy8vVVJJIi8+DQorICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFUmVmZXJlbmNlIiBuYW1lPSJ2YWx1ZSIgZVR5cGU9IiMvL0xhYmVsIg0KKyAgICAgICAgY29udGFpbm1lbnQ9InRydWUiIHJlc29sdmVQcm94aWVzPSJmYWxzZSIvPg0KKyAgPC9lQ2xhc3NpZmllcnM+DQorICA8ZUNsYXNzaWZpZXJzIHhzaTp0eXBlPSJlY29yZTpFQ2xhc3MiIG5hbWU9IlVSSVRvTm9kZUxhYmVsTWFwRW50cnkiIGluc3RhbmNlQ2xhc3NOYW1lPSJqYXZhLnV0aWwuTWFwJEVudHJ5Ij4NCisgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVBdHRyaWJ1dGUiIG5hbWU9ImtleSIgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBjb21tb24uZWNvcmUjLy9VUkkiLz4NCisgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVSZWZlcmVuY2UiIG5hbWU9InZhbHVlIiBlVHlwZT0iIy8vTm9kZUxhYmVsIg0KKyAgICAgICAgY29udGFpbm1lbnQ9InRydWUiIHJlc29sdmVQcm94aWVzPSJmYWxzZSIvPg0KKyAgPC9lQ2xhc3NpZmllcnM+DQorICA8ZUNsYXNzaWZpZXJzIHhzaTp0eXBlPSJlY29yZTpFQ2xhc3MiIG5hbWU9IlN0YXRpY0xhYmVsIiBhYnN0cmFjdD0idHJ1ZSIgZVN1cGVyVHlwZXM9IiMvL0xhYmVsIG1vZGlmaWVyLmVjb3JlIy8vTW9kaWZpYWJsZSIvPg0KKyAgPGVDbGFzc2lmaWVycyB4c2k6dHlwZT0iZWNvcmU6RURhdGFUeXBlIiBuYW1lPSJJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24iIGluc3RhbmNlQ2xhc3NOYW1lPSJqYXZhLmxhbmcuSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uIi8+DQorICA8ZUNsYXNzaWZpZXJzIHhzaTp0eXBlPSJlY29yZTpFQ2xhc3MiIG5hbWU9IkdyYXBoUGFydGl0aW9uZXIiIGFic3RyYWN0PSJ0cnVlIj4NCisgICAgPGVPcGVyYXRpb25zIG5hbWU9InBhcnRpdGlvbkRlY29yYXRvckxhYmVscyI+DQorICAgICAgPGVHZW5lcmljVHlwZSBlQ2xhc3NpZmllcj0iZWNvcmU6RURhdGFUeXBlIHBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2UuZW1mLmVjb3JlL21vZGVsL0Vjb3JlLmVjb3JlIy8vRUVMaXN0Ij4NCisgICAgICAgIDxlVHlwZUFyZ3VtZW50cyBlQ2xhc3NpZmllcj0iIy8vRHluYW1pY0xhYmVsIi8+DQorICAgICAgPC9lR2VuZXJpY1R5cGU+DQorICAgICAgPGVQYXJhbWV0ZXJzIG5hbWU9ImRlY29yYXRvciIgZVR5cGU9ImVjb3JlOkVDbGFzcyBtb2RlbC5lY29yZSMvL0RlY29yYXRvciIvPg0KKyAgICAgIDxlUGFyYW1ldGVycyBuYW1lPSJwcm9jZXNzUmFuayIgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLmVtZi5lY29yZS9tb2RlbC9FY29yZS5lY29yZSMvL0VJbnQiLz4NCisgICAgPC9lT3BlcmF0aW9ucz4NCisgICAgPGVPcGVyYXRpb25zIG5hbWU9InBhcnRpdGlvbkRlY29yYXRvckxhYmVscyI+DQorICAgICAgPGVHZW5lcmljVHlwZSBlQ2xhc3NpZmllcj0iZWNvcmU6RURhdGFUeXBlIHBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2UuZW1mLmVjb3JlL21vZGVsL0Vjb3JlLmVjb3JlIy8vRUVMaXN0Ij4NCisgICAgICAgIDxlVHlwZUFyZ3VtZW50cyBlQ2xhc3NpZmllcj0iIy8vRHluYW1pY0xhYmVsIi8+DQorICAgICAgPC9lR2VuZXJpY1R5cGU+DQorICAgICAgPGVQYXJhbWV0ZXJzIG5hbWU9ImRlY29yYXRvciIgZVR5cGU9ImVjb3JlOkVDbGFzcyBtb2RlbC5lY29yZSMvL0RlY29yYXRvciIvPg0KKyAgICA8L2VPcGVyYXRpb25zPg0KKyAgICA8ZU9wZXJhdGlvbnMgbmFtZT0iaXNNYW5hZ2VkIiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIHBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2UuZW1mLmVjb3JlL21vZGVsL0Vjb3JlLmVjb3JlIy8vRUJvb2xlYW4iPg0KKyAgICAgIDxlUGFyYW1ldGVycyBuYW1lPSJpZGVudGlmaWFibGUiIGVUeXBlPSJlY29yZTpFQ2xhc3MgY29tbW9uLmVjb3JlIy8vSWRlbnRpZmlhYmxlIi8+DQorICAgIDwvZU9wZXJhdGlvbnM+DQorICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJudW1Qcm9jZXNzZXMiIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgcGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5lbWYuZWNvcmUvbW9kZWwvRWNvcmUuZWNvcmUjLy9FSW50Ig0KKyAgICAgICAgZGVmYXVsdFZhbHVlTGl0ZXJhbD0iMSIvPg0KKyAgPC9lQ2xhc3NpZmllcnM+DQorICA8ZUNsYXNzaWZpZXJzIHhzaTp0eXBlPSJlY29yZTpFQ2xhc3MiIG5hbWU9IlNpbXBsZUdyYXBoUGFydGl0aW9uZXIiIGVTdXBlclR5cGVzPSIjLy9HcmFwaFBhcnRpdGlvbmVyIi8+DQorICA8ZUNsYXNzaWZpZXJzIHhzaTp0eXBlPSJlY29yZTpFQ2xhc3MiIG5hbWU9IkV4Y2hhbmdlIj4NCisgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVSZWZlcmVuY2UiIG5hbWU9Im90aGVyTGFiZWwiIGVUeXBlPSIjLy9MYWJlbCIvPg0KKyAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0iY291bnQiIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgcGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5lbWYuZWNvcmUvbW9kZWwvRWNvcmUuZWNvcmUjLy9FRG91YmxlIi8+DQorICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJ0eXBlIiBlVHlwZT0iIy8vRXhjaGFuZ2VUeXBlIi8+DQorICAgIDxlR2VuZXJpY1N1cGVyVHlwZXMgZUNsYXNzaWZpZXI9ImVjb3JlOkVDbGFzcyBjb21tb24uZWNvcmUjLy9Db21wYXJhYmxlIj4NCisgICAgICA8ZVR5cGVBcmd1bWVudHMgZUNsYXNzaWZpZXI9IiMvL0V4Y2hhbmdlIi8+DQorICAgIDwvZUdlbmVyaWNTdXBlclR5cGVzPg0KKyAgPC9lQ2xhc3NpZmllcnM+DQorICA8ZUNsYXNzaWZpZXJzIHhzaTp0eXBlPSJlY29yZTpFRW51bSIgbmFtZT0iRXhjaGFuZ2VUeXBlIj4NCisgICAgPGVMaXRlcmFscyBuYW1lPSJCSVJUSFNfQU5EX0RFQVRIUyIgdmFsdWU9IjEiLz4NCisgICAgPGVMaXRlcmFscyBuYW1lPSJNSUdSQVRJT04iIHZhbHVlPSIyIi8+DQorICAgIDxlTGl0ZXJhbHMgbmFtZT0iQUdJTkciIHZhbHVlPSIzIi8+DQorICA8L2VDbGFzc2lmaWVycz4NCisgIDxlQ2xhc3NpZmllcnMgeHNpOnR5cGU9ImVjb3JlOkVDbGFzcyIgbmFtZT0iSW50ZWdyYXRpb25MYWJlbCIgYWJzdHJhY3Q9InRydWUiIGVTdXBlclR5cGVzPSIjLy9EeW5hbWljTm9kZUxhYmVsIj4NCisgICAgPGVPcGVyYXRpb25zIG5hbWU9InJlc2V0Ij4NCisgICAgICA8ZVBhcmFtZXRlcnMgbmFtZT0idGltZSIgZVR5cGU9ImVjb3JlOkVDbGFzcyBtb2RlbC5lY29yZSMvL1NURU1UaW1lIi8+DQorICAgIDwvZU9wZXJhdGlvbnM+DQorICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFUmVmZXJlbmNlIiBuYW1lPSJkZWx0YVZhbHVlIiBlVHlwZT0iIy8vSW50ZWdyYXRpb25MYWJlbFZhbHVlIi8+DQorICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFUmVmZXJlbmNlIiBuYW1lPSJ0ZW1wVmFsdWUiIGVUeXBlPSIjLy9JbnRlZ3JhdGlvbkxhYmVsVmFsdWUiLz4NCisgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVSZWZlcmVuY2UiIG5hbWU9InByb2JlVmFsdWUiIGVUeXBlPSIjLy9JbnRlZ3JhdGlvbkxhYmVsVmFsdWUiLz4NCisgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVSZWZlcmVuY2UiIG5hbWU9ImVycm9yU2NhbGUiIGVUeXBlPSIjLy9JbnRlZ3JhdGlvbkxhYmVsVmFsdWUiLz4NCisgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVBdHRyaWJ1dGUiIG5hbWU9ImlkZW50aWZpZXIiIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgcGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5lbWYuZWNvcmUvbW9kZWwvRWNvcmUuZWNvcmUjLy9FU3RyaW5nIg0KKyAgICAgICAgY2hhbmdlYWJsZT0iZmFsc2UiLz4NCisgIDwvZUNsYXNzaWZpZXJzPg0KKyAgPGVDbGFzc2lmaWVycyB4c2k6dHlwZT0iZWNvcmU6RUNsYXNzIiBuYW1lPSJJbnRlZ3JhdGlvbkxhYmVsVmFsdWUiIGFic3RyYWN0PSJ0cnVlIg0KKyAgICAgIGVTdXBlclR5cGVzPSIjLy9MYWJlbFZhbHVlIj4NCisgICAgPGVPcGVyYXRpb25zIG5hbWU9InNldCIgZVR5cGU9IiMvL0ludGVncmF0aW9uTGFiZWxWYWx1ZSI+DQorICAgICAgPGVQYXJhbWV0ZXJzIG5hbWU9InZhbHVlIiBlVHlwZT0iIy8vSW50ZWdyYXRpb25MYWJlbFZhbHVlIi8+DQorICAgIDwvZU9wZXJhdGlvbnM+DQorICAgIDxlT3BlcmF0aW9ucyBuYW1lPSJhZGQiIGVUeXBlPSIjLy9JbnRlZ3JhdGlvbkxhYmVsVmFsdWUiPg0KKyAgICAgIDxlUGFyYW1ldGVycyBuYW1lPSJ2YWx1ZSIgZVR5cGU9IiMvL0ludGVncmF0aW9uTGFiZWxWYWx1ZSIvPg0KKyAgICA8L2VPcGVyYXRpb25zPg0KKyAgICA8ZU9wZXJhdGlvbnMgbmFtZT0ic3ViIiBlVHlwZT0iIy8vSW50ZWdyYXRpb25MYWJlbFZhbHVlIj4NCisgICAgICA8ZVBhcmFtZXRlcnMgbmFtZT0idmFsdWUiIGVUeXBlPSIjLy9JbnRlZ3JhdGlvbkxhYmVsVmFsdWUiLz4NCisgICAgPC9lT3BlcmF0aW9ucz4NCisgICAgPGVPcGVyYXRpb25zIG5hbWU9InNjYWxlIiBlVHlwZT0iIy8vSW50ZWdyYXRpb25MYWJlbFZhbHVlIj4NCisgICAgICA8ZVBhcmFtZXRlcnMgbmFtZT0ic2NhbGVGYWN0b3IiIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgcGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5lbWYuZWNvcmUvbW9kZWwvRWNvcmUuZWNvcmUjLy9FRG91YmxlIi8+DQorICAgIDwvZU9wZXJhdGlvbnM+DQorICAgIDxlT3BlcmF0aW9ucyBuYW1lPSJhZGQiIGVUeXBlPSIjLy9JbnRlZ3JhdGlvbkxhYmVsVmFsdWUiPg0KKyAgICAgIDxlUGFyYW1ldGVycyBuYW1lPSJhZGRpdGlvbiIgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLmVtZi5lY29yZS9tb2RlbC9FY29yZS5lY29yZSMvL0VEb3VibGUiLz4NCisgICAgPC9lT3BlcmF0aW9ucz4NCisgICAgPGVPcGVyYXRpb25zIG5hbWU9ImFicyIgZVR5cGU9IiMvL0ludGVncmF0aW9uTGFiZWxWYWx1ZSIvPg0KKyAgICA8ZU9wZXJhdGlvbnMgbmFtZT0iYXZvaWROZWdhdGl2ZSIgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLmVtZi5lY29yZS9tb2RlbC9FY29yZS5lY29yZSMvL0VCb29sZWFuIj4NCisgICAgICA8ZVBhcmFtZXRlcnMgbmFtZT0idmFsdWUiIGVUeXBlPSIjLy9JbnRlZ3JhdGlvbkxhYmVsVmFsdWUiLz4NCisgICAgPC9lT3BlcmF0aW9ucz4NCisgICAgPGVPcGVyYXRpb25zIG5hbWU9ImNvbXB1dGVEZWx0YUFkanVzdG1lbnQiIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgcGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5lbWYuZWNvcmUvbW9kZWwvRWNvcmUuZWNvcmUjLy9FRG91YmxlIj4NCisgICAgICA8ZVBhcmFtZXRlcnMgbmFtZT0idmFsdWUiIGVUeXBlPSIjLy9JbnRlZ3JhdGlvbkxhYmVsVmFsdWUiLz4NCisgICAgPC9lT3BlcmF0aW9ucz4NCisgICAgPGVPcGVyYXRpb25zIG5hbWU9ImRpdmlkZSIgZVR5cGU9IiMvL0ludGVncmF0aW9uTGFiZWxWYWx1ZSI+DQorICAgICAgPGVQYXJhbWV0ZXJzIG5hbWU9InZhbHVlIiBlVHlwZT0iIy8vSW50ZWdyYXRpb25MYWJlbFZhbHVlIi8+DQorICAgIDwvZU9wZXJhdGlvbnM+DQorICAgIDxlT3BlcmF0aW9ucyBuYW1lPSJtYXgiIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgcGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5lbWYuZWNvcmUvbW9kZWwvRWNvcmUuZWNvcmUjLy9FRG91YmxlIi8+DQorICAgIDxlT3BlcmF0aW9ucyBuYW1lPSJwcmVwYXJlQ3ljbGUiLz4NCisgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVSZWZlcmVuY2UiIG5hbWU9ImFycml2YWxzIiB1cHBlckJvdW5kPSItMSINCisgICAgICAgIGVUeXBlPSIjLy9FeGNoYW5nZSIgY2hhbmdlYWJsZT0iZmFsc2UiLz4NCisgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVSZWZlcmVuY2UiIG5hbWU9ImRlcGFydHVyZXMiIHVwcGVyQm91bmQ9Ii0xIg0KKyAgICAgICAgZVR5cGU9IiMvL0V4Y2hhbmdlIiBjaGFuZ2VhYmxlPSJmYWxzZSIvPg0KKyAgPC9lQ2xhc3NpZmllcnM+DQorPC9lY29yZTpFUGFja2FnZT4NCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9tb2RlbC9sb2dnZXIuZWNvcmUgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9tb2RlbC9sb2dnZXIuZWNvcmUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTU2M2NhNwotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL21vZGVsL2xvZ2dlci5lY29yZQpAQCAtMCwwICsxLDcgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+DQorPGVjb3JlOkVQYWNrYWdlIHhtaTp2ZXJzaW9uPSIyLjAiDQorICAgIHhtbG5zOnhtaT0iaHR0cDovL3d3dy5vbWcub3JnL1hNSSIgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSINCisgICAgeG1sbnM6ZWNvcmU9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDIvRWNvcmUiIG5hbWU9ImxvZ2dlciINCisgICAgbnNVUkk9Imh0dHA6Ly9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvbG9nZ2VyIiBuc1ByZWZpeD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmxvZ2dlciI+DQorICA8ZUNsYXNzaWZpZXJzIHhzaTp0eXBlPSJlY29yZTpFQ2xhc3MiIG5hbWU9IkxvZ2dlciIgYWJzdHJhY3Q9InRydWUiIGVTdXBlclR5cGVzPSJjb21tb24uZWNvcmUjLy9JZGVudGlmaWFibGUiLz4NCis8L2Vjb3JlOkVQYWNrYWdlPg0KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL21vZGVsL21vZGVsLmVjb3JlIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvbW9kZWwvbW9kZWwuZWNvcmUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmY1ODM0NwotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL21vZGVsL21vZGVsLmVjb3JlCkBAIC0wLDAgKzEsODcgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+DQorPGVjb3JlOkVQYWNrYWdlIHhtaTp2ZXJzaW9uPSIyLjAiDQorICAgIHhtbG5zOnhtaT0iaHR0cDovL3d3dy5vbWcub3JnL1hNSSIgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSINCisgICAgeG1sbnM6ZWNvcmU9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDIvRWNvcmUiIG5hbWU9Im1vZGVsIg0KKyAgICBuc1VSST0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvbW9kZWwuZWNvcmUiIG5zUHJlZml4PSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwiPg0KKyAgPGVDbGFzc2lmaWVycyB4c2k6dHlwZT0iZWNvcmU6RUNsYXNzIiBuYW1lPSJEZWNvcmF0b3IiIGVTdXBlclR5cGVzPSJjb21tb24uZWNvcmUjLy9JZGVudGlmaWFibGUiPg0KKyAgICA8ZU9wZXJhdGlvbnMgbmFtZT0iZGVjb3JhdGVHcmFwaCIgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLmVtZi5lY29yZS9tb2RlbC9FY29yZS5lY29yZSMvL0VCb29sZWFuIj4NCisgICAgICA8ZVBhcmFtZXRlcnMgbmFtZT0idGltZSIgZVR5cGU9IiMvL1NURU1UaW1lIi8+DQorICAgIDwvZU9wZXJhdGlvbnM+DQorICAgIDxlT3BlcmF0aW9ucyBuYW1lPSJ1cGRhdGVMYWJlbHMiPg0KKyAgICAgIDxlUGFyYW1ldGVycyBuYW1lPSJ0aW1lIiBlVHlwZT0iIy8vU1RFTVRpbWUiLz4NCisgICAgICA8ZVBhcmFtZXRlcnMgbmFtZT0idGltZXJQZXJpb2QiIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9lbWYvMjAwMi9FY29yZSMvL0VMb25nIi8+DQorICAgICAgPGVQYXJhbWV0ZXJzIG5hbWU9ImN5Y2xlIiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDIvRWNvcmUjLy9FSW50Ii8+DQorICAgIDwvZU9wZXJhdGlvbnM+DQorICAgIDxlT3BlcmF0aW9ucyBuYW1lPSJyZXNldExhYmVscyIvPg0KKyAgICA8ZU9wZXJhdGlvbnMgbmFtZT0icHJlcGFyZSI+DQorICAgICAgPGVQYXJhbWV0ZXJzIG5hbWU9Im1vZGVsIiBlVHlwZT0iIy8vTW9kZWwiLz4NCisgICAgICA8ZVBhcmFtZXRlcnMgbmFtZT0idGltZSIgZVR5cGU9IiMvL1NURU1UaW1lIi8+DQorICAgIDwvZU9wZXJhdGlvbnM+DQorICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFUmVmZXJlbmNlIiBuYW1lPSJsYWJlbHNUb1VwZGF0ZSIgdXBwZXJCb3VuZD0iLTEiDQorICAgICAgICBlVHlwZT0iZWNvcmU6RUNsYXNzIGdyYXBoLmVjb3JlIy8vRHluYW1pY0xhYmVsIiBlT3Bwb3NpdGU9ImdyYXBoLmVjb3JlIy8vRHluYW1pY0xhYmVsL2RlY29yYXRvciIvPg0KKyAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RVJlZmVyZW5jZSIgbmFtZT0iZ3JhcGgiIGVUeXBlPSJlY29yZTpFQ2xhc3MgZ3JhcGguZWNvcmUjLy9HcmFwaCINCisgICAgICAgIHRyYW5zaWVudD0idHJ1ZSIgZU9wcG9zaXRlPSJncmFwaC5lY29yZSMvL0dyYXBoL2RlY29yYXRvcnMiLz4NCisgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVBdHRyaWJ1dGUiIG5hbWU9ImVuYWJsZWQiIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9lbWYvMjAwMi9FY29yZSMvL0VCb29sZWFuIg0KKyAgICAgICAgdHJhbnNpZW50PSJ0cnVlIiBkZWZhdWx0VmFsdWVMaXRlcmFsPSJ0cnVlIi8+DQorICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJncmFwaERlY29yYXRlZCIgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2VtZi8yMDAyL0Vjb3JlIy8vRUJvb2xlYW4iDQorICAgICAgICB0cmFuc2llbnQ9InRydWUiIGRlZmF1bHRWYWx1ZUxpdGVyYWw9ImZhbHNlIi8+DQorICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJwcm9ncmVzcyIgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2VtZi8yMDAyL0Vjb3JlIy8vRURvdWJsZSINCisgICAgICAgIHRyYW5zaWVudD0idHJ1ZSIgZGVmYXVsdFZhbHVlTGl0ZXJhbD0iMC4wIi8+DQorICA8L2VDbGFzc2lmaWVycz4NCisgIDxlQ2xhc3NpZmllcnMgeHNpOnR5cGU9ImVjb3JlOkVDbGFzcyIgbmFtZT0iRWRnZURlY29yYXRvciIgZVN1cGVyVHlwZXM9IiMvL0RlY29yYXRvciIvPg0KKyAgPGVDbGFzc2lmaWVycyB4c2k6dHlwZT0iZWNvcmU6RUNsYXNzIiBuYW1lPSJHcmFwaERlY29yYXRvciIgZVN1cGVyVHlwZXM9IiMvL0RlY29yYXRvciIvPg0KKyAgPGVDbGFzc2lmaWVycyB4c2k6dHlwZT0iZWNvcmU6RUNsYXNzIiBuYW1lPSJNb2RlbCIgZVN1cGVyVHlwZXM9ImNvbW1vbi5lY29yZSMvL0lkZW50aWZpYWJsZSI+DQorICAgIDxlT3BlcmF0aW9ucyBuYW1lPSJnZXRDYW5vbmljYWxHcmFwaCIgZVR5cGU9ImVjb3JlOkVDbGFzcyBncmFwaC5lY29yZSMvL0dyYXBoIj4NCisgICAgICA8ZVBhcmFtZXRlcnMgbmFtZT0idXJpIiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIGNvbW1vbi5lY29yZSMvL1VSSSIvPg0KKyAgICAgIDxlUGFyYW1ldGVycyBuYW1lPSJmaWx0ZXIiIGVUeXBlPSJlY29yZTpFQ2xhc3MgY29tbW9uLmVjb3JlIy8vSWRlbnRpZmlhYmxlRmlsdGVyIi8+DQorICAgICAgPGVQYXJhbWV0ZXJzIG5hbWU9InRpbWUiIGVUeXBlPSIjLy9TVEVNVGltZSIvPg0KKyAgICA8L2VPcGVyYXRpb25zPg0KKyAgICA8ZU9wZXJhdGlvbnMgbmFtZT0icHJlcGFyZSI+DQorICAgICAgPGVQYXJhbWV0ZXJzIG5hbWU9InRpbWUiIGVUeXBlPSIjLy9TVEVNVGltZSIvPg0KKyAgICA8L2VPcGVyYXRpb25zPg0KKyAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RVJlZmVyZW5jZSIgbmFtZT0ibW9kZWxzIiB1cHBlckJvdW5kPSItMSINCisgICAgICAgIGVUeXBlPSIjLy9Nb2RlbCIvPg0KKyAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RVJlZmVyZW5jZSIgbmFtZT0iZ3JhcGhzIiB1cHBlckJvdW5kPSItMSINCisgICAgICAgIGVUeXBlPSJlY29yZTpFQ2xhc3MgZ3JhcGguZWNvcmUjLy9HcmFwaCIvPg0KKyAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RVJlZmVyZW5jZSIgbmFtZT0iZ3JhcGhEZWNvcmF0b3JzIiB1cHBlckJvdW5kPSItMSINCisgICAgICAgIGVUeXBlPSIjLy9HcmFwaERlY29yYXRvciIvPg0KKyAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RVJlZmVyZW5jZSIgbmFtZT0ibm9kZURlY29yYXRvcnMiIHVwcGVyQm91bmQ9Ii0xIg0KKyAgICAgICAgZVR5cGU9IiMvL05vZGVEZWNvcmF0b3IiLz4NCisgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVSZWZlcmVuY2UiIG5hbWU9ImVkZ2VEZWNvcmF0b3JzIiB1cHBlckJvdW5kPSItMSINCisgICAgICAgIGVUeXBlPSIjLy9FZGdlRGVjb3JhdG9yIi8+DQorICA8L2VDbGFzc2lmaWVycz4NCisgIDxlQ2xhc3NpZmllcnMgeHNpOnR5cGU9ImVjb3JlOkVDbGFzcyIgbmFtZT0iTm9kZURlY29yYXRvciIgZVN1cGVyVHlwZXM9IiMvL0RlY29yYXRvciIvPg0KKyAgPGVDbGFzc2lmaWVycyB4c2k6dHlwZT0iZWNvcmU6RUNsYXNzIiBuYW1lPSJTVEVNVGltZSI+DQorICAgIDxlT3BlcmF0aW9ucyBuYW1lPSJhZGRJbmNyZW1lbnQiIGVUeXBlPSIjLy9TVEVNVGltZSI+DQorICAgICAgPGVQYXJhbWV0ZXJzIG5hbWU9InRpbWVJbmNyZW1lbnQiIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9lbWYvMjAwMi9FY29yZSMvL0VMb25nIi8+DQorICAgIDwvZU9wZXJhdGlvbnM+DQorICAgIDxlT3BlcmF0aW9ucyBuYW1lPSJ2YWx1ZUVxdWFscyIgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2VtZi8yMDAyL0Vjb3JlIy8vRUJvb2xlYW4iPg0KKyAgICAgIDxlUGFyYW1ldGVycyBuYW1lPSJvYmoiIGVUeXBlPSIjLy9TVEVNVGltZSIvPg0KKyAgICA8L2VPcGVyYXRpb25zPg0KKyAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0idGltZSIgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2VtZi8yMDAyL0Vjb3JlIy8vRURhdGUiLz4NCisgICAgPGVHZW5lcmljU3VwZXJUeXBlcyBlQ2xhc3NpZmllcj0iIy8vQ29tcGFyYWJsZSI+DQorICAgICAgPGVUeXBlQXJndW1lbnRzIGVDbGFzc2lmaWVyPSIjLy9TVEVNVGltZSIvPg0KKyAgICA8L2VHZW5lcmljU3VwZXJUeXBlcz4NCisgIDwvZUNsYXNzaWZpZXJzPg0KKyAgPGVDbGFzc2lmaWVycyB4c2k6dHlwZT0iZWNvcmU6RUNsYXNzIiBuYW1lPSJDb21wYXJhYmxlIiBpbnN0YW5jZUNsYXNzTmFtZT0iamF2YS5sYW5nLkNvbXBhcmFibGUiDQorICAgICAgYWJzdHJhY3Q9InRydWUiIGludGVyZmFjZT0idHJ1ZSI+DQorICAgIDxlVHlwZVBhcmFtZXRlcnMgbmFtZT0iVCIvPg0KKyAgPC9lQ2xhc3NpZmllcnM+DQorICA8ZUNsYXNzaWZpZXJzIHhzaTp0eXBlPSJlY29yZTpFQ2xhc3MiIG5hbWU9IkludGVncmF0aW9uRGVjb3JhdG9yIiBhYnN0cmFjdD0idHJ1ZSINCisgICAgICBlU3VwZXJUeXBlcz0iIy8vTm9kZURlY29yYXRvciI+DQorICAgIDxlT3BlcmF0aW9ucyBuYW1lPSJhcHBseUV4dGVybmFsRGVsdGFzIj4NCisgICAgICA8ZVBhcmFtZXRlcnMgbmFtZT0idGltZSIgZVR5cGU9IiMvL1NURU1UaW1lIi8+DQorICAgICAgPGVQYXJhbWV0ZXJzIG5hbWU9InRpbWVEZWx0YSIgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLmVtZi5lY29yZS9tb2RlbC9FY29yZS5lY29yZSMvL0VMb25nIi8+DQorICAgICAgPGVQYXJhbWV0ZXJzIG5hbWU9ImxhYmVscyIgdXBwZXJCb3VuZD0iLTEiIGVUeXBlPSJlY29yZTpFQ2xhc3MgZ3JhcGguZWNvcmUjLy9EeW5hbWljTGFiZWwiLz4NCisgICAgPC9lT3BlcmF0aW9ucz4NCisgICAgPGVPcGVyYXRpb25zIG5hbWU9ImNhbGN1bGF0ZURlbHRhIj4NCisgICAgICA8ZVBhcmFtZXRlcnMgbmFtZT0idGltZSIgZVR5cGU9IiMvL1NURU1UaW1lIi8+DQorICAgICAgPGVQYXJhbWV0ZXJzIG5hbWU9InRpbWVEZWx0YSIgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLmVtZi5lY29yZS9tb2RlbC9FY29yZS5lY29yZSMvL0VMb25nIi8+DQorICAgICAgPGVQYXJhbWV0ZXJzIG5hbWU9ImxhYmVscyIgdXBwZXJCb3VuZD0iLTEiIGVUeXBlPSJlY29yZTpFQ2xhc3MgZ3JhcGguZWNvcmUjLy9EeW5hbWljTGFiZWwiLz4NCisgICAgPC9lT3BlcmF0aW9ucz4NCisgICAgPGVPcGVyYXRpb25zIG5hbWU9ImRvTW9kZWxTcGVjaWZpY0FkanVzdG1lbnRzIj4NCisgICAgICA8ZVBhcmFtZXRlcnMgbmFtZT0ibGFiZWwiIGVUeXBlPSJlY29yZTpFQ2xhc3MgZ3JhcGguZWNvcmUjLy9MYWJlbFZhbHVlIi8+DQorICAgIDwvZU9wZXJhdGlvbnM+DQorICAgIDxlT3BlcmF0aW9ucyBuYW1lPSJpc0RldGVybWluaXN0aWMiIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgcGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5lbWYuZWNvcmUvbW9kZWwvRWNvcmUuZWNvcmUjLy9FQm9vbGVhbiIvPg0KKyAgPC9lQ2xhc3NpZmllcnM+DQorPC9lY29yZTpFUGFja2FnZT4NCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9tb2RlbC9tb2RpZmllci5lY29yZSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL21vZGVsL21vZGlmaWVyLmVjb3JlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlhMDNlMWUKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9tb2RlbC9tb2RpZmllci5lY29yZQpAQCAtMCwwICsxLDEzMCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4NCis8ZWNvcmU6RVBhY2thZ2UgeG1pOnZlcnNpb249IjIuMCINCisgICAgeG1sbnM6eG1pPSJodHRwOi8vd3d3Lm9tZy5vcmcvWE1JIiB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIg0KKyAgICB4bWxuczplY29yZT0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9lbWYvMjAwMi9FY29yZSIgbmFtZT0ibW9kaWZpZXIiDQorICAgIG5zVVJJPSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9tb2RpZmllci5lY29yZSIgbnNQcmVmaXg9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllciI+DQorICA8ZUNsYXNzaWZpZXJzIHhzaTp0eXBlPSJlY29yZTpFQ2xhc3MiIG5hbWU9IkRvdWJsZU5PUE1vZGlmaWVyIiBlU3VwZXJUeXBlcz0iIy8vTk9QTW9kaWZpZXIiLz4NCisgIDxlQ2xhc3NpZmllcnMgeHNpOnR5cGU9ImVjb3JlOkVDbGFzcyIgbmFtZT0iRG91YmxlUmFuZ2VNb2RpZmllciIgZVN1cGVyVHlwZXM9IiMvL1JhbmdlTW9kaWZpZXIiPg0KKyAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0ic3RhcnRWYWx1ZSIgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2VtZi8yMDAyL0Vjb3JlIy8vRURvdWJsZSINCisgICAgICAgIGRlZmF1bHRWYWx1ZUxpdGVyYWw9Ii05OTk5OTk5OS4wIi8+DQorICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJlbmRWYWx1ZSIgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2VtZi8yMDAyL0Vjb3JlIy8vRURvdWJsZSINCisgICAgICAgIGRlZmF1bHRWYWx1ZUxpdGVyYWw9Ii05OTk5OTk5OS4wIi8+DQorICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJpbmNyZW1lbnQiIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9lbWYvMjAwMi9FY29yZSMvL0VEb3VibGUiDQorICAgICAgICBkZWZhdWx0VmFsdWVMaXRlcmFsPSItOTk5OTk5OTkuMCIvPg0KKyAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0ibmV4dFZhbHVlIiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDIvRWNvcmUjLy9FRG91YmxlIg0KKyAgICAgICAgZGVmYXVsdFZhbHVlTGl0ZXJhbD0iMC4wIi8+DQorICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJvcmlnaW5hbFZhbHVlIiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDIvRWNvcmUjLy9FRG91YmxlIi8+DQorICA8L2VDbGFzc2lmaWVycz4NCisgIDxlQ2xhc3NpZmllcnMgeHNpOnR5cGU9ImVjb3JlOkVDbGFzcyIgbmFtZT0iRG91YmxlU2VxdWVuY2VNb2RpZmllciIgZVN1cGVyVHlwZXM9IiMvL1NlcXVlbmNlTW9kaWZpZXIiPg0KKyAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0ic2VxdWVuY2UiIHVwcGVyQm91bmQ9Ii0xIg0KKyAgICAgICAgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2VtZi8yMDAyL0Vjb3JlIy8vRURvdWJsZU9iamVjdCIvPg0KKyAgPC9lQ2xhc3NpZmllcnM+DQorICA8ZUNsYXNzaWZpZXJzIHhzaTp0eXBlPSJlY29yZTpFQ2xhc3MiIG5hbWU9IkZlYXR1cmVNb2RpZmllciIgYWJzdHJhY3Q9InRydWUiPg0KKyAgICA8ZU9wZXJhdGlvbnMgbmFtZT0idXBkYXRlRmVhdHVyZSIvPg0KKyAgICA8ZU9wZXJhdGlvbnMgbmFtZT0icmVzZXQiLz4NCisgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVSZWZlcmVuY2UiIG5hbWU9InRhcmdldCIgZVR5cGU9ImVjb3JlOkVDbGFzcyBwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLmVtZi5lY29yZS9tb2RlbC9FY29yZS5lY29yZSMvL0VPYmplY3QiLz4NCisgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVSZWZlcmVuY2UiIG5hbWU9ImVTdHJ1Y3R1cmFsRmVhdHVyZSIgZVR5cGU9ImVjb3JlOkVDbGFzcyBwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLmVtZi5lY29yZS9tb2RlbC9FY29yZS5lY29yZSMvL0VTdHJ1Y3R1cmFsRmVhdHVyZSINCisgICAgICAgIHRyYW5zaWVudD0idHJ1ZSIgcmVzb2x2ZVByb3hpZXM9ImZhbHNlIi8+DQorICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJmZWF0dXJlTmFtZSIgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2VtZi8yMDAyL0Vjb3JlIy8vRVN0cmluZyIvPg0KKyAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0iZmVhdHVyZUlkIiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDIvRWNvcmUjLy9FSW50Ii8+DQorICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJjdXJyZW50VmFsdWVUZXh0IiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDIvRWNvcmUjLy9FU3RyaW5nIg0KKyAgICAgICAgY2hhbmdlYWJsZT0iZmFsc2UiIHRyYW5zaWVudD0idHJ1ZSIvPg0KKyAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0iY29tcGxldGUiIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9lbWYvMjAwMi9FY29yZSMvL0VCb29sZWFuIg0KKyAgICAgICAgY2hhbmdlYWJsZT0iZmFsc2UiIHZvbGF0aWxlPSJ0cnVlIiB0cmFuc2llbnQ9InRydWUiLz4NCisgIDwvZUNsYXNzaWZpZXJzPg0KKyAgPGVDbGFzc2lmaWVycyB4c2k6dHlwZT0iZWNvcmU6RUNsYXNzIiBuYW1lPSJJbnRlZ2VyTk9QTW9kaWZpZXIiIGVTdXBlclR5cGVzPSIjLy9OT1BNb2RpZmllciIvPg0KKyAgPGVDbGFzc2lmaWVycyB4c2k6dHlwZT0iZWNvcmU6RUNsYXNzIiBuYW1lPSJJbnRlZ2VyUmFuZ2VNb2RpZmllciIgZVN1cGVyVHlwZXM9IiMvL1JhbmdlTW9kaWZpZXIiPg0KKyAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0ic3RhcnRWYWx1ZSIgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2VtZi8yMDAyL0Vjb3JlIy8vRUludCINCisgICAgICAgIGRlZmF1bHRWYWx1ZUxpdGVyYWw9Ii05OTk5OTk5OSIvPg0KKyAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0iZW5kVmFsdWUiIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9lbWYvMjAwMi9FY29yZSMvL0VJbnQiDQorICAgICAgICBkZWZhdWx0VmFsdWVMaXRlcmFsPSItOTk5OTk5OTkiLz4NCisgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVBdHRyaWJ1dGUiIG5hbWU9ImluY3JlbWVudCIgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2VtZi8yMDAyL0Vjb3JlIy8vRUludCINCisgICAgICAgIGRlZmF1bHRWYWx1ZUxpdGVyYWw9Ii05OTk5OTk5OSIvPg0KKyAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0ibmV4dFZhbHVlIiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDIvRWNvcmUjLy9FSW50Ig0KKyAgICAgICAgZGVmYXVsdFZhbHVlTGl0ZXJhbD0iLTk5OTk5OTk5Ii8+DQorICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJvcmlnaW5hbFZhbHVlIiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDIvRWNvcmUjLy9FSW50Ii8+DQorICA8L2VDbGFzc2lmaWVycz4NCisgIDxlQ2xhc3NpZmllcnMgeHNpOnR5cGU9ImVjb3JlOkVDbGFzcyIgbmFtZT0iSW50ZWdlclNlcXVlbmNlTW9kaWZpZXIiIGVTdXBlclR5cGVzPSIjLy9TZXF1ZW5jZU1vZGlmaWVyIj4NCisgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVBdHRyaWJ1dGUiIG5hbWU9InNlcXVlbmNlIiB1cHBlckJvdW5kPSItMSINCisgICAgICAgIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9lbWYvMjAwMi9FY29yZSMvL0VJbnRlZ2VyT2JqZWN0Ii8+DQorICA8L2VDbGFzc2lmaWVycz4NCisgIDxlQ2xhc3NpZmllcnMgeHNpOnR5cGU9ImVjb3JlOkVDbGFzcyIgbmFtZT0iTG9uZ05PUE1vZGlmaWVyIiBlU3VwZXJUeXBlcz0iIy8vTk9QTW9kaWZpZXIiLz4NCisgIDxlQ2xhc3NpZmllcnMgeHNpOnR5cGU9ImVjb3JlOkVDbGFzcyIgbmFtZT0iTG9uZ1JhbmdlTW9kaWZpZXIiIGVTdXBlclR5cGVzPSIjLy9SYW5nZU1vZGlmaWVyIj4NCisgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVBdHRyaWJ1dGUiIG5hbWU9InN0YXJ0VmFsdWUiIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9lbWYvMjAwMi9FY29yZSMvL0VMb25nIg0KKyAgICAgICAgZGVmYXVsdFZhbHVlTGl0ZXJhbD0iLTk5OTk5OTk5Ii8+DQorICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJlbmRWYWx1ZSIgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2VtZi8yMDAyL0Vjb3JlIy8vRUxvbmciDQorICAgICAgICBkZWZhdWx0VmFsdWVMaXRlcmFsPSItOTk5OTk5OTkiLz4NCisgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVBdHRyaWJ1dGUiIG5hbWU9ImluY3JlbWVudCIgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2VtZi8yMDAyL0Vjb3JlIy8vRUxvbmciDQorICAgICAgICBkZWZhdWx0VmFsdWVMaXRlcmFsPSItOTk5OTk5OTkiLz4NCisgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVBdHRyaWJ1dGUiIG5hbWU9Im5leHRWYWx1ZSIgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2VtZi8yMDAyL0Vjb3JlIy8vRUxvbmciDQorICAgICAgICBkZWZhdWx0VmFsdWVMaXRlcmFsPSItOTk5OTk5OTkiLz4NCisgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVBdHRyaWJ1dGUiIG5hbWU9Im9yaWdpbmFsVmFsdWUiIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9lbWYvMjAwMi9FY29yZSMvL0VMb25nIg0KKyAgICAgICAgZGVmYXVsdFZhbHVlTGl0ZXJhbD0iLTk5OTk5OTk5Ii8+DQorICA8L2VDbGFzc2lmaWVycz4NCisgIDxlQ2xhc3NpZmllcnMgeHNpOnR5cGU9ImVjb3JlOkVDbGFzcyIgbmFtZT0iTG9uZ1NlcXVlbmNlTW9kaWZpZXIiIGVTdXBlclR5cGVzPSIjLy9TZXF1ZW5jZU1vZGlmaWVyIj4NCisgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVBdHRyaWJ1dGUiIG5hbWU9InNlcXVlbmNlIiB1cHBlckJvdW5kPSItMSINCisgICAgICAgIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9lbWYvMjAwMi9FY29yZSMvL0VMb25nT2JqZWN0Ii8+DQorICA8L2VDbGFzc2lmaWVycz4NCisgIDxlQ2xhc3NpZmllcnMgeHNpOnR5cGU9ImVjb3JlOkVDbGFzcyIgbmFtZT0iTW9kaWZpZXIiIGVTdXBlclR5cGVzPSJtb2RlbC5lY29yZSMvL0RlY29yYXRvciI+DQorICAgIDxlT3BlcmF0aW9ucyBuYW1lPSJ1cGRhdGVTY2VuYXJpbyI+DQorICAgICAgPGVQYXJhbWV0ZXJzIG5hbWU9ImJhc2VTY2VuYXJpbyIgZVR5cGU9ImVjb3JlOkVDbGFzcyBzY2VuYXJpby5lY29yZSMvL1NjZW5hcmlvIi8+DQorICAgIDwvZU9wZXJhdGlvbnM+DQorICAgIDxlT3BlcmF0aW9ucyBuYW1lPSJyZXNldCIvPg0KKyAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0idGFyZ2V0VVJJIiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIGNvbW1vbi5lY29yZSMvL1VSSSIvPg0KKyAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RVJlZmVyZW5jZSIgbmFtZT0iZmVhdHVyZU1vZGlmaWVycyIgdXBwZXJCb3VuZD0iLTEiDQorICAgICAgICBlVHlwZT0iIy8vRmVhdHVyZU1vZGlmaWVyIiBjb250YWlubWVudD0idHJ1ZSIgcmVzb2x2ZVByb3hpZXM9ImZhbHNlIi8+DQorICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJjb21wbGV0ZSIgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2VtZi8yMDAyL0Vjb3JlIy8vRUJvb2xlYW4iDQorICAgICAgICBjaGFuZ2VhYmxlPSJmYWxzZSIgdm9sYXRpbGU9InRydWUiIHRyYW5zaWVudD0idHJ1ZSIvPg0KKyAgPC9lQ2xhc3NpZmllcnM+DQorICA8ZUNsYXNzaWZpZXJzIHhzaTp0eXBlPSJlY29yZTpFQ2xhc3MiIG5hbWU9Ik5PUE1vZGlmaWVyIiBlU3VwZXJUeXBlcz0iIy8vRmVhdHVyZU1vZGlmaWVyIi8+DQorICA8ZUNsYXNzaWZpZXJzIHhzaTp0eXBlPSJlY29yZTpFQ2xhc3MiIG5hbWU9IlJhbmdlTW9kaWZpZXIiIGFic3RyYWN0PSJ0cnVlIiBlU3VwZXJUeXBlcz0iIy8vRmVhdHVyZU1vZGlmaWVyIi8+DQorICA8ZUNsYXNzaWZpZXJzIHhzaTp0eXBlPSJlY29yZTpFQ2xhc3MiIG5hbWU9IlNURU1UaW1lTk9QTW9kaWZpZXIiIGVTdXBlclR5cGVzPSIjLy9OT1BNb2RpZmllciIvPg0KKyAgPGVDbGFzc2lmaWVycyB4c2k6dHlwZT0iZWNvcmU6RUNsYXNzIiBuYW1lPSJTVEVNVGltZVJhbmdlTW9kaWZpZXIiIGVTdXBlclR5cGVzPSIjLy9SYW5nZU1vZGlmaWVyIj4NCisgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVSZWZlcmVuY2UiIG5hbWU9InN0YXJ0VmFsdWUiIGVUeXBlPSJlY29yZTpFQ2xhc3MgbW9kZWwuZWNvcmUjLy9TVEVNVGltZSIvPg0KKyAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RVJlZmVyZW5jZSIgbmFtZT0iZW5kVmFsdWUiIGVUeXBlPSJlY29yZTpFQ2xhc3MgbW9kZWwuZWNvcmUjLy9TVEVNVGltZSIvPg0KKyAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0iaW5jcmVtZW50IiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDIvRWNvcmUjLy9FTG9uZyIvPg0KKyAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RVJlZmVyZW5jZSIgbmFtZT0ibmV4dFZhbHVlIiBlVHlwZT0iZWNvcmU6RUNsYXNzIG1vZGVsLmVjb3JlIy8vU1RFTVRpbWUiLz4NCisgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVSZWZlcmVuY2UiIG5hbWU9Im9yaWdpbmFsVmFsdWUiIGVUeXBlPSJlY29yZTpFQ2xhc3MgbW9kZWwuZWNvcmUjLy9TVEVNVGltZSIvPg0KKyAgPC9lQ2xhc3NpZmllcnM+DQorICA8ZUNsYXNzaWZpZXJzIHhzaTp0eXBlPSJlY29yZTpFQ2xhc3MiIG5hbWU9IlNURU1UaW1lU2VxdWVuY2VNb2RpZmllciIgZVN1cGVyVHlwZXM9IiMvL1NlcXVlbmNlTW9kaWZpZXIiPg0KKyAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RVJlZmVyZW5jZSIgbmFtZT0ic2VxdWVuY2UiIHVwcGVyQm91bmQ9Ii0xIg0KKyAgICAgICAgZVR5cGU9ImVjb3JlOkVDbGFzcyBtb2RlbC5lY29yZSMvL1NURU1UaW1lIi8+DQorICA8L2VDbGFzc2lmaWVycz4NCisgIDxlQ2xhc3NpZmllcnMgeHNpOnR5cGU9ImVjb3JlOkVDbGFzcyIgbmFtZT0iU2VxdWVuY2VNb2RpZmllciIgYWJzdHJhY3Q9InRydWUiIGVTdXBlclR5cGVzPSIjLy9GZWF0dXJlTW9kaWZpZXIiPg0KKyAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0ic2VxdWVuY2VTaXplIiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDIvRWNvcmUjLy9FSW50Ig0KKyAgICAgICAgY2hhbmdlYWJsZT0iZmFsc2UiIHZvbGF0aWxlPSJ0cnVlIiB0cmFuc2llbnQ9InRydWUiLz4NCisgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVBdHRyaWJ1dGUiIG5hbWU9ImN1cnJlbnRTZXF1ZW5jZUluZGV4IiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDIvRWNvcmUjLy9FSW50Ig0KKyAgICAgICAgZGVmYXVsdFZhbHVlTGl0ZXJhbD0iMCIvPg0KKyAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0ibmV4dFZhbHVlIiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDIvRWNvcmUjLy9FSmF2YU9iamVjdCINCisgICAgICAgIGNoYW5nZWFibGU9ImZhbHNlIiB2b2xhdGlsZT0idHJ1ZSIgdHJhbnNpZW50PSJ0cnVlIiB1bnNldHRhYmxlPSJ0cnVlIi8+DQorICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJvcmlnaW5hbFZhbHVlIiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDIvRWNvcmUjLy9FSmF2YU9iamVjdCIvPg0KKyAgPC9lQ2xhc3NpZmllcnM+DQorICA8ZUNsYXNzaWZpZXJzIHhzaTp0eXBlPSJlY29yZTpFQ2xhc3MiIG5hbWU9IlN0cmluZ05PUE1vZGlmaWVyIiBlU3VwZXJUeXBlcz0iIy8vTk9QTW9kaWZpZXIiLz4NCisgIDxlQ2xhc3NpZmllcnMgeHNpOnR5cGU9ImVjb3JlOkVDbGFzcyIgbmFtZT0iU3RyaW5nU2VxdWVuY2VNb2RpZmllciIgZVN1cGVyVHlwZXM9IiMvL1NlcXVlbmNlTW9kaWZpZXIiPg0KKyAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0ic2VxdWVuY2UiIHVwcGVyQm91bmQ9Ii0xIg0KKyAgICAgICAgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2VtZi8yMDAyL0Vjb3JlIy8vRVN0cmluZyIvPg0KKyAgPC9lQ2xhc3NpZmllcnM+DQorICA8ZUNsYXNzaWZpZXJzIHhzaTp0eXBlPSJlY29yZTpFQ2xhc3MiIG5hbWU9Ik1vZGlmaWFibGUiIGFic3RyYWN0PSJ0cnVlIiBpbnRlcmZhY2U9InRydWUiLz4NCisgIDxlQ2xhc3NpZmllcnMgeHNpOnR5cGU9ImVjb3JlOkVDbGFzcyIgbmFtZT0iU2luZ2xlVmFsdWVNb2RpZmllciIgYWJzdHJhY3Q9InRydWUiDQorICAgICAgZVN1cGVyVHlwZXM9IiMvL0ZlYXR1cmVNb2RpZmllciIvPg0KKyAgPGVDbGFzc2lmaWVycyB4c2k6dHlwZT0iZWNvcmU6RUNsYXNzIiBuYW1lPSJEb3VibGVNb2RpZmllciIgZVN1cGVyVHlwZXM9IiMvL1NpbmdsZVZhbHVlTW9kaWZpZXIiPg0KKyAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0idmFsdWUiIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgcGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5lbWYuZWNvcmUvbW9kZWwvRWNvcmUuZWNvcmUjLy9FRG91YmxlIi8+DQorICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJvcmlnaW5hbFZhbHVlIiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIHBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2UuZW1mLmVjb3JlL21vZGVsL0Vjb3JlLmVjb3JlIy8vRURvdWJsZSINCisgICAgICAgIHRyYW5zaWVudD0idHJ1ZSIgZGVmYXVsdFZhbHVlTGl0ZXJhbD0iLTFFMjAwIi8+DQorICA8L2VDbGFzc2lmaWVycz4NCisgIDxlQ2xhc3NpZmllcnMgeHNpOnR5cGU9ImVjb3JlOkVDbGFzcyIgbmFtZT0iSW50ZWdlck1vZGlmaWVyIiBlU3VwZXJUeXBlcz0iIy8vU2luZ2xlVmFsdWVNb2RpZmllciI+DQorICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJ2YWx1ZSIgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLmVtZi5lY29yZS9tb2RlbC9FY29yZS5lY29yZSMvL0VJbnQiLz4NCisgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVBdHRyaWJ1dGUiIG5hbWU9Im9yaWdpbmFsVmFsdWUiIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgcGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5lbWYuZWNvcmUvbW9kZWwvRWNvcmUuZWNvcmUjLy9FSW50Ig0KKyAgICAgICAgdHJhbnNpZW50PSJ0cnVlIiBkZWZhdWx0VmFsdWVMaXRlcmFsPSItMjAwMDAwMDAwMCIvPg0KKyAgPC9lQ2xhc3NpZmllcnM+DQorICA8ZUNsYXNzaWZpZXJzIHhzaTp0eXBlPSJlY29yZTpFQ2xhc3MiIG5hbWU9IkxvbmdNb2RpZmllciIgZVN1cGVyVHlwZXM9IiMvL1NpbmdsZVZhbHVlTW9kaWZpZXIiPg0KKyAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0idmFsdWUiIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgcGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5lbWYuZWNvcmUvbW9kZWwvRWNvcmUuZWNvcmUjLy9FTG9uZyIvPg0KKyAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0ib3JpZ2luYWxWYWx1ZSIgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLmVtZi5lY29yZS9tb2RlbC9FY29yZS5lY29yZSMvL0VMb25nIg0KKyAgICAgICAgdHJhbnNpZW50PSJ0cnVlIiBkZWZhdWx0VmFsdWVMaXRlcmFsPSItMjAwMDAwMDAwMCIvPg0KKyAgPC9lQ2xhc3NpZmllcnM+DQorICA8ZUNsYXNzaWZpZXJzIHhzaTp0eXBlPSJlY29yZTpFQ2xhc3MiIG5hbWU9IlNURU1UaW1lTW9kaWZpZXIiIGVTdXBlclR5cGVzPSIjLy9TaW5nbGVWYWx1ZU1vZGlmaWVyIj4NCisgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVSZWZlcmVuY2UiIG5hbWU9InZhbHVlIiBlVHlwZT0iZWNvcmU6RUNsYXNzIG1vZGVsLmVjb3JlIy8vU1RFTVRpbWUiLz4NCisgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVSZWZlcmVuY2UiIG5hbWU9Im9yaWdpbmFsVmFsdWUiIGVUeXBlPSJlY29yZTpFQ2xhc3MgbW9kZWwuZWNvcmUjLy9TVEVNVGltZSINCisgICAgICAgIHRyYW5zaWVudD0idHJ1ZSIvPg0KKyAgPC9lQ2xhc3NpZmllcnM+DQorPC9lY29yZTpFUGFja2FnZT4NCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9tb2RlbC9wcmVkaWNhdGUuZWNvcmUgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9tb2RlbC9wcmVkaWNhdGUuZWNvcmUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzBlMWY2MQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL21vZGVsL3ByZWRpY2F0ZS5lY29yZQpAQCAtMCwwICsxLDU0IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPGVjb3JlOkVQYWNrYWdlIHhtaTp2ZXJzaW9uPSIyLjAiCisgICAgeG1sbnM6eG1pPSJodHRwOi8vd3d3Lm9tZy5vcmcvWE1JIiB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIgorICAgIHhtbG5zOmVjb3JlPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2VtZi8yMDAyL0Vjb3JlIiBuYW1lPSJwcmVkaWNhdGUiCisgICAgbnNVUkk9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3ByZWRpY2F0ZS5lY29yZSIgbnNQcmVmaXg9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUiPgorICA8ZUNsYXNzaWZpZXJzIHhzaTp0eXBlPSJlY29yZTpFQ2xhc3MiIG5hbWU9IkFuZCIgZVN1cGVyVHlwZXM9IiMvL05hcnlCb29sZWFuT3BlcmF0b3IiLz4KKyAgPGVDbGFzc2lmaWVycyB4c2k6dHlwZT0iZWNvcmU6RUNsYXNzIiBuYW1lPSJCb29sZWFuRXhwcmVzc2lvbiIgYWJzdHJhY3Q9InRydWUiIGVTdXBlclR5cGVzPSIjLy9QcmVkaWNhdGUiLz4KKyAgPGVDbGFzc2lmaWVycyB4c2k6dHlwZT0iZWNvcmU6RUNsYXNzIiBuYW1lPSJCb29sZWFuT3BlcmF0b3IiIGFic3RyYWN0PSJ0cnVlIiBlU3VwZXJUeXBlcz0iIy8vQm9vbGVhbkV4cHJlc3Npb24iLz4KKyAgPGVDbGFzc2lmaWVycyB4c2k6dHlwZT0iZWNvcmU6RUNsYXNzIiBuYW1lPSJGYWxzZSIgZVN1cGVyVHlwZXM9IiMvL1Rlc3QiLz4KKyAgPGVDbGFzc2lmaWVycyB4c2k6dHlwZT0iZWNvcmU6RUNsYXNzIiBuYW1lPSJOYXJ5Qm9vbGVhbk9wZXJhdG9yIiBhYnN0cmFjdD0idHJ1ZSIKKyAgICAgIGVTdXBlclR5cGVzPSIjLy9Cb29sZWFuT3BlcmF0b3IiPgorICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFUmVmZXJlbmNlIiBuYW1lPSJvcGVyYW5kcyIgdXBwZXJCb3VuZD0iLTEiCisgICAgICAgIGVUeXBlPSIjLy9QcmVkaWNhdGUiIGNvbnRhaW5tZW50PSJ0cnVlIiByZXNvbHZlUHJveGllcz0iZmFsc2UiLz4KKyAgPC9lQ2xhc3NpZmllcnM+CisgIDxlQ2xhc3NpZmllcnMgeHNpOnR5cGU9ImVjb3JlOkVDbGFzcyIgbmFtZT0iTm90IiBlU3VwZXJUeXBlcz0iIy8vVW5hcnlCb29sZWFuT3BlcmF0b3IiLz4KKyAgPGVDbGFzc2lmaWVycyB4c2k6dHlwZT0iZWNvcmU6RUNsYXNzIiBuYW1lPSJPciIgZVN1cGVyVHlwZXM9IiMvL05hcnlCb29sZWFuT3BlcmF0b3IiLz4KKyAgPGVDbGFzc2lmaWVycyB4c2k6dHlwZT0iZWNvcmU6RUNsYXNzIiBuYW1lPSJQcmVkaWNhdGUiIGFic3RyYWN0PSJ0cnVlIj4KKyAgICA8ZU9wZXJhdGlvbnMgbmFtZT0iZXZhbHVhdGUiIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9lbWYvMjAwMi9FY29yZSMvL0VCb29sZWFuIj4KKyAgICAgIDxlUGFyYW1ldGVycyBuYW1lPSJ0aW1lIiBlVHlwZT0iZWNvcmU6RUNsYXNzIG1vZGVsLmVjb3JlIy8vU1RFTVRpbWUiLz4KKyAgICAgIDxlUGFyYW1ldGVycyBuYW1lPSJ0aW1lclBlcmlvZCIgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2VtZi8yMDAyL0Vjb3JlIy8vRUxvbmciLz4KKyAgICAgIDxlUGFyYW1ldGVycyBuYW1lPSJncmFwaCIgZVR5cGU9ImVjb3JlOkVDbGFzcyBncmFwaC5lY29yZSMvL0dyYXBoIi8+CisgICAgPC9lT3BlcmF0aW9ucz4KKyAgICA8ZU9wZXJhdGlvbnMgbmFtZT0icmVzZXQiLz4KKyAgPC9lQ2xhc3NpZmllcnM+CisgIDxlQ2xhc3NpZmllcnMgeHNpOnR5cGU9ImVjb3JlOkVDbGFzcyIgbmFtZT0iUHJlZGljYXRlUmVmZXJlbmNlIiBlU3VwZXJUeXBlcz0iIy8vUHJlZGljYXRlIj4KKyAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RVJlZmVyZW5jZSIgbmFtZT0icHJlZGljYXRlIiBlVHlwZT0iIy8vUHJlZGljYXRlIi8+CisgIDwvZUNsYXNzaWZpZXJzPgorICA8ZUNsYXNzaWZpZXJzIHhzaTp0eXBlPSJlY29yZTpFQ2xhc3MiIG5hbWU9IlRlc3QiIGFic3RyYWN0PSJ0cnVlIiBlU3VwZXJUeXBlcz0iIy8vUHJlZGljYXRlIi8+CisgIDxlQ2xhc3NpZmllcnMgeHNpOnR5cGU9ImVjb3JlOkVDbGFzcyIgbmFtZT0iVHJ1ZSIgZVN1cGVyVHlwZXM9IiMvL1Rlc3QiLz4KKyAgPGVDbGFzc2lmaWVycyB4c2k6dHlwZT0iZWNvcmU6RUNsYXNzIiBuYW1lPSJVbmFyeUJvb2xlYW5PcGVyYXRvciIgYWJzdHJhY3Q9InRydWUiCisgICAgICBlU3VwZXJUeXBlcz0iIy8vQm9vbGVhbk9wZXJhdG9yIj4KKyAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RVJlZmVyZW5jZSIgbmFtZT0ib3BlcmFuZCIgZVR5cGU9IiMvL1ByZWRpY2F0ZSIKKyAgICAgICAgY29udGFpbm1lbnQ9InRydWUiIHJlc29sdmVQcm94aWVzPSJmYWxzZSIvPgorICA8L2VDbGFzc2lmaWVycz4KKyAgPGVDbGFzc2lmaWVycyB4c2k6dHlwZT0iZWNvcmU6RUNsYXNzIiBuYW1lPSJQcmVkaWNhdGVFeHByZXNzaW9uIiBlU3VwZXJUeXBlcz0iIy8vQm9vbGVhbkV4cHJlc3Npb24iPgorICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFUmVmZXJlbmNlIiBuYW1lPSJwcmVkaWNhdGUiIGVUeXBlPSIjLy9QcmVkaWNhdGUiCisgICAgICAgIGNvbnRhaW5tZW50PSJ0cnVlIiByZXNvbHZlUHJveGllcz0iZmFsc2UiLz4KKyAgPC9lQ2xhc3NpZmllcnM+CisgIDxlQ2xhc3NpZmllcnMgeHNpOnR5cGU9ImVjb3JlOkVDbGFzcyIgbmFtZT0iSWRlbnRpZmlhYmxlUHJlZGljYXRlIiBhYnN0cmFjdD0idHJ1ZSIKKyAgICAgIGVTdXBlclR5cGVzPSJjb21tb24uZWNvcmUjLy9JZGVudGlmaWFibGUgIy8vUHJlZGljYXRlIi8+CisgIDxlQ2xhc3NpZmllcnMgeHNpOnR5cGU9ImVjb3JlOkVDbGFzcyIgbmFtZT0iSWRlbnRpZmlhYmxlUHJlZGljYXRlRXhwcmVzc2lvbiIgZVN1cGVyVHlwZXM9IiMvL0lkZW50aWZpYWJsZVByZWRpY2F0ZSAjLy9QcmVkaWNhdGVFeHByZXNzaW9uIi8+CisgIDxlQ2xhc3NpZmllcnMgeHNpOnR5cGU9ImVjb3JlOkVDbGFzcyIgbmFtZT0iSWRlbnRpZmlhYmxlVGVzdCIgYWJzdHJhY3Q9InRydWUiIGVTdXBlclR5cGVzPSIjLy9JZGVudGlmaWFibGVQcmVkaWNhdGUgIy8vVGVzdCIvPgorICA8ZUNsYXNzaWZpZXJzIHhzaTp0eXBlPSJlY29yZTpFQ2xhc3MiIG5hbWU9IlRpbWVUZXN0IiBhYnN0cmFjdD0idHJ1ZSIgZVN1cGVyVHlwZXM9IiMvL1Rlc3QiLz4KKyAgPGVDbGFzc2lmaWVycyB4c2k6dHlwZT0iZWNvcmU6RUNsYXNzIiBuYW1lPSJFbGFwc2VkVGltZVRlc3QiIGVTdXBlclR5cGVzPSIjLy9UaW1lVGVzdCI+CisgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVBdHRyaWJ1dGUiIG5hbWU9InJlZmVyZW5jZVRpbWVWYWxpZCIgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2VtZi8yMDAyL0Vjb3JlIy8vRUJvb2xlYW4iCisgICAgICAgIGRlZmF1bHRWYWx1ZUxpdGVyYWw9ImZhbHNlIi8+CisgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVBdHRyaWJ1dGUiIG5hbWU9ImVsYXBzZWRNaWxsaXNlY29uZHMiIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9lbWYvMjAwMi9FY29yZSMvL0VMb25nIgorICAgICAgICBjaGFuZ2VhYmxlPSJmYWxzZSIgdHJhbnNpZW50PSJ0cnVlIi8+CisgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVBdHRyaWJ1dGUiIG5hbWU9Im51bWJlcm9mRGF5cyIgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2VtZi8yMDAyL0Vjb3JlIy8vRUludCIKKyAgICAgICAgZGVmYXVsdFZhbHVlTGl0ZXJhbD0iMCIvPgorICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFUmVmZXJlbmNlIiBuYW1lPSJyZWZlcmVuY2VUaW1lIiBlVHlwZT0iZWNvcmU6RUNsYXNzIG1vZGVsLmVjb3JlIy8vU1RFTVRpbWUiCisgICAgICAgIGNvbnRhaW5tZW50PSJ0cnVlIiByZXNvbHZlUHJveGllcz0iZmFsc2UiLz4KKyAgPC9lQ2xhc3NpZmllcnM+Cis8L2Vjb3JlOkVQYWNrYWdlPgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvbW9kZWwvc2NlbmFyaW8uZWNvcmUgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9tb2RlbC9zY2VuYXJpby5lY29yZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NTdmNDQwCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvbW9kZWwvc2NlbmFyaW8uZWNvcmUKQEAgLTAsMCArMSwyNCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4NCis8ZWNvcmU6RVBhY2thZ2UgeG1pOnZlcnNpb249IjIuMCINCisgICAgeG1sbnM6eG1pPSJodHRwOi8vd3d3Lm9tZy5vcmcvWE1JIiB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIg0KKyAgICB4bWxuczplY29yZT0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9lbWYvMjAwMi9FY29yZSIgbmFtZT0ic2NlbmFyaW8iDQorICAgIG5zVVJJPSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9zY2VuYXJpby5lY29yZSIgbnNQcmVmaXg9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zY2VuYXJpbyI+DQorICA8ZUNsYXNzaWZpZXJzIHhzaTp0eXBlPSJlY29yZTpFQ2xhc3MiIG5hbWU9IlNjZW5hcmlvIiBlU3VwZXJUeXBlcz0iY29tbW9uLmVjb3JlIy8vSWRlbnRpZmlhYmxlIj4NCisgICAgPGVPcGVyYXRpb25zIG5hbWU9InN0ZXAiIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9lbWYvMjAwMi9FY29yZSMvL0VCb29sZWFuIi8+DQorICAgIDxlT3BlcmF0aW9ucyBuYW1lPSJyZXNldCIvPg0KKyAgICA8ZU9wZXJhdGlvbnMgbmFtZT0iaW5pdGlhbGl6ZSIvPg0KKyAgICA8ZU9wZXJhdGlvbnMgbmFtZT0icHJvZHVjZVRpdGxlIiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDIvRWNvcmUjLy9FU3RyaW5nIi8+DQorICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFUmVmZXJlbmNlIiBuYW1lPSJtb2RlbCIgZVR5cGU9ImVjb3JlOkVDbGFzcyBtb2RlbC5lY29yZSMvL01vZGVsIi8+DQorICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFUmVmZXJlbmNlIiBuYW1lPSJzZXF1ZW5jZXIiIGVUeXBlPSJlY29yZTpFQ2xhc3Mgc2VxdWVuY2VyLmVjb3JlIy8vU2VxdWVuY2VyIi8+DQorICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFUmVmZXJlbmNlIiBuYW1lPSJzY2VuYXJpb0RlY29yYXRvcnMiIHVwcGVyQm91bmQ9Ii0xIg0KKyAgICAgICAgZVR5cGU9ImVjb3JlOkVDbGFzcyBtb2RlbC5lY29yZSMvL0RlY29yYXRvciIvPg0KKyAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RVJlZmVyZW5jZSIgbmFtZT0iY2Fub25pY2FsR3JhcGgiIGVUeXBlPSJlY29yZTpFQ2xhc3MgZ3JhcGguZWNvcmUjLy9HcmFwaCINCisgICAgICAgIGNoYW5nZWFibGU9ImZhbHNlIiByZXNvbHZlUHJveGllcz0iZmFsc2UiLz4NCisgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVBdHRyaWJ1dGUiIG5hbWU9InByb2dyZXNzIiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDIvRWNvcmUjLy9FRG91YmxlIg0KKyAgICAgICAgdHJhbnNpZW50PSJ0cnVlIiBkZWZhdWx0VmFsdWVMaXRlcmFsPSIwLjAiLz4NCisgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVSZWZlcmVuY2UiIG5hbWU9InNvbHZlciIgZVR5cGU9ImVjb3JlOkVDbGFzcyBzb2x2ZXIuZWNvcmUjLy9Tb2x2ZXIiDQorICAgICAgICBjb250YWlubWVudD0idHJ1ZSIvPg0KKyAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RVJlZmVyZW5jZSIgbmFtZT0ibG9nZ2VycyIgdXBwZXJCb3VuZD0iLTEiDQorICAgICAgICBlVHlwZT0iZWNvcmU6RUNsYXNzIGxvZ2dlci5lY29yZSMvL0xvZ2dlciIvPg0KKyAgPC9lQ2xhc3NpZmllcnM+DQorPC9lY29yZTpFUGFja2FnZT4NCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9tb2RlbC9zZXF1ZW5jZXIuZWNvcmUgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9tb2RlbC9zZXF1ZW5jZXIuZWNvcmUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTNlOTE3YwotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL21vZGVsL3NlcXVlbmNlci5lY29yZQpAQCAtMCwwICsxLDMyIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/Pg0KKzxlY29yZTpFUGFja2FnZSB4bWk6dmVyc2lvbj0iMi4wIg0KKyAgICB4bWxuczp4bWk9Imh0dHA6Ly93d3cub21nLm9yZy9YTUkiIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiDQorICAgIHhtbG5zOmVjb3JlPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2VtZi8yMDAyL0Vjb3JlIiBuYW1lPSJzZXF1ZW5jZXIiDQorICAgIG5zVVJJPSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9zZXF1ZW5jZXIuZWNvcmUiIG5zUHJlZml4PSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2VxdWVuY2VyIj4NCisgIDxlQ2xhc3NpZmllcnMgeHNpOnR5cGU9ImVjb3JlOkVDbGFzcyIgbmFtZT0iUmVhbFRpbWVTZXF1ZW5jZXIiIGVTdXBlclR5cGVzPSIjLy9TZXF1ZW50aWFsU2VxdWVuY2VyIi8+DQorICA8ZUNsYXNzaWZpZXJzIHhzaTp0eXBlPSJlY29yZTpFQ2xhc3MiIG5hbWU9IlNlcXVlbmNlciIgYWJzdHJhY3Q9InRydWUiIGVTdXBlclR5cGVzPSJjb21tb24uZWNvcmUjLy9JZGVudGlmaWFibGUiPg0KKyAgICA8ZU9wZXJhdGlvbnMgbmFtZT0icmVzZXQiLz4NCisgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVSZWZlcmVuY2UiIG5hbWU9InN0YXJ0VGltZSIgZVR5cGU9ImVjb3JlOkVDbGFzcyBtb2RlbC5lY29yZSMvL1NURU1UaW1lIg0KKyAgICAgICAgY29udGFpbm1lbnQ9InRydWUiIHJlc29sdmVQcm94aWVzPSJmYWxzZSIvPg0KKyAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RVJlZmVyZW5jZSIgbmFtZT0iZW5kVGltZSIgZVR5cGU9ImVjb3JlOkVDbGFzcyBtb2RlbC5lY29yZSMvL1NURU1UaW1lIg0KKyAgICAgICAgY29udGFpbm1lbnQ9InRydWUiIHJlc29sdmVQcm94aWVzPSJmYWxzZSIvPg0KKyAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RVJlZmVyZW5jZSIgbmFtZT0iY3VycmVudFRpbWUiIGVUeXBlPSJlY29yZTpFQ2xhc3MgbW9kZWwuZWNvcmUjLy9TVEVNVGltZSINCisgICAgICAgIGNvbnRhaW5tZW50PSJ0cnVlIiByZXNvbHZlUHJveGllcz0iZmFsc2UiLz4NCisgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVSZWZlcmVuY2UiIG5hbWU9Im5leHRUaW1lIiBlVHlwZT0iZWNvcmU6RUNsYXNzIG1vZGVsLmVjb3JlIy8vU1RFTVRpbWUiDQorICAgICAgICBjaGFuZ2VhYmxlPSJmYWxzZSIgdm9sYXRpbGU9InRydWUiIHRyYW5zaWVudD0idHJ1ZSIgcmVzb2x2ZVByb3hpZXM9ImZhbHNlIi8+DQorICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJ0aW1lRGVsdGEiIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9lbWYvMjAwMi9FY29yZSMvL0VMb25nIg0KKyAgICAgICAgY2hhbmdlYWJsZT0iZmFsc2UiIHRyYW5zaWVudD0idHJ1ZSIvPg0KKyAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0iZHVyYXRpb24iIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9lbWYvMjAwMi9FY29yZSMvL0VMb25nIg0KKyAgICAgICAgZGVmYXVsdFZhbHVlTGl0ZXJhbD0iLTEiLz4NCisgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVBdHRyaWJ1dGUiIG5hbWU9InRpbWVUb1N0b3AiIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9lbWYvMjAwMi9FY29yZSMvL0VCb29sZWFuIg0KKyAgICAgICAgY2hhbmdlYWJsZT0iZmFsc2UiIHZvbGF0aWxlPSJ0cnVlIiB0cmFuc2llbnQ9InRydWUiLz4NCisgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVBdHRyaWJ1dGUiIG5hbWU9IndvcmtDb21wbGV0ZSIgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2VtZi8yMDAyL0Vjb3JlIy8vRURvdWJsZSIvPg0KKyAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0id29ya0luY3JlbWVudCIgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2VtZi8yMDAyL0Vjb3JlIy8vRUludCINCisgICAgICAgIGNoYW5nZWFibGU9ImZhbHNlIiB2b2xhdGlsZT0idHJ1ZSIgdHJhbnNpZW50PSJ0cnVlIi8+DQorICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJjeWNsZSIgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2VtZi8yMDAyL0Vjb3JlIy8vRUludCINCisgICAgICAgIGRlZmF1bHRWYWx1ZUxpdGVyYWw9IjAiLz4NCisgIDwvZUNsYXNzaWZpZXJzPg0KKyAgPGVDbGFzc2lmaWVycyB4c2k6dHlwZT0iZWNvcmU6RUNsYXNzIiBuYW1lPSJTZXF1ZW50aWFsU2VxdWVuY2VyIiBlU3VwZXJUeXBlcz0iIy8vU2VxdWVuY2VyIj4NCisgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVBdHRyaWJ1dGUiIG5hbWU9InRpbWVJbmNyZW1lbnQiIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9lbWYvMjAwMi9FY29yZSMvL0VMb25nIi8+DQorICA8L2VDbGFzc2lmaWVycz4NCis8L2Vjb3JlOkVQYWNrYWdlPg0KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL21vZGVsL3NvbHZlci5lY29yZSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL21vZGVsL3NvbHZlci5lY29yZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMDUwYWM3Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvbW9kZWwvc29sdmVyLmVjb3JlCkBAIC0wLDAgKzEsMjMgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+DQorPGVjb3JlOkVQYWNrYWdlIHhtaTp2ZXJzaW9uPSIyLjAiDQorICAgIHhtbG5zOnhtaT0iaHR0cDovL3d3dy5vbWcub3JnL1hNSSIgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSINCisgICAgeG1sbnM6ZWNvcmU9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDIvRWNvcmUiIG5hbWU9InNvbHZlciINCisgICAgbnNVUkk9Imh0dHA6Ly9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvc29sdmVyIiBuc1ByZWZpeD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNvbHZlciI+DQorICA8ZUNsYXNzaWZpZXJzIHhzaTp0eXBlPSJlY29yZTpFQ2xhc3MiIG5hbWU9IlNvbHZlciIgZVN1cGVyVHlwZXM9ImNvbW1vbi5lY29yZSMvL0lkZW50aWZpYWJsZSI+DQorICAgIDxlT3BlcmF0aW9ucyBuYW1lPSJzdGVwIiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIHBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2UuZW1mLmVjb3JlL21vZGVsL0Vjb3JlLmVjb3JlIy8vRUJvb2xlYW4iPg0KKyAgICAgIDxlUGFyYW1ldGVycyBuYW1lPSJ0aW1lIiBlVHlwZT0iZWNvcmU6RUNsYXNzIG1vZGVsLmVjb3JlIy8vU1RFTVRpbWUiLz4NCisgICAgICA8ZVBhcmFtZXRlcnMgbmFtZT0idGltZURlbHRhIiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIHBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2UuZW1mLmVjb3JlL21vZGVsL0Vjb3JlLmVjb3JlIy8vRUxvbmciLz4NCisgICAgICA8ZVBhcmFtZXRlcnMgbmFtZT0iY3ljbGUiIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgcGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5lbWYuZWNvcmUvbW9kZWwvRWNvcmUuZWNvcmUjLy9FSW50Ii8+DQorICAgIDwvZU9wZXJhdGlvbnM+DQorICAgIDxlT3BlcmF0aW9ucyBuYW1lPSJyZXNldCIvPg0KKyAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0iZGVjb3JhdG9ycyIgdHJhbnNpZW50PSJ0cnVlIj4NCisgICAgICA8ZUdlbmVyaWNUeXBlIGVDbGFzc2lmaWVyPSJlY29yZTpFRGF0YVR5cGUgcGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5lbWYuZWNvcmUvbW9kZWwvRWNvcmUuZWNvcmUjLy9FRUxpc3QiPg0KKyAgICAgICAgPGVUeXBlQXJndW1lbnRzIGVDbGFzc2lmaWVyPSJlY29yZTpFQ2xhc3MgbW9kZWwuZWNvcmUjLy9EZWNvcmF0b3IiLz4NCisgICAgICA8L2VHZW5lcmljVHlwZT4NCisgICAgPC9lU3RydWN0dXJhbEZlYXR1cmVzPg0KKyAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0iaW5pdGlhbGl6ZWQiIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgcGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5lbWYuZWNvcmUvbW9kZWwvRWNvcmUuZWNvcmUjLy9FQm9vbGVhbiINCisgICAgICAgIHZvbGF0aWxlPSJ0cnVlIiB0cmFuc2llbnQ9InRydWUiIGRlZmF1bHRWYWx1ZUxpdGVyYWw9ImZhbHNlIi8+DQorICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFUmVmZXJlbmNlIiBuYW1lPSJwYXJ0aXRpb25lciIgZVR5cGU9ImVjb3JlOkVDbGFzcyBncmFwaC5lY29yZSMvL0dyYXBoUGFydGl0aW9uZXIiDQorICAgICAgICB0cmFuc2llbnQ9InRydWUiLz4NCisgIDwvZUNsYXNzaWZpZXJzPg0KKzwvZWNvcmU6RVBhY2thZ2U+DQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvbW9kZWwvdHJpZ2dlci5lY29yZSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL21vZGVsL3RyaWdnZXIuZWNvcmUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzFlYjk3MAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL21vZGVsL3RyaWdnZXIuZWNvcmUKQEAgLTAsMCArMSwxMSBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxlY29yZTpFUGFja2FnZSB4bWk6dmVyc2lvbj0iMi4wIgorICAgIHhtbG5zOnhtaT0iaHR0cDovL3d3dy5vbWcub3JnL1hNSSIgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIKKyAgICB4bWxuczplY29yZT0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9lbWYvMjAwMi9FY29yZSIgbmFtZT0idHJpZ2dlciIKKyAgICBuc1VSST0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvdHJpZ2dlci5lY29yZSIgbnNQcmVmaXg9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS50cmlnZ2VyIj4KKyAgPGVDbGFzc2lmaWVycyB4c2k6dHlwZT0iZWNvcmU6RUNsYXNzIiBuYW1lPSJUcmlnZ2VyIiBlU3VwZXJUeXBlcz0ibW9kZWwuZWNvcmUjLy9EZWNvcmF0b3IiPgorICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFUmVmZXJlbmNlIiBuYW1lPSJwcmVkaWNhdGUiIGVUeXBlPSJlY29yZTpFQ2xhc3MgcHJlZGljYXRlLmVjb3JlIy8vUHJlZGljYXRlIi8+CisgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVSZWZlcmVuY2UiIG5hbWU9ImFjdGlvbnMiIHVwcGVyQm91bmQ9Ii0xIgorICAgICAgICBlVHlwZT0iZWNvcmU6RUNsYXNzIG1vZGVsLmVjb3JlIy8vRGVjb3JhdG9yIi8+CisgIDwvZUNsYXNzaWZpZXJzPgorPC9lY29yZTpFUGFja2FnZT4KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL25vdGljZS5odG1sIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvbm90aWNlLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzZhZjk2NgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL25vdGljZS5odG1sCkBAIC0wLDAgKzEsNzkgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAvL0VOIj4KKzxodG1sPgorPGhlYWQ+Cis8bWV0YSBodHRwLWVxdWl2PUNvbnRlbnQtVHlwZSBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9aXNvLTg4NTktMSI+Cis8dGl0bGU+RWNsaXBzZS5vcmcgU29mdHdhcmUgVXNlciBBZ3JlZW1lbnQ8L3RpdGxlPgorPC9oZWFkPgorCis8Ym9keSBsYW5nPSJFTi1VUyIgbGluaz1ibHVlIHZsaW5rPXB1cnBsZT4KKzxoMj5FY2xpcHNlIEZvdW5kYXRpb24gU29mdHdhcmUgVXNlciBBZ3JlZW1lbnQ8L2gyPgorPHA+TWFyY2ggMTcsIDIwMDU8L3A+CisKKzxoMz5Vc2FnZSBPZiBDb250ZW50PC9oMz4KKworPHA+VEhFIEVDTElQU0UgRk9VTkRBVElPTiBNQUtFUyBBVkFJTEFCTEUgU09GVFdBUkUsIERPQ1VNRU5UQVRJT04sIElORk9STUFUSU9OIEFORC9PUiBPVEhFUiBNQVRFUklBTFMgRk9SIE9QRU4gU09VUkNFIFBST0pFQ1RTCisgICAoQ09MTEVDVElWRUxZICZxdW90O0NPTlRFTlQmcXVvdDspLiAgVVNFIE9GIFRIRSBDT05URU5UIElTIEdPVkVSTkVEIEJZIFRIRSBURVJNUyBBTkQgQ09ORElUSU9OUyBPRiBUSElTIEFHUkVFTUVOVCBBTkQvT1IgVEhFIFRFUk1TIEFORAorICAgQ09ORElUSU9OUyBPRiBMSUNFTlNFIEFHUkVFTUVOVFMgT1IgTk9USUNFUyBJTkRJQ0FURUQgT1IgUkVGRVJFTkNFRCBCRUxPVy4gIEJZIFVTSU5HIFRIRSBDT05URU5ULCBZT1UgQUdSRUUgVEhBVCBZT1VSIFVTRQorICAgT0YgVEhFIENPTlRFTlQgSVMgR09WRVJORUQgQlkgVEhJUyBBR1JFRU1FTlQgQU5EL09SIFRIRSBURVJNUyBBTkQgQ09ORElUSU9OUyBPRiBBTlkgQVBQTElDQUJMRSBMSUNFTlNFIEFHUkVFTUVOVFMgT1IKKyAgIE5PVElDRVMgSU5ESUNBVEVEIE9SIFJFRkVSRU5DRUQgQkVMT1cuICBJRiBZT1UgRE8gTk9UIEFHUkVFIFRPIFRIRSBURVJNUyBBTkQgQ09ORElUSU9OUyBPRiBUSElTIEFHUkVFTUVOVCBBTkQgVEhFIFRFUk1TIEFORAorICAgQ09ORElUSU9OUyBPRiBBTlkgQVBQTElDQUJMRSBMSUNFTlNFIEFHUkVFTUVOVFMgT1IgTk9USUNFUyBJTkRJQ0FURUQgT1IgUkVGRVJFTkNFRCBCRUxPVywgVEhFTiBZT1UgTUFZIE5PVCBVU0UgVEhFIENPTlRFTlQuPC9wPgorICAgCis8aDM+QXBwbGljYWJsZSBMaWNlbnNlczwvaDM+ICAgCisgICAKKzxwPlVubGVzcyBvdGhlcndpc2UgaW5kaWNhdGVkLCBhbGwgQ29udGVudCBtYWRlIGF2YWlsYWJsZSBieSB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uIGlzIHByb3ZpZGVkIHRvIHlvdSB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjAKKyAgICgmcXVvdDtFUEwmcXVvdDspLiAgQSBjb3B5IG9mIHRoZSBFUEwgaXMgcHJvdmlkZWQgd2l0aCB0aGlzIENvbnRlbnQgYW5kIGlzIGFsc28gYXZhaWxhYmxlIGF0IDxhIGhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sIj5odHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbDwvYT4uCisgICBGb3IgcHVycG9zZXMgb2YgdGhlIEVQTCwgJnF1b3Q7UHJvZ3JhbSZxdW90OyB3aWxsIG1lYW4gdGhlIENvbnRlbnQuPC9wPgorCis8cD5Db250ZW50IGluY2x1ZGVzLCBidXQgaXMgbm90IGxpbWl0ZWQgdG8sIHNvdXJjZSBjb2RlLCBvYmplY3QgY29kZSwgZG9jdW1lbnRhdGlvbiBhbmQgb3RoZXIgZmlsZXMgbWFpbnRhaW5lZCBpbiB0aGUgRWNsaXBzZS5vcmcgQ1ZTIHJlcG9zaXRvcnkgKCZxdW90O1JlcG9zaXRvcnkmcXVvdDspIGluIENWUworICAgbW9kdWxlcyAoJnF1b3Q7TW9kdWxlcyZxdW90OykgYW5kIG1hZGUgYXZhaWxhYmxlIGFzIGRvd25sb2FkYWJsZSBhcmNoaXZlcyAoJnF1b3Q7RG93bmxvYWRzJnF1b3Q7KS48L3A+CisgICAKKzx1bD4KKwk8bGk+Q29udGVudCBtYXkgYmUgc3RydWN0dXJlZCBhbmQgcGFja2FnZWQgaW50byBtb2R1bGVzIHRvIGZhY2lsaXRhdGUgZGVsaXZlcmluZywgZXh0ZW5kaW5nLCBhbmQgdXBncmFkaW5nIHRoZSBDb250ZW50LiAgVHlwaWNhbCBtb2R1bGVzIG1heSBpbmNsdWRlIHBsdWctaW5zICgmcXVvdDtQbHVnLWlucyZxdW90OyksIHBsdWctaW4gZnJhZ21lbnRzICgmcXVvdDtGcmFnbWVudHMmcXVvdDspLCBhbmQgZmVhdHVyZXMgKCZxdW90O0ZlYXR1cmVzJnF1b3Q7KS48L2xpPgorCTxsaT5FYWNoIFBsdWctaW4gb3IgRnJhZ21lbnQgbWF5IGJlIHBhY2thZ2VkIGFzIGEgc3ViLWRpcmVjdG9yeSBvciBKQVIgKEphdmEmdHJhZGU7IEFSY2hpdmUpIGluIGEgZGlyZWN0b3J5IG5hbWVkICZxdW90O3BsdWdpbnMmcXVvdDsuPC9saT4KKwk8bGk+QSBGZWF0dXJlIGlzIGEgYnVuZGxlIG9mIG9uZSBvciBtb3JlIFBsdWctaW5zIGFuZC9vciBGcmFnbWVudHMgYW5kIGFzc29jaWF0ZWQgbWF0ZXJpYWwuICBFYWNoIEZlYXR1cmUgbWF5IGJlIHBhY2thZ2VkIGFzIGEgc3ViLWRpcmVjdG9yeSBpbiBhIGRpcmVjdG9yeSBuYW1lZCAmcXVvdDtmZWF0dXJlcyZxdW90Oy4gIFdpdGhpbiBhIEZlYXR1cmUsIGZpbGVzIG5hbWVkICZxdW90O2ZlYXR1cmUueG1sJnF1b3Q7IG1heSBjb250YWluIGEgbGlzdCBvZiB0aGUgbmFtZXMgYW5kIHZlcnNpb24gbnVtYmVycyBvZiB0aGUgUGx1Zy1pbnMKKyAgICAgIGFuZC9vciBGcmFnbWVudHMgYXNzb2NpYXRlZCB3aXRoIHRoYXQgRmVhdHVyZS48L2xpPgorCTxsaT5GZWF0dXJlcyBtYXkgYWxzbyBpbmNsdWRlIG90aGVyIEZlYXR1cmVzICgmcXVvdDtJbmNsdWRlZCBGZWF0dXJlcyZxdW90OykuIFdpdGhpbiBhIEZlYXR1cmUsIGZpbGVzIG5hbWVkICZxdW90O2ZlYXR1cmUueG1sJnF1b3Q7IG1heSBjb250YWluIGEgbGlzdCBvZiB0aGUgbmFtZXMgYW5kIHZlcnNpb24gbnVtYmVycyBvZiBJbmNsdWRlZCBGZWF0dXJlcy48L2xpPgorPC91bD4gICAKKyAKKzxwPlRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBnb3Zlcm5pbmcgUGx1Zy1pbnMgYW5kIEZyYWdtZW50cyBzaG91bGQgYmUgY29udGFpbmVkIGluIGZpbGVzIG5hbWVkICZxdW90O2Fib3V0Lmh0bWwmcXVvdDsgKCZxdW90O0Fib3V0cyZxdW90OykuIFRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBnb3Zlcm5pbmcgRmVhdHVyZXMgYW5kCitJbmNsdWRlZCBGZWF0dXJlcyBzaG91bGQgYmUgY29udGFpbmVkIGluIGZpbGVzIG5hbWVkICZxdW90O2xpY2Vuc2UuaHRtbCZxdW90OyAoJnF1b3Q7RmVhdHVyZSBMaWNlbnNlcyZxdW90OykuICBBYm91dHMgYW5kIEZlYXR1cmUgTGljZW5zZXMgbWF5IGJlIGxvY2F0ZWQgaW4gYW55IGRpcmVjdG9yeSBvZiBhIERvd25sb2FkIG9yIE1vZHVsZQoraW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG8gdGhlIGZvbGxvd2luZyBsb2NhdGlvbnM6PC9wPgorCis8dWw+CisJPGxpPlRoZSB0b3AtbGV2ZWwgKHJvb3QpIGRpcmVjdG9yeTwvbGk+CisJPGxpPlBsdWctaW4gYW5kIEZyYWdtZW50IGRpcmVjdG9yaWVzPC9saT4KKwk8bGk+SW5zaWRlIFBsdWctaW5zIGFuZCBGcmFnbWVudHMgcGFja2FnZWQgYXMgSkFSczwvbGk+CisJPGxpPlN1Yi1kaXJlY3RvcmllcyBvZiB0aGUgZGlyZWN0b3J5IG5hbWVkICZxdW90O3NyYyZxdW90OyBvZiBjZXJ0YWluIFBsdWctaW5zPC9saT4KKwk8bGk+RmVhdHVyZSBkaXJlY3RvcmllczwvbGk+Cis8L3VsPgorCQkKKzxwPk5vdGU6IGlmIGEgRmVhdHVyZSBtYWRlIGF2YWlsYWJsZSBieSB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uIGlzIGluc3RhbGxlZCB1c2luZyB0aGUgRWNsaXBzZSBVcGRhdGUgTWFuYWdlciwgeW91IG11c3QgYWdyZWUgdG8gYSBsaWNlbnNlICgmcXVvdDtGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlJnF1b3Q7KSBkdXJpbmcgdGhlCitpbnN0YWxsYXRpb24gcHJvY2Vzcy4gIElmIHRoZSBGZWF0dXJlIGNvbnRhaW5zIEluY2x1ZGVkIEZlYXR1cmVzLCB0aGUgRmVhdHVyZSBVcGRhdGUgTGljZW5zZSBzaG91bGQgZWl0aGVyIHByb3ZpZGUgeW91IHdpdGggdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIGdvdmVybmluZyB0aGUgSW5jbHVkZWQgRmVhdHVyZXMgb3IKK2luZm9ybSB5b3Ugd2hlcmUgeW91IGNhbiBsb2NhdGUgdGhlbS4gIEZlYXR1cmUgVXBkYXRlIExpY2Vuc2VzIG1heSBiZSBmb3VuZCBpbiB0aGUgJnF1b3Q7bGljZW5zZSZxdW90OyBwcm9wZXJ0eSBvZiBmaWxlcyBuYW1lZCAmcXVvdDtmZWF0dXJlLnByb3BlcnRpZXMmcXVvdDsgZm91bmQgd2l0aGluIGEgRmVhdHVyZS4KK1N1Y2ggQWJvdXRzLCBGZWF0dXJlIExpY2Vuc2VzLCBhbmQgRmVhdHVyZSBVcGRhdGUgTGljZW5zZXMgY29udGFpbiB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgKG9yIHJlZmVyZW5jZXMgdG8gc3VjaCB0ZXJtcyBhbmQgY29uZGl0aW9ucykgdGhhdCBnb3Zlcm4geW91ciB1c2Ugb2YgdGhlIGFzc29jaWF0ZWQgQ29udGVudCBpbgordGhhdCBkaXJlY3RvcnkuPC9wPgorCis8cD5USEUgQUJPVVRTLCBGRUFUVVJFIExJQ0VOU0VTLCBBTkQgRkVBVFVSRSBVUERBVEUgTElDRU5TRVMgTUFZIFJFRkVSIFRPIFRIRSBFUEwgT1IgT1RIRVIgTElDRU5TRSBBR1JFRU1FTlRTLCBOT1RJQ0VTIE9SIFRFUk1TIEFORCBDT05ESVRJT05TLiAgU09NRSBPRiBUSEVTRQorT1RIRVIgTElDRU5TRSBBR1JFRU1FTlRTIE1BWSBJTkNMVURFIChCVVQgQVJFIE5PVCBMSU1JVEVEIFRPKTo8L3A+CisKKzx1bD4KKwk8bGk+Q29tbW9uIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4wIChhdmFpbGFibGUgYXQgPGEgaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9jcGwtdjEwLmh0bWwiPmh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvY3BsLXYxMC5odG1sPC9hPik8L2xpPgorCTxsaT5BcGFjaGUgU29mdHdhcmUgTGljZW5zZSAxLjEgKGF2YWlsYWJsZSBhdCA8YSBocmVmPSJodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRSI+aHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0U8L2E+KTwvbGk+CisJPGxpPkFwYWNoZSBTb2Z0d2FyZSBMaWNlbnNlIDIuMCAoYXZhaWxhYmxlIGF0IDxhIGhyZWY9Imh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMCI+aHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wPC9hPik8L2xpPgorCTxsaT5JQk0gUHVibGljIExpY2Vuc2UgMS4wIChhdmFpbGFibGUgYXQgPGEgaHJlZj0iaHR0cDovL29zcy5zb2Z0d2FyZS5pYm0uY29tL2RldmVsb3BlcndvcmtzL29wZW5zb3VyY2UvbGljZW5zZTEwLmh0bWwiPmh0dHA6Ly9vc3Muc29mdHdhcmUuaWJtLmNvbS9kZXZlbG9wZXJ3b3Jrcy9vcGVuc291cmNlL2xpY2Vuc2UxMC5odG1sPC9hPik8L2xpPgkKKwk8bGk+TWV0cm8gTGluayBQdWJsaWMgTGljZW5zZSAxLjAwIChhdmFpbGFibGUgYXQgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuZ3JvdXAub3JnL29wZW5tb3RpZi9zdXBwb3J0ZXJzL21ldHJvbGluay9saWNlbnNlLmh0bWwiPmh0dHA6Ly93d3cub3Blbmdyb3VwLm9yZy9vcGVubW90aWYvc3VwcG9ydGVycy9tZXRyb2xpbmsvbGljZW5zZS5odG1sPC9hPik8L2xpPgorCTxsaT5Nb3ppbGxhIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4xIChhdmFpbGFibGUgYXQgPGEgaHJlZj0iaHR0cDovL3d3dy5tb3ppbGxhLm9yZy9NUEwvTVBMLTEuMS5odG1sIj5odHRwOi8vd3d3Lm1vemlsbGEub3JnL01QTC9NUEwtMS4xLmh0bWw8L2E+KTwvbGk+Cis8L3VsPgorCis8cD5JVCBJUyBZT1VSIE9CTElHQVRJT04gVE8gUkVBRCBBTkQgQUNDRVBUIEFMTCBTVUNIIFRFUk1TIEFORCBDT05ESVRJT05TIFBSSU9SIFRPIFVTRSBPRiBUSEUgQ09OVEVOVC4gIElmIG5vIEFib3V0LCBGZWF0dXJlIExpY2Vuc2UsIG9yIEZlYXR1cmUgVXBkYXRlIExpY2Vuc2UgaXMgcHJvdmlkZWQsIHBsZWFzZQorY29udGFjdCB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uIHRvIGRldGVybWluZSB3aGF0IHRlcm1zIGFuZCBjb25kaXRpb25zIGdvdmVybiB0aGF0IHBhcnRpY3VsYXIgQ29udGVudC48L3A+CisKKzxoMz5DcnlwdG9ncmFwaHk8L2gzPgorCis8cD5Db250ZW50IG1heSBjb250YWluIGVuY3J5cHRpb24gc29mdHdhcmUuIFRoZSBjb3VudHJ5IGluIHdoaWNoIHlvdSBhcmUgY3VycmVudGx5IG1heSBoYXZlIHJlc3RyaWN0aW9ucyBvbiB0aGUgaW1wb3J0LCBwb3NzZXNzaW9uLCBhbmQgdXNlLCBhbmQvb3IgcmUtZXhwb3J0IHRvCisgICBhbm90aGVyIGNvdW50cnksIG9mIGVuY3J5cHRpb24gc29mdHdhcmUuIEJFRk9SRSB1c2luZyBhbnkgZW5jcnlwdGlvbiBzb2Z0d2FyZSwgcGxlYXNlIGNoZWNrIHRoZSBjb3VudHJ5J3MgbGF3cywgcmVndWxhdGlvbnMgYW5kIHBvbGljaWVzIGNvbmNlcm5pbmcgdGhlIGltcG9ydCwKKyAgIHBvc3Nlc3Npb24sIG9yIHVzZSwgYW5kIHJlLWV4cG9ydCBvZiBlbmNyeXB0aW9uIHNvZnR3YXJlLCB0byBzZWUgaWYgdGhpcyBpcyBwZXJtaXR0ZWQuPC9wPgorICAgCis8c21hbGw+SmF2YSBhbmQgYWxsIEphdmEtYmFzZWQgdHJhZGVtYXJrcyBhcmUgdHJhZGVtYXJrcyBvZiBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuIGluIHRoZSBVbml0ZWQgU3RhdGVzLCBvdGhlciBjb3VudHJpZXMsIG9yIGJvdGguPC9zbWFsbD4gICAKKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3BsdWdpbi5wcm9wZXJ0aWVzIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvcGx1Z2luLnByb3BlcnRpZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTUwOTFmMwotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3BsdWdpbi5wcm9wZXJ0aWVzCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3BsdWdpbi54bWwgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9wbHVnaW4ueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM2NmM0YmIKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9wbHVnaW4ueG1sCkBAIC0wLDAgKzEsMjQwIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPD9lY2xpcHNlIHZlcnNpb249IjMuMiI/PgorPHBsdWdpbj4KKyAgIDxleHRlbnNpb24tcG9pbnQgaWQ9ImdyYXBoIiBuYW1lPSIlRVBfR3JhcGgiIHNjaGVtYT0ic2NoZW1hL2dyYXBoLmV4c2QiLz4KKyAgIDxleHRlbnNpb24tcG9pbnQgaWQ9Im1vZGVsIiBuYW1lPSIlRVBfTW9kZWwiIHNjaGVtYT0ic2NoZW1hL21vZGVsLmV4c2QiLz4KKyAgIDxleHRlbnNpb24tcG9pbnQgaWQ9InNjZW5hcmlvIiBuYW1lPSIlRVBfU2NlbmFyaW8iIHNjaGVtYT0ic2NoZW1hL3NjZW5hcmlvLmV4c2QiLz4KKyAgIDxleHRlbnNpb24tcG9pbnQgaWQ9InNlcXVlbmNlciIgbmFtZT0iJUVQX1NlcXVlbmNlciIgc2NoZW1hPSJzY2hlbWEvc2VxdWVuY2VyLmV4c2QiLz4KKyAgIDxleHRlbnNpb24tcG9pbnQgaWQ9ImRlY29yYXRvciIgbmFtZT0iJUVQX0RlY29yYXRvciIgc2NoZW1hPSJzY2hlbWEvZGVjb3JhdG9yLmV4c2QiLz4KKyAgIDxleHRlbnNpb24tcG9pbnQgaWQ9InRyaWdnZXIiIG5hbWU9IiVFUF9UcmlnZ2VyIiBzY2hlbWE9InNjaGVtYS90cmlnZ2VyLmV4c2QiLz4KKyAgIDxleHRlbnNpb24tcG9pbnQgaWQ9InByZWRpY2F0ZSIgbmFtZT0iJUVQX1ByZWRpY2F0ZSIgc2NoZW1hPSJzY2hlbWEvcHJlZGljYXRlLmV4c2QiLz4KKyAgIDxleHRlbnNpb24tcG9pbnQgaWQ9ImV4cGVyaW1lbnQiIG5hbWU9IiVFUF9FeHBlcmltZW50IiBzY2hlbWE9InNjaGVtYS9leHBlcmltZW50LmV4c2QiLz4KKyAgIDxleHRlbnNpb24tcG9pbnQgaWQ9InNvbHZlciIgbmFtZT0iJUVQX1NvbHZlciIgc2NoZW1hPSJzY2hlbWEvc29sdmVyLmV4c2QiLz4KKyAgIDxleHRlbnNpb24tcG9pbnQgaWQ9ImxvZ2dlciIgbmFtZT0iJUVQX0xvZ2dlciIgc2NoZW1hPSJzY2hlbWEvbG9nZ2VyLmV4c2QiLz4KKyAKKyAKKyAgIDxleHRlbnNpb24gcG9pbnQ9Im9yZy5lY2xpcHNlLmVtZi5lZGl0Lml0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3JpZXMiPgorICAgICAgPGZhY3RvcnkKKyAgICAgICAgICAgIHVyaT0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvY29tbW9uLmVjb3JlIgorICAgICAgICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24ucHJvdmlkZXIuQ29tbW9uSXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkiCisgICAgICAgICAgICBzdXBwb3J0ZWRUeXBlcz0KKyAgICAgICAgICAgICAgIm9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklFZGl0aW5nRG9tYWluSXRlbVByb3ZpZGVyCisgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JU3RydWN0dXJlZEl0ZW1Db250ZW50UHJvdmlkZXIKKyAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklUcmVlSXRlbUNvbnRlbnRQcm92aWRlcgorICAgICAgICAgICAgICAgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1MYWJlbFByb3ZpZGVyCisgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbVByb3BlcnR5U291cmNlIi8+CisgICA8L2V4dGVuc2lvbj4KKworICAgPGV4dGVuc2lvbiBwb2ludD0ib3JnLmVjbGlwc2UuZW1mLmVkaXQuaXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcmllcyI+CisgICAgICA8ZmFjdG9yeQorICAgICAgICAgICAgdXJpPSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9leHBlcmltZW50LmVjb3JlIgorICAgICAgICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5leHBlcmltZW50LnByb3ZpZGVyLkV4cGVyaW1lbnRJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSIKKyAgICAgICAgICAgIHN1cHBvcnRlZFR5cGVzPQorICAgICAgICAgICAgICAib3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUVkaXRpbmdEb21haW5JdGVtUHJvdmlkZXIKKyAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklTdHJ1Y3R1cmVkSXRlbUNvbnRlbnRQcm92aWRlcgorICAgICAgICAgICAgICAgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVRyZWVJdGVtQ29udGVudFByb3ZpZGVyCisgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbUxhYmVsUHJvdmlkZXIKKyAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtUHJvcGVydHlTb3VyY2UiLz4KKyAgIDwvZXh0ZW5zaW9uPgorCisgICA8ZXh0ZW5zaW9uIHBvaW50PSJvcmcuZWNsaXBzZS5lbWYuZWRpdC5pdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yaWVzIj4KKyAgICAgIDxmYWN0b3J5CisgICAgICAgICAgICB1cmk9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIgorICAgICAgICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5wcm92aWRlci5HcmFwaEl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5IgorICAgICAgICAgICAgc3VwcG9ydGVkVHlwZXM9CisgICAgICAgICAgICAgICJvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JRWRpdGluZ0RvbWFpbkl0ZW1Qcm92aWRlcgorICAgICAgICAgICAgICAgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVN0cnVjdHVyZWRJdGVtQ29udGVudFByb3ZpZGVyCisgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JVHJlZUl0ZW1Db250ZW50UHJvdmlkZXIKKyAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtTGFiZWxQcm92aWRlcgorICAgICAgICAgICAgICAgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1Qcm9wZXJ0eVNvdXJjZSIvPgorICAgPC9leHRlbnNpb24+CisKKyAgIDxleHRlbnNpb24gcG9pbnQ9Im9yZy5lY2xpcHNlLmVtZi5lZGl0Lml0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3JpZXMiPgorICAgICAgPGZhY3RvcnkKKyAgICAgICAgICAgIHVyaT0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvbW9kZWwuZWNvcmUiCisgICAgICAgICAgICBjbGFzcz0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLnByb3ZpZGVyLk1vZGVsSXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkiCisgICAgICAgICAgICBzdXBwb3J0ZWRUeXBlcz0KKyAgICAgICAgICAgICAgIm9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklFZGl0aW5nRG9tYWluSXRlbVByb3ZpZGVyCisgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JU3RydWN0dXJlZEl0ZW1Db250ZW50UHJvdmlkZXIKKyAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklUcmVlSXRlbUNvbnRlbnRQcm92aWRlcgorICAgICAgICAgICAgICAgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1MYWJlbFByb3ZpZGVyCisgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbVByb3BlcnR5U291cmNlIi8+CisgICA8L2V4dGVuc2lvbj4KKworICAgPGV4dGVuc2lvbiBwb2ludD0ib3JnLmVjbGlwc2UuZW1mLmVkaXQuaXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcmllcyI+CisgICAgICA8ZmFjdG9yeQorICAgICAgICAgICAgdXJpPSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9tb2RpZmllci5lY29yZSIKKyAgICAgICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIucHJvdmlkZXIuTW9kaWZpZXJJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSIKKyAgICAgICAgICAgIHN1cHBvcnRlZFR5cGVzPQorICAgICAgICAgICAgICAib3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUVkaXRpbmdEb21haW5JdGVtUHJvdmlkZXIKKyAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklTdHJ1Y3R1cmVkSXRlbUNvbnRlbnRQcm92aWRlcgorICAgICAgICAgICAgICAgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVRyZWVJdGVtQ29udGVudFByb3ZpZGVyCisgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbUxhYmVsUHJvdmlkZXIKKyAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtUHJvcGVydHlTb3VyY2UiLz4KKyAgIDwvZXh0ZW5zaW9uPgorCisgICA8ZXh0ZW5zaW9uIHBvaW50PSJvcmcuZWNsaXBzZS5lbWYuZWRpdC5pdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yaWVzIj4KKyAgICAgIDxmYWN0b3J5CisgICAgICAgICAgICB1cmk9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3ByZWRpY2F0ZS5lY29yZSIKKyAgICAgICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlLnByb3ZpZGVyLlByZWRpY2F0ZUl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5IgorICAgICAgICAgICAgc3VwcG9ydGVkVHlwZXM9CisgICAgICAgICAgICAgICJvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JRWRpdGluZ0RvbWFpbkl0ZW1Qcm92aWRlcgorICAgICAgICAgICAgICAgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVN0cnVjdHVyZWRJdGVtQ29udGVudFByb3ZpZGVyCisgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JVHJlZUl0ZW1Db250ZW50UHJvdmlkZXIKKyAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtTGFiZWxQcm92aWRlcgorICAgICAgICAgICAgICAgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1Qcm9wZXJ0eVNvdXJjZSIvPgorICAgPC9leHRlbnNpb24+CisKKyAgIDxleHRlbnNpb24gcG9pbnQ9Im9yZy5lY2xpcHNlLmVtZi5lZGl0Lml0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3JpZXMiPgorICAgICAgPGZhY3RvcnkKKyAgICAgICAgICAgIHVyaT0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvc2NlbmFyaW8uZWNvcmUiCisgICAgICAgICAgICBjbGFzcz0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNjZW5hcmlvLnByb3ZpZGVyLlNjZW5hcmlvSXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkiCisgICAgICAgICAgICBzdXBwb3J0ZWRUeXBlcz0KKyAgICAgICAgICAgICAgIm9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklFZGl0aW5nRG9tYWluSXRlbVByb3ZpZGVyCisgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JU3RydWN0dXJlZEl0ZW1Db250ZW50UHJvdmlkZXIKKyAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklUcmVlSXRlbUNvbnRlbnRQcm92aWRlcgorICAgICAgICAgICAgICAgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1MYWJlbFByb3ZpZGVyCisgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbVByb3BlcnR5U291cmNlIi8+CisgICA8L2V4dGVuc2lvbj4KKworICAgPGV4dGVuc2lvbiBwb2ludD0ib3JnLmVjbGlwc2UuZW1mLmVkaXQuaXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcmllcyI+CisgICAgICA8ZmFjdG9yeQorICAgICAgICAgICAgdXJpPSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9zZXF1ZW5jZXIuZWNvcmUiCisgICAgICAgICAgICBjbGFzcz0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNlcXVlbmNlci5wcm92aWRlci5TZXF1ZW5jZXJJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSIKKyAgICAgICAgICAgIHN1cHBvcnRlZFR5cGVzPQorICAgICAgICAgICAgICAib3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUVkaXRpbmdEb21haW5JdGVtUHJvdmlkZXIKKyAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklTdHJ1Y3R1cmVkSXRlbUNvbnRlbnRQcm92aWRlcgorICAgICAgICAgICAgICAgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVRyZWVJdGVtQ29udGVudFByb3ZpZGVyCisgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbUxhYmVsUHJvdmlkZXIKKyAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtUHJvcGVydHlTb3VyY2UiLz4KKyAgIDwvZXh0ZW5zaW9uPgorCisgICA8ZXh0ZW5zaW9uIHBvaW50PSJvcmcuZWNsaXBzZS5lbWYuZWRpdC5pdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yaWVzIj4KKyAgICAgIDxmYWN0b3J5CisgICAgICAgICAgICB1cmk9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3RyaWdnZXIuZWNvcmUiCisgICAgICAgICAgICBjbGFzcz0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnRyaWdnZXIucHJvdmlkZXIuVHJpZ2dlckl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5IgorICAgICAgICAgICAgc3VwcG9ydGVkVHlwZXM9CisgICAgICAgICAgICAgICJvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JRWRpdGluZ0RvbWFpbkl0ZW1Qcm92aWRlcgorICAgICAgICAgICAgICAgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVN0cnVjdHVyZWRJdGVtQ29udGVudFByb3ZpZGVyCisgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JVHJlZUl0ZW1Db250ZW50UHJvdmlkZXIKKyAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtTGFiZWxQcm92aWRlcgorICAgICAgICAgICAgICAgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1Qcm9wZXJ0eVNvdXJjZSIvPgorICAgPC9leHRlbnNpb24+CisgICA8ZXh0ZW5zaW9uCisgICAgICAgICBwb2ludD0ib3JnLmVjbGlwc2UuZW1mLmVkaXQuaXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcmllcyI+CisgICAgICA8ZmFjdG9yeQorICAgICAgICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zb2x2ZXIucHJvdmlkZXIuU29sdmVySXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkiCisgICAgICAgICAgICB1cmk9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3NvbHZlci5lY29yZSIKKyAgICAgICAgICAgIHN1cHBvcnRlZFR5cGVzPQorICAgICAgICAgICAgICAib3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUVkaXRpbmdEb21haW5JdGVtUHJvdmlkZXIKKyAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklTdHJ1Y3R1cmVkSXRlbUNvbnRlbnRQcm92aWRlcgorICAgICAgICAgICAgICAgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVRyZWVJdGVtQ29udGVudFByb3ZpZGVyCisgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbUxhYmVsUHJvdmlkZXIKKyAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtUHJvcGVydHlTb3VyY2UiPgorICAgICAgPC9mYWN0b3J5PgorICAgPC9leHRlbnNpb24+CisgICA8ZXh0ZW5zaW9uCisgICAgICAgICBwb2ludD0ib3JnLmVjbGlwc2UuZW1mLmVkaXQuaXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcmllcyI+CisgICAgICA8ZmFjdG9yeQorICAgICAgICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5sb2dnZXIucHJvdmlkZXIuTG9nZ2VySXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkiCisgICAgICAgICAgICB1cmk9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2xvZ2dlci5lY29yZSIKKyAgICAgICAgICAgIHN1cHBvcnRlZFR5cGVzPQorICAgICAgICAgICAgICAib3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUVkaXRpbmdEb21haW5JdGVtUHJvdmlkZXIKKyAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklTdHJ1Y3R1cmVkSXRlbUNvbnRlbnRQcm92aWRlcgorICAgICAgICAgICAgICAgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVRyZWVJdGVtQ29udGVudFByb3ZpZGVyCisgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbUxhYmVsUHJvdmlkZXIKKyAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtUHJvcGVydHlTb3VyY2UiPgorICAgICAgPC9mYWN0b3J5PgorICAgPC9leHRlbnNpb24+CisgCisgICA8ZXh0ZW5zaW9uIHBvaW50PSJvcmcuZWNsaXBzZS5lbWYuZWNvcmUuZ2VuZXJhdGVkX3BhY2thZ2UiPgorICAgICAgPHBhY2thZ2UKKyAgICAgICAgICAgIHVyaT0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvY29tbW9uLmVjb3JlIgorICAgICAgICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uQ29tbW9uUGFja2FnZSIKKyAgICAgICAgICAgIGdlbk1vZGVsPSJtb2RlbC9jb3JlLmdlbm1vZGVsIi8+CisgICA8L2V4dGVuc2lvbj4KKworICAgPGV4dGVuc2lvbiBwb2ludD0ib3JnLmVjbGlwc2UuZW1mLmVjb3JlLmdlbmVyYXRlZF9wYWNrYWdlIj4KKyAgICAgIDxwYWNrYWdlCisgICAgICAgICAgICB1cmk9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2V4cGVyaW1lbnQuZWNvcmUiCisgICAgICAgICAgICBjbGFzcz0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmV4cGVyaW1lbnQuRXhwZXJpbWVudFBhY2thZ2UiCisgICAgICAgICAgICBnZW5Nb2RlbD0ibW9kZWwvY29yZS5nZW5tb2RlbCIvPgorICAgPC9leHRlbnNpb24+CisKKyAgIDxleHRlbnNpb24gcG9pbnQ9Im9yZy5lY2xpcHNlLmVtZi5lY29yZS5nZW5lcmF0ZWRfcGFja2FnZSI+CisgICAgICA8cGFja2FnZQorICAgICAgICAgICAgdXJpPSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIKKyAgICAgICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguR3JhcGhQYWNrYWdlIgorICAgICAgICAgICAgZ2VuTW9kZWw9Im1vZGVsL2NvcmUuZ2VubW9kZWwiLz4KKyAgIDwvZXh0ZW5zaW9uPgorCisgICA8ZXh0ZW5zaW9uIHBvaW50PSJvcmcuZWNsaXBzZS5lbWYuZWNvcmUuZ2VuZXJhdGVkX3BhY2thZ2UiPgorICAgICAgPHBhY2thZ2UKKyAgICAgICAgICAgIHVyaT0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvbW9kZWwuZWNvcmUiCisgICAgICAgICAgICBjbGFzcz0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLk1vZGVsUGFja2FnZSIKKyAgICAgICAgICAgIGdlbk1vZGVsPSJtb2RlbC9jb3JlLmdlbm1vZGVsIi8+CisgICA8L2V4dGVuc2lvbj4KKworICAgPGV4dGVuc2lvbiBwb2ludD0ib3JnLmVjbGlwc2UuZW1mLmVjb3JlLmdlbmVyYXRlZF9wYWNrYWdlIj4KKyAgICAgIDxwYWNrYWdlCisgICAgICAgICAgICB1cmk9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL21vZGlmaWVyLmVjb3JlIgorICAgICAgICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5Nb2RpZmllclBhY2thZ2UiCisgICAgICAgICAgICBnZW5Nb2RlbD0ibW9kZWwvY29yZS5nZW5tb2RlbCIvPgorICAgPC9leHRlbnNpb24+CisKKyAgIDxleHRlbnNpb24gcG9pbnQ9Im9yZy5lY2xpcHNlLmVtZi5lY29yZS5nZW5lcmF0ZWRfcGFja2FnZSI+CisgICAgICA8cGFja2FnZQorICAgICAgICAgICAgdXJpPSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9wcmVkaWNhdGUuZWNvcmUiCisgICAgICAgICAgICBjbGFzcz0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZS5QcmVkaWNhdGVQYWNrYWdlIgorICAgICAgICAgICAgZ2VuTW9kZWw9Im1vZGVsL2NvcmUuZ2VubW9kZWwiLz4KKyAgIDwvZXh0ZW5zaW9uPgorCisgICA8ZXh0ZW5zaW9uIHBvaW50PSJvcmcuZWNsaXBzZS5lbWYuZWNvcmUuZ2VuZXJhdGVkX3BhY2thZ2UiPgorICAgICAgPHBhY2thZ2UKKyAgICAgICAgICAgIHVyaT0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvc2NlbmFyaW8uZWNvcmUiCisgICAgICAgICAgICBjbGFzcz0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNjZW5hcmlvLlNjZW5hcmlvUGFja2FnZSIKKyAgICAgICAgICAgIGdlbk1vZGVsPSJtb2RlbC9jb3JlLmdlbm1vZGVsIi8+CisgICA8L2V4dGVuc2lvbj4KKworICAgPGV4dGVuc2lvbiBwb2ludD0ib3JnLmVjbGlwc2UuZW1mLmVjb3JlLmdlbmVyYXRlZF9wYWNrYWdlIj4KKyAgICAgIDxwYWNrYWdlCisgICAgICAgICAgICB1cmk9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3NlcXVlbmNlci5lY29yZSIKKyAgICAgICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2VxdWVuY2VyLlNlcXVlbmNlclBhY2thZ2UiCisgICAgICAgICAgICBnZW5Nb2RlbD0ibW9kZWwvY29yZS5nZW5tb2RlbCIvPgorICAgPC9leHRlbnNpb24+CisKKyAgIDxleHRlbnNpb24gcG9pbnQ9Im9yZy5lY2xpcHNlLmVtZi5lY29yZS5nZW5lcmF0ZWRfcGFja2FnZSI+CisgICAgICA8cGFja2FnZQorICAgICAgICAgICAgdXJpPSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS90cmlnZ2VyLmVjb3JlIgorICAgICAgICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS50cmlnZ2VyLlRyaWdnZXJQYWNrYWdlIgorICAgICAgICAgICAgZ2VuTW9kZWw9Im1vZGVsL2NvcmUuZ2VubW9kZWwiLz4KKyAgIDwvZXh0ZW5zaW9uPgorICAgPGV4dGVuc2lvbgorICAgICAgICAgcG9pbnQ9Im9yZy5lY2xpcHNlLmVtZi5lY29yZS5nZW5lcmF0ZWRfcGFja2FnZSI+CisgICAgICA8cGFja2FnZQorICAgICAgICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zb2x2ZXIuU29sdmVyUGFja2FnZSIKKyAgICAgICAgICAgIHVyaT0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvc29sdmVyLmVjb3JlIgorICAgICAgICAgICAgZ2VuTW9kZWw9Im1vZGVsL3NvbHZlci5nZW5tb2RlbCI+CisgICAgICA8L3BhY2thZ2U+CisgICA8L2V4dGVuc2lvbj4KKyAgIDxleHRlbnNpb24KKyAgICAgICAgIHBvaW50PSJvcmcuZWNsaXBzZS5lbWYuZWNvcmUuZ2VuZXJhdGVkX3BhY2thZ2UiPgorICAgICAgPHBhY2thZ2UKKyAgICAgICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUubG9nZ2VyLkxvZ2dlclBhY2thZ2UiCisgICAgICAgICAgICB1cmk9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2xvZ2dlci5lY29yZSIKKyAgICAgICAgICAgIGdlbk1vZGVsPSJtb2RlbC9sb2dnZXIuZ2VubW9kZWwiPgorICAgICAgPC9wYWNrYWdlPgorICAgPC9leHRlbnNpb24+CisKKworIAk8ZXh0ZW5zaW9uCisgICAgICAgIHBvaW50PSJvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuYWRhcHRlcnMiPgorICAgICAgICAgIDxmYWN0b3J5IAorICAgICAgICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLnN0ZW0uYWRhcHRlcnMuZmlsZS5JZGVudGlmaWFibGVGaWxlQWRhcHRlckZhY3RvcnkiIAorICAgICAgICAgICAgYWRhcHRhYmxlVHlwZT0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5JZGVudGlmaWFibGUiPgorICAgICAgICAgICAgPGFkYXB0ZXIgdHlwZT0ib3JnLmVjbGlwc2Uuc3RlbS5hZGFwdGVycy5maWxlLkZpbGUiLz4KKyAgICAgICAgIDwvZmFjdG9yeT4KKyAgICAgIDwvZXh0ZW5zaW9uPgorICAgICAgCisgICAgICAKKzwvcGx1Z2luPgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvcGx1Z2luX2RlLnByb3BlcnRpZXMgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9wbHVnaW5fZGUucHJvcGVydGllcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNGJmNTliCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvcGx1Z2luX2RlLnByb3BlcnRpZXMKQEAgLTAsMCArMSw0OTYgQEAKKyMvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIyAqIENvcHlyaWdodCAoYykgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyMgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisjICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisjICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyMgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorIyAqCisjICogQ29udHJpYnV0b3JzOgorIyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisjIFRvIGNvZGUgZGV2ZWxvcGVyOgorIyAgIERvIE5PVCBjaGFuZ2UgdGhlIHByb3BlcnRpZXMgYmV0d2VlbiB0aGlzIGxpbmUgYW5kIHRoZQorIyAgICIlJSUgRU5EIE9GIFRSQU5TTEFURUQgUFJPUEVSVElFUyAlJSUiIGxpbmUuCisjICAgTWFrZSBhIG5ldyBwcm9wZXJ0eSBuYW1lLCBhcHBlbmQgdG8gdGhlIGVuZCBvZiB0aGUgZmlsZSBhbmQgY2hhbmdlCisjICAgdGhlIGNvZGUgdG8gdXNlIHRoZSBuZXcgcHJvcGVydHkuCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyMgJSUlIEVORCBPRiBUUkFOU0xBVEVEIFBST1BFUlRJRVMgJSUlCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK3BsdWdpbk5hbWU9U1RFTSBLZXJuCitwcm92aWRlck5hbWU9RWNsaXBzZS5vcmcKKworIyBXaXphcmRzCitfVUlfTmV3X1NURU1fV2l6YXJkX0NhdGVnb3J5PVNURU0KKworIyBTVEVNIE5ldyBQcm9qZWN0IFdpemFyZAorCitfVUlfTmV3X1NURU1fUHJvamVjdF9XaXphcmQ9U1RFTSBQcm9qZWt0CisKKyMgRXh0ZW5zaW9uIHBvaW50cworRVBfR3JhcGg9U1RFTSBHcmFwaC1FcndlaXRlcnVuZ3NwdW5rdAorRVBfTW9kZWw9U1RFTSBNb2RlbGwtRXJ3ZWl0ZXJ1bmdzcHVua3QKK0VQX1NjZW5hcmlvPVNURU0gU3plbmFyaW8tRXJ3ZWl0ZXJ1bmdzcHVua3QKK0VQX1NlcXVlbmNlcj1TVEVNIFNlcXVlbnplci1FcndlaXRlcnVuZ3NwdW5rdAorRVBfRGVjb3JhdG9yPVNURU0gRGVrb3JpZXJlci1FcndlaXRlcnVuZ3NwdW5rdAorRVBfVHJpZ2dlcj1TVEVNIEF1c2xcdTAwZjZzZXItRXJ3ZWl0ZXJ1bmdzcHVua3QKK0VQX1ByZWRpY2F0ZT1TVEVNIEVpZ2Vuc2NoYWZ0LUVyd2VpdGVydW5nc3B1bmt0CitFUF9FeHBlcmltZW50PVNURU0gRXhwZXJpbWVudC1FcndlaXRlcnVuZ3NwdW5rdAorRVBfTG9nZ2VyPVNURU0gbG9nZ2VyIGV4dGVuc2lvbiBwb2ludAorI0VQX01vZGlmaWVyPSBTVEVNIG1vZGlmaWVyIGV4dGVuc2lvbiBwb2ludAorCisjIER1YmxpbiBDb3JlIEZlYXR1cmUgRGVzY3JpcHRpb25zCisKK19VSV9EQ19WYWxpZF9EZXNjID0gVGhlIGRhdGUgcmFuZ2Ugb3ZlciB3aGljaCB0aGUgcmVzb3VyY2UgaXMgdmFsaWQuIChlLmcuLCAic3RhcnQ9MjAwNi0wMy0yOTsgZW5kPTIwMDYtMDMtMzA7IikKKworCisKK19VSV9DcmVhdGVDaGlsZF90ZXh0PXswfQorX1VJX0NyZWF0ZUNoaWxkX3RleHQyPXsxfSB7MH0KK19VSV9DcmVhdGVDaGlsZF90ZXh0Mz17MX0KK19VSV9DcmVhdGVDaGlsZF90b29sdGlwPU5ldWVzIHswfSB1bnRlciB7MX0gRmVhdHVyZSBlcnN0ZWxsZW4KK19VSV9DcmVhdGVDaGlsZF9kZXNjcmlwdGlvbj1OZXVlcyBLaW5kIHZvbSBUeXAgezB9IGZcdTAwZmNyIGRhcyB7MX0gTWVya21hbCBkZXIgYXVzZ2V3XHUwMGU0aGx0ZW4gezJ9IGVyc3RlbGxlbgorX1VJX0NyZWF0ZVNpYmxpbmdfZGVzY3JpcHRpb249TmV1ZXMgR2VzY2h3aXN0ZXJ0ZWlsIHZvbSBUeXAgezB9IGZcdTAwZmNyIGRlbiBhdXNnZXdcdTAwZTRobHRlbiB7Mn0gdW50ZXIgZGVtIHsxfSBNZXJrbWFsIGRlcyBFbHRlcm50ZWlsIGVyc3RlbGxlbgorCitfVUlfUHJvcGVydHlEZXNjcmlwdG9yX2Rlc2NyaXB0aW9uPXswfSB2b24gezF9CisKK19VSV9EdWJsaW5Db3JlX3R5cGU9RHVibGluIENvcmUKK19VSV9JZGVudGlmaWFibGVfdHlwZT1JZGVudGlmaXppZXJiYXJlcworX1VJX1Vua25vd25fdHlwZT1PYmpla3QKKworX1VJX1Vua25vd25fZGF0YXR5cGU9V2VydAorCitfVUlfRHVibGluQ29yZV90aXRsZV9mZWF0dXJlPVRpdGVsCitfVUlfRHVibGluQ29yZV9pZGVudGlmaWVyX2ZlYXR1cmU9QmV6ZWljaG5lcgorX1VJX0R1YmxpbkNvcmVfZGVzY3JpcHRpb25fZmVhdHVyZT1CZXNjaHJlaWJ1bmcKK19VSV9EdWJsaW5Db3JlX2NyZWF0b3JfZmVhdHVyZT1FcnpldWdlcgorX1VJX0R1YmxpbkNvcmVfZGF0ZV9mZWF0dXJlPURhdHVtCitfVUlfRHVibGluQ29yZV9mb3JtYXRfZmVhdHVyZT1Gb3JtYXQKK19VSV9EdWJsaW5Db3JlX3B1Ymxpc2hlcl9mZWF0dXJlPUhlcmF1c2dlYmVyCitfVUlfRHVibGluQ29yZV9jb3ZlcmFnZV9mZWF0dXJlPUJlcmljaHRlcnN0YXR0dW5nCitfVUlfRHVibGluQ29yZV9jb250cmlidXRvcl9mZWF0dXJlPU1pdHdpcmtlbmRlCitfVUlfRHVibGluQ29yZV9yZWxhdGlvbl9mZWF0dXJlPUJlemllaHVuZworX1VJX0R1YmxpbkNvcmVfcmlnaHRzX2ZlYXR1cmU9UmVjaHRlCitfVUlfRHVibGluQ29yZV9zb3VyY2VfZmVhdHVyZT1RdWVsbGUKK19VSV9EdWJsaW5Db3JlX3N1YmplY3RfZmVhdHVyZT1UaGVtYQorX1VJX0R1YmxpbkNvcmVfdHlwZV9mZWF0dXJlPVR5cAorX1VJX0R1YmxpbkNvcmVfbGFuZ3VhZ2VfZmVhdHVyZT1TcHJhY2hlCitfVUlfRHVibGluQ29yZV9iaWJsaW9ncmFwaGljQ2l0YXRpb25fZmVhdHVyZT1CaWJsaW9ncmFwaGlzY2hlIFppdGF0aW9uCitfVUlfRHVibGluQ29yZV9jcmVhdGVkX2ZlYXR1cmU9RXJzdGVsbHQKK19VSV9EdWJsaW5Db3JlX2xpY2Vuc2VfZmVhdHVyZT1MaXplbnoKK19VSV9EdWJsaW5Db3JlX3JlcXVpcmVkX2ZlYXR1cmU9RXJmb3JkZXJsaWNoCitfVUlfRHVibGluQ29yZV9zcGF0aWFsX2ZlYXR1cmU9Ulx1MDBlNHVtbGljaAorX1VJX0R1YmxpbkNvcmVfdmFsaWRfZmVhdHVyZT1HXHUwMGZjbHRpZworX1VJX0lkZW50aWZpYWJsZV91UklfZmVhdHVyZT1VUkkKK19VSV9JZGVudGlmaWFibGVfdHlwZVVSSV9mZWF0dXJlPVR5cCBVUkkKK19VSV9JZGVudGlmaWFibGVfZHVibGluQ29yZV9mZWF0dXJlPUR1YmxpbiBDb3JlCitfVUlfVW5rbm93bl9mZWF0dXJlPU5pY2h0IHNwZXppZml6aWVydAorCisKK19VSV9Db21tb25FZGl0b3JfbWVudT0mQ29tbW9uIEVkaXRvcgorCitfVUlfQ3JlYXRlQ2hpbGRfbWVudV9pdGVtPSZOZXcgQ2hpbGQKK19VSV9DcmVhdGVTaWJsaW5nX21lbnVfaXRlbT1OJmV1ZXMgR2VzY2h3aXN0ZXJ0ZWlsCisKK19VSV9TaG93UHJvcGVydGllc1ZpZXdfbWVudV9pdGVtPVNob3cgJiBQcm9wZXJ0aWVzIFZpZXcKK19VSV9SZWZyZXNoVmlld2VyX21lbnVfaXRlbT0mUmVmcmVzaAorCitfVUlfU2VsZWN0aW9uUGFnZV9sYWJlbD1BdXN3YWhsCitfVUlfUGFyZW50UGFnZV9sYWJlbD1FbHRlcm50ZWlsCitfVUlfTGlzdFBhZ2VfbGFiZWw9TGlzdGUKK19VSV9UcmVlUGFnZV9sYWJlbD1CYXVtCitfVUlfVGFibGVQYWdlX2xhYmVsPVRhYmVsbGUKK19VSV9UcmVlV2l0aENvbHVtbnNQYWdlX2xhYmVsPUJhdW0gbWl0IFNwYWx0ZW4KK19VSV9PYmplY3RDb2x1bW5fbGFiZWw9T2JqZWt0CitfVUlfU2VsZkNvbHVtbl9sYWJlbD1TZWxic3QKKworX1VJX05vT2JqZWN0U2VsZWN0ZWQ9TmljaHRzIGF1c2dld1x1MDBlNGhsdAorX1VJX1NpbmdsZU9iamVjdFNlbGVjdGVkPUF1c2dld1x1MDBlNGhsdGVzIE9iamVrdDogezB9CitfVUlfTXVsdGlPYmplY3RTZWxlY3RlZD1BdXNnZXdcdTAwZTRobHRlIHswfSBPYmpla3RlCisKK19VSV9PcGVuRWRpdG9yRXJyb3JfbGFiZWw9RWRpdG9yIFx1MDBmNmZmbmVuCisKK19VSV9XaXphcmRfY2F0ZWdvcnk9QmVpc3BpZWwgRU1GIE1vZGVsbCBFcnN0ZWxsdW5nc2Fzc2lzdGVudAorCitfVUlfQ3JlYXRlTW9kZWxFcnJvcl9tZXNzYWdlPUF1ZmdldHJldGVuZSBQcm9ibGVtZSBpbiBkZXIgRGF0ZWkgInswfSIKKworX1VJX0NvbW1vbk1vZGVsV2l6YXJkX2xhYmVsPUdlbWVpbnNhbWVzIE1vZGVsbAorX1VJX0NvbW1vbk1vZGVsV2l6YXJkX2Rlc2NyaXB0aW9uPU5ldWVzIENvbW1vbi1Nb2RlbGwgZXJzdGVsbGVuCisKK19VSV9Db21tb25FZGl0b3JfbGFiZWw9Q29tbW9uIE1vZGVsIEVkaXRvcgorCitfVUlfQ29tbW9uRWRpdG9yRmlsZW5hbWVEZWZhdWx0QmFzZT1NZWluCitfVUlfQ29tbW9uRWRpdG9yRmlsZW5hbWVFeHRlbnNpb249Z2VtZWluc2FtCisKK19VSV9XaXphcmRfbGFiZWw9TmV1CisKK19XQVJOX0ZpbGVuYW1lRXh0ZW5zaW9uPURlciBEYXRlaW5hbWUgbXVzcyBhdWYgIi57MH0iIGVuZGVuCisKK19VSV9Nb2RlbE9iamVjdD1Nb2RlbGwgT2JqZWt0CitfVUlfWE1MRW5jb2Rpbmc9WE1MIEtvZGllcnVuZworX1VJX1hNTEVuY29kaW5nQ2hvaWNlcz1VVEYtOCBBU0NJSSBVVEYtMTYgVVRGLTE2QkUgVVRGLTE2TEUgSVNPLTg4NTktMQorX1VJX1dpemFyZF9pbml0aWFsX29iamVjdF9kZXNjcmlwdGlvbj1adSBlcnpldWdlbmRlcyBNb2RlbGxvYmpla3Qgd1x1MDBlNGhsZW4KKworX1VJX0ZpbGVDb25mbGljdF9sYWJlbD1EYXRlaWtvbmZsaWt0CitfV0FSTl9GaWxlQ29uZmxpY3Q9RXMgZ2lidCBuaWNodCBnZXNwZWljaGVydGUgXHUwMGM0bmRlcnVuZ2VuLCBkaWUgS29uZmxpa3RlIG1pdCBcdTAwYzRuZGVydW5nZW4gYXVcdTAwZGZlcmhhbGIgZGVzIEVkaXRvcnMgZXJ6ZXVnZW4uIE1cdTAwZjZjaHRlbiBTaWUgZGllIFx1MDBjNG5kZXJ1bmdlbiBpbSBFZGl0b3IgdmVyd2VyZmVuPworX1VJX0R5bmFtaWNMYWJlbF90eXBlPUR5bmFtaXNjaGVzIExhYmVsCitfVUlfRHluYW1pY05vZGVMYWJlbF90eXBlPUR5bmFtaXNjaGVzIEtub3RlbmxhYmVsCitfVUlfRWRnZV90eXBlPUthbnRlCitfVUlfR3JhcGhfdHlwZT1HcmFwaAorX1VJX0xhYmVsX3R5cGU9TGFiZWwKK19VSV9MYWJlbFZhbHVlX3R5cGU9TGFiZWx3ZXJ0CitfVUlfTm9kZV90eXBlPUtub3RlbgorX1VJX05vZGVMYWJlbF90eXBlPUtub3RlbmxhYmVsCitfVUlfU3RhdGljTm9kZUxhYmVsX3R5cGU9U3RhdGlzY2hlcyBLbm90ZW5sYWJlbAorX1VJX1VucmVzb2x2ZWRJZGVudGlmaWFibGVfdHlwZT1VbmdlbFx1MDBmNnN0ZXMgSWRlbnRpZml6aWVyYmFyZXMKK19VSV9VUklUb0lkZW50aWZpYWJsZU1hcEVudHJ5X3R5cGU9VVJJLU5hY2gtSWRlbnRpZml6aWVyYmFyZXMtTWFwLUVudHJ5CitfVUlfU2FuaXR5Q2hlY2tlcl90eXBlPVBsYXVzaWJpbGl0XHUwMGU0dHNwclx1MDBmY2ZlcgorX1VJX0RlY29yYXRvcl90eXBlPURla29yaWVyZXIKK19VSV9FZGdlRGVjb3JhdG9yX3R5cGU9S2FudGVuZGVrb3JpZXJlcgorX1VJX0dyYXBoRGVjb3JhdG9yX3R5cGU9R3JhcGggRGVrb3JpZXJlcgorX1VJX01vZGVsX3R5cGU9TW9kZWxsCitfVUlfTm9kZURlY29yYXRvcl90eXBlPUtub3Rlbi1EZWtvcmllcmVyCitfVUlfU1RFTVRpbWVfdHlwZT1TVEVNIFplaXQKK19VSV9TY2VuYXJpb190eXBlPVN6ZW5hcmlvCitfVUlfU2VxdWVuY2VyX3R5cGU9U2VxdWVuemVyCitfVUlfU2VxdWVudGlhbFNlcXVlbmNlcl90eXBlPVNlcXVlbnRpZWxsZXIgU2VxdWVuemVyCitfVUlfRHluYW1pY0xhYmVsX25leHRWYWx1ZVZhbGlkX2ZlYXR1cmU9Tlx1MDBlNGNoc3RlciBnXHUwMGZjbHRpZ2VyIFdlcnQKK19VSV9EeW5hbWljTGFiZWxfbmV4dFZhbHVlX2ZlYXR1cmU9Tlx1MDBlNGNoc3RlciBXZXJ0CitfVUlfRWRnZV9hX2ZlYXR1cmU9QQorX1VJX0VkZ2Vfbm9kZUFVUklfZmVhdHVyZT1Lbm90ZW4gQVVSSQorX1VJX0VkZ2VfYl9mZWF0dXJlPUIKK19VSV9FZGdlX25vZGVCVVJJX2ZlYXR1cmU9S25vdGVuIEJVUkkKK19VSV9FZGdlX2xhYmVsX2ZlYXR1cmU9TGFiZWwKK19VSV9FZGdlX2RpcmVjdGVkX2ZlYXR1cmU9R2VyaWNodGV0CitfVUlfR3JhcGhfZWRnZXNfZmVhdHVyZT1LYW50ZW4KK19VSV9HcmFwaF9ub2Rlc19mZWF0dXJlPUtub3RlbgorX1VJX0dyYXBoX2dyYXBoTGFiZWxzX2ZlYXR1cmU9R3JhcGggTGFiZWxzCitfVUlfR3JhcGhfbm9kZUxhYmVsc19mZWF0dXJlPUtub3RlbmxhYmVsCitfVUlfR3JhcGhfZHluYW1pY0xhYmVsc19mZWF0dXJlPUR5bmFtaXNjaGUgTGFiZWxzCitfVUlfR3JhcGhfbnVtRWRnZXNfZmVhdHVyZT1BbnphaGwgS2FudGVuCitfVUlfR3JhcGhfbnVtTm9kZXNfZmVhdHVyZT1BbnphaGwgS25vdGVuCitfVUlfR3JhcGhfbnVtR3JhcGhMYWJlbHNfZmVhdHVyZT1BbnphaGwgR3JhcGhsYWJlbAorX1VJX0dyYXBoX251bU5vZGVMYWJlbHNfZmVhdHVyZT1BbnphaGwgS25vdGVubGFiZWwKK19VSV9HcmFwaF9udW1EeW5hbWljTGFiZWxzX2ZlYXR1cmU9QW56YWhsIGR5bmFtaXNjaGVyIExhYmVsCitfVUlfR3JhcGhfdW5yZXNvbHZlZElkZW50aWZpYWJsZXNfZmVhdHVyZT1VbmdlbFx1MDBmNnN0ZSBJZGVudGlmaXppZXJiYXJlCitfVUlfTGFiZWxfdVJJT2ZJZGVudGlmaWFibGVUb0JlTGFiZWxlZF9mZWF0dXJlPVVSSSBkZXMgenUgbGFiZWxkZW4gSWRlbnRpZml6aWVyYmFyZW4KK19VSV9MYWJlbF9jdXJyZW50VmFsdWVfZmVhdHVyZT1EZXJ6ZWl0aWdlciBXZXJ0CitfVUlfTm9kZV9lZGdlc19mZWF0dXJlPUthbnRlbgorX1VJX05vZGVfbGFiZWxzX2ZlYXR1cmU9TGFiZWxzCitfVUlfTm9kZUxhYmVsX25vZGVfZmVhdHVyZT1Lbm90ZW4KK19VSV9VbnJlc29sdmVkSWRlbnRpZmlhYmxlX3NjZW5hcmlvX2ZlYXR1cmU9U3plbmFyaW8KK19VSV9VbnJlc29sdmVkSWRlbnRpZmlhYmxlX21vZGVsX2ZlYXR1cmU9TW9kZWxsCitfVUlfVW5yZXNvbHZlZElkZW50aWZpYWJsZV9ncmFwaF9mZWF0dXJlPUdyYXBoCitfVUlfVW5yZXNvbHZlZElkZW50aWZpYWJsZV9pZGVudGlmaWFibGVfZmVhdHVyZT1JZGVudGlmaXppZXJiYXJlcworX1VJX1VucmVzb2x2ZWRJZGVudGlmaWFibGVfdW5yZXNvbHZlZFVSSV9mZWF0dXJlPVVuZ2VsXHUwMGY2c3RlIFVSSQorX1VJX1VucmVzb2x2ZWRJZGVudGlmaWFibGVfZmllbGROYW1lX2ZlYXR1cmU9RmVsZG5hbWUKK19VSV9VUklUb0lkZW50aWZpYWJsZU1hcEVudHJ5X2tleV9mZWF0dXJlPVNjaGxcdTAwZmNzc2VsCitfVUlfVVJJVG9JZGVudGlmaWFibGVNYXBFbnRyeV92YWx1ZV9mZWF0dXJlPVdlcnQKK19VSV9EZWNvcmF0b3JfaW5kZXhfZmVhdHVyZT1JbmRleAorX1VJX0RlY29yYXRvcl9sYWJlbHNUb1VwZGF0ZV9mZWF0dXJlPVp1IGFrdHVhbGlzaWVyZW5kZSBMYWJlbHMKK19VSV9Nb2RlbF9tb2RlbHNfZmVhdHVyZT1Nb2RlbGxlCitfVUlfTW9kZWxfZ3JhcGhzX2ZlYXR1cmU9R3JhcGhlbgorX1VJX01vZGVsX2dyYXBoRGVjb3JhdG9yc19mZWF0dXJlPUdyYXBoIERla29yaWVyZXIKK19VSV9Nb2RlbF9ub2RlRGVjb3JhdG9yc19mZWF0dXJlPUtub3Rlbi1EZWtvcmllcmVyCitfVUlfTW9kZWxfZWRnZURlY29yYXRvcnNfZmVhdHVyZT1LYW50ZW5kZWtvcmllcmVyCitfVUlfTW9kZWxfY2Fub25pY2FsR3JhcGhEZWNvcmF0b3JzX2ZlYXR1cmU9S2Fub25pc2NoZXIgR3JhcGhkZWtvcmllcmVyCitfVUlfTW9kZWxfY2Fub25pY2FsTm9kZURlY29yYXRvcnNfZmVhdHVyZT1LYW5vbmlzY2hlciBLbm90ZW5kZWtvcmllcmVyCitfVUlfTW9kZWxfY2Fub25pY2FsRWRnZURlY29yYXRvcnNfZmVhdHVyZT1LYW5vbmlzY2hlciBLYW50ZW5kZWtvcmllcmVyCitfVUlfU1RFTVRpbWVfdGltZV9mZWF0dXJlPVplaXQKK19VSV9TY2VuYXJpb19tb2RlbF9mZWF0dXJlPU1vZGVsbAorX1VJX1NjZW5hcmlvX3NlcXVlbmNlcl9mZWF0dXJlPVNlcXVlbnplcgorX1VJX1NjZW5hcmlvX3NjZW5hcmlvRGVjb3JhdG9yc19mZWF0dXJlPVN6ZW5hcmlvZGVrb3JpZXJlcgorX1VJX1NjZW5hcmlvX2Nhbm9uaWNhbEdyYXBoX2ZlYXR1cmU9S2Fub25pc2NoZXIgR3JhcGgKK19VSV9TY2VuYXJpb19jYW5vbmljYWxNb2RlbERlY29yYXRvcnNfZmVhdHVyZT1LYW5vbmlzY2hlciBNb2RlbGxkZWtvcmllcmVyCitfVUlfU2NlbmFyaW9fY2Fub25pY2FsU2NlbmFyaW9EZWNvcmF0b3JzX2ZlYXR1cmU9S2Fub25pc2NoZXIgU3plbmFyaW9kZWtvcmllcmVyCitfVUlfU2NlbmFyaW9fdGl0bGVfZmVhdHVyZT1UaXRlbAorX1VJX1NlcXVlbmNlcl9zdGFydFRpbWVfZmVhdHVyZT1TdGFydHplaXQKK19VSV9TZXF1ZW5jZXJfZW5kVGltZV9mZWF0dXJlPUVuZGRhdHVtCitfVUlfU2VxdWVuY2VyX2N1cnJlbnRUaW1lX2ZlYXR1cmU9RGVyemVpdGlnZSBaZWl0CitfVUlfU2VxdWVuY2VyX25leHRUaW1lX2ZlYXR1cmU9Tlx1MDBlNGNoc3RlciBaZWl0cHVua3QKK19VSV9TZXF1ZW5jZXJfdGltZURlbHRhX2ZlYXR1cmU9WmVpdC1EZWx0YQorX1VJX1NlcXVlbmNlcl9kdXJhdGlvbl9mZWF0dXJlPURhdWVyCitfVUlfU2VxdWVuY2VyX3RpbWVUb1N0b3BfZmVhdHVyZT1aZWl0IHp1IHN0b3BwZW4KK19VSV9TZXF1ZW5jZXJfd29ya0NvbXBsZXRlX2ZlYXR1cmU9QXJiZWl0IGFiZ2VzY2hsb3NzZW4KK19VSV9TZXF1ZW5jZXJfd29ya0luY3JlbWVudF9mZWF0dXJlPUFyYmVpdHMtSW5rcmVtZW50CitfVUlfU2VxdWVudGlhbFNlcXVlbmNlcl90aW1lSW5jcmVtZW50X2ZlYXR1cmU9WmVpdC1JbmtyZW1lbnQKK19VSV9HcmFwaEVkaXRvcl9tZW51PSZHcmFwaCBFZGl0b3IKK19VSV9Nb2RlbEVkaXRvcl9tZW51PSZNb2RlbCBFZGl0b3IKK19VSV9TY2VuYXJpb0VkaXRvcl9tZW51PSZTY2VuYXJpbyBFZGl0b3IKKworX1VJX0dyYXBoTW9kZWxXaXphcmRfbGFiZWw9R3JhcGggTW9kZWxsCitfVUlfR3JhcGhNb2RlbFdpemFyZF9kZXNjcmlwdGlvbj1OZXVlcyBHcmFwaC1Nb2RlbGwgZXJzdGVsbGVuCisKK19VSV9HcmFwaEVkaXRvcl9sYWJlbD1HcmFwaCBNb2RlbGwgRWRpdG9yCisKK19VSV9HcmFwaEVkaXRvckZpbGVuYW1lRGVmYXVsdEJhc2U9TWVpbgorX1VJX0dyYXBoRWRpdG9yRmlsZW5hbWVFeHRlbnNpb249R3JhcGgKKworX1VJX01vZGVsTW9kZWxXaXphcmRfbGFiZWw9TW9kZWxsIE1vZGVsbAorX1VJX01vZGVsTW9kZWxXaXphcmRfZGVzY3JpcHRpb249TmV1ZXMgTW9kZWxsIGVyc3RlbGxlbgorCitfVUlfTW9kZWxFZGl0b3JfbGFiZWw9TW9kZWxsIE1vZGVsbCBFZGl0b3IKKworX1VJX01vZGVsRWRpdG9yRmlsZW5hbWVEZWZhdWx0QmFzZT1NZWluCitfVUlfTW9kZWxFZGl0b3JGaWxlbmFtZUV4dGVuc2lvbj1Nb2RlbGwKKworX1VJX1NjZW5hcmlvTW9kZWxXaXphcmRfbGFiZWw9U3plbmFyaW9tb2RlbGwKK19VSV9TY2VuYXJpb01vZGVsV2l6YXJkX2Rlc2NyaXB0aW9uPU5ldWVzIFN6ZW5hcmlvLU1vZGVsbCBlcnN0ZWxsZW4KKworX1VJX1NjZW5hcmlvRWRpdG9yX2xhYmVsPVNjZW5hcmlvbW9kZWxsLUVkaXRvcgorCitfVUlfU2NlbmFyaW9FZGl0b3JGaWxlbmFtZURlZmF1bHRCYXNlPU1laW4KK19VSV9TY2VuYXJpb0VkaXRvckZpbGVuYW1lRXh0ZW5zaW9uPVN6ZW5hcmlvCisKK19VSV9EeW5hbWljTGFiZWxfZGVjb3JhdG9yX2ZlYXR1cmU9RGVrb3JpZXJlcgorX1VJX0dyYXBoX2RlY29yYXRvcnNfZmVhdHVyZT1EZWtvcmllcmVyCitfVUlfRGVjb3JhdG9yX2dyYXBoX2ZlYXR1cmU9R3JhcGgKK19VSV9MYWJlbF9pZGVudGlmaWFibGVfZmVhdHVyZT1JZGVudGlmaXppZXJiYXJlcworX1VJX0R5bmFtaWNFZGdlTGFiZWxfdHlwZT1EeW5hbWlzY2hlcyBLYW50ZW5sYWJlbAorX1VJX0VkZ2VMYWJlbF90eXBlPUthbnRlbmxhYmVsCitfVUlfU3RhdGljRWRnZUxhYmVsX3R5cGU9U3RhdGlzY2hlcyBLYW50ZW5sYWJlbAorX1VJX0VkZ2VMYWJlbF9lZGdlX2ZlYXR1cmU9S2FudGUKK19VSV9SZWFsVGltZVNlcXVlbmNlcl90eXBlPUVjaHR6ZWl0LVNlcXVlbnplcgorX1VJX1NlcXVlbmNlcl9jeWNsZV9mZWF0dXJlPVp5a2x1cworX1VJX1VSSVRvRWRnZU1hcEVudHJ5X3R5cGU9VVJJLU5hY2gtRWRnZS1FaW50cmFnCitfVUlfVVJJVG9Ob2RlTWFwRW50cnlfdHlwZT1VUkktTmFjaC1Lbm90ZW4tTWFwLUVudHJ5CitfVUlfVVJJVG9MYWJlbE1hcEVudHJ5X3R5cGU9VVJJLU5hY2gtTGFiZWwtTWFwLUVudHJ5CitfVUlfVVJJVG9Ob2RlTGFiZWxNYXBFbnRyeV90eXBlPVVSSS1OYWNoLUtub3RlbmxhYmVsLU1hcC1FbnRyeQorX1VJX1VSSVRvRWRnZU1hcEVudHJ5X2tleV9mZWF0dXJlPVNjaGxcdTAwZmNzc2VsCitfVUlfVVJJVG9FZGdlTWFwRW50cnlfdmFsdWVfZmVhdHVyZT1XZXJ0CitfVUlfVVJJVG9Ob2RlTWFwRW50cnlfa2V5X2ZlYXR1cmU9U2NobFx1MDBmY3NzZWwKK19VSV9VUklUb05vZGVNYXBFbnRyeV92YWx1ZV9mZWF0dXJlPVdlcnQKK19VSV9VUklUb0xhYmVsTWFwRW50cnlfa2V5X2ZlYXR1cmU9U2NobFx1MDBmY3NzZWwKK19VSV9VUklUb0xhYmVsTWFwRW50cnlfdmFsdWVfZmVhdHVyZT1XZXJ0CitfVUlfVVJJVG9Ob2RlTGFiZWxNYXBFbnRyeV9rZXlfZmVhdHVyZT1TY2hsXHUwMGZjc3NlbAorX1VJX1VSSVRvTm9kZUxhYmVsTWFwRW50cnlfdmFsdWVfZmVhdHVyZT1XZXJ0CitfVUlfQm9vbGVhblNlcXVlbmNlTW9kaWZpZXJfdHlwZT1Cb29sc2NoZXIgU2VxdWVuem1vZGlmaWthdG9yCitfVUlfRG91YmxlUmFuZ2VNb2RpZmllcl90eXBlPURvdWJsZSBSYW5nZSBNb2RpZmlrYXRvcgorX1VJX0RvdWJsZVNlcXVlbmNlTW9kaWZpZXJfdHlwZT1Eb3VibGUgU2VxdWVueiBNb2RpZmlrYXRvcgorX1VJX0V4cGVyaW1lbnRfdHlwZT1FeHBlcmltZW50CitfVUlfRmVhdHVyZU1vZGlmaWVyX3R5cGU9TWVya21hbG1vZGlmaWthdG9yCitfVUlfSW50ZWdlclJhbmdlTW9kaWZpZXJfdHlwZT1JbnRlZ2VyIFJhbmdlIE1vZGlmaWthdG9yCitfVUlfSW50ZWdlclNlcXVlbmNlTW9kaWZpZXJfdHlwZT1JbnRlZ2VyIFNlcXVlbnogTW9kaWZpa2F0b3IKK19VSV9Nb2RpZmllcl90eXBlPU1vZGlmaWthdG9yCitfVUlfUmFuZ2VNb2RpZmllcl90eXBlPVJlaWNod2VpdGVuLU1vZGlmaWthdG9yCitfVUlfU1RFTVRpbWVSYW5nZU1vZGlmaWVyX3R5cGU9U1RFTSBaZWl0YmVyZWljaC1Nb2RpZmlrYXRvcgorX1VJX1NURU1UaW1lU2VxdWVuY2VNb2RpZmllcl90eXBlPVNURU0gWmVpdHNlcXVlbnotTW9kaWZpa2F0b3IKK19VSV9TZXF1ZW5jZU1vZGlmaWVyX3R5cGU9U2VxdWVuem1vZGlmaWthdG9yCitfVUlfU3RyaW5nU2VxdWVuY2VNb2RpZmllcl90eXBlPVplaWNoZW5rZXR0ZW4tU2VxdWVuei1Nb2RpZmlrYXRvcgorX1VJX0Jvb2xlYW5TZXF1ZW5jZU1vZGlmaWVyX3NlcXVlbmNlX2ZlYXR1cmU9U2VxdWVuegorX1VJX0RvdWJsZVJhbmdlTW9kaWZpZXJfc3RhcnRWYWx1ZV9mZWF0dXJlPVN0YXJ0d2VydAorX1VJX0RvdWJsZVJhbmdlTW9kaWZpZXJfZW5kVmFsdWVfZmVhdHVyZT1FbmR3ZXJ0CitfVUlfRG91YmxlUmFuZ2VNb2RpZmllcl9pbmNyZW1lbnRfZmVhdHVyZT1adW5haG1lCitfVUlfRG91YmxlU2VxdWVuY2VNb2RpZmllcl9zZXF1ZW5jZV9mZWF0dXJlPVNlcXVlbnoKK19VSV9FeHBlcmltZW50X2V4cGVyaW1lbnRzX2ZlYXR1cmU9RXhwZXJpbWVudGUKK19VSV9FeHBlcmltZW50X21vZGlmaWVyc19mZWF0dXJlPU1vZGlmaWthdG9yZW4KK19VSV9FeHBlcmltZW50X21vZGlmaWNhdGlvblN1bW1hcnlfZmVhdHVyZT1Nb2RpZmlrYXRpb24gWnVzYW1tZW5mYXNzdW5nCitfVUlfRXhwZXJpbWVudF9jb21wbGV0ZV9mZWF0dXJlPUtvbXBsZXR0CitfVUlfRmVhdHVyZU1vZGlmaWVyX2ZlYXR1cmVJZF9mZWF0dXJlPU1lcmttYWwgSUQKK19VSV9GZWF0dXJlTW9kaWZpZXJfbW9kaWZpY2F0aW9uU3VtbWFyeV9mZWF0dXJlPU1vZGlmaWthdGlvbiBadXNhbW1lbmZhc3N1bmcKK19VSV9GZWF0dXJlTW9kaWZpZXJfY29tcGxldGVfZmVhdHVyZT1Lb21wbGV0dAorX1VJX0ludGVnZXJSYW5nZU1vZGlmaWVyX3N0YXJ0VmFsdWVfZmVhdHVyZT1TdGFydHdlcnQKK19VSV9JbnRlZ2VyUmFuZ2VNb2RpZmllcl9lbmRWYWx1ZV9mZWF0dXJlPUVuZHdlcnQKK19VSV9JbnRlZ2VyUmFuZ2VNb2RpZmllcl9pbmNyZW1lbnRfZmVhdHVyZT1adW5haG1lCitfVUlfSW50ZWdlclNlcXVlbmNlTW9kaWZpZXJfc2VxdWVuY2VfZmVhdHVyZT1TZXF1ZW56CitfVUlfTW9kaWZpZXJfdGFyZ2V0VVJJX2ZlYXR1cmU9WmllbC1VUkkKK19VSV9Nb2RpZmllcl9mZWF0dXJlTW9kaWZpZXJzX2ZlYXR1cmU9TWVya21hbG1vZGlmaWthdG9yCitfVUlfTW9kaWZpZXJfbW9kaWZpY2F0aW9uU3VtbWFyeV9mZWF0dXJlPU1vZGlmaWthdGlvbiBadXNhbW1lbmZhc3N1bmcKK19VSV9Nb2RpZmllcl9jb21wbGV0ZV9mZWF0dXJlPUtvbXBsZXR0CitfVUlfU1RFTVRpbWVSYW5nZU1vZGlmaWVyX3N0YXJ0VmFsdWVfZmVhdHVyZT1TdGFydHdlcnQKK19VSV9TVEVNVGltZVJhbmdlTW9kaWZpZXJfZW5kVmFsdWVfZmVhdHVyZT1FbmR3ZXJ0CitfVUlfU1RFTVRpbWVSYW5nZU1vZGlmaWVyX2luY3JlbWVudF9mZWF0dXJlPVp1bmFobWUKK19VSV9TVEVNVGltZVNlcXVlbmNlTW9kaWZpZXJfc2VxdWVuY2VfZmVhdHVyZT1TZXF1ZW56CitfVUlfU2VxdWVuY2VNb2RpZmllcl9zZXF1ZW5jZVNpemVfZmVhdHVyZT1TZXF1ZW56Z3JcdTAwZjZcdTAwZGZlCitfVUlfU3RyaW5nU2VxdWVuY2VNb2RpZmllcl9zZXF1ZW5jZV9mZWF0dXJlPVNlcXVlbnoKK19VSV9Cb29sZWFuU2VxdWVuY2VNb2RpZmllcl9jdXJyZW50VmFsdWVfZmVhdHVyZT1EZXJ6ZWl0aWdlciBXZXJ0CitfVUlfRG91YmxlUmFuZ2VNb2RpZmllcl9jdXJyZW50VmFsdWVfZmVhdHVyZT1EZXJ6ZWl0aWdlciBXZXJ0CitfVUlfRG91YmxlU2VxdWVuY2VNb2RpZmllcl9jdXJyZW50VmFsdWVfZmVhdHVyZT1EZXJ6ZWl0aWdlciBXZXJ0CitfVUlfRmVhdHVyZU1vZGlmaWVyX2VTdHJ1Y3R1cmFsRmVhdHVyZV9mZWF0dXJlPUVTdHJ1Y3R1cmFsIEZlYXR1cmUKK19VSV9JbnRlZ2VyUmFuZ2VNb2RpZmllcl9jdXJyZW50VmFsdWVfZmVhdHVyZT1EZXJ6ZWl0aWdlciBXZXJ0CitfVUlfSW50ZWdlclNlcXVlbmNlTW9kaWZpZXJfY3VycmVudFZhbHVlX2ZlYXR1cmU9RGVyemVpdGlnZXIgV2VydAorX1VJX1NURU1UaW1lUmFuZ2VNb2RpZmllcl9jdXJyZW50VmFsdWVfZmVhdHVyZT1EZXJ6ZWl0aWdlciBXZXJ0CitfVUlfU1RFTVRpbWVTZXF1ZW5jZU1vZGlmaWVyX2N1cnJlbnRWYWx1ZV9mZWF0dXJlPURlcnplaXRpZ2VyIFdlcnQKK19VSV9TZXF1ZW5jZU1vZGlmaWVyX2N1cnJlbnRTZXF1ZW5jZUluZGV4X2ZlYXR1cmU9RGVyemVpdGlnZXIgU2VxdWVuei1JbmRleAorX1VJX1N0cmluZ1NlcXVlbmNlTW9kaWZpZXJfY3VycmVudFZhbHVlX2ZlYXR1cmU9RGVyemVpdGlnZXIgV2VydAorX1VJX0ZlYXR1cmVNb2RpZmllcl9jdXJyZW50VmFsdWVfZmVhdHVyZT1EZXJ6ZWl0aWdlciBXZXJ0CitfVUlfRmVhdHVyZU1vZGlmaWVyX25leHRWYWx1ZV9mZWF0dXJlPU5cdTAwZTRjaHN0ZXIgV2VydAorX1VJX1NlcXVlbmNlTW9kaWZpZXJfc2VxdWVuY2VfZmVhdHVyZT1TZXF1ZW56CitfVUlfRXhwZXJpbWVudF9zY2VuYXJpb19mZWF0dXJlPVN6ZW5hcmlvCitfVUlfRXhwZXJpbWVudF9uZXh0U2NlbmFyaW9fZmVhdHVyZT1OXHUwMGU0Y2hzdGVzIFN6ZW5hcmlvCitfVUlfUmFuZ2VNb2RpZmllcl9zdGFydFZhbHVlX2ZlYXR1cmU9U3RhcnR3ZXJ0CitfVUlfUmFuZ2VNb2RpZmllcl9lbmRWYWx1ZV9mZWF0dXJlPUVuZHdlcnQKK19VSV9SYW5nZU1vZGlmaWVyX2luY3JlbWVudF9mZWF0dXJlPVp1bmFobWUKK19VSV9Mb25nUmFuZ2VNb2RpZmllcl90eXBlPUxvbmcgUmFuZ2UgTW9kaWZpa2F0b3IKK19VSV9Eb3VibGVOT1BNb2RpZmllcl90eXBlPURvdWJsZSBOT1AgTW9kaWZpa2F0b3IKK19VSV9JbnRlZ2VyTk9QTW9kaWZpZXJfdHlwZT1JbnRlZ2VyIE5PUCBNb2RpZmlrYXRvcgorX1VJX0xvbmdOT1BNb2RpZmllcl90eXBlPUxvbmcgTk9QIE1vZGlmaWthdG9yCitfVUlfTk9QTW9kaWZpZXJfdHlwZT1OT1AgTW9kaWZpa2F0b3IKK19VSV9TVEVNVGltZU5PUE1vZGlmaWVyX3R5cGU9U1RFTSBaZWl0LU5PUC1Nb2RpZmlrYXRvcgorX1VJX1N0cmluZ05PUE1vZGlmaWVyX3R5cGU9WmVpY2hlbmtldHRlbi1OT1AtTW9kaWZpa2F0b3IKK19VSV9GZWF0dXJlTW9kaWZpZXJfc3RydWN0dXJhbEZlYXR1cmVOYW1lX2ZlYXR1cmU9U3RydWt0dXJtZXJrbWFsc25hbWUKK19VSV9TdHJpbmdfdHlwZT1aZWljaGVua2V0dGUKK19VSV9GZWF0dXJlTW9kaWZpZXJfaWRlbnRpZmlhYmxlX2ZlYXR1cmU9SWRlbnRpZml6aWVyYmFyZXMKK19VSV9Mb25nUmFuZ2VNb2RpZmllcl9zdGFydFZhbHVlX2ZlYXR1cmU9U3RhcnR3ZXJ0CitfVUlfTG9uZ1JhbmdlTW9kaWZpZXJfZW5kVmFsdWVfZmVhdHVyZT1FbmR3ZXJ0CitfVUlfTG9uZ1JhbmdlTW9kaWZpZXJfaW5jcmVtZW50X2ZlYXR1cmU9WnVuYWhtZQorX1VJX0ZlYXR1cmVNb2RpZmllcl9jdXJyZW50VmFsdWVUZXh0X2ZlYXR1cmU9RGVyemVpdGlnZXIgV2VydC1UZXh0CitfVUlfTG9uZ1JhbmdlTW9kaWZpZXJfY3VycmVudFZhbHVlX2ZlYXR1cmU9RGVyemVpdGlnZXIgV2VydAorX1VJX0ZlYXR1cmVNb2RpZmllcl90YXJnZXRfZmVhdHVyZT1aaWVsCitfVUlfRmVhdHVyZU1vZGlmaWVyX2ZlYXR1cmVOYW1lX2ZlYXR1cmU9TWVya21hbHNuYW1lCitfVUlfRG91YmxlUmFuZ2VNb2RpZmllcl9uZXh0VmFsdWVfZmVhdHVyZT1OXHUwMGU0Y2hzdGVyIFdlcnQKK19VSV9JbnRlZ2VyUmFuZ2VNb2RpZmllcl9uZXh0VmFsdWVfZmVhdHVyZT1OXHUwMGU0Y2hzdGVyIFdlcnQKK19VSV9TVEVNVGltZVJhbmdlTW9kaWZpZXJfbmV4dFZhbHVlX2ZlYXR1cmU9Tlx1MDBlNGNoc3RlciBXZXJ0CitfVUlfTG9uZ1JhbmdlTW9kaWZpZXJfbmV4dFZhbHVlX2ZlYXR1cmU9Tlx1MDBlNGNoc3RlciBXZXJ0CitfVUlfU2VxdWVuY2VNb2RpZmllcl9uZXh0VmFsdWVfZmVhdHVyZT1OXHUwMGU0Y2hzdGVyIFdlcnQKK19VSV9Mb25nU2VxdWVuY2VNb2RpZmllcl90eXBlPUxvbmcgU2VxdWVueiBNb2RpZmlrYXRvcgorX1VJX0xvbmdTZXF1ZW5jZU1vZGlmaWVyX3NlcXVlbmNlX2ZlYXR1cmU9U2VxdWVuegorX1VJX0NvbXBhcmFibGVfdHlwZT1WZXJnbGVpY2hiYXIKK19VSV9HcmFwaF90aW1lX2ZlYXR1cmU9WmVpdAorX1VJX0FuZF90eXBlPVVuZAorX1VJX0Jvb2xlYW5FeHByZXNzaW9uX3R5cGU9Qm9vbHNjaGVyIEF1c2RydWNrCitfVUlfQm9vbGVhbk9wZXJhdG9yX3R5cGU9Qm9vbHNjaGVyIE9wZXJhdG9yCitfVUlfRmFsc2VfdHlwZT1GYWxzY2gKK19VSV9OYXJ5Qm9vbGVhbk9wZXJhdG9yX3R5cGU9TmFyeSBCb29sc2NoZXIgT3BlcmF0b3IKK19VSV9Ob3RfdHlwZT1OaWNodAorX1VJX09yX3R5cGU9T2RlcgorX1VJX1ByZWRpY2F0ZV90eXBlPUVpZ2Vuc2NoYWZ0CitfVUlfUHJlZGljYXRlUmVmZXJlbmNlX3R5cGU9UmVmZXJlbnoKK19VSV9UZXN0X3R5cGU9VGVzdAorX1VJX1RydWVfdHlwZT1XYWhyCitfVUlfVW5hcnlCb29sZWFuT3BlcmF0b3JfdHlwZT1Vblx1MDBlNHJlciBib29sc2NoZXIgT3BlcmF0b3IKK19VSV9UcmlnZ2VyX3R5cGU9QXVzbFx1MDBmNnNlcgorX1VJX05hcnlCb29sZWFuT3BlcmF0b3Jfb3BlcmFuZHNfZmVhdHVyZT1PcGVyYW5kZW4KK19VSV9QcmVkaWNhdGVSZWZlcmVuY2VfcHJlZGljYXRlX2ZlYXR1cmU9RWlnZW5zY2hhZnQKK19VSV9VbmFyeUJvb2xlYW5PcGVyYXRvcl9vcGVyYW5kX2ZlYXR1cmU9T3BlcmFuZAorX1VJX1RyaWdnZXJfcHJlZGljYXRlX2ZlYXR1cmU9RWlnZW5zY2hhZnQKK19VSV9UcmlnZ2VyX2FjdGlvbl9mZWF0dXJlPUFrdGlvbgorX1VJX1ByZWRpY2F0ZUV4cHJlc3Npb25fdHlwZT1BdXNkcnVjaworX1VJX1ByZWRpY2F0ZUV4cHJlc3Npb25fcHJlZGljYXRlX2ZlYXR1cmU9RWlnZW5zY2hhZnQKK19VSV9JZGVudGlmaWFibGVQcmVkaWNhdGVfdHlwZT1JZGVudGlmaXppZXJiYXJlLUVpZ2Vuc2NoYWZ0CitfVUlfSWRlbnRpZmlhYmxlUHJlZGljYXRlRXhwcmVzc2lvbl90eXBlPUlkZW50aWZpemllcmJhcmUtRWlnZW5zY2hhZnRzYXVzZHJ1Y2sKK19VSV9JZGVudGlmaWFibGVUZXN0X3R5cGU9SWRlbnRpZml6aWVyYmFyZXMtVGVzdAorX1VJX1RpbWVUZXN0X3R5cGU9WmVpdC1UZXN0CitfVUlfVGltZVRlc3RfdGltZV9mZWF0dXJlPVplaXQKK19VSV9BYnNvbHV0ZVRpbWVUZXN0X3R5cGU9QWJzb2x1dGVyIFplaXQgVGVzdAorX1VJX0VsYXBzZWRUaW1lVGVzdF90eXBlPUFiZ2VsYXVmZW5lLVplaXQtVGVzdAorX1VJX1RpbWVUZXN0X3JlZmVyZW5jZVRpbWVfZmVhdHVyZT1SZWZlcmVuenplaXQKK19VSV9FbGFwc2VkVGltZVRlc3RfcmVmZXJlbmNlVGltZVZhbGlkX2ZlYXR1cmU9UmVmZXJlbnp6ZWl0IGdcdTAwZmNsdGlnCitfVUlfRWxhcHNlZFRpbWVUZXN0X2VsYXBzZWRNaWxsaXNlY29uZHNfZmVhdHVyZT1BYmdlbGF1ZmVuZSBNaWxsaXNla3VuZGVuCitfVUlfRWxhcHNlZFRpbWVUZXN0X251bWJlcm9mRGF5c19mZWF0dXJlPUFuemFobCBhbiBUYWdlbgorX1VJX0Fic29sdXRlVGltZVRlc3RfcmVmZXJlbmNlVGltZV9mZWF0dXJlPVJlZmVyZW56emVpdAorX1VJX0VsYXBzZWRUaW1lVGVzdF9yZWZlcmVuY2VUaW1lX2ZlYXR1cmU9UmVmZXJlbnp6ZWl0CitfVUlfQWJzb2x1dGVUaW1lVGVzdF90aW1lX2ZlYXR1cmU9WmVpdAorX1VJX0RlY29yYXRvcl9lbmFibGVkX2ZlYXR1cmU9QWt0aXZpZXJ0CitfVUlfRGVjb3JhdG9yX2dyYXBoRGVjb3JhdGVkX2ZlYXR1cmU9R3JhcGggRGVrb3JpZXJ0CitfVUlfTW9kaWZpYWJsZV90eXBlPU1vZGlmaXppZXJiYXJlcworX1VJX0RvdWJsZVJhbmdlTW9kaWZpZXJfb3JnaW5hbFZhbHVlX2ZlYXR1cmU9VXJzcHJcdTAwZmNuZ2xpY2hlciBXZXJ0CitfVUlfSW50ZWdlclJhbmdlTW9kaWZpZXJfb3JnaW5hbFZhbHVlX2ZlYXR1cmU9VXJzcHJcdTAwZmNuZ2xpY2hlciBXZXJ0CitfVUlfTG9uZ1JhbmdlTW9kaWZpZXJfb3JnaW5hbFZhbHVlX2ZlYXR1cmU9VXJzcHJcdTAwZmNuZ2xpY2hlciBXZXJ0CitfVUlfU1RFTVRpbWVSYW5nZU1vZGlmaWVyX29yZ2luYWxWYWx1ZV9mZWF0dXJlPVVyc3ByXHUwMGZjbmdsaWNoZXIgV2VydAorX1VJX1NlcXVlbmNlTW9kaWZpZXJfb3JnaW5hbFZhbHVlX2ZlYXR1cmU9VXJzcHJcdTAwZmNuZ2xpY2hlciBXZXJ0CitfVUlfRG91YmxlUmFuZ2VNb2RpZmllcl9vcmlnaW5hbFZhbHVlX2ZlYXR1cmU9VXJzcHJcdTAwZmNuZ2xpY2hlciBXZXJ0CitfVUlfSW50ZWdlclJhbmdlTW9kaWZpZXJfb3JpZ2luYWxWYWx1ZV9mZWF0dXJlPVVyc3ByXHUwMGZjbmdsaWNoZXIgV2VydAorX1VJX0xvbmdSYW5nZU1vZGlmaWVyX29yaWdpbmFsVmFsdWVfZmVhdHVyZT1VcnNwclx1MDBmY25nbGljaGVyIFdlcnQKK19VSV9TVEVNVGltZVJhbmdlTW9kaWZpZXJfb3JpZ2luYWxWYWx1ZV9mZWF0dXJlPVVyc3ByXHUwMGZjbmdsaWNoZXIgV2VydAorX1VJX1NlcXVlbmNlTW9kaWZpZXJfb3JpZ2luYWxWYWx1ZV9mZWF0dXJlPVVyc3ByXHUwMGZjbmdsaWNoZXIgV2VydAorX1VJX1N0YXRpY0xhYmVsX3R5cGU9U3RhdGlzY2hlcyBMYWJlbAorX1VJX0R5bmFtaWNMYWJlbF9kZWx0YVZhbHVlX2ZlYXR1cmU9RGVsdGEtV2VydAorX1VJX0R5bmFtaWNMYWJlbF9lc3RpbWF0ZWRWYWx1ZV9mZWF0dXJlPVNjaFx1MDBlNHR6d2VydAorX1VJX0RlY29yYXRvcl9zdGVwU2l6ZV9mZWF0dXJlPVNjaHJpdHRnclx1MDBmNlx1MDBkZmUKK19VSV9EZWNvcmF0b3JfY3VycmVudEN5Y2xlX2ZlYXR1cmU9RGVyemVpdGlnZXIgWnlrbHVzCitfVUlfRGVjb3JhdG9yX3JlbGF0aXZlVG9sZXJhbmNlX2ZlYXR1cmU9UmVsYXRpdmUgVG9sZXJhbnoKK19VSV9EZWNvcmF0b3JfYWJzb2x1dGVUb2xlcmFuY2VfZmVhdHVyZT1BYnNvbHV0ZSBUb2xlcmFuegorX1VJX0RlY29yYXRvcl9wcm9ncmVzc19mZWF0dXJlPUZvcnRzY2hyaXR0CitfVUlfU2NlbmFyaW9fcHJvZ3Jlc3NfZmVhdHVyZT1Gb3J0c2Nocml0dAorX1VJX0NhdGVnb3JpemVkVHlwZV90eXBlPUthdGVnb3Jpc2llcnRlciBUeXAKK19VSV9Tb2x2ZXJfdHlwZT1HbGVpY2h1bmdzbFx1MDBmNnNlcgorX1VJX1NvbHZlcl9kZWNvcmF0b3JzX2ZlYXR1cmU9RGVrb3JpZXJlcgorX1VJX1NjZW5hcmlvX3NvbHZlcl9mZWF0dXJlPUdsZWljaHVuZ3NsXHUwMGY2c2VyCitfVUlfU29sdmVyX2luaXRpYWxpemVkX2ZlYXR1cmU9SW5pdGlhbGlzaWVydAorX1VJX1NpbmdsZVZhbHVlTW9kaWZpZXJfdHlwZT1FaW56ZWx3ZXJ0LU1vZGlmaWthdG9yCitfVUlfRG91YmxlTW9kaWZpZXJfdHlwZT1Eb3VibGUgTW9kaWZpa2F0b3IKK19VSV9JbnRlZ2VyTW9kaWZpZXJfdHlwZT1JbnRlZ2VyIE1vZGlmaWthdG9yCitfVUlfTG9uZ01vZGlmaWVyX3R5cGU9TG9uZyBNb2RpZmlrYXRvcgorX1VJX1NURU1UaW1lTW9kaWZpZXJfdHlwZT1TVEVNIFplaXRtb2RpZmlrYXRvcgorX1VJX0RvdWJsZU1vZGlmaWVyX3ZhbHVlX2ZlYXR1cmU9V2VydAorX1VJX0ludGVnZXJNb2RpZmllcl92X2ZlYXR1cmU9VgorX1VJX0xvbmdNb2RpZmllcl92YWx1ZV9mZWF0dXJlPVdlcnQKK19VSV9TVEVNVGltZU1vZGlmaWVyX3ZhbHVlX2ZlYXR1cmU9V2VydAorX1VJX0ludGVnZXJNb2RpZmllcl92YWx1ZV9mZWF0dXJlPVdlcnQKK19VSV9Eb3VibGVNb2RpZmllcl9vcmlnaW5hbFZhbHVlX2ZlYXR1cmU9VXJzcHJcdTAwZmNuZ2xpY2hlciBXZXJ0CitfVUlfSW50ZWdlck1vZGlmaWVyX29yaWdpbmFsVmFsdWVfZmVhdHVyZT1VcnNwclx1MDBmY25nbGljaGVyIFdlcnQKK19VSV9Mb25nTW9kaWZpZXJfb3JpZ2luYWxWYWx1ZV9mZWF0dXJlPVVyc3ByXHUwMGZjbmdsaWNoZXIgV2VydAorX1VJX1NURU1UaW1lTW9kaWZpZXJfb3JpZ2luYWxWYWx1ZV9mZWF0dXJlPVVyc3ByXHUwMGZjbmdsaWNoZXIgV2VydAorX1VJX0lkZW50aWZpYWJsZUZpbHRlcl90eXBlPUlkZW50aWZpemllcmJhcmVzLUZpbHRlcgorX1VJX0R5bmFtaWNMYWJlbF9pZGVudGlmaWVyX2ZlYXR1cmU9QmV6ZWljaG5lcgorX1VJX0RvdWJsZVZhbHVlTGlzdF90eXBlPURvdWJsZS1XZXJ0LUxpc3RlCitfVUlfRG91YmxlVmFsdWVNYXRyaXhfdHlwZT1Eb3VibGUtV2VydC1NYXRyaXgKK19VSV9Eb3VibGVWYWx1ZV90eXBlPURvdWJsZS1XZXJ0CitfVUlfRG91YmxlVmFsdWVMaXN0X3ZhbHVlc19mZWF0dXJlPVdlcnRlCitfVUlfRG91YmxlVmFsdWVMaXN0X2lkZW50aWZpZXJfZmVhdHVyZT1CZXplaWNobmVyCitfVUlfRG91YmxlVmFsdWVNYXRyaXhfdmFsdWVMaXN0c19mZWF0dXJlPVdlcnRsaXN0ZW4KK19VSV9Eb3VibGVWYWx1ZV9pZGVudGlmaWVyX2ZlYXR1cmU9QmV6ZWljaG5lcgorX1VJX0RvdWJsZVZhbHVlX3ZhbHVlX2ZlYXR1cmU9V2VydAorX1VJX1N0cmluZ1ZhbHVlTGlzdF90eXBlPVN0cmluZy1XZXJ0LUxpc3RlCitfVUlfU3RyaW5nVmFsdWVfdHlwZT1TdHJpbmctV2VydAorX1VJX1N0cmluZ1ZhbHVlTGlzdF92YWx1ZXNfZmVhdHVyZT1XZXJ0ZQorX1VJX1N0cmluZ1ZhbHVlX3ZhbHVlX2ZlYXR1cmU9V2VydAorX1VJX0dyYXBoR2VuZXJhdG9yX3R5cGU9R3JhcGggR2VuZXJhdG9yCitfVUlfTGF0dGljZUdyYXBoR2VuZXJhdG9yX3R5cGU9R2l0dGVyIEdyYXBoIEdlbmVyYXRvcgorX1VJX1NxdWFyZUdyYXBoTGF0dGljZUdlbmVyYXRvcl90eXBlPVF1YWRyYXQtR3JhcGgtR2l0dGVyLUdlbmVyYXRvcgorX1VJX0xhdHRpY2VHcmFwaEdlbmVyYXRvcl94U2l6ZV9mZWF0dXJlPVgtR3JcdTAwZjZcdTAwZGZlCitfVUlfTGF0dGljZUdyYXBoR2VuZXJhdG9yX3lTaXplX2ZlYXR1cmU9WS1Hclx1MDBmNlx1MDBkZmUKK19VSV9MYXR0aWNlR3JhcGhHZW5lcmF0b3JfdXNlTmVhcmVzdE5laWdoYm9yc19mZWF0dXJlPU5cdTAwZTRjaHN0ZSBOYWNoYmFybiBiZW51dHplbgorX1VJX0xhdHRpY2VHcmFwaEdlbmVyYXRvcl91c2VOZXh0TmVhcmVzdE5laWdoYm9yc19mZWF0dXJlPU5cdTAwZTRjaHN0ZSBuXHUwMGU0Y2hzdGUgTmFjaGJhcm4gYmVudXR6ZW4KK19VSV9MYXR0aWNlR3JhcGhHZW5lcmF0b3JfcGVyaW9kaWNCb3VuZGFyaWVzX2ZlYXR1cmU9UGVyaW9kaXNjaGUgR3JlbnplbgorX1VJX0dyYXBoUGFydGl0aW9uZXJfdHlwZT1QYXJ0aXRpb25pZXJlcgorX1VJX0dyYXBoUGFydGl0aW9uZXJfcHJvY2Vzc1JhbmtfZmVhdHVyZT1Qcm96ZXNzcmFuZworX1VJX0dyYXBoUGFydGl0aW9uZXJfbnVtUHJvY2Vzc2VzX2ZlYXR1cmU9QW56YWhsIFByb3plc3NlCitfVUlfR3JhcGhQYXJ0aXRpb25lcl9ub2RlUmFua19mZWF0dXJlPUtub3RlbnJhbmcKK19VSV9HcmFwaFBhcnRpdGlvbmVyX251bU5vZGVzX2ZlYXR1cmU9QW56YWhsIEtub3RlbgorX1VJX1NpbXBsZUdyYXBoUGFydGl0aW9uZXJfdHlwZT1TaW1wbGUgR3JhcGgtUGFydGl0aW9uaWVydW5nCitfVUlfU2ltcGxlR3JhcGhQYXJ0aXRpb25lcl9wcm9jZXNzUmFua19mZWF0dXJlPVByb3plc3NyYW5nCitfVUlfU2ltcGxlR3JhcGhQYXJ0aXRpb25lcl9udW1Qcm9jZXNzZXNfZmVhdHVyZT1BbnphaGwgUHJvemVzc2UKK19VSV9Tb2x2ZXJfcGFydGl0aW9uZXJfZmVhdHVyZT1QYXJ0aXRpb25pZXJlcgorX1VJX0V4Y2hhbmdlX3R5cGU9QXVzdGF1c2NoCitfVUlfRXhjaGFuZ2Vfb3RoZXJOb2RlX2ZlYXR1cmU9QW5kZXJlciBLbm90ZW4KK19VSV9FeGNoYW5nZV9jb3VudF9mZWF0dXJlPUFuemFobAorX1VJX0V4Y2hhbmdlX290aGVyTGFiZWxfZmVhdHVyZT1BbmRlcmVzIExhYmVsCitfVUlfRXhjaGFuZ2VfdHlwZV9mZWF0dXJlPVR5cAorX1VJX0V4Y2hhbmdlVHlwZV9CSVJUSFNfQU5EX0RFQVRIU19saXRlcmFsPUJJUlRIU19BTkRfREVBVEhTCitfVUlfRXhjaGFuZ2VUeXBlX01JR1JBVElPTl9saXRlcmFsPU1JR1JBVElPTgorX1VJX0V4Y2hhbmdlVHlwZV9BR0lOR19saXRlcmFsPUFHSU5HCitfVUlfSW50ZWdyYXRpb25MYWJlbDJfdHlwZT1JbnRlZ3JhdGlvbnNsYWJlbDJMYWVsMgorX1VJX0ludGVncmF0aW9uTGFiZWxWYWx1ZTJfdHlwZT1JbnRlZ3JhdGlvbnNsYWJlbHdlcnQyCitfVUlfSW50ZWdyYXRpb25MYWJlbDJfY3VycmVudFZhbHVlX2ZlYXR1cmU9RGVyemVpdGlnZXIgV2VydAorX1VJX0ludGVncmF0aW9uTGFiZWwyX25leHRWYWx1ZV9mZWF0dXJlPU5cdTAwZTRjaHN0ZXIgV2VydAorX1VJX0ludGVncmF0aW9uTGFiZWwyX2RlbHRhVmFsdWVfZmVhdHVyZT1EZWx0YS1XZXJ0CitfVUlfSW50ZWdyYXRpb25MYWJlbDJfdGVtcFZhbHVlX2ZlYXR1cmU9VGVtcC1XZXJ0CitfVUlfSW50ZWdyYXRpb25MYWJlbDJfcHJvYmVWYWx1ZV9mZWF0dXJlPVByb2JlLVdlcnQKK19VSV9JbnRlZ3JhdGlvbkxhYmVsMl9lcnJvclNjYWxlX2ZlYXR1cmU9R3JcdTAwZjZcdTAwZGZlbm9yZG51bmcgZGVzIEZlaGxlcnMKK19VSV9JbnRlZ3JhdGlvbkxhYmVsMl9kZWNvcmF0b3JfZmVhdHVyZT1EZWtvcmllcmVyCitfVUlfSW50ZWdyYXRpb25MYWJlbDJfbmV4dFZhbHVlVmFsaWRfZmVhdHVyZT1OXHUwMGU0Y2hzdGVyIGdcdTAwZmNsdGlnZXIgV2VydAorX1VJX0ludGVncmF0aW9uTGFiZWwyX2lkZW50aWZpZXJfZmVhdHVyZT1CZXplaWNobmVyCitfVUlfSW50ZWdyYXRpb25MYWJlbF90eXBlPUludGVncmF0aW9uc2xhYmVsCitfVUlfSW50ZWdyYXRpb25MYWJlbFZhbHVlX3R5cGU9SW50ZWdyYXRpb25zbGFiZWx3ZXJ0CitfVUlfSW50ZWdyYXRpb25MYWJlbF9jdXJyZW50VmFsdWVfZmVhdHVyZT1EZXJ6ZWl0aWdlciBXZXJ0CitfVUlfSW50ZWdyYXRpb25MYWJlbF9uZXh0VmFsdWVfZmVhdHVyZT1OXHUwMGU0Y2hzdGVyIFdlcnQKK19VSV9JbnRlZ3JhdGlvbkxhYmVsX2RlbHRhVmFsdWVfZmVhdHVyZT1EZWx0YS1XZXJ0CitfVUlfSW50ZWdyYXRpb25MYWJlbF90ZW1wVmFsdWVfZmVhdHVyZT1UZW1wLVdlcnQKK19VSV9JbnRlZ3JhdGlvbkxhYmVsX3Byb2JlVmFsdWVfZmVhdHVyZT1Qcm9iZS1XZXJ0CitfVUlfSW50ZWdyYXRpb25MYWJlbF9lcnJvclNjYWxlX2ZlYXR1cmU9R3JcdTAwZjZcdTAwZGZlbm9yZG51bmcgZGVzIEZlaGxlcnMKK19VSV9JbnRlZ3JhdGlvbkxhYmVsX2RlY29yYXRvcl9mZWF0dXJlPURla29yaWVyZXIKK19VSV9JbnRlZ3JhdGlvbkxhYmVsX25leHRWYWx1ZVZhbGlkX2ZlYXR1cmU9Tlx1MDBlNGNoc3RlciBnXHUwMGZjbHRpZ2VyIFdlcnQKK19VSV9JbnRlZ3JhdGlvbkxhYmVsX2lkZW50aWZpZXJfZmVhdHVyZT1CZXplaWNobmVyCitfVUlfSW50ZWdyYXRpb25MYWJlbFZhbHVlX2Fycml2YWxzX2ZlYXR1cmU9QW5rdW5mdAorX1VJX0ludGVncmF0aW9uTGFiZWxWYWx1ZV9kZXBhcnR1cmVzX2ZlYXR1cmU9QXVzcmVpc2VuZGUKK19VSV9JbnRlZ3JhdGlvbkRlY29yYXRvcl90eXBlPUludGVncmF0aW9uc2Rla29yYXRvcgorX1VJX0xvZ2dlcl90eXBlPUxvZ2dlcgorX1VJX1NjZW5hcmlvX2xvZ2dlcnNfZmVhdHVyZT1Mb2dnZXJzCitfVUlfVHJpZ2dlcl9hY3Rpb25zX2ZlYXR1cmU9QWN0aW9ucwpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvcGx1Z2luX2tyLnByb3BlcnRpZXMgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9wbHVnaW5fa3IucHJvcGVydGllcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MjM2NDUxCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvcGx1Z2luX2tyLnByb3BlcnRpZXMKQEAgLTAsMCArMSw0OTYgQEAKKyMvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIyAqIENvcHlyaWdodCAoYykgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyMgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisjICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisjICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyMgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorIyAqCisjICogQ29udHJpYnV0b3JzOgorIyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisjIFRvIGNvZGUgZGV2ZWxvcGVyOgorIyAgIERvIE5PVCBjaGFuZ2UgdGhlIHByb3BlcnRpZXMgYmV0d2VlbiB0aGlzIGxpbmUgYW5kIHRoZQorIyAgICIlJSUgRU5EIE9GIFRSQU5TTEFURUQgUFJPUEVSVElFUyAlJSUiIGxpbmUuCisjICAgTWFrZSBhIG5ldyBwcm9wZXJ0eSBuYW1lLCBhcHBlbmQgdG8gdGhlIGVuZCBvZiB0aGUgZmlsZSBhbmQgY2hhbmdlCisjICAgdGhlIGNvZGUgdG8gdXNlIHRoZSBuZXcgcHJvcGVydHkuCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyMgJSUlIEVORCBPRiBUUkFOU0xBVEVEIFBST1BFUlRJRVMgJSUlCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK3BsdWdpbk5hbWU9U1RFTSBcdWNmNTRcdWM1YjQKK3Byb3ZpZGVyTmFtZT1FY2xpcHNlLm9yZworCisjIFdpemFyZHMKK19VSV9OZXdfU1RFTV9XaXphcmRfQ2F0ZWdvcnk9U1RFTQorCisjIFNURU0gTmV3IFByb2plY3QgV2l6YXJkCisKK19VSV9OZXdfU1RFTV9Qcm9qZWN0X1dpemFyZD1TVEVNIFx1ZDUwNFx1Yjg1Y1x1YzgxZFx1ZDJiOAorCisjIEV4dGVuc2lvbiBwb2ludHMKK0VQX0dyYXBoPVNURU0gXHVhZGY4XHViNzk4XHVkNTA0IFx1ZDY1NVx1YzdhNSBcdWM5YzBcdWM4MTAKK0VQX01vZGVsPVNURU0gXHViYWE4XHViMzc4IFx1ZDY1NVx1YzdhNSBcdWM5YzBcdWM4MTAKK0VQX1NjZW5hcmlvPVNURU0gXHVjMmRjXHViMDk4XHViOWFjXHVjNjI0IFx1ZDY1NVx1YzdhNSBcdWM5YzBcdWM4MTAKK0VQX1NlcXVlbmNlcj1TVEVNIFx1YzJkY1x1ZDAwMFx1YzExYyBcdWQ2NTVcdWM3YTUgXHVjOWMwXHVjODEwCitFUF9EZWNvcmF0b3I9U1RFTSBcdWM3YTVcdWMyZGRcdWM3OTAgXHVkNjU1XHVjN2E1IFx1YzljMFx1YzgxMAorRVBfVHJpZ2dlcj1TVEVNIFx1ZDJiOFx1YjlhY1x1YWM3MCBcdWQ2NTVcdWM3YTUgXHVjOWMwXHVjODEwCitFUF9QcmVkaWNhdGU9U1RFTSBcdWMyMjBcdWM1YjQgXHVkNjU1XHVjN2E1IFx1YzljMFx1YzgxMAorRVBfRXhwZXJpbWVudD1TVEVNIFx1YzJlNFx1ZDVkOCBcdWQ2NTVcdWM3YTUgXHVjOWMwXHVjODEwCitFUF9Mb2dnZXI9U1RFTSBsb2dnZXIgZXh0ZW5zaW9uIHBvaW50CisjRVBfTW9kaWZpZXI9IFNURU0gbW9kaWZpZXIgZXh0ZW5zaW9uIHBvaW50CisKKyMgRHVibGluIENvcmUgRmVhdHVyZSBEZXNjcmlwdGlvbnMKKworX1VJX0RDX1ZhbGlkX0Rlc2MgPSBUaGUgZGF0ZSByYW5nZSBvdmVyIHdoaWNoIHRoZSByZXNvdXJjZSBpcyB2YWxpZC4gKGUuZy4sICJzdGFydD0yMDA2LTAzLTI5OyBlbmQ9MjAwNi0wMy0zMDsiKQorCisKKworX1VJX0NyZWF0ZUNoaWxkX3RleHQ9ezB9CitfVUlfQ3JlYXRlQ2hpbGRfdGV4dDI9ezF9IHswfQorX1VJX0NyZWF0ZUNoaWxkX3RleHQzPXsxfQorX1VJX0NyZWF0ZUNoaWxkX3Rvb2x0aXA9ezF9IFx1YWUzMFx1YjJhNSBcdWQ1NThcdWM1ZDAgXHVjMGM4IHswfSBcdWI5Y2NcdWI0ZTRcdWFlMzAKK19VSV9DcmVhdGVDaGlsZF9kZXNjcmlwdGlvbj1cdWMxMjBcdWQwZGRcdWQ1NWMgezJ9XHVjNzU4IHsxfSBcdWFlMzBcdWIyYTVcdWM1ZDAgXHViMzAwXHVkNTVjIFx1ZDYxNVx1YzJkZCB7MH1cdWM3NTggXHVjMGM4XHViODVjXHVjNmI0IENoaWxkXHViOTdjIFx1YjljY1x1YjRlZFx1YjJjOFx1YjJlNC4KK19VSV9DcmVhdGVTaWJsaW5nX2Rlc2NyaXB0aW9uPVx1YmQ4MFx1YmFhOFx1Yzc1OCBcdWMxMjBcdWQwZGRcdWI0MWMgezJ9XHVjNWQwXHVjMTFjIHsxfSBcdWFlMzBcdWIyYTVcdWM1ZDAgXHViMzAwXHVkNTVjIFx1ZDYxNVx1YzJkZCB7MH1cdWM3NTggXHVjMGM4XHViODVjXHVjNmI0IFx1ZDYxNVx1YzgxY1x1Yjk3YyBcdWI5Y2NcdWI0ZWRcdWIyYzhcdWIyZTQuCisKK19VSV9Qcm9wZXJ0eURlc2NyaXB0b3JfZGVzY3JpcHRpb249ezF9IFx1YzkxMSB7MH0KKworX1VJX0R1YmxpbkNvcmVfdHlwZT1cdWIzNTRcdWJlMTRcdWI5YjAgXHVjZjU0XHVjNWI0CitfVUlfSWRlbnRpZmlhYmxlX3R5cGU9XHVjMmRkXHViY2M0XHVhYzAwXHViMmE1XHVkNTY4CitfVUlfVW5rbm93bl90eXBlPVx1YWMxY1x1Y2NiNAorCitfVUlfVW5rbm93bl9kYXRhdHlwZT1cdWFjMTIKKworX1VJX0R1YmxpbkNvcmVfdGl0bGVfZmVhdHVyZT1cdWM4MWNcdWJhYTkKK19VSV9EdWJsaW5Db3JlX2lkZW50aWZpZXJfZmVhdHVyZT1cdWMyZGRcdWJjYzRcdWM3OTAKK19VSV9EdWJsaW5Db3JlX2Rlc2NyaXB0aW9uX2ZlYXR1cmU9XHVjMTI0XHViYTg1CitfVUlfRHVibGluQ29yZV9jcmVhdG9yX2ZlYXR1cmU9XHVjYzNkXHVjODcwXHVjNzkwCitfVUlfRHVibGluQ29yZV9kYXRlX2ZlYXR1cmU9XHViMGEwXHVjOWRjCitfVUlfRHVibGluQ29yZV9mb3JtYXRfZmVhdHVyZT1cdWQzZWNcdWI5ZjcKK19VSV9EdWJsaW5Db3JlX3B1Ymxpc2hlcl9mZWF0dXJlPVx1YmMxY1x1ZDU4OVx1Yzc5MAorX1VJX0R1YmxpbkNvcmVfY292ZXJhZ2VfZmVhdHVyZT1cdWM4MDFcdWM2YTkgXHViYzk0XHVjNzA0CitfVUlfRHVibGluQ29yZV9jb250cmlidXRvcl9mZWF0dXJlPVx1YWUzMFx1YmQ4MFx1Yzc5MAorX1VJX0R1YmxpbkNvcmVfcmVsYXRpb25fZmVhdHVyZT1cdWFkMDBcdWFjYzQKK19VSV9EdWJsaW5Db3JlX3JpZ2h0c19mZWF0dXJlPVx1YWQ4Y1x1YjlhYworX1VJX0R1YmxpbkNvcmVfc291cmNlX2ZlYXR1cmU9XHVjZDljXHVjYzk4CitfVUlfRHVibGluQ29yZV9zdWJqZWN0X2ZlYXR1cmU9XHVjODFjXHViYWE5CitfVUlfRHVibGluQ29yZV90eXBlX2ZlYXR1cmU9XHVjNzIwXHVkNjE1CitfVUlfRHVibGluQ29yZV9sYW5ndWFnZV9mZWF0dXJlPVx1YzViOFx1YzViNAorX1VJX0R1YmxpbkNvcmVfYmlibGlvZ3JhcGhpY0NpdGF0aW9uX2ZlYXR1cmU9XHViM2M0XHVjMTFjIFx1Yzc3OFx1YzZhOQorX1VJX0R1YmxpbkNvcmVfY3JlYXRlZF9mZWF0dXJlPVx1YzBkZFx1YzEzMVx1YjQyOAorX1VJX0R1YmxpbkNvcmVfbGljZW5zZV9mZWF0dXJlPVx1Yjc3Y1x1Yzc3NFx1YzEzY1x1YzJhNAorX1VJX0R1YmxpbkNvcmVfcmVxdWlyZWRfZmVhdHVyZT1cdWQ1NDRcdWMyMTggXHVjMGFjXHVkNTZkCitfVUlfRHVibGluQ29yZV9zcGF0aWFsX2ZlYXR1cmU9XHVhY2Y1XHVhYzA0XHVjNzU4CitfVUlfRHVibGluQ29yZV92YWxpZF9mZWF0dXJlPVx1YzcyMFx1ZDZhOFx1ZDU1YworX1VJX0lkZW50aWZpYWJsZV91UklfZmVhdHVyZT1VUkkKK19VSV9JZGVudGlmaWFibGVfdHlwZVVSSV9mZWF0dXJlPVx1YzcyMFx1ZDYxNSBVUkkKK19VSV9JZGVudGlmaWFibGVfZHVibGluQ29yZV9mZWF0dXJlPVx1YjM1NFx1YmUxNFx1YjliMCBcdWNmNTRcdWM1YjQKK19VSV9Vbmtub3duX2ZlYXR1cmU9XHVjOWMwXHVjODE1XHViNDE4XHVjOWMwIFx1YzU0YVx1Yzc0YworCisKK19VSV9Db21tb25FZGl0b3JfbWVudT0mQ29tbW9uIEVkaXRvcgorCitfVUlfQ3JlYXRlQ2hpbGRfbWVudV9pdGVtPSZOZXcgQ2hpbGQKK19VSV9DcmVhdGVTaWJsaW5nX21lbnVfaXRlbT1OJiAgXHVkNjE1XHVjODFjIFx1Yzc5MFx1YjllNAorCitfVUlfU2hvd1Byb3BlcnRpZXNWaWV3X21lbnVfaXRlbT1cdWQ0NWNcdWMyZGMgXHViYzBmIFx1YzE4ZFx1YzEzMVx1YmNmNFx1YWUzMAorX1VJX1JlZnJlc2hWaWV3ZXJfbWVudV9pdGVtPSZSZWZyZXNoCisKK19VSV9TZWxlY3Rpb25QYWdlX2xhYmVsPVx1YzEyMFx1ZDBkZAorX1VJX1BhcmVudFBhZ2VfbGFiZWw9XHViZDgwXHViYWE4CitfVUlfTGlzdFBhZ2VfbGFiZWw9XHViYWE5XHViODVkCitfVUlfVHJlZVBhZ2VfbGFiZWw9XHViMDk4XHViYjM0CitfVUlfVGFibGVQYWdlX2xhYmVsPVx1ZDE0Y1x1Yzc3NFx1YmUxNAorX1VJX1RyZWVXaXRoQ29sdW1uc1BhZ2VfbGFiZWw9XHViMDk4XHViYjM0XHVjNjQwIFx1YzVmNAorX1VJX09iamVjdENvbHVtbl9sYWJlbD1cdWFjMWNcdWNjYjQKK19VSV9TZWxmQ29sdW1uX2xhYmVsPVx1YzE0MFx1ZDUwNAorCitfVUlfTm9PYmplY3RTZWxlY3RlZD1cdWM1NDRcdWJiMzRcdWFjODNcdWIzYzQgXHVjNTQ4IFx1YzEyMFx1ZDBkZFx1ZDU2OAorX1VJX1NpbmdsZU9iamVjdFNlbGVjdGVkPVx1YzEyMFx1ZDBkZFx1ZDU1YyBcdWFjMWRcdWNjYjQgOiB7MH0KK19VSV9NdWx0aU9iamVjdFNlbGVjdGVkPVx1YzEyMFx1ZDBkZFx1YjQxYyB7MH0gXHVhYzFkXHVjY2I0CisKK19VSV9PcGVuRWRpdG9yRXJyb3JfbGFiZWw9XHVjNjI0XHVkNTA4IFx1YzVkMFx1YjUxNFx1ZDEzMAorCitfVUlfV2l6YXJkX2NhdGVnb3J5PVx1YzYwOFx1YzgxYyBFTUYgXHViYWE4XHViMzc4IFx1YzBkZFx1YzEzMSBcdWI5YzhcdWJjOTVcdWMwYWMKKworX1VJX0NyZWF0ZU1vZGVsRXJyb3JfbWVzc2FnZT1cdWQzMGNcdWM3N2MgJ3swfSAiXHVjNWQwXHVjMTFjIFx1YmIzOFx1YzgxYyBcdWJjMWNcdWMwZGQKKworX1VJX0NvbW1vbk1vZGVsV2l6YXJkX2xhYmVsPVx1Yzc3Y1x1YmMxOCBcdWJhYThcdWIzNzgKK19VSV9Db21tb25Nb2RlbFdpemFyZF9kZXNjcmlwdGlvbj1cdWMwYzhcdWI4NWNcdWM2YjQgXHVhY2Y1XHVkMWI1IFx1YmFhOFx1YjM3OCBcdWI5Y2NcdWI0ZTRcdWFlMzAKKworX1VJX0NvbW1vbkVkaXRvcl9sYWJlbD1cdWM3N2NcdWJjMTggXHViYWE4XHViMzc4IFx1ZDNiOFx1YzlkMVx1YWUzMAorCitfVUlfQ29tbW9uRWRpdG9yRmlsZW5hbWVEZWZhdWx0QmFzZT1cdWIwOThcdWM3NTgKK19VSV9Db21tb25FZGl0b3JGaWxlbmFtZUV4dGVuc2lvbj1cdWFjZjVcdWQxYjVcdWM3NTgKKworX1VJX1dpemFyZF9sYWJlbD1cdWMwYzhcdWI4NWNcdWM2YjQKKworX1dBUk5fRmlsZW5hbWVFeHRlbnNpb249XHVkMzBjXHVjNzdjIFx1Yzc3NFx1Yjk4NFx1Yzc0MCAiLnswfSJcdWI4NWMgXHViMDVkXHViMDk4XHVjNTdjXHVkNTY4LiAKKworX1VJX01vZGVsT2JqZWN0PVx1YmFhOFx1YjM3OCBcdWFjMWRcdWNjYjQKK19VSV9YTUxFbmNvZGluZz1YTUwgXHVjNzc4XHVjZjU0XHViNTI5CitfVUlfWE1MRW5jb2RpbmdDaG9pY2VzPVVURiAtIDggQVNDSUkgVVRGIC0gMTYgVVRGIC0gMTZCRSBVVEYgLSAxNkxFIElTTyAtIDg4NTkgLSAxCitfVUlfV2l6YXJkX2luaXRpYWxfb2JqZWN0X2Rlc2NyaXB0aW9uPVx1YzBkZFx1YzEzMVx1ZDU2MCBcdWJhYThcdWIzNzggXHVhYzFjXHVjY2I0IFx1YzEyMFx1ZDBkZAorCitfVUlfRmlsZUNvbmZsaWN0X2xhYmVsPVx1ZDMwY1x1Yzc3YyBcdWNkYTlcdWIzY2MKK19XQVJOX0ZpbGVDb25mbGljdD1cdWM4MDBcdWM3YTVcdWI0MThcdWM5YzAgXHVjNTRhXHVjNzQwIFx1YzBhY1x1ZDU2ZFx1YjRlNFx1Yzc3NCBcdWQzYjhcdWM5ZDFcdWFlMzAgXHVjNjc4XHViZDgwXHVjNzU4IFx1YmNjMFx1YWNiZCBcdWMwYWNcdWQ1NmRcdWI0ZTRcdWFjZmMgXHVjZGE5XHViM2NjXHVkNTY4LiBcdWM3NzQgXHVkM2I4XHVjOWQxXHVhZTMwXHVjNzU4IFx1YmNjMFx1YWNiZCBcdWMwYWNcdWQ1NmRcdWI0ZTRcdWM3NDQgXHVjZGU4XHVjMThjIFx1ZDU1OFx1YzJkY1x1YWNhMFx1YzJiNVx1YjJjOFx1YWU0Yz8KK19VSV9EeW5hbWljTGFiZWxfdHlwZT1cdWIzZDlcdWM4MDEgXHViNzdjXHViY2E4CitfVUlfRHluYW1pY05vZGVMYWJlbF90eXBlPVx1YjNkOVx1YzgwMSBcdWIxNzhcdWI0ZGMgXHViNzdjXHViY2E4CitfVUlfRWRnZV90eXBlPVx1YWMwMFx1YzdhNVx1Yzc5MFx1YjlhYworX1VJX0dyYXBoX3R5cGU9XHVhZGY4XHViNzk4XHVkNTA0CitfVUlfTGFiZWxfdHlwZT1cdWI3N2NcdWJjYTgKK19VSV9MYWJlbFZhbHVlX3R5cGU9XHViNzdjXHViY2E4IFx1YWMxMgorX1VJX05vZGVfdHlwZT1cdWIxNzhcdWI0ZGMKK19VSV9Ob2RlTGFiZWxfdHlwZT1cdWIxNzhcdWI0ZGMgXHViNzdjXHViY2E4CitfVUlfU3RhdGljTm9kZUxhYmVsX3R5cGU9XHVjODE1XHVjODAxIFx1YjE3OFx1YjRkYyBcdWI3N2NcdWJjYTgKK19VSV9VbnJlc29sdmVkSWRlbnRpZmlhYmxlX3R5cGU9XHVkNjU1XHVjNzc4XHViNDE4XHVjOWMwIFx1YzU0YVx1Yzc0MCBcdWMyZGRcdWJjYzRcdWM3OTAKK19VSV9VUklUb0lkZW50aWZpYWJsZU1hcEVudHJ5X3R5cGU9XHVjMmRkXHViY2M0XHVjNzkwIFx1YzljMFx1YjNjNCBcdWQ1NmRcdWJhYTlcdWM1ZDAgVVJJCitfVUlfU2FuaXR5Q2hlY2tlcl90eXBlPVx1YzBjMVx1ZDBkYyBcdWM4MTBcdWFjODBcdWFlMzAKK19VSV9EZWNvcmF0b3JfdHlwZT1cdWM3YTVcdWMyZGRcdWM3OTAKK19VSV9FZGdlRGVjb3JhdG9yX3R5cGU9XHVhYzAwXHVjN2E1XHVjNzkwXHViOWFjIFx1YzdhNVx1YzJkZFx1Yzc5MAorX1VJX0dyYXBoRGVjb3JhdG9yX3R5cGU9XHVhZGY4XHViNzk4XHVkNTA0IFx1YzJlNFx1YjBiNCBcdWM3YTVcdWMyZGRcdWM3OTAKK19VSV9Nb2RlbF90eXBlPVx1YmFhOFx1YjM3OAorX1VJX05vZGVEZWNvcmF0b3JfdHlwZT1cdWIxNzhcdWI0ZGMgXHVjN2E1XHVjMmRkXHVjNzkwCitfVUlfU1RFTVRpbWVfdHlwZT1TVEVNIFx1YzJkY1x1YWMwNAorX1VJX1NjZW5hcmlvX3R5cGU9XHVjMmRjXHViMDk4XHViOWFjXHVjNjI0CitfVUlfU2VxdWVuY2VyX3R5cGU9XHVjMmRjXHVkMDAwXHVjMTFjCitfVUlfU2VxdWVudGlhbFNlcXVlbmNlcl90eXBlPVx1YzIxY1x1Y2MyOCBcdWMyZGNcdWQwMDBcdWMxMWMKK19VSV9EeW5hbWljTGFiZWxfbmV4dFZhbHVlVmFsaWRfZmVhdHVyZT1cdWIyZTRcdWM3NGMgXHVjNzIwXHVkNmE4IFx1YWMxMgorX1VJX0R5bmFtaWNMYWJlbF9uZXh0VmFsdWVfZmVhdHVyZT1cdWIyZTRcdWM3NGMgXHVhYzEyCitfVUlfRWRnZV9hX2ZlYXR1cmU9CitfVUlfRWRnZV9ub2RlQVVSSV9mZWF0dXJlPVx1YjE3OFx1YjRkYyBBVVJJCitfVUlfRWRnZV9iX2ZlYXR1cmU9QgorX1VJX0VkZ2Vfbm9kZUJVUklfZmVhdHVyZT1cdWIxNzhcdWI0ZGMgQlVSSQorX1VJX0VkZ2VfbGFiZWxfZmVhdHVyZT1cdWI3N2NcdWJjYTgKK19VSV9FZGdlX2RpcmVjdGVkX2ZlYXR1cmU9XHVkMWI1XHVjODFjXHViNDI4CitfVUlfR3JhcGhfZWRnZXNfZmVhdHVyZT1cdWFjMDBcdWM3YTVcdWM3OTBcdWI5YWMKK19VSV9HcmFwaF9ub2Rlc19mZWF0dXJlPVx1YjE3OFx1YjRkYworX1VJX0dyYXBoX2dyYXBoTGFiZWxzX2ZlYXR1cmU9XHVhZGY4XHViNzk4XHVkNTA0IFx1Yjc3Y1x1YmNhOAorX1VJX0dyYXBoX25vZGVMYWJlbHNfZmVhdHVyZT1cdWIxNzhcdWI0ZGMgXHViNzdjXHViY2E4CitfVUlfR3JhcGhfZHluYW1pY0xhYmVsc19mZWF0dXJlPVx1YjNkOVx1YzgwMSBcdWI3N2NcdWJjYThcdWI0ZTQKK19VSV9HcmFwaF9udW1FZGdlc19mZWF0dXJlPU5VTSBcdWFjMDBcdWM3YTVcdWM3OTBcdWI5YWMKK19VSV9HcmFwaF9udW1Ob2Rlc19mZWF0dXJlPU5VTSBcdWIxNzhcdWI0ZGMKK19VSV9HcmFwaF9udW1HcmFwaExhYmVsc19mZWF0dXJlPU5VTSBcdWFkZjhcdWI3OThcdWQ1MDQgXHViNzdjXHViY2E4CitfVUlfR3JhcGhfbnVtTm9kZUxhYmVsc19mZWF0dXJlPU5VTSBcdWIxNzhcdWI0ZGMgXHViNzdjXHViY2E4CitfVUlfR3JhcGhfbnVtRHluYW1pY0xhYmVsc19mZWF0dXJlPU5VTSBcdWIzZDlcdWM4MDEgXHViNzdjXHViY2E4CitfVUlfR3JhcGhfdW5yZXNvbHZlZElkZW50aWZpYWJsZXNfZmVhdHVyZT1cdWQ2NTVcdWM3NzhcdWI0MThcdWM5YzAgXHVjNTRhXHVjNzQwIFx1YzJkZFx1YmNjNFx1Yzc5MAorX1VJX0xhYmVsX3VSSU9mSWRlbnRpZmlhYmxlVG9CZUxhYmVsZWRfZmVhdHVyZT1cdWI3N2NcdWJjYThcdWM3NDQgXHVkNTYwIFx1YzJkZFx1YmNjNFx1Yzc5MFx1Yzc1OCBVUkkKK19VSV9MYWJlbF9jdXJyZW50VmFsdWVfZmVhdHVyZT1cdWQ2MDRcdWM3YWMgXHVhYzAwXHVjZTU4CitfVUlfTm9kZV9lZGdlc19mZWF0dXJlPVx1YWMwMFx1YzdhNVx1Yzc5MFx1YjlhYworX1VJX05vZGVfbGFiZWxzX2ZlYXR1cmU9XHViNzdjXHViY2E4CitfVUlfTm9kZUxhYmVsX25vZGVfZmVhdHVyZT1cdWIxNzhcdWI0ZGMKK19VSV9VbnJlc29sdmVkSWRlbnRpZmlhYmxlX3NjZW5hcmlvX2ZlYXR1cmU9XHVjMmRjXHViMDk4XHViOWFjXHVjNjI0CitfVUlfVW5yZXNvbHZlZElkZW50aWZpYWJsZV9tb2RlbF9mZWF0dXJlPVx1YmFhOFx1YjM3OAorX1VJX1VucmVzb2x2ZWRJZGVudGlmaWFibGVfZ3JhcGhfZmVhdHVyZT1cdWFkZjhcdWI3OThcdWQ1MDQKK19VSV9VbnJlc29sdmVkSWRlbnRpZmlhYmxlX2lkZW50aWZpYWJsZV9mZWF0dXJlPVx1YzJkZFx1YmNjNFx1YWMwMFx1YjJhNVx1ZDU2OAorX1VJX1VucmVzb2x2ZWRJZGVudGlmaWFibGVfdW5yZXNvbHZlZFVSSV9mZWF0dXJlPVx1ZDY1NVx1Yzc3OFx1YjQxOFx1YzljMCBcdWM1NGFcdWM3NDAgVVJJCitfVUlfVW5yZXNvbHZlZElkZW50aWZpYWJsZV9maWVsZE5hbWVfZmVhdHVyZT1cdWQ1NDRcdWI0ZGMgXHVjNzc0XHViOTg0CitfVUlfVVJJVG9JZGVudGlmaWFibGVNYXBFbnRyeV9rZXlfZmVhdHVyZT1LZXkKK19VSV9VUklUb0lkZW50aWZpYWJsZU1hcEVudHJ5X3ZhbHVlX2ZlYXR1cmU9XHVhYzEyCitfVUlfRGVjb3JhdG9yX2luZGV4X2ZlYXR1cmU9XHVjMGM5XHVjNzc4CitfVUlfRGVjb3JhdG9yX2xhYmVsc1RvVXBkYXRlX2ZlYXR1cmU9XHVjNWUxXHViMzcwXHVjNzc0XHVkMmI4XHVkNTYwIFx1Yjc3Y1x1YmNhOAorX1VJX01vZGVsX21vZGVsc19mZWF0dXJlPVx1YmFhOFx1YjM3OAorX1VJX01vZGVsX2dyYXBoc19mZWF0dXJlPVx1YWRmOFx1Yjc5OFx1ZDUwNAorX1VJX01vZGVsX2dyYXBoRGVjb3JhdG9yc19mZWF0dXJlPVx1YWRmOFx1Yjc5OFx1ZDUwNCBcdWM3YTVcdWMyZGRcdWM3OTAKK19VSV9Nb2RlbF9ub2RlRGVjb3JhdG9yc19mZWF0dXJlPVx1YjE3OFx1YjRkYyBcdWM3YTVcdWMyZGRcdWM3OTAKK19VSV9Nb2RlbF9lZGdlRGVjb3JhdG9yc19mZWF0dXJlPVx1YWMwMFx1YzdhNVx1Yzc5MFx1YjlhYyBcdWM3YTVcdWMyZGRcdWM3OTAKK19VSV9Nb2RlbF9jYW5vbmljYWxHcmFwaERlY29yYXRvcnNfZmVhdHVyZT1cdWQ0NWNcdWM5MDAgXHVhZGY4XHViNzk4XHVkNTA0IFx1YzdhNVx1YzJkZFx1Yzc5MAorX1VJX01vZGVsX2Nhbm9uaWNhbE5vZGVEZWNvcmF0b3JzX2ZlYXR1cmU9XHVkNDVjXHVjOTAwIFx1YjE3OFx1YjRkYyBcdWM3YTVcdWMyZGRcdWM3OTAKK19VSV9Nb2RlbF9jYW5vbmljYWxFZGdlRGVjb3JhdG9yc19mZWF0dXJlPVx1ZDQ1Y1x1YzkwMCBcdWFjMDBcdWM3YTVcdWM3OTBcdWI5YWMgXHVjN2E1XHVjMmRkXHVjNzkwCitfVUlfU1RFTVRpbWVfdGltZV9mZWF0dXJlPVx1YzJkY1x1YWMwNAorX1VJX1NjZW5hcmlvX21vZGVsX2ZlYXR1cmU9XHViYWE4XHViMzc4CitfVUlfU2NlbmFyaW9fc2VxdWVuY2VyX2ZlYXR1cmU9XHVjMmRjXHVkMDAwXHVjMTFjCitfVUlfU2NlbmFyaW9fc2NlbmFyaW9EZWNvcmF0b3JzX2ZlYXR1cmU9XHVjMmRjXHViMDk4XHViOWFjXHVjNjI0IFx1YzdhNVx1YzJkZFx1Yzc5MAorX1VJX1NjZW5hcmlvX2Nhbm9uaWNhbEdyYXBoX2ZlYXR1cmU9XHVkNDVjXHVjOTAwIFx1YWRmOFx1Yjc5OFx1ZDUwNAorX1VJX1NjZW5hcmlvX2Nhbm9uaWNhbE1vZGVsRGVjb3JhdG9yc19mZWF0dXJlPVx1ZDQ1Y1x1YzkwMCBcdWJhYThcdWIzNzggXHVjN2E1XHVjMmRkXHVjNzkwCitfVUlfU2NlbmFyaW9fY2Fub25pY2FsU2NlbmFyaW9EZWNvcmF0b3JzX2ZlYXR1cmU9XHVkNDVjXHVjOTAwIFx1YzJkY1x1YjA5OFx1YjlhY1x1YzYyNCBcdWM3YTVcdWMyZGRcdWM3OTAKK19VSV9TY2VuYXJpb190aXRsZV9mZWF0dXJlPVx1YzgxY1x1YmFhOQorX1VJX1NlcXVlbmNlcl9zdGFydFRpbWVfZmVhdHVyZT1cdWMyZGNcdWM3OTEgXHVjMmRjXHVhYzA0CitfVUlfU2VxdWVuY2VyX2VuZFRpbWVfZmVhdHVyZT1cdWM4ODVcdWI4Y2MgXHVjMmRjXHVhYzA0CitfVUlfU2VxdWVuY2VyX2N1cnJlbnRUaW1lX2ZlYXR1cmU9XHVkNjA0XHVjN2FjIFx1YzJkY1x1YWMwNAorX1VJX1NlcXVlbmNlcl9uZXh0VGltZV9mZWF0dXJlPVx1YjJlNFx1Yzc0YyBcdWMyZGNcdWFjMDQKK19VSV9TZXF1ZW5jZXJfdGltZURlbHRhX2ZlYXR1cmU9XHVjMmRjXHVhYzA0IFx1YjM3OFx1ZDBjMAorX1VJX1NlcXVlbmNlcl9kdXJhdGlvbl9mZWF0dXJlPVx1Yzg3NFx1YzE4ZCBcdWFlMzBcdWFjMDQKK19VSV9TZXF1ZW5jZXJfdGltZVRvU3RvcF9mZWF0dXJlPVx1YzkxMVx1YzljMCBcdWMyZGNcdWFjMDQKK19VSV9TZXF1ZW5jZXJfd29ya0NvbXBsZXRlX2ZlYXR1cmU9XHVjNjQ0XHViOGNjIFx1Yzc5MVx1YzVjNQorX1VJX1NlcXVlbmNlcl93b3JrSW5jcmVtZW50X2ZlYXR1cmU9XHVjNzkxXHVjNWM1IFx1YjJlOFx1YzcwNAorX1VJX1NlcXVlbnRpYWxTZXF1ZW5jZXJfdGltZUluY3JlbWVudF9mZWF0dXJlPVx1YzJkY1x1YWMwNCBcdWM5OWRcdWFjMDAKK19VSV9HcmFwaEVkaXRvcl9tZW51PSZHcmFwaCBFZGl0b3IKK19VSV9Nb2RlbEVkaXRvcl9tZW51PSZNb2RlbCBFZGl0b3IKK19VSV9TY2VuYXJpb0VkaXRvcl9tZW51PSZTY2VuYXJpbyBFZGl0b3IKKworX1VJX0dyYXBoTW9kZWxXaXphcmRfbGFiZWw9XHVhZGY4XHViNzk4XHVkNTA0IFx1YmFhOFx1YjM3OAorX1VJX0dyYXBoTW9kZWxXaXphcmRfZGVzY3JpcHRpb249XHVjMGM4XHViODVjXHVjNmI0IFx1YWRmOFx1Yjc5OFx1ZDUwNCBcdWJhYThcdWIzNzhcdWM3NDQgXHVjMGRkXHVjMTMxCisKK19VSV9HcmFwaEVkaXRvcl9sYWJlbD1cdWFkZjhcdWI3OThcdWQ1MDQgXHViYWE4XHViMzc4IFx1ZDNiOFx1YzlkMVx1YWUzMAorCitfVUlfR3JhcGhFZGl0b3JGaWxlbmFtZURlZmF1bHRCYXNlPVx1YjA5OFx1Yzc1OAorX1VJX0dyYXBoRWRpdG9yRmlsZW5hbWVFeHRlbnNpb249XHVhZGY4XHViNzk4XHVkNTA0CisKK19VSV9Nb2RlbE1vZGVsV2l6YXJkX2xhYmVsPVx1YmFhOFx1YjM3OCBcdWJhYThcdWIzNzgKK19VSV9Nb2RlbE1vZGVsV2l6YXJkX2Rlc2NyaXB0aW9uPVx1YzBjOFx1Yjg1Y1x1YzZiNCBcdWJhYThcdWIzNzggXHViYWE4XHViMzc4IFx1YjljY1x1YjRlNFx1YWUzMAorCitfVUlfTW9kZWxFZGl0b3JfbGFiZWw9XHViYWE4XHViMzc4IFx1YmFhOFx1YjM3OCBcdWQzYjhcdWM5ZDFcdWFlMzAKKworX1VJX01vZGVsRWRpdG9yRmlsZW5hbWVEZWZhdWx0QmFzZT1cdWIwOThcdWM3NTgKK19VSV9Nb2RlbEVkaXRvckZpbGVuYW1lRXh0ZW5zaW9uPVx1YmFhOFx1YjM3OAorCitfVUlfU2NlbmFyaW9Nb2RlbFdpemFyZF9sYWJlbD1cdWMyZGNcdWIwOThcdWI5YWNcdWM2MjQgXHViYWE4XHViMzc4CitfVUlfU2NlbmFyaW9Nb2RlbFdpemFyZF9kZXNjcmlwdGlvbj1cdWMwYzhcdWI4NWNcdWM2YjQgXHVjMmRjXHViMDk4XHViOWFjXHVjNjI0IFx1YmFhOFx1YjM3OCBcdWI5Y2NcdWI0ZTRcdWFlMzAKKworX1VJX1NjZW5hcmlvRWRpdG9yX2xhYmVsPVx1YzJkY1x1YjA5OFx1YjlhY1x1YzYyNCBcdWJhYThcdWIzNzggXHVkM2I4XHVjOWQxXHVhZTMwCisKK19VSV9TY2VuYXJpb0VkaXRvckZpbGVuYW1lRGVmYXVsdEJhc2U9XHViMDk4XHVjNzU4CitfVUlfU2NlbmFyaW9FZGl0b3JGaWxlbmFtZUV4dGVuc2lvbj1cdWMyZGNcdWIwOThcdWI5YWNcdWM2MjQKKworX1VJX0R5bmFtaWNMYWJlbF9kZWNvcmF0b3JfZmVhdHVyZT1cdWM3YTVcdWMyZGRcdWM3OTAKK19VSV9HcmFwaF9kZWNvcmF0b3JzX2ZlYXR1cmU9XHVjN2E1XHVjMmRkXHVjNzkwXHViNGU0CitfVUlfRGVjb3JhdG9yX2dyYXBoX2ZlYXR1cmU9XHVhZGY4XHViNzk4XHVkNTA0CitfVUlfTGFiZWxfaWRlbnRpZmlhYmxlX2ZlYXR1cmU9XHVjMmRkXHViY2M0XHVhYzAwXHViMmE1XHVkNTY4CitfVUlfRHluYW1pY0VkZ2VMYWJlbF90eXBlPVx1YjNkOVx1YzgwMSBcdWFjMDBcdWM3YTVcdWM3OTBcdWI5YWMgXHViNzdjXHViY2E4CitfVUlfRWRnZUxhYmVsX3R5cGU9XHVhYzAwXHVjN2E1IFx1Yjc3Y1x1YmNhOAorX1VJX1N0YXRpY0VkZ2VMYWJlbF90eXBlPVx1YzgxNVx1YzgwMSBcdWFjMDBcdWM3YTVcdWM3OTBcdWI5YWMgXHViNzdjXHViY2E4CitfVUlfRWRnZUxhYmVsX2VkZ2VfZmVhdHVyZT1cdWFjMDBcdWM3YTVcdWM3OTBcdWI5YWMKK19VSV9SZWFsVGltZVNlcXVlbmNlcl90eXBlPVx1YzJlNFx1YzJkY1x1YWMwNCBcdWMyZGNcdWQwMDBcdWMxMWMKK19VSV9TZXF1ZW5jZXJfY3ljbGVfZmVhdHVyZT1cdWM4ZmNcdWFlMzAKK19VSV9VUklUb0VkZ2VNYXBFbnRyeV90eXBlPVx1YWMwMFx1YzdhNVx1Yzc5MFx1YjlhYyBcdWI5ZjUgXHVkNTZkXHViYWE5XHVjNWQwIFVSSQorX1VJX1VSSVRvTm9kZU1hcEVudHJ5X3R5cGU9XHViMTc4XHViNGRjIFx1YzljMFx1YjNjNCBcdWQ1NmRcdWJhYTlcdWM1ZDAgVVJJCitfVUlfVVJJVG9MYWJlbE1hcEVudHJ5X3R5cGU9XHVjOWMwXHViM2M0IFx1ZDU2ZFx1YmFhOSBcdWI3N2NcdWJjYTggVVJJCitfVUlfVVJJVG9Ob2RlTGFiZWxNYXBFbnRyeV90eXBlPVx1YjE3OFx1YjRkYyBcdWI3N2NcdWJjYTggXHVjOWMwXHViM2M0IFx1ZDU2ZFx1YmFhOVx1YzVkMCBVUkkKK19VSV9VUklUb0VkZ2VNYXBFbnRyeV9rZXlfZmVhdHVyZT1LZXkKK19VSV9VUklUb0VkZ2VNYXBFbnRyeV92YWx1ZV9mZWF0dXJlPVx1YWMxMgorX1VJX1VSSVRvTm9kZU1hcEVudHJ5X2tleV9mZWF0dXJlPUtleQorX1VJX1VSSVRvTm9kZU1hcEVudHJ5X3ZhbHVlX2ZlYXR1cmU9XHVhYzEyCitfVUlfVVJJVG9MYWJlbE1hcEVudHJ5X2tleV9mZWF0dXJlPUtleQorX1VJX1VSSVRvTGFiZWxNYXBFbnRyeV92YWx1ZV9mZWF0dXJlPVx1YWMxMgorX1VJX1VSSVRvTm9kZUxhYmVsTWFwRW50cnlfa2V5X2ZlYXR1cmU9S2V5CitfVUlfVVJJVG9Ob2RlTGFiZWxNYXBFbnRyeV92YWx1ZV9mZWF0dXJlPVx1YWMxMgorX1VJX0Jvb2xlYW5TZXF1ZW5jZU1vZGlmaWVyX3R5cGU9Qm9vbGVhbiBcdWMyMWNcdWMxMWMgXHVjMjE4XHVjODE1XHVjNzkwCitfVUlfRG91YmxlUmFuZ2VNb2RpZmllcl90eXBlPVx1YjM1NFx1YmUxNCBcdWJjOTRcdWM3MDQgXHVjMjE4XHVjODE1XHVjNzkwCitfVUlfRG91YmxlU2VxdWVuY2VNb2RpZmllcl90eXBlPVx1YjM1NFx1YmUxNCBcdWMyZGNcdWQwMDBcdWMyYTQgXHVjMjE4XHVjODE1XHVjNzkwCitfVUlfRXhwZXJpbWVudF90eXBlPVx1YzJlNFx1ZDVkOAorX1VJX0ZlYXR1cmVNb2RpZmllcl90eXBlPVx1YWUzMFx1YjJhNSBcdWMyMThcdWM4MTVcdWM3OTAKK19VSV9JbnRlZ2VyUmFuZ2VNb2RpZmllcl90eXBlPVx1YzgxNVx1YzIxOCBcdWJjOTRcdWM3MDQgXHVjMjE4XHVjODE1XHVjNzkwCitfVUlfSW50ZWdlclNlcXVlbmNlTW9kaWZpZXJfdHlwZT1cdWM4MTVcdWMyMTggXHVjMmRjXHVkMDAwXHVjMmE0IFx1YzIxOFx1YzgxNVx1Yzc5MAorX1VJX01vZGlmaWVyX3R5cGU9XHVjMjE4XHVjODE1XHVjNzkwCitfVUlfUmFuZ2VNb2RpZmllcl90eXBlPVx1YmM5NFx1YzcwNCBcdWMyMThcdWM4MTUKK19VSV9TVEVNVGltZVJhbmdlTW9kaWZpZXJfdHlwZT1TVEVNIFx1YzJkY1x1YWMwNCBcdWJjOTRcdWM3MDQgXHVjMjE4XHVjODE1XHVjNzkwCitfVUlfU1RFTVRpbWVTZXF1ZW5jZU1vZGlmaWVyX3R5cGU9U1RFTSBcdWMyZGNcdWFjMDQgXHVjMjFjXHVjMTFjIFx1YzIxOFx1YzgxNVx1Yzc5MAorX1VJX1NlcXVlbmNlTW9kaWZpZXJfdHlwZT1cdWMyMWNcdWMxMWMgXHVjMjE4XHVjODE1CitfVUlfU3RyaW5nU2VxdWVuY2VNb2RpZmllcl90eXBlPVx1YmIzOFx1Yzc5MFx1YzVmNCBcdWMyZGNcdWQwMDBcdWMyYTQgXHVjMjE4XHVjODE1XHVjNzkwCitfVUlfQm9vbGVhblNlcXVlbmNlTW9kaWZpZXJfc2VxdWVuY2VfZmVhdHVyZT1cdWMyMWNcdWMxMWMKK19VSV9Eb3VibGVSYW5nZU1vZGlmaWVyX3N0YXJ0VmFsdWVfZmVhdHVyZT1cdWMyZGNcdWM3OTEgXHVhYzEyCitfVUlfRG91YmxlUmFuZ2VNb2RpZmllcl9lbmRWYWx1ZV9mZWF0dXJlPVx1Y2Q1Y1x1Yzg4NSBcdWFjMTIKK19VSV9Eb3VibGVSYW5nZU1vZGlmaWVyX2luY3JlbWVudF9mZWF0dXJlPVx1Yzk5ZFx1YWMwMAorX1VJX0RvdWJsZVNlcXVlbmNlTW9kaWZpZXJfc2VxdWVuY2VfZmVhdHVyZT1cdWMyMWNcdWMxMWMKK19VSV9FeHBlcmltZW50X2V4cGVyaW1lbnRzX2ZlYXR1cmU9XHVjMmU0XHVkNWQ4CitfVUlfRXhwZXJpbWVudF9tb2RpZmllcnNfZmVhdHVyZT1cdWMyMThcdWM4MTVcdWM3OTAKK19VSV9FeHBlcmltZW50X21vZGlmaWNhdGlvblN1bW1hcnlfZmVhdHVyZT1cdWMyMThcdWM4MTUgXHVjNjk0XHVjMThjXHViNGU0IFx1YzY5NFx1YzU3ZAorX1VJX0V4cGVyaW1lbnRfY29tcGxldGVfZmVhdHVyZT1cdWM2NDRcdWI4Y2MKK19VSV9GZWF0dXJlTW9kaWZpZXJfZmVhdHVyZUlkX2ZlYXR1cmU9XHVhZTMwXHViMmE1IElECitfVUlfRmVhdHVyZU1vZGlmaWVyX21vZGlmaWNhdGlvblN1bW1hcnlfZmVhdHVyZT1cdWMyMThcdWM4MTUgXHVjNjk0XHVjMThjXHViNGU0IFx1YzY5NFx1YzU3ZAorX1VJX0ZlYXR1cmVNb2RpZmllcl9jb21wbGV0ZV9mZWF0dXJlPVx1YzY0NFx1YjhjYworX1VJX0ludGVnZXJSYW5nZU1vZGlmaWVyX3N0YXJ0VmFsdWVfZmVhdHVyZT1cdWMyZGNcdWM3OTEgXHVhYzEyCitfVUlfSW50ZWdlclJhbmdlTW9kaWZpZXJfZW5kVmFsdWVfZmVhdHVyZT1cdWNkNWNcdWM4ODUgXHVhYzEyCitfVUlfSW50ZWdlclJhbmdlTW9kaWZpZXJfaW5jcmVtZW50X2ZlYXR1cmU9XHVjOTlkXHVhYzAwCitfVUlfSW50ZWdlclNlcXVlbmNlTW9kaWZpZXJfc2VxdWVuY2VfZmVhdHVyZT1cdWMyMWNcdWMxMWMKK19VSV9Nb2RpZmllcl90YXJnZXRVUklfZmVhdHVyZT1cdWIzMDBcdWMwYzEgVVJJCitfVUlfTW9kaWZpZXJfZmVhdHVyZU1vZGlmaWVyc19mZWF0dXJlPVx1YWUzMFx1YjJhNSBcdWMyMThcdWM4MTVcdWM3OTBcdWI0ZTQKK19VSV9Nb2RpZmllcl9tb2RpZmljYXRpb25TdW1tYXJ5X2ZlYXR1cmU9XHVjMjE4XHVjODE1IFx1YzY5NFx1YzE4Y1x1YjRlNCBcdWM2OTRcdWM1N2QKK19VSV9Nb2RpZmllcl9jb21wbGV0ZV9mZWF0dXJlPVx1YzY0NFx1YjhjYworX1VJX1NURU1UaW1lUmFuZ2VNb2RpZmllcl9zdGFydFZhbHVlX2ZlYXR1cmU9XHVjMmRjXHVjNzkxIFx1YWMxMgorX1VJX1NURU1UaW1lUmFuZ2VNb2RpZmllcl9lbmRWYWx1ZV9mZWF0dXJlPVx1Y2Q1Y1x1Yzg4NSBcdWFjMTIKK19VSV9TVEVNVGltZVJhbmdlTW9kaWZpZXJfaW5jcmVtZW50X2ZlYXR1cmU9XHVjOTlkXHVhYzAwCitfVUlfU1RFTVRpbWVTZXF1ZW5jZU1vZGlmaWVyX3NlcXVlbmNlX2ZlYXR1cmU9XHVjMjFjXHVjMTFjCitfVUlfU2VxdWVuY2VNb2RpZmllcl9zZXF1ZW5jZVNpemVfZmVhdHVyZT1cdWMyMWNcdWMxMWMgXHVkMDZjXHVhZTMwCitfVUlfU3RyaW5nU2VxdWVuY2VNb2RpZmllcl9zZXF1ZW5jZV9mZWF0dXJlPVx1YzIxY1x1YzExYworX1VJX0Jvb2xlYW5TZXF1ZW5jZU1vZGlmaWVyX2N1cnJlbnRWYWx1ZV9mZWF0dXJlPVx1ZDYwNFx1YzdhYyBcdWFjMDBcdWNlNTgKK19VSV9Eb3VibGVSYW5nZU1vZGlmaWVyX2N1cnJlbnRWYWx1ZV9mZWF0dXJlPVx1ZDYwNFx1YzdhYyBcdWFjMDBcdWNlNTgKK19VSV9Eb3VibGVTZXF1ZW5jZU1vZGlmaWVyX2N1cnJlbnRWYWx1ZV9mZWF0dXJlPVx1ZDYwNFx1YzdhYyBcdWFjMDBcdWNlNTgKK19VSV9GZWF0dXJlTW9kaWZpZXJfZVN0cnVjdHVyYWxGZWF0dXJlX2ZlYXR1cmU9RVN0cnVjdHVyYWwgXHVhZTMwXHViMmE1CitfVUlfSW50ZWdlclJhbmdlTW9kaWZpZXJfY3VycmVudFZhbHVlX2ZlYXR1cmU9XHVkNjA0XHVjN2FjIFx1YWMwMFx1Y2U1OAorX1VJX0ludGVnZXJTZXF1ZW5jZU1vZGlmaWVyX2N1cnJlbnRWYWx1ZV9mZWF0dXJlPVx1ZDYwNFx1YzdhYyBcdWFjMDBcdWNlNTgKK19VSV9TVEVNVGltZVJhbmdlTW9kaWZpZXJfY3VycmVudFZhbHVlX2ZlYXR1cmU9XHVkNjA0XHVjN2FjIFx1YWMwMFx1Y2U1OAorX1VJX1NURU1UaW1lU2VxdWVuY2VNb2RpZmllcl9jdXJyZW50VmFsdWVfZmVhdHVyZT1cdWQ2MDRcdWM3YWMgXHVhYzAwXHVjZTU4CitfVUlfU2VxdWVuY2VNb2RpZmllcl9jdXJyZW50U2VxdWVuY2VJbmRleF9mZWF0dXJlPVx1ZDYwNFx1YzdhYyBcdWMyZGNcdWQwMDBcdWMyYTQgXHVjNzc4XHViMzcxXHVjMmE0CitfVUlfU3RyaW5nU2VxdWVuY2VNb2RpZmllcl9jdXJyZW50VmFsdWVfZmVhdHVyZT1cdWQ2MDRcdWM3YWMgXHVhYzAwXHVjZTU4CitfVUlfRmVhdHVyZU1vZGlmaWVyX2N1cnJlbnRWYWx1ZV9mZWF0dXJlPVx1ZDYwNFx1YzdhYyBcdWFjMDBcdWNlNTgKK19VSV9GZWF0dXJlTW9kaWZpZXJfbmV4dFZhbHVlX2ZlYXR1cmU9XHViMmU0XHVjNzRjIFx1YWMxMgorX1VJX1NlcXVlbmNlTW9kaWZpZXJfc2VxdWVuY2VfZmVhdHVyZT1cdWMyMWNcdWMxMWMKK19VSV9FeHBlcmltZW50X3NjZW5hcmlvX2ZlYXR1cmU9XHVjMmRjXHViMDk4XHViOWFjXHVjNjI0CitfVUlfRXhwZXJpbWVudF9uZXh0U2NlbmFyaW9fZmVhdHVyZT1cdWIyZTRcdWM3NGMgXHVjMmRjXHViMDk4XHViOWFjXHVjNjI0CitfVUlfUmFuZ2VNb2RpZmllcl9zdGFydFZhbHVlX2ZlYXR1cmU9XHVjMmRjXHVjNzkxIFx1YWMxMgorX1VJX1JhbmdlTW9kaWZpZXJfZW5kVmFsdWVfZmVhdHVyZT1cdWNkNWNcdWM4ODUgXHVhYzEyCitfVUlfUmFuZ2VNb2RpZmllcl9pbmNyZW1lbnRfZmVhdHVyZT1cdWM5OWRcdWFjMDAKK19VSV9Mb25nUmFuZ2VNb2RpZmllcl90eXBlPUxvbmcgXHViODA4XHVjNzc4XHVjOWMwIFx1YzIxOFx1YzgxNVx1Yzc5MAorX1VJX0RvdWJsZU5PUE1vZGlmaWVyX3R5cGU9XHViMzU0XHViZTE0IE5PUCBcdWMyMThcdWM4MTVcdWM3OTAKK19VSV9JbnRlZ2VyTk9QTW9kaWZpZXJfdHlwZT1cdWM4MTVcdWMyMTggTk9QIFx1YzIxOFx1YzgxNVx1Yzc5MAorX1VJX0xvbmdOT1BNb2RpZmllcl90eXBlPUxvbmcgTk9QIFx1YzIxOFx1YzgxNVx1Yzc5MAorX1VJX05PUE1vZGlmaWVyX3R5cGU9Tk9QIFx1YzIxOFx1YzgxNVx1Yzc5MAorX1VJX1NURU1UaW1lTk9QTW9kaWZpZXJfdHlwZT1TVEVNIFx1YzJkY1x1YWMwNCBOT1AgXHVjMjE4XHVjODE1XHVjNzkwCitfVUlfU3RyaW5nTk9QTW9kaWZpZXJfdHlwZT1cdWJiMzhcdWM3OTBcdWM1ZjQgTk9QIFx1YzIxOFx1YzgxNVx1Yzc5MAorX1VJX0ZlYXR1cmVNb2RpZmllcl9zdHJ1Y3R1cmFsRmVhdHVyZU5hbWVfZmVhdHVyZT1cdWFkNmNcdWM4NzAgXHVhZTMwXHViMmE1IFx1Yzc3NFx1Yjk4NAorX1VJX1N0cmluZ190eXBlPVx1YmIzOFx1Yzc5MFx1YzVmNAorX1VJX0ZlYXR1cmVNb2RpZmllcl9pZGVudGlmaWFibGVfZmVhdHVyZT1cdWMyZGRcdWJjYzRcdWFjMDBcdWIyYTVcdWQ1NjgKK19VSV9Mb25nUmFuZ2VNb2RpZmllcl9zdGFydFZhbHVlX2ZlYXR1cmU9XHVjMmRjXHVjNzkxIFx1YWMxMgorX1VJX0xvbmdSYW5nZU1vZGlmaWVyX2VuZFZhbHVlX2ZlYXR1cmU9XHVjZDVjXHVjODg1IFx1YWMxMgorX1VJX0xvbmdSYW5nZU1vZGlmaWVyX2luY3JlbWVudF9mZWF0dXJlPVx1Yzk5ZFx1YWMwMAorX1VJX0ZlYXR1cmVNb2RpZmllcl9jdXJyZW50VmFsdWVUZXh0X2ZlYXR1cmU9XHVkNjA0XHVjN2FjIFx1YWMxMiBcdWQxNGRcdWMyYTRcdWQyYjgKK19VSV9Mb25nUmFuZ2VNb2RpZmllcl9jdXJyZW50VmFsdWVfZmVhdHVyZT1cdWQ2MDRcdWM3YWMgXHVhYzAwXHVjZTU4CitfVUlfRmVhdHVyZU1vZGlmaWVyX3RhcmdldF9mZWF0dXJlPVx1YmFhOVx1ZDQ1YworX1VJX0ZlYXR1cmVNb2RpZmllcl9mZWF0dXJlTmFtZV9mZWF0dXJlPVx1YWUzMFx1YjJhNSBcdWM3NzRcdWI5ODQKK19VSV9Eb3VibGVSYW5nZU1vZGlmaWVyX25leHRWYWx1ZV9mZWF0dXJlPVx1YjJlNFx1Yzc0YyBcdWFjMTIKK19VSV9JbnRlZ2VyUmFuZ2VNb2RpZmllcl9uZXh0VmFsdWVfZmVhdHVyZT1cdWIyZTRcdWM3NGMgXHVhYzEyCitfVUlfU1RFTVRpbWVSYW5nZU1vZGlmaWVyX25leHRWYWx1ZV9mZWF0dXJlPVx1YjJlNFx1Yzc0YyBcdWFjMTIKK19VSV9Mb25nUmFuZ2VNb2RpZmllcl9uZXh0VmFsdWVfZmVhdHVyZT1cdWIyZTRcdWM3NGMgXHVhYzEyCitfVUlfU2VxdWVuY2VNb2RpZmllcl9uZXh0VmFsdWVfZmVhdHVyZT1cdWIyZTRcdWM3NGMgXHVhYzEyCitfVUlfTG9uZ1NlcXVlbmNlTW9kaWZpZXJfdHlwZT1Mb25nIFx1YzJkY1x1ZDAwMFx1YzJhNCBcdWMyMThcdWM4MTVcdWM3OTAKK19VSV9Mb25nU2VxdWVuY2VNb2RpZmllcl9zZXF1ZW5jZV9mZWF0dXJlPVx1YzIxY1x1YzExYworX1VJX0NvbXBhcmFibGVfdHlwZT1cdWM3MjBcdWMwYWNcdWQ1NWMKK19VSV9HcmFwaF90aW1lX2ZlYXR1cmU9XHVjMmRjXHVhYzA0CitfVUlfQW5kX3R5cGU9XHVjNjQwL1x1YWNmYworX1VJX0Jvb2xlYW5FeHByZXNzaW9uX3R5cGU9Qm9vbGVhbiBcdWQ0NWNcdWQ2MDRcdWMyZGQKK19VSV9Cb29sZWFuT3BlcmF0b3JfdHlwZT1Cb29sZWFuIFx1YzVmMFx1YzBiMFx1Yzc5MAorX1VJX0ZhbHNlX3R5cGU9RkFMU0UKK19VSV9OYXJ5Qm9vbGVhbk9wZXJhdG9yX3R5cGU9TmFyeSBCb29sZWFuIFx1YzVmMFx1YzBiMFx1Yzc5MAorX1VJX05vdF90eXBlPU5vdAorX1VJX09yX3R5cGU9T3IKK19VSV9QcmVkaWNhdGVfdHlwZT1cdWMyMjBcdWM1YjQKK19VSV9QcmVkaWNhdGVSZWZlcmVuY2VfdHlwZT1cdWNjMzhcdWM4NzAKK19VSV9UZXN0X3R5cGU9XHVkMTRjXHVjMmE0XHVkMmI4CitfVUlfVHJ1ZV90eXBlPVRSVUUKK19VSV9VbmFyeUJvb2xlYW5PcGVyYXRvcl90eXBlPVVuYXJ5IEJvb2xlYW4gXHVjNWYwXHVjMGIwXHVjNzkwCitfVUlfVHJpZ2dlcl90eXBlPVx1ZDJiOFx1YjlhY1x1YWM3MAorX1VJX05hcnlCb29sZWFuT3BlcmF0b3Jfb3BlcmFuZHNfZmVhdHVyZT1cdWQ1M2NcdWM1ZjBcdWMwYjBcdWM3OTAKK19VSV9QcmVkaWNhdGVSZWZlcmVuY2VfcHJlZGljYXRlX2ZlYXR1cmU9XHVjMjIwXHVjNWI0CitfVUlfVW5hcnlCb29sZWFuT3BlcmF0b3Jfb3BlcmFuZF9mZWF0dXJlPVx1ZDUzY1x1YzVmMFx1YzBiMFx1Yzc5MAorX1VJX1RyaWdnZXJfcHJlZGljYXRlX2ZlYXR1cmU9XHVjMjIwXHVjNWI0CitfVUlfVHJpZ2dlcl9hY3Rpb25fZmVhdHVyZT1cdWIzZDlcdWM3OTEKK19VSV9QcmVkaWNhdGVFeHByZXNzaW9uX3R5cGU9XHVjMjE4XHVjMmRkCitfVUlfUHJlZGljYXRlRXhwcmVzc2lvbl9wcmVkaWNhdGVfZmVhdHVyZT1cdWMyMjBcdWM1YjQKK19VSV9JZGVudGlmaWFibGVQcmVkaWNhdGVfdHlwZT1cdWMyZGRcdWJjYzQgXHVjMjIwXHVjNWI0CitfVUlfSWRlbnRpZmlhYmxlUHJlZGljYXRlRXhwcmVzc2lvbl90eXBlPVx1YzJkZFx1YmNjNCBcdWMyMjBcdWM1YjQgXHVkNDVjXHVkNjA0CitfVUlfSWRlbnRpZmlhYmxlVGVzdF90eXBlPVx1YzJkZFx1YmNjNCBcdWQxNGNcdWMyYTRcdWQyYjgKK19VSV9UaW1lVGVzdF90eXBlPVx1YzJkY1x1YWMwNCBcdWQxNGNcdWMyYTRcdWQyYjgKK19VSV9UaW1lVGVzdF90aW1lX2ZlYXR1cmU9XHVjMmRjXHVhYzA0CitfVUlfQWJzb2x1dGVUaW1lVGVzdF90eXBlPVx1YzgwOFx1YjMwMCBcdWMyZGNcdWFjMDQgXHVkMTRjXHVjMmE0XHVkMmI4CitfVUlfRWxhcHNlZFRpbWVUZXN0X3R5cGU9XHVhY2JkXHVhY2ZjIFx1YzJkY1x1YWMwNCBcdWQxNGNcdWMyYTRcdWQyYjgKK19VSV9UaW1lVGVzdF9yZWZlcmVuY2VUaW1lX2ZlYXR1cmU9XHVjYzM4XHVjODcwIFx1YzJkY1x1YWMwNAorX1VJX0VsYXBzZWRUaW1lVGVzdF9yZWZlcmVuY2VUaW1lVmFsaWRfZmVhdHVyZT1cdWM3MjBcdWQ2YThcdWQ1NWMgXHVjYzM4XHVjODcwIFx1YzJkY1x1YWMwNAorX1VJX0VsYXBzZWRUaW1lVGVzdF9lbGFwc2VkTWlsbGlzZWNvbmRzX2ZlYXR1cmU9XHVhY2JkXHVhY2ZjIFx1YzJkY1x1YWMwNCAoTWlsbGlzZWNvbmRzKQorX1VJX0VsYXBzZWRUaW1lVGVzdF9udW1iZXJvZkRheXNfZmVhdHVyZT1OdW1iZXJvZiBcdWIwYTBcdWM5ZGMKK19VSV9BYnNvbHV0ZVRpbWVUZXN0X3JlZmVyZW5jZVRpbWVfZmVhdHVyZT1cdWNjMzhcdWM4NzAgXHVjMmRjXHVhYzA0CitfVUlfRWxhcHNlZFRpbWVUZXN0X3JlZmVyZW5jZVRpbWVfZmVhdHVyZT1cdWNjMzhcdWM4NzAgXHVjMmRjXHVhYzA0CitfVUlfQWJzb2x1dGVUaW1lVGVzdF90aW1lX2ZlYXR1cmU9XHVjMmRjXHVhYzA0CitfVUlfRGVjb3JhdG9yX2VuYWJsZWRfZmVhdHVyZT1cdWM4MDFcdWM2YTkKK19VSV9EZWNvcmF0b3JfZ3JhcGhEZWNvcmF0ZWRfZmVhdHVyZT1cdWFkZjhcdWI3OThcdWQ1MDQgXHVjN2E1XHVjMmRkXHVjNzkwCitfVUlfTW9kaWZpYWJsZV90eXBlPVx1YzIxOFx1YzgxNSBcdWFjMDBcdWIyYTUKK19VSV9Eb3VibGVSYW5nZU1vZGlmaWVyX29yZ2luYWxWYWx1ZV9mZWF0dXJlPVx1YzZkMFx1Yjc5OCBcdWFjMTIKK19VSV9JbnRlZ2VyUmFuZ2VNb2RpZmllcl9vcmdpbmFsVmFsdWVfZmVhdHVyZT1cdWM2ZDBcdWI3OTggXHVhYzEyCitfVUlfTG9uZ1JhbmdlTW9kaWZpZXJfb3JnaW5hbFZhbHVlX2ZlYXR1cmU9XHVjNmQwXHViNzk4IFx1YWMxMgorX1VJX1NURU1UaW1lUmFuZ2VNb2RpZmllcl9vcmdpbmFsVmFsdWVfZmVhdHVyZT1cdWM2ZDBcdWI3OTggXHVhYzEyCitfVUlfU2VxdWVuY2VNb2RpZmllcl9vcmdpbmFsVmFsdWVfZmVhdHVyZT1cdWM2ZDBcdWI3OTggXHVhYzEyCitfVUlfRG91YmxlUmFuZ2VNb2RpZmllcl9vcmlnaW5hbFZhbHVlX2ZlYXR1cmU9XHVjNmQwXHViNzk4IFx1YWMxMgorX1VJX0ludGVnZXJSYW5nZU1vZGlmaWVyX29yaWdpbmFsVmFsdWVfZmVhdHVyZT1cdWM2ZDBcdWI3OTggXHVhYzEyCitfVUlfTG9uZ1JhbmdlTW9kaWZpZXJfb3JpZ2luYWxWYWx1ZV9mZWF0dXJlPVx1YzZkMFx1Yjc5OCBcdWFjMTIKK19VSV9TVEVNVGltZVJhbmdlTW9kaWZpZXJfb3JpZ2luYWxWYWx1ZV9mZWF0dXJlPVx1YzZkMFx1Yjc5OCBcdWFjMTIKK19VSV9TZXF1ZW5jZU1vZGlmaWVyX29yaWdpbmFsVmFsdWVfZmVhdHVyZT1cdWM2ZDBcdWI3OTggXHVhYzEyCitfVUlfU3RhdGljTGFiZWxfdHlwZT1cdWM4MTVcdWM4MDEgXHVhYzAwXHVjN2E1XHVjNzkwXHViOWFjCitfVUlfRHluYW1pY0xhYmVsX2RlbHRhVmFsdWVfZmVhdHVyZT1cdWIzNzhcdWQwYzAgXHVhYzEyCitfVUlfRHluYW1pY0xhYmVsX2VzdGltYXRlZFZhbHVlX2ZlYXR1cmU9XHVjNjA4XHVjMGMxIFx1YWMxMgorX1VJX0RlY29yYXRvcl9zdGVwU2l6ZV9mZWF0dXJlPVx1YjJlOFx1YWNjNCBcdWQwNmNcdWFlMzAKK19VSV9EZWNvcmF0b3JfY3VycmVudEN5Y2xlX2ZlYXR1cmU9XHVkNjA0XHVjN2FjIFx1YzBhY1x1Yzc3NFx1ZDA3NAorX1VJX0RlY29yYXRvcl9yZWxhdGl2ZVRvbGVyYW5jZV9mZWF0dXJlPVx1YzBjMVx1YjMwMFx1YzgwMSBcdWIwYjRcdWMxMzEKK19VSV9EZWNvcmF0b3JfYWJzb2x1dGVUb2xlcmFuY2VfZmVhdHVyZT1cdWM4MDhcdWIzMDAgXHVkNWM4XHVjNmE5XHVjYzI4CitfVUlfRGVjb3JhdG9yX3Byb2dyZXNzX2ZlYXR1cmU9XHVjOWM0XHVkNTg5CitfVUlfU2NlbmFyaW9fcHJvZ3Jlc3NfZmVhdHVyZT1cdWM5YzRcdWQ1ODkKK19VSV9DYXRlZ29yaXplZFR5cGVfdHlwZT1cdWJkODRcdWI5NTggXHVkMGMwXHVjNzg1CitfVUlfU29sdmVyX3R5cGU9XHVkNTc0XHVhY2IwXHVjMGFjCitfVUlfU29sdmVyX2RlY29yYXRvcnNfZmVhdHVyZT1cdWM3YTVcdWMyZGRcdWM3OTBcdWI0ZTQKK19VSV9TY2VuYXJpb19zb2x2ZXJfZmVhdHVyZT1cdWQ1NzRcdWFjYjBcdWMwYWMKK19VSV9Tb2x2ZXJfaW5pdGlhbGl6ZWRfZmVhdHVyZT1cdWNkMDhcdWFlMzBcdWQ2NTQKK19VSV9TaW5nbGVWYWx1ZU1vZGlmaWVyX3R5cGU9XHViMmU4XHVjNzdjIFx1YWMxMiBcdWMyMThcdWM4MTVcdWM3OTAKK19VSV9Eb3VibGVNb2RpZmllcl90eXBlPVx1YjM1NFx1YmUxNCBcdWMyMThcdWM4MTVcdWM3OTAKK19VSV9JbnRlZ2VyTW9kaWZpZXJfdHlwZT1cdWM4MTVcdWMyMTggXHVjMjE4XHVjODE1XHVjNzkwCitfVUlfTG9uZ01vZGlmaWVyX3R5cGU9TG9uZyBcdWMyMThcdWM4MTVcdWM3OTAKK19VSV9TVEVNVGltZU1vZGlmaWVyX3R5cGU9U1RFTSBcdWMyZGNcdWFjMDQgXHVjMjE4XHVjODE1XHVjNzkwCitfVUlfRG91YmxlTW9kaWZpZXJfdmFsdWVfZmVhdHVyZT1cdWFjMTIKK19VSV9JbnRlZ2VyTW9kaWZpZXJfdl9mZWF0dXJlPVYKK19VSV9Mb25nTW9kaWZpZXJfdmFsdWVfZmVhdHVyZT1cdWFjMTIKK19VSV9TVEVNVGltZU1vZGlmaWVyX3ZhbHVlX2ZlYXR1cmU9XHVhYzEyCitfVUlfSW50ZWdlck1vZGlmaWVyX3ZhbHVlX2ZlYXR1cmU9XHVhYzEyCitfVUlfRG91YmxlTW9kaWZpZXJfb3JpZ2luYWxWYWx1ZV9mZWF0dXJlPVx1YzZkMFx1Yjc5OCBcdWFjMTIKK19VSV9JbnRlZ2VyTW9kaWZpZXJfb3JpZ2luYWxWYWx1ZV9mZWF0dXJlPVx1YzZkMFx1Yjc5OCBcdWFjMTIKK19VSV9Mb25nTW9kaWZpZXJfb3JpZ2luYWxWYWx1ZV9mZWF0dXJlPVx1YzZkMFx1Yjc5OCBcdWFjMTIKK19VSV9TVEVNVGltZU1vZGlmaWVyX29yaWdpbmFsVmFsdWVfZmVhdHVyZT1cdWM2ZDBcdWI3OTggXHVhYzEyCitfVUlfSWRlbnRpZmlhYmxlRmlsdGVyX3R5cGU9XHVjMmRkXHViY2M0IFx1ZDU0NFx1ZDEzMAorX1VJX0R5bmFtaWNMYWJlbF9pZGVudGlmaWVyX2ZlYXR1cmU9XHVjMmRkXHViY2M0XHVjNzkwCitfVUlfRG91YmxlVmFsdWVMaXN0X3R5cGU9XHViMzU0XHViZTE0IFx1YWMxMiBcdWJhYTlcdWI4NWQKK19VSV9Eb3VibGVWYWx1ZU1hdHJpeF90eXBlPVx1YjM1NFx1YmUxNCBcdWFjMTIgXHViOWU0XHVkMmI4XHViOWFkXHVjMmE0CitfVUlfRG91YmxlVmFsdWVfdHlwZT1cdWIzNTRcdWJlMTQgXHVhYzEyCitfVUlfRG91YmxlVmFsdWVMaXN0X3ZhbHVlc19mZWF0dXJlPVx1YWMxMgorX1VJX0RvdWJsZVZhbHVlTGlzdF9pZGVudGlmaWVyX2ZlYXR1cmU9XHVjMmRkXHViY2M0XHVjNzkwCitfVUlfRG91YmxlVmFsdWVNYXRyaXhfdmFsdWVMaXN0c19mZWF0dXJlPVx1YWMxMiBcdWJhYTlcdWI4NWQKK19VSV9Eb3VibGVWYWx1ZV9pZGVudGlmaWVyX2ZlYXR1cmU9XHVjMmRkXHViY2M0XHVjNzkwCitfVUlfRG91YmxlVmFsdWVfdmFsdWVfZmVhdHVyZT1cdWFjMTIKK19VSV9TdHJpbmdWYWx1ZUxpc3RfdHlwZT1cdWJiMzhcdWM3OTBcdWM1ZjQgXHVhYzEyIFx1YmFhOVx1Yjg1ZAorX1VJX1N0cmluZ1ZhbHVlX3R5cGU9XHViYjM4XHVjNzkwXHVjNWY0IFx1YWMxMgorX1VJX1N0cmluZ1ZhbHVlTGlzdF92YWx1ZXNfZmVhdHVyZT1cdWFjMTIKK19VSV9TdHJpbmdWYWx1ZV92YWx1ZV9mZWF0dXJlPVx1YWMxMgorX1VJX0dyYXBoR2VuZXJhdG9yX3R5cGU9XHVhZGY4XHViNzk4XHVkNTA0IFx1YzBkZFx1YzEzMVx1YWUzMAorX1VJX0xhdHRpY2VHcmFwaEdlbmVyYXRvcl90eXBlPVx1YWNhOVx1Yzc5MCBcdWFkZjhcdWI3OThcdWQ1MDQgXHVjMGRkXHVjMTMxXHVhZTMwCitfVUlfU3F1YXJlR3JhcGhMYXR0aWNlR2VuZXJhdG9yX3R5cGU9XHVjMGFjXHVhYzAxXHVkNjE1IFx1YWRmOFx1Yjc5OFx1ZDUwNCBcdWFjYTlcdWM3OTAgXHVjMGRkXHVjMTMxXHVhZTMwCitfVUlfTGF0dGljZUdyYXBoR2VuZXJhdG9yX3hTaXplX2ZlYXR1cmU9WFx1ZDA2Y1x1YWUzMAorX1VJX0xhdHRpY2VHcmFwaEdlbmVyYXRvcl95U2l6ZV9mZWF0dXJlPVlcdWQwNmNcdWFlMzAKK19VSV9MYXR0aWNlR3JhcGhHZW5lcmF0b3JfdXNlTmVhcmVzdE5laWdoYm9yc19mZWF0dXJlPVx1YWMwMFx1YzdhNSBcdWFjMDBcdWFlNGNcdWM2YjQgXHVjNzc0XHVjNmMzIFx1YzBhY1x1YzZhOQorX1VJX0xhdHRpY2VHcmFwaEdlbmVyYXRvcl91c2VOZXh0TmVhcmVzdE5laWdoYm9yc19mZWF0dXJlPVx1YjJlNFx1Yzc0Y1x1YzczY1x1Yjg1YyBcdWFjMDBcdWM3YTUgXHVhYzAwXHVhZTRjXHVjNmI0IFx1Yzc3NFx1YzZjMyBcdWMwYWNcdWM2YTkKK19VSV9MYXR0aWNlR3JhcGhHZW5lcmF0b3JfcGVyaW9kaWNCb3VuZGFyaWVzX2ZlYXR1cmU9XHVjMmRjXHVhYzA0IFx1YjJlOFx1YzcwNCBcdWFjYmRcdWFjYzQKK19VSV9HcmFwaFBhcnRpdGlvbmVyX3R5cGU9UGFydGl0aW9uZXIKK19VSV9HcmFwaFBhcnRpdGlvbmVyX3Byb2Nlc3NSYW5rX2ZlYXR1cmU9XHVkNTA0XHViODVjXHVjMTM4XHVjMmE0IFx1YzIxY1x1YzcwNAorX1VJX0dyYXBoUGFydGl0aW9uZXJfbnVtUHJvY2Vzc2VzX2ZlYXR1cmU9TlVNIFx1ZDUwNFx1Yjg1Y1x1YzEzOFx1YzJhNAorX1VJX0dyYXBoUGFydGl0aW9uZXJfbm9kZVJhbmtfZmVhdHVyZT1cdWIxNzhcdWI0ZGMgXHVjMjFjXHVjNzA0CitfVUlfR3JhcGhQYXJ0aXRpb25lcl9udW1Ob2Rlc19mZWF0dXJlPU5VTSBcdWIxNzhcdWI0ZGMKK19VSV9TaW1wbGVHcmFwaFBhcnRpdGlvbmVyX3R5cGU9XHVhYzA0XHViMmU4XHVkNTVjIFx1YWRmOFx1Yjc5OFx1ZDUwNCBQYXJ0aXRpb25lcgorX1VJX1NpbXBsZUdyYXBoUGFydGl0aW9uZXJfcHJvY2Vzc1JhbmtfZmVhdHVyZT1cdWQ1MDRcdWI4NWNcdWMxMzhcdWMyYTQgXHVjMjFjXHVjNzA0CitfVUlfU2ltcGxlR3JhcGhQYXJ0aXRpb25lcl9udW1Qcm9jZXNzZXNfZmVhdHVyZT1OVU0gXHVkNTA0XHViODVjXHVjMTM4XHVjMmE0CitfVUlfU29sdmVyX3BhcnRpdGlvbmVyX2ZlYXR1cmU9UGFydGl0aW9uZXIKK19VSV9FeGNoYW5nZV90eXBlPVx1YWQ1MFx1ZDY1OAorX1VJX0V4Y2hhbmdlX290aGVyTm9kZV9mZWF0dXJlPVx1YjJlNFx1Yjk3OCBcdWIxNzhcdWI0ZGMKK19VSV9FeGNoYW5nZV9jb3VudF9mZWF0dXJlPVx1ZDY5Zlx1YzIxOAorX1VJX0V4Y2hhbmdlX290aGVyTGFiZWxfZmVhdHVyZT1cdWIyZTRcdWI5NzggXHViNzdjXHViY2E4CitfVUlfRXhjaGFuZ2VfdHlwZV9mZWF0dXJlPVx1YzcyMFx1ZDYxNQorX1VJX0V4Y2hhbmdlVHlwZV9CSVJUSFNfQU5EX0RFQVRIU19saXRlcmFsPVx1Y2Q5Y1x1YzBkZF9cdWFjZmNfXHVjMGFjXHViOWRkCitfVUlfRXhjaGFuZ2VUeXBlX01JR1JBVElPTl9saXRlcmFsPVx1Yzc3NFx1YjNkOQorX1VJX0V4Y2hhbmdlVHlwZV9BR0lOR19saXRlcmFsPVx1YjE3OFx1ZDY1NAorX1VJX0ludGVncmF0aW9uTGFiZWwyX3R5cGU9XHVkMWI1XHVkNTY5IFx1Yjc3Y1x1YmNhODIKK19VSV9JbnRlZ3JhdGlvbkxhYmVsVmFsdWUyX3R5cGU9XHVkMWI1XHVkNTY5IFx1Yjc3Y1x1YmNhOCBcdWFjMTIyCitfVUlfSW50ZWdyYXRpb25MYWJlbDJfY3VycmVudFZhbHVlX2ZlYXR1cmU9XHVkNjA0XHVjN2FjIFx1YWMwMFx1Y2U1OAorX1VJX0ludGVncmF0aW9uTGFiZWwyX25leHRWYWx1ZV9mZWF0dXJlPVx1YjJlNFx1Yzc0YyBcdWFjMTIKK19VSV9JbnRlZ3JhdGlvbkxhYmVsMl9kZWx0YVZhbHVlX2ZlYXR1cmU9XHViMzc4XHVkMGMwIFx1YWMxMgorX1VJX0ludGVncmF0aW9uTGFiZWwyX3RlbXBWYWx1ZV9mZWF0dXJlPVx1YzYyOFx1YjNjNCBcdWFjMTIKK19VSV9JbnRlZ3JhdGlvbkxhYmVsMl9wcm9iZVZhbHVlX2ZlYXR1cmU9XHVkMGQwXHVjMGM5XHVjNzkwIFx1YWMxMgorX1VJX0ludGVncmF0aW9uTGFiZWwyX2Vycm9yU2NhbGVfZmVhdHVyZT1cdWM2MjRcdWI5NTggXHVjMmE0XHVjZjAwXHVjNzdjCitfVUlfSW50ZWdyYXRpb25MYWJlbDJfZGVjb3JhdG9yX2ZlYXR1cmU9XHVjN2E1XHVjMmRkXHVjNzkwCitfVUlfSW50ZWdyYXRpb25MYWJlbDJfbmV4dFZhbHVlVmFsaWRfZmVhdHVyZT1cdWIyZTRcdWM3NGMgXHVjNzIwXHVkNmE4IFx1YWMxMgorX1VJX0ludGVncmF0aW9uTGFiZWwyX2lkZW50aWZpZXJfZmVhdHVyZT1cdWMyZGRcdWJjYzRcdWM3OTAKK19VSV9JbnRlZ3JhdGlvbkxhYmVsX3R5cGU9XHVkMWI1XHVkNTY5IFx1Yjc3Y1x1YmNhOAorX1VJX0ludGVncmF0aW9uTGFiZWxWYWx1ZV90eXBlPVx1ZDFiNVx1ZDU2OSBcdWI3N2NcdWJjYTggXHVhYzEyCitfVUlfSW50ZWdyYXRpb25MYWJlbF9jdXJyZW50VmFsdWVfZmVhdHVyZT1cdWQ2MDRcdWM3YWMgXHVhYzAwXHVjZTU4CitfVUlfSW50ZWdyYXRpb25MYWJlbF9uZXh0VmFsdWVfZmVhdHVyZT1cdWIyZTRcdWM3NGMgXHVhYzEyCitfVUlfSW50ZWdyYXRpb25MYWJlbF9kZWx0YVZhbHVlX2ZlYXR1cmU9XHViMzc4XHVkMGMwIFx1YWMxMgorX1VJX0ludGVncmF0aW9uTGFiZWxfdGVtcFZhbHVlX2ZlYXR1cmU9XHVjNjI4XHViM2M0IFx1YWMxMgorX1VJX0ludGVncmF0aW9uTGFiZWxfcHJvYmVWYWx1ZV9mZWF0dXJlPVx1ZDBkMFx1YzBjOVx1Yzc5MCBcdWFjMTIKK19VSV9JbnRlZ3JhdGlvbkxhYmVsX2Vycm9yU2NhbGVfZmVhdHVyZT1cdWM2MjRcdWI5NTggXHVjMmE0XHVjZjAwXHVjNzdjCitfVUlfSW50ZWdyYXRpb25MYWJlbF9kZWNvcmF0b3JfZmVhdHVyZT1cdWM3YTVcdWMyZGRcdWM3OTAKK19VSV9JbnRlZ3JhdGlvbkxhYmVsX25leHRWYWx1ZVZhbGlkX2ZlYXR1cmU9XHViMmU0XHVjNzRjIFx1YzcyMFx1ZDZhOCBcdWFjMTIKK19VSV9JbnRlZ3JhdGlvbkxhYmVsX2lkZW50aWZpZXJfZmVhdHVyZT1cdWMyZGRcdWJjYzRcdWM3OTAKK19VSV9JbnRlZ3JhdGlvbkxhYmVsVmFsdWVfYXJyaXZhbHNfZmVhdHVyZT1cdWIzYzRcdWNjMjkKK19VSV9JbnRlZ3JhdGlvbkxhYmVsVmFsdWVfZGVwYXJ0dXJlc19mZWF0dXJlPVx1Y2Q5Y1x1YmMxYworX1VJX0ludGVncmF0aW9uRGVjb3JhdG9yX3R5cGU9XHVkMWI1XHVkNTY5IFx1YzdhNVx1YzJkZFx1Yzc5MAorX1VJX0xvZ2dlcl90eXBlPUxvZ2dlcgorX1VJX1NjZW5hcmlvX2xvZ2dlcnNfZmVhdHVyZT1Mb2dnZXJzCitfVUlfVHJpZ2dlcl9hY3Rpb25zX2ZlYXR1cmU9QWN0aW9ucwpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvcGx1Z2luX3poLnByb3BlcnRpZXMgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9wbHVnaW5femgucHJvcGVydGllcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZmUwNjBhCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvcGx1Z2luX3poLnByb3BlcnRpZXMKQEAgLTAsMCArMSw0OTMgQEAKKyMvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIyAqIENvcHlyaWdodCAoYykgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyMgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisjICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisjICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyMgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorIyAqCisjICogQ29udHJpYnV0b3JzOgorIyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisjIFRvIGNvZGUgZGV2ZWxvcGVyOgorIyAgIERvIE5PVCBjaGFuZ2UgdGhlIHByb3BlcnRpZXMgYmV0d2VlbiB0aGlzIGxpbmUgYW5kIHRoZQorIyAgICIlJSUgRU5EIE9GIFRSQU5TTEFURUQgUFJPUEVSVElFUyAlJSUiIGxpbmUuCisjICAgTWFrZSBhIG5ldyBwcm9wZXJ0eSBuYW1lLCBhcHBlbmQgdG8gdGhlIGVuZCBvZiB0aGUgZmlsZSBhbmQgY2hhbmdlCisjICAgdGhlIGNvZGUgdG8gdXNlIHRoZSBuZXcgcHJvcGVydHkuCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyMgJSUlIEVORCBPRiBUUkFOU0xBVEVEIFBST1BFUlRJRVMgJSUlCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK3BsdWdpbk5hbWU9U1RFTVx1NjgzOFx1NWZjMworcHJvdmlkZXJOYW1lPUVjbGlwc2Uub3JnCisKKyMgV2l6YXJkcworX1VJX05ld19TVEVNX1dpemFyZF9DYXRlZ29yeT1TVEVNCisKKyMgU1RFTSBOZXcgUHJvamVjdCBXaXphcmQKKworX1VJX05ld19TVEVNX1Byb2plY3RfV2l6YXJkPVNURU1cdTk4NzlcdTc2ZWUKKworIyBFeHRlbnNpb24gcG9pbnRzCitFUF9HcmFwaD1TVEVNXHU3Njg0XHU1NmZlXHU1ZjYyXHU2MjY5XHU1YzU1XHU3MGI5CitFUF9Nb2RlbD1TVEVNXHU2YTIxXHU1NzhiXHU3Njg0XHU2MjY5XHU1YzU1XHU3MGI5CitFUF9TY2VuYXJpbz1TVEVNXHU3Njg0XHU2MGM1XHU2NjZmXHU2MjY5XHU1YzU1XHU3MGI5CitFUF9TZXF1ZW5jZXI9U1RFTVx1NzY4NFx1NWU4Zlx1NTIxN1x1NjI2OVx1NWM1NVx1NzBiOQorRVBfRGVjb3JhdG9yPVNURU1cdTg4YzVcdTk5NzBcdTU2NjhcdTYyNjlcdTVjNTVcdTcwYjkKK0VQX1RyaWdnZXI9U1RFTVx1ODllNlx1NTNkMVx1NjI2OVx1NWM1NVx1NzBiOQorRVBfUHJlZGljYXRlPVNURU1cdTYzY2ZcdThmZjBcdTYyNjlcdTVjNTVcdTcwYjkKK0VQX0V4cGVyaW1lbnQ9U1RFTVx1NWI5ZVx1OWE4Y1x1NjI2OVx1NWM1NVx1NzBiOQorI0VQX01vZGlmaWVyPSBTVEVNIG1vZGlmaWVyIGV4dGVuc2lvbiBwb2ludAorCisjIER1YmxpbiBDb3JlIEZlYXR1cmUgRGVzY3JpcHRpb25zCisKK19VSV9EQ19WYWxpZF9EZXNjID0gVGhlIGRhdGUgcmFuZ2Ugb3ZlciB3aGljaCB0aGUgcmVzb3VyY2UgaXMgdmFsaWQuIChlLmcuLCAic3RhcnQ9MjAwNi0wMy0yOTsgZW5kPTIwMDYtMDMtMzA7IikKKworCisKK19VSV9DcmVhdGVDaGlsZF90ZXh0PXswfQorX1VJX0NyZWF0ZUNoaWxkX3RleHQyPXsxfSB7MH0KK19VSV9DcmVhdGVDaGlsZF90ZXh0Mz17MX0KK19VSV9DcmVhdGVDaGlsZF90b29sdGlwPVx1NTIxYlx1NWVmYVx1NTcyOHsxfSB7MH1cdTY1YjBcdTUyOWZcdTgwZmQKK19VSV9DcmVhdGVDaGlsZF9kZXNjcmlwdGlvbj1cdTRlM2FcdTkwMDlcdTViOWFcdTc2ODR7Mn1cdTc2ODR7MX1cdTcyNzlcdTYwMjdcdTY3NjVcdTUyMWJcdTVlZmFcdTRlMDBcdTRlMmFcdTY1YjBcdTc2ODR7MH1cdTViNTBcdTdjN2IKK19VSV9DcmVhdGVTaWJsaW5nX2Rlc2NyaXB0aW9uPVx1NTcyOHsxfVx1NzY4NFx1NzIzNlx1OTZjNlx1NGUyZFx1NGUzYVx1OTAwOVx1NWI5YVx1NzY4NHsyfVx1Njc2NVx1NTIxYlx1NWVmYVx1NGUwMFx1NGUyYXswfVx1N2M3Ylx1NTc4Ylx1NzY4NFx1NjViMFx1NzY4NFx1NTE0NFx1NWYxZlx1N2M3YgorCitfVUlfUHJvcGVydHlEZXNjcmlwdG9yX2Rlc2NyaXB0aW9uPXswfVx1NGVjZVx1NWM1ZXsxfQorCitfVUlfRHVibGluQ29yZV90eXBlPVx1OTBmZFx1NjdjZlx1Njc5N1x1NjgzOFx1NWZjMworX1VJX0lkZW50aWZpYWJsZV90eXBlPVx1NTNlZlx1OGJjNlx1NTIyYlx1NzY4NAorX1VJX1Vua25vd25fdHlwZT1cdTViZjlcdThjNjEKKworX1VJX1Vua25vd25fZGF0YXR5cGU9XHU0ZWY3XHU1MDNjCisKK19VSV9EdWJsaW5Db3JlX3RpdGxlX2ZlYXR1cmU9XHU2ODA3XHU5ODk4CitfVUlfRHVibGluQ29yZV9pZGVudGlmaWVyX2ZlYXR1cmU9XHU2ODA3XHU4YmM2XHU3YjI2CitfVUlfRHVibGluQ29yZV9kZXNjcmlwdGlvbl9mZWF0dXJlPVx1OGJmNFx1NjYwZQorX1VJX0R1YmxpbkNvcmVfY3JlYXRvcl9mZWF0dXJlPVx1NTIxYlx1OTAyMFx1ODAwNQorX1VJX0R1YmxpbkNvcmVfZGF0ZV9mZWF0dXJlPVx1NjVlNVx1NjcxZgorX1VJX0R1YmxpbkNvcmVfZm9ybWF0X2ZlYXR1cmU9XHU2ODNjXHU1ZjBmCitfVUlfRHVibGluQ29yZV9wdWJsaXNoZXJfZmVhdHVyZT1cdTUzZDFcdTVlMDMKK19VSV9EdWJsaW5Db3JlX2NvdmVyYWdlX2ZlYXR1cmU9XHU4OTg2XHU3NmQ2CitfVUlfRHVibGluQ29yZV9jb250cmlidXRvcl9mZWF0dXJlPVx1OGQyMVx1NzMyZVx1ODAwNQorX1VJX0R1YmxpbkNvcmVfcmVsYXRpb25fZmVhdHVyZT1cdTUxNzNcdTdjZmIKK19VSV9EdWJsaW5Db3JlX3JpZ2h0c19mZWF0dXJlPVx1Njc0M1x1NTIyOQorX1VJX0R1YmxpbkNvcmVfc291cmNlX2ZlYXR1cmU9XHU2NzY1XHU2ZTkwCitfVUlfRHVibGluQ29yZV9zdWJqZWN0X2ZlYXR1cmU9XHU0ZTNiXHU5ODk4CitfVUlfRHVibGluQ29yZV90eXBlX2ZlYXR1cmU9XHU3YzdiXHU1NzhiCitfVUlfRHVibGluQ29yZV9sYW5ndWFnZV9mZWF0dXJlPVx1OGJlZFx1OGEwMAorX1VJX0R1YmxpbkNvcmVfYmlibGlvZ3JhcGhpY0NpdGF0aW9uX2ZlYXR1cmU9XHU1ZjE1XHU3NTI4XHU0ZTY2XHU3NmVlCitfVUlfRHVibGluQ29yZV9jcmVhdGVkX2ZlYXR1cmU9XHU1MjFiXHU1ZWZhCitfVUlfRHVibGluQ29yZV9saWNlbnNlX2ZlYXR1cmU9XHU4YmI4XHU1M2VmXHU4YmMxCitfVUlfRHVibGluQ29yZV9yZXF1aXJlZF9mZWF0dXJlPVx1NWZjNVx1OTg3YgorX1VJX0R1YmxpbkNvcmVfc3BhdGlhbF9mZWF0dXJlPVx1N2E3YVx1OTVmNAorX1VJX0R1YmxpbkNvcmVfdmFsaWRfZmVhdHVyZT1cdTY3MDlcdTY1NDgKK19VSV9JZGVudGlmaWFibGVfdVJJX2ZlYXR1cmU9VVJJCitfVUlfSWRlbnRpZmlhYmxlX3R5cGVVUklfZmVhdHVyZT1VUklcdTdjN2JcdTU3OGIKK19VSV9JZGVudGlmaWFibGVfZHVibGluQ29yZV9mZWF0dXJlPVx1OTBmZFx1NjdjZlx1Njc5N1x1NjgzOFx1NWZjMworX1VJX1Vua25vd25fZmVhdHVyZT1cdTY3MmFcdTYzMDdcdTViOWEKKworCitfVUlfQ29tbW9uRWRpdG9yX21lbnU9JkNvbW1vbiBFZGl0b3IKKworX1VJX0NyZWF0ZUNoaWxkX21lbnVfaXRlbT0mTmV3IENoaWxkCitfVUlfQ3JlYXRlU2libGluZ19tZW51X2l0ZW09XHU2NWIwXHU3NTFmXHU2MjEwXHU0ZTAwXHU0ZTJhXHU1MTQ0XHU1ZjFmXHU3YzdiCisKK19VSV9TaG93UHJvcGVydGllc1ZpZXdfbWVudV9pdGVtPVx1NjYzZVx1NzkzYVx1NTQ4Y1x1NWM1ZVx1NjAyN1x1NjdlNVx1NzcwYgorX1VJX1JlZnJlc2hWaWV3ZXJfbWVudV9pdGVtPSZSZWZyZXNoCisKK19VSV9TZWxlY3Rpb25QYWdlX2xhYmVsPVx1OTAwOVx1NjJlOQorX1VJX1BhcmVudFBhZ2VfbGFiZWw9XHU1YmI2XHU5NTdmCitfVUlfTGlzdFBhZ2VfbGFiZWw9XHU3NmVlXHU1ZjU1CitfVUlfVHJlZVBhZ2VfbGFiZWw9XHU2ODExCitfVUlfVGFibGVQYWdlX2xhYmVsPVx1ODg2OAorX1VJX1RyZWVXaXRoQ29sdW1uc1BhZ2VfbGFiZWw9XHU1MjA2XHU1MjE3XHU3Njg0XHU2ODExCitfVUlfT2JqZWN0Q29sdW1uX2xhYmVsPVx1NWJmOVx1OGM2MQorX1VJX1NlbGZDb2x1bW5fbGFiZWw9XHU4MWVhXHU1ZGYxCisKK19VSV9Ob09iamVjdFNlbGVjdGVkPVx1NjVlMFx1OTAwOVx1NWI5YVx1NTE4NVx1NWJiOQorX1VJX1NpbmdsZU9iamVjdFNlbGVjdGVkPVx1OTAwOVx1NjJlOVx1NWJmOVx1OGM2MVx1ZmYxYXswfQorX1VJX011bHRpT2JqZWN0U2VsZWN0ZWQ9XHU5MDA5XHU2MmU5ezB9XHU1YmY5XHU4YzYxCisKK19VSV9PcGVuRWRpdG9yRXJyb3JfbGFiZWw9XHU2MjUzXHU1ZjAwXHU3ZjE2XHU4ZjkxXHU1NjY4CisKK19VSV9XaXphcmRfY2F0ZWdvcnk9XHU0ZjhiXHU1OTgyRU1GXHU2YTIxXHU1NzhiXHU1MjFiXHU1ZWZhXHU1NDExXHU1YmZjCisKK19VSV9DcmVhdGVNb2RlbEVycm9yX21lc3NhZ2U9XHU1NzI4XHU2NTg3XHU0ZWY2XHUyMDFjezB9XHUyMDFkXHU0ZTJkXHU5MDQ3XHU1MjMwXHU3Njg0XHU5NWVlXHU5ODk4CisKK19VSV9Db21tb25Nb2RlbFdpemFyZF9sYWJlbD1cdTkwMWFcdTc1MjhcdTZhMjFcdTU3OGIKK19VSV9Db21tb25Nb2RlbFdpemFyZF9kZXNjcmlwdGlvbj1cdTUyMWJcdTVlZmFcdTRlMDBcdTRlMmFcdTY1YjBcdTc2ODRcdTY2NmVcdTkwMWFcdTZhMjFcdTU3OGIKKworX1VJX0NvbW1vbkVkaXRvcl9sYWJlbD1cdTkwMWFcdTc1MjhcdTZhMjFcdTU3OGJcdTdmMTZcdThmOTFcdTU2NjgKKworX1VJX0NvbW1vbkVkaXRvckZpbGVuYW1lRGVmYXVsdEJhc2U9XHU2MjExXHU3Njg0CitfVUlfQ29tbW9uRWRpdG9yRmlsZW5hbWVFeHRlbnNpb249XHU1ZTM4XHU4OWMxXHU3Njg0CisKK19VSV9XaXphcmRfbGFiZWw9XHU2NWIwXHU1ZWZhCisKK19XQVJOX0ZpbGVuYW1lRXh0ZW5zaW9uPVx1NjU4N1x1NGVmNlx1NTQwZFx1NWZjNVx1OTg3Ylx1NGVlNSd7MH0gJydcdTdlZDNcdTVjM2UKKworX1VJX01vZGVsT2JqZWN0PVx1NmEyMVx1NTc4Ylx1NWJmOVx1OGM2MQorX1VJX1hNTEVuY29kaW5nPVhNTFx1N2YxNlx1NzgwMQorX1VJX1hNTEVuY29kaW5nQ2hvaWNlcz1VVEYtOCBBU0NJSSBVVEYtMTYgVVRGLTE2QkUgVVRGLTE2TEUgSVNPLTg4NTktMQorX1VJX1dpemFyZF9pbml0aWFsX29iamVjdF9kZXNjcmlwdGlvbj1cdTkwMDlcdTYyZTlcdTUyMWJcdTVlZmFcdTRlMDBcdTRlMmFcdTZhMjFcdTU3OGJcdTViZjlcdThjNjEKKworX1VJX0ZpbGVDb25mbGljdF9sYWJlbD1cdTY1ODdcdTRlZjZcdTUxYjJcdTdhODEKK19XQVJOX0ZpbGVDb25mbGljdD1cdTY3MDlcdTY3MmFcdTRmZGRcdTViNThcdTc2ODRcdTY2ZjRcdTY1MzlcdTRlMGVcdTdmMTZcdThmOTFcdTU2NjhcdTU5MTZcdTc2ODRcdTY2ZjRcdTY1MzlcdTUxYjJcdTdhODFcdTMwMDJcdTRmNjBcdTYwZjNcdTY1M2VcdTVmMDNcdThmZDlcdTRlMmFcdTdmMTZcdThmOTFcdTU2NjhcdTc2ODRcdTY2ZjRcdTY1MzlcdTU0MTdcdWZmMWYKK19VSV9EeW5hbWljTGFiZWxfdHlwZT1cdTUyYThcdTYwMDFcdTY4MDdcdTdiN2UKK19VSV9EeW5hbWljTm9kZUxhYmVsX3R5cGU9XHU1MmE4XHU2MDAxXHU4MjgyXHU3MGI5XHU2ODA3XHU3YjdlCitfVUlfRWRnZV90eXBlPVx1OGZiOVx1N2YxOAorX1VJX0dyYXBoX3R5cGU9XHU1NmZlCitfVUlfTGFiZWxfdHlwZT1cdTY4MDdcdTdiN2UKK19VSV9MYWJlbFZhbHVlX3R5cGU9XHU2ODA3XHU3YjdlXHU1MDNjCitfVUlfTm9kZV90eXBlPVx1ODI4Mlx1NzBiOQorX1VJX05vZGVMYWJlbF90eXBlPVx1ODI4Mlx1NzBiOVx1NjgwN1x1N2I3ZQorX1VJX1N0YXRpY05vZGVMYWJlbF90eXBlPVx1OTc1OVx1NjAwMVx1ODI4Mlx1NzBiOVx1NjgwN1x1N2I3ZQorX1VJX1VucmVzb2x2ZWRJZGVudGlmaWFibGVfdHlwZT1cdTRlM2FcdTg5ZTNcdTUxYjNcdTc2ODRcdThiYzZcdTUyMmJcdTU2NjgKK19VSV9VUklUb0lkZW50aWZpYWJsZU1hcEVudHJ5X3R5cGU9VVJJXHU2NzY1XHU4YmM2XHU1MjJiXHU2NjIwXHU1YzA0XHU5ODc5CitfVUlfU2FuaXR5Q2hlY2tlcl90eXBlPVx1NWI4Y1x1NjU3NFx1NjAyN1x1NjhjMFx1NjdlNQorX1VJX0RlY29yYXRvcl90eXBlPVx1ODhjNVx1OTk3MFx1NTY2OAorX1VJX0VkZ2VEZWNvcmF0b3JfdHlwZT1cdThmYjlcdTg4YzVcdTk5NzBcdTU2NjgKK19VSV9HcmFwaERlY29yYXRvcl90eXBlPVx1NTZmZVx1ODhjNVx1OTk3MAorX1VJX01vZGVsX3R5cGU9XHU2YTIxXHU1NzhiCitfVUlfTm9kZURlY29yYXRvcl90eXBlPVx1ODI4Mlx1NzBiOVx1ODhjNVx1OTk3MFx1NTY2OAorX1VJX1NURU1UaW1lX3R5cGU9U1RFTVx1NjVmNlx1OTVmNAorX1VJX1NjZW5hcmlvX3R5cGU9XHU2NWI5XHU2ODQ4CitfVUlfU2VxdWVuY2VyX3R5cGU9XHU1ZThmXHU1MjE3XHU1M2QxXHU3NTFmXHU1NjY4CitfVUlfU2VxdWVudGlhbFNlcXVlbmNlcl90eXBlPVx1OTg3YVx1NWU4Zlx1NWI5YVx1NWU4Zlx1NTY2OAorX1VJX0R5bmFtaWNMYWJlbF9uZXh0VmFsdWVWYWxpZF9mZWF0dXJlPVx1NGUwYlx1NGUwMFx1NGUyYVx1NTAzY1x1NzY4NFx1NjcwOVx1NjU0OAorX1VJX0R5bmFtaWNMYWJlbF9uZXh0VmFsdWVfZmVhdHVyZT1cdTYzYTVcdTRlMGJcdTY3NjVcdTc2ODRcdTRlZjdcdTUwM2MKK19VSV9FZGdlX2FfZmVhdHVyZT1BCitfVUlfRWRnZV9ub2RlQVVSSV9mZWF0dXJlPUFcdTgyODJcdTcwYjlcdTc2ODRVUkkKK19VSV9FZGdlX2JfZmVhdHVyZT1CCitfVUlfRWRnZV9ub2RlQlVSSV9mZWF0dXJlPUJcdTgyODJcdTcwYjlcdTc2ODRVUkkKK19VSV9FZGdlX2xhYmVsX2ZlYXR1cmU9XHU2ODA3XHU3YjdlCitfVUlfRWRnZV9kaXJlY3RlZF9mZWF0dXJlPVx1NjcwOVx1NTQxMVx1NzY4NAorX1VJX0dyYXBoX2VkZ2VzX2ZlYXR1cmU9XHU4ZmI5CitfVUlfR3JhcGhfbm9kZXNfZmVhdHVyZT1cdTgyODJcdTcwYjkKK19VSV9HcmFwaF9ncmFwaExhYmVsc19mZWF0dXJlPVx1NTZmZVx1ODg2OFx1NjgwN1x1N2I3ZQorX1VJX0dyYXBoX25vZGVMYWJlbHNfZmVhdHVyZT1cdTgyODJcdTcwYjlcdTY4MDdcdTdiN2UKK19VSV9HcmFwaF9keW5hbWljTGFiZWxzX2ZlYXR1cmU9XHU1MmE4XHU2MDAxXHU2ODA3XHU3YjdlCitfVUlfR3JhcGhfbnVtRWRnZXNfZmVhdHVyZT1cdThmYjlcdTY1NzAKK19VSV9HcmFwaF9udW1Ob2Rlc19mZWF0dXJlPVx1ODI4Mlx1NzBiOVx1NjU3MAorX1VJX0dyYXBoX251bUdyYXBoTGFiZWxzX2ZlYXR1cmU9XHU1NmZlXHU2ODA3XHU3YjdlXHU2NTcwCitfVUlfR3JhcGhfbnVtTm9kZUxhYmVsc19mZWF0dXJlPVx1ODI4Mlx1NzBiOVx1NjgwN1x1N2I3ZVx1NjU3MAorX1VJX0dyYXBoX251bUR5bmFtaWNMYWJlbHNfZmVhdHVyZT1cdTUyYThcdTYwMDFcdTY4MDdcdTdiN2VcdTY1NzAKK19VSV9HcmFwaF91bnJlc29sdmVkSWRlbnRpZmlhYmxlc19mZWF0dXJlPVx1NGUzYVx1ODllM1x1NTFiM1x1NzY4NFx1OGJjNlx1NTIyYlx1NTY2OAorX1VJX0xhYmVsX3VSSU9mSWRlbnRpZmlhYmxlVG9CZUxhYmVsZWRfZmVhdHVyZT1cdTUzZWZcdThiYzZcdTUyMmJcdTc2ODRVUklcdThmZGJcdTg4NGNcdTY4MDdcdThiYzYKK19VSV9MYWJlbF9jdXJyZW50VmFsdWVfZmVhdHVyZT1cdTVmNTNcdTUyNGRcdTUwM2MKK19VSV9Ob2RlX2VkZ2VzX2ZlYXR1cmU9XHU4ZmI5CitfVUlfTm9kZV9sYWJlbHNfZmVhdHVyZT1cdTY4MDdcdTdiN2UKK19VSV9Ob2RlTGFiZWxfbm9kZV9mZWF0dXJlPVx1ODI4Mlx1NzBiOQorX1VJX1VucmVzb2x2ZWRJZGVudGlmaWFibGVfc2NlbmFyaW9fZmVhdHVyZT1cdTY1YjlcdTY4NDgKK19VSV9VbnJlc29sdmVkSWRlbnRpZmlhYmxlX21vZGVsX2ZlYXR1cmU9XHU2YTIxXHU1NzhiCitfVUlfVW5yZXNvbHZlZElkZW50aWZpYWJsZV9ncmFwaF9mZWF0dXJlPVx1NTZmZQorX1VJX1VucmVzb2x2ZWRJZGVudGlmaWFibGVfaWRlbnRpZmlhYmxlX2ZlYXR1cmU9XHU1M2VmXHU4YmM2XHU1MjJiXHU3Njg0CitfVUlfVW5yZXNvbHZlZElkZW50aWZpYWJsZV91bnJlc29sdmVkVVJJX2ZlYXR1cmU9XHU2NzJhXHU4OWUzXHU1MWIzXHU3Njg0VVJJCitfVUlfVW5yZXNvbHZlZElkZW50aWZpYWJsZV9maWVsZE5hbWVfZmVhdHVyZT1cdTViNTdcdTZiYjVcdTU0MGRcdTc5ZjAKK19VSV9VUklUb0lkZW50aWZpYWJsZU1hcEVudHJ5X2tleV9mZWF0dXJlPVx1OTFjZFx1NzBiOQorX1VJX1VSSVRvSWRlbnRpZmlhYmxlTWFwRW50cnlfdmFsdWVfZmVhdHVyZT1cdTRlZjdcdTUwM2MKK19VSV9EZWNvcmF0b3JfaW5kZXhfZmVhdHVyZT1cdTYzMDdcdTY1NzAKK19VSV9EZWNvcmF0b3JfbGFiZWxzVG9VcGRhdGVfZmVhdHVyZT1cdTY4MDdcdThiYjBcdTg5ODFcdTY2ZjRcdTY1YjAKK19VSV9Nb2RlbF9tb2RlbHNfZmVhdHVyZT1cdTZhMjFcdTU3OGIKK19VSV9Nb2RlbF9ncmFwaHNfZmVhdHVyZT1cdTU2ZmUKK19VSV9Nb2RlbF9ncmFwaERlY29yYXRvcnNfZmVhdHVyZT1cdTU2ZmVcdTg4YzVcdTk5NzAKK19VSV9Nb2RlbF9ub2RlRGVjb3JhdG9yc19mZWF0dXJlPVx1ODI4Mlx1NzBiOVx1ODhjNVx1OTk3MFx1NTY2OAorX1VJX01vZGVsX2VkZ2VEZWNvcmF0b3JzX2ZlYXR1cmU9XHU4ZmI5XHU4OGM1XHU5OTcwXHU1NjY4CitfVUlfTW9kZWxfY2Fub25pY2FsR3JhcGhEZWNvcmF0b3JzX2ZlYXR1cmU9XHU2ODA3XHU1MWM2XHU1NmZlXHU1ZjYyXHU0ZmVlXHU5OTcwXHU1NjY4CitfVUlfTW9kZWxfY2Fub25pY2FsTm9kZURlY29yYXRvcnNfZmVhdHVyZT1cdTY4MDdcdTUxYzZcdTgyODJcdTcwYjlcdTRmZWVcdTk5NzBcdTU2NjgKK19VSV9Nb2RlbF9jYW5vbmljYWxFZGdlRGVjb3JhdG9yc19mZWF0dXJlPVx1NjgwN1x1NTFjNlx1OGZiOVx1NzU0Y1x1NGZlZVx1OTk3MFx1NTY2OAorX1VJX1NURU1UaW1lX3RpbWVfZmVhdHVyZT1cdTY1ZjZcdTk1ZjQKK19VSV9TY2VuYXJpb19tb2RlbF9mZWF0dXJlPVx1NmEyMVx1NTc4YgorX1VJX1NjZW5hcmlvX3NlcXVlbmNlcl9mZWF0dXJlPVx1NWU4Zlx1NTIxN1x1NTNkMVx1NzUxZlx1NTY2OAorX1VJX1NjZW5hcmlvX3NjZW5hcmlvRGVjb3JhdG9yc19mZWF0dXJlPVx1NjBjNVx1NjY2Zlx1NGZlZVx1OTk3MFx1NTY2OAorX1VJX1NjZW5hcmlvX2Nhbm9uaWNhbEdyYXBoX2ZlYXR1cmU9XHU2ODA3XHU1MWM2XHU1NmZlXHU1ZjYyCitfVUlfU2NlbmFyaW9fY2Fub25pY2FsTW9kZWxEZWNvcmF0b3JzX2ZlYXR1cmU9XHU2ODA3XHU1MWM2XHU2YTIxXHU1NzhiXHU0ZmVlXHU5OTcwXHU1NjY4CitfVUlfU2NlbmFyaW9fY2Fub25pY2FsU2NlbmFyaW9EZWNvcmF0b3JzX2ZlYXR1cmU9XHU2ODA3XHU1MWM2XHU2NWI5XHU2ODQ4XHU0ZmVlXHU5OTcwXHU1NjY4CitfVUlfU2NlbmFyaW9fdGl0bGVfZmVhdHVyZT1cdTY4MDdcdTk4OTgKK19VSV9TZXF1ZW5jZXJfc3RhcnRUaW1lX2ZlYXR1cmU9XHU1ZjAwXHU1OWNiXHU2NWY2XHU5NWY0CitfVUlfU2VxdWVuY2VyX2VuZFRpbWVfZmVhdHVyZT1cdTdlZDNcdTY3NWZcdTY1ZjZcdTk1ZjQKK19VSV9TZXF1ZW5jZXJfY3VycmVudFRpbWVfZmVhdHVyZT1cdTVmNTNcdTUyNGRcdTY1ZjZcdTk1ZjQKK19VSV9TZXF1ZW5jZXJfbmV4dFRpbWVfZmVhdHVyZT1cdTRlMGJcdTZiMjEKK19VSV9TZXF1ZW5jZXJfdGltZURlbHRhX2ZlYXR1cmU9XHU2NWY2XHU5NWY0XHU1ZGVlCitfVUlfU2VxdWVuY2VyX2R1cmF0aW9uX2ZlYXR1cmU9XHU2MzAxXHU3ZWVkXHU2NWY2XHU5NWY0CitfVUlfU2VxdWVuY2VyX3RpbWVUb1N0b3BfZmVhdHVyZT1cdTk3MDBcdTg5ODFcdTUwNWNcdTZiNjIKK19VSV9TZXF1ZW5jZXJfd29ya0NvbXBsZXRlX2ZlYXR1cmU9XHU1ZGU1XHU0ZjVjXHU1YjhjXHU2MjEwCitfVUlfU2VxdWVuY2VyX3dvcmtJbmNyZW1lbnRfZmVhdHVyZT1cdTVkZTVcdTRmNWNcdTU4OWVcdTkxY2YKK19VSV9TZXF1ZW50aWFsU2VxdWVuY2VyX3RpbWVJbmNyZW1lbnRfZmVhdHVyZT1cdTY1ZjZcdTk1ZjRcdTkwMTJcdTU4OWUKK19VSV9HcmFwaEVkaXRvcl9tZW51PSZHcmFwaCBFZGl0b3IKK19VSV9Nb2RlbEVkaXRvcl9tZW51PSZNb2RlbCBFZGl0b3IKK19VSV9TY2VuYXJpb0VkaXRvcl9tZW51PSZTY2VuYXJpbyBFZGl0b3IKKworX1VJX0dyYXBoTW9kZWxXaXphcmRfbGFiZWw9XHU1NmZlXHU2YTIxXHU1NzhiCitfVUlfR3JhcGhNb2RlbFdpemFyZF9kZXNjcmlwdGlvbj1cdTUyMWJcdTVlZmFcdTRlMDBcdTRlMmFcdTY1YjBcdTc2ODRcdTU2ZmVcdTVmNjJcdTZhMjFcdTU3OGIKKworX1VJX0dyYXBoRWRpdG9yX2xhYmVsPVx1NTZmZVx1NWY2Mlx1NmEyMVx1NTc4Ylx1N2YxNlx1OGY5MVx1NTY2OAorCitfVUlfR3JhcGhFZGl0b3JGaWxlbmFtZURlZmF1bHRCYXNlPVx1NjIxMVx1NzY4NAorX1VJX0dyYXBoRWRpdG9yRmlsZW5hbWVFeHRlbnNpb249XHU1NmZlCisKK19VSV9Nb2RlbE1vZGVsV2l6YXJkX2xhYmVsPVx1NmEyMVx1NTc4YgorX1VJX01vZGVsTW9kZWxXaXphcmRfZGVzY3JpcHRpb249XHU1MjFiXHU1ZWZhXHU0ZTAwXHU0ZTJhXHU2NWIwXHU3Njg0XHU2YTIxXHU1NzhiCisKK19VSV9Nb2RlbEVkaXRvcl9sYWJlbD1cdTZhMjFcdTU3OGJcdTdmMTZcdThmOTFcdTU2NjgKKworX1VJX01vZGVsRWRpdG9yRmlsZW5hbWVEZWZhdWx0QmFzZT1cdTYyMTFcdTc2ODQKK19VSV9Nb2RlbEVkaXRvckZpbGVuYW1lRXh0ZW5zaW9uPVx1NmEyMVx1NWYwZgorCitfVUlfU2NlbmFyaW9Nb2RlbFdpemFyZF9sYWJlbD1cdTYwYzVcdTY2NmZcdTZhMjFcdTU3OGIKK19VSV9TY2VuYXJpb01vZGVsV2l6YXJkX2Rlc2NyaXB0aW9uPVx1NTIxYlx1NWVmYVx1NGUwMFx1NGUyYVx1NjViMFx1NzY4NFx1NjViOVx1Njg0OFx1NmEyMVx1NTc4YgorCitfVUlfU2NlbmFyaW9FZGl0b3JfbGFiZWw9XHU1NzNhXHU2NjZmXHU2YTIxXHU1NzhiXHU3ZjE2XHU4ZjkxXHU1NjY4CisKK19VSV9TY2VuYXJpb0VkaXRvckZpbGVuYW1lRGVmYXVsdEJhc2U9XHU2MjExXHU3Njg0CitfVUlfU2NlbmFyaW9FZGl0b3JGaWxlbmFtZUV4dGVuc2lvbj1cdTY1YjlcdTY4NDgKKworX1VJX0R5bmFtaWNMYWJlbF9kZWNvcmF0b3JfZmVhdHVyZT1cdTg4YzVcdTk5NzBcdTU2NjgKK19VSV9HcmFwaF9kZWNvcmF0b3JzX2ZlYXR1cmU9XHU4OGM1XHU5OTcwXHU1NjY4CitfVUlfRGVjb3JhdG9yX2dyYXBoX2ZlYXR1cmU9XHU1NmZlCitfVUlfTGFiZWxfaWRlbnRpZmlhYmxlX2ZlYXR1cmU9XHU1M2VmXHU4YmM2XHU1MjJiXHU3Njg0CitfVUlfRHluYW1pY0VkZ2VMYWJlbF90eXBlPVx1NTJhOFx1NjAwMVx1OGZiOVx1NzU0Y1x1NjgwN1x1N2I3ZQorX1VJX0VkZ2VMYWJlbF90eXBlPVx1OGZiOVx1NjgwN1x1N2I3ZQorX1VJX1N0YXRpY0VkZ2VMYWJlbF90eXBlPVx1OTc1OVx1NjAwMVx1OGZiOVx1N2YxOFx1NjgwN1x1N2I3ZQorX1VJX0VkZ2VMYWJlbF9lZGdlX2ZlYXR1cmU9XHU4ZmI5XHU3ZjE4CitfVUlfUmVhbFRpbWVTZXF1ZW5jZXJfdHlwZT1cdTViOWVcdTY1ZjZcdTVlOGZcdTUyMTdcdTU2NjgKK19VSV9TZXF1ZW5jZXJfY3ljbGVfZmVhdHVyZT1cdTU0NjhcdTY3MWYKK19VSV9VUklUb0VkZ2VNYXBFbnRyeV90eXBlPVVSSVx1ODFmM1x1OGZiOVx1N2YxOFx1NjYyMFx1NWMwNFx1OTg3OQorX1VJX1VSSVRvTm9kZU1hcEVudHJ5X3R5cGU9XHU4MjgyXHU3MGI5XHU3Njg0VVJJXHU2NjIwXHU1YzA0XHU5ODc5CitfVUlfVVJJVG9MYWJlbE1hcEVudHJ5X3R5cGU9XHU2ODA3XHU3YjdlXHU3Njg0VVJJXHU2NjIwXHU1YzA0XHU5ODc5CitfVUlfVVJJVG9Ob2RlTGFiZWxNYXBFbnRyeV90eXBlPVx1ODI4Mlx1NzBiOVx1NjgwN1x1N2I3ZVx1NzY4NFVSSVx1NjYyMFx1NWMwNFx1OTg3OQorX1VJX1VSSVRvRWRnZU1hcEVudHJ5X2tleV9mZWF0dXJlPVx1OTFjZFx1NzBiOQorX1VJX1VSSVRvRWRnZU1hcEVudHJ5X3ZhbHVlX2ZlYXR1cmU9XHU0ZWY3XHU1MDNjCitfVUlfVVJJVG9Ob2RlTWFwRW50cnlfa2V5X2ZlYXR1cmU9XHU5MWNkXHU3MGI5CitfVUlfVVJJVG9Ob2RlTWFwRW50cnlfdmFsdWVfZmVhdHVyZT1cdTRlZjdcdTUwM2MKK19VSV9VUklUb0xhYmVsTWFwRW50cnlfa2V5X2ZlYXR1cmU9XHU5MWNkXHU3MGI5CitfVUlfVVJJVG9MYWJlbE1hcEVudHJ5X3ZhbHVlX2ZlYXR1cmU9XHU0ZWY3XHU1MDNjCitfVUlfVVJJVG9Ob2RlTGFiZWxNYXBFbnRyeV9rZXlfZmVhdHVyZT1cdTkxY2RcdTcwYjkKK19VSV9VUklUb05vZGVMYWJlbE1hcEVudHJ5X3ZhbHVlX2ZlYXR1cmU9XHU0ZWY3XHU1MDNjCitfVUlfQm9vbGVhblNlcXVlbmNlTW9kaWZpZXJfdHlwZT1cdTVlMDNcdTVjMTRcdTVlOGZcdTUyMTdcdTRmZWVcdTY1MzlcdTU2NjgKK19VSV9Eb3VibGVSYW5nZU1vZGlmaWVyX3R5cGU9XHU1M2NjXHU4MzAzXHU1NmY0aWVcdTRmZWVcdTY1MzlcdTU2NjgKK19VSV9Eb3VibGVTZXF1ZW5jZU1vZGlmaWVyX3R5cGU9XHU1M2NjXHU1ZThmXHU1MjE3XHU0ZmVlXHU2NTM5XHU1NjY4CitfVUlfRXhwZXJpbWVudF90eXBlPVx1NWI5ZVx1OWE4YworX1VJX0ZlYXR1cmVNb2RpZmllcl90eXBlPVx1NTI5Zlx1ODBmZFx1NGZlZVx1NjUzOVx1NTY2OAorX1VJX0ludGVnZXJSYW5nZU1vZGlmaWVyX3R5cGU9XHU2NTc0XHU2NTcwXHU4MzAzXHU1NmY0XHU0ZmVlXHU2NTM5XHU1NjY4CitfVUlfSW50ZWdlclNlcXVlbmNlTW9kaWZpZXJfdHlwZT1cdTY1NzRcdTY1NzBcdTVlOGZcdTUyMTdcdTRmZWVcdTY1MzlcdTU2NjgKK19VSV9Nb2RpZmllcl90eXBlPVx1NGZlZVx1NjUzOVx1NTY2OAorX1VJX1JhbmdlTW9kaWZpZXJfdHlwZT1cdTgzMDNcdTU2ZjRcdTRmZWVcdTY1MzlcdTU2NjgKK19VSV9TVEVNVGltZVJhbmdlTW9kaWZpZXJfdHlwZT1TVEVNXHU2NWY2XHU5NWY0XHU4MzAzXHU1NmY0XHU0ZmVlXHU5OTcwXHU1NjY4CitfVUlfU1RFTVRpbWVTZXF1ZW5jZU1vZGlmaWVyX3R5cGU9U1RFTVx1NjVmNlx1OTVmNFx1NWU4Zlx1NTIxN1x1NGZlZVx1OTk3MFx1NTY2OAorX1VJX1NlcXVlbmNlTW9kaWZpZXJfdHlwZT1cdTVlOGZcdTUyMTdcdTRmZWVcdTY1MzlcdTU2NjgKK19VSV9TdHJpbmdTZXF1ZW5jZU1vZGlmaWVyX3R5cGU9XHU1YjU3XHU3YjI2XHU0ZTMyXHU1ZThmXHU1MjE3XHU0ZmVlXHU2NTM5XHU1NjY4CitfVUlfQm9vbGVhblNlcXVlbmNlTW9kaWZpZXJfc2VxdWVuY2VfZmVhdHVyZT1cdTVlOGZcdTUyMTcKK19VSV9Eb3VibGVSYW5nZU1vZGlmaWVyX3N0YXJ0VmFsdWVfZmVhdHVyZT1cdTVmMDBcdTU5Y2JcdTUwM2MKK19VSV9Eb3VibGVSYW5nZU1vZGlmaWVyX2VuZFZhbHVlX2ZlYXR1cmU9XHU3ZWQzXHU2NzVmXHU1MDNjCitfVUlfRG91YmxlUmFuZ2VNb2RpZmllcl9pbmNyZW1lbnRfZmVhdHVyZT1cdTU4OWVcdTkxY2YKK19VSV9Eb3VibGVTZXF1ZW5jZU1vZGlmaWVyX3NlcXVlbmNlX2ZlYXR1cmU9XHU1ZThmXHU1MjE3CitfVUlfRXhwZXJpbWVudF9leHBlcmltZW50c19mZWF0dXJlPVx1NWI5ZVx1OWE4YworX1VJX0V4cGVyaW1lbnRfbW9kaWZpZXJzX2ZlYXR1cmU9XHU0ZmVlXHU2NTM5XHU1NjY4CitfVUlfRXhwZXJpbWVudF9tb2RpZmljYXRpb25TdW1tYXJ5X2ZlYXR1cmU9XHU0ZmVlXHU2NTM5XHU2NDU4XHU4OTgxCitfVUlfRXhwZXJpbWVudF9jb21wbGV0ZV9mZWF0dXJlPVx1NWI4Y1x1NjIxMAorX1VJX0ZlYXR1cmVNb2RpZmllcl9mZWF0dXJlSWRfZmVhdHVyZT1cdTUyOWZcdTgwZmRcdTY4MDdcdThiYzYKK19VSV9GZWF0dXJlTW9kaWZpZXJfbW9kaWZpY2F0aW9uU3VtbWFyeV9mZWF0dXJlPVx1NGZlZVx1NjUzOVx1NjQ1OFx1ODk4MQorX1VJX0ZlYXR1cmVNb2RpZmllcl9jb21wbGV0ZV9mZWF0dXJlPVx1NWI4Y1x1NjIxMAorX1VJX0ludGVnZXJSYW5nZU1vZGlmaWVyX3N0YXJ0VmFsdWVfZmVhdHVyZT1cdTVmMDBcdTU5Y2JcdTUwM2MKK19VSV9JbnRlZ2VyUmFuZ2VNb2RpZmllcl9lbmRWYWx1ZV9mZWF0dXJlPVx1N2VkM1x1Njc1Zlx1NTAzYworX1VJX0ludGVnZXJSYW5nZU1vZGlmaWVyX2luY3JlbWVudF9mZWF0dXJlPVx1NTg5ZVx1OTFjZgorX1VJX0ludGVnZXJTZXF1ZW5jZU1vZGlmaWVyX3NlcXVlbmNlX2ZlYXR1cmU9XHU1ZThmXHU1MjE3CitfVUlfTW9kaWZpZXJfdGFyZ2V0VVJJX2ZlYXR1cmU9XHU3NmVlXHU2ODA3VVJJCitfVUlfTW9kaWZpZXJfZmVhdHVyZU1vZGlmaWVyc19mZWF0dXJlPVx1NTI5Zlx1ODBmZFx1NGZlZVx1NjUzOVx1NTY2OAorX1VJX01vZGlmaWVyX21vZGlmaWNhdGlvblN1bW1hcnlfZmVhdHVyZT1cdTRmZWVcdTY1MzlcdTY0NThcdTg5ODEKK19VSV9Nb2RpZmllcl9jb21wbGV0ZV9mZWF0dXJlPVx1NWI4Y1x1NjIxMAorX1VJX1NURU1UaW1lUmFuZ2VNb2RpZmllcl9zdGFydFZhbHVlX2ZlYXR1cmU9XHU1ZjAwXHU1OWNiXHU1MDNjCitfVUlfU1RFTVRpbWVSYW5nZU1vZGlmaWVyX2VuZFZhbHVlX2ZlYXR1cmU9XHU3ZWQzXHU2NzVmXHU1MDNjCitfVUlfU1RFTVRpbWVSYW5nZU1vZGlmaWVyX2luY3JlbWVudF9mZWF0dXJlPVx1NTg5ZVx1OTFjZgorX1VJX1NURU1UaW1lU2VxdWVuY2VNb2RpZmllcl9zZXF1ZW5jZV9mZWF0dXJlPVx1NWU4Zlx1NTIxNworX1VJX1NlcXVlbmNlTW9kaWZpZXJfc2VxdWVuY2VTaXplX2ZlYXR1cmU9XHU1ZThmXHU1MjE3XHU3Njg0XHU1OTI3XHU1YzBmCitfVUlfU3RyaW5nU2VxdWVuY2VNb2RpZmllcl9zZXF1ZW5jZV9mZWF0dXJlPVx1NWU4Zlx1NTIxNworX1VJX0Jvb2xlYW5TZXF1ZW5jZU1vZGlmaWVyX2N1cnJlbnRWYWx1ZV9mZWF0dXJlPVx1NWY1M1x1NTI0ZFx1NTAzYworX1VJX0RvdWJsZVJhbmdlTW9kaWZpZXJfY3VycmVudFZhbHVlX2ZlYXR1cmU9XHU1ZjUzXHU1MjRkXHU1MDNjCitfVUlfRG91YmxlU2VxdWVuY2VNb2RpZmllcl9jdXJyZW50VmFsdWVfZmVhdHVyZT1cdTVmNTNcdTUyNGRcdTUwM2MKK19VSV9GZWF0dXJlTW9kaWZpZXJfZVN0cnVjdHVyYWxGZWF0dXJlX2ZlYXR1cmU9RVN0cnVjdHVyYWxcdTUyOWZcdTgwZmQKK19VSV9JbnRlZ2VyUmFuZ2VNb2RpZmllcl9jdXJyZW50VmFsdWVfZmVhdHVyZT1cdTVmNTNcdTUyNGRcdTUwM2MKK19VSV9JbnRlZ2VyU2VxdWVuY2VNb2RpZmllcl9jdXJyZW50VmFsdWVfZmVhdHVyZT1cdTVmNTNcdTUyNGRcdTUwM2MKK19VSV9TVEVNVGltZVJhbmdlTW9kaWZpZXJfY3VycmVudFZhbHVlX2ZlYXR1cmU9XHU1ZjUzXHU1MjRkXHU1MDNjCitfVUlfU1RFTVRpbWVTZXF1ZW5jZU1vZGlmaWVyX2N1cnJlbnRWYWx1ZV9mZWF0dXJlPVx1NWY1M1x1NTI0ZFx1NTAzYworX1VJX1NlcXVlbmNlTW9kaWZpZXJfY3VycmVudFNlcXVlbmNlSW5kZXhfZmVhdHVyZT1cdTVmNTNcdTUyNGRcdTVlOGZcdTUyMTdcdTYzMDdcdTY1NzAKK19VSV9TdHJpbmdTZXF1ZW5jZU1vZGlmaWVyX2N1cnJlbnRWYWx1ZV9mZWF0dXJlPVx1NWY1M1x1NTI0ZFx1NTAzYworX1VJX0ZlYXR1cmVNb2RpZmllcl9jdXJyZW50VmFsdWVfZmVhdHVyZT1cdTVmNTNcdTUyNGRcdTUwM2MKK19VSV9GZWF0dXJlTW9kaWZpZXJfbmV4dFZhbHVlX2ZlYXR1cmU9XHU2M2E1XHU0ZTBiXHU2NzY1XHU3Njg0XHU0ZWY3XHU1MDNjCitfVUlfU2VxdWVuY2VNb2RpZmllcl9zZXF1ZW5jZV9mZWF0dXJlPVx1NWU4Zlx1NTIxNworX1VJX0V4cGVyaW1lbnRfc2NlbmFyaW9fZmVhdHVyZT1cdTY1YjlcdTY4NDgKK19VSV9FeHBlcmltZW50X25leHRTY2VuYXJpb19mZWF0dXJlPVx1NGUwYlx1NGUwMFx1NGUyYVx1NjViOVx1Njg0OAorX1VJX1JhbmdlTW9kaWZpZXJfc3RhcnRWYWx1ZV9mZWF0dXJlPVx1NWYwMFx1NTljYlx1NTAzYworX1VJX1JhbmdlTW9kaWZpZXJfZW5kVmFsdWVfZmVhdHVyZT1cdTdlZDNcdTY3NWZcdTUwM2MKK19VSV9SYW5nZU1vZGlmaWVyX2luY3JlbWVudF9mZWF0dXJlPVx1NTg5ZVx1OTFjZgorX1VJX0xvbmdSYW5nZU1vZGlmaWVyX3R5cGU9XHU5NTdmXHU1NzhiXHU3Njg0XHU4MzAzXHU1NmY0XHU0ZmVlXHU5OTcwXHU1NjY4CitfVUlfRG91YmxlTk9QTW9kaWZpZXJfdHlwZT1cdTUzY2NOT1BcdTRmZWVcdTY1MzlcdTU2NjgKK19VSV9JbnRlZ2VyTk9QTW9kaWZpZXJfdHlwZT1cdTY1NzRcdTU3OGJOT1BcdTRmZWVcdTY1MzlcdTU2NjgKK19VSV9Mb25nTk9QTW9kaWZpZXJfdHlwZT1cdTk1N2ZcdTU3OGJcdTc2ODROT1BcdTRmZWVcdTk5NzBcdTU2NjgKK19VSV9OT1BNb2RpZmllcl90eXBlPU5PUFx1NGZlZVx1NjUzOVx1NTY2OAorX1VJX1NURU1UaW1lTk9QTW9kaWZpZXJfdHlwZT1TVEVNXHU2NWY2XHU5NWY0Tk9QXHU0ZmVlXHU5OTcwXHU1NjY4CitfVUlfU3RyaW5nTk9QTW9kaWZpZXJfdHlwZT1cdTViNTdcdTdiMjZcdTRlMzJOT1BcdTRmZWVcdTY1MzlcdTU2NjgKK19VSV9GZWF0dXJlTW9kaWZpZXJfc3RydWN0dXJhbEZlYXR1cmVOYW1lX2ZlYXR1cmU9XHU3ZWQzXHU2Nzg0XHU1MjlmXHU4MGZkXHU1NDBkXHU3OWYwCitfVUlfU3RyaW5nX3R5cGU9XHU1YjU3XHU3YjI2XHU0ZTMyCitfVUlfRmVhdHVyZU1vZGlmaWVyX2lkZW50aWZpYWJsZV9mZWF0dXJlPVx1NTNlZlx1OGJjNlx1NTIyYlx1NzY4NAorX1VJX0xvbmdSYW5nZU1vZGlmaWVyX3N0YXJ0VmFsdWVfZmVhdHVyZT1cdTVmMDBcdTU5Y2JcdTUwM2MKK19VSV9Mb25nUmFuZ2VNb2RpZmllcl9lbmRWYWx1ZV9mZWF0dXJlPVx1N2VkM1x1Njc1Zlx1NTAzYworX1VJX0xvbmdSYW5nZU1vZGlmaWVyX2luY3JlbWVudF9mZWF0dXJlPVx1NTg5ZVx1OTFjZgorX1VJX0ZlYXR1cmVNb2RpZmllcl9jdXJyZW50VmFsdWVUZXh0X2ZlYXR1cmU9XHU1ZjUzXHU1MjRkXHU1MDNjXHU2NTg3XHU2NzJjCitfVUlfTG9uZ1JhbmdlTW9kaWZpZXJfY3VycmVudFZhbHVlX2ZlYXR1cmU9XHU1ZjUzXHU1MjRkXHU1MDNjCitfVUlfRmVhdHVyZU1vZGlmaWVyX3RhcmdldF9mZWF0dXJlPVx1NzZlZVx1NjgwNworX1VJX0ZlYXR1cmVNb2RpZmllcl9mZWF0dXJlTmFtZV9mZWF0dXJlPVx1NTI5Zlx1ODBmZFx1NTQwZFx1NzlmMAorX1VJX0RvdWJsZVJhbmdlTW9kaWZpZXJfbmV4dFZhbHVlX2ZlYXR1cmU9XHU2M2E1XHU0ZTBiXHU2NzY1XHU3Njg0XHU0ZWY3XHU1MDNjCitfVUlfSW50ZWdlclJhbmdlTW9kaWZpZXJfbmV4dFZhbHVlX2ZlYXR1cmU9XHU2M2E1XHU0ZTBiXHU2NzY1XHU3Njg0XHU0ZWY3XHU1MDNjCitfVUlfU1RFTVRpbWVSYW5nZU1vZGlmaWVyX25leHRWYWx1ZV9mZWF0dXJlPVx1NjNhNVx1NGUwYlx1Njc2NVx1NzY4NFx1NGVmN1x1NTAzYworX1VJX0xvbmdSYW5nZU1vZGlmaWVyX25leHRWYWx1ZV9mZWF0dXJlPVx1NjNhNVx1NGUwYlx1Njc2NVx1NzY4NFx1NGVmN1x1NTAzYworX1VJX1NlcXVlbmNlTW9kaWZpZXJfbmV4dFZhbHVlX2ZlYXR1cmU9XHU2M2E1XHU0ZTBiXHU2NzY1XHU3Njg0XHU0ZWY3XHU1MDNjCitfVUlfTG9uZ1NlcXVlbmNlTW9kaWZpZXJfdHlwZT1cdTk1N2ZcdTU3OGJcdTc2ODRcdTVlOGZcdTUyMTdcdTRmZWVcdTk5NzBcdTU2NjgKK19VSV9Mb25nU2VxdWVuY2VNb2RpZmllcl9zZXF1ZW5jZV9mZWF0dXJlPVx1NWU4Zlx1NTIxNworX1VJX0NvbXBhcmFibGVfdHlwZT1cdTUzZWZcdTZiZDQKK19VSV9HcmFwaF90aW1lX2ZlYXR1cmU9XHU2NWY2XHU5NWY0CitfVUlfQW5kX3R5cGU9XHU1ZTc2XHU0ZTE0CitfVUlfQm9vbGVhbkV4cHJlc3Npb25fdHlwZT1cdTVlMDNcdTVjMTRcdTg4NjhcdThmYmVcdTVmMGYKK19VSV9Cb29sZWFuT3BlcmF0b3JfdHlwZT1cdTVlMDNcdTVjMTRcdTY0Y2RcdTRmNWMKK19VSV9GYWxzZV90eXBlPVx1NTA0NworX1VJX05hcnlCb29sZWFuT3BlcmF0b3JfdHlwZT1cdTZjYTFcdTY3MDlcdTVlMDNcdTVjMTRcdTY0Y2RcdTRmNWMKK19VSV9Ob3RfdHlwZT1cdTRlMGQKK19VSV9Pcl90eXBlPVx1NjIxNgorX1VJX1ByZWRpY2F0ZV90eXBlPVx1NjNjZlx1OGZmMAorX1VJX1ByZWRpY2F0ZVJlZmVyZW5jZV90eXBlPVx1NTNjMlx1ODAwM1x1NjU4N1x1NzMyZQorX1VJX1Rlc3RfdHlwZT1cdTZkNGJcdThiZDUKK19VSV9UcnVlX3R5cGU9XHU3NzFmCitfVUlfVW5hcnlCb29sZWFuT3BlcmF0b3JfdHlwZT1cdTRlMDBcdTUxNDNcdTVlMDNcdTVjMTRcdTY0Y2RcdTRmNWMKK19VSV9UcmlnZ2VyX3R5cGU9XHU4OWU2XHU1M2QxCitfVUlfTmFyeUJvb2xlYW5PcGVyYXRvcl9vcGVyYW5kc19mZWF0dXJlPVx1NjRjZFx1NGY1Y1x1NjU3MAorX1VJX1ByZWRpY2F0ZVJlZmVyZW5jZV9wcmVkaWNhdGVfZmVhdHVyZT1cdTYzY2ZcdThmZjAKK19VSV9VbmFyeUJvb2xlYW5PcGVyYXRvcl9vcGVyYW5kX2ZlYXR1cmU9XHU2NGNkXHU0ZjVjXHU2NTcwCitfVUlfVHJpZ2dlcl9wcmVkaWNhdGVfZmVhdHVyZT1cdTYzY2ZcdThmZjAKK19VSV9UcmlnZ2VyX2FjdGlvbl9mZWF0dXJlPVx1NTJhOFx1NGY1YworX1VJX1ByZWRpY2F0ZUV4cHJlc3Npb25fdHlwZT1cdTg4NjhcdThmYmUKK19VSV9QcmVkaWNhdGVFeHByZXNzaW9uX3ByZWRpY2F0ZV9mZWF0dXJlPVx1NjNjZlx1OGZmMAorX1VJX0lkZW50aWZpYWJsZVByZWRpY2F0ZV90eXBlPVx1NTNlZlx1OGJjNlx1NTIyYlx1NjNjZlx1OGZmMAorX1VJX0lkZW50aWZpYWJsZVByZWRpY2F0ZUV4cHJlc3Npb25fdHlwZT1cdTUzZWZcdThiYzZcdTUyMmJcdTYzY2ZcdThmZjBcdTg4NjhcdThmYmVcdTVmMGYKK19VSV9JZGVudGlmaWFibGVUZXN0X3R5cGU9XHU4YmM2XHU1MjJiXHU2ZDRiXHU4YmQ1CitfVUlfVGltZVRlc3RfdHlwZT1cdTY1ZjZcdTk1ZjRcdTZkNGJcdThiZDUKK19VSV9UaW1lVGVzdF90aW1lX2ZlYXR1cmU9XHU2NWY2XHU5NWY0CitfVUlfQWJzb2x1dGVUaW1lVGVzdF90eXBlPVx1N2VkZFx1NWJmOVx1NjVmNlx1OTVmNFx1NmQ0Ylx1OGJkNQorX1VJX0VsYXBzZWRUaW1lVGVzdF90eXBlPVx1N2VjZlx1OGZjN1x1NjVmNlx1OTVmNFx1NmQ0Ylx1OGJkNQorX1VJX1RpbWVUZXN0X3JlZmVyZW5jZVRpbWVfZmVhdHVyZT1cdTUzYzJcdTgwMDNcdTY1ZjZcdTk1ZjQKK19VSV9FbGFwc2VkVGltZVRlc3RfcmVmZXJlbmNlVGltZVZhbGlkX2ZlYXR1cmU9XHU1M2MyXHU4MDAzXHU2NWY2XHU5NWY0XHU2NzA5XHU2NTQ4CitfVUlfRWxhcHNlZFRpbWVUZXN0X2VsYXBzZWRNaWxsaXNlY29uZHNfZmVhdHVyZT1cdTdlY2ZcdThmYzdcdTc2ODRcdTZiZWJcdTc5ZDIKK19VSV9FbGFwc2VkVGltZVRlc3RfbnVtYmVyb2ZEYXlzX2ZlYXR1cmU9XHU1OTI5XHU2NTcwCitfVUlfQWJzb2x1dGVUaW1lVGVzdF9yZWZlcmVuY2VUaW1lX2ZlYXR1cmU9XHU1M2MyXHU4MDAzXHU2NWY2XHU5NWY0CitfVUlfRWxhcHNlZFRpbWVUZXN0X3JlZmVyZW5jZVRpbWVfZmVhdHVyZT1cdTUzYzJcdTgwMDNcdTY1ZjZcdTk1ZjQKK19VSV9BYnNvbHV0ZVRpbWVUZXN0X3RpbWVfZmVhdHVyZT1cdTY1ZjZcdTk1ZjQKK19VSV9EZWNvcmF0b3JfZW5hYmxlZF9mZWF0dXJlPVx1NWRmMlx1NTQyZlx1NzUyOAorX1VJX0RlY29yYXRvcl9ncmFwaERlY29yYXRlZF9mZWF0dXJlPVx1NTZmZVx1ODhjNVx1OTk3MAorX1VJX01vZGlmaWFibGVfdHlwZT1cdTUzZWZcdTRmZWVcdTY1MzkKK19VSV9Eb3VibGVSYW5nZU1vZGlmaWVyX29yZ2luYWxWYWx1ZV9mZWF0dXJlPVx1NTM5Zlx1NTljYlx1NTAzYworX1VJX0ludGVnZXJSYW5nZU1vZGlmaWVyX29yZ2luYWxWYWx1ZV9mZWF0dXJlPVx1NTM5Zlx1NTljYlx1NTAzYworX1VJX0xvbmdSYW5nZU1vZGlmaWVyX29yZ2luYWxWYWx1ZV9mZWF0dXJlPVx1NTM5Zlx1NTljYlx1NTAzYworX1VJX1NURU1UaW1lUmFuZ2VNb2RpZmllcl9vcmdpbmFsVmFsdWVfZmVhdHVyZT1cdTUzOWZcdTU5Y2JcdTUwM2MKK19VSV9TZXF1ZW5jZU1vZGlmaWVyX29yZ2luYWxWYWx1ZV9mZWF0dXJlPVx1NTM5Zlx1NTljYlx1NTAzYworX1VJX0RvdWJsZVJhbmdlTW9kaWZpZXJfb3JpZ2luYWxWYWx1ZV9mZWF0dXJlPVx1NTM5Zlx1NTljYlx1NTAzYworX1VJX0ludGVnZXJSYW5nZU1vZGlmaWVyX29yaWdpbmFsVmFsdWVfZmVhdHVyZT1cdTUzOWZcdTU5Y2JcdTUwM2MKK19VSV9Mb25nUmFuZ2VNb2RpZmllcl9vcmlnaW5hbFZhbHVlX2ZlYXR1cmU9XHU1MzlmXHU1OWNiXHU1MDNjCitfVUlfU1RFTVRpbWVSYW5nZU1vZGlmaWVyX29yaWdpbmFsVmFsdWVfZmVhdHVyZT1cdTUzOWZcdTU5Y2JcdTUwM2MKK19VSV9TZXF1ZW5jZU1vZGlmaWVyX29yaWdpbmFsVmFsdWVfZmVhdHVyZT1cdTUzOWZcdTU5Y2JcdTUwM2MKK19VSV9TdGF0aWNMYWJlbF90eXBlPVx1OTc1OVx1NjAwMVx1NjgwN1x1N2I3ZQorX1VJX0R5bmFtaWNMYWJlbF9kZWx0YVZhbHVlX2ZlYXR1cmU9XHU1ZGVlXHU1MDNjCitfVUlfRHluYW1pY0xhYmVsX2VzdGltYXRlZFZhbHVlX2ZlYXR1cmU9XHU0ZjMwXHU4YmExXHU1MDNjCitfVUlfRGVjb3JhdG9yX3N0ZXBTaXplX2ZlYXR1cmU9XHU2YjY1XHU5NTdmCitfVUlfRGVjb3JhdG9yX2N1cnJlbnRDeWNsZV9mZWF0dXJlPVx1NWY1M1x1NTI0ZFx1NTQ2OFx1NjcxZgorX1VJX0RlY29yYXRvcl9yZWxhdGl2ZVRvbGVyYW5jZV9mZWF0dXJlPVx1NzZmOFx1NWJmOVx1NTE2Y1x1NWRlZQorX1VJX0RlY29yYXRvcl9hYnNvbHV0ZVRvbGVyYW5jZV9mZWF0dXJlPVx1N2VkZFx1NWJmOVx1NTA0Zlx1NWRlZQorX1VJX0RlY29yYXRvcl9wcm9ncmVzc19mZWF0dXJlPVx1OGZkYlx1NWM1NQorX1VJX1NjZW5hcmlvX3Byb2dyZXNzX2ZlYXR1cmU9XHU4ZmRiXHU1YzU1CitfVUlfQ2F0ZWdvcml6ZWRUeXBlX3R5cGU9XHU1MjA2XHU3YzdiXHU1NzhiCitfVUlfU29sdmVyX3R5cGU9XHU2YzQyXHU4OWUzCitfVUlfU29sdmVyX2RlY29yYXRvcnNfZmVhdHVyZT1cdTg4YzVcdTk5NzBcdTU2NjgKK19VSV9TY2VuYXJpb19zb2x2ZXJfZmVhdHVyZT1cdTZjNDJcdTg5ZTMKK19VSV9Tb2x2ZXJfaW5pdGlhbGl6ZWRfZmVhdHVyZT1cdTUyMWRcdTU5Y2JcdTUzMTYKK19VSV9TaW5nbGVWYWx1ZU1vZGlmaWVyX3R5cGU9XHU1MzU1XHU1MDNjXHU0ZmVlXHU2NTM5XHU1NjY4CitfVUlfRG91YmxlTW9kaWZpZXJfdHlwZT1cdTUzY2NcdTRmZWVcdTY1MzlcdTU2NjgKK19VSV9JbnRlZ2VyTW9kaWZpZXJfdHlwZT1cdTY1NzRcdTU3OGJcdTRmZWVcdTY1MzlcdTU2NjgKK19VSV9Mb25nTW9kaWZpZXJfdHlwZT1cdTk1N2ZcdTU3OGJcdTc2ODRcdTRmZWVcdTk5NzBcdTU2NjgKK19VSV9TVEVNVGltZU1vZGlmaWVyX3R5cGU9U1RFTVx1NjVmNlx1OTVmNFx1NGZlZVx1NjUzOVx1NTY2OAorX1VJX0RvdWJsZU1vZGlmaWVyX3ZhbHVlX2ZlYXR1cmU9XHU0ZWY3XHU1MDNjCitfVUlfSW50ZWdlck1vZGlmaWVyX3ZfZmVhdHVyZT1WCitfVUlfTG9uZ01vZGlmaWVyX3ZhbHVlX2ZlYXR1cmU9XHU0ZWY3XHU1MDNjCitfVUlfU1RFTVRpbWVNb2RpZmllcl92YWx1ZV9mZWF0dXJlPVx1NGVmN1x1NTAzYworX1VJX0ludGVnZXJNb2RpZmllcl92YWx1ZV9mZWF0dXJlPVx1NGVmN1x1NTAzYworX1VJX0RvdWJsZU1vZGlmaWVyX29yaWdpbmFsVmFsdWVfZmVhdHVyZT1cdTUzOWZcdTU5Y2JcdTUwM2MKK19VSV9JbnRlZ2VyTW9kaWZpZXJfb3JpZ2luYWxWYWx1ZV9mZWF0dXJlPVx1NTM5Zlx1NTljYlx1NTAzYworX1VJX0xvbmdNb2RpZmllcl9vcmlnaW5hbFZhbHVlX2ZlYXR1cmU9XHU1MzlmXHU1OWNiXHU1MDNjCitfVUlfU1RFTVRpbWVNb2RpZmllcl9vcmlnaW5hbFZhbHVlX2ZlYXR1cmU9XHU1MzlmXHU1OWNiXHU1MDNjCitfVUlfSWRlbnRpZmlhYmxlRmlsdGVyX3R5cGU9XHU4YmM2XHU1MjJiXHU4ZmM3XHU2ZWU0XHU1NjY4CitfVUlfRHluYW1pY0xhYmVsX2lkZW50aWZpZXJfZmVhdHVyZT1cdTY4MDdcdThiYzZcdTdiMjYKK19VSV9Eb3VibGVWYWx1ZUxpc3RfdHlwZT1cdTUzY2NcdTdjYmVcdTVlYTZcdTUwM2NcdTUyMTdcdTg4NjgKK19VSV9Eb3VibGVWYWx1ZU1hdHJpeF90eXBlPVx1NTNjY1x1N2NiZVx1NWVhNlx1NTAzY1x1NzdlOVx1OTYzNQorX1VJX0RvdWJsZVZhbHVlX3R5cGU9XHU1M2NjXHU3Y2JlXHU1ZWE2XHU1MDNjCitfVUlfRG91YmxlVmFsdWVMaXN0X3ZhbHVlc19mZWF0dXJlPVx1NTAzYworX1VJX0RvdWJsZVZhbHVlTGlzdF9pZGVudGlmaWVyX2ZlYXR1cmU9XHU2ODA3XHU4YmM2XHU3YjI2CitfVUlfRG91YmxlVmFsdWVNYXRyaXhfdmFsdWVMaXN0c19mZWF0dXJlPVx1NTAzY1x1NTIxN1x1ODg2OAorX1VJX0RvdWJsZVZhbHVlX2lkZW50aWZpZXJfZmVhdHVyZT1cdTY4MDdcdThiYzZcdTdiMjYKK19VSV9Eb3VibGVWYWx1ZV92YWx1ZV9mZWF0dXJlPVx1NGVmN1x1NTAzYworX1VJX1N0cmluZ1ZhbHVlTGlzdF90eXBlPVx1NWI1N1x1N2IyNlx1NGUzMlx1NTAzY1x1NTIxN1x1ODg2OAorX1VJX1N0cmluZ1ZhbHVlX3R5cGU9XHU1YjU3XHU3YjI2XHU0ZTMyXHU1MDNjCitfVUlfU3RyaW5nVmFsdWVMaXN0X3ZhbHVlc19mZWF0dXJlPVx1NTAzYworX1VJX1N0cmluZ1ZhbHVlX3ZhbHVlX2ZlYXR1cmU9XHU0ZWY3XHU1MDNjCitfVUlfR3JhcGhHZW5lcmF0b3JfdHlwZT1cdTU2ZmVcdTc1MWZcdTYyMTBcdTU2NjgKK19VSV9MYXR0aWNlR3JhcGhHZW5lcmF0b3JfdHlwZT1cdTY4M2NcdTViNTBcdTU2ZmVcdTVmNjJcdTc1MWZcdTYyMTBcdTU2NjgKK19VSV9TcXVhcmVHcmFwaExhdHRpY2VHZW5lcmF0b3JfdHlwZT1cdTY1YjlcdTVmNjJcdTY4M2NcdTViNTBcdTU2ZmVcdTc1MWZcdTYyMTBcdTU2NjgKK19VSV9MYXR0aWNlR3JhcGhHZW5lcmF0b3JfeFNpemVfZmVhdHVyZT1YXHU3Njg0XHU1OTI3XHU1YzBmCitfVUlfTGF0dGljZUdyYXBoR2VuZXJhdG9yX3lTaXplX2ZlYXR1cmU9WVx1NzY4NFx1NTkyN1x1NWMwZgorX1VJX0xhdHRpY2VHcmFwaEdlbmVyYXRvcl91c2VOZWFyZXN0TmVpZ2hib3JzX2ZlYXR1cmU9XHU0ZjdmXHU3NTI4XHU2NzAwXHU4ZmQxXHU3Njg0XHU5MGJiXHU1YzQ1CitfVUlfTGF0dGljZUdyYXBoR2VuZXJhdG9yX3VzZU5leHROZWFyZXN0TmVpZ2hib3JzX2ZlYXR1cmU9XHU0ZjdmXHU3NTI4XHU0ZTBiXHU0ZTAwXHU0ZTJhXHU2NzAwXHU4ZmQxXHU3Njg0XHU5MGJiXHU1YzQ1CitfVUlfTGF0dGljZUdyYXBoR2VuZXJhdG9yX3BlcmlvZGljQm91bmRhcmllc19mZWF0dXJlPVx1NTQ2OFx1NjcxZlx1OGZiOVx1NzU0YworX1VJX0dyYXBoUGFydGl0aW9uZXJfdHlwZT1cdTUyMDZcdTUzM2EKK19VSV9HcmFwaFBhcnRpdGlvbmVyX3Byb2Nlc3NSYW5rX2ZlYXR1cmU9XHU1OTA0XHU3NDA2XHU3YjQ5XHU3ZWE3CitfVUlfR3JhcGhQYXJ0aXRpb25lcl9udW1Qcm9jZXNzZXNfZmVhdHVyZT1cdThmYzdcdTdhMGJcdTY1NzAKK19VSV9HcmFwaFBhcnRpdGlvbmVyX25vZGVSYW5rX2ZlYXR1cmU9XHU4MjgyXHU3MGI5XHU2MzkyXHU1NDBkCitfVUlfR3JhcGhQYXJ0aXRpb25lcl9udW1Ob2Rlc19mZWF0dXJlPVx1ODI4Mlx1NzBiOVx1NjU3MAorX1VJX1NpbXBsZUdyYXBoUGFydGl0aW9uZXJfdHlwZT1cdTdiODBcdTUzNTVcdTc2ODRcdTU2ZmVcdTVmNjJcdTUyMDZcdTUzM2FcdTdhMGJcdTVlOGYKK19VSV9TaW1wbGVHcmFwaFBhcnRpdGlvbmVyX3Byb2Nlc3NSYW5rX2ZlYXR1cmU9XHU1OTA0XHU3NDA2XHU3YjQ5XHU3ZWE3CitfVUlfU2ltcGxlR3JhcGhQYXJ0aXRpb25lcl9udW1Qcm9jZXNzZXNfZmVhdHVyZT1cdThmYzdcdTdhMGJcdTY1NzAKK19VSV9Tb2x2ZXJfcGFydGl0aW9uZXJfZmVhdHVyZT1cdTUyMDZcdTUzM2EKK19VSV9FeGNoYW5nZV90eXBlPVx1NGVhNFx1NjM2MgorX1VJX0V4Y2hhbmdlX290aGVyTm9kZV9mZWF0dXJlPVx1NTE3Nlx1NGVkNlx1ODI4Mlx1NzBiOQorX1VJX0V4Y2hhbmdlX2NvdW50X2ZlYXR1cmU9XHU4YmExXHU2NTcwCitfVUlfRXhjaGFuZ2Vfb3RoZXJMYWJlbF9mZWF0dXJlPVx1NTE3Nlx1NGVkNlx1NjgwN1x1N2I3ZQorX1VJX0V4Y2hhbmdlX3R5cGVfZmVhdHVyZT1cdTdjN2JcdTU3OGIKK19VSV9FeGNoYW5nZVR5cGVfQklSVEhTX0FORF9ERUFUSFNfbGl0ZXJhbD1cdTUxZmFcdTc1MWZcdTRlMGVcdTZiN2JcdTRlYTEKK19VSV9FeGNoYW5nZVR5cGVfTUlHUkFUSU9OX2xpdGVyYWw9XHU4ZmMxXHU3OWZiCitfVUlfRXhjaGFuZ2VUeXBlX0FHSU5HX2xpdGVyYWw9XHU3OWNkXHU3ZmE0XHU4MDAxXHU1MzE2CitfVUlfSW50ZWdyYXRpb25MYWJlbDJfdHlwZT1cdTk2YzZcdTYyMTBcdTY4MDdcdTdiN2VcdTUwM2MyCitfVUlfSW50ZWdyYXRpb25MYWJlbFZhbHVlMl90eXBlPVx1OTZjNlx1NjIxMFx1NjgwN1x1N2I3ZVx1NTAzYzIKK19VSV9JbnRlZ3JhdGlvbkxhYmVsMl9jdXJyZW50VmFsdWVfZmVhdHVyZT1cdTVmNTNcdTUyNGRcdTUwM2MKK19VSV9JbnRlZ3JhdGlvbkxhYmVsMl9uZXh0VmFsdWVfZmVhdHVyZT1cdTYzYTVcdTRlMGJcdTY3NjVcdTc2ODRcdTRlZjdcdTUwM2MKK19VSV9JbnRlZ3JhdGlvbkxhYmVsMl9kZWx0YVZhbHVlX2ZlYXR1cmU9XHU1ZGVlXHU1MDNjCitfVUlfSW50ZWdyYXRpb25MYWJlbDJfdGVtcFZhbHVlX2ZlYXR1cmU9XHU2ZTI5XHU1ZWE2XHU1MDNjCitfVUlfSW50ZWdyYXRpb25MYWJlbDJfcHJvYmVWYWx1ZV9mZWF0dXJlPVx1NmQ0Ylx1OGJkNVx1NjgwN1x1N2I3ZQorX1VJX0ludGVncmF0aW9uTGFiZWwyX2Vycm9yU2NhbGVfZmVhdHVyZT1cdTk1MTlcdThiZWZcdTg5YzRcdTZhMjEKK19VSV9JbnRlZ3JhdGlvbkxhYmVsMl9kZWNvcmF0b3JfZmVhdHVyZT1cdTg4YzVcdTk5NzBcdTU2NjgKK19VSV9JbnRlZ3JhdGlvbkxhYmVsMl9uZXh0VmFsdWVWYWxpZF9mZWF0dXJlPVx1NGUwYlx1NGUwMFx1NGUyYVx1NTAzY1x1NzY4NFx1NjcwOVx1NjU0OAorX1VJX0ludGVncmF0aW9uTGFiZWwyX2lkZW50aWZpZXJfZmVhdHVyZT1cdTY4MDdcdThiYzZcdTdiMjYKK19VSV9JbnRlZ3JhdGlvbkxhYmVsX3R5cGU9XHU5NmM2XHU2MjEwXHU2ODA3XHU3YjdlCitfVUlfSW50ZWdyYXRpb25MYWJlbFZhbHVlX3R5cGU9XHU5NmM2XHU2MjEwXHU2ODA3XHU3YjdlXHU1MDNjCitfVUlfSW50ZWdyYXRpb25MYWJlbF9jdXJyZW50VmFsdWVfZmVhdHVyZT1cdTVmNTNcdTUyNGRcdTUwM2MKK19VSV9JbnRlZ3JhdGlvbkxhYmVsX25leHRWYWx1ZV9mZWF0dXJlPVx1NjNhNVx1NGUwYlx1Njc2NVx1NzY4NFx1NGVmN1x1NTAzYworX1VJX0ludGVncmF0aW9uTGFiZWxfZGVsdGFWYWx1ZV9mZWF0dXJlPVx1NWRlZVx1NTAzYworX1VJX0ludGVncmF0aW9uTGFiZWxfdGVtcFZhbHVlX2ZlYXR1cmU9XHU2ZTI5XHU1ZWE2XHU1MDNjCitfVUlfSW50ZWdyYXRpb25MYWJlbF9wcm9iZVZhbHVlX2ZlYXR1cmU9XHU2ZDRiXHU4YmQ1XHU2ODA3XHU3YjdlCitfVUlfSW50ZWdyYXRpb25MYWJlbF9lcnJvclNjYWxlX2ZlYXR1cmU9XHU5NTE5XHU4YmVmXHU4OWM0XHU2YTIxCitfVUlfSW50ZWdyYXRpb25MYWJlbF9kZWNvcmF0b3JfZmVhdHVyZT1cdTg4YzVcdTk5NzBcdTU2NjgKK19VSV9JbnRlZ3JhdGlvbkxhYmVsX25leHRWYWx1ZVZhbGlkX2ZlYXR1cmU9XHU0ZTBiXHU0ZTAwXHU0ZTJhXHU1MDNjXHU3Njg0XHU2NzA5XHU2NTQ4CitfVUlfSW50ZWdyYXRpb25MYWJlbF9pZGVudGlmaWVyX2ZlYXR1cmU9XHU2ODA3XHU4YmM2XHU3YjI2CitfVUlfSW50ZWdyYXRpb25MYWJlbFZhbHVlX2Fycml2YWxzX2ZlYXR1cmU9XHU1MjMwXHU4ZmJlCitfVUlfSW50ZWdyYXRpb25MYWJlbFZhbHVlX2RlcGFydHVyZXNfZmVhdHVyZT1cdTUxZmFcdTUzZDEKK19VSV9JbnRlZ3JhdGlvbkRlY29yYXRvcl90eXBlPVx1OTZjNlx1NjIxMFx1NGZlZVx1OTk3MFx1NTY2OAorX1VJX1RyaWdnZXJfYWN0aW9uc19mZWF0dXJlPUFjdGlvbnMKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3Jlc291cmNlcy9pY29ucy9mdWxsL2N1c3RvbW9iajE2Ly5jdnNpZ25vcmUgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9yZXNvdXJjZXMvaWNvbnMvZnVsbC9jdXN0b21vYmoxNi8uY3ZzaWdub3JlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA4NWU4YmEKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9yZXNvdXJjZXMvaWNvbnMvZnVsbC9jdXN0b21vYmoxNi8uY3ZzaWdub3JlCkBAIC0wLDAgKzEgQEAKK1RodW1icy5kYgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvcmVzb3VyY2VzL2ljb25zL2Z1bGwvY3VzdG9tb2JqMTYvRHluYW1pY0xhYmVsLmdpZiBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3Jlc291cmNlcy9pY29ucy9mdWxsL2N1c3RvbW9iajE2L0R5bmFtaWNMYWJlbC5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWI5ZTM1MwotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3Jlc291cmNlcy9pY29ucy9mdWxsL2N1c3RvbW9iajE2L0R5bmFtaWNMYWJlbC5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvcmVzb3VyY2VzL2ljb25zL2Z1bGwvY3VzdG9tb2JqMTYvRWRnZS5naWYgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9yZXNvdXJjZXMvaWNvbnMvZnVsbC9jdXN0b21vYmoxNi9FZGdlLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YWRkYjllCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvcmVzb3VyY2VzL2ljb25zL2Z1bGwvY3VzdG9tb2JqMTYvRWRnZS5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvcmVzb3VyY2VzL2ljb25zL2Z1bGwvY3VzdG9tb2JqMTYvR3JhcGguZ2lmIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvcmVzb3VyY2VzL2ljb25zL2Z1bGwvY3VzdG9tb2JqMTYvR3JhcGguZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU3MGIzNTUKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9yZXNvdXJjZXMvaWNvbnMvZnVsbC9jdXN0b21vYmoxNi9HcmFwaC5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvcmVzb3VyY2VzL2ljb25zL2Z1bGwvY3VzdG9tb2JqMTYvR3JhcGhNb2RlbEZpbGUuZ2lmIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvcmVzb3VyY2VzL2ljb25zL2Z1bGwvY3VzdG9tb2JqMTYvR3JhcGhNb2RlbEZpbGUuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ1MjE2YmEKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9yZXNvdXJjZXMvaWNvbnMvZnVsbC9jdXN0b21vYmoxNi9HcmFwaE1vZGVsRmlsZS5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvcmVzb3VyY2VzL2ljb25zL2Z1bGwvY3VzdG9tb2JqMTYvTGFiZWwuZ2lmIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvcmVzb3VyY2VzL2ljb25zL2Z1bGwvY3VzdG9tb2JqMTYvTGFiZWwuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYzMTQyYjUKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9yZXNvdXJjZXMvaWNvbnMvZnVsbC9jdXN0b21vYmoxNi9MYWJlbC5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvcmVzb3VyY2VzL2ljb25zL2Z1bGwvY3VzdG9tb2JqMTYvTW9kZWwuZ2lmIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvcmVzb3VyY2VzL2ljb25zL2Z1bGwvY3VzdG9tb2JqMTYvTW9kZWwuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBhMDEzM2IKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9yZXNvdXJjZXMvaWNvbnMvZnVsbC9jdXN0b21vYmoxNi9Nb2RlbC5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvcmVzb3VyY2VzL2ljb25zL2Z1bGwvY3VzdG9tb2JqMTYvTW9kZWxNb2RlbEZpbGUuZ2lmIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvcmVzb3VyY2VzL2ljb25zL2Z1bGwvY3VzdG9tb2JqMTYvTW9kZWxNb2RlbEZpbGUuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBhMDEzM2IKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9yZXNvdXJjZXMvaWNvbnMvZnVsbC9jdXN0b21vYmoxNi9Nb2RlbE1vZGVsRmlsZS5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvcmVzb3VyY2VzL2ljb25zL2Z1bGwvY3VzdG9tb2JqMTYvTm9kZS5naWYgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9yZXNvdXJjZXMvaWNvbnMvZnVsbC9jdXN0b21vYmoxNi9Ob2RlLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NjE0OGY4Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvcmVzb3VyY2VzL2ljb25zL2Z1bGwvY3VzdG9tb2JqMTYvTm9kZS5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvcmVzb3VyY2VzL2ljb25zL2Z1bGwvY3VzdG9tb2JqMTYvU2NlbmFyaW8uZ2lmIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvcmVzb3VyY2VzL2ljb25zL2Z1bGwvY3VzdG9tb2JqMTYvU2NlbmFyaW8uZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg0ZmY2NDEKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9yZXNvdXJjZXMvaWNvbnMvZnVsbC9jdXN0b21vYmoxNi9TY2VuYXJpby5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvcmVzb3VyY2VzL2ljb25zL2Z1bGwvY3VzdG9tb2JqMTYvU2NlbmFyaW9Nb2RlbEZpbGUuZ2lmIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvcmVzb3VyY2VzL2ljb25zL2Z1bGwvY3VzdG9tb2JqMTYvU2NlbmFyaW9Nb2RlbEZpbGUuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI3MmRhZmYKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9yZXNvdXJjZXMvaWNvbnMvZnVsbC9jdXN0b21vYmoxNi9TY2VuYXJpb01vZGVsRmlsZS5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvcmVzb3VyY2VzL2ljb25zL2Z1bGwvY3VzdG9tb2JqMTYvU3RhdGljTGFiZWwuZ2lmIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvcmVzb3VyY2VzL2ljb25zL2Z1bGwvY3VzdG9tb2JqMTYvU3RhdGljTGFiZWwuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYzMTQyYjUKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9yZXNvdXJjZXMvaWNvbnMvZnVsbC9jdXN0b21vYmoxNi9TdGF0aWNMYWJlbC5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvcmVzb3VyY2VzL2ljb25zL2Z1bGwvb2JqMTYvU1RFTS5naWYgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9yZXNvdXJjZXMvaWNvbnMvZnVsbC9vYmoxNi9TVEVNLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40OWQxNjdmCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvcmVzb3VyY2VzL2ljb25zL2Z1bGwvb2JqMTYvU1RFTS5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc2NoZW1hL2RlY29yYXRvci5leHNkIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc2NoZW1hL2RlY29yYXRvci5leHNkCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQxYzczZjMKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zY2hlbWEvZGVjb3JhdG9yLmV4c2QKQEAgLTAsMCArMSw5NSBAQAorPD94bWwgdmVyc2lvbj0nMS4wJyBlbmNvZGluZz0nVVRGLTgnPz4KKzwhLS0gU2NoZW1hIGZpbGUgd3JpdHRlbiBieSBQREUgLS0+Cis8c2NoZW1hIHRhcmdldE5hbWVzcGFjZT0iY29tLmlibS5hbG1hZGVuLnN0ZW0uY29yZSI+Cis8YW5ub3RhdGlvbj4KKyAgICAgIDxhcHBJbmZvPgorICAgICAgICAgPG1ldGEuc2NoZW1hIHBsdWdpbj0iY29tLmlibS5hbG1hZGVuLnN0ZW0uY29yZSIgaWQ9ImRlY29yYXRvciIgbmFtZT0iU1RFTSBkZWNvcmF0b3IgZXh0ZW5zaW9uIHBvaW50Ii8+CisgICAgICA8L2FwcEluZm8+CisgICAgICA8ZG9jdW1lbnRhdGlvbj4KKyAgICAgICAgIFRoZSBTVEVNIHN5c3RlbSBhbGxvd3MgJnF1b3Q7ZGVjb3JhdG9ycyZxdW90OyB0byBjaGFuZ2UgdGhlIHVuZGVybHlpbmcgZ3JhcGguIEEgcGx1Zy1pbiB0aGF0IGV4dGVuZHMgdGhlICZxdW90O2RlY29yYXRvciZxdW90OyBleHRlbnNpb24gcG9pbnQgcHJvdmlkZXMgYW4gaW1wbGVtZW50YXRpb24gb2YgYSBkZWNvcmF0b3IKKyAgICAgIDwvZG9jdW1lbnRhdGlvbj4KKyAgIDwvYW5ub3RhdGlvbj4KKworICAgPGluY2x1ZGUgc2NoZW1hTG9jYXRpb249ImR1Ymxpbl9jb3JlLmV4c2QiLz4KKworICAgPGluY2x1ZGUgc2NoZW1hTG9jYXRpb249InN0ZW1fY2F0ZWdvcnkuZXhzZCIvPgorCisgICA8ZWxlbWVudCBuYW1lPSJleHRlbnNpb24iPgorICAgICAgPGNvbXBsZXhUeXBlPgorICAgICAgICAgPHNlcXVlbmNlPgorICAgICAgICAgICAgPGVsZW1lbnQgcmVmPSJzdGVtX2NhdGVnb3J5IiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIi8+CisgICAgICAgICAgICA8ZWxlbWVudCByZWY9ImR1Ymxpbl9jb3JlIiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIi8+CisgICAgICAgICA8L3NlcXVlbmNlPgorICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJwb2ludCIgdHlwZT0ic3RyaW5nIiB1c2U9InJlcXVpcmVkIj4KKyAgICAgICAgICAgIDxhbm5vdGF0aW9uPgorICAgICAgICAgICAgICAgPGRvY3VtZW50YXRpb24+CisgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgIDwvZG9jdW1lbnRhdGlvbj4KKyAgICAgICAgICAgIDwvYW5ub3RhdGlvbj4KKyAgICAgICAgIDwvYXR0cmlidXRlPgorICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJpZCIgdHlwZT0ic3RyaW5nIj4KKyAgICAgICAgICAgIDxhbm5vdGF0aW9uPgorICAgICAgICAgICAgICAgPGRvY3VtZW50YXRpb24+CisgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgIDwvZG9jdW1lbnRhdGlvbj4KKyAgICAgICAgICAgIDwvYW5ub3RhdGlvbj4KKyAgICAgICAgIDwvYXR0cmlidXRlPgorICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJuYW1lIiB0eXBlPSJzdHJpbmciPgorICAgICAgICAgICAgPGFubm90YXRpb24+CisgICAgICAgICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KKyAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgorICAgICAgICAgICAgICAgPGFwcEluZm8+CisgICAgICAgICAgICAgICAgICA8bWV0YS5hdHRyaWJ1dGUgdHJhbnNsYXRhYmxlPSJ0cnVlIi8+CisgICAgICAgICAgICAgICA8L2FwcEluZm8+CisgICAgICAgICAgICA8L2Fubm90YXRpb24+CisgICAgICAgICA8L2F0dHJpYnV0ZT4KKyAgICAgIDwvY29tcGxleFR5cGU+CisgICA8L2VsZW1lbnQ+CisKKyAgIDxhbm5vdGF0aW9uPgorICAgICAgPGFwcEluZm8+CisgICAgICAgICA8bWV0YS5zZWN0aW9uIHR5cGU9InNpbmNlIi8+CisgICAgICA8L2FwcEluZm8+CisgICAgICA8ZG9jdW1lbnRhdGlvbj4KKyAgICAgICAgIDAuMC4wCisgICAgICA8L2RvY3VtZW50YXRpb24+CisgICA8L2Fubm90YXRpb24+CisKKyAgIDxhbm5vdGF0aW9uPgorICAgICAgPGFwcEluZm8+CisgICAgICAgICA8bWV0YS5zZWN0aW9uIHR5cGU9ImV4YW1wbGVzIi8+CisgICAgICA8L2FwcEluZm8+CisgICAgICA8ZG9jdW1lbnRhdGlvbj4KKyAgICAgICAgIFtFbnRlciBleHRlbnNpb24gcG9pbnQgdXNhZ2UgZXhhbXBsZSBoZXJlLl0KKyAgICAgIDwvZG9jdW1lbnRhdGlvbj4KKyAgIDwvYW5ub3RhdGlvbj4KKworICAgPGFubm90YXRpb24+CisgICAgICA8YXBwSW5mbz4KKyAgICAgICAgIDxtZXRhLnNlY3Rpb24gdHlwZT0iYXBpSW5mbyIvPgorICAgICAgPC9hcHBJbmZvPgorICAgICAgPGRvY3VtZW50YXRpb24+CisgICAgICAgICBbRW50ZXIgQVBJIGluZm9ybWF0aW9uIGhlcmUuXQorICAgICAgPC9kb2N1bWVudGF0aW9uPgorICAgPC9hbm5vdGF0aW9uPgorCisgICA8YW5ub3RhdGlvbj4KKyAgICAgIDxhcHBJbmZvPgorICAgICAgICAgPG1ldGEuc2VjdGlvbiB0eXBlPSJpbXBsZW1lbnRhdGlvbiIvPgorICAgICAgPC9hcHBJbmZvPgorICAgICAgPGRvY3VtZW50YXRpb24+CisgICAgICAgICBbRW50ZXIgaW5mb3JtYXRpb24gYWJvdXQgc3VwcGxpZWQgaW1wbGVtZW50YXRpb24gb2YgdGhpcyBleHRlbnNpb24gcG9pbnQuXQorICAgICAgPC9kb2N1bWVudGF0aW9uPgorICAgPC9hbm5vdGF0aW9uPgorCisgICA8YW5ub3RhdGlvbj4KKyAgICAgIDxhcHBJbmZvPgorICAgICAgICAgPG1ldGEuc2VjdGlvbiB0eXBlPSJjb3B5cmlnaHQiLz4KKyAgICAgIDwvYXBwSW5mbz4KKyAgICAgIDxkb2N1bWVudGF0aW9uPgorICAgICAgICAgCisgICAgICA8L2RvY3VtZW50YXRpb24+CisgICA8L2Fubm90YXRpb24+CisKKzwvc2NoZW1hPgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc2NoZW1hL2R1Ymxpbl9jb3JlLmV4c2QgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zY2hlbWEvZHVibGluX2NvcmUuZXhzZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNzFhZTIwCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc2NoZW1hL2R1Ymxpbl9jb3JlLmV4c2QKQEAgLTAsMCArMSwyMTYgQEAKKzw/eG1sIHZlcnNpb249JzEuMCcgZW5jb2Rpbmc9J1VURi04Jz8+Cis8IS0tIFNjaGVtYSBmaWxlIHdyaXR0ZW4gYnkgUERFIC0tPgorPHNjaGVtYSB0YXJnZXROYW1lc3BhY2U9ImNvbS5pYm0uYWxtYWRlbi5zdGVtLmNvcmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSI+Cis8YW5ub3RhdGlvbj4KKyAgICAgIDxhcHBpbmZvPgorICAgICAgICAgPG1ldGEuc2NoZW1hIHBsdWdpbj0iY29tLmlibS5hbG1hZGVuLnN0ZW0uY29yZSIgaWQ9ImR1Ymxpbl9jb3JlIiBuYW1lPSJEdWJsaW4gQ29yZSBEZWZpbml0aW9uIi8+CisgICAgICA8L2FwcGluZm8+CisgICAgICA8ZG9jdW1lbnRhdGlvbj4KKyAgICAgICAgIFRoaXMgaXMgYSBzcGVjaWZpY2F0aW9uIG9mIHRoZSBEdWJsaW4gQ29yZSBtZXRhZGF0YSBlbGVtZW50cy4KKyAgICAgIDwvZG9jdW1lbnRhdGlvbj4KKyAgIDwvYW5ub3RhdGlvbj4KKworICAgPGVsZW1lbnQgbmFtZT0iZHVibGluX2NvcmUiPgorICAgICAgPGFubm90YXRpb24+CisgICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KKyAgICAgICAgICAgIER1YmxpbiBDb3JlIE1ldGFkYXRhIGlzIGEgc2V0IG9mICZxdW90O3Rlcm1zJnF1b3Q7IHRoYXQgZGVzY3JpYmUgdGhlIGNvbnRlbnQgYW5kIG9yZ2luIG9mIGEgcmVzb3VyY2UuICBTZWUgJmx0O2EgaHJlZj0mcXVvdDtodHRwOi8vd3d3LmR1YmxpbmNvcmUub3JnL2RvY3VtZW50cy9kY21pLXRlcm1zLyZxdW90OyZndDsgaHR0cDovL3d3dy5kdWJsaW5jb3JlLm9yZy9kb2N1bWVudHMvZGNtaS10ZXJtcy8mbHQ7L2EmZ3Q7IGZvciB0aGUgb2ZmaWNhbCBkZWZpbml0aW9ucyBvZiB0aGUgdGVybXMgYW5kIHRoZWlyIHJlZmluZW1lbnRzLgorICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgorICAgICAgPC9hbm5vdGF0aW9uPgorICAgICAgPGNvbXBsZXhUeXBlPgorICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJ0aXRsZSIgdHlwZT0ic3RyaW5nIiB1c2U9InJlcXVpcmVkIj4KKyAgICAgICAgICAgIDxhbm5vdGF0aW9uPgorICAgICAgICAgICAgICAgPGRvY3VtZW50YXRpb24+CisgICAgICAgICAgICAgICAgICBBIG5hbWUgZ2l2ZW4gdG8gdGhlIHJlc291cmNlLiBlLmcuLCAmcXVvdDtCYXNlIFVuaXRlZCBzdGF0ZXMgQWRtaW5pc3RyYXRpb24gTGV2ZWwgMiZxdW90OworICAgICAgICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgorICAgICAgICAgICAgPC9hbm5vdGF0aW9uPgorICAgICAgICAgPC9hdHRyaWJ1dGU+CisgICAgICAgICA8YXR0cmlidXRlIG5hbWU9ImlkZW50aWZpZXIiIHR5cGU9InN0cmluZyIgdXNlPSJyZXF1aXJlZCI+CisgICAgICAgICAgICA8YW5ub3RhdGlvbj4KKyAgICAgICAgICAgICAgIDxkb2N1bWVudGF0aW9uPgorICAgICAgICAgICAgICAgICAgQW4gdW5hbWJpZ3VvdXMgcmVmZXJlbmNlIHRvIHRoZSByZXNvdXJjZSB3aXRoaW4gYSBnaXZlbiBjb250ZXh0LiAgSW4gb3VyIGNhc2UgdGhpcyBpcyBhbHdheXMgYSBVUkkuICBlLmcuICZxdW90O3N0ZW06L2dyYXBocy9zYW1wbGUvc2FtcGxlMS5ncmFwaCZxdW90OworICAgICAgICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgorICAgICAgICAgICAgPC9hbm5vdGF0aW9uPgorICAgICAgICAgPC9hdHRyaWJ1dGU+CisgICAgICAgICA8YXR0cmlidXRlIG5hbWU9ImRlc2NyaXB0aW9uIiB0eXBlPSJzdHJpbmciPgorICAgICAgICAgICAgPGFubm90YXRpb24+CisgICAgICAgICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KKyAgICAgICAgICAgICAgICAgIEFuIGFjY291bnQgb2YgdGhlIGNvbnRlbnQgb2YgdGhlIHJlc291cmNlLiAgQmFzaWNhbGx5LCBhIGRlc2NyaXB0aW9uIG9mIHRoZSBjb250ZW50IG9mIHRoZSByZXNvdXJjZS4gZS5nLiwgJnF1b3Q7T25seSB0aGUgY291bnRpZXMgb2YgdGhlIFVuaXRlZCBTdGF0ZXMgYXMgbm9kZXMgd2l0aCBubyBlZGdlcyBvciBsYWJlbHMgb2YgYW55IGtpbmQuJnF1b3Q7CisgICAgICAgICAgICAgICA8L2RvY3VtZW50YXRpb24+CisgICAgICAgICAgICA8L2Fubm90YXRpb24+CisgICAgICAgICA8L2F0dHJpYnV0ZT4KKyAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0iY3JlYXRvciIgdHlwZT0ic3RyaW5nIj4KKyAgICAgICAgICAgIDxhbm5vdGF0aW9uPgorICAgICAgICAgICAgICAgPGRvY3VtZW50YXRpb24+CisgICAgICAgICAgICAgICAgICBBbiBlbnRpdHkgcHJpbWFyaWx5IHJlc3BvbnNpYmxlIGZvciBtYWtpbmcgdGhlIGNvbnRlbnQgb2YgdGhlIHJlc291cmNlLiAgZS5nLiwgRGFuaWVsIEZvcmQsIElCTQorICAgICAgICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgorICAgICAgICAgICAgPC9hbm5vdGF0aW9uPgorICAgICAgICAgPC9hdHRyaWJ1dGU+CisgICAgICAgICA8YXR0cmlidXRlIG5hbWU9ImRhdGUiIHR5cGU9InN0cmluZyI+CisgICAgICAgICAgICA8YW5ub3RhdGlvbj4KKyAgICAgICAgICAgICAgIDxkb2N1bWVudGF0aW9uPgorICAgICAgICAgICAgICAgICAgQSBkYXRlIGFzc29jaWF0ZWQgd2l0aCBhbiBldmVudCBpbiB0aGUgbGlmZSBjeWNsZSBvZiB0aGUgcmVzb3VyY2UuICBFbmNvZGVkIGluIElTTyA4NjAxICZsdDthIGhyZWY9JnF1b3Q7aHR0cDovL3d3dy53My5vcmcvVFIvTk9URS1kYXRldGltZSZxdW90OyZndDtodHRwOi8vd3d3LnczLm9yZy9UUi9OT1RFLWRhdGV0aW1lJmx0Oy9hJmd0Oy4gIEJhc2ljYWxseSwgdGhlIGZvcm1hdCBpczogWVlZWS1NTS1ERCBlLmcuLCAgMjAwNi0wMy0yOQorICAgICAgICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgorICAgICAgICAgICAgPC9hbm5vdGF0aW9uPgorICAgICAgICAgPC9hdHRyaWJ1dGU+CisgICAgICAgICA8YXR0cmlidXRlIG5hbWU9ImZvcm1hdCIgdHlwZT0ic3RyaW5nIj4KKyAgICAgICAgICAgIDxhbm5vdGF0aW9uPgorICAgICAgICAgICAgICAgPGRvY3VtZW50YXRpb24+CisgICAgICAgICAgICAgICAgICBUaGUgcGh5c2ljYWwgb3IgZGlnaXRhbCBtYW5pZmVzdGF0aW9uIG9mIHRoZSByZXNvdXJjZS4gIEZvciBTVEVNIHRoaXMgaXMgdGhlIG5hbWUgc3BhY2UgVVJJIG9mIHRoZSBjb3Jlc3BvbmRpbmcgZWNvcmUgbW9kZWwuIGUuZy4sIGh0dHA6Ly8vY29tL2libS9hbG1hZGVuL3N0ZW0vZ3JhcGguZWNvcmUKKyAgICAgICAgICAgICAgIDwvZG9jdW1lbnRhdGlvbj4KKyAgICAgICAgICAgIDwvYW5ub3RhdGlvbj4KKyAgICAgICAgIDwvYXR0cmlidXRlPgorICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJwdWJsaXNoZXIiIHR5cGU9InN0cmluZyI+CisgICAgICAgICAgICA8YW5ub3RhdGlvbj4KKyAgICAgICAgICAgICAgIDxkb2N1bWVudGF0aW9uPgorICAgICAgICAgICAgICAgICAgQW4gZW50aXR5IHJlc3BvbnNpYmxlIGZvciBtYWtpbmcgdGhlIHJlc291cmNlIGF2YWlsYWJsZS4gZS5nLiwgSUJNCisgICAgICAgICAgICAgICA8L2RvY3VtZW50YXRpb24+CisgICAgICAgICAgICA8L2Fubm90YXRpb24+CisgICAgICAgICA8L2F0dHJpYnV0ZT4KKyAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0iY292ZXJhZ2UiIHR5cGU9InN0cmluZyI+CisgICAgICAgICAgICA8YW5ub3RhdGlvbj4KKyAgICAgICAgICAgICAgIDxkb2N1bWVudGF0aW9uPgorICAgICAgICAgICAgICAgICAgVGhlIGV4dGVudCBvciBzY29wZSBvZiB0aGUgY29udGVudCBvZiB0aGUgcmVzb3VyY2UuICBGb3Igc3BhdGlhbCByZXNvdXJjZXMgdGhpcyB3b3VsZCB0eXBpY2FsbHkgaW5jbHVkZSB0aGUgbmFtZSBzZWxlY3RlZCBmcm9tIHRoZSAmbHQ7YSBocmVmPSZxdW90O2h0dHA6Ly93d3cuZ2V0dHkuZWR1L3Jlc2VhcmNoL3Rvb2xzL3ZvY2FidWxhcnkvdGduL2luZGV4Lmh0bWwmcXVvdDsmZ3Q7VGhlc2F1cnVzIG9mIEdlb2dyYXBoaWMgTmFtZXMgJmx0Oy9hJmd0Oy4gZS5nLiwgU2FudGEgQ2xhcmEgQ291bnR5CisgICAgICAgICAgICAgICA8L2RvY3VtZW50YXRpb24+CisgICAgICAgICAgICA8L2Fubm90YXRpb24+CisgICAgICAgICA8L2F0dHJpYnV0ZT4KKyAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0iY29udHJpYnV0b3IiIHR5cGU9InN0cmluZyI+CisgICAgICAgICAgICA8YW5ub3RhdGlvbj4KKyAgICAgICAgICAgICAgIDxkb2N1bWVudGF0aW9uPgorICAgICAgICAgICAgICAgICAgQW4gZW50aXR5IHJlc3BvbnNpYmxlIGZvciBtYWtpbmcgY29udHJpYnV0aW9ucyB0byB0aGUgY29udGVudCBvZiB0aGUgcmVzb3VyY2UuICBlLmcuLCBJQk0KKyAgICAgICAgICAgICAgIDwvZG9jdW1lbnRhdGlvbj4KKyAgICAgICAgICAgIDwvYW5ub3RhdGlvbj4KKyAgICAgICAgIDwvYXR0cmlidXRlPgorICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJyZWxhdGlvbiIgdHlwZT0ic3RyaW5nIj4KKyAgICAgICAgICAgIDxhbm5vdGF0aW9uPgorICAgICAgICAgICAgICAgPGRvY3VtZW50YXRpb24+CisgICAgICAgICAgICAgICAgICBBIHJlZmVyZW5jZSB0byBhIHJlbGF0ZWQgcmVzb3VyY2UuIEluIHRoZSBjYXNlIG9mIFNURU0gdGhhdCB3aWxsIGJlIHRoZSBVUkkgc3BlY2lmaWVkIGFzIHRoZSBpZGVudGlmaWVyIG9mIHRoZSByZWxhdGVkIHJlc291cmNlLiBlLmcuICZxdW90O3N0ZW06L2dyYXBocy9zYW1wbGUvc2FtcGxlMS5ncmFwaCZxdW90OworICAgICAgICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgorICAgICAgICAgICAgPC9hbm5vdGF0aW9uPgorICAgICAgICAgPC9hdHRyaWJ1dGU+CisgICAgICAgICA8YXR0cmlidXRlIG5hbWU9InJpZ2h0cyIgdHlwZT0ic3RyaW5nIj4KKyAgICAgICAgICAgIDxhbm5vdGF0aW9uPgorICAgICAgICAgICAgICAgPGRvY3VtZW50YXRpb24+CisgICAgICAgICAgICAgICAgICBJbmZvcm1hdGlvbiBhYm91dCByaWdodHMgaGVsZCBpbiBhbmQgb3ZlciB0aGUgcmVzb3VyY2UuIGUuZy4sICAmYW1wO2NvcHk7Q29weXJpZ2h0IFNURU0gY29ycG9yYXRpb24gMjAwNgorICAgICAgICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgorICAgICAgICAgICAgPC9hbm5vdGF0aW9uPgorICAgICAgICAgPC9hdHRyaWJ1dGU+CisgICAgICAgICA8YXR0cmlidXRlIG5hbWU9InNvdXJjZSIgdHlwZT0ic3RyaW5nIj4KKyAgICAgICAgICAgIDxhbm5vdGF0aW9uPgorICAgICAgICAgICAgICAgPGRvY3VtZW50YXRpb24+CisgICAgICAgICAgICAgICAgICBBIHJlZmVyZW5jZSB0byBhIHJlc291cmNlIGZyb20gd2hpY2ggdGhlIHByZXNlbnQgcmVzb3VyY2UgaXMgZGVyaXZlZC4gIGUuZy4sIFVTIENlbnN1cyBUaWdlciBmaWxlcworICAgICAgICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgorICAgICAgICAgICAgPC9hbm5vdGF0aW9uPgorICAgICAgICAgPC9hdHRyaWJ1dGU+CisgICAgICAgICA8YXR0cmlidXRlIG5hbWU9InN1YmplY3QiIHR5cGU9InN0cmluZyI+CisgICAgICAgICAgICA8YW5ub3RhdGlvbj4KKyAgICAgICAgICAgICAgIDxkb2N1bWVudGF0aW9uPgorICAgICAgICAgICAgICAgICAgVGhlIHRvcGljIG9mIHRoZSBjb250ZW50IG9mIHRoZSByZXNvdXJjZS4gIEtleXdvcmRzIG9yIGtleSBwaHJhc2VzIHRoZSBkZXNjcmliZSB0aGUgdG9waWMgb2YgdGhlIHJlc291cmNlLiBlLmcuLCBVbml0ZWQgU3RhdGVzCisgICAgICAgICAgICAgICA8L2RvY3VtZW50YXRpb24+CisgICAgICAgICAgICA8L2Fubm90YXRpb24+CisgICAgICAgICA8L2F0dHJpYnV0ZT4KKyAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0idHlwZSIgdHlwZT0ic3RyaW5nIj4KKyAgICAgICAgICAgIDxhbm5vdGF0aW9uPgorICAgICAgICAgICAgICAgPGRvY3VtZW50YXRpb24+CisgICAgICAgICAgICAgICAgICBUaGUgbmF0dXJlIG9yIGdlbnJlIG9mIHRoZSBjb250ZW50IG9mIHRoZSByZXNvdXJjZS4gIFNlZSAmbHQ7YSBocmVmPSZxdW90O2h0dHA6Ly9kdWJsaW5jb3JlLm9yZy9kb2N1bWVudHMvZGNtaS10eXBlLXZvY2FidWxhcnkvJnF1b3Q7Jmd0O2h0dHA6Ly9kdWJsaW5jb3JlLm9yZy9kb2N1bWVudHMvZGNtaS10eXBlLXZvY2FidWxhcnkvJmx0Oy9hJmd0OyBlLmcsICBodHRwOi8vcHVybC5vcmcvZGMvZGNtaXR5cGUvRGF0YXNldCBmb3IgYSBzZXQgb2YgZGF0YSBvcgorICAgICAgICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgorICAgICAgICAgICAgPC9hbm5vdGF0aW9uPgorICAgICAgICAgPC9hdHRyaWJ1dGU+CisgICAgICAgICA8YXR0cmlidXRlIG5hbWU9Imxhbmd1YWdlIiB0eXBlPSJzdHJpbmciPgorICAgICAgICAgICAgPGFubm90YXRpb24+CisgICAgICAgICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KKyAgICAgICAgICAgICAgICAgIEEgbGFuZ3VhZ2Ugb2YgdGhlIGludGVsbGVjdHVhbCBjb250ZW50IG9mIHRoZSByZXNvdXJjZS4gVXNlIAorJmx0O2EgaHJlZj0mcXVvdDtodHRwOi8vd3d3LmlldGYub3JnL3JmYy9yZmMzMDY2LnR4dCZxdW90OyZndDsKK1JGQyZhbXA7bmJzcDszMDY2ICZsdDsvYSZndDsgYW5kICZsdDthIGhyZWY9JnF1b3Q7aHR0cDovL3d3dy5sb2MuZ292L3N0YW5kYXJkcy9pc282MzktMi8mcXVvdDsmZ3Q7SVNPJmFtcDtuYnNwOzYzOSZsdDsvYSZndDsgZS5nLiwgZW4tR0IgZm9yIEVuZ2xpc2ggdXNlZCBpbiB0aGUgVW5pdGVkIEtpbmdkb20uCisgICAgICAgICAgICAgICA8L2RvY3VtZW50YXRpb24+CisgICAgICAgICAgICA8L2Fubm90YXRpb24+CisgICAgICAgICA8L2F0dHJpYnV0ZT4KKyAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0iYmlibGlvZ3JhcGhpY0NpdGF0aW9uIiB0eXBlPSJzdHJpbmciPgorICAgICAgICAgICAgPGFubm90YXRpb24+CisgICAgICAgICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KKyAgICAgICAgICAgICAgICAgIEEgYmlibGlvZ3JhcGhpYyByZWZlcmVuY2UgZm9yIHRoZSByZXNvdXJjZS4gZS5nLiwgRm9yZCwgRC5BLiwgJnF1b3Q7U1RFTSBhbmQgdGhlIGFydCBvZiBjb21wdXRlciBtYWludGVuYW5jZSZxdW90OywgSm91cm5hbCBvZiBGb29iYXIsIDIwMDYuCisgICAgICAgICAgICAgICA8L2RvY3VtZW50YXRpb24+CisgICAgICAgICAgICA8L2Fubm90YXRpb24+CisgICAgICAgICA8L2F0dHJpYnV0ZT4KKyAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0iY3JlYXRlZCIgdHlwZT0ic3RyaW5nIj4KKyAgICAgICAgICAgIDxhbm5vdGF0aW9uPgorICAgICAgICAgICAgICAgPGRvY3VtZW50YXRpb24+CisgICAgICAgICAgICAgICAgICBEYXRlIG9mIGNyZWF0aW9uIG9mIHRoZSByZXNvdXJjZS4gRW5jb2RlZCBpbiBJU08mYW1wO25ic3A7ODYwMSAmbHQ7YSBocmVmPSZxdW90O2h0dHA6Ly93d3cudzMub3JnL1RSL05PVEUtZGF0ZXRpbWUmcXVvdDsmZ3Q7aHR0cDovL3d3dy53My5vcmcvVFIvTk9URS1kYXRldGltZSZsdDsvYSZndDsuICBCYXNpY2FsbHksIHRoZSBmb3JtYXQgaXM6IFlZWVktTU0tREQgZS5nLiwgIDIwMDYtMDMtMjkKKyAgICAgICAgICAgICAgIDwvZG9jdW1lbnRhdGlvbj4KKyAgICAgICAgICAgIDwvYW5ub3RhdGlvbj4KKyAgICAgICAgIDwvYXR0cmlidXRlPgorICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJsaWNlbnNlIiB0eXBlPSJzdHJpbmciPgorICAgICAgICAgICAgPGFubm90YXRpb24+CisgICAgICAgICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KKyAgICAgICAgICAgICAgICAgIEEgbGVnYWwgZG9jdW1lbnQgZ2l2aW5nIG9mZmljaWFsIHBlcm1pc3Npb24gdG8gZG8gc29tZXRoaW5nIHdpdGggdGhlIHJlc291cmNlLiAgQmVzdCBwcmFjdGljZSBpcyB0byB1c2UgYSBVUkkgdG8gdGhlIHNwZWNpZmljIGxpY2Vuc2UuICBlLmcuLCBodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy9saWNlbnNlLworICAgICAgICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgorICAgICAgICAgICAgPC9hbm5vdGF0aW9uPgorICAgICAgICAgPC9hdHRyaWJ1dGU+CisgICAgICAgICA8YXR0cmlidXRlIG5hbWU9InJlcXVpcmVzIiB0eXBlPSJzdHJpbmciPgorICAgICAgICAgICAgPGFubm90YXRpb24+CisgICAgICAgICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KKyAgICAgICAgICAgICAgICAgIFRoZSBkZXNjcmliZWQgcmVzb3VyY2UgcmVxdWlyZXMgdGhlIHJlZmVyZW5jZWQgcmVzb3VyY2UgdG8gc3VwcG9ydCBpdHMgZnVuY3Rpb24sIGRlbGl2ZXJ5LCBvciBjb2hlcmVuY2Ugb2YgY29udGVudC4gIEluIFNURU0gdGhpcyBpcyB0aGUgVVJJIHRoYXQgaXMgdGhlIGlkZW50aWZpZXIgb2YgdGhlIHJlcXVpcmVkIHJlc291cmNlLiAgZS5nLiwgc3RlbTovZ3JhcGhzL3NhbXBsZS9zYW1wbGUxLmdyYXBoCisgICAgICAgICAgICAgICA8L2RvY3VtZW50YXRpb24+CisgICAgICAgICAgICA8L2Fubm90YXRpb24+CisgICAgICAgICA8L2F0dHJpYnV0ZT4KKyAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0ic3BhdGlhbCIgdHlwZT0ic3RyaW5nIj4KKyAgICAgICAgICAgIDxhbm5vdGF0aW9uPgorICAgICAgICAgICAgICAgPGRvY3VtZW50YXRpb24+CisgICAgICAgICAgICAgICAgICBTcGF0aWFsIGNoYXJhY3RlcmlzdGljcyBvZiB0aGUgaW50ZWxsZWN0dWFsIGNvbnRlbnQgb2YgdGhlIHJlc291cmNlLiAgU2VlICZsdDthIGhyZWY9JnF1b3Q7aHR0cDovL3d3dy5kdWJsaW5jb3JlLm9yZy9kb2N1bWVudHMvZGNtaS1wb2ludC8mcXVvdDsmZ3Q7aHR0cDovL3d3dy5kdWJsaW5jb3JlLm9yZy9kb2N1bWVudHMvZGNtaS1wb2ludC8mbHQ7L2EmZ3Q7ICBIb3dldmVyLCB0aGlzIHNob3VsZCBwcm9iYWJseSBiZSBhIFVSSSB0byBhIGZpbGUgdGhhdCBjb250YWlucyB0aGUgYWN0dWFsIGxhdC9sb25nIGRhdGEgdGhhdCBkZXNjcmliZXMgYSBwb2x5Z29uIHRoYXQgZGVmaW5lcyB0aGUgc3BhdGlhbCBvdXRsaW5lIG9mIGEgcGxhY2UuCisgICAgICAgICAgICAgICA8L2RvY3VtZW50YXRpb24+CisgICAgICAgICAgICA8L2Fubm90YXRpb24+CisgICAgICAgICA8L2F0dHJpYnV0ZT4KKyAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0idmFsaWQiIHR5cGU9InN0cmluZyI+CisgICAgICAgICAgICA8YW5ub3RhdGlvbj4KKyAgICAgICAgICAgICAgIDxkb2N1bWVudGF0aW9uPgorICAgICAgICAgICAgICAgICAgRGF0ZSAob2Z0ZW4gYSByYW5nZSkgb2YgdmFsaWR0eSBvZiBhIHJlc291cmNlIGVuY29kZWQgaW4gSVNPJmFtcDtuYnNwOzg2MDEgJmx0O2EgaHJlZj0mcXVvdDtodHRwOi8vd3d3LnczLm9yZy9UUi9OT1RFLWRhdGV0aW1lJnF1b3Q7Jmd0O2h0dHA6Ly93d3cudzMub3JnL1RSL05PVEUtZGF0ZXRpbWUmbHQ7L2EmZ3Q7LiBlLmcuIHN0YXJ0PTIwMDYtMDMtMjk7IGVuZD0yMDA2LTAzLTI5OyBvciBzaW1wbHkgc3RhcnQ9MjAwNi0wMy0yOTsgaWYgdGhlcmUgaXMgbm8gZW5kIHRvIHRoZSB2YWxpZGl0eQorICAgICAgICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgorICAgICAgICAgICAgPC9hbm5vdGF0aW9uPgorICAgICAgICAgPC9hdHRyaWJ1dGU+CisgICAgICAgICA8YXR0cmlidXRlIG5hbWU9ImNhdGVnb3J5X2lkIiB0eXBlPSJzdHJpbmciIHVzZT0iZGVmYXVsdCIgdmFsdWU9Ii8iPgorICAgICAgICAgICAgPGFubm90YXRpb24+CisgICAgICAgICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KKyAgICAgICAgICAgICAgICAgIElmIHRoZSByZXNvdXJjZSB0aGF0IHRoaXMgRHVibGluIENvcmUgaW5zdGFuY2UgZGVzY3JpYmVzIGlzIGluIGEgY2F0ZWdvcnkgdGhlbiB0aGlzIGlzIHRoZSB1bmlxdWUgaWRlbnRpZmllciBvZiB0aGUgY2F0ZWdvcnkuICZsdDtzYW1wJmd0O2NvbS5pYm0uYWxtYWRlbi5zdGVtLnRlc3QuY2F0ZWdvcnkuZ3JhcGgudGVzdCZsdDsvc2FtcCZndDsKKyAgICAgICAgICAgICAgIDwvZG9jdW1lbnRhdGlvbj4KKyAgICAgICAgICAgIDwvYW5ub3RhdGlvbj4KKyAgICAgICAgIDwvYXR0cmlidXRlPgorICAgICAgPC9jb21wbGV4VHlwZT4KKyAgIDwvZWxlbWVudD4KKworICAgPGFubm90YXRpb24+CisgICAgICA8YXBwaW5mbz4KKyAgICAgICAgIDxtZXRhLnNlY3Rpb24gdHlwZT0ic2luY2UiLz4KKyAgICAgIDwvYXBwaW5mbz4KKyAgICAgIDxkb2N1bWVudGF0aW9uPgorICAgICAgICAgW0VudGVyIHRoZSBmaXJzdCByZWxlYXNlIGluIHdoaWNoIHRoaXMgZXh0ZW5zaW9uIHBvaW50IGFwcGVhcnMuXQorICAgICAgPC9kb2N1bWVudGF0aW9uPgorICAgPC9hbm5vdGF0aW9uPgorCisgICA8YW5ub3RhdGlvbj4KKyAgICAgIDxhcHBpbmZvPgorICAgICAgICAgPG1ldGEuc2VjdGlvbiB0eXBlPSJleGFtcGxlcyIvPgorICAgICAgPC9hcHBpbmZvPgorICAgICAgPGRvY3VtZW50YXRpb24+CisgICAgICAgICBbRW50ZXIgZXh0ZW5zaW9uIHBvaW50IHVzYWdlIGV4YW1wbGUgaGVyZS5dCisgICAgICA8L2RvY3VtZW50YXRpb24+CisgICA8L2Fubm90YXRpb24+CisKKyAgIDxhbm5vdGF0aW9uPgorICAgICAgPGFwcGluZm8+CisgICAgICAgICA8bWV0YS5zZWN0aW9uIHR5cGU9ImFwaUluZm8iLz4KKyAgICAgIDwvYXBwaW5mbz4KKyAgICAgIDxkb2N1bWVudGF0aW9uPgorICAgICAgICAgW0VudGVyIEFQSSBpbmZvcm1hdGlvbiBoZXJlLl0KKyAgICAgIDwvZG9jdW1lbnRhdGlvbj4KKyAgIDwvYW5ub3RhdGlvbj4KKworICAgPGFubm90YXRpb24+CisgICAgICA8YXBwaW5mbz4KKyAgICAgICAgIDxtZXRhLnNlY3Rpb24gdHlwZT0iaW1wbGVtZW50YXRpb24iLz4KKyAgICAgIDwvYXBwaW5mbz4KKyAgICAgIDxkb2N1bWVudGF0aW9uPgorICAgICAgICAgW0VudGVyIGluZm9ybWF0aW9uIGFib3V0IHN1cHBsaWVkIGltcGxlbWVudGF0aW9uIG9mIHRoaXMgZXh0ZW5zaW9uIHBvaW50Ll0KKyAgICAgIDwvZG9jdW1lbnRhdGlvbj4KKyAgIDwvYW5ub3RhdGlvbj4KKworCis8L3NjaGVtYT4KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NjaGVtYS9leHBlcmltZW50LmV4c2QgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zY2hlbWEvZXhwZXJpbWVudC5leHNkCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjViMDc5MDMKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zY2hlbWEvZXhwZXJpbWVudC5leHNkCkBAIC0wLDAgKzEsODggQEAKKzw/eG1sIHZlcnNpb249JzEuMCcgZW5jb2Rpbmc9J1VURi04Jz8+Cis8IS0tIFNjaGVtYSBmaWxlIHdyaXR0ZW4gYnkgUERFIC0tPgorPHNjaGVtYSB0YXJnZXROYW1lc3BhY2U9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIj4KKzxhbm5vdGF0aW9uPgorICAgICAgPGFwcGluZm8+CisgICAgICAgICA8bWV0YS5zY2hlbWEgcGx1Z2luPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUiIGlkPSJleHBlcmltZW50IiBuYW1lPSIlRVBfRXhwZXJpbWVudCIvPgorICAgICAgPC9hcHBpbmZvPgorICAgICAgPGRvY3VtZW50YXRpb24+CisgICAgICAgICBUaGUgU1RFTSBzeXN0ZW0gY2FuIGluY29ycG9yYXRlIEV4cGVyaW1lbnQgZGVmaW5pdGlvbnMgcHJvdmlkZWQgYnkgcGx1Zy1pbnMuICBBIHBsdWctaW4gdGhhdCBleHRlbmRzIHRoZSAmcXVvdDtleHBlcmltZW50JnF1b3Q7IGV4dGVuc2lvbiBwb2ludCBwcm92aWRlcyB0aGUgZGVmaW5pdGlvbiBvZiBhIEV4cGVyaW1lbnQgIEl0IGNhbiBhbHNvIGRlZmluZSAmcXVvdDtjYXRhZ29yaWVzJnF1b3Q7IGludG8gd2hpY2ggRXhwZXJpbWVudHMgY2FuIGJlIGdyb3VwZWQuCisgICAgICA8L2RvY3VtZW50YXRpb24+CisgICA8L2Fubm90YXRpb24+CisKKyAgIDxpbmNsdWRlIHNjaGVtYUxvY2F0aW9uPSJkdWJsaW5fY29yZS5leHNkIi8+CisKKyAgIDxpbmNsdWRlIHNjaGVtYUxvY2F0aW9uPSJzdGVtX2NhdGVnb3J5LmV4c2QiLz4KKworICAgPGVsZW1lbnQgbmFtZT0iZXh0ZW5zaW9uIj4KKyAgICAgIDxhbm5vdGF0aW9uPgorICAgICAgICAgPGFwcGluZm8+CisgICAgICAgICAgICA8bWV0YS5lbGVtZW50IC8+CisgICAgICAgICA8L2FwcGluZm8+CisgICAgICA8L2Fubm90YXRpb24+CisgICAgICA8Y29tcGxleFR5cGU+CisgICAgICAgICA8YXR0cmlidXRlIG5hbWU9InBvaW50IiB0eXBlPSJzdHJpbmciIHVzZT0icmVxdWlyZWQiPgorICAgICAgICAgICAgPGFubm90YXRpb24+CisgICAgICAgICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KKyAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgorICAgICAgICAgICAgPC9hbm5vdGF0aW9uPgorICAgICAgICAgPC9hdHRyaWJ1dGU+CisgICAgICAgICA8YXR0cmlidXRlIG5hbWU9ImlkIiB0eXBlPSJzdHJpbmciPgorICAgICAgICAgICAgPGFubm90YXRpb24+CisgICAgICAgICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KKyAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgorICAgICAgICAgICAgPC9hbm5vdGF0aW9uPgorICAgICAgICAgPC9hdHRyaWJ1dGU+CisgICAgICAgICA8YXR0cmlidXRlIG5hbWU9Im5hbWUiIHR5cGU9InN0cmluZyI+CisgICAgICAgICAgICA8YW5ub3RhdGlvbj4KKyAgICAgICAgICAgICAgIDxkb2N1bWVudGF0aW9uPgorICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICA8L2RvY3VtZW50YXRpb24+CisgICAgICAgICAgICAgICA8YXBwaW5mbz4KKyAgICAgICAgICAgICAgICAgIDxtZXRhLmF0dHJpYnV0ZSB0cmFuc2xhdGFibGU9InRydWUiLz4KKyAgICAgICAgICAgICAgIDwvYXBwaW5mbz4KKyAgICAgICAgICAgIDwvYW5ub3RhdGlvbj4KKyAgICAgICAgIDwvYXR0cmlidXRlPgorICAgICAgPC9jb21wbGV4VHlwZT4KKyAgIDwvZWxlbWVudD4KKworICAgPGFubm90YXRpb24+CisgICAgICA8YXBwaW5mbz4KKyAgICAgICAgIDxtZXRhLnNlY3Rpb24gdHlwZT0ic2luY2UiLz4KKyAgICAgIDwvYXBwaW5mbz4KKyAgICAgIDxkb2N1bWVudGF0aW9uPgorICAgICAgICAgW0VudGVyIHRoZSBmaXJzdCByZWxlYXNlIGluIHdoaWNoIHRoaXMgZXh0ZW5zaW9uIHBvaW50IGFwcGVhcnMuXQorICAgICAgPC9kb2N1bWVudGF0aW9uPgorICAgPC9hbm5vdGF0aW9uPgorCisgICA8YW5ub3RhdGlvbj4KKyAgICAgIDxhcHBpbmZvPgorICAgICAgICAgPG1ldGEuc2VjdGlvbiB0eXBlPSJleGFtcGxlcyIvPgorICAgICAgPC9hcHBpbmZvPgorICAgICAgPGRvY3VtZW50YXRpb24+CisgICAgICAgICBbRW50ZXIgZXh0ZW5zaW9uIHBvaW50IHVzYWdlIGV4YW1wbGUgaGVyZS5dCisgICAgICA8L2RvY3VtZW50YXRpb24+CisgICA8L2Fubm90YXRpb24+CisKKyAgIDxhbm5vdGF0aW9uPgorICAgICAgPGFwcGluZm8+CisgICAgICAgICA8bWV0YS5zZWN0aW9uIHR5cGU9ImFwaWluZm8iLz4KKyAgICAgIDwvYXBwaW5mbz4KKyAgICAgIDxkb2N1bWVudGF0aW9uPgorICAgICAgICAgW0VudGVyIEFQSSBpbmZvcm1hdGlvbiBoZXJlLl0KKyAgICAgIDwvZG9jdW1lbnRhdGlvbj4KKyAgIDwvYW5ub3RhdGlvbj4KKworICAgPGFubm90YXRpb24+CisgICAgICA8YXBwaW5mbz4KKyAgICAgICAgIDxtZXRhLnNlY3Rpb24gdHlwZT0iaW1wbGVtZW50YXRpb24iLz4KKyAgICAgIDwvYXBwaW5mbz4KKyAgICAgIDxkb2N1bWVudGF0aW9uPgorICAgICAgICAgW0VudGVyIGluZm9ybWF0aW9uIGFib3V0IHN1cHBsaWVkIGltcGxlbWVudGF0aW9uIG9mIHRoaXMgZXh0ZW5zaW9uIHBvaW50Ll0KKyAgICAgIDwvZG9jdW1lbnRhdGlvbj4KKyAgIDwvYW5ub3RhdGlvbj4KKworCis8L3NjaGVtYT4KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NjaGVtYS9ncmFwaC5leHNkIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc2NoZW1hL2dyYXBoLmV4c2QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDE3Mzg4MwotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NjaGVtYS9ncmFwaC5leHNkCkBAIC0wLDAgKzEsMTI4IEBACis8P3htbCB2ZXJzaW9uPScxLjAnIGVuY29kaW5nPSdVVEYtOCc/PgorPCEtLSBTY2hlbWEgZmlsZSB3cml0dGVuIGJ5IFBERSAtLT4KKzxzY2hlbWEgdGFyZ2V0TmFtZXNwYWNlPSJjb20uaWJtLmFsbWFkZW4uc3RlbS5jb3JlIj4KKzxhbm5vdGF0aW9uPgorICAgICAgPGFwcEluZm8+CisgICAgICAgICA8bWV0YS5zY2hlbWEgcGx1Z2luPSJjb20uaWJtLmFsbWFkZW4uc3RlbS5jb3JlIiBpZD0iZ3JhcGgiIG5hbWU9IlNURU0gZ3JhcGggZXh0ZW5zaW9uIHBvaW50Ii8+CisgICAgICA8L2FwcEluZm8+CisgICAgICA8ZG9jdW1lbnRhdGlvbj4KKyAgICAgICAgIFRoZSBTVEVNIHN5c3RlbSBjYW4gaW5jb3Jwb3JhdGUgR3JhcGggZGVmaW5pdGlvbnMgYW5kIGZyYWdtZW50cyBvZiBHcmFwaCBkZWZpbml0aW9ucyBwcm92aWRlZCBieSBwbHVnLWlucy4gIEEgcGx1Zy1pbiB0aGF0IGV4dGVuZHMgdGhlICZxdW90O2dyYXBoJnF1b3Q7IGV4dGVuc2lvbiBwb2ludCBwcm92aWRlcyB0aGUgZGVmaW5pdGlvbiBvZiBhIEdyYXBoIG9yIEdyYXBoIGZyYWdtZW50LiAgSXQgY2FuIGFsc28gZGVmaW5lICZxdW90O2NhdGFnb3JpZXMmcXVvdDsgaW50byB3aGljaCBHcmFwaHMgY2FuIGJlIGdyb3VwZWQuCisgICAgICA8L2RvY3VtZW50YXRpb24+CisgICA8L2Fubm90YXRpb24+CisKKyAgIDxpbmNsdWRlIHNjaGVtYUxvY2F0aW9uPSJkdWJsaW5fY29yZS5leHNkIi8+CisKKyAgIDxpbmNsdWRlIHNjaGVtYUxvY2F0aW9uPSJzdGVtX2NhdGVnb3J5LmV4c2QiLz4KKworICAgPGVsZW1lbnQgbmFtZT0iZXh0ZW5zaW9uIj4KKyAgICAgIDxjb21wbGV4VHlwZT4KKyAgICAgICAgIDxjaG9pY2U+CisgICAgICAgICAgICA8ZWxlbWVudCByZWY9InN0ZW1fY2F0ZWdvcnkiIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KKyAgICAgICAgICAgIDxlbGVtZW50IHJlZj0iZHVibGluX2NvcmUiIG1pbk9jY3Vycz0iMSIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KKyAgICAgICAgIDwvY2hvaWNlPgorICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJwb2ludCIgdHlwZT0ic3RyaW5nIiB1c2U9InJlcXVpcmVkIj4KKyAgICAgICAgICAgIDxhbm5vdGF0aW9uPgorICAgICAgICAgICAgICAgPGRvY3VtZW50YXRpb24+CisgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgIDwvZG9jdW1lbnRhdGlvbj4KKyAgICAgICAgICAgIDwvYW5ub3RhdGlvbj4KKyAgICAgICAgIDwvYXR0cmlidXRlPgorICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJpZCIgdHlwZT0ic3RyaW5nIj4KKyAgICAgICAgICAgIDxhbm5vdGF0aW9uPgorICAgICAgICAgICAgICAgPGRvY3VtZW50YXRpb24+CisgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgIDwvZG9jdW1lbnRhdGlvbj4KKyAgICAgICAgICAgIDwvYW5ub3RhdGlvbj4KKyAgICAgICAgIDwvYXR0cmlidXRlPgorICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJuYW1lIiB0eXBlPSJzdHJpbmciPgorICAgICAgICAgICAgPGFubm90YXRpb24+CisgICAgICAgICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KKyAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgorICAgICAgICAgICAgICAgPGFwcEluZm8+CisgICAgICAgICAgICAgICAgICA8bWV0YS5hdHRyaWJ1dGUgdHJhbnNsYXRhYmxlPSJ0cnVlIi8+CisgICAgICAgICAgICAgICA8L2FwcEluZm8+CisgICAgICAgICAgICA8L2Fubm90YXRpb24+CisgICAgICAgICA8L2F0dHJpYnV0ZT4KKyAgICAgIDwvY29tcGxleFR5cGU+CisgICA8L2VsZW1lbnQ+CisKKyAgIDxhbm5vdGF0aW9uPgorICAgICAgPGFwcEluZm8+CisgICAgICAgICA8bWV0YS5zZWN0aW9uIHR5cGU9InNpbmNlIi8+CisgICAgICA8L2FwcEluZm8+CisgICAgICA8ZG9jdW1lbnRhdGlvbj4KKyAgICAgICAgIDAuMC4wCisgICAgICA8L2RvY3VtZW50YXRpb24+CisgICA8L2Fubm90YXRpb24+CisKKyAgIDxhbm5vdGF0aW9uPgorICAgICAgPGFwcEluZm8+CisgICAgICAgICA8bWV0YS5zZWN0aW9uIHR5cGU9ImV4YW1wbGVzIi8+CisgICAgICA8L2FwcEluZm8+CisgICAgICA8ZG9jdW1lbnRhdGlvbj4KKyAgICAgICAgIFRoZSBmb2xsb3dpbmcgaXMgYW4gZXhhbXBsZSBvZiB0aGUgZ3JhcGggZXh0ZW5zaW9uIHBvaW50IHVzYWdlLgorJmx0O3AmZ3Q7CismbHQ7cHJlJmd0OworICZsdDtleHRlbnNpb24KKyAgICAgICAgIHBvaW50PSZxdW90O2NvbS5pYm0uYWxtYWRlbi5zdGVtLmNvcmUuZ3JhcGgmcXVvdDsmZ3Q7CisgICAgICAmbHQ7Y2F0ZWdvcnkKKyAgICAgICAgICAgIGlkPSZxdW90O2NvbS5pYm0uYWxtYWRlbi5zdGVtLnRlc3QuY2F0ZWdvcnkuZ3JhcGguYmFzaWMmcXVvdDsKKyAgICAgICAgICAgIG5hbWU9JnF1b3Q7QmFzaWMmcXVvdDsKKyAgICAgICAgICAgIHBhcmVudF9pZD0mcXVvdDtjb20uaWJtLmFsbWFkZW4uc3RlbS50ZXN0LmNhdGVnb3J5LmdyYXBoLnRlc3QmcXVvdDsvJmd0OworICAgICAgJmx0O2R1Ymxpbl9jb3JlCisgICAgICAgICAgICBjYXRlZ29yeV9pZD0mcXVvdDtjb20uaWJtLmFsbWFkZW4uc3RlbS50ZXN0LmNhdGVnb3J5LmdyYXBoLmJhc2ljJnF1b3Q7CisgICAgICAgICAgICBjcmVhdGVkPSZxdW90OzIwMDYtMDQtMjQmcXVvdDsKKyAgICAgICAgICAgIGNyZWF0b3I9JnF1b3Q7RGFuaWVsIEZvcmQmcXVvdDsKKyAgICAgICAgICAgIGRhdGU9JnF1b3Q7MjAwNi0wNC0yNCZxdW90OworICAgICAgICAgICAgZGVzY3JpcHRpb249JnF1b3Q7QSBncmFwaCB3aXRoIGEgc2luZ2xlIG5vZGUsIG5vdGhpbmcgZWxzZSwgZm9yIHRlc3RpbmcmcXVvdDsKKyAgICAgICAgICAgIGZvcm1hdD0mcXVvdDtodHRwOi8vL2NvbS9pYm0vYWxtYWRlbi9zdGVtL2dyYXBoLmVjb3JlJnF1b3Q7CisgICAgICAgICAgICBpZGVudGlmaWVyPSZxdW90O3N0ZW06Y29tLmlibS5hbG1hZGVuLnN0ZW0udGVzdC5ncmFwaC5vbmVub2RlMSZxdW90OworICAgICAgICAgICAgc3ViamVjdD0mcXVvdDtUZXN0aW5nJnF1b3Q7CisgICAgICAgICAgICB0aXRsZT0mcXVvdDtPbmUgTm9kZSAjMSZxdW90OworICAgICAgICAgICAgdmFsaWQ9JnF1b3Q7c3RhcnQ9MjAwNi0wMy0yOTsmcXVvdDsvJmd0OworICAgICAgJmx0O2R1Ymxpbl9jb3JlCisgICAgICAgICAgICBjYXRlZ29yeV9pZD0mcXVvdDtjb20uaWJtLmFsbWFkZW4uc3RlbS50ZXN0LmNhdGVnb3J5LmdyYXBoLmJhc2ljJnF1b3Q7CisgICAgICAgICAgICBjcmVhdGVkPSZxdW90OzIwMDYtMDQtMjQmcXVvdDsKKyAgICAgICAgICAgIGNyZWF0b3I9JnF1b3Q7RGFuaWVsIEZvcmQmcXVvdDsKKyAgICAgICAgICAgIGRhdGU9JnF1b3Q7MjAwNi0wNC0yNCZxdW90OworICAgICAgICAgICAgZGVzY3JpcHRpb249JnF1b3Q7QSBncmFwaCB3aXRoIGEgc2luZ2xlIG5vZGUsIG5vdGhpbmcgZWxzZSwgZm9yIHRlc3RpbmcmcXVvdDsKKyAgICAgICAgICAgIGZvcm1hdD0mcXVvdDtodHRwOi8vL2NvbS9pYm0vYWxtYWRlbi9zdGVtL2dyYXBoLmVjb3JlJnF1b3Q7CisgICAgICAgICAgICBpZGVudGlmaWVyPSZxdW90O3N0ZW06Y29tLmlibS5hbG1hZGVuLnN0ZW0udGVzdC5ncmFwaC5vbmVub2RlMiZxdW90OworICAgICAgICAgICAgc3ViamVjdD0mcXVvdDtUZXN0aW5nJnF1b3Q7CisgICAgICAgICAgICB0aXRsZT0mcXVvdDtPbmUgTm9kZSAjMiZxdW90OworICAgICAgICAgICAgdmFsaWQ9JnF1b3Q7c3RhcnQ9MjAwNi0wMy0yOTsmcXVvdDsvJmd0OworICAgJmx0Oy9leHRlbnNpb24mZ3Q7CismbHQ7L3ByZSZndDsKKyZsdDsvcCZndDsKKyAgICAgIDwvZG9jdW1lbnRhdGlvbj4KKyAgIDwvYW5ub3RhdGlvbj4KKworICAgPGFubm90YXRpb24+CisgICAgICA8YXBwSW5mbz4KKyAgICAgICAgIDxtZXRhLnNlY3Rpb24gdHlwZT0iYXBpSW5mbyIvPgorICAgICAgPC9hcHBJbmZvPgorICAgICAgPGRvY3VtZW50YXRpb24+CisgICAgICAgICBOb25lCisgICAgICA8L2RvY3VtZW50YXRpb24+CisgICA8L2Fubm90YXRpb24+CisKKyAgIDxhbm5vdGF0aW9uPgorICAgICAgPGFwcEluZm8+CisgICAgICAgICA8bWV0YS5zZWN0aW9uIHR5cGU9ImltcGxlbWVudGF0aW9uIi8+CisgICAgICA8L2FwcEluZm8+CisgICAgICA8ZG9jdW1lbnRhdGlvbj4KKyAgICAgICAgIE5vbmUuCisgICAgICA8L2RvY3VtZW50YXRpb24+CisgICA8L2Fubm90YXRpb24+CisKKyAgIDxhbm5vdGF0aW9uPgorICAgICAgPGFwcEluZm8+CisgICAgICAgICA8bWV0YS5zZWN0aW9uIHR5cGU9ImNvcHlyaWdodCIvPgorICAgICAgPC9hcHBJbmZvPgorICAgICAgPGRvY3VtZW50YXRpb24+CisgICAgICAgICAKKyAgICAgIDwvZG9jdW1lbnRhdGlvbj4KKyAgIDwvYW5ub3RhdGlvbj4KKworPC9zY2hlbWE+CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zY2hlbWEvZ3JhcGhnZW5lcmF0b3IuZXhzZCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NjaGVtYS9ncmFwaGdlbmVyYXRvci5leHNkCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRlYWE4ZGQKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zY2hlbWEvZ3JhcGhnZW5lcmF0b3IuZXhzZApAQCAtMCwwICsxLDEwNSBAQAorPD94bWwgdmVyc2lvbj0nMS4wJyBlbmNvZGluZz0nVVRGLTgnPz4KKzwhLS0gU2NoZW1hIGZpbGUgd3JpdHRlbiBieSBQREUgLS0+Cis8c2NoZW1hIHRhcmdldE5hbWVzcGFjZT0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiPgorPGFubm90YXRpb24+CisgICAgICA8YXBwaW5mbz4KKyAgICAgICAgIDxtZXRhLnNjaGVtYSBwbHVnaW49Im9yZy5lY2xpcHNlLnN0ZW0uY29yZSIgaWQ9ImdyYXBoZ2VuZXJhdG9yIiBuYW1lPSJTVEVNIEdyYXBoIEdlbmVyYXRvciIvPgorICAgICAgPC9hcHBpbmZvPgorICAgICAgPGRvY3VtZW50YXRpb24+CisgICAgICAgICBUaGlzIGV4dGVuc2lvbiBwb2ludCBpcyB1c2VkIHRvIGNyZWF0ZSBuZXcgd2F5cyBvZiBpbXBvcnRpbmcgZ3JhcGhzIGludG8gU1RFTQorICAgICAgPC9kb2N1bWVudGF0aW9uPgorICAgPC9hbm5vdGF0aW9uPgorCisgICA8aW5jbHVkZSBzY2hlbWFMb2NhdGlvbj0ic2NoZW1hOi8vb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NjaGVtYS9kdWJsaW5fY29yZS5leHNkIi8+CisKKyAgIDxlbGVtZW50IG5hbWU9ImV4dGVuc2lvbiI+CisgICAgICA8YW5ub3RhdGlvbj4KKyAgICAgICAgIDxhcHBpbmZvPgorICAgICAgICAgICAgPG1ldGEuZWxlbWVudCAvPgorICAgICAgICAgPC9hcHBpbmZvPgorICAgICAgPC9hbm5vdGF0aW9uPgorICAgICAgPGNvbXBsZXhUeXBlPgorICAgICAgICAgPHNlcXVlbmNlPgorICAgICAgICAgICAgPGVsZW1lbnQgcmVmPSJjbGFzc2RlZiIvPgorICAgICAgICAgICAgPGVsZW1lbnQgcmVmPSJkdWJsaW5fY29yZSIvPgorICAgICAgICAgPC9zZXF1ZW5jZT4KKyAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0icG9pbnQiIHR5cGU9InN0cmluZyIgdXNlPSJyZXF1aXJlZCI+CisgICAgICAgICAgICA8YW5ub3RhdGlvbj4KKyAgICAgICAgICAgICAgIDxkb2N1bWVudGF0aW9uPgorICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICA8L2RvY3VtZW50YXRpb24+CisgICAgICAgICAgICA8L2Fubm90YXRpb24+CisgICAgICAgICA8L2F0dHJpYnV0ZT4KKyAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0iaWQiIHR5cGU9InN0cmluZyI+CisgICAgICAgICAgICA8YW5ub3RhdGlvbj4KKyAgICAgICAgICAgICAgIDxkb2N1bWVudGF0aW9uPgorICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICA8L2RvY3VtZW50YXRpb24+CisgICAgICAgICAgICA8L2Fubm90YXRpb24+CisgICAgICAgICA8L2F0dHJpYnV0ZT4KKyAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0ibmFtZSIgdHlwZT0ic3RyaW5nIj4KKyAgICAgICAgICAgIDxhbm5vdGF0aW9uPgorICAgICAgICAgICAgICAgPGRvY3VtZW50YXRpb24+CisgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgIDwvZG9jdW1lbnRhdGlvbj4KKyAgICAgICAgICAgICAgIDxhcHBpbmZvPgorICAgICAgICAgICAgICAgICAgPG1ldGEuYXR0cmlidXRlIHRyYW5zbGF0YWJsZT0idHJ1ZSIvPgorICAgICAgICAgICAgICAgPC9hcHBpbmZvPgorICAgICAgICAgICAgPC9hbm5vdGF0aW9uPgorICAgICAgICAgPC9hdHRyaWJ1dGU+CisgICAgICA8L2NvbXBsZXhUeXBlPgorICAgPC9lbGVtZW50PgorCisgICA8ZWxlbWVudCBuYW1lPSJjbGFzc2RlZiI+CisgICAgICA8Y29tcGxleFR5cGU+CisgICAgICAgICA8YXR0cmlidXRlIG5hbWU9ImNsYXNzIiB0eXBlPSJzdHJpbmciIHVzZT0icmVxdWlyZWQiPgorICAgICAgICAgICAgPGFubm90YXRpb24+CisgICAgICAgICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KKyAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgorICAgICAgICAgICAgICAgPGFwcGluZm8+CisgICAgICAgICAgICAgICAgICA8bWV0YS5hdHRyaWJ1dGUga2luZD0iamF2YSIgYmFzZWRPbj0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoZ2VuZXJhdG9yLmltcGwuR3JhcGhHZW5lcmF0b3JJbXBsOm9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaGdlbmVyYXRvci5HcmFwaEdlbmVyYXRvciIvPgorICAgICAgICAgICAgICAgPC9hcHBpbmZvPgorICAgICAgICAgICAgPC9hbm5vdGF0aW9uPgorICAgICAgICAgPC9hdHRyaWJ1dGU+CisgICAgICA8L2NvbXBsZXhUeXBlPgorICAgPC9lbGVtZW50PgorCisgICA8YW5ub3RhdGlvbj4KKyAgICAgIDxhcHBpbmZvPgorICAgICAgICAgPG1ldGEuc2VjdGlvbiB0eXBlPSJzaW5jZSIvPgorICAgICAgPC9hcHBpbmZvPgorICAgICAgPGRvY3VtZW50YXRpb24+CisgICAgICAgICAxLjAxCisgICAgICA8L2RvY3VtZW50YXRpb24+CisgICA8L2Fubm90YXRpb24+CisKKyAgIDxhbm5vdGF0aW9uPgorICAgICAgPGFwcGluZm8+CisgICAgICAgICA8bWV0YS5zZWN0aW9uIHR5cGU9ImV4YW1wbGVzIi8+CisgICAgICA8L2FwcGluZm8+CisgICAgICA8ZG9jdW1lbnRhdGlvbj4KKyAgICAgICAgIFRoaXMgZXh0ZW5zaW9uIHBvaW50IGlzIHVzZWQgdG8gY3JlYXRlIG5ldyB3YXlzIG9mIGltcG9ydGluZyBncmFwaHMgaW50byBTVEVNCisgICAgICA8L2RvY3VtZW50YXRpb24+CisgICA8L2Fubm90YXRpb24+CisKKyAgIDxhbm5vdGF0aW9uPgorICAgICAgPGFwcGluZm8+CisgICAgICAgICA8bWV0YS5zZWN0aW9uIHR5cGU9ImFwaUluZm8iLz4KKyAgICAgIDwvYXBwaW5mbz4KKyAgICAgIDxkb2N1bWVudGF0aW9uPgorICAgICAgICAgW0VudGVyIEFQSSBpbmZvcm1hdGlvbiBoZXJlLl0KKyAgICAgIDwvZG9jdW1lbnRhdGlvbj4KKyAgIDwvYW5ub3RhdGlvbj4KKworICAgPGFubm90YXRpb24+CisgICAgICA8YXBwaW5mbz4KKyAgICAgICAgIDxtZXRhLnNlY3Rpb24gdHlwZT0iaW1wbGVtZW50YXRpb24iLz4KKyAgICAgIDwvYXBwaW5mbz4KKyAgICAgIDxkb2N1bWVudGF0aW9uPgorICAgICAgICAgW0VudGVyIGluZm9ybWF0aW9uIGFib3V0IHN1cHBsaWVkIGltcGxlbWVudGF0aW9uIG9mIHRoaXMgZXh0ZW5zaW9uIHBvaW50Ll0KKyAgICAgIDwvZG9jdW1lbnRhdGlvbj4KKyAgIDwvYW5ub3RhdGlvbj4KKworCis8L3NjaGVtYT4KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NjaGVtYS9sb2dnZXIuZXhzZCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NjaGVtYS9sb2dnZXIuZXhzZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYzM5YWMxCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc2NoZW1hL2xvZ2dlci5leHNkCkBAIC0wLDAgKzEsMTA1IEBACis8P3htbCB2ZXJzaW9uPScxLjAnIGVuY29kaW5nPSdVVEYtOCc/PgorPCEtLSBTY2hlbWEgZmlsZSB3cml0dGVuIGJ5IFBERSAtLT4KKzxzY2hlbWEgdGFyZ2V0TmFtZXNwYWNlPSJjb20uaWJtLmFsbWFkZW4uc3RlbS5jb3JlIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiPgorPGFubm90YXRpb24+CisgICAgICA8YXBwaW5mbz4KKyAgICAgICAgIDxtZXRhLnNjaGVtYSBwbHVnaW49ImNvbS5pYm0uYWxtYWRlbi5zdGVtLmNvcmUiIGlkPSJsb2dnZXIiIG5hbWU9IiVFUF9Mb2dnZXIiLz4KKyAgICAgIDwvYXBwaW5mbz4KKyAgICAgIDxkb2N1bWVudGF0aW9uPgorICAgICAgICAgW0VudGVyIGRlc2NyaXB0aW9uIG9mIHRoaXMgZXh0ZW5zaW9uIHBvaW50Ll0KKyAgICAgIDwvZG9jdW1lbnRhdGlvbj4KKyAgIDwvYW5ub3RhdGlvbj4KKworICAgPGluY2x1ZGUgc2NoZW1hTG9jYXRpb249InNjaGVtYTovL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zY2hlbWEvZHVibGluX2NvcmUuZXhzZCIvPgorCisgICA8ZWxlbWVudCBuYW1lPSJleHRlbnNpb24iPgorICAgICAgPGFubm90YXRpb24+CisgICAgICAgICA8YXBwaW5mbz4KKyAgICAgICAgICAgIDxtZXRhLmVsZW1lbnQgLz4KKyAgICAgICAgIDwvYXBwaW5mbz4KKyAgICAgIDwvYW5ub3RhdGlvbj4KKyAgICAgIDxjb21wbGV4VHlwZT4KKyAgICAgICAgIDxzZXF1ZW5jZT4KKyAgICAgICAgICAgIDxlbGVtZW50IHJlZj0iY2xhc3NkZWYiLz4KKyAgICAgICAgICAgIDxlbGVtZW50IHJlZj0iZHVibGluX2NvcmUiLz4KKyAgICAgICAgIDwvc2VxdWVuY2U+CisgICAgICAgICA8YXR0cmlidXRlIG5hbWU9InBvaW50IiB0eXBlPSJzdHJpbmciIHVzZT0icmVxdWlyZWQiPgorICAgICAgICAgICAgPGFubm90YXRpb24+CisgICAgICAgICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KKyAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgorICAgICAgICAgICAgPC9hbm5vdGF0aW9uPgorICAgICAgICAgPC9hdHRyaWJ1dGU+CisgICAgICAgICA8YXR0cmlidXRlIG5hbWU9ImlkIiB0eXBlPSJzdHJpbmciPgorICAgICAgICAgICAgPGFubm90YXRpb24+CisgICAgICAgICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KKyAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgorICAgICAgICAgICAgPC9hbm5vdGF0aW9uPgorICAgICAgICAgPC9hdHRyaWJ1dGU+CisgICAgICAgICA8YXR0cmlidXRlIG5hbWU9Im5hbWUiIHR5cGU9InN0cmluZyI+CisgICAgICAgICAgICA8YW5ub3RhdGlvbj4KKyAgICAgICAgICAgICAgIDxkb2N1bWVudGF0aW9uPgorICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICA8L2RvY3VtZW50YXRpb24+CisgICAgICAgICAgICAgICA8YXBwaW5mbz4KKyAgICAgICAgICAgICAgICAgIDxtZXRhLmF0dHJpYnV0ZSB0cmFuc2xhdGFibGU9InRydWUiLz4KKyAgICAgICAgICAgICAgIDwvYXBwaW5mbz4KKyAgICAgICAgICAgIDwvYW5ub3RhdGlvbj4KKyAgICAgICAgIDwvYXR0cmlidXRlPgorICAgICAgPC9jb21wbGV4VHlwZT4KKyAgIDwvZWxlbWVudD4KKworICAgPGVsZW1lbnQgbmFtZT0iY2xhc3NkZWYiPgorICAgICAgPGNvbXBsZXhUeXBlPgorICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJjbGFzcyIgdHlwZT0ic3RyaW5nIiB1c2U9InJlcXVpcmVkIj4KKyAgICAgICAgICAgIDxhbm5vdGF0aW9uPgorICAgICAgICAgICAgICAgPGRvY3VtZW50YXRpb24+CisgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgIDwvZG9jdW1lbnRhdGlvbj4KKyAgICAgICAgICAgICAgIDxhcHBpbmZvPgorICAgICAgICAgICAgICAgICAgPG1ldGEuYXR0cmlidXRlIGtpbmQ9ImphdmEiIGJhc2VkT249IjpvcmcuZWNsaXBzZS5zdGVtLmNvcmUubG9nZ2VyLkxvZ2dlciIvPgorICAgICAgICAgICAgICAgPC9hcHBpbmZvPgorICAgICAgICAgICAgPC9hbm5vdGF0aW9uPgorICAgICAgICAgPC9hdHRyaWJ1dGU+CisgICAgICA8L2NvbXBsZXhUeXBlPgorICAgPC9lbGVtZW50PgorCisgICA8YW5ub3RhdGlvbj4KKyAgICAgIDxhcHBpbmZvPgorICAgICAgICAgPG1ldGEuc2VjdGlvbiB0eXBlPSJzaW5jZSIvPgorICAgICAgPC9hcHBpbmZvPgorICAgICAgPGRvY3VtZW50YXRpb24+CisgICAgICAgICBbRW50ZXIgdGhlIGZpcnN0IHJlbGVhc2UgaW4gd2hpY2ggdGhpcyBleHRlbnNpb24gcG9pbnQgYXBwZWFycy5dCisgICAgICA8L2RvY3VtZW50YXRpb24+CisgICA8L2Fubm90YXRpb24+CisKKyAgIDxhbm5vdGF0aW9uPgorICAgICAgPGFwcGluZm8+CisgICAgICAgICA8bWV0YS5zZWN0aW9uIHR5cGU9ImV4YW1wbGVzIi8+CisgICAgICA8L2FwcGluZm8+CisgICAgICA8ZG9jdW1lbnRhdGlvbj4KKyAgICAgICAgIFtFbnRlciBleHRlbnNpb24gcG9pbnQgdXNhZ2UgZXhhbXBsZSBoZXJlLl0KKyAgICAgIDwvZG9jdW1lbnRhdGlvbj4KKyAgIDwvYW5ub3RhdGlvbj4KKworICAgPGFubm90YXRpb24+CisgICAgICA8YXBwaW5mbz4KKyAgICAgICAgIDxtZXRhLnNlY3Rpb24gdHlwZT0iYXBpaW5mbyIvPgorICAgICAgPC9hcHBpbmZvPgorICAgICAgPGRvY3VtZW50YXRpb24+CisgICAgICAgICBbRW50ZXIgQVBJIGluZm9ybWF0aW9uIGhlcmUuXQorICAgICAgPC9kb2N1bWVudGF0aW9uPgorICAgPC9hbm5vdGF0aW9uPgorCisgICA8YW5ub3RhdGlvbj4KKyAgICAgIDxhcHBpbmZvPgorICAgICAgICAgPG1ldGEuc2VjdGlvbiB0eXBlPSJpbXBsZW1lbnRhdGlvbiIvPgorICAgICAgPC9hcHBpbmZvPgorICAgICAgPGRvY3VtZW50YXRpb24+CisgICAgICAgICBbRW50ZXIgaW5mb3JtYXRpb24gYWJvdXQgc3VwcGxpZWQgaW1wbGVtZW50YXRpb24gb2YgdGhpcyBleHRlbnNpb24gcG9pbnQuXQorICAgICAgPC9kb2N1bWVudGF0aW9uPgorICAgPC9hbm5vdGF0aW9uPgorCisKKzwvc2NoZW1hPgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc2NoZW1hL21vZGVsLmV4c2QgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zY2hlbWEvbW9kZWwuZXhzZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NjM0ZDRjCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc2NoZW1hL21vZGVsLmV4c2QKQEAgLTAsMCArMSwyIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/Pg0KKzx4bWk6WE1JIHhtaTp2ZXJzaW9uPSIyLjAiIHhtbG5zOnhtaT0iaHR0cDovL3d3dy5vbWcub3JnL1hNSSIvPg0KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NjaGVtYS9wcmVkaWNhdGUuZXhzZCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NjaGVtYS9wcmVkaWNhdGUuZXhzZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mOTNlYjNkCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc2NoZW1hL3ByZWRpY2F0ZS5leHNkCkBAIC0wLDAgKzEsODggQEAKKzw/eG1sIHZlcnNpb249JzEuMCcgZW5jb2Rpbmc9J1VURi04Jz8+Cis8IS0tIFNjaGVtYSBmaWxlIHdyaXR0ZW4gYnkgUERFIC0tPgorPHNjaGVtYSB0YXJnZXROYW1lc3BhY2U9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIj4KKzxhbm5vdGF0aW9uPgorICAgICAgPGFwcGluZm8+CisgICAgICAgICA8bWV0YS5zY2hlbWEgcGx1Z2luPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUiIGlkPSJwcmVkaWNhdGUiIG5hbWU9IiVFUF9QcmVkaWNhdGUiLz4KKyAgICAgIDwvYXBwaW5mbz4KKyAgICAgIDxkb2N1bWVudGF0aW9uPgorICAgICAgICAgVGhlIFNURU0gc3lzdGVtIGNhbiBpbmNvcnBvcmF0ZSBQcmVkaWNhdGUgZGVmaW5pdGlvbnMgcHJvdmlkZWQgYnkgcGx1Zy1pbnMuICBBIHBsdWctaW4gdGhhdCBleHRlbmRzIHRoZSAmcXVvdDtwcmVkaWNhdGUmcXVvdDsgZXh0ZW5zaW9uIHBvaW50IHByb3ZpZGVzIHRoZSBkZWZpbml0aW9uIG9mIGEgUHJlZGljYXRlICBJdCBjYW4gYWxzbyBkZWZpbmUgJnF1b3Q7Y2F0YWdvcmllcyZxdW90OyBpbnRvIHdoaWNoIFByZWRpY2F0ZXMgY2FuIGJlIGdyb3VwZWQuCisgICAgICA8L2RvY3VtZW50YXRpb24+CisgICA8L2Fubm90YXRpb24+CisKKyAgIDxpbmNsdWRlIHNjaGVtYUxvY2F0aW9uPSJzdGVtX2NhdGVnb3J5LmV4c2QiLz4KKworICAgPGluY2x1ZGUgc2NoZW1hTG9jYXRpb249ImR1Ymxpbl9jb3JlLmV4c2QiLz4KKworICAgPGVsZW1lbnQgbmFtZT0iZXh0ZW5zaW9uIj4KKyAgICAgIDxhbm5vdGF0aW9uPgorICAgICAgICAgPGFwcGluZm8+CisgICAgICAgICAgICA8bWV0YS5lbGVtZW50IC8+CisgICAgICAgICA8L2FwcGluZm8+CisgICAgICA8L2Fubm90YXRpb24+CisgICAgICA8Y29tcGxleFR5cGU+CisgICAgICAgICA8YXR0cmlidXRlIG5hbWU9InBvaW50IiB0eXBlPSJzdHJpbmciIHVzZT0icmVxdWlyZWQiPgorICAgICAgICAgICAgPGFubm90YXRpb24+CisgICAgICAgICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KKyAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgorICAgICAgICAgICAgPC9hbm5vdGF0aW9uPgorICAgICAgICAgPC9hdHRyaWJ1dGU+CisgICAgICAgICA8YXR0cmlidXRlIG5hbWU9ImlkIiB0eXBlPSJzdHJpbmciPgorICAgICAgICAgICAgPGFubm90YXRpb24+CisgICAgICAgICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KKyAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgorICAgICAgICAgICAgPC9hbm5vdGF0aW9uPgorICAgICAgICAgPC9hdHRyaWJ1dGU+CisgICAgICAgICA8YXR0cmlidXRlIG5hbWU9Im5hbWUiIHR5cGU9InN0cmluZyI+CisgICAgICAgICAgICA8YW5ub3RhdGlvbj4KKyAgICAgICAgICAgICAgIDxkb2N1bWVudGF0aW9uPgorICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICA8L2RvY3VtZW50YXRpb24+CisgICAgICAgICAgICAgICA8YXBwaW5mbz4KKyAgICAgICAgICAgICAgICAgIDxtZXRhLmF0dHJpYnV0ZSB0cmFuc2xhdGFibGU9InRydWUiLz4KKyAgICAgICAgICAgICAgIDwvYXBwaW5mbz4KKyAgICAgICAgICAgIDwvYW5ub3RhdGlvbj4KKyAgICAgICAgIDwvYXR0cmlidXRlPgorICAgICAgPC9jb21wbGV4VHlwZT4KKyAgIDwvZWxlbWVudD4KKworICAgPGFubm90YXRpb24+CisgICAgICA8YXBwaW5mbz4KKyAgICAgICAgIDxtZXRhLnNlY3Rpb24gdHlwZT0ic2luY2UiLz4KKyAgICAgIDwvYXBwaW5mbz4KKyAgICAgIDxkb2N1bWVudGF0aW9uPgorICAgICAgICAgW0VudGVyIHRoZSBmaXJzdCByZWxlYXNlIGluIHdoaWNoIHRoaXMgZXh0ZW5zaW9uIHBvaW50IGFwcGVhcnMuXQorICAgICAgPC9kb2N1bWVudGF0aW9uPgorICAgPC9hbm5vdGF0aW9uPgorCisgICA8YW5ub3RhdGlvbj4KKyAgICAgIDxhcHBpbmZvPgorICAgICAgICAgPG1ldGEuc2VjdGlvbiB0eXBlPSJleGFtcGxlcyIvPgorICAgICAgPC9hcHBpbmZvPgorICAgICAgPGRvY3VtZW50YXRpb24+CisgICAgICAgICBbRW50ZXIgZXh0ZW5zaW9uIHBvaW50IHVzYWdlIGV4YW1wbGUgaGVyZS5dCisgICAgICA8L2RvY3VtZW50YXRpb24+CisgICA8L2Fubm90YXRpb24+CisKKyAgIDxhbm5vdGF0aW9uPgorICAgICAgPGFwcGluZm8+CisgICAgICAgICA8bWV0YS5zZWN0aW9uIHR5cGU9ImFwaWluZm8iLz4KKyAgICAgIDwvYXBwaW5mbz4KKyAgICAgIDxkb2N1bWVudGF0aW9uPgorICAgICAgICAgW0VudGVyIEFQSSBpbmZvcm1hdGlvbiBoZXJlLl0KKyAgICAgIDwvZG9jdW1lbnRhdGlvbj4KKyAgIDwvYW5ub3RhdGlvbj4KKworICAgPGFubm90YXRpb24+CisgICAgICA8YXBwaW5mbz4KKyAgICAgICAgIDxtZXRhLnNlY3Rpb24gdHlwZT0iaW1wbGVtZW50YXRpb24iLz4KKyAgICAgIDwvYXBwaW5mbz4KKyAgICAgIDxkb2N1bWVudGF0aW9uPgorICAgICAgICAgW0VudGVyIGluZm9ybWF0aW9uIGFib3V0IHN1cHBsaWVkIGltcGxlbWVudGF0aW9uIG9mIHRoaXMgZXh0ZW5zaW9uIHBvaW50Ll0KKyAgICAgIDwvZG9jdW1lbnRhdGlvbj4KKyAgIDwvYW5ub3RhdGlvbj4KKworCis8L3NjaGVtYT4KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NjaGVtYS9zY2VuYXJpby5leHNkIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc2NoZW1hL3NjZW5hcmlvLmV4c2QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjVlOGNiOQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NjaGVtYS9zY2VuYXJpby5leHNkCkBAIC0wLDAgKzEsOTUgQEAKKzw/eG1sIHZlcnNpb249JzEuMCcgZW5jb2Rpbmc9J1VURi04Jz8+Cis8IS0tIFNjaGVtYSBmaWxlIHdyaXR0ZW4gYnkgUERFIC0tPgorPHNjaGVtYSB0YXJnZXROYW1lc3BhY2U9ImNvbS5pYm0uYWxtYWRlbi5zdGVtLmNvcmUiPgorPGFubm90YXRpb24+CisgICAgICA8YXBwSW5mbz4KKyAgICAgICAgIDxtZXRhLnNjaGVtYSBwbHVnaW49ImNvbS5pYm0uYWxtYWRlbi5zdGVtLmNvcmUiIGlkPSJzY2VuYXJpbyIgbmFtZT0iU1RFTSBzY2VuYXJpbyBleHRlbnNpb24gcG9pbnQiLz4KKyAgICAgIDwvYXBwSW5mbz4KKyAgICAgIDxkb2N1bWVudGF0aW9uPgorICAgICAgICAgVGhlIFNURU0gc3lzdGVtIGNhbiBpbmNvcnBvcmF0ZSBtb2RlbGluZyBTY2VuYXJpbyBkZWZpbml0aW9ucyBwcm92aWRlZCBieSBwbHVnLWlucy4gIEEgcGx1Zy1pbiB0aGF0IGV4dGVuZHMgdGhlICZxdW90O3NjZW5hcmlvJnF1b3Q7IGV4dGVuc2lvbiBwb2ludCBwcm92aWRlcyB0aGUgZGVmaW5pdGlvbiBvZiBhIG1vZGVsaW5nIFNjZW5hcmlvLiAgSXQgY2FuIGFsc28gZGVmaW5lICZxdW90O2NhdGFnb3JpZXMmcXVvdDsgaW50byB3aGljaCBTY2VuYXJpb3MgY2FuIGJlIGdyb3VwZWQuCisgICAgICA8L2RvY3VtZW50YXRpb24+CisgICA8L2Fubm90YXRpb24+CisKKyAgIDxpbmNsdWRlIHNjaGVtYUxvY2F0aW9uPSJkdWJsaW5fY29yZS5leHNkIi8+CisKKyAgIDxpbmNsdWRlIHNjaGVtYUxvY2F0aW9uPSJzdGVtX2NhdGVnb3J5LmV4c2QiLz4KKworICAgPGVsZW1lbnQgbmFtZT0iZXh0ZW5zaW9uIj4KKyAgICAgIDxjb21wbGV4VHlwZT4KKyAgICAgICAgIDxjaG9pY2U+CisgICAgICAgICAgICA8ZWxlbWVudCByZWY9InN0ZW1fY2F0ZWdvcnkiIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KKyAgICAgICAgICAgIDxlbGVtZW50IHJlZj0iZHVibGluX2NvcmUiIG1pbk9jY3Vycz0iMSIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KKyAgICAgICAgIDwvY2hvaWNlPgorICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJwb2ludCIgdHlwZT0ic3RyaW5nIiB1c2U9InJlcXVpcmVkIj4KKyAgICAgICAgICAgIDxhbm5vdGF0aW9uPgorICAgICAgICAgICAgICAgPGRvY3VtZW50YXRpb24+CisgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgIDwvZG9jdW1lbnRhdGlvbj4KKyAgICAgICAgICAgIDwvYW5ub3RhdGlvbj4KKyAgICAgICAgIDwvYXR0cmlidXRlPgorICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJpZCIgdHlwZT0ic3RyaW5nIj4KKyAgICAgICAgICAgIDxhbm5vdGF0aW9uPgorICAgICAgICAgICAgICAgPGRvY3VtZW50YXRpb24+CisgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgIDwvZG9jdW1lbnRhdGlvbj4KKyAgICAgICAgICAgIDwvYW5ub3RhdGlvbj4KKyAgICAgICAgIDwvYXR0cmlidXRlPgorICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJuYW1lIiB0eXBlPSJzdHJpbmciPgorICAgICAgICAgICAgPGFubm90YXRpb24+CisgICAgICAgICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KKyAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgorICAgICAgICAgICAgICAgPGFwcEluZm8+CisgICAgICAgICAgICAgICAgICA8bWV0YS5hdHRyaWJ1dGUgdHJhbnNsYXRhYmxlPSJ0cnVlIi8+CisgICAgICAgICAgICAgICA8L2FwcEluZm8+CisgICAgICAgICAgICA8L2Fubm90YXRpb24+CisgICAgICAgICA8L2F0dHJpYnV0ZT4KKyAgICAgIDwvY29tcGxleFR5cGU+CisgICA8L2VsZW1lbnQ+CisKKyAgIDxhbm5vdGF0aW9uPgorICAgICAgPGFwcEluZm8+CisgICAgICAgICA8bWV0YS5zZWN0aW9uIHR5cGU9InNpbmNlIi8+CisgICAgICA8L2FwcEluZm8+CisgICAgICA8ZG9jdW1lbnRhdGlvbj4KKyAgICAgICAgIDAuMC4wCisgICAgICA8L2RvY3VtZW50YXRpb24+CisgICA8L2Fubm90YXRpb24+CisKKyAgIDxhbm5vdGF0aW9uPgorICAgICAgPGFwcEluZm8+CisgICAgICAgICA8bWV0YS5zZWN0aW9uIHR5cGU9ImV4YW1wbGVzIi8+CisgICAgICA8L2FwcEluZm8+CisgICAgICA8ZG9jdW1lbnRhdGlvbj4KKyAgICAgICAgIFtFbnRlciBleHRlbnNpb24gcG9pbnQgdXNhZ2UgZXhhbXBsZSBoZXJlLl0KKyAgICAgIDwvZG9jdW1lbnRhdGlvbj4KKyAgIDwvYW5ub3RhdGlvbj4KKworICAgPGFubm90YXRpb24+CisgICAgICA8YXBwSW5mbz4KKyAgICAgICAgIDxtZXRhLnNlY3Rpb24gdHlwZT0iYXBpSW5mbyIvPgorICAgICAgPC9hcHBJbmZvPgorICAgICAgPGRvY3VtZW50YXRpb24+CisgICAgICAgICBOb25lLgorICAgICAgPC9kb2N1bWVudGF0aW9uPgorICAgPC9hbm5vdGF0aW9uPgorCisgICA8YW5ub3RhdGlvbj4KKyAgICAgIDxhcHBJbmZvPgorICAgICAgICAgPG1ldGEuc2VjdGlvbiB0eXBlPSJpbXBsZW1lbnRhdGlvbiIvPgorICAgICAgPC9hcHBJbmZvPgorICAgICAgPGRvY3VtZW50YXRpb24+CisgICAgICAgICBOb25lLgorICAgICAgPC9kb2N1bWVudGF0aW9uPgorICAgPC9hbm5vdGF0aW9uPgorCisgICA8YW5ub3RhdGlvbj4KKyAgICAgIDxhcHBJbmZvPgorICAgICAgICAgPG1ldGEuc2VjdGlvbiB0eXBlPSJjb3B5cmlnaHQiLz4KKyAgICAgIDwvYXBwSW5mbz4KKyAgICAgIDxkb2N1bWVudGF0aW9uPgorICAgICAgICAgCisgICAgICA8L2RvY3VtZW50YXRpb24+CisgICA8L2Fubm90YXRpb24+CisKKzwvc2NoZW1hPgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc2NoZW1hL3NlcXVlbmNlci5leHNkIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc2NoZW1hL3NlcXVlbmNlci5leHNkCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU1OGE4YzAKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zY2hlbWEvc2VxdWVuY2VyLmV4c2QKQEAgLTAsMCArMSwxMDQgQEAKKzw/eG1sIHZlcnNpb249JzEuMCcgZW5jb2Rpbmc9J1VURi04Jz8+Cis8IS0tIFNjaGVtYSBmaWxlIHdyaXR0ZW4gYnkgUERFIC0tPgorPHNjaGVtYSB0YXJnZXROYW1lc3BhY2U9ImNvbS5pYm0uYWxtYWRlbi5zdGVtLmNvcmUiPgorPGFubm90YXRpb24+CisgICAgICA8YXBwSW5mbz4KKyAgICAgICAgIDxtZXRhLnNjaGVtYSBwbHVnaW49ImNvbS5pYm0uYWxtYWRlbi5zdGVtLmNvcmUiIGlkPSJzZXF1ZW5jZXIiIG5hbWU9IlNURU0gc2VxdWVuY2VyIGV4dGVuc2lvbiBwb2ludCIvPgorICAgICAgPC9hcHBJbmZvPgorICAgICAgPGRvY3VtZW50YXRpb24+CisgICAgICAgICBUaGUgU1RFTSBzeXN0ZW0gYWxsb3dzICZxdW90O3NlcXVlbmNlcnMmcXVvdDsgdG8gY29udHJvbCBjaGFuZ2VzIHRvIHRoZSB1bmRlcmx5aW5nIGdyYXBoLiBBIHBsdWctaW4gdGhhdCBleHRlbmRzIHRoZSAmcXVvdDtzZXF1ZW5jZXImcXVvdDsgZXh0ZW5zaW9uIHBvaW50IHByb3ZpZGVzIGFuIGltcGxlbWVudGF0aW9uIG9mIGEgc2VxdWVuY2VyLgorICAgICAgPC9kb2N1bWVudGF0aW9uPgorICAgPC9hbm5vdGF0aW9uPgorCisgICA8aW5jbHVkZSBzY2hlbWFMb2NhdGlvbj0ic3RlbV9jYXRlZ29yeS5leHNkIi8+CisKKyAgIDxpbmNsdWRlIHNjaGVtYUxvY2F0aW9uPSJkdWJsaW5fY29yZS5leHNkIi8+CisKKyAgIDxlbGVtZW50IG5hbWU9ImV4dGVuc2lvbiI+CisgICAgICA8Y29tcGxleFR5cGU+CisgICAgICAgICA8c2VxdWVuY2U+CisgICAgICAgICAgICA8ZWxlbWVudCByZWY9InN0ZW1fY2F0ZWdvcnkiIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KKyAgICAgICAgICAgIDxlbGVtZW50IHJlZj0iZHVibGluX2NvcmUiIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KKyAgICAgICAgIDwvc2VxdWVuY2U+CisgICAgICAgICA8YXR0cmlidXRlIG5hbWU9InBvaW50IiB0eXBlPSJzdHJpbmciIHVzZT0icmVxdWlyZWQiPgorICAgICAgICAgICAgPGFubm90YXRpb24+CisgICAgICAgICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KKyAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgorICAgICAgICAgICAgPC9hbm5vdGF0aW9uPgorICAgICAgICAgPC9hdHRyaWJ1dGU+CisgICAgICAgICA8YXR0cmlidXRlIG5hbWU9ImlkIiB0eXBlPSJzdHJpbmciPgorICAgICAgICAgICAgPGFubm90YXRpb24+CisgICAgICAgICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KKyAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgorICAgICAgICAgICAgPC9hbm5vdGF0aW9uPgorICAgICAgICAgPC9hdHRyaWJ1dGU+CisgICAgICAgICA8YXR0cmlidXRlIG5hbWU9Im5hbWUiIHR5cGU9InN0cmluZyI+CisgICAgICAgICAgICA8YW5ub3RhdGlvbj4KKyAgICAgICAgICAgICAgIDxkb2N1bWVudGF0aW9uPgorICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICA8L2RvY3VtZW50YXRpb24+CisgICAgICAgICAgICAgICA8YXBwSW5mbz4KKyAgICAgICAgICAgICAgICAgIDxtZXRhLmF0dHJpYnV0ZSB0cmFuc2xhdGFibGU9InRydWUiLz4KKyAgICAgICAgICAgICAgIDwvYXBwSW5mbz4KKyAgICAgICAgICAgIDwvYW5ub3RhdGlvbj4KKyAgICAgICAgIDwvYXR0cmlidXRlPgorICAgICAgPC9jb21wbGV4VHlwZT4KKyAgIDwvZWxlbWVudD4KKworICAgPGFubm90YXRpb24+CisgICAgICA8YXBwSW5mbz4KKyAgICAgICAgIDxtZXRhLnNlY3Rpb24gdHlwZT0ic2luY2UiLz4KKyAgICAgIDwvYXBwSW5mbz4KKyAgICAgIDxkb2N1bWVudGF0aW9uPgorICAgICAgICAgMC4wLjAKKyAgICAgIDwvZG9jdW1lbnRhdGlvbj4KKyAgIDwvYW5ub3RhdGlvbj4KKworICAgPGFubm90YXRpb24+CisgICAgICA8YXBwSW5mbz4KKyAgICAgICAgIDxtZXRhLnNlY3Rpb24gdHlwZT0iZXhhbXBsZXMiLz4KKyAgICAgIDwvYXBwSW5mbz4KKyAgICAgIDxkb2N1bWVudGF0aW9uPgorICAgICAgICAgVGhlIGZvbGxvd2luZyBpcyBhbiBleGFtcGxlIG9mIHRoZSBzZXF1ZW5jZXIgZXh0ZW5zaW9uIHBvaW50IHVzYWdlLgorJmx0O3AmZ3Q7CismbHQ7cHJlJmd0OworICZsdDtleHRlbnNpb24gcG9pbnQ9JnF1b3Q7Y29tLmlibS5hbG1hZGVuLnN0ZW0uY29yZS5vYnNlcnZlciZxdW90OyZndDsKKyAgJmx0O3NlcXVlbmNlcgorICAgbmFtZT0mcXVvdDtTZXF1ZW50aWFsIFNlcXVlbmNlciZxdW90OworICAgY2xhc3M9JnF1b3Q7Y29tLmlibS5hbG1hZGVuLnN0ZW0uc2VxdWVuY2VyLlNlcXVlbnRpYWxTZXF1ZW5jZXImcXVvdDsgLyZndDsKKyAmbHQ7L2V4dGVuc2lvbiZndDsKKyZsdDsvcHJlJmd0OworJmx0Oy9wJmd0OworICAgICAgPC9kb2N1bWVudGF0aW9uPgorICAgPC9hbm5vdGF0aW9uPgorCisgICA8YW5ub3RhdGlvbj4KKyAgICAgIDxhcHBJbmZvPgorICAgICAgICAgPG1ldGEuc2VjdGlvbiB0eXBlPSJhcGlJbmZvIi8+CisgICAgICA8L2FwcEluZm8+CisgICAgICA8ZG9jdW1lbnRhdGlvbj4KKyAgICAgICAgIFtFbnRlciBBUEkgaW5mb3JtYXRpb24gaGVyZS5dCisgICAgICA8L2RvY3VtZW50YXRpb24+CisgICA8L2Fubm90YXRpb24+CisKKyAgIDxhbm5vdGF0aW9uPgorICAgICAgPGFwcEluZm8+CisgICAgICAgICA8bWV0YS5zZWN0aW9uIHR5cGU9ImltcGxlbWVudGF0aW9uIi8+CisgICAgICA8L2FwcEluZm8+CisgICAgICA8ZG9jdW1lbnRhdGlvbj4KKyAgICAgICAgIFtFbnRlciBpbmZvcm1hdGlvbiBhYm91dCBzdXBwbGllZCBpbXBsZW1lbnRhdGlvbiBvZiB0aGlzIGV4dGVuc2lvbiBwb2ludC5dCisgICAgICA8L2RvY3VtZW50YXRpb24+CisgICA8L2Fubm90YXRpb24+CisKKyAgIDxhbm5vdGF0aW9uPgorICAgICAgPGFwcEluZm8+CisgICAgICAgICA8bWV0YS5zZWN0aW9uIHR5cGU9ImNvcHlyaWdodCIvPgorICAgICAgPC9hcHBJbmZvPgorICAgICAgPGRvY3VtZW50YXRpb24+CisgICAgICAgICAKKyAgICAgIDwvZG9jdW1lbnRhdGlvbj4KKyAgIDwvYW5ub3RhdGlvbj4KKworPC9zY2hlbWE+CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zY2hlbWEvc29sdmVyLmV4c2QgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zY2hlbWEvc29sdmVyLmV4c2QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDJiZmYyZQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NjaGVtYS9zb2x2ZXIuZXhzZApAQCAtMCwwICsxLDEwNSBAQAorPD94bWwgdmVyc2lvbj0nMS4wJyBlbmNvZGluZz0nVVRGLTgnPz4NCis8IS0tIFNjaGVtYSBmaWxlIHdyaXR0ZW4gYnkgUERFIC0tPg0KKzxzY2hlbWEgdGFyZ2V0TmFtZXNwYWNlPSJjb20uaWJtLmFsbWFkZW4uc3RlbS5jb3JlIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiPg0KKzxhbm5vdGF0aW9uPg0KKyAgICAgIDxhcHBpbmZvPg0KKyAgICAgICAgIDxtZXRhLnNjaGVtYSBwbHVnaW49ImNvbS5pYm0uYWxtYWRlbi5zdGVtLmNvcmUiIGlkPSJzb2x2ZXIiIG5hbWU9IiVFUF9Tb2x2ZXIiLz4NCisgICAgICA8L2FwcGluZm8+DQorICAgICAgPGRvY3VtZW50YXRpb24+DQorICAgICAgICAgW0VudGVyIGRlc2NyaXB0aW9uIG9mIHRoaXMgZXh0ZW5zaW9uIHBvaW50Ll0NCisgICAgICA8L2RvY3VtZW50YXRpb24+DQorICAgPC9hbm5vdGF0aW9uPg0KKw0KKyAgIDxpbmNsdWRlIHNjaGVtYUxvY2F0aW9uPSJzY2hlbWE6Ly9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc2NoZW1hL2R1Ymxpbl9jb3JlLmV4c2QiLz4NCisNCisgICA8ZWxlbWVudCBuYW1lPSJleHRlbnNpb24iPg0KKyAgICAgIDxhbm5vdGF0aW9uPg0KKyAgICAgICAgIDxhcHBpbmZvPg0KKyAgICAgICAgICAgIDxtZXRhLmVsZW1lbnQgLz4NCisgICAgICAgICA8L2FwcGluZm8+DQorICAgICAgPC9hbm5vdGF0aW9uPg0KKyAgICAgIDxjb21wbGV4VHlwZT4NCisgICAgICAgICA8c2VxdWVuY2U+DQorICAgICAgICAgICAgPGVsZW1lbnQgcmVmPSJjbGFzc2RlZiIvPg0KKyAgICAgICAgICAgIDxlbGVtZW50IHJlZj0iZHVibGluX2NvcmUiLz4NCisgICAgICAgICA8L3NlcXVlbmNlPg0KKyAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0icG9pbnQiIHR5cGU9InN0cmluZyIgdXNlPSJyZXF1aXJlZCI+DQorICAgICAgICAgICAgPGFubm90YXRpb24+DQorICAgICAgICAgICAgICAgPGRvY3VtZW50YXRpb24+DQorICAgICAgICAgICAgICAgICAgDQorICAgICAgICAgICAgICAgPC9kb2N1bWVudGF0aW9uPg0KKyAgICAgICAgICAgIDwvYW5ub3RhdGlvbj4NCisgICAgICAgICA8L2F0dHJpYnV0ZT4NCisgICAgICAgICA8YXR0cmlidXRlIG5hbWU9ImlkIiB0eXBlPSJzdHJpbmciPg0KKyAgICAgICAgICAgIDxhbm5vdGF0aW9uPg0KKyAgICAgICAgICAgICAgIDxkb2N1bWVudGF0aW9uPg0KKyAgICAgICAgICAgICAgICAgIA0KKyAgICAgICAgICAgICAgIDwvZG9jdW1lbnRhdGlvbj4NCisgICAgICAgICAgICA8L2Fubm90YXRpb24+DQorICAgICAgICAgPC9hdHRyaWJ1dGU+DQorICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJuYW1lIiB0eXBlPSJzdHJpbmciPg0KKyAgICAgICAgICAgIDxhbm5vdGF0aW9uPg0KKyAgICAgICAgICAgICAgIDxkb2N1bWVudGF0aW9uPg0KKyAgICAgICAgICAgICAgICAgIA0KKyAgICAgICAgICAgICAgIDwvZG9jdW1lbnRhdGlvbj4NCisgICAgICAgICAgICAgICA8YXBwaW5mbz4NCisgICAgICAgICAgICAgICAgICA8bWV0YS5hdHRyaWJ1dGUgdHJhbnNsYXRhYmxlPSJ0cnVlIi8+DQorICAgICAgICAgICAgICAgPC9hcHBpbmZvPg0KKyAgICAgICAgICAgIDwvYW5ub3RhdGlvbj4NCisgICAgICAgICA8L2F0dHJpYnV0ZT4NCisgICAgICA8L2NvbXBsZXhUeXBlPg0KKyAgIDwvZWxlbWVudD4NCisNCisgICA8ZWxlbWVudCBuYW1lPSJjbGFzc2RlZiI+DQorICAgICAgPGNvbXBsZXhUeXBlPg0KKyAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0iY2xhc3MiIHR5cGU9InN0cmluZyIgdXNlPSJyZXF1aXJlZCI+DQorICAgICAgICAgICAgPGFubm90YXRpb24+DQorICAgICAgICAgICAgICAgPGRvY3VtZW50YXRpb24+DQorICAgICAgICAgICAgICAgICAgDQorICAgICAgICAgICAgICAgPC9kb2N1bWVudGF0aW9uPg0KKyAgICAgICAgICAgICAgIDxhcHBpbmZvPg0KKyAgICAgICAgICAgICAgICAgIDxtZXRhLmF0dHJpYnV0ZSBraW5kPSJqYXZhIiBiYXNlZE9uPSJvcmcuZWNsaXBzZS5zdGVtLnNvbHZlcnMuaW1wbC5Tb2x2ZXJJbXBsOm9yZy5lY2xpcHNlLnN0ZW0uc29sdmVycy5Tb2x2ZXIiLz4NCisgICAgICAgICAgICAgICA8L2FwcGluZm8+DQorICAgICAgICAgICAgPC9hbm5vdGF0aW9uPg0KKyAgICAgICAgIDwvYXR0cmlidXRlPg0KKyAgICAgIDwvY29tcGxleFR5cGU+DQorICAgPC9lbGVtZW50Pg0KKw0KKyAgIDxhbm5vdGF0aW9uPg0KKyAgICAgIDxhcHBpbmZvPg0KKyAgICAgICAgIDxtZXRhLnNlY3Rpb24gdHlwZT0ic2luY2UiLz4NCisgICAgICA8L2FwcGluZm8+DQorICAgICAgPGRvY3VtZW50YXRpb24+DQorICAgICAgICAgW0VudGVyIHRoZSBmaXJzdCByZWxlYXNlIGluIHdoaWNoIHRoaXMgZXh0ZW5zaW9uIHBvaW50IGFwcGVhcnMuXQ0KKyAgICAgIDwvZG9jdW1lbnRhdGlvbj4NCisgICA8L2Fubm90YXRpb24+DQorDQorICAgPGFubm90YXRpb24+DQorICAgICAgPGFwcGluZm8+DQorICAgICAgICAgPG1ldGEuc2VjdGlvbiB0eXBlPSJleGFtcGxlcyIvPg0KKyAgICAgIDwvYXBwaW5mbz4NCisgICAgICA8ZG9jdW1lbnRhdGlvbj4NCisgICAgICAgICBbRW50ZXIgZXh0ZW5zaW9uIHBvaW50IHVzYWdlIGV4YW1wbGUgaGVyZS5dDQorICAgICAgPC9kb2N1bWVudGF0aW9uPg0KKyAgIDwvYW5ub3RhdGlvbj4NCisNCisgICA8YW5ub3RhdGlvbj4NCisgICAgICA8YXBwaW5mbz4NCisgICAgICAgICA8bWV0YS5zZWN0aW9uIHR5cGU9ImFwaWluZm8iLz4NCisgICAgICA8L2FwcGluZm8+DQorICAgICAgPGRvY3VtZW50YXRpb24+DQorICAgICAgICAgW0VudGVyIEFQSSBpbmZvcm1hdGlvbiBoZXJlLl0NCisgICAgICA8L2RvY3VtZW50YXRpb24+DQorICAgPC9hbm5vdGF0aW9uPg0KKw0KKyAgIDxhbm5vdGF0aW9uPg0KKyAgICAgIDxhcHBpbmZvPg0KKyAgICAgICAgIDxtZXRhLnNlY3Rpb24gdHlwZT0iaW1wbGVtZW50YXRpb24iLz4NCisgICAgICA8L2FwcGluZm8+DQorICAgICAgPGRvY3VtZW50YXRpb24+DQorICAgICAgICAgW0VudGVyIGluZm9ybWF0aW9uIGFib3V0IHN1cHBsaWVkIGltcGxlbWVudGF0aW9uIG9mIHRoaXMgZXh0ZW5zaW9uIHBvaW50Ll0NCisgICAgICA8L2RvY3VtZW50YXRpb24+DQorICAgPC9hbm5vdGF0aW9uPg0KKw0KKw0KKzwvc2NoZW1hPg0KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NjaGVtYS9zdGVtX2NhdGVnb3J5LmV4c2QgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zY2hlbWEvc3RlbV9jYXRlZ29yeS5leHNkCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmExM2MwNWEKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zY2hlbWEvc3RlbV9jYXRlZ29yeS5leHNkCkBAIC0wLDAgKzEsODQgQEAKKzw/eG1sIHZlcnNpb249JzEuMCcgZW5jb2Rpbmc9J1VURi04Jz8+Cis8IS0tIFNjaGVtYSBmaWxlIHdyaXR0ZW4gYnkgUERFIC0tPgorPHNjaGVtYSB0YXJnZXROYW1lc3BhY2U9ImNvbS5pYm0uYWxtYWRlbi5zdGVtLmNvcmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSI+Cis8YW5ub3RhdGlvbj4KKyAgICAgIDxhcHBpbmZvPgorICAgICAgICAgPG1ldGEuc2NoZW1hIHBsdWdpbj0iY29tLmlibS5hbG1hZGVuLnN0ZW0uY29yZSIgaWQ9InN0ZW1fY2F0ZWdvcnkiIG5hbWU9IlNURU0gQ2F0ZWdvcnkiLz4KKyAgICAgIDwvYXBwaW5mbz4KKyAgICAgIDxkb2N1bWVudGF0aW9uPgorICAgICAgICAgW0VudGVyIGRlc2NyaXB0aW9uIG9mIHRoaXMgZXh0ZW5zaW9uIHBvaW50Ll0KKyAgICAgIDwvZG9jdW1lbnRhdGlvbj4KKyAgIDwvYW5ub3RhdGlvbj4KKworICAgPGVsZW1lbnQgbmFtZT0ic3RlbV9jYXRlZ29yeSI+CisgICAgICA8YW5ub3RhdGlvbj4KKyAgICAgICAgIDxkb2N1bWVudGF0aW9uPgorICAgICAgICAgICAgQSBjYXRlZ29yeSBpcyBhIGhpZXJhcmNoaWNhbCBncm91cCB3aXRoIGEgcGFyZW50IGFuZCBjaGlsZGVybi4gIEl0IGlzIG1lYW50IHRvIG9yZ2FuaXplIElkZW50aWZpYWJsZSByZXNvdXJjZXMgYW5kIG90aGVyIGNvbXBvbmVudHMuCisgICAgICAgICA8L2RvY3VtZW50YXRpb24+CisgICAgICA8L2Fubm90YXRpb24+CisgICAgICA8Y29tcGxleFR5cGU+CisgICAgICAgICA8YXR0cmlidXRlIG5hbWU9ImlkIiB0eXBlPSJzdHJpbmciIHVzZT0icmVxdWlyZWQiPgorICAgICAgICAgICAgPGFubm90YXRpb24+CisgICAgICAgICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KKyAgICAgICAgICAgICAgICAgIFRoZSB1bmlxdWUgaWRlbnRpZmllciB0aGUgZGVmaW5lcyBhIFNURU0gY2F0ZWdvcnkgaW50byB3aGljaCBhbiBJZGVudGlmaWFibGUgY2FuIGJlIGdyb3VwZWQuCisgICAgICAgICAgICAgICA8L2RvY3VtZW50YXRpb24+CisgICAgICAgICAgICA8L2Fubm90YXRpb24+CisgICAgICAgICA8L2F0dHJpYnV0ZT4KKyAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0ibmFtZSIgdHlwZT0ic3RyaW5nIiB1c2U9InJlcXVpcmVkIj4KKyAgICAgICAgICAgIDxhbm5vdGF0aW9uPgorICAgICAgICAgICAgICAgPGRvY3VtZW50YXRpb24+CisgICAgICAgICAgICAgICAgICBUaGUgdHJhbnNsYXRhYmxlIG5hbWUgb2YgdGhlIGNhdGVnb3J5LgorICAgICAgICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgorICAgICAgICAgICAgICAgPGFwcGluZm8+CisgICAgICAgICAgICAgICAgICA8bWV0YS5hdHRyaWJ1dGUgdHJhbnNsYXRhYmxlPSJ0cnVlIi8+CisgICAgICAgICAgICAgICA8L2FwcGluZm8+CisgICAgICAgICAgICA8L2Fubm90YXRpb24+CisgICAgICAgICA8L2F0dHJpYnV0ZT4KKyAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0icGFyZW50X2lkIiB0eXBlPSJzdHJpbmciIHVzZT0iZGVmYXVsdCIgdmFsdWU9Ii8iPgorICAgICAgICAgICAgPGFubm90YXRpb24+CisgICAgICAgICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KKyAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgorICAgICAgICAgICAgPC9hbm5vdGF0aW9uPgorICAgICAgICAgPC9hdHRyaWJ1dGU+CisgICAgICA8L2NvbXBsZXhUeXBlPgorICAgPC9lbGVtZW50PgorCisgICA8YW5ub3RhdGlvbj4KKyAgICAgIDxhcHBpbmZvPgorICAgICAgICAgPG1ldGEuc2VjdGlvbiB0eXBlPSJzaW5jZSIvPgorICAgICAgPC9hcHBpbmZvPgorICAgICAgPGRvY3VtZW50YXRpb24+CisgICAgICAgICBbRW50ZXIgdGhlIGZpcnN0IHJlbGVhc2UgaW4gd2hpY2ggdGhpcyBleHRlbnNpb24gcG9pbnQgYXBwZWFycy5dCisgICAgICA8L2RvY3VtZW50YXRpb24+CisgICA8L2Fubm90YXRpb24+CisKKyAgIDxhbm5vdGF0aW9uPgorICAgICAgPGFwcGluZm8+CisgICAgICAgICA8bWV0YS5zZWN0aW9uIHR5cGU9ImV4YW1wbGVzIi8+CisgICAgICA8L2FwcGluZm8+CisgICAgICA8ZG9jdW1lbnRhdGlvbj4KKyAgICAgICAgIFtFbnRlciBleHRlbnNpb24gcG9pbnQgdXNhZ2UgZXhhbXBsZSBoZXJlLl0KKyAgICAgIDwvZG9jdW1lbnRhdGlvbj4KKyAgIDwvYW5ub3RhdGlvbj4KKworICAgPGFubm90YXRpb24+CisgICAgICA8YXBwaW5mbz4KKyAgICAgICAgIDxtZXRhLnNlY3Rpb24gdHlwZT0iYXBpSW5mbyIvPgorICAgICAgPC9hcHBpbmZvPgorICAgICAgPGRvY3VtZW50YXRpb24+CisgICAgICAgICBbRW50ZXIgQVBJIGluZm9ybWF0aW9uIGhlcmUuXQorICAgICAgPC9kb2N1bWVudGF0aW9uPgorICAgPC9hbm5vdGF0aW9uPgorCisgICA8YW5ub3RhdGlvbj4KKyAgICAgIDxhcHBpbmZvPgorICAgICAgICAgPG1ldGEuc2VjdGlvbiB0eXBlPSJpbXBsZW1lbnRhdGlvbiIvPgorICAgICAgPC9hcHBpbmZvPgorICAgICAgPGRvY3VtZW50YXRpb24+CisgICAgICAgICBbRW50ZXIgaW5mb3JtYXRpb24gYWJvdXQgc3VwcGxpZWQgaW1wbGVtZW50YXRpb24gb2YgdGhpcyBleHRlbnNpb24gcG9pbnQuXQorICAgICAgPC9kb2N1bWVudGF0aW9uPgorICAgPC9hbm5vdGF0aW9uPgorCisKKzwvc2NoZW1hPgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc2NoZW1hL3RyaWdnZXIuZXhzZCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NjaGVtYS90cmlnZ2VyLmV4c2QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjFlYjg1MgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NjaGVtYS90cmlnZ2VyLmV4c2QKQEAgLTAsMCArMSw4OCBAQAorPD94bWwgdmVyc2lvbj0nMS4wJyBlbmNvZGluZz0nVVRGLTgnPz4KKzwhLS0gU2NoZW1hIGZpbGUgd3JpdHRlbiBieSBQREUgLS0+Cis8c2NoZW1hIHRhcmdldE5hbWVzcGFjZT0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiPgorPGFubm90YXRpb24+CisgICAgICA8YXBwaW5mbz4KKyAgICAgICAgIDxtZXRhLnNjaGVtYSBwbHVnaW49Im9yZy5lY2xpcHNlLnN0ZW0uY29yZSIgaWQ9InRyaWdnZXIiIG5hbWU9IiVFUF9UcmlnZ2VyIi8+CisgICAgICA8L2FwcGluZm8+CisgICAgICA8ZG9jdW1lbnRhdGlvbj4KKyAgICAgICAgIFRoZSBTVEVNIHN5c3RlbSBjYW4gaW5jb3Jwb3JhdGUgVHJpZ2dlciBkZWZpbml0aW9ucyBwcm92aWRlZCBieSBwbHVnLWlucy4gIEEgcGx1Zy1pbiB0aGF0IGV4dGVuZHMgdGhlICZxdW90O3RyaWdnZXImcXVvdDsgZXh0ZW5zaW9uIHBvaW50IHByb3ZpZGVzIHRoZSBkZWZpbml0aW9uIG9mIGEgVHJpZ2dlci4gIEl0IGNhbiBhbHNvIGRlZmluZSAmcXVvdDtjYXRhZ29yaWVzJnF1b3Q7IGludG8gd2hpY2ggVHJpZ2dlcnMgY2FuIGJlIGdyb3VwZWQuCisgICAgICA8L2RvY3VtZW50YXRpb24+CisgICA8L2Fubm90YXRpb24+CisKKyAgIDxpbmNsdWRlIHNjaGVtYUxvY2F0aW9uPSJkdWJsaW5fY29yZS5leHNkIi8+CisKKyAgIDxpbmNsdWRlIHNjaGVtYUxvY2F0aW9uPSJzdGVtX2NhdGVnb3J5LmV4c2QiLz4KKworICAgPGVsZW1lbnQgbmFtZT0iZXh0ZW5zaW9uIj4KKyAgICAgIDxhbm5vdGF0aW9uPgorICAgICAgICAgPGFwcGluZm8+CisgICAgICAgICAgICA8bWV0YS5lbGVtZW50IC8+CisgICAgICAgICA8L2FwcGluZm8+CisgICAgICA8L2Fubm90YXRpb24+CisgICAgICA8Y29tcGxleFR5cGU+CisgICAgICAgICA8YXR0cmlidXRlIG5hbWU9InBvaW50IiB0eXBlPSJzdHJpbmciIHVzZT0icmVxdWlyZWQiPgorICAgICAgICAgICAgPGFubm90YXRpb24+CisgICAgICAgICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KKyAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgorICAgICAgICAgICAgPC9hbm5vdGF0aW9uPgorICAgICAgICAgPC9hdHRyaWJ1dGU+CisgICAgICAgICA8YXR0cmlidXRlIG5hbWU9ImlkIiB0eXBlPSJzdHJpbmciPgorICAgICAgICAgICAgPGFubm90YXRpb24+CisgICAgICAgICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KKyAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgorICAgICAgICAgICAgPC9hbm5vdGF0aW9uPgorICAgICAgICAgPC9hdHRyaWJ1dGU+CisgICAgICAgICA8YXR0cmlidXRlIG5hbWU9Im5hbWUiIHR5cGU9InN0cmluZyI+CisgICAgICAgICAgICA8YW5ub3RhdGlvbj4KKyAgICAgICAgICAgICAgIDxkb2N1bWVudGF0aW9uPgorICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICA8L2RvY3VtZW50YXRpb24+CisgICAgICAgICAgICAgICA8YXBwaW5mbz4KKyAgICAgICAgICAgICAgICAgIDxtZXRhLmF0dHJpYnV0ZSB0cmFuc2xhdGFibGU9InRydWUiLz4KKyAgICAgICAgICAgICAgIDwvYXBwaW5mbz4KKyAgICAgICAgICAgIDwvYW5ub3RhdGlvbj4KKyAgICAgICAgIDwvYXR0cmlidXRlPgorICAgICAgPC9jb21wbGV4VHlwZT4KKyAgIDwvZWxlbWVudD4KKworICAgPGFubm90YXRpb24+CisgICAgICA8YXBwaW5mbz4KKyAgICAgICAgIDxtZXRhLnNlY3Rpb24gdHlwZT0ic2luY2UiLz4KKyAgICAgIDwvYXBwaW5mbz4KKyAgICAgIDxkb2N1bWVudGF0aW9uPgorICAgICAgICAgW0VudGVyIHRoZSBmaXJzdCByZWxlYXNlIGluIHdoaWNoIHRoaXMgZXh0ZW5zaW9uIHBvaW50IGFwcGVhcnMuXQorICAgICAgPC9kb2N1bWVudGF0aW9uPgorICAgPC9hbm5vdGF0aW9uPgorCisgICA8YW5ub3RhdGlvbj4KKyAgICAgIDxhcHBpbmZvPgorICAgICAgICAgPG1ldGEuc2VjdGlvbiB0eXBlPSJleGFtcGxlcyIvPgorICAgICAgPC9hcHBpbmZvPgorICAgICAgPGRvY3VtZW50YXRpb24+CisgICAgICAgICBbRW50ZXIgZXh0ZW5zaW9uIHBvaW50IHVzYWdlIGV4YW1wbGUgaGVyZS5dCisgICAgICA8L2RvY3VtZW50YXRpb24+CisgICA8L2Fubm90YXRpb24+CisKKyAgIDxhbm5vdGF0aW9uPgorICAgICAgPGFwcGluZm8+CisgICAgICAgICA8bWV0YS5zZWN0aW9uIHR5cGU9ImFwaWluZm8iLz4KKyAgICAgIDwvYXBwaW5mbz4KKyAgICAgIDxkb2N1bWVudGF0aW9uPgorICAgICAgICAgW0VudGVyIEFQSSBpbmZvcm1hdGlvbiBoZXJlLl0KKyAgICAgIDwvZG9jdW1lbnRhdGlvbj4KKyAgIDwvYW5ub3RhdGlvbj4KKworICAgPGFubm90YXRpb24+CisgICAgICA8YXBwaW5mbz4KKyAgICAgICAgIDxtZXRhLnNlY3Rpb24gdHlwZT0iaW1wbGVtZW50YXRpb24iLz4KKyAgICAgIDwvYXBwaW5mbz4KKyAgICAgIDxkb2N1bWVudGF0aW9uPgorICAgICAgICAgW0VudGVyIGluZm9ybWF0aW9uIGFib3V0IHN1cHBsaWVkIGltcGxlbWVudGF0aW9uIG9mIHRoaXMgZXh0ZW5zaW9uIHBvaW50Ll0KKyAgICAgIDwvZG9jdW1lbnRhdGlvbj4KKyAgIDwvYW5ub3RhdGlvbj4KKworCis8L3NjaGVtYT4KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2FkYXB0ZXJzL2ZpbGUvRmlsZS5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vYWRhcHRlcnMvZmlsZS9GaWxlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmY5MzZlYQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2FkYXB0ZXJzL2ZpbGUvRmlsZS5qYXZhCkBAIC0wLDAgKzEsMjkgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDksMjAxMCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uYWRhcHRlcnMuZmlsZTsKKworaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUueG1pLlhNSVJlc291cmNlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uSWRlbnRpZmlhYmxlOworCisKK3B1YmxpYyBpbnRlcmZhY2UgRmlsZSAgeworCisJcHVibGljIFhNSVJlc291cmNlIGdldFJlc291cmNlKCk7CisJCisJcHVibGljIElkZW50aWZpYWJsZSBnZXRJZGVudGlmaWFibGUoKTsKKwkKKwlwdWJsaWMgdm9pZCBkZWxldGUoKSB0aHJvd3MgSU9FeGNlcHRpb247CisJCisJcHVibGljIHZvaWQgcmVuYW1lKFN0cmluZyBuZXduYW1lKSB0aHJvd3MgSU9FeGNlcHRpb247CisJCit9CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9hZGFwdGVycy9maWxlL0ZpbGVBZGFwdGVyLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9hZGFwdGVycy9maWxlL0ZpbGVBZGFwdGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjc1ZTZhYgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2FkYXB0ZXJzL2ZpbGUvRmlsZUFkYXB0ZXIuamF2YQpAQCAtMCwwICsxLDQxIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA5LDIwMTAgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmFkYXB0ZXJzLmZpbGU7CisKK2ltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuaW1wbC5BZGFwdGVySW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUueG1pLlhNSVJlc291cmNlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uSWRlbnRpZmlhYmxlOworCisKKworcHVibGljIGNsYXNzIEZpbGVBZGFwdGVyIGV4dGVuZHMgQWRhcHRlckltcGwgaW1wbGVtZW50cyBGaWxlIHsKKworCXB1YmxpYyBYTUlSZXNvdXJjZSBnZXRSZXNvdXJjZSgpIHsKKwkJLy8gT3ZlcnJpZGUKKwkJcmV0dXJuIG51bGw7CisJfQorCisJcHVibGljIHZvaWQgZGVsZXRlKCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKKwkJLy8gb3ZlcnJpZGUKKwl9CisKKwlwdWJsaWMgdm9pZCByZW5hbWUoU3RyaW5nIG5ld25hbWUpIHRocm93cyBJT0V4Y2VwdGlvbiB7CisJCS8vIG92ZXJyaWRlCisJfQorCisJcHVibGljIElkZW50aWZpYWJsZSBnZXRJZGVudGlmaWFibGUoKSB7CisJCS8vIG92ZXJyaWRlCisJCXJldHVybiBudWxsOworCX0KKwkKK30KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2FkYXB0ZXJzL2ZpbGUvRmlsZUFkYXB0ZXJGYWN0b3J5LmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9hZGFwdGVycy9maWxlL0ZpbGVBZGFwdGVyRmFjdG9yeS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ3YzM1ZTUKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9hZGFwdGVycy9maWxlL0ZpbGVBZGFwdGVyRmFjdG9yeS5qYXZhCkBAIC0wLDAgKzEsMjQgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDksMjAxMCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uYWRhcHRlcnMuZmlsZTsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JQWRhcHRlckZhY3Rvcnk7CisKKworYWJzdHJhY3QgcHVibGljIGNsYXNzIEZpbGVBZGFwdGVyRmFjdG9yeSBpbXBsZW1lbnRzIElBZGFwdGVyRmFjdG9yeSB7CisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSUFkYXB0ZXJGYWN0b3J5I2dldEFkYXB0ZXJMaXN0KCkKKwkgKi8KKwlAU3VwcHJlc3NXYXJuaW5ncygidW5jaGVja2VkIikKKwlwdWJsaWMgQ2xhc3NbXSBnZXRBZGFwdGVyTGlzdCgpIHsKKwkJcmV0dXJuIG5ldyBDbGFzc1tdIHsgRmlsZS5jbGFzcyB9OworCX0KK30KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2FkYXB0ZXJzL2ZpbGUvSWRlbnRpZmlhYmxlRmlsZUFkYXB0ZXIuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2FkYXB0ZXJzL2ZpbGUvSWRlbnRpZmlhYmxlRmlsZUFkYXB0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NDY1OTM5Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vYWRhcHRlcnMvZmlsZS9JZGVudGlmaWFibGVGaWxlQWRhcHRlci5qYXZhCkBAIC0wLDAgKzEsNDYgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDksMjAxMCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uYWRhcHRlcnMuZmlsZTsKKworaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUueG1pLlhNSVJlc291cmNlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS54bWkuaW1wbC5YTUlSZXNvdXJjZUltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5JZGVudGlmaWFibGU7CisKK3B1YmxpYyBjbGFzcyBJZGVudGlmaWFibGVGaWxlQWRhcHRlciBleHRlbmRzIEZpbGVBZGFwdGVyIHsKKworCUBPdmVycmlkZQorCXB1YmxpYyBYTUlSZXNvdXJjZSBnZXRSZXNvdXJjZSgpIHsKKwkJSWRlbnRpZmlhYmxlIHRhcmdldCA9IChJZGVudGlmaWFibGUpdGhpcy5nZXRUYXJnZXQoKTsKKwkJCisJCVhNSVJlc291cmNlSW1wbCB4bWkgPSAoWE1JUmVzb3VyY2VJbXBsKXRhcmdldC5lUmVzb3VyY2UoKTsKKwkJCisJCXJldHVybiB4bWk7CisJfQorCQorCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGRlbGV0ZSgpIHRocm93cyBJT0V4Y2VwdGlvbiB7CisJCVhNSVJlc291cmNlIHIgPSB0aGlzLmdldFJlc291cmNlKCk7CisJCXIuZGVsZXRlKG51bGwpOworCQkKKwl9CisKKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCByZW5hbWUoU3RyaW5nIG5ld25hbWUpIHRocm93cyBJT0V4Y2VwdGlvbiB7CisJCS8vIG92ZXJyaWRlCisJfQorCQorCUBPdmVycmlkZQorCXB1YmxpYyBJZGVudGlmaWFibGUgZ2V0SWRlbnRpZmlhYmxlKCkgeworCQlyZXR1cm4gKElkZW50aWZpYWJsZSlnZXRUYXJnZXQoKTsKKwl9Cit9CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9hZGFwdGVycy9maWxlL0lkZW50aWZpYWJsZUZpbGVBZGFwdGVyRmFjdG9yeS5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vYWRhcHRlcnMvZmlsZS9JZGVudGlmaWFibGVGaWxlQWRhcHRlckZhY3RvcnkuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NWE0ZDczCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vYWRhcHRlcnMvZmlsZS9JZGVudGlmaWFibGVGaWxlQWRhcHRlckZhY3RvcnkuamF2YQpAQCAtMCwwICsxLDM3IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA5LDIwMTAgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmFkYXB0ZXJzLmZpbGU7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmllcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLklkZW50aWZpYWJsZTsKKworcHVibGljIGNsYXNzIElkZW50aWZpYWJsZUZpbGVBZGFwdGVyRmFjdG9yeSBleHRlbmRzIEZpbGVBZGFwdGVyRmFjdG9yeSAgeworCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSUFkYXB0ZXJGYWN0b3J5I2dldEFkYXB0ZXIoamF2YS5sYW5nLk9iamVjdCwKKwkgKiAgICAgIGphdmEubGFuZy5DbGFzcykKKwkgKi8KKwlAU3VwcHJlc3NXYXJuaW5ncygidW5jaGVja2VkIikKKwlwdWJsaWMgT2JqZWN0IGdldEFkYXB0ZXIoZmluYWwgT2JqZWN0IGFkYXB0YWJsZU9iamVjdCwKKwkJCWZpbmFsIENsYXNzIGFkYXB0ZXJUeXBlKSB7CisJCUZpbGUgcmV0VmFsdWUgPSBudWxsOworCQkvLyBBbiBpZGVudGlmaWFibGUKKwkJaWYgKGFkYXB0YWJsZU9iamVjdCBpbnN0YW5jZW9mIElkZW50aWZpYWJsZQorCQkJCSYmIGFkYXB0ZXJUeXBlLmVxdWFscyhGaWxlLmNsYXNzKSkgeworCQkJLy8gWWVzCisJCQkKKwkJCUlkZW50aWZpYWJsZUZpbGVBZGFwdGVyIGlmYSA9IG5ldyBJZGVudGlmaWFibGVGaWxlQWRhcHRlcigpOworCQkJaWZhLnNldFRhcmdldCgoTm90aWZpZXIpYWRhcHRhYmxlT2JqZWN0KTsKKwkJCXJldFZhbHVlID0gaWZhOworCQl9IC8vIGlmCisJCXJldHVybiByZXRWYWx1ZTsKKwl9IC8vIGdldEFkYXB0ZXIKK30KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2FkYXB0ZXJzL2hpc3RvcnkvSGlzdG9yeUV4dGVuZGVkTGlzdGVuZXIuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2FkYXB0ZXJzL2hpc3RvcnkvSGlzdG9yeUV4dGVuZGVkTGlzdGVuZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YmVlMThjCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vYWRhcHRlcnMvaGlzdG9yeS9IaXN0b3J5RXh0ZW5kZWRMaXN0ZW5lci5qYXZhCkBAIC0wLDAgKzEsMjEgQEAKKy8vIEhpc3RvcnlFeHRlbmRlZExpc3RlbmVyLmphdmEKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5hZGFwdGVycy5oaXN0b3J5OworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqCisgKiBUaGlzIGludGVyZmFjZSBpcyBpbXBsZW1lbnRlZCBieSBjbGFzc2VzIHRoYXQgd2FudCB0byBiZSBub3RpZmllZCB3aGVuIGEKKyAqIHtAbGluayBIaXN0b3J5UHJvdmlkZXJ9IGNhbiBwcm92aWRlIGFkZGl0aW9uYWwgaGlzdG9yeSB2YWx1ZXMuCisgKi8KK3B1YmxpYyBpbnRlcmZhY2UgSGlzdG9yeUV4dGVuZGVkTGlzdGVuZXIgeworCXZvaWQgaGlzdG9yeUV4dGVuZGVkKGZpbmFsIEhpc3RvcnlQcm92aWRlckFkYXB0ZXIgaGlzdG9yeVByb3ZpZGVyQWRhcHRlcik7Cit9IC8vIEhpc3RvcnlFeHRlbmRlZExpc3RlbmVyCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9hZGFwdGVycy9oaXN0b3J5L0hpc3RvcnlQcm92aWRlci5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vYWRhcHRlcnMvaGlzdG9yeS9IaXN0b3J5UHJvdmlkZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZTVmZGExCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vYWRhcHRlcnMvaGlzdG9yeS9IaXN0b3J5UHJvdmlkZXIuamF2YQpAQCAtMCwwICsxLDY1IEBACisvLyBIaXN0b3J5UHJvdmlkZXIuamF2YQorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmFkYXB0ZXJzLmhpc3Rvcnk7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5JZGVudGlmaWFibGU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLlNURU1UaW1lOworCisvKioKKyAqIFRoaXMgaW50ZXJmYWNlIGlzIGltcGxlbWVudGVkIGJ5IGNsYXNzZXMgdGhhdCBwcm92aWRlIGluc3RhbmNlcyBvZgorICoge0BsaW5rIElkZW50aWZpYWJsZXN9IGFzIHRoZXkgZXhpc3RlZCBpbiBwcmV2aW91cyAoaGlzdG9yaWMpIGN5Y2xlcyBvZiBhCisgKiB7QGxpbmsgU2ltdWxhdGlvbn0uCisgKi8KK3B1YmxpYyBpbnRlcmZhY2UgSGlzdG9yeVByb3ZpZGVyIHsKKworCS8qKgorCSAqIEBwYXJhbSB0aW1lCisJICogICAgICAgICAgICB0aGUgdGltZSBpbiBhIHtAbGluayBTaW11bGF0aW9ufSB0aGF0IHNwZWNpZmllcyB0aGUgaW5zdGFuY2UKKwkgKiAgICAgICAgICAgIG9mIHRoZSB7QCBJZGVudGlmaWFibGV9IHRvIHJldHVybgorCSAqIEByZXR1cm4gdGhlIHtAbGluayBJZGVudGlmaWFibGV9IGluc3RhbmNlIHRoYXQgd2FzIGN1cnJlbnQgaW4gdGhlIHN0YXRlCisJICogICAgICAgICBvZiB0aGUge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5HcmFwaH0gYXQgdGhlIDxjb2RlPnRpbWU8L2NvZGU+LgorCSAqLworCUlkZW50aWZpYWJsZSBnZXRJbnN0YW5jZShTVEVNVGltZSB0aW1lKTsKKworCS8qKgorCSAqIEByZXR1cm4gYWxsIG9mIHRoZSBoaXN0b3JpYyBpbnN0YW5jZXMgb2YgdGhlIHtAbGluayBJZGVudGlmaWFibGV9LiBUaGUKKwkgKiAgICAgICAgIHZhbHVlIGF0IGluZGV4IDAgaXMgdGhlIGVhcmxpZXN0LgorCSAqLworCUlkZW50aWZpYWJsZVtdIGdldEFsbEhpc3RvcmljSW5zdGFuY2VzKCk7CisKKwkKKwkvKioKKwkgKiBAcmV0dXJuIFRoZSBoaXN0b3JpYyBpbnN0YW5jZXMgdGhhdCBtYXRjaCB0aGUgdGltZSB2YWx1ZXMgaW4KKwkgKiB0aGUgYXJyYXkgdGltZVJhbmdlIHtAbGluayBJZGVudGlmaWFibGV9LiAKKwkgKi8KKwlJZGVudGlmaWFibGVbXSBnZXRIaXN0b3JpY0luc3RhbmNlcyhTVEVNVGltZVtdIHRpbWVSYW5nZSk7CisKKwkKKwkvKioKKwkgKiBAcmV0dXJuIGFsbCBvZiB0aGUgdGltZSB2YWx1ZXMgdGhhdCBjb3JyZXNwb25kIHRvIHRoZSBoaXN0b3JpYyB2YWx1ZXMuCisJICogICAgICAgICBUaGUgZmlyc3QgdmFsdWUgb2YgdGhlIGNvbGxlY3Rpb24gaXMgdGhlIHRpbWUgdmFsdWUgZm9yIHRoZSBmaXJzdAorCSAqICAgICAgICAgdmFsdWUgb2YgdGhlIGNvbGxlY3Rpb24gcmV0dXJuZWQgYnkKKwkgKi8KKwlTVEVNVGltZVtdIGdldEFsbEhpc3RvcmljVGltZVZhbHVlcygpOworCisJLyoqCisJICogQHJldHVybiB0aGUgZWFybGllc3QgdGltZSB2YWx1ZSBhc3NvY2lhdGVkIHdpdGggYSByZWxhdGl2ZSB2YWx1ZS4KKwkgKi8KKwlTVEVNVGltZSBnZXRFYXJsaWVzdFRpbWVWYWx1ZSgpOworCisJLyoqCisJICogQHJldHVybiB0aGUgZWFybGllc3QgKGxvd2VzdCkgY3ljbGUgbnVtYmVyCisJICovCisJaW50IGdldEVhcmxpZXN0Q3ljbGVOdW1iZXIoKTsKKworfSAvLyBIaXN0b3J5UHJvdmlkZXIKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2FkYXB0ZXJzL2hpc3RvcnkvSGlzdG9yeVByb3ZpZGVyQWRhcHRlci5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vYWRhcHRlcnMvaGlzdG9yeS9IaXN0b3J5UHJvdmlkZXJBZGFwdGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzZkZGY4NwotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2FkYXB0ZXJzL2hpc3RvcnkvSGlzdG9yeVByb3ZpZGVyQWRhcHRlci5qYXZhCkBAIC0wLDAgKzEsMTExIEBACisvLyBIaXN0b3J5UHJvdmlkZXJBZGFwdGVyLmphdmEKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5hZGFwdGVycy5oaXN0b3J5OworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGphdmEudXRpbC5EYXRlOworaW1wb3J0IGphdmEudXRpbC5MaXN0OworaW1wb3J0IGphdmEudXRpbC5jb25jdXJyZW50LkNvcHlPbldyaXRlQXJyYXlMaXN0OworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuaW1wbC5BZGFwdGVySW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLklkZW50aWZpYWJsZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguUmVzZXR0YWJsZUFkYXB0ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLk1vZGVsRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuU1RFTVRpbWU7CisKKy8qKgorICogVGhpcyBjbGFzcyBpcyBhIHtAbGluayBIaXN0b3J5UHJvdmlkZXJ9LgorICovCitwdWJsaWMgY2xhc3MgSGlzdG9yeVByb3ZpZGVyQWRhcHRlciBleHRlbmRzIEFkYXB0ZXJJbXBsIGltcGxlbWVudHMKKwkJSGlzdG9yeVByb3ZpZGVyLCBSZXNldHRhYmxlQWRhcHRlciB7CisKKwlwcml2YXRlIExpc3Q8SGlzdG9yeUV4dGVuZGVkTGlzdGVuZXI+IGV4dGVuc2lvbkxpc3RlbmVycyA9IG5ldyBDb3B5T25Xcml0ZUFycmF5TGlzdDxIaXN0b3J5RXh0ZW5kZWRMaXN0ZW5lcj4oKTsKKworCXByaXZhdGUgaW50IGVhcmxpZXN0Q3ljbGVOdW1iZXIgPSAwOworCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmFkYXB0ZXJzLmhpc3RvcnkuSGlzdG9yeVByb3ZpZGVyI2dldEluc3RhbmNlKG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5TVEVNVGltZSkKKwkgKi8KKwlwdWJsaWMgSWRlbnRpZmlhYmxlIGdldEluc3RhbmNlKFNURU1UaW1lIHRpbWUpIHsKKwkJcmV0dXJuIChJZGVudGlmaWFibGUpIGdldFRhcmdldCgpOworCX0KKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5hZGFwdGVycy5oaXN0b3J5Lkhpc3RvcnlQcm92aWRlciNnZXRBbGxIaXN0b3JpY0luc3RhbmNlcygpCisJICovCisJcHVibGljIElkZW50aWZpYWJsZVtdIGdldEFsbEhpc3RvcmljSW5zdGFuY2VzKCkgeworCQlyZXR1cm4gbmV3IElkZW50aWZpYWJsZVtdIHt9OworCX0KKworCQorCQorCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5hZGFwdGVycy5oaXN0b3J5Lkhpc3RvcnlQcm92aWRlciNnZXRIaXN0b3JpY0luc3RhbmNlcygpCisJICovCisJcHVibGljIElkZW50aWZpYWJsZVtdIGdldEhpc3RvcmljSW5zdGFuY2VzKFNURU1UaW1lW10gdGltZVJhbmdlKSB7CisJCXJldHVybiAgbmV3IElkZW50aWZpYWJsZVt0aW1lUmFuZ2UubGVuZ3RoXTsKKwl9CisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuYWRhcHRlcnMuaGlzdG9yeS5IaXN0b3J5UHJvdmlkZXIjZ2V0QWxsSGlzdG9yaWNUaW1lVmFsdWVzKCkKKwkgKi8KKwlwdWJsaWMgU1RFTVRpbWVbXSBnZXRBbGxIaXN0b3JpY1RpbWVWYWx1ZXMoKSB7CisJCXJldHVybiBuZXcgU1RFTVRpbWVbXSB7fTsKKwl9CisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuYWRhcHRlcnMuaGlzdG9yeS5IaXN0b3J5UHJvdmlkZXIjZ2V0RWFybGllc3RDeWNsZU51bWJlcigpCisJICovCisJcHVibGljIGludCBnZXRFYXJsaWVzdEN5Y2xlTnVtYmVyKCkgeworCQlyZXR1cm4gZWFybGllc3RDeWNsZU51bWJlcjsKKwl9CisKKwkKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5SZXNldHRhYmxlQWRhcHRlciNyZXNldCgpCisJICovCisJcHVibGljIHZvaWQgcmVzZXQoKSB7CisJCWZpcmVIaXN0b3J5RXh0ZW5kZWQoKTsKKwl9IC8vIHJlc2V0CisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuYWRhcHRlcnMuaGlzdG9yeS5IaXN0b3J5UHJvdmlkZXIjZ2V0RWFybGllc3RUaW1lVmFsdWUoKQorCSAqLworCXB1YmxpYyBTVEVNVGltZSBnZXRFYXJsaWVzdFRpbWVWYWx1ZSgpIHsKKwkJZmluYWwgU1RFTVRpbWUgcmV0VmFsdWUgPSBNb2RlbEZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZVNURU1UaW1lKCk7CisJCXJldFZhbHVlLnNldFRpbWUobmV3IERhdGUoKSk7CisJCXJldHVybiByZXRWYWx1ZTsKKwl9CisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LmltcGwuQWRhcHRlckltcGwjaXNBZGFwdGVyRm9yVHlwZShqYXZhLmxhbmcuT2JqZWN0KQorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBib29sZWFuIGlzQWRhcHRlckZvclR5cGUoT2JqZWN0IHR5cGUpIHsKKwkJcmV0dXJuIHR5cGUgPT0gSGlzdG9yeVByb3ZpZGVyLmNsYXNzOworCX0KKworCXB1YmxpYyB2b2lkIGFkZEV4dGVuc2lvbkxpc3RlbmVyKEhpc3RvcnlFeHRlbmRlZExpc3RlbmVyIGxpc3RlbmVyKSB7CisJCWV4dGVuc2lvbkxpc3RlbmVycy5hZGQobGlzdGVuZXIpOworCX0KKworCXB1YmxpYyB2b2lkIHJlbW92ZUV4dGVuc2lvbkxpc3RlbmVyKEhpc3RvcnlFeHRlbmRlZExpc3RlbmVyIGxpc3RlbmVyKSB7CisJCWV4dGVuc2lvbkxpc3RlbmVycy5yZW1vdmUobGlzdGVuZXIpOworCX0KKworCXByb3RlY3RlZCB2b2lkIGZpcmVIaXN0b3J5RXh0ZW5kZWQoKSB7CisJCWZvciAoSGlzdG9yeUV4dGVuZGVkTGlzdGVuZXIgbGlzdGVuZXIgOiBleHRlbnNpb25MaXN0ZW5lcnMpIHsKKwkJCWxpc3RlbmVyLmhpc3RvcnlFeHRlbmRlZCh0aGlzKTsKKwkJfSAvLyBmb3IgZWFjaCBIaXN0b3J5RXh0ZW5kZWRMaXN0ZW5lcgorCX0KKworfSAvLyBIaXN0b3J5UHJvdmlkZXJBZGFwdGVyCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9hZGFwdGVycy9oaXN0b3J5L0hpc3RvcnlQcm92aWRlckFkYXB0ZXJGYWN0b3J5LmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9hZGFwdGVycy9oaXN0b3J5L0hpc3RvcnlQcm92aWRlckFkYXB0ZXJGYWN0b3J5LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWE5OTIyNAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2FkYXB0ZXJzL2hpc3RvcnkvSGlzdG9yeVByb3ZpZGVyQWRhcHRlckZhY3RvcnkuamF2YQpAQCAtMCwwICsxLDcyIEBACisvLyBIaXN0b3J5UHJvdmlkZXJBZGFwdGVyRmFjdG9yeS5qYXZhCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uYWRhcHRlcnMuaGlzdG9yeTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5Db21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkNvbXBvc2VkQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUNoYW5nZU5vdGlmaWVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklEaXNwb3NhYmxlOworCisvKioKKyAqIFRoaXMgaW50ZXJmYWNlIGlzIGltcGxlbWVudGVkIGJ5IGNsYXNzZXMgdGhhdCBjcmVhdGUgYWRhcHRlcnMgdGhhdCBhZGFwdAorICoge0BsaW5rICBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdH1zIHRvIHtAbGluayBIaXN0b3J5UHJvdmlkZXJ9cy4KKyAqLworCitwdWJsaWMgaW50ZXJmYWNlIEhpc3RvcnlQcm92aWRlckFkYXB0ZXJGYWN0b3J5IGV4dGVuZHMKKwkJQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSwgSUNoYW5nZU5vdGlmaWVyLCBJRGlzcG9zYWJsZSB7CisKKwkvKioKKwkgKiBUaGlzIGlzIHRoZSBzaW5nbGV0b24gaW5zdGFuY2Ugb2YgdGhlIGZhY3RvcnkgdGhhdCBjcmVhdGVzCisJICoge0BsaW5rIEhpc3RvcnlQcm92aWRlcn0gaW5zdGFuY2VzLgorCSAqIDxwPgorCSAqIFRoaXMgaW5zdGFuY2UgaXMgYSB7QGxpbmsgQ29tcG9zZWRBZGFwdGVyRmFjdG9yeX0gd2hpY2ggbWVhbnMgdGhhdCBpdAorCSAqIGNvbGxlY3RzIHRvZ2V0aGVyIG90aGVyIHtAbGluayBDb21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5fSBhZGFwdGVyCisJICogZmFjdG9yaWVzLiBFYWNoIGNsYXNzIHRoYXQgaW1wbGVtZW50cworCSAqIHtAbGluayBSZWxhdGl2ZVZhbHVlUHJvdmlkZXJBZGFwdGVyRmFjdG9yeX0gbmVlZHMgdG8gYWRkIGl0c2VsZiB0byB0aGlzCisJICogaW5zdGFuY2Ugd2l0aCBhIGNhbGwgdG8KKwkgKiB7QGxpbmsgQ29tcG9zZWRBZGFwdGVyRmFjdG9yeSNhZGRBZGFwdGVyRmFjdG9yeShvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5BZGFwdGVyRmFjdG9yeSl9LgorCSAqIFRoaXMgd2lsbCB0aGVuIGFsbG93IGFkYXB0ZXJzIGNyZWF0ZWQgYnkgdGhhdCBmYWN0b3J5IHRvIGJlIGZvdW5kIHdoZW4KKwkgKiBhZGFwdGluZyBjbGFzcyBpbnN0YW5jZXMgaGFuZGxlZCBieSB0aGUgbmV3IGZhY3RvcnkuCisJICogPHA+CisJICogQmFzaWNhbGx5LCBpZiB5b3UgY3JlYXRlIGFuIEVNRiBtb2RlbCBhbmQgZGVmaW5lIGEKKwkgKiB7QGxpbmsgSGlzdG9yeVByb3ZpZGVyQWRhcHRlckZhY3Rvcnl9IGZvciBpdCBzbyB0aGF0IHRoZSBjbGFzc2VzIGluIHRoYXQKKwkgKiBtb2RlbCBjYW4gYmUgYWRhcHRlZCwgeW91IG5lZWQgdG8gaG9vayB0aGF0IGZhY3RvcnkgaW50byB0aGlzIG9uZSBzbyB0aGF0CisJICogbGF0ZXIgd2hlbiBhbiBhdHRlbXB0IGlzIG1hZGUgdG8gYWRhcHQgYSBjbGFzcyBmcm9tIHRoYXQgbW9kZWwgaXMgbWFkZQorCSAqIHRoZSBhc3NvY2lhdGVkIGZhY3Rvcnkgd2lsbCBiZSBmb3VuZC4gWW91IGNhbiBkbyB0aGF0IGJ5IGFkZGluZyB0aGUgbGluZToKKwkgKiA8Y29kZT4KKwkgKiBIaXN0b3J5UHJvdmlkZXJBZGFwdGVyRmFjdG9yeS5JTlNUQU5DRS5hZGRBZGFwdGVyRmFjdG9yeSh0aGlzKTsKKwkgKiA8L2NvZGU+CisJICogdG8gdGhlIGRlZmF1bHQgY29uc3RydWN0b3Igb2YgdGhlIG5ldyBmYWN0b3J5IGFmdGVyIHRoZSBzdXBlciBjYWxsLgorCSAqIFlvdSdyZSBub3QgZG9uZSBob3dldmVyLCB5b3UgYWxzbyBoYXZlIHRvICJmb3JjZSIgYW4gaW5zdGFuY2Ugb2YgdGhlCisJICogY2xhc3MgdG8gYmUgY3JlYXRlZCBzbyB0aGF0IHRoZSBjb25zdHJ1Y3RvciBpcyBydW4uIFRoaXMgaXMgdHlwaWNhbGx5CisJICogYWNoaWV2ZWQgYnkgYWxsb2NhdGluZyBhbiBpbnN0YW5jZSBpbiB0aGUgPGNvZGU+c3RhcnQ8L2NvZGU+IG1ldGhvZCBvZgorCSAqIHRoZSA8Y29kZT5BY3RpdmF0b3I8L2NvZGU+IG9mIHRoZSBwbHVnLWluIHRoYXQgZGVmaW5lcyB0aGUgZmFjdG9yeS4KKwkgKi8KKwlIaXN0b3J5UHJvdmlkZXJBZGFwdGVyRmFjdG9yeUltcGwgSU5TVEFOQ0UgPSBuZXcgSGlzdG9yeVByb3ZpZGVyQWRhcHRlckZhY3RvcnlJbXBsKCk7CisKKwkvKioKKwkgKiBUaGlzIGNsYXNzIGlzIGV4dGVuZGVkIGJ5IGNsYXNzZXMgdGhhdCBwcm92aWRlIGhpc3RvcmljIHZhbHVlcyBvZgorCSAqIHtAbGluayBJZGVudGlmaWFibGVzfS4KKwkgKi8KKwlwdWJsaWMgY2xhc3MgSGlzdG9yeVByb3ZpZGVyQWRhcHRlckZhY3RvcnlJbXBsIGV4dGVuZHMKKwkJCUNvbXBvc2VkQWRhcHRlckZhY3RvcnkgaW1wbGVtZW50cyBIaXN0b3J5UHJvdmlkZXJBZGFwdGVyRmFjdG9yeSB7CisJCS8qKgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkNvbXBvc2VkQWRhcHRlckZhY3RvcnkjaXNGYWN0b3J5Rm9yVHlwZShqYXZhLmxhbmcuT2JqZWN0KQorCQkgKi8KKwkJQE92ZXJyaWRlCisJCXB1YmxpYyBib29sZWFuIGlzRmFjdG9yeUZvclR5cGUoT2JqZWN0IHR5cGUpIHsKKwkJCXJldHVybiB0eXBlID09IEhpc3RvcnlQcm92aWRlci5jbGFzczsKKwkJfSAvLyBpc0ZhY3RvcnlGb3JUeXBlCisJfSAvLyBSZWxhdGl2ZVZhbHVlSGlzdG9yeVByb3ZpZGVyQWRhcHRlckZhY3RvcnlJbXBsCisKK30gLy8gSGlzdG9yeVByb3ZpZGVyQWRhcHRlckZhY3RvcnkKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2FkYXB0ZXJzL3RpbWUvVGltZVByb3ZpZGVyLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9hZGFwdGVycy90aW1lL1RpbWVQcm92aWRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU5MzY3MDcKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9hZGFwdGVycy90aW1lL1RpbWVQcm92aWRlci5qYXZhCkBAIC0wLDAgKzEsMjYgQEAKKy8vIFRpbWVQcm92aWRlci5qYXZhCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uYWRhcHRlcnMudGltZTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuU1RFTVRpbWU7CisKKy8qKgorICogVGhpcyBpbnRlcmZhY2UgaXMgaW1wbGVtZW50ZWQgYnkgY2xhc3NlcyB0aGF0IHByb3ZpZGUgaW5zdGFuY2VzIG9mIHtAbGluaworICogU1RFTVRpbWV9LgorICovCitwdWJsaWMgaW50ZXJmYWNlIFRpbWVQcm92aWRlciB7CisJLyoqCisJICogQHJldHVybiB0aGUgdGltZSB2YWx1ZSBhc3NvY2lhdGVkIHdpdGggdGhlIGluc3RhbmNlLgorCSAqLworCVNURU1UaW1lIGdldFRpbWUoKTsKK30gLy8gVGltZVByb3ZpZGVyClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vYWRhcHRlcnMvdGltZS9UaW1lUHJvdmlkZXJBZGFwdGVyLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9hZGFwdGVycy90aW1lL1RpbWVQcm92aWRlckFkYXB0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NzBlZDQ4Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vYWRhcHRlcnMvdGltZS9UaW1lUHJvdmlkZXJBZGFwdGVyLmphdmEKQEAgLTAsMCArMSwzMSBAQAorLy8gVGltZVByb3ZpZGVyQWRhcHRlci5qYXZhCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uYWRhcHRlcnMudGltZTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5pbXBsLkFkYXB0ZXJJbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5Nb2RlbEZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLlNURU1UaW1lOworCisvKioKKyAqIFRoaXMgY2xhc3MgaXMgYSB7QGxpbmsgVGltZVByb3ZpZGVyfS4KKyAqLworcHVibGljIGNsYXNzIFRpbWVQcm92aWRlckFkYXB0ZXIgZXh0ZW5kcyBBZGFwdGVySW1wbCBpbXBsZW1lbnRzIFRpbWVQcm92aWRlciB7CisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uYWRhcHRlcnMudGltZS5UaW1lUHJvdmlkZXIjZ2V0VGltZSgpCisJICovCisJcHVibGljIFNURU1UaW1lIGdldFRpbWUoKSB7CisJCXJldHVybiBNb2RlbEZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZVNURU1UaW1lKCk7CisJfQorCit9IC8vIFRpbWVQcm92aWRlckFkYXB0ZXIKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9hZGFwdGVycy90aW1lL1RpbWVQcm92aWRlckFkYXB0ZXJGYWN0b3J5LmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9hZGFwdGVycy90aW1lL1RpbWVQcm92aWRlckFkYXB0ZXJGYWN0b3J5LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjZmOGYxYgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2FkYXB0ZXJzL3RpbWUvVGltZVByb3ZpZGVyQWRhcHRlckZhY3RvcnkuamF2YQpAQCAtMCwwICsxLDcyIEBACisvLyBUaW1lUHJvdmlkZXJBZGFwdGVyRmFjdG9yeS5qYXZhCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uYWRhcHRlcnMudGltZTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5Db21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkNvbXBvc2VkQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUNoYW5nZU5vdGlmaWVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklEaXNwb3NhYmxlOworCisvKioKKyAqIFRoaXMgaW50ZXJmYWNlIGlzIGltcGxlbWVudGVkIGJ5IGNsYXNzZXMgdGhhdCBjcmVhdGUgYWRhcHRlcnMgdGhhdCBhZGFwdAorICoge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0fXMgdG8ge0BsaW5rIFRpbWVQcm92aWRlcn1zLgorICovCitwdWJsaWMgaW50ZXJmYWNlIFRpbWVQcm92aWRlckFkYXB0ZXJGYWN0b3J5IGV4dGVuZHMgQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSwKKwkJSUNoYW5nZU5vdGlmaWVyLCBJRGlzcG9zYWJsZSB7CisKKwkvKioKKwkgKiBUaGlzIGlzIHRoZSBzaW5nbGV0b24gaW5zdGFuY2Ugb2YgdGhlIGZhY3RvcnkgdGhhdCBjcmVhdGVzIHtAbGluaworCSAqIFRpbWVQcm92aWRlcn0gaW5zdGFuY2VzLgorCSAqIDxwPgorCSAqIFRoaXMgaW5zdGFuY2UgaXMgYSB7QGxpbmsgQ29tcG9zZWRBZGFwdGVyRmFjdG9yeX0gd2hpY2ggbWVhbnMgdGhhdCBpdAorCSAqIGNvbGxlY3RzIHRvZ2V0aGVyIG90aGVyIHtAbGluayBDb21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5fSBhZGFwdGVyCisJICogZmFjdG9yaWVzLiBFYWNoIGNsYXNzIHRoYXQgaW1wbGVtZW50cyB7QGxpbmsKKwkgKiBSZWxhdGl2ZVZhbHVlUHJvdmlkZXJBZGFwdGVyRmFjdG9yeX0gbmVlZHMgdG8gYWRkIGl0c2VsZiB0byB0aGlzIGluc3RhbmNlCisJICogd2l0aCBhIGNhbGwgdG8ge0BsaW5rCisJICogQ29tcG9zZWRBZGFwdGVyRmFjdG9yeSNhZGRBZGFwdGVyRmFjdG9yeShvcmcuZWNsaXBzZQorCSAqIC5lbWYuY29tbW9uLm5vdGlmeS5BZGFwdGVyRmFjdG9yeSl9LiBUaGlzIHdpbGwgdGhlbiBhbGxvdyBhZGFwdGVycworCSAqIGNyZWF0ZWQgYnkgdGhhdCBmYWN0b3J5IHRvIGJlIGZvdW5kIHdoZW4gYWRhcHRpbmcgY2xhc3MgaW5zdGFuY2VzIGhhbmRsZWQKKwkgKiBieSB0aGUgbmV3IGZhY3RvcnkuCisJICogPHA+CisJICogQmFzaWNhbGx5LCBpZiB5b3UgY3JlYXRlIGFuIEVNRiBtb2RlbCBhbmQgZGVmaW5lIGEge0BsaW5rCisJICogVGltZVByb3ZpZGVyQWRhcHRlckZhY3Rvcnl9IGZvciBpdCBzbyB0aGF0IHRoZSBjbGFzc2VzIGluIHRoYXQgbW9kZWwgY2FuCisJICogYmUgYWRhcHRlZCwgeW91IG5lZWQgdG8gaG9vayB0aGF0IGZhY3RvcnkgaW50byB0aGlzIG9uZSBzbyB0aGF0IGxhdGVyCisJICogd2hlbiBhbiBhdHRlbXB0IGlzIG1hZGUgdG8gYWRhcHQgYSBjbGFzcyBmcm9tIHRoYXQgbW9kZWwgaXMgbWFkZSB0aGUKKwkgKiBhc3NvY2lhdGVkIGZhY3Rvcnkgd2lsbCBiZSBmb3VuZC4gWW91IGNhbiBkbyB0aGF0IGJ5IGFkZGluZyB0aGUgbGluZToKKwkgKiA8Y29kZT4KKwkgKiBUaW1lUHJvdmlkZXJBZGFwdGVyRmFjdG9yeS5JTlNUQU5DRS5hZGRBZGFwdGVyRmFjdG9yeSh0aGlzKTsKKwkgKiA8L2NvZGU+IHRvIHRoZSBkZWZhdWx0IGNvbnN0cnVjdG9yIG9mIHRoZSBuZXcgZmFjdG9yeSBhZnRlciB0aGUKKwkgKiBzdXBlciBjYWxsLiBZb3UncmUgbm90IGRvbmUgaG93ZXZlciwgeW91IGFsc28gaGF2ZSB0byAiZm9yY2UiIGFuIGluc3RhbmNlCisJICogb2YgdGhlIGNsYXNzIHRvIGJlIGNyZWF0ZWQgc28gdGhhdCB0aGUgY29uc3RydWN0b3IgaXMgcnVuLiBUaGlzIGlzCisJICogdHlwaWNhbGx5IGFjaGlldmVkIGJ5IGFsbG9jYXRpbmcgYW4gaW5zdGFuY2UgaW4gdGhlIDxjb2RlPnN0YXJ0PC9jb2RlPgorCSAqIG1ldGhvZCBvZiB0aGUgPGNvZGU+QWN0aXZhdG9yPC9jb2RlPiBvZiB0aGUgcGx1Zy1pbiB0aGF0IGRlZmluZXMgdGhlCisJICogZmFjdG9yeS4KKwkgKi8KKwlUaW1lUHJvdmlkZXJBZGFwdGVyRmFjdG9yeUltcGwgSU5TVEFOQ0UgPSBuZXcgVGltZVByb3ZpZGVyQWRhcHRlckZhY3RvcnlJbXBsKCk7CisKKwkvKioKKwkgKiBUaGlzIGNsYXNzIGlzIGV4dGVuZGVkIGJ5IGNsYXNzZXMgdGhhdCBwcm92aWRlIHRpbWUgdmFsdWVzIG9mIHtAbGluaworCSAqIElkZW50aWZpYWJsZXN9LgorCSAqLworCXB1YmxpYyBjbGFzcyBUaW1lUHJvdmlkZXJBZGFwdGVyRmFjdG9yeUltcGwgZXh0ZW5kcyBDb21wb3NlZEFkYXB0ZXJGYWN0b3J5CisJCQlpbXBsZW1lbnRzIFRpbWVQcm92aWRlckFkYXB0ZXJGYWN0b3J5IHsKKwkJLyoqCisJCSAqIEBzZWUgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuQ29tcG9zZWRBZGFwdGVyRmFjdG9yeSMKKwkJICogCWlzRmFjdG9yeUZvclR5cGUoamF2YS5sYW5nLk9iamVjdCkKKwkJICovCisJCUBPdmVycmlkZQorCQlwdWJsaWMgYm9vbGVhbiBpc0ZhY3RvcnlGb3JUeXBlKE9iamVjdCB0eXBlKSB7CisJCQlyZXR1cm4gdHlwZSA9PSBUaW1lUHJvdmlkZXIuY2xhc3M7CisJCX0gLy8gaXNGYWN0b3J5Rm9yVHlwZQorCX0gLy8gVGltZVByb3ZpZGVyQWRhcHRlckZhY3RvcnlJbXBsCit9IC8vIFRpbWVQcm92aWRlckFkYXB0ZXJGYWN0b3J5ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9Db25zdGFudHMuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvQ29uc3RhbnRzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDhmNGE4ZgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvQ29uc3RhbnRzLmphdmEKQEAgLTAsMCArMSwyNTAgQEAKKy8vIENvbnN0YW50cy5qYXZhCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNiwgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLkR1YmxpbkNvcmU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5JZGVudGlmaWFibGU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmV4cGVyaW1lbnQuRXhwZXJpbWVudDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguR3JhcGg7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLkRlY29yYXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuTW9kZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNjZW5hcmlvLlNjZW5hcmlvOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zZXF1ZW5jZXIuU2VxdWVuY2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zb2x2ZXIuU29sdmVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS50cmlnZ2VyLlRyaWdnZXI7CisKKy8qKgorICogVGhpcyBpbnRlcmZhY2UgY29udGFpbnMgYSBudW1iZXIgb2Ygc2lnbmlmaWNhbnQgY29uc3RhbnRzIHVzZWQgYnkgdGhlIFNURU0KKyAqIGltcGxlbWVudGF0aW9uLgorICovCitwdWJsaWMgaW50ZXJmYWNlIENvbnN0YW50cyB7CisKKwkvKioKKwkgKiBUaGlzIGlzIHRoZSBzdHJpbmcgdGhhdCBpcyB0aGUgcm9vdCBvZiBhbGwgcGFja2FnZXMgYW5kIHBsdWdpbiBpZCdzCisJICovCisJU3RyaW5nIElEX1JPT1QgPSAib3JnLmVjbGlwc2Uuc3RlbSI7CisKKwkvKioKKwkgKiBUaGlzIGlzIHRoZSBpZCBmb3IgdGhlIFNURU0gcHJvamVjdCBuYXR1cmUuCisJICovCisJU3RyaW5nIElEX1NURU1fUFJPSkVDVF9OQVRVUkUgPSBJRF9ST09UICsgIi5zdGVtbmF0dXJlIjsKKworCS8qKgorCSAqIFRoaXMgaXMgdGhlIHNjaGVtZSB1c2VkIGZvciBTVEVNIFVSSSdzIHRoYXQgdW5pcXVlbHkgaWRlbnRpZnkgYQorCSAqIGNvbXBvbmVudC4KKwkgKi8KKwlTdHJpbmcgU1RFTV9TQ0hFTUUgPSAic3RlbSI7CisKKwkvKioKKwkgKiBUaGlzIGlzIHRoZSBzY2hlbWUgdXNlZCBmb3IgU1RFTSBVUkkncyB0aGF0IHVuaXF1ZWx5IGlkZW50aWZ5IGEgU1RFTQorCSAqICJ0eXBlIi4KKwkgKi8KKwlTdHJpbmcgU1RFTV9UWVBFX1NDSEVNRSA9ICJzdGVtdHlwZSI7CisKKwkvKioKKwkgKiBUaGlzIGlzIHRoZSAiYXV0aG9yaXR5IiBvZiBhIFVSSSB0aGF0IHJlZmVycyB0byBTVEVNIHJlc291cmNlcy4KKwkgKi8KKwlTdHJpbmcgU1RFTV9VUklfQVVUSE9SSVRZID0gSURfUk9PVDsKKworCS8qKgorCSAqIFRoaXMgaXMgdGhlIGV4dGVuc2lvbiBwb2ludCBpZCBmb3IgdGhlICJncmFwaCIgZXh0ZW5zaW9uIHBvaW50LiB7QHZhbHVlfQorCSAqIAorCSAqIEBzZWUgR3JhcGgKKwkgKi8KKwlTdHJpbmcgSURfR1JBUEhfRVhURU5TSU9OX1BPSU5UID0gSURfUk9PVCArICIuY29yZS5ncmFwaCI7CisKKwkvKioKKwkgKiBUaGlzIGlzIHRoZSBleHRlbnNpb24gcG9pbnQgaWQgZm9yIHRoZSAibW9kZWwiIGV4dGVuc2lvbiBwb2ludC4ge0B2YWx1ZX0KKwkgKiAKKwkgKiBAc2VlIE1vZGVsCisJICovCisJU3RyaW5nIElEX01PREVMX0VYVEVOU0lPTl9QT0lOVCA9IElEX1JPT1QgKyAiLmNvcmUubW9kZWwiOworCisJLyoqCisJICogVGhpcyBpcyB0aGUgZXh0ZW5zaW9uIHBvaW50IGlkIGZvciB0aGUgInNjZW5hcmlvIiBleHRlbnNpb24gcG9pbnQuICogKgorCSAqIHtAdmFsdWV9CisJICogCisJICogQHNlZSBTY2VuYXJpbworCSAqLworCVN0cmluZyBJRF9TQ0VOQVJJT19FWFRFTlNJT05fUE9JTlQgPSBJRF9ST09UICsgIi5jb3JlLnNjZW5hcmlvIjsKKworCS8qKgorCSAqIFRoaXMgaXMgdGhlIGV4dGVuc2lvbiBwb2ludCBpZCBmb3IgdGhlICJleHBlcmltZW50IiBleHRlbnNpb24gcG9pbnQuICogKgorCSAqIHtAdmFsdWV9CisJICogCisJICogQHNlZSBFeHBlcmltZW50CisJICovCisJU3RyaW5nIElEX0VYUEVSSU1FTlRfRVhURU5TSU9OX1BPSU5UID0gSURfUk9PVCArICIuY29yZS5leHBlcmltZW50IjsKKworCS8qKgorCSAqIFRoaXMgaXMgdGhlIGV4dGVuc2lvbiBwb2ludCBpZCBvZiB0aGUgIlNlcXVlbmNlcnMiIGV4dGVuc2lvbiBwb2ludC4gKiAqCisJICoge0B2YWx1ZX0KKwkgKiAKKwkgKiBAc2VlIFNlcXVlbmNlcgorCSAqLworCVN0cmluZyBJRF9TRVFVRU5DRVJfRVhURU5TSU9OX1BPSU5UID0gSURfUk9PVCArICIuY29yZS5zZXF1ZW5jZXIiOworCisJLyoqCisJICogVGhpcyBpcyB0aGUgZXh0ZW5zaW9uIHBvaW50IGlkIG9mIHRoZSAiRGVjb3JhdG9ycyIgZXh0ZW5zaW9uIHBvaW50ICogKgorCSAqIHtAdmFsdWV9CisJICogCisJICogQHNlZSBEZWNvcmF0b3IKKwkgKi8KKwlTdHJpbmcgSURfREVDT1JBVE9SX0VYVEVOU0lPTl9QT0lOVCA9IElEX1JPT1QgKyAiLmNvcmUuZGVjb3JhdG9yIjsKKworCS8qKgorCSAqIFRoaXMgaXMgdGhlIGV4dGVuc2lvbiBwb2ludCBpZCBvZiB0aGUgIlRyaWdnZXJzIiBleHRlbnNpb24gcG9pbnQgKiAqCisJICoge0B2YWx1ZX0KKwkgKiAKKwkgKiBAc2VlIFRyaWdnZXIKKwkgKi8KKwlTdHJpbmcgSURfVFJJR0dFUl9FWFRFTlNJT05fUE9JTlQgPSBJRF9ST09UICsgIi5jb3JlLnRyaWdnZXIiOworCisJLyoqCisJICogVGhpcyBpcyB0aGUgZXh0ZW5zaW9uIHBvaW50IGlkIG9mIHRoZSAiUHJlZGljYXRlIiBleHRlbnNpb24gcG9pbnQgKiAqCisJICoge0B2YWx1ZX0KKwkgKiAKKwkgKiBAc2VlIFByZWRpY2F0ZQorCSAqLworCVN0cmluZyBJRF9QUkVESUNBVEVfRVhURU5TSU9OX1BPSU5UID0gSURfUk9PVCArICIuY29yZS5wcmVkaWNhdGUiOworCisJLyoqCisJICogVGhpcyBpcyB0aGUgZXh0ZW5zaW9uIHBvaW50IGlkIGZvciB0aGUgInNvbHZlciIgZXh0ZW5zaW9uIHBvaW50LiBBCisJICoge0BsaW5rIFNvbHZlcn0gZGVmaW5lcyB0aGUgdW5kZXJseWluZyBjb21wdXRhdGlvbmFsIG1vZGVsLgorCSAqIHtAdmFsdWV9CisJICovCisJU3RyaW5nIElEX1NPTFZFUl9FWFRFTlNJT05fUE9JTlQgPSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuQ29uc3RhbnRzLklEX1JPT1QKKwkrICIuY29yZS5zb2x2ZXIiOworCisJCisJLyoqCisJICogVGhpcyBpcyB0aGUgaWRlbnRpZmllciBvZiB0aGUgZWxlbWVudCBpbiBhCisJICogPGNvZGU+Q29uZmlndXJhdGlvbkVsZW1lbnQ8L2NvZGU+IHRoYXQgc3BlY2lmaWVzIHRoZSBuYW1lIGFuZAorCSAqIGltcGxlbWVudGluZyBjbGFzcyBmb3IgU1RFTSAic29sdmVyIi4KKwkgKiAKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5Db25zdGFudHMjRVhFQ1VUQUJMRV9OQU1FX0FUVFJJQlVURQorCSAqLworCVN0cmluZyBTT0xWRVJfRUxFTUVOVCA9ICJjbGFzc2RlZiI7CisJCisJCisJLyoqCisJICogVGhpcyBpcyB0aGUgZXh0ZW5zaW9uIHBvaW50IGlkIGZvciB0aGUgImxvZ2dlciIgZXh0ZW5zaW9uIHBvaW50LiBBCisJICoge0BsaW5rIExvZ2dlcn0gZGVmaW5lcyB0aGUgdW5kZXJseWluZyBjb21wdXRhdGlvbmFsIG1vZGVsLgorCSAqIHtAdmFsdWV9CisJICovCisJU3RyaW5nIElEX0xPR0dFUl9FWFRFTlNJT05fUE9JTlQgPSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuQ29uc3RhbnRzLklEX1JPT1QKKwkrICIuY29yZS5sb2dnZXIiOworCisJCisJLyoqCisJICogVGhpcyBpcyB0aGUgaWRlbnRpZmllciBvZiB0aGUgZWxlbWVudCBpbiBhCisJICogPGNvZGU+Q29uZmlndXJhdGlvbkVsZW1lbnQ8L2NvZGU+IHRoYXQgc3BlY2lmaWVzIHRoZSBuYW1lIGFuZAorCSAqIGltcGxlbWVudGluZyBjbGFzcyBmb3IgU1RFTSAibG9nZ2VyIi4KKwkgKiAKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5Db25zdGFudHMjRVhFQ1VUQUJMRV9OQU1FX0FUVFJJQlVURQorCSAqLworCVN0cmluZyBMT0dHRVJfRUxFTUVOVCA9ICJjbGFzc2RlZiI7CisKKwkKKwkKKworCS8qKgorCSAqIFRoaXMgaXMgdGhlIGlkZW50aWZpZXIgb2YgdGhlIFhNTCBlbGVtZW50IHRoYXQgc3BlY2lmaWVzIHRoZSBuYW1lIG9mIGEKKwkgKiAiY2F0ZWdvcnkiIGZvciBleHRlbnNpb24gcG9pbnRzIHRoYXQgYXJlIGV4dGVuZGVkIGJ5IGV4dGVuc2lvbnMgdGhhdCBwbHVnCisJICogaW4ge0BsaW5rIElkZW50aWZpYWJsZX1zLiB7QHZhbHVlfQorCSAqIAorCSAqIEBzZWUgI0NBVEVHT1JZX05BTUVfQVRUUklCVVRFCisJICogQHNlZSAjUEFSRU5UX0lEX0FUVFJJQlVURQorCSAqLworCVN0cmluZyBDQVRFR09SWV9FTEVNRU5UID0gInN0ZW1fY2F0ZWdvcnkiOworCisJLyoqCisJICogVGhpcyBpcyB0aGUgaWRlbnRpZmllciBvZiB0aGUgWE1MIGF0dHJpYnV0ZSBpbiBhIENBVEVHT1JZIGVsZW1lbnQgdGhhdAorCSAqIHNwZWNpZmllcyB0aGUgbmFtZSBvZiB0aGUgY2F0ZWdvcnkuIHtAdmFsdWV9CisJICogCisJICogQHNlZSAjQ0FURUdPUllfRUxFTUVOVAorCSAqIEBzZWUgI1BBUkVOVF9JRF9BVFRSSUJVVEUKKwkgKi8KKwlTdHJpbmcgQ0FURUdPUllfTkFNRV9BVFRSSUJVVEUgPSAibmFtZSI7CisKKwkvKioKKwkgKiBUaGlzIGlzIHRoZSBpZGVudGlmaWVyIG9mIHRoZSBYTUwgYXR0cmlidXRlIGluIGEgQ2F0ZWdvcnkgZWxlbWVudCB0aGF0CisJICogc3BlY2lmaWVzIHRoZSB1bmlxdWUgaWRlbnRpZmllciBvZiB0aGUgY2F0ZWdvcnkuIHtAdmFsdWV9CisJICogCisJICogQHNlZSAjQ0FURUdPUllfTkFNRV9BVFRSSUJVVEUKKwkgKiBAc2VlICNQQVJFTlRfSURfQVRUUklCVVRFCisJICovCisJU3RyaW5nIENBVEVHT1JZX0lEX0FUVFJJQlVURSA9ICJpZCI7CisKKwkvKioKKwkgKiBUaGlzIGlzIHRoZSBpZGVudGlmaWVyIG9mIHRoZSBYTUwgYXR0cmlidXRlIGluIGEgQ0FURUdPUlkgZWxlbWVudCB0aGF0CisJICogc3BlY2lmaWVzIHRoZSB1bmlxdWUgaWRlbnRpZmllciBvZiB0aGUgcGFyZW50IGNhdGVnb3J5IG9mIGEgY2hpbGQKKwkgKiBjYXRlZ29yeS4ge0B2YWx1ZX0KKwkgKiAKKwkgKiBAc2VlICNDQVRFR09SWV9FTEVNRU5UCisJICogQHNlZSAjQ0FURUdPUllfTkFNRV9BVFRSSUJVVEUKKwkgKi8KKwlTdHJpbmcgUEFSRU5UX0lEX0FUVFJJQlVURSA9ICJwYXJlbnRfaWQiOworCisJLyoqCisJICogVGhpcyBpcyB0aGUgaWRlbnRpZmllciBvZiB0aGUgWE1MIGVsZW1lbnQgdGhhdCBzcGVjaWZpZXMgdGhlIER1YmxpbiBDb3JlCisJICogdmFsdWVzIGZvciBleHRlbnNpb24gcG9pbnRzIHRoYXQgYXJlIGV4dGVuZGVkIGJ5IGV4dGVuc2lvbnMgdGhhdCBwbHVnIGluCisJICoge0BsaW5rIElkZW50aWZpYWJsZX1zLiB7QHZhbHVlfQorCSAqIAorCSAqIEBzZWUgI0NBVEVHT1JZX0VMRU1FTlQKKwkgKiBAc2VlIER1YmxpbkNvcmUKKwkgKi8KKwlTdHJpbmcgRFVCTElOX0NPUkVfRUxFTUVOVCA9ICJkdWJsaW5fY29yZSI7CisKKwkvKioKKwkgKiBUaGlzIGlzIHRoZSBpZGVudGlmaWVyIG9mIHRoZSBYTUwgZWxlbWVudCB0aGF0IHNwZWNpZmllcyB0aGUgbmFtZSBhbmQKKwkgKiBpbXBsZW1lbnRpbmcgY2xhc3MgZm9yIFNURU0gInNlcXVlbmNlcnMiLgorCSAqIAorCSAqIEBzZWUgI0VYRUNVVEFCTEVfTkFNRV9BVFRSSUJVVEUKKwkgKi8KKwlTdHJpbmcgU0VRVUVOQ0VSX0VMRU1FTlQgPSAic2VxdWVuY2VyIjsKKworCS8qKgorCSAqIFRoaXMgaXMgdGhlIGlkZW50aWZpZXIgb2YgdGhlIFhNTCBlbGVtZW50IHRoYXQgc3BlY2lmaWVzIHRoZSBuYW1lIGFuZAorCSAqIGltcGxlbWVudGluZyBjbGFzcyBmb3IgU1RFTSAiZGVjb3JhdG9ycyIKKwkgKiAKKwkgKiBAc2VlICNFWEVDVVRBQkxFX05BTUVfQVRUUklCVVRFCisJICovCisJU3RyaW5nIERFQ09SQVRPUl9FTEVNRU5UID0gImRlY29yYXRvciI7CisKKwkvKioKKwkgKiBUaGlzIGlzIHRoZSBpZGVudGlmaWVyIG9mIHRoZSBYTUwgYXR0cmlidXRlIGluIGFuIE9ic2VydmVyIGVsZW1lbnQgdGhhdAorCSAqIHNwZWNpZmllcyB0aGUgbmFtZSBvZiBhIFNURU0gImV4ZWN1dGFibGUiLgorCSAqIAorCSAqIEBzZWUgI1NFUVVFTkNFUl9FTEVNRU5UCisJICogQHNlZSAjREVDT1JBVE9SX0VMRU1FTlQKKwkgKi8KKwlTdHJpbmcgRVhFQ1VUQUJMRV9OQU1FX0FUVFJJQlVURSA9ICJuYW1lIjsKKworCS8qKgorCSAqIFRoZSBuYW1lIG9mIHRoZSByb290IGNhdGVnb3J5IGZvciBhbGwgSWRlbnRpZmlhYmxlUGx1Z2luVmlld3MuCisJICogCisJICogQHNlZSAjSURFTlRJRklBQkxFX1JPT1RfQ0FURUdPUllfSUQKKwkgKi8KKwlTdHJpbmcgSURFTlRJRklBQkxFX1JPT1RfQ0FURUdPUllfTkFNRSA9ICIvIjsKKworCS8qKgorCSAqIFRoaXMgaXMgdGhlIHVuaXF1ZSBpZGVudGlmaWVyIG9mIHRoZSByb290IGNhdGVnb3J5LiB7QHZhbHVlfQorCSAqIAorCSAqIEBzZWUgI0lERU5USUZJQUJMRV9ST09UX0NBVEVHT1JZX05BTUUKKwkgKi8KKwlTdHJpbmcgSURFTlRJRklBQkxFX1JPT1RfQ0FURUdPUllfSUQgPSBJREVOVElGSUFCTEVfUk9PVF9DQVRFR09SWV9OQU1FOworCisKKworfSAvLyBDb25zdGFudHMKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvQ29yZVBsdWdpbi5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9Db3JlUGx1Z2luLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWViNTFjMwotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvQ29yZVBsdWdpbi5qYXZhCkBAIC0wLDAgKzEsMTU3IEBACisvLyBDb3JlUGx1Z2luLmphdmEKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5jb3JlOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QbHVnaW47CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlN0YXR1czsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmFkYXB0ZXJzLmZpbGUuSWRlbnRpZmlhYmxlRmlsZUFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5wcm92aWRlci5HcmFwaFRpbWVQcm92aWRlckFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5vc2dpLmZyYW1ld29yay5CdW5kbGVDb250ZXh0OworCisvKioKKyAqIFRoZSBjb3JlIFNURU0gcGx1Z2luLgorICovCitwdWJsaWMgY2xhc3MgQ29yZVBsdWdpbiBleHRlbmRzIFBsdWdpbiB7CisKKwkvKioKKwkgKiBUaGUgcGx1Zy1pbiBJRAorCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFBMVUdJTl9JRCA9ICJvcmcuZWNsaXBzZS5zdGVtLmNTb3JlIjsKKworCS8vIFRoZSBzaGFyZWQgaW5zdGFuY2UuCisJcHJpdmF0ZSBzdGF0aWMgQ29yZVBsdWdpbiBwbHVnaW47CisKKwkvKioKKwkgKiBUaGUgY29uc3RydWN0b3IuCisJICovCisJcHVibGljIENvcmVQbHVnaW4oKSB7CisJCXBsdWdpbiA9IHRoaXM7CisJfSAvLyBDb3JlUGx1Z2luCisKKwkvKioKKwkgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgdXBvbiBwbHVnLWluIGFjdGl2YXRpb24KKwkgKiAKKwkgKiBAcGFyYW0gY29udGV4dAorCSAqIEB0aHJvd3MgRXhjZXB0aW9uCisJICovCisJcHVibGljIHZvaWQgc3RhcnQoQnVuZGxlQ29udGV4dCBjb250ZXh0KSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJc3VwZXIuc3RhcnQoY29udGV4dCk7CisJCW5ldyBHcmFwaFRpbWVQcm92aWRlckFkYXB0ZXJGYWN0b3J5KCk7CisJCW5ldyBJZGVudGlmaWFibGVGaWxlQWRhcHRlckZhY3RvcnkoKTsKKwkJLy8gVGhlIGNvbnN0cnVjdG9yIHdpbGwgcG9wdWxhdGUgdGhlIHBsdWctaW4gc3BlY2lmaWVkIHJlc291cmNlcworCQkvLyBzdGVtID0gbmV3IFNURU0oKTsKKwl9IC8vIHN0YXJ0CisKKwkKKwkvKioKKwkgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgd2hlbiB0aGUgcGx1Zy1pbiBpcyBzdG9wcGVkCisJICogCisJICogQHBhcmFtIGNvbnRleHQKKwkgKiBAdGhyb3dzIEV4Y2VwdGlvbgorCSAqLworCXB1YmxpYyB2b2lkIHN0b3AoQnVuZGxlQ29udGV4dCBjb250ZXh0KSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJc3VwZXIuc3RvcChjb250ZXh0KTsKKwkJcGx1Z2luID0gbnVsbDsKKwl9IC8vIHN0b3AKKworCS8qKgorCSAqIFJldHVybnMgdGhlIHNoYXJlZCBpbnN0YW5jZS4KKwkgKiAKKwkgKiBAcmV0dXJuIHRoZSBzaW5nbGV0b24gaW5zdGFuY2Ugb2YgdGhlIHBsdWctaW4gY2xhc3MuCisJICovCisJcHVibGljIHN0YXRpYyBDb3JlUGx1Z2luIGdldERlZmF1bHQoKSB7CisJCXJldHVybiBwbHVnaW47CisJfSAvLyBDb3JlUGx1Z2luCisKKwkvKioKKwkgKiBMb2cgYW4gZXJyb3IgdG8gdGhlIElMb2cgZm9yIHRoaXMgcGx1Z2luCisJICogCisJICogQHBhcmFtIG1lc3NhZ2UKKwkgKiAgICAgICAgICAgIHRoZSBsb2NhbGl6ZWQgZXJyb3IgbWVzc2FnZSB0ZXh0CisJICogQHBhcmFtIGV4Y2VwdGlvbgorCSAqICAgICAgICAgICAgdGhlIGFzc29jaWF0ZWQgZXhjZXB0aW9uLCBvciBudWxsCisJICovCisJcHVibGljIHN0YXRpYyB2b2lkIGxvZ0Vycm9yKFN0cmluZyBtZXNzYWdlLCBUaHJvd2FibGUgZXhjZXB0aW9uKSB7CisJCS8vIERvIHdlIGhhdmUgYSBwbHVnaW4/CisJCWlmIChwbHVnaW4gIT0gbnVsbCkgeworCQkJLy8gWWVzCisJCQlwbHVnaW4uZ2V0TG9nKCkubG9nKAorCQkJCQluZXcgU3RhdHVzKElTdGF0dXMuRVJST1IsIHBsdWdpbi5nZXRCdW5kbGUoKS5nZXRTeW1ib2xpY05hbWUoKSwKKwkJCQkJCQkwLCBtZXNzYWdlLCBleGNlcHRpb24pKTsKKwkJfQorCQllbHNlIHsKKwkJCS8vIE5vCisJCQlTeXN0ZW0ub3V0LnByaW50bG4obWVzc2FnZSk7CisJCQkvLyBFeGNlcHRpb24/CisJCQlpZiAoZXhjZXB0aW9uICE9IG51bGwpIHsKKwkJCQkvLyBZZXMKKwkJCQlTeXN0ZW0ub3V0LnByaW50bG4oZXhjZXB0aW9uLmdldE1lc3NhZ2UoKSk7CisJCQl9IC8vIGlmIAorCQl9CisJfSAvLyBsb2dFcnJvcgorCisJLyoqCisJICogTG9nIGluZm9ybWF0aW9uIHRvIHRoZSBJTG9nIGZvciB0aGlzIHBsdWdpbgorCSAqIAorCSAqIEBwYXJhbSBtZXNzYWdlCisJICogICAgICAgICAgICB0aGUgbG9jYWxpemVkIGluZm9ybWF0aW9uIG1lc3NhZ2UgdGV4dAorCSAqIEBwYXJhbSBleGNlcHRpb24KKwkgKiAgICAgICAgICAgIHRoZSBhc3NvY2lhdGVkIGV4Y2VwdGlvbiwgb3IgbnVsbAorCSAqLworCXB1YmxpYyBzdGF0aWMgdm9pZCBsb2dJbmZvcm1hdGlvbihTdHJpbmcgbWVzc2FnZSwgVGhyb3dhYmxlIGV4Y2VwdGlvbikgeworCQkvLyBEbyB3ZSBoYXZlIGEgcGx1Z2luPworCQlpZiAocGx1Z2luICE9IG51bGwpIHsKKwkJCS8vIFllcworCQkJcGx1Z2luLmdldExvZygpLmxvZygKKwkJCQkJbmV3IFN0YXR1cyhJU3RhdHVzLklORk8sIHBsdWdpbi5nZXRCdW5kbGUoKS5nZXRTeW1ib2xpY05hbWUoKSwKKwkJCQkJCQkwLCBtZXNzYWdlLCBleGNlcHRpb24pKTsKKwkJfQorCQllbHNlIHsKKwkJCS8vIE5vCisJCQlTeXN0ZW0ub3V0LnByaW50bG4obWVzc2FnZSk7CisJCQkvLyBFeGNlcHRpb24/CisJCQlpZiAoZXhjZXB0aW9uICE9IG51bGwpIHsKKwkJCQkvLyBZZXMKKwkJCQlTeXN0ZW0ub3V0LnByaW50bG4oZXhjZXB0aW9uLmdldE1lc3NhZ2UoKSk7CisJCQl9IC8vIGlmIAorCQl9CisJfSAvLyBsb2dJbmZvcm1hdGlvbgorCQorCQorCS8qKgorCSAqIExvZyBpbmZvcm1hdGlvbiB0byB0aGUgSUxvZyBmb3IgdGhpcyBwbHVnaW4KKwkgKiBUaGUgbWV0aG9kIGlzIG92ZXJsb2FkZWQgdG8gYWxsb3cgZm9yIGxvZ0luZm9ybWF0aW9uIHdpdGhvdXQgYW4gZXJyb3IgCisJICogbWV0aG9kIHNldHMgdGhlIGVycm9yIHRvIG51bGwuIFRoaXMgc2hvdWxkIGJlIHVzZWQgaW5zdGVhZCBvZiBTeXN0ZW0ub3V0LnByaW50bG4KKwkgKiB0aHJvdWdob3V0IHRoZSBjb2RlLgorCSAqIEBwYXJhbSBtZXNzYWdlCisJICogICAgICAgICAgICB0aGUgbG9jYWxpemVkIGluZm9ybWF0aW9uIG1lc3NhZ2UgdGV4dAorCSAqCisJICovCisJcHVibGljIHN0YXRpYyB2b2lkIGxvZ0luZm9ybWF0aW9uKFN0cmluZyBtZXNzYWdlKSB7CisJCS8vIERvIHdlIGhhdmUgYSBwbHVnaW4/CisJCWlmIChwbHVnaW4gIT0gbnVsbCkgeworCQkJLy8gWWVzCisJCQlwbHVnaW4uZ2V0TG9nKCkubG9nKAorCQkJCQluZXcgU3RhdHVzKElTdGF0dXMuSU5GTywgcGx1Z2luLmdldEJ1bmRsZSgpLmdldFN5bWJvbGljTmFtZSgpLAorCQkJCQkJCTAsIG1lc3NhZ2UsIG51bGwpKTsKKwkJfQorCQllbHNlIHsKKwkJCS8vIE5vCisJCQlTeXN0ZW0ub3V0LnByaW50bG4obWVzc2FnZSk7CisJCX0KKwl9IC8vIGxvZ0luZm9ybWF0aW9uCisKKwkKKwkKK30gLy8gQ29yZVBsdWdpbgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9TVEVNQmluYXJ5UmVzb3VyY2VGYWN0b3J5SW1wbC5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9TVEVNQmluYXJ5UmVzb3VyY2VGYWN0b3J5SW1wbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUyMDdjMWUKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL1NURU1CaW5hcnlSZXNvdXJjZUZhY3RvcnlJbXBsLmphdmEKQEAgLTAsMCArMSw0NSBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmU7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTEgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlVSSTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUucmVzb3VyY2UuUmVzb3VyY2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnJlc291cmNlLmltcGwuQmluYXJ5UmVzb3VyY2VJbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS54bWkuaW1wbC5YTUlSZXNvdXJjZUZhY3RvcnlJbXBsOworCisvKioKKyAqIEEgYmluYXJ5IHJlc291cmNlIGZhY3RvciB1c2VkIHRvIGNyZWF0ZSBjb21wYWN0IHJlc291cmNlcyBzdWl0YWJsZSBmb3Igc2VuZGluZworICogYWNyb3NzIG5ldHdvcmtzIGV0Yy4KKyAqLworCitwdWJsaWMgY2xhc3MgU1RFTUJpbmFyeVJlc291cmNlRmFjdG9yeUltcGwgZXh0ZW5kcyBYTUlSZXNvdXJjZUZhY3RvcnlJbXBsIHsKKworCXB1YmxpYyBzdGF0aWMgU1RFTUJpbmFyeVJlc291cmNlRmFjdG9yeUltcGwgSU5TVEFOQ0UgPSBuZXcgU1RFTUJpbmFyeVJlc291cmNlRmFjdG9yeUltcGwoKTsKKworCisJLyoqCisJICogcHJpdmF0ZSBzbyBvbmx5IGEgc2luZ2xldG9uIGluc3RhbmNlIGlzIGNyZWF0ZWQKKwkgKiAKKwkgKiBAc2VlICNJTlNUQU5DRQorCSAqLworCXByaXZhdGUgU1RFTUJpbmFyeVJlc291cmNlRmFjdG9yeUltcGwoKSB7CisJCXN1cGVyKCk7CisJfQorCisJQE92ZXJyaWRlCisJcHVibGljIFJlc291cmNlIGNyZWF0ZVJlc291cmNlKFVSSSB1cmkpIHsKKwkJUmVzb3VyY2UgbmV3UmVzID0gbmV3IEJpbmFyeVJlc291cmNlSW1wbCh1cmkpOworCQlyZXR1cm4gbmV3UmVzOworCX0gLy8gY3JlYXRlUmVzb3VyY2UKKwkKKwkKK30gLy8gU1RFTUJpbmFyeVJlc291cmNlRmFjdG9yeUltcGwKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvU1RFTVVSSS5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9TVEVNVVJJLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmE2ZTFkYQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvU1RFTVVSSS5qYXZhCkBAIC0wLDAgKzEsMjA1IEBACisvLyBTVEVNVVJJLmphdmEKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5jb3JlOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAKKyAqIENvcHlyaWdodCAoYykgMjAwNiwgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4gCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIAorICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wIAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQgCisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbCAKKyAqIAorICogQ29udHJpYnV0b3JzOiAKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGphdmEudXRpbC5SYW5kb207CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JV29ya3NwYWNlOworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklXb3Jrc3BhY2VSb290OworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLlJlc291cmNlc1BsdWdpbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVBhdGg7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlVSSTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZXhwZXJpbWVudC5FeHBlcmltZW50OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5FZGdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5HcmFwaDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguTm9kZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuTW9kZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNjZW5hcmlvLlNjZW5hcmlvOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zZXF1ZW5jZXIuU2VxdWVuY2VyOworCisvKioKKyAqIFRoaXMgY2xhc3MgY29udGFpbnMgc3RhbmRhcmQge0BsaW5rIFVSSX0gY29uc3RhbnRzIGZvciBTVEVNLgorICovCitwdWJsaWMgY2xhc3MgU1RFTVVSSSB7CisKKwlwcml2YXRlIHN0YXRpYyBSYW5kb20gcmFuZCA9IG5ldyBSYW5kb20oU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCkpOworCQorCS8qKgorCSAqIFRoZSB0eXBlIHtAbGluayBVUkl9IG9mIGEgU1RFTSB7QGxpbmsgU2NlbmFyaW99LiB7QHZhbHVlfQorCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgVVJJIFNDRU5BUklPX1RZUEVfVVJJID0gY3JlYXRlVHlwZVVSSSgiU2NlbmFyaW8iKTsKKworCS8qKgorCSAqIFRoZSB0eXBlIHtAbGluayBVUkl9IG9mIGEgU1RFTSB7QGxpbmsgTW9kZWx9LiB7QHZhbHVlfQorCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgVVJJIE1PREVMX1RZUEVfVVJJID0gY3JlYXRlVHlwZVVSSSgiTW9kZWwiKTsKKworCS8qKgorCSAqIFRoZSB0eXBlIHtAbGluayBVUkl9IG9mIGEgU1RFTSB7QGxpbmsgR3JhcGh9LiB7QHZhbHVlfQorCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgVVJJIEdSQVBIX1RZUEVfVVJJID0gY3JlYXRlVHlwZVVSSSgiR3JhcGgiKTsKKworCS8qKgorCSAqIFRoZSB0eXBlIHtAbGluayBVUkl9IG9mIGEgU1RFTSB7QGxpbmsgTm9kZX0uIHtAdmFsdWV9CisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBVUkkgTk9ERV9UWVBFX1VSSSA9IGNyZWF0ZVR5cGVVUkkoIk5vZGUiKTsKKworCS8qKgorCSAqIFRoZSB0eXBlIHtAbGluayBVUkl9IG9mIGEgU1RFTSB7QGxpbmsgRWRnZX0uIHtAdmFsdWV9CisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBVUkkgRURHRV9UWVBFX1VSSSA9IGNyZWF0ZVR5cGVVUkkoIkVkZ2UiKTsKKworCS8qKgorCSAqIFRoZSB0eXBlIHtAbGluayBVUkl9IG9mIGEgU1RFTSB7QGxpbmsgU2VxdWVuY2VyfS4ge0B2YWx1ZX0KKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIFVSSSBTRVFVRU5DRVJfVFlQRV9VUkkgPSBjcmVhdGVUeXBlVVJJKCJTZXF1ZW5jZXIiKTsKKworCS8qKgorCSAqIFRoZSB0eXBlIHtAbGluayBVUkl9IG9mIGEgU1RFTSB7QGxpbmsgRXhwZXJpbWVudH0uIHtAdmFsdWV9CisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBVUkkgRVhQRVJJTUVOVF9UWVBFX1VSSSA9IGNyZWF0ZVR5cGVVUkkoIkV4cGVyaW1lbnQiKTsKKworCS8qKgorCSAqIFRoZSB0eXBlIHtAbGluayBVUkl9IG9mIGEgU1RFTQorCSAqIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuTW9kaWZpZXJ9LiB7QHZhbHVlfQorCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgVVJJIE1PRElGSUVSX1RZUEVfVVJJID0gY3JlYXRlVHlwZVVSSSgiTW9kaWZpZXIiKTsKKworCS8qKgorCSAqIFRoZSB0eXBlIHtAbGluayBVUkl9IG9mIGEgU1RFTQorCSAqIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUudHJpZ2dlci5UcmlnZ2VyfS4ge0B2YWx1ZX0KKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIFVSSSBUUklHR0VSX1RZUEVfVVJJID0gY3JlYXRlVHlwZVVSSSgiVHJpZ2dlciIpOworCisJLyoqCisJICogVGhlIHR5cGUge0BsaW5rIFVSSX0gb2YgYSBTVEVNCisJICoge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS50cmlnZ2VyLlByZWRpY2F0ZX0uIHtAdmFsdWV9CisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBVUkkgUFJFRElDQVRFX1RZUEVfVVJJID0gY3JlYXRlVHlwZVVSSSgiUHJlZGljYXRlIik7CisKKwkvKioKKwkgKiBUaGUgdHlwZSB7QGxpbmsgVVJJfSBvZiBhIFNURU0KKwkgKiB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNvbHZlci5Tb2x2ZXJ9LiB7QHZhbHVlfQorCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgVVJJIFNPTFZFUl9UWVBFX1VSSSA9IGNyZWF0ZVR5cGVVUkkoIlNvbHZlciIpOworCisJCisJLyoqCisJICogVGhlIHR5cGUge0BsaW5rIFVSSX0gb2YgYSBTVEVNIHtAbGluayBMb2dnZXJ9LiB7QHZhbHVlfQorCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgVVJJIExPR0dFUl9UWVBFX1VSSSA9IGNyZWF0ZVR5cGVVUkkoIkxvZ2dlciIpOworCQorCS8qKgorCSAqIFRoZSB0eXBlIHtAbGluayBVUkl9IG9mIGEgU1RFTQorCSAqIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLklkZW50aWZpYWJsZX0uIHtAdmFsdWV9CisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBVUkkgSURFTlRJRklBQkxFX1RZUEVfVVJJID0gY3JlYXRlVHlwZVVSSSgiSWRlbnRpZmlhYmxlIik7CisJCisJLyoqCisJICogQ3JlYXRlIGEgIlN0ZW0gdHlwZSIge0BsaW5rIFVSSX0KKwkgKiAKKwkgKiBAcGFyYW0gc2VnbWVudHMKKwkgKiAgICAgICAgICAgIHRoZSBzZWdtZW50cyBvZiB0aGUge0BsaW5rIFVSSX0KKwkgKiBAcmV0dXJuIGEgU1RFTSAidHlwZSIge0BsaW5rIFVSSX0KKwkgKi8KKwlwdWJsaWMgc3RhdGljIFVSSSBjcmVhdGVUeXBlVVJJKGZpbmFsIFN0cmluZyBzZWdtZW50cykgeworCQlyZXR1cm4gY3JlYXRlKENvbnN0YW50cy5TVEVNX1RZUEVfU0NIRU1FLCBzZWdtZW50cyk7CisJfSAvLyBjcmVhdGVUeXBlVVJJCisKKwkvKioKKwkgKiBAcGFyYW0gc2VnbWVudHMKKwkgKiAgICAgICAgICAgIHRoZSBzZWdtZW50cyBvZiB0aGUge0BsaW5rIFVSSX0KKwkgKiBAcmV0dXJuIGEgU1RFTSB7QGxpbmsgVVJJfQorCSAqLworCXB1YmxpYyBzdGF0aWMgVVJJIGNyZWF0ZVVSSShmaW5hbCBTdHJpbmcgc2VnbWVudHMpIHsKKwkJcmV0dXJuIGNyZWF0ZShDb25zdGFudHMuU1RFTV9TQ0hFTUUsIHNlZ21lbnRzKTsKKwl9CisKKwkvKioKKwkgKiBAcGFyYW0gc2NoZW1lCisJICogICAgICAgICAgICB0aGUgc2NoZW1lIG9mIHRoZSB7QGxpbmsgVVJJfQorCSAqIEBwYXJhbSBzZWdtZW50cworCSAqICAgICAgICAgICAgdGhlIHNlZ21lbnRzIG9mIHRoZSBVUkkKKwkgKiBAc2VlIENvbnN0YW50cyNTVEVNX1VSSV9BVVRIT1JJVFkKKwkgKiBAcmV0dXJuIGEgU1RFTSB7QGxpbmsgVVJJfSB3aXRoIHRoZSBidWlsdC1pbiAiU1RFTSIgQXV0aG9yaXR5CisJICovCisJcHVibGljIHN0YXRpYyBVUkkgY3JlYXRlKGZpbmFsIFN0cmluZyBzY2hlbWUsIGZpbmFsIFN0cmluZyBzZWdtZW50cykgeworCQlyZXR1cm4gY3JlYXRlKHNjaGVtZSwgQ29uc3RhbnRzLlNURU1fVVJJX0FVVEhPUklUWSwgc2VnbWVudHMpOworCX0gLy8gY3JlYXRlCisKKwkvKioKKwkgKiBDcmVhdGUgYSBTVEVNIHtAbGluayBVUkl9CisJICogCisJICogQHBhcmFtIHNjaGVtZQorCSAqICAgICAgICAgICAgdGhlIHNjaGVtZSBvZiB0aGUge0BsaW5rIFVSSX0KKwkgKiBAcGFyYW0gYXV0aG9yaXR5CisJICogICAgICAgICAgICB0aGUgImF1dGhvcml0eSIgb2YgdGhlIHtAbGluayBVUkl9CisJICogQHBhcmFtIHNlZ21lbnRzCisJICogICAgICAgICAgICB0aGUgc2VnbWVudHMgb2YgdGhlIHtAbGluayBVUkl9CisJICogQHNlZSBDb25zdGFudHMjU1RFTV9VUklfQVVUSE9SSVRZCisJICogQHJldHVybiBhIFNURU0ge0BsaW5rIFVSSX0KKwkgKi8KKwlwdWJsaWMgc3RhdGljIFVSSSBjcmVhdGUoZmluYWwgU3RyaW5nIHNjaGVtZSwgZmluYWwgU3RyaW5nIGF1dGhvcml0eSwKKwkJCWZpbmFsIFN0cmluZyBzZWdtZW50cykgeworCQkKKwkJZmluYWwgU3RyaW5nQnVpbGRlciBzYiA9IG5ldyBTdHJpbmdCdWlsZGVyKCk7CisJCWlmKHNlZ21lbnRzLmluZGV4T2Yoc2NoZW1lKSE9MCkgeworCQkJc2IuYXBwZW5kKHNjaGVtZSk7CisJCQlzYi5hcHBlbmQoIjovLyIpOworCQl9CisJCWlmKHNlZ21lbnRzLmluZGV4T2YoYXV0aG9yaXR5KT09LTEpIHsKKwkJCXNiLmFwcGVuZChhdXRob3JpdHkpOworCQkJc2IuYXBwZW5kKCIvIik7CisJCX0KKwkJCisJCXNiLmFwcGVuZChzZWdtZW50cyk7CisJCQorCQlyZXR1cm4gVVJJLmNyZWF0ZVVSSShzYi50b1N0cmluZygpKTsKKwl9IC8vIGNyZWF0ZQorCQorCS8qKgorCSAqIGdlbmVyYXRlVW5pcXVlUGFydC4gVXNlZCB0byBhZGQgYSB1bmlxdWUgc2VnbWVudCB0byBhbnkgVVJJCisJICogQHJldHVybiBTdHJpbmcgUmFuZG9tIDY0IGJpdCB1cHBlciBjYXNlIEhFWAorCSAqLworCXB1YmxpYyBzdGF0aWMgU3RyaW5nIGdlbmVyYXRlVW5pcXVlUGFydCgpIHsKKwkJbG9uZyBsID0gcmFuZC5uZXh0TG9uZygpOworCQlsb25nIG5vdyA9IFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpOworCQlsb25nIHI9IGwrbm93OworCQlyZXR1cm4gTG9uZy50b0hleFN0cmluZyhyKS50b1VwcGVyQ2FzZSgpOworCX0KKwkKKwkvKioKKwkgKiBDb252ZXJ0cyBVUkkncyBvZiB0aGUgZm9ybSAiZmlsZTovLy4uLiIgdG8gInBsYXRmb3JtOi8vLi4uIgorCSAqIEBwYXJhbSBpbiBVUkkgdG8gY29udmVydAorCSAqIEByZXR1cm4gQ29udmVydGVkIFVSSSwgb3IgdGhlIHNhbWUgYXMgaW5wdXQgaWYgdGhlIFVSSSBpcyBhbHJlYWR5IG5vcm1hbGl6ZWQKKwkgKi8KKwkKKwlwdWJsaWMgc3RhdGljIFVSSSBub3JtYWxpemUoVVJJIGluKSB7CisJCWlmKGluLnNjaGVtZSgpLmVxdWFscygicGxhdGZvcm0iKSkgcmV0dXJuIGluOworCQlpZihpbi5zY2hlbWUoKS5lcXVhbHMoImZpbGUiKSkgeworCQkJLy8gQ2hlY2sgaWYgd2UgY2FuIGZpbmQgdGhlIHdvcmtzcGFjZSBwYXRoIGluIHRoZSBmaWxlIFVSSS4KKwkJCUlXb3Jrc3BhY2Ugd29ya3NwYWNlID0gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpOworCQkJSVdvcmtzcGFjZVJvb3Qgcm9vdCA9IHdvcmtzcGFjZS5nZXRSb290KCk7CisJCQlJUGF0aCBsb2NhdGlvbiA9IHJvb3QuZ2V0TG9jYXRpb24oKTsKKwkJCQorCQkJaW50IGluZCA9IGluLnRvU3RyaW5nKCkuaW5kZXhPZihsb2NhdGlvbi50b1N0cmluZygpKTsKKwkJCWlmKGluZCA+LTEpIHsKKwkJCQlTdHJpbmcgcmVzdCA9IGluLnRvU3RyaW5nKCkuc3Vic3RyaW5nKGluZCtsb2NhdGlvbi50b09TU3RyaW5nKCkubGVuZ3RoKCkpOworCQkJCVVSSSByZXN1bHQgPSBVUkkuY3JlYXRlUGxhdGZvcm1SZXNvdXJjZVVSSShyZXN0LCBmYWxzZSk7CisJCQkJcmV0dXJuIHJlc3VsdDsKKwkJCX0KKwkJfQorCQkvLyBVbmFibGUgdG8gY29udmVydCBmaWxlIFVSSSwgdGhpcyBjb3VsZCBiZSBhIFVSSSB0byBhIFNURU0gbGlicmFyeSBvYmplY3QuIFdlIGRvbid0IGNvbnZlcnQgdGhvc2UKKwkJcmV0dXJuIGluOworCX0KK30gLy8gU1RFTVVSSQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9TVEVNWE1JUmVzb3VyY2VGYWN0b3J5SW1wbC5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9TVEVNWE1JUmVzb3VyY2VGYWN0b3J5SW1wbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZlNTkzMmMKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL1NURU1YTUlSZXNvdXJjZUZhY3RvcnlJbXBsLmphdmEKQEAgLTAsMCArMSwxMTkgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5jb3JlOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247CitpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuTWFwOworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuQWRhcHRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuVVJJOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5pbXBsLkJhc2ljRU9iamVjdEltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnJlc291cmNlLlJlc291cmNlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS54bWkuWE1MSGVscGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS54bWkuaW1wbC5YTUlIZWxwZXJJbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS54bWkuaW1wbC5YTUlSZXNvdXJjZUZhY3RvcnlJbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS54bWkuaW1wbC5YTUlSZXNvdXJjZUltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5JZGVudGlmaWFibGU7CisKKy8qKgorICogVGhpcyBjbGFzcyBpcyB0aGUge0BsaW5rIFhNSVJlc291cmNlRmFjdG9yeUltcGx9IGZvciB0aGUgU1RFTSBwcm9qZWN0LiBJdCdzCisgKiBwdXJwb3NlIGlzIHRvIHByb3ZpZGUgYW4gaW1wbGVtZW50YXRpb24gb2Yge0BsaW5rIFhNSVJlc291cmNlSW1wbH0gd2hvc2UKKyAqIHtAbGluayBYTUxIZWxwZXJ9IGhhcyBhIGN1c3RvbWl6ZWQgaW1wbGVtZW50YXRpb24gb2YKKyAqIHtAbGluayBYTUxIZWxwZXIjZ2V0SFJFRihFT2JqZWN0KX0gdGhhdCBmaWx0ZXJzIHNlcmlhbGl6ZWQge0BsaW5rIFVSSX0ncyBzdWNoCisgKiB0aGF0IHRoZXkgcmVtYWluIHBsYXRmb3JtIHJlbGF0aXZlIChpLmUuLAorICogInBsYXRmb3JtOi9wcm9qZWN0bmFtZS9mb28vYmFyLi4uIiksIG9yIGlmIGFic29sdXRlLCBhcmUgZGVyZXNvbHZlZCBhZ2FpbnN0CisgKiB0aGUge0BsaW5rIFJlc291cmNlfSdzIHtAbGluayBVUkl9IHNvIHRoZXkgcmVtYWluIGludGVybmFsbHkgcmVsYXRpdmUgdG8gdGhlCisgKiBjb250YWluaW5nIGZpbGUuCisgKiA8cD4KKyAqIFRoaXMgaXMgaW1wb3J0YW50IGFzIHRoZSBzZXJpYWxpemVkIHtAbGluayBJZGVudGlmaWFibGV9cyBuZWVkIHRvIGJlIGFibGUgdG8KKyAqIGJlIGNvcGllZCwgbW92ZWQgYW5kIGV4cG9ydGVkLiBJZiB0aGVpciByZWZlcmVuY2VzIHRvIG90aGVyIHNlcmlhbGl6ZWQKKyAqIHtAbGluayBJZGVudGlmaWFibGV9cyB3ZXJlIHJlbGF0aXZlIHRvIGZpbGUgbG9jYXRpb24gcmF0aGVyIHRoYW4gdG8gdGhlCisgKiBwbGF0Zm9ybSwgc3VjaCBvcGVyYXRpb25zIHdvdWxkIGJyZWFrIHRoZSBsaW5rcy4gVGh1cywgYWxsIHNlcmlhbGl6YXRpb24KKyAqIG9wZXJhdGlvbnMgdGhlIGludm9sdmUge0BsaW5rIElkZW50aWZpYWJsZX1zIG11c3QgZW1wbG95IHRoaXMgY2xhc3MuIExvb2sgZm9yCisgKiByZWZlcmVuY2VzIHRvIHtAbGluayAjSU5TVEFOQ0V9IHNvIHNlZSBob3cgdGhpcyBpcyBhY2NvbXBsaXNoZWQuCisgKi8KK3B1YmxpYyBjbGFzcyBTVEVNWE1JUmVzb3VyY2VGYWN0b3J5SW1wbCBleHRlbmRzIFhNSVJlc291cmNlRmFjdG9yeUltcGwgeworCisJcHVibGljIHN0YXRpYyBTVEVNWE1JUmVzb3VyY2VGYWN0b3J5SW1wbCBJTlNUQU5DRSA9IG5ldyBTVEVNWE1JUmVzb3VyY2VGYWN0b3J5SW1wbCgpOworCisKKwlwcml2YXRlIEFycmF5TGlzdDxBZGFwdGVyPiBtb2RpZmljYXRpb25BZGFwdGVycyA9IG5ldyBBcnJheUxpc3Q8QWRhcHRlcj4oKTsKKwkKKwkvKioKKwkgKiBwcml2YXRlIHNvIG9ubHkgYSBzaW5nbGV0b24gaW5zdGFuY2UgaXMgY3JlYXRlZAorCSAqIAorCSAqIEBzZWUgI0lOU1RBTkNFCisJICovCisJcHJpdmF0ZSBTVEVNWE1JUmVzb3VyY2VGYWN0b3J5SW1wbCgpIHsKKwkJc3VwZXIoKTsKKwl9CisKKwlAT3ZlcnJpZGUKKwlwdWJsaWMgUmVzb3VyY2UgY3JlYXRlUmVzb3VyY2UoVVJJIHVyaSkgeworCQkJCisJCVJlc291cmNlIG5ld1JlcyA9IG5ldyBYTUlSZXNvdXJjZUltcGwodXJpKSB7CisJCQlAT3ZlcnJpZGUKKwkJCXByb3RlY3RlZCBYTUxIZWxwZXIgY3JlYXRlWE1MSGVscGVyKCkgeworCQkJCXJldHVybiBuZXcgWE1JSGVscGVySW1wbCgpIHsKKwkJCQkJQE92ZXJyaWRlCisJCQkJCXB1YmxpYyBTdHJpbmcgZ2V0SFJFRihFT2JqZWN0IG9iaikgeworCQkJCQkJaWYgKG9iaiBpbnN0YW5jZW9mIElkZW50aWZpYWJsZSkgeworCQkJCQkJCS8vIFllcworCQkJCQkJCWZpbmFsIElkZW50aWZpYWJsZSBpZGVudGlmaWFibGUgPSAoSWRlbnRpZmlhYmxlKSBvYmo7CisJCQkJCQkJZmluYWwgVVJJIHVyaSA9IGlkZW50aWZpYWJsZS5nZXRVUkkoKTsKKwkJCQkJCQlpZih1cmkgPT0gbnVsbCkgcmV0dXJuIG51bGw7CisJCQkJCQkJCQorCQkJCQkJCS8vIElzIGl0IGEgcGxhdGZvcm0gVVJJPworCQkJCQkJCWlmICh1cmkuaXNQbGF0Zm9ybSgpKSB7CisJCQkJCQkJCS8vIFllcworCQkJCQkJCQlyZXR1cm4gdXJpLnRvU3RyaW5nKCkgKyAiIy8iOworCQkJCQkJCX0gLy8gaWYgcGxhdGZvcm0gVVJJPworCisJCQkJCQkJLy8gSXMgaXQgYW4gdW5yZXNvbHZlZCBwcm94eT8KKwkJCQkJCQllbHNlIGlmIChpZGVudGlmaWFibGUuZUlzUHJveHkoKSkgeworCQkJCQkJCQkvLyBZZXMKKwkJCQkJCQkJcmV0dXJuICgoQmFzaWNFT2JqZWN0SW1wbCkgaWRlbnRpZmlhYmxlKQorCQkJCQkJCQkJCS5lUHJveHlVUkkoKS50b1N0cmluZygpOworCQkJCQkJCX0gLy8gaWYgdW5yZXNvbHZlZCBwcm94eQorCisJCQkJCQkJZWxzZSB7CisJCQkJCQkJCS8vIE5vCisJCQkJCQkJCS8vIFJlc29sdmUgaXQgYWdhaW5zdCB0aGUgVVJJIG9mIHRoZQorCQkJCQkJCQkvLyBpZGVudGlmaWFibGUncyByZXNvdXJjZQorCQkJCQkJCQlkZXJlc29sdmUgPSB0cnVlOworCQkJCQkJCQlyZXNvdXJjZVVSSSA9IGlkZW50aWZpYWJsZS5lUmVzb3VyY2UoKS5nZXRVUkkoKTsKKwkJCQkJCQkJcmV0dXJuIHN1cGVyLmdldEhSRUYob2JqKTsKKwkJCQkJCQl9IC8vIGVsc2UKKworCQkJCQkJfSAvLyBpZiBJZGVudGlmaWFibGUKKwkJCQkJCWVsc2UKKwkJCQkJCQlyZXR1cm4gc3VwZXIuZ2V0SFJFRihvYmopOworCQkJCQl9IC8vIGdldEhSRUYKKwkJCQkJCisJCQkJfTsKKwkJCX0gLy8gY3JlYXRlWE1MSGVscGVyCisJCQkKKwkJCUBPdmVycmlkZQorCQkJcHVibGljIHZvaWQgbG9hZChNYXA8PywgPz4gb3B0aW9ucykgdGhyb3dzIElPRXhjZXB0aW9uIHsKKwkJCQlzdXBlci5sb2FkKG9wdGlvbnMpOworCQkJfQorCQl9OworCQlyZXR1cm4gbmV3UmVzOworCX0gLy8gY3JlYXRlUmVzb3VyY2UKKwkKKwkKKwlwdWJsaWMgdm9pZCBhZGRNb2RpZmljYXRpb25DaGFuZ2VBZGFwdGVyKEFkYXB0ZXIgbW9kaWZpY2F0aW9uQWRhcHRlcikgeworCQltb2RpZmljYXRpb25BZGFwdGVycy5hZGQobW9kaWZpY2F0aW9uQWRhcHRlcik7CisJfQorfSAvLyBTVEVNWE1JUmVzb3VyY2VGYWN0b3J5SW1wbApkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9VdGlsaXR5LmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL1V0aWxpdHkuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYmEzNTMzCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9VdGlsaXR5LmphdmEKQEAgLTAsMCArMSw0MDEgQEAKKy8vIFV0aWxpdHkuamF2YQ0KK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5jb3JlOw0KKw0KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorICogQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLg0KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMNCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjANCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdA0KKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sDQorICoNCisgKiBDb250cmlidXRvcnM6DQorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbg0KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KKw0KK2ltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOw0KK2ltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtOw0KK2ltcG9ydCBqYXZhLmlvLk91dHB1dFN0cmVhbTsNCitpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsNCitpbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7DQoraW1wb3J0IGphdmEudXRpbC5MaXN0Ow0KK2ltcG9ydCBqYXZhLnV0aWwuTWFwOw0KKw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuRUxpc3Q7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5VUkk7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0Ow0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUucmVzb3VyY2UuUmVzb3VyY2U7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5yZXNvdXJjZS5SZXNvdXJjZVNldDsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnJlc291cmNlLmltcGwuUmVzb3VyY2VTZXRJbXBsOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUueG1pLlhNTFJlc291cmNlOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5kaWFsb2dzLk1lc3NhZ2VEaWFsb2c7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uSWRlbnRpZmlhYmxlOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5EaXNwbGF5Ow0KK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5JV29ya2JlbmNoV2luZG93Ow0KK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5QbGF0Zm9ybVVJOw0KKw0KKy8qKg0KKyAqIFRoaXMgY2xhc3MgY29udGFpbnMgY29tbW9uIHV0aWxpdHkgbWV0aG9kcyB1c2VkIGluIFNURU0uDQorICovDQorcHVibGljIGNsYXNzIFV0aWxpdHkgew0KKw0KKwkvKioNCisJICogRU1GIFNhdmUgT3B0aW9ucywgZm9yIHByb3Blcmx5IHNlcmlhbGl6aW5nIHRvIFVURi04DQorCSAqLw0KKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBNYXA8U3RyaW5nLFN0cmluZz4gRU1GX1NBVkVfT1BUSU9OUyANCisJCT0gbmV3IEhhc2hNYXA8U3RyaW5nLFN0cmluZz4oKTsNCisJc3RhdGljIHsNCisJCUVNRl9TQVZFX09QVElPTlMucHV0KFhNTFJlc291cmNlLk9QVElPTl9FTkNPRElORywgIlVURi04Iik7DQorCX0NCisJDQorCXB1YmxpYyBmaW5hbCBzdGF0aWMgU3RyaW5nIE5FU1RJTkdfV0FSTklORyA9ICJXYXJuaW5nLCBwb3NzaWJsZSBzY2VuYXJpbyBpbml0aWFsaXphdGlvbiBwcm9ibGVtIGRldGVjdGVkLiBDaGVjayB0aGUgbmVzdGluZyBvZiB5b3VyIG1vZGVscyI7DQorCXB1YmxpYyBmaW5hbCBzdGF0aWMgU3RyaW5nIFVSSV9XQVJOSU5HID0gIldhcm5pbmcsIFVSSSBkb2VzIG5vdCBleGlzdCBpbiBHcmFwaC4gQ2hlY2sgdGhlIGluZmVjdG9yL2lubm9jdWxhdG9yIFVSSXMgeW91ciBtb2RlbHMuICI7DQorCQ0KKwkNCisJLyoqDQorCSAqIENhY2hlZCByZXNvdXJjZSBzZXQNCisJICovDQorDQorCXB1YmxpYyBzdGF0aWMgUmVzb3VyY2VTZXQgcmVzb3VyY2VTZXQ7DQorCQ0KKwlzdGF0aWMgew0KKwkJcmVzb3VyY2VTZXQgPSBuZXcgUmVzb3VyY2VTZXRJbXBsKCk7DQorCQlyZXNvdXJjZVNldC5nZXRSZXNvdXJjZUZhY3RvcnlSZWdpc3RyeSgpLmdldEV4dGVuc2lvblRvRmFjdG9yeU1hcCgpLnB1dCgiKiIsIFNURU1YTUlSZXNvdXJjZUZhY3RvcnlJbXBsLklOU1RBTkNFKTsNCisJCXJlc291cmNlU2V0LmdldFJlc291cmNlRmFjdG9yeVJlZ2lzdHJ5KCkuZ2V0UHJvdG9jb2xUb0ZhY3RvcnlNYXAoKS5wdXQoInBsYXRmb3JtIiwgU1RFTVhNSVJlc291cmNlRmFjdG9yeUltcGwuSU5TVEFOQ0UpOw0KKwl9DQorCQ0KKwkvKioNCisJICogQHBhcmFtIGlkZW50aWZhYmxlVVJJDQorCSAqICAgICAgICAgICAgdGhlIHtAbGluayBVUkl9IG9mIGZpbGUgd2l0aCBhIHNlcmlhbGl6ZWQge0BsaW5rIElkZW50aWZpYWJsZX0NCisJICogQHJldHVybiB0aGUge0BsaW5rIElkZW50aWZpYWJsZX0gZGUtc2VyaWFsaXplZCBmcm9tIHRoZSBmaWxlLCBvcg0KKwkgKiAgICAgICAgIDxjb2RlPm51bGw8L2NvZGU+IGlmIGFuIGVycm9yIG9jY3VycmVkLg0KKwkgKi8NCisJcHVibGljIHN0YXRpYyBJZGVudGlmaWFibGUgZ2V0SWRlbnRpZmlhYmxlKGZpbmFsIFVSSSBpZGVudGlmYWJsZVVSSSkgew0KKwkJSWRlbnRpZmlhYmxlIHJldFZhbHVlID0gbnVsbDsNCisNCisJCXRyeSB7DQorCQkJVVJJIG5vcm1hbGl6ZWQgPSBTVEVNVVJJLm5vcm1hbGl6ZShpZGVudGlmYWJsZVVSSSk7DQorCQkJUmVzb3VyY2UgcmVzb3VyY2UgPSBudWxsOw0KKwkJCXN5bmNocm9uaXplZChyZXNvdXJjZVNldCkgeyAvLyBSZXNvdXJjZSBzZXQgaXMgbm90IHRocmVhZCBzYWZlDQorCQkJCXJlc291cmNlID0gcmVzb3VyY2VTZXQuZ2V0UmVzb3VyY2Uobm9ybWFsaXplZCwNCisJCQkJCXRydWUpOw0KKwkJCQ0KKwkJCQlpZihyZXNvdXJjZS5pc01vZGlmaWVkKCkpIHsJCQkJDQorCQkJCQlyZXNvdXJjZS51bmxvYWQoKTsNCisJCQkJCXJlc291cmNlLmxvYWQobnVsbCk7DQorCQkJCQlpZihyZXNvdXJjZS5nZXRFcnJvcnMoKS5zaXplKCkgPiAwKSB7DQorCQkJCQkJZm9yKFJlc291cmNlLkRpYWdub3N0aWMgZDogcmVzb3VyY2UuZ2V0RXJyb3JzKCkpIA0KKwkJCQkJCQlDb3JlUGx1Z2luLmxvZ0Vycm9yKGQuZ2V0TWVzc2FnZSgpLCBuZXcgRXhjZXB0aW9uKCkpOw0KKwkJCQkJfQ0KKwkJCQl9DQorCQkJfSAvLyBTeW5jaHJvbml6ZWQNCisJCQlFTGlzdDxFT2JqZWN0PmNvbnQgPSByZXNvdXJjZS5nZXRDb250ZW50cygpOw0KKwkJCWlmKGNvbnQuc2l6ZSgpID09IDApIHsNCisJCQkJaW50IG1heHJldHJ5ID0gMTA7DQorCQkJCXdoaWxlKGNvbnQuc2l6ZSgpID09IDAgJiYgLS1tYXhyZXRyeSA+IDApDQorCQkJCQlUaHJlYWQueWllbGQoKTsgLy8gYWxsb3cgb3RoZXIgdGhyZWFkIHRvIGxvYWQgcmVzb3VyY2UNCisJCQkJaWYoY29udC5zaXplKCkgPT0gMCkgew0KKwkJCQkJQ29yZVBsdWdpbi5sb2dFcnJvcigiVW5hYmxlIHRvIGxvYWQgY29udGVudCBmb3IgcmVzb3VyY2UgIitub3JtYWxpemVkLCBuZXcgRXhjZXB0aW9uKCkpOw0KKwkJCQkJcmV0dXJuIG51bGw7DQorCQkJCX0NCisJCQl9DQorCQkJcmV0VmFsdWUgPSAoSWRlbnRpZmlhYmxlKSBjb250LmdldCgwKTsNCisJCX0gY2F0Y2ggKGZpbmFsIEV4Y2VwdGlvbiBlKSB7DQorCQkJQ29yZVBsdWdpbi5sb2dFcnJvcigNCisJCQkJCSJUaGUgc2VyaWFsaXplZCBpbnN0YW5jZSBvZiBhbiBJZGVudGlmaWFibGUgYXQgXCIiDQorCQkJCQkJCSsgaWRlbnRpZmFibGVVUkkudG9TdHJpbmcoKQ0KKwkJCQkJCQkrICJcIiB3YXMgbm90IGZvdW5kIG9yIHdhcyBvZiB0aGUgd3JvbmcgZm9ybWF0IiwgZSk7DQorCQkJcmV0VmFsdWUgPSBudWxsOw0KKwkJfQ0KKwkJcmV0dXJuIHJldFZhbHVlOw0KKwl9IC8vIGdldElkZW50aWZpYWJsZQ0KKw0KKwkvKioNCisJICogQHBhcmFtIGlkZW50aWZhYmxlVVJJDQorCSAqICAgICAgICAgICAgdGhlIHtAbGluayBVUkl9IG9mIGZpbGUgd2l0aCBhIHNlcmlhbGl6ZWQge0BsaW5rIElkZW50aWZpYWJsZX0NCisJICogQHJldHVybiB0aGUge0BsaW5rIElkZW50aWZpYWJsZX0gZGUtc2VyaWFsaXplZCBmcm9tIHRoZSBmaWxlLCBvcg0KKwkgKiAgICAgICAgIDxjb2RlPm51bGw8L2NvZGU+IGlmIGFuIGVycm9yIG9jY3VycmVkLg0KKwkgKi8NCisJcHVibGljIHN0YXRpYyBJZGVudGlmaWFibGUgZ2V0SWRlbnRpZmlhYmxlRnJvbVN0cmVhbShmaW5hbCBVUkkgaWRlbnRpZmFibGVVUkksIElucHV0U3RyZWFtIGlzLCBNYXA8U3RyaW5nLCBPYmplY3Q+b3B0aW9ucywgYm9vbGVhbiBiaW5hcnkpIHsNCisJCUlkZW50aWZpYWJsZSByZXRWYWx1ZSA9IG51bGw7DQorDQorCQl0cnkgew0KKwkJCVVSSSBub3JtYWxpemVkID0gU1RFTVVSSS5ub3JtYWxpemUoaWRlbnRpZmFibGVVUkkpOw0KKwkJCVJlc291cmNlIHJlc291cmNlID0gbnVsbDsNCisJCQlSZXNvdXJjZVNldCBycyA9IG5ldyBSZXNvdXJjZVNldEltcGwoKTsNCisJCQkNCisJCQlpZihiaW5hcnkpIHsNCisJCQkJcnMuZ2V0UmVzb3VyY2VGYWN0b3J5UmVnaXN0cnkoKS5nZXRFeHRlbnNpb25Ub0ZhY3RvcnlNYXAoKS5wdXQoIioiLCBTVEVNQmluYXJ5UmVzb3VyY2VGYWN0b3J5SW1wbC5JTlNUQU5DRSk7DQorCQkJCXJzLmdldFJlc291cmNlRmFjdG9yeVJlZ2lzdHJ5KCkuZ2V0UHJvdG9jb2xUb0ZhY3RvcnlNYXAoKS5wdXQoInBsYXRmb3JtIiwgU1RFTUJpbmFyeVJlc291cmNlRmFjdG9yeUltcGwuSU5TVEFOQ0UpOw0KKwkJCX0gZWxzZSB7DQorCQkJCXJzLmdldFJlc291cmNlRmFjdG9yeVJlZ2lzdHJ5KCkuZ2V0RXh0ZW5zaW9uVG9GYWN0b3J5TWFwKCkucHV0KCIqIiwgU1RFTVhNSVJlc291cmNlRmFjdG9yeUltcGwuSU5TVEFOQ0UpOw0KKwkJCQlycy5nZXRSZXNvdXJjZUZhY3RvcnlSZWdpc3RyeSgpLmdldFByb3RvY29sVG9GYWN0b3J5TWFwKCkucHV0KCJwbGF0Zm9ybSIsIFNURU1YTUlSZXNvdXJjZUZhY3RvcnlJbXBsLklOU1RBTkNFKTsNCisJCQl9DQorCQkJDQorCQkJcmVzb3VyY2UgPSBycy5jcmVhdGVSZXNvdXJjZShub3JtYWxpemVkLCBudWxsKTsNCisJCQlyZXNvdXJjZS51bmxvYWQoKTsNCisJCQlyZXNvdXJjZS5sb2FkKGlzLCBvcHRpb25zKTsNCisJCQlpZihyZXNvdXJjZS5nZXRFcnJvcnMoKS5zaXplKCkgPiAwKSB7DQorCQkJCWZvcihSZXNvdXJjZS5EaWFnbm9zdGljIGQ6IHJlc291cmNlLmdldEVycm9ycygpKSANCisJCQkJCUNvcmVQbHVnaW4ubG9nRXJyb3IoZC5nZXRNZXNzYWdlKCksIG5ldyBFeGNlcHRpb24oKSk7DQorCQkJfQ0KKwkJCUVMaXN0PEVPYmplY3Q+Y29udCA9IHJlc291cmNlLmdldENvbnRlbnRzKCk7DQorCQkJaWYoY29udC5zaXplKCkgPT0gMCkgew0KKwkJCQlpbnQgbWF4cmV0cnkgPSAxMDsNCisJCQkJd2hpbGUoY29udC5zaXplKCkgPT0gMCAmJiAtLW1heHJldHJ5ID4gMCkNCisJCQkJCVRocmVhZC55aWVsZCgpOyAvLyBhbGxvdyBvdGhlciB0aHJlYWQgdG8gbG9hZCByZXNvdXJjZQ0KKwkJCQlpZihjb250LnNpemUoKSA9PSAwKSB7DQorCQkJCQlDb3JlUGx1Z2luLmxvZ0Vycm9yKCJVbmFibGUgdG8gbG9hZCBjb250ZW50IGZvciByZXNvdXJjZSAiK25vcm1hbGl6ZWQsIG5ldyBFeGNlcHRpb24oKSk7DQorCQkJCQlyZXR1cm4gbnVsbDsNCisJCQkJfQ0KKwkJCX0NCisJCQlyZXRWYWx1ZSA9IChJZGVudGlmaWFibGUpIGNvbnQuZ2V0KDApOw0KKwkJfSBjYXRjaCAoZmluYWwgRXhjZXB0aW9uIGUpIHsNCisJCQlDb3JlUGx1Z2luLmxvZ0Vycm9yKA0KKwkJCQkJIlRoZSBzZXJpYWxpemVkIGluc3RhbmNlIG9mIGFuIElkZW50aWZpYWJsZSBhdCBcIiINCisJCQkJCQkJKyBpZGVudGlmYWJsZVVSSS50b1N0cmluZygpDQorCQkJCQkJCSsgIlwiIHdhcyBub3QgZm91bmQgb3Igd2FzIG9mIHRoZSB3cm9uZyBmb3JtYXQiLCBlKTsNCisJCQlyZXRWYWx1ZSA9IG51bGw7DQorCQl9DQorCQlyZXR1cm4gcmV0VmFsdWU7DQorCX0gLy8gZ2V0SWRlbnRpZmlhYmxlDQorCQ0KKwkvKioNCisJICoNCisJICovDQorCXB1YmxpYyBzdGF0aWMgUmVzb3VyY2UgZ2V0UmVzb3VyY2UoZmluYWwgVVJJIGlkZW50aWZhYmxlVVJJKSB7DQorCQ0KKwkJdHJ5IHsNCisJCQlVUkkgbm9ybWFsaXplZCA9IFNURU1VUkkubm9ybWFsaXplKGlkZW50aWZhYmxlVVJJKTsNCisJCQlSZXNvdXJjZSByZXNvdXJjZSA9IG51bGw7DQorCQkJc3luY2hyb25pemVkKHJlc291cmNlU2V0KSB7IC8vIFJlc291cmNlIHNldCBpcyBub3QgdGhyZWFkIHNhZmUNCisJCQkJcmVzb3VyY2UgPSByZXNvdXJjZVNldC5nZXRSZXNvdXJjZShub3JtYWxpemVkLA0KKwkJCQkJdHJ1ZSk7DQorCQkJDQorCQkJCWlmKHJlc291cmNlLmlzTW9kaWZpZWQoKSkgewkJCQkNCisJCQkJCXJlc291cmNlLnVubG9hZCgpOw0KKwkJCQkJcmVzb3VyY2UubG9hZChudWxsKTsNCisJCQkJCWlmKHJlc291cmNlLmdldEVycm9ycygpLnNpemUoKSA+IDApIHsNCisJCQkJCQlmb3IoUmVzb3VyY2UuRGlhZ25vc3RpYyBkOiByZXNvdXJjZS5nZXRFcnJvcnMoKSkgDQorCQkJCQkJCUNvcmVQbHVnaW4ubG9nRXJyb3IoZC5nZXRNZXNzYWdlKCksIG5ldyBFeGNlcHRpb24oKSk7DQorCQkJCQl9DQorCQkJCX0NCisJCQl9IC8vIFN5bmNocm9uaXplZA0KKwkJCXJldHVybiByZXNvdXJjZTsNCisJCX0gY2F0Y2ggKGZpbmFsIEV4Y2VwdGlvbiBlKSB7DQorCQkJQ29yZVBsdWdpbi5sb2dFcnJvcigNCisJCQkJCSJUaGUgc2VyaWFsaXplZCBpbnN0YW5jZSBvZiBhbiBJZGVudGlmaWFibGUgYXQgXCIiDQorCQkJCQkJCSsgaWRlbnRpZmFibGVVUkkudG9TdHJpbmcoKQ0KKwkJCQkJCQkrICJcIiB3YXMgbm90IGZvdW5kIG9yIHdhcyBvZiB0aGUgd3JvbmcgZm9ybWF0IiwgZSk7DQorCQl9DQorCQlyZXR1cm4gbnVsbDsNCisJfSAvLyBnZXRJZGVudGlmaWFibGUNCisJDQorDQorCS8qKg0KKwkgKiBAcGFyYW0gaWRlbnRpZmFibGVVUkkNCisJICogICAgICAgICAgICB0aGUge0BsaW5rIFVSSX0gb2YgZmlsZSB3aXRoIGEgc2VyaWFsaXplZCB7QGxpbmsgSWRlbnRpZmlhYmxlfQ0KKwkgKiBAcmV0dXJuIHRoZSB7QGxpbmsgSWRlbnRpZmlhYmxlfSBkZS1zZXJpYWxpemVkIGZyb20gdGhlIGZpbGUsIG9yDQorCSAqICAgICAgICAgPGNvZGU+bnVsbDwvY29kZT4gaWYgYW4gZXJyb3Igb2NjdXJyZWQuDQorCSAqLw0KKwlwdWJsaWMgc3RhdGljIElkZW50aWZpYWJsZSBnZXRJZGVudGlmaWFibGVJZ25vcmVFeGNlcHRpb24oZmluYWwgVVJJIGlkZW50aWZhYmxlVVJJKSB7DQorCQlJZGVudGlmaWFibGUgcmV0VmFsdWUgPSBudWxsOw0KKw0KKwkJdHJ5IHsNCisJCQlVUkkgbm9ybWFsaXplZCA9IFNURU1VUkkubm9ybWFsaXplKGlkZW50aWZhYmxlVVJJKTsNCisJCQlSZXNvdXJjZSByZXNvdXJjZSA9IG51bGw7DQorCQkJUmVzb3VyY2VTZXQgcnMgPSBuZXcgUmVzb3VyY2VTZXRJbXBsKCk7IC8vIFRoaXMgbWV0aG9kIHVzZXMgaXQncyBvd24gcmVzb3VyY2Ugc2V0DQorCQkJcmVzb3VyY2UgPSBycy5nZXRSZXNvdXJjZShub3JtYWxpemVkLCB0cnVlKTsNCisJCQkNCisJCQlFTGlzdDxFT2JqZWN0PmNvbnQgPSByZXNvdXJjZS5nZXRDb250ZW50cygpOw0KKwkJCWlmKGNvbnQuc2l6ZSgpID09IDApIHsNCisJCQkJaW50IG1heHJldHJ5ID0gMTA7DQorCQkJCXdoaWxlKGNvbnQuc2l6ZSgpID09IDAgJiYgLS1tYXhyZXRyeSA+IDApDQorCQkJCQlUaHJlYWQueWllbGQoKTsgLy8gYWxsb3cgb3RoZXIgdGhyZWFkIHRvIGxvYWQgcmVzb3VyY2UNCisJCQkJaWYoY29udC5zaXplKCkgPT0gMCkgew0KKwkJCQkJcmV0dXJuIG51bGw7DQorCQkJCX0NCisJCQl9DQorCQkJcmV0VmFsdWUgPSAoSWRlbnRpZmlhYmxlKSBjb250LmdldCgwKTsNCisJCX0gY2F0Y2ggKGZpbmFsIEV4Y2VwdGlvbiBlKSB7DQorCQkJcmV0VmFsdWUgPSBudWxsOw0KKwkJfQ0KKwkJcmV0dXJuIHJldFZhbHVlOw0KKwl9IC8vIGdldElkZW50aWZpYWJsZQ0KKwkNCisJLyoqDQorCSAqIFNlcmlhbGl6ZSBhbiB7QGxpbmsgSWRlbnRpZmlhYmxlfQ0KKwkgKiA8cD4NCisJICogTm90ZSB0aGlzIGNvZGUgaXMgY29waWVkIGZyb20NCisJICogb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcm5hbC5kYXRhLnJlY29yZHMuUmVjb3JkLiBUaGF0IG1ldGhvZCBzaG91bGQgYmUNCisJICogcmVtb3ZlZCBhbmQgdGhpcyBvbmUgdXNlZCBpbnN0ZWFkLg0KKwkgKiANCisJICogQHBhcmFtIGlkZW50aWZpYWJsZQ0KKwkgKiAgICAgICAgICAgIHRoZSB7QGxpbmsgSWRlbnRpZmlhYmxlfSB0byBiZSBzZXJpYWxpemVkLg0KKwkgKiBAcGFyYW0gc2VyaWFsaXphdGlvblVSSQ0KKwkgKiAgICAgICAgICAgIHRoZSB7QGxpbmsgVVJJfSB0aGF0IHNwZWNpZmllcyB3aGVyZSB0aGUge0BsaW5rIElkZW50aWZpYWJsZX0NCisJICogICAgICAgICAgICBpcyB0byBiZSBzZXJpYWxpemVkLg0KKwkgKiBAdGhyb3dzIElPRXhjZXB0aW9uDQorCSAqICAgICAgICAgICAgIGlmIHRoZXJlIGlzIGEgcHJvYmxlbSBzZXJpYWxpemluZyB0aGUge0BsaW5rIElkZW50aWZpYWJsZX0NCisJICovDQorCXB1YmxpYyBzdGF0aWMgdm9pZCBzZXJpYWxpemVJZGVudGlmaWFibGUoZmluYWwgSWRlbnRpZmlhYmxlIGlkZW50aWZpYWJsZSwNCisJCQlmaW5hbCBVUkkgc2VyaWFsaXphdGlvblVSSSkgdGhyb3dzIElPRXhjZXB0aW9uIHsNCisJCWZpbmFsIExpc3Q8SWRlbnRpZmlhYmxlPiBzZXQgPSBuZXcgQXJyYXlMaXN0PElkZW50aWZpYWJsZT4oKTsNCisJCXNldC5hZGQoaWRlbnRpZmlhYmxlKTsNCisJCXNlcmlhbGl6ZUlkZW50aWZpYWJsZXMoc2V0LCBzZXJpYWxpemF0aW9uVVJJKTsNCisJfSAvLyBzZXJpYWxpemVJZGVudGlmaWFibGUNCisNCisJLyoqDQorCSAqIFNlcmlhbGl6ZSBhbiB7QGxpbmsgSWRlbnRpZmlhYmxlfQ0KKwkgKiANCisJICogQHBhcmFtIGlkZW50aWZpYWJsZQ0KKwkgKiAgICAgICAgICAgIHRoZSB7QGxpbmsgSWRlbnRpZmlhYmxlfSB0byBiZSBzZXJpYWxpemVkLg0KKwkgKiBAcGFyYW0gc2VyaWFsaXphdGlvblVSSQ0KKwkgKiAgICAgICAgICAgIHRoZSB7QGxpbmsgVVJJfSB0aGF0IHNwZWNpZmllcyB3aGVyZSB0aGUge0BsaW5rIElkZW50aWZpYWJsZX0NCisJICogICAgICAgICAgICBpcyB0byBiZSBzZXJpYWxpemVkLg0KKwkgKiBAdGhyb3dzIElPRXhjZXB0aW9uDQorCSAqICAgICAgICAgICAgIGlmIHRoZXJlIGlzIGEgcHJvYmxlbSBzZXJpYWxpemluZyB0aGUge0BsaW5rIElkZW50aWZpYWJsZX0NCisJICovDQorCXB1YmxpYyBzdGF0aWMgdm9pZCBzZXJpYWxpemVJZGVudGlmaWFibGVzKGZpbmFsIExpc3Q8SWRlbnRpZmlhYmxlPiBpZGVudGlmaWFibGVzLA0KKwkJCWZpbmFsIFVSSSBzZXJpYWxpemF0aW9uVVJJKSB0aHJvd3MgSU9FeGNlcHRpb24gew0KKw0KKwkJLy8gVGhpcyBjb2RlIGNvdWxkIGJlIHJ1bm5pbmcgInN0YW5kIGFsb25lIiAoaS5lLiwgbm90IHdpdGhpbiBlY2xpcHNlKSwNCisJCS8vIHRodXMgdGhlIGRlZmF1bHQgZmFjdG9yaWVzIGZvciB0aGUgZXh0ZW5zaW9ucyBhcmUgbm90IHJlZ2lzdGVyZWQgYXMNCisJCS8vIHRoZXkgd291bGQgZnJvbSB0aGVpciBleHRlbnNpb24gb2YNCisJCS8vICJvcmcuZWNsaXBzZS5lbWYuZWNvcmUuZXh0ZW5zaW9uX3BhcnNlciIuIFNvIHdlIG5lZWQgdG8gcmVnaXN0ZXIgdGhlbQ0KKwkJLy8gaGVyZS4NCisNCisJCVJlc291cmNlLkZhY3RvcnkuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RXh0ZW5zaW9uVG9GYWN0b3J5TWFwKCkucHV0KCIqIiwNCisJCQkJU1RFTVhNSVJlc291cmNlRmFjdG9yeUltcGwuSU5TVEFOQ0UpOw0KKwkJUmVzb3VyY2UuRmFjdG9yeS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRQcm90b2NvbFRvRmFjdG9yeU1hcCgpLnB1dCgNCisJCQkJInBsYXRmb3JtIiwgU1RFTVhNSVJlc291cmNlRmFjdG9yeUltcGwuSU5TVEFOQ0UpOw0KKw0KKwkJZmluYWwgUmVzb3VyY2VTZXQgcnMgPSBuZXcgUmVzb3VyY2VTZXRJbXBsKCk7DQorDQorCQlycy5nZXRSZXNvdXJjZUZhY3RvcnlSZWdpc3RyeSgpLmdldEV4dGVuc2lvblRvRmFjdG9yeU1hcCgpDQorCQkJCS5wdXQoIioiLCBTVEVNWE1JUmVzb3VyY2VGYWN0b3J5SW1wbC5JTlNUQU5DRSk7DQorDQorCQlycy5nZXRSZXNvdXJjZUZhY3RvcnlSZWdpc3RyeSgpLmdldFByb3RvY29sVG9GYWN0b3J5TWFwKCkucHV0KA0KKwkJCQkicGxhdGZvcm0iLCBTVEVNWE1JUmVzb3VyY2VGYWN0b3J5SW1wbC5JTlNUQU5DRSk7DQorDQorCQlmaW5hbCBSZXNvdXJjZSByZXNvdXJjZSA9IHJzLmNyZWF0ZVJlc291cmNlKHNlcmlhbGl6YXRpb25VUkkpOw0KKwkJDQorCQlmb3IgKElkZW50aWZpYWJsZSBpZCA6IGlkZW50aWZpYWJsZXMpIHsNCisJCQlyZXNvdXJjZS5nZXRDb250ZW50cygpLmFkZChpZCk7DQorCQl9DQorDQorCQlyZXNvdXJjZS5zYXZlKEVNRl9TQVZFX09QVElPTlMpOw0KKwl9IC8vIHNlcmlhbGl6ZUlkZW50aWZpYWJsZQ0KKwkNCisJLyoqDQorCSAqIFNlcmlhbGl6ZSBhbiB7QGxpbmsgSWRlbnRpZmlhYmxlfQ0KKwkgKiANCisJICogQHBhcmFtIGlkZW50aWZpYWJsZQ0KKwkgKiAgICAgICAgICAgIHRoZSB7QGxpbmsgSWRlbnRpZmlhYmxlfSB0byBiZSBzZXJpYWxpemVkLg0KKwkgKiBAcGFyYW0gc2VyaWFsaXphdGlvblVSSQ0KKwkgKiAgICAgICAgICAgIHRoZSB7QGxpbmsgVVJJfSB0aGF0IHNwZWNpZmllcyB3aGVyZSB0aGUge0BsaW5rIElkZW50aWZpYWJsZX0NCisJICogICAgICAgICAgICBpcyB0byBiZSBzZXJpYWxpemVkLg0KKwkgKiBAcGFyYW0gc3RyZWFtIHRoZSBzdHJlYW0gdG8gc2VyaWFsaXplIHRvDQorCSAqIEB0aHJvd3MgSU9FeGNlcHRpb24NCisJICogICAgICAgICAgICAgaWYgdGhlcmUgaXMgYSBwcm9ibGVtIHNlcmlhbGl6aW5nIHRoZSB7QGxpbmsgSWRlbnRpZmlhYmxlfQ0KKwkgKi8NCisJcHVibGljIHN0YXRpYyB2b2lkIHNlcmlhbGl6ZUlkZW50aWZpYWJsZVRvU3RyZWFtKElkZW50aWZpYWJsZSBpZGVudGlmaWFibGUsDQorCQkJZmluYWwgVVJJIHNlcmlhbGl6YXRpb25VUkksIE91dHB1dFN0cmVhbSBzdHJlYW0sIE1hcDxTdHJpbmcsT2JqZWN0Pm9wdGlvbnMsIGJvb2xlYW4gYmluYXJ5KSB0aHJvd3MgSU9FeGNlcHRpb24gew0KKw0KKwkJLy8gVGhpcyBjb2RlIGNvdWxkIGJlIHJ1bm5pbmcgInN0YW5kIGFsb25lIiAoaS5lLiwgbm90IHdpdGhpbiBlY2xpcHNlKSwNCisJCS8vIHRodXMgdGhlIGRlZmF1bHQgZmFjdG9yaWVzIGZvciB0aGUgZXh0ZW5zaW9ucyBhcmUgbm90IHJlZ2lzdGVyZWQgYXMNCisJCS8vIHRoZXkgd291bGQgZnJvbSB0aGVpciBleHRlbnNpb24gb2YNCisJCS8vICJvcmcuZWNsaXBzZS5lbWYuZWNvcmUuZXh0ZW5zaW9uX3BhcnNlciIuIFNvIHdlIG5lZWQgdG8gcmVnaXN0ZXIgdGhlbQ0KKwkJLy8gaGVyZS4NCisNCisJDQorCQlmaW5hbCBSZXNvdXJjZVNldCByZXNvdXJjZVNldCA9IG5ldyBSZXNvdXJjZVNldEltcGwoKTsNCisNCisJCWlmKGJpbmFyeSkgew0KKwkJCXJlc291cmNlU2V0LmdldFJlc291cmNlRmFjdG9yeVJlZ2lzdHJ5KCkuZ2V0RXh0ZW5zaW9uVG9GYWN0b3J5TWFwKCkNCisJCQkJCS5wdXQoIioiLCBTVEVNQmluYXJ5UmVzb3VyY2VGYWN0b3J5SW1wbC5JTlNUQU5DRSk7DQorCQ0KKwkJCXJlc291cmNlU2V0LmdldFJlc291cmNlRmFjdG9yeVJlZ2lzdHJ5KCkuZ2V0UHJvdG9jb2xUb0ZhY3RvcnlNYXAoKS5wdXQoDQorCQkJCQkicGxhdGZvcm0iLCBTVEVNQmluYXJ5UmVzb3VyY2VGYWN0b3J5SW1wbC5JTlNUQU5DRSk7DQorCQl9IGVsc2Ugew0KKwkJcmVzb3VyY2VTZXQuZ2V0UmVzb3VyY2VGYWN0b3J5UmVnaXN0cnkoKS5nZXRFeHRlbnNpb25Ub0ZhY3RvcnlNYXAoKQ0KKwkJCQkucHV0KCIqIiwgU1RFTVhNSVJlc291cmNlRmFjdG9yeUltcGwuSU5TVEFOQ0UpOw0KKw0KKwkJcmVzb3VyY2VTZXQuZ2V0UmVzb3VyY2VGYWN0b3J5UmVnaXN0cnkoKS5nZXRQcm90b2NvbFRvRmFjdG9yeU1hcCgpLnB1dCgNCisJCQkJInBsYXRmb3JtIiwgU1RFTVhNSVJlc291cmNlRmFjdG9yeUltcGwuSU5TVEFOQ0UpOw0KKwkJfQ0KKwkJDQorCQlmaW5hbCBSZXNvdXJjZSByZXNvdXJjZSA9IHJlc291cmNlU2V0LmNyZWF0ZVJlc291cmNlKHNlcmlhbGl6YXRpb25VUkkpOw0KKwkJDQorCQlyZXNvdXJjZS5nZXRDb250ZW50cygpLmFkZChpZGVudGlmaWFibGUpOw0KKwkJDQorCQlyZXNvdXJjZS5zYXZlKHN0cmVhbSwgb3B0aW9ucyk7DQorCX0gLy8gc2VyaWFsaXplSWRlbnRpZmlhYmxlDQorCQ0KKwkvKioNCisJICogQ29tbW9uIG1ldGhvZCBmb3IgZGV0ZXJtaW5pbmcgdGhlIGdlb2dyYXBoaWMgbGV2ZWwgb2YgYSBnZW9ncmFwaGljIGtleSAobGFzdCBzZWdtZW50IG9mIGEgVVJJKQ0KKwkgKiBAcGFyYW0ga2V5DQorCSAqIEByZXR1cm4gdGhlIGxldmVsIG9mIHRoZSBrZXkNCisJICovDQorCXB1YmxpYyAgc3RhdGljIGludCBrZXlMZXZlbChmaW5hbCBTdHJpbmcga2V5KSB7DQorCQkvLyBudWxsIG1lYW5zIHVuc3BlY2lmaWVkIGFuZCB0cnVseSBnbG9iYWwgZm9yIHBvcHVsYXRpb24gbW9kZWxzLg0KKwkJaWYoa2V5ID09IG51bGwgfHwga2V5LnRyaW0oKS5lcXVhbHMoIiIpKSByZXR1cm4gLTI7DQorCQkvLyBaWlogaXMgc3BlY2lhbCwgaXQgbWVhbnMgdGhlIHdvcmxkDQorCQlpZihrZXkuZXF1YWxzSWdub3JlQ2FzZSgiWlpaIikpIHJldHVybiAtMTsNCisJCQ0KKwkJaW50IGxldmVsID0gMDsNCisJCWludCBzdGFydCA9IDA7DQorCQlmb3IgKGludCB0ZW1wID0ga2V5LmluZGV4T2YoIi0iKTsgdGVtcCA+IDA7KSB7IC8vJE5PTi1OTFMtMSQNCisJCQlsZXZlbCsrOw0KKwkJCXN0YXJ0ICs9IHRlbXAgKyAxOw0KKwkJCXRlbXAgPSBrZXkuc3Vic3RyaW5nKHN0YXJ0KS5pbmRleE9mKCItIik7IC8vJE5PTi1OTFMtMSQNCisJCX0gLy8gZm9yDQorCQlyZXR1cm4gbGV2ZWw7DQorCX0gLy8ga2V5TGV2ZWwNCisJDQorCS8qKg0KKwkgKiBEaXNwbGF5cyBhIHdhcm5pbmcgdGhhdCB0aGUgc2NlbmFyaW8gY29tcG9zaXRpb24gbWF5IGJlIGludmFsaWQuDQorCSAqIEZvciBleGFtcGxlIHRoZSBncmFwaCBuZXN0aW5nIHdpdGhpbiBhIHNpbXVsYXRpb24gbWF5IGJlIGludmFsaWQNCisJICogQW4gaW5mZWN0b3Igb3IgaW5vY3VsYXRvciBtYXkgcG9pbnQgdG8gYSBub2RlIHRoYXQgZG9lcyBub3QgZXhpc3QuDQorCSAqIEBwYXJhbSBtZXNzYWdlDQorCSAqLw0KKwlwdWJsaWMgc3RhdGljIHZvaWQgZGlzcGxheVNjZW5hcmlvQ29tcG9zaXRpb25XYXJuaW5nKGZpbmFsIFN0cmluZyBtZXNzYWdlKSB7DQorCQl0cnkgew0KKwkJCWlmKERpc3BsYXkuZ2V0RGVmYXVsdCgpICE9IG51bGwpDQorCQkJCURpc3BsYXkuZ2V0RGVmYXVsdCgpLnN5bmNFeGVjKG5ldyBSdW5uYWJsZSgpIHsNCisJCQkJCXB1YmxpYyB2b2lkIHJ1bigpIHsNCisJCQkJCQl0cnkgew0KKwkJCQkJCQlmaW5hbCBJV29ya2JlbmNoV2luZG93IHdpbmRvdyA9IFBsYXRmb3JtVUkNCisJCQkJCQkJCQkuZ2V0V29ya2JlbmNoKCkuZ2V0QWN0aXZlV29ya2JlbmNoV2luZG93KCk7DQorLy8JCQkJCQkJZmluYWwgSVN0YXR1cyB3YXJuaW5nID0gbmV3IFN0YXR1cyhJU3RhdHVzLldBUk5JTkcsDQorLy8JCQkJCQkJCQlDb3JlUGx1Z2luLlBMVUdJTl9JRCwgMSwgbWVzc2FnZSwgbnVsbCk7DQorLy8JCQkJCQkJRXJyb3JEaWFsb2cub3BlbkVycm9yKHdpbmRvdy5nZXRTaGVsbCgpLCBudWxsLCBudWxsLA0KKy8vCQkJCQkJCQkJd2FybmluZyk7DQorCQkJCQkJCVN0cmluZyBbXSBsYWJlbHMgPSBuZXcgU3RyaW5nWzJdOw0KKwkJCQkJCQlsYWJlbHNbMV0gID0gIkhlbHAiOw0KKwkJCQkJCQlsYWJlbHNbMF0gPSAiT2theSI7DQorCQkJCQkJCU1lc3NhZ2VEaWFsb2cgZGlhbG9nID0gbmV3IE1lc3NhZ2VEaWFsb2cod2luZG93LmdldFNoZWxsKCksICJXYXJuaW5nIiwgbnVsbCwgbWVzc2FnZSwNCisJCQkJCQkJCQlNZXNzYWdlRGlhbG9nLldBUk5JTkcsIGxhYmVscywgMCkgew0KKwkJCQkJCQkJQE92ZXJyaWRlDQorCQkJCQkJCQlwcm90ZWN0ZWQgdm9pZCBidXR0b25QcmVzc2VkKGludCBidXR0b25JZCkgew0KKwkJCQkJCQkJCWlmKGJ1dHRvbklkID09IDEpDQorCQkJCQkJCQkJCVBsYXRmb3JtVUkuZ2V0V29ya2JlbmNoKCkuZ2V0SGVscFN5c3RlbSgpLmRpc3BsYXlIZWxwKCJvcmcuZWNsaXBzZS5zdGVtLmRvYy5pbnZhbGlkbmVzdGluZ19jb250ZXh0aWQiKTsNCisJCQkJCQkJCQllbHNlDQorCQkJCQkJCQkJCXN1cGVyLmJ1dHRvblByZXNzZWQoYnV0dG9uSWQpOw0KKwkJCQkJCQkJfQ0KKwkJCQkJCQl9Ow0KKwkJCQkJCQlkaWFsb2cub3BlbigpOw0KKwkJCQkJCX0gY2F0Y2goRXhjZXB0aW9uIGUpIHsNCisJCQkJCQkJLy8gSWYgd2UgZ2V0IHRoaXMgZXhjZXB0aW9uLCBpdCBpcyBiZWNhdXNlIHdlJ3JlIG5vdCBydW5uaW5nIGluDQorCQkJCQkJCS8vIGVjbGlwc2UuDQorCQkJCQkJfQ0KKwkJCQkJfSAvLyBydW4NCisJCQkJfSk7DQorCQkJDQorCQkJZWxzZSBDb3JlUGx1Z2luLmxvZ0Vycm9yKG1lc3NhZ2UsIG51bGwpOw0KKwkJCQ0KKwkJfSBjYXRjaCAoZmluYWwgRXJyb3IgbmNkZmUpIHsNCisJCQkvLyBFbXB0eQ0KKwkJfSAvLyBjYXRjaA0KKwl9DQorCQ0KK30gLy8gVXRpbGl0eQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvY29tbW9uL0NvbW1vbkZhY3RvcnkuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvY29tbW9uL0NvbW1vbkZhY3RvcnkuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZTk4ZGY0Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9jb21tb24vQ29tbW9uRmFjdG9yeS5qYXZhCkBAIC0wLDAgKzEsMTA1IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb247CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVGYWN0b3J5OworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiBUaGUgPGI+RmFjdG9yeTwvYj4gZm9yIHRoZSBtb2RlbC4KKyAqIEl0IHByb3ZpZGVzIGEgY3JlYXRlIG1ldGhvZCBmb3IgZWFjaCBub24tYWJzdHJhY3QgY2xhc3Mgb2YgdGhlIG1vZGVsLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uQ29tbW9uUGFja2FnZQorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgaW50ZXJmYWNlIENvbW1vbkZhY3RvcnkgZXh0ZW5kcyBFRmFjdG9yeSB7CisJLyoqCisJICogVGhlIHNpbmdsZXRvbiBpbnN0YW5jZSBvZiB0aGUgZmFjdG9yeS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlDb21tb25GYWN0b3J5IGVJTlNUQU5DRSA9IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uaW1wbC5Db21tb25GYWN0b3J5SW1wbC5pbml0KCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPkR1YmxpbiBDb3JlPC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiBhIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5EdWJsaW4gQ29yZTwvZW0+Jy4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRHVibGluQ29yZSBjcmVhdGVEdWJsaW5Db3JlKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPklkZW50aWZpYWJsZSBGaWx0ZXI8L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPklkZW50aWZpYWJsZSBGaWx0ZXI8L2VtPicuCisJICogQGdlbmVyYXRlZAorCSAqLworCUlkZW50aWZpYWJsZUZpbHRlciBjcmVhdGVJZGVudGlmaWFibGVGaWx0ZXIoKTsKKworCS8qKgorCSAqIFJldHVybnMgYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+RG91YmxlIFZhbHVlIExpc3Q8L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPkRvdWJsZSBWYWx1ZSBMaXN0PC9lbT4nLgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlEb3VibGVWYWx1ZUxpc3QgY3JlYXRlRG91YmxlVmFsdWVMaXN0KCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPkRvdWJsZSBWYWx1ZSBNYXRyaXg8L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPkRvdWJsZSBWYWx1ZSBNYXRyaXg8L2VtPicuCisJICogQGdlbmVyYXRlZAorCSAqLworCURvdWJsZVZhbHVlTWF0cml4IGNyZWF0ZURvdWJsZVZhbHVlTWF0cml4KCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPkRvdWJsZSBWYWx1ZTwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+RG91YmxlIFZhbHVlPC9lbT4nLgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlEb3VibGVWYWx1ZSBjcmVhdGVEb3VibGVWYWx1ZSgpOworCisJLyoqCisJICogUmV0dXJucyBhIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5TdHJpbmcgVmFsdWUgTGlzdDwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+U3RyaW5nIFZhbHVlIExpc3Q8L2VtPicuCisJICogQGdlbmVyYXRlZAorCSAqLworCVN0cmluZ1ZhbHVlTGlzdCBjcmVhdGVTdHJpbmdWYWx1ZUxpc3QoKTsKKworCS8qKgorCSAqIFJldHVybnMgYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+U3RyaW5nIFZhbHVlPC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiBhIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5TdHJpbmcgVmFsdWU8L2VtPicuCisJICogQGdlbmVyYXRlZAorCSAqLworCVN0cmluZ1ZhbHVlIGNyZWF0ZVN0cmluZ1ZhbHVlKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBwYWNrYWdlIHN1cHBvcnRlZCBieSB0aGlzIGZhY3RvcnkuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBwYWNrYWdlIHN1cHBvcnRlZCBieSB0aGlzIGZhY3RvcnkuCisJICogQGdlbmVyYXRlZAorCSAqLworCUNvbW1vblBhY2thZ2UgZ2V0Q29tbW9uUGFja2FnZSgpOworCit9IC8vQ29tbW9uRmFjdG9yeQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9jb21tb24vQ29tbW9uUGFja2FnZS5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9jb21tb24vQ29tbW9uUGFja2FnZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIxOGRlNmIKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2NvbW1vbi9Db21tb25QYWNrYWdlLmphdmEKQEAgLTAsMCArMSwxMzg0IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb247CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVBdHRyaWJ1dGU7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzczsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRURhdGFUeXBlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRVJlZmVyZW5jZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuTW9kaWZpZXJQYWNrYWdlOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiBUaGUgPGI+UGFja2FnZTwvYj4gZm9yIHRoZSBtb2RlbC4KKyAqIEl0IGNvbnRhaW5zIGFjY2Vzc29ycyBmb3IgdGhlIG1ldGEgb2JqZWN0cyB0byByZXByZXNlbnQKKyAqIDx1bD4KKyAqICAgPGxpPmVhY2ggY2xhc3MsPC9saT4KKyAqICAgPGxpPmVhY2ggZmVhdHVyZSBvZiBlYWNoIGNsYXNzLDwvbGk+CisgKiAgIDxsaT5lYWNoIGVudW0sPC9saT4KKyAqICAgPGxpPmFuZCBlYWNoIGRhdGEgdHlwZTwvbGk+CisgKiA8L3VsPgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uQ29tbW9uRmFjdG9yeQorICogQG1vZGVsIGtpbmQ9InBhY2thZ2UiCisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBpbnRlcmZhY2UgQ29tbW9uUGFja2FnZSBleHRlbmRzIEVQYWNrYWdlIHsKKwkvKioKKwkgKiBUaGUgcGFja2FnZSBuYW1lLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCVN0cmluZyBlTkFNRSA9ICJjb21tb24iOworCisJLyoqCisJICogVGhlIHBhY2thZ2UgbmFtZXNwYWNlIFVSSS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlTdHJpbmcgZU5TX1VSSSA9ICJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9jb21tb24uZWNvcmUiOworCisJLyoqCisJICogVGhlIHBhY2thZ2UgbmFtZXNwYWNlIG5hbWUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJU3RyaW5nIGVOU19QUkVGSVggPSAib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbiI7CisKKwkvKioKKwkgKiBUaGUgc2luZ2xldG9uIGluc3RhbmNlIG9mIHRoZSBwYWNrYWdlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUNvbW1vblBhY2thZ2UgZUlOU1RBTkNFID0gb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5pbXBsLkNvbW1vblBhY2thZ2VJbXBsLmluaXQoKTsKKworCS8qKgorCSAqIFRoZSBtZXRhIG9iamVjdCBpZCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5pbXBsLkR1YmxpbkNvcmVJbXBsIDxlbT5EdWJsaW4gQ29yZTwvZW0+fScgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uaW1wbC5EdWJsaW5Db3JlSW1wbAorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5pbXBsLkNvbW1vblBhY2thZ2VJbXBsI2dldER1YmxpbkNvcmUoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlpbnQgRFVCTElOX0NPUkUgPSAwOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlRpdGxlPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgRFVCTElOX0NPUkVfX1RJVExFID0gMDsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5JZGVudGlmaWVyPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgRFVCTElOX0NPUkVfX0lERU5USUZJRVIgPSAxOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkRlc2NyaXB0aW9uPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgRFVCTElOX0NPUkVfX0RFU0NSSVBUSU9OID0gMjsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5DcmVhdG9yPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgRFVCTElOX0NPUkVfX0NSRUFUT1IgPSAzOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkRhdGU8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBEVUJMSU5fQ09SRV9fREFURSA9IDQ7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+Rm9ybWF0PC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgRFVCTElOX0NPUkVfX0ZPUk1BVCA9IDU7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+UHVibGlzaGVyPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgRFVCTElOX0NPUkVfX1BVQkxJU0hFUiA9IDY7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+Q292ZXJhZ2U8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBEVUJMSU5fQ09SRV9fQ09WRVJBR0UgPSA3OworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkNvbnRyaWJ1dG9yPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgRFVCTElOX0NPUkVfX0NPTlRSSUJVVE9SID0gODsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5SZWxhdGlvbjwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IERVQkxJTl9DT1JFX19SRUxBVElPTiA9IDk7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+UmlnaHRzPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgRFVCTElOX0NPUkVfX1JJR0hUUyA9IDEwOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlNvdXJjZTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IERVQkxJTl9DT1JFX19TT1VSQ0UgPSAxMTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5TdWJqZWN0PC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgRFVCTElOX0NPUkVfX1NVQkpFQ1QgPSAxMjsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5UeXBlPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgRFVCTElOX0NPUkVfX1RZUEUgPSAxMzsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5MYW5ndWFnZTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IERVQkxJTl9DT1JFX19MQU5HVUFHRSA9IDE0OworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkJpYmxpb2dyYXBoaWMgQ2l0YXRpb248L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBEVUJMSU5fQ09SRV9fQklCTElPR1JBUEhJQ19DSVRBVElPTiA9IDE1OworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkNyZWF0ZWQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBEVUJMSU5fQ09SRV9fQ1JFQVRFRCA9IDE2OworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkxpY2Vuc2U8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBEVUJMSU5fQ09SRV9fTElDRU5TRSA9IDE3OworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlJlcXVpcmVkPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgRFVCTElOX0NPUkVfX1JFUVVJUkVEID0gMTg7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+U3BhdGlhbDwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IERVQkxJTl9DT1JFX19TUEFUSUFMID0gMTk7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VmFsaWQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBEVUJMSU5fQ09SRV9fVkFMSUQgPSAyMDsKKworCS8qKgorCSAqIFRoZSBudW1iZXIgb2Ygc3RydWN0dXJhbCBmZWF0dXJlcyBvZiB0aGUgJzxlbT5EdWJsaW4gQ29yZTwvZW0+JyBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBEVUJMSU5fQ09SRV9GRUFUVVJFX0NPVU5UID0gMjE7CisKKwkvKioKKwkgKiBUaGUgbWV0YSBvYmplY3QgaWQgZm9yIHRoZSAne0BsaW5rIGphdmEubGFuZy5Db21wYXJhYmxlIDxlbT5Db21wYXJhYmxlPC9lbT59JyBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgamF2YS5sYW5nLkNvbXBhcmFibGUKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uaW1wbC5Db21tb25QYWNrYWdlSW1wbCNnZXRDb21wYXJhYmxlKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJaW50IENPTVBBUkFCTEUgPSAyOworCisJLyoqCisJICogVGhlIG51bWJlciBvZiBzdHJ1Y3R1cmFsIGZlYXR1cmVzIG9mIHRoZSAnPGVtPkNvbXBhcmFibGU8L2VtPicgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgQ09NUEFSQUJMRV9GRUFUVVJFX0NPVU5UID0gMDsKKworCS8qKgorCSAqIFRoZSBtZXRhIG9iamVjdCBpZCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5pbXBsLklkZW50aWZpYWJsZUltcGwgPGVtPklkZW50aWZpYWJsZTwvZW0+fScgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uaW1wbC5JZGVudGlmaWFibGVJbXBsCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLmltcGwuQ29tbW9uUGFja2FnZUltcGwjZ2V0SWRlbnRpZmlhYmxlKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJaW50IElERU5USUZJQUJMRSA9IDE7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VVJJPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgSURFTlRJRklBQkxFX19VUkkgPSBDT01QQVJBQkxFX0ZFQVRVUkVfQ09VTlQgKyAwOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlR5cGUgVVJJPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgSURFTlRJRklBQkxFX19UWVBFX1VSSSA9IENPTVBBUkFCTEVfRkVBVFVSRV9DT1VOVCArIDE7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RHVibGluIENvcmU8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBJREVOVElGSUFCTEVfX0RVQkxJTl9DT1JFID0gQ09NUEFSQUJMRV9GRUFUVVJFX0NPVU5UICsgMjsKKworCS8qKgorCSAqIFRoZSBudW1iZXIgb2Ygc3RydWN0dXJhbCBmZWF0dXJlcyBvZiB0aGUgJzxlbT5JZGVudGlmaWFibGU8L2VtPicgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgSURFTlRJRklBQkxFX0ZFQVRVUkVfQ09VTlQgPSBDT01QQVJBQkxFX0ZFQVRVUkVfQ09VTlQgKyAzOworCisJLyoqCisJICogVGhlIG1ldGEgb2JqZWN0IGlkIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLmltcGwuSWRlbnRpZmlhYmxlRmlsdGVySW1wbCA8ZW0+SWRlbnRpZmlhYmxlIEZpbHRlcjwvZW0+fScgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uaW1wbC5JZGVudGlmaWFibGVGaWx0ZXJJbXBsCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLmltcGwuQ29tbW9uUGFja2FnZUltcGwjZ2V0SWRlbnRpZmlhYmxlRmlsdGVyKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJaW50IElERU5USUZJQUJMRV9GSUxURVIgPSAzOworCisJLyoqCisJICogVGhlIG51bWJlciBvZiBzdHJ1Y3R1cmFsIGZlYXR1cmVzIG9mIHRoZSAnPGVtPklkZW50aWZpYWJsZSBGaWx0ZXI8L2VtPicgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgSURFTlRJRklBQkxFX0ZJTFRFUl9GRUFUVVJFX0NPVU5UID0gMDsKKworCS8qKgorCSAqIFRoZSBtZXRhIG9iamVjdCBpZCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5pbXBsLkRvdWJsZVZhbHVlTGlzdEltcGwgPGVtPkRvdWJsZSBWYWx1ZSBMaXN0PC9lbT59JyBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5pbXBsLkRvdWJsZVZhbHVlTGlzdEltcGwKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uaW1wbC5Db21tb25QYWNrYWdlSW1wbCNnZXREb3VibGVWYWx1ZUxpc3QoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlpbnQgRE9VQkxFX1ZBTFVFX0xJU1QgPSA0OworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlZhbHVlczwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3QuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgRE9VQkxFX1ZBTFVFX0xJU1RfX1ZBTFVFUyA9IDA7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+SWRlbnRpZmllcjwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IERPVUJMRV9WQUxVRV9MSVNUX19JREVOVElGSUVSID0gMTsKKworCS8qKgorCSAqIFRoZSBudW1iZXIgb2Ygc3RydWN0dXJhbCBmZWF0dXJlcyBvZiB0aGUgJzxlbT5Eb3VibGUgVmFsdWUgTGlzdDwvZW0+JyBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBET1VCTEVfVkFMVUVfTElTVF9GRUFUVVJFX0NPVU5UID0gMjsKKworCS8qKgorCSAqIFRoZSBtZXRhIG9iamVjdCBpZCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5pbXBsLkRvdWJsZVZhbHVlTWF0cml4SW1wbCA8ZW0+RG91YmxlIFZhbHVlIE1hdHJpeDwvZW0+fScgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uaW1wbC5Eb3VibGVWYWx1ZU1hdHJpeEltcGwKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uaW1wbC5Db21tb25QYWNrYWdlSW1wbCNnZXREb3VibGVWYWx1ZU1hdHJpeCgpCisJICogQGdlbmVyYXRlZAorCSAqLworCWludCBET1VCTEVfVkFMVUVfTUFUUklYID0gNTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5WYWx1ZSBMaXN0czwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3QuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgRE9VQkxFX1ZBTFVFX01BVFJJWF9fVkFMVUVfTElTVFMgPSAwOworCisJLyoqCisJICogVGhlIG51bWJlciBvZiBzdHJ1Y3R1cmFsIGZlYXR1cmVzIG9mIHRoZSAnPGVtPkRvdWJsZSBWYWx1ZSBNYXRyaXg8L2VtPicgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgRE9VQkxFX1ZBTFVFX01BVFJJWF9GRUFUVVJFX0NPVU5UID0gMTsKKworCS8qKgorCSAqIFRoZSBtZXRhIG9iamVjdCBpZCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5pbXBsLkRvdWJsZVZhbHVlSW1wbCA8ZW0+RG91YmxlIFZhbHVlPC9lbT59JyBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5pbXBsLkRvdWJsZVZhbHVlSW1wbAorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5pbXBsLkNvbW1vblBhY2thZ2VJbXBsI2dldERvdWJsZVZhbHVlKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJaW50IERPVUJMRV9WQUxVRSA9IDY7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+SWRlbnRpZmllcjwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IERPVUJMRV9WQUxVRV9fSURFTlRJRklFUiA9IE1vZGlmaWVyUGFja2FnZS5NT0RJRklBQkxFX0ZFQVRVUkVfQ09VTlQgKyAwOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlZhbHVlPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgRE9VQkxFX1ZBTFVFX19WQUxVRSA9IE1vZGlmaWVyUGFja2FnZS5NT0RJRklBQkxFX0ZFQVRVUkVfQ09VTlQgKyAxOworCisJLyoqCisJICogVGhlIG51bWJlciBvZiBzdHJ1Y3R1cmFsIGZlYXR1cmVzIG9mIHRoZSAnPGVtPkRvdWJsZSBWYWx1ZTwvZW0+JyBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBET1VCTEVfVkFMVUVfRkVBVFVSRV9DT1VOVCA9IE1vZGlmaWVyUGFja2FnZS5NT0RJRklBQkxFX0ZFQVRVUkVfQ09VTlQgKyAyOworCisJLyoqCisJICogVGhlIG1ldGEgb2JqZWN0IGlkIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLmltcGwuU3RyaW5nVmFsdWVMaXN0SW1wbCA8ZW0+U3RyaW5nIFZhbHVlIExpc3Q8L2VtPn0nIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLmltcGwuU3RyaW5nVmFsdWVMaXN0SW1wbAorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5pbXBsLkNvbW1vblBhY2thZ2VJbXBsI2dldFN0cmluZ1ZhbHVlTGlzdCgpCisJICogQGdlbmVyYXRlZAorCSAqLworCWludCBTVFJJTkdfVkFMVUVfTElTVCA9IDc7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VmFsdWVzPC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UgbGlzdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTVFJJTkdfVkFMVUVfTElTVF9fVkFMVUVTID0gMDsKKworCS8qKgorCSAqIFRoZSBudW1iZXIgb2Ygc3RydWN0dXJhbCBmZWF0dXJlcyBvZiB0aGUgJzxlbT5TdHJpbmcgVmFsdWUgTGlzdDwvZW0+JyBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTVFJJTkdfVkFMVUVfTElTVF9GRUFUVVJFX0NPVU5UID0gMTsKKworCS8qKgorCSAqIFRoZSBtZXRhIG9iamVjdCBpZCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5pbXBsLlN0cmluZ1ZhbHVlSW1wbCA8ZW0+U3RyaW5nIFZhbHVlPC9lbT59JyBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5pbXBsLlN0cmluZ1ZhbHVlSW1wbAorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5pbXBsLkNvbW1vblBhY2thZ2VJbXBsI2dldFN0cmluZ1ZhbHVlKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJaW50IFNUUklOR19WQUxVRSA9IDg7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VmFsdWU8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTVFJJTkdfVkFMVUVfX1ZBTFVFID0gTW9kaWZpZXJQYWNrYWdlLk1PRElGSUFCTEVfRkVBVFVSRV9DT1VOVCArIDA7CisKKwkvKioKKwkgKiBUaGUgbnVtYmVyIG9mIHN0cnVjdHVyYWwgZmVhdHVyZXMgb2YgdGhlICc8ZW0+U3RyaW5nIFZhbHVlPC9lbT4nIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNUUklOR19WQUxVRV9GRUFUVVJFX0NPVU5UID0gTW9kaWZpZXJQYWNrYWdlLk1PRElGSUFCTEVfRkVBVFVSRV9DT1VOVCArIDE7CisKKwkvKioKKwkgKiBUaGUgbWV0YSBvYmplY3QgaWQgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uU2FuaXR5Q2hlY2tlciA8ZW0+U2FuaXR5IENoZWNrZXI8L2VtPn0nIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLlNhbml0eUNoZWNrZXIKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uaW1wbC5Db21tb25QYWNrYWdlSW1wbCNnZXRTYW5pdHlDaGVja2VyKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJaW50IFNBTklUWV9DSEVDS0VSID0gOTsKKworCS8qKgorCSAqIFRoZSBudW1iZXIgb2Ygc3RydWN0dXJhbCBmZWF0dXJlcyBvZiB0aGUgJzxlbT5TYW5pdHkgQ2hlY2tlcjwvZW0+JyBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTQU5JVFlfQ0hFQ0tFUl9GRUFUVVJFX0NPVU5UID0gMDsKKworCS8qKgorCSAqIFRoZSBtZXRhIG9iamVjdCBpZCBmb3IgdGhlICc8ZW0+VVJJPC9lbT4nIGRhdGEgdHlwZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlVSSQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5pbXBsLkNvbW1vblBhY2thZ2VJbXBsI2dldFVSSSgpCisJICogQGdlbmVyYXRlZAorCSAqLworCWludCBVUkkgPSAxMDsKKworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5EdWJsaW5Db3JlIDxlbT5EdWJsaW4gQ29yZTwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJzxlbT5EdWJsaW4gQ29yZTwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uRHVibGluQ29yZQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQ2xhc3MgZ2V0RHVibGluQ29yZSgpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLkR1YmxpbkNvcmUjZ2V0VGl0bGUgPGVtPlRpdGxlPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+VGl0bGU8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLkR1YmxpbkNvcmUjZ2V0VGl0bGUoKQorCSAqIEBzZWUgI2dldER1YmxpbkNvcmUoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQXR0cmlidXRlIGdldER1YmxpbkNvcmVfVGl0bGUoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5EdWJsaW5Db3JlI2dldElkZW50aWZpZXIgPGVtPklkZW50aWZpZXI8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxlbT5JZGVudGlmaWVyPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5EdWJsaW5Db3JlI2dldElkZW50aWZpZXIoKQorCSAqIEBzZWUgI2dldER1YmxpbkNvcmUoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQXR0cmlidXRlIGdldER1YmxpbkNvcmVfSWRlbnRpZmllcigpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLkR1YmxpbkNvcmUjZ2V0RGVzY3JpcHRpb24gPGVtPkRlc2NyaXB0aW9uPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+RGVzY3JpcHRpb248L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLkR1YmxpbkNvcmUjZ2V0RGVzY3JpcHRpb24oKQorCSAqIEBzZWUgI2dldER1YmxpbkNvcmUoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQXR0cmlidXRlIGdldER1YmxpbkNvcmVfRGVzY3JpcHRpb24oKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5EdWJsaW5Db3JlI2dldENyZWF0b3IgPGVtPkNyZWF0b3I8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxlbT5DcmVhdG9yPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5EdWJsaW5Db3JlI2dldENyZWF0b3IoKQorCSAqIEBzZWUgI2dldER1YmxpbkNvcmUoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQXR0cmlidXRlIGdldER1YmxpbkNvcmVfQ3JlYXRvcigpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLkR1YmxpbkNvcmUjZ2V0RGF0ZSA8ZW0+RGF0ZTwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPGVtPkRhdGU8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLkR1YmxpbkNvcmUjZ2V0RGF0ZSgpCisJICogQHNlZSAjZ2V0RHVibGluQ29yZSgpCisJICogQGdlbmVyYXRlZAorCSAqLworCUVBdHRyaWJ1dGUgZ2V0RHVibGluQ29yZV9EYXRlKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uRHVibGluQ29yZSNnZXRGb3JtYXQgPGVtPkZvcm1hdDwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPGVtPkZvcm1hdDwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uRHVibGluQ29yZSNnZXRGb3JtYXQoKQorCSAqIEBzZWUgI2dldER1YmxpbkNvcmUoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQXR0cmlidXRlIGdldER1YmxpbkNvcmVfRm9ybWF0KCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uRHVibGluQ29yZSNnZXRQdWJsaXNoZXIgPGVtPlB1Ymxpc2hlcjwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPGVtPlB1Ymxpc2hlcjwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uRHVibGluQ29yZSNnZXRQdWJsaXNoZXIoKQorCSAqIEBzZWUgI2dldER1YmxpbkNvcmUoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQXR0cmlidXRlIGdldER1YmxpbkNvcmVfUHVibGlzaGVyKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uRHVibGluQ29yZSNnZXRDb3ZlcmFnZSA8ZW0+Q292ZXJhZ2U8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxlbT5Db3ZlcmFnZTwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uRHVibGluQ29yZSNnZXRDb3ZlcmFnZSgpCisJICogQHNlZSAjZ2V0RHVibGluQ29yZSgpCisJICogQGdlbmVyYXRlZAorCSAqLworCUVBdHRyaWJ1dGUgZ2V0RHVibGluQ29yZV9Db3ZlcmFnZSgpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLkR1YmxpbkNvcmUjZ2V0Q29udHJpYnV0b3IgPGVtPkNvbnRyaWJ1dG9yPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+Q29udHJpYnV0b3I8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLkR1YmxpbkNvcmUjZ2V0Q29udHJpYnV0b3IoKQorCSAqIEBzZWUgI2dldER1YmxpbkNvcmUoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQXR0cmlidXRlIGdldER1YmxpbkNvcmVfQ29udHJpYnV0b3IoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5EdWJsaW5Db3JlI2dldFJlbGF0aW9uIDxlbT5SZWxhdGlvbjwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPGVtPlJlbGF0aW9uPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5EdWJsaW5Db3JlI2dldFJlbGF0aW9uKCkKKwkgKiBAc2VlICNnZXREdWJsaW5Db3JlKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUF0dHJpYnV0ZSBnZXREdWJsaW5Db3JlX1JlbGF0aW9uKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uRHVibGluQ29yZSNnZXRSaWdodHMgPGVtPlJpZ2h0czwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPGVtPlJpZ2h0czwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uRHVibGluQ29yZSNnZXRSaWdodHMoKQorCSAqIEBzZWUgI2dldER1YmxpbkNvcmUoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQXR0cmlidXRlIGdldER1YmxpbkNvcmVfUmlnaHRzKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uRHVibGluQ29yZSNnZXRTb3VyY2UgPGVtPlNvdXJjZTwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPGVtPlNvdXJjZTwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uRHVibGluQ29yZSNnZXRTb3VyY2UoKQorCSAqIEBzZWUgI2dldER1YmxpbkNvcmUoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQXR0cmlidXRlIGdldER1YmxpbkNvcmVfU291cmNlKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uRHVibGluQ29yZSNnZXRTdWJqZWN0IDxlbT5TdWJqZWN0PC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+U3ViamVjdDwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uRHVibGluQ29yZSNnZXRTdWJqZWN0KCkKKwkgKiBAc2VlICNnZXREdWJsaW5Db3JlKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUF0dHJpYnV0ZSBnZXREdWJsaW5Db3JlX1N1YmplY3QoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5EdWJsaW5Db3JlI2dldFR5cGUgPGVtPlR5cGU8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxlbT5UeXBlPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5EdWJsaW5Db3JlI2dldFR5cGUoKQorCSAqIEBzZWUgI2dldER1YmxpbkNvcmUoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQXR0cmlidXRlIGdldER1YmxpbkNvcmVfVHlwZSgpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLkR1YmxpbkNvcmUjZ2V0TGFuZ3VhZ2UgPGVtPkxhbmd1YWdlPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+TGFuZ3VhZ2U8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLkR1YmxpbkNvcmUjZ2V0TGFuZ3VhZ2UoKQorCSAqIEBzZWUgI2dldER1YmxpbkNvcmUoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQXR0cmlidXRlIGdldER1YmxpbkNvcmVfTGFuZ3VhZ2UoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5EdWJsaW5Db3JlI2dldEJpYmxpb2dyYXBoaWNDaXRhdGlvbiA8ZW0+QmlibGlvZ3JhcGhpYyBDaXRhdGlvbjwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPGVtPkJpYmxpb2dyYXBoaWMgQ2l0YXRpb248L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLkR1YmxpbkNvcmUjZ2V0QmlibGlvZ3JhcGhpY0NpdGF0aW9uKCkKKwkgKiBAc2VlICNnZXREdWJsaW5Db3JlKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUF0dHJpYnV0ZSBnZXREdWJsaW5Db3JlX0JpYmxpb2dyYXBoaWNDaXRhdGlvbigpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLkR1YmxpbkNvcmUjZ2V0Q3JlYXRlZCA8ZW0+Q3JlYXRlZDwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPGVtPkNyZWF0ZWQ8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLkR1YmxpbkNvcmUjZ2V0Q3JlYXRlZCgpCisJICogQHNlZSAjZ2V0RHVibGluQ29yZSgpCisJICogQGdlbmVyYXRlZAorCSAqLworCUVBdHRyaWJ1dGUgZ2V0RHVibGluQ29yZV9DcmVhdGVkKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uRHVibGluQ29yZSNnZXRMaWNlbnNlIDxlbT5MaWNlbnNlPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+TGljZW5zZTwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uRHVibGluQ29yZSNnZXRMaWNlbnNlKCkKKwkgKiBAc2VlICNnZXREdWJsaW5Db3JlKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUF0dHJpYnV0ZSBnZXREdWJsaW5Db3JlX0xpY2Vuc2UoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5EdWJsaW5Db3JlI2dldFJlcXVpcmVkIDxlbT5SZXF1aXJlZDwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPGVtPlJlcXVpcmVkPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5EdWJsaW5Db3JlI2dldFJlcXVpcmVkKCkKKwkgKiBAc2VlICNnZXREdWJsaW5Db3JlKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUF0dHJpYnV0ZSBnZXREdWJsaW5Db3JlX1JlcXVpcmVkKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uRHVibGluQ29yZSNnZXRTcGF0aWFsIDxlbT5TcGF0aWFsPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+U3BhdGlhbDwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uRHVibGluQ29yZSNnZXRTcGF0aWFsKCkKKwkgKiBAc2VlICNnZXREdWJsaW5Db3JlKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUF0dHJpYnV0ZSBnZXREdWJsaW5Db3JlX1NwYXRpYWwoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5EdWJsaW5Db3JlI2dldFZhbGlkIDxlbT5WYWxpZDwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPGVtPlZhbGlkPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5EdWJsaW5Db3JlI2dldFZhbGlkKCkKKwkgKiBAc2VlICNnZXREdWJsaW5Db3JlKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUF0dHJpYnV0ZSBnZXREdWJsaW5Db3JlX1ZhbGlkKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLklkZW50aWZpYWJsZSA8ZW0+SWRlbnRpZmlhYmxlPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAnPGVtPklkZW50aWZpYWJsZTwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uSWRlbnRpZmlhYmxlCisJICogQGdlbmVyYXRlZAorCSAqLworCUVDbGFzcyBnZXRJZGVudGlmaWFibGUoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5JZGVudGlmaWFibGUjZ2V0VVJJIDxlbT5VUkk8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxlbT5VUkk8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLklkZW50aWZpYWJsZSNnZXRVUkkoKQorCSAqIEBzZWUgI2dldElkZW50aWZpYWJsZSgpCisJICogQGdlbmVyYXRlZAorCSAqLworCUVBdHRyaWJ1dGUgZ2V0SWRlbnRpZmlhYmxlX1VSSSgpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLklkZW50aWZpYWJsZSNnZXRUeXBlVVJJIDxlbT5UeXBlIFVSSTwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPGVtPlR5cGUgVVJJPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5JZGVudGlmaWFibGUjZ2V0VHlwZVVSSSgpCisJICogQHNlZSAjZ2V0SWRlbnRpZmlhYmxlKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUF0dHJpYnV0ZSBnZXRJZGVudGlmaWFibGVfVHlwZVVSSSgpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBjb250YWlubWVudCByZWZlcmVuY2UgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLklkZW50aWZpYWJsZSNnZXREdWJsaW5Db3JlIDxlbT5EdWJsaW4gQ29yZTwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGNvbnRhaW5tZW50IHJlZmVyZW5jZSAnPGVtPkR1YmxpbiBDb3JlPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5JZGVudGlmaWFibGUjZ2V0RHVibGluQ29yZSgpCisJICogQHNlZSAjZ2V0SWRlbnRpZmlhYmxlKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRVJlZmVyZW5jZSBnZXRJZGVudGlmaWFibGVfRHVibGluQ29yZSgpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICd7QGxpbmsgamF2YS5sYW5nLkNvbXBhcmFibGUgPGVtPkNvbXBhcmFibGU8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICc8ZW0+Q29tcGFyYWJsZTwvZW0+Jy4KKwkgKiBAc2VlIGphdmEubGFuZy5Db21wYXJhYmxlCisJICogQG1vZGVsIGluc3RhbmNlQ2xhc3M9ImphdmEubGFuZy5Db21wYXJhYmxlIiB0eXBlUGFyYW1ldGVycz0iVCIKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUNsYXNzIGdldENvbXBhcmFibGUoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uSWRlbnRpZmlhYmxlRmlsdGVyIDxlbT5JZGVudGlmaWFibGUgRmlsdGVyPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAnPGVtPklkZW50aWZpYWJsZSBGaWx0ZXI8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLklkZW50aWZpYWJsZUZpbHRlcgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQ2xhc3MgZ2V0SWRlbnRpZmlhYmxlRmlsdGVyKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLkRvdWJsZVZhbHVlTGlzdCA8ZW0+RG91YmxlIFZhbHVlIExpc3Q8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICc8ZW0+RG91YmxlIFZhbHVlIExpc3Q8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLkRvdWJsZVZhbHVlTGlzdAorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQ2xhc3MgZ2V0RG91YmxlVmFsdWVMaXN0KCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0ICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5Eb3VibGVWYWx1ZUxpc3QjZ2V0VmFsdWVzIDxlbT5WYWx1ZXM8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBjb250YWlubWVudCByZWZlcmVuY2UgbGlzdCAnPGVtPlZhbHVlczwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uRG91YmxlVmFsdWVMaXN0I2dldFZhbHVlcygpCisJICogQHNlZSAjZ2V0RG91YmxlVmFsdWVMaXN0KCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRVJlZmVyZW5jZSBnZXREb3VibGVWYWx1ZUxpc3RfVmFsdWVzKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uRG91YmxlVmFsdWVMaXN0I2dldElkZW50aWZpZXIgPGVtPklkZW50aWZpZXI8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxlbT5JZGVudGlmaWVyPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5Eb3VibGVWYWx1ZUxpc3QjZ2V0SWRlbnRpZmllcigpCisJICogQHNlZSAjZ2V0RG91YmxlVmFsdWVMaXN0KCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUF0dHJpYnV0ZSBnZXREb3VibGVWYWx1ZUxpc3RfSWRlbnRpZmllcigpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5Eb3VibGVWYWx1ZU1hdHJpeCA8ZW0+RG91YmxlIFZhbHVlIE1hdHJpeDwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJzxlbT5Eb3VibGUgVmFsdWUgTWF0cml4PC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5Eb3VibGVWYWx1ZU1hdHJpeAorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQ2xhc3MgZ2V0RG91YmxlVmFsdWVNYXRyaXgoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3QgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLkRvdWJsZVZhbHVlTWF0cml4I2dldFZhbHVlTGlzdHMgPGVtPlZhbHVlIExpc3RzPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3QgJzxlbT5WYWx1ZSBMaXN0czwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uRG91YmxlVmFsdWVNYXRyaXgjZ2V0VmFsdWVMaXN0cygpCisJICogQHNlZSAjZ2V0RG91YmxlVmFsdWVNYXRyaXgoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFUmVmZXJlbmNlIGdldERvdWJsZVZhbHVlTWF0cml4X1ZhbHVlTGlzdHMoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uRG91YmxlVmFsdWUgPGVtPkRvdWJsZSBWYWx1ZTwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJzxlbT5Eb3VibGUgVmFsdWU8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLkRvdWJsZVZhbHVlCisJICogQGdlbmVyYXRlZAorCSAqLworCUVDbGFzcyBnZXREb3VibGVWYWx1ZSgpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLkRvdWJsZVZhbHVlI2dldElkZW50aWZpZXIgPGVtPklkZW50aWZpZXI8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxlbT5JZGVudGlmaWVyPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5Eb3VibGVWYWx1ZSNnZXRJZGVudGlmaWVyKCkKKwkgKiBAc2VlICNnZXREb3VibGVWYWx1ZSgpCisJICogQGdlbmVyYXRlZAorCSAqLworCUVBdHRyaWJ1dGUgZ2V0RG91YmxlVmFsdWVfSWRlbnRpZmllcigpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLkRvdWJsZVZhbHVlI2dldFZhbHVlIDxlbT5WYWx1ZTwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPGVtPlZhbHVlPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5Eb3VibGVWYWx1ZSNnZXRWYWx1ZSgpCisJICogQHNlZSAjZ2V0RG91YmxlVmFsdWUoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQXR0cmlidXRlIGdldERvdWJsZVZhbHVlX1ZhbHVlKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLlN0cmluZ1ZhbHVlTGlzdCA8ZW0+U3RyaW5nIFZhbHVlIExpc3Q8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICc8ZW0+U3RyaW5nIFZhbHVlIExpc3Q8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLlN0cmluZ1ZhbHVlTGlzdAorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQ2xhc3MgZ2V0U3RyaW5nVmFsdWVMaXN0KCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0ICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5TdHJpbmdWYWx1ZUxpc3QjZ2V0VmFsdWVzIDxlbT5WYWx1ZXM8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBjb250YWlubWVudCByZWZlcmVuY2UgbGlzdCAnPGVtPlZhbHVlczwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uU3RyaW5nVmFsdWVMaXN0I2dldFZhbHVlcygpCisJICogQHNlZSAjZ2V0U3RyaW5nVmFsdWVMaXN0KCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRVJlZmVyZW5jZSBnZXRTdHJpbmdWYWx1ZUxpc3RfVmFsdWVzKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLlN0cmluZ1ZhbHVlIDxlbT5TdHJpbmcgVmFsdWU8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICc8ZW0+U3RyaW5nIFZhbHVlPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5TdHJpbmdWYWx1ZQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQ2xhc3MgZ2V0U3RyaW5nVmFsdWUoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5TdHJpbmdWYWx1ZSNnZXRWYWx1ZSA8ZW0+VmFsdWU8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxlbT5WYWx1ZTwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uU3RyaW5nVmFsdWUjZ2V0VmFsdWUoKQorCSAqIEBzZWUgI2dldFN0cmluZ1ZhbHVlKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUF0dHJpYnV0ZSBnZXRTdHJpbmdWYWx1ZV9WYWx1ZSgpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5TYW5pdHlDaGVja2VyIDxlbT5TYW5pdHkgQ2hlY2tlcjwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJzxlbT5TYW5pdHkgQ2hlY2tlcjwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uU2FuaXR5Q2hlY2tlcgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQ2xhc3MgZ2V0U2FuaXR5Q2hlY2tlcigpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIGRhdGEgdHlwZSAne0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5VUkkgPGVtPlVSSTwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgZGF0YSB0eXBlICc8ZW0+VVJJPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlVSSQorCSAqIEBtb2RlbCBpbnN0YW5jZUNsYXNzPSJvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuVVJJIgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFRGF0YVR5cGUgZ2V0VVJJKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBmYWN0b3J5IHRoYXQgY3JlYXRlcyB0aGUgaW5zdGFuY2VzIG9mIHRoZSBtb2RlbC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIGZhY3RvcnkgdGhhdCBjcmVhdGVzIHRoZSBpbnN0YW5jZXMgb2YgdGhlIG1vZGVsLgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlDb21tb25GYWN0b3J5IGdldENvbW1vbkZhY3RvcnkoKTsKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogRGVmaW5lcyBsaXRlcmFscyBmb3IgdGhlIG1ldGEgb2JqZWN0cyB0aGF0IHJlcHJlc2VudAorCSAqIDx1bD4KKwkgKiAgIDxsaT5lYWNoIGNsYXNzLDwvbGk+CisJICogICA8bGk+ZWFjaCBmZWF0dXJlIG9mIGVhY2ggY2xhc3MsPC9saT4KKwkgKiAgIDxsaT5lYWNoIGVudW0sPC9saT4KKwkgKiAgIDxsaT5hbmQgZWFjaCBkYXRhIHR5cGU8L2xpPgorCSAqIDwvdWw+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCWludGVyZmFjZSBMaXRlcmFscyB7CisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5pbXBsLkR1YmxpbkNvcmVJbXBsIDxlbT5EdWJsaW4gQ29yZTwvZW0+fScgY2xhc3MuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uaW1wbC5EdWJsaW5Db3JlSW1wbAorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uaW1wbC5Db21tb25QYWNrYWdlSW1wbCNnZXREdWJsaW5Db3JlKCkKKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUNsYXNzIERVQkxJTl9DT1JFID0gZUlOU1RBTkNFLmdldER1YmxpbkNvcmUoKTsKKworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPlRpdGxlPC9iPjwvZW0+JyBhdHRyaWJ1dGUgZmVhdHVyZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVBdHRyaWJ1dGUgRFVCTElOX0NPUkVfX1RJVExFID0gZUlOU1RBTkNFLmdldER1YmxpbkNvcmVfVGl0bGUoKTsKKworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPklkZW50aWZpZXI8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUF0dHJpYnV0ZSBEVUJMSU5fQ09SRV9fSURFTlRJRklFUiA9IGVJTlNUQU5DRS5nZXREdWJsaW5Db3JlX0lkZW50aWZpZXIoKTsKKworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPkRlc2NyaXB0aW9uPC9iPjwvZW0+JyBhdHRyaWJ1dGUgZmVhdHVyZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVBdHRyaWJ1dGUgRFVCTElOX0NPUkVfX0RFU0NSSVBUSU9OID0gZUlOU1RBTkNFLmdldER1YmxpbkNvcmVfRGVzY3JpcHRpb24oKTsKKworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPkNyZWF0b3I8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUF0dHJpYnV0ZSBEVUJMSU5fQ09SRV9fQ1JFQVRPUiA9IGVJTlNUQU5DRS5nZXREdWJsaW5Db3JlX0NyZWF0b3IoKTsKKworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPkRhdGU8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUF0dHJpYnV0ZSBEVUJMSU5fQ09SRV9fREFURSA9IGVJTlNUQU5DRS5nZXREdWJsaW5Db3JlX0RhdGUoKTsKKworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPkZvcm1hdDwvYj48L2VtPicgYXR0cmlidXRlIGZlYXR1cmUuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQXR0cmlidXRlIERVQkxJTl9DT1JFX19GT1JNQVQgPSBlSU5TVEFOQ0UuZ2V0RHVibGluQ29yZV9Gb3JtYXQoKTsKKworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPlB1Ymxpc2hlcjwvYj48L2VtPicgYXR0cmlidXRlIGZlYXR1cmUuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQXR0cmlidXRlIERVQkxJTl9DT1JFX19QVUJMSVNIRVIgPSBlSU5TVEFOQ0UuZ2V0RHVibGluQ29yZV9QdWJsaXNoZXIoKTsKKworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPkNvdmVyYWdlPC9iPjwvZW0+JyBhdHRyaWJ1dGUgZmVhdHVyZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVBdHRyaWJ1dGUgRFVCTElOX0NPUkVfX0NPVkVSQUdFID0gZUlOU1RBTkNFLmdldER1YmxpbkNvcmVfQ292ZXJhZ2UoKTsKKworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPkNvbnRyaWJ1dG9yPC9iPjwvZW0+JyBhdHRyaWJ1dGUgZmVhdHVyZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVBdHRyaWJ1dGUgRFVCTElOX0NPUkVfX0NPTlRSSUJVVE9SID0gZUlOU1RBTkNFLmdldER1YmxpbkNvcmVfQ29udHJpYnV0b3IoKTsKKworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPlJlbGF0aW9uPC9iPjwvZW0+JyBhdHRyaWJ1dGUgZmVhdHVyZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVBdHRyaWJ1dGUgRFVCTElOX0NPUkVfX1JFTEFUSU9OID0gZUlOU1RBTkNFLmdldER1YmxpbkNvcmVfUmVsYXRpb24oKTsKKworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPlJpZ2h0czwvYj48L2VtPicgYXR0cmlidXRlIGZlYXR1cmUuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQXR0cmlidXRlIERVQkxJTl9DT1JFX19SSUdIVFMgPSBlSU5TVEFOQ0UuZ2V0RHVibGluQ29yZV9SaWdodHMoKTsKKworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPlNvdXJjZTwvYj48L2VtPicgYXR0cmlidXRlIGZlYXR1cmUuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQXR0cmlidXRlIERVQkxJTl9DT1JFX19TT1VSQ0UgPSBlSU5TVEFOQ0UuZ2V0RHVibGluQ29yZV9Tb3VyY2UoKTsKKworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPlN1YmplY3Q8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUF0dHJpYnV0ZSBEVUJMSU5fQ09SRV9fU1VCSkVDVCA9IGVJTlNUQU5DRS5nZXREdWJsaW5Db3JlX1N1YmplY3QoKTsKKworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPlR5cGU8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUF0dHJpYnV0ZSBEVUJMSU5fQ09SRV9fVFlQRSA9IGVJTlNUQU5DRS5nZXREdWJsaW5Db3JlX1R5cGUoKTsKKworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPkxhbmd1YWdlPC9iPjwvZW0+JyBhdHRyaWJ1dGUgZmVhdHVyZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVBdHRyaWJ1dGUgRFVCTElOX0NPUkVfX0xBTkdVQUdFID0gZUlOU1RBTkNFLmdldER1YmxpbkNvcmVfTGFuZ3VhZ2UoKTsKKworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPkJpYmxpb2dyYXBoaWMgQ2l0YXRpb248L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUF0dHJpYnV0ZSBEVUJMSU5fQ09SRV9fQklCTElPR1JBUEhJQ19DSVRBVElPTiA9IGVJTlNUQU5DRS5nZXREdWJsaW5Db3JlX0JpYmxpb2dyYXBoaWNDaXRhdGlvbigpOworCisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+Q3JlYXRlZDwvYj48L2VtPicgYXR0cmlidXRlIGZlYXR1cmUuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQXR0cmlidXRlIERVQkxJTl9DT1JFX19DUkVBVEVEID0gZUlOU1RBTkNFLmdldER1YmxpbkNvcmVfQ3JlYXRlZCgpOworCisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+TGljZW5zZTwvYj48L2VtPicgYXR0cmlidXRlIGZlYXR1cmUuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQXR0cmlidXRlIERVQkxJTl9DT1JFX19MSUNFTlNFID0gZUlOU1RBTkNFLmdldER1YmxpbkNvcmVfTGljZW5zZSgpOworCisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+UmVxdWlyZWQ8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUF0dHJpYnV0ZSBEVUJMSU5fQ09SRV9fUkVRVUlSRUQgPSBlSU5TVEFOQ0UuZ2V0RHVibGluQ29yZV9SZXF1aXJlZCgpOworCisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+U3BhdGlhbDwvYj48L2VtPicgYXR0cmlidXRlIGZlYXR1cmUuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQXR0cmlidXRlIERVQkxJTl9DT1JFX19TUEFUSUFMID0gZUlOU1RBTkNFLmdldER1YmxpbkNvcmVfU3BhdGlhbCgpOworCisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+VmFsaWQ8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUF0dHJpYnV0ZSBEVUJMSU5fQ09SRV9fVkFMSUQgPSBlSU5TVEFOQ0UuZ2V0RHVibGluQ29yZV9WYWxpZCgpOworCisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5pbXBsLklkZW50aWZpYWJsZUltcGwgPGVtPklkZW50aWZpYWJsZTwvZW0+fScgY2xhc3MuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uaW1wbC5JZGVudGlmaWFibGVJbXBsCisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5pbXBsLkNvbW1vblBhY2thZ2VJbXBsI2dldElkZW50aWZpYWJsZSgpCisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVDbGFzcyBJREVOVElGSUFCTEUgPSBlSU5TVEFOQ0UuZ2V0SWRlbnRpZmlhYmxlKCk7CisKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5VUkk8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUF0dHJpYnV0ZSBJREVOVElGSUFCTEVfX1VSSSA9IGVJTlNUQU5DRS5nZXRJZGVudGlmaWFibGVfVVJJKCk7CisKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5UeXBlIFVSSTwvYj48L2VtPicgYXR0cmlidXRlIGZlYXR1cmUuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQXR0cmlidXRlIElERU5USUZJQUJMRV9fVFlQRV9VUkkgPSBlSU5TVEFOQ0UuZ2V0SWRlbnRpZmlhYmxlX1R5cGVVUkkoKTsKKworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPkR1YmxpbiBDb3JlPC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UgZmVhdHVyZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVSZWZlcmVuY2UgSURFTlRJRklBQkxFX19EVUJMSU5fQ09SRSA9IGVJTlNUQU5DRS5nZXRJZGVudGlmaWFibGVfRHVibGluQ29yZSgpOworCisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICd7QGxpbmsgamF2YS5sYW5nLkNvbXBhcmFibGUgPGVtPkNvbXBhcmFibGU8L2VtPn0nIGNsYXNzLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQHNlZSBqYXZhLmxhbmcuQ29tcGFyYWJsZQorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uaW1wbC5Db21tb25QYWNrYWdlSW1wbCNnZXRDb21wYXJhYmxlKCkKKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUNsYXNzIENPTVBBUkFCTEUgPSBlSU5TVEFOQ0UuZ2V0Q29tcGFyYWJsZSgpOworCisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5pbXBsLklkZW50aWZpYWJsZUZpbHRlckltcGwgPGVtPklkZW50aWZpYWJsZSBGaWx0ZXI8L2VtPn0nIGNsYXNzLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLmltcGwuSWRlbnRpZmlhYmxlRmlsdGVySW1wbAorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uaW1wbC5Db21tb25QYWNrYWdlSW1wbCNnZXRJZGVudGlmaWFibGVGaWx0ZXIoKQorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQ2xhc3MgSURFTlRJRklBQkxFX0ZJTFRFUiA9IGVJTlNUQU5DRS5nZXRJZGVudGlmaWFibGVGaWx0ZXIoKTsKKworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uaW1wbC5Eb3VibGVWYWx1ZUxpc3RJbXBsIDxlbT5Eb3VibGUgVmFsdWUgTGlzdDwvZW0+fScgY2xhc3MuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uaW1wbC5Eb3VibGVWYWx1ZUxpc3RJbXBsCisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5pbXBsLkNvbW1vblBhY2thZ2VJbXBsI2dldERvdWJsZVZhbHVlTGlzdCgpCisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVDbGFzcyBET1VCTEVfVkFMVUVfTElTVCA9IGVJTlNUQU5DRS5nZXREb3VibGVWYWx1ZUxpc3QoKTsKKworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPlZhbHVlczwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3QgZmVhdHVyZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVSZWZlcmVuY2UgRE9VQkxFX1ZBTFVFX0xJU1RfX1ZBTFVFUyA9IGVJTlNUQU5DRS5nZXREb3VibGVWYWx1ZUxpc3RfVmFsdWVzKCk7CisKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5JZGVudGlmaWVyPC9iPjwvZW0+JyBhdHRyaWJ1dGUgZmVhdHVyZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVBdHRyaWJ1dGUgRE9VQkxFX1ZBTFVFX0xJU1RfX0lERU5USUZJRVIgPSBlSU5TVEFOQ0UuZ2V0RG91YmxlVmFsdWVMaXN0X0lkZW50aWZpZXIoKTsKKworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uaW1wbC5Eb3VibGVWYWx1ZU1hdHJpeEltcGwgPGVtPkRvdWJsZSBWYWx1ZSBNYXRyaXg8L2VtPn0nIGNsYXNzLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLmltcGwuRG91YmxlVmFsdWVNYXRyaXhJbXBsCisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5pbXBsLkNvbW1vblBhY2thZ2VJbXBsI2dldERvdWJsZVZhbHVlTWF0cml4KCkKKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUNsYXNzIERPVUJMRV9WQUxVRV9NQVRSSVggPSBlSU5TVEFOQ0UuZ2V0RG91YmxlVmFsdWVNYXRyaXgoKTsKKworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPlZhbHVlIExpc3RzPC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UgbGlzdCBmZWF0dXJlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRVJlZmVyZW5jZSBET1VCTEVfVkFMVUVfTUFUUklYX19WQUxVRV9MSVNUUyA9IGVJTlNUQU5DRS5nZXREb3VibGVWYWx1ZU1hdHJpeF9WYWx1ZUxpc3RzKCk7CisKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLmltcGwuRG91YmxlVmFsdWVJbXBsIDxlbT5Eb3VibGUgVmFsdWU8L2VtPn0nIGNsYXNzLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLmltcGwuRG91YmxlVmFsdWVJbXBsCisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5pbXBsLkNvbW1vblBhY2thZ2VJbXBsI2dldERvdWJsZVZhbHVlKCkKKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUNsYXNzIERPVUJMRV9WQUxVRSA9IGVJTlNUQU5DRS5nZXREb3VibGVWYWx1ZSgpOworCisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+SWRlbnRpZmllcjwvYj48L2VtPicgYXR0cmlidXRlIGZlYXR1cmUuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQXR0cmlidXRlIERPVUJMRV9WQUxVRV9fSURFTlRJRklFUiA9IGVJTlNUQU5DRS5nZXREb3VibGVWYWx1ZV9JZGVudGlmaWVyKCk7CisKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5WYWx1ZTwvYj48L2VtPicgYXR0cmlidXRlIGZlYXR1cmUuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQXR0cmlidXRlIERPVUJMRV9WQUxVRV9fVkFMVUUgPSBlSU5TVEFOQ0UuZ2V0RG91YmxlVmFsdWVfVmFsdWUoKTsKKworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uaW1wbC5TdHJpbmdWYWx1ZUxpc3RJbXBsIDxlbT5TdHJpbmcgVmFsdWUgTGlzdDwvZW0+fScgY2xhc3MuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uaW1wbC5TdHJpbmdWYWx1ZUxpc3RJbXBsCisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5pbXBsLkNvbW1vblBhY2thZ2VJbXBsI2dldFN0cmluZ1ZhbHVlTGlzdCgpCisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVDbGFzcyBTVFJJTkdfVkFMVUVfTElTVCA9IGVJTlNUQU5DRS5nZXRTdHJpbmdWYWx1ZUxpc3QoKTsKKworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPlZhbHVlczwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3QgZmVhdHVyZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVSZWZlcmVuY2UgU1RSSU5HX1ZBTFVFX0xJU1RfX1ZBTFVFUyA9IGVJTlNUQU5DRS5nZXRTdHJpbmdWYWx1ZUxpc3RfVmFsdWVzKCk7CisKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLmltcGwuU3RyaW5nVmFsdWVJbXBsIDxlbT5TdHJpbmcgVmFsdWU8L2VtPn0nIGNsYXNzLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLmltcGwuU3RyaW5nVmFsdWVJbXBsCisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5pbXBsLkNvbW1vblBhY2thZ2VJbXBsI2dldFN0cmluZ1ZhbHVlKCkKKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUNsYXNzIFNUUklOR19WQUxVRSA9IGVJTlNUQU5DRS5nZXRTdHJpbmdWYWx1ZSgpOworCisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+VmFsdWU8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUF0dHJpYnV0ZSBTVFJJTkdfVkFMVUVfX1ZBTFVFID0gZUlOU1RBTkNFLmdldFN0cmluZ1ZhbHVlX1ZhbHVlKCk7CisKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLlNhbml0eUNoZWNrZXIgPGVtPlNhbml0eSBDaGVja2VyPC9lbT59JyBjbGFzcy4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5TYW5pdHlDaGVja2VyCisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5pbXBsLkNvbW1vblBhY2thZ2VJbXBsI2dldFNhbml0eUNoZWNrZXIoKQorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQ2xhc3MgU0FOSVRZX0NIRUNLRVIgPSBlSU5TVEFOQ0UuZ2V0U2FuaXR5Q2hlY2tlcigpOworCisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+VVJJPC9lbT4nIGRhdGEgdHlwZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBzZWUgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlVSSQorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uaW1wbC5Db21tb25QYWNrYWdlSW1wbCNnZXRVUkkoKQorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFRGF0YVR5cGUgVVJJID0gZUlOU1RBTkNFLmdldFVSSSgpOworCisJfQorCit9IC8vQ29tbW9uUGFja2FnZQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9jb21tb24vRG91YmxlVmFsdWUuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvY29tbW9uL0RvdWJsZVZhbHVlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTc1MzU3ZQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvY29tbW9uL0RvdWJsZVZhbHVlLmphdmEKQEAgLTAsMCArMSw4NiBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDEwIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuTW9kaWZpYWJsZTsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogQSByZXByZXNlbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+RG91YmxlIFZhbHVlPC9iPjwvZW0+Jy4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICoKKyAqIDxwPgorICogVGhlIGZvbGxvd2luZyBmZWF0dXJlcyBhcmUgc3VwcG9ydGVkOgorICogPHVsPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uRG91YmxlVmFsdWUjZ2V0SWRlbnRpZmllciA8ZW0+SWRlbnRpZmllcjwvZW0+fTwvbGk+CisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5Eb3VibGVWYWx1ZSNnZXRWYWx1ZSA8ZW0+VmFsdWU8L2VtPn08L2xpPgorICogPC91bD4KKyAqIDwvcD4KKyAqCisgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uQ29tbW9uUGFja2FnZSNnZXREb3VibGVWYWx1ZSgpCisgKiBAbW9kZWwKKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGludGVyZmFjZSBEb3VibGVWYWx1ZSBleHRlbmRzIE1vZGlmaWFibGUgeworCS8qKgorCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPklkZW50aWZpZXI8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDxwPgorCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPklkZW50aWZpZXI8L2VtPicgYXR0cmlidXRlIGlzbid0IGNsZWFyLAorCSAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4KKwkgKiA8L3A+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+SWRlbnRpZmllcjwvZW0+JyBhdHRyaWJ1dGUuCisJICogQHNlZSAjc2V0SWRlbnRpZmllcihTdHJpbmcpCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLkNvbW1vblBhY2thZ2UjZ2V0RG91YmxlVmFsdWVfSWRlbnRpZmllcigpCisJICogQG1vZGVsCisJICogQGdlbmVyYXRlZAorCSAqLworCVN0cmluZyBnZXRJZGVudGlmaWVyKCk7CisKKwkvKioKKwkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLkRvdWJsZVZhbHVlI2dldElkZW50aWZpZXIgPGVtPklkZW50aWZpZXI8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPklkZW50aWZpZXI8L2VtPicgYXR0cmlidXRlLgorCSAqIEBzZWUgI2dldElkZW50aWZpZXIoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwl2b2lkIHNldElkZW50aWZpZXIoU3RyaW5nIHZhbHVlKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPlZhbHVlPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogVGhlIGRlZmF1bHQgdmFsdWUgaXMgPGNvZGU+IjAuMCI8L2NvZGU+LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPHA+CisJICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+VmFsdWU8L2VtPicgYXR0cmlidXRlIGlzbid0IGNsZWFyLAorCSAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4KKwkgKiA8L3A+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+VmFsdWU8L2VtPicgYXR0cmlidXRlLgorCSAqIEBzZWUgI3NldFZhbHVlKGRvdWJsZSkKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uQ29tbW9uUGFja2FnZSNnZXREb3VibGVWYWx1ZV9WYWx1ZSgpCisJICogQG1vZGVsIGRlZmF1bHQ9IjAuMCIKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJZG91YmxlIGdldFZhbHVlKCk7CisKKwkvKioKKwkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLkRvdWJsZVZhbHVlI2dldFZhbHVlIDxlbT5WYWx1ZTwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+VmFsdWU8L2VtPicgYXR0cmlidXRlLgorCSAqIEBzZWUgI2dldFZhbHVlKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJdm9pZCBzZXRWYWx1ZShkb3VibGUgdmFsdWUpOworCit9IC8vIERvdWJsZVZhbHVlCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2NvbW1vbi9Eb3VibGVWYWx1ZUxpc3QuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvY29tbW9uL0RvdWJsZVZhbHVlTGlzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg4NzIwMGYKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2NvbW1vbi9Eb3VibGVWYWx1ZUxpc3QuamF2YQpAQCAtMCwwICsxLDc2IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb247CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTAgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5FTGlzdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdDsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogQSByZXByZXNlbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+RG91YmxlIFZhbHVlIExpc3Q8L2I+PC9lbT4nLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKgorICogPHA+CisgKiBUaGUgZm9sbG93aW5nIGZlYXR1cmVzIGFyZSBzdXBwb3J0ZWQ6CisgKiA8dWw+CisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5Eb3VibGVWYWx1ZUxpc3QjZ2V0VmFsdWVzIDxlbT5WYWx1ZXM8L2VtPn08L2xpPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uRG91YmxlVmFsdWVMaXN0I2dldElkZW50aWZpZXIgPGVtPklkZW50aWZpZXI8L2VtPn08L2xpPgorICogPC91bD4KKyAqIDwvcD4KKyAqCisgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uQ29tbW9uUGFja2FnZSNnZXREb3VibGVWYWx1ZUxpc3QoKQorICogQG1vZGVsCisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBpbnRlcmZhY2UgRG91YmxlVmFsdWVMaXN0IGV4dGVuZHMgRU9iamVjdCB7CisJLyoqCisJICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+VmFsdWVzPC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UgbGlzdC4KKwkgKiBUaGUgbGlzdCBjb250ZW50cyBhcmUgb2YgdHlwZSB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5Eb3VibGVWYWx1ZX0uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8cD4KKwkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5WYWx1ZXM8L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3QgaXNuJ3QgY2xlYXIsCisJICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLgorCSAqIDwvcD4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5WYWx1ZXM8L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3QuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLkNvbW1vblBhY2thZ2UjZ2V0RG91YmxlVmFsdWVMaXN0X1ZhbHVlcygpCisJICogQG1vZGVsIGNvbnRhaW5tZW50PSJ0cnVlIgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFTGlzdDxEb3VibGVWYWx1ZT4gZ2V0VmFsdWVzKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5JZGVudGlmaWVyPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8cD4KKwkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5JZGVudGlmaWVyPC9lbT4nIGF0dHJpYnV0ZSBpc24ndCBjbGVhciwKKwkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uCisJICogPC9wPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPklkZW50aWZpZXI8L2VtPicgYXR0cmlidXRlLgorCSAqIEBzZWUgI3NldElkZW50aWZpZXIoU3RyaW5nKQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5Db21tb25QYWNrYWdlI2dldERvdWJsZVZhbHVlTGlzdF9JZGVudGlmaWVyKCkKKwkgKiBAbW9kZWwKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJU3RyaW5nIGdldElkZW50aWZpZXIoKTsKKworCS8qKgorCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uRG91YmxlVmFsdWVMaXN0I2dldElkZW50aWZpZXIgPGVtPklkZW50aWZpZXI8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPklkZW50aWZpZXI8L2VtPicgYXR0cmlidXRlLgorCSAqIEBzZWUgI2dldElkZW50aWZpZXIoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwl2b2lkIHNldElkZW50aWZpZXIoU3RyaW5nIHZhbHVlKTsKKworfSAvLyBEb3VibGVWYWx1ZUxpc3QKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvY29tbW9uL0RvdWJsZVZhbHVlTWF0cml4LmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2NvbW1vbi9Eb3VibGVWYWx1ZU1hdHJpeC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRmZGY0NDUKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2NvbW1vbi9Eb3VibGVWYWx1ZU1hdHJpeC5qYXZhCkBAIC0wLDAgKzEsNDkgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbjsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAxMCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLkVMaXN0OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0OworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiBBIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5Eb3VibGUgVmFsdWUgTWF0cml4PC9iPjwvZW0+Jy4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICoKKyAqIDxwPgorICogVGhlIGZvbGxvd2luZyBmZWF0dXJlcyBhcmUgc3VwcG9ydGVkOgorICogPHVsPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uRG91YmxlVmFsdWVNYXRyaXgjZ2V0VmFsdWVMaXN0cyA8ZW0+VmFsdWUgTGlzdHM8L2VtPn08L2xpPgorICogPC91bD4KKyAqIDwvcD4KKyAqCisgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uQ29tbW9uUGFja2FnZSNnZXREb3VibGVWYWx1ZU1hdHJpeCgpCisgKiBAbW9kZWwKKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGludGVyZmFjZSBEb3VibGVWYWx1ZU1hdHJpeCBleHRlbmRzIEVPYmplY3QgeworCS8qKgorCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPlZhbHVlIExpc3RzPC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UgbGlzdC4KKwkgKiBUaGUgbGlzdCBjb250ZW50cyBhcmUgb2YgdHlwZSB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5Eb3VibGVWYWx1ZUxpc3R9LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPHA+CisJICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+VmFsdWUgTGlzdHM8L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3QgaXNuJ3QgY2xlYXIsCisJICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLgorCSAqIDwvcD4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5WYWx1ZSBMaXN0czwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UgbGlzdC4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uQ29tbW9uUGFja2FnZSNnZXREb3VibGVWYWx1ZU1hdHJpeF9WYWx1ZUxpc3RzKCkKKwkgKiBAbW9kZWwgY29udGFpbm1lbnQ9InRydWUiCisJICogQGdlbmVyYXRlZAorCSAqLworCUVMaXN0PERvdWJsZVZhbHVlTGlzdD4gZ2V0VmFsdWVMaXN0cygpOworCit9IC8vIERvdWJsZVZhbHVlTWF0cml4CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2NvbW1vbi9EdWJsaW5Db3JlLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2NvbW1vbi9EdWJsaW5Db3JlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzFhMzYwZAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvY29tbW9uL0R1YmxpbkNvcmUuamF2YQpAQCAtMCwwICsxLDg0MSBAQAorLy8gRHVibGluQ29yZS5qYXZhCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb247CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIAorICogQ29weXJpZ2h0IChjKSAyMDA2LCAyMDA5IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiAKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdCAKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sIAorICogCisgKiBDb250cmlidXRvcnM6IAorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiAKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgamF2YS51dGlsLkRhdGU7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRVN0cnVjdHVyYWxGZWF0dXJlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5HcmFwaDsKKworLyoqCisgKiBBIDxjb2RlPkR1YmxpbkNvcmU8L2NvZGU+IGluc3RhbmNlIHJlY29yZHMgYSBzZXQgb2YgYXR0cmlidXRlcyB0aGF0IGRlc2NyaWJlCisgKiBhICJyZXNvdXJjZSIgYXMgZGVmaW5lZCBpbiB0aGUgIkR1YmxpbiBDb3JlIiBtZXRhZGF0YSBzdGFuZGFyZCA8YQorICogaHJlZj0iaHR0cDovL3d3dy5kdWJsaW5jb3JlLm9yZy8iID5odHRwOi8vd3d3LmR1YmxpbmNvcmUub3JnLzwvYT4uIFRoZXNlCisgKiBhdHRyaWJ1dGVzIGFyZSB1c2VkIHRvIHNwZWNpZnkgdGhlIHNvdXJjZSBhbmQgZGV0YWlscyBvZiB0aGUgdmFyaW91cworICogY29tcG9uZW50cyB0aGF0IGFyZSBjb21iaW5lZCB0byBjcmVhdGUgdGhlIGNhbm9uaWNhbCB7QGxpbmsgR3JhcGh9IHRoYXQgaXMKKyAqIHVzZWQgaW4gU1RFTSBhcyB0aGUgcmVwcmVzZW50YXRpb25hbCBmcmFtZXdvcmsgZm9yIHNpbXVsYXRpb24gc3RhdGUuCisgKiA8cD4KKyAqIE5vdGUgdGhhdCBub3QgYWxsIG9mIHRoZSBkdWJsaW4gY29yZSBhdHRyaWJ1dGVzIGFyZSByZXF1aXJlZC4KKyAqIDwvcD4KKyAqIAorICogQG1vZGVsCisgKi8KK3B1YmxpYyBpbnRlcmZhY2UgRHVibGluQ29yZSBleHRlbmRzIEVPYmplY3QgeworCisJLyoqCisJICogVGhlIFhNTCBhdHRyaWJ1dGUgbmFtZSBmb3IgdGhlICJGb3JtYXQiIG9mIHRoZSByZXNvdXJjZS4KKwkgKiAKKwkgKiBAc2VlICNnZXRGb3JtYXQoKQorCSAqIEBzZWUgI3NldEZvcm1hdChTdHJpbmcpCisJICovCisJU3RyaW5nIEZPUk1BVCA9ICJmb3JtYXQiOworCisJLyoqCisJICogVGhlIFhNTCBhdHRyaWJ1dGUgbmFtZSBmb3IgdGhlICJJZGVudGlmaWVyIiBvZiB0aGUgcmVzb3VyY2UuIEluIFNURU0gdGhpcworCSAqIGlzIHRoZSBVUkkgb2YgdGhlIHJlc291cmNlLgorCSAqIAorCSAqIEBzZWUgI2dldElkZW50aWZpZXIoKQorCSAqIEBzZWUgI3NldElkZW50aWZpZXIoU3RyaW5nKQorCSAqLworCVN0cmluZyBJREVOVElGSUVSID0gImlkZW50aWZpZXIiOworCisJLyoqCisJICogVGhlIFhNTCBhdHRyaWJ1dGUgbmFtZSBmb3IgdGhlICJUaXRsZSIgb2YgdGhlIHJlc291cmNlLgorCSAqIAorCSAqIEBzZWUgI2dldFRpdGxlKCkKKwkgKiBAc2VlICNzZXRUaXRsZShTdHJpbmcpCisJICovCisJU3RyaW5nIFRJVExFID0gInRpdGxlIjsKKwkKKwkvKioKKwkgKiBwcm92aWRlcyB0aGUgZmVhdHVyZSBieSBmZWF0dXJlTmFtZSAoU3RyaW5nKSBpZiBpdCBleGlzdHMuCisJICogT24gZmFpbHVyZSByZXR1cm4gbnVsbAorCSAqIEBwYXJhbSBmZWF0dXJlTmFtZQorCSAqIEByZXR1cm4gZmVhdHVyZSBvciBudWxsCisJICovCisJcHVibGljIGFic3RyYWN0IEVTdHJ1Y3R1cmFsRmVhdHVyZSBnZXRGZWF0dXJlKFN0cmluZyBmZWF0dXJlTmFtZSk7CisKKwkvKioKKwkgKiA8aDE+VGl0bGU8L2gxPgorCSAqIDx1bD4KKwkgKiA8bGk+RGVmaW5pdGlvbjo8L2xpPgorCSAqICJBIG5hbWUgZ2l2ZW4gdG8gdGhlIHJlc291cmNlIgorCSAqIDxsaT5Db21tZW50OjwvbGk+CisJICogVXN1YWxseSB0aGUgZm9ybWFsIG5hbWUgb2YgdGhlIHJlc291cmNlLgorCSAqIDxsaT5FeGFtcGxlOjwvbGk+CisJICogIlVuaXRlZCBTdGF0ZXMgQWRtaW5pc3RyYXRpb24gTGV2ZWwgMCIKKwkgKiA8bGk+VVJJOjwvbGk+CisJICogPGEgaHJlZj0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS90aXRsZSI+CisJICogaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS90aXRsZTwvYT4KKwkgKiA8L3VsPgorCSAqIAorCSAqIEByZXR1cm4gdGhlIHRpdGxlIG9mIHRoZSByZXNvdXJjZS4KKwkgKiBAbW9kZWwgcmVxdWlyZWQ9ImZhbHNlIgorCSAqLworCVN0cmluZyBnZXRUaXRsZSgpOworCisJLyoqCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5EdWJsaW5Db3JlI2dldFRpdGxlIDxlbT5UaXRsZTwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPlRpdGxlPC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiBAc2VlICNnZXRUaXRsZSgpCisJICogQGdlbmVyYXRlZAorCSAqLworCXZvaWQgc2V0VGl0bGUoU3RyaW5nIHZhbHVlKTsKKworCS8qKgorCSAqIDxoMT5JZGVudGlmaWVyPC9oMT4KKwkgKiA8dWw+CisJICogPGxpPkRlZmluaXRpb246PC9saT4KKwkgKiAiQW4gdW5hbWJpZ3VvdXMgcmVmZXJlbmNlIHRvIHRoZSByZXNvdXJjZSB3aXRoaW4gYSBnaXZlbiBjb250ZXh0LiIKKwkgKiA8bGk+Q29tbWVudDo8L2xpPgorCSAqIFRoZSBVUkwgb2YgdGhlIHJlc291cmNlLgorCSAqIDxsaT5FeGFtcGxlOjwvbGk+CisJICogInN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL3N0ZW0vZm9vIgorCSAqIDxsaT5VUkk6PC9saT4KKwkgKiA8YSBocmVmPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xL2lkZW50aWZpZXIiPgorCSAqIGh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvaWRlbnRpZmllcjwvYT4KKwkgKiA8L3VsPgorCSAqIAorCSAqIEByZXR1cm4gdGhlIGlkZW50aWZpZXIgb2YgdGhlIHJlc291cmNlLgorCSAqIEBtb2RlbCByZXF1aXJlZD0iZmFsc2UiCisJICovCisJU3RyaW5nIGdldElkZW50aWZpZXIoKTsKKworCS8qKgorCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uRHVibGluQ29yZSNnZXRJZGVudGlmaWVyIDxlbT5JZGVudGlmaWVyPC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLQorCSAqIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5JZGVudGlmaWVyPC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiBAc2VlICNnZXRJZGVudGlmaWVyKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJdm9pZCBzZXRJZGVudGlmaWVyKFN0cmluZyB2YWx1ZSk7CisKKwkvKioKKwkgKiA8aDE+RGVzY3JpcHRpb248L2gxPgorCSAqIDx1bD4KKwkgKiA8bGk+RGVmaW5pdGlvbjo8L2xpPgorCSAqICJBbiBhY2NvdW50IG9mIHRoZSBjb250ZW50IG9mIHRoZSByZXNvdXJjZS4iCisJICogPGxpPkNvbW1lbnQ6PC9saT4KKwkgKiBUeXBpY2FsbHkgYSBzaG9ydCBhYnN0cmFjdC4KKwkgKiA8bGk+RXhhbXBsZTo8L2xpPgorCSAqICJBbGwgb2YgdGhlIGNhdHRsZSBmYXJtcyBpbiB0aGUgVS5LLiBhcyBvZiAyMDA2LiIKKwkgKiA8bGk+VVJJOjwvbGk+CisJICogPGEgaHJlZj0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS9kZXNjcmlwdGlvbiI+CisJICogaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS9kZXNjcmlwdGlvbjwvYT4KKwkgKiA8L3VsPgorCSAqIAorCSAqIEByZXR1cm4gdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSByZXNvdXJjZS4KKwkgKiBAbW9kZWwgcmVxdWlyZWQ9ImZhbHNlIgorCSAqLworCVN0cmluZyBnZXREZXNjcmlwdGlvbigpOworCisJLyoqCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5EdWJsaW5Db3JlI2dldERlc2NyaXB0aW9uIDxlbT5EZXNjcmlwdGlvbjwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0KKwkgKiBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+RGVzY3JpcHRpb248L2VtPicgYXR0cmlidXRlLgorCSAqIEBzZWUgI2dldERlc2NyaXB0aW9uKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJdm9pZCBzZXREZXNjcmlwdGlvbihTdHJpbmcgdmFsdWUpOworCisJLyoqCisJICogPGgxPkNyZWF0b3I8L2gxPgorCSAqIDx1bD4KKwkgKiA8bGk+RGVmaW5pdGlvbjo8L2xpPgorCSAqICJBbiBlbnRpdHkgcHJpbWFyaWx5IHJlc3BvbnNpYmxlIGZvciBtYWtpbmcgdGhlIGNvbnRlbnQgb2YgdGhlIHJlc291cmNlLiIKKwkgKiA8bGk+Q29tbWVudDo8L2xpPgorCSAqIFR5cGljYWxseSB0aGUgbmFtZSBvZiBhIHBlcnNvbiBvciBvcmdhbml6YXRpb24uCisJICogPGxpPkV4YW1wbGU6PC9saT4KKwkgKiAiSUJNIgorCSAqIDxsaT5VUkk6PC9saT4KKwkgKiA8YSBocmVmPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xL2NyZWF0b3IiPgorCSAqIGh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvY3JlYXRvcjwvYT4KKwkgKiA8L3VsPgorCSAqIAorCSAqIEByZXR1cm4gdGhlIGNyZWF0b3Igb2YgdGhlIHJlc291cmNlLgorCSAqIEBtb2RlbCByZXF1aXJlZD0iZmFsc2UiCisJICovCisJU3RyaW5nIGdldENyZWF0b3IoKTsKKworCS8qKgorCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAnCisJICoge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uRHVibGluQ29yZSNnZXRDcmVhdG9yCisJICogPGVtPkNyZWF0b3I8L2VtPn0nIGF0dHJpYnV0ZS4gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MKKwkgKiAtLT4KKwkgKiAKKwkgKiBAcGFyYW0gdmFsdWUKKwkgKiAgICAgICAgICAgIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+Q3JlYXRvcjwvZW0+JyBhdHRyaWJ1dGUuCisJICogQHNlZSAjZ2V0Q3JlYXRvcigpCisJICogQGdlbmVyYXRlZAorCSAqLworCXZvaWQgc2V0Q3JlYXRvcihTdHJpbmcgdmFsdWUpOworCisJLyoqCisJICogPGgxPkRhdGU8L2gxPgorCSAqIDx1bD4KKwkgKiA8bGk+RGVmaW5pdGlvbjo8L2xpPgorCSAqICJBIGRhdGUgYXNzb2NpYXRlZCB3aXRoIGFuIGV2ZW50IGluIHRoZSBsaWZlIGN5Y2xlIG9mIHRoZSByZXNvdXJjZS4iCisJICogPGxpPkNvbW1lbnQ6PC9saT4KKwkgKiBUeXBpY2FsbHkgWVlZWS1NTS1ERC4gU2VlOiA8YSBocmVmPSJodHRwOi8vd3d3LnczLm9yZy9UUi9OT1RFLWRhdGV0aW1lIj4KKwkgKiBodHRwOi8vd3d3LnczLm9yZy9UUi9OT1RFLWRhdGV0aW1lPC9hPiwgYWxzbyBJU08mbmJzcDs4NjAxLgorCSAqIDxsaT5FeGFtcGxlOjwvbGk+CisJICogIjIwMDYtMDMtMTQiCisJICogPGxpPlVSSTo8L2xpPgorCSAqIDxhIGhyZWY9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvZGF0ZSI+CisJICogaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS9kYXRlPC9hPgorCSAqIDwvdWw+CisJICogCisJICogQHJldHVybiB0aGUgZGF0ZSBvZiB0aGUgcmVzb3VyY2UuCisJICogQG1vZGVsIHJlcXVpcmVkPSJmYWxzZSIKKwkgKi8KKwlTdHJpbmcgZ2V0RGF0ZSgpOworCisJLyoqCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5EdWJsaW5Db3JlI2dldERhdGUgPGVtPkRhdGU8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5EYXRlPC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiBAc2VlICNnZXREYXRlKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJdm9pZCBzZXREYXRlKFN0cmluZyB2YWx1ZSk7CisKKwkvKioKKwkgKiBTZXQgdGhlIGRhdGUuCisJICogCisJICogQHBhcmFtIGRhdGUKKwkgKiAKKwkgKiBAc2VlICNzZXREYXRlKFN0cmluZykKKwkgKiBAc2VlICNnZXREYXRlKCkKKwkgKiBAc2VlICNzZXRDcmVhdGVkKERhdGUpCisJICovCisJdm9pZCBzZXREYXRlKGZpbmFsIERhdGUgZGF0ZSk7CisKKwkvKioKKwkgKiA8aDE+Rm9ybWF0PC9oMT4KKwkgKiA8dWw+CisJICogPGxpPkRlZmluaXRpb246PC9saT4KKwkgKiAiVGhlIHBoeXNpY2FsIG9yIGRpZ2l0YWwgbWFuaWZlc3RhdGlvbiBvZiB0aGUgcmVzb3VyY2UuIgorCSAqIDxsaT5Db21tZW50OjwvbGk+CisJICogQSBNSU1FIHR5cGUgcGVyaGFwcy4KKwkgKiA8bGk+RXhhbXBsZTo8L2xpPiA/CisJICogPGxpPlVSSTo8L2xpPgorCSAqIDxhIGhyZWY9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvZm9ybWF0Ij4KKwkgKiBodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xL2Zvcm1hdDwvYT4KKwkgKiA8L3VsPgorCSAqIAorCSAqIEByZXR1cm4gdGhlIGZvcm1hdCBvZiB0aGUgcmVzb3VyY2UuCisJICogQG1vZGVsIHJlcXVpcmVkPSJmYWxzZSIKKwkgKi8KKwlTdHJpbmcgZ2V0Rm9ybWF0KCk7CisKKwkvKioKKwkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJworCSAqIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLkR1YmxpbkNvcmUjZ2V0Rm9ybWF0CisJICogPGVtPkZvcm1hdDwvZW0+fScgYXR0cmlidXRlLiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYworCSAqIC0tPgorCSAqIAorCSAqIEBwYXJhbSB2YWx1ZQorCSAqICAgICAgICAgICAgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5Gb3JtYXQ8L2VtPicgYXR0cmlidXRlLgorCSAqIEBzZWUgI2dldEZvcm1hdCgpCisJICogQGdlbmVyYXRlZAorCSAqLworCXZvaWQgc2V0Rm9ybWF0KFN0cmluZyB2YWx1ZSk7CisKKwkvKioKKwkgKiA8aDE+UHVibGlzaGVyPC9oMT4KKwkgKiA8dWw+CisJICogPGxpPkRlZmluaXRpb246PC9saT4KKwkgKiAiQW4gZW50aXR5IHJlc3BvbnNpYmxlIGZvciBtYWtpbmcgdGhlIHJlc291cmNlIGF2YWlsYWJsZS4iCisJICogPGxpPkNvbW1lbnQ6PC9saT4KKwkgKiBUeXBpY2FsbHkgdGhlIG5hbWUgb2YgYSBwZXJzb24sIG9yZ2FuaXphdGlvbiBvciBzZXJ2aWNlLgorCSAqIDxsaT5FeGFtcGxlOjwvbGk+CisJICogIklCTSIKKwkgKiA8bGk+VVJJOjwvbGk+CisJICogPGEgaHJlZj0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS9wdWJsaXNoZXIiPgorCSAqIGh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvcHVibGlzaGVyPC9hPgorCSAqIDwvdWw+CisJICogCisJICogQHJldHVybiB0aGUgcHVibGlzaGVyIG9mIHRoZSByZXNvdXJjZS4KKwkgKiBAbW9kZWwgcmVxdWlyZWQ9ImZhbHNlIgorCSAqLworCVN0cmluZyBnZXRQdWJsaXNoZXIoKTsKKworCS8qKgorCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAnCisJICoge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uRHVibGluQ29yZSNnZXRQdWJsaXNoZXIKKwkgKiA8ZW0+UHVibGlzaGVyPC9lbT59JyBhdHRyaWJ1dGUuIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jCisJICogLS0+CisJICogCisJICogQHBhcmFtIHZhbHVlCisJICogICAgICAgICAgICB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPlB1Ymxpc2hlcjwvZW0+JyBhdHRyaWJ1dGUuCisJICogQHNlZSAjZ2V0UHVibGlzaGVyKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJdm9pZCBzZXRQdWJsaXNoZXIoU3RyaW5nIHZhbHVlKTsKKworCS8qKgorCSAqIDxoMT5Db3ZlcmFnZTwvaDE+CisJICogPHVsPgorCSAqIDxsaT5EZWZpbml0aW9uOjwvbGk+CisJICogIlRoZSBleHRlbnQgb3Igc2NvcGUgb2YgdGhlIGNvbnRlbnQgb2YgdGhlIHJlc291cmNlLiIKKwkgKiA8bGk+Q29tbWVudDo8L2xpPgorCSAqIENvdWxkIGluY2x1ZGUgc3BhdGlhbCBsb2NhdGlvbiwgdGVtcG9yYWwgcGVyaW9kIChkYXRlIG9yIGRhdGUgcmFuZ2UpLAorCSAqIGp1cmlzZGljdGlvbi4gU2VlLCB0aGUgPGEKKwkgKiBocmVmPSJodHRwOi8vd3d3LmR1YmxpbmNvcmUub3JnL2RvY3VtZW50cy9kY21pLXBvaW50LyI+IERDTUkgUG9pbnQgPC9hPiwKKwkgKiA8YSBocmVmPSJodHRwOi8vd3d3LmdldHR5LmVkdS9yZXNlYXJjaC90b29scy92b2NhYnVsYXJ5L3Rnbi9pbmRleC5odG1sIj4KKwkgKiBUaGVzYXVydXMgb2YgR2VvZ3JhcGhpYyBOYW1lczwvYT4sIDxhCisJICogaHJlZj0iaHR0cDovL3d3dy5kdWJsaW5jb3JlLm9yZy9kb2N1bWVudHMvZGNtaS1wZXJpb2QvIj5EQ01JIFBlcmlvZDwvYT4KKwkgKiA8bGk+RXhhbXBsZTo8L2xpPgorCSAqICJVbml0ZWQgU3RhdGVzIFVOIEFkbWluaXN0cmF0aW9uIGxldmVsIDIsIDE5MDAiCisJICogPGxpPlVSSTo8L2xpPgorCSAqIDxhIGhyZWY9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvY292ZXJhZ2UiPgorCSAqIGh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvY292ZXJhZ2U8L2E+CisJICogPC91bD4KKwkgKiAKKwkgKiBAcmV0dXJuIHRoZSBjb3ZlcmFnZSBvZiB0aGUgcmVzb3VyY2UuCisJICogQG1vZGVsIHJlcXVpcmVkPSJmYWxzZSIKKwkgKi8KKwlTdHJpbmcgZ2V0Q292ZXJhZ2UoKTsKKworCS8qKgorCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAnCisJICoge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uRHVibGluQ29yZSNnZXRDb3ZlcmFnZQorCSAqIDxlbT5Db3ZlcmFnZTwvZW0+fScgYXR0cmlidXRlLiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYworCSAqIC0tPgorCSAqIAorCSAqIEBwYXJhbSB2YWx1ZQorCSAqICAgICAgICAgICAgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5Db3ZlcmFnZTwvZW0+JyBhdHRyaWJ1dGUuCisJICogQHNlZSAjZ2V0Q292ZXJhZ2UoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwl2b2lkIHNldENvdmVyYWdlKFN0cmluZyB2YWx1ZSk7CisKKwkvKioKKwkgKiA8aDE+Q29udHJpYnV0b3I8L2gxPgorCSAqIDx1bD4KKwkgKiA8bGk+RGVmaW5pdGlvbjo8L2xpPgorCSAqICJBbiBlbnRpdHkgcmVzcG9uc2libGUgZm9yIG1ha2luZyBjb250cmlidXRpb25zIHRvIHRoZSByZXNvdXJjZSIKKwkgKiA8bGk+Q29tbWVudDo8L2xpPgorCSAqIFR5cGljYWxseSB0aGUgbmFtZSBvZiBhIHBlcnNvbiwgb3JnYW5pemF0aW9uIG9yIHNlcnZpY2UuCisJICogPGxpPkV4YW1wbGU6PC9saT4KKwkgKiAiSUJNIgorCSAqIDxsaT5VUkk6PC9saT4KKwkgKiA8YSBocmVmPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xL2NvbnRyaWJ1dG9yIj4KKwkgKiBodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xL2NvbnRyaWJ1dG9yPC9hPgorCSAqIDwvdWw+CisJICogCisJICogQHJldHVybiB0aGUgY29udHJpYnV0b3Igb2YgdGhlIHJlc291cmNlLgorCSAqIEBtb2RlbCByZXF1aXJlZD0iZmFsc2UiCisJICovCisJU3RyaW5nIGdldENvbnRyaWJ1dG9yKCk7CisKKwkvKioKKwkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLkR1YmxpbkNvcmUjZ2V0Q29udHJpYnV0b3IgPGVtPkNvbnRyaWJ1dG9yPC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLQorCSAqIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5Db250cmlidXRvcjwvZW0+JyBhdHRyaWJ1dGUuCisJICogQHNlZSAjZ2V0Q29udHJpYnV0b3IoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwl2b2lkIHNldENvbnRyaWJ1dG9yKFN0cmluZyB2YWx1ZSk7CisKKwkvKioKKwkgKiA8aDE+UmVsYXRpb248L2gxPgorCSAqIDx1bD4KKwkgKiA8bGk+RGVmaW5pdGlvbjo8L2xpPgorCSAqICJBIHJlZmVyZW5jZSB0byBhIHJlbGF0ZWQgcmVzb3VyY2UuIgorCSAqIDxsaT5Db21tZW50OjwvbGk+CisJICogUGVyaGFwcyBhIFVSTD8KKwkgKiA8bGk+RXhhbXBsZTo8L2xpPiA/CisJICogPGxpPlVSSTo8L2xpPgorCSAqIDxhIGhyZWY9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvcmVsYXRpb24iPgorCSAqIGh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvcmVsYXRpb248L2E+CisJICogPC91bD4KKwkgKiAKKwkgKiBAcmV0dXJuIHRoZSByZWxhdGlvbiBvZiB0aGUgcmVzb3VyY2UuCisJICogQG1vZGVsIHJlcXVpcmVkPSJmYWxzZSIKKwkgKi8KKwlTdHJpbmcgZ2V0UmVsYXRpb24oKTsKKworCS8qKgorCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAnCisJICoge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uRHVibGluQ29yZSNnZXRSZWxhdGlvbgorCSAqIDxlbT5SZWxhdGlvbjwvZW0+fScgYXR0cmlidXRlLiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYworCSAqIC0tPgorCSAqIAorCSAqIEBwYXJhbSB2YWx1ZQorCSAqICAgICAgICAgICAgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5SZWxhdGlvbjwvZW0+JyBhdHRyaWJ1dGUuCisJICogQHNlZSAjZ2V0UmVsYXRpb24oKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwl2b2lkIHNldFJlbGF0aW9uKFN0cmluZyB2YWx1ZSk7CisKKwkvKioKKwkgKiA8aDE+UmlnaHRzPC9oMT4KKwkgKiA8dWw+CisJICogPGxpPkRlZmluaXRpb246PC9saT4KKwkgKiAiSW5mb3JtYXRpb24gYWJvdXQgcmlnaHRzIGhlbGQgaW4gYW5kIG92ZXIgdGhlIHJlc291cmNlLiIKKwkgKiA8bGk+Q29tbWVudDo8L2xpPgorCSAqIFR5cGljYWxseSwgYSByaWdodHMgbWFuYWdlbWVudCBzdGF0ZW1lbnQuCisJICogPGxpPkV4YW1wbGU6PC9saT4KKwkgKiAmIzE2OTtJQk0gMjAwNgorCSAqIDxsaT5VUkk6PC9saT4KKwkgKiA8YSBocmVmPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xL3JpZ2h0cyI+CisJICogaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS9yaWdodHM8L2E+CisJICogPC91bD4KKwkgKiAKKwkgKiBAcmV0dXJuIHRoZSByaWdodHMgb2YgdGhlIHJlc291cmNlLgorCSAqIEBtb2RlbCByZXF1aXJlZD0iZmFsc2UiCisJICovCisJU3RyaW5nIGdldFJpZ2h0cygpOworCisJLyoqCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICcKKwkgKiB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5EdWJsaW5Db3JlI2dldFJpZ2h0cworCSAqIDxlbT5SaWdodHM8L2VtPn0nIGF0dHJpYnV0ZS4gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MKKwkgKiAtLT4KKwkgKiAKKwkgKiBAcGFyYW0gdmFsdWUKKwkgKiAgICAgICAgICAgIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+UmlnaHRzPC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiBAc2VlICNnZXRSaWdodHMoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwl2b2lkIHNldFJpZ2h0cyhTdHJpbmcgdmFsdWUpOworCisJLyoqCisJICogPGgxPlNvdXJjZTwvaDE+CisJICogPHVsPgorCSAqIDxsaT5EZWZpbml0aW9uOjwvbGk+CisJICogIkEgcmVmZXJlbmNlIHRvIGEgcmVzb3VyY2UgZnJvbSB3aGljaCB0aGUgcHJlc2VudCByZXNvdXJjZSBpcyBkZXJpdmVkLiIKKwkgKiA8bGk+Q29tbWVudDo8L2xpPgorCSAqIFRoZSBvcmlnaW5hbCBzb3VyY2Ugb2YgdGhlIGNvbnRlbnRzIG9mIHRoZSByZXNvdXJjZS4KKwkgKiA8bGk+RXhhbXBsZTo8L2xpPgorCSAqICJVUyBUaWdlciBmaWxlcyIKKwkgKiA8bGk+VVJJOjwvbGk+CisJICogPGEgaHJlZj0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS9zb3VyY2UiPgorCSAqIGh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvc291cmNlPC9hPgorCSAqIDwvdWw+CisJICogCisJICogQHJldHVybiB0aGUgc291cmNlIG9mIHRoZSByZXNvdXJjZS4KKwkgKiBAbW9kZWwgcmVxdWlyZWQ9ImZhbHNlIgorCSAqLworCVN0cmluZyBnZXRTb3VyY2UoKTsKKworCS8qKgorCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAnCisJICoge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uRHVibGluQ29yZSNnZXRTb3VyY2UKKwkgKiA8ZW0+U291cmNlPC9lbT59JyBhdHRyaWJ1dGUuIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jCisJICogLS0+CisJICogCisJICogQHBhcmFtIHZhbHVlCisJICogICAgICAgICAgICB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPlNvdXJjZTwvZW0+JyBhdHRyaWJ1dGUuCisJICogQHNlZSAjZ2V0U291cmNlKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJdm9pZCBzZXRTb3VyY2UoU3RyaW5nIHZhbHVlKTsKKworCS8qKgorCSAqIDxoMT5TdWJqZWN0PC9oMT4KKwkgKiA8dWw+CisJICogPGxpPkRlZmluaXRpb246PC9saT4KKwkgKiAiVGhlIHRvcGljIG9mIHRoZSBjb250ZW50IG9mIHRoZSByZXNvdXJjZSIKKwkgKiA8bGk+Q29tbWVudDo8L2xpPgorCSAqIFR5cGljYWxseSBrZXl3b3JkcyBvciBjbGFzc2lmaWNhdGlvbiBjb2Rlcy4KKwkgKiA8bGk+RXhhbXBsZTo8L2xpPiA/CisJICogPGxpPlVSSTo8L2xpPgorCSAqIDxhIGhyZWY9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvc3ViamVjdCI+CisJICogaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS9zdWJqZWN0PC9hPgorCSAqIDwvdWw+CisJICogCisJICogQHJldHVybiB0aGUgc3ViamVjdCBvZiB0aGUgcmVzb3VyY2UuCisJICogQG1vZGVsIHJlcXVpcmVkPSJmYWxzZSIKKwkgKi8KKwlTdHJpbmcgZ2V0U3ViamVjdCgpOworCisJLyoqCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICcKKwkgKiB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5EdWJsaW5Db3JlI2dldFN1YmplY3QKKwkgKiA8ZW0+U3ViamVjdDwvZW0+fScgYXR0cmlidXRlLiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYworCSAqIC0tPgorCSAqIAorCSAqIEBwYXJhbSB2YWx1ZQorCSAqICAgICAgICAgICAgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5TdWJqZWN0PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiBAc2VlICNnZXRTdWJqZWN0KCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJdm9pZCBzZXRTdWJqZWN0KFN0cmluZyB2YWx1ZSk7CisKKwkvKioKKwkgKiA8aDE+VHlwZTwvaDE+CisJICogPHVsPgorCSAqIDxsaT5EZWZpbml0aW9uOjwvbGk+CisJICogIlRoZSBuYXR1cmUgb3IgZ2VucmUgb2YgdGhlIHJlc291cmNlLiIKKwkgKiA8bGk+Q29tbWVudDo8L2xpPgorCSAqIFNlZTogPGEKKwkgKiBocmVmPSJodHRwOi8vZHVibGluY29yZS5vcmcvZG9jdW1lbnRzL2RjbWktdHlwZS12b2NhYnVsYXJ5LyI+aHR0cDoKKwkgKiAvL2R1YmxpbmNvcmUub3JnL2RvY3VtZW50cy9kY21pLXR5cGUtdm9jYWJ1bGFyeS88L2E+CisJICogPGxpPkV4YW1wbGU6PC9saT4gPworCSAqIDxsaT5VUkk6PC9saT4KKwkgKiA8YSBocmVmPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xL3R5cGUiPgorCSAqIGh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvdHlwZTwvYT4KKwkgKiA8L3VsPgorCSAqIAorCSAqIEByZXR1cm4gdGhlIHR5cGUgb2YgdGhlIHJlc291cmNlLgorCSAqIEBtb2RlbCByZXF1aXJlZD0iZmFsc2UiCisJICovCisJU3RyaW5nIGdldFR5cGUoKTsKKworCS8qKgorCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uRHVibGluQ29yZSNnZXRUeXBlIDxlbT5UeXBlPC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+VHlwZTwvZW0+JyBhdHRyaWJ1dGUuCisJICogQHNlZSAjZ2V0VHlwZSgpCisJICogQGdlbmVyYXRlZAorCSAqLworCXZvaWQgc2V0VHlwZShTdHJpbmcgdmFsdWUpOworCisJLyoqCisJICogPGgxPkxhbmd1YWdlPC9oMT4KKwkgKiA8dWw+CisJICogPGxpPkRlZmluaXRpb246PC9saT4KKwkgKiAiQSBsYW5ndWFnZSBvZiB0aGUgaW50ZWxsZWN0dWFsIGNvbnRlbnQgb2YgdGhlIHJlc291cmNlLiIKKwkgKiA8bGk+Q29tbWVudDo8L2xpPgorCSAqIEJlc3QgcHJhY3RpY2UgPGEgaHJlZj0iaHR0cDovL3d3dy5pZXRmLm9yZy9yZmMvcmZjMzA2Ni50eHQiPiBSRkMgMzA2NjwvYT4KKwkgKiBhbmQgPGEgaHJlZj0iaHR0cDovL3d3dy5sb2MuZ292L3N0YW5kYXJkcy9pc282MzktMi8iPklTTyA2Mzk8L2E+CisJICogPGxpPkV4YW1wbGU6PC9saT4KKwkgKiAiZW4tR0IiCisJICogPGxpPlVSSTo8L2xpPgorCSAqIDxhIGhyZWY9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvbGFuZ3VhZ2UiPgorCSAqIGh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvbGFuZ3VhZ2U8L2E+CisJICogPC91bD4KKwkgKiAKKwkgKiBAcmV0dXJuIHRoZSBsYW5ndWFnZSBvZiB0aGUgcmVzb3VyY2UuCisJICogQG1vZGVsIHJlcXVpcmVkPSJmYWxzZSIKKwkgKi8KKwlTdHJpbmcgZ2V0TGFuZ3VhZ2UoKTsKKworCS8qKgorCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAnCisJICoge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uRHVibGluQ29yZSNnZXRMYW5ndWFnZQorCSAqIDxlbT5MYW5ndWFnZTwvZW0+fScgYXR0cmlidXRlLiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYworCSAqIC0tPgorCSAqIAorCSAqIEBwYXJhbSB2YWx1ZQorCSAqICAgICAgICAgICAgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5MYW5ndWFnZTwvZW0+JyBhdHRyaWJ1dGUuCisJICogQHNlZSAjZ2V0TGFuZ3VhZ2UoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwl2b2lkIHNldExhbmd1YWdlKFN0cmluZyB2YWx1ZSk7CisKKwkvKioKKwkgKiBoMT5CaWJsaW9ncmFwaGljIENpdGF0aW9uPC9oMT4KKwkgKiA8dWw+CisJICogPGxpPkRlZmluaXRpb246PC9saT4KKwkgKiAiQSBiaWJsaW9ncmFwaGljIHJlZmVyZW5jZSBmb3IgdGhlIHJlc291cmNlLiIKKwkgKiA8bGk+Q29tbWVudDo8L2xpPgorCSAqIAorCSAqIDxsaT5FeGFtcGxlOjwvbGk+CisJICogRm9yZCwgRC5BLiwgIlNURU0gYW5kIHRoZSBhcnQgb2YgY29tcHV0ZXIgbWFpbnRlbmFuY2UiLCBKb3VybmFsIG9mCisJICogRm9vYmFyLCAyMDA2LgorCSAqIDxsaT5VUkk6PC9saT4KKwkgKiA8YSBocmVmPSJodHRwOi8vcHVybC5vcmcvZGMvdGVybXMvMS4xL2JpYmxpb2dyYXBoaWNDaXRhdGlvbiI+CisJICogaHR0cDovL3B1cmwub3JnL2RjL3Rlcm1zLzEuMS9iaWJsaW9ncmFwaGljQ2l0YXRpb248L2E+CisJICogPC91bD4KKwkgKiAKKwkgKiBAcmV0dXJuIGEgYmlibGlvZ3JhcGhpYyBjaXRhdGlvbgorCSAqIEBtb2RlbCByZXF1aXJlZD0iZmFsc2UiCisJICovCisJU3RyaW5nIGdldEJpYmxpb2dyYXBoaWNDaXRhdGlvbigpOworCisJLyoqCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5EdWJsaW5Db3JlI2dldEJpYmxpb2dyYXBoaWNDaXRhdGlvbiA8ZW0+QmlibGlvZ3JhcGhpYyBDaXRhdGlvbjwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0KKwkgKiBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+QmlibGlvZ3JhcGhpYyBDaXRhdGlvbjwvZW0+JyBhdHRyaWJ1dGUuCisJICogQHNlZSAjZ2V0QmlibGlvZ3JhcGhpY0NpdGF0aW9uKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJdm9pZCBzZXRCaWJsaW9ncmFwaGljQ2l0YXRpb24oU3RyaW5nIHZhbHVlKTsKKworCS8qKgorCSAqIGgxPkNyZWF0ZWQ8L2gxPgorCSAqIDx1bD4KKwkgKiA8bGk+RGVmaW5pdGlvbjo8L2xpPgorCSAqICJUaGUgY3JlYXRpb24gZGF0ZSBvZiB0aGUgcmVzb3VyY2UuIgorCSAqIDxsaT5Db21tZW50OjwvbGk+CisJICogQmFzaWNhbGx5LCB0aGUgZm9ybWF0IGlzOiBZWVlZLU1NLURECisJICogPGxpPkV4YW1wbGU6PC9saT4KKwkgKiAyMDA2LTAzLTI5CisJICogPGxpPlVSSTo8L2xpPgorCSAqIDxhIGhyZWY9Imh0dHA6Ly9wdXJsLm9yZy9kYy90ZXJtcy8xLjEvY3JlYXRlZCI+CisJICogaHR0cDovL3B1cmwub3JnL2RjL3Rlcm1zLzEuMS9jcmVhdGVkPC9hPgorCSAqIDwvdWw+CisJICogCisJICogQHJldHVybiB0aGUgZGF0ZSB0aGUgcmVzb3VyY2Ugd2FzIGNyZWF0ZWQuCisJICogQG1vZGVsIHJlcXVpcmVkPSJmYWxzZSIKKwkgKi8KKwlTdHJpbmcgZ2V0Q3JlYXRlZCgpOworCisJLyoqCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICcKKwkgKiB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5EdWJsaW5Db3JlI2dldENyZWF0ZWQKKwkgKiA8ZW0+Q3JlYXRlZDwvZW0+fScgYXR0cmlidXRlLiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYworCSAqIC0tPgorCSAqIAorCSAqIEBwYXJhbSB2YWx1ZQorCSAqICAgICAgICAgICAgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5DcmVhdGVkPC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiBAc2VlICNnZXRDcmVhdGVkKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJdm9pZCBzZXRDcmVhdGVkKFN0cmluZyB2YWx1ZSk7CisKKwkvKioKKwkgKiBTZXQgdGhlIGRhdGUgdGhlIHJlc291cmNlIHdhcyBjcmVhdGVkLgorCSAqIAorCSAqIEBwYXJhbSBkYXRlCisJICogICAgICAgICAgICB0aGUgY3JlYXRpb24gZGF0ZSBvZiB0aGUgcmVzb3VyY2UKKwkgKiAKKwkgKiBAc2VlICNzZXRDcmVhdGVkKFN0cmluZykKKwkgKiBAc2VlICNnZXRDcmVhdGVkKCkKKwkgKiBAc2VlICNzZXREYXRlKERhdGUpCisJICogQHNlZQorCSAqLworCXZvaWQgc2V0Q3JlYXRlZChmaW5hbCBEYXRlIGRhdGUpOworCisJLyoqCisJICogaDE+TGljZW5zZTwvaDE+CisJICogPHVsPgorCSAqIDxsaT5EZWZpbml0aW9uOjwvbGk+CisJICoiQSBsZWdhbCBkb2N1bWVudCBnaXZpbmcgb2ZmaWNpYWwgcGVybWlzc2lvbiB0byBkbyBzb21ldGhpbmcgd2l0aCB0aGUKKwkgKiByZXNvdXJjZS4iCisJICogPGxpPkNvbW1lbnQ6PC9saT4KKwkgKiBCZXN0IHByYWN0aWNlIGlzIHRvIHVzZSBhIFVSSSB0byB0aGUgc3BlY2lmaWMgbGljZW5zZS4KKwkgKiA8bGk+RXhhbXBsZTo8L2xpPgorCSAqIGh0dHA6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnL2xpY2Vuc2UvCisJICogPGxpPlVSSTo8L2xpPgorCSAqIDxhIGhyZWY9Imh0dHA6Ly9wdXJsLm9yZy9kYy90ZXJtcy8xLjEvbGljZW5zZSI+CisJICogaHR0cDovL3B1cmwub3JnL2RjL3Rlcm1zLzEuMS9saWNlbnNlPC9hPgorCSAqIDwvdWw+CisJICogCisJICogQHJldHVybiB0aGUgbGljZW5zZSBhc3NvY2lhdGVkIHdpdGggdGhlIHJlc291cmNlCisJICogQG1vZGVsIHJlcXVpcmVkPSJmYWxzZSIKKwkgKi8KKwlTdHJpbmcgZ2V0TGljZW5zZSgpOworCisJLyoqCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICcKKwkgKiB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5EdWJsaW5Db3JlI2dldExpY2Vuc2UKKwkgKiA8ZW0+TGljZW5zZTwvZW0+fScgYXR0cmlidXRlLiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYworCSAqIC0tPgorCSAqIAorCSAqIEBwYXJhbSB2YWx1ZQorCSAqICAgICAgICAgICAgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5MaWNlbnNlPC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiBAc2VlICNnZXRMaWNlbnNlKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJdm9pZCBzZXRMaWNlbnNlKFN0cmluZyB2YWx1ZSk7CisKKwkvKioKKwkgKiBoMT5SZXF1aXJlczwvaDE+CisJICogPHVsPgorCSAqIDxsaT5EZWZpbml0aW9uOjwvbGk+CisJICoiVGhlIGRlc2NyaWJlZCByZXNvdXJjZSByZXF1aXJlcyB0aGUgcmVmZXJlbmNlZCByZXNvdXJjZSB0byBzdXBwb3J0IGl0cworCSAqIGZ1bmN0aW9uLCBkZWxpdmVyeSwgb3IgY29oZXJlbmNlIG9mIGNvbnRlbnQuIgorCSAqIDxsaT5Db21tZW50OjwvbGk+CisJICogSW4gU1RFTSB0aGlzIGlzIHRoZSBVUkkgdGhhdCBpcyB0aGUgaWRlbnRpZmllciBvZiB0aGUgcmVxdWlyZWQgcmVzb3VyY2UuCisJICogPGxpPkV4YW1wbGU6PC9saT4KKwkgKiBzdGVtOi9ncmFwaHMvc2FtcGxlL3NhbXBsZTEuZ3JhcGgKKwkgKiA8bGk+VVJJOjwvbGk+CisJICogPGEgaHJlZj0iaHR0cDovL3B1cmwub3JnL2RjL3Rlcm1zLzEuMS9yZXF1aXJlcyI+CisJICogaHR0cDovL3B1cmwub3JnL2RjL3Rlcm1zLzEuMS9yZXF1aXJlczwvYT4KKwkgKiA8L3VsPgorCSAqIAorCSAqIEByZXR1cm4gdGhlIGlkZW50aWZpZXIgb2YgYSByZXNvdXJjZSByZXF1aXJlZCBieSB0aGlzIHJlc291cmNlCisJICogQG1vZGVsIHJlcXVpcmVkPSJmYWxzZSIKKwkgKi8KKwlTdHJpbmcgZ2V0UmVxdWlyZWQoKTsKKworCS8qKgorCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAnCisJICoge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uRHVibGluQ29yZSNnZXRSZXF1aXJlZAorCSAqIDxlbT5SZXF1aXJlZDwvZW0+fScgYXR0cmlidXRlLiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYworCSAqIC0tPgorCSAqIAorCSAqIEBwYXJhbSB2YWx1ZQorCSAqICAgICAgICAgICAgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5SZXF1aXJlZDwvZW0+JyBhdHRyaWJ1dGUuCisJICogQHNlZSAjZ2V0UmVxdWlyZWQoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwl2b2lkIHNldFJlcXVpcmVkKFN0cmluZyB2YWx1ZSk7CisKKwkvKioKKwkgKiBoMT5TcGF0aWFsPC9oMT4KKwkgKiA8dWw+CisJICogPGxpPkRlZmluaXRpb246PC9saT4KKwkgKiAiU3BhdGlhbCBjaGFyYWN0ZXJpc3RpY3Mgb2YgdGhlIGludGVsbGVjdHVhbCBjb250ZW50IG9mIHRoZSByZXNvdXJjZS4iCisJICogPGxpPkNvbW1lbnQ6PC9saT4KKwkgKiBTZWUgPGEgaHJlZj0iaHR0cDovL3d3dy5kdWJsaW5jb3JlLm9yZy9kb2N1bWVudHMvZGNtaS1wb2ludC8iPgorCSAqIGh0dHA6Ly93d3cuZHVibGluY29yZS5vcmcvZG9jdW1lbnRzL2RjbWktcG9pbnQvPC9hPiBIb3dldmVyLCB0aGlzIHNob3VsZAorCSAqIHByb2JhYmx5IGJlIGEgVVJJIHRvIGEgZmlsZSB0aGF0IGNvbnRhaW5zIHRoZSBhY3R1YWwgbGF0L2xvbmcgZGF0YSB0aGF0CisJICogZGVzY3JpYmVzIGEgcG9seWdvbiB0aGF0IGRlZmluZXMgdGhlIHNwYXRpYWwgb3V0bGluZSBvZiBhIHBsYWNlLgorCSAqIDxsaT5FeGFtcGxlOjwvbGk+ID8KKwkgKiA8bGk+VVJJOjwvbGk+CisJICogPGEgaHJlZj0iaHR0cDovL3B1cmwub3JnL2RjL3Rlcm1zLzEuMS9zcGF0aWFsIj4KKwkgKiBodHRwOi8vcHVybC5vcmcvZGMvdGVybXMvMS4xL3NwYXRpYWw8L2E+CisJICogPC91bD4KKwkgKiAKKwkgKiBAcmV0dXJuIHRoZSBpZGVudGlmaWVyIG9mIGEgcmVzb3VyY2UgcHJvdmlkaW5nIHNwYXRpYWwgZGF0YQorCSAqIEBtb2RlbCByZXF1aXJlZD0iZmFsc2UiCisJICovCisJU3RyaW5nIGdldFNwYXRpYWwoKTsKKworCS8qKgorCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAnCisJICoge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uRHVibGluQ29yZSNnZXRTcGF0aWFsCisJICogPGVtPlNwYXRpYWw8L2VtPn0nIGF0dHJpYnV0ZS4gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MKKwkgKiAtLT4KKwkgKiAKKwkgKiBAcGFyYW0gdmFsdWUKKwkgKiAgICAgICAgICAgIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+U3BhdGlhbDwvZW0+JyBhdHRyaWJ1dGUuCisJICogQHNlZSAjZ2V0U3BhdGlhbCgpCisJICogQGdlbmVyYXRlZAorCSAqLworCXZvaWQgc2V0U3BhdGlhbChTdHJpbmcgdmFsdWUpOworCisJLyoqCisJICogPGgxPlZhbGlkPC9oMT4KKwkgKiA8dWw+CisJICogPGxpPkRlZmluaXRpb246PC9saT4KKwkgKiAiRGF0ZSAob2Z0ZW4gYSByYW5nZSkgb2YgdmFsaWRpdHkgb2YgYSByZXNvdXJjZS4iCisJICogPGxpPkNvbW1lbnQ6PC9saT4KKwkgKiBTZWUgZW5jb2RlZCBpbiBJU08mbmJzcDs4NjAxIDxhCisJICogaHJlZj0iaHR0cDovL3d3dy53My5vcmcvVFIvTk9URS1kYXRldGltZSI+CisJICogaHR0cDovL3d3dy53My5vcmcvVFIvTk9URS1kYXRldGltZTwvYT4uCisJICogPGxpPkV4YW1wbGU6PC9saT4KKwkgKiBzdGFydD0yMDA2LTAzLTI5OyBlbmQ9MjAwNi0wMy0zMDsgb3Igc2ltcGx5IHN0YXJ0PTIwMDYtMDMtMjk7IGlmIHRoZXJlIGlzCisJICogbm8gZW5kIHRvIHRoZSB2YWxpZGl0eQorCSAqIDxsaT5VUkk6PC9saT4KKwkgKiA8YSBocmVmPSJodHRwOi8vcHVybC5vcmcvZGMvdGVybXMvMS4xL3ZhbGlkIj4KKwkgKiBodHRwOi8vcHVybC5vcmcvZGMvdGVybXMvMS4xL3ZhbGlkPC9hPgorCSAqIDwvdWw+CisJICogCisJICogQHJldHVybiB0aGUgZGF0ZSwgb3IgcmFuZ2UgdGhhdCB0aGUgcmVzb3VyY2UgaXMgdmFsaWQuCisJICogQG1vZGVsIHJlcXVpcmVkPSJmYWxzZSIKKwkgKi8KKwlTdHJpbmcgZ2V0VmFsaWQoKTsKKworCS8qKgorCSAqIEByZXR1cm4gdGhlIHN0YXJ0aW5nIHtAbGluayBEYXRlfSBvZiB0aGUgdmFsaWQgZGF0ZSByYW5nZSwgb3IKKwkgKiAgICAgICAgIDxjb2RlPm51bGw8L2NvZGU+IGlmIHRoZSB2YWxpZCB2YWx1ZSBpcyBub3Qgc2V0IG9yIGlzIG5vdAorCSAqICAgICAgICAgY29ycmVjdGx5IGZvcm1hdHRlZCBhcyBhbiBJU08mbmJzcDs4NjAxIGRhdGUgc3RyaW5nIDxhCisJICogICAgICAgICBocmVmPSJodHRwOi8vd3d3LnczLm9yZy9UUi9OT1RFLWRhdGV0aW1lIj4KKwkgKiAgICAgICAgIGh0dHA6Ly93d3cudzMub3JnL1RSL05PVEUtZGF0ZXRpbWU8L2E+LgorCSAqLworCURhdGUgZ2V0VmFsaWRTdGFydERhdGUoKTsKKworCS8qKgorCSAqIEByZXR1cm4gdGhlIGVuZGluZyB7QGxpbmsgRGF0ZX0gb2YgdGhlIHZhbGlkIGRhdGUgcmFuZ2UsIG9yCisJICogICAgICAgICA8Y29kZT5udWxsPC9jb2RlPiBpZiB0aGUgdmFsaWQgdmFsdWUgaXMgbm90IHNldCBvciB0aGUgZW5kIGRhdGUKKwkgKiAgICAgICAgIGlzIG5vdCBzcGVjaWZpZWQsIG9yIHRoZSB2YWx1ZSBpcyBub3QgY29ycmVjdGx5IGZvcm1hdHRlZCBhcyBhbgorCSAqICAgICAgICAgSVNPJm5ic3A7ODYwMSBkYXRlIHN0cmluZyA8YQorCSAqICAgICAgICAgaHJlZj0iaHR0cDovL3d3dy53My5vcmcvVFIvTk9URS1kYXRldGltZSI+CisJICogICAgICAgICBodHRwOi8vd3d3LnczLm9yZy9UUi9OT1RFLWRhdGV0aW1lPC9hPi4KKwkgKi8KKwlEYXRlIGdldFZhbGlkRW5kRGF0ZSgpOworCisJLyoqCisJICogQHBhcmFtIGR1YmxpbkNvcmUKKwkgKiBAcmV0dXJuIDxjb2RlPnRydWU8L2NvZGU+IGlmIHRoZSBzdGFydCBkYXRlIG9mIHRoZSB2YWxpZCBkYXRlIHJhbmdlCisJICogICAgICAgICBhdHRyaWJ1dGUgaXMgYmVmb3JlIHRoZSBzdGFydCBkYXRlIG9mIHRoZSBwYXNzZWQKKwkgKiAgICAgICAgIHtAbGluayBEdWJsaW5Db3JlfSBpbnN0YW5jZSdzIHZhbGlkIGRhdGUgcmFuZ2UsIG9yLCBpZiB0aGUgcGFzc2VkCisJICogICAgICAgICBpbnN0YW5jZSBpcyA8Y29kZT5udWxsPC9jb2RlPiwgPGNvZGU+ZmFsc2U8L2NvZGU+IG90aGVyd2lzZS4KKwkgKiAgICAgICAgIEFsc28sIDxjb2RlPmZhbHNlPC9jb2RlPiBpcyByZXR1cm5lZCBpZiBlaXRoZXIgaW5zdGFuY2UgZG9lcyBub3QKKwkgKiAgICAgICAgIHNwZWNpZnkgYSB2YWxpZCBkYXRlIHJhbmdlLgorCSAqIAorCSAqIEBzZWUgRHVibGluQ29yZSNnZXRWYWxpZCgpCisJICovCisJYm9vbGVhbiBpc1ZhbGlkQmVmb3JlKER1YmxpbkNvcmUgZHVibGluQ29yZSk7CisKKwkvKioKKwkgKiBDb21wdXRlIHRoZSBleHRlbnQgb2YgdGhlIG92ZXJsYXAgb2YgdGhlIHZhbGlkIGRhdGUgcmFuZ2Ugb2YgdGhpcworCSAqIGluc3RhbmNlIHdpdGggdGhhdCBvZiB0aGUgcGFzc2VkIGluc3RhbmNlLiBJZiBvbmx5IG9uZSBpbnN0YW5jZSBoYXMgYQorCSAqIHZhbGlkIGRhdGEgcmFuZ2Ugc3BlY2lmaWVkIHRoYXQgd2lsbCBiZSByZXR1cm5lZC4KKwkgKiAKKwkgKiBAcGFyYW0gZHVibGluQ29yZQorCSAqIEByZXR1cm4gMC1zdGFydCBkYXRlIG9mIG5ldyByYW5nZSwgMS1lbmQgZGF0ZSBvZiBuZXcgcmFuZ2UsIG9yCisJICogICAgICAgICA8Y29kZT5udWxsPC9jb2RlPiBpZiB0aGVyZSBpcyBubyBvdmVybGFwLgorCSAqLworCURhdGVbXSBjb21wdXRlVmFsaWREYXRlUmFuZ2VPdmVybGFwKER1YmxpbkNvcmUgZHVibGluQ29yZSk7CisJCisJLyoqCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5EdWJsaW5Db3JlI2dldFZhbGlkIDxlbT5WYWxpZDwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPlZhbGlkPC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiBAc2VlICNnZXRWYWxpZCgpCisJICogQGdlbmVyYXRlZAorCSAqLworCXZvaWQgc2V0VmFsaWQoU3RyaW5nIHZhbHVlKTsKKworCS8qKgorCSAqIFNldCB0aGUgc3RhcnRpbmcgZGF0ZSB0aGF0IHRoZSByZXNvdXJjZSBpcyB2YWx1ZS4gTm8gZW5kIGRhdGUgd2lsbCBiZQorCSAqIHNldC4KKwkgKiAKKwkgKiBAcGFyYW0gc3RhcnREYXRlCisJICogICAgICAgICAgICB0aGUgc3RhcnRpbmcgZGF0ZQorCSAqIAorCSAqIEBzZWUgI3NldFZhbGlkKFN0cmluZykKKwkgKiBAc2VlICNzZXRWYWxpZChEYXRlLCBEYXRlKQorCSAqIEBzZWUgI3NldERhdGUoRGF0ZSkKKwkgKiBAc2VlICNzZXRDcmVhdGVkKERhdGUpCisJICovCisJdm9pZCBzZXRWYWxpZChmaW5hbCBEYXRlIHN0YXJ0RGF0ZSk7CisKKwkvKioKKwkgKiBTZXQgdGhlIHN0YXJ0aW5nIGFuZCBlbmRpbmcgZGF0ZXMgdGhhdCB0aGUgcmVzb3VyY2UgaXMgdmFsaWQuCisJICogCisJICogQHBhcmFtIHN0YXJ0RGF0ZQorCSAqICAgICAgICAgICAgdGhlIHN0YXJ0aW5nIGRhdGUKKwkgKiBAcGFyYW0gZW5kRGF0ZQorCSAqICAgICAgICAgICAgdGhlIGVuZGluZyBkYXRlCisJICogCisJICogQHNlZSAjc2V0VmFsaWQoU3RyaW5nKQorCSAqIEBzZWUgI3NldFZhbGlkKERhdGUpCisJICogQHNlZSAjc2V0RGF0ZShEYXRlKQorCSAqIEBzZWUgI3NldENyZWF0ZWQoRGF0ZSkKKwkgKi8KKwl2b2lkIHNldFZhbGlkKGZpbmFsIERhdGUgc3RhcnREYXRlLCBmaW5hbCBEYXRlIGVuZERhdGUpOworCisJLyoqCisJICogSW5pdGlhbGl6ZSBzb21lIG9mIHRoZSBEdWJsaW4gQ29yZSB0ZXJtcyBmcm9tIGluZm9ybWF0aW9uIGF2YWlsYWJsZSBmcm9tCisJICogdGhlIHJ1bi10aW1lIGVudmlyb25tZW50LgorCSAqIDx1bD4KKwkgKiA8bGk+PGNvZGU+Q3JlYXRlZDwvY29kZT4gaXMgc2V0IHRvIHRoZSBjdXJyZW50IGRhdGUgKGUuZy4sIDIwMDYtMDYtMDIpPC9saT4KKwkgKiA8bGk+PGNvZGU+Q3JlYXRvcjwvY29kZT4gaXMgc2V0IHRvIHRoZSB2YWx1ZSByZXR1cm5lZCBieQorCSAqIDxjb2RlPlN5c3RlbS5nZXRQcm9wZXJ0eSgidXNlci5uYW1lIik8L2NvZGU+IChlLmcuLCA8Y29kZT5kYWZvcmQ8L2NvZGU+KQorCSAqIDwvdWw+CisJICogCisJICogQHJldHVybiB0aGUgaW5zdGFuY2UKKwkgKiAKKwkgKiBAc2VlICNzZXRDcmVhdGVkKFN0cmluZykKKwkgKiBAc2VlICNzZXREYXRlKFN0cmluZykKKwkgKiBAc2VlICNzZXRWYWxpZChTdHJpbmcpCisJICogQHNlZSAjc2V0Q3JlYXRvcihTdHJpbmcpCisJICogCisJICogQG1vZGVsIHZvbGF0aWxlPSJ0cnVlIiB0cmFuc2llbnQ9InRydWUiIGNoYW5nZWFibGU9ImZhbHNlIgorCSAqLworCUR1YmxpbkNvcmUgcG9wdWxhdGUoKTsKK30gLy8gRHVibGluQ29yZQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9jb21tb24vSWRlbnRpZmlhYmxlLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2NvbW1vbi9JZGVudGlmaWFibGUuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZDcyOTdlCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9jb21tb24vSWRlbnRpZmlhYmxlLmphdmEKQEAgLTAsMCArMSw5MyBAQAorLy8gSWRlbnRpZmlhYmxlLmphdmEKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbjsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuIAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyAKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0IAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwgCisgKiAKKyAqIENvbnRyaWJ1dG9yczogCisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqYXZhLmxhbmcuQ29tcGFyYWJsZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuVVJJOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5HcmFwaDsKKworLyoqCisgKiBBbiA8Y29kZT5JZGVudGlmaWFibGU8L2NvZGU+IGluc3RhbmNlIHJlcHJlc2VudHMgYW4gImlkZW50aWZpYWJsZSIKKyAqIGNvbXBvbmVudCBpbiBTVEVNLiBTdWNoIGEgY29tcG9uZW50IGlzIG9uZSB0aGF0IGlzIHVuaXF1ZWx5IGlkZW50aWZpZWQgYnkgYQorICoge0BsaW5rIFVSSX0uIEFuIDxjb2RlPklkZW50aWZpYWJsZTwvY29kZT4gYWxzbyBoYXMge0BsaW5rIER1YmxpbkNvcmV9CisgKiBtZXRhZGF0YSAoPGEgaHJlZj0iaHR0cDovL3d3dy5kdWJsaW5jb3JlLm9yZy8iID5odHRwOi8vd3d3LmR1YmxpbmNvcmUub3JnLzwvYT4pCisgKiBhc3NvY2lhdGVkIHdpdGggaXQgdGhhdCBkZWZpbmVzIGl0cyBvcmlnaW4gYW5kIGNvbnRlbnRzLgorICogPHA+CisgKiBWaXJ0dWFsbHkgYWxsIGNvbXBvbmVudHMgaW4gYSBTVEVNIHNpbXVsYXRpb24gYXJlIDxjb2RlPklkZW50aWZpYWJsZTwvY29kZT4uCisgKiA8L3A+CisgKiAKKyAqIEBzZWUgR3JhcGgKKyAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLk1vZGVsCisgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zY2VuYXJpby5TY2VuYXJpbworICogCisgKiBAbW9kZWwgYWJzdHJhY3Q9InRydWUiCisgKiBAaW1wbGVtZW50cyBTYW5pdHlDaGVja2VyCisgKi8KK3B1YmxpYyBpbnRlcmZhY2UgSWRlbnRpZmlhYmxlIGV4dGVuZHMgQ29tcGFyYWJsZTxJZGVudGlmaWFibGU+LCBTYW5pdHlDaGVja2VyIHsKKworCS8qKgorCSAqIEByZXR1cm4gdGhlIFVSTCB0aGF0IHVuaXF1ZWx5IGlkZW50aWZpZXMgdGhpcyBJZGVudGlmaWFibGUgY29tcG9uZW50LgorCSAqIAorCSAqIEBtb2RlbCByZXF1aXJlZD0idHJ1ZSIKKwkgKi8KKwlVUkkgZ2V0VVJJKCk7CisKKwkvKioKKwkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLklkZW50aWZpYWJsZSNnZXRVUkkgPGVtPlVSSTwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPlVSSTwvZW0+JyBhdHRyaWJ1dGUuCisJICogQHNlZSAjZ2V0VVJJKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJdm9pZCBzZXRVUkkoVVJJIHZhbHVlKTsKKworCS8qKgorCSAqIEByZXR1cm4gdGhlIFVSTCB0aGF0IHVuaXF1ZWx5IGlkZW50aWZpZXMgdGhlIHR5cGUgb2YgdGhpcyBJZGVudGlmaWFibGUKKwkgKiAgICAgICAgIGNvbXBvbmVudC4KKwkgKiAKKwkgKiBAbW9kZWwgcmVxdWlyZWQ9InRydWUiCisJICovCisJVVJJIGdldFR5cGVVUkkoKTsKKworCS8qKgorCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uSWRlbnRpZmlhYmxlI2dldFR5cGVVUkkgPGVtPlR5cGUgVVJJPC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+VHlwZSBVUkk8L2VtPicgYXR0cmlidXRlLgorCSAqIEBzZWUgI2dldFR5cGVVUkkoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwl2b2lkIHNldFR5cGVVUkkoVVJJIHZhbHVlKTsKKworCS8qKgorCSAqIEByZXR1cm4gdGhlICJEdWJsaW4gQ29yZSIgbWV0YWRhdGEgPGEKKwkgKiAgICAgICAgIGhyZWY9Imh0dHA6Ly93d3cuZHVibGluY29yZS5vcmcvIj5odHRwOi8vd3d3LmR1YmxpbmNvcmUub3JnLzwvYT4KKwkgKiAgICAgICAgIGFzc29jaWF0ZWQgd2l0aCB0aGlzIElkZW50aWZpYWJsZSBjb21wb25lbnQuCisJICogQG1vZGVsIGNvbnRhaW5tZW50PSJ0cnVlIiByZXF1aXJlZD0idHJ1ZSIKKwkgKi8KKwlEdWJsaW5Db3JlIGdldER1YmxpbkNvcmUoKTsKKworCS8qKgorCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uSWRlbnRpZmlhYmxlI2dldER1YmxpbkNvcmUgPGVtPkR1YmxpbiBDb3JlPC9lbT59JyBjb250YWlubWVudCByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+RHVibGluIENvcmU8L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlLgorCSAqIEBzZWUgI2dldER1YmxpbkNvcmUoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwl2b2lkIHNldER1YmxpbkNvcmUoRHVibGluQ29yZSB2YWx1ZSk7CisKKwkvKioKKwkgKiBAcmV0dXJuIHRydWUgaWYgdGhlIGluc3RhbmNlIGlzICJzYW5lIiwgZmFsc2Ugb3RoZXJ3aXNlLgorCSAqIEBtb2RlbCB2b2xhdGlsZT0idHJ1ZSIgdHJhbnNpZW50PSJ0cnVlIiBjaGFuZ2VhYmxlPSJmYWxzZSIKKwkgKi8KKwlib29sZWFuIHNhbmUoKTsKK30gLy8gSWRlbnRpZmlhYmxlCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2NvbW1vbi9JZGVudGlmaWFibGVGaWx0ZXIuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvY29tbW9uL0lkZW50aWZpYWJsZUZpbHRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVhYWQwYmEKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2NvbW1vbi9JZGVudGlmaWFibGVGaWx0ZXIuamF2YQpAQCAtMCwwICsxLDI2IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb247CisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDEwIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0OworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiBBIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5JZGVudGlmaWFibGUgRmlsdGVyPC9iPjwvZW0+Jy4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICoKKyAqCisgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uQ29tbW9uUGFja2FnZSNnZXRJZGVudGlmaWFibGVGaWx0ZXIoKQorICogQG1vZGVsCisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBpbnRlcmZhY2UgSWRlbnRpZmlhYmxlRmlsdGVyIGV4dGVuZHMgRU9iamVjdCB7Cit9IC8vIElkZW50aWZpYWJsZUZpbHRlcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9jb21tb24vU2FuaXR5Q2hlY2tlci5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9jb21tb24vU2FuaXR5Q2hlY2tlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNkOWE3ZGIKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2NvbW1vbi9TYW5pdHlDaGVja2VyLmphdmEKQEAgLTAsMCArMSwzNCBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAKKyAqIENvcHlyaWdodCAoYykgMjAxMSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4gCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIAorICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wIAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQgCisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbCAKKyAqIAorICogQ29udHJpYnV0b3JzOiAKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdDsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogQSByZXByZXNlbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+U2FuaXR5IENoZWNrZXI8L2I+PC9lbT4nLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKgorICoKKyAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5Db21tb25QYWNrYWdlI2dldFNhbml0eUNoZWNrZXIoKQorICogQG1vZGVsIGludGVyZmFjZT0idHJ1ZSIgYWJzdHJhY3Q9InRydWUiCisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBpbnRlcmZhY2UgU2FuaXR5Q2hlY2tlciBleHRlbmRzIEVPYmplY3QgeworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQG1vZGVsCisJICogQGdlbmVyYXRlZAorCSAqLworCWJvb2xlYW4gc2FuZSgpOworCit9IC8vIFNhbml0eUNoZWNrZXIKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvY29tbW9uL1N0cmluZ1ZhbHVlLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2NvbW1vbi9TdHJpbmdWYWx1ZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhkNzRlZDQKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2NvbW1vbi9TdHJpbmdWYWx1ZS5qYXZhCkBAIC0wLDAgKzEsNTkgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbjsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAxMCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuTW9kaWZpYWJsZTsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogQSByZXByZXNlbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+U3RyaW5nIFZhbHVlPC9iPjwvZW0+Jy4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICoKKyAqIDxwPgorICogVGhlIGZvbGxvd2luZyBmZWF0dXJlcyBhcmUgc3VwcG9ydGVkOgorICogPHVsPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uU3RyaW5nVmFsdWUjZ2V0VmFsdWUgPGVtPlZhbHVlPC9lbT59PC9saT4KKyAqIDwvdWw+CisgKiA8L3A+CisgKgorICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLkNvbW1vblBhY2thZ2UjZ2V0U3RyaW5nVmFsdWUoKQorICogQG1vZGVsCisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBpbnRlcmZhY2UgU3RyaW5nVmFsdWUgZXh0ZW5kcyBNb2RpZmlhYmxlIHsKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5WYWx1ZTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPHA+CisJICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+VmFsdWU8L2VtPicgYXR0cmlidXRlIGlzbid0IGNsZWFyLAorCSAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4KKwkgKiA8L3A+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+VmFsdWU8L2VtPicgYXR0cmlidXRlLgorCSAqIEBzZWUgI3NldFZhbHVlKFN0cmluZykKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uQ29tbW9uUGFja2FnZSNnZXRTdHJpbmdWYWx1ZV9WYWx1ZSgpCisJICogQG1vZGVsCisJICogQGdlbmVyYXRlZAorCSAqLworCVN0cmluZyBnZXRWYWx1ZSgpOworCisJLyoqCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5TdHJpbmdWYWx1ZSNnZXRWYWx1ZSA8ZW0+VmFsdWU8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPlZhbHVlPC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiBAc2VlICNnZXRWYWx1ZSgpCisJICogQGdlbmVyYXRlZAorCSAqLworCXZvaWQgc2V0VmFsdWUoU3RyaW5nIHZhbHVlKTsKKworfSAvLyBTdHJpbmdWYWx1ZQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9jb21tb24vU3RyaW5nVmFsdWVMaXN0LmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2NvbW1vbi9TdHJpbmdWYWx1ZUxpc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNzUzMmE4Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9jb21tb24vU3RyaW5nVmFsdWVMaXN0LmphdmEKQEAgLTAsMCArMSw0OSBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDEwIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuRUxpc3Q7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3Q7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIEEgcmVwcmVzZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPlN0cmluZyBWYWx1ZSBMaXN0PC9iPjwvZW0+Jy4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICoKKyAqIDxwPgorICogVGhlIGZvbGxvd2luZyBmZWF0dXJlcyBhcmUgc3VwcG9ydGVkOgorICogPHVsPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uU3RyaW5nVmFsdWVMaXN0I2dldFZhbHVlcyA8ZW0+VmFsdWVzPC9lbT59PC9saT4KKyAqIDwvdWw+CisgKiA8L3A+CisgKgorICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLkNvbW1vblBhY2thZ2UjZ2V0U3RyaW5nVmFsdWVMaXN0KCkKKyAqIEBtb2RlbAorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgaW50ZXJmYWNlIFN0cmluZ1ZhbHVlTGlzdCBleHRlbmRzIEVPYmplY3QgeworCS8qKgorCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPlZhbHVlczwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3QuCisJICogVGhlIGxpc3QgY29udGVudHMgYXJlIG9mIHR5cGUge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uU3RyaW5nVmFsdWV9LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPHA+CisJICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+VmFsdWVzPC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0IGlzbid0IGNsZWFyLAorCSAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4KKwkgKiA8L3A+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+VmFsdWVzPC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0LgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5Db21tb25QYWNrYWdlI2dldFN0cmluZ1ZhbHVlTGlzdF9WYWx1ZXMoKQorCSAqIEBtb2RlbCBjb250YWlubWVudD0idHJ1ZSIKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUxpc3Q8U3RyaW5nVmFsdWU+IGdldFZhbHVlcygpOworCit9IC8vIFN0cmluZ1ZhbHVlTGlzdApkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9jb21tb24vaW1wbC9Db21tb25GYWN0b3J5SW1wbC5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9jb21tb24vaW1wbC9Db21tb25GYWN0b3J5SW1wbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcwZjQ4ZDgKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2NvbW1vbi9pbXBsL0NvbW1vbkZhY3RvcnlJbXBsLmphdmEKQEAgLTAsMCArMSwyMjkgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5pbXBsOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAKKyAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4gCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIAorICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wIAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQgCisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbCAKKyAqIAorICogQ29udHJpYnV0b3JzOiAKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5VUkk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzczsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRURhdGFUeXBlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuaW1wbC5FRmFjdG9yeUltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnBsdWdpbi5FY29yZVBsdWdpbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLkNvbW1vbkZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5Db21tb25QYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uRG91YmxlVmFsdWU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5Eb3VibGVWYWx1ZUxpc3Q7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5Eb3VibGVWYWx1ZU1hdHJpeDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLkR1YmxpbkNvcmU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5JZGVudGlmaWFibGVGaWx0ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5TdHJpbmdWYWx1ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLlN0cmluZ1ZhbHVlTGlzdDsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIG1vZGVsIDxiPkZhY3Rvcnk8L2I+LgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBDb21tb25GYWN0b3J5SW1wbCBleHRlbmRzIEVGYWN0b3J5SW1wbCBpbXBsZW1lbnRzIENvbW1vbkZhY3RvcnkgeworCS8qKgorCSAqIENyZWF0ZXMgdGhlIGRlZmF1bHQgZmFjdG9yeSBpbXBsZW1lbnRhdGlvbi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgc3RhdGljIENvbW1vbkZhY3RvcnkgaW5pdCgpIHsKKwkJdHJ5IHsKKwkJCUNvbW1vbkZhY3RvcnkgdGhlQ29tbW9uRmFjdG9yeSA9IChDb21tb25GYWN0b3J5KUVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVGYWN0b3J5KCJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9jb21tb24uZWNvcmUiKTsgLy8kTk9OLU5MUy0xJCAKKwkJCWlmICh0aGVDb21tb25GYWN0b3J5ICE9IG51bGwpIHsKKwkJCQlyZXR1cm4gdGhlQ29tbW9uRmFjdG9yeTsKKwkJCX0KKwkJfQorCQljYXRjaCAoRXhjZXB0aW9uIGV4Y2VwdGlvbikgeworCQkJRWNvcmVQbHVnaW4uSU5TVEFOQ0UubG9nKGV4Y2VwdGlvbik7CisJCX0KKwkJcmV0dXJuIG5ldyBDb21tb25GYWN0b3J5SW1wbCgpOworCX0KKworCS8qKgorCSAqIENyZWF0ZXMgYW4gaW5zdGFuY2Ugb2YgdGhlIGZhY3RvcnkuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIENvbW1vbkZhY3RvcnlJbXBsKCkgeworCQlzdXBlcigpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBFT2JqZWN0IGNyZWF0ZShFQ2xhc3MgZUNsYXNzKSB7CisJCXN3aXRjaCAoZUNsYXNzLmdldENsYXNzaWZpZXJJRCgpKSB7CisJCQljYXNlIENvbW1vblBhY2thZ2UuRFVCTElOX0NPUkU6IHJldHVybiBjcmVhdGVEdWJsaW5Db3JlKCk7CisJCQljYXNlIENvbW1vblBhY2thZ2UuSURFTlRJRklBQkxFX0ZJTFRFUjogcmV0dXJuIGNyZWF0ZUlkZW50aWZpYWJsZUZpbHRlcigpOworCQkJY2FzZSBDb21tb25QYWNrYWdlLkRPVUJMRV9WQUxVRV9MSVNUOiByZXR1cm4gY3JlYXRlRG91YmxlVmFsdWVMaXN0KCk7CisJCQljYXNlIENvbW1vblBhY2thZ2UuRE9VQkxFX1ZBTFVFX01BVFJJWDogcmV0dXJuIGNyZWF0ZURvdWJsZVZhbHVlTWF0cml4KCk7CisJCQljYXNlIENvbW1vblBhY2thZ2UuRE9VQkxFX1ZBTFVFOiByZXR1cm4gY3JlYXRlRG91YmxlVmFsdWUoKTsKKwkJCWNhc2UgQ29tbW9uUGFja2FnZS5TVFJJTkdfVkFMVUVfTElTVDogcmV0dXJuIGNyZWF0ZVN0cmluZ1ZhbHVlTGlzdCgpOworCQkJY2FzZSBDb21tb25QYWNrYWdlLlNUUklOR19WQUxVRTogcmV0dXJuIGNyZWF0ZVN0cmluZ1ZhbHVlKCk7CisJCQlkZWZhdWx0OgorCQkJCXRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIlRoZSBjbGFzcyAnIiArIGVDbGFzcy5nZXROYW1lKCkgKyAiJyBpcyBub3QgYSB2YWxpZCBjbGFzc2lmaWVyIik7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAorCQl9CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIE9iamVjdCBjcmVhdGVGcm9tU3RyaW5nKEVEYXRhVHlwZSBlRGF0YVR5cGUsIFN0cmluZyBpbml0aWFsVmFsdWUpIHsKKwkJc3dpdGNoIChlRGF0YVR5cGUuZ2V0Q2xhc3NpZmllcklEKCkpIHsKKwkJCWNhc2UgQ29tbW9uUGFja2FnZS5VUkk6CisJCQkJcmV0dXJuIGNyZWF0ZVVSSUZyb21TdHJpbmcoZURhdGFUeXBlLCBpbml0aWFsVmFsdWUpOworCQkJZGVmYXVsdDoKKwkJCQl0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJUaGUgZGF0YXR5cGUgJyIgKyBlRGF0YVR5cGUuZ2V0TmFtZSgpICsgIicgaXMgbm90IGEgdmFsaWQgY2xhc3NpZmllciIpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKKwkJfQorCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBTdHJpbmcgY29udmVydFRvU3RyaW5nKEVEYXRhVHlwZSBlRGF0YVR5cGUsIE9iamVjdCBpbnN0YW5jZVZhbHVlKSB7CisJCXN3aXRjaCAoZURhdGFUeXBlLmdldENsYXNzaWZpZXJJRCgpKSB7CisJCQljYXNlIENvbW1vblBhY2thZ2UuVVJJOgorCQkJCXJldHVybiBjb252ZXJ0VVJJVG9TdHJpbmcoZURhdGFUeXBlLCBpbnN0YW5jZVZhbHVlKTsKKwkJCWRlZmF1bHQ6CisJCQkJdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiVGhlIGRhdGF0eXBlICciICsgZURhdGFUeXBlLmdldE5hbWUoKSArICInIGlzIG5vdCBhIHZhbGlkIGNsYXNzaWZpZXIiKTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCisJCX0KKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRHVibGluQ29yZSBjcmVhdGVEdWJsaW5Db3JlKCkgeworCQlEdWJsaW5Db3JlSW1wbCBkdWJsaW5Db3JlID0gbmV3IER1YmxpbkNvcmVJbXBsKCk7CisJCXJldHVybiBkdWJsaW5Db3JlOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBJZGVudGlmaWFibGVGaWx0ZXIgY3JlYXRlSWRlbnRpZmlhYmxlRmlsdGVyKCkgeworCQlJZGVudGlmaWFibGVGaWx0ZXJJbXBsIGlkZW50aWZpYWJsZUZpbHRlciA9IG5ldyBJZGVudGlmaWFibGVGaWx0ZXJJbXBsKCk7CisJCXJldHVybiBpZGVudGlmaWFibGVGaWx0ZXI7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIERvdWJsZVZhbHVlTGlzdCBjcmVhdGVEb3VibGVWYWx1ZUxpc3QoKSB7CisJCURvdWJsZVZhbHVlTGlzdEltcGwgZG91YmxlVmFsdWVMaXN0ID0gbmV3IERvdWJsZVZhbHVlTGlzdEltcGwoKTsKKwkJcmV0dXJuIGRvdWJsZVZhbHVlTGlzdDsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRG91YmxlVmFsdWVNYXRyaXggY3JlYXRlRG91YmxlVmFsdWVNYXRyaXgoKSB7CisJCURvdWJsZVZhbHVlTWF0cml4SW1wbCBkb3VibGVWYWx1ZU1hdHJpeCA9IG5ldyBEb3VibGVWYWx1ZU1hdHJpeEltcGwoKTsKKwkJcmV0dXJuIGRvdWJsZVZhbHVlTWF0cml4OworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBEb3VibGVWYWx1ZSBjcmVhdGVEb3VibGVWYWx1ZSgpIHsKKwkJRG91YmxlVmFsdWVJbXBsIGRvdWJsZVZhbHVlID0gbmV3IERvdWJsZVZhbHVlSW1wbCgpOworCQlyZXR1cm4gZG91YmxlVmFsdWU7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFN0cmluZ1ZhbHVlTGlzdCBjcmVhdGVTdHJpbmdWYWx1ZUxpc3QoKSB7CisJCVN0cmluZ1ZhbHVlTGlzdEltcGwgc3RyaW5nVmFsdWVMaXN0ID0gbmV3IFN0cmluZ1ZhbHVlTGlzdEltcGwoKTsKKwkJcmV0dXJuIHN0cmluZ1ZhbHVlTGlzdDsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgU3RyaW5nVmFsdWUgY3JlYXRlU3RyaW5nVmFsdWUoKSB7CisJCVN0cmluZ1ZhbHVlSW1wbCBzdHJpbmdWYWx1ZSA9IG5ldyBTdHJpbmdWYWx1ZUltcGwoKTsKKwkJcmV0dXJuIHN0cmluZ1ZhbHVlOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIGVEYXRhVHlwZSAKKwkgKiBAcGFyYW0gaW5pdGlhbFZhbHVlIAorCSAqIEByZXR1cm4gdGhlIFVSSQorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJcHVibGljIFVSSSBjcmVhdGVVUklGcm9tU3RyaW5nKEVEYXRhVHlwZSBlRGF0YVR5cGUsIFN0cmluZyBpbml0aWFsVmFsdWUpIHsKKwkJcmV0dXJuIFVSSS5jcmVhdGVVUkkoaW5pdGlhbFZhbHVlKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJcHVibGljIFN0cmluZyBjb252ZXJ0VVJJVG9TdHJpbmcoRURhdGFUeXBlIGVEYXRhVHlwZSwgT2JqZWN0IGluc3RhbmNlVmFsdWUpIHsKKwkJaWYoaW5zdGFuY2VWYWx1ZSA9PSBudWxsKSByZXR1cm4gIiI7CisJCXJldHVybiBpbnN0YW5jZVZhbHVlLnRvU3RyaW5nKCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIENvbW1vblBhY2thZ2UgZ2V0Q29tbW9uUGFja2FnZSgpIHsKKwkJcmV0dXJuIChDb21tb25QYWNrYWdlKWdldEVQYWNrYWdlKCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZGVwcmVjYXRlZAorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlARGVwcmVjYXRlZAorCXB1YmxpYyBzdGF0aWMgQ29tbW9uUGFja2FnZSBnZXRQYWNrYWdlKCkgeworCQlyZXR1cm4gQ29tbW9uUGFja2FnZS5lSU5TVEFOQ0U7CisJfQorCit9IC8vQ29tbW9uRmFjdG9yeUltcGwKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvY29tbW9uL2ltcGwvQ29tbW9uUGFja2FnZUltcGwuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvY29tbW9uL2ltcGwvQ29tbW9uUGFja2FnZUltcGwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yY2ZhMGI3Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9jb21tb24vaW1wbC9Db21tb25QYWNrYWdlSW1wbC5qYXZhCkBAIC0wLDAgKzEsODAwIEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uaW1wbDsKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIAorICogQ29weXJpZ2h0IChjKSAyMDA2LCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiAKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdCAKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sIAorICogCisgKiBDb250cmlidXRvcnM6IAorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiAKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgamF2YS5sYW5nLkNvbXBhcmFibGU7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVBdHRyaWJ1dGU7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzczsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRURhdGFUeXBlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FR2VuZXJpY1R5cGU7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FUmVmZXJlbmNlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FY29yZVBhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLmltcGwuRVBhY2thZ2VJbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uQ29tbW9uRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLkNvbW1vblBhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5Eb3VibGVWYWx1ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLkRvdWJsZVZhbHVlTGlzdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLkRvdWJsZVZhbHVlTWF0cml4OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uRHVibGluQ29yZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLklkZW50aWZpYWJsZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLklkZW50aWZpYWJsZUZpbHRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLlNhbml0eUNoZWNrZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5TdHJpbmdWYWx1ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLlN0cmluZ1ZhbHVlTGlzdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZXhwZXJpbWVudC5FeHBlcmltZW50UGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZXhwZXJpbWVudC5pbXBsLkV4cGVyaW1lbnRQYWNrYWdlSW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguR3JhcGhQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5pbXBsLkdyYXBoUGFja2FnZUltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmxvZ2dlci5Mb2dnZXJQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5sb2dnZXIuaW1wbC5Mb2dnZXJQYWNrYWdlSW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuTW9kZWxQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5pbXBsLk1vZGVsUGFja2FnZUltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLk1vZGlmaWVyUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuaW1wbC5Nb2RpZmllclBhY2thZ2VJbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUuUHJlZGljYXRlUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlLmltcGwuUHJlZGljYXRlUGFja2FnZUltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNjZW5hcmlvLlNjZW5hcmlvUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2NlbmFyaW8uaW1wbC5TY2VuYXJpb1BhY2thZ2VJbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zZXF1ZW5jZXIuU2VxdWVuY2VyUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2VxdWVuY2VyLmltcGwuU2VxdWVuY2VyUGFja2FnZUltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNvbHZlci5Tb2x2ZXJQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zb2x2ZXIuaW1wbC5Tb2x2ZXJQYWNrYWdlSW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUudHJpZ2dlci5UcmlnZ2VyUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUudHJpZ2dlci5pbXBsLlRyaWdnZXJQYWNrYWdlSW1wbDsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIG1vZGVsIDxiPlBhY2thZ2U8L2I+LgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBDb21tb25QYWNrYWdlSW1wbCBleHRlbmRzIEVQYWNrYWdlSW1wbCBpbXBsZW1lbnRzIENvbW1vblBhY2thZ2UgeworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByaXZhdGUgRUNsYXNzIGR1YmxpbkNvcmVFQ2xhc3MgPSBudWxsOworCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJpdmF0ZSBFQ2xhc3MgaWRlbnRpZmlhYmxlRUNsYXNzID0gbnVsbDsKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByaXZhdGUgRUNsYXNzIGNvbXBhcmFibGVFQ2xhc3MgPSBudWxsOworCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJpdmF0ZSBFQ2xhc3MgaWRlbnRpZmlhYmxlRmlsdGVyRUNsYXNzID0gbnVsbDsKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByaXZhdGUgRUNsYXNzIGRvdWJsZVZhbHVlTGlzdEVDbGFzcyA9IG51bGw7CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcml2YXRlIEVDbGFzcyBkb3VibGVWYWx1ZU1hdHJpeEVDbGFzcyA9IG51bGw7CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcml2YXRlIEVDbGFzcyBkb3VibGVWYWx1ZUVDbGFzcyA9IG51bGw7CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcml2YXRlIEVDbGFzcyBzdHJpbmdWYWx1ZUxpc3RFQ2xhc3MgPSBudWxsOworCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJpdmF0ZSBFQ2xhc3Mgc3RyaW5nVmFsdWVFQ2xhc3MgPSBudWxsOworCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJpdmF0ZSBFQ2xhc3Mgc2FuaXR5Q2hlY2tlckVDbGFzcyA9IG51bGw7CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcml2YXRlIEVEYXRhVHlwZSB1cmlFRGF0YVR5cGUgPSBudWxsOworCisJLyoqCisJICogQ3JlYXRlcyBhbiBpbnN0YW5jZSBvZiB0aGUgbW9kZWwgPGI+UGFja2FnZTwvYj4sIHJlZ2lzdGVyZWQgd2l0aAorCSAqIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRVBhY2thZ2UuUmVnaXN0cnkgRVBhY2thZ2UuUmVnaXN0cnl9IGJ5IHRoZSBwYWNrYWdlCisJICogcGFja2FnZSBVUkkgdmFsdWUuCisJICogPHA+Tm90ZTogdGhlIGNvcnJlY3Qgd2F5IHRvIGNyZWF0ZSB0aGUgcGFja2FnZSBpcyB2aWEgdGhlIHN0YXRpYworCSAqIGZhY3RvcnkgbWV0aG9kIHtAbGluayAjaW5pdCBpbml0KCl9LCB3aGljaCBhbHNvIHBlcmZvcm1zCisJICogaW5pdGlhbGl6YXRpb24gb2YgdGhlIHBhY2thZ2UsIG9yIHJldHVybnMgdGhlIHJlZ2lzdGVyZWQgcGFja2FnZSwKKwkgKiBpZiBvbmUgYWxyZWFkeSBleGlzdHMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FUGFja2FnZS5SZWdpc3RyeQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5Db21tb25QYWNrYWdlI2VOU19VUkkKKwkgKiBAc2VlICNpbml0KCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJpdmF0ZSBDb21tb25QYWNrYWdlSW1wbCgpIHsKKwkJc3VwZXIoZU5TX1VSSSwgQ29tbW9uRmFjdG9yeS5lSU5TVEFOQ0UpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByaXZhdGUgc3RhdGljIGJvb2xlYW4gaXNJbml0ZWQgPSBmYWxzZTsKKworCS8qKgorCSAqIENyZWF0ZXMsIHJlZ2lzdGVycywgYW5kIGluaXRpYWxpemVzIHRoZSA8Yj5QYWNrYWdlPC9iPiBmb3IgdGhpcyBtb2RlbCwgYW5kIGZvciBhbnkgb3RoZXJzIHVwb24gd2hpY2ggaXQgZGVwZW5kcy4KKwkgKiAKKwkgKiA8cD5UaGlzIG1ldGhvZCBpcyB1c2VkIHRvIGluaXRpYWxpemUge0BsaW5rIENvbW1vblBhY2thZ2UjZUlOU1RBTkNFfSB3aGVuIHRoYXQgZmllbGQgaXMgYWNjZXNzZWQuCisJICogQ2xpZW50cyBzaG91bGQgbm90IGludm9rZSBpdCBkaXJlY3RseS4gSW5zdGVhZCwgdGhleSBzaG91bGQgc2ltcGx5IGFjY2VzcyB0aGF0IGZpZWxkIHRvIG9idGFpbiB0aGUgcGFja2FnZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI2VOU19VUkkKKwkgKiBAc2VlICNjcmVhdGVQYWNrYWdlQ29udGVudHMoKQorCSAqIEBzZWUgI2luaXRpYWxpemVQYWNrYWdlQ29udGVudHMoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgc3RhdGljIENvbW1vblBhY2thZ2UgaW5pdCgpIHsKKwkJaWYgKGlzSW5pdGVkKSByZXR1cm4gKENvbW1vblBhY2thZ2UpRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RVBhY2thZ2UoQ29tbW9uUGFja2FnZS5lTlNfVVJJKTsKKworCQkvLyBPYnRhaW4gb3IgY3JlYXRlIGFuZCByZWdpc3RlciBwYWNrYWdlCisJCUNvbW1vblBhY2thZ2VJbXBsIHRoZUNvbW1vblBhY2thZ2UgPSAoQ29tbW9uUGFja2FnZUltcGwpKEVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldChlTlNfVVJJKSBpbnN0YW5jZW9mIENvbW1vblBhY2thZ2VJbXBsID8gRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0KGVOU19VUkkpIDogbmV3IENvbW1vblBhY2thZ2VJbXBsKCkpOworCisJCWlzSW5pdGVkID0gdHJ1ZTsKKworCQkvLyBJbml0aWFsaXplIHNpbXBsZSBkZXBlbmRlbmNpZXMKKwkJRWNvcmVQYWNrYWdlLmVJTlNUQU5DRS5lQ2xhc3MoKTsKKworCQkvLyBPYnRhaW4gb3IgY3JlYXRlIGFuZCByZWdpc3RlciBpbnRlcmRlcGVuZGVuY2llcworCQlFeHBlcmltZW50UGFja2FnZUltcGwgdGhlRXhwZXJpbWVudFBhY2thZ2UgPSAoRXhwZXJpbWVudFBhY2thZ2VJbXBsKShFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShFeHBlcmltZW50UGFja2FnZS5lTlNfVVJJKSBpbnN0YW5jZW9mIEV4cGVyaW1lbnRQYWNrYWdlSW1wbCA/IEVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVQYWNrYWdlKEV4cGVyaW1lbnRQYWNrYWdlLmVOU19VUkkpIDogRXhwZXJpbWVudFBhY2thZ2UuZUlOU1RBTkNFKTsKKwkJR3JhcGhQYWNrYWdlSW1wbCB0aGVHcmFwaFBhY2thZ2UgPSAoR3JhcGhQYWNrYWdlSW1wbCkoRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RVBhY2thZ2UoR3JhcGhQYWNrYWdlLmVOU19VUkkpIGluc3RhbmNlb2YgR3JhcGhQYWNrYWdlSW1wbCA/IEVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVQYWNrYWdlKEdyYXBoUGFja2FnZS5lTlNfVVJJKSA6IEdyYXBoUGFja2FnZS5lSU5TVEFOQ0UpOworCQlNb2RlbFBhY2thZ2VJbXBsIHRoZU1vZGVsUGFja2FnZSA9IChNb2RlbFBhY2thZ2VJbXBsKShFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShNb2RlbFBhY2thZ2UuZU5TX1VSSSkgaW5zdGFuY2VvZiBNb2RlbFBhY2thZ2VJbXBsID8gRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RVBhY2thZ2UoTW9kZWxQYWNrYWdlLmVOU19VUkkpIDogTW9kZWxQYWNrYWdlLmVJTlNUQU5DRSk7CisJCU1vZGlmaWVyUGFja2FnZUltcGwgdGhlTW9kaWZpZXJQYWNrYWdlID0gKE1vZGlmaWVyUGFja2FnZUltcGwpKEVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVQYWNrYWdlKE1vZGlmaWVyUGFja2FnZS5lTlNfVVJJKSBpbnN0YW5jZW9mIE1vZGlmaWVyUGFja2FnZUltcGwgPyBFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShNb2RpZmllclBhY2thZ2UuZU5TX1VSSSkgOiBNb2RpZmllclBhY2thZ2UuZUlOU1RBTkNFKTsKKwkJUHJlZGljYXRlUGFja2FnZUltcGwgdGhlUHJlZGljYXRlUGFja2FnZSA9IChQcmVkaWNhdGVQYWNrYWdlSW1wbCkoRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RVBhY2thZ2UoUHJlZGljYXRlUGFja2FnZS5lTlNfVVJJKSBpbnN0YW5jZW9mIFByZWRpY2F0ZVBhY2thZ2VJbXBsID8gRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RVBhY2thZ2UoUHJlZGljYXRlUGFja2FnZS5lTlNfVVJJKSA6IFByZWRpY2F0ZVBhY2thZ2UuZUlOU1RBTkNFKTsKKwkJU2NlbmFyaW9QYWNrYWdlSW1wbCB0aGVTY2VuYXJpb1BhY2thZ2UgPSAoU2NlbmFyaW9QYWNrYWdlSW1wbCkoRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RVBhY2thZ2UoU2NlbmFyaW9QYWNrYWdlLmVOU19VUkkpIGluc3RhbmNlb2YgU2NlbmFyaW9QYWNrYWdlSW1wbCA/IEVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVQYWNrYWdlKFNjZW5hcmlvUGFja2FnZS5lTlNfVVJJKSA6IFNjZW5hcmlvUGFja2FnZS5lSU5TVEFOQ0UpOworCQlTZXF1ZW5jZXJQYWNrYWdlSW1wbCB0aGVTZXF1ZW5jZXJQYWNrYWdlID0gKFNlcXVlbmNlclBhY2thZ2VJbXBsKShFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShTZXF1ZW5jZXJQYWNrYWdlLmVOU19VUkkpIGluc3RhbmNlb2YgU2VxdWVuY2VyUGFja2FnZUltcGwgPyBFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShTZXF1ZW5jZXJQYWNrYWdlLmVOU19VUkkpIDogU2VxdWVuY2VyUGFja2FnZS5lSU5TVEFOQ0UpOworCQlUcmlnZ2VyUGFja2FnZUltcGwgdGhlVHJpZ2dlclBhY2thZ2UgPSAoVHJpZ2dlclBhY2thZ2VJbXBsKShFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShUcmlnZ2VyUGFja2FnZS5lTlNfVVJJKSBpbnN0YW5jZW9mIFRyaWdnZXJQYWNrYWdlSW1wbCA/IEVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVQYWNrYWdlKFRyaWdnZXJQYWNrYWdlLmVOU19VUkkpIDogVHJpZ2dlclBhY2thZ2UuZUlOU1RBTkNFKTsKKwkJU29sdmVyUGFja2FnZUltcGwgdGhlU29sdmVyUGFja2FnZSA9IChTb2x2ZXJQYWNrYWdlSW1wbCkoRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RVBhY2thZ2UoU29sdmVyUGFja2FnZS5lTlNfVVJJKSBpbnN0YW5jZW9mIFNvbHZlclBhY2thZ2VJbXBsID8gRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RVBhY2thZ2UoU29sdmVyUGFja2FnZS5lTlNfVVJJKSA6IFNvbHZlclBhY2thZ2UuZUlOU1RBTkNFKTsKKwkJTG9nZ2VyUGFja2FnZUltcGwgdGhlTG9nZ2VyUGFja2FnZSA9IChMb2dnZXJQYWNrYWdlSW1wbCkoRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RVBhY2thZ2UoTG9nZ2VyUGFja2FnZS5lTlNfVVJJKSBpbnN0YW5jZW9mIExvZ2dlclBhY2thZ2VJbXBsID8gRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RVBhY2thZ2UoTG9nZ2VyUGFja2FnZS5lTlNfVVJJKSA6IExvZ2dlclBhY2thZ2UuZUlOU1RBTkNFKTsKKworCQkvLyBDcmVhdGUgcGFja2FnZSBtZXRhLWRhdGEgb2JqZWN0cworCQl0aGVDb21tb25QYWNrYWdlLmNyZWF0ZVBhY2thZ2VDb250ZW50cygpOworCQl0aGVFeHBlcmltZW50UGFja2FnZS5jcmVhdGVQYWNrYWdlQ29udGVudHMoKTsKKwkJdGhlR3JhcGhQYWNrYWdlLmNyZWF0ZVBhY2thZ2VDb250ZW50cygpOworCQl0aGVNb2RlbFBhY2thZ2UuY3JlYXRlUGFja2FnZUNvbnRlbnRzKCk7CisJCXRoZU1vZGlmaWVyUGFja2FnZS5jcmVhdGVQYWNrYWdlQ29udGVudHMoKTsKKwkJdGhlUHJlZGljYXRlUGFja2FnZS5jcmVhdGVQYWNrYWdlQ29udGVudHMoKTsKKwkJdGhlU2NlbmFyaW9QYWNrYWdlLmNyZWF0ZVBhY2thZ2VDb250ZW50cygpOworCQl0aGVTZXF1ZW5jZXJQYWNrYWdlLmNyZWF0ZVBhY2thZ2VDb250ZW50cygpOworCQl0aGVUcmlnZ2VyUGFja2FnZS5jcmVhdGVQYWNrYWdlQ29udGVudHMoKTsKKwkJdGhlU29sdmVyUGFja2FnZS5jcmVhdGVQYWNrYWdlQ29udGVudHMoKTsKKwkJdGhlTG9nZ2VyUGFja2FnZS5jcmVhdGVQYWNrYWdlQ29udGVudHMoKTsKKworCQkvLyBJbml0aWFsaXplIGNyZWF0ZWQgbWV0YS1kYXRhCisJCXRoZUNvbW1vblBhY2thZ2UuaW5pdGlhbGl6ZVBhY2thZ2VDb250ZW50cygpOworCQl0aGVFeHBlcmltZW50UGFja2FnZS5pbml0aWFsaXplUGFja2FnZUNvbnRlbnRzKCk7CisJCXRoZUdyYXBoUGFja2FnZS5pbml0aWFsaXplUGFja2FnZUNvbnRlbnRzKCk7CisJCXRoZU1vZGVsUGFja2FnZS5pbml0aWFsaXplUGFja2FnZUNvbnRlbnRzKCk7CisJCXRoZU1vZGlmaWVyUGFja2FnZS5pbml0aWFsaXplUGFja2FnZUNvbnRlbnRzKCk7CisJCXRoZVByZWRpY2F0ZVBhY2thZ2UuaW5pdGlhbGl6ZVBhY2thZ2VDb250ZW50cygpOworCQl0aGVTY2VuYXJpb1BhY2thZ2UuaW5pdGlhbGl6ZVBhY2thZ2VDb250ZW50cygpOworCQl0aGVTZXF1ZW5jZXJQYWNrYWdlLmluaXRpYWxpemVQYWNrYWdlQ29udGVudHMoKTsKKwkJdGhlVHJpZ2dlclBhY2thZ2UuaW5pdGlhbGl6ZVBhY2thZ2VDb250ZW50cygpOworCQl0aGVTb2x2ZXJQYWNrYWdlLmluaXRpYWxpemVQYWNrYWdlQ29udGVudHMoKTsKKwkJdGhlTG9nZ2VyUGFja2FnZS5pbml0aWFsaXplUGFja2FnZUNvbnRlbnRzKCk7CisKKwkJLy8gTWFyayBtZXRhLWRhdGEgdG8gaW5kaWNhdGUgaXQgY2FuJ3QgYmUgY2hhbmdlZAorCQl0aGVDb21tb25QYWNrYWdlLmZyZWV6ZSgpOworCisgIAorCQkvLyBVcGRhdGUgdGhlIHJlZ2lzdHJ5IGFuZCByZXR1cm4gdGhlIHBhY2thZ2UKKwkJRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UucHV0KENvbW1vblBhY2thZ2UuZU5TX1VSSSwgdGhlQ29tbW9uUGFja2FnZSk7CisJCXJldHVybiB0aGVDb21tb25QYWNrYWdlOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQ2xhc3MgZ2V0RHVibGluQ29yZSgpIHsKKwkJcmV0dXJuIGR1YmxpbkNvcmVFQ2xhc3M7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVBdHRyaWJ1dGUgZ2V0RHVibGluQ29yZV9UaXRsZSgpIHsKKwkJcmV0dXJuIChFQXR0cmlidXRlKWR1YmxpbkNvcmVFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgwKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUF0dHJpYnV0ZSBnZXREdWJsaW5Db3JlX0lkZW50aWZpZXIoKSB7CisJCXJldHVybiAoRUF0dHJpYnV0ZSlkdWJsaW5Db3JlRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVBdHRyaWJ1dGUgZ2V0RHVibGluQ29yZV9EZXNjcmlwdGlvbigpIHsKKwkJcmV0dXJuIChFQXR0cmlidXRlKWR1YmxpbkNvcmVFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgyKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUF0dHJpYnV0ZSBnZXREdWJsaW5Db3JlX0NyZWF0b3IoKSB7CisJCXJldHVybiAoRUF0dHJpYnV0ZSlkdWJsaW5Db3JlRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMyk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVBdHRyaWJ1dGUgZ2V0RHVibGluQ29yZV9EYXRlKCkgeworCQlyZXR1cm4gKEVBdHRyaWJ1dGUpZHVibGluQ29yZUVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDQpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQXR0cmlidXRlIGdldER1YmxpbkNvcmVfRm9ybWF0KCkgeworCQlyZXR1cm4gKEVBdHRyaWJ1dGUpZHVibGluQ29yZUVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDUpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQXR0cmlidXRlIGdldER1YmxpbkNvcmVfUHVibGlzaGVyKCkgeworCQlyZXR1cm4gKEVBdHRyaWJ1dGUpZHVibGluQ29yZUVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDYpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQXR0cmlidXRlIGdldER1YmxpbkNvcmVfQ292ZXJhZ2UoKSB7CisJCXJldHVybiAoRUF0dHJpYnV0ZSlkdWJsaW5Db3JlRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoNyk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVBdHRyaWJ1dGUgZ2V0RHVibGluQ29yZV9Db250cmlidXRvcigpIHsKKwkJcmV0dXJuIChFQXR0cmlidXRlKWR1YmxpbkNvcmVFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCg4KTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUF0dHJpYnV0ZSBnZXREdWJsaW5Db3JlX1JlbGF0aW9uKCkgeworCQlyZXR1cm4gKEVBdHRyaWJ1dGUpZHVibGluQ29yZUVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDkpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQXR0cmlidXRlIGdldER1YmxpbkNvcmVfUmlnaHRzKCkgeworCQlyZXR1cm4gKEVBdHRyaWJ1dGUpZHVibGluQ29yZUVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDEwKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUF0dHJpYnV0ZSBnZXREdWJsaW5Db3JlX1NvdXJjZSgpIHsKKwkJcmV0dXJuIChFQXR0cmlidXRlKWR1YmxpbkNvcmVFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgxMSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVBdHRyaWJ1dGUgZ2V0RHVibGluQ29yZV9TdWJqZWN0KCkgeworCQlyZXR1cm4gKEVBdHRyaWJ1dGUpZHVibGluQ29yZUVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDEyKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUF0dHJpYnV0ZSBnZXREdWJsaW5Db3JlX1R5cGUoKSB7CisJCXJldHVybiAoRUF0dHJpYnV0ZSlkdWJsaW5Db3JlRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMTMpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQXR0cmlidXRlIGdldER1YmxpbkNvcmVfTGFuZ3VhZ2UoKSB7CisJCXJldHVybiAoRUF0dHJpYnV0ZSlkdWJsaW5Db3JlRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMTQpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQXR0cmlidXRlIGdldER1YmxpbkNvcmVfQmlibGlvZ3JhcGhpY0NpdGF0aW9uKCkgeworCQlyZXR1cm4gKEVBdHRyaWJ1dGUpZHVibGluQ29yZUVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDE1KTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUF0dHJpYnV0ZSBnZXREdWJsaW5Db3JlX0NyZWF0ZWQoKSB7CisJCXJldHVybiAoRUF0dHJpYnV0ZSlkdWJsaW5Db3JlRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMTYpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQXR0cmlidXRlIGdldER1YmxpbkNvcmVfTGljZW5zZSgpIHsKKwkJcmV0dXJuIChFQXR0cmlidXRlKWR1YmxpbkNvcmVFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgxNyk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVBdHRyaWJ1dGUgZ2V0RHVibGluQ29yZV9SZXF1aXJlZCgpIHsKKwkJcmV0dXJuIChFQXR0cmlidXRlKWR1YmxpbkNvcmVFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgxOCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVBdHRyaWJ1dGUgZ2V0RHVibGluQ29yZV9TcGF0aWFsKCkgeworCQlyZXR1cm4gKEVBdHRyaWJ1dGUpZHVibGluQ29yZUVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDE5KTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUF0dHJpYnV0ZSBnZXREdWJsaW5Db3JlX1ZhbGlkKCkgeworCQlyZXR1cm4gKEVBdHRyaWJ1dGUpZHVibGluQ29yZUVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDIwKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUNsYXNzIGdldElkZW50aWZpYWJsZSgpIHsKKwkJcmV0dXJuIGlkZW50aWZpYWJsZUVDbGFzczsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUF0dHJpYnV0ZSBnZXRJZGVudGlmaWFibGVfVVJJKCkgeworCQlyZXR1cm4gKEVBdHRyaWJ1dGUpaWRlbnRpZmlhYmxlRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVBdHRyaWJ1dGUgZ2V0SWRlbnRpZmlhYmxlX1R5cGVVUkkoKSB7CisJCXJldHVybiAoRUF0dHJpYnV0ZSlpZGVudGlmaWFibGVFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgxKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRVJlZmVyZW5jZSBnZXRJZGVudGlmaWFibGVfRHVibGluQ29yZSgpIHsKKwkJcmV0dXJuIChFUmVmZXJlbmNlKWlkZW50aWZpYWJsZUVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDIpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQ2xhc3MgZ2V0Q29tcGFyYWJsZSgpIHsKKwkJcmV0dXJuIGNvbXBhcmFibGVFQ2xhc3M7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVDbGFzcyBnZXRJZGVudGlmaWFibGVGaWx0ZXIoKSB7CisJCXJldHVybiBpZGVudGlmaWFibGVGaWx0ZXJFQ2xhc3M7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVDbGFzcyBnZXREb3VibGVWYWx1ZUxpc3QoKSB7CisJCXJldHVybiBkb3VibGVWYWx1ZUxpc3RFQ2xhc3M7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVSZWZlcmVuY2UgZ2V0RG91YmxlVmFsdWVMaXN0X1ZhbHVlcygpIHsKKwkJcmV0dXJuIChFUmVmZXJlbmNlKWRvdWJsZVZhbHVlTGlzdEVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDApOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQXR0cmlidXRlIGdldERvdWJsZVZhbHVlTGlzdF9JZGVudGlmaWVyKCkgeworCQlyZXR1cm4gKEVBdHRyaWJ1dGUpZG91YmxlVmFsdWVMaXN0RUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVDbGFzcyBnZXREb3VibGVWYWx1ZU1hdHJpeCgpIHsKKwkJcmV0dXJuIGRvdWJsZVZhbHVlTWF0cml4RUNsYXNzOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFUmVmZXJlbmNlIGdldERvdWJsZVZhbHVlTWF0cml4X1ZhbHVlTGlzdHMoKSB7CisJCXJldHVybiAoRVJlZmVyZW5jZSlkb3VibGVWYWx1ZU1hdHJpeEVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDApOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQ2xhc3MgZ2V0RG91YmxlVmFsdWUoKSB7CisJCXJldHVybiBkb3VibGVWYWx1ZUVDbGFzczsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUF0dHJpYnV0ZSBnZXREb3VibGVWYWx1ZV9JZGVudGlmaWVyKCkgeworCQlyZXR1cm4gKEVBdHRyaWJ1dGUpZG91YmxlVmFsdWVFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgwKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUF0dHJpYnV0ZSBnZXREb3VibGVWYWx1ZV9WYWx1ZSgpIHsKKwkJcmV0dXJuIChFQXR0cmlidXRlKWRvdWJsZVZhbHVlRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVDbGFzcyBnZXRTdHJpbmdWYWx1ZUxpc3QoKSB7CisJCXJldHVybiBzdHJpbmdWYWx1ZUxpc3RFQ2xhc3M7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVSZWZlcmVuY2UgZ2V0U3RyaW5nVmFsdWVMaXN0X1ZhbHVlcygpIHsKKwkJcmV0dXJuIChFUmVmZXJlbmNlKXN0cmluZ1ZhbHVlTGlzdEVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDApOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQ2xhc3MgZ2V0U3RyaW5nVmFsdWUoKSB7CisJCXJldHVybiBzdHJpbmdWYWx1ZUVDbGFzczsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUF0dHJpYnV0ZSBnZXRTdHJpbmdWYWx1ZV9WYWx1ZSgpIHsKKwkJcmV0dXJuIChFQXR0cmlidXRlKXN0cmluZ1ZhbHVlRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVDbGFzcyBnZXRTYW5pdHlDaGVja2VyKCkgeworCQlyZXR1cm4gc2FuaXR5Q2hlY2tlckVDbGFzczsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRURhdGFUeXBlIGdldFVSSSgpIHsKKwkJcmV0dXJuIHVyaUVEYXRhVHlwZTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQ29tbW9uRmFjdG9yeSBnZXRDb21tb25GYWN0b3J5KCkgeworCQlyZXR1cm4gKENvbW1vbkZhY3RvcnkpZ2V0RUZhY3RvcnlJbnN0YW5jZSgpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByaXZhdGUgYm9vbGVhbiBpc0NyZWF0ZWQgPSBmYWxzZTsKKworCS8qKgorCSAqIENyZWF0ZXMgdGhlIG1ldGEtbW9kZWwgb2JqZWN0cyBmb3IgdGhlIHBhY2thZ2UuICBUaGlzIG1ldGhvZCBpcworCSAqIGd1YXJkZWQgdG8gaGF2ZSBubyBhZmZlY3Qgb24gYW55IGludm9jYXRpb24gYnV0IGl0cyBmaXJzdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBjcmVhdGVQYWNrYWdlQ29udGVudHMoKSB7CisJCWlmIChpc0NyZWF0ZWQpIHJldHVybjsKKwkJaXNDcmVhdGVkID0gdHJ1ZTsKKworCQkvLyBDcmVhdGUgY2xhc3NlcyBhbmQgdGhlaXIgZmVhdHVyZXMKKwkJZHVibGluQ29yZUVDbGFzcyA9IGNyZWF0ZUVDbGFzcyhEVUJMSU5fQ09SRSk7CisJCWNyZWF0ZUVBdHRyaWJ1dGUoZHVibGluQ29yZUVDbGFzcywgRFVCTElOX0NPUkVfX1RJVExFKTsKKwkJY3JlYXRlRUF0dHJpYnV0ZShkdWJsaW5Db3JlRUNsYXNzLCBEVUJMSU5fQ09SRV9fSURFTlRJRklFUik7CisJCWNyZWF0ZUVBdHRyaWJ1dGUoZHVibGluQ29yZUVDbGFzcywgRFVCTElOX0NPUkVfX0RFU0NSSVBUSU9OKTsKKwkJY3JlYXRlRUF0dHJpYnV0ZShkdWJsaW5Db3JlRUNsYXNzLCBEVUJMSU5fQ09SRV9fQ1JFQVRPUik7CisJCWNyZWF0ZUVBdHRyaWJ1dGUoZHVibGluQ29yZUVDbGFzcywgRFVCTElOX0NPUkVfX0RBVEUpOworCQljcmVhdGVFQXR0cmlidXRlKGR1YmxpbkNvcmVFQ2xhc3MsIERVQkxJTl9DT1JFX19GT1JNQVQpOworCQljcmVhdGVFQXR0cmlidXRlKGR1YmxpbkNvcmVFQ2xhc3MsIERVQkxJTl9DT1JFX19QVUJMSVNIRVIpOworCQljcmVhdGVFQXR0cmlidXRlKGR1YmxpbkNvcmVFQ2xhc3MsIERVQkxJTl9DT1JFX19DT1ZFUkFHRSk7CisJCWNyZWF0ZUVBdHRyaWJ1dGUoZHVibGluQ29yZUVDbGFzcywgRFVCTElOX0NPUkVfX0NPTlRSSUJVVE9SKTsKKwkJY3JlYXRlRUF0dHJpYnV0ZShkdWJsaW5Db3JlRUNsYXNzLCBEVUJMSU5fQ09SRV9fUkVMQVRJT04pOworCQljcmVhdGVFQXR0cmlidXRlKGR1YmxpbkNvcmVFQ2xhc3MsIERVQkxJTl9DT1JFX19SSUdIVFMpOworCQljcmVhdGVFQXR0cmlidXRlKGR1YmxpbkNvcmVFQ2xhc3MsIERVQkxJTl9DT1JFX19TT1VSQ0UpOworCQljcmVhdGVFQXR0cmlidXRlKGR1YmxpbkNvcmVFQ2xhc3MsIERVQkxJTl9DT1JFX19TVUJKRUNUKTsKKwkJY3JlYXRlRUF0dHJpYnV0ZShkdWJsaW5Db3JlRUNsYXNzLCBEVUJMSU5fQ09SRV9fVFlQRSk7CisJCWNyZWF0ZUVBdHRyaWJ1dGUoZHVibGluQ29yZUVDbGFzcywgRFVCTElOX0NPUkVfX0xBTkdVQUdFKTsKKwkJY3JlYXRlRUF0dHJpYnV0ZShkdWJsaW5Db3JlRUNsYXNzLCBEVUJMSU5fQ09SRV9fQklCTElPR1JBUEhJQ19DSVRBVElPTik7CisJCWNyZWF0ZUVBdHRyaWJ1dGUoZHVibGluQ29yZUVDbGFzcywgRFVCTElOX0NPUkVfX0NSRUFURUQpOworCQljcmVhdGVFQXR0cmlidXRlKGR1YmxpbkNvcmVFQ2xhc3MsIERVQkxJTl9DT1JFX19MSUNFTlNFKTsKKwkJY3JlYXRlRUF0dHJpYnV0ZShkdWJsaW5Db3JlRUNsYXNzLCBEVUJMSU5fQ09SRV9fUkVRVUlSRUQpOworCQljcmVhdGVFQXR0cmlidXRlKGR1YmxpbkNvcmVFQ2xhc3MsIERVQkxJTl9DT1JFX19TUEFUSUFMKTsKKwkJY3JlYXRlRUF0dHJpYnV0ZShkdWJsaW5Db3JlRUNsYXNzLCBEVUJMSU5fQ09SRV9fVkFMSUQpOworCisJCWlkZW50aWZpYWJsZUVDbGFzcyA9IGNyZWF0ZUVDbGFzcyhJREVOVElGSUFCTEUpOworCQljcmVhdGVFQXR0cmlidXRlKGlkZW50aWZpYWJsZUVDbGFzcywgSURFTlRJRklBQkxFX19VUkkpOworCQljcmVhdGVFQXR0cmlidXRlKGlkZW50aWZpYWJsZUVDbGFzcywgSURFTlRJRklBQkxFX19UWVBFX1VSSSk7CisJCWNyZWF0ZUVSZWZlcmVuY2UoaWRlbnRpZmlhYmxlRUNsYXNzLCBJREVOVElGSUFCTEVfX0RVQkxJTl9DT1JFKTsKKworCQljb21wYXJhYmxlRUNsYXNzID0gY3JlYXRlRUNsYXNzKENPTVBBUkFCTEUpOworCisJCWlkZW50aWZpYWJsZUZpbHRlckVDbGFzcyA9IGNyZWF0ZUVDbGFzcyhJREVOVElGSUFCTEVfRklMVEVSKTsKKworCQlkb3VibGVWYWx1ZUxpc3RFQ2xhc3MgPSBjcmVhdGVFQ2xhc3MoRE9VQkxFX1ZBTFVFX0xJU1QpOworCQljcmVhdGVFUmVmZXJlbmNlKGRvdWJsZVZhbHVlTGlzdEVDbGFzcywgRE9VQkxFX1ZBTFVFX0xJU1RfX1ZBTFVFUyk7CisJCWNyZWF0ZUVBdHRyaWJ1dGUoZG91YmxlVmFsdWVMaXN0RUNsYXNzLCBET1VCTEVfVkFMVUVfTElTVF9fSURFTlRJRklFUik7CisKKwkJZG91YmxlVmFsdWVNYXRyaXhFQ2xhc3MgPSBjcmVhdGVFQ2xhc3MoRE9VQkxFX1ZBTFVFX01BVFJJWCk7CisJCWNyZWF0ZUVSZWZlcmVuY2UoZG91YmxlVmFsdWVNYXRyaXhFQ2xhc3MsIERPVUJMRV9WQUxVRV9NQVRSSVhfX1ZBTFVFX0xJU1RTKTsKKworCQlkb3VibGVWYWx1ZUVDbGFzcyA9IGNyZWF0ZUVDbGFzcyhET1VCTEVfVkFMVUUpOworCQljcmVhdGVFQXR0cmlidXRlKGRvdWJsZVZhbHVlRUNsYXNzLCBET1VCTEVfVkFMVUVfX0lERU5USUZJRVIpOworCQljcmVhdGVFQXR0cmlidXRlKGRvdWJsZVZhbHVlRUNsYXNzLCBET1VCTEVfVkFMVUVfX1ZBTFVFKTsKKworCQlzdHJpbmdWYWx1ZUxpc3RFQ2xhc3MgPSBjcmVhdGVFQ2xhc3MoU1RSSU5HX1ZBTFVFX0xJU1QpOworCQljcmVhdGVFUmVmZXJlbmNlKHN0cmluZ1ZhbHVlTGlzdEVDbGFzcywgU1RSSU5HX1ZBTFVFX0xJU1RfX1ZBTFVFUyk7CisKKwkJc3RyaW5nVmFsdWVFQ2xhc3MgPSBjcmVhdGVFQ2xhc3MoU1RSSU5HX1ZBTFVFKTsKKwkJY3JlYXRlRUF0dHJpYnV0ZShzdHJpbmdWYWx1ZUVDbGFzcywgU1RSSU5HX1ZBTFVFX19WQUxVRSk7CisKKwkJc2FuaXR5Q2hlY2tlckVDbGFzcyA9IGNyZWF0ZUVDbGFzcyhTQU5JVFlfQ0hFQ0tFUik7CisKKwkJLy8gQ3JlYXRlIGRhdGEgdHlwZXMKKwkJdXJpRURhdGFUeXBlID0gY3JlYXRlRURhdGFUeXBlKFVSSSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJpdmF0ZSBib29sZWFuIGlzSW5pdGlhbGl6ZWQgPSBmYWxzZTsKKworCS8qKgorCSAqIENvbXBsZXRlIHRoZSBpbml0aWFsaXphdGlvbiBvZiB0aGUgcGFja2FnZSBhbmQgaXRzIG1ldGEtbW9kZWwuICBUaGlzCisJICogbWV0aG9kIGlzIGd1YXJkZWQgdG8gaGF2ZSBubyBhZmZlY3Qgb24gYW55IGludm9jYXRpb24gYnV0IGl0cyBmaXJzdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBpbml0aWFsaXplUGFja2FnZUNvbnRlbnRzKCkgeworCQlpZiAoaXNJbml0aWFsaXplZCkgcmV0dXJuOworCQlpc0luaXRpYWxpemVkID0gdHJ1ZTsKKworCQkvLyBJbml0aWFsaXplIHBhY2thZ2UKKwkJc2V0TmFtZShlTkFNRSk7CisJCXNldE5zUHJlZml4KGVOU19QUkVGSVgpOworCQlzZXROc1VSSShlTlNfVVJJKTsKKworCQkvLyBPYnRhaW4gb3RoZXIgZGVwZW5kZW50IHBhY2thZ2VzCisJCUVjb3JlUGFja2FnZSB0aGVFY29yZVBhY2thZ2UgPSAoRWNvcmVQYWNrYWdlKUVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVQYWNrYWdlKEVjb3JlUGFja2FnZS5lTlNfVVJJKTsKKwkJTW9kaWZpZXJQYWNrYWdlIHRoZU1vZGlmaWVyUGFja2FnZSA9IChNb2RpZmllclBhY2thZ2UpRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RVBhY2thZ2UoTW9kaWZpZXJQYWNrYWdlLmVOU19VUkkpOworCisJCS8vIENyZWF0ZSB0eXBlIHBhcmFtZXRlcnMKKwkJYWRkRVR5cGVQYXJhbWV0ZXIoY29tcGFyYWJsZUVDbGFzcywgIlQiKTsgLy8kTk9OLU5MUy0xJAorCisJCS8vIFNldCBib3VuZHMgZm9yIHR5cGUgcGFyYW1ldGVycworCisJCS8vIEFkZCBzdXBlcnR5cGVzIHRvIGNsYXNzZXMKKwkJRUdlbmVyaWNUeXBlIGcxID0gY3JlYXRlRUdlbmVyaWNUeXBlKHRoaXMuZ2V0Q29tcGFyYWJsZSgpKTsKKwkJRUdlbmVyaWNUeXBlIGcyID0gY3JlYXRlRUdlbmVyaWNUeXBlKHRoaXMuZ2V0SWRlbnRpZmlhYmxlKCkpOworCQlnMS5nZXRFVHlwZUFyZ3VtZW50cygpLmFkZChnMik7CisJCWlkZW50aWZpYWJsZUVDbGFzcy5nZXRFR2VuZXJpY1N1cGVyVHlwZXMoKS5hZGQoZzEpOworCQlnMSA9IGNyZWF0ZUVHZW5lcmljVHlwZSh0aGlzLmdldFNhbml0eUNoZWNrZXIoKSk7CisJCWlkZW50aWZpYWJsZUVDbGFzcy5nZXRFR2VuZXJpY1N1cGVyVHlwZXMoKS5hZGQoZzEpOworCQlkb3VibGVWYWx1ZUVDbGFzcy5nZXRFU3VwZXJUeXBlcygpLmFkZCh0aGVNb2RpZmllclBhY2thZ2UuZ2V0TW9kaWZpYWJsZSgpKTsKKwkJc3RyaW5nVmFsdWVFQ2xhc3MuZ2V0RVN1cGVyVHlwZXMoKS5hZGQodGhlTW9kaWZpZXJQYWNrYWdlLmdldE1vZGlmaWFibGUoKSk7CisKKwkJLy8gSW5pdGlhbGl6ZSBjbGFzc2VzIGFuZCBmZWF0dXJlczsgYWRkIG9wZXJhdGlvbnMgYW5kIHBhcmFtZXRlcnMKKwkJaW5pdEVDbGFzcyhkdWJsaW5Db3JlRUNsYXNzLCBEdWJsaW5Db3JlLmNsYXNzLCAiRHVibGluQ29yZSIsICFJU19BQlNUUkFDVCwgIUlTX0lOVEVSRkFDRSwgSVNfR0VORVJBVEVEX0lOU1RBTkNFX0NMQVNTKTsgLy8kTk9OLU5MUy0xJAorCQlpbml0RUF0dHJpYnV0ZShnZXREdWJsaW5Db3JlX1RpdGxlKCksIGVjb3JlUGFja2FnZS5nZXRFU3RyaW5nKCksICJ0aXRsZSIsIG51bGwsIDAsIDEsIER1YmxpbkNvcmUuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7IC8vJE5PTi1OTFMtMSQKKwkJaW5pdEVBdHRyaWJ1dGUoZ2V0RHVibGluQ29yZV9JZGVudGlmaWVyKCksIGVjb3JlUGFja2FnZS5nZXRFU3RyaW5nKCksICJpZGVudGlmaWVyIiwgbnVsbCwgMCwgMSwgRHVibGluQ29yZS5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsgLy8kTk9OLU5MUy0xJAorCQlpbml0RUF0dHJpYnV0ZShnZXREdWJsaW5Db3JlX0Rlc2NyaXB0aW9uKCksIGVjb3JlUGFja2FnZS5nZXRFU3RyaW5nKCksICJkZXNjcmlwdGlvbiIsIG51bGwsIDAsIDEsIER1YmxpbkNvcmUuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7IC8vJE5PTi1OTFMtMSQKKwkJaW5pdEVBdHRyaWJ1dGUoZ2V0RHVibGluQ29yZV9DcmVhdG9yKCksIGVjb3JlUGFja2FnZS5nZXRFU3RyaW5nKCksICJjcmVhdG9yIiwgbnVsbCwgMCwgMSwgRHVibGluQ29yZS5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsgLy8kTk9OLU5MUy0xJAorCQlpbml0RUF0dHJpYnV0ZShnZXREdWJsaW5Db3JlX0RhdGUoKSwgZWNvcmVQYWNrYWdlLmdldEVTdHJpbmcoKSwgImRhdGUiLCBudWxsLCAwLCAxLCBEdWJsaW5Db3JlLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOyAvLyROT04tTkxTLTEkCisJCWluaXRFQXR0cmlidXRlKGdldER1YmxpbkNvcmVfRm9ybWF0KCksIGVjb3JlUGFja2FnZS5nZXRFU3RyaW5nKCksICJmb3JtYXQiLCBudWxsLCAwLCAxLCBEdWJsaW5Db3JlLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOyAvLyROT04tTkxTLTEkCisJCWluaXRFQXR0cmlidXRlKGdldER1YmxpbkNvcmVfUHVibGlzaGVyKCksIGVjb3JlUGFja2FnZS5nZXRFU3RyaW5nKCksICJwdWJsaXNoZXIiLCBudWxsLCAwLCAxLCBEdWJsaW5Db3JlLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOyAvLyROT04tTkxTLTEkCisJCWluaXRFQXR0cmlidXRlKGdldER1YmxpbkNvcmVfQ292ZXJhZ2UoKSwgZWNvcmVQYWNrYWdlLmdldEVTdHJpbmcoKSwgImNvdmVyYWdlIiwgbnVsbCwgMCwgMSwgRHVibGluQ29yZS5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsgLy8kTk9OLU5MUy0xJAorCQlpbml0RUF0dHJpYnV0ZShnZXREdWJsaW5Db3JlX0NvbnRyaWJ1dG9yKCksIGVjb3JlUGFja2FnZS5nZXRFU3RyaW5nKCksICJjb250cmlidXRvciIsIG51bGwsIDAsIDEsIER1YmxpbkNvcmUuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7IC8vJE5PTi1OTFMtMSQKKwkJaW5pdEVBdHRyaWJ1dGUoZ2V0RHVibGluQ29yZV9SZWxhdGlvbigpLCBlY29yZVBhY2thZ2UuZ2V0RVN0cmluZygpLCAicmVsYXRpb24iLCBudWxsLCAwLCAxLCBEdWJsaW5Db3JlLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOyAvLyROT04tTkxTLTEkCisJCWluaXRFQXR0cmlidXRlKGdldER1YmxpbkNvcmVfUmlnaHRzKCksIGVjb3JlUGFja2FnZS5nZXRFU3RyaW5nKCksICJyaWdodHMiLCBudWxsLCAwLCAxLCBEdWJsaW5Db3JlLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOyAvLyROT04tTkxTLTEkCisJCWluaXRFQXR0cmlidXRlKGdldER1YmxpbkNvcmVfU291cmNlKCksIGVjb3JlUGFja2FnZS5nZXRFU3RyaW5nKCksICJzb3VyY2UiLCBudWxsLCAwLCAxLCBEdWJsaW5Db3JlLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOyAvLyROT04tTkxTLTEkCisJCWluaXRFQXR0cmlidXRlKGdldER1YmxpbkNvcmVfU3ViamVjdCgpLCBlY29yZVBhY2thZ2UuZ2V0RVN0cmluZygpLCAic3ViamVjdCIsIG51bGwsIDAsIDEsIER1YmxpbkNvcmUuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7IC8vJE5PTi1OTFMtMSQKKwkJaW5pdEVBdHRyaWJ1dGUoZ2V0RHVibGluQ29yZV9UeXBlKCksIGVjb3JlUGFja2FnZS5nZXRFU3RyaW5nKCksICJ0eXBlIiwgbnVsbCwgMCwgMSwgRHVibGluQ29yZS5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsgLy8kTk9OLU5MUy0xJAorCQlpbml0RUF0dHJpYnV0ZShnZXREdWJsaW5Db3JlX0xhbmd1YWdlKCksIGVjb3JlUGFja2FnZS5nZXRFU3RyaW5nKCksICJsYW5ndWFnZSIsIG51bGwsIDAsIDEsIER1YmxpbkNvcmUuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7IC8vJE5PTi1OTFMtMSQKKwkJaW5pdEVBdHRyaWJ1dGUoZ2V0RHVibGluQ29yZV9CaWJsaW9ncmFwaGljQ2l0YXRpb24oKSwgZWNvcmVQYWNrYWdlLmdldEVTdHJpbmcoKSwgImJpYmxpb2dyYXBoaWNDaXRhdGlvbiIsIG51bGwsIDAsIDEsIER1YmxpbkNvcmUuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7IC8vJE5PTi1OTFMtMSQKKwkJaW5pdEVBdHRyaWJ1dGUoZ2V0RHVibGluQ29yZV9DcmVhdGVkKCksIGVjb3JlUGFja2FnZS5nZXRFU3RyaW5nKCksICJjcmVhdGVkIiwgbnVsbCwgMCwgMSwgRHVibGluQ29yZS5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsgLy8kTk9OLU5MUy0xJAorCQlpbml0RUF0dHJpYnV0ZShnZXREdWJsaW5Db3JlX0xpY2Vuc2UoKSwgZWNvcmVQYWNrYWdlLmdldEVTdHJpbmcoKSwgImxpY2Vuc2UiLCBudWxsLCAwLCAxLCBEdWJsaW5Db3JlLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOyAvLyROT04tTkxTLTEkCisJCWluaXRFQXR0cmlidXRlKGdldER1YmxpbkNvcmVfUmVxdWlyZWQoKSwgZWNvcmVQYWNrYWdlLmdldEVTdHJpbmcoKSwgInJlcXVpcmVkIiwgbnVsbCwgMCwgMSwgRHVibGluQ29yZS5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsgLy8kTk9OLU5MUy0xJAorCQlpbml0RUF0dHJpYnV0ZShnZXREdWJsaW5Db3JlX1NwYXRpYWwoKSwgZWNvcmVQYWNrYWdlLmdldEVTdHJpbmcoKSwgInNwYXRpYWwiLCBudWxsLCAwLCAxLCBEdWJsaW5Db3JlLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOyAvLyROT04tTkxTLTEkCisJCWluaXRFQXR0cmlidXRlKGdldER1YmxpbkNvcmVfVmFsaWQoKSwgZWNvcmVQYWNrYWdlLmdldEVTdHJpbmcoKSwgInZhbGlkIiwgbnVsbCwgMCwgMSwgRHVibGluQ29yZS5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsgLy8kTk9OLU5MUy0xJAorCisJCWFkZEVPcGVyYXRpb24oZHVibGluQ29yZUVDbGFzcywgdGhpcy5nZXREdWJsaW5Db3JlKCksICJwb3B1bGF0ZSIsIDAsIDEsIElTX1VOSVFVRSwgSVNfT1JERVJFRCk7IC8vJE5PTi1OTFMtMSQKKworCQlpbml0RUNsYXNzKGlkZW50aWZpYWJsZUVDbGFzcywgSWRlbnRpZmlhYmxlLmNsYXNzLCAiSWRlbnRpZmlhYmxlIiwgSVNfQUJTVFJBQ1QsICFJU19JTlRFUkZBQ0UsIElTX0dFTkVSQVRFRF9JTlNUQU5DRV9DTEFTUyk7IC8vJE5PTi1OTFMtMSQKKwkJaW5pdEVBdHRyaWJ1dGUoZ2V0SWRlbnRpZmlhYmxlX1VSSSgpLCB0aGlzLmdldFVSSSgpLCAidVJJIiwgbnVsbCwgMSwgMSwgSWRlbnRpZmlhYmxlLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOyAvLyROT04tTkxTLTEkCisJCWluaXRFQXR0cmlidXRlKGdldElkZW50aWZpYWJsZV9UeXBlVVJJKCksIHRoaXMuZ2V0VVJJKCksICJ0eXBlVVJJIiwgbnVsbCwgMSwgMSwgSWRlbnRpZmlhYmxlLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOyAvLyROT04tTkxTLTEkCisJCWluaXRFUmVmZXJlbmNlKGdldElkZW50aWZpYWJsZV9EdWJsaW5Db3JlKCksIHRoaXMuZ2V0RHVibGluQ29yZSgpLCBudWxsLCAiZHVibGluQ29yZSIsIG51bGwsIDEsIDEsIElkZW50aWZpYWJsZS5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCBJU19DT01QT1NJVEUsICFJU19SRVNPTFZFX1BST1hJRVMsICFJU19VTlNFVFRBQkxFLCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsgLy8kTk9OLU5MUy0xJAorCisJCWluaXRFQ2xhc3MoY29tcGFyYWJsZUVDbGFzcywgQ29tcGFyYWJsZS5jbGFzcywgIkNvbXBhcmFibGUiLCBJU19BQlNUUkFDVCwgSVNfSU5URVJGQUNFLCAhSVNfR0VORVJBVEVEX0lOU1RBTkNFX0NMQVNTKTsgLy8kTk9OLU5MUy0xJAorCisJCWluaXRFQ2xhc3MoaWRlbnRpZmlhYmxlRmlsdGVyRUNsYXNzLCBJZGVudGlmaWFibGVGaWx0ZXIuY2xhc3MsICJJZGVudGlmaWFibGVGaWx0ZXIiLCAhSVNfQUJTVFJBQ1QsICFJU19JTlRFUkZBQ0UsIElTX0dFTkVSQVRFRF9JTlNUQU5DRV9DTEFTUyk7IC8vJE5PTi1OTFMtMSQKKworCQlpbml0RUNsYXNzKGRvdWJsZVZhbHVlTGlzdEVDbGFzcywgRG91YmxlVmFsdWVMaXN0LmNsYXNzLCAiRG91YmxlVmFsdWVMaXN0IiwgIUlTX0FCU1RSQUNULCAhSVNfSU5URVJGQUNFLCBJU19HRU5FUkFURURfSU5TVEFOQ0VfQ0xBU1MpOyAvLyROT04tTkxTLTEkCisJCWluaXRFUmVmZXJlbmNlKGdldERvdWJsZVZhbHVlTGlzdF9WYWx1ZXMoKSwgdGhpcy5nZXREb3VibGVWYWx1ZSgpLCBudWxsLCAidmFsdWVzIiwgbnVsbCwgMCwgLTEsIERvdWJsZVZhbHVlTGlzdC5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCBJU19DT01QT1NJVEUsICFJU19SRVNPTFZFX1BST1hJRVMsICFJU19VTlNFVFRBQkxFLCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsgLy8kTk9OLU5MUy0xJAorCQlpbml0RUF0dHJpYnV0ZShnZXREb3VibGVWYWx1ZUxpc3RfSWRlbnRpZmllcigpLCB0aGVFY29yZVBhY2thZ2UuZ2V0RVN0cmluZygpLCAiaWRlbnRpZmllciIsIG51bGwsIDAsIDEsIERvdWJsZVZhbHVlTGlzdC5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsgLy8kTk9OLU5MUy0xJAorCisJCWluaXRFQ2xhc3MoZG91YmxlVmFsdWVNYXRyaXhFQ2xhc3MsIERvdWJsZVZhbHVlTWF0cml4LmNsYXNzLCAiRG91YmxlVmFsdWVNYXRyaXgiLCAhSVNfQUJTVFJBQ1QsICFJU19JTlRFUkZBQ0UsIElTX0dFTkVSQVRFRF9JTlNUQU5DRV9DTEFTUyk7IC8vJE5PTi1OTFMtMSQKKwkJaW5pdEVSZWZlcmVuY2UoZ2V0RG91YmxlVmFsdWVNYXRyaXhfVmFsdWVMaXN0cygpLCB0aGlzLmdldERvdWJsZVZhbHVlTGlzdCgpLCBudWxsLCAidmFsdWVMaXN0cyIsIG51bGwsIDAsIC0xLCBEb3VibGVWYWx1ZU1hdHJpeC5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCBJU19DT01QT1NJVEUsICFJU19SRVNPTFZFX1BST1hJRVMsICFJU19VTlNFVFRBQkxFLCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsgLy8kTk9OLU5MUy0xJAorCisJCWluaXRFQ2xhc3MoZG91YmxlVmFsdWVFQ2xhc3MsIERvdWJsZVZhbHVlLmNsYXNzLCAiRG91YmxlVmFsdWUiLCAhSVNfQUJTVFJBQ1QsICFJU19JTlRFUkZBQ0UsIElTX0dFTkVSQVRFRF9JTlNUQU5DRV9DTEFTUyk7IC8vJE5PTi1OTFMtMSQKKwkJaW5pdEVBdHRyaWJ1dGUoZ2V0RG91YmxlVmFsdWVfSWRlbnRpZmllcigpLCB0aGVFY29yZVBhY2thZ2UuZ2V0RVN0cmluZygpLCAiaWRlbnRpZmllciIsIG51bGwsIDAsIDEsIERvdWJsZVZhbHVlLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOyAvLyROT04tTkxTLTEkCisJCWluaXRFQXR0cmlidXRlKGdldERvdWJsZVZhbHVlX1ZhbHVlKCksIHRoZUVjb3JlUGFja2FnZS5nZXRFRG91YmxlKCksICJ2YWx1ZSIsICIwLjAiLCAwLCAxLCBEb3VibGVWYWx1ZS5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCisKKwkJaW5pdEVDbGFzcyhzdHJpbmdWYWx1ZUxpc3RFQ2xhc3MsIFN0cmluZ1ZhbHVlTGlzdC5jbGFzcywgIlN0cmluZ1ZhbHVlTGlzdCIsICFJU19BQlNUUkFDVCwgIUlTX0lOVEVSRkFDRSwgSVNfR0VORVJBVEVEX0lOU1RBTkNFX0NMQVNTKTsgLy8kTk9OLU5MUy0xJAorCQlpbml0RVJlZmVyZW5jZShnZXRTdHJpbmdWYWx1ZUxpc3RfVmFsdWVzKCksIHRoaXMuZ2V0U3RyaW5nVmFsdWUoKSwgbnVsbCwgInZhbHVlcyIsIG51bGwsIDAsIC0xLCBTdHJpbmdWYWx1ZUxpc3QuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgSVNfQ09NUE9TSVRFLCAhSVNfUkVTT0xWRV9QUk9YSUVTLCAhSVNfVU5TRVRUQUJMRSwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7IC8vJE5PTi1OTFMtMSQKKworCQlpbml0RUNsYXNzKHN0cmluZ1ZhbHVlRUNsYXNzLCBTdHJpbmdWYWx1ZS5jbGFzcywgIlN0cmluZ1ZhbHVlIiwgIUlTX0FCU1RSQUNULCAhSVNfSU5URVJGQUNFLCBJU19HRU5FUkFURURfSU5TVEFOQ0VfQ0xBU1MpOyAvLyROT04tTkxTLTEkCisJCWluaXRFQXR0cmlidXRlKGdldFN0cmluZ1ZhbHVlX1ZhbHVlKCksIHRoZUVjb3JlUGFja2FnZS5nZXRFU3RyaW5nKCksICJ2YWx1ZSIsIG51bGwsIDAsIDEsIFN0cmluZ1ZhbHVlLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOyAvLyROT04tTkxTLTEkCisKKwkJaW5pdEVDbGFzcyhzYW5pdHlDaGVja2VyRUNsYXNzLCBTYW5pdHlDaGVja2VyLmNsYXNzLCAiU2FuaXR5Q2hlY2tlciIsIElTX0FCU1RSQUNULCBJU19JTlRFUkZBQ0UsIElTX0dFTkVSQVRFRF9JTlNUQU5DRV9DTEFTUyk7IC8vJE5PTi1OTFMtMSQKKworCQlhZGRFT3BlcmF0aW9uKHNhbml0eUNoZWNrZXJFQ2xhc3MsIHRoZUVjb3JlUGFja2FnZS5nZXRFQm9vbGVhbigpLCAic2FuZSIsIDAsIDEsIElTX1VOSVFVRSwgSVNfT1JERVJFRCk7IC8vJE5PTi1OTFMtMSQKKworCQkvLyBJbml0aWFsaXplIGRhdGEgdHlwZXMKKwkJaW5pdEVEYXRhVHlwZSh1cmlFRGF0YVR5cGUsIG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5VUkkuY2xhc3MsICJVUkkiLCBJU19TRVJJQUxJWkFCTEUsICFJU19HRU5FUkFURURfSU5TVEFOQ0VfQ0xBU1MpOyAvLyROT04tTkxTLTEkCisKKwkJLy8gQ3JlYXRlIHJlc291cmNlCisJCWNyZWF0ZVJlc291cmNlKGVOU19VUkkpOworCX0KKworfSAvL0NvbW1vblBhY2thZ2VJbXBsCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2NvbW1vbi9pbXBsL0RvdWJsZVZhbHVlSW1wbC5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9jb21tb24vaW1wbC9Eb3VibGVWYWx1ZUltcGwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MzM2NmUyCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9jb21tb24vaW1wbC9Eb3VibGVWYWx1ZUltcGwuamF2YQpAQCAtMCwwICsxLDI0MyBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLmltcGw7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTAgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3Q7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLmltcGwuRU5vdGlmaWNhdGlvbkltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLmltcGwuRU9iamVjdEltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5Db21tb25QYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uRG91YmxlVmFsdWU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5JZGVudGlmaWFibGU7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIEFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5Eb3VibGUgVmFsdWU8L2I+PC9lbT4nLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiA8cD4KKyAqIFRoZSBmb2xsb3dpbmcgZmVhdHVyZXMgYXJlIGltcGxlbWVudGVkOgorICogPHVsPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uaW1wbC5Eb3VibGVWYWx1ZUltcGwjZ2V0SWRlbnRpZmllciA8ZW0+SWRlbnRpZmllcjwvZW0+fTwvbGk+CisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5pbXBsLkRvdWJsZVZhbHVlSW1wbCNnZXRWYWx1ZSA8ZW0+VmFsdWU8L2VtPn08L2xpPgorICogPC91bD4KKyAqIDwvcD4KKyAqCisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBEb3VibGVWYWx1ZUltcGwgZXh0ZW5kcyBFT2JqZWN0SW1wbCBpbXBsZW1lbnRzIERvdWJsZVZhbHVlIHsKKwkvKioKKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0SWRlbnRpZmllcigpIDxlbT5JZGVudGlmaWVyPC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNnZXRJZGVudGlmaWVyKCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIFN0cmluZyBJREVOVElGSUVSX0VERUZBVUxUID0gbnVsbDsKKworCS8qKgorCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldElkZW50aWZpZXIoKSA8ZW0+SWRlbnRpZmllcjwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZ2V0SWRlbnRpZmllcigpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIFN0cmluZyBpZGVudGlmaWVyID0gSURFTlRJRklFUl9FREVGQVVMVDsKKworCS8qKgorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRWYWx1ZSgpIDxlbT5WYWx1ZTwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZ2V0VmFsdWUoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgZG91YmxlIFZBTFVFX0VERUZBVUxUID0gMC4wOworCisJLyoqCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0VmFsdWUoKSA8ZW0+VmFsdWU8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI2dldFZhbHVlKCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgZG91YmxlIHZhbHVlID0gVkFMVUVfRURFRkFVTFQ7CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgRG91YmxlVmFsdWVJbXBsKCkgeworCQlzdXBlcigpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCBFQ2xhc3MgZVN0YXRpY0NsYXNzKCkgeworCQlyZXR1cm4gQ29tbW9uUGFja2FnZS5MaXRlcmFscy5ET1VCTEVfVkFMVUU7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFN0cmluZyBnZXRJZGVudGlmaWVyKCkgeworCQlyZXR1cm4gaWRlbnRpZmllcjsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRJZGVudGlmaWVyKFN0cmluZyBuZXdJZGVudGlmaWVyKSB7CisJCVN0cmluZyBvbGRJZGVudGlmaWVyID0gaWRlbnRpZmllcjsKKwkJaWRlbnRpZmllciA9IG5ld0lkZW50aWZpZXI7CisJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkKKwkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIENvbW1vblBhY2thZ2UuRE9VQkxFX1ZBTFVFX19JREVOVElGSUVSLCBvbGRJZGVudGlmaWVyLCBpZGVudGlmaWVyKSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIGRvdWJsZSBnZXRWYWx1ZSgpIHsKKwkJcmV0dXJuIHZhbHVlOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIHNldFZhbHVlKGRvdWJsZSBuZXdWYWx1ZSkgeworCQlkb3VibGUgb2xkVmFsdWUgPSB2YWx1ZTsKKwkJdmFsdWUgPSBuZXdWYWx1ZTsKKwkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQorCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgQ29tbW9uUGFja2FnZS5ET1VCTEVfVkFMVUVfX1ZBTFVFLCBvbGRWYWx1ZSwgdmFsdWUpKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgT2JqZWN0IGVHZXQoaW50IGZlYXR1cmVJRCwgYm9vbGVhbiByZXNvbHZlLCBib29sZWFuIGNvcmVUeXBlKSB7CisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7CisJCQljYXNlIENvbW1vblBhY2thZ2UuRE9VQkxFX1ZBTFVFX19JREVOVElGSUVSOgorCQkJCXJldHVybiBnZXRJZGVudGlmaWVyKCk7CisJCQljYXNlIENvbW1vblBhY2thZ2UuRE9VQkxFX1ZBTFVFX19WQUxVRToKKwkJCQlyZXR1cm4gZ2V0VmFsdWUoKTsKKwkJfQorCQlyZXR1cm4gc3VwZXIuZUdldChmZWF0dXJlSUQsIHJlc29sdmUsIGNvcmVUeXBlKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBlU2V0KGludCBmZWF0dXJlSUQsIE9iamVjdCBuZXdWYWx1ZSkgeworCQlzd2l0Y2ggKGZlYXR1cmVJRCkgeworCQkJY2FzZSBDb21tb25QYWNrYWdlLkRPVUJMRV9WQUxVRV9fSURFTlRJRklFUjoKKwkJCQlzZXRJZGVudGlmaWVyKChTdHJpbmcpbmV3VmFsdWUpOworCQkJCXJldHVybjsKKwkJCWNhc2UgQ29tbW9uUGFja2FnZS5ET1VCTEVfVkFMVUVfX1ZBTFVFOgorCQkJCXNldFZhbHVlKChEb3VibGUpbmV3VmFsdWUpOworCQkJCXJldHVybjsKKwkJfQorCQlzdXBlci5lU2V0KGZlYXR1cmVJRCwgbmV3VmFsdWUpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGVVbnNldChpbnQgZmVhdHVyZUlEKSB7CisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7CisJCQljYXNlIENvbW1vblBhY2thZ2UuRE9VQkxFX1ZBTFVFX19JREVOVElGSUVSOgorCQkJCXNldElkZW50aWZpZXIoSURFTlRJRklFUl9FREVGQVVMVCk7CisJCQkJcmV0dXJuOworCQkJY2FzZSBDb21tb25QYWNrYWdlLkRPVUJMRV9WQUxVRV9fVkFMVUU6CisJCQkJc2V0VmFsdWUoVkFMVUVfRURFRkFVTFQpOworCQkJCXJldHVybjsKKwkJfQorCQlzdXBlci5lVW5zZXQoZmVhdHVyZUlEKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgYm9vbGVhbiBlSXNTZXQoaW50IGZlYXR1cmVJRCkgeworCQlzd2l0Y2ggKGZlYXR1cmVJRCkgeworCQkJY2FzZSBDb21tb25QYWNrYWdlLkRPVUJMRV9WQUxVRV9fSURFTlRJRklFUjoKKwkJCQlyZXR1cm4gSURFTlRJRklFUl9FREVGQVVMVCA9PSBudWxsID8gaWRlbnRpZmllciAhPSBudWxsIDogIUlERU5USUZJRVJfRURFRkFVTFQuZXF1YWxzKGlkZW50aWZpZXIpOworCQkJY2FzZSBDb21tb25QYWNrYWdlLkRPVUJMRV9WQUxVRV9fVkFMVUU6CisJCQkJcmV0dXJuIHZhbHVlICE9IFZBTFVFX0VERUZBVUxUOworCQl9CisJCXJldHVybiBzdXBlci5lSXNTZXQoZmVhdHVyZUlEKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkgeworCQlpZiAoZUlzUHJveHkoKSkgcmV0dXJuIHN1cGVyLnRvU3RyaW5nKCk7CisKKwkJU3RyaW5nQnVmZmVyIHJlc3VsdCA9IG5ldyBTdHJpbmdCdWZmZXIoc3VwZXIudG9TdHJpbmcoKSk7CisJCXJlc3VsdC5hcHBlbmQoIiAoaWRlbnRpZmllcjogIik7IC8vJE5PTi1OTFMtMSQKKwkJcmVzdWx0LmFwcGVuZChpZGVudGlmaWVyKTsKKwkJcmVzdWx0LmFwcGVuZCgiLCB2YWx1ZTogIik7IC8vJE5PTi1OTFMtMSQKKwkJcmVzdWx0LmFwcGVuZCh2YWx1ZSk7CisJCXJlc3VsdC5hcHBlbmQoJyknKTsKKwkJcmV0dXJuIHJlc3VsdC50b1N0cmluZygpOworCX0KKworCXByaXZhdGUgSWRlbnRpZmlhYmxlIGZpbmRJZGVudGlmaWFibGUoRU9iamVjdCBvKSB7CisJCWlmKG8gaW5zdGFuY2VvZiBJZGVudGlmaWFibGUpIHJldHVybiAoSWRlbnRpZmlhYmxlKW87CisJCWlmKG8uZUNvbnRhaW5lcigpICE9IG51bGwpIHJldHVybiBmaW5kSWRlbnRpZmlhYmxlKG8uZUNvbnRhaW5lcigpKTsKKwkJcmV0dXJuIG51bGw7CisJfQorCS8qKgorCSAqIE5lZWQgdG8gb3ZlcnJpZGUgdG8gbWFrZSBzdXJlIG1vZGlmaWVycyBjYW4gZmluZAorCSAqLworCXB1YmxpYyBib29sZWFuIHZhbHVlRXF1YWxzKERvdWJsZVZhbHVlSW1wbCBkdmkpIHsKKwkJSWRlbnRpZmlhYmxlIGlkID0gZmluZElkZW50aWZpYWJsZShkdmkpOworCQlJZGVudGlmaWFibGUgaWQyID0gZmluZElkZW50aWZpYWJsZSh0aGlzKTsKKwkJaWYoIWlkLmdldFVSSSgpLmVxdWFscyhpZDIuZ2V0VVJJKCkpKSByZXR1cm4gZmFsc2U7CisJCQorCQkvLyBOZWVkIHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSBwYXRoIGZyb20gdGhlIGlkZW50aWZpYWJsZQorCQkvLyB0byBoZXJlIGlzIHRoZSBzYW1lCisJCS8vLi4uIHRvZG8KKwkJcmV0dXJuIChzdXBlci5lcXVhbHMoZHZpKSk7CisJfQorfSAvL0RvdWJsZVZhbHVlSW1wbApkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9jb21tb24vaW1wbC9Eb3VibGVWYWx1ZUxpc3RJbXBsLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2NvbW1vbi9pbXBsL0RvdWJsZVZhbHVlTGlzdEltcGwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YTg3NmFjCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9jb21tb24vaW1wbC9Eb3VibGVWYWx1ZUxpc3RJbXBsLmphdmEKQEAgLTAsMCArMSwyMjYgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5pbXBsOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDEwIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbkNoYWluOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5FTGlzdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5JbnRlcm5hbEVPYmplY3Q7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLmltcGwuRU5vdGlmaWNhdGlvbkltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLmltcGwuRU9iamVjdEltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnV0aWwuRU9iamVjdENvbnRhaW5tZW50RUxpc3Q7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnV0aWwuSW50ZXJuYWxFTGlzdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLkNvbW1vblBhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5Eb3VibGVWYWx1ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLkRvdWJsZVZhbHVlTGlzdDsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPkRvdWJsZSBWYWx1ZSBMaXN0PC9iPjwvZW0+Jy4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogPHA+CisgKiBUaGUgZm9sbG93aW5nIGZlYXR1cmVzIGFyZSBpbXBsZW1lbnRlZDoKKyAqIDx1bD4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLmltcGwuRG91YmxlVmFsdWVMaXN0SW1wbCNnZXRWYWx1ZXMgPGVtPlZhbHVlczwvZW0+fTwvbGk+CisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5pbXBsLkRvdWJsZVZhbHVlTGlzdEltcGwjZ2V0SWRlbnRpZmllciA8ZW0+SWRlbnRpZmllcjwvZW0+fTwvbGk+CisgKiA8L3VsPgorICogPC9wPgorICoKKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIERvdWJsZVZhbHVlTGlzdEltcGwgZXh0ZW5kcyBFT2JqZWN0SW1wbCBpbXBsZW1lbnRzIERvdWJsZVZhbHVlTGlzdCB7CisJLyoqCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0VmFsdWVzKCkgPGVtPlZhbHVlczwvZW0+fScgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3QuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNnZXRWYWx1ZXMoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBFTGlzdDxEb3VibGVWYWx1ZT4gdmFsdWVzOworCisJLyoqCisJICogVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldElkZW50aWZpZXIoKSA8ZW0+SWRlbnRpZmllcjwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZ2V0SWRlbnRpZmllcigpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBTdHJpbmcgSURFTlRJRklFUl9FREVGQVVMVCA9IG51bGw7CisKKwkvKioKKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRJZGVudGlmaWVyKCkgPGVtPklkZW50aWZpZXI8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI2dldElkZW50aWZpZXIoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBTdHJpbmcgaWRlbnRpZmllciA9IElERU5USUZJRVJfRURFRkFVTFQ7CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgRG91YmxlVmFsdWVMaXN0SW1wbCgpIHsKKwkJc3VwZXIoKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgRUNsYXNzIGVTdGF0aWNDbGFzcygpIHsKKwkJcmV0dXJuIENvbW1vblBhY2thZ2UuTGl0ZXJhbHMuRE9VQkxFX1ZBTFVFX0xJU1Q7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVMaXN0PERvdWJsZVZhbHVlPiBnZXRWYWx1ZXMoKSB7CisJCWlmICh2YWx1ZXMgPT0gbnVsbCkgeworCQkJdmFsdWVzID0gbmV3IEVPYmplY3RDb250YWlubWVudEVMaXN0PERvdWJsZVZhbHVlPihEb3VibGVWYWx1ZS5jbGFzcywgdGhpcywgQ29tbW9uUGFja2FnZS5ET1VCTEVfVkFMVUVfTElTVF9fVkFMVUVTKTsKKwkJfQorCQlyZXR1cm4gdmFsdWVzOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBTdHJpbmcgZ2V0SWRlbnRpZmllcigpIHsKKwkJcmV0dXJuIGlkZW50aWZpZXI7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgc2V0SWRlbnRpZmllcihTdHJpbmcgbmV3SWRlbnRpZmllcikgeworCQlTdHJpbmcgb2xkSWRlbnRpZmllciA9IGlkZW50aWZpZXI7CisJCWlkZW50aWZpZXIgPSBuZXdJZGVudGlmaWVyOworCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpCisJCQllTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBDb21tb25QYWNrYWdlLkRPVUJMRV9WQUxVRV9MSVNUX19JREVOVElGSUVSLCBvbGRJZGVudGlmaWVyLCBpZGVudGlmaWVyKSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIE5vdGlmaWNhdGlvbkNoYWluIGVJbnZlcnNlUmVtb3ZlKEludGVybmFsRU9iamVjdCBvdGhlckVuZCwgaW50IGZlYXR1cmVJRCwgTm90aWZpY2F0aW9uQ2hhaW4gbXNncykgeworCQlzd2l0Y2ggKGZlYXR1cmVJRCkgeworCQkJY2FzZSBDb21tb25QYWNrYWdlLkRPVUJMRV9WQUxVRV9MSVNUX19WQUxVRVM6CisJCQkJcmV0dXJuICgoSW50ZXJuYWxFTGlzdDw/PilnZXRWYWx1ZXMoKSkuYmFzaWNSZW1vdmUob3RoZXJFbmQsIG1zZ3MpOworCQl9CisJCXJldHVybiBzdXBlci5lSW52ZXJzZVJlbW92ZShvdGhlckVuZCwgZmVhdHVyZUlELCBtc2dzKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgT2JqZWN0IGVHZXQoaW50IGZlYXR1cmVJRCwgYm9vbGVhbiByZXNvbHZlLCBib29sZWFuIGNvcmVUeXBlKSB7CisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7CisJCQljYXNlIENvbW1vblBhY2thZ2UuRE9VQkxFX1ZBTFVFX0xJU1RfX1ZBTFVFUzoKKwkJCQlyZXR1cm4gZ2V0VmFsdWVzKCk7CisJCQljYXNlIENvbW1vblBhY2thZ2UuRE9VQkxFX1ZBTFVFX0xJU1RfX0lERU5USUZJRVI6CisJCQkJcmV0dXJuIGdldElkZW50aWZpZXIoKTsKKwkJfQorCQlyZXR1cm4gc3VwZXIuZUdldChmZWF0dXJlSUQsIHJlc29sdmUsIGNvcmVUeXBlKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAU3VwcHJlc3NXYXJuaW5ncygidW5jaGVja2VkIikKKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBlU2V0KGludCBmZWF0dXJlSUQsIE9iamVjdCBuZXdWYWx1ZSkgeworCQlzd2l0Y2ggKGZlYXR1cmVJRCkgeworCQkJY2FzZSBDb21tb25QYWNrYWdlLkRPVUJMRV9WQUxVRV9MSVNUX19WQUxVRVM6CisJCQkJZ2V0VmFsdWVzKCkuY2xlYXIoKTsKKwkJCQlnZXRWYWx1ZXMoKS5hZGRBbGwoKENvbGxlY3Rpb248PyBleHRlbmRzIERvdWJsZVZhbHVlPiluZXdWYWx1ZSk7CisJCQkJcmV0dXJuOworCQkJY2FzZSBDb21tb25QYWNrYWdlLkRPVUJMRV9WQUxVRV9MSVNUX19JREVOVElGSUVSOgorCQkJCXNldElkZW50aWZpZXIoKFN0cmluZyluZXdWYWx1ZSk7CisJCQkJcmV0dXJuOworCQl9CisJCXN1cGVyLmVTZXQoZmVhdHVyZUlELCBuZXdWYWx1ZSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgZVVuc2V0KGludCBmZWF0dXJlSUQpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJCWNhc2UgQ29tbW9uUGFja2FnZS5ET1VCTEVfVkFMVUVfTElTVF9fVkFMVUVTOgorCQkJCWdldFZhbHVlcygpLmNsZWFyKCk7CisJCQkJcmV0dXJuOworCQkJY2FzZSBDb21tb25QYWNrYWdlLkRPVUJMRV9WQUxVRV9MSVNUX19JREVOVElGSUVSOgorCQkJCXNldElkZW50aWZpZXIoSURFTlRJRklFUl9FREVGQVVMVCk7CisJCQkJcmV0dXJuOworCQl9CisJCXN1cGVyLmVVbnNldChmZWF0dXJlSUQpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBib29sZWFuIGVJc1NldChpbnQgZmVhdHVyZUlEKSB7CisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7CisJCQljYXNlIENvbW1vblBhY2thZ2UuRE9VQkxFX1ZBTFVFX0xJU1RfX1ZBTFVFUzoKKwkJCQlyZXR1cm4gdmFsdWVzICE9IG51bGwgJiYgIXZhbHVlcy5pc0VtcHR5KCk7CisJCQljYXNlIENvbW1vblBhY2thZ2UuRE9VQkxFX1ZBTFVFX0xJU1RfX0lERU5USUZJRVI6CisJCQkJcmV0dXJuIElERU5USUZJRVJfRURFRkFVTFQgPT0gbnVsbCA/IGlkZW50aWZpZXIgIT0gbnVsbCA6ICFJREVOVElGSUVSX0VERUZBVUxULmVxdWFscyhpZGVudGlmaWVyKTsKKwkJfQorCQlyZXR1cm4gc3VwZXIuZUlzU2V0KGZlYXR1cmVJRCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIFN0cmluZyB0b1N0cmluZygpIHsKKwkJaWYgKGVJc1Byb3h5KCkpIHJldHVybiBzdXBlci50b1N0cmluZygpOworCisJCVN0cmluZ0J1ZmZlciByZXN1bHQgPSBuZXcgU3RyaW5nQnVmZmVyKHN1cGVyLnRvU3RyaW5nKCkpOworCQlyZXN1bHQuYXBwZW5kKCIgKGlkZW50aWZpZXI6ICIpOyAvLyROT04tTkxTLTEkCisJCXJlc3VsdC5hcHBlbmQoaWRlbnRpZmllcik7CisJCXJlc3VsdC5hcHBlbmQoJyknKTsKKwkJcmV0dXJuIHJlc3VsdC50b1N0cmluZygpOworCX0KKworfSAvL0RvdWJsZVZhbHVlTGlzdEltcGwKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvY29tbW9uL2ltcGwvRG91YmxlVmFsdWVNYXRyaXhJbXBsLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2NvbW1vbi9pbXBsL0RvdWJsZVZhbHVlTWF0cml4SW1wbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMwYmZjOGYKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2NvbW1vbi9pbXBsL0RvdWJsZVZhbHVlTWF0cml4SW1wbC5qYXZhCkBAIC0wLDAgKzEsMTU1IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uaW1wbDsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAxMCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb25DaGFpbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuRUxpc3Q7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzczsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuSW50ZXJuYWxFT2JqZWN0OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5pbXBsLkVPYmplY3RJbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS51dGlsLkVPYmplY3RDb250YWlubWVudEVMaXN0OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS51dGlsLkludGVybmFsRUxpc3Q7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5Db21tb25QYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uRG91YmxlVmFsdWVMaXN0OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uRG91YmxlVmFsdWVNYXRyaXg7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIEFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5Eb3VibGUgVmFsdWUgTWF0cml4PC9iPjwvZW0+Jy4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogPHA+CisgKiBUaGUgZm9sbG93aW5nIGZlYXR1cmVzIGFyZSBpbXBsZW1lbnRlZDoKKyAqIDx1bD4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLmltcGwuRG91YmxlVmFsdWVNYXRyaXhJbXBsI2dldFZhbHVlTGlzdHMgPGVtPlZhbHVlIExpc3RzPC9lbT59PC9saT4KKyAqIDwvdWw+CisgKiA8L3A+CisgKgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgRG91YmxlVmFsdWVNYXRyaXhJbXBsIGV4dGVuZHMgRU9iamVjdEltcGwgaW1wbGVtZW50cyBEb3VibGVWYWx1ZU1hdHJpeCB7CisJLyoqCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0VmFsdWVMaXN0cygpIDxlbT5WYWx1ZSBMaXN0czwvZW0+fScgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3QuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNnZXRWYWx1ZUxpc3RzKCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgRUxpc3Q8RG91YmxlVmFsdWVMaXN0PiB2YWx1ZUxpc3RzOworCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIERvdWJsZVZhbHVlTWF0cml4SW1wbCgpIHsKKwkJc3VwZXIoKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgRUNsYXNzIGVTdGF0aWNDbGFzcygpIHsKKwkJcmV0dXJuIENvbW1vblBhY2thZ2UuTGl0ZXJhbHMuRE9VQkxFX1ZBTFVFX01BVFJJWDsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUxpc3Q8RG91YmxlVmFsdWVMaXN0PiBnZXRWYWx1ZUxpc3RzKCkgeworCQlpZiAodmFsdWVMaXN0cyA9PSBudWxsKSB7CisJCQl2YWx1ZUxpc3RzID0gbmV3IEVPYmplY3RDb250YWlubWVudEVMaXN0PERvdWJsZVZhbHVlTGlzdD4oRG91YmxlVmFsdWVMaXN0LmNsYXNzLCB0aGlzLCBDb21tb25QYWNrYWdlLkRPVUJMRV9WQUxVRV9NQVRSSVhfX1ZBTFVFX0xJU1RTKTsKKwkJfQorCQlyZXR1cm4gdmFsdWVMaXN0czsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgTm90aWZpY2F0aW9uQ2hhaW4gZUludmVyc2VSZW1vdmUoSW50ZXJuYWxFT2JqZWN0IG90aGVyRW5kLCBpbnQgZmVhdHVyZUlELCBOb3RpZmljYXRpb25DaGFpbiBtc2dzKSB7CisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7CisJCQljYXNlIENvbW1vblBhY2thZ2UuRE9VQkxFX1ZBTFVFX01BVFJJWF9fVkFMVUVfTElTVFM6CisJCQkJcmV0dXJuICgoSW50ZXJuYWxFTGlzdDw/PilnZXRWYWx1ZUxpc3RzKCkpLmJhc2ljUmVtb3ZlKG90aGVyRW5kLCBtc2dzKTsKKwkJfQorCQlyZXR1cm4gc3VwZXIuZUludmVyc2VSZW1vdmUob3RoZXJFbmQsIGZlYXR1cmVJRCwgbXNncyk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIE9iamVjdCBlR2V0KGludCBmZWF0dXJlSUQsIGJvb2xlYW4gcmVzb2x2ZSwgYm9vbGVhbiBjb3JlVHlwZSkgeworCQlzd2l0Y2ggKGZlYXR1cmVJRCkgeworCQkJY2FzZSBDb21tb25QYWNrYWdlLkRPVUJMRV9WQUxVRV9NQVRSSVhfX1ZBTFVFX0xJU1RTOgorCQkJCXJldHVybiBnZXRWYWx1ZUxpc3RzKCk7CisJCX0KKwkJcmV0dXJuIHN1cGVyLmVHZXQoZmVhdHVyZUlELCByZXNvbHZlLCBjb3JlVHlwZSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQFN1cHByZXNzV2FybmluZ3MoInVuY2hlY2tlZCIpCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgZVNldChpbnQgZmVhdHVyZUlELCBPYmplY3QgbmV3VmFsdWUpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJCWNhc2UgQ29tbW9uUGFja2FnZS5ET1VCTEVfVkFMVUVfTUFUUklYX19WQUxVRV9MSVNUUzoKKwkJCQlnZXRWYWx1ZUxpc3RzKCkuY2xlYXIoKTsKKwkJCQlnZXRWYWx1ZUxpc3RzKCkuYWRkQWxsKChDb2xsZWN0aW9uPD8gZXh0ZW5kcyBEb3VibGVWYWx1ZUxpc3Q+KW5ld1ZhbHVlKTsKKwkJCQlyZXR1cm47CisJCX0KKwkJc3VwZXIuZVNldChmZWF0dXJlSUQsIG5ld1ZhbHVlKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBlVW5zZXQoaW50IGZlYXR1cmVJRCkgeworCQlzd2l0Y2ggKGZlYXR1cmVJRCkgeworCQkJY2FzZSBDb21tb25QYWNrYWdlLkRPVUJMRV9WQUxVRV9NQVRSSVhfX1ZBTFVFX0xJU1RTOgorCQkJCWdldFZhbHVlTGlzdHMoKS5jbGVhcigpOworCQkJCXJldHVybjsKKwkJfQorCQlzdXBlci5lVW5zZXQoZmVhdHVyZUlEKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgYm9vbGVhbiBlSXNTZXQoaW50IGZlYXR1cmVJRCkgeworCQlzd2l0Y2ggKGZlYXR1cmVJRCkgeworCQkJY2FzZSBDb21tb25QYWNrYWdlLkRPVUJMRV9WQUxVRV9NQVRSSVhfX1ZBTFVFX0xJU1RTOgorCQkJCXJldHVybiB2YWx1ZUxpc3RzICE9IG51bGwgJiYgIXZhbHVlTGlzdHMuaXNFbXB0eSgpOworCQl9CisJCXJldHVybiBzdXBlci5lSXNTZXQoZmVhdHVyZUlEKTsKKwl9CisKK30gLy9Eb3VibGVWYWx1ZU1hdHJpeEltcGwKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvY29tbW9uL2ltcGwvRHVibGluQ29yZUltcGwuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvY29tbW9uL2ltcGwvRHVibGluQ29yZUltcGwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wN2Y1ZThiCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9jb21tb24vaW1wbC9EdWJsaW5Db3JlSW1wbC5qYXZhCkBAIC0wLDAgKzEsMTYxNyBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLmltcGw7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIAorICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiAKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdCAKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sIAorICogCisgKiBDb250cmlidXRvcnM6IAorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiAKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgamF2YS50ZXh0LlBhcnNlRXhjZXB0aW9uOworaW1wb3J0IGphdmEudGV4dC5TaW1wbGVEYXRlRm9ybWF0OworaW1wb3J0IGphdmEudXRpbC5DYWxlbmRhcjsKK2ltcG9ydCBqYXZhLnV0aWwuRGF0ZTsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JQ29uZmlndXJhdGlvbkVsZW1lbnQ7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5FTGlzdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FU3RydWN0dXJhbEZlYXR1cmU7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLmltcGwuRU5vdGlmaWNhdGlvbkltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLmltcGwuRU9iamVjdEltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5Db21tb25QYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uRHVibGluQ29yZTsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiBBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+RHVibGluIENvcmU8L2I+PC9lbT4nLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiA8cD4KKyAqIFRoZSBmb2xsb3dpbmcgZmVhdHVyZXMgYXJlIGltcGxlbWVudGVkOgorICogPHVsPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uaW1wbC5EdWJsaW5Db3JlSW1wbCNnZXRUaXRsZSA8ZW0+VGl0bGU8L2VtPn08L2xpPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uaW1wbC5EdWJsaW5Db3JlSW1wbCNnZXRJZGVudGlmaWVyIDxlbT5JZGVudGlmaWVyPC9lbT59PC9saT4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLmltcGwuRHVibGluQ29yZUltcGwjZ2V0RGVzY3JpcHRpb24gPGVtPkRlc2NyaXB0aW9uPC9lbT59PC9saT4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLmltcGwuRHVibGluQ29yZUltcGwjZ2V0Q3JlYXRvciA8ZW0+Q3JlYXRvcjwvZW0+fTwvbGk+CisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5pbXBsLkR1YmxpbkNvcmVJbXBsI2dldERhdGUgPGVtPkRhdGU8L2VtPn08L2xpPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uaW1wbC5EdWJsaW5Db3JlSW1wbCNnZXRGb3JtYXQgPGVtPkZvcm1hdDwvZW0+fTwvbGk+CisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5pbXBsLkR1YmxpbkNvcmVJbXBsI2dldFB1Ymxpc2hlciA8ZW0+UHVibGlzaGVyPC9lbT59PC9saT4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLmltcGwuRHVibGluQ29yZUltcGwjZ2V0Q292ZXJhZ2UgPGVtPkNvdmVyYWdlPC9lbT59PC9saT4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLmltcGwuRHVibGluQ29yZUltcGwjZ2V0Q29udHJpYnV0b3IgPGVtPkNvbnRyaWJ1dG9yPC9lbT59PC9saT4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLmltcGwuRHVibGluQ29yZUltcGwjZ2V0UmVsYXRpb24gPGVtPlJlbGF0aW9uPC9lbT59PC9saT4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLmltcGwuRHVibGluQ29yZUltcGwjZ2V0UmlnaHRzIDxlbT5SaWdodHM8L2VtPn08L2xpPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uaW1wbC5EdWJsaW5Db3JlSW1wbCNnZXRTb3VyY2UgPGVtPlNvdXJjZTwvZW0+fTwvbGk+CisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5pbXBsLkR1YmxpbkNvcmVJbXBsI2dldFN1YmplY3QgPGVtPlN1YmplY3Q8L2VtPn08L2xpPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uaW1wbC5EdWJsaW5Db3JlSW1wbCNnZXRUeXBlIDxlbT5UeXBlPC9lbT59PC9saT4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLmltcGwuRHVibGluQ29yZUltcGwjZ2V0TGFuZ3VhZ2UgPGVtPkxhbmd1YWdlPC9lbT59PC9saT4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLmltcGwuRHVibGluQ29yZUltcGwjZ2V0QmlibGlvZ3JhcGhpY0NpdGF0aW9uIDxlbT5CaWJsaW9ncmFwaGljIENpdGF0aW9uPC9lbT59PC9saT4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLmltcGwuRHVibGluQ29yZUltcGwjZ2V0Q3JlYXRlZCA8ZW0+Q3JlYXRlZDwvZW0+fTwvbGk+CisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5pbXBsLkR1YmxpbkNvcmVJbXBsI2dldExpY2Vuc2UgPGVtPkxpY2Vuc2U8L2VtPn08L2xpPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uaW1wbC5EdWJsaW5Db3JlSW1wbCNnZXRSZXF1aXJlZCA8ZW0+UmVxdWlyZWQ8L2VtPn08L2xpPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uaW1wbC5EdWJsaW5Db3JlSW1wbCNnZXRTcGF0aWFsIDxlbT5TcGF0aWFsPC9lbT59PC9saT4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLmltcGwuRHVibGluQ29yZUltcGwjZ2V0VmFsaWQgPGVtPlZhbGlkPC9lbT59PC9saT4KKyAqIDwvdWw+CisgKiA8L3A+CisgKgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgRHVibGluQ29yZUltcGwgZXh0ZW5kcyBFT2JqZWN0SW1wbCBpbXBsZW1lbnRzIER1YmxpbkNvcmUgeworCS8qKgorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRUaXRsZSgpIDxlbT5UaXRsZTwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI2dldFRpdGxlKCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIFN0cmluZyBUSVRMRV9FREVGQVVMVCA9IG51bGw7CisKKwkvKioKKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRUaXRsZSgpIDxlbT5UaXRsZTwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI2dldFRpdGxlKCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgU3RyaW5nIHRpdGxlID0gVElUTEVfRURFRkFVTFQ7CisKKwkvKioKKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0SWRlbnRpZmllcigpIDxlbT5JZGVudGlmaWVyPC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZ2V0SWRlbnRpZmllcigpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBTdHJpbmcgSURFTlRJRklFUl9FREVGQVVMVCA9IG51bGw7CisKKwkvKioKKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRJZGVudGlmaWVyKCkgPGVtPklkZW50aWZpZXI8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNnZXRJZGVudGlmaWVyKCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgU3RyaW5nIGlkZW50aWZpZXIgPSBJREVOVElGSUVSX0VERUZBVUxUOworCisJLyoqCisJICogVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldERlc2NyaXB0aW9uKCkgPGVtPkRlc2NyaXB0aW9uPC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZ2V0RGVzY3JpcHRpb24oKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgU3RyaW5nIERFU0NSSVBUSU9OX0VERUZBVUxUID0gbnVsbDsKKworCS8qKgorCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldERlc2NyaXB0aW9uKCkgPGVtPkRlc2NyaXB0aW9uPC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZ2V0RGVzY3JpcHRpb24oKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBTdHJpbmcgZGVzY3JpcHRpb24gPSBERVNDUklQVElPTl9FREVGQVVMVDsKKworCS8qKgorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRDcmVhdG9yKCkgPGVtPkNyZWF0b3I8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNnZXRDcmVhdG9yKCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIFN0cmluZyBDUkVBVE9SX0VERUZBVUxUID0gbnVsbDsKKworCS8qKgorCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldENyZWF0b3IoKSA8ZW0+Q3JlYXRvcjwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI2dldENyZWF0b3IoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBTdHJpbmcgY3JlYXRvciA9IENSRUFUT1JfRURFRkFVTFQ7CisKKwkvKioKKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0RGF0ZSgpIDxlbT5EYXRlPC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZ2V0RGF0ZSgpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBTdHJpbmcgREFURV9FREVGQVVMVCA9IG51bGw7CisKKwkvKioKKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXREYXRlKCkgPGVtPkRhdGU8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNnZXREYXRlKCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgU3RyaW5nIGRhdGUgPSBEQVRFX0VERUZBVUxUOworCisJLyoqCisJICogVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldEZvcm1hdCgpIDxlbT5Gb3JtYXQ8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNnZXRGb3JtYXQoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgU3RyaW5nIEZPUk1BVF9FREVGQVVMVCA9IG51bGw7CisKKwkvKioKKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRGb3JtYXQoKSA8ZW0+Rm9ybWF0PC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZ2V0Rm9ybWF0KCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgU3RyaW5nIGZvcm1hdCA9IEZPUk1BVF9FREVGQVVMVDsKKworCS8qKgorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRQdWJsaXNoZXIoKSA8ZW0+UHVibGlzaGVyPC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZ2V0UHVibGlzaGVyKCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIFN0cmluZyBQVUJMSVNIRVJfRURFRkFVTFQgPSBudWxsOworCisJLyoqCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0UHVibGlzaGVyKCkgPGVtPlB1Ymxpc2hlcjwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI2dldFB1Ymxpc2hlcigpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIFN0cmluZyBwdWJsaXNoZXIgPSBQVUJMSVNIRVJfRURFRkFVTFQ7CisKKwkvKioKKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0Q292ZXJhZ2UoKSA8ZW0+Q292ZXJhZ2U8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNnZXRDb3ZlcmFnZSgpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBTdHJpbmcgQ09WRVJBR0VfRURFRkFVTFQgPSBudWxsOworCisJLyoqCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0Q292ZXJhZ2UoKSA8ZW0+Q292ZXJhZ2U8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNnZXRDb3ZlcmFnZSgpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIFN0cmluZyBjb3ZlcmFnZSA9IENPVkVSQUdFX0VERUZBVUxUOworCisJLyoqCisJICogVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldENvbnRyaWJ1dG9yKCkgPGVtPkNvbnRyaWJ1dG9yPC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZ2V0Q29udHJpYnV0b3IoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgU3RyaW5nIENPTlRSSUJVVE9SX0VERUZBVUxUID0gbnVsbDsKKworCS8qKgorCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldENvbnRyaWJ1dG9yKCkgPGVtPkNvbnRyaWJ1dG9yPC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZ2V0Q29udHJpYnV0b3IoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBTdHJpbmcgY29udHJpYnV0b3IgPSBDT05UUklCVVRPUl9FREVGQVVMVDsKKworCS8qKgorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRSZWxhdGlvbigpIDxlbT5SZWxhdGlvbjwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI2dldFJlbGF0aW9uKCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIFN0cmluZyBSRUxBVElPTl9FREVGQVVMVCA9IG51bGw7CisKKwkvKioKKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRSZWxhdGlvbigpIDxlbT5SZWxhdGlvbjwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI2dldFJlbGF0aW9uKCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgU3RyaW5nIHJlbGF0aW9uID0gUkVMQVRJT05fRURFRkFVTFQ7CisKKwkvKioKKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0UmlnaHRzKCkgPGVtPlJpZ2h0czwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI2dldFJpZ2h0cygpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBTdHJpbmcgUklHSFRTX0VERUZBVUxUID0gbnVsbDsKKworCS8qKgorCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldFJpZ2h0cygpIDxlbT5SaWdodHM8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNnZXRSaWdodHMoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBTdHJpbmcgcmlnaHRzID0gUklHSFRTX0VERUZBVUxUOworCisJLyoqCisJICogVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldFNvdXJjZSgpIDxlbT5Tb3VyY2U8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNnZXRTb3VyY2UoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgU3RyaW5nIFNPVVJDRV9FREVGQVVMVCA9IG51bGw7CisKKwkvKioKKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRTb3VyY2UoKSA8ZW0+U291cmNlPC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZ2V0U291cmNlKCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgU3RyaW5nIHNvdXJjZSA9IFNPVVJDRV9FREVGQVVMVDsKKworCS8qKgorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRTdWJqZWN0KCkgPGVtPlN1YmplY3Q8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNnZXRTdWJqZWN0KCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIFN0cmluZyBTVUJKRUNUX0VERUZBVUxUID0gbnVsbDsKKworCS8qKgorCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldFN1YmplY3QoKSA8ZW0+U3ViamVjdDwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI2dldFN1YmplY3QoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBTdHJpbmcgc3ViamVjdCA9IFNVQkpFQ1RfRURFRkFVTFQ7CisKKwkvKioKKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0VHlwZSgpIDxlbT5UeXBlPC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZ2V0VHlwZSgpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBTdHJpbmcgVFlQRV9FREVGQVVMVCA9IG51bGw7CisKKwkvKioKKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRUeXBlKCkgPGVtPlR5cGU8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNnZXRUeXBlKCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgU3RyaW5nIHR5cGUgPSBUWVBFX0VERUZBVUxUOworCisJLyoqCisJICogVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldExhbmd1YWdlKCkgPGVtPkxhbmd1YWdlPC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZ2V0TGFuZ3VhZ2UoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgU3RyaW5nIExBTkdVQUdFX0VERUZBVUxUID0gbnVsbDsKKworCS8qKgorCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldExhbmd1YWdlKCkgPGVtPkxhbmd1YWdlPC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZ2V0TGFuZ3VhZ2UoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBTdHJpbmcgbGFuZ3VhZ2UgPSBMQU5HVUFHRV9FREVGQVVMVDsKKworCS8qKgorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRCaWJsaW9ncmFwaGljQ2l0YXRpb24oKSA8ZW0+QmlibGlvZ3JhcGhpYyBDaXRhdGlvbjwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI2dldEJpYmxpb2dyYXBoaWNDaXRhdGlvbigpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBTdHJpbmcgQklCTElPR1JBUEhJQ19DSVRBVElPTl9FREVGQVVMVCA9IG51bGw7CisKKwkvKioKKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRCaWJsaW9ncmFwaGljQ2l0YXRpb24oKSA8ZW0+QmlibGlvZ3JhcGhpYyBDaXRhdGlvbjwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI2dldEJpYmxpb2dyYXBoaWNDaXRhdGlvbigpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIFN0cmluZyBiaWJsaW9ncmFwaGljQ2l0YXRpb24gPSBCSUJMSU9HUkFQSElDX0NJVEFUSU9OX0VERUZBVUxUOworCisJLyoqCisJICogVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldENyZWF0ZWQoKSA8ZW0+Q3JlYXRlZDwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI2dldENyZWF0ZWQoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgU3RyaW5nIENSRUFURURfRURFRkFVTFQgPSBudWxsOworCisJLyoqCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0Q3JlYXRlZCgpIDxlbT5DcmVhdGVkPC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZ2V0Q3JlYXRlZCgpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIFN0cmluZyBjcmVhdGVkID0gQ1JFQVRFRF9FREVGQVVMVDsKKworCS8qKgorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRMaWNlbnNlKCkgPGVtPkxpY2Vuc2U8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNnZXRMaWNlbnNlKCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIFN0cmluZyBMSUNFTlNFX0VERUZBVUxUID0gbnVsbDsKKworCS8qKgorCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldExpY2Vuc2UoKSA8ZW0+TGljZW5zZTwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI2dldExpY2Vuc2UoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBTdHJpbmcgbGljZW5zZSA9IExJQ0VOU0VfRURFRkFVTFQ7CisKKwkvKioKKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0UmVxdWlyZWQoKSA8ZW0+UmVxdWlyZWQ8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNnZXRSZXF1aXJlZCgpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBTdHJpbmcgUkVRVUlSRURfRURFRkFVTFQgPSBudWxsOworCisJLyoqCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0UmVxdWlyZWQoKSA8ZW0+UmVxdWlyZWQ8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNnZXRSZXF1aXJlZCgpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIFN0cmluZyByZXF1aXJlZCA9IFJFUVVJUkVEX0VERUZBVUxUOworCisJLyoqCisJICogVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldFNwYXRpYWwoKSA8ZW0+U3BhdGlhbDwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI2dldFNwYXRpYWwoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgU3RyaW5nIFNQQVRJQUxfRURFRkFVTFQgPSBudWxsOworCisJLyoqCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0U3BhdGlhbCgpIDxlbT5TcGF0aWFsPC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZ2V0U3BhdGlhbCgpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIFN0cmluZyBzcGF0aWFsID0gU1BBVElBTF9FREVGQVVMVDsKKworCS8qKgorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRWYWxpZCgpIDxlbT5WYWxpZDwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI2dldFZhbGlkKCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIFN0cmluZyBWQUxJRF9FREVGQVVMVCA9IG51bGw7CisKKwkvKioKKwkgKiBUaGlzIGlzIHRoZSBzdHJpbmcgdXNlZCBpbiB0aGUge0BsaW5rICN2YWxpZH0gYXR0cmlidXRlIHRvIHNwZWNpZnkgdGhlCisJICogc3RhcnRpbmcgZGF0ZSBvZiB0aGUgdmFsaWQgZGF0ZSByYW5nZS4KKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBTVEFSVCA9ICJzdGFydD0iOworCisJLyoqCisJICogVGhpcyBpcyB0aGUgc3RyaW5nIHVzZWQgaW4gdGhlIHtAbGluayAjdmFsaWR9IGF0dHJpYnV0ZSB0byBzcGVjaWZ5IHRoZQorCSAqIGVuZGluZyBkYXRlIG9mIHRoZSB2YWxpZCBkYXRlIHJhbmdlLgorCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEVORCA9ICJlbmQ9IjsKKworCS8qKgorCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldFZhbGlkKCkgPGVtPlZhbGlkPC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZ2V0VmFsaWQoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBTdHJpbmcgdmFsaWQgPSBWQUxJRF9FREVGQVVMVDsKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgRHVibGluQ29yZUltcGwoKSB7CisJCXN1cGVyKCk7CisJfQorCisJLyoqCisJICogVGhpcyBjb25zdHJ1Y3RvciBpcyB1c2VkIHRvIGNyZWF0ZSBhbmQgaW5pdGlhbGl6ZSBhIER1YmxpbiBDb3JlIGluc3RhbmNlCisJICogZnJvbSBhbiBJQ29uZmlndXJhdGlvbkVsZW1lbnQgaW5zdGFuY2UuIFRoZSBjb25maWd1cmF0aW9uIGVsZW1lbnQgaXMKKwkgKiBleHRyYWN0ZWQgZnJvbSB0aGUgZXh0ZW5zaW9uIGRlZmluaXRpb24gaW4gdGhlIHBsdWdpbi54bWwgZmlsZSBvZiBhCisJICogcGx1Zy1pbiB0aGF0IGlzIHByb3ZpZGluZyBhbiBJZGVudGlmaWFibGUuIFRoaXMgaXMgdXNlZCBieSB0aGUgY2xhc3MKKwkgKiBJZGVudGlmaWFibGVEZWxlZ2F0ZSBpbiB0aGUgY2xhc3MKKwkgKiBvcmcuZWNsaXBzZS5zdGVtLnVpLnZpZXdzLklkZW50aWZpYWJsZVBsdWdpblZpZXcgdG8gY3JlYXRlIGEgInByb3h5IgorCSAqIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBEdWJsaW4gQ29yZSBvZiB0aGUgSWRlbnRpZmlhYmxlIGZyb20gdGhlCisJICogY29uZmlndXJhdGlvbiBlbGVtZW50IHNvIHRoYXQgdGhlIElkZW50aWZpYWJsZSBpdHNlbGYgZG9lcyBub3QgaGF2ZSB0byBiZQorCSAqIGxvYWRlZC4KKwkgKiAKKwkgKiBAcGFyYW0gY29uZmlnRWxlbWVudAorCSAqICAgICAgICAgICAgdGhlIGNvbmZpZ3VyYXRpb24gZWxlbWVudCBmcm9tIHRoZSBwbHVnaW4ueG1sIGZpbGUKKwkgKiAKKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCXB1YmxpYyBEdWJsaW5Db3JlSW1wbChJQ29uZmlndXJhdGlvbkVsZW1lbnQgY29uZmlnRWxlbWVudCkgeworCQlzZXRUaXRsZShjb25maWdFbGVtZW50LmdldEF0dHJpYnV0ZSgidGl0bGUiKSk7CisJCXNldENyZWF0b3IoY29uZmlnRWxlbWVudC5nZXRBdHRyaWJ1dGUoImNyZWF0b3IiKSk7CisJCXNldFN1YmplY3QoY29uZmlnRWxlbWVudC5nZXRBdHRyaWJ1dGUoInN1YmplY3QiKSk7CisJCXNldERlc2NyaXB0aW9uKGNvbmZpZ0VsZW1lbnQuZ2V0QXR0cmlidXRlKCJkZXNjcmlwdGlvbiIpKTsKKwkJc2V0UHVibGlzaGVyKGNvbmZpZ0VsZW1lbnQuZ2V0QXR0cmlidXRlKCJwdWJsaXNoZXIiKSk7CisJCXNldENvbnRyaWJ1dG9yKGNvbmZpZ0VsZW1lbnQuZ2V0QXR0cmlidXRlKCJjb250cmlidXRvciIpKTsKKwkJc2V0RGF0ZShjb25maWdFbGVtZW50LmdldEF0dHJpYnV0ZSgiZGF0ZSIpKTsKKwkJc2V0VHlwZShjb25maWdFbGVtZW50LmdldEF0dHJpYnV0ZSgidHlwZSIpKTsKKwkJc2V0Rm9ybWF0KGNvbmZpZ0VsZW1lbnQuZ2V0QXR0cmlidXRlKCJmb3JtYXQiKSk7CisJCXNldElkZW50aWZpZXIoY29uZmlnRWxlbWVudC5nZXRBdHRyaWJ1dGUoImlkZW50aWZpZXIiKSk7CisJCXNldFNvdXJjZShjb25maWdFbGVtZW50LmdldEF0dHJpYnV0ZSgic291cmNlIikpOworCQlzZXRMYW5ndWFnZShjb25maWdFbGVtZW50LmdldEF0dHJpYnV0ZSgibGFuZ3VhZ2UiKSk7CisJCXNldFJlbGF0aW9uKGNvbmZpZ0VsZW1lbnQuZ2V0QXR0cmlidXRlKCJyZWxhdGlvbiIpKTsKKwkJc2V0Q292ZXJhZ2UoY29uZmlnRWxlbWVudC5nZXRBdHRyaWJ1dGUoImNvdmVyYWdlIikpOworCQlzZXRCaWJsaW9ncmFwaGljQ2l0YXRpb24oY29uZmlnRWxlbWVudC5nZXRBdHRyaWJ1dGUoImJpYmxpb2dyYXBoaWNDaXRhdGlvbiIpKTsKKwkJc2V0Q3JlYXRlZChjb25maWdFbGVtZW50LmdldEF0dHJpYnV0ZSgiY3JlYXRlZCIpKTsKKwkJc2V0TGljZW5zZShjb25maWdFbGVtZW50LmdldEF0dHJpYnV0ZSgibGljZW5zZSIpKTsKKwkJc2V0UmVxdWlyZWQoY29uZmlnRWxlbWVudC5nZXRBdHRyaWJ1dGUoInJlcXVpcmVkIikpOworCQlzZXRTcGF0aWFsKGNvbmZpZ0VsZW1lbnQuZ2V0QXR0cmlidXRlKCJzcGF0aWFsIikpOworCQlzZXRWYWxpZChjb25maWdFbGVtZW50LmdldEF0dHJpYnV0ZSgidmFsaWQiKSk7CisJfSAvLyBEdWJsaW5Db3JlSW1wbAorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCBFQ2xhc3MgZVN0YXRpY0NsYXNzKCkgeworCQlyZXR1cm4gQ29tbW9uUGFja2FnZS5MaXRlcmFscy5EVUJMSU5fQ09SRTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFN0cmluZyBnZXRUaXRsZSgpIHsKKwkJcmV0dXJuIHRpdGxlOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRUaXRsZShTdHJpbmcgbmV3VGl0bGUpIHsKKwkJU3RyaW5nIG9sZFRpdGxlID0gdGl0bGU7CisJCXRpdGxlID0gbmV3VGl0bGU7CisJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkKKwkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIENvbW1vblBhY2thZ2UuRFVCTElOX0NPUkVfX1RJVExFLCBvbGRUaXRsZSwgdGl0bGUpKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFN0cmluZyBnZXRDcmVhdG9yKCkgeworCQlyZXR1cm4gY3JlYXRvcjsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgc2V0Q3JlYXRvcihTdHJpbmcgbmV3Q3JlYXRvcikgeworCQlTdHJpbmcgb2xkQ3JlYXRvciA9IGNyZWF0b3I7CisJCWNyZWF0b3IgPSBuZXdDcmVhdG9yOworCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpCisJCQllTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBDb21tb25QYWNrYWdlLkRVQkxJTl9DT1JFX19DUkVBVE9SLCBvbGRDcmVhdG9yLCBjcmVhdG9yKSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBTdHJpbmcgZ2V0U3ViamVjdCgpIHsKKwkJcmV0dXJuIHN1YmplY3Q7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIHNldFN1YmplY3QoU3RyaW5nIG5ld1N1YmplY3QpIHsKKwkJU3RyaW5nIG9sZFN1YmplY3QgPSBzdWJqZWN0OworCQlzdWJqZWN0ID0gbmV3U3ViamVjdDsKKwkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQorCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgQ29tbW9uUGFja2FnZS5EVUJMSU5fQ09SRV9fU1VCSkVDVCwgb2xkU3ViamVjdCwgc3ViamVjdCkpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgU3RyaW5nIGdldERlc2NyaXB0aW9uKCkgeworCQlyZXR1cm4gZGVzY3JpcHRpb247CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIHNldERlc2NyaXB0aW9uKFN0cmluZyBuZXdEZXNjcmlwdGlvbikgeworCQlTdHJpbmcgb2xkRGVzY3JpcHRpb24gPSBkZXNjcmlwdGlvbjsKKwkJZGVzY3JpcHRpb24gPSBuZXdEZXNjcmlwdGlvbjsKKwkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQorCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgQ29tbW9uUGFja2FnZS5EVUJMSU5fQ09SRV9fREVTQ1JJUFRJT04sIG9sZERlc2NyaXB0aW9uLCBkZXNjcmlwdGlvbikpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgU3RyaW5nIGdldFB1Ymxpc2hlcigpIHsKKwkJcmV0dXJuIHB1Ymxpc2hlcjsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgc2V0UHVibGlzaGVyKFN0cmluZyBuZXdQdWJsaXNoZXIpIHsKKwkJU3RyaW5nIG9sZFB1Ymxpc2hlciA9IHB1Ymxpc2hlcjsKKwkJcHVibGlzaGVyID0gbmV3UHVibGlzaGVyOworCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpCisJCQllTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBDb21tb25QYWNrYWdlLkRVQkxJTl9DT1JFX19QVUJMSVNIRVIsIG9sZFB1Ymxpc2hlciwgcHVibGlzaGVyKSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBTdHJpbmcgZ2V0Q29udHJpYnV0b3IoKSB7CisJCXJldHVybiBjb250cmlidXRvcjsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgc2V0Q29udHJpYnV0b3IoU3RyaW5nIG5ld0NvbnRyaWJ1dG9yKSB7CisJCVN0cmluZyBvbGRDb250cmlidXRvciA9IGNvbnRyaWJ1dG9yOworCQljb250cmlidXRvciA9IG5ld0NvbnRyaWJ1dG9yOworCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpCisJCQllTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBDb21tb25QYWNrYWdlLkRVQkxJTl9DT1JFX19DT05UUklCVVRPUiwgb2xkQ29udHJpYnV0b3IsIGNvbnRyaWJ1dG9yKSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBTdHJpbmcgZ2V0RGF0ZSgpIHsKKwkJcmV0dXJuIGRhdGU7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIHNldERhdGUoU3RyaW5nIG5ld0RhdGUpIHsKKwkJU3RyaW5nIG9sZERhdGUgPSBkYXRlOworCQlkYXRlID0gbmV3RGF0ZTsKKwkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQorCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgQ29tbW9uUGFja2FnZS5EVUJMSU5fQ09SRV9fREFURSwgb2xkRGF0ZSwgZGF0ZSkpOworCX0KKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb21tb24uRHVibGluQ29yZSNzZXREYXRlKGphdmEudXRpbC5EYXRlKQorCSAqLworCXB1YmxpYyB2b2lkIHNldERhdGUoRGF0ZSBkYXRlKSB7CisJCXNldERhdGUoY3JlYXRlSVNPODYwMURhdGVTdHJpbmcoZGF0ZSkpOworCX0gLy8gc2V0RGF0ZQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBTdHJpbmcgZ2V0VHlwZSgpIHsKKwkJcmV0dXJuIHR5cGU7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIHNldFR5cGUoU3RyaW5nIG5ld1R5cGUpIHsKKwkJU3RyaW5nIG9sZFR5cGUgPSB0eXBlOworCQl0eXBlID0gbmV3VHlwZTsKKwkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQorCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgQ29tbW9uUGFja2FnZS5EVUJMSU5fQ09SRV9fVFlQRSwgb2xkVHlwZSwgdHlwZSkpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgU3RyaW5nIGdldEZvcm1hdCgpIHsKKwkJcmV0dXJuIGZvcm1hdDsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgc2V0Rm9ybWF0KFN0cmluZyBuZXdGb3JtYXQpIHsKKwkJU3RyaW5nIG9sZEZvcm1hdCA9IGZvcm1hdDsKKwkJZm9ybWF0ID0gbmV3Rm9ybWF0OworCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpCisJCQllTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBDb21tb25QYWNrYWdlLkRVQkxJTl9DT1JFX19GT1JNQVQsIG9sZEZvcm1hdCwgZm9ybWF0KSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBTdHJpbmcgZ2V0SWRlbnRpZmllcigpIHsKKwkJcmV0dXJuIGlkZW50aWZpZXI7CisJfQorCQorCS8qKgorCSAqIHByb3ZpZGVzIHRoZSBmZWF0dXJlIGJ5IGZlYXR1cmVOYW1lIChTdHJpbmcpIGlmIGl0IGV4aXN0cy4KKwkgKiBPbiBmYWlsdXJlIHJldHVybiBudWxsCisJICogQHBhcmFtIGZlYXR1cmVOYW1lCisJICogQHJldHVybiBmZWF0dXJlIG9yIG51bGwKKwkgKi8KKwlwdWJsaWMgRVN0cnVjdHVyYWxGZWF0dXJlIGdldEZlYXR1cmUoU3RyaW5nIGZlYXR1cmVOYW1lKSB7CisJCUVMaXN0PEVTdHJ1Y3R1cmFsRmVhdHVyZT4gZmVhdHVyZUxpc3QgPSB0aGlzLmVDbGFzcygpLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKTsKKwkJZm9yKGludCBpID0gMDsgaSA8IGZlYXR1cmVMaXN0LnNpemUoKTsgaSArKykgeworCQkJaWYoZmVhdHVyZUxpc3QuZ2V0KGkpLmdldE5hbWUoKS5lcXVhbHNJZ25vcmVDYXNlKGZlYXR1cmVOYW1lKSkgcmV0dXJuIGZlYXR1cmVMaXN0LmdldChpKTsKKwkJfQorCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgc2V0SWRlbnRpZmllcihTdHJpbmcgbmV3SWRlbnRpZmllcikgeworCQlTdHJpbmcgb2xkSWRlbnRpZmllciA9IGlkZW50aWZpZXI7CisJCWlkZW50aWZpZXIgPSBuZXdJZGVudGlmaWVyOworCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpCisJCQllTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBDb21tb25QYWNrYWdlLkRVQkxJTl9DT1JFX19JREVOVElGSUVSLCBvbGRJZGVudGlmaWVyLCBpZGVudGlmaWVyKSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBTdHJpbmcgZ2V0U291cmNlKCkgeworCQlyZXR1cm4gc291cmNlOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRTb3VyY2UoU3RyaW5nIG5ld1NvdXJjZSkgeworCQlTdHJpbmcgb2xkU291cmNlID0gc291cmNlOworCQlzb3VyY2UgPSBuZXdTb3VyY2U7CisJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkKKwkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIENvbW1vblBhY2thZ2UuRFVCTElOX0NPUkVfX1NPVVJDRSwgb2xkU291cmNlLCBzb3VyY2UpKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFN0cmluZyBnZXRMYW5ndWFnZSgpIHsKKwkJcmV0dXJuIGxhbmd1YWdlOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRMYW5ndWFnZShTdHJpbmcgbmV3TGFuZ3VhZ2UpIHsKKwkJU3RyaW5nIG9sZExhbmd1YWdlID0gbGFuZ3VhZ2U7CisJCWxhbmd1YWdlID0gbmV3TGFuZ3VhZ2U7CisJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkKKwkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIENvbW1vblBhY2thZ2UuRFVCTElOX0NPUkVfX0xBTkdVQUdFLCBvbGRMYW5ndWFnZSwgbGFuZ3VhZ2UpKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFN0cmluZyBnZXRSZWxhdGlvbigpIHsKKwkJcmV0dXJuIHJlbGF0aW9uOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRSZWxhdGlvbihTdHJpbmcgbmV3UmVsYXRpb24pIHsKKwkJU3RyaW5nIG9sZFJlbGF0aW9uID0gcmVsYXRpb247CisJCXJlbGF0aW9uID0gbmV3UmVsYXRpb247CisJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkKKwkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIENvbW1vblBhY2thZ2UuRFVCTElOX0NPUkVfX1JFTEFUSU9OLCBvbGRSZWxhdGlvbiwgcmVsYXRpb24pKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFN0cmluZyBnZXRDb3ZlcmFnZSgpIHsKKwkJcmV0dXJuIGNvdmVyYWdlOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRDb3ZlcmFnZShTdHJpbmcgbmV3Q292ZXJhZ2UpIHsKKwkJU3RyaW5nIG9sZENvdmVyYWdlID0gY292ZXJhZ2U7CisJCWNvdmVyYWdlID0gbmV3Q292ZXJhZ2U7CisJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkKKwkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIENvbW1vblBhY2thZ2UuRFVCTElOX0NPUkVfX0NPVkVSQUdFLCBvbGRDb3ZlcmFnZSwgY292ZXJhZ2UpKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFN0cmluZyBnZXRSaWdodHMoKSB7CisJCXJldHVybiByaWdodHM7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIHNldFJpZ2h0cyhTdHJpbmcgbmV3UmlnaHRzKSB7CisJCVN0cmluZyBvbGRSaWdodHMgPSByaWdodHM7CisJCXJpZ2h0cyA9IG5ld1JpZ2h0czsKKwkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQorCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgQ29tbW9uUGFja2FnZS5EVUJMSU5fQ09SRV9fUklHSFRTLCBvbGRSaWdodHMsIHJpZ2h0cykpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgU3RyaW5nIGdldEJpYmxpb2dyYXBoaWNDaXRhdGlvbigpIHsKKwkJcmV0dXJuIGJpYmxpb2dyYXBoaWNDaXRhdGlvbjsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgc2V0QmlibGlvZ3JhcGhpY0NpdGF0aW9uKFN0cmluZyBuZXdCaWJsaW9ncmFwaGljQ2l0YXRpb24pIHsKKwkJU3RyaW5nIG9sZEJpYmxpb2dyYXBoaWNDaXRhdGlvbiA9IGJpYmxpb2dyYXBoaWNDaXRhdGlvbjsKKwkJYmlibGlvZ3JhcGhpY0NpdGF0aW9uID0gbmV3QmlibGlvZ3JhcGhpY0NpdGF0aW9uOworCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpCisJCQllTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBDb21tb25QYWNrYWdlLkRVQkxJTl9DT1JFX19CSUJMSU9HUkFQSElDX0NJVEFUSU9OLCBvbGRCaWJsaW9ncmFwaGljQ2l0YXRpb24sIGJpYmxpb2dyYXBoaWNDaXRhdGlvbikpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgU3RyaW5nIGdldENyZWF0ZWQoKSB7CisJCXJldHVybiBjcmVhdGVkOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRDcmVhdGVkKFN0cmluZyBuZXdDcmVhdGVkKSB7CisJCVN0cmluZyBvbGRDcmVhdGVkID0gY3JlYXRlZDsKKwkJY3JlYXRlZCA9IG5ld0NyZWF0ZWQ7CisJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkKKwkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIENvbW1vblBhY2thZ2UuRFVCTElOX0NPUkVfX0NSRUFURUQsIG9sZENyZWF0ZWQsIGNyZWF0ZWQpKTsKKwl9CisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29tbW9uLkR1YmxpbkNvcmUjc2V0Q3JlYXRlZChqYXZhLnV0aWwuRGF0ZSkKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRDcmVhdGVkKERhdGUgZGF0ZSkgeworCQlzZXRDcmVhdGVkKGNyZWF0ZUlTTzg2MDFEYXRlU3RyaW5nKGRhdGUpKTsKKwl9IC8vIHNldENyZWF0ZWQKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgU3RyaW5nIGdldExpY2Vuc2UoKSB7CisJCXJldHVybiBsaWNlbnNlOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRMaWNlbnNlKFN0cmluZyBuZXdMaWNlbnNlKSB7CisJCVN0cmluZyBvbGRMaWNlbnNlID0gbGljZW5zZTsKKwkJbGljZW5zZSA9IG5ld0xpY2Vuc2U7CisJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkKKwkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIENvbW1vblBhY2thZ2UuRFVCTElOX0NPUkVfX0xJQ0VOU0UsIG9sZExpY2Vuc2UsIGxpY2Vuc2UpKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFN0cmluZyBnZXRSZXF1aXJlZCgpIHsKKwkJcmV0dXJuIHJlcXVpcmVkOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRSZXF1aXJlZChTdHJpbmcgbmV3UmVxdWlyZWQpIHsKKwkJU3RyaW5nIG9sZFJlcXVpcmVkID0gcmVxdWlyZWQ7CisJCXJlcXVpcmVkID0gbmV3UmVxdWlyZWQ7CisJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkKKwkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIENvbW1vblBhY2thZ2UuRFVCTElOX0NPUkVfX1JFUVVJUkVELCBvbGRSZXF1aXJlZCwgcmVxdWlyZWQpKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFN0cmluZyBnZXRTcGF0aWFsKCkgeworCQlyZXR1cm4gc3BhdGlhbDsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgc2V0U3BhdGlhbChTdHJpbmcgbmV3U3BhdGlhbCkgeworCQlTdHJpbmcgb2xkU3BhdGlhbCA9IHNwYXRpYWw7CisJCXNwYXRpYWwgPSBuZXdTcGF0aWFsOworCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpCisJCQllTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBDb21tb25QYWNrYWdlLkRVQkxJTl9DT1JFX19TUEFUSUFMLCBvbGRTcGF0aWFsLCBzcGF0aWFsKSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBTdHJpbmcgZ2V0VmFsaWQoKSB7CisJCXJldHVybiB2YWxpZDsKKwl9CisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uRHVibGluQ29yZSNnZXRWYWxpZEVuZERhdGUoKQorCSAqLworCXB1YmxpYyBEYXRlIGdldFZhbGlkRW5kRGF0ZSgpIHsKKwkJcmV0dXJuIGdldFZhbGlkRW5kRGF0ZShnZXRWYWxpZCgpKTsKKwl9IC8vIGdldFZhbGlkRW5kRGF0ZQorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLkR1YmxpbkNvcmUjZ2V0VmFsaWRFbmREYXRlKCkKKwkgKi8KKwlAU3VwcHJlc3NXYXJuaW5ncygibnVsbCIpCisJcHVibGljIHN0YXRpYyBEYXRlIGdldFZhbGlkRW5kRGF0ZShmaW5hbCBTdHJpbmcgdmFsaWRWYWx1ZSkgeworCQlEYXRlIHJldFZhbHVlID0gbnVsbDsKKwkJLy8gSXMgdGhlIHZhbGlkIHZhbHVlIHNldD8KKwkJaWYgKHZhbGlkVmFsdWUgIT0gbnVsbCkgeworCQkJLy8gWWVzCisJCQlmaW5hbCBpbnQgZGF0ZUluZGV4ID0gdmFsaWRWYWx1ZS5pbmRleE9mKEVORCk7CisJCQkvLyBJcyB0aGUgZW5kIGRhdGUgc3BlY2lmaWVkPworCQkJaWYgKGRhdGVJbmRleCA+PSAwKSB7CisJCQkJLy8gWWVzCisJCQkJdHJ5IHsKKwkJCQkJcmV0VmFsdWUgPSBjcmVhdGVEYXRlRnJvbUlTTzg2MDFEYXRlU3RyaW5nKHZhbGlkVmFsdWUKKwkJCQkJCQkuc3Vic3RyaW5nKGRhdGVJbmRleCArIEVORC5sZW5ndGgoKSkpOworCQkJCX0gY2F0Y2ggKFBhcnNlRXhjZXB0aW9uIGUpIHsKKwkJCQkJcmV0VmFsdWUgPSBudWxsOworCQkJCX0KKwkJCX0gLy8gaWYKKwkJfSAvLyBpZgorCQlyZXR1cm4gcmV0VmFsdWU7CisJfSAvLyBnZXRWYWxpZEVuZERhdGUKKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5EdWJsaW5Db3JlI2lzVmFsaWRCZWZvcmUoRHVibGluQ29yZSkKKwkgKi8KKwlAU3VwcHJlc3NXYXJuaW5ncygibnVsbCIpCisJcHVibGljIGJvb2xlYW4gaXNWYWxpZEJlZm9yZShEdWJsaW5Db3JlIGR1YmxpbkNvcmUpIHsKKwkJZmluYWwgRGF0ZSBvdXJTdGFydERhdGUgPSBnZXRWYWxpZFN0YXJ0RGF0ZSgpOworCQlmaW5hbCBEYXRlIG90aGVyU3RhcnREYXRlID0gZHVibGluQ29yZSAhPSBudWxsID8gZHVibGluQ29yZQorCQkJCS5nZXRWYWxpZFN0YXJ0RGF0ZSgpIDogbnVsbDsKKworCQlib29sZWFuIHJldFZhbHVlID0gKGR1YmxpbkNvcmUgPT0gbnVsbCkgfHwgKG90aGVyU3RhcnREYXRlID09IG51bGwpOworCisJCXJldFZhbHVlID0gcmV0VmFsdWUKKwkJCQl8fCAob3VyU3RhcnREYXRlICE9IG51bGwgJiYgb3RoZXJTdGFydERhdGUuYWZ0ZXIob3VyU3RhcnREYXRlKSk7CisKKwkJcmV0dXJuIHJldFZhbHVlOworCX0gLy8gaXNWYWxpZEJlZm9yZQorCisJcHVibGljIERhdGVbXSBjb21wdXRlVmFsaWREYXRlUmFuZ2VPdmVybGFwKER1YmxpbkNvcmUgZHVibGluQ29yZSkgeworCQlEYXRlW10gcmV0VmFsdWUgPSBudWxsOworCQkKKwkJZmluYWwgRGF0ZSBvdXJTdGFydERhdGUgPSBnZXRWYWxpZFN0YXJ0RGF0ZSgpOworCQlmaW5hbCBEYXRlIG91ckVuZERhdGUgPSBnZXRWYWxpZEVuZERhdGUoKTsKKwkJZmluYWwgRGF0ZSBvdGhlclN0YXJ0RGF0ZSA9IGR1YmxpbkNvcmUuZ2V0VmFsaWRTdGFydERhdGUoKTsKKwkJZmluYWwgRGF0ZSBvdGhlckVuZERhdGUgPSBkdWJsaW5Db3JlLmdldFZhbGlkRW5kRGF0ZSgpOworCisJCURhdGUgbmV3U3RhcnREYXRlID0gb3VyU3RhcnREYXRlOworCQlEYXRlIG5ld0VuZERhdGUgPSBvdXJFbmREYXRlOworCisJCS8vIEZpZ3VyZSBvdXQgd2hpY2ggc3RhcnQgZGF0ZSBpcyBvbGRlc3QKKwkJLy8gRG8gd2UgaGF2ZSBhIHN0YXJ0IGRhdGU/CisJCWlmIChvdXJTdGFydERhdGUgIT0gbnVsbCkgeworCQkJLy8gWWVzCisJCQkvLyBIb3cgYWJvdXQgdGhlIG90aGVyIHN0YXJ0IGRhdGU/CisJCQlpZiAob3RoZXJTdGFydERhdGUgIT0gbnVsbCkgeworCQkJCS8vIFllcworCQkJCS8vIElzIHRoZSBvdGhlciBzdGFydCBkYXRlIGFmdGVyIG91cnM/CisJCQkJaWYgKG90aGVyU3RhcnREYXRlLmFmdGVyKG91clN0YXJ0RGF0ZSkpIHsKKwkJCQkJLy8gWWVzCisJCQkJCW5ld1N0YXJ0RGF0ZSA9IG90aGVyU3RhcnREYXRlOworCQkJCX0KKwkJCX0gLy8gaWYgb3RoZXIgc3RhcnQgZGF0ZT8KKwkJfSAvLyBpZiBzdGFydCBkYXRlPworCQllbHNlIHsKKwkJCS8vIE5vCisJCQluZXdTdGFydERhdGUgPSBvdGhlclN0YXJ0RGF0ZTsKKwkJfQorCisJCS8vIEZpZ3VyZSBvdXQgd2hpY2ggZW5kIGRhdGEgaXMgeW91bmdlc3QKKwkJLy8gRG8gd2UgaGF2ZSBhbiBlbmQgZGF0ZT8KKwkJaWYgKG91ckVuZERhdGUgIT0gbnVsbCkgeworCQkJLy8gWWVzCisJCQkvLyBIb3cgYWJvdXQgdGhlIG90aGVyIGVuZCBkYXRlPworCQkJaWYgKG90aGVyRW5kRGF0ZSAhPSBudWxsKSB7CisJCQkJLy8gWWVzCisJCQkJLy8gSXMgdGhlIG90aGVyIGVuZCBkYXRlIGJlZm9yZSBvdXJzPworCQkJCWlmIChvdGhlckVuZERhdGUuYmVmb3JlKG91ckVuZERhdGUpKSB7CisJCQkJCS8vIFllcworCQkJCQluZXdFbmREYXRlID0gb3RoZXJFbmREYXRlOworCQkJCX0KKwkJCX0gLy8gaWYgdGhlIG90aGVyIGVuZCBkYXRlPworCQl9IC8vIGlmIHdlIGhhdmUgYW4gZW5kIGRhdGUKKwkJZWxzZSB7CisJCQkvLyBObworCQkJbmV3RW5kRGF0ZSA9IG90aGVyRW5kRGF0ZTsKKwkJfQorCisJCS8vIEF0IHRoaXMgcG9pbnQgdGhlIG5ld1N0YXJ0RGF0ZSBhbmQgbmV3RW5kRGF0ZSBjb3VsZCBiZSBudWxsLiBIb3dldmVyLAorCQkvLyBpZiB0aGV5IGFyZSBub3QgbnVsbCwgd2UgbmVlZCB0byBjaGVjayB0byBtYWtlIHN1cmUgdGhhdCB0aGUgc3RhcnQKKwkJLy8gY29tZXMgYmVmb3JlIHRoZSBlbmQuCisKKwkJLy8gRG8gd2UgaGF2ZSBhIG5ldyBzdGFydCBkYXRlPworCQlpZiAobmV3U3RhcnREYXRlICE9IG51bGwpIHsKKwkJCS8vIFllcworCQkJLy8gSG93IGFib3V0IHRoZSBuZXcgZW5kIGRhdGU/CisJCQlpZiAobmV3RW5kRGF0ZSAhPSBudWxsKSB7CisJCQkJLy8gWWVzCisJCQkJLy8gRG9lcyB0aGUgbmV3IHN0YXJ0IGRhdGUgY29tZSBiZWZvcmUgdGhlIG5ldyBlbmQgZGF0ZT8KKwkJCQlpZiAobmV3U3RhcnREYXRlLmJlZm9yZShuZXdFbmREYXRlKSkgeworCQkJCQkvLyBZZXMKKwkJCQkJcmV0VmFsdWUgPSBuZXcgRGF0ZVtdIHtuZXdTdGFydERhdGUsbmV3RW5kRGF0ZX07CisJCQkJfSAKKwkJCX0KKwkJfSAvLyBpZiBuZXcgc3RhcnQgZGF0ZQorCisJCXJldHVybiByZXRWYWx1ZTsKKwl9IC8vIGNvbXB1dGVWYWxpZERhdGVSYW5nZU92ZXJsYXAKKwkKKwkvKioKKwkgKiBAcGFyYW0gdmFsaWRWYWx1ZQorCSAqIEByZXR1cm4gPGNvZGU+dHJ1ZTwvY29kZT4gaWYgdGhlIGVuZCBkYXRlIGluIHRoZSB2YWxpZCBzdHJpbmcgZG9lcyBub3QKKwkgKiAgICAgICAgIGV4aXN0LCBvciBpZiBpdCBkb2VzLCBpZiBpdCBpcyBwcm9wZXJseSBmb3JtYXR0ZWQsCisJICogICAgICAgICA8Y29kZT5mYWxzZTwvY29kZT4gb3RoZXJ3aXNlLgorCSAqLworCXB1YmxpYyBzdGF0aWMgYm9vbGVhbiBpc1ZhbGlkRW5kRGF0ZVZhbGlkKGZpbmFsIFN0cmluZyB2YWxpZFZhbHVlKSB7CisJCWJvb2xlYW4gcmV0VmFsdWUgPSB0cnVlOworCQkvLyBJcyB0aGUgdmFsaWQgdmFsdWUgc2V0PworCQlpZiAodmFsaWRWYWx1ZSAhPSBudWxsKSB7CisJCQkvLyBZZXMKKwkJCXRyeSB7CisJCQkJZmluYWwgU3RyaW5nIGVuZFBhcnQgPSB2YWxpZFZhbHVlLnN1YnN0cmluZygKKwkJCQkJCSJzdGFydD15eXl5LURELW1tOyIubGVuZ3RoKCkpLnRyaW0oKTsKKwkJCQlmaW5hbCBpbnQgZGF0ZUluZGV4ID0gZW5kUGFydC5pbmRleE9mKEVORCk7CisKKwkJCQkvLyBXYXMgdGhlcmUganVzdCB3aGl0ZSBzcGFjZT8KKwkJCQlpZiAoZW5kUGFydC5lcXVhbHMoIiIpKSB7CisJCQkJCS8vIFllcworCQkJCQlyZXR1cm4gdHJ1ZTsKKwkJCQl9CisKKwkJCQkvLyBEb2VzIGl0IGVuZCB3aXRoIGEgIjsiPworCQkJCWlmICghZW5kUGFydC5lbmRzV2l0aCgiOyIpKSB7CisJCQkJCS8vIE5vCisJCQkJCXJldHVybiBmYWxzZTsKKwkJCQl9CisJCQkJCisJCQkJLy8gSXMgaXQgdGhlIHJpZ2h0IGxlbmd0aD8KKwkJCQlpZiAoZW5kUGFydC5sZW5ndGgoKSAhPSBFTkQubGVuZ3RoKCkgKyAieXl5eS1kZC1tbTsiLmxlbmd0aCgpKSB7CisJCQkJCS8vIE5vCisJCQkJCXJldHVybiBmYWxzZTsKKwkJCQl9CisJCQkJCisJCQkJLy8gSXMgdGhlIGVuZCBkYXRlIHNwZWNpZmllZD8KKwkJCQlpZiAoZGF0ZUluZGV4ID09IDApIHsKKwkJCQkJLy8gWWVzCisJCQkJCS8vIElmIHdlIHRocm93IGEgcGFyc2UgZXhjZXB0aW9uIHdlJ2xsIGNhdGNoIGl0IGJlbG93IGFuZCByZXR1cm4gZmFsc2UgCisJCQkJCWNyZWF0ZURhdGVGcm9tSVNPODYwMURhdGVTdHJpbmcoZW5kUGFydC5zdWJzdHJpbmcoIEVORC5sZW5ndGgoKSkpOworCQkJCQlyZXRWYWx1ZSA9IHRydWU7CisKKwkJCQl9IC8vIGlmCisJCQkJZWxzZSB7CisJCQkJCXJldFZhbHVlID0gZmFsc2U7CisJCQkJfQorCQkJfSBjYXRjaCAoUGFyc2VFeGNlcHRpb24gZSkgeworCQkJCXJldFZhbHVlID0gZmFsc2U7CisJCQl9IGNhdGNoIChTdHJpbmdJbmRleE91dE9mQm91bmRzRXhjZXB0aW9uIGUpIHsKKwkJCQlyZXRWYWx1ZSA9IGZhbHNlOworCQkJfQorCQl9IC8vIGlmCisJCXJldHVybiByZXRWYWx1ZTsKKwl9IC8vIGlzVmFsaWRFbmREYXRlVmFsaWQKKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5EdWJsaW5Db3JlI2dldFZhbGlkRW5kRGF0ZSgpCisJICovCisJcHVibGljIERhdGUgZ2V0VmFsaWRTdGFydERhdGUoKSB7CisJCXJldHVybiBnZXRWYWxpZFN0YXJ0RGF0ZShnZXRWYWxpZCgpKTsKKwl9IC8vIGdldFZhbGlkU3RhcnREYXRlCisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uRHVibGluQ29yZSNnZXRWYWxpZFN0YXJ0RGF0ZSgpCisJICovCisJQFN1cHByZXNzV2FybmluZ3MoIm51bGwiKQorCXB1YmxpYyBzdGF0aWMgRGF0ZSBnZXRWYWxpZFN0YXJ0RGF0ZShmaW5hbCBTdHJpbmcgdmFsaWRWYWx1ZSkgeworCQlEYXRlIHJldFZhbHVlID0gbnVsbDsKKwkJLy8gSXMgdGhlIHZhbGlkIHZhbHVlIHNldD8KKwkJaWYgKHZhbGlkVmFsdWUgIT0gbnVsbCkgeworCQkJLy8gWWVzCisJCQlmaW5hbCBpbnQgZGF0ZUluZGV4ID0gdmFsaWRWYWx1ZS5pbmRleE9mKFNUQVJUKSArIFNUQVJULmxlbmd0aCgpOworCQkJdHJ5IHsKKwkJCQlyZXRWYWx1ZSA9IGNyZWF0ZURhdGVGcm9tSVNPODYwMURhdGVTdHJpbmcodmFsaWRWYWx1ZQorCQkJCQkJLnN1YnN0cmluZyhkYXRlSW5kZXgpKTsKKwkJCX0gY2F0Y2ggKFBhcnNlRXhjZXB0aW9uIGUpIHsKKwkJCQlyZXRWYWx1ZSA9IG51bGw7CisJCQl9CisJCX0KKwkJcmV0dXJuIHJldFZhbHVlOworCX0gLy8gZ2V0VmFsaWRTdGFydERhdGUKKworCS8qKgorCSAqIEBwYXJhbSB2YWxpZFZhbHVlCisJICogQHJldHVybiA8Y29kZT50cnVlPC9jb2RlPiBpZiB0aGUgc3RhcnQgZGF0ZSBpbiB0aGUgdmFsaWQgc3RyaW5nIGV4aXN0cworCSAqICAgICAgICAgYW5kIGlzIHByb3Blcmx5IGZvcm1hdHRlZAorCSAqLworCXB1YmxpYyBzdGF0aWMgYm9vbGVhbiBpc1ZhbGlkU3RhcnREYXRlVmFsaWQoZmluYWwgU3RyaW5nIHZhbGlkVmFsdWUpIHsKKwkJYm9vbGVhbiByZXRWYWx1ZSA9IGZhbHNlOworCQkvLyBJcyB0aGUgdmFsaWQgdmFsdWUgc2V0PworCQlpZiAodmFsaWRWYWx1ZSAhPSBudWxsKSB7CisJCQkvLyBZZXMKKwkJCXRyeSB7CisJCQkJZmluYWwgU3RyaW5nIHRyaW1lZFZhbGlkVmFsdWUgPSB2YWxpZFZhbHVlLnRyaW0oKTsKKwkJCQlmaW5hbCBpbnQgZGF0ZUluZGV4ID0gdmFsaWRWYWx1ZS5pbmRleE9mKFNUQVJUKQorCQkJCQkJKyBTVEFSVC5sZW5ndGgoKTsKKwkJCQlmaW5hbCBTdHJpbmcgZXh0cmFjdGVkRGF0ZSA9IHRyaW1lZFZhbGlkVmFsdWUuc3Vic3RyaW5nKAorCQkJCQkJZGF0ZUluZGV4LCAic3RhcnQ9WVlZWS1ERC1NTTsiLmxlbmd0aCgpKTsKKwkJCQkvLyBJcyB0aGVyZSBhICI7IiBvbiB0aGUgZW5kIG9mIHRoZSBkYXRlPworCQkJCWlmICghZXh0cmFjdGVkRGF0ZS5lbmRzV2l0aCgiOyIpKSB7CisJCQkJCS8vIE5vCisJCQkJCXJldHVybiBmYWxzZTsKKwkJCQl9CisJCQkJLy8gSWYgd2UgdGhyb3cgYSBwYXJzZSBleGNlcHRpb24sIHdlJ2xsIGNhdGNoIGl0IGJlbG93IGFuZCByZXR1cm4gZmFsc2UKKwkJCQljcmVhdGVEYXRlRnJvbUlTTzg2MDFEYXRlU3RyaW5nKGV4dHJhY3RlZERhdGUpOworCQkJCXJldFZhbHVlID0gdHJ1ZTsKKwkJCX0gY2F0Y2ggKFBhcnNlRXhjZXB0aW9uIGUpIHsKKwkJCQlyZXRWYWx1ZSA9IGZhbHNlOworCQkJfSBjYXRjaCAoU3RyaW5nSW5kZXhPdXRPZkJvdW5kc0V4Y2VwdGlvbiBlKSB7CisJCQkJcmV0VmFsdWUgPSBmYWxzZTsKKwkJCX0KKwkJfQorCQlyZXR1cm4gcmV0VmFsdWU7CisJfSAvLyBpc1ZhbGlkU3RhcnREYXRlVmFsaWQKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRWYWxpZChTdHJpbmcgbmV3VmFsaWQpIHsKKwkJU3RyaW5nIG9sZFZhbGlkID0gdmFsaWQ7CisJCXZhbGlkID0gbmV3VmFsaWQ7CisJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkKKwkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIENvbW1vblBhY2thZ2UuRFVCTElOX0NPUkVfX1ZBTElELCBvbGRWYWxpZCwgdmFsaWQpKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCXB1YmxpYyBEdWJsaW5Db3JlIHBvcHVsYXRlKCkgeworCQlzZXRDcmVhdGVkKENhbGVuZGFyLmdldEluc3RhbmNlKCkuZ2V0VGltZSgpKTsKKwkJc2V0Q3JlYXRvcihTeXN0ZW0uZ2V0UHJvcGVydHkoInVzZXIubmFtZSIpKTsKKwkJcmV0dXJuIHRoaXM7CisJfSAvLyBwb3B1bGF0ZQorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvbW1vbi5EdWJsaW5Db3JlI3NldFZhbGlkKGphdmEudXRpbC5EYXRlLAorCSAqICAgICAgamF2YS51dGlsLkRhdGUpCisJICovCisJcHVibGljIHZvaWQgc2V0VmFsaWQoZmluYWwgRGF0ZSBzdGFydERhdGUsIGZpbmFsIERhdGUgZW5kRGF0ZSkgeworCQlmaW5hbCBTdHJpbmdCdWlsZGVyIHNiID0gbmV3IFN0cmluZ0J1aWxkZXIoU1RBUlQpOworCQlzYi5hcHBlbmQoY3JlYXRlSVNPODYwMURhdGVTdHJpbmcoc3RhcnREYXRlKSk7CisJCXNiLmFwcGVuZCgiOyAiKTsKKwkJc2IuYXBwZW5kKEVORCk7CisJCXNiLmFwcGVuZChjcmVhdGVJU084NjAxRGF0ZVN0cmluZyhlbmREYXRlKSk7CisJCXNiLmFwcGVuZCgiOyIpOworCQlzZXRWYWxpZChzYi50b1N0cmluZygpKTsKKwl9IC8vIHNldFZhbGlkCisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29tbW9uLkR1YmxpbkNvcmUjc2V0VmFsaWQoamF2YS51dGlsLkRhdGUpCisJICovCisJcHVibGljIHZvaWQgc2V0VmFsaWQoZmluYWwgRGF0ZSBzdGFydERhdGUpIHsKKwkJZmluYWwgU3RyaW5nQnVpbGRlciBzYiA9IG5ldyBTdHJpbmdCdWlsZGVyKFNUQVJUKTsKKwkJc2IuYXBwZW5kKGNyZWF0ZUlTTzg2MDFEYXRlU3RyaW5nKHN0YXJ0RGF0ZSkpOworCQlzYi5hcHBlbmQoIjsiKTsKKwkJc2V0VmFsaWQoc2IudG9TdHJpbmcoKSk7CisJfSAvLyBzZXRWYWxpZAorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBPYmplY3QgZUdldChpbnQgZmVhdHVyZUlELCBib29sZWFuIHJlc29sdmUsIGJvb2xlYW4gY29yZVR5cGUpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJCWNhc2UgQ29tbW9uUGFja2FnZS5EVUJMSU5fQ09SRV9fVElUTEU6CisJCQkJcmV0dXJuIGdldFRpdGxlKCk7CisJCQljYXNlIENvbW1vblBhY2thZ2UuRFVCTElOX0NPUkVfX0lERU5USUZJRVI6CisJCQkJcmV0dXJuIGdldElkZW50aWZpZXIoKTsKKwkJCWNhc2UgQ29tbW9uUGFja2FnZS5EVUJMSU5fQ09SRV9fREVTQ1JJUFRJT046CisJCQkJcmV0dXJuIGdldERlc2NyaXB0aW9uKCk7CisJCQljYXNlIENvbW1vblBhY2thZ2UuRFVCTElOX0NPUkVfX0NSRUFUT1I6CisJCQkJcmV0dXJuIGdldENyZWF0b3IoKTsKKwkJCWNhc2UgQ29tbW9uUGFja2FnZS5EVUJMSU5fQ09SRV9fREFURToKKwkJCQlyZXR1cm4gZ2V0RGF0ZSgpOworCQkJY2FzZSBDb21tb25QYWNrYWdlLkRVQkxJTl9DT1JFX19GT1JNQVQ6CisJCQkJcmV0dXJuIGdldEZvcm1hdCgpOworCQkJY2FzZSBDb21tb25QYWNrYWdlLkRVQkxJTl9DT1JFX19QVUJMSVNIRVI6CisJCQkJcmV0dXJuIGdldFB1Ymxpc2hlcigpOworCQkJY2FzZSBDb21tb25QYWNrYWdlLkRVQkxJTl9DT1JFX19DT1ZFUkFHRToKKwkJCQlyZXR1cm4gZ2V0Q292ZXJhZ2UoKTsKKwkJCWNhc2UgQ29tbW9uUGFja2FnZS5EVUJMSU5fQ09SRV9fQ09OVFJJQlVUT1I6CisJCQkJcmV0dXJuIGdldENvbnRyaWJ1dG9yKCk7CisJCQljYXNlIENvbW1vblBhY2thZ2UuRFVCTElOX0NPUkVfX1JFTEFUSU9OOgorCQkJCXJldHVybiBnZXRSZWxhdGlvbigpOworCQkJY2FzZSBDb21tb25QYWNrYWdlLkRVQkxJTl9DT1JFX19SSUdIVFM6CisJCQkJcmV0dXJuIGdldFJpZ2h0cygpOworCQkJY2FzZSBDb21tb25QYWNrYWdlLkRVQkxJTl9DT1JFX19TT1VSQ0U6CisJCQkJcmV0dXJuIGdldFNvdXJjZSgpOworCQkJY2FzZSBDb21tb25QYWNrYWdlLkRVQkxJTl9DT1JFX19TVUJKRUNUOgorCQkJCXJldHVybiBnZXRTdWJqZWN0KCk7CisJCQljYXNlIENvbW1vblBhY2thZ2UuRFVCTElOX0NPUkVfX1RZUEU6CisJCQkJcmV0dXJuIGdldFR5cGUoKTsKKwkJCWNhc2UgQ29tbW9uUGFja2FnZS5EVUJMSU5fQ09SRV9fTEFOR1VBR0U6CisJCQkJcmV0dXJuIGdldExhbmd1YWdlKCk7CisJCQljYXNlIENvbW1vblBhY2thZ2UuRFVCTElOX0NPUkVfX0JJQkxJT0dSQVBISUNfQ0lUQVRJT046CisJCQkJcmV0dXJuIGdldEJpYmxpb2dyYXBoaWNDaXRhdGlvbigpOworCQkJY2FzZSBDb21tb25QYWNrYWdlLkRVQkxJTl9DT1JFX19DUkVBVEVEOgorCQkJCXJldHVybiBnZXRDcmVhdGVkKCk7CisJCQljYXNlIENvbW1vblBhY2thZ2UuRFVCTElOX0NPUkVfX0xJQ0VOU0U6CisJCQkJcmV0dXJuIGdldExpY2Vuc2UoKTsKKwkJCWNhc2UgQ29tbW9uUGFja2FnZS5EVUJMSU5fQ09SRV9fUkVRVUlSRUQ6CisJCQkJcmV0dXJuIGdldFJlcXVpcmVkKCk7CisJCQljYXNlIENvbW1vblBhY2thZ2UuRFVCTElOX0NPUkVfX1NQQVRJQUw6CisJCQkJcmV0dXJuIGdldFNwYXRpYWwoKTsKKwkJCWNhc2UgQ29tbW9uUGFja2FnZS5EVUJMSU5fQ09SRV9fVkFMSUQ6CisJCQkJcmV0dXJuIGdldFZhbGlkKCk7CisJCX0KKwkJcmV0dXJuIHN1cGVyLmVHZXQoZmVhdHVyZUlELCByZXNvbHZlLCBjb3JlVHlwZSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGVTZXQoaW50IGZlYXR1cmVJRCwgT2JqZWN0IG5ld1ZhbHVlKSB7CisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7CisJCQljYXNlIENvbW1vblBhY2thZ2UuRFVCTElOX0NPUkVfX1RJVExFOgorCQkJCXNldFRpdGxlKChTdHJpbmcpbmV3VmFsdWUpOworCQkJCXJldHVybjsKKwkJCWNhc2UgQ29tbW9uUGFja2FnZS5EVUJMSU5fQ09SRV9fSURFTlRJRklFUjoKKwkJCQlzZXRJZGVudGlmaWVyKChTdHJpbmcpbmV3VmFsdWUpOworCQkJCXJldHVybjsKKwkJCWNhc2UgQ29tbW9uUGFja2FnZS5EVUJMSU5fQ09SRV9fREVTQ1JJUFRJT046CisJCQkJc2V0RGVzY3JpcHRpb24oKFN0cmluZyluZXdWYWx1ZSk7CisJCQkJcmV0dXJuOworCQkJY2FzZSBDb21tb25QYWNrYWdlLkRVQkxJTl9DT1JFX19DUkVBVE9SOgorCQkJCXNldENyZWF0b3IoKFN0cmluZyluZXdWYWx1ZSk7CisJCQkJcmV0dXJuOworCQkJY2FzZSBDb21tb25QYWNrYWdlLkRVQkxJTl9DT1JFX19EQVRFOgorCQkJCXNldERhdGUoKFN0cmluZyluZXdWYWx1ZSk7CisJCQkJcmV0dXJuOworCQkJY2FzZSBDb21tb25QYWNrYWdlLkRVQkxJTl9DT1JFX19GT1JNQVQ6CisJCQkJc2V0Rm9ybWF0KChTdHJpbmcpbmV3VmFsdWUpOworCQkJCXJldHVybjsKKwkJCWNhc2UgQ29tbW9uUGFja2FnZS5EVUJMSU5fQ09SRV9fUFVCTElTSEVSOgorCQkJCXNldFB1Ymxpc2hlcigoU3RyaW5nKW5ld1ZhbHVlKTsKKwkJCQlyZXR1cm47CisJCQljYXNlIENvbW1vblBhY2thZ2UuRFVCTElOX0NPUkVfX0NPVkVSQUdFOgorCQkJCXNldENvdmVyYWdlKChTdHJpbmcpbmV3VmFsdWUpOworCQkJCXJldHVybjsKKwkJCWNhc2UgQ29tbW9uUGFja2FnZS5EVUJMSU5fQ09SRV9fQ09OVFJJQlVUT1I6CisJCQkJc2V0Q29udHJpYnV0b3IoKFN0cmluZyluZXdWYWx1ZSk7CisJCQkJcmV0dXJuOworCQkJY2FzZSBDb21tb25QYWNrYWdlLkRVQkxJTl9DT1JFX19SRUxBVElPTjoKKwkJCQlzZXRSZWxhdGlvbigoU3RyaW5nKW5ld1ZhbHVlKTsKKwkJCQlyZXR1cm47CisJCQljYXNlIENvbW1vblBhY2thZ2UuRFVCTElOX0NPUkVfX1JJR0hUUzoKKwkJCQlzZXRSaWdodHMoKFN0cmluZyluZXdWYWx1ZSk7CisJCQkJcmV0dXJuOworCQkJY2FzZSBDb21tb25QYWNrYWdlLkRVQkxJTl9DT1JFX19TT1VSQ0U6CisJCQkJc2V0U291cmNlKChTdHJpbmcpbmV3VmFsdWUpOworCQkJCXJldHVybjsKKwkJCWNhc2UgQ29tbW9uUGFja2FnZS5EVUJMSU5fQ09SRV9fU1VCSkVDVDoKKwkJCQlzZXRTdWJqZWN0KChTdHJpbmcpbmV3VmFsdWUpOworCQkJCXJldHVybjsKKwkJCWNhc2UgQ29tbW9uUGFja2FnZS5EVUJMSU5fQ09SRV9fVFlQRToKKwkJCQlzZXRUeXBlKChTdHJpbmcpbmV3VmFsdWUpOworCQkJCXJldHVybjsKKwkJCWNhc2UgQ29tbW9uUGFja2FnZS5EVUJMSU5fQ09SRV9fTEFOR1VBR0U6CisJCQkJc2V0TGFuZ3VhZ2UoKFN0cmluZyluZXdWYWx1ZSk7CisJCQkJcmV0dXJuOworCQkJY2FzZSBDb21tb25QYWNrYWdlLkRVQkxJTl9DT1JFX19CSUJMSU9HUkFQSElDX0NJVEFUSU9OOgorCQkJCXNldEJpYmxpb2dyYXBoaWNDaXRhdGlvbigoU3RyaW5nKW5ld1ZhbHVlKTsKKwkJCQlyZXR1cm47CisJCQljYXNlIENvbW1vblBhY2thZ2UuRFVCTElOX0NPUkVfX0NSRUFURUQ6CisJCQkJc2V0Q3JlYXRlZCgoU3RyaW5nKW5ld1ZhbHVlKTsKKwkJCQlyZXR1cm47CisJCQljYXNlIENvbW1vblBhY2thZ2UuRFVCTElOX0NPUkVfX0xJQ0VOU0U6CisJCQkJc2V0TGljZW5zZSgoU3RyaW5nKW5ld1ZhbHVlKTsKKwkJCQlyZXR1cm47CisJCQljYXNlIENvbW1vblBhY2thZ2UuRFVCTElOX0NPUkVfX1JFUVVJUkVEOgorCQkJCXNldFJlcXVpcmVkKChTdHJpbmcpbmV3VmFsdWUpOworCQkJCXJldHVybjsKKwkJCWNhc2UgQ29tbW9uUGFja2FnZS5EVUJMSU5fQ09SRV9fU1BBVElBTDoKKwkJCQlzZXRTcGF0aWFsKChTdHJpbmcpbmV3VmFsdWUpOworCQkJCXJldHVybjsKKwkJCWNhc2UgQ29tbW9uUGFja2FnZS5EVUJMSU5fQ09SRV9fVkFMSUQ6CisJCQkJc2V0VmFsaWQoKFN0cmluZyluZXdWYWx1ZSk7CisJCQkJcmV0dXJuOworCQl9CisJCXN1cGVyLmVTZXQoZmVhdHVyZUlELCBuZXdWYWx1ZSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGVVbnNldChpbnQgZmVhdHVyZUlEKSB7CisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7CisJCQljYXNlIENvbW1vblBhY2thZ2UuRFVCTElOX0NPUkVfX1RJVExFOgorCQkJCXNldFRpdGxlKFRJVExFX0VERUZBVUxUKTsKKwkJCQlyZXR1cm47CisJCQljYXNlIENvbW1vblBhY2thZ2UuRFVCTElOX0NPUkVfX0lERU5USUZJRVI6CisJCQkJc2V0SWRlbnRpZmllcihJREVOVElGSUVSX0VERUZBVUxUKTsKKwkJCQlyZXR1cm47CisJCQljYXNlIENvbW1vblBhY2thZ2UuRFVCTElOX0NPUkVfX0RFU0NSSVBUSU9OOgorCQkJCXNldERlc2NyaXB0aW9uKERFU0NSSVBUSU9OX0VERUZBVUxUKTsKKwkJCQlyZXR1cm47CisJCQljYXNlIENvbW1vblBhY2thZ2UuRFVCTElOX0NPUkVfX0NSRUFUT1I6CisJCQkJc2V0Q3JlYXRvcihDUkVBVE9SX0VERUZBVUxUKTsKKwkJCQlyZXR1cm47CisJCQljYXNlIENvbW1vblBhY2thZ2UuRFVCTElOX0NPUkVfX0RBVEU6CisJCQkJc2V0RGF0ZShEQVRFX0VERUZBVUxUKTsKKwkJCQlyZXR1cm47CisJCQljYXNlIENvbW1vblBhY2thZ2UuRFVCTElOX0NPUkVfX0ZPUk1BVDoKKwkJCQlzZXRGb3JtYXQoRk9STUFUX0VERUZBVUxUKTsKKwkJCQlyZXR1cm47CisJCQljYXNlIENvbW1vblBhY2thZ2UuRFVCTElOX0NPUkVfX1BVQkxJU0hFUjoKKwkJCQlzZXRQdWJsaXNoZXIoUFVCTElTSEVSX0VERUZBVUxUKTsKKwkJCQlyZXR1cm47CisJCQljYXNlIENvbW1vblBhY2thZ2UuRFVCTElOX0NPUkVfX0NPVkVSQUdFOgorCQkJCXNldENvdmVyYWdlKENPVkVSQUdFX0VERUZBVUxUKTsKKwkJCQlyZXR1cm47CisJCQljYXNlIENvbW1vblBhY2thZ2UuRFVCTElOX0NPUkVfX0NPTlRSSUJVVE9SOgorCQkJCXNldENvbnRyaWJ1dG9yKENPTlRSSUJVVE9SX0VERUZBVUxUKTsKKwkJCQlyZXR1cm47CisJCQljYXNlIENvbW1vblBhY2thZ2UuRFVCTElOX0NPUkVfX1JFTEFUSU9OOgorCQkJCXNldFJlbGF0aW9uKFJFTEFUSU9OX0VERUZBVUxUKTsKKwkJCQlyZXR1cm47CisJCQljYXNlIENvbW1vblBhY2thZ2UuRFVCTElOX0NPUkVfX1JJR0hUUzoKKwkJCQlzZXRSaWdodHMoUklHSFRTX0VERUZBVUxUKTsKKwkJCQlyZXR1cm47CisJCQljYXNlIENvbW1vblBhY2thZ2UuRFVCTElOX0NPUkVfX1NPVVJDRToKKwkJCQlzZXRTb3VyY2UoU09VUkNFX0VERUZBVUxUKTsKKwkJCQlyZXR1cm47CisJCQljYXNlIENvbW1vblBhY2thZ2UuRFVCTElOX0NPUkVfX1NVQkpFQ1Q6CisJCQkJc2V0U3ViamVjdChTVUJKRUNUX0VERUZBVUxUKTsKKwkJCQlyZXR1cm47CisJCQljYXNlIENvbW1vblBhY2thZ2UuRFVCTElOX0NPUkVfX1RZUEU6CisJCQkJc2V0VHlwZShUWVBFX0VERUZBVUxUKTsKKwkJCQlyZXR1cm47CisJCQljYXNlIENvbW1vblBhY2thZ2UuRFVCTElOX0NPUkVfX0xBTkdVQUdFOgorCQkJCXNldExhbmd1YWdlKExBTkdVQUdFX0VERUZBVUxUKTsKKwkJCQlyZXR1cm47CisJCQljYXNlIENvbW1vblBhY2thZ2UuRFVCTElOX0NPUkVfX0JJQkxJT0dSQVBISUNfQ0lUQVRJT046CisJCQkJc2V0QmlibGlvZ3JhcGhpY0NpdGF0aW9uKEJJQkxJT0dSQVBISUNfQ0lUQVRJT05fRURFRkFVTFQpOworCQkJCXJldHVybjsKKwkJCWNhc2UgQ29tbW9uUGFja2FnZS5EVUJMSU5fQ09SRV9fQ1JFQVRFRDoKKwkJCQlzZXRDcmVhdGVkKENSRUFURURfRURFRkFVTFQpOworCQkJCXJldHVybjsKKwkJCWNhc2UgQ29tbW9uUGFja2FnZS5EVUJMSU5fQ09SRV9fTElDRU5TRToKKwkJCQlzZXRMaWNlbnNlKExJQ0VOU0VfRURFRkFVTFQpOworCQkJCXJldHVybjsKKwkJCWNhc2UgQ29tbW9uUGFja2FnZS5EVUJMSU5fQ09SRV9fUkVRVUlSRUQ6CisJCQkJc2V0UmVxdWlyZWQoUkVRVUlSRURfRURFRkFVTFQpOworCQkJCXJldHVybjsKKwkJCWNhc2UgQ29tbW9uUGFja2FnZS5EVUJMSU5fQ09SRV9fU1BBVElBTDoKKwkJCQlzZXRTcGF0aWFsKFNQQVRJQUxfRURFRkFVTFQpOworCQkJCXJldHVybjsKKwkJCWNhc2UgQ29tbW9uUGFja2FnZS5EVUJMSU5fQ09SRV9fVkFMSUQ6CisJCQkJc2V0VmFsaWQoVkFMSURfRURFRkFVTFQpOworCQkJCXJldHVybjsKKwkJfQorCQlzdXBlci5lVW5zZXQoZmVhdHVyZUlEKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIGJvb2xlYW4gZUlzU2V0KGludCBmZWF0dXJlSUQpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJCWNhc2UgQ29tbW9uUGFja2FnZS5EVUJMSU5fQ09SRV9fVElUTEU6CisJCQkJcmV0dXJuIFRJVExFX0VERUZBVUxUID09IG51bGwgPyB0aXRsZSAhPSBudWxsIDogIVRJVExFX0VERUZBVUxULmVxdWFscyh0aXRsZSk7CisJCQljYXNlIENvbW1vblBhY2thZ2UuRFVCTElOX0NPUkVfX0lERU5USUZJRVI6CisJCQkJcmV0dXJuIElERU5USUZJRVJfRURFRkFVTFQgPT0gbnVsbCA/IGlkZW50aWZpZXIgIT0gbnVsbCA6ICFJREVOVElGSUVSX0VERUZBVUxULmVxdWFscyhpZGVudGlmaWVyKTsKKwkJCWNhc2UgQ29tbW9uUGFja2FnZS5EVUJMSU5fQ09SRV9fREVTQ1JJUFRJT046CisJCQkJcmV0dXJuIERFU0NSSVBUSU9OX0VERUZBVUxUID09IG51bGwgPyBkZXNjcmlwdGlvbiAhPSBudWxsIDogIURFU0NSSVBUSU9OX0VERUZBVUxULmVxdWFscyhkZXNjcmlwdGlvbik7CisJCQljYXNlIENvbW1vblBhY2thZ2UuRFVCTElOX0NPUkVfX0NSRUFUT1I6CisJCQkJcmV0dXJuIENSRUFUT1JfRURFRkFVTFQgPT0gbnVsbCA/IGNyZWF0b3IgIT0gbnVsbCA6ICFDUkVBVE9SX0VERUZBVUxULmVxdWFscyhjcmVhdG9yKTsKKwkJCWNhc2UgQ29tbW9uUGFja2FnZS5EVUJMSU5fQ09SRV9fREFURToKKwkJCQlyZXR1cm4gREFURV9FREVGQVVMVCA9PSBudWxsID8gZGF0ZSAhPSBudWxsIDogIURBVEVfRURFRkFVTFQuZXF1YWxzKGRhdGUpOworCQkJY2FzZSBDb21tb25QYWNrYWdlLkRVQkxJTl9DT1JFX19GT1JNQVQ6CisJCQkJcmV0dXJuIEZPUk1BVF9FREVGQVVMVCA9PSBudWxsID8gZm9ybWF0ICE9IG51bGwgOiAhRk9STUFUX0VERUZBVUxULmVxdWFscyhmb3JtYXQpOworCQkJY2FzZSBDb21tb25QYWNrYWdlLkRVQkxJTl9DT1JFX19QVUJMSVNIRVI6CisJCQkJcmV0dXJuIFBVQkxJU0hFUl9FREVGQVVMVCA9PSBudWxsID8gcHVibGlzaGVyICE9IG51bGwgOiAhUFVCTElTSEVSX0VERUZBVUxULmVxdWFscyhwdWJsaXNoZXIpOworCQkJY2FzZSBDb21tb25QYWNrYWdlLkRVQkxJTl9DT1JFX19DT1ZFUkFHRToKKwkJCQlyZXR1cm4gQ09WRVJBR0VfRURFRkFVTFQgPT0gbnVsbCA/IGNvdmVyYWdlICE9IG51bGwgOiAhQ09WRVJBR0VfRURFRkFVTFQuZXF1YWxzKGNvdmVyYWdlKTsKKwkJCWNhc2UgQ29tbW9uUGFja2FnZS5EVUJMSU5fQ09SRV9fQ09OVFJJQlVUT1I6CisJCQkJcmV0dXJuIENPTlRSSUJVVE9SX0VERUZBVUxUID09IG51bGwgPyBjb250cmlidXRvciAhPSBudWxsIDogIUNPTlRSSUJVVE9SX0VERUZBVUxULmVxdWFscyhjb250cmlidXRvcik7CisJCQljYXNlIENvbW1vblBhY2thZ2UuRFVCTElOX0NPUkVfX1JFTEFUSU9OOgorCQkJCXJldHVybiBSRUxBVElPTl9FREVGQVVMVCA9PSBudWxsID8gcmVsYXRpb24gIT0gbnVsbCA6ICFSRUxBVElPTl9FREVGQVVMVC5lcXVhbHMocmVsYXRpb24pOworCQkJY2FzZSBDb21tb25QYWNrYWdlLkRVQkxJTl9DT1JFX19SSUdIVFM6CisJCQkJcmV0dXJuIFJJR0hUU19FREVGQVVMVCA9PSBudWxsID8gcmlnaHRzICE9IG51bGwgOiAhUklHSFRTX0VERUZBVUxULmVxdWFscyhyaWdodHMpOworCQkJY2FzZSBDb21tb25QYWNrYWdlLkRVQkxJTl9DT1JFX19TT1VSQ0U6CisJCQkJcmV0dXJuIFNPVVJDRV9FREVGQVVMVCA9PSBudWxsID8gc291cmNlICE9IG51bGwgOiAhU09VUkNFX0VERUZBVUxULmVxdWFscyhzb3VyY2UpOworCQkJY2FzZSBDb21tb25QYWNrYWdlLkRVQkxJTl9DT1JFX19TVUJKRUNUOgorCQkJCXJldHVybiBTVUJKRUNUX0VERUZBVUxUID09IG51bGwgPyBzdWJqZWN0ICE9IG51bGwgOiAhU1VCSkVDVF9FREVGQVVMVC5lcXVhbHMoc3ViamVjdCk7CisJCQljYXNlIENvbW1vblBhY2thZ2UuRFVCTElOX0NPUkVfX1RZUEU6CisJCQkJcmV0dXJuIFRZUEVfRURFRkFVTFQgPT0gbnVsbCA/IHR5cGUgIT0gbnVsbCA6ICFUWVBFX0VERUZBVUxULmVxdWFscyh0eXBlKTsKKwkJCWNhc2UgQ29tbW9uUGFja2FnZS5EVUJMSU5fQ09SRV9fTEFOR1VBR0U6CisJCQkJcmV0dXJuIExBTkdVQUdFX0VERUZBVUxUID09IG51bGwgPyBsYW5ndWFnZSAhPSBudWxsIDogIUxBTkdVQUdFX0VERUZBVUxULmVxdWFscyhsYW5ndWFnZSk7CisJCQljYXNlIENvbW1vblBhY2thZ2UuRFVCTElOX0NPUkVfX0JJQkxJT0dSQVBISUNfQ0lUQVRJT046CisJCQkJcmV0dXJuIEJJQkxJT0dSQVBISUNfQ0lUQVRJT05fRURFRkFVTFQgPT0gbnVsbCA/IGJpYmxpb2dyYXBoaWNDaXRhdGlvbiAhPSBudWxsIDogIUJJQkxJT0dSQVBISUNfQ0lUQVRJT05fRURFRkFVTFQuZXF1YWxzKGJpYmxpb2dyYXBoaWNDaXRhdGlvbik7CisJCQljYXNlIENvbW1vblBhY2thZ2UuRFVCTElOX0NPUkVfX0NSRUFURUQ6CisJCQkJcmV0dXJuIENSRUFURURfRURFRkFVTFQgPT0gbnVsbCA/IGNyZWF0ZWQgIT0gbnVsbCA6ICFDUkVBVEVEX0VERUZBVUxULmVxdWFscyhjcmVhdGVkKTsKKwkJCWNhc2UgQ29tbW9uUGFja2FnZS5EVUJMSU5fQ09SRV9fTElDRU5TRToKKwkJCQlyZXR1cm4gTElDRU5TRV9FREVGQVVMVCA9PSBudWxsID8gbGljZW5zZSAhPSBudWxsIDogIUxJQ0VOU0VfRURFRkFVTFQuZXF1YWxzKGxpY2Vuc2UpOworCQkJY2FzZSBDb21tb25QYWNrYWdlLkRVQkxJTl9DT1JFX19SRVFVSVJFRDoKKwkJCQlyZXR1cm4gUkVRVUlSRURfRURFRkFVTFQgPT0gbnVsbCA/IHJlcXVpcmVkICE9IG51bGwgOiAhUkVRVUlSRURfRURFRkFVTFQuZXF1YWxzKHJlcXVpcmVkKTsKKwkJCWNhc2UgQ29tbW9uUGFja2FnZS5EVUJMSU5fQ09SRV9fU1BBVElBTDoKKwkJCQlyZXR1cm4gU1BBVElBTF9FREVGQVVMVCA9PSBudWxsID8gc3BhdGlhbCAhPSBudWxsIDogIVNQQVRJQUxfRURFRkFVTFQuZXF1YWxzKHNwYXRpYWwpOworCQkJY2FzZSBDb21tb25QYWNrYWdlLkRVQkxJTl9DT1JFX19WQUxJRDoKKwkJCQlyZXR1cm4gVkFMSURfRURFRkFVTFQgPT0gbnVsbCA/IHZhbGlkICE9IG51bGwgOiAhVkFMSURfRURFRkFVTFQuZXF1YWxzKHZhbGlkKTsKKwkJfQorCQlyZXR1cm4gc3VwZXIuZUlzU2V0KGZlYXR1cmVJRCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogCisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkgeworCQlpZiAoZUlzUHJveHkoKSkKKwkJCXJldHVybiBzdXBlci50b1N0cmluZygpOworCisJCWZpbmFsIFN0cmluZ0J1aWxkZXIgcmVzdWx0ID0gbmV3IFN0cmluZ0J1aWxkZXIoKTsKKwkJaWYgKGdldElkZW50aWZpZXIoKSAhPSBudWxsICYmICFnZXRJZGVudGlmaWVyKCkuZXF1YWxzKCIiKSkgeworCQkJcmVzdWx0LmFwcGVuZCgiaWRlbnRpZmllcj1cIiIpOworCQkJcmVzdWx0LmFwcGVuZChnZXRJZGVudGlmaWVyKCkudHJpbSgpKTsKKwkJCXJlc3VsdC5hcHBlbmQoIlwiICIpOworCQl9CisJCWlmIChnZXRUeXBlKCkgIT0gbnVsbCAmJiAhZ2V0VHlwZSgpLmVxdWFscygiIikpIHsKKwkJCXJlc3VsdC5hcHBlbmQoInR5cGU9XCIiKTsKKwkJCXJlc3VsdC5hcHBlbmQoZ2V0VHlwZSgpLnRyaW0oKSk7CisJCQlyZXN1bHQuYXBwZW5kKCJcIiAiKTsKKwkJfQorCQlpZiAoZ2V0VGl0bGUoKSAhPSBudWxsICYmICFnZXRUaXRsZSgpLmVxdWFscygiIikpIHsKKwkJCXJlc3VsdC5hcHBlbmQoInRpdGxlPVwiIik7CisJCQlyZXN1bHQuYXBwZW5kKGdldFRpdGxlKCkudHJpbSgpKTsKKwkJCXJlc3VsdC5hcHBlbmQoIlwiICIpOworCQl9CisKKwkJaWYgKGdldENyZWF0b3IoKSAhPSBudWxsICYmICFnZXRDcmVhdG9yKCkuZXF1YWxzKCIiKSkgeworCQkJcmVzdWx0LmFwcGVuZCgiY3JlYXRvcj1cIiIpOworCQkJcmVzdWx0LmFwcGVuZChnZXRDcmVhdG9yKCkudHJpbSgpKTsKKwkJCXJlc3VsdC5hcHBlbmQoIlwiICIpOworCQl9CisJCWlmIChnZXRTdWJqZWN0KCkgIT0gbnVsbCAmJiAhZ2V0U3ViamVjdCgpLmVxdWFscygiIikpIHsKKwkJCXJlc3VsdC5hcHBlbmQoInN1YmplY3Q9XCIiKTsKKwkJCXJlc3VsdC5hcHBlbmQoZ2V0U3ViamVjdCgpLnRyaW0oKSk7CisJCQlyZXN1bHQuYXBwZW5kKCJcIiAiKTsKKwkJfQorCQlpZiAoZ2V0RGVzY3JpcHRpb24oKSAhPSBudWxsICYmICFnZXREZXNjcmlwdGlvbigpLmVxdWFscygiIikpIHsKKwkJCXJlc3VsdC5hcHBlbmQoImRlc2NyaXB0aW9uPVwiIik7CisJCQlyZXN1bHQuYXBwZW5kKGdldERlc2NyaXB0aW9uKCkudHJpbSgpKTsKKwkJCXJlc3VsdC5hcHBlbmQoIlwiICIpOworCQl9CisKKwkJaWYgKGdldFB1Ymxpc2hlcigpICE9IG51bGwgJiYgIWdldFB1Ymxpc2hlcigpLmVxdWFscygiIikpIHsKKwkJCXJlc3VsdC5hcHBlbmQoInB1Ymxpc2hlcj1cIiIpOworCQkJcmVzdWx0LmFwcGVuZChnZXRQdWJsaXNoZXIoKS50cmltKCkpOworCQkJcmVzdWx0LmFwcGVuZCgiXCIgIik7CisJCX0KKwkJaWYgKGdldENvbnRyaWJ1dG9yKCkgIT0gbnVsbCAmJiAhZ2V0Q29udHJpYnV0b3IoKS5lcXVhbHMoIiIpKSB7CisJCQlyZXN1bHQuYXBwZW5kKCJjb250cmlidXRvcj1cIiIpOworCQkJcmVzdWx0LmFwcGVuZChnZXRDb250cmlidXRvcigpLnRyaW0oKSk7CisJCQlyZXN1bHQuYXBwZW5kKCJcIiAiKTsKKwkJfQorCQlpZiAoZ2V0RGF0ZSgpICE9IG51bGwgJiYgIWdldERhdGUoKS5lcXVhbHMoIiIpKSB7CisJCQlyZXN1bHQuYXBwZW5kKCJkYXRlPVwiIik7CisJCQlyZXN1bHQuYXBwZW5kKGdldERhdGUoKS50cmltKCkpOworCQkJcmVzdWx0LmFwcGVuZCgiXCIgIik7CisJCX0KKworCQlpZiAoZ2V0Rm9ybWF0KCkgIT0gbnVsbCAmJiAhZ2V0Rm9ybWF0KCkuZXF1YWxzKCIiKSkgeworCQkJcmVzdWx0LmFwcGVuZCgiZm9ybWF0PVwiIik7CisJCQlyZXN1bHQuYXBwZW5kKGdldEZvcm1hdCgpLnRyaW0oKSk7CisJCQlyZXN1bHQuYXBwZW5kKCJcIiAiKTsKKwkJfQorCisJCWlmIChnZXRTb3VyY2UoKSAhPSBudWxsICYmICFnZXRTb3VyY2UoKS5lcXVhbHMoIiIpKSB7CisJCQlyZXN1bHQuYXBwZW5kKCJzb3VyY2U9XCIiKTsKKwkJCXJlc3VsdC5hcHBlbmQoZ2V0U291cmNlKCkudHJpbSgpKTsKKwkJCXJlc3VsdC5hcHBlbmQoIlwiICIpOworCQl9CisJCWlmIChnZXRMYW5ndWFnZSgpICE9IG51bGwgJiYgIWdldExhbmd1YWdlKCkuZXF1YWxzKCIiKSkgeworCQkJcmVzdWx0LmFwcGVuZCgibGFuZ3VhZ2U9XCIiKTsKKwkJCXJlc3VsdC5hcHBlbmQoZ2V0TGFuZ3VhZ2UoKS50cmltKCkpOworCQkJcmVzdWx0LmFwcGVuZCgiXCIgIik7CisJCX0KKwkJaWYgKGdldFJlbGF0aW9uKCkgIT0gbnVsbCAmJiAhZ2V0UmVsYXRpb24oKS5lcXVhbHMoIiIpKSB7CisJCQlyZXN1bHQuYXBwZW5kKCJyZWxhdGlvbj1cIiIpOworCQkJcmVzdWx0LmFwcGVuZChnZXRSZWxhdGlvbigpLnRyaW0oKSk7CisJCQlyZXN1bHQuYXBwZW5kKCJcIiAiKTsKKwkJfQorCQlpZiAoZ2V0Q292ZXJhZ2UoKSAhPSBudWxsICYmICFnZXRDb3ZlcmFnZSgpLmVxdWFscygiIikpIHsKKwkJCXJlc3VsdC5hcHBlbmQoImNvdmVyYWdlPVwiIik7CisJCQlyZXN1bHQuYXBwZW5kKGdldENvdmVyYWdlKCkudHJpbSgpKTsKKwkJCXJlc3VsdC5hcHBlbmQoIlwiICIpOworCQl9CisJCWlmIChnZXRSaWdodHMoKSAhPSBudWxsICYmICFnZXRSaWdodHMoKS5lcXVhbHMoIiIpKSB7CisJCQlyZXN1bHQuYXBwZW5kKCJyaWdodHM9XCIiKTsKKwkJCXJlc3VsdC5hcHBlbmQoZ2V0UmlnaHRzKCkudHJpbSgpKTsKKwkJCXJlc3VsdC5hcHBlbmQoIlwiICIpOworCQl9CisJCWlmIChnZXRCaWJsaW9ncmFwaGljQ2l0YXRpb24oKSAhPSBudWxsICYmICFnZXRCaWJsaW9ncmFwaGljQ2l0YXRpb24oKS5lcXVhbHMoIiIpKSB7CisJCQlyZXN1bHQuYXBwZW5kKCJiaWJsaW9ncmFwaGljQ2l0YXRpb249XCIiKTsKKwkJCXJlc3VsdC5hcHBlbmQoZ2V0QmlibGlvZ3JhcGhpY0NpdGF0aW9uKCkudHJpbSgpKTsKKwkJCXJlc3VsdC5hcHBlbmQoIlwiICIpOworCQl9CisJCWlmIChnZXRDcmVhdGVkKCkgIT0gbnVsbCAmJiAhZ2V0Q3JlYXRlZCgpLmVxdWFscygiIikpIHsKKwkJCXJlc3VsdC5hcHBlbmQoImNyZWF0ZWQ9XCIiKTsKKwkJCXJlc3VsdC5hcHBlbmQoZ2V0Q3JlYXRlZCgpLnRyaW0oKSk7CisJCQlyZXN1bHQuYXBwZW5kKCJcIiAiKTsKKwkJfQorCQlpZiAoZ2V0TGljZW5zZSgpICE9IG51bGwgJiYgIWdldExpY2Vuc2UoKS5lcXVhbHMoIiIpKSB7CisJCQlyZXN1bHQuYXBwZW5kKCJsaWNlbnNlPVwiIik7CisJCQlyZXN1bHQuYXBwZW5kKGdldExpY2Vuc2UoKS50cmltKCkpOworCQkJcmVzdWx0LmFwcGVuZCgiXCIgIik7CisJCX0KKwkJaWYgKGdldFJlcXVpcmVkKCkgIT0gbnVsbCAmJiAhZ2V0UmVxdWlyZWQoKS5lcXVhbHMoIiIpKSB7CisJCQlyZXN1bHQuYXBwZW5kKCJyZXF1aXJlZD1cIiIpOworCQkJcmVzdWx0LmFwcGVuZChnZXRSZXF1aXJlZCgpLnRyaW0oKSk7CisJCQlyZXN1bHQuYXBwZW5kKCJcIiAiKTsKKwkJfQorCQlpZiAoZ2V0U3BhdGlhbCgpICE9IG51bGwgJiYgIWdldFNwYXRpYWwoKS5lcXVhbHMoIiIpKSB7CisJCQlyZXN1bHQuYXBwZW5kKCJzcGF0aWFsPVwiIik7CisJCQlyZXN1bHQuYXBwZW5kKGdldFNwYXRpYWwoKS50cmltKCkpOworCQkJcmVzdWx0LmFwcGVuZCgiXCIgIik7CisJCX0KKwkJaWYgKGdldFZhbGlkKCkgIT0gbnVsbCAmJiAhZ2V0VmFsaWQoKS5lcXVhbHMoIiIpKSB7CisJCQlyZXN1bHQuYXBwZW5kKCJ2YWxpZD1cIiIpOworCQkJcmVzdWx0LmFwcGVuZChnZXRWYWxpZCgpLnRyaW0oKSk7CisJCQlyZXN1bHQuYXBwZW5kKCJcIiAiKTsKKwkJfQorCisJCXJldHVybiByZXN1bHQudG9TdHJpbmcoKTsKKwl9IC8vIHRvU3RyaW5nCisKKwkvKioKKwkgKiBDcmVhdGUgYSBkYXRlIHN0cmluZyB0aGF0IGNvbmZvcm1zIHRvIElTTyZuYnNwOzg2MDEgPGEKKwkgKiBocmVmPSJodHRwOi8vd3d3LnczLm9yZy9UUi9OT1RFLWRhdGV0aW1lIj4KKwkgKiBodHRwOi8vd3d3LnczLm9yZy9UUi9OT1RFLWRhdGV0aW1lPC9hPi4KKwkgKiA8dWw+CisJICogPGxpPkV4YW1wbGU6PC9saT4KKwkgKiAyMDA2LTAzLTI5CisJICogPC91bD4KKwkgKiAKKwkgKiBAc2VlICNnZXREYXRlKCkKKwkgKiBAc2VlICNnZXRDcmVhdGVkKCkKKwkgKiBAc2VlICNnZXRWYWxpZCgpCisJICovCisJcHVibGljIHN0YXRpYyBTdHJpbmcgY3JlYXRlSVNPODYwMURhdGVTdHJpbmcoZmluYWwgRGF0ZSBkYXRlKSB7CisJCXJldHVybiAobmV3IFNpbXBsZURhdGVGb3JtYXQoInl5eXktTU0tZGQiKSkuZm9ybWF0KGRhdGUpOworCX0gLy8gY3JlYXRlSVNPODYwMURhdGVTdHJpbmcKKworCS8qKgorCSAqIENyZWF0ZSBhIERhdGUgZnJvbSBhIHN0cmluZyB0aGF0IGNvbmZvcm1zIHRvIElTTyZuYnNwOzg2MDEgPGEKKwkgKiBocmVmPSJodHRwOi8vd3d3LnczLm9yZy9UUi9OT1RFLWRhdGV0aW1lIj4KKwkgKiBodHRwOi8vd3d3LnczLm9yZy9UUi9OT1RFLWRhdGV0aW1lPC9hPi4KKwkgKiA8dWw+CisJICogPGxpPkV4YW1wbGU6PC9saT4KKwkgKiAyMDA2LTAzLTI5CisJICogPC91bD4KKwkgKiAKKwkgKiBAdGhyb3dzIFBhcnNlRXhjZXB0aW9uCisJICogICAgICAgICAgICAgaWYgdGhlIGRhdGUgc3RyaW5nIGlzIG5vdCBvZiB0aGUgZm9ybWF0ICJ5eXl5LU1NLWRkIgorCSAqIEBzZWUgI2dldERhdGUoKQorCSAqIEBzZWUgI2dldENyZWF0ZWQoKQorCSAqIEBzZWUgI2dldFZhbGlkKCkKKwkgKi8KKwlwdWJsaWMgc3RhdGljIERhdGUgY3JlYXRlRGF0ZUZyb21JU084NjAxRGF0ZVN0cmluZygKKwkJCWZpbmFsIFN0cmluZyBpc284NjAxRGF0ZVN0cmluZykgdGhyb3dzIFBhcnNlRXhjZXB0aW9uIHsKKwkJcmV0dXJuIChuZXcgU2ltcGxlRGF0ZUZvcm1hdCgieXl5eS1NTS1kZCIpKS5wYXJzZShpc284NjAxRGF0ZVN0cmluZyk7CisJfSAvLyBjcmVhdGVEYXRlRnJvbUlTTzg2MDFEYXRlU3RyaW5nCisKK30gLy8gRHVibGluQ29yZUltcGwKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvY29tbW9uL2ltcGwvSWRlbnRpZmlhYmxlRmlsdGVySW1wbC5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9jb21tb24vaW1wbC9JZGVudGlmaWFibGVGaWx0ZXJJbXBsLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODNhNzIxNgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvY29tbW9uL2ltcGwvSWRlbnRpZmlhYmxlRmlsdGVySW1wbC5qYXZhCkBAIC0wLDAgKzEsMTY4IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uaW1wbDsKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTAgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuU3RyaW5nVG9rZW5pemVyOworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLkVNYXA7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlVSSTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5pbXBsLkVPYmplY3RJbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uQ29tbW9uUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLklkZW50aWZpYWJsZUZpbHRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguRWRnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguTGFiZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLk5vZGU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLk5vZGVMYWJlbDsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPklkZW50aWZpYWJsZSBGaWx0ZXI8L2I+PC9lbT4nLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiA8cD4KKyAqIDwvcD4KKyAqCisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBJZGVudGlmaWFibGVGaWx0ZXJJbXBsIGV4dGVuZHMgRU9iamVjdEltcGwgaW1wbGVtZW50cyBJZGVudGlmaWFibGVGaWx0ZXIgeworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBJZGVudGlmaWFibGVGaWx0ZXJJbXBsKCkgeworCQlzdXBlcigpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCBFQ2xhc3MgZVN0YXRpY0NsYXNzKCkgeworCQlyZXR1cm4gQ29tbW9uUGFja2FnZS5MaXRlcmFscy5JREVOVElGSUFCTEVfRklMVEVSOworCX0KKworCXByaXZhdGUgU3RyaW5nIFtdcGF0dGVybnM7CisJcHVibGljIElkZW50aWZpYWJsZUZpbHRlckltcGwoU3RyaW5nIGZpbHRlcikgeworCQlpZihmaWx0ZXIgPT0gbnVsbClyZXR1cm47CisJCWlmKGZpbHRlci5jb250YWlucygiOiIpKXJldHVybjsgLy8gSW50ZXJuYWwgdXNlIGJ5IFNURU0sIG5vdCBzcGVjaWZpZWQgYnkgdGhlIHVzZXIKKwkJaWYoZmlsdGVyLnRyaW0oKS5lcXVhbHMoIiIpKXJldHVybjsKKwkJU3RyaW5nVG9rZW5pemVyIHN0ID0gbmV3IFN0cmluZ1Rva2VuaXplcihmaWx0ZXIudG9TdHJpbmcoKSwgIjsiKTsKKwkJcGF0dGVybnMgPSBuZXcgU3RyaW5nW3N0LmNvdW50VG9rZW5zKCldOworCQlmb3IoaW50IGk9MDtpPHBhdHRlcm5zLmxlbmd0aDsrK2kpIHsKKwkJCVN0cmluZyBwYXQgPSBzdC5uZXh0VG9rZW4oKTsKKwkJCXBhdHRlcm5zW2ldPXBhdDsKKwkJfQorCX0KKwkKKwlwdWJsaWMgRU1hcDxVUkksIE5vZGU+IGZpbHRlck5vZGVzKEVNYXA8VVJJLCBOb2RlPm1hcCkgeworCQlpZihwYXR0ZXJucyA9PSBudWxsKXJldHVybiBtYXA7CisJCUFycmF5TGlzdDxVUkk+cmVtb3ZlID0gbmV3IEFycmF5TGlzdDxVUkk+KCk7CisJCWZvcihVUkkgdXJpOm1hcC5rZXlTZXQoKSkgeworCQkJU3RyaW5nIGxhc3RTZWdtZW50ID0gdXJpLmxhc3RTZWdtZW50KCk7CisJCQlib29sZWFuIGtlZXAgPSBmYWxzZTsKKwkJCisJCQlmb3IoaW50IGk9MDtpPHBhdHRlcm5zLmxlbmd0aDsrK2kpIHsKKwkJCQlTdHJpbmcgcGF0ID0gcGF0dGVybnNbaV07CisJCQkJYm9vbGVhbiB3aWxkY2FyZCA9IGZhbHNlOworCQkJCWlmKHBhdC5lbmRzV2l0aCgiKiIpKSB7cGF0ID0gcGF0LnN1YnN0cmluZygwLCBwYXQubGVuZ3RoKCktMSk7d2lsZGNhcmQgPSB0cnVlO30KKwkJCQlpZih3aWxkY2FyZCAmJiBsYXN0U2VnbWVudC5jb250YWlucyhwYXQpCisJCQkJCQl8fCAhd2lsZGNhcmQgJiYgbGFzdFNlZ21lbnQuZXF1YWxzKHBhdCkpIHtrZWVwID0gdHJ1ZTticmVhazt9CisJCQl9CisJCQlpZigha2VlcClyZW1vdmUuYWRkKHVyaSk7CisJCX0KKwkJZm9yKFVSSSB1OnJlbW92ZSltYXAucmVtb3ZlKHUpOworCQlyZXR1cm4gbWFwOworCX0KKwlwdWJsaWMgRU1hcDxVUkksIEVkZ2U+IGZpbHRlckVkZ2VzKEVNYXA8VVJJLCBFZGdlPm1hcCkgeworCQlpZihwYXR0ZXJucyA9PSBudWxsKXJldHVybiBtYXA7CisJCUFycmF5TGlzdDxVUkk+cmVtb3ZlID0gbmV3IEFycmF5TGlzdDxVUkk+KCk7CisJCWZvcihVUkkgdXJpOm1hcC5rZXlTZXQoKSkgeworCQkJRWRnZSBlZGdlID0gbWFwLmdldCh1cmkpOworCQkJYm9vbGVhbiBmb3VuZFNvdXJjZT1mYWxzZSwgZm91bmREZXN0ID0gZmFsc2U7CisJCQlmb3IoaW50IGk9MDtpPHBhdHRlcm5zLmxlbmd0aDsrK2kpIHsKKwkJCQlTdHJpbmcgcGF0ID0gcGF0dGVybnNbaV07CisJCQkJYm9vbGVhbiB3aWxkY2FyZCA9IGZhbHNlOworCQkJCWlmKHBhdC5lbmRzV2l0aCgiKiIpKSB7cGF0ID0gcGF0LnN1YnN0cmluZygwLCBwYXQubGVuZ3RoKCktMSk7d2lsZGNhcmQgPSB0cnVlO30KKwkJCQkKKwkJCQlpZih3aWxkY2FyZCAmJiBlZGdlLmdldE5vZGVBVVJJKCkubGFzdFNlZ21lbnQoKS5jb250YWlucyhwYXQpCisJCQkJCQl8fCAhd2lsZGNhcmQgJiYgZWRnZS5nZXROb2RlQVVSSSgpLmxhc3RTZWdtZW50KCkuZXF1YWxzKHBhdCkpIGZvdW5kU291cmNlID0gdHJ1ZTsKKwkJCQlpZih3aWxkY2FyZCAmJiBlZGdlLmdldE5vZGVCVVJJKCkubGFzdFNlZ21lbnQoKS5jb250YWlucyhwYXQpCisJCQkJCQl8fCAhd2lsZGNhcmQgJiYgZWRnZS5nZXROb2RlQlVSSSgpLmxhc3RTZWdtZW50KCkuZXF1YWxzKHBhdCkpIGZvdW5kRGVzdCA9IHRydWU7CQkJCisJCQl9CisJCQlpZighKGZvdW5kU291cmNlICYmIGZvdW5kRGVzdCkpcmVtb3ZlLmFkZCh1cmkpOworCQl9CisJCWZvcihVUkkgdTpyZW1vdmUpbWFwLnJlbW92ZSh1KTsKKwkJcmV0dXJuIG1hcDsKKwl9CisJcHVibGljIEVNYXA8VVJJLCBOb2RlTGFiZWw+IGZpbHRlck5vZGVMYWJlbHMoRU1hcDxVUkksIE5vZGVMYWJlbD5tYXApIHsKKwkJaWYocGF0dGVybnMgPT0gbnVsbClyZXR1cm4gbWFwOworCQlBcnJheUxpc3Q8VVJJPnJlbW92ZSA9IG5ldyBBcnJheUxpc3Q8VVJJPigpOworCQlmb3IoVVJJIHVyaTptYXAua2V5U2V0KCkpIHsKKwkJCVN0cmluZyBsYXN0U2VnbWVudCA9IHVyaS5sYXN0U2VnbWVudCgpOworCQkJYm9vbGVhbiBrZWVwID0gZmFsc2U7CisJCQlmb3IoaW50IGk9MDtpPHBhdHRlcm5zLmxlbmd0aDsrK2kpIHsKKwkJCQlTdHJpbmcgcGF0ID0gcGF0dGVybnNbaV07CisJCQkJYm9vbGVhbiB3aWxkY2FyZCA9IGZhbHNlOworCQkJCWlmKHBhdC5lbmRzV2l0aCgiKiIpKSB7cGF0ID0gcGF0LnN1YnN0cmluZygwLCBwYXQubGVuZ3RoKCktMSk7d2lsZGNhcmQgPSB0cnVlO30KKwkJCQlpZih3aWxkY2FyZCAmJiBsYXN0U2VnbWVudC5jb250YWlucyhwYXQpIAorCQkJCQkJfHwgIXdpbGRjYXJkICYmIGxhc3RTZWdtZW50LmVxdWFscyhwYXQpKSB7a2VlcCA9IHRydWU7YnJlYWs7fQorCQkJfQorCQkJaWYoIWtlZXApcmVtb3ZlLmFkZCh1cmkpOworCQl9CisJCWZvcihVUkkgdTpyZW1vdmUpbWFwLnJlbW92ZSh1KTsKKwkJcmV0dXJuIG1hcDsKKwl9CisJcHVibGljIEVNYXA8VVJJLCBMYWJlbD4gZmlsdGVyTGFiZWxzKEVNYXA8VVJJLCBMYWJlbD5tYXApIHsKKwkJaWYocGF0dGVybnMgPT0gbnVsbClyZXR1cm4gbWFwOworCQlBcnJheUxpc3Q8VVJJPnJlbW92ZSA9IG5ldyBBcnJheUxpc3Q8VVJJPigpOworCQlmb3IoVVJJIHVyaTptYXAua2V5U2V0KCkpIHsKKwkJCVN0cmluZyBsYXN0U2VnbWVudCA9IHVyaS5sYXN0U2VnbWVudCgpOworCQkJYm9vbGVhbiBrZWVwID0gZmFsc2U7CisJCQlmb3IoaW50IGk9MDtpPHBhdHRlcm5zLmxlbmd0aDsrK2kpIHsJCQorCQkJCVN0cmluZyBwYXQgPSBwYXR0ZXJuc1tpXTsKKwkJCQlib29sZWFuIHdpbGRjYXJkID0gZmFsc2U7CisJCQkJaWYocGF0LmVuZHNXaXRoKCIqIikpIHtwYXQgPSBwYXQuc3Vic3RyaW5nKDAsIHBhdC5sZW5ndGgoKS0xKTt3aWxkY2FyZCA9IHRydWU7fQorCQkKKwkJCQlpZih3aWxkY2FyZCAmJiBsYXN0U2VnbWVudC5jb250YWlucyhwYXQpIHx8CisJCQkJCQkhd2lsZGNhcmQgJiYgbGFzdFNlZ21lbnQuZXF1YWxzKHBhdCkpIHtrZWVwID0gdHJ1ZTticmVhazt9CisJCQlpZigha2VlcClyZW1vdmUuYWRkKHVyaSk7CisJCQl9CisJCX0KKwkJZm9yKFVSSSB1OnJlbW92ZSltYXAucmVtb3ZlKHUpOworCQlyZXR1cm4gbWFwOworCX0KKwlwdWJsaWMgdm9pZCByZXN0cmljdChJZGVudGlmaWFibGVGaWx0ZXJJbXBsIG90aGVyKSB7CisJCS8vIFRvRE8uIFRoZSBpZGVhIGlzIHRoYXQgd2UgbmVlZCB0byBjb25zb2xpZGF0ZSBhIGxpc3Qgb2YgcGF0dGVybnMgaW50byBhIHNpbmdsZQorCQkvLyBsaXN0IGlmIHRoZXJlIGFyZSBkdXBsaWNhdGVzIG9yIG1vcmUgZ2VuZXJhbCBwYXR0ZXJucworLyoJCWlmKG90aGVyLnBhdHRlcm5zID09IG51bGwpcmV0dXJuOworCQlBcnJheUxpc3Q8U3RyaW5nPnJlc3RyaWN0ZWRQYXR0ZXJucyA9IG5ldyBBcnJheUxpc3Q8U3RyaW5nPigpOworCQlpZih0aGlzLnBhdHRlcm5zICE9IG51bGwpIGZvcihTdHJpbmcgbXlwYXQ6dGhpcy5wYXR0ZXJucylyZXN0cmljdGVkUGF0dGVybnMuYWRkKG15cGF0KTsKKwkJZm9yKFN0cmluZyBvdGhlcnBhdDpvdGhlci5wYXR0ZXJucykgaWYoIXJlc3RyaWN0ZWRQYXR0ZXJucy5jb250YWlucyhvdGhlcnBhdCkpIHJlc3RyaWN0ZWRQYXR0ZXJucy5hZGQob3RoZXJwYXQpOworCQkvLyBOb3cgZ28gdGhyb3VnaCBhbmQgcmVtb3ZlIHBhdHRlcm5zIHRoYXQgYXJlIG1vcmUgZ2VuZXJhbCB0aGFuIG90aGVycy4KKwkJZm9yKFN0cmluZyBwYXQ6b3RoZXIucGF0dGVybnMpIHsKKwkJCWZvcihTdHJpbmcgcDpyZXN0cmljdGVkUGF0dGVybnMpCisJCQkJaWYoIXAuZXF1YWxzKHBhdCkgJiYgcC5jb250YWlucyhwYXQpKSByZXN0cmljdGVkUGF0dGVybnMucmVtb3ZlKHApOworCQl9CisJCWlmKHRoaXMucGF0dGVybnMgIT0gbnVsbCkgCisJCQlmb3IoU3RyaW5nIHBhdDp0aGlzLnBhdHRlcm5zKSB7CisJCQkJZm9yKFN0cmluZyBwOnJlc3RyaWN0ZWRQYXR0ZXJucykKKwkJCQkJaWYoIXAuZXF1YWxzKHBhdCkgJiYgcC5jb250YWlucyhwYXQpKSByZXN0cmljdGVkUGF0dGVybnMucmVtb3ZlKHApOworCQkJfQorCQl0aGlzLnBhdHRlcm5zID0gbmV3IFN0cmluZ1tyZXN0cmljdGVkUGF0dGVybnMuc2l6ZSgpXTsKKwkJZm9yKGludCBpPTA7aTxyZXN0cmljdGVkUGF0dGVybnMuc2l6ZSgpOysraSkgdGhpcy5wYXR0ZXJuc1tpXSA9IHJlc3RyaWN0ZWRQYXR0ZXJucy5nZXQoaSk7CisJKi8KKwl9CisJCit9IC8vSWRlbnRpZmlhYmxlRmlsdGVySW1wbApkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9jb21tb24vaW1wbC9JZGVudGlmaWFibGVJbXBsLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2NvbW1vbi9pbXBsL0lkZW50aWZpYWJsZUltcGwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YjI4YmU0Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9jb21tb24vaW1wbC9JZGVudGlmaWFibGVJbXBsLmphdmEKQEAgLTAsMCArMSw0MTkgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5pbXBsOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAKKyAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4gCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIAorICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wIAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQgCisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbCAKKyAqIAorICogQ29udHJpYnV0b3JzOiAKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb25DaGFpbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuVVJJOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkludGVybmFsRU9iamVjdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuaW1wbC5FTm90aWZpY2F0aW9uSW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuaW1wbC5FT2JqZWN0SW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuQ29uc3RhbnRzOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5TVEVNVVJJOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uQ29tbW9uRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLkNvbW1vblBhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5EdWJsaW5Db3JlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uSWRlbnRpZmlhYmxlOworCisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPklkZW50aWZpYWJsZTwvYj48L2VtPicuCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIDxwPgorICogVGhlIGZvbGxvd2luZyBmZWF0dXJlcyBhcmUgaW1wbGVtZW50ZWQ6CisgKiA8dWw+CisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5pbXBsLklkZW50aWZpYWJsZUltcGwjZ2V0VVJJIDxlbT5VUkk8L2VtPn08L2xpPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uaW1wbC5JZGVudGlmaWFibGVJbXBsI2dldFR5cGVVUkkgPGVtPlR5cGUgVVJJPC9lbT59PC9saT4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLmltcGwuSWRlbnRpZmlhYmxlSW1wbCNnZXREdWJsaW5Db3JlIDxlbT5EdWJsaW4gQ29yZTwvZW0+fTwvbGk+CisgKiA8L3VsPgorICogPC9wPgorICoKKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGFic3RyYWN0IGNsYXNzIElkZW50aWZpYWJsZUltcGwgZXh0ZW5kcyBFT2JqZWN0SW1wbCBpbXBsZW1lbnRzCisJCUlkZW50aWZpYWJsZSB7CisKKworCS8qKgorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRVUkkoKSA8ZW0+VVJJPC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZ2V0VVJJKCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIFVSSSBVUklfRURFRkFVTFQgPSBudWxsOworCisJLyoqCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0VVJJKCkgPGVtPlVSSTwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI2dldFVSSSgpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIFVSSSB1UkkgPSBVUklfRURFRkFVTFQ7CisKKwkvKioKKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0VHlwZVVSSSgpIDxlbT5UeXBlIFVSSTwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI2dldFR5cGVVUkkoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgVVJJIFRZUEVfVVJJX0VERUZBVUxUID0gbnVsbDsKKworCS8qKgorCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldFR5cGVVUkkoKSA8ZW0+VHlwZSBVUkk8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNnZXRUeXBlVVJJKCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgVVJJIHR5cGVVUkkgPSBUWVBFX1VSSV9FREVGQVVMVDsKKworCS8qKgorCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldER1YmxpbkNvcmUoKSA8ZW0+RHVibGluIENvcmU8L2VtPn0nIGNvbnRhaW5tZW50IHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNnZXREdWJsaW5Db3JlKCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgRHVibGluQ29yZSBkdWJsaW5Db3JlOworCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogCisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlwcm90ZWN0ZWQgSWRlbnRpZmlhYmxlSW1wbCgpIHsKKwkJc3VwZXIoKTsKKwkJc2V0RHVibGluQ29yZShDb21tb25GYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVEdWJsaW5Db3JlKCkpOworLy8JCXNldFVSSShTVEVNVVJJLmNyZWF0ZVVSSSgiaWRlbnRpZmlhYmxlIiArIFNURU1VUkkuZ2VuZXJhdGVVbmlxdWVQYXJ0KCkpKTsKKwkJc2V0VHlwZVVSSShTVEVNVVJJLklERU5USUZJQUJMRV9UWVBFX1VSSSk7CisJfSAvLyBJZGVudGlmaWFibGVJbXBsCisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIEVDbGFzcyBlU3RhdGljQ2xhc3MoKSB7CisJCXJldHVybiBDb21tb25QYWNrYWdlLkxpdGVyYWxzLklERU5USUZJQUJMRTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIER1YmxpbkNvcmUgZ2V0RHVibGluQ29yZSgpIHsKKwkJcmV0dXJuIGR1YmxpbkNvcmU7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlwdWJsaWMgTm90aWZpY2F0aW9uQ2hhaW4gYmFzaWNTZXREdWJsaW5Db3JlKER1YmxpbkNvcmUgbmV3RHVibGluQ29yZSwgTm90aWZpY2F0aW9uQ2hhaW4gbXNncykgeworCQlEdWJsaW5Db3JlIG9sZER1YmxpbkNvcmUgPSBnZXREdWJsaW5Db3JlKCk7CisJCWR1YmxpbkNvcmUgPSBuZXdEdWJsaW5Db3JlOworCQkKKwkJLy8gQSBuZXcgRHVibGluQ29yZSBpbnN0YW5jZT8KKwkJaWYgKGdldER1YmxpbkNvcmUoKSAhPSBudWxsKSB7CisJCQkvLyBZZXMKKwkJCS8vIE1ha2Ugc3VyZSB0aGUgaWRlbnRpZmllciBhbmQgZm9ybWF0IFVSSSdzIG1hdGNoIHRoZSBJZGVudGlmaWFibGUncworCQkJLy8gQXJlIHRoZXkgdmFsaWQgeWV0PworCQkJaWYgKGdldFVSSSgpICE9IG51bGwgJiYgZ2V0VHlwZVVSSSgpICE9IG51bGwpIHsKKwkJCQkvLyBZZXMKKwkJCQlnZXREdWJsaW5Db3JlKCkuc2V0SWRlbnRpZmllcihnZXRVUkkoKS50b1N0cmluZygpKTsKKwkJCQlnZXREdWJsaW5Db3JlKCkuc2V0VHlwZShnZXRUeXBlVVJJKCkudG9TdHJpbmcoKSk7CisJCQl9IC8vIGlmIAorCQkJCisJCX0gLy8gaWYgCisJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkgeworCQkJRU5vdGlmaWNhdGlvbkltcGwgbm90aWZpY2F0aW9uID0gbmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIENvbW1vblBhY2thZ2UuSURFTlRJRklBQkxFX19EVUJMSU5fQ09SRSwgb2xkRHVibGluQ29yZSwgbmV3RHVibGluQ29yZSk7CisJCQlpZiAobXNncyA9PSBudWxsKSBtc2dzID0gbm90aWZpY2F0aW9uOyBlbHNlIG1zZ3MuYWRkKG5vdGlmaWNhdGlvbik7CisJCX0KKwkJcmV0dXJuIG1zZ3M7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIHNldER1YmxpbkNvcmUoRHVibGluQ29yZSBuZXdEdWJsaW5Db3JlKSB7CisJCWlmIChuZXdEdWJsaW5Db3JlICE9IGR1YmxpbkNvcmUpIHsKKwkJCU5vdGlmaWNhdGlvbkNoYWluIG1zZ3MgPSBudWxsOworCQkJaWYgKGR1YmxpbkNvcmUgIT0gbnVsbCkKKwkJCQltc2dzID0gKChJbnRlcm5hbEVPYmplY3QpZHVibGluQ29yZSkuZUludmVyc2VSZW1vdmUodGhpcywgRU9QUE9TSVRFX0ZFQVRVUkVfQkFTRSAtIENvbW1vblBhY2thZ2UuSURFTlRJRklBQkxFX19EVUJMSU5fQ09SRSwgbnVsbCwgbXNncyk7CisJCQlpZiAobmV3RHVibGluQ29yZSAhPSBudWxsKQorCQkJCW1zZ3MgPSAoKEludGVybmFsRU9iamVjdCluZXdEdWJsaW5Db3JlKS5lSW52ZXJzZUFkZCh0aGlzLCBFT1BQT1NJVEVfRkVBVFVSRV9CQVNFIC0gQ29tbW9uUGFja2FnZS5JREVOVElGSUFCTEVfX0RVQkxJTl9DT1JFLCBudWxsLCBtc2dzKTsKKwkJCW1zZ3MgPSBiYXNpY1NldER1YmxpbkNvcmUobmV3RHVibGluQ29yZSwgbXNncyk7CisJCQlpZiAobXNncyAhPSBudWxsKSBtc2dzLmRpc3BhdGNoKCk7CisJCX0KKwkJZWxzZSBpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpCisJCQllTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBDb21tb25QYWNrYWdlLklERU5USUZJQUJMRV9fRFVCTElOX0NPUkUsIG5ld0R1YmxpbkNvcmUsIG5ld0R1YmxpbkNvcmUpKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFVSSSBnZXRUeXBlVVJJKCkgeworCQlyZXR1cm4gdHlwZVVSSTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIFNldCB0aGUgdHlwZSBVUkksIGJ1dCBhbHNvIHVwZGF0ZSB0aGUgRHVibGluQ29yZSB0eXBlLgorCSAqIAorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJcHVibGljIHZvaWQgc2V0VHlwZVVSSShVUkkgbmV3VHlwZVVSSSkgeworCQlVUkkgb2xkVHlwZVVSSSA9IGdldFR5cGVVUkkoKTsKKwkJdHlwZVVSSSA9IG5ld1R5cGVVUkk7CisJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkKKwkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsCisJCQkJCUNvbW1vblBhY2thZ2UuSURFTlRJRklBQkxFX19UWVBFX1VSSSwgb2xkVHlwZVVSSSwgZ2V0VHlwZVVSSSgpKSk7CisJCS8vIFVwZGF0ZSBEdWJsaW5Db3JlPworCQlpZiAoZ2V0RHVibGluQ29yZSgpICE9IG51bGwpIHsKKwkJCS8vIFllcworCQkJZ2V0RHVibGluQ29yZSgpLnNldFR5cGUobmV3VHlwZVVSSS50b1N0cmluZygpKTsKKwkJfQorCX0gLy8gc2V0VHlwZVVSSQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogCisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlwdWJsaWMgYm9vbGVhbiBzYW5lKCkgeworCQlib29sZWFuIHJldFZhbHVlID0gdHJ1ZTsKKworCQkvL3JldFZhbHVlID0gcmV0VmFsdWUgJiYgZ2V0VVJJKCkuc2NoZW1lKCkuZXF1YWxzKENvbnN0YW50cy5TVEVNX1NDSEVNRSk7CisJCS8vYXNzZXJ0KHJldFZhbHVlKTsKKwkJCisJCXJldFZhbHVlID0gcmV0VmFsdWUgJiYgZ2V0VHlwZVVSSSgpLnNjaGVtZSgpLmVxdWFscyhDb25zdGFudHMuU1RFTV9UWVBFX1NDSEVNRSk7CisJCWFzc2VydChyZXRWYWx1ZSk7CisJCQorCQkvLyBJZiB0aGVyZSBpcyBkdWJsaW4gY29yZSB0aGVuIHRoZSBVUkkncyBvZiB0aGUgSWRlbnRpZmlhYmxlIGFuZCB0aGUKKwkJLy8gRHVibGluIENvcmUgaW5zdGFuY2Ugc2hvdWxkIGFncmVlLgorCQlpZiAoZHVibGluQ29yZSAhPSBudWxsKSB7CisJCQlmaW5hbCBEdWJsaW5Db3JlIGRjID0gZ2V0RHVibGluQ29yZSgpOworCQkJcmV0VmFsdWUgPSByZXRWYWx1ZSAmJiBnZXRVUkkoKS50b1N0cmluZygpLmVxdWFscyhkYy5nZXRJZGVudGlmaWVyKCkpOworCQkJYXNzZXJ0KHJldFZhbHVlKTsKKwkJfQorCisJCS8vIFRoaXMgdGVzdCBsb29rcyBmb3IgZHVwbGljYXRlIGFkYXB0ZXJzLiBUaGlzIGNhbiBvY2N1ciBpZiB0aGUKKwkJLy8gYWRhcHRlcnMgYXJlIHN0YXRlZnVsCisJCS8vIEFueSBhZGFwdGVycz8KKwkJLy8gaWYgKHJldFZhbHVlICYmIGVBZGFwdGVycyAhPSBudWxsICYmIGVBZGFwdGVycy5zaXplKCkgPiAwICkgeworCQkvLyAvLyBZZXMKKwkJLy8gLy8gVGhlIGxpc3Qgb2YgYWRhcHRlcnMgc2hvdWxkbid0IGNvbnRhaW4gYW55IGR1cGxpY2F0ZSBhZGFwdGVycyBvZgorCQkvLyAvLyB0aGUgc2FtZSB0eXBlCisJCS8vIGZpbmFsIFNldDxDbGFzcz4gdHlwZXMgPSBuZXcgSGFzaFNldDxDbGFzcz4oKTsKKwkJLy8gZm9yIChBZGFwdGVyIGFkYXB0ZXIgOiBlQWRhcHRlcnMpIHsKKwkJLy8gdHlwZXMuYWRkKGFkYXB0ZXIuZ2V0Q2xhc3MoKSk7CisJCS8vIH0KKwkJLy8gcmV0VmFsdWUgPSByZXRWYWx1ZSAmJiB0eXBlcy5zaXplKCkgPT0gZUFkYXB0ZXJzLnNpemUoKTsKKwkJLy8gYXNzZXJ0IHJldFZhbHVlOworCQkvLyB9IC8vIGlmIGFueSBhZGFwdGVycworCQkKKworCQlyZXR1cm4gcmV0VmFsdWU7CisJfSAvLyBzYW5lCisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFVSSSBnZXRVUkkoKSB7CisJCXJldHVybiB1Ukk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBTZXQgdGhlIFVSSSBhbmQgYWxzbyB1cGRhdGUgdGhlIElkZW50aWZpZXIgaW4gdGhlIGR1YmxpbiBjb3JlIGluc3RhbmNlCisJICogCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogCisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRVUkkoVVJJIG5ld1VSSSkgeworCQlVUkkgb2xkVVJJID0gZ2V0VVJJKCk7CisJCXVSSSA9IG5ld1VSSTsKKwkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQorCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwKKwkJCQkJQ29tbW9uUGFja2FnZS5JREVOVElGSUFCTEVfX1VSSSwgb2xkVVJJLCBnZXRVUkkoKSkpOworCQkvLyBVcGRhdGUgRHVibGluQ29yZT8KKwkJaWYgKGdldER1YmxpbkNvcmUoKSAhPSBudWxsKSB7CisJCQkvLyBZZXMKKwkJCWdldER1YmxpbkNvcmUoKS5zZXRJZGVudGlmaWVyKG5ld1VSSS50b1N0cmluZygpKTsKKwkJfQorCX0gLy8gc2V0VVJJCisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIE5vdGlmaWNhdGlvbkNoYWluIGVJbnZlcnNlUmVtb3ZlKEludGVybmFsRU9iamVjdCBvdGhlckVuZCwgaW50IGZlYXR1cmVJRCwgTm90aWZpY2F0aW9uQ2hhaW4gbXNncykgeworCQlzd2l0Y2ggKGZlYXR1cmVJRCkgeworCQkJY2FzZSBDb21tb25QYWNrYWdlLklERU5USUZJQUJMRV9fRFVCTElOX0NPUkU6CisJCQkJcmV0dXJuIGJhc2ljU2V0RHVibGluQ29yZShudWxsLCBtc2dzKTsKKwkJfQorCQlyZXR1cm4gc3VwZXIuZUludmVyc2VSZW1vdmUob3RoZXJFbmQsIGZlYXR1cmVJRCwgbXNncyk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBPYmplY3QgZUdldChpbnQgZmVhdHVyZUlELCBib29sZWFuIHJlc29sdmUsIGJvb2xlYW4gY29yZVR5cGUpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJCWNhc2UgQ29tbW9uUGFja2FnZS5JREVOVElGSUFCTEVfX1VSSToKKwkJCQlyZXR1cm4gZ2V0VVJJKCk7CisJCQljYXNlIENvbW1vblBhY2thZ2UuSURFTlRJRklBQkxFX19UWVBFX1VSSToKKwkJCQlyZXR1cm4gZ2V0VHlwZVVSSSgpOworCQkJY2FzZSBDb21tb25QYWNrYWdlLklERU5USUZJQUJMRV9fRFVCTElOX0NPUkU6CisJCQkJcmV0dXJuIGdldER1YmxpbkNvcmUoKTsKKwkJfQorCQlyZXR1cm4gc3VwZXIuZUdldChmZWF0dXJlSUQsIHJlc29sdmUsIGNvcmVUeXBlKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgZVNldChpbnQgZmVhdHVyZUlELCBPYmplY3QgbmV3VmFsdWUpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJCWNhc2UgQ29tbW9uUGFja2FnZS5JREVOVElGSUFCTEVfX1VSSToKKwkJCQlzZXRVUkkoKFVSSSluZXdWYWx1ZSk7CisJCQkJcmV0dXJuOworCQkJY2FzZSBDb21tb25QYWNrYWdlLklERU5USUZJQUJMRV9fVFlQRV9VUkk6CisJCQkJc2V0VHlwZVVSSSgoVVJJKW5ld1ZhbHVlKTsKKwkJCQlyZXR1cm47CisJCQljYXNlIENvbW1vblBhY2thZ2UuSURFTlRJRklBQkxFX19EVUJMSU5fQ09SRToKKwkJCQlzZXREdWJsaW5Db3JlKChEdWJsaW5Db3JlKW5ld1ZhbHVlKTsKKwkJCQlyZXR1cm47CisJCX0KKwkJc3VwZXIuZVNldChmZWF0dXJlSUQsIG5ld1ZhbHVlKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgZVVuc2V0KGludCBmZWF0dXJlSUQpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJCWNhc2UgQ29tbW9uUGFja2FnZS5JREVOVElGSUFCTEVfX1VSSToKKwkJCQlzZXRVUkkoVVJJX0VERUZBVUxUKTsKKwkJCQlyZXR1cm47CisJCQljYXNlIENvbW1vblBhY2thZ2UuSURFTlRJRklBQkxFX19UWVBFX1VSSToKKwkJCQlzZXRUeXBlVVJJKFRZUEVfVVJJX0VERUZBVUxUKTsKKwkJCQlyZXR1cm47CisJCQljYXNlIENvbW1vblBhY2thZ2UuSURFTlRJRklBQkxFX19EVUJMSU5fQ09SRToKKwkJCQlzZXREdWJsaW5Db3JlKChEdWJsaW5Db3JlKW51bGwpOworCQkJCXJldHVybjsKKwkJfQorCQlzdXBlci5lVW5zZXQoZmVhdHVyZUlEKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIGJvb2xlYW4gZUlzU2V0KGludCBmZWF0dXJlSUQpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJCWNhc2UgQ29tbW9uUGFja2FnZS5JREVOVElGSUFCTEVfX1VSSToKKwkJCQlyZXR1cm4gVVJJX0VERUZBVUxUID09IG51bGwgPyB1UkkgIT0gbnVsbCA6ICFVUklfRURFRkFVTFQuZXF1YWxzKHVSSSk7CisJCQljYXNlIENvbW1vblBhY2thZ2UuSURFTlRJRklBQkxFX19UWVBFX1VSSToKKwkJCQlyZXR1cm4gVFlQRV9VUklfRURFRkFVTFQgPT0gbnVsbCA/IHR5cGVVUkkgIT0gbnVsbCA6ICFUWVBFX1VSSV9FREVGQVVMVC5lcXVhbHModHlwZVVSSSk7CisJCQljYXNlIENvbW1vblBhY2thZ2UuSURFTlRJRklBQkxFX19EVUJMSU5fQ09SRToKKwkJCQlyZXR1cm4gZHVibGluQ29yZSAhPSBudWxsOworCQl9CisJCXJldHVybiBzdXBlci5lSXNTZXQoZmVhdHVyZUlEKTsKKwl9CisKKwkKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIEVuZm9yY2UgaWRlbnRpdHkgc2VtYW50aWNzIG9uIGVxdWFsaXR5IHRvCisJICogY29tcGx5IHdpdGggdGhlIGdlbmVyYWwgRU1GIGNvbnRyYWN0LgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIGZpbmFsIGJvb2xlYW4gZXF1YWxzKE9iamVjdCBvYmopIHsKKwkJcmV0dXJuIHN1cGVyLmVxdWFscyhvYmopOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogRW5mb3JjZSBpZGVudGl0eSBzZW1hbnRpY3Mgb24gaGFzaENvZGUgdG8KKwkgKiBjb21wbHkgd2l0aCB0aGUgZ2VuZXJhbCBFTUYgY29udHJhY3QuCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogCisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgZmluYWwgaW50IGhhc2hDb2RlKCkgeworCQlyZXR1cm4gc3VwZXIuaGFzaENvZGUoKTsKKwl9CisJCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogCisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkgeworCQlpZiAoZUlzUHJveHkoKSkKKwkJCXJldHVybiBzdXBlci50b1N0cmluZygpOworCisJCVN0cmluZ0J1ZmZlciByZXN1bHQgPSBuZXcgU3RyaW5nQnVmZmVyKCk7CisJCXJlc3VsdC5hcHBlbmQoIih1Ukk6ICIpOworCQlyZXN1bHQuYXBwZW5kKGdldFVSSSgpKTsKKwkJcmVzdWx0LmFwcGVuZCgiLCB0eXBlVVJJOiAiKTsKKwkJcmVzdWx0LmFwcGVuZChnZXRUeXBlVVJJKCkpOworCQlyZXN1bHQuYXBwZW5kKCcpJyk7CisJCXJldHVybiByZXN1bHQudG9TdHJpbmcoKTsKKwl9CisKKwkvKioKKwkgKiBAc2VlIGphdmEubGFuZy5Db21wYXJhYmxlI2NvbXBhcmVUbyhqYXZhLmxhbmcuT2JqZWN0KQorCSAqLworCXB1YmxpYyBpbnQgY29tcGFyZVRvKElkZW50aWZpYWJsZSBvKSB7CisJCXJldHVybiB0aGlzLmdldFVSSSgpLnRvU3RyaW5nKCkuY29tcGFyZVRvKG8uZ2V0VVJJKCkudG9TdHJpbmcoKSk7CisJCQorCQkvKiBPbGQgY29kZS4gQ29tbWVudGVkIG91dCBzaW5jZSBpdCdzIHNsb3cgYW5kIHdlIG5lZWQgdG8gZG8gcXVpY2sgc29ydGluZyBpbiBtYW55IHBsYWNlcworCQkgCisJCQkJQ29tcG9zZWRBZGFwdGVyRmFjdG9yeS5EZXNjcmlwdG9yLlJlZ2lzdHJ5LklOU1RBTkNFKTsKKworCQlmaW5hbCBJSXRlbUxhYmVsUHJvdmlkZXIgbHAxID0gKElJdGVtTGFiZWxQcm92aWRlcikgaXRlbVByb3ZpZGVyRmFjdG9yeS5hZGFwdCgKKwkJCQl0aGlzLCBJSXRlbUxhYmVsUHJvdmlkZXIuY2xhc3MpOworCQlmaW5hbCBJSXRlbUxhYmVsUHJvdmlkZXIgbHAyID0gKElJdGVtTGFiZWxQcm92aWRlcikgaXRlbVByb3ZpZGVyRmFjdG9yeS5hZGFwdChvLAorCQkJCUlJdGVtTGFiZWxQcm92aWRlci5jbGFzcyk7CisJCXJldHVybiBscDEuZ2V0VGV4dCh0aGlzKS5jb21wYXJlVG8obHAyLmdldFRleHQobykpOworCQkqLworCX0gLy8gY29tcGFyZVRvCisKKwkKK30gLy8gSWRlbnRpZmlhYmxlSW1wbApkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9jb21tb24vaW1wbC9TdHJpbmdWYWx1ZUltcGwuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvY29tbW9uL2ltcGwvU3RyaW5nVmFsdWVJbXBsLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjVjM2YyNgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvY29tbW9uL2ltcGwvU3RyaW5nVmFsdWVJbXBsLmphdmEKQEAgLTAsMCArMSwxODkgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5pbXBsOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDEwIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5pbXBsLkVOb3RpZmljYXRpb25JbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5pbXBsLkVPYmplY3RJbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uQ29tbW9uUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLklkZW50aWZpYWJsZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLlN0cmluZ1ZhbHVlOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiBBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+U3RyaW5nIFZhbHVlPC9iPjwvZW0+Jy4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogPHA+CisgKiBUaGUgZm9sbG93aW5nIGZlYXR1cmVzIGFyZSBpbXBsZW1lbnRlZDoKKyAqIDx1bD4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLmltcGwuU3RyaW5nVmFsdWVJbXBsI2dldFZhbHVlIDxlbT5WYWx1ZTwvZW0+fTwvbGk+CisgKiA8L3VsPgorICogPC9wPgorICoKKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIFN0cmluZ1ZhbHVlSW1wbCBleHRlbmRzIEVPYmplY3RJbXBsIGltcGxlbWVudHMgU3RyaW5nVmFsdWUgeworCS8qKgorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRWYWx1ZSgpIDxlbT5WYWx1ZTwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZ2V0VmFsdWUoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgU3RyaW5nIFZBTFVFX0VERUZBVUxUID0gbnVsbDsKKworCS8qKgorCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldFZhbHVlKCkgPGVtPlZhbHVlPC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNnZXRWYWx1ZSgpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIFN0cmluZyB2YWx1ZSA9IFZBTFVFX0VERUZBVUxUOworCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIFN0cmluZ1ZhbHVlSW1wbCgpIHsKKwkJc3VwZXIoKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgRUNsYXNzIGVTdGF0aWNDbGFzcygpIHsKKwkJcmV0dXJuIENvbW1vblBhY2thZ2UuTGl0ZXJhbHMuU1RSSU5HX1ZBTFVFOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBTdHJpbmcgZ2V0VmFsdWUoKSB7CisJCXJldHVybiB2YWx1ZTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRWYWx1ZShTdHJpbmcgbmV3VmFsdWUpIHsKKwkJU3RyaW5nIG9sZFZhbHVlID0gdmFsdWU7CisJCXZhbHVlID0gbmV3VmFsdWU7CisJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkKKwkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIENvbW1vblBhY2thZ2UuU1RSSU5HX1ZBTFVFX19WQUxVRSwgb2xkVmFsdWUsIHZhbHVlKSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIE9iamVjdCBlR2V0KGludCBmZWF0dXJlSUQsIGJvb2xlYW4gcmVzb2x2ZSwgYm9vbGVhbiBjb3JlVHlwZSkgeworCQlzd2l0Y2ggKGZlYXR1cmVJRCkgeworCQkJY2FzZSBDb21tb25QYWNrYWdlLlNUUklOR19WQUxVRV9fVkFMVUU6CisJCQkJcmV0dXJuIGdldFZhbHVlKCk7CisJCX0KKwkJcmV0dXJuIHN1cGVyLmVHZXQoZmVhdHVyZUlELCByZXNvbHZlLCBjb3JlVHlwZSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgZVNldChpbnQgZmVhdHVyZUlELCBPYmplY3QgbmV3VmFsdWUpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJCWNhc2UgQ29tbW9uUGFja2FnZS5TVFJJTkdfVkFMVUVfX1ZBTFVFOgorCQkJCXNldFZhbHVlKChTdHJpbmcpbmV3VmFsdWUpOworCQkJCXJldHVybjsKKwkJfQorCQlzdXBlci5lU2V0KGZlYXR1cmVJRCwgbmV3VmFsdWUpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGVVbnNldChpbnQgZmVhdHVyZUlEKSB7CisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7CisJCQljYXNlIENvbW1vblBhY2thZ2UuU1RSSU5HX1ZBTFVFX19WQUxVRToKKwkJCQlzZXRWYWx1ZShWQUxVRV9FREVGQVVMVCk7CisJCQkJcmV0dXJuOworCQl9CisJCXN1cGVyLmVVbnNldChmZWF0dXJlSUQpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBib29sZWFuIGVJc1NldChpbnQgZmVhdHVyZUlEKSB7CisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7CisJCQljYXNlIENvbW1vblBhY2thZ2UuU1RSSU5HX1ZBTFVFX19WQUxVRToKKwkJCQlyZXR1cm4gVkFMVUVfRURFRkFVTFQgPT0gbnVsbCA/IHZhbHVlICE9IG51bGwgOiAhVkFMVUVfRURFRkFVTFQuZXF1YWxzKHZhbHVlKTsKKwkJfQorCQlyZXR1cm4gc3VwZXIuZUlzU2V0KGZlYXR1cmVJRCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIFN0cmluZyB0b1N0cmluZygpIHsKKwkJaWYgKGVJc1Byb3h5KCkpIHJldHVybiBzdXBlci50b1N0cmluZygpOworCisJCVN0cmluZ0J1ZmZlciByZXN1bHQgPSBuZXcgU3RyaW5nQnVmZmVyKHN1cGVyLnRvU3RyaW5nKCkpOworCQlyZXN1bHQuYXBwZW5kKCIgKHZhbHVlOiAiKTsgLy8kTk9OLU5MUy0xJAorCQlyZXN1bHQuYXBwZW5kKHZhbHVlKTsKKwkJcmVzdWx0LmFwcGVuZCgnKScpOworCQlyZXR1cm4gcmVzdWx0LnRvU3RyaW5nKCk7CisJfQorCisJcHJpdmF0ZSBJZGVudGlmaWFibGUgZmluZElkZW50aWZpYWJsZShFT2JqZWN0IG8pIHsKKwkJaWYobyBpbnN0YW5jZW9mIElkZW50aWZpYWJsZSkgcmV0dXJuIChJZGVudGlmaWFibGUpbzsKKwkJaWYoby5lQ29udGFpbmVyKCkgIT0gbnVsbCkgcmV0dXJuIGZpbmRJZGVudGlmaWFibGUoby5lQ29udGFpbmVyKCkpOworCQlyZXR1cm4gbnVsbDsKKwl9CisJLyoqCisJICogTmVlZCB0byBvdmVycmlkZSB0byBtYWtlIHN1cmUgbW9kaWZpZXJzIGNhbiBmaW5kCisJICovCisJcHVibGljIGJvb2xlYW4gdmFsdWVFcXVhbHMoU3RyaW5nVmFsdWVJbXBsIHN2aSkgeworCQlJZGVudGlmaWFibGUgaWQgPSBmaW5kSWRlbnRpZmlhYmxlKHN2aSk7CisJCUlkZW50aWZpYWJsZSBpZDIgPSBmaW5kSWRlbnRpZmlhYmxlKHRoaXMpOworCQlpZighaWQuZ2V0VVJJKCkuZXF1YWxzKGlkMi5nZXRVUkkoKSkpIHJldHVybiBmYWxzZTsKKwkJCisJCS8vIE5lZWQgdG8gbWFrZSBzdXJlIHRoYXQgdGhlIHBhdGggZnJvbSB0aGUgaWRlbnRpZmlhYmxlCisJCS8vIHRvIGhlcmUgaXMgdGhlIHNhbWUKKwkJLy8uLi4gdG9kbworCQlyZXR1cm4gKHN1cGVyLmVxdWFscyhzdmkpKTsKKwl9Cit9IC8vU3RyaW5nVmFsdWVJbXBsCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2NvbW1vbi9pbXBsL1N0cmluZ1ZhbHVlTGlzdEltcGwuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvY29tbW9uL2ltcGwvU3RyaW5nVmFsdWVMaXN0SW1wbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ0OTIyYTUKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2NvbW1vbi9pbXBsL1N0cmluZ1ZhbHVlTGlzdEltcGwuamF2YQpAQCAtMCwwICsxLDE1NiBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLmltcGw7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTAgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb25DaGFpbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuRUxpc3Q7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzczsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuSW50ZXJuYWxFT2JqZWN0OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5pbXBsLkVPYmplY3RJbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS51dGlsLkVPYmplY3RDb250YWlubWVudEVMaXN0OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS51dGlsLkludGVybmFsRUxpc3Q7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5Db21tb25QYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uU3RyaW5nVmFsdWU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5TdHJpbmdWYWx1ZUxpc3Q7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIEFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5TdHJpbmcgVmFsdWUgTGlzdDwvYj48L2VtPicuCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIDxwPgorICogVGhlIGZvbGxvd2luZyBmZWF0dXJlcyBhcmUgaW1wbGVtZW50ZWQ6CisgKiA8dWw+CisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5pbXBsLlN0cmluZ1ZhbHVlTGlzdEltcGwjZ2V0VmFsdWVzIDxlbT5WYWx1ZXM8L2VtPn08L2xpPgorICogPC91bD4KKyAqIDwvcD4KKyAqCisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBTdHJpbmdWYWx1ZUxpc3RJbXBsIGV4dGVuZHMgRU9iamVjdEltcGwgaW1wbGVtZW50cyBTdHJpbmdWYWx1ZUxpc3QgeworCS8qKgorCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldFZhbHVlcygpIDxlbT5WYWx1ZXM8L2VtPn0nIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZ2V0VmFsdWVzKCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgRUxpc3Q8U3RyaW5nVmFsdWU+IHZhbHVlczsKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBTdHJpbmdWYWx1ZUxpc3RJbXBsKCkgeworCQlzdXBlcigpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCBFQ2xhc3MgZVN0YXRpY0NsYXNzKCkgeworCQlyZXR1cm4gQ29tbW9uUGFja2FnZS5MaXRlcmFscy5TVFJJTkdfVkFMVUVfTElTVDsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUxpc3Q8U3RyaW5nVmFsdWU+IGdldFZhbHVlcygpIHsKKwkJaWYgKHZhbHVlcyA9PSBudWxsKSB7CisJCQl2YWx1ZXMgPSBuZXcgRU9iamVjdENvbnRhaW5tZW50RUxpc3Q8U3RyaW5nVmFsdWU+KFN0cmluZ1ZhbHVlLmNsYXNzLCB0aGlzLCBDb21tb25QYWNrYWdlLlNUUklOR19WQUxVRV9MSVNUX19WQUxVRVMpOworCQl9CisJCXJldHVybiB2YWx1ZXM7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIE5vdGlmaWNhdGlvbkNoYWluIGVJbnZlcnNlUmVtb3ZlKEludGVybmFsRU9iamVjdCBvdGhlckVuZCwgaW50IGZlYXR1cmVJRCwgTm90aWZpY2F0aW9uQ2hhaW4gbXNncykgeworCQlzd2l0Y2ggKGZlYXR1cmVJRCkgeworCQkJY2FzZSBDb21tb25QYWNrYWdlLlNUUklOR19WQUxVRV9MSVNUX19WQUxVRVM6CisJCQkJcmV0dXJuICgoSW50ZXJuYWxFTGlzdDw/PilnZXRWYWx1ZXMoKSkuYmFzaWNSZW1vdmUob3RoZXJFbmQsIG1zZ3MpOworCQl9CisJCXJldHVybiBzdXBlci5lSW52ZXJzZVJlbW92ZShvdGhlckVuZCwgZmVhdHVyZUlELCBtc2dzKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgT2JqZWN0IGVHZXQoaW50IGZlYXR1cmVJRCwgYm9vbGVhbiByZXNvbHZlLCBib29sZWFuIGNvcmVUeXBlKSB7CisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7CisJCQljYXNlIENvbW1vblBhY2thZ2UuU1RSSU5HX1ZBTFVFX0xJU1RfX1ZBTFVFUzoKKwkJCQlyZXR1cm4gZ2V0VmFsdWVzKCk7CisJCX0KKwkJcmV0dXJuIHN1cGVyLmVHZXQoZmVhdHVyZUlELCByZXNvbHZlLCBjb3JlVHlwZSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQFN1cHByZXNzV2FybmluZ3MoInVuY2hlY2tlZCIpCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgZVNldChpbnQgZmVhdHVyZUlELCBPYmplY3QgbmV3VmFsdWUpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJCWNhc2UgQ29tbW9uUGFja2FnZS5TVFJJTkdfVkFMVUVfTElTVF9fVkFMVUVTOgorCQkJCWdldFZhbHVlcygpLmNsZWFyKCk7CisJCQkJZ2V0VmFsdWVzKCkuYWRkQWxsKChDb2xsZWN0aW9uPD8gZXh0ZW5kcyBTdHJpbmdWYWx1ZT4pbmV3VmFsdWUpOworCQkJCXJldHVybjsKKwkJfQorCQlzdXBlci5lU2V0KGZlYXR1cmVJRCwgbmV3VmFsdWUpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGVVbnNldChpbnQgZmVhdHVyZUlEKSB7CisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7CisJCQljYXNlIENvbW1vblBhY2thZ2UuU1RSSU5HX1ZBTFVFX0xJU1RfX1ZBTFVFUzoKKwkJCQlnZXRWYWx1ZXMoKS5jbGVhcigpOworCQkJCXJldHVybjsKKwkJfQorCQlzdXBlci5lVW5zZXQoZmVhdHVyZUlEKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgYm9vbGVhbiBlSXNTZXQoaW50IGZlYXR1cmVJRCkgeworCQlzd2l0Y2ggKGZlYXR1cmVJRCkgeworCQkJY2FzZSBDb21tb25QYWNrYWdlLlNUUklOR19WQUxVRV9MSVNUX19WQUxVRVM6CisJCQkJcmV0dXJuIHZhbHVlcyAhPSBudWxsICYmICF2YWx1ZXMuaXNFbXB0eSgpOworCQl9CisJCXJldHVybiBzdXBlci5lSXNTZXQoZmVhdHVyZUlEKTsKKwl9CisKK30gLy9TdHJpbmdWYWx1ZUxpc3RJbXBsCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2NvbW1vbi9wcm92aWRlci9Db21tb25FZGl0UGx1Z2luLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2NvbW1vbi9wcm92aWRlci9Db21tb25FZGl0UGx1Z2luLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDkwMGRiMwotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvY29tbW9uL3Byb3ZpZGVyL0NvbW1vbkVkaXRQbHVnaW4uamF2YQpAQCAtMCwwICsxLDk3IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24ucHJvdmlkZXI7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIAorICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiAKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdCAKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sIAorICogCisgKiBDb250cmlidXRvcnM6IAorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiAKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5FTUZQbHVnaW47CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51aS5FY2xpcHNlVUlQbHVnaW47CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlJlc291cmNlTG9jYXRvcjsKKworLyoqCisgKiBUaGlzIGlzIHRoZSBjZW50cmFsIHNpbmdsZXRvbiBmb3IgdGhlIENvbW1vbiBlZGl0b3IgcGx1Z2luLgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgZmluYWwgY2xhc3MgQ29tbW9uRWRpdFBsdWdpbiBleHRlbmRzIEVNRlBsdWdpbiB7CisJLyoqCisJICogS2VlcCB0cmFjayBvZiB0aGUgc2luZ2xldG9uLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgQ29tbW9uRWRpdFBsdWdpbiBJTlNUQU5DRSA9IG5ldyBDb21tb25FZGl0UGx1Z2luKCk7CisKKwkvKioKKwkgKiBLZWVwIHRyYWNrIG9mIHRoZSBzaW5nbGV0b24uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJpdmF0ZSBzdGF0aWMgSW1wbGVtZW50YXRpb24gcGx1Z2luOworCisJLyoqCisJICogQ3JlYXRlIHRoZSBpbnN0YW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQ29tbW9uRWRpdFBsdWdpbigpIHsKKwkJc3VwZXIKKwkJICAobmV3IFJlc291cmNlTG9jYXRvciBbXSB7CisJCSAgIH0pOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIHNpbmdsZXRvbiBpbnN0YW5jZSBvZiB0aGUgRWNsaXBzZSBwbHVnaW4uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBzaW5nbGV0b24gaW5zdGFuY2UuCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBSZXNvdXJjZUxvY2F0b3IgZ2V0UGx1Z2luUmVzb3VyY2VMb2NhdG9yKCkgeworCQlyZXR1cm4gcGx1Z2luOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIHNpbmdsZXRvbiBpbnN0YW5jZSBvZiB0aGUgRWNsaXBzZSBwbHVnaW4uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBzaW5nbGV0b24gaW5zdGFuY2UuCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBzdGF0aWMgSW1wbGVtZW50YXRpb24gZ2V0UGx1Z2luKCkgeworCQlyZXR1cm4gcGx1Z2luOworCX0KKworCS8qKgorCSAqIFRoZSBhY3R1YWwgaW1wbGVtZW50YXRpb24gb2YgdGhlIEVjbGlwc2UgPGI+UGx1Z2luPC9iPi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGNsYXNzIEltcGxlbWVudGF0aW9uIGV4dGVuZHMgRWNsaXBzZVVJUGx1Z2luIHsKKwkJLyoqCisJCSAqIENyZWF0ZXMgYW4gaW5zdGFuY2UuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlwdWJsaWMgSW1wbGVtZW50YXRpb24oKSB7CisJCQlzdXBlcigpOworCisJCQkvLyBSZW1lbWJlciB0aGUgc3RhdGljIGluc3RhbmNlLgorCQkJLy8KKwkJCXBsdWdpbiA9IHRoaXM7CisJCX0KKwl9CisKK30KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvY29tbW9uL3Byb3ZpZGVyL0NvbW1vbkl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5LmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2NvbW1vbi9wcm92aWRlci9Db21tb25JdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQwNzQ1OWEKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2NvbW1vbi9wcm92aWRlci9Db21tb25JdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeS5qYXZhCkBAIC0wLDAgKzEsMzUxIEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24ucHJvdmlkZXI7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIAorICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiAKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdCAKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sIAorICogCisgKiBDb250cmlidXRvcnM6IAorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiAKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LkFkYXB0ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkNoYW5nZU5vdGlmaWVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkNvbXBvc2VhYmxlQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuQ29tcG9zZWRBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JQ2hhbmdlTm90aWZpZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSURpc3Bvc2FibGU7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUVkaXRpbmdEb21haW5JdGVtUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1MYWJlbFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtUHJvcGVydHlTb3VyY2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSU5vdGlmeUNoYW5nZWRMaXN0ZW5lcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JU3RydWN0dXJlZEl0ZW1Db250ZW50UHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVRyZWVJdGVtQ29udGVudFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24udXRpbC5Db21tb25BZGFwdGVyRmFjdG9yeTsKKworLyoqCisgKiBUaGlzIGlzIHRoZSBmYWN0b3J5IHRoYXQgaXMgdXNlZCB0byBwcm92aWRlIHRoZSBpbnRlcmZhY2VzIG5lZWRlZCB0byBzdXBwb3J0IFZpZXdlcnMuCisgKiBUaGUgYWRhcHRlcnMgZ2VuZXJhdGVkIGJ5IHRoaXMgZmFjdG9yeSBjb252ZXJ0IEVNRiBhZGFwdGVyIG5vdGlmaWNhdGlvbnMgaW50byBjYWxscyB0byB7QGxpbmsgI2ZpcmVOb3RpZnlDaGFuZ2VkIGZpcmVOb3RpZnlDaGFuZ2VkfS4KKyAqIFRoZSBhZGFwdGVycyBhbHNvIHN1cHBvcnQgRWNsaXBzZSBwcm9wZXJ0eSBzaGVldHMuCisgKiBOb3RlIHRoYXQgbW9zdCBvZiB0aGUgYWRhcHRlcnMgYXJlIHNoYXJlZCBhbW9uZyBtdWx0aXBsZSBpbnN0YW5jZXMuCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBDb21tb25JdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSBleHRlbmRzIENvbW1vbkFkYXB0ZXJGYWN0b3J5IGltcGxlbWVudHMgQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSwgSUNoYW5nZU5vdGlmaWVyLCBJRGlzcG9zYWJsZSB7CisJLyoqCisJICogVGhpcyBrZWVwcyB0cmFjayBvZiB0aGUgcm9vdCBhZGFwdGVyIGZhY3RvcnkgdGhhdCBkZWxlZ2F0ZXMgdG8gdGhpcyBhZGFwdGVyIGZhY3RvcnkuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIENvbXBvc2VkQWRhcHRlckZhY3RvcnkgcGFyZW50QWRhcHRlckZhY3Rvcnk7CisKKwkvKioKKwkgKiBUaGlzIGlzIHVzZWQgdG8gaW1wbGVtZW50IHtAbGluayBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JQ2hhbmdlTm90aWZpZXJ9LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBJQ2hhbmdlTm90aWZpZXIgY2hhbmdlTm90aWZpZXIgPSBuZXcgQ2hhbmdlTm90aWZpZXIoKTsKKworCS8qKgorCSAqIFRoaXMga2VlcHMgdHJhY2sgb2YgYWxsIHRoZSBzdXBwb3J0ZWQgdHlwZXMgY2hlY2tlZCBieSB7QGxpbmsgI2lzRmFjdG9yeUZvclR5cGUgaXNGYWN0b3J5Rm9yVHlwZX0uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIENvbGxlY3Rpb248T2JqZWN0PiBzdXBwb3J0ZWRUeXBlcyA9IG5ldyBBcnJheUxpc3Q8T2JqZWN0PigpOworCisJLyoqCisJICogVGhpcyBjb25zdHJ1Y3RzIGFuIGluc3RhbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBDb21tb25JdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSgpIHsKKwkJc3VwcG9ydGVkVHlwZXMuYWRkKElFZGl0aW5nRG9tYWluSXRlbVByb3ZpZGVyLmNsYXNzKTsKKwkJc3VwcG9ydGVkVHlwZXMuYWRkKElTdHJ1Y3R1cmVkSXRlbUNvbnRlbnRQcm92aWRlci5jbGFzcyk7CisJCXN1cHBvcnRlZFR5cGVzLmFkZChJVHJlZUl0ZW1Db250ZW50UHJvdmlkZXIuY2xhc3MpOworCQlzdXBwb3J0ZWRUeXBlcy5hZGQoSUl0ZW1MYWJlbFByb3ZpZGVyLmNsYXNzKTsKKwkJc3VwcG9ydGVkVHlwZXMuYWRkKElJdGVtUHJvcGVydHlTb3VyY2UuY2xhc3MpOworCX0KKworCS8qKgorCSAqIFRoaXMga2VlcHMgdHJhY2sgb2YgdGhlIG9uZSBhZGFwdGVyIHVzZWQgZm9yIGFsbCB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5EdWJsaW5Db3JlfSBpbnN0YW5jZXMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIER1YmxpbkNvcmVJdGVtUHJvdmlkZXIgZHVibGluQ29yZUl0ZW1Qcm92aWRlcjsKKworCS8qKgorCSAqIFRoaXMgY3JlYXRlcyBhbiBhZGFwdGVyIGZvciBhIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLkR1YmxpbkNvcmV9LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZUR1YmxpbkNvcmVBZGFwdGVyKCkgeworCQlpZiAoZHVibGluQ29yZUl0ZW1Qcm92aWRlciA9PSBudWxsKSB7CisJCQlkdWJsaW5Db3JlSXRlbVByb3ZpZGVyID0gbmV3IER1YmxpbkNvcmVJdGVtUHJvdmlkZXIodGhpcyk7CisJCX0KKworCQlyZXR1cm4gZHVibGluQ29yZUl0ZW1Qcm92aWRlcjsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGtlZXBzIHRyYWNrIG9mIHRoZSBvbmUgYWRhcHRlciB1c2VkIGZvciBhbGwge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uSWRlbnRpZmlhYmxlRmlsdGVyfSBpbnN0YW5jZXMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIElkZW50aWZpYWJsZUZpbHRlckl0ZW1Qcm92aWRlciBpZGVudGlmaWFibGVGaWx0ZXJJdGVtUHJvdmlkZXI7CisKKwkvKioKKwkgKiBUaGlzIGNyZWF0ZXMgYW4gYWRhcHRlciBmb3IgYSB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5JZGVudGlmaWFibGVGaWx0ZXJ9LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZUlkZW50aWZpYWJsZUZpbHRlckFkYXB0ZXIoKSB7CisJCWlmIChpZGVudGlmaWFibGVGaWx0ZXJJdGVtUHJvdmlkZXIgPT0gbnVsbCkgeworCQkJaWRlbnRpZmlhYmxlRmlsdGVySXRlbVByb3ZpZGVyID0gbmV3IElkZW50aWZpYWJsZUZpbHRlckl0ZW1Qcm92aWRlcih0aGlzKTsKKwkJfQorCisJCXJldHVybiBpZGVudGlmaWFibGVGaWx0ZXJJdGVtUHJvdmlkZXI7CisJfQorCisJLyoqCisJICogVGhpcyBrZWVwcyB0cmFjayBvZiB0aGUgb25lIGFkYXB0ZXIgdXNlZCBmb3IgYWxsIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLkRvdWJsZVZhbHVlTGlzdH0gaW5zdGFuY2VzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBEb3VibGVWYWx1ZUxpc3RJdGVtUHJvdmlkZXIgZG91YmxlVmFsdWVMaXN0SXRlbVByb3ZpZGVyOworCisJLyoqCisJICogVGhpcyBjcmVhdGVzIGFuIGFkYXB0ZXIgZm9yIGEge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uRG91YmxlVmFsdWVMaXN0fS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVEb3VibGVWYWx1ZUxpc3RBZGFwdGVyKCkgeworCQlpZiAoZG91YmxlVmFsdWVMaXN0SXRlbVByb3ZpZGVyID09IG51bGwpIHsKKwkJCWRvdWJsZVZhbHVlTGlzdEl0ZW1Qcm92aWRlciA9IG5ldyBEb3VibGVWYWx1ZUxpc3RJdGVtUHJvdmlkZXIodGhpcyk7CisJCX0KKworCQlyZXR1cm4gZG91YmxlVmFsdWVMaXN0SXRlbVByb3ZpZGVyOworCX0KKworCS8qKgorCSAqIFRoaXMga2VlcHMgdHJhY2sgb2YgdGhlIG9uZSBhZGFwdGVyIHVzZWQgZm9yIGFsbCB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5Eb3VibGVWYWx1ZU1hdHJpeH0gaW5zdGFuY2VzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBEb3VibGVWYWx1ZU1hdHJpeEl0ZW1Qcm92aWRlciBkb3VibGVWYWx1ZU1hdHJpeEl0ZW1Qcm92aWRlcjsKKworCS8qKgorCSAqIFRoaXMgY3JlYXRlcyBhbiBhZGFwdGVyIGZvciBhIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLkRvdWJsZVZhbHVlTWF0cml4fS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVEb3VibGVWYWx1ZU1hdHJpeEFkYXB0ZXIoKSB7CisJCWlmIChkb3VibGVWYWx1ZU1hdHJpeEl0ZW1Qcm92aWRlciA9PSBudWxsKSB7CisJCQlkb3VibGVWYWx1ZU1hdHJpeEl0ZW1Qcm92aWRlciA9IG5ldyBEb3VibGVWYWx1ZU1hdHJpeEl0ZW1Qcm92aWRlcih0aGlzKTsKKwkJfQorCisJCXJldHVybiBkb3VibGVWYWx1ZU1hdHJpeEl0ZW1Qcm92aWRlcjsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGtlZXBzIHRyYWNrIG9mIHRoZSBvbmUgYWRhcHRlciB1c2VkIGZvciBhbGwge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uRG91YmxlVmFsdWV9IGluc3RhbmNlcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgRG91YmxlVmFsdWVJdGVtUHJvdmlkZXIgZG91YmxlVmFsdWVJdGVtUHJvdmlkZXI7CisKKwkvKioKKwkgKiBUaGlzIGNyZWF0ZXMgYW4gYWRhcHRlciBmb3IgYSB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5Eb3VibGVWYWx1ZX0uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlRG91YmxlVmFsdWVBZGFwdGVyKCkgeworCQlpZiAoZG91YmxlVmFsdWVJdGVtUHJvdmlkZXIgPT0gbnVsbCkgeworCQkJZG91YmxlVmFsdWVJdGVtUHJvdmlkZXIgPSBuZXcgRG91YmxlVmFsdWVJdGVtUHJvdmlkZXIodGhpcyk7CisJCX0KKworCQlyZXR1cm4gZG91YmxlVmFsdWVJdGVtUHJvdmlkZXI7CisJfQorCisJLyoqCisJICogVGhpcyBrZWVwcyB0cmFjayBvZiB0aGUgb25lIGFkYXB0ZXIgdXNlZCBmb3IgYWxsIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLlN0cmluZ1ZhbHVlTGlzdH0gaW5zdGFuY2VzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBTdHJpbmdWYWx1ZUxpc3RJdGVtUHJvdmlkZXIgc3RyaW5nVmFsdWVMaXN0SXRlbVByb3ZpZGVyOworCisJLyoqCisJICogVGhpcyBjcmVhdGVzIGFuIGFkYXB0ZXIgZm9yIGEge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uU3RyaW5nVmFsdWVMaXN0fS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVTdHJpbmdWYWx1ZUxpc3RBZGFwdGVyKCkgeworCQlpZiAoc3RyaW5nVmFsdWVMaXN0SXRlbVByb3ZpZGVyID09IG51bGwpIHsKKwkJCXN0cmluZ1ZhbHVlTGlzdEl0ZW1Qcm92aWRlciA9IG5ldyBTdHJpbmdWYWx1ZUxpc3RJdGVtUHJvdmlkZXIodGhpcyk7CisJCX0KKworCQlyZXR1cm4gc3RyaW5nVmFsdWVMaXN0SXRlbVByb3ZpZGVyOworCX0KKworCS8qKgorCSAqIFRoaXMga2VlcHMgdHJhY2sgb2YgdGhlIG9uZSBhZGFwdGVyIHVzZWQgZm9yIGFsbCB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5TdHJpbmdWYWx1ZX0gaW5zdGFuY2VzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBTdHJpbmdWYWx1ZUl0ZW1Qcm92aWRlciBzdHJpbmdWYWx1ZUl0ZW1Qcm92aWRlcjsKKworCS8qKgorCSAqIFRoaXMgY3JlYXRlcyBhbiBhZGFwdGVyIGZvciBhIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLlN0cmluZ1ZhbHVlfS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVTdHJpbmdWYWx1ZUFkYXB0ZXIoKSB7CisJCWlmIChzdHJpbmdWYWx1ZUl0ZW1Qcm92aWRlciA9PSBudWxsKSB7CisJCQlzdHJpbmdWYWx1ZUl0ZW1Qcm92aWRlciA9IG5ldyBTdHJpbmdWYWx1ZUl0ZW1Qcm92aWRlcih0aGlzKTsKKwkJfQorCisJCXJldHVybiBzdHJpbmdWYWx1ZUl0ZW1Qcm92aWRlcjsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgdGhlIHJvb3QgYWRhcHRlciBmYWN0b3J5IHRoYXQgY29udGFpbnMgdGhpcyBmYWN0b3J5LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBDb21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5IGdldFJvb3RBZGFwdGVyRmFjdG9yeSgpIHsKKwkJcmV0dXJuIHBhcmVudEFkYXB0ZXJGYWN0b3J5ID09IG51bGwgPyB0aGlzIDogcGFyZW50QWRhcHRlckZhY3RvcnkuZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCk7CisJfQorCisJLyoqCisJICogVGhpcyBzZXRzIHRoZSBjb21wb3NlZCBhZGFwdGVyIGZhY3RvcnkgdGhhdCBjb250YWlucyB0aGlzIGZhY3RvcnkuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgc2V0UGFyZW50QWRhcHRlckZhY3RvcnkoQ29tcG9zZWRBZGFwdGVyRmFjdG9yeSBwYXJlbnRBZGFwdGVyRmFjdG9yeSkgeworCQl0aGlzLnBhcmVudEFkYXB0ZXJGYWN0b3J5ID0gcGFyZW50QWRhcHRlckZhY3Rvcnk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIGJvb2xlYW4gaXNGYWN0b3J5Rm9yVHlwZShPYmplY3QgdHlwZSkgeworCQlyZXR1cm4gc3VwcG9ydGVkVHlwZXMuY29udGFpbnModHlwZSkgfHwgc3VwZXIuaXNGYWN0b3J5Rm9yVHlwZSh0eXBlKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGltcGxlbWVudGF0aW9uIHN1YnN0aXR1dGVzIHRoZSBmYWN0b3J5IGl0c2VsZiBhcyB0aGUga2V5IGZvciB0aGUgYWRhcHRlci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgQWRhcHRlciBhZGFwdChOb3RpZmllciBub3RpZmllciwgT2JqZWN0IHR5cGUpIHsKKwkJcmV0dXJuIHN1cGVyLmFkYXB0KG5vdGlmaWVyLCB0aGlzKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAU3VwcHJlc3NXYXJuaW5ncygidW5jaGVja2VkIikKKwlAT3ZlcnJpZGUKKwlwdWJsaWMgT2JqZWN0IGFkYXB0KE9iamVjdCBvYmplY3QsIE9iamVjdCB0eXBlKSB7CisJCWlmIChpc0ZhY3RvcnlGb3JUeXBlKHR5cGUpKSB7CisJCQlPYmplY3QgYWRhcHRlciA9IHN1cGVyLmFkYXB0KG9iamVjdCwgdHlwZSk7CisJCQlpZiAoISh0eXBlIGluc3RhbmNlb2YgQ2xhc3M8Pz4pIHx8ICgoKENsYXNzPD8+KXR5cGUpLmlzSW5zdGFuY2UoYWRhcHRlcikpKSB7CisJCQkJcmV0dXJuIGFkYXB0ZXI7CisJCQl9CisJCX0KKworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFkZHMgYSBsaXN0ZW5lci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBhZGRMaXN0ZW5lcihJTm90aWZ5Q2hhbmdlZExpc3RlbmVyIG5vdGlmeUNoYW5nZWRMaXN0ZW5lcikgeworCQljaGFuZ2VOb3RpZmllci5hZGRMaXN0ZW5lcihub3RpZnlDaGFuZ2VkTGlzdGVuZXIpOworCX0KKworCS8qKgorCSAqIFRoaXMgcmVtb3ZlcyBhIGxpc3RlbmVyLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIHJlbW92ZUxpc3RlbmVyKElOb3RpZnlDaGFuZ2VkTGlzdGVuZXIgbm90aWZ5Q2hhbmdlZExpc3RlbmVyKSB7CisJCWNoYW5nZU5vdGlmaWVyLnJlbW92ZUxpc3RlbmVyKG5vdGlmeUNoYW5nZWRMaXN0ZW5lcik7CisJfQorCisJLyoqCisJICogVGhpcyBkZWxlZ2F0ZXMgdG8ge0BsaW5rICNjaGFuZ2VOb3RpZmllcn0gYW5kIHRvIHtAbGluayAjcGFyZW50QWRhcHRlckZhY3Rvcnl9LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIGZpcmVOb3RpZnlDaGFuZ2VkKE5vdGlmaWNhdGlvbiBub3RpZmljYXRpb24pIHsKKwkJY2hhbmdlTm90aWZpZXIuZmlyZU5vdGlmeUNoYW5nZWQobm90aWZpY2F0aW9uKTsKKworCQlpZiAocGFyZW50QWRhcHRlckZhY3RvcnkgIT0gbnVsbCkgeworCQkJcGFyZW50QWRhcHRlckZhY3RvcnkuZmlyZU5vdGlmeUNoYW5nZWQobm90aWZpY2F0aW9uKTsKKwkJfQorCX0KKworCS8qKgorCSAqIFRoaXMgZGlzcG9zZXMgYWxsIG9mIHRoZSBpdGVtIHByb3ZpZGVycyBjcmVhdGVkIGJ5IHRoaXMgZmFjdG9yeS4gCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgZGlzcG9zZSgpIHsKKwkJaWYgKGR1YmxpbkNvcmVJdGVtUHJvdmlkZXIgIT0gbnVsbCkgZHVibGluQ29yZUl0ZW1Qcm92aWRlci5kaXNwb3NlKCk7CisJCWlmIChpZGVudGlmaWFibGVGaWx0ZXJJdGVtUHJvdmlkZXIgIT0gbnVsbCkgaWRlbnRpZmlhYmxlRmlsdGVySXRlbVByb3ZpZGVyLmRpc3Bvc2UoKTsKKwkJaWYgKGRvdWJsZVZhbHVlTGlzdEl0ZW1Qcm92aWRlciAhPSBudWxsKSBkb3VibGVWYWx1ZUxpc3RJdGVtUHJvdmlkZXIuZGlzcG9zZSgpOworCQlpZiAoZG91YmxlVmFsdWVNYXRyaXhJdGVtUHJvdmlkZXIgIT0gbnVsbCkgZG91YmxlVmFsdWVNYXRyaXhJdGVtUHJvdmlkZXIuZGlzcG9zZSgpOworCQlpZiAoZG91YmxlVmFsdWVJdGVtUHJvdmlkZXIgIT0gbnVsbCkgZG91YmxlVmFsdWVJdGVtUHJvdmlkZXIuZGlzcG9zZSgpOworCQlpZiAoc3RyaW5nVmFsdWVMaXN0SXRlbVByb3ZpZGVyICE9IG51bGwpIHN0cmluZ1ZhbHVlTGlzdEl0ZW1Qcm92aWRlci5kaXNwb3NlKCk7CisJCWlmIChzdHJpbmdWYWx1ZUl0ZW1Qcm92aWRlciAhPSBudWxsKSBzdHJpbmdWYWx1ZUl0ZW1Qcm92aWRlci5kaXNwb3NlKCk7CisJfQorCit9CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2NvbW1vbi9wcm92aWRlci9Db3JlRWRpdFBsdWdpbi5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9jb21tb24vcHJvdmlkZXIvQ29yZUVkaXRQbHVnaW4uamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMDQ1NGZmCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9jb21tb24vcHJvdmlkZXIvQ29yZUVkaXRQbHVnaW4uamF2YQpAQCAtMCwwICsxLDk3IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24ucHJvdmlkZXI7CisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAKKyAqIENvcHlyaWdodCAoYykgMjAwNiwgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4gCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIAorICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wIAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQgCisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbCAKKyAqIAorICogQ29udHJpYnV0b3JzOiAKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24uRU1GUGx1Z2luOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5SZXNvdXJjZUxvY2F0b3I7CisKKy8qKgorICogVGhpcyBpcyB0aGUgY2VudHJhbCBzaW5nbGV0b24gZm9yIHRoZSBDb3JlIGVkaXQgcGx1Z2luLgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgZmluYWwgY2xhc3MgQ29yZUVkaXRQbHVnaW4gZXh0ZW5kcyBFTUZQbHVnaW4geworCS8qKgorCSAqIEtlZXAgdHJhY2sgb2YgdGhlIHNpbmdsZXRvbi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIENvcmVFZGl0UGx1Z2luIElOU1RBTkNFID0gbmV3IENvcmVFZGl0UGx1Z2luKCk7CisKKwkvKioKKwkgKiBLZWVwIHRyYWNrIG9mIHRoZSBzaW5nbGV0b24uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJpdmF0ZSBzdGF0aWMgSW1wbGVtZW50YXRpb24gcGx1Z2luOworCisJLyoqCisJICogQ3JlYXRlIHRoZSBpbnN0YW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJcHVibGljIENvcmVFZGl0UGx1Z2luKCkgeworCQlzdXBlcgorCQkgIChuZXcgUmVzb3VyY2VMb2NhdG9yIFtdIHsKKwkJICAgIC8vIEVjb3JlRWRpdFBsdWdpbi5JTlNUQU5DRSwKKwkJICAgfSk7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgc2luZ2xldG9uIGluc3RhbmNlIG9mIHRoZSBFY2xpcHNlIHBsdWdpbi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIHNpbmdsZXRvbiBpbnN0YW5jZS4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIFJlc291cmNlTG9jYXRvciBnZXRQbHVnaW5SZXNvdXJjZUxvY2F0b3IoKSB7CisJCXJldHVybiBwbHVnaW47CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgc2luZ2xldG9uIGluc3RhbmNlIG9mIHRoZSBFY2xpcHNlIHBsdWdpbi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIHNpbmdsZXRvbiBpbnN0YW5jZS4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHN0YXRpYyBJbXBsZW1lbnRhdGlvbiBnZXRQbHVnaW4oKSB7CisJCXJldHVybiBwbHVnaW47CisJfQorCisJLyoqCisJICogVGhlIGFjdHVhbCBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgRWNsaXBzZSA8Yj5QbHVnaW48L2I+LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBzdGF0aWMgY2xhc3MgSW1wbGVtZW50YXRpb24gZXh0ZW5kcyBFY2xpcHNlUGx1Z2luIHsKKwkJLyoqCisJCSAqIENyZWF0ZXMgYW4gaW5zdGFuY2UuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlwdWJsaWMgSW1wbGVtZW50YXRpb24oKSB7CisJCQlzdXBlcigpOworCisJCQkvLyBSZW1lbWJlciB0aGUgc3RhdGljIGluc3RhbmNlLgorCQkJLy8KKwkJCXBsdWdpbiA9IHRoaXM7CisJCX0KKwl9CisKK30KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvY29tbW9uL3Byb3ZpZGVyL0RvdWJsZVZhbHVlSXRlbVByb3ZpZGVyLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2NvbW1vbi9wcm92aWRlci9Eb3VibGVWYWx1ZUl0ZW1Qcm92aWRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJmZjdmZTQKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2NvbW1vbi9wcm92aWRlci9Eb3VibGVWYWx1ZUl0ZW1Qcm92aWRlci5qYXZhCkBAIC0wLDAgKzEsMTg3IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24ucHJvdmlkZXI7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTAgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LkFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuUmVzb3VyY2VMb2NhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkNvbXBvc2VhYmxlQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUVkaXRpbmdEb21haW5JdGVtUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1MYWJlbFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtUHJvcGVydHlEZXNjcmlwdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtUHJvcGVydHlTb3VyY2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVN0cnVjdHVyZWRJdGVtQ29udGVudFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklUcmVlSXRlbUNvbnRlbnRQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JdGVtUHJvcGVydHlEZXNjcmlwdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkl0ZW1Qcm92aWRlckFkYXB0ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuVmlld2VyTm90aWZpY2F0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uQ29tbW9uUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLkRvdWJsZVZhbHVlOworCisvKioKKyAqIFRoaXMgaXMgdGhlIGl0ZW0gcHJvdmlkZXIgYWRhcHRlciBmb3IgYSB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5Eb3VibGVWYWx1ZX0gb2JqZWN0LgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgRG91YmxlVmFsdWVJdGVtUHJvdmlkZXIKKwlleHRlbmRzIEl0ZW1Qcm92aWRlckFkYXB0ZXIKKwlpbXBsZW1lbnRzCisJCUlFZGl0aW5nRG9tYWluSXRlbVByb3ZpZGVyLAorCQlJU3RydWN0dXJlZEl0ZW1Db250ZW50UHJvdmlkZXIsCisJCUlUcmVlSXRlbUNvbnRlbnRQcm92aWRlciwKKwkJSUl0ZW1MYWJlbFByb3ZpZGVyLAorCQlJSXRlbVByb3BlcnR5U291cmNlIHsKKwkvKioKKwkgKiBUaGlzIGNvbnN0cnVjdHMgYW4gaW5zdGFuY2UgZnJvbSBhIGZhY3RvcnkgYW5kIGEgbm90aWZpZXIuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIERvdWJsZVZhbHVlSXRlbVByb3ZpZGVyKEFkYXB0ZXJGYWN0b3J5IGFkYXB0ZXJGYWN0b3J5KSB7CisJCXN1cGVyKGFkYXB0ZXJGYWN0b3J5KTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgdGhlIHByb3BlcnR5IGRlc2NyaXB0b3JzIGZvciB0aGUgYWRhcHRlZCBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgTGlzdDxJSXRlbVByb3BlcnR5RGVzY3JpcHRvcj4gZ2V0UHJvcGVydHlEZXNjcmlwdG9ycyhPYmplY3Qgb2JqZWN0KSB7CisJCWlmIChpdGVtUHJvcGVydHlEZXNjcmlwdG9ycyA9PSBudWxsKSB7CisJCQlzdXBlci5nZXRQcm9wZXJ0eURlc2NyaXB0b3JzKG9iamVjdCk7CisKKwkJCWFkZElkZW50aWZpZXJQcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0KTsKKwkJCWFkZFZhbHVlUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCk7CisJCX0KKwkJcmV0dXJuIGl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzOworCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyBhIHByb3BlcnR5IGRlc2NyaXB0b3IgZm9yIHRoZSBJZGVudGlmaWVyIGZlYXR1cmUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgYWRkSWRlbnRpZmllclByb3BlcnR5RGVzY3JpcHRvcihPYmplY3Qgb2JqZWN0KSB7CisJCWl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzLmFkZAorCQkJKGNyZWF0ZUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IKKwkJCQkoKChDb21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5KWFkYXB0ZXJGYWN0b3J5KS5nZXRSb290QWRhcHRlckZhY3RvcnkoKSwKKwkJCQkgZ2V0UmVzb3VyY2VMb2NhdG9yKCksCisJCQkJIGdldFN0cmluZygiX1VJX0RvdWJsZVZhbHVlX2lkZW50aWZpZXJfZmVhdHVyZSIpLCAvLyROT04tTkxTLTEkCisJCQkJIGdldFN0cmluZygiX1VJX1Byb3BlcnR5RGVzY3JpcHRvcl9kZXNjcmlwdGlvbiIsICJfVUlfRG91YmxlVmFsdWVfaWRlbnRpZmllcl9mZWF0dXJlIiwgIl9VSV9Eb3VibGVWYWx1ZV90eXBlIiksIC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJCAvLyROT04tTkxTLTMkCisJCQkJIENvbW1vblBhY2thZ2UuTGl0ZXJhbHMuRE9VQkxFX1ZBTFVFX19JREVOVElGSUVSLAorCQkJCSB0cnVlLAorCQkJCSBmYWxzZSwKKwkJCQkgZmFsc2UsCisJCQkJIEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IuR0VORVJJQ19WQUxVRV9JTUFHRSwKKwkJCQkgbnVsbCwKKwkJCQkgbnVsbCkpOworCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyBhIHByb3BlcnR5IGRlc2NyaXB0b3IgZm9yIHRoZSBWYWx1ZSBmZWF0dXJlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIGFkZFZhbHVlUHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdCBvYmplY3QpIHsKKwkJaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMuYWRkCisJCQkoY3JlYXRlSXRlbVByb3BlcnR5RGVzY3JpcHRvcgorCQkJCSgoKENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnkpYWRhcHRlckZhY3RvcnkpLmdldFJvb3RBZGFwdGVyRmFjdG9yeSgpLAorCQkJCSBnZXRSZXNvdXJjZUxvY2F0b3IoKSwKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfRG91YmxlVmFsdWVfdmFsdWVfZmVhdHVyZSIpLCAvLyROT04tTkxTLTEkCisJCQkJIGdldFN0cmluZygiX1VJX1Byb3BlcnR5RGVzY3JpcHRvcl9kZXNjcmlwdGlvbiIsICJfVUlfRG91YmxlVmFsdWVfdmFsdWVfZmVhdHVyZSIsICJfVUlfRG91YmxlVmFsdWVfdHlwZSIpLCAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQgLy8kTk9OLU5MUy0zJAorCQkJCSBDb21tb25QYWNrYWdlLkxpdGVyYWxzLkRPVUJMRV9WQUxVRV9fVkFMVUUsCisJCQkJIHRydWUsCisJCQkJIGZhbHNlLAorCQkJCSBmYWxzZSwKKwkJCQkgSXRlbVByb3BlcnR5RGVzY3JpcHRvci5SRUFMX1ZBTFVFX0lNQUdFLAorCQkJCSBudWxsLAorCQkJCSBudWxsKSk7CisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIERvdWJsZVZhbHVlLmdpZi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIE9iamVjdCBnZXRJbWFnZShPYmplY3Qgb2JqZWN0KSB7CisJCXJldHVybiBvdmVybGF5SW1hZ2Uob2JqZWN0LCBnZXRSZXNvdXJjZUxvY2F0b3IoKS5nZXRJbWFnZSgiZnVsbC9jdXN0b21vYmoxNi9Eb3VibGVWYWx1ZS5naWYiKSk7IC8vJE5PTi1OTFMtMSQKKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgdGhlIGxhYmVsIHRleHQgZm9yIHRoZSBhZGFwdGVkIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgU3RyaW5nIGdldFRleHQoT2JqZWN0IG9iamVjdCkgeworCQlTdHJpbmcgbGFiZWwgPSAoKERvdWJsZVZhbHVlKW9iamVjdCkuZ2V0VmFsdWUoKSsiICgiKygoRG91YmxlVmFsdWUpb2JqZWN0KS5nZXRJZGVudGlmaWVyKCkrIikiOworCQlyZXR1cm4gbGFiZWwgPT0gbnVsbCB8fCBsYWJlbC5sZW5ndGgoKSA9PSAwID8KKwkJCWdldFN0cmluZygiX1VJX0RvdWJsZVZhbHVlX3R5cGUiKSA6IC8vJE5PTi1OTFMtMSQKKwkJCWxhYmVsOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKKwl9CisKKwkvKioKKwkgKiBUaGlzIGhhbmRsZXMgbW9kZWwgbm90aWZpY2F0aW9ucyBieSBjYWxsaW5nIHtAbGluayAjdXBkYXRlQ2hpbGRyZW59IHRvIHVwZGF0ZSBhbnkgY2FjaGVkCisJICogY2hpbGRyZW4gYW5kIGJ5IGNyZWF0aW5nIGEgdmlld2VyIG5vdGlmaWNhdGlvbiwgd2hpY2ggaXQgcGFzc2VzIHRvIHtAbGluayAjZmlyZU5vdGlmeUNoYW5nZWR9LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIG5vdGlmeUNoYW5nZWQoTm90aWZpY2F0aW9uIG5vdGlmaWNhdGlvbikgeworCQl1cGRhdGVDaGlsZHJlbihub3RpZmljYXRpb24pOworCisJCXN3aXRjaCAobm90aWZpY2F0aW9uLmdldEZlYXR1cmVJRChEb3VibGVWYWx1ZS5jbGFzcykpIHsKKwkJCWNhc2UgQ29tbW9uUGFja2FnZS5ET1VCTEVfVkFMVUVfX0lERU5USUZJRVI6CisJCQljYXNlIENvbW1vblBhY2thZ2UuRE9VQkxFX1ZBTFVFX19WQUxVRToKKwkJCQlmaXJlTm90aWZ5Q2hhbmdlZChuZXcgVmlld2VyTm90aWZpY2F0aW9uKG5vdGlmaWNhdGlvbiwgbm90aWZpY2F0aW9uLmdldE5vdGlmaWVyKCksIGZhbHNlLCB0cnVlKSk7CisJCQkJcmV0dXJuOworCQl9CisJCXN1cGVyLm5vdGlmeUNoYW5nZWQobm90aWZpY2F0aW9uKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFkZHMge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lZGl0LmNvbW1hbmQuQ29tbWFuZFBhcmFtZXRlcn1zIGRlc2NyaWJpbmcgdGhlIGNoaWxkcmVuCisJICogdGhhdCBjYW4gYmUgY3JlYXRlZCB1bmRlciB0aGlzIG9iamVjdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgdm9pZCBjb2xsZWN0TmV3Q2hpbGREZXNjcmlwdG9ycyhDb2xsZWN0aW9uPE9iamVjdD4gbmV3Q2hpbGREZXNjcmlwdG9ycywgT2JqZWN0IG9iamVjdCkgeworCQlzdXBlci5jb2xsZWN0TmV3Q2hpbGREZXNjcmlwdG9ycyhuZXdDaGlsZERlc2NyaXB0b3JzLCBvYmplY3QpOworCX0KKworCS8qKgorCSAqIFJldHVybiB0aGUgcmVzb3VyY2UgbG9jYXRvciBmb3IgdGhpcyBpdGVtIHByb3ZpZGVyJ3MgcmVzb3VyY2VzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBSZXNvdXJjZUxvY2F0b3IgZ2V0UmVzb3VyY2VMb2NhdG9yKCkgeworCQlyZXR1cm4gQ29yZUVkaXRQbHVnaW4uSU5TVEFOQ0U7CisJfQorCit9CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2NvbW1vbi9wcm92aWRlci9Eb3VibGVWYWx1ZUxpc3RJdGVtUHJvdmlkZXIuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvY29tbW9uL3Byb3ZpZGVyL0RvdWJsZVZhbHVlTGlzdEl0ZW1Qcm92aWRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYyODIyNmYKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2NvbW1vbi9wcm92aWRlci9Eb3VibGVWYWx1ZUxpc3RJdGVtUHJvdmlkZXIuamF2YQpAQCAtMCwwICsxLDIwNiBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLnByb3ZpZGVyOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDEwIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOworaW1wb3J0IGphdmEudXRpbC5MaXN0OworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5SZXNvdXJjZUxvY2F0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVTdHJ1Y3R1cmFsRmVhdHVyZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5Db21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklFZGl0aW5nRG9tYWluSXRlbVByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtTGFiZWxQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbVByb3BlcnR5RGVzY3JpcHRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbVByb3BlcnR5U291cmNlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklTdHJ1Y3R1cmVkSXRlbUNvbnRlbnRQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JVHJlZUl0ZW1Db250ZW50UHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSXRlbVByb3BlcnR5RGVzY3JpcHRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JdGVtUHJvdmlkZXJBZGFwdGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLlZpZXdlck5vdGlmaWNhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLkNvbW1vbkZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5Db21tb25QYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uRG91YmxlVmFsdWVMaXN0OworCisvKioKKyAqIFRoaXMgaXMgdGhlIGl0ZW0gcHJvdmlkZXIgYWRhcHRlciBmb3IgYSB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5Eb3VibGVWYWx1ZUxpc3R9IG9iamVjdC4KKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIERvdWJsZVZhbHVlTGlzdEl0ZW1Qcm92aWRlcgorCWV4dGVuZHMgSXRlbVByb3ZpZGVyQWRhcHRlcgorCWltcGxlbWVudHMKKwkJSUVkaXRpbmdEb21haW5JdGVtUHJvdmlkZXIsCisJCUlTdHJ1Y3R1cmVkSXRlbUNvbnRlbnRQcm92aWRlciwKKwkJSVRyZWVJdGVtQ29udGVudFByb3ZpZGVyLAorCQlJSXRlbUxhYmVsUHJvdmlkZXIsCisJCUlJdGVtUHJvcGVydHlTb3VyY2UgeworCS8qKgorCSAqIFRoaXMgY29uc3RydWN0cyBhbiBpbnN0YW5jZSBmcm9tIGEgZmFjdG9yeSBhbmQgYSBub3RpZmllci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRG91YmxlVmFsdWVMaXN0SXRlbVByb3ZpZGVyKEFkYXB0ZXJGYWN0b3J5IGFkYXB0ZXJGYWN0b3J5KSB7CisJCXN1cGVyKGFkYXB0ZXJGYWN0b3J5KTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgdGhlIHByb3BlcnR5IGRlc2NyaXB0b3JzIGZvciB0aGUgYWRhcHRlZCBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgTGlzdDxJSXRlbVByb3BlcnR5RGVzY3JpcHRvcj4gZ2V0UHJvcGVydHlEZXNjcmlwdG9ycyhPYmplY3Qgb2JqZWN0KSB7CisJCWlmIChpdGVtUHJvcGVydHlEZXNjcmlwdG9ycyA9PSBudWxsKSB7CisJCQlzdXBlci5nZXRQcm9wZXJ0eURlc2NyaXB0b3JzKG9iamVjdCk7CisKKwkJCWFkZElkZW50aWZpZXJQcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0KTsKKwkJfQorCQlyZXR1cm4gaXRlbVByb3BlcnR5RGVzY3JpcHRvcnM7CisJfQorCisJLyoqCisJICogVGhpcyBhZGRzIGEgcHJvcGVydHkgZGVzY3JpcHRvciBmb3IgdGhlIElkZW50aWZpZXIgZmVhdHVyZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBhZGRJZGVudGlmaWVyUHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdCBvYmplY3QpIHsKKwkJaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMuYWRkCisJCQkoY3JlYXRlSXRlbVByb3BlcnR5RGVzY3JpcHRvcgorCQkJCSgoKENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnkpYWRhcHRlckZhY3RvcnkpLmdldFJvb3RBZGFwdGVyRmFjdG9yeSgpLAorCQkJCSBnZXRSZXNvdXJjZUxvY2F0b3IoKSwKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfRG91YmxlVmFsdWVMaXN0X2lkZW50aWZpZXJfZmVhdHVyZSIpLCAvLyROT04tTkxTLTEkCisJCQkJIGdldFN0cmluZygiX1VJX1Byb3BlcnR5RGVzY3JpcHRvcl9kZXNjcmlwdGlvbiIsICJfVUlfRG91YmxlVmFsdWVMaXN0X2lkZW50aWZpZXJfZmVhdHVyZSIsICJfVUlfRG91YmxlVmFsdWVMaXN0X3R5cGUiKSwgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkIC8vJE5PTi1OTFMtMyQKKwkJCQkgQ29tbW9uUGFja2FnZS5MaXRlcmFscy5ET1VCTEVfVkFMVUVfTElTVF9fSURFTlRJRklFUiwKKwkJCQkgdHJ1ZSwKKwkJCQkgZmFsc2UsCisJCQkJIGZhbHNlLAorCQkJCSBJdGVtUHJvcGVydHlEZXNjcmlwdG9yLkdFTkVSSUNfVkFMVUVfSU1BR0UsCisJCQkJIG51bGwsCisJCQkJIG51bGwpKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHNwZWNpZmllcyBob3cgdG8gaW1wbGVtZW50IHtAbGluayAjZ2V0Q2hpbGRyZW59IGFuZCBpcyB1c2VkIHRvIGRlZHVjZSBhbiBhcHByb3ByaWF0ZSBmZWF0dXJlIGZvciBhbgorCSAqIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuZWRpdC5jb21tYW5kLkFkZENvbW1hbmR9LCB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmVkaXQuY29tbWFuZC5SZW1vdmVDb21tYW5kfSBvcgorCSAqIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuZWRpdC5jb21tYW5kLk1vdmVDb21tYW5kfSBpbiB7QGxpbmsgI2NyZWF0ZUNvbW1hbmR9LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBDb2xsZWN0aW9uPD8gZXh0ZW5kcyBFU3RydWN0dXJhbEZlYXR1cmU+IGdldENoaWxkcmVuRmVhdHVyZXMoT2JqZWN0IG9iamVjdCkgeworCQlpZiAoY2hpbGRyZW5GZWF0dXJlcyA9PSBudWxsKSB7CisJCQlzdXBlci5nZXRDaGlsZHJlbkZlYXR1cmVzKG9iamVjdCk7CisJCQljaGlsZHJlbkZlYXR1cmVzLmFkZChDb21tb25QYWNrYWdlLkxpdGVyYWxzLkRPVUJMRV9WQUxVRV9MSVNUX19WQUxVRVMpOworCQl9CisJCXJldHVybiBjaGlsZHJlbkZlYXR1cmVzOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCBFU3RydWN0dXJhbEZlYXR1cmUgZ2V0Q2hpbGRGZWF0dXJlKE9iamVjdCBvYmplY3QsIE9iamVjdCBjaGlsZCkgeworCQkvLyBDaGVjayB0aGUgdHlwZSBvZiB0aGUgc3BlY2lmaWVkIGNoaWxkIG9iamVjdCBhbmQgcmV0dXJuIHRoZSBwcm9wZXIgZmVhdHVyZSB0byB1c2UgZm9yCisJCS8vIGFkZGluZyAoc2VlIHtAbGluayBBZGRDb21tYW5kfSkgaXQgYXMgYSBjaGlsZC4KKworCQlyZXR1cm4gc3VwZXIuZ2V0Q2hpbGRGZWF0dXJlKG9iamVjdCwgY2hpbGQpOworCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyBEb3VibGVWYWx1ZUxpc3QuZ2lmLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgT2JqZWN0IGdldEltYWdlKE9iamVjdCBvYmplY3QpIHsKKwkJcmV0dXJuIG92ZXJsYXlJbWFnZShvYmplY3QsIGdldFJlc291cmNlTG9jYXRvcigpLmdldEltYWdlKCJmdWxsL2N1c3RvbW9iajE2L0xpc3QuZ2lmIikpOyAvLyROT04tTkxTLTEkCisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIHRoZSBsYWJlbCB0ZXh0IGZvciB0aGUgYWRhcHRlZCBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIFN0cmluZyBnZXRUZXh0KE9iamVjdCBvYmplY3QpIHsKKwkJU3RyaW5nIGxhYmVsID0gbnVsbDsKKwkJaWYoKChEb3VibGVWYWx1ZUxpc3Qpb2JqZWN0KS5lQ29udGFpbmluZ0ZlYXR1cmUoKS5nZXRGZWF0dXJlSUQoKSA9PSAKKwkJCUNvbW1vblBhY2thZ2UuRE9VQkxFX1ZBTFVFX01BVFJJWF9fVkFMVUVfTElTVFMpIGxhYmVsID0gKChEb3VibGVWYWx1ZUxpc3Qpb2JqZWN0KS5nZXRJZGVudGlmaWVyKCk7CisJCWVsc2UKKwkJCWxhYmVsID0gKChEb3VibGVWYWx1ZUxpc3Qpb2JqZWN0KS5lQ29udGFpbmluZ0ZlYXR1cmUoKS5nZXROYW1lKCk7CisJCXJldHVybiBsYWJlbCA9PSBudWxsIHx8IGxhYmVsLmxlbmd0aCgpID09IDAgPworCQkJZ2V0U3RyaW5nKCJfVUlfRG91YmxlVmFsdWVMaXN0X3R5cGUiKSA6IC8vJE5PTi1OTFMtMSQKKwkJCWxhYmVsOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKKwl9CisKKwkvKioKKwkgKiBUaGlzIGhhbmRsZXMgbW9kZWwgbm90aWZpY2F0aW9ucyBieSBjYWxsaW5nIHtAbGluayAjdXBkYXRlQ2hpbGRyZW59IHRvIHVwZGF0ZSBhbnkgY2FjaGVkCisJICogY2hpbGRyZW4gYW5kIGJ5IGNyZWF0aW5nIGEgdmlld2VyIG5vdGlmaWNhdGlvbiwgd2hpY2ggaXQgcGFzc2VzIHRvIHtAbGluayAjZmlyZU5vdGlmeUNoYW5nZWR9LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIG5vdGlmeUNoYW5nZWQoTm90aWZpY2F0aW9uIG5vdGlmaWNhdGlvbikgeworCQl1cGRhdGVDaGlsZHJlbihub3RpZmljYXRpb24pOworCisJCXN3aXRjaCAobm90aWZpY2F0aW9uLmdldEZlYXR1cmVJRChEb3VibGVWYWx1ZUxpc3QuY2xhc3MpKSB7CisJCQljYXNlIENvbW1vblBhY2thZ2UuRE9VQkxFX1ZBTFVFX0xJU1RfX0lERU5USUZJRVI6CisJCQkJZmlyZU5vdGlmeUNoYW5nZWQobmV3IFZpZXdlck5vdGlmaWNhdGlvbihub3RpZmljYXRpb24sIG5vdGlmaWNhdGlvbi5nZXROb3RpZmllcigpLCBmYWxzZSwgdHJ1ZSkpOworCQkJCXJldHVybjsKKwkJCWNhc2UgQ29tbW9uUGFja2FnZS5ET1VCTEVfVkFMVUVfTElTVF9fVkFMVUVTOgorCQkJCWZpcmVOb3RpZnlDaGFuZ2VkKG5ldyBWaWV3ZXJOb3RpZmljYXRpb24obm90aWZpY2F0aW9uLCBub3RpZmljYXRpb24uZ2V0Tm90aWZpZXIoKSwgdHJ1ZSwgZmFsc2UpKTsKKwkJCQlyZXR1cm47CisJCX0KKwkJc3VwZXIubm90aWZ5Q2hhbmdlZChub3RpZmljYXRpb24pOworCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmVkaXQuY29tbWFuZC5Db21tYW5kUGFyYW1ldGVyfXMgZGVzY3JpYmluZyB0aGUgY2hpbGRyZW4KKwkgKiB0aGF0IGNhbiBiZSBjcmVhdGVkIHVuZGVyIHRoaXMgb2JqZWN0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIGNvbGxlY3ROZXdDaGlsZERlc2NyaXB0b3JzKENvbGxlY3Rpb248T2JqZWN0PiBuZXdDaGlsZERlc2NyaXB0b3JzLCBPYmplY3Qgb2JqZWN0KSB7CisJCXN1cGVyLmNvbGxlY3ROZXdDaGlsZERlc2NyaXB0b3JzKG5ld0NoaWxkRGVzY3JpcHRvcnMsIG9iamVjdCk7CisKKwkJbmV3Q2hpbGREZXNjcmlwdG9ycy5hZGQKKwkJCShjcmVhdGVDaGlsZFBhcmFtZXRlcgorCQkJCShDb21tb25QYWNrYWdlLkxpdGVyYWxzLkRPVUJMRV9WQUxVRV9MSVNUX19WQUxVRVMsCisJCQkJIENvbW1vbkZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZURvdWJsZVZhbHVlKCkpKTsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm4gdGhlIHJlc291cmNlIGxvY2F0b3IgZm9yIHRoaXMgaXRlbSBwcm92aWRlcidzIHJlc291cmNlcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgUmVzb3VyY2VMb2NhdG9yIGdldFJlc291cmNlTG9jYXRvcigpIHsKKwkJcmV0dXJuIENvcmVFZGl0UGx1Z2luLklOU1RBTkNFOworCX0KKworfQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9jb21tb24vcHJvdmlkZXIvRG91YmxlVmFsdWVNYXRyaXhJdGVtUHJvdmlkZXIuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvY29tbW9uL3Byb3ZpZGVyL0RvdWJsZVZhbHVlTWF0cml4SXRlbVByb3ZpZGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGY3OWFjNAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvY29tbW9uL3Byb3ZpZGVyL0RvdWJsZVZhbHVlTWF0cml4SXRlbVByb3ZpZGVyLmphdmEKQEAgLTAsMCArMSwxNzQgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5wcm92aWRlcjsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAxMCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LkFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuUmVzb3VyY2VMb2NhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FU3RydWN0dXJhbEZlYXR1cmU7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUVkaXRpbmdEb21haW5JdGVtUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1MYWJlbFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtUHJvcGVydHlEZXNjcmlwdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtUHJvcGVydHlTb3VyY2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVN0cnVjdHVyZWRJdGVtQ29udGVudFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklUcmVlSXRlbUNvbnRlbnRQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JdGVtUHJvdmlkZXJBZGFwdGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLlZpZXdlck5vdGlmaWNhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLkNvbW1vbkZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5Db21tb25QYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uRG91YmxlVmFsdWVNYXRyaXg7CisKKy8qKgorICogVGhpcyBpcyB0aGUgaXRlbSBwcm92aWRlciBhZGFwdGVyIGZvciBhIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLkRvdWJsZVZhbHVlTWF0cml4fSBvYmplY3QuCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBEb3VibGVWYWx1ZU1hdHJpeEl0ZW1Qcm92aWRlcgorCWV4dGVuZHMgSXRlbVByb3ZpZGVyQWRhcHRlcgorCWltcGxlbWVudHMKKwkJSUVkaXRpbmdEb21haW5JdGVtUHJvdmlkZXIsCisJCUlTdHJ1Y3R1cmVkSXRlbUNvbnRlbnRQcm92aWRlciwKKwkJSVRyZWVJdGVtQ29udGVudFByb3ZpZGVyLAorCQlJSXRlbUxhYmVsUHJvdmlkZXIsCisJCUlJdGVtUHJvcGVydHlTb3VyY2UgeworCS8qKgorCSAqIFRoaXMgY29uc3RydWN0cyBhbiBpbnN0YW5jZSBmcm9tIGEgZmFjdG9yeSBhbmQgYSBub3RpZmllci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRG91YmxlVmFsdWVNYXRyaXhJdGVtUHJvdmlkZXIoQWRhcHRlckZhY3RvcnkgYWRhcHRlckZhY3RvcnkpIHsKKwkJc3VwZXIoYWRhcHRlckZhY3RvcnkpOworCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyB0aGUgcHJvcGVydHkgZGVzY3JpcHRvcnMgZm9yIHRoZSBhZGFwdGVkIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBMaXN0PElJdGVtUHJvcGVydHlEZXNjcmlwdG9yPiBnZXRQcm9wZXJ0eURlc2NyaXB0b3JzKE9iamVjdCBvYmplY3QpIHsKKwkJaWYgKGl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzID09IG51bGwpIHsKKwkJCXN1cGVyLmdldFByb3BlcnR5RGVzY3JpcHRvcnMob2JqZWN0KTsKKworCQl9CisJCXJldHVybiBpdGVtUHJvcGVydHlEZXNjcmlwdG9yczsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHNwZWNpZmllcyBob3cgdG8gaW1wbGVtZW50IHtAbGluayAjZ2V0Q2hpbGRyZW59IGFuZCBpcyB1c2VkIHRvIGRlZHVjZSBhbiBhcHByb3ByaWF0ZSBmZWF0dXJlIGZvciBhbgorCSAqIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuZWRpdC5jb21tYW5kLkFkZENvbW1hbmR9LCB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmVkaXQuY29tbWFuZC5SZW1vdmVDb21tYW5kfSBvcgorCSAqIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuZWRpdC5jb21tYW5kLk1vdmVDb21tYW5kfSBpbiB7QGxpbmsgI2NyZWF0ZUNvbW1hbmR9LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBDb2xsZWN0aW9uPD8gZXh0ZW5kcyBFU3RydWN0dXJhbEZlYXR1cmU+IGdldENoaWxkcmVuRmVhdHVyZXMoT2JqZWN0IG9iamVjdCkgeworCQlpZiAoY2hpbGRyZW5GZWF0dXJlcyA9PSBudWxsKSB7CisJCQlzdXBlci5nZXRDaGlsZHJlbkZlYXR1cmVzKG9iamVjdCk7CisJCQljaGlsZHJlbkZlYXR1cmVzLmFkZChDb21tb25QYWNrYWdlLkxpdGVyYWxzLkRPVUJMRV9WQUxVRV9NQVRSSVhfX1ZBTFVFX0xJU1RTKTsKKwkJfQorCQlyZXR1cm4gY2hpbGRyZW5GZWF0dXJlczsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgRVN0cnVjdHVyYWxGZWF0dXJlIGdldENoaWxkRmVhdHVyZShPYmplY3Qgb2JqZWN0LCBPYmplY3QgY2hpbGQpIHsKKwkJLy8gQ2hlY2sgdGhlIHR5cGUgb2YgdGhlIHNwZWNpZmllZCBjaGlsZCBvYmplY3QgYW5kIHJldHVybiB0aGUgcHJvcGVyIGZlYXR1cmUgdG8gdXNlIGZvcgorCQkvLyBhZGRpbmcgKHNlZSB7QGxpbmsgQWRkQ29tbWFuZH0pIGl0IGFzIGEgY2hpbGQuCisKKwkJcmV0dXJuIHN1cGVyLmdldENoaWxkRmVhdHVyZShvYmplY3QsIGNoaWxkKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgRG91YmxlVmFsdWVNYXRyaXguZ2lmLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgT2JqZWN0IGdldEltYWdlKE9iamVjdCBvYmplY3QpIHsKKwkJcmV0dXJuIG92ZXJsYXlJbWFnZShvYmplY3QsIGdldFJlc291cmNlTG9jYXRvcigpLmdldEltYWdlKCJmdWxsL2N1c3RvbW9iajE2L01hdHJpeC5naWYiKSk7IC8vJE5PTi1OTFMtMSQKKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgdGhlIGxhYmVsIHRleHQgZm9yIHRoZSBhZGFwdGVkIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgU3RyaW5nIGdldFRleHQoT2JqZWN0IG9iamVjdCkgeworCQlTdHJpbmcgbGFiZWwgPSAoKERvdWJsZVZhbHVlTWF0cml4KW9iamVjdCkuZUNvbnRhaW5pbmdGZWF0dXJlKCkuZ2V0TmFtZSgpOworCQlyZXR1cm4gbGFiZWwgPT0gbnVsbCB8fCBsYWJlbC5sZW5ndGgoKSA9PSAwID8KKwkJCWdldFN0cmluZygiX1VJX0RvdWJsZVZhbHVlTWF0cml4X3R5cGUiKSA6IC8vJE5PTi1OTFMtMSQKKwkJCWxhYmVsOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKKwl9CisKKwkvKioKKwkgKiBUaGlzIGhhbmRsZXMgbW9kZWwgbm90aWZpY2F0aW9ucyBieSBjYWxsaW5nIHtAbGluayAjdXBkYXRlQ2hpbGRyZW59IHRvIHVwZGF0ZSBhbnkgY2FjaGVkCisJICogY2hpbGRyZW4gYW5kIGJ5IGNyZWF0aW5nIGEgdmlld2VyIG5vdGlmaWNhdGlvbiwgd2hpY2ggaXQgcGFzc2VzIHRvIHtAbGluayAjZmlyZU5vdGlmeUNoYW5nZWR9LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIG5vdGlmeUNoYW5nZWQoTm90aWZpY2F0aW9uIG5vdGlmaWNhdGlvbikgeworCQl1cGRhdGVDaGlsZHJlbihub3RpZmljYXRpb24pOworCisJCXN3aXRjaCAobm90aWZpY2F0aW9uLmdldEZlYXR1cmVJRChEb3VibGVWYWx1ZU1hdHJpeC5jbGFzcykpIHsKKwkJCWNhc2UgQ29tbW9uUGFja2FnZS5ET1VCTEVfVkFMVUVfTUFUUklYX19WQUxVRV9MSVNUUzoKKwkJCQlmaXJlTm90aWZ5Q2hhbmdlZChuZXcgVmlld2VyTm90aWZpY2F0aW9uKG5vdGlmaWNhdGlvbiwgbm90aWZpY2F0aW9uLmdldE5vdGlmaWVyKCksIHRydWUsIGZhbHNlKSk7CisJCQkJcmV0dXJuOworCQl9CisJCXN1cGVyLm5vdGlmeUNoYW5nZWQobm90aWZpY2F0aW9uKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFkZHMge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lZGl0LmNvbW1hbmQuQ29tbWFuZFBhcmFtZXRlcn1zIGRlc2NyaWJpbmcgdGhlIGNoaWxkcmVuCisJICogdGhhdCBjYW4gYmUgY3JlYXRlZCB1bmRlciB0aGlzIG9iamVjdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgdm9pZCBjb2xsZWN0TmV3Q2hpbGREZXNjcmlwdG9ycyhDb2xsZWN0aW9uPE9iamVjdD4gbmV3Q2hpbGREZXNjcmlwdG9ycywgT2JqZWN0IG9iamVjdCkgeworCQlzdXBlci5jb2xsZWN0TmV3Q2hpbGREZXNjcmlwdG9ycyhuZXdDaGlsZERlc2NyaXB0b3JzLCBvYmplY3QpOworCisJCW5ld0NoaWxkRGVzY3JpcHRvcnMuYWRkCisJCQkoY3JlYXRlQ2hpbGRQYXJhbWV0ZXIKKwkJCQkoQ29tbW9uUGFja2FnZS5MaXRlcmFscy5ET1VCTEVfVkFMVUVfTUFUUklYX19WQUxVRV9MSVNUUywKKwkJCQkgQ29tbW9uRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlRG91YmxlVmFsdWVMaXN0KCkpKTsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm4gdGhlIHJlc291cmNlIGxvY2F0b3IgZm9yIHRoaXMgaXRlbSBwcm92aWRlcidzIHJlc291cmNlcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgUmVzb3VyY2VMb2NhdG9yIGdldFJlc291cmNlTG9jYXRvcigpIHsKKwkJcmV0dXJuIENvcmVFZGl0UGx1Z2luLklOU1RBTkNFOworCX0KKworfQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9jb21tb24vcHJvdmlkZXIvRHVibGluQ29yZUl0ZW1Qcm92aWRlci5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9jb21tb24vcHJvdmlkZXIvRHVibGluQ29yZUl0ZW1Qcm92aWRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE1MTBmODEKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2NvbW1vbi9wcm92aWRlci9EdWJsaW5Db3JlSXRlbVByb3ZpZGVyLmphdmEKQEAgLTAsMCArMSw2NjQgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5wcm92aWRlcjsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuIAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyAKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0IAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwgCisgKiAKKyAqIENvbnRyaWJ1dG9yczogCisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LkFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuUmVzb3VyY2VMb2NhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkNvbXBvc2VhYmxlQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUVkaXRpbmdEb21haW5JdGVtUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1MYWJlbFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtUHJvcGVydHlEZXNjcmlwdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtUHJvcGVydHlTb3VyY2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVN0cnVjdHVyZWRJdGVtQ29udGVudFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklUcmVlSXRlbUNvbnRlbnRQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JdGVtUHJvcGVydHlEZXNjcmlwdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkl0ZW1Qcm92aWRlckFkYXB0ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuVmlld2VyTm90aWZpY2F0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uQ29tbW9uUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLkR1YmxpbkNvcmU7CisKKy8qKgorICogVGhpcyBpcyB0aGUgaXRlbSBwcm92aWRlciBhZGFwdGVyIGZvciBhIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLkR1YmxpbkNvcmV9IG9iamVjdC4KKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIER1YmxpbkNvcmVJdGVtUHJvdmlkZXIKKwlleHRlbmRzIEl0ZW1Qcm92aWRlckFkYXB0ZXIKKwlpbXBsZW1lbnRzCQorCQlJRWRpdGluZ0RvbWFpbkl0ZW1Qcm92aWRlciwJCisJCUlTdHJ1Y3R1cmVkSXRlbUNvbnRlbnRQcm92aWRlciwJCisJCUlUcmVlSXRlbUNvbnRlbnRQcm92aWRlciwJCisJCUlJdGVtTGFiZWxQcm92aWRlciwJCisJCUlJdGVtUHJvcGVydHlTb3VyY2UgeworCS8qKgorCSAqIFRoaXMgY29uc3RydWN0cyBhbiBpbnN0YW5jZSBmcm9tIGEgZmFjdG9yeSBhbmQgYSBub3RpZmllci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRHVibGluQ29yZUl0ZW1Qcm92aWRlcihBZGFwdGVyRmFjdG9yeSBhZGFwdGVyRmFjdG9yeSkgeworCQlzdXBlcihhZGFwdGVyRmFjdG9yeSk7CisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIHRoZSBwcm9wZXJ0eSBkZXNjcmlwdG9ycyBmb3IgdGhlIGFkYXB0ZWQgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIExpc3Q8SUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I+IGdldFByb3BlcnR5RGVzY3JpcHRvcnMoT2JqZWN0IG9iamVjdCkgeworCQlpZiAoaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMgPT0gbnVsbCkgeworCQkJc3VwZXIuZ2V0UHJvcGVydHlEZXNjcmlwdG9ycyhvYmplY3QpOworCisJCQlhZGRUaXRsZVByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QpOworCQkJYWRkSWRlbnRpZmllclByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QpOworCQkJYWRkRGVzY3JpcHRpb25Qcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0KTsKKwkJCWFkZENyZWF0b3JQcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0KTsKKwkJCWFkZERhdGVQcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0KTsKKwkJCWFkZEZvcm1hdFByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QpOworCQkJYWRkUHVibGlzaGVyUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCk7CisJCQlhZGRDb3ZlcmFnZVByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QpOworCQkJYWRkQ29udHJpYnV0b3JQcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0KTsKKwkJCWFkZFJlbGF0aW9uUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCk7CisJCQlhZGRSaWdodHNQcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0KTsKKwkJCWFkZFNvdXJjZVByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QpOworCQkJYWRkU3ViamVjdFByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QpOworCQkJYWRkVHlwZVByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QpOworCQkJYWRkTGFuZ3VhZ2VQcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0KTsKKwkJCWFkZEJpYmxpb2dyYXBoaWNDaXRhdGlvblByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QpOworCQkJYWRkQ3JlYXRlZFByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QpOworCQkJYWRkTGljZW5zZVByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QpOworCQkJYWRkUmVxdWlyZWRQcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0KTsKKwkJCWFkZFNwYXRpYWxQcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0KTsKKwkJCWFkZFZhbGlkUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCk7CisJCX0KKwkJcmV0dXJuIGl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzOworCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyBhIHByb3BlcnR5IGRlc2NyaXB0b3IgZm9yIHRoZSBUaXRsZSBmZWF0dXJlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIGFkZFRpdGxlUHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdCBvYmplY3QpIHsKKwkJaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMuYWRkCisJCQkoY3JlYXRlSXRlbVByb3BlcnR5RGVzY3JpcHRvcgorCQkJCSgoKENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnkpYWRhcHRlckZhY3RvcnkpLmdldFJvb3RBZGFwdGVyRmFjdG9yeSgpLAorCQkJCSBnZXRSZXNvdXJjZUxvY2F0b3IoKSwKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfRHVibGluQ29yZV90aXRsZV9mZWF0dXJlIiksIC8vJE5PTi1OTFMtMSQKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfUHJvcGVydHlEZXNjcmlwdG9yX2Rlc2NyaXB0aW9uIiwgIl9VSV9EdWJsaW5Db3JlX3RpdGxlX2ZlYXR1cmUiLCAiX1VJX0R1YmxpbkNvcmVfdHlwZSIpLCAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQgLy8kTk9OLU5MUy0zJAorCQkJCSBDb21tb25QYWNrYWdlLkxpdGVyYWxzLkRVQkxJTl9DT1JFX19USVRMRSwKKwkJCQkgdHJ1ZSwKKwkJCQkgZmFsc2UsCisJCQkJIGZhbHNlLAorCQkJCSBJdGVtUHJvcGVydHlEZXNjcmlwdG9yLkdFTkVSSUNfVkFMVUVfSU1BR0UsCisJCQkJIG51bGwsCisJCQkJIG51bGwpKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFkZHMgYSBwcm9wZXJ0eSBkZXNjcmlwdG9yIGZvciB0aGUgQ3JlYXRvciBmZWF0dXJlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIGFkZENyZWF0b3JQcm9wZXJ0eURlc2NyaXB0b3IoT2JqZWN0IG9iamVjdCkgeworCQlpdGVtUHJvcGVydHlEZXNjcmlwdG9ycy5hZGQKKwkJCShjcmVhdGVJdGVtUHJvcGVydHlEZXNjcmlwdG9yCisJCQkJKCgoQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSlhZGFwdGVyRmFjdG9yeSkuZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCksCisJCQkJIGdldFJlc291cmNlTG9jYXRvcigpLAorCQkJCSBnZXRTdHJpbmcoIl9VSV9EdWJsaW5Db3JlX2NyZWF0b3JfZmVhdHVyZSIpLCAvLyROT04tTkxTLTEkCisJCQkJIGdldFN0cmluZygiX1VJX1Byb3BlcnR5RGVzY3JpcHRvcl9kZXNjcmlwdGlvbiIsICJfVUlfRHVibGluQ29yZV9jcmVhdG9yX2ZlYXR1cmUiLCAiX1VJX0R1YmxpbkNvcmVfdHlwZSIpLCAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQgLy8kTk9OLU5MUy0zJAorCQkJCSBDb21tb25QYWNrYWdlLkxpdGVyYWxzLkRVQkxJTl9DT1JFX19DUkVBVE9SLAorCQkJCSB0cnVlLAorCQkJCSBmYWxzZSwKKwkJCQkgZmFsc2UsCisJCQkJIEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IuR0VORVJJQ19WQUxVRV9JTUFHRSwKKwkJCQkgbnVsbCwKKwkJCQkgbnVsbCkpOworCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyBhIHByb3BlcnR5IGRlc2NyaXB0b3IgZm9yIHRoZSBTdWJqZWN0IGZlYXR1cmUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgYWRkU3ViamVjdFByb3BlcnR5RGVzY3JpcHRvcihPYmplY3Qgb2JqZWN0KSB7CisJCWl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzLmFkZAorCQkJKGNyZWF0ZUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IKKwkJCQkoKChDb21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5KWFkYXB0ZXJGYWN0b3J5KS5nZXRSb290QWRhcHRlckZhY3RvcnkoKSwKKwkJCQkgZ2V0UmVzb3VyY2VMb2NhdG9yKCksCisJCQkJIGdldFN0cmluZygiX1VJX0R1YmxpbkNvcmVfc3ViamVjdF9mZWF0dXJlIiksIC8vJE5PTi1OTFMtMSQKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfUHJvcGVydHlEZXNjcmlwdG9yX2Rlc2NyaXB0aW9uIiwgIl9VSV9EdWJsaW5Db3JlX3N1YmplY3RfZmVhdHVyZSIsICJfVUlfRHVibGluQ29yZV90eXBlIiksIC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJCAvLyROT04tTkxTLTMkCisJCQkJIENvbW1vblBhY2thZ2UuTGl0ZXJhbHMuRFVCTElOX0NPUkVfX1NVQkpFQ1QsCisJCQkJIHRydWUsCisJCQkJIGZhbHNlLAorCQkJCSBmYWxzZSwKKwkJCQkgSXRlbVByb3BlcnR5RGVzY3JpcHRvci5HRU5FUklDX1ZBTFVFX0lNQUdFLAorCQkJCSBudWxsLAorCQkJCSBudWxsKSk7CisJfQorCisJLyoqCisJICogVGhpcyBhZGRzIGEgcHJvcGVydHkgZGVzY3JpcHRvciBmb3IgdGhlIERlc2NyaXB0aW9uIGZlYXR1cmUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgYWRkRGVzY3JpcHRpb25Qcm9wZXJ0eURlc2NyaXB0b3IoT2JqZWN0IG9iamVjdCkgeworCQlpdGVtUHJvcGVydHlEZXNjcmlwdG9ycy5hZGQKKwkJCShjcmVhdGVJdGVtUHJvcGVydHlEZXNjcmlwdG9yCisJCQkJKCgoQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSlhZGFwdGVyRmFjdG9yeSkuZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCksCisJCQkJIGdldFJlc291cmNlTG9jYXRvcigpLAorCQkJCSBnZXRTdHJpbmcoIl9VSV9EdWJsaW5Db3JlX2Rlc2NyaXB0aW9uX2ZlYXR1cmUiKSwgLy8kTk9OLU5MUy0xJAorCQkJCSBnZXRTdHJpbmcoIl9VSV9Qcm9wZXJ0eURlc2NyaXB0b3JfZGVzY3JpcHRpb24iLCAiX1VJX0R1YmxpbkNvcmVfZGVzY3JpcHRpb25fZmVhdHVyZSIsICJfVUlfRHVibGluQ29yZV90eXBlIiksIC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJCAvLyROT04tTkxTLTMkCisJCQkJIENvbW1vblBhY2thZ2UuTGl0ZXJhbHMuRFVCTElOX0NPUkVfX0RFU0NSSVBUSU9OLAorCQkJCSB0cnVlLAorCQkJCSBmYWxzZSwKKwkJCQkgZmFsc2UsCisJCQkJIEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IuR0VORVJJQ19WQUxVRV9JTUFHRSwKKwkJCQkgbnVsbCwKKwkJCQkgbnVsbCkpOworCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyBhIHByb3BlcnR5IGRlc2NyaXB0b3IgZm9yIHRoZSBQdWJsaXNoZXIgZmVhdHVyZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBhZGRQdWJsaXNoZXJQcm9wZXJ0eURlc2NyaXB0b3IoT2JqZWN0IG9iamVjdCkgeworCQlpdGVtUHJvcGVydHlEZXNjcmlwdG9ycy5hZGQKKwkJCShjcmVhdGVJdGVtUHJvcGVydHlEZXNjcmlwdG9yCisJCQkJKCgoQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSlhZGFwdGVyRmFjdG9yeSkuZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCksCisJCQkJIGdldFJlc291cmNlTG9jYXRvcigpLAorCQkJCSBnZXRTdHJpbmcoIl9VSV9EdWJsaW5Db3JlX3B1Ymxpc2hlcl9mZWF0dXJlIiksIC8vJE5PTi1OTFMtMSQKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfUHJvcGVydHlEZXNjcmlwdG9yX2Rlc2NyaXB0aW9uIiwgIl9VSV9EdWJsaW5Db3JlX3B1Ymxpc2hlcl9mZWF0dXJlIiwgIl9VSV9EdWJsaW5Db3JlX3R5cGUiKSwgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkIC8vJE5PTi1OTFMtMyQKKwkJCQkgQ29tbW9uUGFja2FnZS5MaXRlcmFscy5EVUJMSU5fQ09SRV9fUFVCTElTSEVSLAorCQkJCSB0cnVlLAorCQkJCSBmYWxzZSwKKwkJCQkgZmFsc2UsCisJCQkJIEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IuR0VORVJJQ19WQUxVRV9JTUFHRSwKKwkJCQkgbnVsbCwKKwkJCQkgbnVsbCkpOworCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyBhIHByb3BlcnR5IGRlc2NyaXB0b3IgZm9yIHRoZSBDb250cmlidXRvciBmZWF0dXJlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIGFkZENvbnRyaWJ1dG9yUHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdCBvYmplY3QpIHsKKwkJaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMuYWRkCisJCQkoY3JlYXRlSXRlbVByb3BlcnR5RGVzY3JpcHRvcgorCQkJCSgoKENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnkpYWRhcHRlckZhY3RvcnkpLmdldFJvb3RBZGFwdGVyRmFjdG9yeSgpLAorCQkJCSBnZXRSZXNvdXJjZUxvY2F0b3IoKSwKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfRHVibGluQ29yZV9jb250cmlidXRvcl9mZWF0dXJlIiksIC8vJE5PTi1OTFMtMSQKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfUHJvcGVydHlEZXNjcmlwdG9yX2Rlc2NyaXB0aW9uIiwgIl9VSV9EdWJsaW5Db3JlX2NvbnRyaWJ1dG9yX2ZlYXR1cmUiLCAiX1VJX0R1YmxpbkNvcmVfdHlwZSIpLCAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQgLy8kTk9OLU5MUy0zJAorCQkJCSBDb21tb25QYWNrYWdlLkxpdGVyYWxzLkRVQkxJTl9DT1JFX19DT05UUklCVVRPUiwKKwkJCQkgdHJ1ZSwKKwkJCQkgZmFsc2UsCisJCQkJIGZhbHNlLAorCQkJCSBJdGVtUHJvcGVydHlEZXNjcmlwdG9yLkdFTkVSSUNfVkFMVUVfSU1BR0UsCisJCQkJIG51bGwsCisJCQkJIG51bGwpKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFkZHMgYSBwcm9wZXJ0eSBkZXNjcmlwdG9yIGZvciB0aGUgRGF0ZSBmZWF0dXJlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIGFkZERhdGVQcm9wZXJ0eURlc2NyaXB0b3IoT2JqZWN0IG9iamVjdCkgeworCQlpdGVtUHJvcGVydHlEZXNjcmlwdG9ycy5hZGQKKwkJCShjcmVhdGVJdGVtUHJvcGVydHlEZXNjcmlwdG9yCisJCQkJKCgoQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSlhZGFwdGVyRmFjdG9yeSkuZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCksCisJCQkJIGdldFJlc291cmNlTG9jYXRvcigpLAorCQkJCSBnZXRTdHJpbmcoIl9VSV9EdWJsaW5Db3JlX2RhdGVfZmVhdHVyZSIpLCAvLyROT04tTkxTLTEkCisJCQkJIGdldFN0cmluZygiX1VJX1Byb3BlcnR5RGVzY3JpcHRvcl9kZXNjcmlwdGlvbiIsICJfVUlfRHVibGluQ29yZV9kYXRlX2ZlYXR1cmUiLCAiX1VJX0R1YmxpbkNvcmVfdHlwZSIpLCAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQgLy8kTk9OLU5MUy0zJAorCQkJCSBDb21tb25QYWNrYWdlLkxpdGVyYWxzLkRVQkxJTl9DT1JFX19EQVRFLAorCQkJCSB0cnVlLAorCQkJCSBmYWxzZSwKKwkJCQkgZmFsc2UsCisJCQkJIEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IuR0VORVJJQ19WQUxVRV9JTUFHRSwKKwkJCQkgbnVsbCwKKwkJCQkgbnVsbCkpOworCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyBhIHByb3BlcnR5IGRlc2NyaXB0b3IgZm9yIHRoZSBUeXBlIGZlYXR1cmUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgYWRkVHlwZVByb3BlcnR5RGVzY3JpcHRvcihPYmplY3Qgb2JqZWN0KSB7CisJCWl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzLmFkZAorCQkJKGNyZWF0ZUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IKKwkJCQkoKChDb21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5KWFkYXB0ZXJGYWN0b3J5KS5nZXRSb290QWRhcHRlckZhY3RvcnkoKSwKKwkJCQkgZ2V0UmVzb3VyY2VMb2NhdG9yKCksCisJCQkJIGdldFN0cmluZygiX1VJX0R1YmxpbkNvcmVfdHlwZV9mZWF0dXJlIiksIC8vJE5PTi1OTFMtMSQKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfUHJvcGVydHlEZXNjcmlwdG9yX2Rlc2NyaXB0aW9uIiwgIl9VSV9EdWJsaW5Db3JlX3R5cGVfZmVhdHVyZSIsICJfVUlfRHVibGluQ29yZV90eXBlIiksIC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJCAvLyROT04tTkxTLTMkCisJCQkJIENvbW1vblBhY2thZ2UuTGl0ZXJhbHMuRFVCTElOX0NPUkVfX1RZUEUsCisJCQkJIGZhbHNlLAorCQkJCSBmYWxzZSwKKwkJCQkgZmFsc2UsCisJCQkJIEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IuR0VORVJJQ19WQUxVRV9JTUFHRSwKKwkJCQkgbnVsbCwKKwkJCQkgbnVsbCkpOworCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyBhIHByb3BlcnR5IGRlc2NyaXB0b3IgZm9yIHRoZSBGb3JtYXQgZmVhdHVyZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBhZGRGb3JtYXRQcm9wZXJ0eURlc2NyaXB0b3IoT2JqZWN0IG9iamVjdCkgeworCQlpdGVtUHJvcGVydHlEZXNjcmlwdG9ycy5hZGQKKwkJCShjcmVhdGVJdGVtUHJvcGVydHlEZXNjcmlwdG9yCisJCQkJKCgoQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSlhZGFwdGVyRmFjdG9yeSkuZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCksCisJCQkJIGdldFJlc291cmNlTG9jYXRvcigpLAorCQkJCSBnZXRTdHJpbmcoIl9VSV9EdWJsaW5Db3JlX2Zvcm1hdF9mZWF0dXJlIiksIC8vJE5PTi1OTFMtMSQKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfUHJvcGVydHlEZXNjcmlwdG9yX2Rlc2NyaXB0aW9uIiwgIl9VSV9EdWJsaW5Db3JlX2Zvcm1hdF9mZWF0dXJlIiwgIl9VSV9EdWJsaW5Db3JlX3R5cGUiKSwgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkIC8vJE5PTi1OTFMtMyQKKwkJCQkgQ29tbW9uUGFja2FnZS5MaXRlcmFscy5EVUJMSU5fQ09SRV9fRk9STUFULAorCQkJCSBmYWxzZSwKKwkJCQkgZmFsc2UsCisJCQkJIGZhbHNlLAorCQkJCSBJdGVtUHJvcGVydHlEZXNjcmlwdG9yLkdFTkVSSUNfVkFMVUVfSU1BR0UsCisJCQkJIG51bGwsCisJCQkJIG51bGwpKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFkZHMgYSBwcm9wZXJ0eSBkZXNjcmlwdG9yIGZvciB0aGUgSWRlbnRpZmllciBmZWF0dXJlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIGFkZElkZW50aWZpZXJQcm9wZXJ0eURlc2NyaXB0b3IoT2JqZWN0IG9iamVjdCkgeworCQlpdGVtUHJvcGVydHlEZXNjcmlwdG9ycy5hZGQKKwkJCShjcmVhdGVJdGVtUHJvcGVydHlEZXNjcmlwdG9yCisJCQkJKCgoQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSlhZGFwdGVyRmFjdG9yeSkuZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCksCisJCQkJIGdldFJlc291cmNlTG9jYXRvcigpLAorCQkJCSBnZXRTdHJpbmcoIl9VSV9EdWJsaW5Db3JlX2lkZW50aWZpZXJfZmVhdHVyZSIpLCAvLyROT04tTkxTLTEkCisJCQkJIGdldFN0cmluZygiX1VJX1Byb3BlcnR5RGVzY3JpcHRvcl9kZXNjcmlwdGlvbiIsICJfVUlfRHVibGluQ29yZV9pZGVudGlmaWVyX2ZlYXR1cmUiLCAiX1VJX0R1YmxpbkNvcmVfdHlwZSIpLCAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQgLy8kTk9OLU5MUy0zJAorCQkJCSBDb21tb25QYWNrYWdlLkxpdGVyYWxzLkRVQkxJTl9DT1JFX19JREVOVElGSUVSLAorCQkJCSBmYWxzZSwKKwkJCQkgZmFsc2UsCisJCQkJIGZhbHNlLAorCQkJCSBJdGVtUHJvcGVydHlEZXNjcmlwdG9yLkdFTkVSSUNfVkFMVUVfSU1BR0UsCisJCQkJIG51bGwsCisJCQkJIG51bGwpKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFkZHMgYSBwcm9wZXJ0eSBkZXNjcmlwdG9yIGZvciB0aGUgU291cmNlIGZlYXR1cmUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgYWRkU291cmNlUHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdCBvYmplY3QpIHsKKwkJaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMuYWRkCisJCQkoY3JlYXRlSXRlbVByb3BlcnR5RGVzY3JpcHRvcgorCQkJCSgoKENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnkpYWRhcHRlckZhY3RvcnkpLmdldFJvb3RBZGFwdGVyRmFjdG9yeSgpLAorCQkJCSBnZXRSZXNvdXJjZUxvY2F0b3IoKSwKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfRHVibGluQ29yZV9zb3VyY2VfZmVhdHVyZSIpLCAvLyROT04tTkxTLTEkCisJCQkJIGdldFN0cmluZygiX1VJX1Byb3BlcnR5RGVzY3JpcHRvcl9kZXNjcmlwdGlvbiIsICJfVUlfRHVibGluQ29yZV9zb3VyY2VfZmVhdHVyZSIsICJfVUlfRHVibGluQ29yZV90eXBlIiksIC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJCAvLyROT04tTkxTLTMkCisJCQkJIENvbW1vblBhY2thZ2UuTGl0ZXJhbHMuRFVCTElOX0NPUkVfX1NPVVJDRSwKKwkJCQkgdHJ1ZSwKKwkJCQkgZmFsc2UsCisJCQkJIGZhbHNlLAorCQkJCSBJdGVtUHJvcGVydHlEZXNjcmlwdG9yLkdFTkVSSUNfVkFMVUVfSU1BR0UsCisJCQkJIG51bGwsCisJCQkJIG51bGwpKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFkZHMgYSBwcm9wZXJ0eSBkZXNjcmlwdG9yIGZvciB0aGUgTGFuZ3VhZ2UgZmVhdHVyZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBhZGRMYW5ndWFnZVByb3BlcnR5RGVzY3JpcHRvcihPYmplY3Qgb2JqZWN0KSB7CisJCWl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzLmFkZAorCQkJKGNyZWF0ZUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IKKwkJCQkoKChDb21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5KWFkYXB0ZXJGYWN0b3J5KS5nZXRSb290QWRhcHRlckZhY3RvcnkoKSwKKwkJCQkgZ2V0UmVzb3VyY2VMb2NhdG9yKCksCisJCQkJIGdldFN0cmluZygiX1VJX0R1YmxpbkNvcmVfbGFuZ3VhZ2VfZmVhdHVyZSIpLCAvLyROT04tTkxTLTEkCisJCQkJIGdldFN0cmluZygiX1VJX1Byb3BlcnR5RGVzY3JpcHRvcl9kZXNjcmlwdGlvbiIsICJfVUlfRHVibGluQ29yZV9sYW5ndWFnZV9mZWF0dXJlIiwgIl9VSV9EdWJsaW5Db3JlX3R5cGUiKSwgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkIC8vJE5PTi1OTFMtMyQKKwkJCQkgQ29tbW9uUGFja2FnZS5MaXRlcmFscy5EVUJMSU5fQ09SRV9fTEFOR1VBR0UsCisJCQkJIHRydWUsCisJCQkJIGZhbHNlLAorCQkJCSBmYWxzZSwKKwkJCQkgSXRlbVByb3BlcnR5RGVzY3JpcHRvci5HRU5FUklDX1ZBTFVFX0lNQUdFLAorCQkJCSBudWxsLAorCQkJCSBudWxsKSk7CisJfQorCisJLyoqCisJICogVGhpcyBhZGRzIGEgcHJvcGVydHkgZGVzY3JpcHRvciBmb3IgdGhlIFJlbGF0aW9uIGZlYXR1cmUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgYWRkUmVsYXRpb25Qcm9wZXJ0eURlc2NyaXB0b3IoT2JqZWN0IG9iamVjdCkgeworCQlpdGVtUHJvcGVydHlEZXNjcmlwdG9ycy5hZGQKKwkJCShjcmVhdGVJdGVtUHJvcGVydHlEZXNjcmlwdG9yCisJCQkJKCgoQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSlhZGFwdGVyRmFjdG9yeSkuZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCksCisJCQkJIGdldFJlc291cmNlTG9jYXRvcigpLAorCQkJCSBnZXRTdHJpbmcoIl9VSV9EdWJsaW5Db3JlX3JlbGF0aW9uX2ZlYXR1cmUiKSwgLy8kTk9OLU5MUy0xJAorCQkJCSBnZXRTdHJpbmcoIl9VSV9Qcm9wZXJ0eURlc2NyaXB0b3JfZGVzY3JpcHRpb24iLCAiX1VJX0R1YmxpbkNvcmVfcmVsYXRpb25fZmVhdHVyZSIsICJfVUlfRHVibGluQ29yZV90eXBlIiksIC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJCAvLyROT04tTkxTLTMkCisJCQkJIENvbW1vblBhY2thZ2UuTGl0ZXJhbHMuRFVCTElOX0NPUkVfX1JFTEFUSU9OLAorCQkJCSB0cnVlLAorCQkJCSBmYWxzZSwKKwkJCQkgZmFsc2UsCisJCQkJIEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IuR0VORVJJQ19WQUxVRV9JTUFHRSwKKwkJCQkgbnVsbCwKKwkJCQkgbnVsbCkpOworCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyBhIHByb3BlcnR5IGRlc2NyaXB0b3IgZm9yIHRoZSBDb3ZlcmFnZSBmZWF0dXJlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIGFkZENvdmVyYWdlUHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdCBvYmplY3QpIHsKKwkJaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMuYWRkCisJCQkoY3JlYXRlSXRlbVByb3BlcnR5RGVzY3JpcHRvcgorCQkJCSgoKENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnkpYWRhcHRlckZhY3RvcnkpLmdldFJvb3RBZGFwdGVyRmFjdG9yeSgpLAorCQkJCSBnZXRSZXNvdXJjZUxvY2F0b3IoKSwKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfRHVibGluQ29yZV9jb3ZlcmFnZV9mZWF0dXJlIiksIC8vJE5PTi1OTFMtMSQKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfUHJvcGVydHlEZXNjcmlwdG9yX2Rlc2NyaXB0aW9uIiwgIl9VSV9EdWJsaW5Db3JlX2NvdmVyYWdlX2ZlYXR1cmUiLCAiX1VJX0R1YmxpbkNvcmVfdHlwZSIpLCAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQgLy8kTk9OLU5MUy0zJAorCQkJCSBDb21tb25QYWNrYWdlLkxpdGVyYWxzLkRVQkxJTl9DT1JFX19DT1ZFUkFHRSwKKwkJCQkgdHJ1ZSwKKwkJCQkgZmFsc2UsCisJCQkJIGZhbHNlLAorCQkJCSBJdGVtUHJvcGVydHlEZXNjcmlwdG9yLkdFTkVSSUNfVkFMVUVfSU1BR0UsCisJCQkJIG51bGwsCisJCQkJIG51bGwpKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFkZHMgYSBwcm9wZXJ0eSBkZXNjcmlwdG9yIGZvciB0aGUgUmlnaHRzIGZlYXR1cmUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgYWRkUmlnaHRzUHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdCBvYmplY3QpIHsKKwkJaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMuYWRkCisJCQkoY3JlYXRlSXRlbVByb3BlcnR5RGVzY3JpcHRvcgorCQkJCSgoKENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnkpYWRhcHRlckZhY3RvcnkpLmdldFJvb3RBZGFwdGVyRmFjdG9yeSgpLAorCQkJCSBnZXRSZXNvdXJjZUxvY2F0b3IoKSwKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfRHVibGluQ29yZV9yaWdodHNfZmVhdHVyZSIpLCAvLyROT04tTkxTLTEkCisJCQkJIGdldFN0cmluZygiX1VJX1Byb3BlcnR5RGVzY3JpcHRvcl9kZXNjcmlwdGlvbiIsICJfVUlfRHVibGluQ29yZV9yaWdodHNfZmVhdHVyZSIsICJfVUlfRHVibGluQ29yZV90eXBlIiksIC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJCAvLyROT04tTkxTLTMkCisJCQkJIENvbW1vblBhY2thZ2UuTGl0ZXJhbHMuRFVCTElOX0NPUkVfX1JJR0hUUywKKwkJCQkgdHJ1ZSwKKwkJCQkgZmFsc2UsCisJCQkJIGZhbHNlLAorCQkJCSBJdGVtUHJvcGVydHlEZXNjcmlwdG9yLkdFTkVSSUNfVkFMVUVfSU1BR0UsCisJCQkJIG51bGwsCisJCQkJIG51bGwpKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFkZHMgYSBwcm9wZXJ0eSBkZXNjcmlwdG9yIGZvciB0aGUgQmlibGlvZ3JhcGhpYyBDaXRhdGlvbiBmZWF0dXJlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIGFkZEJpYmxpb2dyYXBoaWNDaXRhdGlvblByb3BlcnR5RGVzY3JpcHRvcihPYmplY3Qgb2JqZWN0KSB7CisJCWl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzLmFkZAorCQkJKGNyZWF0ZUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IKKwkJCQkoKChDb21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5KWFkYXB0ZXJGYWN0b3J5KS5nZXRSb290QWRhcHRlckZhY3RvcnkoKSwKKwkJCQkgZ2V0UmVzb3VyY2VMb2NhdG9yKCksCisJCQkJIGdldFN0cmluZygiX1VJX0R1YmxpbkNvcmVfYmlibGlvZ3JhcGhpY0NpdGF0aW9uX2ZlYXR1cmUiKSwgLy8kTk9OLU5MUy0xJAorCQkJCSBnZXRTdHJpbmcoIl9VSV9Qcm9wZXJ0eURlc2NyaXB0b3JfZGVzY3JpcHRpb24iLCAiX1VJX0R1YmxpbkNvcmVfYmlibGlvZ3JhcGhpY0NpdGF0aW9uX2ZlYXR1cmUiLCAiX1VJX0R1YmxpbkNvcmVfdHlwZSIpLCAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQgLy8kTk9OLU5MUy0zJAorCQkJCSBDb21tb25QYWNrYWdlLkxpdGVyYWxzLkRVQkxJTl9DT1JFX19CSUJMSU9HUkFQSElDX0NJVEFUSU9OLAorCQkJCSB0cnVlLAorCQkJCSBmYWxzZSwKKwkJCQkgZmFsc2UsCisJCQkJIEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IuR0VORVJJQ19WQUxVRV9JTUFHRSwKKwkJCQkgbnVsbCwKKwkJCQkgbnVsbCkpOworCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyBhIHByb3BlcnR5IGRlc2NyaXB0b3IgZm9yIHRoZSBDcmVhdGVkIGZlYXR1cmUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgYWRkQ3JlYXRlZFByb3BlcnR5RGVzY3JpcHRvcihPYmplY3Qgb2JqZWN0KSB7CisJCWl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzLmFkZAorCQkJKGNyZWF0ZUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IKKwkJCQkoKChDb21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5KWFkYXB0ZXJGYWN0b3J5KS5nZXRSb290QWRhcHRlckZhY3RvcnkoKSwKKwkJCQkgZ2V0UmVzb3VyY2VMb2NhdG9yKCksCisJCQkJIGdldFN0cmluZygiX1VJX0R1YmxpbkNvcmVfY3JlYXRlZF9mZWF0dXJlIiksIC8vJE5PTi1OTFMtMSQKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfUHJvcGVydHlEZXNjcmlwdG9yX2Rlc2NyaXB0aW9uIiwgIl9VSV9EdWJsaW5Db3JlX2NyZWF0ZWRfZmVhdHVyZSIsICJfVUlfRHVibGluQ29yZV90eXBlIiksIC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJCAvLyROT04tTkxTLTMkCisJCQkJIENvbW1vblBhY2thZ2UuTGl0ZXJhbHMuRFVCTElOX0NPUkVfX0NSRUFURUQsCisJCQkJIHRydWUsCisJCQkJIGZhbHNlLAorCQkJCSBmYWxzZSwKKwkJCQkgSXRlbVByb3BlcnR5RGVzY3JpcHRvci5HRU5FUklDX1ZBTFVFX0lNQUdFLAorCQkJCSBudWxsLAorCQkJCSBudWxsKSk7CisJfQorCisJLyoqCisJICogVGhpcyBhZGRzIGEgcHJvcGVydHkgZGVzY3JpcHRvciBmb3IgdGhlIExpY2Vuc2UgZmVhdHVyZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBhZGRMaWNlbnNlUHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdCBvYmplY3QpIHsKKwkJaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMuYWRkCisJCQkoY3JlYXRlSXRlbVByb3BlcnR5RGVzY3JpcHRvcgorCQkJCSgoKENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnkpYWRhcHRlckZhY3RvcnkpLmdldFJvb3RBZGFwdGVyRmFjdG9yeSgpLAorCQkJCSBnZXRSZXNvdXJjZUxvY2F0b3IoKSwKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfRHVibGluQ29yZV9saWNlbnNlX2ZlYXR1cmUiKSwgLy8kTk9OLU5MUy0xJAorCQkJCSBnZXRTdHJpbmcoIl9VSV9Qcm9wZXJ0eURlc2NyaXB0b3JfZGVzY3JpcHRpb24iLCAiX1VJX0R1YmxpbkNvcmVfbGljZW5zZV9mZWF0dXJlIiwgIl9VSV9EdWJsaW5Db3JlX3R5cGUiKSwgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkIC8vJE5PTi1OTFMtMyQKKwkJCQkgQ29tbW9uUGFja2FnZS5MaXRlcmFscy5EVUJMSU5fQ09SRV9fTElDRU5TRSwKKwkJCQkgdHJ1ZSwKKwkJCQkgZmFsc2UsCisJCQkJIGZhbHNlLAorCQkJCSBJdGVtUHJvcGVydHlEZXNjcmlwdG9yLkdFTkVSSUNfVkFMVUVfSU1BR0UsCisJCQkJIG51bGwsCisJCQkJIG51bGwpKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFkZHMgYSBwcm9wZXJ0eSBkZXNjcmlwdG9yIGZvciB0aGUgUmVxdWlyZWQgZmVhdHVyZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBhZGRSZXF1aXJlZFByb3BlcnR5RGVzY3JpcHRvcihPYmplY3Qgb2JqZWN0KSB7CisJCWl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzLmFkZAorCQkJKGNyZWF0ZUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IKKwkJCQkoKChDb21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5KWFkYXB0ZXJGYWN0b3J5KS5nZXRSb290QWRhcHRlckZhY3RvcnkoKSwKKwkJCQkgZ2V0UmVzb3VyY2VMb2NhdG9yKCksCisJCQkJIGdldFN0cmluZygiX1VJX0R1YmxpbkNvcmVfcmVxdWlyZWRfZmVhdHVyZSIpLCAvLyROT04tTkxTLTEkCisJCQkJIGdldFN0cmluZygiX1VJX1Byb3BlcnR5RGVzY3JpcHRvcl9kZXNjcmlwdGlvbiIsICJfVUlfRHVibGluQ29yZV9yZXF1aXJlZF9mZWF0dXJlIiwgIl9VSV9EdWJsaW5Db3JlX3R5cGUiKSwgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkIC8vJE5PTi1OTFMtMyQKKwkJCQkgQ29tbW9uUGFja2FnZS5MaXRlcmFscy5EVUJMSU5fQ09SRV9fUkVRVUlSRUQsCisJCQkJIHRydWUsCisJCQkJIGZhbHNlLAorCQkJCSBmYWxzZSwKKwkJCQkgSXRlbVByb3BlcnR5RGVzY3JpcHRvci5HRU5FUklDX1ZBTFVFX0lNQUdFLAorCQkJCSBudWxsLAorCQkJCSBudWxsKSk7CisJfQorCisJLyoqCisJICogVGhpcyBhZGRzIGEgcHJvcGVydHkgZGVzY3JpcHRvciBmb3IgdGhlIFNwYXRpYWwgZmVhdHVyZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBhZGRTcGF0aWFsUHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdCBvYmplY3QpIHsKKwkJaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMuYWRkCisJCQkoY3JlYXRlSXRlbVByb3BlcnR5RGVzY3JpcHRvcgorCQkJCSgoKENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnkpYWRhcHRlckZhY3RvcnkpLmdldFJvb3RBZGFwdGVyRmFjdG9yeSgpLAorCQkJCSBnZXRSZXNvdXJjZUxvY2F0b3IoKSwKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfRHVibGluQ29yZV9zcGF0aWFsX2ZlYXR1cmUiKSwgLy8kTk9OLU5MUy0xJAorCQkJCSBnZXRTdHJpbmcoIl9VSV9Qcm9wZXJ0eURlc2NyaXB0b3JfZGVzY3JpcHRpb24iLCAiX1VJX0R1YmxpbkNvcmVfc3BhdGlhbF9mZWF0dXJlIiwgIl9VSV9EdWJsaW5Db3JlX3R5cGUiKSwgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkIC8vJE5PTi1OTFMtMyQKKwkJCQkgQ29tbW9uUGFja2FnZS5MaXRlcmFscy5EVUJMSU5fQ09SRV9fU1BBVElBTCwKKwkJCQkgdHJ1ZSwKKwkJCQkgZmFsc2UsCisJCQkJIGZhbHNlLAorCQkJCSBJdGVtUHJvcGVydHlEZXNjcmlwdG9yLkdFTkVSSUNfVkFMVUVfSU1BR0UsCisJCQkJIG51bGwsCisJCQkJIG51bGwpKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFkZHMgYSBwcm9wZXJ0eSBkZXNjcmlwdG9yIGZvciB0aGUgVmFsaWQgZmVhdHVyZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJcHJvdGVjdGVkIHZvaWQgYWRkVmFsaWRQcm9wZXJ0eURlc2NyaXB0b3IoT2JqZWN0IG9iamVjdCkgeworCQlpdGVtUHJvcGVydHlEZXNjcmlwdG9ycy5hZGQKKwkJCShjcmVhdGVJdGVtUHJvcGVydHlEZXNjcmlwdG9yCisJCQkJKCgoQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSlhZGFwdGVyRmFjdG9yeSkuZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCksCisJCQkJIGdldFJlc291cmNlTG9jYXRvcigpLAorCQkJCSBnZXRTdHJpbmcoIl9VSV9EdWJsaW5Db3JlX3ZhbGlkX2ZlYXR1cmUiKSwgLy8kTk9OLU5MUy0xJAorCQkJCSAvL2dldFN0cmluZygiX1VJX1Byb3BlcnR5RGVzY3JpcHRvcl9kZXNjcmlwdGlvbiIsICJfVUlfRHVibGluQ29yZV92YWxpZF9mZWF0dXJlIiwgIl9VSV9EdWJsaW5Db3JlX3R5cGUiKSwgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkIC8vJE5PTi1OTFMtMyQKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfRENfVmFsaWRfRGVzYyIpLCAvLyROT04tTkxTLTEkIAorCQkJCSBDb21tb25QYWNrYWdlLkxpdGVyYWxzLkRVQkxJTl9DT1JFX19WQUxJRCwKKwkJCQkgdHJ1ZSwKKwkJCQkgZmFsc2UsCisJCQkJIGZhbHNlLAorCQkJCSBJdGVtUHJvcGVydHlEZXNjcmlwdG9yLkdFTkVSSUNfVkFMVUVfSU1BR0UsCisJCQkJIG51bGwsCisJCQkJIG51bGwpKTsKKwl9IC8vIGFkZFZhbGlkUHJvcGVydHlEZXNjcmlwdG9yCisKKwkvKioKKwkgKiBUaGlzIGFkZHMgYSBwcm9wZXJ0eSBkZXNjcmlwdG9yIGZvciB0aGUgVmFsaWQgZmVhdHVyZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBhZGRWYWxpZFByb3BlcnR5RGVzY3JpcHRvckdlbihPYmplY3Qgb2JqZWN0KSB7CisJCWl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzLmFkZAorCQkJKGNyZWF0ZUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IKKwkJCQkoKChDb21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5KWFkYXB0ZXJGYWN0b3J5KS5nZXRSb290QWRhcHRlckZhY3RvcnkoKSwKKwkJCQkgZ2V0UmVzb3VyY2VMb2NhdG9yKCksCisJCQkJIGdldFN0cmluZygiX1VJX0R1YmxpbkNvcmVfdmFsaWRfZmVhdHVyZSIpLCAvLyROT04tTkxTLTEkCisJCQkJIGdldFN0cmluZygiX1VJX1Byb3BlcnR5RGVzY3JpcHRvcl9kZXNjcmlwdGlvbiIsICJfVUlfRHVibGluQ29yZV92YWxpZF9mZWF0dXJlIiwgIl9VSV9EdWJsaW5Db3JlX3R5cGUiKSwgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkIC8vJE5PTi1OTFMtMyQKKwkJCQkgQ29tbW9uUGFja2FnZS5MaXRlcmFscy5EVUJMSU5fQ09SRV9fVkFMSUQsCisJCQkJIHRydWUsCisJCQkJIGZhbHNlLAorCQkJCSBmYWxzZSwKKwkJCQkgSXRlbVByb3BlcnR5RGVzY3JpcHRvci5HRU5FUklDX1ZBTFVFX0lNQUdFLAorCQkJCSBudWxsLAorCQkJCSBudWxsKSk7CisJfQorCQorCS8qKgorCSAqIFRoaXMgcmV0dXJucyBEdWJsaW5Db3JlLmdpZi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJcHVibGljIE9iamVjdCBnZXRJbWFnZShPYmplY3Qgb2JqZWN0KSB7CisJCXJldHVybiBvdmVybGF5SW1hZ2Uob2JqZWN0LCBnZXRSZXNvdXJjZUxvY2F0b3IoKS5nZXRJbWFnZSgiZnVsbC9jdXN0b21vYmoxNi9EdWJsaW5Db3JlIikpOworCX0gLy8gZ2V0SW1hZ2UKKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyB0aGUgbGFiZWwgdGV4dCBmb3IgdGhlIGFkYXB0ZWQgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIFN0cmluZyBnZXRUZXh0KE9iamVjdCBvYmplY3QpIHsKKwkJU3RyaW5nIGxhYmVsID0gKChEdWJsaW5Db3JlKW9iamVjdCkuZ2V0VGl0bGUoKTsKKwkJcmV0dXJuIGxhYmVsID09IG51bGwgfHwgbGFiZWwubGVuZ3RoKCkgPT0gMCA/CisJCQlnZXRTdHJpbmcoIl9VSV9EdWJsaW5Db3JlX3R5cGUiKSA6IC8vJE5PTi1OTFMtMSQKKwkJCWdldFN0cmluZygiX1VJX0R1YmxpbkNvcmVfdHlwZSIpICsgIiAiICsgbGFiZWw7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAorCX0KKworCS8qKgorCSAqIFRoaXMgaGFuZGxlcyBtb2RlbCBub3RpZmljYXRpb25zIGJ5IGNhbGxpbmcge0BsaW5rICN1cGRhdGVDaGlsZHJlbn0gdG8gdXBkYXRlIGFueSBjYWNoZWQKKwkgKiBjaGlsZHJlbiBhbmQgYnkgY3JlYXRpbmcgYSB2aWV3ZXIgbm90aWZpY2F0aW9uLCB3aGljaCBpdCBwYXNzZXMgdG8ge0BsaW5rICNmaXJlTm90aWZ5Q2hhbmdlZH0uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgbm90aWZ5Q2hhbmdlZChOb3RpZmljYXRpb24gbm90aWZpY2F0aW9uKSB7CisJCXVwZGF0ZUNoaWxkcmVuKG5vdGlmaWNhdGlvbik7CisKKwkJc3dpdGNoIChub3RpZmljYXRpb24uZ2V0RmVhdHVyZUlEKER1YmxpbkNvcmUuY2xhc3MpKSB7CisJCQljYXNlIENvbW1vblBhY2thZ2UuRFVCTElOX0NPUkVfX1RJVExFOgorCQkJY2FzZSBDb21tb25QYWNrYWdlLkRVQkxJTl9DT1JFX19JREVOVElGSUVSOgorCQkJY2FzZSBDb21tb25QYWNrYWdlLkRVQkxJTl9DT1JFX19ERVNDUklQVElPTjoKKwkJCWNhc2UgQ29tbW9uUGFja2FnZS5EVUJMSU5fQ09SRV9fQ1JFQVRPUjoKKwkJCWNhc2UgQ29tbW9uUGFja2FnZS5EVUJMSU5fQ09SRV9fREFURToKKwkJCWNhc2UgQ29tbW9uUGFja2FnZS5EVUJMSU5fQ09SRV9fRk9STUFUOgorCQkJY2FzZSBDb21tb25QYWNrYWdlLkRVQkxJTl9DT1JFX19QVUJMSVNIRVI6CisJCQljYXNlIENvbW1vblBhY2thZ2UuRFVCTElOX0NPUkVfX0NPVkVSQUdFOgorCQkJY2FzZSBDb21tb25QYWNrYWdlLkRVQkxJTl9DT1JFX19DT05UUklCVVRPUjoKKwkJCWNhc2UgQ29tbW9uUGFja2FnZS5EVUJMSU5fQ09SRV9fUkVMQVRJT046CisJCQljYXNlIENvbW1vblBhY2thZ2UuRFVCTElOX0NPUkVfX1JJR0hUUzoKKwkJCWNhc2UgQ29tbW9uUGFja2FnZS5EVUJMSU5fQ09SRV9fU09VUkNFOgorCQkJY2FzZSBDb21tb25QYWNrYWdlLkRVQkxJTl9DT1JFX19TVUJKRUNUOgorCQkJY2FzZSBDb21tb25QYWNrYWdlLkRVQkxJTl9DT1JFX19UWVBFOgorCQkJY2FzZSBDb21tb25QYWNrYWdlLkRVQkxJTl9DT1JFX19MQU5HVUFHRToKKwkJCWNhc2UgQ29tbW9uUGFja2FnZS5EVUJMSU5fQ09SRV9fQklCTElPR1JBUEhJQ19DSVRBVElPTjoKKwkJCWNhc2UgQ29tbW9uUGFja2FnZS5EVUJMSU5fQ09SRV9fQ1JFQVRFRDoKKwkJCWNhc2UgQ29tbW9uUGFja2FnZS5EVUJMSU5fQ09SRV9fTElDRU5TRToKKwkJCWNhc2UgQ29tbW9uUGFja2FnZS5EVUJMSU5fQ09SRV9fUkVRVUlSRUQ6CisJCQljYXNlIENvbW1vblBhY2thZ2UuRFVCTElOX0NPUkVfX1NQQVRJQUw6CisJCQljYXNlIENvbW1vblBhY2thZ2UuRFVCTElOX0NPUkVfX1ZBTElEOgorCQkJCWZpcmVOb3RpZnlDaGFuZ2VkKG5ldyBWaWV3ZXJOb3RpZmljYXRpb24obm90aWZpY2F0aW9uLCBub3RpZmljYXRpb24uZ2V0Tm90aWZpZXIoKSwgZmFsc2UsIHRydWUpKTsKKwkJCQlyZXR1cm47CisJCX0KKwkJc3VwZXIubm90aWZ5Q2hhbmdlZChub3RpZmljYXRpb24pOworCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmVkaXQuY29tbWFuZC5Db21tYW5kUGFyYW1ldGVyfXMgZGVzY3JpYmluZyB0aGUgY2hpbGRyZW4KKwkgKiB0aGF0IGNhbiBiZSBjcmVhdGVkIHVuZGVyIHRoaXMgb2JqZWN0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIGNvbGxlY3ROZXdDaGlsZERlc2NyaXB0b3JzKENvbGxlY3Rpb248T2JqZWN0PiBuZXdDaGlsZERlc2NyaXB0b3JzLCBPYmplY3Qgb2JqZWN0KSB7CisJCXN1cGVyLmNvbGxlY3ROZXdDaGlsZERlc2NyaXB0b3JzKG5ld0NoaWxkRGVzY3JpcHRvcnMsIG9iamVjdCk7CisJfQorCisJLyoqCisJICogUmV0dXJuIHRoZSByZXNvdXJjZSBsb2NhdG9yIGZvciB0aGlzIGl0ZW0gcHJvdmlkZXIncyByZXNvdXJjZXMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIFJlc291cmNlTG9jYXRvciBnZXRSZXNvdXJjZUxvY2F0b3IoKSB7CisJCXJldHVybiBDb3JlRWRpdFBsdWdpbi5JTlNUQU5DRTsKKwl9CisKK30KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvY29tbW9uL3Byb3ZpZGVyL0lkZW50aWZpYWJsZUZpbHRlckl0ZW1Qcm92aWRlci5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9jb21tb24vcHJvdmlkZXIvSWRlbnRpZmlhYmxlRmlsdGVySXRlbVByb3ZpZGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjNhNTBhMQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvY29tbW9uL3Byb3ZpZGVyL0lkZW50aWZpYWJsZUZpbHRlckl0ZW1Qcm92aWRlci5qYXZhCkBAIC0wLDAgKzEsMTI1IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24ucHJvdmlkZXI7CisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDEwIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCitpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5BZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlJlc291cmNlTG9jYXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JRWRpdGluZ0RvbWFpbkl0ZW1Qcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbUxhYmVsUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1Qcm9wZXJ0eVNvdXJjZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JU3RydWN0dXJlZEl0ZW1Db250ZW50UHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVRyZWVJdGVtQ29udGVudFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkl0ZW1Qcm92aWRlckFkYXB0ZXI7CisKKy8qKgorICogVGhpcyBpcyB0aGUgaXRlbSBwcm92aWRlciBhZGFwdGVyIGZvciBhIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLklkZW50aWZpYWJsZUZpbHRlcn0gb2JqZWN0LgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgSWRlbnRpZmlhYmxlRmlsdGVySXRlbVByb3ZpZGVyCisJZXh0ZW5kcyBJdGVtUHJvdmlkZXJBZGFwdGVyCisJaW1wbGVtZW50cworCQlJRWRpdGluZ0RvbWFpbkl0ZW1Qcm92aWRlciwKKwkJSVN0cnVjdHVyZWRJdGVtQ29udGVudFByb3ZpZGVyLAorCQlJVHJlZUl0ZW1Db250ZW50UHJvdmlkZXIsCisJCUlJdGVtTGFiZWxQcm92aWRlciwKKwkJSUl0ZW1Qcm9wZXJ0eVNvdXJjZSB7CisJLyoqCisJICogVGhpcyBjb25zdHJ1Y3RzIGFuIGluc3RhbmNlIGZyb20gYSBmYWN0b3J5IGFuZCBhIG5vdGlmaWVyLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBJZGVudGlmaWFibGVGaWx0ZXJJdGVtUHJvdmlkZXIoQWRhcHRlckZhY3RvcnkgYWRhcHRlckZhY3RvcnkpIHsKKwkJc3VwZXIoYWRhcHRlckZhY3RvcnkpOworCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyB0aGUgcHJvcGVydHkgZGVzY3JpcHRvcnMgZm9yIHRoZSBhZGFwdGVkIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBMaXN0PElJdGVtUHJvcGVydHlEZXNjcmlwdG9yPiBnZXRQcm9wZXJ0eURlc2NyaXB0b3JzKE9iamVjdCBvYmplY3QpIHsKKwkJaWYgKGl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzID09IG51bGwpIHsKKwkJCXN1cGVyLmdldFByb3BlcnR5RGVzY3JpcHRvcnMob2JqZWN0KTsKKworCQl9CisJCXJldHVybiBpdGVtUHJvcGVydHlEZXNjcmlwdG9yczsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgSWRlbnRpZmlhYmxlRmlsdGVyLmdpZi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgT2JqZWN0IGdldEltYWdlKE9iamVjdCBvYmplY3QpIHsKKwkJcmV0dXJuIG92ZXJsYXlJbWFnZShvYmplY3QsIGdldFJlc291cmNlTG9jYXRvcigpLmdldEltYWdlKCJmdWxsL29iajE2L0lkZW50aWZpYWJsZUZpbHRlciIpKTsgLy8kTk9OLU5MUy0xJAorCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyB0aGUgbGFiZWwgdGV4dCBmb3IgdGhlIGFkYXB0ZWQgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIFN0cmluZyBnZXRUZXh0KE9iamVjdCBvYmplY3QpIHsKKwkJcmV0dXJuIGdldFN0cmluZygiX1VJX0lkZW50aWZpYWJsZUZpbHRlcl90eXBlIik7IC8vJE5PTi1OTFMtMSQKKwl9CisKKwkvKioKKwkgKiBUaGlzIGhhbmRsZXMgbW9kZWwgbm90aWZpY2F0aW9ucyBieSBjYWxsaW5nIHtAbGluayAjdXBkYXRlQ2hpbGRyZW59IHRvIHVwZGF0ZSBhbnkgY2FjaGVkCisJICogY2hpbGRyZW4gYW5kIGJ5IGNyZWF0aW5nIGEgdmlld2VyIG5vdGlmaWNhdGlvbiwgd2hpY2ggaXQgcGFzc2VzIHRvIHtAbGluayAjZmlyZU5vdGlmeUNoYW5nZWR9LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIG5vdGlmeUNoYW5nZWQoTm90aWZpY2F0aW9uIG5vdGlmaWNhdGlvbikgeworCQl1cGRhdGVDaGlsZHJlbihub3RpZmljYXRpb24pOworCQlzdXBlci5ub3RpZnlDaGFuZ2VkKG5vdGlmaWNhdGlvbik7CisJfQorCisJLyoqCisJICogVGhpcyBhZGRzIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuZWRpdC5jb21tYW5kLkNvbW1hbmRQYXJhbWV0ZXJ9cyBkZXNjcmliaW5nIHRoZSBjaGlsZHJlbgorCSAqIHRoYXQgY2FuIGJlIGNyZWF0ZWQgdW5kZXIgdGhpcyBvYmplY3QuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgY29sbGVjdE5ld0NoaWxkRGVzY3JpcHRvcnMoQ29sbGVjdGlvbjxPYmplY3Q+IG5ld0NoaWxkRGVzY3JpcHRvcnMsIE9iamVjdCBvYmplY3QpIHsKKwkJc3VwZXIuY29sbGVjdE5ld0NoaWxkRGVzY3JpcHRvcnMobmV3Q2hpbGREZXNjcmlwdG9ycywgb2JqZWN0KTsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm4gdGhlIHJlc291cmNlIGxvY2F0b3IgZm9yIHRoaXMgaXRlbSBwcm92aWRlcidzIHJlc291cmNlcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgUmVzb3VyY2VMb2NhdG9yIGdldFJlc291cmNlTG9jYXRvcigpIHsKKwkJcmV0dXJuIENvcmVFZGl0UGx1Z2luLklOU1RBTkNFOworCX0KKworfQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9jb21tb24vcHJvdmlkZXIvSWRlbnRpZmlhYmxlSXRlbVByb3ZpZGVyLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2NvbW1vbi9wcm92aWRlci9JZGVudGlmaWFibGVJdGVtUHJvdmlkZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NDY0ZTQ0Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9jb21tb24vcHJvdmlkZXIvSWRlbnRpZmlhYmxlSXRlbVByb3ZpZGVyLmphdmEKQEAgLTAsMCArMSwyNjcgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5wcm92aWRlcjsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuIAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyAKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0IAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwgCisgKiAKKyAqIENvbnRyaWJ1dG9yczogCisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKK2ltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5BZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlJlc291cmNlTG9jYXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuVVJJOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkNvbXBvc2VhYmxlQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUVkaXRpbmdEb21haW5JdGVtUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1MYWJlbFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtUHJvcGVydHlEZXNjcmlwdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtUHJvcGVydHlTb3VyY2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVN0cnVjdHVyZWRJdGVtQ29udGVudFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklUcmVlSXRlbUNvbnRlbnRQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JdGVtUHJvcGVydHlEZXNjcmlwdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JEZWNvcmF0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSXRlbVByb3ZpZGVyQWRhcHRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5WaWV3ZXJOb3RpZmljYXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5Db21tb25QYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uRHVibGluQ29yZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLklkZW50aWZpYWJsZTsKKworCisvKioKKyAqIFRoaXMgaXMgdGhlIGl0ZW0gcHJvdmlkZXIgYWRhcHRlciBmb3IgYSB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5JZGVudGlmaWFibGV9IG9iamVjdC4KKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIElkZW50aWZpYWJsZUl0ZW1Qcm92aWRlcgorCWV4dGVuZHMgSXRlbVByb3ZpZGVyQWRhcHRlcgorCWltcGxlbWVudHMJCisJCUlFZGl0aW5nRG9tYWluSXRlbVByb3ZpZGVyLAkKKwkJSVN0cnVjdHVyZWRJdGVtQ29udGVudFByb3ZpZGVyLAkKKwkJSVRyZWVJdGVtQ29udGVudFByb3ZpZGVyLAkKKwkJSUl0ZW1MYWJlbFByb3ZpZGVyLAkKKwkJSUl0ZW1Qcm9wZXJ0eVNvdXJjZSB7CisJLyoqCisJICogVGhpcyBjb25zdHJ1Y3RzIGFuIGluc3RhbmNlIGZyb20gYSBmYWN0b3J5IGFuZCBhIG5vdGlmaWVyLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBJZGVudGlmaWFibGVJdGVtUHJvdmlkZXIoQWRhcHRlckZhY3RvcnkgYWRhcHRlckZhY3RvcnkpIHsKKwkJc3VwZXIoYWRhcHRlckZhY3RvcnkpOworCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyB0aGUgcHJvcGVydHkgZGVzY3JpcHRvcnMgZm9yIHRoZSBhZGFwdGVkIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgTGlzdDxJSXRlbVByb3BlcnR5RGVzY3JpcHRvcj4gZ2V0UHJvcGVydHlEZXNjcmlwdG9ycyhPYmplY3Qgb2JqZWN0KSB7CisJCWlmIChpdGVtUHJvcGVydHlEZXNjcmlwdG9ycyA9PSBudWxsKSB7CisJCQlzdXBlci5nZXRQcm9wZXJ0eURlc2NyaXB0b3JzKG9iamVjdCk7CisJCQkvL2dldFByb3BlcnR5RGVzY3JpcHRvcnNHZW4ob2JqZWN0KTsKKwkJCWFkZER1YmxpbkNvcmVQcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0KTsKKwkJfQorCQlyZXR1cm4gaXRlbVByb3BlcnR5RGVzY3JpcHRvcnM7CisJfSAvLyBnZXRQcm9wZXJ0eURlc2NyaXB0b3JzCisJCisJLyoqCisJICogVGhpcyByZXR1cm5zIHRoZSBwcm9wZXJ0eSBkZXNjcmlwdG9ycyBmb3IgdGhlIGFkYXB0ZWQgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisvLwlAT3ZlcnJpZGUKKwlwdWJsaWMgTGlzdDxJSXRlbVByb3BlcnR5RGVzY3JpcHRvcj4gZ2V0UHJvcGVydHlEZXNjcmlwdG9yc0dlbihPYmplY3Qgb2JqZWN0KSB7CisJCWlmIChpdGVtUHJvcGVydHlEZXNjcmlwdG9ycyA9PSBudWxsKSB7CisJCQlzdXBlci5nZXRQcm9wZXJ0eURlc2NyaXB0b3JzKG9iamVjdCk7CisKKwkJCWFkZFVSSVByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QpOworCQkJYWRkVHlwZVVSSVByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QpOworCQl9CisJCXJldHVybiBpdGVtUHJvcGVydHlEZXNjcmlwdG9yczsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiAKKwkgKiBUaGlzIGFkZHMgdGhlIER1YmxpbiBDb3JlIG9mIHRoZSBJZGVudGlmaWFibGUgYXMgYSBwcm9wZXJ0eQorCSAqIGNhdGVnb3J5IG9mIGFsbCBJZGVudGlmaWFibGVzLiAKKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCXByb3RlY3RlZCB2b2lkIGFkZER1YmxpbkNvcmVQcm9wZXJ0eURlc2NyaXB0b3IoT2JqZWN0IG9iamVjdCkgeworCQlmaW5hbCBEdWJsaW5Db3JlIGRjID0gKChJZGVudGlmaWFibGUpIG9iamVjdCkuZ2V0RHVibGluQ29yZSgpOworCisJCWZpbmFsIEFkYXB0ZXJGYWN0b3J5IGZhY3RvcnkgPSAoKENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnkpIGFkYXB0ZXJGYWN0b3J5KQorCQkJCS5nZXRSb290QWRhcHRlckZhY3RvcnkoKTsKKworCQlmaW5hbCBEdWJsaW5Db3JlSXRlbVByb3ZpZGVyIGRjSXRlbVByb3ZpZGVyID0gKER1YmxpbkNvcmVJdGVtUHJvdmlkZXIpIChmYWN0b3J5CisJCQkJLmFkYXB0KGRjLCBJSXRlbVByb3BlcnR5U291cmNlLmNsYXNzKSk7CisKKwkJZmluYWwgTGlzdDxJSXRlbVByb3BlcnR5RGVzY3JpcHRvcj4gZGNEZXNjcmlwdG9ycyA9IGRjSXRlbVByb3ZpZGVyCisJCQkJLmdldFByb3BlcnR5RGVzY3JpcHRvcnMoZGMpOworCisJCWZvciAoSXRlcmF0b3I8SUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I+IGl0ZXIgPSBkY0Rlc2NyaXB0b3JzLml0ZXJhdG9yKCk7IGl0ZXIuaGFzTmV4dCgpOykgeworCQkJZmluYWwgSXRlbVByb3BlcnR5RGVzY3JpcHRvciBkY0Rlc2NyaXB0b3IgPSAoSXRlbVByb3BlcnR5RGVzY3JpcHRvcikgaXRlcgorCQkJCQkubmV4dCgpOworCQkJaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMuYWRkKG5ldyBJdGVtUHJvcGVydHlEZXNjcmlwdG9yRGVjb3JhdG9yKAorCQkJCQlkYywgZGNEZXNjcmlwdG9yKSB7CisJCQkJQE92ZXJyaWRlCisJCQkJcHVibGljIFN0cmluZyBnZXRDYXRlZ29yeShPYmplY3QgdGhpc09iamVjdCkgeworCQkJCQlyZXR1cm4gZ2V0U3RyaW5nKCJfVUlfSWRlbnRpZmlhYmxlX2R1YmxpbkNvcmVfZmVhdHVyZSIpOworCQkJCX0KKwkJCX0pOworCQl9IC8vIGZvciBlYWNoIGlkRGVzY3JpcHRvcgorCX0gLy8gYWRkRHVibGluQ29yZVByb3BlcnR5RGVzY3JpcHRvcmNyaXB0b3IKKwkKKwkvKioKKwkgKiBUaGlzIGFkZHMgYSBwcm9wZXJ0eSBkZXNjcmlwdG9yIGZvciB0aGUgVVJJIGZlYXR1cmUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgYWRkVVJJUHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdCBvYmplY3QpIHsKKwkJaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMuYWRkCisJCQkoY3JlYXRlSXRlbVByb3BlcnR5RGVzY3JpcHRvcgorCQkJCSgoKENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnkpYWRhcHRlckZhY3RvcnkpLmdldFJvb3RBZGFwdGVyRmFjdG9yeSgpLAorCQkJCSBnZXRSZXNvdXJjZUxvY2F0b3IoKSwKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfSWRlbnRpZmlhYmxlX3VSSV9mZWF0dXJlIiksIC8vJE5PTi1OTFMtMSQKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfUHJvcGVydHlEZXNjcmlwdG9yX2Rlc2NyaXB0aW9uIiwgIl9VSV9JZGVudGlmaWFibGVfdVJJX2ZlYXR1cmUiLCAiX1VJX0lkZW50aWZpYWJsZV90eXBlIiksIC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJCAvLyROT04tTkxTLTMkCisJCQkJIENvbW1vblBhY2thZ2UuTGl0ZXJhbHMuSURFTlRJRklBQkxFX19VUkksCisJCQkJIHRydWUsCisJCQkJIGZhbHNlLAorCQkJCSBmYWxzZSwKKwkJCQkgSXRlbVByb3BlcnR5RGVzY3JpcHRvci5HRU5FUklDX1ZBTFVFX0lNQUdFLAorCQkJCSBudWxsLAorCQkJCSBudWxsKSk7CisJfQorCisJLyoqCisJICogVGhpcyBhZGRzIGEgcHJvcGVydHkgZGVzY3JpcHRvciBmb3IgdGhlIFR5cGUgVVJJIGZlYXR1cmUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgYWRkVHlwZVVSSVByb3BlcnR5RGVzY3JpcHRvcihPYmplY3Qgb2JqZWN0KSB7CisJCWl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzLmFkZAorCQkJKGNyZWF0ZUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IKKwkJCQkoKChDb21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5KWFkYXB0ZXJGYWN0b3J5KS5nZXRSb290QWRhcHRlckZhY3RvcnkoKSwKKwkJCQkgZ2V0UmVzb3VyY2VMb2NhdG9yKCksCisJCQkJIGdldFN0cmluZygiX1VJX0lkZW50aWZpYWJsZV90eXBlVVJJX2ZlYXR1cmUiKSwgLy8kTk9OLU5MUy0xJAorCQkJCSBnZXRTdHJpbmcoIl9VSV9Qcm9wZXJ0eURlc2NyaXB0b3JfZGVzY3JpcHRpb24iLCAiX1VJX0lkZW50aWZpYWJsZV90eXBlVVJJX2ZlYXR1cmUiLCAiX1VJX0lkZW50aWZpYWJsZV90eXBlIiksIC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJCAvLyROT04tTkxTLTMkCisJCQkJIENvbW1vblBhY2thZ2UuTGl0ZXJhbHMuSURFTlRJRklBQkxFX19UWVBFX1VSSSwKKwkJCQkgZmFsc2UsCisJCQkJIGZhbHNlLAorCQkJCSBmYWxzZSwKKwkJCQkgSXRlbVByb3BlcnR5RGVzY3JpcHRvci5HRU5FUklDX1ZBTFVFX0lNQUdFLAorCQkJCSBudWxsLAorCQkJCSBudWxsKSk7CisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIElkZW50aWZpYWJsZS5naWYuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIE9iamVjdCBnZXRJbWFnZShPYmplY3Qgb2JqZWN0KSB7CisJCXJldHVybiBvdmVybGF5SW1hZ2Uob2JqZWN0LCBnZXRSZXNvdXJjZUxvY2F0b3IoKS5nZXRJbWFnZSgiZnVsbC9vYmoxNi9JZGVudGlmaWFibGUiKSk7IC8vJE5PTi1OTFMtMSQKKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgdGhlIGxhYmVsIHRleHQgZm9yIHRoZSBhZGFwdGVkIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgU3RyaW5nIGdldFRleHQoT2JqZWN0IG9iamVjdCkgeworCQkKKyAgICAgICAvLyBVc2UgdGhlIGR1YmxpbiBjb3JlIHRpdGxlIGlmIGl0J3MgYXZhaWxhYmxlLCBvdGhlcndpc2UgdXNlCisJCS8vIHRoZSBVUkkKKwkJZmluYWwgSWRlbnRpZmlhYmxlIGlkZW50aWZpYWJsZSA9IChJZGVudGlmaWFibGUpb2JqZWN0OworCQkKKwkJZmluYWwgU3RyaW5nIHRpdGxlID0gaWRlbnRpZmlhYmxlLmdldER1YmxpbkNvcmUoKS5nZXRUaXRsZSgpOworCQkvLyBXYXMgYSB0aXRsZSBzcGVjaWZpZWQ/CisJCWlmICh0aXRsZSAhPSBudWxsICYmICF0aXRsZS5lcXVhbHMoIiIpKSB7CisJCQkvLyBZZXMKKwkJCXJldHVybiBpZGVudGlmaWFibGUuZ2V0VVJJKCkubGFzdFNlZ21lbnQoKSsiICIrdGl0bGU7CisJCX0KKwkJZWxzZSBpZihpZGVudGlmaWFibGUuZ2V0VVJJKCkgIT0gbnVsbCl7CisJCQlyZXR1cm4gaWRlbnRpZmlhYmxlLmdldFVSSSgpLmxhc3RTZWdtZW50KCk7CisJCX0gZWxzZSByZXR1cm4gaWRlbnRpZmlhYmxlLnRvU3RyaW5nKCk7CisJCQorCX0gLy8gZ2V0VGV4dAorCisJLyoqCisJICogVGhpcyByZXR1cm5zIHRoZSBsYWJlbCB0ZXh0IGZvciB0aGUgYWRhcHRlZCBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKy8vCUBPdmVycmlkZQorCXB1YmxpYyBTdHJpbmcgZ2V0VGV4dEdlbihPYmplY3Qgb2JqZWN0KSB7CisJCVVSSSBsYWJlbFZhbHVlID0gKChJZGVudGlmaWFibGUpb2JqZWN0KS5nZXRVUkkoKTsKKwkJU3RyaW5nIGxhYmVsID0gbGFiZWxWYWx1ZSA9PSBudWxsID8gbnVsbCA6IGxhYmVsVmFsdWUudG9TdHJpbmcoKTsKKwkJcmV0dXJuIGxhYmVsID09IG51bGwgfHwgbGFiZWwubGVuZ3RoKCkgPT0gMCA/CisJCQlnZXRTdHJpbmcoIl9VSV9JZGVudGlmaWFibGVfdHlwZSIpIDogLy8kTk9OLU5MUy0xJAorCQkJZ2V0U3RyaW5nKCJfVUlfSWRlbnRpZmlhYmxlX3R5cGUiKSArICIgIiArIGxhYmVsOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKKwl9CisJCisJLyoqCisJICogVGhpcyBoYW5kbGVzIG1vZGVsIG5vdGlmaWNhdGlvbnMgYnkgY2FsbGluZyB7QGxpbmsgI3VwZGF0ZUNoaWxkcmVufSB0byB1cGRhdGUgYW55IGNhY2hlZAorCSAqIGNoaWxkcmVuIGFuZCBieSBjcmVhdGluZyBhIHZpZXdlciBub3RpZmljYXRpb24sIHdoaWNoIGl0IHBhc3NlcyB0byB7QGxpbmsgI2ZpcmVOb3RpZnlDaGFuZ2VkfS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBub3RpZnlDaGFuZ2VkKE5vdGlmaWNhdGlvbiBub3RpZmljYXRpb24pIHsKKwkJdXBkYXRlQ2hpbGRyZW4obm90aWZpY2F0aW9uKTsKKworCQlzd2l0Y2ggKG5vdGlmaWNhdGlvbi5nZXRGZWF0dXJlSUQoSWRlbnRpZmlhYmxlLmNsYXNzKSkgeworCQkJY2FzZSBDb21tb25QYWNrYWdlLklERU5USUZJQUJMRV9fVVJJOgorCQkJY2FzZSBDb21tb25QYWNrYWdlLklERU5USUZJQUJMRV9fVFlQRV9VUkk6CisJCQljYXNlIENvbW1vblBhY2thZ2UuSURFTlRJRklBQkxFX19EVUJMSU5fQ09SRToKKwkJCQlmaXJlTm90aWZ5Q2hhbmdlZChuZXcgVmlld2VyTm90aWZpY2F0aW9uKG5vdGlmaWNhdGlvbiwgbm90aWZpY2F0aW9uLmdldE5vdGlmaWVyKCksIGZhbHNlLCB0cnVlKSk7CisJCQkJcmV0dXJuOworCQl9CisJCXN1cGVyLm5vdGlmeUNoYW5nZWQobm90aWZpY2F0aW9uKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFkZHMge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lZGl0LmNvbW1hbmQuQ29tbWFuZFBhcmFtZXRlcn1zIGRlc2NyaWJpbmcgdGhlIGNoaWxkcmVuCisJICogdGhhdCBjYW4gYmUgY3JlYXRlZCB1bmRlciB0aGlzIG9iamVjdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgdm9pZCBjb2xsZWN0TmV3Q2hpbGREZXNjcmlwdG9ycyhDb2xsZWN0aW9uPE9iamVjdD4gbmV3Q2hpbGREZXNjcmlwdG9ycywgT2JqZWN0IG9iamVjdCkgeworCQlzdXBlci5jb2xsZWN0TmV3Q2hpbGREZXNjcmlwdG9ycyhuZXdDaGlsZERlc2NyaXB0b3JzLCBvYmplY3QpOworCX0KKworCS8qKgorCSAqIFJldHVybiB0aGUgcmVzb3VyY2UgbG9jYXRvciBmb3IgdGhpcyBpdGVtIHByb3ZpZGVyJ3MgcmVzb3VyY2VzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBSZXNvdXJjZUxvY2F0b3IgZ2V0UmVzb3VyY2VMb2NhdG9yKCkgeworCQlyZXR1cm4gQ29yZUVkaXRQbHVnaW4uSU5TVEFOQ0U7CisJfQorCit9CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2NvbW1vbi9wcm92aWRlci9TdHJpbmdWYWx1ZUl0ZW1Qcm92aWRlci5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9jb21tb24vcHJvdmlkZXIvU3RyaW5nVmFsdWVJdGVtUHJvdmlkZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yOGUwNDI3Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9jb21tb24vcHJvdmlkZXIvU3RyaW5nVmFsdWVJdGVtUHJvdmlkZXIuamF2YQpAQCAtMCwwICsxLDE2MiBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLnByb3ZpZGVyOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDEwIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOworaW1wb3J0IGphdmEudXRpbC5MaXN0OworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5SZXNvdXJjZUxvY2F0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JRWRpdGluZ0RvbWFpbkl0ZW1Qcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbUxhYmVsUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1Qcm9wZXJ0eVNvdXJjZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JU3RydWN0dXJlZEl0ZW1Db250ZW50UHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVRyZWVJdGVtQ29udGVudFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSXRlbVByb3ZpZGVyQWRhcHRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5WaWV3ZXJOb3RpZmljYXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5Db21tb25QYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uU3RyaW5nVmFsdWU7CisKKy8qKgorICogVGhpcyBpcyB0aGUgaXRlbSBwcm92aWRlciBhZGFwdGVyIGZvciBhIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLlN0cmluZ1ZhbHVlfSBvYmplY3QuCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBTdHJpbmdWYWx1ZUl0ZW1Qcm92aWRlcgorCWV4dGVuZHMgSXRlbVByb3ZpZGVyQWRhcHRlcgorCWltcGxlbWVudHMKKwkJSUVkaXRpbmdEb21haW5JdGVtUHJvdmlkZXIsCisJCUlTdHJ1Y3R1cmVkSXRlbUNvbnRlbnRQcm92aWRlciwKKwkJSVRyZWVJdGVtQ29udGVudFByb3ZpZGVyLAorCQlJSXRlbUxhYmVsUHJvdmlkZXIsCisJCUlJdGVtUHJvcGVydHlTb3VyY2UgeworCS8qKgorCSAqIFRoaXMgY29uc3RydWN0cyBhbiBpbnN0YW5jZSBmcm9tIGEgZmFjdG9yeSBhbmQgYSBub3RpZmllci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgU3RyaW5nVmFsdWVJdGVtUHJvdmlkZXIoQWRhcHRlckZhY3RvcnkgYWRhcHRlckZhY3RvcnkpIHsKKwkJc3VwZXIoYWRhcHRlckZhY3RvcnkpOworCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyB0aGUgcHJvcGVydHkgZGVzY3JpcHRvcnMgZm9yIHRoZSBhZGFwdGVkIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBMaXN0PElJdGVtUHJvcGVydHlEZXNjcmlwdG9yPiBnZXRQcm9wZXJ0eURlc2NyaXB0b3JzKE9iamVjdCBvYmplY3QpIHsKKwkJaWYgKGl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzID09IG51bGwpIHsKKwkJCXN1cGVyLmdldFByb3BlcnR5RGVzY3JpcHRvcnMob2JqZWN0KTsKKworCQkJYWRkVmFsdWVQcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0KTsKKwkJfQorCQlyZXR1cm4gaXRlbVByb3BlcnR5RGVzY3JpcHRvcnM7CisJfQorCisJLyoqCisJICogVGhpcyBhZGRzIGEgcHJvcGVydHkgZGVzY3JpcHRvciBmb3IgdGhlIFZhbHVlIGZlYXR1cmUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgYWRkVmFsdWVQcm9wZXJ0eURlc2NyaXB0b3IoT2JqZWN0IG9iamVjdCkgeworCQlpdGVtUHJvcGVydHlEZXNjcmlwdG9ycy5hZGQKKwkJCShjcmVhdGVJdGVtUHJvcGVydHlEZXNjcmlwdG9yCisJCQkJKCgoQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSlhZGFwdGVyRmFjdG9yeSkuZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCksCisJCQkJIGdldFJlc291cmNlTG9jYXRvcigpLAorCQkJCSBnZXRTdHJpbmcoIl9VSV9TdHJpbmdWYWx1ZV92YWx1ZV9mZWF0dXJlIiksIC8vJE5PTi1OTFMtMSQKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfUHJvcGVydHlEZXNjcmlwdG9yX2Rlc2NyaXB0aW9uIiwgIl9VSV9TdHJpbmdWYWx1ZV92YWx1ZV9mZWF0dXJlIiwgIl9VSV9TdHJpbmdWYWx1ZV90eXBlIiksIC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJCAvLyROT04tTkxTLTMkCisJCQkJIENvbW1vblBhY2thZ2UuTGl0ZXJhbHMuU1RSSU5HX1ZBTFVFX19WQUxVRSwKKwkJCQkgdHJ1ZSwKKwkJCQkgZmFsc2UsCisJCQkJIGZhbHNlLAorCQkJCSBJdGVtUHJvcGVydHlEZXNjcmlwdG9yLkdFTkVSSUNfVkFMVUVfSU1BR0UsCisJCQkJIG51bGwsCisJCQkJIG51bGwpKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgU3RyaW5nVmFsdWUuZ2lmLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBPYmplY3QgZ2V0SW1hZ2UoT2JqZWN0IG9iamVjdCkgeworCQlyZXR1cm4gb3ZlcmxheUltYWdlKG9iamVjdCwgZ2V0UmVzb3VyY2VMb2NhdG9yKCkuZ2V0SW1hZ2UoImZ1bGwvb2JqMTYvU3RyaW5nVmFsdWUiKSk7IC8vJE5PTi1OTFMtMSQKKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgdGhlIGxhYmVsIHRleHQgZm9yIHRoZSBhZGFwdGVkIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgU3RyaW5nIGdldFRleHQoT2JqZWN0IG9iamVjdCkgeworCQlTdHJpbmcgbGFiZWwgPSAoKFN0cmluZ1ZhbHVlKW9iamVjdCkuZ2V0VmFsdWUoKTsKKwkJcmV0dXJuIGxhYmVsID09IG51bGwgfHwgbGFiZWwubGVuZ3RoKCkgPT0gMCA/CisJCQlnZXRTdHJpbmcoIl9VSV9TdHJpbmdWYWx1ZV90eXBlIikgOiAvLyROT04tTkxTLTEkCisJCQlsYWJlbDsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCisJfQorCisJLyoqCisJICogVGhpcyBoYW5kbGVzIG1vZGVsIG5vdGlmaWNhdGlvbnMgYnkgY2FsbGluZyB7QGxpbmsgI3VwZGF0ZUNoaWxkcmVufSB0byB1cGRhdGUgYW55IGNhY2hlZAorCSAqIGNoaWxkcmVuIGFuZCBieSBjcmVhdGluZyBhIHZpZXdlciBub3RpZmljYXRpb24sIHdoaWNoIGl0IHBhc3NlcyB0byB7QGxpbmsgI2ZpcmVOb3RpZnlDaGFuZ2VkfS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBub3RpZnlDaGFuZ2VkKE5vdGlmaWNhdGlvbiBub3RpZmljYXRpb24pIHsKKwkJdXBkYXRlQ2hpbGRyZW4obm90aWZpY2F0aW9uKTsKKworCQlzd2l0Y2ggKG5vdGlmaWNhdGlvbi5nZXRGZWF0dXJlSUQoU3RyaW5nVmFsdWUuY2xhc3MpKSB7CisJCQljYXNlIENvbW1vblBhY2thZ2UuU1RSSU5HX1ZBTFVFX19WQUxVRToKKwkJCQlmaXJlTm90aWZ5Q2hhbmdlZChuZXcgVmlld2VyTm90aWZpY2F0aW9uKG5vdGlmaWNhdGlvbiwgbm90aWZpY2F0aW9uLmdldE5vdGlmaWVyKCksIGZhbHNlLCB0cnVlKSk7CisJCQkJcmV0dXJuOworCQl9CisJCXN1cGVyLm5vdGlmeUNoYW5nZWQobm90aWZpY2F0aW9uKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFkZHMge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lZGl0LmNvbW1hbmQuQ29tbWFuZFBhcmFtZXRlcn1zIGRlc2NyaWJpbmcgdGhlIGNoaWxkcmVuCisJICogdGhhdCBjYW4gYmUgY3JlYXRlZCB1bmRlciB0aGlzIG9iamVjdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgdm9pZCBjb2xsZWN0TmV3Q2hpbGREZXNjcmlwdG9ycyhDb2xsZWN0aW9uPE9iamVjdD4gbmV3Q2hpbGREZXNjcmlwdG9ycywgT2JqZWN0IG9iamVjdCkgeworCQlzdXBlci5jb2xsZWN0TmV3Q2hpbGREZXNjcmlwdG9ycyhuZXdDaGlsZERlc2NyaXB0b3JzLCBvYmplY3QpOworCX0KKworCS8qKgorCSAqIFJldHVybiB0aGUgcmVzb3VyY2UgbG9jYXRvciBmb3IgdGhpcyBpdGVtIHByb3ZpZGVyJ3MgcmVzb3VyY2VzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBSZXNvdXJjZUxvY2F0b3IgZ2V0UmVzb3VyY2VMb2NhdG9yKCkgeworCQlyZXR1cm4gQ29yZUVkaXRQbHVnaW4uSU5TVEFOQ0U7CisJfQorCit9CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2NvbW1vbi9wcm92aWRlci9TdHJpbmdWYWx1ZUxpc3RJdGVtUHJvdmlkZXIuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvY29tbW9uL3Byb3ZpZGVyL1N0cmluZ1ZhbHVlTGlzdEl0ZW1Qcm92aWRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEwZTcyNGYKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2NvbW1vbi9wcm92aWRlci9TdHJpbmdWYWx1ZUxpc3RJdGVtUHJvdmlkZXIuamF2YQpAQCAtMCwwICsxLDE3NCBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLnByb3ZpZGVyOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDEwIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOworaW1wb3J0IGphdmEudXRpbC5MaXN0OworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5SZXNvdXJjZUxvY2F0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVTdHJ1Y3R1cmFsRmVhdHVyZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JRWRpdGluZ0RvbWFpbkl0ZW1Qcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbUxhYmVsUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1Qcm9wZXJ0eVNvdXJjZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JU3RydWN0dXJlZEl0ZW1Db250ZW50UHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVRyZWVJdGVtQ29udGVudFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkl0ZW1Qcm92aWRlckFkYXB0ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuVmlld2VyTm90aWZpY2F0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uQ29tbW9uRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLkNvbW1vblBhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5TdHJpbmdWYWx1ZUxpc3Q7CisKKy8qKgorICogVGhpcyBpcyB0aGUgaXRlbSBwcm92aWRlciBhZGFwdGVyIGZvciBhIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLlN0cmluZ1ZhbHVlTGlzdH0gb2JqZWN0LgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgU3RyaW5nVmFsdWVMaXN0SXRlbVByb3ZpZGVyCisJZXh0ZW5kcyBJdGVtUHJvdmlkZXJBZGFwdGVyCisJaW1wbGVtZW50cworCQlJRWRpdGluZ0RvbWFpbkl0ZW1Qcm92aWRlciwKKwkJSVN0cnVjdHVyZWRJdGVtQ29udGVudFByb3ZpZGVyLAorCQlJVHJlZUl0ZW1Db250ZW50UHJvdmlkZXIsCisJCUlJdGVtTGFiZWxQcm92aWRlciwKKwkJSUl0ZW1Qcm9wZXJ0eVNvdXJjZSB7CisJLyoqCisJICogVGhpcyBjb25zdHJ1Y3RzIGFuIGluc3RhbmNlIGZyb20gYSBmYWN0b3J5IGFuZCBhIG5vdGlmaWVyLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBTdHJpbmdWYWx1ZUxpc3RJdGVtUHJvdmlkZXIoQWRhcHRlckZhY3RvcnkgYWRhcHRlckZhY3RvcnkpIHsKKwkJc3VwZXIoYWRhcHRlckZhY3RvcnkpOworCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyB0aGUgcHJvcGVydHkgZGVzY3JpcHRvcnMgZm9yIHRoZSBhZGFwdGVkIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBMaXN0PElJdGVtUHJvcGVydHlEZXNjcmlwdG9yPiBnZXRQcm9wZXJ0eURlc2NyaXB0b3JzKE9iamVjdCBvYmplY3QpIHsKKwkJaWYgKGl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzID09IG51bGwpIHsKKwkJCXN1cGVyLmdldFByb3BlcnR5RGVzY3JpcHRvcnMob2JqZWN0KTsKKworCQl9CisJCXJldHVybiBpdGVtUHJvcGVydHlEZXNjcmlwdG9yczsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHNwZWNpZmllcyBob3cgdG8gaW1wbGVtZW50IHtAbGluayAjZ2V0Q2hpbGRyZW59IGFuZCBpcyB1c2VkIHRvIGRlZHVjZSBhbiBhcHByb3ByaWF0ZSBmZWF0dXJlIGZvciBhbgorCSAqIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuZWRpdC5jb21tYW5kLkFkZENvbW1hbmR9LCB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmVkaXQuY29tbWFuZC5SZW1vdmVDb21tYW5kfSBvcgorCSAqIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuZWRpdC5jb21tYW5kLk1vdmVDb21tYW5kfSBpbiB7QGxpbmsgI2NyZWF0ZUNvbW1hbmR9LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBDb2xsZWN0aW9uPD8gZXh0ZW5kcyBFU3RydWN0dXJhbEZlYXR1cmU+IGdldENoaWxkcmVuRmVhdHVyZXMoT2JqZWN0IG9iamVjdCkgeworCQlpZiAoY2hpbGRyZW5GZWF0dXJlcyA9PSBudWxsKSB7CisJCQlzdXBlci5nZXRDaGlsZHJlbkZlYXR1cmVzKG9iamVjdCk7CisJCQljaGlsZHJlbkZlYXR1cmVzLmFkZChDb21tb25QYWNrYWdlLkxpdGVyYWxzLlNUUklOR19WQUxVRV9MSVNUX19WQUxVRVMpOworCQl9CisJCXJldHVybiBjaGlsZHJlbkZlYXR1cmVzOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCBFU3RydWN0dXJhbEZlYXR1cmUgZ2V0Q2hpbGRGZWF0dXJlKE9iamVjdCBvYmplY3QsIE9iamVjdCBjaGlsZCkgeworCQkvLyBDaGVjayB0aGUgdHlwZSBvZiB0aGUgc3BlY2lmaWVkIGNoaWxkIG9iamVjdCBhbmQgcmV0dXJuIHRoZSBwcm9wZXIgZmVhdHVyZSB0byB1c2UgZm9yCisJCS8vIGFkZGluZyAoc2VlIHtAbGluayBBZGRDb21tYW5kfSkgaXQgYXMgYSBjaGlsZC4KKworCQlyZXR1cm4gc3VwZXIuZ2V0Q2hpbGRGZWF0dXJlKG9iamVjdCwgY2hpbGQpOworCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyBTdHJpbmdWYWx1ZUxpc3QuZ2lmLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgT2JqZWN0IGdldEltYWdlKE9iamVjdCBvYmplY3QpIHsKKwkJcmV0dXJuIG92ZXJsYXlJbWFnZShvYmplY3QsIGdldFJlc291cmNlTG9jYXRvcigpLmdldEltYWdlKCJmdWxsL2N1c3RvbW9iajE2L0xpc3QuZ2lmIikpOyAvLyROT04tTkxTLTEkCisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIHRoZSBsYWJlbCB0ZXh0IGZvciB0aGUgYWRhcHRlZCBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIFN0cmluZyBnZXRUZXh0KE9iamVjdCBvYmplY3QpIHsKKwkJU3RyaW5nIGxhYmVsID0gKChTdHJpbmdWYWx1ZUxpc3Qpb2JqZWN0KS5lQ29udGFpbmluZ0ZlYXR1cmUoKS5nZXROYW1lKCk7CisJCXJldHVybiBsYWJlbCA9PSBudWxsIHx8IGxhYmVsLmxlbmd0aCgpID09IDAgPworCQkJZ2V0U3RyaW5nKCJfVUlfU3RyaW5nVmFsdWVMaXN0X3R5cGUiKSA6IC8vJE5PTi1OTFMtMSQKKwkJCWxhYmVsOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKKwl9CisKKwkvKioKKwkgKiBUaGlzIGhhbmRsZXMgbW9kZWwgbm90aWZpY2F0aW9ucyBieSBjYWxsaW5nIHtAbGluayAjdXBkYXRlQ2hpbGRyZW59IHRvIHVwZGF0ZSBhbnkgY2FjaGVkCisJICogY2hpbGRyZW4gYW5kIGJ5IGNyZWF0aW5nIGEgdmlld2VyIG5vdGlmaWNhdGlvbiwgd2hpY2ggaXQgcGFzc2VzIHRvIHtAbGluayAjZmlyZU5vdGlmeUNoYW5nZWR9LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIG5vdGlmeUNoYW5nZWQoTm90aWZpY2F0aW9uIG5vdGlmaWNhdGlvbikgeworCQl1cGRhdGVDaGlsZHJlbihub3RpZmljYXRpb24pOworCisJCXN3aXRjaCAobm90aWZpY2F0aW9uLmdldEZlYXR1cmVJRChTdHJpbmdWYWx1ZUxpc3QuY2xhc3MpKSB7CisJCQljYXNlIENvbW1vblBhY2thZ2UuU1RSSU5HX1ZBTFVFX0xJU1RfX1ZBTFVFUzoKKwkJCQlmaXJlTm90aWZ5Q2hhbmdlZChuZXcgVmlld2VyTm90aWZpY2F0aW9uKG5vdGlmaWNhdGlvbiwgbm90aWZpY2F0aW9uLmdldE5vdGlmaWVyKCksIHRydWUsIGZhbHNlKSk7CisJCQkJcmV0dXJuOworCQl9CisJCXN1cGVyLm5vdGlmeUNoYW5nZWQobm90aWZpY2F0aW9uKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFkZHMge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lZGl0LmNvbW1hbmQuQ29tbWFuZFBhcmFtZXRlcn1zIGRlc2NyaWJpbmcgdGhlIGNoaWxkcmVuCisJICogdGhhdCBjYW4gYmUgY3JlYXRlZCB1bmRlciB0aGlzIG9iamVjdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgdm9pZCBjb2xsZWN0TmV3Q2hpbGREZXNjcmlwdG9ycyhDb2xsZWN0aW9uPE9iamVjdD4gbmV3Q2hpbGREZXNjcmlwdG9ycywgT2JqZWN0IG9iamVjdCkgeworCQlzdXBlci5jb2xsZWN0TmV3Q2hpbGREZXNjcmlwdG9ycyhuZXdDaGlsZERlc2NyaXB0b3JzLCBvYmplY3QpOworCisJCW5ld0NoaWxkRGVzY3JpcHRvcnMuYWRkCisJCQkoY3JlYXRlQ2hpbGRQYXJhbWV0ZXIKKwkJCQkoQ29tbW9uUGFja2FnZS5MaXRlcmFscy5TVFJJTkdfVkFMVUVfTElTVF9fVkFMVUVTLAorCQkJCSBDb21tb25GYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVTdHJpbmdWYWx1ZSgpKSk7CisJfQorCisJLyoqCisJICogUmV0dXJuIHRoZSByZXNvdXJjZSBsb2NhdG9yIGZvciB0aGlzIGl0ZW0gcHJvdmlkZXIncyByZXNvdXJjZXMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIFJlc291cmNlTG9jYXRvciBnZXRSZXNvdXJjZUxvY2F0b3IoKSB7CisJCXJldHVybiBDb3JlRWRpdFBsdWdpbi5JTlNUQU5DRTsKKwl9CisKK30KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvY29tbW9uL3V0aWwvQ29tbW9uQWRhcHRlckZhY3RvcnkuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvY29tbW9uL3V0aWwvQ29tbW9uQWRhcHRlckZhY3RvcnkuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYmU2ZTYwCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9jb21tb24vdXRpbC9Db21tb25BZGFwdGVyRmFjdG9yeS5qYXZhCkBAIC0wLDAgKzEsMzE2IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24udXRpbDsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuIAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyAKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0IAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwgCisgKiAKKyAqIENvbnRyaWJ1dG9yczogCisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5BZGFwdGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LmltcGwuQWRhcHRlckZhY3RvcnlJbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uQ29tbW9uUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLkRvdWJsZVZhbHVlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uRG91YmxlVmFsdWVMaXN0OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uRG91YmxlVmFsdWVNYXRyaXg7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5EdWJsaW5Db3JlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uSWRlbnRpZmlhYmxlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uSWRlbnRpZmlhYmxlRmlsdGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uU2FuaXR5Q2hlY2tlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLlN0cmluZ1ZhbHVlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uU3RyaW5nVmFsdWVMaXN0OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5Nb2RpZmlhYmxlOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiBUaGUgPGI+QWRhcHRlciBGYWN0b3J5PC9iPiBmb3IgdGhlIG1vZGVsLgorICogSXQgcHJvdmlkZXMgYW4gYWRhcHRlciA8Y29kZT5jcmVhdGVYWFg8L2NvZGU+IG1ldGhvZCBmb3IgZWFjaCBjbGFzcyBvZiB0aGUgbW9kZWwuCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5Db21tb25QYWNrYWdlCisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBDb21tb25BZGFwdGVyRmFjdG9yeSBleHRlbmRzIEFkYXB0ZXJGYWN0b3J5SW1wbCB7CisJLyoqCisJICogVGhlIGNhY2hlZCBtb2RlbCBwYWNrYWdlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBzdGF0aWMgQ29tbW9uUGFja2FnZSBtb2RlbFBhY2thZ2U7CisKKwkvKioKKwkgKiBDcmVhdGVzIGFuIGluc3RhbmNlIG9mIHRoZSBhZGFwdGVyIGZhY3RvcnkuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIENvbW1vbkFkYXB0ZXJGYWN0b3J5KCkgeworCQlpZiAobW9kZWxQYWNrYWdlID09IG51bGwpIHsKKwkJCW1vZGVsUGFja2FnZSA9IENvbW1vblBhY2thZ2UuZUlOU1RBTkNFOworCQl9CisJfQorCisJLyoqCisJICogUmV0dXJucyB3aGV0aGVyIHRoaXMgZmFjdG9yeSBpcyBhcHBsaWNhYmxlIGZvciB0aGUgdHlwZSBvZiB0aGUgb2JqZWN0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIDxjb2RlPnRydWU8L2NvZGU+IGlmIHRoZSBvYmplY3QgaXMgZWl0aGVyIHRoZSBtb2RlbCdzIHBhY2thZ2Ugb3IgaXMgYW4gaW5zdGFuY2Ugb2JqZWN0IG9mIHRoZSBtb2RlbC4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHdoZXRoZXIgdGhpcyBmYWN0b3J5IGlzIGFwcGxpY2FibGUgZm9yIHRoZSB0eXBlIG9mIHRoZSBvYmplY3QuCisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBib29sZWFuIGlzRmFjdG9yeUZvclR5cGUoT2JqZWN0IG9iamVjdCkgeworCQlpZiAob2JqZWN0ID09IG1vZGVsUGFja2FnZSkgeworCQkJcmV0dXJuIHRydWU7CisJCX0KKwkJaWYgKG9iamVjdCBpbnN0YW5jZW9mIEVPYmplY3QpIHsKKwkJCXJldHVybiAoKEVPYmplY3Qpb2JqZWN0KS5lQ2xhc3MoKS5nZXRFUGFja2FnZSgpID09IG1vZGVsUGFja2FnZTsKKwkJfQorCQlyZXR1cm4gZmFsc2U7CisJfQorCisJLyoqCisJICogVGhlIHN3aXRjaCB0aGF0IGRlbGVnYXRlcyB0byB0aGUgPGNvZGU+Y3JlYXRlWFhYPC9jb2RlPiBtZXRob2RzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBDb21tb25Td2l0Y2g8QWRhcHRlcj4gbW9kZWxTd2l0Y2ggPQorCQluZXcgQ29tbW9uU3dpdGNoPEFkYXB0ZXI+KCkgeworCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgQWRhcHRlciBjYXNlRHVibGluQ29yZShEdWJsaW5Db3JlIG9iamVjdCkgeworCQkJCXJldHVybiBjcmVhdGVEdWJsaW5Db3JlQWRhcHRlcigpOworCQkJfQorCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgQWRhcHRlciBjYXNlSWRlbnRpZmlhYmxlKElkZW50aWZpYWJsZSBvYmplY3QpIHsKKwkJCQlyZXR1cm4gY3JlYXRlSWRlbnRpZmlhYmxlQWRhcHRlcigpOworCQkJfQorCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgPFQ+IEFkYXB0ZXIgY2FzZUNvbXBhcmFibGUoQ29tcGFyYWJsZTxUPiBvYmplY3QpIHsKKwkJCQlyZXR1cm4gY3JlYXRlQ29tcGFyYWJsZUFkYXB0ZXIoKTsKKwkJCX0KKwkJCUBPdmVycmlkZQorCQkJcHVibGljIEFkYXB0ZXIgY2FzZUlkZW50aWZpYWJsZUZpbHRlcihJZGVudGlmaWFibGVGaWx0ZXIgb2JqZWN0KSB7CisJCQkJcmV0dXJuIGNyZWF0ZUlkZW50aWZpYWJsZUZpbHRlckFkYXB0ZXIoKTsKKwkJCX0KKwkJCUBPdmVycmlkZQorCQkJcHVibGljIEFkYXB0ZXIgY2FzZURvdWJsZVZhbHVlTGlzdChEb3VibGVWYWx1ZUxpc3Qgb2JqZWN0KSB7CisJCQkJcmV0dXJuIGNyZWF0ZURvdWJsZVZhbHVlTGlzdEFkYXB0ZXIoKTsKKwkJCX0KKwkJCUBPdmVycmlkZQorCQkJcHVibGljIEFkYXB0ZXIgY2FzZURvdWJsZVZhbHVlTWF0cml4KERvdWJsZVZhbHVlTWF0cml4IG9iamVjdCkgeworCQkJCXJldHVybiBjcmVhdGVEb3VibGVWYWx1ZU1hdHJpeEFkYXB0ZXIoKTsKKwkJCX0KKwkJCUBPdmVycmlkZQorCQkJcHVibGljIEFkYXB0ZXIgY2FzZURvdWJsZVZhbHVlKERvdWJsZVZhbHVlIG9iamVjdCkgeworCQkJCXJldHVybiBjcmVhdGVEb3VibGVWYWx1ZUFkYXB0ZXIoKTsKKwkJCX0KKwkJCUBPdmVycmlkZQorCQkJcHVibGljIEFkYXB0ZXIgY2FzZVN0cmluZ1ZhbHVlTGlzdChTdHJpbmdWYWx1ZUxpc3Qgb2JqZWN0KSB7CisJCQkJcmV0dXJuIGNyZWF0ZVN0cmluZ1ZhbHVlTGlzdEFkYXB0ZXIoKTsKKwkJCX0KKwkJCUBPdmVycmlkZQorCQkJcHVibGljIEFkYXB0ZXIgY2FzZVN0cmluZ1ZhbHVlKFN0cmluZ1ZhbHVlIG9iamVjdCkgeworCQkJCXJldHVybiBjcmVhdGVTdHJpbmdWYWx1ZUFkYXB0ZXIoKTsKKwkJCX0KKwkJCUBPdmVycmlkZQorCQkJcHVibGljIEFkYXB0ZXIgY2FzZVNhbml0eUNoZWNrZXIoU2FuaXR5Q2hlY2tlciBvYmplY3QpIHsKKwkJCQlyZXR1cm4gY3JlYXRlU2FuaXR5Q2hlY2tlckFkYXB0ZXIoKTsKKwkJCX0KKwkJCUBPdmVycmlkZQorCQkJcHVibGljIEFkYXB0ZXIgY2FzZU1vZGlmaWFibGUoTW9kaWZpYWJsZSBvYmplY3QpIHsKKwkJCQlyZXR1cm4gY3JlYXRlTW9kaWZpYWJsZUFkYXB0ZXIoKTsKKwkJCX0KKwkJCUBPdmVycmlkZQorCQkJcHVibGljIEFkYXB0ZXIgZGVmYXVsdENhc2UoRU9iamVjdCBvYmplY3QpIHsKKwkJCQlyZXR1cm4gY3JlYXRlRU9iamVjdEFkYXB0ZXIoKTsKKwkJCX0KKwkJfTsKKworCS8qKgorCSAqIENyZWF0ZXMgYW4gYWRhcHRlciBmb3IgdGhlIDxjb2RlPnRhcmdldDwvY29kZT4uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gdGFyZ2V0IHRoZSBvYmplY3QgdG8gYWRhcHQuCisJICogQHJldHVybiB0aGUgYWRhcHRlciBmb3IgdGhlIDxjb2RlPnRhcmdldDwvY29kZT4uCisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZUFkYXB0ZXIoTm90aWZpZXIgdGFyZ2V0KSB7CisJCXJldHVybiBtb2RlbFN3aXRjaC5kb1N3aXRjaCgoRU9iamVjdCl0YXJnZXQpOworCX0KKworCisJLyoqCisJICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLkR1YmxpbkNvcmUgPGVtPkR1YmxpbiBDb3JlPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsKKwkgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uRHVibGluQ29yZQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVEdWJsaW5Db3JlQWRhcHRlcigpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLklkZW50aWZpYWJsZSA8ZW0+SWRlbnRpZmlhYmxlPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsKKwkgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uSWRlbnRpZmlhYmxlCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZUlkZW50aWZpYWJsZUFkYXB0ZXIoKSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgamF2YS5sYW5nLkNvbXBhcmFibGUgPGVtPkNvbXBhcmFibGU8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOworCSAqIGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZSB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5LgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgorCSAqIEBzZWUgamF2YS5sYW5nLkNvbXBhcmFibGUKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlQ29tcGFyYWJsZUFkYXB0ZXIoKSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5JZGVudGlmaWFibGVGaWx0ZXIgPGVtPklkZW50aWZpYWJsZSBGaWx0ZXI8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOworCSAqIGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZSB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5LgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5JZGVudGlmaWFibGVGaWx0ZXIKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlSWRlbnRpZmlhYmxlRmlsdGVyQWRhcHRlcigpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLkRvdWJsZVZhbHVlTGlzdCA8ZW0+RG91YmxlIFZhbHVlIExpc3Q8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOworCSAqIGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZSB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5LgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5Eb3VibGVWYWx1ZUxpc3QKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlRG91YmxlVmFsdWVMaXN0QWRhcHRlcigpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLkRvdWJsZVZhbHVlTWF0cml4IDxlbT5Eb3VibGUgVmFsdWUgTWF0cml4PC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsKKwkgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uRG91YmxlVmFsdWVNYXRyaXgKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlRG91YmxlVmFsdWVNYXRyaXhBZGFwdGVyKCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uRG91YmxlVmFsdWUgPGVtPkRvdWJsZSBWYWx1ZTwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7CisJICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLkRvdWJsZVZhbHVlCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZURvdWJsZVZhbHVlQWRhcHRlcigpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLlN0cmluZ1ZhbHVlTGlzdCA8ZW0+U3RyaW5nIFZhbHVlIExpc3Q8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOworCSAqIGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZSB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5LgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5TdHJpbmdWYWx1ZUxpc3QKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlU3RyaW5nVmFsdWVMaXN0QWRhcHRlcigpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLlN0cmluZ1ZhbHVlIDxlbT5TdHJpbmcgVmFsdWU8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOworCSAqIGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZSB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5LgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5TdHJpbmdWYWx1ZQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVTdHJpbmdWYWx1ZUFkYXB0ZXIoKSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5TYW5pdHlDaGVja2VyIDxlbT5TYW5pdHkgQ2hlY2tlcjwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7CisJICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLlNhbml0eUNoZWNrZXIKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlU2FuaXR5Q2hlY2tlckFkYXB0ZXIoKSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLk1vZGlmaWFibGUgPGVtPk1vZGlmaWFibGU8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOworCSAqIGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZSB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5LgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLk1vZGlmaWFibGUKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlTW9kaWZpYWJsZUFkYXB0ZXIoKSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgdGhlIGRlZmF1bHQgY2FzZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwuCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZUVPYmplY3RBZGFwdGVyKCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKK30gLy9Db21tb25BZGFwdGVyRmFjdG9yeQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9jb21tb24vdXRpbC9Db21tb25Td2l0Y2guamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvY29tbW9uL3V0aWwvQ29tbW9uU3dpdGNoLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2M1Nzg0OAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvY29tbW9uL3V0aWwvQ29tbW9uU3dpdGNoLmphdmEKQEAgLTAsMCArMSwzNDYgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi51dGlsOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAKKyAqIENvcHlyaWdodCAoYykgMjAwNiwgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4gCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIAorICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wIAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQgCisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbCAKKyAqIAorICogQ29udHJpYnV0b3JzOiAKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGphdmEudXRpbC5MaXN0OworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzczsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLkNvbW1vblBhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5Eb3VibGVWYWx1ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLkRvdWJsZVZhbHVlTGlzdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLkRvdWJsZVZhbHVlTWF0cml4OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uRHVibGluQ29yZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLklkZW50aWZpYWJsZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLklkZW50aWZpYWJsZUZpbHRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLlNhbml0eUNoZWNrZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5TdHJpbmdWYWx1ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLlN0cmluZ1ZhbHVlTGlzdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuTW9kaWZpYWJsZTsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogVGhlIDxiPlN3aXRjaDwvYj4gZm9yIHRoZSBtb2RlbCdzIGluaGVyaXRhbmNlIGhpZXJhcmNoeS4KKyAqIEl0IHN1cHBvcnRzIHRoZSBjYWxsIHtAbGluayAjZG9Td2l0Y2goRU9iamVjdCkgZG9Td2l0Y2gob2JqZWN0KX0KKyAqIHRvIGludm9rZSB0aGUgPGNvZGU+Y2FzZVhYWDwvY29kZT4gbWV0aG9kIGZvciBlYWNoIGNsYXNzIG9mIHRoZSBtb2RlbCwKKyAqIHN0YXJ0aW5nIHdpdGggdGhlIGFjdHVhbCBjbGFzcyBvZiB0aGUgb2JqZWN0CisgKiBhbmQgcHJvY2VlZGluZyB1cCB0aGUgaW5oZXJpdGFuY2UgaGllcmFyY2h5CisgKiB1bnRpbCBhIG5vbi1udWxsIHJlc3VsdCBpcyByZXR1cm5lZCwKKyAqIHdoaWNoIGlzIHRoZSByZXN1bHQgb2YgdGhlIHN3aXRjaC4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLkNvbW1vblBhY2thZ2UKKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIENvbW1vblN3aXRjaDxUMT4geworCS8qKgorCSAqIFRoZSBjYWNoZWQgbW9kZWwgcGFja2FnZQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBzdGF0aWMgQ29tbW9uUGFja2FnZSBtb2RlbFBhY2thZ2U7CisKKwkvKioKKwkgKiBDcmVhdGVzIGFuIGluc3RhbmNlIG9mIHRoZSBzd2l0Y2guCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIENvbW1vblN3aXRjaCgpIHsKKwkJaWYgKG1vZGVsUGFja2FnZSA9PSBudWxsKSB7CisJCQltb2RlbFBhY2thZ2UgPSBDb21tb25QYWNrYWdlLmVJTlNUQU5DRTsKKwkJfQorCX0KKworCS8qKgorCSAqIENhbGxzIDxjb2RlPmNhc2VYWFg8L2NvZGU+IGZvciBlYWNoIGNsYXNzIG9mIHRoZSBtb2RlbCB1bnRpbCBvbmUgcmV0dXJucyBhIG5vbiBudWxsIHJlc3VsdDsgaXQgeWllbGRzIHRoYXQgcmVzdWx0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgZmlyc3Qgbm9uLW51bGwgcmVzdWx0IHJldHVybmVkIGJ5IGEgPGNvZGU+Y2FzZVhYWDwvY29kZT4gY2FsbC4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFQxIGRvU3dpdGNoKEVPYmplY3QgdGhlRU9iamVjdCkgeworCQlyZXR1cm4gZG9Td2l0Y2godGhlRU9iamVjdC5lQ2xhc3MoKSwgdGhlRU9iamVjdCk7CisJfQorCisJLyoqCisJICogQ2FsbHMgPGNvZGU+Y2FzZVhYWDwvY29kZT4gZm9yIGVhY2ggY2xhc3Mgb2YgdGhlIG1vZGVsIHVudGlsIG9uZSByZXR1cm5zIGEgbm9uIG51bGwgcmVzdWx0OyBpdCB5aWVsZHMgdGhhdCByZXN1bHQuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBmaXJzdCBub24tbnVsbCByZXN1bHQgcmV0dXJuZWQgYnkgYSA8Y29kZT5jYXNlWFhYPC9jb2RlPiBjYWxsLgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgVDEgZG9Td2l0Y2goRUNsYXNzIHRoZUVDbGFzcywgRU9iamVjdCB0aGVFT2JqZWN0KSB7CisJCWlmICh0aGVFQ2xhc3MuZUNvbnRhaW5lcigpID09IG1vZGVsUGFja2FnZSkgeworCQkJcmV0dXJuIGRvU3dpdGNoKHRoZUVDbGFzcy5nZXRDbGFzc2lmaWVySUQoKSwgdGhlRU9iamVjdCk7CisJCX0KKwkJZWxzZSB7CisJCQlMaXN0PEVDbGFzcz4gZVN1cGVyVHlwZXMgPSB0aGVFQ2xhc3MuZ2V0RVN1cGVyVHlwZXMoKTsKKwkJCXJldHVybgorCQkJCWVTdXBlclR5cGVzLmlzRW1wdHkoKSA/CisJCQkJCWRlZmF1bHRDYXNlKHRoZUVPYmplY3QpIDoKKwkJCQkJZG9Td2l0Y2goZVN1cGVyVHlwZXMuZ2V0KDApLCB0aGVFT2JqZWN0KTsKKwkJfQorCX0KKworCS8qKgorCSAqIENhbGxzIDxjb2RlPmNhc2VYWFg8L2NvZGU+IGZvciBlYWNoIGNsYXNzIG9mIHRoZSBtb2RlbCB1bnRpbCBvbmUgcmV0dXJucyBhIG5vbiBudWxsIHJlc3VsdDsgaXQgeWllbGRzIHRoYXQgcmVzdWx0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgZmlyc3Qgbm9uLW51bGwgcmVzdWx0IHJldHVybmVkIGJ5IGEgPGNvZGU+Y2FzZVhYWDwvY29kZT4gY2FsbC4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIFQxIGRvU3dpdGNoKGludCBjbGFzc2lmaWVySUQsIEVPYmplY3QgdGhlRU9iamVjdCkgeworCQlzd2l0Y2ggKGNsYXNzaWZpZXJJRCkgeworCQkJY2FzZSBDb21tb25QYWNrYWdlLkRVQkxJTl9DT1JFOiB7CisJCQkJRHVibGluQ29yZSBkdWJsaW5Db3JlID0gKER1YmxpbkNvcmUpdGhlRU9iamVjdDsKKwkJCQlUMSByZXN1bHQgPSBjYXNlRHVibGluQ29yZShkdWJsaW5Db3JlKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGRlZmF1bHRDYXNlKHRoZUVPYmplY3QpOworCQkJCXJldHVybiByZXN1bHQ7CisJCQl9CisJCQljYXNlIENvbW1vblBhY2thZ2UuSURFTlRJRklBQkxFOiB7CisJCQkJSWRlbnRpZmlhYmxlIGlkZW50aWZpYWJsZSA9IChJZGVudGlmaWFibGUpdGhlRU9iamVjdDsKKwkJCQlUMSByZXN1bHQgPSBjYXNlSWRlbnRpZmlhYmxlKGlkZW50aWZpYWJsZSk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlQ29tcGFyYWJsZShpZGVudGlmaWFibGUpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZVNhbml0eUNoZWNrZXIoaWRlbnRpZmlhYmxlKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGRlZmF1bHRDYXNlKHRoZUVPYmplY3QpOworCQkJCXJldHVybiByZXN1bHQ7CisJCQl9CisJCQljYXNlIENvbW1vblBhY2thZ2UuSURFTlRJRklBQkxFX0ZJTFRFUjogeworCQkJCUlkZW50aWZpYWJsZUZpbHRlciBpZGVudGlmaWFibGVGaWx0ZXIgPSAoSWRlbnRpZmlhYmxlRmlsdGVyKXRoZUVPYmplY3Q7CisJCQkJVDEgcmVzdWx0ID0gY2FzZUlkZW50aWZpYWJsZUZpbHRlcihpZGVudGlmaWFibGVGaWx0ZXIpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gZGVmYXVsdENhc2UodGhlRU9iamVjdCk7CisJCQkJcmV0dXJuIHJlc3VsdDsKKwkJCX0KKwkJCWNhc2UgQ29tbW9uUGFja2FnZS5ET1VCTEVfVkFMVUVfTElTVDogeworCQkJCURvdWJsZVZhbHVlTGlzdCBkb3VibGVWYWx1ZUxpc3QgPSAoRG91YmxlVmFsdWVMaXN0KXRoZUVPYmplY3Q7CisJCQkJVDEgcmVzdWx0ID0gY2FzZURvdWJsZVZhbHVlTGlzdChkb3VibGVWYWx1ZUxpc3QpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gZGVmYXVsdENhc2UodGhlRU9iamVjdCk7CisJCQkJcmV0dXJuIHJlc3VsdDsKKwkJCX0KKwkJCWNhc2UgQ29tbW9uUGFja2FnZS5ET1VCTEVfVkFMVUVfTUFUUklYOiB7CisJCQkJRG91YmxlVmFsdWVNYXRyaXggZG91YmxlVmFsdWVNYXRyaXggPSAoRG91YmxlVmFsdWVNYXRyaXgpdGhlRU9iamVjdDsKKwkJCQlUMSByZXN1bHQgPSBjYXNlRG91YmxlVmFsdWVNYXRyaXgoZG91YmxlVmFsdWVNYXRyaXgpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gZGVmYXVsdENhc2UodGhlRU9iamVjdCk7CisJCQkJcmV0dXJuIHJlc3VsdDsKKwkJCX0KKwkJCWNhc2UgQ29tbW9uUGFja2FnZS5ET1VCTEVfVkFMVUU6IHsKKwkJCQlEb3VibGVWYWx1ZSBkb3VibGVWYWx1ZSA9IChEb3VibGVWYWx1ZSl0aGVFT2JqZWN0OworCQkJCVQxIHJlc3VsdCA9IGNhc2VEb3VibGVWYWx1ZShkb3VibGVWYWx1ZSk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlTW9kaWZpYWJsZShkb3VibGVWYWx1ZSk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBkZWZhdWx0Q2FzZSh0aGVFT2JqZWN0KTsKKwkJCQlyZXR1cm4gcmVzdWx0OworCQkJfQorCQkJY2FzZSBDb21tb25QYWNrYWdlLlNUUklOR19WQUxVRV9MSVNUOiB7CisJCQkJU3RyaW5nVmFsdWVMaXN0IHN0cmluZ1ZhbHVlTGlzdCA9IChTdHJpbmdWYWx1ZUxpc3QpdGhlRU9iamVjdDsKKwkJCQlUMSByZXN1bHQgPSBjYXNlU3RyaW5nVmFsdWVMaXN0KHN0cmluZ1ZhbHVlTGlzdCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBkZWZhdWx0Q2FzZSh0aGVFT2JqZWN0KTsKKwkJCQlyZXR1cm4gcmVzdWx0OworCQkJfQorCQkJY2FzZSBDb21tb25QYWNrYWdlLlNUUklOR19WQUxVRTogeworCQkJCVN0cmluZ1ZhbHVlIHN0cmluZ1ZhbHVlID0gKFN0cmluZ1ZhbHVlKXRoZUVPYmplY3Q7CisJCQkJVDEgcmVzdWx0ID0gY2FzZVN0cmluZ1ZhbHVlKHN0cmluZ1ZhbHVlKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VNb2RpZmlhYmxlKHN0cmluZ1ZhbHVlKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGRlZmF1bHRDYXNlKHRoZUVPYmplY3QpOworCQkJCXJldHVybiByZXN1bHQ7CisJCQl9CisJCQljYXNlIENvbW1vblBhY2thZ2UuU0FOSVRZX0NIRUNLRVI6IHsKKwkJCQlTYW5pdHlDaGVja2VyIHNhbml0eUNoZWNrZXIgPSAoU2FuaXR5Q2hlY2tlcil0aGVFT2JqZWN0OworCQkJCVQxIHJlc3VsdCA9IGNhc2VTYW5pdHlDaGVja2VyKHNhbml0eUNoZWNrZXIpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gZGVmYXVsdENhc2UodGhlRU9iamVjdCk7CisJCQkJcmV0dXJuIHJlc3VsdDsKKwkJCX0KKwkJCWRlZmF1bHQ6IHJldHVybiBkZWZhdWx0Q2FzZSh0aGVFT2JqZWN0KTsKKwkJfQorCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkR1YmxpbiBDb3JlPC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7CisJICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCisJICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+RHVibGluIENvcmU8L2VtPicuCisJICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBUMSBjYXNlRHVibGluQ29yZShEdWJsaW5Db3JlIG9iamVjdCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5JZGVudGlmaWFibGU8L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsKKwkgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KKwkgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5JZGVudGlmaWFibGU8L2VtPicuCisJICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBUMSBjYXNlSWRlbnRpZmlhYmxlKElkZW50aWZpYWJsZSBvYmplY3QpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+Q29tcGFyYWJsZTwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOworCSAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgorCSAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkNvbXBhcmFibGU8L2VtPicuCisJICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyA8VD4gVDEgY2FzZUNvbXBhcmFibGUoQ29tcGFyYWJsZTxUPiBvYmplY3QpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+SWRlbnRpZmlhYmxlIEZpbHRlcjwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOworCSAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgorCSAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPklkZW50aWZpYWJsZSBGaWx0ZXI8L2VtPicuCisJICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBUMSBjYXNlSWRlbnRpZmlhYmxlRmlsdGVyKElkZW50aWZpYWJsZUZpbHRlciBvYmplY3QpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+RG91YmxlIFZhbHVlIExpc3Q8L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsKKwkgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KKwkgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5Eb3VibGUgVmFsdWUgTGlzdDwvZW0+Jy4KKwkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFQxIGNhc2VEb3VibGVWYWx1ZUxpc3QoRG91YmxlVmFsdWVMaXN0IG9iamVjdCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5Eb3VibGUgVmFsdWUgTWF0cml4PC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7CisJICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCisJICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+RG91YmxlIFZhbHVlIE1hdHJpeDwvZW0+Jy4KKwkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFQxIGNhc2VEb3VibGVWYWx1ZU1hdHJpeChEb3VibGVWYWx1ZU1hdHJpeCBvYmplY3QpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+RG91YmxlIFZhbHVlPC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7CisJICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCisJICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+RG91YmxlIFZhbHVlPC9lbT4nLgorCSAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVDEgY2FzZURvdWJsZVZhbHVlKERvdWJsZVZhbHVlIG9iamVjdCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5TdHJpbmcgVmFsdWUgTGlzdDwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOworCSAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgorCSAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPlN0cmluZyBWYWx1ZSBMaXN0PC9lbT4nLgorCSAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVDEgY2FzZVN0cmluZ1ZhbHVlTGlzdChTdHJpbmdWYWx1ZUxpc3Qgb2JqZWN0KSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPlN0cmluZyBWYWx1ZTwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOworCSAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgorCSAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPlN0cmluZyBWYWx1ZTwvZW0+Jy4KKwkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFQxIGNhc2VTdHJpbmdWYWx1ZShTdHJpbmdWYWx1ZSBvYmplY3QpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+U2FuaXR5IENoZWNrZXI8L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsKKwkgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KKwkgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5TYW5pdHkgQ2hlY2tlcjwvZW0+Jy4KKwkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFQxIGNhc2VTYW5pdHlDaGVja2VyKFNhbml0eUNoZWNrZXIgb2JqZWN0KSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPk1vZGlmaWFibGU8L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsKKwkgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KKwkgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5Nb2RpZmlhYmxlPC9lbT4nLgorCSAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVDEgY2FzZU1vZGlmaWFibGUoTW9kaWZpYWJsZSBvYmplY3QpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+RU9iamVjdDwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOworCSAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLCBidXQgdGhpcyBpcyB0aGUgbGFzdCBjYXNlIGFueXdheS4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KKwkgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5FT2JqZWN0PC9lbT4nLgorCSAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVDEgZGVmYXVsdENhc2UoRU9iamVjdCBvYmplY3QpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCit9IC8vQ29tbW9uU3dpdGNoCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2V4cGVyaW1lbnQvRXhwZXJpbWVudC5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9leHBlcmltZW50L0V4cGVyaW1lbnQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ODZjNTA2Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9leHBlcmltZW50L0V4cGVyaW1lbnQuamF2YQpAQCAtMCwwICsxLDk5IEBACisvLyBFeHBlcmltZW50LmphdmEKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmV4cGVyaW1lbnQ7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuRUxpc3Q7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5JZGVudGlmaWFibGU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLk1vZGlmaWVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zY2VuYXJpby5TY2VuYXJpbzsKKworLyoqCisgKiBBbiB7QGxpbmsgRXhwZXJpbWVudH0gaXMgYSBzcGVjaWZpY2F0aW9uIG9mIGhvdyB0byBtb2RpZnkgYSAiYmFzZSIKKyAqIHtAbGluayBTY2VuYXJpb30gdG8gY3JlYXRlIG9uZSBvciBtb3JlICJkZXJpdmVkIiB7QGxpbmsgU2NlbmFyaW99cy4gVGhlCisgKiBwdXJwb3NlIG9mIHRoaXMgaXMgdG8gYWxsb3cgZm9yIHRoZSBkZWZpbml0aW9uIG9mIGEgcmVsYXRlZCBzcGVjdHJ1bSBvZgorICoge0BsaW5rIFNjZW5hcmlvfXMgdGhhdCBoYXZlIHNsaWdodGx5IChvciBkcmFtYXRpY2FsbHkpIGRpZmZlcmVudAorICogY29uZmlndXJhdGlvbnMuIFRoZSBpbnRlbnQgaXMgdG8gZW5hYmxlIHRoZSBleHBsb3JhdGlvbiBvZiB0aGUgZWZmZWN0CisgKiBkaWZmZXJlbnQgY29uZmlndXJhdGlvbnMgaGF2ZSBvbiB0aGUgb3V0Y29tZSBvZiB0aGUge0BsaW5rIFNjZW5hcmlvfS4KKyAqIDxwPgorICogQW4ge0BsaW5rIEV4cGVyaW1lbnR9IGNvbnNpc3RzIG9mIGEgaGllcmFyY2hpY2FsIG9yZ2FuaXphdGlvbiBvZgorICoge0BsaW5rIE1vZGlmaWVyfXMgYW5kIG90aGVyIHtAbGluayBFeHBlcmltZW50fXMuCisgKiAKKyAqIEBtb2RlbAorICovCitwdWJsaWMgaW50ZXJmYWNlIEV4cGVyaW1lbnQgZXh0ZW5kcyBJZGVudGlmaWFibGUgeworCisJU3RyaW5nIFVSSV9UWVBFX0VYUEVSSU1FTlRfU0VHTUVOVCA9ICJleHBlcmltZW50IjsKKworCS8qKgorCSAqIEByZXR1cm4gdGhlIHtAbGluayBTY2VuYXJpb30gdGhhdCB3aWxsIGJlIG1vZGlmaWVkIGR1cmluZyB0aGUgZXhwZXJpbWVudC4KKwkgKiBAbW9kZWwgY29udGFpbm1lbnQ9ImZhbHNlIgorCSAqLworCVNjZW5hcmlvIGdldFNjZW5hcmlvKCk7CisJCisJLyoqCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmV4cGVyaW1lbnQuRXhwZXJpbWVudCNnZXRTY2VuYXJpbyA8ZW0+U2NlbmFyaW88L2VtPn0nIHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPlNjZW5hcmlvPC9lbT4nIHJlZmVyZW5jZS4KKwkgKiBAc2VlICNnZXRTY2VuYXJpbygpCisJICogQGdlbmVyYXRlZAorCSAqLworCXZvaWQgc2V0U2NlbmFyaW8oU2NlbmFyaW8gdmFsdWUpOworCisJLyoqCisJICogQHJldHVybiB0aGUge0BsaW5rIE1vZGlmaWVyfXMgdGhhdCBzcGVjaWZ5IHRoZSBjaGFuZ2VzIHRvIHRoZQorCSAqICAgICAgICAge0BsaW5rIFNjZW5hcmlvfS4KKwkgKiBAbW9kZWwgY29udGFpbm1lbnQ9ImZhbHNlIgorCSAqLworCUVMaXN0PE1vZGlmaWVyPiBnZXRNb2RpZmllcnMoKTsKKworCS8qKgorCSAqIEByZXR1cm4gdGhlIHtAbGluayBFeHBlcmltZW50fSdzIHtAbGluayBTY2VuYXJpb30gbW9kaWZpZWQgYnkgdGhlCisJICogICAgICAgICB7QGxpbmsgRXhwZXJpbWVudH0ncyBjb2xsZWN0aW9uIG9mIHtAbGluayBNb2RpZmllcn1zCisJICogICAgICAgICBAc2VlICNpc0NvbXBsZXRlKCkKKwkgKiBAbW9kZWwgdm9sYXRpbGU9InRydWUiIHRyYW5zaWVudD0idHJ1ZSIgY2hhbmdlYWJsZT0iZmFsc2UiCisJICovCisJU2NlbmFyaW8gdXBkYXRlU2NlbmFyaW8oKTsKKwkKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBtb2RlbAorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlTY2VuYXJpbyBpbml0U2NlbmFyaW8oKTsKKworCS8qKgorCSAqIEByZXR1cm4gYSB7QGxpbmsgTGlzdH0gb2Yge0BsaW5rIFN0cmluZ31zIHRoYXQgc3VtbWFyaXplIHRoZQorCSAqICAgICAgICAgbW9kaWZpY2F0aW9ucyBtYWRlIGR1cmluZyB0aGUgbGFzdCBjYWxsIHRvCisJICogICAgICAgICB7QGxpbmsgI2dldE5leHRTY2VuYXJpbygpfS4KKwkgKiBtb2RlbCB2b2xhdGlsZT0idHJ1ZSIgdHJhbnNpZW50PSJ0cnVlIiBjaGFuZ2VhYmxlPSJmYWxzZSIKKwkgKi8KKwlMaXN0PFN0cmluZz4gZ2V0TW9kaWZpY2F0aW9uU3VtbWFyeSgpOworCQorCS8qKgorCSAqIEByZXR1cm4gYSB7QGxpbmsgTGlzdH0gb2Yge0BsaW5rIFN0cmluZ31zIHRoYXQgc3VtbWFyaXplIHRoZSB2YWx1ZXMgb2YKKwkgKiAgICAgICAgIGFsbCBvZiB0aGUgcGFyYW1ldGVycy4KKwkgKiBtb2RlbCB2b2xhdGlsZT0idHJ1ZSIgdHJhbnNpZW50PSJ0cnVlIiBjaGFuZ2VhYmxlPSJmYWxzZSIKKwkgKi8KKwlMaXN0PFN0cmluZz4gZ2V0UGFyYW1ldGVyU3VtbWFyeSgpOworCisJLyoqCisJICogQHJldHVybiA8Y29kZT50cnVlPC9jb2RlPiBpZiB0aGUge0BsaW5rIEV4cGVyaW1lbnR9IGlzIGNvbXBsZXRlLAorCSAqICAgICAgICAgPGNvZGU+ZmFsc2U8L2NvZGU+LCBvdGhlcndpc2UuCisJICogQG1vZGVsIHZvbGF0aWxlPSJ0cnVlIiB0cmFuc2llbnQ9InRydWUiIGNoYW5nZWFibGU9ImZhbHNlIgorCSAqLworCWJvb2xlYW4gaXNDb21wbGV0ZSgpOworfSAvLyBFeHBlcmltZW50CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2V4cGVyaW1lbnQvRXhwZXJpbWVudEZhY3RvcnkuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZXhwZXJpbWVudC9FeHBlcmltZW50RmFjdG9yeS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYzOWNmM2EKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2V4cGVyaW1lbnQvRXhwZXJpbWVudEZhY3RvcnkuamF2YQpAQCAtMCwwICsxLDUxIEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5leHBlcmltZW50OworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FRmFjdG9yeTsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogVGhlIDxiPkZhY3Rvcnk8L2I+IGZvciB0aGUgbW9kZWwuCisgKiBJdCBwcm92aWRlcyBhIGNyZWF0ZSBtZXRob2QgZm9yIGVhY2ggbm9uLWFic3RyYWN0IGNsYXNzIG9mIHRoZSBtb2RlbC4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZXhwZXJpbWVudC5FeHBlcmltZW50UGFja2FnZQorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgaW50ZXJmYWNlIEV4cGVyaW1lbnRGYWN0b3J5IGV4dGVuZHMgRUZhY3RvcnkgeworCS8qKgorCSAqIFRoZSBzaW5nbGV0b24gaW5zdGFuY2Ugb2YgdGhlIGZhY3RvcnkuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRXhwZXJpbWVudEZhY3RvcnkgZUlOU1RBTkNFID0gb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmV4cGVyaW1lbnQuaW1wbC5FeHBlcmltZW50RmFjdG9yeUltcGwuaW5pdCgpOworCisJLyoqCisJICogUmV0dXJucyBhIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5FeHBlcmltZW50PC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiBhIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5FeHBlcmltZW50PC9lbT4nLgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFeHBlcmltZW50IGNyZWF0ZUV4cGVyaW1lbnQoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIHBhY2thZ2Ugc3VwcG9ydGVkIGJ5IHRoaXMgZmFjdG9yeS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIHBhY2thZ2Ugc3VwcG9ydGVkIGJ5IHRoaXMgZmFjdG9yeS4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRXhwZXJpbWVudFBhY2thZ2UgZ2V0RXhwZXJpbWVudFBhY2thZ2UoKTsKKworfSAvL0V4cGVyaW1lbnRGYWN0b3J5CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2V4cGVyaW1lbnQvRXhwZXJpbWVudFBhY2thZ2UuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZXhwZXJpbWVudC9FeHBlcmltZW50UGFja2FnZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU3ZDI5NjYKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2V4cGVyaW1lbnQvRXhwZXJpbWVudFBhY2thZ2UuamF2YQpAQCAtMCwwICsxLDI0MiBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZXhwZXJpbWVudDsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUF0dHJpYnV0ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRVJlZmVyZW5jZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLkNvbW1vblBhY2thZ2U7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIFRoZSA8Yj5QYWNrYWdlPC9iPiBmb3IgdGhlIG1vZGVsLgorICogSXQgY29udGFpbnMgYWNjZXNzb3JzIGZvciB0aGUgbWV0YSBvYmplY3RzIHRvIHJlcHJlc2VudAorICogPHVsPgorICogICA8bGk+ZWFjaCBjbGFzcyw8L2xpPgorICogICA8bGk+ZWFjaCBmZWF0dXJlIG9mIGVhY2ggY2xhc3MsPC9saT4KKyAqICAgPGxpPmVhY2ggZW51bSw8L2xpPgorICogICA8bGk+YW5kIGVhY2ggZGF0YSB0eXBlPC9saT4KKyAqIDwvdWw+CisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmV4cGVyaW1lbnQuRXhwZXJpbWVudEZhY3RvcnkKKyAqIEBtb2RlbCBraW5kPSJwYWNrYWdlIgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgaW50ZXJmYWNlIEV4cGVyaW1lbnRQYWNrYWdlIGV4dGVuZHMgRVBhY2thZ2UgeworCS8qKgorCSAqIFRoZSBwYWNrYWdlIG5hbWUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJU3RyaW5nIGVOQU1FID0gImV4cGVyaW1lbnQiOyAvLyROT04tTkxTLTEkCisKKwkvKioKKwkgKiBUaGUgcGFja2FnZSBuYW1lc3BhY2UgVVJJLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCVN0cmluZyBlTlNfVVJJID0gImh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2V4cGVyaW1lbnQuZWNvcmUiOyAvLyROT04tTkxTLTEkCisKKwkvKioKKwkgKiBUaGUgcGFja2FnZSBuYW1lc3BhY2UgbmFtZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlTdHJpbmcgZU5TX1BSRUZJWCA9ICJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZXhwZXJpbWVudCI7IC8vJE5PTi1OTFMtMSQKKworCS8qKgorCSAqIFRoZSBzaW5nbGV0b24gaW5zdGFuY2Ugb2YgdGhlIHBhY2thZ2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRXhwZXJpbWVudFBhY2thZ2UgZUlOU1RBTkNFID0gb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmV4cGVyaW1lbnQuaW1wbC5FeHBlcmltZW50UGFja2FnZUltcGwuaW5pdCgpOworCisJLyoqCisJICogVGhlIG1ldGEgb2JqZWN0IGlkIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZXhwZXJpbWVudC5pbXBsLkV4cGVyaW1lbnRJbXBsIDxlbT5FeHBlcmltZW50PC9lbT59JyBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmV4cGVyaW1lbnQuaW1wbC5FeHBlcmltZW50SW1wbAorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmV4cGVyaW1lbnQuaW1wbC5FeHBlcmltZW50UGFja2FnZUltcGwjZ2V0RXhwZXJpbWVudCgpCisJICogQGdlbmVyYXRlZAorCSAqLworCWludCBFWFBFUklNRU5UID0gMDsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5VUkk8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBFWFBFUklNRU5UX19VUkkgPSBDb21tb25QYWNrYWdlLklERU5USUZJQUJMRV9fVVJJOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlR5cGUgVVJJPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgRVhQRVJJTUVOVF9fVFlQRV9VUkkgPSBDb21tb25QYWNrYWdlLklERU5USUZJQUJMRV9fVFlQRV9VUkk7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RHVibGluIENvcmU8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBFWFBFUklNRU5UX19EVUJMSU5fQ09SRSA9IENvbW1vblBhY2thZ2UuSURFTlRJRklBQkxFX19EVUJMSU5fQ09SRTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5Nb2RpZmllcnM8L2I+PC9lbT4nIHJlZmVyZW5jZSBsaXN0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IEVYUEVSSU1FTlRfX01PRElGSUVSUyA9IENvbW1vblBhY2thZ2UuSURFTlRJRklBQkxFX0ZFQVRVUkVfQ09VTlQgKyAwOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkNvbXBsZXRlPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgRVhQRVJJTUVOVF9fQ09NUExFVEUgPSBDb21tb25QYWNrYWdlLklERU5USUZJQUJMRV9GRUFUVVJFX0NPVU5UICsgMTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5TY2VuYXJpbzwvYj48L2VtPicgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IEVYUEVSSU1FTlRfX1NDRU5BUklPID0gQ29tbW9uUGFja2FnZS5JREVOVElGSUFCTEVfRkVBVFVSRV9DT1VOVCArIDI7CisKKwkvKioKKwkgKiBUaGUgbnVtYmVyIG9mIHN0cnVjdHVyYWwgZmVhdHVyZXMgb2YgdGhlICc8ZW0+RXhwZXJpbWVudDwvZW0+JyBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBFWFBFUklNRU5UX0ZFQVRVUkVfQ09VTlQgPSBDb21tb25QYWNrYWdlLklERU5USUZJQUJMRV9GRUFUVVJFX0NPVU5UICsgMzsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5leHBlcmltZW50LkV4cGVyaW1lbnQgPGVtPkV4cGVyaW1lbnQ8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICc8ZW0+RXhwZXJpbWVudDwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5leHBlcmltZW50LkV4cGVyaW1lbnQKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUNsYXNzIGdldEV4cGVyaW1lbnQoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgcmVmZXJlbmNlIGxpc3QgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZXhwZXJpbWVudC5FeHBlcmltZW50I2dldE1vZGlmaWVycyA8ZW0+TW9kaWZpZXJzPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgcmVmZXJlbmNlIGxpc3QgJzxlbT5Nb2RpZmllcnM8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZXhwZXJpbWVudC5FeHBlcmltZW50I2dldE1vZGlmaWVycygpCisJICogQHNlZSAjZ2V0RXhwZXJpbWVudCgpCisJICogQGdlbmVyYXRlZAorCSAqLworCUVSZWZlcmVuY2UgZ2V0RXhwZXJpbWVudF9Nb2RpZmllcnMoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmV4cGVyaW1lbnQuRXhwZXJpbWVudCNpc0NvbXBsZXRlIDxlbT5Db21wbGV0ZTwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPGVtPkNvbXBsZXRlPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmV4cGVyaW1lbnQuRXhwZXJpbWVudCNpc0NvbXBsZXRlKCkKKwkgKiBAc2VlICNnZXRFeHBlcmltZW50KCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUF0dHJpYnV0ZSBnZXRFeHBlcmltZW50X0NvbXBsZXRlKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIHJlZmVyZW5jZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5leHBlcmltZW50LkV4cGVyaW1lbnQjZ2V0U2NlbmFyaW8gPGVtPlNjZW5hcmlvPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgcmVmZXJlbmNlICc8ZW0+U2NlbmFyaW88L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZXhwZXJpbWVudC5FeHBlcmltZW50I2dldFNjZW5hcmlvKCkKKwkgKiBAc2VlICNnZXRFeHBlcmltZW50KCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRVJlZmVyZW5jZSBnZXRFeHBlcmltZW50X1NjZW5hcmlvKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBmYWN0b3J5IHRoYXQgY3JlYXRlcyB0aGUgaW5zdGFuY2VzIG9mIHRoZSBtb2RlbC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIGZhY3RvcnkgdGhhdCBjcmVhdGVzIHRoZSBpbnN0YW5jZXMgb2YgdGhlIG1vZGVsLgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFeHBlcmltZW50RmFjdG9yeSBnZXRFeHBlcmltZW50RmFjdG9yeSgpOworCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBEZWZpbmVzIGxpdGVyYWxzIGZvciB0aGUgbWV0YSBvYmplY3RzIHRoYXQgcmVwcmVzZW50CisJICogPHVsPgorCSAqICAgPGxpPmVhY2ggY2xhc3MsPC9saT4KKwkgKiAgIDxsaT5lYWNoIGZlYXR1cmUgb2YgZWFjaCBjbGFzcyw8L2xpPgorCSAqICAgPGxpPmVhY2ggZW51bSw8L2xpPgorCSAqICAgPGxpPmFuZCBlYWNoIGRhdGEgdHlwZTwvbGk+CisJICogPC91bD4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJaW50ZXJmYWNlIExpdGVyYWxzIHsKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZXhwZXJpbWVudC5pbXBsLkV4cGVyaW1lbnRJbXBsIDxlbT5FeHBlcmltZW50PC9lbT59JyBjbGFzcy4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmV4cGVyaW1lbnQuaW1wbC5FeHBlcmltZW50SW1wbAorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5leHBlcmltZW50LmltcGwuRXhwZXJpbWVudFBhY2thZ2VJbXBsI2dldEV4cGVyaW1lbnQoKQorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQ2xhc3MgRVhQRVJJTUVOVCA9IGVJTlNUQU5DRS5nZXRFeHBlcmltZW50KCk7CisKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5Nb2RpZmllcnM8L2I+PC9lbT4nIHJlZmVyZW5jZSBsaXN0IGZlYXR1cmUuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFUmVmZXJlbmNlIEVYUEVSSU1FTlRfX01PRElGSUVSUyA9IGVJTlNUQU5DRS5nZXRFeHBlcmltZW50X01vZGlmaWVycygpOworCisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+Q29tcGxldGU8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUF0dHJpYnV0ZSBFWFBFUklNRU5UX19DT01QTEVURSA9IGVJTlNUQU5DRS5nZXRFeHBlcmltZW50X0NvbXBsZXRlKCk7CisKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5TY2VuYXJpbzwvYj48L2VtPicgcmVmZXJlbmNlIGZlYXR1cmUuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFUmVmZXJlbmNlIEVYUEVSSU1FTlRfX1NDRU5BUklPID0gZUlOU1RBTkNFLmdldEV4cGVyaW1lbnRfU2NlbmFyaW8oKTsKKworCX0KKworfSAvL0V4cGVyaW1lbnRQYWNrYWdlCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2V4cGVyaW1lbnQvaW1wbC9FeHBlcmltZW50RmFjdG9yeUltcGwuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZXhwZXJpbWVudC9pbXBsL0V4cGVyaW1lbnRGYWN0b3J5SW1wbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVmMTAyYzgKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2V4cGVyaW1lbnQvaW1wbC9FeHBlcmltZW50RmFjdG9yeUltcGwuamF2YQpAQCAtMCwwICsxLDExOSBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZXhwZXJpbWVudC5pbXBsOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5VUkk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzczsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRURhdGFUeXBlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuaW1wbC5FRmFjdG9yeUltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnBsdWdpbi5FY29yZVBsdWdpbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZXhwZXJpbWVudC5FeHBlcmltZW50OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5leHBlcmltZW50LkV4cGVyaW1lbnRGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5leHBlcmltZW50LkV4cGVyaW1lbnRQYWNrYWdlOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IEFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBtb2RlbCA8Yj5GYWN0b3J5PC9iPi4gPCEtLQorICogZW5kLXVzZXItZG9jIC0tPgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgRXhwZXJpbWVudEZhY3RvcnlJbXBsIGV4dGVuZHMgRUZhY3RvcnlJbXBsIGltcGxlbWVudHMKKwkJRXhwZXJpbWVudEZhY3RvcnkgeworCS8qKgorCSAqIENyZWF0ZXMgdGhlIGRlZmF1bHQgZmFjdG9yeSBpbXBsZW1lbnRhdGlvbi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tCisJICogZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgc3RhdGljIEV4cGVyaW1lbnRGYWN0b3J5IGluaXQoKSB7CisJCXRyeSB7CisJCQlFeHBlcmltZW50RmFjdG9yeSB0aGVFeHBlcmltZW50RmFjdG9yeSA9IChFeHBlcmltZW50RmFjdG9yeSlFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFRmFjdG9yeSgiaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZXhwZXJpbWVudC5lY29yZSIpOyAvLyROT04tTkxTLTEkIAorCQkJaWYgKHRoZUV4cGVyaW1lbnRGYWN0b3J5ICE9IG51bGwpIHsKKwkJCQlyZXR1cm4gdGhlRXhwZXJpbWVudEZhY3Rvcnk7CisJCQl9CisJCX0KKwkJY2F0Y2ggKEV4Y2VwdGlvbiBleGNlcHRpb24pIHsKKwkJCUVjb3JlUGx1Z2luLklOU1RBTkNFLmxvZyhleGNlcHRpb24pOworCQl9CisJCXJldHVybiBuZXcgRXhwZXJpbWVudEZhY3RvcnlJbXBsKCk7CisJfQorCisJLyoqCisJICogQ3JlYXRlcyBhbiBpbnN0YW5jZSBvZiB0aGUgZmFjdG9yeS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tCisJICogZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRXhwZXJpbWVudEZhY3RvcnlJbXBsKCkgeworCQlzdXBlcigpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgRU9iamVjdCBjcmVhdGUoRUNsYXNzIGVDbGFzcykgeworCQlzd2l0Y2ggKGVDbGFzcy5nZXRDbGFzc2lmaWVySUQoKSkgeworCQkJY2FzZSBFeHBlcmltZW50UGFja2FnZS5FWFBFUklNRU5UOiByZXR1cm4gY3JlYXRlRXhwZXJpbWVudCgpOworCQkJZGVmYXVsdDoKKwkJCQl0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJUaGUgY2xhc3MgJyIgKyBlQ2xhc3MuZ2V0TmFtZSgpICsgIicgaXMgbm90IGEgdmFsaWQgY2xhc3NpZmllciIpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKKwkJfQorCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRXhwZXJpbWVudCBjcmVhdGVFeHBlcmltZW50KCkgeworCQlFeHBlcmltZW50SW1wbCBleHBlcmltZW50ID0gbmV3IEV4cGVyaW1lbnRJbXBsKCk7CisJCXJldHVybiBleHBlcmltZW50OworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJcHVibGljIFVSSSBjcmVhdGVVUklGcm9tU3RyaW5nKEVEYXRhVHlwZSBlRGF0YVR5cGUsIFN0cmluZyBpbml0aWFsVmFsdWUpIHsKKwkJcmV0dXJuIFVSSS5jcmVhdGVVUkkoaW5pdGlhbFZhbHVlKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCXB1YmxpYyBTdHJpbmcgY29udmVydFVSSVRvU3RyaW5nKEVEYXRhVHlwZSBlRGF0YVR5cGUsIE9iamVjdCBpbnN0YW5jZVZhbHVlKSB7CisJCXJldHVybiBpbnN0YW5jZVZhbHVlLnRvU3RyaW5nKCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFeHBlcmltZW50UGFja2FnZSBnZXRFeHBlcmltZW50UGFja2FnZSgpIHsKKwkJcmV0dXJuIChFeHBlcmltZW50UGFja2FnZSlnZXRFUGFja2FnZSgpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBkZXByZWNhdGVkCisJICogQGdlbmVyYXRlZAorCSAqLworCUBEZXByZWNhdGVkCisJcHVibGljIHN0YXRpYyBFeHBlcmltZW50UGFja2FnZSBnZXRQYWNrYWdlKCkgeworCQlyZXR1cm4gRXhwZXJpbWVudFBhY2thZ2UuZUlOU1RBTkNFOworCX0KKworfSAvLyBFeHBlcmltZW50RmFjdG9yeUltcGwKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZXhwZXJpbWVudC9pbXBsL0V4cGVyaW1lbnRJbXBsLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2V4cGVyaW1lbnQvaW1wbC9FeHBlcmltZW50SW1wbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM4ZDMwNmQKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2V4cGVyaW1lbnQvaW1wbC9FeHBlcmltZW50SW1wbC5qYXZhCkBAIC0wLDAgKzEsMzMxIEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5leHBlcmltZW50LmltcGw7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuRUxpc3Q7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzczsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuSW50ZXJuYWxFT2JqZWN0OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5pbXBsLkVOb3RpZmljYXRpb25JbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS51dGlsLkVPYmplY3RSZXNvbHZpbmdFTGlzdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuU1RFTVVSSTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLmltcGwuSWRlbnRpZmlhYmxlSW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZXhwZXJpbWVudC5FeHBlcmltZW50OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5leHBlcmltZW50LkV4cGVyaW1lbnRQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5Nb2RpZmllcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2NlbmFyaW8uU2NlbmFyaW87CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIEFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5FeHBlcmltZW50PC9iPjwvZW0+Jy4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogPHA+CisgKiBUaGUgZm9sbG93aW5nIGZlYXR1cmVzIGFyZSBpbXBsZW1lbnRlZDoKKyAqIDx1bD4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZXhwZXJpbWVudC5pbXBsLkV4cGVyaW1lbnRJbXBsI2dldE1vZGlmaWVycyA8ZW0+TW9kaWZpZXJzPC9lbT59PC9saT4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZXhwZXJpbWVudC5pbXBsLkV4cGVyaW1lbnRJbXBsI2lzQ29tcGxldGUgPGVtPkNvbXBsZXRlPC9lbT59PC9saT4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZXhwZXJpbWVudC5pbXBsLkV4cGVyaW1lbnRJbXBsI2dldFNjZW5hcmlvIDxlbT5TY2VuYXJpbzwvZW0+fTwvbGk+CisgKiA8L3VsPgorICogPC9wPgorICoKKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIEV4cGVyaW1lbnRJbXBsIGV4dGVuZHMgSWRlbnRpZmlhYmxlSW1wbCBpbXBsZW1lbnRzIEV4cGVyaW1lbnQgeworCS8qKgorCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldE1vZGlmaWVycygpIDxlbT5Nb2RpZmllcnM8L2VtPn0nIHJlZmVyZW5jZSBsaXN0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZ2V0TW9kaWZpZXJzKCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgRUxpc3Q8TW9kaWZpZXI+IG1vZGlmaWVyczsKKworCS8qKgorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSAne0BsaW5rICNpc0NvbXBsZXRlKCkgPGVtPkNvbXBsZXRlPC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNpc0NvbXBsZXRlKCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIGJvb2xlYW4gQ09NUExFVEVfRURFRkFVTFQgPSBmYWxzZTsKKworCS8qKgorCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldFNjZW5hcmlvKCkgPGVtPlNjZW5hcmlvPC9lbT59JyByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNnZXRTY2VuYXJpbygpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIFNjZW5hcmlvIHNjZW5hcmlvOworCisJCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCXByb3RlY3RlZCBFeHBlcmltZW50SW1wbCgpIHsKKwkJc3VwZXIoKTsKKwkJc2V0VVJJKFNURU1VUkkuY3JlYXRlVVJJKFVSSV9UWVBFX0VYUEVSSU1FTlRfU0VHTUVOVCArICIvIgorCQkJCSsgU1RFTVVSSS5nZW5lcmF0ZVVuaXF1ZVBhcnQoKSkpOworCQlzZXRUeXBlVVJJKFNURU1VUkkuRVhQRVJJTUVOVF9UWVBFX1VSSSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIEVDbGFzcyBlU3RhdGljQ2xhc3MoKSB7CisJCXJldHVybiBFeHBlcmltZW50UGFja2FnZS5MaXRlcmFscy5FWFBFUklNRU5UOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFTGlzdDxNb2RpZmllcj4gZ2V0TW9kaWZpZXJzKCkgeworCQlpZiAobW9kaWZpZXJzID09IG51bGwpIHsKKwkJCW1vZGlmaWVycyA9IG5ldyBFT2JqZWN0UmVzb2x2aW5nRUxpc3Q8TW9kaWZpZXI+KE1vZGlmaWVyLmNsYXNzLCB0aGlzLCBFeHBlcmltZW50UGFja2FnZS5FWFBFUklNRU5UX19NT0RJRklFUlMpOworCQl9CisJCXJldHVybiBtb2RpZmllcnM7CisJfQorCisJLyoqCisJICogQHNlZSB7QGxpbmsgRXhwZXJpbWVudCNnZXRNb2RpZmljYXRpb25TdW1tYXJ5KCl9CisJICovCisJcHVibGljIExpc3Q8U3RyaW5nPiBnZXRNb2RpZmljYXRpb25TdW1tYXJ5KCkgeworCQlmaW5hbCBMaXN0PFN0cmluZz4gcmV0VmFsdWUgPSBuZXcgQXJyYXlMaXN0PFN0cmluZz4oKTsKKwkJZm9yIChNb2RpZmllciBtb2RpZmllciA6IGdldE1vZGlmaWVycygpKSB7CisJCQlyZXRWYWx1ZS5hZGRBbGwobW9kaWZpZXIuZ2V0TW9kaWZpY2F0aW9uU3VtbWFyeSgpKTsKKwkJfSAvLyBmb3IgZWFjaCBNb2RpZmllcgorCQlyZXR1cm4gcmV0VmFsdWU7CisJfSAvLyBnZXRNb2RpZmljYXRpb25TdW1tYXJ5CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJcHVibGljIGJvb2xlYW4gaXNDb21wbGV0ZSgpIHsKKwkJYm9vbGVhbiByZXRWYWx1ZSA9IHRydWU7CisJCWZvciAoTW9kaWZpZXIgbW9kaWZpZXIgOiBnZXRNb2RpZmllcnMoKSkgeworCQkJLy8gSXMgdGhpcyBtb2RpZmllciBjb21wbGV0ZT8KKwkJCWlmICghbW9kaWZpZXIuaXNDb21wbGV0ZSgpKSB7CisJCQkJLy8gTm8KKwkJCQlyZXRWYWx1ZSA9IGZhbHNlOworCQkJCWJyZWFrOworCQkJfSAvLyBpZiAKKwkJfSAvLyBmb3IgZWFjaCBNb2RpZmllcgorCQlyZXR1cm4gcmV0VmFsdWU7CisJfSAvLyBpc0NvbXBsZXRlCisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgU2NlbmFyaW8gZ2V0U2NlbmFyaW8oKSB7CisJCWlmIChzY2VuYXJpbyAhPSBudWxsICYmIHNjZW5hcmlvLmVJc1Byb3h5KCkpIHsKKwkJCUludGVybmFsRU9iamVjdCBvbGRTY2VuYXJpbyA9IChJbnRlcm5hbEVPYmplY3Qpc2NlbmFyaW87CisJCQlzY2VuYXJpbyA9IChTY2VuYXJpbyllUmVzb2x2ZVByb3h5KG9sZFNjZW5hcmlvKTsKKwkJCWlmIChzY2VuYXJpbyAhPSBvbGRTY2VuYXJpbykgeworCQkJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkKKwkJCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlJFU09MVkUsIEV4cGVyaW1lbnRQYWNrYWdlLkVYUEVSSU1FTlRfX1NDRU5BUklPLCBvbGRTY2VuYXJpbywgc2NlbmFyaW8pKTsKKwkJCX0KKwkJfQorCQlyZXR1cm4gc2NlbmFyaW87CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFNjZW5hcmlvIGJhc2ljR2V0U2NlbmFyaW8oKSB7CisJCXJldHVybiBzY2VuYXJpbzsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRTY2VuYXJpbyhTY2VuYXJpbyBuZXdTY2VuYXJpbykgeworCQlTY2VuYXJpbyBvbGRTY2VuYXJpbyA9IHNjZW5hcmlvOworCQlzY2VuYXJpbyA9IG5ld1NjZW5hcmlvOworCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpCisJCQllTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBFeHBlcmltZW50UGFja2FnZS5FWFBFUklNRU5UX19TQ0VOQVJJTywgb2xkU2NlbmFyaW8sIHNjZW5hcmlvKSk7CisJfQorCisJLyoqCisJICogQHNlZSB7QGxpbmsgRXhwZXJpbWVudCNnZXRQYXJhbWV0ZXJTdW1tYXJ5KCl9CisJICovCisJcHVibGljIExpc3Q8U3RyaW5nPiBnZXRQYXJhbWV0ZXJTdW1tYXJ5KCkgeworCQkvLyBUT0RPIGltcGxlbWVudCBFeHBlcmltZW50SW1wbC5nZXRQYXJhbWV0ZXJTdW1tYXJ5CisJCXJldHVybiBnZXRNb2RpZmljYXRpb25TdW1tYXJ5KCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCXB1YmxpYyBTY2VuYXJpbyB1cGRhdGVTY2VuYXJpbygpIHsKKwkJLy8gR2V0IHRoZSBmaXJzdCBtb2RpZmllcgorCQlNb2RpZmllciBtb2RpZmllciA9IGdldE1vZGlmaWVycygpLmdldCgwKTsKKwkJaWYoIW1vZGlmaWVyLmlzQ29tcGxldGUoKSkgeworCQkJLy8gSWYgaXQncyBub3QgY29tcGxldGUsIHNpbXBseSB1cGRhdGUgdGhlIHNjZW5hcmlvCisJCQltb2RpZmllci51cGRhdGVTY2VuYXJpbyhnZXRTY2VuYXJpbygpKTsKKwkJfSBlbHNlIHsKKwkJCS8vIFRoZSBmaXJzdCBtb2RpZmllciBpcyBjb21wbGV0ZSwgZ2V0IHRoZSBuZXh0IGluY29tcGxldGUKKwkJCS8vIG1vZGlmaWVyIG9uIHRoZSBsaXN0IGFuZCByZXNldCB0aGUgImxlc3Mgc2lnbmlmaWNhbnQiIG1vZGlmaWVycy4KKwkJCS8vIFRoaW5rIG9mIGl0IGFzIGJpbmFyeSBjb3VudGluZyBzd2l0Y2hpbmcgYml0cyBvbiBhbmQgb2ZmLCBidXQKKwkJCS8vIHRoZSBudW1iZXIgb2Ygc3RhdGVzIGlzIG5vdCAyIGJ1dCBkZXBlbmRzIG9uIGhvdyBtYW55IHN0YXRlcworCQkJLy8gdGhlIG1vZGlmaWVyIGhhcy4gV2UgYXNzdW1lIGF0IGxlYXN0IG9uZSBtb2RpZmllciBpcyBub3QgY29tcGxldGUKKwkJCS8vIGhlcmUsIG9yIHRoaXMgbWV0aG9kIHdvdWxkbid0IGhhdmUgYmVlbiBjYWxsZWQuCisJCQlmb3IoTW9kaWZpZXIgbSA6IGdldE1vZGlmaWVycygpKSB7CisJCQkJaWYobS5pc0NvbXBsZXRlKCkpIHsKKwkJCQkJbS5yZXNldCgpOworCQkJCQltLnVwZGF0ZVNjZW5hcmlvKGdldFNjZW5hcmlvKCkpOworCQkJCX0gZWxzZSB7CisJCQkJCW0udXBkYXRlU2NlbmFyaW8oZ2V0U2NlbmFyaW8oKSk7CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCX0KKwkJCQorCQl9CisJCVNjZW5hcmlvIHMgPSAgZ2V0U2NlbmFyaW8oKTsKKwkJLy8gV2UgbmVlZCB0byByZS1pbml0aWFsaXplIHNpbmNlIGRlY29yYXRvcnMgbWlnaHQgaGF2ZSBiZWVuIHVwZGF0ZWQKKwkJcy5pbml0aWFsaXplKCk7CisJCXMuc2V0UHJvZ3Jlc3MoMC4wKTsKKwkJcmV0dXJuIHM7CisJfSAvLyB1cGRhdGVTY2VuYXJpbworCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCXB1YmxpYyBTY2VuYXJpbyBpbml0U2NlbmFyaW8oKSB7CisJCS8vIFNraXAgdGhlIGZpcnN0IG1vZGlmaWVyIHNpbmNlIGl0IHdpbGwgdXBkYXRlIHRoZQorCQkvLyBzY2VuYXJpbyBpbiB0aGUgZmlyc3QgY2FsbCB0byBnZXROZXh0U2ltdWxhdGlvbigpCisJCWZvcihpbnQgaT0xO2k8Z2V0TW9kaWZpZXJzKCkuc2l6ZSgpOysraSkgCisJCQlnZXRNb2RpZmllcnMoKS5nZXQoaSkudXBkYXRlU2NlbmFyaW8oZ2V0U2NlbmFyaW8oKSk7CisJCXJldHVybiBnZXRTY2VuYXJpbygpOworCX0KKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5pbXBsLklkZW50aWZpYWJsZUltcGwjc2FuZSgpCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIGJvb2xlYW4gc2FuZSgpIHsKKwkJYm9vbGVhbiByZXRWYWx1ZSA9IHN1cGVyLnNhbmUoKTsKKwkJYXNzZXJ0IHJldFZhbHVlOworCisJCXJldFZhbHVlID0gZ2V0U2NlbmFyaW8oKSA9PSBudWxsIHx8IGdldFNjZW5hcmlvKCkuc2FuZSgpOworCQlhc3NlcnQgcmV0VmFsdWU7CisJCQorCQlmb3IgKE1vZGlmaWVyIG1vZGlmaWVyIDogZ2V0TW9kaWZpZXJzKCkpIHsKKwkJCXJldFZhbHVlID0gbW9kaWZpZXIuc2FuZSgpOworCQkJYXNzZXJ0IHJldFZhbHVlOworCQl9IC8vIGZvciBlYWNoIE1vZGlmaWVyCisJCQorCQlyZXR1cm4gcmV0VmFsdWU7CisJfSAvLyBzYW5lCisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgT2JqZWN0IGVHZXQoaW50IGZlYXR1cmVJRCwgYm9vbGVhbiByZXNvbHZlLCBib29sZWFuIGNvcmVUeXBlKSB7CisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7CisJCQljYXNlIEV4cGVyaW1lbnRQYWNrYWdlLkVYUEVSSU1FTlRfX01PRElGSUVSUzoKKwkJCQlyZXR1cm4gZ2V0TW9kaWZpZXJzKCk7CisJCQljYXNlIEV4cGVyaW1lbnRQYWNrYWdlLkVYUEVSSU1FTlRfX0NPTVBMRVRFOgorCQkJCXJldHVybiBpc0NvbXBsZXRlKCk7CisJCQljYXNlIEV4cGVyaW1lbnRQYWNrYWdlLkVYUEVSSU1FTlRfX1NDRU5BUklPOgorCQkJCWlmIChyZXNvbHZlKSByZXR1cm4gZ2V0U2NlbmFyaW8oKTsKKwkJCQlyZXR1cm4gYmFzaWNHZXRTY2VuYXJpbygpOworCQl9CisJCXJldHVybiBzdXBlci5lR2V0KGZlYXR1cmVJRCwgcmVzb2x2ZSwgY29yZVR5cGUpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBTdXBwcmVzc1dhcm5pbmdzKCJ1bmNoZWNrZWQiKQorCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGVTZXQoaW50IGZlYXR1cmVJRCwgT2JqZWN0IG5ld1ZhbHVlKSB7CisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7CisJCQljYXNlIEV4cGVyaW1lbnRQYWNrYWdlLkVYUEVSSU1FTlRfX01PRElGSUVSUzoKKwkJCQlnZXRNb2RpZmllcnMoKS5jbGVhcigpOworCQkJCWdldE1vZGlmaWVycygpLmFkZEFsbCgoQ29sbGVjdGlvbjw/IGV4dGVuZHMgTW9kaWZpZXI+KW5ld1ZhbHVlKTsKKwkJCQlyZXR1cm47CisJCQljYXNlIEV4cGVyaW1lbnRQYWNrYWdlLkVYUEVSSU1FTlRfX1NDRU5BUklPOgorCQkJCXNldFNjZW5hcmlvKChTY2VuYXJpbyluZXdWYWx1ZSk7CisJCQkJcmV0dXJuOworCQl9CisJCXN1cGVyLmVTZXQoZmVhdHVyZUlELCBuZXdWYWx1ZSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgZVVuc2V0KGludCBmZWF0dXJlSUQpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJCWNhc2UgRXhwZXJpbWVudFBhY2thZ2UuRVhQRVJJTUVOVF9fTU9ESUZJRVJTOgorCQkJCWdldE1vZGlmaWVycygpLmNsZWFyKCk7CisJCQkJcmV0dXJuOworCQkJY2FzZSBFeHBlcmltZW50UGFja2FnZS5FWFBFUklNRU5UX19TQ0VOQVJJTzoKKwkJCQlzZXRTY2VuYXJpbygoU2NlbmFyaW8pbnVsbCk7CisJCQkJcmV0dXJuOworCQl9CisJCXN1cGVyLmVVbnNldChmZWF0dXJlSUQpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBib29sZWFuIGVJc1NldChpbnQgZmVhdHVyZUlEKSB7CisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7CisJCQljYXNlIEV4cGVyaW1lbnRQYWNrYWdlLkVYUEVSSU1FTlRfX01PRElGSUVSUzoKKwkJCQlyZXR1cm4gbW9kaWZpZXJzICE9IG51bGwgJiYgIW1vZGlmaWVycy5pc0VtcHR5KCk7CisJCQljYXNlIEV4cGVyaW1lbnRQYWNrYWdlLkVYUEVSSU1FTlRfX0NPTVBMRVRFOgorCQkJCXJldHVybiBpc0NvbXBsZXRlKCkgIT0gQ09NUExFVEVfRURFRkFVTFQ7CisJCQljYXNlIEV4cGVyaW1lbnRQYWNrYWdlLkVYUEVSSU1FTlRfX1NDRU5BUklPOgorCQkJCXJldHVybiBzY2VuYXJpbyAhPSBudWxsOworCQl9CisJCXJldHVybiBzdXBlci5lSXNTZXQoZmVhdHVyZUlEKTsKKwl9CisKKwkKK30gLy9FeHBlcmltZW50SW1wbApkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9leHBlcmltZW50L2ltcGwvRXhwZXJpbWVudFBhY2thZ2VJbXBsLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2V4cGVyaW1lbnQvaW1wbC9FeHBlcmltZW50UGFja2FnZUltcGwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMWM4ZGE2Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9leHBlcmltZW50L2ltcGwvRXhwZXJpbWVudFBhY2thZ2VJbXBsLmphdmEKQEAgLTAsMCArMSwyNzMgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmV4cGVyaW1lbnQuaW1wbDsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUF0dHJpYnV0ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRVJlZmVyZW5jZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRWNvcmVQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5pbXBsLkVQYWNrYWdlSW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLkNvbW1vblBhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5pbXBsLkNvbW1vblBhY2thZ2VJbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5leHBlcmltZW50LkV4cGVyaW1lbnQ7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmV4cGVyaW1lbnQuRXhwZXJpbWVudEZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmV4cGVyaW1lbnQuRXhwZXJpbWVudFBhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkdyYXBoUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguaW1wbC5HcmFwaFBhY2thZ2VJbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5sb2dnZXIuTG9nZ2VyUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubG9nZ2VyLmltcGwuTG9nZ2VyUGFja2FnZUltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLk1vZGVsUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuaW1wbC5Nb2RlbFBhY2thZ2VJbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5Nb2RpZmllclBhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLmltcGwuTW9kaWZpZXJQYWNrYWdlSW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlLlByZWRpY2F0ZVBhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZS5pbXBsLlByZWRpY2F0ZVBhY2thZ2VJbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zY2VuYXJpby5TY2VuYXJpb1BhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNjZW5hcmlvLmltcGwuU2NlbmFyaW9QYWNrYWdlSW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2VxdWVuY2VyLlNlcXVlbmNlclBhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNlcXVlbmNlci5pbXBsLlNlcXVlbmNlclBhY2thZ2VJbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zb2x2ZXIuU29sdmVyUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc29sdmVyLmltcGwuU29sdmVyUGFja2FnZUltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnRyaWdnZXIuVHJpZ2dlclBhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnRyaWdnZXIuaW1wbC5UcmlnZ2VyUGFja2FnZUltcGw7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIEFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBtb2RlbCA8Yj5QYWNrYWdlPC9iPi4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgRXhwZXJpbWVudFBhY2thZ2VJbXBsIGV4dGVuZHMgRVBhY2thZ2VJbXBsIGltcGxlbWVudHMgRXhwZXJpbWVudFBhY2thZ2UgeworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByaXZhdGUgRUNsYXNzIGV4cGVyaW1lbnRFQ2xhc3MgPSBudWxsOworCisJLyoqCisJICogQ3JlYXRlcyBhbiBpbnN0YW5jZSBvZiB0aGUgbW9kZWwgPGI+UGFja2FnZTwvYj4sIHJlZ2lzdGVyZWQgd2l0aAorCSAqIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRVBhY2thZ2UuUmVnaXN0cnkgRVBhY2thZ2UuUmVnaXN0cnl9IGJ5IHRoZSBwYWNrYWdlCisJICogcGFja2FnZSBVUkkgdmFsdWUuCisJICogPHA+Tm90ZTogdGhlIGNvcnJlY3Qgd2F5IHRvIGNyZWF0ZSB0aGUgcGFja2FnZSBpcyB2aWEgdGhlIHN0YXRpYworCSAqIGZhY3RvcnkgbWV0aG9kIHtAbGluayAjaW5pdCBpbml0KCl9LCB3aGljaCBhbHNvIHBlcmZvcm1zCisJICogaW5pdGlhbGl6YXRpb24gb2YgdGhlIHBhY2thZ2UsIG9yIHJldHVybnMgdGhlIHJlZ2lzdGVyZWQgcGFja2FnZSwKKwkgKiBpZiBvbmUgYWxyZWFkeSBleGlzdHMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FUGFja2FnZS5SZWdpc3RyeQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmV4cGVyaW1lbnQuRXhwZXJpbWVudFBhY2thZ2UjZU5TX1VSSQorCSAqIEBzZWUgI2luaXQoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcml2YXRlIEV4cGVyaW1lbnRQYWNrYWdlSW1wbCgpIHsKKwkJc3VwZXIoZU5TX1VSSSwgRXhwZXJpbWVudEZhY3RvcnkuZUlOU1RBTkNFKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcml2YXRlIHN0YXRpYyBib29sZWFuIGlzSW5pdGVkID0gZmFsc2U7CisKKwkvKioKKwkgKiBDcmVhdGVzLCByZWdpc3RlcnMsIGFuZCBpbml0aWFsaXplcyB0aGUgPGI+UGFja2FnZTwvYj4gZm9yIHRoaXMgbW9kZWwsIGFuZCBmb3IgYW55IG90aGVycyB1cG9uIHdoaWNoIGl0IGRlcGVuZHMuCisJICogCisJICogPHA+VGhpcyBtZXRob2QgaXMgdXNlZCB0byBpbml0aWFsaXplIHtAbGluayBFeHBlcmltZW50UGFja2FnZSNlSU5TVEFOQ0V9IHdoZW4gdGhhdCBmaWVsZCBpcyBhY2Nlc3NlZC4KKwkgKiBDbGllbnRzIHNob3VsZCBub3QgaW52b2tlIGl0IGRpcmVjdGx5LiBJbnN0ZWFkLCB0aGV5IHNob3VsZCBzaW1wbHkgYWNjZXNzIHRoYXQgZmllbGQgdG8gb2J0YWluIHRoZSBwYWNrYWdlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZU5TX1VSSQorCSAqIEBzZWUgI2NyZWF0ZVBhY2thZ2VDb250ZW50cygpCisJICogQHNlZSAjaW5pdGlhbGl6ZVBhY2thZ2VDb250ZW50cygpCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBzdGF0aWMgRXhwZXJpbWVudFBhY2thZ2UgaW5pdCgpIHsKKwkJaWYgKGlzSW5pdGVkKSByZXR1cm4gKEV4cGVyaW1lbnRQYWNrYWdlKUVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVQYWNrYWdlKEV4cGVyaW1lbnRQYWNrYWdlLmVOU19VUkkpOworCisJCS8vIE9idGFpbiBvciBjcmVhdGUgYW5kIHJlZ2lzdGVyIHBhY2thZ2UKKwkJRXhwZXJpbWVudFBhY2thZ2VJbXBsIHRoZUV4cGVyaW1lbnRQYWNrYWdlID0gKEV4cGVyaW1lbnRQYWNrYWdlSW1wbCkoRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0KGVOU19VUkkpIGluc3RhbmNlb2YgRXhwZXJpbWVudFBhY2thZ2VJbXBsID8gRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0KGVOU19VUkkpIDogbmV3IEV4cGVyaW1lbnRQYWNrYWdlSW1wbCgpKTsKKworCQlpc0luaXRlZCA9IHRydWU7CisKKwkJLy8gSW5pdGlhbGl6ZSBzaW1wbGUgZGVwZW5kZW5jaWVzCisJCUVjb3JlUGFja2FnZS5lSU5TVEFOQ0UuZUNsYXNzKCk7CisKKwkJLy8gT2J0YWluIG9yIGNyZWF0ZSBhbmQgcmVnaXN0ZXIgaW50ZXJkZXBlbmRlbmNpZXMKKwkJQ29tbW9uUGFja2FnZUltcGwgdGhlQ29tbW9uUGFja2FnZSA9IChDb21tb25QYWNrYWdlSW1wbCkoRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RVBhY2thZ2UoQ29tbW9uUGFja2FnZS5lTlNfVVJJKSBpbnN0YW5jZW9mIENvbW1vblBhY2thZ2VJbXBsID8gRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RVBhY2thZ2UoQ29tbW9uUGFja2FnZS5lTlNfVVJJKSA6IENvbW1vblBhY2thZ2UuZUlOU1RBTkNFKTsKKwkJR3JhcGhQYWNrYWdlSW1wbCB0aGVHcmFwaFBhY2thZ2UgPSAoR3JhcGhQYWNrYWdlSW1wbCkoRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RVBhY2thZ2UoR3JhcGhQYWNrYWdlLmVOU19VUkkpIGluc3RhbmNlb2YgR3JhcGhQYWNrYWdlSW1wbCA/IEVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVQYWNrYWdlKEdyYXBoUGFja2FnZS5lTlNfVVJJKSA6IEdyYXBoUGFja2FnZS5lSU5TVEFOQ0UpOworCQlNb2RlbFBhY2thZ2VJbXBsIHRoZU1vZGVsUGFja2FnZSA9IChNb2RlbFBhY2thZ2VJbXBsKShFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShNb2RlbFBhY2thZ2UuZU5TX1VSSSkgaW5zdGFuY2VvZiBNb2RlbFBhY2thZ2VJbXBsID8gRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RVBhY2thZ2UoTW9kZWxQYWNrYWdlLmVOU19VUkkpIDogTW9kZWxQYWNrYWdlLmVJTlNUQU5DRSk7CisJCU1vZGlmaWVyUGFja2FnZUltcGwgdGhlTW9kaWZpZXJQYWNrYWdlID0gKE1vZGlmaWVyUGFja2FnZUltcGwpKEVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVQYWNrYWdlKE1vZGlmaWVyUGFja2FnZS5lTlNfVVJJKSBpbnN0YW5jZW9mIE1vZGlmaWVyUGFja2FnZUltcGwgPyBFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShNb2RpZmllclBhY2thZ2UuZU5TX1VSSSkgOiBNb2RpZmllclBhY2thZ2UuZUlOU1RBTkNFKTsKKwkJUHJlZGljYXRlUGFja2FnZUltcGwgdGhlUHJlZGljYXRlUGFja2FnZSA9IChQcmVkaWNhdGVQYWNrYWdlSW1wbCkoRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RVBhY2thZ2UoUHJlZGljYXRlUGFja2FnZS5lTlNfVVJJKSBpbnN0YW5jZW9mIFByZWRpY2F0ZVBhY2thZ2VJbXBsID8gRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RVBhY2thZ2UoUHJlZGljYXRlUGFja2FnZS5lTlNfVVJJKSA6IFByZWRpY2F0ZVBhY2thZ2UuZUlOU1RBTkNFKTsKKwkJU2NlbmFyaW9QYWNrYWdlSW1wbCB0aGVTY2VuYXJpb1BhY2thZ2UgPSAoU2NlbmFyaW9QYWNrYWdlSW1wbCkoRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RVBhY2thZ2UoU2NlbmFyaW9QYWNrYWdlLmVOU19VUkkpIGluc3RhbmNlb2YgU2NlbmFyaW9QYWNrYWdlSW1wbCA/IEVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVQYWNrYWdlKFNjZW5hcmlvUGFja2FnZS5lTlNfVVJJKSA6IFNjZW5hcmlvUGFja2FnZS5lSU5TVEFOQ0UpOworCQlTZXF1ZW5jZXJQYWNrYWdlSW1wbCB0aGVTZXF1ZW5jZXJQYWNrYWdlID0gKFNlcXVlbmNlclBhY2thZ2VJbXBsKShFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShTZXF1ZW5jZXJQYWNrYWdlLmVOU19VUkkpIGluc3RhbmNlb2YgU2VxdWVuY2VyUGFja2FnZUltcGwgPyBFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShTZXF1ZW5jZXJQYWNrYWdlLmVOU19VUkkpIDogU2VxdWVuY2VyUGFja2FnZS5lSU5TVEFOQ0UpOworCQlUcmlnZ2VyUGFja2FnZUltcGwgdGhlVHJpZ2dlclBhY2thZ2UgPSAoVHJpZ2dlclBhY2thZ2VJbXBsKShFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShUcmlnZ2VyUGFja2FnZS5lTlNfVVJJKSBpbnN0YW5jZW9mIFRyaWdnZXJQYWNrYWdlSW1wbCA/IEVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVQYWNrYWdlKFRyaWdnZXJQYWNrYWdlLmVOU19VUkkpIDogVHJpZ2dlclBhY2thZ2UuZUlOU1RBTkNFKTsKKwkJU29sdmVyUGFja2FnZUltcGwgdGhlU29sdmVyUGFja2FnZSA9IChTb2x2ZXJQYWNrYWdlSW1wbCkoRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RVBhY2thZ2UoU29sdmVyUGFja2FnZS5lTlNfVVJJKSBpbnN0YW5jZW9mIFNvbHZlclBhY2thZ2VJbXBsID8gRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RVBhY2thZ2UoU29sdmVyUGFja2FnZS5lTlNfVVJJKSA6IFNvbHZlclBhY2thZ2UuZUlOU1RBTkNFKTsKKwkJTG9nZ2VyUGFja2FnZUltcGwgdGhlTG9nZ2VyUGFja2FnZSA9IChMb2dnZXJQYWNrYWdlSW1wbCkoRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RVBhY2thZ2UoTG9nZ2VyUGFja2FnZS5lTlNfVVJJKSBpbnN0YW5jZW9mIExvZ2dlclBhY2thZ2VJbXBsID8gRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RVBhY2thZ2UoTG9nZ2VyUGFja2FnZS5lTlNfVVJJKSA6IExvZ2dlclBhY2thZ2UuZUlOU1RBTkNFKTsKKworCQkvLyBDcmVhdGUgcGFja2FnZSBtZXRhLWRhdGEgb2JqZWN0cworCQl0aGVFeHBlcmltZW50UGFja2FnZS5jcmVhdGVQYWNrYWdlQ29udGVudHMoKTsKKwkJdGhlQ29tbW9uUGFja2FnZS5jcmVhdGVQYWNrYWdlQ29udGVudHMoKTsKKwkJdGhlR3JhcGhQYWNrYWdlLmNyZWF0ZVBhY2thZ2VDb250ZW50cygpOworCQl0aGVNb2RlbFBhY2thZ2UuY3JlYXRlUGFja2FnZUNvbnRlbnRzKCk7CisJCXRoZU1vZGlmaWVyUGFja2FnZS5jcmVhdGVQYWNrYWdlQ29udGVudHMoKTsKKwkJdGhlUHJlZGljYXRlUGFja2FnZS5jcmVhdGVQYWNrYWdlQ29udGVudHMoKTsKKwkJdGhlU2NlbmFyaW9QYWNrYWdlLmNyZWF0ZVBhY2thZ2VDb250ZW50cygpOworCQl0aGVTZXF1ZW5jZXJQYWNrYWdlLmNyZWF0ZVBhY2thZ2VDb250ZW50cygpOworCQl0aGVUcmlnZ2VyUGFja2FnZS5jcmVhdGVQYWNrYWdlQ29udGVudHMoKTsKKwkJdGhlU29sdmVyUGFja2FnZS5jcmVhdGVQYWNrYWdlQ29udGVudHMoKTsKKwkJdGhlTG9nZ2VyUGFja2FnZS5jcmVhdGVQYWNrYWdlQ29udGVudHMoKTsKKworCQkvLyBJbml0aWFsaXplIGNyZWF0ZWQgbWV0YS1kYXRhCisJCXRoZUV4cGVyaW1lbnRQYWNrYWdlLmluaXRpYWxpemVQYWNrYWdlQ29udGVudHMoKTsKKwkJdGhlQ29tbW9uUGFja2FnZS5pbml0aWFsaXplUGFja2FnZUNvbnRlbnRzKCk7CisJCXRoZUdyYXBoUGFja2FnZS5pbml0aWFsaXplUGFja2FnZUNvbnRlbnRzKCk7CisJCXRoZU1vZGVsUGFja2FnZS5pbml0aWFsaXplUGFja2FnZUNvbnRlbnRzKCk7CisJCXRoZU1vZGlmaWVyUGFja2FnZS5pbml0aWFsaXplUGFja2FnZUNvbnRlbnRzKCk7CisJCXRoZVByZWRpY2F0ZVBhY2thZ2UuaW5pdGlhbGl6ZVBhY2thZ2VDb250ZW50cygpOworCQl0aGVTY2VuYXJpb1BhY2thZ2UuaW5pdGlhbGl6ZVBhY2thZ2VDb250ZW50cygpOworCQl0aGVTZXF1ZW5jZXJQYWNrYWdlLmluaXRpYWxpemVQYWNrYWdlQ29udGVudHMoKTsKKwkJdGhlVHJpZ2dlclBhY2thZ2UuaW5pdGlhbGl6ZVBhY2thZ2VDb250ZW50cygpOworCQl0aGVTb2x2ZXJQYWNrYWdlLmluaXRpYWxpemVQYWNrYWdlQ29udGVudHMoKTsKKwkJdGhlTG9nZ2VyUGFja2FnZS5pbml0aWFsaXplUGFja2FnZUNvbnRlbnRzKCk7CisKKwkJLy8gTWFyayBtZXRhLWRhdGEgdG8gaW5kaWNhdGUgaXQgY2FuJ3QgYmUgY2hhbmdlZAorCQl0aGVFeHBlcmltZW50UGFja2FnZS5mcmVlemUoKTsKKworICAKKwkJLy8gVXBkYXRlIHRoZSByZWdpc3RyeSBhbmQgcmV0dXJuIHRoZSBwYWNrYWdlCisJCUVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLnB1dChFeHBlcmltZW50UGFja2FnZS5lTlNfVVJJLCB0aGVFeHBlcmltZW50UGFja2FnZSk7CisJCXJldHVybiB0aGVFeHBlcmltZW50UGFja2FnZTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUNsYXNzIGdldEV4cGVyaW1lbnQoKSB7CisJCXJldHVybiBleHBlcmltZW50RUNsYXNzOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFUmVmZXJlbmNlIGdldEV4cGVyaW1lbnRfTW9kaWZpZXJzKCkgeworCQlyZXR1cm4gKEVSZWZlcmVuY2UpZXhwZXJpbWVudEVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDApOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQXR0cmlidXRlIGdldEV4cGVyaW1lbnRfQ29tcGxldGUoKSB7CisJCXJldHVybiAoRUF0dHJpYnV0ZSlleHBlcmltZW50RUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVSZWZlcmVuY2UgZ2V0RXhwZXJpbWVudF9TY2VuYXJpbygpIHsKKwkJcmV0dXJuIChFUmVmZXJlbmNlKWV4cGVyaW1lbnRFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgyKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRXhwZXJpbWVudEZhY3RvcnkgZ2V0RXhwZXJpbWVudEZhY3RvcnkoKSB7CisJCXJldHVybiAoRXhwZXJpbWVudEZhY3RvcnkpZ2V0RUZhY3RvcnlJbnN0YW5jZSgpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByaXZhdGUgYm9vbGVhbiBpc0NyZWF0ZWQgPSBmYWxzZTsKKworCS8qKgorCSAqIENyZWF0ZXMgdGhlIG1ldGEtbW9kZWwgb2JqZWN0cyBmb3IgdGhlIHBhY2thZ2UuICBUaGlzIG1ldGhvZCBpcworCSAqIGd1YXJkZWQgdG8gaGF2ZSBubyBhZmZlY3Qgb24gYW55IGludm9jYXRpb24gYnV0IGl0cyBmaXJzdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBjcmVhdGVQYWNrYWdlQ29udGVudHMoKSB7CisJCWlmIChpc0NyZWF0ZWQpIHJldHVybjsKKwkJaXNDcmVhdGVkID0gdHJ1ZTsKKworCQkvLyBDcmVhdGUgY2xhc3NlcyBhbmQgdGhlaXIgZmVhdHVyZXMKKwkJZXhwZXJpbWVudEVDbGFzcyA9IGNyZWF0ZUVDbGFzcyhFWFBFUklNRU5UKTsKKwkJY3JlYXRlRVJlZmVyZW5jZShleHBlcmltZW50RUNsYXNzLCBFWFBFUklNRU5UX19NT0RJRklFUlMpOworCQljcmVhdGVFQXR0cmlidXRlKGV4cGVyaW1lbnRFQ2xhc3MsIEVYUEVSSU1FTlRfX0NPTVBMRVRFKTsKKwkJY3JlYXRlRVJlZmVyZW5jZShleHBlcmltZW50RUNsYXNzLCBFWFBFUklNRU5UX19TQ0VOQVJJTyk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJpdmF0ZSBib29sZWFuIGlzSW5pdGlhbGl6ZWQgPSBmYWxzZTsKKworCS8qKgorCSAqIENvbXBsZXRlIHRoZSBpbml0aWFsaXphdGlvbiBvZiB0aGUgcGFja2FnZSBhbmQgaXRzIG1ldGEtbW9kZWwuICBUaGlzCisJICogbWV0aG9kIGlzIGd1YXJkZWQgdG8gaGF2ZSBubyBhZmZlY3Qgb24gYW55IGludm9jYXRpb24gYnV0IGl0cyBmaXJzdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBpbml0aWFsaXplUGFja2FnZUNvbnRlbnRzKCkgeworCQlpZiAoaXNJbml0aWFsaXplZCkgcmV0dXJuOworCQlpc0luaXRpYWxpemVkID0gdHJ1ZTsKKworCQkvLyBJbml0aWFsaXplIHBhY2thZ2UKKwkJc2V0TmFtZShlTkFNRSk7CisJCXNldE5zUHJlZml4KGVOU19QUkVGSVgpOworCQlzZXROc1VSSShlTlNfVVJJKTsKKworCQkvLyBPYnRhaW4gb3RoZXIgZGVwZW5kZW50IHBhY2thZ2VzCisJCUNvbW1vblBhY2thZ2UgdGhlQ29tbW9uUGFja2FnZSA9IChDb21tb25QYWNrYWdlKUVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVQYWNrYWdlKENvbW1vblBhY2thZ2UuZU5TX1VSSSk7CisJCU1vZGlmaWVyUGFja2FnZSB0aGVNb2RpZmllclBhY2thZ2UgPSAoTW9kaWZpZXJQYWNrYWdlKUVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVQYWNrYWdlKE1vZGlmaWVyUGFja2FnZS5lTlNfVVJJKTsKKwkJU2NlbmFyaW9QYWNrYWdlIHRoZVNjZW5hcmlvUGFja2FnZSA9IChTY2VuYXJpb1BhY2thZ2UpRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RVBhY2thZ2UoU2NlbmFyaW9QYWNrYWdlLmVOU19VUkkpOworCisJCS8vIENyZWF0ZSB0eXBlIHBhcmFtZXRlcnMKKworCQkvLyBTZXQgYm91bmRzIGZvciB0eXBlIHBhcmFtZXRlcnMKKworCQkvLyBBZGQgc3VwZXJ0eXBlcyB0byBjbGFzc2VzCisJCWV4cGVyaW1lbnRFQ2xhc3MuZ2V0RVN1cGVyVHlwZXMoKS5hZGQodGhlQ29tbW9uUGFja2FnZS5nZXRJZGVudGlmaWFibGUoKSk7CisKKwkJLy8gSW5pdGlhbGl6ZSBjbGFzc2VzIGFuZCBmZWF0dXJlczsgYWRkIG9wZXJhdGlvbnMgYW5kIHBhcmFtZXRlcnMKKwkJaW5pdEVDbGFzcyhleHBlcmltZW50RUNsYXNzLCBFeHBlcmltZW50LmNsYXNzLCAiRXhwZXJpbWVudCIsICFJU19BQlNUUkFDVCwgIUlTX0lOVEVSRkFDRSwgSVNfR0VORVJBVEVEX0lOU1RBTkNFX0NMQVNTKTsgLy8kTk9OLU5MUy0xJAorCQlpbml0RVJlZmVyZW5jZShnZXRFeHBlcmltZW50X01vZGlmaWVycygpLCB0aGVNb2RpZmllclBhY2thZ2UuZ2V0TW9kaWZpZXIoKSwgbnVsbCwgIm1vZGlmaWVycyIsIG51bGwsIDAsIC0xLCBFeHBlcmltZW50LmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19DT01QT1NJVEUsIElTX1JFU09MVkVfUFJPWElFUywgIUlTX1VOU0VUVEFCTEUsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOyAvLyROT04tTkxTLTEkCisJCWluaXRFQXR0cmlidXRlKGdldEV4cGVyaW1lbnRfQ29tcGxldGUoKSwgZWNvcmVQYWNrYWdlLmdldEVCb29sZWFuKCksICJjb21wbGV0ZSIsIG51bGwsIDAsIDEsIEV4cGVyaW1lbnQuY2xhc3MsIElTX1RSQU5TSUVOVCwgSVNfVk9MQVRJTEUsICFJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsgLy8kTk9OLU5MUy0xJAorCQlpbml0RVJlZmVyZW5jZShnZXRFeHBlcmltZW50X1NjZW5hcmlvKCksIHRoZVNjZW5hcmlvUGFja2FnZS5nZXRTY2VuYXJpbygpLCBudWxsLCAic2NlbmFyaW8iLCBudWxsLCAwLCAxLCBFeHBlcmltZW50LmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19DT01QT1NJVEUsIElTX1JFU09MVkVfUFJPWElFUywgIUlTX1VOU0VUVEFCTEUsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOyAvLyROT04tTkxTLTEkCisKKwkJYWRkRU9wZXJhdGlvbihleHBlcmltZW50RUNsYXNzLCB0aGVTY2VuYXJpb1BhY2thZ2UuZ2V0U2NlbmFyaW8oKSwgInVwZGF0ZVNjZW5hcmlvIiwgMCwgMSwgSVNfVU5JUVVFLCBJU19PUkRFUkVEKTsgLy8kTk9OLU5MUy0xJAorCisJCWFkZEVPcGVyYXRpb24oZXhwZXJpbWVudEVDbGFzcywgdGhlU2NlbmFyaW9QYWNrYWdlLmdldFNjZW5hcmlvKCksICJpbml0U2NlbmFyaW8iLCAwLCAxLCBJU19VTklRVUUsIElTX09SREVSRUQpOyAvLyROT04tTkxTLTEkCisKKwkJLy8gQ3JlYXRlIHJlc291cmNlCisJCWNyZWF0ZVJlc291cmNlKGVOU19VUkkpOworCX0KKworfSAvL0V4cGVyaW1lbnRQYWNrYWdlSW1wbApkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9leHBlcmltZW50L3Byb3ZpZGVyL0V4cGVyaW1lbnRJdGVtUHJvdmlkZXIuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZXhwZXJpbWVudC9wcm92aWRlci9FeHBlcmltZW50SXRlbVByb3ZpZGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjZiYmVkYQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZXhwZXJpbWVudC9wcm92aWRlci9FeHBlcmltZW50SXRlbVByb3ZpZGVyLmphdmEKQEAgLTAsMCArMSwzNDggQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmV4cGVyaW1lbnQucHJvdmlkZXI7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlzOworaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOworaW1wb3J0IGphdmEudXRpbC5MaXN0OworCitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUZpbGU7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5jb21tYW5kLkNvbW1hbmQ7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5SZXNvdXJjZUxvY2F0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlVSSTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRVN0cnVjdHVyYWxGZWF0dXJlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LmRvbWFpbi5FZGl0aW5nRG9tYWluOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkNvbXBvc2VhYmxlQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUVkaXRpbmdEb21haW5JdGVtUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1MYWJlbFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtUHJvcGVydHlEZXNjcmlwdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtUHJvcGVydHlTb3VyY2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVN0cnVjdHVyZWRJdGVtQ29udGVudFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklUcmVlSXRlbUNvbnRlbnRQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JdGVtUHJvcGVydHlEZXNjcmlwdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLlZpZXdlck5vdGlmaWNhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuVXRpbGl0eTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLklkZW50aWZpYWJsZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLnByb3ZpZGVyLkNvcmVFZGl0UGx1Z2luOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24ucHJvdmlkZXIuSWRlbnRpZmlhYmxlSXRlbVByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5leHBlcmltZW50LkV4cGVyaW1lbnQ7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmV4cGVyaW1lbnQuRXhwZXJpbWVudFBhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLk1vZGlmaWVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zY2VuYXJpby5TY2VuYXJpbzsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZG5kLkRORDsKKworLyoqCisgKiBUaGlzIGlzIHRoZSBpdGVtIHByb3ZpZGVyIGFkYXB0ZXIgZm9yIGEge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5leHBlcmltZW50LkV4cGVyaW1lbnR9IG9iamVjdC4KKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIEV4cGVyaW1lbnRJdGVtUHJvdmlkZXIKKwlleHRlbmRzIElkZW50aWZpYWJsZUl0ZW1Qcm92aWRlcgorCWltcGxlbWVudHMJCisJCUlFZGl0aW5nRG9tYWluSXRlbVByb3ZpZGVyLAkKKwkJSVN0cnVjdHVyZWRJdGVtQ29udGVudFByb3ZpZGVyLAkKKwkJSVRyZWVJdGVtQ29udGVudFByb3ZpZGVyLAkKKwkJSUl0ZW1MYWJlbFByb3ZpZGVyLAkKKwkJSUl0ZW1Qcm9wZXJ0eVNvdXJjZSB7CisJLyoqCisJICogVGhpcyBjb25zdHJ1Y3RzIGFuIGluc3RhbmNlIGZyb20gYSBmYWN0b3J5IGFuZCBhIG5vdGlmaWVyLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFeHBlcmltZW50SXRlbVByb3ZpZGVyKEFkYXB0ZXJGYWN0b3J5IGFkYXB0ZXJGYWN0b3J5KSB7CisJCXN1cGVyKGFkYXB0ZXJGYWN0b3J5KTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgdGhlIHByb3BlcnR5IGRlc2NyaXB0b3JzIGZvciB0aGUgYWRhcHRlZCBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgTGlzdDxJSXRlbVByb3BlcnR5RGVzY3JpcHRvcj4gZ2V0UHJvcGVydHlEZXNjcmlwdG9ycyhPYmplY3Qgb2JqZWN0KSB7CisJCWlmIChpdGVtUHJvcGVydHlEZXNjcmlwdG9ycyA9PSBudWxsKSB7CisJCQlzdXBlci5nZXRQcm9wZXJ0eURlc2NyaXB0b3JzKG9iamVjdCk7CisKKwkJCWFkZENvbXBsZXRlUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCk7CisJCX0KKwkJcmV0dXJuIGl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzOworCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyBhIHByb3BlcnR5IGRlc2NyaXB0b3IgZm9yIHRoZSBDb21wbGV0ZSBmZWF0dXJlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIGFkZENvbXBsZXRlUHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdCBvYmplY3QpIHsKKwkJaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMuYWRkCisJCQkoY3JlYXRlSXRlbVByb3BlcnR5RGVzY3JpcHRvcgorCQkJCSgoKENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnkpYWRhcHRlckZhY3RvcnkpLmdldFJvb3RBZGFwdGVyRmFjdG9yeSgpLAorCQkJCSBnZXRSZXNvdXJjZUxvY2F0b3IoKSwKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfRXhwZXJpbWVudF9jb21wbGV0ZV9mZWF0dXJlIiksIC8vJE5PTi1OTFMtMSQKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfUHJvcGVydHlEZXNjcmlwdG9yX2Rlc2NyaXB0aW9uIiwgIl9VSV9FeHBlcmltZW50X2NvbXBsZXRlX2ZlYXR1cmUiLCAiX1VJX0V4cGVyaW1lbnRfdHlwZSIpLCAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQgLy8kTk9OLU5MUy0zJAorCQkJCSBFeHBlcmltZW50UGFja2FnZS5MaXRlcmFscy5FWFBFUklNRU5UX19DT01QTEVURSwKKwkJCQkgZmFsc2UsCisJCQkJIGZhbHNlLAorCQkJCSBmYWxzZSwKKwkJCQkgSXRlbVByb3BlcnR5RGVzY3JpcHRvci5CT09MRUFOX1ZBTFVFX0lNQUdFLAorCQkJCSBudWxsLAorCQkJCSBudWxsKSk7CisJfQorCisJLyoqCisJICogVGhpcyBzcGVjaWZpZXMgaG93IHRvIGltcGxlbWVudCB7QGxpbmsgI2dldENoaWxkcmVufSBhbmQgaXMgdXNlZCB0byBkZWR1Y2UgYW4gYXBwcm9wcmlhdGUgZmVhdHVyZSBmb3IgYW4KKwkgKiB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmVkaXQuY29tbWFuZC5BZGRDb21tYW5kfSwge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lZGl0LmNvbW1hbmQuUmVtb3ZlQ29tbWFuZH0gb3IKKwkgKiB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmVkaXQuY29tbWFuZC5Nb3ZlQ29tbWFuZH0gaW4ge0BsaW5rICNjcmVhdGVDb21tYW5kfS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgQ29sbGVjdGlvbjw/IGV4dGVuZHMgRVN0cnVjdHVyYWxGZWF0dXJlPiBnZXRDaGlsZHJlbkZlYXR1cmVzKE9iamVjdCBvYmplY3QpIHsKKwkJaWYgKGNoaWxkcmVuRmVhdHVyZXMgPT0gbnVsbCkgeworCQkJc3VwZXIuZ2V0Q2hpbGRyZW5GZWF0dXJlcyhvYmplY3QpOworCQkJY2hpbGRyZW5GZWF0dXJlcy5hZGQoRXhwZXJpbWVudFBhY2thZ2UuTGl0ZXJhbHMuRVhQRVJJTUVOVF9fTU9ESUZJRVJTKTsKKwkJCWNoaWxkcmVuRmVhdHVyZXMuYWRkKEV4cGVyaW1lbnRQYWNrYWdlLkxpdGVyYWxzLkVYUEVSSU1FTlRfX1NDRU5BUklPKTsKKwkJfQorCQlyZXR1cm4gY2hpbGRyZW5GZWF0dXJlczsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgRVN0cnVjdHVyYWxGZWF0dXJlIGdldENoaWxkRmVhdHVyZShPYmplY3Qgb2JqZWN0LCBPYmplY3QgY2hpbGQpIHsKKwkJLy8gQ2hlY2sgdGhlIHR5cGUgb2YgdGhlIHNwZWNpZmllZCBjaGlsZCBvYmplY3QgYW5kIHJldHVybiB0aGUgcHJvcGVyIGZlYXR1cmUgdG8gdXNlIGZvcgorCQkvLyBhZGRpbmcgKHNlZSB7QGxpbmsgQWRkQ29tbWFuZH0pIGl0IGFzIGEgY2hpbGQuCisKKwkJcmV0dXJuIHN1cGVyLmdldENoaWxkRmVhdHVyZShvYmplY3QsIGNoaWxkKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgRXhwZXJpbWVudC5naWYuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBPYmplY3QgZ2V0SW1hZ2UoT2JqZWN0IG9iamVjdCkgeworCQlyZXR1cm4gb3ZlcmxheUltYWdlKG9iamVjdCwgZ2V0UmVzb3VyY2VMb2NhdG9yKCkuZ2V0SW1hZ2UoImZ1bGwvY3VzdG9tb2JqMTYvRXhwZXJpbWVudCIpKTsKKwl9CisJCisJLyoqCisJICogVGhpcyByZXR1cm5zIHRoZSBsYWJlbCB0ZXh0IGZvciB0aGUgYWRhcHRlZCBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIFN0cmluZyBnZXRUZXh0KE9iamVjdCBvYmplY3QpIHsKKwkJcmV0dXJuIHN1cGVyLmdldFRleHQob2JqZWN0KTsKKwl9CisJCisJLyoqCisJICogVGhpcyByZXR1cm5zIHRoZSBsYWJlbCB0ZXh0IGZvciB0aGUgYWRhcHRlZCBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgU3RyaW5nIGdldFRleHRHZW4oT2JqZWN0IG9iamVjdCkgeworCQlVUkkgbGFiZWxWYWx1ZSA9ICgoRXhwZXJpbWVudClvYmplY3QpLmdldFVSSSgpOworCQlTdHJpbmcgbGFiZWwgPSBsYWJlbFZhbHVlID09IG51bGwgPyBudWxsIDogbGFiZWxWYWx1ZS50b1N0cmluZygpOworCQlyZXR1cm4gbGFiZWwgPT0gbnVsbCB8fCBsYWJlbC5sZW5ndGgoKSA9PSAwID8KKwkJCWdldFN0cmluZygiX1VJX0V4cGVyaW1lbnRfdHlwZSIpIDogLy8kTk9OLU5MUy0xJAorCQkJZ2V0U3RyaW5nKCJfVUlfRXhwZXJpbWVudF90eXBlIikgKyAiICIgKyBsYWJlbDsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCisJfQorCisJLyoqCisJICogVGhpcyBoYW5kbGVzIG1vZGVsIG5vdGlmaWNhdGlvbnMgYnkgY2FsbGluZyB7QGxpbmsgI3VwZGF0ZUNoaWxkcmVufSB0byB1cGRhdGUgYW55IGNhY2hlZAorCSAqIGNoaWxkcmVuIGFuZCBieSBjcmVhdGluZyBhIHZpZXdlciBub3RpZmljYXRpb24sIHdoaWNoIGl0IHBhc3NlcyB0byB7QGxpbmsgI2ZpcmVOb3RpZnlDaGFuZ2VkfS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBub3RpZnlDaGFuZ2VkKE5vdGlmaWNhdGlvbiBub3RpZmljYXRpb24pIHsKKwkJdXBkYXRlQ2hpbGRyZW4obm90aWZpY2F0aW9uKTsKKworCQlzd2l0Y2ggKG5vdGlmaWNhdGlvbi5nZXRGZWF0dXJlSUQoRXhwZXJpbWVudC5jbGFzcykpIHsKKwkJCWNhc2UgRXhwZXJpbWVudFBhY2thZ2UuRVhQRVJJTUVOVF9fQ09NUExFVEU6CisJCQkJZmlyZU5vdGlmeUNoYW5nZWQobmV3IFZpZXdlck5vdGlmaWNhdGlvbihub3RpZmljYXRpb24sIG5vdGlmaWNhdGlvbi5nZXROb3RpZmllcigpLCBmYWxzZSwgdHJ1ZSkpOworCQkJCXJldHVybjsKKwkJCWNhc2UgRXhwZXJpbWVudFBhY2thZ2UuRVhQRVJJTUVOVF9fTU9ESUZJRVJTOgorCQkJY2FzZSBFeHBlcmltZW50UGFja2FnZS5FWFBFUklNRU5UX19TQ0VOQVJJTzoKKwkJCQlmaXJlTm90aWZ5Q2hhbmdlZChuZXcgVmlld2VyTm90aWZpY2F0aW9uKG5vdGlmaWNhdGlvbiwgbm90aWZpY2F0aW9uLmdldE5vdGlmaWVyKCksIHRydWUsIGZhbHNlKSk7CisJCQkJcmV0dXJuOworCQl9CisJCXN1cGVyLm5vdGlmeUNoYW5nZWQobm90aWZpY2F0aW9uKTsKKwl9CisKKwkKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkl0ZW1Qcm92aWRlckFkYXB0ZXIjY3JlYXRlQWRkQ29tbWFuZChvcmcuZWNsaXBzZS5lbWYuZWRpdC5kb21haW4uRWRpdGluZ0RvbWFpbiwgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QsIG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FU3RydWN0dXJhbEZlYXR1cmUsIGphdmEudXRpbC5Db2xsZWN0aW9uLCBpbnQpCisJICovCisJQFN1cHByZXNzV2FybmluZ3MoInVuY2hlY2tlZCIpCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIENvbW1hbmQgY3JlYXRlQWRkQ29tbWFuZChFZGl0aW5nRG9tYWluIGRvbWFpbiwgRU9iamVjdCBvd25lciwKKwkJCUVTdHJ1Y3R1cmFsRmVhdHVyZSBmZWF0dXJlLCBDb2xsZWN0aW9uPD8+IGNvbGxlY3Rpb24sIGludCBpbmRleCkgeworCQlmaW5hbCBDb2xsZWN0aW9uIGlkZW50aWZpYWJsZUNvbGxlY3Rpb24gPSBuZXcgQXJyYXlMaXN0KCk7CisJCWZvciAoT2JqZWN0IHZhbHVlIDogY29sbGVjdGlvbikgeworCisJCQlPYmplY3QgdGVtcCA9IHZhbHVlOworCQkJaWYgKHZhbHVlIGluc3RhbmNlb2YgSUZpbGUpIHsKKwkJCQkvLyBZZXMKKwkJCQlmaW5hbCBJRmlsZSBpRmlsZSA9IChJRmlsZSkgdmFsdWU7CisJCQkJZmluYWwgVVJJIHVyaSA9IFVSSS5jcmVhdGVGaWxlVVJJKGlGaWxlLmdldExvY2F0aW9uKCkKKwkJCQkJCS50b1N0cmluZygpKTsKKwkJCQlmaW5hbCBJZGVudGlmaWFibGUgaWRlbnRpZmFibGUgPSBVdGlsaXR5LmdldElkZW50aWZpYWJsZSh1cmkpOworCQkJCWlkZW50aWZpYWJsZUNvbGxlY3Rpb24uYWRkKGlkZW50aWZhYmxlKTsKKwkJCQl0ZW1wID0gaWRlbnRpZmFibGU7CisJCQl9IC8vIGlmIElGaWxlCisKKwkJCWVsc2UgaWYgKHZhbHVlIGluc3RhbmNlb2YgU3RyaW5nKSB7CisJCQkJLy8gWWVzCisJCQkJZmluYWwgU3RyaW5nIHVyaVN0cmluZyA9IChTdHJpbmcpIHZhbHVlOworCQkJCXRyeSB7CisJCQkJCWZpbmFsIFVSSSB1cmkgPSBVUkkuY3JlYXRlVVJJKHVyaVN0cmluZyk7CisJCQkJCWZpbmFsIElkZW50aWZpYWJsZSBpZGVudGlmYWJsZSA9IFV0aWxpdHkKKwkJCQkJCQkuZ2V0SWRlbnRpZmlhYmxlKHVyaSk7CisJCQkJCXRlbXAgPSBpZGVudGlmYWJsZTsKKwkJCQl9IGNhdGNoIChFeGNlcHRpb24gZSkgeworCQkJCQkvLyBJZ25vcmUgaXQKKwkJCQl9CisJCQl9IC8vIGlmIFN0cmluZworCisJCQlpZiAodGVtcCBpbnN0YW5jZW9mIElkZW50aWZpYWJsZSkgeworCQkJCWlkZW50aWZpYWJsZUNvbGxlY3Rpb24uYWRkKHRlbXApOworCQkJfQorCQl9IC8vIGZvciBlYWNoIE9iamVjdAorCisJCXJldHVybiBzdXBlci5jcmVhdGVBZGRDb21tYW5kKGRvbWFpbiwgb3duZXIsIGZlYXR1cmUsCisJCQkJaWRlbnRpZmlhYmxlQ29sbGVjdGlvbiwgaW5kZXgpOworCX0gLy8gY3JlYXRlQWRkQ29tbWFuZAorCQorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JdGVtUHJvdmlkZXJBZGFwdGVyI2NyZWF0ZVNldENvbW1hbmQob3JnLmVjbGlwc2UuZW1mLmVkaXQuZG9tYWluLkVkaXRpbmdEb21haW4sCisJICogICAgICBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCwKKwkgKiAgICAgIG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FU3RydWN0dXJhbEZlYXR1cmUsIGphdmEubGFuZy5PYmplY3QsIGludCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgQ29tbWFuZCBjcmVhdGVTZXRDb21tYW5kKEVkaXRpbmdEb21haW4gZG9tYWluLCBFT2JqZWN0IG93bmVyLAorCQkJRVN0cnVjdHVyYWxGZWF0dXJlIGZlYXR1cmUsIE9iamVjdCB2YWx1ZSwgaW50IGluZGV4KSB7CisJCS8vIEFyZSB3ZSBzZXR0aW5nIHRoZSBtb2RlbCBkdXJpbmcgYSBkcmFnIGFuZCBkcm9wPworCQlPYmplY3QgdGVtcCA9IHZhbHVlOworCisJCWlmICh2YWx1ZSBpbnN0YW5jZW9mIElGaWxlKSB7CisJCQkvLyBZZXMKKwkJCWZpbmFsIElGaWxlIGlGaWxlID0gKElGaWxlKSB2YWx1ZTsKKwkJCWZpbmFsIFVSSSB1cmkgPSBVUkkuY3JlYXRlRmlsZVVSSShpRmlsZS5nZXRMb2NhdGlvbigpLnRvU3RyaW5nKCkpOworCQkJZmluYWwgSWRlbnRpZmlhYmxlIGlkZW50aWZhYmxlID0gVXRpbGl0eS5nZXRJZGVudGlmaWFibGUodXJpKTsKKwkJCXRlbXAgPSBpZGVudGlmYWJsZTsKKwkJfSAvLyBpZiBJRmlsZQorCisJCWVsc2UgaWYgKHZhbHVlIGluc3RhbmNlb2YgU3RyaW5nKSB7CisJCQkvLyBZZXMKKwkJCS8vIFRoZXNlIGNvbWUgZnJvbSBJZGVudGlmYWJsZVBsdWdpblZpZXcKKwkJCWZpbmFsIFN0cmluZyB1cmlTdHJpbmcgPSAoU3RyaW5nKSB2YWx1ZTsKKwkJCXRyeSB7CisJCQkJZmluYWwgVVJJIHVyaSA9IFVSSS5jcmVhdGVVUkkodXJpU3RyaW5nKTsKKwkJCQlmaW5hbCBJZGVudGlmaWFibGUgaWRlbnRpZmFibGUgPSBVdGlsaXR5LmdldElkZW50aWZpYWJsZSh1cmkpOworCQkJCXRlbXAgPSBpZGVudGlmYWJsZTsKKwkJCX0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CisJCQkJLy8gSWdub3JlIGl0CisJCQl9CisJCX0gLy8gaWYgU3RyaW5nCisKKwkJaWYgKHRlbXAgaW5zdGFuY2VvZiBTY2VuYXJpbykgeworCQkJcmV0dXJuIHN1cGVyLmNyZWF0ZVNldENvbW1hbmQoZG9tYWluLCBvd25lciwKKwkJCQkJRXhwZXJpbWVudFBhY2thZ2UuZUlOU1RBTkNFLmdldEV4cGVyaW1lbnRfU2NlbmFyaW8oKSwgdGVtcCwgaW5kZXgpOworCQl9IC8vIGlmCisJCWVsc2UgaWYgKHRlbXAgaW5zdGFuY2VvZiBNb2RpZmllcikgeworCQkJcmV0dXJuIHN1cGVyCisJCQkJCS5jcmVhdGVBZGRDb21tYW5kKAorCQkJCQkJCWRvbWFpbiwKKwkJCQkJCQlvd25lciwKKwkJCQkJCQlFeHBlcmltZW50UGFja2FnZS5lSU5TVEFOQ0UKKwkJCQkJCQkJCS5nZXRFeHBlcmltZW50KCkKKwkJCQkJCQkJCS5nZXRFU3RydWN0dXJhbEZlYXR1cmUoCisJCQkJCQkJCQkJCUV4cGVyaW1lbnRQYWNrYWdlLkVYUEVSSU1FTlRfX01PRElGSUVSUyksCisJCQkJCQkJQXJyYXlzLmFzTGlzdCgobmV3IE9iamVjdFtdIHsgdGVtcCB9KSksIGluZGV4KTsKKwkJfSAvLyBlbHNlIGlmCisJCWVsc2UgeworCisJCQlyZXR1cm4gc3VwZXIuY3JlYXRlU2V0Q29tbWFuZChkb21haW4sIG93bmVyLCBmZWF0dXJlLCB2YWx1ZSwgaW5kZXgpOworCQl9CisJfSAvLyBjcmVhdGVTZXRDb21tYW5kCisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkl0ZW1Qcm92aWRlckFkYXB0ZXIjY3JlYXRlRHJhZ0FuZERyb3BDb21tYW5kKG9yZy5lY2xpcHNlLmVtZi5lZGl0LmRvbWFpbi5FZGl0aW5nRG9tYWluLAorCSAqICAgICAgamF2YS5sYW5nLk9iamVjdCwgZmxvYXQsIGludCwgaW50LCBqYXZhLnV0aWwuQ29sbGVjdGlvbikKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgQ29tbWFuZCBjcmVhdGVEcmFnQW5kRHJvcENvbW1hbmQoRWRpdGluZ0RvbWFpbiBkb21haW4sCisJCQlPYmplY3Qgb3duZXIsIGZsb2F0IGxvY2F0aW9uLCBpbnQgb3BlcmF0aW9ucywgaW50IG9wZXJhdGlvbiwKKwkJCUNvbGxlY3Rpb248Pz4gY29sbGVjdGlvbikgeworCQkvLyBXZSBhZGQgRE5ELkRST1BfTElOSyBhcyBhbiBhbGxvd2VkIG9wZXJhdGlvbiBiZWNhdXNlIGFsbCBkcm9wcyB3aWxsCisJCS8vIGJlIGxpbmtzIGFuZCBzb21lIHNvdXJjZXMgZG9uJ3QgYWxsb3cgbGlua3MsIHdlIGNvbnZlcnQgdG8gbGlua3MKKwkJLy8gYW55d2F5CisJCXJldHVybiBzdXBlci5jcmVhdGVEcmFnQW5kRHJvcENvbW1hbmQoZG9tYWluLCBvd25lciwgbG9jYXRpb24sCisJCQkJb3BlcmF0aW9ucyB8IERORC5EUk9QX0xJTkssIG9wZXJhdGlvbiwgY29sbGVjdGlvbik7CisJfSAvLyBjcmVhdGVEcmFnQW5kRHJvcENvbW1hbmQKKwkKKwkvKioKKwkgKiBUaGlzIGFkZHMge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lZGl0LmNvbW1hbmQuQ29tbWFuZFBhcmFtZXRlcn1zIGRlc2NyaWJpbmcgdGhlIGNoaWxkcmVuCisJICogdGhhdCBjYW4gYmUgY3JlYXRlZCB1bmRlciB0aGlzIG9iamVjdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgdm9pZCBjb2xsZWN0TmV3Q2hpbGREZXNjcmlwdG9ycyhDb2xsZWN0aW9uPE9iamVjdD4gbmV3Q2hpbGREZXNjcmlwdG9ycywgT2JqZWN0IG9iamVjdCkgeworCQlzdXBlci5jb2xsZWN0TmV3Q2hpbGREZXNjcmlwdG9ycyhuZXdDaGlsZERlc2NyaXB0b3JzLCBvYmplY3QpOworCX0KKworCQorCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSXRlbVByb3ZpZGVyQWRhcHRlciNpc1dyYXBwaW5nTmVlZGVkKGphdmEubGFuZy5PYmplY3QpCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIGJvb2xlYW4gaXNXcmFwcGluZ05lZWRlZChPYmplY3Qgb2JqZWN0KSB7CisJCS8vIHJldHVybiBzdXBlci5pc1dyYXBwaW5nTmVlZGVkKG9iamVjdCk7CisJCS8vIFdlIHJldHVybiB0cnVlIHNvIHRoYXQgbm9uLWNvbnRhaW5tZW50IHJlZmVyZW5jZXMgYXJlIHdyYXBwZWQuIFRoaXMKKwkJLy8gZW5hYmxlcyB0aGUgZGVsZXRlIGNvbW1hbmQgaW4gdGhlIGVkaXRvcidzIGNvbnRleHQgbWVudS4KKwkJcmV0dXJuIHRydWU7CisJfQorCisJLyoqCisJICogUmV0dXJuIHRoZSByZXNvdXJjZSBsb2NhdG9yIGZvciB0aGlzIGl0ZW0gcHJvdmlkZXIncyByZXNvdXJjZXMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIFJlc291cmNlTG9jYXRvciBnZXRSZXNvdXJjZUxvY2F0b3IoKSB7CisJCXJldHVybiBDb3JlRWRpdFBsdWdpbi5JTlNUQU5DRTsKKwl9CisKK30KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZXhwZXJpbWVudC9wcm92aWRlci9FeHBlcmltZW50SXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZXhwZXJpbWVudC9wcm92aWRlci9FeHBlcmltZW50SXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNzA3ZDY1Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9leHBlcmltZW50L3Byb3ZpZGVyL0V4cGVyaW1lbnRJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeS5qYXZhCkBAIC0wLDAgKzEsMjA3IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5leHBlcmltZW50LnByb3ZpZGVyOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7CitpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5BZGFwdGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmllcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5DaGFuZ2VOb3RpZmllcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5Db21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkNvbXBvc2VkQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUNoYW5nZU5vdGlmaWVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklEaXNwb3NhYmxlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklFZGl0aW5nRG9tYWluSXRlbVByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtTGFiZWxQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbVByb3BlcnR5U291cmNlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklOb3RpZnlDaGFuZ2VkTGlzdGVuZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVN0cnVjdHVyZWRJdGVtQ29udGVudFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklUcmVlSXRlbUNvbnRlbnRQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZXhwZXJpbWVudC51dGlsLkV4cGVyaW1lbnRBZGFwdGVyRmFjdG9yeTsKKworLyoqCisgKiBUaGlzIGlzIHRoZSBmYWN0b3J5IHRoYXQgaXMgdXNlZCB0byBwcm92aWRlIHRoZSBpbnRlcmZhY2VzIG5lZWRlZCB0byBzdXBwb3J0IFZpZXdlcnMuCisgKiBUaGUgYWRhcHRlcnMgZ2VuZXJhdGVkIGJ5IHRoaXMgZmFjdG9yeSBjb252ZXJ0IEVNRiBhZGFwdGVyIG5vdGlmaWNhdGlvbnMgaW50byBjYWxscyB0byB7QGxpbmsgI2ZpcmVOb3RpZnlDaGFuZ2VkIGZpcmVOb3RpZnlDaGFuZ2VkfS4KKyAqIFRoZSBhZGFwdGVycyBhbHNvIHN1cHBvcnQgRWNsaXBzZSBwcm9wZXJ0eSBzaGVldHMuCisgKiBOb3RlIHRoYXQgbW9zdCBvZiB0aGUgYWRhcHRlcnMgYXJlIHNoYXJlZCBhbW9uZyBtdWx0aXBsZSBpbnN0YW5jZXMuCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBFeHBlcmltZW50SXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkgZXh0ZW5kcyBFeHBlcmltZW50QWRhcHRlckZhY3RvcnkgaW1wbGVtZW50cyBDb21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5LCBJQ2hhbmdlTm90aWZpZXIsIElEaXNwb3NhYmxlIHsKKwkvKioKKwkgKiBUaGlzIGtlZXBzIHRyYWNrIG9mIHRoZSByb290IGFkYXB0ZXIgZmFjdG9yeSB0aGF0IGRlbGVnYXRlcyB0byB0aGlzIGFkYXB0ZXIgZmFjdG9yeS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgQ29tcG9zZWRBZGFwdGVyRmFjdG9yeSBwYXJlbnRBZGFwdGVyRmFjdG9yeTsKKworCS8qKgorCSAqIFRoaXMgaXMgdXNlZCB0byBpbXBsZW1lbnQge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklDaGFuZ2VOb3RpZmllcn0uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIElDaGFuZ2VOb3RpZmllciBjaGFuZ2VOb3RpZmllciA9IG5ldyBDaGFuZ2VOb3RpZmllcigpOworCisJLyoqCisJICogVGhpcyBrZWVwcyB0cmFjayBvZiBhbGwgdGhlIHN1cHBvcnRlZCB0eXBlcyBjaGVja2VkIGJ5IHtAbGluayAjaXNGYWN0b3J5Rm9yVHlwZSBpc0ZhY3RvcnlGb3JUeXBlfS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgQ29sbGVjdGlvbjxPYmplY3Q+IHN1cHBvcnRlZFR5cGVzID0gbmV3IEFycmF5TGlzdDxPYmplY3Q+KCk7CisKKwkvKioKKwkgKiBUaGlzIGNvbnN0cnVjdHMgYW4gaW5zdGFuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEV4cGVyaW1lbnRJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSgpIHsKKwkJc3VwcG9ydGVkVHlwZXMuYWRkKElFZGl0aW5nRG9tYWluSXRlbVByb3ZpZGVyLmNsYXNzKTsKKwkJc3VwcG9ydGVkVHlwZXMuYWRkKElTdHJ1Y3R1cmVkSXRlbUNvbnRlbnRQcm92aWRlci5jbGFzcyk7CisJCXN1cHBvcnRlZFR5cGVzLmFkZChJVHJlZUl0ZW1Db250ZW50UHJvdmlkZXIuY2xhc3MpOworCQlzdXBwb3J0ZWRUeXBlcy5hZGQoSUl0ZW1MYWJlbFByb3ZpZGVyLmNsYXNzKTsKKwkJc3VwcG9ydGVkVHlwZXMuYWRkKElJdGVtUHJvcGVydHlTb3VyY2UuY2xhc3MpOworCX0KKworCS8qKgorCSAqIFRoaXMga2VlcHMgdHJhY2sgb2YgdGhlIG9uZSBhZGFwdGVyIHVzZWQgZm9yIGFsbCB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmV4cGVyaW1lbnQuRXhwZXJpbWVudH0gaW5zdGFuY2VzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBFeHBlcmltZW50SXRlbVByb3ZpZGVyIGV4cGVyaW1lbnRJdGVtUHJvdmlkZXI7CisKKwkvKioKKwkgKiBUaGlzIGNyZWF0ZXMgYW4gYWRhcHRlciBmb3IgYSB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmV4cGVyaW1lbnQuRXhwZXJpbWVudH0uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlRXhwZXJpbWVudEFkYXB0ZXIoKSB7CisJCWlmIChleHBlcmltZW50SXRlbVByb3ZpZGVyID09IG51bGwpIHsKKwkJCWV4cGVyaW1lbnRJdGVtUHJvdmlkZXIgPSBuZXcgRXhwZXJpbWVudEl0ZW1Qcm92aWRlcih0aGlzKTsKKwkJfQorCisJCXJldHVybiBleHBlcmltZW50SXRlbVByb3ZpZGVyOworCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyB0aGUgcm9vdCBhZGFwdGVyIGZhY3RvcnkgdGhhdCBjb250YWlucyB0aGlzIGZhY3RvcnkuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnkgZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCkgeworCQlyZXR1cm4gcGFyZW50QWRhcHRlckZhY3RvcnkgPT0gbnVsbCA/IHRoaXMgOiBwYXJlbnRBZGFwdGVyRmFjdG9yeS5nZXRSb290QWRhcHRlckZhY3RvcnkoKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHNldHMgdGhlIGNvbXBvc2VkIGFkYXB0ZXIgZmFjdG9yeSB0aGF0IGNvbnRhaW5zIHRoaXMgZmFjdG9yeS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRQYXJlbnRBZGFwdGVyRmFjdG9yeShDb21wb3NlZEFkYXB0ZXJGYWN0b3J5IHBhcmVudEFkYXB0ZXJGYWN0b3J5KSB7CisJCXRoaXMucGFyZW50QWRhcHRlckZhY3RvcnkgPSBwYXJlbnRBZGFwdGVyRmFjdG9yeTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgYm9vbGVhbiBpc0ZhY3RvcnlGb3JUeXBlKE9iamVjdCB0eXBlKSB7CisJCXJldHVybiBzdXBwb3J0ZWRUeXBlcy5jb250YWlucyh0eXBlKSB8fCBzdXBlci5pc0ZhY3RvcnlGb3JUeXBlKHR5cGUpOworCX0KKworCS8qKgorCSAqIFRoaXMgaW1wbGVtZW50YXRpb24gc3Vic3RpdHV0ZXMgdGhlIGZhY3RvcnkgaXRzZWxmIGFzIHRoZSBrZXkgZm9yIHRoZSBhZGFwdGVyLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBBZGFwdGVyIGFkYXB0KE5vdGlmaWVyIG5vdGlmaWVyLCBPYmplY3QgdHlwZSkgeworCQlyZXR1cm4gc3VwZXIuYWRhcHQobm90aWZpZXIsIHRoaXMpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBTdXBwcmVzc1dhcm5pbmdzKCJ1bmNoZWNrZWQiKQorCUBPdmVycmlkZQorCXB1YmxpYyBPYmplY3QgYWRhcHQoT2JqZWN0IG9iamVjdCwgT2JqZWN0IHR5cGUpIHsKKwkJaWYgKGlzRmFjdG9yeUZvclR5cGUodHlwZSkpIHsKKwkJCU9iamVjdCBhZGFwdGVyID0gc3VwZXIuYWRhcHQob2JqZWN0LCB0eXBlKTsKKwkJCWlmICghKHR5cGUgaW5zdGFuY2VvZiBDbGFzczw/PikgfHwgKCgoQ2xhc3M8Pz4pdHlwZSkuaXNJbnN0YW5jZShhZGFwdGVyKSkpIHsKKwkJCQlyZXR1cm4gYWRhcHRlcjsKKwkJCX0KKwkJfQorCisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyBhIGxpc3RlbmVyLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIGFkZExpc3RlbmVyKElOb3RpZnlDaGFuZ2VkTGlzdGVuZXIgbm90aWZ5Q2hhbmdlZExpc3RlbmVyKSB7CisJCWNoYW5nZU5vdGlmaWVyLmFkZExpc3RlbmVyKG5vdGlmeUNoYW5nZWRMaXN0ZW5lcik7CisJfQorCisJLyoqCisJICogVGhpcyByZW1vdmVzIGEgbGlzdGVuZXIuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgcmVtb3ZlTGlzdGVuZXIoSU5vdGlmeUNoYW5nZWRMaXN0ZW5lciBub3RpZnlDaGFuZ2VkTGlzdGVuZXIpIHsKKwkJY2hhbmdlTm90aWZpZXIucmVtb3ZlTGlzdGVuZXIobm90aWZ5Q2hhbmdlZExpc3RlbmVyKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGRlbGVnYXRlcyB0byB7QGxpbmsgI2NoYW5nZU5vdGlmaWVyfSBhbmQgdG8ge0BsaW5rICNwYXJlbnRBZGFwdGVyRmFjdG9yeX0uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgZmlyZU5vdGlmeUNoYW5nZWQoTm90aWZpY2F0aW9uIG5vdGlmaWNhdGlvbikgeworCQljaGFuZ2VOb3RpZmllci5maXJlTm90aWZ5Q2hhbmdlZChub3RpZmljYXRpb24pOworCisJCWlmIChwYXJlbnRBZGFwdGVyRmFjdG9yeSAhPSBudWxsKSB7CisJCQlwYXJlbnRBZGFwdGVyRmFjdG9yeS5maXJlTm90aWZ5Q2hhbmdlZChub3RpZmljYXRpb24pOworCQl9CisJfQorCisJLyoqCisJICogVGhpcyBkaXNwb3NlcyBhbGwgb2YgdGhlIGl0ZW0gcHJvdmlkZXJzIGNyZWF0ZWQgYnkgdGhpcyBmYWN0b3J5LiAKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBkaXNwb3NlKCkgeworCQlpZiAoZXhwZXJpbWVudEl0ZW1Qcm92aWRlciAhPSBudWxsKSBleHBlcmltZW50SXRlbVByb3ZpZGVyLmRpc3Bvc2UoKTsKKwl9CisKK30KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZXhwZXJpbWVudC91dGlsL0V4cGVyaW1lbnRBZGFwdGVyRmFjdG9yeS5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9leHBlcmltZW50L3V0aWwvRXhwZXJpbWVudEFkYXB0ZXJGYWN0b3J5LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmE3MWRjYgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZXhwZXJpbWVudC91dGlsL0V4cGVyaW1lbnRBZGFwdGVyRmFjdG9yeS5qYXZhCkBAIC0wLDAgKzEsMTgzIEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5leHBlcmltZW50LnV0aWw7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuQWRhcHRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmllcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5pbXBsLkFkYXB0ZXJGYWN0b3J5SW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLklkZW50aWZpYWJsZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLlNhbml0eUNoZWNrZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmV4cGVyaW1lbnQuRXhwZXJpbWVudDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZXhwZXJpbWVudC5FeHBlcmltZW50UGFja2FnZTsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogVGhlIDxiPkFkYXB0ZXIgRmFjdG9yeTwvYj4gZm9yIHRoZSBtb2RlbC4KKyAqIEl0IHByb3ZpZGVzIGFuIGFkYXB0ZXIgPGNvZGU+Y3JlYXRlWFhYPC9jb2RlPiBtZXRob2QgZm9yIGVhY2ggY2xhc3Mgb2YgdGhlIG1vZGVsLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5leHBlcmltZW50LkV4cGVyaW1lbnRQYWNrYWdlCisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBFeHBlcmltZW50QWRhcHRlckZhY3RvcnkgZXh0ZW5kcyBBZGFwdGVyRmFjdG9yeUltcGwgeworCS8qKgorCSAqIFRoZSBjYWNoZWQgbW9kZWwgcGFja2FnZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgc3RhdGljIEV4cGVyaW1lbnRQYWNrYWdlIG1vZGVsUGFja2FnZTsKKworCS8qKgorCSAqIENyZWF0ZXMgYW4gaW5zdGFuY2Ugb2YgdGhlIGFkYXB0ZXIgZmFjdG9yeS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRXhwZXJpbWVudEFkYXB0ZXJGYWN0b3J5KCkgeworCQlpZiAobW9kZWxQYWNrYWdlID09IG51bGwpIHsKKwkJCW1vZGVsUGFja2FnZSA9IEV4cGVyaW1lbnRQYWNrYWdlLmVJTlNUQU5DRTsKKwkJfQorCX0KKworCS8qKgorCSAqIFJldHVybnMgd2hldGhlciB0aGlzIGZhY3RvcnkgaXMgYXBwbGljYWJsZSBmb3IgdGhlIHR5cGUgb2YgdGhlIG9iamVjdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyA8Y29kZT50cnVlPC9jb2RlPiBpZiB0aGUgb2JqZWN0IGlzIGVpdGhlciB0aGUgbW9kZWwncyBwYWNrYWdlIG9yIGlzIGFuIGluc3RhbmNlIG9iamVjdCBvZiB0aGUgbW9kZWwuCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB3aGV0aGVyIHRoaXMgZmFjdG9yeSBpcyBhcHBsaWNhYmxlIGZvciB0aGUgdHlwZSBvZiB0aGUgb2JqZWN0LgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgYm9vbGVhbiBpc0ZhY3RvcnlGb3JUeXBlKE9iamVjdCBvYmplY3QpIHsKKwkJaWYgKG9iamVjdCA9PSBtb2RlbFBhY2thZ2UpIHsKKwkJCXJldHVybiB0cnVlOworCQl9CisJCWlmIChvYmplY3QgaW5zdGFuY2VvZiBFT2JqZWN0KSB7CisJCQlyZXR1cm4gKChFT2JqZWN0KW9iamVjdCkuZUNsYXNzKCkuZ2V0RVBhY2thZ2UoKSA9PSBtb2RlbFBhY2thZ2U7CisJCX0KKwkJcmV0dXJuIGZhbHNlOworCX0KKworCS8qKgorCSAqIFRoZSBzd2l0Y2ggdGhhdCBkZWxlZ2F0ZXMgdG8gdGhlIDxjb2RlPmNyZWF0ZVhYWDwvY29kZT4gbWV0aG9kcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgRXhwZXJpbWVudFN3aXRjaDxBZGFwdGVyPiBtb2RlbFN3aXRjaCA9CisJCW5ldyBFeHBlcmltZW50U3dpdGNoPEFkYXB0ZXI+KCkgeworCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgQWRhcHRlciBjYXNlRXhwZXJpbWVudChFeHBlcmltZW50IG9iamVjdCkgeworCQkJCXJldHVybiBjcmVhdGVFeHBlcmltZW50QWRhcHRlcigpOworCQkJfQorCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgPFQ+IEFkYXB0ZXIgY2FzZUNvbXBhcmFibGUoQ29tcGFyYWJsZTxUPiBvYmplY3QpIHsKKwkJCQlyZXR1cm4gY3JlYXRlQ29tcGFyYWJsZUFkYXB0ZXIoKTsKKwkJCX0KKwkJCUBPdmVycmlkZQorCQkJcHVibGljIEFkYXB0ZXIgY2FzZVNhbml0eUNoZWNrZXIoU2FuaXR5Q2hlY2tlciBvYmplY3QpIHsKKwkJCQlyZXR1cm4gY3JlYXRlU2FuaXR5Q2hlY2tlckFkYXB0ZXIoKTsKKwkJCX0KKwkJCUBPdmVycmlkZQorCQkJcHVibGljIEFkYXB0ZXIgY2FzZUlkZW50aWZpYWJsZShJZGVudGlmaWFibGUgb2JqZWN0KSB7CisJCQkJcmV0dXJuIGNyZWF0ZUlkZW50aWZpYWJsZUFkYXB0ZXIoKTsKKwkJCX0KKwkJCUBPdmVycmlkZQorCQkJcHVibGljIEFkYXB0ZXIgZGVmYXVsdENhc2UoRU9iamVjdCBvYmplY3QpIHsKKwkJCQlyZXR1cm4gY3JlYXRlRU9iamVjdEFkYXB0ZXIoKTsKKwkJCX0KKwkJfTsKKworCS8qKgorCSAqIENyZWF0ZXMgYW4gYWRhcHRlciBmb3IgdGhlIDxjb2RlPnRhcmdldDwvY29kZT4uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gdGFyZ2V0IHRoZSBvYmplY3QgdG8gYWRhcHQuCisJICogQHJldHVybiB0aGUgYWRhcHRlciBmb3IgdGhlIDxjb2RlPnRhcmdldDwvY29kZT4uCisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZUFkYXB0ZXIoTm90aWZpZXIgdGFyZ2V0KSB7CisJCXJldHVybiBtb2RlbFN3aXRjaC5kb1N3aXRjaCgoRU9iamVjdCl0YXJnZXQpOworCX0KKworCisJLyoqCisJICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZXhwZXJpbWVudC5FeHBlcmltZW50IDxlbT5FeHBlcmltZW50PC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsKKwkgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5leHBlcmltZW50LkV4cGVyaW1lbnQKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlRXhwZXJpbWVudEFkYXB0ZXIoKSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgamF2YS5sYW5nLkNvbXBhcmFibGUgPGVtPkNvbXBhcmFibGU8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOworCSAqIGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZSB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5LgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgorCSAqIEBzZWUgamF2YS5sYW5nLkNvbXBhcmFibGUKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlQ29tcGFyYWJsZUFkYXB0ZXIoKSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5TYW5pdHlDaGVja2VyIDxlbT5TYW5pdHkgQ2hlY2tlcjwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7CisJICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLlNhbml0eUNoZWNrZXIKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlU2FuaXR5Q2hlY2tlckFkYXB0ZXIoKSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5JZGVudGlmaWFibGUgPGVtPklkZW50aWZpYWJsZTwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7CisJICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLklkZW50aWZpYWJsZQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVJZGVudGlmaWFibGVBZGFwdGVyKCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIHRoZSBkZWZhdWx0IGNhc2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsLgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVFT2JqZWN0QWRhcHRlcigpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCit9IC8vRXhwZXJpbWVudEFkYXB0ZXJGYWN0b3J5CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2V4cGVyaW1lbnQvdXRpbC9FeHBlcmltZW50U3dpdGNoLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2V4cGVyaW1lbnQvdXRpbC9FeHBlcmltZW50U3dpdGNoLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzZhZTdmMwotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZXhwZXJpbWVudC91dGlsL0V4cGVyaW1lbnRTd2l0Y2guamF2YQpAQCAtMCwwICsxLDE4NSBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZXhwZXJpbWVudC51dGlsOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGphdmEudXRpbC5MaXN0OworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzczsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLklkZW50aWZpYWJsZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLlNhbml0eUNoZWNrZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmV4cGVyaW1lbnQuRXhwZXJpbWVudDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZXhwZXJpbWVudC5FeHBlcmltZW50UGFja2FnZTsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogVGhlIDxiPlN3aXRjaDwvYj4gZm9yIHRoZSBtb2RlbCdzIGluaGVyaXRhbmNlIGhpZXJhcmNoeS4KKyAqIEl0IHN1cHBvcnRzIHRoZSBjYWxsIHtAbGluayAjZG9Td2l0Y2goRU9iamVjdCkgZG9Td2l0Y2gob2JqZWN0KX0KKyAqIHRvIGludm9rZSB0aGUgPGNvZGU+Y2FzZVhYWDwvY29kZT4gbWV0aG9kIGZvciBlYWNoIGNsYXNzIG9mIHRoZSBtb2RlbCwKKyAqIHN0YXJ0aW5nIHdpdGggdGhlIGFjdHVhbCBjbGFzcyBvZiB0aGUgb2JqZWN0CisgKiBhbmQgcHJvY2VlZGluZyB1cCB0aGUgaW5oZXJpdGFuY2UgaGllcmFyY2h5CisgKiB1bnRpbCBhIG5vbi1udWxsIHJlc3VsdCBpcyByZXR1cm5lZCwKKyAqIHdoaWNoIGlzIHRoZSByZXN1bHQgb2YgdGhlIHN3aXRjaC4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZXhwZXJpbWVudC5FeHBlcmltZW50UGFja2FnZQorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgRXhwZXJpbWVudFN3aXRjaDxUMT4geworCS8qKgorCSAqIFRoZSBjYWNoZWQgbW9kZWwgcGFja2FnZQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBzdGF0aWMgRXhwZXJpbWVudFBhY2thZ2UgbW9kZWxQYWNrYWdlOworCisJLyoqCisJICogQ3JlYXRlcyBhbiBpbnN0YW5jZSBvZiB0aGUgc3dpdGNoLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFeHBlcmltZW50U3dpdGNoKCkgeworCQlpZiAobW9kZWxQYWNrYWdlID09IG51bGwpIHsKKwkJCW1vZGVsUGFja2FnZSA9IEV4cGVyaW1lbnRQYWNrYWdlLmVJTlNUQU5DRTsKKwkJfQorCX0KKworCS8qKgorCSAqIENhbGxzIDxjb2RlPmNhc2VYWFg8L2NvZGU+IGZvciBlYWNoIGNsYXNzIG9mIHRoZSBtb2RlbCB1bnRpbCBvbmUgcmV0dXJucyBhIG5vbiBudWxsIHJlc3VsdDsgaXQgeWllbGRzIHRoYXQgcmVzdWx0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgZmlyc3Qgbm9uLW51bGwgcmVzdWx0IHJldHVybmVkIGJ5IGEgPGNvZGU+Y2FzZVhYWDwvY29kZT4gY2FsbC4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFQxIGRvU3dpdGNoKEVPYmplY3QgdGhlRU9iamVjdCkgeworCQlyZXR1cm4gZG9Td2l0Y2godGhlRU9iamVjdC5lQ2xhc3MoKSwgdGhlRU9iamVjdCk7CisJfQorCisJLyoqCisJICogQ2FsbHMgPGNvZGU+Y2FzZVhYWDwvY29kZT4gZm9yIGVhY2ggY2xhc3Mgb2YgdGhlIG1vZGVsIHVudGlsIG9uZSByZXR1cm5zIGEgbm9uIG51bGwgcmVzdWx0OyBpdCB5aWVsZHMgdGhhdCByZXN1bHQuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBmaXJzdCBub24tbnVsbCByZXN1bHQgcmV0dXJuZWQgYnkgYSA8Y29kZT5jYXNlWFhYPC9jb2RlPiBjYWxsLgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgVDEgZG9Td2l0Y2goRUNsYXNzIHRoZUVDbGFzcywgRU9iamVjdCB0aGVFT2JqZWN0KSB7CisJCWlmICh0aGVFQ2xhc3MuZUNvbnRhaW5lcigpID09IG1vZGVsUGFja2FnZSkgeworCQkJcmV0dXJuIGRvU3dpdGNoKHRoZUVDbGFzcy5nZXRDbGFzc2lmaWVySUQoKSwgdGhlRU9iamVjdCk7CisJCX0KKwkJZWxzZSB7CisJCQlMaXN0PEVDbGFzcz4gZVN1cGVyVHlwZXMgPSB0aGVFQ2xhc3MuZ2V0RVN1cGVyVHlwZXMoKTsKKwkJCXJldHVybgorCQkJCWVTdXBlclR5cGVzLmlzRW1wdHkoKSA/CisJCQkJCWRlZmF1bHRDYXNlKHRoZUVPYmplY3QpIDoKKwkJCQkJZG9Td2l0Y2goZVN1cGVyVHlwZXMuZ2V0KDApLCB0aGVFT2JqZWN0KTsKKwkJfQorCX0KKworCS8qKgorCSAqIENhbGxzIDxjb2RlPmNhc2VYWFg8L2NvZGU+IGZvciBlYWNoIGNsYXNzIG9mIHRoZSBtb2RlbCB1bnRpbCBvbmUgcmV0dXJucyBhIG5vbiBudWxsIHJlc3VsdDsgaXQgeWllbGRzIHRoYXQgcmVzdWx0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgZmlyc3Qgbm9uLW51bGwgcmVzdWx0IHJldHVybmVkIGJ5IGEgPGNvZGU+Y2FzZVhYWDwvY29kZT4gY2FsbC4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIFQxIGRvU3dpdGNoKGludCBjbGFzc2lmaWVySUQsIEVPYmplY3QgdGhlRU9iamVjdCkgeworCQlzd2l0Y2ggKGNsYXNzaWZpZXJJRCkgeworCQkJY2FzZSBFeHBlcmltZW50UGFja2FnZS5FWFBFUklNRU5UOiB7CisJCQkJRXhwZXJpbWVudCBleHBlcmltZW50ID0gKEV4cGVyaW1lbnQpdGhlRU9iamVjdDsKKwkJCQlUMSByZXN1bHQgPSBjYXNlRXhwZXJpbWVudChleHBlcmltZW50KTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VJZGVudGlmaWFibGUoZXhwZXJpbWVudCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlQ29tcGFyYWJsZShleHBlcmltZW50KTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VTYW5pdHlDaGVja2VyKGV4cGVyaW1lbnQpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gZGVmYXVsdENhc2UodGhlRU9iamVjdCk7CisJCQkJcmV0dXJuIHJlc3VsdDsKKwkJCX0KKwkJCWRlZmF1bHQ6IHJldHVybiBkZWZhdWx0Q2FzZSh0aGVFT2JqZWN0KTsKKwkJfQorCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkV4cGVyaW1lbnQ8L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsKKwkgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KKwkgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5FeHBlcmltZW50PC9lbT4nLgorCSAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVDEgY2FzZUV4cGVyaW1lbnQoRXhwZXJpbWVudCBvYmplY3QpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+Q29tcGFyYWJsZTwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOworCSAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgorCSAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkNvbXBhcmFibGU8L2VtPicuCisJICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyA8VD4gVDEgY2FzZUNvbXBhcmFibGUoQ29tcGFyYWJsZTxUPiBvYmplY3QpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+U2FuaXR5IENoZWNrZXI8L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsKKwkgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KKwkgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5TYW5pdHkgQ2hlY2tlcjwvZW0+Jy4KKwkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFQxIGNhc2VTYW5pdHlDaGVja2VyKFNhbml0eUNoZWNrZXIgb2JqZWN0KSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPklkZW50aWZpYWJsZTwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOworCSAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgorCSAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPklkZW50aWZpYWJsZTwvZW0+Jy4KKwkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFQxIGNhc2VJZGVudGlmaWFibGUoSWRlbnRpZmlhYmxlIG9iamVjdCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5FT2JqZWN0PC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7CisJICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2gsIGJ1dCB0aGlzIGlzIHRoZSBsYXN0IGNhc2UgYW55d2F5LgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgorCSAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkVPYmplY3Q8L2VtPicuCisJICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBUMSBkZWZhdWx0Q2FzZShFT2JqZWN0IG9iamVjdCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKK30gLy9FeHBlcmltZW50U3dpdGNoCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoL0Rpc3BsYXlhYmxlLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoL0Rpc3BsYXlhYmxlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWNjMTlmNAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGgvRGlzcGxheWFibGUuamF2YQpAQCAtMCwwICsxLDE2IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaDsNCisNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3Q7DQorDQorLyoqDQorICogc2VlIE1vZGlmaWFibGUuamF2YSBpbiBvcmcuZWNsaXBzZS5jb3JlLm1vZGlmaWVyDQorICogDQorICogDQorICogQG1vZGVsIGludGVyZmFjZT0idHJ1ZSINCisgKi8NCitwdWJsaWMgaW50ZXJmYWNlIERpc3BsYXlhYmxlIGV4dGVuZHMgRU9iamVjdCB7DQorCS8vIE5vdGhpbmcNCit9IC8vIE1vZGlmaWFibGUNCisNCisNCisNCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoL0R5bmFtaWNFZGdlTGFiZWwuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGgvRHluYW1pY0VkZ2VMYWJlbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdhZTk4NzUKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoL0R5bmFtaWNFZGdlTGFiZWwuamF2YQpAQCAtMCwwICsxLDIzIEBACisvLyBEeW5hbWljRWRnZUxhYmVsLmphdmEKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqCisgKiBBIDxjb2RlPkR5bmFtaWNFZGdlTGFiZWw8L2NvZGU+IGlzIGEge0BsaW5rIER5bmFtaWNMYWJlbH0gdGhhdCBzcGVjaWZpY2FsbHkKKyAqIGxhYmVscyBhbiB7QGxpbmsgRWRnZX0uCisgKiAKKyAqIEBtb2RlbCBhYnN0cmFjdD0idHJ1ZSIKKyAqLworcHVibGljIGludGVyZmFjZSBEeW5hbWljRWRnZUxhYmVsIGV4dGVuZHMgRHluYW1pY0xhYmVsLCBFZGdlTGFiZWwgeworCS8vIE5vdGhpbmcKK30gLy8gRHluYW1pY0VkZ2VMYWJlbApkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC9EeW5hbWljTGFiZWwuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGgvRHluYW1pY0xhYmVsLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjc5YjdjNgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGgvRHluYW1pY0xhYmVsLmphdmEKQEAgLTAsMCArMSwxMTUgQEAKKy8vIER5bmFtaWNMYWJlbC5qYXZhCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaDsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuVVJJOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5TVEVNVVJJOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5EZWNvcmF0b3I7CisKKy8qKgorICogQSA8Y29kZT5EeW5hbWljTGFiZWw8L2NvZGU+IGlzIGEge0BsaW5rIExhYmVsfSB0aGF0IGhhcyB0d28KKyAqIHtAbGluayBMYWJlbFZhbHVlfXMgaW5zdGVhZCBvZiBvbmUuIFRoZSBzZWNvbmQgdmFsdWUgaXMgY2FsbGVkIHRoZSAibmV4dCIKKyAqIHZhbHVlLiBJdCByZXByZXNlbnRzIHRoZSB2YWx1ZXMgb2YgdGhlIGF0dHJpYnV0ZXMgb2YgdGhlIHtAbGluayBMYWJlbH0gaW4gdGhlCisgKiBuZXh0IHN0YXRlIG9mIHRoZSB7QGxpbmsgR3JhcGh9LiBUaGUgb3RoZXIgdmFsdWUgaXMgY2FsbGVkIHRoZSAiY3VycmVudCIKKyAqIHZhbHVlIGFuZCBpdCByZXByZXNlbnRzIHRoZSB2YWx1ZSBvZiB0aGUgYXR0cmlidXRlcyBpbiB0aGUgY3VycmVudCBzdGF0ZSBvZgorICogdGhlIHtAbGluayBHcmFwaH0uCisgKiA8cD4KKyAqIEEgPGNvZGU+RHluYW1pY0xhYmVsPC9jb2RlPiBjYW4gZXhjaGFuZ2UgdGhlICJjdXJyZW50IiBhbmQgIm5leHQnIHZhbHVlcworICogKHNlZSB7QGxpbmsgI3N3aXRjaFRvTmV4dFZhbHVlKCl9LiBBZnRlciBzdWNoIGEgc3dpdGNoLCB0aGUgbmV4dCB2YWx1ZSBpcworICogbWFya2VkIGFzIGJlaW5nICJpbnZhbGlkIiAoc2VlIHtAbGluayAjaXNOZXh0VmFsdWVWYWxpZCgpfSkuCisgKiA8L3A+CisgKiAKKyAqIEBtb2RlbCBhYnN0cmFjdD0idHJ1ZSIKKyAqLworcHVibGljIGludGVyZmFjZSBEeW5hbWljTGFiZWwgZXh0ZW5kcyBMYWJlbCB7CisKKwkvKioKKwkgKiBUaGlzIGlzIHRoZSB0b3AtbGV2ZWwgc2VnbWVudCBmb3IgYWxsIHR5cGUgVVJJJ3MgZm9yIGR5bmFtaWMgbGFiZWxzLgorCSAqLworCVN0cmluZyBVUklfVFlQRV9EWU5BTUlDX0xBQkVMX1NFR01FTlQgPSBVUklfVFlQRV9MQUJFTF9TRUdNRU5UICsgIi9keW5hbWljIjsKKworCS8qKgorCSAqIFRoaXMgaXMgdGhlIHR5cGUgVVJJIGZvciBhIER5bmFtaWMgTGFiZWwKKwkgKi8KKwlVUkkgVVJJX1RZUEVfRFlOQU1JQ19MQUJFTCA9IFNURU1VUkkKKwkJCS5jcmVhdGVUeXBlVVJJKFVSSV9UWVBFX0RZTkFNSUNfTEFCRUxfU0VHTUVOVCk7CisKKwkvKioKKwkgKiAKKwkgKiBAcmV0dXJuIHRoZSB7QGxpbmsgRGVjb3JhdG9yfSB0aGF0IHVwZGF0ZXMgdGhpcyA8Y29kZT5EeW5hbWljTGFiZWw8L2NvZGU+LgorCSAqIEBtb2RlbCBvcHBvc2l0ZT0ibGFiZWxzVG9VcGRhdGUiCisJICovCisJRGVjb3JhdG9yIGdldERlY29yYXRvcigpOworCQorCS8qKgorCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5EeW5hbWljTGFiZWwjZ2V0RGVjb3JhdG9yIDxlbT5EZWNvcmF0b3I8L2VtPn0nIHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPkRlY29yYXRvcjwvZW0+JyByZWZlcmVuY2UuCisJICogQHNlZSAjZ2V0RGVjb3JhdG9yKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJdm9pZCBzZXREZWNvcmF0b3IoRGVjb3JhdG9yIHZhbHVlKTsKKworCS8qKgorCSAqIFJlc2V0IHRoZSBkeW5hbWljIGxhYmVsLiBUaGlzIHNldHMgdGhlIHtAbGluayBMYWJlbFZhbHVlfXMgYmFjayB0byB0aGVpcgorCSAqIGluaXRpYWwgc3RhdGVzLgorCSAqIAorCSAqIEBtb2RlbCB2b2xhdGlsZT0idHJ1ZSIgdHJhbnNpZW50PSJ0cnVlIiBjaGFuZ2VhYmxlPSJmYWxzZSIKKwkgKi8KKwl2b2lkIHJlc2V0KCk7CisKKwkvKioKKwkgKiBJZiB0aGUgbmV4dCB2YWx1ZSBoYXMgYmVlbiBzZXQgc2luY2UgdGhlIGxhc3QgY2FsbCB0bworCSAqIHtAbGluayAjc2V0TmV4dFZhbHVlKExhYmVsVmFsdWUpfSBhbmQgdGhlIDxjb2RlPkR5bmFtaWNMYWJlbDwvY29kZT4gaGFzCisJICogbm90IGJlZW4gInJlc2V0IiB0aGVuIHRoZSBuZXh0IHZhbHVlIGlzIHZhbGlkLgorCSAqIAorCSAqIEByZXR1cm4gdHJ1ZSBpZiB0aGUgbmV4dCB2YWx1ZSBpcyB2YWxpZAorCSAqIEBtb2RlbCBkZWZhdWx0PSJmYWxzZSIKKwkgKi8KKwlib29sZWFuIGlzTmV4dFZhbHVlVmFsaWQoKTsKKworCS8qKgorCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5EeW5hbWljTGFiZWwjaXNOZXh0VmFsdWVWYWxpZCA8ZW0+TmV4dCBWYWx1ZSBWYWxpZDwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPk5leHQgVmFsdWUgVmFsaWQ8L2VtPicgYXR0cmlidXRlLgorCSAqIEBzZWUgI2lzTmV4dFZhbHVlVmFsaWQoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwl2b2lkIHNldE5leHRWYWx1ZVZhbGlkKGJvb2xlYW4gdmFsdWUpOworCisJLyoqCisJICogQHJldHVybiB0aGUgIm5leHQiIHtAbGluayBMYWJlbFZhbHVlfS4KKwkgKiAKKwkgKiBAbW9kZWwgY29udGFpbm1lbnQ9InRydWUiIHJlcXVpcmVkPSJ0cnVlIgorCSAqLworCUxhYmVsVmFsdWUgZ2V0TmV4dFZhbHVlKCk7CisKKwkvKioKKwkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguRHluYW1pY0xhYmVsI2dldE5leHRWYWx1ZSA8ZW0+TmV4dCBWYWx1ZTwvZW0+fScgY29udGFpbm1lbnQgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPk5leHQgVmFsdWU8L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlLgorCSAqIEBzZWUgI2dldE5leHRWYWx1ZSgpCisJICogQGdlbmVyYXRlZAorCSAqLworCXZvaWQgc2V0TmV4dFZhbHVlKExhYmVsVmFsdWUgdmFsdWUpOworCisJLyoqCisJICogRXhjaGFuZ2UgdGhlICJuZXh0IiBhbmQgImN1cnJlbnQiIHtAbGluayBMYWJlbFZhbHVlfXMuIFRoaXMgaXMgY2FsbGVkIHdoZW4gdGhlCisJICoge0BsaW5rIEdyYXBofSBpcyByZWFkeSB0byBtb3ZlIHRvIHRoZSBuZXh0IHN0YXRlIChzZWUKKwkgKiB7QGxpbmsgR3JhcGgjc3dpdGNoVG9OZXh0VmFsdWUoKSkuCisJICogCisJICogQG1vZGVsIHZvbGF0aWxlPSJ0cnVlIiB0cmFuc2llbnQ9InRydWUiIGNoYW5nZWFibGU9ImZhbHNlIgorCSAqLworCXZvaWQgc3dpdGNoVG9OZXh0VmFsdWUoKTsKK30gLy8gRHluYW1pY0xhYmVsCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoL0R5bmFtaWNOb2RlTGFiZWwuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGgvRHluYW1pY05vZGVMYWJlbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNlMTk5MDcKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoL0R5bmFtaWNOb2RlTGFiZWwuamF2YQpAQCAtMCwwICsxLDIzIEBACisvLyBEeW5hbWljTm9kZUxhYmVsLmphdmEKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqCisgKiBBIDxjb2RlPkR5bmFtaWNOb2RlTGFiZWw8L2NvZGU+IGlzIGEge0BsaW5rIER5bmFtaWNMYWJlbH0gdGhhdCBzcGVjaWZpY2FsbHkKKyAqIGxhYmVscyBhIHtAbGluayBOb2RlfS4KKyAqIAorICogQG1vZGVsIGFic3RyYWN0PSJ0cnVlIgorICovCitwdWJsaWMgaW50ZXJmYWNlIER5bmFtaWNOb2RlTGFiZWwgZXh0ZW5kcyBEeW5hbWljTGFiZWwsIE5vZGVMYWJlbCB7CisJLy8gTm90aGluZworfSAvLyBEeW5hbWljTm9kZUxhYmVsCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoL0VkZ2UuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGgvRWRnZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMzNjBmNmQKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoL0VkZ2UuamF2YQpAQCAtMCwwICsxLDE3MSBAQAorLy8gRWRnZS5qYXZhCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaDsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuVVJJOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uSWRlbnRpZmlhYmxlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5Nb2RpZmlhYmxlOworCisvKioKKyAqIEFuIDxjb2RlPkVkZ2U8L2NvZGU+IHJlcHJlc2VudHMgYSByZWxhdGlvbnNoaXAgYmV0d2VlbiB0d28ge0BsaW5rIE5vZGV9cy4KKyAqIFRoZSBhdHRyaWJ1dGVzIG9mIHRoYXQgcmVsYXRpb25zaGlwIGFyZSBkZWZpbmVkIGJ5IHRoZSA8Y29kZT5FZGdlPC9jb2RlPidzCisgKiB7QGxpbmsgTGFiZWx9LgorICogPHA+CisgKiBBbiA8Y29kZT5FZGdlPC9jb2RlPiBjYW4gYmUgPGVtPmRpcmVjdGVkPC9lbT4gb3IgPGVtPnVuZGlyZWN0ZWQ8L2VtPi4KKyAqIElmIHRoZSA8Y29kZT5FZGdlPC9jb2RlPiBpcyBkaXJlY3RlZCB0aGVuIHRoZSByZWxhdGlvbnNoaXAgaXMgIm9uZS13YXkiCisgKiBmcm9tIHtAbGluayBOb2RlfSAiPGNvZGU+QTwvY29kZT4iIHRvIHtAbGluayBOb2RlfSAiPGNvZGU+QjwvY29kZT4iLgorICogQW4gZXhhbXBsZSBvZiBzdWNoIGEgcmVsYXRpb25zaGlwIGlzICJwaHlzaWNhbGx5IGNvbnRhaW5zIiwgd2hlcmUgdGhlIGVudGl0eQorICogcmVwcmVzZW50ZWQgYnkge0BsaW5rIE5vZGV9ICI8Y29kZT5CPC9jb2RlPiIgaXMgcGh5c2ljYWxseSBjb250YWluZWQgaW4KKyAqIHRoZSBlbnRpdHkgcmVwcmVzZW50ZWQgYnkge0BsaW5rIE5vZGV9ICI8Y29kZT5BPC9jb2RlPiIgKGUuZy4sIFNhbnRhCisgKiBDbGFyYSBjb3VudHkgaXMgcGh5c2ljYWxseSBjb250YWluZWQgaW4gdGhlIHN0YXRlIG9mIENhbGlmb3JuaWEpLiBJZiB0aGUKKyAqIDxjb2RlPkVkZ2U8L2NvZGU+IGlzIHVuZGlyZWN0ZWQgdGhlbiB0aGUgcmVsYXRpb25zaGlwIGlzIDxlbT5zeW1tZXRyaWM8L2VtPiwKKyAqIG1lYW5pbmcgdGhhdCBpdCBob2xkcyBib3RoIHdheXMuIEFuIGV4YW1wbGUgb2Ygc3VjaCBhIHJlbGF0aW9uc2hpcCBpcyAic2hhcmVzCisgKiBjb21tb24gYm9yZGVyIiwgd2hlcmUgdGhlIGVudGl0eSByZXByZXNlbnRlZCBieSB7QGxpbmsgTm9kZX0gIjxjb2RlPkE8L2NvZGU+IgorICogc2hhcmVzIGEgY29tbW9uIGJvcmRlciB3aXRoIHRoZSBlbnRpdHkgcmVwcmVzZW50ZWQgYnkge0BsaW5rIE5vZGV9ICI8Y29kZT5CPC9jb2RlPiIKKyAqIChlLmcuLCBTYW50YSBDbGFyYSBjb3VudHkgc2hhcmVzIGEgY29tbW9uIGJvcmRlciB3aXRoIFNhbnRhIENydXogY291bnR5KS4KKyAqIAorICogPC9wPgorICogCisgKiBAc2VlIEdyYXBoCisgKiBAc2VlIE5vZGUKKyAqIAorICogQG1vZGVsCisgKi8KK3B1YmxpYyBpbnRlcmZhY2UgRWRnZSBleHRlbmRzIElkZW50aWZpYWJsZSwgTW9kaWZpYWJsZSB7CisKKwkvKioKKwkgKiBUaGlzIGlzIHRoZSBzZWdtZW50IG9mIHRoZSB0eXBlIFVSSSB0aGF0IHByZWZpeGVzIGFsbCBvdGhlciBzZWdtZW50cyBpbiBhCisJICogZWRnZSBVUkkuCisJICovCisJU3RyaW5nIFVSSV9UWVBFX0VER0VfU0VHTUVOVCA9ICJlZGdlIjsKKworCS8qKgorCSAqIEByZXR1cm4gdGhlICJBIiB7QGxpbmsgTm9kZX0gb2YgdGhlIGVkZ2UuIERpcmVjdGVkIGVkZ2VzIGdvIGZyb20KKwkgKiAgICAgICAgIHtAbGluayBOb2RlfSBBIHRvIHtAbGluayBOb2RlfSBCLiBJbiBhIGdyYXBoIGZyYWdtZW50IHRoaXMgdmFsdWUKKwkgKiAgICAgICAgIG1heSBub3QgeWV0IGJlIHNldC4KKwkgKiBAbW9kZWwgY29udGFpbm1lbnQ9ImZhbHNlIgorCSAqLworCU5vZGUgZ2V0QSgpOworCisJLyoqCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkVkZ2UjZ2V0QSA8ZW0+QTwvZW0+fScgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPkE8L2VtPicgcmVmZXJlbmNlLgorCSAqIEBzZWUgI2dldEEoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwl2b2lkIHNldEEoTm9kZSB2YWx1ZSk7CisKKwkvKioKKwkgKiBAcmV0dXJuIHRoZSBVUkkgb2Yge0BsaW5rIE5vZGV9IEEuCisJICogQG1vZGVsCisJICovCisJVVJJIGdldE5vZGVBVVJJKCk7CisKKwkvKioKKwkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguRWRnZSNnZXROb2RlQVVSSSA8ZW0+Tm9kZSBBVVJJPC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+Tm9kZSBBVVJJPC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiBAc2VlICNnZXROb2RlQVVSSSgpCisJICogQGdlbmVyYXRlZAorCSAqLworCXZvaWQgc2V0Tm9kZUFVUkkoVVJJIHZhbHVlKTsKKworCS8qKgorCSAqIEByZXR1cm4gdGhlICJCIiB7QGxpbmsgTm9kZX0gb2YgdGhlIGVkZ2UuIERpcmVjdGVkIGVkZ2VzIGdvIGZyb20KKwkgKiAgICAgICAgIHtAbGluayBOb2RlfSBBIHRvIHtAbGluayBOb2RlfSBCLiBJbiBhIGdyYXBoIGZyYWdtZW50IHRoaXMgdmFsdWUKKwkgKiAgICAgICAgIG1heSBub3QgeWV0IGJlIHNldC4KKwkgKiBAbW9kZWwgY29udGFpbm1lbnQ9ImZhbHNlIgorCSAqLworCU5vZGUgZ2V0QigpOworCisJLyoqCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkVkZ2UjZ2V0QiA8ZW0+QjwvZW0+fScgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPkI8L2VtPicgcmVmZXJlbmNlLgorCSAqIEBzZWUgI2dldEIoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwl2b2lkIHNldEIoTm9kZSB2YWx1ZSk7CisKKwkvKioKKwkgKiBAcmV0dXJuIHRoZSBVUkkgb2Yge0BsaW5rIE5vZGV9IEIuCisJICogQG1vZGVsCisJICovCisJVVJJIGdldE5vZGVCVVJJKCk7CisKKwkvKioKKwkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguRWRnZSNnZXROb2RlQlVSSSA8ZW0+Tm9kZSBCVVJJPC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+Tm9kZSBCVVJJPC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiBAc2VlICNnZXROb2RlQlVSSSgpCisJICogQGdlbmVyYXRlZAorCSAqLworCXZvaWQgc2V0Tm9kZUJVUkkoVVJJIHZhbHVlKTsKKworCS8qKgorCSAqIEBwYXJhbSBub2RlCisJICogICAgICAgICAgICBvbmUgb2YgdGhlIHR3byB7QGxpbmsgTm9kZX1zIG9mIHRoZSA8Y29kZT5FZGdlPC9jb2RlPgorCSAqIEByZXR1cm4ge0BsaW5rIE5vZGV9IEEgaWYge0BsaW5rIE5vZGV9IEIgaXMgcGFzc2VkIGluLCBvdGhlcndpc2UgcmV0dXJuCisJICogICAgICAgICB7QGxpbmsgTm9kZX0gQiBpZiB7QGxpbmsgTm9kZX0gQSBpcyBwYXNzZWQgaW4uCisJICogQGV4Y2VwdGlvbiBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24KKwkgKiAgICAgICAgICAgICAgICBpZiB0aGUge0BsaW5rIE5vZGV9IHBhc3NlZCBpbiBpcyBub3QgZWl0aGVyIHtAbGluayBOb2RlfSBBCisJICogICAgICAgICAgICAgICAgb3Ige0BsaW5rIE5vZGV9IEIgb2YgdGhpcyA8Y29kZT5FZGdlPC9jb2RlPi4KKwkgKiBAbW9kZWwgdm9sYXRpbGU9InRydWUiIHRyYW5zaWVudD0idHJ1ZSIgY2hhbmdlYWJsZT0iZmFsc2UiCisJICovCisJTm9kZSBnZXRPdGhlck5vZGUoZmluYWwgTm9kZSBub2RlKSB0aHJvd3MgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uOworCisJLyoqCisJICogQHJldHVybiB0aGUge0BsaW5rIEVkZ2VMYWJlbH0gb2YgdGhlIDxjb2RlPkVkZ2U8L2NvZGU+LCBpZiBpdCBleGlzdHMuCisJICogQG1vZGVsIGNvbnRhaW5tZW50PSJ0cnVlIiBvcHBvc2l0ZT0iZWRnZSIKKwkgKi8KKwlFZGdlTGFiZWwgZ2V0TGFiZWwoKTsKKworCS8qKgorCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5FZGdlI2dldExhYmVsIDxlbT5MYWJlbDwvZW0+fScgY29udGFpbm1lbnQgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+TGFiZWw8L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlLgorCSAqIEBzZWUgI2dldExhYmVsKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJdm9pZCBzZXRMYWJlbChFZGdlTGFiZWwgdmFsdWUpOworCisJLyoqCisJICogQHJldHVybiA8Y29kZT50cnVlPC9jb2RlPiBpZiB0aGUgPGNvZGU+RWRnZTwvY29kZT4gaXMgYSBkaXJlY3RlZAorCSAqICAgICAgICAgPGNvZGU+RWRnZTwvY29kZT4gKGRpcmVjdGVkIDxjb2RlPkVkZ2U8L2NvZGU+cyBhcmUgYWx3YXlzCisJICogICAgICAgICBmcm9tIHtAbGluayBOb2RlfSBBIHRvIHtAbGluayBOb2RlfSBCKS4KKwkgKiBAbW9kZWwgZGVmYXVsdD0iZmFsc2UiCisJICovCisJYm9vbGVhbiBpc0RpcmVjdGVkKCk7CisKKwkvKioKKwkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguRWRnZSNpc0RpcmVjdGVkIDxlbT5EaXJlY3RlZDwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPkRpcmVjdGVkPC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiBAc2VlICNpc0RpcmVjdGVkKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJdm9pZCBzZXREaXJlY3RlZChib29sZWFuIHZhbHVlKTsKKworCS8qKgorCSAqIEBwYXJhbSBub2RlCisJICogICAgICAgICAgICB0aGUge0BsaW5rIE5vZGV9IHVuZGVyIHRlc3QKKwkgKiBAcmV0dXJuIDxjb2RlPnRydWU8L2NvZGU+IGlmIHRoZSA8Y29kZT5FZGdlPC9jb2RlPiBpcyBhIGRpcmVjdGVkCisJICogICAgICAgICA8Y29kZT5FZGdlPC9jb2RlPiBhbmQgdGhlIHtAbGluayBOb2RlfSB1bmRlciB0ZXN0IGlzCisJICogICAgICAgICB7QGxpbmsgTm9kZX0gQi4KKwkgKiBAbW9kZWwgdm9sYXRpbGU9InRydWUiIHRyYW5zaWVudD0idHJ1ZSIgY2hhbmdlYWJsZT0iZmFsc2UiCisJICovCisJYm9vbGVhbiBpc0RpcmVjdGVkQXQoZmluYWwgTm9kZSBub2RlKTsKKworfSAvLyBFZGdlCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoL0VkZ2VMYWJlbC5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC9FZGdlTGFiZWwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNGI0YjVlCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC9FZGdlTGFiZWwuamF2YQpAQCAtMCwwICsxLDQwIEBACisvLyBFZGdlTGFiZWwuamF2YQorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGg7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioKKyAqIEFuIDxjb2RlPkVkZ2VMYWJlbDwvY29kZT4gaXMgYSB7QGxpbmsgTGFiZWx9IHRoYXQgcHJvdmlkZXMgYXR0cmlidXRlcyB0byBhbgorICoge0BsaW5rIEVkZ2V9LgorICogCisgKiBAbW9kZWwgYWJzdHJhY3Q9InRydWUiCisgKi8KK3B1YmxpYyBpbnRlcmZhY2UgRWRnZUxhYmVsIGV4dGVuZHMgTGFiZWwgeworCisJLyoqCisJICogQHJldHVybiB0aGUge0BsaW5rIEVkZ2V9IHRoYXQgdGhpcyA8Y29kZT5FZGdlTGFiZWw8L2NvZGU+IGxhYmVscy4KKwkgKiAKKwkgKiBAbW9kZWwgY29udGFpbm1lbnQ9ImZhbHNlIgorCSAqLworCUVkZ2UgZ2V0RWRnZSgpOworCisJLyoqCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkVkZ2VMYWJlbCNnZXRFZGdlIDxlbT5FZGdlPC9lbT59JyBjb250YWluZXIgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+RWRnZTwvZW0+JyBjb250YWluZXIgcmVmZXJlbmNlLgorCSAqIEBzZWUgI2dldEVkZ2UoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwl2b2lkIHNldEVkZ2UoRWRnZSB2YWx1ZSk7CisKK30gLy8gRWRnZUxhYmVsCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoL0V4Y2hhbmdlLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoL0V4Y2hhbmdlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODM4NGE5YwotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGgvRXhjaGFuZ2UuamF2YQpAQCAtMCwwICsxLDExNSBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGg7DQorDQorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogDQorICogQ29weXJpZ2h0IChjKSAyMDExIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiANCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIA0KKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCANCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdCANCisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbCANCisgKiANCisgKiBDb250cmlidXRvcnM6IA0KKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gDQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0Ow0KKw0KKy8qKg0KKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorICogQSByZXByZXNlbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+RXhjaGFuZ2U8L2I+PC9lbT4nLg0KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKyAqDQorICogPHA+DQorICogVGhlIGZvbGxvd2luZyBmZWF0dXJlcyBhcmUgc3VwcG9ydGVkOg0KKyAqIDx1bD4NCisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkV4Y2hhbmdlI2dldE90aGVyTGFiZWwgPGVtPk90aGVyIExhYmVsPC9lbT59PC9saT4NCisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkV4Y2hhbmdlI2dldENvdW50IDxlbT5Db3VudDwvZW0+fTwvbGk+DQorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5FeGNoYW5nZSNnZXRUeXBlIDxlbT5UeXBlPC9lbT59PC9saT4NCisgKiA8L3VsPg0KKyAqIDwvcD4NCisgKg0KKyAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkdyYXBoUGFja2FnZSNnZXRFeGNoYW5nZSgpDQorICogQG1vZGVsIHN1cGVyVHlwZXM9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uQ29tcGFyYWJsZTxvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguRXhjaGFuZ2U+Ig0KKyAqIEBnZW5lcmF0ZWQNCisgKi8NCitwdWJsaWMgaW50ZXJmYWNlIEV4Y2hhbmdlIGV4dGVuZHMgRU9iamVjdCwgQ29tcGFyYWJsZTxFeGNoYW5nZT4gew0KKwkvKioNCisJICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+T3RoZXIgTGFiZWw8L2I+PC9lbT4nIHJlZmVyZW5jZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPHA+DQorCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPk90aGVyIExhYmVsPC9lbT4nIHJlZmVyZW5jZSBpc24ndCBjbGVhciwNCisJICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLg0KKwkgKiA8L3A+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5PdGhlciBMYWJlbDwvZW0+JyByZWZlcmVuY2UuDQorCSAqIEBzZWUgI3NldE90aGVyTGFiZWwoTGFiZWwpDQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkdyYXBoUGFja2FnZSNnZXRFeGNoYW5nZV9PdGhlckxhYmVsKCkNCisJICogQG1vZGVsDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCUxhYmVsIGdldE90aGVyTGFiZWwoKTsNCisNCisJLyoqDQorCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5FeGNoYW5nZSNnZXRPdGhlckxhYmVsIDxlbT5PdGhlciBMYWJlbDwvZW0+fScgcmVmZXJlbmNlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+T3RoZXIgTGFiZWw8L2VtPicgcmVmZXJlbmNlLg0KKwkgKiBAc2VlICNnZXRPdGhlckxhYmVsKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJdm9pZCBzZXRPdGhlckxhYmVsKExhYmVsIHZhbHVlKTsNCisNCisJLyoqDQorCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPkNvdW50PC9iPjwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDxwPg0KKwkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5Db3VudDwvZW0+JyBhdHRyaWJ1dGUgaXNuJ3QgY2xlYXIsDQorCSAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4NCisJICogPC9wPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+Q291bnQ8L2VtPicgYXR0cmlidXRlLg0KKwkgKiBAc2VlICNzZXRDb3VudChkb3VibGUpDQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkdyYXBoUGFja2FnZSNnZXRFeGNoYW5nZV9Db3VudCgpDQorCSAqIEBtb2RlbA0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlkb3VibGUgZ2V0Q291bnQoKTsNCisNCisJLyoqDQorCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5FeGNoYW5nZSNnZXRDb3VudCA8ZW0+Q291bnQ8L2VtPn0nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPkNvdW50PC9lbT4nIGF0dHJpYnV0ZS4NCisJICogQHNlZSAjZ2V0Q291bnQoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwl2b2lkIHNldENvdW50KGRvdWJsZSB2YWx1ZSk7DQorDQorCS8qKg0KKwkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5UeXBlPC9iPjwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIFRoZSBsaXRlcmFscyBhcmUgZnJvbSB0aGUgZW51bWVyYXRpb24ge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5FeGNoYW5nZVR5cGV9Lg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8cD4NCisJICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+VHlwZTwvZW0+JyBhdHRyaWJ1dGUgaXNuJ3QgY2xlYXIsDQorCSAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4NCisJICogPC9wPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+VHlwZTwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkV4Y2hhbmdlVHlwZQ0KKwkgKiBAc2VlICNzZXRUeXBlKEV4Y2hhbmdlVHlwZSkNCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguR3JhcGhQYWNrYWdlI2dldEV4Y2hhbmdlX1R5cGUoKQ0KKwkgKiBAbW9kZWwNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJRXhjaGFuZ2VUeXBlIGdldFR5cGUoKTsNCisNCisJLyoqDQorCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5FeGNoYW5nZSNnZXRUeXBlIDxlbT5UeXBlPC9lbT59JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5UeXBlPC9lbT4nIGF0dHJpYnV0ZS4NCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguRXhjaGFuZ2VUeXBlDQorCSAqIEBzZWUgI2dldFR5cGUoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwl2b2lkIHNldFR5cGUoRXhjaGFuZ2VUeXBlIHZhbHVlKTsNCisNCit9IC8vIEV4Y2hhbmdlDQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC9FeGNoYW5nZVR5cGUuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGgvRXhjaGFuZ2VUeXBlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTBjYmRhNwotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGgvRXhjaGFuZ2VUeXBlLmphdmEKQEAgLTAsMCArMSwyNDQgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoOw0KKw0KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIA0KKyAqIENvcHlyaWdodCAoYykgMjAxMSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4gDQorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyANCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgDQorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQgDQorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwgDQorICogDQorICogQ29udHJpYnV0b3JzOiANCisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIA0KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KKw0KK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlzOw0KK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbnM7DQoraW1wb3J0IGphdmEudXRpbC5MaXN0Ow0KKw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuRW51bWVyYXRvcjsNCisNCisvKioNCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKyAqIEEgcmVwcmVzZW50YXRpb24gb2YgdGhlIGxpdGVyYWxzIG9mIHRoZSBlbnVtZXJhdGlvbiAnPGVtPjxiPkV4Y2hhbmdlIFR5cGU8L2I+PC9lbT4nLA0KKyAqIGFuZCB1dGlsaXR5IG1ldGhvZHMgZm9yIHdvcmtpbmcgd2l0aCB0aGVtLg0KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKyAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkdyYXBoUGFja2FnZSNnZXRFeGNoYW5nZVR5cGUoKQ0KKyAqIEBtb2RlbA0KKyAqIEBnZW5lcmF0ZWQNCisgKi8NCitwdWJsaWMgZW51bSBFeGNoYW5nZVR5cGUgaW1wbGVtZW50cyBFbnVtZXJhdG9yIHsNCisJLyoqDQorCSAqIFRoZSAnPGVtPjxiPkJJUlRIUyBBTkQgREVBVEhTPC9iPjwvZW0+JyBsaXRlcmFsIG9iamVjdC4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBzZWUgI0JJUlRIU19BTkRfREVBVEhTX1ZBTFVFDQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCUJJUlRIU19BTkRfREVBVEhTKDEsICJCSVJUSFNfQU5EX0RFQVRIUyIsICJCSVJUSFNfQU5EX0RFQVRIUyIpLCAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQNCisNCisJLyoqDQorCSAqIFRoZSAnPGVtPjxiPk1JR1JBVElPTjwvYj48L2VtPicgbGl0ZXJhbCBvYmplY3QuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAc2VlICNNSUdSQVRJT05fVkFMVUUNCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJTUlHUkFUSU9OKDIsICJNSUdSQVRJT04iLCAiTUlHUkFUSU9OIiksIC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJA0KKw0KKwkvKioNCisJICogVGhlICc8ZW0+PGI+QUdJTkc8L2I+PC9lbT4nIGxpdGVyYWwgb2JqZWN0Lg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHNlZSAjQUdJTkdfVkFMVUUNCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJQUdJTkcoMywgIkFHSU5HIiwgIkFHSU5HIik7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJA0KKw0KKwkvKioNCisJICogVGhlICc8ZW0+PGI+QklSVEhTIEFORCBERUFUSFM8L2I+PC9lbT4nIGxpdGVyYWwgdmFsdWUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDxwPg0KKwkgKiBJZiB0aGUgbWVhbmluZyBvZiAnPGVtPjxiPkJJUlRIUyBBTkQgREVBVEhTPC9iPjwvZW0+JyBsaXRlcmFsIG9iamVjdCBpc24ndCBjbGVhciwNCisJICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLg0KKwkgKiA8L3A+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAc2VlICNCSVJUSFNfQU5EX0RFQVRIUw0KKwkgKiBAbW9kZWwNCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgQklSVEhTX0FORF9ERUFUSFNfVkFMVUUgPSAxOw0KKw0KKwkvKioNCisJICogVGhlICc8ZW0+PGI+TUlHUkFUSU9OPC9iPjwvZW0+JyBsaXRlcmFsIHZhbHVlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8cD4NCisJICogSWYgdGhlIG1lYW5pbmcgb2YgJzxlbT48Yj5NSUdSQVRJT048L2I+PC9lbT4nIGxpdGVyYWwgb2JqZWN0IGlzbid0IGNsZWFyLA0KKwkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uDQorCSAqIDwvcD4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBzZWUgI01JR1JBVElPTg0KKwkgKiBAbW9kZWwNCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgTUlHUkFUSU9OX1ZBTFVFID0gMjsNCisNCisJLyoqDQorCSAqIFRoZSAnPGVtPjxiPkFHSU5HPC9iPjwvZW0+JyBsaXRlcmFsIHZhbHVlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8cD4NCisJICogSWYgdGhlIG1lYW5pbmcgb2YgJzxlbT48Yj5BR0lORzwvYj48L2VtPicgbGl0ZXJhbCBvYmplY3QgaXNuJ3QgY2xlYXIsDQorCSAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4NCisJICogPC9wPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHNlZSAjQUdJTkcNCisJICogQG1vZGVsDQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEFHSU5HX1ZBTFVFID0gMzsNCisNCisJLyoqDQorCSAqIEFuIGFycmF5IG9mIGFsbCB0aGUgJzxlbT48Yj5FeGNoYW5nZSBUeXBlPC9iPjwvZW0+JyBlbnVtZXJhdG9ycy4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByaXZhdGUgc3RhdGljIGZpbmFsIEV4Y2hhbmdlVHlwZVtdIFZBTFVFU19BUlJBWSA9DQorCQluZXcgRXhjaGFuZ2VUeXBlW10gew0KKwkJCUJJUlRIU19BTkRfREVBVEhTLA0KKwkJCU1JR1JBVElPTiwNCisJCQlBR0lORywNCisJCX07DQorDQorCS8qKg0KKwkgKiBBIHB1YmxpYyByZWFkLW9ubHkgbGlzdCBvZiBhbGwgdGhlICc8ZW0+PGI+RXhjaGFuZ2UgVHlwZTwvYj48L2VtPicgZW51bWVyYXRvcnMuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgc3RhdGljIGZpbmFsIExpc3Q8RXhjaGFuZ2VUeXBlPiBWQUxVRVMgPSBDb2xsZWN0aW9ucy51bm1vZGlmaWFibGVMaXN0KEFycmF5cy5hc0xpc3QoVkFMVUVTX0FSUkFZKSk7DQorDQorCS8qKg0KKwkgKiBSZXR1cm5zIHRoZSAnPGVtPjxiPkV4Y2hhbmdlIFR5cGU8L2I+PC9lbT4nIGxpdGVyYWwgd2l0aCB0aGUgc3BlY2lmaWVkIGxpdGVyYWwgdmFsdWUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgc3RhdGljIEV4Y2hhbmdlVHlwZSBnZXQoU3RyaW5nIGxpdGVyYWwpIHsNCisJCWZvciAoaW50IGkgPSAwOyBpIDwgVkFMVUVTX0FSUkFZLmxlbmd0aDsgKytpKSB7DQorCQkJRXhjaGFuZ2VUeXBlIHJlc3VsdCA9IFZBTFVFU19BUlJBWVtpXTsNCisJCQlpZiAocmVzdWx0LnRvU3RyaW5nKCkuZXF1YWxzKGxpdGVyYWwpKSB7DQorCQkJCXJldHVybiByZXN1bHQ7DQorCQkJfQ0KKwkJfQ0KKwkJcmV0dXJuIG51bGw7DQorCX0NCisNCisJLyoqDQorCSAqIFJldHVybnMgdGhlICc8ZW0+PGI+RXhjaGFuZ2UgVHlwZTwvYj48L2VtPicgbGl0ZXJhbCB3aXRoIHRoZSBzcGVjaWZpZWQgbmFtZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBzdGF0aWMgRXhjaGFuZ2VUeXBlIGdldEJ5TmFtZShTdHJpbmcgbmFtZSkgew0KKwkJZm9yIChpbnQgaSA9IDA7IGkgPCBWQUxVRVNfQVJSQVkubGVuZ3RoOyArK2kpIHsNCisJCQlFeGNoYW5nZVR5cGUgcmVzdWx0ID0gVkFMVUVTX0FSUkFZW2ldOw0KKwkJCWlmIChyZXN1bHQuZ2V0TmFtZSgpLmVxdWFscyhuYW1lKSkgew0KKwkJCQlyZXR1cm4gcmVzdWx0Ow0KKwkJCX0NCisJCX0NCisJCXJldHVybiBudWxsOw0KKwl9DQorDQorCS8qKg0KKwkgKiBSZXR1cm5zIHRoZSAnPGVtPjxiPkV4Y2hhbmdlIFR5cGU8L2I+PC9lbT4nIGxpdGVyYWwgd2l0aCB0aGUgc3BlY2lmaWVkIGludGVnZXIgdmFsdWUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgc3RhdGljIEV4Y2hhbmdlVHlwZSBnZXQoaW50IHZhbHVlKSB7DQorCQlzd2l0Y2ggKHZhbHVlKSB7DQorCQkJY2FzZSBCSVJUSFNfQU5EX0RFQVRIU19WQUxVRTogcmV0dXJuIEJJUlRIU19BTkRfREVBVEhTOw0KKwkJCWNhc2UgTUlHUkFUSU9OX1ZBTFVFOiByZXR1cm4gTUlHUkFUSU9OOw0KKwkJCWNhc2UgQUdJTkdfVkFMVUU6IHJldHVybiBBR0lORzsNCisJCX0NCisJCXJldHVybiBudWxsOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJpdmF0ZSBmaW5hbCBpbnQgdmFsdWU7DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJpdmF0ZSBmaW5hbCBTdHJpbmcgbmFtZTsNCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcml2YXRlIGZpbmFsIFN0cmluZyBsaXRlcmFsOw0KKw0KKwkvKioNCisJICogT25seSB0aGlzIGNsYXNzIGNhbiBjb25zdHJ1Y3QgaW5zdGFuY2VzLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJpdmF0ZSBFeGNoYW5nZVR5cGUoaW50IHZhbHVlLCBTdHJpbmcgbmFtZSwgU3RyaW5nIGxpdGVyYWwpIHsNCisJCXRoaXMudmFsdWUgPSB2YWx1ZTsNCisJCXRoaXMubmFtZSA9IG5hbWU7DQorCQl0aGlzLmxpdGVyYWwgPSBsaXRlcmFsOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIGludCBnZXRWYWx1ZSgpIHsNCisJICByZXR1cm4gdmFsdWU7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgU3RyaW5nIGdldE5hbWUoKSB7DQorCSAgcmV0dXJuIG5hbWU7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgU3RyaW5nIGdldExpdGVyYWwoKSB7DQorCSAgcmV0dXJuIGxpdGVyYWw7DQorCX0NCisNCisJLyoqDQorCSAqIFJldHVybnMgdGhlIGxpdGVyYWwgdmFsdWUgb2YgdGhlIGVudW1lcmF0b3IsIHdoaWNoIGlzIGl0cyBzdHJpbmcgcmVwcmVzZW50YXRpb24uDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlAT3ZlcnJpZGUNCisJcHVibGljIFN0cmluZyB0b1N0cmluZygpIHsNCisJCXJldHVybiBsaXRlcmFsOw0KKwl9DQorCQ0KK30gLy9FeGNoYW5nZVR5cGUNCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoL0dyYXBoLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoL0dyYXBoLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDY0MTE0NQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGgvR3JhcGguamF2YQpAQCAtMCwwICsxLDMxNCBAQAorLy8gR3JhcGguamF2YQorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGg7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLkVMaXN0OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5FTWFwOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5VUkk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5JZGVudGlmaWFibGU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5JZGVudGlmaWFibGVGaWx0ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLkRlY29yYXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuTW9kZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLlNURU1UaW1lOworCisvKioKKyAqIEEgPGNvZGU+R3JhcGg8L2NvZGU+IHNlcnZlcyB0d28gcm9sZXMgaW4gdGhlIFNURU0gc3lzdGVtLiBUaGUgZmlyc3QgaXMgYXMKKyAqIHRoZSBjYW5vbmljYWwgZGF0YSBzdHJ1Y3R1cmUgdGhhdCBpcyB0aGUgcmVwcmVzZW50YXRpb25hbCBmcmFtZXdvcmsgZm9yIGFsbAorICogU1RFTSBzaW11bGF0aW9ucy4gSW4gdGhpcyBmb3JtLCBhIDxjb2RlPkdyYXBoPC9jb2RlPiwgd2l0aCBvbmUgZXhjZXB0aW9uLAorICogbWF0Y2hlcyB0aGUgdGhlb3JldGljYWwgZGVmaW5pdGlvbiBvZiBhICJncmFwaCIgaW4gdGhhdCBpdCBoYXMgYSBzZXQgb2YKKyAqIHtAbGluayBOb2RlfXMsIGEgc2V0IG9mIHtAbGluayBFZGdlfXMgYmV0d2VlbiBtZW1iZXJzIG9mIHRoZSB7QGxpbmsgTm9kZX0KKyAqIHNldCwgYW5kIGEgc2V0IG9mIHtAbGluayBMYWJlbH1zIHRoYXQgbGFiZWwgZWl0aGVyIGEgbWVtYmVyIG9mIHRoZQorICoge0BsaW5rIE5vZGV9IHNldCBvciBhIG1lbWJlciBvZiB0aGUge0BsaW5rIEVkZ2V9IHNldC4gVGhlIG9uZSBleGNlcHRpb24gaXMKKyAqIHRoYXQgYW4gYWRkaXRpb25hbCBzZXQgb2Yge0BsaW5rIExhYmVsfXMgZGVzaWduYXRlZCBhcyAiZ3JhcGggbGFiZWxzIgorICogZXhpc3RzLiBUaGVzZSB7QGxpbmsgTGFiZWx9cyBmdW5jdGlvbiBhcyAiZ2xvYmFsIHZhcmlhYmxlcyIgYW5kIHdvdWxkCisgKiB0eXBpY2FsbHkgYmUgdXNlZCBkdXJpbmcgYSBzaW11bGF0aW9uIHRvIGhvbGQgZ2xvYmFsIHN0YXRlIGluZm9ybWF0aW9uIChmb3IKKyAqIGluc3RhbmNlLCBwYXJhbWV0ZXJzIHJlZmVyZW5jZWQgYnkgYQorICoge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5EZWNvcmF0b3J9IHRoYXQgY29udHJvbCBpdCdzCisgKiBjb21wdXRhdGlvbnMgb24gYSBncmFwaC13aWRlIGJhc2lzLCBhbiBleGFtcGxlIG1pZ2h0IGJlIGEgZGlzZWFzZSBtb2RlbCB0aGF0CisgKiBjYW4gY2hhbmdlIHRoZSBpbmZlY3Rpb3VzIHJhdGUgaXQgdXNlcyBieSByZWZlcmVuY2luZyBzdWNoIGEgbGFiZWwpLgorICogPHA+CisgKiBUaGUgc2Vjb25kIHJvbGUgcGxheWVkIGJ5IGEgPGNvZGU+R3JhcGg8L2NvZGU+IGlzIGFzIGEgdW5pdCBvZiBjb21wb3NpdGlvbgorICogaW4gYSB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLk1vZGVsfS4gQQorICoge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5Nb2RlbH0gZm9ybXMgYSB0cmVlIG9mCisgKiA8Y29kZT5HcmFwaDwvY29kZT5zIGFuZCB7QGxpbmsgTW9kZWx9cy4gVGhlIDxjb2RlPkdyYXBoPC9jb2RlPgorICogaW5zdGFuY2VzIGFyZSB0aGUgbGVhdmVzIG9mIHRoZSB0cmVlIHdoaWxlIHRoZQorICoge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5Nb2RlbH0gaW5zdGFuY2VzIGFyZSB0aGUgcm9vdCBhbmQKKyAqIGlubmVyIG5vZGVzIG9mIHRoZSB0cmVlLiBJbiB0aGlzIHJvbGUsIGEgPGNvZGU+R3JhcGg8L2NvZGU+IG1heSBub3QgbWVldAorICogdGhlIHRoZW9yZXRpY2FsIGRlZmluaXRpb24gb2YgYSAiZ3JhcGgiLiBUaGlzIG1lYW5zIHRoYXQgaXQgbWF5IG9ubHkgaGF2ZSBhCisgKiBzZXQgb2Yge0BsaW5rIExhYmVsfXMgb3IgYSBzZXQgb2Yge0BsaW5rIEVkZ2V9cywgYW5kIG5vIHtAbGluayBOb2RlfXMuCisgKiBUaGlzICJncmFwaCBmcmFnbWVudCIgYWxsb3dzIHNldHMgb2Yge0BsaW5rIExhYmVsfXMgYW5kIHtAbGluayBFZGdlfXMgdG8gYmUKKyAqIGRlZmluZWQgYW5kIHRoZW4gbGF0ZXIgY29tYmluZWQgd2l0aCBhbiBleGlzdGluZyA8Y29kZT5HcmFwaDwvY29kZT4gdGhhdAorICogZG9lcyBoYXZlIHtAbGluayBOb2RlfXMuIFRoaXMgY29tYmluYXRpb24gaXMgc3BlY2lmaWVkIGJ5IGFkZGluZyB0aGUgZ3JhcGgKKyAqIGZyYWdtZW50IHRvIGEge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5Nb2RlbH0gaW5zdGFuY2UuIFdoZW4KKyAqIHRoZSBjYW5vbmljYWwgPGNvZGU+R3JhcGg8L2NvZGU+IGlzIGNyZWF0ZWQsIHRoZSB7QGxpbmsgTGFiZWx9cyBhbmQKKyAqIHtAbGluayBFZGdlfXMgYXJlICJyZXNvbHZlZCIgYnkgbWF0Y2hpbmcgdGhlaXIgdGFyZ2V0IHtAbGluayBVUkl9KHMpIHdpdGgKKyAqIHRob3NlIG9mIHRoZSB7QGxpbmsgTm9kZX1zIGluIHRoZSBjYW5vbmljYWwgPGNvZGU+R3JhcGg8L2NvZGU+IHVuZGVyCisgKiBjb25zdHJ1Y3Rpb24uIEFueSBzdWNoIHtAbGluayBMYWJlbH1zIG9yIHtAbGluayBFZGdlfXMgdGhhdCBhcmUgdW5yZXNvbHZlZAorICogYXJlIHJlY29yZGVkIGFzIHtAbGluayBVbnJlc29sdmVkSWRlbnRpZmlhYmxlfXMuCisgKiA8L3A+CisgKiA8cD4KKyAqIFRoZSA8Y29kZT5HcmFwaDwvY29kZT4gaGFzIDxlbT5jb250YWlubWVudDwvZW0+IHJlbGF0aW9uc2hpcHMgZm9yCisgKiB7QGxpbmsgTm9kZX1zLCB7QGxpbmsgRWRnZX1zIGFuZCB0aGUgbGFiZWxzIG9uIG5vZGVzIChpLmUuLAorICoge0BsaW5rIE5vZGVMYWJlbH1zKS4gVGhlc2Ugc3VwcG9ydCB0aGUgZ3JhcGggZnJhZ21lbnQgcm9sZSBieSBhbGxvd2luZyBhCisgKiA8Y29kZT5HcmFwaDwvY29kZT4gdG8gY29udGFpbiBhbnkgb2YgdGhlIHRocmVlIHdpdGhvdXQgdGhlIG90aGVycy4gVGhlCisgKiB7QGxpbmsgTGFiZWx9cyBvbiB7QGxpbmsgRWRnZX1zIGFyZSBjb250YWluZWQgYnkgdGhlIHtAbGluayBFZGdlfSBhcyBpdCBpcworICogbm90IHBvc3NpYmxlIHRvIGhhdmUgc3VjaCBhIHtAbGluayBMYWJlbH0gd2l0aG91dCB0aGUge0BsaW5rIEVkZ2V9LiBPbmx5IG9uZQorICogc3VjaCB7QGxpbmsgTGFiZWx9IGlzIGFsbG93ZWQgcGVyIHtAbGluayBFZGdlfS4KKyAqIDwvcD4KKyAqIDxwPgorICogVGhpcyBpbnRlcmZhY2UgZGVmaW5pdGlvbiBpcyBhbHNvIGFuICJBbm5vdGF0ZWQgSmF2YSBJbnRlcmZhY2UiIHRoYXQgZGVmaW5lcworICogb25lIGNsYXNzIGluIGEgPGEgaHJlZj0iaHR0cDovL3d3dy51bWwub3JnLyI+VU1MPC9hPiAibW9kZWwiLiBUaGUgVU1MIGNsYXNzCisgKiBkaWFncmFtIGZvciB0aGUgbW9kZWwgaXMgaW4gdGhlIDxjb2RlPmRvY3VtZW50YXRpb248L2NvZGU+IGZvbGRlciBvZiB0aGUKKyAqIHByb2plY3QuIFRoaXMgZmlsZSBhbmQgdGhlIG90aGVyIGludGVyZmFjZXMgaW4gdGhpcyBKYXZhIHBhY2thZ2UgYXJlCisgKiBwcm9jZXNzZWQgYnkgdGhlIEVjbGlwc2UgTW9kZWxpbmcgRnJhbWV3b3JrIChha2EgRU1GIDxhCisgKiBocmVmPSJodHRwOi8vb3JnLmVjbGlwc2UvZW1mIj5odHRwOi8vb3JnLmVjbGlwc2UvZW1mPC9hPikuIHRvIGF1dG9tYXRpY2FsbHkKKyAqIGdlbmVyYXRlIGFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBtb2RlbC4gRU1GIGlzIGRvY3VtZW50ZWQgaW4gdGhlIGJvb2sgPGEKKyAqIGhyZWY9Imh0dHA6Ly93d3cuYXdwcm9mZXNzaW9uYWwuY29tL2Jvb2tzdG9yZS9wcm9kdWN0LmFzcD9pc2JuPTAxMzE0MjU0MjAmcmw9MSI+RWNsaXBzZQorICogTW9kZWxpbmcgRnJhbWV3b3JrIDwvYT4gYnkgQnVkaW5za3ksIGV0IGFsLgorICogPC9wPgorICogCisgKiBAc2VlIEVkZ2UKKyAqIEBzZWUgTm9kZQorICogQHNlZSBMYWJlbAorICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuTW9kZWwKKyAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNjZW5hcmlvLlNjZW5hcmlvCisgKiAKKyAqIEBtb2RlbAorICovCitwdWJsaWMgaW50ZXJmYWNlIEdyYXBoIGV4dGVuZHMgSWRlbnRpZmlhYmxlIHsKKworCS8qKgorCSAqIFRoaXMgaXMgdGhlIHNlZ21lbnQgb2YgdGhlIHR5cGUgVVJJIHRoYXQgcHJlZml4ZXMgYWxsIG90aGVyIHNlZ21lbnRzIGluIGEKKwkgKiBncmFwaCBVUkkuCisJICovCisJU3RyaW5nIFVSSV9UWVBFX0dSQVBIX1NFR01FTlQgPSAiZ3JhcGgiOworCisJLyoqCisJICogQHJldHVybiB0aGUgdGltZSB0aGF0IHRoZSBkeW5hbWljIGxhYmVsIHZhbHVlcyB3ZXJlIGxhc3QgdXBkYXRlZC4KKwkgKiBAbW9kZWwgY29udGFpbm1lbnQ9InRydWUiIHJlc29sdmVQcm94aWVzPSJmYWxzZSIKKwkgKi8KKwlTVEVNVGltZSBnZXRUaW1lKCk7CisJCisJLyoqCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkdyYXBoI2dldFRpbWUgPGVtPlRpbWU8L2VtPn0nIGNvbnRhaW5tZW50IHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPlRpbWU8L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlLgorCSAqIEBzZWUgI2dldFRpbWUoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwl2b2lkIHNldFRpbWUoU1RFTVRpbWUgdmFsdWUpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+Tm9kZXM8L2I+PC9lbT4nIG1hcC4KKwkgKiBUaGUga2V5IGlzIG9mIHR5cGUge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5VUkl9LAorCSAqIGFuZCB0aGUgdmFsdWUgaXMgb2YgdHlwZSB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLk5vZGV9LAorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPHA+CisJICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+Tm9kZXM8L2VtPicgcmVmZXJlbmNlIGxpc3QgaXNuJ3QgY2xlYXIsCisJICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLgorCSAqIDwvcD4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5Ob2RlczwvZW0+JyBtYXAuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguR3JhcGhQYWNrYWdlI2dldEdyYXBoX05vZGVzKCkKKwkgKiBAbW9kZWwgbWFwVHlwZT0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLlVSSVRvTm9kZU1hcEVudHJ5PG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uVVJJLCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguTm9kZT4iCisJICogQGdlbmVyYXRlZAorCSAqLworCUVNYXA8VVJJLCBOb2RlPiBnZXROb2RlcygpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+RWRnZXM8L2I+PC9lbT4nIG1hcC4KKwkgKiBUaGUga2V5IGlzIG9mIHR5cGUge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5VUkl9LAorCSAqIGFuZCB0aGUgdmFsdWUgaXMgb2YgdHlwZSB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkVkZ2V9LAorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPHA+CisJICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+RWRnZXM8L2VtPicgcmVmZXJlbmNlIGxpc3QgaXNuJ3QgY2xlYXIsCisJICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLgorCSAqIDwvcD4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5FZGdlczwvZW0+JyBtYXAuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguR3JhcGhQYWNrYWdlI2dldEdyYXBoX0VkZ2VzKCkKKwkgKiBAbW9kZWwgbWFwVHlwZT0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLlVSSVRvRWRnZU1hcEVudHJ5PG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uVVJJLCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguRWRnZT4iCisJICogQGdlbmVyYXRlZAorCSAqLworCUVNYXA8VVJJLCBFZGdlPiBnZXRFZGdlcygpOworCisJLyoqCisJICogQHJldHVybiB0aGUgbWFwIGJldHdlZW4ge0BsaW5rIFVSSX0gYW5kIHtAbGluayBMYWJlbH0gbGFiZWxpbmcgdGhlIHtAbGluayBHcmFwaH0KKwkgKiBAbW9kZWwga2V5VHlwZT0iVVJJIiB2YWx1ZVR5cGU9IkxhYmVsIiB2YWx1ZUNvbnRhaW5tZW50PSJ0cnVlIgorCSAqLworCUVNYXA8VVJJLCBMYWJlbD4gZ2V0R3JhcGhMYWJlbHMoKTsKKworCS8qKgorCSAqIEByZXR1cm4gdGhlIG1hcHBpbmcgYmV0d2VlbiB7QGxpbmsgVVJJfSBhbmQge0BsaW5rIE5vZGVMYWJlbH1zCisJICogQG1vZGVsIGtleVR5cGU9IlVSSSIgdmFsdWVUeXBlPSJOb2RlTGFiZWwiIHZhbHVlQ29udGFpbm1lbnQ9InRydWUiCisJICovCisJRU1hcDxVUkksIE5vZGVMYWJlbD4gZ2V0Tm9kZUxhYmVscygpOworCisJLyoqCisJICogQHBhcmFtIHR5cGVVUkkKKwkgKiAgICAgICAgICAgIHRoZSB0eXBlIHtAbGluayBVUkl9IG9mIHRoZSBkZXNpcmVkIHtAbGluayBOb2RlTGFiZWx9CisJICogQHJldHVybiBhIGxpc3Qgb2YgdGhlIHtAbGluayBOb2RlTGFiZWx9cyB0aGF0IG1hdGNoIGEgc3BlY2lmaWMgdHlwZSB7QGxpbmsgVVJJfQorCSAqIEBtb2RlbCB0eXBlPSJOb2RlTGFiZWwiIHZvbGF0aWxlPSJ0cnVlIiB0cmFuc2llbnQ9InRydWUiCisJICogICAgICAgIGNoYW5nZWFibGU9ImZhbHNlIgorCSAqLworCUVMaXN0PE5vZGVMYWJlbD4gZ2V0Tm9kZUxhYmVsc0J5VHlwZVVSSShVUkkgdHlwZVVSSSk7CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBtb2RlbAorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwl2b2lkIGFkZEdyYXBoKEdyYXBoIGdyYXBoLCBJZGVudGlmaWFibGVGaWx0ZXIgZmlsdGVyKTsKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogCisJICogVGhpcyBjb2xsZWN0aW9uIG9mIExhYmVscyBjb250YWlucyByZWZlcmVuY2VzIHRvIEFMTCBvZiB0aGUKKwkgKiB7QGxpbmsgRHluYW1pY0xhYmVsfXMgaW4gdGhlIHtAbGluayBHcmFwaH0uIEl0IGlzIHVzZWQgYnkKKwkgKiB7QGxpbmsgI3N3aXRjaFRvTmV4dFZhbHVlKCl9IHRvIGZpbmQgZWFjaCBvZiB0aGUge0BsaW5rIER5bmFtaWNMYWJlbH1zCisJICogdGhhdCBuZWVkIHRvIHN3aXRjaCB2YWx1ZXMuCisJICogCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogCisJICogQG1vZGVsIHR5cGU9IkR5bmFtaWNMYWJlbCIgY29udGFpbm1lbnQ9ImZhbHNlIgorCSAqLworCUVMaXN0PER5bmFtaWNMYWJlbD4gZ2V0RHluYW1pY0xhYmVscygpOworCisJLyoqCisJICogQHJldHVybiB0aGUgY29sbGVjdGlvbiBvZiB7QGxpbmsgRGVjb3JhdG9yfXMgdGhhdCBkZWNvcmF0ZSB0aGlzIHtAbGluayBHcmFwaH0KKwkgKiBAbW9kZWwgdHlwZT0iRGVjb3JhdG9yIiBjb250YWlubWVudD0idHJ1ZSIgb3Bwb3NpdGU9ImdyYXBoIgorCSAqLworCUVMaXN0PERlY29yYXRvcj4gZ2V0RGVjb3JhdG9ycygpOworCQorCisJLyoqCisJICogUHV0IHRoZSB7QGxpbmsgRWRnZX0gaW50byB0aGUge0BsaW5rIEdyYXBofS4KKwkgKiAKKwkgKiBAbW9kZWwgdm9sYXRpbGU9InRydWUiIHRyYW5zaWVudD0idHJ1ZSIgY2hhbmdlYWJsZT0iZmFsc2UiCisJICovCisJdm9pZCBwdXRFZGdlKEVkZ2UgZWRnZSk7CisKKwkvKioKKwkgKiBHZXQgdGhlIHtAbGluayBFZGdlfSBmcm9tIHRoZSB7QGxpbmsgR3JhcGh9LgorCSAqIAorCSAqIEBtb2RlbCB2b2xhdGlsZT0idHJ1ZSIgdHJhbnNpZW50PSJ0cnVlIiBjaGFuZ2VhYmxlPSJmYWxzZSIKKwkgKi8KKwlFZGdlIGdldEVkZ2UoVVJJIHVyaSk7CisKKwkvKioKKwkgKiBQdXQgdGhlIHtAbGluayBOb2RlfSBpbnRvIHRoZSB7QGxpbmsgR3JhcGh9LgorCSAqIAorCSAqIEBtb2RlbCB2b2xhdGlsZT0idHJ1ZSIgdHJhbnNpZW50PSJ0cnVlIiBjaGFuZ2VhYmxlPSJmYWxzZSIKKwkgKi8KKwl2b2lkIHB1dE5vZGUoTm9kZSBub2RlKTsKKworCS8qKgorCSAqIEdldCB0aGUge0BsaW5rIE5vZGV9IGZyb20gdGhlIHtAbGluayBHcmFwaH0uCisJICogCisJICogQG1vZGVsIHZvbGF0aWxlPSJ0cnVlIiB0cmFuc2llbnQ9InRydWUiIGNoYW5nZWFibGU9ImZhbHNlIgorCSAqLworCU5vZGUgZ2V0Tm9kZShVUkkgdXJpKTsKKworCS8qKgorCSAqIFB1dCB0aGUge0BsaW5rIE5vZGVMYWJlbH0gaW50byB0aGUge0BsaW5rIEdyYXBofS4KKwkgKiAKKwkgKiBAbW9kZWwgdm9sYXRpbGU9InRydWUiIHRyYW5zaWVudD0idHJ1ZSIgY2hhbmdlYWJsZT0iZmFsc2UiCisJICovCisJdm9pZCBwdXROb2RlTGFiZWwoTm9kZUxhYmVsIGxhYmVsKTsKKworCS8qKgorCSAqIEdldCB0aGUge0BsaW5rIE5vZGVMYWJlbH0gZnJvbSB0aGUge0BsaW5rIEdyYXBofS4KKwkgKiAKKwkgKiBAbW9kZWwgdm9sYXRpbGU9InRydWUiIHRyYW5zaWVudD0idHJ1ZSIgY2hhbmdlYWJsZT0iZmFsc2UiCisJICovCisJTm9kZUxhYmVsIGdldE5vZGVMYWJlbChVUkkgdXJpKTsKKworCS8qKgorCSAqIFB1dCB0aGUgR3JhcGgge0BsaW5rIExhYmVsfSBpbnRvIHRoZSB7QGxpbmsgR3JhcGh9LgorCSAqIAorCSAqIEBtb2RlbCB2b2xhdGlsZT0idHJ1ZSIgdHJhbnNpZW50PSJ0cnVlIiBjaGFuZ2VhYmxlPSJmYWxzZSIKKwkgKi8KKwl2b2lkIHB1dEdyYXBoTGFiZWwoTGFiZWwgbGFiZWwpOworCisJLyoqCisJICogR2V0IHRoZSBHcmFwaCB7QGxpbmsgTGFiZWx9IGZyb20gdGhlIHtAbGluayBHcmFwaH0uCisJICogCisJICogQG1vZGVsIHZvbGF0aWxlPSJ0cnVlIiB0cmFuc2llbnQ9InRydWUiIGNoYW5nZWFibGU9ImZhbHNlIgorCSAqLworCUxhYmVsIGdldEdyYXBoTGFiZWwoVVJJIHVyaSk7CisKKwkvKioKKwkgKiBBZGQgdGhlIHtAbGluayBEeW5hbWljTGFiZWx9IGludG8gdGhlIHtAbGluayBHcmFwaH0uCisJICogCisJICogQG1vZGVsIHZvbGF0aWxlPSJ0cnVlIiB0cmFuc2llbnQ9InRydWUiIGNoYW5nZWFibGU9ImZhbHNlIgorCSAqLworCXZvaWQgYWRkRHluYW1pY0xhYmVsKER5bmFtaWNMYWJlbCBkeW5hbWljbGFiZWwpOworCisJLyoqCisJICogUmV0dXJuIHRoZSBudW1iZXIgb2Yge0BsaW5rIEVkZ2V9cyBpbiB0aGlzIHtAbGluayBHcmFwaH0uCisJICogCisJICogQG1vZGVsIHZvbGF0aWxlPSJ0cnVlIiB0cmFuc2llbnQ9InRydWUiIGNoYW5nZWFibGU9ImZhbHNlIgorCSAqLworCWludCBnZXROdW1FZGdlcygpOworCisJLyoqCisJICogUmV0dXJuIHRoZSBudW1iZXIgb2Yge0BsaW5rIE5vZGV9cyBpbiB0aGlzIHtAbGluayBHcmFwaH0uCisJICogCisJICogQG1vZGVsIHZvbGF0aWxlPSJ0cnVlIiB0cmFuc2llbnQ9InRydWUiIGNoYW5nZWFibGU9ImZhbHNlIgorCSAqLworCWludCBnZXROdW1Ob2RlcygpOworCisJLyoqCisJICogUmV0dXJuIHRoZSBudW1iZXIgb2YgR3JhcGgge0BsaW5rIExhYmVsfSBpbiB0aGlzIHtAbGluayBHcmFwaH0uCisJICogCisJICogQG1vZGVsIHZvbGF0aWxlPSJ0cnVlIiB0cmFuc2llbnQ9InRydWUiIGNoYW5nZWFibGU9ImZhbHNlIgorCSAqLworCWludCBnZXROdW1HcmFwaExhYmVscygpOworCisJLyoqCisJICogUmV0dXJuIHRoZSBudW1iZXIgb2Yge0BsaW5rIE5vZGVMYWJlbH1zIGluIHRoaXMge0BsaW5rIEdyYXBofS4KKwkgKiAKKwkgKiBAbW9kZWwgdm9sYXRpbGU9InRydWUiIHRyYW5zaWVudD0idHJ1ZSIgY2hhbmdlYWJsZT0iZmFsc2UiCisJICovCisJaW50IGdldE51bU5vZGVMYWJlbHMoKTsKKworCS8qKgorCSAqIFJldHVybiB0aGUgbnVtYmVyIG9mIHtAbGluayBEeW5hbWljTGFiZWx9cyBpbiB0aGlzIHtAbGluayBHcmFwaH0uCisJICogCisJICogQG1vZGVsIHZvbGF0aWxlPSJ0cnVlIiB0cmFuc2llbnQ9InRydWUiIGNoYW5nZWFibGU9ImZhbHNlIgorCSAqLworCWludCBnZXROdW1EeW5hbWljTGFiZWxzKCk7CisKKwkvKioKKwkgKiBAcmV0dXJuIGEgY29sbGVjdGlvbiB0aGF0IHtAbGluayBVbnJlc29sdmVkSWRlbnRpZmlhYmxlfSBpbnN0YW5jZXMgdGhhdCBzcGVjaWZ5CisJICogICAgICAgICB0aGUge0BsaW5rIFVSSX0ncyBpbiBhbiB7QGxpbmsgSWRlbnRpZmlhYmxlfSB0aGF0IGNvdWxkIG5vdCBiZSByZXNvbHZlZC4KKwkgKiAKKwkgKiBAbW9kZWwgdHlwZT0iVW5yZXNvbHZlZElkZW50aWZpYWJsZSIgY29udGFpbm1lbnQ9InRydWUiCisJICovCisJRUxpc3Q8VW5yZXNvbHZlZElkZW50aWZpYWJsZT4gZ2V0VW5yZXNvbHZlZElkZW50aWZpYWJsZXMoKTsKKworCS8qKgorCSAqIE1ha2UgYWxsIG9mIHRoZSB7QGxpbmsgRHluYW1pY0xhYmVsfXMgaW4gdGhlIG1vZGVsIHN3aXRjaCB0byB0aGVpciAibmV4dCIgdmFsdWUuCisJICogVGhpcyBoYXMgdGhlIGVmZmVjdCBvZiBtb3ZpbmcgdGhlIHN0YXRlIG9mIHRoZSBtb2RlbCB0byBpdHMgYWdncmVnYXRlCisJICogdmFsdWUgYXQgdGhlIG5leHQgdGltZSBwZXJpb2QuCisJICogCisJICogQHBhcmFtIGN1cnJlbnRUaW1lCisJICogCQl0aGUgdGltZSB2YWx1ZSB0byBhc3NvY2lhdGUgd2l0aCB0aGUgbmV3IHZhbHVlLiAgCisJICogQHNlZSAjZ2V0VGltZSgpCisJICogQG1vZGVsIHZvbGF0aWxlPSJ0cnVlIiB0cmFuc2llbnQ9InRydWUiIGNoYW5nZWFibGU9ImZhbHNlIgorCSAqLworCXZvaWQgc3dpdGNoVG9OZXh0VmFsdWUoZmluYWwgU1RFTVRpbWUgY3VycmVudFRpbWUpOworCit9IC8vIEdyYXBoCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoL0dyYXBoRmFjdG9yeS5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC9HcmFwaEZhY3RvcnkuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMmE3NThjCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC9HcmFwaEZhY3RvcnkuamF2YQpAQCAtMCwwICsxLDk2IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaDsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUZhY3Rvcnk7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIFRoZSA8Yj5GYWN0b3J5PC9iPiBmb3IgdGhlIG1vZGVsLgorICogSXQgcHJvdmlkZXMgYSBjcmVhdGUgbWV0aG9kIGZvciBlYWNoIG5vbi1hYnN0cmFjdCBjbGFzcyBvZiB0aGUgbW9kZWwuCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkdyYXBoUGFja2FnZQorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgaW50ZXJmYWNlIEdyYXBoRmFjdG9yeSBleHRlbmRzIEVGYWN0b3J5IHsKKwkvKioKKwkgKiBUaGUgc2luZ2xldG9uIGluc3RhbmNlIG9mIHRoZSBmYWN0b3J5LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUdyYXBoRmFjdG9yeSBlSU5TVEFOQ0UgPSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguaW1wbC5HcmFwaEZhY3RvcnlJbXBsLmluaXQoKTsKKworCS8qKgorCSAqIFJldHVybnMgYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+RWRnZTwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+RWRnZTwvZW0+Jy4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRWRnZSBjcmVhdGVFZGdlKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPkdyYXBoPC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiBhIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5HcmFwaDwvZW0+Jy4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJR3JhcGggY3JlYXRlR3JhcGgoKTsKKworCS8qKgorCSAqIFJldHVybnMgYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+Tm9kZTwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+Tm9kZTwvZW0+Jy4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJTm9kZSBjcmVhdGVOb2RlKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPlVucmVzb2x2ZWQgSWRlbnRpZmlhYmxlPC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiBhIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5VbnJlc29sdmVkIElkZW50aWZpYWJsZTwvZW0+Jy4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJVW5yZXNvbHZlZElkZW50aWZpYWJsZSBjcmVhdGVVbnJlc29sdmVkSWRlbnRpZmlhYmxlKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPlNpbXBsZSBHcmFwaCBQYXJ0aXRpb25lcjwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+U2ltcGxlIEdyYXBoIFBhcnRpdGlvbmVyPC9lbT4nLgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlTaW1wbGVHcmFwaFBhcnRpdGlvbmVyIGNyZWF0ZVNpbXBsZUdyYXBoUGFydGl0aW9uZXIoKTsKKworCS8qKgorCSAqIFJldHVybnMgYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+RXhjaGFuZ2U8L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPkV4Y2hhbmdlPC9lbT4nLgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFeGNoYW5nZSBjcmVhdGVFeGNoYW5nZSgpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgcGFja2FnZSBzdXBwb3J0ZWQgYnkgdGhpcyBmYWN0b3J5LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgcGFja2FnZSBzdXBwb3J0ZWQgYnkgdGhpcyBmYWN0b3J5LgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlHcmFwaFBhY2thZ2UgZ2V0R3JhcGhQYWNrYWdlKCk7CisKK30gLy9HcmFwaEZhY3RvcnkKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGgvR3JhcGhQYWNrYWdlLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoL0dyYXBoUGFja2FnZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUxMzQzZWYKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoL0dyYXBoUGFja2FnZS5qYXZhCkBAIC0wLDAgKzEsMzM5OSBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGg7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVBdHRyaWJ1dGU7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzczsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRURhdGFUeXBlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FRW51bTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRVBhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVSZWZlcmVuY2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5Db21tb25QYWNrYWdlOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiBUaGUgPGI+UGFja2FnZTwvYj4gZm9yIHRoZSBtb2RlbC4KKyAqIEl0IGNvbnRhaW5zIGFjY2Vzc29ycyBmb3IgdGhlIG1ldGEgb2JqZWN0cyB0byByZXByZXNlbnQKKyAqIDx1bD4KKyAqICAgPGxpPmVhY2ggY2xhc3MsPC9saT4KKyAqICAgPGxpPmVhY2ggZmVhdHVyZSBvZiBlYWNoIGNsYXNzLDwvbGk+CisgKiAgIDxsaT5lYWNoIGVudW0sPC9saT4KKyAqICAgPGxpPmFuZCBlYWNoIGRhdGEgdHlwZTwvbGk+CisgKiA8L3VsPgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5HcmFwaEZhY3RvcnkKKyAqIEBtb2RlbCBraW5kPSJwYWNrYWdlIgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgaW50ZXJmYWNlIEdyYXBoUGFja2FnZSBleHRlbmRzIEVQYWNrYWdlIHsKKwkvKioKKwkgKiBUaGUgcGFja2FnZSBuYW1lLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCVN0cmluZyBlTkFNRSA9ICJncmFwaCI7CisKKwkvKioKKwkgKiBUaGUgcGFja2FnZSBuYW1lc3BhY2UgVVJJLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCVN0cmluZyBlTlNfVVJJID0gImh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIjsKKworCS8qKgorCSAqIFRoZSBwYWNrYWdlIG5hbWVzcGFjZSBuYW1lLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCVN0cmluZyBlTlNfUFJFRklYID0gIm9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaCI7CisKKwkvKioKKwkgKiBUaGUgc2luZ2xldG9uIGluc3RhbmNlIG9mIHRoZSBwYWNrYWdlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUdyYXBoUGFja2FnZSBlSU5TVEFOQ0UgPSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguaW1wbC5HcmFwaFBhY2thZ2VJbXBsLmluaXQoKTsKKworCS8qKgorCSAqIFRoZSBtZXRhIG9iamVjdCBpZCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmltcGwuTGFiZWxJbXBsIDxlbT5MYWJlbDwvZW0+fScgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5pbXBsLkxhYmVsSW1wbAorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmltcGwuR3JhcGhQYWNrYWdlSW1wbCNnZXRMYWJlbCgpCisJICogQGdlbmVyYXRlZAorCSAqLworCWludCBMQUJFTCA9IDQ7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VVJJPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgTEFCRUxfX1VSSSA9IENvbW1vblBhY2thZ2UuSURFTlRJRklBQkxFX19VUkk7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VHlwZSBVUkk8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBMQUJFTF9fVFlQRV9VUkkgPSBDb21tb25QYWNrYWdlLklERU5USUZJQUJMRV9fVFlQRV9VUkk7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RHVibGluIENvcmU8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBMQUJFTF9fRFVCTElOX0NPUkUgPSBDb21tb25QYWNrYWdlLklERU5USUZJQUJMRV9fRFVCTElOX0NPUkU7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VVJJIE9mIElkZW50aWZpYWJsZSBUbyBCZSBMYWJlbGVkPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgTEFCRUxfX1VSSV9PRl9JREVOVElGSUFCTEVfVE9fQkVfTEFCRUxFRCA9IENvbW1vblBhY2thZ2UuSURFTlRJRklBQkxFX0ZFQVRVUkVfQ09VTlQgKyAwOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkN1cnJlbnQgVmFsdWU8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBMQUJFTF9fQ1VSUkVOVF9WQUxVRSA9IENvbW1vblBhY2thZ2UuSURFTlRJRklBQkxFX0ZFQVRVUkVfQ09VTlQgKyAxOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPklkZW50aWZpYWJsZTwvYj48L2VtPicgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IExBQkVMX19JREVOVElGSUFCTEUgPSBDb21tb25QYWNrYWdlLklERU5USUZJQUJMRV9GRUFUVVJFX0NPVU5UICsgMjsKKworCS8qKgorCSAqIFRoZSBudW1iZXIgb2Ygc3RydWN0dXJhbCBmZWF0dXJlcyBvZiB0aGUgJzxlbT5MYWJlbDwvZW0+JyBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBMQUJFTF9GRUFUVVJFX0NPVU5UID0gQ29tbW9uUGFja2FnZS5JREVOVElGSUFCTEVfRkVBVFVSRV9DT1VOVCArIDM7CisKKwkvKioKKwkgKiBUaGUgbWV0YSBvYmplY3QgaWQgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5pbXBsLkR5bmFtaWNMYWJlbEltcGwgPGVtPkR5bmFtaWMgTGFiZWw8L2VtPn0nIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguaW1wbC5EeW5hbWljTGFiZWxJbXBsCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguaW1wbC5HcmFwaFBhY2thZ2VJbXBsI2dldER5bmFtaWNMYWJlbCgpCisJICogQGdlbmVyYXRlZAorCSAqLworCWludCBEWU5BTUlDX0xBQkVMID0gMDsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5VUkk8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBEWU5BTUlDX0xBQkVMX19VUkkgPSBMQUJFTF9fVVJJOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlR5cGUgVVJJPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgRFlOQU1JQ19MQUJFTF9fVFlQRV9VUkkgPSBMQUJFTF9fVFlQRV9VUkk7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RHVibGluIENvcmU8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBEWU5BTUlDX0xBQkVMX19EVUJMSU5fQ09SRSA9IExBQkVMX19EVUJMSU5fQ09SRTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5VUkkgT2YgSWRlbnRpZmlhYmxlIFRvIEJlIExhYmVsZWQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBEWU5BTUlDX0xBQkVMX19VUklfT0ZfSURFTlRJRklBQkxFX1RPX0JFX0xBQkVMRUQgPSBMQUJFTF9fVVJJX09GX0lERU5USUZJQUJMRV9UT19CRV9MQUJFTEVEOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkN1cnJlbnQgVmFsdWU8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBEWU5BTUlDX0xBQkVMX19DVVJSRU5UX1ZBTFVFID0gTEFCRUxfX0NVUlJFTlRfVkFMVUU7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+SWRlbnRpZmlhYmxlPC9iPjwvZW0+JyByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgRFlOQU1JQ19MQUJFTF9fSURFTlRJRklBQkxFID0gTEFCRUxfX0lERU5USUZJQUJMRTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5OZXh0IFZhbHVlIFZhbGlkPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgRFlOQU1JQ19MQUJFTF9fTkVYVF9WQUxVRV9WQUxJRCA9IExBQkVMX0ZFQVRVUkVfQ09VTlQgKyAwOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPk5leHQgVmFsdWU8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBEWU5BTUlDX0xBQkVMX19ORVhUX1ZBTFVFID0gTEFCRUxfRkVBVFVSRV9DT1VOVCArIDE7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RGVjb3JhdG9yPC9iPjwvZW0+JyByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgRFlOQU1JQ19MQUJFTF9fREVDT1JBVE9SID0gTEFCRUxfRkVBVFVSRV9DT1VOVCArIDI7CisKKwkvKioKKwkgKiBUaGUgbnVtYmVyIG9mIHN0cnVjdHVyYWwgZmVhdHVyZXMgb2YgdGhlICc8ZW0+RHluYW1pYyBMYWJlbDwvZW0+JyBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBEWU5BTUlDX0xBQkVMX0ZFQVRVUkVfQ09VTlQgPSBMQUJFTF9GRUFUVVJFX0NPVU5UICsgMzsKKworCS8qKgorCSAqIFRoZSBtZXRhIG9iamVjdCBpZCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmltcGwuRHluYW1pY05vZGVMYWJlbEltcGwgPGVtPkR5bmFtaWMgTm9kZSBMYWJlbDwvZW0+fScgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5pbXBsLkR5bmFtaWNOb2RlTGFiZWxJbXBsCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguaW1wbC5HcmFwaFBhY2thZ2VJbXBsI2dldER5bmFtaWNOb2RlTGFiZWwoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlpbnQgRFlOQU1JQ19OT0RFX0xBQkVMID0gMTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5VUkk8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBEWU5BTUlDX05PREVfTEFCRUxfX1VSSSA9IERZTkFNSUNfTEFCRUxfX1VSSTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5UeXBlIFVSSTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IERZTkFNSUNfTk9ERV9MQUJFTF9fVFlQRV9VUkkgPSBEWU5BTUlDX0xBQkVMX19UWVBFX1VSSTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5EdWJsaW4gQ29yZTwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IERZTkFNSUNfTk9ERV9MQUJFTF9fRFVCTElOX0NPUkUgPSBEWU5BTUlDX0xBQkVMX19EVUJMSU5fQ09SRTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5VUkkgT2YgSWRlbnRpZmlhYmxlIFRvIEJlIExhYmVsZWQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBEWU5BTUlDX05PREVfTEFCRUxfX1VSSV9PRl9JREVOVElGSUFCTEVfVE9fQkVfTEFCRUxFRCA9IERZTkFNSUNfTEFCRUxfX1VSSV9PRl9JREVOVElGSUFCTEVfVE9fQkVfTEFCRUxFRDsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5DdXJyZW50IFZhbHVlPC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgRFlOQU1JQ19OT0RFX0xBQkVMX19DVVJSRU5UX1ZBTFVFID0gRFlOQU1JQ19MQUJFTF9fQ1VSUkVOVF9WQUxVRTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5JZGVudGlmaWFibGU8L2I+PC9lbT4nIHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBEWU5BTUlDX05PREVfTEFCRUxfX0lERU5USUZJQUJMRSA9IERZTkFNSUNfTEFCRUxfX0lERU5USUZJQUJMRTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5OZXh0IFZhbHVlIFZhbGlkPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgRFlOQU1JQ19OT0RFX0xBQkVMX19ORVhUX1ZBTFVFX1ZBTElEID0gRFlOQU1JQ19MQUJFTF9fTkVYVF9WQUxVRV9WQUxJRDsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5OZXh0IFZhbHVlPC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgRFlOQU1JQ19OT0RFX0xBQkVMX19ORVhUX1ZBTFVFID0gRFlOQU1JQ19MQUJFTF9fTkVYVF9WQUxVRTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5EZWNvcmF0b3I8L2I+PC9lbT4nIHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBEWU5BTUlDX05PREVfTEFCRUxfX0RFQ09SQVRPUiA9IERZTkFNSUNfTEFCRUxfX0RFQ09SQVRPUjsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5Ob2RlPC9iPjwvZW0+JyByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgRFlOQU1JQ19OT0RFX0xBQkVMX19OT0RFID0gRFlOQU1JQ19MQUJFTF9GRUFUVVJFX0NPVU5UICsgMDsKKworCS8qKgorCSAqIFRoZSBudW1iZXIgb2Ygc3RydWN0dXJhbCBmZWF0dXJlcyBvZiB0aGUgJzxlbT5EeW5hbWljIE5vZGUgTGFiZWw8L2VtPicgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgRFlOQU1JQ19OT0RFX0xBQkVMX0ZFQVRVUkVfQ09VTlQgPSBEWU5BTUlDX0xBQkVMX0ZFQVRVUkVfQ09VTlQgKyAxOworCisJLyoqCisJICogVGhlIG1ldGEgb2JqZWN0IGlkIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguaW1wbC5FZGdlSW1wbCA8ZW0+RWRnZTwvZW0+fScgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5pbXBsLkVkZ2VJbXBsCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguaW1wbC5HcmFwaFBhY2thZ2VJbXBsI2dldEVkZ2UoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlpbnQgRURHRSA9IDI7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VVJJPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgRURHRV9fVVJJID0gQ29tbW9uUGFja2FnZS5JREVOVElGSUFCTEVfX1VSSTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5UeXBlIFVSSTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IEVER0VfX1RZUEVfVVJJID0gQ29tbW9uUGFja2FnZS5JREVOVElGSUFCTEVfX1RZUEVfVVJJOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkR1YmxpbiBDb3JlPC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgRURHRV9fRFVCTElOX0NPUkUgPSBDb21tb25QYWNrYWdlLklERU5USUZJQUJMRV9fRFVCTElOX0NPUkU7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+QTwvYj48L2VtPicgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IEVER0VfX0EgPSBDb21tb25QYWNrYWdlLklERU5USUZJQUJMRV9GRUFUVVJFX0NPVU5UICsgMDsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5Ob2RlIEFVUkk8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBFREdFX19OT0RFX0FVUkkgPSBDb21tb25QYWNrYWdlLklERU5USUZJQUJMRV9GRUFUVVJFX0NPVU5UICsgMTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5CPC9iPjwvZW0+JyByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgRURHRV9fQiA9IENvbW1vblBhY2thZ2UuSURFTlRJRklBQkxFX0ZFQVRVUkVfQ09VTlQgKyAyOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPk5vZGUgQlVSSTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IEVER0VfX05PREVfQlVSSSA9IENvbW1vblBhY2thZ2UuSURFTlRJRklBQkxFX0ZFQVRVUkVfQ09VTlQgKyAzOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkxhYmVsPC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgRURHRV9fTEFCRUwgPSBDb21tb25QYWNrYWdlLklERU5USUZJQUJMRV9GRUFUVVJFX0NPVU5UICsgNDsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5EaXJlY3RlZDwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IEVER0VfX0RJUkVDVEVEID0gQ29tbW9uUGFja2FnZS5JREVOVElGSUFCTEVfRkVBVFVSRV9DT1VOVCArIDU7CisKKwkvKioKKwkgKiBUaGUgbnVtYmVyIG9mIHN0cnVjdHVyYWwgZmVhdHVyZXMgb2YgdGhlICc8ZW0+RWRnZTwvZW0+JyBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBFREdFX0ZFQVRVUkVfQ09VTlQgPSBDb21tb25QYWNrYWdlLklERU5USUZJQUJMRV9GRUFUVVJFX0NPVU5UICsgNjsKKworCS8qKgorCSAqIFRoZSBtZXRhIG9iamVjdCBpZCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmltcGwuR3JhcGhJbXBsIDxlbT5HcmFwaDwvZW0+fScgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5pbXBsLkdyYXBoSW1wbAorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmltcGwuR3JhcGhQYWNrYWdlSW1wbCNnZXRHcmFwaCgpCisJICogQGdlbmVyYXRlZAorCSAqLworCWludCBHUkFQSCA9IDM7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VVJJPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgR1JBUEhfX1VSSSA9IENvbW1vblBhY2thZ2UuSURFTlRJRklBQkxFX19VUkk7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VHlwZSBVUkk8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBHUkFQSF9fVFlQRV9VUkkgPSBDb21tb25QYWNrYWdlLklERU5USUZJQUJMRV9fVFlQRV9VUkk7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RHVibGluIENvcmU8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBHUkFQSF9fRFVCTElOX0NPUkUgPSBDb21tb25QYWNrYWdlLklERU5USUZJQUJMRV9fRFVCTElOX0NPUkU7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RWRnZXM8L2I+PC9lbT4nIG1hcC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBHUkFQSF9fRURHRVMgPSBDb21tb25QYWNrYWdlLklERU5USUZJQUJMRV9GRUFUVVJFX0NPVU5UICsgMDsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5Ob2RlczwvYj48L2VtPicgbWFwLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IEdSQVBIX19OT0RFUyA9IENvbW1vblBhY2thZ2UuSURFTlRJRklBQkxFX0ZFQVRVUkVfQ09VTlQgKyAxOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkdyYXBoIExhYmVsczwvYj48L2VtPicgbWFwLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IEdSQVBIX19HUkFQSF9MQUJFTFMgPSBDb21tb25QYWNrYWdlLklERU5USUZJQUJMRV9GRUFUVVJFX0NPVU5UICsgMjsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5Ob2RlIExhYmVsczwvYj48L2VtPicgbWFwLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IEdSQVBIX19OT0RFX0xBQkVMUyA9IENvbW1vblBhY2thZ2UuSURFTlRJRklBQkxFX0ZFQVRVUkVfQ09VTlQgKyAzOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkR5bmFtaWMgTGFiZWxzPC9iPjwvZW0+JyByZWZlcmVuY2UgbGlzdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBHUkFQSF9fRFlOQU1JQ19MQUJFTFMgPSBDb21tb25QYWNrYWdlLklERU5USUZJQUJMRV9GRUFUVVJFX0NPVU5UICsgNDsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5OdW0gRWRnZXM8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBHUkFQSF9fTlVNX0VER0VTID0gQ29tbW9uUGFja2FnZS5JREVOVElGSUFCTEVfRkVBVFVSRV9DT1VOVCArIDU7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+TnVtIE5vZGVzPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgR1JBUEhfX05VTV9OT0RFUyA9IENvbW1vblBhY2thZ2UuSURFTlRJRklBQkxFX0ZFQVRVUkVfQ09VTlQgKyA2OworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPk51bSBHcmFwaCBMYWJlbHM8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBHUkFQSF9fTlVNX0dSQVBIX0xBQkVMUyA9IENvbW1vblBhY2thZ2UuSURFTlRJRklBQkxFX0ZFQVRVUkVfQ09VTlQgKyA3OworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPk51bSBOb2RlIExhYmVsczwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IEdSQVBIX19OVU1fTk9ERV9MQUJFTFMgPSBDb21tb25QYWNrYWdlLklERU5USUZJQUJMRV9GRUFUVVJFX0NPVU5UICsgODsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5OdW0gRHluYW1pYyBMYWJlbHM8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBHUkFQSF9fTlVNX0RZTkFNSUNfTEFCRUxTID0gQ29tbW9uUGFja2FnZS5JREVOVElGSUFCTEVfRkVBVFVSRV9DT1VOVCArIDk7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VW5yZXNvbHZlZCBJZGVudGlmaWFibGVzPC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UgbGlzdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBHUkFQSF9fVU5SRVNPTFZFRF9JREVOVElGSUFCTEVTID0gQ29tbW9uUGFja2FnZS5JREVOVElGSUFCTEVfRkVBVFVSRV9DT1VOVCArIDEwOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkRlY29yYXRvcnM8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IEdSQVBIX19ERUNPUkFUT1JTID0gQ29tbW9uUGFja2FnZS5JREVOVElGSUFCTEVfRkVBVFVSRV9DT1VOVCArIDExOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlRpbWU8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBHUkFQSF9fVElNRSA9IENvbW1vblBhY2thZ2UuSURFTlRJRklBQkxFX0ZFQVRVUkVfQ09VTlQgKyAxMjsKKworCS8qKgorCSAqIFRoZSBudW1iZXIgb2Ygc3RydWN0dXJhbCBmZWF0dXJlcyBvZiB0aGUgJzxlbT5HcmFwaDwvZW0+JyBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBHUkFQSF9GRUFUVVJFX0NPVU5UID0gQ29tbW9uUGFja2FnZS5JREVOVElGSUFCTEVfRkVBVFVSRV9DT1VOVCArIDEzOworCisJLyoqCisJICogVGhlIG1ldGEgb2JqZWN0IGlkIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguaW1wbC5MYWJlbFZhbHVlSW1wbCA8ZW0+TGFiZWwgVmFsdWU8L2VtPn0nIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguaW1wbC5MYWJlbFZhbHVlSW1wbAorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmltcGwuR3JhcGhQYWNrYWdlSW1wbCNnZXRMYWJlbFZhbHVlKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJaW50IExBQkVMX1ZBTFVFID0gNTsKKworCS8qKgorCSAqIFRoZSBudW1iZXIgb2Ygc3RydWN0dXJhbCBmZWF0dXJlcyBvZiB0aGUgJzxlbT5MYWJlbCBWYWx1ZTwvZW0+JyBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBMQUJFTF9WQUxVRV9GRUFUVVJFX0NPVU5UID0gQ29tbW9uUGFja2FnZS5TQU5JVFlfQ0hFQ0tFUl9GRUFUVVJFX0NPVU5UICsgMDsKKworCS8qKgorCSAqIFRoZSBtZXRhIG9iamVjdCBpZCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmltcGwuTm9kZUltcGwgPGVtPk5vZGU8L2VtPn0nIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguaW1wbC5Ob2RlSW1wbAorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmltcGwuR3JhcGhQYWNrYWdlSW1wbCNnZXROb2RlKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJaW50IE5PREUgPSA2OworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlVSSTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IE5PREVfX1VSSSA9IENvbW1vblBhY2thZ2UuSURFTlRJRklBQkxFX19VUkk7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VHlwZSBVUkk8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBOT0RFX19UWVBFX1VSSSA9IENvbW1vblBhY2thZ2UuSURFTlRJRklBQkxFX19UWVBFX1VSSTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5EdWJsaW4gQ29yZTwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IE5PREVfX0RVQkxJTl9DT1JFID0gQ29tbW9uUGFja2FnZS5JREVOVElGSUFCTEVfX0RVQkxJTl9DT1JFOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkVkZ2VzPC9iPjwvZW0+JyByZWZlcmVuY2UgbGlzdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBOT0RFX19FREdFUyA9IENvbW1vblBhY2thZ2UuSURFTlRJRklBQkxFX0ZFQVRVUkVfQ09VTlQgKyAwOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkxhYmVsczwvYj48L2VtPicgcmVmZXJlbmNlIGxpc3QuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgTk9ERV9fTEFCRUxTID0gQ29tbW9uUGFja2FnZS5JREVOVElGSUFCTEVfRkVBVFVSRV9DT1VOVCArIDE7CisKKwkvKioKKwkgKiBUaGUgbnVtYmVyIG9mIHN0cnVjdHVyYWwgZmVhdHVyZXMgb2YgdGhlICc8ZW0+Tm9kZTwvZW0+JyBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBOT0RFX0ZFQVRVUkVfQ09VTlQgPSBDb21tb25QYWNrYWdlLklERU5USUZJQUJMRV9GRUFUVVJFX0NPVU5UICsgMjsKKworCS8qKgorCSAqIFRoZSBtZXRhIG9iamVjdCBpZCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmltcGwuTm9kZUxhYmVsSW1wbCA8ZW0+Tm9kZSBMYWJlbDwvZW0+fScgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5pbXBsLk5vZGVMYWJlbEltcGwKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5pbXBsLkdyYXBoUGFja2FnZUltcGwjZ2V0Tm9kZUxhYmVsKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJaW50IE5PREVfTEFCRUwgPSA3OworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlVSSTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IE5PREVfTEFCRUxfX1VSSSA9IExBQkVMX19VUkk7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VHlwZSBVUkk8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBOT0RFX0xBQkVMX19UWVBFX1VSSSA9IExBQkVMX19UWVBFX1VSSTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5EdWJsaW4gQ29yZTwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IE5PREVfTEFCRUxfX0RVQkxJTl9DT1JFID0gTEFCRUxfX0RVQkxJTl9DT1JFOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlVSSSBPZiBJZGVudGlmaWFibGUgVG8gQmUgTGFiZWxlZDwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IE5PREVfTEFCRUxfX1VSSV9PRl9JREVOVElGSUFCTEVfVE9fQkVfTEFCRUxFRCA9IExBQkVMX19VUklfT0ZfSURFTlRJRklBQkxFX1RPX0JFX0xBQkVMRUQ7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+Q3VycmVudCBWYWx1ZTwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IE5PREVfTEFCRUxfX0NVUlJFTlRfVkFMVUUgPSBMQUJFTF9fQ1VSUkVOVF9WQUxVRTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5JZGVudGlmaWFibGU8L2I+PC9lbT4nIHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBOT0RFX0xBQkVMX19JREVOVElGSUFCTEUgPSBMQUJFTF9fSURFTlRJRklBQkxFOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPk5vZGU8L2I+PC9lbT4nIHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBOT0RFX0xBQkVMX19OT0RFID0gTEFCRUxfRkVBVFVSRV9DT1VOVCArIDA7CisKKwkvKioKKwkgKiBUaGUgbnVtYmVyIG9mIHN0cnVjdHVyYWwgZmVhdHVyZXMgb2YgdGhlICc8ZW0+Tm9kZSBMYWJlbDwvZW0+JyBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBOT0RFX0xBQkVMX0ZFQVRVUkVfQ09VTlQgPSBMQUJFTF9GRUFUVVJFX0NPVU5UICsgMTsKKworCS8qKgorCSAqIFRoZSBtZXRhIG9iamVjdCBpZCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmltcGwuU3RhdGljTm9kZUxhYmVsSW1wbCA8ZW0+U3RhdGljIE5vZGUgTGFiZWw8L2VtPn0nIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguaW1wbC5TdGF0aWNOb2RlTGFiZWxJbXBsCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguaW1wbC5HcmFwaFBhY2thZ2VJbXBsI2dldFN0YXRpY05vZGVMYWJlbCgpCisJICogQGdlbmVyYXRlZAorCSAqLworCWludCBTVEFUSUNfTk9ERV9MQUJFTCA9IDg7CisKKwkvKioKKwkgKiBUaGUgbWV0YSBvYmplY3QgaWQgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5pbXBsLlVucmVzb2x2ZWRJZGVudGlmaWFibGVJbXBsIDxlbT5VbnJlc29sdmVkIElkZW50aWZpYWJsZTwvZW0+fScgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5pbXBsLlVucmVzb2x2ZWRJZGVudGlmaWFibGVJbXBsCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguaW1wbC5HcmFwaFBhY2thZ2VJbXBsI2dldFVucmVzb2x2ZWRJZGVudGlmaWFibGUoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlpbnQgVU5SRVNPTFZFRF9JREVOVElGSUFCTEUgPSA5OworCisJLyoqCisJICogVGhlIG1ldGEgb2JqZWN0IGlkIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguaW1wbC5VUklUb0lkZW50aWZpYWJsZU1hcEVudHJ5SW1wbCA8ZW0+VVJJIFRvIElkZW50aWZpYWJsZSBNYXAgRW50cnk8L2VtPn0nIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguaW1wbC5VUklUb0lkZW50aWZpYWJsZU1hcEVudHJ5SW1wbAorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmltcGwuR3JhcGhQYWNrYWdlSW1wbCNnZXRVUklUb0lkZW50aWZpYWJsZU1hcEVudHJ5KCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJaW50IFVSSV9UT19JREVOVElGSUFCTEVfTUFQX0VOVFJZID0gMTA7CisKKwkvKioKKwkgKiBUaGUgbWV0YSBvYmplY3QgaWQgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5pbXBsLkVkZ2VMYWJlbEltcGwgPGVtPkVkZ2UgTGFiZWw8L2VtPn0nIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguaW1wbC5FZGdlTGFiZWxJbXBsCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguaW1wbC5HcmFwaFBhY2thZ2VJbXBsI2dldEVkZ2VMYWJlbCgpCisJICogQGdlbmVyYXRlZAorCSAqLworCWludCBFREdFX0xBQkVMID0gMTI7CisKKwkvKioKKwkgKiBUaGUgbWV0YSBvYmplY3QgaWQgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5pbXBsLkR5bmFtaWNFZGdlTGFiZWxJbXBsIDxlbT5EeW5hbWljIEVkZ2UgTGFiZWw8L2VtPn0nIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguaW1wbC5EeW5hbWljRWRnZUxhYmVsSW1wbAorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmltcGwuR3JhcGhQYWNrYWdlSW1wbCNnZXREeW5hbWljRWRnZUxhYmVsKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJaW50IERZTkFNSUNfRURHRV9MQUJFTCA9IDExOworCisJLyoqCisJICogVGhlIG1ldGEgb2JqZWN0IGlkIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguaW1wbC5TdGF0aWNFZGdlTGFiZWxJbXBsIDxlbT5TdGF0aWMgRWRnZSBMYWJlbDwvZW0+fScgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5pbXBsLlN0YXRpY0VkZ2VMYWJlbEltcGwKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5pbXBsLkdyYXBoUGFja2FnZUltcGwjZ2V0U3RhdGljRWRnZUxhYmVsKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJaW50IFNUQVRJQ19FREdFX0xBQkVMID0gMTM7CisKKwkvKioKKwkgKiBUaGUgbWV0YSBvYmplY3QgaWQgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5pbXBsLlVSSVRvRWRnZU1hcEVudHJ5SW1wbCA8ZW0+VVJJIFRvIEVkZ2UgTWFwIEVudHJ5PC9lbT59JyBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmltcGwuVVJJVG9FZGdlTWFwRW50cnlJbXBsCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguaW1wbC5HcmFwaFBhY2thZ2VJbXBsI2dldFVSSVRvRWRnZU1hcEVudHJ5KCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJaW50IFVSSV9UT19FREdFX01BUF9FTlRSWSA9IDE0OworCisJLyoqCisJICogVGhlIG1ldGEgb2JqZWN0IGlkIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguaW1wbC5VUklUb05vZGVNYXBFbnRyeUltcGwgPGVtPlVSSSBUbyBOb2RlIE1hcCBFbnRyeTwvZW0+fScgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5pbXBsLlVSSVRvTm9kZU1hcEVudHJ5SW1wbAorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmltcGwuR3JhcGhQYWNrYWdlSW1wbCNnZXRVUklUb05vZGVNYXBFbnRyeSgpCisJICogQGdlbmVyYXRlZAorCSAqLworCWludCBVUklfVE9fTk9ERV9NQVBfRU5UUlkgPSAxNTsKKworCS8qKgorCSAqIFRoZSBtZXRhIG9iamVjdCBpZCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmltcGwuVVJJVG9MYWJlbE1hcEVudHJ5SW1wbCA8ZW0+VVJJIFRvIExhYmVsIE1hcCBFbnRyeTwvZW0+fScgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5pbXBsLlVSSVRvTGFiZWxNYXBFbnRyeUltcGwKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5pbXBsLkdyYXBoUGFja2FnZUltcGwjZ2V0VVJJVG9MYWJlbE1hcEVudHJ5KCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJaW50IFVSSV9UT19MQUJFTF9NQVBfRU5UUlkgPSAxNjsKKworCS8qKgorCSAqIFRoZSBtZXRhIG9iamVjdCBpZCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmltcGwuVVJJVG9Ob2RlTGFiZWxNYXBFbnRyeUltcGwgPGVtPlVSSSBUbyBOb2RlIExhYmVsIE1hcCBFbnRyeTwvZW0+fScgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5pbXBsLlVSSVRvTm9kZUxhYmVsTWFwRW50cnlJbXBsCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguaW1wbC5HcmFwaFBhY2thZ2VJbXBsI2dldFVSSVRvTm9kZUxhYmVsTWFwRW50cnkoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlpbnQgVVJJX1RPX05PREVfTEFCRUxfTUFQX0VOVFJZID0gMTc7CisKKwkvKioKKwkgKiBUaGUgbWV0YSBvYmplY3QgaWQgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5pbXBsLlN0YXRpY0xhYmVsSW1wbCA8ZW0+U3RhdGljIExhYmVsPC9lbT59JyBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmltcGwuU3RhdGljTGFiZWxJbXBsCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguaW1wbC5HcmFwaFBhY2thZ2VJbXBsI2dldFN0YXRpY0xhYmVsKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJaW50IFNUQVRJQ19MQUJFTCA9IDE4OworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlVSSTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNUQVRJQ19OT0RFX0xBQkVMX19VUkkgPSBOT0RFX0xBQkVMX19VUkk7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VHlwZSBVUkk8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTVEFUSUNfTk9ERV9MQUJFTF9fVFlQRV9VUkkgPSBOT0RFX0xBQkVMX19UWVBFX1VSSTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5EdWJsaW4gQ29yZTwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNUQVRJQ19OT0RFX0xBQkVMX19EVUJMSU5fQ09SRSA9IE5PREVfTEFCRUxfX0RVQkxJTl9DT1JFOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlVSSSBPZiBJZGVudGlmaWFibGUgVG8gQmUgTGFiZWxlZDwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNUQVRJQ19OT0RFX0xBQkVMX19VUklfT0ZfSURFTlRJRklBQkxFX1RPX0JFX0xBQkVMRUQgPSBOT0RFX0xBQkVMX19VUklfT0ZfSURFTlRJRklBQkxFX1RPX0JFX0xBQkVMRUQ7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+Q3VycmVudCBWYWx1ZTwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNUQVRJQ19OT0RFX0xBQkVMX19DVVJSRU5UX1ZBTFVFID0gTk9ERV9MQUJFTF9fQ1VSUkVOVF9WQUxVRTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5JZGVudGlmaWFibGU8L2I+PC9lbT4nIHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTVEFUSUNfTk9ERV9MQUJFTF9fSURFTlRJRklBQkxFID0gTk9ERV9MQUJFTF9fSURFTlRJRklBQkxFOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPk5vZGU8L2I+PC9lbT4nIHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTVEFUSUNfTk9ERV9MQUJFTF9fTk9ERSA9IE5PREVfTEFCRUxfX05PREU7CisKKwkvKioKKwkgKiBUaGUgbnVtYmVyIG9mIHN0cnVjdHVyYWwgZmVhdHVyZXMgb2YgdGhlICc8ZW0+U3RhdGljIE5vZGUgTGFiZWw8L2VtPicgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU1RBVElDX05PREVfTEFCRUxfRkVBVFVSRV9DT1VOVCA9IE5PREVfTEFCRUxfRkVBVFVSRV9DT1VOVCArIDA7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+U2NlbmFyaW88L2I+PC9lbT4nIHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBVTlJFU09MVkVEX0lERU5USUZJQUJMRV9fU0NFTkFSSU8gPSAwOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPk1vZGVsPC9iPjwvZW0+JyByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgVU5SRVNPTFZFRF9JREVOVElGSUFCTEVfX01PREVMID0gMTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5HcmFwaDwvYj48L2VtPicgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFVOUkVTT0xWRURfSURFTlRJRklBQkxFX19HUkFQSCA9IDI7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+SWRlbnRpZmlhYmxlPC9iPjwvZW0+JyByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgVU5SRVNPTFZFRF9JREVOVElGSUFCTEVfX0lERU5USUZJQUJMRSA9IDM7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VW5yZXNvbHZlZCBVUkk8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBVTlJFU09MVkVEX0lERU5USUZJQUJMRV9fVU5SRVNPTFZFRF9VUkkgPSA0OworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkZpZWxkIE5hbWU8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBVTlJFU09MVkVEX0lERU5USUZJQUJMRV9fRklFTERfTkFNRSA9IDU7CisKKwkvKioKKwkgKiBUaGUgbnVtYmVyIG9mIHN0cnVjdHVyYWwgZmVhdHVyZXMgb2YgdGhlICc8ZW0+VW5yZXNvbHZlZCBJZGVudGlmaWFibGU8L2VtPicgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgVU5SRVNPTFZFRF9JREVOVElGSUFCTEVfRkVBVFVSRV9DT1VOVCA9IDY7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+S2V5PC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgVVJJX1RPX0lERU5USUZJQUJMRV9NQVBfRU5UUllfX0tFWSA9IDA7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VmFsdWU8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBVUklfVE9fSURFTlRJRklBQkxFX01BUF9FTlRSWV9fVkFMVUUgPSAxOworCisJLyoqCisJICogVGhlIG51bWJlciBvZiBzdHJ1Y3R1cmFsIGZlYXR1cmVzIG9mIHRoZSAnPGVtPlVSSSBUbyBJZGVudGlmaWFibGUgTWFwIEVudHJ5PC9lbT4nIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFVSSV9UT19JREVOVElGSUFCTEVfTUFQX0VOVFJZX0ZFQVRVUkVfQ09VTlQgPSAyOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlVSSTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IERZTkFNSUNfRURHRV9MQUJFTF9fVVJJID0gRFlOQU1JQ19MQUJFTF9fVVJJOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlR5cGUgVVJJPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgRFlOQU1JQ19FREdFX0xBQkVMX19UWVBFX1VSSSA9IERZTkFNSUNfTEFCRUxfX1RZUEVfVVJJOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkR1YmxpbiBDb3JlPC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgRFlOQU1JQ19FREdFX0xBQkVMX19EVUJMSU5fQ09SRSA9IERZTkFNSUNfTEFCRUxfX0RVQkxJTl9DT1JFOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlVSSSBPZiBJZGVudGlmaWFibGUgVG8gQmUgTGFiZWxlZDwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IERZTkFNSUNfRURHRV9MQUJFTF9fVVJJX09GX0lERU5USUZJQUJMRV9UT19CRV9MQUJFTEVEID0gRFlOQU1JQ19MQUJFTF9fVVJJX09GX0lERU5USUZJQUJMRV9UT19CRV9MQUJFTEVEOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkN1cnJlbnQgVmFsdWU8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBEWU5BTUlDX0VER0VfTEFCRUxfX0NVUlJFTlRfVkFMVUUgPSBEWU5BTUlDX0xBQkVMX19DVVJSRU5UX1ZBTFVFOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPklkZW50aWZpYWJsZTwvYj48L2VtPicgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IERZTkFNSUNfRURHRV9MQUJFTF9fSURFTlRJRklBQkxFID0gRFlOQU1JQ19MQUJFTF9fSURFTlRJRklBQkxFOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPk5leHQgVmFsdWUgVmFsaWQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBEWU5BTUlDX0VER0VfTEFCRUxfX05FWFRfVkFMVUVfVkFMSUQgPSBEWU5BTUlDX0xBQkVMX19ORVhUX1ZBTFVFX1ZBTElEOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPk5leHQgVmFsdWU8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBEWU5BTUlDX0VER0VfTEFCRUxfX05FWFRfVkFMVUUgPSBEWU5BTUlDX0xBQkVMX19ORVhUX1ZBTFVFOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkRlY29yYXRvcjwvYj48L2VtPicgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IERZTkFNSUNfRURHRV9MQUJFTF9fREVDT1JBVE9SID0gRFlOQU1JQ19MQUJFTF9fREVDT1JBVE9SOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkVkZ2U8L2I+PC9lbT4nIGNvbnRhaW5lciByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgRFlOQU1JQ19FREdFX0xBQkVMX19FREdFID0gRFlOQU1JQ19MQUJFTF9GRUFUVVJFX0NPVU5UICsgMDsKKworCS8qKgorCSAqIFRoZSBudW1iZXIgb2Ygc3RydWN0dXJhbCBmZWF0dXJlcyBvZiB0aGUgJzxlbT5EeW5hbWljIEVkZ2UgTGFiZWw8L2VtPicgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgRFlOQU1JQ19FREdFX0xBQkVMX0ZFQVRVUkVfQ09VTlQgPSBEWU5BTUlDX0xBQkVMX0ZFQVRVUkVfQ09VTlQgKyAxOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlVSSTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IEVER0VfTEFCRUxfX1VSSSA9IExBQkVMX19VUkk7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VHlwZSBVUkk8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBFREdFX0xBQkVMX19UWVBFX1VSSSA9IExBQkVMX19UWVBFX1VSSTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5EdWJsaW4gQ29yZTwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IEVER0VfTEFCRUxfX0RVQkxJTl9DT1JFID0gTEFCRUxfX0RVQkxJTl9DT1JFOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlVSSSBPZiBJZGVudGlmaWFibGUgVG8gQmUgTGFiZWxlZDwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IEVER0VfTEFCRUxfX1VSSV9PRl9JREVOVElGSUFCTEVfVE9fQkVfTEFCRUxFRCA9IExBQkVMX19VUklfT0ZfSURFTlRJRklBQkxFX1RPX0JFX0xBQkVMRUQ7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+Q3VycmVudCBWYWx1ZTwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IEVER0VfTEFCRUxfX0NVUlJFTlRfVkFMVUUgPSBMQUJFTF9fQ1VSUkVOVF9WQUxVRTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5JZGVudGlmaWFibGU8L2I+PC9lbT4nIHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBFREdFX0xBQkVMX19JREVOVElGSUFCTEUgPSBMQUJFTF9fSURFTlRJRklBQkxFOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkVkZ2U8L2I+PC9lbT4nIGNvbnRhaW5lciByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgRURHRV9MQUJFTF9fRURHRSA9IExBQkVMX0ZFQVRVUkVfQ09VTlQgKyAwOworCisJLyoqCisJICogVGhlIG51bWJlciBvZiBzdHJ1Y3R1cmFsIGZlYXR1cmVzIG9mIHRoZSAnPGVtPkVkZ2UgTGFiZWw8L2VtPicgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgRURHRV9MQUJFTF9GRUFUVVJFX0NPVU5UID0gTEFCRUxfRkVBVFVSRV9DT1VOVCArIDE7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VVJJPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU1RBVElDX0VER0VfTEFCRUxfX1VSSSA9IEVER0VfTEFCRUxfX1VSSTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5UeXBlIFVSSTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNUQVRJQ19FREdFX0xBQkVMX19UWVBFX1VSSSA9IEVER0VfTEFCRUxfX1RZUEVfVVJJOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkR1YmxpbiBDb3JlPC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU1RBVElDX0VER0VfTEFCRUxfX0RVQkxJTl9DT1JFID0gRURHRV9MQUJFTF9fRFVCTElOX0NPUkU7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VVJJIE9mIElkZW50aWZpYWJsZSBUbyBCZSBMYWJlbGVkPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU1RBVElDX0VER0VfTEFCRUxfX1VSSV9PRl9JREVOVElGSUFCTEVfVE9fQkVfTEFCRUxFRCA9IEVER0VfTEFCRUxfX1VSSV9PRl9JREVOVElGSUFCTEVfVE9fQkVfTEFCRUxFRDsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5DdXJyZW50IFZhbHVlPC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU1RBVElDX0VER0VfTEFCRUxfX0NVUlJFTlRfVkFMVUUgPSBFREdFX0xBQkVMX19DVVJSRU5UX1ZBTFVFOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPklkZW50aWZpYWJsZTwvYj48L2VtPicgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNUQVRJQ19FREdFX0xBQkVMX19JREVOVElGSUFCTEUgPSBFREdFX0xBQkVMX19JREVOVElGSUFCTEU7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RWRnZTwvYj48L2VtPicgY29udGFpbmVyIHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTVEFUSUNfRURHRV9MQUJFTF9fRURHRSA9IEVER0VfTEFCRUxfX0VER0U7CisKKwkvKioKKwkgKiBUaGUgbnVtYmVyIG9mIHN0cnVjdHVyYWwgZmVhdHVyZXMgb2YgdGhlICc8ZW0+U3RhdGljIEVkZ2UgTGFiZWw8L2VtPicgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU1RBVElDX0VER0VfTEFCRUxfRkVBVFVSRV9DT1VOVCA9IEVER0VfTEFCRUxfRkVBVFVSRV9DT1VOVCArIDA7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+S2V5PC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgVVJJX1RPX0VER0VfTUFQX0VOVFJZX19LRVkgPSAwOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlZhbHVlPC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgVVJJX1RPX0VER0VfTUFQX0VOVFJZX19WQUxVRSA9IDE7CisKKwkvKioKKwkgKiBUaGUgbnVtYmVyIG9mIHN0cnVjdHVyYWwgZmVhdHVyZXMgb2YgdGhlICc8ZW0+VVJJIFRvIEVkZ2UgTWFwIEVudHJ5PC9lbT4nIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFVSSV9UT19FREdFX01BUF9FTlRSWV9GRUFUVVJFX0NPVU5UID0gMjsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5LZXk8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBVUklfVE9fTk9ERV9NQVBfRU5UUllfX0tFWSA9IDA7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VmFsdWU8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBVUklfVE9fTk9ERV9NQVBfRU5UUllfX1ZBTFVFID0gMTsKKworCS8qKgorCSAqIFRoZSBudW1iZXIgb2Ygc3RydWN0dXJhbCBmZWF0dXJlcyBvZiB0aGUgJzxlbT5VUkkgVG8gTm9kZSBNYXAgRW50cnk8L2VtPicgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgVVJJX1RPX05PREVfTUFQX0VOVFJZX0ZFQVRVUkVfQ09VTlQgPSAyOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPktleTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFVSSV9UT19MQUJFTF9NQVBfRU5UUllfX0tFWSA9IDA7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VmFsdWU8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBVUklfVE9fTEFCRUxfTUFQX0VOVFJZX19WQUxVRSA9IDE7CisKKwkvKioKKwkgKiBUaGUgbnVtYmVyIG9mIHN0cnVjdHVyYWwgZmVhdHVyZXMgb2YgdGhlICc8ZW0+VVJJIFRvIExhYmVsIE1hcCBFbnRyeTwvZW0+JyBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBVUklfVE9fTEFCRUxfTUFQX0VOVFJZX0ZFQVRVUkVfQ09VTlQgPSAyOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPktleTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFVSSV9UT19OT0RFX0xBQkVMX01BUF9FTlRSWV9fS0VZID0gMDsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5WYWx1ZTwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFVSSV9UT19OT0RFX0xBQkVMX01BUF9FTlRSWV9fVkFMVUUgPSAxOworCisJLyoqCisJICogVGhlIG51bWJlciBvZiBzdHJ1Y3R1cmFsIGZlYXR1cmVzIG9mIHRoZSAnPGVtPlVSSSBUbyBOb2RlIExhYmVsIE1hcCBFbnRyeTwvZW0+JyBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBVUklfVE9fTk9ERV9MQUJFTF9NQVBfRU5UUllfRkVBVFVSRV9DT1VOVCA9IDI7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VVJJPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU1RBVElDX0xBQkVMX19VUkkgPSBMQUJFTF9fVVJJOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlR5cGUgVVJJPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU1RBVElDX0xBQkVMX19UWVBFX1VSSSA9IExBQkVMX19UWVBFX1VSSTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5EdWJsaW4gQ29yZTwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNUQVRJQ19MQUJFTF9fRFVCTElOX0NPUkUgPSBMQUJFTF9fRFVCTElOX0NPUkU7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VVJJIE9mIElkZW50aWZpYWJsZSBUbyBCZSBMYWJlbGVkPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU1RBVElDX0xBQkVMX19VUklfT0ZfSURFTlRJRklBQkxFX1RPX0JFX0xBQkVMRUQgPSBMQUJFTF9fVVJJX09GX0lERU5USUZJQUJMRV9UT19CRV9MQUJFTEVEOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkN1cnJlbnQgVmFsdWU8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTVEFUSUNfTEFCRUxfX0NVUlJFTlRfVkFMVUUgPSBMQUJFTF9fQ1VSUkVOVF9WQUxVRTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5JZGVudGlmaWFibGU8L2I+PC9lbT4nIHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTVEFUSUNfTEFCRUxfX0lERU5USUZJQUJMRSA9IExBQkVMX19JREVOVElGSUFCTEU7CisKKwkvKioKKwkgKiBUaGUgbnVtYmVyIG9mIHN0cnVjdHVyYWwgZmVhdHVyZXMgb2YgdGhlICc8ZW0+U3RhdGljIExhYmVsPC9lbT4nIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNUQVRJQ19MQUJFTF9GRUFUVVJFX0NPVU5UID0gTEFCRUxfRkVBVFVSRV9DT1VOVCArIDA7CisKKwkvKioKKwkgKiBUaGUgbWV0YSBvYmplY3QgaWQgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5pbXBsLkdyYXBoUGFydGl0aW9uZXJJbXBsIDxlbT5QYXJ0aXRpb25lcjwvZW0+fScgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5pbXBsLkdyYXBoUGFydGl0aW9uZXJJbXBsCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguaW1wbC5HcmFwaFBhY2thZ2VJbXBsI2dldEdyYXBoUGFydGl0aW9uZXIoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlpbnQgR1JBUEhfUEFSVElUSU9ORVIgPSAxOTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5OdW0gUHJvY2Vzc2VzPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgR1JBUEhfUEFSVElUSU9ORVJfX05VTV9QUk9DRVNTRVMgPSAwOworCisJLyoqCisJICogVGhlIG51bWJlciBvZiBzdHJ1Y3R1cmFsIGZlYXR1cmVzIG9mIHRoZSAnPGVtPlBhcnRpdGlvbmVyPC9lbT4nIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IEdSQVBIX1BBUlRJVElPTkVSX0ZFQVRVUkVfQ09VTlQgPSAxOworCisJLyoqCisJICogVGhlIG1ldGEgb2JqZWN0IGlkIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguaW1wbC5TaW1wbGVHcmFwaFBhcnRpdGlvbmVySW1wbCA8ZW0+U2ltcGxlIEdyYXBoIFBhcnRpdGlvbmVyPC9lbT59JyBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmltcGwuU2ltcGxlR3JhcGhQYXJ0aXRpb25lckltcGwKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5pbXBsLkdyYXBoUGFja2FnZUltcGwjZ2V0U2ltcGxlR3JhcGhQYXJ0aXRpb25lcigpCisJICogQGdlbmVyYXRlZAorCSAqLworCWludCBTSU1QTEVfR1JBUEhfUEFSVElUSU9ORVIgPSAyMDsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5OdW0gUHJvY2Vzc2VzPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU0lNUExFX0dSQVBIX1BBUlRJVElPTkVSX19OVU1fUFJPQ0VTU0VTID0gR1JBUEhfUEFSVElUSU9ORVJfX05VTV9QUk9DRVNTRVM7CisKKwkvKioKKwkgKiBUaGUgbnVtYmVyIG9mIHN0cnVjdHVyYWwgZmVhdHVyZXMgb2YgdGhlICc8ZW0+U2ltcGxlIEdyYXBoIFBhcnRpdGlvbmVyPC9lbT4nIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNJTVBMRV9HUkFQSF9QQVJUSVRJT05FUl9GRUFUVVJFX0NPVU5UID0gR1JBUEhfUEFSVElUSU9ORVJfRkVBVFVSRV9DT1VOVCArIDA7CisKKwkvKioKKwkgKiBUaGUgbWV0YSBvYmplY3QgaWQgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5pbXBsLkV4Y2hhbmdlSW1wbCA8ZW0+RXhjaGFuZ2U8L2VtPn0nIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguaW1wbC5FeGNoYW5nZUltcGwKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5pbXBsLkdyYXBoUGFja2FnZUltcGwjZ2V0RXhjaGFuZ2UoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlpbnQgRVhDSEFOR0UgPSAyMTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5PdGhlciBMYWJlbDwvYj48L2VtPicgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IEVYQ0hBTkdFX19PVEhFUl9MQUJFTCA9IENvbW1vblBhY2thZ2UuQ09NUEFSQUJMRV9GRUFUVVJFX0NPVU5UICsgMDsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5Db3VudDwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IEVYQ0hBTkdFX19DT1VOVCA9IENvbW1vblBhY2thZ2UuQ09NUEFSQUJMRV9GRUFUVVJFX0NPVU5UICsgMTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5UeXBlPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgRVhDSEFOR0VfX1RZUEUgPSBDb21tb25QYWNrYWdlLkNPTVBBUkFCTEVfRkVBVFVSRV9DT1VOVCArIDI7CisKKwkvKioKKwkgKiBUaGUgbnVtYmVyIG9mIHN0cnVjdHVyYWwgZmVhdHVyZXMgb2YgdGhlICc8ZW0+RXhjaGFuZ2U8L2VtPicgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgRVhDSEFOR0VfRkVBVFVSRV9DT1VOVCA9IENvbW1vblBhY2thZ2UuQ09NUEFSQUJMRV9GRUFUVVJFX0NPVU5UICsgMzsKKworCS8qKgorCSAqIFRoZSBtZXRhIG9iamVjdCBpZCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmltcGwuSW50ZWdyYXRpb25MYWJlbEltcGwgPGVtPkludGVncmF0aW9uIExhYmVsPC9lbT59JyBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmltcGwuSW50ZWdyYXRpb25MYWJlbEltcGwKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5pbXBsLkdyYXBoUGFja2FnZUltcGwjZ2V0SW50ZWdyYXRpb25MYWJlbCgpCisJICogQGdlbmVyYXRlZAorCSAqLworCWludCBJTlRFR1JBVElPTl9MQUJFTCA9IDIyOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlVSSTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IElOVEVHUkFUSU9OX0xBQkVMX19VUkkgPSBEWU5BTUlDX05PREVfTEFCRUxfX1VSSTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5UeXBlIFVSSTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IElOVEVHUkFUSU9OX0xBQkVMX19UWVBFX1VSSSA9IERZTkFNSUNfTk9ERV9MQUJFTF9fVFlQRV9VUkk7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RHVibGluIENvcmU8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBJTlRFR1JBVElPTl9MQUJFTF9fRFVCTElOX0NPUkUgPSBEWU5BTUlDX05PREVfTEFCRUxfX0RVQkxJTl9DT1JFOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlVSSSBPZiBJZGVudGlmaWFibGUgVG8gQmUgTGFiZWxlZDwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IElOVEVHUkFUSU9OX0xBQkVMX19VUklfT0ZfSURFTlRJRklBQkxFX1RPX0JFX0xBQkVMRUQgPSBEWU5BTUlDX05PREVfTEFCRUxfX1VSSV9PRl9JREVOVElGSUFCTEVfVE9fQkVfTEFCRUxFRDsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5DdXJyZW50IFZhbHVlPC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgSU5URUdSQVRJT05fTEFCRUxfX0NVUlJFTlRfVkFMVUUgPSBEWU5BTUlDX05PREVfTEFCRUxfX0NVUlJFTlRfVkFMVUU7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+SWRlbnRpZmlhYmxlPC9iPjwvZW0+JyByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgSU5URUdSQVRJT05fTEFCRUxfX0lERU5USUZJQUJMRSA9IERZTkFNSUNfTk9ERV9MQUJFTF9fSURFTlRJRklBQkxFOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPk5leHQgVmFsdWUgVmFsaWQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBJTlRFR1JBVElPTl9MQUJFTF9fTkVYVF9WQUxVRV9WQUxJRCA9IERZTkFNSUNfTk9ERV9MQUJFTF9fTkVYVF9WQUxVRV9WQUxJRDsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5OZXh0IFZhbHVlPC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgSU5URUdSQVRJT05fTEFCRUxfX05FWFRfVkFMVUUgPSBEWU5BTUlDX05PREVfTEFCRUxfX05FWFRfVkFMVUU7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RGVjb3JhdG9yPC9iPjwvZW0+JyByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgSU5URUdSQVRJT05fTEFCRUxfX0RFQ09SQVRPUiA9IERZTkFNSUNfTk9ERV9MQUJFTF9fREVDT1JBVE9SOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPk5vZGU8L2I+PC9lbT4nIHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBJTlRFR1JBVElPTl9MQUJFTF9fTk9ERSA9IERZTkFNSUNfTk9ERV9MQUJFTF9fTk9ERTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5EZWx0YSBWYWx1ZTwvYj48L2VtPicgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IElOVEVHUkFUSU9OX0xBQkVMX19ERUxUQV9WQUxVRSA9IERZTkFNSUNfTk9ERV9MQUJFTF9GRUFUVVJFX0NPVU5UICsgMDsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5UZW1wIFZhbHVlPC9iPjwvZW0+JyByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgSU5URUdSQVRJT05fTEFCRUxfX1RFTVBfVkFMVUUgPSBEWU5BTUlDX05PREVfTEFCRUxfRkVBVFVSRV9DT1VOVCArIDE7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+UHJvYmUgVmFsdWU8L2I+PC9lbT4nIHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBJTlRFR1JBVElPTl9MQUJFTF9fUFJPQkVfVkFMVUUgPSBEWU5BTUlDX05PREVfTEFCRUxfRkVBVFVSRV9DT1VOVCArIDI7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RXJyb3IgU2NhbGU8L2I+PC9lbT4nIHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBJTlRFR1JBVElPTl9MQUJFTF9fRVJST1JfU0NBTEUgPSBEWU5BTUlDX05PREVfTEFCRUxfRkVBVFVSRV9DT1VOVCArIDM7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+SWRlbnRpZmllcjwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IElOVEVHUkFUSU9OX0xBQkVMX19JREVOVElGSUVSID0gRFlOQU1JQ19OT0RFX0xBQkVMX0ZFQVRVUkVfQ09VTlQgKyA0OworCisJLyoqCisJICogVGhlIG51bWJlciBvZiBzdHJ1Y3R1cmFsIGZlYXR1cmVzIG9mIHRoZSAnPGVtPkludGVncmF0aW9uIExhYmVsPC9lbT4nIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IElOVEVHUkFUSU9OX0xBQkVMX0ZFQVRVUkVfQ09VTlQgPSBEWU5BTUlDX05PREVfTEFCRUxfRkVBVFVSRV9DT1VOVCArIDU7CisKKwkvKioKKwkgKiBUaGUgbWV0YSBvYmplY3QgaWQgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5pbXBsLkludGVncmF0aW9uTGFiZWxWYWx1ZUltcGwgPGVtPkludGVncmF0aW9uIExhYmVsIFZhbHVlPC9lbT59JyBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmltcGwuSW50ZWdyYXRpb25MYWJlbFZhbHVlSW1wbAorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmltcGwuR3JhcGhQYWNrYWdlSW1wbCNnZXRJbnRlZ3JhdGlvbkxhYmVsVmFsdWUoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlpbnQgSU5URUdSQVRJT05fTEFCRUxfVkFMVUUgPSAyMzsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5BcnJpdmFsczwvYj48L2VtPicgcmVmZXJlbmNlIGxpc3QuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgSU5URUdSQVRJT05fTEFCRUxfVkFMVUVfX0FSUklWQUxTID0gTEFCRUxfVkFMVUVfRkVBVFVSRV9DT1VOVCArIDA7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RGVwYXJ0dXJlczwvYj48L2VtPicgcmVmZXJlbmNlIGxpc3QuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgSU5URUdSQVRJT05fTEFCRUxfVkFMVUVfX0RFUEFSVFVSRVMgPSBMQUJFTF9WQUxVRV9GRUFUVVJFX0NPVU5UICsgMTsKKworCS8qKgorCSAqIFRoZSBudW1iZXIgb2Ygc3RydWN0dXJhbCBmZWF0dXJlcyBvZiB0aGUgJzxlbT5JbnRlZ3JhdGlvbiBMYWJlbCBWYWx1ZTwvZW0+JyBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBJTlRFR1JBVElPTl9MQUJFTF9WQUxVRV9GRUFUVVJFX0NPVU5UID0gTEFCRUxfVkFMVUVfRkVBVFVSRV9DT1VOVCArIDI7CisKKwkvKioKKwkgKiBUaGUgbWV0YSBvYmplY3QgaWQgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5FeGNoYW5nZVR5cGUgPGVtPkV4Y2hhbmdlIFR5cGU8L2VtPn0nIGVudW0uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5FeGNoYW5nZVR5cGUKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5pbXBsLkdyYXBoUGFja2FnZUltcGwjZ2V0RXhjaGFuZ2VUeXBlKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJaW50IEVYQ0hBTkdFX1RZUEUgPSAyNDsKKworCS8qKgorCSAqIFRoZSBtZXRhIG9iamVjdCBpZCBmb3IgdGhlICc8ZW0+SWxsZWdhbCBBcmd1bWVudCBFeGNlcHRpb248L2VtPicgZGF0YSB0eXBlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSBqYXZhLmxhbmcuSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguaW1wbC5HcmFwaFBhY2thZ2VJbXBsI2dldElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigpCisJICogQGdlbmVyYXRlZAorCSAqLworCWludCBJTExFR0FMX0FSR1VNRU5UX0VYQ0VQVElPTiA9IDI1OworCisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguRHluYW1pY0xhYmVsIDxlbT5EeW5hbWljIExhYmVsPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAnPGVtPkR5bmFtaWMgTGFiZWw8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguRHluYW1pY0xhYmVsCisJICogQGdlbmVyYXRlZAorCSAqLworCUVDbGFzcyBnZXREeW5hbWljTGFiZWwoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkR5bmFtaWNMYWJlbCNpc05leHRWYWx1ZVZhbGlkIDxlbT5OZXh0IFZhbHVlIFZhbGlkPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+TmV4dCBWYWx1ZSBWYWxpZDwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5EeW5hbWljTGFiZWwjaXNOZXh0VmFsdWVWYWxpZCgpCisJICogQHNlZSAjZ2V0RHluYW1pY0xhYmVsKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUF0dHJpYnV0ZSBnZXREeW5hbWljTGFiZWxfTmV4dFZhbHVlVmFsaWQoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgY29udGFpbm1lbnQgcmVmZXJlbmNlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkR5bmFtaWNMYWJlbCNnZXROZXh0VmFsdWUgPGVtPk5leHQgVmFsdWU8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBjb250YWlubWVudCByZWZlcmVuY2UgJzxlbT5OZXh0IFZhbHVlPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkR5bmFtaWNMYWJlbCNnZXROZXh0VmFsdWUoKQorCSAqIEBzZWUgI2dldER5bmFtaWNMYWJlbCgpCisJICogQGdlbmVyYXRlZAorCSAqLworCUVSZWZlcmVuY2UgZ2V0RHluYW1pY0xhYmVsX05leHRWYWx1ZSgpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSByZWZlcmVuY2UgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguRHluYW1pY0xhYmVsI2dldERlY29yYXRvciA8ZW0+RGVjb3JhdG9yPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgcmVmZXJlbmNlICc8ZW0+RGVjb3JhdG9yPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkR5bmFtaWNMYWJlbCNnZXREZWNvcmF0b3IoKQorCSAqIEBzZWUgI2dldER5bmFtaWNMYWJlbCgpCisJICogQGdlbmVyYXRlZAorCSAqLworCUVSZWZlcmVuY2UgZ2V0RHluYW1pY0xhYmVsX0RlY29yYXRvcigpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkR5bmFtaWNOb2RlTGFiZWwgPGVtPkR5bmFtaWMgTm9kZSBMYWJlbDwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJzxlbT5EeW5hbWljIE5vZGUgTGFiZWw8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguRHluYW1pY05vZGVMYWJlbAorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQ2xhc3MgZ2V0RHluYW1pY05vZGVMYWJlbCgpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkVkZ2UgPGVtPkVkZ2U8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICc8ZW0+RWRnZTwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5FZGdlCisJICogQGdlbmVyYXRlZAorCSAqLworCUVDbGFzcyBnZXRFZGdlKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIHJlZmVyZW5jZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5FZGdlI2dldEEgPGVtPkE8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSByZWZlcmVuY2UgJzxlbT5BPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkVkZ2UjZ2V0QSgpCisJICogQHNlZSAjZ2V0RWRnZSgpCisJICogQGdlbmVyYXRlZAorCSAqLworCUVSZWZlcmVuY2UgZ2V0RWRnZV9BKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5FZGdlI2dldE5vZGVBVVJJIDxlbT5Ob2RlIEFVUkk8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxlbT5Ob2RlIEFVUkk8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguRWRnZSNnZXROb2RlQVVSSSgpCisJICogQHNlZSAjZ2V0RWRnZSgpCisJICogQGdlbmVyYXRlZAorCSAqLworCUVBdHRyaWJ1dGUgZ2V0RWRnZV9Ob2RlQVVSSSgpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSByZWZlcmVuY2UgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguRWRnZSNnZXRCIDxlbT5CPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgcmVmZXJlbmNlICc8ZW0+QjwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5FZGdlI2dldEIoKQorCSAqIEBzZWUgI2dldEVkZ2UoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFUmVmZXJlbmNlIGdldEVkZ2VfQigpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguRWRnZSNnZXROb2RlQlVSSSA8ZW0+Tm9kZSBCVVJJPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+Tm9kZSBCVVJJPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkVkZ2UjZ2V0Tm9kZUJVUkkoKQorCSAqIEBzZWUgI2dldEVkZ2UoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQXR0cmlidXRlIGdldEVkZ2VfTm9kZUJVUkkoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgY29udGFpbm1lbnQgcmVmZXJlbmNlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkVkZ2UjZ2V0TGFiZWwgPGVtPkxhYmVsPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgY29udGFpbm1lbnQgcmVmZXJlbmNlICc8ZW0+TGFiZWw8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguRWRnZSNnZXRMYWJlbCgpCisJICogQHNlZSAjZ2V0RWRnZSgpCisJICogQGdlbmVyYXRlZAorCSAqLworCUVSZWZlcmVuY2UgZ2V0RWRnZV9MYWJlbCgpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguRWRnZSNpc0RpcmVjdGVkIDxlbT5EaXJlY3RlZDwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPGVtPkRpcmVjdGVkPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkVkZ2UjaXNEaXJlY3RlZCgpCisJICogQHNlZSAjZ2V0RWRnZSgpCisJICogQGdlbmVyYXRlZAorCSAqLworCUVBdHRyaWJ1dGUgZ2V0RWRnZV9EaXJlY3RlZCgpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkdyYXBoIDxlbT5HcmFwaDwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJzxlbT5HcmFwaDwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5HcmFwaAorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQ2xhc3MgZ2V0R3JhcGgoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgbWFwICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkdyYXBoI2dldEdyYXBoTGFiZWxzIDxlbT5HcmFwaCBMYWJlbHM8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBtYXAgJzxlbT5HcmFwaCBMYWJlbHM8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguR3JhcGgjZ2V0R3JhcGhMYWJlbHMoKQorCSAqIEBzZWUgI2dldEdyYXBoKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRVJlZmVyZW5jZSBnZXRHcmFwaF9HcmFwaExhYmVscygpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBtYXAgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguR3JhcGgjZ2V0Tm9kZUxhYmVscyA8ZW0+Tm9kZSBMYWJlbHM8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBtYXAgJzxlbT5Ob2RlIExhYmVsczwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5HcmFwaCNnZXROb2RlTGFiZWxzKCkKKwkgKiBAc2VlICNnZXRHcmFwaCgpCisJICogQGdlbmVyYXRlZAorCSAqLworCUVSZWZlcmVuY2UgZ2V0R3JhcGhfTm9kZUxhYmVscygpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSByZWZlcmVuY2UgbGlzdCAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5HcmFwaCNnZXREeW5hbWljTGFiZWxzIDxlbT5EeW5hbWljIExhYmVsczwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIHJlZmVyZW5jZSBsaXN0ICc8ZW0+RHluYW1pYyBMYWJlbHM8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguR3JhcGgjZ2V0RHluYW1pY0xhYmVscygpCisJICogQHNlZSAjZ2V0R3JhcGgoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFUmVmZXJlbmNlIGdldEdyYXBoX0R5bmFtaWNMYWJlbHMoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkdyYXBoI2dldE51bUVkZ2VzIDxlbT5OdW0gRWRnZXM8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxlbT5OdW0gRWRnZXM8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguR3JhcGgjZ2V0TnVtRWRnZXMoKQorCSAqIEBzZWUgI2dldEdyYXBoKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUF0dHJpYnV0ZSBnZXRHcmFwaF9OdW1FZGdlcygpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguR3JhcGgjZ2V0TnVtTm9kZXMgPGVtPk51bSBOb2RlczwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPGVtPk51bSBOb2RlczwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5HcmFwaCNnZXROdW1Ob2RlcygpCisJICogQHNlZSAjZ2V0R3JhcGgoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQXR0cmlidXRlIGdldEdyYXBoX051bU5vZGVzKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5HcmFwaCNnZXROdW1HcmFwaExhYmVscyA8ZW0+TnVtIEdyYXBoIExhYmVsczwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPGVtPk51bSBHcmFwaCBMYWJlbHM8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguR3JhcGgjZ2V0TnVtR3JhcGhMYWJlbHMoKQorCSAqIEBzZWUgI2dldEdyYXBoKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUF0dHJpYnV0ZSBnZXRHcmFwaF9OdW1HcmFwaExhYmVscygpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguR3JhcGgjZ2V0TnVtTm9kZUxhYmVscyA8ZW0+TnVtIE5vZGUgTGFiZWxzPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+TnVtIE5vZGUgTGFiZWxzPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkdyYXBoI2dldE51bU5vZGVMYWJlbHMoKQorCSAqIEBzZWUgI2dldEdyYXBoKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUF0dHJpYnV0ZSBnZXRHcmFwaF9OdW1Ob2RlTGFiZWxzKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5HcmFwaCNnZXROdW1EeW5hbWljTGFiZWxzIDxlbT5OdW0gRHluYW1pYyBMYWJlbHM8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxlbT5OdW0gRHluYW1pYyBMYWJlbHM8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguR3JhcGgjZ2V0TnVtRHluYW1pY0xhYmVscygpCisJICogQHNlZSAjZ2V0R3JhcGgoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQXR0cmlidXRlIGdldEdyYXBoX051bUR5bmFtaWNMYWJlbHMoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3QgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguR3JhcGgjZ2V0VW5yZXNvbHZlZElkZW50aWZpYWJsZXMgPGVtPlVucmVzb2x2ZWQgSWRlbnRpZmlhYmxlczwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0ICc8ZW0+VW5yZXNvbHZlZCBJZGVudGlmaWFibGVzPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkdyYXBoI2dldFVucmVzb2x2ZWRJZGVudGlmaWFibGVzKCkKKwkgKiBAc2VlICNnZXRHcmFwaCgpCisJICogQGdlbmVyYXRlZAorCSAqLworCUVSZWZlcmVuY2UgZ2V0R3JhcGhfVW5yZXNvbHZlZElkZW50aWZpYWJsZXMoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3QgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguR3JhcGgjZ2V0RGVjb3JhdG9ycyA8ZW0+RGVjb3JhdG9yczwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0ICc8ZW0+RGVjb3JhdG9yczwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5HcmFwaCNnZXREZWNvcmF0b3JzKCkKKwkgKiBAc2VlICNnZXRHcmFwaCgpCisJICogQGdlbmVyYXRlZAorCSAqLworCUVSZWZlcmVuY2UgZ2V0R3JhcGhfRGVjb3JhdG9ycygpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBjb250YWlubWVudCByZWZlcmVuY2UgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguR3JhcGgjZ2V0VGltZSA8ZW0+VGltZTwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGNvbnRhaW5tZW50IHJlZmVyZW5jZSAnPGVtPlRpbWU8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguR3JhcGgjZ2V0VGltZSgpCisJICogQHNlZSAjZ2V0R3JhcGgoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFUmVmZXJlbmNlIGdldEdyYXBoX1RpbWUoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgbWFwICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkdyYXBoI2dldE5vZGVzIDxlbT5Ob2RlczwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIG1hcCAnPGVtPk5vZGVzPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkdyYXBoI2dldE5vZGVzKCkKKwkgKiBAc2VlICNnZXRHcmFwaCgpCisJICogQGdlbmVyYXRlZAorCSAqLworCUVSZWZlcmVuY2UgZ2V0R3JhcGhfTm9kZXMoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgbWFwICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkdyYXBoI2dldEVkZ2VzIDxlbT5FZGdlczwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIG1hcCAnPGVtPkVkZ2VzPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkdyYXBoI2dldEVkZ2VzKCkKKwkgKiBAc2VlICNnZXRHcmFwaCgpCisJICogQGdlbmVyYXRlZAorCSAqLworCUVSZWZlcmVuY2UgZ2V0R3JhcGhfRWRnZXMoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5MYWJlbCA8ZW0+TGFiZWw8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICc8ZW0+TGFiZWw8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguTGFiZWwKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUNsYXNzIGdldExhYmVsKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5MYWJlbCNnZXRVUklPZklkZW50aWZpYWJsZVRvQmVMYWJlbGVkIDxlbT5VUkkgT2YgSWRlbnRpZmlhYmxlIFRvIEJlIExhYmVsZWQ8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxlbT5VUkkgT2YgSWRlbnRpZmlhYmxlIFRvIEJlIExhYmVsZWQ8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguTGFiZWwjZ2V0VVJJT2ZJZGVudGlmaWFibGVUb0JlTGFiZWxlZCgpCisJICogQHNlZSAjZ2V0TGFiZWwoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQXR0cmlidXRlIGdldExhYmVsX1VSSU9mSWRlbnRpZmlhYmxlVG9CZUxhYmVsZWQoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgY29udGFpbm1lbnQgcmVmZXJlbmNlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkxhYmVsI2dldEN1cnJlbnRWYWx1ZSA8ZW0+Q3VycmVudCBWYWx1ZTwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGNvbnRhaW5tZW50IHJlZmVyZW5jZSAnPGVtPkN1cnJlbnQgVmFsdWU8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguTGFiZWwjZ2V0Q3VycmVudFZhbHVlKCkKKwkgKiBAc2VlICNnZXRMYWJlbCgpCisJICogQGdlbmVyYXRlZAorCSAqLworCUVSZWZlcmVuY2UgZ2V0TGFiZWxfQ3VycmVudFZhbHVlKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIHJlZmVyZW5jZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5MYWJlbCNnZXRJZGVudGlmaWFibGUgPGVtPklkZW50aWZpYWJsZTwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIHJlZmVyZW5jZSAnPGVtPklkZW50aWZpYWJsZTwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5MYWJlbCNnZXRJZGVudGlmaWFibGUoKQorCSAqIEBzZWUgI2dldExhYmVsKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRVJlZmVyZW5jZSBnZXRMYWJlbF9JZGVudGlmaWFibGUoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5MYWJlbFZhbHVlIDxlbT5MYWJlbCBWYWx1ZTwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJzxlbT5MYWJlbCBWYWx1ZTwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5MYWJlbFZhbHVlCisJICogQGdlbmVyYXRlZAorCSAqLworCUVDbGFzcyBnZXRMYWJlbFZhbHVlKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguTm9kZSA8ZW0+Tm9kZTwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJzxlbT5Ob2RlPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLk5vZGUKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUNsYXNzIGdldE5vZGUoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgcmVmZXJlbmNlIGxpc3QgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguTm9kZSNnZXRFZGdlcyA8ZW0+RWRnZXM8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSByZWZlcmVuY2UgbGlzdCAnPGVtPkVkZ2VzPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLk5vZGUjZ2V0RWRnZXMoKQorCSAqIEBzZWUgI2dldE5vZGUoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFUmVmZXJlbmNlIGdldE5vZGVfRWRnZXMoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgcmVmZXJlbmNlIGxpc3QgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguTm9kZSNnZXRMYWJlbHMgPGVtPkxhYmVsczwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIHJlZmVyZW5jZSBsaXN0ICc8ZW0+TGFiZWxzPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLk5vZGUjZ2V0TGFiZWxzKCkKKwkgKiBAc2VlICNnZXROb2RlKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRVJlZmVyZW5jZSBnZXROb2RlX0xhYmVscygpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLk5vZGVMYWJlbCA8ZW0+Tm9kZSBMYWJlbDwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJzxlbT5Ob2RlIExhYmVsPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLk5vZGVMYWJlbAorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQ2xhc3MgZ2V0Tm9kZUxhYmVsKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIHJlZmVyZW5jZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5Ob2RlTGFiZWwjZ2V0Tm9kZSA8ZW0+Tm9kZTwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIHJlZmVyZW5jZSAnPGVtPk5vZGU8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguTm9kZUxhYmVsI2dldE5vZGUoKQorCSAqIEBzZWUgI2dldE5vZGVMYWJlbCgpCisJICogQGdlbmVyYXRlZAorCSAqLworCUVSZWZlcmVuY2UgZ2V0Tm9kZUxhYmVsX05vZGUoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5TdGF0aWNOb2RlTGFiZWwgPGVtPlN0YXRpYyBOb2RlIExhYmVsPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAnPGVtPlN0YXRpYyBOb2RlIExhYmVsPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLlN0YXRpY05vZGVMYWJlbAorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQ2xhc3MgZ2V0U3RhdGljTm9kZUxhYmVsKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguVW5yZXNvbHZlZElkZW50aWZpYWJsZSA8ZW0+VW5yZXNvbHZlZCBJZGVudGlmaWFibGU8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICc8ZW0+VW5yZXNvbHZlZCBJZGVudGlmaWFibGU8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguVW5yZXNvbHZlZElkZW50aWZpYWJsZQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQ2xhc3MgZ2V0VW5yZXNvbHZlZElkZW50aWZpYWJsZSgpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSByZWZlcmVuY2UgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguVW5yZXNvbHZlZElkZW50aWZpYWJsZSNnZXRTY2VuYXJpbyA8ZW0+U2NlbmFyaW88L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSByZWZlcmVuY2UgJzxlbT5TY2VuYXJpbzwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5VbnJlc29sdmVkSWRlbnRpZmlhYmxlI2dldFNjZW5hcmlvKCkKKwkgKiBAc2VlICNnZXRVbnJlc29sdmVkSWRlbnRpZmlhYmxlKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRVJlZmVyZW5jZSBnZXRVbnJlc29sdmVkSWRlbnRpZmlhYmxlX1NjZW5hcmlvKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIHJlZmVyZW5jZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5VbnJlc29sdmVkSWRlbnRpZmlhYmxlI2dldE1vZGVsIDxlbT5Nb2RlbDwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIHJlZmVyZW5jZSAnPGVtPk1vZGVsPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLlVucmVzb2x2ZWRJZGVudGlmaWFibGUjZ2V0TW9kZWwoKQorCSAqIEBzZWUgI2dldFVucmVzb2x2ZWRJZGVudGlmaWFibGUoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFUmVmZXJlbmNlIGdldFVucmVzb2x2ZWRJZGVudGlmaWFibGVfTW9kZWwoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgcmVmZXJlbmNlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLlVucmVzb2x2ZWRJZGVudGlmaWFibGUjZ2V0R3JhcGggPGVtPkdyYXBoPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgcmVmZXJlbmNlICc8ZW0+R3JhcGg8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguVW5yZXNvbHZlZElkZW50aWZpYWJsZSNnZXRHcmFwaCgpCisJICogQHNlZSAjZ2V0VW5yZXNvbHZlZElkZW50aWZpYWJsZSgpCisJICogQGdlbmVyYXRlZAorCSAqLworCUVSZWZlcmVuY2UgZ2V0VW5yZXNvbHZlZElkZW50aWZpYWJsZV9HcmFwaCgpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSByZWZlcmVuY2UgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguVW5yZXNvbHZlZElkZW50aWZpYWJsZSNnZXRJZGVudGlmaWFibGUgPGVtPklkZW50aWZpYWJsZTwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIHJlZmVyZW5jZSAnPGVtPklkZW50aWZpYWJsZTwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5VbnJlc29sdmVkSWRlbnRpZmlhYmxlI2dldElkZW50aWZpYWJsZSgpCisJICogQHNlZSAjZ2V0VW5yZXNvbHZlZElkZW50aWZpYWJsZSgpCisJICogQGdlbmVyYXRlZAorCSAqLworCUVSZWZlcmVuY2UgZ2V0VW5yZXNvbHZlZElkZW50aWZpYWJsZV9JZGVudGlmaWFibGUoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLlVucmVzb2x2ZWRJZGVudGlmaWFibGUjZ2V0VW5yZXNvbHZlZFVSSSA8ZW0+VW5yZXNvbHZlZCBVUkk8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxlbT5VbnJlc29sdmVkIFVSSTwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5VbnJlc29sdmVkSWRlbnRpZmlhYmxlI2dldFVucmVzb2x2ZWRVUkkoKQorCSAqIEBzZWUgI2dldFVucmVzb2x2ZWRJZGVudGlmaWFibGUoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQXR0cmlidXRlIGdldFVucmVzb2x2ZWRJZGVudGlmaWFibGVfVW5yZXNvbHZlZFVSSSgpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguVW5yZXNvbHZlZElkZW50aWZpYWJsZSNnZXRGaWVsZE5hbWUgPGVtPkZpZWxkIE5hbWU8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxlbT5GaWVsZCBOYW1lPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLlVucmVzb2x2ZWRJZGVudGlmaWFibGUjZ2V0RmllbGROYW1lKCkKKwkgKiBAc2VlICNnZXRVbnJlc29sdmVkSWRlbnRpZmlhYmxlKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUF0dHJpYnV0ZSBnZXRVbnJlc29sdmVkSWRlbnRpZmlhYmxlX0ZpZWxkTmFtZSgpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICd7QGxpbmsgamF2YS51dGlsLk1hcC5FbnRyeSA8ZW0+VVJJIFRvIElkZW50aWZpYWJsZSBNYXAgRW50cnk8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICc8ZW0+VVJJIFRvIElkZW50aWZpYWJsZSBNYXAgRW50cnk8L2VtPicuCisJICogQHNlZSBqYXZhLnV0aWwuTWFwLkVudHJ5CisJICogQG1vZGVsIGtleURhdGFUeXBlPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLlVSSSIKKwkgKiAgICAgICAgdmFsdWVUeXBlPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLklkZW50aWZpYWJsZSIgdmFsdWVDb250YWlubWVudD0idHJ1ZSIKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUNsYXNzIGdldFVSSVRvSWRlbnRpZmlhYmxlTWFwRW50cnkoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgamF2YS51dGlsLk1hcC5FbnRyeSA8ZW0+S2V5PC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+S2V5PC9lbT4nLgorCSAqIEBzZWUgamF2YS51dGlsLk1hcC5FbnRyeQorCSAqIEBzZWUgI2dldFVSSVRvSWRlbnRpZmlhYmxlTWFwRW50cnkoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQXR0cmlidXRlIGdldFVSSVRvSWRlbnRpZmlhYmxlTWFwRW50cnlfS2V5KCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGNvbnRhaW5tZW50IHJlZmVyZW5jZSAne0BsaW5rIGphdmEudXRpbC5NYXAuRW50cnkgPGVtPlZhbHVlPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgY29udGFpbm1lbnQgcmVmZXJlbmNlICc8ZW0+VmFsdWU8L2VtPicuCisJICogQHNlZSBqYXZhLnV0aWwuTWFwLkVudHJ5CisJICogQHNlZSAjZ2V0VVJJVG9JZGVudGlmaWFibGVNYXBFbnRyeSgpCisJICogQGdlbmVyYXRlZAorCSAqLworCUVSZWZlcmVuY2UgZ2V0VVJJVG9JZGVudGlmaWFibGVNYXBFbnRyeV9WYWx1ZSgpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkR5bmFtaWNFZGdlTGFiZWwgPGVtPkR5bmFtaWMgRWRnZSBMYWJlbDwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJzxlbT5EeW5hbWljIEVkZ2UgTGFiZWw8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguRHluYW1pY0VkZ2VMYWJlbAorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQ2xhc3MgZ2V0RHluYW1pY0VkZ2VMYWJlbCgpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkVkZ2VMYWJlbCA8ZW0+RWRnZSBMYWJlbDwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJzxlbT5FZGdlIExhYmVsPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkVkZ2VMYWJlbAorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQ2xhc3MgZ2V0RWRnZUxhYmVsKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGNvbnRhaW5lciByZWZlcmVuY2UgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguRWRnZUxhYmVsI2dldEVkZ2UgPGVtPkVkZ2U8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBjb250YWluZXIgcmVmZXJlbmNlICc8ZW0+RWRnZTwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5FZGdlTGFiZWwjZ2V0RWRnZSgpCisJICogQHNlZSAjZ2V0RWRnZUxhYmVsKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRVJlZmVyZW5jZSBnZXRFZGdlTGFiZWxfRWRnZSgpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLlN0YXRpY0VkZ2VMYWJlbCA8ZW0+U3RhdGljIEVkZ2UgTGFiZWw8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICc8ZW0+U3RhdGljIEVkZ2UgTGFiZWw8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguU3RhdGljRWRnZUxhYmVsCisJICogQGdlbmVyYXRlZAorCSAqLworCUVDbGFzcyBnZXRTdGF0aWNFZGdlTGFiZWwoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAne0BsaW5rIGphdmEudXRpbC5NYXAuRW50cnkgPGVtPlVSSSBUbyBFZGdlIE1hcCBFbnRyeTwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJzxlbT5VUkkgVG8gRWRnZSBNYXAgRW50cnk8L2VtPicuCisJICogQHNlZSBqYXZhLnV0aWwuTWFwLkVudHJ5CisJICogQG1vZGVsIGtleURhdGFUeXBlPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLlVSSSIKKwkgKiAgICAgICAgdmFsdWVUeXBlPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguRWRnZSIgdmFsdWVDb250YWlubWVudD0idHJ1ZSIKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUNsYXNzIGdldFVSSVRvRWRnZU1hcEVudHJ5KCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAne0BsaW5rIGphdmEudXRpbC5NYXAuRW50cnkgPGVtPktleTwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPGVtPktleTwvZW0+Jy4KKwkgKiBAc2VlIGphdmEudXRpbC5NYXAuRW50cnkKKwkgKiBAc2VlICNnZXRVUklUb0VkZ2VNYXBFbnRyeSgpCisJICogQGdlbmVyYXRlZAorCSAqLworCUVBdHRyaWJ1dGUgZ2V0VVJJVG9FZGdlTWFwRW50cnlfS2V5KCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGNvbnRhaW5tZW50IHJlZmVyZW5jZSAne0BsaW5rIGphdmEudXRpbC5NYXAuRW50cnkgPGVtPlZhbHVlPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgY29udGFpbm1lbnQgcmVmZXJlbmNlICc8ZW0+VmFsdWU8L2VtPicuCisJICogQHNlZSBqYXZhLnV0aWwuTWFwLkVudHJ5CisJICogQHNlZSAjZ2V0VVJJVG9FZGdlTWFwRW50cnkoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFUmVmZXJlbmNlIGdldFVSSVRvRWRnZU1hcEVudHJ5X1ZhbHVlKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJ3tAbGluayBqYXZhLnV0aWwuTWFwLkVudHJ5IDxlbT5VUkkgVG8gTm9kZSBNYXAgRW50cnk8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICc8ZW0+VVJJIFRvIE5vZGUgTWFwIEVudHJ5PC9lbT4nLgorCSAqIEBzZWUgamF2YS51dGlsLk1hcC5FbnRyeQorCSAqIEBtb2RlbCBrZXlEYXRhVHlwZT0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5VUkkiCisJICogICAgICAgIHZhbHVlVHlwZT0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLk5vZGUiIHZhbHVlQ29udGFpbm1lbnQ9InRydWUiCisJICogQGdlbmVyYXRlZAorCSAqLworCUVDbGFzcyBnZXRVUklUb05vZGVNYXBFbnRyeSgpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJ3tAbGluayBqYXZhLnV0aWwuTWFwLkVudHJ5IDxlbT5LZXk8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxlbT5LZXk8L2VtPicuCisJICogQHNlZSBqYXZhLnV0aWwuTWFwLkVudHJ5CisJICogQHNlZSAjZ2V0VVJJVG9Ob2RlTWFwRW50cnkoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQXR0cmlidXRlIGdldFVSSVRvTm9kZU1hcEVudHJ5X0tleSgpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBjb250YWlubWVudCByZWZlcmVuY2UgJ3tAbGluayBqYXZhLnV0aWwuTWFwLkVudHJ5IDxlbT5WYWx1ZTwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGNvbnRhaW5tZW50IHJlZmVyZW5jZSAnPGVtPlZhbHVlPC9lbT4nLgorCSAqIEBzZWUgamF2YS51dGlsLk1hcC5FbnRyeQorCSAqIEBzZWUgI2dldFVSSVRvTm9kZU1hcEVudHJ5KCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRVJlZmVyZW5jZSBnZXRVUklUb05vZGVNYXBFbnRyeV9WYWx1ZSgpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICd7QGxpbmsgamF2YS51dGlsLk1hcC5FbnRyeSA8ZW0+VVJJIFRvIExhYmVsIE1hcCBFbnRyeTwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJzxlbT5VUkkgVG8gTGFiZWwgTWFwIEVudHJ5PC9lbT4nLgorCSAqIEBzZWUgamF2YS51dGlsLk1hcC5FbnRyeQorCSAqIEBtb2RlbCBrZXlEYXRhVHlwZT0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5VUkkiCisJICogICAgICAgIHZhbHVlVHlwZT0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkxhYmVsIiB2YWx1ZUNvbnRhaW5tZW50PSJ0cnVlIgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQ2xhc3MgZ2V0VVJJVG9MYWJlbE1hcEVudHJ5KCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAne0BsaW5rIGphdmEudXRpbC5NYXAuRW50cnkgPGVtPktleTwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPGVtPktleTwvZW0+Jy4KKwkgKiBAc2VlIGphdmEudXRpbC5NYXAuRW50cnkKKwkgKiBAc2VlICNnZXRVUklUb0xhYmVsTWFwRW50cnkoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQXR0cmlidXRlIGdldFVSSVRvTGFiZWxNYXBFbnRyeV9LZXkoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgY29udGFpbm1lbnQgcmVmZXJlbmNlICd7QGxpbmsgamF2YS51dGlsLk1hcC5FbnRyeSA8ZW0+VmFsdWU8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBjb250YWlubWVudCByZWZlcmVuY2UgJzxlbT5WYWx1ZTwvZW0+Jy4KKwkgKiBAc2VlIGphdmEudXRpbC5NYXAuRW50cnkKKwkgKiBAc2VlICNnZXRVUklUb0xhYmVsTWFwRW50cnkoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFUmVmZXJlbmNlIGdldFVSSVRvTGFiZWxNYXBFbnRyeV9WYWx1ZSgpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICd7QGxpbmsgamF2YS51dGlsLk1hcC5FbnRyeSA8ZW0+VVJJIFRvIE5vZGUgTGFiZWwgTWFwIEVudHJ5PC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAnPGVtPlVSSSBUbyBOb2RlIExhYmVsIE1hcCBFbnRyeTwvZW0+Jy4KKwkgKiBAc2VlIGphdmEudXRpbC5NYXAuRW50cnkKKwkgKiBAbW9kZWwga2V5RGF0YVR5cGU9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uVVJJIgorCSAqICAgICAgICB2YWx1ZVR5cGU9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5Ob2RlTGFiZWwiIHZhbHVlQ29udGFpbm1lbnQ9InRydWUiCisJICogQGdlbmVyYXRlZAorCSAqLworCUVDbGFzcyBnZXRVUklUb05vZGVMYWJlbE1hcEVudHJ5KCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAne0BsaW5rIGphdmEudXRpbC5NYXAuRW50cnkgPGVtPktleTwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPGVtPktleTwvZW0+Jy4KKwkgKiBAc2VlIGphdmEudXRpbC5NYXAuRW50cnkKKwkgKiBAc2VlICNnZXRVUklUb05vZGVMYWJlbE1hcEVudHJ5KCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUF0dHJpYnV0ZSBnZXRVUklUb05vZGVMYWJlbE1hcEVudHJ5X0tleSgpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBjb250YWlubWVudCByZWZlcmVuY2UgJ3tAbGluayBqYXZhLnV0aWwuTWFwLkVudHJ5IDxlbT5WYWx1ZTwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGNvbnRhaW5tZW50IHJlZmVyZW5jZSAnPGVtPlZhbHVlPC9lbT4nLgorCSAqIEBzZWUgamF2YS51dGlsLk1hcC5FbnRyeQorCSAqIEBzZWUgI2dldFVSSVRvTm9kZUxhYmVsTWFwRW50cnkoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFUmVmZXJlbmNlIGdldFVSSVRvTm9kZUxhYmVsTWFwRW50cnlfVmFsdWUoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5TdGF0aWNMYWJlbCA8ZW0+U3RhdGljIExhYmVsPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAnPGVtPlN0YXRpYyBMYWJlbDwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5TdGF0aWNMYWJlbAorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQ2xhc3MgZ2V0U3RhdGljTGFiZWwoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5HcmFwaFBhcnRpdGlvbmVyIDxlbT5QYXJ0aXRpb25lcjwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJzxlbT5QYXJ0aXRpb25lcjwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5HcmFwaFBhcnRpdGlvbmVyCisJICogQGdlbmVyYXRlZAorCSAqLworCUVDbGFzcyBnZXRHcmFwaFBhcnRpdGlvbmVyKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5HcmFwaFBhcnRpdGlvbmVyI2dldE51bVByb2Nlc3NlcyA8ZW0+TnVtIFByb2Nlc3NlczwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPGVtPk51bSBQcm9jZXNzZXM8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguR3JhcGhQYXJ0aXRpb25lciNnZXROdW1Qcm9jZXNzZXMoKQorCSAqIEBzZWUgI2dldEdyYXBoUGFydGl0aW9uZXIoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQXR0cmlidXRlIGdldEdyYXBoUGFydGl0aW9uZXJfTnVtUHJvY2Vzc2VzKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguU2ltcGxlR3JhcGhQYXJ0aXRpb25lciA8ZW0+U2ltcGxlIEdyYXBoIFBhcnRpdGlvbmVyPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAnPGVtPlNpbXBsZSBHcmFwaCBQYXJ0aXRpb25lcjwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5TaW1wbGVHcmFwaFBhcnRpdGlvbmVyCisJICogQGdlbmVyYXRlZAorCSAqLworCUVDbGFzcyBnZXRTaW1wbGVHcmFwaFBhcnRpdGlvbmVyKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguRXhjaGFuZ2UgPGVtPkV4Y2hhbmdlPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAnPGVtPkV4Y2hhbmdlPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkV4Y2hhbmdlCisJICogQGdlbmVyYXRlZAorCSAqLworCUVDbGFzcyBnZXRFeGNoYW5nZSgpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSByZWZlcmVuY2UgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguRXhjaGFuZ2UjZ2V0T3RoZXJMYWJlbCA8ZW0+T3RoZXIgTGFiZWw8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSByZWZlcmVuY2UgJzxlbT5PdGhlciBMYWJlbDwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5FeGNoYW5nZSNnZXRPdGhlckxhYmVsKCkKKwkgKiBAc2VlICNnZXRFeGNoYW5nZSgpCisJICogQGdlbmVyYXRlZAorCSAqLworCUVSZWZlcmVuY2UgZ2V0RXhjaGFuZ2VfT3RoZXJMYWJlbCgpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguRXhjaGFuZ2UjZ2V0Q291bnQgPGVtPkNvdW50PC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+Q291bnQ8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguRXhjaGFuZ2UjZ2V0Q291bnQoKQorCSAqIEBzZWUgI2dldEV4Y2hhbmdlKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUF0dHJpYnV0ZSBnZXRFeGNoYW5nZV9Db3VudCgpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguRXhjaGFuZ2UjZ2V0VHlwZSA8ZW0+VHlwZTwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPGVtPlR5cGU8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguRXhjaGFuZ2UjZ2V0VHlwZSgpCisJICogQHNlZSAjZ2V0RXhjaGFuZ2UoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQXR0cmlidXRlIGdldEV4Y2hhbmdlX1R5cGUoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5JbnRlZ3JhdGlvbkxhYmVsIDxlbT5JbnRlZ3JhdGlvbiBMYWJlbDwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJzxlbT5JbnRlZ3JhdGlvbiBMYWJlbDwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5JbnRlZ3JhdGlvbkxhYmVsCisJICogQGdlbmVyYXRlZAorCSAqLworCUVDbGFzcyBnZXRJbnRlZ3JhdGlvbkxhYmVsKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIHJlZmVyZW5jZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5JbnRlZ3JhdGlvbkxhYmVsI2dldERlbHRhVmFsdWUgPGVtPkRlbHRhIFZhbHVlPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgcmVmZXJlbmNlICc8ZW0+RGVsdGEgVmFsdWU8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguSW50ZWdyYXRpb25MYWJlbCNnZXREZWx0YVZhbHVlKCkKKwkgKiBAc2VlICNnZXRJbnRlZ3JhdGlvbkxhYmVsKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRVJlZmVyZW5jZSBnZXRJbnRlZ3JhdGlvbkxhYmVsX0RlbHRhVmFsdWUoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgcmVmZXJlbmNlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkludGVncmF0aW9uTGFiZWwjZ2V0VGVtcFZhbHVlIDxlbT5UZW1wIFZhbHVlPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgcmVmZXJlbmNlICc8ZW0+VGVtcCBWYWx1ZTwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5JbnRlZ3JhdGlvbkxhYmVsI2dldFRlbXBWYWx1ZSgpCisJICogQHNlZSAjZ2V0SW50ZWdyYXRpb25MYWJlbCgpCisJICogQGdlbmVyYXRlZAorCSAqLworCUVSZWZlcmVuY2UgZ2V0SW50ZWdyYXRpb25MYWJlbF9UZW1wVmFsdWUoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgcmVmZXJlbmNlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkludGVncmF0aW9uTGFiZWwjZ2V0UHJvYmVWYWx1ZSA8ZW0+UHJvYmUgVmFsdWU8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSByZWZlcmVuY2UgJzxlbT5Qcm9iZSBWYWx1ZTwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5JbnRlZ3JhdGlvbkxhYmVsI2dldFByb2JlVmFsdWUoKQorCSAqIEBzZWUgI2dldEludGVncmF0aW9uTGFiZWwoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFUmVmZXJlbmNlIGdldEludGVncmF0aW9uTGFiZWxfUHJvYmVWYWx1ZSgpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSByZWZlcmVuY2UgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguSW50ZWdyYXRpb25MYWJlbCNnZXRFcnJvclNjYWxlIDxlbT5FcnJvciBTY2FsZTwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIHJlZmVyZW5jZSAnPGVtPkVycm9yIFNjYWxlPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkludGVncmF0aW9uTGFiZWwjZ2V0RXJyb3JTY2FsZSgpCisJICogQHNlZSAjZ2V0SW50ZWdyYXRpb25MYWJlbCgpCisJICogQGdlbmVyYXRlZAorCSAqLworCUVSZWZlcmVuY2UgZ2V0SW50ZWdyYXRpb25MYWJlbF9FcnJvclNjYWxlKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5JbnRlZ3JhdGlvbkxhYmVsI2dldElkZW50aWZpZXIgPGVtPklkZW50aWZpZXI8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxlbT5JZGVudGlmaWVyPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkludGVncmF0aW9uTGFiZWwjZ2V0SWRlbnRpZmllcigpCisJICogQHNlZSAjZ2V0SW50ZWdyYXRpb25MYWJlbCgpCisJICogQGdlbmVyYXRlZAorCSAqLworCUVBdHRyaWJ1dGUgZ2V0SW50ZWdyYXRpb25MYWJlbF9JZGVudGlmaWVyKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguSW50ZWdyYXRpb25MYWJlbFZhbHVlIDxlbT5JbnRlZ3JhdGlvbiBMYWJlbCBWYWx1ZTwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJzxlbT5JbnRlZ3JhdGlvbiBMYWJlbCBWYWx1ZTwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5JbnRlZ3JhdGlvbkxhYmVsVmFsdWUKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUNsYXNzIGdldEludGVncmF0aW9uTGFiZWxWYWx1ZSgpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSByZWZlcmVuY2UgbGlzdCAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5JbnRlZ3JhdGlvbkxhYmVsVmFsdWUjZ2V0QXJyaXZhbHMgPGVtPkFycml2YWxzPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgcmVmZXJlbmNlIGxpc3QgJzxlbT5BcnJpdmFsczwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5JbnRlZ3JhdGlvbkxhYmVsVmFsdWUjZ2V0QXJyaXZhbHMoKQorCSAqIEBzZWUgI2dldEludGVncmF0aW9uTGFiZWxWYWx1ZSgpCisJICogQGdlbmVyYXRlZAorCSAqLworCUVSZWZlcmVuY2UgZ2V0SW50ZWdyYXRpb25MYWJlbFZhbHVlX0Fycml2YWxzKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIHJlZmVyZW5jZSBsaXN0ICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkludGVncmF0aW9uTGFiZWxWYWx1ZSNnZXREZXBhcnR1cmVzIDxlbT5EZXBhcnR1cmVzPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgcmVmZXJlbmNlIGxpc3QgJzxlbT5EZXBhcnR1cmVzPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkludGVncmF0aW9uTGFiZWxWYWx1ZSNnZXREZXBhcnR1cmVzKCkKKwkgKiBAc2VlICNnZXRJbnRlZ3JhdGlvbkxhYmVsVmFsdWUoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFUmVmZXJlbmNlIGdldEludGVncmF0aW9uTGFiZWxWYWx1ZV9EZXBhcnR1cmVzKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgZW51bSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5FeGNoYW5nZVR5cGUgPGVtPkV4Y2hhbmdlIFR5cGU8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIGVudW0gJzxlbT5FeGNoYW5nZSBUeXBlPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkV4Y2hhbmdlVHlwZQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFRW51bSBnZXRFeGNoYW5nZVR5cGUoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciBkYXRhIHR5cGUgJ3tAbGluayBqYXZhLmxhbmcuSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uIDxlbT5JbGxlZ2FsIEFyZ3VtZW50IEV4Y2VwdGlvbjwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgZGF0YSB0eXBlICc8ZW0+SWxsZWdhbCBBcmd1bWVudCBFeGNlcHRpb248L2VtPicuCisJICogQHNlZSBqYXZhLmxhbmcuSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uCisJICogQG1vZGVsIGluc3RhbmNlQ2xhc3M9ImphdmEubGFuZy5JbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24iCisJICogQGdlbmVyYXRlZAorCSAqLworCUVEYXRhVHlwZSBnZXRJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIGZhY3RvcnkgdGhhdCBjcmVhdGVzIHRoZSBpbnN0YW5jZXMgb2YgdGhlIG1vZGVsLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgZmFjdG9yeSB0aGF0IGNyZWF0ZXMgdGhlIGluc3RhbmNlcyBvZiB0aGUgbW9kZWwuCisJICogQGdlbmVyYXRlZAorCSAqLworCUdyYXBoRmFjdG9yeSBnZXRHcmFwaEZhY3RvcnkoKTsKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogRGVmaW5lcyBsaXRlcmFscyBmb3IgdGhlIG1ldGEgb2JqZWN0cyB0aGF0IHJlcHJlc2VudAorCSAqIDx1bD4KKwkgKiAgIDxsaT5lYWNoIGNsYXNzLDwvbGk+CisJICogICA8bGk+ZWFjaCBmZWF0dXJlIG9mIGVhY2ggY2xhc3MsPC9saT4KKwkgKiAgIDxsaT5lYWNoIGVudW0sPC9saT4KKwkgKiAgIDxsaT5hbmQgZWFjaCBkYXRhIHR5cGU8L2xpPgorCSAqIDwvdWw+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCWludGVyZmFjZSBMaXRlcmFscyAgeworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5pbXBsLkR5bmFtaWNMYWJlbEltcGwgPGVtPkR5bmFtaWMgTGFiZWw8L2VtPn0nIGNsYXNzLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguaW1wbC5EeW5hbWljTGFiZWxJbXBsCisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmltcGwuR3JhcGhQYWNrYWdlSW1wbCNnZXREeW5hbWljTGFiZWwoKQorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQ2xhc3MgRFlOQU1JQ19MQUJFTCA9IGVJTlNUQU5DRS5nZXREeW5hbWljTGFiZWwoKTsKKworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPk5leHQgVmFsdWUgVmFsaWQ8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUF0dHJpYnV0ZSBEWU5BTUlDX0xBQkVMX19ORVhUX1ZBTFVFX1ZBTElEID0gZUlOU1RBTkNFLmdldER5bmFtaWNMYWJlbF9OZXh0VmFsdWVWYWxpZCgpOworCisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+TmV4dCBWYWx1ZTwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlIGZlYXR1cmUuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFUmVmZXJlbmNlIERZTkFNSUNfTEFCRUxfX05FWFRfVkFMVUUgPSBlSU5TVEFOQ0UuZ2V0RHluYW1pY0xhYmVsX05leHRWYWx1ZSgpOworCisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+RGVjb3JhdG9yPC9iPjwvZW0+JyByZWZlcmVuY2UgZmVhdHVyZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVSZWZlcmVuY2UgRFlOQU1JQ19MQUJFTF9fREVDT1JBVE9SID0gZUlOU1RBTkNFLmdldER5bmFtaWNMYWJlbF9EZWNvcmF0b3IoKTsKKworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5pbXBsLkR5bmFtaWNOb2RlTGFiZWxJbXBsIDxlbT5EeW5hbWljIE5vZGUgTGFiZWw8L2VtPn0nIGNsYXNzLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguaW1wbC5EeW5hbWljTm9kZUxhYmVsSW1wbAorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5pbXBsLkdyYXBoUGFja2FnZUltcGwjZ2V0RHluYW1pY05vZGVMYWJlbCgpCisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVDbGFzcyBEWU5BTUlDX05PREVfTEFCRUwgPSBlSU5TVEFOQ0UuZ2V0RHluYW1pY05vZGVMYWJlbCgpOworCisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmltcGwuRWRnZUltcGwgPGVtPkVkZ2U8L2VtPn0nIGNsYXNzLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguaW1wbC5FZGdlSW1wbAorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5pbXBsLkdyYXBoUGFja2FnZUltcGwjZ2V0RWRnZSgpCisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVDbGFzcyBFREdFID0gZUlOU1RBTkNFLmdldEVkZ2UoKTsKKworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPkE8L2I+PC9lbT4nIHJlZmVyZW5jZSBmZWF0dXJlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRVJlZmVyZW5jZSBFREdFX19BID0gZUlOU1RBTkNFLmdldEVkZ2VfQSgpOworCisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+Tm9kZSBBVVJJPC9iPjwvZW0+JyBhdHRyaWJ1dGUgZmVhdHVyZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVBdHRyaWJ1dGUgRURHRV9fTk9ERV9BVVJJID0gZUlOU1RBTkNFLmdldEVkZ2VfTm9kZUFVUkkoKTsKKworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPkI8L2I+PC9lbT4nIHJlZmVyZW5jZSBmZWF0dXJlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRVJlZmVyZW5jZSBFREdFX19CID0gZUlOU1RBTkNFLmdldEVkZ2VfQigpOworCisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+Tm9kZSBCVVJJPC9iPjwvZW0+JyBhdHRyaWJ1dGUgZmVhdHVyZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVBdHRyaWJ1dGUgRURHRV9fTk9ERV9CVVJJID0gZUlOU1RBTkNFLmdldEVkZ2VfTm9kZUJVUkkoKTsKKworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPkxhYmVsPC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UgZmVhdHVyZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVSZWZlcmVuY2UgRURHRV9fTEFCRUwgPSBlSU5TVEFOQ0UuZ2V0RWRnZV9MYWJlbCgpOworCisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+RGlyZWN0ZWQ8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUF0dHJpYnV0ZSBFREdFX19ESVJFQ1RFRCA9IGVJTlNUQU5DRS5nZXRFZGdlX0RpcmVjdGVkKCk7CisKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguaW1wbC5HcmFwaEltcGwgPGVtPkdyYXBoPC9lbT59JyBjbGFzcy4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmltcGwuR3JhcGhJbXBsCisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmltcGwuR3JhcGhQYWNrYWdlSW1wbCNnZXRHcmFwaCgpCisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVDbGFzcyBHUkFQSCA9IGVJTlNUQU5DRS5nZXRHcmFwaCgpOworCisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+R3JhcGggTGFiZWxzPC9iPjwvZW0+JyBtYXAgZmVhdHVyZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVSZWZlcmVuY2UgR1JBUEhfX0dSQVBIX0xBQkVMUyA9IGVJTlNUQU5DRS5nZXRHcmFwaF9HcmFwaExhYmVscygpOworCisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+Tm9kZSBMYWJlbHM8L2I+PC9lbT4nIG1hcCBmZWF0dXJlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRVJlZmVyZW5jZSBHUkFQSF9fTk9ERV9MQUJFTFMgPSBlSU5TVEFOQ0UuZ2V0R3JhcGhfTm9kZUxhYmVscygpOworCisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+RHluYW1pYyBMYWJlbHM8L2I+PC9lbT4nIHJlZmVyZW5jZSBsaXN0IGZlYXR1cmUuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFUmVmZXJlbmNlIEdSQVBIX19EWU5BTUlDX0xBQkVMUyA9IGVJTlNUQU5DRS5nZXRHcmFwaF9EeW5hbWljTGFiZWxzKCk7CisKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5OdW0gRWRnZXM8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUF0dHJpYnV0ZSBHUkFQSF9fTlVNX0VER0VTID0gZUlOU1RBTkNFLmdldEdyYXBoX051bUVkZ2VzKCk7CisKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5OdW0gTm9kZXM8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUF0dHJpYnV0ZSBHUkFQSF9fTlVNX05PREVTID0gZUlOU1RBTkNFLmdldEdyYXBoX051bU5vZGVzKCk7CisKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5OdW0gR3JhcGggTGFiZWxzPC9iPjwvZW0+JyBhdHRyaWJ1dGUgZmVhdHVyZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVBdHRyaWJ1dGUgR1JBUEhfX05VTV9HUkFQSF9MQUJFTFMgPSBlSU5TVEFOQ0UuZ2V0R3JhcGhfTnVtR3JhcGhMYWJlbHMoKTsKKworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPk51bSBOb2RlIExhYmVsczwvYj48L2VtPicgYXR0cmlidXRlIGZlYXR1cmUuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQXR0cmlidXRlIEdSQVBIX19OVU1fTk9ERV9MQUJFTFMgPSBlSU5TVEFOQ0UuZ2V0R3JhcGhfTnVtTm9kZUxhYmVscygpOworCisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+TnVtIER5bmFtaWMgTGFiZWxzPC9iPjwvZW0+JyBhdHRyaWJ1dGUgZmVhdHVyZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVBdHRyaWJ1dGUgR1JBUEhfX05VTV9EWU5BTUlDX0xBQkVMUyA9IGVJTlNUQU5DRS5nZXRHcmFwaF9OdW1EeW5hbWljTGFiZWxzKCk7CisKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5VbnJlc29sdmVkIElkZW50aWZpYWJsZXM8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0IGZlYXR1cmUuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFUmVmZXJlbmNlIEdSQVBIX19VTlJFU09MVkVEX0lERU5USUZJQUJMRVMgPSBlSU5TVEFOQ0UuZ2V0R3JhcGhfVW5yZXNvbHZlZElkZW50aWZpYWJsZXMoKTsKKworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPkRlY29yYXRvcnM8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0IGZlYXR1cmUuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFUmVmZXJlbmNlIEdSQVBIX19ERUNPUkFUT1JTID0gZUlOU1RBTkNFLmdldEdyYXBoX0RlY29yYXRvcnMoKTsKKworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPlRpbWU8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBmZWF0dXJlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRVJlZmVyZW5jZSBHUkFQSF9fVElNRSA9IGVJTlNUQU5DRS5nZXRHcmFwaF9UaW1lKCk7CisKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5Ob2RlczwvYj48L2VtPicgbWFwIGZlYXR1cmUuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFUmVmZXJlbmNlIEdSQVBIX19OT0RFUyA9IGVJTlNUQU5DRS5nZXRHcmFwaF9Ob2RlcygpOworCisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+RWRnZXM8L2I+PC9lbT4nIG1hcCBmZWF0dXJlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRVJlZmVyZW5jZSBHUkFQSF9fRURHRVMgPSBlSU5TVEFOQ0UuZ2V0R3JhcGhfRWRnZXMoKTsKKworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5pbXBsLkxhYmVsSW1wbCA8ZW0+TGFiZWw8L2VtPn0nIGNsYXNzLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguaW1wbC5MYWJlbEltcGwKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguaW1wbC5HcmFwaFBhY2thZ2VJbXBsI2dldExhYmVsKCkKKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUNsYXNzIExBQkVMID0gZUlOU1RBTkNFLmdldExhYmVsKCk7CisKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5VUkkgT2YgSWRlbnRpZmlhYmxlIFRvIEJlIExhYmVsZWQ8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUF0dHJpYnV0ZSBMQUJFTF9fVVJJX09GX0lERU5USUZJQUJMRV9UT19CRV9MQUJFTEVEID0gZUlOU1RBTkNFLmdldExhYmVsX1VSSU9mSWRlbnRpZmlhYmxlVG9CZUxhYmVsZWQoKTsKKworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPkN1cnJlbnQgVmFsdWU8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBmZWF0dXJlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRVJlZmVyZW5jZSBMQUJFTF9fQ1VSUkVOVF9WQUxVRSA9IGVJTlNUQU5DRS5nZXRMYWJlbF9DdXJyZW50VmFsdWUoKTsKKworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPklkZW50aWZpYWJsZTwvYj48L2VtPicgcmVmZXJlbmNlIGZlYXR1cmUuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFUmVmZXJlbmNlIExBQkVMX19JREVOVElGSUFCTEUgPSBlSU5TVEFOQ0UuZ2V0TGFiZWxfSWRlbnRpZmlhYmxlKCk7CisKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguaW1wbC5MYWJlbFZhbHVlSW1wbCA8ZW0+TGFiZWwgVmFsdWU8L2VtPn0nIGNsYXNzLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguaW1wbC5MYWJlbFZhbHVlSW1wbAorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5pbXBsLkdyYXBoUGFja2FnZUltcGwjZ2V0TGFiZWxWYWx1ZSgpCisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVDbGFzcyBMQUJFTF9WQUxVRSA9IGVJTlNUQU5DRS5nZXRMYWJlbFZhbHVlKCk7CisKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguaW1wbC5Ob2RlSW1wbCA8ZW0+Tm9kZTwvZW0+fScgY2xhc3MuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5pbXBsLk5vZGVJbXBsCisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmltcGwuR3JhcGhQYWNrYWdlSW1wbCNnZXROb2RlKCkKKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUNsYXNzIE5PREUgPSBlSU5TVEFOQ0UuZ2V0Tm9kZSgpOworCisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+RWRnZXM8L2I+PC9lbT4nIHJlZmVyZW5jZSBsaXN0IGZlYXR1cmUuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFUmVmZXJlbmNlIE5PREVfX0VER0VTID0gZUlOU1RBTkNFLmdldE5vZGVfRWRnZXMoKTsKKworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPkxhYmVsczwvYj48L2VtPicgcmVmZXJlbmNlIGxpc3QgZmVhdHVyZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVSZWZlcmVuY2UgTk9ERV9fTEFCRUxTID0gZUlOU1RBTkNFLmdldE5vZGVfTGFiZWxzKCk7CisKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguaW1wbC5Ob2RlTGFiZWxJbXBsIDxlbT5Ob2RlIExhYmVsPC9lbT59JyBjbGFzcy4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmltcGwuTm9kZUxhYmVsSW1wbAorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5pbXBsLkdyYXBoUGFja2FnZUltcGwjZ2V0Tm9kZUxhYmVsKCkKKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUNsYXNzIE5PREVfTEFCRUwgPSBlSU5TVEFOQ0UuZ2V0Tm9kZUxhYmVsKCk7CisKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5Ob2RlPC9iPjwvZW0+JyByZWZlcmVuY2UgZmVhdHVyZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVSZWZlcmVuY2UgTk9ERV9MQUJFTF9fTk9ERSA9IGVJTlNUQU5DRS5nZXROb2RlTGFiZWxfTm9kZSgpOworCisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmltcGwuU3RhdGljTm9kZUxhYmVsSW1wbCA8ZW0+U3RhdGljIE5vZGUgTGFiZWw8L2VtPn0nIGNsYXNzLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguaW1wbC5TdGF0aWNOb2RlTGFiZWxJbXBsCisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmltcGwuR3JhcGhQYWNrYWdlSW1wbCNnZXRTdGF0aWNOb2RlTGFiZWwoKQorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQ2xhc3MgU1RBVElDX05PREVfTEFCRUwgPSBlSU5TVEFOQ0UuZ2V0U3RhdGljTm9kZUxhYmVsKCk7CisKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguaW1wbC5VbnJlc29sdmVkSWRlbnRpZmlhYmxlSW1wbCA8ZW0+VW5yZXNvbHZlZCBJZGVudGlmaWFibGU8L2VtPn0nIGNsYXNzLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguaW1wbC5VbnJlc29sdmVkSWRlbnRpZmlhYmxlSW1wbAorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5pbXBsLkdyYXBoUGFja2FnZUltcGwjZ2V0VW5yZXNvbHZlZElkZW50aWZpYWJsZSgpCisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVDbGFzcyBVTlJFU09MVkVEX0lERU5USUZJQUJMRSA9IGVJTlNUQU5DRS5nZXRVbnJlc29sdmVkSWRlbnRpZmlhYmxlKCk7CisKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5TY2VuYXJpbzwvYj48L2VtPicgcmVmZXJlbmNlIGZlYXR1cmUuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFUmVmZXJlbmNlIFVOUkVTT0xWRURfSURFTlRJRklBQkxFX19TQ0VOQVJJTyA9IGVJTlNUQU5DRS5nZXRVbnJlc29sdmVkSWRlbnRpZmlhYmxlX1NjZW5hcmlvKCk7CisKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5Nb2RlbDwvYj48L2VtPicgcmVmZXJlbmNlIGZlYXR1cmUuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFUmVmZXJlbmNlIFVOUkVTT0xWRURfSURFTlRJRklBQkxFX19NT0RFTCA9IGVJTlNUQU5DRS5nZXRVbnJlc29sdmVkSWRlbnRpZmlhYmxlX01vZGVsKCk7CisKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5HcmFwaDwvYj48L2VtPicgcmVmZXJlbmNlIGZlYXR1cmUuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFUmVmZXJlbmNlIFVOUkVTT0xWRURfSURFTlRJRklBQkxFX19HUkFQSCA9IGVJTlNUQU5DRS5nZXRVbnJlc29sdmVkSWRlbnRpZmlhYmxlX0dyYXBoKCk7CisKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5JZGVudGlmaWFibGU8L2I+PC9lbT4nIHJlZmVyZW5jZSBmZWF0dXJlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRVJlZmVyZW5jZSBVTlJFU09MVkVEX0lERU5USUZJQUJMRV9fSURFTlRJRklBQkxFID0gZUlOU1RBTkNFLmdldFVucmVzb2x2ZWRJZGVudGlmaWFibGVfSWRlbnRpZmlhYmxlKCk7CisKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5VbnJlc29sdmVkIFVSSTwvYj48L2VtPicgYXR0cmlidXRlIGZlYXR1cmUuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQXR0cmlidXRlIFVOUkVTT0xWRURfSURFTlRJRklBQkxFX19VTlJFU09MVkVEX1VSSSA9IGVJTlNUQU5DRS5nZXRVbnJlc29sdmVkSWRlbnRpZmlhYmxlX1VucmVzb2x2ZWRVUkkoKTsKKworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPkZpZWxkIE5hbWU8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUF0dHJpYnV0ZSBVTlJFU09MVkVEX0lERU5USUZJQUJMRV9fRklFTERfTkFNRSA9IGVJTlNUQU5DRS5nZXRVbnJlc29sdmVkSWRlbnRpZmlhYmxlX0ZpZWxkTmFtZSgpOworCisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmltcGwuVVJJVG9JZGVudGlmaWFibGVNYXBFbnRyeUltcGwgPGVtPlVSSSBUbyBJZGVudGlmaWFibGUgTWFwIEVudHJ5PC9lbT59JyBjbGFzcy4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmltcGwuVVJJVG9JZGVudGlmaWFibGVNYXBFbnRyeUltcGwKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguaW1wbC5HcmFwaFBhY2thZ2VJbXBsI2dldFVSSVRvSWRlbnRpZmlhYmxlTWFwRW50cnkoKQorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQ2xhc3MgVVJJX1RPX0lERU5USUZJQUJMRV9NQVBfRU5UUlkgPSBlSU5TVEFOQ0UuZ2V0VVJJVG9JZGVudGlmaWFibGVNYXBFbnRyeSgpOworCisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+S2V5PC9iPjwvZW0+JyBhdHRyaWJ1dGUgZmVhdHVyZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVBdHRyaWJ1dGUgVVJJX1RPX0lERU5USUZJQUJMRV9NQVBfRU5UUllfX0tFWSA9IGVJTlNUQU5DRS5nZXRVUklUb0lkZW50aWZpYWJsZU1hcEVudHJ5X0tleSgpOworCisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+VmFsdWU8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBmZWF0dXJlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRVJlZmVyZW5jZSBVUklfVE9fSURFTlRJRklBQkxFX01BUF9FTlRSWV9fVkFMVUUgPSBlSU5TVEFOQ0UuZ2V0VVJJVG9JZGVudGlmaWFibGVNYXBFbnRyeV9WYWx1ZSgpOworCisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmltcGwuRHluYW1pY0VkZ2VMYWJlbEltcGwgPGVtPkR5bmFtaWMgRWRnZSBMYWJlbDwvZW0+fScgY2xhc3MuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5pbXBsLkR5bmFtaWNFZGdlTGFiZWxJbXBsCisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmltcGwuR3JhcGhQYWNrYWdlSW1wbCNnZXREeW5hbWljRWRnZUxhYmVsKCkKKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUNsYXNzIERZTkFNSUNfRURHRV9MQUJFTCA9IGVJTlNUQU5DRS5nZXREeW5hbWljRWRnZUxhYmVsKCk7CisKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguaW1wbC5FZGdlTGFiZWxJbXBsIDxlbT5FZGdlIExhYmVsPC9lbT59JyBjbGFzcy4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmltcGwuRWRnZUxhYmVsSW1wbAorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5pbXBsLkdyYXBoUGFja2FnZUltcGwjZ2V0RWRnZUxhYmVsKCkKKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUNsYXNzIEVER0VfTEFCRUwgPSBlSU5TVEFOQ0UuZ2V0RWRnZUxhYmVsKCk7CisKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5FZGdlPC9iPjwvZW0+JyBjb250YWluZXIgcmVmZXJlbmNlIGZlYXR1cmUuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFUmVmZXJlbmNlIEVER0VfTEFCRUxfX0VER0UgPSBlSU5TVEFOQ0UuZ2V0RWRnZUxhYmVsX0VkZ2UoKTsKKworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5pbXBsLlN0YXRpY0VkZ2VMYWJlbEltcGwgPGVtPlN0YXRpYyBFZGdlIExhYmVsPC9lbT59JyBjbGFzcy4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmltcGwuU3RhdGljRWRnZUxhYmVsSW1wbAorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5pbXBsLkdyYXBoUGFja2FnZUltcGwjZ2V0U3RhdGljRWRnZUxhYmVsKCkKKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUNsYXNzIFNUQVRJQ19FREdFX0xBQkVMID0gZUlOU1RBTkNFLmdldFN0YXRpY0VkZ2VMYWJlbCgpOworCisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmltcGwuVVJJVG9FZGdlTWFwRW50cnlJbXBsIDxlbT5VUkkgVG8gRWRnZSBNYXAgRW50cnk8L2VtPn0nIGNsYXNzLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguaW1wbC5VUklUb0VkZ2VNYXBFbnRyeUltcGwKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguaW1wbC5HcmFwaFBhY2thZ2VJbXBsI2dldFVSSVRvRWRnZU1hcEVudHJ5KCkKKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUNsYXNzIFVSSV9UT19FREdFX01BUF9FTlRSWSA9IGVJTlNUQU5DRS5nZXRVUklUb0VkZ2VNYXBFbnRyeSgpOworCisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+S2V5PC9iPjwvZW0+JyBhdHRyaWJ1dGUgZmVhdHVyZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVBdHRyaWJ1dGUgVVJJX1RPX0VER0VfTUFQX0VOVFJZX19LRVkgPSBlSU5TVEFOQ0UuZ2V0VVJJVG9FZGdlTWFwRW50cnlfS2V5KCk7CisKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5WYWx1ZTwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlIGZlYXR1cmUuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFUmVmZXJlbmNlIFVSSV9UT19FREdFX01BUF9FTlRSWV9fVkFMVUUgPSBlSU5TVEFOQ0UuZ2V0VVJJVG9FZGdlTWFwRW50cnlfVmFsdWUoKTsKKworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5pbXBsLlVSSVRvTm9kZU1hcEVudHJ5SW1wbCA8ZW0+VVJJIFRvIE5vZGUgTWFwIEVudHJ5PC9lbT59JyBjbGFzcy4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmltcGwuVVJJVG9Ob2RlTWFwRW50cnlJbXBsCisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmltcGwuR3JhcGhQYWNrYWdlSW1wbCNnZXRVUklUb05vZGVNYXBFbnRyeSgpCisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVDbGFzcyBVUklfVE9fTk9ERV9NQVBfRU5UUlkgPSBlSU5TVEFOQ0UuZ2V0VVJJVG9Ob2RlTWFwRW50cnkoKTsKKworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPktleTwvYj48L2VtPicgYXR0cmlidXRlIGZlYXR1cmUuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQXR0cmlidXRlIFVSSV9UT19OT0RFX01BUF9FTlRSWV9fS0VZID0gZUlOU1RBTkNFLmdldFVSSVRvTm9kZU1hcEVudHJ5X0tleSgpOworCisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+VmFsdWU8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBmZWF0dXJlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRVJlZmVyZW5jZSBVUklfVE9fTk9ERV9NQVBfRU5UUllfX1ZBTFVFID0gZUlOU1RBTkNFLmdldFVSSVRvTm9kZU1hcEVudHJ5X1ZhbHVlKCk7CisKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguaW1wbC5VUklUb0xhYmVsTWFwRW50cnlJbXBsIDxlbT5VUkkgVG8gTGFiZWwgTWFwIEVudHJ5PC9lbT59JyBjbGFzcy4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmltcGwuVVJJVG9MYWJlbE1hcEVudHJ5SW1wbAorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5pbXBsLkdyYXBoUGFja2FnZUltcGwjZ2V0VVJJVG9MYWJlbE1hcEVudHJ5KCkKKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUNsYXNzIFVSSV9UT19MQUJFTF9NQVBfRU5UUlkgPSBlSU5TVEFOQ0UuZ2V0VVJJVG9MYWJlbE1hcEVudHJ5KCk7CisKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5LZXk8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUF0dHJpYnV0ZSBVUklfVE9fTEFCRUxfTUFQX0VOVFJZX19LRVkgPSBlSU5TVEFOQ0UuZ2V0VVJJVG9MYWJlbE1hcEVudHJ5X0tleSgpOworCisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+VmFsdWU8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBmZWF0dXJlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRVJlZmVyZW5jZSBVUklfVE9fTEFCRUxfTUFQX0VOVFJZX19WQUxVRSA9IGVJTlNUQU5DRS5nZXRVUklUb0xhYmVsTWFwRW50cnlfVmFsdWUoKTsKKworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5pbXBsLlVSSVRvTm9kZUxhYmVsTWFwRW50cnlJbXBsIDxlbT5VUkkgVG8gTm9kZSBMYWJlbCBNYXAgRW50cnk8L2VtPn0nIGNsYXNzLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguaW1wbC5VUklUb05vZGVMYWJlbE1hcEVudHJ5SW1wbAorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5pbXBsLkdyYXBoUGFja2FnZUltcGwjZ2V0VVJJVG9Ob2RlTGFiZWxNYXBFbnRyeSgpCisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVDbGFzcyBVUklfVE9fTk9ERV9MQUJFTF9NQVBfRU5UUlkgPSBlSU5TVEFOQ0UuZ2V0VVJJVG9Ob2RlTGFiZWxNYXBFbnRyeSgpOworCisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+S2V5PC9iPjwvZW0+JyBhdHRyaWJ1dGUgZmVhdHVyZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVBdHRyaWJ1dGUgVVJJX1RPX05PREVfTEFCRUxfTUFQX0VOVFJZX19LRVkgPSBlSU5TVEFOQ0UuZ2V0VVJJVG9Ob2RlTGFiZWxNYXBFbnRyeV9LZXkoKTsKKworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPlZhbHVlPC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UgZmVhdHVyZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVSZWZlcmVuY2UgVVJJX1RPX05PREVfTEFCRUxfTUFQX0VOVFJZX19WQUxVRSA9IGVJTlNUQU5DRS5nZXRVUklUb05vZGVMYWJlbE1hcEVudHJ5X1ZhbHVlKCk7CisKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguaW1wbC5TdGF0aWNMYWJlbEltcGwgPGVtPlN0YXRpYyBMYWJlbDwvZW0+fScgY2xhc3MuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5pbXBsLlN0YXRpY0xhYmVsSW1wbAorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5pbXBsLkdyYXBoUGFja2FnZUltcGwjZ2V0U3RhdGljTGFiZWwoKQorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQ2xhc3MgU1RBVElDX0xBQkVMID0gZUlOU1RBTkNFLmdldFN0YXRpY0xhYmVsKCk7CisKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguaW1wbC5HcmFwaFBhcnRpdGlvbmVySW1wbCA8ZW0+UGFydGl0aW9uZXI8L2VtPn0nIGNsYXNzLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguaW1wbC5HcmFwaFBhcnRpdGlvbmVySW1wbAorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5pbXBsLkdyYXBoUGFja2FnZUltcGwjZ2V0R3JhcGhQYXJ0aXRpb25lcigpCisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVDbGFzcyBHUkFQSF9QQVJUSVRJT05FUiA9IGVJTlNUQU5DRS5nZXRHcmFwaFBhcnRpdGlvbmVyKCk7CisKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5OdW0gUHJvY2Vzc2VzPC9iPjwvZW0+JyBhdHRyaWJ1dGUgZmVhdHVyZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVBdHRyaWJ1dGUgR1JBUEhfUEFSVElUSU9ORVJfX05VTV9QUk9DRVNTRVMgPSBlSU5TVEFOQ0UuZ2V0R3JhcGhQYXJ0aXRpb25lcl9OdW1Qcm9jZXNzZXMoKTsKKworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5pbXBsLlNpbXBsZUdyYXBoUGFydGl0aW9uZXJJbXBsIDxlbT5TaW1wbGUgR3JhcGggUGFydGl0aW9uZXI8L2VtPn0nIGNsYXNzLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguaW1wbC5TaW1wbGVHcmFwaFBhcnRpdGlvbmVySW1wbAorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5pbXBsLkdyYXBoUGFja2FnZUltcGwjZ2V0U2ltcGxlR3JhcGhQYXJ0aXRpb25lcigpCisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVDbGFzcyBTSU1QTEVfR1JBUEhfUEFSVElUSU9ORVIgPSBlSU5TVEFOQ0UuZ2V0U2ltcGxlR3JhcGhQYXJ0aXRpb25lcigpOworCisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmltcGwuRXhjaGFuZ2VJbXBsIDxlbT5FeGNoYW5nZTwvZW0+fScgY2xhc3MuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5pbXBsLkV4Y2hhbmdlSW1wbAorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5pbXBsLkdyYXBoUGFja2FnZUltcGwjZ2V0RXhjaGFuZ2UoKQorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQ2xhc3MgRVhDSEFOR0UgPSBlSU5TVEFOQ0UuZ2V0RXhjaGFuZ2UoKTsKKworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPk90aGVyIExhYmVsPC9iPjwvZW0+JyByZWZlcmVuY2UgZmVhdHVyZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVSZWZlcmVuY2UgRVhDSEFOR0VfX09USEVSX0xBQkVMID0gZUlOU1RBTkNFLmdldEV4Y2hhbmdlX090aGVyTGFiZWwoKTsKKworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPkNvdW50PC9iPjwvZW0+JyBhdHRyaWJ1dGUgZmVhdHVyZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVBdHRyaWJ1dGUgRVhDSEFOR0VfX0NPVU5UID0gZUlOU1RBTkNFLmdldEV4Y2hhbmdlX0NvdW50KCk7CisKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5UeXBlPC9iPjwvZW0+JyBhdHRyaWJ1dGUgZmVhdHVyZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVBdHRyaWJ1dGUgRVhDSEFOR0VfX1RZUEUgPSBlSU5TVEFOQ0UuZ2V0RXhjaGFuZ2VfVHlwZSgpOworCisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmltcGwuSW50ZWdyYXRpb25MYWJlbEltcGwgPGVtPkludGVncmF0aW9uIExhYmVsPC9lbT59JyBjbGFzcy4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmltcGwuSW50ZWdyYXRpb25MYWJlbEltcGwKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguaW1wbC5HcmFwaFBhY2thZ2VJbXBsI2dldEludGVncmF0aW9uTGFiZWwoKQorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQ2xhc3MgSU5URUdSQVRJT05fTEFCRUwgPSBlSU5TVEFOQ0UuZ2V0SW50ZWdyYXRpb25MYWJlbCgpOworCisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+RGVsdGEgVmFsdWU8L2I+PC9lbT4nIHJlZmVyZW5jZSBmZWF0dXJlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRVJlZmVyZW5jZSBJTlRFR1JBVElPTl9MQUJFTF9fREVMVEFfVkFMVUUgPSBlSU5TVEFOQ0UuZ2V0SW50ZWdyYXRpb25MYWJlbF9EZWx0YVZhbHVlKCk7CisKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5UZW1wIFZhbHVlPC9iPjwvZW0+JyByZWZlcmVuY2UgZmVhdHVyZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVSZWZlcmVuY2UgSU5URUdSQVRJT05fTEFCRUxfX1RFTVBfVkFMVUUgPSBlSU5TVEFOQ0UuZ2V0SW50ZWdyYXRpb25MYWJlbF9UZW1wVmFsdWUoKTsKKworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPlByb2JlIFZhbHVlPC9iPjwvZW0+JyByZWZlcmVuY2UgZmVhdHVyZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVSZWZlcmVuY2UgSU5URUdSQVRJT05fTEFCRUxfX1BST0JFX1ZBTFVFID0gZUlOU1RBTkNFLmdldEludGVncmF0aW9uTGFiZWxfUHJvYmVWYWx1ZSgpOworCisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+RXJyb3IgU2NhbGU8L2I+PC9lbT4nIHJlZmVyZW5jZSBmZWF0dXJlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRVJlZmVyZW5jZSBJTlRFR1JBVElPTl9MQUJFTF9fRVJST1JfU0NBTEUgPSBlSU5TVEFOQ0UuZ2V0SW50ZWdyYXRpb25MYWJlbF9FcnJvclNjYWxlKCk7CisKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5JZGVudGlmaWVyPC9iPjwvZW0+JyBhdHRyaWJ1dGUgZmVhdHVyZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVBdHRyaWJ1dGUgSU5URUdSQVRJT05fTEFCRUxfX0lERU5USUZJRVIgPSBlSU5TVEFOQ0UuZ2V0SW50ZWdyYXRpb25MYWJlbF9JZGVudGlmaWVyKCk7CisKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguaW1wbC5JbnRlZ3JhdGlvbkxhYmVsVmFsdWVJbXBsIDxlbT5JbnRlZ3JhdGlvbiBMYWJlbCBWYWx1ZTwvZW0+fScgY2xhc3MuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5pbXBsLkludGVncmF0aW9uTGFiZWxWYWx1ZUltcGwKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguaW1wbC5HcmFwaFBhY2thZ2VJbXBsI2dldEludGVncmF0aW9uTGFiZWxWYWx1ZSgpCisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVDbGFzcyBJTlRFR1JBVElPTl9MQUJFTF9WQUxVRSA9IGVJTlNUQU5DRS5nZXRJbnRlZ3JhdGlvbkxhYmVsVmFsdWUoKTsKKworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPkFycml2YWxzPC9iPjwvZW0+JyByZWZlcmVuY2UgbGlzdCBmZWF0dXJlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRVJlZmVyZW5jZSBJTlRFR1JBVElPTl9MQUJFTF9WQUxVRV9fQVJSSVZBTFMgPSBlSU5TVEFOQ0UuZ2V0SW50ZWdyYXRpb25MYWJlbFZhbHVlX0Fycml2YWxzKCk7CisKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5EZXBhcnR1cmVzPC9iPjwvZW0+JyByZWZlcmVuY2UgbGlzdCBmZWF0dXJlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRVJlZmVyZW5jZSBJTlRFR1JBVElPTl9MQUJFTF9WQUxVRV9fREVQQVJUVVJFUyA9IGVJTlNUQU5DRS5nZXRJbnRlZ3JhdGlvbkxhYmVsVmFsdWVfRGVwYXJ0dXJlcygpOworCisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkV4Y2hhbmdlVHlwZSA8ZW0+RXhjaGFuZ2UgVHlwZTwvZW0+fScgZW51bS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkV4Y2hhbmdlVHlwZQorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5pbXBsLkdyYXBoUGFja2FnZUltcGwjZ2V0RXhjaGFuZ2VUeXBlKCkKKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUVudW0gRVhDSEFOR0VfVFlQRSA9IGVJTlNUQU5DRS5nZXRFeGNoYW5nZVR5cGUoKTsKKworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPklsbGVnYWwgQXJndW1lbnQgRXhjZXB0aW9uPC9lbT4nIGRhdGEgdHlwZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBzZWUgamF2YS5sYW5nLklsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5pbXBsLkdyYXBoUGFja2FnZUltcGwjZ2V0SWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCkKKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRURhdGFUeXBlIElMTEVHQUxfQVJHVU1FTlRfRVhDRVBUSU9OID0gZUlOU1RBTkNFLmdldElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigpOworCisJfQorCit9IC8vR3JhcGhQYWNrYWdlCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoL0dyYXBoUGFydGl0aW9uZXIuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGgvR3JhcGhQYXJ0aXRpb25lci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUyZDg1MTQKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoL0dyYXBoUGFydGl0aW9uZXIuamF2YQpAQCAtMCwwICsxLDg2IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaDsKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIAorICogQ29weXJpZ2h0IChjKSAyMDExIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiAKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdCAKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sIAorICogCisgKiBDb250cmlidXRvcnM6IAorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiAKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLkVMaXN0OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uSWRlbnRpZmlhYmxlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5EZWNvcmF0b3I7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIEEgcmVwcmVzZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPlBhcnRpdGlvbmVyPC9iPjwvZW0+Jy4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICoKKyAqIDxwPgorICogVGhlIGZvbGxvd2luZyBmZWF0dXJlcyBhcmUgc3VwcG9ydGVkOgorICogPHVsPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5HcmFwaFBhcnRpdGlvbmVyI2dldE51bVByb2Nlc3NlcyA8ZW0+TnVtIFByb2Nlc3NlczwvZW0+fTwvbGk+CisgKiA8L3VsPgorICogPC9wPgorICoKKyAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkdyYXBoUGFja2FnZSNnZXRHcmFwaFBhcnRpdGlvbmVyKCkKKyAqIEBtb2RlbCBhYnN0cmFjdD0idHJ1ZSIKKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGludGVyZmFjZSBHcmFwaFBhcnRpdGlvbmVyIGV4dGVuZHMgRU9iamVjdCB7CisJLyoqCisJICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+TnVtIFByb2Nlc3NlczwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIGlzIDxjb2RlPiIxIjwvY29kZT4uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8cD4KKwkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5OdW0gUHJvY2Vzc2VzPC9lbT4nIGF0dHJpYnV0ZSBpc24ndCBjbGVhciwKKwkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uCisJICogPC9wPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPk51bSBQcm9jZXNzZXM8L2VtPicgYXR0cmlidXRlLgorCSAqIEBzZWUgI3NldE51bVByb2Nlc3NlcyhpbnQpCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguR3JhcGhQYWNrYWdlI2dldEdyYXBoUGFydGl0aW9uZXJfTnVtUHJvY2Vzc2VzKCkKKwkgKiBAbW9kZWwgZGVmYXVsdD0iMSIKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJaW50IGdldE51bVByb2Nlc3NlcygpOworCisJLyoqCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkdyYXBoUGFydGl0aW9uZXIjZ2V0TnVtUHJvY2Vzc2VzIDxlbT5OdW0gUHJvY2Vzc2VzPC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5OdW0gUHJvY2Vzc2VzPC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiBAc2VlICNnZXROdW1Qcm9jZXNzZXMoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwl2b2lkIHNldE51bVByb2Nlc3NlcyhpbnQgdmFsdWUpOworCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAbW9kZWwgbWFueT0iZmFsc2UiCisJICogQGdlbmVyYXRlZAorCSAqLworCUVMaXN0PER5bmFtaWNMYWJlbD4gcGFydGl0aW9uRGVjb3JhdG9yTGFiZWxzKERlY29yYXRvciBkZWNvcmF0b3IsIGludCBwcm9jZXNzUmFuayk7CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBtb2RlbCBtYW55PSJmYWxzZSIKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUxpc3Q8RHluYW1pY0xhYmVsPiBwYXJ0aXRpb25EZWNvcmF0b3JMYWJlbHMoRGVjb3JhdG9yIGRlY29yYXRvcik7CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBtb2RlbAorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlib29sZWFuIGlzTWFuYWdlZChJZGVudGlmaWFibGUgaWRlbnRpZmlhYmxlKTsKKworfSAvLyBHcmFwaFBhcnRpdGlvbmVyCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoL0ludGVncmF0aW9uTGFiZWwuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGgvSW50ZWdyYXRpb25MYWJlbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE3YmU3M2UKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoL0ludGVncmF0aW9uTGFiZWwuamF2YQpAQCAtMCwwICsxLDE2MyBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGg7DQorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogDQorICogQ29weXJpZ2h0IChjKSAyMDExIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiANCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIA0KKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCANCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdCANCisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbCANCisgKiANCisgKiBDb250cmlidXRvcnM6IA0KKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gDQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQorDQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5TVEVNVGltZTsNCisNCisvKioNCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKyAqIEEgcmVwcmVzZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPkludGVncmF0aW9uIExhYmVsPC9iPjwvZW0+Jy4NCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisgKg0KKyAqIDxwPg0KKyAqIFRoZSBmb2xsb3dpbmcgZmVhdHVyZXMgYXJlIHN1cHBvcnRlZDoNCisgKiA8dWw+DQorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5JbnRlZ3JhdGlvbkxhYmVsI2dldERlbHRhVmFsdWUgPGVtPkRlbHRhIFZhbHVlPC9lbT59PC9saT4NCisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkludGVncmF0aW9uTGFiZWwjZ2V0VGVtcFZhbHVlIDxlbT5UZW1wIFZhbHVlPC9lbT59PC9saT4NCisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkludGVncmF0aW9uTGFiZWwjZ2V0UHJvYmVWYWx1ZSA8ZW0+UHJvYmUgVmFsdWU8L2VtPn08L2xpPg0KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguSW50ZWdyYXRpb25MYWJlbCNnZXRFcnJvclNjYWxlIDxlbT5FcnJvciBTY2FsZTwvZW0+fTwvbGk+DQorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5JbnRlZ3JhdGlvbkxhYmVsI2dldElkZW50aWZpZXIgPGVtPklkZW50aWZpZXI8L2VtPn08L2xpPg0KKyAqIDwvdWw+DQorICogPC9wPg0KKyAqDQorICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguR3JhcGhQYWNrYWdlI2dldEludGVncmF0aW9uTGFiZWwoKQ0KKyAqIEBtb2RlbCBhYnN0cmFjdD0idHJ1ZSINCisgKiBAZ2VuZXJhdGVkDQorICovDQorcHVibGljIGludGVyZmFjZSBJbnRlZ3JhdGlvbkxhYmVsIGV4dGVuZHMgRHluYW1pY05vZGVMYWJlbCB7DQorCS8qKg0KKwkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5EZWx0YSBWYWx1ZTwvYj48L2VtPicgcmVmZXJlbmNlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8cD4NCisJICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+RGVsdGEgVmFsdWU8L2VtPicgcmVmZXJlbmNlIGlzbid0IGNsZWFyLA0KKwkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uDQorCSAqIDwvcD4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPkRlbHRhIFZhbHVlPC9lbT4nIHJlZmVyZW5jZS4NCisJICogQHNlZSAjc2V0RGVsdGFWYWx1ZShJbnRlZ3JhdGlvbkxhYmVsVmFsdWUpDQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkdyYXBoUGFja2FnZSNnZXRJbnRlZ3JhdGlvbkxhYmVsX0RlbHRhVmFsdWUoKQ0KKwkgKiBAbW9kZWwNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJSW50ZWdyYXRpb25MYWJlbFZhbHVlIGdldERlbHRhVmFsdWUoKTsNCisNCisJLyoqDQorCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5JbnRlZ3JhdGlvbkxhYmVsI2dldERlbHRhVmFsdWUgPGVtPkRlbHRhIFZhbHVlPC9lbT59JyByZWZlcmVuY2UuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5EZWx0YSBWYWx1ZTwvZW0+JyByZWZlcmVuY2UuDQorCSAqIEBzZWUgI2dldERlbHRhVmFsdWUoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwl2b2lkIHNldERlbHRhVmFsdWUoSW50ZWdyYXRpb25MYWJlbFZhbHVlIHZhbHVlKTsNCisNCisJLyoqDQorCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPlRlbXAgVmFsdWU8L2I+PC9lbT4nIHJlZmVyZW5jZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPHA+DQorCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPlRlbXAgVmFsdWU8L2VtPicgcmVmZXJlbmNlIGlzbid0IGNsZWFyLA0KKwkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uDQorCSAqIDwvcD4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPlRlbXAgVmFsdWU8L2VtPicgcmVmZXJlbmNlLg0KKwkgKiBAc2VlICNzZXRUZW1wVmFsdWUoSW50ZWdyYXRpb25MYWJlbFZhbHVlKQ0KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5HcmFwaFBhY2thZ2UjZ2V0SW50ZWdyYXRpb25MYWJlbF9UZW1wVmFsdWUoKQ0KKwkgKiBAbW9kZWwNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJSW50ZWdyYXRpb25MYWJlbFZhbHVlIGdldFRlbXBWYWx1ZSgpOw0KKw0KKwkvKioNCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkludGVncmF0aW9uTGFiZWwjZ2V0VGVtcFZhbHVlIDxlbT5UZW1wIFZhbHVlPC9lbT59JyByZWZlcmVuY2UuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5UZW1wIFZhbHVlPC9lbT4nIHJlZmVyZW5jZS4NCisJICogQHNlZSAjZ2V0VGVtcFZhbHVlKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJdm9pZCBzZXRUZW1wVmFsdWUoSW50ZWdyYXRpb25MYWJlbFZhbHVlIHZhbHVlKTsNCisNCisJLyoqDQorCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPlByb2JlIFZhbHVlPC9iPjwvZW0+JyByZWZlcmVuY2UuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDxwPg0KKwkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5Qcm9iZSBWYWx1ZTwvZW0+JyByZWZlcmVuY2UgaXNuJ3QgY2xlYXIsDQorCSAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4NCisJICogPC9wPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+UHJvYmUgVmFsdWU8L2VtPicgcmVmZXJlbmNlLg0KKwkgKiBAc2VlICNzZXRQcm9iZVZhbHVlKEludGVncmF0aW9uTGFiZWxWYWx1ZSkNCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguR3JhcGhQYWNrYWdlI2dldEludGVncmF0aW9uTGFiZWxfUHJvYmVWYWx1ZSgpDQorCSAqIEBtb2RlbA0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlJbnRlZ3JhdGlvbkxhYmVsVmFsdWUgZ2V0UHJvYmVWYWx1ZSgpOw0KKw0KKwkvKioNCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkludGVncmF0aW9uTGFiZWwjZ2V0UHJvYmVWYWx1ZSA8ZW0+UHJvYmUgVmFsdWU8L2VtPn0nIHJlZmVyZW5jZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPlByb2JlIFZhbHVlPC9lbT4nIHJlZmVyZW5jZS4NCisJICogQHNlZSAjZ2V0UHJvYmVWYWx1ZSgpDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXZvaWQgc2V0UHJvYmVWYWx1ZShJbnRlZ3JhdGlvbkxhYmVsVmFsdWUgdmFsdWUpOw0KKw0KKwkvKioNCisJICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+RXJyb3IgU2NhbGU8L2I+PC9lbT4nIHJlZmVyZW5jZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPHA+DQorCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPkVycm9yIFNjYWxlPC9lbT4nIHJlZmVyZW5jZSBpc24ndCBjbGVhciwNCisJICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLg0KKwkgKiA8L3A+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5FcnJvciBTY2FsZTwvZW0+JyByZWZlcmVuY2UuDQorCSAqIEBzZWUgI3NldEVycm9yU2NhbGUoSW50ZWdyYXRpb25MYWJlbFZhbHVlKQ0KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5HcmFwaFBhY2thZ2UjZ2V0SW50ZWdyYXRpb25MYWJlbF9FcnJvclNjYWxlKCkNCisJICogQG1vZGVsDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCUludGVncmF0aW9uTGFiZWxWYWx1ZSBnZXRFcnJvclNjYWxlKCk7DQorDQorCS8qKg0KKwkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguSW50ZWdyYXRpb25MYWJlbCNnZXRFcnJvclNjYWxlIDxlbT5FcnJvciBTY2FsZTwvZW0+fScgcmVmZXJlbmNlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+RXJyb3IgU2NhbGU8L2VtPicgcmVmZXJlbmNlLg0KKwkgKiBAc2VlICNnZXRFcnJvclNjYWxlKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJdm9pZCBzZXRFcnJvclNjYWxlKEludGVncmF0aW9uTGFiZWxWYWx1ZSB2YWx1ZSk7DQorDQorCS8qKg0KKwkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5JZGVudGlmaWVyPC9iPjwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDxwPg0KKwkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5JZGVudGlmaWVyPC9lbT4nIGF0dHJpYnV0ZSBpc24ndCBjbGVhciwNCisJICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLg0KKwkgKiA8L3A+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5JZGVudGlmaWVyPC9lbT4nIGF0dHJpYnV0ZS4NCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguR3JhcGhQYWNrYWdlI2dldEludGVncmF0aW9uTGFiZWxfSWRlbnRpZmllcigpDQorCSAqIEBtb2RlbCBjaGFuZ2VhYmxlPSJmYWxzZSINCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJU3RyaW5nIGdldElkZW50aWZpZXIoKTsNCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAbW9kZWwNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJdm9pZCByZXNldChTVEVNVGltZSB0aW1lKTsNCisNCit9IC8vIEludGVncmF0aW9uTGFiZWwNCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoL0ludGVncmF0aW9uTGFiZWxWYWx1ZS5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC9JbnRlZ3JhdGlvbkxhYmVsVmFsdWUuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZDVjNDFlCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC9JbnRlZ3JhdGlvbkxhYmVsVmFsdWUuamF2YQpAQCAtMCwwICsxLDE1NSBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGg7DQorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogDQorICogQ29weXJpZ2h0IChjKSAyMDExIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiANCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIA0KKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCANCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdCANCisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbCANCisgKiANCisgKiBDb250cmlidXRvcnM6IA0KKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gDQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQorDQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5FTGlzdDsNCisNCisvKioNCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKyAqIEEgcmVwcmVzZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPkludGVncmF0aW9uIExhYmVsIFZhbHVlPC9iPjwvZW0+Jy4NCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisgKg0KKyAqIDxwPg0KKyAqIFRoZSBmb2xsb3dpbmcgZmVhdHVyZXMgYXJlIHN1cHBvcnRlZDoNCisgKiA8dWw+DQorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5JbnRlZ3JhdGlvbkxhYmVsVmFsdWUjZ2V0QXJyaXZhbHMgPGVtPkFycml2YWxzPC9lbT59PC9saT4NCisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkludGVncmF0aW9uTGFiZWxWYWx1ZSNnZXREZXBhcnR1cmVzIDxlbT5EZXBhcnR1cmVzPC9lbT59PC9saT4NCisgKiA8L3VsPg0KKyAqIDwvcD4NCisgKg0KKyAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkdyYXBoUGFja2FnZSNnZXRJbnRlZ3JhdGlvbkxhYmVsVmFsdWUoKQ0KKyAqIEBtb2RlbCBhYnN0cmFjdD0idHJ1ZSINCisgKiBAZ2VuZXJhdGVkDQorICovDQorcHVibGljIGludGVyZmFjZSBJbnRlZ3JhdGlvbkxhYmVsVmFsdWUgZXh0ZW5kcyBMYWJlbFZhbHVlIHsNCisJLyoqDQorCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPkFycml2YWxzPC9iPjwvZW0+JyByZWZlcmVuY2UgbGlzdC4NCisJICogVGhlIGxpc3QgY29udGVudHMgYXJlIG9mIHR5cGUge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5FeGNoYW5nZX0uDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDxwPg0KKwkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5BcnJpdmFsczwvZW0+JyByZWZlcmVuY2UgbGlzdCBpc24ndCBjbGVhciwNCisJICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLg0KKwkgKiA8L3A+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5BcnJpdmFsczwvZW0+JyByZWZlcmVuY2UgbGlzdC4NCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguR3JhcGhQYWNrYWdlI2dldEludGVncmF0aW9uTGFiZWxWYWx1ZV9BcnJpdmFscygpDQorCSAqIEBtb2RlbCBjaGFuZ2VhYmxlPSJmYWxzZSINCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJRUxpc3Q8RXhjaGFuZ2U+IGdldEFycml2YWxzKCk7DQorDQorCS8qKg0KKwkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5EZXBhcnR1cmVzPC9iPjwvZW0+JyByZWZlcmVuY2UgbGlzdC4NCisJICogVGhlIGxpc3QgY29udGVudHMgYXJlIG9mIHR5cGUge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5FeGNoYW5nZX0uDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDxwPg0KKwkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5EZXBhcnR1cmVzPC9lbT4nIHJlZmVyZW5jZSBsaXN0IGlzbid0IGNsZWFyLA0KKwkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uDQorCSAqIDwvcD4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPkRlcGFydHVyZXM8L2VtPicgcmVmZXJlbmNlIGxpc3QuDQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkdyYXBoUGFja2FnZSNnZXRJbnRlZ3JhdGlvbkxhYmVsVmFsdWVfRGVwYXJ0dXJlcygpDQorCSAqIEBtb2RlbCBjaGFuZ2VhYmxlPSJmYWxzZSINCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJRUxpc3Q8RXhjaGFuZ2U+IGdldERlcGFydHVyZXMoKTsNCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAbW9kZWwNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJSW50ZWdyYXRpb25MYWJlbFZhbHVlIHNldChJbnRlZ3JhdGlvbkxhYmVsVmFsdWUgdmFsdWUpOw0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBtb2RlbA0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlJbnRlZ3JhdGlvbkxhYmVsVmFsdWUgYWRkKEludGVncmF0aW9uTGFiZWxWYWx1ZSB2YWx1ZSk7DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQG1vZGVsDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCUludGVncmF0aW9uTGFiZWxWYWx1ZSBzdWIoSW50ZWdyYXRpb25MYWJlbFZhbHVlIHZhbHVlKTsNCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAbW9kZWwNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJSW50ZWdyYXRpb25MYWJlbFZhbHVlIHNjYWxlKGRvdWJsZSBzY2FsZUZhY3Rvcik7DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQG1vZGVsDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCUludGVncmF0aW9uTGFiZWxWYWx1ZSBhZGQoZG91YmxlIGFkZGl0aW9uKTsNCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAbW9kZWwNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJSW50ZWdyYXRpb25MYWJlbFZhbHVlIGFicygpOw0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBtb2RlbA0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlib29sZWFuIGF2b2lkTmVnYXRpdmUoSW50ZWdyYXRpb25MYWJlbFZhbHVlIHZhbHVlKTsNCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAbW9kZWwNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJZG91YmxlIGNvbXB1dGVEZWx0YUFkanVzdG1lbnQoSW50ZWdyYXRpb25MYWJlbFZhbHVlIHZhbHVlKTsNCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAbW9kZWwNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJSW50ZWdyYXRpb25MYWJlbFZhbHVlIGRpdmlkZShJbnRlZ3JhdGlvbkxhYmVsVmFsdWUgdmFsdWUpOw0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBtb2RlbA0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlkb3VibGUgbWF4KCk7DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQG1vZGVsDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXZvaWQgcHJlcGFyZUN5Y2xlKCk7DQorCQ0KKwlzdGF0aWMgZG91YmxlIE1JTklNVU1fVkFMVUUgPSAtMC4xOw0KKw0KK30gLy8gSW50ZWdyYXRpb25MYWJlbFZhbHVlDQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC9MYWJlbC5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC9MYWJlbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA3MDliMjIKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoL0xhYmVsLmphdmEKQEAgLTAsMCArMSw5OCBAQAorLy8gTGFiZWwuamF2YQorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGg7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlVSSTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuU1RFTVVSSTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLklkZW50aWZpYWJsZTsKKworLyoqCisgKiBBIDxjb2RlPkxhYmVsPC9jb2RlPiByZXByZXNlbnRzIGF0dHJpYnV0ZXMgb2YgZWl0aGVyIGEge0BsaW5rIE5vZGV9LAorICoge0BsaW5rIEVkZ2V9LCBvciB7QGxpbmsgR3JhcGh9LiBUaGUgYXR0cmlidXRlcyBhcmUgcmVwcmVzZW50ZWQgYnkgYQorICoge0BsaW5rIExhYmVsVmFsdWV9LgorICogCisgKiBAc2VlIE5vZGUKKyAqIEBzZWUgRWRnZQorICogQHNlZSBHcmFwaAorICogQHNlZSBOb2RlTGFiZWwKKyAqIEBzZWUgRHluYW1pY0xhYmVsCisgKiBAc2VlIFN0YXRpY05vZGVMYWJlbAorICogQHNlZSBEeW5hbWljTm9kZUxhYmVsCisgKiAKKyAqIAorICogQG1vZGVsIGFic3RyYWN0PSJ0cnVlIgorICovCitwdWJsaWMgaW50ZXJmYWNlIExhYmVsIGV4dGVuZHMgSWRlbnRpZmlhYmxlIHsKKworCS8qKgorCSAqIFRoaXMgaXMgdGhlIHRvcC1sZXZlbCBzZWdtZW50IGZvciBhbGwgdHlwZSBVUkkncyBmb3IgbGFiZWxzLgorCSAqLworCVN0cmluZyBVUklfVFlQRV9MQUJFTF9TRUdNRU5UID0gImxhYmVsIjsKKworCS8qKgorCSAqIFRoaXMgaXMgdGhlIHR5cGUgVVJJIGZvciBhIExhYmVsCisJICovCisJVVJJIFVSSV9UWVBFX0xBQkVMID0gU1RFTVVSSS5jcmVhdGVUeXBlVVJJKFVSSV9UWVBFX0xBQkVMX1NFR01FTlQpOworCisJLyoqCisJICogQHJldHVybiB0aGUge0BsaW5rIElkZW50aWZpYWJsZX0gbGFiZWxlZCBieSB0aGlzIDxjb2RlPkxhYmVsPC9jb2RlPgorCSAqIEBtb2RlbCB2b2xhdGlsZT0idHJ1ZSIgdHJhbnNpZW50PSJ0cnVlIgorCSAqLworCUlkZW50aWZpYWJsZSBnZXRJZGVudGlmaWFibGUoKTsKKworCS8qKgorCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5MYWJlbCNnZXRJZGVudGlmaWFibGUgPGVtPklkZW50aWZpYWJsZTwvZW0+fScgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPklkZW50aWZpYWJsZTwvZW0+JyByZWZlcmVuY2UuCisJICogQHNlZSAjZ2V0SWRlbnRpZmlhYmxlKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJdm9pZCBzZXRJZGVudGlmaWFibGUoSWRlbnRpZmlhYmxlIHZhbHVlKTsKKworCS8qKgorCSAqIEByZXR1cm4gdGhlIHtAbGluayBVUkl9IG9mIHRoZSB7QGxpbmsgSWRlbnRpZmlhYmxlfSB0aGF0IHRoaXMKKwkgKiAgICAgICAgIDxjb2RlPkxhYmVsPC9jb2RlPiBsYWJlbHMuIFRoaXMgdmFsdWUgaXMgdHlwaWNhbGx5IHVzZWQgd2hlbgorCSAqICAgICAgICAgY29tYmluaW5nICJncmFwaCBmcmFnbWVudHMiIHRvIHJlc29sdmUgdGhlIGNvbm5lY3Rpb24gYmV0d2VlbiB0aGUKKwkgKiAgICAgICAgIDxjb2RlPkxhYmVsPC9jb2RlPiBhbmQgdGhlIHtAbGluayBJZGVudGlmaWFibGV9IGl0IGxhYmVscy4KKwkgKiBAc2VlIEdyYXBoI2FkZEdyYXBoKEdyYXBoKQorCSAqIEBzZWUgVW5yZXNvbHZlZElkZW50aWZpYWJsZQorCSAqIEBzZWUgI2dldElkZW50aWZpYWJsZSgpCisJICogCisJICogQG1vZGVsCisJICovCisJVVJJIGdldFVSSU9mSWRlbnRpZmlhYmxlVG9CZUxhYmVsZWQoKTsKKworCS8qKgorCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5MYWJlbCNnZXRVUklPZklkZW50aWZpYWJsZVRvQmVMYWJlbGVkIDxlbT5VUkkgT2YgSWRlbnRpZmlhYmxlIFRvIEJlIExhYmVsZWQ8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5VUkkgT2YgSWRlbnRpZmlhYmxlIFRvIEJlIExhYmVsZWQ8L2VtPicgYXR0cmlidXRlLgorCSAqIEBzZWUgI2dldFVSSU9mSWRlbnRpZmlhYmxlVG9CZUxhYmVsZWQoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwl2b2lkIHNldFVSSU9mSWRlbnRpZmlhYmxlVG9CZUxhYmVsZWQoVVJJIHZhbHVlKTsKKworCS8qKgorCSAqIEBtb2RlbCBjb250YWlubWVudD0idHJ1ZSIgcmVxdWlyZWQ9InRydWUiCisJICovCisJTGFiZWxWYWx1ZSBnZXRDdXJyZW50VmFsdWUoKTsKKworCS8qKgorCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5MYWJlbCNnZXRDdXJyZW50VmFsdWUgPGVtPkN1cnJlbnQgVmFsdWU8L2VtPn0nIGNvbnRhaW5tZW50IHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5DdXJyZW50IFZhbHVlPC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZS4KKwkgKiBAc2VlICNnZXRDdXJyZW50VmFsdWUoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwl2b2lkIHNldEN1cnJlbnRWYWx1ZShMYWJlbFZhbHVlIHZhbHVlKTsKKworfSAvLyBMYWJlbApkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC9MYWJlbFZhbHVlLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoL0xhYmVsVmFsdWUuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zM2U0NzdmCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC9MYWJlbFZhbHVlLmphdmEKQEAgLTAsMCArMSw0MSBAQAorLy8gTGFiZWxWYWx1ZS5qYXZhCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaDsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLlNhbml0eUNoZWNrZXI7CisKKy8qKgorICogQSA8Y29kZT5MYWJlbFZhbHVlPC9jb2RlPiBzdG9yZXMgdGhlIGF0dHJpYnV0ZXMgb2YgYSB7QGxpbmsgTGFiZWx9LgorICogCisgKiBAc2VlIExhYmVsCisgKiBAc2VlIER5bmFtaWNMYWJlbAorICogQHNlZSBEeW5hbWljTm9kZUxhYmVsCisgKiAKKyAqIEBtb2RlbCBhYnN0cmFjdD0idHJ1ZSIKKyAqLworcHVibGljIGludGVyZmFjZSBMYWJlbFZhbHVlIGV4dGVuZHMgU2FuaXR5Q2hlY2tlciB7CisKKwkvKioKKwkgKiBAbW9kZWwgdm9sYXRpbGU9InRydWUiIHRyYW5zaWVudD0idHJ1ZSIgY2hhbmdlYWJsZT0iZmFsc2UiCisJICovCisJdm9pZCByZXNldCgpOworCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAbW9kZWwKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJYm9vbGVhbiBzYW1lVmFsdWUoTGFiZWxWYWx1ZSBvdGhlckxhYmVsVmFsdWUpOworCit9IC8vIExhYmVsVmFsdWUKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGgvTm9kZS5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC9Ob2RlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTFjZDNkOQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGgvTm9kZS5qYXZhCkBAIC0wLDAgKzEsNjYgQEAKKy8vIE5vZGUuamF2YQorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGg7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLkVMaXN0OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uSWRlbnRpZmlhYmxlOworCisvKioKKyAqIEEgPGNvZGU+Tm9kZTwvY29kZT4gcmVwcmVzZW50cyBhIHJlYWwgb3IgYWJzdHJhY3QgZW50aXR5LgorICogPHA+CisgKiBBIDxjb2RlPk5vZGU8L2NvZGU+IGNhbiBoYXZlICJhdHRyaWJ1dGVzIi4gVGhlIGF0dHJpYnV0ZXMgYXJlIHJlcHJlc2VudGVkCisgKiBieSB6ZXJvIG9yIG1vcmUge0BsaW5rIE5vZGVMYWJlbH1zLgorICogPC9wPgorICogPHA+CisgKiBBIDxjb2RlPk5vZGU8L2NvZGU+IGNhbiBoYXZlIHplcm8gb3IgbW9yZSAicmVsYXRpb25zaGlwcyIgd2l0aCBvbmUgb3IgbW9yZQorICogb3RoZXIgPGNvZGU+Tm9kZTwvY29kZT5zLiBUaGVzZSByZWxhdGlvbnNoaXBzIGNhbiBiZSB3aXRoIHRoZSBzYW1lCisgKiA8Y29kZT5Ob2RlPC9jb2RlPiBvciB3aXRoIG11bHRpcGxlIGRpZmZlcmVudCA8Y29kZT5Ob2RlPC9jb2RlPnMuIEEKKyAqIHNpbmdsZSByZWxhdGlvbnNoaXAgaXMgcmVwcmVzZW50ZWQgYnkgYW4ge0BsaW5rIEVkZ2V9LgorICogPC9wPgorICogCisgKiBAc2VlIEVkZ2UKKyAqIEBzZWUgTGFiZWwKKyAqIEBzZWUgTm9kZUxhYmVsCisgKiBAc2VlIEdyYXBoCisgKiAKKyAqIEBtb2RlbAorICovCitwdWJsaWMgaW50ZXJmYWNlIE5vZGUgZXh0ZW5kcyBJZGVudGlmaWFibGUgeworCisJLyoqCisJICogVGhpcyBpcyB0aGUgc2VnbWVudCBvZiB0aGUgdHlwZSBVUkkgdGhhdCBwcmVmaXhlcyBhbGwgb3RoZXIgc2VnbWVudHMgaW4gYQorCSAqIG5vZGUgdHlwZSBVUkkuCisJICovCisJU3RyaW5nIFVSSV9UWVBFX05PREVfU0VHTUVOVCA9ICJub2RlIjsKKworCS8vIC8qKgorCS8vICogVGhpcyBpcyB0aGUgdHlwZSBVUkkgZm9yIGFyZWEgbGFiZWxzCisJLy8gKi8KKwkvLyBVUkkgVVJJX1RZUEVfR0VPR1JBUEhJQ19GRUFUVVJFX05PREUgPSBTVEVNVVJJCisJLy8gLmNyZWF0ZVR5cGVVUkkoVVJJX1RZUEVfTk9ERV9TRUdNRU5UKTsKKworCS8qKgorCSAqIEByZXR1cm4gdGhlIHtAbGluayBFZGdlfXMgdGhhdCByZXByZXNlbnQgdGhlIHJlbGF0aW9uc2hpcHMgb2YgdGhpcworCSAqICAgICAgICAgPGNvZGU+Tm9kZTwvY29kZT4uCisJICogQG1vZGVsIHR5cGU9IkVkZ2UiIGNvbnRhaW5tZW50PSJmYWxzZSIKKwkgKi8KKwlFTGlzdDxFZGdlPiBnZXRFZGdlcygpOworCisJLyoqCisJICogdGhlIHtAbGluayBMYWJlbH1zIHRoYXQgcmVwcmVzZW50IGF0dHJpYnV0ZXMgb2YgdGhpcyA8Y29kZT5Ob2RlPC9jb2RlPi4KKwkgKiAKKwkgKiBAbW9kZWwgdHlwZT0iTm9kZUxhYmVsIiBjb250YWlubWVudD0iZmFsc2UiIG9wcG9zaXRlPSJub2RlIgorCSAqLworCUVMaXN0PE5vZGVMYWJlbD4gZ2V0TGFiZWxzKCk7CisKK30gLy8gTm9kZQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC9Ob2RlTGFiZWwuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGgvTm9kZUxhYmVsLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjlmNDUzMwotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGgvTm9kZUxhYmVsLmphdmEKQEAgLTAsMCArMSw0MCBAQAorLy8gTm9kZUxhYmVsLmphdmEKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqCisgKiBBIDxjb2RlPk5vZGVMYWJlbDwvY29kZT4gaXMgYSB7QGxpbmsgTGFiZWx9IHRoYXQgcHJvdmlkZXMgYXR0cmlidXRlcyB0byBhCisgKiB7QGxpbmsgTm9kZX0uCisgKiAKKyAqIEBtb2RlbCBhYnN0cmFjdD0idHJ1ZSIKKyAqLworcHVibGljIGludGVyZmFjZSBOb2RlTGFiZWwgZXh0ZW5kcyBMYWJlbCB7CisKKwkvKioKKwkgKiBAcmV0dXJuIHRoZSB7QGxpbmsgTm9kZX0gdGhhdCB0aGlzIDxjb2RlPk5vZGVMYWJlbDwvY29kZT4gbGFiZWxzLiBUaGlzCisJICogICAgICAgICB2YWx1ZSBjYW4gYmUgbnVsbCBpbiBhIGdyYXBoIGZyYWdtZW50LgorCSAqIAorCSAqIEBtb2RlbCBjb250YWlubWVudD0iZmFsc2UiCisJICovCisJTm9kZSBnZXROb2RlKCk7CisKKwkvKioKKwkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguTm9kZUxhYmVsI2dldE5vZGUgPGVtPk5vZGU8L2VtPn0nIHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5Ob2RlPC9lbT4nIHJlZmVyZW5jZS4KKwkgKiBAc2VlICNnZXROb2RlKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJdm9pZCBzZXROb2RlKE5vZGUgdmFsdWUpOworCit9IC8vIE5vZGVMYWJlbApkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC9SZXNldHRhYmxlQWRhcHRlci5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC9SZXNldHRhYmxlQWRhcHRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM3ZjE1MTAKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoL1Jlc2V0dGFibGVBZGFwdGVyLmphdmEKQEAgLTAsMCArMSwyNSBAQAorLy8gUmVzZXR0YWJsZUFkYXB0ZXIuamF2YQorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGg7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioKKyAqIFRoaXMgaW50ZXJmYWNlIGlzIGltcGxlbWVudGVkIGJ5IGNsYXNzZXMgdGhhdCBhcmUgPGNvZGU+QWRhcHRlcjwvY29kZT5zCisgKiB0aGF0IGNhbiBiZSByZXNldC4gVGhpcyBpcyB0eXBpY2FsbHkgbmVlZGVkIHdoZW4gdGhlIGFkYXB0ZXIgbWFpbnRhaW5zIHNvbWUKKyAqIGtpbmQgb2Ygc3RhdGUgaW5mb3JtYXRpb24gdGhhdCBuZWVkcyB0byBiZSByZXNldCB3aGVuIHRoZSB2YWx1ZSBvZiB0aGUKKyAqIHtAbGluayBEeW5hbWljTGFiZWx9IGlzIHJlc2V0LiBUaGUgbWV0aG9kIHtAbGluayBEeW5hbWljTGFiZWwjcmVzZXQoKX0gc2NhbnMKKyAqIHRocm91Z2ggYWxsIG9mIHRoZSBhZGFwdGVycyBhdHRhY2hlZCB0byB7QGxpbmsgRHluYW1pY0xhYmVsfSBhbmQgcmVzZXRzIGFsbAorICogdGhhdCBpbXBsZW1lbnQgdGhpcyBpbnRlcmZhY2UuCisgKi8KK3B1YmxpYyBpbnRlcmZhY2UgUmVzZXR0YWJsZUFkYXB0ZXIgeworCXZvaWQgcmVzZXQoKTsKK30gLy8gUmVzZXR0YWJsZUFkYXB0ZXIKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGgvU2ltcGxlR3JhcGhQYXJ0aXRpb25lci5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC9TaW1wbGVHcmFwaFBhcnRpdGlvbmVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTQ3ZmRmNwotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGgvU2ltcGxlR3JhcGhQYXJ0aXRpb25lci5qYXZhCkBAIC0wLDAgKzEsMjQgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoOworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogCisgKiBDb3B5cmlnaHQgKGMpIDIwMTEgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuIAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyAKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0IAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwgCisgKiAKKyAqIENvbnRyaWJ1dG9yczogCisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIEEgcmVwcmVzZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPlNpbXBsZSBHcmFwaCBQYXJ0aXRpb25lcjwvYj48L2VtPicuCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqCisgKgorICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguR3JhcGhQYWNrYWdlI2dldFNpbXBsZUdyYXBoUGFydGl0aW9uZXIoKQorICogQG1vZGVsCisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBpbnRlcmZhY2UgU2ltcGxlR3JhcGhQYXJ0aXRpb25lciBleHRlbmRzIEdyYXBoUGFydGl0aW9uZXIgeworfSAvLyBTaW1wbGVHcmFwaFBhcnRpdGlvbmVyCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoL1N0YXRpY0VkZ2VMYWJlbC5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC9TdGF0aWNFZGdlTGFiZWwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZGM2M2NmCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC9TdGF0aWNFZGdlTGFiZWwuamF2YQpAQCAtMCwwICsxLDMzIEBACisvLyBTdGF0aWNFZGdlTGFiZWwuamF2YQorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGg7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworaW1wb3J0IGphdmEubGFuZy5yZWZsZWN0Lk1vZGlmaWVyOworCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLk1vZGlmaWFibGU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnRyaWdnZXIuVHJpZ2dlcjsKKworLyoqCisgKiBBIDxjb2RlPlN0YXRpY0VkZ2VMYWJlbDwvY29kZT4gaXMgYW4ge0BsaW5rIEVkZ2VMYWJlbH0gdGhhdCBvbmx5IGhhcyBhIHNpbmdsZQorICogImN1cnJlbnQiIHtAbGluayBMYWJlbFZhbHVlfS4gSXQgaXMgdHlwaWNhbGx5IHVzZWQgZm9yIHtAbGluayBFZGdlfQorICogYXR0cmlidXRlcyB0aGF0IHJhcmVseSBjaGFuZ2UgaW4gYSA8Y29kZT5TaW11bGF0aW9uPC9jb2RlPi4gQW4gZXhhbXBsZSB3b3VsZAorICogYmUgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHR3byByZWdpb25zIHNoYXJpbmcgYSBjb21tb24gYm9yZGVyLgorICogPHA+CisgKiBCeSBpbXBsZW1lbnRpbmcgdGhlIHtAbGluayBNb2RpZmlhYmxlfSBpbnRlcmZhY2UsIGEKKyAqIDxjb2RlPlN0YXRpY0VkZ2VMYWJlbDwvY29kZT4gaXMgaWRlbnRpZmllZCBhcyBiZWluZyBzb21ldGhpbmcgdGhhdCBjYW4gYmUKKyAqIGFsdGVyZWQgYnkgYSB7QGxpbmsgTW9kaWZpZXJ9IGFjdGl2YXRlZCBieSBhIHtAbGluayBUcmlnZ2VyfS4KKyAqIAorICogQG1vZGVsIGFic3RyYWN0PSJ0cnVlIgorICovCitwdWJsaWMgaW50ZXJmYWNlIFN0YXRpY0VkZ2VMYWJlbCBleHRlbmRzIEVkZ2VMYWJlbCwgU3RhdGljTGFiZWwgeworCS8vIE5vdGhpbmcKK30gLy8gU3RhdGljRWRnZUxhYmVsCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoL1N0YXRpY0xhYmVsLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoL1N0YXRpY0xhYmVsLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTZlNWJiNQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGgvU3RhdGljTGFiZWwuamF2YQpAQCAtMCwwICsxLDI3IEBACisvLyBTdGF0aWNMYWJlbAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGg7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLk1vZGlmaWFibGU7CisKKy8qKgorICogQSA8Y29kZT5TdGF0aWNMYWJlbDwvY29kZT4gaXMgYSBtYXJrZXIgY2xhc3MuCisgKiAKKyAqIEBzZWUgU3RhdGljTm9kZUxhYmVsCisgKiBAc2VlIFN0YXRpY0VkZ2VMYWJlbAorICogCisgKiBAbW9kZWwgYWJzdHJhY3Q9InRydWUiCisgKi8KK3B1YmxpYyBpbnRlcmZhY2UgU3RhdGljTGFiZWwgZXh0ZW5kcyBMYWJlbCwgTW9kaWZpYWJsZSB7CisJLy8gTm90aGluZworfSAvLyBTdGF0aWNMYWJlbApkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC9TdGF0aWNOb2RlTGFiZWwuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGgvU3RhdGljTm9kZUxhYmVsLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWUwNWY5NgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGgvU3RhdGljTm9kZUxhYmVsLmphdmEKQEAgLTAsMCArMSwzNCBAQAorLy8gU3RhdGljTm9kZUxhYmVsLmphdmEKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGphdmEubGFuZy5yZWZsZWN0Lk1vZGlmaWVyOworCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLk1vZGlmaWFibGU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnRyaWdnZXIuVHJpZ2dlcjsKKworLyoqCisgKiBBIDxjb2RlPlN0YXRpY05vZGVMYWJlbDwvY29kZT4gaXMgYSB7QGxpbmsgTm9kZUxhYmVsfSB0aGF0IG9ubHkgaGFzIGEgc2luZ2xlCisgKiAiY3VycmVudCIge0BsaW5rIExhYmVsVmFsdWV9LiBJdCBpcyB0eXBpY2FsbHkgdXNlZCBmb3Ige0BsaW5rIE5vZGV9CisgKiBhdHRyaWJ1dGVzIHRoYXQgcmFyZWx5IGNoYW5nZSBpbiBhIDxjb2RlPlNpbXVsYXRpb248L2NvZGU+LiBBbiBleGFtcGxlIHdvdWxkCisgKiBiZSB0aGUgYXJlYSBvZiBhIGdlb2dyYXBoaWMgbG9jYXRpb24uCisgKiA8cD4KKyAqIEJ5IGltcGxlbWVudGluZyB0aGUge0BsaW5rIE1vZGlmaWFibGV9IGludGVyZmFjZSwgYQorICogPGNvZGU+U3RhdGljTm9kZUxhYmVsPC9jb2RlPiBpcyBpZGVudGlmaWVkIGFzIGJlaW5nIHNvbWV0aGluZyB0aGF0IGNhbiBiZQorICogYWx0ZXJlZCBieSBhIHtAbGluayBNb2RpZmllcn0gYWN0aXZhdGVkIGJ5IGEge0BsaW5rIFRyaWdnZXJ9LgorICogCisgKiBAbW9kZWwgYWJzdHJhY3Q9InRydWUiCisgKi8KK3B1YmxpYyBpbnRlcmZhY2UgU3RhdGljTm9kZUxhYmVsIGV4dGVuZHMgTm9kZUxhYmVsLCBTdGF0aWNMYWJlbCB7CisJLy8gTm90aGluZworfSAvLyBTdGF0aWNOb2RlTGFiZWwKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGgvVW5yZXNvbHZlZElkZW50aWZpYWJsZS5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC9VbnJlc29sdmVkSWRlbnRpZmlhYmxlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDI3YjZhNgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGgvVW5yZXNvbHZlZElkZW50aWZpYWJsZS5qYXZhCkBAIC0wLDAgKzEsMTM4IEBACisvLyBVbnJlc29sdmVkSWRlbnRpZmlhYmxlLmphdmEKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5VUkk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3Q7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5JZGVudGlmaWFibGU7CisKKy8qKgorICogQW4gPGNvZGU+VW5yZXNvbHZlZElkZW50aWZpYWJsZTwvY29kZT4gaXMgY3JlYXRlZCBkdXJpbmcgdGhlIGdlbmVyYXRpb24gb2YKKyAqIHRoZSBjYW5vbmljYWwge0BsaW5rIEdyYXBofSAoc2VlCisgKiB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLk1vZGVsI2dldENhbm9uaWNhbEdyYXBoKFVSSSkpIHdoZW4gYW4ge3tAbGluayBFZGdlfQorICogb3IgYSB7QGxpbmsgTGFiZWx9IGNhbm5vdCBiZSBtYXRjaGVkIHdpdGggdGhlIHtAbGluayBOb2RlfSBvciB7QGxpbmsgR3JhcGh9CisgKiB0aGF0IGl0cyB0YXJnZXQge0BsaW5rIFVSSX0gc3BlY2lmaWVzLgorICogPHA+CisgKiBJbnN0YW5jZXMgb2YgPGNvZGU+VW5yZXNvbHZlZElkZW50aWZpYWJsZTwvY29kZT4gYXJlIHVzZWQgdG8gcmVwb3J0IHRoZQorICogaW5hYmlsaXR5IHRvIHJlc29sdmUgdGhlIHtAbGluayBVUkl9LgorICogPC9wPgorICogCisgKiBAbW9kZWwKKyAqLworcHVibGljIGludGVyZmFjZSBVbnJlc29sdmVkSWRlbnRpZmlhYmxlIGV4dGVuZHMgRU9iamVjdCB7CisKKwkvKioKKwkgKiBUaGlzIGlzIHRoZSB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNjZW5hcmlvLlNjZW5hcmlvfSB0aGF0CisJICogY29udGFpbnMgdGhlIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuTW9kZWx9IHRoYXQgaXMKKwkgKiBjcmVhdGluZyB0aGUgY2Fub25pY2FsIHtAbGluayBHcmFwaH0uCisJICogCisJICogVE9ETyBzaG91bGRuJ3QgdGhlIHJldHVybiB2YWx1ZSBiZSBTY2VuYXJpbz8KKwkgKiAKKwkgKiBAbW9kZWwgY29udGFpbm1lbnQ9ImZhbHNlIgorCSAqLworCUlkZW50aWZpYWJsZSBnZXRTY2VuYXJpbygpOworCisJLyoqCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLlVucmVzb2x2ZWRJZGVudGlmaWFibGUjZ2V0U2NlbmFyaW8gPGVtPlNjZW5hcmlvPC9lbT59JyByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+U2NlbmFyaW88L2VtPicgcmVmZXJlbmNlLgorCSAqIEBzZWUgI2dldFNjZW5hcmlvKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJdm9pZCBzZXRTY2VuYXJpbyhJZGVudGlmaWFibGUgdmFsdWUpOworCisJLyoqCisJICogVGhpcyBpcyB0aGUge0BsaW5rIE1vZGVsfSB0aGF0IHdhcyBjcmVhdGluZyB0aGUgY2Fub25pY2FsIHtAbGluayBHcmFwaH0KKwkgKiB3aGVuIHRoZSB1bnJlc29sdmVkIHtAbGluayBVUkl9IHdhcyBlbmNvdW50ZXJlZC4KKwkgKiAKKwkgKiBAbW9kZWwgY29udGFpbm1lbnQ9ImZhbHNlIgorCSAqLworCUlkZW50aWZpYWJsZSBnZXRNb2RlbCgpOworCisJLyoqCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLlVucmVzb2x2ZWRJZGVudGlmaWFibGUjZ2V0TW9kZWwgPGVtPk1vZGVsPC9lbT59JyByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+TW9kZWw8L2VtPicgcmVmZXJlbmNlLgorCSAqIEBzZWUgI2dldE1vZGVsKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJdm9pZCBzZXRNb2RlbChJZGVudGlmaWFibGUgdmFsdWUpOworCisJLyoqCisJICogVGhpcyBpcyB0aGUge0BsaW5rIEdyYXBofSB0aGF0IGNvbnRhaW5zIHRoZSB7QGxpbmsgRWRnZX0gb3Ige0BsaW5rIExhYmVsfQorCSAqIHRoYXQgaGFzIHRoZSB1bnJlc29sdmVkIHtAbGluayBVUkl9LgorCSAqIAorCSAqIFRPRE8gQlVHIHRoaXMgdmFsdWUgaXMgYWx3YXlzIG51bGwuCisJICogCisJICogQG1vZGVsIGNvbnRhaW5tZW50PSJmYWxzZSIKKwkgKi8KKwlJZGVudGlmaWFibGUgZ2V0R3JhcGgoKTsKKworCS8qKgorCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5VbnJlc29sdmVkSWRlbnRpZmlhYmxlI2dldEdyYXBoIDxlbT5HcmFwaDwvZW0+fScgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPkdyYXBoPC9lbT4nIHJlZmVyZW5jZS4KKwkgKiBAc2VlICNnZXRHcmFwaCgpCisJICogQGdlbmVyYXRlZAorCSAqLworCXZvaWQgc2V0R3JhcGgoSWRlbnRpZmlhYmxlIHZhbHVlKTsKKworCS8qKgorCSAqIEByZXR1cm4gdGhlIHtAbGluayBFZGdlfSBvciB7QGxpbmsgTGFiZWx9IHRoYXQgaGFzIHRoZSB1bnJlc29sdmVkIHRhcmdldAorCSAqICAgICAgICAge0BsaW5rIFVSSX0uCisJICogQG1vZGVsIGNvbnRhaW5tZW50PSJmYWxzZSIKKwkgKi8KKwlJZGVudGlmaWFibGUgZ2V0SWRlbnRpZmlhYmxlKCk7CisKKwkvKioKKwkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguVW5yZXNvbHZlZElkZW50aWZpYWJsZSNnZXRJZGVudGlmaWFibGUgPGVtPklkZW50aWZpYWJsZTwvZW0+fScgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPklkZW50aWZpYWJsZTwvZW0+JyByZWZlcmVuY2UuCisJICogQHNlZSAjZ2V0SWRlbnRpZmlhYmxlKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJdm9pZCBzZXRJZGVudGlmaWFibGUoSWRlbnRpZmlhYmxlIHZhbHVlKTsKKworCS8qKgorCSAqIEByZXR1cm4gdGhlIHVucmVzb2x2ZWQge0BsaW5rIFVSSX0uCisJICogCisJICogQG1vZGVsCisJICovCisJVVJJIGdldFVucmVzb2x2ZWRVUkkoKTsKKworCS8qKgorCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5VbnJlc29sdmVkSWRlbnRpZmlhYmxlI2dldFVucmVzb2x2ZWRVUkkgPGVtPlVucmVzb2x2ZWQgVVJJPC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+VW5yZXNvbHZlZCBVUkk8L2VtPicgYXR0cmlidXRlLgorCSAqIEBzZWUgI2dldFVucmVzb2x2ZWRVUkkoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwl2b2lkIHNldFVucmVzb2x2ZWRVUkkoVVJJIHZhbHVlKTsKKworCS8qKgorCSAqIEByZXR1cm4gZWl0aGVyICJOT0RFIEEiIG9yICJOT0RFIEIiIGZvciBhbiB7QGxpbmsgRWRnZX0sIG9yICJOT0RFIiBmb3IgYQorCSAqICAgICAgICAge0BsaW5rIExhYmVsfS4KKwkgKiBAbW9kZWwKKwkgKi8KKwlTdHJpbmcgZ2V0RmllbGROYW1lKCk7CisKKwkvKioKKwkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguVW5yZXNvbHZlZElkZW50aWZpYWJsZSNnZXRGaWVsZE5hbWUgPGVtPkZpZWxkIE5hbWU8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5GaWVsZCBOYW1lPC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiBAc2VlICNnZXRGaWVsZE5hbWUoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwl2b2lkIHNldEZpZWxkTmFtZShTdHJpbmcgdmFsdWUpOworCit9IC8vIFVucmVzb2x2ZWRJZGVudGlmaWFibGUKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGgvaW1wbC9EeW5hbWljRWRnZUxhYmVsSW1wbC5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC9pbXBsL0R5bmFtaWNFZGdlTGFiZWxJbXBsLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGE5OGM5YgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGgvaW1wbC9EeW5hbWljRWRnZUxhYmVsSW1wbC5qYXZhCkBAIC0wLDAgKzEsMjU0IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5pbXBsOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb25DaGFpbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5JbnRlcm5hbEVPYmplY3Q7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLmltcGwuRU5vdGlmaWNhdGlvbkltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnV0aWwuRWNvcmVVdGlsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uSWRlbnRpZmlhYmxlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5EeW5hbWljRWRnZUxhYmVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5FZGdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5FZGdlTGFiZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkdyYXBoUGFja2FnZTsKKworLy9pbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLkRlY29yYXRvcjsKKy8vaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5Nb2RlbFBhY2thZ2U7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIEFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5EeW5hbWljIEVkZ2UgTGFiZWw8L2I+PC9lbT4nLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiA8cD4KKyAqIFRoZSBmb2xsb3dpbmcgZmVhdHVyZXMgYXJlIGltcGxlbWVudGVkOgorICogPHVsPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5pbXBsLkR5bmFtaWNFZGdlTGFiZWxJbXBsI2dldEVkZ2UgPGVtPkVkZ2U8L2VtPn08L2xpPgorICogPC91bD4KKyAqIDwvcD4KKyAqCisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBhYnN0cmFjdCBjbGFzcyBEeW5hbWljRWRnZUxhYmVsSW1wbCBleHRlbmRzIER5bmFtaWNMYWJlbEltcGwgaW1wbGVtZW50cyBEeW5hbWljRWRnZUxhYmVsIHsKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgRHluYW1pY0VkZ2VMYWJlbEltcGwoKSB7CisJCXN1cGVyKCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIEVDbGFzcyBlU3RhdGljQ2xhc3MoKSB7CisJCXJldHVybiBHcmFwaFBhY2thZ2UuTGl0ZXJhbHMuRFlOQU1JQ19FREdFX0xBQkVMOworCX0KKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmltcGwuTGFiZWxJbXBsI2dldElkZW50aWZpYWJsZSgpCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIElkZW50aWZpYWJsZSBnZXRJZGVudGlmaWFibGUoKSB7CisJCXJldHVybiBnZXRFZGdlKCk7CisJfSAvLyBnZXRJZGVudGlmaWFibGUKKworCQorCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmltcGwuTGFiZWxJbXBsI3NldElkZW50aWZpYWJsZShvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLklkZW50aWZpYWJsZSkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBzZXRJZGVudGlmaWFibGUoSWRlbnRpZmlhYmxlIG5ld0lkZW50aWZpYWJsZSkgeworCQlzZXRFZGdlKChFZGdlKW5ld0lkZW50aWZpYWJsZSk7CisJfSAvLyBzZXRJZGVudGlmaWFibGUKKwkKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRWRnZSBnZXRFZGdlKCkgeworCQlpZiAoZUNvbnRhaW5lckZlYXR1cmVJRCgpICE9IEdyYXBoUGFja2FnZS5EWU5BTUlDX0VER0VfTEFCRUxfX0VER0UpIHJldHVybiBudWxsOworCQlyZXR1cm4gKEVkZ2UpZUNvbnRhaW5lcigpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBOb3RpZmljYXRpb25DaGFpbiBiYXNpY1NldEVkZ2UoRWRnZSBuZXdFZGdlLCBOb3RpZmljYXRpb25DaGFpbiBtc2dzKSB7CisJCW1zZ3MgPSBlQmFzaWNTZXRDb250YWluZXIoKEludGVybmFsRU9iamVjdCluZXdFZGdlLCBHcmFwaFBhY2thZ2UuRFlOQU1JQ19FREdFX0xBQkVMX19FREdFLCBtc2dzKTsKKwkJcmV0dXJuIG1zZ3M7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgc2V0RWRnZShFZGdlIG5ld0VkZ2UpIHsKKwkJaWYgKG5ld0VkZ2UgIT0gZUludGVybmFsQ29udGFpbmVyKCkgfHwgKGVDb250YWluZXJGZWF0dXJlSUQoKSAhPSBHcmFwaFBhY2thZ2UuRFlOQU1JQ19FREdFX0xBQkVMX19FREdFICYmIG5ld0VkZ2UgIT0gbnVsbCkpIHsKKwkJCWlmIChFY29yZVV0aWwuaXNBbmNlc3Rvcih0aGlzLCBuZXdFZGdlKSkKKwkJCQl0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJSZWN1cnNpdmUgY29udGFpbm1lbnQgbm90IGFsbG93ZWQgZm9yICIgKyB0b1N0cmluZygpKTsgLy8kTk9OLU5MUy0xJAorCQkJTm90aWZpY2F0aW9uQ2hhaW4gbXNncyA9IG51bGw7CisJCQlpZiAoZUludGVybmFsQ29udGFpbmVyKCkgIT0gbnVsbCkKKwkJCQltc2dzID0gZUJhc2ljUmVtb3ZlRnJvbUNvbnRhaW5lcihtc2dzKTsKKwkJCWlmIChuZXdFZGdlICE9IG51bGwpCisJCQkJbXNncyA9ICgoSW50ZXJuYWxFT2JqZWN0KW5ld0VkZ2UpLmVJbnZlcnNlQWRkKHRoaXMsIEdyYXBoUGFja2FnZS5FREdFX19MQUJFTCwgRWRnZS5jbGFzcywgbXNncyk7CisJCQltc2dzID0gYmFzaWNTZXRFZGdlKG5ld0VkZ2UsIG1zZ3MpOworCQkJaWYgKG1zZ3MgIT0gbnVsbCkgbXNncy5kaXNwYXRjaCgpOworCQl9CisJCWVsc2UgaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQorCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgR3JhcGhQYWNrYWdlLkRZTkFNSUNfRURHRV9MQUJFTF9fRURHRSwgbmV3RWRnZSwgbmV3RWRnZSkpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBOb3RpZmljYXRpb25DaGFpbiBlSW52ZXJzZUFkZChJbnRlcm5hbEVPYmplY3Qgb3RoZXJFbmQsIGludCBmZWF0dXJlSUQsIE5vdGlmaWNhdGlvbkNoYWluIG1zZ3MpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJCWNhc2UgR3JhcGhQYWNrYWdlLkRZTkFNSUNfRURHRV9MQUJFTF9fRURHRToKKwkJCQlpZiAoZUludGVybmFsQ29udGFpbmVyKCkgIT0gbnVsbCkKKwkJCQkJbXNncyA9IGVCYXNpY1JlbW92ZUZyb21Db250YWluZXIobXNncyk7CisJCQkJcmV0dXJuIGJhc2ljU2V0RWRnZSgoRWRnZSlvdGhlckVuZCwgbXNncyk7CisJCX0KKwkJcmV0dXJuIHN1cGVyLmVJbnZlcnNlQWRkKG90aGVyRW5kLCBmZWF0dXJlSUQsIG1zZ3MpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBOb3RpZmljYXRpb25DaGFpbiBlSW52ZXJzZVJlbW92ZShJbnRlcm5hbEVPYmplY3Qgb3RoZXJFbmQsIGludCBmZWF0dXJlSUQsIE5vdGlmaWNhdGlvbkNoYWluIG1zZ3MpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJCWNhc2UgR3JhcGhQYWNrYWdlLkRZTkFNSUNfRURHRV9MQUJFTF9fRURHRToKKwkJCQlyZXR1cm4gYmFzaWNTZXRFZGdlKG51bGwsIG1zZ3MpOworCQl9CisJCXJldHVybiBzdXBlci5lSW52ZXJzZVJlbW92ZShvdGhlckVuZCwgZmVhdHVyZUlELCBtc2dzKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgTm90aWZpY2F0aW9uQ2hhaW4gZUJhc2ljUmVtb3ZlRnJvbUNvbnRhaW5lckZlYXR1cmUoTm90aWZpY2F0aW9uQ2hhaW4gbXNncykgeworCQlzd2l0Y2ggKGVDb250YWluZXJGZWF0dXJlSUQoKSkgeworCQkJY2FzZSBHcmFwaFBhY2thZ2UuRFlOQU1JQ19FREdFX0xBQkVMX19FREdFOgorCQkJCXJldHVybiBlSW50ZXJuYWxDb250YWluZXIoKS5lSW52ZXJzZVJlbW92ZSh0aGlzLCBHcmFwaFBhY2thZ2UuRURHRV9fTEFCRUwsIEVkZ2UuY2xhc3MsIG1zZ3MpOworCQl9CisJCXJldHVybiBzdXBlci5lQmFzaWNSZW1vdmVGcm9tQ29udGFpbmVyRmVhdHVyZShtc2dzKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgT2JqZWN0IGVHZXQoaW50IGZlYXR1cmVJRCwgYm9vbGVhbiByZXNvbHZlLCBib29sZWFuIGNvcmVUeXBlKSB7CisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7CisJCQljYXNlIEdyYXBoUGFja2FnZS5EWU5BTUlDX0VER0VfTEFCRUxfX0VER0U6CisJCQkJcmV0dXJuIGdldEVkZ2UoKTsKKwkJfQorCQlyZXR1cm4gc3VwZXIuZUdldChmZWF0dXJlSUQsIHJlc29sdmUsIGNvcmVUeXBlKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBlU2V0KGludCBmZWF0dXJlSUQsIE9iamVjdCBuZXdWYWx1ZSkgeworCQlzd2l0Y2ggKGZlYXR1cmVJRCkgeworCQkJY2FzZSBHcmFwaFBhY2thZ2UuRFlOQU1JQ19FREdFX0xBQkVMX19FREdFOgorCQkJCXNldEVkZ2UoKEVkZ2UpbmV3VmFsdWUpOworCQkJCXJldHVybjsKKwkJfQorCQlzdXBlci5lU2V0KGZlYXR1cmVJRCwgbmV3VmFsdWUpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGVVbnNldChpbnQgZmVhdHVyZUlEKSB7CisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7CisJCQljYXNlIEdyYXBoUGFja2FnZS5EWU5BTUlDX0VER0VfTEFCRUxfX0VER0U6CisJCQkJc2V0RWRnZSgoRWRnZSludWxsKTsKKwkJCQlyZXR1cm47CisJCX0KKwkJc3VwZXIuZVVuc2V0KGZlYXR1cmVJRCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIGJvb2xlYW4gZUlzU2V0KGludCBmZWF0dXJlSUQpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJCWNhc2UgR3JhcGhQYWNrYWdlLkRZTkFNSUNfRURHRV9MQUJFTF9fRURHRToKKwkJCQlyZXR1cm4gZ2V0RWRnZSgpICE9IG51bGw7CisJCX0KKwkJcmV0dXJuIHN1cGVyLmVJc1NldChmZWF0dXJlSUQpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBpbnQgZUJhc2VTdHJ1Y3R1cmFsRmVhdHVyZUlEKGludCBkZXJpdmVkRmVhdHVyZUlELCBDbGFzczw/PiBiYXNlQ2xhc3MpIHsKKwkJaWYgKGJhc2VDbGFzcyA9PSBFZGdlTGFiZWwuY2xhc3MpIHsKKwkJCXN3aXRjaCAoZGVyaXZlZEZlYXR1cmVJRCkgeworCQkJCWNhc2UgR3JhcGhQYWNrYWdlLkRZTkFNSUNfRURHRV9MQUJFTF9fRURHRTogcmV0dXJuIEdyYXBoUGFja2FnZS5FREdFX0xBQkVMX19FREdFOworCQkJCWRlZmF1bHQ6IHJldHVybiAtMTsKKwkJCX0KKwkJfQorCQlyZXR1cm4gc3VwZXIuZUJhc2VTdHJ1Y3R1cmFsRmVhdHVyZUlEKGRlcml2ZWRGZWF0dXJlSUQsIGJhc2VDbGFzcyk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIGludCBlRGVyaXZlZFN0cnVjdHVyYWxGZWF0dXJlSUQoaW50IGJhc2VGZWF0dXJlSUQsIENsYXNzPD8+IGJhc2VDbGFzcykgeworCQlpZiAoYmFzZUNsYXNzID09IEVkZ2VMYWJlbC5jbGFzcykgeworCQkJc3dpdGNoIChiYXNlRmVhdHVyZUlEKSB7CisJCQkJY2FzZSBHcmFwaFBhY2thZ2UuRURHRV9MQUJFTF9fRURHRTogcmV0dXJuIEdyYXBoUGFja2FnZS5EWU5BTUlDX0VER0VfTEFCRUxfX0VER0U7CisJCQkJZGVmYXVsdDogcmV0dXJuIC0xOworCQkJfQorCQl9CisJCXJldHVybiBzdXBlci5lRGVyaXZlZFN0cnVjdHVyYWxGZWF0dXJlSUQoYmFzZUZlYXR1cmVJRCwgYmFzZUNsYXNzKTsKKwl9CisKK30gLy9EeW5hbWljRWRnZUxhYmVsSW1wbApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGgvaW1wbC9EeW5hbWljTGFiZWxJbXBsLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoL2ltcGwvRHluYW1pY0xhYmVsSW1wbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhlOGM4N2QKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoL2ltcGwvRHluYW1pY0xhYmVsSW1wbC5qYXZhCkBAIC0wLDAgKzEsNDAzIEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5pbXBsOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAKKyAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4gCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIAorICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wIAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQgCisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbCAKKyAqIAorICogQ29udHJpYnV0b3JzOiAKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LkFkYXB0ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbkNoYWluOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkludGVybmFsRU9iamVjdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuaW1wbC5FTm90aWZpY2F0aW9uSW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguRHluYW1pY0xhYmVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5HcmFwaFBhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkxhYmVsVmFsdWU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLlJlc2V0dGFibGVBZGFwdGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5EZWNvcmF0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLk1vZGVsUGFja2FnZTsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiBBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+RHluYW1pYyBMYWJlbDwvYj48L2VtPicuCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIDxwPgorICogVGhlIGZvbGxvd2luZyBmZWF0dXJlcyBhcmUgaW1wbGVtZW50ZWQ6CisgKiA8dWw+CisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmltcGwuRHluYW1pY0xhYmVsSW1wbCNpc05leHRWYWx1ZVZhbGlkIDxlbT5OZXh0IFZhbHVlIFZhbGlkPC9lbT59PC9saT4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguaW1wbC5EeW5hbWljTGFiZWxJbXBsI2dldE5leHRWYWx1ZSA8ZW0+TmV4dCBWYWx1ZTwvZW0+fTwvbGk+CisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmltcGwuRHluYW1pY0xhYmVsSW1wbCNnZXREZWNvcmF0b3IgPGVtPkRlY29yYXRvcjwvZW0+fTwvbGk+CisgKiA8L3VsPgorICogPC9wPgorICoKKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGFic3RyYWN0IGNsYXNzIER5bmFtaWNMYWJlbEltcGwgZXh0ZW5kcyBMYWJlbEltcGwgaW1wbGVtZW50cyBEeW5hbWljTGFiZWwgeworCS8qKgorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSAne0BsaW5rICNpc05leHRWYWx1ZVZhbGlkKCkgPGVtPk5leHQgVmFsdWUgVmFsaWQ8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNpc05leHRWYWx1ZVZhbGlkKCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIGJvb2xlYW4gTkVYVF9WQUxVRV9WQUxJRF9FREVGQVVMVCA9IGZhbHNlOworCisJLyoqCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjaXNOZXh0VmFsdWVWYWxpZCgpIDxlbT5OZXh0IFZhbHVlIFZhbGlkPC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjaXNOZXh0VmFsdWVWYWxpZCgpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIGJvb2xlYW4gbmV4dFZhbHVlVmFsaWQgPSBORVhUX1ZBTFVFX1ZBTElEX0VERUZBVUxUOworCisJLyoqCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0TmV4dFZhbHVlKCkgPGVtPk5leHQgVmFsdWU8L2VtPn0nIGNvbnRhaW5tZW50IHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNnZXROZXh0VmFsdWUoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBMYWJlbFZhbHVlIG5leHRWYWx1ZTsKKworCS8qKgorCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldERlY29yYXRvcigpIDxlbT5EZWNvcmF0b3I8L2VtPn0nIHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI2dldERlY29yYXRvcigpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIERlY29yYXRvciBkZWNvcmF0b3I7CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCXByb3RlY3RlZCBEeW5hbWljTGFiZWxJbXBsKCkgeworCQlzdXBlcigpOworCQlzZXRUeXBlVVJJKER5bmFtaWNMYWJlbC5VUklfVFlQRV9EWU5BTUlDX0xBQkVMKTsKKwl9IC8vIER5bmFtaWNMYWJlbEltcGwKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgRUNsYXNzIGVTdGF0aWNDbGFzcygpIHsKKwkJcmV0dXJuIEdyYXBoUGFja2FnZS5MaXRlcmFscy5EWU5BTUlDX0xBQkVMOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgTGFiZWxWYWx1ZSBnZXROZXh0VmFsdWUoKSB7CisJCXJldHVybiBuZXh0VmFsdWU7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBOb3RpZmljYXRpb25DaGFpbiBiYXNpY1NldE5leHRWYWx1ZShMYWJlbFZhbHVlIG5ld05leHRWYWx1ZSwgTm90aWZpY2F0aW9uQ2hhaW4gbXNncykgeworCQlMYWJlbFZhbHVlIG9sZE5leHRWYWx1ZSA9IG5leHRWYWx1ZTsKKwkJbmV4dFZhbHVlID0gbmV3TmV4dFZhbHVlOworCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpIHsKKwkJCUVOb3RpZmljYXRpb25JbXBsIG5vdGlmaWNhdGlvbiA9IG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBHcmFwaFBhY2thZ2UuRFlOQU1JQ19MQUJFTF9fTkVYVF9WQUxVRSwgb2xkTmV4dFZhbHVlLCBuZXdOZXh0VmFsdWUpOworCQkJaWYgKG1zZ3MgPT0gbnVsbCkgbXNncyA9IG5vdGlmaWNhdGlvbjsgZWxzZSBtc2dzLmFkZChub3RpZmljYXRpb24pOworCQl9CisJCXJldHVybiBtc2dzOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXROZXh0VmFsdWUoTGFiZWxWYWx1ZSBuZXdOZXh0VmFsdWUpIHsKKwkJaWYgKG5ld05leHRWYWx1ZSAhPSBuZXh0VmFsdWUpIHsKKwkJCU5vdGlmaWNhdGlvbkNoYWluIG1zZ3MgPSBudWxsOworCQkJaWYgKG5leHRWYWx1ZSAhPSBudWxsKQorCQkJCW1zZ3MgPSAoKEludGVybmFsRU9iamVjdCluZXh0VmFsdWUpLmVJbnZlcnNlUmVtb3ZlKHRoaXMsIEVPUFBPU0lURV9GRUFUVVJFX0JBU0UgLSBHcmFwaFBhY2thZ2UuRFlOQU1JQ19MQUJFTF9fTkVYVF9WQUxVRSwgbnVsbCwgbXNncyk7CisJCQlpZiAobmV3TmV4dFZhbHVlICE9IG51bGwpCisJCQkJbXNncyA9ICgoSW50ZXJuYWxFT2JqZWN0KW5ld05leHRWYWx1ZSkuZUludmVyc2VBZGQodGhpcywgRU9QUE9TSVRFX0ZFQVRVUkVfQkFTRSAtIEdyYXBoUGFja2FnZS5EWU5BTUlDX0xBQkVMX19ORVhUX1ZBTFVFLCBudWxsLCBtc2dzKTsKKwkJCW1zZ3MgPSBiYXNpY1NldE5leHRWYWx1ZShuZXdOZXh0VmFsdWUsIG1zZ3MpOworCQkJaWYgKG1zZ3MgIT0gbnVsbCkgbXNncy5kaXNwYXRjaCgpOworCQl9CisJCWVsc2UgaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQorCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgR3JhcGhQYWNrYWdlLkRZTkFNSUNfTEFCRUxfX05FWFRfVkFMVUUsIG5ld05leHRWYWx1ZSwgbmV3TmV4dFZhbHVlKSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIERlY29yYXRvciBnZXREZWNvcmF0b3IoKSB7CisJCWlmIChkZWNvcmF0b3IgIT0gbnVsbCAmJiBkZWNvcmF0b3IuZUlzUHJveHkoKSkgeworCQkJSW50ZXJuYWxFT2JqZWN0IG9sZERlY29yYXRvciA9IChJbnRlcm5hbEVPYmplY3QpZGVjb3JhdG9yOworCQkJZGVjb3JhdG9yID0gKERlY29yYXRvcillUmVzb2x2ZVByb3h5KG9sZERlY29yYXRvcik7CisJCQlpZiAoZGVjb3JhdG9yICE9IG9sZERlY29yYXRvcikgeworCQkJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkKKwkJCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlJFU09MVkUsIEdyYXBoUGFja2FnZS5EWU5BTUlDX0xBQkVMX19ERUNPUkFUT1IsIG9sZERlY29yYXRvciwgZGVjb3JhdG9yKSk7CisJCQl9CisJCX0KKwkJcmV0dXJuIGRlY29yYXRvcjsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRGVjb3JhdG9yIGJhc2ljR2V0RGVjb3JhdG9yKCkgeworCQlyZXR1cm4gZGVjb3JhdG9yOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBOb3RpZmljYXRpb25DaGFpbiBiYXNpY1NldERlY29yYXRvcihEZWNvcmF0b3IgbmV3RGVjb3JhdG9yLCBOb3RpZmljYXRpb25DaGFpbiBtc2dzKSB7CisJCURlY29yYXRvciBvbGREZWNvcmF0b3IgPSBkZWNvcmF0b3I7CisJCWRlY29yYXRvciA9IG5ld0RlY29yYXRvcjsKKwkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKSB7CisJCQlFTm90aWZpY2F0aW9uSW1wbCBub3RpZmljYXRpb24gPSBuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgR3JhcGhQYWNrYWdlLkRZTkFNSUNfTEFCRUxfX0RFQ09SQVRPUiwgb2xkRGVjb3JhdG9yLCBuZXdEZWNvcmF0b3IpOworCQkJaWYgKG1zZ3MgPT0gbnVsbCkgbXNncyA9IG5vdGlmaWNhdGlvbjsgZWxzZSBtc2dzLmFkZChub3RpZmljYXRpb24pOworCQl9CisJCXJldHVybiBtc2dzOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIHNldERlY29yYXRvcihEZWNvcmF0b3IgbmV3RGVjb3JhdG9yKSB7CisJCWlmIChuZXdEZWNvcmF0b3IgIT0gZGVjb3JhdG9yKSB7CisJCQlOb3RpZmljYXRpb25DaGFpbiBtc2dzID0gbnVsbDsKKwkJCWlmIChkZWNvcmF0b3IgIT0gbnVsbCkKKwkJCQltc2dzID0gKChJbnRlcm5hbEVPYmplY3QpZGVjb3JhdG9yKS5lSW52ZXJzZVJlbW92ZSh0aGlzLCBNb2RlbFBhY2thZ2UuREVDT1JBVE9SX19MQUJFTFNfVE9fVVBEQVRFLCBEZWNvcmF0b3IuY2xhc3MsIG1zZ3MpOworCQkJaWYgKG5ld0RlY29yYXRvciAhPSBudWxsKQorCQkJCW1zZ3MgPSAoKEludGVybmFsRU9iamVjdCluZXdEZWNvcmF0b3IpLmVJbnZlcnNlQWRkKHRoaXMsIE1vZGVsUGFja2FnZS5ERUNPUkFUT1JfX0xBQkVMU19UT19VUERBVEUsIERlY29yYXRvci5jbGFzcywgbXNncyk7CisJCQltc2dzID0gYmFzaWNTZXREZWNvcmF0b3IobmV3RGVjb3JhdG9yLCBtc2dzKTsKKwkJCWlmIChtc2dzICE9IG51bGwpIG1zZ3MuZGlzcGF0Y2goKTsKKwkJfQorCQllbHNlIGlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkKKwkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIEdyYXBoUGFja2FnZS5EWU5BTUlDX0xBQkVMX19ERUNPUkFUT1IsIG5ld0RlY29yYXRvciwgbmV3RGVjb3JhdG9yKSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBib29sZWFuIGlzTmV4dFZhbHVlVmFsaWQoKSB7CisJCXJldHVybiBuZXh0VmFsdWVWYWxpZDsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgc2V0TmV4dFZhbHVlVmFsaWQoYm9vbGVhbiBuZXdOZXh0VmFsdWVWYWxpZCkgeworCQlib29sZWFuIG9sZE5leHRWYWx1ZVZhbGlkID0gbmV4dFZhbHVlVmFsaWQ7CisJCW5leHRWYWx1ZVZhbGlkID0gbmV3TmV4dFZhbHVlVmFsaWQ7CisJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkKKwkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIEdyYXBoUGFja2FnZS5EWU5BTUlDX0xBQkVMX19ORVhUX1ZBTFVFX1ZBTElELCBvbGROZXh0VmFsdWVWYWxpZCwgbmV4dFZhbHVlVmFsaWQpKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiBTZXQgdGhlIG5leHQgdmFsdWUgdmFsaWQgZmxhZyB0byBmYWxzZS4gPCEtLQorCSAqIGVuZC11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCXB1YmxpYyB2b2lkIHJlc2V0KCkgeworCQlnZXRDdXJyZW50VmFsdWUoKS5yZXNldCgpOworCQlnZXROZXh0VmFsdWUoKS5yZXNldCgpOworCQlzZXROZXh0VmFsdWVWYWxpZChmYWxzZSk7CisJCS8vIFJlc2V0IGFueSBhZGFwdGVycyB0aGF0IGFyZSBhdHRhY2hlZCB0byB0aGlzIGluc3RhbmNlCisJCWZvciAoQWRhcHRlciBhZGFwdGVyIDogZUFkYXB0ZXJzKCkpIHsKKwkJCS8vIElzIGl0IHJlc2V0dGFibGU/CisJCQlpZiAoYWRhcHRlciBpbnN0YW5jZW9mIFJlc2V0dGFibGVBZGFwdGVyKSB7CisJCQkJLy8gWWVzCisJCQkJZmluYWwgUmVzZXR0YWJsZUFkYXB0ZXIgcmVzZXR0YWJsZUFkYXB0ZXIgPSAoUmVzZXR0YWJsZUFkYXB0ZXIpIGFkYXB0ZXI7CisJCQkJcmVzZXR0YWJsZUFkYXB0ZXIucmVzZXQoKTsKKwkJCX0gLy8gaWYgUmVzZXR0YWJsZUFkYXB0ZXIKKwkJfSAvLyBmb3IgZWFjaCBBZGFwdGVyCisJfSAvLyByZXNldAorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBFeGNoYW5nZSB0aGUgY3VycmVudCB2YWx1ZSBmb3IgdGhlIG5leHQgdmFsdWUuCisJICogCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogCisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlwdWJsaWMgdm9pZCBzd2l0Y2hUb05leHRWYWx1ZSgpIHsKKwkJYXNzZXJ0IGlzTmV4dFZhbHVlVmFsaWQoKTsKKworCQlmaW5hbCBMYWJlbFZhbHVlIHRlbXAgPSBnZXRDdXJyZW50VmFsdWUoKTsKKwkJc2V0Q3VycmVudFZhbHVlKGdldE5leHRWYWx1ZSgpKTsKKwkJc2V0TmV4dFZhbHVlKHRlbXApOworCQlzZXROZXh0VmFsdWVWYWxpZChmYWxzZSk7CisJfSAvLyBzd2l0Y2hUb05leHRWYWx1ZQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIE5vdGlmaWNhdGlvbkNoYWluIGVJbnZlcnNlQWRkKEludGVybmFsRU9iamVjdCBvdGhlckVuZCwgaW50IGZlYXR1cmVJRCwgTm90aWZpY2F0aW9uQ2hhaW4gbXNncykgeworCQlzd2l0Y2ggKGZlYXR1cmVJRCkgeworCQkJY2FzZSBHcmFwaFBhY2thZ2UuRFlOQU1JQ19MQUJFTF9fREVDT1JBVE9SOgorCQkJCWlmIChkZWNvcmF0b3IgIT0gbnVsbCkKKwkJCQkJbXNncyA9ICgoSW50ZXJuYWxFT2JqZWN0KWRlY29yYXRvcikuZUludmVyc2VSZW1vdmUodGhpcywgTW9kZWxQYWNrYWdlLkRFQ09SQVRPUl9fTEFCRUxTX1RPX1VQREFURSwgRGVjb3JhdG9yLmNsYXNzLCBtc2dzKTsKKwkJCQlyZXR1cm4gYmFzaWNTZXREZWNvcmF0b3IoKERlY29yYXRvcilvdGhlckVuZCwgbXNncyk7CisJCX0KKwkJcmV0dXJuIHN1cGVyLmVJbnZlcnNlQWRkKG90aGVyRW5kLCBmZWF0dXJlSUQsIG1zZ3MpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgTm90aWZpY2F0aW9uQ2hhaW4gZUludmVyc2VSZW1vdmUoSW50ZXJuYWxFT2JqZWN0IG90aGVyRW5kLCBpbnQgZmVhdHVyZUlELCBOb3RpZmljYXRpb25DaGFpbiBtc2dzKSB7CisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7CisJCQljYXNlIEdyYXBoUGFja2FnZS5EWU5BTUlDX0xBQkVMX19ORVhUX1ZBTFVFOgorCQkJCXJldHVybiBiYXNpY1NldE5leHRWYWx1ZShudWxsLCBtc2dzKTsKKwkJCWNhc2UgR3JhcGhQYWNrYWdlLkRZTkFNSUNfTEFCRUxfX0RFQ09SQVRPUjoKKwkJCQlyZXR1cm4gYmFzaWNTZXREZWNvcmF0b3IobnVsbCwgbXNncyk7CisJCX0KKwkJcmV0dXJuIHN1cGVyLmVJbnZlcnNlUmVtb3ZlKG90aGVyRW5kLCBmZWF0dXJlSUQsIG1zZ3MpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgT2JqZWN0IGVHZXQoaW50IGZlYXR1cmVJRCwgYm9vbGVhbiByZXNvbHZlLCBib29sZWFuIGNvcmVUeXBlKSB7CisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7CisJCQljYXNlIEdyYXBoUGFja2FnZS5EWU5BTUlDX0xBQkVMX19ORVhUX1ZBTFVFX1ZBTElEOgorCQkJCXJldHVybiBpc05leHRWYWx1ZVZhbGlkKCk7CisJCQljYXNlIEdyYXBoUGFja2FnZS5EWU5BTUlDX0xBQkVMX19ORVhUX1ZBTFVFOgorCQkJCXJldHVybiBnZXROZXh0VmFsdWUoKTsKKwkJCWNhc2UgR3JhcGhQYWNrYWdlLkRZTkFNSUNfTEFCRUxfX0RFQ09SQVRPUjoKKwkJCQlpZiAocmVzb2x2ZSkgcmV0dXJuIGdldERlY29yYXRvcigpOworCQkJCXJldHVybiBiYXNpY0dldERlY29yYXRvcigpOworCQl9CisJCXJldHVybiBzdXBlci5lR2V0KGZlYXR1cmVJRCwgcmVzb2x2ZSwgY29yZVR5cGUpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBlU2V0KGludCBmZWF0dXJlSUQsIE9iamVjdCBuZXdWYWx1ZSkgeworCQlzd2l0Y2ggKGZlYXR1cmVJRCkgeworCQkJY2FzZSBHcmFwaFBhY2thZ2UuRFlOQU1JQ19MQUJFTF9fTkVYVF9WQUxVRV9WQUxJRDoKKwkJCQlzZXROZXh0VmFsdWVWYWxpZCgoQm9vbGVhbiluZXdWYWx1ZSk7CisJCQkJcmV0dXJuOworCQkJY2FzZSBHcmFwaFBhY2thZ2UuRFlOQU1JQ19MQUJFTF9fTkVYVF9WQUxVRToKKwkJCQlzZXROZXh0VmFsdWUoKExhYmVsVmFsdWUpbmV3VmFsdWUpOworCQkJCXJldHVybjsKKwkJCWNhc2UgR3JhcGhQYWNrYWdlLkRZTkFNSUNfTEFCRUxfX0RFQ09SQVRPUjoKKwkJCQlzZXREZWNvcmF0b3IoKERlY29yYXRvciluZXdWYWx1ZSk7CisJCQkJcmV0dXJuOworCQl9CisJCXN1cGVyLmVTZXQoZmVhdHVyZUlELCBuZXdWYWx1ZSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGVVbnNldChpbnQgZmVhdHVyZUlEKSB7CisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7CisJCQljYXNlIEdyYXBoUGFja2FnZS5EWU5BTUlDX0xBQkVMX19ORVhUX1ZBTFVFX1ZBTElEOgorCQkJCXNldE5leHRWYWx1ZVZhbGlkKE5FWFRfVkFMVUVfVkFMSURfRURFRkFVTFQpOworCQkJCXJldHVybjsKKwkJCWNhc2UgR3JhcGhQYWNrYWdlLkRZTkFNSUNfTEFCRUxfX05FWFRfVkFMVUU6CisJCQkJc2V0TmV4dFZhbHVlKChMYWJlbFZhbHVlKW51bGwpOworCQkJCXJldHVybjsKKwkJCWNhc2UgR3JhcGhQYWNrYWdlLkRZTkFNSUNfTEFCRUxfX0RFQ09SQVRPUjoKKwkJCQlzZXREZWNvcmF0b3IoKERlY29yYXRvciludWxsKTsKKwkJCQlyZXR1cm47CisJCX0KKwkJc3VwZXIuZVVuc2V0KGZlYXR1cmVJRCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBib29sZWFuIGVJc1NldChpbnQgZmVhdHVyZUlEKSB7CisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7CisJCQljYXNlIEdyYXBoUGFja2FnZS5EWU5BTUlDX0xBQkVMX19ORVhUX1ZBTFVFX1ZBTElEOgorCQkJCXJldHVybiBuZXh0VmFsdWVWYWxpZCAhPSBORVhUX1ZBTFVFX1ZBTElEX0VERUZBVUxUOworCQkJY2FzZSBHcmFwaFBhY2thZ2UuRFlOQU1JQ19MQUJFTF9fTkVYVF9WQUxVRToKKwkJCQlyZXR1cm4gbmV4dFZhbHVlICE9IG51bGw7CisJCQljYXNlIEdyYXBoUGFja2FnZS5EWU5BTUlDX0xBQkVMX19ERUNPUkFUT1I6CisJCQkJcmV0dXJuIGRlY29yYXRvciAhPSBudWxsOworCQl9CisJCXJldHVybiBzdXBlci5lSXNTZXQoZmVhdHVyZUlEKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKSB7CisJCWlmIChlSXNQcm94eSgpKQorCQkJcmV0dXJuIHN1cGVyLnRvU3RyaW5nKCk7CisKKwkJU3RyaW5nQnVmZmVyIHJlc3VsdCA9IG5ldyBTdHJpbmdCdWZmZXIoc3VwZXIudG9TdHJpbmcoKSk7CisKKwkJcmVzdWx0LmFwcGVuZCgiIFsiKTsKKwkJcmVzdWx0LmFwcGVuZChnZXROZXh0VmFsdWUoKS50b1N0cmluZygpKTsKKwkJcmVzdWx0LmFwcGVuZCgiICgiKTsKKwkJcmVzdWx0LmFwcGVuZChpc05leHRWYWx1ZVZhbGlkKCkgPyAidmFsaWQiIDogImludmFsaWQiKTsKKwkJcmVzdWx0LmFwcGVuZCgiKSIpOworCQlyZXN1bHQuYXBwZW5kKCJdIik7CisKKwkJcmV0dXJuIHJlc3VsdC50b1N0cmluZygpOworCX0gLy8gdG9TdHJpbmcKKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaC5pbXBsLkxhYmVsSW1wbCNzYW5lKCkKKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBib29sZWFuIHNhbmUoKSB7CisJCWJvb2xlYW4gcmV0VmFsdWUgPSBzdXBlci5zYW5lKCk7CisJCXJldFZhbHVlID0gcmV0VmFsdWUgJiYgbmV4dFZhbHVlICE9IG51bGw7CisJCWFzc2VydCByZXRWYWx1ZTsKKworCQlyZXRWYWx1ZSA9IHJldFZhbHVlICYmIChpc05leHRWYWx1ZVZhbGlkKCkgPyBuZXh0VmFsdWUuc2FuZSgpIDogdHJ1ZSk7CisJCWFzc2VydCByZXRWYWx1ZTsKKworCQlyZXRWYWx1ZSA9IHJldFZhbHVlICYmIGdldERlY29yYXRvcigpICE9IG51bGw7CisJCWFzc2VydCByZXRWYWx1ZTsKKwkJCisJCXJldHVybiByZXRWYWx1ZTsKKwl9IC8vIHNhbmUKKworfSAvLyBEeW5hbWljTGFiZWxJbXBsCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoL2ltcGwvRHluYW1pY05vZGVMYWJlbEltcGwuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGgvaW1wbC9EeW5hbWljTm9kZUxhYmVsSW1wbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk3NmJlYzAKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoL2ltcGwvRHluYW1pY05vZGVMYWJlbEltcGwuamF2YQpAQCAtMCwwICsxLDI4NCBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguaW1wbDsKKyAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIAorICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiAKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdCAKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sIAorICogCisgKiBDb250cmlidXRvcnM6IAorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiAKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworIAoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb25DaGFpbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5JbnRlcm5hbEVPYmplY3Q7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLmltcGwuRU5vdGlmaWNhdGlvbkltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5JZGVudGlmaWFibGU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkR5bmFtaWNOb2RlTGFiZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkdyYXBoUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguTm9kZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguTm9kZUxhYmVsOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IEFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5EeW5hbWljIE5vZGUgTGFiZWw8L2I+PC9lbT4nLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiA8cD4KKyAqIFRoZSBmb2xsb3dpbmcgZmVhdHVyZXMgYXJlIGltcGxlbWVudGVkOgorICogPHVsPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5pbXBsLkR5bmFtaWNOb2RlTGFiZWxJbXBsI2dldE5vZGUgPGVtPk5vZGU8L2VtPn08L2xpPgorICogPC91bD4KKyAqIDwvcD4KKyAqCisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBhYnN0cmFjdCBjbGFzcyBEeW5hbWljTm9kZUxhYmVsSW1wbCBleHRlbmRzIER5bmFtaWNMYWJlbEltcGwgaW1wbGVtZW50cworCQlEeW5hbWljTm9kZUxhYmVsIHsKKwkvKioKKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXROb2RlKCkgPGVtPk5vZGU8L2VtPn0nIHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNnZXROb2RlKCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgTm9kZSBub2RlOworCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBEeW5hbWljTm9kZUxhYmVsSW1wbCgpIHsKKwkJc3VwZXIoKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIEVDbGFzcyBlU3RhdGljQ2xhc3MoKSB7CisJCXJldHVybiBHcmFwaFBhY2thZ2UuTGl0ZXJhbHMuRFlOQU1JQ19OT0RFX0xBQkVMOworCX0KKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmltcGwuTGFiZWxJbXBsI2dldElkZW50aWZpYWJsZSgpCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIElkZW50aWZpYWJsZSBnZXRJZGVudGlmaWFibGUoKSB7CisJCXJldHVybiBnZXROb2RlKCk7CisJfSAvLyBnZXRJZGVudGlmaWFibGUKKworCQorCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmltcGwuTGFiZWxJbXBsI3NldElkZW50aWZpYWJsZShvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLklkZW50aWZpYWJsZSkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBzZXRJZGVudGlmaWFibGUoSWRlbnRpZmlhYmxlIG5ld0lkZW50aWZpYWJsZSkgeworCQlzZXROb2RlKChOb2RlKW5ld0lkZW50aWZpYWJsZSk7CisJfSAvLyBzZXRJZGVudGlmaWFibGUKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgTm9kZSBnZXROb2RlKCkgeworCQlpZiAobm9kZSAhPSBudWxsICYmIG5vZGUuZUlzUHJveHkoKSkgeworCQkJSW50ZXJuYWxFT2JqZWN0IG9sZE5vZGUgPSAoSW50ZXJuYWxFT2JqZWN0KW5vZGU7CisJCQlub2RlID0gKE5vZGUpZVJlc29sdmVQcm94eShvbGROb2RlKTsKKwkJCWlmIChub2RlICE9IG9sZE5vZGUpIHsKKwkJCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpCisJCQkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5SRVNPTFZFLCBHcmFwaFBhY2thZ2UuRFlOQU1JQ19OT0RFX0xBQkVMX19OT0RFLCBvbGROb2RlLCBub2RlKSk7CisJCQl9CisJCX0KKwkJcmV0dXJuIG5vZGU7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBOb2RlIGJhc2ljR2V0Tm9kZSgpIHsKKwkJcmV0dXJuIG5vZGU7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIE5vdGlmaWNhdGlvbkNoYWluIGJhc2ljU2V0Tm9kZShOb2RlIG5ld05vZGUsIE5vdGlmaWNhdGlvbkNoYWluIG1zZ3MpIHsKKwkJTm9kZSBvbGROb2RlID0gbm9kZTsKKwkJbm9kZSA9IG5ld05vZGU7CisJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkgeworCQkJRU5vdGlmaWNhdGlvbkltcGwgbm90aWZpY2F0aW9uID0gbmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIEdyYXBoUGFja2FnZS5EWU5BTUlDX05PREVfTEFCRUxfX05PREUsIG9sZE5vZGUsIG5ld05vZGUpOworCQkJaWYgKG1zZ3MgPT0gbnVsbCkgbXNncyA9IG5vdGlmaWNhdGlvbjsgZWxzZSBtc2dzLmFkZChub3RpZmljYXRpb24pOworCQl9CisJCXJldHVybiBtc2dzOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXROb2RlKE5vZGUgbmV3Tm9kZSkgeworCQlpZiAobmV3Tm9kZSAhPSBub2RlKSB7CisJCQlOb3RpZmljYXRpb25DaGFpbiBtc2dzID0gbnVsbDsKKwkJCWlmIChub2RlICE9IG51bGwpCisJCQkJbXNncyA9ICgoSW50ZXJuYWxFT2JqZWN0KW5vZGUpLmVJbnZlcnNlUmVtb3ZlKHRoaXMsIEdyYXBoUGFja2FnZS5OT0RFX19MQUJFTFMsIE5vZGUuY2xhc3MsIG1zZ3MpOworCQkJaWYgKG5ld05vZGUgIT0gbnVsbCkKKwkJCQltc2dzID0gKChJbnRlcm5hbEVPYmplY3QpbmV3Tm9kZSkuZUludmVyc2VBZGQodGhpcywgR3JhcGhQYWNrYWdlLk5PREVfX0xBQkVMUywgTm9kZS5jbGFzcywgbXNncyk7CisJCQltc2dzID0gYmFzaWNTZXROb2RlKG5ld05vZGUsIG1zZ3MpOworCQkJaWYgKG1zZ3MgIT0gbnVsbCkgbXNncy5kaXNwYXRjaCgpOworCQl9CisJCWVsc2UgaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQorCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgR3JhcGhQYWNrYWdlLkRZTkFNSUNfTk9ERV9MQUJFTF9fTk9ERSwgbmV3Tm9kZSwgbmV3Tm9kZSkpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBOb3RpZmljYXRpb25DaGFpbiBlSW52ZXJzZUFkZChJbnRlcm5hbEVPYmplY3Qgb3RoZXJFbmQsIGludCBmZWF0dXJlSUQsIE5vdGlmaWNhdGlvbkNoYWluIG1zZ3MpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJCWNhc2UgR3JhcGhQYWNrYWdlLkRZTkFNSUNfTk9ERV9MQUJFTF9fTk9ERToKKwkJCQlpZiAobm9kZSAhPSBudWxsKQorCQkJCQltc2dzID0gKChJbnRlcm5hbEVPYmplY3Qpbm9kZSkuZUludmVyc2VSZW1vdmUodGhpcywgR3JhcGhQYWNrYWdlLk5PREVfX0xBQkVMUywgTm9kZS5jbGFzcywgbXNncyk7CisJCQkJcmV0dXJuIGJhc2ljU2V0Tm9kZSgoTm9kZSlvdGhlckVuZCwgbXNncyk7CisJCX0KKwkJcmV0dXJuIHN1cGVyLmVJbnZlcnNlQWRkKG90aGVyRW5kLCBmZWF0dXJlSUQsIG1zZ3MpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBOb3RpZmljYXRpb25DaGFpbiBlSW52ZXJzZVJlbW92ZShJbnRlcm5hbEVPYmplY3Qgb3RoZXJFbmQsIGludCBmZWF0dXJlSUQsIE5vdGlmaWNhdGlvbkNoYWluIG1zZ3MpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJCWNhc2UgR3JhcGhQYWNrYWdlLkRZTkFNSUNfTk9ERV9MQUJFTF9fTk9ERToKKwkJCQlyZXR1cm4gYmFzaWNTZXROb2RlKG51bGwsIG1zZ3MpOworCQl9CisJCXJldHVybiBzdXBlci5lSW52ZXJzZVJlbW92ZShvdGhlckVuZCwgZmVhdHVyZUlELCBtc2dzKTsKKwl9CisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZ3JhcGguaW1wbC5EeW5hbWljTGFiZWxJbXBsI3RvU3RyaW5nKCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkgeworCQlmaW5hbCBTdHJpbmdCdWlsZGVyIHNiID0gbmV3IFN0cmluZ0J1aWxkZXIoc3VwZXIudG9TdHJpbmcoKSk7CisKKwkJc2IuYXBwZW5kKCIgTm9kZToiKTsKKwkJc2IuYXBwZW5kKGdldE5vZGUoKSA9PSBudWxsID8gIm51bGwiIDogZ2V0Tm9kZSgpLnRvU3RyaW5nKCkpOworCQlyZXR1cm4gc2IudG9TdHJpbmcoKTsKKwl9IC8vIHRvU3RyaW5nCisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZ3JhcGguaW1wbC5EeW5hbWljTGFiZWxJbXBsI3NhbmUoKQorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBib29sZWFuIHNhbmUoKSB7CisJCWJvb2xlYW4gcmV0VmFsdWUgPSBzdXBlci5zYW5lKCk7CisKKwkJcmV0VmFsdWUgPSByZXRWYWx1ZSAmJiBnZXROb2RlKCkgIT0gbnVsbCA/IGdldFVSSU9mSWRlbnRpZmlhYmxlVG9CZUxhYmVsZWQoKQorCQkJCS5lcXVhbHMoZ2V0Tm9kZSgpLmdldFVSSSgpKQorCQkJCTogdHJ1ZTsKKwkJYXNzZXJ0IHJldFZhbHVlOworCQkJCisJCXJldFZhbHVlID0gcmV0VmFsdWUgJiYgZ2V0Tm9kZSgpID09IGdldElkZW50aWZpYWJsZSgpOworCQlhc3NlcnQgcmV0VmFsdWU7CisJCQorCQlyZXR1cm4gcmV0VmFsdWU7CisJfSAvLyBzYW5lCisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIE9iamVjdCBlR2V0KGludCBmZWF0dXJlSUQsIGJvb2xlYW4gcmVzb2x2ZSwgYm9vbGVhbiBjb3JlVHlwZSkgeworCQlzd2l0Y2ggKGZlYXR1cmVJRCkgeworCQkJY2FzZSBHcmFwaFBhY2thZ2UuRFlOQU1JQ19OT0RFX0xBQkVMX19OT0RFOgorCQkJCWlmIChyZXNvbHZlKSByZXR1cm4gZ2V0Tm9kZSgpOworCQkJCXJldHVybiBiYXNpY0dldE5vZGUoKTsKKwkJfQorCQlyZXR1cm4gc3VwZXIuZUdldChmZWF0dXJlSUQsIHJlc29sdmUsIGNvcmVUeXBlKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgZVNldChpbnQgZmVhdHVyZUlELCBPYmplY3QgbmV3VmFsdWUpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJCWNhc2UgR3JhcGhQYWNrYWdlLkRZTkFNSUNfTk9ERV9MQUJFTF9fTk9ERToKKwkJCQlzZXROb2RlKChOb2RlKW5ld1ZhbHVlKTsKKwkJCQlyZXR1cm47CisJCX0KKwkJc3VwZXIuZVNldChmZWF0dXJlSUQsIG5ld1ZhbHVlKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgZVVuc2V0KGludCBmZWF0dXJlSUQpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJCWNhc2UgR3JhcGhQYWNrYWdlLkRZTkFNSUNfTk9ERV9MQUJFTF9fTk9ERToKKwkJCQlzZXROb2RlKChOb2RlKW51bGwpOworCQkJCXJldHVybjsKKwkJfQorCQlzdXBlci5lVW5zZXQoZmVhdHVyZUlEKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIGJvb2xlYW4gZUlzU2V0KGludCBmZWF0dXJlSUQpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJCWNhc2UgR3JhcGhQYWNrYWdlLkRZTkFNSUNfTk9ERV9MQUJFTF9fTk9ERToKKwkJCQlyZXR1cm4gbm9kZSAhPSBudWxsOworCQl9CisJCXJldHVybiBzdXBlci5lSXNTZXQoZmVhdHVyZUlEKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIGludCBlQmFzZVN0cnVjdHVyYWxGZWF0dXJlSUQoaW50IGRlcml2ZWRGZWF0dXJlSUQsIENsYXNzPD8+IGJhc2VDbGFzcykgeworCQlpZiAoYmFzZUNsYXNzID09IE5vZGVMYWJlbC5jbGFzcykgeworCQkJc3dpdGNoIChkZXJpdmVkRmVhdHVyZUlEKSB7CisJCQkJY2FzZSBHcmFwaFBhY2thZ2UuRFlOQU1JQ19OT0RFX0xBQkVMX19OT0RFOiByZXR1cm4gR3JhcGhQYWNrYWdlLk5PREVfTEFCRUxfX05PREU7CisJCQkJZGVmYXVsdDogcmV0dXJuIC0xOworCQkJfQorCQl9CisJCXJldHVybiBzdXBlci5lQmFzZVN0cnVjdHVyYWxGZWF0dXJlSUQoZGVyaXZlZEZlYXR1cmVJRCwgYmFzZUNsYXNzKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIGludCBlRGVyaXZlZFN0cnVjdHVyYWxGZWF0dXJlSUQoaW50IGJhc2VGZWF0dXJlSUQsIENsYXNzPD8+IGJhc2VDbGFzcykgeworCQlpZiAoYmFzZUNsYXNzID09IE5vZGVMYWJlbC5jbGFzcykgeworCQkJc3dpdGNoIChiYXNlRmVhdHVyZUlEKSB7CisJCQkJY2FzZSBHcmFwaFBhY2thZ2UuTk9ERV9MQUJFTF9fTk9ERTogcmV0dXJuIEdyYXBoUGFja2FnZS5EWU5BTUlDX05PREVfTEFCRUxfX05PREU7CisJCQkJZGVmYXVsdDogcmV0dXJuIC0xOworCQkJfQorCQl9CisJCXJldHVybiBzdXBlci5lRGVyaXZlZFN0cnVjdHVyYWxGZWF0dXJlSUQoYmFzZUZlYXR1cmVJRCwgYmFzZUNsYXNzKTsKKwl9CisKK30gLy8gRHluYW1pY05vZGVMYWJlbEltcGwKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGgvaW1wbC9FZGdlSW1wbC5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC9pbXBsL0VkZ2VJbXBsLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2ZkMjA0MAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGgvaW1wbC9FZGdlSW1wbC5qYXZhCkBAIC0wLDAgKzEsNzI3IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5pbXBsOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAKKyAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4gCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIAorICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wIAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQgCisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbCAKKyAqIAorICogQ29udHJpYnV0b3JzOiAKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uQ2hhaW47CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlVSSTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5JbnRlcm5hbEVPYmplY3Q7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLmltcGwuRU5vdGlmaWNhdGlvbkltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLlNURU1VUkk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5pbXBsLklkZW50aWZpYWJsZUltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkVkZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkVkZ2VMYWJlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguR3JhcGhGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5HcmFwaFBhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLk5vZGU7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPkVkZ2U8L2I+PC9lbT4nLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiA8cD4KKyAqIFRoZSBmb2xsb3dpbmcgZmVhdHVyZXMgYXJlIGltcGxlbWVudGVkOgorICogPHVsPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5pbXBsLkVkZ2VJbXBsI2dldEEgPGVtPkE8L2VtPn08L2xpPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5pbXBsLkVkZ2VJbXBsI2dldE5vZGVBVVJJIDxlbT5Ob2RlIEFVUkk8L2VtPn08L2xpPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5pbXBsLkVkZ2VJbXBsI2dldEIgPGVtPkI8L2VtPn08L2xpPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5pbXBsLkVkZ2VJbXBsI2dldE5vZGVCVVJJIDxlbT5Ob2RlIEJVUkk8L2VtPn08L2xpPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5pbXBsLkVkZ2VJbXBsI2dldExhYmVsIDxlbT5MYWJlbDwvZW0+fTwvbGk+CisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmltcGwuRWRnZUltcGwjaXNEaXJlY3RlZCA8ZW0+RGlyZWN0ZWQ8L2VtPn08L2xpPgorICogPC91bD4KKyAqIDwvcD4KKyAqCisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBFZGdlSW1wbCBleHRlbmRzIElkZW50aWZpYWJsZUltcGwgaW1wbGVtZW50cyBFZGdlIHsKKwkKKwkKKwkvKioKKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRBKCkgPGVtPkE8L2VtPn0nIHJlZmVyZW5jZS4gPCEtLQorCSAqIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAc2VlICNnZXRBKCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgTm9kZSBhOworCisJLyoqCisJICogVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldE5vZGVBVVJJKCkgPGVtPk5vZGUgQVVSSTwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI2dldE5vZGVBVVJJKCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIFVSSSBOT0RFX0FVUklfRURFRkFVTFQgPSBudWxsOworCisJLyoqCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0Tm9kZUFVUkkoKSA8ZW0+Tm9kZSBBVVJJPC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZ2V0Tm9kZUFVUkkoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBVUkkgbm9kZUFVUkkgPSBOT0RFX0FVUklfRURFRkFVTFQ7CisKKwkvKioKKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRCKCkgPGVtPkI8L2VtPn0nIHJlZmVyZW5jZS4gPCEtLQorCSAqIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAc2VlICNnZXRCKCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgTm9kZSBiOworCisJLyoqCisJICogVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldE5vZGVCVVJJKCkgPGVtPk5vZGUgQlVSSTwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI2dldE5vZGVCVVJJKCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIFVSSSBOT0RFX0JVUklfRURFRkFVTFQgPSBudWxsOworCisJLyoqCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0Tm9kZUJVUkkoKSA8ZW0+Tm9kZSBCVVJJPC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZ2V0Tm9kZUJVUkkoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBVUkkgbm9kZUJVUkkgPSBOT0RFX0JVUklfRURFRkFVTFQ7CisKKwkvKioKKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRMYWJlbCgpIDxlbT5MYWJlbDwvZW0+fScgY29udGFpbm1lbnQgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI2dldExhYmVsKCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgRWRnZUxhYmVsIGxhYmVsOworCisJLyoqCisJICogVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2lzRGlyZWN0ZWQoKSA8ZW0+RGlyZWN0ZWQ8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNpc0RpcmVjdGVkKCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIGJvb2xlYW4gRElSRUNURURfRURFRkFVTFQgPSBmYWxzZTsKKworCS8qKgorCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2lzRGlyZWN0ZWQoKSA8ZW0+RGlyZWN0ZWQ8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNpc0RpcmVjdGVkKCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgYm9vbGVhbiBkaXJlY3RlZCA9IERJUkVDVEVEX0VERUZBVUxUOworCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogCisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlwcm90ZWN0ZWQgRWRnZUltcGwoKSB7CisJCXN1cGVyKCk7CisvLwkJc2V0VVJJKFNURU1VUkkuY3JlYXRlVVJJKFVSSV9UWVBFX0VER0VfU0VHTUVOVCArICIvIgorLy8JCQkJKyBTVEVNVVJJLmdlbmVyYXRlVW5pcXVlUGFydCgpKSk7CisJCXNldFR5cGVVUkkoU1RFTVVSSS5FREdFX1RZUEVfVVJJKTsKKwl9IC8vIEVkZ2VJbXBsCisKKwkvKioKKwkgKiBDcmVhdGUgYW4gdW5kaXJlY3RlZCBlZGdlIGJldHdlZW4gdHdvIG5vZGVzCisJICogCisJICogQHBhcmFtIG5vZGVBCisJICogICAgICAgICAgICB0aGUgZmlyc3Qgbm9kZQorCSAqIEBwYXJhbSBub2RlQgorCSAqICAgICAgICAgICAgdGhlIHNlY29uZCBub2RlCisJICogQHJldHVybiBhbiBlZGdlIGJldHdlZW4gbm9kZUEgYW5kIG5vZGVCLCBpZiBkaXJlY3RlZCB0aGVuIGZyb20gbm9kZUEgdG8KKwkgKiAgICAgICAgIG5vZGVCCisJICovCisJcHVibGljIHN0YXRpYyBFZGdlIGNyZWF0ZUVkZ2UoZmluYWwgTm9kZSBub2RlQSwgZmluYWwgTm9kZSBub2RlQikgeworCQlyZXR1cm4gY3JlYXRlRWRnZShub2RlQSwgbm9kZUIsIGZhbHNlLCBudWxsKTsKKwl9IC8vIGNyZWF0ZUVkZ2UKKworCS8qKgorCSAqIENyZWF0ZSBhbiB1bmRpcmVjdGVkIGVkZ2UgYmV0d2VlbiB0d28gbm9kZXMKKwkgKiAKKwkgKiBAcGFyYW0gbm9kZUEKKwkgKiAgICAgICAgICAgIHRoZSBmaXJzdCBub2RlCisJICogQHBhcmFtIG5vZGVCCisJICogICAgICAgICAgICB0aGUgc2Vjb25kIG5vZGUKKwkgKiBAcGFyYW0gZWRnZVVSSQorCSAqICAgICAgICAgICAgaWYgbm9uLW51bGwgdGhlbiB0aGUgVVJJIHRvIHVzZSBmb3IgdGhlIGVkZ2UsIGlmIG51bGwgdGhlbiB0aGUKKwkgKiAgICAgICAgICAgIGRlZmF1bHQgaXMgdXNlZC4KKwkgKiAKKwkgKiBAcmV0dXJuIGFuIGVkZ2UgYmV0d2VlbiBub2RlQSBhbmQgbm9kZUIsIGlmIGRpcmVjdGVkIHRoZW4gZnJvbSBub2RlQSB0bworCSAqICAgICAgICAgbm9kZUIKKwkgKi8KKwlwdWJsaWMgc3RhdGljIEVkZ2UgY3JlYXRlRWRnZShmaW5hbCBOb2RlIG5vZGVBLCBmaW5hbCBOb2RlIG5vZGVCLAorCQkJZmluYWwgVVJJIGVkZ2VVUkkpIHsKKwkJcmV0dXJuIGNyZWF0ZUVkZ2Uobm9kZUEsIG5vZGVCLCBmYWxzZSwgZWRnZVVSSSk7CisJfSAvLyBjcmVhdGVFZGdlCisKKwkvKioKKwkgKiBDcmVhdGUgYW4gZWRnZSBiZXR3ZWVuIHRoZSB0d28gbm9kZXMKKwkgKiAKKwkgKiBAcGFyYW0gbm9kZUEKKwkgKiAgICAgICAgICAgIHRoZSBmaXJzdCBub2RlCisJICogQHBhcmFtIG5vZGVCCisJICogICAgICAgICAgICB0aGUgc2Vjb25kIG5vZGUKKwkgKiBAcmV0dXJuIGFuIGVkZ2UgYmV0d2VlbiBub2RlQSBhbmQgbm9kZUIsIGlmIGRpcmVjdGVkIHRoZW4gZnJvbSBub2RlQSB0bworCSAqICAgICAgICAgbm9kZUIKKwkgKi8KKwlwdWJsaWMgc3RhdGljIEVkZ2UgY3JlYXRlRWRnZShmaW5hbCBOb2RlIG5vZGVBLCBmaW5hbCBOb2RlIG5vZGVCLAorCQkJZmluYWwgYm9vbGVhbiBkaXJlY3RlZCkgeworCQlyZXR1cm4gY3JlYXRlRWRnZShub2RlQSwgbm9kZUIsIGRpcmVjdGVkLCBudWxsKTsKKwl9IC8vIGNyZWF0ZUVkZ2UKKworCS8qKgorCSAqIENyZWF0ZSBhbiBlZGdlIGJldHdlZW4gdGhlIHR3byBub2RlcworCSAqIAorCSAqIEBwYXJhbSBub2RlQQorCSAqICAgICAgICAgICAgdGhlIGZpcnN0IG5vZGUKKwkgKiBAcGFyYW0gbm9kZUIKKwkgKiAgICAgICAgICAgIHRoZSBzZWNvbmQgbm9kZQorCSAqIEBwYXJhbSBlZGdlVVJJCisJICogICAgICAgICAgICBpZiBub24tbnVsbCB0aGVuIHRoZSBVUkkgdG8gdXNlIGZvciB0aGUgZWRnZSwgaWYgbnVsbCB0aGVuIHRoZQorCSAqICAgICAgICAgICAgZGVmYXVsdCBpcyB1c2VkLgorCSAqIAorCSAqIEByZXR1cm4gYW4gZWRnZSBiZXR3ZWVuIG5vZGVBIGFuZCBub2RlQiwgaWYgZGlyZWN0ZWQgdGhlbiBmcm9tIG5vZGVBIHRvCisJICogICAgICAgICBub2RlQgorCSAqLworCXB1YmxpYyBzdGF0aWMgRWRnZSBjcmVhdGVFZGdlKGZpbmFsIE5vZGUgbm9kZUEsIGZpbmFsIE5vZGUgbm9kZUIsCisJCQlmaW5hbCBib29sZWFuIGRpcmVjdGVkLCBmaW5hbCBVUkkgZWRnZVVSSSkgeworCQlmaW5hbCBFZGdlIHJldFZhbHVlID0gY3JlYXRlRWRnZShub2RlQS5nZXRVUkkoKSwgbm9kZUIuZ2V0VVJJKCksCisJCQkJZGlyZWN0ZWQsIGVkZ2VVUkkpOworCQlyZXRWYWx1ZS5zZXRBKG5vZGVBKTsKKwkJcmV0VmFsdWUuc2V0Qihub2RlQik7CisKKwkJbm9kZUEuZ2V0RWRnZXMoKS5hZGQocmV0VmFsdWUpOworCQlub2RlQi5nZXRFZGdlcygpLmFkZChyZXRWYWx1ZSk7CisKKwkJcmV0dXJuIHJldFZhbHVlOworCX0gLy8gY3JlYXRlRWRnZQorCisJLyoqCisJICogQ3JlYXRlIGFuIHVuZGlyZWN0ZWQgZWRnZSB3aXRoIHR3byBub2RlIFVSSSdzCisJICogCisJICogQHBhcmFtIG5vZGVBVVJJCisJICogICAgICAgICAgICB0aGUgZmlyc3Qgbm9kZSdzIFVSSQorCSAqIEBwYXJhbSBub2RlQlVSSQorCSAqICAgICAgICAgICAgdGhlIHNlY29uZCBub2RlJ3MgVVJJCisJICogCisJICogQHJldHVybiBhbiBlZGdlIHdpdGggdHdvIFVSSSdzLCBpZiBkaXJlY3RlZCB0aGVuIGZyb20gbm9kZUFVUkkgdG8KKwkgKiAgICAgICAgIG5vZGVCVVJJCisJICovCisJcHVibGljIHN0YXRpYyBFZGdlIGNyZWF0ZUVkZ2UoZmluYWwgVVJJIG5vZGVBVVJJLCBmaW5hbCBVUkkgbm9kZUJVUkkpIHsKKwkJcmV0dXJuIGNyZWF0ZUVkZ2Uobm9kZUFVUkksIG5vZGVCVVJJLCBmYWxzZSwgbnVsbCk7CisJfSAvLyBjcmVhdGVFZGdlCisKKwkvKioKKwkgKiBDcmVhdGUgYW4gdW5kaXJlY3RlZCBlZGdlIHdpdGggdHdvIG5vZGUgVVJJJ3MKKwkgKiAKKwkgKiBAcGFyYW0gbm9kZUFVUkkKKwkgKiAgICAgICAgICAgIHRoZSBmaXJzdCBub2RlJ3MgVVJJCisJICogQHBhcmFtIG5vZGVCVVJJCisJICogICAgICAgICAgICB0aGUgc2Vjb25kIG5vZGUncyBVUkkKKwkgKiBAcGFyYW0gZWRnZVVSSQorCSAqICAgICAgICAgICAgaWYgbm9uLW51bGwgdGhlbiB0aGUgVVJJIHRvIHVzZSBmb3IgdGhlIGVkZ2UsIGlmIG51bGwgdGhlbiB0aGUKKwkgKiAgICAgICAgICAgIGRlZmF1bHQgaXMgdXNlZC4KKwkgKiAKKwkgKiBAcmV0dXJuIGFuIGVkZ2Ugd2l0aCB0d28gVVJJJ3MsIGlmIGRpcmVjdGVkIHRoZW4gZnJvbSBub2RlQVVSSSB0bworCSAqICAgICAgICAgbm9kZUJVUkkKKwkgKi8KKwlwdWJsaWMgc3RhdGljIEVkZ2UgY3JlYXRlRWRnZShmaW5hbCBVUkkgbm9kZUFVUkksIGZpbmFsIFVSSSBub2RlQlVSSSwKKwkJCWZpbmFsIFVSSSBlZGdlVVJJKSB7CisJCXJldHVybiBjcmVhdGVFZGdlKG5vZGVBVVJJLCBub2RlQlVSSSwgZmFsc2UsIGVkZ2VVUkkpOworCX0gLy8gY3JlYXRlRWRnZQorCisJLyoqCisJICogQ3JlYXRlIGFuIGVkZ2Ugd2l0aCB0d28gbm9kZSBVUkkncworCSAqIAorCSAqIEBwYXJhbSBub2RlQVVSSQorCSAqICAgICAgICAgICAgdGhlIGZpcnN0IG5vZGUncyBVUkkKKwkgKiBAcGFyYW0gbm9kZUJVUkkKKwkgKiAgICAgICAgICAgIHRoZSBzZWNvbmQgbm9kZSdzIFVSSQorCSAqIEBwYXJhbSBkaXJlY3RlZAorCSAqICAgICAgICAgICAgdHJ1ZSBpZiB0aGUgZWRnZSBpcyBkaXJlY3RlZCBmcm9tIG5vZGVBVVJJIHRvIG5vZGVCVVJJCisJICogCisJICogQHJldHVybiBhbiBlZGdlIHdpdGggdHdvIFVSSSdzLCBpZiBkaXJlY3RlZCB0aGVuIGZyb20gbm9kZUFVUkkgdG8KKwkgKiAgICAgICAgIG5vZGVCVVJJCisJICovCisJcHVibGljIHN0YXRpYyBFZGdlIGNyZWF0ZUVkZ2UoZmluYWwgVVJJIG5vZGVBVVJJLCBmaW5hbCBVUkkgbm9kZUJVUkksCisJCQlmaW5hbCBib29sZWFuIGRpcmVjdGVkKSB7CisJCXJldHVybiBjcmVhdGVFZGdlKG5vZGVBVVJJLCBub2RlQlVSSSwgZGlyZWN0ZWQsIG51bGwpOworCX0gLy8gY3JlYXRlRWRnZQorCisJLyoqCisJICogQ3JlYXRlIGFuIGVkZ2Ugd2l0aCB0d28gbm9kZSBVUkkncworCSAqIAorCSAqIEBwYXJhbSBub2RlQVVSSQorCSAqICAgICAgICAgICAgdGhlIGZpcnN0IG5vZGUncyBVUkkKKwkgKiBAcGFyYW0gbm9kZUJVUkkKKwkgKiAgICAgICAgICAgIHRoZSBzZWNvbmQgbm9kZSdzIFVSSQorCSAqIEBwYXJhbSBkaXJlY3RlZAorCSAqICAgICAgICAgICAgdHJ1ZSBpZiB0aGUgZWRnZSBpcyBkaXJlY3RlZCBmcm9tIG5vZGVBVVJJIHRvIG5vZGVCVVJJCisJICogCisJICogQHBhcmFtIGVkZ2VVUkkKKwkgKiAgICAgICAgICAgIGlmIG5vbi1udWxsIHRoZW4gdGhlIFVSSSB0byB1c2UgZm9yIHRoZSBlZGdlLCBpZiBudWxsIHRoZW4gdGhlCisJICogICAgICAgICAgICBkZWZhdWx0IGlzIHVzZWQuCisJICogCisJICogQHJldHVybiBhbiBlZGdlIHdpdGggdHdvIFVSSSdzLCBpZiBkaXJlY3RlZCB0aGVuIGZyb20gbm9kZUFVUkkgdG8KKwkgKiAgICAgICAgIG5vZGVCVVJJCisJICovCisJcHVibGljIHN0YXRpYyBFZGdlIGNyZWF0ZUVkZ2UoZmluYWwgVVJJIG5vZGVBVVJJLCBmaW5hbCBVUkkgbm9kZUJVUkksCisJCQlmaW5hbCBib29sZWFuIGRpcmVjdGVkLCBmaW5hbCBVUkkgZWRnZVVSSSkgeworCQlmaW5hbCBFZGdlIHJldFZhbHVlID0gR3JhcGhGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVFZGdlKCk7CisJCXJldFZhbHVlLnNldE5vZGVBVVJJKG5vZGVBVVJJKTsKKwkJcmV0VmFsdWUuc2V0Tm9kZUJVUkkobm9kZUJVUkkpOworCQlyZXRWYWx1ZS5zZXREaXJlY3RlZChkaXJlY3RlZCk7CisJCS8vIEVkZ2UgVVJJIHNwZWNpZmllZD8KKwkJaWYgKGVkZ2VVUkkgIT0gbnVsbCkgCisJCQkvLyBZZXMKKwkJCXJldFZhbHVlLnNldFVSSShlZGdlVVJJKTsKKwkJZWxzZSAKKwkJCXJldFZhbHVlLnNldFVSSShTVEVNVVJJLmNyZWF0ZVVSSShVUklfVFlQRV9FREdFX1NFR01FTlQgKyAiLyIKKwkJCQkJKyBTVEVNVVJJLmdlbmVyYXRlVW5pcXVlUGFydCgpKSk7CisJCXJldHVybiByZXRWYWx1ZTsKKwl9IC8vIGNyZWF0ZUVkZ2UKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgRUNsYXNzIGVTdGF0aWNDbGFzcygpIHsKKwkJcmV0dXJuIEdyYXBoUGFja2FnZS5MaXRlcmFscy5FREdFOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgTm9kZSBnZXRBKCkgeworCQlpZiAoYSAhPSBudWxsICYmIGEuZUlzUHJveHkoKSkgeworCQkJSW50ZXJuYWxFT2JqZWN0IG9sZEEgPSAoSW50ZXJuYWxFT2JqZWN0KWE7CisJCQlhID0gKE5vZGUpZVJlc29sdmVQcm94eShvbGRBKTsKKwkJCWlmIChhICE9IG9sZEEpIHsKKwkJCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpCisJCQkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5SRVNPTFZFLCBHcmFwaFBhY2thZ2UuRURHRV9fQSwgb2xkQSwgYSkpOworCQkJfQorCQl9CisJCXJldHVybiBhOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgTm9kZSBiYXNpY0dldEEoKSB7CisJCXJldHVybiBhOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRBKE5vZGUgbmV3QSkgeworCQlOb2RlIG9sZEEgPSBhOworCQlhID0gbmV3QTsKKwkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQorCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgR3JhcGhQYWNrYWdlLkVER0VfX0EsIG9sZEEsIGEpKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFVSSSBnZXROb2RlQVVSSSgpIHsKKwkJcmV0dXJuIG5vZGVBVVJJOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXROb2RlQVVSSShVUkkgbmV3Tm9kZUFVUkkpIHsKKwkJVVJJIG9sZE5vZGVBVVJJID0gbm9kZUFVUkk7CisJCW5vZGVBVVJJID0gbmV3Tm9kZUFVUkk7CisJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkKKwkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIEdyYXBoUGFja2FnZS5FREdFX19OT0RFX0FVUkksIG9sZE5vZGVBVVJJLCBub2RlQVVSSSkpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgTm9kZSBnZXRCKCkgeworCQlpZiAoYiAhPSBudWxsICYmIGIuZUlzUHJveHkoKSkgeworCQkJSW50ZXJuYWxFT2JqZWN0IG9sZEIgPSAoSW50ZXJuYWxFT2JqZWN0KWI7CisJCQliID0gKE5vZGUpZVJlc29sdmVQcm94eShvbGRCKTsKKwkJCWlmIChiICE9IG9sZEIpIHsKKwkJCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpCisJCQkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5SRVNPTFZFLCBHcmFwaFBhY2thZ2UuRURHRV9fQiwgb2xkQiwgYikpOworCQkJfQorCQl9CisJCXJldHVybiBiOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgTm9kZSBiYXNpY0dldEIoKSB7CisJCXJldHVybiBiOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRCKE5vZGUgbmV3QikgeworCQlOb2RlIG9sZEIgPSBiOworCQliID0gbmV3QjsKKwkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQorCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgR3JhcGhQYWNrYWdlLkVER0VfX0IsIG9sZEIsIGIpKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFVSSSBnZXROb2RlQlVSSSgpIHsKKwkJcmV0dXJuIG5vZGVCVVJJOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXROb2RlQlVSSShVUkkgbmV3Tm9kZUJVUkkpIHsKKwkJVVJJIG9sZE5vZGVCVVJJID0gbm9kZUJVUkk7CisJCW5vZGVCVVJJID0gbmV3Tm9kZUJVUkk7CisJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkKKwkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIEdyYXBoUGFja2FnZS5FREdFX19OT0RFX0JVUkksIG9sZE5vZGVCVVJJLCBub2RlQlVSSSkpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRWRnZUxhYmVsIGdldExhYmVsKCkgeworCQlyZXR1cm4gbGFiZWw7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIE5vdGlmaWNhdGlvbkNoYWluIGJhc2ljU2V0TGFiZWwoRWRnZUxhYmVsIG5ld0xhYmVsLCBOb3RpZmljYXRpb25DaGFpbiBtc2dzKSB7CisJCUVkZ2VMYWJlbCBvbGRMYWJlbCA9IGxhYmVsOworCQlsYWJlbCA9IG5ld0xhYmVsOworCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpIHsKKwkJCUVOb3RpZmljYXRpb25JbXBsIG5vdGlmaWNhdGlvbiA9IG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBHcmFwaFBhY2thZ2UuRURHRV9fTEFCRUwsIG9sZExhYmVsLCBuZXdMYWJlbCk7CisJCQlpZiAobXNncyA9PSBudWxsKSBtc2dzID0gbm90aWZpY2F0aW9uOyBlbHNlIG1zZ3MuYWRkKG5vdGlmaWNhdGlvbik7CisJCX0KKwkJcmV0dXJuIG1zZ3M7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgc2V0TGFiZWwoRWRnZUxhYmVsIG5ld0xhYmVsKSB7CisJCWlmIChuZXdMYWJlbCAhPSBsYWJlbCkgeworCQkJTm90aWZpY2F0aW9uQ2hhaW4gbXNncyA9IG51bGw7CisJCQlpZiAobGFiZWwgIT0gbnVsbCkKKwkJCQltc2dzID0gKChJbnRlcm5hbEVPYmplY3QpbGFiZWwpLmVJbnZlcnNlUmVtb3ZlKHRoaXMsIEdyYXBoUGFja2FnZS5FREdFX0xBQkVMX19FREdFLCBFZGdlTGFiZWwuY2xhc3MsIG1zZ3MpOworCQkJaWYgKG5ld0xhYmVsICE9IG51bGwpCisJCQkJbXNncyA9ICgoSW50ZXJuYWxFT2JqZWN0KW5ld0xhYmVsKS5lSW52ZXJzZUFkZCh0aGlzLCBHcmFwaFBhY2thZ2UuRURHRV9MQUJFTF9fRURHRSwgRWRnZUxhYmVsLmNsYXNzLCBtc2dzKTsKKwkJCW1zZ3MgPSBiYXNpY1NldExhYmVsKG5ld0xhYmVsLCBtc2dzKTsKKwkJCWlmIChtc2dzICE9IG51bGwpIG1zZ3MuZGlzcGF0Y2goKTsKKwkJfQorCQllbHNlIGlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkKKwkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIEdyYXBoUGFja2FnZS5FREdFX19MQUJFTCwgbmV3TGFiZWwsIG5ld0xhYmVsKSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBib29sZWFuIGlzRGlyZWN0ZWQoKSB7CisJCXJldHVybiBkaXJlY3RlZDsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgc2V0RGlyZWN0ZWQoYm9vbGVhbiBuZXdEaXJlY3RlZCkgeworCQlib29sZWFuIG9sZERpcmVjdGVkID0gZGlyZWN0ZWQ7CisJCWRpcmVjdGVkID0gbmV3RGlyZWN0ZWQ7CisJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkKKwkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIEdyYXBoUGFja2FnZS5FREdFX19ESVJFQ1RFRCwgb2xkRGlyZWN0ZWQsIGRpcmVjdGVkKSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBHaXZlbiBvbmUgbm9kZSBvZiBhbiBlZGdlLCByZXR1cm4gdGhlIG90aGVyLgorCSAqIAorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJcHVibGljIE5vZGUgZ2V0T3RoZXJOb2RlKE5vZGUgbm9kZSkgeworCQlhc3NlcnQgZ2V0QSgpLmVxdWFscyhub2RlKSB8fCBnZXRCKCkuZXF1YWxzKG5vZGUpOworCQlyZXR1cm4gZ2V0QSgpLmVxdWFscyhub2RlKSA/IGdldEIoKSA6IGdldEEoKTsKKwl9IC8vIGdldE90aGVyTm9kZQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAcmV0dXJuIDxjb2RlPnRydWU8L2NvZGU+IGlmIHRoZSBub2RlIGlzIEIgYW5kIHRoZSBlZGdlIGlzIGRpcmVjdGVkLgorCSAqIAorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJcHVibGljIGJvb2xlYW4gaXNEaXJlY3RlZEF0KE5vZGUgbm9kZSkgeworCQlyZXR1cm4gaXNEaXJlY3RlZCgpICYmICggZ2V0QigpICE9IG51bGwgJiYgZ2V0QigpLmVxdWFscyhub2RlKSAKKwkJCQl8fCBnZXRCKCkgPT0gbnVsbCAmJiBnZXROb2RlQlVSSSgpLmVxdWFscyhub2RlLmdldFVSSSgpKSk7CisJfSAvLyBpc0RpcmVjdGVkQXQKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBOb3RpZmljYXRpb25DaGFpbiBlSW52ZXJzZUFkZChJbnRlcm5hbEVPYmplY3Qgb3RoZXJFbmQsIGludCBmZWF0dXJlSUQsIE5vdGlmaWNhdGlvbkNoYWluIG1zZ3MpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJCWNhc2UgR3JhcGhQYWNrYWdlLkVER0VfX0xBQkVMOgorCQkJCWlmIChsYWJlbCAhPSBudWxsKQorCQkJCQltc2dzID0gKChJbnRlcm5hbEVPYmplY3QpbGFiZWwpLmVJbnZlcnNlUmVtb3ZlKHRoaXMsIEVPUFBPU0lURV9GRUFUVVJFX0JBU0UgLSBHcmFwaFBhY2thZ2UuRURHRV9fTEFCRUwsIG51bGwsIG1zZ3MpOworCQkJCXJldHVybiBiYXNpY1NldExhYmVsKChFZGdlTGFiZWwpb3RoZXJFbmQsIG1zZ3MpOworCQl9CisJCXJldHVybiBzdXBlci5lSW52ZXJzZUFkZChvdGhlckVuZCwgZmVhdHVyZUlELCBtc2dzKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIE5vdGlmaWNhdGlvbkNoYWluIGVJbnZlcnNlUmVtb3ZlKEludGVybmFsRU9iamVjdCBvdGhlckVuZCwgaW50IGZlYXR1cmVJRCwgTm90aWZpY2F0aW9uQ2hhaW4gbXNncykgeworCQlzd2l0Y2ggKGZlYXR1cmVJRCkgeworCQkJY2FzZSBHcmFwaFBhY2thZ2UuRURHRV9fTEFCRUw6CisJCQkJcmV0dXJuIGJhc2ljU2V0TGFiZWwobnVsbCwgbXNncyk7CisJCX0KKwkJcmV0dXJuIHN1cGVyLmVJbnZlcnNlUmVtb3ZlKG90aGVyRW5kLCBmZWF0dXJlSUQsIG1zZ3MpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgT2JqZWN0IGVHZXQoaW50IGZlYXR1cmVJRCwgYm9vbGVhbiByZXNvbHZlLCBib29sZWFuIGNvcmVUeXBlKSB7CisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7CisJCQljYXNlIEdyYXBoUGFja2FnZS5FREdFX19BOgorCQkJCWlmIChyZXNvbHZlKSByZXR1cm4gZ2V0QSgpOworCQkJCXJldHVybiBiYXNpY0dldEEoKTsKKwkJCWNhc2UgR3JhcGhQYWNrYWdlLkVER0VfX05PREVfQVVSSToKKwkJCQlyZXR1cm4gZ2V0Tm9kZUFVUkkoKTsKKwkJCWNhc2UgR3JhcGhQYWNrYWdlLkVER0VfX0I6CisJCQkJaWYgKHJlc29sdmUpIHJldHVybiBnZXRCKCk7CisJCQkJcmV0dXJuIGJhc2ljR2V0QigpOworCQkJY2FzZSBHcmFwaFBhY2thZ2UuRURHRV9fTk9ERV9CVVJJOgorCQkJCXJldHVybiBnZXROb2RlQlVSSSgpOworCQkJY2FzZSBHcmFwaFBhY2thZ2UuRURHRV9fTEFCRUw6CisJCQkJcmV0dXJuIGdldExhYmVsKCk7CisJCQljYXNlIEdyYXBoUGFja2FnZS5FREdFX19ESVJFQ1RFRDoKKwkJCQlyZXR1cm4gaXNEaXJlY3RlZCgpOworCQl9CisJCXJldHVybiBzdXBlci5lR2V0KGZlYXR1cmVJRCwgcmVzb2x2ZSwgY29yZVR5cGUpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBlU2V0KGludCBmZWF0dXJlSUQsIE9iamVjdCBuZXdWYWx1ZSkgeworCQlzd2l0Y2ggKGZlYXR1cmVJRCkgeworCQkJY2FzZSBHcmFwaFBhY2thZ2UuRURHRV9fQToKKwkJCQlzZXRBKChOb2RlKW5ld1ZhbHVlKTsKKwkJCQlyZXR1cm47CisJCQljYXNlIEdyYXBoUGFja2FnZS5FREdFX19OT0RFX0FVUkk6CisJCQkJc2V0Tm9kZUFVUkkoKFVSSSluZXdWYWx1ZSk7CisJCQkJcmV0dXJuOworCQkJY2FzZSBHcmFwaFBhY2thZ2UuRURHRV9fQjoKKwkJCQlzZXRCKChOb2RlKW5ld1ZhbHVlKTsKKwkJCQlyZXR1cm47CisJCQljYXNlIEdyYXBoUGFja2FnZS5FREdFX19OT0RFX0JVUkk6CisJCQkJc2V0Tm9kZUJVUkkoKFVSSSluZXdWYWx1ZSk7CisJCQkJcmV0dXJuOworCQkJY2FzZSBHcmFwaFBhY2thZ2UuRURHRV9fTEFCRUw6CisJCQkJc2V0TGFiZWwoKEVkZ2VMYWJlbCluZXdWYWx1ZSk7CisJCQkJcmV0dXJuOworCQkJY2FzZSBHcmFwaFBhY2thZ2UuRURHRV9fRElSRUNURUQ6CisJCQkJc2V0RGlyZWN0ZWQoKEJvb2xlYW4pbmV3VmFsdWUpOworCQkJCXJldHVybjsKKwkJfQorCQlzdXBlci5lU2V0KGZlYXR1cmVJRCwgbmV3VmFsdWUpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBlVW5zZXQoaW50IGZlYXR1cmVJRCkgeworCQlzd2l0Y2ggKGZlYXR1cmVJRCkgeworCQkJY2FzZSBHcmFwaFBhY2thZ2UuRURHRV9fQToKKwkJCQlzZXRBKChOb2RlKW51bGwpOworCQkJCXJldHVybjsKKwkJCWNhc2UgR3JhcGhQYWNrYWdlLkVER0VfX05PREVfQVVSSToKKwkJCQlzZXROb2RlQVVSSShOT0RFX0FVUklfRURFRkFVTFQpOworCQkJCXJldHVybjsKKwkJCWNhc2UgR3JhcGhQYWNrYWdlLkVER0VfX0I6CisJCQkJc2V0QigoTm9kZSludWxsKTsKKwkJCQlyZXR1cm47CisJCQljYXNlIEdyYXBoUGFja2FnZS5FREdFX19OT0RFX0JVUkk6CisJCQkJc2V0Tm9kZUJVUkkoTk9ERV9CVVJJX0VERUZBVUxUKTsKKwkJCQlyZXR1cm47CisJCQljYXNlIEdyYXBoUGFja2FnZS5FREdFX19MQUJFTDoKKwkJCQlzZXRMYWJlbCgoRWRnZUxhYmVsKW51bGwpOworCQkJCXJldHVybjsKKwkJCWNhc2UgR3JhcGhQYWNrYWdlLkVER0VfX0RJUkVDVEVEOgorCQkJCXNldERpcmVjdGVkKERJUkVDVEVEX0VERUZBVUxUKTsKKwkJCQlyZXR1cm47CisJCX0KKwkJc3VwZXIuZVVuc2V0KGZlYXR1cmVJRCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBib29sZWFuIGVJc1NldChpbnQgZmVhdHVyZUlEKSB7CisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7CisJCQljYXNlIEdyYXBoUGFja2FnZS5FREdFX19BOgorCQkJCXJldHVybiBhICE9IG51bGw7CisJCQljYXNlIEdyYXBoUGFja2FnZS5FREdFX19OT0RFX0FVUkk6CisJCQkJcmV0dXJuIE5PREVfQVVSSV9FREVGQVVMVCA9PSBudWxsID8gbm9kZUFVUkkgIT0gbnVsbCA6ICFOT0RFX0FVUklfRURFRkFVTFQuZXF1YWxzKG5vZGVBVVJJKTsKKwkJCWNhc2UgR3JhcGhQYWNrYWdlLkVER0VfX0I6CisJCQkJcmV0dXJuIGIgIT0gbnVsbDsKKwkJCWNhc2UgR3JhcGhQYWNrYWdlLkVER0VfX05PREVfQlVSSToKKwkJCQlyZXR1cm4gTk9ERV9CVVJJX0VERUZBVUxUID09IG51bGwgPyBub2RlQlVSSSAhPSBudWxsIDogIU5PREVfQlVSSV9FREVGQVVMVC5lcXVhbHMobm9kZUJVUkkpOworCQkJY2FzZSBHcmFwaFBhY2thZ2UuRURHRV9fTEFCRUw6CisJCQkJcmV0dXJuIGxhYmVsICE9IG51bGw7CisJCQljYXNlIEdyYXBoUGFja2FnZS5FREdFX19ESVJFQ1RFRDoKKwkJCQlyZXR1cm4gZGlyZWN0ZWQgIT0gRElSRUNURURfRURFRkFVTFQ7CisJCX0KKwkJcmV0dXJuIHN1cGVyLmVJc1NldChmZWF0dXJlSUQpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIFN0cmluZyB0b1N0cmluZygpIHsKKwkJaWYgKGVJc1Byb3h5KCkpCisJCQlyZXR1cm4gc3VwZXIudG9TdHJpbmcoKTsKKworCQlTdHJpbmdCdWZmZXIgcmVzdWx0ID0gbmV3IFN0cmluZ0J1ZmZlcigiIik7CisKKwkJcmVzdWx0LmFwcGVuZChnZXRBKCkgIT0gbnVsbCA/IGdldEEoKSA6ICAoIGdldE5vZGVBVVJJKCkgIT0gbnVsbCA/IGdldE5vZGVBVVJJKCkudG9TdHJpbmcoKSA6ICJudWxsIikpOworCisJCXJlc3VsdC5hcHBlbmQoaXNEaXJlY3RlZCgpID8gIiAtPiAiIDogIiAtLSAiKTsKKworCQlyZXN1bHQuYXBwZW5kKGdldEIoKSAhPSBudWxsID8gZ2V0QigpIDogKCBnZXROb2RlQlVSSSgpICE9IG51bGwgPyBnZXROb2RlQlVSSSgpLnRvU3RyaW5nKCkgOiAibnVsbCIpKTsKKwkJcmV0dXJuIHJlc3VsdC50b1N0cmluZygpOworCX0gLy8gdG9TdHJpbmcKKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb21tb24uaW1wbC5JZGVudGlmaWFibGVJbXBsI3NhbmUoKQorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIGJvb2xlYW4gc2FuZSgpIHsKKwkJCisJCWJvb2xlYW4gcmV0VmFsdWUgPSBzdXBlci5zYW5lKCk7CisKKwkJcmV0VmFsdWUgPSByZXRWYWx1ZSAmJiBnZXROb2RlQVVSSSgpICE9IG51bGw7CisJCWFzc2VydCByZXRWYWx1ZTsKKworCQlyZXRWYWx1ZSA9IHJldFZhbHVlICYmIGdldE5vZGVCVVJJKCkgIT0gbnVsbDsKKwkJYXNzZXJ0IHJldFZhbHVlOworCisJCXJldFZhbHVlID0gcmV0VmFsdWUgJiYgZ2V0TGFiZWwoKSAhPSBudWxsOworCQlhc3NlcnQgcmV0VmFsdWU7CisKKwkJLy8gQSBub2RlPworCQlpZiAoZ2V0QSgpICE9IG51bGwpIHsKKwkJCS8vIFllcworCQkJLy8gSWYgdGhpcyBlZGdlIGxpbmtzIHRvIGEgbm9kZSwgdGhlbiB0aGUgbm9kZSBzaG91bGQgaGF2ZSB0aGlzIGVkZ2UKKwkJCS8vIGFzIG9uZSBvZiBpdHMgZWRnZXMKKwkJCXJldFZhbHVlID0gcmV0VmFsdWUgJiYgZ2V0QSgpLmdldEVkZ2VzKCkuY29udGFpbnModGhpcyk7CisJCQlhc3NlcnQgcmV0VmFsdWU7CisKKwkJCS8vIFRoaXMgZWRnZSBzaG91bGQgYmUgaG9va2VkIHVwIHRvIHRoZSBjb3JyZWN0IG5vZGUgdG9vLgorCQkJcmV0VmFsdWUgPSByZXRWYWx1ZSAmJiBnZXROb2RlQVVSSSgpLmVxdWFscyhnZXRBKCkuZ2V0VVJJKCkpOworCQkJYXNzZXJ0IHJldFZhbHVlOworCQl9IC8vIGlmIEEgTm9kZQorCisJCS8vIEIgbm9kZT8KKwkJaWYgKGdldEIoKSAhPSBudWxsKSB7CisJCQkvLyBZZXMKKwkJCS8vIElmIHRoaXMgZWRnZSBsaW5rcyB0byBhIG5vZGUsIHRoZW4gdGhlIG5vZGUgc2hvdWxkIGhhdmUgdGhpcyBlZGdlCisJCQkvLyBhcyBvbmUgb2YgaXRzIGVkZ2VzCisJCQlyZXRWYWx1ZSA9IHJldFZhbHVlICYmIGdldEIoKS5nZXRFZGdlcygpLmNvbnRhaW5zKHRoaXMpOworCQkJYXNzZXJ0IHJldFZhbHVlOworCisJCQkvLyBUaGlzIGVkZ2Ugc2hvdWxkIGJlIGhvb2tlZCB1cCB0byB0aGUgY29ycmVjdCBub2RlIHRvby4KKwkJCXJldFZhbHVlID0gcmV0VmFsdWUgJiYgZ2V0Tm9kZUJVUkkoKS5lcXVhbHMoZ2V0QigpLmdldFVSSSgpKTsKKwkJCWFzc2VydCByZXRWYWx1ZTsKKwkJfQorCisJCS8vIE9mIGNvdXJzZSBpZiBvbmUgbm9kZSBpcyBzZXQsIHNvIHNob3VsZCB0aGUgb3RoZXIKKwkJcmV0VmFsdWUgPSByZXRWYWx1ZQorCQkJCSYmICgoZ2V0QSgpID09IG51bGwgJiYgZ2V0QigpID09IG51bGwpIHx8IChnZXRBKCkgIT0gbnVsbCAmJiBnZXRCKCkgIT0gbnVsbCkpOworCQlhc3NlcnQgcmV0VmFsdWU7CisKKwkJLy8gVGhlIGxhYmVsIHNob3VsZCByZWZlcmVuY2UgdGhpcyBlZGdlIHdpdGggaXRzIFVSSQorCQlyZXRWYWx1ZSA9IHJldFZhbHVlICYmIGdldExhYmVsKCkuZ2V0VVJJT2ZJZGVudGlmaWFibGVUb0JlTGFiZWxlZCgpICE9IG51bGw7CisJCWFzc2VydCByZXRWYWx1ZTsKKwkJcmV0VmFsdWUgPSByZXRWYWx1ZQorCQkJCSYmIGdldExhYmVsKCkuZ2V0VVJJT2ZJZGVudGlmaWFibGVUb0JlTGFiZWxlZCgpLmVxdWFscyhnZXRVUkkoKSk7CisJCWFzc2VydCByZXRWYWx1ZTsKKworCQkvLyBBbmQgdGhlIGxhYmVsIHNob3VsZCBiZSBzYW5lCisJCXJldFZhbHVlID0gcmV0VmFsdWUgJiYgZ2V0TGFiZWwoKS5zYW5lKCk7CisJCWFzc2VydCByZXRWYWx1ZTsKKworCQlyZXR1cm4gcmV0VmFsdWU7CisJfSAvLyBzYW5lCisKK30gLy8gRWRnZUltcGwKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGgvaW1wbC9FZGdlTGFiZWxJbXBsLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoL2ltcGwvRWRnZUxhYmVsSW1wbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU2MThmMDIKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoL2ltcGwvRWRnZUxhYmVsSW1wbC5qYXZhCkBAIC0wLDAgKzEsMjEyIEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5pbXBsOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb25DaGFpbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5JbnRlcm5hbEVPYmplY3Q7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLmltcGwuRU5vdGlmaWNhdGlvbkltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnV0aWwuRWNvcmVVdGlsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uSWRlbnRpZmlhYmxlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5FZGdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5FZGdlTGFiZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkdyYXBoUGFja2FnZTsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPkVkZ2UgTGFiZWw8L2I+PC9lbT4nLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiA8cD4KKyAqIFRoZSBmb2xsb3dpbmcgZmVhdHVyZXMgYXJlIGltcGxlbWVudGVkOgorICogPHVsPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5pbXBsLkVkZ2VMYWJlbEltcGwjZ2V0RWRnZSA8ZW0+RWRnZTwvZW0+fTwvbGk+CisgKiA8L3VsPgorICogPC9wPgorICoKKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGFic3RyYWN0IGNsYXNzIEVkZ2VMYWJlbEltcGwgZXh0ZW5kcyBMYWJlbEltcGwgaW1wbGVtZW50cyBFZGdlTGFiZWwgeworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBFZGdlTGFiZWxJbXBsKCkgeworCQlzdXBlcigpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCBFQ2xhc3MgZVN0YXRpY0NsYXNzKCkgeworCQlyZXR1cm4gR3JhcGhQYWNrYWdlLkxpdGVyYWxzLkVER0VfTEFCRUw7CisJfQorCisJCisJQE92ZXJyaWRlCisJcHVibGljIElkZW50aWZpYWJsZSBnZXRJZGVudGlmaWFibGUoKSB7CisJCXJldHVybiBnZXRFZGdlKCk7CisJfQorCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgc2V0SWRlbnRpZmlhYmxlKElkZW50aWZpYWJsZSBuZXdJZGVudGlmaWFibGUpIHsKKwkJc2V0RWRnZSgoRWRnZSluZXdJZGVudGlmaWFibGUpOwkJCisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVkZ2UgZ2V0RWRnZSgpIHsKKwkJaWYgKGVDb250YWluZXJGZWF0dXJlSUQoKSAhPSBHcmFwaFBhY2thZ2UuRURHRV9MQUJFTF9fRURHRSkgcmV0dXJuIG51bGw7CisJCXJldHVybiAoRWRnZSllQ29udGFpbmVyKCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIE5vdGlmaWNhdGlvbkNoYWluIGJhc2ljU2V0RWRnZShFZGdlIG5ld0VkZ2UsIE5vdGlmaWNhdGlvbkNoYWluIG1zZ3MpIHsKKwkJbXNncyA9IGVCYXNpY1NldENvbnRhaW5lcigoSW50ZXJuYWxFT2JqZWN0KW5ld0VkZ2UsIEdyYXBoUGFja2FnZS5FREdFX0xBQkVMX19FREdFLCBtc2dzKTsKKwkJcmV0dXJuIG1zZ3M7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgc2V0RWRnZShFZGdlIG5ld0VkZ2UpIHsKKwkJaWYgKG5ld0VkZ2UgIT0gZUludGVybmFsQ29udGFpbmVyKCkgfHwgKGVDb250YWluZXJGZWF0dXJlSUQoKSAhPSBHcmFwaFBhY2thZ2UuRURHRV9MQUJFTF9fRURHRSAmJiBuZXdFZGdlICE9IG51bGwpKSB7CisJCQlpZiAoRWNvcmVVdGlsLmlzQW5jZXN0b3IodGhpcywgbmV3RWRnZSkpCisJCQkJdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiUmVjdXJzaXZlIGNvbnRhaW5tZW50IG5vdCBhbGxvd2VkIGZvciAiICsgdG9TdHJpbmcoKSk7IC8vJE5PTi1OTFMtMSQKKwkJCU5vdGlmaWNhdGlvbkNoYWluIG1zZ3MgPSBudWxsOworCQkJaWYgKGVJbnRlcm5hbENvbnRhaW5lcigpICE9IG51bGwpCisJCQkJbXNncyA9IGVCYXNpY1JlbW92ZUZyb21Db250YWluZXIobXNncyk7CisJCQlpZiAobmV3RWRnZSAhPSBudWxsKQorCQkJCW1zZ3MgPSAoKEludGVybmFsRU9iamVjdCluZXdFZGdlKS5lSW52ZXJzZUFkZCh0aGlzLCBHcmFwaFBhY2thZ2UuRURHRV9fTEFCRUwsIEVkZ2UuY2xhc3MsIG1zZ3MpOworCQkJbXNncyA9IGJhc2ljU2V0RWRnZShuZXdFZGdlLCBtc2dzKTsKKwkJCWlmIChtc2dzICE9IG51bGwpIG1zZ3MuZGlzcGF0Y2goKTsKKwkJfQorCQllbHNlIGlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkKKwkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIEdyYXBoUGFja2FnZS5FREdFX0xBQkVMX19FREdFLCBuZXdFZGdlLCBuZXdFZGdlKSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIE5vdGlmaWNhdGlvbkNoYWluIGVJbnZlcnNlQWRkKEludGVybmFsRU9iamVjdCBvdGhlckVuZCwgaW50IGZlYXR1cmVJRCwgTm90aWZpY2F0aW9uQ2hhaW4gbXNncykgeworCQlzd2l0Y2ggKGZlYXR1cmVJRCkgeworCQkJY2FzZSBHcmFwaFBhY2thZ2UuRURHRV9MQUJFTF9fRURHRToKKwkJCQlpZiAoZUludGVybmFsQ29udGFpbmVyKCkgIT0gbnVsbCkKKwkJCQkJbXNncyA9IGVCYXNpY1JlbW92ZUZyb21Db250YWluZXIobXNncyk7CisJCQkJcmV0dXJuIGJhc2ljU2V0RWRnZSgoRWRnZSlvdGhlckVuZCwgbXNncyk7CisJCX0KKwkJcmV0dXJuIHN1cGVyLmVJbnZlcnNlQWRkKG90aGVyRW5kLCBmZWF0dXJlSUQsIG1zZ3MpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBOb3RpZmljYXRpb25DaGFpbiBlSW52ZXJzZVJlbW92ZShJbnRlcm5hbEVPYmplY3Qgb3RoZXJFbmQsIGludCBmZWF0dXJlSUQsIE5vdGlmaWNhdGlvbkNoYWluIG1zZ3MpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJCWNhc2UgR3JhcGhQYWNrYWdlLkVER0VfTEFCRUxfX0VER0U6CisJCQkJcmV0dXJuIGJhc2ljU2V0RWRnZShudWxsLCBtc2dzKTsKKwkJfQorCQlyZXR1cm4gc3VwZXIuZUludmVyc2VSZW1vdmUob3RoZXJFbmQsIGZlYXR1cmVJRCwgbXNncyk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIE5vdGlmaWNhdGlvbkNoYWluIGVCYXNpY1JlbW92ZUZyb21Db250YWluZXJGZWF0dXJlKE5vdGlmaWNhdGlvbkNoYWluIG1zZ3MpIHsKKwkJc3dpdGNoIChlQ29udGFpbmVyRmVhdHVyZUlEKCkpIHsKKwkJCWNhc2UgR3JhcGhQYWNrYWdlLkVER0VfTEFCRUxfX0VER0U6CisJCQkJcmV0dXJuIGVJbnRlcm5hbENvbnRhaW5lcigpLmVJbnZlcnNlUmVtb3ZlKHRoaXMsIEdyYXBoUGFja2FnZS5FREdFX19MQUJFTCwgRWRnZS5jbGFzcywgbXNncyk7CisJCX0KKwkJcmV0dXJuIHN1cGVyLmVCYXNpY1JlbW92ZUZyb21Db250YWluZXJGZWF0dXJlKG1zZ3MpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBPYmplY3QgZUdldChpbnQgZmVhdHVyZUlELCBib29sZWFuIHJlc29sdmUsIGJvb2xlYW4gY29yZVR5cGUpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJCWNhc2UgR3JhcGhQYWNrYWdlLkVER0VfTEFCRUxfX0VER0U6CisJCQkJcmV0dXJuIGdldEVkZ2UoKTsKKwkJfQorCQlyZXR1cm4gc3VwZXIuZUdldChmZWF0dXJlSUQsIHJlc29sdmUsIGNvcmVUeXBlKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBlU2V0KGludCBmZWF0dXJlSUQsIE9iamVjdCBuZXdWYWx1ZSkgeworCQlzd2l0Y2ggKGZlYXR1cmVJRCkgeworCQkJY2FzZSBHcmFwaFBhY2thZ2UuRURHRV9MQUJFTF9fRURHRToKKwkJCQlzZXRFZGdlKChFZGdlKW5ld1ZhbHVlKTsKKwkJCQlyZXR1cm47CisJCX0KKwkJc3VwZXIuZVNldChmZWF0dXJlSUQsIG5ld1ZhbHVlKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBlVW5zZXQoaW50IGZlYXR1cmVJRCkgeworCQlzd2l0Y2ggKGZlYXR1cmVJRCkgeworCQkJY2FzZSBHcmFwaFBhY2thZ2UuRURHRV9MQUJFTF9fRURHRToKKwkJCQlzZXRFZGdlKChFZGdlKW51bGwpOworCQkJCXJldHVybjsKKwkJfQorCQlzdXBlci5lVW5zZXQoZmVhdHVyZUlEKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgYm9vbGVhbiBlSXNTZXQoaW50IGZlYXR1cmVJRCkgeworCQlzd2l0Y2ggKGZlYXR1cmVJRCkgeworCQkJY2FzZSBHcmFwaFBhY2thZ2UuRURHRV9MQUJFTF9fRURHRToKKwkJCQlyZXR1cm4gZ2V0RWRnZSgpICE9IG51bGw7CisJCX0KKwkJcmV0dXJuIHN1cGVyLmVJc1NldChmZWF0dXJlSUQpOworCX0KKworfSAvL0VkZ2VMYWJlbEltcGwKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGgvaW1wbC9FeGNoYW5nZUltcGwuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGgvaW1wbC9FeGNoYW5nZUltcGwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YWYzZDU2Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC9pbXBsL0V4Y2hhbmdlSW1wbC5qYXZhCkBAIC0wLDAgKzEsMzA1IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5pbXBsOw0KKw0KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIA0KKyAqIENvcHlyaWdodCAoYykgMjAxMSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4gDQorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyANCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgDQorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQgDQorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwgDQorICogDQorICogQ29udHJpYnV0b3JzOiANCisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIA0KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KKw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb247DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5JbnRlcm5hbEVPYmplY3Q7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5pbXBsLkVOb3RpZmljYXRpb25JbXBsOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuaW1wbC5FT2JqZWN0SW1wbDsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkV4Y2hhbmdlOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguRXhjaGFuZ2VUeXBlOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguR3JhcGhQYWNrYWdlOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguTGFiZWw7DQorDQorLyoqDQorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisgKiBBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+RXhjaGFuZ2U8L2I+PC9lbT4nLg0KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKyAqIDxwPg0KKyAqIFRoZSBmb2xsb3dpbmcgZmVhdHVyZXMgYXJlIGltcGxlbWVudGVkOg0KKyAqIDx1bD4NCisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmltcGwuRXhjaGFuZ2VJbXBsI2dldE90aGVyTGFiZWwgPGVtPk90aGVyIExhYmVsPC9lbT59PC9saT4NCisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmltcGwuRXhjaGFuZ2VJbXBsI2dldENvdW50IDxlbT5Db3VudDwvZW0+fTwvbGk+DQorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5pbXBsLkV4Y2hhbmdlSW1wbCNnZXRUeXBlIDxlbT5UeXBlPC9lbT59PC9saT4NCisgKiA8L3VsPg0KKyAqIDwvcD4NCisgKg0KKyAqIEBnZW5lcmF0ZWQNCisgKi8NCitwdWJsaWMgY2xhc3MgRXhjaGFuZ2VJbXBsIGV4dGVuZHMgRU9iamVjdEltcGwgaW1wbGVtZW50cyBFeGNoYW5nZSB7DQorCS8qKg0KKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRPdGhlckxhYmVsKCkgPGVtPk90aGVyIExhYmVsPC9lbT59JyByZWZlcmVuY2UuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAc2VlICNnZXRPdGhlckxhYmVsKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJcHJvdGVjdGVkIExhYmVsIG90aGVyTGFiZWw7DQorDQorCS8qKg0KKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0Q291bnQoKSA8ZW0+Q291bnQ8L2VtPn0nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBzZWUgI2dldENvdW50KCkNCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBkb3VibGUgQ09VTlRfRURFRkFVTFQgPSAwLjA7DQorDQorCS8qKg0KKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRDb3VudCgpIDxlbT5Db3VudDwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHNlZSAjZ2V0Q291bnQoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqIEBvcmRlcmVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgZG91YmxlIGNvdW50ID0gQ09VTlRfRURFRkFVTFQ7DQorDQorCS8qKg0KKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0VHlwZSgpIDxlbT5UeXBlPC9lbT59JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAc2VlICNnZXRUeXBlKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBFeGNoYW5nZVR5cGUgVFlQRV9FREVGQVVMVCA9IEV4Y2hhbmdlVHlwZS5CSVJUSFNfQU5EX0RFQVRIUzsNCisNCisJLyoqDQorCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldFR5cGUoKSA8ZW0+VHlwZTwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHNlZSAjZ2V0VHlwZSgpDQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCXByb3RlY3RlZCBFeGNoYW5nZVR5cGUgdHlwZSA9IFRZUEVfRURFRkFVTFQ7DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIEV4Y2hhbmdlSW1wbCgpIHsNCisJCXN1cGVyKCk7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlAT3ZlcnJpZGUNCisJcHJvdGVjdGVkIEVDbGFzcyBlU3RhdGljQ2xhc3MoKSB7DQorCQlyZXR1cm4gR3JhcGhQYWNrYWdlLkxpdGVyYWxzLkVYQ0hBTkdFOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIExhYmVsIGdldE90aGVyTGFiZWwoKSB7DQorCQlpZiAob3RoZXJMYWJlbCAhPSBudWxsICYmIG90aGVyTGFiZWwuZUlzUHJveHkoKSkgew0KKwkJCUludGVybmFsRU9iamVjdCBvbGRPdGhlckxhYmVsID0gKEludGVybmFsRU9iamVjdClvdGhlckxhYmVsOw0KKwkJCW90aGVyTGFiZWwgPSAoTGFiZWwpZVJlc29sdmVQcm94eShvbGRPdGhlckxhYmVsKTsNCisJCQlpZiAob3RoZXJMYWJlbCAhPSBvbGRPdGhlckxhYmVsKSB7DQorCQkJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkNCisJCQkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5SRVNPTFZFLCBHcmFwaFBhY2thZ2UuRVhDSEFOR0VfX09USEVSX0xBQkVMLCBvbGRPdGhlckxhYmVsLCBvdGhlckxhYmVsKSk7DQorCQkJfQ0KKwkJfQ0KKwkJcmV0dXJuIG90aGVyTGFiZWw7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgTGFiZWwgYmFzaWNHZXRPdGhlckxhYmVsKCkgew0KKwkJcmV0dXJuIG90aGVyTGFiZWw7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgdm9pZCBzZXRPdGhlckxhYmVsKExhYmVsIG5ld090aGVyTGFiZWwpIHsNCisJCUxhYmVsIG9sZE90aGVyTGFiZWwgPSBvdGhlckxhYmVsOw0KKwkJb3RoZXJMYWJlbCA9IG5ld090aGVyTGFiZWw7DQorCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpDQorCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgR3JhcGhQYWNrYWdlLkVYQ0hBTkdFX19PVEhFUl9MQUJFTCwgb2xkT3RoZXJMYWJlbCwgb3RoZXJMYWJlbCkpOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIGRvdWJsZSBnZXRDb3VudCgpIHsNCisJCXJldHVybiBjb3VudDsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyB2b2lkIHNldENvdW50KGRvdWJsZSBuZXdDb3VudCkgew0KKwkJZG91YmxlIG9sZENvdW50ID0gY291bnQ7DQorCQljb3VudCA9IG5ld0NvdW50Ow0KKwkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQ0KKwkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIEdyYXBoUGFja2FnZS5FWENIQU5HRV9fQ09VTlQsIG9sZENvdW50LCBjb3VudCkpOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIEV4Y2hhbmdlVHlwZSBnZXRUeXBlKCkgew0KKwkJcmV0dXJuIHR5cGU7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgdm9pZCBzZXRUeXBlKEV4Y2hhbmdlVHlwZSBuZXdUeXBlKSB7DQorCQlFeGNoYW5nZVR5cGUgb2xkVHlwZSA9IHR5cGU7DQorCQl0eXBlID0gbmV3VHlwZSA9PSBudWxsID8gVFlQRV9FREVGQVVMVCA6IG5ld1R5cGU7DQorCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpDQorCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgR3JhcGhQYWNrYWdlLkVYQ0hBTkdFX19UWVBFLCBvbGRUeXBlLCB0eXBlKSk7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlAT3ZlcnJpZGUNCisJcHVibGljIE9iamVjdCBlR2V0KGludCBmZWF0dXJlSUQsIGJvb2xlYW4gcmVzb2x2ZSwgYm9vbGVhbiBjb3JlVHlwZSkgew0KKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsNCisJCQljYXNlIEdyYXBoUGFja2FnZS5FWENIQU5HRV9fT1RIRVJfTEFCRUw6DQorCQkJCWlmIChyZXNvbHZlKSByZXR1cm4gZ2V0T3RoZXJMYWJlbCgpOw0KKwkJCQlyZXR1cm4gYmFzaWNHZXRPdGhlckxhYmVsKCk7DQorCQkJY2FzZSBHcmFwaFBhY2thZ2UuRVhDSEFOR0VfX0NPVU5UOg0KKwkJCQlyZXR1cm4gZ2V0Q291bnQoKTsNCisJCQljYXNlIEdyYXBoUGFja2FnZS5FWENIQU5HRV9fVFlQRToNCisJCQkJcmV0dXJuIGdldFR5cGUoKTsNCisJCX0NCisJCXJldHVybiBzdXBlci5lR2V0KGZlYXR1cmVJRCwgcmVzb2x2ZSwgY29yZVR5cGUpOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJQE92ZXJyaWRlDQorCXB1YmxpYyB2b2lkIGVTZXQoaW50IGZlYXR1cmVJRCwgT2JqZWN0IG5ld1ZhbHVlKSB7DQorCQlzd2l0Y2ggKGZlYXR1cmVJRCkgew0KKwkJCWNhc2UgR3JhcGhQYWNrYWdlLkVYQ0hBTkdFX19PVEhFUl9MQUJFTDoNCisJCQkJc2V0T3RoZXJMYWJlbCgoTGFiZWwpbmV3VmFsdWUpOw0KKwkJCQlyZXR1cm47DQorCQkJY2FzZSBHcmFwaFBhY2thZ2UuRVhDSEFOR0VfX0NPVU5UOg0KKwkJCQlzZXRDb3VudCgoRG91YmxlKW5ld1ZhbHVlKTsNCisJCQkJcmV0dXJuOw0KKwkJCWNhc2UgR3JhcGhQYWNrYWdlLkVYQ0hBTkdFX19UWVBFOg0KKwkJCQlzZXRUeXBlKChFeGNoYW5nZVR5cGUpbmV3VmFsdWUpOw0KKwkJCQlyZXR1cm47DQorCQl9DQorCQlzdXBlci5lU2V0KGZlYXR1cmVJRCwgbmV3VmFsdWUpOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJQE92ZXJyaWRlDQorCXB1YmxpYyB2b2lkIGVVbnNldChpbnQgZmVhdHVyZUlEKSB7DQorCQlzd2l0Y2ggKGZlYXR1cmVJRCkgew0KKwkJCWNhc2UgR3JhcGhQYWNrYWdlLkVYQ0hBTkdFX19PVEhFUl9MQUJFTDoNCisJCQkJc2V0T3RoZXJMYWJlbCgoTGFiZWwpbnVsbCk7DQorCQkJCXJldHVybjsNCisJCQljYXNlIEdyYXBoUGFja2FnZS5FWENIQU5HRV9fQ09VTlQ6DQorCQkJCXNldENvdW50KENPVU5UX0VERUZBVUxUKTsNCisJCQkJcmV0dXJuOw0KKwkJCWNhc2UgR3JhcGhQYWNrYWdlLkVYQ0hBTkdFX19UWVBFOg0KKwkJCQlzZXRUeXBlKFRZUEVfRURFRkFVTFQpOw0KKwkJCQlyZXR1cm47DQorCQl9DQorCQlzdXBlci5lVW5zZXQoZmVhdHVyZUlEKTsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCUBPdmVycmlkZQ0KKwlwdWJsaWMgYm9vbGVhbiBlSXNTZXQoaW50IGZlYXR1cmVJRCkgew0KKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsNCisJCQljYXNlIEdyYXBoUGFja2FnZS5FWENIQU5HRV9fT1RIRVJfTEFCRUw6DQorCQkJCXJldHVybiBvdGhlckxhYmVsICE9IG51bGw7DQorCQkJY2FzZSBHcmFwaFBhY2thZ2UuRVhDSEFOR0VfX0NPVU5UOg0KKwkJCQlyZXR1cm4gY291bnQgIT0gQ09VTlRfRURFRkFVTFQ7DQorCQkJY2FzZSBHcmFwaFBhY2thZ2UuRVhDSEFOR0VfX1RZUEU6DQorCQkJCXJldHVybiB0eXBlICE9IFRZUEVfRURFRkFVTFQ7DQorCQl9DQorCQlyZXR1cm4gc3VwZXIuZUlzU2V0KGZlYXR1cmVJRCk7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlAT3ZlcnJpZGUNCisJcHVibGljIFN0cmluZyB0b1N0cmluZygpIHsNCisJCWlmIChlSXNQcm94eSgpKSByZXR1cm4gc3VwZXIudG9TdHJpbmcoKTsNCisNCisJCVN0cmluZ0J1ZmZlciByZXN1bHQgPSBuZXcgU3RyaW5nQnVmZmVyKHN1cGVyLnRvU3RyaW5nKCkpOw0KKwkJcmVzdWx0LmFwcGVuZCgiIChjb3VudDogIik7IC8vJE5PTi1OTFMtMSQNCisJCXJlc3VsdC5hcHBlbmQoY291bnQpOw0KKwkJcmVzdWx0LmFwcGVuZCgiLCB0eXBlOiAiKTsgLy8kTk9OLU5MUy0xJA0KKwkJcmVzdWx0LmFwcGVuZCh0eXBlKTsNCisJCXJlc3VsdC5hcHBlbmQoJyknKTsNCisJCXJldHVybiByZXN1bHQudG9TdHJpbmcoKTsNCisJfQ0KKw0KKwlwdWJsaWMgaW50IGNvbXBhcmVUbyhFeGNoYW5nZSBvKSB7DQorCQlTdHJpbmcgdGhpc0lkZW50aWZpZXI7DQorCQlTdHJpbmcgb3RoZXJJZGVudGlmaWVyOw0KKwkJDQorCQlpZiAoZ2V0VHlwZSgpID09IEV4Y2hhbmdlVHlwZS5CSVJUSFNfQU5EX0RFQVRIUykgew0KKwkJCXRoaXNJZGVudGlmaWVyID0gZ2V0VHlwZSgpLmdldE5hbWUoKTsgDQorCQl9IGVsc2Ugew0KKwkJCXRoaXNJZGVudGlmaWVyID0gZ2V0VHlwZSgpLmdldE5hbWUoKSArICIsIiArIGdldE90aGVyTGFiZWwoKS5nZXRVUkkoKTsNCisJCX0NCisJCQ0KKwkJaWYgKG8uZ2V0VHlwZSgpID09IEV4Y2hhbmdlVHlwZS5CSVJUSFNfQU5EX0RFQVRIUykgew0KKwkJCW90aGVySWRlbnRpZmllciA9IG8uZ2V0VHlwZSgpLmdldE5hbWUoKTsNCisJCX0gZWxzZSB7DQorCQkJb3RoZXJJZGVudGlmaWVyID0gby5nZXRUeXBlKCkuZ2V0TmFtZSgpICsgIiwiICsgby5nZXRPdGhlckxhYmVsKCkuZ2V0VVJJKCk7DQorCQl9DQorCQkNCisJCXJldHVybiB0aGlzSWRlbnRpZmllci5jb21wYXJlVG8ob3RoZXJJZGVudGlmaWVyKTsNCisJfQ0KKw0KK30gLy9FeGNoYW5nZUltcGwNCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoL2ltcGwvR3JhcGhGYWN0b3J5SW1wbC5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC9pbXBsL0dyYXBoRmFjdG9yeUltcGwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kODljNWNjCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC9pbXBsL0dyYXBoRmFjdG9yeUltcGwuamF2YQpAQCAtMCwwICsxLDMxNiBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguaW1wbDsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuIAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyAKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0IAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwgCisgKiAKKyAqIENvbnRyaWJ1dG9yczogCisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgCitpbXBvcnQgamF2YS51dGlsLk1hcDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5VUkk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzczsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRURhdGFUeXBlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuaW1wbC5FRmFjdG9yeUltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnBsdWdpbi5FY29yZVBsdWdpbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLklkZW50aWZpYWJsZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguRWRnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguRXhjaGFuZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkV4Y2hhbmdlVHlwZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguR3JhcGg7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkdyYXBoRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguR3JhcGhQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5MYWJlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguTm9kZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguTm9kZUxhYmVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5TaW1wbGVHcmFwaFBhcnRpdGlvbmVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5VbnJlc29sdmVkSWRlbnRpZmlhYmxlOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiBBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgbW9kZWwgPGI+RmFjdG9yeTwvYj4uCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIEdyYXBoRmFjdG9yeUltcGwgZXh0ZW5kcyBFRmFjdG9yeUltcGwgaW1wbGVtZW50cyBHcmFwaEZhY3RvcnkgeworCS8qKgorCSAqIENyZWF0ZXMgdGhlIGRlZmF1bHQgZmFjdG9yeSBpbXBsZW1lbnRhdGlvbi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgc3RhdGljIEdyYXBoRmFjdG9yeSBpbml0KCkgeworCQl0cnkgeworCQkJR3JhcGhGYWN0b3J5IHRoZUdyYXBoRmFjdG9yeSA9IChHcmFwaEZhY3RvcnkpRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RUZhY3RvcnkoImh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIik7IC8vJE5PTi1OTFMtMSQgCisJCQlpZiAodGhlR3JhcGhGYWN0b3J5ICE9IG51bGwpIHsKKwkJCQlyZXR1cm4gdGhlR3JhcGhGYWN0b3J5OworCQkJfQorCQl9CisJCWNhdGNoIChFeGNlcHRpb24gZXhjZXB0aW9uKSB7CisJCQlFY29yZVBsdWdpbi5JTlNUQU5DRS5sb2coZXhjZXB0aW9uKTsKKwkJfQorCQlyZXR1cm4gbmV3IEdyYXBoRmFjdG9yeUltcGwoKTsKKwl9CisKKwkvKioKKwkgKiBDcmVhdGVzIGFuIGluc3RhbmNlIG9mIHRoZSBmYWN0b3J5LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBHcmFwaEZhY3RvcnlJbXBsKCkgeworCQlzdXBlcigpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBFT2JqZWN0IGNyZWF0ZShFQ2xhc3MgZUNsYXNzKSB7CisJCXN3aXRjaCAoZUNsYXNzLmdldENsYXNzaWZpZXJJRCgpKSB7CisJCQljYXNlIEdyYXBoUGFja2FnZS5FREdFOiByZXR1cm4gY3JlYXRlRWRnZSgpOworCQkJY2FzZSBHcmFwaFBhY2thZ2UuR1JBUEg6IHJldHVybiBjcmVhdGVHcmFwaCgpOworCQkJY2FzZSBHcmFwaFBhY2thZ2UuTk9ERTogcmV0dXJuIGNyZWF0ZU5vZGUoKTsKKwkJCWNhc2UgR3JhcGhQYWNrYWdlLlVOUkVTT0xWRURfSURFTlRJRklBQkxFOiByZXR1cm4gY3JlYXRlVW5yZXNvbHZlZElkZW50aWZpYWJsZSgpOworCQkJY2FzZSBHcmFwaFBhY2thZ2UuVVJJX1RPX0lERU5USUZJQUJMRV9NQVBfRU5UUlk6IHJldHVybiAoRU9iamVjdCljcmVhdGVVUklUb0lkZW50aWZpYWJsZU1hcEVudHJ5KCk7CisJCQljYXNlIEdyYXBoUGFja2FnZS5VUklfVE9fRURHRV9NQVBfRU5UUlk6IHJldHVybiAoRU9iamVjdCljcmVhdGVVUklUb0VkZ2VNYXBFbnRyeSgpOworCQkJY2FzZSBHcmFwaFBhY2thZ2UuVVJJX1RPX05PREVfTUFQX0VOVFJZOiByZXR1cm4gKEVPYmplY3QpY3JlYXRlVVJJVG9Ob2RlTWFwRW50cnkoKTsKKwkJCWNhc2UgR3JhcGhQYWNrYWdlLlVSSV9UT19MQUJFTF9NQVBfRU5UUlk6IHJldHVybiAoRU9iamVjdCljcmVhdGVVUklUb0xhYmVsTWFwRW50cnkoKTsKKwkJCWNhc2UgR3JhcGhQYWNrYWdlLlVSSV9UT19OT0RFX0xBQkVMX01BUF9FTlRSWTogcmV0dXJuIChFT2JqZWN0KWNyZWF0ZVVSSVRvTm9kZUxhYmVsTWFwRW50cnkoKTsKKwkJCWNhc2UgR3JhcGhQYWNrYWdlLlNJTVBMRV9HUkFQSF9QQVJUSVRJT05FUjogcmV0dXJuIGNyZWF0ZVNpbXBsZUdyYXBoUGFydGl0aW9uZXIoKTsKKwkJCWNhc2UgR3JhcGhQYWNrYWdlLkVYQ0hBTkdFOiByZXR1cm4gY3JlYXRlRXhjaGFuZ2UoKTsKKwkJCWRlZmF1bHQ6CisJCQkJdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiVGhlIGNsYXNzICciICsgZUNsYXNzLmdldE5hbWUoKSArICInIGlzIG5vdCBhIHZhbGlkIGNsYXNzaWZpZXIiKTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCisJCX0KKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgT2JqZWN0IGNyZWF0ZUZyb21TdHJpbmcoRURhdGFUeXBlIGVEYXRhVHlwZSwgU3RyaW5nIGluaXRpYWxWYWx1ZSkgeworCQlzd2l0Y2ggKGVEYXRhVHlwZS5nZXRDbGFzc2lmaWVySUQoKSkgeworCQkJY2FzZSBHcmFwaFBhY2thZ2UuRVhDSEFOR0VfVFlQRToKKwkJCQlyZXR1cm4gY3JlYXRlRXhjaGFuZ2VUeXBlRnJvbVN0cmluZyhlRGF0YVR5cGUsIGluaXRpYWxWYWx1ZSk7CisJCQljYXNlIEdyYXBoUGFja2FnZS5JTExFR0FMX0FSR1VNRU5UX0VYQ0VQVElPTjoKKwkJCQlyZXR1cm4gY3JlYXRlSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uRnJvbVN0cmluZyhlRGF0YVR5cGUsIGluaXRpYWxWYWx1ZSk7CisJCQlkZWZhdWx0OgorCQkJCXRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIlRoZSBkYXRhdHlwZSAnIiArIGVEYXRhVHlwZS5nZXROYW1lKCkgKyAiJyBpcyBub3QgYSB2YWxpZCBjbGFzc2lmaWVyIik7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAorCQl9CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIFN0cmluZyBjb252ZXJ0VG9TdHJpbmcoRURhdGFUeXBlIGVEYXRhVHlwZSwgT2JqZWN0IGluc3RhbmNlVmFsdWUpIHsKKwkJc3dpdGNoIChlRGF0YVR5cGUuZ2V0Q2xhc3NpZmllcklEKCkpIHsKKwkJCWNhc2UgR3JhcGhQYWNrYWdlLkVYQ0hBTkdFX1RZUEU6CisJCQkJcmV0dXJuIGNvbnZlcnRFeGNoYW5nZVR5cGVUb1N0cmluZyhlRGF0YVR5cGUsIGluc3RhbmNlVmFsdWUpOworCQkJY2FzZSBHcmFwaFBhY2thZ2UuSUxMRUdBTF9BUkdVTUVOVF9FWENFUFRJT046CisJCQkJcmV0dXJuIGNvbnZlcnRJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb25Ub1N0cmluZyhlRGF0YVR5cGUsIGluc3RhbmNlVmFsdWUpOworCQkJZGVmYXVsdDoKKwkJCQl0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJUaGUgZGF0YXR5cGUgJyIgKyBlRGF0YVR5cGUuZ2V0TmFtZSgpICsgIicgaXMgbm90IGEgdmFsaWQgY2xhc3NpZmllciIpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKKwkJfQorCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFZGdlIGNyZWF0ZUVkZ2UoKSB7CisJCUVkZ2VJbXBsIGVkZ2UgPSBuZXcgRWRnZUltcGwoKTsKKwkJcmV0dXJuIGVkZ2U7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEdyYXBoIGNyZWF0ZUdyYXBoKCkgeworCQlHcmFwaEltcGwgZ3JhcGggPSBuZXcgR3JhcGhJbXBsKCk7CisJCXJldHVybiBncmFwaDsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgTm9kZSBjcmVhdGVOb2RlKCkgeworCQlOb2RlSW1wbCBub2RlID0gbmV3IE5vZGVJbXBsKCk7CisJCXJldHVybiBub2RlOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBVbnJlc29sdmVkSWRlbnRpZmlhYmxlIGNyZWF0ZVVucmVzb2x2ZWRJZGVudGlmaWFibGUoKSB7CisJCVVucmVzb2x2ZWRJZGVudGlmaWFibGVJbXBsIHVucmVzb2x2ZWRJZGVudGlmaWFibGUgPSBuZXcgVW5yZXNvbHZlZElkZW50aWZpYWJsZUltcGwoKTsKKwkJcmV0dXJuIHVucmVzb2x2ZWRJZGVudGlmaWFibGU7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIE1hcC5FbnRyeTxVUkksIElkZW50aWZpYWJsZT4gY3JlYXRlVVJJVG9JZGVudGlmaWFibGVNYXBFbnRyeSgpIHsKKwkJVVJJVG9JZGVudGlmaWFibGVNYXBFbnRyeUltcGwgdXJpVG9JZGVudGlmaWFibGVNYXBFbnRyeSA9IG5ldyBVUklUb0lkZW50aWZpYWJsZU1hcEVudHJ5SW1wbCgpOworCQlyZXR1cm4gdXJpVG9JZGVudGlmaWFibGVNYXBFbnRyeTsKKwl9CisKKwkJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIE1hcC5FbnRyeTxVUkksIEVkZ2U+IGNyZWF0ZVVSSVRvRWRnZU1hcEVudHJ5KCkgeworCQlVUklUb0VkZ2VNYXBFbnRyeUltcGwgdXJpVG9FZGdlTWFwRW50cnkgPSBuZXcgVVJJVG9FZGdlTWFwRW50cnlJbXBsKCk7CisJCXJldHVybiB1cmlUb0VkZ2VNYXBFbnRyeTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgTWFwLkVudHJ5PFVSSSwgTm9kZT4gY3JlYXRlVVJJVG9Ob2RlTWFwRW50cnkoKSB7CisJCVVSSVRvTm9kZU1hcEVudHJ5SW1wbCB1cmlUb05vZGVNYXBFbnRyeSA9IG5ldyBVUklUb05vZGVNYXBFbnRyeUltcGwoKTsKKwkJcmV0dXJuIHVyaVRvTm9kZU1hcEVudHJ5OworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBNYXAuRW50cnk8VVJJLCBMYWJlbD4gY3JlYXRlVVJJVG9MYWJlbE1hcEVudHJ5KCkgeworCQlVUklUb0xhYmVsTWFwRW50cnlJbXBsIHVyaVRvTGFiZWxNYXBFbnRyeSA9IG5ldyBVUklUb0xhYmVsTWFwRW50cnlJbXBsKCk7CisJCXJldHVybiB1cmlUb0xhYmVsTWFwRW50cnk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIE1hcC5FbnRyeTxVUkksIE5vZGVMYWJlbD4gY3JlYXRlVVJJVG9Ob2RlTGFiZWxNYXBFbnRyeSgpIHsKKwkJVVJJVG9Ob2RlTGFiZWxNYXBFbnRyeUltcGwgdXJpVG9Ob2RlTGFiZWxNYXBFbnRyeSA9IG5ldyBVUklUb05vZGVMYWJlbE1hcEVudHJ5SW1wbCgpOworCQlyZXR1cm4gdXJpVG9Ob2RlTGFiZWxNYXBFbnRyeTsKKwl9CisKKwkJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFNpbXBsZUdyYXBoUGFydGl0aW9uZXIgY3JlYXRlU2ltcGxlR3JhcGhQYXJ0aXRpb25lcigpIHsKKwkJU2ltcGxlR3JhcGhQYXJ0aXRpb25lckltcGwgc2ltcGxlR3JhcGhQYXJ0aXRpb25lciA9IG5ldyBTaW1wbGVHcmFwaFBhcnRpdGlvbmVySW1wbCgpOworCQlyZXR1cm4gc2ltcGxlR3JhcGhQYXJ0aXRpb25lcjsKKwl9CisKKwkJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEV4Y2hhbmdlIGNyZWF0ZUV4Y2hhbmdlKCkgeworCQlFeGNoYW5nZUltcGwgZXhjaGFuZ2UgPSBuZXcgRXhjaGFuZ2VJbXBsKCk7CisJCXJldHVybiBleGNoYW5nZTsKKwl9CisKKwkJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEV4Y2hhbmdlVHlwZSBjcmVhdGVFeGNoYW5nZVR5cGVGcm9tU3RyaW5nKEVEYXRhVHlwZSBlRGF0YVR5cGUsIFN0cmluZyBpbml0aWFsVmFsdWUpIHsKKwkJRXhjaGFuZ2VUeXBlIHJlc3VsdCA9IEV4Y2hhbmdlVHlwZS5nZXQoaW5pdGlhbFZhbHVlKTsKKwkJaWYgKHJlc3VsdCA9PSBudWxsKSB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJUaGUgdmFsdWUgJyIgKyBpbml0aWFsVmFsdWUgKyAiJyBpcyBub3QgYSB2YWxpZCBlbnVtZXJhdG9yIG9mICciICsgZURhdGFUeXBlLmdldE5hbWUoKSArICInIik7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJCAvLyROT04tTkxTLTMkCisJCXJldHVybiByZXN1bHQ7CisJfQorCisJCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBTdHJpbmcgY29udmVydEV4Y2hhbmdlVHlwZVRvU3RyaW5nKEVEYXRhVHlwZSBlRGF0YVR5cGUsIE9iamVjdCBpbnN0YW5jZVZhbHVlKSB7CisJCXJldHVybiBpbnN0YW5jZVZhbHVlID09IG51bGwgPyBudWxsIDogaW5zdGFuY2VWYWx1ZS50b1N0cmluZygpOworCX0KKworCQkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCXB1YmxpYyBVUkkgY3JlYXRlVVJJRnJvbVN0cmluZyhFRGF0YVR5cGUgZURhdGFUeXBlLCBTdHJpbmcgaW5pdGlhbFZhbHVlKSB7CisJCXJldHVybiBVUkkuY3JlYXRlVVJJKGluaXRpYWxWYWx1ZSk7CisJfSAvLyBjcmVhdGVVUklGcm9tU3RyaW5nCisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCXB1YmxpYyBTdHJpbmcgY29udmVydFVSSVRvU3RyaW5nKEVEYXRhVHlwZSBlRGF0YVR5cGUsIE9iamVjdCBpbnN0YW5jZVZhbHVlKSB7CisJCXJldHVybiBpbnN0YW5jZVZhbHVlLnRvU3RyaW5nKCk7CisJfSAvLyBjb252ZXJ0VVJJVG9TdHJpbmcKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24gY3JlYXRlSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uRnJvbVN0cmluZyhFRGF0YVR5cGUgZURhdGFUeXBlLCBTdHJpbmcgaW5pdGlhbFZhbHVlKSB7CisJCXJldHVybiAoSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKXN1cGVyLmNyZWF0ZUZyb21TdHJpbmcoZURhdGFUeXBlLCBpbml0aWFsVmFsdWUpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBTdHJpbmcgY29udmVydElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvblRvU3RyaW5nKEVEYXRhVHlwZSBlRGF0YVR5cGUsIE9iamVjdCBpbnN0YW5jZVZhbHVlKSB7CisJCXJldHVybiBzdXBlci5jb252ZXJ0VG9TdHJpbmcoZURhdGFUeXBlLCBpbnN0YW5jZVZhbHVlKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgR3JhcGhQYWNrYWdlIGdldEdyYXBoUGFja2FnZSgpIHsKKwkJcmV0dXJuIChHcmFwaFBhY2thZ2UpZ2V0RVBhY2thZ2UoKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBkZXByZWNhdGVkCisJICogQGdlbmVyYXRlZAorCSAqLworCUBEZXByZWNhdGVkCisJcHVibGljIHN0YXRpYyBHcmFwaFBhY2thZ2UgZ2V0UGFja2FnZSgpIHsKKwkJcmV0dXJuIEdyYXBoUGFja2FnZS5lSU5TVEFOQ0U7CisJfQorCit9IC8vR3JhcGhGYWN0b3J5SW1wbApkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC9pbXBsL0dyYXBoSW1wbC5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC9pbXBsL0dyYXBoSW1wbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc0MDBhYzkKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoL2ltcGwvR3JhcGhJbXBsLmphdmEKQEAgLTAsMCArMSw5NjkgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmltcGw7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIAorICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiAKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdCAKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sIAorICogCisgKiBDb250cmlidXRvcnM6IAorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiAKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworIAoraW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOworaW1wb3J0IGphdmEudXRpbC5Db21wYXJhdG9yOworaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb25DaGFpbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuQmFzaWNFTGlzdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuRUNvbGxlY3Rpb25zOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5FTGlzdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuRU1hcDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuVVJJOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVTdHJ1Y3R1cmFsRmVhdHVyZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuSW50ZXJuYWxFT2JqZWN0OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5pbXBsLkVOb3RpZmljYXRpb25JbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS51dGlsLkVPYmplY3RDb250YWlubWVudEVMaXN0OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS51dGlsLkVPYmplY3RDb250YWlubWVudFdpdGhJbnZlcnNlRUxpc3Q7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnV0aWwuRU9iamVjdFJlc29sdmluZ0VMaXN0OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS51dGlsLkVjb3JlRU1hcDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUudXRpbC5FY29yZVV0aWw7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnV0aWwuSW50ZXJuYWxFTGlzdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuQ29yZVBsdWdpbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuU1RFTVVSSTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLklkZW50aWZpYWJsZUZpbHRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLmltcGwuSWRlbnRpZmlhYmxlRmlsdGVySW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLmltcGwuSWRlbnRpZmlhYmxlSW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguRHluYW1pY0xhYmVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5FZGdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5FZGdlTGFiZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkdyYXBoOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5HcmFwaFBhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkxhYmVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5Ob2RlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5Ob2RlTGFiZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLlVucmVzb2x2ZWRJZGVudGlmaWFibGU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLkRlY29yYXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuTW9kZWxQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5TVEVNVGltZTsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiBBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+R3JhcGg8L2I+PC9lbT4nLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiA8cD4KKyAqIFRoZSBmb2xsb3dpbmcgZmVhdHVyZXMgYXJlIGltcGxlbWVudGVkOgorICogPHVsPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5pbXBsLkdyYXBoSW1wbCNnZXRFZGdlcyA8ZW0+RWRnZXM8L2VtPn08L2xpPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5pbXBsLkdyYXBoSW1wbCNnZXROb2RlcyA8ZW0+Tm9kZXM8L2VtPn08L2xpPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5pbXBsLkdyYXBoSW1wbCNnZXRHcmFwaExhYmVscyA8ZW0+R3JhcGggTGFiZWxzPC9lbT59PC9saT4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguaW1wbC5HcmFwaEltcGwjZ2V0Tm9kZUxhYmVscyA8ZW0+Tm9kZSBMYWJlbHM8L2VtPn08L2xpPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5pbXBsLkdyYXBoSW1wbCNnZXREeW5hbWljTGFiZWxzIDxlbT5EeW5hbWljIExhYmVsczwvZW0+fTwvbGk+CisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmltcGwuR3JhcGhJbXBsI2dldE51bUVkZ2VzIDxlbT5OdW0gRWRnZXM8L2VtPn08L2xpPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5pbXBsLkdyYXBoSW1wbCNnZXROdW1Ob2RlcyA8ZW0+TnVtIE5vZGVzPC9lbT59PC9saT4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguaW1wbC5HcmFwaEltcGwjZ2V0TnVtR3JhcGhMYWJlbHMgPGVtPk51bSBHcmFwaCBMYWJlbHM8L2VtPn08L2xpPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5pbXBsLkdyYXBoSW1wbCNnZXROdW1Ob2RlTGFiZWxzIDxlbT5OdW0gTm9kZSBMYWJlbHM8L2VtPn08L2xpPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5pbXBsLkdyYXBoSW1wbCNnZXROdW1EeW5hbWljTGFiZWxzIDxlbT5OdW0gRHluYW1pYyBMYWJlbHM8L2VtPn08L2xpPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5pbXBsLkdyYXBoSW1wbCNnZXRVbnJlc29sdmVkSWRlbnRpZmlhYmxlcyA8ZW0+VW5yZXNvbHZlZCBJZGVudGlmaWFibGVzPC9lbT59PC9saT4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguaW1wbC5HcmFwaEltcGwjZ2V0RGVjb3JhdG9ycyA8ZW0+RGVjb3JhdG9yczwvZW0+fTwvbGk+CisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmltcGwuR3JhcGhJbXBsI2dldFRpbWUgPGVtPlRpbWU8L2VtPn08L2xpPgorICogPC91bD4KKyAqIDwvcD4KKyAqCisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBHcmFwaEltcGwgZXh0ZW5kcyBJZGVudGlmaWFibGVJbXBsIGltcGxlbWVudHMgR3JhcGggeworCQorCQorCS8qKgorCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldEVkZ2VzKCkgPGVtPkVkZ2VzPC9lbT59JyBtYXAuIDwhLS0KKwkgKiBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogCisJICogQHNlZSAjZ2V0RWRnZXMoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBFTWFwPFVSSSwgRWRnZT4gZWRnZXM7CisKKwkvKioKKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXROb2RlcygpIDxlbT5Ob2RlczwvZW0+fScgbWFwLiA8IS0tCisJICogYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBzZWUgI2dldE5vZGVzKCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgRU1hcDxVUkksIE5vZGU+IG5vZGVzOworCisJLyoqCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0R3JhcGhMYWJlbHMoKSA8ZW0+R3JhcGggTGFiZWxzPC9lbT59JyBtYXAuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZ2V0R3JhcGhMYWJlbHMoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBFTWFwPFVSSSwgTGFiZWw+IGdyYXBoTGFiZWxzOworCisJLyoqCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0Tm9kZUxhYmVscygpIDxlbT5Ob2RlIExhYmVsczwvZW0+fScgbWFwLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI2dldE5vZGVMYWJlbHMoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBFTWFwPFVSSSwgTm9kZUxhYmVsPiBub2RlTGFiZWxzOworCisJLyoqCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0RHluYW1pY0xhYmVscygpIDxlbT5EeW5hbWljIExhYmVsczwvZW0+fScgcmVmZXJlbmNlIGxpc3QuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZ2V0RHluYW1pY0xhYmVscygpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIEVMaXN0PER5bmFtaWNMYWJlbD4gZHluYW1pY0xhYmVsczsKKworCS8qKgorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXROdW1FZGdlcygpIDxlbT5OdW0gRWRnZXM8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNnZXROdW1FZGdlcygpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBpbnQgTlVNX0VER0VTX0VERUZBVUxUID0gMDsKKworCS8qKgorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXROdW1Ob2RlcygpIDxlbT5OdW0gTm9kZXM8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNnZXROdW1Ob2RlcygpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBpbnQgTlVNX05PREVTX0VERUZBVUxUID0gMDsKKworCS8qKgorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXROdW1HcmFwaExhYmVscygpIDxlbT5OdW0gR3JhcGggTGFiZWxzPC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZ2V0TnVtR3JhcGhMYWJlbHMoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgaW50IE5VTV9HUkFQSF9MQUJFTFNfRURFRkFVTFQgPSAwOworCisJLyoqCisJICogVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldE51bU5vZGVMYWJlbHMoKSA8ZW0+TnVtIE5vZGUgTGFiZWxzPC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZ2V0TnVtTm9kZUxhYmVscygpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBpbnQgTlVNX05PREVfTEFCRUxTX0VERUZBVUxUID0gMDsKKworCS8qKgorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXROdW1EeW5hbWljTGFiZWxzKCkgPGVtPk51bSBEeW5hbWljIExhYmVsczwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI2dldE51bUR5bmFtaWNMYWJlbHMoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgaW50IE5VTV9EWU5BTUlDX0xBQkVMU19FREVGQVVMVCA9IDA7CisKKwkvKioKKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRVbnJlc29sdmVkSWRlbnRpZmlhYmxlcygpIDxlbT5VbnJlc29sdmVkIElkZW50aWZpYWJsZXM8L2VtPn0nIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI2dldFVucmVzb2x2ZWRJZGVudGlmaWFibGVzKCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgRUxpc3Q8VW5yZXNvbHZlZElkZW50aWZpYWJsZT4gdW5yZXNvbHZlZElkZW50aWZpYWJsZXM7CisKKwkvKioKKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXREZWNvcmF0b3JzKCkgPGVtPkRlY29yYXRvcnM8L2VtPn0nIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZ2V0RGVjb3JhdG9ycygpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIEVMaXN0PERlY29yYXRvcj4gZGVjb3JhdG9yczsKKworCS8qKgorCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldFRpbWUoKSA8ZW0+VGltZTwvZW0+fScgY29udGFpbm1lbnQgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZ2V0VGltZSgpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIFNURU1UaW1lIHRpbWU7CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCXByb3RlY3RlZCBHcmFwaEltcGwoKSB7CisJCXN1cGVyKCk7CisJCXNldFVSSShTVEVNVVJJLmNyZWF0ZVVSSShVUklfVFlQRV9HUkFQSF9TRUdNRU5UICsgIi8iCisJCQkJKyBTVEVNVVJJLmdlbmVyYXRlVW5pcXVlUGFydCgpKSk7CisJCXNldFR5cGVVUkkoU1RFTVVSSS5HUkFQSF9UWVBFX1VSSSk7CisJfSAvLyBHcmFwaEltcGwKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgRUNsYXNzIGVTdGF0aWNDbGFzcygpIHsKKwkJcmV0dXJuIEdyYXBoUGFja2FnZS5MaXRlcmFscy5HUkFQSDsKKwl9CisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29tbW9uLmltcGwuSWRlbnRpZmlhYmxlSW1wbCNzZXRVUkkob3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlVSSSkKKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIHNldFVSSShVUkkgbmV3VVJJKSB7CisJCXN1cGVyLnNldFVSSShuZXdVUkkpOworCQkvLyBOb3cgZ28gdGhyb3VnaCBhbGwgdGhlIGdyYXBoIGxhYmVscyBhbmQgdXBkYXRlIHRoZW4gdG8gcmVmZXJlbmNlIHRoZQorCQkvLyBuZXcgVVJJCisJCWZvciAoZmluYWwgSXRlcmF0b3I8TGFiZWw+IGxhYmVsSXRlciA9IGdldEdyYXBoTGFiZWxzKCkudmFsdWVzKCkuaXRlcmF0b3IoKTsgbGFiZWxJdGVyCisJCQkJLmhhc05leHQoKTspIHsKKwkJCWZpbmFsIExhYmVsIGxhYmVsID0gbGFiZWxJdGVyLm5leHQoKTsKKwkJCWxhYmVsLnNldFVSSU9mSWRlbnRpZmlhYmxlVG9CZUxhYmVsZWQobmV3VVJJKTsKKwkJfSAvLyBmb3IKKwl9IC8vIHNldFVSSQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFTWFwPFVSSSwgRWRnZT4gZ2V0RWRnZXMoKSB7CisJCWlmIChlZGdlcyA9PSBudWxsKSB7CisJCQllZGdlcyA9IG5ldyBFY29yZUVNYXA8VVJJLEVkZ2U+KEdyYXBoUGFja2FnZS5MaXRlcmFscy5VUklfVE9fRURHRV9NQVBfRU5UUlksIFVSSVRvRWRnZU1hcEVudHJ5SW1wbC5jbGFzcywgdGhpcywgR3JhcGhQYWNrYWdlLkdSQVBIX19FREdFUyk7CisJCX0KKwkJcmV0dXJuIGVkZ2VzOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRU1hcDxVUkksIE5vZGU+IGdldE5vZGVzKCkgeworCQlpZiAobm9kZXMgPT0gbnVsbCkgeworCQkJbm9kZXMgPSBuZXcgRWNvcmVFTWFwPFVSSSxOb2RlPihHcmFwaFBhY2thZ2UuTGl0ZXJhbHMuVVJJX1RPX05PREVfTUFQX0VOVFJZLCBVUklUb05vZGVNYXBFbnRyeUltcGwuY2xhc3MsIHRoaXMsIEdyYXBoUGFja2FnZS5HUkFQSF9fTk9ERVMpOworCQl9CisJCXJldHVybiBub2RlczsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVMaXN0PER5bmFtaWNMYWJlbD4gZ2V0RHluYW1pY0xhYmVscygpIHsKKwkJaWYgKGR5bmFtaWNMYWJlbHMgPT0gbnVsbCkgeworCQkJZHluYW1pY0xhYmVscyA9IG5ldyBFT2JqZWN0UmVzb2x2aW5nRUxpc3Q8RHluYW1pY0xhYmVsPihEeW5hbWljTGFiZWwuY2xhc3MsIHRoaXMsIEdyYXBoUGFja2FnZS5HUkFQSF9fRFlOQU1JQ19MQUJFTFMpOworCQl9CisJCXJldHVybiBkeW5hbWljTGFiZWxzOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRU1hcDxVUkksIExhYmVsPiBnZXRHcmFwaExhYmVscygpIHsKKwkJaWYgKGdyYXBoTGFiZWxzID09IG51bGwpIHsKKwkJCWdyYXBoTGFiZWxzID0gbmV3IEVjb3JlRU1hcDxVUkksTGFiZWw+KEdyYXBoUGFja2FnZS5MaXRlcmFscy5VUklfVE9fTEFCRUxfTUFQX0VOVFJZLCBVUklUb0xhYmVsTWFwRW50cnlJbXBsLmNsYXNzLCB0aGlzLCBHcmFwaFBhY2thZ2UuR1JBUEhfX0dSQVBIX0xBQkVMUyk7CisJCX0KKwkJcmV0dXJuIGdyYXBoTGFiZWxzOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUxpc3Q8VW5yZXNvbHZlZElkZW50aWZpYWJsZT4gZ2V0VW5yZXNvbHZlZElkZW50aWZpYWJsZXMoKSB7CisJCWlmICh1bnJlc29sdmVkSWRlbnRpZmlhYmxlcyA9PSBudWxsKSB7CisJCQl1bnJlc29sdmVkSWRlbnRpZmlhYmxlcyA9IG5ldyBFT2JqZWN0Q29udGFpbm1lbnRFTGlzdDxVbnJlc29sdmVkSWRlbnRpZmlhYmxlPihVbnJlc29sdmVkSWRlbnRpZmlhYmxlLmNsYXNzLCB0aGlzLCBHcmFwaFBhY2thZ2UuR1JBUEhfX1VOUkVTT0xWRURfSURFTlRJRklBQkxFUyk7CisJCX0KKwkJcmV0dXJuIHVucmVzb2x2ZWRJZGVudGlmaWFibGVzOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFTGlzdDxEZWNvcmF0b3I+IGdldERlY29yYXRvcnMoKSB7CisJCWlmIChkZWNvcmF0b3JzID09IG51bGwpIHsKKwkJCWRlY29yYXRvcnMgPSBuZXcgRU9iamVjdENvbnRhaW5tZW50V2l0aEludmVyc2VFTGlzdDxEZWNvcmF0b3I+KERlY29yYXRvci5jbGFzcywgdGhpcywgR3JhcGhQYWNrYWdlLkdSQVBIX19ERUNPUkFUT1JTLCBNb2RlbFBhY2thZ2UuREVDT1JBVE9SX19HUkFQSCk7CisJCX0KKwkJcmV0dXJuIGRlY29yYXRvcnM7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFNURU1UaW1lIGdldFRpbWUoKSB7CisJCXJldHVybiB0aW1lOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBOb3RpZmljYXRpb25DaGFpbiBiYXNpY1NldFRpbWUoU1RFTVRpbWUgbmV3VGltZSwgTm90aWZpY2F0aW9uQ2hhaW4gbXNncykgeworCQlTVEVNVGltZSBvbGRUaW1lID0gdGltZTsKKwkJdGltZSA9IG5ld1RpbWU7CisJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkgeworCQkJRU5vdGlmaWNhdGlvbkltcGwgbm90aWZpY2F0aW9uID0gbmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIEdyYXBoUGFja2FnZS5HUkFQSF9fVElNRSwgb2xkVGltZSwgbmV3VGltZSk7CisJCQlpZiAobXNncyA9PSBudWxsKSBtc2dzID0gbm90aWZpY2F0aW9uOyBlbHNlIG1zZ3MuYWRkKG5vdGlmaWNhdGlvbik7CisJCX0KKwkJcmV0dXJuIG1zZ3M7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgc2V0VGltZShTVEVNVGltZSBuZXdUaW1lKSB7CisJCWlmIChuZXdUaW1lICE9IHRpbWUpIHsKKwkJCU5vdGlmaWNhdGlvbkNoYWluIG1zZ3MgPSBudWxsOworCQkJaWYgKHRpbWUgIT0gbnVsbCkKKwkJCQltc2dzID0gKChJbnRlcm5hbEVPYmplY3QpdGltZSkuZUludmVyc2VSZW1vdmUodGhpcywgRU9QUE9TSVRFX0ZFQVRVUkVfQkFTRSAtIEdyYXBoUGFja2FnZS5HUkFQSF9fVElNRSwgbnVsbCwgbXNncyk7CisJCQlpZiAobmV3VGltZSAhPSBudWxsKQorCQkJCW1zZ3MgPSAoKEludGVybmFsRU9iamVjdCluZXdUaW1lKS5lSW52ZXJzZUFkZCh0aGlzLCBFT1BQT1NJVEVfRkVBVFVSRV9CQVNFIC0gR3JhcGhQYWNrYWdlLkdSQVBIX19USU1FLCBudWxsLCBtc2dzKTsKKwkJCW1zZ3MgPSBiYXNpY1NldFRpbWUobmV3VGltZSwgbXNncyk7CisJCQlpZiAobXNncyAhPSBudWxsKSBtc2dzLmRpc3BhdGNoKCk7CisJCX0KKwkJZWxzZSBpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpCisJCQllTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBHcmFwaFBhY2thZ2UuR1JBUEhfX1RJTUUsIG5ld1RpbWUsIG5ld1RpbWUpKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIFJldHVybiBhbGwgb2YgdGhlIE5vZGUgTGFiZWxzIGluIHRoZSBncmFwaCB0aGF0IGhhdmUgYSBwYXJ0aWN1bGFyIHR5cGUKKwkgKiBVUkkuCisJICogCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogCisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlwdWJsaWMgRUxpc3Q8Tm9kZUxhYmVsPiBnZXROb2RlTGFiZWxzQnlUeXBlVVJJKFVSSSB0eXBlVVJJKSB7CisJCS8vIFdlIGNvdWxkIHBlcmZvcm0gdGhpcyBmdW5jdGlvbiBpbiBhIG51bWJlciBvZiB3YXlzLiBXZSBjb3VsZCwgZm9yCisJCS8vIGluc3RhbmNlLCBjcmVhdGUgYSBNYXAgYmV0d2VlbiB0aGUgdHlwZSBVUkkncyBhbmQgdGhlIGluc3RhbmNlcywKKwkJLy8gaG93ZXZlciBpZiB3ZSBkbyB0aGF0IHRoZW4gd2UgZG8gdHdvIHRoaW5nczogMSkgbWFrZSBtYW5hZ2VtZW50IG9mCisJCS8vIHRoZSBjb2xsZWN0aW9uIG9mIGluc3RhbmNlcyBtb3JlIGNvbXBsaWNhdGVkICh3ZSBoYXZlIHRvIGFkZCB0aGVtIHRvCisJCS8vIHR3byBtYXBzKSwgYW5kLCAyKSB3ZSAiYmxvYXQiIHRoZSBzZXJpYWxpemF0aW9uIGFzIHdlIG5vdyBiYXNpY2FsbHkKKwkJLy8gZG91YmxlIHRoZSBzaXplIG9mIHRoZSBzZXJpYWxpemVkIGNvbGxlY3Rpb24ocykuCisJCS8vIEdpdmVuIHRoYXQgdGhpcyBtZXRob2QgaXMgY2FsbGVkIGluZnJlcXVlbnRseSBpdCdzIHByb2JhYmx5IGJldHRlciB0bworCQkvLyBqdXN0IGRvIGEgImR1bWIiIHNlcXVlbnRpYWwgc2NhbiBvZiB0aGUgaW5zdGFuY2VzIGFuZCBtYXRjaCB0aGVtLgorCQkvLyBXZSBjYW4gYWx3YXlzIGNoYW5nZSBvdXQgbWluZHMgbGF0ZXIuCisKKwkJZmluYWwgRUxpc3Q8Tm9kZUxhYmVsPiByZXRWYWx1ZSA9IG5ldyBCYXNpY0VMaXN0PE5vZGVMYWJlbD4oKTsKKworCQlmb3IgKGZpbmFsIEl0ZXJhdG9yPE5vZGVMYWJlbD4gbm9kZUxhYmVsSXRlciA9IGdldE5vZGVMYWJlbHMoKS52YWx1ZXMoKS5pdGVyYXRvcigpOyBub2RlTGFiZWxJdGVyCisJCQkJLmhhc05leHQoKTspIHsKKwkJCWZpbmFsIE5vZGVMYWJlbCBub2RlTGFiZWwgPSBub2RlTGFiZWxJdGVyLm5leHQoKTsKKwkJCS8vIERvZXMgdGhpcyBvbmUgdGhlIHR5cGUgd2UncmUgbG9va2luZyBmb3I/CisJCQlpZiAobm9kZUxhYmVsLmdldFR5cGVVUkkoKS5lcXVhbHModHlwZVVSSSkpIHsKKwkJCQkvLyBZZXMKKwkJCQlyZXRWYWx1ZS5hZGQobm9kZUxhYmVsKTsKKwkJCX0KKwkJfSAvLyBmb3IgZWFjaCBub2RlTGFiZWwKKworCQkvLyBTdGVmYW4gNy8yMy8wOS4gSWYgbmVlZCB0byBndWFyYW50ZWUgdGhlIG9yZGVyIG9mIG9iamVjdHMgdGhpcyBsaXN0CisJCS8vIGJlaW5nIHRoZSBzYW1lIGZvciBlYWNoIGNhbGwgc2luY2UgdGhlIGxpc3QgaXMgdXNlZCB0byBwYXJ0aXRpb24KKwkJLy8gdGhlIHdvcmsgdXAgYW1vbmcgbXVsdGlwbGUgd29ya2VyIHRocmVhZHMuIEx1Y2tpbHkgdGhpcyBjYWxsCisJCS8vIGlzIG9ubHkgbWFkZSBvbmNlIGZvciBldmVyeSBkZWNvcmF0b3IgaW4gdGhlIGJlZ2lubmluZyBvZiBhIHNpbXVsYXRpb24KKwkJLy8gc28gc29ydGluZyBpcyBub3QgZXhwZW5zaXZlLgorCQkKKwkJRUNvbGxlY3Rpb25zLnNvcnQocmV0VmFsdWUsIG5ldyBDb21wYXJhdG9yPE5vZGVMYWJlbD4oKSB7CisKKwkJCXB1YmxpYyBpbnQgY29tcGFyZShOb2RlTGFiZWwgYXJnMCwgTm9kZUxhYmVsIGFyZzEpIHsKKwkJCQlOb2RlIG4xID0gYXJnMC5nZXROb2RlKCk7CisJCQkJTm9kZSBuMiA9IGFyZzEuZ2V0Tm9kZSgpOworCQkJCWlmKG4xID09IG51bGwpIHsKKwkJCQkJQ29yZVBsdWdpbi5sb2dFcnJvcigiTGFiZWwgIithcmcwLmdldENsYXNzKCkrIiAiK2FyZzArIiB1cmk6IithcmcwLmdldFVSSSgpKyIgbm9kZSBpcyBudWxsIiwgbmV3IEV4Y2VwdGlvbigpKTsKKwkJCQkJcmV0dXJuIDA7CisJCQkJfQorCQkJCWlmKG4yID09IG51bGwpIHsKKwkJCQkJQ29yZVBsdWdpbi5sb2dFcnJvcigiTGFiZWwgIithcmcxLmdldENsYXNzKCkrIiAiK2FyZzErIiB1cmk6IithcmcxLmdldFVSSSgpKyIgbm9kZSBpcyBudWxsIiwgbmV3IEV4Y2VwdGlvbigpKTsKKwkJCQkJcmV0dXJuIDA7CisJCQkJfQorCQkJCVVSSSB1MSA9IG4xLmdldFVSSSgpOworCQkJCVVSSSB1MiA9IG4yLmdldFVSSSgpOworCQkJCWlmKHUxID09IG51bGwpIHsKKwkJCQkJQ29yZVBsdWdpbi5sb2dFcnJvcigiTm9kZSAiK24xKyIgbWlzc2luZyBVUkkiLCBuZXcgRXhjZXB0aW9uKCkpOworCQkJCQlyZXR1cm4gMDsKKwkJCQl9CisJCQkJaWYodTIgPT0gbnVsbCkgeworCQkJCQlDb3JlUGx1Z2luLmxvZ0Vycm9yKCJOb2RlICIrbjIrIiBtaXNzaW5nIFVSSSIsIG5ldyBFeGNlcHRpb24oKSk7CisJCQkJCXJldHVybiAwOworCQkJCX0KKwkJCQkKKwkJCQlyZXR1cm4gdTEudG9TdHJpbmcoKS5jb21wYXJlVG8odTIudG9TdHJpbmcoKSk7CisJCQl9CisJCQkKKwkJfSk7CisJCQorCQlyZXR1cm4gcmV0VmFsdWU7CisJfSAvLyBnZXROb2RlTGFiZWxzQnlUeXBlVVJJCisKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRU1hcDxVUkksIE5vZGVMYWJlbD4gZ2V0Tm9kZUxhYmVscygpIHsKKwkJaWYgKG5vZGVMYWJlbHMgPT0gbnVsbCkgeworCQkJbm9kZUxhYmVscyA9IG5ldyBFY29yZUVNYXA8VVJJLE5vZGVMYWJlbD4oR3JhcGhQYWNrYWdlLkxpdGVyYWxzLlVSSV9UT19OT0RFX0xBQkVMX01BUF9FTlRSWSwgVVJJVG9Ob2RlTGFiZWxNYXBFbnRyeUltcGwuY2xhc3MsIHRoaXMsIEdyYXBoUGFja2FnZS5HUkFQSF9fTk9ERV9MQUJFTFMpOworCQl9CisJCXJldHVybiBub2RlTGFiZWxzOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJcHVibGljIGludCBnZXROdW1FZGdlcygpIHsKKwkJcmV0dXJuIGdldEVkZ2VzKCkgPT0gbnVsbCA/IDAgOiBnZXRFZGdlcygpLnNpemUoKTsKKwl9IC8vIGdldE51bUVkZ2VzCisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCXB1YmxpYyBpbnQgZ2V0TnVtTm9kZXMoKSB7CisJCXJldHVybiBnZXROb2RlcygpID09IG51bGwgPyAwIDogZ2V0Tm9kZXMoKS5zaXplKCk7CisJfSAvLyBnZXROdW1Ob2RlcworCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogCisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlwdWJsaWMgaW50IGdldE51bUdyYXBoTGFiZWxzKCkgeworCQlyZXR1cm4gZ2V0R3JhcGhMYWJlbHMoKSA9PSBudWxsID8gMCA6IGdldEdyYXBoTGFiZWxzKCkuc2l6ZSgpOworCX0gLy8gZ2V0TnVtR3JhcGhMYWJlbHMKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJcHVibGljIGludCBnZXROdW1Ob2RlTGFiZWxzKCkgeworCQlyZXR1cm4gZ2V0Tm9kZUxhYmVscygpID09IG51bGwgPyAwIDogZ2V0Tm9kZUxhYmVscygpLnNpemUoKTsKKwl9IC8vIGdldE51bU5vZGVMYWJlbHMKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJcHVibGljIGludCBnZXROdW1EeW5hbWljTGFiZWxzKCkgeworCQlyZXR1cm4gZ2V0RHluYW1pY0xhYmVscygpID09IG51bGwgPyAwIDogZ2V0RHluYW1pY0xhYmVscygpLnNpemUoKTsKKwl9IC8vIGdldE51bUR5bmFtaWNMYWJlbHMKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogCisJICogVGhpcyBtZXRob2QgYWRkcyB0aGUge0BsaW5rIEVkZ2V9cywge0BsaW5rIE5vZGV9cywge0BsaW5rIExhYmVsfXMgYW5kIHtAbGluayBEZWNvcmF0b3J9IAorCSAqIGZyb20gYW5vdGhlciBncmFwaCB0byAgdGhlIGNvbGxlY3Rpb25zIG1haW50YWluZWQgYnkgdGhpcyBncmFwaC4gCisJICogPHA+CisJICogSXQgZG9lcyBub3QgYXR0ZW1wdCB0byByZXNvbHZlCisJICogY29ubmVjdGlvbnMgYmV0d2VlbiBFZGdlcyBhbmQgdGhlIE5vZGVzIHRoZXkgcmVmZXJlbmNlLgorCSAqIDwvcD4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCXB1YmxpYyB2b2lkIGFkZEdyYXBoKGZpbmFsIEdyYXBoIGdyYXBoLCBJZGVudGlmaWFibGVGaWx0ZXIgZmlsdGVyKSB7CisJCUlkZW50aWZpYWJsZUZpbHRlckltcGwgX2ZpbHRlciA9IChJZGVudGlmaWFibGVGaWx0ZXJJbXBsKWZpbHRlcjsKKwkJRU1hcDxVUkksIEVkZ2U+ZWRnZXMgPSBncmFwaC5nZXRFZGdlcygpOworCQlFTWFwPFVSSSwgTm9kZT5ub2RlcyA9IGdyYXBoLmdldE5vZGVzKCk7CisJCUVNYXA8VVJJLCBOb2RlTGFiZWw+bm9kZUxhYmVscyA9IGdyYXBoLmdldE5vZGVMYWJlbHMoKTsKKwkJRU1hcDxVUkksIExhYmVsPmdyYXBoTGFiZWxzID0gZ3JhcGguZ2V0R3JhcGhMYWJlbHMoKTsKKwkJCisJCWlmKGZpbHRlciAhPSBudWxsKSB7CisJCQlfZmlsdGVyLmZpbHRlckVkZ2VzKGVkZ2VzKTsKKwkJCV9maWx0ZXIuZmlsdGVyTm9kZXMobm9kZXMpOworCQkJX2ZpbHRlci5maWx0ZXJOb2RlTGFiZWxzKG5vZGVMYWJlbHMpOworCQkJX2ZpbHRlci5maWx0ZXJMYWJlbHMoZ3JhcGhMYWJlbHMpOworCQl9CisJCQorCQlnZXRFZGdlcygpLmFkZEFsbChlZGdlcyk7CisJCWdldE5vZGVzKCkuYWRkQWxsKG5vZGVzKTsKKwkJZ2V0Tm9kZUxhYmVscygpLmFkZEFsbChub2RlTGFiZWxzKTsKKwkJZ2V0RGVjb3JhdG9ycygpLmFkZEFsbChncmFwaC5nZXREZWNvcmF0b3JzKCkpOworCQkKKwkJLy8gV2UgbmVlZCB0byB1cGRhdGUgdGhlIGdyYXBoIGxhYmVscyB0byB0aGUgbmV3IGdyYXBoCisJCWZvciAoZmluYWwgSXRlcmF0b3I8TGFiZWw+IGdyYXBoTGFiZWxJdGVyID0gZ3JhcGhMYWJlbHMudmFsdWVzKCkKKwkJCQkuaXRlcmF0b3IoKTsgZ3JhcGhMYWJlbEl0ZXIuaGFzTmV4dCgpOykgeworCQkJZmluYWwgTGFiZWwgZ3JhcGhMYWJlbCA9IGdyYXBoTGFiZWxJdGVyLm5leHQoKTsKKwkJCWdyYXBoTGFiZWwuc2V0VVJJT2ZJZGVudGlmaWFibGVUb0JlTGFiZWxlZChnZXRVUkkoKSk7CisJCQlwdXRHcmFwaExhYmVsKGdyYXBoTGFiZWwpOworCQl9IC8vIGZvciBlYWNoIG5ldyBncmFwaCBsYWJlbAorCisJCWdldER5bmFtaWNMYWJlbHMoKS5hZGRBbGwoZ3JhcGguZ2V0RHluYW1pY0xhYmVscygpKTsKKwkJZ2V0VW5yZXNvbHZlZElkZW50aWZpYWJsZXMoKS5hZGRBbGwoZ3JhcGguZ2V0VW5yZXNvbHZlZElkZW50aWZpYWJsZXMoKSk7CisJfSAvLyBhZGRHcmFwaAorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogCisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlwdWJsaWMgdm9pZCBwdXRFZGdlKEVkZ2UgZWRnZSkgeworCQlnZXRFZGdlcygpLnB1dChlZGdlLmdldFVSSSgpLCBlZGdlKTsKKwkJZmluYWwgRWRnZUxhYmVsIGVkZ2VMYWJlbCA9IGVkZ2UuZ2V0TGFiZWwoKTsKKwkJLy8gRHluYW1pYz8KKwkJaWYgKGVkZ2VMYWJlbCBpbnN0YW5jZW9mIER5bmFtaWNMYWJlbCkgeworCQkJLy8gWWVzCisJCQlhZGREeW5hbWljTGFiZWwoKER5bmFtaWNMYWJlbCllZGdlTGFiZWwpOworCQl9IC8vIGlmIER5bmFtaWNMYWJlbAorCX0gLy8gcHV0RWRnZQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogCisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlwdWJsaWMgRWRnZSBnZXRFZGdlKFVSSSB1cmkpIHsKKwkJcmV0dXJuIGdldEVkZ2VzKCkuZ2V0KHVyaSk7CisJfSAvLyBnZXRFZGdlCisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCXB1YmxpYyB2b2lkIHB1dE5vZGUoTm9kZSBub2RlKSB7CisJCWdldE5vZGVzKCkucHV0KG5vZGUuZ2V0VVJJKCksIG5vZGUpOworCQlmb3IgKE5vZGVMYWJlbCBub2RlTGFiZWwgOiBub2RlLmdldExhYmVscygpKSB7CisJCQlwdXROb2RlTGFiZWwobm9kZUxhYmVsKTsKKwkJfSAvLyBmb3IgZWFjaCBOb2RlTGFiZWwKKwl9IC8vIHB1dE5vZGUKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJcHVibGljIE5vZGUgZ2V0Tm9kZShVUkkgdXJpKSB7CisJCXJldHVybiBnZXROb2RlcygpLmdldCh1cmkpOworCX0gLy8gZ2V0Tm9kZQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogCisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlwdWJsaWMgdm9pZCBwdXROb2RlTGFiZWwoTm9kZUxhYmVsIGxhYmVsKSB7CisJCWdldE5vZGVMYWJlbHMoKS5wdXQobGFiZWwuZ2V0VVJJKCksIGxhYmVsKTsKKwkJLy8gRHluYW1pYz8KKwkJaWYgKGxhYmVsIGluc3RhbmNlb2YgRHluYW1pY0xhYmVsKSB7CisJCQkvLyBZZXMKKwkJCWFkZER5bmFtaWNMYWJlbCgoRHluYW1pY0xhYmVsKWxhYmVsKTsKKwkJfSAvLyBpZiBEeW5hbWljTGFiZWwKKwl9IC8vIHB1dE5vZGVMYWJlbAorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogCisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlwdWJsaWMgTm9kZUxhYmVsIGdldE5vZGVMYWJlbChVUkkgdXJpKSB7CisJCXJldHVybiBnZXROb2RlTGFiZWxzKCkuZ2V0KHVyaSk7CisJfSAvLyBnZXROb2RlTGFiZWwKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJcHVibGljIHZvaWQgcHV0R3JhcGhMYWJlbChMYWJlbCBsYWJlbCkgeworCQlnZXRHcmFwaExhYmVscygpLnB1dChsYWJlbC5nZXRVUkkoKSwgbGFiZWwpOworCQkvLyBEeW5hbWljPworCQlpZiAobGFiZWwgaW5zdGFuY2VvZiBEeW5hbWljTGFiZWwpIHsKKwkJCS8vIFllcworCQkJYWRkRHluYW1pY0xhYmVsKChEeW5hbWljTGFiZWwpbGFiZWwpOworCQl9IC8vIGlmIER5bmFtaWNMYWJlbAorCX0gLy8gcHV0R3JhcGhMYWJlbAorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogCisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlwdWJsaWMgTGFiZWwgZ2V0R3JhcGhMYWJlbChVUkkgdXJpKSB7CisJCXJldHVybiBnZXRHcmFwaExhYmVscygpLmdldCh1cmkpOworCX0gLy8gZ2V0R3JhcGhMYWJlbAorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogCisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlwdWJsaWMgdm9pZCBhZGREeW5hbWljTGFiZWwoRHluYW1pY0xhYmVsIGR5bmFtaWNsYWJlbCkgeworCQlnZXREeW5hbWljTGFiZWxzKCkuYWRkKGR5bmFtaWNsYWJlbCk7CisJfSAvLyBhZGREeW5hbWljTGFiZWwKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJcHVibGljIHZvaWQgc3dpdGNoVG9OZXh0VmFsdWUoU1RFTVRpbWUgY3VycmVudFRpbWUpIHsKKwkJZm9yIChmaW5hbCBJdGVyYXRvcjxEeW5hbWljTGFiZWw+IGdyYXBoTGFiZWxJdGVyID0gZ2V0RHluYW1pY0xhYmVscygpCisJCQkJLml0ZXJhdG9yKCk7IGdyYXBoTGFiZWxJdGVyLmhhc05leHQoKTspIHsKKwkJCWZpbmFsIER5bmFtaWNMYWJlbCBkeW5hbWljTGFiZWwgPSBncmFwaExhYmVsSXRlci5uZXh0KCk7CisJCQlkeW5hbWljTGFiZWwuc3dpdGNoVG9OZXh0VmFsdWUoKTsKKwkJfSAvLyBmb3IgZHluYW1pYyBsYWJlbHMKKwkJc2V0VGltZSgoU1RFTVRpbWUpRWNvcmVVdGlsLmNvcHkoY3VycmVudFRpbWUpKTsKKwl9IC8vIHN3aXRjaFRvTmV4dFZhbHVlCisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAU3VwcHJlc3NXYXJuaW5ncygidW5jaGVja2VkIikKKwkJQE92ZXJyaWRlCisJcHVibGljIE5vdGlmaWNhdGlvbkNoYWluIGVJbnZlcnNlQWRkKEludGVybmFsRU9iamVjdCBvdGhlckVuZCwgaW50IGZlYXR1cmVJRCwgTm90aWZpY2F0aW9uQ2hhaW4gbXNncykgeworCQlzd2l0Y2ggKGZlYXR1cmVJRCkgeworCQkJY2FzZSBHcmFwaFBhY2thZ2UuR1JBUEhfX0RFQ09SQVRPUlM6CisJCQkJcmV0dXJuICgoSW50ZXJuYWxFTGlzdDxJbnRlcm5hbEVPYmplY3Q+KShJbnRlcm5hbEVMaXN0PD8+KWdldERlY29yYXRvcnMoKSkuYmFzaWNBZGQob3RoZXJFbmQsIG1zZ3MpOworCQl9CisJCXJldHVybiBzdXBlci5lSW52ZXJzZUFkZChvdGhlckVuZCwgZmVhdHVyZUlELCBtc2dzKTsKKwl9CisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29tbW9uLmltcGwuSWRlbnRpZmlhYmxlSW1wbCN0b1N0cmluZygpCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIFN0cmluZyB0b1N0cmluZygpIHsKKwkJZmluYWwgU3RyaW5nQnVpbGRlciBzYiA9IG5ldyBTdHJpbmdCdWlsZGVyKCJcIiIgKyBnZXREdWJsaW5Db3JlKCkuZ2V0VGl0bGUoKQorCQkJCSsgIlwiLFxuIik7CisKKwkJLy8gSG93IG1hbnkgbm9kZXM/CisKKwkJc2IuYXBwZW5kKGdldE51bU5vZGVzKCkgPiAwID8gZ2V0TnVtTm9kZXMoKSArICIgTm9kZXNcbiIgOiAiIik7CisJCXNiLmFwcGVuZChnZXROdW1FZGdlcygpID4gMCA/IGdldE51bUVkZ2VzKCkgKyAiIEVkZ2VzXG4iIDogIiIpOworCQlzYi5hcHBlbmQoZ2V0TnVtTm9kZUxhYmVscygpID4gMCA/IGdldE51bU5vZGVMYWJlbHMoKSArICIgTm9kZSBMYWJlbHMgIgorCQkJCTogIiIpOworCQlzYi5hcHBlbmQoZ2V0TnVtR3JhcGhMYWJlbHMoKSA+IDAgPyBnZXROdW1HcmFwaExhYmVscygpCisJCQkJKyAiIEdyYXBoIExhYmVsc1xuIiA6ICIiKTsKKworCQlzYi5hcHBlbmQoZ2V0TnVtRHluYW1pY0xhYmVscygpID4gMCA/IGdldE51bUR5bmFtaWNMYWJlbHMoKQorCQkJCSsgIiBEeW5hbWljIExhYmVsc1xuIiA6ICIiKTsKKworCQlyZXR1cm4gc2IudG9TdHJpbmcoKTsKKwl9IC8vIHRvU3RyaW5nCisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29tbW9uLmltcGwuSWRlbnRpZmlhYmxlSW1wbCNzYW5lKCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgYm9vbGVhbiBzYW5lKCkgeworCQlib29sZWFuIHJldFZhbHVlID0gc3VwZXIuc2FuZSgpOworCisJCS8vIFRoaXMgaXMgdGhlIG51bWJlciBvZiBsYWJlbHMgdGhhdCBlYWNoIG5vZGUgcmVmZXJlbmNlcworCQlpbnQgbm9kZUxhYmVsQ291bnQgPSAwOworCQlpbnQgZHluYW1pY0xhYmVsQ291bnQgPSAwOworCisJCS8vIE5vZGVzCisJCWlmIChnZXROb2RlcygpICE9IG51bGwpIHsKKwkJCS8vIFllcworCQkJZm9yIChmaW5hbCBJdGVyYXRvcjxOb2RlPiBub2RlSXRlciA9IGdldE5vZGVzKCkudmFsdWVzKCkuaXRlcmF0b3IoKTsgbm9kZUl0ZXIKKwkJCQkJLmhhc05leHQoKQorCQkJCQkmJiByZXRWYWx1ZTspIHsKKwkJCQlmaW5hbCBOb2RlIG5vZGUgPSBub2RlSXRlci5uZXh0KCk7CisJCQkJcmV0VmFsdWUgPSByZXRWYWx1ZSAmJiBub2RlLnNhbmUoKTsKKwkJCQlhc3NlcnQgcmV0VmFsdWU7CisKKwkJCQlub2RlTGFiZWxDb3VudCArPSBub2RlLmdldExhYmVscygpLnNpemUoKTsKKworCQkJCS8vIEhvdyBtYW55IGR5bmFtaWMgbGFiZWxzPworCQkJCWZvciAoZmluYWwgSXRlcmF0b3I8Tm9kZUxhYmVsPiBsYWJlbEl0ZXIgPSBub2RlLmdldExhYmVscygpCisJCQkJCQkuaXRlcmF0b3IoKTsgbGFiZWxJdGVyLmhhc05leHQoKTspIHsKKwkJCQkJZmluYWwgTGFiZWwgbGFiZWwgPSBsYWJlbEl0ZXIubmV4dCgpOworCQkJCQlpZiAobGFiZWwgaW5zdGFuY2VvZiBEeW5hbWljTGFiZWwpIHsKKwkJCQkJCWR5bmFtaWNMYWJlbENvdW50Kys7CisJCQkJCQlyZXRWYWx1ZSA9IGZhbHNlOworCQkJCQkJCisJCQkJCQkvLyBUaGUgZHluYW1pYyBsYWJlbCBzaG91bGQgYmUgaW4gdGhlIGNvbGxlY3Rpb24gb2YKKwkJCQkJCS8vIGR5bmFtaWMgbGFiZWxzIG1haW50YWluZWQgYnkgdGhlIGdyYXBoCisJCQkJCQlmb3IgKER5bmFtaWNMYWJlbCBkbCA6IGdldER5bmFtaWNMYWJlbHMoKSkgeworCQkJCQkJCWlmIChkbCA9PSBsYWJlbCkgeworCQkJCQkJCQlyZXRWYWx1ZSA9IHRydWU7CisJCQkJCQkJCWJyZWFrOworCQkJCQkJCX0KKwkJCQkJCX0gLy8gZm9yIGVhY2ggZHluYW1pYyBsYWJlbAorCQkJCQkJYXNzZXJ0IHJldFZhbHVlOworCQkJCQkJCisJCQkJCX0gLy8gaWYgRHluYW1pY0xhYmVsCisJCQkJCS8vIFRoZSBsYWJlbCBzaG91bGQgYmUgaW4gdGhlIGNvbGxlY3Rpb24gb2Ygbm9kZSBsYWJlbHMKKwkJCQkJcmV0VmFsdWUgPSByZXRWYWx1ZQorCQkJCQkJCSYmIGdldE5vZGVMYWJlbHMoKS5jb250YWluc0tleShsYWJlbC5nZXRVUkkoKSk7CisJCQkJCWFzc2VydCByZXRWYWx1ZTsKKwkJCQkJCisJCQkJCQorCQkJCX0gLy8gZm9yIGVhY2ggbGFiZWwgb2YgdGhlIG5vZGUKKwkJCX0gLy8gZm9yIGVhY2ggbm9kZQorCQl9IC8vIGlmCisKKwkJLy8gRWRnZXM/CisJCWlmIChnZXRFZGdlcygpICE9IG51bGwpIHsKKwkJCS8vIFllcworCQkJZm9yIChmaW5hbCBJdGVyYXRvcjxFZGdlPiBlZGdlSXRlciA9IGdldEVkZ2VzKCkudmFsdWVzKCkuaXRlcmF0b3IoKTsgZWRnZUl0ZXIKKwkJCQkJLmhhc05leHQoKQorCQkJCQkmJiByZXRWYWx1ZTspIHsKKwkJCQlmaW5hbCBFZGdlIGVkZ2UgPSBlZGdlSXRlci5uZXh0KCk7CisJCQkJcmV0VmFsdWUgPSByZXRWYWx1ZSAmJiBlZGdlLnNhbmUoKTsKKwkJCQlhc3NlcnQgcmV0VmFsdWU7CisKKwkJCQkvLyBJcyB0aGUgZWRnZSdzIGxhYmVsIGR5bmFtaWM/CisJCQkJaWYgKGVkZ2UuZ2V0TGFiZWwoKSBpbnN0YW5jZW9mIER5bmFtaWNMYWJlbCkgeworCQkJCQkvLyBZZXMKKwkJCQkJZHluYW1pY0xhYmVsQ291bnQrKzsKKwkJCQl9CisJCQl9IC8vIGZvciBlYWNoIGVkZ2UKKwkJfSAvLyBpZgorCisJCS8vIE5vZGUgTGFiZWxzPworCQlpZiAoZ2V0Tm9kZUxhYmVscygpICE9IG51bGwpIHsKKwkJCS8vIFllcworCQkJLy8gVGhlIG51bWJlciBvZiBub2RlIGxhYmVscyBzaG91bGQgbWF0Y2ggdGhlIG51bWJlciB3ZSBjb3VudGVkCisJCQkvLyBhYm92ZS4uLm5vdCB0cnVlIGZvciBncmFwaCBmcmFnbWVudHMgdGhhdCBtaWdodCBoYXZlIGxhYmVscyBmb3IKKwkJCS8vIG5vZGVzIGluIG90aGVyIChzdWIpIGdyYXBoIGZyYWdtZW50cy4KKwkJCS8vIHJldFZhbHVlID0gcmV0VmFsdWUgJiYgbm9kZUxhYmVsQ291bnQgPT0KKwkJCS8vIGdldE5vZGVMYWJlbHMoKS5nZXRTaXplKCk7CisJCQkvLyBhc3NlcnQgcmV0VmFsdWU7CisKKwkJCWZvciAoZmluYWwgSXRlcmF0b3I8Tm9kZUxhYmVsPiBsYWJlbEl0ZXIgPSBnZXROb2RlTGFiZWxzKCkudmFsdWVzKCkKKwkJCQkJLml0ZXJhdG9yKCk7IGxhYmVsSXRlci5oYXNOZXh0KCkgJiYgcmV0VmFsdWU7KSB7CisJCQkJZmluYWwgTm9kZUxhYmVsIG5vZGVMYWJlbCA9IGxhYmVsSXRlci5uZXh0KCk7CisJCQkJcmV0VmFsdWUgPSByZXRWYWx1ZSAmJiBub2RlTGFiZWwuc2FuZSgpOworCQkJCWFzc2VydCByZXRWYWx1ZTsKKwkJCX0gLy8gZm9yIGVhY2ggbm9kZSBsYWJlbAorCQl9IC8vIGlmCisKKwkJaWYgKGdldEdyYXBoTGFiZWxzKCkgIT0gbnVsbCkgeworCQkJLy8gWWVzCisJCQlmb3IgKGZpbmFsIEl0ZXJhdG9yPExhYmVsPiBncmFwaExhYmVsSXRlciA9IGdldEdyYXBoTGFiZWxzKCkudmFsdWVzKCkKKwkJCQkJLml0ZXJhdG9yKCk7IGdyYXBoTGFiZWxJdGVyLmhhc05leHQoKTspIHsKKwkJCQlmaW5hbCBMYWJlbCBncmFwaExhYmVsID0gZ3JhcGhMYWJlbEl0ZXIubmV4dCgpOworCQkJCXJldFZhbHVlID0gcmV0VmFsdWUgJiYgZ3JhcGhMYWJlbC5zYW5lKCk7CisJCQkJYXNzZXJ0IHJldFZhbHVlOworCisJCQkJaWYgKGdyYXBoTGFiZWwgaW5zdGFuY2VvZiBEeW5hbWljTGFiZWwpIHsKKwkJCQkJZHluYW1pY0xhYmVsQ291bnQrKzsKKwkJCQl9CisJCQl9CisJCX0gLy8gaWYgZ3JhcGhMYWJlbHMKKworCQkvLyBEeW5hbWljIExhYmVscz8KKwkJaWYgKGdldER5bmFtaWNMYWJlbHMoKSAhPSBudWxsKSB7CisJCQkvLyBZZXMKKwkJCS8vIFRoZSBudW1iZXIgb2YgZHluYW1pYyBsYWJlbHMgc2hvdWxkIGVxdWFsIHRoZSBjb3VudAorCQkJcmV0VmFsdWUgPSBkeW5hbWljTGFiZWxDb3VudCA9PSBnZXROdW1EeW5hbWljTGFiZWxzKCk7CisJCQlhc3NlcnQgcmV0VmFsdWU7CisKKwkJCWZvciAoZmluYWwgSXRlcmF0b3I8RHluYW1pY0xhYmVsPiBkeW5hbWljbEl0ZXIgPSBnZXREeW5hbWljTGFiZWxzKCkKKwkJCQkJLml0ZXJhdG9yKCk7IGR5bmFtaWNsSXRlci5oYXNOZXh0KCkgJiYgcmV0VmFsdWU7KSB7CisJCQkJZmluYWwgRHluYW1pY0xhYmVsIGR5bmFtaWNMYWJlbCA9IGR5bmFtaWNsSXRlci5uZXh0KCk7CisJCQkJcmV0VmFsdWUgPSByZXRWYWx1ZSAmJiBkeW5hbWljTGFiZWwuc2FuZSgpOworCQkJCWFzc2VydCByZXRWYWx1ZTsKKwkJCX0gLy8gZm9yIGVhY2ggZHluYW1pYyBsYWJlbAorCQl9IC8vIGlmCisKKwkJcmV0dXJuIHJldFZhbHVlOworCX0gLy8gc2FuZQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBOb3RpZmljYXRpb25DaGFpbiBlSW52ZXJzZVJlbW92ZShJbnRlcm5hbEVPYmplY3Qgb3RoZXJFbmQsIGludCBmZWF0dXJlSUQsIE5vdGlmaWNhdGlvbkNoYWluIG1zZ3MpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJCWNhc2UgR3JhcGhQYWNrYWdlLkdSQVBIX19FREdFUzoKKwkJCQlyZXR1cm4gKChJbnRlcm5hbEVMaXN0PD8+KWdldEVkZ2VzKCkpLmJhc2ljUmVtb3ZlKG90aGVyRW5kLCBtc2dzKTsKKwkJCWNhc2UgR3JhcGhQYWNrYWdlLkdSQVBIX19OT0RFUzoKKwkJCQlyZXR1cm4gKChJbnRlcm5hbEVMaXN0PD8+KWdldE5vZGVzKCkpLmJhc2ljUmVtb3ZlKG90aGVyRW5kLCBtc2dzKTsKKwkJCWNhc2UgR3JhcGhQYWNrYWdlLkdSQVBIX19HUkFQSF9MQUJFTFM6CisJCQkJcmV0dXJuICgoSW50ZXJuYWxFTGlzdDw/PilnZXRHcmFwaExhYmVscygpKS5iYXNpY1JlbW92ZShvdGhlckVuZCwgbXNncyk7CisJCQljYXNlIEdyYXBoUGFja2FnZS5HUkFQSF9fTk9ERV9MQUJFTFM6CisJCQkJcmV0dXJuICgoSW50ZXJuYWxFTGlzdDw/PilnZXROb2RlTGFiZWxzKCkpLmJhc2ljUmVtb3ZlKG90aGVyRW5kLCBtc2dzKTsKKwkJCWNhc2UgR3JhcGhQYWNrYWdlLkdSQVBIX19VTlJFU09MVkVEX0lERU5USUZJQUJMRVM6CisJCQkJcmV0dXJuICgoSW50ZXJuYWxFTGlzdDw/PilnZXRVbnJlc29sdmVkSWRlbnRpZmlhYmxlcygpKS5iYXNpY1JlbW92ZShvdGhlckVuZCwgbXNncyk7CisJCQljYXNlIEdyYXBoUGFja2FnZS5HUkFQSF9fREVDT1JBVE9SUzoKKwkJCQlyZXR1cm4gKChJbnRlcm5hbEVMaXN0PD8+KWdldERlY29yYXRvcnMoKSkuYmFzaWNSZW1vdmUob3RoZXJFbmQsIG1zZ3MpOworCQkJY2FzZSBHcmFwaFBhY2thZ2UuR1JBUEhfX1RJTUU6CisJCQkJcmV0dXJuIGJhc2ljU2V0VGltZShudWxsLCBtc2dzKTsKKwkJfQorCQlyZXR1cm4gc3VwZXIuZUludmVyc2VSZW1vdmUob3RoZXJFbmQsIGZlYXR1cmVJRCwgbXNncyk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBPYmplY3QgZUdldChpbnQgZmVhdHVyZUlELCBib29sZWFuIHJlc29sdmUsIGJvb2xlYW4gY29yZVR5cGUpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJCWNhc2UgR3JhcGhQYWNrYWdlLkdSQVBIX19FREdFUzoKKwkJCQlpZiAoY29yZVR5cGUpIHJldHVybiBnZXRFZGdlcygpOworCQkJCWVsc2UgcmV0dXJuIGdldEVkZ2VzKCkubWFwKCk7CisJCQljYXNlIEdyYXBoUGFja2FnZS5HUkFQSF9fTk9ERVM6CisJCQkJaWYgKGNvcmVUeXBlKSByZXR1cm4gZ2V0Tm9kZXMoKTsKKwkJCQllbHNlIHJldHVybiBnZXROb2RlcygpLm1hcCgpOworCQkJY2FzZSBHcmFwaFBhY2thZ2UuR1JBUEhfX0dSQVBIX0xBQkVMUzoKKwkJCQlpZiAoY29yZVR5cGUpIHJldHVybiBnZXRHcmFwaExhYmVscygpOworCQkJCWVsc2UgcmV0dXJuIGdldEdyYXBoTGFiZWxzKCkubWFwKCk7CisJCQljYXNlIEdyYXBoUGFja2FnZS5HUkFQSF9fTk9ERV9MQUJFTFM6CisJCQkJaWYgKGNvcmVUeXBlKSByZXR1cm4gZ2V0Tm9kZUxhYmVscygpOworCQkJCWVsc2UgcmV0dXJuIGdldE5vZGVMYWJlbHMoKS5tYXAoKTsKKwkJCWNhc2UgR3JhcGhQYWNrYWdlLkdSQVBIX19EWU5BTUlDX0xBQkVMUzoKKwkJCQlyZXR1cm4gZ2V0RHluYW1pY0xhYmVscygpOworCQkJY2FzZSBHcmFwaFBhY2thZ2UuR1JBUEhfX05VTV9FREdFUzoKKwkJCQlyZXR1cm4gZ2V0TnVtRWRnZXMoKTsKKwkJCWNhc2UgR3JhcGhQYWNrYWdlLkdSQVBIX19OVU1fTk9ERVM6CisJCQkJcmV0dXJuIGdldE51bU5vZGVzKCk7CisJCQljYXNlIEdyYXBoUGFja2FnZS5HUkFQSF9fTlVNX0dSQVBIX0xBQkVMUzoKKwkJCQlyZXR1cm4gZ2V0TnVtR3JhcGhMYWJlbHMoKTsKKwkJCWNhc2UgR3JhcGhQYWNrYWdlLkdSQVBIX19OVU1fTk9ERV9MQUJFTFM6CisJCQkJcmV0dXJuIGdldE51bU5vZGVMYWJlbHMoKTsKKwkJCWNhc2UgR3JhcGhQYWNrYWdlLkdSQVBIX19OVU1fRFlOQU1JQ19MQUJFTFM6CisJCQkJcmV0dXJuIGdldE51bUR5bmFtaWNMYWJlbHMoKTsKKwkJCWNhc2UgR3JhcGhQYWNrYWdlLkdSQVBIX19VTlJFU09MVkVEX0lERU5USUZJQUJMRVM6CisJCQkJcmV0dXJuIGdldFVucmVzb2x2ZWRJZGVudGlmaWFibGVzKCk7CisJCQljYXNlIEdyYXBoUGFja2FnZS5HUkFQSF9fREVDT1JBVE9SUzoKKwkJCQlyZXR1cm4gZ2V0RGVjb3JhdG9ycygpOworCQkJY2FzZSBHcmFwaFBhY2thZ2UuR1JBUEhfX1RJTUU6CisJCQkJcmV0dXJuIGdldFRpbWUoKTsKKwkJfQorCQlyZXR1cm4gc3VwZXIuZUdldChmZWF0dXJlSUQsIHJlc29sdmUsIGNvcmVUeXBlKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQFN1cHByZXNzV2FybmluZ3MoInVuY2hlY2tlZCIpCisJCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGVTZXQoaW50IGZlYXR1cmVJRCwgT2JqZWN0IG5ld1ZhbHVlKSB7CisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7CisJCQljYXNlIEdyYXBoUGFja2FnZS5HUkFQSF9fRURHRVM6CisJCQkJKChFU3RydWN0dXJhbEZlYXR1cmUuU2V0dGluZylnZXRFZGdlcygpKS5zZXQobmV3VmFsdWUpOworCQkJCXJldHVybjsKKwkJCWNhc2UgR3JhcGhQYWNrYWdlLkdSQVBIX19OT0RFUzoKKwkJCQkoKEVTdHJ1Y3R1cmFsRmVhdHVyZS5TZXR0aW5nKWdldE5vZGVzKCkpLnNldChuZXdWYWx1ZSk7CisJCQkJcmV0dXJuOworCQkJY2FzZSBHcmFwaFBhY2thZ2UuR1JBUEhfX0dSQVBIX0xBQkVMUzoKKwkJCQkoKEVTdHJ1Y3R1cmFsRmVhdHVyZS5TZXR0aW5nKWdldEdyYXBoTGFiZWxzKCkpLnNldChuZXdWYWx1ZSk7CisJCQkJcmV0dXJuOworCQkJY2FzZSBHcmFwaFBhY2thZ2UuR1JBUEhfX05PREVfTEFCRUxTOgorCQkJCSgoRVN0cnVjdHVyYWxGZWF0dXJlLlNldHRpbmcpZ2V0Tm9kZUxhYmVscygpKS5zZXQobmV3VmFsdWUpOworCQkJCXJldHVybjsKKwkJCWNhc2UgR3JhcGhQYWNrYWdlLkdSQVBIX19EWU5BTUlDX0xBQkVMUzoKKwkJCQlnZXREeW5hbWljTGFiZWxzKCkuY2xlYXIoKTsKKwkJCQlnZXREeW5hbWljTGFiZWxzKCkuYWRkQWxsKChDb2xsZWN0aW9uPD8gZXh0ZW5kcyBEeW5hbWljTGFiZWw+KW5ld1ZhbHVlKTsKKwkJCQlyZXR1cm47CisJCQljYXNlIEdyYXBoUGFja2FnZS5HUkFQSF9fVU5SRVNPTFZFRF9JREVOVElGSUFCTEVTOgorCQkJCWdldFVucmVzb2x2ZWRJZGVudGlmaWFibGVzKCkuY2xlYXIoKTsKKwkJCQlnZXRVbnJlc29sdmVkSWRlbnRpZmlhYmxlcygpLmFkZEFsbCgoQ29sbGVjdGlvbjw/IGV4dGVuZHMgVW5yZXNvbHZlZElkZW50aWZpYWJsZT4pbmV3VmFsdWUpOworCQkJCXJldHVybjsKKwkJCWNhc2UgR3JhcGhQYWNrYWdlLkdSQVBIX19ERUNPUkFUT1JTOgorCQkJCWdldERlY29yYXRvcnMoKS5jbGVhcigpOworCQkJCWdldERlY29yYXRvcnMoKS5hZGRBbGwoKENvbGxlY3Rpb248PyBleHRlbmRzIERlY29yYXRvcj4pbmV3VmFsdWUpOworCQkJCXJldHVybjsKKwkJCWNhc2UgR3JhcGhQYWNrYWdlLkdSQVBIX19USU1FOgorCQkJCXNldFRpbWUoKFNURU1UaW1lKW5ld1ZhbHVlKTsKKwkJCQlyZXR1cm47CisJCX0KKwkJc3VwZXIuZVNldChmZWF0dXJlSUQsIG5ld1ZhbHVlKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgZVVuc2V0KGludCBmZWF0dXJlSUQpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJCWNhc2UgR3JhcGhQYWNrYWdlLkdSQVBIX19FREdFUzoKKwkJCQlnZXRFZGdlcygpLmNsZWFyKCk7CisJCQkJcmV0dXJuOworCQkJY2FzZSBHcmFwaFBhY2thZ2UuR1JBUEhfX05PREVTOgorCQkJCWdldE5vZGVzKCkuY2xlYXIoKTsKKwkJCQlyZXR1cm47CisJCQljYXNlIEdyYXBoUGFja2FnZS5HUkFQSF9fR1JBUEhfTEFCRUxTOgorCQkJCWdldEdyYXBoTGFiZWxzKCkuY2xlYXIoKTsKKwkJCQlyZXR1cm47CisJCQljYXNlIEdyYXBoUGFja2FnZS5HUkFQSF9fTk9ERV9MQUJFTFM6CisJCQkJZ2V0Tm9kZUxhYmVscygpLmNsZWFyKCk7CisJCQkJcmV0dXJuOworCQkJY2FzZSBHcmFwaFBhY2thZ2UuR1JBUEhfX0RZTkFNSUNfTEFCRUxTOgorCQkJCWdldER5bmFtaWNMYWJlbHMoKS5jbGVhcigpOworCQkJCXJldHVybjsKKwkJCWNhc2UgR3JhcGhQYWNrYWdlLkdSQVBIX19VTlJFU09MVkVEX0lERU5USUZJQUJMRVM6CisJCQkJZ2V0VW5yZXNvbHZlZElkZW50aWZpYWJsZXMoKS5jbGVhcigpOworCQkJCXJldHVybjsKKwkJCWNhc2UgR3JhcGhQYWNrYWdlLkdSQVBIX19ERUNPUkFUT1JTOgorCQkJCWdldERlY29yYXRvcnMoKS5jbGVhcigpOworCQkJCXJldHVybjsKKwkJCWNhc2UgR3JhcGhQYWNrYWdlLkdSQVBIX19USU1FOgorCQkJCXNldFRpbWUoKFNURU1UaW1lKW51bGwpOworCQkJCXJldHVybjsKKwkJfQorCQlzdXBlci5lVW5zZXQoZmVhdHVyZUlEKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIGJvb2xlYW4gZUlzU2V0KGludCBmZWF0dXJlSUQpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJCWNhc2UgR3JhcGhQYWNrYWdlLkdSQVBIX19FREdFUzoKKwkJCQlyZXR1cm4gZWRnZXMgIT0gbnVsbCAmJiAhZWRnZXMuaXNFbXB0eSgpOworCQkJY2FzZSBHcmFwaFBhY2thZ2UuR1JBUEhfX05PREVTOgorCQkJCXJldHVybiBub2RlcyAhPSBudWxsICYmICFub2Rlcy5pc0VtcHR5KCk7CisJCQljYXNlIEdyYXBoUGFja2FnZS5HUkFQSF9fR1JBUEhfTEFCRUxTOgorCQkJCXJldHVybiBncmFwaExhYmVscyAhPSBudWxsICYmICFncmFwaExhYmVscy5pc0VtcHR5KCk7CisJCQljYXNlIEdyYXBoUGFja2FnZS5HUkFQSF9fTk9ERV9MQUJFTFM6CisJCQkJcmV0dXJuIG5vZGVMYWJlbHMgIT0gbnVsbCAmJiAhbm9kZUxhYmVscy5pc0VtcHR5KCk7CisJCQljYXNlIEdyYXBoUGFja2FnZS5HUkFQSF9fRFlOQU1JQ19MQUJFTFM6CisJCQkJcmV0dXJuIGR5bmFtaWNMYWJlbHMgIT0gbnVsbCAmJiAhZHluYW1pY0xhYmVscy5pc0VtcHR5KCk7CisJCQljYXNlIEdyYXBoUGFja2FnZS5HUkFQSF9fTlVNX0VER0VTOgorCQkJCXJldHVybiBnZXROdW1FZGdlcygpICE9IE5VTV9FREdFU19FREVGQVVMVDsKKwkJCWNhc2UgR3JhcGhQYWNrYWdlLkdSQVBIX19OVU1fTk9ERVM6CisJCQkJcmV0dXJuIGdldE51bU5vZGVzKCkgIT0gTlVNX05PREVTX0VERUZBVUxUOworCQkJY2FzZSBHcmFwaFBhY2thZ2UuR1JBUEhfX05VTV9HUkFQSF9MQUJFTFM6CisJCQkJcmV0dXJuIGdldE51bUdyYXBoTGFiZWxzKCkgIT0gTlVNX0dSQVBIX0xBQkVMU19FREVGQVVMVDsKKwkJCWNhc2UgR3JhcGhQYWNrYWdlLkdSQVBIX19OVU1fTk9ERV9MQUJFTFM6CisJCQkJcmV0dXJuIGdldE51bU5vZGVMYWJlbHMoKSAhPSBOVU1fTk9ERV9MQUJFTFNfRURFRkFVTFQ7CisJCQljYXNlIEdyYXBoUGFja2FnZS5HUkFQSF9fTlVNX0RZTkFNSUNfTEFCRUxTOgorCQkJCXJldHVybiBnZXROdW1EeW5hbWljTGFiZWxzKCkgIT0gTlVNX0RZTkFNSUNfTEFCRUxTX0VERUZBVUxUOworCQkJY2FzZSBHcmFwaFBhY2thZ2UuR1JBUEhfX1VOUkVTT0xWRURfSURFTlRJRklBQkxFUzoKKwkJCQlyZXR1cm4gdW5yZXNvbHZlZElkZW50aWZpYWJsZXMgIT0gbnVsbCAmJiAhdW5yZXNvbHZlZElkZW50aWZpYWJsZXMuaXNFbXB0eSgpOworCQkJY2FzZSBHcmFwaFBhY2thZ2UuR1JBUEhfX0RFQ09SQVRPUlM6CisJCQkJcmV0dXJuIGRlY29yYXRvcnMgIT0gbnVsbCAmJiAhZGVjb3JhdG9ycy5pc0VtcHR5KCk7CisJCQljYXNlIEdyYXBoUGFja2FnZS5HUkFQSF9fVElNRToKKwkJCQlyZXR1cm4gdGltZSAhPSBudWxsOworCQl9CisJCXJldHVybiBzdXBlci5lSXNTZXQoZmVhdHVyZUlEKTsKKwl9CisKK30gLy8gR3JhcGhJbXBsCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoL2ltcGwvR3JhcGhQYWNrYWdlSW1wbC5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC9pbXBsL0dyYXBoUGFja2FnZUltcGwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZGU1ZTllCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC9pbXBsL0dyYXBoUGFja2FnZUltcGwuamF2YQpAQCAtMCwwICsxLDE1MTQgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmltcGw7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIAorICogQ29weXJpZ2h0IChjKSAyMDA2LCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiAKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdCAKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sIAorICogCisgKiBDb250cmlidXRvcnM6IAorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiAKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworIAoraW1wb3J0IGphdmEudXRpbC5NYXA7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUF0dHJpYnV0ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FRGF0YVR5cGU7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVFbnVtOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FR2VuZXJpY1R5cGU7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPcGVyYXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FUmVmZXJlbmNlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FY29yZVBhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLmltcGwuRVBhY2thZ2VJbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uQ29tbW9uUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLmltcGwuQ29tbW9uUGFja2FnZUltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmV4cGVyaW1lbnQuRXhwZXJpbWVudFBhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmV4cGVyaW1lbnQuaW1wbC5FeHBlcmltZW50UGFja2FnZUltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkR5bmFtaWNFZGdlTGFiZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkR5bmFtaWNMYWJlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguRHluYW1pY05vZGVMYWJlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguRWRnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguRWRnZUxhYmVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5FeGNoYW5nZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguRXhjaGFuZ2VUeXBlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5HcmFwaDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguR3JhcGhGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5HcmFwaFBhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkdyYXBoUGFydGl0aW9uZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkludGVncmF0aW9uTGFiZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkludGVncmF0aW9uTGFiZWxWYWx1ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguTGFiZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkxhYmVsVmFsdWU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLk5vZGU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLk5vZGVMYWJlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguU2ltcGxlR3JhcGhQYXJ0aXRpb25lcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguU3RhdGljRWRnZUxhYmVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5TdGF0aWNMYWJlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguU3RhdGljTm9kZUxhYmVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5VbnJlc29sdmVkSWRlbnRpZmlhYmxlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5sb2dnZXIuTG9nZ2VyUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubG9nZ2VyLmltcGwuTG9nZ2VyUGFja2FnZUltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLk1vZGVsUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuaW1wbC5Nb2RlbFBhY2thZ2VJbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5Nb2RpZmllclBhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLmltcGwuTW9kaWZpZXJQYWNrYWdlSW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlLlByZWRpY2F0ZVBhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZS5pbXBsLlByZWRpY2F0ZVBhY2thZ2VJbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zY2VuYXJpby5TY2VuYXJpb1BhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNjZW5hcmlvLmltcGwuU2NlbmFyaW9QYWNrYWdlSW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2VxdWVuY2VyLlNlcXVlbmNlclBhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNlcXVlbmNlci5pbXBsLlNlcXVlbmNlclBhY2thZ2VJbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zb2x2ZXIuU29sdmVyUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc29sdmVyLmltcGwuU29sdmVyUGFja2FnZUltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnRyaWdnZXIuVHJpZ2dlclBhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnRyaWdnZXIuaW1wbC5UcmlnZ2VyUGFja2FnZUltcGw7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIEFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBtb2RlbCA8Yj5QYWNrYWdlPC9iPi4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgR3JhcGhQYWNrYWdlSW1wbCBleHRlbmRzIEVQYWNrYWdlSW1wbCBpbXBsZW1lbnRzIEdyYXBoUGFja2FnZSB7CisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJpdmF0ZSBFQ2xhc3MgZHluYW1pY0xhYmVsRUNsYXNzID0gbnVsbDsKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByaXZhdGUgRUNsYXNzIGR5bmFtaWNOb2RlTGFiZWxFQ2xhc3MgPSBudWxsOworCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJpdmF0ZSBFQ2xhc3MgZWRnZUVDbGFzcyA9IG51bGw7CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcml2YXRlIEVDbGFzcyBncmFwaEVDbGFzcyA9IG51bGw7CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcml2YXRlIEVDbGFzcyBsYWJlbEVDbGFzcyA9IG51bGw7CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcml2YXRlIEVDbGFzcyBsYWJlbFZhbHVlRUNsYXNzID0gbnVsbDsKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByaXZhdGUgRUNsYXNzIG5vZGVFQ2xhc3MgPSBudWxsOworCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJpdmF0ZSBFQ2xhc3Mgbm9kZUxhYmVsRUNsYXNzID0gbnVsbDsKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByaXZhdGUgRUNsYXNzIHN0YXRpY05vZGVMYWJlbEVDbGFzcyA9IG51bGw7CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcml2YXRlIEVDbGFzcyB1bnJlc29sdmVkSWRlbnRpZmlhYmxlRUNsYXNzID0gbnVsbDsKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByaXZhdGUgRUNsYXNzIHVyaVRvSWRlbnRpZmlhYmxlTWFwRW50cnlFQ2xhc3MgPSBudWxsOworCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJpdmF0ZSBFQ2xhc3MgZHluYW1pY0VkZ2VMYWJlbEVDbGFzcyA9IG51bGw7CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcml2YXRlIEVDbGFzcyBlZGdlTGFiZWxFQ2xhc3MgPSBudWxsOworCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJpdmF0ZSBFQ2xhc3Mgc3RhdGljRWRnZUxhYmVsRUNsYXNzID0gbnVsbDsKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByaXZhdGUgRUNsYXNzIHVyaVRvRWRnZU1hcEVudHJ5RUNsYXNzID0gbnVsbDsKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByaXZhdGUgRUNsYXNzIHVyaVRvTm9kZU1hcEVudHJ5RUNsYXNzID0gbnVsbDsKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByaXZhdGUgRUNsYXNzIHVyaVRvTGFiZWxNYXBFbnRyeUVDbGFzcyA9IG51bGw7CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcml2YXRlIEVDbGFzcyB1cmlUb05vZGVMYWJlbE1hcEVudHJ5RUNsYXNzID0gbnVsbDsKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByaXZhdGUgRUNsYXNzIHN0YXRpY0xhYmVsRUNsYXNzID0gbnVsbDsKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByaXZhdGUgRUNsYXNzIGdyYXBoUGFydGl0aW9uZXJFQ2xhc3MgPSBudWxsOworCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJpdmF0ZSBFQ2xhc3Mgc2ltcGxlR3JhcGhQYXJ0aXRpb25lckVDbGFzcyA9IG51bGw7CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcml2YXRlIEVDbGFzcyBleGNoYW5nZUVDbGFzcyA9IG51bGw7CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcml2YXRlIEVDbGFzcyBpbnRlZ3JhdGlvbkxhYmVsRUNsYXNzID0gbnVsbDsKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByaXZhdGUgRUNsYXNzIGludGVncmF0aW9uTGFiZWxWYWx1ZUVDbGFzcyA9IG51bGw7CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcml2YXRlIEVFbnVtIGV4Y2hhbmdlVHlwZUVFbnVtID0gbnVsbDsKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByaXZhdGUgRURhdGFUeXBlIGlsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbkVEYXRhVHlwZSA9IG51bGw7CisKKwkvKioKKwkgKiBDcmVhdGVzIGFuIGluc3RhbmNlIG9mIHRoZSBtb2RlbCA8Yj5QYWNrYWdlPC9iPiwgcmVnaXN0ZXJlZCB3aXRoCisJICoge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FUGFja2FnZS5SZWdpc3RyeSBFUGFja2FnZS5SZWdpc3RyeX0gYnkgdGhlIHBhY2thZ2UKKwkgKiBwYWNrYWdlIFVSSSB2YWx1ZS4KKwkgKiA8cD5Ob3RlOiB0aGUgY29ycmVjdCB3YXkgdG8gY3JlYXRlIHRoZSBwYWNrYWdlIGlzIHZpYSB0aGUgc3RhdGljCisJICogZmFjdG9yeSBtZXRob2Qge0BsaW5rICNpbml0IGluaXQoKX0sIHdoaWNoIGFsc28gcGVyZm9ybXMKKwkgKiBpbml0aWFsaXphdGlvbiBvZiB0aGUgcGFja2FnZSwgb3IgcmV0dXJucyB0aGUgcmVnaXN0ZXJlZCBwYWNrYWdlLAorCSAqIGlmIG9uZSBhbHJlYWR5IGV4aXN0cy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVQYWNrYWdlLlJlZ2lzdHJ5CisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguR3JhcGhQYWNrYWdlI2VOU19VUkkKKwkgKiBAc2VlICNpbml0KCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJpdmF0ZSBHcmFwaFBhY2thZ2VJbXBsKCkgeworCQlzdXBlcihlTlNfVVJJLCBHcmFwaEZhY3RvcnkuZUlOU1RBTkNFKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcml2YXRlIHN0YXRpYyBib29sZWFuIGlzSW5pdGVkID0gZmFsc2U7CisKKwkvKioKKwkgKiBDcmVhdGVzLCByZWdpc3RlcnMsIGFuZCBpbml0aWFsaXplcyB0aGUgPGI+UGFja2FnZTwvYj4gZm9yIHRoaXMgbW9kZWwsIGFuZCBmb3IgYW55IG90aGVycyB1cG9uIHdoaWNoIGl0IGRlcGVuZHMuCisJICogCisJICogPHA+VGhpcyBtZXRob2QgaXMgdXNlZCB0byBpbml0aWFsaXplIHtAbGluayBHcmFwaFBhY2thZ2UjZUlOU1RBTkNFfSB3aGVuIHRoYXQgZmllbGQgaXMgYWNjZXNzZWQuCisJICogQ2xpZW50cyBzaG91bGQgbm90IGludm9rZSBpdCBkaXJlY3RseS4gSW5zdGVhZCwgdGhleSBzaG91bGQgc2ltcGx5IGFjY2VzcyB0aGF0IGZpZWxkIHRvIG9idGFpbiB0aGUgcGFja2FnZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI2VOU19VUkkKKwkgKiBAc2VlICNjcmVhdGVQYWNrYWdlQ29udGVudHMoKQorCSAqIEBzZWUgI2luaXRpYWxpemVQYWNrYWdlQ29udGVudHMoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgc3RhdGljIEdyYXBoUGFja2FnZSBpbml0KCkgeworCQlpZiAoaXNJbml0ZWQpIHJldHVybiAoR3JhcGhQYWNrYWdlKUVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVQYWNrYWdlKEdyYXBoUGFja2FnZS5lTlNfVVJJKTsKKworCQkvLyBPYnRhaW4gb3IgY3JlYXRlIGFuZCByZWdpc3RlciBwYWNrYWdlCisJCUdyYXBoUGFja2FnZUltcGwgdGhlR3JhcGhQYWNrYWdlID0gKEdyYXBoUGFja2FnZUltcGwpKEVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldChlTlNfVVJJKSBpbnN0YW5jZW9mIEdyYXBoUGFja2FnZUltcGwgPyBFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXQoZU5TX1VSSSkgOiBuZXcgR3JhcGhQYWNrYWdlSW1wbCgpKTsKKworCQlpc0luaXRlZCA9IHRydWU7CisKKwkJLy8gSW5pdGlhbGl6ZSBzaW1wbGUgZGVwZW5kZW5jaWVzCisJCUVjb3JlUGFja2FnZS5lSU5TVEFOQ0UuZUNsYXNzKCk7CisKKwkJLy8gT2J0YWluIG9yIGNyZWF0ZSBhbmQgcmVnaXN0ZXIgaW50ZXJkZXBlbmRlbmNpZXMKKwkJQ29tbW9uUGFja2FnZUltcGwgdGhlQ29tbW9uUGFja2FnZSA9IChDb21tb25QYWNrYWdlSW1wbCkoRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RVBhY2thZ2UoQ29tbW9uUGFja2FnZS5lTlNfVVJJKSBpbnN0YW5jZW9mIENvbW1vblBhY2thZ2VJbXBsID8gRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RVBhY2thZ2UoQ29tbW9uUGFja2FnZS5lTlNfVVJJKSA6IENvbW1vblBhY2thZ2UuZUlOU1RBTkNFKTsKKwkJRXhwZXJpbWVudFBhY2thZ2VJbXBsIHRoZUV4cGVyaW1lbnRQYWNrYWdlID0gKEV4cGVyaW1lbnRQYWNrYWdlSW1wbCkoRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RVBhY2thZ2UoRXhwZXJpbWVudFBhY2thZ2UuZU5TX1VSSSkgaW5zdGFuY2VvZiBFeHBlcmltZW50UGFja2FnZUltcGwgPyBFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShFeHBlcmltZW50UGFja2FnZS5lTlNfVVJJKSA6IEV4cGVyaW1lbnRQYWNrYWdlLmVJTlNUQU5DRSk7CisJCU1vZGVsUGFja2FnZUltcGwgdGhlTW9kZWxQYWNrYWdlID0gKE1vZGVsUGFja2FnZUltcGwpKEVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVQYWNrYWdlKE1vZGVsUGFja2FnZS5lTlNfVVJJKSBpbnN0YW5jZW9mIE1vZGVsUGFja2FnZUltcGwgPyBFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShNb2RlbFBhY2thZ2UuZU5TX1VSSSkgOiBNb2RlbFBhY2thZ2UuZUlOU1RBTkNFKTsKKwkJTW9kaWZpZXJQYWNrYWdlSW1wbCB0aGVNb2RpZmllclBhY2thZ2UgPSAoTW9kaWZpZXJQYWNrYWdlSW1wbCkoRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RVBhY2thZ2UoTW9kaWZpZXJQYWNrYWdlLmVOU19VUkkpIGluc3RhbmNlb2YgTW9kaWZpZXJQYWNrYWdlSW1wbCA/IEVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVQYWNrYWdlKE1vZGlmaWVyUGFja2FnZS5lTlNfVVJJKSA6IE1vZGlmaWVyUGFja2FnZS5lSU5TVEFOQ0UpOworCQlQcmVkaWNhdGVQYWNrYWdlSW1wbCB0aGVQcmVkaWNhdGVQYWNrYWdlID0gKFByZWRpY2F0ZVBhY2thZ2VJbXBsKShFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShQcmVkaWNhdGVQYWNrYWdlLmVOU19VUkkpIGluc3RhbmNlb2YgUHJlZGljYXRlUGFja2FnZUltcGwgPyBFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShQcmVkaWNhdGVQYWNrYWdlLmVOU19VUkkpIDogUHJlZGljYXRlUGFja2FnZS5lSU5TVEFOQ0UpOworCQlTY2VuYXJpb1BhY2thZ2VJbXBsIHRoZVNjZW5hcmlvUGFja2FnZSA9IChTY2VuYXJpb1BhY2thZ2VJbXBsKShFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShTY2VuYXJpb1BhY2thZ2UuZU5TX1VSSSkgaW5zdGFuY2VvZiBTY2VuYXJpb1BhY2thZ2VJbXBsID8gRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RVBhY2thZ2UoU2NlbmFyaW9QYWNrYWdlLmVOU19VUkkpIDogU2NlbmFyaW9QYWNrYWdlLmVJTlNUQU5DRSk7CisJCVNlcXVlbmNlclBhY2thZ2VJbXBsIHRoZVNlcXVlbmNlclBhY2thZ2UgPSAoU2VxdWVuY2VyUGFja2FnZUltcGwpKEVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVQYWNrYWdlKFNlcXVlbmNlclBhY2thZ2UuZU5TX1VSSSkgaW5zdGFuY2VvZiBTZXF1ZW5jZXJQYWNrYWdlSW1wbCA/IEVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVQYWNrYWdlKFNlcXVlbmNlclBhY2thZ2UuZU5TX1VSSSkgOiBTZXF1ZW5jZXJQYWNrYWdlLmVJTlNUQU5DRSk7CisJCVRyaWdnZXJQYWNrYWdlSW1wbCB0aGVUcmlnZ2VyUGFja2FnZSA9IChUcmlnZ2VyUGFja2FnZUltcGwpKEVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVQYWNrYWdlKFRyaWdnZXJQYWNrYWdlLmVOU19VUkkpIGluc3RhbmNlb2YgVHJpZ2dlclBhY2thZ2VJbXBsID8gRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RVBhY2thZ2UoVHJpZ2dlclBhY2thZ2UuZU5TX1VSSSkgOiBUcmlnZ2VyUGFja2FnZS5lSU5TVEFOQ0UpOworCQlTb2x2ZXJQYWNrYWdlSW1wbCB0aGVTb2x2ZXJQYWNrYWdlID0gKFNvbHZlclBhY2thZ2VJbXBsKShFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShTb2x2ZXJQYWNrYWdlLmVOU19VUkkpIGluc3RhbmNlb2YgU29sdmVyUGFja2FnZUltcGwgPyBFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShTb2x2ZXJQYWNrYWdlLmVOU19VUkkpIDogU29sdmVyUGFja2FnZS5lSU5TVEFOQ0UpOworCQlMb2dnZXJQYWNrYWdlSW1wbCB0aGVMb2dnZXJQYWNrYWdlID0gKExvZ2dlclBhY2thZ2VJbXBsKShFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShMb2dnZXJQYWNrYWdlLmVOU19VUkkpIGluc3RhbmNlb2YgTG9nZ2VyUGFja2FnZUltcGwgPyBFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShMb2dnZXJQYWNrYWdlLmVOU19VUkkpIDogTG9nZ2VyUGFja2FnZS5lSU5TVEFOQ0UpOworCisJCS8vIENyZWF0ZSBwYWNrYWdlIG1ldGEtZGF0YSBvYmplY3RzCisJCXRoZUdyYXBoUGFja2FnZS5jcmVhdGVQYWNrYWdlQ29udGVudHMoKTsKKwkJdGhlQ29tbW9uUGFja2FnZS5jcmVhdGVQYWNrYWdlQ29udGVudHMoKTsKKwkJdGhlRXhwZXJpbWVudFBhY2thZ2UuY3JlYXRlUGFja2FnZUNvbnRlbnRzKCk7CisJCXRoZU1vZGVsUGFja2FnZS5jcmVhdGVQYWNrYWdlQ29udGVudHMoKTsKKwkJdGhlTW9kaWZpZXJQYWNrYWdlLmNyZWF0ZVBhY2thZ2VDb250ZW50cygpOworCQl0aGVQcmVkaWNhdGVQYWNrYWdlLmNyZWF0ZVBhY2thZ2VDb250ZW50cygpOworCQl0aGVTY2VuYXJpb1BhY2thZ2UuY3JlYXRlUGFja2FnZUNvbnRlbnRzKCk7CisJCXRoZVNlcXVlbmNlclBhY2thZ2UuY3JlYXRlUGFja2FnZUNvbnRlbnRzKCk7CisJCXRoZVRyaWdnZXJQYWNrYWdlLmNyZWF0ZVBhY2thZ2VDb250ZW50cygpOworCQl0aGVTb2x2ZXJQYWNrYWdlLmNyZWF0ZVBhY2thZ2VDb250ZW50cygpOworCQl0aGVMb2dnZXJQYWNrYWdlLmNyZWF0ZVBhY2thZ2VDb250ZW50cygpOworCisJCS8vIEluaXRpYWxpemUgY3JlYXRlZCBtZXRhLWRhdGEKKwkJdGhlR3JhcGhQYWNrYWdlLmluaXRpYWxpemVQYWNrYWdlQ29udGVudHMoKTsKKwkJdGhlQ29tbW9uUGFja2FnZS5pbml0aWFsaXplUGFja2FnZUNvbnRlbnRzKCk7CisJCXRoZUV4cGVyaW1lbnRQYWNrYWdlLmluaXRpYWxpemVQYWNrYWdlQ29udGVudHMoKTsKKwkJdGhlTW9kZWxQYWNrYWdlLmluaXRpYWxpemVQYWNrYWdlQ29udGVudHMoKTsKKwkJdGhlTW9kaWZpZXJQYWNrYWdlLmluaXRpYWxpemVQYWNrYWdlQ29udGVudHMoKTsKKwkJdGhlUHJlZGljYXRlUGFja2FnZS5pbml0aWFsaXplUGFja2FnZUNvbnRlbnRzKCk7CisJCXRoZVNjZW5hcmlvUGFja2FnZS5pbml0aWFsaXplUGFja2FnZUNvbnRlbnRzKCk7CisJCXRoZVNlcXVlbmNlclBhY2thZ2UuaW5pdGlhbGl6ZVBhY2thZ2VDb250ZW50cygpOworCQl0aGVUcmlnZ2VyUGFja2FnZS5pbml0aWFsaXplUGFja2FnZUNvbnRlbnRzKCk7CisJCXRoZVNvbHZlclBhY2thZ2UuaW5pdGlhbGl6ZVBhY2thZ2VDb250ZW50cygpOworCQl0aGVMb2dnZXJQYWNrYWdlLmluaXRpYWxpemVQYWNrYWdlQ29udGVudHMoKTsKKworCQkvLyBNYXJrIG1ldGEtZGF0YSB0byBpbmRpY2F0ZSBpdCBjYW4ndCBiZSBjaGFuZ2VkCisJCXRoZUdyYXBoUGFja2FnZS5mcmVlemUoKTsKKworICAKKwkJLy8gVXBkYXRlIHRoZSByZWdpc3RyeSBhbmQgcmV0dXJuIHRoZSBwYWNrYWdlCisJCUVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLnB1dChHcmFwaFBhY2thZ2UuZU5TX1VSSSwgdGhlR3JhcGhQYWNrYWdlKTsKKwkJcmV0dXJuIHRoZUdyYXBoUGFja2FnZTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUNsYXNzIGdldER5bmFtaWNMYWJlbCgpIHsKKwkJcmV0dXJuIGR5bmFtaWNMYWJlbEVDbGFzczsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUF0dHJpYnV0ZSBnZXREeW5hbWljTGFiZWxfTmV4dFZhbHVlVmFsaWQoKSB7CisJCXJldHVybiAoRUF0dHJpYnV0ZSlkeW5hbWljTGFiZWxFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgwKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRVJlZmVyZW5jZSBnZXREeW5hbWljTGFiZWxfTmV4dFZhbHVlKCkgeworCQlyZXR1cm4gKEVSZWZlcmVuY2UpZHluYW1pY0xhYmVsRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVSZWZlcmVuY2UgZ2V0RHluYW1pY0xhYmVsX0RlY29yYXRvcigpIHsKKwkJcmV0dXJuIChFUmVmZXJlbmNlKWR5bmFtaWNMYWJlbEVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDIpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQ2xhc3MgZ2V0RHluYW1pY05vZGVMYWJlbCgpIHsKKwkJcmV0dXJuIGR5bmFtaWNOb2RlTGFiZWxFQ2xhc3M7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVDbGFzcyBnZXRFZGdlKCkgeworCQlyZXR1cm4gZWRnZUVDbGFzczsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRVJlZmVyZW5jZSBnZXRFZGdlX0EoKSB7CisJCXJldHVybiAoRVJlZmVyZW5jZSllZGdlRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVBdHRyaWJ1dGUgZ2V0RWRnZV9Ob2RlQVVSSSgpIHsKKwkJcmV0dXJuIChFQXR0cmlidXRlKWVkZ2VFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgxKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRVJlZmVyZW5jZSBnZXRFZGdlX0IoKSB7CisJCXJldHVybiAoRVJlZmVyZW5jZSllZGdlRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMik7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVBdHRyaWJ1dGUgZ2V0RWRnZV9Ob2RlQlVSSSgpIHsKKwkJcmV0dXJuIChFQXR0cmlidXRlKWVkZ2VFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgzKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRVJlZmVyZW5jZSBnZXRFZGdlX0xhYmVsKCkgeworCQlyZXR1cm4gKEVSZWZlcmVuY2UpZWRnZUVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDQpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQXR0cmlidXRlIGdldEVkZ2VfRGlyZWN0ZWQoKSB7CisJCXJldHVybiAoRUF0dHJpYnV0ZSllZGdlRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoNSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVDbGFzcyBnZXRHcmFwaCgpIHsKKwkJcmV0dXJuIGdyYXBoRUNsYXNzOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFUmVmZXJlbmNlIGdldEdyYXBoX0dyYXBoTGFiZWxzKCkgeworCQlyZXR1cm4gKEVSZWZlcmVuY2UpZ3JhcGhFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgyKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRVJlZmVyZW5jZSBnZXRHcmFwaF9Ob2RlTGFiZWxzKCkgeworCQlyZXR1cm4gKEVSZWZlcmVuY2UpZ3JhcGhFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgzKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRVJlZmVyZW5jZSBnZXRHcmFwaF9EeW5hbWljTGFiZWxzKCkgeworCQlyZXR1cm4gKEVSZWZlcmVuY2UpZ3JhcGhFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCg0KTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUF0dHJpYnV0ZSBnZXRHcmFwaF9OdW1FZGdlcygpIHsKKwkJcmV0dXJuIChFQXR0cmlidXRlKWdyYXBoRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoNSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVBdHRyaWJ1dGUgZ2V0R3JhcGhfTnVtTm9kZXMoKSB7CisJCXJldHVybiAoRUF0dHJpYnV0ZSlncmFwaEVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDYpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQXR0cmlidXRlIGdldEdyYXBoX051bUdyYXBoTGFiZWxzKCkgeworCQlyZXR1cm4gKEVBdHRyaWJ1dGUpZ3JhcGhFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCg3KTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUF0dHJpYnV0ZSBnZXRHcmFwaF9OdW1Ob2RlTGFiZWxzKCkgeworCQlyZXR1cm4gKEVBdHRyaWJ1dGUpZ3JhcGhFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCg4KTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUF0dHJpYnV0ZSBnZXRHcmFwaF9OdW1EeW5hbWljTGFiZWxzKCkgeworCQlyZXR1cm4gKEVBdHRyaWJ1dGUpZ3JhcGhFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCg5KTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRVJlZmVyZW5jZSBnZXRHcmFwaF9VbnJlc29sdmVkSWRlbnRpZmlhYmxlcygpIHsKKwkJcmV0dXJuIChFUmVmZXJlbmNlKWdyYXBoRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMTApOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFUmVmZXJlbmNlIGdldEdyYXBoX0RlY29yYXRvcnMoKSB7CisJCXJldHVybiAoRVJlZmVyZW5jZSlncmFwaEVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDExKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRVJlZmVyZW5jZSBnZXRHcmFwaF9UaW1lKCkgeworCQlyZXR1cm4gKEVSZWZlcmVuY2UpZ3JhcGhFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgxMik7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVSZWZlcmVuY2UgZ2V0R3JhcGhfTm9kZXMoKSB7CisJCXJldHVybiAoRVJlZmVyZW5jZSlncmFwaEVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDEpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFUmVmZXJlbmNlIGdldEdyYXBoX0VkZ2VzKCkgeworCQlyZXR1cm4gKEVSZWZlcmVuY2UpZ3JhcGhFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgwKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUNsYXNzIGdldExhYmVsKCkgeworCQlyZXR1cm4gbGFiZWxFQ2xhc3M7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVBdHRyaWJ1dGUgZ2V0TGFiZWxfVVJJT2ZJZGVudGlmaWFibGVUb0JlTGFiZWxlZCgpIHsKKwkJcmV0dXJuIChFQXR0cmlidXRlKWxhYmVsRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVSZWZlcmVuY2UgZ2V0TGFiZWxfQ3VycmVudFZhbHVlKCkgeworCQlyZXR1cm4gKEVSZWZlcmVuY2UpbGFiZWxFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgxKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRVJlZmVyZW5jZSBnZXRMYWJlbF9JZGVudGlmaWFibGUoKSB7CisJCXJldHVybiAoRVJlZmVyZW5jZSlsYWJlbEVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDIpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQ2xhc3MgZ2V0TGFiZWxWYWx1ZSgpIHsKKwkJcmV0dXJuIGxhYmVsVmFsdWVFQ2xhc3M7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVDbGFzcyBnZXROb2RlKCkgeworCQlyZXR1cm4gbm9kZUVDbGFzczsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRVJlZmVyZW5jZSBnZXROb2RlX0VkZ2VzKCkgeworCQlyZXR1cm4gKEVSZWZlcmVuY2Upbm9kZUVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDApOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFUmVmZXJlbmNlIGdldE5vZGVfTGFiZWxzKCkgeworCQlyZXR1cm4gKEVSZWZlcmVuY2Upbm9kZUVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDEpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQ2xhc3MgZ2V0Tm9kZUxhYmVsKCkgeworCQlyZXR1cm4gbm9kZUxhYmVsRUNsYXNzOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFUmVmZXJlbmNlIGdldE5vZGVMYWJlbF9Ob2RlKCkgeworCQlyZXR1cm4gKEVSZWZlcmVuY2Upbm9kZUxhYmVsRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVDbGFzcyBnZXRTdGF0aWNOb2RlTGFiZWwoKSB7CisJCXJldHVybiBzdGF0aWNOb2RlTGFiZWxFQ2xhc3M7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVDbGFzcyBnZXRVbnJlc29sdmVkSWRlbnRpZmlhYmxlKCkgeworCQlyZXR1cm4gdW5yZXNvbHZlZElkZW50aWZpYWJsZUVDbGFzczsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRVJlZmVyZW5jZSBnZXRVbnJlc29sdmVkSWRlbnRpZmlhYmxlX1NjZW5hcmlvKCkgeworCQlyZXR1cm4gKEVSZWZlcmVuY2UpdW5yZXNvbHZlZElkZW50aWZpYWJsZUVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDApOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFUmVmZXJlbmNlIGdldFVucmVzb2x2ZWRJZGVudGlmaWFibGVfTW9kZWwoKSB7CisJCXJldHVybiAoRVJlZmVyZW5jZSl1bnJlc29sdmVkSWRlbnRpZmlhYmxlRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVSZWZlcmVuY2UgZ2V0VW5yZXNvbHZlZElkZW50aWZpYWJsZV9HcmFwaCgpIHsKKwkJcmV0dXJuIChFUmVmZXJlbmNlKXVucmVzb2x2ZWRJZGVudGlmaWFibGVFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgyKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRVJlZmVyZW5jZSBnZXRVbnJlc29sdmVkSWRlbnRpZmlhYmxlX0lkZW50aWZpYWJsZSgpIHsKKwkJcmV0dXJuIChFUmVmZXJlbmNlKXVucmVzb2x2ZWRJZGVudGlmaWFibGVFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgzKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUF0dHJpYnV0ZSBnZXRVbnJlc29sdmVkSWRlbnRpZmlhYmxlX1VucmVzb2x2ZWRVUkkoKSB7CisJCXJldHVybiAoRUF0dHJpYnV0ZSl1bnJlc29sdmVkSWRlbnRpZmlhYmxlRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoNCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVBdHRyaWJ1dGUgZ2V0VW5yZXNvbHZlZElkZW50aWZpYWJsZV9GaWVsZE5hbWUoKSB7CisJCXJldHVybiAoRUF0dHJpYnV0ZSl1bnJlc29sdmVkSWRlbnRpZmlhYmxlRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoNSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVDbGFzcyBnZXRVUklUb0lkZW50aWZpYWJsZU1hcEVudHJ5KCkgeworCQlyZXR1cm4gdXJpVG9JZGVudGlmaWFibGVNYXBFbnRyeUVDbGFzczsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUF0dHJpYnV0ZSBnZXRVUklUb0lkZW50aWZpYWJsZU1hcEVudHJ5X0tleSgpIHsKKwkJcmV0dXJuIChFQXR0cmlidXRlKXVyaVRvSWRlbnRpZmlhYmxlTWFwRW50cnlFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgwKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRVJlZmVyZW5jZSBnZXRVUklUb0lkZW50aWZpYWJsZU1hcEVudHJ5X1ZhbHVlKCkgeworCQlyZXR1cm4gKEVSZWZlcmVuY2UpdXJpVG9JZGVudGlmaWFibGVNYXBFbnRyeUVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDEpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQ2xhc3MgZ2V0RHluYW1pY0VkZ2VMYWJlbCgpIHsKKwkJcmV0dXJuIGR5bmFtaWNFZGdlTGFiZWxFQ2xhc3M7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVDbGFzcyBnZXRFZGdlTGFiZWwoKSB7CisJCXJldHVybiBlZGdlTGFiZWxFQ2xhc3M7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVSZWZlcmVuY2UgZ2V0RWRnZUxhYmVsX0VkZ2UoKSB7CisJCXJldHVybiAoRVJlZmVyZW5jZSllZGdlTGFiZWxFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgwKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUNsYXNzIGdldFN0YXRpY0VkZ2VMYWJlbCgpIHsKKwkJcmV0dXJuIHN0YXRpY0VkZ2VMYWJlbEVDbGFzczsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUNsYXNzIGdldFVSSVRvRWRnZU1hcEVudHJ5KCkgeworCQlyZXR1cm4gdXJpVG9FZGdlTWFwRW50cnlFQ2xhc3M7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVBdHRyaWJ1dGUgZ2V0VVJJVG9FZGdlTWFwRW50cnlfS2V5KCkgeworCQlyZXR1cm4gKEVBdHRyaWJ1dGUpdXJpVG9FZGdlTWFwRW50cnlFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgwKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRVJlZmVyZW5jZSBnZXRVUklUb0VkZ2VNYXBFbnRyeV9WYWx1ZSgpIHsKKwkJcmV0dXJuIChFUmVmZXJlbmNlKXVyaVRvRWRnZU1hcEVudHJ5RUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVDbGFzcyBnZXRVUklUb05vZGVNYXBFbnRyeSgpIHsKKwkJcmV0dXJuIHVyaVRvTm9kZU1hcEVudHJ5RUNsYXNzOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQXR0cmlidXRlIGdldFVSSVRvTm9kZU1hcEVudHJ5X0tleSgpIHsKKwkJcmV0dXJuIChFQXR0cmlidXRlKXVyaVRvTm9kZU1hcEVudHJ5RUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVSZWZlcmVuY2UgZ2V0VVJJVG9Ob2RlTWFwRW50cnlfVmFsdWUoKSB7CisJCXJldHVybiAoRVJlZmVyZW5jZSl1cmlUb05vZGVNYXBFbnRyeUVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDEpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQ2xhc3MgZ2V0VVJJVG9MYWJlbE1hcEVudHJ5KCkgeworCQlyZXR1cm4gdXJpVG9MYWJlbE1hcEVudHJ5RUNsYXNzOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQXR0cmlidXRlIGdldFVSSVRvTGFiZWxNYXBFbnRyeV9LZXkoKSB7CisJCXJldHVybiAoRUF0dHJpYnV0ZSl1cmlUb0xhYmVsTWFwRW50cnlFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgwKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRVJlZmVyZW5jZSBnZXRVUklUb0xhYmVsTWFwRW50cnlfVmFsdWUoKSB7CisJCXJldHVybiAoRVJlZmVyZW5jZSl1cmlUb0xhYmVsTWFwRW50cnlFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgxKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUNsYXNzIGdldFVSSVRvTm9kZUxhYmVsTWFwRW50cnkoKSB7CisJCXJldHVybiB1cmlUb05vZGVMYWJlbE1hcEVudHJ5RUNsYXNzOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQXR0cmlidXRlIGdldFVSSVRvTm9kZUxhYmVsTWFwRW50cnlfS2V5KCkgeworCQlyZXR1cm4gKEVBdHRyaWJ1dGUpdXJpVG9Ob2RlTGFiZWxNYXBFbnRyeUVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDApOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFUmVmZXJlbmNlIGdldFVSSVRvTm9kZUxhYmVsTWFwRW50cnlfVmFsdWUoKSB7CisJCXJldHVybiAoRVJlZmVyZW5jZSl1cmlUb05vZGVMYWJlbE1hcEVudHJ5RUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVDbGFzcyBnZXRTdGF0aWNMYWJlbCgpIHsKKwkJcmV0dXJuIHN0YXRpY0xhYmVsRUNsYXNzOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQ2xhc3MgZ2V0R3JhcGhQYXJ0aXRpb25lcigpIHsKKwkJcmV0dXJuIGdyYXBoUGFydGl0aW9uZXJFQ2xhc3M7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVBdHRyaWJ1dGUgZ2V0R3JhcGhQYXJ0aXRpb25lcl9OdW1Qcm9jZXNzZXMoKSB7CisJCXJldHVybiAoRUF0dHJpYnV0ZSlncmFwaFBhcnRpdGlvbmVyRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVDbGFzcyBnZXRTaW1wbGVHcmFwaFBhcnRpdGlvbmVyKCkgeworCQlyZXR1cm4gc2ltcGxlR3JhcGhQYXJ0aXRpb25lckVDbGFzczsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUNsYXNzIGdldEV4Y2hhbmdlKCkgeworCQlyZXR1cm4gZXhjaGFuZ2VFQ2xhc3M7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVSZWZlcmVuY2UgZ2V0RXhjaGFuZ2VfT3RoZXJMYWJlbCgpIHsKKwkJcmV0dXJuIChFUmVmZXJlbmNlKWV4Y2hhbmdlRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVBdHRyaWJ1dGUgZ2V0RXhjaGFuZ2VfQ291bnQoKSB7CisJCXJldHVybiAoRUF0dHJpYnV0ZSlleGNoYW5nZUVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDEpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQXR0cmlidXRlIGdldEV4Y2hhbmdlX1R5cGUoKSB7CisJCXJldHVybiAoRUF0dHJpYnV0ZSlleGNoYW5nZUVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDIpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQ2xhc3MgZ2V0SW50ZWdyYXRpb25MYWJlbCgpIHsKKwkJcmV0dXJuIGludGVncmF0aW9uTGFiZWxFQ2xhc3M7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVSZWZlcmVuY2UgZ2V0SW50ZWdyYXRpb25MYWJlbF9EZWx0YVZhbHVlKCkgeworCQlyZXR1cm4gKEVSZWZlcmVuY2UpaW50ZWdyYXRpb25MYWJlbEVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDApOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFUmVmZXJlbmNlIGdldEludGVncmF0aW9uTGFiZWxfVGVtcFZhbHVlKCkgeworCQlyZXR1cm4gKEVSZWZlcmVuY2UpaW50ZWdyYXRpb25MYWJlbEVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDEpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFUmVmZXJlbmNlIGdldEludGVncmF0aW9uTGFiZWxfUHJvYmVWYWx1ZSgpIHsKKwkJcmV0dXJuIChFUmVmZXJlbmNlKWludGVncmF0aW9uTGFiZWxFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgyKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRVJlZmVyZW5jZSBnZXRJbnRlZ3JhdGlvbkxhYmVsX0Vycm9yU2NhbGUoKSB7CisJCXJldHVybiAoRVJlZmVyZW5jZSlpbnRlZ3JhdGlvbkxhYmVsRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMyk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVBdHRyaWJ1dGUgZ2V0SW50ZWdyYXRpb25MYWJlbF9JZGVudGlmaWVyKCkgeworCQlyZXR1cm4gKEVBdHRyaWJ1dGUpaW50ZWdyYXRpb25MYWJlbEVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDQpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQ2xhc3MgZ2V0SW50ZWdyYXRpb25MYWJlbFZhbHVlKCkgeworCQlyZXR1cm4gaW50ZWdyYXRpb25MYWJlbFZhbHVlRUNsYXNzOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFUmVmZXJlbmNlIGdldEludGVncmF0aW9uTGFiZWxWYWx1ZV9BcnJpdmFscygpIHsKKwkJcmV0dXJuIChFUmVmZXJlbmNlKWludGVncmF0aW9uTGFiZWxWYWx1ZUVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDApOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFUmVmZXJlbmNlIGdldEludGVncmF0aW9uTGFiZWxWYWx1ZV9EZXBhcnR1cmVzKCkgeworCQlyZXR1cm4gKEVSZWZlcmVuY2UpaW50ZWdyYXRpb25MYWJlbFZhbHVlRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVFbnVtIGdldEV4Y2hhbmdlVHlwZSgpIHsKKwkJcmV0dXJuIGV4Y2hhbmdlVHlwZUVFbnVtOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFRGF0YVR5cGUgZ2V0SWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCkgeworCQlyZXR1cm4gaWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uRURhdGFUeXBlOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBHcmFwaEZhY3RvcnkgZ2V0R3JhcGhGYWN0b3J5KCkgeworCQlyZXR1cm4gKEdyYXBoRmFjdG9yeSlnZXRFRmFjdG9yeUluc3RhbmNlKCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJpdmF0ZSBib29sZWFuIGlzQ3JlYXRlZCA9IGZhbHNlOworCisJLyoqCisJICogQ3JlYXRlcyB0aGUgbWV0YS1tb2RlbCBvYmplY3RzIGZvciB0aGUgcGFja2FnZS4gIFRoaXMgbWV0aG9kIGlzCisJICogZ3VhcmRlZCB0byBoYXZlIG5vIGFmZmVjdCBvbiBhbnkgaW52b2NhdGlvbiBidXQgaXRzIGZpcnN0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIGNyZWF0ZVBhY2thZ2VDb250ZW50cygpIHsKKwkJaWYgKGlzQ3JlYXRlZCkgcmV0dXJuOworCQlpc0NyZWF0ZWQgPSB0cnVlOworCisJCS8vIENyZWF0ZSBjbGFzc2VzIGFuZCB0aGVpciBmZWF0dXJlcworCQlkeW5hbWljTGFiZWxFQ2xhc3MgPSBjcmVhdGVFQ2xhc3MoRFlOQU1JQ19MQUJFTCk7CisJCWNyZWF0ZUVBdHRyaWJ1dGUoZHluYW1pY0xhYmVsRUNsYXNzLCBEWU5BTUlDX0xBQkVMX19ORVhUX1ZBTFVFX1ZBTElEKTsKKwkJY3JlYXRlRVJlZmVyZW5jZShkeW5hbWljTGFiZWxFQ2xhc3MsIERZTkFNSUNfTEFCRUxfX05FWFRfVkFMVUUpOworCQljcmVhdGVFUmVmZXJlbmNlKGR5bmFtaWNMYWJlbEVDbGFzcywgRFlOQU1JQ19MQUJFTF9fREVDT1JBVE9SKTsKKworCQlkeW5hbWljTm9kZUxhYmVsRUNsYXNzID0gY3JlYXRlRUNsYXNzKERZTkFNSUNfTk9ERV9MQUJFTCk7CisKKwkJZWRnZUVDbGFzcyA9IGNyZWF0ZUVDbGFzcyhFREdFKTsKKwkJY3JlYXRlRVJlZmVyZW5jZShlZGdlRUNsYXNzLCBFREdFX19BKTsKKwkJY3JlYXRlRUF0dHJpYnV0ZShlZGdlRUNsYXNzLCBFREdFX19OT0RFX0FVUkkpOworCQljcmVhdGVFUmVmZXJlbmNlKGVkZ2VFQ2xhc3MsIEVER0VfX0IpOworCQljcmVhdGVFQXR0cmlidXRlKGVkZ2VFQ2xhc3MsIEVER0VfX05PREVfQlVSSSk7CisJCWNyZWF0ZUVSZWZlcmVuY2UoZWRnZUVDbGFzcywgRURHRV9fTEFCRUwpOworCQljcmVhdGVFQXR0cmlidXRlKGVkZ2VFQ2xhc3MsIEVER0VfX0RJUkVDVEVEKTsKKworCQlncmFwaEVDbGFzcyA9IGNyZWF0ZUVDbGFzcyhHUkFQSCk7CisJCWNyZWF0ZUVSZWZlcmVuY2UoZ3JhcGhFQ2xhc3MsIEdSQVBIX19FREdFUyk7CisJCWNyZWF0ZUVSZWZlcmVuY2UoZ3JhcGhFQ2xhc3MsIEdSQVBIX19OT0RFUyk7CisJCWNyZWF0ZUVSZWZlcmVuY2UoZ3JhcGhFQ2xhc3MsIEdSQVBIX19HUkFQSF9MQUJFTFMpOworCQljcmVhdGVFUmVmZXJlbmNlKGdyYXBoRUNsYXNzLCBHUkFQSF9fTk9ERV9MQUJFTFMpOworCQljcmVhdGVFUmVmZXJlbmNlKGdyYXBoRUNsYXNzLCBHUkFQSF9fRFlOQU1JQ19MQUJFTFMpOworCQljcmVhdGVFQXR0cmlidXRlKGdyYXBoRUNsYXNzLCBHUkFQSF9fTlVNX0VER0VTKTsKKwkJY3JlYXRlRUF0dHJpYnV0ZShncmFwaEVDbGFzcywgR1JBUEhfX05VTV9OT0RFUyk7CisJCWNyZWF0ZUVBdHRyaWJ1dGUoZ3JhcGhFQ2xhc3MsIEdSQVBIX19OVU1fR1JBUEhfTEFCRUxTKTsKKwkJY3JlYXRlRUF0dHJpYnV0ZShncmFwaEVDbGFzcywgR1JBUEhfX05VTV9OT0RFX0xBQkVMUyk7CisJCWNyZWF0ZUVBdHRyaWJ1dGUoZ3JhcGhFQ2xhc3MsIEdSQVBIX19OVU1fRFlOQU1JQ19MQUJFTFMpOworCQljcmVhdGVFUmVmZXJlbmNlKGdyYXBoRUNsYXNzLCBHUkFQSF9fVU5SRVNPTFZFRF9JREVOVElGSUFCTEVTKTsKKwkJY3JlYXRlRVJlZmVyZW5jZShncmFwaEVDbGFzcywgR1JBUEhfX0RFQ09SQVRPUlMpOworCQljcmVhdGVFUmVmZXJlbmNlKGdyYXBoRUNsYXNzLCBHUkFQSF9fVElNRSk7CisKKwkJbGFiZWxFQ2xhc3MgPSBjcmVhdGVFQ2xhc3MoTEFCRUwpOworCQljcmVhdGVFQXR0cmlidXRlKGxhYmVsRUNsYXNzLCBMQUJFTF9fVVJJX09GX0lERU5USUZJQUJMRV9UT19CRV9MQUJFTEVEKTsKKwkJY3JlYXRlRVJlZmVyZW5jZShsYWJlbEVDbGFzcywgTEFCRUxfX0NVUlJFTlRfVkFMVUUpOworCQljcmVhdGVFUmVmZXJlbmNlKGxhYmVsRUNsYXNzLCBMQUJFTF9fSURFTlRJRklBQkxFKTsKKworCQlsYWJlbFZhbHVlRUNsYXNzID0gY3JlYXRlRUNsYXNzKExBQkVMX1ZBTFVFKTsKKworCQlub2RlRUNsYXNzID0gY3JlYXRlRUNsYXNzKE5PREUpOworCQljcmVhdGVFUmVmZXJlbmNlKG5vZGVFQ2xhc3MsIE5PREVfX0VER0VTKTsKKwkJY3JlYXRlRVJlZmVyZW5jZShub2RlRUNsYXNzLCBOT0RFX19MQUJFTFMpOworCisJCW5vZGVMYWJlbEVDbGFzcyA9IGNyZWF0ZUVDbGFzcyhOT0RFX0xBQkVMKTsKKwkJY3JlYXRlRVJlZmVyZW5jZShub2RlTGFiZWxFQ2xhc3MsIE5PREVfTEFCRUxfX05PREUpOworCisJCXN0YXRpY05vZGVMYWJlbEVDbGFzcyA9IGNyZWF0ZUVDbGFzcyhTVEFUSUNfTk9ERV9MQUJFTCk7CisKKwkJdW5yZXNvbHZlZElkZW50aWZpYWJsZUVDbGFzcyA9IGNyZWF0ZUVDbGFzcyhVTlJFU09MVkVEX0lERU5USUZJQUJMRSk7CisJCWNyZWF0ZUVSZWZlcmVuY2UodW5yZXNvbHZlZElkZW50aWZpYWJsZUVDbGFzcywgVU5SRVNPTFZFRF9JREVOVElGSUFCTEVfX1NDRU5BUklPKTsKKwkJY3JlYXRlRVJlZmVyZW5jZSh1bnJlc29sdmVkSWRlbnRpZmlhYmxlRUNsYXNzLCBVTlJFU09MVkVEX0lERU5USUZJQUJMRV9fTU9ERUwpOworCQljcmVhdGVFUmVmZXJlbmNlKHVucmVzb2x2ZWRJZGVudGlmaWFibGVFQ2xhc3MsIFVOUkVTT0xWRURfSURFTlRJRklBQkxFX19HUkFQSCk7CisJCWNyZWF0ZUVSZWZlcmVuY2UodW5yZXNvbHZlZElkZW50aWZpYWJsZUVDbGFzcywgVU5SRVNPTFZFRF9JREVOVElGSUFCTEVfX0lERU5USUZJQUJMRSk7CisJCWNyZWF0ZUVBdHRyaWJ1dGUodW5yZXNvbHZlZElkZW50aWZpYWJsZUVDbGFzcywgVU5SRVNPTFZFRF9JREVOVElGSUFCTEVfX1VOUkVTT0xWRURfVVJJKTsKKwkJY3JlYXRlRUF0dHJpYnV0ZSh1bnJlc29sdmVkSWRlbnRpZmlhYmxlRUNsYXNzLCBVTlJFU09MVkVEX0lERU5USUZJQUJMRV9fRklFTERfTkFNRSk7CisKKwkJdXJpVG9JZGVudGlmaWFibGVNYXBFbnRyeUVDbGFzcyA9IGNyZWF0ZUVDbGFzcyhVUklfVE9fSURFTlRJRklBQkxFX01BUF9FTlRSWSk7CisJCWNyZWF0ZUVBdHRyaWJ1dGUodXJpVG9JZGVudGlmaWFibGVNYXBFbnRyeUVDbGFzcywgVVJJX1RPX0lERU5USUZJQUJMRV9NQVBfRU5UUllfX0tFWSk7CisJCWNyZWF0ZUVSZWZlcmVuY2UodXJpVG9JZGVudGlmaWFibGVNYXBFbnRyeUVDbGFzcywgVVJJX1RPX0lERU5USUZJQUJMRV9NQVBfRU5UUllfX1ZBTFVFKTsKKworCQlkeW5hbWljRWRnZUxhYmVsRUNsYXNzID0gY3JlYXRlRUNsYXNzKERZTkFNSUNfRURHRV9MQUJFTCk7CisKKwkJZWRnZUxhYmVsRUNsYXNzID0gY3JlYXRlRUNsYXNzKEVER0VfTEFCRUwpOworCQljcmVhdGVFUmVmZXJlbmNlKGVkZ2VMYWJlbEVDbGFzcywgRURHRV9MQUJFTF9fRURHRSk7CisKKwkJc3RhdGljRWRnZUxhYmVsRUNsYXNzID0gY3JlYXRlRUNsYXNzKFNUQVRJQ19FREdFX0xBQkVMKTsKKworCQl1cmlUb0VkZ2VNYXBFbnRyeUVDbGFzcyA9IGNyZWF0ZUVDbGFzcyhVUklfVE9fRURHRV9NQVBfRU5UUlkpOworCQljcmVhdGVFQXR0cmlidXRlKHVyaVRvRWRnZU1hcEVudHJ5RUNsYXNzLCBVUklfVE9fRURHRV9NQVBfRU5UUllfX0tFWSk7CisJCWNyZWF0ZUVSZWZlcmVuY2UodXJpVG9FZGdlTWFwRW50cnlFQ2xhc3MsIFVSSV9UT19FREdFX01BUF9FTlRSWV9fVkFMVUUpOworCisJCXVyaVRvTm9kZU1hcEVudHJ5RUNsYXNzID0gY3JlYXRlRUNsYXNzKFVSSV9UT19OT0RFX01BUF9FTlRSWSk7CisJCWNyZWF0ZUVBdHRyaWJ1dGUodXJpVG9Ob2RlTWFwRW50cnlFQ2xhc3MsIFVSSV9UT19OT0RFX01BUF9FTlRSWV9fS0VZKTsKKwkJY3JlYXRlRVJlZmVyZW5jZSh1cmlUb05vZGVNYXBFbnRyeUVDbGFzcywgVVJJX1RPX05PREVfTUFQX0VOVFJZX19WQUxVRSk7CisKKwkJdXJpVG9MYWJlbE1hcEVudHJ5RUNsYXNzID0gY3JlYXRlRUNsYXNzKFVSSV9UT19MQUJFTF9NQVBfRU5UUlkpOworCQljcmVhdGVFQXR0cmlidXRlKHVyaVRvTGFiZWxNYXBFbnRyeUVDbGFzcywgVVJJX1RPX0xBQkVMX01BUF9FTlRSWV9fS0VZKTsKKwkJY3JlYXRlRVJlZmVyZW5jZSh1cmlUb0xhYmVsTWFwRW50cnlFQ2xhc3MsIFVSSV9UT19MQUJFTF9NQVBfRU5UUllfX1ZBTFVFKTsKKworCQl1cmlUb05vZGVMYWJlbE1hcEVudHJ5RUNsYXNzID0gY3JlYXRlRUNsYXNzKFVSSV9UT19OT0RFX0xBQkVMX01BUF9FTlRSWSk7CisJCWNyZWF0ZUVBdHRyaWJ1dGUodXJpVG9Ob2RlTGFiZWxNYXBFbnRyeUVDbGFzcywgVVJJX1RPX05PREVfTEFCRUxfTUFQX0VOVFJZX19LRVkpOworCQljcmVhdGVFUmVmZXJlbmNlKHVyaVRvTm9kZUxhYmVsTWFwRW50cnlFQ2xhc3MsIFVSSV9UT19OT0RFX0xBQkVMX01BUF9FTlRSWV9fVkFMVUUpOworCisJCXN0YXRpY0xhYmVsRUNsYXNzID0gY3JlYXRlRUNsYXNzKFNUQVRJQ19MQUJFTCk7CisKKwkJZ3JhcGhQYXJ0aXRpb25lckVDbGFzcyA9IGNyZWF0ZUVDbGFzcyhHUkFQSF9QQVJUSVRJT05FUik7CisJCWNyZWF0ZUVBdHRyaWJ1dGUoZ3JhcGhQYXJ0aXRpb25lckVDbGFzcywgR1JBUEhfUEFSVElUSU9ORVJfX05VTV9QUk9DRVNTRVMpOworCisJCXNpbXBsZUdyYXBoUGFydGl0aW9uZXJFQ2xhc3MgPSBjcmVhdGVFQ2xhc3MoU0lNUExFX0dSQVBIX1BBUlRJVElPTkVSKTsKKworCQlleGNoYW5nZUVDbGFzcyA9IGNyZWF0ZUVDbGFzcyhFWENIQU5HRSk7CisJCWNyZWF0ZUVSZWZlcmVuY2UoZXhjaGFuZ2VFQ2xhc3MsIEVYQ0hBTkdFX19PVEhFUl9MQUJFTCk7CisJCWNyZWF0ZUVBdHRyaWJ1dGUoZXhjaGFuZ2VFQ2xhc3MsIEVYQ0hBTkdFX19DT1VOVCk7CisJCWNyZWF0ZUVBdHRyaWJ1dGUoZXhjaGFuZ2VFQ2xhc3MsIEVYQ0hBTkdFX19UWVBFKTsKKworCQlpbnRlZ3JhdGlvbkxhYmVsRUNsYXNzID0gY3JlYXRlRUNsYXNzKElOVEVHUkFUSU9OX0xBQkVMKTsKKwkJY3JlYXRlRVJlZmVyZW5jZShpbnRlZ3JhdGlvbkxhYmVsRUNsYXNzLCBJTlRFR1JBVElPTl9MQUJFTF9fREVMVEFfVkFMVUUpOworCQljcmVhdGVFUmVmZXJlbmNlKGludGVncmF0aW9uTGFiZWxFQ2xhc3MsIElOVEVHUkFUSU9OX0xBQkVMX19URU1QX1ZBTFVFKTsKKwkJY3JlYXRlRVJlZmVyZW5jZShpbnRlZ3JhdGlvbkxhYmVsRUNsYXNzLCBJTlRFR1JBVElPTl9MQUJFTF9fUFJPQkVfVkFMVUUpOworCQljcmVhdGVFUmVmZXJlbmNlKGludGVncmF0aW9uTGFiZWxFQ2xhc3MsIElOVEVHUkFUSU9OX0xBQkVMX19FUlJPUl9TQ0FMRSk7CisJCWNyZWF0ZUVBdHRyaWJ1dGUoaW50ZWdyYXRpb25MYWJlbEVDbGFzcywgSU5URUdSQVRJT05fTEFCRUxfX0lERU5USUZJRVIpOworCisJCWludGVncmF0aW9uTGFiZWxWYWx1ZUVDbGFzcyA9IGNyZWF0ZUVDbGFzcyhJTlRFR1JBVElPTl9MQUJFTF9WQUxVRSk7CisJCWNyZWF0ZUVSZWZlcmVuY2UoaW50ZWdyYXRpb25MYWJlbFZhbHVlRUNsYXNzLCBJTlRFR1JBVElPTl9MQUJFTF9WQUxVRV9fQVJSSVZBTFMpOworCQljcmVhdGVFUmVmZXJlbmNlKGludGVncmF0aW9uTGFiZWxWYWx1ZUVDbGFzcywgSU5URUdSQVRJT05fTEFCRUxfVkFMVUVfX0RFUEFSVFVSRVMpOworCisJCS8vIENyZWF0ZSBlbnVtcworCQlleGNoYW5nZVR5cGVFRW51bSA9IGNyZWF0ZUVFbnVtKEVYQ0hBTkdFX1RZUEUpOworCisJCS8vIENyZWF0ZSBkYXRhIHR5cGVzCisJCWlsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbkVEYXRhVHlwZSA9IGNyZWF0ZUVEYXRhVHlwZShJTExFR0FMX0FSR1VNRU5UX0VYQ0VQVElPTik7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJpdmF0ZSBib29sZWFuIGlzSW5pdGlhbGl6ZWQgPSBmYWxzZTsKKworCS8qKgorCSAqIENvbXBsZXRlIHRoZSBpbml0aWFsaXphdGlvbiBvZiB0aGUgcGFja2FnZSBhbmQgaXRzIG1ldGEtbW9kZWwuICBUaGlzCisJICogbWV0aG9kIGlzIGd1YXJkZWQgdG8gaGF2ZSBubyBhZmZlY3Qgb24gYW55IGludm9jYXRpb24gYnV0IGl0cyBmaXJzdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBpbml0aWFsaXplUGFja2FnZUNvbnRlbnRzKCkgeworCQlpZiAoaXNJbml0aWFsaXplZCkgcmV0dXJuOworCQlpc0luaXRpYWxpemVkID0gdHJ1ZTsKKworCQkvLyBJbml0aWFsaXplIHBhY2thZ2UKKwkJc2V0TmFtZShlTkFNRSk7CisJCXNldE5zUHJlZml4KGVOU19QUkVGSVgpOworCQlzZXROc1VSSShlTlNfVVJJKTsKKworCQkvLyBPYnRhaW4gb3RoZXIgZGVwZW5kZW50IHBhY2thZ2VzCisJCU1vZGVsUGFja2FnZSB0aGVNb2RlbFBhY2thZ2UgPSAoTW9kZWxQYWNrYWdlKUVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVQYWNrYWdlKE1vZGVsUGFja2FnZS5lTlNfVVJJKTsKKwkJQ29tbW9uUGFja2FnZSB0aGVDb21tb25QYWNrYWdlID0gKENvbW1vblBhY2thZ2UpRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RVBhY2thZ2UoQ29tbW9uUGFja2FnZS5lTlNfVVJJKTsKKwkJTW9kaWZpZXJQYWNrYWdlIHRoZU1vZGlmaWVyUGFja2FnZSA9IChNb2RpZmllclBhY2thZ2UpRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RVBhY2thZ2UoTW9kaWZpZXJQYWNrYWdlLmVOU19VUkkpOworCQlFY29yZVBhY2thZ2UgdGhlRWNvcmVQYWNrYWdlID0gKEVjb3JlUGFja2FnZSlFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShFY29yZVBhY2thZ2UuZU5TX1VSSSk7CisKKwkJLy8gQ3JlYXRlIHR5cGUgcGFyYW1ldGVycworCisJCS8vIFNldCBib3VuZHMgZm9yIHR5cGUgcGFyYW1ldGVycworCisJCS8vIEFkZCBzdXBlcnR5cGVzIHRvIGNsYXNzZXMKKwkJZHluYW1pY0xhYmVsRUNsYXNzLmdldEVTdXBlclR5cGVzKCkuYWRkKHRoaXMuZ2V0TGFiZWwoKSk7CisJCWR5bmFtaWNOb2RlTGFiZWxFQ2xhc3MuZ2V0RVN1cGVyVHlwZXMoKS5hZGQodGhpcy5nZXREeW5hbWljTGFiZWwoKSk7CisJCWR5bmFtaWNOb2RlTGFiZWxFQ2xhc3MuZ2V0RVN1cGVyVHlwZXMoKS5hZGQodGhpcy5nZXROb2RlTGFiZWwoKSk7CisJCWVkZ2VFQ2xhc3MuZ2V0RVN1cGVyVHlwZXMoKS5hZGQodGhlQ29tbW9uUGFja2FnZS5nZXRJZGVudGlmaWFibGUoKSk7CisJCWVkZ2VFQ2xhc3MuZ2V0RVN1cGVyVHlwZXMoKS5hZGQodGhlTW9kaWZpZXJQYWNrYWdlLmdldE1vZGlmaWFibGUoKSk7CisJCWdyYXBoRUNsYXNzLmdldEVTdXBlclR5cGVzKCkuYWRkKHRoZUNvbW1vblBhY2thZ2UuZ2V0SWRlbnRpZmlhYmxlKCkpOworCQlsYWJlbEVDbGFzcy5nZXRFU3VwZXJUeXBlcygpLmFkZCh0aGVDb21tb25QYWNrYWdlLmdldElkZW50aWZpYWJsZSgpKTsKKwkJbGFiZWxWYWx1ZUVDbGFzcy5nZXRFU3VwZXJUeXBlcygpLmFkZCh0aGVDb21tb25QYWNrYWdlLmdldFNhbml0eUNoZWNrZXIoKSk7CisJCW5vZGVFQ2xhc3MuZ2V0RVN1cGVyVHlwZXMoKS5hZGQodGhlQ29tbW9uUGFja2FnZS5nZXRJZGVudGlmaWFibGUoKSk7CisJCW5vZGVMYWJlbEVDbGFzcy5nZXRFU3VwZXJUeXBlcygpLmFkZCh0aGlzLmdldExhYmVsKCkpOworCQlzdGF0aWNOb2RlTGFiZWxFQ2xhc3MuZ2V0RVN1cGVyVHlwZXMoKS5hZGQodGhpcy5nZXROb2RlTGFiZWwoKSk7CisJCXN0YXRpY05vZGVMYWJlbEVDbGFzcy5nZXRFU3VwZXJUeXBlcygpLmFkZCh0aGlzLmdldFN0YXRpY0xhYmVsKCkpOworCQlkeW5hbWljRWRnZUxhYmVsRUNsYXNzLmdldEVTdXBlclR5cGVzKCkuYWRkKHRoaXMuZ2V0RHluYW1pY0xhYmVsKCkpOworCQlkeW5hbWljRWRnZUxhYmVsRUNsYXNzLmdldEVTdXBlclR5cGVzKCkuYWRkKHRoaXMuZ2V0RWRnZUxhYmVsKCkpOworCQllZGdlTGFiZWxFQ2xhc3MuZ2V0RVN1cGVyVHlwZXMoKS5hZGQodGhpcy5nZXRMYWJlbCgpKTsKKwkJc3RhdGljRWRnZUxhYmVsRUNsYXNzLmdldEVTdXBlclR5cGVzKCkuYWRkKHRoaXMuZ2V0RWRnZUxhYmVsKCkpOworCQlzdGF0aWNFZGdlTGFiZWxFQ2xhc3MuZ2V0RVN1cGVyVHlwZXMoKS5hZGQodGhpcy5nZXRTdGF0aWNMYWJlbCgpKTsKKwkJc3RhdGljTGFiZWxFQ2xhc3MuZ2V0RVN1cGVyVHlwZXMoKS5hZGQodGhpcy5nZXRMYWJlbCgpKTsKKwkJc3RhdGljTGFiZWxFQ2xhc3MuZ2V0RVN1cGVyVHlwZXMoKS5hZGQodGhlTW9kaWZpZXJQYWNrYWdlLmdldE1vZGlmaWFibGUoKSk7CisJCXNpbXBsZUdyYXBoUGFydGl0aW9uZXJFQ2xhc3MuZ2V0RVN1cGVyVHlwZXMoKS5hZGQodGhpcy5nZXRHcmFwaFBhcnRpdGlvbmVyKCkpOworCQlFR2VuZXJpY1R5cGUgZzEgPSBjcmVhdGVFR2VuZXJpY1R5cGUodGhlQ29tbW9uUGFja2FnZS5nZXRDb21wYXJhYmxlKCkpOworCQlFR2VuZXJpY1R5cGUgZzIgPSBjcmVhdGVFR2VuZXJpY1R5cGUodGhpcy5nZXRFeGNoYW5nZSgpKTsKKwkJZzEuZ2V0RVR5cGVBcmd1bWVudHMoKS5hZGQoZzIpOworCQlleGNoYW5nZUVDbGFzcy5nZXRFR2VuZXJpY1N1cGVyVHlwZXMoKS5hZGQoZzEpOworCQlpbnRlZ3JhdGlvbkxhYmVsRUNsYXNzLmdldEVTdXBlclR5cGVzKCkuYWRkKHRoaXMuZ2V0RHluYW1pY05vZGVMYWJlbCgpKTsKKwkJaW50ZWdyYXRpb25MYWJlbFZhbHVlRUNsYXNzLmdldEVTdXBlclR5cGVzKCkuYWRkKHRoaXMuZ2V0TGFiZWxWYWx1ZSgpKTsKKworCQkvLyBJbml0aWFsaXplIGNsYXNzZXMgYW5kIGZlYXR1cmVzOyBhZGQgb3BlcmF0aW9ucyBhbmQgcGFyYW1ldGVycworCQlpbml0RUNsYXNzKGR5bmFtaWNMYWJlbEVDbGFzcywgRHluYW1pY0xhYmVsLmNsYXNzLCAiRHluYW1pY0xhYmVsIiwgSVNfQUJTVFJBQ1QsICFJU19JTlRFUkZBQ0UsIElTX0dFTkVSQVRFRF9JTlNUQU5DRV9DTEFTUyk7IC8vJE5PTi1OTFMtMSQKKwkJaW5pdEVBdHRyaWJ1dGUoZ2V0RHluYW1pY0xhYmVsX05leHRWYWx1ZVZhbGlkKCksIGVjb3JlUGFja2FnZS5nZXRFQm9vbGVhbigpLCAibmV4dFZhbHVlVmFsaWQiLCAiZmFsc2UiLCAwLCAxLCBEeW5hbWljTGFiZWwuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAorCQlpbml0RVJlZmVyZW5jZShnZXREeW5hbWljTGFiZWxfTmV4dFZhbHVlKCksIHRoaXMuZ2V0TGFiZWxWYWx1ZSgpLCBudWxsLCAibmV4dFZhbHVlIiwgbnVsbCwgMSwgMSwgRHluYW1pY0xhYmVsLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsIElTX0NPTVBPU0lURSwgIUlTX1JFU09MVkVfUFJPWElFUywgIUlTX1VOU0VUVEFCTEUsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOyAvLyROT04tTkxTLTEkCisJCWluaXRFUmVmZXJlbmNlKGdldER5bmFtaWNMYWJlbF9EZWNvcmF0b3IoKSwgdGhlTW9kZWxQYWNrYWdlLmdldERlY29yYXRvcigpLCB0aGVNb2RlbFBhY2thZ2UuZ2V0RGVjb3JhdG9yX0xhYmVsc1RvVXBkYXRlKCksICJkZWNvcmF0b3IiLCBudWxsLCAwLCAxLCBEeW5hbWljTGFiZWwuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX0NPTVBPU0lURSwgSVNfUkVTT0xWRV9QUk9YSUVTLCAhSVNfVU5TRVRUQUJMRSwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7IC8vJE5PTi1OTFMtMSQKKworCQlhZGRFT3BlcmF0aW9uKGR5bmFtaWNMYWJlbEVDbGFzcywgbnVsbCwgInJlc2V0IiwgMCwgMSwgSVNfVU5JUVVFLCBJU19PUkRFUkVEKTsgLy8kTk9OLU5MUy0xJAorCisJCWFkZEVPcGVyYXRpb24oZHluYW1pY0xhYmVsRUNsYXNzLCBudWxsLCAic3dpdGNoVG9OZXh0VmFsdWUiLCAwLCAxLCBJU19VTklRVUUsIElTX09SREVSRUQpOyAvLyROT04tTkxTLTEkCisKKwkJaW5pdEVDbGFzcyhkeW5hbWljTm9kZUxhYmVsRUNsYXNzLCBEeW5hbWljTm9kZUxhYmVsLmNsYXNzLCAiRHluYW1pY05vZGVMYWJlbCIsIElTX0FCU1RSQUNULCAhSVNfSU5URVJGQUNFLCBJU19HRU5FUkFURURfSU5TVEFOQ0VfQ0xBU1MpOyAvLyROT04tTkxTLTEkCisKKwkJaW5pdEVDbGFzcyhlZGdlRUNsYXNzLCBFZGdlLmNsYXNzLCAiRWRnZSIsICFJU19BQlNUUkFDVCwgIUlTX0lOVEVSRkFDRSwgSVNfR0VORVJBVEVEX0lOU1RBTkNFX0NMQVNTKTsgLy8kTk9OLU5MUy0xJAorCQlpbml0RVJlZmVyZW5jZShnZXRFZGdlX0EoKSwgdGhpcy5nZXROb2RlKCksIG51bGwsICJhIiwgbnVsbCwgMCwgMSwgRWRnZS5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfQ09NUE9TSVRFLCBJU19SRVNPTFZFX1BST1hJRVMsICFJU19VTlNFVFRBQkxFLCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsgLy8kTk9OLU5MUy0xJAorCQlpbml0RUF0dHJpYnV0ZShnZXRFZGdlX05vZGVBVVJJKCksIHRoZUNvbW1vblBhY2thZ2UuZ2V0VVJJKCksICJub2RlQVVSSSIsIG51bGwsIDAsIDEsIEVkZ2UuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7IC8vJE5PTi1OTFMtMSQKKwkJaW5pdEVSZWZlcmVuY2UoZ2V0RWRnZV9CKCksIHRoaXMuZ2V0Tm9kZSgpLCBudWxsLCAiYiIsIG51bGwsIDAsIDEsIEVkZ2UuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX0NPTVBPU0lURSwgSVNfUkVTT0xWRV9QUk9YSUVTLCAhSVNfVU5TRVRUQUJMRSwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7IC8vJE5PTi1OTFMtMSQKKwkJaW5pdEVBdHRyaWJ1dGUoZ2V0RWRnZV9Ob2RlQlVSSSgpLCB0aGVDb21tb25QYWNrYWdlLmdldFVSSSgpLCAibm9kZUJVUkkiLCBudWxsLCAwLCAxLCBFZGdlLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOyAvLyROT04tTkxTLTEkCisJCWluaXRFUmVmZXJlbmNlKGdldEVkZ2VfTGFiZWwoKSwgdGhpcy5nZXRFZGdlTGFiZWwoKSwgdGhpcy5nZXRFZGdlTGFiZWxfRWRnZSgpLCAibGFiZWwiLCBudWxsLCAwLCAxLCBFZGdlLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsIElTX0NPTVBPU0lURSwgIUlTX1JFU09MVkVfUFJPWElFUywgIUlTX1VOU0VUVEFCTEUsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOyAvLyROT04tTkxTLTEkCisJCWluaXRFQXR0cmlidXRlKGdldEVkZ2VfRGlyZWN0ZWQoKSwgZWNvcmVQYWNrYWdlLmdldEVCb29sZWFuKCksICJkaXJlY3RlZCIsICJmYWxzZSIsIDAsIDEsIEVkZ2UuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAorCisJCUVPcGVyYXRpb24gb3AgPSBhZGRFT3BlcmF0aW9uKGVkZ2VFQ2xhc3MsIHRoaXMuZ2V0Tm9kZSgpLCAiZ2V0T3RoZXJOb2RlIiwgMCwgMSwgSVNfVU5JUVVFLCBJU19PUkRFUkVEKTsgLy8kTk9OLU5MUy0xJAorCQlhZGRFUGFyYW1ldGVyKG9wLCB0aGlzLmdldE5vZGUoKSwgIm5vZGUiLCAwLCAxLCBJU19VTklRVUUsIElTX09SREVSRUQpOyAvLyROT04tTkxTLTEkCisJCWFkZEVFeGNlcHRpb24ob3AsIHRoaXMuZ2V0SWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCkpOworCisJCW9wID0gYWRkRU9wZXJhdGlvbihlZGdlRUNsYXNzLCBlY29yZVBhY2thZ2UuZ2V0RUJvb2xlYW4oKSwgImlzRGlyZWN0ZWRBdCIsIDAsIDEsIElTX1VOSVFVRSwgSVNfT1JERVJFRCk7IC8vJE5PTi1OTFMtMSQKKwkJYWRkRVBhcmFtZXRlcihvcCwgdGhpcy5nZXROb2RlKCksICJub2RlIiwgMCwgMSwgSVNfVU5JUVVFLCBJU19PUkRFUkVEKTsgLy8kTk9OLU5MUy0xJAorCisJCWluaXRFQ2xhc3MoZ3JhcGhFQ2xhc3MsIEdyYXBoLmNsYXNzLCAiR3JhcGgiLCAhSVNfQUJTVFJBQ1QsICFJU19JTlRFUkZBQ0UsIElTX0dFTkVSQVRFRF9JTlNUQU5DRV9DTEFTUyk7IC8vJE5PTi1OTFMtMSQKKwkJaW5pdEVSZWZlcmVuY2UoZ2V0R3JhcGhfRWRnZXMoKSwgdGhpcy5nZXRVUklUb0VkZ2VNYXBFbnRyeSgpLCBudWxsLCAiZWRnZXMiLCBudWxsLCAwLCAtMSwgR3JhcGguY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgSVNfQ09NUE9TSVRFLCAhSVNfUkVTT0xWRV9QUk9YSUVTLCAhSVNfVU5TRVRUQUJMRSwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7IC8vJE5PTi1OTFMtMSQKKwkJaW5pdEVSZWZlcmVuY2UoZ2V0R3JhcGhfTm9kZXMoKSwgdGhpcy5nZXRVUklUb05vZGVNYXBFbnRyeSgpLCBudWxsLCAibm9kZXMiLCBudWxsLCAwLCAtMSwgR3JhcGguY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgSVNfQ09NUE9TSVRFLCAhSVNfUkVTT0xWRV9QUk9YSUVTLCAhSVNfVU5TRVRUQUJMRSwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7IC8vJE5PTi1OTFMtMSQKKwkJaW5pdEVSZWZlcmVuY2UoZ2V0R3JhcGhfR3JhcGhMYWJlbHMoKSwgdGhpcy5nZXRVUklUb0xhYmVsTWFwRW50cnkoKSwgbnVsbCwgImdyYXBoTGFiZWxzIiwgbnVsbCwgMCwgLTEsIEdyYXBoLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsIElTX0NPTVBPU0lURSwgIUlTX1JFU09MVkVfUFJPWElFUywgIUlTX1VOU0VUVEFCTEUsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOyAvLyROT04tTkxTLTEkCisJCWluaXRFUmVmZXJlbmNlKGdldEdyYXBoX05vZGVMYWJlbHMoKSwgdGhpcy5nZXRVUklUb05vZGVMYWJlbE1hcEVudHJ5KCksIG51bGwsICJub2RlTGFiZWxzIiwgbnVsbCwgMCwgLTEsIEdyYXBoLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsIElTX0NPTVBPU0lURSwgIUlTX1JFU09MVkVfUFJPWElFUywgIUlTX1VOU0VUVEFCTEUsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOyAvLyROT04tTkxTLTEkCisJCWluaXRFUmVmZXJlbmNlKGdldEdyYXBoX0R5bmFtaWNMYWJlbHMoKSwgdGhpcy5nZXREeW5hbWljTGFiZWwoKSwgbnVsbCwgImR5bmFtaWNMYWJlbHMiLCBudWxsLCAwLCAtMSwgR3JhcGguY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX0NPTVBPU0lURSwgSVNfUkVTT0xWRV9QUk9YSUVTLCAhSVNfVU5TRVRUQUJMRSwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7IC8vJE5PTi1OTFMtMSQKKwkJaW5pdEVBdHRyaWJ1dGUoZ2V0R3JhcGhfTnVtRWRnZXMoKSwgZWNvcmVQYWNrYWdlLmdldEVJbnQoKSwgIm51bUVkZ2VzIiwgbnVsbCwgMCwgMSwgR3JhcGguY2xhc3MsIElTX1RSQU5TSUVOVCwgSVNfVk9MQVRJTEUsICFJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsgLy8kTk9OLU5MUy0xJAorCQlpbml0RUF0dHJpYnV0ZShnZXRHcmFwaF9OdW1Ob2RlcygpLCBlY29yZVBhY2thZ2UuZ2V0RUludCgpLCAibnVtTm9kZXMiLCBudWxsLCAwLCAxLCBHcmFwaC5jbGFzcywgSVNfVFJBTlNJRU5ULCBJU19WT0xBVElMRSwgIUlTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOyAvLyROT04tTkxTLTEkCisJCWluaXRFQXR0cmlidXRlKGdldEdyYXBoX051bUdyYXBoTGFiZWxzKCksIGVjb3JlUGFja2FnZS5nZXRFSW50KCksICJudW1HcmFwaExhYmVscyIsIG51bGwsIDAsIDEsIEdyYXBoLmNsYXNzLCBJU19UUkFOU0lFTlQsIElTX1ZPTEFUSUxFLCAhSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7IC8vJE5PTi1OTFMtMSQKKwkJaW5pdEVBdHRyaWJ1dGUoZ2V0R3JhcGhfTnVtTm9kZUxhYmVscygpLCBlY29yZVBhY2thZ2UuZ2V0RUludCgpLCAibnVtTm9kZUxhYmVscyIsIG51bGwsIDAsIDEsIEdyYXBoLmNsYXNzLCBJU19UUkFOU0lFTlQsIElTX1ZPTEFUSUxFLCAhSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7IC8vJE5PTi1OTFMtMSQKKwkJaW5pdEVBdHRyaWJ1dGUoZ2V0R3JhcGhfTnVtRHluYW1pY0xhYmVscygpLCBlY29yZVBhY2thZ2UuZ2V0RUludCgpLCAibnVtRHluYW1pY0xhYmVscyIsIG51bGwsIDAsIDEsIEdyYXBoLmNsYXNzLCBJU19UUkFOU0lFTlQsIElTX1ZPTEFUSUxFLCAhSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7IC8vJE5PTi1OTFMtMSQKKwkJaW5pdEVSZWZlcmVuY2UoZ2V0R3JhcGhfVW5yZXNvbHZlZElkZW50aWZpYWJsZXMoKSwgdGhpcy5nZXRVbnJlc29sdmVkSWRlbnRpZmlhYmxlKCksIG51bGwsICJ1bnJlc29sdmVkSWRlbnRpZmlhYmxlcyIsIG51bGwsIDAsIC0xLCBHcmFwaC5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCBJU19DT01QT1NJVEUsICFJU19SRVNPTFZFX1BST1hJRVMsICFJU19VTlNFVFRBQkxFLCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsgLy8kTk9OLU5MUy0xJAorCQlpbml0RVJlZmVyZW5jZShnZXRHcmFwaF9EZWNvcmF0b3JzKCksIHRoZU1vZGVsUGFja2FnZS5nZXREZWNvcmF0b3IoKSwgdGhlTW9kZWxQYWNrYWdlLmdldERlY29yYXRvcl9HcmFwaCgpLCAiZGVjb3JhdG9ycyIsIG51bGwsIDAsIC0xLCBHcmFwaC5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCBJU19DT01QT1NJVEUsICFJU19SRVNPTFZFX1BST1hJRVMsICFJU19VTlNFVFRBQkxFLCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsgLy8kTk9OLU5MUy0xJAorCQlpbml0RVJlZmVyZW5jZShnZXRHcmFwaF9UaW1lKCksIHRoZU1vZGVsUGFja2FnZS5nZXRTVEVNVGltZSgpLCBudWxsLCAidGltZSIsIG51bGwsIDAsIDEsIEdyYXBoLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsIElTX0NPTVBPU0lURSwgIUlTX1JFU09MVkVfUFJPWElFUywgIUlTX1VOU0VUVEFCTEUsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOyAvLyROT04tTkxTLTEkCisKKwkJb3AgPSBhZGRFT3BlcmF0aW9uKGdyYXBoRUNsYXNzLCB0aGlzLmdldE5vZGVMYWJlbCgpLCAiZ2V0Tm9kZUxhYmVsc0J5VHlwZVVSSSIsIDAsIC0xLCBJU19VTklRVUUsIElTX09SREVSRUQpOyAvLyROT04tTkxTLTEkCisJCWFkZEVQYXJhbWV0ZXIob3AsIHRoZUNvbW1vblBhY2thZ2UuZ2V0VVJJKCksICJ0eXBlVVJJIiwgMCwgMSwgSVNfVU5JUVVFLCBJU19PUkRFUkVEKTsgLy8kTk9OLU5MUy0xJAorCisJCW9wID0gYWRkRU9wZXJhdGlvbihncmFwaEVDbGFzcywgbnVsbCwgImFkZEdyYXBoIiwgMCwgMSwgSVNfVU5JUVVFLCBJU19PUkRFUkVEKTsgLy8kTk9OLU5MUy0xJAorCQlhZGRFUGFyYW1ldGVyKG9wLCB0aGlzLmdldEdyYXBoKCksICJncmFwaCIsIDAsIDEsIElTX1VOSVFVRSwgSVNfT1JERVJFRCk7IC8vJE5PTi1OTFMtMSQKKwkJYWRkRVBhcmFtZXRlcihvcCwgdGhlQ29tbW9uUGFja2FnZS5nZXRJZGVudGlmaWFibGVGaWx0ZXIoKSwgImZpbHRlciIsIDAsIDEsIElTX1VOSVFVRSwgSVNfT1JERVJFRCk7IC8vJE5PTi1OTFMtMSQKKworCQlvcCA9IGFkZEVPcGVyYXRpb24oZ3JhcGhFQ2xhc3MsIG51bGwsICJwdXRFZGdlIiwgMCwgMSwgSVNfVU5JUVVFLCBJU19PUkRFUkVEKTsgLy8kTk9OLU5MUy0xJAorCQlhZGRFUGFyYW1ldGVyKG9wLCB0aGlzLmdldEVkZ2UoKSwgImVkZ2UiLCAwLCAxLCBJU19VTklRVUUsIElTX09SREVSRUQpOyAvLyROT04tTkxTLTEkCisKKwkJb3AgPSBhZGRFT3BlcmF0aW9uKGdyYXBoRUNsYXNzLCB0aGlzLmdldEVkZ2UoKSwgImdldEVkZ2UiLCAwLCAxLCBJU19VTklRVUUsIElTX09SREVSRUQpOyAvLyROT04tTkxTLTEkCisJCWFkZEVQYXJhbWV0ZXIob3AsIHRoZUNvbW1vblBhY2thZ2UuZ2V0VVJJKCksICJ1cmkiLCAwLCAxLCBJU19VTklRVUUsIElTX09SREVSRUQpOyAvLyROT04tTkxTLTEkCisKKwkJb3AgPSBhZGRFT3BlcmF0aW9uKGdyYXBoRUNsYXNzLCBudWxsLCAicHV0Tm9kZSIsIDAsIDEsIElTX1VOSVFVRSwgSVNfT1JERVJFRCk7IC8vJE5PTi1OTFMtMSQKKwkJYWRkRVBhcmFtZXRlcihvcCwgdGhpcy5nZXROb2RlKCksICJub2RlIiwgMCwgMSwgSVNfVU5JUVVFLCBJU19PUkRFUkVEKTsgLy8kTk9OLU5MUy0xJAorCisJCW9wID0gYWRkRU9wZXJhdGlvbihncmFwaEVDbGFzcywgdGhpcy5nZXROb2RlKCksICJnZXROb2RlIiwgMCwgMSwgSVNfVU5JUVVFLCBJU19PUkRFUkVEKTsgLy8kTk9OLU5MUy0xJAorCQlhZGRFUGFyYW1ldGVyKG9wLCB0aGVDb21tb25QYWNrYWdlLmdldFVSSSgpLCAidXJpIiwgMCwgMSwgSVNfVU5JUVVFLCBJU19PUkRFUkVEKTsgLy8kTk9OLU5MUy0xJAorCisJCW9wID0gYWRkRU9wZXJhdGlvbihncmFwaEVDbGFzcywgbnVsbCwgInB1dE5vZGVMYWJlbCIsIDAsIDEsIElTX1VOSVFVRSwgSVNfT1JERVJFRCk7IC8vJE5PTi1OTFMtMSQKKwkJYWRkRVBhcmFtZXRlcihvcCwgdGhpcy5nZXROb2RlTGFiZWwoKSwgImxhYmVsIiwgMCwgMSwgSVNfVU5JUVVFLCBJU19PUkRFUkVEKTsgLy8kTk9OLU5MUy0xJAorCisJCW9wID0gYWRkRU9wZXJhdGlvbihncmFwaEVDbGFzcywgdGhpcy5nZXROb2RlTGFiZWwoKSwgImdldE5vZGVMYWJlbCIsIDAsIDEsIElTX1VOSVFVRSwgSVNfT1JERVJFRCk7IC8vJE5PTi1OTFMtMSQKKwkJYWRkRVBhcmFtZXRlcihvcCwgdGhlQ29tbW9uUGFja2FnZS5nZXRVUkkoKSwgInVyaSIsIDAsIDEsIElTX1VOSVFVRSwgSVNfT1JERVJFRCk7IC8vJE5PTi1OTFMtMSQKKworCQlvcCA9IGFkZEVPcGVyYXRpb24oZ3JhcGhFQ2xhc3MsIG51bGwsICJwdXRHcmFwaExhYmVsIiwgMCwgMSwgSVNfVU5JUVVFLCBJU19PUkRFUkVEKTsgLy8kTk9OLU5MUy0xJAorCQlhZGRFUGFyYW1ldGVyKG9wLCB0aGlzLmdldExhYmVsKCksICJsYWJlbCIsIDAsIDEsIElTX1VOSVFVRSwgSVNfT1JERVJFRCk7IC8vJE5PTi1OTFMtMSQKKworCQlvcCA9IGFkZEVPcGVyYXRpb24oZ3JhcGhFQ2xhc3MsIHRoaXMuZ2V0TGFiZWwoKSwgImdldEdyYXBoTGFiZWwiLCAwLCAxLCBJU19VTklRVUUsIElTX09SREVSRUQpOyAvLyROT04tTkxTLTEkCisJCWFkZEVQYXJhbWV0ZXIob3AsIHRoZUNvbW1vblBhY2thZ2UuZ2V0VVJJKCksICJ1cmkiLCAwLCAxLCBJU19VTklRVUUsIElTX09SREVSRUQpOyAvLyROT04tTkxTLTEkCisKKwkJb3AgPSBhZGRFT3BlcmF0aW9uKGdyYXBoRUNsYXNzLCBudWxsLCAiYWRkRHluYW1pY0xhYmVsIiwgMCwgMSwgSVNfVU5JUVVFLCBJU19PUkRFUkVEKTsgLy8kTk9OLU5MUy0xJAorCQlhZGRFUGFyYW1ldGVyKG9wLCB0aGlzLmdldER5bmFtaWNMYWJlbCgpLCAiZHluYW1pY2xhYmVsIiwgMCwgMSwgSVNfVU5JUVVFLCBJU19PUkRFUkVEKTsgLy8kTk9OLU5MUy0xJAorCisJCW9wID0gYWRkRU9wZXJhdGlvbihncmFwaEVDbGFzcywgbnVsbCwgInN3aXRjaFRvTmV4dFZhbHVlIiwgMCwgMSwgSVNfVU5JUVVFLCBJU19PUkRFUkVEKTsgLy8kTk9OLU5MUy0xJAorCQlhZGRFUGFyYW1ldGVyKG9wLCB0aGVNb2RlbFBhY2thZ2UuZ2V0U1RFTVRpbWUoKSwgImN1cnJlbnRUaW1lIiwgMCwgMSwgSVNfVU5JUVVFLCBJU19PUkRFUkVEKTsgLy8kTk9OLU5MUy0xJAorCisJCWluaXRFQ2xhc3MobGFiZWxFQ2xhc3MsIExhYmVsLmNsYXNzLCAiTGFiZWwiLCBJU19BQlNUUkFDVCwgIUlTX0lOVEVSRkFDRSwgSVNfR0VORVJBVEVEX0lOU1RBTkNFX0NMQVNTKTsgLy8kTk9OLU5MUy0xJAorCQlpbml0RUF0dHJpYnV0ZShnZXRMYWJlbF9VUklPZklkZW50aWZpYWJsZVRvQmVMYWJlbGVkKCksIHRoZUNvbW1vblBhY2thZ2UuZ2V0VVJJKCksICJ1UklPZklkZW50aWZpYWJsZVRvQmVMYWJlbGVkIiwgbnVsbCwgMCwgMSwgTGFiZWwuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7IC8vJE5PTi1OTFMtMSQKKwkJaW5pdEVSZWZlcmVuY2UoZ2V0TGFiZWxfQ3VycmVudFZhbHVlKCksIHRoaXMuZ2V0TGFiZWxWYWx1ZSgpLCBudWxsLCAiY3VycmVudFZhbHVlIiwgbnVsbCwgMSwgMSwgTGFiZWwuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgSVNfQ09NUE9TSVRFLCAhSVNfUkVTT0xWRV9QUk9YSUVTLCAhSVNfVU5TRVRUQUJMRSwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7IC8vJE5PTi1OTFMtMSQKKwkJaW5pdEVSZWZlcmVuY2UoZ2V0TGFiZWxfSWRlbnRpZmlhYmxlKCksIHRoZUNvbW1vblBhY2thZ2UuZ2V0SWRlbnRpZmlhYmxlKCksIG51bGwsICJpZGVudGlmaWFibGUiLCBudWxsLCAwLCAxLCBMYWJlbC5jbGFzcywgSVNfVFJBTlNJRU5ULCBJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX0NPTVBPU0lURSwgSVNfUkVTT0xWRV9QUk9YSUVTLCAhSVNfVU5TRVRUQUJMRSwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7IC8vJE5PTi1OTFMtMSQKKworCQlpbml0RUNsYXNzKGxhYmVsVmFsdWVFQ2xhc3MsIExhYmVsVmFsdWUuY2xhc3MsICJMYWJlbFZhbHVlIiwgSVNfQUJTVFJBQ1QsICFJU19JTlRFUkZBQ0UsIElTX0dFTkVSQVRFRF9JTlNUQU5DRV9DTEFTUyk7IC8vJE5PTi1OTFMtMSQKKworCQlhZGRFT3BlcmF0aW9uKGxhYmVsVmFsdWVFQ2xhc3MsIG51bGwsICJyZXNldCIsIDAsIDEsIElTX1VOSVFVRSwgSVNfT1JERVJFRCk7IC8vJE5PTi1OTFMtMSQKKworCQlvcCA9IGFkZEVPcGVyYXRpb24obGFiZWxWYWx1ZUVDbGFzcywgdGhlRWNvcmVQYWNrYWdlLmdldEVCb29sZWFuKCksICJzYW1lVmFsdWUiLCAwLCAxLCBJU19VTklRVUUsIElTX09SREVSRUQpOyAvLyROT04tTkxTLTEkCisJCWFkZEVQYXJhbWV0ZXIob3AsIHRoaXMuZ2V0TGFiZWxWYWx1ZSgpLCAib3RoZXJMYWJlbFZhbHVlIiwgMCwgMSwgSVNfVU5JUVVFLCBJU19PUkRFUkVEKTsgLy8kTk9OLU5MUy0xJAorCisJCWluaXRFQ2xhc3Mobm9kZUVDbGFzcywgTm9kZS5jbGFzcywgIk5vZGUiLCAhSVNfQUJTVFJBQ1QsICFJU19JTlRFUkZBQ0UsIElTX0dFTkVSQVRFRF9JTlNUQU5DRV9DTEFTUyk7IC8vJE5PTi1OTFMtMSQKKwkJaW5pdEVSZWZlcmVuY2UoZ2V0Tm9kZV9FZGdlcygpLCB0aGlzLmdldEVkZ2UoKSwgbnVsbCwgImVkZ2VzIiwgbnVsbCwgMCwgLTEsIE5vZGUuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX0NPTVBPU0lURSwgSVNfUkVTT0xWRV9QUk9YSUVTLCAhSVNfVU5TRVRUQUJMRSwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7IC8vJE5PTi1OTFMtMSQKKwkJaW5pdEVSZWZlcmVuY2UoZ2V0Tm9kZV9MYWJlbHMoKSwgdGhpcy5nZXROb2RlTGFiZWwoKSwgdGhpcy5nZXROb2RlTGFiZWxfTm9kZSgpLCAibGFiZWxzIiwgbnVsbCwgMCwgLTEsIE5vZGUuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX0NPTVBPU0lURSwgSVNfUkVTT0xWRV9QUk9YSUVTLCAhSVNfVU5TRVRUQUJMRSwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7IC8vJE5PTi1OTFMtMSQKKworCQlpbml0RUNsYXNzKG5vZGVMYWJlbEVDbGFzcywgTm9kZUxhYmVsLmNsYXNzLCAiTm9kZUxhYmVsIiwgSVNfQUJTVFJBQ1QsICFJU19JTlRFUkZBQ0UsIElTX0dFTkVSQVRFRF9JTlNUQU5DRV9DTEFTUyk7IC8vJE5PTi1OTFMtMSQKKwkJaW5pdEVSZWZlcmVuY2UoZ2V0Tm9kZUxhYmVsX05vZGUoKSwgdGhpcy5nZXROb2RlKCksIHRoaXMuZ2V0Tm9kZV9MYWJlbHMoKSwgIm5vZGUiLCBudWxsLCAwLCAxLCBOb2RlTGFiZWwuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX0NPTVBPU0lURSwgSVNfUkVTT0xWRV9QUk9YSUVTLCAhSVNfVU5TRVRUQUJMRSwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7IC8vJE5PTi1OTFMtMSQKKworCQlpbml0RUNsYXNzKHN0YXRpY05vZGVMYWJlbEVDbGFzcywgU3RhdGljTm9kZUxhYmVsLmNsYXNzLCAiU3RhdGljTm9kZUxhYmVsIiwgSVNfQUJTVFJBQ1QsICFJU19JTlRFUkZBQ0UsIElTX0dFTkVSQVRFRF9JTlNUQU5DRV9DTEFTUyk7IC8vJE5PTi1OTFMtMSQKKworCQlpbml0RUNsYXNzKHVucmVzb2x2ZWRJZGVudGlmaWFibGVFQ2xhc3MsIFVucmVzb2x2ZWRJZGVudGlmaWFibGUuY2xhc3MsICJVbnJlc29sdmVkSWRlbnRpZmlhYmxlIiwgIUlTX0FCU1RSQUNULCAhSVNfSU5URVJGQUNFLCBJU19HRU5FUkFURURfSU5TVEFOQ0VfQ0xBU1MpOyAvLyROT04tTkxTLTEkCisJCWluaXRFUmVmZXJlbmNlKGdldFVucmVzb2x2ZWRJZGVudGlmaWFibGVfU2NlbmFyaW8oKSwgdGhlQ29tbW9uUGFja2FnZS5nZXRJZGVudGlmaWFibGUoKSwgbnVsbCwgInNjZW5hcmlvIiwgbnVsbCwgMCwgMSwgVW5yZXNvbHZlZElkZW50aWZpYWJsZS5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfQ09NUE9TSVRFLCBJU19SRVNPTFZFX1BST1hJRVMsICFJU19VTlNFVFRBQkxFLCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsgLy8kTk9OLU5MUy0xJAorCQlpbml0RVJlZmVyZW5jZShnZXRVbnJlc29sdmVkSWRlbnRpZmlhYmxlX01vZGVsKCksIHRoZUNvbW1vblBhY2thZ2UuZ2V0SWRlbnRpZmlhYmxlKCksIG51bGwsICJtb2RlbCIsIG51bGwsIDAsIDEsIFVucmVzb2x2ZWRJZGVudGlmaWFibGUuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX0NPTVBPU0lURSwgSVNfUkVTT0xWRV9QUk9YSUVTLCAhSVNfVU5TRVRUQUJMRSwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7IC8vJE5PTi1OTFMtMSQKKwkJaW5pdEVSZWZlcmVuY2UoZ2V0VW5yZXNvbHZlZElkZW50aWZpYWJsZV9HcmFwaCgpLCB0aGVDb21tb25QYWNrYWdlLmdldElkZW50aWZpYWJsZSgpLCBudWxsLCAiZ3JhcGgiLCBudWxsLCAwLCAxLCBVbnJlc29sdmVkSWRlbnRpZmlhYmxlLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19DT01QT1NJVEUsIElTX1JFU09MVkVfUFJPWElFUywgIUlTX1VOU0VUVEFCTEUsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOyAvLyROT04tTkxTLTEkCisJCWluaXRFUmVmZXJlbmNlKGdldFVucmVzb2x2ZWRJZGVudGlmaWFibGVfSWRlbnRpZmlhYmxlKCksIHRoZUNvbW1vblBhY2thZ2UuZ2V0SWRlbnRpZmlhYmxlKCksIG51bGwsICJpZGVudGlmaWFibGUiLCBudWxsLCAwLCAxLCBVbnJlc29sdmVkSWRlbnRpZmlhYmxlLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19DT01QT1NJVEUsIElTX1JFU09MVkVfUFJPWElFUywgIUlTX1VOU0VUVEFCTEUsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOyAvLyROT04tTkxTLTEkCisJCWluaXRFQXR0cmlidXRlKGdldFVucmVzb2x2ZWRJZGVudGlmaWFibGVfVW5yZXNvbHZlZFVSSSgpLCB0aGVDb21tb25QYWNrYWdlLmdldFVSSSgpLCAidW5yZXNvbHZlZFVSSSIsIG51bGwsIDAsIDEsIFVucmVzb2x2ZWRJZGVudGlmaWFibGUuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7IC8vJE5PTi1OTFMtMSQKKwkJaW5pdEVBdHRyaWJ1dGUoZ2V0VW5yZXNvbHZlZElkZW50aWZpYWJsZV9GaWVsZE5hbWUoKSwgZWNvcmVQYWNrYWdlLmdldEVTdHJpbmcoKSwgImZpZWxkTmFtZSIsIG51bGwsIDAsIDEsIFVucmVzb2x2ZWRJZGVudGlmaWFibGUuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7IC8vJE5PTi1OTFMtMSQKKworCQlpbml0RUNsYXNzKHVyaVRvSWRlbnRpZmlhYmxlTWFwRW50cnlFQ2xhc3MsIE1hcC5FbnRyeS5jbGFzcywgIlVSSVRvSWRlbnRpZmlhYmxlTWFwRW50cnkiLCAhSVNfQUJTVFJBQ1QsICFJU19JTlRFUkZBQ0UsICFJU19HRU5FUkFURURfSU5TVEFOQ0VfQ0xBU1MpOyAvLyROT04tTkxTLTEkCisJCWluaXRFQXR0cmlidXRlKGdldFVSSVRvSWRlbnRpZmlhYmxlTWFwRW50cnlfS2V5KCksIHRoZUNvbW1vblBhY2thZ2UuZ2V0VVJJKCksICJrZXkiLCBudWxsLCAwLCAxLCBNYXAuRW50cnkuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7IC8vJE5PTi1OTFMtMSQKKwkJaW5pdEVSZWZlcmVuY2UoZ2V0VVJJVG9JZGVudGlmaWFibGVNYXBFbnRyeV9WYWx1ZSgpLCB0aGVDb21tb25QYWNrYWdlLmdldElkZW50aWZpYWJsZSgpLCBudWxsLCAidmFsdWUiLCBudWxsLCAwLCAxLCBNYXAuRW50cnkuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgSVNfQ09NUE9TSVRFLCAhSVNfUkVTT0xWRV9QUk9YSUVTLCAhSVNfVU5TRVRUQUJMRSwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7IC8vJE5PTi1OTFMtMSQKKworCQlpbml0RUNsYXNzKGR5bmFtaWNFZGdlTGFiZWxFQ2xhc3MsIER5bmFtaWNFZGdlTGFiZWwuY2xhc3MsICJEeW5hbWljRWRnZUxhYmVsIiwgSVNfQUJTVFJBQ1QsICFJU19JTlRFUkZBQ0UsIElTX0dFTkVSQVRFRF9JTlNUQU5DRV9DTEFTUyk7IC8vJE5PTi1OTFMtMSQKKworCQlpbml0RUNsYXNzKGVkZ2VMYWJlbEVDbGFzcywgRWRnZUxhYmVsLmNsYXNzLCAiRWRnZUxhYmVsIiwgSVNfQUJTVFJBQ1QsICFJU19JTlRFUkZBQ0UsIElTX0dFTkVSQVRFRF9JTlNUQU5DRV9DTEFTUyk7IC8vJE5PTi1OTFMtMSQKKwkJaW5pdEVSZWZlcmVuY2UoZ2V0RWRnZUxhYmVsX0VkZ2UoKSwgdGhpcy5nZXRFZGdlKCksIHRoaXMuZ2V0RWRnZV9MYWJlbCgpLCAiZWRnZSIsIG51bGwsIDAsIDEsIEVkZ2VMYWJlbC5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfQ09NUE9TSVRFLCAhSVNfUkVTT0xWRV9QUk9YSUVTLCAhSVNfVU5TRVRUQUJMRSwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7IC8vJE5PTi1OTFMtMSQKKworCQlpbml0RUNsYXNzKHN0YXRpY0VkZ2VMYWJlbEVDbGFzcywgU3RhdGljRWRnZUxhYmVsLmNsYXNzLCAiU3RhdGljRWRnZUxhYmVsIiwgSVNfQUJTVFJBQ1QsICFJU19JTlRFUkZBQ0UsIElTX0dFTkVSQVRFRF9JTlNUQU5DRV9DTEFTUyk7IC8vJE5PTi1OTFMtMSQKKworCQlpbml0RUNsYXNzKHVyaVRvRWRnZU1hcEVudHJ5RUNsYXNzLCBNYXAuRW50cnkuY2xhc3MsICJVUklUb0VkZ2VNYXBFbnRyeSIsICFJU19BQlNUUkFDVCwgIUlTX0lOVEVSRkFDRSwgIUlTX0dFTkVSQVRFRF9JTlNUQU5DRV9DTEFTUyk7IC8vJE5PTi1OTFMtMSQKKwkJaW5pdEVBdHRyaWJ1dGUoZ2V0VVJJVG9FZGdlTWFwRW50cnlfS2V5KCksIHRoZUNvbW1vblBhY2thZ2UuZ2V0VVJJKCksICJrZXkiLCBudWxsLCAwLCAxLCBNYXAuRW50cnkuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7IC8vJE5PTi1OTFMtMSQKKwkJaW5pdEVSZWZlcmVuY2UoZ2V0VVJJVG9FZGdlTWFwRW50cnlfVmFsdWUoKSwgdGhpcy5nZXRFZGdlKCksIG51bGwsICJ2YWx1ZSIsIG51bGwsIDAsIDEsIE1hcC5FbnRyeS5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCBJU19DT01QT1NJVEUsICFJU19SRVNPTFZFX1BST1hJRVMsICFJU19VTlNFVFRBQkxFLCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsgLy8kTk9OLU5MUy0xJAorCisJCWluaXRFQ2xhc3ModXJpVG9Ob2RlTWFwRW50cnlFQ2xhc3MsIE1hcC5FbnRyeS5jbGFzcywgIlVSSVRvTm9kZU1hcEVudHJ5IiwgIUlTX0FCU1RSQUNULCAhSVNfSU5URVJGQUNFLCAhSVNfR0VORVJBVEVEX0lOU1RBTkNFX0NMQVNTKTsgLy8kTk9OLU5MUy0xJAorCQlpbml0RUF0dHJpYnV0ZShnZXRVUklUb05vZGVNYXBFbnRyeV9LZXkoKSwgdGhlQ29tbW9uUGFja2FnZS5nZXRVUkkoKSwgImtleSIsIG51bGwsIDAsIDEsIE1hcC5FbnRyeS5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsgLy8kTk9OLU5MUy0xJAorCQlpbml0RVJlZmVyZW5jZShnZXRVUklUb05vZGVNYXBFbnRyeV9WYWx1ZSgpLCB0aGlzLmdldE5vZGUoKSwgbnVsbCwgInZhbHVlIiwgbnVsbCwgMCwgMSwgTWFwLkVudHJ5LmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsIElTX0NPTVBPU0lURSwgIUlTX1JFU09MVkVfUFJPWElFUywgIUlTX1VOU0VUVEFCTEUsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOyAvLyROT04tTkxTLTEkCisKKwkJaW5pdEVDbGFzcyh1cmlUb0xhYmVsTWFwRW50cnlFQ2xhc3MsIE1hcC5FbnRyeS5jbGFzcywgIlVSSVRvTGFiZWxNYXBFbnRyeSIsICFJU19BQlNUUkFDVCwgIUlTX0lOVEVSRkFDRSwgIUlTX0dFTkVSQVRFRF9JTlNUQU5DRV9DTEFTUyk7IC8vJE5PTi1OTFMtMSQKKwkJaW5pdEVBdHRyaWJ1dGUoZ2V0VVJJVG9MYWJlbE1hcEVudHJ5X0tleSgpLCB0aGVDb21tb25QYWNrYWdlLmdldFVSSSgpLCAia2V5IiwgbnVsbCwgMCwgMSwgTWFwLkVudHJ5LmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOyAvLyROT04tTkxTLTEkCisJCWluaXRFUmVmZXJlbmNlKGdldFVSSVRvTGFiZWxNYXBFbnRyeV9WYWx1ZSgpLCB0aGlzLmdldExhYmVsKCksIG51bGwsICJ2YWx1ZSIsIG51bGwsIDAsIDEsIE1hcC5FbnRyeS5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCBJU19DT01QT1NJVEUsICFJU19SRVNPTFZFX1BST1hJRVMsICFJU19VTlNFVFRBQkxFLCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsgLy8kTk9OLU5MUy0xJAorCisJCWluaXRFQ2xhc3ModXJpVG9Ob2RlTGFiZWxNYXBFbnRyeUVDbGFzcywgTWFwLkVudHJ5LmNsYXNzLCAiVVJJVG9Ob2RlTGFiZWxNYXBFbnRyeSIsICFJU19BQlNUUkFDVCwgIUlTX0lOVEVSRkFDRSwgIUlTX0dFTkVSQVRFRF9JTlNUQU5DRV9DTEFTUyk7IC8vJE5PTi1OTFMtMSQKKwkJaW5pdEVBdHRyaWJ1dGUoZ2V0VVJJVG9Ob2RlTGFiZWxNYXBFbnRyeV9LZXkoKSwgdGhlQ29tbW9uUGFja2FnZS5nZXRVUkkoKSwgImtleSIsIG51bGwsIDAsIDEsIE1hcC5FbnRyeS5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsgLy8kTk9OLU5MUy0xJAorCQlpbml0RVJlZmVyZW5jZShnZXRVUklUb05vZGVMYWJlbE1hcEVudHJ5X1ZhbHVlKCksIHRoaXMuZ2V0Tm9kZUxhYmVsKCksIG51bGwsICJ2YWx1ZSIsIG51bGwsIDAsIDEsIE1hcC5FbnRyeS5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCBJU19DT01QT1NJVEUsICFJU19SRVNPTFZFX1BST1hJRVMsICFJU19VTlNFVFRBQkxFLCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsgLy8kTk9OLU5MUy0xJAorCisJCWluaXRFQ2xhc3Moc3RhdGljTGFiZWxFQ2xhc3MsIFN0YXRpY0xhYmVsLmNsYXNzLCAiU3RhdGljTGFiZWwiLCBJU19BQlNUUkFDVCwgIUlTX0lOVEVSRkFDRSwgSVNfR0VORVJBVEVEX0lOU1RBTkNFX0NMQVNTKTsgLy8kTk9OLU5MUy0xJAorCisJCWluaXRFQ2xhc3MoZ3JhcGhQYXJ0aXRpb25lckVDbGFzcywgR3JhcGhQYXJ0aXRpb25lci5jbGFzcywgIkdyYXBoUGFydGl0aW9uZXIiLCBJU19BQlNUUkFDVCwgIUlTX0lOVEVSRkFDRSwgSVNfR0VORVJBVEVEX0lOU1RBTkNFX0NMQVNTKTsgLy8kTk9OLU5MUy0xJAorCQlpbml0RUF0dHJpYnV0ZShnZXRHcmFwaFBhcnRpdGlvbmVyX051bVByb2Nlc3NlcygpLCB0aGVFY29yZVBhY2thZ2UuZ2V0RUludCgpLCAibnVtUHJvY2Vzc2VzIiwgIjEiLCAwLCAxLCBHcmFwaFBhcnRpdGlvbmVyLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKKworCQlvcCA9IGFkZEVPcGVyYXRpb24oZ3JhcGhQYXJ0aXRpb25lckVDbGFzcywgbnVsbCwgInBhcnRpdGlvbkRlY29yYXRvckxhYmVscyIsIDAsIDEsIElTX1VOSVFVRSwgSVNfT1JERVJFRCk7IC8vJE5PTi1OTFMtMSQKKwkJYWRkRVBhcmFtZXRlcihvcCwgdGhlTW9kZWxQYWNrYWdlLmdldERlY29yYXRvcigpLCAiZGVjb3JhdG9yIiwgMCwgMSwgSVNfVU5JUVVFLCBJU19PUkRFUkVEKTsgLy8kTk9OLU5MUy0xJAorCQlhZGRFUGFyYW1ldGVyKG9wLCB0aGVFY29yZVBhY2thZ2UuZ2V0RUludCgpLCAicHJvY2Vzc1JhbmsiLCAwLCAxLCBJU19VTklRVUUsIElTX09SREVSRUQpOyAvLyROT04tTkxTLTEkCisJCWcxID0gY3JlYXRlRUdlbmVyaWNUeXBlKHRoZUVjb3JlUGFja2FnZS5nZXRFRUxpc3QoKSk7CisJCWcyID0gY3JlYXRlRUdlbmVyaWNUeXBlKHRoaXMuZ2V0RHluYW1pY0xhYmVsKCkpOworCQlnMS5nZXRFVHlwZUFyZ3VtZW50cygpLmFkZChnMik7CisJCWluaXRFT3BlcmF0aW9uKG9wLCBnMSk7CisKKwkJb3AgPSBhZGRFT3BlcmF0aW9uKGdyYXBoUGFydGl0aW9uZXJFQ2xhc3MsIG51bGwsICJwYXJ0aXRpb25EZWNvcmF0b3JMYWJlbHMiLCAwLCAxLCBJU19VTklRVUUsIElTX09SREVSRUQpOyAvLyROT04tTkxTLTEkCisJCWFkZEVQYXJhbWV0ZXIob3AsIHRoZU1vZGVsUGFja2FnZS5nZXREZWNvcmF0b3IoKSwgImRlY29yYXRvciIsIDAsIDEsIElTX1VOSVFVRSwgSVNfT1JERVJFRCk7IC8vJE5PTi1OTFMtMSQKKwkJZzEgPSBjcmVhdGVFR2VuZXJpY1R5cGUodGhlRWNvcmVQYWNrYWdlLmdldEVFTGlzdCgpKTsKKwkJZzIgPSBjcmVhdGVFR2VuZXJpY1R5cGUodGhpcy5nZXREeW5hbWljTGFiZWwoKSk7CisJCWcxLmdldEVUeXBlQXJndW1lbnRzKCkuYWRkKGcyKTsKKwkJaW5pdEVPcGVyYXRpb24ob3AsIGcxKTsKKworCQlvcCA9IGFkZEVPcGVyYXRpb24oZ3JhcGhQYXJ0aXRpb25lckVDbGFzcywgdGhlRWNvcmVQYWNrYWdlLmdldEVCb29sZWFuKCksICJpc01hbmFnZWQiLCAwLCAxLCBJU19VTklRVUUsIElTX09SREVSRUQpOyAvLyROT04tTkxTLTEkCisJCWFkZEVQYXJhbWV0ZXIob3AsIHRoZUNvbW1vblBhY2thZ2UuZ2V0SWRlbnRpZmlhYmxlKCksICJpZGVudGlmaWFibGUiLCAwLCAxLCBJU19VTklRVUUsIElTX09SREVSRUQpOyAvLyROT04tTkxTLTEkCisKKwkJaW5pdEVDbGFzcyhzaW1wbGVHcmFwaFBhcnRpdGlvbmVyRUNsYXNzLCBTaW1wbGVHcmFwaFBhcnRpdGlvbmVyLmNsYXNzLCAiU2ltcGxlR3JhcGhQYXJ0aXRpb25lciIsICFJU19BQlNUUkFDVCwgIUlTX0lOVEVSRkFDRSwgSVNfR0VORVJBVEVEX0lOU1RBTkNFX0NMQVNTKTsgLy8kTk9OLU5MUy0xJAorCisJCWluaXRFQ2xhc3MoZXhjaGFuZ2VFQ2xhc3MsIEV4Y2hhbmdlLmNsYXNzLCAiRXhjaGFuZ2UiLCAhSVNfQUJTVFJBQ1QsICFJU19JTlRFUkZBQ0UsIElTX0dFTkVSQVRFRF9JTlNUQU5DRV9DTEFTUyk7IC8vJE5PTi1OTFMtMSQKKwkJaW5pdEVSZWZlcmVuY2UoZ2V0RXhjaGFuZ2VfT3RoZXJMYWJlbCgpLCB0aGlzLmdldExhYmVsKCksIG51bGwsICJvdGhlckxhYmVsIiwgbnVsbCwgMCwgMSwgRXhjaGFuZ2UuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX0NPTVBPU0lURSwgSVNfUkVTT0xWRV9QUk9YSUVTLCAhSVNfVU5TRVRUQUJMRSwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7IC8vJE5PTi1OTFMtMSQKKwkJaW5pdEVBdHRyaWJ1dGUoZ2V0RXhjaGFuZ2VfQ291bnQoKSwgdGhlRWNvcmVQYWNrYWdlLmdldEVEb3VibGUoKSwgImNvdW50IiwgbnVsbCwgMCwgMSwgRXhjaGFuZ2UuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7IC8vJE5PTi1OTFMtMSQKKwkJaW5pdEVBdHRyaWJ1dGUoZ2V0RXhjaGFuZ2VfVHlwZSgpLCB0aGlzLmdldEV4Y2hhbmdlVHlwZSgpLCAidHlwZSIsIG51bGwsIDAsIDEsIEV4Y2hhbmdlLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOyAvLyROT04tTkxTLTEkCisKKwkJaW5pdEVDbGFzcyhpbnRlZ3JhdGlvbkxhYmVsRUNsYXNzLCBJbnRlZ3JhdGlvbkxhYmVsLmNsYXNzLCAiSW50ZWdyYXRpb25MYWJlbCIsIElTX0FCU1RSQUNULCAhSVNfSU5URVJGQUNFLCBJU19HRU5FUkFURURfSU5TVEFOQ0VfQ0xBU1MpOyAvLyROT04tTkxTLTEkCisJCWluaXRFUmVmZXJlbmNlKGdldEludGVncmF0aW9uTGFiZWxfRGVsdGFWYWx1ZSgpLCB0aGlzLmdldEludGVncmF0aW9uTGFiZWxWYWx1ZSgpLCBudWxsLCAiZGVsdGFWYWx1ZSIsIG51bGwsIDAsIDEsIEludGVncmF0aW9uTGFiZWwuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX0NPTVBPU0lURSwgSVNfUkVTT0xWRV9QUk9YSUVTLCAhSVNfVU5TRVRUQUJMRSwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7IC8vJE5PTi1OTFMtMSQKKwkJaW5pdEVSZWZlcmVuY2UoZ2V0SW50ZWdyYXRpb25MYWJlbF9UZW1wVmFsdWUoKSwgdGhpcy5nZXRJbnRlZ3JhdGlvbkxhYmVsVmFsdWUoKSwgbnVsbCwgInRlbXBWYWx1ZSIsIG51bGwsIDAsIDEsIEludGVncmF0aW9uTGFiZWwuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX0NPTVBPU0lURSwgSVNfUkVTT0xWRV9QUk9YSUVTLCAhSVNfVU5TRVRUQUJMRSwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7IC8vJE5PTi1OTFMtMSQKKwkJaW5pdEVSZWZlcmVuY2UoZ2V0SW50ZWdyYXRpb25MYWJlbF9Qcm9iZVZhbHVlKCksIHRoaXMuZ2V0SW50ZWdyYXRpb25MYWJlbFZhbHVlKCksIG51bGwsICJwcm9iZVZhbHVlIiwgbnVsbCwgMCwgMSwgSW50ZWdyYXRpb25MYWJlbC5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfQ09NUE9TSVRFLCBJU19SRVNPTFZFX1BST1hJRVMsICFJU19VTlNFVFRBQkxFLCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsgLy8kTk9OLU5MUy0xJAorCQlpbml0RVJlZmVyZW5jZShnZXRJbnRlZ3JhdGlvbkxhYmVsX0Vycm9yU2NhbGUoKSwgdGhpcy5nZXRJbnRlZ3JhdGlvbkxhYmVsVmFsdWUoKSwgbnVsbCwgImVycm9yU2NhbGUiLCBudWxsLCAwLCAxLCBJbnRlZ3JhdGlvbkxhYmVsLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19DT01QT1NJVEUsIElTX1JFU09MVkVfUFJPWElFUywgIUlTX1VOU0VUVEFCTEUsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOyAvLyROT04tTkxTLTEkCisJCWluaXRFQXR0cmlidXRlKGdldEludGVncmF0aW9uTGFiZWxfSWRlbnRpZmllcigpLCB0aGVFY29yZVBhY2thZ2UuZ2V0RVN0cmluZygpLCAiaWRlbnRpZmllciIsIG51bGwsIDAsIDEsIEludGVncmF0aW9uTGFiZWwuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgIUlTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOyAvLyROT04tTkxTLTEkCisKKwkJb3AgPSBhZGRFT3BlcmF0aW9uKGludGVncmF0aW9uTGFiZWxFQ2xhc3MsIG51bGwsICJyZXNldCIsIDAsIDEsIElTX1VOSVFVRSwgSVNfT1JERVJFRCk7IC8vJE5PTi1OTFMtMSQKKwkJYWRkRVBhcmFtZXRlcihvcCwgdGhlTW9kZWxQYWNrYWdlLmdldFNURU1UaW1lKCksICJ0aW1lIiwgMCwgMSwgSVNfVU5JUVVFLCBJU19PUkRFUkVEKTsgLy8kTk9OLU5MUy0xJAorCisJCWluaXRFQ2xhc3MoaW50ZWdyYXRpb25MYWJlbFZhbHVlRUNsYXNzLCBJbnRlZ3JhdGlvbkxhYmVsVmFsdWUuY2xhc3MsICJJbnRlZ3JhdGlvbkxhYmVsVmFsdWUiLCBJU19BQlNUUkFDVCwgIUlTX0lOVEVSRkFDRSwgSVNfR0VORVJBVEVEX0lOU1RBTkNFX0NMQVNTKTsgLy8kTk9OLU5MUy0xJAorCQlpbml0RVJlZmVyZW5jZShnZXRJbnRlZ3JhdGlvbkxhYmVsVmFsdWVfQXJyaXZhbHMoKSwgdGhpcy5nZXRFeGNoYW5nZSgpLCBudWxsLCAiYXJyaXZhbHMiLCBudWxsLCAwLCAtMSwgSW50ZWdyYXRpb25MYWJlbFZhbHVlLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsICFJU19DSEFOR0VBQkxFLCAhSVNfQ09NUE9TSVRFLCBJU19SRVNPTFZFX1BST1hJRVMsICFJU19VTlNFVFRBQkxFLCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsgLy8kTk9OLU5MUy0xJAorCQlpbml0RVJlZmVyZW5jZShnZXRJbnRlZ3JhdGlvbkxhYmVsVmFsdWVfRGVwYXJ0dXJlcygpLCB0aGlzLmdldEV4Y2hhbmdlKCksIG51bGwsICJkZXBhcnR1cmVzIiwgbnVsbCwgMCwgLTEsIEludGVncmF0aW9uTGFiZWxWYWx1ZS5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCAhSVNfQ0hBTkdFQUJMRSwgIUlTX0NPTVBPU0lURSwgSVNfUkVTT0xWRV9QUk9YSUVTLCAhSVNfVU5TRVRUQUJMRSwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7IC8vJE5PTi1OTFMtMSQKKworCQlvcCA9IGFkZEVPcGVyYXRpb24oaW50ZWdyYXRpb25MYWJlbFZhbHVlRUNsYXNzLCB0aGlzLmdldEludGVncmF0aW9uTGFiZWxWYWx1ZSgpLCAic2V0IiwgMCwgMSwgSVNfVU5JUVVFLCBJU19PUkRFUkVEKTsgLy8kTk9OLU5MUy0xJAorCQlhZGRFUGFyYW1ldGVyKG9wLCB0aGlzLmdldEludGVncmF0aW9uTGFiZWxWYWx1ZSgpLCAidmFsdWUiLCAwLCAxLCBJU19VTklRVUUsIElTX09SREVSRUQpOyAvLyROT04tTkxTLTEkCisKKwkJb3AgPSBhZGRFT3BlcmF0aW9uKGludGVncmF0aW9uTGFiZWxWYWx1ZUVDbGFzcywgdGhpcy5nZXRJbnRlZ3JhdGlvbkxhYmVsVmFsdWUoKSwgImFkZCIsIDAsIDEsIElTX1VOSVFVRSwgSVNfT1JERVJFRCk7IC8vJE5PTi1OTFMtMSQKKwkJYWRkRVBhcmFtZXRlcihvcCwgdGhpcy5nZXRJbnRlZ3JhdGlvbkxhYmVsVmFsdWUoKSwgInZhbHVlIiwgMCwgMSwgSVNfVU5JUVVFLCBJU19PUkRFUkVEKTsgLy8kTk9OLU5MUy0xJAorCisJCW9wID0gYWRkRU9wZXJhdGlvbihpbnRlZ3JhdGlvbkxhYmVsVmFsdWVFQ2xhc3MsIHRoaXMuZ2V0SW50ZWdyYXRpb25MYWJlbFZhbHVlKCksICJzdWIiLCAwLCAxLCBJU19VTklRVUUsIElTX09SREVSRUQpOyAvLyROT04tTkxTLTEkCisJCWFkZEVQYXJhbWV0ZXIob3AsIHRoaXMuZ2V0SW50ZWdyYXRpb25MYWJlbFZhbHVlKCksICJ2YWx1ZSIsIDAsIDEsIElTX1VOSVFVRSwgSVNfT1JERVJFRCk7IC8vJE5PTi1OTFMtMSQKKworCQlvcCA9IGFkZEVPcGVyYXRpb24oaW50ZWdyYXRpb25MYWJlbFZhbHVlRUNsYXNzLCB0aGlzLmdldEludGVncmF0aW9uTGFiZWxWYWx1ZSgpLCAic2NhbGUiLCAwLCAxLCBJU19VTklRVUUsIElTX09SREVSRUQpOyAvLyROT04tTkxTLTEkCisJCWFkZEVQYXJhbWV0ZXIob3AsIHRoZUVjb3JlUGFja2FnZS5nZXRFRG91YmxlKCksICJzY2FsZUZhY3RvciIsIDAsIDEsIElTX1VOSVFVRSwgSVNfT1JERVJFRCk7IC8vJE5PTi1OTFMtMSQKKworCQlvcCA9IGFkZEVPcGVyYXRpb24oaW50ZWdyYXRpb25MYWJlbFZhbHVlRUNsYXNzLCB0aGlzLmdldEludGVncmF0aW9uTGFiZWxWYWx1ZSgpLCAiYWRkIiwgMCwgMSwgSVNfVU5JUVVFLCBJU19PUkRFUkVEKTsgLy8kTk9OLU5MUy0xJAorCQlhZGRFUGFyYW1ldGVyKG9wLCB0aGVFY29yZVBhY2thZ2UuZ2V0RURvdWJsZSgpLCAiYWRkaXRpb24iLCAwLCAxLCBJU19VTklRVUUsIElTX09SREVSRUQpOyAvLyROT04tTkxTLTEkCisKKwkJYWRkRU9wZXJhdGlvbihpbnRlZ3JhdGlvbkxhYmVsVmFsdWVFQ2xhc3MsIHRoaXMuZ2V0SW50ZWdyYXRpb25MYWJlbFZhbHVlKCksICJhYnMiLCAwLCAxLCBJU19VTklRVUUsIElTX09SREVSRUQpOyAvLyROT04tTkxTLTEkCisKKwkJb3AgPSBhZGRFT3BlcmF0aW9uKGludGVncmF0aW9uTGFiZWxWYWx1ZUVDbGFzcywgdGhlRWNvcmVQYWNrYWdlLmdldEVCb29sZWFuKCksICJhdm9pZE5lZ2F0aXZlIiwgMCwgMSwgSVNfVU5JUVVFLCBJU19PUkRFUkVEKTsgLy8kTk9OLU5MUy0xJAorCQlhZGRFUGFyYW1ldGVyKG9wLCB0aGlzLmdldEludGVncmF0aW9uTGFiZWxWYWx1ZSgpLCAidmFsdWUiLCAwLCAxLCBJU19VTklRVUUsIElTX09SREVSRUQpOyAvLyROT04tTkxTLTEkCisKKwkJb3AgPSBhZGRFT3BlcmF0aW9uKGludGVncmF0aW9uTGFiZWxWYWx1ZUVDbGFzcywgdGhlRWNvcmVQYWNrYWdlLmdldEVEb3VibGUoKSwgImNvbXB1dGVEZWx0YUFkanVzdG1lbnQiLCAwLCAxLCBJU19VTklRVUUsIElTX09SREVSRUQpOyAvLyROT04tTkxTLTEkCisJCWFkZEVQYXJhbWV0ZXIob3AsIHRoaXMuZ2V0SW50ZWdyYXRpb25MYWJlbFZhbHVlKCksICJ2YWx1ZSIsIDAsIDEsIElTX1VOSVFVRSwgSVNfT1JERVJFRCk7IC8vJE5PTi1OTFMtMSQKKworCQlvcCA9IGFkZEVPcGVyYXRpb24oaW50ZWdyYXRpb25MYWJlbFZhbHVlRUNsYXNzLCB0aGlzLmdldEludGVncmF0aW9uTGFiZWxWYWx1ZSgpLCAiZGl2aWRlIiwgMCwgMSwgSVNfVU5JUVVFLCBJU19PUkRFUkVEKTsgLy8kTk9OLU5MUy0xJAorCQlhZGRFUGFyYW1ldGVyKG9wLCB0aGlzLmdldEludGVncmF0aW9uTGFiZWxWYWx1ZSgpLCAidmFsdWUiLCAwLCAxLCBJU19VTklRVUUsIElTX09SREVSRUQpOyAvLyROT04tTkxTLTEkCisKKwkJYWRkRU9wZXJhdGlvbihpbnRlZ3JhdGlvbkxhYmVsVmFsdWVFQ2xhc3MsIHRoZUVjb3JlUGFja2FnZS5nZXRFRG91YmxlKCksICJtYXgiLCAwLCAxLCBJU19VTklRVUUsIElTX09SREVSRUQpOyAvLyROT04tTkxTLTEkCisKKwkJYWRkRU9wZXJhdGlvbihpbnRlZ3JhdGlvbkxhYmVsVmFsdWVFQ2xhc3MsIG51bGwsICJwcmVwYXJlQ3ljbGUiLCAwLCAxLCBJU19VTklRVUUsIElTX09SREVSRUQpOyAvLyROT04tTkxTLTEkCisKKwkJLy8gSW5pdGlhbGl6ZSBlbnVtcyBhbmQgYWRkIGVudW0gbGl0ZXJhbHMKKwkJaW5pdEVFbnVtKGV4Y2hhbmdlVHlwZUVFbnVtLCBFeGNoYW5nZVR5cGUuY2xhc3MsICJFeGNoYW5nZVR5cGUiKTsgLy8kTk9OLU5MUy0xJAorCQlhZGRFRW51bUxpdGVyYWwoZXhjaGFuZ2VUeXBlRUVudW0sIEV4Y2hhbmdlVHlwZS5CSVJUSFNfQU5EX0RFQVRIUyk7CisJCWFkZEVFbnVtTGl0ZXJhbChleGNoYW5nZVR5cGVFRW51bSwgRXhjaGFuZ2VUeXBlLk1JR1JBVElPTik7CisJCWFkZEVFbnVtTGl0ZXJhbChleGNoYW5nZVR5cGVFRW51bSwgRXhjaGFuZ2VUeXBlLkFHSU5HKTsKKworCQkvLyBJbml0aWFsaXplIGRhdGEgdHlwZXMKKwkJaW5pdEVEYXRhVHlwZShpbGxlZ2FsQXJndW1lbnRFeGNlcHRpb25FRGF0YVR5cGUsIElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbi5jbGFzcywgIklsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiIsIElTX1NFUklBTElaQUJMRSwgIUlTX0dFTkVSQVRFRF9JTlNUQU5DRV9DTEFTUyk7IC8vJE5PTi1OTFMtMSQKKworCQkvLyBDcmVhdGUgcmVzb3VyY2UKKwkJY3JlYXRlUmVzb3VyY2UoZU5TX1VSSSk7CisJfQorCit9IC8vR3JhcGhQYWNrYWdlSW1wbApkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC9pbXBsL0dyYXBoUGFydGl0aW9uZXJJbXBsLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoL2ltcGwvR3JhcGhQYXJ0aXRpb25lckltcGwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MjE1ZmM2Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC9pbXBsL0dyYXBoUGFydGl0aW9uZXJJbXBsLmphdmEKQEAgLTAsMCArMSwyMDYgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmltcGw7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIAorICogQ29weXJpZ2h0IChjKSAyMDExIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiAKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdCAKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sIAorICogCisgKiBDb250cmlidXRvcnM6IAorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiAKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLkVMaXN0OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLmltcGwuRU5vdGlmaWNhdGlvbkltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLmltcGwuRU9iamVjdEltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5JZGVudGlmaWFibGU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkR5bmFtaWNMYWJlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguR3JhcGhQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5HcmFwaFBhcnRpdGlvbmVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5EZWNvcmF0b3I7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIEFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5QYXJ0aXRpb25lcjwvYj48L2VtPicuCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIDxwPgorICogVGhlIGZvbGxvd2luZyBmZWF0dXJlcyBhcmUgaW1wbGVtZW50ZWQ6CisgKiA8dWw+CisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmltcGwuR3JhcGhQYXJ0aXRpb25lckltcGwjZ2V0TnVtUHJvY2Vzc2VzIDxlbT5OdW0gUHJvY2Vzc2VzPC9lbT59PC9saT4KKyAqIDwvdWw+CisgKiA8L3A+CisgKgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgYWJzdHJhY3QgY2xhc3MgR3JhcGhQYXJ0aXRpb25lckltcGwgZXh0ZW5kcyBFT2JqZWN0SW1wbCBpbXBsZW1lbnRzIEdyYXBoUGFydGl0aW9uZXIgeworCS8qKgorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXROdW1Qcm9jZXNzZXMoKSA8ZW0+TnVtIFByb2Nlc3NlczwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZ2V0TnVtUHJvY2Vzc2VzKCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIGludCBOVU1fUFJPQ0VTU0VTX0VERUZBVUxUID0gMTsKKwkvKioKKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXROdW1Qcm9jZXNzZXMoKSA8ZW0+TnVtIFByb2Nlc3NlczwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZ2V0TnVtUHJvY2Vzc2VzKCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgaW50IG51bVByb2Nlc3NlcyA9IE5VTV9QUk9DRVNTRVNfRURFRkFVTFQ7CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgR3JhcGhQYXJ0aXRpb25lckltcGwoKSB7CisJCXN1cGVyKCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIEVDbGFzcyBlU3RhdGljQ2xhc3MoKSB7CisJCXJldHVybiBHcmFwaFBhY2thZ2UuTGl0ZXJhbHMuR1JBUEhfUEFSVElUSU9ORVI7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIGludCBnZXROdW1Qcm9jZXNzZXMoKSB7CisJCXJldHVybiBudW1Qcm9jZXNzZXM7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgc2V0TnVtUHJvY2Vzc2VzKGludCBuZXdOdW1Qcm9jZXNzZXMpIHsKKwkJaW50IG9sZE51bVByb2Nlc3NlcyA9IG51bVByb2Nlc3NlczsKKwkJbnVtUHJvY2Vzc2VzID0gbmV3TnVtUHJvY2Vzc2VzOworCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpCisJCQllTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBHcmFwaFBhY2thZ2UuR1JBUEhfUEFSVElUSU9ORVJfX05VTV9QUk9DRVNTRVMsIG9sZE51bVByb2Nlc3NlcywgbnVtUHJvY2Vzc2VzKSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVMaXN0PER5bmFtaWNMYWJlbD4gcGFydGl0aW9uRGVjb3JhdG9yTGFiZWxzKERlY29yYXRvciBkZWNvcmF0b3IsIGludCBwcm9jZXNzUmFuaykgeworCQkvLyBUT0RPOiBpbXBsZW1lbnQgdGhpcyBtZXRob2QKKwkJLy8gRW5zdXJlIHRoYXQgeW91IHJlbW92ZSBAZ2VuZXJhdGVkIG9yIG1hcmsgaXQgQGdlbmVyYXRlZCBOT1QKKwkJdGhyb3cgbmV3IFVuc3VwcG9ydGVkT3BlcmF0aW9uRXhjZXB0aW9uKCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVMaXN0PER5bmFtaWNMYWJlbD4gcGFydGl0aW9uRGVjb3JhdG9yTGFiZWxzKERlY29yYXRvciBkZWNvcmF0b3IpIHsKKwkJLy8gVE9ETzogaW1wbGVtZW50IHRoaXMgbWV0aG9kCisJCS8vIEVuc3VyZSB0aGF0IHlvdSByZW1vdmUgQGdlbmVyYXRlZCBvciBtYXJrIGl0IEBnZW5lcmF0ZWQgTk9UCisJCXRocm93IG5ldyBVbnN1cHBvcnRlZE9wZXJhdGlvbkV4Y2VwdGlvbigpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBib29sZWFuIGlzTWFuYWdlZChJZGVudGlmaWFibGUgaWRlbnRpZmlhYmxlKSB7CisJCS8vIFRPRE86IGltcGxlbWVudCB0aGlzIG1ldGhvZAorCQkvLyBFbnN1cmUgdGhhdCB5b3UgcmVtb3ZlIEBnZW5lcmF0ZWQgb3IgbWFyayBpdCBAZ2VuZXJhdGVkIE5PVAorCQl0aHJvdyBuZXcgVW5zdXBwb3J0ZWRPcGVyYXRpb25FeGNlcHRpb24oKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgT2JqZWN0IGVHZXQoaW50IGZlYXR1cmVJRCwgYm9vbGVhbiByZXNvbHZlLCBib29sZWFuIGNvcmVUeXBlKSB7CisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7CisJCQljYXNlIEdyYXBoUGFja2FnZS5HUkFQSF9QQVJUSVRJT05FUl9fTlVNX1BST0NFU1NFUzoKKwkJCQlyZXR1cm4gZ2V0TnVtUHJvY2Vzc2VzKCk7CisJCX0KKwkJcmV0dXJuIHN1cGVyLmVHZXQoZmVhdHVyZUlELCByZXNvbHZlLCBjb3JlVHlwZSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgZVNldChpbnQgZmVhdHVyZUlELCBPYmplY3QgbmV3VmFsdWUpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJCWNhc2UgR3JhcGhQYWNrYWdlLkdSQVBIX1BBUlRJVElPTkVSX19OVU1fUFJPQ0VTU0VTOgorCQkJCXNldE51bVByb2Nlc3NlcygoSW50ZWdlciluZXdWYWx1ZSk7CisJCQkJcmV0dXJuOworCQl9CisJCXN1cGVyLmVTZXQoZmVhdHVyZUlELCBuZXdWYWx1ZSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgZVVuc2V0KGludCBmZWF0dXJlSUQpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJCWNhc2UgR3JhcGhQYWNrYWdlLkdSQVBIX1BBUlRJVElPTkVSX19OVU1fUFJPQ0VTU0VTOgorCQkJCXNldE51bVByb2Nlc3NlcyhOVU1fUFJPQ0VTU0VTX0VERUZBVUxUKTsKKwkJCQlyZXR1cm47CisJCX0KKwkJc3VwZXIuZVVuc2V0KGZlYXR1cmVJRCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIGJvb2xlYW4gZUlzU2V0KGludCBmZWF0dXJlSUQpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJCWNhc2UgR3JhcGhQYWNrYWdlLkdSQVBIX1BBUlRJVElPTkVSX19OVU1fUFJPQ0VTU0VTOgorCQkJCXJldHVybiBudW1Qcm9jZXNzZXMgIT0gTlVNX1BST0NFU1NFU19FREVGQVVMVDsKKwkJfQorCQlyZXR1cm4gc3VwZXIuZUlzU2V0KGZlYXR1cmVJRCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIFN0cmluZyB0b1N0cmluZygpIHsKKwkJaWYgKGVJc1Byb3h5KCkpIHJldHVybiBzdXBlci50b1N0cmluZygpOworCisJCVN0cmluZ0J1ZmZlciByZXN1bHQgPSBuZXcgU3RyaW5nQnVmZmVyKHN1cGVyLnRvU3RyaW5nKCkpOworCQlyZXN1bHQuYXBwZW5kKCIgKG51bVByb2Nlc3NlczogIik7IC8vJE5PTi1OTFMtMSQKKwkJcmVzdWx0LmFwcGVuZChudW1Qcm9jZXNzZXMpOworCQlyZXN1bHQuYXBwZW5kKCcpJyk7CisJCXJldHVybiByZXN1bHQudG9TdHJpbmcoKTsKKwl9CisKK30gLy9HcmFwaFBhcnRpdGlvbmVySW1wbApkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC9pbXBsL0ludGVncmF0aW9uTGFiZWxJbXBsLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoL2ltcGwvSW50ZWdyYXRpb25MYWJlbEltcGwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NzMzMzFhCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC9pbXBsL0ludGVncmF0aW9uTGFiZWxJbXBsLmphdmEKQEAgLTAsMCArMSw0MDMgQEAKKy8qKg0KKyAqIDxjb3B5cmlnaHQ+DQorICogPC9jb3B5cmlnaHQ+DQorICoNCisgKiAkSWQkDQorICovDQorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguaW1wbDsNCisNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uOw0KKw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuSW50ZXJuYWxFT2JqZWN0Ow0KKw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuaW1wbC5FTm90aWZpY2F0aW9uSW1wbDsNCisNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkdyYXBoUGFja2FnZTsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkludGVncmF0aW9uTGFiZWw7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5JbnRlZ3JhdGlvbkxhYmVsVmFsdWU7DQorDQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5TVEVNVGltZTsNCisNCisvKioNCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKyAqIEFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5JbnRlZ3JhdGlvbiBMYWJlbDwvYj48L2VtPicuDQorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorICogPHA+DQorICogVGhlIGZvbGxvd2luZyBmZWF0dXJlcyBhcmUgaW1wbGVtZW50ZWQ6DQorICogPHVsPg0KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguaW1wbC5JbnRlZ3JhdGlvbkxhYmVsSW1wbCNnZXREZWx0YVZhbHVlIDxlbT5EZWx0YSBWYWx1ZTwvZW0+fTwvbGk+DQorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5pbXBsLkludGVncmF0aW9uTGFiZWxJbXBsI2dldFRlbXBWYWx1ZSA8ZW0+VGVtcCBWYWx1ZTwvZW0+fTwvbGk+DQorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5pbXBsLkludGVncmF0aW9uTGFiZWxJbXBsI2dldFByb2JlVmFsdWUgPGVtPlByb2JlIFZhbHVlPC9lbT59PC9saT4NCisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmltcGwuSW50ZWdyYXRpb25MYWJlbEltcGwjZ2V0RXJyb3JTY2FsZSA8ZW0+RXJyb3IgU2NhbGU8L2VtPn08L2xpPg0KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguaW1wbC5JbnRlZ3JhdGlvbkxhYmVsSW1wbCNnZXRJZGVudGlmaWVyIDxlbT5JZGVudGlmaWVyPC9lbT59PC9saT4NCisgKiA8L3VsPg0KKyAqIDwvcD4NCisgKg0KKyAqIEBnZW5lcmF0ZWQNCisgKi8NCitwdWJsaWMgYWJzdHJhY3QgY2xhc3MgSW50ZWdyYXRpb25MYWJlbEltcGwgZXh0ZW5kcyBEeW5hbWljTm9kZUxhYmVsSW1wbCBpbXBsZW1lbnRzIEludGVncmF0aW9uTGFiZWwgew0KKwkvKioNCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0RGVsdGFWYWx1ZSgpIDxlbT5EZWx0YSBWYWx1ZTwvZW0+fScgcmVmZXJlbmNlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHNlZSAjZ2V0RGVsdGFWYWx1ZSgpDQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCXByb3RlY3RlZCBJbnRlZ3JhdGlvbkxhYmVsVmFsdWUgZGVsdGFWYWx1ZTsNCisNCisJLyoqDQorCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldFRlbXBWYWx1ZSgpIDxlbT5UZW1wIFZhbHVlPC9lbT59JyByZWZlcmVuY2UuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAc2VlICNnZXRUZW1wVmFsdWUoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqIEBvcmRlcmVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgSW50ZWdyYXRpb25MYWJlbFZhbHVlIHRlbXBWYWx1ZTsNCisNCisJLyoqDQorCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldFByb2JlVmFsdWUoKSA8ZW0+UHJvYmUgVmFsdWU8L2VtPn0nIHJlZmVyZW5jZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBzZWUgI2dldFByb2JlVmFsdWUoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqIEBvcmRlcmVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgSW50ZWdyYXRpb25MYWJlbFZhbHVlIHByb2JlVmFsdWU7DQorDQorCS8qKg0KKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRFcnJvclNjYWxlKCkgPGVtPkVycm9yIFNjYWxlPC9lbT59JyByZWZlcmVuY2UuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAc2VlICNnZXRFcnJvclNjYWxlKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJcHJvdGVjdGVkIEludGVncmF0aW9uTGFiZWxWYWx1ZSBlcnJvclNjYWxlOw0KKw0KKwkvKioNCisJICogVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldElkZW50aWZpZXIoKSA8ZW0+SWRlbnRpZmllcjwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHNlZSAjZ2V0SWRlbnRpZmllcigpDQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgU3RyaW5nIElERU5USUZJRVJfRURFRkFVTFQgPSBudWxsOw0KKw0KKwkvKioNCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0SWRlbnRpZmllcigpIDxlbT5JZGVudGlmaWVyPC9lbT59JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAc2VlICNnZXRJZGVudGlmaWVyKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJcHJvdGVjdGVkIFN0cmluZyBpZGVudGlmaWVyID0gSURFTlRJRklFUl9FREVGQVVMVDsNCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgSW50ZWdyYXRpb25MYWJlbEltcGwoKSB7DQorCQlzdXBlcigpOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJQE92ZXJyaWRlDQorCXByb3RlY3RlZCBFQ2xhc3MgZVN0YXRpY0NsYXNzKCkgew0KKwkJcmV0dXJuIEdyYXBoUGFja2FnZS5MaXRlcmFscy5JTlRFR1JBVElPTl9MQUJFTDsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBJbnRlZ3JhdGlvbkxhYmVsVmFsdWUgZ2V0RGVsdGFWYWx1ZSgpIHsNCisJCWlmIChkZWx0YVZhbHVlICE9IG51bGwgJiYgZGVsdGFWYWx1ZS5lSXNQcm94eSgpKSB7DQorCQkJSW50ZXJuYWxFT2JqZWN0IG9sZERlbHRhVmFsdWUgPSAoSW50ZXJuYWxFT2JqZWN0KWRlbHRhVmFsdWU7DQorCQkJZGVsdGFWYWx1ZSA9IChJbnRlZ3JhdGlvbkxhYmVsVmFsdWUpZVJlc29sdmVQcm94eShvbGREZWx0YVZhbHVlKTsNCisJCQlpZiAoZGVsdGFWYWx1ZSAhPSBvbGREZWx0YVZhbHVlKSB7DQorCQkJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkNCisJCQkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5SRVNPTFZFLCBHcmFwaFBhY2thZ2UuSU5URUdSQVRJT05fTEFCRUxfX0RFTFRBX1ZBTFVFLCBvbGREZWx0YVZhbHVlLCBkZWx0YVZhbHVlKSk7DQorCQkJfQ0KKwkJfQ0KKwkJcmV0dXJuIGRlbHRhVmFsdWU7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgSW50ZWdyYXRpb25MYWJlbFZhbHVlIGJhc2ljR2V0RGVsdGFWYWx1ZSgpIHsNCisJCXJldHVybiBkZWx0YVZhbHVlOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIHZvaWQgc2V0RGVsdGFWYWx1ZShJbnRlZ3JhdGlvbkxhYmVsVmFsdWUgbmV3RGVsdGFWYWx1ZSkgew0KKwkJSW50ZWdyYXRpb25MYWJlbFZhbHVlIG9sZERlbHRhVmFsdWUgPSBkZWx0YVZhbHVlOw0KKwkJZGVsdGFWYWx1ZSA9IG5ld0RlbHRhVmFsdWU7DQorCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpDQorCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgR3JhcGhQYWNrYWdlLklOVEVHUkFUSU9OX0xBQkVMX19ERUxUQV9WQUxVRSwgb2xkRGVsdGFWYWx1ZSwgZGVsdGFWYWx1ZSkpOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIEludGVncmF0aW9uTGFiZWxWYWx1ZSBnZXRUZW1wVmFsdWUoKSB7DQorCQlpZiAodGVtcFZhbHVlICE9IG51bGwgJiYgdGVtcFZhbHVlLmVJc1Byb3h5KCkpIHsNCisJCQlJbnRlcm5hbEVPYmplY3Qgb2xkVGVtcFZhbHVlID0gKEludGVybmFsRU9iamVjdCl0ZW1wVmFsdWU7DQorCQkJdGVtcFZhbHVlID0gKEludGVncmF0aW9uTGFiZWxWYWx1ZSllUmVzb2x2ZVByb3h5KG9sZFRlbXBWYWx1ZSk7DQorCQkJaWYgKHRlbXBWYWx1ZSAhPSBvbGRUZW1wVmFsdWUpIHsNCisJCQkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQ0KKwkJCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlJFU09MVkUsIEdyYXBoUGFja2FnZS5JTlRFR1JBVElPTl9MQUJFTF9fVEVNUF9WQUxVRSwgb2xkVGVtcFZhbHVlLCB0ZW1wVmFsdWUpKTsNCisJCQl9DQorCQl9DQorCQlyZXR1cm4gdGVtcFZhbHVlOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIEludGVncmF0aW9uTGFiZWxWYWx1ZSBiYXNpY0dldFRlbXBWYWx1ZSgpIHsNCisJCXJldHVybiB0ZW1wVmFsdWU7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgdm9pZCBzZXRUZW1wVmFsdWUoSW50ZWdyYXRpb25MYWJlbFZhbHVlIG5ld1RlbXBWYWx1ZSkgew0KKwkJSW50ZWdyYXRpb25MYWJlbFZhbHVlIG9sZFRlbXBWYWx1ZSA9IHRlbXBWYWx1ZTsNCisJCXRlbXBWYWx1ZSA9IG5ld1RlbXBWYWx1ZTsNCisJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkNCisJCQllTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBHcmFwaFBhY2thZ2UuSU5URUdSQVRJT05fTEFCRUxfX1RFTVBfVkFMVUUsIG9sZFRlbXBWYWx1ZSwgdGVtcFZhbHVlKSk7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgSW50ZWdyYXRpb25MYWJlbFZhbHVlIGdldFByb2JlVmFsdWUoKSB7DQorCQlpZiAocHJvYmVWYWx1ZSAhPSBudWxsICYmIHByb2JlVmFsdWUuZUlzUHJveHkoKSkgew0KKwkJCUludGVybmFsRU9iamVjdCBvbGRQcm9iZVZhbHVlID0gKEludGVybmFsRU9iamVjdClwcm9iZVZhbHVlOw0KKwkJCXByb2JlVmFsdWUgPSAoSW50ZWdyYXRpb25MYWJlbFZhbHVlKWVSZXNvbHZlUHJveHkob2xkUHJvYmVWYWx1ZSk7DQorCQkJaWYgKHByb2JlVmFsdWUgIT0gb2xkUHJvYmVWYWx1ZSkgew0KKwkJCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpDQorCQkJCQllTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uUkVTT0xWRSwgR3JhcGhQYWNrYWdlLklOVEVHUkFUSU9OX0xBQkVMX19QUk9CRV9WQUxVRSwgb2xkUHJvYmVWYWx1ZSwgcHJvYmVWYWx1ZSkpOw0KKwkJCX0NCisJCX0NCisJCXJldHVybiBwcm9iZVZhbHVlOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIEludGVncmF0aW9uTGFiZWxWYWx1ZSBiYXNpY0dldFByb2JlVmFsdWUoKSB7DQorCQlyZXR1cm4gcHJvYmVWYWx1ZTsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyB2b2lkIHNldFByb2JlVmFsdWUoSW50ZWdyYXRpb25MYWJlbFZhbHVlIG5ld1Byb2JlVmFsdWUpIHsNCisJCUludGVncmF0aW9uTGFiZWxWYWx1ZSBvbGRQcm9iZVZhbHVlID0gcHJvYmVWYWx1ZTsNCisJCXByb2JlVmFsdWUgPSBuZXdQcm9iZVZhbHVlOw0KKwkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQ0KKwkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIEdyYXBoUGFja2FnZS5JTlRFR1JBVElPTl9MQUJFTF9fUFJPQkVfVkFMVUUsIG9sZFByb2JlVmFsdWUsIHByb2JlVmFsdWUpKTsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBJbnRlZ3JhdGlvbkxhYmVsVmFsdWUgZ2V0RXJyb3JTY2FsZSgpIHsNCisJCWlmIChlcnJvclNjYWxlICE9IG51bGwgJiYgZXJyb3JTY2FsZS5lSXNQcm94eSgpKSB7DQorCQkJSW50ZXJuYWxFT2JqZWN0IG9sZEVycm9yU2NhbGUgPSAoSW50ZXJuYWxFT2JqZWN0KWVycm9yU2NhbGU7DQorCQkJZXJyb3JTY2FsZSA9IChJbnRlZ3JhdGlvbkxhYmVsVmFsdWUpZVJlc29sdmVQcm94eShvbGRFcnJvclNjYWxlKTsNCisJCQlpZiAoZXJyb3JTY2FsZSAhPSBvbGRFcnJvclNjYWxlKSB7DQorCQkJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkNCisJCQkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5SRVNPTFZFLCBHcmFwaFBhY2thZ2UuSU5URUdSQVRJT05fTEFCRUxfX0VSUk9SX1NDQUxFLCBvbGRFcnJvclNjYWxlLCBlcnJvclNjYWxlKSk7DQorCQkJfQ0KKwkJfQ0KKwkJcmV0dXJuIGVycm9yU2NhbGU7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgSW50ZWdyYXRpb25MYWJlbFZhbHVlIGJhc2ljR2V0RXJyb3JTY2FsZSgpIHsNCisJCXJldHVybiBlcnJvclNjYWxlOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIHZvaWQgc2V0RXJyb3JTY2FsZShJbnRlZ3JhdGlvbkxhYmVsVmFsdWUgbmV3RXJyb3JTY2FsZSkgew0KKwkJSW50ZWdyYXRpb25MYWJlbFZhbHVlIG9sZEVycm9yU2NhbGUgPSBlcnJvclNjYWxlOw0KKwkJZXJyb3JTY2FsZSA9IG5ld0Vycm9yU2NhbGU7DQorCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpDQorCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgR3JhcGhQYWNrYWdlLklOVEVHUkFUSU9OX0xBQkVMX19FUlJPUl9TQ0FMRSwgb2xkRXJyb3JTY2FsZSwgZXJyb3JTY2FsZSkpOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIFN0cmluZyBnZXRJZGVudGlmaWVyKCkgew0KKwkJcmV0dXJuIGlkZW50aWZpZXI7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgdm9pZCByZXNldChTVEVNVGltZSB0aW1lKSB7DQorCQkvLyBUT0RPOiBpbXBsZW1lbnQgdGhpcyBtZXRob2QNCisJCS8vIEVuc3VyZSB0aGF0IHlvdSByZW1vdmUgQGdlbmVyYXRlZCBvciBtYXJrIGl0IEBnZW5lcmF0ZWQgTk9UDQorCQl0aHJvdyBuZXcgVW5zdXBwb3J0ZWRPcGVyYXRpb25FeGNlcHRpb24oKTsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCUBPdmVycmlkZQ0KKwlwdWJsaWMgT2JqZWN0IGVHZXQoaW50IGZlYXR1cmVJRCwgYm9vbGVhbiByZXNvbHZlLCBib29sZWFuIGNvcmVUeXBlKSB7DQorCQlzd2l0Y2ggKGZlYXR1cmVJRCkgew0KKwkJCWNhc2UgR3JhcGhQYWNrYWdlLklOVEVHUkFUSU9OX0xBQkVMX19ERUxUQV9WQUxVRToNCisJCQkJaWYgKHJlc29sdmUpIHJldHVybiBnZXREZWx0YVZhbHVlKCk7DQorCQkJCXJldHVybiBiYXNpY0dldERlbHRhVmFsdWUoKTsNCisJCQljYXNlIEdyYXBoUGFja2FnZS5JTlRFR1JBVElPTl9MQUJFTF9fVEVNUF9WQUxVRToNCisJCQkJaWYgKHJlc29sdmUpIHJldHVybiBnZXRUZW1wVmFsdWUoKTsNCisJCQkJcmV0dXJuIGJhc2ljR2V0VGVtcFZhbHVlKCk7DQorCQkJY2FzZSBHcmFwaFBhY2thZ2UuSU5URUdSQVRJT05fTEFCRUxfX1BST0JFX1ZBTFVFOg0KKwkJCQlpZiAocmVzb2x2ZSkgcmV0dXJuIGdldFByb2JlVmFsdWUoKTsNCisJCQkJcmV0dXJuIGJhc2ljR2V0UHJvYmVWYWx1ZSgpOw0KKwkJCWNhc2UgR3JhcGhQYWNrYWdlLklOVEVHUkFUSU9OX0xBQkVMX19FUlJPUl9TQ0FMRToNCisJCQkJaWYgKHJlc29sdmUpIHJldHVybiBnZXRFcnJvclNjYWxlKCk7DQorCQkJCXJldHVybiBiYXNpY0dldEVycm9yU2NhbGUoKTsNCisJCQljYXNlIEdyYXBoUGFja2FnZS5JTlRFR1JBVElPTl9MQUJFTF9fSURFTlRJRklFUjoNCisJCQkJcmV0dXJuIGdldElkZW50aWZpZXIoKTsNCisJCX0NCisJCXJldHVybiBzdXBlci5lR2V0KGZlYXR1cmVJRCwgcmVzb2x2ZSwgY29yZVR5cGUpOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJQE92ZXJyaWRlDQorCXB1YmxpYyB2b2lkIGVTZXQoaW50IGZlYXR1cmVJRCwgT2JqZWN0IG5ld1ZhbHVlKSB7DQorCQlzd2l0Y2ggKGZlYXR1cmVJRCkgew0KKwkJCWNhc2UgR3JhcGhQYWNrYWdlLklOVEVHUkFUSU9OX0xBQkVMX19ERUxUQV9WQUxVRToNCisJCQkJc2V0RGVsdGFWYWx1ZSgoSW50ZWdyYXRpb25MYWJlbFZhbHVlKW5ld1ZhbHVlKTsNCisJCQkJcmV0dXJuOw0KKwkJCWNhc2UgR3JhcGhQYWNrYWdlLklOVEVHUkFUSU9OX0xBQkVMX19URU1QX1ZBTFVFOg0KKwkJCQlzZXRUZW1wVmFsdWUoKEludGVncmF0aW9uTGFiZWxWYWx1ZSluZXdWYWx1ZSk7DQorCQkJCXJldHVybjsNCisJCQljYXNlIEdyYXBoUGFja2FnZS5JTlRFR1JBVElPTl9MQUJFTF9fUFJPQkVfVkFMVUU6DQorCQkJCXNldFByb2JlVmFsdWUoKEludGVncmF0aW9uTGFiZWxWYWx1ZSluZXdWYWx1ZSk7DQorCQkJCXJldHVybjsNCisJCQljYXNlIEdyYXBoUGFja2FnZS5JTlRFR1JBVElPTl9MQUJFTF9fRVJST1JfU0NBTEU6DQorCQkJCXNldEVycm9yU2NhbGUoKEludGVncmF0aW9uTGFiZWxWYWx1ZSluZXdWYWx1ZSk7DQorCQkJCXJldHVybjsNCisJCX0NCisJCXN1cGVyLmVTZXQoZmVhdHVyZUlELCBuZXdWYWx1ZSk7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlAT3ZlcnJpZGUNCisJcHVibGljIHZvaWQgZVVuc2V0KGludCBmZWF0dXJlSUQpIHsNCisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7DQorCQkJY2FzZSBHcmFwaFBhY2thZ2UuSU5URUdSQVRJT05fTEFCRUxfX0RFTFRBX1ZBTFVFOg0KKwkJCQlzZXREZWx0YVZhbHVlKChJbnRlZ3JhdGlvbkxhYmVsVmFsdWUpbnVsbCk7DQorCQkJCXJldHVybjsNCisJCQljYXNlIEdyYXBoUGFja2FnZS5JTlRFR1JBVElPTl9MQUJFTF9fVEVNUF9WQUxVRToNCisJCQkJc2V0VGVtcFZhbHVlKChJbnRlZ3JhdGlvbkxhYmVsVmFsdWUpbnVsbCk7DQorCQkJCXJldHVybjsNCisJCQljYXNlIEdyYXBoUGFja2FnZS5JTlRFR1JBVElPTl9MQUJFTF9fUFJPQkVfVkFMVUU6DQorCQkJCXNldFByb2JlVmFsdWUoKEludGVncmF0aW9uTGFiZWxWYWx1ZSludWxsKTsNCisJCQkJcmV0dXJuOw0KKwkJCWNhc2UgR3JhcGhQYWNrYWdlLklOVEVHUkFUSU9OX0xBQkVMX19FUlJPUl9TQ0FMRToNCisJCQkJc2V0RXJyb3JTY2FsZSgoSW50ZWdyYXRpb25MYWJlbFZhbHVlKW51bGwpOw0KKwkJCQlyZXR1cm47DQorCQl9DQorCQlzdXBlci5lVW5zZXQoZmVhdHVyZUlEKTsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCUBPdmVycmlkZQ0KKwlwdWJsaWMgYm9vbGVhbiBlSXNTZXQoaW50IGZlYXR1cmVJRCkgew0KKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsNCisJCQljYXNlIEdyYXBoUGFja2FnZS5JTlRFR1JBVElPTl9MQUJFTF9fREVMVEFfVkFMVUU6DQorCQkJCXJldHVybiBkZWx0YVZhbHVlICE9IG51bGw7DQorCQkJY2FzZSBHcmFwaFBhY2thZ2UuSU5URUdSQVRJT05fTEFCRUxfX1RFTVBfVkFMVUU6DQorCQkJCXJldHVybiB0ZW1wVmFsdWUgIT0gbnVsbDsNCisJCQljYXNlIEdyYXBoUGFja2FnZS5JTlRFR1JBVElPTl9MQUJFTF9fUFJPQkVfVkFMVUU6DQorCQkJCXJldHVybiBwcm9iZVZhbHVlICE9IG51bGw7DQorCQkJY2FzZSBHcmFwaFBhY2thZ2UuSU5URUdSQVRJT05fTEFCRUxfX0VSUk9SX1NDQUxFOg0KKwkJCQlyZXR1cm4gZXJyb3JTY2FsZSAhPSBudWxsOw0KKwkJCWNhc2UgR3JhcGhQYWNrYWdlLklOVEVHUkFUSU9OX0xBQkVMX19JREVOVElGSUVSOg0KKwkJCQlyZXR1cm4gSURFTlRJRklFUl9FREVGQVVMVCA9PSBudWxsID8gaWRlbnRpZmllciAhPSBudWxsIDogIUlERU5USUZJRVJfRURFRkFVTFQuZXF1YWxzKGlkZW50aWZpZXIpOw0KKwkJfQ0KKwkJcmV0dXJuIHN1cGVyLmVJc1NldChmZWF0dXJlSUQpOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJQE92ZXJyaWRlDQorCXB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKSB7DQorCQlpZiAoZUlzUHJveHkoKSkgcmV0dXJuIHN1cGVyLnRvU3RyaW5nKCk7DQorDQorCQlTdHJpbmdCdWZmZXIgcmVzdWx0ID0gbmV3IFN0cmluZ0J1ZmZlcihzdXBlci50b1N0cmluZygpKTsNCisJCXJlc3VsdC5hcHBlbmQoIiAoaWRlbnRpZmllcjogIik7IC8vJE5PTi1OTFMtMSQNCisJCXJlc3VsdC5hcHBlbmQoaWRlbnRpZmllcik7DQorCQlyZXN1bHQuYXBwZW5kKCcpJyk7DQorCQlyZXR1cm4gcmVzdWx0LnRvU3RyaW5nKCk7DQorCX0NCisNCit9IC8vSW50ZWdyYXRpb25MYWJlbEltcGwNCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoL2ltcGwvSW50ZWdyYXRpb25MYWJlbFZhbHVlSW1wbC5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC9pbXBsL0ludGVncmF0aW9uTGFiZWxWYWx1ZUltcGwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MTI0YjdlCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC9pbXBsL0ludGVncmF0aW9uTGFiZWxWYWx1ZUltcGwuamF2YQpAQCAtMCwwICsxLDI1MCBAQAorLyoqDQorICogPGNvcHlyaWdodD4NCisgKiA8L2NvcHlyaWdodD4NCisgKg0KKyAqICRJZCQNCisgKi8NCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5pbXBsOw0KKw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuRUxpc3Q7DQorDQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7DQorDQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS51dGlsLkVPYmplY3RSZXNvbHZpbmdFTGlzdDsNCisNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkV4Y2hhbmdlOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguR3JhcGhQYWNrYWdlOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguSW50ZWdyYXRpb25MYWJlbFZhbHVlOw0KKw0KKy8qKg0KKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorICogQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPkludGVncmF0aW9uIExhYmVsIFZhbHVlPC9iPjwvZW0+Jy4NCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisgKiA8cD4NCisgKiBUaGUgZm9sbG93aW5nIGZlYXR1cmVzIGFyZSBpbXBsZW1lbnRlZDoNCisgKiA8dWw+DQorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5pbXBsLkludGVncmF0aW9uTGFiZWxWYWx1ZUltcGwjZ2V0QXJyaXZhbHMgPGVtPkFycml2YWxzPC9lbT59PC9saT4NCisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmltcGwuSW50ZWdyYXRpb25MYWJlbFZhbHVlSW1wbCNnZXREZXBhcnR1cmVzIDxlbT5EZXBhcnR1cmVzPC9lbT59PC9saT4NCisgKiA8L3VsPg0KKyAqIDwvcD4NCisgKg0KKyAqIEBnZW5lcmF0ZWQNCisgKi8NCitwdWJsaWMgYWJzdHJhY3QgY2xhc3MgSW50ZWdyYXRpb25MYWJlbFZhbHVlSW1wbCBleHRlbmRzIExhYmVsVmFsdWVJbXBsIGltcGxlbWVudHMgSW50ZWdyYXRpb25MYWJlbFZhbHVlIHsNCisJLyoqDQorCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldEFycml2YWxzKCkgPGVtPkFycml2YWxzPC9lbT59JyByZWZlcmVuY2UgbGlzdC4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBzZWUgI2dldEFycml2YWxzKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJcHJvdGVjdGVkIEVMaXN0PEV4Y2hhbmdlPiBhcnJpdmFsczsNCisNCisJLyoqDQorCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldERlcGFydHVyZXMoKSA8ZW0+RGVwYXJ0dXJlczwvZW0+fScgcmVmZXJlbmNlIGxpc3QuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAc2VlICNnZXREZXBhcnR1cmVzKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJcHJvdGVjdGVkIEVMaXN0PEV4Y2hhbmdlPiBkZXBhcnR1cmVzOw0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCBJbnRlZ3JhdGlvbkxhYmVsVmFsdWVJbXBsKCkgew0KKwkJc3VwZXIoKTsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCUBPdmVycmlkZQ0KKwlwcm90ZWN0ZWQgRUNsYXNzIGVTdGF0aWNDbGFzcygpIHsNCisJCXJldHVybiBHcmFwaFBhY2thZ2UuTGl0ZXJhbHMuSU5URUdSQVRJT05fTEFCRUxfVkFMVUU7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgRUxpc3Q8RXhjaGFuZ2U+IGdldEFycml2YWxzKCkgew0KKwkJaWYgKGFycml2YWxzID09IG51bGwpIHsNCisJCQlhcnJpdmFscyA9IG5ldyBFT2JqZWN0UmVzb2x2aW5nRUxpc3Q8RXhjaGFuZ2U+KEV4Y2hhbmdlLmNsYXNzLCB0aGlzLCBHcmFwaFBhY2thZ2UuSU5URUdSQVRJT05fTEFCRUxfVkFMVUVfX0FSUklWQUxTKTsNCisJCX0NCisJCXJldHVybiBhcnJpdmFsczsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBFTGlzdDxFeGNoYW5nZT4gZ2V0RGVwYXJ0dXJlcygpIHsNCisJCWlmIChkZXBhcnR1cmVzID09IG51bGwpIHsNCisJCQlkZXBhcnR1cmVzID0gbmV3IEVPYmplY3RSZXNvbHZpbmdFTGlzdDxFeGNoYW5nZT4oRXhjaGFuZ2UuY2xhc3MsIHRoaXMsIEdyYXBoUGFja2FnZS5JTlRFR1JBVElPTl9MQUJFTF9WQUxVRV9fREVQQVJUVVJFUyk7DQorCQl9DQorCQlyZXR1cm4gZGVwYXJ0dXJlczsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBJbnRlZ3JhdGlvbkxhYmVsVmFsdWUgc2V0KEludGVncmF0aW9uTGFiZWxWYWx1ZSB2YWx1ZSkgew0KKwkJLy8gVE9ETzogaW1wbGVtZW50IHRoaXMgbWV0aG9kDQorCQkvLyBFbnN1cmUgdGhhdCB5b3UgcmVtb3ZlIEBnZW5lcmF0ZWQgb3IgbWFyayBpdCBAZ2VuZXJhdGVkIE5PVA0KKwkJdGhyb3cgbmV3IFVuc3VwcG9ydGVkT3BlcmF0aW9uRXhjZXB0aW9uKCk7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgSW50ZWdyYXRpb25MYWJlbFZhbHVlIGFkZChJbnRlZ3JhdGlvbkxhYmVsVmFsdWUgdmFsdWUpIHsNCisJCS8vIFRPRE86IGltcGxlbWVudCB0aGlzIG1ldGhvZA0KKwkJLy8gRW5zdXJlIHRoYXQgeW91IHJlbW92ZSBAZ2VuZXJhdGVkIG9yIG1hcmsgaXQgQGdlbmVyYXRlZCBOT1QNCisJCXRocm93IG5ldyBVbnN1cHBvcnRlZE9wZXJhdGlvbkV4Y2VwdGlvbigpOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIEludGVncmF0aW9uTGFiZWxWYWx1ZSBzdWIoSW50ZWdyYXRpb25MYWJlbFZhbHVlIHZhbHVlKSB7DQorCQkvLyBUT0RPOiBpbXBsZW1lbnQgdGhpcyBtZXRob2QNCisJCS8vIEVuc3VyZSB0aGF0IHlvdSByZW1vdmUgQGdlbmVyYXRlZCBvciBtYXJrIGl0IEBnZW5lcmF0ZWQgTk9UDQorCQl0aHJvdyBuZXcgVW5zdXBwb3J0ZWRPcGVyYXRpb25FeGNlcHRpb24oKTsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBJbnRlZ3JhdGlvbkxhYmVsVmFsdWUgc2NhbGUoZG91YmxlIHNjYWxlRmFjdG9yKSB7DQorCQkvLyBUT0RPOiBpbXBsZW1lbnQgdGhpcyBtZXRob2QNCisJCS8vIEVuc3VyZSB0aGF0IHlvdSByZW1vdmUgQGdlbmVyYXRlZCBvciBtYXJrIGl0IEBnZW5lcmF0ZWQgTk9UDQorCQl0aHJvdyBuZXcgVW5zdXBwb3J0ZWRPcGVyYXRpb25FeGNlcHRpb24oKTsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBJbnRlZ3JhdGlvbkxhYmVsVmFsdWUgYWRkKGRvdWJsZSBhZGRpdGlvbikgew0KKwkJLy8gVE9ETzogaW1wbGVtZW50IHRoaXMgbWV0aG9kDQorCQkvLyBFbnN1cmUgdGhhdCB5b3UgcmVtb3ZlIEBnZW5lcmF0ZWQgb3IgbWFyayBpdCBAZ2VuZXJhdGVkIE5PVA0KKwkJdGhyb3cgbmV3IFVuc3VwcG9ydGVkT3BlcmF0aW9uRXhjZXB0aW9uKCk7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgSW50ZWdyYXRpb25MYWJlbFZhbHVlIGFicygpIHsNCisJCS8vIFRPRE86IGltcGxlbWVudCB0aGlzIG1ldGhvZA0KKwkJLy8gRW5zdXJlIHRoYXQgeW91IHJlbW92ZSBAZ2VuZXJhdGVkIG9yIG1hcmsgaXQgQGdlbmVyYXRlZCBOT1QNCisJCXRocm93IG5ldyBVbnN1cHBvcnRlZE9wZXJhdGlvbkV4Y2VwdGlvbigpOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIGJvb2xlYW4gYXZvaWROZWdhdGl2ZShJbnRlZ3JhdGlvbkxhYmVsVmFsdWUgdmFsdWUpIHsNCisJCS8vIFRPRE86IGltcGxlbWVudCB0aGlzIG1ldGhvZA0KKwkJLy8gRW5zdXJlIHRoYXQgeW91IHJlbW92ZSBAZ2VuZXJhdGVkIG9yIG1hcmsgaXQgQGdlbmVyYXRlZCBOT1QNCisJCXRocm93IG5ldyBVbnN1cHBvcnRlZE9wZXJhdGlvbkV4Y2VwdGlvbigpOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIGRvdWJsZSBjb21wdXRlRGVsdGFBZGp1c3RtZW50KEludGVncmF0aW9uTGFiZWxWYWx1ZSB2YWx1ZSkgew0KKwkJLy8gVE9ETzogaW1wbGVtZW50IHRoaXMgbWV0aG9kDQorCQkvLyBFbnN1cmUgdGhhdCB5b3UgcmVtb3ZlIEBnZW5lcmF0ZWQgb3IgbWFyayBpdCBAZ2VuZXJhdGVkIE5PVA0KKwkJdGhyb3cgbmV3IFVuc3VwcG9ydGVkT3BlcmF0aW9uRXhjZXB0aW9uKCk7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgSW50ZWdyYXRpb25MYWJlbFZhbHVlIGRpdmlkZShJbnRlZ3JhdGlvbkxhYmVsVmFsdWUgdmFsdWUpIHsNCisJCS8vIFRPRE86IGltcGxlbWVudCB0aGlzIG1ldGhvZA0KKwkJLy8gRW5zdXJlIHRoYXQgeW91IHJlbW92ZSBAZ2VuZXJhdGVkIG9yIG1hcmsgaXQgQGdlbmVyYXRlZCBOT1QNCisJCXRocm93IG5ldyBVbnN1cHBvcnRlZE9wZXJhdGlvbkV4Y2VwdGlvbigpOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIGRvdWJsZSBtYXgoKSB7DQorCQkvLyBUT0RPOiBpbXBsZW1lbnQgdGhpcyBtZXRob2QNCisJCS8vIEVuc3VyZSB0aGF0IHlvdSByZW1vdmUgQGdlbmVyYXRlZCBvciBtYXJrIGl0IEBnZW5lcmF0ZWQgTk9UDQorCQl0aHJvdyBuZXcgVW5zdXBwb3J0ZWRPcGVyYXRpb25FeGNlcHRpb24oKTsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyB2b2lkIHByZXBhcmVDeWNsZSgpIHsNCisJCS8vIFRPRE86IGltcGxlbWVudCB0aGlzIG1ldGhvZA0KKwkJLy8gRW5zdXJlIHRoYXQgeW91IHJlbW92ZSBAZ2VuZXJhdGVkIG9yIG1hcmsgaXQgQGdlbmVyYXRlZCBOT1QNCisJCXRocm93IG5ldyBVbnN1cHBvcnRlZE9wZXJhdGlvbkV4Y2VwdGlvbigpOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJQE92ZXJyaWRlDQorCXB1YmxpYyBPYmplY3QgZUdldChpbnQgZmVhdHVyZUlELCBib29sZWFuIHJlc29sdmUsIGJvb2xlYW4gY29yZVR5cGUpIHsNCisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7DQorCQkJY2FzZSBHcmFwaFBhY2thZ2UuSU5URUdSQVRJT05fTEFCRUxfVkFMVUVfX0FSUklWQUxTOg0KKwkJCQlyZXR1cm4gZ2V0QXJyaXZhbHMoKTsNCisJCQljYXNlIEdyYXBoUGFja2FnZS5JTlRFR1JBVElPTl9MQUJFTF9WQUxVRV9fREVQQVJUVVJFUzoNCisJCQkJcmV0dXJuIGdldERlcGFydHVyZXMoKTsNCisJCX0NCisJCXJldHVybiBzdXBlci5lR2V0KGZlYXR1cmVJRCwgcmVzb2x2ZSwgY29yZVR5cGUpOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJQE92ZXJyaWRlDQorCXB1YmxpYyBib29sZWFuIGVJc1NldChpbnQgZmVhdHVyZUlEKSB7DQorCQlzd2l0Y2ggKGZlYXR1cmVJRCkgew0KKwkJCWNhc2UgR3JhcGhQYWNrYWdlLklOVEVHUkFUSU9OX0xBQkVMX1ZBTFVFX19BUlJJVkFMUzoNCisJCQkJcmV0dXJuIGFycml2YWxzICE9IG51bGwgJiYgIWFycml2YWxzLmlzRW1wdHkoKTsNCisJCQljYXNlIEdyYXBoUGFja2FnZS5JTlRFR1JBVElPTl9MQUJFTF9WQUxVRV9fREVQQVJUVVJFUzoNCisJCQkJcmV0dXJuIGRlcGFydHVyZXMgIT0gbnVsbCAmJiAhZGVwYXJ0dXJlcy5pc0VtcHR5KCk7DQorCQl9DQorCQlyZXR1cm4gc3VwZXIuZUlzU2V0KGZlYXR1cmVJRCk7DQorCX0NCisNCit9IC8vSW50ZWdyYXRpb25MYWJlbFZhbHVlSW1wbA0KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGgvaW1wbC9MYWJlbEltcGwuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGgvaW1wbC9MYWJlbEltcGwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NjkzYzE4Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC9pbXBsL0xhYmVsSW1wbC5qYXZhCkBAIC0wLDAgKzEsMjk5IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5pbXBsOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAKKyAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4gCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIAorICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wIAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQgCisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbCAKKyAqIAorICogQ29udHJpYnV0b3JzOiAKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uQ2hhaW47CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlVSSTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5JbnRlcm5hbEVPYmplY3Q7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLmltcGwuRU5vdGlmaWNhdGlvbkltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLlNURU1VUkk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5JZGVudGlmaWFibGU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5pbXBsLklkZW50aWZpYWJsZUltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkdyYXBoUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguTGFiZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkxhYmVsVmFsdWU7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPkxhYmVsPC9iPjwvZW0+Jy4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogPHA+CisgKiBUaGUgZm9sbG93aW5nIGZlYXR1cmVzIGFyZSBpbXBsZW1lbnRlZDoKKyAqIDx1bD4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguaW1wbC5MYWJlbEltcGwjZ2V0VVJJT2ZJZGVudGlmaWFibGVUb0JlTGFiZWxlZCA8ZW0+VVJJIE9mIElkZW50aWZpYWJsZSBUbyBCZSBMYWJlbGVkPC9lbT59PC9saT4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguaW1wbC5MYWJlbEltcGwjZ2V0Q3VycmVudFZhbHVlIDxlbT5DdXJyZW50IFZhbHVlPC9lbT59PC9saT4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguaW1wbC5MYWJlbEltcGwjZ2V0SWRlbnRpZmlhYmxlIDxlbT5JZGVudGlmaWFibGU8L2VtPn08L2xpPgorICogPC91bD4KKyAqIDwvcD4KKyAqCisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBhYnN0cmFjdCBjbGFzcyBMYWJlbEltcGwgZXh0ZW5kcyBJZGVudGlmaWFibGVJbXBsIGltcGxlbWVudHMgTGFiZWwgeworCisJLyoqCisJICogVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldFVSSU9mSWRlbnRpZmlhYmxlVG9CZUxhYmVsZWQoKSA8ZW0+VVJJIE9mIElkZW50aWZpYWJsZSBUbyBCZSBMYWJlbGVkPC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZ2V0VVJJT2ZJZGVudGlmaWFibGVUb0JlTGFiZWxlZCgpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBVUkkgVVJJX09GX0lERU5USUZJQUJMRV9UT19CRV9MQUJFTEVEX0VERUZBVUxUID0gbnVsbDsKKworCS8qKgorCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldFVSSU9mSWRlbnRpZmlhYmxlVG9CZUxhYmVsZWQoKSA8ZW0+VVJJIE9mIElkZW50aWZpYWJsZSBUbyBCZSBMYWJlbGVkPC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZ2V0VVJJT2ZJZGVudGlmaWFibGVUb0JlTGFiZWxlZCgpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIFVSSSB1UklPZklkZW50aWZpYWJsZVRvQmVMYWJlbGVkID0gVVJJX09GX0lERU5USUZJQUJMRV9UT19CRV9MQUJFTEVEX0VERUZBVUxUOworCisJLyoqCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0Q3VycmVudFZhbHVlKCkgPGVtPkN1cnJlbnQgVmFsdWU8L2VtPn0nIGNvbnRhaW5tZW50IHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNnZXRDdXJyZW50VmFsdWUoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBMYWJlbFZhbHVlIGN1cnJlbnRWYWx1ZTsKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJcHJvdGVjdGVkIExhYmVsSW1wbCgpIHsKKwkJc3VwZXIoKTsKKwkJc2V0VVJJKFNURU1VUkkuY3JlYXRlVVJJKFVSSV9UWVBFX0xBQkVMX1NFR01FTlQgKyAiLyIKKwkJCQkrIFNURU1VUkkuZ2VuZXJhdGVVbmlxdWVQYXJ0KCkpKTsKKwkJc2V0VHlwZVVSSShMYWJlbC5VUklfVFlQRV9MQUJFTCk7CisJfSAvLyBMYWJlbEltcGwKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgRUNsYXNzIGVTdGF0aWNDbGFzcygpIHsKKwkJcmV0dXJuIEdyYXBoUGFja2FnZS5MaXRlcmFscy5MQUJFTDsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIExhYmVsVmFsdWUgZ2V0Q3VycmVudFZhbHVlKCkgeworCQlyZXR1cm4gY3VycmVudFZhbHVlOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgTm90aWZpY2F0aW9uQ2hhaW4gYmFzaWNTZXRDdXJyZW50VmFsdWUoTGFiZWxWYWx1ZSBuZXdDdXJyZW50VmFsdWUsIE5vdGlmaWNhdGlvbkNoYWluIG1zZ3MpIHsKKwkJTGFiZWxWYWx1ZSBvbGRDdXJyZW50VmFsdWUgPSBjdXJyZW50VmFsdWU7CisJCWN1cnJlbnRWYWx1ZSA9IG5ld0N1cnJlbnRWYWx1ZTsKKwkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKSB7CisJCQlFTm90aWZpY2F0aW9uSW1wbCBub3RpZmljYXRpb24gPSBuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgR3JhcGhQYWNrYWdlLkxBQkVMX19DVVJSRU5UX1ZBTFVFLCBvbGRDdXJyZW50VmFsdWUsIG5ld0N1cnJlbnRWYWx1ZSk7CisJCQlpZiAobXNncyA9PSBudWxsKSBtc2dzID0gbm90aWZpY2F0aW9uOyBlbHNlIG1zZ3MuYWRkKG5vdGlmaWNhdGlvbik7CisJCX0KKwkJcmV0dXJuIG1zZ3M7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIHNldEN1cnJlbnRWYWx1ZShMYWJlbFZhbHVlIG5ld0N1cnJlbnRWYWx1ZSkgeworCQlpZiAobmV3Q3VycmVudFZhbHVlICE9IGN1cnJlbnRWYWx1ZSkgeworCQkJTm90aWZpY2F0aW9uQ2hhaW4gbXNncyA9IG51bGw7CisJCQlpZiAoY3VycmVudFZhbHVlICE9IG51bGwpCisJCQkJbXNncyA9ICgoSW50ZXJuYWxFT2JqZWN0KWN1cnJlbnRWYWx1ZSkuZUludmVyc2VSZW1vdmUodGhpcywgRU9QUE9TSVRFX0ZFQVRVUkVfQkFTRSAtIEdyYXBoUGFja2FnZS5MQUJFTF9fQ1VSUkVOVF9WQUxVRSwgbnVsbCwgbXNncyk7CisJCQlpZiAobmV3Q3VycmVudFZhbHVlICE9IG51bGwpCisJCQkJbXNncyA9ICgoSW50ZXJuYWxFT2JqZWN0KW5ld0N1cnJlbnRWYWx1ZSkuZUludmVyc2VBZGQodGhpcywgRU9QUE9TSVRFX0ZFQVRVUkVfQkFTRSAtIEdyYXBoUGFja2FnZS5MQUJFTF9fQ1VSUkVOVF9WQUxVRSwgbnVsbCwgbXNncyk7CisJCQltc2dzID0gYmFzaWNTZXRDdXJyZW50VmFsdWUobmV3Q3VycmVudFZhbHVlLCBtc2dzKTsKKwkJCWlmIChtc2dzICE9IG51bGwpIG1zZ3MuZGlzcGF0Y2goKTsKKwkJfQorCQllbHNlIGlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkKKwkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIEdyYXBoUGFja2FnZS5MQUJFTF9fQ1VSUkVOVF9WQUxVRSwgbmV3Q3VycmVudFZhbHVlLCBuZXdDdXJyZW50VmFsdWUpKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJYWJzdHJhY3QgcHVibGljIElkZW50aWZpYWJsZSBnZXRJZGVudGlmaWFibGUoKTsKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlwdWJsaWMgSWRlbnRpZmlhYmxlIGJhc2ljR2V0SWRlbnRpZmlhYmxlKCkgeworCQlyZXR1cm4gZ2V0SWRlbnRpZmlhYmxlKCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCWFic3RyYWN0IHB1YmxpYyB2b2lkIHNldElkZW50aWZpYWJsZShJZGVudGlmaWFibGUgbmV3SWRlbnRpZmlhYmxlKTsKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJcHVibGljIFVSSSBnZXRVUklPZklkZW50aWZpYWJsZVRvQmVMYWJlbGVkKCkgeworCQkvLyBJcyBpdCBzZXQ/CisJCWlmICh1UklPZklkZW50aWZpYWJsZVRvQmVMYWJlbGVkID09IG51bGwpIHsKKwkJCS8vIE5vCisJCQlmaW5hbCBJZGVudGlmaWFibGUgaWRlbnRpZmlhYmxlID0gZ2V0SWRlbnRpZmlhYmxlKCk7CisJCQkvLyBEbyB3ZSBoYXZlIGFuIElkZW50aWZpYWJsZT8KKwkJCWlmIChpZGVudGlmaWFibGUgIT0gbnVsbCkgeworCQkJCS8vIFllcworCQkJCXJldHVybiBpZGVudGlmaWFibGUuZ2V0VVJJKCk7CisJCQl9CisJCX0KKwkJcmV0dXJuIHVSSU9mSWRlbnRpZmlhYmxlVG9CZUxhYmVsZWQ7CisJfSAvLyBnZXRVUklPZklkZW50aWZpYWJsZVRvQmVMYWJlbGVkCisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgc2V0VVJJT2ZJZGVudGlmaWFibGVUb0JlTGFiZWxlZChVUkkgbmV3VVJJT2ZJZGVudGlmaWFibGVUb0JlTGFiZWxlZCkgeworCQlVUkkgb2xkVVJJT2ZJZGVudGlmaWFibGVUb0JlTGFiZWxlZCA9IHVSSU9mSWRlbnRpZmlhYmxlVG9CZUxhYmVsZWQ7CisJCXVSSU9mSWRlbnRpZmlhYmxlVG9CZUxhYmVsZWQgPSBuZXdVUklPZklkZW50aWZpYWJsZVRvQmVMYWJlbGVkOworCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpCisJCQllTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBHcmFwaFBhY2thZ2UuTEFCRUxfX1VSSV9PRl9JREVOVElGSUFCTEVfVE9fQkVfTEFCRUxFRCwgb2xkVVJJT2ZJZGVudGlmaWFibGVUb0JlTGFiZWxlZCwgdVJJT2ZJZGVudGlmaWFibGVUb0JlTGFiZWxlZCkpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgTm90aWZpY2F0aW9uQ2hhaW4gZUludmVyc2VSZW1vdmUoSW50ZXJuYWxFT2JqZWN0IG90aGVyRW5kLCBpbnQgZmVhdHVyZUlELCBOb3RpZmljYXRpb25DaGFpbiBtc2dzKSB7CisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7CisJCQljYXNlIEdyYXBoUGFja2FnZS5MQUJFTF9fQ1VSUkVOVF9WQUxVRToKKwkJCQlyZXR1cm4gYmFzaWNTZXRDdXJyZW50VmFsdWUobnVsbCwgbXNncyk7CisJCX0KKwkJcmV0dXJuIHN1cGVyLmVJbnZlcnNlUmVtb3ZlKG90aGVyRW5kLCBmZWF0dXJlSUQsIG1zZ3MpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgT2JqZWN0IGVHZXQoaW50IGZlYXR1cmVJRCwgYm9vbGVhbiByZXNvbHZlLCBib29sZWFuIGNvcmVUeXBlKSB7CisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7CisJCQljYXNlIEdyYXBoUGFja2FnZS5MQUJFTF9fVVJJX09GX0lERU5USUZJQUJMRV9UT19CRV9MQUJFTEVEOgorCQkJCXJldHVybiBnZXRVUklPZklkZW50aWZpYWJsZVRvQmVMYWJlbGVkKCk7CisJCQljYXNlIEdyYXBoUGFja2FnZS5MQUJFTF9fQ1VSUkVOVF9WQUxVRToKKwkJCQlyZXR1cm4gZ2V0Q3VycmVudFZhbHVlKCk7CisJCQljYXNlIEdyYXBoUGFja2FnZS5MQUJFTF9fSURFTlRJRklBQkxFOgorCQkJCWlmIChyZXNvbHZlKSByZXR1cm4gZ2V0SWRlbnRpZmlhYmxlKCk7CisJCQkJcmV0dXJuIGJhc2ljR2V0SWRlbnRpZmlhYmxlKCk7CisJCX0KKwkJcmV0dXJuIHN1cGVyLmVHZXQoZmVhdHVyZUlELCByZXNvbHZlLCBjb3JlVHlwZSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGVTZXQoaW50IGZlYXR1cmVJRCwgT2JqZWN0IG5ld1ZhbHVlKSB7CisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7CisJCQljYXNlIEdyYXBoUGFja2FnZS5MQUJFTF9fVVJJX09GX0lERU5USUZJQUJMRV9UT19CRV9MQUJFTEVEOgorCQkJCXNldFVSSU9mSWRlbnRpZmlhYmxlVG9CZUxhYmVsZWQoKFVSSSluZXdWYWx1ZSk7CisJCQkJcmV0dXJuOworCQkJY2FzZSBHcmFwaFBhY2thZ2UuTEFCRUxfX0NVUlJFTlRfVkFMVUU6CisJCQkJc2V0Q3VycmVudFZhbHVlKChMYWJlbFZhbHVlKW5ld1ZhbHVlKTsKKwkJCQlyZXR1cm47CisJCQljYXNlIEdyYXBoUGFja2FnZS5MQUJFTF9fSURFTlRJRklBQkxFOgorCQkJCXNldElkZW50aWZpYWJsZSgoSWRlbnRpZmlhYmxlKW5ld1ZhbHVlKTsKKwkJCQlyZXR1cm47CisJCX0KKwkJc3VwZXIuZVNldChmZWF0dXJlSUQsIG5ld1ZhbHVlKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgZVVuc2V0KGludCBmZWF0dXJlSUQpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJCWNhc2UgR3JhcGhQYWNrYWdlLkxBQkVMX19VUklfT0ZfSURFTlRJRklBQkxFX1RPX0JFX0xBQkVMRUQ6CisJCQkJc2V0VVJJT2ZJZGVudGlmaWFibGVUb0JlTGFiZWxlZChVUklfT0ZfSURFTlRJRklBQkxFX1RPX0JFX0xBQkVMRURfRURFRkFVTFQpOworCQkJCXJldHVybjsKKwkJCWNhc2UgR3JhcGhQYWNrYWdlLkxBQkVMX19DVVJSRU5UX1ZBTFVFOgorCQkJCXNldEN1cnJlbnRWYWx1ZSgoTGFiZWxWYWx1ZSludWxsKTsKKwkJCQlyZXR1cm47CisJCQljYXNlIEdyYXBoUGFja2FnZS5MQUJFTF9fSURFTlRJRklBQkxFOgorCQkJCXNldElkZW50aWZpYWJsZSgoSWRlbnRpZmlhYmxlKW51bGwpOworCQkJCXJldHVybjsKKwkJfQorCQlzdXBlci5lVW5zZXQoZmVhdHVyZUlEKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIGJvb2xlYW4gZUlzU2V0KGludCBmZWF0dXJlSUQpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJCWNhc2UgR3JhcGhQYWNrYWdlLkxBQkVMX19VUklfT0ZfSURFTlRJRklBQkxFX1RPX0JFX0xBQkVMRUQ6CisJCQkJcmV0dXJuIFVSSV9PRl9JREVOVElGSUFCTEVfVE9fQkVfTEFCRUxFRF9FREVGQVVMVCA9PSBudWxsID8gdVJJT2ZJZGVudGlmaWFibGVUb0JlTGFiZWxlZCAhPSBudWxsIDogIVVSSV9PRl9JREVOVElGSUFCTEVfVE9fQkVfTEFCRUxFRF9FREVGQVVMVC5lcXVhbHModVJJT2ZJZGVudGlmaWFibGVUb0JlTGFiZWxlZCk7CisJCQljYXNlIEdyYXBoUGFja2FnZS5MQUJFTF9fQ1VSUkVOVF9WQUxVRToKKwkJCQlyZXR1cm4gY3VycmVudFZhbHVlICE9IG51bGw7CisJCQljYXNlIEdyYXBoUGFja2FnZS5MQUJFTF9fSURFTlRJRklBQkxFOgorCQkJCXJldHVybiBiYXNpY0dldElkZW50aWZpYWJsZSgpICE9IG51bGw7CisJCX0KKwkJcmV0dXJuIHN1cGVyLmVJc1NldChmZWF0dXJlSUQpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIFN0cmluZyB0b1N0cmluZygpIHsKKwkJaWYgKGVJc1Byb3h5KCkpCisJCQlyZXR1cm4gc3VwZXIudG9TdHJpbmcoKTsKKwkJcmV0dXJuIGdldEN1cnJlbnRWYWx1ZSgpLnRvU3RyaW5nKCk7CisJfSAvLyB0b1N0cmluZworCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvbW1vbi5pbXBsLklkZW50aWZpYWJsZUltcGwjc2FuZSgpCisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgYm9vbGVhbiBzYW5lKCkgeworCQlib29sZWFuIHJldFZhbHVlID0gc3VwZXIuc2FuZSgpOworCQlyZXRWYWx1ZSA9IHJldFZhbHVlICYmIGdldEN1cnJlbnRWYWx1ZSgpICE9IG51bGw7CisJCWFzc2VydCByZXRWYWx1ZTsKKworCQlyZXRWYWx1ZSA9IHJldFZhbHVlICYmIGdldEN1cnJlbnRWYWx1ZSgpLnNhbmUoKTsKKwkJYXNzZXJ0IHJldFZhbHVlIDogZ2V0VVJJT2ZJZGVudGlmaWFibGVUb0JlTGFiZWxlZCgpLnRvU3RyaW5nKCk7CisKKwkJcmV0dXJuIHJldFZhbHVlOworCX0gLy8gc2FuZQorCit9IC8vIExhYmVsSW1wbApkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC9pbXBsL0xhYmVsVmFsdWVJbXBsLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoL2ltcGwvTGFiZWxWYWx1ZUltcGwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MTY2OTE1Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC9pbXBsL0xhYmVsVmFsdWVJbXBsLmphdmEKQEAgLTAsMCArMSw3MiBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguaW1wbDsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuIAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyAKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0IAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwgCisgKiAKKyAqIENvbnRyaWJ1dG9yczogCisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzczsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuaW1wbC5FT2JqZWN0SW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguR3JhcGhQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5MYWJlbFZhbHVlOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IEFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5MYWJlbCBWYWx1ZTwvYj48L2VtPicuCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIDxwPgorICogPC9wPgorICoKKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGFic3RyYWN0IGNsYXNzIExhYmVsVmFsdWVJbXBsIGV4dGVuZHMgRU9iamVjdEltcGwgaW1wbGVtZW50cyBMYWJlbFZhbHVlIHsKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIExhYmVsVmFsdWVJbXBsKCkgeworCQlzdXBlcigpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgRUNsYXNzIGVTdGF0aWNDbGFzcygpIHsKKwkJcmV0dXJuIEdyYXBoUGFja2FnZS5MaXRlcmFscy5MQUJFTF9WQUxVRTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCXB1YmxpYyB2b2lkIHJlc2V0KCkgeworCQkvLyBub3RoaW5nIHRvIHJlc2V0CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIGJvb2xlYW4gc2FtZVZhbHVlKExhYmVsVmFsdWUgb3RoZXJMYWJlbFZhbHVlKSB7CisJCS8vIFRPRE86IGltcGxlbWVudCB0aGlzIG1ldGhvZAorCQkvLyBFbnN1cmUgdGhhdCB5b3UgcmVtb3ZlIEBnZW5lcmF0ZWQgb3IgbWFyayBpdCBAZ2VuZXJhdGVkIE5PVAorCQl0aHJvdyBuZXcgVW5zdXBwb3J0ZWRPcGVyYXRpb25FeGNlcHRpb24oKTsKKwl9CisKKwkvKioKKwkgKiBAcmV0dXJuIHRydWUKKwkgKi8KKwlwdWJsaWMgYm9vbGVhbiBzYW5lKCkgeworCQlyZXR1cm4gdHJ1ZTsKKwl9IC8vIHNhbmUKKworfSAvLyBMYWJlbFZhbHVlSW1wbApkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC9pbXBsL05vZGVJbXBsLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoL2ltcGwvTm9kZUltcGwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNjBlMThlCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC9pbXBsL05vZGVJbXBsLmphdmEKQEAgLTAsMCArMSwyNDEgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmltcGw7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIAorICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiAKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdCAKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sIAorICogCisgKiBDb250cmlidXRvcnM6IAorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiAKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworIAoraW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOworaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbkNoYWluOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5FTGlzdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5JbnRlcm5hbEVPYmplY3Q7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnV0aWwuRU9iamVjdFJlc29sdmluZ0VMaXN0OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS51dGlsLkVPYmplY3RXaXRoSW52ZXJzZVJlc29sdmluZ0VMaXN0OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS51dGlsLkludGVybmFsRUxpc3Q7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLlNURU1VUkk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5pbXBsLklkZW50aWZpYWJsZUltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkVkZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkdyYXBoUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguTm9kZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguTm9kZUxhYmVsOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IEFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5Ob2RlPC9iPjwvZW0+Jy4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogPHA+CisgKiBUaGUgZm9sbG93aW5nIGZlYXR1cmVzIGFyZSBpbXBsZW1lbnRlZDoKKyAqIDx1bD4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguaW1wbC5Ob2RlSW1wbCNnZXRFZGdlcyA8ZW0+RWRnZXM8L2VtPn08L2xpPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5pbXBsLk5vZGVJbXBsI2dldExhYmVscyA8ZW0+TGFiZWxzPC9lbT59PC9saT4KKyAqIDwvdWw+CisgKiA8L3A+CisgKgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgTm9kZUltcGwgZXh0ZW5kcyBJZGVudGlmaWFibGVJbXBsIGltcGxlbWVudHMgTm9kZSB7CisKKwkvKioKKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRFZGdlcygpIDxlbT5FZGdlczwvZW0+fScgcmVmZXJlbmNlIGxpc3QuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZ2V0RWRnZXMoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBFTGlzdDxFZGdlPiBlZGdlczsKKworCS8qKgorCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldExhYmVscygpIDxlbT5MYWJlbHM8L2VtPn0nIHJlZmVyZW5jZSBsaXN0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI2dldExhYmVscygpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIEVMaXN0PE5vZGVMYWJlbD4gbGFiZWxzOworCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogCisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlwcm90ZWN0ZWQgTm9kZUltcGwoKSB7CisJCXN1cGVyKCk7CisvLwkJc2V0VVJJKFNURU1VUkkuY3JlYXRlVVJJKFVSSV9UWVBFX05PREVfU0VHTUVOVCArICIvIgorLy8JCQkJKyBTVEVNVVJJLmdlbmVyYXRlVW5pcXVlUGFydCgpKSk7CisJCXNldFR5cGVVUkkoU1RFTVVSSS5OT0RFX1RZUEVfVVJJKTsKKwl9IC8vIE5vZGVJbXBsCisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIEVDbGFzcyBlU3RhdGljQ2xhc3MoKSB7CisJCXJldHVybiBHcmFwaFBhY2thZ2UuTGl0ZXJhbHMuTk9ERTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVMaXN0PEVkZ2U+IGdldEVkZ2VzKCkgeworCQlpZiAoZWRnZXMgPT0gbnVsbCkgeworCQkJZWRnZXMgPSBuZXcgRU9iamVjdFJlc29sdmluZ0VMaXN0PEVkZ2U+KEVkZ2UuY2xhc3MsIHRoaXMsIEdyYXBoUGFja2FnZS5OT0RFX19FREdFUyk7CisJCX0KKwkJcmV0dXJuIGVkZ2VzOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUxpc3Q8Tm9kZUxhYmVsPiBnZXRMYWJlbHMoKSB7CisJCWlmIChsYWJlbHMgPT0gbnVsbCkgeworCQkJbGFiZWxzID0gbmV3IEVPYmplY3RXaXRoSW52ZXJzZVJlc29sdmluZ0VMaXN0PE5vZGVMYWJlbD4oTm9kZUxhYmVsLmNsYXNzLCB0aGlzLCBHcmFwaFBhY2thZ2UuTk9ERV9fTEFCRUxTLCBHcmFwaFBhY2thZ2UuTk9ERV9MQUJFTF9fTk9ERSk7CisJCX0KKwkJcmV0dXJuIGxhYmVsczsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQFN1cHByZXNzV2FybmluZ3MoInVuY2hlY2tlZCIpCisJCUBPdmVycmlkZQorCXB1YmxpYyBOb3RpZmljYXRpb25DaGFpbiBlSW52ZXJzZUFkZChJbnRlcm5hbEVPYmplY3Qgb3RoZXJFbmQsIGludCBmZWF0dXJlSUQsIE5vdGlmaWNhdGlvbkNoYWluIG1zZ3MpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJCWNhc2UgR3JhcGhQYWNrYWdlLk5PREVfX0xBQkVMUzoKKwkJCQlyZXR1cm4gKChJbnRlcm5hbEVMaXN0PEludGVybmFsRU9iamVjdD4pKEludGVybmFsRUxpc3Q8Pz4pZ2V0TGFiZWxzKCkpLmJhc2ljQWRkKG90aGVyRW5kLCBtc2dzKTsKKwkJfQorCQlyZXR1cm4gc3VwZXIuZUludmVyc2VBZGQob3RoZXJFbmQsIGZlYXR1cmVJRCwgbXNncyk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBOb3RpZmljYXRpb25DaGFpbiBlSW52ZXJzZVJlbW92ZShJbnRlcm5hbEVPYmplY3Qgb3RoZXJFbmQsIGludCBmZWF0dXJlSUQsIE5vdGlmaWNhdGlvbkNoYWluIG1zZ3MpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJCWNhc2UgR3JhcGhQYWNrYWdlLk5PREVfX0xBQkVMUzoKKwkJCQlyZXR1cm4gKChJbnRlcm5hbEVMaXN0PD8+KWdldExhYmVscygpKS5iYXNpY1JlbW92ZShvdGhlckVuZCwgbXNncyk7CisJCX0KKwkJcmV0dXJuIHN1cGVyLmVJbnZlcnNlUmVtb3ZlKG90aGVyRW5kLCBmZWF0dXJlSUQsIG1zZ3MpOworCX0KKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb21tb24uaW1wbC5JZGVudGlmaWFibGVJbXBsI3NhbmUoKQorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIGJvb2xlYW4gc2FuZSgpIHsKKwkJYm9vbGVhbiByZXRWYWx1ZSA9IHN1cGVyLnNhbmUoKTsKKworCQlpZiAoZ2V0TGFiZWxzKCkgIT0gbnVsbCkgeworCQkJLy8gQWxsIHRoZSBsYWJlbHMgc2hvdWxkIGJlIHNhbmUKKwkJCWZvciAoZmluYWwgSXRlcmF0b3I8Tm9kZUxhYmVsPiBsYWJlbEl0ZXIgPSBnZXRMYWJlbHMoKS5pdGVyYXRvcigpOyBsYWJlbEl0ZXIKKwkJCQkJLmhhc05leHQoKQorCQkJCQkmJiByZXRWYWx1ZTspIHsKKwkJCQlmaW5hbCBOb2RlTGFiZWwgbm9kZUxhYmVsID0gbGFiZWxJdGVyLm5leHQoKTsKKwkJCQkvLyBUaGUgc2FuaXR5IG9mIGluZGl2aWR1YWwgTm9kZUxhYmVscyBpcyBjaGVja2VkIGVsc2V3aGVyZQorCQkJCS8vIFRoZSBub2RlIGxhYmVsIHNob3VsZCBiZSB0aGUgb25lIHRoYXQgbGFiZWxzIHRoaXMgbm9kZQorCQkJCXJldFZhbHVlID0gcmV0VmFsdWUKKwkJCQkJCSYmIG5vZGVMYWJlbC5nZXRVUklPZklkZW50aWZpYWJsZVRvQmVMYWJlbGVkKCkuZXF1YWxzKAorCQkJCQkJCQlnZXRVUkkoKSk7CisJCQkJYXNzZXJ0IHJldFZhbHVlOworCQkJfSAvLyBmb3IgZWFjaCBsYWJlbAorCQl9CisJCS8vIEFsbCB0aGUgZWRnZXMgc2hvdWxkIGJlIHNhbmUKKwkJLy8gV2UgZG9uJ3QgdGVzdCB0aGF0IGJlY2F1c2UgdGhlaXIgdGVzdCBpcyB0byBjaGVjayB0aGVpciBub2RlcworCQkvLyB3aGljaCByZXN1bHRzIGluIGluZmluaXRlIHJlY3Vyc2lvbgorCisJCXJldHVybiByZXRWYWx1ZTsKKwl9IC8vIHNhbmUKKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb21tb24uaW1wbC5JZGVudGlmaWFibGVJbXBsI3RvU3RyaW5nKCkKKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKSB7CisJCS8vIFJldHVybiB0aGUgdGl0bGUgb2YgdGhlIG5vZGUgZnJvbSBpdCdzIER1YmxpbkNvcmUgaWYgaXQgaXMgc2V0CisJCWZpbmFsIFN0cmluZyB0aXRsZSA9IGdldER1YmxpbkNvcmUoKS5nZXRUaXRsZSgpOworCQlyZXR1cm4gKHRpdGxlICE9IG51bGwpID8gdGl0bGUgOiBzdXBlci50b1N0cmluZygpOworCX0gLy8gdG9TdHJpbmcKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgT2JqZWN0IGVHZXQoaW50IGZlYXR1cmVJRCwgYm9vbGVhbiByZXNvbHZlLCBib29sZWFuIGNvcmVUeXBlKSB7CisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7CisJCQljYXNlIEdyYXBoUGFja2FnZS5OT0RFX19FREdFUzoKKwkJCQlyZXR1cm4gZ2V0RWRnZXMoKTsKKwkJCWNhc2UgR3JhcGhQYWNrYWdlLk5PREVfX0xBQkVMUzoKKwkJCQlyZXR1cm4gZ2V0TGFiZWxzKCk7CisJCX0KKwkJcmV0dXJuIHN1cGVyLmVHZXQoZmVhdHVyZUlELCByZXNvbHZlLCBjb3JlVHlwZSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBTdXBwcmVzc1dhcm5pbmdzKCJ1bmNoZWNrZWQiKQorCQlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBlU2V0KGludCBmZWF0dXJlSUQsIE9iamVjdCBuZXdWYWx1ZSkgeworCQlzd2l0Y2ggKGZlYXR1cmVJRCkgeworCQkJY2FzZSBHcmFwaFBhY2thZ2UuTk9ERV9fRURHRVM6CisJCQkJZ2V0RWRnZXMoKS5jbGVhcigpOworCQkJCWdldEVkZ2VzKCkuYWRkQWxsKChDb2xsZWN0aW9uPD8gZXh0ZW5kcyBFZGdlPiluZXdWYWx1ZSk7CisJCQkJcmV0dXJuOworCQkJY2FzZSBHcmFwaFBhY2thZ2UuTk9ERV9fTEFCRUxTOgorCQkJCWdldExhYmVscygpLmNsZWFyKCk7CisJCQkJZ2V0TGFiZWxzKCkuYWRkQWxsKChDb2xsZWN0aW9uPD8gZXh0ZW5kcyBOb2RlTGFiZWw+KW5ld1ZhbHVlKTsKKwkJCQlyZXR1cm47CisJCX0KKwkJc3VwZXIuZVNldChmZWF0dXJlSUQsIG5ld1ZhbHVlKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgZVVuc2V0KGludCBmZWF0dXJlSUQpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJCWNhc2UgR3JhcGhQYWNrYWdlLk5PREVfX0VER0VTOgorCQkJCWdldEVkZ2VzKCkuY2xlYXIoKTsKKwkJCQlyZXR1cm47CisJCQljYXNlIEdyYXBoUGFja2FnZS5OT0RFX19MQUJFTFM6CisJCQkJZ2V0TGFiZWxzKCkuY2xlYXIoKTsKKwkJCQlyZXR1cm47CisJCX0KKwkJc3VwZXIuZVVuc2V0KGZlYXR1cmVJRCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBib29sZWFuIGVJc1NldChpbnQgZmVhdHVyZUlEKSB7CisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7CisJCQljYXNlIEdyYXBoUGFja2FnZS5OT0RFX19FREdFUzoKKwkJCQlyZXR1cm4gZWRnZXMgIT0gbnVsbCAmJiAhZWRnZXMuaXNFbXB0eSgpOworCQkJY2FzZSBHcmFwaFBhY2thZ2UuTk9ERV9fTEFCRUxTOgorCQkJCXJldHVybiBsYWJlbHMgIT0gbnVsbCAmJiAhbGFiZWxzLmlzRW1wdHkoKTsKKwkJfQorCQlyZXR1cm4gc3VwZXIuZUlzU2V0KGZlYXR1cmVJRCk7CisJfQorCit9IC8vIE5vZGVJbXBsCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoL2ltcGwvTm9kZUxhYmVsSW1wbC5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC9pbXBsL05vZGVMYWJlbEltcGwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MmUzZDQzCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC9pbXBsL05vZGVMYWJlbEltcGwuamF2YQpAQCAtMCwwICsxLDIzNyBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguaW1wbDsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uQ2hhaW47CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzczsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuSW50ZXJuYWxFT2JqZWN0OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5pbXBsLkVOb3RpZmljYXRpb25JbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uSWRlbnRpZmlhYmxlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5HcmFwaFBhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLk5vZGU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLk5vZGVMYWJlbDsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPk5vZGUgTGFiZWw8L2I+PC9lbT4nLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiA8cD4KKyAqIFRoZSBmb2xsb3dpbmcgZmVhdHVyZXMgYXJlIGltcGxlbWVudGVkOgorICogPHVsPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5pbXBsLk5vZGVMYWJlbEltcGwjZ2V0Tm9kZSA8ZW0+Tm9kZTwvZW0+fTwvbGk+CisgKiA8L3VsPgorICogPC9wPgorICoKKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGFic3RyYWN0IGNsYXNzIE5vZGVMYWJlbEltcGwgZXh0ZW5kcyBMYWJlbEltcGwgaW1wbGVtZW50cyBOb2RlTGFiZWwgeworCS8qKgorCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldE5vZGUoKSA8ZW0+Tm9kZTwvZW0+fScgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZ2V0Tm9kZSgpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIE5vZGUgbm9kZTsKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBOb2RlTGFiZWxJbXBsKCkgeworCQlzdXBlcigpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCBFQ2xhc3MgZVN0YXRpY0NsYXNzKCkgeworCQlyZXR1cm4gR3JhcGhQYWNrYWdlLkxpdGVyYWxzLk5PREVfTEFCRUw7CisJfQorCisJQE92ZXJyaWRlCisJcHVibGljIElkZW50aWZpYWJsZSBnZXRJZGVudGlmaWFibGUoKSB7CisJCXJldHVybiBnZXROb2RlKCk7CisJfQorCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgc2V0SWRlbnRpZmlhYmxlKElkZW50aWZpYWJsZSBuZXdJZGVudGlmaWFibGUpIHsKKwkJc2V0Tm9kZSgoTm9kZSluZXdJZGVudGlmaWFibGUpOwkJCisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIE5vZGUgZ2V0Tm9kZSgpIHsKKwkJaWYgKG5vZGUgIT0gbnVsbCAmJiBub2RlLmVJc1Byb3h5KCkpIHsKKwkJCUludGVybmFsRU9iamVjdCBvbGROb2RlID0gKEludGVybmFsRU9iamVjdClub2RlOworCQkJbm9kZSA9IChOb2RlKWVSZXNvbHZlUHJveHkob2xkTm9kZSk7CisJCQlpZiAobm9kZSAhPSBvbGROb2RlKSB7CisJCQkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQorCQkJCQllTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uUkVTT0xWRSwgR3JhcGhQYWNrYWdlLk5PREVfTEFCRUxfX05PREUsIG9sZE5vZGUsIG5vZGUpKTsKKwkJCX0KKwkJfQorCQlyZXR1cm4gbm9kZTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgTm9kZSBiYXNpY0dldE5vZGUoKSB7CisJCXJldHVybiBub2RlOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBOb3RpZmljYXRpb25DaGFpbiBiYXNpY1NldE5vZGUoTm9kZSBuZXdOb2RlLCBOb3RpZmljYXRpb25DaGFpbiBtc2dzKSB7CisJCU5vZGUgb2xkTm9kZSA9IG5vZGU7CisJCW5vZGUgPSBuZXdOb2RlOworCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpIHsKKwkJCUVOb3RpZmljYXRpb25JbXBsIG5vdGlmaWNhdGlvbiA9IG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBHcmFwaFBhY2thZ2UuTk9ERV9MQUJFTF9fTk9ERSwgb2xkTm9kZSwgbmV3Tm9kZSk7CisJCQlpZiAobXNncyA9PSBudWxsKSBtc2dzID0gbm90aWZpY2F0aW9uOyBlbHNlIG1zZ3MuYWRkKG5vdGlmaWNhdGlvbik7CisJCX0KKwkJcmV0dXJuIG1zZ3M7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgc2V0Tm9kZShOb2RlIG5ld05vZGUpIHsKKwkJaWYgKG5ld05vZGUgIT0gbm9kZSkgeworCQkJTm90aWZpY2F0aW9uQ2hhaW4gbXNncyA9IG51bGw7CisJCQlpZiAobm9kZSAhPSBudWxsKQorCQkJCW1zZ3MgPSAoKEludGVybmFsRU9iamVjdClub2RlKS5lSW52ZXJzZVJlbW92ZSh0aGlzLCBHcmFwaFBhY2thZ2UuTk9ERV9fTEFCRUxTLCBOb2RlLmNsYXNzLCBtc2dzKTsKKwkJCWlmIChuZXdOb2RlICE9IG51bGwpCisJCQkJbXNncyA9ICgoSW50ZXJuYWxFT2JqZWN0KW5ld05vZGUpLmVJbnZlcnNlQWRkKHRoaXMsIEdyYXBoUGFja2FnZS5OT0RFX19MQUJFTFMsIE5vZGUuY2xhc3MsIG1zZ3MpOworCQkJbXNncyA9IGJhc2ljU2V0Tm9kZShuZXdOb2RlLCBtc2dzKTsKKwkJCWlmIChtc2dzICE9IG51bGwpIG1zZ3MuZGlzcGF0Y2goKTsKKwkJfQorCQllbHNlIGlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkKKwkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIEdyYXBoUGFja2FnZS5OT0RFX0xBQkVMX19OT0RFLCBuZXdOb2RlLCBuZXdOb2RlKSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIE5vdGlmaWNhdGlvbkNoYWluIGVJbnZlcnNlQWRkKEludGVybmFsRU9iamVjdCBvdGhlckVuZCwgaW50IGZlYXR1cmVJRCwgTm90aWZpY2F0aW9uQ2hhaW4gbXNncykgeworCQlzd2l0Y2ggKGZlYXR1cmVJRCkgeworCQkJY2FzZSBHcmFwaFBhY2thZ2UuTk9ERV9MQUJFTF9fTk9ERToKKwkJCQlpZiAobm9kZSAhPSBudWxsKQorCQkJCQltc2dzID0gKChJbnRlcm5hbEVPYmplY3Qpbm9kZSkuZUludmVyc2VSZW1vdmUodGhpcywgR3JhcGhQYWNrYWdlLk5PREVfX0xBQkVMUywgTm9kZS5jbGFzcywgbXNncyk7CisJCQkJcmV0dXJuIGJhc2ljU2V0Tm9kZSgoTm9kZSlvdGhlckVuZCwgbXNncyk7CisJCX0KKwkJcmV0dXJuIHN1cGVyLmVJbnZlcnNlQWRkKG90aGVyRW5kLCBmZWF0dXJlSUQsIG1zZ3MpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBOb3RpZmljYXRpb25DaGFpbiBlSW52ZXJzZVJlbW92ZShJbnRlcm5hbEVPYmplY3Qgb3RoZXJFbmQsIGludCBmZWF0dXJlSUQsIE5vdGlmaWNhdGlvbkNoYWluIG1zZ3MpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJCWNhc2UgR3JhcGhQYWNrYWdlLk5PREVfTEFCRUxfX05PREU6CisJCQkJcmV0dXJuIGJhc2ljU2V0Tm9kZShudWxsLCBtc2dzKTsKKwkJfQorCQlyZXR1cm4gc3VwZXIuZUludmVyc2VSZW1vdmUob3RoZXJFbmQsIGZlYXR1cmVJRCwgbXNncyk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIE9iamVjdCBlR2V0KGludCBmZWF0dXJlSUQsIGJvb2xlYW4gcmVzb2x2ZSwgYm9vbGVhbiBjb3JlVHlwZSkgeworCQlzd2l0Y2ggKGZlYXR1cmVJRCkgeworCQkJY2FzZSBHcmFwaFBhY2thZ2UuTk9ERV9MQUJFTF9fTk9ERToKKwkJCQlpZiAocmVzb2x2ZSkgcmV0dXJuIGdldE5vZGUoKTsKKwkJCQlyZXR1cm4gYmFzaWNHZXROb2RlKCk7CisJCX0KKwkJcmV0dXJuIHN1cGVyLmVHZXQoZmVhdHVyZUlELCByZXNvbHZlLCBjb3JlVHlwZSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgZVNldChpbnQgZmVhdHVyZUlELCBPYmplY3QgbmV3VmFsdWUpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJCWNhc2UgR3JhcGhQYWNrYWdlLk5PREVfTEFCRUxfX05PREU6CisJCQkJc2V0Tm9kZSgoTm9kZSluZXdWYWx1ZSk7CisJCQkJcmV0dXJuOworCQl9CisJCXN1cGVyLmVTZXQoZmVhdHVyZUlELCBuZXdWYWx1ZSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgZVVuc2V0KGludCBmZWF0dXJlSUQpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJCWNhc2UgR3JhcGhQYWNrYWdlLk5PREVfTEFCRUxfX05PREU6CisJCQkJc2V0Tm9kZSgoTm9kZSludWxsKTsKKwkJCQlyZXR1cm47CisJCX0KKwkJc3VwZXIuZVVuc2V0KGZlYXR1cmVJRCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIGJvb2xlYW4gZUlzU2V0KGludCBmZWF0dXJlSUQpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJCWNhc2UgR3JhcGhQYWNrYWdlLk5PREVfTEFCRUxfX05PREU6CisJCQkJcmV0dXJuIG5vZGUgIT0gbnVsbDsKKwkJfQorCQlyZXR1cm4gc3VwZXIuZUlzU2V0KGZlYXR1cmVJRCk7CisJfQorCisJQE92ZXJyaWRlCisJcHVibGljIGJvb2xlYW4gc2FuZSgpIHsKKwkJYm9vbGVhbiByZXRWYWx1ZSA9IHN1cGVyLnNhbmUoKTsKKworCQlyZXRWYWx1ZSA9IHJldFZhbHVlCisJCQkJJiYgKGdldE5vZGUoKSA9PSBudWxsIHx8IGdldE5vZGUoKS5lcXVhbHMoZ2V0SWRlbnRpZmlhYmxlKCkpKTsKKwkJYXNzZXJ0IHJldFZhbHVlOworCisJCXJldHVybiByZXRWYWx1ZTsKKwl9IC8vIHNhbmUKKwkKK30gLy9Ob2RlTGFiZWxJbXBsCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoL2ltcGwvU2ltcGxlR3JhcGhQYXJ0aXRpb25lckltcGwuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGgvaW1wbC9TaW1wbGVHcmFwaFBhcnRpdGlvbmVySW1wbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ2ZjhlYmUKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoL2ltcGwvU2ltcGxlR3JhcGhQYXJ0aXRpb25lckltcGwuamF2YQpAQCAtMCwwICsxLDE1MCBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguaW1wbDsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogCisgKiBDb3B5cmlnaHQgKGMpIDIwMTEgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuIAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyAKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0IAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwgCisgKiAKKyAqIENvbnRyaWJ1dG9yczogCisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKK2ltcG9ydCBqYXZhLnV0aWwuTWFwOworaW1wb3J0IGphdmEudXRpbC5OYXZpZ2FibGVTZXQ7CitpbXBvcnQgamF2YS51dGlsLlRyZWVTZXQ7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuQmFzaWNFTGlzdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuRUxpc3Q7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzczsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLklkZW50aWZpYWJsZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguRHluYW1pY0xhYmVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5HcmFwaFBhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLlNpbXBsZUdyYXBoUGFydGl0aW9uZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLkRlY29yYXRvcjsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPlNpbXBsZSBHcmFwaCBQYXJ0aXRpb25lcjwvYj48L2VtPicuCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIDxwPgorICogPC9wPgorICoKKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIFNpbXBsZUdyYXBoUGFydGl0aW9uZXJJbXBsIGV4dGVuZHMgR3JhcGhQYXJ0aXRpb25lckltcGwgaW1wbGVtZW50cyBTaW1wbGVHcmFwaFBhcnRpdGlvbmVyIHsKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgU2ltcGxlR3JhcGhQYXJ0aXRpb25lckltcGwoKSB7CisJCXN1cGVyKCk7CisJfQorCisJcHJvdGVjdGVkIE1hcDxEZWNvcmF0b3IsIE1hcDxJbnRlZ2VyLCBFTGlzdDxEeW5hbWljTGFiZWw+Pj4gbGFiZWxQYXJ0aXRpb25NYXAgPSBuZXcgSGFzaE1hcDxEZWNvcmF0b3IsIE1hcDxJbnRlZ2VyLCBFTGlzdDxEeW5hbWljTGFiZWw+Pj4oKTsKKwkKKwkKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgRUNsYXNzIGVTdGF0aWNDbGFzcygpIHsKKwkJcmV0dXJuIEdyYXBoUGFja2FnZS5MaXRlcmFscy5TSU1QTEVfR1JBUEhfUEFSVElUSU9ORVI7CisJfQorCQorCS8qKgorCSAqIE92ZXJyaWRlIHRvIGNsZWFyIG1hcAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIHNldE51bVByb2Nlc3NlcyhpbnQgbmV3TnVtUHJvY2Vzc2VzKSB7CisJCWlmKGdldE51bVByb2Nlc3NlcygpICE9IG5ld051bVByb2Nlc3NlcykgCisJCQlsYWJlbFBhcnRpdGlvbk1hcC5jbGVhcigpOworCQlzdXBlci5zZXROdW1Qcm9jZXNzZXMobmV3TnVtUHJvY2Vzc2VzKTsKKwl9CisJCisJLyoqCisJICogU2ltcGx5IGRpdmlkZSB0aGUgbGFiZWxzIHRoZSBkZWNvcmF0b3IgaXMgdXBkYXRpbmcgZXF1YWxseSBhbW9uZyB0aGUgCisJICogcHJvY2Vzc2VzIGFscGhhYmV0aWNhbGx5IGJ5IHRoZSBub2RlIFVSSS4gVGhlIG1ldGhvZCBpcyBzeW5jaHJvbml6ZWQKKwkgKiBzaW5jZSB0aGUgbGFiZWxQYXJ0aXRpb25NYXAgaXMgc2hhcmVkIGFtb25nIHRoZSB0aHJlYWRzLCBidXQgbW9zdCBvZiB0aGUgdGltZXMKKwkgKiB0aGUgbWV0aG9kIHdpbGwgcmV0dXJuIHJpZ2h0IGF3YXkgdXNpbmcgdGhlIGFscmVhZHkgY2FjaGVkIHJlc3VsdHMgc28gcGVyZm9ybWFuY2UKKwkgKiBpcyBub3QgYSBjb25jZXJuLgorCSAqLworCUBTdXBwcmVzc1dhcm5pbmdzKCJib3hpbmciKQorCUBPdmVycmlkZQorCXB1YmxpYyBFTGlzdDxEeW5hbWljTGFiZWw+IHBhcnRpdGlvbkRlY29yYXRvckxhYmVscyhEZWNvcmF0b3IgZGVjb3JhdG9yLCBpbnQgcHJvY2Vzc1JhbmspIHsKKwkJc3luY2hyb25pemVkKGxhYmVsUGFydGl0aW9uTWFwKSB7CisJCQlpZihsYWJlbFBhcnRpdGlvbk1hcCAhPSBudWxsICYmIGxhYmVsUGFydGl0aW9uTWFwLmNvbnRhaW5zS2V5KGRlY29yYXRvcikgICYmCisJCQkJCWxhYmVsUGFydGl0aW9uTWFwLmdldChkZWNvcmF0b3IpLmNvbnRhaW5zS2V5KHByb2Nlc3NSYW5rKSkgeworCQkJCUVMaXN0PER5bmFtaWNMYWJlbD4gcmVzID0gbGFiZWxQYXJ0aXRpb25NYXAuZ2V0KGRlY29yYXRvcikuZ2V0KHByb2Nlc3NSYW5rKTsKKwkJCQlyZXR1cm4gcmVzOworCQkJfQorCisJCQlFTGlzdDxEeW5hbWljTGFiZWw+IHRlbXAgPSBuZXcgQmFzaWNFTGlzdDxEeW5hbWljTGFiZWw+KCk7IAorCisJCQkvLyBGaW5kIHRoZSBub2RlIGFuZCBwYXJ0aXRpb24gdGhlIGxhYmVscyBhY2NvcmRpbmcgdG8gdGhlaXIgbm9kZS4KKworCQkJLy8gVHJlZVNldCBndWFyYW50ZWVzIE8obG9nKG4pKSBhZGQvY29udGFpbnMKKwkJCVRyZWVTZXQ8U3RyaW5nPm5vZGVVUklzID0gbmV3IFRyZWVTZXQ8U3RyaW5nPigpOworCQkJZm9yKER5bmFtaWNMYWJlbCBsYWI6ZGVjb3JhdG9yLmdldExhYmVsc1RvVXBkYXRlKCkpIHsKKwkJCQlTdHJpbmcgdXJpID0gbGFiLmdldElkZW50aWZpYWJsZSgpLmdldFVSSSgpLnRvU3RyaW5nKCk7CisJCQkJaWYoIW5vZGVVUklzLmNvbnRhaW5zKHVyaSkpIG5vZGVVUklzLmFkZCh1cmkpOworCQkJfQorCisJCQlpbnQgc2l6ZSA9IG5vZGVVUklzLnNpemUoKTsKKwkJCWlmKHByb2Nlc3NSYW5rID09IDAgfHwgc2l6ZSA+IDEpIHsgLy8gSWYgc2l6ZSBpcyAxIGFuZCBwcm9jZXNzUmFuayBpcyAwIHRoZSBzaW5nbGUgbm9kZSBnZXRzIGFzc2lnbmVkIHRvIHRoZSBmaXJzdCBDUFUuCisJCQkJaW50IG5vZGVzUGVyUGFydGl0aW9uID0gc2l6ZSAvIGdldE51bVByb2Nlc3NlcygpOworCQkJCWludCBzdGFydCA9ICBwcm9jZXNzUmFuaypub2Rlc1BlclBhcnRpdGlvbjsKKwkJCQlpbnQgZW5kOworCQkJCWlmKHByb2Nlc3NSYW5rID09IGdldE51bVByb2Nlc3NlcygpIC0xKSBlbmQgPSBzaXplOyAvLyBUaGUgbGFzdCB0aHJlYWRzIGdyYWJzIGFsbCBub2RlcyB1bnRpbCB0aGUgbGFzdCBvbmUKKwkJCQllbHNlIGVuZCA9IHN0YXJ0ICsgbm9kZXNQZXJQYXJ0aXRpb247CisJCQkJU3RyaW5nIGZpcnN0PW5vZGVVUklzLmZpcnN0KCk7CisJCQkJZm9yKGludCBpPTA7aTxzdGFydDsrK2kpIGZpcnN0ID0gbm9kZVVSSXMuaGlnaGVyKGZpcnN0KTsKKwkJCQlTdHJpbmcgbGFzdCA9IGZpcnN0OworCQkJCWZvcihpbnQgaT1zdGFydDtpPGVuZC0xOysraSkJbGFzdCA9IG5vZGVVUklzLmhpZ2hlcihsYXN0KTsKKworCQkJCU5hdmlnYWJsZVNldDxTdHJpbmc+cHJvY2Vzc1VSSXMgPSAgbm9kZVVSSXMuc3ViU2V0KGZpcnN0LCB0cnVlLCBsYXN0LCB0cnVlKTsKKworCQkJCWZvcihEeW5hbWljTGFiZWwgZGw6ZGVjb3JhdG9yLmdldExhYmVsc1RvVXBkYXRlKCkpIHsKKwkJCQkJaWYocHJvY2Vzc1VSSXMuY29udGFpbnMoZGwuZ2V0SWRlbnRpZmlhYmxlKCkuZ2V0VVJJKCkudG9TdHJpbmcoKSkpIHsKKwkJCQkJCXRlbXAuYWRkKGRsKTsKKwkJCQkJfSAKKwkJCQl9CisJCQl9CisKKwkJCU1hcDxJbnRlZ2VyLCBFTGlzdDxEeW5hbWljTGFiZWw+PiBwYXJ0aXRpb25NYXAgPSBudWxsOworCisJCQlpZihsYWJlbFBhcnRpdGlvbk1hcC5jb250YWluc0tleShkZWNvcmF0b3IpKQorCQkJCXBhcnRpdGlvbk1hcCA9IGxhYmVsUGFydGl0aW9uTWFwLmdldChkZWNvcmF0b3IpOworCQkJZWxzZSB7CisJCQkJcGFydGl0aW9uTWFwID0gbmV3IEhhc2hNYXA8SW50ZWdlciwgRUxpc3Q8RHluYW1pY0xhYmVsPj4oKTsKKwkJCQlsYWJlbFBhcnRpdGlvbk1hcC5wdXQoZGVjb3JhdG9yLCBwYXJ0aXRpb25NYXApOworCQkJfQorCisJCQlwYXJ0aXRpb25NYXAucHV0KHByb2Nlc3NSYW5rLCB0ZW1wKTsKKwkJCWxvbmcgdGltZUFmdGVyID0gU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCk7CisJCQlyZXR1cm4gdGVtcDsKKwkJfQorCX0KKwkKKwkvKioKKwkgKiBTYW1lIGFzIGFib3ZlIGJ1dCByZXR1cm4gYWxsIGxhYmVscyBoYW5kbGVkIGJ5IHRoaXMgZGVjb3JhdG9yCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIEVMaXN0PER5bmFtaWNMYWJlbD4gcGFydGl0aW9uRGVjb3JhdG9yTGFiZWxzKERlY29yYXRvciBkZWNvcmF0b3IpIHsKKwkJcmV0dXJuIGRlY29yYXRvci5nZXRMYWJlbHNUb1VwZGF0ZSgpOworCX0KKwkKKwkvKioKKwkgKiBFdmVyeXRoaW5nIGlzIG1hbmFnZWQgYnkgdGhpcyBydW5uaW5nIFNURU0gaW5zdGFuY2UKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgYm9vbGVhbiBpc01hbmFnZWQoSWRlbnRpZmlhYmxlIGlkZW50aWZpYWJsZSkgeworCQlyZXR1cm4gdHJ1ZTsKKwl9CisKK30gLy9TaW1wbGVHcmFwaFBhcnRpdGlvbmVySW1wbApkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC9pbXBsL1N0YXRpY0VkZ2VMYWJlbEltcGwuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGgvaW1wbC9TdGF0aWNFZGdlTGFiZWxJbXBsLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2E2NjRkYQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGgvaW1wbC9TdGF0aWNFZGdlTGFiZWxJbXBsLmphdmEKQEAgLTAsMCArMSw3MCBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguaW1wbDsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8vaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbjsKKworLy9pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uQ2hhaW47CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uSWRlbnRpZmlhYmxlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5FZGdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5HcmFwaFBhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLlN0YXRpY0VkZ2VMYWJlbDsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPlN0YXRpYyBFZGdlIExhYmVsPC9iPjwvZW0+Jy4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogPHA+CisgKiA8L3A+CisgKgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgYWJzdHJhY3QgY2xhc3MgU3RhdGljRWRnZUxhYmVsSW1wbCBleHRlbmRzIEVkZ2VMYWJlbEltcGwgaW1wbGVtZW50cyBTdGF0aWNFZGdlTGFiZWwgeworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBTdGF0aWNFZGdlTGFiZWxJbXBsKCkgeworCQlzdXBlcigpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCBFQ2xhc3MgZVN0YXRpY0NsYXNzKCkgeworCQlyZXR1cm4gR3JhcGhQYWNrYWdlLkxpdGVyYWxzLlNUQVRJQ19FREdFX0xBQkVMOworCX0KKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmltcGwuTGFiZWxJbXBsI2dldElkZW50aWZpYWJsZSgpCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIElkZW50aWZpYWJsZSBnZXRJZGVudGlmaWFibGUoKSB7CisJCXJldHVybiBnZXRFZGdlKCk7CisJfSAvLyBnZXRJZGVudGlmaWFibGUKKworCQorCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmltcGwuTGFiZWxJbXBsI3NldElkZW50aWZpYWJsZShvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLklkZW50aWZpYWJsZSkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBzZXRJZGVudGlmaWFibGUoSWRlbnRpZmlhYmxlIG5ld0lkZW50aWZpYWJsZSkgeworCQlzZXRFZGdlKChFZGdlKW5ld0lkZW50aWZpYWJsZSk7CisJfSAvLyBzZXRJZGVudGlmaWFibGUKKworfSAvL1N0YXRpY0VkZ2VMYWJlbEltcGwKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoL2ltcGwvU3RhdGljTGFiZWxJbXBsLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoL2ltcGwvU3RhdGljTGFiZWxJbXBsLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOThiMTM1MAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGgvaW1wbC9TdGF0aWNMYWJlbEltcGwuamF2YQpAQCAtMCwwICsxLDQ3IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5pbXBsOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAKKyAqIENvcHlyaWdodCAoYykgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4gCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIAorICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wIAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQgCisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbCAKKyAqIAorICogQ29udHJpYnV0b3JzOiAKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5HcmFwaFBhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLlN0YXRpY0xhYmVsOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiBBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+U3RhdGljIExhYmVsPC9iPjwvZW0+Jy4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogPHA+CisgKiA8L3A+CisgKgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgYWJzdHJhY3QgY2xhc3MgU3RhdGljTGFiZWxJbXBsIGV4dGVuZHMgTGFiZWxJbXBsIGltcGxlbWVudHMgU3RhdGljTGFiZWwgeworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBTdGF0aWNMYWJlbEltcGwoKSB7CisJCXN1cGVyKCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIEVDbGFzcyBlU3RhdGljQ2xhc3MoKSB7CisJCXJldHVybiBHcmFwaFBhY2thZ2UuTGl0ZXJhbHMuU1RBVElDX0xBQkVMOworCX0KKworfSAvL1N0YXRpY0xhYmVsSW1wbApkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC9pbXBsL1N0YXRpY05vZGVMYWJlbEltcGwuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGgvaW1wbC9TdGF0aWNOb2RlTGFiZWxJbXBsLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGNhZGZjMQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGgvaW1wbC9TdGF0aWNOb2RlTGFiZWxJbXBsLmphdmEKQEAgLTAsMCArMSw4NyBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguaW1wbDsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuIAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyAKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0IAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwgCisgKiAKKyAqIENvbnRyaWJ1dG9yczogCisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgCisvL2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb247CisvL2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb25DaGFpbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uSWRlbnRpZmlhYmxlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5HcmFwaFBhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLk5vZGU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLlN0YXRpY05vZGVMYWJlbDsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPlN0YXRpYyBOb2RlIExhYmVsPC9iPjwvZW0+Jy4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogPHA+CisgKiA8L3A+CisgKgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgYWJzdHJhY3QgY2xhc3MgU3RhdGljTm9kZUxhYmVsSW1wbCBleHRlbmRzIE5vZGVMYWJlbEltcGwgaW1wbGVtZW50cyBTdGF0aWNOb2RlTGFiZWwgeworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBTdGF0aWNOb2RlTGFiZWxJbXBsKCkgeworCQlzdXBlcigpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCBFQ2xhc3MgZVN0YXRpY0NsYXNzKCkgeworCQlyZXR1cm4gR3JhcGhQYWNrYWdlLkxpdGVyYWxzLlNUQVRJQ19OT0RFX0xBQkVMOworCX0KKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmltcGwuTGFiZWxJbXBsI2dldElkZW50aWZpYWJsZSgpCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIElkZW50aWZpYWJsZSBnZXRJZGVudGlmaWFibGUoKSB7CisJCXJldHVybiBnZXROb2RlKCk7CisJfSAvLyBnZXRJZGVudGlmaWFibGUKKworCQorCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmltcGwuTGFiZWxJbXBsI3NldElkZW50aWZpYWJsZShvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLklkZW50aWZpYWJsZSkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBzZXRJZGVudGlmaWFibGUoSWRlbnRpZmlhYmxlIG5ld0lkZW50aWZpYWJsZSkgeworCQlzdXBlci5zZXRJZGVudGlmaWFibGUobmV3SWRlbnRpZmlhYmxlKTsKKwkJc2V0Tm9kZSgoTm9kZSluZXdJZGVudGlmaWFibGUpOworCX0gLy8gc2V0SWRlbnRpZmlhYmxlCisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5pbXBsLkxhYmVsSW1wbCNzYW5lKCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgYm9vbGVhbiBzYW5lKCkgeworCQlib29sZWFuIHJldFZhbHVlID0gc3VwZXIuc2FuZSgpOworCQkKKwkJcmV0VmFsdWUgPSByZXRWYWx1ZSAmJiBnZXROb2RlKCkgIT0gbnVsbCA/IGdldFVSSU9mSWRlbnRpZmlhYmxlVG9CZUxhYmVsZWQoKQorCQkJCS5lcXVhbHMoZ2V0Tm9kZSgpLmdldFVSSSgpKQorCQkJCTogdHJ1ZTsKKwkJYXNzZXJ0IHJldFZhbHVlOworCQkJCisJCXJldFZhbHVlID0gcmV0VmFsdWUgJiYgZ2V0Tm9kZSgpID09IGdldElkZW50aWZpYWJsZSgpOworCQlhc3NlcnQgcmV0VmFsdWU7CisJCQorCQlyZXR1cm4gcmV0VmFsdWU7CisJfSAvLyBzYW5lCisJCit9IC8vU3RhdGljTm9kZUxhYmVsSW1wbApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGgvaW1wbC9VUklUb0VkZ2VNYXBFbnRyeUltcGwuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGgvaW1wbC9VUklUb0VkZ2VNYXBFbnRyeUltcGwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hN2M1ZmZiCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC9pbXBsL1VSSVRvRWRnZU1hcEVudHJ5SW1wbC5qYXZhCkBAIC0wLDAgKzEsMzMxIEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5pbXBsOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb25DaGFpbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuQmFzaWNFTWFwOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5FTWFwOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5VUkk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzczsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuSW50ZXJuYWxFT2JqZWN0OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5pbXBsLkVOb3RpZmljYXRpb25JbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5pbXBsLkVPYmplY3RJbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5FZGdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5HcmFwaFBhY2thZ2U7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIEFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5VUkkgVG8gRWRnZSBNYXAgRW50cnk8L2I+PC9lbT4nLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiA8cD4KKyAqIFRoZSBmb2xsb3dpbmcgZmVhdHVyZXMgYXJlIGltcGxlbWVudGVkOgorICogPHVsPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5pbXBsLlVSSVRvRWRnZU1hcEVudHJ5SW1wbCNnZXRUeXBlZEtleSA8ZW0+S2V5PC9lbT59PC9saT4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguaW1wbC5VUklUb0VkZ2VNYXBFbnRyeUltcGwjZ2V0VHlwZWRWYWx1ZSA8ZW0+VmFsdWU8L2VtPn08L2xpPgorICogPC91bD4KKyAqIDwvcD4KKyAqCisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBVUklUb0VkZ2VNYXBFbnRyeUltcGwgZXh0ZW5kcyBFT2JqZWN0SW1wbCBpbXBsZW1lbnRzIEJhc2ljRU1hcC5FbnRyeTxVUkksRWRnZT4geworCS8qKgorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRUeXBlZEtleSgpIDxlbT5LZXk8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI2dldFR5cGVkS2V5KCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIFVSSSBLRVlfRURFRkFVTFQgPSBudWxsOworCisJLyoqCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0VHlwZWRLZXkoKSA8ZW0+S2V5PC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNnZXRUeXBlZEtleSgpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIFVSSSBrZXkgPSBLRVlfRURFRkFVTFQ7CisKKwkvKioKKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRUeXBlZFZhbHVlKCkgPGVtPlZhbHVlPC9lbT59JyBjb250YWlubWVudCByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNnZXRUeXBlZFZhbHVlKCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgRWRnZSB2YWx1ZTsKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBVUklUb0VkZ2VNYXBFbnRyeUltcGwoKSB7CisJCXN1cGVyKCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIEVDbGFzcyBlU3RhdGljQ2xhc3MoKSB7CisJCXJldHVybiBHcmFwaFBhY2thZ2UuTGl0ZXJhbHMuVVJJX1RPX0VER0VfTUFQX0VOVFJZOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBVUkkgZ2V0VHlwZWRLZXkoKSB7CisJCXJldHVybiBrZXk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgc2V0VHlwZWRLZXkoVVJJIG5ld0tleSkgeworCQlVUkkgb2xkS2V5ID0ga2V5OworCQlrZXkgPSBuZXdLZXk7CisJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkKKwkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIEdyYXBoUGFja2FnZS5VUklfVE9fRURHRV9NQVBfRU5UUllfX0tFWSwgb2xkS2V5LCBrZXkpKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRWRnZSBnZXRUeXBlZFZhbHVlKCkgeworCQlyZXR1cm4gdmFsdWU7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIE5vdGlmaWNhdGlvbkNoYWluIGJhc2ljU2V0VHlwZWRWYWx1ZShFZGdlIG5ld1ZhbHVlLCBOb3RpZmljYXRpb25DaGFpbiBtc2dzKSB7CisJCUVkZ2Ugb2xkVmFsdWUgPSB2YWx1ZTsKKwkJdmFsdWUgPSBuZXdWYWx1ZTsKKwkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKSB7CisJCQlFTm90aWZpY2F0aW9uSW1wbCBub3RpZmljYXRpb24gPSBuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgR3JhcGhQYWNrYWdlLlVSSV9UT19FREdFX01BUF9FTlRSWV9fVkFMVUUsIG9sZFZhbHVlLCBuZXdWYWx1ZSk7CisJCQlpZiAobXNncyA9PSBudWxsKSBtc2dzID0gbm90aWZpY2F0aW9uOyBlbHNlIG1zZ3MuYWRkKG5vdGlmaWNhdGlvbik7CisJCX0KKwkJcmV0dXJuIG1zZ3M7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgc2V0VHlwZWRWYWx1ZShFZGdlIG5ld1ZhbHVlKSB7CisJCWlmIChuZXdWYWx1ZSAhPSB2YWx1ZSkgeworCQkJTm90aWZpY2F0aW9uQ2hhaW4gbXNncyA9IG51bGw7CisJCQlpZiAodmFsdWUgIT0gbnVsbCkKKwkJCQltc2dzID0gKChJbnRlcm5hbEVPYmplY3QpdmFsdWUpLmVJbnZlcnNlUmVtb3ZlKHRoaXMsIEVPUFBPU0lURV9GRUFUVVJFX0JBU0UgLSBHcmFwaFBhY2thZ2UuVVJJX1RPX0VER0VfTUFQX0VOVFJZX19WQUxVRSwgbnVsbCwgbXNncyk7CisJCQlpZiAobmV3VmFsdWUgIT0gbnVsbCkKKwkJCQltc2dzID0gKChJbnRlcm5hbEVPYmplY3QpbmV3VmFsdWUpLmVJbnZlcnNlQWRkKHRoaXMsIEVPUFBPU0lURV9GRUFUVVJFX0JBU0UgLSBHcmFwaFBhY2thZ2UuVVJJX1RPX0VER0VfTUFQX0VOVFJZX19WQUxVRSwgbnVsbCwgbXNncyk7CisJCQltc2dzID0gYmFzaWNTZXRUeXBlZFZhbHVlKG5ld1ZhbHVlLCBtc2dzKTsKKwkJCWlmIChtc2dzICE9IG51bGwpIG1zZ3MuZGlzcGF0Y2goKTsKKwkJfQorCQllbHNlIGlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkKKwkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIEdyYXBoUGFja2FnZS5VUklfVE9fRURHRV9NQVBfRU5UUllfX1ZBTFVFLCBuZXdWYWx1ZSwgbmV3VmFsdWUpKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgTm90aWZpY2F0aW9uQ2hhaW4gZUludmVyc2VSZW1vdmUoSW50ZXJuYWxFT2JqZWN0IG90aGVyRW5kLCBpbnQgZmVhdHVyZUlELCBOb3RpZmljYXRpb25DaGFpbiBtc2dzKSB7CisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7CisJCQljYXNlIEdyYXBoUGFja2FnZS5VUklfVE9fRURHRV9NQVBfRU5UUllfX1ZBTFVFOgorCQkJCXJldHVybiBiYXNpY1NldFR5cGVkVmFsdWUobnVsbCwgbXNncyk7CisJCX0KKwkJcmV0dXJuIHN1cGVyLmVJbnZlcnNlUmVtb3ZlKG90aGVyRW5kLCBmZWF0dXJlSUQsIG1zZ3MpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBPYmplY3QgZUdldChpbnQgZmVhdHVyZUlELCBib29sZWFuIHJlc29sdmUsIGJvb2xlYW4gY29yZVR5cGUpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJCWNhc2UgR3JhcGhQYWNrYWdlLlVSSV9UT19FREdFX01BUF9FTlRSWV9fS0VZOgorCQkJCXJldHVybiBnZXRUeXBlZEtleSgpOworCQkJY2FzZSBHcmFwaFBhY2thZ2UuVVJJX1RPX0VER0VfTUFQX0VOVFJZX19WQUxVRToKKwkJCQlyZXR1cm4gZ2V0VHlwZWRWYWx1ZSgpOworCQl9CisJCXJldHVybiBzdXBlci5lR2V0KGZlYXR1cmVJRCwgcmVzb2x2ZSwgY29yZVR5cGUpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGVTZXQoaW50IGZlYXR1cmVJRCwgT2JqZWN0IG5ld1ZhbHVlKSB7CisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7CisJCQljYXNlIEdyYXBoUGFja2FnZS5VUklfVE9fRURHRV9NQVBfRU5UUllfX0tFWToKKwkJCQlzZXRUeXBlZEtleSgoVVJJKW5ld1ZhbHVlKTsKKwkJCQlyZXR1cm47CisJCQljYXNlIEdyYXBoUGFja2FnZS5VUklfVE9fRURHRV9NQVBfRU5UUllfX1ZBTFVFOgorCQkJCXNldFR5cGVkVmFsdWUoKEVkZ2UpbmV3VmFsdWUpOworCQkJCXJldHVybjsKKwkJfQorCQlzdXBlci5lU2V0KGZlYXR1cmVJRCwgbmV3VmFsdWUpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGVVbnNldChpbnQgZmVhdHVyZUlEKSB7CisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7CisJCQljYXNlIEdyYXBoUGFja2FnZS5VUklfVE9fRURHRV9NQVBfRU5UUllfX0tFWToKKwkJCQlzZXRUeXBlZEtleShLRVlfRURFRkFVTFQpOworCQkJCXJldHVybjsKKwkJCWNhc2UgR3JhcGhQYWNrYWdlLlVSSV9UT19FREdFX01BUF9FTlRSWV9fVkFMVUU6CisJCQkJc2V0VHlwZWRWYWx1ZSgoRWRnZSludWxsKTsKKwkJCQlyZXR1cm47CisJCX0KKwkJc3VwZXIuZVVuc2V0KGZlYXR1cmVJRCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIGJvb2xlYW4gZUlzU2V0KGludCBmZWF0dXJlSUQpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJCWNhc2UgR3JhcGhQYWNrYWdlLlVSSV9UT19FREdFX01BUF9FTlRSWV9fS0VZOgorCQkJCXJldHVybiBLRVlfRURFRkFVTFQgPT0gbnVsbCA/IGtleSAhPSBudWxsIDogIUtFWV9FREVGQVVMVC5lcXVhbHMoa2V5KTsKKwkJCWNhc2UgR3JhcGhQYWNrYWdlLlVSSV9UT19FREdFX01BUF9FTlRSWV9fVkFMVUU6CisJCQkJcmV0dXJuIHZhbHVlICE9IG51bGw7CisJCX0KKwkJcmV0dXJuIHN1cGVyLmVJc1NldChmZWF0dXJlSUQpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKSB7CisJCWlmIChlSXNQcm94eSgpKSByZXR1cm4gc3VwZXIudG9TdHJpbmcoKTsKKworCQlTdHJpbmdCdWZmZXIgcmVzdWx0ID0gbmV3IFN0cmluZ0J1ZmZlcihzdXBlci50b1N0cmluZygpKTsKKwkJcmVzdWx0LmFwcGVuZCgiIChrZXk6ICIpOyAvLyROT04tTkxTLTEkCisJCXJlc3VsdC5hcHBlbmQoa2V5KTsKKwkJcmVzdWx0LmFwcGVuZCgnKScpOworCQlyZXR1cm4gcmVzdWx0LnRvU3RyaW5nKCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIGludCBoYXNoID0gLTE7CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgaW50IGdldEhhc2goKSB7CisJCWlmIChoYXNoID09IC0xKSB7CisJCQlPYmplY3QgdGhlS2V5ID0gZ2V0S2V5KCk7CisJCQloYXNoID0gKHRoZUtleSA9PSBudWxsID8gMCA6IHRoZUtleS5oYXNoQ29kZSgpKTsKKwkJfQorCQlyZXR1cm4gaGFzaDsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRIYXNoKGludCBoYXNoKSB7CisJCXRoaXMuaGFzaCA9IGhhc2g7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFVSSSBnZXRLZXkoKSB7CisJCXJldHVybiBnZXRUeXBlZEtleSgpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIHNldEtleShVUkkga2V5KSB7CisJCXNldFR5cGVkS2V5KGtleSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVkZ2UgZ2V0VmFsdWUoKSB7CisJCXJldHVybiBnZXRUeXBlZFZhbHVlKCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVkZ2Ugc2V0VmFsdWUoRWRnZSB2YWx1ZSkgeworCQlFZGdlIG9sZFZhbHVlID0gZ2V0VmFsdWUoKTsKKwkJc2V0VHlwZWRWYWx1ZSh2YWx1ZSk7CisJCXJldHVybiBvbGRWYWx1ZTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAU3VwcHJlc3NXYXJuaW5ncygidW5jaGVja2VkIikKKwlwdWJsaWMgRU1hcDxVUkksIEVkZ2U+IGdldEVNYXAoKSB7CisJCUVPYmplY3QgY29udGFpbmVyID0gZUNvbnRhaW5lcigpOworCQlyZXR1cm4gY29udGFpbmVyID09IG51bGwgPyBudWxsIDogKEVNYXA8VVJJLCBFZGdlPiljb250YWluZXIuZUdldChlQ29udGFpbm1lbnRGZWF0dXJlKCkpOworCX0KKworfSAvL1VSSVRvRWRnZU1hcEVudHJ5SW1wbApkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC9pbXBsL1VSSVRvSWRlbnRpZmlhYmxlTWFwRW50cnlJbXBsLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoL2ltcGwvVVJJVG9JZGVudGlmaWFibGVNYXBFbnRyeUltcGwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NmNmOTE0Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC9pbXBsL1VSSVRvSWRlbnRpZmlhYmxlTWFwRW50cnlJbXBsLmphdmEKQEAgLTAsMCArMSwzMzIgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmltcGw7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIAorICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiAKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdCAKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sIAorICogCisgKiBDb250cmlidXRvcnM6IAorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiAKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworIAorCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbkNoYWluOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5CYXNpY0VNYXA7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLkVNYXA7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlVSSTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5JbnRlcm5hbEVPYmplY3Q7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLmltcGwuRU5vdGlmaWNhdGlvbkltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLmltcGwuRU9iamVjdEltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5JZGVudGlmaWFibGU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkdyYXBoUGFja2FnZTsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPlVSSSBUbyBJZGVudGlmaWFibGUgTWFwIEVudHJ5PC9iPjwvZW0+Jy4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogPHA+CisgKiBUaGUgZm9sbG93aW5nIGZlYXR1cmVzIGFyZSBpbXBsZW1lbnRlZDoKKyAqIDx1bD4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguaW1wbC5VUklUb0lkZW50aWZpYWJsZU1hcEVudHJ5SW1wbCNnZXRUeXBlZEtleSA8ZW0+S2V5PC9lbT59PC9saT4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguaW1wbC5VUklUb0lkZW50aWZpYWJsZU1hcEVudHJ5SW1wbCNnZXRUeXBlZFZhbHVlIDxlbT5WYWx1ZTwvZW0+fTwvbGk+CisgKiA8L3VsPgorICogPC9wPgorICoKKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIFVSSVRvSWRlbnRpZmlhYmxlTWFwRW50cnlJbXBsIGV4dGVuZHMgRU9iamVjdEltcGwgaW1wbGVtZW50cyBCYXNpY0VNYXAuRW50cnk8VVJJLElkZW50aWZpYWJsZT4geworCS8qKgorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRUeXBlZEtleSgpIDxlbT5LZXk8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI2dldFR5cGVkS2V5KCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIFVSSSBLRVlfRURFRkFVTFQgPSBudWxsOworCisJLyoqCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0VHlwZWRLZXkoKSA8ZW0+S2V5PC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNnZXRUeXBlZEtleSgpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIFVSSSBrZXkgPSBLRVlfRURFRkFVTFQ7CisKKwkvKioKKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRUeXBlZFZhbHVlKCkgPGVtPlZhbHVlPC9lbT59JyBjb250YWlubWVudCByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNnZXRUeXBlZFZhbHVlKCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgSWRlbnRpZmlhYmxlIHZhbHVlOworCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIFVSSVRvSWRlbnRpZmlhYmxlTWFwRW50cnlJbXBsKCkgeworCQlzdXBlcigpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCBFQ2xhc3MgZVN0YXRpY0NsYXNzKCkgeworCQlyZXR1cm4gR3JhcGhQYWNrYWdlLkxpdGVyYWxzLlVSSV9UT19JREVOVElGSUFCTEVfTUFQX0VOVFJZOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBVUkkgZ2V0VHlwZWRLZXkoKSB7CisJCXJldHVybiBrZXk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgc2V0VHlwZWRLZXkoVVJJIG5ld0tleSkgeworCQlVUkkgb2xkS2V5ID0ga2V5OworCQlrZXkgPSBuZXdLZXk7CisJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkKKwkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIEdyYXBoUGFja2FnZS5VUklfVE9fSURFTlRJRklBQkxFX01BUF9FTlRSWV9fS0VZLCBvbGRLZXksIGtleSkpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBJZGVudGlmaWFibGUgZ2V0VHlwZWRWYWx1ZSgpIHsKKwkJcmV0dXJuIHZhbHVlOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBOb3RpZmljYXRpb25DaGFpbiBiYXNpY1NldFR5cGVkVmFsdWUoSWRlbnRpZmlhYmxlIG5ld1ZhbHVlLCBOb3RpZmljYXRpb25DaGFpbiBtc2dzKSB7CisJCUlkZW50aWZpYWJsZSBvbGRWYWx1ZSA9IHZhbHVlOworCQl2YWx1ZSA9IG5ld1ZhbHVlOworCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpIHsKKwkJCUVOb3RpZmljYXRpb25JbXBsIG5vdGlmaWNhdGlvbiA9IG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBHcmFwaFBhY2thZ2UuVVJJX1RPX0lERU5USUZJQUJMRV9NQVBfRU5UUllfX1ZBTFVFLCBvbGRWYWx1ZSwgbmV3VmFsdWUpOworCQkJaWYgKG1zZ3MgPT0gbnVsbCkgbXNncyA9IG5vdGlmaWNhdGlvbjsgZWxzZSBtc2dzLmFkZChub3RpZmljYXRpb24pOworCQl9CisJCXJldHVybiBtc2dzOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIHNldFR5cGVkVmFsdWUoSWRlbnRpZmlhYmxlIG5ld1ZhbHVlKSB7CisJCWlmIChuZXdWYWx1ZSAhPSB2YWx1ZSkgeworCQkJTm90aWZpY2F0aW9uQ2hhaW4gbXNncyA9IG51bGw7CisJCQlpZiAodmFsdWUgIT0gbnVsbCkKKwkJCQltc2dzID0gKChJbnRlcm5hbEVPYmplY3QpdmFsdWUpLmVJbnZlcnNlUmVtb3ZlKHRoaXMsIEVPUFBPU0lURV9GRUFUVVJFX0JBU0UgLSBHcmFwaFBhY2thZ2UuVVJJX1RPX0lERU5USUZJQUJMRV9NQVBfRU5UUllfX1ZBTFVFLCBudWxsLCBtc2dzKTsKKwkJCWlmIChuZXdWYWx1ZSAhPSBudWxsKQorCQkJCW1zZ3MgPSAoKEludGVybmFsRU9iamVjdCluZXdWYWx1ZSkuZUludmVyc2VBZGQodGhpcywgRU9QUE9TSVRFX0ZFQVRVUkVfQkFTRSAtIEdyYXBoUGFja2FnZS5VUklfVE9fSURFTlRJRklBQkxFX01BUF9FTlRSWV9fVkFMVUUsIG51bGwsIG1zZ3MpOworCQkJbXNncyA9IGJhc2ljU2V0VHlwZWRWYWx1ZShuZXdWYWx1ZSwgbXNncyk7CisJCQlpZiAobXNncyAhPSBudWxsKSBtc2dzLmRpc3BhdGNoKCk7CisJCX0KKwkJZWxzZSBpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpCisJCQllTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBHcmFwaFBhY2thZ2UuVVJJX1RPX0lERU5USUZJQUJMRV9NQVBfRU5UUllfX1ZBTFVFLCBuZXdWYWx1ZSwgbmV3VmFsdWUpKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgTm90aWZpY2F0aW9uQ2hhaW4gZUludmVyc2VSZW1vdmUoSW50ZXJuYWxFT2JqZWN0IG90aGVyRW5kLCBpbnQgZmVhdHVyZUlELCBOb3RpZmljYXRpb25DaGFpbiBtc2dzKSB7CisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7CisJCQljYXNlIEdyYXBoUGFja2FnZS5VUklfVE9fSURFTlRJRklBQkxFX01BUF9FTlRSWV9fVkFMVUU6CisJCQkJcmV0dXJuIGJhc2ljU2V0VHlwZWRWYWx1ZShudWxsLCBtc2dzKTsKKwkJfQorCQlyZXR1cm4gc3VwZXIuZUludmVyc2VSZW1vdmUob3RoZXJFbmQsIGZlYXR1cmVJRCwgbXNncyk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIE9iamVjdCBlR2V0KGludCBmZWF0dXJlSUQsIGJvb2xlYW4gcmVzb2x2ZSwgYm9vbGVhbiBjb3JlVHlwZSkgeworCQlzd2l0Y2ggKGZlYXR1cmVJRCkgeworCQkJY2FzZSBHcmFwaFBhY2thZ2UuVVJJX1RPX0lERU5USUZJQUJMRV9NQVBfRU5UUllfX0tFWToKKwkJCQlyZXR1cm4gZ2V0VHlwZWRLZXkoKTsKKwkJCWNhc2UgR3JhcGhQYWNrYWdlLlVSSV9UT19JREVOVElGSUFCTEVfTUFQX0VOVFJZX19WQUxVRToKKwkJCQlyZXR1cm4gZ2V0VHlwZWRWYWx1ZSgpOworCQl9CisJCXJldHVybiBzdXBlci5lR2V0KGZlYXR1cmVJRCwgcmVzb2x2ZSwgY29yZVR5cGUpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGVTZXQoaW50IGZlYXR1cmVJRCwgT2JqZWN0IG5ld1ZhbHVlKSB7CisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7CisJCQljYXNlIEdyYXBoUGFja2FnZS5VUklfVE9fSURFTlRJRklBQkxFX01BUF9FTlRSWV9fS0VZOgorCQkJCXNldFR5cGVkS2V5KChVUkkpbmV3VmFsdWUpOworCQkJCXJldHVybjsKKwkJCWNhc2UgR3JhcGhQYWNrYWdlLlVSSV9UT19JREVOVElGSUFCTEVfTUFQX0VOVFJZX19WQUxVRToKKwkJCQlzZXRUeXBlZFZhbHVlKChJZGVudGlmaWFibGUpbmV3VmFsdWUpOworCQkJCXJldHVybjsKKwkJfQorCQlzdXBlci5lU2V0KGZlYXR1cmVJRCwgbmV3VmFsdWUpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGVVbnNldChpbnQgZmVhdHVyZUlEKSB7CisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7CisJCQljYXNlIEdyYXBoUGFja2FnZS5VUklfVE9fSURFTlRJRklBQkxFX01BUF9FTlRSWV9fS0VZOgorCQkJCXNldFR5cGVkS2V5KEtFWV9FREVGQVVMVCk7CisJCQkJcmV0dXJuOworCQkJY2FzZSBHcmFwaFBhY2thZ2UuVVJJX1RPX0lERU5USUZJQUJMRV9NQVBfRU5UUllfX1ZBTFVFOgorCQkJCXNldFR5cGVkVmFsdWUoKElkZW50aWZpYWJsZSludWxsKTsKKwkJCQlyZXR1cm47CisJCX0KKwkJc3VwZXIuZVVuc2V0KGZlYXR1cmVJRCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIGJvb2xlYW4gZUlzU2V0KGludCBmZWF0dXJlSUQpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJCWNhc2UgR3JhcGhQYWNrYWdlLlVSSV9UT19JREVOVElGSUFCTEVfTUFQX0VOVFJZX19LRVk6CisJCQkJcmV0dXJuIEtFWV9FREVGQVVMVCA9PSBudWxsID8ga2V5ICE9IG51bGwgOiAhS0VZX0VERUZBVUxULmVxdWFscyhrZXkpOworCQkJY2FzZSBHcmFwaFBhY2thZ2UuVVJJX1RPX0lERU5USUZJQUJMRV9NQVBfRU5UUllfX1ZBTFVFOgorCQkJCXJldHVybiB2YWx1ZSAhPSBudWxsOworCQl9CisJCXJldHVybiBzdXBlci5lSXNTZXQoZmVhdHVyZUlEKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkgeworCQlpZiAoZUlzUHJveHkoKSkgcmV0dXJuIHN1cGVyLnRvU3RyaW5nKCk7CisKKwkJU3RyaW5nQnVmZmVyIHJlc3VsdCA9IG5ldyBTdHJpbmdCdWZmZXIoc3VwZXIudG9TdHJpbmcoKSk7CisJCXJlc3VsdC5hcHBlbmQoIiAoa2V5OiAiKTsgLy8kTk9OLU5MUy0xJAorCQlyZXN1bHQuYXBwZW5kKGtleSk7CisJCXJlc3VsdC5hcHBlbmQoJyknKTsKKwkJcmV0dXJuIHJlc3VsdC50b1N0cmluZygpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBpbnQgaGFzaCA9IC0xOworCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIGludCBnZXRIYXNoKCkgeworCQlpZiAoaGFzaCA9PSAtMSkgeworCQkJT2JqZWN0IHRoZUtleSA9IGdldEtleSgpOworCQkJaGFzaCA9ICh0aGVLZXkgPT0gbnVsbCA/IDAgOiB0aGVLZXkuaGFzaENvZGUoKSk7CisJCX0KKwkJcmV0dXJuIGhhc2g7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgc2V0SGFzaChpbnQgaGFzaCkgeworCQl0aGlzLmhhc2ggPSBoYXNoOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBVUkkgZ2V0S2V5KCkgeworCQlyZXR1cm4gZ2V0VHlwZWRLZXkoKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRLZXkoVVJJIGtleSkgeworCQlzZXRUeXBlZEtleShrZXkpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBJZGVudGlmaWFibGUgZ2V0VmFsdWUoKSB7CisJCXJldHVybiBnZXRUeXBlZFZhbHVlKCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIElkZW50aWZpYWJsZSBzZXRWYWx1ZShJZGVudGlmaWFibGUgdmFsdWUpIHsKKwkJSWRlbnRpZmlhYmxlIG9sZFZhbHVlID0gZ2V0VmFsdWUoKTsKKwkJc2V0VHlwZWRWYWx1ZSh2YWx1ZSk7CisJCXJldHVybiBvbGRWYWx1ZTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAU3VwcHJlc3NXYXJuaW5ncygidW5jaGVja2VkIikKKwlwdWJsaWMgRU1hcDxVUkksIElkZW50aWZpYWJsZT4gZ2V0RU1hcCgpIHsKKwkJRU9iamVjdCBjb250YWluZXIgPSBlQ29udGFpbmVyKCk7CisJCXJldHVybiBjb250YWluZXIgPT0gbnVsbCA/IG51bGwgOiAoRU1hcDxVUkksIElkZW50aWZpYWJsZT4pY29udGFpbmVyLmVHZXQoZUNvbnRhaW5tZW50RmVhdHVyZSgpKTsKKwl9CisKK30gLy9VUklUb0lkZW50aWZpYWJsZU1hcEVudHJ5SW1wbApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGgvaW1wbC9VUklUb0xhYmVsTWFwRW50cnlJbXBsLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoL2ltcGwvVVJJVG9MYWJlbE1hcEVudHJ5SW1wbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU4Y2Q5NzEKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoL2ltcGwvVVJJVG9MYWJlbE1hcEVudHJ5SW1wbC5qYXZhCkBAIC0wLDAgKzEsMzMxIEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5pbXBsOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb25DaGFpbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuQmFzaWNFTWFwOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5FTWFwOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5VUkk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzczsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuSW50ZXJuYWxFT2JqZWN0OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5pbXBsLkVOb3RpZmljYXRpb25JbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5pbXBsLkVPYmplY3RJbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5HcmFwaFBhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkxhYmVsOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiBBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+VVJJIFRvIExhYmVsIE1hcCBFbnRyeTwvYj48L2VtPicuCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIDxwPgorICogVGhlIGZvbGxvd2luZyBmZWF0dXJlcyBhcmUgaW1wbGVtZW50ZWQ6CisgKiA8dWw+CisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmltcGwuVVJJVG9MYWJlbE1hcEVudHJ5SW1wbCNnZXRUeXBlZEtleSA8ZW0+S2V5PC9lbT59PC9saT4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguaW1wbC5VUklUb0xhYmVsTWFwRW50cnlJbXBsI2dldFR5cGVkVmFsdWUgPGVtPlZhbHVlPC9lbT59PC9saT4KKyAqIDwvdWw+CisgKiA8L3A+CisgKgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgVVJJVG9MYWJlbE1hcEVudHJ5SW1wbCBleHRlbmRzIEVPYmplY3RJbXBsIGltcGxlbWVudHMgQmFzaWNFTWFwLkVudHJ5PFVSSSxMYWJlbD4geworCS8qKgorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRUeXBlZEtleSgpIDxlbT5LZXk8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI2dldFR5cGVkS2V5KCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIFVSSSBLRVlfRURFRkFVTFQgPSBudWxsOworCisJLyoqCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0VHlwZWRLZXkoKSA8ZW0+S2V5PC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNnZXRUeXBlZEtleSgpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIFVSSSBrZXkgPSBLRVlfRURFRkFVTFQ7CisKKwkvKioKKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRUeXBlZFZhbHVlKCkgPGVtPlZhbHVlPC9lbT59JyBjb250YWlubWVudCByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNnZXRUeXBlZFZhbHVlKCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgTGFiZWwgdmFsdWU7CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgVVJJVG9MYWJlbE1hcEVudHJ5SW1wbCgpIHsKKwkJc3VwZXIoKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgRUNsYXNzIGVTdGF0aWNDbGFzcygpIHsKKwkJcmV0dXJuIEdyYXBoUGFja2FnZS5MaXRlcmFscy5VUklfVE9fTEFCRUxfTUFQX0VOVFJZOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBVUkkgZ2V0VHlwZWRLZXkoKSB7CisJCXJldHVybiBrZXk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgc2V0VHlwZWRLZXkoVVJJIG5ld0tleSkgeworCQlVUkkgb2xkS2V5ID0ga2V5OworCQlrZXkgPSBuZXdLZXk7CisJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkKKwkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIEdyYXBoUGFja2FnZS5VUklfVE9fTEFCRUxfTUFQX0VOVFJZX19LRVksIG9sZEtleSwga2V5KSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIExhYmVsIGdldFR5cGVkVmFsdWUoKSB7CisJCXJldHVybiB2YWx1ZTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgTm90aWZpY2F0aW9uQ2hhaW4gYmFzaWNTZXRUeXBlZFZhbHVlKExhYmVsIG5ld1ZhbHVlLCBOb3RpZmljYXRpb25DaGFpbiBtc2dzKSB7CisJCUxhYmVsIG9sZFZhbHVlID0gdmFsdWU7CisJCXZhbHVlID0gbmV3VmFsdWU7CisJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkgeworCQkJRU5vdGlmaWNhdGlvbkltcGwgbm90aWZpY2F0aW9uID0gbmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIEdyYXBoUGFja2FnZS5VUklfVE9fTEFCRUxfTUFQX0VOVFJZX19WQUxVRSwgb2xkVmFsdWUsIG5ld1ZhbHVlKTsKKwkJCWlmIChtc2dzID09IG51bGwpIG1zZ3MgPSBub3RpZmljYXRpb247IGVsc2UgbXNncy5hZGQobm90aWZpY2F0aW9uKTsKKwkJfQorCQlyZXR1cm4gbXNnczsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRUeXBlZFZhbHVlKExhYmVsIG5ld1ZhbHVlKSB7CisJCWlmIChuZXdWYWx1ZSAhPSB2YWx1ZSkgeworCQkJTm90aWZpY2F0aW9uQ2hhaW4gbXNncyA9IG51bGw7CisJCQlpZiAodmFsdWUgIT0gbnVsbCkKKwkJCQltc2dzID0gKChJbnRlcm5hbEVPYmplY3QpdmFsdWUpLmVJbnZlcnNlUmVtb3ZlKHRoaXMsIEVPUFBPU0lURV9GRUFUVVJFX0JBU0UgLSBHcmFwaFBhY2thZ2UuVVJJX1RPX0xBQkVMX01BUF9FTlRSWV9fVkFMVUUsIG51bGwsIG1zZ3MpOworCQkJaWYgKG5ld1ZhbHVlICE9IG51bGwpCisJCQkJbXNncyA9ICgoSW50ZXJuYWxFT2JqZWN0KW5ld1ZhbHVlKS5lSW52ZXJzZUFkZCh0aGlzLCBFT1BQT1NJVEVfRkVBVFVSRV9CQVNFIC0gR3JhcGhQYWNrYWdlLlVSSV9UT19MQUJFTF9NQVBfRU5UUllfX1ZBTFVFLCBudWxsLCBtc2dzKTsKKwkJCW1zZ3MgPSBiYXNpY1NldFR5cGVkVmFsdWUobmV3VmFsdWUsIG1zZ3MpOworCQkJaWYgKG1zZ3MgIT0gbnVsbCkgbXNncy5kaXNwYXRjaCgpOworCQl9CisJCWVsc2UgaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQorCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgR3JhcGhQYWNrYWdlLlVSSV9UT19MQUJFTF9NQVBfRU5UUllfX1ZBTFVFLCBuZXdWYWx1ZSwgbmV3VmFsdWUpKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgTm90aWZpY2F0aW9uQ2hhaW4gZUludmVyc2VSZW1vdmUoSW50ZXJuYWxFT2JqZWN0IG90aGVyRW5kLCBpbnQgZmVhdHVyZUlELCBOb3RpZmljYXRpb25DaGFpbiBtc2dzKSB7CisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7CisJCQljYXNlIEdyYXBoUGFja2FnZS5VUklfVE9fTEFCRUxfTUFQX0VOVFJZX19WQUxVRToKKwkJCQlyZXR1cm4gYmFzaWNTZXRUeXBlZFZhbHVlKG51bGwsIG1zZ3MpOworCQl9CisJCXJldHVybiBzdXBlci5lSW52ZXJzZVJlbW92ZShvdGhlckVuZCwgZmVhdHVyZUlELCBtc2dzKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgT2JqZWN0IGVHZXQoaW50IGZlYXR1cmVJRCwgYm9vbGVhbiByZXNvbHZlLCBib29sZWFuIGNvcmVUeXBlKSB7CisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7CisJCQljYXNlIEdyYXBoUGFja2FnZS5VUklfVE9fTEFCRUxfTUFQX0VOVFJZX19LRVk6CisJCQkJcmV0dXJuIGdldFR5cGVkS2V5KCk7CisJCQljYXNlIEdyYXBoUGFja2FnZS5VUklfVE9fTEFCRUxfTUFQX0VOVFJZX19WQUxVRToKKwkJCQlyZXR1cm4gZ2V0VHlwZWRWYWx1ZSgpOworCQl9CisJCXJldHVybiBzdXBlci5lR2V0KGZlYXR1cmVJRCwgcmVzb2x2ZSwgY29yZVR5cGUpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGVTZXQoaW50IGZlYXR1cmVJRCwgT2JqZWN0IG5ld1ZhbHVlKSB7CisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7CisJCQljYXNlIEdyYXBoUGFja2FnZS5VUklfVE9fTEFCRUxfTUFQX0VOVFJZX19LRVk6CisJCQkJc2V0VHlwZWRLZXkoKFVSSSluZXdWYWx1ZSk7CisJCQkJcmV0dXJuOworCQkJY2FzZSBHcmFwaFBhY2thZ2UuVVJJX1RPX0xBQkVMX01BUF9FTlRSWV9fVkFMVUU6CisJCQkJc2V0VHlwZWRWYWx1ZSgoTGFiZWwpbmV3VmFsdWUpOworCQkJCXJldHVybjsKKwkJfQorCQlzdXBlci5lU2V0KGZlYXR1cmVJRCwgbmV3VmFsdWUpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGVVbnNldChpbnQgZmVhdHVyZUlEKSB7CisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7CisJCQljYXNlIEdyYXBoUGFja2FnZS5VUklfVE9fTEFCRUxfTUFQX0VOVFJZX19LRVk6CisJCQkJc2V0VHlwZWRLZXkoS0VZX0VERUZBVUxUKTsKKwkJCQlyZXR1cm47CisJCQljYXNlIEdyYXBoUGFja2FnZS5VUklfVE9fTEFCRUxfTUFQX0VOVFJZX19WQUxVRToKKwkJCQlzZXRUeXBlZFZhbHVlKChMYWJlbCludWxsKTsKKwkJCQlyZXR1cm47CisJCX0KKwkJc3VwZXIuZVVuc2V0KGZlYXR1cmVJRCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIGJvb2xlYW4gZUlzU2V0KGludCBmZWF0dXJlSUQpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJCWNhc2UgR3JhcGhQYWNrYWdlLlVSSV9UT19MQUJFTF9NQVBfRU5UUllfX0tFWToKKwkJCQlyZXR1cm4gS0VZX0VERUZBVUxUID09IG51bGwgPyBrZXkgIT0gbnVsbCA6ICFLRVlfRURFRkFVTFQuZXF1YWxzKGtleSk7CisJCQljYXNlIEdyYXBoUGFja2FnZS5VUklfVE9fTEFCRUxfTUFQX0VOVFJZX19WQUxVRToKKwkJCQlyZXR1cm4gdmFsdWUgIT0gbnVsbDsKKwkJfQorCQlyZXR1cm4gc3VwZXIuZUlzU2V0KGZlYXR1cmVJRCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIFN0cmluZyB0b1N0cmluZygpIHsKKwkJaWYgKGVJc1Byb3h5KCkpIHJldHVybiBzdXBlci50b1N0cmluZygpOworCisJCVN0cmluZ0J1ZmZlciByZXN1bHQgPSBuZXcgU3RyaW5nQnVmZmVyKHN1cGVyLnRvU3RyaW5nKCkpOworCQlyZXN1bHQuYXBwZW5kKCIgKGtleTogIik7IC8vJE5PTi1OTFMtMSQKKwkJcmVzdWx0LmFwcGVuZChrZXkpOworCQlyZXN1bHQuYXBwZW5kKCcpJyk7CisJCXJldHVybiByZXN1bHQudG9TdHJpbmcoKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgaW50IGhhc2ggPSAtMTsKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBpbnQgZ2V0SGFzaCgpIHsKKwkJaWYgKGhhc2ggPT0gLTEpIHsKKwkJCU9iamVjdCB0aGVLZXkgPSBnZXRLZXkoKTsKKwkJCWhhc2ggPSAodGhlS2V5ID09IG51bGwgPyAwIDogdGhlS2V5Lmhhc2hDb2RlKCkpOworCQl9CisJCXJldHVybiBoYXNoOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIHNldEhhc2goaW50IGhhc2gpIHsKKwkJdGhpcy5oYXNoID0gaGFzaDsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVVJJIGdldEtleSgpIHsKKwkJcmV0dXJuIGdldFR5cGVkS2V5KCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgc2V0S2V5KFVSSSBrZXkpIHsKKwkJc2V0VHlwZWRLZXkoa2V5KTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgTGFiZWwgZ2V0VmFsdWUoKSB7CisJCXJldHVybiBnZXRUeXBlZFZhbHVlKCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIExhYmVsIHNldFZhbHVlKExhYmVsIHZhbHVlKSB7CisJCUxhYmVsIG9sZFZhbHVlID0gZ2V0VmFsdWUoKTsKKwkJc2V0VHlwZWRWYWx1ZSh2YWx1ZSk7CisJCXJldHVybiBvbGRWYWx1ZTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAU3VwcHJlc3NXYXJuaW5ncygidW5jaGVja2VkIikKKwlwdWJsaWMgRU1hcDxVUkksIExhYmVsPiBnZXRFTWFwKCkgeworCQlFT2JqZWN0IGNvbnRhaW5lciA9IGVDb250YWluZXIoKTsKKwkJcmV0dXJuIGNvbnRhaW5lciA9PSBudWxsID8gbnVsbCA6IChFTWFwPFVSSSwgTGFiZWw+KWNvbnRhaW5lci5lR2V0KGVDb250YWlubWVudEZlYXR1cmUoKSk7CisJfQorCit9IC8vVVJJVG9MYWJlbE1hcEVudHJ5SW1wbApkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC9pbXBsL1VSSVRvTm9kZUxhYmVsTWFwRW50cnlJbXBsLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoL2ltcGwvVVJJVG9Ob2RlTGFiZWxNYXBFbnRyeUltcGwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YWJiMWU0Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC9pbXBsL1VSSVRvTm9kZUxhYmVsTWFwRW50cnlJbXBsLmphdmEKQEAgLTAsMCArMSwzMzEgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmltcGw7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbkNoYWluOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5CYXNpY0VNYXA7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLkVNYXA7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlVSSTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5JbnRlcm5hbEVPYmplY3Q7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLmltcGwuRU5vdGlmaWNhdGlvbkltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLmltcGwuRU9iamVjdEltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkdyYXBoUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguTm9kZUxhYmVsOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiBBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+VVJJIFRvIE5vZGUgTGFiZWwgTWFwIEVudHJ5PC9iPjwvZW0+Jy4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogPHA+CisgKiBUaGUgZm9sbG93aW5nIGZlYXR1cmVzIGFyZSBpbXBsZW1lbnRlZDoKKyAqIDx1bD4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguaW1wbC5VUklUb05vZGVMYWJlbE1hcEVudHJ5SW1wbCNnZXRUeXBlZEtleSA8ZW0+S2V5PC9lbT59PC9saT4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguaW1wbC5VUklUb05vZGVMYWJlbE1hcEVudHJ5SW1wbCNnZXRUeXBlZFZhbHVlIDxlbT5WYWx1ZTwvZW0+fTwvbGk+CisgKiA8L3VsPgorICogPC9wPgorICoKKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIFVSSVRvTm9kZUxhYmVsTWFwRW50cnlJbXBsIGV4dGVuZHMgRU9iamVjdEltcGwgaW1wbGVtZW50cyBCYXNpY0VNYXAuRW50cnk8VVJJLE5vZGVMYWJlbD4geworCS8qKgorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRUeXBlZEtleSgpIDxlbT5LZXk8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI2dldFR5cGVkS2V5KCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIFVSSSBLRVlfRURFRkFVTFQgPSBudWxsOworCisJLyoqCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0VHlwZWRLZXkoKSA8ZW0+S2V5PC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNnZXRUeXBlZEtleSgpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIFVSSSBrZXkgPSBLRVlfRURFRkFVTFQ7CisKKwkvKioKKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRUeXBlZFZhbHVlKCkgPGVtPlZhbHVlPC9lbT59JyBjb250YWlubWVudCByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNnZXRUeXBlZFZhbHVlKCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgTm9kZUxhYmVsIHZhbHVlOworCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIFVSSVRvTm9kZUxhYmVsTWFwRW50cnlJbXBsKCkgeworCQlzdXBlcigpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCBFQ2xhc3MgZVN0YXRpY0NsYXNzKCkgeworCQlyZXR1cm4gR3JhcGhQYWNrYWdlLkxpdGVyYWxzLlVSSV9UT19OT0RFX0xBQkVMX01BUF9FTlRSWTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVVJJIGdldFR5cGVkS2V5KCkgeworCQlyZXR1cm4ga2V5OworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIHNldFR5cGVkS2V5KFVSSSBuZXdLZXkpIHsKKwkJVVJJIG9sZEtleSA9IGtleTsKKwkJa2V5ID0gbmV3S2V5OworCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpCisJCQllTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBHcmFwaFBhY2thZ2UuVVJJX1RPX05PREVfTEFCRUxfTUFQX0VOVFJZX19LRVksIG9sZEtleSwga2V5KSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIE5vZGVMYWJlbCBnZXRUeXBlZFZhbHVlKCkgeworCQlyZXR1cm4gdmFsdWU7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIE5vdGlmaWNhdGlvbkNoYWluIGJhc2ljU2V0VHlwZWRWYWx1ZShOb2RlTGFiZWwgbmV3VmFsdWUsIE5vdGlmaWNhdGlvbkNoYWluIG1zZ3MpIHsKKwkJTm9kZUxhYmVsIG9sZFZhbHVlID0gdmFsdWU7CisJCXZhbHVlID0gbmV3VmFsdWU7CisJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkgeworCQkJRU5vdGlmaWNhdGlvbkltcGwgbm90aWZpY2F0aW9uID0gbmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIEdyYXBoUGFja2FnZS5VUklfVE9fTk9ERV9MQUJFTF9NQVBfRU5UUllfX1ZBTFVFLCBvbGRWYWx1ZSwgbmV3VmFsdWUpOworCQkJaWYgKG1zZ3MgPT0gbnVsbCkgbXNncyA9IG5vdGlmaWNhdGlvbjsgZWxzZSBtc2dzLmFkZChub3RpZmljYXRpb24pOworCQl9CisJCXJldHVybiBtc2dzOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIHNldFR5cGVkVmFsdWUoTm9kZUxhYmVsIG5ld1ZhbHVlKSB7CisJCWlmIChuZXdWYWx1ZSAhPSB2YWx1ZSkgeworCQkJTm90aWZpY2F0aW9uQ2hhaW4gbXNncyA9IG51bGw7CisJCQlpZiAodmFsdWUgIT0gbnVsbCkKKwkJCQltc2dzID0gKChJbnRlcm5hbEVPYmplY3QpdmFsdWUpLmVJbnZlcnNlUmVtb3ZlKHRoaXMsIEVPUFBPU0lURV9GRUFUVVJFX0JBU0UgLSBHcmFwaFBhY2thZ2UuVVJJX1RPX05PREVfTEFCRUxfTUFQX0VOVFJZX19WQUxVRSwgbnVsbCwgbXNncyk7CisJCQlpZiAobmV3VmFsdWUgIT0gbnVsbCkKKwkJCQltc2dzID0gKChJbnRlcm5hbEVPYmplY3QpbmV3VmFsdWUpLmVJbnZlcnNlQWRkKHRoaXMsIEVPUFBPU0lURV9GRUFUVVJFX0JBU0UgLSBHcmFwaFBhY2thZ2UuVVJJX1RPX05PREVfTEFCRUxfTUFQX0VOVFJZX19WQUxVRSwgbnVsbCwgbXNncyk7CisJCQltc2dzID0gYmFzaWNTZXRUeXBlZFZhbHVlKG5ld1ZhbHVlLCBtc2dzKTsKKwkJCWlmIChtc2dzICE9IG51bGwpIG1zZ3MuZGlzcGF0Y2goKTsKKwkJfQorCQllbHNlIGlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkKKwkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIEdyYXBoUGFja2FnZS5VUklfVE9fTk9ERV9MQUJFTF9NQVBfRU5UUllfX1ZBTFVFLCBuZXdWYWx1ZSwgbmV3VmFsdWUpKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgTm90aWZpY2F0aW9uQ2hhaW4gZUludmVyc2VSZW1vdmUoSW50ZXJuYWxFT2JqZWN0IG90aGVyRW5kLCBpbnQgZmVhdHVyZUlELCBOb3RpZmljYXRpb25DaGFpbiBtc2dzKSB7CisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7CisJCQljYXNlIEdyYXBoUGFja2FnZS5VUklfVE9fTk9ERV9MQUJFTF9NQVBfRU5UUllfX1ZBTFVFOgorCQkJCXJldHVybiBiYXNpY1NldFR5cGVkVmFsdWUobnVsbCwgbXNncyk7CisJCX0KKwkJcmV0dXJuIHN1cGVyLmVJbnZlcnNlUmVtb3ZlKG90aGVyRW5kLCBmZWF0dXJlSUQsIG1zZ3MpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBPYmplY3QgZUdldChpbnQgZmVhdHVyZUlELCBib29sZWFuIHJlc29sdmUsIGJvb2xlYW4gY29yZVR5cGUpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJCWNhc2UgR3JhcGhQYWNrYWdlLlVSSV9UT19OT0RFX0xBQkVMX01BUF9FTlRSWV9fS0VZOgorCQkJCXJldHVybiBnZXRUeXBlZEtleSgpOworCQkJY2FzZSBHcmFwaFBhY2thZ2UuVVJJX1RPX05PREVfTEFCRUxfTUFQX0VOVFJZX19WQUxVRToKKwkJCQlyZXR1cm4gZ2V0VHlwZWRWYWx1ZSgpOworCQl9CisJCXJldHVybiBzdXBlci5lR2V0KGZlYXR1cmVJRCwgcmVzb2x2ZSwgY29yZVR5cGUpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGVTZXQoaW50IGZlYXR1cmVJRCwgT2JqZWN0IG5ld1ZhbHVlKSB7CisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7CisJCQljYXNlIEdyYXBoUGFja2FnZS5VUklfVE9fTk9ERV9MQUJFTF9NQVBfRU5UUllfX0tFWToKKwkJCQlzZXRUeXBlZEtleSgoVVJJKW5ld1ZhbHVlKTsKKwkJCQlyZXR1cm47CisJCQljYXNlIEdyYXBoUGFja2FnZS5VUklfVE9fTk9ERV9MQUJFTF9NQVBfRU5UUllfX1ZBTFVFOgorCQkJCXNldFR5cGVkVmFsdWUoKE5vZGVMYWJlbCluZXdWYWx1ZSk7CisJCQkJcmV0dXJuOworCQl9CisJCXN1cGVyLmVTZXQoZmVhdHVyZUlELCBuZXdWYWx1ZSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgZVVuc2V0KGludCBmZWF0dXJlSUQpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJCWNhc2UgR3JhcGhQYWNrYWdlLlVSSV9UT19OT0RFX0xBQkVMX01BUF9FTlRSWV9fS0VZOgorCQkJCXNldFR5cGVkS2V5KEtFWV9FREVGQVVMVCk7CisJCQkJcmV0dXJuOworCQkJY2FzZSBHcmFwaFBhY2thZ2UuVVJJX1RPX05PREVfTEFCRUxfTUFQX0VOVFJZX19WQUxVRToKKwkJCQlzZXRUeXBlZFZhbHVlKChOb2RlTGFiZWwpbnVsbCk7CisJCQkJcmV0dXJuOworCQl9CisJCXN1cGVyLmVVbnNldChmZWF0dXJlSUQpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBib29sZWFuIGVJc1NldChpbnQgZmVhdHVyZUlEKSB7CisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7CisJCQljYXNlIEdyYXBoUGFja2FnZS5VUklfVE9fTk9ERV9MQUJFTF9NQVBfRU5UUllfX0tFWToKKwkJCQlyZXR1cm4gS0VZX0VERUZBVUxUID09IG51bGwgPyBrZXkgIT0gbnVsbCA6ICFLRVlfRURFRkFVTFQuZXF1YWxzKGtleSk7CisJCQljYXNlIEdyYXBoUGFja2FnZS5VUklfVE9fTk9ERV9MQUJFTF9NQVBfRU5UUllfX1ZBTFVFOgorCQkJCXJldHVybiB2YWx1ZSAhPSBudWxsOworCQl9CisJCXJldHVybiBzdXBlci5lSXNTZXQoZmVhdHVyZUlEKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkgeworCQlpZiAoZUlzUHJveHkoKSkgcmV0dXJuIHN1cGVyLnRvU3RyaW5nKCk7CisKKwkJU3RyaW5nQnVmZmVyIHJlc3VsdCA9IG5ldyBTdHJpbmdCdWZmZXIoc3VwZXIudG9TdHJpbmcoKSk7CisJCXJlc3VsdC5hcHBlbmQoIiAoa2V5OiAiKTsgLy8kTk9OLU5MUy0xJAorCQlyZXN1bHQuYXBwZW5kKGtleSk7CisJCXJlc3VsdC5hcHBlbmQoJyknKTsKKwkJcmV0dXJuIHJlc3VsdC50b1N0cmluZygpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBpbnQgaGFzaCA9IC0xOworCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIGludCBnZXRIYXNoKCkgeworCQlpZiAoaGFzaCA9PSAtMSkgeworCQkJT2JqZWN0IHRoZUtleSA9IGdldEtleSgpOworCQkJaGFzaCA9ICh0aGVLZXkgPT0gbnVsbCA/IDAgOiB0aGVLZXkuaGFzaENvZGUoKSk7CisJCX0KKwkJcmV0dXJuIGhhc2g7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgc2V0SGFzaChpbnQgaGFzaCkgeworCQl0aGlzLmhhc2ggPSBoYXNoOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBVUkkgZ2V0S2V5KCkgeworCQlyZXR1cm4gZ2V0VHlwZWRLZXkoKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRLZXkoVVJJIGtleSkgeworCQlzZXRUeXBlZEtleShrZXkpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBOb2RlTGFiZWwgZ2V0VmFsdWUoKSB7CisJCXJldHVybiBnZXRUeXBlZFZhbHVlKCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIE5vZGVMYWJlbCBzZXRWYWx1ZShOb2RlTGFiZWwgdmFsdWUpIHsKKwkJTm9kZUxhYmVsIG9sZFZhbHVlID0gZ2V0VmFsdWUoKTsKKwkJc2V0VHlwZWRWYWx1ZSh2YWx1ZSk7CisJCXJldHVybiBvbGRWYWx1ZTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAU3VwcHJlc3NXYXJuaW5ncygidW5jaGVja2VkIikKKwlwdWJsaWMgRU1hcDxVUkksIE5vZGVMYWJlbD4gZ2V0RU1hcCgpIHsKKwkJRU9iamVjdCBjb250YWluZXIgPSBlQ29udGFpbmVyKCk7CisJCXJldHVybiBjb250YWluZXIgPT0gbnVsbCA/IG51bGwgOiAoRU1hcDxVUkksIE5vZGVMYWJlbD4pY29udGFpbmVyLmVHZXQoZUNvbnRhaW5tZW50RmVhdHVyZSgpKTsKKwl9CisKK30gLy9VUklUb05vZGVMYWJlbE1hcEVudHJ5SW1wbApkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC9pbXBsL1VSSVRvTm9kZU1hcEVudHJ5SW1wbC5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC9pbXBsL1VSSVRvTm9kZU1hcEVudHJ5SW1wbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZjYTQ0ZDYKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoL2ltcGwvVVJJVG9Ob2RlTWFwRW50cnlJbXBsLmphdmEKQEAgLTAsMCArMSwzMzEgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmltcGw7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbkNoYWluOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5CYXNpY0VNYXA7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLkVNYXA7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlVSSTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5JbnRlcm5hbEVPYmplY3Q7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLmltcGwuRU5vdGlmaWNhdGlvbkltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLmltcGwuRU9iamVjdEltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkdyYXBoUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguTm9kZTsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPlVSSSBUbyBOb2RlIE1hcCBFbnRyeTwvYj48L2VtPicuCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIDxwPgorICogVGhlIGZvbGxvd2luZyBmZWF0dXJlcyBhcmUgaW1wbGVtZW50ZWQ6CisgKiA8dWw+CisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmltcGwuVVJJVG9Ob2RlTWFwRW50cnlJbXBsI2dldFR5cGVkS2V5IDxlbT5LZXk8L2VtPn08L2xpPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5pbXBsLlVSSVRvTm9kZU1hcEVudHJ5SW1wbCNnZXRUeXBlZFZhbHVlIDxlbT5WYWx1ZTwvZW0+fTwvbGk+CisgKiA8L3VsPgorICogPC9wPgorICoKKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIFVSSVRvTm9kZU1hcEVudHJ5SW1wbCBleHRlbmRzIEVPYmplY3RJbXBsIGltcGxlbWVudHMgQmFzaWNFTWFwLkVudHJ5PFVSSSxOb2RlPiB7CisJLyoqCisJICogVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldFR5cGVkS2V5KCkgPGVtPktleTwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZ2V0VHlwZWRLZXkoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgVVJJIEtFWV9FREVGQVVMVCA9IG51bGw7CisKKwkvKioKKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRUeXBlZEtleSgpIDxlbT5LZXk8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI2dldFR5cGVkS2V5KCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgVVJJIGtleSA9IEtFWV9FREVGQVVMVDsKKworCS8qKgorCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldFR5cGVkVmFsdWUoKSA8ZW0+VmFsdWU8L2VtPn0nIGNvbnRhaW5tZW50IHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI2dldFR5cGVkVmFsdWUoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBOb2RlIHZhbHVlOworCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIFVSSVRvTm9kZU1hcEVudHJ5SW1wbCgpIHsKKwkJc3VwZXIoKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgRUNsYXNzIGVTdGF0aWNDbGFzcygpIHsKKwkJcmV0dXJuIEdyYXBoUGFja2FnZS5MaXRlcmFscy5VUklfVE9fTk9ERV9NQVBfRU5UUlk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFVSSSBnZXRUeXBlZEtleSgpIHsKKwkJcmV0dXJuIGtleTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRUeXBlZEtleShVUkkgbmV3S2V5KSB7CisJCVVSSSBvbGRLZXkgPSBrZXk7CisJCWtleSA9IG5ld0tleTsKKwkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQorCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgR3JhcGhQYWNrYWdlLlVSSV9UT19OT0RFX01BUF9FTlRSWV9fS0VZLCBvbGRLZXksIGtleSkpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBOb2RlIGdldFR5cGVkVmFsdWUoKSB7CisJCXJldHVybiB2YWx1ZTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgTm90aWZpY2F0aW9uQ2hhaW4gYmFzaWNTZXRUeXBlZFZhbHVlKE5vZGUgbmV3VmFsdWUsIE5vdGlmaWNhdGlvbkNoYWluIG1zZ3MpIHsKKwkJTm9kZSBvbGRWYWx1ZSA9IHZhbHVlOworCQl2YWx1ZSA9IG5ld1ZhbHVlOworCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpIHsKKwkJCUVOb3RpZmljYXRpb25JbXBsIG5vdGlmaWNhdGlvbiA9IG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBHcmFwaFBhY2thZ2UuVVJJX1RPX05PREVfTUFQX0VOVFJZX19WQUxVRSwgb2xkVmFsdWUsIG5ld1ZhbHVlKTsKKwkJCWlmIChtc2dzID09IG51bGwpIG1zZ3MgPSBub3RpZmljYXRpb247IGVsc2UgbXNncy5hZGQobm90aWZpY2F0aW9uKTsKKwkJfQorCQlyZXR1cm4gbXNnczsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRUeXBlZFZhbHVlKE5vZGUgbmV3VmFsdWUpIHsKKwkJaWYgKG5ld1ZhbHVlICE9IHZhbHVlKSB7CisJCQlOb3RpZmljYXRpb25DaGFpbiBtc2dzID0gbnVsbDsKKwkJCWlmICh2YWx1ZSAhPSBudWxsKQorCQkJCW1zZ3MgPSAoKEludGVybmFsRU9iamVjdCl2YWx1ZSkuZUludmVyc2VSZW1vdmUodGhpcywgRU9QUE9TSVRFX0ZFQVRVUkVfQkFTRSAtIEdyYXBoUGFja2FnZS5VUklfVE9fTk9ERV9NQVBfRU5UUllfX1ZBTFVFLCBudWxsLCBtc2dzKTsKKwkJCWlmIChuZXdWYWx1ZSAhPSBudWxsKQorCQkJCW1zZ3MgPSAoKEludGVybmFsRU9iamVjdCluZXdWYWx1ZSkuZUludmVyc2VBZGQodGhpcywgRU9QUE9TSVRFX0ZFQVRVUkVfQkFTRSAtIEdyYXBoUGFja2FnZS5VUklfVE9fTk9ERV9NQVBfRU5UUllfX1ZBTFVFLCBudWxsLCBtc2dzKTsKKwkJCW1zZ3MgPSBiYXNpY1NldFR5cGVkVmFsdWUobmV3VmFsdWUsIG1zZ3MpOworCQkJaWYgKG1zZ3MgIT0gbnVsbCkgbXNncy5kaXNwYXRjaCgpOworCQl9CisJCWVsc2UgaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQorCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgR3JhcGhQYWNrYWdlLlVSSV9UT19OT0RFX01BUF9FTlRSWV9fVkFMVUUsIG5ld1ZhbHVlLCBuZXdWYWx1ZSkpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBOb3RpZmljYXRpb25DaGFpbiBlSW52ZXJzZVJlbW92ZShJbnRlcm5hbEVPYmplY3Qgb3RoZXJFbmQsIGludCBmZWF0dXJlSUQsIE5vdGlmaWNhdGlvbkNoYWluIG1zZ3MpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJCWNhc2UgR3JhcGhQYWNrYWdlLlVSSV9UT19OT0RFX01BUF9FTlRSWV9fVkFMVUU6CisJCQkJcmV0dXJuIGJhc2ljU2V0VHlwZWRWYWx1ZShudWxsLCBtc2dzKTsKKwkJfQorCQlyZXR1cm4gc3VwZXIuZUludmVyc2VSZW1vdmUob3RoZXJFbmQsIGZlYXR1cmVJRCwgbXNncyk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIE9iamVjdCBlR2V0KGludCBmZWF0dXJlSUQsIGJvb2xlYW4gcmVzb2x2ZSwgYm9vbGVhbiBjb3JlVHlwZSkgeworCQlzd2l0Y2ggKGZlYXR1cmVJRCkgeworCQkJY2FzZSBHcmFwaFBhY2thZ2UuVVJJX1RPX05PREVfTUFQX0VOVFJZX19LRVk6CisJCQkJcmV0dXJuIGdldFR5cGVkS2V5KCk7CisJCQljYXNlIEdyYXBoUGFja2FnZS5VUklfVE9fTk9ERV9NQVBfRU5UUllfX1ZBTFVFOgorCQkJCXJldHVybiBnZXRUeXBlZFZhbHVlKCk7CisJCX0KKwkJcmV0dXJuIHN1cGVyLmVHZXQoZmVhdHVyZUlELCByZXNvbHZlLCBjb3JlVHlwZSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgZVNldChpbnQgZmVhdHVyZUlELCBPYmplY3QgbmV3VmFsdWUpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJCWNhc2UgR3JhcGhQYWNrYWdlLlVSSV9UT19OT0RFX01BUF9FTlRSWV9fS0VZOgorCQkJCXNldFR5cGVkS2V5KChVUkkpbmV3VmFsdWUpOworCQkJCXJldHVybjsKKwkJCWNhc2UgR3JhcGhQYWNrYWdlLlVSSV9UT19OT0RFX01BUF9FTlRSWV9fVkFMVUU6CisJCQkJc2V0VHlwZWRWYWx1ZSgoTm9kZSluZXdWYWx1ZSk7CisJCQkJcmV0dXJuOworCQl9CisJCXN1cGVyLmVTZXQoZmVhdHVyZUlELCBuZXdWYWx1ZSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgZVVuc2V0KGludCBmZWF0dXJlSUQpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJCWNhc2UgR3JhcGhQYWNrYWdlLlVSSV9UT19OT0RFX01BUF9FTlRSWV9fS0VZOgorCQkJCXNldFR5cGVkS2V5KEtFWV9FREVGQVVMVCk7CisJCQkJcmV0dXJuOworCQkJY2FzZSBHcmFwaFBhY2thZ2UuVVJJX1RPX05PREVfTUFQX0VOVFJZX19WQUxVRToKKwkJCQlzZXRUeXBlZFZhbHVlKChOb2RlKW51bGwpOworCQkJCXJldHVybjsKKwkJfQorCQlzdXBlci5lVW5zZXQoZmVhdHVyZUlEKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgYm9vbGVhbiBlSXNTZXQoaW50IGZlYXR1cmVJRCkgeworCQlzd2l0Y2ggKGZlYXR1cmVJRCkgeworCQkJY2FzZSBHcmFwaFBhY2thZ2UuVVJJX1RPX05PREVfTUFQX0VOVFJZX19LRVk6CisJCQkJcmV0dXJuIEtFWV9FREVGQVVMVCA9PSBudWxsID8ga2V5ICE9IG51bGwgOiAhS0VZX0VERUZBVUxULmVxdWFscyhrZXkpOworCQkJY2FzZSBHcmFwaFBhY2thZ2UuVVJJX1RPX05PREVfTUFQX0VOVFJZX19WQUxVRToKKwkJCQlyZXR1cm4gdmFsdWUgIT0gbnVsbDsKKwkJfQorCQlyZXR1cm4gc3VwZXIuZUlzU2V0KGZlYXR1cmVJRCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIFN0cmluZyB0b1N0cmluZygpIHsKKwkJaWYgKGVJc1Byb3h5KCkpIHJldHVybiBzdXBlci50b1N0cmluZygpOworCisJCVN0cmluZ0J1ZmZlciByZXN1bHQgPSBuZXcgU3RyaW5nQnVmZmVyKHN1cGVyLnRvU3RyaW5nKCkpOworCQlyZXN1bHQuYXBwZW5kKCIgKGtleTogIik7IC8vJE5PTi1OTFMtMSQKKwkJcmVzdWx0LmFwcGVuZChrZXkpOworCQlyZXN1bHQuYXBwZW5kKCcpJyk7CisJCXJldHVybiByZXN1bHQudG9TdHJpbmcoKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgaW50IGhhc2ggPSAtMTsKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBpbnQgZ2V0SGFzaCgpIHsKKwkJaWYgKGhhc2ggPT0gLTEpIHsKKwkJCU9iamVjdCB0aGVLZXkgPSBnZXRLZXkoKTsKKwkJCWhhc2ggPSAodGhlS2V5ID09IG51bGwgPyAwIDogdGhlS2V5Lmhhc2hDb2RlKCkpOworCQl9CisJCXJldHVybiBoYXNoOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIHNldEhhc2goaW50IGhhc2gpIHsKKwkJdGhpcy5oYXNoID0gaGFzaDsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVVJJIGdldEtleSgpIHsKKwkJcmV0dXJuIGdldFR5cGVkS2V5KCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgc2V0S2V5KFVSSSBrZXkpIHsKKwkJc2V0VHlwZWRLZXkoa2V5KTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgTm9kZSBnZXRWYWx1ZSgpIHsKKwkJcmV0dXJuIGdldFR5cGVkVmFsdWUoKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgTm9kZSBzZXRWYWx1ZShOb2RlIHZhbHVlKSB7CisJCU5vZGUgb2xkVmFsdWUgPSBnZXRWYWx1ZSgpOworCQlzZXRUeXBlZFZhbHVlKHZhbHVlKTsKKwkJcmV0dXJuIG9sZFZhbHVlOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBTdXBwcmVzc1dhcm5pbmdzKCJ1bmNoZWNrZWQiKQorCXB1YmxpYyBFTWFwPFVSSSwgTm9kZT4gZ2V0RU1hcCgpIHsKKwkJRU9iamVjdCBjb250YWluZXIgPSBlQ29udGFpbmVyKCk7CisJCXJldHVybiBjb250YWluZXIgPT0gbnVsbCA/IG51bGwgOiAoRU1hcDxVUkksIE5vZGU+KWNvbnRhaW5lci5lR2V0KGVDb250YWlubWVudEZlYXR1cmUoKSk7CisJfQorCit9IC8vVVJJVG9Ob2RlTWFwRW50cnlJbXBsCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoL2ltcGwvVW5yZXNvbHZlZElkZW50aWZpYWJsZUltcGwuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGgvaW1wbC9VbnJlc29sdmVkSWRlbnRpZmlhYmxlSW1wbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNiM2JiYmEKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoL2ltcGwvVW5yZXNvbHZlZElkZW50aWZpYWJsZUltcGwuamF2YQpAQCAtMCwwICsxLDQzNiBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguaW1wbDsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuIAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyAKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0IAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwgCisgKiAKKyAqIENvbnRyaWJ1dG9yczogCisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5VUkk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzczsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuSW50ZXJuYWxFT2JqZWN0OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5pbXBsLkVOb3RpZmljYXRpb25JbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5pbXBsLkVPYmplY3RJbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uSWRlbnRpZmlhYmxlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5HcmFwaFBhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLlVucmVzb2x2ZWRJZGVudGlmaWFibGU7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPlVucmVzb2x2ZWQgSWRlbnRpZmlhYmxlPC9iPjwvZW0+Jy4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogPHA+CisgKiBUaGUgZm9sbG93aW5nIGZlYXR1cmVzIGFyZSBpbXBsZW1lbnRlZDoKKyAqIDx1bD4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguaW1wbC5VbnJlc29sdmVkSWRlbnRpZmlhYmxlSW1wbCNnZXRTY2VuYXJpbyA8ZW0+U2NlbmFyaW88L2VtPn08L2xpPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5pbXBsLlVucmVzb2x2ZWRJZGVudGlmaWFibGVJbXBsI2dldE1vZGVsIDxlbT5Nb2RlbDwvZW0+fTwvbGk+CisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmltcGwuVW5yZXNvbHZlZElkZW50aWZpYWJsZUltcGwjZ2V0R3JhcGggPGVtPkdyYXBoPC9lbT59PC9saT4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguaW1wbC5VbnJlc29sdmVkSWRlbnRpZmlhYmxlSW1wbCNnZXRJZGVudGlmaWFibGUgPGVtPklkZW50aWZpYWJsZTwvZW0+fTwvbGk+CisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmltcGwuVW5yZXNvbHZlZElkZW50aWZpYWJsZUltcGwjZ2V0VW5yZXNvbHZlZFVSSSA8ZW0+VW5yZXNvbHZlZCBVUkk8L2VtPn08L2xpPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5pbXBsLlVucmVzb2x2ZWRJZGVudGlmaWFibGVJbXBsI2dldEZpZWxkTmFtZSA8ZW0+RmllbGQgTmFtZTwvZW0+fTwvbGk+CisgKiA8L3VsPgorICogPC9wPgorICoKKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIFVucmVzb2x2ZWRJZGVudGlmaWFibGVJbXBsIGV4dGVuZHMgRU9iamVjdEltcGwgaW1wbGVtZW50cworCQlVbnJlc29sdmVkSWRlbnRpZmlhYmxlIHsKKwkvKioKKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRTY2VuYXJpbygpIDxlbT5TY2VuYXJpbzwvZW0+fScgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI2dldFNjZW5hcmlvKCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgSWRlbnRpZmlhYmxlIHNjZW5hcmlvOworCisJLyoqCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0TW9kZWwoKSA8ZW0+TW9kZWw8L2VtPn0nIHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNnZXRNb2RlbCgpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIElkZW50aWZpYWJsZSBtb2RlbDsKKworCS8qKgorCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldEdyYXBoKCkgPGVtPkdyYXBoPC9lbT59JyByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZ2V0R3JhcGgoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBJZGVudGlmaWFibGUgZ3JhcGg7CisKKwkvKioKKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRJZGVudGlmaWFibGUoKSA8ZW0+SWRlbnRpZmlhYmxlPC9lbT59JyByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZ2V0SWRlbnRpZmlhYmxlKCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgSWRlbnRpZmlhYmxlIGlkZW50aWZpYWJsZTsKKworCS8qKgorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRVbnJlc29sdmVkVVJJKCkgPGVtPlVucmVzb2x2ZWQgVVJJPC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZ2V0VW5yZXNvbHZlZFVSSSgpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBVUkkgVU5SRVNPTFZFRF9VUklfRURFRkFVTFQgPSBudWxsOworCisJLyoqCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0VW5yZXNvbHZlZFVSSSgpIDxlbT5VbnJlc29sdmVkIFVSSTwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI2dldFVucmVzb2x2ZWRVUkkoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBVUkkgdW5yZXNvbHZlZFVSSSA9IFVOUkVTT0xWRURfVVJJX0VERUZBVUxUOworCisJLyoqCisJICogVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldEZpZWxkTmFtZSgpIDxlbT5GaWVsZCBOYW1lPC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZ2V0RmllbGROYW1lKCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIFN0cmluZyBGSUVMRF9OQU1FX0VERUZBVUxUID0gbnVsbDsKKworCS8qKgorCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldEZpZWxkTmFtZSgpIDxlbT5GaWVsZCBOYW1lPC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZ2V0RmllbGROYW1lKCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgU3RyaW5nIGZpZWxkTmFtZSA9IEZJRUxEX05BTUVfRURFRkFVTFQ7CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIFVucmVzb2x2ZWRJZGVudGlmaWFibGVJbXBsKCkgeworCQlzdXBlcigpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgRUNsYXNzIGVTdGF0aWNDbGFzcygpIHsKKwkJcmV0dXJuIEdyYXBoUGFja2FnZS5MaXRlcmFscy5VTlJFU09MVkVEX0lERU5USUZJQUJMRTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIElkZW50aWZpYWJsZSBnZXRTY2VuYXJpbygpIHsKKwkJaWYgKHNjZW5hcmlvICE9IG51bGwgJiYgc2NlbmFyaW8uZUlzUHJveHkoKSkgeworCQkJSW50ZXJuYWxFT2JqZWN0IG9sZFNjZW5hcmlvID0gKEludGVybmFsRU9iamVjdClzY2VuYXJpbzsKKwkJCXNjZW5hcmlvID0gKElkZW50aWZpYWJsZSllUmVzb2x2ZVByb3h5KG9sZFNjZW5hcmlvKTsKKwkJCWlmIChzY2VuYXJpbyAhPSBvbGRTY2VuYXJpbykgeworCQkJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkKKwkJCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlJFU09MVkUsIEdyYXBoUGFja2FnZS5VTlJFU09MVkVEX0lERU5USUZJQUJMRV9fU0NFTkFSSU8sIG9sZFNjZW5hcmlvLCBzY2VuYXJpbykpOworCQkJfQorCQl9CisJCXJldHVybiBzY2VuYXJpbzsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIElkZW50aWZpYWJsZSBiYXNpY0dldFNjZW5hcmlvKCkgeworCQlyZXR1cm4gc2NlbmFyaW87CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIHNldFNjZW5hcmlvKElkZW50aWZpYWJsZSBuZXdTY2VuYXJpbykgeworCQlJZGVudGlmaWFibGUgb2xkU2NlbmFyaW8gPSBzY2VuYXJpbzsKKwkJc2NlbmFyaW8gPSBuZXdTY2VuYXJpbzsKKwkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQorCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgR3JhcGhQYWNrYWdlLlVOUkVTT0xWRURfSURFTlRJRklBQkxFX19TQ0VOQVJJTywgb2xkU2NlbmFyaW8sIHNjZW5hcmlvKSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBJZGVudGlmaWFibGUgZ2V0TW9kZWwoKSB7CisJCWlmIChtb2RlbCAhPSBudWxsICYmIG1vZGVsLmVJc1Byb3h5KCkpIHsKKwkJCUludGVybmFsRU9iamVjdCBvbGRNb2RlbCA9IChJbnRlcm5hbEVPYmplY3QpbW9kZWw7CisJCQltb2RlbCA9IChJZGVudGlmaWFibGUpZVJlc29sdmVQcm94eShvbGRNb2RlbCk7CisJCQlpZiAobW9kZWwgIT0gb2xkTW9kZWwpIHsKKwkJCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpCisJCQkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5SRVNPTFZFLCBHcmFwaFBhY2thZ2UuVU5SRVNPTFZFRF9JREVOVElGSUFCTEVfX01PREVMLCBvbGRNb2RlbCwgbW9kZWwpKTsKKwkJCX0KKwkJfQorCQlyZXR1cm4gbW9kZWw7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBJZGVudGlmaWFibGUgYmFzaWNHZXRNb2RlbCgpIHsKKwkJcmV0dXJuIG1vZGVsOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRNb2RlbChJZGVudGlmaWFibGUgbmV3TW9kZWwpIHsKKwkJSWRlbnRpZmlhYmxlIG9sZE1vZGVsID0gbW9kZWw7CisJCW1vZGVsID0gbmV3TW9kZWw7CisJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkKKwkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIEdyYXBoUGFja2FnZS5VTlJFU09MVkVEX0lERU5USUZJQUJMRV9fTU9ERUwsIG9sZE1vZGVsLCBtb2RlbCkpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgSWRlbnRpZmlhYmxlIGdldEdyYXBoKCkgeworCQlpZiAoZ3JhcGggIT0gbnVsbCAmJiBncmFwaC5lSXNQcm94eSgpKSB7CisJCQlJbnRlcm5hbEVPYmplY3Qgb2xkR3JhcGggPSAoSW50ZXJuYWxFT2JqZWN0KWdyYXBoOworCQkJZ3JhcGggPSAoSWRlbnRpZmlhYmxlKWVSZXNvbHZlUHJveHkob2xkR3JhcGgpOworCQkJaWYgKGdyYXBoICE9IG9sZEdyYXBoKSB7CisJCQkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQorCQkJCQllTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uUkVTT0xWRSwgR3JhcGhQYWNrYWdlLlVOUkVTT0xWRURfSURFTlRJRklBQkxFX19HUkFQSCwgb2xkR3JhcGgsIGdyYXBoKSk7CisJCQl9CisJCX0KKwkJcmV0dXJuIGdyYXBoOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgSWRlbnRpZmlhYmxlIGJhc2ljR2V0R3JhcGgoKSB7CisJCXJldHVybiBncmFwaDsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgc2V0R3JhcGgoSWRlbnRpZmlhYmxlIG5ld0dyYXBoKSB7CisJCUlkZW50aWZpYWJsZSBvbGRHcmFwaCA9IGdyYXBoOworCQlncmFwaCA9IG5ld0dyYXBoOworCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpCisJCQllTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBHcmFwaFBhY2thZ2UuVU5SRVNPTFZFRF9JREVOVElGSUFCTEVfX0dSQVBILCBvbGRHcmFwaCwgZ3JhcGgpKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIElkZW50aWZpYWJsZSBnZXRJZGVudGlmaWFibGUoKSB7CisJCWlmIChpZGVudGlmaWFibGUgIT0gbnVsbCAmJiBpZGVudGlmaWFibGUuZUlzUHJveHkoKSkgeworCQkJSW50ZXJuYWxFT2JqZWN0IG9sZElkZW50aWZpYWJsZSA9IChJbnRlcm5hbEVPYmplY3QpaWRlbnRpZmlhYmxlOworCQkJaWRlbnRpZmlhYmxlID0gKElkZW50aWZpYWJsZSllUmVzb2x2ZVByb3h5KG9sZElkZW50aWZpYWJsZSk7CisJCQlpZiAoaWRlbnRpZmlhYmxlICE9IG9sZElkZW50aWZpYWJsZSkgeworCQkJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkKKwkJCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlJFU09MVkUsIEdyYXBoUGFja2FnZS5VTlJFU09MVkVEX0lERU5USUZJQUJMRV9fSURFTlRJRklBQkxFLCBvbGRJZGVudGlmaWFibGUsIGlkZW50aWZpYWJsZSkpOworCQkJfQorCQl9CisJCXJldHVybiBpZGVudGlmaWFibGU7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBJZGVudGlmaWFibGUgYmFzaWNHZXRJZGVudGlmaWFibGUoKSB7CisJCXJldHVybiBpZGVudGlmaWFibGU7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIHNldElkZW50aWZpYWJsZShJZGVudGlmaWFibGUgbmV3SWRlbnRpZmlhYmxlKSB7CisJCUlkZW50aWZpYWJsZSBvbGRJZGVudGlmaWFibGUgPSBpZGVudGlmaWFibGU7CisJCWlkZW50aWZpYWJsZSA9IG5ld0lkZW50aWZpYWJsZTsKKwkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQorCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgR3JhcGhQYWNrYWdlLlVOUkVTT0xWRURfSURFTlRJRklBQkxFX19JREVOVElGSUFCTEUsIG9sZElkZW50aWZpYWJsZSwgaWRlbnRpZmlhYmxlKSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBVUkkgZ2V0VW5yZXNvbHZlZFVSSSgpIHsKKwkJcmV0dXJuIHVucmVzb2x2ZWRVUkk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIHNldFVucmVzb2x2ZWRVUkkoVVJJIG5ld1VucmVzb2x2ZWRVUkkpIHsKKwkJVVJJIG9sZFVucmVzb2x2ZWRVUkkgPSB1bnJlc29sdmVkVVJJOworCQl1bnJlc29sdmVkVVJJID0gbmV3VW5yZXNvbHZlZFVSSTsKKwkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQorCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgR3JhcGhQYWNrYWdlLlVOUkVTT0xWRURfSURFTlRJRklBQkxFX19VTlJFU09MVkVEX1VSSSwgb2xkVW5yZXNvbHZlZFVSSSwgdW5yZXNvbHZlZFVSSSkpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgU3RyaW5nIGdldEZpZWxkTmFtZSgpIHsKKwkJcmV0dXJuIGZpZWxkTmFtZTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgc2V0RmllbGROYW1lKFN0cmluZyBuZXdGaWVsZE5hbWUpIHsKKwkJU3RyaW5nIG9sZEZpZWxkTmFtZSA9IGZpZWxkTmFtZTsKKwkJZmllbGROYW1lID0gbmV3RmllbGROYW1lOworCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpCisJCQllTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBHcmFwaFBhY2thZ2UuVU5SRVNPTFZFRF9JREVOVElGSUFCTEVfX0ZJRUxEX05BTUUsIG9sZEZpZWxkTmFtZSwgZmllbGROYW1lKSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBPYmplY3QgZUdldChpbnQgZmVhdHVyZUlELCBib29sZWFuIHJlc29sdmUsIGJvb2xlYW4gY29yZVR5cGUpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJCWNhc2UgR3JhcGhQYWNrYWdlLlVOUkVTT0xWRURfSURFTlRJRklBQkxFX19TQ0VOQVJJTzoKKwkJCQlpZiAocmVzb2x2ZSkgcmV0dXJuIGdldFNjZW5hcmlvKCk7CisJCQkJcmV0dXJuIGJhc2ljR2V0U2NlbmFyaW8oKTsKKwkJCWNhc2UgR3JhcGhQYWNrYWdlLlVOUkVTT0xWRURfSURFTlRJRklBQkxFX19NT0RFTDoKKwkJCQlpZiAocmVzb2x2ZSkgcmV0dXJuIGdldE1vZGVsKCk7CisJCQkJcmV0dXJuIGJhc2ljR2V0TW9kZWwoKTsKKwkJCWNhc2UgR3JhcGhQYWNrYWdlLlVOUkVTT0xWRURfSURFTlRJRklBQkxFX19HUkFQSDoKKwkJCQlpZiAocmVzb2x2ZSkgcmV0dXJuIGdldEdyYXBoKCk7CisJCQkJcmV0dXJuIGJhc2ljR2V0R3JhcGgoKTsKKwkJCWNhc2UgR3JhcGhQYWNrYWdlLlVOUkVTT0xWRURfSURFTlRJRklBQkxFX19JREVOVElGSUFCTEU6CisJCQkJaWYgKHJlc29sdmUpIHJldHVybiBnZXRJZGVudGlmaWFibGUoKTsKKwkJCQlyZXR1cm4gYmFzaWNHZXRJZGVudGlmaWFibGUoKTsKKwkJCWNhc2UgR3JhcGhQYWNrYWdlLlVOUkVTT0xWRURfSURFTlRJRklBQkxFX19VTlJFU09MVkVEX1VSSToKKwkJCQlyZXR1cm4gZ2V0VW5yZXNvbHZlZFVSSSgpOworCQkJY2FzZSBHcmFwaFBhY2thZ2UuVU5SRVNPTFZFRF9JREVOVElGSUFCTEVfX0ZJRUxEX05BTUU6CisJCQkJcmV0dXJuIGdldEZpZWxkTmFtZSgpOworCQl9CisJCXJldHVybiBzdXBlci5lR2V0KGZlYXR1cmVJRCwgcmVzb2x2ZSwgY29yZVR5cGUpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBlU2V0KGludCBmZWF0dXJlSUQsIE9iamVjdCBuZXdWYWx1ZSkgeworCQlzd2l0Y2ggKGZlYXR1cmVJRCkgeworCQkJY2FzZSBHcmFwaFBhY2thZ2UuVU5SRVNPTFZFRF9JREVOVElGSUFCTEVfX1NDRU5BUklPOgorCQkJCXNldFNjZW5hcmlvKChJZGVudGlmaWFibGUpbmV3VmFsdWUpOworCQkJCXJldHVybjsKKwkJCWNhc2UgR3JhcGhQYWNrYWdlLlVOUkVTT0xWRURfSURFTlRJRklBQkxFX19NT0RFTDoKKwkJCQlzZXRNb2RlbCgoSWRlbnRpZmlhYmxlKW5ld1ZhbHVlKTsKKwkJCQlyZXR1cm47CisJCQljYXNlIEdyYXBoUGFja2FnZS5VTlJFU09MVkVEX0lERU5USUZJQUJMRV9fR1JBUEg6CisJCQkJc2V0R3JhcGgoKElkZW50aWZpYWJsZSluZXdWYWx1ZSk7CisJCQkJcmV0dXJuOworCQkJY2FzZSBHcmFwaFBhY2thZ2UuVU5SRVNPTFZFRF9JREVOVElGSUFCTEVfX0lERU5USUZJQUJMRToKKwkJCQlzZXRJZGVudGlmaWFibGUoKElkZW50aWZpYWJsZSluZXdWYWx1ZSk7CisJCQkJcmV0dXJuOworCQkJY2FzZSBHcmFwaFBhY2thZ2UuVU5SRVNPTFZFRF9JREVOVElGSUFCTEVfX1VOUkVTT0xWRURfVVJJOgorCQkJCXNldFVucmVzb2x2ZWRVUkkoKFVSSSluZXdWYWx1ZSk7CisJCQkJcmV0dXJuOworCQkJY2FzZSBHcmFwaFBhY2thZ2UuVU5SRVNPTFZFRF9JREVOVElGSUFCTEVfX0ZJRUxEX05BTUU6CisJCQkJc2V0RmllbGROYW1lKChTdHJpbmcpbmV3VmFsdWUpOworCQkJCXJldHVybjsKKwkJfQorCQlzdXBlci5lU2V0KGZlYXR1cmVJRCwgbmV3VmFsdWUpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBlVW5zZXQoaW50IGZlYXR1cmVJRCkgeworCQlzd2l0Y2ggKGZlYXR1cmVJRCkgeworCQkJY2FzZSBHcmFwaFBhY2thZ2UuVU5SRVNPTFZFRF9JREVOVElGSUFCTEVfX1NDRU5BUklPOgorCQkJCXNldFNjZW5hcmlvKChJZGVudGlmaWFibGUpbnVsbCk7CisJCQkJcmV0dXJuOworCQkJY2FzZSBHcmFwaFBhY2thZ2UuVU5SRVNPTFZFRF9JREVOVElGSUFCTEVfX01PREVMOgorCQkJCXNldE1vZGVsKChJZGVudGlmaWFibGUpbnVsbCk7CisJCQkJcmV0dXJuOworCQkJY2FzZSBHcmFwaFBhY2thZ2UuVU5SRVNPTFZFRF9JREVOVElGSUFCTEVfX0dSQVBIOgorCQkJCXNldEdyYXBoKChJZGVudGlmaWFibGUpbnVsbCk7CisJCQkJcmV0dXJuOworCQkJY2FzZSBHcmFwaFBhY2thZ2UuVU5SRVNPTFZFRF9JREVOVElGSUFCTEVfX0lERU5USUZJQUJMRToKKwkJCQlzZXRJZGVudGlmaWFibGUoKElkZW50aWZpYWJsZSludWxsKTsKKwkJCQlyZXR1cm47CisJCQljYXNlIEdyYXBoUGFja2FnZS5VTlJFU09MVkVEX0lERU5USUZJQUJMRV9fVU5SRVNPTFZFRF9VUkk6CisJCQkJc2V0VW5yZXNvbHZlZFVSSShVTlJFU09MVkVEX1VSSV9FREVGQVVMVCk7CisJCQkJcmV0dXJuOworCQkJY2FzZSBHcmFwaFBhY2thZ2UuVU5SRVNPTFZFRF9JREVOVElGSUFCTEVfX0ZJRUxEX05BTUU6CisJCQkJc2V0RmllbGROYW1lKEZJRUxEX05BTUVfRURFRkFVTFQpOworCQkJCXJldHVybjsKKwkJfQorCQlzdXBlci5lVW5zZXQoZmVhdHVyZUlEKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIGJvb2xlYW4gZUlzU2V0KGludCBmZWF0dXJlSUQpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJCWNhc2UgR3JhcGhQYWNrYWdlLlVOUkVTT0xWRURfSURFTlRJRklBQkxFX19TQ0VOQVJJTzoKKwkJCQlyZXR1cm4gc2NlbmFyaW8gIT0gbnVsbDsKKwkJCWNhc2UgR3JhcGhQYWNrYWdlLlVOUkVTT0xWRURfSURFTlRJRklBQkxFX19NT0RFTDoKKwkJCQlyZXR1cm4gbW9kZWwgIT0gbnVsbDsKKwkJCWNhc2UgR3JhcGhQYWNrYWdlLlVOUkVTT0xWRURfSURFTlRJRklBQkxFX19HUkFQSDoKKwkJCQlyZXR1cm4gZ3JhcGggIT0gbnVsbDsKKwkJCWNhc2UgR3JhcGhQYWNrYWdlLlVOUkVTT0xWRURfSURFTlRJRklBQkxFX19JREVOVElGSUFCTEU6CisJCQkJcmV0dXJuIGlkZW50aWZpYWJsZSAhPSBudWxsOworCQkJY2FzZSBHcmFwaFBhY2thZ2UuVU5SRVNPTFZFRF9JREVOVElGSUFCTEVfX1VOUkVTT0xWRURfVVJJOgorCQkJCXJldHVybiBVTlJFU09MVkVEX1VSSV9FREVGQVVMVCA9PSBudWxsID8gdW5yZXNvbHZlZFVSSSAhPSBudWxsIDogIVVOUkVTT0xWRURfVVJJX0VERUZBVUxULmVxdWFscyh1bnJlc29sdmVkVVJJKTsKKwkJCWNhc2UgR3JhcGhQYWNrYWdlLlVOUkVTT0xWRURfSURFTlRJRklBQkxFX19GSUVMRF9OQU1FOgorCQkJCXJldHVybiBGSUVMRF9OQU1FX0VERUZBVUxUID09IG51bGwgPyBmaWVsZE5hbWUgIT0gbnVsbCA6ICFGSUVMRF9OQU1FX0VERUZBVUxULmVxdWFscyhmaWVsZE5hbWUpOworCQl9CisJCXJldHVybiBzdXBlci5lSXNTZXQoZmVhdHVyZUlEKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCXB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKSB7CisJCWlmIChlSXNQcm94eSgpKQorCQkJcmV0dXJuIHN1cGVyLnRvU3RyaW5nKCk7CisKKwkJU3RyaW5nQnVmZmVyIHJlc3VsdCA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKKwkJcmVzdWx0LmFwcGVuZChnZXRJZGVudGlmaWFibGUoKS50b1N0cmluZygpKTsKKwkJcmVzdWx0LmFwcGVuZCgiLCB1bnJlc29sdmVkIFVSSTogIik7CisJCXJlc3VsdC5hcHBlbmQoZ2V0VW5yZXNvbHZlZFVSSSgpKTsKKwkJcmVzdWx0LmFwcGVuZCgiLCBmaWVsZE5hbWU6ICIpOworCQlyZXN1bHQuYXBwZW5kKGdldEZpZWxkTmFtZSgpKTsKKwkJcmV0dXJuIHJlc3VsdC50b1N0cmluZygpOworCX0gLy8gdG9TdHJpbmcKKworfSAvLyBVbnJlc29sdmVkSWRlbnRpZmlhYmxlSW1wbApkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC9wcm92aWRlci9EeW5hbWljRWRnZUxhYmVsSXRlbVByb3ZpZGVyLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoL3Byb3ZpZGVyL0R5bmFtaWNFZGdlTGFiZWxJdGVtUHJvdmlkZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNmU2MTY2Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC9wcm92aWRlci9EeW5hbWljRWRnZUxhYmVsSXRlbVByb3ZpZGVyLmphdmEKQEAgLTAsMCArMSwxMzIgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLnByb3ZpZGVyOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOworaW1wb3J0IGphdmEudXRpbC5MaXN0OworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5VUkk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JRWRpdGluZ0RvbWFpbkl0ZW1Qcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbUxhYmVsUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1Qcm9wZXJ0eVNvdXJjZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JU3RydWN0dXJlZEl0ZW1Db250ZW50UHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVRyZWVJdGVtQ29udGVudFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5EeW5hbWljRWRnZUxhYmVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5HcmFwaFBhY2thZ2U7CisKKy8qKgorICogVGhpcyBpcyB0aGUgaXRlbSBwcm92aWRlciBhZGFwdGVyIGZvciBhIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguRHluYW1pY0VkZ2VMYWJlbH0gb2JqZWN0LgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgRHluYW1pY0VkZ2VMYWJlbEl0ZW1Qcm92aWRlcgorCWV4dGVuZHMgRHluYW1pY0xhYmVsSXRlbVByb3ZpZGVyCisJaW1wbGVtZW50cwkKKwkJSUVkaXRpbmdEb21haW5JdGVtUHJvdmlkZXIsCQorCQlJU3RydWN0dXJlZEl0ZW1Db250ZW50UHJvdmlkZXIsCQorCQlJVHJlZUl0ZW1Db250ZW50UHJvdmlkZXIsCQorCQlJSXRlbUxhYmVsUHJvdmlkZXIsCQorCQlJSXRlbVByb3BlcnR5U291cmNlIHsKKwkvKioKKwkgKiBUaGlzIGNvbnN0cnVjdHMgYW4gaW5zdGFuY2UgZnJvbSBhIGZhY3RvcnkgYW5kIGEgbm90aWZpZXIuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIER5bmFtaWNFZGdlTGFiZWxJdGVtUHJvdmlkZXIoQWRhcHRlckZhY3RvcnkgYWRhcHRlckZhY3RvcnkpIHsKKwkJc3VwZXIoYWRhcHRlckZhY3RvcnkpOworCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyB0aGUgcHJvcGVydHkgZGVzY3JpcHRvcnMgZm9yIHRoZSBhZGFwdGVkIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBMaXN0PElJdGVtUHJvcGVydHlEZXNjcmlwdG9yPiBnZXRQcm9wZXJ0eURlc2NyaXB0b3JzKE9iamVjdCBvYmplY3QpIHsKKwkJaWYgKGl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzID09IG51bGwpIHsKKwkJCXN1cGVyLmdldFByb3BlcnR5RGVzY3JpcHRvcnMob2JqZWN0KTsKKworCQkJYWRkRWRnZVByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QpOworCQl9CisJCXJldHVybiBpdGVtUHJvcGVydHlEZXNjcmlwdG9yczsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFkZHMgYSBwcm9wZXJ0eSBkZXNjcmlwdG9yIGZvciB0aGUgRWRnZSBmZWF0dXJlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIGFkZEVkZ2VQcm9wZXJ0eURlc2NyaXB0b3IoT2JqZWN0IG9iamVjdCkgeworCQlpdGVtUHJvcGVydHlEZXNjcmlwdG9ycy5hZGQKKwkJCShjcmVhdGVJdGVtUHJvcGVydHlEZXNjcmlwdG9yCisJCQkJKCgoQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSlhZGFwdGVyRmFjdG9yeSkuZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCksCisJCQkJIGdldFJlc291cmNlTG9jYXRvcigpLAorCQkJCSBnZXRTdHJpbmcoIl9VSV9FZGdlTGFiZWxfZWRnZV9mZWF0dXJlIiksIC8vJE5PTi1OTFMtMSQKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfUHJvcGVydHlEZXNjcmlwdG9yX2Rlc2NyaXB0aW9uIiwgIl9VSV9FZGdlTGFiZWxfZWRnZV9mZWF0dXJlIiwgIl9VSV9FZGdlTGFiZWxfdHlwZSIpLCAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQgLy8kTk9OLU5MUy0zJAorCQkJCSBHcmFwaFBhY2thZ2UuTGl0ZXJhbHMuRURHRV9MQUJFTF9fRURHRSwKKwkJCQkgdHJ1ZSwKKwkJCQkgZmFsc2UsCisJCQkJIHRydWUsCisJCQkJIG51bGwsCisJCQkJIG51bGwsCisJCQkJIG51bGwpKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgdGhlIGxhYmVsIHRleHQgZm9yIHRoZSBhZGFwdGVkIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBTdHJpbmcgZ2V0VGV4dChPYmplY3Qgb2JqZWN0KSB7CisJCVVSSSBsYWJlbFZhbHVlID0gKChEeW5hbWljRWRnZUxhYmVsKW9iamVjdCkuZ2V0VVJJKCk7CisJCVN0cmluZyBsYWJlbCA9IGxhYmVsVmFsdWUgPT0gbnVsbCA/IG51bGwgOiBsYWJlbFZhbHVlLnRvU3RyaW5nKCk7CisJCXJldHVybiBsYWJlbCA9PSBudWxsIHx8IGxhYmVsLmxlbmd0aCgpID09IDAgPworCQkJZ2V0U3RyaW5nKCJfVUlfRHluYW1pY0VkZ2VMYWJlbF90eXBlIikgOiAvLyROT04tTkxTLTEkCisJCQlnZXRTdHJpbmcoIl9VSV9EeW5hbWljRWRnZUxhYmVsX3R5cGUiKSArICIgIiArIGxhYmVsOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKKwl9CisKKwkvKioKKwkgKiBUaGlzIGhhbmRsZXMgbW9kZWwgbm90aWZpY2F0aW9ucyBieSBjYWxsaW5nIHtAbGluayAjdXBkYXRlQ2hpbGRyZW59IHRvIHVwZGF0ZSBhbnkgY2FjaGVkCisJICogY2hpbGRyZW4gYW5kIGJ5IGNyZWF0aW5nIGEgdmlld2VyIG5vdGlmaWNhdGlvbiwgd2hpY2ggaXQgcGFzc2VzIHRvIHtAbGluayAjZmlyZU5vdGlmeUNoYW5nZWR9LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIG5vdGlmeUNoYW5nZWQoTm90aWZpY2F0aW9uIG5vdGlmaWNhdGlvbikgeworCQl1cGRhdGVDaGlsZHJlbihub3RpZmljYXRpb24pOworCQlzdXBlci5ub3RpZnlDaGFuZ2VkKG5vdGlmaWNhdGlvbik7CisJfQorCisJLyoqCisJICogVGhpcyBhZGRzIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuZWRpdC5jb21tYW5kLkNvbW1hbmRQYXJhbWV0ZXJ9cyBkZXNjcmliaW5nIHRoZSBjaGlsZHJlbgorCSAqIHRoYXQgY2FuIGJlIGNyZWF0ZWQgdW5kZXIgdGhpcyBvYmplY3QuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgY29sbGVjdE5ld0NoaWxkRGVzY3JpcHRvcnMoQ29sbGVjdGlvbjxPYmplY3Q+IG5ld0NoaWxkRGVzY3JpcHRvcnMsIE9iamVjdCBvYmplY3QpIHsKKwkJc3VwZXIuY29sbGVjdE5ld0NoaWxkRGVzY3JpcHRvcnMobmV3Q2hpbGREZXNjcmlwdG9ycywgb2JqZWN0KTsKKwl9CisKK30KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGgvcHJvdmlkZXIvRHluYW1pY0xhYmVsSXRlbVByb3ZpZGVyLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoL3Byb3ZpZGVyL0R5bmFtaWNMYWJlbEl0ZW1Qcm92aWRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU4NzM1NTAKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoL3Byb3ZpZGVyL0R5bmFtaWNMYWJlbEl0ZW1Qcm92aWRlci5qYXZhCkBAIC0wLDAgKzEsMTY5IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5wcm92aWRlcjsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuIAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyAKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0IAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwgCisgKiAKKyAqIENvbnRyaWJ1dG9yczogCisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgCitpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5BZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlVSSTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5Db21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklFZGl0aW5nRG9tYWluSXRlbVByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtTGFiZWxQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbVByb3BlcnR5RGVzY3JpcHRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbVByb3BlcnR5U291cmNlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklTdHJ1Y3R1cmVkSXRlbUNvbnRlbnRQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JVHJlZUl0ZW1Db250ZW50UHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSXRlbVByb3BlcnR5RGVzY3JpcHRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5WaWV3ZXJOb3RpZmljYXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkR5bmFtaWNMYWJlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguR3JhcGhQYWNrYWdlOworCisvKioKKyAqIFRoaXMgaXMgdGhlIGl0ZW0gcHJvdmlkZXIgYWRhcHRlciBmb3IgYSB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkR5bmFtaWNMYWJlbH0gb2JqZWN0LgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgRHluYW1pY0xhYmVsSXRlbVByb3ZpZGVyCisJZXh0ZW5kcyBMYWJlbEl0ZW1Qcm92aWRlcgorCWltcGxlbWVudHMJCisJCUlFZGl0aW5nRG9tYWluSXRlbVByb3ZpZGVyLAkKKwkJSVN0cnVjdHVyZWRJdGVtQ29udGVudFByb3ZpZGVyLAkKKwkJSVRyZWVJdGVtQ29udGVudFByb3ZpZGVyLAkKKwkJSUl0ZW1MYWJlbFByb3ZpZGVyLAkKKwkJSUl0ZW1Qcm9wZXJ0eVNvdXJjZSB7CisJLyoqCisJICogVGhpcyBjb25zdHJ1Y3RzIGFuIGluc3RhbmNlIGZyb20gYSBmYWN0b3J5IGFuZCBhIG5vdGlmaWVyLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBEeW5hbWljTGFiZWxJdGVtUHJvdmlkZXIoQWRhcHRlckZhY3RvcnkgYWRhcHRlckZhY3RvcnkpIHsKKwkJc3VwZXIoYWRhcHRlckZhY3RvcnkpOworCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyB0aGUgcHJvcGVydHkgZGVzY3JpcHRvcnMgZm9yIHRoZSBhZGFwdGVkIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBMaXN0PElJdGVtUHJvcGVydHlEZXNjcmlwdG9yPiBnZXRQcm9wZXJ0eURlc2NyaXB0b3JzKE9iamVjdCBvYmplY3QpIHsKKwkJaWYgKGl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzID09IG51bGwpIHsKKwkJCXN1cGVyLmdldFByb3BlcnR5RGVzY3JpcHRvcnMob2JqZWN0KTsKKworCQkJYWRkTmV4dFZhbHVlVmFsaWRQcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0KTsKKwkJfQorCQlyZXR1cm4gaXRlbVByb3BlcnR5RGVzY3JpcHRvcnM7CisJfQorCisJLyoqCisJICogVGhpcyBhZGRzIGEgcHJvcGVydHkgZGVzY3JpcHRvciBmb3IgdGhlIE5leHQgVmFsdWUgVmFsaWQgZmVhdHVyZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBhZGROZXh0VmFsdWVWYWxpZFByb3BlcnR5RGVzY3JpcHRvcihPYmplY3Qgb2JqZWN0KSB7CisJCWl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzLmFkZAorCQkJKGNyZWF0ZUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IKKwkJCQkoKChDb21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5KWFkYXB0ZXJGYWN0b3J5KS5nZXRSb290QWRhcHRlckZhY3RvcnkoKSwKKwkJCQkgZ2V0UmVzb3VyY2VMb2NhdG9yKCksCisJCQkJIGdldFN0cmluZygiX1VJX0R5bmFtaWNMYWJlbF9uZXh0VmFsdWVWYWxpZF9mZWF0dXJlIiksIC8vJE5PTi1OTFMtMSQKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfUHJvcGVydHlEZXNjcmlwdG9yX2Rlc2NyaXB0aW9uIiwgIl9VSV9EeW5hbWljTGFiZWxfbmV4dFZhbHVlVmFsaWRfZmVhdHVyZSIsICJfVUlfRHluYW1pY0xhYmVsX3R5cGUiKSwgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkIC8vJE5PTi1OTFMtMyQKKwkJCQkgR3JhcGhQYWNrYWdlLkxpdGVyYWxzLkRZTkFNSUNfTEFCRUxfX05FWFRfVkFMVUVfVkFMSUQsCisJCQkJIHRydWUsCisJCQkJIGZhbHNlLAorCQkJCSBmYWxzZSwKKwkJCQkgSXRlbVByb3BlcnR5RGVzY3JpcHRvci5CT09MRUFOX1ZBTFVFX0lNQUdFLAorCQkJCSBudWxsLAorCQkJCSBudWxsKSk7CisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIER5bmFtaWNMYWJlbC5naWYuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBPYmplY3QgZ2V0SW1hZ2UoT2JqZWN0IG9iamVjdCkgeworCQlyZXR1cm4gb3ZlcmxheUltYWdlKG9iamVjdCwgZ2V0UmVzb3VyY2VMb2NhdG9yKCkuZ2V0SW1hZ2UoImZ1bGwvY3VzdG9tb2JqMTYvRHluYW1pY0xhYmVsIikpOworCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyB0aGUgbGFiZWwgdGV4dCBmb3IgdGhlIGFkYXB0ZWQgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBTdHJpbmcgZ2V0VGV4dChPYmplY3Qgb2JqZWN0KSB7CisvLwkJVVJJIGxhYmVsVmFsdWUgPSAoKER5bmFtaWNMYWJlbClvYmplY3QpLmdldFVSSSgpOworLy8JCVN0cmluZyBsYWJlbCA9IGxhYmVsVmFsdWUgPT0gbnVsbCA/IG51bGwgOiBsYWJlbFZhbHVlLnRvU3RyaW5nKCk7CisvLwkJcmV0dXJuIGxhYmVsID09IG51bGwgfHwgbGFiZWwubGVuZ3RoKCkgPT0gMCA/CisvLwkJCWdldFN0cmluZygiX1VJX0R5bmFtaWNMYWJlbF90eXBlIikgOgorLy8JCQlnZXRTdHJpbmcoIl9VSV9EeW5hbWljTGFiZWxfdHlwZSIpICsgIiAiICsgbGFiZWw7CisJCXJldHVybiBzdXBlci5nZXRUZXh0KG9iamVjdCk7CisJfSAvLyBnZXRUZXh0CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgdGhlIGxhYmVsIHRleHQgZm9yIHRoZSBhZGFwdGVkIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCS8vQE92ZXJyaWRlCisJQE92ZXJyaWRlCisJcHVibGljIFN0cmluZyBnZXRUZXh0R2VuKE9iamVjdCBvYmplY3QpIHsKKwkJVVJJIGxhYmVsVmFsdWUgPSAoKER5bmFtaWNMYWJlbClvYmplY3QpLmdldFVSSSgpOworCQlTdHJpbmcgbGFiZWwgPSBsYWJlbFZhbHVlID09IG51bGwgPyBudWxsIDogbGFiZWxWYWx1ZS50b1N0cmluZygpOworCQlyZXR1cm4gbGFiZWwgPT0gbnVsbCB8fCBsYWJlbC5sZW5ndGgoKSA9PSAwID8KKwkJCWdldFN0cmluZygiX1VJX0R5bmFtaWNMYWJlbF90eXBlIikgOiAvLyROT04tTkxTLTEkCisJCQlnZXRTdHJpbmcoIl9VSV9EeW5hbWljTGFiZWxfdHlwZSIpICsgIiAiICsgbGFiZWw7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAorCX0KKwkKKwkvKioKKwkgKiBUaGlzIGhhbmRsZXMgbW9kZWwgbm90aWZpY2F0aW9ucyBieSBjYWxsaW5nIHtAbGluayAjdXBkYXRlQ2hpbGRyZW59IHRvIHVwZGF0ZSBhbnkgY2FjaGVkCisJICogY2hpbGRyZW4gYW5kIGJ5IGNyZWF0aW5nIGEgdmlld2VyIG5vdGlmaWNhdGlvbiwgd2hpY2ggaXQgcGFzc2VzIHRvIHtAbGluayAjZmlyZU5vdGlmeUNoYW5nZWR9LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIG5vdGlmeUNoYW5nZWQoTm90aWZpY2F0aW9uIG5vdGlmaWNhdGlvbikgeworCQl1cGRhdGVDaGlsZHJlbihub3RpZmljYXRpb24pOworCisJCXN3aXRjaCAobm90aWZpY2F0aW9uLmdldEZlYXR1cmVJRChEeW5hbWljTGFiZWwuY2xhc3MpKSB7CisJCQljYXNlIEdyYXBoUGFja2FnZS5EWU5BTUlDX0xBQkVMX19ORVhUX1ZBTFVFX1ZBTElEOgorCQkJY2FzZSBHcmFwaFBhY2thZ2UuRFlOQU1JQ19MQUJFTF9fTkVYVF9WQUxVRToKKwkJCQlmaXJlTm90aWZ5Q2hhbmdlZChuZXcgVmlld2VyTm90aWZpY2F0aW9uKG5vdGlmaWNhdGlvbiwgbm90aWZpY2F0aW9uLmdldE5vdGlmaWVyKCksIGZhbHNlLCB0cnVlKSk7CisJCQkJcmV0dXJuOworCQl9CisJCXN1cGVyLm5vdGlmeUNoYW5nZWQobm90aWZpY2F0aW9uKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFkZHMge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lZGl0LmNvbW1hbmQuQ29tbWFuZFBhcmFtZXRlcn1zIGRlc2NyaWJpbmcgdGhlIGNoaWxkcmVuCisJICogdGhhdCBjYW4gYmUgY3JlYXRlZCB1bmRlciB0aGlzIG9iamVjdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgdm9pZCBjb2xsZWN0TmV3Q2hpbGREZXNjcmlwdG9ycyhDb2xsZWN0aW9uPE9iamVjdD4gbmV3Q2hpbGREZXNjcmlwdG9ycywgT2JqZWN0IG9iamVjdCkgeworCQlzdXBlci5jb2xsZWN0TmV3Q2hpbGREZXNjcmlwdG9ycyhuZXdDaGlsZERlc2NyaXB0b3JzLCBvYmplY3QpOworCX0KKworfQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC9wcm92aWRlci9EeW5hbWljTm9kZUxhYmVsSXRlbVByb3ZpZGVyLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoL3Byb3ZpZGVyL0R5bmFtaWNOb2RlTGFiZWxJdGVtUHJvdmlkZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ODVjMTZiCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC9wcm92aWRlci9EeW5hbWljTm9kZUxhYmVsSXRlbVByb3ZpZGVyLmphdmEKQEAgLTAsMCArMSwxMzIgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLnByb3ZpZGVyOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAKKyAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4gCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIAorICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wIAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQgCisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbCAKKyAqIAorICogQ29udHJpYnV0b3JzOiAKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAKK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LkFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuVVJJOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkNvbXBvc2VhYmxlQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUVkaXRpbmdEb21haW5JdGVtUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1MYWJlbFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtUHJvcGVydHlEZXNjcmlwdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtUHJvcGVydHlTb3VyY2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVN0cnVjdHVyZWRJdGVtQ29udGVudFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklUcmVlSXRlbUNvbnRlbnRQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguRHluYW1pY05vZGVMYWJlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguR3JhcGhQYWNrYWdlOworCisvKioKKyAqIFRoaXMgaXMgdGhlIGl0ZW0gcHJvdmlkZXIgYWRhcHRlciBmb3IgYSB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkR5bmFtaWNOb2RlTGFiZWx9IG9iamVjdC4KKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIER5bmFtaWNOb2RlTGFiZWxJdGVtUHJvdmlkZXIKKwlleHRlbmRzIER5bmFtaWNMYWJlbEl0ZW1Qcm92aWRlcgorCWltcGxlbWVudHMJCisJCUlFZGl0aW5nRG9tYWluSXRlbVByb3ZpZGVyLAkKKwkJSVN0cnVjdHVyZWRJdGVtQ29udGVudFByb3ZpZGVyLAkKKwkJSVRyZWVJdGVtQ29udGVudFByb3ZpZGVyLAkKKwkJSUl0ZW1MYWJlbFByb3ZpZGVyLAkKKwkJSUl0ZW1Qcm9wZXJ0eVNvdXJjZSB7CisJLyoqCisJICogVGhpcyBjb25zdHJ1Y3RzIGFuIGluc3RhbmNlIGZyb20gYSBmYWN0b3J5IGFuZCBhIG5vdGlmaWVyLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBEeW5hbWljTm9kZUxhYmVsSXRlbVByb3ZpZGVyKEFkYXB0ZXJGYWN0b3J5IGFkYXB0ZXJGYWN0b3J5KSB7CisJCXN1cGVyKGFkYXB0ZXJGYWN0b3J5KTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgdGhlIHByb3BlcnR5IGRlc2NyaXB0b3JzIGZvciB0aGUgYWRhcHRlZCBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgTGlzdDxJSXRlbVByb3BlcnR5RGVzY3JpcHRvcj4gZ2V0UHJvcGVydHlEZXNjcmlwdG9ycyhPYmplY3Qgb2JqZWN0KSB7CisJCWlmIChpdGVtUHJvcGVydHlEZXNjcmlwdG9ycyA9PSBudWxsKSB7CisJCQlzdXBlci5nZXRQcm9wZXJ0eURlc2NyaXB0b3JzKG9iamVjdCk7CisKKwkJCWFkZE5vZGVQcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0KTsKKwkJfQorCQlyZXR1cm4gaXRlbVByb3BlcnR5RGVzY3JpcHRvcnM7CisJfQorCisJLyoqCisJICogVGhpcyBhZGRzIGEgcHJvcGVydHkgZGVzY3JpcHRvciBmb3IgdGhlIE5vZGUgZmVhdHVyZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBhZGROb2RlUHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdCBvYmplY3QpIHsKKwkJaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMuYWRkCisJCQkoY3JlYXRlSXRlbVByb3BlcnR5RGVzY3JpcHRvcgorCQkJCSgoKENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnkpYWRhcHRlckZhY3RvcnkpLmdldFJvb3RBZGFwdGVyRmFjdG9yeSgpLAorCQkJCSBnZXRSZXNvdXJjZUxvY2F0b3IoKSwKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfTm9kZUxhYmVsX25vZGVfZmVhdHVyZSIpLCAvLyROT04tTkxTLTEkCisJCQkJIGdldFN0cmluZygiX1VJX1Byb3BlcnR5RGVzY3JpcHRvcl9kZXNjcmlwdGlvbiIsICJfVUlfTm9kZUxhYmVsX25vZGVfZmVhdHVyZSIsICJfVUlfTm9kZUxhYmVsX3R5cGUiKSwgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkIC8vJE5PTi1OTFMtMyQKKwkJCQkgR3JhcGhQYWNrYWdlLkxpdGVyYWxzLk5PREVfTEFCRUxfX05PREUsCisJCQkJIHRydWUsCisJCQkJIGZhbHNlLAorCQkJCSB0cnVlLAorCQkJCSBudWxsLAorCQkJCSBudWxsLAorCQkJCSBudWxsKSk7CisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIHRoZSBsYWJlbCB0ZXh0IGZvciB0aGUgYWRhcHRlZCBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgU3RyaW5nIGdldFRleHQoT2JqZWN0IG9iamVjdCkgeworCQlVUkkgbGFiZWxWYWx1ZSA9ICgoRHluYW1pY05vZGVMYWJlbClvYmplY3QpLmdldFVSSSgpOworCQlTdHJpbmcgbGFiZWwgPSBsYWJlbFZhbHVlID09IG51bGwgPyBudWxsIDogbGFiZWxWYWx1ZS50b1N0cmluZygpOworCQlyZXR1cm4gbGFiZWwgPT0gbnVsbCB8fCBsYWJlbC5sZW5ndGgoKSA9PSAwID8KKwkJCWdldFN0cmluZygiX1VJX0R5bmFtaWNOb2RlTGFiZWxfdHlwZSIpIDogLy8kTk9OLU5MUy0xJAorCQkJZ2V0U3RyaW5nKCJfVUlfRHluYW1pY05vZGVMYWJlbF90eXBlIikgKyAiICIgKyBsYWJlbDsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCisJfQorCisJLyoqCisJICogVGhpcyBoYW5kbGVzIG1vZGVsIG5vdGlmaWNhdGlvbnMgYnkgY2FsbGluZyB7QGxpbmsgI3VwZGF0ZUNoaWxkcmVufSB0byB1cGRhdGUgYW55IGNhY2hlZAorCSAqIGNoaWxkcmVuIGFuZCBieSBjcmVhdGluZyBhIHZpZXdlciBub3RpZmljYXRpb24sIHdoaWNoIGl0IHBhc3NlcyB0byB7QGxpbmsgI2ZpcmVOb3RpZnlDaGFuZ2VkfS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBub3RpZnlDaGFuZ2VkKE5vdGlmaWNhdGlvbiBub3RpZmljYXRpb24pIHsKKwkJdXBkYXRlQ2hpbGRyZW4obm90aWZpY2F0aW9uKTsKKwkJc3VwZXIubm90aWZ5Q2hhbmdlZChub3RpZmljYXRpb24pOworCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmVkaXQuY29tbWFuZC5Db21tYW5kUGFyYW1ldGVyfXMgZGVzY3JpYmluZyB0aGUgY2hpbGRyZW4KKwkgKiB0aGF0IGNhbiBiZSBjcmVhdGVkIHVuZGVyIHRoaXMgb2JqZWN0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIGNvbGxlY3ROZXdDaGlsZERlc2NyaXB0b3JzKENvbGxlY3Rpb248T2JqZWN0PiBuZXdDaGlsZERlc2NyaXB0b3JzLCBPYmplY3Qgb2JqZWN0KSB7CisJCXN1cGVyLmNvbGxlY3ROZXdDaGlsZERlc2NyaXB0b3JzKG5ld0NoaWxkRGVzY3JpcHRvcnMsIG9iamVjdCk7CisJfQorCit9CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoL3Byb3ZpZGVyL0VkZ2VJdGVtUHJvdmlkZXIuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGgvcHJvdmlkZXIvRWRnZUl0ZW1Qcm92aWRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU3N2M2NjYKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoL3Byb3ZpZGVyL0VkZ2VJdGVtUHJvdmlkZXIuamF2YQpAQCAtMCwwICsxLDMxOCBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGgucHJvdmlkZXI7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIAorICogQ29weXJpZ2h0IChjKSAyMDA2LCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiAKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdCAKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sIAorICogCisgKiBDb250cmlidXRvcnM6IAorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiAKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5BZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlJlc291cmNlTG9jYXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuVVJJOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FU3RydWN0dXJhbEZlYXR1cmU7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5Db21wb3NlZEFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklFZGl0aW5nRG9tYWluSXRlbVByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtTGFiZWxQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbVByb3BlcnR5RGVzY3JpcHRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbVByb3BlcnR5U291cmNlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklTdHJ1Y3R1cmVkSXRlbUNvbnRlbnRQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JVHJlZUl0ZW1Db250ZW50UHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSXRlbVByb3BlcnR5RGVzY3JpcHRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5WaWV3ZXJOb3RpZmljYXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5wcm92aWRlci5Db3JlRWRpdFBsdWdpbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLnByb3ZpZGVyLklkZW50aWZpYWJsZUl0ZW1Qcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguRWRnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguRWRnZUxhYmVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5HcmFwaFBhY2thZ2U7CisKKy8qKgorICogVGhpcyBpcyB0aGUgaXRlbSBwcm92aWRlciBhZGFwdGVyIGZvciBhIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguRWRnZX0gb2JqZWN0LgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgRWRnZUl0ZW1Qcm92aWRlcgorCWV4dGVuZHMgSWRlbnRpZmlhYmxlSXRlbVByb3ZpZGVyCisJaW1wbGVtZW50cwkKKwkJSUVkaXRpbmdEb21haW5JdGVtUHJvdmlkZXIsCQorCQlJU3RydWN0dXJlZEl0ZW1Db250ZW50UHJvdmlkZXIsCQorCQlJVHJlZUl0ZW1Db250ZW50UHJvdmlkZXIsCQorCQlJSXRlbUxhYmVsUHJvdmlkZXIsCQorCQlJSXRlbVByb3BlcnR5U291cmNlIHsKKwkvKioKKwkgKiBUaGlzIGNvbnN0cnVjdHMgYW4gaW5zdGFuY2UgZnJvbSBhIGZhY3RvcnkgYW5kIGEgbm90aWZpZXIuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVkZ2VJdGVtUHJvdmlkZXIoQWRhcHRlckZhY3RvcnkgYWRhcHRlckZhY3RvcnkpIHsKKwkJc3VwZXIoYWRhcHRlckZhY3RvcnkpOworCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyB0aGUgcHJvcGVydHkgZGVzY3JpcHRvcnMgZm9yIHRoZSBhZGFwdGVkIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBMaXN0PElJdGVtUHJvcGVydHlEZXNjcmlwdG9yPiBnZXRQcm9wZXJ0eURlc2NyaXB0b3JzKE9iamVjdCBvYmplY3QpIHsKKwkJaWYgKGl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzID09IG51bGwpIHsKKwkJCXN1cGVyLmdldFByb3BlcnR5RGVzY3JpcHRvcnMob2JqZWN0KTsKKworCQkJYWRkQVByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QpOworCQkJYWRkTm9kZUFVUklQcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0KTsKKwkJCWFkZEJQcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0KTsKKwkJCWFkZE5vZGVCVVJJUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCk7CisJCQlhZGREaXJlY3RlZFByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QpOworCQl9CisJCXJldHVybiBpdGVtUHJvcGVydHlEZXNjcmlwdG9yczsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFkZHMgYSBwcm9wZXJ0eSBkZXNjcmlwdG9yIGZvciB0aGUgQSBmZWF0dXJlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIGFkZEFQcm9wZXJ0eURlc2NyaXB0b3IoT2JqZWN0IG9iamVjdCkgeworCQlpdGVtUHJvcGVydHlEZXNjcmlwdG9ycy5hZGQKKwkJCShjcmVhdGVJdGVtUHJvcGVydHlEZXNjcmlwdG9yCisJCQkJKCgoQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSlhZGFwdGVyRmFjdG9yeSkuZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCksCisJCQkJIGdldFJlc291cmNlTG9jYXRvcigpLAorCQkJCSBnZXRTdHJpbmcoIl9VSV9FZGdlX2FfZmVhdHVyZSIpLCAvLyROT04tTkxTLTEkCisJCQkJIGdldFN0cmluZygiX1VJX1Byb3BlcnR5RGVzY3JpcHRvcl9kZXNjcmlwdGlvbiIsICJfVUlfRWRnZV9hX2ZlYXR1cmUiLCAiX1VJX0VkZ2VfdHlwZSIpLCAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQgLy8kTk9OLU5MUy0zJAorCQkJCSBHcmFwaFBhY2thZ2UuTGl0ZXJhbHMuRURHRV9fQSwKKwkJCQkgdHJ1ZSwKKwkJCQkgZmFsc2UsCisJCQkJIHRydWUsCisJCQkJIG51bGwsCisJCQkJIG51bGwsCisJCQkJIG51bGwpKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFkZHMgYSBwcm9wZXJ0eSBkZXNjcmlwdG9yIGZvciB0aGUgTm9kZSBBVVJJIGZlYXR1cmUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgYWRkTm9kZUFVUklQcm9wZXJ0eURlc2NyaXB0b3IoT2JqZWN0IG9iamVjdCkgeworCQlpdGVtUHJvcGVydHlEZXNjcmlwdG9ycy5hZGQKKwkJCShjcmVhdGVJdGVtUHJvcGVydHlEZXNjcmlwdG9yCisJCQkJKCgoQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSlhZGFwdGVyRmFjdG9yeSkuZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCksCisJCQkJIGdldFJlc291cmNlTG9jYXRvcigpLAorCQkJCSBnZXRTdHJpbmcoIl9VSV9FZGdlX25vZGVBVVJJX2ZlYXR1cmUiKSwgLy8kTk9OLU5MUy0xJAorCQkJCSBnZXRTdHJpbmcoIl9VSV9Qcm9wZXJ0eURlc2NyaXB0b3JfZGVzY3JpcHRpb24iLCAiX1VJX0VkZ2Vfbm9kZUFVUklfZmVhdHVyZSIsICJfVUlfRWRnZV90eXBlIiksIC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJCAvLyROT04tTkxTLTMkCisJCQkJIEdyYXBoUGFja2FnZS5MaXRlcmFscy5FREdFX19OT0RFX0FVUkksCisJCQkJIGZhbHNlLAorCQkJCSBmYWxzZSwKKwkJCQkgZmFsc2UsCisJCQkJIEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IuR0VORVJJQ19WQUxVRV9JTUFHRSwKKwkJCQkgbnVsbCwKKwkJCQkgbnVsbCkpOworCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyBhIHByb3BlcnR5IGRlc2NyaXB0b3IgZm9yIHRoZSBCIGZlYXR1cmUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgYWRkQlByb3BlcnR5RGVzY3JpcHRvcihPYmplY3Qgb2JqZWN0KSB7CisJCWl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzLmFkZAorCQkJKGNyZWF0ZUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IKKwkJCQkoKChDb21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5KWFkYXB0ZXJGYWN0b3J5KS5nZXRSb290QWRhcHRlckZhY3RvcnkoKSwKKwkJCQkgZ2V0UmVzb3VyY2VMb2NhdG9yKCksCisJCQkJIGdldFN0cmluZygiX1VJX0VkZ2VfYl9mZWF0dXJlIiksIC8vJE5PTi1OTFMtMSQKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfUHJvcGVydHlEZXNjcmlwdG9yX2Rlc2NyaXB0aW9uIiwgIl9VSV9FZGdlX2JfZmVhdHVyZSIsICJfVUlfRWRnZV90eXBlIiksIC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJCAvLyROT04tTkxTLTMkCisJCQkJIEdyYXBoUGFja2FnZS5MaXRlcmFscy5FREdFX19CLAorCQkJCSB0cnVlLAorCQkJCSBmYWxzZSwKKwkJCQkgdHJ1ZSwKKwkJCQkgbnVsbCwKKwkJCQkgbnVsbCwKKwkJCQkgbnVsbCkpOworCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyBhIHByb3BlcnR5IGRlc2NyaXB0b3IgZm9yIHRoZSBOb2RlIEJVUkkgZmVhdHVyZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBhZGROb2RlQlVSSVByb3BlcnR5RGVzY3JpcHRvcihPYmplY3Qgb2JqZWN0KSB7CisJCWl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzLmFkZAorCQkJKGNyZWF0ZUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IKKwkJCQkoKChDb21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5KWFkYXB0ZXJGYWN0b3J5KS5nZXRSb290QWRhcHRlckZhY3RvcnkoKSwKKwkJCQkgZ2V0UmVzb3VyY2VMb2NhdG9yKCksCisJCQkJIGdldFN0cmluZygiX1VJX0VkZ2Vfbm9kZUJVUklfZmVhdHVyZSIpLCAvLyROT04tTkxTLTEkCisJCQkJIGdldFN0cmluZygiX1VJX1Byb3BlcnR5RGVzY3JpcHRvcl9kZXNjcmlwdGlvbiIsICJfVUlfRWRnZV9ub2RlQlVSSV9mZWF0dXJlIiwgIl9VSV9FZGdlX3R5cGUiKSwgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkIC8vJE5PTi1OTFMtMyQKKwkJCQkgR3JhcGhQYWNrYWdlLkxpdGVyYWxzLkVER0VfX05PREVfQlVSSSwKKwkJCQkgZmFsc2UsCisJCQkJIGZhbHNlLAorCQkJCSBmYWxzZSwKKwkJCQkgSXRlbVByb3BlcnR5RGVzY3JpcHRvci5HRU5FUklDX1ZBTFVFX0lNQUdFLAorCQkJCSBudWxsLAorCQkJCSBudWxsKSk7CisJfQorCisJLyoqCisJICogVGhpcyBhZGRzIGEgcHJvcGVydHkgZGVzY3JpcHRvciBmb3IgdGhlIERpcmVjdGVkIGZlYXR1cmUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgYWRkRGlyZWN0ZWRQcm9wZXJ0eURlc2NyaXB0b3IoT2JqZWN0IG9iamVjdCkgeworCQlpdGVtUHJvcGVydHlEZXNjcmlwdG9ycy5hZGQKKwkJCShjcmVhdGVJdGVtUHJvcGVydHlEZXNjcmlwdG9yCisJCQkJKCgoQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSlhZGFwdGVyRmFjdG9yeSkuZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCksCisJCQkJIGdldFJlc291cmNlTG9jYXRvcigpLAorCQkJCSBnZXRTdHJpbmcoIl9VSV9FZGdlX2RpcmVjdGVkX2ZlYXR1cmUiKSwgLy8kTk9OLU5MUy0xJAorCQkJCSBnZXRTdHJpbmcoIl9VSV9Qcm9wZXJ0eURlc2NyaXB0b3JfZGVzY3JpcHRpb24iLCAiX1VJX0VkZ2VfZGlyZWN0ZWRfZmVhdHVyZSIsICJfVUlfRWRnZV90eXBlIiksIC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJCAvLyROT04tTkxTLTMkCisJCQkJIEdyYXBoUGFja2FnZS5MaXRlcmFscy5FREdFX19ESVJFQ1RFRCwKKwkJCQkgdHJ1ZSwKKwkJCQkgZmFsc2UsCisJCQkJIGZhbHNlLAorCQkJCSBJdGVtUHJvcGVydHlEZXNjcmlwdG9yLkJPT0xFQU5fVkFMVUVfSU1BR0UsCisJCQkJIG51bGwsCisJCQkJIG51bGwpKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHNwZWNpZmllcyBob3cgdG8gaW1wbGVtZW50IHtAbGluayAjZ2V0Q2hpbGRyZW59IGFuZCBpcyB1c2VkIHRvIGRlZHVjZSBhbiBhcHByb3ByaWF0ZSBmZWF0dXJlIGZvciBhbgorCSAqIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuZWRpdC5jb21tYW5kLkFkZENvbW1hbmR9LCB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmVkaXQuY29tbWFuZC5SZW1vdmVDb21tYW5kfSBvcgorCSAqIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuZWRpdC5jb21tYW5kLk1vdmVDb21tYW5kfSBpbiB7QGxpbmsgI2NyZWF0ZUNvbW1hbmR9LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBDb2xsZWN0aW9uPD8gZXh0ZW5kcyBFU3RydWN0dXJhbEZlYXR1cmU+IGdldENoaWxkcmVuRmVhdHVyZXMoT2JqZWN0IG9iamVjdCkgeworCQlpZiAoY2hpbGRyZW5GZWF0dXJlcyA9PSBudWxsKSB7CisJCQlzdXBlci5nZXRDaGlsZHJlbkZlYXR1cmVzKG9iamVjdCk7CisJCQljaGlsZHJlbkZlYXR1cmVzLmFkZChHcmFwaFBhY2thZ2UuTGl0ZXJhbHMuRURHRV9fTEFCRUwpOworCQl9CisJCXJldHVybiBjaGlsZHJlbkZlYXR1cmVzOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCBFU3RydWN0dXJhbEZlYXR1cmUgZ2V0Q2hpbGRGZWF0dXJlKE9iamVjdCBvYmplY3QsIE9iamVjdCBjaGlsZCkgeworCQkvLyBDaGVjayB0aGUgdHlwZSBvZiB0aGUgc3BlY2lmaWVkIGNoaWxkIG9iamVjdCBhbmQgcmV0dXJuIHRoZSBwcm9wZXIgZmVhdHVyZSB0byB1c2UgZm9yCisJCS8vIGFkZGluZyAoc2VlIHtAbGluayBBZGRDb21tYW5kfSkgaXQgYXMgYSBjaGlsZC4KKworCQlyZXR1cm4gc3VwZXIuZ2V0Q2hpbGRGZWF0dXJlKG9iamVjdCwgY2hpbGQpOworCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyBFZGdlLmdpZi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIE9iamVjdCBnZXRJbWFnZShPYmplY3Qgb2JqZWN0KSB7CisJCXJldHVybiBvdmVybGF5SW1hZ2Uob2JqZWN0LCBnZXRSZXNvdXJjZUxvY2F0b3IoKS5nZXRJbWFnZSgiZnVsbC9jdXN0b21vYmoxNi9FZGdlIikpOworCX0gLy8gZ2V0SW1hZ2UKKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyB0aGUgbGFiZWwgdGV4dCBmb3IgdGhlIGFkYXB0ZWQgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBTdHJpbmcgZ2V0VGV4dChPYmplY3Qgb2JqZWN0KSB7CisJCWZpbmFsIENvbXBvc2VkQWRhcHRlckZhY3RvcnkgaXRlbVByb3ZpZGVyRmFjdG9yeSA9IG5ldyBDb21wb3NlZEFkYXB0ZXJGYWN0b3J5KAorCQkJCUNvbXBvc2VkQWRhcHRlckZhY3RvcnkuRGVzY3JpcHRvci5SZWdpc3RyeS5JTlNUQU5DRSk7CisKKwkJZmluYWwgRWRnZSBlZGdlID0gKEVkZ2Upb2JqZWN0OworCQlmaW5hbCBFZGdlTGFiZWwgbGFiZWwgPSBlZGdlLmdldExhYmVsKCk7CisJCQkJCisJCWlmIChsYWJlbD09bnVsbCkgcmV0dXJuIGdldFRleHRHZW4ob2JqZWN0KTsKKwkJZmluYWwgSUl0ZW1MYWJlbFByb3ZpZGVyIGxhYmVsUHJvdmlkZXIgPShJSXRlbUxhYmVsUHJvdmlkZXIpIGl0ZW1Qcm92aWRlckZhY3RvcnkuYWRhcHQobGFiZWwsSUl0ZW1MYWJlbFByb3ZpZGVyLmNsYXNzKTsKKwkJLy8gRGlkIHdlIGZpbmQgYW4gYWRhcHRlcj8KKwkJaWYgKGxhYmVsUHJvdmlkZXIgIT0gbnVsbCkgeworCQkJLy8gWWVzCisJCQlyZXR1cm4gbGFiZWxQcm92aWRlci5nZXRUZXh0KGxhYmVsKTsKKwkJfSAvLyBpZiAKKwkJcmV0dXJuIGdldFRleHRHZW4ob2JqZWN0KTsKKwl9IC8vIGdldFRleHQKKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyB0aGUgbGFiZWwgdGV4dCBmb3IgdGhlIGFkYXB0ZWQgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisvLwlAT3ZlcnJpZGUKKwlAT3ZlcnJpZGUKKwlwdWJsaWMgU3RyaW5nIGdldFRleHRHZW4oT2JqZWN0IG9iamVjdCkgeworCQlVUkkgbGFiZWxWYWx1ZSA9ICgoRWRnZSlvYmplY3QpLmdldFVSSSgpOworCQlTdHJpbmcgbGFiZWwgPSBsYWJlbFZhbHVlID09IG51bGwgPyBudWxsIDogbGFiZWxWYWx1ZS50b1N0cmluZygpOworCQlyZXR1cm4gbGFiZWwgPT0gbnVsbCB8fCBsYWJlbC5sZW5ndGgoKSA9PSAwID8KKwkJCWdldFN0cmluZygiX1VJX0VkZ2VfdHlwZSIpIDogLy8kTk9OLU5MUy0xJAorCQkJZ2V0U3RyaW5nKCJfVUlfRWRnZV90eXBlIikgKyAiICIgKyBsYWJlbDsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCisJfQorCQorCS8qKgorCSAqIFRoaXMgaGFuZGxlcyBtb2RlbCBub3RpZmljYXRpb25zIGJ5IGNhbGxpbmcge0BsaW5rICN1cGRhdGVDaGlsZHJlbn0gdG8gdXBkYXRlIGFueSBjYWNoZWQKKwkgKiBjaGlsZHJlbiBhbmQgYnkgY3JlYXRpbmcgYSB2aWV3ZXIgbm90aWZpY2F0aW9uLCB3aGljaCBpdCBwYXNzZXMgdG8ge0BsaW5rICNmaXJlTm90aWZ5Q2hhbmdlZH0uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgbm90aWZ5Q2hhbmdlZChOb3RpZmljYXRpb24gbm90aWZpY2F0aW9uKSB7CisJCXVwZGF0ZUNoaWxkcmVuKG5vdGlmaWNhdGlvbik7CisKKwkJc3dpdGNoIChub3RpZmljYXRpb24uZ2V0RmVhdHVyZUlEKEVkZ2UuY2xhc3MpKSB7CisJCQljYXNlIEdyYXBoUGFja2FnZS5FREdFX19ESVJFQ1RFRDoKKwkJCQlmaXJlTm90aWZ5Q2hhbmdlZChuZXcgVmlld2VyTm90aWZpY2F0aW9uKG5vdGlmaWNhdGlvbiwgbm90aWZpY2F0aW9uLmdldE5vdGlmaWVyKCksIGZhbHNlLCB0cnVlKSk7CisJCQkJcmV0dXJuOworCQkJY2FzZSBHcmFwaFBhY2thZ2UuRURHRV9fTEFCRUw6CisJCQkJZmlyZU5vdGlmeUNoYW5nZWQobmV3IFZpZXdlck5vdGlmaWNhdGlvbihub3RpZmljYXRpb24sIG5vdGlmaWNhdGlvbi5nZXROb3RpZmllcigpLCB0cnVlLCBmYWxzZSkpOworCQkJCXJldHVybjsKKwkJfQorCQlzdXBlci5ub3RpZnlDaGFuZ2VkKG5vdGlmaWNhdGlvbik7CisJfQorCisJLyoqCisJICogVGhpcyBhZGRzIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuZWRpdC5jb21tYW5kLkNvbW1hbmRQYXJhbWV0ZXJ9cyBkZXNjcmliaW5nIHRoZSBjaGlsZHJlbgorCSAqIHRoYXQgY2FuIGJlIGNyZWF0ZWQgdW5kZXIgdGhpcyBvYmplY3QuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgY29sbGVjdE5ld0NoaWxkRGVzY3JpcHRvcnMoQ29sbGVjdGlvbjxPYmplY3Q+IG5ld0NoaWxkRGVzY3JpcHRvcnMsIE9iamVjdCBvYmplY3QpIHsKKwkJc3VwZXIuY29sbGVjdE5ld0NoaWxkRGVzY3JpcHRvcnMobmV3Q2hpbGREZXNjcmlwdG9ycywgb2JqZWN0KTsKKwl9CisJCisJLyoqCisJICogUmV0dXJuIHRoZSByZXNvdXJjZSBsb2NhdG9yIGZvciB0aGlzIGl0ZW0gcHJvdmlkZXIncyByZXNvdXJjZXMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIFJlc291cmNlTG9jYXRvciBnZXRSZXNvdXJjZUxvY2F0b3IoKSB7CisJCXJldHVybiBDb3JlRWRpdFBsdWdpbi5JTlNUQU5DRTsKKwl9CisKK30gLy8gRWRnZUl0ZW1Qcm92aWRlcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC9wcm92aWRlci9FZGdlTGFiZWxJdGVtUHJvdmlkZXIuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGgvcHJvdmlkZXIvRWRnZUxhYmVsSXRlbVByb3ZpZGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzU3YzQyYgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGgvcHJvdmlkZXIvRWRnZUxhYmVsSXRlbVByb3ZpZGVyLmphdmEKQEAgLTAsMCArMSwxNjggQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLnByb3ZpZGVyOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOworaW1wb3J0IGphdmEudXRpbC5MaXN0OworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5VUkk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5Db21wb3NlZEFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklFZGl0aW5nRG9tYWluSXRlbVByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtTGFiZWxQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbVByb3BlcnR5RGVzY3JpcHRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbVByb3BlcnR5U291cmNlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklTdHJ1Y3R1cmVkSXRlbUNvbnRlbnRQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JVHJlZUl0ZW1Db250ZW50UHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkVkZ2VMYWJlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguR3JhcGhQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5MYWJlbFZhbHVlOworCisvKioKKyAqIFRoaXMgaXMgdGhlIGl0ZW0gcHJvdmlkZXIgYWRhcHRlciBmb3IgYSB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkVkZ2VMYWJlbH0gb2JqZWN0LgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgRWRnZUxhYmVsSXRlbVByb3ZpZGVyCisJZXh0ZW5kcyBMYWJlbEl0ZW1Qcm92aWRlcgorCWltcGxlbWVudHMJCisJCUlFZGl0aW5nRG9tYWluSXRlbVByb3ZpZGVyLAkKKwkJSVN0cnVjdHVyZWRJdGVtQ29udGVudFByb3ZpZGVyLAkKKwkJSVRyZWVJdGVtQ29udGVudFByb3ZpZGVyLAkKKwkJSUl0ZW1MYWJlbFByb3ZpZGVyLAkKKwkJSUl0ZW1Qcm9wZXJ0eVNvdXJjZSB7CisJLyoqCisJICogVGhpcyBjb25zdHJ1Y3RzIGFuIGluc3RhbmNlIGZyb20gYSBmYWN0b3J5IGFuZCBhIG5vdGlmaWVyLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFZGdlTGFiZWxJdGVtUHJvdmlkZXIoQWRhcHRlckZhY3RvcnkgYWRhcHRlckZhY3RvcnkpIHsKKwkJc3VwZXIoYWRhcHRlckZhY3RvcnkpOworCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyB0aGUgcHJvcGVydHkgZGVzY3JpcHRvcnMgZm9yIHRoZSBhZGFwdGVkIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgTGlzdDxJSXRlbVByb3BlcnR5RGVzY3JpcHRvcj4gZ2V0UHJvcGVydHlEZXNjcmlwdG9ycyhPYmplY3Qgb2JqZWN0KSB7CisJCWlmIChpdGVtUHJvcGVydHlEZXNjcmlwdG9ycyA9PSBudWxsKSB7CisJCQlzdXBlci5nZXRQcm9wZXJ0eURlc2NyaXB0b3JzKG9iamVjdCk7CisKKwkJCWFkZEVkZ2VQcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0KTsKKwkJCUVkZ2VMYWJlbEl0ZW1Qcm92aWRlci5hZGRDdXJyZW50VmFsdWVQcm9wZXJ0aWVzKG9iamVjdCxpdGVtUHJvcGVydHlEZXNjcmlwdG9ycyk7IC8vIFdlIG5lZWQgdG8gYWRkIHRoZSBkZXNjcmlwdG9ycyBmb3IgdGhlIGN1cnJlbnQgdmFsdWUgc28gdGhleSBzaG93IHVwIGluIG5ldyBtb2RpZmllciB3aXphcmRzIGV0Yy4gVGhlIGxhYmVsIChub3QgbGFiZWwgdmFsdWUpIGlzIG1vZGlmaWFibGUgc2luY2UgaXQgaGFzIHRoZSBVUkkgbmVlZGVkIHRvIHJlZmVyZW5jZSBpdAorCQl9CisJCXJldHVybiBpdGVtUHJvcGVydHlEZXNjcmlwdG9yczsKKwl9CisJCisJcHVibGljIHN0YXRpYyB2b2lkIGFkZEN1cnJlbnRWYWx1ZVByb3BlcnRpZXMoT2JqZWN0IG9iamVjdCwKKwkJCWZpbmFsIExpc3Q8SUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I+IGl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzKSB7CisJCWZpbmFsIEVkZ2VMYWJlbCBlbCA9IChFZGdlTGFiZWwpIG9iamVjdDsKKwkJZmluYWwgTGFiZWxWYWx1ZSBsdiA9IChMYWJlbFZhbHVlKSBlbAorCQkJCS5lR2V0KEdyYXBoUGFja2FnZS5MaXRlcmFscy5MQUJFTF9fQ1VSUkVOVF9WQUxVRSk7CisKKwkJZmluYWwgQ29tcG9zZWRBZGFwdGVyRmFjdG9yeSBpdGVtUHJvdmlkZXJGYWN0b3J5ID0gbmV3IENvbXBvc2VkQWRhcHRlckZhY3RvcnkoCisJCQkJQ29tcG9zZWRBZGFwdGVyRmFjdG9yeS5EZXNjcmlwdG9yLlJlZ2lzdHJ5LklOU1RBTkNFKTsKKworCQlmaW5hbCBJSXRlbVByb3BlcnR5U291cmNlIHByb3BlcnR5U291cmNlID0gKElJdGVtUHJvcGVydHlTb3VyY2UpIGl0ZW1Qcm92aWRlckZhY3RvcnkKKwkJCQkuYWRhcHQobHYsIElJdGVtUHJvcGVydHlTb3VyY2UuY2xhc3MpOworCQlpZiAocHJvcGVydHlTb3VyY2UgIT0gbnVsbCkgeworCQkJZmluYWwgTGlzdDxJSXRlbVByb3BlcnR5RGVzY3JpcHRvcj4gcHJvcGVydGllcyA9IHByb3BlcnR5U291cmNlCisJCQkJCS5nZXRQcm9wZXJ0eURlc2NyaXB0b3JzKGx2KTsKKwkJCWl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzLmFkZEFsbChwcm9wZXJ0aWVzKTsKKwkJfQorCX0gLy8gYWRkQ3VycmVudFZhbHVlUHJvcGVydGllcworCS8qKgorCSAqIFRoaXMgcmV0dXJucyB0aGUgcHJvcGVydHkgZGVzY3JpcHRvcnMgZm9yIHRoZSBhZGFwdGVkIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBMaXN0PElJdGVtUHJvcGVydHlEZXNjcmlwdG9yPiBnZXRQcm9wZXJ0eURlc2NyaXB0b3JzR2VuKE9iamVjdCBvYmplY3QpIHsKKwkJaWYgKGl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzID09IG51bGwpIHsKKwkJCXN1cGVyLmdldFByb3BlcnR5RGVzY3JpcHRvcnMob2JqZWN0KTsKKworCQkJYWRkRWRnZVByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QpOworCQl9CisJCXJldHVybiBpdGVtUHJvcGVydHlEZXNjcmlwdG9yczsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFkZHMgYSBwcm9wZXJ0eSBkZXNjcmlwdG9yIGZvciB0aGUgRWRnZSBmZWF0dXJlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIGFkZEVkZ2VQcm9wZXJ0eURlc2NyaXB0b3IoT2JqZWN0IG9iamVjdCkgeworCQlpdGVtUHJvcGVydHlEZXNjcmlwdG9ycy5hZGQKKwkJCShjcmVhdGVJdGVtUHJvcGVydHlEZXNjcmlwdG9yCisJCQkJKCgoQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSlhZGFwdGVyRmFjdG9yeSkuZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCksCisJCQkJIGdldFJlc291cmNlTG9jYXRvcigpLAorCQkJCSBnZXRTdHJpbmcoIl9VSV9FZGdlTGFiZWxfZWRnZV9mZWF0dXJlIiksIC8vJE5PTi1OTFMtMSQKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfUHJvcGVydHlEZXNjcmlwdG9yX2Rlc2NyaXB0aW9uIiwgIl9VSV9FZGdlTGFiZWxfZWRnZV9mZWF0dXJlIiwgIl9VSV9FZGdlTGFiZWxfdHlwZSIpLCAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQgLy8kTk9OLU5MUy0zJAorCQkJCSBHcmFwaFBhY2thZ2UuTGl0ZXJhbHMuRURHRV9MQUJFTF9fRURHRSwKKwkJCQkgdHJ1ZSwKKwkJCQkgZmFsc2UsCisJCQkJIHRydWUsCisJCQkJIG51bGwsCisJCQkJIG51bGwsCisJCQkJIG51bGwpKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgdGhlIGxhYmVsIHRleHQgZm9yIHRoZSBhZGFwdGVkIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBTdHJpbmcgZ2V0VGV4dChPYmplY3Qgb2JqZWN0KSB7CisJCVVSSSBsYWJlbFZhbHVlID0gKChFZGdlTGFiZWwpb2JqZWN0KS5nZXRVUkkoKTsKKwkJU3RyaW5nIGxhYmVsID0gbGFiZWxWYWx1ZSA9PSBudWxsID8gbnVsbCA6IGxhYmVsVmFsdWUudG9TdHJpbmcoKTsKKwkJcmV0dXJuIGxhYmVsID09IG51bGwgfHwgbGFiZWwubGVuZ3RoKCkgPT0gMCA/CisJCQlnZXRTdHJpbmcoIl9VSV9FZGdlTGFiZWxfdHlwZSIpIDogLy8kTk9OLU5MUy0xJAorCQkJZ2V0U3RyaW5nKCJfVUlfRWRnZUxhYmVsX3R5cGUiKSArICIgIiArIGxhYmVsOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKKwl9CisKKwkvKioKKwkgKiBUaGlzIGhhbmRsZXMgbW9kZWwgbm90aWZpY2F0aW9ucyBieSBjYWxsaW5nIHtAbGluayAjdXBkYXRlQ2hpbGRyZW59IHRvIHVwZGF0ZSBhbnkgY2FjaGVkCisJICogY2hpbGRyZW4gYW5kIGJ5IGNyZWF0aW5nIGEgdmlld2VyIG5vdGlmaWNhdGlvbiwgd2hpY2ggaXQgcGFzc2VzIHRvIHtAbGluayAjZmlyZU5vdGlmeUNoYW5nZWR9LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIG5vdGlmeUNoYW5nZWQoTm90aWZpY2F0aW9uIG5vdGlmaWNhdGlvbikgeworCQl1cGRhdGVDaGlsZHJlbihub3RpZmljYXRpb24pOworCQlzdXBlci5ub3RpZnlDaGFuZ2VkKG5vdGlmaWNhdGlvbik7CisJfQorCisJLyoqCisJICogVGhpcyBhZGRzIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuZWRpdC5jb21tYW5kLkNvbW1hbmRQYXJhbWV0ZXJ9cyBkZXNjcmliaW5nIHRoZSBjaGlsZHJlbgorCSAqIHRoYXQgY2FuIGJlIGNyZWF0ZWQgdW5kZXIgdGhpcyBvYmplY3QuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgY29sbGVjdE5ld0NoaWxkRGVzY3JpcHRvcnMoQ29sbGVjdGlvbjxPYmplY3Q+IG5ld0NoaWxkRGVzY3JpcHRvcnMsIE9iamVjdCBvYmplY3QpIHsKKwkJc3VwZXIuY29sbGVjdE5ld0NoaWxkRGVzY3JpcHRvcnMobmV3Q2hpbGREZXNjcmlwdG9ycywgb2JqZWN0KTsKKwl9CisKK30KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGgvcHJvdmlkZXIvRXhjaGFuZ2VJdGVtUHJvdmlkZXIuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGgvcHJvdmlkZXIvRXhjaGFuZ2VJdGVtUHJvdmlkZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kOWIzYzA5Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC9wcm92aWRlci9FeGNoYW5nZUl0ZW1Qcm92aWRlci5qYXZhCkBAIC0wLDAgKzEsMjA4IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5wcm92aWRlcjsNCisNCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiANCisgKiBDb3B5cmlnaHQgKGMpIDIwMTEgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuIA0KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgDQorICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wIA0KKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0IA0KKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sIA0KKyAqIA0KKyAqIENvbnRyaWJ1dG9yczogDQorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiANCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCisNCitpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247DQoraW1wb3J0IGphdmEudXRpbC5MaXN0Ow0KKw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5BZGFwdGVyRmFjdG9yeTsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuUmVzb3VyY2VMb2NhdG9yOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5Db21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5Ow0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JRWRpdGluZ0RvbWFpbkl0ZW1Qcm92aWRlcjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1MYWJlbFByb3ZpZGVyOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbVByb3BlcnR5RGVzY3JpcHRvcjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1Qcm9wZXJ0eVNvdXJjZTsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVN0cnVjdHVyZWRJdGVtQ29udGVudFByb3ZpZGVyOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JVHJlZUl0ZW1Db250ZW50UHJvdmlkZXI7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkl0ZW1Qcm92aWRlckFkYXB0ZXI7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLlZpZXdlck5vdGlmaWNhdGlvbjsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5wcm92aWRlci5Db3JlRWRpdFBsdWdpbjsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkV4Y2hhbmdlOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguR3JhcGhQYWNrYWdlOw0KKw0KKy8qKg0KKyAqIFRoaXMgaXMgdGhlIGl0ZW0gcHJvdmlkZXIgYWRhcHRlciBmb3IgYSB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkV4Y2hhbmdlfSBvYmplY3QuDQorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisgKiBAZ2VuZXJhdGVkDQorICovDQorcHVibGljIGNsYXNzIEV4Y2hhbmdlSXRlbVByb3ZpZGVyDQorCWV4dGVuZHMgSXRlbVByb3ZpZGVyQWRhcHRlcg0KKwlpbXBsZW1lbnRzDQorCQlJRWRpdGluZ0RvbWFpbkl0ZW1Qcm92aWRlciwNCisJCUlTdHJ1Y3R1cmVkSXRlbUNvbnRlbnRQcm92aWRlciwNCisJCUlUcmVlSXRlbUNvbnRlbnRQcm92aWRlciwNCisJCUlJdGVtTGFiZWxQcm92aWRlciwNCisJCUlJdGVtUHJvcGVydHlTb3VyY2Ugew0KKwkvKioNCisJICogVGhpcyBjb25zdHJ1Y3RzIGFuIGluc3RhbmNlIGZyb20gYSBmYWN0b3J5IGFuZCBhIG5vdGlmaWVyLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIEV4Y2hhbmdlSXRlbVByb3ZpZGVyKEFkYXB0ZXJGYWN0b3J5IGFkYXB0ZXJGYWN0b3J5KSB7DQorCQlzdXBlcihhZGFwdGVyRmFjdG9yeSk7DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgcmV0dXJucyB0aGUgcHJvcGVydHkgZGVzY3JpcHRvcnMgZm9yIHRoZSBhZGFwdGVkIGNsYXNzLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJQE92ZXJyaWRlDQorCXB1YmxpYyBMaXN0PElJdGVtUHJvcGVydHlEZXNjcmlwdG9yPiBnZXRQcm9wZXJ0eURlc2NyaXB0b3JzKE9iamVjdCBvYmplY3QpIHsNCisJCWlmIChpdGVtUHJvcGVydHlEZXNjcmlwdG9ycyA9PSBudWxsKSB7DQorCQkJc3VwZXIuZ2V0UHJvcGVydHlEZXNjcmlwdG9ycyhvYmplY3QpOw0KKw0KKwkJCWFkZE90aGVyTGFiZWxQcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0KTsNCisJCQlhZGRDb3VudFByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QpOw0KKwkJCWFkZFR5cGVQcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0KTsNCisJCX0NCisJCXJldHVybiBpdGVtUHJvcGVydHlEZXNjcmlwdG9yczsNCisJfQ0KKw0KKwkvKioNCisJICogVGhpcyBhZGRzIGEgcHJvcGVydHkgZGVzY3JpcHRvciBmb3IgdGhlIE90aGVyIExhYmVsIGZlYXR1cmUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgdm9pZCBhZGRPdGhlckxhYmVsUHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdCBvYmplY3QpIHsNCisJCWl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzLmFkZA0KKwkJCShjcmVhdGVJdGVtUHJvcGVydHlEZXNjcmlwdG9yDQorCQkJCSgoKENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnkpYWRhcHRlckZhY3RvcnkpLmdldFJvb3RBZGFwdGVyRmFjdG9yeSgpLA0KKwkJCQkgZ2V0UmVzb3VyY2VMb2NhdG9yKCksDQorCQkJCSBnZXRTdHJpbmcoIl9VSV9FeGNoYW5nZV9vdGhlckxhYmVsX2ZlYXR1cmUiKSwgLy8kTk9OLU5MUy0xJA0KKwkJCQkgZ2V0U3RyaW5nKCJfVUlfUHJvcGVydHlEZXNjcmlwdG9yX2Rlc2NyaXB0aW9uIiwgIl9VSV9FeGNoYW5nZV9vdGhlckxhYmVsX2ZlYXR1cmUiLCAiX1VJX0V4Y2hhbmdlX3R5cGUiKSwgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkIC8vJE5PTi1OTFMtMyQNCisJCQkJIEdyYXBoUGFja2FnZS5MaXRlcmFscy5FWENIQU5HRV9fT1RIRVJfTEFCRUwsDQorCQkJCSB0cnVlLA0KKwkJCQkgZmFsc2UsDQorCQkJCSB0cnVlLA0KKwkJCQkgbnVsbCwNCisJCQkJIG51bGwsDQorCQkJCSBudWxsKSk7DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgYWRkcyBhIHByb3BlcnR5IGRlc2NyaXB0b3IgZm9yIHRoZSBDb3VudCBmZWF0dXJlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIHZvaWQgYWRkQ291bnRQcm9wZXJ0eURlc2NyaXB0b3IoT2JqZWN0IG9iamVjdCkgew0KKwkJaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMuYWRkDQorCQkJKGNyZWF0ZUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3INCisJCQkJKCgoQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSlhZGFwdGVyRmFjdG9yeSkuZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCksDQorCQkJCSBnZXRSZXNvdXJjZUxvY2F0b3IoKSwNCisJCQkJIGdldFN0cmluZygiX1VJX0V4Y2hhbmdlX2NvdW50X2ZlYXR1cmUiKSwgLy8kTk9OLU5MUy0xJA0KKwkJCQkgZ2V0U3RyaW5nKCJfVUlfUHJvcGVydHlEZXNjcmlwdG9yX2Rlc2NyaXB0aW9uIiwgIl9VSV9FeGNoYW5nZV9jb3VudF9mZWF0dXJlIiwgIl9VSV9FeGNoYW5nZV90eXBlIiksIC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJCAvLyROT04tTkxTLTMkDQorCQkJCSBHcmFwaFBhY2thZ2UuTGl0ZXJhbHMuRVhDSEFOR0VfX0NPVU5ULA0KKwkJCQkgdHJ1ZSwNCisJCQkJIGZhbHNlLA0KKwkJCQkgZmFsc2UsDQorCQkJCSBJdGVtUHJvcGVydHlEZXNjcmlwdG9yLlJFQUxfVkFMVUVfSU1BR0UsDQorCQkJCSBudWxsLA0KKwkJCQkgbnVsbCkpOw0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIGFkZHMgYSBwcm9wZXJ0eSBkZXNjcmlwdG9yIGZvciB0aGUgVHlwZSBmZWF0dXJlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIHZvaWQgYWRkVHlwZVByb3BlcnR5RGVzY3JpcHRvcihPYmplY3Qgb2JqZWN0KSB7DQorCQlpdGVtUHJvcGVydHlEZXNjcmlwdG9ycy5hZGQNCisJCQkoY3JlYXRlSXRlbVByb3BlcnR5RGVzY3JpcHRvcg0KKwkJCQkoKChDb21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5KWFkYXB0ZXJGYWN0b3J5KS5nZXRSb290QWRhcHRlckZhY3RvcnkoKSwNCisJCQkJIGdldFJlc291cmNlTG9jYXRvcigpLA0KKwkJCQkgZ2V0U3RyaW5nKCJfVUlfRXhjaGFuZ2VfdHlwZV9mZWF0dXJlIiksIC8vJE5PTi1OTFMtMSQNCisJCQkJIGdldFN0cmluZygiX1VJX1Byb3BlcnR5RGVzY3JpcHRvcl9kZXNjcmlwdGlvbiIsICJfVUlfRXhjaGFuZ2VfdHlwZV9mZWF0dXJlIiwgIl9VSV9FeGNoYW5nZV90eXBlIiksIC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJCAvLyROT04tTkxTLTMkDQorCQkJCSBHcmFwaFBhY2thZ2UuTGl0ZXJhbHMuRVhDSEFOR0VfX1RZUEUsDQorCQkJCSB0cnVlLA0KKwkJCQkgZmFsc2UsDQorCQkJCSBmYWxzZSwNCisJCQkJIEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IuR0VORVJJQ19WQUxVRV9JTUFHRSwNCisJCQkJIG51bGwsDQorCQkJCSBudWxsKSk7DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgcmV0dXJucyBFeGNoYW5nZS5naWYuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlAT3ZlcnJpZGUNCisJcHVibGljIE9iamVjdCBnZXRJbWFnZShPYmplY3Qgb2JqZWN0KSB7DQorCQlyZXR1cm4gb3ZlcmxheUltYWdlKG9iamVjdCwgZ2V0UmVzb3VyY2VMb2NhdG9yKCkuZ2V0SW1hZ2UoImZ1bGwvb2JqMTYvRXhjaGFuZ2UiKSk7IC8vJE5PTi1OTFMtMSQNCisJfQ0KKw0KKwkvKioNCisJICogVGhpcyByZXR1cm5zIHRoZSBsYWJlbCB0ZXh0IGZvciB0aGUgYWRhcHRlZCBjbGFzcy4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCUBPdmVycmlkZQ0KKwlwdWJsaWMgU3RyaW5nIGdldFRleHQoT2JqZWN0IG9iamVjdCkgew0KKwkJRXhjaGFuZ2UgZXhjaGFuZ2UgPSAoRXhjaGFuZ2Upb2JqZWN0Ow0KKwkJcmV0dXJuIGdldFN0cmluZygiX1VJX0V4Y2hhbmdlX3R5cGUiKSArICIgIiArIGV4Y2hhbmdlLmdldENvdW50KCk7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJA0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIGhhbmRsZXMgbW9kZWwgbm90aWZpY2F0aW9ucyBieSBjYWxsaW5nIHtAbGluayAjdXBkYXRlQ2hpbGRyZW59IHRvIHVwZGF0ZSBhbnkgY2FjaGVkDQorCSAqIGNoaWxkcmVuIGFuZCBieSBjcmVhdGluZyBhIHZpZXdlciBub3RpZmljYXRpb24sIHdoaWNoIGl0IHBhc3NlcyB0byB7QGxpbmsgI2ZpcmVOb3RpZnlDaGFuZ2VkfS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCUBPdmVycmlkZQ0KKwlwdWJsaWMgdm9pZCBub3RpZnlDaGFuZ2VkKE5vdGlmaWNhdGlvbiBub3RpZmljYXRpb24pIHsNCisJCXVwZGF0ZUNoaWxkcmVuKG5vdGlmaWNhdGlvbik7DQorDQorCQlzd2l0Y2ggKG5vdGlmaWNhdGlvbi5nZXRGZWF0dXJlSUQoRXhjaGFuZ2UuY2xhc3MpKSB7DQorCQkJY2FzZSBHcmFwaFBhY2thZ2UuRVhDSEFOR0VfX0NPVU5UOg0KKwkJCWNhc2UgR3JhcGhQYWNrYWdlLkVYQ0hBTkdFX19UWVBFOg0KKwkJCQlmaXJlTm90aWZ5Q2hhbmdlZChuZXcgVmlld2VyTm90aWZpY2F0aW9uKG5vdGlmaWNhdGlvbiwgbm90aWZpY2F0aW9uLmdldE5vdGlmaWVyKCksIGZhbHNlLCB0cnVlKSk7DQorCQkJCXJldHVybjsNCisJCX0NCisJCXN1cGVyLm5vdGlmeUNoYW5nZWQobm90aWZpY2F0aW9uKTsNCisJfQ0KKw0KKwkvKioNCisJICogVGhpcyBhZGRzIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuZWRpdC5jb21tYW5kLkNvbW1hbmRQYXJhbWV0ZXJ9cyBkZXNjcmliaW5nIHRoZSBjaGlsZHJlbg0KKwkgKiB0aGF0IGNhbiBiZSBjcmVhdGVkIHVuZGVyIHRoaXMgb2JqZWN0Lg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJQE92ZXJyaWRlDQorCXByb3RlY3RlZCB2b2lkIGNvbGxlY3ROZXdDaGlsZERlc2NyaXB0b3JzKENvbGxlY3Rpb248T2JqZWN0PiBuZXdDaGlsZERlc2NyaXB0b3JzLCBPYmplY3Qgb2JqZWN0KSB7DQorCQlzdXBlci5jb2xsZWN0TmV3Q2hpbGREZXNjcmlwdG9ycyhuZXdDaGlsZERlc2NyaXB0b3JzLCBvYmplY3QpOw0KKwl9DQorDQorCS8qKg0KKwkgKiBSZXR1cm4gdGhlIHJlc291cmNlIGxvY2F0b3IgZm9yIHRoaXMgaXRlbSBwcm92aWRlcidzIHJlc291cmNlcy4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCUBPdmVycmlkZQ0KKwlwdWJsaWMgUmVzb3VyY2VMb2NhdG9yIGdldFJlc291cmNlTG9jYXRvcigpIHsNCisJCXJldHVybiBDb3JlRWRpdFBsdWdpbi5JTlNUQU5DRTsNCisJfQ0KKw0KK30NCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoL3Byb3ZpZGVyL0dyYXBoRWRpdFBsdWdpbi5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC9wcm92aWRlci9HcmFwaEVkaXRQbHVnaW4uamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NDQ1YzBlCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC9wcm92aWRlci9HcmFwaEVkaXRQbHVnaW4uamF2YQpAQCAtMCwwICsxLDk5IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5wcm92aWRlcjsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuIAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyAKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0IAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwgCisgKiAKKyAqIENvbnRyaWJ1dG9yczogCisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5FTUZQbHVnaW47CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51aS5FY2xpcHNlVUlQbHVnaW47CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlJlc291cmNlTG9jYXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLnByb3ZpZGVyLkNvbW1vbkVkaXRQbHVnaW47CisKKy8qKgorICogVGhpcyBpcyB0aGUgY2VudHJhbCBzaW5nbGV0b24gZm9yIHRoZSBHcmFwaCBlZGl0b3IgcGx1Z2luLgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgZmluYWwgY2xhc3MgR3JhcGhFZGl0UGx1Z2luIGV4dGVuZHMgRU1GUGx1Z2luIHsKKwkvKioKKwkgKiBLZWVwIHRyYWNrIG9mIHRoZSBzaW5nbGV0b24uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBHcmFwaEVkaXRQbHVnaW4gSU5TVEFOQ0UgPSBuZXcgR3JhcGhFZGl0UGx1Z2luKCk7CisKKwkvKioKKwkgKiBLZWVwIHRyYWNrIG9mIHRoZSBzaW5nbGV0b24uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJpdmF0ZSBzdGF0aWMgSW1wbGVtZW50YXRpb24gcGx1Z2luOworCisJLyoqCisJICogQ3JlYXRlIHRoZSBpbnN0YW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgR3JhcGhFZGl0UGx1Z2luKCkgeworCQlzdXBlcgorCQkgIChuZXcgUmVzb3VyY2VMb2NhdG9yIFtdIHsKKwkJICAgICBDb21tb25FZGl0UGx1Z2luLklOU1RBTkNFLAorCQkgICB9KTsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBzaW5nbGV0b24gaW5zdGFuY2Ugb2YgdGhlIEVjbGlwc2UgcGx1Z2luLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgc2luZ2xldG9uIGluc3RhbmNlLgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgUmVzb3VyY2VMb2NhdG9yIGdldFBsdWdpblJlc291cmNlTG9jYXRvcigpIHsKKwkJcmV0dXJuIHBsdWdpbjsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBzaW5nbGV0b24gaW5zdGFuY2Ugb2YgdGhlIEVjbGlwc2UgcGx1Z2luLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgc2luZ2xldG9uIGluc3RhbmNlLgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgc3RhdGljIEltcGxlbWVudGF0aW9uIGdldFBsdWdpbigpIHsKKwkJcmV0dXJuIHBsdWdpbjsKKwl9CisKKwkvKioKKwkgKiBUaGUgYWN0dWFsIGltcGxlbWVudGF0aW9uIG9mIHRoZSBFY2xpcHNlIDxiPlBsdWdpbjwvYj4uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHN0YXRpYyBjbGFzcyBJbXBsZW1lbnRhdGlvbiBleHRlbmRzIEVjbGlwc2VVSVBsdWdpbiB7CisJCS8qKgorCQkgKiBDcmVhdGVzIGFuIGluc3RhbmNlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJcHVibGljIEltcGxlbWVudGF0aW9uKCkgeworCQkJc3VwZXIoKTsKKworCQkJLy8gUmVtZW1iZXIgdGhlIHN0YXRpYyBpbnN0YW5jZS4KKwkJCS8vCisJCQlwbHVnaW4gPSB0aGlzOworCQl9CisJfQorCit9CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoL3Byb3ZpZGVyL0dyYXBoSXRlbVByb3ZpZGVyLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoL3Byb3ZpZGVyL0dyYXBoSXRlbVByb3ZpZGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTI1YmQ0OAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGgvcHJvdmlkZXIvR3JhcGhJdGVtUHJvdmlkZXIuamF2YQpAQCAtMCwwICsxLDEwNDcgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLnByb3ZpZGVyOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAKKyAqIENvcHlyaWdodCAoYykgMjAwNiwgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4gCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIAorICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wIAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQgCisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbCAKKyAqIAorICogQ29udHJpYnV0b3JzOiAKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7CitpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247CitpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb25zOworaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24uY29tbWFuZC5Db21tYW5kOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24uY29tbWFuZC5Db21tYW5kV3JhcHBlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLmNvbW1hbmQuVW5leGVjdXRhYmxlQ29tbWFuZDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5BZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uV3JhcHBlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuRU1hcDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuUmVzb3VyY2VMb2NhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5VUkk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3Q7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVSZWZlcmVuY2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVTdHJ1Y3R1cmFsRmVhdHVyZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5jb21tYW5kLkFkZENvbW1hbmQ7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQuY29tbWFuZC5DcmVhdGVDaGlsZENvbW1hbmQ7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQuY29tbWFuZC5TZXRDb21tYW5kOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LmRvbWFpbi5FZGl0aW5nRG9tYWluOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkNvbXBvc2VhYmxlQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSURpc3Bvc2FibGU7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUVkaXRpbmdEb21haW5JdGVtUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1MYWJlbFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtUHJvcGVydHlEZXNjcmlwdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtUHJvcGVydHlTb3VyY2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVN0cnVjdHVyZWRJdGVtQ29udGVudFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklUcmVlSXRlbUNvbnRlbnRQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JdGVtUHJvdmlkZXJBZGFwdGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLlZpZXdlck5vdGlmaWNhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLklkZW50aWZpYWJsZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLnByb3ZpZGVyLkNvcmVFZGl0UGx1Z2luOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24ucHJvdmlkZXIuSWRlbnRpZmlhYmxlSXRlbVByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5FZGdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5HcmFwaDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguR3JhcGhGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5HcmFwaFBhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkxhYmVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5Ob2RlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5Ob2RlTGFiZWw7CisKKy8vaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5Nb2RlbDsKKy8vaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5Nb2RlbEZhY3Rvcnk7CisKKy8qKgorICogVGhpcyBpcyB0aGUgaXRlbSBwcm92aWRlciBhZGFwdGVyIGZvciBhIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguR3JhcGh9IG9iamVjdC4KKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0KKyAqIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIEdyYXBoSXRlbVByb3ZpZGVyIGV4dGVuZHMgSWRlbnRpZmlhYmxlSXRlbVByb3ZpZGVyIGltcGxlbWVudHMKKwkJSUVkaXRpbmdEb21haW5JdGVtUHJvdmlkZXIsIElTdHJ1Y3R1cmVkSXRlbUNvbnRlbnRQcm92aWRlciwKKwkJSVRyZWVJdGVtQ29udGVudFByb3ZpZGVyLCBJSXRlbUxhYmVsUHJvdmlkZXIsIElJdGVtUHJvcGVydHlTb3VyY2UgeworCisJLyoqCisJICogVGhpcyBpcyBhIGNvbGxlY3Rpb24gb2YgdGhlIHtAbGluayBUcmFuc2llbnRHcmFwaEl0ZW1Qcm92aWRlcn0ncyB0aGF0CisJICogYXJlIHBsYXlpbmcgdGhlIHJvbGUgb2YgY2hpbGRyZW4gdG8gdGhlIGdyYXBoIHdoaWxlIGluIGZhY3QgdGhleSBhcmUKKwkgKiAiTm9uLU1vZGVsZWQgSW50ZXJtZWRpYXJ5IFZpZXcgT2JqZWN0cyIuIFRoZXkgcHJvdmlkZSB0aGUgY29ycmVjdCBtZXRob2QKKwkgKiBpbXBsZW1lbnRhdGlvbnMgdG8gcGxheSB0aGUgcm9sZSBvZiBhbiBJdGVtUHJvdmlkZXIuIFNlZSBwYWdlcyAzNjktMzc4IG9mCisJICogdGhlIEVNRiBib29rICgxc3QgRWRpdGlvbikuCisJICovCisJcHJpdmF0ZSBMaXN0PEdyYXBoSXRlbVByb3ZpZGVyLlRyYW5zaWVudEdyYXBoSXRlbVByb3ZpZGVyPiBjaGlsZHJlbjsKKworCS8qKgorCSAqIFRoaXMgY29uc3RydWN0cyBhbiBpbnN0YW5jZSBmcm9tIGEgZmFjdG9yeSBhbmQgYSBub3RpZmllci4gPCEtLQorCSAqIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEdyYXBoSXRlbVByb3ZpZGVyKEFkYXB0ZXJGYWN0b3J5IGFkYXB0ZXJGYWN0b3J5KSB7CisJCXN1cGVyKGFkYXB0ZXJGYWN0b3J5KTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgdGhlIHByb3BlcnR5IGRlc2NyaXB0b3JzIGZvciB0aGUgYWRhcHRlZCBjbGFzcy4gPCEtLQorCSAqIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAZ2VuZXJhdGVkIAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBMaXN0PElJdGVtUHJvcGVydHlEZXNjcmlwdG9yPiBnZXRQcm9wZXJ0eURlc2NyaXB0b3JzKE9iamVjdCBvYmplY3QpIHsKKwkJaWYgKGl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzID09IG51bGwpIHsKKwkJCXN1cGVyLmdldFByb3BlcnR5RGVzY3JpcHRvcnMob2JqZWN0KTsKKworCQkJYWRkVGltZVByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QpOworCQl9CisJCXJldHVybiBpdGVtUHJvcGVydHlEZXNjcmlwdG9yczsKKwl9CisJCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvbW1vbi5wcm92aWRlci5JZGVudGlmaWFibGVJdGVtUHJvdmlkZXIjZ2V0UGFyZW50KGphdmEubGFuZy5PYmplY3QpCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIE9iamVjdCBnZXRQYXJlbnQoT2JqZWN0IG9iamVjdCkgeworCQlyZXR1cm4gc3VwZXIuZ2V0UGFyZW50KG9iamVjdCk7CisJfSAvLyBnZXRQYXJlbnQKKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSXRlbVByb3ZpZGVyQWRhcHRlciNnZXRDaGlsZHJlbihqYXZhLmxhbmcuT2JqZWN0KQorCSAqLworCUBTdXBwcmVzc1dhcm5pbmdzKCJ1bmNoZWNrZWQiKQorCUBPdmVycmlkZQorCXB1YmxpYyBDb2xsZWN0aW9uPD8+IGdldENoaWxkcmVuKE9iamVjdCBvYmplY3QpIHsKKwkJZmluYWwgR3JhcGggZ3JhcGggPSAoR3JhcGgpIG9iamVjdDsKKwkJY2hpbGRyZW4gPSBuZXcgQXJyYXlMaXN0PFRyYW5zaWVudEdyYXBoSXRlbVByb3ZpZGVyPigpOworCQkvLyBUaGlzIGlzIHdoZXJlIHdlIGFkZCB0aGUgImZha2UiIGNoaWxkcmVuIG9mIGEgR3JhcGguIElmIHlvdSBpbXBsZW1lbnQKKwkJLy8gbW9yZSB0aGVuIGFkZCB0aGVtIGhlcmUuCisKKwkJLy8gQW55IEVkZ2VzIGluIHRoZSBHcmFwaD8KKwkJaWYgKGdyYXBoLmdldE51bUVkZ2VzKCkgPiAwKSB7CisJCQkvLyBZZXMKKwkJCWNoaWxkcmVuLmFkZChuZXcgR3JhcGhJdGVtUHJvdmlkZXIuRWRnZXNJdGVtUHJvdmlkZXIoCisJCQkJCWFkYXB0ZXJGYWN0b3J5LCBncmFwaCkpOworCQl9IC8vIGlmIEVkZ2VzCisKKwkJLy8gQW55IE5vZGVzIGluIHRoZSBHcmFwaD8KKwkJaWYgKGdyYXBoLmdldE51bU5vZGVzKCkgPiAwKSB7CisJCQkvLyBZZXMKKwkJCWNoaWxkcmVuLmFkZChuZXcgR3JhcGhJdGVtUHJvdmlkZXIuTm9kZXNJdGVtUHJvdmlkZXIoYWRhcHRlckZhY3RvcnksCisJCQkJCWdyYXBoKSk7CisJCX0gLy8gaWYgTm9kZXMKKwkJCisJCS8vIEFueSBOb2RlTGFiZWxzIGluIHRoZSBHcmFwaD8KKwkJaWYgKGdyYXBoLmdldE51bU5vZGVMYWJlbHMoKSA+IDApIHsKKwkJCS8vIFllcworCQkJY2hpbGRyZW4uYWRkKG5ldyBHcmFwaEl0ZW1Qcm92aWRlci5Ob2RlTGFiZWxzSXRlbVByb3ZpZGVyKGFkYXB0ZXJGYWN0b3J5LAorCQkJCQlncmFwaCkpOworCQl9IC8vIGlmIE5vZGVMYWJlbHMKKwkJCisJCS8vIEFueSBHcmFwaExhYmVscyBpbiB0aGUgR3JhcGg/CisJCWlmIChncmFwaC5nZXROdW1HcmFwaExhYmVscygpID4gMCkgeworCQkJLy8gWWVzCisJCQljaGlsZHJlbi5hZGQobmV3IEdyYXBoSXRlbVByb3ZpZGVyLkdyYXBoTGFiZWxzSXRlbVByb3ZpZGVyKGFkYXB0ZXJGYWN0b3J5LAorCQkJCQlncmFwaCkpOworCQl9IC8vIGlmIEdyYXBoTGFiZWxzCisKKwkJZmluYWwgQ29sbGVjdGlvbiBvdGhlckNoaWxkcmVuID0gc3VwZXIuZ2V0Q2hpbGRyZW4ob2JqZWN0KTsKKwkJb3RoZXJDaGlsZHJlbi5hZGRBbGwoY2hpbGRyZW4pOworCQlyZXR1cm4gb3RoZXJDaGlsZHJlbjsKKwl9IC8vIGdldENoaWxkcmVuCisKKwkvKioKKwkgKiBUaGlzIGFkZHMgYSBwcm9wZXJ0eSBkZXNjcmlwdG9yIGZvciB0aGUgVGltZSBmZWF0dXJlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIGFkZFRpbWVQcm9wZXJ0eURlc2NyaXB0b3IoT2JqZWN0IG9iamVjdCkgeworCQlpdGVtUHJvcGVydHlEZXNjcmlwdG9ycy5hZGQKKwkJCShjcmVhdGVJdGVtUHJvcGVydHlEZXNjcmlwdG9yCisJCQkJKCgoQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSlhZGFwdGVyRmFjdG9yeSkuZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCksCisJCQkJIGdldFJlc291cmNlTG9jYXRvcigpLAorCQkJCSBnZXRTdHJpbmcoIl9VSV9HcmFwaF90aW1lX2ZlYXR1cmUiKSwgLy8kTk9OLU5MUy0xJAorCQkJCSBnZXRTdHJpbmcoIl9VSV9Qcm9wZXJ0eURlc2NyaXB0b3JfZGVzY3JpcHRpb24iLCAiX1VJX0dyYXBoX3RpbWVfZmVhdHVyZSIsICJfVUlfR3JhcGhfdHlwZSIpLCAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQgLy8kTk9OLU5MUy0zJAorCQkJCSBHcmFwaFBhY2thZ2UuTGl0ZXJhbHMuR1JBUEhfX1RJTUUsCisJCQkJIGZhbHNlLAorCQkJCSBmYWxzZSwKKwkJCQkgdHJ1ZSwKKwkJCQkgbnVsbCwKKwkJCQkgbnVsbCwKKwkJCQkgbnVsbCkpOworCX0KKworCS8qKgorCSAqIFRoaXMgc3BlY2lmaWVzIGhvdyB0byBpbXBsZW1lbnQge0BsaW5rICNnZXRDaGlsZHJlbn0gYW5kIGlzIHVzZWQgdG8gZGVkdWNlIGFuIGFwcHJvcHJpYXRlIGZlYXR1cmUgZm9yIGFuCisJICoge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lZGl0LmNvbW1hbmQuQWRkQ29tbWFuZH0sIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuZWRpdC5jb21tYW5kLlJlbW92ZUNvbW1hbmR9IG9yCisJICoge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lZGl0LmNvbW1hbmQuTW92ZUNvbW1hbmR9IGluIHtAbGluayAjY3JlYXRlQ29tbWFuZH0uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBDb2xsZWN0aW9uPD8gZXh0ZW5kcyBFU3RydWN0dXJhbEZlYXR1cmU+IGdldENoaWxkcmVuRmVhdHVyZXMoT2JqZWN0IG9iamVjdCkgeworCQlpZiAoY2hpbGRyZW5GZWF0dXJlcyA9PSBudWxsKSB7CisJCQlzdXBlci5nZXRDaGlsZHJlbkZlYXR1cmVzKG9iamVjdCk7CisJCQljaGlsZHJlbkZlYXR1cmVzLmFkZChHcmFwaFBhY2thZ2UuTGl0ZXJhbHMuR1JBUEhfX1VOUkVTT0xWRURfSURFTlRJRklBQkxFUyk7CisJCQljaGlsZHJlbkZlYXR1cmVzLmFkZChHcmFwaFBhY2thZ2UuTGl0ZXJhbHMuR1JBUEhfX0RFQ09SQVRPUlMpOworCQl9CisJCXJldHVybiBjaGlsZHJlbkZlYXR1cmVzOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgRVN0cnVjdHVyYWxGZWF0dXJlIGdldENoaWxkRmVhdHVyZShPYmplY3Qgb2JqZWN0LCBPYmplY3QgY2hpbGQpIHsKKwkJLy8gQ2hlY2sgdGhlIHR5cGUgb2YgdGhlIHNwZWNpZmllZCBjaGlsZCBvYmplY3QgYW5kIHJldHVybiB0aGUgcHJvcGVyIGZlYXR1cmUgdG8gdXNlIGZvcgorCQkvLyBhZGRpbmcgKHNlZSB7QGxpbmsgQWRkQ29tbWFuZH0pIGl0IGFzIGEgY2hpbGQuCisKKwkJcmV0dXJuIHN1cGVyLmdldENoaWxkRmVhdHVyZShvYmplY3QsIGNoaWxkKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgR3JhcGguZ2lmLiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBPYmplY3QgZ2V0SW1hZ2UoT2JqZWN0IG9iamVjdCkgeworCQlyZXR1cm4gb3ZlcmxheUltYWdlKG9iamVjdCwgZ2V0UmVzb3VyY2VMb2NhdG9yKCkuZ2V0SW1hZ2UoCisJCQkJImZ1bGwvY3VzdG9tb2JqMTYvR3JhcGgiKSk7CisJfSAvLyBnZXRJbWFnZQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIHRoZSBsYWJlbCB0ZXh0IGZvciB0aGUgYWRhcHRlZCBjbGFzcy4gPCEtLSBiZWdpbi11c2VyLWRvYworCSAqIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBTdHJpbmcgZ2V0VGV4dChPYmplY3Qgb2JqZWN0KSB7CisJCXJldHVybiBzdXBlci5nZXRUZXh0KG9iamVjdCk7CisJfSAvLyBnZXRUZXh0CisJCisJLyoqCisJICogVGhpcyByZXR1cm5zIHRoZSBsYWJlbCB0ZXh0IGZvciB0aGUgYWRhcHRlZCBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jCisJICogLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKy8vCUBPdmVycmlkZQorCUBPdmVycmlkZQorCXB1YmxpYyBTdHJpbmcgZ2V0VGV4dEdlbihPYmplY3Qgb2JqZWN0KSB7CisJCVVSSSBsYWJlbFZhbHVlID0gKChHcmFwaClvYmplY3QpLmdldFVSSSgpOworCQlTdHJpbmcgbGFiZWwgPSBsYWJlbFZhbHVlID09IG51bGwgPyBudWxsIDogbGFiZWxWYWx1ZS50b1N0cmluZygpOworCQlyZXR1cm4gbGFiZWwgPT0gbnVsbCB8fCBsYWJlbC5sZW5ndGgoKSA9PSAwID8KKwkJCWdldFN0cmluZygiX1VJX0dyYXBoX3R5cGUiKSA6IC8vJE5PTi1OTFMtMSQKKwkJCWdldFN0cmluZygiX1VJX0dyYXBoX3R5cGUiKSArICIgIiArIGxhYmVsOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKKwl9CisKKwkvKioKKwkgKiBUaGlzIGhhbmRsZXMgbW9kZWwgbm90aWZpY2F0aW9ucyBieSBjYWxsaW5nIHtAbGluayAjdXBkYXRlQ2hpbGRyZW59IHRvCisJICogdXBkYXRlIGFueSBjYWNoZWQgY2hpbGRyZW4gYW5kIGJ5IGNyZWF0aW5nIGEgdmlld2VyIG5vdGlmaWNhdGlvbiwgd2hpY2gKKwkgKiBpdCBwYXNzZXMgdG8ge0BsaW5rICNmaXJlTm90aWZ5Q2hhbmdlZH0uIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0KKwkgKiBlbmQtdXNlci1kb2MgLS0+CisJICogCisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBub3RpZnlDaGFuZ2VkKE5vdGlmaWNhdGlvbiBub3RpZmljYXRpb24pIHsKKwkJdXBkYXRlQ2hpbGRyZW4obm90aWZpY2F0aW9uKTsKKworCQlzd2l0Y2ggKG5vdGlmaWNhdGlvbi5nZXRGZWF0dXJlSUQoR3JhcGguY2xhc3MpKSB7CisJCWNhc2UgR3JhcGhQYWNrYWdlLkdSQVBIX19OVU1fRURHRVM6CisJCWNhc2UgR3JhcGhQYWNrYWdlLkdSQVBIX19OVU1fTk9ERVM6CisJCWNhc2UgR3JhcGhQYWNrYWdlLkdSQVBIX19OVU1fR1JBUEhfTEFCRUxTOgorCQljYXNlIEdyYXBoUGFja2FnZS5HUkFQSF9fTlVNX05PREVfTEFCRUxTOgorCQljYXNlIEdyYXBoUGFja2FnZS5HUkFQSF9fTlVNX0RZTkFNSUNfTEFCRUxTOgorCQkJZmlyZU5vdGlmeUNoYW5nZWQobmV3IFZpZXdlck5vdGlmaWNhdGlvbihub3RpZmljYXRpb24sIG5vdGlmaWNhdGlvbgorCQkJCQkuZ2V0Tm90aWZpZXIoKSwgZmFsc2UsIHRydWUpKTsKKwkJCXJldHVybjsKKwkJY2FzZSBHcmFwaFBhY2thZ2UuR1JBUEhfX0VER0VTOgorCQljYXNlIEdyYXBoUGFja2FnZS5HUkFQSF9fTk9ERVM6CisJCWNhc2UgR3JhcGhQYWNrYWdlLkdSQVBIX19HUkFQSF9MQUJFTFM6CisJCWNhc2UgR3JhcGhQYWNrYWdlLkdSQVBIX19VTlJFU09MVkVEX0lERU5USUZJQUJMRVM6CisJCWNhc2UgR3JhcGhQYWNrYWdlLkdSQVBIX19OT0RFX0xBQkVMUzoKKwkJCWZpcmVOb3RpZnlDaGFuZ2VkKG5ldyBWaWV3ZXJOb3RpZmljYXRpb24obm90aWZpY2F0aW9uLCBub3RpZmljYXRpb24KKwkJCQkJLmdldE5vdGlmaWVyKCksIHRydWUsIHRydWUpKTsKKwkJCXJldHVybjsKKwkJfQorCQlzdXBlci5ub3RpZnlDaGFuZ2VkKG5vdGlmaWNhdGlvbik7CisJfQorCisJLyoqCisJICogVGhpcyBoYW5kbGVzIG1vZGVsIG5vdGlmaWNhdGlvbnMgYnkgY2FsbGluZyB7QGxpbmsgI3VwZGF0ZUNoaWxkcmVufSB0byB1cGRhdGUgYW55IGNhY2hlZAorCSAqIGNoaWxkcmVuIGFuZCBieSBjcmVhdGluZyBhIHZpZXdlciBub3RpZmljYXRpb24sIHdoaWNoIGl0IHBhc3NlcyB0byB7QGxpbmsgI2ZpcmVOb3RpZnlDaGFuZ2VkfS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tCisJICogZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBub3RpZnlDaGFuZ2VkR2VuKE5vdGlmaWNhdGlvbiBub3RpZmljYXRpb24pIHsKKwkJdXBkYXRlQ2hpbGRyZW4obm90aWZpY2F0aW9uKTsKKworCQlzd2l0Y2ggKG5vdGlmaWNhdGlvbi5nZXRGZWF0dXJlSUQoR3JhcGguY2xhc3MpKSB7CisJCQljYXNlIEdyYXBoUGFja2FnZS5HUkFQSF9fRURHRVM6CisJCQljYXNlIEdyYXBoUGFja2FnZS5HUkFQSF9fTk9ERVM6CisJCQljYXNlIEdyYXBoUGFja2FnZS5HUkFQSF9fR1JBUEhfTEFCRUxTOgorCQkJY2FzZSBHcmFwaFBhY2thZ2UuR1JBUEhfX05PREVfTEFCRUxTOgorCQkJY2FzZSBHcmFwaFBhY2thZ2UuR1JBUEhfX05VTV9FREdFUzoKKwkJCWNhc2UgR3JhcGhQYWNrYWdlLkdSQVBIX19OVU1fTk9ERVM6CisJCQljYXNlIEdyYXBoUGFja2FnZS5HUkFQSF9fTlVNX0dSQVBIX0xBQkVMUzoKKwkJCWNhc2UgR3JhcGhQYWNrYWdlLkdSQVBIX19OVU1fTk9ERV9MQUJFTFM6CisJCQljYXNlIEdyYXBoUGFja2FnZS5HUkFQSF9fTlVNX0RZTkFNSUNfTEFCRUxTOgorCQkJCWZpcmVOb3RpZnlDaGFuZ2VkKG5ldyBWaWV3ZXJOb3RpZmljYXRpb24obm90aWZpY2F0aW9uLCBub3RpZmljYXRpb24uZ2V0Tm90aWZpZXIoKSwgZmFsc2UsIHRydWUpKTsKKwkJCQlyZXR1cm47CisJCQljYXNlIEdyYXBoUGFja2FnZS5HUkFQSF9fVU5SRVNPTFZFRF9JREVOVElGSUFCTEVTOgorCQkJY2FzZSBHcmFwaFBhY2thZ2UuR1JBUEhfX0RFQ09SQVRPUlM6CisJCQkJZmlyZU5vdGlmeUNoYW5nZWQobmV3IFZpZXdlck5vdGlmaWNhdGlvbihub3RpZmljYXRpb24sIG5vdGlmaWNhdGlvbi5nZXROb3RpZmllcigpLCB0cnVlLCBmYWxzZSkpOworCQkJCXJldHVybjsKKwkJfQorCQlzdXBlci5ub3RpZnlDaGFuZ2VkKG5vdGlmaWNhdGlvbik7CisJfQorCQorCS8qKgorCSAqIFRoaXMgYWRkcyB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmVkaXQuY29tbWFuZC5Db21tYW5kUGFyYW1ldGVyfXMgZGVzY3JpYmluZyB0aGUgY2hpbGRyZW4KKwkgKiB0aGF0IGNhbiBiZSBjcmVhdGVkIHVuZGVyIHRoaXMgb2JqZWN0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MKKwkgKiAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIGNvbGxlY3ROZXdDaGlsZERlc2NyaXB0b3JzKENvbGxlY3Rpb248T2JqZWN0PiBuZXdDaGlsZERlc2NyaXB0b3JzLCBPYmplY3Qgb2JqZWN0KSB7CisJCXN1cGVyLmNvbGxlY3ROZXdDaGlsZERlc2NyaXB0b3JzKG5ld0NoaWxkRGVzY3JpcHRvcnMsIG9iamVjdCk7CisJfQorCisJLyoqCisJICogUmV0dXJuIHRoZSByZXNvdXJjZSBsb2NhdG9yIGZvciB0aGlzIGl0ZW0gcHJvdmlkZXIncyByZXNvdXJjZXMuIDwhLS0KKwkgKiBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogCisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBSZXNvdXJjZUxvY2F0b3IgZ2V0UmVzb3VyY2VMb2NhdG9yKCkgeworCQlyZXR1cm4gQ29yZUVkaXRQbHVnaW4uSU5TVEFOQ0U7CisJfQorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JdGVtUHJvdmlkZXJBZGFwdGVyI2Rpc3Bvc2UoKQorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGRpc3Bvc2UoKSB7CisJCXN1cGVyLmRpc3Bvc2UoKTsKKwkJaWYgKGNoaWxkcmVuICE9IG51bGwpIHsKKwkJCWZvciAoSXRlcmF0b3I8VHJhbnNpZW50R3JhcGhJdGVtUHJvdmlkZXI+IGl0ZXIgPSBjaGlsZHJlbi5pdGVyYXRvcigpOyBpdGVyLmhhc05leHQoKTspIHsKKwkJCQkoKElEaXNwb3NhYmxlKSBpdGVyLm5leHQoKSkuZGlzcG9zZSgpOworCQkJfQorCQl9CisJfQorCisJLyoqCisJICogVGhpcyBjbGFzcyBpcyBleHRlbmRlZCBieSBjbGFzc2VzIHRoYXQgYXJlIGl0ZW0gcHJvdmlkZXJzIGZvciAiTm9uLU1vZGVsCisJICogSW50ZXJtZWRpYXJ5IFZpZXcgT2JqZWN0cyIuIEl0IGZvbGxvd3MgdGhlIHBhdHRlcm4gZGVzY3JpYmVkIGluIHRoZSBib29rCisJICogIkVjbGlwc2UgTW9kZWxpbmcgRnJhbWV3b3JrIiwgcGFnZXMgMzY5LTM3OC4KKwkgKiAKKwkgKiBUaGlzIGlzIE5PVCBhIGdlbmVyYXRlZCBjbGFzcy4KKwkgKi8KKwlwdWJsaWMgc3RhdGljIGFic3RyYWN0IGNsYXNzIFRyYW5zaWVudEdyYXBoSXRlbVByb3ZpZGVyIGV4dGVuZHMKKwkJCUl0ZW1Qcm92aWRlckFkYXB0ZXIgaW1wbGVtZW50cyBJRWRpdGluZ0RvbWFpbkl0ZW1Qcm92aWRlciwKKwkJCUlTdHJ1Y3R1cmVkSXRlbUNvbnRlbnRQcm92aWRlciwgSVRyZWVJdGVtQ29udGVudFByb3ZpZGVyLAorCQkJSUl0ZW1MYWJlbFByb3ZpZGVyLCBJSXRlbVByb3BlcnR5U291cmNlIHsKKworCQkvKioKKwkJICogQHBhcmFtIGFkYXB0ZXJGYWN0b3J5CisJCSAqLworCQlwdWJsaWMgVHJhbnNpZW50R3JhcGhJdGVtUHJvdmlkZXIoQWRhcHRlckZhY3RvcnkgYWRhcHRlckZhY3RvcnksCisJCQkJZmluYWwgR3JhcGggZ3JhcGgpIHsKKwkJCXN1cGVyKGFkYXB0ZXJGYWN0b3J5KTsKKwkJCWdyYXBoLmVBZGFwdGVycygpLmFkZCh0aGlzKTsKKwkJfSAvLyBUcmFuc2llbnRHcmFwaEl0ZW1Qcm92aWRlcgorCisJCS8qKgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkl0ZW1Qcm92aWRlckFkYXB0ZXIjZ2V0Q2hpbGRyZW5GZWF0dXJlcyhqYXZhLmxhbmcuT2JqZWN0KQorCQkgKi8KKwkJQE92ZXJyaWRlCisJCXByb3RlY3RlZCBDb2xsZWN0aW9uPD8gZXh0ZW5kcyBFU3RydWN0dXJhbEZlYXR1cmU+IGdldENoaWxkcmVuRmVhdHVyZXMoT2JqZWN0IG9iamVjdCkgeworCQkJaWYgKGNoaWxkcmVuRmVhdHVyZXMgPT0gbnVsbCkgeworCQkJCXN1cGVyLmdldENoaWxkcmVuRmVhdHVyZXMob2JqZWN0KTsKKwkJCQljaGlsZHJlbkZlYXR1cmVzLmFkZChnZXRNYXBSZWZlcmVuY2UoKSk7CisJCQl9CisJCQlyZXR1cm4gY2hpbGRyZW5GZWF0dXJlczsKKwkJfSAvLyBnZXRDaGlsZHJlbkZlYXR1cmVzCisKKwkJCisJCS8qKgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkl0ZW1Qcm92aWRlckFkYXB0ZXIjZ2V0RmVhdHVyZVZhbHVlKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0LAorCQkgKiAgICAgIG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FU3RydWN0dXJhbEZlYXR1cmUpCisJCSAqLworCQlAT3ZlcnJpZGUKKwkJcHJvdGVjdGVkIE9iamVjdCBnZXRGZWF0dXJlVmFsdWUoRU9iamVjdCBvYmplY3QsCisJCQkJRVN0cnVjdHVyYWxGZWF0dXJlIGZlYXR1cmUpIHsKKwkJCWlmIChvYmplY3QgPT0gbnVsbCkgeworCQkJCS8vIFllcworCQkJCXJldHVybiAoKEdyYXBoKSB0YXJnZXQpLmVHZXQoZmVhdHVyZSk7CisJCQl9IC8vIGlmCisJCQllbHNlIHsKKwkJCQlyZXR1cm4gc3VwZXIuZ2V0RmVhdHVyZVZhbHVlKG9iamVjdCwgZmVhdHVyZSk7CisJCQl9CisJCX0gLy8gZ2V0RmVhdHVyZVZhbHVlCisKKwkJLyoqCisJCSAqIEBzZWUgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSXRlbVByb3ZpZGVyQWRhcHRlciNnZXRQYXJlbnQoamF2YS5sYW5nLk9iamVjdCkKKwkJICovCisJCUBPdmVycmlkZQorCQlwdWJsaWMgT2JqZWN0IGdldFBhcmVudChPYmplY3Qgb2JqZWN0KSB7CisJCQlyZXR1cm4gdGFyZ2V0OworCQl9IC8vIGdldFBhcmVudAorCisJCS8qKgorCQkgKiBUaGlzIGFzc3VtZXMgdGhhdCBhbGwgY2hpbGRyZW4gYXJlIG1lbWJlcnMgb2YgYSBtYXAgb2Yge0BsaW5rIElkZW50aWZpYWJsZX1zCisJCSAqLworCQlAT3ZlcnJpZGUKKwkJcHVibGljIENvbGxlY3Rpb248SWRlbnRpZmlhYmxlPiBnZXRDaGlsZHJlbihPYmplY3Qgb2JqZWN0KSB7CisJCQlmaW5hbCBHcmFwaCBncmFwaCA9IChHcmFwaCkgdGFyZ2V0OworCQkJZmluYWwgTGlzdDxJZGVudGlmaWFibGU+IGNoaWxkcmVuID0gbmV3IEFycmF5TGlzdDxJZGVudGlmaWFibGU+KCk7CisJCQljaGlsZHJlbi5hZGRBbGwoICAoZ2V0SWRlbnRpZmlhYmxlTWFwKGdyYXBoKS52YWx1ZXMoKSkpOworLy8gU0VEIGNvbW1lbnRlZCBvdXQgNy8yMy8yMDEwLiBJdCB0YWtlcyBhIGxvbmcgdGltZSB0byBzb3J0IHdoZW4gdGhlcmUncyBsb3RzIG9mIGxhYmVscworLy8JCQlDb2xsZWN0aW9ucy5zb3J0KGNoaWxkcmVuKTsKKwkJCXJldHVybiBjaGlsZHJlbjsKKwkJfSAvLyBnZXRDaGlsZHJlbgorCisJCS8qKgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkl0ZW1Qcm92aWRlckFkYXB0ZXIjZ2V0VGV4dChqYXZhLmxhbmcuT2JqZWN0KQorCQkgKi8KKwkJQE92ZXJyaWRlCisJCXB1YmxpYyBTdHJpbmcgZ2V0VGV4dChPYmplY3Qgb2JqZWN0KSB7CisJCQlmaW5hbCBTdHJpbmdCdWlsZGVyIHNiID0gbmV3IFN0cmluZ0J1aWxkZXIoZ2V0VGV4dCgpKTsKKwkJCXNiLmFwcGVuZCgiICgiKTsKKwkJCXNiLmFwcGVuZChJbnRlZ2VyLnRvU3RyaW5nKGdldElkZW50aWZpYWJsZU1hcCgoR3JhcGgpIHRhcmdldCkKKwkJCQkJLnNpemUoKSkpOworCQkJc2IuYXBwZW5kKCIpIik7CisJCQlyZXR1cm4gc2IudG9TdHJpbmcoKTsKKwkJfSAvLyBnZXRUZXh0CisKKwkJLyoqCisJCSAqLworCQlAT3ZlcnJpZGUKKwkJcHJvdGVjdGVkIFN0cmluZyBnZXRGZWF0dXJlVGV4dChPYmplY3QgZmVhdHVyZSkgeworCQkJcmV0dXJuIHN1cGVyLmdldEZlYXR1cmVUZXh0KHRhcmdldCk7CisJCX0gLy8gZ2V0RmVhdHVyZVRleHQKKworCQkvKioKKwkJICogVGhpcyByZWRpcmVjdHMgdGhlIGNhbGwgdG8gdGhlICJ0YXJnZXQiIChpLmUuLCB0aGUgR3JhcGgpLCBpdCB0aGVuCisJCSAqIHJldHVybnMgdGhlIGNoaWxkIGRlc2NyaXB0b3JzIHdoaWNoIHdvdWxkIGluY2x1ZGUgdGhlIFRyYW5zaWVudCBHcmFwaAorCQkgKiBJdGVtIHByb3ZpZGVycyBzdWNoIGFzIHRoaXMgb25lLgorCQkgKi8KKwkJQE92ZXJyaWRlCisJCXB1YmxpYyBDb2xsZWN0aW9uPD8+IGdldE5ld0NoaWxkRGVzY3JpcHRvcnMoT2JqZWN0IG9iamVjdCwKKwkJCQlFZGl0aW5nRG9tYWluIGVkaXRpbmdEb21haW4sIE9iamVjdCBzaWJsaW5nKSB7CisJCQlyZXR1cm4gc3VwZXIuZ2V0TmV3Q2hpbGREZXNjcmlwdG9ycyh0YXJnZXQsIGVkaXRpbmdEb21haW4sIHNpYmxpbmcpOworCQl9IC8vIGdldE5ld0NoaWxkRGVzY3JpcHRvcnMKKworCQkvKioKKwkJICogUmV0dXJuIHRoZSByZXNvdXJjZSBsb2NhdG9yIGZvciB0aGlzIGl0ZW0gcHJvdmlkZXIncyByZXNvdXJjZXMuCisJCSAqLworCQlAT3ZlcnJpZGUKKwkJcHVibGljIFJlc291cmNlTG9jYXRvciBnZXRSZXNvdXJjZUxvY2F0b3IoKSB7CisJCQlyZXR1cm4gR3JhcGhFZGl0UGx1Z2luLklOU1RBTkNFOworCQl9CisKKwkJLyoqCisJCSAqIEByZXR1cm4gdGhlIG5hbWUgb2YgdGhlIFRyYW5zaWVudCBHcmFwaCBJdGVtIFByb3ZpZGVyLiAoZS5nLiwKKwkJICogICAgICAgICAiRWRnZXMiKQorCQkgKi8KKwkJYWJzdHJhY3QgcHJvdGVjdGVkIFN0cmluZyBnZXRUZXh0KCk7CisKKwkJLyoqCisJCSAqIEBwYXJhbSBncmFwaAorCQkgKiAgICAgICAgICAgIHRoZSBncmFwaCB0aGF0IHdpbGwgaGF2ZSBhIGNoaWxkIGFkZGVkIHRvIGl0LgorCQkgKiBAcmV0dXJuIHRoZSBtYXAgb2YgPGNvZGU+SWRlbnRpZmlhYmxlPC9jb2RlPnMgdGhhdCBhc3NvY2lhdGVkIHdpdGggdGhpcworCQkgKiAgICAgICAgIGl0ZW0gcHJvdmlkZXIuCisJCSAqLworCQlhYnN0cmFjdCBwcm90ZWN0ZWQgRU1hcDxVUkksPyBleHRlbmRzIElkZW50aWZpYWJsZT4gZ2V0SWRlbnRpZmlhYmxlTWFwKEdyYXBoIGdyYXBoKTsKKworCQkvKioKKwkJICogQ3JlYXRlIHRoZSBhcHByb3ByaWF0ZSBtYXAgZW50cnkgdG8gYWRkIHRvIHRoZSBtYXAuCisJCSAqIAorCQkgKiBAcGFyYW0ga2V5CisJCSAqICAgICAgICAgICAgdGhlIFVSSSB0aGF0IHVuaXF1ZWx5IGlkZW50aWZpZXMgdGhlCisJCSAqICAgICAgICAgICAgPGNvZGU+SWRlbnRpZmlhYmxlPC9jb2RlPgorCQkgKiBAcGFyYW0gdmFsdWUKKwkJICogICAgICAgICAgICB0aGUgdmFsdWUgb2YgdGhlIG1hcCBlbnRyeQorCQkgKiBAcmV0dXJuIGEgTWFwRW50cnkgaW5zdGFuY2UKKwkJICovCisJCWFic3RyYWN0IHByb3RlY3RlZCBFT2JqZWN0IGdldE1hcEVudHJ5KGZpbmFsIFVSSSBrZXksCisJCQkJZmluYWwgSWRlbnRpZmlhYmxlIHZhbHVlKTsKKworCQkvKioKKwkJICogQHJldHVybiB0aGUgU3RydWN0dXJhbEZlYXR1cmUgdGhhdCByZXByZXNlbnRzIHRoZSAidmFsdWUiIG9mIHRoZSBNYXBFbnRyeQorCQkgKi8KKwkJYWJzdHJhY3QgIHByb3RlY3RlZCBFU3RydWN0dXJhbEZlYXR1cmUgZ2V0TWFwRW50cnlWYWx1ZUVSZWZlcmVuY2UoKTsKKwkJCisJCS8qKgorCQkgKiBAcmV0dXJuIHRoZSBtZXRhLXJlZmVyZW5jZSB0byB0aGUgZmVhdHVyZSBvZiB0aGUgZ3JhcGggdGhhdCBpcyB0aGUKKwkJICogICAgICAgICBtYXAKKwkJICovCisJCWFic3RyYWN0IHByb3RlY3RlZCBFUmVmZXJlbmNlIGdldE1hcFJlZmVyZW5jZSgpOworCisJCS8qKgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkl0ZW1Qcm92aWRlckFkYXB0ZXIjY3JlYXRlUmVtb3ZlQ29tbWFuZChvcmcuZWNsaXBzZS5lbWYuZWRpdC5kb21haW4uRWRpdGluZ0RvbWFpbiwKKwkJICogICAgICBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCwKKwkJICogICAgICBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRVN0cnVjdHVyYWxGZWF0dXJlLCBqYXZhLnV0aWwuQ29sbGVjdGlvbikKKwkJICovCisJCUBPdmVycmlkZQorCQlwcm90ZWN0ZWQgQ29tbWFuZCBjcmVhdGVSZW1vdmVDb21tYW5kKEVkaXRpbmdEb21haW4gZG9tYWluLAorCQkJCUVPYmplY3Qgb3duZXIsIEVTdHJ1Y3R1cmFsRmVhdHVyZSBmZWF0dXJlLCBDb2xsZWN0aW9uPD8+IGNvbGxlY3Rpb24pIHsKKwkJCXJldHVybiBjcmVhdGVXcmFwcGVkQ29tbWFuZChzdXBlci5jcmVhdGVSZW1vdmVDb21tYW5kKGRvbWFpbiwKKwkJCQkJb3duZXIsIGZlYXR1cmUsIGNvbGxlY3Rpb24pLCBvd25lcik7CisJCX0gLy8gY3JlYXRlUmVtb3ZlQ29tbWFuZAorCisJCS8qKgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkl0ZW1Qcm92aWRlckFkYXB0ZXIjY3JlYXRlQWRkQ29tbWFuZChvcmcuZWNsaXBzZS5lbWYuZWRpdC5kb21haW4uRWRpdGluZ0RvbWFpbiwKKwkJICogICAgICBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCwKKwkJICogICAgICBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRVN0cnVjdHVyYWxGZWF0dXJlLCBqYXZhLnV0aWwuQ29sbGVjdGlvbiwKKwkJICogICAgICBpbnQpCisJCSAqLworCQlAT3ZlcnJpZGUKKwkJcHJvdGVjdGVkIENvbW1hbmQgY3JlYXRlQWRkQ29tbWFuZChFZGl0aW5nRG9tYWluIGRvbWFpbiwgRU9iamVjdCBvd25lciwKKwkJCQlFU3RydWN0dXJhbEZlYXR1cmUgZmVhdHVyZSwgQ29sbGVjdGlvbjw/PiBjb2xsZWN0aW9uLCBpbnQgaW5kZXgpIHsKKwkJCXJldHVybiBjcmVhdGVXcmFwcGVkQ29tbWFuZChzdXBlci5jcmVhdGVBZGRDb21tYW5kKGRvbWFpbiwgb3duZXIsCisJCQkJCWZlYXR1cmUsIGNvbGxlY3Rpb24sIGluZGV4KSwgb3duZXIpOworCQl9IC8vIGNyZWF0ZUFkZENvbW1hbmQKKworCQkvKioKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JdGVtUHJvdmlkZXJBZGFwdGVyI2NyZWF0ZURyYWdBbmREcm9wQ29tbWFuZChvcmcuZWNsaXBzZS5lbWYuZWRpdC5kb21haW4uRWRpdGluZ0RvbWFpbiwKKwkJICogICAgICBqYXZhLmxhbmcuT2JqZWN0LCBmbG9hdCwgaW50LCBpbnQsIGphdmEudXRpbC5Db2xsZWN0aW9uKQorCQkgKi8KKwkJQE92ZXJyaWRlCisJCXByb3RlY3RlZCBDb21tYW5kIGNyZWF0ZURyYWdBbmREcm9wQ29tbWFuZChFZGl0aW5nRG9tYWluIGRvbWFpbiwKKwkJCQlPYmplY3Qgb3duZXIsIGZsb2F0IGxvY2F0aW9uLCBpbnQgb3BlcmF0aW9ucywgaW50IG9wZXJhdGlvbiwKKwkJCQlDb2xsZWN0aW9uPD8+IGNvbGxlY3Rpb24pIHsKKwkJCUNvbW1hbmQgcmV0VmFsdWUgPSBudWxsOworCQkJaWYgKG5ldyBBZGRDb21tYW5kKGRvbWFpbiwgKEVPYmplY3QpIHRhcmdldCwgZ2V0TWFwUmVmZXJlbmNlKCksCisJCQkJCWNvbGxlY3Rpb24pLmNhbkV4ZWN1dGUoKSkgeworCQkJCXJldFZhbHVlID0gc3VwZXIuY3JlYXRlRHJhZ0FuZERyb3BDb21tYW5kKGRvbWFpbiwgdGFyZ2V0LAorCQkJCQkJbG9jYXRpb24sIG9wZXJhdGlvbnMsIG9wZXJhdGlvbiwgY29sbGVjdGlvbik7CisJCQl9IGVsc2UgeworCQkJCXJldFZhbHVlID0gVW5leGVjdXRhYmxlQ29tbWFuZC5JTlNUQU5DRTsKKwkJCX0KKwkJCXJldHVybiByZXRWYWx1ZTsKKwkJfSAvLyBjcmVhdGVEcmFnQW5kRHJvcENvbW1hbmQKKworCQkvKioKKwkJICogQ3JlYXRlIGEgQ3JlYXRlQ2hpbGRDb21tYW5kLiBJdCB3aWxsIGJlIHVzZWQgdG8gZGV0ZXJtaW5lIGlmIGEgY2hpbGQKKwkJICogY2FuIGJlIGFkZGVkLiBJZiAiY2FuRXhlY3V0ZSIgaXMgZmFsc2UsIHRoZW4gdGhlIG1lbnUgZW50cnkgd2lsbCBiZQorCQkgKiBncmF5ZWQgb3V0LgorCQkgKi8KKwkJQE92ZXJyaWRlCisJCXByb3RlY3RlZCBDb21tYW5kIGNyZWF0ZUNyZWF0ZUNoaWxkQ29tbWFuZChFZGl0aW5nRG9tYWluIGRvbWFpbiwKKwkJCQlFT2JqZWN0IG93bmVyLCBFU3RydWN0dXJhbEZlYXR1cmUgZmVhdHVyZSwgT2JqZWN0IHZhbHVlLAorCQkJCWludCBpbmRleCwgQ29sbGVjdGlvbjw/PiBjb2xsZWN0aW9uKSB7CisKKwkJCUNvbW1hbmQgcmV0VmFsdWUgPSBudWxsOworCisJCQkvLyBJcyB0aGUgY2hpbGQgYW4gSWRlbnRpZmlhYmxlPworCQkJaWYgKCEodmFsdWUgaW5zdGFuY2VvZiBJZGVudGlmaWFibGUpKSB7CisJCQkJLy8gTm8KKwkJCQlyZXRWYWx1ZSA9IHN1cGVyLmNyZWF0ZUNyZWF0ZUNoaWxkQ29tbWFuZChkb21haW4sIG93bmVyLAorCQkJCQkJZmVhdHVyZSwgdmFsdWUsIGluZGV4LCBjb2xsZWN0aW9uKTsKKwkJCX0gZWxzZSB7CisJCQkJLy8gWWVzCisJCQkJcmV0VmFsdWUgPSBuZXcgQ3JlYXRlQ2hpbGRDb21tYW5kKGRvbWFpbiwgb3duZXIsIGZlYXR1cmUsCisJCQkJCQl2YWx1ZSwgaW5kZXgsIGNvbGxlY3Rpb24sIHRoaXMpIHsKKwkJCQkJQE92ZXJyaWRlCisJCQkJCXByb3RlY3RlZCBDb21tYW5kIGNyZWF0ZUNvbW1hbmQoKSB7CisKKwkJCQkJCUNvbW1hbmQgcmVzdWx0ID0gbnVsbDsKKworCQkJCQkJR3JhcGggZ3JhcGggPSAoR3JhcGgpIHRhcmdldDsKKwkJCQkJCUlkZW50aWZpYWJsZSBuZXdDaGlsZElkZW50aWZpYWJsZSA9IChJZGVudGlmaWFibGUpIGNoaWxkOworCQkJCQkJZmluYWwgVVJJIHVyaSA9IG5ld0NoaWxkSWRlbnRpZmlhYmxlLmdldFVSSSgpOworCisJCQkJCQkvLyBEb2VzIHRoZSBFZGdlIE1hcCBhbHJlYWR5IGNvbnRhaW4gYW4gZW50cnkgZm9yIHRoZQorCQkJCQkJLy8gZWRnZSdzIFVSST8KKwkJCQkJCUlkZW50aWZpYWJsZSBleGlzdGluZ0lkZW50aWZpYWJsZSA9IGdldElkZW50aWZpYWJsZU1hcCgKKwkJCQkJCQkJZ3JhcGgpLmdldCh1cmkpOworCisJCQkJCQlpZiAoZXhpc3RpbmdJZGVudGlmaWFibGUgPT0gbnVsbCkgeworCQkJCQkJCS8vIE5vCisJCQkJCQkJLy8gVGhlcmUgaXNuJ3QgYW4gZXhpc3RpbmcgZW50cnkuIE5lZWQgdG8gY3JlYXRlIGEKKwkJCQkJCQkvLyBtYXAgZW50cnkgYW5kIGluaXRpYWxpemUgaXQuCisJCQkJCQkJZmluYWwgRU9iamVjdCBtYXBFbnRyeSA9IGdldE1hcEVudHJ5KHVyaSwKKwkJCQkJCQkJCW5ld0NoaWxkSWRlbnRpZmlhYmxlKTsKKworCQkJCQkJCS8vIE5vdywgd2UgbmVlZCB0byBwdXQgdGhlIGVudHJ5IHdlIGp1c3QgY3JlYXRlZAorCQkJCQkJCS8vIGludG8gdGhlIG1hcAorCQkJCQkJCXJlc3VsdCA9IG5ldyBBZGRDb21tYW5kKGRvbWFpbiwgZ3JhcGgsCisJCQkJCQkJCQlnZXRNYXBSZWZlcmVuY2UoKSwgbWFwRW50cnkpOworCisJCQkJCQl9IC8vIGlmIG5vIGV4aXN0aW5nIGVudHJ5CisJCQkJCQllbHNlIHsKKwkJCQkJCQkvLyBZZXMKKwkJCQkJCQkvLyBFeGlzdGluZyBsYWJlbCB3aXRoIHRoZSBzYW1lIFVSSSBhcyB0aGUgb25lIHRvIGJlCisJCQkJCQkJLy8gYWRkZWQuIENyZWF0ZSB0aGUgY29tbWFuZCB0aGF0IHdpbGwgc2V0IHRoZSB2YWx1ZQorCQkJCQkJCS8vIHRvIHRoZSBuZXcgbGFiZWwKKwkJCQkJCQlmaW5hbCBFT2JqZWN0IG1hcEVudHJ5ID0gZXhpc3RpbmdJZGVudGlmaWFibGUKKwkJCQkJCQkJCS5lQ29udGFpbmVyKCk7CisJCQkJCQkJcmVzdWx0ID0gbmV3IFNldENvbW1hbmQoCisJCQkJCQkJCQlkb21haW4sCisJCQkJCQkJCQltYXBFbnRyeSwgCisJCQkJCQkJCQlnZXRNYXBFbnRyeVZhbHVlRVJlZmVyZW5jZSgpLAorCQkJCQkJCQkJbmV3Q2hpbGRJZGVudGlmaWFibGUpOworCQkJCQkJfSAvLyBlbHNlCisJCQkJCQkKKwkJCQkJCXJldHVybiByZXN1bHQ7CisJCQkJCX0gLy8gY3JlYXRlQ29tbWFuZAorCisJCQkJCQorCQkJCX07IC8vIENyZWF0ZUNoaWxkQ29tbWFuZAorCisJCQl9IC8vIGVsc2UKKwkJCXJldHVybiByZXRWYWx1ZTsKKworCQl9IC8vIGNyZWF0ZUNyZWF0ZUNoaWxkQ29tbWFuZAorCisJCS8qKgorCQkgKiAKKwkJICogQHBhcmFtIGNvbW1hbmQKKwkJICogICAgICAgICAgICB0aGUgY29tbWFuZCB0byBiZSB3cmFwcGVkCisJCSAqIEBwYXJhbSBvd25lcgorCQkgKiAgICAgICAgICAgIHRoZSBvd25lcgorCQkgKiBAcmV0dXJuCisJCSAqLworCQlwcm90ZWN0ZWQgQ29tbWFuZCBjcmVhdGVXcmFwcGVkQ29tbWFuZChDb21tYW5kIGNvbW1hbmQsCisJCQkJZmluYWwgRU9iamVjdCBvd25lcikgeworCQkJcmV0dXJuIG5ldyBDb21tYW5kV3JhcHBlcihjb21tYW5kKSB7CisJCQkJQE92ZXJyaWRlCisJCQkJcHVibGljIENvbGxlY3Rpb248Pz4gZ2V0QWZmZWN0ZWRPYmplY3RzKCkgeworCQkJCQlDb2xsZWN0aW9uPD8+IGFmZmVjdGVkID0gc3VwZXIuZ2V0QWZmZWN0ZWRPYmplY3RzKCk7CisJCQkJCWlmIChhZmZlY3RlZC5jb250YWlucyhvd25lcikpIHsKKwkJCQkJCWFmZmVjdGVkID0gQ29sbGVjdGlvbnMKKwkJCQkJCQkJLnNpbmdsZXRvbihUcmFuc2llbnRHcmFwaEl0ZW1Qcm92aWRlci50aGlzKTsKKwkJCQkJfQorCQkJCQlyZXR1cm4gYWZmZWN0ZWQ7CisJCQkJfSAvLyBnZXRBZmZlY3RlZE9iamVjdHMKKwkJCX07CisJCX0gLy8gY3JlYXRlV3JhcHBlZENvbW1hbmQKKworCX0gLy8gVHJhbnNpZW50R3JhcGhJdGVtUHJvdmlkZXIKKworCS8qKgorCSAqIFRoaXMgY2xhc3MgcmVwcmVzZW50cyBhICJOb24tTW9kZWwgSW50ZXJtZWRpYXJ5IFZpZXcgT2JqZWN0Ii4gSXQKKwkgKiByZXByZXNlbnRzIHRoZSAiRWRnZXMiIG9mIHRoZSBncmFwaC4KKwkgKi8KKwlwdWJsaWMgc3RhdGljIGNsYXNzIEVkZ2VzSXRlbVByb3ZpZGVyIGV4dGVuZHMgVHJhbnNpZW50R3JhcGhJdGVtUHJvdmlkZXIgeworCisJCS8qKgorCQkgKiBAcGFyYW0gYWRhcHRlckZhY3RvcnkKKwkJICogQHBhcmFtIGdyYXBoCisJCSAqICAgICAgICAgICAgdGhlIGdyYXBoIHRoYXQgdGhlIEVkZ2VzIGJlbG9uZyB0bworCQkgKi8KKwkJcHVibGljIEVkZ2VzSXRlbVByb3ZpZGVyKEFkYXB0ZXJGYWN0b3J5IGFkYXB0ZXJGYWN0b3J5LCBHcmFwaCBncmFwaCkgeworCQkJc3VwZXIoYWRhcHRlckZhY3RvcnksIGdyYXBoKTsKKwkJfSAvLyBFZGdlc0l0ZW1Qcm92aWRlcgorCisJCS8qKgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkl0ZW1Qcm92aWRlckFkYXB0ZXIjZ2V0SW1hZ2UoamF2YS5sYW5nLk9iamVjdCkKKwkJICovCisJCUBPdmVycmlkZQorCQlwdWJsaWMgT2JqZWN0IGdldEltYWdlKE9iamVjdCBvYmplY3QpIHsKKwkJCXJldHVybiBvdmVybGF5SW1hZ2Uob2JqZWN0LCBnZXRSZXNvdXJjZUxvY2F0b3IoKS5nZXRJbWFnZSgKKwkJCQkJImZ1bGwvY3VzdG9tb2JqMTYvRWRnZSIpKTsKKwkJfQorCisJCS8qKgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LmltcGwuQWRhcHRlckltcGwjbm90aWZ5Q2hhbmdlZChvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb24pCisJCSAqLworCQlAT3ZlcnJpZGUKKwkJcHVibGljIHZvaWQgbm90aWZ5Q2hhbmdlZChOb3RpZmljYXRpb24gbXNnKSB7CisJCQlzd2l0Y2ggKG1zZy5nZXRGZWF0dXJlSUQoR3JhcGguY2xhc3MpKSB7CisJCQljYXNlIEdyYXBoUGFja2FnZS5HUkFQSF9fRURHRVM6CisJCQkJZmlyZU5vdGlmeUNoYW5nZWQobmV3IE5vdGlmaWNhdGlvbldyYXBwZXIodGhpcywgbXNnKSk7CisJCQkJcmV0dXJuOworCQkJfSAvLyBzd2l0Y2gKKwkJfSAvLyBub3RpZnlDaGFuZ2VkCisKKwkJLyoqCisJCSAqIFRoaXMgZGV0ZXJtaW5lcyB0aGUgY29udGVudHMgb2YgdGhlIGxpc3Qgb2YgImNoaWxkcmVuIiB0aGF0IGNhbiBiZQorCQkgKiBhZGRlZCB0byB0aGUgRWRnZXMuIFdlIG1vZGlmeQorCQkgKiB7QGxpbmsgR3JhcGhJdGVtUHJvdmlkZXIjY29sbGVjdE5ld0NoaWxkRGVzY3JpcHRvcnMoQ29sbGVjdGlvbiwgT2JqZWN0KX0KKwkJICogc28gdGhhdCBpdCBkb2Vzbid0IHJldHVybiAiRWRnZXMiIGFzIGFuIG9wdGlvbiB0byBiZSBjcmVhdGVkIHVuZGVyCisJCSAqIEdyYXBoLiBPZiB0aG9zZSBjaGlsZHJlbiwgdGhpcyBpcyB3aGVyZSB3ZSBjcmVhdGUgIkVkZ2VzIi4KKwkJICogCisJCSAqIEBzZWUgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSXRlbVByb3ZpZGVyQWRhcHRlciNjb2xsZWN0TmV3Q2hpbGREZXNjcmlwdG9ycyhqYXZhLnV0aWwuQ29sbGVjdGlvbiwKKwkJICogICAgICBqYXZhLmxhbmcuT2JqZWN0KQorCQkgKi8KKwkJQE92ZXJyaWRlCisJCXByb3RlY3RlZCB2b2lkIGNvbGxlY3ROZXdDaGlsZERlc2NyaXB0b3JzKAorCQkJCUNvbGxlY3Rpb248T2JqZWN0PiBuZXdDaGlsZERlc2NyaXB0b3JzLCBPYmplY3Qgb2JqZWN0KSB7CisJCQlzdXBlci5jb2xsZWN0TmV3Q2hpbGREZXNjcmlwdG9ycyhuZXdDaGlsZERlc2NyaXB0b3JzLCBvYmplY3QpOworCQkJbmV3Q2hpbGREZXNjcmlwdG9ycy5hZGQoY3JlYXRlQ2hpbGRQYXJhbWV0ZXIoR3JhcGhQYWNrYWdlLmVJTlNUQU5DRQorCQkJCQkuZ2V0R3JhcGhfRWRnZXMoKSwgR3JhcGhGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVFZGdlKCkpKTsKKwkJfSAvLyBjb2xsZWN0TmV3Q2hpbGREZXNjcmlwdG9ycworCisJCS8qKgorCQkgKiBAc2VlIFRyYW5zaWVudEdyYXBoSXRlbVByb3ZpZGVyI2dldFRleHQoamF2YS5sYW5nLk9iamVjdCkKKwkJICovCisJCUBPdmVycmlkZQorCQlwcm90ZWN0ZWQgU3RyaW5nIGdldFRleHQoKSB7CisJCQkvLyBUT0RPIE5MUyAiRWRnZXMiCisJCQlyZXR1cm4gIkVkZ2VzIjsKKwkJfSAvLyBnZXRUZXh0CisKKwkJLyoqCisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaC5wcm92aWRlci5UcmFuc2llbnRHcmFwaEl0ZW1Qcm92aWRlciNnZXRJZGVudGlmaWFibGVNYXAob3JnLmVjbGlwc2Uuc3RlbS5ncmFwaC5HcmFwaCkKKwkJICovCisJCUBPdmVycmlkZQorCQlwcm90ZWN0ZWQgRU1hcDxVUkksRWRnZT4gZ2V0SWRlbnRpZmlhYmxlTWFwKEdyYXBoIGdyYXBoKSB7CisJCQlyZXR1cm4gZ3JhcGguZ2V0RWRnZXMoKTsKKwkJfSAvLyBnZXRJZGVudGlmaWFibGVNYXAKKworCQlAT3ZlcnJpZGUKKwkJcHJvdGVjdGVkIEVPYmplY3QgZ2V0TWFwRW50cnkoVVJJIGtleSwgSWRlbnRpZmlhYmxlIHZhbHVlKSB7CisKKwkJCS8vIFVzZSByZWZsZWN0aW9uIHNpbmNlCisJCQkvLyB0aGVyZSBpcyBubyBnZW5lcmF0ZWQgQVBJIGZvciBtYXAgZW50cmllcy4KKwkJCWZpbmFsIEVPYmplY3QgcmV0VmFsdWUgPSBHcmFwaEZhY3RvcnkuZUlOU1RBTkNFCisJCQkJCS5jcmVhdGUoR3JhcGhQYWNrYWdlLkxpdGVyYWxzLlVSSV9UT19FREdFX01BUF9FTlRSWSk7CisJCQlyZXRWYWx1ZQorCQkJCQkuZVNldChHcmFwaFBhY2thZ2UuTGl0ZXJhbHMuVVJJX1RPX0VER0VfTUFQX0VOVFJZX19LRVksIGtleSk7CisJCQlyZXRWYWx1ZS5lU2V0KEdyYXBoUGFja2FnZS5MaXRlcmFscy5VUklfVE9fRURHRV9NQVBfRU5UUllfX1ZBTFVFLAorCQkJCQl2YWx1ZSk7CisJCQlyZXR1cm4gcmV0VmFsdWU7CisKKwkJfSAvLyBnZXRNYXBFbnRyeQorCQkKKwkJQE92ZXJyaWRlCisJCXByb3RlY3RlZCBFU3RydWN0dXJhbEZlYXR1cmUgZ2V0TWFwRW50cnlWYWx1ZUVSZWZlcmVuY2UoKSB7CisJCQlyZXR1cm4gR3JhcGhQYWNrYWdlLmVJTlNUQU5DRS5nZXRVUklUb0VkZ2VNYXBFbnRyeV9WYWx1ZSgpOworCQl9IC8vIGdldE1hcEVudHJ5VmFsdWVFUmVmZXJlbmNlCisJCQorCisJCS8qKgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZ3JhcGgucHJvdmlkZXIuVHJhbnNpZW50R3JhcGhJdGVtUHJvdmlkZXIjZ2V0TWFwUmVmZXJlbmNlKCkKKwkJICovCisJCUBPdmVycmlkZQorCQlwcm90ZWN0ZWQgRVJlZmVyZW5jZSBnZXRNYXBSZWZlcmVuY2UoKSB7CisJCQlyZXR1cm4gR3JhcGhQYWNrYWdlLkxpdGVyYWxzLkdSQVBIX19FREdFUzsKKwkJfSAvLyBnZXRNYXBSZWZlcmVuY2UKKworCX0gLy8gRWRnZXNJdGVtUHJvdmlkZXIKKworCS8qKgorCSAqIFRoaXMgY2xhc3MgcmVwcmVzZW50cyBhICJOb24tTW9kZWwgSW50ZXJtZWRpYXJ5IFZpZXcgT2JqZWN0Ii4gSXQKKwkgKiByZXByZXNlbnRzIHRoZSAiTm9kZXMiIG9mIHRoZSBncmFwaC4KKwkgKi8KKwlwcm90ZWN0ZWQgc3RhdGljIGNsYXNzIE5vZGVzSXRlbVByb3ZpZGVyIGV4dGVuZHMgVHJhbnNpZW50R3JhcGhJdGVtUHJvdmlkZXIgeworCisJCS8qKgorCQkgKiBAcGFyYW0gYWRhcHRlckZhY3RvcnkKKwkJICogQHBhcmFtIGdyYXBoCisJCSAqLworCQlwdWJsaWMgTm9kZXNJdGVtUHJvdmlkZXIoQWRhcHRlckZhY3RvcnkgYWRhcHRlckZhY3RvcnksIEdyYXBoIGdyYXBoKSB7CisJCQlzdXBlcihhZGFwdGVyRmFjdG9yeSwgZ3JhcGgpOworCQl9CisKKwkJLyoqCisJCSAqIEBzZWUgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSXRlbVByb3ZpZGVyQWRhcHRlciNnZXRJbWFnZShqYXZhLmxhbmcuT2JqZWN0KQorCQkgKi8KKwkJQE92ZXJyaWRlCisJCXB1YmxpYyBPYmplY3QgZ2V0SW1hZ2UoT2JqZWN0IG9iamVjdCkgeworCQkJcmV0dXJuIG92ZXJsYXlJbWFnZShvYmplY3QsIGdldFJlc291cmNlTG9jYXRvcigpLmdldEltYWdlKAorCQkJCQkiZnVsbC9jdXN0b21vYmoxNi9Ob2RlIikpOworCQl9CisKKwkJLyoqCisJCSAqIEBzZWUgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuaW1wbC5BZGFwdGVySW1wbCNub3RpZnlDaGFuZ2VkKG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbikKKwkJICovCisJCUBPdmVycmlkZQorCQlwdWJsaWMgdm9pZCBub3RpZnlDaGFuZ2VkKE5vdGlmaWNhdGlvbiBtc2cpIHsKKwkJCXN3aXRjaCAobXNnLmdldEZlYXR1cmVJRChHcmFwaC5jbGFzcykpIHsKKwkJCWNhc2UgR3JhcGhQYWNrYWdlLkdSQVBIX19OT0RFUzoKKwkJCQlmaXJlTm90aWZ5Q2hhbmdlZChuZXcgTm90aWZpY2F0aW9uV3JhcHBlcih0aGlzLCBtc2cpKTsKKwkJCQlyZXR1cm47CisJCQl9IC8vIHN3aXRjaAorCQl9IC8vIG5vdGlmeUNoYW5nZWQKKworCQkvKioKKwkJICogVGhpcyBkZXRlcm1pbmVzIHRoZSBjb250ZW50cyBvZiB0aGUgbGlzdCBvZiAiY2hpbGRyZW4iIHRoYXQgY2FuIGJlCisJCSAqIGFkZGVkIHRvIHRoZSBOb2Rlcy4gV2UgbW9kaWZ5CisJCSAqIHtAbGluayBHcmFwaEl0ZW1Qcm92aWRlciNjb2xsZWN0TmV3Q2hpbGREZXNjcmlwdG9ycyhDb2xsZWN0aW9uLCBPYmplY3QpfQorCQkgKiBzbyB0aGF0IGl0IGRvZXNuJ3QgcmV0dXJuICJOb2RlcyIgYXMgYW4gb3B0aW9uIHRvIGJlIGNyZWF0ZWQgdW5kZXIKKwkJICogR3JhcGguIE9mIHRob3NlIGNoaWxkcmVuLCB0aGlzIGlzIHdoZXJlIHdlIGNyZWF0ZSAiTm9kZXMiLgorCQkgKiAKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JdGVtUHJvdmlkZXJBZGFwdGVyI2NvbGxlY3ROZXdDaGlsZERlc2NyaXB0b3JzKGphdmEudXRpbC5Db2xsZWN0aW9uLAorCQkgKiAgICAgIGphdmEubGFuZy5PYmplY3QpCisJCSAqLworCQlAT3ZlcnJpZGUKKwkJcHJvdGVjdGVkIHZvaWQgY29sbGVjdE5ld0NoaWxkRGVzY3JpcHRvcnMoCisJCQkJQ29sbGVjdGlvbjxPYmplY3Q+IG5ld0NoaWxkRGVzY3JpcHRvcnMsIE9iamVjdCBvYmplY3QpIHsKKwkJCXN1cGVyLmNvbGxlY3ROZXdDaGlsZERlc2NyaXB0b3JzKG5ld0NoaWxkRGVzY3JpcHRvcnMsIG9iamVjdCk7CisJCQluZXdDaGlsZERlc2NyaXB0b3JzLmFkZChjcmVhdGVDaGlsZFBhcmFtZXRlcihHcmFwaFBhY2thZ2UuZUlOU1RBTkNFCisJCQkJCS5nZXRHcmFwaF9Ob2RlcygpLCBHcmFwaEZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZU5vZGUoKSkpOworCQl9IC8vIGNvbGxlY3ROZXdDaGlsZERlc2NyaXB0b3JzCisKKwkJLyoqCisJCSAqIEBzZWUgVHJhbnNpZW50R3JhcGhJdGVtUHJvdmlkZXIjZ2V0VGV4dChqYXZhLmxhbmcuT2JqZWN0KQorCQkgKi8KKwkJQE92ZXJyaWRlCisJCXByb3RlY3RlZCBTdHJpbmcgZ2V0VGV4dCgpIHsKKwkJCS8vIFRPRE8gTkxTICJOb2RlcyIKKwkJCXJldHVybiAiTm9kZXMiOworCQl9IC8vIGdldFRleHQKKworCQkvKioKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmdyYXBoLnByb3ZpZGVyLkdyYXBoSXRlbVByb3ZpZGVyLlRyYW5zaWVudEdyYXBoSXRlbVByb3ZpZGVyI2dldElkZW50aWZpYWJsZU1hcChvcmcuZWNsaXBzZS5zdGVtLmdyYXBoLkdyYXBoKQorCQkgKi8KKwkJQE92ZXJyaWRlCisJCXByb3RlY3RlZCBFTWFwPFVSSSxOb2RlPiBnZXRJZGVudGlmaWFibGVNYXAoR3JhcGggZ3JhcGgpIHsKKwkJCXJldHVybiBncmFwaC5nZXROb2RlcygpOworCQl9CisKKwkJQE92ZXJyaWRlCisJCXByb3RlY3RlZCBFT2JqZWN0IGdldE1hcEVudHJ5KFVSSSBrZXksIElkZW50aWZpYWJsZSB2YWx1ZSkgeworCisJCQkvLyBVc2UgcmVmbGVjdGlvbiBzaW5jZQorCQkJLy8gdGhlcmUgaXMgbm8gZ2VuZXJhdGVkIEFQSSBmb3IgbWFwIGVudHJpZXMuCisJCQlmaW5hbCBFT2JqZWN0IHJldFZhbHVlID0gR3JhcGhGYWN0b3J5LmVJTlNUQU5DRQorCQkJCQkuY3JlYXRlKEdyYXBoUGFja2FnZS5MaXRlcmFscy5VUklfVE9fTk9ERV9NQVBfRU5UUlkpOworCQkJcmV0VmFsdWUKKwkJCQkJLmVTZXQoR3JhcGhQYWNrYWdlLkxpdGVyYWxzLlVSSV9UT19OT0RFX01BUF9FTlRSWV9fS0VZLCBrZXkpOworCQkJcmV0VmFsdWUuZVNldChHcmFwaFBhY2thZ2UuTGl0ZXJhbHMuVVJJX1RPX05PREVfTUFQX0VOVFJZX19WQUxVRSwKKwkJCQkJdmFsdWUpOworCQkJcmV0dXJuIHJldFZhbHVlOworCisJCX0gLy8gZ2V0TWFwRW50cnkKKwkJCisJCUBPdmVycmlkZQorCQlwcm90ZWN0ZWQgRVN0cnVjdHVyYWxGZWF0dXJlIGdldE1hcEVudHJ5VmFsdWVFUmVmZXJlbmNlKCkgeworCQkJcmV0dXJuIEdyYXBoUGFja2FnZS5lSU5TVEFOQ0UuZ2V0VVJJVG9Ob2RlTWFwRW50cnlfVmFsdWUoKTsKKwkJfSAvLyBnZXRNYXBFbnRyeVZhbHVlRVJlZmVyZW5jZQorCQkKKwkJLyoqCisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaC5wcm92aWRlci5HcmFwaEl0ZW1Qcm92aWRlci5UcmFuc2llbnRHcmFwaEl0ZW1Qcm92aWRlciNnZXRNYXBSZWZlcmVuY2UoKQorCQkgKi8KKwkJQE92ZXJyaWRlCisJCXByb3RlY3RlZCBFUmVmZXJlbmNlIGdldE1hcFJlZmVyZW5jZSgpIHsKKwkJCXJldHVybiBHcmFwaFBhY2thZ2UuTGl0ZXJhbHMuR1JBUEhfX05PREVTOworCQl9CisKKwl9IC8vIE5vZGVzSXRlbVByb3ZpZGVyCisKKwkvKioKKwkgKiBUaGlzIGNsYXNzIHJlcHJlc2VudHMgYSAiTm9uLU1vZGVsIEludGVybWVkaWFyeSBWaWV3IE9iamVjdCIuIEl0CisJICogcmVwcmVzZW50cyB0aGUgIk5vZGUgTGFiZWxzIiBvZiB0aGUgZ3JhcGguCisJICovCisJcHJvdGVjdGVkIHN0YXRpYyBjbGFzcyBOb2RlTGFiZWxzSXRlbVByb3ZpZGVyIGV4dGVuZHMKKwkJCVRyYW5zaWVudEdyYXBoSXRlbVByb3ZpZGVyIHsKKworCQkvKioKKwkJICogQHBhcmFtIGFkYXB0ZXJGYWN0b3J5CisJCSAqIEBwYXJhbSBncmFwaAorCQkgKi8KKwkJcHVibGljIE5vZGVMYWJlbHNJdGVtUHJvdmlkZXIoQWRhcHRlckZhY3RvcnkgYWRhcHRlckZhY3RvcnksIEdyYXBoIGdyYXBoKSB7CisJCQlzdXBlcihhZGFwdGVyRmFjdG9yeSwgZ3JhcGgpOworCQl9CisKKwkJLyoqCisJCSAqIEBzZWUgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSXRlbVByb3ZpZGVyQWRhcHRlciNnZXRJbWFnZShqYXZhLmxhbmcuT2JqZWN0KQorCQkgKi8KKwkJQE92ZXJyaWRlCisJCXB1YmxpYyBPYmplY3QgZ2V0SW1hZ2UoT2JqZWN0IG9iamVjdCkgeworCQkJcmV0dXJuIG92ZXJsYXlJbWFnZShvYmplY3QsIGdldFJlc291cmNlTG9jYXRvcigpLmdldEltYWdlKAorCQkJCQkiZnVsbC9jdXN0b21vYmoxNi9TdGF0aWNMYWJlbCIpKTsKKwkJfSAvLyBnZXRJbWFnZQorCisJCS8qKgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LmltcGwuQWRhcHRlckltcGwjbm90aWZ5Q2hhbmdlZChvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb24pCisJCSAqLworCQlAT3ZlcnJpZGUKKwkJcHVibGljIHZvaWQgbm90aWZ5Q2hhbmdlZChOb3RpZmljYXRpb24gbXNnKSB7CisJCQlzd2l0Y2ggKG1zZy5nZXRGZWF0dXJlSUQoR3JhcGguY2xhc3MpKSB7CisJCQljYXNlIEdyYXBoUGFja2FnZS5HUkFQSF9fTk9ERV9MQUJFTFM6CisJCQkJZmlyZU5vdGlmeUNoYW5nZWQobmV3IE5vdGlmaWNhdGlvbldyYXBwZXIodGhpcywgbXNnKSk7CisJCQkJcmV0dXJuOworCQkJfSAvLyBzd2l0Y2gKKwkJfSAvLyBub3RpZnlDaGFuZ2VkCisKKwkJLyoqCisJCSAqIFRoaXMgZGV0ZXJtaW5lcyB0aGUgY29udGVudHMgb2YgdGhlIGxpc3Qgb2YgImNoaWxkcmVuIiB0aGF0IGNhbiBiZQorCQkgKiBhZGRlZCB0byB0aGUgTm9kZSBMYWJlbHMuIFdlIG1vZGlmeQorCQkgKiB7QGxpbmsgR3JhcGhJdGVtUHJvdmlkZXIjY29sbGVjdE5ld0NoaWxkRGVzY3JpcHRvcnMoQ29sbGVjdGlvbiwgT2JqZWN0KX0KKwkJICogc28gdGhhdCBpdCBkb2Vzbid0IHJldHVybiAiTm9kZSBMYWJlbHMiIGFzIGFuIG9wdGlvbiB0byBiZSBjcmVhdGVkCisJCSAqIHVuZGVyIEdyYXBoLiBPZiB0aG9zZSBjaGlsZHJlbiwgdGhpcyBpcyB3aGVyZSB3ZSBjcmVhdGUgIk5vZGUKKwkJICogTGFiZWxzIi4KKwkJICogCisJCSAqIEBzZWUgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSXRlbVByb3ZpZGVyQWRhcHRlciNjb2xsZWN0TmV3Q2hpbGREZXNjcmlwdG9ycyhqYXZhLnV0aWwuQ29sbGVjdGlvbiwKKwkJICogICAgICBqYXZhLmxhbmcuT2JqZWN0KQorCQkgKi8KKwkJQE92ZXJyaWRlCisJCXByb3RlY3RlZCB2b2lkIGNvbGxlY3ROZXdDaGlsZERlc2NyaXB0b3JzKAorCQkJCUNvbGxlY3Rpb248T2JqZWN0PiBuZXdDaGlsZERlc2NyaXB0b3JzLCBPYmplY3Qgb2JqZWN0KSB7CisJCQlzdXBlci5jb2xsZWN0TmV3Q2hpbGREZXNjcmlwdG9ycyhuZXdDaGlsZERlc2NyaXB0b3JzLCBvYmplY3QpOworLy8JCQkgVE9ETyBmaXggR3JhcGhJdGVuUHJvdmlkZXIuY29sbGVjdE5ld0NoaWxkRGVzY3JpcHRvcnMKKy8vCQkJbmV3Q2hpbGREZXNjcmlwdG9ycy5hZGQoY3JlYXRlQ2hpbGRQYXJhbWV0ZXIoR3JhcGhQYWNrYWdlLmVJTlNUQU5DRQorLy8JCQkJCS5nZXRHcmFwaF9Ob2RlTGFiZWxzKCksIEdyYXBoRmFjdG9yeS5lSU5TVEFOQ0UKKy8vCQkJCQkuY3JlYXRlTGFiZWwoKSkpOworCQl9IC8vIGNvbGxlY3ROZXdDaGlsZERlc2NyaXB0b3JzCisKKwkJLyoqCisJCSAqIEBzZWUgVHJhbnNpZW50R3JhcGhJdGVtUHJvdmlkZXIjZ2V0VGV4dChqYXZhLmxhbmcuT2JqZWN0KQorCQkgKi8KKwkJQE92ZXJyaWRlCisJCXByb3RlY3RlZCBTdHJpbmcgZ2V0VGV4dCgpIHsKKwkJCS8vIFRPRE8gTkxTICJOb2RlIExhYmVscyIKKwkJCXJldHVybiAiTm9kZSBMYWJlbHMiOworCQl9IC8vIGdldFRleHQKKworCQkvKioKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmdyYXBoLnByb3ZpZGVyLkdyYXBoSXRlbVByb3ZpZGVyLlRyYW5zaWVudEdyYXBoSXRlbVByb3ZpZGVyI2dldElkZW50aWZpYWJsZU1hcChvcmcuZWNsaXBzZS5zdGVtLmdyYXBoLkdyYXBoKQorCQkgKi8KKwkJQE92ZXJyaWRlCisJCXByb3RlY3RlZCBFTWFwPFVSSSxOb2RlTGFiZWw+IGdldElkZW50aWZpYWJsZU1hcChHcmFwaCBncmFwaCkgeworCQkJcmV0dXJuIGdyYXBoLmdldE5vZGVMYWJlbHMoKTsKKwkJfQorCisJCUBPdmVycmlkZQorCQlwcm90ZWN0ZWQgRU9iamVjdCBnZXRNYXBFbnRyeShVUkkga2V5LCBJZGVudGlmaWFibGUgdmFsdWUpIHsKKworCQkJLy8gVXNlIHJlZmxlY3Rpb24gc2luY2UKKwkJCS8vIHRoZXJlIGlzIG5vIGdlbmVyYXRlZCBBUEkgZm9yIG1hcCBlbnRyaWVzLgorCQkJZmluYWwgRU9iamVjdCByZXRWYWx1ZSA9IEdyYXBoRmFjdG9yeS5lSU5TVEFOQ0UKKwkJCQkJLmNyZWF0ZShHcmFwaFBhY2thZ2UuTGl0ZXJhbHMuVVJJX1RPX05PREVfTEFCRUxfTUFQX0VOVFJZKTsKKwkJCXJldFZhbHVlCisJCQkJCS5lU2V0KEdyYXBoUGFja2FnZS5MaXRlcmFscy5VUklfVE9fTk9ERV9MQUJFTF9NQVBfRU5UUllfX0tFWSwga2V5KTsKKwkJCXJldFZhbHVlLmVTZXQoR3JhcGhQYWNrYWdlLkxpdGVyYWxzLlVSSV9UT19OT0RFX0xBQkVMX01BUF9FTlRSWV9fVkFMVUUsCisJCQkJCXZhbHVlKTsKKwkJCXJldHVybiByZXRWYWx1ZTsKKworCQl9IC8vIGdldE1hcEVudHJ5CisJCQorCQlAT3ZlcnJpZGUKKwkJcHJvdGVjdGVkIEVTdHJ1Y3R1cmFsRmVhdHVyZSBnZXRNYXBFbnRyeVZhbHVlRVJlZmVyZW5jZSgpIHsKKwkJCXJldHVybiBHcmFwaFBhY2thZ2UuZUlOU1RBTkNFLmdldFVSSVRvTm9kZUxhYmVsTWFwRW50cnlfVmFsdWUoKTsKKwkJfSAvLyBnZXRNYXBFbnRyeVZhbHVlRVJlZmVyZW5jZQorCQkKKwkJLyoqCisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaC5wcm92aWRlci5HcmFwaEl0ZW1Qcm92aWRlci5UcmFuc2llbnRHcmFwaEl0ZW1Qcm92aWRlciNnZXRNYXBSZWZlcmVuY2UoKQorCQkgKi8KKwkJQE92ZXJyaWRlCisJCXByb3RlY3RlZCBFUmVmZXJlbmNlIGdldE1hcFJlZmVyZW5jZSgpIHsKKwkJCXJldHVybiBHcmFwaFBhY2thZ2UuTGl0ZXJhbHMuR1JBUEhfX05PREVfTEFCRUxTOworCQl9CisKKwl9IC8vIE5vZGVMYWJlbHNJdGVtUHJvdmlkZXIKKworCS8qKgorCSAqIFRoaXMgY2xhc3MgcmVwcmVzZW50cyBhICJOb24tTW9kZWwgSW50ZXJtZWRpYXJ5IFZpZXcgT2JqZWN0Ii4gSXQKKwkgKiByZXByZXNlbnRzIHRoZSAiR3JhcGggTGFiZWxzIiBvZiB0aGUgZ3JhcGguCisJICovCisJcHJvdGVjdGVkIHN0YXRpYyBjbGFzcyBHcmFwaExhYmVsc0l0ZW1Qcm92aWRlciBleHRlbmRzCisJCQlUcmFuc2llbnRHcmFwaEl0ZW1Qcm92aWRlciB7CisKKwkJLyoqCisJCSAqIEBwYXJhbSBhZGFwdGVyRmFjdG9yeQorCQkgKiBAcGFyYW0gZ3JhcGgKKwkJICovCisJCXB1YmxpYyBHcmFwaExhYmVsc0l0ZW1Qcm92aWRlcihBZGFwdGVyRmFjdG9yeSBhZGFwdGVyRmFjdG9yeSwKKwkJCQlHcmFwaCBncmFwaCkgeworCQkJc3VwZXIoYWRhcHRlckZhY3RvcnksIGdyYXBoKTsKKwkJfQorCisJCS8qKgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkl0ZW1Qcm92aWRlckFkYXB0ZXIjZ2V0SW1hZ2UoamF2YS5sYW5nLk9iamVjdCkKKwkJICovCisJCUBPdmVycmlkZQorCQlwdWJsaWMgT2JqZWN0IGdldEltYWdlKE9iamVjdCBvYmplY3QpIHsKKwkJCXJldHVybiBvdmVybGF5SW1hZ2Uob2JqZWN0LCBnZXRSZXNvdXJjZUxvY2F0b3IoKS5nZXRJbWFnZSgKKwkJCQkJImZ1bGwvY3VzdG9tb2JqMTYvU3RhdGljTGFiZWwiKSk7CisJCX0gLy8gZ2V0SW1hZ2UKKworCQkvKioKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5pbXBsLkFkYXB0ZXJJbXBsI25vdGlmeUNoYW5nZWQob3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uKQorCQkgKi8KKwkJQE92ZXJyaWRlCisJCXB1YmxpYyB2b2lkIG5vdGlmeUNoYW5nZWQoTm90aWZpY2F0aW9uIG1zZykgeworCQkJc3dpdGNoIChtc2cuZ2V0RmVhdHVyZUlEKEdyYXBoLmNsYXNzKSkgeworCQkJY2FzZSBHcmFwaFBhY2thZ2UuR1JBUEhfX0dSQVBIX0xBQkVMUzoKKwkJCQlmaXJlTm90aWZ5Q2hhbmdlZChuZXcgTm90aWZpY2F0aW9uV3JhcHBlcih0aGlzLCBtc2cpKTsKKwkJCQlyZXR1cm47CisJCQl9IC8vIHN3aXRjaAorCQl9IC8vIG5vdGlmeUNoYW5nZWQKKworCQkvKioKKwkJICogVGhpcyBkZXRlcm1pbmVzIHRoZSBjb250ZW50cyBvZiB0aGUgbGlzdCBvZiAiY2hpbGRyZW4iIHRoYXQgY2FuIGJlCisJCSAqIGFkZGVkIHRvIHRoZSBHcmFwaCBMYWJlbHMuIFdlIG1vZGlmeQorCQkgKiB7QGxpbmsgR3JhcGhJdGVtUHJvdmlkZXIjY29sbGVjdE5ld0NoaWxkRGVzY3JpcHRvcnMoQ29sbGVjdGlvbiwgT2JqZWN0KX0KKwkJICogc28gdGhhdCBpdCBkb2Vzbid0IHJldHVybiAiR3JhcGggTGFiZWxzIiBhcyBhbiBvcHRpb24gdG8gYmUgY3JlYXRlZAorCQkgKiB1bmRlciBHcmFwaC4gT2YgdGhvc2UgY2hpbGRyZW4sIHRoaXMgaXMgd2hlcmUgd2UgY3JlYXRlICJHcmFwaAorCQkgKiBMYWJlbHMiLgorCQkgKiAKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JdGVtUHJvdmlkZXJBZGFwdGVyI2NvbGxlY3ROZXdDaGlsZERlc2NyaXB0b3JzKGphdmEudXRpbC5Db2xsZWN0aW9uLAorCQkgKiAgICAgIGphdmEubGFuZy5PYmplY3QpCisJCSAqLworCQlAT3ZlcnJpZGUKKwkJcHJvdGVjdGVkIHZvaWQgY29sbGVjdE5ld0NoaWxkRGVzY3JpcHRvcnMoCisJCQkJQ29sbGVjdGlvbjxPYmplY3Q+IG5ld0NoaWxkRGVzY3JpcHRvcnMsIE9iamVjdCBvYmplY3QpIHsKKwkJCXN1cGVyLmNvbGxlY3ROZXdDaGlsZERlc2NyaXB0b3JzKG5ld0NoaWxkRGVzY3JpcHRvcnMsIG9iamVjdCk7CisJCQkKKy8vCQkJIFRPRE8gZml4IEdyYXBoTGFiZWxzSXRlbVByb3ZpZGVyLmNvbGxlY3ROZXdDaGlsZERlc2NyaXB0b3JzCisvLwkJCW5ld0NoaWxkRGVzY3JpcHRvcnMuYWRkKGNyZWF0ZUNoaWxkUGFyYW1ldGVyKEdyYXBoUGFja2FnZS5lSU5TVEFOQ0UKKy8vCQkJCQkuZ2V0R3JhcGhfR3JhcGhMYWJlbHMoKSwgR3JhcGhGYWN0b3J5LmVJTlNUQU5DRQorLy8JCQkJCS5jcmVhdGVMYWJlbCgpKSk7CisJCX0gLy8gY29sbGVjdE5ld0NoaWxkRGVzY3JpcHRvcnMKKworCQkvKioKKwkJICogQHNlZSBUcmFuc2llbnRHcmFwaEl0ZW1Qcm92aWRlciNnZXRUZXh0KGphdmEubGFuZy5PYmplY3QpCisJCSAqLworCQlAT3ZlcnJpZGUKKwkJcHJvdGVjdGVkIFN0cmluZyBnZXRUZXh0KCkgeworCQkJLy8gVE9ETyBOTFMgIkdyYXBoTGFiZWxzIgorCQkJcmV0dXJuICJHcmFwaCBMYWJlbHMiOworCQl9IC8vIGdldFRleHQKKworCQkvKioKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmdyYXBoLnByb3ZpZGVyLkdyYXBoSXRlbVByb3ZpZGVyLlRyYW5zaWVudEdyYXBoSXRlbVByb3ZpZGVyI2dldElkZW50aWZpYWJsZU1hcChvcmcuZWNsaXBzZS5zdGVtLmdyYXBoLkdyYXBoKQorCQkgKi8KKwkJQE92ZXJyaWRlCisJCXByb3RlY3RlZCBFTWFwPFVSSSxMYWJlbD4gZ2V0SWRlbnRpZmlhYmxlTWFwKEdyYXBoIGdyYXBoKSB7CisJCQlyZXR1cm4gZ3JhcGguZ2V0R3JhcGhMYWJlbHMoKTsKKwkJfQorCisJCUBPdmVycmlkZQorCQlwcm90ZWN0ZWQgRU9iamVjdCBnZXRNYXBFbnRyeShVUkkga2V5LCBJZGVudGlmaWFibGUgdmFsdWUpIHsKKworCQkJLy8gVXNlIHJlZmxlY3Rpb24gc2luY2UKKwkJCS8vIHRoZXJlIGlzIG5vIGdlbmVyYXRlZCBBUEkgZm9yIG1hcCBlbnRyaWVzLgorCQkJZmluYWwgRU9iamVjdCByZXRWYWx1ZSA9IEdyYXBoRmFjdG9yeS5lSU5TVEFOQ0UKKwkJCQkJLmNyZWF0ZShHcmFwaFBhY2thZ2UuTGl0ZXJhbHMuVVJJX1RPX0xBQkVMX01BUF9FTlRSWSk7CisJCQlyZXRWYWx1ZQorCQkJCQkuZVNldChHcmFwaFBhY2thZ2UuTGl0ZXJhbHMuVVJJX1RPX0xBQkVMX01BUF9FTlRSWV9fS0VZLCBrZXkpOworCQkJcmV0VmFsdWUuZVNldChHcmFwaFBhY2thZ2UuTGl0ZXJhbHMuVVJJX1RPX0xBQkVMX01BUF9FTlRSWV9fVkFMVUUsCisJCQkJCXZhbHVlKTsKKwkJCXJldHVybiByZXRWYWx1ZTsKKworCQl9IC8vIGdldE1hcEVudHJ5CisJCQorCQlAT3ZlcnJpZGUKKwkJcHJvdGVjdGVkIEVTdHJ1Y3R1cmFsRmVhdHVyZSBnZXRNYXBFbnRyeVZhbHVlRVJlZmVyZW5jZSgpIHsKKwkJCXJldHVybiBHcmFwaFBhY2thZ2UuZUlOU1RBTkNFLmdldFVSSVRvTGFiZWxNYXBFbnRyeV9WYWx1ZSgpOworCQl9IC8vIGdldE1hcEVudHJ5VmFsdWVFUmVmZXJlbmNlCisJCQorCQkvKioKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmdyYXBoLnByb3ZpZGVyLkdyYXBoSXRlbVByb3ZpZGVyLlRyYW5zaWVudEdyYXBoSXRlbVByb3ZpZGVyI2dldE1hcFJlZmVyZW5jZSgpCisJCSAqLworCQlAT3ZlcnJpZGUKKwkJcHJvdGVjdGVkIEVSZWZlcmVuY2UgZ2V0TWFwUmVmZXJlbmNlKCkgeworCQkJcmV0dXJuIEdyYXBoUGFja2FnZS5MaXRlcmFscy5HUkFQSF9fR1JBUEhfTEFCRUxTOworCQl9CisKKwl9IC8vIEdyYXBoTGFiZWxzSXRlbVByb3ZpZGVyCisKK30gLy8gR3JhcGhJdGVtUHJvdmlkZXIKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGgvcHJvdmlkZXIvR3JhcGhJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeS5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC9wcm92aWRlci9HcmFwaEl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGY1ZDNkNwotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGgvcHJvdmlkZXIvR3JhcGhJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeS5qYXZhCkBAIC0wLDAgKzEsMzEwIEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5wcm92aWRlcjsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuIAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyAKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0IAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwgCisgKiAKKyAqIENvbnRyaWJ1dG9yczogCisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgCitpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LkFkYXB0ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkNoYW5nZU5vdGlmaWVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkNvbXBvc2VhYmxlQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuQ29tcG9zZWRBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5EaXNwb3NhYmxlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklDaGFuZ2VOb3RpZmllcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JRGlzcG9zYWJsZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JRWRpdGluZ0RvbWFpbkl0ZW1Qcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbUxhYmVsUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1Qcm9wZXJ0eVNvdXJjZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JTm90aWZ5Q2hhbmdlZExpc3RlbmVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklTdHJ1Y3R1cmVkSXRlbUNvbnRlbnRQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JVHJlZUl0ZW1Db250ZW50UHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLnV0aWwuR3JhcGhBZGFwdGVyRmFjdG9yeTsKKworLyoqCisgKiBUaGlzIGlzIHRoZSBmYWN0b3J5IHRoYXQgaXMgdXNlZCB0byBwcm92aWRlIHRoZSBpbnRlcmZhY2VzIG5lZWRlZCB0byBzdXBwb3J0IFZpZXdlcnMuCisgKiBUaGUgYWRhcHRlcnMgZ2VuZXJhdGVkIGJ5IHRoaXMgZmFjdG9yeSBjb252ZXJ0IEVNRiBhZGFwdGVyIG5vdGlmaWNhdGlvbnMgaW50byBjYWxscyB0byB7QGxpbmsgI2ZpcmVOb3RpZnlDaGFuZ2VkIGZpcmVOb3RpZnlDaGFuZ2VkfS4KKyAqIFRoZSBhZGFwdGVycyBhbHNvIHN1cHBvcnQgRWNsaXBzZSBwcm9wZXJ0eSBzaGVldHMuCisgKiBOb3RlIHRoYXQgbW9zdCBvZiB0aGUgYWRhcHRlcnMgYXJlIHNoYXJlZCBhbW9uZyBtdWx0aXBsZSBpbnN0YW5jZXMuCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBHcmFwaEl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5IGV4dGVuZHMgR3JhcGhBZGFwdGVyRmFjdG9yeSBpbXBsZW1lbnRzIENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnksIElDaGFuZ2VOb3RpZmllciwgSURpc3Bvc2FibGUgeworCS8qKgorCSAqIFRoaXMga2VlcHMgdHJhY2sgb2YgdGhlIHJvb3QgYWRhcHRlciBmYWN0b3J5IHRoYXQgZGVsZWdhdGVzIHRvIHRoaXMgYWRhcHRlciBmYWN0b3J5LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBDb21wb3NlZEFkYXB0ZXJGYWN0b3J5IHBhcmVudEFkYXB0ZXJGYWN0b3J5OworCisJLyoqCisJICogVGhpcyBpcyB1c2VkIHRvIGltcGxlbWVudCB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUNoYW5nZU5vdGlmaWVyfS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgSUNoYW5nZU5vdGlmaWVyIGNoYW5nZU5vdGlmaWVyID0gbmV3IENoYW5nZU5vdGlmaWVyKCk7CisKKwkvKioKKwkgKiBUaGlzIGtlZXBzIHRyYWNrIG9mIGFsbCB0aGUgaXRlbSBwcm92aWRlcnMgY3JlYXRlZCwgc28gdGhhdCB0aGV5IGNhbiBiZSB7QGxpbmsgI2Rpc3Bvc2UgZGlzcG9zZWR9LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBEaXNwb3NhYmxlIGRpc3Bvc2FibGUgPSBuZXcgRGlzcG9zYWJsZSgpOworCisJLyoqCisJICogVGhpcyBrZWVwcyB0cmFjayBvZiBhbGwgdGhlIHN1cHBvcnRlZCB0eXBlcyBjaGVja2VkIGJ5IHtAbGluayAjaXNGYWN0b3J5Rm9yVHlwZSBpc0ZhY3RvcnlGb3JUeXBlfS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgQ29sbGVjdGlvbjxPYmplY3Q+IHN1cHBvcnRlZFR5cGVzID0gbmV3IEFycmF5TGlzdDxPYmplY3Q+KCk7CisKKwkvKioKKwkgKiBUaGlzIGNvbnN0cnVjdHMgYW4gaW5zdGFuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEdyYXBoSXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkoKSB7CisJCXN1cHBvcnRlZFR5cGVzLmFkZChJRWRpdGluZ0RvbWFpbkl0ZW1Qcm92aWRlci5jbGFzcyk7CisJCXN1cHBvcnRlZFR5cGVzLmFkZChJU3RydWN0dXJlZEl0ZW1Db250ZW50UHJvdmlkZXIuY2xhc3MpOworCQlzdXBwb3J0ZWRUeXBlcy5hZGQoSVRyZWVJdGVtQ29udGVudFByb3ZpZGVyLmNsYXNzKTsKKwkJc3VwcG9ydGVkVHlwZXMuYWRkKElJdGVtTGFiZWxQcm92aWRlci5jbGFzcyk7CisJCXN1cHBvcnRlZFR5cGVzLmFkZChJSXRlbVByb3BlcnR5U291cmNlLmNsYXNzKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGtlZXBzIHRyYWNrIG9mIHRoZSBvbmUgYWRhcHRlciB1c2VkIGZvciBhbGwge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5FZGdlfSBpbnN0YW5jZXMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIEVkZ2VJdGVtUHJvdmlkZXIgZWRnZUl0ZW1Qcm92aWRlcjsKKworCS8qKgorCSAqIFRoaXMgY3JlYXRlcyBhbiBhZGFwdGVyIGZvciBhIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguRWRnZX0uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlRWRnZUFkYXB0ZXIoKSB7CisJCWlmIChlZGdlSXRlbVByb3ZpZGVyID09IG51bGwpIHsKKwkJCWVkZ2VJdGVtUHJvdmlkZXIgPSBuZXcgRWRnZUl0ZW1Qcm92aWRlcih0aGlzKTsKKwkJfQorCisJCXJldHVybiBlZGdlSXRlbVByb3ZpZGVyOworCX0KKworCS8qKgorCSAqIFRoaXMgY3JlYXRlcyBhbiBhZGFwdGVyIGZvciBhIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguR3JhcGh9LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZUdyYXBoQWRhcHRlcigpIHsKKwkJcmV0dXJuIG5ldyBHcmFwaEl0ZW1Qcm92aWRlcih0aGlzKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGtlZXBzIHRyYWNrIG9mIHRoZSBvbmUgYWRhcHRlciB1c2VkIGZvciBhbGwge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5Ob2RlfSBpbnN0YW5jZXMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIE5vZGVJdGVtUHJvdmlkZXIgbm9kZUl0ZW1Qcm92aWRlcjsKKworCS8qKgorCSAqIFRoaXMgY3JlYXRlcyBhbiBhZGFwdGVyIGZvciBhIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguTm9kZX0uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlTm9kZUFkYXB0ZXIoKSB7CisJCWlmIChub2RlSXRlbVByb3ZpZGVyID09IG51bGwpIHsKKwkJCW5vZGVJdGVtUHJvdmlkZXIgPSBuZXcgTm9kZUl0ZW1Qcm92aWRlcih0aGlzKTsKKwkJfQorCisJCXJldHVybiBub2RlSXRlbVByb3ZpZGVyOworCX0KKworCS8qKgorCSAqIFRoaXMga2VlcHMgdHJhY2sgb2YgdGhlIG9uZSBhZGFwdGVyIHVzZWQgZm9yIGFsbCB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLlNpbXBsZUdyYXBoUGFydGl0aW9uZXJ9IGluc3RhbmNlcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgU2ltcGxlR3JhcGhQYXJ0aXRpb25lckl0ZW1Qcm92aWRlciBzaW1wbGVHcmFwaFBhcnRpdGlvbmVySXRlbVByb3ZpZGVyOworCisJLyoqCisJICogVGhpcyBjcmVhdGVzIGFuIGFkYXB0ZXIgZm9yIGEge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5TaW1wbGVHcmFwaFBhcnRpdGlvbmVyfS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVTaW1wbGVHcmFwaFBhcnRpdGlvbmVyQWRhcHRlcigpIHsKKwkJaWYgKHNpbXBsZUdyYXBoUGFydGl0aW9uZXJJdGVtUHJvdmlkZXIgPT0gbnVsbCkgeworCQkJc2ltcGxlR3JhcGhQYXJ0aXRpb25lckl0ZW1Qcm92aWRlciA9IG5ldyBTaW1wbGVHcmFwaFBhcnRpdGlvbmVySXRlbVByb3ZpZGVyKHRoaXMpOworCQl9CisKKwkJcmV0dXJuIHNpbXBsZUdyYXBoUGFydGl0aW9uZXJJdGVtUHJvdmlkZXI7CisJfQorCisJLyoqCisJICogVGhpcyBrZWVwcyB0cmFjayBvZiB0aGUgb25lIGFkYXB0ZXIgdXNlZCBmb3IgYWxsIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguRXhjaGFuZ2V9IGluc3RhbmNlcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgRXhjaGFuZ2VJdGVtUHJvdmlkZXIgZXhjaGFuZ2VJdGVtUHJvdmlkZXI7CisKKwkvKioKKwkgKiBUaGlzIGNyZWF0ZXMgYW4gYWRhcHRlciBmb3IgYSB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkV4Y2hhbmdlfS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVFeGNoYW5nZUFkYXB0ZXIoKSB7CisJCWlmIChleGNoYW5nZUl0ZW1Qcm92aWRlciA9PSBudWxsKSB7CisJCQlleGNoYW5nZUl0ZW1Qcm92aWRlciA9IG5ldyBFeGNoYW5nZUl0ZW1Qcm92aWRlcih0aGlzKTsKKwkJfQorCisJCXJldHVybiBleGNoYW5nZUl0ZW1Qcm92aWRlcjsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgdGhlIHJvb3QgYWRhcHRlciBmYWN0b3J5IHRoYXQgY29udGFpbnMgdGhpcyBmYWN0b3J5LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBDb21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5IGdldFJvb3RBZGFwdGVyRmFjdG9yeSgpIHsKKwkJcmV0dXJuIHBhcmVudEFkYXB0ZXJGYWN0b3J5ID09IG51bGwgPyB0aGlzIDogcGFyZW50QWRhcHRlckZhY3RvcnkuZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCk7CisJfQorCisJLyoqCisJICogVGhpcyBzZXRzIHRoZSBjb21wb3NlZCBhZGFwdGVyIGZhY3RvcnkgdGhhdCBjb250YWlucyB0aGlzIGZhY3RvcnkuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgc2V0UGFyZW50QWRhcHRlckZhY3RvcnkoQ29tcG9zZWRBZGFwdGVyRmFjdG9yeSBwYXJlbnRBZGFwdGVyRmFjdG9yeSkgeworCQl0aGlzLnBhcmVudEFkYXB0ZXJGYWN0b3J5ID0gcGFyZW50QWRhcHRlckZhY3Rvcnk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIGJvb2xlYW4gaXNGYWN0b3J5Rm9yVHlwZShPYmplY3QgdHlwZSkgeworCQlyZXR1cm4gc3VwcG9ydGVkVHlwZXMuY29udGFpbnModHlwZSkgfHwgc3VwZXIuaXNGYWN0b3J5Rm9yVHlwZSh0eXBlKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGltcGxlbWVudGF0aW9uIHN1YnN0aXR1dGVzIHRoZSBmYWN0b3J5IGl0c2VsZiBhcyB0aGUga2V5IGZvciB0aGUgYWRhcHRlci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgQWRhcHRlciBhZGFwdChOb3RpZmllciBub3RpZmllciwgT2JqZWN0IHR5cGUpIHsKKwkJcmV0dXJuIHN1cGVyLmFkYXB0KG5vdGlmaWVyLCB0aGlzKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAU3VwcHJlc3NXYXJuaW5ncygidW5jaGVja2VkIikKKwlAT3ZlcnJpZGUKKwlwdWJsaWMgT2JqZWN0IGFkYXB0KE9iamVjdCBvYmplY3QsIE9iamVjdCB0eXBlKSB7CisJCWlmIChpc0ZhY3RvcnlGb3JUeXBlKHR5cGUpKSB7CisJCQlPYmplY3QgYWRhcHRlciA9IHN1cGVyLmFkYXB0KG9iamVjdCwgdHlwZSk7CisJCQlpZiAoISh0eXBlIGluc3RhbmNlb2YgQ2xhc3M8Pz4pIHx8ICgoKENsYXNzPD8+KXR5cGUpLmlzSW5zdGFuY2UoYWRhcHRlcikpKSB7CisJCQkJcmV0dXJuIGFkYXB0ZXI7CisJCQl9CisJCX0KKworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBBc3NvY2lhdGVzIGFuIGFkYXB0ZXIgd2l0aCBhIG5vdGlmaWVyIHZpYSB0aGUgYmFzZSBpbXBsZW1lbnRhdGlvbiwgdGhlbiByZWNvcmRzIGl0IHRvIGVuc3VyZSBpdCB3aWxsIGJlIGRpc3Bvc2VkLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIGFzc29jaWF0ZShBZGFwdGVyIGFkYXB0ZXIsIE5vdGlmaWVyIHRhcmdldCkgeworCQlzdXBlci5hc3NvY2lhdGUoYWRhcHRlciwgdGFyZ2V0KTsKKwkJaWYgKGFkYXB0ZXIgIT0gbnVsbCkgeworCQkJZGlzcG9zYWJsZS5hZGQoYWRhcHRlcik7CisJCX0KKwl9CisKKwkvKioKKwkgKiBUaGlzIGFkZHMgYSBsaXN0ZW5lci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBhZGRMaXN0ZW5lcihJTm90aWZ5Q2hhbmdlZExpc3RlbmVyIG5vdGlmeUNoYW5nZWRMaXN0ZW5lcikgeworCQljaGFuZ2VOb3RpZmllci5hZGRMaXN0ZW5lcihub3RpZnlDaGFuZ2VkTGlzdGVuZXIpOworCX0KKworCS8qKgorCSAqIFRoaXMgcmVtb3ZlcyBhIGxpc3RlbmVyLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIHJlbW92ZUxpc3RlbmVyKElOb3RpZnlDaGFuZ2VkTGlzdGVuZXIgbm90aWZ5Q2hhbmdlZExpc3RlbmVyKSB7CisJCWNoYW5nZU5vdGlmaWVyLnJlbW92ZUxpc3RlbmVyKG5vdGlmeUNoYW5nZWRMaXN0ZW5lcik7CisJfQorCisJLyoqCisJICogVGhpcyBkZWxlZ2F0ZXMgdG8ge0BsaW5rICNjaGFuZ2VOb3RpZmllcn0gYW5kIHRvIHtAbGluayAjcGFyZW50QWRhcHRlckZhY3Rvcnl9LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIGZpcmVOb3RpZnlDaGFuZ2VkKE5vdGlmaWNhdGlvbiBub3RpZmljYXRpb24pIHsKKwkJY2hhbmdlTm90aWZpZXIuZmlyZU5vdGlmeUNoYW5nZWQobm90aWZpY2F0aW9uKTsKKworCQlpZiAocGFyZW50QWRhcHRlckZhY3RvcnkgIT0gbnVsbCkgeworCQkJcGFyZW50QWRhcHRlckZhY3RvcnkuZmlyZU5vdGlmeUNoYW5nZWQobm90aWZpY2F0aW9uKTsKKwkJfQorCX0KKworCS8qKgorCSAqIFRoaXMgZGlzcG9zZXMgYWxsIG9mIHRoZSBpdGVtIHByb3ZpZGVycyBjcmVhdGVkIGJ5IHRoaXMgZmFjdG9yeS4gCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgZGlzcG9zZSgpIHsKKwkJZGlzcG9zYWJsZS5kaXNwb3NlKCk7CisJfQorCit9CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoL3Byb3ZpZGVyL0dyYXBoUGFydGl0aW9uZXJJdGVtUHJvdmlkZXIuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGgvcHJvdmlkZXIvR3JhcGhQYXJ0aXRpb25lckl0ZW1Qcm92aWRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJmNDQzY2UKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoL3Byb3ZpZGVyL0dyYXBoUGFydGl0aW9uZXJJdGVtUHJvdmlkZXIuamF2YQpAQCAtMCwwICsxLDE1MSBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGgucHJvdmlkZXI7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIAorICogQ29weXJpZ2h0IChjKSAyMDExIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiAKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdCAKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sIAorICogCisgKiBDb250cmlidXRvcnM6IAorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiAKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5BZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlJlc291cmNlTG9jYXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5Db21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklFZGl0aW5nRG9tYWluSXRlbVByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtTGFiZWxQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbVByb3BlcnR5RGVzY3JpcHRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbVByb3BlcnR5U291cmNlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklTdHJ1Y3R1cmVkSXRlbUNvbnRlbnRQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JVHJlZUl0ZW1Db250ZW50UHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSXRlbVByb3BlcnR5RGVzY3JpcHRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JdGVtUHJvdmlkZXJBZGFwdGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLlZpZXdlck5vdGlmaWNhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLnByb3ZpZGVyLkNvcmVFZGl0UGx1Z2luOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5HcmFwaFBhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkdyYXBoUGFydGl0aW9uZXI7CisKKworLyoqCisgKiBUaGlzIGlzIHRoZSBpdGVtIHByb3ZpZGVyIGFkYXB0ZXIgZm9yIGEge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5HcmFwaFBhcnRpdGlvbmVyfSBvYmplY3QuCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBHcmFwaFBhcnRpdGlvbmVySXRlbVByb3ZpZGVyCisJZXh0ZW5kcyBJdGVtUHJvdmlkZXJBZGFwdGVyCisJaW1wbGVtZW50cworCQlJRWRpdGluZ0RvbWFpbkl0ZW1Qcm92aWRlciwKKwkJSVN0cnVjdHVyZWRJdGVtQ29udGVudFByb3ZpZGVyLAorCQlJVHJlZUl0ZW1Db250ZW50UHJvdmlkZXIsCisJCUlJdGVtTGFiZWxQcm92aWRlciwKKwkJSUl0ZW1Qcm9wZXJ0eVNvdXJjZSB7CisJLyoqCisJICogVGhpcyBjb25zdHJ1Y3RzIGFuIGluc3RhbmNlIGZyb20gYSBmYWN0b3J5IGFuZCBhIG5vdGlmaWVyLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBHcmFwaFBhcnRpdGlvbmVySXRlbVByb3ZpZGVyKEFkYXB0ZXJGYWN0b3J5IGFkYXB0ZXJGYWN0b3J5KSB7CisJCXN1cGVyKGFkYXB0ZXJGYWN0b3J5KTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgdGhlIHByb3BlcnR5IGRlc2NyaXB0b3JzIGZvciB0aGUgYWRhcHRlZCBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgTGlzdDxJSXRlbVByb3BlcnR5RGVzY3JpcHRvcj4gZ2V0UHJvcGVydHlEZXNjcmlwdG9ycyhPYmplY3Qgb2JqZWN0KSB7CisJCWlmIChpdGVtUHJvcGVydHlEZXNjcmlwdG9ycyA9PSBudWxsKSB7CisJCQlzdXBlci5nZXRQcm9wZXJ0eURlc2NyaXB0b3JzKG9iamVjdCk7CisKKwkJCWFkZE51bVByb2Nlc3Nlc1Byb3BlcnR5RGVzY3JpcHRvcihvYmplY3QpOworCQl9CisJCXJldHVybiBpdGVtUHJvcGVydHlEZXNjcmlwdG9yczsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFkZHMgYSBwcm9wZXJ0eSBkZXNjcmlwdG9yIGZvciB0aGUgTnVtIFByb2Nlc3NlcyBmZWF0dXJlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIGFkZE51bVByb2Nlc3Nlc1Byb3BlcnR5RGVzY3JpcHRvcihPYmplY3Qgb2JqZWN0KSB7CisJCWl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzLmFkZAorCQkJKGNyZWF0ZUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IKKwkJCQkoKChDb21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5KWFkYXB0ZXJGYWN0b3J5KS5nZXRSb290QWRhcHRlckZhY3RvcnkoKSwKKwkJCQkgZ2V0UmVzb3VyY2VMb2NhdG9yKCksCisJCQkJIGdldFN0cmluZygiX1VJX0dyYXBoUGFydGl0aW9uZXJfbnVtUHJvY2Vzc2VzX2ZlYXR1cmUiKSwgLy8kTk9OLU5MUy0xJAorCQkJCSBnZXRTdHJpbmcoIl9VSV9Qcm9wZXJ0eURlc2NyaXB0b3JfZGVzY3JpcHRpb24iLCAiX1VJX0dyYXBoUGFydGl0aW9uZXJfbnVtUHJvY2Vzc2VzX2ZlYXR1cmUiLCAiX1VJX0dyYXBoUGFydGl0aW9uZXJfdHlwZSIpLCAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQgLy8kTk9OLU5MUy0zJAorCQkJCSBHcmFwaFBhY2thZ2UuTGl0ZXJhbHMuR1JBUEhfUEFSVElUSU9ORVJfX05VTV9QUk9DRVNTRVMsCisJCQkJIHRydWUsCisJCQkJIGZhbHNlLAorCQkJCSBmYWxzZSwKKwkJCQkgSXRlbVByb3BlcnR5RGVzY3JpcHRvci5JTlRFR1JBTF9WQUxVRV9JTUFHRSwKKwkJCQkgbnVsbCwKKwkJCQkgbnVsbCkpOworCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyB0aGUgbGFiZWwgdGV4dCBmb3IgdGhlIGFkYXB0ZWQgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIFN0cmluZyBnZXRUZXh0KE9iamVjdCBvYmplY3QpIHsKKwkJR3JhcGhQYXJ0aXRpb25lciBncmFwaFBhcnRpdGlvbmVyID0gKEdyYXBoUGFydGl0aW9uZXIpb2JqZWN0OworCQlyZXR1cm4gZ2V0U3RyaW5nKCJfVUlfR3JhcGhQYXJ0aXRpb25lcl90eXBlIikgKyAiICIgKyBncmFwaFBhcnRpdGlvbmVyLmdldE51bVByb2Nlc3NlcygpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKKwl9CisKKwkvKioKKwkgKiBUaGlzIGhhbmRsZXMgbW9kZWwgbm90aWZpY2F0aW9ucyBieSBjYWxsaW5nIHtAbGluayAjdXBkYXRlQ2hpbGRyZW59IHRvIHVwZGF0ZSBhbnkgY2FjaGVkCisJICogY2hpbGRyZW4gYW5kIGJ5IGNyZWF0aW5nIGEgdmlld2VyIG5vdGlmaWNhdGlvbiwgd2hpY2ggaXQgcGFzc2VzIHRvIHtAbGluayAjZmlyZU5vdGlmeUNoYW5nZWR9LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIG5vdGlmeUNoYW5nZWQoTm90aWZpY2F0aW9uIG5vdGlmaWNhdGlvbikgeworCQl1cGRhdGVDaGlsZHJlbihub3RpZmljYXRpb24pOworCisJCXN3aXRjaCAobm90aWZpY2F0aW9uLmdldEZlYXR1cmVJRChHcmFwaFBhcnRpdGlvbmVyLmNsYXNzKSkgeworCQkJY2FzZSBHcmFwaFBhY2thZ2UuR1JBUEhfUEFSVElUSU9ORVJfX05VTV9QUk9DRVNTRVM6CisJCQkJZmlyZU5vdGlmeUNoYW5nZWQobmV3IFZpZXdlck5vdGlmaWNhdGlvbihub3RpZmljYXRpb24sIG5vdGlmaWNhdGlvbi5nZXROb3RpZmllcigpLCBmYWxzZSwgdHJ1ZSkpOworCQkJCXJldHVybjsKKwkJfQorCQlzdXBlci5ub3RpZnlDaGFuZ2VkKG5vdGlmaWNhdGlvbik7CisJfQorCisJLyoqCisJICogVGhpcyBhZGRzIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuZWRpdC5jb21tYW5kLkNvbW1hbmRQYXJhbWV0ZXJ9cyBkZXNjcmliaW5nIHRoZSBjaGlsZHJlbgorCSAqIHRoYXQgY2FuIGJlIGNyZWF0ZWQgdW5kZXIgdGhpcyBvYmplY3QuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgY29sbGVjdE5ld0NoaWxkRGVzY3JpcHRvcnMoQ29sbGVjdGlvbjxPYmplY3Q+IG5ld0NoaWxkRGVzY3JpcHRvcnMsIE9iamVjdCBvYmplY3QpIHsKKwkJc3VwZXIuY29sbGVjdE5ld0NoaWxkRGVzY3JpcHRvcnMobmV3Q2hpbGREZXNjcmlwdG9ycywgb2JqZWN0KTsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm4gdGhlIHJlc291cmNlIGxvY2F0b3IgZm9yIHRoaXMgaXRlbSBwcm92aWRlcidzIHJlc291cmNlcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgUmVzb3VyY2VMb2NhdG9yIGdldFJlc291cmNlTG9jYXRvcigpIHsKKwkJcmV0dXJuIENvcmVFZGl0UGx1Z2luLklOU1RBTkNFOworCX0KKworfQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC9wcm92aWRlci9HcmFwaFRpbWVQcm92aWRlckFkYXB0ZXJGYWN0b3J5LmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoL3Byb3ZpZGVyL0dyYXBoVGltZVByb3ZpZGVyQWRhcHRlckZhY3RvcnkuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMmU3ZWViCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC9wcm92aWRlci9HcmFwaFRpbWVQcm92aWRlckFkYXB0ZXJGYWN0b3J5LmphdmEKQEAgLTAsMCArMSwxNTAgQEAKKy8vIEdyYXBoVGltZVByb3ZpZGVyQWRhcHRlckZhY3RvcnkuamF2YQorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGgucHJvdmlkZXI7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuQWRhcHRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuQ2hhbmdlTm90aWZpZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5Db21wb3NlZEFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklDaGFuZ2VOb3RpZmllcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JTm90aWZ5Q2hhbmdlZExpc3RlbmVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uYWRhcHRlcnMudGltZS5UaW1lUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5hZGFwdGVycy50aW1lLlRpbWVQcm92aWRlckFkYXB0ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5hZGFwdGVycy50aW1lLlRpbWVQcm92aWRlckFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5EeW5hbWljTGFiZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkdyYXBoOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5MYWJlbFZhbHVlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC51dGlsLkdyYXBoQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLlNURU1UaW1lOworCisvKioKKyAqIFRoaXMgY2xhc3MgaXMgYW4ge0BsaW5rIFRpbWVQcm92aWRlckFkYXB0ZXJGYWN0b3J5fS4KKyAqLworcHVibGljIGNsYXNzIEdyYXBoVGltZVByb3ZpZGVyQWRhcHRlckZhY3RvcnkgZXh0ZW5kcyBHcmFwaEFkYXB0ZXJGYWN0b3J5CisJCWltcGxlbWVudHMgVGltZVByb3ZpZGVyQWRhcHRlckZhY3RvcnkgeworCisJLyoqCisJICogVGhpcyBrZWVwcyB0cmFjayBvZiB0aGUgcm9vdCBhZGFwdGVyIGZhY3RvcnkgdGhhdCBkZWxlZ2F0ZXMgdG8gdGhpcworCSAqIGFkYXB0ZXIgZmFjdG9yeS4KKwkgKi8KKwlwcm90ZWN0ZWQgQ29tcG9zZWRBZGFwdGVyRmFjdG9yeSBwYXJlbnRBZGFwdGVyRmFjdG9yeTsKKworCS8qKgorCSAqIFRoaXMgaXMgdXNlZCB0byBpbXBsZW1lbnQge0BsaW5rCisJICogb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUNoYW5nZU5vdGlmaWVyfS4KKwkgKi8KKwlwcm90ZWN0ZWQgSUNoYW5nZU5vdGlmaWVyIGNoYW5nZU5vdGlmaWVyID0gbmV3IENoYW5nZU5vdGlmaWVyKCk7CisKKwkvKioKKwkgKiBEZWZhdWx0IENvbnN0cnVjdG9yCisJICovCisJcHVibGljIEdyYXBoVGltZVByb3ZpZGVyQWRhcHRlckZhY3RvcnkoKSB7CisJCXN1cGVyKCk7CisJCVRpbWVQcm92aWRlckFkYXB0ZXJGYWN0b3J5LklOU1RBTkNFLmFkZEFkYXB0ZXJGYWN0b3J5KHRoaXMpOworCX0KKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLnV0aWwuR3JhcGhBZGFwdGVyRmFjdG9yeSMKKwkgKiAJY3JlYXRlR3JhcGhBZGFwdGVyKCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVHcmFwaEFkYXB0ZXIoKSB7CisJCXJldHVybiBuZXcgR3JhcGhUaW1lUHJvdmlkZXIoKTsKKwl9CisKKwkvKioKKwkgKiBAc2VlCisJICogCW9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklDaGFuZ2VOb3RpZmllciNhZGRMaXN0ZW5lcihvcmcuZWNsaXBzZQorCSAqIAkuZW1mLmVkaXQucHJvdmlkZXIuSU5vdGlmeUNoYW5nZWRMaXN0ZW5lcikKKwkgKi8KKwlwdWJsaWMgdm9pZCBhZGRMaXN0ZW5lcihmaW5hbCBJTm90aWZ5Q2hhbmdlZExpc3RlbmVyIG5vdGlmeUNoYW5nZWRMaXN0ZW5lcikgeworCQljaGFuZ2VOb3RpZmllci5hZGRMaXN0ZW5lcihub3RpZnlDaGFuZ2VkTGlzdGVuZXIpOworCX0KKworCS8qKgorCSAqIEBzZWUKKwkgKiAJb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUNoYW5nZU5vdGlmaWVyI3JlbW92ZUxpc3RlbmVyKG9yZy5lY2xpcHNlCisJICogCS5lbWYuZWRpdC5wcm92aWRlci5JTm90aWZ5Q2hhbmdlZExpc3RlbmVyKQorCSAqLworCXB1YmxpYyB2b2lkIHJlbW92ZUxpc3RlbmVyKAorCQkJZmluYWwgSU5vdGlmeUNoYW5nZWRMaXN0ZW5lciBub3RpZnlDaGFuZ2VkTGlzdGVuZXIpIHsKKwkJY2hhbmdlTm90aWZpZXIucmVtb3ZlTGlzdGVuZXIobm90aWZ5Q2hhbmdlZExpc3RlbmVyKTsKKwl9CisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklDaGFuZ2VOb3RpZmllciNmaXJlTm90aWZ5Q2hhbmdlZChvcmcuCisJICogCWVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uKQorCSAqLworCXB1YmxpYyB2b2lkIGZpcmVOb3RpZnlDaGFuZ2VkKGZpbmFsIE5vdGlmaWNhdGlvbiBub3RpZmljYXRpb24pIHsKKwkJY2hhbmdlTm90aWZpZXIuZmlyZU5vdGlmeUNoYW5nZWQobm90aWZpY2F0aW9uKTsKKwkJaWYgKHBhcmVudEFkYXB0ZXJGYWN0b3J5ICE9IG51bGwpIHsKKwkJCXBhcmVudEFkYXB0ZXJGYWN0b3J5LmZpcmVOb3RpZnlDaGFuZ2VkKG5vdGlmaWNhdGlvbik7CisJCX0KKwl9CisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkNvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnkjCisJICogCWdldFJvb3RBZGFwdGVyRmFjdG9yeSgpCisJICovCisJcHVibGljIENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnkgZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCkgeworCQlyZXR1cm4gcGFyZW50QWRhcHRlckZhY3RvcnkgPT0gbnVsbCA/IHRoaXMgOiBwYXJlbnRBZGFwdGVyRmFjdG9yeQorCQkJCS5nZXRSb290QWRhcHRlckZhY3RvcnkoKTsKKwl9CisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkNvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnkjCisJICogCXNldFBhcmVudEFkYXB0ZXJGYWN0b3J5CisJICogCShvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5Db21wb3NlZEFkYXB0ZXJGYWN0b3J5KQorCSAqLworCXB1YmxpYyB2b2lkIHNldFBhcmVudEFkYXB0ZXJGYWN0b3J5KAorCQkJZmluYWwgQ29tcG9zZWRBZGFwdGVyRmFjdG9yeSBwYXJlbnRBZGFwdGVyRmFjdG9yeSkgeworCQl0aGlzLnBhcmVudEFkYXB0ZXJGYWN0b3J5ID0gcGFyZW50QWRhcHRlckZhY3Rvcnk7CisJfQorCisJLyoqCisJICogQHNlZQorCSAqIAlvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQudXRpbC5TdGFuZGFyZEFkYXB0ZXJGYWN0b3J5CisJICogCSNpc0ZhY3RvcnlGb3JUeXBlKGphdmEubGFuZy5PYmplY3QpCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIGJvb2xlYW4gaXNGYWN0b3J5Rm9yVHlwZShmaW5hbCBPYmplY3QgdHlwZSkgeworCQlyZXR1cm4gdHlwZSA9PSBUaW1lUHJvdmlkZXIuY2xhc3MgfHwgc3VwZXIuaXNGYWN0b3J5Rm9yVHlwZSh0eXBlKTsKKwl9IC8vIGlzRmFjdG9yeUZvclR5cGUKKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSURpc3Bvc2FibGUjZGlzcG9zZSgpCisJICovCisJcHVibGljIHZvaWQgZGlzcG9zZSgpIHsKKwkJLy8gTm90aGluZworCX0KKworCS8qKgorCSAqIFRoaXMgY2xhc3MgaXMgYSB7QGxpbmsgVGltZVByb3ZpZGVyfSBmb3Ige0BsaW5rIEdyYXBofSBpbnN0YW5jZXMuIEl0CisJICogcHJvdmlkZXMgYSB0aW1lIHZhbHVlIGZvciB0aGUgZ3JhcGguIFRoZSB2YWx1ZSBpcyB0aGUgdGltZSB0aGF0IHRoZQorCSAqIHtAbGluayBMYWJlbFZhbHVlfXMgb2Yge0BsaW5rIER5bmFtaWNMYWJlbH0gd2VyZSBsYXN0IHVwZGF0ZWQuCisJICovCisJcHJpdmF0ZSBzdGF0aWMgY2xhc3MgR3JhcGhUaW1lUHJvdmlkZXIgZXh0ZW5kcyBUaW1lUHJvdmlkZXJBZGFwdGVyCisJCQlpbXBsZW1lbnRzIFRpbWVQcm92aWRlciB7CisJCS8qKgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uYWRhcHRlcnMudGltZS5UaW1lUHJvdmlkZXJBZGFwdGVyI2dldFRpbWUoKQorCQkgKi8KKwkJQE92ZXJyaWRlCisJCXB1YmxpYyBTVEVNVGltZSBnZXRUaW1lKCkgeworCQkJR3JhcGggZ3JhcGggPSAoR3JhcGgpZ2V0VGFyZ2V0KCk7CisJCQlyZXR1cm4gZ3JhcGguZ2V0VGltZSgpOworCQl9CisKKwl9IC8vIEdyYXBoVGltZVByb3ZpZGVyCisKK30gLy8gR3JhcGhUaW1lUHJvdmlkZXJBZGFwdGVyRmFjdG9yeQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGgvcHJvdmlkZXIvSW50ZWdyYXRpb25MYWJlbEl0ZW1Qcm92aWRlci5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC9wcm92aWRlci9JbnRlZ3JhdGlvbkxhYmVsSXRlbVByb3ZpZGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzIzMjY2MwotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGgvcHJvdmlkZXIvSW50ZWdyYXRpb25MYWJlbEl0ZW1Qcm92aWRlci5qYXZhCkBAIC0wLDAgKzEsMjMxIEBACisvKioNCisgKiA8Y29weXJpZ2h0Pg0KKyAqIDwvY29weXJpZ2h0Pg0KKyAqDQorICogJElkJA0KKyAqLw0KK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLnByb3ZpZGVyOw0KKw0KKw0KK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsNCitpbXBvcnQgamF2YS51dGlsLkxpc3Q7DQorDQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LkFkYXB0ZXJGYWN0b3J5Ow0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb247DQorDQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5VUkk7DQorDQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkNvbXBvc2VhYmxlQWRhcHRlckZhY3Rvcnk7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklFZGl0aW5nRG9tYWluSXRlbVByb3ZpZGVyOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbUxhYmVsUHJvdmlkZXI7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtUHJvcGVydHlEZXNjcmlwdG9yOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbVByb3BlcnR5U291cmNlOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JU3RydWN0dXJlZEl0ZW1Db250ZW50UHJvdmlkZXI7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklUcmVlSXRlbUNvbnRlbnRQcm92aWRlcjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSXRlbVByb3BlcnR5RGVzY3JpcHRvcjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuVmlld2VyTm90aWZpY2F0aW9uOw0KKw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguR3JhcGhQYWNrYWdlOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguSW50ZWdyYXRpb25MYWJlbDsNCisNCisvKioNCisgKiBUaGlzIGlzIHRoZSBpdGVtIHByb3ZpZGVyIGFkYXB0ZXIgZm9yIGEge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5JbnRlZ3JhdGlvbkxhYmVsfSBvYmplY3QuDQorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisgKiBAZ2VuZXJhdGVkDQorICovDQorcHVibGljIGNsYXNzIEludGVncmF0aW9uTGFiZWxJdGVtUHJvdmlkZXINCisJZXh0ZW5kcyBEeW5hbWljTm9kZUxhYmVsSXRlbVByb3ZpZGVyDQorCWltcGxlbWVudHMNCisJCUlFZGl0aW5nRG9tYWluSXRlbVByb3ZpZGVyLA0KKwkJSVN0cnVjdHVyZWRJdGVtQ29udGVudFByb3ZpZGVyLA0KKwkJSVRyZWVJdGVtQ29udGVudFByb3ZpZGVyLA0KKwkJSUl0ZW1MYWJlbFByb3ZpZGVyLA0KKwkJSUl0ZW1Qcm9wZXJ0eVNvdXJjZSB7DQorCS8qKg0KKwkgKiBUaGlzIGNvbnN0cnVjdHMgYW4gaW5zdGFuY2UgZnJvbSBhIGZhY3RvcnkgYW5kIGEgbm90aWZpZXIuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgSW50ZWdyYXRpb25MYWJlbEl0ZW1Qcm92aWRlcihBZGFwdGVyRmFjdG9yeSBhZGFwdGVyRmFjdG9yeSkgew0KKwkJc3VwZXIoYWRhcHRlckZhY3RvcnkpOw0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIHJldHVybnMgdGhlIHByb3BlcnR5IGRlc2NyaXB0b3JzIGZvciB0aGUgYWRhcHRlZCBjbGFzcy4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCUBPdmVycmlkZQ0KKwlwdWJsaWMgTGlzdDxJSXRlbVByb3BlcnR5RGVzY3JpcHRvcj4gZ2V0UHJvcGVydHlEZXNjcmlwdG9ycyhPYmplY3Qgb2JqZWN0KSB7DQorCQlpZiAoaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMgPT0gbnVsbCkgew0KKwkJCXN1cGVyLmdldFByb3BlcnR5RGVzY3JpcHRvcnMob2JqZWN0KTsNCisNCisJCQlhZGREZWx0YVZhbHVlUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCk7DQorCQkJYWRkVGVtcFZhbHVlUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCk7DQorCQkJYWRkUHJvYmVWYWx1ZVByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QpOw0KKwkJCWFkZEVycm9yU2NhbGVQcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0KTsNCisJCQlhZGRJZGVudGlmaWVyUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCk7DQorCQl9DQorCQlyZXR1cm4gaXRlbVByb3BlcnR5RGVzY3JpcHRvcnM7DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgYWRkcyBhIHByb3BlcnR5IGRlc2NyaXB0b3IgZm9yIHRoZSBEZWx0YSBWYWx1ZSBmZWF0dXJlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIHZvaWQgYWRkRGVsdGFWYWx1ZVByb3BlcnR5RGVzY3JpcHRvcihPYmplY3Qgb2JqZWN0KSB7DQorCQlpdGVtUHJvcGVydHlEZXNjcmlwdG9ycy5hZGQNCisJCQkoY3JlYXRlSXRlbVByb3BlcnR5RGVzY3JpcHRvcg0KKwkJCQkoKChDb21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5KWFkYXB0ZXJGYWN0b3J5KS5nZXRSb290QWRhcHRlckZhY3RvcnkoKSwNCisJCQkJIGdldFJlc291cmNlTG9jYXRvcigpLA0KKwkJCQkgZ2V0U3RyaW5nKCJfVUlfSW50ZWdyYXRpb25MYWJlbF9kZWx0YVZhbHVlX2ZlYXR1cmUiKSwgLy8kTk9OLU5MUy0xJA0KKwkJCQkgZ2V0U3RyaW5nKCJfVUlfUHJvcGVydHlEZXNjcmlwdG9yX2Rlc2NyaXB0aW9uIiwgIl9VSV9JbnRlZ3JhdGlvbkxhYmVsX2RlbHRhVmFsdWVfZmVhdHVyZSIsICJfVUlfSW50ZWdyYXRpb25MYWJlbF90eXBlIiksIC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJCAvLyROT04tTkxTLTMkDQorCQkJCSBHcmFwaFBhY2thZ2UuTGl0ZXJhbHMuSU5URUdSQVRJT05fTEFCRUxfX0RFTFRBX1ZBTFVFLA0KKwkJCQkgdHJ1ZSwNCisJCQkJIGZhbHNlLA0KKwkJCQkgdHJ1ZSwNCisJCQkJIG51bGwsDQorCQkJCSBudWxsLA0KKwkJCQkgbnVsbCkpOw0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIGFkZHMgYSBwcm9wZXJ0eSBkZXNjcmlwdG9yIGZvciB0aGUgVGVtcCBWYWx1ZSBmZWF0dXJlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIHZvaWQgYWRkVGVtcFZhbHVlUHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdCBvYmplY3QpIHsNCisJCWl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzLmFkZA0KKwkJCShjcmVhdGVJdGVtUHJvcGVydHlEZXNjcmlwdG9yDQorCQkJCSgoKENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnkpYWRhcHRlckZhY3RvcnkpLmdldFJvb3RBZGFwdGVyRmFjdG9yeSgpLA0KKwkJCQkgZ2V0UmVzb3VyY2VMb2NhdG9yKCksDQorCQkJCSBnZXRTdHJpbmcoIl9VSV9JbnRlZ3JhdGlvbkxhYmVsX3RlbXBWYWx1ZV9mZWF0dXJlIiksIC8vJE5PTi1OTFMtMSQNCisJCQkJIGdldFN0cmluZygiX1VJX1Byb3BlcnR5RGVzY3JpcHRvcl9kZXNjcmlwdGlvbiIsICJfVUlfSW50ZWdyYXRpb25MYWJlbF90ZW1wVmFsdWVfZmVhdHVyZSIsICJfVUlfSW50ZWdyYXRpb25MYWJlbF90eXBlIiksIC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJCAvLyROT04tTkxTLTMkDQorCQkJCSBHcmFwaFBhY2thZ2UuTGl0ZXJhbHMuSU5URUdSQVRJT05fTEFCRUxfX1RFTVBfVkFMVUUsDQorCQkJCSB0cnVlLA0KKwkJCQkgZmFsc2UsDQorCQkJCSB0cnVlLA0KKwkJCQkgbnVsbCwNCisJCQkJIG51bGwsDQorCQkJCSBudWxsKSk7DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgYWRkcyBhIHByb3BlcnR5IGRlc2NyaXB0b3IgZm9yIHRoZSBQcm9iZSBWYWx1ZSBmZWF0dXJlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIHZvaWQgYWRkUHJvYmVWYWx1ZVByb3BlcnR5RGVzY3JpcHRvcihPYmplY3Qgb2JqZWN0KSB7DQorCQlpdGVtUHJvcGVydHlEZXNjcmlwdG9ycy5hZGQNCisJCQkoY3JlYXRlSXRlbVByb3BlcnR5RGVzY3JpcHRvcg0KKwkJCQkoKChDb21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5KWFkYXB0ZXJGYWN0b3J5KS5nZXRSb290QWRhcHRlckZhY3RvcnkoKSwNCisJCQkJIGdldFJlc291cmNlTG9jYXRvcigpLA0KKwkJCQkgZ2V0U3RyaW5nKCJfVUlfSW50ZWdyYXRpb25MYWJlbF9wcm9iZVZhbHVlX2ZlYXR1cmUiKSwgLy8kTk9OLU5MUy0xJA0KKwkJCQkgZ2V0U3RyaW5nKCJfVUlfUHJvcGVydHlEZXNjcmlwdG9yX2Rlc2NyaXB0aW9uIiwgIl9VSV9JbnRlZ3JhdGlvbkxhYmVsX3Byb2JlVmFsdWVfZmVhdHVyZSIsICJfVUlfSW50ZWdyYXRpb25MYWJlbF90eXBlIiksIC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJCAvLyROT04tTkxTLTMkDQorCQkJCSBHcmFwaFBhY2thZ2UuTGl0ZXJhbHMuSU5URUdSQVRJT05fTEFCRUxfX1BST0JFX1ZBTFVFLA0KKwkJCQkgdHJ1ZSwNCisJCQkJIGZhbHNlLA0KKwkJCQkgdHJ1ZSwNCisJCQkJIG51bGwsDQorCQkJCSBudWxsLA0KKwkJCQkgbnVsbCkpOw0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIGFkZHMgYSBwcm9wZXJ0eSBkZXNjcmlwdG9yIGZvciB0aGUgRXJyb3IgU2NhbGUgZmVhdHVyZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCB2b2lkIGFkZEVycm9yU2NhbGVQcm9wZXJ0eURlc2NyaXB0b3IoT2JqZWN0IG9iamVjdCkgew0KKwkJaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMuYWRkDQorCQkJKGNyZWF0ZUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3INCisJCQkJKCgoQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSlhZGFwdGVyRmFjdG9yeSkuZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCksDQorCQkJCSBnZXRSZXNvdXJjZUxvY2F0b3IoKSwNCisJCQkJIGdldFN0cmluZygiX1VJX0ludGVncmF0aW9uTGFiZWxfZXJyb3JTY2FsZV9mZWF0dXJlIiksIC8vJE5PTi1OTFMtMSQNCisJCQkJIGdldFN0cmluZygiX1VJX1Byb3BlcnR5RGVzY3JpcHRvcl9kZXNjcmlwdGlvbiIsICJfVUlfSW50ZWdyYXRpb25MYWJlbF9lcnJvclNjYWxlX2ZlYXR1cmUiLCAiX1VJX0ludGVncmF0aW9uTGFiZWxfdHlwZSIpLCAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQgLy8kTk9OLU5MUy0zJA0KKwkJCQkgR3JhcGhQYWNrYWdlLkxpdGVyYWxzLklOVEVHUkFUSU9OX0xBQkVMX19FUlJPUl9TQ0FMRSwNCisJCQkJIHRydWUsDQorCQkJCSBmYWxzZSwNCisJCQkJIHRydWUsDQorCQkJCSBudWxsLA0KKwkJCQkgbnVsbCwNCisJCQkJIG51bGwpKTsNCisJfQ0KKw0KKwkvKioNCisJICogVGhpcyBhZGRzIGEgcHJvcGVydHkgZGVzY3JpcHRvciBmb3IgdGhlIElkZW50aWZpZXIgZmVhdHVyZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCB2b2lkIGFkZElkZW50aWZpZXJQcm9wZXJ0eURlc2NyaXB0b3IoT2JqZWN0IG9iamVjdCkgew0KKwkJaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMuYWRkDQorCQkJKGNyZWF0ZUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3INCisJCQkJKCgoQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSlhZGFwdGVyRmFjdG9yeSkuZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCksDQorCQkJCSBnZXRSZXNvdXJjZUxvY2F0b3IoKSwNCisJCQkJIGdldFN0cmluZygiX1VJX0ludGVncmF0aW9uTGFiZWxfaWRlbnRpZmllcl9mZWF0dXJlIiksIC8vJE5PTi1OTFMtMSQNCisJCQkJIGdldFN0cmluZygiX1VJX1Byb3BlcnR5RGVzY3JpcHRvcl9kZXNjcmlwdGlvbiIsICJfVUlfSW50ZWdyYXRpb25MYWJlbF9pZGVudGlmaWVyX2ZlYXR1cmUiLCAiX1VJX0ludGVncmF0aW9uTGFiZWxfdHlwZSIpLCAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQgLy8kTk9OLU5MUy0zJA0KKwkJCQkgR3JhcGhQYWNrYWdlLkxpdGVyYWxzLklOVEVHUkFUSU9OX0xBQkVMX19JREVOVElGSUVSLA0KKwkJCQkgZmFsc2UsDQorCQkJCSBmYWxzZSwNCisJCQkJIGZhbHNlLA0KKwkJCQkgSXRlbVByb3BlcnR5RGVzY3JpcHRvci5HRU5FUklDX1ZBTFVFX0lNQUdFLA0KKwkJCQkgbnVsbCwNCisJCQkJIG51bGwpKTsNCisJfQ0KKw0KKwkvKioNCisJICogVGhpcyByZXR1cm5zIHRoZSBsYWJlbCB0ZXh0IGZvciB0aGUgYWRhcHRlZCBjbGFzcy4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCUBPdmVycmlkZQ0KKwlwdWJsaWMgU3RyaW5nIGdldFRleHQoT2JqZWN0IG9iamVjdCkgew0KKwkJVVJJIGxhYmVsVmFsdWUgPSAoKEludGVncmF0aW9uTGFiZWwpb2JqZWN0KS5nZXRVUkkoKTsNCisJCVN0cmluZyBsYWJlbCA9IGxhYmVsVmFsdWUgPT0gbnVsbCA/IG51bGwgOiBsYWJlbFZhbHVlLnRvU3RyaW5nKCk7DQorCQlyZXR1cm4gbGFiZWwgPT0gbnVsbCB8fCBsYWJlbC5sZW5ndGgoKSA9PSAwID8NCisJCQlnZXRTdHJpbmcoIl9VSV9JbnRlZ3JhdGlvbkxhYmVsX3R5cGUiKSA6IC8vJE5PTi1OTFMtMSQNCisJCQlnZXRTdHJpbmcoIl9VSV9JbnRlZ3JhdGlvbkxhYmVsX3R5cGUiKSArICIgIiArIGxhYmVsOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQNCisJfQ0KKw0KKwkvKioNCisJICogVGhpcyBoYW5kbGVzIG1vZGVsIG5vdGlmaWNhdGlvbnMgYnkgY2FsbGluZyB7QGxpbmsgI3VwZGF0ZUNoaWxkcmVufSB0byB1cGRhdGUgYW55IGNhY2hlZA0KKwkgKiBjaGlsZHJlbiBhbmQgYnkgY3JlYXRpbmcgYSB2aWV3ZXIgbm90aWZpY2F0aW9uLCB3aGljaCBpdCBwYXNzZXMgdG8ge0BsaW5rICNmaXJlTm90aWZ5Q2hhbmdlZH0uDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlAT3ZlcnJpZGUNCisJcHVibGljIHZvaWQgbm90aWZ5Q2hhbmdlZChOb3RpZmljYXRpb24gbm90aWZpY2F0aW9uKSB7DQorCQl1cGRhdGVDaGlsZHJlbihub3RpZmljYXRpb24pOw0KKw0KKwkJc3dpdGNoIChub3RpZmljYXRpb24uZ2V0RmVhdHVyZUlEKEludGVncmF0aW9uTGFiZWwuY2xhc3MpKSB7DQorCQkJY2FzZSBHcmFwaFBhY2thZ2UuSU5URUdSQVRJT05fTEFCRUxfX0lERU5USUZJRVI6DQorCQkJCWZpcmVOb3RpZnlDaGFuZ2VkKG5ldyBWaWV3ZXJOb3RpZmljYXRpb24obm90aWZpY2F0aW9uLCBub3RpZmljYXRpb24uZ2V0Tm90aWZpZXIoKSwgZmFsc2UsIHRydWUpKTsNCisJCQkJcmV0dXJuOw0KKwkJfQ0KKwkJc3VwZXIubm90aWZ5Q2hhbmdlZChub3RpZmljYXRpb24pOw0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIGFkZHMge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lZGl0LmNvbW1hbmQuQ29tbWFuZFBhcmFtZXRlcn1zIGRlc2NyaWJpbmcgdGhlIGNoaWxkcmVuDQorCSAqIHRoYXQgY2FuIGJlIGNyZWF0ZWQgdW5kZXIgdGhpcyBvYmplY3QuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlAT3ZlcnJpZGUNCisJcHJvdGVjdGVkIHZvaWQgY29sbGVjdE5ld0NoaWxkRGVzY3JpcHRvcnMoQ29sbGVjdGlvbjxPYmplY3Q+IG5ld0NoaWxkRGVzY3JpcHRvcnMsIE9iamVjdCBvYmplY3QpIHsNCisJCXN1cGVyLmNvbGxlY3ROZXdDaGlsZERlc2NyaXB0b3JzKG5ld0NoaWxkRGVzY3JpcHRvcnMsIG9iamVjdCk7DQorCX0NCisNCit9DQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC9wcm92aWRlci9JbnRlZ3JhdGlvbkxhYmVsVmFsdWVJdGVtUHJvdmlkZXIuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGgvcHJvdmlkZXIvSW50ZWdyYXRpb25MYWJlbFZhbHVlSXRlbVByb3ZpZGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGVhNzU3NQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGgvcHJvdmlkZXIvSW50ZWdyYXRpb25MYWJlbFZhbHVlSXRlbVByb3ZpZGVyLmphdmEKQEAgLTAsMCArMSwxNDcgQEAKKy8qKg0KKyAqIDxjb3B5cmlnaHQ+DQorICogPC9jb3B5cmlnaHQ+DQorICoNCisgKiAkSWQkDQorICovDQorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGgucHJvdmlkZXI7DQorDQorDQoraW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOw0KK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsNCisNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuQWRhcHRlckZhY3Rvcnk7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbjsNCisNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeTsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUVkaXRpbmdEb21haW5JdGVtUHJvdmlkZXI7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtTGFiZWxQcm92aWRlcjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtUHJvcGVydHlTb3VyY2U7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklTdHJ1Y3R1cmVkSXRlbUNvbnRlbnRQcm92aWRlcjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVRyZWVJdGVtQ29udGVudFByb3ZpZGVyOw0KKw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguR3JhcGhQYWNrYWdlOw0KKw0KKy8qKg0KKyAqIFRoaXMgaXMgdGhlIGl0ZW0gcHJvdmlkZXIgYWRhcHRlciBmb3IgYSB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkludGVncmF0aW9uTGFiZWxWYWx1ZX0gb2JqZWN0Lg0KKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorICogQGdlbmVyYXRlZA0KKyAqLw0KK3B1YmxpYyBjbGFzcyBJbnRlZ3JhdGlvbkxhYmVsVmFsdWVJdGVtUHJvdmlkZXINCisJZXh0ZW5kcyBMYWJlbFZhbHVlSXRlbVByb3ZpZGVyDQorCWltcGxlbWVudHMNCisJCUlFZGl0aW5nRG9tYWluSXRlbVByb3ZpZGVyLA0KKwkJSVN0cnVjdHVyZWRJdGVtQ29udGVudFByb3ZpZGVyLA0KKwkJSVRyZWVJdGVtQ29udGVudFByb3ZpZGVyLA0KKwkJSUl0ZW1MYWJlbFByb3ZpZGVyLA0KKwkJSUl0ZW1Qcm9wZXJ0eVNvdXJjZSB7DQorCS8qKg0KKwkgKiBUaGlzIGNvbnN0cnVjdHMgYW4gaW5zdGFuY2UgZnJvbSBhIGZhY3RvcnkgYW5kIGEgbm90aWZpZXIuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgSW50ZWdyYXRpb25MYWJlbFZhbHVlSXRlbVByb3ZpZGVyKEFkYXB0ZXJGYWN0b3J5IGFkYXB0ZXJGYWN0b3J5KSB7DQorCQlzdXBlcihhZGFwdGVyRmFjdG9yeSk7DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgcmV0dXJucyB0aGUgcHJvcGVydHkgZGVzY3JpcHRvcnMgZm9yIHRoZSBhZGFwdGVkIGNsYXNzLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJQE92ZXJyaWRlDQorCXB1YmxpYyBMaXN0PElJdGVtUHJvcGVydHlEZXNjcmlwdG9yPiBnZXRQcm9wZXJ0eURlc2NyaXB0b3JzKE9iamVjdCBvYmplY3QpIHsNCisJCWlmIChpdGVtUHJvcGVydHlEZXNjcmlwdG9ycyA9PSBudWxsKSB7DQorCQkJc3VwZXIuZ2V0UHJvcGVydHlEZXNjcmlwdG9ycyhvYmplY3QpOw0KKw0KKwkJCWFkZEFycml2YWxzUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCk7DQorCQkJYWRkRGVwYXJ0dXJlc1Byb3BlcnR5RGVzY3JpcHRvcihvYmplY3QpOw0KKwkJfQ0KKwkJcmV0dXJuIGl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzOw0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIGFkZHMgYSBwcm9wZXJ0eSBkZXNjcmlwdG9yIGZvciB0aGUgQXJyaXZhbHMgZmVhdHVyZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCB2b2lkIGFkZEFycml2YWxzUHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdCBvYmplY3QpIHsNCisJCWl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzLmFkZA0KKwkJCShjcmVhdGVJdGVtUHJvcGVydHlEZXNjcmlwdG9yDQorCQkJCSgoKENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnkpYWRhcHRlckZhY3RvcnkpLmdldFJvb3RBZGFwdGVyRmFjdG9yeSgpLA0KKwkJCQkgZ2V0UmVzb3VyY2VMb2NhdG9yKCksDQorCQkJCSBnZXRTdHJpbmcoIl9VSV9JbnRlZ3JhdGlvbkxhYmVsVmFsdWVfYXJyaXZhbHNfZmVhdHVyZSIpLCAvLyROT04tTkxTLTEkDQorCQkJCSBnZXRTdHJpbmcoIl9VSV9Qcm9wZXJ0eURlc2NyaXB0b3JfZGVzY3JpcHRpb24iLCAiX1VJX0ludGVncmF0aW9uTGFiZWxWYWx1ZV9hcnJpdmFsc19mZWF0dXJlIiwgIl9VSV9JbnRlZ3JhdGlvbkxhYmVsVmFsdWVfdHlwZSIpLCAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQgLy8kTk9OLU5MUy0zJA0KKwkJCQkgR3JhcGhQYWNrYWdlLkxpdGVyYWxzLklOVEVHUkFUSU9OX0xBQkVMX1ZBTFVFX19BUlJJVkFMUywNCisJCQkJIHRydWUsDQorCQkJCSBmYWxzZSwNCisJCQkJIHRydWUsDQorCQkJCSBudWxsLA0KKwkJCQkgbnVsbCwNCisJCQkJIG51bGwpKTsNCisJfQ0KKw0KKwkvKioNCisJICogVGhpcyBhZGRzIGEgcHJvcGVydHkgZGVzY3JpcHRvciBmb3IgdGhlIERlcGFydHVyZXMgZmVhdHVyZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCB2b2lkIGFkZERlcGFydHVyZXNQcm9wZXJ0eURlc2NyaXB0b3IoT2JqZWN0IG9iamVjdCkgew0KKwkJaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMuYWRkDQorCQkJKGNyZWF0ZUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3INCisJCQkJKCgoQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSlhZGFwdGVyRmFjdG9yeSkuZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCksDQorCQkJCSBnZXRSZXNvdXJjZUxvY2F0b3IoKSwNCisJCQkJIGdldFN0cmluZygiX1VJX0ludGVncmF0aW9uTGFiZWxWYWx1ZV9kZXBhcnR1cmVzX2ZlYXR1cmUiKSwgLy8kTk9OLU5MUy0xJA0KKwkJCQkgZ2V0U3RyaW5nKCJfVUlfUHJvcGVydHlEZXNjcmlwdG9yX2Rlc2NyaXB0aW9uIiwgIl9VSV9JbnRlZ3JhdGlvbkxhYmVsVmFsdWVfZGVwYXJ0dXJlc19mZWF0dXJlIiwgIl9VSV9JbnRlZ3JhdGlvbkxhYmVsVmFsdWVfdHlwZSIpLCAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQgLy8kTk9OLU5MUy0zJA0KKwkJCQkgR3JhcGhQYWNrYWdlLkxpdGVyYWxzLklOVEVHUkFUSU9OX0xBQkVMX1ZBTFVFX19ERVBBUlRVUkVTLA0KKwkJCQkgdHJ1ZSwNCisJCQkJIGZhbHNlLA0KKwkJCQkgdHJ1ZSwNCisJCQkJIG51bGwsDQorCQkJCSBudWxsLA0KKwkJCQkgbnVsbCkpOw0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIHJldHVybnMgdGhlIGxhYmVsIHRleHQgZm9yIHRoZSBhZGFwdGVkIGNsYXNzLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJQE92ZXJyaWRlDQorCXB1YmxpYyBTdHJpbmcgZ2V0VGV4dChPYmplY3Qgb2JqZWN0KSB7DQorCQlyZXR1cm4gZ2V0U3RyaW5nKCJfVUlfSW50ZWdyYXRpb25MYWJlbFZhbHVlX3R5cGUiKTsgLy8kTk9OLU5MUy0xJA0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIGhhbmRsZXMgbW9kZWwgbm90aWZpY2F0aW9ucyBieSBjYWxsaW5nIHtAbGluayAjdXBkYXRlQ2hpbGRyZW59IHRvIHVwZGF0ZSBhbnkgY2FjaGVkDQorCSAqIGNoaWxkcmVuIGFuZCBieSBjcmVhdGluZyBhIHZpZXdlciBub3RpZmljYXRpb24sIHdoaWNoIGl0IHBhc3NlcyB0byB7QGxpbmsgI2ZpcmVOb3RpZnlDaGFuZ2VkfS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCUBPdmVycmlkZQ0KKwlwdWJsaWMgdm9pZCBub3RpZnlDaGFuZ2VkKE5vdGlmaWNhdGlvbiBub3RpZmljYXRpb24pIHsNCisJCXVwZGF0ZUNoaWxkcmVuKG5vdGlmaWNhdGlvbik7DQorCQlzdXBlci5ub3RpZnlDaGFuZ2VkKG5vdGlmaWNhdGlvbik7DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgYWRkcyB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmVkaXQuY29tbWFuZC5Db21tYW5kUGFyYW1ldGVyfXMgZGVzY3JpYmluZyB0aGUgY2hpbGRyZW4NCisJICogdGhhdCBjYW4gYmUgY3JlYXRlZCB1bmRlciB0aGlzIG9iamVjdC4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCUBPdmVycmlkZQ0KKwlwcm90ZWN0ZWQgdm9pZCBjb2xsZWN0TmV3Q2hpbGREZXNjcmlwdG9ycyhDb2xsZWN0aW9uPE9iamVjdD4gbmV3Q2hpbGREZXNjcmlwdG9ycywgT2JqZWN0IG9iamVjdCkgew0KKwkJc3VwZXIuY29sbGVjdE5ld0NoaWxkRGVzY3JpcHRvcnMobmV3Q2hpbGREZXNjcmlwdG9ycywgb2JqZWN0KTsNCisJfQ0KKw0KK30NCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoL3Byb3ZpZGVyL0xhYmVsSXRlbVByb3ZpZGVyLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoL3Byb3ZpZGVyL0xhYmVsSXRlbVByb3ZpZGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmMwYTE3ZgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGgvcHJvdmlkZXIvTGFiZWxJdGVtUHJvdmlkZXIuamF2YQpAQCAtMCwwICsxLDIwMSBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGgucHJvdmlkZXI7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIAorICogQ29weXJpZ2h0IChjKSAyMDA2LCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiAKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdCAKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sIAorICogCisgKiBDb250cmlidXRvcnM6IAorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiAKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworIAoraW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOworaW1wb3J0IGphdmEudXRpbC5MaXN0OworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5SZXNvdXJjZUxvY2F0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlVSSTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRVN0cnVjdHVyYWxGZWF0dXJlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkNvbXBvc2VhYmxlQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUVkaXRpbmdEb21haW5JdGVtUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1MYWJlbFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtUHJvcGVydHlEZXNjcmlwdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtUHJvcGVydHlTb3VyY2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVN0cnVjdHVyZWRJdGVtQ29udGVudFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklUcmVlSXRlbUNvbnRlbnRQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JdGVtUHJvcGVydHlEZXNjcmlwdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLlZpZXdlck5vdGlmaWNhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLnByb3ZpZGVyLkNvcmVFZGl0UGx1Z2luOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24ucHJvdmlkZXIuSWRlbnRpZmlhYmxlSXRlbVByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5HcmFwaFBhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkxhYmVsOworCisvKioKKyAqIFRoaXMgaXMgdGhlIGl0ZW0gcHJvdmlkZXIgYWRhcHRlciBmb3IgYSB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkxhYmVsfSBvYmplY3QuCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tCisgKiBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBMYWJlbEl0ZW1Qcm92aWRlciBleHRlbmRzIElkZW50aWZpYWJsZUl0ZW1Qcm92aWRlciBpbXBsZW1lbnRzCisJCUlFZGl0aW5nRG9tYWluSXRlbVByb3ZpZGVyLCBJU3RydWN0dXJlZEl0ZW1Db250ZW50UHJvdmlkZXIsCisJCUlUcmVlSXRlbUNvbnRlbnRQcm92aWRlciwgSUl0ZW1MYWJlbFByb3ZpZGVyLCBJSXRlbVByb3BlcnR5U291cmNlIHsKKwkvKioKKwkgKiBUaGlzIGNvbnN0cnVjdHMgYW4gaW5zdGFuY2UgZnJvbSBhIGZhY3RvcnkgYW5kIGEgbm90aWZpZXIuIDwhLS0KKwkgKiBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBMYWJlbEl0ZW1Qcm92aWRlcihBZGFwdGVyRmFjdG9yeSBhZGFwdGVyRmFjdG9yeSkgeworCQlzdXBlcihhZGFwdGVyRmFjdG9yeSk7CisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIHRoZSBwcm9wZXJ0eSBkZXNjcmlwdG9ycyBmb3IgdGhlIGFkYXB0ZWQgY2xhc3MuIDwhLS0KKwkgKiBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogCisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBMaXN0PElJdGVtUHJvcGVydHlEZXNjcmlwdG9yPiBnZXRQcm9wZXJ0eURlc2NyaXB0b3JzKE9iamVjdCBvYmplY3QpIHsKKwkJaWYgKGl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzID09IG51bGwpIHsKKwkJCXN1cGVyLmdldFByb3BlcnR5RGVzY3JpcHRvcnMob2JqZWN0KTsKKworCQkJYWRkVVJJT2ZJZGVudGlmaWFibGVUb0JlTGFiZWxlZFByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QpOworCQl9CisJCXJldHVybiBpdGVtUHJvcGVydHlEZXNjcmlwdG9yczsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFkZHMgYSBwcm9wZXJ0eSBkZXNjcmlwdG9yIGZvciB0aGUgVVJJIE9mIElkZW50aWZpYWJsZSBUbyBCZSBMYWJlbGVkIGZlYXR1cmUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIGFkZFVSSU9mSWRlbnRpZmlhYmxlVG9CZUxhYmVsZWRQcm9wZXJ0eURlc2NyaXB0b3IoT2JqZWN0IG9iamVjdCkgeworCQlpdGVtUHJvcGVydHlEZXNjcmlwdG9ycy5hZGQKKwkJCShjcmVhdGVJdGVtUHJvcGVydHlEZXNjcmlwdG9yCisJCQkJKCgoQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSlhZGFwdGVyRmFjdG9yeSkuZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCksCisJCQkJIGdldFJlc291cmNlTG9jYXRvcigpLAorCQkJCSBnZXRTdHJpbmcoIl9VSV9MYWJlbF91UklPZklkZW50aWZpYWJsZVRvQmVMYWJlbGVkX2ZlYXR1cmUiKSwgLy8kTk9OLU5MUy0xJAorCQkJCSBnZXRTdHJpbmcoIl9VSV9Qcm9wZXJ0eURlc2NyaXB0b3JfZGVzY3JpcHRpb24iLCAiX1VJX0xhYmVsX3VSSU9mSWRlbnRpZmlhYmxlVG9CZUxhYmVsZWRfZmVhdHVyZSIsICJfVUlfTGFiZWxfdHlwZSIpLCAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQgLy8kTk9OLU5MUy0zJAorCQkJCSBHcmFwaFBhY2thZ2UuTGl0ZXJhbHMuTEFCRUxfX1VSSV9PRl9JREVOVElGSUFCTEVfVE9fQkVfTEFCRUxFRCwKKwkJCQkgZmFsc2UsCisJCQkJIGZhbHNlLAorCQkJCSBmYWxzZSwKKwkJCQkgSXRlbVByb3BlcnR5RGVzY3JpcHRvci5HRU5FUklDX1ZBTFVFX0lNQUdFLAorCQkJCSBudWxsLAorCQkJCSBudWxsKSk7CisJfQorCisJLyoqCisJICogVGhpcyBzcGVjaWZpZXMgaG93IHRvIGltcGxlbWVudCB7QGxpbmsgI2dldENoaWxkcmVufSBhbmQgaXMgdXNlZCB0byBkZWR1Y2UgYW4gYXBwcm9wcmlhdGUgZmVhdHVyZSBmb3IgYW4KKwkgKiB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmVkaXQuY29tbWFuZC5BZGRDb21tYW5kfSwge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lZGl0LmNvbW1hbmQuUmVtb3ZlQ29tbWFuZH0gb3IKKwkgKiB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmVkaXQuY29tbWFuZC5Nb3ZlQ29tbWFuZH0gaW4ge0BsaW5rICNjcmVhdGVDb21tYW5kfS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIENvbGxlY3Rpb248PyBleHRlbmRzIEVTdHJ1Y3R1cmFsRmVhdHVyZT4gZ2V0Q2hpbGRyZW5GZWF0dXJlcyhPYmplY3Qgb2JqZWN0KSB7CisJCWlmIChjaGlsZHJlbkZlYXR1cmVzID09IG51bGwpIHsKKwkJCXN1cGVyLmdldENoaWxkcmVuRmVhdHVyZXMob2JqZWN0KTsKKwkJCWNoaWxkcmVuRmVhdHVyZXMuYWRkKEdyYXBoUGFja2FnZS5MaXRlcmFscy5MQUJFTF9fQ1VSUkVOVF9WQUxVRSk7CisJCX0KKwkJcmV0dXJuIGNoaWxkcmVuRmVhdHVyZXM7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIEVTdHJ1Y3R1cmFsRmVhdHVyZSBnZXRDaGlsZEZlYXR1cmUoT2JqZWN0IG9iamVjdCwgT2JqZWN0IGNoaWxkKSB7CisJCS8vIENoZWNrIHRoZSB0eXBlIG9mIHRoZSBzcGVjaWZpZWQgY2hpbGQgb2JqZWN0IGFuZCByZXR1cm4gdGhlIHByb3BlciBmZWF0dXJlIHRvIHVzZSBmb3IKKwkJLy8gYWRkaW5nIChzZWUge0BsaW5rIEFkZENvbW1hbmR9KSBpdCBhcyBhIGNoaWxkLgorCisJCXJldHVybiBzdXBlci5nZXRDaGlsZEZlYXR1cmUob2JqZWN0LCBjaGlsZCk7CisJfQorCisJLyoqCisJICogQHJldHVybnMgTGFiZWwuZ2lmLiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCXB1YmxpYyBPYmplY3QgZ2V0SW1hZ2UoT2JqZWN0IG9iamVjdCkgeworCQlyZXR1cm4gb3ZlcmxheUltYWdlKG9iamVjdCwgZ2V0UmVzb3VyY2VMb2NhdG9yKCkuZ2V0SW1hZ2UoCisJCQkJImZ1bGwvY3VzdG9tb2JqMTYvU3RhdGljTGFiZWwiKSk7CisJfSAvLyBnZXRJbWFnZQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIHRoZSBsYWJlbCB0ZXh0IGZvciB0aGUgYWRhcHRlZCBjbGFzcy4gPCEtLSBiZWdpbi11c2VyLWRvYworCSAqIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCXB1YmxpYyBTdHJpbmcgZ2V0VGV4dChPYmplY3Qgb2JqZWN0KSB7CisJCXJldHVybiBzdXBlci5nZXRUZXh0KG9iamVjdCk7CisJfSAvLyBnZXRUZXh0CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgdGhlIGxhYmVsIHRleHQgZm9yIHRoZSBhZGFwdGVkIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MKKwkgKiAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworLy8JQE92ZXJyaWRlCisJcHVibGljIFN0cmluZyBnZXRUZXh0R2VuKE9iamVjdCBvYmplY3QpIHsKKwkJVVJJIGxhYmVsVmFsdWUgPSAoKExhYmVsKW9iamVjdCkuZ2V0VVJJKCk7CisJCVN0cmluZyBsYWJlbCA9IGxhYmVsVmFsdWUgPT0gbnVsbCA/IG51bGwgOiBsYWJlbFZhbHVlLnRvU3RyaW5nKCk7CisJCXJldHVybiBsYWJlbCA9PSBudWxsIHx8IGxhYmVsLmxlbmd0aCgpID09IDAgPworCQkJZ2V0U3RyaW5nKCJfVUlfTGFiZWxfdHlwZSIpIDogLy8kTk9OLU5MUy0xJAorCQkJZ2V0U3RyaW5nKCJfVUlfTGFiZWxfdHlwZSIpICsgIiAiICsgbGFiZWw7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAorCX0KKwkKKwkvKioKKwkgKiBUaGlzIGhhbmRsZXMgbW9kZWwgbm90aWZpY2F0aW9ucyBieSBjYWxsaW5nIHtAbGluayAjdXBkYXRlQ2hpbGRyZW59IHRvIHVwZGF0ZSBhbnkgY2FjaGVkCisJICogY2hpbGRyZW4gYW5kIGJ5IGNyZWF0aW5nIGEgdmlld2VyIG5vdGlmaWNhdGlvbiwgd2hpY2ggaXQgcGFzc2VzIHRvIHtAbGluayAjZmlyZU5vdGlmeUNoYW5nZWR9LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0KKwkgKiBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIG5vdGlmeUNoYW5nZWQoTm90aWZpY2F0aW9uIG5vdGlmaWNhdGlvbikgeworCQl1cGRhdGVDaGlsZHJlbihub3RpZmljYXRpb24pOworCisJCXN3aXRjaCAobm90aWZpY2F0aW9uLmdldEZlYXR1cmVJRChMYWJlbC5jbGFzcykpIHsKKwkJCWNhc2UgR3JhcGhQYWNrYWdlLkxBQkVMX19VUklfT0ZfSURFTlRJRklBQkxFX1RPX0JFX0xBQkVMRUQ6CisJCQkJZmlyZU5vdGlmeUNoYW5nZWQobmV3IFZpZXdlck5vdGlmaWNhdGlvbihub3RpZmljYXRpb24sIG5vdGlmaWNhdGlvbi5nZXROb3RpZmllcigpLCBmYWxzZSwgdHJ1ZSkpOworCQkJCXJldHVybjsKKwkJCWNhc2UgR3JhcGhQYWNrYWdlLkxBQkVMX19DVVJSRU5UX1ZBTFVFOgorCQkJCWZpcmVOb3RpZnlDaGFuZ2VkKG5ldyBWaWV3ZXJOb3RpZmljYXRpb24obm90aWZpY2F0aW9uLCBub3RpZmljYXRpb24uZ2V0Tm90aWZpZXIoKSwgdHJ1ZSwgZmFsc2UpKTsKKwkJCQlyZXR1cm47CisJCX0KKwkJc3VwZXIubm90aWZ5Q2hhbmdlZChub3RpZmljYXRpb24pOworCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmVkaXQuY29tbWFuZC5Db21tYW5kUGFyYW1ldGVyfXMgZGVzY3JpYmluZyB0aGUgY2hpbGRyZW4KKwkgKiB0aGF0IGNhbiBiZSBjcmVhdGVkIHVuZGVyIHRoaXMgb2JqZWN0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MKKwkgKiAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIGNvbGxlY3ROZXdDaGlsZERlc2NyaXB0b3JzKENvbGxlY3Rpb248T2JqZWN0PiBuZXdDaGlsZERlc2NyaXB0b3JzLCBPYmplY3Qgb2JqZWN0KSB7CisJCXN1cGVyLmNvbGxlY3ROZXdDaGlsZERlc2NyaXB0b3JzKG5ld0NoaWxkRGVzY3JpcHRvcnMsIG9iamVjdCk7CisJfQorCisJLyoqCisJICogUmV0dXJuIHRoZSByZXNvdXJjZSBsb2NhdG9yIGZvciB0aGlzIGl0ZW0gcHJvdmlkZXIncyByZXNvdXJjZXMuIDwhLS0KKwkgKiBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogCisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBSZXNvdXJjZUxvY2F0b3IgZ2V0UmVzb3VyY2VMb2NhdG9yKCkgeworCQlyZXR1cm4gQ29yZUVkaXRQbHVnaW4uSU5TVEFOQ0U7CisJfQorCit9CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoL3Byb3ZpZGVyL0xhYmVsVmFsdWVJdGVtUHJvdmlkZXIuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGgvcHJvdmlkZXIvTGFiZWxWYWx1ZUl0ZW1Qcm92aWRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI3Yjc1NDQKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoL3Byb3ZpZGVyL0xhYmVsVmFsdWVJdGVtUHJvdmlkZXIuamF2YQpAQCAtMCwwICsxLDExNSBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGgucHJvdmlkZXI7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIAorICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiAKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdCAKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sIAorICogCisgKiBDb250cmlidXRvcnM6IAorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiAKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworIAoraW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOworaW1wb3J0IGphdmEudXRpbC5MaXN0OworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5SZXNvdXJjZUxvY2F0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUVkaXRpbmdEb21haW5JdGVtUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1MYWJlbFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtUHJvcGVydHlEZXNjcmlwdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtUHJvcGVydHlTb3VyY2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVN0cnVjdHVyZWRJdGVtQ29udGVudFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklUcmVlSXRlbUNvbnRlbnRQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JdGVtUHJvdmlkZXJBZGFwdGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24ucHJvdmlkZXIuQ29yZUVkaXRQbHVnaW47CisKKy8qKgorICogVGhpcyBpcyB0aGUgaXRlbSBwcm92aWRlciBhZGFwdGVyIGZvciBhIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguTGFiZWxWYWx1ZX0gb2JqZWN0LgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgTGFiZWxWYWx1ZUl0ZW1Qcm92aWRlcgorCWV4dGVuZHMgSXRlbVByb3ZpZGVyQWRhcHRlcgorCWltcGxlbWVudHMJCisJCUlFZGl0aW5nRG9tYWluSXRlbVByb3ZpZGVyLAkKKwkJSVN0cnVjdHVyZWRJdGVtQ29udGVudFByb3ZpZGVyLAkKKwkJSVRyZWVJdGVtQ29udGVudFByb3ZpZGVyLAkKKwkJSUl0ZW1MYWJlbFByb3ZpZGVyLAkKKwkJSUl0ZW1Qcm9wZXJ0eVNvdXJjZSB7CisJLyoqCisJICogVGhpcyBjb25zdHJ1Y3RzIGFuIGluc3RhbmNlIGZyb20gYSBmYWN0b3J5IGFuZCBhIG5vdGlmaWVyLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBMYWJlbFZhbHVlSXRlbVByb3ZpZGVyKEFkYXB0ZXJGYWN0b3J5IGFkYXB0ZXJGYWN0b3J5KSB7CisJCXN1cGVyKGFkYXB0ZXJGYWN0b3J5KTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgdGhlIHByb3BlcnR5IGRlc2NyaXB0b3JzIGZvciB0aGUgYWRhcHRlZCBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgTGlzdDxJSXRlbVByb3BlcnR5RGVzY3JpcHRvcj4gZ2V0UHJvcGVydHlEZXNjcmlwdG9ycyhPYmplY3Qgb2JqZWN0KSB7CisJCWlmIChpdGVtUHJvcGVydHlEZXNjcmlwdG9ycyA9PSBudWxsKSB7CisJCQlzdXBlci5nZXRQcm9wZXJ0eURlc2NyaXB0b3JzKG9iamVjdCk7CisKKwkJfQorCQlyZXR1cm4gaXRlbVByb3BlcnR5RGVzY3JpcHRvcnM7CisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIHRoZSBsYWJlbCB0ZXh0IGZvciB0aGUgYWRhcHRlZCBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgU3RyaW5nIGdldFRleHQoT2JqZWN0IG9iamVjdCkgeworCQlyZXR1cm4gZ2V0U3RyaW5nKCJfVUlfTGFiZWxWYWx1ZV90eXBlIik7IC8vJE5PTi1OTFMtMSQKKwl9CisKKwkvKioKKwkgKiBUaGlzIGhhbmRsZXMgbW9kZWwgbm90aWZpY2F0aW9ucyBieSBjYWxsaW5nIHtAbGluayAjdXBkYXRlQ2hpbGRyZW59IHRvIHVwZGF0ZSBhbnkgY2FjaGVkCisJICogY2hpbGRyZW4gYW5kIGJ5IGNyZWF0aW5nIGEgdmlld2VyIG5vdGlmaWNhdGlvbiwgd2hpY2ggaXQgcGFzc2VzIHRvIHtAbGluayAjZmlyZU5vdGlmeUNoYW5nZWR9LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIG5vdGlmeUNoYW5nZWQoTm90aWZpY2F0aW9uIG5vdGlmaWNhdGlvbikgeworCQl1cGRhdGVDaGlsZHJlbihub3RpZmljYXRpb24pOworCQlzdXBlci5ub3RpZnlDaGFuZ2VkKG5vdGlmaWNhdGlvbik7CisJfQorCisJLyoqCisJICogVGhpcyBhZGRzIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuZWRpdC5jb21tYW5kLkNvbW1hbmRQYXJhbWV0ZXJ9cyBkZXNjcmliaW5nIHRoZSBjaGlsZHJlbgorCSAqIHRoYXQgY2FuIGJlIGNyZWF0ZWQgdW5kZXIgdGhpcyBvYmplY3QuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgY29sbGVjdE5ld0NoaWxkRGVzY3JpcHRvcnMoQ29sbGVjdGlvbjxPYmplY3Q+IG5ld0NoaWxkRGVzY3JpcHRvcnMsIE9iamVjdCBvYmplY3QpIHsKKwkJc3VwZXIuY29sbGVjdE5ld0NoaWxkRGVzY3JpcHRvcnMobmV3Q2hpbGREZXNjcmlwdG9ycywgb2JqZWN0KTsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm4gdGhlIHJlc291cmNlIGxvY2F0b3IgZm9yIHRoaXMgaXRlbSBwcm92aWRlcidzIHJlc291cmNlcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgUmVzb3VyY2VMb2NhdG9yIGdldFJlc291cmNlTG9jYXRvcigpIHsKKwkJcmV0dXJuIENvcmVFZGl0UGx1Z2luLklOU1RBTkNFOworCX0KKworfQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC9wcm92aWRlci9Ob2RlSXRlbVByb3ZpZGVyLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoL3Byb3ZpZGVyL05vZGVJdGVtUHJvdmlkZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYWRiM2RmCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC9wcm92aWRlci9Ob2RlSXRlbVByb3ZpZGVyLmphdmEKQEAgLTAsMCArMSwxODkgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLnByb3ZpZGVyOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAKKyAqIENvcHlyaWdodCAoYykgMjAwNiwgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4gCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIAorICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wIAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQgCisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbCAKKyAqIAorICogQ29udHJpYnV0b3JzOiAKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOworaW1wb3J0IGphdmEudXRpbC5MaXN0OworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5SZXNvdXJjZUxvY2F0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlVSSTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5Db21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklFZGl0aW5nRG9tYWluSXRlbVByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtTGFiZWxQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbVByb3BlcnR5RGVzY3JpcHRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbVByb3BlcnR5U291cmNlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklTdHJ1Y3R1cmVkSXRlbUNvbnRlbnRQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JVHJlZUl0ZW1Db250ZW50UHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5wcm92aWRlci5Db3JlRWRpdFBsdWdpbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLnByb3ZpZGVyLklkZW50aWZpYWJsZUl0ZW1Qcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguR3JhcGhQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5Ob2RlOworCisvKioKKyAqIFRoaXMgaXMgdGhlIGl0ZW0gcHJvdmlkZXIgYWRhcHRlciBmb3IgYSB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLk5vZGV9IG9iamVjdC4KKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIE5vZGVJdGVtUHJvdmlkZXIKKwlleHRlbmRzIElkZW50aWZpYWJsZUl0ZW1Qcm92aWRlcgorCWltcGxlbWVudHMJCisJCUlFZGl0aW5nRG9tYWluSXRlbVByb3ZpZGVyLAkKKwkJSVN0cnVjdHVyZWRJdGVtQ29udGVudFByb3ZpZGVyLAkKKwkJSVRyZWVJdGVtQ29udGVudFByb3ZpZGVyLAkKKwkJSUl0ZW1MYWJlbFByb3ZpZGVyLAkKKwkJSUl0ZW1Qcm9wZXJ0eVNvdXJjZSB7CisJLyoqCisJICogVGhpcyBjb25zdHJ1Y3RzIGFuIGluc3RhbmNlIGZyb20gYSBmYWN0b3J5IGFuZCBhIG5vdGlmaWVyLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBOb2RlSXRlbVByb3ZpZGVyKEFkYXB0ZXJGYWN0b3J5IGFkYXB0ZXJGYWN0b3J5KSB7CisJCXN1cGVyKGFkYXB0ZXJGYWN0b3J5KTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgdGhlIHByb3BlcnR5IGRlc2NyaXB0b3JzIGZvciB0aGUgYWRhcHRlZCBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgTGlzdDxJSXRlbVByb3BlcnR5RGVzY3JpcHRvcj4gZ2V0UHJvcGVydHlEZXNjcmlwdG9ycyhPYmplY3Qgb2JqZWN0KSB7CisJCWlmIChpdGVtUHJvcGVydHlEZXNjcmlwdG9ycyA9PSBudWxsKSB7CisJCQlzdXBlci5nZXRQcm9wZXJ0eURlc2NyaXB0b3JzKG9iamVjdCk7CisKKwkJCWFkZEVkZ2VzUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCk7CisJCQlhZGRMYWJlbHNQcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0KTsKKwkJfQorCQlyZXR1cm4gaXRlbVByb3BlcnR5RGVzY3JpcHRvcnM7CisJfQorCisJLyoqCisJICogVGhpcyBhZGRzIGEgcHJvcGVydHkgZGVzY3JpcHRvciBmb3IgdGhlIEVkZ2VzIGZlYXR1cmUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgYWRkRWRnZXNQcm9wZXJ0eURlc2NyaXB0b3IoT2JqZWN0IG9iamVjdCkgeworCQlpdGVtUHJvcGVydHlEZXNjcmlwdG9ycy5hZGQKKwkJCShjcmVhdGVJdGVtUHJvcGVydHlEZXNjcmlwdG9yCisJCQkJKCgoQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSlhZGFwdGVyRmFjdG9yeSkuZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCksCisJCQkJIGdldFJlc291cmNlTG9jYXRvcigpLAorCQkJCSBnZXRTdHJpbmcoIl9VSV9Ob2RlX2VkZ2VzX2ZlYXR1cmUiKSwgLy8kTk9OLU5MUy0xJAorCQkJCSBnZXRTdHJpbmcoIl9VSV9Qcm9wZXJ0eURlc2NyaXB0b3JfZGVzY3JpcHRpb24iLCAiX1VJX05vZGVfZWRnZXNfZmVhdHVyZSIsICJfVUlfTm9kZV90eXBlIiksIC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJCAvLyROT04tTkxTLTMkCisJCQkJIEdyYXBoUGFja2FnZS5MaXRlcmFscy5OT0RFX19FREdFUywKKwkJCQkgdHJ1ZSwKKwkJCQkgZmFsc2UsCisJCQkJIHRydWUsCisJCQkJIG51bGwsCisJCQkJIG51bGwsCisJCQkJIG51bGwpKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFkZHMgYSBwcm9wZXJ0eSBkZXNjcmlwdG9yIGZvciB0aGUgTGFiZWxzIGZlYXR1cmUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgYWRkTGFiZWxzUHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdCBvYmplY3QpIHsKKwkJaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMuYWRkCisJCQkoY3JlYXRlSXRlbVByb3BlcnR5RGVzY3JpcHRvcgorCQkJCSgoKENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnkpYWRhcHRlckZhY3RvcnkpLmdldFJvb3RBZGFwdGVyRmFjdG9yeSgpLAorCQkJCSBnZXRSZXNvdXJjZUxvY2F0b3IoKSwKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfTm9kZV9sYWJlbHNfZmVhdHVyZSIpLCAvLyROT04tTkxTLTEkCisJCQkJIGdldFN0cmluZygiX1VJX1Byb3BlcnR5RGVzY3JpcHRvcl9kZXNjcmlwdGlvbiIsICJfVUlfTm9kZV9sYWJlbHNfZmVhdHVyZSIsICJfVUlfTm9kZV90eXBlIiksIC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJCAvLyROT04tTkxTLTMkCisJCQkJIEdyYXBoUGFja2FnZS5MaXRlcmFscy5OT0RFX19MQUJFTFMsCisJCQkJIHRydWUsCisJCQkJIGZhbHNlLAorCQkJCSB0cnVlLAorCQkJCSBudWxsLAorCQkJCSBudWxsLAorCQkJCSBudWxsKSk7CisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIE5vZGUuZ2lmLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlwdWJsaWMgT2JqZWN0IGdldEltYWdlKE9iamVjdCBvYmplY3QpIHsKKwkJcmV0dXJuIG92ZXJsYXlJbWFnZShvYmplY3QsIGdldFJlc291cmNlTG9jYXRvcigpLmdldEltYWdlKCJmdWxsL2N1c3RvbW9iajE2L05vZGUiKSk7CisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIHRoZSBsYWJlbCB0ZXh0IGZvciB0aGUgYWRhcHRlZCBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJcHVibGljIFN0cmluZyBnZXRUZXh0KE9iamVjdCBvYmplY3QpIHsKKwkJcmV0dXJuIHN1cGVyLmdldFRleHQob2JqZWN0KTsKKwl9IC8vIGdldFRleHQKKwkKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgdGhlIGxhYmVsIHRleHQgZm9yIHRoZSBhZGFwdGVkIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworLy8JQE92ZXJyaWRlCisJcHVibGljIFN0cmluZyBnZXRUZXh0R2VuKE9iamVjdCBvYmplY3QpIHsKKwkJVVJJIGxhYmVsVmFsdWUgPSAoKE5vZGUpb2JqZWN0KS5nZXRVUkkoKTsKKwkJU3RyaW5nIGxhYmVsID0gbGFiZWxWYWx1ZSA9PSBudWxsID8gbnVsbCA6IGxhYmVsVmFsdWUudG9TdHJpbmcoKTsKKwkJcmV0dXJuIGxhYmVsID09IG51bGwgfHwgbGFiZWwubGVuZ3RoKCkgPT0gMCA/CisJCQlnZXRTdHJpbmcoIl9VSV9Ob2RlX3R5cGUiKSA6IC8vJE5PTi1OTFMtMSQKKwkJCWdldFN0cmluZygiX1VJX05vZGVfdHlwZSIpICsgIiAiICsgbGFiZWw7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAorCX0KKworCS8qKgorCSAqIFRoaXMgaGFuZGxlcyBtb2RlbCBub3RpZmljYXRpb25zIGJ5IGNhbGxpbmcge0BsaW5rICN1cGRhdGVDaGlsZHJlbn0gdG8gdXBkYXRlIGFueSBjYWNoZWQKKwkgKiBjaGlsZHJlbiBhbmQgYnkgY3JlYXRpbmcgYSB2aWV3ZXIgbm90aWZpY2F0aW9uLCB3aGljaCBpdCBwYXNzZXMgdG8ge0BsaW5rICNmaXJlTm90aWZ5Q2hhbmdlZH0uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgbm90aWZ5Q2hhbmdlZChOb3RpZmljYXRpb24gbm90aWZpY2F0aW9uKSB7CisJCXVwZGF0ZUNoaWxkcmVuKG5vdGlmaWNhdGlvbik7CisJCXN1cGVyLm5vdGlmeUNoYW5nZWQobm90aWZpY2F0aW9uKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFkZHMge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lZGl0LmNvbW1hbmQuQ29tbWFuZFBhcmFtZXRlcn1zIGRlc2NyaWJpbmcgdGhlIGNoaWxkcmVuCisJICogdGhhdCBjYW4gYmUgY3JlYXRlZCB1bmRlciB0aGlzIG9iamVjdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgdm9pZCBjb2xsZWN0TmV3Q2hpbGREZXNjcmlwdG9ycyhDb2xsZWN0aW9uPE9iamVjdD4gbmV3Q2hpbGREZXNjcmlwdG9ycywgT2JqZWN0IG9iamVjdCkgeworCQlzdXBlci5jb2xsZWN0TmV3Q2hpbGREZXNjcmlwdG9ycyhuZXdDaGlsZERlc2NyaXB0b3JzLCBvYmplY3QpOworCX0KKworCS8qKgorCSAqIFJldHVybiB0aGUgcmVzb3VyY2UgbG9jYXRvciBmb3IgdGhpcyBpdGVtIHByb3ZpZGVyJ3MgcmVzb3VyY2VzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBSZXNvdXJjZUxvY2F0b3IgZ2V0UmVzb3VyY2VMb2NhdG9yKCkgeworCQlyZXR1cm4gQ29yZUVkaXRQbHVnaW4uSU5TVEFOQ0U7CisJfQorCit9CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoL3Byb3ZpZGVyL05vZGVMYWJlbEl0ZW1Qcm92aWRlci5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC9wcm92aWRlci9Ob2RlTGFiZWxJdGVtUHJvdmlkZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMzM4NDRkCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC9wcm92aWRlci9Ob2RlTGFiZWxJdGVtUHJvdmlkZXIuamF2YQpAQCAtMCwwICsxLDE0MyBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGgucHJvdmlkZXI7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5BZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlVSSTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5Db21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklFZGl0aW5nRG9tYWluSXRlbVByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtTGFiZWxQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbVByb3BlcnR5RGVzY3JpcHRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbVByb3BlcnR5U291cmNlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklTdHJ1Y3R1cmVkSXRlbUNvbnRlbnRQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JVHJlZUl0ZW1Db250ZW50UHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkdyYXBoUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguTm9kZUxhYmVsOworCisvKioKKyAqIFRoaXMgaXMgdGhlIGl0ZW0gcHJvdmlkZXIgYWRhcHRlciBmb3IgYSB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLk5vZGVMYWJlbH0gb2JqZWN0LgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgTm9kZUxhYmVsSXRlbVByb3ZpZGVyCisJZXh0ZW5kcyBMYWJlbEl0ZW1Qcm92aWRlcgorCWltcGxlbWVudHMJCisJCUlFZGl0aW5nRG9tYWluSXRlbVByb3ZpZGVyLAkKKwkJSVN0cnVjdHVyZWRJdGVtQ29udGVudFByb3ZpZGVyLAkKKwkJSVRyZWVJdGVtQ29udGVudFByb3ZpZGVyLAkKKwkJSUl0ZW1MYWJlbFByb3ZpZGVyLAkKKwkJSUl0ZW1Qcm9wZXJ0eVNvdXJjZSB7CisJLyoqCisJICogVGhpcyBjb25zdHJ1Y3RzIGFuIGluc3RhbmNlIGZyb20gYSBmYWN0b3J5IGFuZCBhIG5vdGlmaWVyLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBOb2RlTGFiZWxJdGVtUHJvdmlkZXIoQWRhcHRlckZhY3RvcnkgYWRhcHRlckZhY3RvcnkpIHsKKwkJc3VwZXIoYWRhcHRlckZhY3RvcnkpOworCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyB0aGUgcHJvcGVydHkgZGVzY3JpcHRvcnMgZm9yIHRoZSBhZGFwdGVkIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBMaXN0PElJdGVtUHJvcGVydHlEZXNjcmlwdG9yPiBnZXRQcm9wZXJ0eURlc2NyaXB0b3JzKE9iamVjdCBvYmplY3QpIHsKKwkJaWYgKGl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzID09IG51bGwpIHsKKwkJCXN1cGVyLmdldFByb3BlcnR5RGVzY3JpcHRvcnMob2JqZWN0KTsKKworCQkJYWRkTm9kZVByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QpOworCQl9CisJCXJldHVybiBpdGVtUHJvcGVydHlEZXNjcmlwdG9yczsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFkZHMgYSBwcm9wZXJ0eSBkZXNjcmlwdG9yIGZvciB0aGUgTm9kZSBmZWF0dXJlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIGFkZE5vZGVQcm9wZXJ0eURlc2NyaXB0b3IoT2JqZWN0IG9iamVjdCkgeworCQlpdGVtUHJvcGVydHlEZXNjcmlwdG9ycy5hZGQKKwkJCShjcmVhdGVJdGVtUHJvcGVydHlEZXNjcmlwdG9yCisJCQkJKCgoQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSlhZGFwdGVyRmFjdG9yeSkuZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCksCisJCQkJIGdldFJlc291cmNlTG9jYXRvcigpLAorCQkJCSBnZXRTdHJpbmcoIl9VSV9Ob2RlTGFiZWxfbm9kZV9mZWF0dXJlIiksIC8vJE5PTi1OTFMtMSQKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfUHJvcGVydHlEZXNjcmlwdG9yX2Rlc2NyaXB0aW9uIiwgIl9VSV9Ob2RlTGFiZWxfbm9kZV9mZWF0dXJlIiwgIl9VSV9Ob2RlTGFiZWxfdHlwZSIpLCAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQgLy8kTk9OLU5MUy0zJAorCQkJCSBHcmFwaFBhY2thZ2UuTGl0ZXJhbHMuTk9ERV9MQUJFTF9fTk9ERSwKKwkJCQkgdHJ1ZSwKKwkJCQkgZmFsc2UsCisJCQkJIHRydWUsCisJCQkJIG51bGwsCisJCQkJIG51bGwsCisJCQkJIG51bGwpKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgTm9kZUxhYmVsLmdpZi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgT2JqZWN0IGdldEltYWdlKE9iamVjdCBvYmplY3QpIHsKKwkJcmV0dXJuIG92ZXJsYXlJbWFnZShvYmplY3QsIGdldFJlc291cmNlTG9jYXRvcigpLmdldEltYWdlKCJmdWxsL29iajE2L05vZGVMYWJlbCIpKTsgLy8kTk9OLU5MUy0xJAorCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyB0aGUgbGFiZWwgdGV4dCBmb3IgdGhlIGFkYXB0ZWQgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIFN0cmluZyBnZXRUZXh0KE9iamVjdCBvYmplY3QpIHsKKwkJVVJJIGxhYmVsVmFsdWUgPSAoKE5vZGVMYWJlbClvYmplY3QpLmdldFVSSSgpOworCQlTdHJpbmcgbGFiZWwgPSBsYWJlbFZhbHVlID09IG51bGwgPyBudWxsIDogbGFiZWxWYWx1ZS50b1N0cmluZygpOworCQlyZXR1cm4gbGFiZWwgPT0gbnVsbCB8fCBsYWJlbC5sZW5ndGgoKSA9PSAwID8KKwkJCWdldFN0cmluZygiX1VJX05vZGVMYWJlbF90eXBlIikgOiAvLyROT04tTkxTLTEkCisJCQlnZXRTdHJpbmcoIl9VSV9Ob2RlTGFiZWxfdHlwZSIpICsgIiAiICsgbGFiZWw7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAorCX0KKworCS8qKgorCSAqIFRoaXMgaGFuZGxlcyBtb2RlbCBub3RpZmljYXRpb25zIGJ5IGNhbGxpbmcge0BsaW5rICN1cGRhdGVDaGlsZHJlbn0gdG8gdXBkYXRlIGFueSBjYWNoZWQKKwkgKiBjaGlsZHJlbiBhbmQgYnkgY3JlYXRpbmcgYSB2aWV3ZXIgbm90aWZpY2F0aW9uLCB3aGljaCBpdCBwYXNzZXMgdG8ge0BsaW5rICNmaXJlTm90aWZ5Q2hhbmdlZH0uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgbm90aWZ5Q2hhbmdlZChOb3RpZmljYXRpb24gbm90aWZpY2F0aW9uKSB7CisJCXVwZGF0ZUNoaWxkcmVuKG5vdGlmaWNhdGlvbik7CisJCXN1cGVyLm5vdGlmeUNoYW5nZWQobm90aWZpY2F0aW9uKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFkZHMge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lZGl0LmNvbW1hbmQuQ29tbWFuZFBhcmFtZXRlcn1zIGRlc2NyaWJpbmcgdGhlIGNoaWxkcmVuCisJICogdGhhdCBjYW4gYmUgY3JlYXRlZCB1bmRlciB0aGlzIG9iamVjdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgdm9pZCBjb2xsZWN0TmV3Q2hpbGREZXNjcmlwdG9ycyhDb2xsZWN0aW9uPE9iamVjdD4gbmV3Q2hpbGREZXNjcmlwdG9ycywgT2JqZWN0IG9iamVjdCkgeworCQlzdXBlci5jb2xsZWN0TmV3Q2hpbGREZXNjcmlwdG9ycyhuZXdDaGlsZERlc2NyaXB0b3JzLCBvYmplY3QpOworCX0KKworfQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC9wcm92aWRlci9TaW1wbGVHcmFwaFBhcnRpdGlvbmVySXRlbVByb3ZpZGVyLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoL3Byb3ZpZGVyL1NpbXBsZUdyYXBoUGFydGl0aW9uZXJJdGVtUHJvdmlkZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNWI1NmQ5Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC9wcm92aWRlci9TaW1wbGVHcmFwaFBhcnRpdGlvbmVySXRlbVByb3ZpZGVyLmphdmEKQEAgLTAsMCArMSwxMTMgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLnByb3ZpZGVyOworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogCisgKiBDb3B5cmlnaHQgKGMpIDIwMTEgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuIAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyAKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0IAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwgCisgKiAKKyAqIENvbnRyaWJ1dG9yczogCisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LkFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JRWRpdGluZ0RvbWFpbkl0ZW1Qcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbUxhYmVsUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1Qcm9wZXJ0eVNvdXJjZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JU3RydWN0dXJlZEl0ZW1Db250ZW50UHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVRyZWVJdGVtQ29udGVudFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5TaW1wbGVHcmFwaFBhcnRpdGlvbmVyOworCisvKioKKyAqIFRoaXMgaXMgdGhlIGl0ZW0gcHJvdmlkZXIgYWRhcHRlciBmb3IgYSB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLlNpbXBsZUdyYXBoUGFydGl0aW9uZXJ9IG9iamVjdC4KKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIFNpbXBsZUdyYXBoUGFydGl0aW9uZXJJdGVtUHJvdmlkZXIKKwlleHRlbmRzIEdyYXBoUGFydGl0aW9uZXJJdGVtUHJvdmlkZXIKKwlpbXBsZW1lbnRzCisJCUlFZGl0aW5nRG9tYWluSXRlbVByb3ZpZGVyLAorCQlJU3RydWN0dXJlZEl0ZW1Db250ZW50UHJvdmlkZXIsCisJCUlUcmVlSXRlbUNvbnRlbnRQcm92aWRlciwKKwkJSUl0ZW1MYWJlbFByb3ZpZGVyLAorCQlJSXRlbVByb3BlcnR5U291cmNlIHsKKwkvKioKKwkgKiBUaGlzIGNvbnN0cnVjdHMgYW4gaW5zdGFuY2UgZnJvbSBhIGZhY3RvcnkgYW5kIGEgbm90aWZpZXIuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFNpbXBsZUdyYXBoUGFydGl0aW9uZXJJdGVtUHJvdmlkZXIoQWRhcHRlckZhY3RvcnkgYWRhcHRlckZhY3RvcnkpIHsKKwkJc3VwZXIoYWRhcHRlckZhY3RvcnkpOworCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyB0aGUgcHJvcGVydHkgZGVzY3JpcHRvcnMgZm9yIHRoZSBhZGFwdGVkIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBMaXN0PElJdGVtUHJvcGVydHlEZXNjcmlwdG9yPiBnZXRQcm9wZXJ0eURlc2NyaXB0b3JzKE9iamVjdCBvYmplY3QpIHsKKwkJaWYgKGl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzID09IG51bGwpIHsKKwkJCXN1cGVyLmdldFByb3BlcnR5RGVzY3JpcHRvcnMob2JqZWN0KTsKKworCQl9CisJCXJldHVybiBpdGVtUHJvcGVydHlEZXNjcmlwdG9yczsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgU2ltcGxlR3JhcGhQYXJ0aXRpb25lci5naWYuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIE9iamVjdCBnZXRJbWFnZShPYmplY3Qgb2JqZWN0KSB7CisJCXJldHVybiBvdmVybGF5SW1hZ2Uob2JqZWN0LCBnZXRSZXNvdXJjZUxvY2F0b3IoKS5nZXRJbWFnZSgiZnVsbC9vYmoxNi9TaW1wbGVHcmFwaFBhcnRpdGlvbmVyIikpOyAvLyROT04tTkxTLTEkCisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIHRoZSBsYWJlbCB0ZXh0IGZvciB0aGUgYWRhcHRlZCBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgU3RyaW5nIGdldFRleHQoT2JqZWN0IG9iamVjdCkgeworCQlTaW1wbGVHcmFwaFBhcnRpdGlvbmVyIHNpbXBsZUdyYXBoUGFydGl0aW9uZXIgPSAoU2ltcGxlR3JhcGhQYXJ0aXRpb25lcilvYmplY3Q7CisJCXJldHVybiBnZXRTdHJpbmcoIl9VSV9TaW1wbGVHcmFwaFBhcnRpdGlvbmVyX3R5cGUiKSArICIgIiArIHNpbXBsZUdyYXBoUGFydGl0aW9uZXIuZ2V0TnVtUHJvY2Vzc2VzKCk7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAorCX0KKworCS8qKgorCSAqIFRoaXMgaGFuZGxlcyBtb2RlbCBub3RpZmljYXRpb25zIGJ5IGNhbGxpbmcge0BsaW5rICN1cGRhdGVDaGlsZHJlbn0gdG8gdXBkYXRlIGFueSBjYWNoZWQKKwkgKiBjaGlsZHJlbiBhbmQgYnkgY3JlYXRpbmcgYSB2aWV3ZXIgbm90aWZpY2F0aW9uLCB3aGljaCBpdCBwYXNzZXMgdG8ge0BsaW5rICNmaXJlTm90aWZ5Q2hhbmdlZH0uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgbm90aWZ5Q2hhbmdlZChOb3RpZmljYXRpb24gbm90aWZpY2F0aW9uKSB7CisJCXVwZGF0ZUNoaWxkcmVuKG5vdGlmaWNhdGlvbik7CisJCXN1cGVyLm5vdGlmeUNoYW5nZWQobm90aWZpY2F0aW9uKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFkZHMge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lZGl0LmNvbW1hbmQuQ29tbWFuZFBhcmFtZXRlcn1zIGRlc2NyaWJpbmcgdGhlIGNoaWxkcmVuCisJICogdGhhdCBjYW4gYmUgY3JlYXRlZCB1bmRlciB0aGlzIG9iamVjdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgdm9pZCBjb2xsZWN0TmV3Q2hpbGREZXNjcmlwdG9ycyhDb2xsZWN0aW9uPE9iamVjdD4gbmV3Q2hpbGREZXNjcmlwdG9ycywgT2JqZWN0IG9iamVjdCkgeworCQlzdXBlci5jb2xsZWN0TmV3Q2hpbGREZXNjcmlwdG9ycyhuZXdDaGlsZERlc2NyaXB0b3JzLCBvYmplY3QpOworCX0KKworfQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC9wcm92aWRlci9TdGF0aWNFZGdlTGFiZWxJdGVtUHJvdmlkZXIuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGgvcHJvdmlkZXIvU3RhdGljRWRnZUxhYmVsSXRlbVByb3ZpZGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzIzYTA5YgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGgvcHJvdmlkZXIvU3RhdGljRWRnZUxhYmVsSXRlbVByb3ZpZGVyLmphdmEKQEAgLTAsMCArMSwxMjEgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLnByb3ZpZGVyOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOworaW1wb3J0IGphdmEudXRpbC5MaXN0OworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5VUkk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUVkaXRpbmdEb21haW5JdGVtUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1MYWJlbFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtUHJvcGVydHlEZXNjcmlwdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtUHJvcGVydHlTb3VyY2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVN0cnVjdHVyZWRJdGVtQ29udGVudFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklUcmVlSXRlbUNvbnRlbnRQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguU3RhdGljRWRnZUxhYmVsOworCisvKioKKyAqIFRoaXMgaXMgdGhlIGl0ZW0gcHJvdmlkZXIgYWRhcHRlciBmb3IgYSB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLlN0YXRpY0VkZ2VMYWJlbH0gb2JqZWN0LgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgU3RhdGljRWRnZUxhYmVsSXRlbVByb3ZpZGVyCisJZXh0ZW5kcyBFZGdlTGFiZWxJdGVtUHJvdmlkZXIKKwlpbXBsZW1lbnRzCQorCQlJRWRpdGluZ0RvbWFpbkl0ZW1Qcm92aWRlciwJCisJCUlTdHJ1Y3R1cmVkSXRlbUNvbnRlbnRQcm92aWRlciwJCisJCUlUcmVlSXRlbUNvbnRlbnRQcm92aWRlciwJCisJCUlJdGVtTGFiZWxQcm92aWRlciwJCisJCUlJdGVtUHJvcGVydHlTb3VyY2UgeworCS8qKgorCSAqIFRoaXMgY29uc3RydWN0cyBhbiBpbnN0YW5jZSBmcm9tIGEgZmFjdG9yeSBhbmQgYSBub3RpZmllci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgU3RhdGljRWRnZUxhYmVsSXRlbVByb3ZpZGVyKEFkYXB0ZXJGYWN0b3J5IGFkYXB0ZXJGYWN0b3J5KSB7CisJCXN1cGVyKGFkYXB0ZXJGYWN0b3J5KTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgdGhlIHByb3BlcnR5IGRlc2NyaXB0b3JzIGZvciB0aGUgYWRhcHRlZCBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIExpc3Q8SUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I+IGdldFByb3BlcnR5RGVzY3JpcHRvcnMoT2JqZWN0IG9iamVjdCkgeworCQlpZiAoaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMgPT0gbnVsbCkgeworCQkJc3VwZXIuZ2V0UHJvcGVydHlEZXNjcmlwdG9ycyhvYmplY3QpOworCQl9CisJCXJldHVybiBpdGVtUHJvcGVydHlEZXNjcmlwdG9yczsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgdGhlIHByb3BlcnR5IGRlc2NyaXB0b3JzIGZvciB0aGUgYWRhcHRlZCBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgTGlzdDxJSXRlbVByb3BlcnR5RGVzY3JpcHRvcj4gZ2V0UHJvcGVydHlEZXNjcmlwdG9yc0dlbihPYmplY3Qgb2JqZWN0KSB7CisJCWlmIChpdGVtUHJvcGVydHlEZXNjcmlwdG9ycyA9PSBudWxsKSB7CisJCQlzdXBlci5nZXRQcm9wZXJ0eURlc2NyaXB0b3JzKG9iamVjdCk7CisKKwkJfQorCQlyZXR1cm4gaXRlbVByb3BlcnR5RGVzY3JpcHRvcnM7CisJfQorCQorCS8qKgorCSAqIFRoaXMgcmV0dXJucyB0aGUgbGFiZWwgdGV4dCBmb3IgdGhlIGFkYXB0ZWQgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIFN0cmluZyBnZXRUZXh0KE9iamVjdCBvYmplY3QpIHsKKwkJVVJJIGxhYmVsVmFsdWUgPSAoKFN0YXRpY0VkZ2VMYWJlbClvYmplY3QpLmdldFVSSSgpOworCQlTdHJpbmcgbGFiZWwgPSBsYWJlbFZhbHVlID09IG51bGwgPyBudWxsIDogbGFiZWxWYWx1ZS50b1N0cmluZygpOworCQlyZXR1cm4gbGFiZWwgPT0gbnVsbCB8fCBsYWJlbC5sZW5ndGgoKSA9PSAwID8KKwkJCWdldFN0cmluZygiX1VJX1N0YXRpY0VkZ2VMYWJlbF90eXBlIikgOiAvLyROT04tTkxTLTEkCisJCQlnZXRTdHJpbmcoIl9VSV9TdGF0aWNFZGdlTGFiZWxfdHlwZSIpICsgIiAiICsgbGFiZWw7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAorCX0KKworCS8qKgorCSAqIFRoaXMgaGFuZGxlcyBtb2RlbCBub3RpZmljYXRpb25zIGJ5IGNhbGxpbmcge0BsaW5rICN1cGRhdGVDaGlsZHJlbn0gdG8gdXBkYXRlIGFueSBjYWNoZWQKKwkgKiBjaGlsZHJlbiBhbmQgYnkgY3JlYXRpbmcgYSB2aWV3ZXIgbm90aWZpY2F0aW9uLCB3aGljaCBpdCBwYXNzZXMgdG8ge0BsaW5rICNmaXJlTm90aWZ5Q2hhbmdlZH0uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgbm90aWZ5Q2hhbmdlZChOb3RpZmljYXRpb24gbm90aWZpY2F0aW9uKSB7CisJCXVwZGF0ZUNoaWxkcmVuKG5vdGlmaWNhdGlvbik7CisJCXN1cGVyLm5vdGlmeUNoYW5nZWQobm90aWZpY2F0aW9uKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFkZHMge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lZGl0LmNvbW1hbmQuQ29tbWFuZFBhcmFtZXRlcn1zIGRlc2NyaWJpbmcgdGhlIGNoaWxkcmVuCisJICogdGhhdCBjYW4gYmUgY3JlYXRlZCB1bmRlciB0aGlzIG9iamVjdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgdm9pZCBjb2xsZWN0TmV3Q2hpbGREZXNjcmlwdG9ycyhDb2xsZWN0aW9uPE9iamVjdD4gbmV3Q2hpbGREZXNjcmlwdG9ycywgT2JqZWN0IG9iamVjdCkgeworCQlzdXBlci5jb2xsZWN0TmV3Q2hpbGREZXNjcmlwdG9ycyhuZXdDaGlsZERlc2NyaXB0b3JzLCBvYmplY3QpOworCX0KKworfQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC9wcm92aWRlci9TdGF0aWNMYWJlbEl0ZW1Qcm92aWRlci5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC9wcm92aWRlci9TdGF0aWNMYWJlbEl0ZW1Qcm92aWRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI5ZjBmMDMKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoL3Byb3ZpZGVyL1N0YXRpY0xhYmVsSXRlbVByb3ZpZGVyLmphdmEKQEAgLTAsMCArMSwxMjggQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLnByb3ZpZGVyOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOworaW1wb3J0IGphdmEudXRpbC5MaXN0OworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5VUkk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuQ29tcG9zZWRBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JRWRpdGluZ0RvbWFpbkl0ZW1Qcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbUxhYmVsUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1Qcm9wZXJ0eVNvdXJjZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JU3RydWN0dXJlZEl0ZW1Db250ZW50UHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVRyZWVJdGVtQ29udGVudFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5HcmFwaFBhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkxhYmVsVmFsdWU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLlN0YXRpY0xhYmVsOworCisvKioKKyAqIFRoaXMgaXMgdGhlIGl0ZW0gcHJvdmlkZXIgYWRhcHRlciBmb3IgYSB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLlN0YXRpY0xhYmVsfSBvYmplY3QuCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBTdGF0aWNMYWJlbEl0ZW1Qcm92aWRlcgorCWV4dGVuZHMgTGFiZWxJdGVtUHJvdmlkZXIKKwlpbXBsZW1lbnRzCisJCUlFZGl0aW5nRG9tYWluSXRlbVByb3ZpZGVyLAorCQlJU3RydWN0dXJlZEl0ZW1Db250ZW50UHJvdmlkZXIsCisJCUlUcmVlSXRlbUNvbnRlbnRQcm92aWRlciwKKwkJSUl0ZW1MYWJlbFByb3ZpZGVyLAorCQlJSXRlbVByb3BlcnR5U291cmNlIHsKKwkvKioKKwkgKiBUaGlzIGNvbnN0cnVjdHMgYW4gaW5zdGFuY2UgZnJvbSBhIGZhY3RvcnkgYW5kIGEgbm90aWZpZXIuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFN0YXRpY0xhYmVsSXRlbVByb3ZpZGVyKEFkYXB0ZXJGYWN0b3J5IGFkYXB0ZXJGYWN0b3J5KSB7CisJCXN1cGVyKGFkYXB0ZXJGYWN0b3J5KTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgdGhlIHByb3BlcnR5IGRlc2NyaXB0b3JzIGZvciB0aGUgYWRhcHRlZCBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgTGlzdDxJSXRlbVByb3BlcnR5RGVzY3JpcHRvcj4gZ2V0UHJvcGVydHlEZXNjcmlwdG9ycyhPYmplY3Qgb2JqZWN0KSB7CisJCWlmIChpdGVtUHJvcGVydHlEZXNjcmlwdG9ycyA9PSBudWxsKSB7CisJCQlzdXBlci5nZXRQcm9wZXJ0eURlc2NyaXB0b3JzKG9iamVjdCk7CisKKwkJfQorCQlyZXR1cm4gaXRlbVByb3BlcnR5RGVzY3JpcHRvcnM7CisJfQorCisJcHVibGljIHN0YXRpYyB2b2lkIGFkZEN1cnJlbnRWYWx1ZVByb3BlcnRpZXMoT2JqZWN0IG9iamVjdCwKKwkJCWZpbmFsIExpc3Q8SUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I+IGl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzKSB7CisJCWZpbmFsIFN0YXRpY0xhYmVsIHNubCA9IChTdGF0aWNMYWJlbCkgb2JqZWN0OworCQlmaW5hbCBMYWJlbFZhbHVlIGx2ID0gKExhYmVsVmFsdWUpIHNubAorCQkJCS5lR2V0KEdyYXBoUGFja2FnZS5MaXRlcmFscy5MQUJFTF9fQ1VSUkVOVF9WQUxVRSk7CisKKwkJZmluYWwgQ29tcG9zZWRBZGFwdGVyRmFjdG9yeSBpdGVtUHJvdmlkZXJGYWN0b3J5ID0gbmV3IENvbXBvc2VkQWRhcHRlckZhY3RvcnkoCisJCQkJQ29tcG9zZWRBZGFwdGVyRmFjdG9yeS5EZXNjcmlwdG9yLlJlZ2lzdHJ5LklOU1RBTkNFKTsKKworCQlmaW5hbCBJSXRlbVByb3BlcnR5U291cmNlIHByb3BlcnR5U291cmNlID0gKElJdGVtUHJvcGVydHlTb3VyY2UpIGl0ZW1Qcm92aWRlckZhY3RvcnkKKwkJCQkuYWRhcHQobHYsIElJdGVtUHJvcGVydHlTb3VyY2UuY2xhc3MpOworCQlpZiAocHJvcGVydHlTb3VyY2UgIT0gbnVsbCkgeworCQkJZmluYWwgTGlzdDxJSXRlbVByb3BlcnR5RGVzY3JpcHRvcj4gcHJvcGVydGllcyA9IHByb3BlcnR5U291cmNlCisJCQkJCS5nZXRQcm9wZXJ0eURlc2NyaXB0b3JzKGx2KTsKKwkJCWl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzLmFkZEFsbChwcm9wZXJ0aWVzKTsKKwkJfQorCX0gLy8gYWRkQ3VycmVudFZhbHVlUHJvcGVydGllcworCisJLyoqCisJICogVGhpcyByZXR1cm5zIHRoZSBsYWJlbCB0ZXh0IGZvciB0aGUgYWRhcHRlZCBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgU3RyaW5nIGdldFRleHQoT2JqZWN0IG9iamVjdCkgeworCQlVUkkgbGFiZWxWYWx1ZSA9ICgoU3RhdGljTGFiZWwpb2JqZWN0KS5nZXRVUkkoKTsKKwkJU3RyaW5nIGxhYmVsID0gbGFiZWxWYWx1ZSA9PSBudWxsID8gbnVsbCA6IGxhYmVsVmFsdWUudG9TdHJpbmcoKTsKKwkJcmV0dXJuIGxhYmVsID09IG51bGwgfHwgbGFiZWwubGVuZ3RoKCkgPT0gMCA/CisJCQlnZXRTdHJpbmcoIl9VSV9TdGF0aWNMYWJlbF90eXBlIikgOiAvLyROT04tTkxTLTEkCisJCQlnZXRTdHJpbmcoIl9VSV9TdGF0aWNMYWJlbF90eXBlIikgKyAiICIgKyBsYWJlbDsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCisJfQorCisJLyoqCisJICogVGhpcyBoYW5kbGVzIG1vZGVsIG5vdGlmaWNhdGlvbnMgYnkgY2FsbGluZyB7QGxpbmsgI3VwZGF0ZUNoaWxkcmVufSB0byB1cGRhdGUgYW55IGNhY2hlZAorCSAqIGNoaWxkcmVuIGFuZCBieSBjcmVhdGluZyBhIHZpZXdlciBub3RpZmljYXRpb24sIHdoaWNoIGl0IHBhc3NlcyB0byB7QGxpbmsgI2ZpcmVOb3RpZnlDaGFuZ2VkfS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBub3RpZnlDaGFuZ2VkKE5vdGlmaWNhdGlvbiBub3RpZmljYXRpb24pIHsKKwkJdXBkYXRlQ2hpbGRyZW4obm90aWZpY2F0aW9uKTsKKwkJc3VwZXIubm90aWZ5Q2hhbmdlZChub3RpZmljYXRpb24pOworCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmVkaXQuY29tbWFuZC5Db21tYW5kUGFyYW1ldGVyfXMgZGVzY3JpYmluZyB0aGUgY2hpbGRyZW4KKwkgKiB0aGF0IGNhbiBiZSBjcmVhdGVkIHVuZGVyIHRoaXMgb2JqZWN0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIGNvbGxlY3ROZXdDaGlsZERlc2NyaXB0b3JzKENvbGxlY3Rpb248T2JqZWN0PiBuZXdDaGlsZERlc2NyaXB0b3JzLCBPYmplY3Qgb2JqZWN0KSB7CisJCXN1cGVyLmNvbGxlY3ROZXdDaGlsZERlc2NyaXB0b3JzKG5ld0NoaWxkRGVzY3JpcHRvcnMsIG9iamVjdCk7CisJfQorCit9CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoL3Byb3ZpZGVyL1N0YXRpY05vZGVMYWJlbEl0ZW1Qcm92aWRlci5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC9wcm92aWRlci9TdGF0aWNOb2RlTGFiZWxJdGVtUHJvdmlkZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNzZjNzgxCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC9wcm92aWRlci9TdGF0aWNOb2RlTGFiZWxJdGVtUHJvdmlkZXIuamF2YQpAQCAtMCwwICsxLDEyMiBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGgucHJvdmlkZXI7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIAorICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiAKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdCAKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sIAorICogCisgKiBDb250cmlidXRvcnM6IAorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiAKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5BZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlVSSTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JRWRpdGluZ0RvbWFpbkl0ZW1Qcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbUxhYmVsUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1Qcm9wZXJ0eVNvdXJjZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JU3RydWN0dXJlZEl0ZW1Db250ZW50UHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVRyZWVJdGVtQ29udGVudFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5TdGF0aWNOb2RlTGFiZWw7CisKKy8qKgorICogVGhpcyBpcyB0aGUgaXRlbSBwcm92aWRlciBhZGFwdGVyIGZvciBhIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguU3RhdGljTm9kZUxhYmVsfSBvYmplY3QuCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBTdGF0aWNOb2RlTGFiZWxJdGVtUHJvdmlkZXIKKwlleHRlbmRzIE5vZGVMYWJlbEl0ZW1Qcm92aWRlcgorCWltcGxlbWVudHMJCisJCUlFZGl0aW5nRG9tYWluSXRlbVByb3ZpZGVyLAkKKwkJSVN0cnVjdHVyZWRJdGVtQ29udGVudFByb3ZpZGVyLAkKKwkJSVRyZWVJdGVtQ29udGVudFByb3ZpZGVyLAkKKwkJSUl0ZW1MYWJlbFByb3ZpZGVyLAkKKwkJSUl0ZW1Qcm9wZXJ0eVNvdXJjZSB7CisJLyoqCisJICogVGhpcyBjb25zdHJ1Y3RzIGFuIGluc3RhbmNlIGZyb20gYSBmYWN0b3J5IGFuZCBhIG5vdGlmaWVyLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBTdGF0aWNOb2RlTGFiZWxJdGVtUHJvdmlkZXIoQWRhcHRlckZhY3RvcnkgYWRhcHRlckZhY3RvcnkpIHsKKwkJc3VwZXIoYWRhcHRlckZhY3RvcnkpOworCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyB0aGUgcHJvcGVydHkgZGVzY3JpcHRvcnMgZm9yIHRoZSBhZGFwdGVkIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgTGlzdDxJSXRlbVByb3BlcnR5RGVzY3JpcHRvcj4gZ2V0UHJvcGVydHlEZXNjcmlwdG9ycyhPYmplY3Qgb2JqZWN0KSB7CisJCWlmIChpdGVtUHJvcGVydHlEZXNjcmlwdG9ycyA9PSBudWxsKSB7CisJCQlzdXBlci5nZXRQcm9wZXJ0eURlc2NyaXB0b3JzKG9iamVjdCk7CisJCQlTdGF0aWNMYWJlbEl0ZW1Qcm92aWRlci5hZGRDdXJyZW50VmFsdWVQcm9wZXJ0aWVzKG9iamVjdCxpdGVtUHJvcGVydHlEZXNjcmlwdG9ycyk7CisJCX0KKwkJcmV0dXJuIGl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzOworCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyB0aGUgcHJvcGVydHkgZGVzY3JpcHRvcnMgZm9yIHRoZSBhZGFwdGVkIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBMaXN0PElJdGVtUHJvcGVydHlEZXNjcmlwdG9yPiBnZXRQcm9wZXJ0eURlc2NyaXB0b3JzR2VuKE9iamVjdCBvYmplY3QpIHsKKwkJaWYgKGl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzID09IG51bGwpIHsKKwkJCXN1cGVyLmdldFByb3BlcnR5RGVzY3JpcHRvcnMob2JqZWN0KTsKKworCQl9CisJCXJldHVybiBpdGVtUHJvcGVydHlEZXNjcmlwdG9yczsKKwl9CisJCisJLyoqCisJICogVGhpcyByZXR1cm5zIHRoZSBsYWJlbCB0ZXh0IGZvciB0aGUgYWRhcHRlZCBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgU3RyaW5nIGdldFRleHQoT2JqZWN0IG9iamVjdCkgeworCQlVUkkgbGFiZWxWYWx1ZSA9ICgoU3RhdGljTm9kZUxhYmVsKW9iamVjdCkuZ2V0VVJJKCk7CisJCVN0cmluZyBsYWJlbCA9IGxhYmVsVmFsdWUgPT0gbnVsbCA/IG51bGwgOiBsYWJlbFZhbHVlLnRvU3RyaW5nKCk7CisJCXJldHVybiBsYWJlbCA9PSBudWxsIHx8IGxhYmVsLmxlbmd0aCgpID09IDAgPworCQkJZ2V0U3RyaW5nKCJfVUlfU3RhdGljTm9kZUxhYmVsX3R5cGUiKSA6IC8vJE5PTi1OTFMtMSQKKwkJCWdldFN0cmluZygiX1VJX1N0YXRpY05vZGVMYWJlbF90eXBlIikgKyAiICIgKyBsYWJlbDsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCisJfQorCisJLyoqCisJICogVGhpcyBoYW5kbGVzIG1vZGVsIG5vdGlmaWNhdGlvbnMgYnkgY2FsbGluZyB7QGxpbmsgI3VwZGF0ZUNoaWxkcmVufSB0byB1cGRhdGUgYW55IGNhY2hlZAorCSAqIGNoaWxkcmVuIGFuZCBieSBjcmVhdGluZyBhIHZpZXdlciBub3RpZmljYXRpb24sIHdoaWNoIGl0IHBhc3NlcyB0byB7QGxpbmsgI2ZpcmVOb3RpZnlDaGFuZ2VkfS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBub3RpZnlDaGFuZ2VkKE5vdGlmaWNhdGlvbiBub3RpZmljYXRpb24pIHsKKwkJdXBkYXRlQ2hpbGRyZW4obm90aWZpY2F0aW9uKTsKKwkJc3VwZXIubm90aWZ5Q2hhbmdlZChub3RpZmljYXRpb24pOworCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmVkaXQuY29tbWFuZC5Db21tYW5kUGFyYW1ldGVyfXMgZGVzY3JpYmluZyB0aGUgY2hpbGRyZW4KKwkgKiB0aGF0IGNhbiBiZSBjcmVhdGVkIHVuZGVyIHRoaXMgb2JqZWN0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIGNvbGxlY3ROZXdDaGlsZERlc2NyaXB0b3JzKENvbGxlY3Rpb248T2JqZWN0PiBuZXdDaGlsZERlc2NyaXB0b3JzLCBPYmplY3Qgb2JqZWN0KSB7CisJCXN1cGVyLmNvbGxlY3ROZXdDaGlsZERlc2NyaXB0b3JzKG5ld0NoaWxkRGVzY3JpcHRvcnMsIG9iamVjdCk7CisJfQorCit9CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoL3V0aWwvR3JhcGhBZGFwdGVyRmFjdG9yeS5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC91dGlsL0dyYXBoQWRhcHRlckZhY3RvcnkuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMDQzOGFlCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC91dGlsL0dyYXBoQWRhcHRlckZhY3RvcnkuamF2YQpAQCAtMCwwICsxLDYzNyBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGgudXRpbDsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuIAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyAKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0IAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwgCisgKiAKKyAqIENvbnRyaWJ1dG9yczogCisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgCitpbXBvcnQgamF2YS51dGlsLk1hcDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LkFkYXB0ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuaW1wbC5BZGFwdGVyRmFjdG9yeUltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlVSSTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLklkZW50aWZpYWJsZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLlNhbml0eUNoZWNrZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkR5bmFtaWNFZGdlTGFiZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkR5bmFtaWNMYWJlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguRHluYW1pY05vZGVMYWJlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguRWRnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguRWRnZUxhYmVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5FeGNoYW5nZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguR3JhcGg7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkdyYXBoUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguR3JhcGhQYXJ0aXRpb25lcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguSW50ZWdyYXRpb25MYWJlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguSW50ZWdyYXRpb25MYWJlbFZhbHVlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5MYWJlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguTGFiZWxWYWx1ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguTm9kZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguTm9kZUxhYmVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5TaW1wbGVHcmFwaFBhcnRpdGlvbmVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5TdGF0aWNFZGdlTGFiZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLlN0YXRpY0xhYmVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5TdGF0aWNOb2RlTGFiZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLlVucmVzb2x2ZWRJZGVudGlmaWFibGU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLk1vZGlmaWFibGU7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIFRoZSA8Yj5BZGFwdGVyIEZhY3Rvcnk8L2I+IGZvciB0aGUgbW9kZWwuCisgKiBJdCBwcm92aWRlcyBhbiBhZGFwdGVyIDxjb2RlPmNyZWF0ZVhYWDwvY29kZT4gbWV0aG9kIGZvciBlYWNoIGNsYXNzIG9mIHRoZSBtb2RlbC4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguR3JhcGhQYWNrYWdlCisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBHcmFwaEFkYXB0ZXJGYWN0b3J5IGV4dGVuZHMgQWRhcHRlckZhY3RvcnlJbXBsIHsKKwkvKioKKwkgKiBUaGUgY2FjaGVkIG1vZGVsIHBhY2thZ2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHN0YXRpYyBHcmFwaFBhY2thZ2UgbW9kZWxQYWNrYWdlOworCisJLyoqCisJICogQ3JlYXRlcyBhbiBpbnN0YW5jZSBvZiB0aGUgYWRhcHRlciBmYWN0b3J5LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBHcmFwaEFkYXB0ZXJGYWN0b3J5KCkgeworCQlpZiAobW9kZWxQYWNrYWdlID09IG51bGwpIHsKKwkJCW1vZGVsUGFja2FnZSA9IEdyYXBoUGFja2FnZS5lSU5TVEFOQ0U7CisJCX0KKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHdoZXRoZXIgdGhpcyBmYWN0b3J5IGlzIGFwcGxpY2FibGUgZm9yIHRoZSB0eXBlIG9mIHRoZSBvYmplY3QuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgPGNvZGU+dHJ1ZTwvY29kZT4gaWYgdGhlIG9iamVjdCBpcyBlaXRoZXIgdGhlIG1vZGVsJ3MgcGFja2FnZSBvciBpcyBhbiBpbnN0YW5jZSBvYmplY3Qgb2YgdGhlIG1vZGVsLgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gd2hldGhlciB0aGlzIGZhY3RvcnkgaXMgYXBwbGljYWJsZSBmb3IgdGhlIHR5cGUgb2YgdGhlIG9iamVjdC4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIGJvb2xlYW4gaXNGYWN0b3J5Rm9yVHlwZShPYmplY3Qgb2JqZWN0KSB7CisJCWlmIChvYmplY3QgPT0gbW9kZWxQYWNrYWdlKSB7CisJCQlyZXR1cm4gdHJ1ZTsKKwkJfQorCQlpZiAob2JqZWN0IGluc3RhbmNlb2YgRU9iamVjdCkgeworCQkJcmV0dXJuICgoRU9iamVjdClvYmplY3QpLmVDbGFzcygpLmdldEVQYWNrYWdlKCkgPT0gbW9kZWxQYWNrYWdlOworCQl9CisJCXJldHVybiBmYWxzZTsKKwl9CisKKwkvKioKKwkgKiBUaGUgc3dpdGNoIHRoYXQgZGVsZWdhdGVzIHRvIHRoZSA8Y29kZT5jcmVhdGVYWFg8L2NvZGU+IG1ldGhvZHMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIEdyYXBoU3dpdGNoPEFkYXB0ZXI+IG1vZGVsU3dpdGNoID0KKwkJbmV3IEdyYXBoU3dpdGNoPEFkYXB0ZXI+KCkgeworCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgQWRhcHRlciBjYXNlRHluYW1pY0xhYmVsKER5bmFtaWNMYWJlbCBvYmplY3QpIHsKKwkJCQlyZXR1cm4gY3JlYXRlRHluYW1pY0xhYmVsQWRhcHRlcigpOworCQkJfQorCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgQWRhcHRlciBjYXNlRHluYW1pY05vZGVMYWJlbChEeW5hbWljTm9kZUxhYmVsIG9iamVjdCkgeworCQkJCXJldHVybiBjcmVhdGVEeW5hbWljTm9kZUxhYmVsQWRhcHRlcigpOworCQkJfQorCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgQWRhcHRlciBjYXNlRWRnZShFZGdlIG9iamVjdCkgeworCQkJCXJldHVybiBjcmVhdGVFZGdlQWRhcHRlcigpOworCQkJfQorCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgQWRhcHRlciBjYXNlR3JhcGgoR3JhcGggb2JqZWN0KSB7CisJCQkJcmV0dXJuIGNyZWF0ZUdyYXBoQWRhcHRlcigpOworCQkJfQorCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgQWRhcHRlciBjYXNlTGFiZWwoTGFiZWwgb2JqZWN0KSB7CisJCQkJcmV0dXJuIGNyZWF0ZUxhYmVsQWRhcHRlcigpOworCQkJfQorCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgQWRhcHRlciBjYXNlTGFiZWxWYWx1ZShMYWJlbFZhbHVlIG9iamVjdCkgeworCQkJCXJldHVybiBjcmVhdGVMYWJlbFZhbHVlQWRhcHRlcigpOworCQkJfQorCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgQWRhcHRlciBjYXNlTm9kZShOb2RlIG9iamVjdCkgeworCQkJCXJldHVybiBjcmVhdGVOb2RlQWRhcHRlcigpOworCQkJfQorCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgQWRhcHRlciBjYXNlTm9kZUxhYmVsKE5vZGVMYWJlbCBvYmplY3QpIHsKKwkJCQlyZXR1cm4gY3JlYXRlTm9kZUxhYmVsQWRhcHRlcigpOworCQkJfQorCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgQWRhcHRlciBjYXNlU3RhdGljTm9kZUxhYmVsKFN0YXRpY05vZGVMYWJlbCBvYmplY3QpIHsKKwkJCQlyZXR1cm4gY3JlYXRlU3RhdGljTm9kZUxhYmVsQWRhcHRlcigpOworCQkJfQorCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgQWRhcHRlciBjYXNlVW5yZXNvbHZlZElkZW50aWZpYWJsZShVbnJlc29sdmVkSWRlbnRpZmlhYmxlIG9iamVjdCkgeworCQkJCXJldHVybiBjcmVhdGVVbnJlc29sdmVkSWRlbnRpZmlhYmxlQWRhcHRlcigpOworCQkJfQorCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgQWRhcHRlciBjYXNlVVJJVG9JZGVudGlmaWFibGVNYXBFbnRyeShNYXAuRW50cnk8VVJJLCBJZGVudGlmaWFibGU+IG9iamVjdCkgeworCQkJCXJldHVybiBjcmVhdGVVUklUb0lkZW50aWZpYWJsZU1hcEVudHJ5QWRhcHRlcigpOworCQkJfQorCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgQWRhcHRlciBjYXNlRHluYW1pY0VkZ2VMYWJlbChEeW5hbWljRWRnZUxhYmVsIG9iamVjdCkgeworCQkJCXJldHVybiBjcmVhdGVEeW5hbWljRWRnZUxhYmVsQWRhcHRlcigpOworCQkJfQorCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgQWRhcHRlciBjYXNlRWRnZUxhYmVsKEVkZ2VMYWJlbCBvYmplY3QpIHsKKwkJCQlyZXR1cm4gY3JlYXRlRWRnZUxhYmVsQWRhcHRlcigpOworCQkJfQorCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgQWRhcHRlciBjYXNlU3RhdGljRWRnZUxhYmVsKFN0YXRpY0VkZ2VMYWJlbCBvYmplY3QpIHsKKwkJCQlyZXR1cm4gY3JlYXRlU3RhdGljRWRnZUxhYmVsQWRhcHRlcigpOworCQkJfQorCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgQWRhcHRlciBjYXNlVVJJVG9FZGdlTWFwRW50cnkoTWFwLkVudHJ5PFVSSSwgRWRnZT4gb2JqZWN0KSB7CisJCQkJcmV0dXJuIGNyZWF0ZVVSSVRvRWRnZU1hcEVudHJ5QWRhcHRlcigpOworCQkJfQorCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgQWRhcHRlciBjYXNlVVJJVG9Ob2RlTWFwRW50cnkoTWFwLkVudHJ5PFVSSSwgTm9kZT4gb2JqZWN0KSB7CisJCQkJcmV0dXJuIGNyZWF0ZVVSSVRvTm9kZU1hcEVudHJ5QWRhcHRlcigpOworCQkJfQorCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgQWRhcHRlciBjYXNlVVJJVG9MYWJlbE1hcEVudHJ5KE1hcC5FbnRyeTxVUkksIExhYmVsPiBvYmplY3QpIHsKKwkJCQlyZXR1cm4gY3JlYXRlVVJJVG9MYWJlbE1hcEVudHJ5QWRhcHRlcigpOworCQkJfQorCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgQWRhcHRlciBjYXNlVVJJVG9Ob2RlTGFiZWxNYXBFbnRyeShNYXAuRW50cnk8VVJJLCBOb2RlTGFiZWw+IG9iamVjdCkgeworCQkJCXJldHVybiBjcmVhdGVVUklUb05vZGVMYWJlbE1hcEVudHJ5QWRhcHRlcigpOworCQkJfQorCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgQWRhcHRlciBjYXNlU3RhdGljTGFiZWwoU3RhdGljTGFiZWwgb2JqZWN0KSB7CisJCQkJcmV0dXJuIGNyZWF0ZVN0YXRpY0xhYmVsQWRhcHRlcigpOworCQkJfQorCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgQWRhcHRlciBjYXNlR3JhcGhQYXJ0aXRpb25lcihHcmFwaFBhcnRpdGlvbmVyIG9iamVjdCkgeworCQkJCXJldHVybiBjcmVhdGVHcmFwaFBhcnRpdGlvbmVyQWRhcHRlcigpOworCQkJfQorCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgQWRhcHRlciBjYXNlU2ltcGxlR3JhcGhQYXJ0aXRpb25lcihTaW1wbGVHcmFwaFBhcnRpdGlvbmVyIG9iamVjdCkgeworCQkJCXJldHVybiBjcmVhdGVTaW1wbGVHcmFwaFBhcnRpdGlvbmVyQWRhcHRlcigpOworCQkJfQorCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgQWRhcHRlciBjYXNlRXhjaGFuZ2UoRXhjaGFuZ2Ugb2JqZWN0KSB7CisJCQkJcmV0dXJuIGNyZWF0ZUV4Y2hhbmdlQWRhcHRlcigpOworCQkJfQorCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgQWRhcHRlciBjYXNlSW50ZWdyYXRpb25MYWJlbChJbnRlZ3JhdGlvbkxhYmVsIG9iamVjdCkgeworCQkJCXJldHVybiBjcmVhdGVJbnRlZ3JhdGlvbkxhYmVsQWRhcHRlcigpOworCQkJfQorCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgQWRhcHRlciBjYXNlSW50ZWdyYXRpb25MYWJlbFZhbHVlKEludGVncmF0aW9uTGFiZWxWYWx1ZSBvYmplY3QpIHsKKwkJCQlyZXR1cm4gY3JlYXRlSW50ZWdyYXRpb25MYWJlbFZhbHVlQWRhcHRlcigpOworCQkJfQorCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgPFQ+IEFkYXB0ZXIgY2FzZUNvbXBhcmFibGUoQ29tcGFyYWJsZTxUPiBvYmplY3QpIHsKKwkJCQlyZXR1cm4gY3JlYXRlQ29tcGFyYWJsZUFkYXB0ZXIoKTsKKwkJCX0KKwkJCUBPdmVycmlkZQorCQkJcHVibGljIEFkYXB0ZXIgY2FzZVNhbml0eUNoZWNrZXIoU2FuaXR5Q2hlY2tlciBvYmplY3QpIHsKKwkJCQlyZXR1cm4gY3JlYXRlU2FuaXR5Q2hlY2tlckFkYXB0ZXIoKTsKKwkJCX0KKwkJCUBPdmVycmlkZQorCQkJcHVibGljIEFkYXB0ZXIgY2FzZUlkZW50aWZpYWJsZShJZGVudGlmaWFibGUgb2JqZWN0KSB7CisJCQkJcmV0dXJuIGNyZWF0ZUlkZW50aWZpYWJsZUFkYXB0ZXIoKTsKKwkJCX0KKwkJCUBPdmVycmlkZQorCQkJcHVibGljIEFkYXB0ZXIgY2FzZU1vZGlmaWFibGUoTW9kaWZpYWJsZSBvYmplY3QpIHsKKwkJCQlyZXR1cm4gY3JlYXRlTW9kaWZpYWJsZUFkYXB0ZXIoKTsKKwkJCX0KKwkJCUBPdmVycmlkZQorCQkJcHVibGljIEFkYXB0ZXIgZGVmYXVsdENhc2UoRU9iamVjdCBvYmplY3QpIHsKKwkJCQlyZXR1cm4gY3JlYXRlRU9iamVjdEFkYXB0ZXIoKTsKKwkJCX0KKwkJfTsKKworCS8qKgorCSAqIENyZWF0ZXMgYW4gYWRhcHRlciBmb3IgdGhlIDxjb2RlPnRhcmdldDwvY29kZT4uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gdGFyZ2V0IHRoZSBvYmplY3QgdG8gYWRhcHQuCisJICogQHJldHVybiB0aGUgYWRhcHRlciBmb3IgdGhlIDxjb2RlPnRhcmdldDwvY29kZT4uCisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZUFkYXB0ZXIoTm90aWZpZXIgdGFyZ2V0KSB7CisJCXJldHVybiBtb2RlbFN3aXRjaC5kb1N3aXRjaCgoRU9iamVjdCl0YXJnZXQpOworCX0KKworCisJLyoqCisJICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguRHluYW1pY0xhYmVsIDxlbT5EeW5hbWljIExhYmVsPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsKKwkgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5EeW5hbWljTGFiZWwKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlRHluYW1pY0xhYmVsQWRhcHRlcigpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguRWRnZSA8ZW0+RWRnZTwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7CisJICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguRWRnZQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVFZGdlQWRhcHRlcigpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguR3JhcGggPGVtPkdyYXBoPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsKKwkgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5HcmFwaAorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVHcmFwaEFkYXB0ZXIoKSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkxhYmVsIDxlbT5MYWJlbDwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7CisJICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguTGFiZWwKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlTGFiZWxBZGFwdGVyKCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5MYWJlbFZhbHVlIDxlbT5MYWJlbCBWYWx1ZTwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7CisJICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguTGFiZWxWYWx1ZQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVMYWJlbFZhbHVlQWRhcHRlcigpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguTm9kZSA8ZW0+Tm9kZTwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7CisJICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguTm9kZQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVOb2RlQWRhcHRlcigpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguVW5yZXNvbHZlZElkZW50aWZpYWJsZSA8ZW0+VW5yZXNvbHZlZCBJZGVudGlmaWFibGU8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOworCSAqIGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZSB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5LgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLlVucmVzb2x2ZWRJZGVudGlmaWFibGUKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlVW5yZXNvbHZlZElkZW50aWZpYWJsZUFkYXB0ZXIoKSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgamF2YS51dGlsLk1hcC5FbnRyeSA8ZW0+VVJJIFRvIElkZW50aWZpYWJsZSBNYXAgRW50cnk8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOworCSAqIGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZSB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5LgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgorCSAqIEBzZWUgamF2YS51dGlsLk1hcC5FbnRyeQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVVUklUb0lkZW50aWZpYWJsZU1hcEVudHJ5QWRhcHRlcigpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLlNhbml0eUNoZWNrZXIgPGVtPlNhbml0eSBDaGVja2VyPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsKKwkgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uU2FuaXR5Q2hlY2tlcgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVTYW5pdHlDaGVja2VyQWRhcHRlcigpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguRHluYW1pY0VkZ2VMYWJlbCA8ZW0+RHluYW1pYyBFZGdlIExhYmVsPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsKKwkgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5EeW5hbWljRWRnZUxhYmVsCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZUR5bmFtaWNFZGdlTGFiZWxBZGFwdGVyKCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5FZGdlTGFiZWwgPGVtPkVkZ2UgTGFiZWw8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOworCSAqIGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZSB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5LgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkVkZ2VMYWJlbAorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVFZGdlTGFiZWxBZGFwdGVyKCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5TdGF0aWNFZGdlTGFiZWwgPGVtPlN0YXRpYyBFZGdlIExhYmVsPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsKKwkgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5TdGF0aWNFZGdlTGFiZWwKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlU3RhdGljRWRnZUxhYmVsQWRhcHRlcigpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBqYXZhLnV0aWwuTWFwLkVudHJ5IDxlbT5VUkkgVG8gRWRnZSBNYXAgRW50cnk8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOworCSAqIGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZSB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5LgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgorCSAqIEBzZWUgamF2YS51dGlsLk1hcC5FbnRyeQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVVUklUb0VkZ2VNYXBFbnRyeUFkYXB0ZXIoKSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgamF2YS51dGlsLk1hcC5FbnRyeSA8ZW0+VVJJIFRvIE5vZGUgTWFwIEVudHJ5PC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsKKwkgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KKwkgKiBAc2VlIGphdmEudXRpbC5NYXAuRW50cnkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlVVJJVG9Ob2RlTWFwRW50cnlBZGFwdGVyKCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIGphdmEudXRpbC5NYXAuRW50cnkgPGVtPlVSSSBUbyBMYWJlbCBNYXAgRW50cnk8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOworCSAqIGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZSB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5LgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgorCSAqIEBzZWUgamF2YS51dGlsLk1hcC5FbnRyeQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVVUklUb0xhYmVsTWFwRW50cnlBZGFwdGVyKCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIGphdmEudXRpbC5NYXAuRW50cnkgPGVtPlVSSSBUbyBOb2RlIExhYmVsIE1hcCBFbnRyeTwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7CisJICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCisJICogQHNlZSBqYXZhLnV0aWwuTWFwLkVudHJ5CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZVVSSVRvTm9kZUxhYmVsTWFwRW50cnlBZGFwdGVyKCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5TdGF0aWNMYWJlbCA8ZW0+U3RhdGljIExhYmVsPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsKKwkgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5TdGF0aWNMYWJlbAorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVTdGF0aWNMYWJlbEFkYXB0ZXIoKSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkdyYXBoUGFydGl0aW9uZXIgPGVtPlBhcnRpdGlvbmVyPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsKKwkgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5HcmFwaFBhcnRpdGlvbmVyCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZUdyYXBoUGFydGl0aW9uZXJBZGFwdGVyKCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5TaW1wbGVHcmFwaFBhcnRpdGlvbmVyIDxlbT5TaW1wbGUgR3JhcGggUGFydGl0aW9uZXI8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOworCSAqIGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZSB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5LgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLlNpbXBsZUdyYXBoUGFydGl0aW9uZXIKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlU2ltcGxlR3JhcGhQYXJ0aXRpb25lckFkYXB0ZXIoKSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkV4Y2hhbmdlIDxlbT5FeGNoYW5nZTwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7CisJICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguRXhjaGFuZ2UKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlRXhjaGFuZ2VBZGFwdGVyKCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5JbnRlZ3JhdGlvbkxhYmVsIDxlbT5JbnRlZ3JhdGlvbiBMYWJlbDwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7CisJICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguSW50ZWdyYXRpb25MYWJlbAorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVJbnRlZ3JhdGlvbkxhYmVsQWRhcHRlcigpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguSW50ZWdyYXRpb25MYWJlbFZhbHVlIDxlbT5JbnRlZ3JhdGlvbiBMYWJlbCBWYWx1ZTwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7CisJICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguSW50ZWdyYXRpb25MYWJlbFZhbHVlCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZUludGVncmF0aW9uTGFiZWxWYWx1ZUFkYXB0ZXIoKSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgamF2YS5sYW5nLkNvbXBhcmFibGUgPGVtPkNvbXBhcmFibGU8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOworCSAqIGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZSB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5LgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgorCSAqIEBzZWUgamF2YS5sYW5nLkNvbXBhcmFibGUKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlQ29tcGFyYWJsZUFkYXB0ZXIoKSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkR5bmFtaWNOb2RlTGFiZWwgPGVtPkR5bmFtaWMgTm9kZSBMYWJlbDwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7CisJICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguRHluYW1pY05vZGVMYWJlbAorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVEeW5hbWljTm9kZUxhYmVsQWRhcHRlcigpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguU3RhdGljTm9kZUxhYmVsIDxlbT5TdGF0aWMgTm9kZSBMYWJlbDwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7CisJICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguU3RhdGljTm9kZUxhYmVsCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZVN0YXRpY05vZGVMYWJlbEFkYXB0ZXIoKSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLk5vZGVMYWJlbCA8ZW0+Tm9kZSBMYWJlbDwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7CisJICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguTm9kZUxhYmVsCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZU5vZGVMYWJlbEFkYXB0ZXIoKSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5JZGVudGlmaWFibGUgPGVtPklkZW50aWZpYWJsZTwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7CisJICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLklkZW50aWZpYWJsZQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVJZGVudGlmaWFibGVBZGFwdGVyKCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5Nb2RpZmlhYmxlIDxlbT5Nb2RpZmlhYmxlPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsKKwkgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5Nb2RpZmlhYmxlCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZU1vZGlmaWFibGVBZGFwdGVyKCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIHRoZSBkZWZhdWx0IGNhc2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsLgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVFT2JqZWN0QWRhcHRlcigpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCit9IC8vR3JhcGhBZGFwdGVyRmFjdG9yeQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC91dGlsL0dyYXBoU3dpdGNoLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoL3V0aWwvR3JhcGhTd2l0Y2guamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MWNiNDUzCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC91dGlsL0dyYXBoU3dpdGNoLmphdmEKQEAgLTAsMCArMSw3NjkgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLnV0aWw7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIAorICogQ29weXJpZ2h0IChjKSAyMDA2LCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiAKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdCAKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sIAorICogCisgKiBDb250cmlidXRvcnM6IAorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiAKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworIAoraW1wb3J0IGphdmEudXRpbC5MaXN0OworaW1wb3J0IGphdmEudXRpbC5NYXA7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuVVJJOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3Q7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5JZGVudGlmaWFibGU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5TYW5pdHlDaGVja2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5EeW5hbWljRWRnZUxhYmVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5EeW5hbWljTGFiZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkR5bmFtaWNOb2RlTGFiZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkVkZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkVkZ2VMYWJlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguRXhjaGFuZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkdyYXBoOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5HcmFwaFBhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkdyYXBoUGFydGl0aW9uZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkludGVncmF0aW9uTGFiZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkludGVncmF0aW9uTGFiZWxWYWx1ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguTGFiZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkxhYmVsVmFsdWU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLk5vZGU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLk5vZGVMYWJlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguU2ltcGxlR3JhcGhQYXJ0aXRpb25lcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguU3RhdGljRWRnZUxhYmVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5TdGF0aWNMYWJlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguU3RhdGljTm9kZUxhYmVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5VbnJlc29sdmVkSWRlbnRpZmlhYmxlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5Nb2RpZmlhYmxlOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiBUaGUgPGI+U3dpdGNoPC9iPiBmb3IgdGhlIG1vZGVsJ3MgaW5oZXJpdGFuY2UgaGllcmFyY2h5LgorICogSXQgc3VwcG9ydHMgdGhlIGNhbGwge0BsaW5rICNkb1N3aXRjaChFT2JqZWN0KSBkb1N3aXRjaChvYmplY3QpfQorICogdG8gaW52b2tlIHRoZSA8Y29kZT5jYXNlWFhYPC9jb2RlPiBtZXRob2QgZm9yIGVhY2ggY2xhc3Mgb2YgdGhlIG1vZGVsLAorICogc3RhcnRpbmcgd2l0aCB0aGUgYWN0dWFsIGNsYXNzIG9mIHRoZSBvYmplY3QKKyAqIGFuZCBwcm9jZWVkaW5nIHVwIHRoZSBpbmhlcml0YW5jZSBoaWVyYXJjaHkKKyAqIHVudGlsIGEgbm9uLW51bGwgcmVzdWx0IGlzIHJldHVybmVkLAorICogd2hpY2ggaXMgdGhlIHJlc3VsdCBvZiB0aGUgc3dpdGNoLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5HcmFwaFBhY2thZ2UKKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIEdyYXBoU3dpdGNoPFQxPiB7CisJLyoqCisJICogVGhlIGNhY2hlZCBtb2RlbCBwYWNrYWdlCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHN0YXRpYyBHcmFwaFBhY2thZ2UgbW9kZWxQYWNrYWdlOworCisJLyoqCisJICogQ3JlYXRlcyBhbiBpbnN0YW5jZSBvZiB0aGUgc3dpdGNoLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBHcmFwaFN3aXRjaCgpIHsKKwkJaWYgKG1vZGVsUGFja2FnZSA9PSBudWxsKSB7CisJCQltb2RlbFBhY2thZ2UgPSBHcmFwaFBhY2thZ2UuZUlOU1RBTkNFOworCQl9CisJfQorCisJLyoqCisJICogQ2FsbHMgPGNvZGU+Y2FzZVhYWDwvY29kZT4gZm9yIGVhY2ggY2xhc3Mgb2YgdGhlIG1vZGVsIHVudGlsIG9uZSByZXR1cm5zIGEgbm9uIG51bGwgcmVzdWx0OyBpdCB5aWVsZHMgdGhhdCByZXN1bHQuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBmaXJzdCBub24tbnVsbCByZXN1bHQgcmV0dXJuZWQgYnkgYSA8Y29kZT5jYXNlWFhYPC9jb2RlPiBjYWxsLgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVDEgZG9Td2l0Y2goRU9iamVjdCB0aGVFT2JqZWN0KSB7CisJCXJldHVybiBkb1N3aXRjaCh0aGVFT2JqZWN0LmVDbGFzcygpLCB0aGVFT2JqZWN0KTsKKwl9CisKKwkvKioKKwkgKiBDYWxscyA8Y29kZT5jYXNlWFhYPC9jb2RlPiBmb3IgZWFjaCBjbGFzcyBvZiB0aGUgbW9kZWwgdW50aWwgb25lIHJldHVybnMgYSBub24gbnVsbCByZXN1bHQ7IGl0IHlpZWxkcyB0aGF0IHJlc3VsdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIGZpcnN0IG5vbi1udWxsIHJlc3VsdCByZXR1cm5lZCBieSBhIDxjb2RlPmNhc2VYWFg8L2NvZGU+IGNhbGwuCisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBUMSBkb1N3aXRjaChFQ2xhc3MgdGhlRUNsYXNzLCBFT2JqZWN0IHRoZUVPYmplY3QpIHsKKwkJaWYgKHRoZUVDbGFzcy5lQ29udGFpbmVyKCkgPT0gbW9kZWxQYWNrYWdlKSB7CisJCQlyZXR1cm4gZG9Td2l0Y2godGhlRUNsYXNzLmdldENsYXNzaWZpZXJJRCgpLCB0aGVFT2JqZWN0KTsKKwkJfQorCQllbHNlIHsKKwkJCUxpc3Q8RUNsYXNzPiBlU3VwZXJUeXBlcyA9IHRoZUVDbGFzcy5nZXRFU3VwZXJUeXBlcygpOworCQkJcmV0dXJuCisJCQkJZVN1cGVyVHlwZXMuaXNFbXB0eSgpID8KKwkJCQkJZGVmYXVsdENhc2UodGhlRU9iamVjdCkgOgorCQkJCQlkb1N3aXRjaChlU3VwZXJUeXBlcy5nZXQoMCksIHRoZUVPYmplY3QpOworCQl9CisJfQorCisJLyoqCisJICogQ2FsbHMgPGNvZGU+Y2FzZVhYWDwvY29kZT4gZm9yIGVhY2ggY2xhc3Mgb2YgdGhlIG1vZGVsIHVudGlsIG9uZSByZXR1cm5zIGEgbm9uIG51bGwgcmVzdWx0OyBpdCB5aWVsZHMgdGhhdCByZXN1bHQuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBmaXJzdCBub24tbnVsbCByZXN1bHQgcmV0dXJuZWQgYnkgYSA8Y29kZT5jYXNlWFhYPC9jb2RlPiBjYWxsLgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgVDEgZG9Td2l0Y2goaW50IGNsYXNzaWZpZXJJRCwgRU9iamVjdCB0aGVFT2JqZWN0KSB7CisJCXN3aXRjaCAoY2xhc3NpZmllcklEKSB7CisJCQljYXNlIEdyYXBoUGFja2FnZS5EWU5BTUlDX0xBQkVMOiB7CisJCQkJRHluYW1pY0xhYmVsIGR5bmFtaWNMYWJlbCA9IChEeW5hbWljTGFiZWwpdGhlRU9iamVjdDsKKwkJCQlUMSByZXN1bHQgPSBjYXNlRHluYW1pY0xhYmVsKGR5bmFtaWNMYWJlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlTGFiZWwoZHluYW1pY0xhYmVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VJZGVudGlmaWFibGUoZHluYW1pY0xhYmVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VDb21wYXJhYmxlKGR5bmFtaWNMYWJlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlU2FuaXR5Q2hlY2tlcihkeW5hbWljTGFiZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gZGVmYXVsdENhc2UodGhlRU9iamVjdCk7CisJCQkJcmV0dXJuIHJlc3VsdDsKKwkJCX0KKwkJCWNhc2UgR3JhcGhQYWNrYWdlLkRZTkFNSUNfTk9ERV9MQUJFTDogeworCQkJCUR5bmFtaWNOb2RlTGFiZWwgZHluYW1pY05vZGVMYWJlbCA9IChEeW5hbWljTm9kZUxhYmVsKXRoZUVPYmplY3Q7CisJCQkJVDEgcmVzdWx0ID0gY2FzZUR5bmFtaWNOb2RlTGFiZWwoZHluYW1pY05vZGVMYWJlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlRHluYW1pY0xhYmVsKGR5bmFtaWNOb2RlTGFiZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZU5vZGVMYWJlbChkeW5hbWljTm9kZUxhYmVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VMYWJlbChkeW5hbWljTm9kZUxhYmVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VJZGVudGlmaWFibGUoZHluYW1pY05vZGVMYWJlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlQ29tcGFyYWJsZShkeW5hbWljTm9kZUxhYmVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VTYW5pdHlDaGVja2VyKGR5bmFtaWNOb2RlTGFiZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gZGVmYXVsdENhc2UodGhlRU9iamVjdCk7CisJCQkJcmV0dXJuIHJlc3VsdDsKKwkJCX0KKwkJCWNhc2UgR3JhcGhQYWNrYWdlLkVER0U6IHsKKwkJCQlFZGdlIGVkZ2UgPSAoRWRnZSl0aGVFT2JqZWN0OworCQkJCVQxIHJlc3VsdCA9IGNhc2VFZGdlKGVkZ2UpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZUlkZW50aWZpYWJsZShlZGdlKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VNb2RpZmlhYmxlKGVkZ2UpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZUNvbXBhcmFibGUoZWRnZSk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlU2FuaXR5Q2hlY2tlcihlZGdlKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGRlZmF1bHRDYXNlKHRoZUVPYmplY3QpOworCQkJCXJldHVybiByZXN1bHQ7CisJCQl9CisJCQljYXNlIEdyYXBoUGFja2FnZS5HUkFQSDogeworCQkJCUdyYXBoIGdyYXBoID0gKEdyYXBoKXRoZUVPYmplY3Q7CisJCQkJVDEgcmVzdWx0ID0gY2FzZUdyYXBoKGdyYXBoKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VJZGVudGlmaWFibGUoZ3JhcGgpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZUNvbXBhcmFibGUoZ3JhcGgpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZVNhbml0eUNoZWNrZXIoZ3JhcGgpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gZGVmYXVsdENhc2UodGhlRU9iamVjdCk7CisJCQkJcmV0dXJuIHJlc3VsdDsKKwkJCX0KKwkJCWNhc2UgR3JhcGhQYWNrYWdlLkxBQkVMOiB7CisJCQkJTGFiZWwgbGFiZWwgPSAoTGFiZWwpdGhlRU9iamVjdDsKKwkJCQlUMSByZXN1bHQgPSBjYXNlTGFiZWwobGFiZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZUlkZW50aWZpYWJsZShsYWJlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlQ29tcGFyYWJsZShsYWJlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlU2FuaXR5Q2hlY2tlcihsYWJlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBkZWZhdWx0Q2FzZSh0aGVFT2JqZWN0KTsKKwkJCQlyZXR1cm4gcmVzdWx0OworCQkJfQorCQkJY2FzZSBHcmFwaFBhY2thZ2UuTEFCRUxfVkFMVUU6IHsKKwkJCQlMYWJlbFZhbHVlIGxhYmVsVmFsdWUgPSAoTGFiZWxWYWx1ZSl0aGVFT2JqZWN0OworCQkJCVQxIHJlc3VsdCA9IGNhc2VMYWJlbFZhbHVlKGxhYmVsVmFsdWUpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZVNhbml0eUNoZWNrZXIobGFiZWxWYWx1ZSk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBkZWZhdWx0Q2FzZSh0aGVFT2JqZWN0KTsKKwkJCQlyZXR1cm4gcmVzdWx0OworCQkJfQorCQkJY2FzZSBHcmFwaFBhY2thZ2UuTk9ERTogeworCQkJCU5vZGUgbm9kZSA9IChOb2RlKXRoZUVPYmplY3Q7CisJCQkJVDEgcmVzdWx0ID0gY2FzZU5vZGUobm9kZSk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlSWRlbnRpZmlhYmxlKG5vZGUpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZUNvbXBhcmFibGUobm9kZSk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlU2FuaXR5Q2hlY2tlcihub2RlKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGRlZmF1bHRDYXNlKHRoZUVPYmplY3QpOworCQkJCXJldHVybiByZXN1bHQ7CisJCQl9CisJCQljYXNlIEdyYXBoUGFja2FnZS5OT0RFX0xBQkVMOiB7CisJCQkJTm9kZUxhYmVsIG5vZGVMYWJlbCA9IChOb2RlTGFiZWwpdGhlRU9iamVjdDsKKwkJCQlUMSByZXN1bHQgPSBjYXNlTm9kZUxhYmVsKG5vZGVMYWJlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlTGFiZWwobm9kZUxhYmVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VJZGVudGlmaWFibGUobm9kZUxhYmVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VDb21wYXJhYmxlKG5vZGVMYWJlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlU2FuaXR5Q2hlY2tlcihub2RlTGFiZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gZGVmYXVsdENhc2UodGhlRU9iamVjdCk7CisJCQkJcmV0dXJuIHJlc3VsdDsKKwkJCX0KKwkJCWNhc2UgR3JhcGhQYWNrYWdlLlNUQVRJQ19OT0RFX0xBQkVMOiB7CisJCQkJU3RhdGljTm9kZUxhYmVsIHN0YXRpY05vZGVMYWJlbCA9IChTdGF0aWNOb2RlTGFiZWwpdGhlRU9iamVjdDsKKwkJCQlUMSByZXN1bHQgPSBjYXNlU3RhdGljTm9kZUxhYmVsKHN0YXRpY05vZGVMYWJlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlTm9kZUxhYmVsKHN0YXRpY05vZGVMYWJlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlU3RhdGljTGFiZWwoc3RhdGljTm9kZUxhYmVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VMYWJlbChzdGF0aWNOb2RlTGFiZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZU1vZGlmaWFibGUoc3RhdGljTm9kZUxhYmVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VJZGVudGlmaWFibGUoc3RhdGljTm9kZUxhYmVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VDb21wYXJhYmxlKHN0YXRpY05vZGVMYWJlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlU2FuaXR5Q2hlY2tlcihzdGF0aWNOb2RlTGFiZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gZGVmYXVsdENhc2UodGhlRU9iamVjdCk7CisJCQkJcmV0dXJuIHJlc3VsdDsKKwkJCX0KKwkJCWNhc2UgR3JhcGhQYWNrYWdlLlVOUkVTT0xWRURfSURFTlRJRklBQkxFOiB7CisJCQkJVW5yZXNvbHZlZElkZW50aWZpYWJsZSB1bnJlc29sdmVkSWRlbnRpZmlhYmxlID0gKFVucmVzb2x2ZWRJZGVudGlmaWFibGUpdGhlRU9iamVjdDsKKwkJCQlUMSByZXN1bHQgPSBjYXNlVW5yZXNvbHZlZElkZW50aWZpYWJsZSh1bnJlc29sdmVkSWRlbnRpZmlhYmxlKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGRlZmF1bHRDYXNlKHRoZUVPYmplY3QpOworCQkJCXJldHVybiByZXN1bHQ7CisJCQl9CisJCQljYXNlIEdyYXBoUGFja2FnZS5VUklfVE9fSURFTlRJRklBQkxFX01BUF9FTlRSWTogeworCQkJCUBTdXBwcmVzc1dhcm5pbmdzKCJ1bmNoZWNrZWQiKSBNYXAuRW50cnk8VVJJLCBJZGVudGlmaWFibGU+IHVyaVRvSWRlbnRpZmlhYmxlTWFwRW50cnkgPSAoTWFwLkVudHJ5PFVSSSwgSWRlbnRpZmlhYmxlPil0aGVFT2JqZWN0OworCQkJCVQxIHJlc3VsdCA9IGNhc2VVUklUb0lkZW50aWZpYWJsZU1hcEVudHJ5KHVyaVRvSWRlbnRpZmlhYmxlTWFwRW50cnkpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gZGVmYXVsdENhc2UodGhlRU9iamVjdCk7CisJCQkJcmV0dXJuIHJlc3VsdDsKKwkJCX0KKwkJCWNhc2UgR3JhcGhQYWNrYWdlLkRZTkFNSUNfRURHRV9MQUJFTDogeworCQkJCUR5bmFtaWNFZGdlTGFiZWwgZHluYW1pY0VkZ2VMYWJlbCA9IChEeW5hbWljRWRnZUxhYmVsKXRoZUVPYmplY3Q7CisJCQkJVDEgcmVzdWx0ID0gY2FzZUR5bmFtaWNFZGdlTGFiZWwoZHluYW1pY0VkZ2VMYWJlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlRHluYW1pY0xhYmVsKGR5bmFtaWNFZGdlTGFiZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZUVkZ2VMYWJlbChkeW5hbWljRWRnZUxhYmVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VMYWJlbChkeW5hbWljRWRnZUxhYmVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VJZGVudGlmaWFibGUoZHluYW1pY0VkZ2VMYWJlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlQ29tcGFyYWJsZShkeW5hbWljRWRnZUxhYmVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VTYW5pdHlDaGVja2VyKGR5bmFtaWNFZGdlTGFiZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gZGVmYXVsdENhc2UodGhlRU9iamVjdCk7CisJCQkJcmV0dXJuIHJlc3VsdDsKKwkJCX0KKwkJCWNhc2UgR3JhcGhQYWNrYWdlLkVER0VfTEFCRUw6IHsKKwkJCQlFZGdlTGFiZWwgZWRnZUxhYmVsID0gKEVkZ2VMYWJlbCl0aGVFT2JqZWN0OworCQkJCVQxIHJlc3VsdCA9IGNhc2VFZGdlTGFiZWwoZWRnZUxhYmVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VMYWJlbChlZGdlTGFiZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZUlkZW50aWZpYWJsZShlZGdlTGFiZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZUNvbXBhcmFibGUoZWRnZUxhYmVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VTYW5pdHlDaGVja2VyKGVkZ2VMYWJlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBkZWZhdWx0Q2FzZSh0aGVFT2JqZWN0KTsKKwkJCQlyZXR1cm4gcmVzdWx0OworCQkJfQorCQkJY2FzZSBHcmFwaFBhY2thZ2UuU1RBVElDX0VER0VfTEFCRUw6IHsKKwkJCQlTdGF0aWNFZGdlTGFiZWwgc3RhdGljRWRnZUxhYmVsID0gKFN0YXRpY0VkZ2VMYWJlbCl0aGVFT2JqZWN0OworCQkJCVQxIHJlc3VsdCA9IGNhc2VTdGF0aWNFZGdlTGFiZWwoc3RhdGljRWRnZUxhYmVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VFZGdlTGFiZWwoc3RhdGljRWRnZUxhYmVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VTdGF0aWNMYWJlbChzdGF0aWNFZGdlTGFiZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZUxhYmVsKHN0YXRpY0VkZ2VMYWJlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlTW9kaWZpYWJsZShzdGF0aWNFZGdlTGFiZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZUlkZW50aWZpYWJsZShzdGF0aWNFZGdlTGFiZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZUNvbXBhcmFibGUoc3RhdGljRWRnZUxhYmVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VTYW5pdHlDaGVja2VyKHN0YXRpY0VkZ2VMYWJlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBkZWZhdWx0Q2FzZSh0aGVFT2JqZWN0KTsKKwkJCQlyZXR1cm4gcmVzdWx0OworCQkJfQorCQkJY2FzZSBHcmFwaFBhY2thZ2UuVVJJX1RPX0VER0VfTUFQX0VOVFJZOiB7CisJCQkJQFN1cHByZXNzV2FybmluZ3MoInVuY2hlY2tlZCIpIE1hcC5FbnRyeTxVUkksIEVkZ2U+IHVyaVRvRWRnZU1hcEVudHJ5ID0gKE1hcC5FbnRyeTxVUkksIEVkZ2U+KXRoZUVPYmplY3Q7CisJCQkJVDEgcmVzdWx0ID0gY2FzZVVSSVRvRWRnZU1hcEVudHJ5KHVyaVRvRWRnZU1hcEVudHJ5KTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGRlZmF1bHRDYXNlKHRoZUVPYmplY3QpOworCQkJCXJldHVybiByZXN1bHQ7CisJCQl9CisJCQljYXNlIEdyYXBoUGFja2FnZS5VUklfVE9fTk9ERV9NQVBfRU5UUlk6IHsKKwkJCQlAU3VwcHJlc3NXYXJuaW5ncygidW5jaGVja2VkIikgTWFwLkVudHJ5PFVSSSwgTm9kZT4gdXJpVG9Ob2RlTWFwRW50cnkgPSAoTWFwLkVudHJ5PFVSSSwgTm9kZT4pdGhlRU9iamVjdDsKKwkJCQlUMSByZXN1bHQgPSBjYXNlVVJJVG9Ob2RlTWFwRW50cnkodXJpVG9Ob2RlTWFwRW50cnkpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gZGVmYXVsdENhc2UodGhlRU9iamVjdCk7CisJCQkJcmV0dXJuIHJlc3VsdDsKKwkJCX0KKwkJCWNhc2UgR3JhcGhQYWNrYWdlLlVSSV9UT19MQUJFTF9NQVBfRU5UUlk6IHsKKwkJCQlAU3VwcHJlc3NXYXJuaW5ncygidW5jaGVja2VkIikgTWFwLkVudHJ5PFVSSSwgTGFiZWw+IHVyaVRvTGFiZWxNYXBFbnRyeSA9IChNYXAuRW50cnk8VVJJLCBMYWJlbD4pdGhlRU9iamVjdDsKKwkJCQlUMSByZXN1bHQgPSBjYXNlVVJJVG9MYWJlbE1hcEVudHJ5KHVyaVRvTGFiZWxNYXBFbnRyeSk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBkZWZhdWx0Q2FzZSh0aGVFT2JqZWN0KTsKKwkJCQlyZXR1cm4gcmVzdWx0OworCQkJfQorCQkJY2FzZSBHcmFwaFBhY2thZ2UuVVJJX1RPX05PREVfTEFCRUxfTUFQX0VOVFJZOiB7CisJCQkJQFN1cHByZXNzV2FybmluZ3MoInVuY2hlY2tlZCIpIE1hcC5FbnRyeTxVUkksIE5vZGVMYWJlbD4gdXJpVG9Ob2RlTGFiZWxNYXBFbnRyeSA9IChNYXAuRW50cnk8VVJJLCBOb2RlTGFiZWw+KXRoZUVPYmplY3Q7CisJCQkJVDEgcmVzdWx0ID0gY2FzZVVSSVRvTm9kZUxhYmVsTWFwRW50cnkodXJpVG9Ob2RlTGFiZWxNYXBFbnRyeSk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBkZWZhdWx0Q2FzZSh0aGVFT2JqZWN0KTsKKwkJCQlyZXR1cm4gcmVzdWx0OworCQkJfQorCQkJY2FzZSBHcmFwaFBhY2thZ2UuU1RBVElDX0xBQkVMOiB7CisJCQkJU3RhdGljTGFiZWwgc3RhdGljTGFiZWwgPSAoU3RhdGljTGFiZWwpdGhlRU9iamVjdDsKKwkJCQlUMSByZXN1bHQgPSBjYXNlU3RhdGljTGFiZWwoc3RhdGljTGFiZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZUxhYmVsKHN0YXRpY0xhYmVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VNb2RpZmlhYmxlKHN0YXRpY0xhYmVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VJZGVudGlmaWFibGUoc3RhdGljTGFiZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZUNvbXBhcmFibGUoc3RhdGljTGFiZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZVNhbml0eUNoZWNrZXIoc3RhdGljTGFiZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gZGVmYXVsdENhc2UodGhlRU9iamVjdCk7CisJCQkJcmV0dXJuIHJlc3VsdDsKKwkJCX0KKwkJCWNhc2UgR3JhcGhQYWNrYWdlLkdSQVBIX1BBUlRJVElPTkVSOiB7CisJCQkJR3JhcGhQYXJ0aXRpb25lciBncmFwaFBhcnRpdGlvbmVyID0gKEdyYXBoUGFydGl0aW9uZXIpdGhlRU9iamVjdDsKKwkJCQlUMSByZXN1bHQgPSBjYXNlR3JhcGhQYXJ0aXRpb25lcihncmFwaFBhcnRpdGlvbmVyKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGRlZmF1bHRDYXNlKHRoZUVPYmplY3QpOworCQkJCXJldHVybiByZXN1bHQ7CisJCQl9CisJCQljYXNlIEdyYXBoUGFja2FnZS5TSU1QTEVfR1JBUEhfUEFSVElUSU9ORVI6IHsKKwkJCQlTaW1wbGVHcmFwaFBhcnRpdGlvbmVyIHNpbXBsZUdyYXBoUGFydGl0aW9uZXIgPSAoU2ltcGxlR3JhcGhQYXJ0aXRpb25lcil0aGVFT2JqZWN0OworCQkJCVQxIHJlc3VsdCA9IGNhc2VTaW1wbGVHcmFwaFBhcnRpdGlvbmVyKHNpbXBsZUdyYXBoUGFydGl0aW9uZXIpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZUdyYXBoUGFydGl0aW9uZXIoc2ltcGxlR3JhcGhQYXJ0aXRpb25lcik7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBkZWZhdWx0Q2FzZSh0aGVFT2JqZWN0KTsKKwkJCQlyZXR1cm4gcmVzdWx0OworCQkJfQorCQkJY2FzZSBHcmFwaFBhY2thZ2UuRVhDSEFOR0U6IHsKKwkJCQlFeGNoYW5nZSBleGNoYW5nZSA9IChFeGNoYW5nZSl0aGVFT2JqZWN0OworCQkJCVQxIHJlc3VsdCA9IGNhc2VFeGNoYW5nZShleGNoYW5nZSk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlQ29tcGFyYWJsZShleGNoYW5nZSk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBkZWZhdWx0Q2FzZSh0aGVFT2JqZWN0KTsKKwkJCQlyZXR1cm4gcmVzdWx0OworCQkJfQorCQkJY2FzZSBHcmFwaFBhY2thZ2UuSU5URUdSQVRJT05fTEFCRUw6IHsKKwkJCQlJbnRlZ3JhdGlvbkxhYmVsIGludGVncmF0aW9uTGFiZWwgPSAoSW50ZWdyYXRpb25MYWJlbCl0aGVFT2JqZWN0OworCQkJCVQxIHJlc3VsdCA9IGNhc2VJbnRlZ3JhdGlvbkxhYmVsKGludGVncmF0aW9uTGFiZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZUR5bmFtaWNOb2RlTGFiZWwoaW50ZWdyYXRpb25MYWJlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlRHluYW1pY0xhYmVsKGludGVncmF0aW9uTGFiZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZU5vZGVMYWJlbChpbnRlZ3JhdGlvbkxhYmVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VMYWJlbChpbnRlZ3JhdGlvbkxhYmVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VJZGVudGlmaWFibGUoaW50ZWdyYXRpb25MYWJlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlQ29tcGFyYWJsZShpbnRlZ3JhdGlvbkxhYmVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VTYW5pdHlDaGVja2VyKGludGVncmF0aW9uTGFiZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gZGVmYXVsdENhc2UodGhlRU9iamVjdCk7CisJCQkJcmV0dXJuIHJlc3VsdDsKKwkJCX0KKwkJCWNhc2UgR3JhcGhQYWNrYWdlLklOVEVHUkFUSU9OX0xBQkVMX1ZBTFVFOiB7CisJCQkJSW50ZWdyYXRpb25MYWJlbFZhbHVlIGludGVncmF0aW9uTGFiZWxWYWx1ZSA9IChJbnRlZ3JhdGlvbkxhYmVsVmFsdWUpdGhlRU9iamVjdDsKKwkJCQlUMSByZXN1bHQgPSBjYXNlSW50ZWdyYXRpb25MYWJlbFZhbHVlKGludGVncmF0aW9uTGFiZWxWYWx1ZSk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlTGFiZWxWYWx1ZShpbnRlZ3JhdGlvbkxhYmVsVmFsdWUpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZVNhbml0eUNoZWNrZXIoaW50ZWdyYXRpb25MYWJlbFZhbHVlKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGRlZmF1bHRDYXNlKHRoZUVPYmplY3QpOworCQkJCXJldHVybiByZXN1bHQ7CisJCQl9CisJCQlkZWZhdWx0OiByZXR1cm4gZGVmYXVsdENhc2UodGhlRU9iamVjdCk7CisJCX0KKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5EeW5hbWljIExhYmVsPC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7CisJICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCisJICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+RHluYW1pYyBMYWJlbDwvZW0+Jy4KKwkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFQxIGNhc2VEeW5hbWljTGFiZWwoRHluYW1pY0xhYmVsIG9iamVjdCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5FZGdlPC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7CisJICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCisJICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+RWRnZTwvZW0+Jy4KKwkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFQxIGNhc2VFZGdlKEVkZ2Ugb2JqZWN0KSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkdyYXBoPC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7CisJICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCisJICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+R3JhcGg8L2VtPicuCisJICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBUMSBjYXNlR3JhcGgoR3JhcGggb2JqZWN0KSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkxhYmVsPC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7CisJICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCisJICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+TGFiZWw8L2VtPicuCisJICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBUMSBjYXNlTGFiZWwoTGFiZWwgb2JqZWN0KSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkxhYmVsIFZhbHVlPC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7CisJICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCisJICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+TGFiZWwgVmFsdWU8L2VtPicuCisJICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBUMSBjYXNlTGFiZWxWYWx1ZShMYWJlbFZhbHVlIG9iamVjdCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5Ob2RlPC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7CisJICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCisJICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+Tm9kZTwvZW0+Jy4KKwkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFQxIGNhc2VOb2RlKE5vZGUgb2JqZWN0KSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPlVucmVzb2x2ZWQgSWRlbnRpZmlhYmxlPC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7CisJICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCisJICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+VW5yZXNvbHZlZCBJZGVudGlmaWFibGU8L2VtPicuCisJICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBUMSBjYXNlVW5yZXNvbHZlZElkZW50aWZpYWJsZShVbnJlc29sdmVkSWRlbnRpZmlhYmxlIG9iamVjdCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5VUkkgVG8gSWRlbnRpZmlhYmxlIE1hcCBFbnRyeTwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOworCSAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgorCSAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPlVSSSBUbyBJZGVudGlmaWFibGUgTWFwIEVudHJ5PC9lbT4nLgorCSAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVDEgY2FzZVVSSVRvSWRlbnRpZmlhYmxlTWFwRW50cnkoTWFwLkVudHJ5PFVSSSwgSWRlbnRpZmlhYmxlPiBvYmplY3QpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+U2FuaXR5IENoZWNrZXI8L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsKKwkgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KKwkgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5TYW5pdHkgQ2hlY2tlcjwvZW0+Jy4KKwkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFQxIGNhc2VTYW5pdHlDaGVja2VyKFNhbml0eUNoZWNrZXIgb2JqZWN0KSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkR5bmFtaWMgRWRnZSBMYWJlbDwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOworCSAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgorCSAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkR5bmFtaWMgRWRnZSBMYWJlbDwvZW0+Jy4KKwkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFQxIGNhc2VEeW5hbWljRWRnZUxhYmVsKER5bmFtaWNFZGdlTGFiZWwgb2JqZWN0KSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkVkZ2UgTGFiZWw8L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsKKwkgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KKwkgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5FZGdlIExhYmVsPC9lbT4nLgorCSAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVDEgY2FzZUVkZ2VMYWJlbChFZGdlTGFiZWwgb2JqZWN0KSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPlN0YXRpYyBFZGdlIExhYmVsPC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7CisJICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCisJICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+U3RhdGljIEVkZ2UgTGFiZWw8L2VtPicuCisJICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBUMSBjYXNlU3RhdGljRWRnZUxhYmVsKFN0YXRpY0VkZ2VMYWJlbCBvYmplY3QpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+VVJJIFRvIEVkZ2UgTWFwIEVudHJ5PC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7CisJICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCisJICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+VVJJIFRvIEVkZ2UgTWFwIEVudHJ5PC9lbT4nLgorCSAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVDEgY2FzZVVSSVRvRWRnZU1hcEVudHJ5KE1hcC5FbnRyeTxVUkksIEVkZ2U+IG9iamVjdCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5VUkkgVG8gTm9kZSBNYXAgRW50cnk8L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsKKwkgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KKwkgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5VUkkgVG8gTm9kZSBNYXAgRW50cnk8L2VtPicuCisJICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBUMSBjYXNlVVJJVG9Ob2RlTWFwRW50cnkoTWFwLkVudHJ5PFVSSSwgTm9kZT4gb2JqZWN0KSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPlVSSSBUbyBMYWJlbCBNYXAgRW50cnk8L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsKKwkgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KKwkgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5VUkkgVG8gTGFiZWwgTWFwIEVudHJ5PC9lbT4nLgorCSAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVDEgY2FzZVVSSVRvTGFiZWxNYXBFbnRyeShNYXAuRW50cnk8VVJJLCBMYWJlbD4gb2JqZWN0KSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPlVSSSBUbyBOb2RlIExhYmVsIE1hcCBFbnRyeTwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOworCSAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgorCSAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPlVSSSBUbyBOb2RlIExhYmVsIE1hcCBFbnRyeTwvZW0+Jy4KKwkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFQxIGNhc2VVUklUb05vZGVMYWJlbE1hcEVudHJ5KE1hcC5FbnRyeTxVUkksIE5vZGVMYWJlbD4gb2JqZWN0KSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPlN0YXRpYyBMYWJlbDwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOworCSAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgorCSAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPlN0YXRpYyBMYWJlbDwvZW0+Jy4KKwkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFQxIGNhc2VTdGF0aWNMYWJlbChTdGF0aWNMYWJlbCBvYmplY3QpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+UGFydGl0aW9uZXI8L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsKKwkgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KKwkgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5QYXJ0aXRpb25lcjwvZW0+Jy4KKwkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFQxIGNhc2VHcmFwaFBhcnRpdGlvbmVyKEdyYXBoUGFydGl0aW9uZXIgb2JqZWN0KSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPlNpbXBsZSBHcmFwaCBQYXJ0aXRpb25lcjwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOworCSAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgorCSAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPlNpbXBsZSBHcmFwaCBQYXJ0aXRpb25lcjwvZW0+Jy4KKwkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFQxIGNhc2VTaW1wbGVHcmFwaFBhcnRpdGlvbmVyKFNpbXBsZUdyYXBoUGFydGl0aW9uZXIgb2JqZWN0KSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkV4Y2hhbmdlPC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7CisJICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCisJICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+RXhjaGFuZ2U8L2VtPicuCisJICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBUMSBjYXNlRXhjaGFuZ2UoRXhjaGFuZ2Ugb2JqZWN0KSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkludGVncmF0aW9uIExhYmVsPC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7CisJICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCisJICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+SW50ZWdyYXRpb24gTGFiZWw8L2VtPicuCisJICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBUMSBjYXNlSW50ZWdyYXRpb25MYWJlbChJbnRlZ3JhdGlvbkxhYmVsIG9iamVjdCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5JbnRlZ3JhdGlvbiBMYWJlbCBWYWx1ZTwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOworCSAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgorCSAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkludGVncmF0aW9uIExhYmVsIFZhbHVlPC9lbT4nLgorCSAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVDEgY2FzZUludGVncmF0aW9uTGFiZWxWYWx1ZShJbnRlZ3JhdGlvbkxhYmVsVmFsdWUgb2JqZWN0KSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkNvbXBhcmFibGU8L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsKKwkgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KKwkgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5Db21wYXJhYmxlPC9lbT4nLgorCSAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgPFQ+IFQxIGNhc2VDb21wYXJhYmxlKENvbXBhcmFibGU8VD4gb2JqZWN0KSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkR5bmFtaWMgTm9kZSBMYWJlbDwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOworCSAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgorCSAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkR5bmFtaWMgTm9kZSBMYWJlbDwvZW0+Jy4KKwkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFQxIGNhc2VEeW5hbWljTm9kZUxhYmVsKER5bmFtaWNOb2RlTGFiZWwgb2JqZWN0KSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPlN0YXRpYyBOb2RlIExhYmVsPC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7CisJICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCisJICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+U3RhdGljIE5vZGUgTGFiZWw8L2VtPicuCisJICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBUMSBjYXNlU3RhdGljTm9kZUxhYmVsKFN0YXRpY05vZGVMYWJlbCBvYmplY3QpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+Tm9kZSBMYWJlbDwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOworCSAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgorCSAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPk5vZGUgTGFiZWw8L2VtPicuCisJICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBUMSBjYXNlTm9kZUxhYmVsKE5vZGVMYWJlbCBvYmplY3QpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+SWRlbnRpZmlhYmxlPC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7CisJICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCisJICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+SWRlbnRpZmlhYmxlPC9lbT4nLgorCSAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVDEgY2FzZUlkZW50aWZpYWJsZShJZGVudGlmaWFibGUgb2JqZWN0KSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPk1vZGlmaWFibGU8L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsKKwkgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KKwkgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5Nb2RpZmlhYmxlPC9lbT4nLgorCSAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVDEgY2FzZU1vZGlmaWFibGUoTW9kaWZpYWJsZSBvYmplY3QpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+RU9iamVjdDwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOworCSAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLCBidXQgdGhpcyBpcyB0aGUgbGFzdCBjYXNlIGFueXdheS4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KKwkgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5FT2JqZWN0PC9lbT4nLgorCSAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVDEgZGVmYXVsdENhc2UoRU9iamVjdCBvYmplY3QpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCit9IC8vR3JhcGhTd2l0Y2gKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvbG9nZ2VyL0xvZ2dlci5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9sb2dnZXIvTG9nZ2VyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWMwNmVhOQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvbG9nZ2VyL0xvZ2dlci5qYXZhCkBAIC0wLDAgKzEsMjIgQEAKKy8qKgorICogPGNvcHlyaWdodD4KKyAqIDwvY29weXJpZ2h0PgorICoKKyAqICRJZCQKKyAqLworcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubG9nZ2VyOworCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5JZGVudGlmaWFibGU7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIEEgcmVwcmVzZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPkxvZ2dlcjwvYj48L2VtPicuCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqCisgKgorICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubG9nZ2VyLkxvZ2dlclBhY2thZ2UjZ2V0TG9nZ2VyKCkKKyAqIEBtb2RlbCBhYnN0cmFjdD0idHJ1ZSIKKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGludGVyZmFjZSBMb2dnZXIgZXh0ZW5kcyBJZGVudGlmaWFibGUgeworfSAvLyBMb2dnZXIKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvbG9nZ2VyL0xvZ2dlckZhY3RvcnkuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvbG9nZ2VyL0xvZ2dlckZhY3RvcnkuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZjkwNjkyCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9sb2dnZXIvTG9nZ2VyRmFjdG9yeS5qYXZhCkBAIC0wLDAgKzEsMzcgQEAKKy8qKgorICogPGNvcHlyaWdodD4KKyAqIDwvY29weXJpZ2h0PgorICoKKyAqICRJZCQKKyAqLworcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubG9nZ2VyOworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVGYWN0b3J5OworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiBUaGUgPGI+RmFjdG9yeTwvYj4gZm9yIHRoZSBtb2RlbC4KKyAqIEl0IHByb3ZpZGVzIGEgY3JlYXRlIG1ldGhvZCBmb3IgZWFjaCBub24tYWJzdHJhY3QgY2xhc3Mgb2YgdGhlIG1vZGVsLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5sb2dnZXIuTG9nZ2VyUGFja2FnZQorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgaW50ZXJmYWNlIExvZ2dlckZhY3RvcnkgZXh0ZW5kcyBFRmFjdG9yeSB7CisJLyoqCisJICogVGhlIHNpbmdsZXRvbiBpbnN0YW5jZSBvZiB0aGUgZmFjdG9yeS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlMb2dnZXJGYWN0b3J5IGVJTlNUQU5DRSA9IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5sb2dnZXIuaW1wbC5Mb2dnZXJGYWN0b3J5SW1wbC5pbml0KCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBwYWNrYWdlIHN1cHBvcnRlZCBieSB0aGlzIGZhY3RvcnkuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBwYWNrYWdlIHN1cHBvcnRlZCBieSB0aGlzIGZhY3RvcnkuCisJICogQGdlbmVyYXRlZAorCSAqLworCUxvZ2dlclBhY2thZ2UgZ2V0TG9nZ2VyUGFja2FnZSgpOworCit9IC8vTG9nZ2VyRmFjdG9yeQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9sb2dnZXIvTG9nZ2VyUGFja2FnZS5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9sb2dnZXIvTG9nZ2VyUGFja2FnZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIzNjE0YzcKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2xvZ2dlci9Mb2dnZXJQYWNrYWdlLmphdmEKQEAgLTAsMCArMSwxNTIgQEAKKy8qKgorICogPGNvcHlyaWdodD4KKyAqIDwvY29weXJpZ2h0PgorICoKKyAqICRJZCQKKyAqLworcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubG9nZ2VyOworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzczsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRVBhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5Db21tb25QYWNrYWdlOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiBUaGUgPGI+UGFja2FnZTwvYj4gZm9yIHRoZSBtb2RlbC4KKyAqIEl0IGNvbnRhaW5zIGFjY2Vzc29ycyBmb3IgdGhlIG1ldGEgb2JqZWN0cyB0byByZXByZXNlbnQKKyAqIDx1bD4KKyAqICAgPGxpPmVhY2ggY2xhc3MsPC9saT4KKyAqICAgPGxpPmVhY2ggZmVhdHVyZSBvZiBlYWNoIGNsYXNzLDwvbGk+CisgKiAgIDxsaT5lYWNoIGVudW0sPC9saT4KKyAqICAgPGxpPmFuZCBlYWNoIGRhdGEgdHlwZTwvbGk+CisgKiA8L3VsPgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5sb2dnZXIuTG9nZ2VyRmFjdG9yeQorICogQG1vZGVsIGtpbmQ9InBhY2thZ2UiCisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBpbnRlcmZhY2UgTG9nZ2VyUGFja2FnZSBleHRlbmRzIEVQYWNrYWdlIHsKKwkvKioKKwkgKiBUaGUgcGFja2FnZSBuYW1lLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCVN0cmluZyBlTkFNRSA9ICJsb2dnZXIiOyAvLyROT04tTkxTLTEkCisKKwkvKioKKwkgKiBUaGUgcGFja2FnZSBuYW1lc3BhY2UgVVJJLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCVN0cmluZyBlTlNfVVJJID0gImh0dHA6Ly9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvbG9nZ2VyIjsgLy8kTk9OLU5MUy0xJAorCisJLyoqCisJICogVGhlIHBhY2thZ2UgbmFtZXNwYWNlIG5hbWUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJU3RyaW5nIGVOU19QUkVGSVggPSAib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmxvZ2dlciI7IC8vJE5PTi1OTFMtMSQKKworCS8qKgorCSAqIFRoZSBzaW5nbGV0b24gaW5zdGFuY2Ugb2YgdGhlIHBhY2thZ2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJTG9nZ2VyUGFja2FnZSBlSU5TVEFOQ0UgPSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubG9nZ2VyLmltcGwuTG9nZ2VyUGFja2FnZUltcGwuaW5pdCgpOworCisJLyoqCisJICogVGhlIG1ldGEgb2JqZWN0IGlkIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubG9nZ2VyLmltcGwuTG9nZ2VySW1wbCA8ZW0+TG9nZ2VyPC9lbT59JyBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmxvZ2dlci5pbXBsLkxvZ2dlckltcGwKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5sb2dnZXIuaW1wbC5Mb2dnZXJQYWNrYWdlSW1wbCNnZXRMb2dnZXIoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlpbnQgTE9HR0VSID0gMDsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5VUkk8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBMT0dHRVJfX1VSSSA9IENvbW1vblBhY2thZ2UuSURFTlRJRklBQkxFX19VUkk7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VHlwZSBVUkk8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBMT0dHRVJfX1RZUEVfVVJJID0gQ29tbW9uUGFja2FnZS5JREVOVElGSUFCTEVfX1RZUEVfVVJJOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkR1YmxpbiBDb3JlPC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgTE9HR0VSX19EVUJMSU5fQ09SRSA9IENvbW1vblBhY2thZ2UuSURFTlRJRklBQkxFX19EVUJMSU5fQ09SRTsKKworCS8qKgorCSAqIFRoZSBudW1iZXIgb2Ygc3RydWN0dXJhbCBmZWF0dXJlcyBvZiB0aGUgJzxlbT5Mb2dnZXI8L2VtPicgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgTE9HR0VSX0ZFQVRVUkVfQ09VTlQgPSBDb21tb25QYWNrYWdlLklERU5USUZJQUJMRV9GRUFUVVJFX0NPVU5UICsgMDsKKworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmxvZ2dlci5Mb2dnZXIgPGVtPkxvZ2dlcjwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJzxlbT5Mb2dnZXI8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubG9nZ2VyLkxvZ2dlcgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQ2xhc3MgZ2V0TG9nZ2VyKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBmYWN0b3J5IHRoYXQgY3JlYXRlcyB0aGUgaW5zdGFuY2VzIG9mIHRoZSBtb2RlbC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIGZhY3RvcnkgdGhhdCBjcmVhdGVzIHRoZSBpbnN0YW5jZXMgb2YgdGhlIG1vZGVsLgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlMb2dnZXJGYWN0b3J5IGdldExvZ2dlckZhY3RvcnkoKTsKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogRGVmaW5lcyBsaXRlcmFscyBmb3IgdGhlIG1ldGEgb2JqZWN0cyB0aGF0IHJlcHJlc2VudAorCSAqIDx1bD4KKwkgKiAgIDxsaT5lYWNoIGNsYXNzLDwvbGk+CisJICogICA8bGk+ZWFjaCBmZWF0dXJlIG9mIGVhY2ggY2xhc3MsPC9saT4KKwkgKiAgIDxsaT5lYWNoIGVudW0sPC9saT4KKwkgKiAgIDxsaT5hbmQgZWFjaCBkYXRhIHR5cGU8L2xpPgorCSAqIDwvdWw+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCWludGVyZmFjZSBMaXRlcmFscyB7CisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmxvZ2dlci5pbXBsLkxvZ2dlckltcGwgPGVtPkxvZ2dlcjwvZW0+fScgY2xhc3MuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5sb2dnZXIuaW1wbC5Mb2dnZXJJbXBsCisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmxvZ2dlci5pbXBsLkxvZ2dlclBhY2thZ2VJbXBsI2dldExvZ2dlcigpCisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVDbGFzcyBMT0dHRVIgPSBlSU5TVEFOQ0UuZ2V0TG9nZ2VyKCk7CisKKwl9CisKK30gLy9Mb2dnZXJQYWNrYWdlCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2xvZ2dlci9pbXBsL0xvZ2dlckZhY3RvcnlJbXBsLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2xvZ2dlci9pbXBsL0xvZ2dlckZhY3RvcnlJbXBsLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTJlMzA2NwotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvbG9nZ2VyL2ltcGwvTG9nZ2VyRmFjdG9yeUltcGwuamF2YQpAQCAtMCwwICsxLDg2IEBACisvKioKKyAqIDxjb3B5cmlnaHQ+CisgKiA8L2NvcHlyaWdodD4KKyAqCisgKiAkSWQkCisgKi8KK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmxvZ2dlci5pbXBsOworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzczsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRVBhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLmltcGwuRUZhY3RvcnlJbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5wbHVnaW4uRWNvcmVQbHVnaW47CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmxvZ2dlci5Mb2dnZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5sb2dnZXIuTG9nZ2VyUGFja2FnZTsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIG1vZGVsIDxiPkZhY3Rvcnk8L2I+LgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBMb2dnZXJGYWN0b3J5SW1wbCBleHRlbmRzIEVGYWN0b3J5SW1wbCBpbXBsZW1lbnRzIExvZ2dlckZhY3RvcnkgeworCS8qKgorCSAqIENyZWF0ZXMgdGhlIGRlZmF1bHQgZmFjdG9yeSBpbXBsZW1lbnRhdGlvbi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgc3RhdGljIExvZ2dlckZhY3RvcnkgaW5pdCgpIHsKKwkJdHJ5IHsKKwkJCUxvZ2dlckZhY3RvcnkgdGhlTG9nZ2VyRmFjdG9yeSA9IChMb2dnZXJGYWN0b3J5KUVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVGYWN0b3J5KCJodHRwOi8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2xvZ2dlciIpOyAvLyROT04tTkxTLTEkIAorCQkJaWYgKHRoZUxvZ2dlckZhY3RvcnkgIT0gbnVsbCkgeworCQkJCXJldHVybiB0aGVMb2dnZXJGYWN0b3J5OworCQkJfQorCQl9CisJCWNhdGNoIChFeGNlcHRpb24gZXhjZXB0aW9uKSB7CisJCQlFY29yZVBsdWdpbi5JTlNUQU5DRS5sb2coZXhjZXB0aW9uKTsKKwkJfQorCQlyZXR1cm4gbmV3IExvZ2dlckZhY3RvcnlJbXBsKCk7CisJfQorCisJLyoqCisJICogQ3JlYXRlcyBhbiBpbnN0YW5jZSBvZiB0aGUgZmFjdG9yeS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgTG9nZ2VyRmFjdG9yeUltcGwoKSB7CisJCXN1cGVyKCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIEVPYmplY3QgY3JlYXRlKEVDbGFzcyBlQ2xhc3MpIHsKKwkJc3dpdGNoIChlQ2xhc3MuZ2V0Q2xhc3NpZmllcklEKCkpIHsKKwkJCWRlZmF1bHQ6CisJCQkJdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiVGhlIGNsYXNzICciICsgZUNsYXNzLmdldE5hbWUoKSArICInIGlzIG5vdCBhIHZhbGlkIGNsYXNzaWZpZXIiKTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCisJCX0KKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgTG9nZ2VyUGFja2FnZSBnZXRMb2dnZXJQYWNrYWdlKCkgeworCQlyZXR1cm4gKExvZ2dlclBhY2thZ2UpZ2V0RVBhY2thZ2UoKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBkZXByZWNhdGVkCisJICogQGdlbmVyYXRlZAorCSAqLworCUBEZXByZWNhdGVkCisJcHVibGljIHN0YXRpYyBMb2dnZXJQYWNrYWdlIGdldFBhY2thZ2UoKSB7CisJCXJldHVybiBMb2dnZXJQYWNrYWdlLmVJTlNUQU5DRTsKKwl9CisKK30gLy9Mb2dnZXJGYWN0b3J5SW1wbApkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9sb2dnZXIvaW1wbC9Mb2dnZXJJbXBsLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2xvZ2dlci9pbXBsL0xvZ2dlckltcGwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZDQ0ZTdjCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9sb2dnZXIvaW1wbC9Mb2dnZXJJbXBsLmphdmEKQEAgLTAsMCArMSw0MyBAQAorLyoqCisgKiA8Y29weXJpZ2h0PgorICogPC9jb3B5cmlnaHQ+CisgKgorICogJElkJAorICovCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5sb2dnZXIuaW1wbDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5pbXBsLklkZW50aWZpYWJsZUltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmxvZ2dlci5Mb2dnZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmxvZ2dlci5Mb2dnZXJQYWNrYWdlOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiBBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+TG9nZ2VyPC9iPjwvZW0+Jy4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogPHA+CisgKiA8L3A+CisgKgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgYWJzdHJhY3QgY2xhc3MgTG9nZ2VySW1wbCBleHRlbmRzIElkZW50aWZpYWJsZUltcGwgaW1wbGVtZW50cyBMb2dnZXIgeworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBMb2dnZXJJbXBsKCkgeworCQlzdXBlcigpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCBFQ2xhc3MgZVN0YXRpY0NsYXNzKCkgeworCQlyZXR1cm4gTG9nZ2VyUGFja2FnZS5MaXRlcmFscy5MT0dHRVI7CisJfQorCit9IC8vTG9nZ2VySW1wbApkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9sb2dnZXIvaW1wbC9Mb2dnZXJQYWNrYWdlSW1wbC5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9sb2dnZXIvaW1wbC9Mb2dnZXJQYWNrYWdlSW1wbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJiYTMyOTgKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2xvZ2dlci9pbXBsL0xvZ2dlclBhY2thZ2VJbXBsLmphdmEKQEAgLTAsMCArMSwyMjcgQEAKKy8qKgorICogPGNvcHlyaWdodD4KKyAqIDwvY29weXJpZ2h0PgorICoKKyAqICRJZCQKKyAqLworcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubG9nZ2VyLmltcGw7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRWNvcmVQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5pbXBsLkVQYWNrYWdlSW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLkNvbW1vblBhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5pbXBsLkNvbW1vblBhY2thZ2VJbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5leHBlcmltZW50LkV4cGVyaW1lbnRQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5leHBlcmltZW50LmltcGwuRXhwZXJpbWVudFBhY2thZ2VJbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5HcmFwaFBhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmltcGwuR3JhcGhQYWNrYWdlSW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubG9nZ2VyLkxvZ2dlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubG9nZ2VyLkxvZ2dlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmxvZ2dlci5Mb2dnZXJQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5Nb2RlbFBhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLmltcGwuTW9kZWxQYWNrYWdlSW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuTW9kaWZpZXJQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5pbXBsLk1vZGlmaWVyUGFja2FnZUltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZS5QcmVkaWNhdGVQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUuaW1wbC5QcmVkaWNhdGVQYWNrYWdlSW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2NlbmFyaW8uU2NlbmFyaW9QYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zY2VuYXJpby5pbXBsLlNjZW5hcmlvUGFja2FnZUltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNlcXVlbmNlci5TZXF1ZW5jZXJQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zZXF1ZW5jZXIuaW1wbC5TZXF1ZW5jZXJQYWNrYWdlSW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc29sdmVyLlNvbHZlclBhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNvbHZlci5pbXBsLlNvbHZlclBhY2thZ2VJbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS50cmlnZ2VyLlRyaWdnZXJQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS50cmlnZ2VyLmltcGwuVHJpZ2dlclBhY2thZ2VJbXBsOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiBBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgbW9kZWwgPGI+UGFja2FnZTwvYj4uCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIExvZ2dlclBhY2thZ2VJbXBsIGV4dGVuZHMgRVBhY2thZ2VJbXBsIGltcGxlbWVudHMgTG9nZ2VyUGFja2FnZSB7CisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJpdmF0ZSBFQ2xhc3MgbG9nZ2VyRUNsYXNzID0gbnVsbDsKKworCS8qKgorCSAqIENyZWF0ZXMgYW4gaW5zdGFuY2Ugb2YgdGhlIG1vZGVsIDxiPlBhY2thZ2U8L2I+LCByZWdpc3RlcmVkIHdpdGgKKwkgKiB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVQYWNrYWdlLlJlZ2lzdHJ5IEVQYWNrYWdlLlJlZ2lzdHJ5fSBieSB0aGUgcGFja2FnZQorCSAqIHBhY2thZ2UgVVJJIHZhbHVlLgorCSAqIDxwPk5vdGU6IHRoZSBjb3JyZWN0IHdheSB0byBjcmVhdGUgdGhlIHBhY2thZ2UgaXMgdmlhIHRoZSBzdGF0aWMKKwkgKiBmYWN0b3J5IG1ldGhvZCB7QGxpbmsgI2luaXQgaW5pdCgpfSwgd2hpY2ggYWxzbyBwZXJmb3JtcworCSAqIGluaXRpYWxpemF0aW9uIG9mIHRoZSBwYWNrYWdlLCBvciByZXR1cm5zIHRoZSByZWdpc3RlcmVkIHBhY2thZ2UsCisJICogaWYgb25lIGFscmVhZHkgZXhpc3RzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRVBhY2thZ2UuUmVnaXN0cnkKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5sb2dnZXIuTG9nZ2VyUGFja2FnZSNlTlNfVVJJCisJICogQHNlZSAjaW5pdCgpCisJICogQGdlbmVyYXRlZAorCSAqLworCXByaXZhdGUgTG9nZ2VyUGFja2FnZUltcGwoKSB7CisJCXN1cGVyKGVOU19VUkksIExvZ2dlckZhY3RvcnkuZUlOU1RBTkNFKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcml2YXRlIHN0YXRpYyBib29sZWFuIGlzSW5pdGVkID0gZmFsc2U7CisKKwkvKioKKwkgKiBDcmVhdGVzLCByZWdpc3RlcnMsIGFuZCBpbml0aWFsaXplcyB0aGUgPGI+UGFja2FnZTwvYj4gZm9yIHRoaXMgbW9kZWwsIGFuZCBmb3IgYW55IG90aGVycyB1cG9uIHdoaWNoIGl0IGRlcGVuZHMuCisJICogCisJICogPHA+VGhpcyBtZXRob2QgaXMgdXNlZCB0byBpbml0aWFsaXplIHtAbGluayBMb2dnZXJQYWNrYWdlI2VJTlNUQU5DRX0gd2hlbiB0aGF0IGZpZWxkIGlzIGFjY2Vzc2VkLgorCSAqIENsaWVudHMgc2hvdWxkIG5vdCBpbnZva2UgaXQgZGlyZWN0bHkuIEluc3RlYWQsIHRoZXkgc2hvdWxkIHNpbXBseSBhY2Nlc3MgdGhhdCBmaWVsZCB0byBvYnRhaW4gdGhlIHBhY2thZ2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNlTlNfVVJJCisJICogQHNlZSAjY3JlYXRlUGFja2FnZUNvbnRlbnRzKCkKKwkgKiBAc2VlICNpbml0aWFsaXplUGFja2FnZUNvbnRlbnRzKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHN0YXRpYyBMb2dnZXJQYWNrYWdlIGluaXQoKSB7CisJCWlmIChpc0luaXRlZCkgcmV0dXJuIChMb2dnZXJQYWNrYWdlKUVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVQYWNrYWdlKExvZ2dlclBhY2thZ2UuZU5TX1VSSSk7CisKKwkJLy8gT2J0YWluIG9yIGNyZWF0ZSBhbmQgcmVnaXN0ZXIgcGFja2FnZQorCQlMb2dnZXJQYWNrYWdlSW1wbCB0aGVMb2dnZXJQYWNrYWdlID0gKExvZ2dlclBhY2thZ2VJbXBsKShFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXQoZU5TX1VSSSkgaW5zdGFuY2VvZiBMb2dnZXJQYWNrYWdlSW1wbCA/IEVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldChlTlNfVVJJKSA6IG5ldyBMb2dnZXJQYWNrYWdlSW1wbCgpKTsKKworCQlpc0luaXRlZCA9IHRydWU7CisKKwkJLy8gSW5pdGlhbGl6ZSBzaW1wbGUgZGVwZW5kZW5jaWVzCisJCUVjb3JlUGFja2FnZS5lSU5TVEFOQ0UuZUNsYXNzKCk7CisKKwkJLy8gT2J0YWluIG9yIGNyZWF0ZSBhbmQgcmVnaXN0ZXIgaW50ZXJkZXBlbmRlbmNpZXMKKwkJQ29tbW9uUGFja2FnZUltcGwgdGhlQ29tbW9uUGFja2FnZSA9IChDb21tb25QYWNrYWdlSW1wbCkoRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RVBhY2thZ2UoQ29tbW9uUGFja2FnZS5lTlNfVVJJKSBpbnN0YW5jZW9mIENvbW1vblBhY2thZ2VJbXBsID8gRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RVBhY2thZ2UoQ29tbW9uUGFja2FnZS5lTlNfVVJJKSA6IENvbW1vblBhY2thZ2UuZUlOU1RBTkNFKTsKKwkJRXhwZXJpbWVudFBhY2thZ2VJbXBsIHRoZUV4cGVyaW1lbnRQYWNrYWdlID0gKEV4cGVyaW1lbnRQYWNrYWdlSW1wbCkoRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RVBhY2thZ2UoRXhwZXJpbWVudFBhY2thZ2UuZU5TX1VSSSkgaW5zdGFuY2VvZiBFeHBlcmltZW50UGFja2FnZUltcGwgPyBFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShFeHBlcmltZW50UGFja2FnZS5lTlNfVVJJKSA6IEV4cGVyaW1lbnRQYWNrYWdlLmVJTlNUQU5DRSk7CisJCUdyYXBoUGFja2FnZUltcGwgdGhlR3JhcGhQYWNrYWdlID0gKEdyYXBoUGFja2FnZUltcGwpKEVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVQYWNrYWdlKEdyYXBoUGFja2FnZS5lTlNfVVJJKSBpbnN0YW5jZW9mIEdyYXBoUGFja2FnZUltcGwgPyBFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShHcmFwaFBhY2thZ2UuZU5TX1VSSSkgOiBHcmFwaFBhY2thZ2UuZUlOU1RBTkNFKTsKKwkJTW9kZWxQYWNrYWdlSW1wbCB0aGVNb2RlbFBhY2thZ2UgPSAoTW9kZWxQYWNrYWdlSW1wbCkoRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RVBhY2thZ2UoTW9kZWxQYWNrYWdlLmVOU19VUkkpIGluc3RhbmNlb2YgTW9kZWxQYWNrYWdlSW1wbCA/IEVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVQYWNrYWdlKE1vZGVsUGFja2FnZS5lTlNfVVJJKSA6IE1vZGVsUGFja2FnZS5lSU5TVEFOQ0UpOworCQlNb2RpZmllclBhY2thZ2VJbXBsIHRoZU1vZGlmaWVyUGFja2FnZSA9IChNb2RpZmllclBhY2thZ2VJbXBsKShFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShNb2RpZmllclBhY2thZ2UuZU5TX1VSSSkgaW5zdGFuY2VvZiBNb2RpZmllclBhY2thZ2VJbXBsID8gRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RVBhY2thZ2UoTW9kaWZpZXJQYWNrYWdlLmVOU19VUkkpIDogTW9kaWZpZXJQYWNrYWdlLmVJTlNUQU5DRSk7CisJCVByZWRpY2F0ZVBhY2thZ2VJbXBsIHRoZVByZWRpY2F0ZVBhY2thZ2UgPSAoUHJlZGljYXRlUGFja2FnZUltcGwpKEVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVQYWNrYWdlKFByZWRpY2F0ZVBhY2thZ2UuZU5TX1VSSSkgaW5zdGFuY2VvZiBQcmVkaWNhdGVQYWNrYWdlSW1wbCA/IEVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVQYWNrYWdlKFByZWRpY2F0ZVBhY2thZ2UuZU5TX1VSSSkgOiBQcmVkaWNhdGVQYWNrYWdlLmVJTlNUQU5DRSk7CisJCVNjZW5hcmlvUGFja2FnZUltcGwgdGhlU2NlbmFyaW9QYWNrYWdlID0gKFNjZW5hcmlvUGFja2FnZUltcGwpKEVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVQYWNrYWdlKFNjZW5hcmlvUGFja2FnZS5lTlNfVVJJKSBpbnN0YW5jZW9mIFNjZW5hcmlvUGFja2FnZUltcGwgPyBFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShTY2VuYXJpb1BhY2thZ2UuZU5TX1VSSSkgOiBTY2VuYXJpb1BhY2thZ2UuZUlOU1RBTkNFKTsKKwkJU2VxdWVuY2VyUGFja2FnZUltcGwgdGhlU2VxdWVuY2VyUGFja2FnZSA9IChTZXF1ZW5jZXJQYWNrYWdlSW1wbCkoRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RVBhY2thZ2UoU2VxdWVuY2VyUGFja2FnZS5lTlNfVVJJKSBpbnN0YW5jZW9mIFNlcXVlbmNlclBhY2thZ2VJbXBsID8gRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RVBhY2thZ2UoU2VxdWVuY2VyUGFja2FnZS5lTlNfVVJJKSA6IFNlcXVlbmNlclBhY2thZ2UuZUlOU1RBTkNFKTsKKwkJVHJpZ2dlclBhY2thZ2VJbXBsIHRoZVRyaWdnZXJQYWNrYWdlID0gKFRyaWdnZXJQYWNrYWdlSW1wbCkoRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RVBhY2thZ2UoVHJpZ2dlclBhY2thZ2UuZU5TX1VSSSkgaW5zdGFuY2VvZiBUcmlnZ2VyUGFja2FnZUltcGwgPyBFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShUcmlnZ2VyUGFja2FnZS5lTlNfVVJJKSA6IFRyaWdnZXJQYWNrYWdlLmVJTlNUQU5DRSk7CisJCVNvbHZlclBhY2thZ2VJbXBsIHRoZVNvbHZlclBhY2thZ2UgPSAoU29sdmVyUGFja2FnZUltcGwpKEVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVQYWNrYWdlKFNvbHZlclBhY2thZ2UuZU5TX1VSSSkgaW5zdGFuY2VvZiBTb2x2ZXJQYWNrYWdlSW1wbCA/IEVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVQYWNrYWdlKFNvbHZlclBhY2thZ2UuZU5TX1VSSSkgOiBTb2x2ZXJQYWNrYWdlLmVJTlNUQU5DRSk7CisKKwkJLy8gQ3JlYXRlIHBhY2thZ2UgbWV0YS1kYXRhIG9iamVjdHMKKwkJdGhlTG9nZ2VyUGFja2FnZS5jcmVhdGVQYWNrYWdlQ29udGVudHMoKTsKKwkJdGhlQ29tbW9uUGFja2FnZS5jcmVhdGVQYWNrYWdlQ29udGVudHMoKTsKKwkJdGhlRXhwZXJpbWVudFBhY2thZ2UuY3JlYXRlUGFja2FnZUNvbnRlbnRzKCk7CisJCXRoZUdyYXBoUGFja2FnZS5jcmVhdGVQYWNrYWdlQ29udGVudHMoKTsKKwkJdGhlTW9kZWxQYWNrYWdlLmNyZWF0ZVBhY2thZ2VDb250ZW50cygpOworCQl0aGVNb2RpZmllclBhY2thZ2UuY3JlYXRlUGFja2FnZUNvbnRlbnRzKCk7CisJCXRoZVByZWRpY2F0ZVBhY2thZ2UuY3JlYXRlUGFja2FnZUNvbnRlbnRzKCk7CisJCXRoZVNjZW5hcmlvUGFja2FnZS5jcmVhdGVQYWNrYWdlQ29udGVudHMoKTsKKwkJdGhlU2VxdWVuY2VyUGFja2FnZS5jcmVhdGVQYWNrYWdlQ29udGVudHMoKTsKKwkJdGhlVHJpZ2dlclBhY2thZ2UuY3JlYXRlUGFja2FnZUNvbnRlbnRzKCk7CisJCXRoZVNvbHZlclBhY2thZ2UuY3JlYXRlUGFja2FnZUNvbnRlbnRzKCk7CisKKwkJLy8gSW5pdGlhbGl6ZSBjcmVhdGVkIG1ldGEtZGF0YQorCQl0aGVMb2dnZXJQYWNrYWdlLmluaXRpYWxpemVQYWNrYWdlQ29udGVudHMoKTsKKwkJdGhlQ29tbW9uUGFja2FnZS5pbml0aWFsaXplUGFja2FnZUNvbnRlbnRzKCk7CisJCXRoZUV4cGVyaW1lbnRQYWNrYWdlLmluaXRpYWxpemVQYWNrYWdlQ29udGVudHMoKTsKKwkJdGhlR3JhcGhQYWNrYWdlLmluaXRpYWxpemVQYWNrYWdlQ29udGVudHMoKTsKKwkJdGhlTW9kZWxQYWNrYWdlLmluaXRpYWxpemVQYWNrYWdlQ29udGVudHMoKTsKKwkJdGhlTW9kaWZpZXJQYWNrYWdlLmluaXRpYWxpemVQYWNrYWdlQ29udGVudHMoKTsKKwkJdGhlUHJlZGljYXRlUGFja2FnZS5pbml0aWFsaXplUGFja2FnZUNvbnRlbnRzKCk7CisJCXRoZVNjZW5hcmlvUGFja2FnZS5pbml0aWFsaXplUGFja2FnZUNvbnRlbnRzKCk7CisJCXRoZVNlcXVlbmNlclBhY2thZ2UuaW5pdGlhbGl6ZVBhY2thZ2VDb250ZW50cygpOworCQl0aGVUcmlnZ2VyUGFja2FnZS5pbml0aWFsaXplUGFja2FnZUNvbnRlbnRzKCk7CisJCXRoZVNvbHZlclBhY2thZ2UuaW5pdGlhbGl6ZVBhY2thZ2VDb250ZW50cygpOworCisJCS8vIE1hcmsgbWV0YS1kYXRhIHRvIGluZGljYXRlIGl0IGNhbid0IGJlIGNoYW5nZWQKKwkJdGhlTG9nZ2VyUGFja2FnZS5mcmVlemUoKTsKKworICAKKwkJLy8gVXBkYXRlIHRoZSByZWdpc3RyeSBhbmQgcmV0dXJuIHRoZSBwYWNrYWdlCisJCUVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLnB1dChMb2dnZXJQYWNrYWdlLmVOU19VUkksIHRoZUxvZ2dlclBhY2thZ2UpOworCQlyZXR1cm4gdGhlTG9nZ2VyUGFja2FnZTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUNsYXNzIGdldExvZ2dlcigpIHsKKwkJcmV0dXJuIGxvZ2dlckVDbGFzczsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgTG9nZ2VyRmFjdG9yeSBnZXRMb2dnZXJGYWN0b3J5KCkgeworCQlyZXR1cm4gKExvZ2dlckZhY3RvcnkpZ2V0RUZhY3RvcnlJbnN0YW5jZSgpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByaXZhdGUgYm9vbGVhbiBpc0NyZWF0ZWQgPSBmYWxzZTsKKworCS8qKgorCSAqIENyZWF0ZXMgdGhlIG1ldGEtbW9kZWwgb2JqZWN0cyBmb3IgdGhlIHBhY2thZ2UuICBUaGlzIG1ldGhvZCBpcworCSAqIGd1YXJkZWQgdG8gaGF2ZSBubyBhZmZlY3Qgb24gYW55IGludm9jYXRpb24gYnV0IGl0cyBmaXJzdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBjcmVhdGVQYWNrYWdlQ29udGVudHMoKSB7CisJCWlmIChpc0NyZWF0ZWQpIHJldHVybjsKKwkJaXNDcmVhdGVkID0gdHJ1ZTsKKworCQkvLyBDcmVhdGUgY2xhc3NlcyBhbmQgdGhlaXIgZmVhdHVyZXMKKwkJbG9nZ2VyRUNsYXNzID0gY3JlYXRlRUNsYXNzKExPR0dFUik7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJpdmF0ZSBib29sZWFuIGlzSW5pdGlhbGl6ZWQgPSBmYWxzZTsKKworCS8qKgorCSAqIENvbXBsZXRlIHRoZSBpbml0aWFsaXphdGlvbiBvZiB0aGUgcGFja2FnZSBhbmQgaXRzIG1ldGEtbW9kZWwuICBUaGlzCisJICogbWV0aG9kIGlzIGd1YXJkZWQgdG8gaGF2ZSBubyBhZmZlY3Qgb24gYW55IGludm9jYXRpb24gYnV0IGl0cyBmaXJzdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBpbml0aWFsaXplUGFja2FnZUNvbnRlbnRzKCkgeworCQlpZiAoaXNJbml0aWFsaXplZCkgcmV0dXJuOworCQlpc0luaXRpYWxpemVkID0gdHJ1ZTsKKworCQkvLyBJbml0aWFsaXplIHBhY2thZ2UKKwkJc2V0TmFtZShlTkFNRSk7CisJCXNldE5zUHJlZml4KGVOU19QUkVGSVgpOworCQlzZXROc1VSSShlTlNfVVJJKTsKKworCQkvLyBPYnRhaW4gb3RoZXIgZGVwZW5kZW50IHBhY2thZ2VzCisJCUNvbW1vblBhY2thZ2UgdGhlQ29tbW9uUGFja2FnZSA9IChDb21tb25QYWNrYWdlKUVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVQYWNrYWdlKENvbW1vblBhY2thZ2UuZU5TX1VSSSk7CisKKwkJLy8gQ3JlYXRlIHR5cGUgcGFyYW1ldGVycworCisJCS8vIFNldCBib3VuZHMgZm9yIHR5cGUgcGFyYW1ldGVycworCisJCS8vIEFkZCBzdXBlcnR5cGVzIHRvIGNsYXNzZXMKKwkJbG9nZ2VyRUNsYXNzLmdldEVTdXBlclR5cGVzKCkuYWRkKHRoZUNvbW1vblBhY2thZ2UuZ2V0SWRlbnRpZmlhYmxlKCkpOworCisJCS8vIEluaXRpYWxpemUgY2xhc3NlcyBhbmQgZmVhdHVyZXM7IGFkZCBvcGVyYXRpb25zIGFuZCBwYXJhbWV0ZXJzCisJCWluaXRFQ2xhc3MobG9nZ2VyRUNsYXNzLCBMb2dnZXIuY2xhc3MsICJMb2dnZXIiLCBJU19BQlNUUkFDVCwgIUlTX0lOVEVSRkFDRSwgSVNfR0VORVJBVEVEX0lOU1RBTkNFX0NMQVNTKTsgLy8kTk9OLU5MUy0xJAorCisJCS8vIENyZWF0ZSByZXNvdXJjZQorCQljcmVhdGVSZXNvdXJjZShlTlNfVVJJKTsKKwl9CisKK30gLy9Mb2dnZXJQYWNrYWdlSW1wbApkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9sb2dnZXIvcHJvdmlkZXIvTG9nZ2VySXRlbVByb3ZpZGVyLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2xvZ2dlci9wcm92aWRlci9Mb2dnZXJJdGVtUHJvdmlkZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZGQ0MGU1Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9sb2dnZXIvcHJvdmlkZXIvTG9nZ2VySXRlbVByb3ZpZGVyLmphdmEKQEAgLTAsMCArMSwxMjggQEAKKy8qKgorICogPGNvcHlyaWdodD4KKyAqIDwvY29weXJpZ2h0PgorICoKKyAqICRJZCQKKyAqLworcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubG9nZ2VyLnByb3ZpZGVyOworCisKK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LkFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuUmVzb3VyY2VMb2NhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5VUkk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUVkaXRpbmdEb21haW5JdGVtUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1MYWJlbFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtUHJvcGVydHlEZXNjcmlwdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtUHJvcGVydHlTb3VyY2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVN0cnVjdHVyZWRJdGVtQ29udGVudFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklUcmVlSXRlbUNvbnRlbnRQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLnByb3ZpZGVyLkNvcmVFZGl0UGx1Z2luOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24ucHJvdmlkZXIuSWRlbnRpZmlhYmxlSXRlbVByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5sb2dnZXIuTG9nZ2VyOworCisvKioKKyAqIFRoaXMgaXMgdGhlIGl0ZW0gcHJvdmlkZXIgYWRhcHRlciBmb3IgYSB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmxvZ2dlci5Mb2dnZXJ9IG9iamVjdC4KKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIExvZ2dlckl0ZW1Qcm92aWRlcgorCWV4dGVuZHMgSWRlbnRpZmlhYmxlSXRlbVByb3ZpZGVyCisJaW1wbGVtZW50cworCQlJRWRpdGluZ0RvbWFpbkl0ZW1Qcm92aWRlciwKKwkJSVN0cnVjdHVyZWRJdGVtQ29udGVudFByb3ZpZGVyLAorCQlJVHJlZUl0ZW1Db250ZW50UHJvdmlkZXIsCisJCUlJdGVtTGFiZWxQcm92aWRlciwKKwkJSUl0ZW1Qcm9wZXJ0eVNvdXJjZSB7CisJLyoqCisJICogVGhpcyBjb25zdHJ1Y3RzIGFuIGluc3RhbmNlIGZyb20gYSBmYWN0b3J5IGFuZCBhIG5vdGlmaWVyLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBMb2dnZXJJdGVtUHJvdmlkZXIoQWRhcHRlckZhY3RvcnkgYWRhcHRlckZhY3RvcnkpIHsKKwkJc3VwZXIoYWRhcHRlckZhY3RvcnkpOworCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyB0aGUgcHJvcGVydHkgZGVzY3JpcHRvcnMgZm9yIHRoZSBhZGFwdGVkIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBMaXN0PElJdGVtUHJvcGVydHlEZXNjcmlwdG9yPiBnZXRQcm9wZXJ0eURlc2NyaXB0b3JzKE9iamVjdCBvYmplY3QpIHsKKwkJaWYgKGl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzID09IG51bGwpIHsKKwkJCXN1cGVyLmdldFByb3BlcnR5RGVzY3JpcHRvcnMob2JqZWN0KTsKKworCQl9CisJCXJldHVybiBpdGVtUHJvcGVydHlEZXNjcmlwdG9yczsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgTG9nZ2VyLmdpZi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgT2JqZWN0IGdldEltYWdlKE9iamVjdCBvYmplY3QpIHsKKwkJcmV0dXJuIG92ZXJsYXlJbWFnZShvYmplY3QsIGdldFJlc291cmNlTG9jYXRvcigpLmdldEltYWdlKCJmdWxsL29iajE2L0xvZ2dlciIpKTsgLy8kTk9OLU5MUy0xJAorCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyB0aGUgbGFiZWwgdGV4dCBmb3IgdGhlIGFkYXB0ZWQgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIFN0cmluZyBnZXRUZXh0KE9iamVjdCBvYmplY3QpIHsKKwkJVVJJIGxhYmVsVmFsdWUgPSAoKExvZ2dlcilvYmplY3QpLmdldFVSSSgpOworCQlTdHJpbmcgbGFiZWwgPSBsYWJlbFZhbHVlID09IG51bGwgPyBudWxsIDogbGFiZWxWYWx1ZS50b1N0cmluZygpOworCQlyZXR1cm4gbGFiZWwgPT0gbnVsbCB8fCBsYWJlbC5sZW5ndGgoKSA9PSAwID8KKwkJCWdldFN0cmluZygiX1VJX0xvZ2dlcl90eXBlIikgOiAvLyROT04tTkxTLTEkCisJCQlnZXRTdHJpbmcoIl9VSV9Mb2dnZXJfdHlwZSIpICsgIiAiICsgbGFiZWw7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAorCX0KKworCS8qKgorCSAqIFRoaXMgaGFuZGxlcyBtb2RlbCBub3RpZmljYXRpb25zIGJ5IGNhbGxpbmcge0BsaW5rICN1cGRhdGVDaGlsZHJlbn0gdG8gdXBkYXRlIGFueSBjYWNoZWQKKwkgKiBjaGlsZHJlbiBhbmQgYnkgY3JlYXRpbmcgYSB2aWV3ZXIgbm90aWZpY2F0aW9uLCB3aGljaCBpdCBwYXNzZXMgdG8ge0BsaW5rICNmaXJlTm90aWZ5Q2hhbmdlZH0uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgbm90aWZ5Q2hhbmdlZChOb3RpZmljYXRpb24gbm90aWZpY2F0aW9uKSB7CisJCXVwZGF0ZUNoaWxkcmVuKG5vdGlmaWNhdGlvbik7CisJCXN1cGVyLm5vdGlmeUNoYW5nZWQobm90aWZpY2F0aW9uKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFkZHMge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lZGl0LmNvbW1hbmQuQ29tbWFuZFBhcmFtZXRlcn1zIGRlc2NyaWJpbmcgdGhlIGNoaWxkcmVuCisJICogdGhhdCBjYW4gYmUgY3JlYXRlZCB1bmRlciB0aGlzIG9iamVjdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgdm9pZCBjb2xsZWN0TmV3Q2hpbGREZXNjcmlwdG9ycyhDb2xsZWN0aW9uPE9iamVjdD4gbmV3Q2hpbGREZXNjcmlwdG9ycywgT2JqZWN0IG9iamVjdCkgeworCQlzdXBlci5jb2xsZWN0TmV3Q2hpbGREZXNjcmlwdG9ycyhuZXdDaGlsZERlc2NyaXB0b3JzLCBvYmplY3QpOworCX0KKworCS8qKgorCSAqIFJldHVybiB0aGUgcmVzb3VyY2UgbG9jYXRvciBmb3IgdGhpcyBpdGVtIHByb3ZpZGVyJ3MgcmVzb3VyY2VzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBSZXNvdXJjZUxvY2F0b3IgZ2V0UmVzb3VyY2VMb2NhdG9yKCkgeworCQlyZXR1cm4gQ29yZUVkaXRQbHVnaW4uSU5TVEFOQ0U7CisJfQorCit9CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2xvZ2dlci9wcm92aWRlci9Mb2dnZXJJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeS5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9sb2dnZXIvcHJvdmlkZXIvTG9nZ2VySXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNDRhMjI5Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9sb2dnZXIvcHJvdmlkZXIvTG9nZ2VySXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkuamF2YQpAQCAtMCwwICsxLDE3NyBAQAorLyoqCisgKiA8Y29weXJpZ2h0PgorICogPC9jb3B5cmlnaHQ+CisgKgorICogJElkJAorICovCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5sb2dnZXIucHJvdmlkZXI7CisKK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OworaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuQWRhcHRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuQ2hhbmdlTm90aWZpZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5Db21wb3NlZEFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklDaGFuZ2VOb3RpZmllcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JRGlzcG9zYWJsZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JRWRpdGluZ0RvbWFpbkl0ZW1Qcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbUxhYmVsUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1Qcm9wZXJ0eVNvdXJjZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JTm90aWZ5Q2hhbmdlZExpc3RlbmVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklTdHJ1Y3R1cmVkSXRlbUNvbnRlbnRQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JVHJlZUl0ZW1Db250ZW50UHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmxvZ2dlci51dGlsLkxvZ2dlckFkYXB0ZXJGYWN0b3J5OworCisvKioKKyAqIFRoaXMgaXMgdGhlIGZhY3RvcnkgdGhhdCBpcyB1c2VkIHRvIHByb3ZpZGUgdGhlIGludGVyZmFjZXMgbmVlZGVkIHRvIHN1cHBvcnQgVmlld2Vycy4KKyAqIFRoZSBhZGFwdGVycyBnZW5lcmF0ZWQgYnkgdGhpcyBmYWN0b3J5IGNvbnZlcnQgRU1GIGFkYXB0ZXIgbm90aWZpY2F0aW9ucyBpbnRvIGNhbGxzIHRvIHtAbGluayAjZmlyZU5vdGlmeUNoYW5nZWQgZmlyZU5vdGlmeUNoYW5nZWR9LgorICogVGhlIGFkYXB0ZXJzIGFsc28gc3VwcG9ydCBFY2xpcHNlIHByb3BlcnR5IHNoZWV0cy4KKyAqIE5vdGUgdGhhdCBtb3N0IG9mIHRoZSBhZGFwdGVycyBhcmUgc2hhcmVkIGFtb25nIG11bHRpcGxlIGluc3RhbmNlcy4KKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIExvZ2dlckl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5IGV4dGVuZHMgTG9nZ2VyQWRhcHRlckZhY3RvcnkgaW1wbGVtZW50cyBDb21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5LCBJQ2hhbmdlTm90aWZpZXIsIElEaXNwb3NhYmxlIHsKKwkvKioKKwkgKiBUaGlzIGtlZXBzIHRyYWNrIG9mIHRoZSByb290IGFkYXB0ZXIgZmFjdG9yeSB0aGF0IGRlbGVnYXRlcyB0byB0aGlzIGFkYXB0ZXIgZmFjdG9yeS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgQ29tcG9zZWRBZGFwdGVyRmFjdG9yeSBwYXJlbnRBZGFwdGVyRmFjdG9yeTsKKworCS8qKgorCSAqIFRoaXMgaXMgdXNlZCB0byBpbXBsZW1lbnQge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklDaGFuZ2VOb3RpZmllcn0uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIElDaGFuZ2VOb3RpZmllciBjaGFuZ2VOb3RpZmllciA9IG5ldyBDaGFuZ2VOb3RpZmllcigpOworCisJLyoqCisJICogVGhpcyBrZWVwcyB0cmFjayBvZiBhbGwgdGhlIHN1cHBvcnRlZCB0eXBlcyBjaGVja2VkIGJ5IHtAbGluayAjaXNGYWN0b3J5Rm9yVHlwZSBpc0ZhY3RvcnlGb3JUeXBlfS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgQ29sbGVjdGlvbjxPYmplY3Q+IHN1cHBvcnRlZFR5cGVzID0gbmV3IEFycmF5TGlzdDxPYmplY3Q+KCk7CisKKwkvKioKKwkgKiBUaGlzIGNvbnN0cnVjdHMgYW4gaW5zdGFuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIExvZ2dlckl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5KCkgeworCQlzdXBwb3J0ZWRUeXBlcy5hZGQoSUVkaXRpbmdEb21haW5JdGVtUHJvdmlkZXIuY2xhc3MpOworCQlzdXBwb3J0ZWRUeXBlcy5hZGQoSVN0cnVjdHVyZWRJdGVtQ29udGVudFByb3ZpZGVyLmNsYXNzKTsKKwkJc3VwcG9ydGVkVHlwZXMuYWRkKElUcmVlSXRlbUNvbnRlbnRQcm92aWRlci5jbGFzcyk7CisJCXN1cHBvcnRlZFR5cGVzLmFkZChJSXRlbUxhYmVsUHJvdmlkZXIuY2xhc3MpOworCQlzdXBwb3J0ZWRUeXBlcy5hZGQoSUl0ZW1Qcm9wZXJ0eVNvdXJjZS5jbGFzcyk7CisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIHRoZSByb290IGFkYXB0ZXIgZmFjdG9yeSB0aGF0IGNvbnRhaW5zIHRoaXMgZmFjdG9yeS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSBnZXRSb290QWRhcHRlckZhY3RvcnkoKSB7CisJCXJldHVybiBwYXJlbnRBZGFwdGVyRmFjdG9yeSA9PSBudWxsID8gdGhpcyA6IHBhcmVudEFkYXB0ZXJGYWN0b3J5LmdldFJvb3RBZGFwdGVyRmFjdG9yeSgpOworCX0KKworCS8qKgorCSAqIFRoaXMgc2V0cyB0aGUgY29tcG9zZWQgYWRhcHRlciBmYWN0b3J5IHRoYXQgY29udGFpbnMgdGhpcyBmYWN0b3J5LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIHNldFBhcmVudEFkYXB0ZXJGYWN0b3J5KENvbXBvc2VkQWRhcHRlckZhY3RvcnkgcGFyZW50QWRhcHRlckZhY3RvcnkpIHsKKwkJdGhpcy5wYXJlbnRBZGFwdGVyRmFjdG9yeSA9IHBhcmVudEFkYXB0ZXJGYWN0b3J5OworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBib29sZWFuIGlzRmFjdG9yeUZvclR5cGUoT2JqZWN0IHR5cGUpIHsKKwkJcmV0dXJuIHN1cHBvcnRlZFR5cGVzLmNvbnRhaW5zKHR5cGUpIHx8IHN1cGVyLmlzRmFjdG9yeUZvclR5cGUodHlwZSk7CisJfQorCisJLyoqCisJICogVGhpcyBpbXBsZW1lbnRhdGlvbiBzdWJzdGl0dXRlcyB0aGUgZmFjdG9yeSBpdHNlbGYgYXMgdGhlIGtleSBmb3IgdGhlIGFkYXB0ZXIuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIEFkYXB0ZXIgYWRhcHQoTm90aWZpZXIgbm90aWZpZXIsIE9iamVjdCB0eXBlKSB7CisJCXJldHVybiBzdXBlci5hZGFwdChub3RpZmllciwgdGhpcyk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIE9iamVjdCBhZGFwdChPYmplY3Qgb2JqZWN0LCBPYmplY3QgdHlwZSkgeworCQlpZiAoaXNGYWN0b3J5Rm9yVHlwZSh0eXBlKSkgeworCQkJT2JqZWN0IGFkYXB0ZXIgPSBzdXBlci5hZGFwdChvYmplY3QsIHR5cGUpOworCQkJaWYgKCEodHlwZSBpbnN0YW5jZW9mIENsYXNzPD8+KSB8fCAoKChDbGFzczw/Pil0eXBlKS5pc0luc3RhbmNlKGFkYXB0ZXIpKSkgeworCQkJCXJldHVybiBhZGFwdGVyOworCQkJfQorCQl9CisKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogVGhpcyBhZGRzIGEgbGlzdGVuZXIuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgYWRkTGlzdGVuZXIoSU5vdGlmeUNoYW5nZWRMaXN0ZW5lciBub3RpZnlDaGFuZ2VkTGlzdGVuZXIpIHsKKwkJY2hhbmdlTm90aWZpZXIuYWRkTGlzdGVuZXIobm90aWZ5Q2hhbmdlZExpc3RlbmVyKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHJlbW92ZXMgYSBsaXN0ZW5lci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCByZW1vdmVMaXN0ZW5lcihJTm90aWZ5Q2hhbmdlZExpc3RlbmVyIG5vdGlmeUNoYW5nZWRMaXN0ZW5lcikgeworCQljaGFuZ2VOb3RpZmllci5yZW1vdmVMaXN0ZW5lcihub3RpZnlDaGFuZ2VkTGlzdGVuZXIpOworCX0KKworCS8qKgorCSAqIFRoaXMgZGVsZWdhdGVzIHRvIHtAbGluayAjY2hhbmdlTm90aWZpZXJ9IGFuZCB0byB7QGxpbmsgI3BhcmVudEFkYXB0ZXJGYWN0b3J5fS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBmaXJlTm90aWZ5Q2hhbmdlZChOb3RpZmljYXRpb24gbm90aWZpY2F0aW9uKSB7CisJCWNoYW5nZU5vdGlmaWVyLmZpcmVOb3RpZnlDaGFuZ2VkKG5vdGlmaWNhdGlvbik7CisKKwkJaWYgKHBhcmVudEFkYXB0ZXJGYWN0b3J5ICE9IG51bGwpIHsKKwkJCXBhcmVudEFkYXB0ZXJGYWN0b3J5LmZpcmVOb3RpZnlDaGFuZ2VkKG5vdGlmaWNhdGlvbik7CisJCX0KKwl9CisKKwkvKioKKwkgKiBUaGlzIGRpc3Bvc2VzIGFsbCBvZiB0aGUgaXRlbSBwcm92aWRlcnMgY3JlYXRlZCBieSB0aGlzIGZhY3RvcnkuIAorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIGRpc3Bvc2UoKSB7CisJfQorCit9CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2xvZ2dlci91dGlsL0xvZ2dlckFkYXB0ZXJGYWN0b3J5LmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2xvZ2dlci91dGlsL0xvZ2dlckFkYXB0ZXJGYWN0b3J5LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGQxMGU4YQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvbG9nZ2VyL3V0aWwvTG9nZ2VyQWRhcHRlckZhY3RvcnkuamF2YQpAQCAtMCwwICsxLDE3OCBAQAorLyoqCisgKiA8Y29weXJpZ2h0PgorICogPC9jb3B5cmlnaHQ+CisgKgorICogJElkJAorICovCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5sb2dnZXIudXRpbDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LkFkYXB0ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuaW1wbC5BZGFwdGVyRmFjdG9yeUltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3Q7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5JZGVudGlmaWFibGU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5TYW5pdHlDaGVja2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5sb2dnZXIuTG9nZ2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5sb2dnZXIuTG9nZ2VyUGFja2FnZTsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogVGhlIDxiPkFkYXB0ZXIgRmFjdG9yeTwvYj4gZm9yIHRoZSBtb2RlbC4KKyAqIEl0IHByb3ZpZGVzIGFuIGFkYXB0ZXIgPGNvZGU+Y3JlYXRlWFhYPC9jb2RlPiBtZXRob2QgZm9yIGVhY2ggY2xhc3Mgb2YgdGhlIG1vZGVsLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5sb2dnZXIuTG9nZ2VyUGFja2FnZQorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgTG9nZ2VyQWRhcHRlckZhY3RvcnkgZXh0ZW5kcyBBZGFwdGVyRmFjdG9yeUltcGwgeworCS8qKgorCSAqIFRoZSBjYWNoZWQgbW9kZWwgcGFja2FnZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgc3RhdGljIExvZ2dlclBhY2thZ2UgbW9kZWxQYWNrYWdlOworCisJLyoqCisJICogQ3JlYXRlcyBhbiBpbnN0YW5jZSBvZiB0aGUgYWRhcHRlciBmYWN0b3J5LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBMb2dnZXJBZGFwdGVyRmFjdG9yeSgpIHsKKwkJaWYgKG1vZGVsUGFja2FnZSA9PSBudWxsKSB7CisJCQltb2RlbFBhY2thZ2UgPSBMb2dnZXJQYWNrYWdlLmVJTlNUQU5DRTsKKwkJfQorCX0KKworCS8qKgorCSAqIFJldHVybnMgd2hldGhlciB0aGlzIGZhY3RvcnkgaXMgYXBwbGljYWJsZSBmb3IgdGhlIHR5cGUgb2YgdGhlIG9iamVjdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyA8Y29kZT50cnVlPC9jb2RlPiBpZiB0aGUgb2JqZWN0IGlzIGVpdGhlciB0aGUgbW9kZWwncyBwYWNrYWdlIG9yIGlzIGFuIGluc3RhbmNlIG9iamVjdCBvZiB0aGUgbW9kZWwuCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB3aGV0aGVyIHRoaXMgZmFjdG9yeSBpcyBhcHBsaWNhYmxlIGZvciB0aGUgdHlwZSBvZiB0aGUgb2JqZWN0LgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgYm9vbGVhbiBpc0ZhY3RvcnlGb3JUeXBlKE9iamVjdCBvYmplY3QpIHsKKwkJaWYgKG9iamVjdCA9PSBtb2RlbFBhY2thZ2UpIHsKKwkJCXJldHVybiB0cnVlOworCQl9CisJCWlmIChvYmplY3QgaW5zdGFuY2VvZiBFT2JqZWN0KSB7CisJCQlyZXR1cm4gKChFT2JqZWN0KW9iamVjdCkuZUNsYXNzKCkuZ2V0RVBhY2thZ2UoKSA9PSBtb2RlbFBhY2thZ2U7CisJCX0KKwkJcmV0dXJuIGZhbHNlOworCX0KKworCS8qKgorCSAqIFRoZSBzd2l0Y2ggdGhhdCBkZWxlZ2F0ZXMgdG8gdGhlIDxjb2RlPmNyZWF0ZVhYWDwvY29kZT4gbWV0aG9kcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgTG9nZ2VyU3dpdGNoPEFkYXB0ZXI+IG1vZGVsU3dpdGNoID0KKwkJbmV3IExvZ2dlclN3aXRjaDxBZGFwdGVyPigpIHsKKwkJCUBPdmVycmlkZQorCQkJcHVibGljIEFkYXB0ZXIgY2FzZUxvZ2dlcihMb2dnZXIgb2JqZWN0KSB7CisJCQkJcmV0dXJuIGNyZWF0ZUxvZ2dlckFkYXB0ZXIoKTsKKwkJCX0KKwkJCUBPdmVycmlkZQorCQkJcHVibGljIDxUPiBBZGFwdGVyIGNhc2VDb21wYXJhYmxlKENvbXBhcmFibGU8VD4gb2JqZWN0KSB7CisJCQkJcmV0dXJuIGNyZWF0ZUNvbXBhcmFibGVBZGFwdGVyKCk7CisJCQl9CisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyBBZGFwdGVyIGNhc2VTYW5pdHlDaGVja2VyKFNhbml0eUNoZWNrZXIgb2JqZWN0KSB7CisJCQkJcmV0dXJuIGNyZWF0ZVNhbml0eUNoZWNrZXJBZGFwdGVyKCk7CisJCQl9CisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyBBZGFwdGVyIGNhc2VJZGVudGlmaWFibGUoSWRlbnRpZmlhYmxlIG9iamVjdCkgeworCQkJCXJldHVybiBjcmVhdGVJZGVudGlmaWFibGVBZGFwdGVyKCk7CisJCQl9CisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyBBZGFwdGVyIGRlZmF1bHRDYXNlKEVPYmplY3Qgb2JqZWN0KSB7CisJCQkJcmV0dXJuIGNyZWF0ZUVPYmplY3RBZGFwdGVyKCk7CisJCQl9CisJCX07CisKKwkvKioKKwkgKiBDcmVhdGVzIGFuIGFkYXB0ZXIgZm9yIHRoZSA8Y29kZT50YXJnZXQ8L2NvZGU+LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIHRhcmdldCB0aGUgb2JqZWN0IHRvIGFkYXB0LgorCSAqIEByZXR1cm4gdGhlIGFkYXB0ZXIgZm9yIHRoZSA8Y29kZT50YXJnZXQ8L2NvZGU+LgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVBZGFwdGVyKE5vdGlmaWVyIHRhcmdldCkgeworCQlyZXR1cm4gbW9kZWxTd2l0Y2guZG9Td2l0Y2goKEVPYmplY3QpdGFyZ2V0KTsKKwl9CisKKworCS8qKgorCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmxvZ2dlci5Mb2dnZXIgPGVtPkxvZ2dlcjwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7CisJICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubG9nZ2VyLkxvZ2dlcgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVMb2dnZXJBZGFwdGVyKCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIGphdmEubGFuZy5Db21wYXJhYmxlIDxlbT5Db21wYXJhYmxlPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsKKwkgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KKwkgKiBAc2VlIGphdmEubGFuZy5Db21wYXJhYmxlCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZUNvbXBhcmFibGVBZGFwdGVyKCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uU2FuaXR5Q2hlY2tlciA8ZW0+U2FuaXR5IENoZWNrZXI8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOworCSAqIGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZSB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5LgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5TYW5pdHlDaGVja2VyCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZVNhbml0eUNoZWNrZXJBZGFwdGVyKCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uSWRlbnRpZmlhYmxlIDxlbT5JZGVudGlmaWFibGU8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOworCSAqIGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZSB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5LgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5JZGVudGlmaWFibGUKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlSWRlbnRpZmlhYmxlQWRhcHRlcigpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciB0aGUgZGVmYXVsdCBjYXNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbC4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlRU9iamVjdEFkYXB0ZXIoKSB7CisJCXJldHVybiBudWxsOworCX0KKworfSAvL0xvZ2dlckFkYXB0ZXJGYWN0b3J5CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2xvZ2dlci91dGlsL0xvZ2dlclN3aXRjaC5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9sb2dnZXIvdXRpbC9Mb2dnZXJTd2l0Y2guamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMDIzMjlhCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9sb2dnZXIvdXRpbC9Mb2dnZXJTd2l0Y2guamF2YQpAQCAtMCwwICsxLDE4MCBAQAorLyoqCisgKiA8Y29weXJpZ2h0PgorICogPC9jb3B5cmlnaHQ+CisgKgorICogJElkJAorICovCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5sb2dnZXIudXRpbDsKKworaW1wb3J0IGphdmEudXRpbC5MaXN0OworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzczsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLklkZW50aWZpYWJsZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLlNhbml0eUNoZWNrZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmxvZ2dlci5Mb2dnZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmxvZ2dlci5Mb2dnZXJQYWNrYWdlOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiBUaGUgPGI+U3dpdGNoPC9iPiBmb3IgdGhlIG1vZGVsJ3MgaW5oZXJpdGFuY2UgaGllcmFyY2h5LgorICogSXQgc3VwcG9ydHMgdGhlIGNhbGwge0BsaW5rICNkb1N3aXRjaChFT2JqZWN0KSBkb1N3aXRjaChvYmplY3QpfQorICogdG8gaW52b2tlIHRoZSA8Y29kZT5jYXNlWFhYPC9jb2RlPiBtZXRob2QgZm9yIGVhY2ggY2xhc3Mgb2YgdGhlIG1vZGVsLAorICogc3RhcnRpbmcgd2l0aCB0aGUgYWN0dWFsIGNsYXNzIG9mIHRoZSBvYmplY3QKKyAqIGFuZCBwcm9jZWVkaW5nIHVwIHRoZSBpbmhlcml0YW5jZSBoaWVyYXJjaHkKKyAqIHVudGlsIGEgbm9uLW51bGwgcmVzdWx0IGlzIHJldHVybmVkLAorICogd2hpY2ggaXMgdGhlIHJlc3VsdCBvZiB0aGUgc3dpdGNoLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5sb2dnZXIuTG9nZ2VyUGFja2FnZQorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgTG9nZ2VyU3dpdGNoPFQxPiB7CisJLyoqCisJICogVGhlIGNhY2hlZCBtb2RlbCBwYWNrYWdlCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHN0YXRpYyBMb2dnZXJQYWNrYWdlIG1vZGVsUGFja2FnZTsKKworCS8qKgorCSAqIENyZWF0ZXMgYW4gaW5zdGFuY2Ugb2YgdGhlIHN3aXRjaC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgTG9nZ2VyU3dpdGNoKCkgeworCQlpZiAobW9kZWxQYWNrYWdlID09IG51bGwpIHsKKwkJCW1vZGVsUGFja2FnZSA9IExvZ2dlclBhY2thZ2UuZUlOU1RBTkNFOworCQl9CisJfQorCisJLyoqCisJICogQ2FsbHMgPGNvZGU+Y2FzZVhYWDwvY29kZT4gZm9yIGVhY2ggY2xhc3Mgb2YgdGhlIG1vZGVsIHVudGlsIG9uZSByZXR1cm5zIGEgbm9uIG51bGwgcmVzdWx0OyBpdCB5aWVsZHMgdGhhdCByZXN1bHQuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBmaXJzdCBub24tbnVsbCByZXN1bHQgcmV0dXJuZWQgYnkgYSA8Y29kZT5jYXNlWFhYPC9jb2RlPiBjYWxsLgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVDEgZG9Td2l0Y2goRU9iamVjdCB0aGVFT2JqZWN0KSB7CisJCXJldHVybiBkb1N3aXRjaCh0aGVFT2JqZWN0LmVDbGFzcygpLCB0aGVFT2JqZWN0KTsKKwl9CisKKwkvKioKKwkgKiBDYWxscyA8Y29kZT5jYXNlWFhYPC9jb2RlPiBmb3IgZWFjaCBjbGFzcyBvZiB0aGUgbW9kZWwgdW50aWwgb25lIHJldHVybnMgYSBub24gbnVsbCByZXN1bHQ7IGl0IHlpZWxkcyB0aGF0IHJlc3VsdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIGZpcnN0IG5vbi1udWxsIHJlc3VsdCByZXR1cm5lZCBieSBhIDxjb2RlPmNhc2VYWFg8L2NvZGU+IGNhbGwuCisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBUMSBkb1N3aXRjaChFQ2xhc3MgdGhlRUNsYXNzLCBFT2JqZWN0IHRoZUVPYmplY3QpIHsKKwkJaWYgKHRoZUVDbGFzcy5lQ29udGFpbmVyKCkgPT0gbW9kZWxQYWNrYWdlKSB7CisJCQlyZXR1cm4gZG9Td2l0Y2godGhlRUNsYXNzLmdldENsYXNzaWZpZXJJRCgpLCB0aGVFT2JqZWN0KTsKKwkJfQorCQllbHNlIHsKKwkJCUxpc3Q8RUNsYXNzPiBlU3VwZXJUeXBlcyA9IHRoZUVDbGFzcy5nZXRFU3VwZXJUeXBlcygpOworCQkJcmV0dXJuCisJCQkJZVN1cGVyVHlwZXMuaXNFbXB0eSgpID8KKwkJCQkJZGVmYXVsdENhc2UodGhlRU9iamVjdCkgOgorCQkJCQlkb1N3aXRjaChlU3VwZXJUeXBlcy5nZXQoMCksIHRoZUVPYmplY3QpOworCQl9CisJfQorCisJLyoqCisJICogQ2FsbHMgPGNvZGU+Y2FzZVhYWDwvY29kZT4gZm9yIGVhY2ggY2xhc3Mgb2YgdGhlIG1vZGVsIHVudGlsIG9uZSByZXR1cm5zIGEgbm9uIG51bGwgcmVzdWx0OyBpdCB5aWVsZHMgdGhhdCByZXN1bHQuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBmaXJzdCBub24tbnVsbCByZXN1bHQgcmV0dXJuZWQgYnkgYSA8Y29kZT5jYXNlWFhYPC9jb2RlPiBjYWxsLgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgVDEgZG9Td2l0Y2goaW50IGNsYXNzaWZpZXJJRCwgRU9iamVjdCB0aGVFT2JqZWN0KSB7CisJCXN3aXRjaCAoY2xhc3NpZmllcklEKSB7CisJCQljYXNlIExvZ2dlclBhY2thZ2UuTE9HR0VSOiB7CisJCQkJTG9nZ2VyIGxvZ2dlciA9IChMb2dnZXIpdGhlRU9iamVjdDsKKwkJCQlUMSByZXN1bHQgPSBjYXNlTG9nZ2VyKGxvZ2dlcik7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlSWRlbnRpZmlhYmxlKGxvZ2dlcik7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlQ29tcGFyYWJsZShsb2dnZXIpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZVNhbml0eUNoZWNrZXIobG9nZ2VyKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGRlZmF1bHRDYXNlKHRoZUVPYmplY3QpOworCQkJCXJldHVybiByZXN1bHQ7CisJCQl9CisJCQlkZWZhdWx0OiByZXR1cm4gZGVmYXVsdENhc2UodGhlRU9iamVjdCk7CisJCX0KKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5Mb2dnZXI8L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsKKwkgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KKwkgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5Mb2dnZXI8L2VtPicuCisJICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBUMSBjYXNlTG9nZ2VyKExvZ2dlciBvYmplY3QpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+Q29tcGFyYWJsZTwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOworCSAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgorCSAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkNvbXBhcmFibGU8L2VtPicuCisJICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyA8VD4gVDEgY2FzZUNvbXBhcmFibGUoQ29tcGFyYWJsZTxUPiBvYmplY3QpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+U2FuaXR5IENoZWNrZXI8L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsKKwkgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KKwkgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5TYW5pdHkgQ2hlY2tlcjwvZW0+Jy4KKwkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFQxIGNhc2VTYW5pdHlDaGVja2VyKFNhbml0eUNoZWNrZXIgb2JqZWN0KSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPklkZW50aWZpYWJsZTwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOworCSAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgorCSAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPklkZW50aWZpYWJsZTwvZW0+Jy4KKwkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFQxIGNhc2VJZGVudGlmaWFibGUoSWRlbnRpZmlhYmxlIG9iamVjdCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5FT2JqZWN0PC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7CisJICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2gsIGJ1dCB0aGlzIGlzIHRoZSBsYXN0IGNhc2UgYW55d2F5LgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgorCSAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkVPYmplY3Q8L2VtPicuCisJICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBUMSBkZWZhdWx0Q2FzZShFT2JqZWN0IG9iamVjdCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKK30gLy9Mb2dnZXJTd2l0Y2gKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvbWF0aC9CaW5vbWlhbERpc3RyaWJ1dGlvblV0aWwuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvbWF0aC9CaW5vbWlhbERpc3RyaWJ1dGlvblV0aWwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MWYyYzEzCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9tYXRoL0Jpbm9taWFsRGlzdHJpYnV0aW9uVXRpbC5qYXZhCkBAIC0wLDAgKzEsODAgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1hdGg7CisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAxMCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKgorICogVXRpbGl0eSBwcmltYXJpbHkgdXNlZCBieSBzdG9jaGFzdGljIG1vZGVscworICogVGhpcyB0ZWNobmlxdWUgbWFrZXMgYSByYW5kb20gcGljayBmcm9tIGEgYmlub21pYWwgZGlzdHJpYnV0aW9uLgorICogVGhlIGNvbXBsZXggcGFydCBvZiB0aGlzIG9wZXJhdGlvbiBpcyB0byBjb21wdXRlIHRoZSBiaW5vbWlhbCBjb2VmZmljaWVudAorICogZWZmaWNpZW50bHkgKHNlZSBmb3IgZXhhbXBsZTogaHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9CaW5vbWlhbF9kaXN0cmlidXRpb24pCisgKiBJbiBvcmRlciB0byBkbyB0aGUgY29tcHV0YXRpb24gZm9yIGxhcmdlIE4gKGxhcmdlIFMpIHdlIGNvbXB1dGUgdGhlIGxvZyBvZiB0aGUgYmlub21pYWwgY29lZmZpY2llbnQKKyAqIHNvIHdlIGRvIGEgc3VtIChpbnN0ZWFkIG9mIGEgZmFjdG9yaWFsIHByb2R1Y3QpIGFuZCB0aGVuIGV4cG9uZW50aWF0ZSB0aGUgcmVzdWx0LiAKKyAqLworcHVibGljIGNsYXNzIEJpbm9taWFsRGlzdHJpYnV0aW9uVXRpbCB7CisKKwkgLyoqCisJICAqIFJldHVybnMgdGhlIHJhbmRvbSBwaWNrIGZyb20gYSBiaW5vbWlhbCBkaXN0CisJICAqIGdpdmVuIDA8PXJuZFZhcjw9MQorCSAgKiBUaGlzIHN1bXMgdGhlIGJpbm9taWFsIGRpc3RyaWJ1dGlvbiBhbmQgcmV0dXJucyB0aGUgayB2YWx1ZSB3aXRoIHRoYXQgaW50ZWdyYXRlZCBwcm9iYWJpbGl0eQorCSAgKiBAcGFyYW0gcCBUaGUgcHJvYmFiaWxpdHkKKwkgICogQHBhcmFtIG4gTiwgKGUuZy4gc3VzY2VwdGlibGUpCSAgIAorCSAgKiBAcGFyYW0gcm5kVkFSIFJhbmRvbSBudW1iZXIKKwkgICogQHJldHVybiBLIFJhbmRvbSBwaWNrCisJICAqKi8gCisJIHB1YmxpYyBzdGF0aWMgaW50IGZhc3RQaWNrRnJvbUJpbm9taWFsRGlzdChkb3VibGUgcCwgaW50IG4sIGRvdWJsZSBybmRWQVIpeworCQkgaWYocCA9PSAwIHx8IG4gPT0gMCkgcmV0dXJuIDA7CisJCSBkb3VibGUgQnN1bSA9IDAuMDsKKwkJIC8vIGNvbXB1dGUgdGhpcyBvbmNlCisJCSBkb3VibGUgbG5GYWN0b3JpYWxOID0gbG5GYWN0b3JpYWwobik7CisJCSBkb3VibGUgbG5GYWN0b3JpYWxLID0gMC4wOworCQkgZG91YmxlIGxuRmFjdG9yaWFsTl9LID0gbG5GYWN0b3JpYWxOOworCQkgaW50IG5fayA9IG47CisJCSBmb3IoaW50IGsgPSAwOyBrIDw9IG47IGsgKyspIHsKKwkJCSAKKwkJCSBpZihrPj0xKSB7CisJCQkJIC8vIGNvdW50IHVwCisJCQkJIGxuRmFjdG9yaWFsSyArPSBNYXRoLmxvZygoZG91YmxlKWspOworCQkJIAorCQkJCSAvLyBjb3VudCBkb3duIGZvciBuLWsKKwkJCQkgbG5GYWN0b3JpYWxOX0sgLT0gTWF0aC5sb2coKGRvdWJsZSluX2spOworCQkJCSBuX2sgLT0gMTsKKwkJCSB9CisJCQkgLy8gZG8gdGhlIGVudGlyZSBjb21wdXRhdGlvbiBpbiBsb2cgc3BhY2UKKwkJCSBkb3VibGUgbG9nQiA9IGxuRmFjdG9yaWFsTiAtIGxuRmFjdG9yaWFsSyAtIGxuRmFjdG9yaWFsTl9LOworCQkJIC8vIG5vdyBpbnN0ZWFkIG9mIG11bHRpcGx5aW5nIGJ5IHBeayAqICgxLXApXm4taworCQkJIC8vIHdlIGFkZAorCQkJIC8vIGxvZ0IgKyBrKmxvZyhwKSArIChuLWspKmxvZygxLXApOworCQkJIGxvZ0IgKz0gKGsqTWF0aC5sb2cocCkpICArICggKG4taykgKiBNYXRoLmxvZyAoMS1wKSApOworCQkJIC8vIE5PVyB3ZSB0YWtlIHRoZSBleHBvbmVudAorCQkJIEJzdW0gKz0gTWF0aC5leHAobG9nQik7CisJCQkgaWYgKEJzdW0gPj0gcm5kVkFSKSByZXR1cm4gazsKKwkJIH0KKwkJIHJldHVybiBuOworCSB9CisJIAorCSAgIAorCSAvKioKKwkgICogY29tcHV0ZSB0aGUgbG9nKG4hKQorCSAgKiBAcGFyYW0gbgorCSAgKiBAcmV0dXJuIGxvZyhuISkKKwkgICovCisJICAgc3RhdGljIGRvdWJsZSBsbkZhY3RvcmlhbChpbnQgbikgeworCSAgICAgIGRvdWJsZSByZXRWYWwgPSAwLjA7CisJCisJICAgICAgZm9yIChpbnQgaSA9IDE7IGkgPD0gbjsgaSsrKSB7CisJICAgIAkgIHJldFZhbCArPSBNYXRoLmxvZygoZG91YmxlKWkpOworCSAgICAgIH0KKwkgICAgICAgCisJICAgICAgcmV0dXJuIHJldFZhbDsKKwkgICB9Cit9CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL21vZGVsL0RlY29yYXRvci5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9tb2RlbC9EZWNvcmF0b3IuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NjIyZjk3Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9tb2RlbC9EZWNvcmF0b3IuamF2YQpAQCAtMCwwICsxLDIxNyBAQAorLy8gRGVjb3JhdG9yLmphdmEKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA2LCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5FTGlzdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLklkZW50aWZpYWJsZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguRHluYW1pY0xhYmVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5FZGdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5HcmFwaDsKKworLyoqCisgKiBBIDxjb2RlPkRlY29yYXRvcjwvY29kZT4gcmVwcmVzZW50cyBhIGNvbXB1dGF0aW9uYWwgY29tcG9uZW50IHRoYXQgY2FuCisgKiBtb2RpZnkgb3IgImRlY29yYXRlIiBhIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguR3JhcGh9LgorICogPHA+CisgKiBUaGUgbWV0aG9kIHtAbGluayAjZGVjb3JhdGVHcmFwaChvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguR3JhcGgpfSBpcworICogY2FsbGVkIG9uY2UgZm9yIGVhY2ggPGNvZGU+RGVjb3JhdG9yPC9jb2RlPiBpbnN0YW5jZSBkdXJpbmcgdGhlIGNyZWF0aW9uIG9mCisgKiB0aGUgY2Fub25pY2FsIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguR3JhcGh9IChzZWUKKyAqIHtAbGluayBNb2RlbCNnZXRDYW5vbmljYWxHcmFwaChvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuVVJJKX0pLgorICogVHlwaWNhbGx5LCB0aGlzIG1ldGhvZCB3b3VsZCBhZGQgYWRkaXRpb25hbCB7QGxpbmsgRHluYW1pY0xhYmVsfXMgdG8gdGhlCisgKiB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkdyYXBofSB1bmRlciBjb25zdHJ1Y3Rpb24uIEZvcgorICogZXhhbXBsZSwgYSBkaXNlYXNlIG1vZGVsIHdvdWxkIGJlIGltcGxlbWVudGVkIGFzIGEgPGNvZGU+RGVjb3JhdG9yPC9jb2RlPgorICogYW5kIGl0IHdvdWxkIGFkZCB7QGxpbmsgRHluYW1pY0xhYmVsfXMgdG8gdGhlCisgKiB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLk5vZGV9cyBvZiB0aGUKKyAqIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguR3JhcGh9IHRoYXQgcmVwcmVzZW50IHRoZSBzdGF0ZSBvZiB0aGUKKyAqIGRpc2Vhc2UgYXQgZWFjaCB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLk5vZGV9LgorICogPC9wPgorICogPHA+CisgKiBBZnRlciB0aGUgY2Fub25pY2FsIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguR3JhcGh9IGlzIGNyZWF0ZWQsCisgKiB0aGUgbWV0aG9kCisgKiB7QGxpbmsgI3VwZGF0ZUxhYmVscyhvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguR3JhcGgsIFNURU1UaW1lLCBsb25nKX0KKyAqIHdpbGwgYmUgY2FsbGVkIG9uY2UgZXZlcnkgdGltZSB0aGUKKyAqIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2NlbmFyaW8uU2NlbmFyaW99IGlzICJzdGVwcGVkIiAoc2VlCisgKiB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNjZW5hcmlvLlNjZW5hcmlvI3N0ZXAoKX0pLiBUaGUKKyAqIHtAbGluayBEeW5hbWljTGFiZWx9cyB0aGF0IGl0IHVwZGF0ZXMgYXJlIHRob3NlIHRoYXQgd2VyZSBhZGRlZCB0byB0aGUKKyAqIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguR3JhcGh9IGluIHRoZQorICoge0BsaW5rICNkZWNvcmF0ZUdyYXBoKG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5HcmFwaCl9IG1ldGhvZCBjYWxsLiBBCisgKiByZWZlcmVuY2UgdG8gZWFjaCBvZiB0aG9zZSB7QGxpbmsgRHluYW1pY0xhYmVsfXMgaXMga2VwdCBpbiBhIGNvbGxlY3Rpb24KKyAqIChzZWUge0BsaW5rICNnZXRMYWJlbHNUb1VwZGF0ZSgpfSkgbWFpbnRhaW5lZCBieSB0aGUgPGNvZGU+RGVjb3JhdG9yPC9jb2RlPi4KKyAqIFRoZSB7QGxpbmsgI3VwZGF0ZUxhYmVscyhHcmFwaCwgU1RFTVRpbWUsIGxvbmcpfSBtZXRob2QgY29tcHV0ZXMgdGhlICJuZXh0IgorICogdmFsdWUgb2YgYWxsIG9mIHRoZSB7QGxpbmsgRHluYW1pY0xhYmVsfXMgaW4gdGhhdCBjb2xsZWN0aW9uLgorICogPC9wPgorICogPHA+CisgKiBGb3IgbWF4aW11bSBmbGV4aWJpbGl0eSwgdGhlIG5hdHVyZSBvZiB0aGF0CisgKiB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkxhYmVsVmFsdWV9IGFuZCBpdHMgY29tcHV0YXRpb24gYXJlCisgKiBub3QgZGVmaW5lZCBvciByZXN0cmljdGVkLiBGb3IgaW5zdGFuY2UsIHRoZSA8Y29kZT5EZWNvcmF0b3I8L2NvZGU+IGNvdWxkCisgKiBjb21wdXRlIHRoZSB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkxhYmVsVmFsdWV9IGZyb20gdGhlCisgKiBjb250ZW50cyBvZiB0aGUge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5HcmFwaH0sIHJlYWQgdGhlCisgKiB2YWx1ZSBmcm9tIGEgZmlsZSwgb2J0YWluIGl0IGZyb20gYSByZWFsLXRpbWUgZGF0YSBzb3VyY2Ugc3VjaCBhcyBhIHdlYXRoZXIKKyAqIHN0YXRpb24gb3Igc29tZXRoaW5nIGFjY2Vzc2libGUgZnJvbSBhIHdlYiBzaXRlIG9yIGEgd2ViIHNlcnZpY2UuCisgKiA8L3A+CisgKiAKKyAqIEBtb2RlbAorICovCitwdWJsaWMgaW50ZXJmYWNlIERlY29yYXRvciBleHRlbmRzIElkZW50aWZpYWJsZSB7CisKKwkvKioKKwkgKiBBIHtAbGluayBEZWNvcmF0b3J9IGlzIGVuYWJsZWQgYnkgZGVmYXVsdCwgYnV0IGlmIGl0IGlzIHRoZSBhY3Rpb24gb2YgYQorCSAqIHtAbGluayBUcmlnZ2VyfSB0aGVuIGl0IHdpbGwgYmUgZGlzYWJsZWQgYnkgdGhlIHtAbGluayBUcmlnZ2VyfSB1bnRpbCB0aGUKKwkgKiB7QGxpbmsgVHJpZ2dlcn0ncyB7QGxpbmsgUHJlZGljYXRlfSBldmFsdWF0ZXMgdG8gPGNvZGU+dHJ1ZTwvY29kZT4uCisJICogPHA+CisJICogSWYgdGhlIHZhbHVlIGlzIDxjb2RlPmZhbHNlPC9jb2RlPiB0aGVuIGNhbGxzIHRvIHtAbGluayAjZGVjb3JhdGVHcmFwaCgpfQorCSAqIGFuZCB7QGxpbmsgI3VwZGF0ZUxhYmVscyhTVEVNVGltZSwgbG9uZyl9IHdpbGwgYmUgaWdub3JlZC4KKwkgKiAKKwkgKiBAcmV0dXJuIDxjb2RlPnRydWU8L2NvZGU+IGlmIHRoZSB7QGxpbmsgRGVjb3JhdG9yfSBpcyBlbmFibGVkLgorCSAqIEBtb2RlbCBkZWZhdWx0PSJ0cnVlIgorCSAqLworCWJvb2xlYW4gaXNFbmFibGVkKCk7CisJCisJLyoqCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLkRlY29yYXRvciNpc0VuYWJsZWQgPGVtPkVuYWJsZWQ8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPkVuYWJsZWQ8L2VtPicgYXR0cmlidXRlLgorCSAqIEBzZWUgI2lzRW5hYmxlZCgpCisJICogQGdlbmVyYXRlZAorCSAqLworCXZvaWQgc2V0RW5hYmxlZChib29sZWFuIHZhbHVlKTsKKworCisJLyoqCisJICogQHJldHVybiA8Y29kZT50cnVlPC9jb2RlPiBpZiB7QGxpbmsgI2RlY29yYXRlR3JhcGgoKX0gaGFzIGJlZW4gY2FsbGVkIGFuZAorCSAqICAgICAgICAgaXQgaGFzIGNvbXBsZXRlZCBkZWNvcmF0aW5nIHRoZSB7QGxpbmsgR3JhcGh9LCA8Y29kZT5mYWxzZTwvY29kZT4KKwkgKiAgICAgICAgIG90aGVyd2lzZS4KKwkgKiBAbW9kZWwgZGVmYXVsdD0iZmFsc2UiCisJICovCisJYm9vbGVhbiBpc0dyYXBoRGVjb3JhdGVkKCk7CisJCisJLyoqCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLkRlY29yYXRvciNpc0dyYXBoRGVjb3JhdGVkIDxlbT5HcmFwaCBEZWNvcmF0ZWQ8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPkdyYXBoIERlY29yYXRlZDwvZW0+JyBhdHRyaWJ1dGUuCisJICogQHNlZSAjaXNHcmFwaERlY29yYXRlZCgpCisJICogQGdlbmVyYXRlZAorCSAqLworCXZvaWQgc2V0R3JhcGhEZWNvcmF0ZWQoYm9vbGVhbiB2YWx1ZSk7CisJCisJLyoqCisJICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+UHJvZ3Jlc3M8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyA8Y29kZT4iMC4wIjwvY29kZT4uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8cD4KKwkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5Qcm9ncmVzczwvZW0+JyBhdHRyaWJ1dGUgaXNuJ3QgY2xlYXIsCisJICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLgorCSAqIDwvcD4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5Qcm9ncmVzczwvZW0+JyBhdHRyaWJ1dGUuCisJICogQHNlZSAjc2V0UHJvZ3Jlc3MoZG91YmxlKQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLk1vZGVsUGFja2FnZSNnZXREZWNvcmF0b3JfUHJvZ3Jlc3MoKQorCSAqIEBtb2RlbCBkZWZhdWx0PSIwLjAiIHRyYW5zaWVudD0idHJ1ZSIKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJZG91YmxlIGdldFByb2dyZXNzKCk7CisKKwkvKioKKwkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuRGVjb3JhdG9yI2dldFByb2dyZXNzIDxlbT5Qcm9ncmVzczwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+UHJvZ3Jlc3M8L2VtPicgYXR0cmlidXRlLgorCSAqIEBzZWUgI2dldFByb2dyZXNzKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJdm9pZCBzZXRQcm9ncmVzcyhkb3VibGUgdmFsdWUpOworCisJLyoqQXVnbWVudCB0aGUgZ3JhcGggYnkgYWRkaW5nIGNvbXBvbmVudHMgKHtAbGluayBFZGdlfXMsCisJICoge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5Ob2RlfXMsCisJICoge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5MYWJlbH1zKS4gVGhlIGFkZGVkIGNvbXBvbmVudHMsCisJICogaW4gcGFydGljdWxhciB7QGxpbmsgRHluYW1pY0xhYmVsfXMsIGNhbiBiZSBtb2RpZmllZCBsYXRlciBkdXJpbmcgYSBjYWxsCisJICogdG8ge0BsaW5rICN1cGRhdGVMYWJlbHMoR3JhcGgsIFNURU1UaW1lKX0uIEEgc2lkZSBlZmZlY3Qgb2YgdGhpcyBjYWxsIGlzCisJICogdGhhdCBpdCBhZGRzIHRoZSBkZWNvcmF0b3IgdG8gdGhlIGNvbGxlY3Rpb24gbWFpbnRhaW5lZCBieSB0aGUKKwkgKiB7QGxpbmsgR3JhcGh9LgorCSAqIEBwYXJhbSB0aW9tZQorCSAqIEByZXR1cm4gYm9vbGVhbgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAbW9kZWwgdm9sYXRpbGU9InRydWUiIHRyYW5zaWVudD0idHJ1ZSIgY2hhbmdlYWJsZT0iZmFsc2UiCisJICovCisJYm9vbGVhbiBkZWNvcmF0ZUdyYXBoKFNURU1UaW1lIHRpbWUpOworCisJLyoqCisJICogCisJICogQHJldHVybiB0aGUge0BsaW5rIEdyYXBofSB0aGF0IHRoZSA8Y29kZT5EZWNvcmF0b3I8L2NvZGU+IGRlY29yYXRlcy4KKwkgKiBAbW9kZWwgb3Bwb3NpdGU9ImRlY29yYXRvcnMiCisJICovCisJR3JhcGggZ2V0R3JhcGgoKTsKKwkKKwkvKioKKwkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuRGVjb3JhdG9yI2dldEdyYXBoIDxlbT5HcmFwaDwvZW0+fScgY29udGFpbmVyIHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiAKKwkgKiAKKwkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuRGVjb3JhdG9yI2dldEdyYXBoIDxlbT5HcmFwaDwvZW0+fScKKwkgKiBjb250YWluZXIgcmVmZXJlbmNlLgorCSAqIAorCSAqIEBwYXJhbSB2YWx1ZQorCSAqICAgICAgICAgICAgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5HcmFwaDwvZW0+JyBjb250YWluZXIgcmVmZXJlbmNlLgorCSAqIEBzZWUgI2dldEdyYXBoKCkKKwkgKiAKKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5HcmFwaDwvZW0+JyBjb250YWluZXIgcmVmZXJlbmNlLgorCSAqIEBzZWUgI2dldEdyYXBoKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJdm9pZCBzZXRHcmFwaChHcmFwaCB2YWx1ZSk7CisKKwkvKioKKwkgKiBAcmV0dXJuIHRoZSBsaXN0IG9mIHtAbGluayBEeW5hbWljTGFiZWx9cyB0aGF0IHRoaXMgPGNvZGU+RGVjb3JhdG9yPC9jb2RlPgorCSAqIAkgaXMgcmVzcG9uc2libGUgZm9yIHVwZGF0aW5nLgorCSAqIEBtb2RlbCB0eXBlPSJEeW5hbWljTGFiZWwiIGNvbnRhaW5tZW50PSJmYWxzZSIgb3Bwb3NpdGU9ImRlY29yYXRvciIKKwkgKi8KKwlFTGlzdDxEeW5hbWljTGFiZWw+IGdldExhYmVsc1RvVXBkYXRlKCk7CisKKworCS8qKgorCSAqIFByb2Nlc3MgZWFjaCBvZiB0aGUge0BsaW5rIER5bmFtaWNMYWJlbH1zIHRoYXQgdGhpcworCSAqIDxjb2RlPkRlY29yYXRvcjwvY29kZT4gaXMgcmVzcG9uc2libGUgZm9yIGFuZCBkZXRlcm1pbmUgdGhlaXIgIm5leHQiCisJICogdmFsdWUuCisJICogCisJICogQHBhcmFtIHRpbWUKKwkgKiAgICAgICAgICAgIHRoZSB0aW1lIHRvIGJlIHVzZWQgd2hlbiBkZXRlcm1pbmluZyB0aGUgY2hhbmdlcyB0byBiZSBtYWRlIHRvCisJICogICAgICAgICAgICB0aGUgR3JhcGgKKwkgKiBAcGFyYW0gdGltZVBlcmlvZAorCSAqICAgICAgICAgICAgdGhlIG51bWJlciBvZiBtaWxsaXNlY29uZHMgZGlmZmVyZW5jZSBiZXR3ZWVuIHRoZSB0aW1lIGFuZCB0aGUKKwkgKiAgICAgICAgICAgIHByZXZpb3VzIHRpbWUgdmFsdWUuCisJICogQHBhcmFtIGN5Y2xlIAorCSAqIAkJCSAgVGhlIG5leHQgY3ljbGUgbnVtYmVyLgorCSAqIEBtb2RlbCB2b2xhdGlsZT0idHJ1ZSIgdHJhbnNpZW50PSJ0cnVlIiBjaGFuZ2VhYmxlPSJmYWxzZSIKKwkgKi8KKwl2b2lkIHVwZGF0ZUxhYmVscyhmaW5hbCBTVEVNVGltZSB0aW1lLCBmaW5hbCBsb25nIHRpbWVyUGVyaW9kLCBpbnQgY3ljbGUpOworCisJLyoqCisJICogUHJvY2VzcyBlYWNoIG9mIHRoZSB7QGxpbmsgRHluYW1pY0xhYmVsc30gdGhhdCB0aGlzCisJICogPGNvZGU+ZGVjb3JhdG9yPC9jb2RlPiBpcyByZXNwb25zaWJsZSBmb3IgYW5kIHJlc2V0IHRoZWlyICJjdXJyZW50IgorCSAqIHZhbHVlIHRvIGJlIHRoZSBpbml0aWFsIHZhbHVlIGFzc2lnbmVkIGR1cmluZyB0aGUgY2FsbCB0byB0aGUgbWV0aG9kCisJICoge0BsaW5rICNkZWNvcmF0ZUdyYXBoKCl9CisJICogCisJICogQG1vZGVsIHZvbGF0aWxlPSJ0cnVlIiB0cmFuc2llbnQ9InRydWUiIGNoYW5nZWFibGU9ImZhbHNlIgorCSAqLworCXZvaWQgcmVzZXRMYWJlbHMoKTsKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQG1vZGVsCisJICogQGdlbmVyYXRlZAorCSAqLworCXZvaWQgcHJlcGFyZShNb2RlbCBtb2RlbCwgU1RFTVRpbWUgdGltZSk7CisKK30gLy8gRGVjb3JhdG9yCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL21vZGVsL0Rpc3BsYXlhYmxlQ2Fub25pY2FsLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL21vZGVsL0Rpc3BsYXlhYmxlQ2Fub25pY2FsLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmRlNjkxNQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvbW9kZWwvRGlzcGxheWFibGVDYW5vbmljYWwuamF2YQpAQCAtMCwwICsxLDE0IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbDsNCisNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3Q7DQorDQorLyoqDQorICogc2VlIE1vZGlmaWFibGUuamF2YSBpbiBvcmcuZWNsaXBzZS5jb3JlLm1vZGlmaWVyDQorICogDQorICogDQorICogQG1vZGVsIGludGVyZmFjZT0idHJ1ZSINCisgKi8NCitwdWJsaWMgaW50ZXJmYWNlIERpc3BsYXlhYmxlQ2Fub25pY2FsIGV4dGVuZHMgRU9iamVjdCB7DQorCS8vIE5vdGhpbmcNCit9IC8vIE1vZGlmaWFibGUNCisNCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL21vZGVsL0VkZ2VEZWNvcmF0b3IuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvbW9kZWwvRWRnZURlY29yYXRvci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNhODU2YjAKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL21vZGVsL0VkZ2VEZWNvcmF0b3IuamF2YQpAQCAtMCwwICsxLDMxIEBACisvLyBFZGdlRGVjb3JhdG9yLmphdmEKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsOworCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkVkZ2U7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioKKyAqIEFuIDxjb2RlPkVkZ2VEZWNvcmF0b3I8L2NvZGU+IGlzIGEge0BsaW5rIERlY29yYXRvcn0gdGhhdCBzcGVjaWZpY2FsbHkKKyAqIG1vZGlmaWVzIHtAbGluayBFZGdlfXMgYW5kIHRoZWlyIHtAbGluayBMYWJlbH1zLgorICogCisgKiBAc2VlIEVkZ2UKKyAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkR5bmFtaWNMYWJlbAorICogQHNlZSBOb2RlRGVjb3JhdG9yCisgKiBAc2VlIEdyYXBoRGVjb3JhdG9yCisgKiBAc2VlIFNlcXVlbmNlcgorICogCisgKiBAbW9kZWwKKyAqLworcHVibGljIGludGVyZmFjZSBFZGdlRGVjb3JhdG9yIGV4dGVuZHMgRGVjb3JhdG9yIHsKKwkvLyBOb3RoaW5nIFlldAorfSAvLyBFZGdlRGVjb3JhdG9yCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL21vZGVsL0dyYXBoRGVjb3JhdG9yLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL21vZGVsL0dyYXBoRGVjb3JhdG9yLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmNkMjEwZAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvbW9kZWwvR3JhcGhEZWNvcmF0b3IuamF2YQpAQCAtMCwwICsxLDMwIEBACisvLyBHcmFwaERlY29yYXRvci5qYXZhCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbDsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKgorICogQW4gPGNvZGU+R3JhcGhEZWNvcmF0b3I8L2NvZGU+IGlzIGEge0BsaW5rIERlY29yYXRvcn0gdGhhdCBzcGVjaWZpY2FsbHkKKyAqIG1vZGlmaWVzIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguRWRnZX1zIGFuZCB0aGVpcgorICoge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5MYWJlbH1zLgorICogCisgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5HcmFwaAorICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguRHluYW1pY0xhYmVsCisgKiBAc2VlIE5vZGVEZWNvcmF0b3IKKyAqIEBzZWUgRWRnZURlY29yYXRvcgorICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2VxdWVuY2VyLlNlcXVlbmNlcgorICogCisgKiBAbW9kZWwKKyAqLworcHVibGljIGludGVyZmFjZSBHcmFwaERlY29yYXRvciBleHRlbmRzIERlY29yYXRvciB7CisJLy8gTm90aGluZyBZZXQKK30gLy8gR3JhcGhEZWNvcmF0b3IKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvbW9kZWwvSW50ZWdyYXRpb25EZWNvcmF0b3IuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvbW9kZWwvSW50ZWdyYXRpb25EZWNvcmF0b3IuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYzBhODlmCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9tb2RlbC9JbnRlZ3JhdGlvbkRlY29yYXRvci5qYXZhCkBAIC0wLDAgKzEsNjAgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsOw0KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIA0KKyAqIENvcHlyaWdodCAoYykgMjAxMSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4gDQorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyANCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgDQorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQgDQorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwgDQorICogDQorICogQ29udHJpYnV0b3JzOiANCisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIA0KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KKw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuRUxpc3Q7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5EeW5hbWljTGFiZWw7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5MYWJlbFZhbHVlOw0KKw0KKy8qKg0KKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorICogQSByZXByZXNlbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+SW50ZWdyYXRpb24gRGVjb3JhdG9yPC9iPjwvZW0+Jy4NCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisgKg0KKyAqDQorICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuTW9kZWxQYWNrYWdlI2dldEludGVncmF0aW9uRGVjb3JhdG9yKCkNCisgKiBAbW9kZWwgYWJzdHJhY3Q9InRydWUiDQorICogQGdlbmVyYXRlZA0KKyAqLw0KK3B1YmxpYyBpbnRlcmZhY2UgSW50ZWdyYXRpb25EZWNvcmF0b3IgZXh0ZW5kcyBOb2RlRGVjb3JhdG9yIHsNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAbW9kZWwgbGFiZWxzTWFueT0idHJ1ZSINCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJdm9pZCBhcHBseUV4dGVybmFsRGVsdGFzKFNURU1UaW1lIHRpbWUsIGxvbmcgdGltZURlbHRhLCBFTGlzdDxEeW5hbWljTGFiZWw+IGxhYmVscyk7DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQG1vZGVsIGxhYmVsc01hbnk9InRydWUiDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXZvaWQgY2FsY3VsYXRlRGVsdGEoU1RFTVRpbWUgdGltZSwgbG9uZyB0aW1lRGVsdGEsIEVMaXN0PER5bmFtaWNMYWJlbD4gbGFiZWxzKTsNCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAbW9kZWwNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJdm9pZCBkb01vZGVsU3BlY2lmaWNBZGp1c3RtZW50cyhMYWJlbFZhbHVlIGxhYmVsKTsNCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAbW9kZWwga2luZD0ib3BlcmF0aW9uIg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlib29sZWFuIGlzRGV0ZXJtaW5pc3RpYygpOw0KKw0KK30gLy8gSW50ZWdyYXRpb25EZWNvcmF0b3INCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL21vZGVsL01vZGVsLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL21vZGVsL01vZGVsLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWFmMDEwYQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvbW9kZWwvTW9kZWwuamF2YQpAQCAtMCwwICsxLDE1NCBAQAorLy8gTW9kZWwuamF2YQorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWw7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLkVMaXN0OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5VUkk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5JZGVudGlmaWFibGU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5JZGVudGlmaWFibGVGaWx0ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkdyYXBoOworCisvKioKKyAqIEEgPGNvZGU+TW9kZWw8L2NvZGU+IGNvbnRhaW5zIGFsbCBvZiB0aGUgY29tcG9uZW50cyBuZWNlc3NhcnkgdG8gY3JlYXRlIGEKKyAqIGNhbm9uaWNhbCB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkdyYXBofSBzdWl0YWJsZSBmb3IKKyAqIHNpbXVsYXRpb24uIEluIHBhcnRpY3VsYXIgaXQgY29udGFpbnMgYSBjb2xsZWN0aW9uIG9mCisgKiB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkdyYXBofSdzIGFuZCBhIGNvbGxlY3Rpb24gb2Ygb3RoZXIKKyAqIChzdWIpIDxjb2RlPk1vZGVsPC9jb2RlPidzLiBUaGlzIHN0cnVjdHVyZSBmb3JtcyBhICJ0cmVlIiB3aXRoCisgKiA8Y29kZT5Nb2RlbDwvY29kZT4gaW5zdGFuY2VzIGFzIHRoZSB0cmVlJ3Mgcm9vdCBhbmQgaW50ZXJpb3Igbm9kZXMsIGFuZAorICoge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5HcmFwaH0gaW5zdGFuY2VzIGFzIHRoZSB0cmVlJ3MgbGVhdmVzLgorICogPHA+CisgKiBFYWNoIDxjb2RlPk1vZGVsPC9jb2RlPiBjYW4gYWxzbyBjb250YWluIGNvbGxlY3Rpb24ncyBvZiB7QGxpbmsgRGVjb3JhdG9yfSdzCisgKiB3aGljaCBjYW4gbW9kaWZ5IHRoZSBjYW5vbmljYWwge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5HcmFwaH0KKyAqIHdoZW4gaXQgaXMgZmlyc3QgY3JlYXRlZCBmcm9tIHRoZSBtb2RlbCAoc2VlIHtAbGluayAjZ2V0Q2Fub25pY2FsR3JhcGgoVVJJKX0uCisgKiA8L3A+CisgKiA8cD4KKyAqIEVhY2gge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zY2VuYXJpby5TY2VuYXJpb30gY29udGFpbnMgYSBzaW5nbGUKKyAqIHJlZmVyZW5jZSB0byBhIDxjb2RlPk1vZGVsPC9jb2RlPi4gVGhhdCBtb2RlbCBpcyB0aGUgcm9vdCBvZiB0aGUgdHJlZSB0aGUKKyAqIGRlZmluZXMgdGhlIGNhbm9uaWNhbCB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkdyYXBofSB0aGF0IHdpbGwKKyAqIGJlIHVzZWQgZm9yIHNpbXVsYXRpb24uIEEge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zY2VuYXJpby5TY2VuYXJpb30KKyAqIG9idGFpbnMgdGhlIGNhbm9uaWNhbCB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkdyYXBofSBmcm9tIHRoZQorICogbW9kZWwgYnkgY2FsbGluZyB0aGUgbWV0aG9kIHtAbGluayAjZ2V0Q2Fub25pY2FsR3JhcGgoVVJJKX0uIFRoaXMgbWV0aG9kCisgKiByZWN1cnNpdmVseSBjcmVhdGVzIHRoZSBjYW5vbmljYWwKKyAqIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguR3JhcGh9IGJ5IGludm9raW5nIGl0c2VsZiBvbiB0aGUKKyAqIDxjb2RlPk1vZGVsPC9jb2RlPiBpbnN0YW5jZXMgaXQgY29udGFpbnMuIEF0IGVhY2ggbGV2ZWwgb2YgdGhlIHJlY3Vyc2lvbiwKKyAqIGl0IGNvbWJpbmVzIHRoZSByZXN1bHRzIG9mIHRob3NlIGNhbGxzIHdpdGggdGhlCisgKiB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkdyYXBofSdzIGl0IGNvbnRhaW5zIChpZiBhbnkpLiBUaGUKKyAqIHtAbGluayBEZWNvcmF0b3J9cyBpbiB0aGUgbW9kZWwgYXJlIGFsc28gdGhlbiBhbGxvd2VkIHRvIG1vZGlmeSAoZGVjb3JhdGUpCisgKiB0aGUge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5HcmFwaH0uIFRoZW4sIHRoZSByZWN1cnNpb24KKyAqIGF0dGVtcHRzIHRvIHJlc29sdmUgYW55IG91dHN0YW5kaW5nIHVucmVzb2x2ZWQgbGlua3MgYmV0d2VlbgorICoge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5FZGdlfXMgYW5kCisgKiB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkxhYmVsfXMgYW5kIHRoZQorICoge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5Ob2RlfXMgaW4gdGhlIGNhbm9uaWNhbAorICoge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5HcmFwaH0gdW5kZXIgY29uc3RydWN0aW9uLiBUaGlzIGlzCisgKiBhY2NvbXBsaXNoZWQgYnkgbWF0Y2hpbmcgdXAgdGhlICJ0YXJnZXQiIHtAbGluayBVUkl9cyBvZiB0aGUgdW5yZXNvbHZlZAorICoge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5FZGdlfXMgb3Ige0BsaW5rIExhYmVsfXMgd2l0aCBhCisgKiB7QGxpbmsgVVJJfSBvZiBhIHtAbGluayBOb2RlfS4gQW55IHdoaWNoIGNhbm5vdCBiZSByZXNvbHZlZCBhcmUgcmVjb3JkZWQKKyAqIHdpdGggYSB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLlVucmVzb2x2ZWRJZGVudGlmaWFibGV9CisgKiBpbnN0YW5jZSAoc2VlCisgKiB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkdyYXBoI2dldFVucmVzb2x2ZWRJZGVudGlmaWFibGVzKCl9KQorICogZm9yIGxhdGVyIHJlcG9ydGluZy4KKyAqIDwvcD4KKyAqIDxwPgorICogVGhpcyBpbnRlcmZhY2UgZGVmaW5pdGlvbiBpcyBhbHNvIGFuICJBbm5vdGF0ZWQgSmF2YSBJbnRlcmZhY2UiIHRoYXQgZGVmaW5lcworICogb25lIGNsYXNzIGluIGEgPGEgaHJlZj0iaHR0cDovL3d3dy51bWwub3JnLyI+VU1MPC9hPiAibW9kZWwiLiBUaGUgVU1MIGNsYXNzCisgKiBkaWFncmFtIGZvciB0aGUgbW9kZWwgaXMgaW4gdGhlIDxjb2RlPmRvY3VtZW50YXRpb248L2NvZGU+IGZvbGRlciBvZiB0aGUKKyAqIHByb2plY3QuIFRoaXMgZmlsZSBhbmQgdGhlIG90aGVyIGludGVyZmFjZXMgaW4gdGhpcyBKYXZhIHBhY2thZ2UgYXJlCisgKiBwcm9jZXNzZWQgYnkgdGhlIEVjbGlwc2UgTW9kZWxpbmcgRnJhbWV3b3JrIChha2EgRU1GIDxhCisgKiBocmVmPSJodHRwOi8vb3JnLmVjbGlwc2UvZW1mIj5odHRwOi8vb3JnLmVjbGlwc2UvZW1mPC9hPikuIHRvIGF1dG9tYXRpY2FsbHkKKyAqIGdlbmVyYXRlIGFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBtb2RlbC4gRU1GIGlzIGRvY3VtZW50ZWQgaW4gdGhlIGJvb2sgPGEKKyAqIGhyZWY9Imh0dHA6Ly93d3cuYXdwcm9mZXNzaW9uYWwuY29tL2Jvb2tzdG9yZS9wcm9kdWN0LmFzcD9pc2JuPTAxMzE0MjU0MjAmcmw9MSI+RWNsaXBzZQorICogTW9kZWxpbmcgRnJhbWV3b3JrIDwvYT4gYnkgQnVkaW5za3ksIGV0IGFsLgorICogPC9wPgorICogCisgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5HcmFwaAorICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2NlbmFyaW8uU2NlbmFyaW8KKyAqIAorICogQG1vZGVsCisgKi8KK3B1YmxpYyBpbnRlcmZhY2UgTW9kZWwgZXh0ZW5kcyBJZGVudGlmaWFibGUgeworCisJLyoqCisJICogVGhpcyBpcyB0aGUgc2VnbWVudCBvZiB0aGUgdHlwZSBVUkkgdGhhdCBwcmVmaXhlcyBhbGwgb3RoZXIgc2VnbWVudHMgaW4gYQorCSAqIG1vZGVsIFVSSS4KKwkgKi8KKwlTdHJpbmcgVVJJX1RZUEVfTU9ERUxfU0VHTUVOVCA9ICJtb2RlbCI7CisJCisJLyoqCisJICogQHJldHVybiB0aGlzIDxjb2RlPk1vZGVsPC9jb2RlPidzIGNvbGxlY3Rpb24gb2YgKHN1YikKKwkgKiAgICAgICAgIDxjb2RlPk1vZGVsPC9jb2RlPnMKKwkgKiAKKwkgKiBAbW9kZWwgdHlwZT0iTW9kZWwiIGNvbnRhaW5tZW50PSJmYWxzZSIKKwkgKi8KKwlFTGlzdDxNb2RlbD4gZ2V0TW9kZWxzKCk7CisKKwkvKioKKwkgKiBAcmV0dXJuIHRoaXMgPGNvZGU+TW9kZWw8L2NvZGU+J3MgY29sbGVjdGlvbiBvZiB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkdyYXBofX1zCisJICogCisJICogQG1vZGVsIHR5cGU9IkdyYXBoIiBjb250YWlubWVudD0iZmFsc2UiCisJICovCisJRUxpc3Q8R3JhcGg+IGdldEdyYXBocygpOworCisJLyoqCisJICogQHJldHVybiB0aGUgY29sbGVjdGlvbiBvZiB7QGxpbmsgRGVjb3JhdG9yfXMgdGhhdCBkZWNvcmF0ZSB0aGUgY2Fub25pY2FsCisJICogICAgICAgICB7QGxpbmsgR3JhcGh9IGl0c2VsZi4gVGhlc2UgZGVjb3JhdGlvbnMgYXJlIHtAbGluayBMYWJlbH1zIHRoYXQKKwkgKiAgICAgICAgIGFjdCBsaWtlICJnbG9iYWwgdmFyaWFibGVzIiBmb3IgdGhlIGNhbm9uaWNhbCB7QGxpbmsgR3JhcGh9LgorCSAqIAorCSAqIEBtb2RlbCB0eXBlPSJHcmFwaERlY29yYXRvciIgY29udGFpbm1lbnQ9ImZhbHNlIgorCSAqLworCUVMaXN0PEdyYXBoRGVjb3JhdG9yPiBnZXRHcmFwaERlY29yYXRvcnMoKTsKKworCS8qKgorCSAqIEByZXR1cm4gdGhlIGNvbGxlY3Rpb24gb2Yge0BsaW5rIERlY29yYXRvcn1zIHRoYXQgZGVjb3JhdGUgdGhlCisJICogICAgICAgICB7QGxpbmsgTm9kZX1zIGluIHRoZSBjYW5vbmljYWwge0BsaW5rIEdyYXBofS4KKwkgKiAKKwkgKiBAbW9kZWwgdHlwZT0iTm9kZURlY29yYXRvciIgY29udGFpbm1lbnQ9ImZhbHNlIgorCSAqLworCUVMaXN0PE5vZGVEZWNvcmF0b3I+IGdldE5vZGVEZWNvcmF0b3JzKCk7CisKKwkvKioKKwkgKiBAcmV0dXJuIHRoZSBjb2xsZWN0aW9uIG9mIHtAbGluayBEZWNvcmF0b3J9cyB0aGF0IGRlY29yYXRlIHRoZQorCSAqICAgICAgICAge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5FZGdlfXMgaW4gdGhlIGNhbm9uaWNhbCB7QGxpbmsgR3JhcGh9LgorCSAqIAorCSAqIEBtb2RlbCB0eXBlPSJFZGdlRGVjb3JhdG9yIiBjb250YWlubWVudD0iZmFsc2UiCisJICovCisJRUxpc3Q8RWRnZURlY29yYXRvcj4gZ2V0RWRnZURlY29yYXRvcnMoKTsKKworCS8qKgorCSAqUmVjdXJzaXZlbHkgcHJvY2VzcyBhbnkgbW9kZWxzIHRoaXMgbW9kZWwgY29udGFpbnMgdG8gb2J0YWluIHRoZWlyCisJICogY2Fub25pY2FsIHtAbGluayBHcmFwaH1zLiBDb21iaW5lIHRoZXNlIHdpdGggYW55IGdyYXBocyB0aGlzIG1vZGVsCisJICogY29udGFpbnMgdG8gbWFrZSBvbmUgYWdncmVnYXRlIHtAbGluayBHcmFwaH0uIFRoZW4gdGhpcworCSAqIDxjb2RlPm1vZGVsPC9jb2RlPidzIHtAbGluayBEZWNvcmF0b3J9cyBkZWNvcmF0ZSB0aGUgZ3JhcGguCisJICogCisJICogQHBhcmFtIHVyaQorCSAqICAgICAgICAgICAgdGhlIHtAbGluayBVUkl9IG9mIHRoZSBuZXdseSBjcmVhdGVkIGNhbm9uaWNhbCBncmFwaAorCSAqIEBwYXJhbSBwYXJlbnRGaWx0ZXIKKwkgKiBAcGFyYW0gdGltZQorCSAqIEByZXR1cm4gdGhlIGNhbm9uaWNhbCBncmFwaCBvZiB0aGUgbW9kZWwKKwkgKiAKKwkgKiBAbW9kZWwgdm9sYXRpbGU9InRydWUiIHRyYW5zaWVudD0idHJ1ZSIgY2hhbmdlYWJsZT0iZmFsc2UiCisJICogICAgICAgIHJlc29sdmVQcm94aWVzPSJmYWxzZSIKKwkgKiAgICAgICAgCisJICogQGdlbmVyYXRlZAorCSAqLworCUdyYXBoIGdldENhbm9uaWNhbEdyYXBoKFVSSSB1cmksIElkZW50aWZpYWJsZUZpbHRlciBmaWx0ZXIsIFNURU1UaW1lIHRpbWUpOworCisKKwkvKioKKwkgKiBQcmVwYXJlIHRoZSBtb2RlbCBpZiBuZWVkZWQKKwkgKiBAbW9kZWwKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJdm9pZCBwcmVwYXJlKFNURU1UaW1lIHRpbWUpOworCit9IC8vIE1vZGVsCisKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvbW9kZWwvTW9kZWxGYWN0b3J5LmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL21vZGVsL01vZGVsRmFjdG9yeS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg1ODA1NWIKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL21vZGVsL01vZGVsRmFjdG9yeS5qYXZhCkBAIC0wLDAgKzEsOTYgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FRmFjdG9yeTsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogVGhlIDxiPkZhY3Rvcnk8L2I+IGZvciB0aGUgbW9kZWwuCisgKiBJdCBwcm92aWRlcyBhIGNyZWF0ZSBtZXRob2QgZm9yIGVhY2ggbm9uLWFic3RyYWN0IGNsYXNzIG9mIHRoZSBtb2RlbC4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuTW9kZWxQYWNrYWdlCisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBpbnRlcmZhY2UgTW9kZWxGYWN0b3J5IGV4dGVuZHMgRUZhY3RvcnkgeworCS8qKgorCSAqIFRoZSBzaW5nbGV0b24gaW5zdGFuY2Ugb2YgdGhlIGZhY3RvcnkuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJTW9kZWxGYWN0b3J5IGVJTlNUQU5DRSA9IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5pbXBsLk1vZGVsRmFjdG9yeUltcGwuaW5pdCgpOworCisJLyoqCisJICogUmV0dXJucyBhIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5EZWNvcmF0b3I8L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPkRlY29yYXRvcjwvZW0+Jy4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRGVjb3JhdG9yIGNyZWF0ZURlY29yYXRvcigpOworCisJLyoqCisJICogUmV0dXJucyBhIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5FZGdlIERlY29yYXRvcjwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+RWRnZSBEZWNvcmF0b3I8L2VtPicuCisJICogQGdlbmVyYXRlZAorCSAqLworCUVkZ2VEZWNvcmF0b3IgY3JlYXRlRWRnZURlY29yYXRvcigpOworCisJLyoqCisJICogUmV0dXJucyBhIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5HcmFwaCBEZWNvcmF0b3I8L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPkdyYXBoIERlY29yYXRvcjwvZW0+Jy4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJR3JhcGhEZWNvcmF0b3IgY3JlYXRlR3JhcGhEZWNvcmF0b3IoKTsKKworCS8qKgorCSAqIFJldHVybnMgYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+TW9kZWw8L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPk1vZGVsPC9lbT4nLgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlNb2RlbCBjcmVhdGVNb2RlbCgpOworCisJLyoqCisJICogUmV0dXJucyBhIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5Ob2RlIERlY29yYXRvcjwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+Tm9kZSBEZWNvcmF0b3I8L2VtPicuCisJICogQGdlbmVyYXRlZAorCSAqLworCU5vZGVEZWNvcmF0b3IgY3JlYXRlTm9kZURlY29yYXRvcigpOworCisJLyoqCisJICogUmV0dXJucyBhIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5TVEVNIFRpbWU8L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPlNURU0gVGltZTwvZW0+Jy4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJU1RFTVRpbWUgY3JlYXRlU1RFTVRpbWUoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIHBhY2thZ2Ugc3VwcG9ydGVkIGJ5IHRoaXMgZmFjdG9yeS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIHBhY2thZ2Ugc3VwcG9ydGVkIGJ5IHRoaXMgZmFjdG9yeS4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJTW9kZWxQYWNrYWdlIGdldE1vZGVsUGFja2FnZSgpOworCit9IC8vTW9kZWxGYWN0b3J5CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL21vZGVsL01vZGVsUGFja2FnZS5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9tb2RlbC9Nb2RlbFBhY2thZ2UuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMGQ2NTZjCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9tb2RlbC9Nb2RlbFBhY2thZ2UuamF2YQpAQCAtMCwwICsxLDEwNTUgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQXR0cmlidXRlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FUmVmZXJlbmNlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uQ29tbW9uUGFja2FnZTsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogVGhlIDxiPlBhY2thZ2U8L2I+IGZvciB0aGUgbW9kZWwuCisgKiBJdCBjb250YWlucyBhY2Nlc3NvcnMgZm9yIHRoZSBtZXRhIG9iamVjdHMgdG8gcmVwcmVzZW50CisgKiA8dWw+CisgKiAgIDxsaT5lYWNoIGNsYXNzLDwvbGk+CisgKiAgIDxsaT5lYWNoIGZlYXR1cmUgb2YgZWFjaCBjbGFzcyw8L2xpPgorICogICA8bGk+ZWFjaCBlbnVtLDwvbGk+CisgKiAgIDxsaT5hbmQgZWFjaCBkYXRhIHR5cGU8L2xpPgorICogPC91bD4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuTW9kZWxGYWN0b3J5CisgKiBAbW9kZWwga2luZD0icGFja2FnZSIKKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGludGVyZmFjZSBNb2RlbFBhY2thZ2UgZXh0ZW5kcyBFUGFja2FnZSB7CisJLyoqCisJICogVGhlIHBhY2thZ2UgbmFtZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlTdHJpbmcgZU5BTUUgPSAibW9kZWwiOworCisJLyoqCisJICogVGhlIHBhY2thZ2UgbmFtZXNwYWNlIFVSSS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlTdHJpbmcgZU5TX1VSSSA9ICJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9tb2RlbC5lY29yZSI7CisKKwkvKioKKwkgKiBUaGUgcGFja2FnZSBuYW1lc3BhY2UgbmFtZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlTdHJpbmcgZU5TX1BSRUZJWCA9ICJvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwiOworCisJLyoqCisJICogVGhlIHNpbmdsZXRvbiBpbnN0YW5jZSBvZiB0aGUgcGFja2FnZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlNb2RlbFBhY2thZ2UgZUlOU1RBTkNFID0gb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLmltcGwuTW9kZWxQYWNrYWdlSW1wbC5pbml0KCk7CisKKwkvKioKKwkgKiBUaGUgbWV0YSBvYmplY3QgaWQgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5pbXBsLkRlY29yYXRvckltcGwgPGVtPkRlY29yYXRvcjwvZW0+fScgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5pbXBsLkRlY29yYXRvckltcGwKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5pbXBsLk1vZGVsUGFja2FnZUltcGwjZ2V0RGVjb3JhdG9yKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJaW50IERFQ09SQVRPUiA9IDA7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VVJJPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgREVDT1JBVE9SX19VUkkgPSBDb21tb25QYWNrYWdlLklERU5USUZJQUJMRV9fVVJJOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlR5cGUgVVJJPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgREVDT1JBVE9SX19UWVBFX1VSSSA9IENvbW1vblBhY2thZ2UuSURFTlRJRklBQkxFX19UWVBFX1VSSTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5EdWJsaW4gQ29yZTwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IERFQ09SQVRPUl9fRFVCTElOX0NPUkUgPSBDb21tb25QYWNrYWdlLklERU5USUZJQUJMRV9fRFVCTElOX0NPUkU7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+TGFiZWxzIFRvIFVwZGF0ZTwvYj48L2VtPicgcmVmZXJlbmNlIGxpc3QuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgREVDT1JBVE9SX19MQUJFTFNfVE9fVVBEQVRFID0gQ29tbW9uUGFja2FnZS5JREVOVElGSUFCTEVfRkVBVFVSRV9DT1VOVCArIDA7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+R3JhcGg8L2I+PC9lbT4nIGNvbnRhaW5lciByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgREVDT1JBVE9SX19HUkFQSCA9IENvbW1vblBhY2thZ2UuSURFTlRJRklBQkxFX0ZFQVRVUkVfQ09VTlQgKyAxOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkVuYWJsZWQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBERUNPUkFUT1JfX0VOQUJMRUQgPSBDb21tb25QYWNrYWdlLklERU5USUZJQUJMRV9GRUFUVVJFX0NPVU5UICsgMjsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5HcmFwaCBEZWNvcmF0ZWQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBERUNPUkFUT1JfX0dSQVBIX0RFQ09SQVRFRCA9IENvbW1vblBhY2thZ2UuSURFTlRJRklBQkxFX0ZFQVRVUkVfQ09VTlQgKyAzOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlByb2dyZXNzPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgREVDT1JBVE9SX19QUk9HUkVTUyA9IENvbW1vblBhY2thZ2UuSURFTlRJRklBQkxFX0ZFQVRVUkVfQ09VTlQgKyA0OworCisJLyoqCisJICogVGhlIG51bWJlciBvZiBzdHJ1Y3R1cmFsIGZlYXR1cmVzIG9mIHRoZSAnPGVtPkRlY29yYXRvcjwvZW0+JyBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBERUNPUkFUT1JfRkVBVFVSRV9DT1VOVCA9IENvbW1vblBhY2thZ2UuSURFTlRJRklBQkxFX0ZFQVRVUkVfQ09VTlQgKyA1OworCisJLyoqCisJICogVGhlIG1ldGEgb2JqZWN0IGlkIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuaW1wbC5FZGdlRGVjb3JhdG9ySW1wbCA8ZW0+RWRnZSBEZWNvcmF0b3I8L2VtPn0nIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuaW1wbC5FZGdlRGVjb3JhdG9ySW1wbAorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLmltcGwuTW9kZWxQYWNrYWdlSW1wbCNnZXRFZGdlRGVjb3JhdG9yKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJaW50IEVER0VfREVDT1JBVE9SID0gMTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5VUkk8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBFREdFX0RFQ09SQVRPUl9fVVJJID0gREVDT1JBVE9SX19VUkk7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VHlwZSBVUkk8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBFREdFX0RFQ09SQVRPUl9fVFlQRV9VUkkgPSBERUNPUkFUT1JfX1RZUEVfVVJJOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkR1YmxpbiBDb3JlPC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgRURHRV9ERUNPUkFUT1JfX0RVQkxJTl9DT1JFID0gREVDT1JBVE9SX19EVUJMSU5fQ09SRTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5MYWJlbHMgVG8gVXBkYXRlPC9iPjwvZW0+JyByZWZlcmVuY2UgbGlzdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBFREdFX0RFQ09SQVRPUl9fTEFCRUxTX1RPX1VQREFURSA9IERFQ09SQVRPUl9fTEFCRUxTX1RPX1VQREFURTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5HcmFwaDwvYj48L2VtPicgY29udGFpbmVyIHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBFREdFX0RFQ09SQVRPUl9fR1JBUEggPSBERUNPUkFUT1JfX0dSQVBIOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkVuYWJsZWQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBFREdFX0RFQ09SQVRPUl9fRU5BQkxFRCA9IERFQ09SQVRPUl9fRU5BQkxFRDsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5HcmFwaCBEZWNvcmF0ZWQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBFREdFX0RFQ09SQVRPUl9fR1JBUEhfREVDT1JBVEVEID0gREVDT1JBVE9SX19HUkFQSF9ERUNPUkFURUQ7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+UHJvZ3Jlc3M8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBFREdFX0RFQ09SQVRPUl9fUFJPR1JFU1MgPSBERUNPUkFUT1JfX1BST0dSRVNTOworCisJLyoqCisJICogVGhlIG51bWJlciBvZiBzdHJ1Y3R1cmFsIGZlYXR1cmVzIG9mIHRoZSAnPGVtPkVkZ2UgRGVjb3JhdG9yPC9lbT4nIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IEVER0VfREVDT1JBVE9SX0ZFQVRVUkVfQ09VTlQgPSBERUNPUkFUT1JfRkVBVFVSRV9DT1VOVCArIDA7CisKKwkvKioKKwkgKiBUaGUgbWV0YSBvYmplY3QgaWQgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5pbXBsLkdyYXBoRGVjb3JhdG9ySW1wbCA8ZW0+R3JhcGggRGVjb3JhdG9yPC9lbT59JyBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLmltcGwuR3JhcGhEZWNvcmF0b3JJbXBsCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuaW1wbC5Nb2RlbFBhY2thZ2VJbXBsI2dldEdyYXBoRGVjb3JhdG9yKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJaW50IEdSQVBIX0RFQ09SQVRPUiA9IDI7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VVJJPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgR1JBUEhfREVDT1JBVE9SX19VUkkgPSBERUNPUkFUT1JfX1VSSTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5UeXBlIFVSSTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IEdSQVBIX0RFQ09SQVRPUl9fVFlQRV9VUkkgPSBERUNPUkFUT1JfX1RZUEVfVVJJOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkR1YmxpbiBDb3JlPC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgR1JBUEhfREVDT1JBVE9SX19EVUJMSU5fQ09SRSA9IERFQ09SQVRPUl9fRFVCTElOX0NPUkU7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+TGFiZWxzIFRvIFVwZGF0ZTwvYj48L2VtPicgcmVmZXJlbmNlIGxpc3QuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgR1JBUEhfREVDT1JBVE9SX19MQUJFTFNfVE9fVVBEQVRFID0gREVDT1JBVE9SX19MQUJFTFNfVE9fVVBEQVRFOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkdyYXBoPC9iPjwvZW0+JyBjb250YWluZXIgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IEdSQVBIX0RFQ09SQVRPUl9fR1JBUEggPSBERUNPUkFUT1JfX0dSQVBIOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkVuYWJsZWQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBHUkFQSF9ERUNPUkFUT1JfX0VOQUJMRUQgPSBERUNPUkFUT1JfX0VOQUJMRUQ7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+R3JhcGggRGVjb3JhdGVkPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgR1JBUEhfREVDT1JBVE9SX19HUkFQSF9ERUNPUkFURUQgPSBERUNPUkFUT1JfX0dSQVBIX0RFQ09SQVRFRDsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5Qcm9ncmVzczwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IEdSQVBIX0RFQ09SQVRPUl9fUFJPR1JFU1MgPSBERUNPUkFUT1JfX1BST0dSRVNTOworCisJLyoqCisJICogVGhlIG51bWJlciBvZiBzdHJ1Y3R1cmFsIGZlYXR1cmVzIG9mIHRoZSAnPGVtPkdyYXBoIERlY29yYXRvcjwvZW0+JyBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBHUkFQSF9ERUNPUkFUT1JfRkVBVFVSRV9DT1VOVCA9IERFQ09SQVRPUl9GRUFUVVJFX0NPVU5UICsgMDsKKworCS8qKgorCSAqIFRoZSBtZXRhIG9iamVjdCBpZCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLmltcGwuTW9kZWxJbXBsIDxlbT5Nb2RlbDwvZW0+fScgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5pbXBsLk1vZGVsSW1wbAorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLmltcGwuTW9kZWxQYWNrYWdlSW1wbCNnZXRNb2RlbCgpCisJICogQGdlbmVyYXRlZAorCSAqLworCWludCBNT0RFTCA9IDM7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VVJJPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgTU9ERUxfX1VSSSA9IENvbW1vblBhY2thZ2UuSURFTlRJRklBQkxFX19VUkk7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VHlwZSBVUkk8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBNT0RFTF9fVFlQRV9VUkkgPSBDb21tb25QYWNrYWdlLklERU5USUZJQUJMRV9fVFlQRV9VUkk7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RHVibGluIENvcmU8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBNT0RFTF9fRFVCTElOX0NPUkUgPSBDb21tb25QYWNrYWdlLklERU5USUZJQUJMRV9fRFVCTElOX0NPUkU7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+TW9kZWxzPC9iPjwvZW0+JyByZWZlcmVuY2UgbGlzdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBNT0RFTF9fTU9ERUxTID0gQ29tbW9uUGFja2FnZS5JREVOVElGSUFCTEVfRkVBVFVSRV9DT1VOVCArIDA7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+R3JhcGhzPC9iPjwvZW0+JyByZWZlcmVuY2UgbGlzdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBNT0RFTF9fR1JBUEhTID0gQ29tbW9uUGFja2FnZS5JREVOVElGSUFCTEVfRkVBVFVSRV9DT1VOVCArIDE7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+R3JhcGggRGVjb3JhdG9yczwvYj48L2VtPicgcmVmZXJlbmNlIGxpc3QuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgTU9ERUxfX0dSQVBIX0RFQ09SQVRPUlMgPSBDb21tb25QYWNrYWdlLklERU5USUZJQUJMRV9GRUFUVVJFX0NPVU5UICsgMjsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5Ob2RlIERlY29yYXRvcnM8L2I+PC9lbT4nIHJlZmVyZW5jZSBsaXN0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IE1PREVMX19OT0RFX0RFQ09SQVRPUlMgPSBDb21tb25QYWNrYWdlLklERU5USUZJQUJMRV9GRUFUVVJFX0NPVU5UICsgMzsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5FZGdlIERlY29yYXRvcnM8L2I+PC9lbT4nIHJlZmVyZW5jZSBsaXN0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IE1PREVMX19FREdFX0RFQ09SQVRPUlMgPSBDb21tb25QYWNrYWdlLklERU5USUZJQUJMRV9GRUFUVVJFX0NPVU5UICsgNDsKKworCS8qKgorCSAqIFRoZSBudW1iZXIgb2Ygc3RydWN0dXJhbCBmZWF0dXJlcyBvZiB0aGUgJzxlbT5Nb2RlbDwvZW0+JyBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBNT0RFTF9GRUFUVVJFX0NPVU5UID0gQ29tbW9uUGFja2FnZS5JREVOVElGSUFCTEVfRkVBVFVSRV9DT1VOVCArIDU7CisKKwkvKioKKwkgKiBUaGUgbWV0YSBvYmplY3QgaWQgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5pbXBsLk5vZGVEZWNvcmF0b3JJbXBsIDxlbT5Ob2RlIERlY29yYXRvcjwvZW0+fScgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5pbXBsLk5vZGVEZWNvcmF0b3JJbXBsCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuaW1wbC5Nb2RlbFBhY2thZ2VJbXBsI2dldE5vZGVEZWNvcmF0b3IoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlpbnQgTk9ERV9ERUNPUkFUT1IgPSA0OworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlVSSTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IE5PREVfREVDT1JBVE9SX19VUkkgPSBERUNPUkFUT1JfX1VSSTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5UeXBlIFVSSTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IE5PREVfREVDT1JBVE9SX19UWVBFX1VSSSA9IERFQ09SQVRPUl9fVFlQRV9VUkk7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RHVibGluIENvcmU8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBOT0RFX0RFQ09SQVRPUl9fRFVCTElOX0NPUkUgPSBERUNPUkFUT1JfX0RVQkxJTl9DT1JFOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkxhYmVscyBUbyBVcGRhdGU8L2I+PC9lbT4nIHJlZmVyZW5jZSBsaXN0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IE5PREVfREVDT1JBVE9SX19MQUJFTFNfVE9fVVBEQVRFID0gREVDT1JBVE9SX19MQUJFTFNfVE9fVVBEQVRFOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkdyYXBoPC9iPjwvZW0+JyBjb250YWluZXIgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IE5PREVfREVDT1JBVE9SX19HUkFQSCA9IERFQ09SQVRPUl9fR1JBUEg7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RW5hYmxlZDwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IE5PREVfREVDT1JBVE9SX19FTkFCTEVEID0gREVDT1JBVE9SX19FTkFCTEVEOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkdyYXBoIERlY29yYXRlZDwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IE5PREVfREVDT1JBVE9SX19HUkFQSF9ERUNPUkFURUQgPSBERUNPUkFUT1JfX0dSQVBIX0RFQ09SQVRFRDsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5Qcm9ncmVzczwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IE5PREVfREVDT1JBVE9SX19QUk9HUkVTUyA9IERFQ09SQVRPUl9fUFJPR1JFU1M7CisKKwkvKioKKwkgKiBUaGUgbnVtYmVyIG9mIHN0cnVjdHVyYWwgZmVhdHVyZXMgb2YgdGhlICc8ZW0+Tm9kZSBEZWNvcmF0b3I8L2VtPicgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgTk9ERV9ERUNPUkFUT1JfRkVBVFVSRV9DT1VOVCA9IERFQ09SQVRPUl9GRUFUVVJFX0NPVU5UICsgMDsKKworCS8qKgorCSAqIFRoZSBtZXRhIG9iamVjdCBpZCBmb3IgdGhlICd7QGxpbmsgamF2YS5sYW5nLkNvbXBhcmFibGUgPGVtPkNvbXBhcmFibGU8L2VtPn0nIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSBqYXZhLmxhbmcuQ29tcGFyYWJsZQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLmltcGwuTW9kZWxQYWNrYWdlSW1wbCNnZXRDb21wYXJhYmxlKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJaW50IENPTVBBUkFCTEUgPSA2OworCisJLyoqCisJICogVGhlIG51bWJlciBvZiBzdHJ1Y3R1cmFsIGZlYXR1cmVzIG9mIHRoZSAnPGVtPkNvbXBhcmFibGU8L2VtPicgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgQ09NUEFSQUJMRV9GRUFUVVJFX0NPVU5UID0gMDsKKworCS8qKgorCSAqIFRoZSBtZXRhIG9iamVjdCBpZCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLmltcGwuU1RFTVRpbWVJbXBsIDxlbT5TVEVNIFRpbWU8L2VtPn0nIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuaW1wbC5TVEVNVGltZUltcGwKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5pbXBsLk1vZGVsUGFja2FnZUltcGwjZ2V0U1RFTVRpbWUoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlpbnQgU1RFTV9USU1FID0gNTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5UaW1lPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU1RFTV9USU1FX19USU1FID0gQ09NUEFSQUJMRV9GRUFUVVJFX0NPVU5UICsgMDsKKworCS8qKgorCSAqIFRoZSBudW1iZXIgb2Ygc3RydWN0dXJhbCBmZWF0dXJlcyBvZiB0aGUgJzxlbT5TVEVNIFRpbWU8L2VtPicgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU1RFTV9USU1FX0ZFQVRVUkVfQ09VTlQgPSBDT01QQVJBQkxFX0ZFQVRVUkVfQ09VTlQgKyAxOworCisJLyoqCisJICogVGhlIG1ldGEgb2JqZWN0IGlkIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuaW1wbC5JbnRlZ3JhdGlvbkRlY29yYXRvckltcGwgPGVtPkludGVncmF0aW9uIERlY29yYXRvcjwvZW0+fScgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5pbXBsLkludGVncmF0aW9uRGVjb3JhdG9ySW1wbAorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLmltcGwuTW9kZWxQYWNrYWdlSW1wbCNnZXRJbnRlZ3JhdGlvbkRlY29yYXRvcigpCisJICogQGdlbmVyYXRlZAorCSAqLworCWludCBJTlRFR1JBVElPTl9ERUNPUkFUT1IgPSA3OworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlVSSTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IElOVEVHUkFUSU9OX0RFQ09SQVRPUl9fVVJJID0gTk9ERV9ERUNPUkFUT1JfX1VSSTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5UeXBlIFVSSTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IElOVEVHUkFUSU9OX0RFQ09SQVRPUl9fVFlQRV9VUkkgPSBOT0RFX0RFQ09SQVRPUl9fVFlQRV9VUkk7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RHVibGluIENvcmU8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBJTlRFR1JBVElPTl9ERUNPUkFUT1JfX0RVQkxJTl9DT1JFID0gTk9ERV9ERUNPUkFUT1JfX0RVQkxJTl9DT1JFOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkxhYmVscyBUbyBVcGRhdGU8L2I+PC9lbT4nIHJlZmVyZW5jZSBsaXN0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IElOVEVHUkFUSU9OX0RFQ09SQVRPUl9fTEFCRUxTX1RPX1VQREFURSA9IE5PREVfREVDT1JBVE9SX19MQUJFTFNfVE9fVVBEQVRFOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkdyYXBoPC9iPjwvZW0+JyBjb250YWluZXIgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IElOVEVHUkFUSU9OX0RFQ09SQVRPUl9fR1JBUEggPSBOT0RFX0RFQ09SQVRPUl9fR1JBUEg7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RW5hYmxlZDwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IElOVEVHUkFUSU9OX0RFQ09SQVRPUl9fRU5BQkxFRCA9IE5PREVfREVDT1JBVE9SX19FTkFCTEVEOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkdyYXBoIERlY29yYXRlZDwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IElOVEVHUkFUSU9OX0RFQ09SQVRPUl9fR1JBUEhfREVDT1JBVEVEID0gTk9ERV9ERUNPUkFUT1JfX0dSQVBIX0RFQ09SQVRFRDsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5Qcm9ncmVzczwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IElOVEVHUkFUSU9OX0RFQ09SQVRPUl9fUFJPR1JFU1MgPSBOT0RFX0RFQ09SQVRPUl9fUFJPR1JFU1M7CisKKwkvKioKKwkgKiBUaGUgbnVtYmVyIG9mIHN0cnVjdHVyYWwgZmVhdHVyZXMgb2YgdGhlICc8ZW0+SW50ZWdyYXRpb24gRGVjb3JhdG9yPC9lbT4nIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IElOVEVHUkFUSU9OX0RFQ09SQVRPUl9GRUFUVVJFX0NPVU5UID0gTk9ERV9ERUNPUkFUT1JfRkVBVFVSRV9DT1VOVCArIDA7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuRGVjb3JhdG9yIDxlbT5EZWNvcmF0b3I8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICc8ZW0+RGVjb3JhdG9yPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLkRlY29yYXRvcgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQ2xhc3MgZ2V0RGVjb3JhdG9yKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIHJlZmVyZW5jZSBsaXN0ICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLkRlY29yYXRvciNnZXRMYWJlbHNUb1VwZGF0ZSA8ZW0+TGFiZWxzIFRvIFVwZGF0ZTwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIHJlZmVyZW5jZSBsaXN0ICc8ZW0+TGFiZWxzIFRvIFVwZGF0ZTwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5EZWNvcmF0b3IjZ2V0TGFiZWxzVG9VcGRhdGUoKQorCSAqIEBzZWUgI2dldERlY29yYXRvcigpCisJICogQGdlbmVyYXRlZAorCSAqLworCUVSZWZlcmVuY2UgZ2V0RGVjb3JhdG9yX0xhYmVsc1RvVXBkYXRlKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGNvbnRhaW5lciByZWZlcmVuY2UgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuRGVjb3JhdG9yI2dldEdyYXBoIDxlbT5HcmFwaDwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGNvbnRhaW5lciByZWZlcmVuY2UgJzxlbT5HcmFwaDwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5EZWNvcmF0b3IjZ2V0R3JhcGgoKQorCSAqIEBzZWUgI2dldERlY29yYXRvcigpCisJICogQGdlbmVyYXRlZAorCSAqLworCUVSZWZlcmVuY2UgZ2V0RGVjb3JhdG9yX0dyYXBoKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5EZWNvcmF0b3IjaXNFbmFibGVkIDxlbT5FbmFibGVkPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+RW5hYmxlZDwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5EZWNvcmF0b3IjaXNFbmFibGVkKCkKKwkgKiBAc2VlICNnZXREZWNvcmF0b3IoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQXR0cmlidXRlIGdldERlY29yYXRvcl9FbmFibGVkKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5EZWNvcmF0b3IjaXNHcmFwaERlY29yYXRlZCA8ZW0+R3JhcGggRGVjb3JhdGVkPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+R3JhcGggRGVjb3JhdGVkPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLkRlY29yYXRvciNpc0dyYXBoRGVjb3JhdGVkKCkKKwkgKiBAc2VlICNnZXREZWNvcmF0b3IoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQXR0cmlidXRlIGdldERlY29yYXRvcl9HcmFwaERlY29yYXRlZCgpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuRGVjb3JhdG9yI2dldFByb2dyZXNzIDxlbT5Qcm9ncmVzczwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPGVtPlByb2dyZXNzPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLkRlY29yYXRvciNnZXRQcm9ncmVzcygpCisJICogQHNlZSAjZ2V0RGVjb3JhdG9yKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUF0dHJpYnV0ZSBnZXREZWNvcmF0b3JfUHJvZ3Jlc3MoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5FZGdlRGVjb3JhdG9yIDxlbT5FZGdlIERlY29yYXRvcjwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJzxlbT5FZGdlIERlY29yYXRvcjwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5FZGdlRGVjb3JhdG9yCisJICogQGdlbmVyYXRlZAorCSAqLworCUVDbGFzcyBnZXRFZGdlRGVjb3JhdG9yKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuR3JhcGhEZWNvcmF0b3IgPGVtPkdyYXBoIERlY29yYXRvcjwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJzxlbT5HcmFwaCBEZWNvcmF0b3I8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuR3JhcGhEZWNvcmF0b3IKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUNsYXNzIGdldEdyYXBoRGVjb3JhdG9yKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuTW9kZWwgPGVtPk1vZGVsPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAnPGVtPk1vZGVsPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLk1vZGVsCisJICogQGdlbmVyYXRlZAorCSAqLworCUVDbGFzcyBnZXRNb2RlbCgpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSByZWZlcmVuY2UgbGlzdCAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5Nb2RlbCNnZXRNb2RlbHMgPGVtPk1vZGVsczwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIHJlZmVyZW5jZSBsaXN0ICc8ZW0+TW9kZWxzPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLk1vZGVsI2dldE1vZGVscygpCisJICogQHNlZSAjZ2V0TW9kZWwoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFUmVmZXJlbmNlIGdldE1vZGVsX01vZGVscygpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSByZWZlcmVuY2UgbGlzdCAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5Nb2RlbCNnZXRHcmFwaHMgPGVtPkdyYXBoczwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIHJlZmVyZW5jZSBsaXN0ICc8ZW0+R3JhcGhzPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLk1vZGVsI2dldEdyYXBocygpCisJICogQHNlZSAjZ2V0TW9kZWwoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFUmVmZXJlbmNlIGdldE1vZGVsX0dyYXBocygpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSByZWZlcmVuY2UgbGlzdCAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5Nb2RlbCNnZXRHcmFwaERlY29yYXRvcnMgPGVtPkdyYXBoIERlY29yYXRvcnM8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSByZWZlcmVuY2UgbGlzdCAnPGVtPkdyYXBoIERlY29yYXRvcnM8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuTW9kZWwjZ2V0R3JhcGhEZWNvcmF0b3JzKCkKKwkgKiBAc2VlICNnZXRNb2RlbCgpCisJICogQGdlbmVyYXRlZAorCSAqLworCUVSZWZlcmVuY2UgZ2V0TW9kZWxfR3JhcGhEZWNvcmF0b3JzKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIHJlZmVyZW5jZSBsaXN0ICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLk1vZGVsI2dldE5vZGVEZWNvcmF0b3JzIDxlbT5Ob2RlIERlY29yYXRvcnM8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSByZWZlcmVuY2UgbGlzdCAnPGVtPk5vZGUgRGVjb3JhdG9yczwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5Nb2RlbCNnZXROb2RlRGVjb3JhdG9ycygpCisJICogQHNlZSAjZ2V0TW9kZWwoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFUmVmZXJlbmNlIGdldE1vZGVsX05vZGVEZWNvcmF0b3JzKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIHJlZmVyZW5jZSBsaXN0ICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLk1vZGVsI2dldEVkZ2VEZWNvcmF0b3JzIDxlbT5FZGdlIERlY29yYXRvcnM8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSByZWZlcmVuY2UgbGlzdCAnPGVtPkVkZ2UgRGVjb3JhdG9yczwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5Nb2RlbCNnZXRFZGdlRGVjb3JhdG9ycygpCisJICogQHNlZSAjZ2V0TW9kZWwoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFUmVmZXJlbmNlIGdldE1vZGVsX0VkZ2VEZWNvcmF0b3JzKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuTm9kZURlY29yYXRvciA8ZW0+Tm9kZSBEZWNvcmF0b3I8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICc8ZW0+Tm9kZSBEZWNvcmF0b3I8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuTm9kZURlY29yYXRvcgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQ2xhc3MgZ2V0Tm9kZURlY29yYXRvcigpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLlNURU1UaW1lIDxlbT5TVEVNIFRpbWU8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICc8ZW0+U1RFTSBUaW1lPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLlNURU1UaW1lCisJICogQGdlbmVyYXRlZAorCSAqLworCUVDbGFzcyBnZXRTVEVNVGltZSgpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuU1RFTVRpbWUjZ2V0VGltZSA8ZW0+VGltZTwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPGVtPlRpbWU8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuU1RFTVRpbWUjZ2V0VGltZSgpCisJICogQHNlZSAjZ2V0U1RFTVRpbWUoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQXR0cmlidXRlIGdldFNURU1UaW1lX1RpbWUoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAne0BsaW5rIGphdmEubGFuZy5Db21wYXJhYmxlIDxlbT5Db21wYXJhYmxlPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAnPGVtPkNvbXBhcmFibGU8L2VtPicuCisJICogQHNlZSBqYXZhLmxhbmcuQ29tcGFyYWJsZQorCSAqIEBtb2RlbCBpbnN0YW5jZUNsYXNzPSJqYXZhLmxhbmcuQ29tcGFyYWJsZSIgdHlwZVBhcmFtZXRlcnM9IlQiCisJICogQGdlbmVyYXRlZAorCSAqLworCUVDbGFzcyBnZXRDb21wYXJhYmxlKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuSW50ZWdyYXRpb25EZWNvcmF0b3IgPGVtPkludGVncmF0aW9uIERlY29yYXRvcjwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJzxlbT5JbnRlZ3JhdGlvbiBEZWNvcmF0b3I8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuSW50ZWdyYXRpb25EZWNvcmF0b3IKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUNsYXNzIGdldEludGVncmF0aW9uRGVjb3JhdG9yKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBmYWN0b3J5IHRoYXQgY3JlYXRlcyB0aGUgaW5zdGFuY2VzIG9mIHRoZSBtb2RlbC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIGZhY3RvcnkgdGhhdCBjcmVhdGVzIHRoZSBpbnN0YW5jZXMgb2YgdGhlIG1vZGVsLgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlNb2RlbEZhY3RvcnkgZ2V0TW9kZWxGYWN0b3J5KCk7CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIERlZmluZXMgbGl0ZXJhbHMgZm9yIHRoZSBtZXRhIG9iamVjdHMgdGhhdCByZXByZXNlbnQKKwkgKiA8dWw+CisJICogICA8bGk+ZWFjaCBjbGFzcyw8L2xpPgorCSAqICAgPGxpPmVhY2ggZmVhdHVyZSBvZiBlYWNoIGNsYXNzLDwvbGk+CisJICogICA8bGk+ZWFjaCBlbnVtLDwvbGk+CisJICogICA8bGk+YW5kIGVhY2ggZGF0YSB0eXBlPC9saT4KKwkgKiA8L3VsPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlpbnRlcmZhY2UgTGl0ZXJhbHMgIHsKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuaW1wbC5EZWNvcmF0b3JJbXBsIDxlbT5EZWNvcmF0b3I8L2VtPn0nIGNsYXNzLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuaW1wbC5EZWNvcmF0b3JJbXBsCisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLmltcGwuTW9kZWxQYWNrYWdlSW1wbCNnZXREZWNvcmF0b3IoKQorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQ2xhc3MgREVDT1JBVE9SID0gZUlOU1RBTkNFLmdldERlY29yYXRvcigpOworCisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+TGFiZWxzIFRvIFVwZGF0ZTwvYj48L2VtPicgcmVmZXJlbmNlIGxpc3QgZmVhdHVyZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVSZWZlcmVuY2UgREVDT1JBVE9SX19MQUJFTFNfVE9fVVBEQVRFID0gZUlOU1RBTkNFLmdldERlY29yYXRvcl9MYWJlbHNUb1VwZGF0ZSgpOworCisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+R3JhcGg8L2I+PC9lbT4nIGNvbnRhaW5lciByZWZlcmVuY2UgZmVhdHVyZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVSZWZlcmVuY2UgREVDT1JBVE9SX19HUkFQSCA9IGVJTlNUQU5DRS5nZXREZWNvcmF0b3JfR3JhcGgoKTsKKworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPkVuYWJsZWQ8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUF0dHJpYnV0ZSBERUNPUkFUT1JfX0VOQUJMRUQgPSBlSU5TVEFOQ0UuZ2V0RGVjb3JhdG9yX0VuYWJsZWQoKTsKKworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPkdyYXBoIERlY29yYXRlZDwvYj48L2VtPicgYXR0cmlidXRlIGZlYXR1cmUuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQXR0cmlidXRlIERFQ09SQVRPUl9fR1JBUEhfREVDT1JBVEVEID0gZUlOU1RBTkNFLmdldERlY29yYXRvcl9HcmFwaERlY29yYXRlZCgpOworCisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+UHJvZ3Jlc3M8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUF0dHJpYnV0ZSBERUNPUkFUT1JfX1BST0dSRVNTID0gZUlOU1RBTkNFLmdldERlY29yYXRvcl9Qcm9ncmVzcygpOworCisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLmltcGwuRWRnZURlY29yYXRvckltcGwgPGVtPkVkZ2UgRGVjb3JhdG9yPC9lbT59JyBjbGFzcy4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLmltcGwuRWRnZURlY29yYXRvckltcGwKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuaW1wbC5Nb2RlbFBhY2thZ2VJbXBsI2dldEVkZ2VEZWNvcmF0b3IoKQorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQ2xhc3MgRURHRV9ERUNPUkFUT1IgPSBlSU5TVEFOQ0UuZ2V0RWRnZURlY29yYXRvcigpOworCisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLmltcGwuR3JhcGhEZWNvcmF0b3JJbXBsIDxlbT5HcmFwaCBEZWNvcmF0b3I8L2VtPn0nIGNsYXNzLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuaW1wbC5HcmFwaERlY29yYXRvckltcGwKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuaW1wbC5Nb2RlbFBhY2thZ2VJbXBsI2dldEdyYXBoRGVjb3JhdG9yKCkKKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUNsYXNzIEdSQVBIX0RFQ09SQVRPUiA9IGVJTlNUQU5DRS5nZXRHcmFwaERlY29yYXRvcigpOworCisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLmltcGwuTW9kZWxJbXBsIDxlbT5Nb2RlbDwvZW0+fScgY2xhc3MuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5pbXBsLk1vZGVsSW1wbAorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5pbXBsLk1vZGVsUGFja2FnZUltcGwjZ2V0TW9kZWwoKQorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQ2xhc3MgTU9ERUwgPSBlSU5TVEFOQ0UuZ2V0TW9kZWwoKTsKKworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPk1vZGVsczwvYj48L2VtPicgcmVmZXJlbmNlIGxpc3QgZmVhdHVyZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVSZWZlcmVuY2UgTU9ERUxfX01PREVMUyA9IGVJTlNUQU5DRS5nZXRNb2RlbF9Nb2RlbHMoKTsKKworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPkdyYXBoczwvYj48L2VtPicgcmVmZXJlbmNlIGxpc3QgZmVhdHVyZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVSZWZlcmVuY2UgTU9ERUxfX0dSQVBIUyA9IGVJTlNUQU5DRS5nZXRNb2RlbF9HcmFwaHMoKTsKKworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPkdyYXBoIERlY29yYXRvcnM8L2I+PC9lbT4nIHJlZmVyZW5jZSBsaXN0IGZlYXR1cmUuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFUmVmZXJlbmNlIE1PREVMX19HUkFQSF9ERUNPUkFUT1JTID0gZUlOU1RBTkNFLmdldE1vZGVsX0dyYXBoRGVjb3JhdG9ycygpOworCisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+Tm9kZSBEZWNvcmF0b3JzPC9iPjwvZW0+JyByZWZlcmVuY2UgbGlzdCBmZWF0dXJlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRVJlZmVyZW5jZSBNT0RFTF9fTk9ERV9ERUNPUkFUT1JTID0gZUlOU1RBTkNFLmdldE1vZGVsX05vZGVEZWNvcmF0b3JzKCk7CisKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5FZGdlIERlY29yYXRvcnM8L2I+PC9lbT4nIHJlZmVyZW5jZSBsaXN0IGZlYXR1cmUuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFUmVmZXJlbmNlIE1PREVMX19FREdFX0RFQ09SQVRPUlMgPSBlSU5TVEFOQ0UuZ2V0TW9kZWxfRWRnZURlY29yYXRvcnMoKTsKKworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5pbXBsLk5vZGVEZWNvcmF0b3JJbXBsIDxlbT5Ob2RlIERlY29yYXRvcjwvZW0+fScgY2xhc3MuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5pbXBsLk5vZGVEZWNvcmF0b3JJbXBsCisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLmltcGwuTW9kZWxQYWNrYWdlSW1wbCNnZXROb2RlRGVjb3JhdG9yKCkKKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUNsYXNzIE5PREVfREVDT1JBVE9SID0gZUlOU1RBTkNFLmdldE5vZGVEZWNvcmF0b3IoKTsKKworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5pbXBsLlNURU1UaW1lSW1wbCA8ZW0+U1RFTSBUaW1lPC9lbT59JyBjbGFzcy4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLmltcGwuU1RFTVRpbWVJbXBsCisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLmltcGwuTW9kZWxQYWNrYWdlSW1wbCNnZXRTVEVNVGltZSgpCisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVDbGFzcyBTVEVNX1RJTUUgPSBlSU5TVEFOQ0UuZ2V0U1RFTVRpbWUoKTsKKworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPlRpbWU8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUF0dHJpYnV0ZSBTVEVNX1RJTUVfX1RJTUUgPSBlSU5TVEFOQ0UuZ2V0U1RFTVRpbWVfVGltZSgpOworCisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICd7QGxpbmsgamF2YS5sYW5nLkNvbXBhcmFibGUgPGVtPkNvbXBhcmFibGU8L2VtPn0nIGNsYXNzLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQHNlZSBqYXZhLmxhbmcuQ29tcGFyYWJsZQorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5pbXBsLk1vZGVsUGFja2FnZUltcGwjZ2V0Q29tcGFyYWJsZSgpCisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVDbGFzcyBDT01QQVJBQkxFID0gZUlOU1RBTkNFLmdldENvbXBhcmFibGUoKTsKKworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5pbXBsLkludGVncmF0aW9uRGVjb3JhdG9ySW1wbCA8ZW0+SW50ZWdyYXRpb24gRGVjb3JhdG9yPC9lbT59JyBjbGFzcy4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLmltcGwuSW50ZWdyYXRpb25EZWNvcmF0b3JJbXBsCisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLmltcGwuTW9kZWxQYWNrYWdlSW1wbCNnZXRJbnRlZ3JhdGlvbkRlY29yYXRvcigpCisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVDbGFzcyBJTlRFR1JBVElPTl9ERUNPUkFUT1IgPSBlSU5TVEFOQ0UuZ2V0SW50ZWdyYXRpb25EZWNvcmF0b3IoKTsKKworCX0KKworfSAvL01vZGVsUGFja2FnZQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9tb2RlbC9Ob2RlRGVjb3JhdG9yLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL21vZGVsL05vZGVEZWNvcmF0b3IuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NzNhNmEyCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9tb2RlbC9Ob2RlRGVjb3JhdG9yLmphdmEKQEAgLTAsMCArMSwzMCBAQAorLy8gTm9kZURlY29yYXRvci5qYXZhCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbDsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKgorICogQW4gPGNvZGU+R3JhcGhEZWNvcmF0b3I8L2NvZGU+IGlzIGEge0BsaW5rIERlY29yYXRvcn0gdGhhdCBzcGVjaWZpY2FsbHkKKyAqIG1vZGlmaWVzIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguRWRnZX1zIGFuZCB0aGVpcgorICoge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5MYWJlbH1zLgorICogCisgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5Ob2RlCisgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5EeW5hbWljTGFiZWwKKyAqIEBzZWUgRWRnZURlY29yYXRvcgorICogQHNlZSBHcmFwaERlY29yYXRvcgorICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2VxdWVuY2VyLlNlcXVlbmNlcgorICogCisgKiBAbW9kZWwKKyAqLworcHVibGljIGludGVyZmFjZSBOb2RlRGVjb3JhdG9yIGV4dGVuZHMgRGVjb3JhdG9yIHsKKwkvLyBOb3RoaW5nIHlldAorfSAvLyBOb2RlRGVjb3JhdG9yCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL21vZGVsL1NURU1UaW1lLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL21vZGVsL1NURU1UaW1lLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjJjYWJmMQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvbW9kZWwvU1RFTVRpbWUuamF2YQpAQCAtMCwwICsxLDg4IEBACisvLyBTVEVNVGltZS5qYXZhCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbDsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqYXZhLmxhbmcuQ29tcGFyYWJsZTsKK2ltcG9ydCBqYXZhLnV0aWwuRGF0ZTsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0OworCisvKioKKyAqIEEgPGNvZGU+U1RFTVRpbWU8L2NvZGU+IGluc3RhbmNlIHJlcHJlc2VudHMgYSBwb2ludCBpbiB0aW1lIGluIGluIHRoZSBTVEVNCisgKiBzeXN0ZW0uCisgKiAKKyAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNlcXVlbmNlci5TZXF1ZW5jZXIKKyAqIAorICogQG1vZGVsCisgKi8KK3B1YmxpYyBpbnRlcmZhY2UgU1RFTVRpbWUgZXh0ZW5kcyBFT2JqZWN0LCBDb21wYXJhYmxlPFNURU1UaW1lPiB7CisKKwkvKioKKwkgKiBUaGlzIGlzIGFuIGVudW1lcmF0aW9uIG9mIGRpZmZlcmVudCBjb21tb24gdGltZSB1bml0cyB3aXRoIHRoZWlyIGR1cmF0aW9uCisJICogaW4gbWlsbGlzZWNvbmRzLgorCSAqLworCWVudW0gVW5pdHMgeworCQlNSUxMSVNFQ09ORCgxKSwKKwkJU0VDT05EKDEwMDApLAorCQlNSU5VVEUoNjAqMTAwMCksIAorCQlIT1VSKDYwKjYwKjEwMDApLCAKKwkJREFZKDI0KjYwKjYwKjEwMDApLAorCQlXRUVLKDcqMjQqNjAqNjAqMTAwMCksIAorCQlZRUFSKDUyKjcqMjQqNjAqNjAqMTAwMCk7CisJCXByaXZhdGUgaW50IGR1cmF0aW9uOworCisJCXByaXZhdGUgVW5pdHMoaW50IGR1cmF0aW9uKSB7CisJCQl0aGlzLmR1cmF0aW9uID0gZHVyYXRpb247CisJCX0KKwkJCisJCS8qKgorCQkgKiBAcmV0dXJuIHRoZSBudW1iZXIgb2YgbWlsbGlzZWNvbmRzIHRoYXQgaXMgZXF1aXZhbGVudCB0byB0aGlzIHRpbWUgdW5pdC4KKwkJICovCisJCXB1YmxpYyBsb25nIGdldE1pbGxpc2Vjb25kcygpIHsKKwkJCXJldHVybiBkdXJhdGlvbjsKKwkJfQorCX07IC8vIFVuaXRzCisKKwkvKioKKwkgKiBAcmV0dXJuIHRoZSB0aW1lCisJICogQG1vZGVsCisJICovCisJRGF0ZSBnZXRUaW1lKCk7CisKKwkvKioKKwkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuU1RFTVRpbWUjZ2V0VGltZSA8ZW0+VGltZTwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPlRpbWU8L2VtPicgYXR0cmlidXRlLgorCSAqIEBzZWUgI2dldFRpbWUoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwl2b2lkIHNldFRpbWUoRGF0ZSB2YWx1ZSk7CisKKwkvKioKKwkgKiBAcGFyYW0gdGltZUluY3JlbWVudAorCSAqICAgICAgICAgICAgdGhlIG51bWJlciBvZiBtaWxsaXNlY29uZHMgdGhlIG5ldyBTVEVNVGltZSBpcyBpbiB0aGUgZnV0dXJlLgorCSAqIEByZXR1cm4gYSBuZXcgU1RFTVRpbWUgdGhhdCBpcyBhIHNwZWNpZmllZCBudW1iZXIgb2YgbWlsbGlzZWNvbmRzIGZyb20KKwkgKiAgICAgICAgIHRoZSBjdXJyZW50IHRpbWUuCisJICogQG1vZGVsIHZvbGF0aWxlPSJ0cnVlIiB0cmFuc2llbnQ9InRydWUiIGNoYW5nZWFibGU9ImZhbHNlIgorCSAqLworCVNURU1UaW1lIGFkZEluY3JlbWVudChsb25nIHRpbWVJbmNyZW1lbnQpOworCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAbW9kZWwKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJYm9vbGVhbiB2YWx1ZUVxdWFscyhTVEVNVGltZSBvYmopOworCit9IC8vIFNURU1UaW1lCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL21vZGVsL2ltcGwvRGVjb3JhdG9ySW1wbC5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9tb2RlbC9pbXBsL0RlY29yYXRvckltcGwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYTExZTE3Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9tb2RlbC9pbXBsL0RlY29yYXRvckltcGwuamF2YQpAQCAtMCwwICsxLDQ4OCBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuaW1wbDsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuIAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyAKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0IAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwgCisgKiAKKyAqIENvbnRyaWJ1dG9yczogCisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgCitpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247CitpbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbkNoYWluOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5FTGlzdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5JbnRlcm5hbEVPYmplY3Q7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLmltcGwuRU5vdGlmaWNhdGlvbkltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnV0aWwuRU9iamVjdFdpdGhJbnZlcnNlUmVzb2x2aW5nRUxpc3Q7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnV0aWwuRWNvcmVVdGlsOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS51dGlsLkludGVybmFsRUxpc3Q7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLkNvcmVQbHVnaW47CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5pbXBsLklkZW50aWZpYWJsZUltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkR5bmFtaWNMYWJlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguR3JhcGg7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkdyYXBoUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguTGFiZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLkRlY29yYXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuTW9kZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLk1vZGVsUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuU1RFTVRpbWU7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPkRlY29yYXRvcjwvYj48L2VtPicuCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIDxwPgorICogVGhlIGZvbGxvd2luZyBmZWF0dXJlcyBhcmUgaW1wbGVtZW50ZWQ6CisgKiA8dWw+CisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLmltcGwuRGVjb3JhdG9ySW1wbCNnZXRMYWJlbHNUb1VwZGF0ZSA8ZW0+TGFiZWxzIFRvIFVwZGF0ZTwvZW0+fTwvbGk+CisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLmltcGwuRGVjb3JhdG9ySW1wbCNnZXRHcmFwaCA8ZW0+R3JhcGg8L2VtPn08L2xpPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5pbXBsLkRlY29yYXRvckltcGwjaXNFbmFibGVkIDxlbT5FbmFibGVkPC9lbT59PC9saT4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuaW1wbC5EZWNvcmF0b3JJbXBsI2lzR3JhcGhEZWNvcmF0ZWQgPGVtPkdyYXBoIERlY29yYXRlZDwvZW0+fTwvbGk+CisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLmltcGwuRGVjb3JhdG9ySW1wbCNnZXRQcm9ncmVzcyA8ZW0+UHJvZ3Jlc3M8L2VtPn08L2xpPgorICogPC91bD4KKyAqIDwvcD4KKyAqCisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBEZWNvcmF0b3JJbXBsIGV4dGVuZHMgSWRlbnRpZmlhYmxlSW1wbCBpbXBsZW1lbnRzIERlY29yYXRvciB7CisJLyoqCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0TGFiZWxzVG9VcGRhdGUoKSA8ZW0+TGFiZWxzIFRvIFVwZGF0ZTwvZW0+fScgcmVmZXJlbmNlIGxpc3QuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZ2V0TGFiZWxzVG9VcGRhdGUoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBFTGlzdDxEeW5hbWljTGFiZWw+IGxhYmVsc1RvVXBkYXRlOworCisJLyoqCisJICogVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2lzRW5hYmxlZCgpIDxlbT5FbmFibGVkPC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNpc0VuYWJsZWQoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgYm9vbGVhbiBFTkFCTEVEX0VERUZBVUxUID0gdHJ1ZTsKKwkvKioKKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNpc0VuYWJsZWQoKSA8ZW0+RW5hYmxlZDwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjaXNFbmFibGVkKCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgYm9vbGVhbiBlbmFibGVkID0gRU5BQkxFRF9FREVGQVVMVDsKKwkvKioKKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjaXNHcmFwaERlY29yYXRlZCgpIDxlbT5HcmFwaCBEZWNvcmF0ZWQ8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI2lzR3JhcGhEZWNvcmF0ZWQoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgYm9vbGVhbiBHUkFQSF9ERUNPUkFURURfRURFRkFVTFQgPSBmYWxzZTsKKwkvKioKKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNpc0dyYXBoRGVjb3JhdGVkKCkgPGVtPkdyYXBoIERlY29yYXRlZDwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjaXNHcmFwaERlY29yYXRlZCgpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIGJvb2xlYW4gZ3JhcGhEZWNvcmF0ZWQgPSBHUkFQSF9ERUNPUkFURURfRURFRkFVTFQ7CisKKwkKKwkvKioKKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0UHJvZ3Jlc3MoKSA8ZW0+UHJvZ3Jlc3M8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI2dldFByb2dyZXNzKCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIGRvdWJsZSBQUk9HUkVTU19FREVGQVVMVCA9IDAuMDsKKworCS8qKgorCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldFByb2dyZXNzKCkgPGVtPlByb2dyZXNzPC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNnZXRQcm9ncmVzcygpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIGRvdWJsZSBwcm9ncmVzcyA9IFBST0dSRVNTX0VERUZBVUxUOworCisJCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBEZWNvcmF0b3JJbXBsKCkgeworCQlzdXBlcigpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgRUNsYXNzIGVTdGF0aWNDbGFzcygpIHsKKwkJcmV0dXJuIE1vZGVsUGFja2FnZS5MaXRlcmFscy5ERUNPUkFUT1I7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFTGlzdDxEeW5hbWljTGFiZWw+IGdldExhYmVsc1RvVXBkYXRlKCkgeworCQlpZiAobGFiZWxzVG9VcGRhdGUgPT0gbnVsbCkgeworCQkJbGFiZWxzVG9VcGRhdGUgPSBuZXcgRU9iamVjdFdpdGhJbnZlcnNlUmVzb2x2aW5nRUxpc3Q8RHluYW1pY0xhYmVsPihEeW5hbWljTGFiZWwuY2xhc3MsIHRoaXMsIE1vZGVsUGFja2FnZS5ERUNPUkFUT1JfX0xBQkVMU19UT19VUERBVEUsIEdyYXBoUGFja2FnZS5EWU5BTUlDX0xBQkVMX19ERUNPUkFUT1IpOworCQl9CisJCXJldHVybiBsYWJlbHNUb1VwZGF0ZTsKKwl9CisKKwkKKwkKKwkvKioKKwkgKiBQcmVwYXJlIHRoZSBkZWNvcmF0b3IuIEEgc3ViY2xhc3MgbmVlZHMgdG8gb3ZlcnJpZGUgdGhpcyBtZXRob2QgaWYKKwkgKiBwcmUtcHJvY2Vzc2luZyBzdGVwcyBhcmUgbmVjZXNzYXJ5IGJlZm9yZSB0aGUgZGVjb3JhdG9yIGlzIGJlaW5nIHVzZWQKKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCXB1YmxpYyB2b2lkIHByZXBhcmUoTW9kZWwgbW9kZWwsIFNURU1UaW1lIHRpbWUpIHsKKwkJLy8gTm90aGluZyB0byBkbworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBHcmFwaCBnZXRHcmFwaCgpIHsKKwkJaWYgKGVDb250YWluZXJGZWF0dXJlSUQoKSAhPSBNb2RlbFBhY2thZ2UuREVDT1JBVE9SX19HUkFQSCkgcmV0dXJuIG51bGw7CisJCXJldHVybiAoR3JhcGgpZUNvbnRhaW5lcigpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBOb3RpZmljYXRpb25DaGFpbiBiYXNpY1NldEdyYXBoKEdyYXBoIG5ld0dyYXBoLCBOb3RpZmljYXRpb25DaGFpbiBtc2dzKSB7CisJCW1zZ3MgPSBlQmFzaWNTZXRDb250YWluZXIoKEludGVybmFsRU9iamVjdCluZXdHcmFwaCwgTW9kZWxQYWNrYWdlLkRFQ09SQVRPUl9fR1JBUEgsIG1zZ3MpOworCQlyZXR1cm4gbXNnczsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRHcmFwaChHcmFwaCBuZXdHcmFwaCkgeworCQlpZiAobmV3R3JhcGggIT0gZUludGVybmFsQ29udGFpbmVyKCkgfHwgKGVDb250YWluZXJGZWF0dXJlSUQoKSAhPSBNb2RlbFBhY2thZ2UuREVDT1JBVE9SX19HUkFQSCAmJiBuZXdHcmFwaCAhPSBudWxsKSkgeworCQkJaWYgKEVjb3JlVXRpbC5pc0FuY2VzdG9yKHRoaXMsIG5ld0dyYXBoKSkKKwkJCQl0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJSZWN1cnNpdmUgY29udGFpbm1lbnQgbm90IGFsbG93ZWQgZm9yICIgKyB0b1N0cmluZygpKTsgLy8kTk9OLU5MUy0xJAorCQkJTm90aWZpY2F0aW9uQ2hhaW4gbXNncyA9IG51bGw7CisJCQlpZiAoZUludGVybmFsQ29udGFpbmVyKCkgIT0gbnVsbCkKKwkJCQltc2dzID0gZUJhc2ljUmVtb3ZlRnJvbUNvbnRhaW5lcihtc2dzKTsKKwkJCWlmIChuZXdHcmFwaCAhPSBudWxsKQorCQkJCW1zZ3MgPSAoKEludGVybmFsRU9iamVjdCluZXdHcmFwaCkuZUludmVyc2VBZGQodGhpcywgR3JhcGhQYWNrYWdlLkdSQVBIX19ERUNPUkFUT1JTLCBHcmFwaC5jbGFzcywgbXNncyk7CisJCQltc2dzID0gYmFzaWNTZXRHcmFwaChuZXdHcmFwaCwgbXNncyk7CisJCQlpZiAobXNncyAhPSBudWxsKSBtc2dzLmRpc3BhdGNoKCk7CisJCX0KKwkJZWxzZSBpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpCisJCQllTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBNb2RlbFBhY2thZ2UuREVDT1JBVE9SX19HUkFQSCwgbmV3R3JhcGgsIG5ld0dyYXBoKSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIGJvb2xlYW4gaXNFbmFibGVkKCkgeworCQlyZXR1cm4gZW5hYmxlZDsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRFbmFibGVkKGJvb2xlYW4gbmV3RW5hYmxlZCkgeworCQlib29sZWFuIG9sZEVuYWJsZWQgPSBlbmFibGVkOworCQllbmFibGVkID0gbmV3RW5hYmxlZDsKKwkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQorCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgTW9kZWxQYWNrYWdlLkRFQ09SQVRPUl9fRU5BQkxFRCwgb2xkRW5hYmxlZCwgZW5hYmxlZCkpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBib29sZWFuIGlzR3JhcGhEZWNvcmF0ZWQoKSB7CisJCXJldHVybiBncmFwaERlY29yYXRlZDsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRHcmFwaERlY29yYXRlZChib29sZWFuIG5ld0dyYXBoRGVjb3JhdGVkKSB7CisJCWJvb2xlYW4gb2xkR3JhcGhEZWNvcmF0ZWQgPSBncmFwaERlY29yYXRlZDsKKwkJZ3JhcGhEZWNvcmF0ZWQgPSBuZXdHcmFwaERlY29yYXRlZDsKKwkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQorCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgTW9kZWxQYWNrYWdlLkRFQ09SQVRPUl9fR1JBUEhfREVDT1JBVEVELCBvbGRHcmFwaERlY29yYXRlZCwgZ3JhcGhEZWNvcmF0ZWQpKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgZG91YmxlIGdldFByb2dyZXNzKCkgeworCQlyZXR1cm4gcHJvZ3Jlc3M7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgc2V0UHJvZ3Jlc3MoZG91YmxlIG5ld1Byb2dyZXNzKSB7CisJCWRvdWJsZSBvbGRQcm9ncmVzcyA9IHByb2dyZXNzOworCQlwcm9ncmVzcyA9IG5ld1Byb2dyZXNzOworCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpCisJCQllTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBNb2RlbFBhY2thZ2UuREVDT1JBVE9SX19QUk9HUkVTUywgb2xkUHJvZ3Jlc3MsIHByb2dyZXNzKSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCXB1YmxpYyBib29sZWFuIGRlY29yYXRlR3JhcGgoU1RFTVRpbWUgdGltZSkgeworCQlDb3JlUGx1Z2luLmxvZ0Vycm9yKCJkZWNvcmF0ZUdyYXBoKCkgbm90IGltcGxlbWVudGVkIGluIFwiIisKKwkJCQlnZXREdWJsaW5Db3JlKCkuZ2V0VGl0bGUoKQorCQkJCSsgIlwiIG9mIHR5cGUgXCIiICsgdGhpcy5nZXRDbGFzcygpLmdldENhbm9uaWNhbE5hbWUoKQorCQkJCSsgIlwiIiwgbnVsbCk7CisJCXRocm93IG5ldyBVbnN1cHBvcnRlZE9wZXJhdGlvbkV4Y2VwdGlvbigpOworCX0KKworCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgdXBkYXRlTGFiZWxzKFNURU1UaW1lIHRpbWUsIGxvbmcgdGltZXJQZXJpb2QsIGludCBjeWNsZSkgeworCQkvLyBUT0RPOiBpbXBsZW1lbnQgdGhpcyBtZXRob2QKKwkJLy8gRW5zdXJlIHRoYXQgeW91IHJlbW92ZSBAZ2VuZXJhdGVkIG9yIG1hcmsgaXQgQGdlbmVyYXRlZCBOT1QKKwkJdGhyb3cgbmV3IFVuc3VwcG9ydGVkT3BlcmF0aW9uRXhjZXB0aW9uKCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogCisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlwdWJsaWMgdm9pZCByZXNldExhYmVscygpIHsKKwkJc2V0RW5hYmxlZChFTkFCTEVEX0VERUZBVUxUKTsKKwkJc2V0R3JhcGhEZWNvcmF0ZWQoR1JBUEhfREVDT1JBVEVEX0VERUZBVUxUKTsKKwkJZm9yIChmaW5hbCBJdGVyYXRvcjxEeW5hbWljTGFiZWw+IGxhYmVsSXRlciA9IGdldExhYmVsc1RvVXBkYXRlKCkKKwkJCQkuaXRlcmF0b3IoKTsgbGFiZWxJdGVyLmhhc05leHQoKTspIHsKKwkJCWZpbmFsIER5bmFtaWNMYWJlbCBkeW5hbWljTGFiZWwgPSBsYWJlbEl0ZXIubmV4dCgpOworCQkJZHluYW1pY0xhYmVsLnJlc2V0KCk7CisJCX0KKwl9IC8vIHJlc2V0TGFiZWxzCisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAU3VwcHJlc3NXYXJuaW5ncygidW5jaGVja2VkIikKKwkJQE92ZXJyaWRlCisJcHVibGljIE5vdGlmaWNhdGlvbkNoYWluIGVJbnZlcnNlQWRkKEludGVybmFsRU9iamVjdCBvdGhlckVuZCwgaW50IGZlYXR1cmVJRCwgTm90aWZpY2F0aW9uQ2hhaW4gbXNncykgeworCQlzd2l0Y2ggKGZlYXR1cmVJRCkgeworCQkJY2FzZSBNb2RlbFBhY2thZ2UuREVDT1JBVE9SX19MQUJFTFNfVE9fVVBEQVRFOgorCQkJCXJldHVybiAoKEludGVybmFsRUxpc3Q8SW50ZXJuYWxFT2JqZWN0PikoSW50ZXJuYWxFTGlzdDw/PilnZXRMYWJlbHNUb1VwZGF0ZSgpKS5iYXNpY0FkZChvdGhlckVuZCwgbXNncyk7CisJCQljYXNlIE1vZGVsUGFja2FnZS5ERUNPUkFUT1JfX0dSQVBIOgorCQkJCWlmIChlSW50ZXJuYWxDb250YWluZXIoKSAhPSBudWxsKQorCQkJCQltc2dzID0gZUJhc2ljUmVtb3ZlRnJvbUNvbnRhaW5lcihtc2dzKTsKKwkJCQlyZXR1cm4gYmFzaWNTZXRHcmFwaCgoR3JhcGgpb3RoZXJFbmQsIG1zZ3MpOworCQl9CisJCXJldHVybiBzdXBlci5lSW52ZXJzZUFkZChvdGhlckVuZCwgZmVhdHVyZUlELCBtc2dzKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgTm90aWZpY2F0aW9uQ2hhaW4gZUludmVyc2VSZW1vdmUoSW50ZXJuYWxFT2JqZWN0IG90aGVyRW5kLCBpbnQgZmVhdHVyZUlELCBOb3RpZmljYXRpb25DaGFpbiBtc2dzKSB7CisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7CisJCQljYXNlIE1vZGVsUGFja2FnZS5ERUNPUkFUT1JfX0xBQkVMU19UT19VUERBVEU6CisJCQkJcmV0dXJuICgoSW50ZXJuYWxFTGlzdDw/PilnZXRMYWJlbHNUb1VwZGF0ZSgpKS5iYXNpY1JlbW92ZShvdGhlckVuZCwgbXNncyk7CisJCQljYXNlIE1vZGVsUGFja2FnZS5ERUNPUkFUT1JfX0dSQVBIOgorCQkJCXJldHVybiBiYXNpY1NldEdyYXBoKG51bGwsIG1zZ3MpOworCQl9CisJCXJldHVybiBzdXBlci5lSW52ZXJzZVJlbW92ZShvdGhlckVuZCwgZmVhdHVyZUlELCBtc2dzKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgTm90aWZpY2F0aW9uQ2hhaW4gZUJhc2ljUmVtb3ZlRnJvbUNvbnRhaW5lckZlYXR1cmUoTm90aWZpY2F0aW9uQ2hhaW4gbXNncykgeworCQlzd2l0Y2ggKGVDb250YWluZXJGZWF0dXJlSUQoKSkgeworCQkJY2FzZSBNb2RlbFBhY2thZ2UuREVDT1JBVE9SX19HUkFQSDoKKwkJCQlyZXR1cm4gZUludGVybmFsQ29udGFpbmVyKCkuZUludmVyc2VSZW1vdmUodGhpcywgR3JhcGhQYWNrYWdlLkdSQVBIX19ERUNPUkFUT1JTLCBHcmFwaC5jbGFzcywgbXNncyk7CisJCX0KKwkJcmV0dXJuIHN1cGVyLmVCYXNpY1JlbW92ZUZyb21Db250YWluZXJGZWF0dXJlKG1zZ3MpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgT2JqZWN0IGVHZXQoaW50IGZlYXR1cmVJRCwgYm9vbGVhbiByZXNvbHZlLCBib29sZWFuIGNvcmVUeXBlKSB7CisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7CisJCQljYXNlIE1vZGVsUGFja2FnZS5ERUNPUkFUT1JfX0xBQkVMU19UT19VUERBVEU6CisJCQkJcmV0dXJuIGdldExhYmVsc1RvVXBkYXRlKCk7CisJCQljYXNlIE1vZGVsUGFja2FnZS5ERUNPUkFUT1JfX0dSQVBIOgorCQkJCXJldHVybiBnZXRHcmFwaCgpOworCQkJY2FzZSBNb2RlbFBhY2thZ2UuREVDT1JBVE9SX19FTkFCTEVEOgorCQkJCXJldHVybiBpc0VuYWJsZWQoKTsKKwkJCWNhc2UgTW9kZWxQYWNrYWdlLkRFQ09SQVRPUl9fR1JBUEhfREVDT1JBVEVEOgorCQkJCXJldHVybiBpc0dyYXBoRGVjb3JhdGVkKCk7CisJCQljYXNlIE1vZGVsUGFja2FnZS5ERUNPUkFUT1JfX1BST0dSRVNTOgorCQkJCXJldHVybiBnZXRQcm9ncmVzcygpOworCQl9CisJCXJldHVybiBzdXBlci5lR2V0KGZlYXR1cmVJRCwgcmVzb2x2ZSwgY29yZVR5cGUpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAU3VwcHJlc3NXYXJuaW5ncygidW5jaGVja2VkIikKKwkJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgZVNldChpbnQgZmVhdHVyZUlELCBPYmplY3QgbmV3VmFsdWUpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJCWNhc2UgTW9kZWxQYWNrYWdlLkRFQ09SQVRPUl9fTEFCRUxTX1RPX1VQREFURToKKwkJCQlnZXRMYWJlbHNUb1VwZGF0ZSgpLmNsZWFyKCk7CisJCQkJZ2V0TGFiZWxzVG9VcGRhdGUoKS5hZGRBbGwoKENvbGxlY3Rpb248PyBleHRlbmRzIER5bmFtaWNMYWJlbD4pbmV3VmFsdWUpOworCQkJCXJldHVybjsKKwkJCWNhc2UgTW9kZWxQYWNrYWdlLkRFQ09SQVRPUl9fR1JBUEg6CisJCQkJc2V0R3JhcGgoKEdyYXBoKW5ld1ZhbHVlKTsKKwkJCQlyZXR1cm47CisJCQljYXNlIE1vZGVsUGFja2FnZS5ERUNPUkFUT1JfX0VOQUJMRUQ6CisJCQkJc2V0RW5hYmxlZCgoQm9vbGVhbiluZXdWYWx1ZSk7CisJCQkJcmV0dXJuOworCQkJY2FzZSBNb2RlbFBhY2thZ2UuREVDT1JBVE9SX19HUkFQSF9ERUNPUkFURUQ6CisJCQkJc2V0R3JhcGhEZWNvcmF0ZWQoKEJvb2xlYW4pbmV3VmFsdWUpOworCQkJCXJldHVybjsKKwkJCWNhc2UgTW9kZWxQYWNrYWdlLkRFQ09SQVRPUl9fUFJPR1JFU1M6CisJCQkJc2V0UHJvZ3Jlc3MoKERvdWJsZSluZXdWYWx1ZSk7CisJCQkJcmV0dXJuOworCQl9CisJCXN1cGVyLmVTZXQoZmVhdHVyZUlELCBuZXdWYWx1ZSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGVVbnNldChpbnQgZmVhdHVyZUlEKSB7CisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7CisJCQljYXNlIE1vZGVsUGFja2FnZS5ERUNPUkFUT1JfX0xBQkVMU19UT19VUERBVEU6CisJCQkJZ2V0TGFiZWxzVG9VcGRhdGUoKS5jbGVhcigpOworCQkJCXJldHVybjsKKwkJCWNhc2UgTW9kZWxQYWNrYWdlLkRFQ09SQVRPUl9fR1JBUEg6CisJCQkJc2V0R3JhcGgoKEdyYXBoKW51bGwpOworCQkJCXJldHVybjsKKwkJCWNhc2UgTW9kZWxQYWNrYWdlLkRFQ09SQVRPUl9fRU5BQkxFRDoKKwkJCQlzZXRFbmFibGVkKEVOQUJMRURfRURFRkFVTFQpOworCQkJCXJldHVybjsKKwkJCWNhc2UgTW9kZWxQYWNrYWdlLkRFQ09SQVRPUl9fR1JBUEhfREVDT1JBVEVEOgorCQkJCXNldEdyYXBoRGVjb3JhdGVkKEdSQVBIX0RFQ09SQVRFRF9FREVGQVVMVCk7CisJCQkJcmV0dXJuOworCQkJY2FzZSBNb2RlbFBhY2thZ2UuREVDT1JBVE9SX19QUk9HUkVTUzoKKwkJCQlzZXRQcm9ncmVzcyhQUk9HUkVTU19FREVGQVVMVCk7CisJCQkJcmV0dXJuOworCQl9CisJCXN1cGVyLmVVbnNldChmZWF0dXJlSUQpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgYm9vbGVhbiBlSXNTZXQoaW50IGZlYXR1cmVJRCkgeworCQlzd2l0Y2ggKGZlYXR1cmVJRCkgeworCQkJY2FzZSBNb2RlbFBhY2thZ2UuREVDT1JBVE9SX19MQUJFTFNfVE9fVVBEQVRFOgorCQkJCXJldHVybiBsYWJlbHNUb1VwZGF0ZSAhPSBudWxsICYmICFsYWJlbHNUb1VwZGF0ZS5pc0VtcHR5KCk7CisJCQljYXNlIE1vZGVsUGFja2FnZS5ERUNPUkFUT1JfX0dSQVBIOgorCQkJCXJldHVybiBnZXRHcmFwaCgpICE9IG51bGw7CisJCQljYXNlIE1vZGVsUGFja2FnZS5ERUNPUkFUT1JfX0VOQUJMRUQ6CisJCQkJcmV0dXJuIGVuYWJsZWQgIT0gRU5BQkxFRF9FREVGQVVMVDsKKwkJCWNhc2UgTW9kZWxQYWNrYWdlLkRFQ09SQVRPUl9fR1JBUEhfREVDT1JBVEVEOgorCQkJCXJldHVybiBncmFwaERlY29yYXRlZCAhPSBHUkFQSF9ERUNPUkFURURfRURFRkFVTFQ7CisJCQljYXNlIE1vZGVsUGFja2FnZS5ERUNPUkFUT1JfX1BST0dSRVNTOgorCQkJCXJldHVybiBwcm9ncmVzcyAhPSBQUk9HUkVTU19FREVGQVVMVDsKKwkJfQorCQlyZXR1cm4gc3VwZXIuZUlzU2V0KGZlYXR1cmVJRCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIFN0cmluZyB0b1N0cmluZygpIHsKKwkJaWYgKGVJc1Byb3h5KCkpIHJldHVybiBzdXBlci50b1N0cmluZygpOworCisJCVN0cmluZ0J1ZmZlciByZXN1bHQgPSBuZXcgU3RyaW5nQnVmZmVyKHN1cGVyLnRvU3RyaW5nKCkpOworCQlyZXN1bHQuYXBwZW5kKCIgKGVuYWJsZWQ6ICIpOyAvLyROT04tTkxTLTEkCisJCXJlc3VsdC5hcHBlbmQoZW5hYmxlZCk7CisJCXJlc3VsdC5hcHBlbmQoIiwgZ3JhcGhEZWNvcmF0ZWQ6ICIpOyAvLyROT04tTkxTLTEkCisJCXJlc3VsdC5hcHBlbmQoZ3JhcGhEZWNvcmF0ZWQpOworCQlyZXN1bHQuYXBwZW5kKCIsIHByb2dyZXNzOiAiKTsgLy8kTk9OLU5MUy0xJAorCQlyZXN1bHQuYXBwZW5kKHByb2dyZXNzKTsKKwkJcmVzdWx0LmFwcGVuZCgnKScpOworCQlyZXR1cm4gcmVzdWx0LnRvU3RyaW5nKCk7CisJfQorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvbW1vbi5pbXBsLklkZW50aWZpYWJsZUltcGwjc2FuZSgpCisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgYm9vbGVhbiBzYW5lKCkgeworCQlib29sZWFuIHJldFZhbHVlID0gc3VwZXIuc2FuZSgpOworCQlmb3IgKGZpbmFsIEl0ZXJhdG9yPER5bmFtaWNMYWJlbD4gbGFiZWxJdGVyID0gZ2V0TGFiZWxzVG9VcGRhdGUoKS5pdGVyYXRvcigpOyBsYWJlbEl0ZXIKKwkJCQkuaGFzTmV4dCgpCisJCQkJJiYgcmV0VmFsdWU7KSB7CisJCQlmaW5hbCBMYWJlbCBsYWJlbCA9IGxhYmVsSXRlci5uZXh0KCk7CisKKwkJCXJldFZhbHVlID0gcmV0VmFsdWUgJiYgbGFiZWwuc2FuZSgpOworCQkJYXNzZXJ0IHJldFZhbHVlOworCQl9CisKKwkJcmV0dXJuIHJldFZhbHVlOworCX0gLy8gc2FuZQorfSAvLyBEZWNvcmF0b3JJbXBsCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL21vZGVsL2ltcGwvRWRnZURlY29yYXRvckltcGwuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvbW9kZWwvaW1wbC9FZGdlRGVjb3JhdG9ySW1wbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVhY2E1OGYKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL21vZGVsL2ltcGwvRWRnZURlY29yYXRvckltcGwuamF2YQpAQCAtMCwwICsxLDU1IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5pbXBsOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAKKyAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4gCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIAorICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wIAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQgCisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbCAKKyAqIAorICogQ29udHJpYnV0b3JzOiAKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5FZGdlRGVjb3JhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5Nb2RlbFBhY2thZ2U7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPkVkZ2UgRGVjb3JhdG9yPC9iPjwvZW0+Jy4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogPHA+CisgKiA8L3A+CisgKgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgRWRnZURlY29yYXRvckltcGwgZXh0ZW5kcyBEZWNvcmF0b3JJbXBsIGltcGxlbWVudHMgRWRnZURlY29yYXRvciB7CisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBFZGdlRGVjb3JhdG9ySW1wbCgpIHsKKwkJc3VwZXIoKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIEVDbGFzcyBlU3RhdGljQ2xhc3MoKSB7CisJCXJldHVybiBNb2RlbFBhY2thZ2UuTGl0ZXJhbHMuRURHRV9ERUNPUkFUT1I7CisJfQorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLm1vZGVsLmltcGwuRGVjb3JhdG9ySW1wbCNzYW5lKCkKKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBib29sZWFuIHNhbmUoKSB7CisJCWJvb2xlYW4gcmV0VmFsdWUgPSBzdXBlci5zYW5lKCk7CisKKwkJcmV0dXJuIHJldFZhbHVlOworCX0gLy8gc2FuZQorCit9IC8vIEVkZ2VEZWNvcmF0b3JJbXBsCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL21vZGVsL2ltcGwvR3JhcGhEZWNvcmF0b3JJbXBsLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL21vZGVsL2ltcGwvR3JhcGhEZWNvcmF0b3JJbXBsLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGZiMGZlZgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvbW9kZWwvaW1wbC9HcmFwaERlY29yYXRvckltcGwuamF2YQpAQCAtMCwwICsxLDU0IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5pbXBsOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAKKyAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4gCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIAorICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wIAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQgCisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbCAKKyAqIAorICogQ29udHJpYnV0b3JzOiAKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5HcmFwaERlY29yYXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuTW9kZWxQYWNrYWdlOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IEFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5HcmFwaCBEZWNvcmF0b3I8L2I+PC9lbT4nLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiA8cD4KKyAqIDwvcD4KKyAqCisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBHcmFwaERlY29yYXRvckltcGwgZXh0ZW5kcyBEZWNvcmF0b3JJbXBsIGltcGxlbWVudHMgR3JhcGhEZWNvcmF0b3IgeworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgR3JhcGhEZWNvcmF0b3JJbXBsKCkgeworCQlzdXBlcigpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgRUNsYXNzIGVTdGF0aWNDbGFzcygpIHsKKwkJcmV0dXJuIE1vZGVsUGFja2FnZS5MaXRlcmFscy5HUkFQSF9ERUNPUkFUT1I7CisJfQorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLm1vZGVsLmltcGwuRGVjb3JhdG9ySW1wbCNzYW5lKCkKKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBib29sZWFuIHNhbmUoKSB7CisJCWJvb2xlYW4gcmV0VmFsdWUgPSBzdXBlci5zYW5lKCk7CisKKwkJcmV0dXJuIHJldFZhbHVlOworCX0gLy8gc2FuZQorfSAvLyBHcmFwaERlY29yYXRvckltcGwKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvbW9kZWwvaW1wbC9JbnRlZ3JhdGlvbkRlY29yYXRvckltcGwuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvbW9kZWwvaW1wbC9JbnRlZ3JhdGlvbkRlY29yYXRvckltcGwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMmIzY2UzCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9tb2RlbC9pbXBsL0ludGVncmF0aW9uRGVjb3JhdG9ySW1wbC5qYXZhCkBAIC0wLDAgKzEsOTMgQEAKKy8qKg0KKyAqIDxjb3B5cmlnaHQ+DQorICogPC9jb3B5cmlnaHQ+DQorICoNCisgKiAkSWQkDQorICovDQorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuaW1wbDsNCisNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLkVMaXN0Ow0KKw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOw0KKw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguRHluYW1pY0xhYmVsOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguTGFiZWxWYWx1ZTsNCisNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLkludGVncmF0aW9uRGVjb3JhdG9yOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuTW9kZWxQYWNrYWdlOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuU1RFTVRpbWU7DQorDQorLyoqDQorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisgKiBBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+SW50ZWdyYXRpb24gRGVjb3JhdG9yPC9iPjwvZW0+Jy4NCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisgKiA8cD4NCisgKiA8L3A+DQorICoNCisgKiBAZ2VuZXJhdGVkDQorICovDQorcHVibGljIGFic3RyYWN0IGNsYXNzIEludGVncmF0aW9uRGVjb3JhdG9ySW1wbCBleHRlbmRzIE5vZGVEZWNvcmF0b3JJbXBsIGltcGxlbWVudHMgSW50ZWdyYXRpb25EZWNvcmF0b3Igew0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCBJbnRlZ3JhdGlvbkRlY29yYXRvckltcGwoKSB7DQorCQlzdXBlcigpOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJQE92ZXJyaWRlDQorCXByb3RlY3RlZCBFQ2xhc3MgZVN0YXRpY0NsYXNzKCkgew0KKwkJcmV0dXJuIE1vZGVsUGFja2FnZS5MaXRlcmFscy5JTlRFR1JBVElPTl9ERUNPUkFUT1I7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgdm9pZCBhcHBseUV4dGVybmFsRGVsdGFzKFNURU1UaW1lIHRpbWUsIGxvbmcgdGltZURlbHRhLCBFTGlzdDxEeW5hbWljTGFiZWw+IGxhYmVscykgew0KKwkJLy8gVE9ETzogaW1wbGVtZW50IHRoaXMgbWV0aG9kDQorCQkvLyBFbnN1cmUgdGhhdCB5b3UgcmVtb3ZlIEBnZW5lcmF0ZWQgb3IgbWFyayBpdCBAZ2VuZXJhdGVkIE5PVA0KKwkJdGhyb3cgbmV3IFVuc3VwcG9ydGVkT3BlcmF0aW9uRXhjZXB0aW9uKCk7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgdm9pZCBjYWxjdWxhdGVEZWx0YShTVEVNVGltZSB0aW1lLCBsb25nIHRpbWVEZWx0YSwgRUxpc3Q8RHluYW1pY0xhYmVsPiBsYWJlbHMpIHsNCisJCS8vIFRPRE86IGltcGxlbWVudCB0aGlzIG1ldGhvZA0KKwkJLy8gRW5zdXJlIHRoYXQgeW91IHJlbW92ZSBAZ2VuZXJhdGVkIG9yIG1hcmsgaXQgQGdlbmVyYXRlZCBOT1QNCisJCXRocm93IG5ldyBVbnN1cHBvcnRlZE9wZXJhdGlvbkV4Y2VwdGlvbigpOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIHZvaWQgZG9Nb2RlbFNwZWNpZmljQWRqdXN0bWVudHMoTGFiZWxWYWx1ZSBsYWJlbCkgew0KKwkJLy8gVE9ETzogaW1wbGVtZW50IHRoaXMgbWV0aG9kDQorCQkvLyBFbnN1cmUgdGhhdCB5b3UgcmVtb3ZlIEBnZW5lcmF0ZWQgb3IgbWFyayBpdCBAZ2VuZXJhdGVkIE5PVA0KKwkJdGhyb3cgbmV3IFVuc3VwcG9ydGVkT3BlcmF0aW9uRXhjZXB0aW9uKCk7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgYm9vbGVhbiBpc0RldGVybWluaXN0aWMoKSB7DQorCQkvLyBUT0RPOiBpbXBsZW1lbnQgdGhpcyBtZXRob2QNCisJCS8vIEVuc3VyZSB0aGF0IHlvdSByZW1vdmUgQGdlbmVyYXRlZCBvciBtYXJrIGl0IEBnZW5lcmF0ZWQgTk9UDQorCQl0aHJvdyBuZXcgVW5zdXBwb3J0ZWRPcGVyYXRpb25FeGNlcHRpb24oKTsNCisJfQ0KKw0KK30gLy9JbnRlZ3JhdGlvbkRlY29yYXRvckltcGwNCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL21vZGVsL2ltcGwvTW9kZWxGYWN0b3J5SW1wbC5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9tb2RlbC9pbXBsL01vZGVsRmFjdG9yeUltcGwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zOTJlYjIzCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9tb2RlbC9pbXBsL01vZGVsRmFjdG9yeUltcGwuamF2YQpAQCAtMCwwICsxLDE4MyBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuaW1wbDsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuIAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyAKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0IAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwgCisgKiAKKyAqIENvbnRyaWJ1dG9yczogCisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlVSSTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FRGF0YVR5cGU7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3Q7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5pbXBsLkVGYWN0b3J5SW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUucGx1Z2luLkVjb3JlUGx1Z2luOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5EZWNvcmF0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLkVkZ2VEZWNvcmF0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLkdyYXBoRGVjb3JhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5Nb2RlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuTW9kZWxGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5Nb2RlbFBhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLk5vZGVEZWNvcmF0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLlNURU1UaW1lOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiBBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgbW9kZWwgPGI+RmFjdG9yeTwvYj4uCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIE1vZGVsRmFjdG9yeUltcGwgZXh0ZW5kcyBFRmFjdG9yeUltcGwgaW1wbGVtZW50cyBNb2RlbEZhY3RvcnkgeworCS8qKgorCSAqIENyZWF0ZXMgdGhlIGRlZmF1bHQgZmFjdG9yeSBpbXBsZW1lbnRhdGlvbi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgc3RhdGljIE1vZGVsRmFjdG9yeSBpbml0KCkgeworCQl0cnkgeworCQkJTW9kZWxGYWN0b3J5IHRoZU1vZGVsRmFjdG9yeSA9IChNb2RlbEZhY3RvcnkpRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RUZhY3RvcnkoImh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL21vZGVsLmVjb3JlIik7IC8vJE5PTi1OTFMtMSQgCisJCQlpZiAodGhlTW9kZWxGYWN0b3J5ICE9IG51bGwpIHsKKwkJCQlyZXR1cm4gdGhlTW9kZWxGYWN0b3J5OworCQkJfQorCQl9CisJCWNhdGNoIChFeGNlcHRpb24gZXhjZXB0aW9uKSB7CisJCQlFY29yZVBsdWdpbi5JTlNUQU5DRS5sb2coZXhjZXB0aW9uKTsKKwkJfQorCQlyZXR1cm4gbmV3IE1vZGVsRmFjdG9yeUltcGwoKTsKKwl9CisKKwkvKioKKwkgKiBDcmVhdGVzIGFuIGluc3RhbmNlIG9mIHRoZSBmYWN0b3J5LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBNb2RlbEZhY3RvcnlJbXBsKCkgeworCQlzdXBlcigpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBFT2JqZWN0IGNyZWF0ZShFQ2xhc3MgZUNsYXNzKSB7CisJCXN3aXRjaCAoZUNsYXNzLmdldENsYXNzaWZpZXJJRCgpKSB7CisJCQljYXNlIE1vZGVsUGFja2FnZS5ERUNPUkFUT1I6IHJldHVybiBjcmVhdGVEZWNvcmF0b3IoKTsKKwkJCWNhc2UgTW9kZWxQYWNrYWdlLkVER0VfREVDT1JBVE9SOiByZXR1cm4gY3JlYXRlRWRnZURlY29yYXRvcigpOworCQkJY2FzZSBNb2RlbFBhY2thZ2UuR1JBUEhfREVDT1JBVE9SOiByZXR1cm4gY3JlYXRlR3JhcGhEZWNvcmF0b3IoKTsKKwkJCWNhc2UgTW9kZWxQYWNrYWdlLk1PREVMOiByZXR1cm4gY3JlYXRlTW9kZWwoKTsKKwkJCWNhc2UgTW9kZWxQYWNrYWdlLk5PREVfREVDT1JBVE9SOiByZXR1cm4gY3JlYXRlTm9kZURlY29yYXRvcigpOworCQkJY2FzZSBNb2RlbFBhY2thZ2UuU1RFTV9USU1FOiByZXR1cm4gY3JlYXRlU1RFTVRpbWUoKTsKKwkJCWRlZmF1bHQ6CisJCQkJdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiVGhlIGNsYXNzICciICsgZUNsYXNzLmdldE5hbWUoKSArICInIGlzIG5vdCBhIHZhbGlkIGNsYXNzaWZpZXIiKTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCisJCX0KKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRGVjb3JhdG9yIGNyZWF0ZURlY29yYXRvcigpIHsKKwkJRGVjb3JhdG9ySW1wbCBkZWNvcmF0b3IgPSBuZXcgRGVjb3JhdG9ySW1wbCgpOworCQlyZXR1cm4gZGVjb3JhdG9yOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFZGdlRGVjb3JhdG9yIGNyZWF0ZUVkZ2VEZWNvcmF0b3IoKSB7CisJCUVkZ2VEZWNvcmF0b3JJbXBsIGVkZ2VEZWNvcmF0b3IgPSBuZXcgRWRnZURlY29yYXRvckltcGwoKTsKKwkJcmV0dXJuIGVkZ2VEZWNvcmF0b3I7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEdyYXBoRGVjb3JhdG9yIGNyZWF0ZUdyYXBoRGVjb3JhdG9yKCkgeworCQlHcmFwaERlY29yYXRvckltcGwgZ3JhcGhEZWNvcmF0b3IgPSBuZXcgR3JhcGhEZWNvcmF0b3JJbXBsKCk7CisJCXJldHVybiBncmFwaERlY29yYXRvcjsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgTW9kZWwgY3JlYXRlTW9kZWwoKSB7CisJCU1vZGVsSW1wbCBtb2RlbCA9IG5ldyBNb2RlbEltcGwoKTsKKwkJcmV0dXJuIG1vZGVsOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBOb2RlRGVjb3JhdG9yIGNyZWF0ZU5vZGVEZWNvcmF0b3IoKSB7CisJCU5vZGVEZWNvcmF0b3JJbXBsIG5vZGVEZWNvcmF0b3IgPSBuZXcgTm9kZURlY29yYXRvckltcGwoKTsKKwkJcmV0dXJuIG5vZGVEZWNvcmF0b3I7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFNURU1UaW1lIGNyZWF0ZVNURU1UaW1lKCkgeworCQlTVEVNVGltZUltcGwgc3RlbVRpbWUgPSBuZXcgU1RFTVRpbWVJbXBsKCk7CisJCXJldHVybiBzdGVtVGltZTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCXB1YmxpYyBVUkkgY3JlYXRlVVJJRnJvbVN0cmluZyhFRGF0YVR5cGUgZURhdGFUeXBlLCBTdHJpbmcgaW5pdGlhbFZhbHVlKSB7CisJCXJldHVybiBVUkkuY3JlYXRlVVJJKGluaXRpYWxWYWx1ZSk7CisJfSAvLyBjcmVhdGVVUklGcm9tU3RyaW5nCisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCXB1YmxpYyBTdHJpbmcgY29udmVydFVSSVRvU3RyaW5nKEVEYXRhVHlwZSBlRGF0YVR5cGUsIE9iamVjdCBpbnN0YW5jZVZhbHVlKSB7CisJCXJldHVybiBpbnN0YW5jZVZhbHVlLnRvU3RyaW5nKCk7CisJfSAvLyBjb252ZXJ0VVJJVG9TdHJpbmcKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBNb2RlbFBhY2thZ2UgZ2V0TW9kZWxQYWNrYWdlKCkgeworCQlyZXR1cm4gKE1vZGVsUGFja2FnZSlnZXRFUGFja2FnZSgpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGRlcHJlY2F0ZWQKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQERlcHJlY2F0ZWQKKwlwdWJsaWMgc3RhdGljIE1vZGVsUGFja2FnZSBnZXRQYWNrYWdlKCkgeworCQlyZXR1cm4gTW9kZWxQYWNrYWdlLmVJTlNUQU5DRTsKKwl9CisKK30gLy9Nb2RlbEZhY3RvcnlJbXBsCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL21vZGVsL2ltcGwvTW9kZWxJbXBsLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL21vZGVsL2ltcGwvTW9kZWxJbXBsLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDlmMGNkMQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvbW9kZWwvaW1wbC9Nb2RlbEltcGwuamF2YQpAQCAtMCwwICsxLDY2MSBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuaW1wbDsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuIAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyAKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0IAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwgCisgKiAKKyAqIENvbnRyaWJ1dG9yczogCisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OworaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOworaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5FTGlzdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuVVJJOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnV0aWwuRU9iamVjdFJlc29sdmluZ0VMaXN0OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS51dGlsLkVjb3JlVXRpbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuU1RFTVVSSTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuVXRpbGl0eTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLkR1YmxpbkNvcmU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5JZGVudGlmaWFibGVGaWx0ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5pbXBsLklkZW50aWZpYWJsZUZpbHRlckltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5pbXBsLklkZW50aWZpYWJsZUltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkVkZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkdyYXBoOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5HcmFwaEZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkdyYXBoUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguTm9kZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguTm9kZUxhYmVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5VbnJlc29sdmVkSWRlbnRpZmlhYmxlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5EZWNvcmF0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLkVkZ2VEZWNvcmF0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLkdyYXBoRGVjb3JhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5Nb2RlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuTW9kZWxQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5Ob2RlRGVjb3JhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5TVEVNVGltZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2NlbmFyaW8uaW1wbC5TY2VuYXJpb0ltcGw7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPk1vZGVsPC9iPjwvZW0+Jy4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogPHA+CisgKiBUaGUgZm9sbG93aW5nIGZlYXR1cmVzIGFyZSBpbXBsZW1lbnRlZDoKKyAqIDx1bD4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuaW1wbC5Nb2RlbEltcGwjZ2V0TW9kZWxzIDxlbT5Nb2RlbHM8L2VtPn08L2xpPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5pbXBsLk1vZGVsSW1wbCNnZXRHcmFwaHMgPGVtPkdyYXBoczwvZW0+fTwvbGk+CisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLmltcGwuTW9kZWxJbXBsI2dldEdyYXBoRGVjb3JhdG9ycyA8ZW0+R3JhcGggRGVjb3JhdG9yczwvZW0+fTwvbGk+CisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLmltcGwuTW9kZWxJbXBsI2dldE5vZGVEZWNvcmF0b3JzIDxlbT5Ob2RlIERlY29yYXRvcnM8L2VtPn08L2xpPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5pbXBsLk1vZGVsSW1wbCNnZXRFZGdlRGVjb3JhdG9ycyA8ZW0+RWRnZSBEZWNvcmF0b3JzPC9lbT59PC9saT4KKyAqIDwvdWw+CisgKiA8L3A+CisgKgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgTW9kZWxJbXBsIGV4dGVuZHMgSWRlbnRpZmlhYmxlSW1wbCBpbXBsZW1lbnRzIE1vZGVsIHsKKworCisJLyoqCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0TW9kZWxzKCkgPGVtPk1vZGVsczwvZW0+fScgcmVmZXJlbmNlIGxpc3QuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZ2V0TW9kZWxzKCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgRUxpc3Q8TW9kZWw+IG1vZGVsczsKKworCS8qKgorCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldEdyYXBocygpIDxlbT5HcmFwaHM8L2VtPn0nIHJlZmVyZW5jZSBsaXN0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI2dldEdyYXBocygpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIEVMaXN0PEdyYXBoPiBncmFwaHM7CisKKwkvKioKKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRHcmFwaERlY29yYXRvcnMoKSA8ZW0+R3JhcGggRGVjb3JhdG9yczwvZW0+fScgcmVmZXJlbmNlIGxpc3QuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZ2V0R3JhcGhEZWNvcmF0b3JzKCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgRUxpc3Q8R3JhcGhEZWNvcmF0b3I+IGdyYXBoRGVjb3JhdG9yczsKKworCS8qKgorCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldE5vZGVEZWNvcmF0b3JzKCkgPGVtPk5vZGUgRGVjb3JhdG9yczwvZW0+fScgcmVmZXJlbmNlIGxpc3QuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZ2V0Tm9kZURlY29yYXRvcnMoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBFTGlzdDxOb2RlRGVjb3JhdG9yPiBub2RlRGVjb3JhdG9yczsKKworCS8qKgorCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldEVkZ2VEZWNvcmF0b3JzKCkgPGVtPkVkZ2UgRGVjb3JhdG9yczwvZW0+fScgcmVmZXJlbmNlIGxpc3QuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZ2V0RWRnZURlY29yYXRvcnMoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBFTGlzdDxFZGdlRGVjb3JhdG9yPiBlZGdlRGVjb3JhdG9yczsKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJcHJvdGVjdGVkIE1vZGVsSW1wbCgpIHsKKwkJc3VwZXIoKTsKKwkJc2V0VVJJKFNURU1VUkkuY3JlYXRlVVJJKFVSSV9UWVBFX01PREVMX1NFR01FTlQgKyAiLyIKKwkJCQkrIFNURU1VUkkuZ2VuZXJhdGVVbmlxdWVQYXJ0KCkpKTsKKwkJc2V0VHlwZVVSSShTVEVNVVJJLk1PREVMX1RZUEVfVVJJKTsKKwl9IC8vIE1vZGVsSW1wbAorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCBFQ2xhc3MgZVN0YXRpY0NsYXNzKCkgeworCQlyZXR1cm4gTW9kZWxQYWNrYWdlLkxpdGVyYWxzLk1PREVMOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUxpc3Q8TW9kZWw+IGdldE1vZGVscygpIHsKKwkJaWYgKG1vZGVscyA9PSBudWxsKSB7CisJCQltb2RlbHMgPSBuZXcgRU9iamVjdFJlc29sdmluZ0VMaXN0PE1vZGVsPihNb2RlbC5jbGFzcywgdGhpcywgTW9kZWxQYWNrYWdlLk1PREVMX19NT0RFTFMpOworCQl9CisJCXJldHVybiBtb2RlbHM7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFTGlzdDxHcmFwaD4gZ2V0R3JhcGhzKCkgeworCQlpZiAoZ3JhcGhzID09IG51bGwpIHsKKwkJCWdyYXBocyA9IG5ldyBFT2JqZWN0UmVzb2x2aW5nRUxpc3Q8R3JhcGg+KEdyYXBoLmNsYXNzLCB0aGlzLCBNb2RlbFBhY2thZ2UuTU9ERUxfX0dSQVBIUyk7CisJCX0KKwkJcmV0dXJuIGdyYXBoczsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVMaXN0PEdyYXBoRGVjb3JhdG9yPiBnZXRHcmFwaERlY29yYXRvcnMoKSB7CisJCWlmIChncmFwaERlY29yYXRvcnMgPT0gbnVsbCkgeworCQkJZ3JhcGhEZWNvcmF0b3JzID0gbmV3IEVPYmplY3RSZXNvbHZpbmdFTGlzdDxHcmFwaERlY29yYXRvcj4oR3JhcGhEZWNvcmF0b3IuY2xhc3MsIHRoaXMsIE1vZGVsUGFja2FnZS5NT0RFTF9fR1JBUEhfREVDT1JBVE9SUyk7CisJCX0KKwkJcmV0dXJuIGdyYXBoRGVjb3JhdG9yczsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVMaXN0PE5vZGVEZWNvcmF0b3I+IGdldE5vZGVEZWNvcmF0b3JzKCkgeworCQlpZiAobm9kZURlY29yYXRvcnMgPT0gbnVsbCkgeworCQkJbm9kZURlY29yYXRvcnMgPSBuZXcgRU9iamVjdFJlc29sdmluZ0VMaXN0PE5vZGVEZWNvcmF0b3I+KE5vZGVEZWNvcmF0b3IuY2xhc3MsIHRoaXMsIE1vZGVsUGFja2FnZS5NT0RFTF9fTk9ERV9ERUNPUkFUT1JTKTsKKwkJfQorCQlyZXR1cm4gbm9kZURlY29yYXRvcnM7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFTGlzdDxFZGdlRGVjb3JhdG9yPiBnZXRFZGdlRGVjb3JhdG9ycygpIHsKKwkJaWYgKGVkZ2VEZWNvcmF0b3JzID09IG51bGwpIHsKKwkJCWVkZ2VEZWNvcmF0b3JzID0gbmV3IEVPYmplY3RSZXNvbHZpbmdFTGlzdDxFZGdlRGVjb3JhdG9yPihFZGdlRGVjb3JhdG9yLmNsYXNzLCB0aGlzLCBNb2RlbFBhY2thZ2UuTU9ERUxfX0VER0VfREVDT1JBVE9SUyk7CisJCX0KKwkJcmV0dXJuIGVkZ2VEZWNvcmF0b3JzOworCX0KKworCS8qKgorCSAqIAorCSAqIAorCSAqIFRoaXMgbWV0aG9kIGNvbWJpbmVzIGFsbCBvZiB0aGUgZ3JhcGggImZyYWdtZW50cyIgdG9nZXRoZXIgdG8gbWFrZSBhCisJICogZ3JhcGggc3VpdGFibGUgZm9yIHNpbXVsYXRpb24uCisJICogCisJICogCisJICogCisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlwdWJsaWMgR3JhcGggZ2V0Q2Fub25pY2FsR3JhcGgoZmluYWwgVVJJIHVyaSwgSWRlbnRpZmlhYmxlRmlsdGVyIHBhcmVudEZpbHRlciwgU1RFTVRpbWUgdGltZSkgeworCQlJZGVudGlmaWFibGVGaWx0ZXJJbXBsIF9wYXJlbnRmaWx0ZXIgPSAoSWRlbnRpZmlhYmxlRmlsdGVySW1wbClwYXJlbnRGaWx0ZXI7CisJCWZpbmFsIEdyYXBoIHJldFZhbHVlID0gR3JhcGhGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVHcmFwaCgpOworCQlyZXRWYWx1ZS5zZXRVUkkodXJpKTsKKworCQlJZGVudGlmaWFibGVGaWx0ZXJJbXBsIG15RmlsdGVyID0gbmV3IElkZW50aWZpYWJsZUZpbHRlckltcGwodGhpcy5nZXREdWJsaW5Db3JlKCkuZ2V0Q292ZXJhZ2UoKSk7CisJCWlmKHBhcmVudEZpbHRlciAhPSBudWxsKW15RmlsdGVyLnJlc3RyaWN0KF9wYXJlbnRmaWx0ZXIpOwkKKwkJCisJCS8vIEJhc2ljYWxseSwgd2UgaXRlcmF0ZSB0aHJvdWdoIGVhY2ggb2YgdGhlIG1vZGVscyBnZXR0aW5nIHRoZWlyCisJCS8vIGNhbm9uaWNhbCBncmFwaHMgYW5kIHRoZW4gbWVyZ2UgdGhlbSB0b2dldGhlci4gVGhlbiB3ZSBhZGQgaW4gdGhlCisJCS8vIGdyYXBocyBvZiB0aGlzIG1vZGVsIGFuZCBmaW5hbGx5ICJyZXNvbHZlIiBhbGwgdGhlICJkYW5nbGluZyIgbGlua3MKKworCQlmb3IgKGZpbmFsIEl0ZXJhdG9yPE1vZGVsPiBtb2RlbEl0ZXIgPSBnZXRNb2RlbHMoKS5pdGVyYXRvcigpOyBtb2RlbEl0ZXIKKwkJCQkuaGFzTmV4dCgpOykgeworCQkJZmluYWwgTW9kZWwgbW9kZWwgPSAoTW9kZWwpIG1vZGVsSXRlci5uZXh0KCk7CisJCQlyZXRWYWx1ZS5hZGRHcmFwaChtb2RlbC5nZXRDYW5vbmljYWxHcmFwaCh1cmksIG15RmlsdGVyLCB0aW1lKSwgbXlGaWx0ZXIpOworCQl9IC8vIGZvciBtb2RlbHMKKworCQkvLyBOb3cgZG8gdGhlIGdyYXBocyB0aGF0IGFyZSBwYXJ0IG9mIHRoaXMgbW9kZWwKKwkJZm9yIChmaW5hbCBJdGVyYXRvcjxHcmFwaD4gZ3JhcGhJdGVyID0gZ2V0R3JhcGhzKCkuaXRlcmF0b3IoKTsgZ3JhcGhJdGVyCisJCQkJLmhhc05leHQoKTspIHsKKwkJCWZpbmFsIEdyYXBoIGdyYXBoID0gKEdyYXBoKSBncmFwaEl0ZXIubmV4dCgpOworCisJCQlmaW5hbCBHcmFwaCBjb3B5R3JhcGggPSAoR3JhcGgpIEVjb3JlVXRpbC5jb3B5KGdyYXBoKTsKKwkJCS8vIGZpbmFsIEdyYXBoIGdyYXBoID0gKEdyYXBoKSBncmFwaEl0ZXIubmV4dCgpOworCQkJLy8gZmluYWwgQ29waWVyIGNvcGllciA9IG5ldyBDb3BpZXIoKTsKKwkJCS8vIGZpbmFsIEdyYXBoIGNvcHlHcmFwaCA9IChHcmFwaCkgY29waWVyLmNvcHkoZ3JhcGgpOworCQkJLy8gY29waWVyLmNvcHlSZWZlcmVuY2VzKCk7CisJCQlyZXRWYWx1ZS5hZGRHcmFwaChjb3B5R3JhcGgsIG15RmlsdGVyKTsKKwkJfSAvLyBmb3IgZ3JhcGhzCisKKwkJLy8gSG9vayB1cCB0aGUgSWRlbnRpZmlhYmxlcyB3aXRoIG90aGVyIG9uZXMgdGhleSByZWZlcmVuY2UgdmlhIFVSSSdzLAorCQkvLyBpZiBhbnkgVVJJIGFyZSB1bnJlc29sdmVkLCB0aGVuIGluc3RhbmNlcyBvZiBVbnJlc29sdmVkSWRlbnRpZmlhYmxlcworCQkvLyB3aWxsIGJlIGFkZGVkIHRvIHRoZSBncmFwaCdzIGNvbGxlY3Rpb24gb2YgInVucmVzb2x2ZWQKKwkJLy8gaWRlbnRpZmlhYmxlcyIuCisJCXJlc29sdmVVUklzKHRoaXMsIHJldFZhbHVlKTsKKworCQlpbnZva2VOb2RlRGVjb3JhdG9ycyhyZXRWYWx1ZSwgdGltZSk7CisJCWludm9rZUVkZ2VEZWNvcmF0b3JzKHJldFZhbHVlLCB0aW1lKTsKKwkJaW52b2tlR3JhcGhEZWNvcmF0b3JzKHJldFZhbHVlLCB0aW1lKTsKKworCQkvLyBVcGRhdGUgdGhlIER1YmxpbiBDb3JlIGZvciB0aGlzIGdyYXBoCisJCWZpbmFsIER1YmxpbkNvcmUgZGMgPSByZXRWYWx1ZS5nZXREdWJsaW5Db3JlKCk7CisJCWRjLnBvcHVsYXRlKCk7CisJCWRjLnNldEZvcm1hdChHcmFwaFBhY2thZ2UuZU5TX1VSSSk7CisKKwkJcmV0dXJuIHJldFZhbHVlOworCX0gLy8gZ2V0Q2Fub25pY2FsR3JhcGgKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlwdWJsaWMgdm9pZCBwcmVwYXJlKFNURU1UaW1lIHRpbWUpIHsKKwkJLy8gSXRlcmF0ZSBzdWJtb2RlbHMgYW5kIGNhbGwgcHJlcGFyZQorCQlmb3IgKGZpbmFsIEl0ZXJhdG9yPE1vZGVsPiBtb2RlbEl0ZXIgPSBnZXRNb2RlbHMoKS5pdGVyYXRvcigpOyBtb2RlbEl0ZXIKKwkJLmhhc05leHQoKTspIHsKKwkJCWZpbmFsIE1vZGVsIG1vZGVsID0gKE1vZGVsKSBtb2RlbEl0ZXIubmV4dCgpOworCQkJbW9kZWwucHJlcGFyZSh0aW1lKTsKKwkJfSAvLyBmb3IgbW9kZWxzCisJCQorCQlBcnJheUxpc3Q8Tm9kZURlY29yYXRvcj5saXN0ID0gKEFycmF5TGlzdDxOb2RlRGVjb3JhdG9yPilFY29yZVV0aWwuY29weUFsbChnZXROb2RlRGVjb3JhdG9ycygpKTsKKwkJZm9yIChmaW5hbCBJdGVyYXRvcjxOb2RlRGVjb3JhdG9yPiBub2RlRGVjb3JhdG9ySXRlciA9IGxpc3QuaXRlcmF0b3IoKTsgbm9kZURlY29yYXRvckl0ZXIKKwkJLmhhc05leHQoKTspIHsKKwkJCWZpbmFsIE5vZGVEZWNvcmF0b3Igbm9kZURlY29yYXRvciA9IChOb2RlRGVjb3JhdG9yKSBub2RlRGVjb3JhdG9ySXRlci5uZXh0KCk7CisJCQlub2RlRGVjb3JhdG9yLnByZXBhcmUodGhpcywgdGltZSk7CisJCX0KKwkJCisJCUFycmF5TGlzdDxFZGdlRGVjb3JhdG9yPmxpc3QyID0gKEFycmF5TGlzdDxFZGdlRGVjb3JhdG9yPilFY29yZVV0aWwuY29weUFsbChnZXRFZGdlRGVjb3JhdG9ycygpKTsKKwkJZm9yIChmaW5hbCBJdGVyYXRvcjxFZGdlRGVjb3JhdG9yPiBlZGdlRGVjb3JhdG9ySXRlciA9IGxpc3QyLml0ZXJhdG9yKCk7IGVkZ2VEZWNvcmF0b3JJdGVyCisJCS5oYXNOZXh0KCk7KSB7CisJCQlmaW5hbCBFZGdlRGVjb3JhdG9yIGVkZ2VEZWNvcmF0b3IgPSAoRWRnZURlY29yYXRvcikgZWRnZURlY29yYXRvckl0ZXIubmV4dCgpOworCQkJZWRnZURlY29yYXRvci5wcmVwYXJlKHRoaXMsIHRpbWUpOworCQl9CisJCQorCQlBcnJheUxpc3Q8R3JhcGhEZWNvcmF0b3I+bGlzdDMgPSAoQXJyYXlMaXN0PEdyYXBoRGVjb3JhdG9yPilFY29yZVV0aWwuY29weUFsbChnZXRHcmFwaERlY29yYXRvcnMoKSk7CisJCWZvciAoZmluYWwgSXRlcmF0b3I8R3JhcGhEZWNvcmF0b3I+IGdyYXBoRGVjb3JhdG9ySXRlciA9IGxpc3QzLml0ZXJhdG9yKCk7IGdyYXBoRGVjb3JhdG9ySXRlcgorCQkuaGFzTmV4dCgpOykgeworCQkJZmluYWwgR3JhcGhEZWNvcmF0b3IgZ3JhcGhEZWNvcmF0b3IgPSAoR3JhcGhEZWNvcmF0b3IpIGdyYXBoRGVjb3JhdG9ySXRlci5uZXh0KCk7CisJCQlncmFwaERlY29yYXRvci5wcmVwYXJlKHRoaXMsIHRpbWUpOworCQl9CisKKwl9CisKKwkvKioKKwkgKiBQcm9jZXNzIGFsbCBvZiB0aGUgY29tcG9uZW50cyBvZiBhIGdyYXBoIGFuZCBsaW5rIHVwIGFsbCB1bnJlc29sdmVkIFVSSQorCSAqIHJlZmVyZW5jZXMgaW4gdGhlIGdyYXBoLgorCSAqIAorCSAqIEBwYXJhbSBtb2RlbAorCSAqICAgICAgICAgICAgdGhlIG1vZGVsIHRoYXQgY29udGFpbnMgdGhlIGdyYXBoCisJICogQHBhcmFtIGdyYXBoCisJICogICAgICAgICAgICBhIGdyYXBoCisJICogCisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlwcml2YXRlIHZvaWQgcmVzb2x2ZVVSSXMoZmluYWwgTW9kZWwgbW9kZWwsIGZpbmFsIEdyYXBoIGdyYXBoKSB7CisKKwkJLy8gVE9ETyBvcHRpbWl6ZSBieSBrZWVwaW5nIGEgbGlzdCBvZiB1bnJlc29sdmVkIGVkZ2VzCisKKwkJLy8gR28gdGhyb3VnaCBlYWNoIGVkZ2UgaW4gdGhlIGdyYXBoIGFuZCB0cnkgdG8gaG9vayBpdCB1cCB3aXRoIHRoZQorCQkvLyBub2RlcyBpdCByZWZlcmVuY2VzCisJCWZvciAoZmluYWwgSXRlcmF0b3I8RWRnZT4gZWRnZUl0ZXIgPSBncmFwaC5nZXRFZGdlcygpLnZhbHVlcygpLml0ZXJhdG9yKCk7IGVkZ2VJdGVyCisJCQkJLmhhc05leHQoKTspIHsKKwkJCWZpbmFsIEVkZ2UgZWRnZSA9IChFZGdlKSBlZGdlSXRlci5uZXh0KCk7CisKKwkJCS8vIERvZXMgTm9kZSBBIG9mIHRoaXMgZWRnZSBuZWVkIHJlc29sdmluZz8KKwkJCWlmICghZWRnZS5lSXNTZXQoR3JhcGhQYWNrYWdlLkxpdGVyYWxzLkVER0VfX0EpKSB7CisJCQkJLy8gWWVzCisJCQkJZmluYWwgTm9kZSBub2RlQSA9IGdyYXBoLmdldE5vZGUoZWRnZS5nZXROb2RlQVVSSSgpKTsKKwkJCQkvLyBEaWQgd2UgZmluZCBpdD8KKwkJCQlpZiAobm9kZUEgIT0gbnVsbCkgeworCQkJCQkvLyBZZXMKKwkJCQkJZWRnZS5zZXRBKG5vZGVBKTsKKwkJCQkJbm9kZUEuZ2V0RWRnZXMoKS5hZGQoZWRnZSk7CisJCQkJfSBlbHNlIHsKKwkJCQkJLy8gTm8KKwkJCQkJZmluYWwgVW5yZXNvbHZlZElkZW50aWZpYWJsZSB1aSA9IEdyYXBoRmFjdG9yeS5lSU5TVEFOQ0UKKwkJCQkJCQkuY3JlYXRlVW5yZXNvbHZlZElkZW50aWZpYWJsZSgpOworCQkJCQl1aS5zZXRNb2RlbChtb2RlbCk7CisJCQkJCXVpLnNldEdyYXBoKGdyYXBoKTsKKwkJCQkJdWkuc2V0VW5yZXNvbHZlZFVSSShlZGdlLmdldE5vZGVBVVJJKCkpOworCQkJCQl1aS5zZXRJZGVudGlmaWFibGUoZWRnZSk7CisJCQkJCXVpLnNldEZpZWxkTmFtZSgiTk9ERV9BIik7CisJCQkJCWlmKFNjZW5hcmlvSW1wbC5yZXBvcnREYW5nbGluZ0FpclRyYW5zcG9ydEVkZ2VzIHx8CisJCQkJCQkJIWVkZ2UuZ2V0VVJJKCkudG9TdHJpbmcoKS5jb250YWlucygiL3BpcGV0cmFuc3BvcnQiKSkKKwkJCQkJCWdyYXBoLmdldFVucmVzb2x2ZWRJZGVudGlmaWFibGVzKCkuYWRkKHVpKTsKKwkJCQl9IC8vIGVsc2UKKwkJCX0gLy8gaWYgbm9kZUEKKworCQkJLy8gRG9lcyBOb2RlIEIgb2YgdGhpcyBlZGdlIG5lZWQgcmVzb2x2aW5nPworCQkJaWYgKCFlZGdlLmVJc1NldChHcmFwaFBhY2thZ2UuTGl0ZXJhbHMuRURHRV9fQikKKwkJCQkJJiYgZWRnZS5lSXNTZXQoR3JhcGhQYWNrYWdlLkxpdGVyYWxzLkVER0VfX0EpKSB7CisJCQkJLy8gWWVzCisJCQkJZmluYWwgTm9kZSBub2RlQiA9IGdyYXBoLmdldE5vZGUoZWRnZS5nZXROb2RlQlVSSSgpKTsKKwkJCQkvLyBEaWQgd2UgZmluZCBpdD8KKwkJCQlpZiAobm9kZUIgIT0gbnVsbCkgeworCQkJCQkvLyBZZXMKKwkJCQkJZWRnZS5zZXRCKG5vZGVCKTsKKwkJCQkJbm9kZUIuZ2V0RWRnZXMoKS5hZGQoZWRnZSk7CisJCQkJfSBlbHNlIHsKKwkJCQkJLy8gTm8KKwkJCQkJLy8gV2FzIE5vZGUgQSBmb3VuZCB0aG91Z2g/CisJCQkJCWlmIChlZGdlLmdldEEoKSAhPSBudWxsKSB7CisJCQkJCQkvLyBZZXMKKwkJCQkJCS8vIFdlIHJlbW92ZSBvdXIgbGluayB3aXRoIGl0IHRoZW4gc28gdGhhdCB3ZSBkb24ndCBoYXZlCisJCQkJCQkvLyBhIGRhbmdsaW5nIGVkZ2UgaW4gdGhlIGdyYXBoCisJCQkJCQlmaW5hbCBOb2RlIG5vZGVBID0gZWRnZS5nZXRBKCk7CisJCQkJCQllZGdlLnNldEEobnVsbCk7CisJCQkJCQlub2RlQS5nZXRFZGdlcygpLnJlbW92ZShlZGdlKTsKKwkJCQkJfSAvLyBpZiBOb2RlIEEKKworCQkJCQlmaW5hbCBVbnJlc29sdmVkSWRlbnRpZmlhYmxlIHVpID0gR3JhcGhGYWN0b3J5LmVJTlNUQU5DRQorCQkJCQkJCS5jcmVhdGVVbnJlc29sdmVkSWRlbnRpZmlhYmxlKCk7CisJCQkJCXVpLnNldE1vZGVsKG1vZGVsKTsKKwkJCQkJdWkuc2V0R3JhcGgoZ3JhcGgpOworCQkJCQl1aS5zZXRVbnJlc29sdmVkVVJJKGVkZ2UuZ2V0Tm9kZUJVUkkoKSk7CisJCQkJCXVpLnNldElkZW50aWZpYWJsZShlZGdlKTsKKwkJCQkJdWkuc2V0RmllbGROYW1lKCJOT0RFX0IiKTsKKwkJCQkJaWYoU2NlbmFyaW9JbXBsLnJlcG9ydERhbmdsaW5nQWlyVHJhbnNwb3J0RWRnZXMgfHwKKwkJCQkJCQkhZWRnZS5nZXRVUkkoKS50b1N0cmluZygpLmNvbnRhaW5zKCIvcGlwZXRyYW5zcG9ydCIpKQorCQkJCQkJZ3JhcGguZ2V0VW5yZXNvbHZlZElkZW50aWZpYWJsZXMoKS5hZGQodWkpOworCQkJCX0gLy8gZWxzZQorCQkJfSAvLyBpZiBub2RlQgorCQl9IC8vIGZvciBlYWNoIGVkZ2UKKworCQkvLyBOb3cgZG8gdGhlIGxhYmVscworCQlmb3IgKGZpbmFsIEl0ZXJhdG9yPE5vZGVMYWJlbD4gbGFiZWxJdGVyID0gZ3JhcGguZ2V0Tm9kZUxhYmVscygpLnZhbHVlcygpCisJCQkJLml0ZXJhdG9yKCk7IGxhYmVsSXRlci5oYXNOZXh0KCk7KSB7CisJCQlmaW5hbCBOb2RlTGFiZWwgbGFiZWwgPSAoTm9kZUxhYmVsKSBsYWJlbEl0ZXIubmV4dCgpOworCQkJLy8gQ2FuIHlvdSBmaW5kIHRoZSBOb2RlIGZvciB0aGlzIGxhYmVsPworCQkJZmluYWwgTm9kZSBub2RlID0gZ3JhcGguZ2V0Tm9kZShsYWJlbAorCQkJCQkuZ2V0VVJJT2ZJZGVudGlmaWFibGVUb0JlTGFiZWxlZCgpKTsKKwkJCWlmIChub2RlICE9IG51bGwpIHsKKwkJCQkvLyBZZXMKKwkJCQlub2RlLmdldExhYmVscygpLmFkZChsYWJlbCk7CisJCQl9IGVsc2UgeworCQkJCS8vIE5vCisJCQkJZmluYWwgVW5yZXNvbHZlZElkZW50aWZpYWJsZSB1aSA9IEdyYXBoRmFjdG9yeS5lSU5TVEFOQ0UKKwkJCQkJCS5jcmVhdGVVbnJlc29sdmVkSWRlbnRpZmlhYmxlKCk7CisJCQkJdWkuc2V0TW9kZWwobW9kZWwpOworCQkJCXVpLnNldEdyYXBoKGdyYXBoKTsKKwkJCQl1aS5zZXRVbnJlc29sdmVkVVJJKGxhYmVsLmdldFVSSU9mSWRlbnRpZmlhYmxlVG9CZUxhYmVsZWQoKSk7CisJCQkJdWkuc2V0SWRlbnRpZmlhYmxlKGxhYmVsKTsKKwkJCQl1aS5zZXRGaWVsZE5hbWUoIk5vZGUiKTsKKwkJCQlncmFwaC5nZXRVbnJlc29sdmVkSWRlbnRpZmlhYmxlcygpLmFkZCh1aSk7CisJCQl9CisJCX0gLy8gZm9yCisKKwl9IC8vIHJlc29sdmVVUklzCisKKwkvKioKKwkgKiBJdGVyYXRlIHRocm91Z2ggZWFjaCBub2RlIGRlY29yYXRvciBhbmQgZ2l2ZSBpdCBhIGNoYW5jZSB0byBkZWNvcmF0ZSB0aGUKKwkgKiBub2RlcyBvZiB0aGUgZ3JhcGguCisJICogCisJICogQHBhcmFtIGdyYXBoCisJICogICAgICAgICAgICB0aGUge0BsaW5rIEdyYXBofSB0byBkZWNvcmF0ZQorCSAqIEBwYXJhbSB0aW1lIFNURU0gdGltZQorCSAqLworCXByaXZhdGUgdm9pZCBpbnZva2VOb2RlRGVjb3JhdG9ycyhHcmFwaCBncmFwaCwgU1RFTVRpbWUgdGltZSkgeworCQlBcnJheUxpc3Q8RGVjb3JhdG9yPmZhaWxlZCA9IG51bGw7IAorCQkKKwkJLy8gU3RlZmFuIGZpeC4gV2UgYWRkIHRoZSBkZWNvcmF0b3JzIHRvIHRoZSBncmFwaCBmaXJzdCBzaW5jZSB3ZSBuZWVkIHRvIGtub3cKKwkJLy8gYWJvdXQgd2hhdCBkZWNvcmF0b3JzIGFyZSBhdmFpbGFibGUgd2hlbiB3ZSBkZXRlcm1pbmUgaG93IHRvIGRlY29yYXRlIHdoZW4KKwkJLy8gdGhlcmUgYXJlIG92ZXJsYXBwaW5nIHNldHMgb2Ygbm9kZXMgKGUuZy4gZm9yIHBvcHVsYXRpb24gbW9kZWxzKQorCQlmb3IgKGZpbmFsIEl0ZXJhdG9yPE5vZGVEZWNvcmF0b3I+IG5vZGVEZWNvcmF0b3JJdGVyID0gZ2V0Tm9kZURlY29yYXRvcnMoKS5pdGVyYXRvcigpOyBub2RlRGVjb3JhdG9ySXRlcgorCQkuaGFzTmV4dCgpOykgeworCQkJZmluYWwgTm9kZURlY29yYXRvciBub2RlRGVjb3JhdG9yID0gKE5vZGVEZWNvcmF0b3IpIG5vZGVEZWNvcmF0b3JJdGVyCisJCQkubmV4dCgpOworCQkJZmluYWwgRGVjb3JhdG9yIGNhbm9uaWNhbERlY29yYXRvciA9IChEZWNvcmF0b3IpIEVjb3JlVXRpbAorCQkJLmNvcHkobm9kZURlY29yYXRvcik7CisJCQlncmFwaC5nZXREZWNvcmF0b3JzKCkuYWRkKGNhbm9uaWNhbERlY29yYXRvcik7CisJCX0KKwkJCisJCS8vIEhlcmUgdGhlIGNvZGUgaXMgY29uZnVzaW5nIGFuZCB3ZSBuZWVkIHRvIGJlIGNsZWFyIG9uIHdoaWNoIGdyYXBoIHRoZSBkZWNvcmF0b3IgaXMKKwkJLy8gZGVjb3JhdGluZy4gSXQgaXMgYWN0dWFsbHkgdGhlIGNhbm9uaWNhbCBncmFwaCBzaW5jZSBpZiB5b3UgbG9vayBpbiBhbnkgb2YgdGhlIGRlY29yYXRvcnMKKwkJLy8gaXQncyB1c2luZyB0aGUgbWV0aG9kIGdldEdyYXBoKCkgdG8gZGV0ZXJtaW5lIHdoaWNoIGdyYXBoIHRvIGRlY29yYXRvci4gSG93ZXZlciwKKwkJLy8gZ2V0R3JhcGgoKSBzaW1wbHkgcmV0dXJucyB0aGUgZUNvbnRhaW5lcigpLCBidXQgdGhhdCBpcyBjb3JyZWN0IHNpbmNlIHRoZSBkZWNvcmF0b3JzCisJCS8vIGFyZSBub3cgaW5zaWRlIHRoZSBwYXNzZWQgaW4gZ3JhcGggb2JqZWN0ICh0aGUgY2Fub25pY2FsIGdyYXBoKS4KKwkJLy8gRGFuZyB3aG8gd3JvdGUgdGhpcyBjb2RlISEhIQorCQkKKwkJZm9yIChEZWNvcmF0b3IgY2Fub25pY2FsRGVjb3JhdG9yOmdyYXBoLmdldERlY29yYXRvcnMoKSkgeworCQkJYm9vbGVhbiBzdWNjZXNzID0gY2Fub25pY2FsRGVjb3JhdG9yLmRlY29yYXRlR3JhcGgodGltZSk7CisJCQlpZighc3VjY2VzcykgeworCQkJCWlmKGZhaWxlZCA9PSBudWxsKWZhaWxlZCA9IG5ldyBBcnJheUxpc3Q8RGVjb3JhdG9yPigpOworCQkJCWZhaWxlZC5hZGQoY2Fub25pY2FsRGVjb3JhdG9yKTsKKwkJCX0gZWxzZSBjYW5vbmljYWxEZWNvcmF0b3Iuc2V0R3JhcGhEZWNvcmF0ZWQodHJ1ZSk7CisJCX0gLy8gZm9yCisJCQorCQkvLyBSZWRvIGZhaWxlZCBkZWNvcmF0b3JzLiBUaGlzIGNhbiBoYXBwZW4gZHVlIHRvIGRlcGVuZGVuY2llcywgZm9yIGluc3RhbmNlIGEgcG9wdWxhdGlvbiBtb2RlbCBtdXN0IGJlIGFsbG93ZWQgdG8gZGVjb3JhdGUKKwkJLy8gYmVmb3JlIGEgZGlzZWFzZSBtb2RlbC4JCisJCS8vIEFTU1VNSU5HIFRIRSBVU0VSIEhBUyBCVUlMRCBUSEUgTU9ERUwgV0lUSCBUSEUgQ09SUkVDVCBISUVSQVJDSFksIFRISVMgV0lMTCBORVZFUiBIQVBQRU4KKwkJCisJCWlmKGZhaWxlZCE9bnVsbCkgeworCQkJLy8gV2Ugc2hvdWxkIGxvZyBhIHdhcm5pbmcgaGVyZSB0aGF0IHdlIHdlcmUgZm9yY2VkIHRvIHJlaW5pdC4gVGhlIHVzZXIgc2hvdWxkIGNoZWNrIHRoZSBtb2RlbCBuZXN0aW5nCisJCQlVdGlsaXR5LmRpc3BsYXlTY2VuYXJpb0NvbXBvc2l0aW9uV2FybmluZyhVdGlsaXR5Lk5FU1RJTkdfV0FSTklORyk7CisJCQlmb3IoRGVjb3JhdG9yIGQ6ZmFpbGVkKSB7CisJCQkJZC5kZWNvcmF0ZUdyYXBoKHRpbWUpOworCQkJCWQuc2V0R3JhcGhEZWNvcmF0ZWQodHJ1ZSk7CisJCQl9CisJCX0KKwl9IC8vIGludm9rZU5vZGVEZWNvcmF0b3JzCisKKwkvKioKKwkgKiBJdGVyYXRlIHRocm91Z2ggZWFjaCBlZGdlIGRlY29yYXRvciBhbmQgZ2l2ZSBpdCBhIGNoYW5jZSB0byBkZWNvcmF0ZSB0aGUKKwkgKiBlZGdlcyBvZiB0aGUgZ3JhcGguCisJICogCisJICogQHBhcmFtIGdyYXBoCisJICogICAgICAgICAgICB0aGUge0BsaW5rIEdyYXBofSB0byBkZWNvcmF0ZQorCSAqIEBwYXJhbSB0aW1lCisJICovCisJcHJpdmF0ZSB2b2lkIGludm9rZUVkZ2VEZWNvcmF0b3JzKGZpbmFsIEdyYXBoIGdyYXBoLCBTVEVNVGltZSB0aW1lKSB7CisJCWZvciAoZmluYWwgSXRlcmF0b3I8RWRnZURlY29yYXRvcj4gZWRnZURlY29yYXRvckl0ZXIgPSBnZXRFZGdlRGVjb3JhdG9ycygpLml0ZXJhdG9yKCk7IGVkZ2VEZWNvcmF0b3JJdGVyCisJCQkJLmhhc05leHQoKTspIHsKKwkJCWZpbmFsIEVkZ2VEZWNvcmF0b3IgZWRnZURlY29yYXRvciA9IChFZGdlRGVjb3JhdG9yKSBlZGdlRGVjb3JhdG9ySXRlcgorCQkJCQkubmV4dCgpOworCQkJZmluYWwgRGVjb3JhdG9yIGNhbm9uaWNhbERlY29yYXRvciA9IChEZWNvcmF0b3IpIEVjb3JlVXRpbAorCQkJCQkuY29weShlZGdlRGVjb3JhdG9yKTsKKwkJCWdyYXBoLmdldERlY29yYXRvcnMoKS5hZGQoY2Fub25pY2FsRGVjb3JhdG9yKTsKKwkJCWNhbm9uaWNhbERlY29yYXRvci5kZWNvcmF0ZUdyYXBoKHRpbWUpOworCQl9IC8vIGZvcgorCX0gLy8gaW52b2tlRWRnZURlY29yYXRvcnMKKworCS8qKgorCSAqIEl0ZXJhdGUgdGhyb3VnaCBlYWNoIGdyYXBoIGRlY29yYXRvciBhbmQgZ2l2ZSBpdCBhIGNoYW5jZSB0byBkZWNvcmF0ZSB0aGUKKwkgKiBncmFwaCBpdHNlbGYuCisJICogCisJICogQHBhcmFtIGdyYXBoCisJICogICAgICAgICAgICB0aGUge0BsaW5rIEdyYXBofSB0byBkZWNvcmF0ZQorCSAqIEBwYXJhbSB0aW1lCisJICovCisJcHJpdmF0ZSB2b2lkIGludm9rZUdyYXBoRGVjb3JhdG9ycyhHcmFwaCBncmFwaCwgU1RFTVRpbWUgdGltZSkgeworCQlmb3IgKGZpbmFsIEl0ZXJhdG9yPEdyYXBoRGVjb3JhdG9yPiBncmFwaERlY29yYXRvckl0ZXIgPSBnZXRHcmFwaERlY29yYXRvcnMoKQorCQkJCS5pdGVyYXRvcigpOyBncmFwaERlY29yYXRvckl0ZXIuaGFzTmV4dCgpOykgeworCQkJZmluYWwgR3JhcGhEZWNvcmF0b3IgZ3JhcGhEZWNvcmF0b3IgPSAoR3JhcGhEZWNvcmF0b3IpIGdyYXBoRGVjb3JhdG9ySXRlcgorCQkJCQkubmV4dCgpOworCQkJZmluYWwgRGVjb3JhdG9yIGNhbm9uaWNhbERlY29yYXRvciA9IChEZWNvcmF0b3IpIEVjb3JlVXRpbAorCQkJCQkuY29weShncmFwaERlY29yYXRvcik7CisJCQlncmFwaC5nZXREZWNvcmF0b3JzKCkuYWRkKGNhbm9uaWNhbERlY29yYXRvcik7CisJCQljYW5vbmljYWxEZWNvcmF0b3IuZGVjb3JhdGVHcmFwaCh0aW1lKTsKKwkJfSAvLyBmb3IKKworCX0gLy8gaW52b2tlR3JhcGhEZWNvcmF0b3JzCisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIE9iamVjdCBlR2V0KGludCBmZWF0dXJlSUQsIGJvb2xlYW4gcmVzb2x2ZSwgYm9vbGVhbiBjb3JlVHlwZSkgeworCQlzd2l0Y2ggKGZlYXR1cmVJRCkgeworCQkJY2FzZSBNb2RlbFBhY2thZ2UuTU9ERUxfX01PREVMUzoKKwkJCQlyZXR1cm4gZ2V0TW9kZWxzKCk7CisJCQljYXNlIE1vZGVsUGFja2FnZS5NT0RFTF9fR1JBUEhTOgorCQkJCXJldHVybiBnZXRHcmFwaHMoKTsKKwkJCWNhc2UgTW9kZWxQYWNrYWdlLk1PREVMX19HUkFQSF9ERUNPUkFUT1JTOgorCQkJCXJldHVybiBnZXRHcmFwaERlY29yYXRvcnMoKTsKKwkJCWNhc2UgTW9kZWxQYWNrYWdlLk1PREVMX19OT0RFX0RFQ09SQVRPUlM6CisJCQkJcmV0dXJuIGdldE5vZGVEZWNvcmF0b3JzKCk7CisJCQljYXNlIE1vZGVsUGFja2FnZS5NT0RFTF9fRURHRV9ERUNPUkFUT1JTOgorCQkJCXJldHVybiBnZXRFZGdlRGVjb3JhdG9ycygpOworCQl9CisJCXJldHVybiBzdXBlci5lR2V0KGZlYXR1cmVJRCwgcmVzb2x2ZSwgY29yZVR5cGUpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAU3VwcHJlc3NXYXJuaW5ncygidW5jaGVja2VkIikKKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBlU2V0KGludCBmZWF0dXJlSUQsIE9iamVjdCBuZXdWYWx1ZSkgeworCQlzd2l0Y2ggKGZlYXR1cmVJRCkgeworCQkJY2FzZSBNb2RlbFBhY2thZ2UuTU9ERUxfX01PREVMUzoKKwkJCQlnZXRNb2RlbHMoKS5jbGVhcigpOworCQkJCWdldE1vZGVscygpLmFkZEFsbCgoQ29sbGVjdGlvbjw/IGV4dGVuZHMgTW9kZWw+KW5ld1ZhbHVlKTsKKwkJCQlyZXR1cm47CisJCQljYXNlIE1vZGVsUGFja2FnZS5NT0RFTF9fR1JBUEhTOgorCQkJCWdldEdyYXBocygpLmNsZWFyKCk7CisJCQkJZ2V0R3JhcGhzKCkuYWRkQWxsKChDb2xsZWN0aW9uPD8gZXh0ZW5kcyBHcmFwaD4pbmV3VmFsdWUpOworCQkJCXJldHVybjsKKwkJCWNhc2UgTW9kZWxQYWNrYWdlLk1PREVMX19HUkFQSF9ERUNPUkFUT1JTOgorCQkJCWdldEdyYXBoRGVjb3JhdG9ycygpLmNsZWFyKCk7CisJCQkJZ2V0R3JhcGhEZWNvcmF0b3JzKCkuYWRkQWxsKChDb2xsZWN0aW9uPD8gZXh0ZW5kcyBHcmFwaERlY29yYXRvcj4pbmV3VmFsdWUpOworCQkJCXJldHVybjsKKwkJCWNhc2UgTW9kZWxQYWNrYWdlLk1PREVMX19OT0RFX0RFQ09SQVRPUlM6CisJCQkJZ2V0Tm9kZURlY29yYXRvcnMoKS5jbGVhcigpOworCQkJCWdldE5vZGVEZWNvcmF0b3JzKCkuYWRkQWxsKChDb2xsZWN0aW9uPD8gZXh0ZW5kcyBOb2RlRGVjb3JhdG9yPiluZXdWYWx1ZSk7CisJCQkJcmV0dXJuOworCQkJY2FzZSBNb2RlbFBhY2thZ2UuTU9ERUxfX0VER0VfREVDT1JBVE9SUzoKKwkJCQlnZXRFZGdlRGVjb3JhdG9ycygpLmNsZWFyKCk7CisJCQkJZ2V0RWRnZURlY29yYXRvcnMoKS5hZGRBbGwoKENvbGxlY3Rpb248PyBleHRlbmRzIEVkZ2VEZWNvcmF0b3I+KW5ld1ZhbHVlKTsKKwkJCQlyZXR1cm47CisJCX0KKwkJc3VwZXIuZVNldChmZWF0dXJlSUQsIG5ld1ZhbHVlKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgZVVuc2V0KGludCBmZWF0dXJlSUQpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJCWNhc2UgTW9kZWxQYWNrYWdlLk1PREVMX19NT0RFTFM6CisJCQkJZ2V0TW9kZWxzKCkuY2xlYXIoKTsKKwkJCQlyZXR1cm47CisJCQljYXNlIE1vZGVsUGFja2FnZS5NT0RFTF9fR1JBUEhTOgorCQkJCWdldEdyYXBocygpLmNsZWFyKCk7CisJCQkJcmV0dXJuOworCQkJY2FzZSBNb2RlbFBhY2thZ2UuTU9ERUxfX0dSQVBIX0RFQ09SQVRPUlM6CisJCQkJZ2V0R3JhcGhEZWNvcmF0b3JzKCkuY2xlYXIoKTsKKwkJCQlyZXR1cm47CisJCQljYXNlIE1vZGVsUGFja2FnZS5NT0RFTF9fTk9ERV9ERUNPUkFUT1JTOgorCQkJCWdldE5vZGVEZWNvcmF0b3JzKCkuY2xlYXIoKTsKKwkJCQlyZXR1cm47CisJCQljYXNlIE1vZGVsUGFja2FnZS5NT0RFTF9fRURHRV9ERUNPUkFUT1JTOgorCQkJCWdldEVkZ2VEZWNvcmF0b3JzKCkuY2xlYXIoKTsKKwkJCQlyZXR1cm47CisJCX0KKwkJc3VwZXIuZVVuc2V0KGZlYXR1cmVJRCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBib29sZWFuIGVJc1NldChpbnQgZmVhdHVyZUlEKSB7CisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7CisJCQljYXNlIE1vZGVsUGFja2FnZS5NT0RFTF9fTU9ERUxTOgorCQkJCXJldHVybiBtb2RlbHMgIT0gbnVsbCAmJiAhbW9kZWxzLmlzRW1wdHkoKTsKKwkJCWNhc2UgTW9kZWxQYWNrYWdlLk1PREVMX19HUkFQSFM6CisJCQkJcmV0dXJuIGdyYXBocyAhPSBudWxsICYmICFncmFwaHMuaXNFbXB0eSgpOworCQkJY2FzZSBNb2RlbFBhY2thZ2UuTU9ERUxfX0dSQVBIX0RFQ09SQVRPUlM6CisJCQkJcmV0dXJuIGdyYXBoRGVjb3JhdG9ycyAhPSBudWxsICYmICFncmFwaERlY29yYXRvcnMuaXNFbXB0eSgpOworCQkJY2FzZSBNb2RlbFBhY2thZ2UuTU9ERUxfX05PREVfREVDT1JBVE9SUzoKKwkJCQlyZXR1cm4gbm9kZURlY29yYXRvcnMgIT0gbnVsbCAmJiAhbm9kZURlY29yYXRvcnMuaXNFbXB0eSgpOworCQkJY2FzZSBNb2RlbFBhY2thZ2UuTU9ERUxfX0VER0VfREVDT1JBVE9SUzoKKwkJCQlyZXR1cm4gZWRnZURlY29yYXRvcnMgIT0gbnVsbCAmJiAhZWRnZURlY29yYXRvcnMuaXNFbXB0eSgpOworCQl9CisJCXJldHVybiBzdXBlci5lSXNTZXQoZmVhdHVyZUlEKTsKKwl9CisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29tbW9uLmltcGwuSWRlbnRpZmlhYmxlSW1wbCN0b1N0cmluZygpCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIFN0cmluZyB0b1N0cmluZygpIHsKKwkJZmluYWwgU3RyaW5nQnVpbGRlciBzYiA9IG5ldyBTdHJpbmdCdWlsZGVyKCJcIiIgKyBnZXRVUkkoKS5sYXN0U2VnbWVudCgpCisJCQkJKyAiXCJcbiIpOworCisJCXNiLmFwcGVuZChnZXRNb2RlbHMoKSAhPSBudWxsID8gZ2V0TW9kZWxzKCkuc2l6ZSgpICsgIiBtb2RlbHNcbiIgOiAiIik7CisJCXNiLmFwcGVuZChnZXRHcmFwaHMoKSAhPSBudWxsID8gZ2V0R3JhcGhzKCkuc2l6ZSgpICsgIiBncmFwaHNcbiIgOiAiIik7CisJCXNiLmFwcGVuZChnZXRHcmFwaERlY29yYXRvcnMoKSAhPSBudWxsID8gZ2V0R3JhcGhEZWNvcmF0b3JzKCkuc2l6ZSgpCisJCQkJKyAiIGdyYXBoIGRlY29yYXRvcnNcbiIgOiAiIik7CisJCXNiLmFwcGVuZChnZXROb2RlRGVjb3JhdG9ycygpICE9IG51bGwgPyBnZXROb2RlRGVjb3JhdG9ycygpLnNpemUoKQorCQkJCSsgIiBub2RlIGRlY29yYXRvcnNcbiIgOiAiIik7CisJCXNiLmFwcGVuZChnZXRFZGdlRGVjb3JhdG9ycygpICE9IG51bGwgPyBnZXRFZGdlRGVjb3JhdG9ycygpLnNpemUoKQorCQkJCSsgImVkZ2UgZGVjb3JhdG9yc1xuIiA6ICIiKTsKKworCQlyZXR1cm4gc2IudG9TdHJpbmcoKTsKKwl9IC8vIHRvU3RyaW5nCisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29tbW9uLmltcGwuSWRlbnRpZmlhYmxlSW1wbCNzYW5lKCkKKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBib29sZWFuIHNhbmUoKSB7CisJCWJvb2xlYW4gcmV0VmFsdWUgPSBzdXBlci5zYW5lKCk7CisKKwkJaWYgKHJldFZhbHVlICYmIGdldE1vZGVscygpICE9IG51bGwpIHsKKwkJCWZvciAoZmluYWwgSXRlcmF0b3I8TW9kZWw+IG1vZGVsSXRlciA9IGdldE1vZGVscygpLml0ZXJhdG9yKCk7IG1vZGVsSXRlcgorCQkJCQkuaGFzTmV4dCgpCisJCQkJCSYmIHJldFZhbHVlOykgeworCQkJCWZpbmFsIE1vZGVsIG1vZGVsID0gKE1vZGVsKSBtb2RlbEl0ZXIubmV4dCgpOworCQkJCXJldFZhbHVlID0gcmV0VmFsdWUgJiYgbW9kZWwuc2FuZSgpOworCQkJCWFzc2VydCByZXRWYWx1ZTsKKwkJCX0gLy8gZm9yIGVhY2ggbW9kZWwKKwkJfQorCisJCWlmIChyZXRWYWx1ZSAmJiBnZXRHcmFwaHMoKSAhPSBudWxsKSB7CisJCQlmb3IgKGZpbmFsIEl0ZXJhdG9yPEdyYXBoPiBncmFwaEl0ZXIgPSBnZXRHcmFwaHMoKS5pdGVyYXRvcigpOyBncmFwaEl0ZXIKKwkJCQkJLmhhc05leHQoKQorCQkJCQkmJiByZXRWYWx1ZTspIHsKKwkJCQlmaW5hbCBHcmFwaCBncmFwaCA9IChHcmFwaCkgZ3JhcGhJdGVyLm5leHQoKTsKKwkJCQlyZXRWYWx1ZSA9IHJldFZhbHVlICYmIGdyYXBoLnNhbmUoKTsKKwkJCQlhc3NlcnQgcmV0VmFsdWU7CisJCQl9IC8vIGZvciBlYWNoIGdyYXBoCisJCX0KKworCQlpZiAocmV0VmFsdWUgJiYgZ2V0R3JhcGhEZWNvcmF0b3JzKCkgIT0gbnVsbCkgeworCQkJZm9yIChmaW5hbCBJdGVyYXRvcjxHcmFwaERlY29yYXRvcj4gZ3JhcGhEZWNvcmF0b3JJdGVyID0gZ2V0R3JhcGhEZWNvcmF0b3JzKCkuaXRlcmF0b3IoKTsgZ3JhcGhEZWNvcmF0b3JJdGVyCisJCQkJCS5oYXNOZXh0KCkKKwkJCQkJJiYgcmV0VmFsdWU7KSB7CisJCQkJZmluYWwgR3JhcGhEZWNvcmF0b3IgZ3JhcGhEZWNvcmF0b3IgPSAoR3JhcGhEZWNvcmF0b3IpIGdyYXBoRGVjb3JhdG9ySXRlcgorCQkJCQkJLm5leHQoKTsKKwkJCQlyZXRWYWx1ZSA9IHJldFZhbHVlICYmIGdyYXBoRGVjb3JhdG9yLnNhbmUoKTsKKwkJCQlhc3NlcnQgcmV0VmFsdWU7CisJCQl9IC8vIGZvciBlYWNoIGdyYXBoRGVjb3JhdG9yCisJCX0gLy8gaWYKKworCQlpZiAocmV0VmFsdWUgJiYgZ2V0Tm9kZURlY29yYXRvcnMoKSAhPSBudWxsKSB7CisJCQlmb3IgKEl0ZXJhdG9yPE5vZGVEZWNvcmF0b3I+IG5vZGVEZWNvcmF0b3JJdGVyID0gZ2V0Tm9kZURlY29yYXRvcnMoKS5pdGVyYXRvcigpOyBub2RlRGVjb3JhdG9ySXRlcgorCQkJCQkuaGFzTmV4dCgpCisJCQkJCSYmIHJldFZhbHVlOykgeworCQkJCU5vZGVEZWNvcmF0b3Igbm9kZURlY29yYXRvciA9IChOb2RlRGVjb3JhdG9yKSBub2RlRGVjb3JhdG9ySXRlcgorCQkJCQkJLm5leHQoKTsKKwkJCQlyZXRWYWx1ZSA9IHJldFZhbHVlICYmIG5vZGVEZWNvcmF0b3Iuc2FuZSgpOworCQkJCWFzc2VydCByZXRWYWx1ZTsKKwkJCX0gLy8gZm9yIGVhY2ggbm9lRGVjb3JhdG9yCisJCX0gLy8gaWYKKworCQlpZiAocmV0VmFsdWUgJiYgZ2V0RWRnZURlY29yYXRvcnMoKSAhPSBudWxsKSB7CisJCQlmb3IgKEl0ZXJhdG9yPEVkZ2VEZWNvcmF0b3I+IGVkZ2VEZWNvcmF0b3JJdGVyID0gZ2V0RWRnZURlY29yYXRvcnMoKS5pdGVyYXRvcigpOyBlZGdlRGVjb3JhdG9ySXRlcgorCQkJCQkuaGFzTmV4dCgpCisJCQkJCSYmIHJldFZhbHVlOykgeworCQkJCUVkZ2VEZWNvcmF0b3IgZWRnZURlY29yYXRvciA9IChFZGdlRGVjb3JhdG9yKSBlZGdlRGVjb3JhdG9ySXRlcgorCQkJCQkJLm5leHQoKTsKKwkJCQlyZXRWYWx1ZSA9IHJldFZhbHVlICYmIGVkZ2VEZWNvcmF0b3Iuc2FuZSgpOworCQkJCWFzc2VydCByZXRWYWx1ZTsKKwkJCX0gLy8gZm9yIGVhY2ggZWRnZURlY29yYXRvcgorCQl9CisJCXJldHVybiByZXRWYWx1ZTsKKwl9IC8vIHNhbmUKK30gLy8gTW9kZWxJbXBsCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL21vZGVsL2ltcGwvTW9kZWxQYWNrYWdlSW1wbC5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9tb2RlbC9pbXBsL01vZGVsUGFja2FnZUltcGwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZDAzNTEwCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9tb2RlbC9pbXBsL01vZGVsUGFja2FnZUltcGwuamF2YQpAQCAtMCwwICsxLDU1OSBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuaW1wbDsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuIAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyAKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0IAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwgCisgKiAKKyAqIENvbnRyaWJ1dG9yczogCisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgCitpbXBvcnQgamF2YS5sYW5nLkNvbXBhcmFibGU7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVBdHRyaWJ1dGU7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzczsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUdlbmVyaWNUeXBlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT3BlcmF0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRVJlZmVyZW5jZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRWNvcmVQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5pbXBsLkVQYWNrYWdlSW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLkNvbW1vblBhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5pbXBsLkNvbW1vblBhY2thZ2VJbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5leHBlcmltZW50LkV4cGVyaW1lbnRQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5leHBlcmltZW50LmltcGwuRXhwZXJpbWVudFBhY2thZ2VJbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5HcmFwaFBhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmltcGwuR3JhcGhQYWNrYWdlSW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubG9nZ2VyLkxvZ2dlclBhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmxvZ2dlci5pbXBsLkxvZ2dlclBhY2thZ2VJbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5EZWNvcmF0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLkVkZ2VEZWNvcmF0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLkdyYXBoRGVjb3JhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5JbnRlZ3JhdGlvbkRlY29yYXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuTW9kZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLk1vZGVsRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuTW9kZWxQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5Ob2RlRGVjb3JhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5TVEVNVGltZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuTW9kaWZpZXJQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5pbXBsLk1vZGlmaWVyUGFja2FnZUltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZS5QcmVkaWNhdGVQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUuaW1wbC5QcmVkaWNhdGVQYWNrYWdlSW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2NlbmFyaW8uU2NlbmFyaW9QYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zY2VuYXJpby5pbXBsLlNjZW5hcmlvUGFja2FnZUltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNlcXVlbmNlci5TZXF1ZW5jZXJQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zZXF1ZW5jZXIuaW1wbC5TZXF1ZW5jZXJQYWNrYWdlSW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc29sdmVyLlNvbHZlclBhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNvbHZlci5pbXBsLlNvbHZlclBhY2thZ2VJbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS50cmlnZ2VyLlRyaWdnZXJQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS50cmlnZ2VyLmltcGwuVHJpZ2dlclBhY2thZ2VJbXBsOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiBBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgbW9kZWwgPGI+UGFja2FnZTwvYj4uCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIE1vZGVsUGFja2FnZUltcGwgZXh0ZW5kcyBFUGFja2FnZUltcGwgaW1wbGVtZW50cyBNb2RlbFBhY2thZ2UgeworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByaXZhdGUgRUNsYXNzIGRlY29yYXRvckVDbGFzcyA9IG51bGw7CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcml2YXRlIEVDbGFzcyBlZGdlRGVjb3JhdG9yRUNsYXNzID0gbnVsbDsKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByaXZhdGUgRUNsYXNzIGdyYXBoRGVjb3JhdG9yRUNsYXNzID0gbnVsbDsKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByaXZhdGUgRUNsYXNzIG1vZGVsRUNsYXNzID0gbnVsbDsKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByaXZhdGUgRUNsYXNzIG5vZGVEZWNvcmF0b3JFQ2xhc3MgPSBudWxsOworCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJpdmF0ZSBFQ2xhc3Mgc3RlbVRpbWVFQ2xhc3MgPSBudWxsOworCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJpdmF0ZSBFQ2xhc3MgY29tcGFyYWJsZUVDbGFzcyA9IG51bGw7CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcml2YXRlIEVDbGFzcyBpbnRlZ3JhdGlvbkRlY29yYXRvckVDbGFzcyA9IG51bGw7CisKKwkvKioKKwkgKiBDcmVhdGVzIGFuIGluc3RhbmNlIG9mIHRoZSBtb2RlbCA8Yj5QYWNrYWdlPC9iPiwgcmVnaXN0ZXJlZCB3aXRoCisJICoge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FUGFja2FnZS5SZWdpc3RyeSBFUGFja2FnZS5SZWdpc3RyeX0gYnkgdGhlIHBhY2thZ2UKKwkgKiBwYWNrYWdlIFVSSSB2YWx1ZS4KKwkgKiA8cD5Ob3RlOiB0aGUgY29ycmVjdCB3YXkgdG8gY3JlYXRlIHRoZSBwYWNrYWdlIGlzIHZpYSB0aGUgc3RhdGljCisJICogZmFjdG9yeSBtZXRob2Qge0BsaW5rICNpbml0IGluaXQoKX0sIHdoaWNoIGFsc28gcGVyZm9ybXMKKwkgKiBpbml0aWFsaXphdGlvbiBvZiB0aGUgcGFja2FnZSwgb3IgcmV0dXJucyB0aGUgcmVnaXN0ZXJlZCBwYWNrYWdlLAorCSAqIGlmIG9uZSBhbHJlYWR5IGV4aXN0cy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVQYWNrYWdlLlJlZ2lzdHJ5CisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuTW9kZWxQYWNrYWdlI2VOU19VUkkKKwkgKiBAc2VlICNpbml0KCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJpdmF0ZSBNb2RlbFBhY2thZ2VJbXBsKCkgeworCQlzdXBlcihlTlNfVVJJLCBNb2RlbEZhY3RvcnkuZUlOU1RBTkNFKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcml2YXRlIHN0YXRpYyBib29sZWFuIGlzSW5pdGVkID0gZmFsc2U7CisKKwkvKioKKwkgKiBDcmVhdGVzLCByZWdpc3RlcnMsIGFuZCBpbml0aWFsaXplcyB0aGUgPGI+UGFja2FnZTwvYj4gZm9yIHRoaXMgbW9kZWwsIGFuZCBmb3IgYW55IG90aGVycyB1cG9uIHdoaWNoIGl0IGRlcGVuZHMuCisJICogCisJICogPHA+VGhpcyBtZXRob2QgaXMgdXNlZCB0byBpbml0aWFsaXplIHtAbGluayBNb2RlbFBhY2thZ2UjZUlOU1RBTkNFfSB3aGVuIHRoYXQgZmllbGQgaXMgYWNjZXNzZWQuCisJICogQ2xpZW50cyBzaG91bGQgbm90IGludm9rZSBpdCBkaXJlY3RseS4gSW5zdGVhZCwgdGhleSBzaG91bGQgc2ltcGx5IGFjY2VzcyB0aGF0IGZpZWxkIHRvIG9idGFpbiB0aGUgcGFja2FnZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI2VOU19VUkkKKwkgKiBAc2VlICNjcmVhdGVQYWNrYWdlQ29udGVudHMoKQorCSAqIEBzZWUgI2luaXRpYWxpemVQYWNrYWdlQ29udGVudHMoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgc3RhdGljIE1vZGVsUGFja2FnZSBpbml0KCkgeworCQlpZiAoaXNJbml0ZWQpIHJldHVybiAoTW9kZWxQYWNrYWdlKUVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVQYWNrYWdlKE1vZGVsUGFja2FnZS5lTlNfVVJJKTsKKworCQkvLyBPYnRhaW4gb3IgY3JlYXRlIGFuZCByZWdpc3RlciBwYWNrYWdlCisJCU1vZGVsUGFja2FnZUltcGwgdGhlTW9kZWxQYWNrYWdlID0gKE1vZGVsUGFja2FnZUltcGwpKEVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldChlTlNfVVJJKSBpbnN0YW5jZW9mIE1vZGVsUGFja2FnZUltcGwgPyBFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXQoZU5TX1VSSSkgOiBuZXcgTW9kZWxQYWNrYWdlSW1wbCgpKTsKKworCQlpc0luaXRlZCA9IHRydWU7CisKKwkJLy8gSW5pdGlhbGl6ZSBzaW1wbGUgZGVwZW5kZW5jaWVzCisJCUVjb3JlUGFja2FnZS5lSU5TVEFOQ0UuZUNsYXNzKCk7CisKKwkJLy8gT2J0YWluIG9yIGNyZWF0ZSBhbmQgcmVnaXN0ZXIgaW50ZXJkZXBlbmRlbmNpZXMKKwkJQ29tbW9uUGFja2FnZUltcGwgdGhlQ29tbW9uUGFja2FnZSA9IChDb21tb25QYWNrYWdlSW1wbCkoRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RVBhY2thZ2UoQ29tbW9uUGFja2FnZS5lTlNfVVJJKSBpbnN0YW5jZW9mIENvbW1vblBhY2thZ2VJbXBsID8gRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RVBhY2thZ2UoQ29tbW9uUGFja2FnZS5lTlNfVVJJKSA6IENvbW1vblBhY2thZ2UuZUlOU1RBTkNFKTsKKwkJRXhwZXJpbWVudFBhY2thZ2VJbXBsIHRoZUV4cGVyaW1lbnRQYWNrYWdlID0gKEV4cGVyaW1lbnRQYWNrYWdlSW1wbCkoRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RVBhY2thZ2UoRXhwZXJpbWVudFBhY2thZ2UuZU5TX1VSSSkgaW5zdGFuY2VvZiBFeHBlcmltZW50UGFja2FnZUltcGwgPyBFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShFeHBlcmltZW50UGFja2FnZS5lTlNfVVJJKSA6IEV4cGVyaW1lbnRQYWNrYWdlLmVJTlNUQU5DRSk7CisJCUdyYXBoUGFja2FnZUltcGwgdGhlR3JhcGhQYWNrYWdlID0gKEdyYXBoUGFja2FnZUltcGwpKEVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVQYWNrYWdlKEdyYXBoUGFja2FnZS5lTlNfVVJJKSBpbnN0YW5jZW9mIEdyYXBoUGFja2FnZUltcGwgPyBFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShHcmFwaFBhY2thZ2UuZU5TX1VSSSkgOiBHcmFwaFBhY2thZ2UuZUlOU1RBTkNFKTsKKwkJTW9kaWZpZXJQYWNrYWdlSW1wbCB0aGVNb2RpZmllclBhY2thZ2UgPSAoTW9kaWZpZXJQYWNrYWdlSW1wbCkoRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RVBhY2thZ2UoTW9kaWZpZXJQYWNrYWdlLmVOU19VUkkpIGluc3RhbmNlb2YgTW9kaWZpZXJQYWNrYWdlSW1wbCA/IEVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVQYWNrYWdlKE1vZGlmaWVyUGFja2FnZS5lTlNfVVJJKSA6IE1vZGlmaWVyUGFja2FnZS5lSU5TVEFOQ0UpOworCQlQcmVkaWNhdGVQYWNrYWdlSW1wbCB0aGVQcmVkaWNhdGVQYWNrYWdlID0gKFByZWRpY2F0ZVBhY2thZ2VJbXBsKShFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShQcmVkaWNhdGVQYWNrYWdlLmVOU19VUkkpIGluc3RhbmNlb2YgUHJlZGljYXRlUGFja2FnZUltcGwgPyBFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShQcmVkaWNhdGVQYWNrYWdlLmVOU19VUkkpIDogUHJlZGljYXRlUGFja2FnZS5lSU5TVEFOQ0UpOworCQlTY2VuYXJpb1BhY2thZ2VJbXBsIHRoZVNjZW5hcmlvUGFja2FnZSA9IChTY2VuYXJpb1BhY2thZ2VJbXBsKShFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShTY2VuYXJpb1BhY2thZ2UuZU5TX1VSSSkgaW5zdGFuY2VvZiBTY2VuYXJpb1BhY2thZ2VJbXBsID8gRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RVBhY2thZ2UoU2NlbmFyaW9QYWNrYWdlLmVOU19VUkkpIDogU2NlbmFyaW9QYWNrYWdlLmVJTlNUQU5DRSk7CisJCVNlcXVlbmNlclBhY2thZ2VJbXBsIHRoZVNlcXVlbmNlclBhY2thZ2UgPSAoU2VxdWVuY2VyUGFja2FnZUltcGwpKEVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVQYWNrYWdlKFNlcXVlbmNlclBhY2thZ2UuZU5TX1VSSSkgaW5zdGFuY2VvZiBTZXF1ZW5jZXJQYWNrYWdlSW1wbCA/IEVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVQYWNrYWdlKFNlcXVlbmNlclBhY2thZ2UuZU5TX1VSSSkgOiBTZXF1ZW5jZXJQYWNrYWdlLmVJTlNUQU5DRSk7CisJCVRyaWdnZXJQYWNrYWdlSW1wbCB0aGVUcmlnZ2VyUGFja2FnZSA9IChUcmlnZ2VyUGFja2FnZUltcGwpKEVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVQYWNrYWdlKFRyaWdnZXJQYWNrYWdlLmVOU19VUkkpIGluc3RhbmNlb2YgVHJpZ2dlclBhY2thZ2VJbXBsID8gRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RVBhY2thZ2UoVHJpZ2dlclBhY2thZ2UuZU5TX1VSSSkgOiBUcmlnZ2VyUGFja2FnZS5lSU5TVEFOQ0UpOworCQlTb2x2ZXJQYWNrYWdlSW1wbCB0aGVTb2x2ZXJQYWNrYWdlID0gKFNvbHZlclBhY2thZ2VJbXBsKShFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShTb2x2ZXJQYWNrYWdlLmVOU19VUkkpIGluc3RhbmNlb2YgU29sdmVyUGFja2FnZUltcGwgPyBFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShTb2x2ZXJQYWNrYWdlLmVOU19VUkkpIDogU29sdmVyUGFja2FnZS5lSU5TVEFOQ0UpOworCQlMb2dnZXJQYWNrYWdlSW1wbCB0aGVMb2dnZXJQYWNrYWdlID0gKExvZ2dlclBhY2thZ2VJbXBsKShFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShMb2dnZXJQYWNrYWdlLmVOU19VUkkpIGluc3RhbmNlb2YgTG9nZ2VyUGFja2FnZUltcGwgPyBFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShMb2dnZXJQYWNrYWdlLmVOU19VUkkpIDogTG9nZ2VyUGFja2FnZS5lSU5TVEFOQ0UpOworCisJCS8vIENyZWF0ZSBwYWNrYWdlIG1ldGEtZGF0YSBvYmplY3RzCisJCXRoZU1vZGVsUGFja2FnZS5jcmVhdGVQYWNrYWdlQ29udGVudHMoKTsKKwkJdGhlQ29tbW9uUGFja2FnZS5jcmVhdGVQYWNrYWdlQ29udGVudHMoKTsKKwkJdGhlRXhwZXJpbWVudFBhY2thZ2UuY3JlYXRlUGFja2FnZUNvbnRlbnRzKCk7CisJCXRoZUdyYXBoUGFja2FnZS5jcmVhdGVQYWNrYWdlQ29udGVudHMoKTsKKwkJdGhlTW9kaWZpZXJQYWNrYWdlLmNyZWF0ZVBhY2thZ2VDb250ZW50cygpOworCQl0aGVQcmVkaWNhdGVQYWNrYWdlLmNyZWF0ZVBhY2thZ2VDb250ZW50cygpOworCQl0aGVTY2VuYXJpb1BhY2thZ2UuY3JlYXRlUGFja2FnZUNvbnRlbnRzKCk7CisJCXRoZVNlcXVlbmNlclBhY2thZ2UuY3JlYXRlUGFja2FnZUNvbnRlbnRzKCk7CisJCXRoZVRyaWdnZXJQYWNrYWdlLmNyZWF0ZVBhY2thZ2VDb250ZW50cygpOworCQl0aGVTb2x2ZXJQYWNrYWdlLmNyZWF0ZVBhY2thZ2VDb250ZW50cygpOworCQl0aGVMb2dnZXJQYWNrYWdlLmNyZWF0ZVBhY2thZ2VDb250ZW50cygpOworCisJCS8vIEluaXRpYWxpemUgY3JlYXRlZCBtZXRhLWRhdGEKKwkJdGhlTW9kZWxQYWNrYWdlLmluaXRpYWxpemVQYWNrYWdlQ29udGVudHMoKTsKKwkJdGhlQ29tbW9uUGFja2FnZS5pbml0aWFsaXplUGFja2FnZUNvbnRlbnRzKCk7CisJCXRoZUV4cGVyaW1lbnRQYWNrYWdlLmluaXRpYWxpemVQYWNrYWdlQ29udGVudHMoKTsKKwkJdGhlR3JhcGhQYWNrYWdlLmluaXRpYWxpemVQYWNrYWdlQ29udGVudHMoKTsKKwkJdGhlTW9kaWZpZXJQYWNrYWdlLmluaXRpYWxpemVQYWNrYWdlQ29udGVudHMoKTsKKwkJdGhlUHJlZGljYXRlUGFja2FnZS5pbml0aWFsaXplUGFja2FnZUNvbnRlbnRzKCk7CisJCXRoZVNjZW5hcmlvUGFja2FnZS5pbml0aWFsaXplUGFja2FnZUNvbnRlbnRzKCk7CisJCXRoZVNlcXVlbmNlclBhY2thZ2UuaW5pdGlhbGl6ZVBhY2thZ2VDb250ZW50cygpOworCQl0aGVUcmlnZ2VyUGFja2FnZS5pbml0aWFsaXplUGFja2FnZUNvbnRlbnRzKCk7CisJCXRoZVNvbHZlclBhY2thZ2UuaW5pdGlhbGl6ZVBhY2thZ2VDb250ZW50cygpOworCQl0aGVMb2dnZXJQYWNrYWdlLmluaXRpYWxpemVQYWNrYWdlQ29udGVudHMoKTsKKworCQkvLyBNYXJrIG1ldGEtZGF0YSB0byBpbmRpY2F0ZSBpdCBjYW4ndCBiZSBjaGFuZ2VkCisJCXRoZU1vZGVsUGFja2FnZS5mcmVlemUoKTsKKworICAKKwkJLy8gVXBkYXRlIHRoZSByZWdpc3RyeSBhbmQgcmV0dXJuIHRoZSBwYWNrYWdlCisJCUVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLnB1dChNb2RlbFBhY2thZ2UuZU5TX1VSSSwgdGhlTW9kZWxQYWNrYWdlKTsKKwkJcmV0dXJuIHRoZU1vZGVsUGFja2FnZTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUNsYXNzIGdldERlY29yYXRvcigpIHsKKwkJcmV0dXJuIGRlY29yYXRvckVDbGFzczsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRVJlZmVyZW5jZSBnZXREZWNvcmF0b3JfTGFiZWxzVG9VcGRhdGUoKSB7CisJCXJldHVybiAoRVJlZmVyZW5jZSlkZWNvcmF0b3JFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgwKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRVJlZmVyZW5jZSBnZXREZWNvcmF0b3JfR3JhcGgoKSB7CisJCXJldHVybiAoRVJlZmVyZW5jZSlkZWNvcmF0b3JFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgxKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUF0dHJpYnV0ZSBnZXREZWNvcmF0b3JfRW5hYmxlZCgpIHsKKwkJcmV0dXJuIChFQXR0cmlidXRlKWRlY29yYXRvckVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDIpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQXR0cmlidXRlIGdldERlY29yYXRvcl9HcmFwaERlY29yYXRlZCgpIHsKKwkJcmV0dXJuIChFQXR0cmlidXRlKWRlY29yYXRvckVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDMpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQXR0cmlidXRlIGdldERlY29yYXRvcl9Qcm9ncmVzcygpIHsKKwkJcmV0dXJuIChFQXR0cmlidXRlKWRlY29yYXRvckVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDQpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQ2xhc3MgZ2V0RWRnZURlY29yYXRvcigpIHsKKwkJcmV0dXJuIGVkZ2VEZWNvcmF0b3JFQ2xhc3M7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVDbGFzcyBnZXRHcmFwaERlY29yYXRvcigpIHsKKwkJcmV0dXJuIGdyYXBoRGVjb3JhdG9yRUNsYXNzOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQ2xhc3MgZ2V0TW9kZWwoKSB7CisJCXJldHVybiBtb2RlbEVDbGFzczsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRVJlZmVyZW5jZSBnZXRNb2RlbF9Nb2RlbHMoKSB7CisJCXJldHVybiAoRVJlZmVyZW5jZSltb2RlbEVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDApOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFUmVmZXJlbmNlIGdldE1vZGVsX0dyYXBocygpIHsKKwkJcmV0dXJuIChFUmVmZXJlbmNlKW1vZGVsRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVSZWZlcmVuY2UgZ2V0TW9kZWxfR3JhcGhEZWNvcmF0b3JzKCkgeworCQlyZXR1cm4gKEVSZWZlcmVuY2UpbW9kZWxFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgyKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRVJlZmVyZW5jZSBnZXRNb2RlbF9Ob2RlRGVjb3JhdG9ycygpIHsKKwkJcmV0dXJuIChFUmVmZXJlbmNlKW1vZGVsRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMyk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVSZWZlcmVuY2UgZ2V0TW9kZWxfRWRnZURlY29yYXRvcnMoKSB7CisJCXJldHVybiAoRVJlZmVyZW5jZSltb2RlbEVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDQpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQ2xhc3MgZ2V0Tm9kZURlY29yYXRvcigpIHsKKwkJcmV0dXJuIG5vZGVEZWNvcmF0b3JFQ2xhc3M7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVDbGFzcyBnZXRTVEVNVGltZSgpIHsKKwkJcmV0dXJuIHN0ZW1UaW1lRUNsYXNzOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQXR0cmlidXRlIGdldFNURU1UaW1lX1RpbWUoKSB7CisJCXJldHVybiAoRUF0dHJpYnV0ZSlzdGVtVGltZUVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDApOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQ2xhc3MgZ2V0Q29tcGFyYWJsZSgpIHsKKwkJcmV0dXJuIGNvbXBhcmFibGVFQ2xhc3M7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVDbGFzcyBnZXRJbnRlZ3JhdGlvbkRlY29yYXRvcigpIHsKKwkJcmV0dXJuIGludGVncmF0aW9uRGVjb3JhdG9yRUNsYXNzOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBNb2RlbEZhY3RvcnkgZ2V0TW9kZWxGYWN0b3J5KCkgeworCQlyZXR1cm4gKE1vZGVsRmFjdG9yeSlnZXRFRmFjdG9yeUluc3RhbmNlKCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJpdmF0ZSBib29sZWFuIGlzQ3JlYXRlZCA9IGZhbHNlOworCisJLyoqCisJICogQ3JlYXRlcyB0aGUgbWV0YS1tb2RlbCBvYmplY3RzIGZvciB0aGUgcGFja2FnZS4gIFRoaXMgbWV0aG9kIGlzCisJICogZ3VhcmRlZCB0byBoYXZlIG5vIGFmZmVjdCBvbiBhbnkgaW52b2NhdGlvbiBidXQgaXRzIGZpcnN0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIGNyZWF0ZVBhY2thZ2VDb250ZW50cygpIHsKKwkJaWYgKGlzQ3JlYXRlZCkgcmV0dXJuOworCQlpc0NyZWF0ZWQgPSB0cnVlOworCisJCS8vIENyZWF0ZSBjbGFzc2VzIGFuZCB0aGVpciBmZWF0dXJlcworCQlkZWNvcmF0b3JFQ2xhc3MgPSBjcmVhdGVFQ2xhc3MoREVDT1JBVE9SKTsKKwkJY3JlYXRlRVJlZmVyZW5jZShkZWNvcmF0b3JFQ2xhc3MsIERFQ09SQVRPUl9fTEFCRUxTX1RPX1VQREFURSk7CisJCWNyZWF0ZUVSZWZlcmVuY2UoZGVjb3JhdG9yRUNsYXNzLCBERUNPUkFUT1JfX0dSQVBIKTsKKwkJY3JlYXRlRUF0dHJpYnV0ZShkZWNvcmF0b3JFQ2xhc3MsIERFQ09SQVRPUl9fRU5BQkxFRCk7CisJCWNyZWF0ZUVBdHRyaWJ1dGUoZGVjb3JhdG9yRUNsYXNzLCBERUNPUkFUT1JfX0dSQVBIX0RFQ09SQVRFRCk7CisJCWNyZWF0ZUVBdHRyaWJ1dGUoZGVjb3JhdG9yRUNsYXNzLCBERUNPUkFUT1JfX1BST0dSRVNTKTsKKworCQllZGdlRGVjb3JhdG9yRUNsYXNzID0gY3JlYXRlRUNsYXNzKEVER0VfREVDT1JBVE9SKTsKKworCQlncmFwaERlY29yYXRvckVDbGFzcyA9IGNyZWF0ZUVDbGFzcyhHUkFQSF9ERUNPUkFUT1IpOworCisJCW1vZGVsRUNsYXNzID0gY3JlYXRlRUNsYXNzKE1PREVMKTsKKwkJY3JlYXRlRVJlZmVyZW5jZShtb2RlbEVDbGFzcywgTU9ERUxfX01PREVMUyk7CisJCWNyZWF0ZUVSZWZlcmVuY2UobW9kZWxFQ2xhc3MsIE1PREVMX19HUkFQSFMpOworCQljcmVhdGVFUmVmZXJlbmNlKG1vZGVsRUNsYXNzLCBNT0RFTF9fR1JBUEhfREVDT1JBVE9SUyk7CisJCWNyZWF0ZUVSZWZlcmVuY2UobW9kZWxFQ2xhc3MsIE1PREVMX19OT0RFX0RFQ09SQVRPUlMpOworCQljcmVhdGVFUmVmZXJlbmNlKG1vZGVsRUNsYXNzLCBNT0RFTF9fRURHRV9ERUNPUkFUT1JTKTsKKworCQlub2RlRGVjb3JhdG9yRUNsYXNzID0gY3JlYXRlRUNsYXNzKE5PREVfREVDT1JBVE9SKTsKKworCQlzdGVtVGltZUVDbGFzcyA9IGNyZWF0ZUVDbGFzcyhTVEVNX1RJTUUpOworCQljcmVhdGVFQXR0cmlidXRlKHN0ZW1UaW1lRUNsYXNzLCBTVEVNX1RJTUVfX1RJTUUpOworCisJCWNvbXBhcmFibGVFQ2xhc3MgPSBjcmVhdGVFQ2xhc3MoQ09NUEFSQUJMRSk7CisKKwkJaW50ZWdyYXRpb25EZWNvcmF0b3JFQ2xhc3MgPSBjcmVhdGVFQ2xhc3MoSU5URUdSQVRJT05fREVDT1JBVE9SKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcml2YXRlIGJvb2xlYW4gaXNJbml0aWFsaXplZCA9IGZhbHNlOworCisJLyoqCisJICogQ29tcGxldGUgdGhlIGluaXRpYWxpemF0aW9uIG9mIHRoZSBwYWNrYWdlIGFuZCBpdHMgbWV0YS1tb2RlbC4gIFRoaXMKKwkgKiBtZXRob2QgaXMgZ3VhcmRlZCB0byBoYXZlIG5vIGFmZmVjdCBvbiBhbnkgaW52b2NhdGlvbiBidXQgaXRzIGZpcnN0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIGluaXRpYWxpemVQYWNrYWdlQ29udGVudHMoKSB7CisJCWlmIChpc0luaXRpYWxpemVkKSByZXR1cm47CisJCWlzSW5pdGlhbGl6ZWQgPSB0cnVlOworCisJCS8vIEluaXRpYWxpemUgcGFja2FnZQorCQlzZXROYW1lKGVOQU1FKTsKKwkJc2V0TnNQcmVmaXgoZU5TX1BSRUZJWCk7CisJCXNldE5zVVJJKGVOU19VUkkpOworCisJCS8vIE9idGFpbiBvdGhlciBkZXBlbmRlbnQgcGFja2FnZXMKKwkJQ29tbW9uUGFja2FnZSB0aGVDb21tb25QYWNrYWdlID0gKENvbW1vblBhY2thZ2UpRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RVBhY2thZ2UoQ29tbW9uUGFja2FnZS5lTlNfVVJJKTsKKwkJR3JhcGhQYWNrYWdlIHRoZUdyYXBoUGFja2FnZSA9IChHcmFwaFBhY2thZ2UpRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RVBhY2thZ2UoR3JhcGhQYWNrYWdlLmVOU19VUkkpOworCQlFY29yZVBhY2thZ2UgdGhlRWNvcmVQYWNrYWdlID0gKEVjb3JlUGFja2FnZSlFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShFY29yZVBhY2thZ2UuZU5TX1VSSSk7CisKKwkJLy8gQ3JlYXRlIHR5cGUgcGFyYW1ldGVycworCQlhZGRFVHlwZVBhcmFtZXRlcihjb21wYXJhYmxlRUNsYXNzLCAiVCIpOyAvLyROT04tTkxTLTEkCisKKwkJLy8gU2V0IGJvdW5kcyBmb3IgdHlwZSBwYXJhbWV0ZXJzCisKKwkJLy8gQWRkIHN1cGVydHlwZXMgdG8gY2xhc3NlcworCQlkZWNvcmF0b3JFQ2xhc3MuZ2V0RVN1cGVyVHlwZXMoKS5hZGQodGhlQ29tbW9uUGFja2FnZS5nZXRJZGVudGlmaWFibGUoKSk7CisJCWVkZ2VEZWNvcmF0b3JFQ2xhc3MuZ2V0RVN1cGVyVHlwZXMoKS5hZGQodGhpcy5nZXREZWNvcmF0b3IoKSk7CisJCWdyYXBoRGVjb3JhdG9yRUNsYXNzLmdldEVTdXBlclR5cGVzKCkuYWRkKHRoaXMuZ2V0RGVjb3JhdG9yKCkpOworCQltb2RlbEVDbGFzcy5nZXRFU3VwZXJUeXBlcygpLmFkZCh0aGVDb21tb25QYWNrYWdlLmdldElkZW50aWZpYWJsZSgpKTsKKwkJbm9kZURlY29yYXRvckVDbGFzcy5nZXRFU3VwZXJUeXBlcygpLmFkZCh0aGlzLmdldERlY29yYXRvcigpKTsKKwkJRUdlbmVyaWNUeXBlIGcxID0gY3JlYXRlRUdlbmVyaWNUeXBlKHRoaXMuZ2V0Q29tcGFyYWJsZSgpKTsKKwkJRUdlbmVyaWNUeXBlIGcyID0gY3JlYXRlRUdlbmVyaWNUeXBlKHRoaXMuZ2V0U1RFTVRpbWUoKSk7CisJCWcxLmdldEVUeXBlQXJndW1lbnRzKCkuYWRkKGcyKTsKKwkJc3RlbVRpbWVFQ2xhc3MuZ2V0RUdlbmVyaWNTdXBlclR5cGVzKCkuYWRkKGcxKTsKKwkJaW50ZWdyYXRpb25EZWNvcmF0b3JFQ2xhc3MuZ2V0RVN1cGVyVHlwZXMoKS5hZGQodGhpcy5nZXROb2RlRGVjb3JhdG9yKCkpOworCisJCS8vIEluaXRpYWxpemUgY2xhc3NlcyBhbmQgZmVhdHVyZXM7IGFkZCBvcGVyYXRpb25zIGFuZCBwYXJhbWV0ZXJzCisJCWluaXRFQ2xhc3MoZGVjb3JhdG9yRUNsYXNzLCBEZWNvcmF0b3IuY2xhc3MsICJEZWNvcmF0b3IiLCAhSVNfQUJTVFJBQ1QsICFJU19JTlRFUkZBQ0UsIElTX0dFTkVSQVRFRF9JTlNUQU5DRV9DTEFTUyk7IC8vJE5PTi1OTFMtMSQKKwkJaW5pdEVSZWZlcmVuY2UoZ2V0RGVjb3JhdG9yX0xhYmVsc1RvVXBkYXRlKCksIHRoZUdyYXBoUGFja2FnZS5nZXREeW5hbWljTGFiZWwoKSwgdGhlR3JhcGhQYWNrYWdlLmdldER5bmFtaWNMYWJlbF9EZWNvcmF0b3IoKSwgImxhYmVsc1RvVXBkYXRlIiwgbnVsbCwgMCwgLTEsIERlY29yYXRvci5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfQ09NUE9TSVRFLCBJU19SRVNPTFZFX1BST1hJRVMsICFJU19VTlNFVFRBQkxFLCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsgLy8kTk9OLU5MUy0xJAorCQlpbml0RVJlZmVyZW5jZShnZXREZWNvcmF0b3JfR3JhcGgoKSwgdGhlR3JhcGhQYWNrYWdlLmdldEdyYXBoKCksIHRoZUdyYXBoUGFja2FnZS5nZXRHcmFwaF9EZWNvcmF0b3JzKCksICJncmFwaCIsIG51bGwsIDAsIDEsIERlY29yYXRvci5jbGFzcywgSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19DT01QT1NJVEUsICFJU19SRVNPTFZFX1BST1hJRVMsICFJU19VTlNFVFRBQkxFLCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsgLy8kTk9OLU5MUy0xJAorCQlpbml0RUF0dHJpYnV0ZShnZXREZWNvcmF0b3JfRW5hYmxlZCgpLCBlY29yZVBhY2thZ2UuZ2V0RUJvb2xlYW4oKSwgImVuYWJsZWQiLCAidHJ1ZSIsIDAsIDEsIERlY29yYXRvci5jbGFzcywgSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKKwkJaW5pdEVBdHRyaWJ1dGUoZ2V0RGVjb3JhdG9yX0dyYXBoRGVjb3JhdGVkKCksIGVjb3JlUGFja2FnZS5nZXRFQm9vbGVhbigpLCAiZ3JhcGhEZWNvcmF0ZWQiLCAiZmFsc2UiLCAwLCAxLCBEZWNvcmF0b3IuY2xhc3MsIElTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCisJCWluaXRFQXR0cmlidXRlKGdldERlY29yYXRvcl9Qcm9ncmVzcygpLCBlY29yZVBhY2thZ2UuZ2V0RURvdWJsZSgpLCAicHJvZ3Jlc3MiLCAiMC4wIiwgMCwgMSwgRGVjb3JhdG9yLmNsYXNzLCBJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAorCisJCUVPcGVyYXRpb24gb3AgPSBhZGRFT3BlcmF0aW9uKGRlY29yYXRvckVDbGFzcywgdGhlRWNvcmVQYWNrYWdlLmdldEVCb29sZWFuKCksICJkZWNvcmF0ZUdyYXBoIiwgMCwgMSwgSVNfVU5JUVVFLCBJU19PUkRFUkVEKTsgLy8kTk9OLU5MUy0xJAorCQlhZGRFUGFyYW1ldGVyKG9wLCB0aGlzLmdldFNURU1UaW1lKCksICJ0aW1lIiwgMCwgMSwgSVNfVU5JUVVFLCBJU19PUkRFUkVEKTsgLy8kTk9OLU5MUy0xJAorCisJCW9wID0gYWRkRU9wZXJhdGlvbihkZWNvcmF0b3JFQ2xhc3MsIG51bGwsICJ1cGRhdGVMYWJlbHMiLCAwLCAxLCBJU19VTklRVUUsIElTX09SREVSRUQpOyAvLyROT04tTkxTLTEkCisJCWFkZEVQYXJhbWV0ZXIob3AsIHRoaXMuZ2V0U1RFTVRpbWUoKSwgInRpbWUiLCAwLCAxLCBJU19VTklRVUUsIElTX09SREVSRUQpOyAvLyROT04tTkxTLTEkCisJCWFkZEVQYXJhbWV0ZXIob3AsIGVjb3JlUGFja2FnZS5nZXRFTG9uZygpLCAidGltZXJQZXJpb2QiLCAwLCAxLCBJU19VTklRVUUsIElTX09SREVSRUQpOyAvLyROT04tTkxTLTEkCisJCWFkZEVQYXJhbWV0ZXIob3AsIGVjb3JlUGFja2FnZS5nZXRFSW50KCksICJjeWNsZSIsIDAsIDEsIElTX1VOSVFVRSwgSVNfT1JERVJFRCk7IC8vJE5PTi1OTFMtMSQKKworCQlhZGRFT3BlcmF0aW9uKGRlY29yYXRvckVDbGFzcywgbnVsbCwgInJlc2V0TGFiZWxzIiwgMCwgMSwgSVNfVU5JUVVFLCBJU19PUkRFUkVEKTsgLy8kTk9OLU5MUy0xJAorCisJCW9wID0gYWRkRU9wZXJhdGlvbihkZWNvcmF0b3JFQ2xhc3MsIG51bGwsICJwcmVwYXJlIiwgMCwgMSwgSVNfVU5JUVVFLCBJU19PUkRFUkVEKTsgLy8kTk9OLU5MUy0xJAorCQlhZGRFUGFyYW1ldGVyKG9wLCB0aGlzLmdldE1vZGVsKCksICJtb2RlbCIsIDAsIDEsIElTX1VOSVFVRSwgSVNfT1JERVJFRCk7IC8vJE5PTi1OTFMtMSQKKwkJYWRkRVBhcmFtZXRlcihvcCwgdGhpcy5nZXRTVEVNVGltZSgpLCAidGltZSIsIDAsIDEsIElTX1VOSVFVRSwgSVNfT1JERVJFRCk7IC8vJE5PTi1OTFMtMSQKKworCQlpbml0RUNsYXNzKGVkZ2VEZWNvcmF0b3JFQ2xhc3MsIEVkZ2VEZWNvcmF0b3IuY2xhc3MsICJFZGdlRGVjb3JhdG9yIiwgIUlTX0FCU1RSQUNULCAhSVNfSU5URVJGQUNFLCBJU19HRU5FUkFURURfSU5TVEFOQ0VfQ0xBU1MpOyAvLyROT04tTkxTLTEkCisKKwkJaW5pdEVDbGFzcyhncmFwaERlY29yYXRvckVDbGFzcywgR3JhcGhEZWNvcmF0b3IuY2xhc3MsICJHcmFwaERlY29yYXRvciIsICFJU19BQlNUUkFDVCwgIUlTX0lOVEVSRkFDRSwgSVNfR0VORVJBVEVEX0lOU1RBTkNFX0NMQVNTKTsgLy8kTk9OLU5MUy0xJAorCisJCWluaXRFQ2xhc3MobW9kZWxFQ2xhc3MsIE1vZGVsLmNsYXNzLCAiTW9kZWwiLCAhSVNfQUJTVFJBQ1QsICFJU19JTlRFUkZBQ0UsIElTX0dFTkVSQVRFRF9JTlNUQU5DRV9DTEFTUyk7IC8vJE5PTi1OTFMtMSQKKwkJaW5pdEVSZWZlcmVuY2UoZ2V0TW9kZWxfTW9kZWxzKCksIHRoaXMuZ2V0TW9kZWwoKSwgbnVsbCwgIm1vZGVscyIsIG51bGwsIDAsIC0xLCBNb2RlbC5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfQ09NUE9TSVRFLCBJU19SRVNPTFZFX1BST1hJRVMsICFJU19VTlNFVFRBQkxFLCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsgLy8kTk9OLU5MUy0xJAorCQlpbml0RVJlZmVyZW5jZShnZXRNb2RlbF9HcmFwaHMoKSwgdGhlR3JhcGhQYWNrYWdlLmdldEdyYXBoKCksIG51bGwsICJncmFwaHMiLCBudWxsLCAwLCAtMSwgTW9kZWwuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX0NPTVBPU0lURSwgSVNfUkVTT0xWRV9QUk9YSUVTLCAhSVNfVU5TRVRUQUJMRSwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7IC8vJE5PTi1OTFMtMSQKKwkJaW5pdEVSZWZlcmVuY2UoZ2V0TW9kZWxfR3JhcGhEZWNvcmF0b3JzKCksIHRoaXMuZ2V0R3JhcGhEZWNvcmF0b3IoKSwgbnVsbCwgImdyYXBoRGVjb3JhdG9ycyIsIG51bGwsIDAsIC0xLCBNb2RlbC5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfQ09NUE9TSVRFLCBJU19SRVNPTFZFX1BST1hJRVMsICFJU19VTlNFVFRBQkxFLCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsgLy8kTk9OLU5MUy0xJAorCQlpbml0RVJlZmVyZW5jZShnZXRNb2RlbF9Ob2RlRGVjb3JhdG9ycygpLCB0aGlzLmdldE5vZGVEZWNvcmF0b3IoKSwgbnVsbCwgIm5vZGVEZWNvcmF0b3JzIiwgbnVsbCwgMCwgLTEsIE1vZGVsLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19DT01QT1NJVEUsIElTX1JFU09MVkVfUFJPWElFUywgIUlTX1VOU0VUVEFCTEUsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOyAvLyROT04tTkxTLTEkCisJCWluaXRFUmVmZXJlbmNlKGdldE1vZGVsX0VkZ2VEZWNvcmF0b3JzKCksIHRoaXMuZ2V0RWRnZURlY29yYXRvcigpLCBudWxsLCAiZWRnZURlY29yYXRvcnMiLCBudWxsLCAwLCAtMSwgTW9kZWwuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX0NPTVBPU0lURSwgSVNfUkVTT0xWRV9QUk9YSUVTLCAhSVNfVU5TRVRUQUJMRSwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7IC8vJE5PTi1OTFMtMSQKKworCQlvcCA9IGFkZEVPcGVyYXRpb24obW9kZWxFQ2xhc3MsIHRoZUdyYXBoUGFja2FnZS5nZXRHcmFwaCgpLCAiZ2V0Q2Fub25pY2FsR3JhcGgiLCAwLCAxLCBJU19VTklRVUUsIElTX09SREVSRUQpOyAvLyROT04tTkxTLTEkCisJCWFkZEVQYXJhbWV0ZXIob3AsIHRoZUNvbW1vblBhY2thZ2UuZ2V0VVJJKCksICJ1cmkiLCAwLCAxLCBJU19VTklRVUUsIElTX09SREVSRUQpOyAvLyROT04tTkxTLTEkCisJCWFkZEVQYXJhbWV0ZXIob3AsIHRoZUNvbW1vblBhY2thZ2UuZ2V0SWRlbnRpZmlhYmxlRmlsdGVyKCksICJmaWx0ZXIiLCAwLCAxLCBJU19VTklRVUUsIElTX09SREVSRUQpOyAvLyROT04tTkxTLTEkCisJCWFkZEVQYXJhbWV0ZXIob3AsIHRoaXMuZ2V0U1RFTVRpbWUoKSwgInRpbWUiLCAwLCAxLCBJU19VTklRVUUsIElTX09SREVSRUQpOyAvLyROT04tTkxTLTEkCisKKwkJb3AgPSBhZGRFT3BlcmF0aW9uKG1vZGVsRUNsYXNzLCBudWxsLCAicHJlcGFyZSIsIDAsIDEsIElTX1VOSVFVRSwgSVNfT1JERVJFRCk7IC8vJE5PTi1OTFMtMSQKKwkJYWRkRVBhcmFtZXRlcihvcCwgdGhpcy5nZXRTVEVNVGltZSgpLCAidGltZSIsIDAsIDEsIElTX1VOSVFVRSwgSVNfT1JERVJFRCk7IC8vJE5PTi1OTFMtMSQKKworCQlpbml0RUNsYXNzKG5vZGVEZWNvcmF0b3JFQ2xhc3MsIE5vZGVEZWNvcmF0b3IuY2xhc3MsICJOb2RlRGVjb3JhdG9yIiwgIUlTX0FCU1RSQUNULCAhSVNfSU5URVJGQUNFLCBJU19HRU5FUkFURURfSU5TVEFOQ0VfQ0xBU1MpOyAvLyROT04tTkxTLTEkCisKKwkJaW5pdEVDbGFzcyhzdGVtVGltZUVDbGFzcywgU1RFTVRpbWUuY2xhc3MsICJTVEVNVGltZSIsICFJU19BQlNUUkFDVCwgIUlTX0lOVEVSRkFDRSwgSVNfR0VORVJBVEVEX0lOU1RBTkNFX0NMQVNTKTsgLy8kTk9OLU5MUy0xJAorCQlpbml0RUF0dHJpYnV0ZShnZXRTVEVNVGltZV9UaW1lKCksIGVjb3JlUGFja2FnZS5nZXRFRGF0ZSgpLCAidGltZSIsIG51bGwsIDAsIDEsIFNURU1UaW1lLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOyAvLyROT04tTkxTLTEkCisKKwkJb3AgPSBhZGRFT3BlcmF0aW9uKHN0ZW1UaW1lRUNsYXNzLCB0aGlzLmdldFNURU1UaW1lKCksICJhZGRJbmNyZW1lbnQiLCAwLCAxLCBJU19VTklRVUUsIElTX09SREVSRUQpOyAvLyROT04tTkxTLTEkCisJCWFkZEVQYXJhbWV0ZXIob3AsIGVjb3JlUGFja2FnZS5nZXRFTG9uZygpLCAidGltZUluY3JlbWVudCIsIDAsIDEsIElTX1VOSVFVRSwgSVNfT1JERVJFRCk7IC8vJE5PTi1OTFMtMSQKKworCQlvcCA9IGFkZEVPcGVyYXRpb24oc3RlbVRpbWVFQ2xhc3MsIGVjb3JlUGFja2FnZS5nZXRFQm9vbGVhbigpLCAidmFsdWVFcXVhbHMiLCAwLCAxLCBJU19VTklRVUUsIElTX09SREVSRUQpOyAvLyROT04tTkxTLTEkCisJCWFkZEVQYXJhbWV0ZXIob3AsIHRoaXMuZ2V0U1RFTVRpbWUoKSwgIm9iaiIsIDAsIDEsIElTX1VOSVFVRSwgSVNfT1JERVJFRCk7IC8vJE5PTi1OTFMtMSQKKworCQlpbml0RUNsYXNzKGNvbXBhcmFibGVFQ2xhc3MsIENvbXBhcmFibGUuY2xhc3MsICJDb21wYXJhYmxlIiwgSVNfQUJTVFJBQ1QsIElTX0lOVEVSRkFDRSwgIUlTX0dFTkVSQVRFRF9JTlNUQU5DRV9DTEFTUyk7IC8vJE5PTi1OTFMtMSQKKworCQlpbml0RUNsYXNzKGludGVncmF0aW9uRGVjb3JhdG9yRUNsYXNzLCBJbnRlZ3JhdGlvbkRlY29yYXRvci5jbGFzcywgIkludGVncmF0aW9uRGVjb3JhdG9yIiwgSVNfQUJTVFJBQ1QsICFJU19JTlRFUkZBQ0UsIElTX0dFTkVSQVRFRF9JTlNUQU5DRV9DTEFTUyk7IC8vJE5PTi1OTFMtMSQKKworCQlvcCA9IGFkZEVPcGVyYXRpb24oaW50ZWdyYXRpb25EZWNvcmF0b3JFQ2xhc3MsIG51bGwsICJhcHBseUV4dGVybmFsRGVsdGFzIiwgMCwgMSwgSVNfVU5JUVVFLCBJU19PUkRFUkVEKTsgLy8kTk9OLU5MUy0xJAorCQlhZGRFUGFyYW1ldGVyKG9wLCB0aGlzLmdldFNURU1UaW1lKCksICJ0aW1lIiwgMCwgMSwgSVNfVU5JUVVFLCBJU19PUkRFUkVEKTsgLy8kTk9OLU5MUy0xJAorCQlhZGRFUGFyYW1ldGVyKG9wLCB0aGVFY29yZVBhY2thZ2UuZ2V0RUxvbmcoKSwgInRpbWVEZWx0YSIsIDAsIDEsIElTX1VOSVFVRSwgSVNfT1JERVJFRCk7IC8vJE5PTi1OTFMtMSQKKwkJYWRkRVBhcmFtZXRlcihvcCwgdGhlR3JhcGhQYWNrYWdlLmdldER5bmFtaWNMYWJlbCgpLCAibGFiZWxzIiwgMCwgLTEsIElTX1VOSVFVRSwgSVNfT1JERVJFRCk7IC8vJE5PTi1OTFMtMSQKKworCQlvcCA9IGFkZEVPcGVyYXRpb24oaW50ZWdyYXRpb25EZWNvcmF0b3JFQ2xhc3MsIG51bGwsICJjYWxjdWxhdGVEZWx0YSIsIDAsIDEsIElTX1VOSVFVRSwgSVNfT1JERVJFRCk7IC8vJE5PTi1OTFMtMSQKKwkJYWRkRVBhcmFtZXRlcihvcCwgdGhpcy5nZXRTVEVNVGltZSgpLCAidGltZSIsIDAsIDEsIElTX1VOSVFVRSwgSVNfT1JERVJFRCk7IC8vJE5PTi1OTFMtMSQKKwkJYWRkRVBhcmFtZXRlcihvcCwgdGhlRWNvcmVQYWNrYWdlLmdldEVMb25nKCksICJ0aW1lRGVsdGEiLCAwLCAxLCBJU19VTklRVUUsIElTX09SREVSRUQpOyAvLyROT04tTkxTLTEkCisJCWFkZEVQYXJhbWV0ZXIob3AsIHRoZUdyYXBoUGFja2FnZS5nZXREeW5hbWljTGFiZWwoKSwgImxhYmVscyIsIDAsIC0xLCBJU19VTklRVUUsIElTX09SREVSRUQpOyAvLyROT04tTkxTLTEkCisKKwkJb3AgPSBhZGRFT3BlcmF0aW9uKGludGVncmF0aW9uRGVjb3JhdG9yRUNsYXNzLCBudWxsLCAiZG9Nb2RlbFNwZWNpZmljQWRqdXN0bWVudHMiLCAwLCAxLCBJU19VTklRVUUsIElTX09SREVSRUQpOyAvLyROT04tTkxTLTEkCisJCWFkZEVQYXJhbWV0ZXIob3AsIHRoZUdyYXBoUGFja2FnZS5nZXRMYWJlbFZhbHVlKCksICJsYWJlbCIsIDAsIDEsIElTX1VOSVFVRSwgSVNfT1JERVJFRCk7IC8vJE5PTi1OTFMtMSQKKworCQlhZGRFT3BlcmF0aW9uKGludGVncmF0aW9uRGVjb3JhdG9yRUNsYXNzLCB0aGVFY29yZVBhY2thZ2UuZ2V0RUJvb2xlYW4oKSwgImlzRGV0ZXJtaW5pc3RpYyIsIDAsIDEsIElTX1VOSVFVRSwgSVNfT1JERVJFRCk7IC8vJE5PTi1OTFMtMSQKKworCQkvLyBDcmVhdGUgcmVzb3VyY2UKKwkJY3JlYXRlUmVzb3VyY2UoZU5TX1VSSSk7CisJfQorCit9IC8vTW9kZWxQYWNrYWdlSW1wbApkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9tb2RlbC9pbXBsL05vZGVEZWNvcmF0b3JJbXBsLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL21vZGVsL2ltcGwvTm9kZURlY29yYXRvckltcGwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZWNlODFhCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9tb2RlbC9pbXBsL05vZGVEZWNvcmF0b3JJbXBsLmphdmEKQEAgLTAsMCArMSw1NCBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuaW1wbDsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuIAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyAKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0IAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwgCisgKiAKKyAqIENvbnRyaWJ1dG9yczogCisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzczsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuTW9kZWxQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5Ob2RlRGVjb3JhdG9yOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IEFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5Ob2RlIERlY29yYXRvcjwvYj48L2VtPicuCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIDxwPgorICogPC9wPgorICoKKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIE5vZGVEZWNvcmF0b3JJbXBsIGV4dGVuZHMgRGVjb3JhdG9ySW1wbCBpbXBsZW1lbnRzIE5vZGVEZWNvcmF0b3IgeworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgTm9kZURlY29yYXRvckltcGwoKSB7CisJCXN1cGVyKCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCBFQ2xhc3MgZVN0YXRpY0NsYXNzKCkgeworCQlyZXR1cm4gTW9kZWxQYWNrYWdlLkxpdGVyYWxzLk5PREVfREVDT1JBVE9SOworCX0KKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5tb2RlbC5pbXBsLkRlY29yYXRvckltcGwjc2FuZSgpCisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgYm9vbGVhbiBzYW5lKCkgeworCQlib29sZWFuIHJldFZhbHVlID0gc3VwZXIuc2FuZSgpOworCisJCXJldHVybiByZXRWYWx1ZTsKKwl9IC8vIHNhbmUKK30gLy8gTm9kZURlY29yYXRvckltcGwKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvbW9kZWwvaW1wbC9TVEVNVGltZUltcGwuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvbW9kZWwvaW1wbC9TVEVNVGltZUltcGwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNDliNTljCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9tb2RlbC9pbXBsL1NURU1UaW1lSW1wbC5qYXZhCkBAIC0wLDAgKzEsMjA5IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5pbXBsOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAKKyAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4gCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIAorICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wIAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQgCisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbCAKKyAqIAorICogQ29udHJpYnV0b3JzOiAKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAKK2ltcG9ydCBqYXZhLnV0aWwuQ2FsZW5kYXI7CitpbXBvcnQgamF2YS51dGlsLkRhdGU7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzczsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuaW1wbC5FTm90aWZpY2F0aW9uSW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuaW1wbC5FT2JqZWN0SW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuTW9kZWxGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5Nb2RlbFBhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLlNURU1UaW1lOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IEFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5TVEVNIFRpbWU8L2I+PC9lbT4nLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiA8cD4KKyAqIFRoZSBmb2xsb3dpbmcgZmVhdHVyZXMgYXJlIGltcGxlbWVudGVkOgorICogPHVsPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5pbXBsLlNURU1UaW1lSW1wbCNnZXRUaW1lIDxlbT5UaW1lPC9lbT59PC9saT4KKyAqIDwvdWw+CisgKiA8L3A+CisgKgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgU1RFTVRpbWVJbXBsIGV4dGVuZHMgRU9iamVjdEltcGwgaW1wbGVtZW50cyBTVEVNVGltZSB7CisJLyoqCisJICogVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldFRpbWUoKSA8ZW0+VGltZTwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI2dldFRpbWUoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgRGF0ZSBUSU1FX0VERUZBVUxUID0gbnVsbDsKKworCS8qKgorCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldFRpbWUoKSA8ZW0+VGltZTwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI2dldFRpbWUoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBEYXRlIHRpbWUgPSBUSU1FX0VERUZBVUxUOworCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogCisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlwcm90ZWN0ZWQgU1RFTVRpbWVJbXBsKCkgeworCQlzdXBlcigpOworCQkvLyBTZXQgdGhlIGRlZmF1bHQgdGltZSB0byB0aGUgY3VycmVudCB0aW1lLgorCQlzZXRUaW1lKENhbGVuZGFyLmdldEluc3RhbmNlKCkuZ2V0VGltZSgpKTsKKwl9IC8vIFNURU1UaW1lSW1wbAorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCBFQ2xhc3MgZVN0YXRpY0NsYXNzKCkgeworCQlyZXR1cm4gTW9kZWxQYWNrYWdlLkxpdGVyYWxzLlNURU1fVElNRTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCXB1YmxpYyBEYXRlIGdldFRpbWUoKSB7CisJCXJldHVybiAoRGF0ZSl0aW1lLmNsb25lKCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRUaW1lKERhdGUgbmV3VGltZSkgeworCQlEYXRlIG9sZFRpbWUgPSB0aW1lOworCQl0aW1lID0gKERhdGUpbmV3VGltZS5jbG9uZSgpOworCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpCisJCQllTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBNb2RlbFBhY2thZ2UuU1RFTV9USU1FX19USU1FLCBvbGRUaW1lLCB0aW1lKSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogCisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlwdWJsaWMgU1RFTVRpbWUgYWRkSW5jcmVtZW50KGxvbmcgdGltZUluY3JlbWVudCkgeworCQlmaW5hbCBTVEVNVGltZSByZXRWYWx1ZSA9IE1vZGVsRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlU1RFTVRpbWUoKTsKKworCQlmaW5hbCBsb25nIG5ld1RpbWUgPSBnZXRUaW1lKCkuZ2V0VGltZSgpICsgdGltZUluY3JlbWVudDsKKwkJZmluYWwgRGF0ZSBuZXdEYXRlID0gbmV3IERhdGUobmV3VGltZSk7CisKKwkJcmV0VmFsdWUuc2V0VGltZShuZXdEYXRlKTsKKworCQlyZXR1cm4gcmV0VmFsdWU7CisJfSAvLyBhZGRJbmNyZW1lbnQKKworCQorCQorCS8qKgorCSAqIGNvbXBhcmVzIFNURU1UaW1lcworCSAqIAorCSAqLworCXB1YmxpYyBpbnQgY29tcGFyZVRvKFNURU1UaW1lIG90aGVyVGltZSkgeworCQlyZXR1cm4gZ2V0VGltZSgpLmNvbXBhcmVUbyhvdGhlclRpbWUuZ2V0VGltZSgpKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJcHVibGljIGJvb2xlYW4gdmFsdWVFcXVhbHMoU1RFTVRpbWUgb2JqKSB7CisJCWlmICh0aGlzID09IG9iaikKKwkJCXJldHVybiB0cnVlOworCQlpZiAob2JqID09IG51bGwpCisJCQlyZXR1cm4gZmFsc2U7CisJCWlmICh0aW1lID09IG51bGwpIHsKKwkJCWlmIChvYmouZ2V0VGltZSgpICE9IG51bGwpCisJCQkJcmV0dXJuIGZhbHNlOworCQl9IGVsc2UgaWYgKCF0aW1lLmVxdWFscyhvYmouZ2V0VGltZSgpKSkKKwkJCXJldHVybiBmYWxzZTsKKwkJcmV0dXJuIHRydWU7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBPYmplY3QgZUdldChpbnQgZmVhdHVyZUlELCBib29sZWFuIHJlc29sdmUsIGJvb2xlYW4gY29yZVR5cGUpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJCWNhc2UgTW9kZWxQYWNrYWdlLlNURU1fVElNRV9fVElNRToKKwkJCQlyZXR1cm4gZ2V0VGltZSgpOworCQl9CisJCXJldHVybiBzdXBlci5lR2V0KGZlYXR1cmVJRCwgcmVzb2x2ZSwgY29yZVR5cGUpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBlU2V0KGludCBmZWF0dXJlSUQsIE9iamVjdCBuZXdWYWx1ZSkgeworCQlzd2l0Y2ggKGZlYXR1cmVJRCkgeworCQkJY2FzZSBNb2RlbFBhY2thZ2UuU1RFTV9USU1FX19USU1FOgorCQkJCXNldFRpbWUoKERhdGUpbmV3VmFsdWUpOworCQkJCXJldHVybjsKKwkJfQorCQlzdXBlci5lU2V0KGZlYXR1cmVJRCwgbmV3VmFsdWUpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBlVW5zZXQoaW50IGZlYXR1cmVJRCkgeworCQlzd2l0Y2ggKGZlYXR1cmVJRCkgeworCQkJY2FzZSBNb2RlbFBhY2thZ2UuU1RFTV9USU1FX19USU1FOgorCQkJCXNldFRpbWUoVElNRV9FREVGQVVMVCk7CisJCQkJcmV0dXJuOworCQl9CisJCXN1cGVyLmVVbnNldChmZWF0dXJlSUQpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgYm9vbGVhbiBlSXNTZXQoaW50IGZlYXR1cmVJRCkgeworCQlzd2l0Y2ggKGZlYXR1cmVJRCkgeworCQkJY2FzZSBNb2RlbFBhY2thZ2UuU1RFTV9USU1FX19USU1FOgorCQkJCXJldHVybiBUSU1FX0VERUZBVUxUID09IG51bGwgPyB0aW1lICE9IG51bGwgOiAhVElNRV9FREVGQVVMVC5lcXVhbHModGltZSk7CisJCX0KKwkJcmV0dXJuIHN1cGVyLmVJc1NldChmZWF0dXJlSUQpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJcHVibGljIFN0cmluZyB0b1N0cmluZygpIHsKKwkJaWYgKGVJc1Byb3h5KCkpCisJCQlyZXR1cm4gc3VwZXIudG9TdHJpbmcoKTsKKworCQkvLyBTdHJpbmdCdWZmZXIgcmVzdWx0ID0gbmV3IFN0cmluZ0J1ZmZlcihzdXBlci50b1N0cmluZygpKTsKKwkJLy8gcmVzdWx0LmFwcGVuZCgiICh0aW1lOiAiKTsKKwkJLy8gcmVzdWx0LmFwcGVuZCh0aW1lKTsKKwkJLy8gcmVzdWx0LmFwcGVuZCgnKScpOworCQlyZXR1cm4gdGltZS50b1N0cmluZygpOworCX0gLy8gdG9TdHJpbmcKKworfSAvLyBTVEVNVGltZUltcGwKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvbW9kZWwvcHJvdmlkZXIvRGVjb3JhdG9ySXRlbVByb3ZpZGVyLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL21vZGVsL3Byb3ZpZGVyL0RlY29yYXRvckl0ZW1Qcm92aWRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNjOGYwMTQKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL21vZGVsL3Byb3ZpZGVyL0RlY29yYXRvckl0ZW1Qcm92aWRlci5qYXZhCkBAIC0wLDAgKzEsMTgzIEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5wcm92aWRlcjsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuIAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyAKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0IAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwgCisgKiAKKyAqIENvbnRyaWJ1dG9yczogCisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LkFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuUmVzb3VyY2VMb2NhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FU3RydWN0dXJhbEZlYXR1cmU7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUVkaXRpbmdEb21haW5JdGVtUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1MYWJlbFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtUHJvcGVydHlEZXNjcmlwdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtUHJvcGVydHlTb3VyY2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVN0cnVjdHVyZWRJdGVtQ29udGVudFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklUcmVlSXRlbUNvbnRlbnRQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5WaWV3ZXJOb3RpZmljYXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5wcm92aWRlci5Db3JlRWRpdFBsdWdpbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLnByb3ZpZGVyLklkZW50aWZpYWJsZUl0ZW1Qcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuRGVjb3JhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5Nb2RlbFBhY2thZ2U7CisKKy8qKgorICogVGhpcyBpcyB0aGUgaXRlbSBwcm92aWRlciBhZGFwdGVyIGZvciBhIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuRGVjb3JhdG9yfSBvYmplY3QuCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBEZWNvcmF0b3JJdGVtUHJvdmlkZXIKKwlleHRlbmRzIElkZW50aWZpYWJsZUl0ZW1Qcm92aWRlcgorCWltcGxlbWVudHMJCisJCUlFZGl0aW5nRG9tYWluSXRlbVByb3ZpZGVyLAkKKwkJSVN0cnVjdHVyZWRJdGVtQ29udGVudFByb3ZpZGVyLAkKKwkJSVRyZWVJdGVtQ29udGVudFByb3ZpZGVyLAkKKwkJSUl0ZW1MYWJlbFByb3ZpZGVyLAkKKwkJSUl0ZW1Qcm9wZXJ0eVNvdXJjZSB7CisJLyoqCisJICogVGhpcyBjb25zdHJ1Y3RzIGFuIGluc3RhbmNlIGZyb20gYSBmYWN0b3J5IGFuZCBhIG5vdGlmaWVyLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBEZWNvcmF0b3JJdGVtUHJvdmlkZXIoQWRhcHRlckZhY3RvcnkgYWRhcHRlckZhY3RvcnkpIHsKKwkJc3VwZXIoYWRhcHRlckZhY3RvcnkpOworCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyB0aGUgcHJvcGVydHkgZGVzY3JpcHRvcnMgZm9yIHRoZSBhZGFwdGVkIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgTGlzdDxJSXRlbVByb3BlcnR5RGVzY3JpcHRvcj4gZ2V0UHJvcGVydHlEZXNjcmlwdG9ycyhPYmplY3Qgb2JqZWN0KSB7CisJCWlmIChpdGVtUHJvcGVydHlEZXNjcmlwdG9ycyA9PSBudWxsKSB7CisJCQlzdXBlci5nZXRQcm9wZXJ0eURlc2NyaXB0b3JzKG9iamVjdCk7CisKKwkJCS8vYWRkTGFiZWxzVG9VcGRhdGVQcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0KTsKKwkJfQorCQlyZXR1cm4gaXRlbVByb3BlcnR5RGVzY3JpcHRvcnM7CisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIHRoZSBwcm9wZXJ0eSBkZXNjcmlwdG9ycyBmb3IgdGhlIGFkYXB0ZWQgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIExpc3Q8SUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I+IGdldFByb3BlcnR5RGVzY3JpcHRvcnNHZW4oT2JqZWN0IG9iamVjdCkgeworCQlpZiAoaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMgPT0gbnVsbCkgeworCQkJc3VwZXIuZ2V0UHJvcGVydHlEZXNjcmlwdG9ycyhvYmplY3QpOworCisJCX0KKwkJcmV0dXJuIGl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzOworCX0KKworCQorCS8qKgorCSAqIFRoaXMgc3BlY2lmaWVzIGhvdyB0byBpbXBsZW1lbnQge0BsaW5rICNnZXRDaGlsZHJlbn0gYW5kIGlzIHVzZWQgdG8gZGVkdWNlIGFuIGFwcHJvcHJpYXRlIGZlYXR1cmUgZm9yIGFuCisJICoge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lZGl0LmNvbW1hbmQuQWRkQ29tbWFuZH0sIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuZWRpdC5jb21tYW5kLlJlbW92ZUNvbW1hbmR9IG9yCisJICoge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lZGl0LmNvbW1hbmQuTW92ZUNvbW1hbmR9IGluIHtAbGluayAjY3JlYXRlQ29tbWFuZH0uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIENvbGxlY3Rpb248PyBleHRlbmRzIEVTdHJ1Y3R1cmFsRmVhdHVyZT4gZ2V0Q2hpbGRyZW5GZWF0dXJlcyhPYmplY3Qgb2JqZWN0KSB7CisJCWlmIChjaGlsZHJlbkZlYXR1cmVzID09IG51bGwpIHsKKwkJCXN1cGVyLmdldENoaWxkcmVuRmVhdHVyZXMob2JqZWN0KTsKKwkJCWNoaWxkcmVuRmVhdHVyZXMuYWRkKE1vZGVsUGFja2FnZS5MaXRlcmFscy5ERUNPUkFUT1JfX0xBQkVMU19UT19VUERBVEUpOworCQl9CisJCXJldHVybiBjaGlsZHJlbkZlYXR1cmVzOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCBFU3RydWN0dXJhbEZlYXR1cmUgZ2V0Q2hpbGRGZWF0dXJlKE9iamVjdCBvYmplY3QsIE9iamVjdCBjaGlsZCkgeworCQkvLyBDaGVjayB0aGUgdHlwZSBvZiB0aGUgc3BlY2lmaWVkIGNoaWxkIG9iamVjdCBhbmQgcmV0dXJuIHRoZSBwcm9wZXIgZmVhdHVyZSB0byB1c2UgZm9yCisJCS8vIGFkZGluZyAoc2VlIHtAbGluayBBZGRDb21tYW5kfSkgaXQgYXMgYSBjaGlsZC4KKworCQlyZXR1cm4gc3VwZXIuZ2V0Q2hpbGRGZWF0dXJlKG9iamVjdCwgY2hpbGQpOworCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyBEZWNvcmF0b3IuZ2lmLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgT2JqZWN0IGdldEltYWdlKE9iamVjdCBvYmplY3QpIHsKKwkJcmV0dXJuIG92ZXJsYXlJbWFnZShvYmplY3QsIGdldFJlc291cmNlTG9jYXRvcigpLmdldEltYWdlKCJmdWxsL2N1c3RvbW9iajE2L0RlY29yYXRvciIpKTsgLy8kTk9OLU5MUy0xJAorCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyB0aGUgbGFiZWwgdGV4dCBmb3IgdGhlIGFkYXB0ZWQgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBTdHJpbmcgZ2V0VGV4dChPYmplY3Qgb2JqZWN0KSB7CisJCXJldHVybiBzdXBlci5nZXRUZXh0KG9iamVjdCk7CisJfQorCisJLyoqCisJICogVGhpcyBoYW5kbGVzIG1vZGVsIG5vdGlmaWNhdGlvbnMgYnkgY2FsbGluZyB7QGxpbmsgI3VwZGF0ZUNoaWxkcmVufSB0byB1cGRhdGUgYW55IGNhY2hlZAorCSAqIGNoaWxkcmVuIGFuZCBieSBjcmVhdGluZyBhIHZpZXdlciBub3RpZmljYXRpb24sIHdoaWNoIGl0IHBhc3NlcyB0byB7QGxpbmsgI2ZpcmVOb3RpZnlDaGFuZ2VkfS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBub3RpZnlDaGFuZ2VkKE5vdGlmaWNhdGlvbiBub3RpZmljYXRpb24pIHsKKwkJdXBkYXRlQ2hpbGRyZW4obm90aWZpY2F0aW9uKTsKKworCQlzd2l0Y2ggKG5vdGlmaWNhdGlvbi5nZXRGZWF0dXJlSUQoRGVjb3JhdG9yLmNsYXNzKSkgeworCQkJY2FzZSBNb2RlbFBhY2thZ2UuREVDT1JBVE9SX19QUk9HUkVTUzoKKwkJCQlmaXJlTm90aWZ5Q2hhbmdlZChuZXcgVmlld2VyTm90aWZpY2F0aW9uKG5vdGlmaWNhdGlvbiwgbm90aWZpY2F0aW9uLmdldE5vdGlmaWVyKCksIGZhbHNlLCB0cnVlKSk7CisJCQkJcmV0dXJuOworCQl9CisJCXN1cGVyLm5vdGlmeUNoYW5nZWQobm90aWZpY2F0aW9uKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFkZHMge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lZGl0LmNvbW1hbmQuQ29tbWFuZFBhcmFtZXRlcn1zIGRlc2NyaWJpbmcgdGhlIGNoaWxkcmVuCisJICogdGhhdCBjYW4gYmUgY3JlYXRlZCB1bmRlciB0aGlzIG9iamVjdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgdm9pZCBjb2xsZWN0TmV3Q2hpbGREZXNjcmlwdG9ycyhDb2xsZWN0aW9uPE9iamVjdD4gbmV3Q2hpbGREZXNjcmlwdG9ycywgT2JqZWN0IG9iamVjdCkgeworCQlzdXBlci5jb2xsZWN0TmV3Q2hpbGREZXNjcmlwdG9ycyhuZXdDaGlsZERlc2NyaXB0b3JzLCBvYmplY3QpOworCX0KKworCS8qKgorCSAqIFJldHVybiB0aGUgcmVzb3VyY2UgbG9jYXRvciBmb3IgdGhpcyBpdGVtIHByb3ZpZGVyJ3MgcmVzb3VyY2VzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBSZXNvdXJjZUxvY2F0b3IgZ2V0UmVzb3VyY2VMb2NhdG9yKCkgeworCQlyZXR1cm4gQ29yZUVkaXRQbHVnaW4uSU5TVEFOQ0U7CisJfQorCit9CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL21vZGVsL3Byb3ZpZGVyL0VkZ2VEZWNvcmF0b3JJdGVtUHJvdmlkZXIuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvbW9kZWwvcHJvdmlkZXIvRWRnZURlY29yYXRvckl0ZW1Qcm92aWRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMyMDZlY2QKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL21vZGVsL3Byb3ZpZGVyL0VkZ2VEZWNvcmF0b3JJdGVtUHJvdmlkZXIuamF2YQpAQCAtMCwwICsxLDEwNyBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwucHJvdmlkZXI7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIAorICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiAKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdCAKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sIAorICogCisgKiBDb250cmlidXRvcnM6IAorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiAKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5BZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlVSSTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JRWRpdGluZ0RvbWFpbkl0ZW1Qcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbUxhYmVsUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1Qcm9wZXJ0eVNvdXJjZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JU3RydWN0dXJlZEl0ZW1Db250ZW50UHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVRyZWVJdGVtQ29udGVudFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5FZGdlRGVjb3JhdG9yOworCisvKioKKyAqIFRoaXMgaXMgdGhlIGl0ZW0gcHJvdmlkZXIgYWRhcHRlciBmb3IgYSB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLkVkZ2VEZWNvcmF0b3J9IG9iamVjdC4KKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIEVkZ2VEZWNvcmF0b3JJdGVtUHJvdmlkZXIKKwlleHRlbmRzIERlY29yYXRvckl0ZW1Qcm92aWRlcgorCWltcGxlbWVudHMJCisJCUlFZGl0aW5nRG9tYWluSXRlbVByb3ZpZGVyLAkKKwkJSVN0cnVjdHVyZWRJdGVtQ29udGVudFByb3ZpZGVyLAkKKwkJSVRyZWVJdGVtQ29udGVudFByb3ZpZGVyLAkKKwkJSUl0ZW1MYWJlbFByb3ZpZGVyLAkKKwkJSUl0ZW1Qcm9wZXJ0eVNvdXJjZSB7CisJLyoqCisJICogVGhpcyBjb25zdHJ1Y3RzIGFuIGluc3RhbmNlIGZyb20gYSBmYWN0b3J5IGFuZCBhIG5vdGlmaWVyLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFZGdlRGVjb3JhdG9ySXRlbVByb3ZpZGVyKEFkYXB0ZXJGYWN0b3J5IGFkYXB0ZXJGYWN0b3J5KSB7CisJCXN1cGVyKGFkYXB0ZXJGYWN0b3J5KTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgdGhlIHByb3BlcnR5IGRlc2NyaXB0b3JzIGZvciB0aGUgYWRhcHRlZCBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgTGlzdDxJSXRlbVByb3BlcnR5RGVzY3JpcHRvcj4gZ2V0UHJvcGVydHlEZXNjcmlwdG9ycyhPYmplY3Qgb2JqZWN0KSB7CisJCWlmIChpdGVtUHJvcGVydHlEZXNjcmlwdG9ycyA9PSBudWxsKSB7CisJCQlzdXBlci5nZXRQcm9wZXJ0eURlc2NyaXB0b3JzKG9iamVjdCk7CisKKwkJfQorCQlyZXR1cm4gaXRlbVByb3BlcnR5RGVzY3JpcHRvcnM7CisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIHRoZSBsYWJlbCB0ZXh0IGZvciB0aGUgYWRhcHRlZCBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgU3RyaW5nIGdldFRleHQoT2JqZWN0IG9iamVjdCkgeworCQlVUkkgbGFiZWxWYWx1ZSA9ICgoRWRnZURlY29yYXRvcilvYmplY3QpLmdldFVSSSgpOworCQlTdHJpbmcgbGFiZWwgPSBsYWJlbFZhbHVlID09IG51bGwgPyBudWxsIDogbGFiZWxWYWx1ZS50b1N0cmluZygpOworCQlyZXR1cm4gbGFiZWwgPT0gbnVsbCB8fCBsYWJlbC5sZW5ndGgoKSA9PSAwID8KKwkJCWdldFN0cmluZygiX1VJX0VkZ2VEZWNvcmF0b3JfdHlwZSIpIDogLy8kTk9OLU5MUy0xJAorCQkJZ2V0U3RyaW5nKCJfVUlfRWRnZURlY29yYXRvcl90eXBlIikgKyAiICIgKyBsYWJlbDsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCisJfQorCisJLyoqCisJICogVGhpcyBoYW5kbGVzIG1vZGVsIG5vdGlmaWNhdGlvbnMgYnkgY2FsbGluZyB7QGxpbmsgI3VwZGF0ZUNoaWxkcmVufSB0byB1cGRhdGUgYW55IGNhY2hlZAorCSAqIGNoaWxkcmVuIGFuZCBieSBjcmVhdGluZyBhIHZpZXdlciBub3RpZmljYXRpb24sIHdoaWNoIGl0IHBhc3NlcyB0byB7QGxpbmsgI2ZpcmVOb3RpZnlDaGFuZ2VkfS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBub3RpZnlDaGFuZ2VkKE5vdGlmaWNhdGlvbiBub3RpZmljYXRpb24pIHsKKwkJdXBkYXRlQ2hpbGRyZW4obm90aWZpY2F0aW9uKTsKKwkJc3VwZXIubm90aWZ5Q2hhbmdlZChub3RpZmljYXRpb24pOworCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmVkaXQuY29tbWFuZC5Db21tYW5kUGFyYW1ldGVyfXMgZGVzY3JpYmluZyB0aGUgY2hpbGRyZW4KKwkgKiB0aGF0IGNhbiBiZSBjcmVhdGVkIHVuZGVyIHRoaXMgb2JqZWN0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIGNvbGxlY3ROZXdDaGlsZERlc2NyaXB0b3JzKENvbGxlY3Rpb248T2JqZWN0PiBuZXdDaGlsZERlc2NyaXB0b3JzLCBPYmplY3Qgb2JqZWN0KSB7CisJCXN1cGVyLmNvbGxlY3ROZXdDaGlsZERlc2NyaXB0b3JzKG5ld0NoaWxkRGVzY3JpcHRvcnMsIG9iamVjdCk7CisJfQorCit9CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL21vZGVsL3Byb3ZpZGVyL0dyYXBoRGVjb3JhdG9ySXRlbVByb3ZpZGVyLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL21vZGVsL3Byb3ZpZGVyL0dyYXBoRGVjb3JhdG9ySXRlbVByb3ZpZGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWYyNzBiNwotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvbW9kZWwvcHJvdmlkZXIvR3JhcGhEZWNvcmF0b3JJdGVtUHJvdmlkZXIuamF2YQpAQCAtMCwwICsxLDEwNyBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwucHJvdmlkZXI7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIAorICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiAKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdCAKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sIAorICogCisgKiBDb250cmlidXRvcnM6IAorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiAKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5BZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlVSSTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JRWRpdGluZ0RvbWFpbkl0ZW1Qcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbUxhYmVsUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1Qcm9wZXJ0eVNvdXJjZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JU3RydWN0dXJlZEl0ZW1Db250ZW50UHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVRyZWVJdGVtQ29udGVudFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5HcmFwaERlY29yYXRvcjsKKworLyoqCisgKiBUaGlzIGlzIHRoZSBpdGVtIHByb3ZpZGVyIGFkYXB0ZXIgZm9yIGEge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5HcmFwaERlY29yYXRvcn0gb2JqZWN0LgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgR3JhcGhEZWNvcmF0b3JJdGVtUHJvdmlkZXIKKwlleHRlbmRzIERlY29yYXRvckl0ZW1Qcm92aWRlcgorCWltcGxlbWVudHMJCisJCUlFZGl0aW5nRG9tYWluSXRlbVByb3ZpZGVyLAkKKwkJSVN0cnVjdHVyZWRJdGVtQ29udGVudFByb3ZpZGVyLAkKKwkJSVRyZWVJdGVtQ29udGVudFByb3ZpZGVyLAkKKwkJSUl0ZW1MYWJlbFByb3ZpZGVyLAkKKwkJSUl0ZW1Qcm9wZXJ0eVNvdXJjZSB7CisJLyoqCisJICogVGhpcyBjb25zdHJ1Y3RzIGFuIGluc3RhbmNlIGZyb20gYSBmYWN0b3J5IGFuZCBhIG5vdGlmaWVyLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBHcmFwaERlY29yYXRvckl0ZW1Qcm92aWRlcihBZGFwdGVyRmFjdG9yeSBhZGFwdGVyRmFjdG9yeSkgeworCQlzdXBlcihhZGFwdGVyRmFjdG9yeSk7CisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIHRoZSBwcm9wZXJ0eSBkZXNjcmlwdG9ycyBmb3IgdGhlIGFkYXB0ZWQgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIExpc3Q8SUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I+IGdldFByb3BlcnR5RGVzY3JpcHRvcnMoT2JqZWN0IG9iamVjdCkgeworCQlpZiAoaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMgPT0gbnVsbCkgeworCQkJc3VwZXIuZ2V0UHJvcGVydHlEZXNjcmlwdG9ycyhvYmplY3QpOworCisJCX0KKwkJcmV0dXJuIGl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzOworCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyB0aGUgbGFiZWwgdGV4dCBmb3IgdGhlIGFkYXB0ZWQgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIFN0cmluZyBnZXRUZXh0KE9iamVjdCBvYmplY3QpIHsKKwkJVVJJIGxhYmVsVmFsdWUgPSAoKEdyYXBoRGVjb3JhdG9yKW9iamVjdCkuZ2V0VVJJKCk7CisJCVN0cmluZyBsYWJlbCA9IGxhYmVsVmFsdWUgPT0gbnVsbCA/IG51bGwgOiBsYWJlbFZhbHVlLnRvU3RyaW5nKCk7CisJCXJldHVybiBsYWJlbCA9PSBudWxsIHx8IGxhYmVsLmxlbmd0aCgpID09IDAgPworCQkJZ2V0U3RyaW5nKCJfVUlfR3JhcGhEZWNvcmF0b3JfdHlwZSIpIDogLy8kTk9OLU5MUy0xJAorCQkJZ2V0U3RyaW5nKCJfVUlfR3JhcGhEZWNvcmF0b3JfdHlwZSIpICsgIiAiICsgbGFiZWw7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAorCX0KKworCS8qKgorCSAqIFRoaXMgaGFuZGxlcyBtb2RlbCBub3RpZmljYXRpb25zIGJ5IGNhbGxpbmcge0BsaW5rICN1cGRhdGVDaGlsZHJlbn0gdG8gdXBkYXRlIGFueSBjYWNoZWQKKwkgKiBjaGlsZHJlbiBhbmQgYnkgY3JlYXRpbmcgYSB2aWV3ZXIgbm90aWZpY2F0aW9uLCB3aGljaCBpdCBwYXNzZXMgdG8ge0BsaW5rICNmaXJlTm90aWZ5Q2hhbmdlZH0uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgbm90aWZ5Q2hhbmdlZChOb3RpZmljYXRpb24gbm90aWZpY2F0aW9uKSB7CisJCXVwZGF0ZUNoaWxkcmVuKG5vdGlmaWNhdGlvbik7CisJCXN1cGVyLm5vdGlmeUNoYW5nZWQobm90aWZpY2F0aW9uKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFkZHMge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lZGl0LmNvbW1hbmQuQ29tbWFuZFBhcmFtZXRlcn1zIGRlc2NyaWJpbmcgdGhlIGNoaWxkcmVuCisJICogdGhhdCBjYW4gYmUgY3JlYXRlZCB1bmRlciB0aGlzIG9iamVjdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgdm9pZCBjb2xsZWN0TmV3Q2hpbGREZXNjcmlwdG9ycyhDb2xsZWN0aW9uPE9iamVjdD4gbmV3Q2hpbGREZXNjcmlwdG9ycywgT2JqZWN0IG9iamVjdCkgeworCQlzdXBlci5jb2xsZWN0TmV3Q2hpbGREZXNjcmlwdG9ycyhuZXdDaGlsZERlc2NyaXB0b3JzLCBvYmplY3QpOworCX0KKworfQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9tb2RlbC9wcm92aWRlci9JbnRlZ3JhdGlvbkRlY29yYXRvckl0ZW1Qcm92aWRlci5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9tb2RlbC9wcm92aWRlci9JbnRlZ3JhdGlvbkRlY29yYXRvckl0ZW1Qcm92aWRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEyZjBlYjkKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL21vZGVsL3Byb3ZpZGVyL0ludGVncmF0aW9uRGVjb3JhdG9ySXRlbVByb3ZpZGVyLmphdmEKQEAgLTAsMCArMSwxMTYgQEAKKy8qKg0KKyAqIDxjb3B5cmlnaHQ+DQorICogPC9jb3B5cmlnaHQ+DQorICoNCisgKiAkSWQkDQorICovDQorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwucHJvdmlkZXI7DQorDQorDQoraW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOw0KK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsNCisNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuQWRhcHRlckZhY3Rvcnk7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbjsNCisNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlVSSTsNCisNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUVkaXRpbmdEb21haW5JdGVtUHJvdmlkZXI7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtTGFiZWxQcm92aWRlcjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtUHJvcGVydHlTb3VyY2U7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklTdHJ1Y3R1cmVkSXRlbUNvbnRlbnRQcm92aWRlcjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVRyZWVJdGVtQ29udGVudFByb3ZpZGVyOw0KKw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuSW50ZWdyYXRpb25EZWNvcmF0b3I7DQorDQorLyoqDQorICogVGhpcyBpcyB0aGUgaXRlbSBwcm92aWRlciBhZGFwdGVyIGZvciBhIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuSW50ZWdyYXRpb25EZWNvcmF0b3J9IG9iamVjdC4NCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKyAqIEBnZW5lcmF0ZWQNCisgKi8NCitwdWJsaWMgY2xhc3MgSW50ZWdyYXRpb25EZWNvcmF0b3JJdGVtUHJvdmlkZXINCisJZXh0ZW5kcyBOb2RlRGVjb3JhdG9ySXRlbVByb3ZpZGVyDQorCWltcGxlbWVudHMNCisJCUlFZGl0aW5nRG9tYWluSXRlbVByb3ZpZGVyLA0KKwkJSVN0cnVjdHVyZWRJdGVtQ29udGVudFByb3ZpZGVyLA0KKwkJSVRyZWVJdGVtQ29udGVudFByb3ZpZGVyLA0KKwkJSUl0ZW1MYWJlbFByb3ZpZGVyLA0KKwkJSUl0ZW1Qcm9wZXJ0eVNvdXJjZSB7DQorCS8qKg0KKwkgKiBUaGlzIGNvbnN0cnVjdHMgYW4gaW5zdGFuY2UgZnJvbSBhIGZhY3RvcnkgYW5kIGEgbm90aWZpZXIuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgSW50ZWdyYXRpb25EZWNvcmF0b3JJdGVtUHJvdmlkZXIoQWRhcHRlckZhY3RvcnkgYWRhcHRlckZhY3RvcnkpIHsNCisJCXN1cGVyKGFkYXB0ZXJGYWN0b3J5KTsNCisJfQ0KKw0KKwkvKioNCisJICogVGhpcyByZXR1cm5zIHRoZSBwcm9wZXJ0eSBkZXNjcmlwdG9ycyBmb3IgdGhlIGFkYXB0ZWQgY2xhc3MuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlAT3ZlcnJpZGUNCisJcHVibGljIExpc3Q8SUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I+IGdldFByb3BlcnR5RGVzY3JpcHRvcnMoT2JqZWN0IG9iamVjdCkgew0KKwkJaWYgKGl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzID09IG51bGwpIHsNCisJCQlzdXBlci5nZXRQcm9wZXJ0eURlc2NyaXB0b3JzKG9iamVjdCk7DQorDQorCQl9DQorCQlyZXR1cm4gaXRlbVByb3BlcnR5RGVzY3JpcHRvcnM7DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgcmV0dXJucyB0aGUgbGFiZWwgdGV4dCBmb3IgdGhlIGFkYXB0ZWQgY2xhc3MuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlAT3ZlcnJpZGUNCisJcHVibGljIFN0cmluZyBnZXRUZXh0R2VuKE9iamVjdCBvYmplY3QpIHsNCisJCVVSSSBsYWJlbFZhbHVlID0gKChJbnRlZ3JhdGlvbkRlY29yYXRvcilvYmplY3QpLmdldFVSSSgpOw0KKwkJU3RyaW5nIGxhYmVsID0gbGFiZWxWYWx1ZSA9PSBudWxsID8gbnVsbCA6IGxhYmVsVmFsdWUudG9TdHJpbmcoKTsNCisJCXJldHVybiBsYWJlbCA9PSBudWxsIHx8IGxhYmVsLmxlbmd0aCgpID09IDAgPw0KKwkJCWdldFN0cmluZygiX1VJX0ludGVncmF0aW9uRGVjb3JhdG9yX3R5cGUiKSA6IC8vJE5PTi1OTFMtMSQNCisJCQlnZXRTdHJpbmcoIl9VSV9JbnRlZ3JhdGlvbkRlY29yYXRvcl90eXBlIikgKyAiICIgKyBsYWJlbDsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkDQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgcmV0dXJucyB0aGUgbGFiZWwgdGV4dCBmb3IgdGhlIGFkYXB0ZWQgY2xhc3MuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkIE5PVA0KKwkgKi8NCisJQE92ZXJyaWRlDQorCXB1YmxpYyBTdHJpbmcgZ2V0VGV4dChPYmplY3Qgb2JqZWN0KSB7DQorCQlyZXR1cm4gc3VwZXIuZ2V0VGV4dChvYmplY3QpOw0KKwl9DQorCS8qKg0KKwkgKiBUaGlzIGhhbmRsZXMgbW9kZWwgbm90aWZpY2F0aW9ucyBieSBjYWxsaW5nIHtAbGluayAjdXBkYXRlQ2hpbGRyZW59IHRvIHVwZGF0ZSBhbnkgY2FjaGVkDQorCSAqIGNoaWxkcmVuIGFuZCBieSBjcmVhdGluZyBhIHZpZXdlciBub3RpZmljYXRpb24sIHdoaWNoIGl0IHBhc3NlcyB0byB7QGxpbmsgI2ZpcmVOb3RpZnlDaGFuZ2VkfS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCUBPdmVycmlkZQ0KKwlwdWJsaWMgdm9pZCBub3RpZnlDaGFuZ2VkKE5vdGlmaWNhdGlvbiBub3RpZmljYXRpb24pIHsNCisJCXVwZGF0ZUNoaWxkcmVuKG5vdGlmaWNhdGlvbik7DQorCQlzdXBlci5ub3RpZnlDaGFuZ2VkKG5vdGlmaWNhdGlvbik7DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgYWRkcyB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmVkaXQuY29tbWFuZC5Db21tYW5kUGFyYW1ldGVyfXMgZGVzY3JpYmluZyB0aGUgY2hpbGRyZW4NCisJICogdGhhdCBjYW4gYmUgY3JlYXRlZCB1bmRlciB0aGlzIG9iamVjdC4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCUBPdmVycmlkZQ0KKwlwcm90ZWN0ZWQgdm9pZCBjb2xsZWN0TmV3Q2hpbGREZXNjcmlwdG9ycyhDb2xsZWN0aW9uPE9iamVjdD4gbmV3Q2hpbGREZXNjcmlwdG9ycywgT2JqZWN0IG9iamVjdCkgew0KKwkJc3VwZXIuY29sbGVjdE5ld0NoaWxkRGVzY3JpcHRvcnMobmV3Q2hpbGREZXNjcmlwdG9ycywgb2JqZWN0KTsNCisJfQ0KKw0KK30NCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL21vZGVsL3Byb3ZpZGVyL01vZGVsRWRpdFBsdWdpbi5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9tb2RlbC9wcm92aWRlci9Nb2RlbEVkaXRQbHVnaW4uamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YmFiZDU0Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9tb2RlbC9wcm92aWRlci9Nb2RlbEVkaXRQbHVnaW4uamF2YQpAQCAtMCwwICsxLDEwMiBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwucHJvdmlkZXI7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIAorICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiAKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdCAKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sIAorICogCisgKiBDb250cmlidXRvcnM6IAorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiAKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworIAorCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5FTUZQbHVnaW47CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51aS5FY2xpcHNlVUlQbHVnaW47CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlJlc291cmNlTG9jYXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLnByb3ZpZGVyLkNvbW1vbkVkaXRQbHVnaW47CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLnByb3ZpZGVyLkdyYXBoRWRpdFBsdWdpbjsKKworLyoqCisgKiBUaGlzIGlzIHRoZSBjZW50cmFsIHNpbmdsZXRvbiBmb3IgdGhlIE1vZGVsIGVkaXRvciBwbHVnaW4uCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBmaW5hbCBjbGFzcyBNb2RlbEVkaXRQbHVnaW4gZXh0ZW5kcyBFTUZQbHVnaW4geworCS8qKgorCSAqIEtlZXAgdHJhY2sgb2YgdGhlIHNpbmdsZXRvbi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIE1vZGVsRWRpdFBsdWdpbiBJTlNUQU5DRSA9IG5ldyBNb2RlbEVkaXRQbHVnaW4oKTsKKworCS8qKgorCSAqIEtlZXAgdHJhY2sgb2YgdGhlIHNpbmdsZXRvbi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcml2YXRlIHN0YXRpYyBJbXBsZW1lbnRhdGlvbiBwbHVnaW47CisKKwkvKioKKwkgKiBDcmVhdGUgdGhlIGluc3RhbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBNb2RlbEVkaXRQbHVnaW4oKSB7CisJCXN1cGVyCisJCSAgKG5ldyBSZXNvdXJjZUxvY2F0b3IgW10geworCQkgICAgIEdyYXBoRWRpdFBsdWdpbi5JTlNUQU5DRSwKKwkJICAgICBDb21tb25FZGl0UGx1Z2luLklOU1RBTkNFLAorCQkgICB9KTsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBzaW5nbGV0b24gaW5zdGFuY2Ugb2YgdGhlIEVjbGlwc2UgcGx1Z2luLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgc2luZ2xldG9uIGluc3RhbmNlLgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgUmVzb3VyY2VMb2NhdG9yIGdldFBsdWdpblJlc291cmNlTG9jYXRvcigpIHsKKwkJcmV0dXJuIHBsdWdpbjsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBzaW5nbGV0b24gaW5zdGFuY2Ugb2YgdGhlIEVjbGlwc2UgcGx1Z2luLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgc2luZ2xldG9uIGluc3RhbmNlLgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgc3RhdGljIEltcGxlbWVudGF0aW9uIGdldFBsdWdpbigpIHsKKwkJcmV0dXJuIHBsdWdpbjsKKwl9CisKKwkvKioKKwkgKiBUaGUgYWN0dWFsIGltcGxlbWVudGF0aW9uIG9mIHRoZSBFY2xpcHNlIDxiPlBsdWdpbjwvYj4uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHN0YXRpYyBjbGFzcyBJbXBsZW1lbnRhdGlvbiBleHRlbmRzIEVjbGlwc2VVSVBsdWdpbiB7CisJCS8qKgorCQkgKiBDcmVhdGVzIGFuIGluc3RhbmNlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJcHVibGljIEltcGxlbWVudGF0aW9uKCkgeworCQkJc3VwZXIoKTsKKworCQkJLy8gUmVtZW1iZXIgdGhlIHN0YXRpYyBpbnN0YW5jZS4KKwkJCS8vCisJCQlwbHVnaW4gPSB0aGlzOworCQl9CisJfQorCit9CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL21vZGVsL3Byb3ZpZGVyL01vZGVsSXRlbVByb3ZpZGVyLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL21vZGVsL3Byb3ZpZGVyL01vZGVsSXRlbVByb3ZpZGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjI3NDUyMAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvbW9kZWwvcHJvdmlkZXIvTW9kZWxJdGVtUHJvdmlkZXIuamF2YQpAQCAtMCwwICsxLDM2NiBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwucHJvdmlkZXI7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIAorICogQ29weXJpZ2h0IChjKSAyMDA2LCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiAKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdCAKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sIAorICogCisgKiBDb250cmlidXRvcnM6IAorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiAKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklGaWxlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24uY29tbWFuZC5Db21tYW5kOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24uY29tbWFuZC5Db21wb3VuZENvbW1hbmQ7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5SZXNvdXJjZUxvY2F0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlVSSTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRVN0cnVjdHVyYWxGZWF0dXJlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5yZXNvdXJjZS5SZXNvdXJjZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5jb21tYW5kLkFkZENvbW1hbmQ7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQuY29tbWFuZC5DcmVhdGVDaGlsZENvbW1hbmQ7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQuZG9tYWluLkVkaXRpbmdEb21haW47CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUVkaXRpbmdEb21haW5JdGVtUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1MYWJlbFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtUHJvcGVydHlEZXNjcmlwdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtUHJvcGVydHlTb3VyY2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVN0cnVjdHVyZWRJdGVtQ29udGVudFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklUcmVlSXRlbUNvbnRlbnRQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5WaWV3ZXJOb3RpZmljYXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLlV0aWxpdHk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5JZGVudGlmaWFibGU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5wcm92aWRlci5Db3JlRWRpdFBsdWdpbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLnByb3ZpZGVyLklkZW50aWZpYWJsZUl0ZW1Qcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguR3JhcGg7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkdyYXBoRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuTW9kZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLk1vZGVsRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuTW9kZWxQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5kbmQuRE5EOworCisvKioKKyAqIFRoaXMgaXMgdGhlIGl0ZW0gcHJvdmlkZXIgYWRhcHRlciBmb3IgYSB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLk1vZGVsfSBvYmplY3QuCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBNb2RlbEl0ZW1Qcm92aWRlcgorCWV4dGVuZHMgSWRlbnRpZmlhYmxlSXRlbVByb3ZpZGVyCisJaW1wbGVtZW50cwkKKwkJSUVkaXRpbmdEb21haW5JdGVtUHJvdmlkZXIsCQorCQlJU3RydWN0dXJlZEl0ZW1Db250ZW50UHJvdmlkZXIsCQorCQlJVHJlZUl0ZW1Db250ZW50UHJvdmlkZXIsCQorCQlJSXRlbUxhYmVsUHJvdmlkZXIsCQorCQlJSXRlbVByb3BlcnR5U291cmNlIHsKKwkvKioKKwkgKiBUaGlzIGNvbnN0cnVjdHMgYW4gaW5zdGFuY2UgZnJvbSBhIGZhY3RvcnkgYW5kIGEgbm90aWZpZXIuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIE1vZGVsSXRlbVByb3ZpZGVyKEFkYXB0ZXJGYWN0b3J5IGFkYXB0ZXJGYWN0b3J5KSB7CisJCXN1cGVyKGFkYXB0ZXJGYWN0b3J5KTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgdGhlIHByb3BlcnR5IGRlc2NyaXB0b3JzIGZvciB0aGUgYWRhcHRlZCBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgTGlzdDxJSXRlbVByb3BlcnR5RGVzY3JpcHRvcj4gZ2V0UHJvcGVydHlEZXNjcmlwdG9ycyhPYmplY3Qgb2JqZWN0KSB7CisJCWlmIChpdGVtUHJvcGVydHlEZXNjcmlwdG9ycyA9PSBudWxsKSB7CisJCQlzdXBlci5nZXRQcm9wZXJ0eURlc2NyaXB0b3JzKG9iamVjdCk7CisKKwkJfQorCQlyZXR1cm4gaXRlbVByb3BlcnR5RGVzY3JpcHRvcnM7CisJfQorCisJLyoqCisJICogVGhpcyBzcGVjaWZpZXMgaG93IHRvIGltcGxlbWVudCB7QGxpbmsgI2dldENoaWxkcmVufSBhbmQgaXMgdXNlZCB0byBkZWR1Y2UgYW4gYXBwcm9wcmlhdGUgZmVhdHVyZSBmb3IgYW4KKwkgKiB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmVkaXQuY29tbWFuZC5BZGRDb21tYW5kfSwge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lZGl0LmNvbW1hbmQuUmVtb3ZlQ29tbWFuZH0gb3IKKwkgKiB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmVkaXQuY29tbWFuZC5Nb3ZlQ29tbWFuZH0gaW4ge0BsaW5rICNjcmVhdGVDb21tYW5kfS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgQ29sbGVjdGlvbjw/IGV4dGVuZHMgRVN0cnVjdHVyYWxGZWF0dXJlPiBnZXRDaGlsZHJlbkZlYXR1cmVzKE9iamVjdCBvYmplY3QpIHsKKwkJaWYgKGNoaWxkcmVuRmVhdHVyZXMgPT0gbnVsbCkgeworCQkJc3VwZXIuZ2V0Q2hpbGRyZW5GZWF0dXJlcyhvYmplY3QpOworCQkJY2hpbGRyZW5GZWF0dXJlcy5hZGQoTW9kZWxQYWNrYWdlLkxpdGVyYWxzLk1PREVMX19NT0RFTFMpOworCQkJY2hpbGRyZW5GZWF0dXJlcy5hZGQoTW9kZWxQYWNrYWdlLkxpdGVyYWxzLk1PREVMX19HUkFQSFMpOworCQkJY2hpbGRyZW5GZWF0dXJlcy5hZGQoTW9kZWxQYWNrYWdlLkxpdGVyYWxzLk1PREVMX19HUkFQSF9ERUNPUkFUT1JTKTsKKwkJCWNoaWxkcmVuRmVhdHVyZXMuYWRkKE1vZGVsUGFja2FnZS5MaXRlcmFscy5NT0RFTF9fTk9ERV9ERUNPUkFUT1JTKTsKKwkJCWNoaWxkcmVuRmVhdHVyZXMuYWRkKE1vZGVsUGFja2FnZS5MaXRlcmFscy5NT0RFTF9fRURHRV9ERUNPUkFUT1JTKTsKKwkJfQorCQlyZXR1cm4gY2hpbGRyZW5GZWF0dXJlczsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIEVTdHJ1Y3R1cmFsRmVhdHVyZSBnZXRDaGlsZEZlYXR1cmUoT2JqZWN0IG9iamVjdCwgT2JqZWN0IGNoaWxkKSB7CisJCS8vIENoZWNrIHRoZSB0eXBlIG9mIHRoZSBzcGVjaWZpZWQgY2hpbGQgb2JqZWN0IGFuZCByZXR1cm4gdGhlIHByb3BlciBmZWF0dXJlIHRvIHVzZSBmb3IKKwkJLy8gYWRkaW5nIChzZWUge0BsaW5rIEFkZENvbW1hbmR9KSBpdCBhcyBhIGNoaWxkLgorCQlPYmplY3QgdGVtcCA9IGNoaWxkOworCQlpZiAoY2hpbGQgaW5zdGFuY2VvZiBJRmlsZSkgeworCQkJLy8gWWVzCisJCQlmaW5hbCBJRmlsZSBpRmlsZSA9IChJRmlsZSkgY2hpbGQ7CisJCQlmaW5hbCBVUkkgdXJpID0gVVJJLmNyZWF0ZUZpbGVVUkkoaUZpbGUuZ2V0TG9jYXRpb24oKS50b1N0cmluZygpKTsgCisJCQlmaW5hbCBJZGVudGlmaWFibGUgaWRlbnRpZmFibGUgPSBVdGlsaXR5LmdldElkZW50aWZpYWJsZSh1cmkpOworCQkJdGVtcCA9IGlkZW50aWZhYmxlOworCQl9IC8vIGlmIElGaWxlCisJCQorCQllbHNlIGlmIChjaGlsZCBpbnN0YW5jZW9mIFN0cmluZykgeworCQkJLy8gWWVzCisJCQkvLyBUaGVzZSBjb21lIGZyb20gSWRlbnRpZmFibGVQbHVnaW5WaWV3CisJCQlmaW5hbCBTdHJpbmcgdXJpU3RyaW5nID0gKFN0cmluZykgY2hpbGQ7CisJCQl0cnkgeworCQkJCWZpbmFsIFVSSSB1cmkgPSBVUkkuY3JlYXRlVVJJKHVyaVN0cmluZyk7CisJCQkJZmluYWwgSWRlbnRpZmlhYmxlIGlkZW50aWZhYmxlICA9IFV0aWxpdHkuZ2V0SWRlbnRpZmlhYmxlKHVyaSk7CisJCQkJdGVtcCA9IGlkZW50aWZhYmxlOworCQkJfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKKwkJCQkvLyBJZ25vcmUgaXQKKwkJCX0KKwkJfSAvLyBpZiBTdHJpbmcKKworCQlpZiAodGVtcCBpbnN0YW5jZW9mIElkZW50aWZpYWJsZSkgeworCQkJcmV0dXJuIHN1cGVyLmdldENoaWxkRmVhdHVyZShvYmplY3QsIHRlbXApOworCQl9IGVsc2UKKwkJCXJldHVybiBzdXBlci5nZXRDaGlsZEZlYXR1cmUob2JqZWN0LCBjaGlsZCk7CisKKwl9IC8vIGdldENoaWxkRmVhdHVyZQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIEVTdHJ1Y3R1cmFsRmVhdHVyZSBnZXRDaGlsZEZlYXR1cmVHZW4oT2JqZWN0IG9iamVjdCwgT2JqZWN0IGNoaWxkKSB7CisJCS8vIENoZWNrIHRoZSB0eXBlIG9mIHRoZSBzcGVjaWZpZWQgY2hpbGQgb2JqZWN0IGFuZCByZXR1cm4gdGhlIHByb3BlciBmZWF0dXJlIHRvIHVzZSBmb3IKKwkJLy8gYWRkaW5nIChzZWUge0BsaW5rIEFkZENvbW1hbmR9KSBpdCBhcyBhIGNoaWxkLgorCisJCXJldHVybiBzdXBlci5nZXRDaGlsZEZlYXR1cmUob2JqZWN0LCBjaGlsZCk7CisJfQorCQorCS8qKgorCSAqIFRoaXMgcmV0dXJucyBNb2RlbC5naWYuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBPYmplY3QgZ2V0SW1hZ2UoT2JqZWN0IG9iamVjdCkgeworLy8JCXJldHVybiBnZXRJbWFnZUdlbihvYmplY3QpOworCQlyZXR1cm4gb3ZlcmxheUltYWdlKG9iamVjdCwgZ2V0UmVzb3VyY2VMb2NhdG9yKCkuZ2V0SW1hZ2UoImZ1bGwvY3VzdG9tb2JqMTYvTW9kZWwiKSk7CisJfQorCQorCS8qKgorCSAqIFRoaXMgcmV0dXJucyB0aGUgbGFiZWwgdGV4dCBmb3IgdGhlIGFkYXB0ZWQgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBTdHJpbmcgZ2V0VGV4dChPYmplY3Qgb2JqZWN0KSB7CisJCXJldHVybiBzdXBlci5nZXRUZXh0KG9iamVjdCk7CisJfSAvLyBnZXRUZXh0CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgdGhlIGxhYmVsIHRleHQgZm9yIHRoZSBhZGFwdGVkIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworLy8JQE92ZXJyaWRlCisJQE92ZXJyaWRlCisJcHVibGljIFN0cmluZyBnZXRUZXh0R2VuKE9iamVjdCBvYmplY3QpIHsKKwkJVVJJIGxhYmVsVmFsdWUgPSAoKE1vZGVsKW9iamVjdCkuZ2V0VVJJKCk7CisJCVN0cmluZyBsYWJlbCA9IGxhYmVsVmFsdWUgPT0gbnVsbCA/IG51bGwgOiBsYWJlbFZhbHVlLnRvU3RyaW5nKCk7CisJCXJldHVybiBsYWJlbCA9PSBudWxsIHx8IGxhYmVsLmxlbmd0aCgpID09IDAgPworCQkJZ2V0U3RyaW5nKCJfVUlfTW9kZWxfdHlwZSIpIDogLy8kTk9OLU5MUy0xJAorCQkJZ2V0U3RyaW5nKCJfVUlfTW9kZWxfdHlwZSIpICsgIiAiICsgbGFiZWw7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAorCX0KKwkKKwkvKioKKwkgKiBUaGlzIGhhbmRsZXMgbW9kZWwgbm90aWZpY2F0aW9ucyBieSBjYWxsaW5nIHtAbGluayAjdXBkYXRlQ2hpbGRyZW59IHRvIHVwZGF0ZSBhbnkgY2FjaGVkCisJICogY2hpbGRyZW4gYW5kIGJ5IGNyZWF0aW5nIGEgdmlld2VyIG5vdGlmaWNhdGlvbiwgd2hpY2ggaXQgcGFzc2VzIHRvIHtAbGluayAjZmlyZU5vdGlmeUNoYW5nZWR9LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIG5vdGlmeUNoYW5nZWQoTm90aWZpY2F0aW9uIG5vdGlmaWNhdGlvbikgeworCQl1cGRhdGVDaGlsZHJlbihub3RpZmljYXRpb24pOworCisJCXN3aXRjaCAobm90aWZpY2F0aW9uLmdldEZlYXR1cmVJRChNb2RlbC5jbGFzcykpIHsKKwkJCWNhc2UgTW9kZWxQYWNrYWdlLk1PREVMX19NT0RFTFM6CisJCQljYXNlIE1vZGVsUGFja2FnZS5NT0RFTF9fR1JBUEhTOgorCQkJY2FzZSBNb2RlbFBhY2thZ2UuTU9ERUxfX0dSQVBIX0RFQ09SQVRPUlM6CisJCQljYXNlIE1vZGVsUGFja2FnZS5NT0RFTF9fTk9ERV9ERUNPUkFUT1JTOgorCQkJY2FzZSBNb2RlbFBhY2thZ2UuTU9ERUxfX0VER0VfREVDT1JBVE9SUzoKKwkJCQlmaXJlTm90aWZ5Q2hhbmdlZChuZXcgVmlld2VyTm90aWZpY2F0aW9uKG5vdGlmaWNhdGlvbiwgbm90aWZpY2F0aW9uLmdldE5vdGlmaWVyKCksIHRydWUsIGZhbHNlKSk7CisJCQkJcmV0dXJuOworCQl9CisJCXN1cGVyLm5vdGlmeUNoYW5nZWQobm90aWZpY2F0aW9uKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFkZHMge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lZGl0LmNvbW1hbmQuQ29tbWFuZFBhcmFtZXRlcn1zIGRlc2NyaWJpbmcgdGhlIGNoaWxkcmVuCisJICogdGhhdCBjYW4gYmUgY3JlYXRlZCB1bmRlciB0aGlzIG9iamVjdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgdm9pZCBjb2xsZWN0TmV3Q2hpbGREZXNjcmlwdG9ycyhDb2xsZWN0aW9uPE9iamVjdD4gbmV3Q2hpbGREZXNjcmlwdG9ycywgT2JqZWN0IG9iamVjdCkgeworCQlzdXBlci5jb2xsZWN0TmV3Q2hpbGREZXNjcmlwdG9ycyhuZXdDaGlsZERlc2NyaXB0b3JzLCBvYmplY3QpOworCisJCW5ld0NoaWxkRGVzY3JpcHRvcnMuYWRkCisJCQkoY3JlYXRlQ2hpbGRQYXJhbWV0ZXIKKwkJCQkoTW9kZWxQYWNrYWdlLkxpdGVyYWxzLk1PREVMX19NT0RFTFMsCisJCQkJIE1vZGVsRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlTW9kZWwoKSkpOworCisJCW5ld0NoaWxkRGVzY3JpcHRvcnMuYWRkCisJCQkoY3JlYXRlQ2hpbGRQYXJhbWV0ZXIKKwkJCQkoTW9kZWxQYWNrYWdlLkxpdGVyYWxzLk1PREVMX19HUkFQSFMsCisJCQkJIEdyYXBoRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlR3JhcGgoKSkpOworCX0KKworCQorCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSXRlbVByb3ZpZGVyQWRhcHRlciNjcmVhdGVEcmFnQW5kRHJvcENvbW1hbmQob3JnLmVjbGlwc2UuZW1mLmVkaXQuZG9tYWluLkVkaXRpbmdEb21haW4sIGphdmEubGFuZy5PYmplY3QsIGZsb2F0LCBpbnQsIGludCwgamF2YS51dGlsLkNvbGxlY3Rpb24pCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIENvbW1hbmQgY3JlYXRlRHJhZ0FuZERyb3BDb21tYW5kKEVkaXRpbmdEb21haW4gZG9tYWluLAorCQkJT2JqZWN0IG93bmVyLCBmbG9hdCBsb2NhdGlvbiwgaW50IG9wZXJhdGlvbnMsIGludCBvcGVyYXRpb24sCisJCQlDb2xsZWN0aW9uPD8+IGNvbGxlY3Rpb24pIHsKKwkJLy8gV2UgYWRkIERORC5EUk9QX0xJTksgYXMgYW4gYWxsb3dlZCBvcGVyYXRpb24gYmVjYXVzZSBhbGwgZHJvcHMgd2lsbAorCQkvLyBiZSBsaW5rcyBhbmQgc29tZSBzb3VyY2VzIGRvbid0IGFsbG93IGxpbmtzLCB3ZSBjb252ZXJ0IHRvIGxpbmtzIGFueXdheQorCQlyZXR1cm4gc3VwZXIuY3JlYXRlRHJhZ0FuZERyb3BDb21tYW5kKGRvbWFpbiwgb3duZXIsIGxvY2F0aW9uLCBvcGVyYXRpb25zIHwgRE5ELkRST1BfTElOSywKKwkJCQlvcGVyYXRpb24sIGNvbGxlY3Rpb24pOworCX0gLy8gY3JlYXRlRHJhZ0FuZERyb3BDb21tYW5kCisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkl0ZW1Qcm92aWRlckFkYXB0ZXIjY3JlYXRlQWRkQ29tbWFuZChvcmcuZWNsaXBzZS5lbWYuZWRpdC5kb21haW4uRWRpdGluZ0RvbWFpbiwgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QsIG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FU3RydWN0dXJhbEZlYXR1cmUsIGphdmEudXRpbC5Db2xsZWN0aW9uLCBpbnQpCisJICovCisJQFN1cHByZXNzV2FybmluZ3MoInVuY2hlY2tlZCIpCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIENvbW1hbmQgY3JlYXRlQWRkQ29tbWFuZChFZGl0aW5nRG9tYWluIGRvbWFpbiwgRU9iamVjdCBvd25lciwKKwkJCUVTdHJ1Y3R1cmFsRmVhdHVyZSBmZWF0dXJlLCBDb2xsZWN0aW9uPD8+IGNvbGxlY3Rpb24sIGludCBpbmRleCkgeworCQlmaW5hbCBDb2xsZWN0aW9uIGlkZW50aWZpYWJsZUNvbGxlY3Rpb24gPSBuZXcgQXJyYXlMaXN0KCk7CisJCWZvciAoT2JqZWN0IHZhbHVlIDogY29sbGVjdGlvbikgeworCisJCQlPYmplY3QgdGVtcCA9IHZhbHVlOworCQkJaWYgKHZhbHVlIGluc3RhbmNlb2YgSUZpbGUpIHsKKwkJCQkvLyBZZXMKKwkJCQlmaW5hbCBJRmlsZSBpRmlsZSA9IChJRmlsZSkgdmFsdWU7CisJCQkJZmluYWwgVVJJIHVyaSA9IFVSSS5jcmVhdGVGaWxlVVJJKGlGaWxlLmdldExvY2F0aW9uKCkKKwkJCQkJCS50b1N0cmluZygpKTsKKwkJCQlmaW5hbCBJZGVudGlmaWFibGUgaWRlbnRpZmFibGUgPSBVdGlsaXR5LmdldElkZW50aWZpYWJsZSh1cmkpOworCQkJCWlkZW50aWZpYWJsZUNvbGxlY3Rpb24uYWRkKGlkZW50aWZhYmxlKTsKKwkJCQl0ZW1wID0gaWRlbnRpZmFibGU7CisJCQl9IC8vIGlmIElGaWxlCisKKwkJCWVsc2UgaWYgKHZhbHVlIGluc3RhbmNlb2YgU3RyaW5nKSB7CisJCQkJLy8gWWVzCisJCQkJZmluYWwgU3RyaW5nIHVyaVN0cmluZyA9IChTdHJpbmcpIHZhbHVlOworCQkJCXRyeSB7CisJCQkJCWZpbmFsIFVSSSB1cmkgPSBVUkkuY3JlYXRlVVJJKHVyaVN0cmluZyk7CisJCQkJCWZpbmFsIElkZW50aWZpYWJsZSBpZGVudGlmYWJsZSA9IFV0aWxpdHkKKwkJCQkJCQkuZ2V0SWRlbnRpZmlhYmxlKHVyaSk7CisJCQkJCXRlbXAgPSBpZGVudGlmYWJsZTsKKwkJCQl9IGNhdGNoIChFeGNlcHRpb24gZSkgeworCQkJCQkvLyBJZ25vcmUgaXQKKwkJCQl9CisJCQl9IC8vIGlmIFN0cmluZworCisJCQlpZiAodGVtcCBpbnN0YW5jZW9mIElkZW50aWZpYWJsZSkgeworCQkJCWlkZW50aWZpYWJsZUNvbGxlY3Rpb24uYWRkKHRlbXApOworCQkJfQorCQl9IC8vIGZvciBlYWNoIE9iamVjdAorCisJCXJldHVybiBzdXBlci5jcmVhdGVBZGRDb21tYW5kKGRvbWFpbiwgb3duZXIsIGZlYXR1cmUsCisJCQkJaWRlbnRpZmlhYmxlQ29sbGVjdGlvbiwgaW5kZXgpOworCX0gLy8gY3JlYXRlQWRkQ29tbWFuZAorCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIENvbW1hbmQgY3JlYXRlQ3JlYXRlQ2hpbGRDb21tYW5kKEVkaXRpbmdEb21haW4gZG9tYWluLAorCQkJRU9iamVjdCBvd25lciwgRVN0cnVjdHVyYWxGZWF0dXJlIGZlYXR1cmUsIE9iamVjdCB2YWx1ZSwgaW50IGluZGV4LAorCQkJQ29sbGVjdGlvbjw/PiBjb2xsZWN0aW9uKSB7CisJCQorCQlyZXR1cm4gbmV3IENyZWF0ZUNoaWxkQ29tbWFuZChkb21haW4sb3duZXIsZmVhdHVyZSx2YWx1ZSxpbmRleCxjb2xsZWN0aW9uLHRoaXMpIHsKKwkJCisJCQlAT3ZlcnJpZGUKKwkJCXByb3RlY3RlZCBDb21tYW5kIGNyZWF0ZUNvbW1hbmQoKSB7CisKKwkJCQlDb21tYW5kIHJldFZhbHVlID0gbnVsbDsKKworCQkJCWZpbmFsIENvbW1hbmQgY3JlYXRlQ2hpbGRDb21tYW5kID0gc3VwZXIuY3JlYXRlQ29tbWFuZCgpOworCisJCQkJZmluYWwgUmVzb3VyY2UgcGFyZW50UmVzb3VyY2UgPSBvd25lci5lUmVzb3VyY2UoKTsKKwkJCQkvLyBBcmUgd2UgY3JlYXRpbmcgYSBNb2RlbCBvciBhIEdyYXBoPworCQkJCWlmIChwYXJlbnRSZXNvdXJjZSAhPSBudWxsICYmIChjaGlsZCBpbnN0YW5jZW9mIE1vZGVsIHx8IGNoaWxkIGluc3RhbmNlb2YgR3JhcGgpKSB7CisJCQkJCS8vIFllcworCQkJCQlmaW5hbCBFT2JqZWN0IHRlbXAgPSAoRU9iamVjdCkgY2hpbGQ7CisJCQkJCS8vIERvZXMgdGhlIGNoaWxkIGhhdmUgYSByZXNvdXJjZSBhbHJlYWR5PworCQkJCQlpZiAodGVtcC5lUmVzb3VyY2UoKSA9PSBudWxsKSB7CisJCQkJCQkvLyBObworCQkJCQkJZmluYWwgQ29tbWFuZCBhZGRDb21tYW5kID0gbmV3IEFkZENvbW1hbmQoZG9tYWluLAorCQkJCQkJCQlwYXJlbnRSZXNvdXJjZS5nZXRDb250ZW50cygpLCB0ZW1wKTsKKworCQkJCQkJZmluYWwgQ29tcG91bmRDb21tYW5kIGNvbXBvdW5kQ29tbWFuZCA9IG5ldyBDb21wb3VuZENvbW1hbmQoCisJCQkJCQkJCTAsIGNyZWF0ZUNoaWxkQ29tbWFuZC5nZXRMYWJlbCgpLAorCQkJCQkJCQljcmVhdGVDaGlsZENvbW1hbmQuZ2V0RGVzY3JpcHRpb24oKSk7CisJCQkJCQljb21wb3VuZENvbW1hbmQuYXBwZW5kKGNyZWF0ZUNoaWxkQ29tbWFuZCk7CisJCQkJCQljb21wb3VuZENvbW1hbmQuYXBwZW5kKGFkZENvbW1hbmQpOworCQkJCQkJcmV0VmFsdWUgPSBjb21wb3VuZENvbW1hbmQ7CisJCQkJCX0gLy8gaWYgTW9kZWwgZG9lcyBub3QgaGF2ZSBhIHJlc291cmNlCisJCQkJfSAvLyBpZiBNb2RlbAorCQkJCWVsc2UgeworCQkJCQlyZXRWYWx1ZSA9IGNyZWF0ZUNoaWxkQ29tbWFuZDsKKwkJCQl9CisKKwkJCQlyZXR1cm4gcmV0VmFsdWU7CisJCQl9IC8vIGNyZWF0ZUNvbW1hbmQKKwkJCisJCX07IC8vIENyZWF0ZUNoaWxkQ29tbWFuZAorCQkKKwl9IC8vIGNyZWF0ZUNyZWF0ZUNoaWxkQ29tbWFuZAorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JdGVtUHJvdmlkZXJBZGFwdGVyI2lzV3JhcHBpbmdOZWVkZWQoamF2YS5sYW5nLk9iamVjdCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgYm9vbGVhbiBpc1dyYXBwaW5nTmVlZGVkKE9iamVjdCBvYmplY3QpIHsKKwkJLy8gcmV0dXJuIHN1cGVyLmlzV3JhcHBpbmdOZWVkZWQob2JqZWN0KTsKKwkJLy8gV2UgcmV0dXJuIHRydWUgc28gdGhhdCBub24tY29udGFpbm1lbnQgcmVmZXJlbmNlcyBhcmUgd3JhcHBlZC4gVGhpcworCQkvLyBlbmFibGVzIHRoZSBkZWxldGUgY29tbWFuZCBpbiB0aGUgZWRpdG9yJ3MgY29udGV4dCBtZW51LgorCQlyZXR1cm4gdHJ1ZTsKKwl9IC8vIGlzV3JhcHBpbmdOZWVkZWQKKwkKKwkvKioKKwkgKiBSZXR1cm4gdGhlIHJlc291cmNlIGxvY2F0b3IgZm9yIHRoaXMgaXRlbSBwcm92aWRlcidzIHJlc291cmNlcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgUmVzb3VyY2VMb2NhdG9yIGdldFJlc291cmNlTG9jYXRvcigpIHsKKwkJcmV0dXJuIENvcmVFZGl0UGx1Z2luLklOU1RBTkNFOworCX0KKworfQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9tb2RlbC9wcm92aWRlci9Nb2RlbEl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5LmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL21vZGVsL3Byb3ZpZGVyL01vZGVsSXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NzIyZGJhCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9tb2RlbC9wcm92aWRlci9Nb2RlbEl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5LmphdmEKQEAgLTAsMCArMSwzMjcgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLnByb3ZpZGVyOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAKKyAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4gCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIAorICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wIAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQgCisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbCAKKyAqIAorICogQ29udHJpYnV0b3JzOiAKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAKK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OworaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuQWRhcHRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuQ2hhbmdlTm90aWZpZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5Db21wb3NlZEFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklDaGFuZ2VOb3RpZmllcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JRGlzcG9zYWJsZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JRWRpdGluZ0RvbWFpbkl0ZW1Qcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbUxhYmVsUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1Qcm9wZXJ0eVNvdXJjZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JTm90aWZ5Q2hhbmdlZExpc3RlbmVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklTdHJ1Y3R1cmVkSXRlbUNvbnRlbnRQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JVHJlZUl0ZW1Db250ZW50UHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLnV0aWwuTW9kZWxBZGFwdGVyRmFjdG9yeTsKKworLyoqCisgKiBUaGlzIGlzIHRoZSBmYWN0b3J5IHRoYXQgaXMgdXNlZCB0byBwcm92aWRlIHRoZSBpbnRlcmZhY2VzIG5lZWRlZCB0byBzdXBwb3J0IFZpZXdlcnMuCisgKiBUaGUgYWRhcHRlcnMgZ2VuZXJhdGVkIGJ5IHRoaXMgZmFjdG9yeSBjb252ZXJ0IEVNRiBhZGFwdGVyIG5vdGlmaWNhdGlvbnMgaW50byBjYWxscyB0byB7QGxpbmsgI2ZpcmVOb3RpZnlDaGFuZ2VkIGZpcmVOb3RpZnlDaGFuZ2VkfS4KKyAqIFRoZSBhZGFwdGVycyBhbHNvIHN1cHBvcnQgRWNsaXBzZSBwcm9wZXJ0eSBzaGVldHMuCisgKiBOb3RlIHRoYXQgbW9zdCBvZiB0aGUgYWRhcHRlcnMgYXJlIHNoYXJlZCBhbW9uZyBtdWx0aXBsZSBpbnN0YW5jZXMuCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBNb2RlbEl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5IGV4dGVuZHMgTW9kZWxBZGFwdGVyRmFjdG9yeSBpbXBsZW1lbnRzIENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnksIElDaGFuZ2VOb3RpZmllciwgSURpc3Bvc2FibGUgeworCS8qKgorCSAqIFRoaXMga2VlcHMgdHJhY2sgb2YgdGhlIHJvb3QgYWRhcHRlciBmYWN0b3J5IHRoYXQgZGVsZWdhdGVzIHRvIHRoaXMgYWRhcHRlciBmYWN0b3J5LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBDb21wb3NlZEFkYXB0ZXJGYWN0b3J5IHBhcmVudEFkYXB0ZXJGYWN0b3J5OworCisJLyoqCisJICogVGhpcyBpcyB1c2VkIHRvIGltcGxlbWVudCB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUNoYW5nZU5vdGlmaWVyfS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgSUNoYW5nZU5vdGlmaWVyIGNoYW5nZU5vdGlmaWVyID0gbmV3IENoYW5nZU5vdGlmaWVyKCk7CisKKwkvKioKKwkgKiBUaGlzIGtlZXBzIHRyYWNrIG9mIGFsbCB0aGUgc3VwcG9ydGVkIHR5cGVzIGNoZWNrZWQgYnkge0BsaW5rICNpc0ZhY3RvcnlGb3JUeXBlIGlzRmFjdG9yeUZvclR5cGV9LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBDb2xsZWN0aW9uPE9iamVjdD4gc3VwcG9ydGVkVHlwZXMgPSBuZXcgQXJyYXlMaXN0PE9iamVjdD4oKTsKKworCS8qKgorCSAqIFRoaXMgY29uc3RydWN0cyBhbiBpbnN0YW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgTW9kZWxJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSgpIHsKKwkJc3VwcG9ydGVkVHlwZXMuYWRkKElFZGl0aW5nRG9tYWluSXRlbVByb3ZpZGVyLmNsYXNzKTsKKwkJc3VwcG9ydGVkVHlwZXMuYWRkKElTdHJ1Y3R1cmVkSXRlbUNvbnRlbnRQcm92aWRlci5jbGFzcyk7CisJCXN1cHBvcnRlZFR5cGVzLmFkZChJVHJlZUl0ZW1Db250ZW50UHJvdmlkZXIuY2xhc3MpOworCQlzdXBwb3J0ZWRUeXBlcy5hZGQoSUl0ZW1MYWJlbFByb3ZpZGVyLmNsYXNzKTsKKwkJc3VwcG9ydGVkVHlwZXMuYWRkKElJdGVtUHJvcGVydHlTb3VyY2UuY2xhc3MpOworCX0KKworCS8qKgorCSAqIFRoaXMga2VlcHMgdHJhY2sgb2YgdGhlIG9uZSBhZGFwdGVyIHVzZWQgZm9yIGFsbCB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLkRlY29yYXRvcn0gaW5zdGFuY2VzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBEZWNvcmF0b3JJdGVtUHJvdmlkZXIgZGVjb3JhdG9ySXRlbVByb3ZpZGVyOworCisJLyoqCisJICogVGhpcyBjcmVhdGVzIGFuIGFkYXB0ZXIgZm9yIGEge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5EZWNvcmF0b3J9LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZURlY29yYXRvckFkYXB0ZXIoKSB7CisJCWlmIChkZWNvcmF0b3JJdGVtUHJvdmlkZXIgPT0gbnVsbCkgeworCQkJZGVjb3JhdG9ySXRlbVByb3ZpZGVyID0gbmV3IERlY29yYXRvckl0ZW1Qcm92aWRlcih0aGlzKTsKKwkJfQorCisJCXJldHVybiBkZWNvcmF0b3JJdGVtUHJvdmlkZXI7CisJfQorCisJLyoqCisJICogVGhpcyBrZWVwcyB0cmFjayBvZiB0aGUgb25lIGFkYXB0ZXIgdXNlZCBmb3IgYWxsIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuRWRnZURlY29yYXRvcn0gaW5zdGFuY2VzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBFZGdlRGVjb3JhdG9ySXRlbVByb3ZpZGVyIGVkZ2VEZWNvcmF0b3JJdGVtUHJvdmlkZXI7CisKKwkvKioKKwkgKiBUaGlzIGNyZWF0ZXMgYW4gYWRhcHRlciBmb3IgYSB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLkVkZ2VEZWNvcmF0b3J9LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZUVkZ2VEZWNvcmF0b3JBZGFwdGVyKCkgeworCQlpZiAoZWRnZURlY29yYXRvckl0ZW1Qcm92aWRlciA9PSBudWxsKSB7CisJCQllZGdlRGVjb3JhdG9ySXRlbVByb3ZpZGVyID0gbmV3IEVkZ2VEZWNvcmF0b3JJdGVtUHJvdmlkZXIodGhpcyk7CisJCX0KKworCQlyZXR1cm4gZWRnZURlY29yYXRvckl0ZW1Qcm92aWRlcjsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGtlZXBzIHRyYWNrIG9mIHRoZSBvbmUgYWRhcHRlciB1c2VkIGZvciBhbGwge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5HcmFwaERlY29yYXRvcn0gaW5zdGFuY2VzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBHcmFwaERlY29yYXRvckl0ZW1Qcm92aWRlciBncmFwaERlY29yYXRvckl0ZW1Qcm92aWRlcjsKKworCS8qKgorCSAqIFRoaXMgY3JlYXRlcyBhbiBhZGFwdGVyIGZvciBhIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuR3JhcGhEZWNvcmF0b3J9LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZUdyYXBoRGVjb3JhdG9yQWRhcHRlcigpIHsKKwkJaWYgKGdyYXBoRGVjb3JhdG9ySXRlbVByb3ZpZGVyID09IG51bGwpIHsKKwkJCWdyYXBoRGVjb3JhdG9ySXRlbVByb3ZpZGVyID0gbmV3IEdyYXBoRGVjb3JhdG9ySXRlbVByb3ZpZGVyKHRoaXMpOworCQl9CisKKwkJcmV0dXJuIGdyYXBoRGVjb3JhdG9ySXRlbVByb3ZpZGVyOworCX0KKworCS8qKgorCSAqIFRoaXMga2VlcHMgdHJhY2sgb2YgdGhlIG9uZSBhZGFwdGVyIHVzZWQgZm9yIGFsbCB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLk1vZGVsfSBpbnN0YW5jZXMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIE1vZGVsSXRlbVByb3ZpZGVyIG1vZGVsSXRlbVByb3ZpZGVyOworCisJLyoqCisJICogVGhpcyBjcmVhdGVzIGFuIGFkYXB0ZXIgZm9yIGEge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5Nb2RlbH0uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlTW9kZWxBZGFwdGVyKCkgeworCQlpZiAobW9kZWxJdGVtUHJvdmlkZXIgPT0gbnVsbCkgeworCQkJbW9kZWxJdGVtUHJvdmlkZXIgPSBuZXcgTW9kZWxJdGVtUHJvdmlkZXIodGhpcyk7CisJCX0KKworCQlyZXR1cm4gbW9kZWxJdGVtUHJvdmlkZXI7CisJfQorCisJLyoqCisJICogVGhpcyBrZWVwcyB0cmFjayBvZiB0aGUgb25lIGFkYXB0ZXIgdXNlZCBmb3IgYWxsIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuTm9kZURlY29yYXRvcn0gaW5zdGFuY2VzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBOb2RlRGVjb3JhdG9ySXRlbVByb3ZpZGVyIG5vZGVEZWNvcmF0b3JJdGVtUHJvdmlkZXI7CisKKwkvKioKKwkgKiBUaGlzIGNyZWF0ZXMgYW4gYWRhcHRlciBmb3IgYSB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLk5vZGVEZWNvcmF0b3J9LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZU5vZGVEZWNvcmF0b3JBZGFwdGVyKCkgeworCQlpZiAobm9kZURlY29yYXRvckl0ZW1Qcm92aWRlciA9PSBudWxsKSB7CisJCQlub2RlRGVjb3JhdG9ySXRlbVByb3ZpZGVyID0gbmV3IE5vZGVEZWNvcmF0b3JJdGVtUHJvdmlkZXIodGhpcyk7CisJCX0KKworCQlyZXR1cm4gbm9kZURlY29yYXRvckl0ZW1Qcm92aWRlcjsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGtlZXBzIHRyYWNrIG9mIHRoZSBvbmUgYWRhcHRlciB1c2VkIGZvciBhbGwge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5TVEVNVGltZX0gaW5zdGFuY2VzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBTVEVNVGltZUl0ZW1Qcm92aWRlciBzdGVtVGltZUl0ZW1Qcm92aWRlcjsKKworCS8qKgorCSAqIFRoaXMgY3JlYXRlcyBhbiBhZGFwdGVyIGZvciBhIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuU1RFTVRpbWV9LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZVNURU1UaW1lQWRhcHRlcigpIHsKKwkJaWYgKHN0ZW1UaW1lSXRlbVByb3ZpZGVyID09IG51bGwpIHsKKwkJCXN0ZW1UaW1lSXRlbVByb3ZpZGVyID0gbmV3IFNURU1UaW1lSXRlbVByb3ZpZGVyKHRoaXMpOworCQl9CisKKwkJcmV0dXJuIHN0ZW1UaW1lSXRlbVByb3ZpZGVyOworCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyB0aGUgcm9vdCBhZGFwdGVyIGZhY3RvcnkgdGhhdCBjb250YWlucyB0aGlzIGZhY3RvcnkuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnkgZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCkgeworCQlyZXR1cm4gcGFyZW50QWRhcHRlckZhY3RvcnkgPT0gbnVsbCA/IHRoaXMgOiBwYXJlbnRBZGFwdGVyRmFjdG9yeS5nZXRSb290QWRhcHRlckZhY3RvcnkoKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHNldHMgdGhlIGNvbXBvc2VkIGFkYXB0ZXIgZmFjdG9yeSB0aGF0IGNvbnRhaW5zIHRoaXMgZmFjdG9yeS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRQYXJlbnRBZGFwdGVyRmFjdG9yeShDb21wb3NlZEFkYXB0ZXJGYWN0b3J5IHBhcmVudEFkYXB0ZXJGYWN0b3J5KSB7CisJCXRoaXMucGFyZW50QWRhcHRlckZhY3RvcnkgPSBwYXJlbnRBZGFwdGVyRmFjdG9yeTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgYm9vbGVhbiBpc0ZhY3RvcnlGb3JUeXBlKE9iamVjdCB0eXBlKSB7CisJCXJldHVybiBzdXBwb3J0ZWRUeXBlcy5jb250YWlucyh0eXBlKSB8fCBzdXBlci5pc0ZhY3RvcnlGb3JUeXBlKHR5cGUpOworCX0KKworCS8qKgorCSAqIFRoaXMgaW1wbGVtZW50YXRpb24gc3Vic3RpdHV0ZXMgdGhlIGZhY3RvcnkgaXRzZWxmIGFzIHRoZSBrZXkgZm9yIHRoZSBhZGFwdGVyLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBBZGFwdGVyIGFkYXB0KE5vdGlmaWVyIG5vdGlmaWVyLCBPYmplY3QgdHlwZSkgeworCQlyZXR1cm4gc3VwZXIuYWRhcHQobm90aWZpZXIsIHRoaXMpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBTdXBwcmVzc1dhcm5pbmdzKCJ1bmNoZWNrZWQiKQorCUBPdmVycmlkZQorCXB1YmxpYyBPYmplY3QgYWRhcHQoT2JqZWN0IG9iamVjdCwgT2JqZWN0IHR5cGUpIHsKKwkJaWYgKGlzRmFjdG9yeUZvclR5cGUodHlwZSkpIHsKKwkJCU9iamVjdCBhZGFwdGVyID0gc3VwZXIuYWRhcHQob2JqZWN0LCB0eXBlKTsKKwkJCWlmICghKHR5cGUgaW5zdGFuY2VvZiBDbGFzczw/PikgfHwgKCgoQ2xhc3M8Pz4pdHlwZSkuaXNJbnN0YW5jZShhZGFwdGVyKSkpIHsKKwkJCQlyZXR1cm4gYWRhcHRlcjsKKwkJCX0KKwkJfQorCisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyBhIGxpc3RlbmVyLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIGFkZExpc3RlbmVyKElOb3RpZnlDaGFuZ2VkTGlzdGVuZXIgbm90aWZ5Q2hhbmdlZExpc3RlbmVyKSB7CisJCWNoYW5nZU5vdGlmaWVyLmFkZExpc3RlbmVyKG5vdGlmeUNoYW5nZWRMaXN0ZW5lcik7CisJfQorCisJLyoqCisJICogVGhpcyByZW1vdmVzIGEgbGlzdGVuZXIuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgcmVtb3ZlTGlzdGVuZXIoSU5vdGlmeUNoYW5nZWRMaXN0ZW5lciBub3RpZnlDaGFuZ2VkTGlzdGVuZXIpIHsKKwkJY2hhbmdlTm90aWZpZXIucmVtb3ZlTGlzdGVuZXIobm90aWZ5Q2hhbmdlZExpc3RlbmVyKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGRlbGVnYXRlcyB0byB7QGxpbmsgI2NoYW5nZU5vdGlmaWVyfSBhbmQgdG8ge0BsaW5rICNwYXJlbnRBZGFwdGVyRmFjdG9yeX0uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgZmlyZU5vdGlmeUNoYW5nZWQoTm90aWZpY2F0aW9uIG5vdGlmaWNhdGlvbikgeworCQljaGFuZ2VOb3RpZmllci5maXJlTm90aWZ5Q2hhbmdlZChub3RpZmljYXRpb24pOworCisJCWlmIChwYXJlbnRBZGFwdGVyRmFjdG9yeSAhPSBudWxsKSB7CisJCQlwYXJlbnRBZGFwdGVyRmFjdG9yeS5maXJlTm90aWZ5Q2hhbmdlZChub3RpZmljYXRpb24pOworCQl9CisJfQorCisJLyoqCisJICogVGhpcyBkaXNwb3NlcyBhbGwgb2YgdGhlIGl0ZW0gcHJvdmlkZXJzIGNyZWF0ZWQgYnkgdGhpcyBmYWN0b3J5LiAKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBkaXNwb3NlKCkgeworCQlpZiAoZGVjb3JhdG9ySXRlbVByb3ZpZGVyICE9IG51bGwpIGRlY29yYXRvckl0ZW1Qcm92aWRlci5kaXNwb3NlKCk7CisJCWlmIChlZGdlRGVjb3JhdG9ySXRlbVByb3ZpZGVyICE9IG51bGwpIGVkZ2VEZWNvcmF0b3JJdGVtUHJvdmlkZXIuZGlzcG9zZSgpOworCQlpZiAoZ3JhcGhEZWNvcmF0b3JJdGVtUHJvdmlkZXIgIT0gbnVsbCkgZ3JhcGhEZWNvcmF0b3JJdGVtUHJvdmlkZXIuZGlzcG9zZSgpOworCQlpZiAobW9kZWxJdGVtUHJvdmlkZXIgIT0gbnVsbCkgbW9kZWxJdGVtUHJvdmlkZXIuZGlzcG9zZSgpOworCQlpZiAobm9kZURlY29yYXRvckl0ZW1Qcm92aWRlciAhPSBudWxsKSBub2RlRGVjb3JhdG9ySXRlbVByb3ZpZGVyLmRpc3Bvc2UoKTsKKwkJaWYgKHN0ZW1UaW1lSXRlbVByb3ZpZGVyICE9IG51bGwpIHN0ZW1UaW1lSXRlbVByb3ZpZGVyLmRpc3Bvc2UoKTsKKwl9CisKK30KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvbW9kZWwvcHJvdmlkZXIvTm9kZURlY29yYXRvckl0ZW1Qcm92aWRlci5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9tb2RlbC9wcm92aWRlci9Ob2RlRGVjb3JhdG9ySXRlbVByb3ZpZGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWFiMGFkMgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvbW9kZWwvcHJvdmlkZXIvTm9kZURlY29yYXRvckl0ZW1Qcm92aWRlci5qYXZhCkBAIC0wLDAgKzEsMTAxIEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5wcm92aWRlcjsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuIAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyAKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0IAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwgCisgKiAKKyAqIENvbnRyaWJ1dG9yczogCisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LkFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JRWRpdGluZ0RvbWFpbkl0ZW1Qcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbUxhYmVsUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1Qcm9wZXJ0eVNvdXJjZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JU3RydWN0dXJlZEl0ZW1Db250ZW50UHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVRyZWVJdGVtQ29udGVudFByb3ZpZGVyOworCisvKioKKyAqIFRoaXMgaXMgdGhlIGl0ZW0gcHJvdmlkZXIgYWRhcHRlciBmb3IgYSB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLk5vZGVEZWNvcmF0b3J9IG9iamVjdC4KKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIE5vZGVEZWNvcmF0b3JJdGVtUHJvdmlkZXIKKwlleHRlbmRzIERlY29yYXRvckl0ZW1Qcm92aWRlcgorCWltcGxlbWVudHMJCisJCUlFZGl0aW5nRG9tYWluSXRlbVByb3ZpZGVyLAkKKwkJSVN0cnVjdHVyZWRJdGVtQ29udGVudFByb3ZpZGVyLAkKKwkJSVRyZWVJdGVtQ29udGVudFByb3ZpZGVyLAkKKwkJSUl0ZW1MYWJlbFByb3ZpZGVyLAkKKwkJSUl0ZW1Qcm9wZXJ0eVNvdXJjZSB7CisJLyoqCisJICogVGhpcyBjb25zdHJ1Y3RzIGFuIGluc3RhbmNlIGZyb20gYSBmYWN0b3J5IGFuZCBhIG5vdGlmaWVyLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBOb2RlRGVjb3JhdG9ySXRlbVByb3ZpZGVyKEFkYXB0ZXJGYWN0b3J5IGFkYXB0ZXJGYWN0b3J5KSB7CisJCXN1cGVyKGFkYXB0ZXJGYWN0b3J5KTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgdGhlIHByb3BlcnR5IGRlc2NyaXB0b3JzIGZvciB0aGUgYWRhcHRlZCBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgTGlzdDxJSXRlbVByb3BlcnR5RGVzY3JpcHRvcj4gZ2V0UHJvcGVydHlEZXNjcmlwdG9ycyhPYmplY3Qgb2JqZWN0KSB7CisJCWlmIChpdGVtUHJvcGVydHlEZXNjcmlwdG9ycyA9PSBudWxsKSB7CisJCQlzdXBlci5nZXRQcm9wZXJ0eURlc2NyaXB0b3JzKG9iamVjdCk7CisKKwkJfQorCQlyZXR1cm4gaXRlbVByb3BlcnR5RGVzY3JpcHRvcnM7CisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIHRoZSBsYWJlbCB0ZXh0IGZvciB0aGUgYWRhcHRlZCBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIFN0cmluZyBnZXRUZXh0KE9iamVjdCBvYmplY3QpIHsKKwkJcmV0dXJuIHN1cGVyLmdldFRleHQob2JqZWN0KTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGhhbmRsZXMgbW9kZWwgbm90aWZpY2F0aW9ucyBieSBjYWxsaW5nIHtAbGluayAjdXBkYXRlQ2hpbGRyZW59IHRvIHVwZGF0ZSBhbnkgY2FjaGVkCisJICogY2hpbGRyZW4gYW5kIGJ5IGNyZWF0aW5nIGEgdmlld2VyIG5vdGlmaWNhdGlvbiwgd2hpY2ggaXQgcGFzc2VzIHRvIHtAbGluayAjZmlyZU5vdGlmeUNoYW5nZWR9LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIG5vdGlmeUNoYW5nZWQoTm90aWZpY2F0aW9uIG5vdGlmaWNhdGlvbikgeworCQl1cGRhdGVDaGlsZHJlbihub3RpZmljYXRpb24pOworCQlzdXBlci5ub3RpZnlDaGFuZ2VkKG5vdGlmaWNhdGlvbik7CisJfQorCisJLyoqCisJICogVGhpcyBhZGRzIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuZWRpdC5jb21tYW5kLkNvbW1hbmRQYXJhbWV0ZXJ9cyBkZXNjcmliaW5nIHRoZSBjaGlsZHJlbgorCSAqIHRoYXQgY2FuIGJlIGNyZWF0ZWQgdW5kZXIgdGhpcyBvYmplY3QuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgY29sbGVjdE5ld0NoaWxkRGVzY3JpcHRvcnMoQ29sbGVjdGlvbjxPYmplY3Q+IG5ld0NoaWxkRGVzY3JpcHRvcnMsIE9iamVjdCBvYmplY3QpIHsKKwkJc3VwZXIuY29sbGVjdE5ld0NoaWxkRGVzY3JpcHRvcnMobmV3Q2hpbGREZXNjcmlwdG9ycywgb2JqZWN0KTsKKwl9CisKK30KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvbW9kZWwvcHJvdmlkZXIvU1RFTVRpbWVJdGVtUHJvdmlkZXIuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvbW9kZWwvcHJvdmlkZXIvU1RFTVRpbWVJdGVtUHJvdmlkZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMDZhNDBkCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9tb2RlbC9wcm92aWRlci9TVEVNVGltZUl0ZW1Qcm92aWRlci5qYXZhCkBAIC0wLDAgKzEsMTU5IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5wcm92aWRlcjsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuIAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyAKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0IAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwgCisgKiAKKyAqIENvbnRyaWJ1dG9yczogCisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgCitpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247CitpbXBvcnQgamF2YS51dGlsLkRhdGU7CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5BZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlJlc291cmNlTG9jYXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5Db21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklFZGl0aW5nRG9tYWluSXRlbVByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtTGFiZWxQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbVByb3BlcnR5RGVzY3JpcHRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbVByb3BlcnR5U291cmNlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklTdHJ1Y3R1cmVkSXRlbUNvbnRlbnRQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JVHJlZUl0ZW1Db250ZW50UHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSXRlbVByb3BlcnR5RGVzY3JpcHRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JdGVtUHJvdmlkZXJBZGFwdGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLlZpZXdlck5vdGlmaWNhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLnByb3ZpZGVyLkNvcmVFZGl0UGx1Z2luOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5Nb2RlbFBhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLlNURU1UaW1lOworCisvKioKKyAqIFRoaXMgaXMgdGhlIGl0ZW0gcHJvdmlkZXIgYWRhcHRlciBmb3IgYSB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLlNURU1UaW1lfSBvYmplY3QuCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBTVEVNVGltZUl0ZW1Qcm92aWRlciBleHRlbmRzIEl0ZW1Qcm92aWRlckFkYXB0ZXIgaW1wbGVtZW50cworCQlJRWRpdGluZ0RvbWFpbkl0ZW1Qcm92aWRlciwgSVN0cnVjdHVyZWRJdGVtQ29udGVudFByb3ZpZGVyLAorCQlJVHJlZUl0ZW1Db250ZW50UHJvdmlkZXIsIElJdGVtTGFiZWxQcm92aWRlciwgSUl0ZW1Qcm9wZXJ0eVNvdXJjZSB7CisJLyoqCisJICogVGhpcyBjb25zdHJ1Y3RzIGFuIGluc3RhbmNlIGZyb20gYSBmYWN0b3J5IGFuZCBhIG5vdGlmaWVyLiA8IS0tCisJICogYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgU1RFTVRpbWVJdGVtUHJvdmlkZXIoQWRhcHRlckZhY3RvcnkgYWRhcHRlckZhY3RvcnkpIHsKKwkJc3VwZXIoYWRhcHRlckZhY3RvcnkpOworCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyB0aGUgcHJvcGVydHkgZGVzY3JpcHRvcnMgZm9yIHRoZSBhZGFwdGVkIGNsYXNzLiA8IS0tCisJICogYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgTGlzdDxJSXRlbVByb3BlcnR5RGVzY3JpcHRvcj4gZ2V0UHJvcGVydHlEZXNjcmlwdG9ycyhPYmplY3Qgb2JqZWN0KSB7CisJCWlmIChpdGVtUHJvcGVydHlEZXNjcmlwdG9ycyA9PSBudWxsKSB7CisJCQlzdXBlci5nZXRQcm9wZXJ0eURlc2NyaXB0b3JzKG9iamVjdCk7CisKKwkJCWFkZFRpbWVQcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0KTsKKwkJfQorCQlyZXR1cm4gaXRlbVByb3BlcnR5RGVzY3JpcHRvcnM7CisJfQorCisJLyoqCisJICogVGhpcyBhZGRzIGEgcHJvcGVydHkgZGVzY3JpcHRvciBmb3IgdGhlIFRpbWUgZmVhdHVyZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jCisJICogLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBhZGRUaW1lUHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdCBvYmplY3QpIHsKKwkJaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMuYWRkCisJCQkoY3JlYXRlSXRlbVByb3BlcnR5RGVzY3JpcHRvcgorCQkJCSgoKENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnkpYWRhcHRlckZhY3RvcnkpLmdldFJvb3RBZGFwdGVyRmFjdG9yeSgpLAorCQkJCSBnZXRSZXNvdXJjZUxvY2F0b3IoKSwKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfU1RFTVRpbWVfdGltZV9mZWF0dXJlIiksIC8vJE5PTi1OTFMtMSQKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfUHJvcGVydHlEZXNjcmlwdG9yX2Rlc2NyaXB0aW9uIiwgIl9VSV9TVEVNVGltZV90aW1lX2ZlYXR1cmUiLCAiX1VJX1NURU1UaW1lX3R5cGUiKSwgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkIC8vJE5PTi1OTFMtMyQKKwkJCQkgTW9kZWxQYWNrYWdlLkxpdGVyYWxzLlNURU1fVElNRV9fVElNRSwKKwkJCQkgdHJ1ZSwKKwkJCQkgZmFsc2UsCisJCQkJIGZhbHNlLAorCQkJCSBJdGVtUHJvcGVydHlEZXNjcmlwdG9yLkdFTkVSSUNfVkFMVUVfSU1BR0UsCisJCQkJIG51bGwsCisJCQkJIG51bGwpKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgU1RFTVRpbWUuZ2lmLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgT2JqZWN0IGdldEltYWdlKE9iamVjdCBvYmplY3QpIHsKKwkJcmV0dXJuIG92ZXJsYXlJbWFnZShvYmplY3QsIGdldFJlc291cmNlTG9jYXRvcigpLmdldEltYWdlKCJmdWxsL29iajE2L1NURU1UaW1lIikpOyAvLyROT04tTkxTLTEkCisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIHRoZSBsYWJlbCB0ZXh0IGZvciB0aGUgYWRhcHRlZCBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jCisJICogLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgU3RyaW5nIGdldFRleHQoT2JqZWN0IG9iamVjdCkgeworCQlEYXRlIGxhYmVsVmFsdWUgPSAoKFNURU1UaW1lKW9iamVjdCkuZ2V0VGltZSgpOworCQlTdHJpbmcgbGFiZWwgPSBsYWJlbFZhbHVlID09IG51bGwgPyBudWxsIDogbGFiZWxWYWx1ZS50b1N0cmluZygpOworCQlyZXR1cm4gbGFiZWwgPT0gbnVsbCB8fCBsYWJlbC5sZW5ndGgoKSA9PSAwID8KKwkJCWdldFN0cmluZygiX1VJX1NURU1UaW1lX3R5cGUiKSA6IC8vJE5PTi1OTFMtMSQKKwkJCWdldFN0cmluZygiX1VJX1NURU1UaW1lX3R5cGUiKSArICIgIiArIGxhYmVsOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKKwl9CisKKwkvKioKKwkgKiBUaGlzIGhhbmRsZXMgbW9kZWwgbm90aWZpY2F0aW9ucyBieSBjYWxsaW5nIHtAbGluayAjdXBkYXRlQ2hpbGRyZW59IHRvIHVwZGF0ZSBhbnkgY2FjaGVkCisJICogY2hpbGRyZW4gYW5kIGJ5IGNyZWF0aW5nIGEgdmlld2VyIG5vdGlmaWNhdGlvbiwgd2hpY2ggaXQgcGFzc2VzIHRvIHtAbGluayAjZmlyZU5vdGlmeUNoYW5nZWR9LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0KKwkgKiBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIG5vdGlmeUNoYW5nZWQoTm90aWZpY2F0aW9uIG5vdGlmaWNhdGlvbikgeworCQl1cGRhdGVDaGlsZHJlbihub3RpZmljYXRpb24pOworCisJCXN3aXRjaCAobm90aWZpY2F0aW9uLmdldEZlYXR1cmVJRChTVEVNVGltZS5jbGFzcykpIHsKKwkJCWNhc2UgTW9kZWxQYWNrYWdlLlNURU1fVElNRV9fVElNRToKKwkJCQlmaXJlTm90aWZ5Q2hhbmdlZChuZXcgVmlld2VyTm90aWZpY2F0aW9uKG5vdGlmaWNhdGlvbiwgbm90aWZpY2F0aW9uLmdldE5vdGlmaWVyKCksIGZhbHNlLCB0cnVlKSk7CisJCQkJcmV0dXJuOworCQl9CisJCXN1cGVyLm5vdGlmeUNoYW5nZWQobm90aWZpY2F0aW9uKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFkZHMge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lZGl0LmNvbW1hbmQuQ29tbWFuZFBhcmFtZXRlcn1zIGRlc2NyaWJpbmcgdGhlIGNoaWxkcmVuCisJICogdGhhdCBjYW4gYmUgY3JlYXRlZCB1bmRlciB0aGlzIG9iamVjdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jCisJICogLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgdm9pZCBjb2xsZWN0TmV3Q2hpbGREZXNjcmlwdG9ycyhDb2xsZWN0aW9uPE9iamVjdD4gbmV3Q2hpbGREZXNjcmlwdG9ycywgT2JqZWN0IG9iamVjdCkgeworCQlzdXBlci5jb2xsZWN0TmV3Q2hpbGREZXNjcmlwdG9ycyhuZXdDaGlsZERlc2NyaXB0b3JzLCBvYmplY3QpOworCX0KKworCS8qKgorCSAqIFJldHVybiB0aGUgcmVzb3VyY2UgbG9jYXRvciBmb3IgdGhpcyBpdGVtIHByb3ZpZGVyJ3MgcmVzb3VyY2VzLiA8IS0tCisJICogYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgUmVzb3VyY2VMb2NhdG9yIGdldFJlc291cmNlTG9jYXRvcigpIHsKKwkJcmV0dXJuIENvcmVFZGl0UGx1Z2luLklOU1RBTkNFOworCX0KKworfQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9tb2RlbC91dGlsL01vZGVsQWRhcHRlckZhY3RvcnkuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvbW9kZWwvdXRpbC9Nb2RlbEFkYXB0ZXJGYWN0b3J5LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGVlYjNjMgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvbW9kZWwvdXRpbC9Nb2RlbEFkYXB0ZXJGYWN0b3J5LmphdmEKQEAgLTAsMCArMSwzMTUgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLnV0aWw7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIAorICogQ29weXJpZ2h0IChjKSAyMDA2LCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiAKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdCAKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sIAorICogCisgKiBDb250cmlidXRvcnM6IAorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiAKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuQWRhcHRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmllcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5pbXBsLkFkYXB0ZXJGYWN0b3J5SW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLklkZW50aWZpYWJsZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLlNhbml0eUNoZWNrZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLkRlY29yYXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuRWRnZURlY29yYXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuR3JhcGhEZWNvcmF0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLkludGVncmF0aW9uRGVjb3JhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5Nb2RlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuTW9kZWxQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5Ob2RlRGVjb3JhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5TVEVNVGltZTsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogVGhlIDxiPkFkYXB0ZXIgRmFjdG9yeTwvYj4gZm9yIHRoZSBtb2RlbC4KKyAqIEl0IHByb3ZpZGVzIGFuIGFkYXB0ZXIgPGNvZGU+Y3JlYXRlWFhYPC9jb2RlPiBtZXRob2QgZm9yIGVhY2ggY2xhc3Mgb2YgdGhlIG1vZGVsLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5Nb2RlbFBhY2thZ2UKKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIE1vZGVsQWRhcHRlckZhY3RvcnkgZXh0ZW5kcyBBZGFwdGVyRmFjdG9yeUltcGwgeworCS8qKgorCSAqIFRoZSBjYWNoZWQgbW9kZWwgcGFja2FnZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgc3RhdGljIE1vZGVsUGFja2FnZSBtb2RlbFBhY2thZ2U7CisKKwkvKioKKwkgKiBDcmVhdGVzIGFuIGluc3RhbmNlIG9mIHRoZSBhZGFwdGVyIGZhY3RvcnkuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIE1vZGVsQWRhcHRlckZhY3RvcnkoKSB7CisJCWlmIChtb2RlbFBhY2thZ2UgPT0gbnVsbCkgeworCQkJbW9kZWxQYWNrYWdlID0gTW9kZWxQYWNrYWdlLmVJTlNUQU5DRTsKKwkJfQorCX0KKworCS8qKgorCSAqIFJldHVybnMgd2hldGhlciB0aGlzIGZhY3RvcnkgaXMgYXBwbGljYWJsZSBmb3IgdGhlIHR5cGUgb2YgdGhlIG9iamVjdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyA8Y29kZT50cnVlPC9jb2RlPiBpZiB0aGUgb2JqZWN0IGlzIGVpdGhlciB0aGUgbW9kZWwncyBwYWNrYWdlIG9yIGlzIGFuIGluc3RhbmNlIG9iamVjdCBvZiB0aGUgbW9kZWwuCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB3aGV0aGVyIHRoaXMgZmFjdG9yeSBpcyBhcHBsaWNhYmxlIGZvciB0aGUgdHlwZSBvZiB0aGUgb2JqZWN0LgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgYm9vbGVhbiBpc0ZhY3RvcnlGb3JUeXBlKE9iamVjdCBvYmplY3QpIHsKKwkJaWYgKG9iamVjdCA9PSBtb2RlbFBhY2thZ2UpIHsKKwkJCXJldHVybiB0cnVlOworCQl9CisJCWlmIChvYmplY3QgaW5zdGFuY2VvZiBFT2JqZWN0KSB7CisJCQlyZXR1cm4gKChFT2JqZWN0KW9iamVjdCkuZUNsYXNzKCkuZ2V0RVBhY2thZ2UoKSA9PSBtb2RlbFBhY2thZ2U7CisJCX0KKwkJcmV0dXJuIGZhbHNlOworCX0KKworCS8qKgorCSAqIFRoZSBzd2l0Y2ggdGhhdCBkZWxlZ2F0ZXMgdG8gdGhlIDxjb2RlPmNyZWF0ZVhYWDwvY29kZT4gbWV0aG9kcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgTW9kZWxTd2l0Y2g8QWRhcHRlcj4gbW9kZWxTd2l0Y2ggPQorCQluZXcgTW9kZWxTd2l0Y2g8QWRhcHRlcj4oKSB7CisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyBBZGFwdGVyIGNhc2VEZWNvcmF0b3IoRGVjb3JhdG9yIG9iamVjdCkgeworCQkJCXJldHVybiBjcmVhdGVEZWNvcmF0b3JBZGFwdGVyKCk7CisJCQl9CisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyBBZGFwdGVyIGNhc2VFZGdlRGVjb3JhdG9yKEVkZ2VEZWNvcmF0b3Igb2JqZWN0KSB7CisJCQkJcmV0dXJuIGNyZWF0ZUVkZ2VEZWNvcmF0b3JBZGFwdGVyKCk7CisJCQl9CisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyBBZGFwdGVyIGNhc2VHcmFwaERlY29yYXRvcihHcmFwaERlY29yYXRvciBvYmplY3QpIHsKKwkJCQlyZXR1cm4gY3JlYXRlR3JhcGhEZWNvcmF0b3JBZGFwdGVyKCk7CisJCQl9CisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyBBZGFwdGVyIGNhc2VNb2RlbChNb2RlbCBvYmplY3QpIHsKKwkJCQlyZXR1cm4gY3JlYXRlTW9kZWxBZGFwdGVyKCk7CisJCQl9CisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyBBZGFwdGVyIGNhc2VOb2RlRGVjb3JhdG9yKE5vZGVEZWNvcmF0b3Igb2JqZWN0KSB7CisJCQkJcmV0dXJuIGNyZWF0ZU5vZGVEZWNvcmF0b3JBZGFwdGVyKCk7CisJCQl9CisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyBBZGFwdGVyIGNhc2VTVEVNVGltZShTVEVNVGltZSBvYmplY3QpIHsKKwkJCQlyZXR1cm4gY3JlYXRlU1RFTVRpbWVBZGFwdGVyKCk7CisJCQl9CisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyA8VD4gQWRhcHRlciBjYXNlQ29tcGFyYWJsZShDb21wYXJhYmxlPFQ+IG9iamVjdCkgeworCQkJCXJldHVybiBjcmVhdGVDb21wYXJhYmxlQWRhcHRlcigpOworCQkJfQorCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgQWRhcHRlciBjYXNlSW50ZWdyYXRpb25EZWNvcmF0b3IoSW50ZWdyYXRpb25EZWNvcmF0b3Igb2JqZWN0KSB7CisJCQkJcmV0dXJuIGNyZWF0ZUludGVncmF0aW9uRGVjb3JhdG9yQWRhcHRlcigpOworCQkJfQorCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgPFQ+IEFkYXB0ZXIgY2FzZUNvbW1vbl9Db21wYXJhYmxlKENvbXBhcmFibGU8VD4gb2JqZWN0KSB7CisJCQkJcmV0dXJuIGNyZWF0ZUNvbW1vbl9Db21wYXJhYmxlQWRhcHRlcigpOworCQkJfQorCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgQWRhcHRlciBjYXNlU2FuaXR5Q2hlY2tlcihTYW5pdHlDaGVja2VyIG9iamVjdCkgeworCQkJCXJldHVybiBjcmVhdGVTYW5pdHlDaGVja2VyQWRhcHRlcigpOworCQkJfQorCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgQWRhcHRlciBjYXNlSWRlbnRpZmlhYmxlKElkZW50aWZpYWJsZSBvYmplY3QpIHsKKwkJCQlyZXR1cm4gY3JlYXRlSWRlbnRpZmlhYmxlQWRhcHRlcigpOworCQkJfQorCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgQWRhcHRlciBkZWZhdWx0Q2FzZShFT2JqZWN0IG9iamVjdCkgeworCQkJCXJldHVybiBjcmVhdGVFT2JqZWN0QWRhcHRlcigpOworCQkJfQorCQl9OworCisJLyoqCisJICogQ3JlYXRlcyBhbiBhZGFwdGVyIGZvciB0aGUgPGNvZGU+dGFyZ2V0PC9jb2RlPi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSB0YXJnZXQgdGhlIG9iamVjdCB0byBhZGFwdC4KKwkgKiBAcmV0dXJuIHRoZSBhZGFwdGVyIGZvciB0aGUgPGNvZGU+dGFyZ2V0PC9jb2RlPi4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlQWRhcHRlcihOb3RpZmllciB0YXJnZXQpIHsKKwkJcmV0dXJuIG1vZGVsU3dpdGNoLmRvU3dpdGNoKChFT2JqZWN0KXRhcmdldCk7CisJfQorCisKKwkvKioKKwkgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5EZWNvcmF0b3IgPGVtPkRlY29yYXRvcjwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7CisJICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuRGVjb3JhdG9yCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZURlY29yYXRvckFkYXB0ZXIoKSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLkVkZ2VEZWNvcmF0b3IgPGVtPkVkZ2UgRGVjb3JhdG9yPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsKKwkgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5FZGdlRGVjb3JhdG9yCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZUVkZ2VEZWNvcmF0b3JBZGFwdGVyKCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5HcmFwaERlY29yYXRvciA8ZW0+R3JhcGggRGVjb3JhdG9yPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsKKwkgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5HcmFwaERlY29yYXRvcgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVHcmFwaERlY29yYXRvckFkYXB0ZXIoKSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLk1vZGVsIDxlbT5Nb2RlbDwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7CisJICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuTW9kZWwKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlTW9kZWxBZGFwdGVyKCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5Ob2RlRGVjb3JhdG9yIDxlbT5Ob2RlIERlY29yYXRvcjwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7CisJICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuTm9kZURlY29yYXRvcgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVOb2RlRGVjb3JhdG9yQWRhcHRlcigpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuU1RFTVRpbWUgPGVtPlNURU0gVGltZTwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7CisJICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuU1RFTVRpbWUKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlU1RFTVRpbWVBZGFwdGVyKCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIGphdmEubGFuZy5Db21wYXJhYmxlIDxlbT5Db21wYXJhYmxlPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsKKwkgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KKwkgKiBAc2VlIGphdmEubGFuZy5Db21wYXJhYmxlCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZUNvbXBhcmFibGVBZGFwdGVyKCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5JbnRlZ3JhdGlvbkRlY29yYXRvciA8ZW0+SW50ZWdyYXRpb24gRGVjb3JhdG9yPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsKKwkgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5JbnRlZ3JhdGlvbkRlY29yYXRvcgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVJbnRlZ3JhdGlvbkRlY29yYXRvckFkYXB0ZXIoKSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgamF2YS5sYW5nLkNvbXBhcmFibGUgPGVtPkNvbXBhcmFibGU8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOworCSAqIGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZSB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5LgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgorCSAqIEBzZWUgamF2YS5sYW5nLkNvbXBhcmFibGUKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlQ29tbW9uX0NvbXBhcmFibGVBZGFwdGVyKCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uU2FuaXR5Q2hlY2tlciA8ZW0+U2FuaXR5IENoZWNrZXI8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOworCSAqIGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZSB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5LgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5TYW5pdHlDaGVja2VyCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZVNhbml0eUNoZWNrZXJBZGFwdGVyKCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uSWRlbnRpZmlhYmxlIDxlbT5JZGVudGlmaWFibGU8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOworCSAqIGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZSB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5LgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5JZGVudGlmaWFibGUKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlSWRlbnRpZmlhYmxlQWRhcHRlcigpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciB0aGUgZGVmYXVsdCBjYXNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbC4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlRU9iamVjdEFkYXB0ZXIoKSB7CisJCXJldHVybiBudWxsOworCX0KKworfSAvL01vZGVsQWRhcHRlckZhY3RvcnkKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvbW9kZWwvdXRpbC9Nb2RlbFN3aXRjaC5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9tb2RlbC91dGlsL01vZGVsU3dpdGNoLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWM4NmY4NwotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvbW9kZWwvdXRpbC9Nb2RlbFN3aXRjaC5qYXZhCkBAIC0wLDAgKzEsMzUzIEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC51dGlsOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAKKyAqIENvcHlyaWdodCAoYykgMjAwNiwgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4gCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIAorICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wIAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQgCisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbCAKKyAqIAorICogQ29udHJpYnV0b3JzOiAKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGphdmEudXRpbC5MaXN0OworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzczsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLklkZW50aWZpYWJsZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLlNhbml0eUNoZWNrZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLkRlY29yYXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuRWRnZURlY29yYXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuR3JhcGhEZWNvcmF0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLkludGVncmF0aW9uRGVjb3JhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5Nb2RlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuTW9kZWxQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5Ob2RlRGVjb3JhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5TVEVNVGltZTsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogVGhlIDxiPlN3aXRjaDwvYj4gZm9yIHRoZSBtb2RlbCdzIGluaGVyaXRhbmNlIGhpZXJhcmNoeS4KKyAqIEl0IHN1cHBvcnRzIHRoZSBjYWxsIHtAbGluayAjZG9Td2l0Y2goRU9iamVjdCkgZG9Td2l0Y2gob2JqZWN0KX0KKyAqIHRvIGludm9rZSB0aGUgPGNvZGU+Y2FzZVhYWDwvY29kZT4gbWV0aG9kIGZvciBlYWNoIGNsYXNzIG9mIHRoZSBtb2RlbCwKKyAqIHN0YXJ0aW5nIHdpdGggdGhlIGFjdHVhbCBjbGFzcyBvZiB0aGUgb2JqZWN0CisgKiBhbmQgcHJvY2VlZGluZyB1cCB0aGUgaW5oZXJpdGFuY2UgaGllcmFyY2h5CisgKiB1bnRpbCBhIG5vbi1udWxsIHJlc3VsdCBpcyByZXR1cm5lZCwKKyAqIHdoaWNoIGlzIHRoZSByZXN1bHQgb2YgdGhlIHN3aXRjaC4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuTW9kZWxQYWNrYWdlCisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBNb2RlbFN3aXRjaDxUMT4geworCS8qKgorCSAqIFRoZSBjYWNoZWQgbW9kZWwgcGFja2FnZQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBzdGF0aWMgTW9kZWxQYWNrYWdlIG1vZGVsUGFja2FnZTsKKworCS8qKgorCSAqIENyZWF0ZXMgYW4gaW5zdGFuY2Ugb2YgdGhlIHN3aXRjaC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgTW9kZWxTd2l0Y2goKSB7CisJCWlmIChtb2RlbFBhY2thZ2UgPT0gbnVsbCkgeworCQkJbW9kZWxQYWNrYWdlID0gTW9kZWxQYWNrYWdlLmVJTlNUQU5DRTsKKwkJfQorCX0KKworCS8qKgorCSAqIENhbGxzIDxjb2RlPmNhc2VYWFg8L2NvZGU+IGZvciBlYWNoIGNsYXNzIG9mIHRoZSBtb2RlbCB1bnRpbCBvbmUgcmV0dXJucyBhIG5vbiBudWxsIHJlc3VsdDsgaXQgeWllbGRzIHRoYXQgcmVzdWx0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgZmlyc3Qgbm9uLW51bGwgcmVzdWx0IHJldHVybmVkIGJ5IGEgPGNvZGU+Y2FzZVhYWDwvY29kZT4gY2FsbC4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFQxIGRvU3dpdGNoKEVPYmplY3QgdGhlRU9iamVjdCkgeworCQlyZXR1cm4gZG9Td2l0Y2godGhlRU9iamVjdC5lQ2xhc3MoKSwgdGhlRU9iamVjdCk7CisJfQorCisJLyoqCisJICogQ2FsbHMgPGNvZGU+Y2FzZVhYWDwvY29kZT4gZm9yIGVhY2ggY2xhc3Mgb2YgdGhlIG1vZGVsIHVudGlsIG9uZSByZXR1cm5zIGEgbm9uIG51bGwgcmVzdWx0OyBpdCB5aWVsZHMgdGhhdCByZXN1bHQuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBmaXJzdCBub24tbnVsbCByZXN1bHQgcmV0dXJuZWQgYnkgYSA8Y29kZT5jYXNlWFhYPC9jb2RlPiBjYWxsLgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgVDEgZG9Td2l0Y2goRUNsYXNzIHRoZUVDbGFzcywgRU9iamVjdCB0aGVFT2JqZWN0KSB7CisJCWlmICh0aGVFQ2xhc3MuZUNvbnRhaW5lcigpID09IG1vZGVsUGFja2FnZSkgeworCQkJcmV0dXJuIGRvU3dpdGNoKHRoZUVDbGFzcy5nZXRDbGFzc2lmaWVySUQoKSwgdGhlRU9iamVjdCk7CisJCX0KKwkJZWxzZSB7CisJCQlMaXN0PEVDbGFzcz4gZVN1cGVyVHlwZXMgPSB0aGVFQ2xhc3MuZ2V0RVN1cGVyVHlwZXMoKTsKKwkJCXJldHVybgorCQkJCWVTdXBlclR5cGVzLmlzRW1wdHkoKSA/CisJCQkJCWRlZmF1bHRDYXNlKHRoZUVPYmplY3QpIDoKKwkJCQkJZG9Td2l0Y2goZVN1cGVyVHlwZXMuZ2V0KDApLCB0aGVFT2JqZWN0KTsKKwkJfQorCX0KKworCS8qKgorCSAqIENhbGxzIDxjb2RlPmNhc2VYWFg8L2NvZGU+IGZvciBlYWNoIGNsYXNzIG9mIHRoZSBtb2RlbCB1bnRpbCBvbmUgcmV0dXJucyBhIG5vbiBudWxsIHJlc3VsdDsgaXQgeWllbGRzIHRoYXQgcmVzdWx0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgZmlyc3Qgbm9uLW51bGwgcmVzdWx0IHJldHVybmVkIGJ5IGEgPGNvZGU+Y2FzZVhYWDwvY29kZT4gY2FsbC4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIFQxIGRvU3dpdGNoKGludCBjbGFzc2lmaWVySUQsIEVPYmplY3QgdGhlRU9iamVjdCkgeworCQlzd2l0Y2ggKGNsYXNzaWZpZXJJRCkgeworCQkJY2FzZSBNb2RlbFBhY2thZ2UuREVDT1JBVE9SOiB7CisJCQkJRGVjb3JhdG9yIGRlY29yYXRvciA9IChEZWNvcmF0b3IpdGhlRU9iamVjdDsKKwkJCQlUMSByZXN1bHQgPSBjYXNlRGVjb3JhdG9yKGRlY29yYXRvcik7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlSWRlbnRpZmlhYmxlKGRlY29yYXRvcik7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlQ29tbW9uX0NvbXBhcmFibGUoZGVjb3JhdG9yKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VTYW5pdHlDaGVja2VyKGRlY29yYXRvcik7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBkZWZhdWx0Q2FzZSh0aGVFT2JqZWN0KTsKKwkJCQlyZXR1cm4gcmVzdWx0OworCQkJfQorCQkJY2FzZSBNb2RlbFBhY2thZ2UuRURHRV9ERUNPUkFUT1I6IHsKKwkJCQlFZGdlRGVjb3JhdG9yIGVkZ2VEZWNvcmF0b3IgPSAoRWRnZURlY29yYXRvcil0aGVFT2JqZWN0OworCQkJCVQxIHJlc3VsdCA9IGNhc2VFZGdlRGVjb3JhdG9yKGVkZ2VEZWNvcmF0b3IpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZURlY29yYXRvcihlZGdlRGVjb3JhdG9yKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VJZGVudGlmaWFibGUoZWRnZURlY29yYXRvcik7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlQ29tbW9uX0NvbXBhcmFibGUoZWRnZURlY29yYXRvcik7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlU2FuaXR5Q2hlY2tlcihlZGdlRGVjb3JhdG9yKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGRlZmF1bHRDYXNlKHRoZUVPYmplY3QpOworCQkJCXJldHVybiByZXN1bHQ7CisJCQl9CisJCQljYXNlIE1vZGVsUGFja2FnZS5HUkFQSF9ERUNPUkFUT1I6IHsKKwkJCQlHcmFwaERlY29yYXRvciBncmFwaERlY29yYXRvciA9IChHcmFwaERlY29yYXRvcil0aGVFT2JqZWN0OworCQkJCVQxIHJlc3VsdCA9IGNhc2VHcmFwaERlY29yYXRvcihncmFwaERlY29yYXRvcik7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlRGVjb3JhdG9yKGdyYXBoRGVjb3JhdG9yKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VJZGVudGlmaWFibGUoZ3JhcGhEZWNvcmF0b3IpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZUNvbW1vbl9Db21wYXJhYmxlKGdyYXBoRGVjb3JhdG9yKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VTYW5pdHlDaGVja2VyKGdyYXBoRGVjb3JhdG9yKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGRlZmF1bHRDYXNlKHRoZUVPYmplY3QpOworCQkJCXJldHVybiByZXN1bHQ7CisJCQl9CisJCQljYXNlIE1vZGVsUGFja2FnZS5NT0RFTDogeworCQkJCU1vZGVsIG1vZGVsID0gKE1vZGVsKXRoZUVPYmplY3Q7CisJCQkJVDEgcmVzdWx0ID0gY2FzZU1vZGVsKG1vZGVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VJZGVudGlmaWFibGUobW9kZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZUNvbW1vbl9Db21wYXJhYmxlKG1vZGVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VTYW5pdHlDaGVja2VyKG1vZGVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGRlZmF1bHRDYXNlKHRoZUVPYmplY3QpOworCQkJCXJldHVybiByZXN1bHQ7CisJCQl9CisJCQljYXNlIE1vZGVsUGFja2FnZS5OT0RFX0RFQ09SQVRPUjogeworCQkJCU5vZGVEZWNvcmF0b3Igbm9kZURlY29yYXRvciA9IChOb2RlRGVjb3JhdG9yKXRoZUVPYmplY3Q7CisJCQkJVDEgcmVzdWx0ID0gY2FzZU5vZGVEZWNvcmF0b3Iobm9kZURlY29yYXRvcik7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlRGVjb3JhdG9yKG5vZGVEZWNvcmF0b3IpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZUlkZW50aWZpYWJsZShub2RlRGVjb3JhdG9yKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VDb21tb25fQ29tcGFyYWJsZShub2RlRGVjb3JhdG9yKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VTYW5pdHlDaGVja2VyKG5vZGVEZWNvcmF0b3IpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gZGVmYXVsdENhc2UodGhlRU9iamVjdCk7CisJCQkJcmV0dXJuIHJlc3VsdDsKKwkJCX0KKwkJCWNhc2UgTW9kZWxQYWNrYWdlLlNURU1fVElNRTogeworCQkJCVNURU1UaW1lIHN0ZW1UaW1lID0gKFNURU1UaW1lKXRoZUVPYmplY3Q7CisJCQkJVDEgcmVzdWx0ID0gY2FzZVNURU1UaW1lKHN0ZW1UaW1lKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VDb21wYXJhYmxlKHN0ZW1UaW1lKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGRlZmF1bHRDYXNlKHRoZUVPYmplY3QpOworCQkJCXJldHVybiByZXN1bHQ7CisJCQl9CisJCQljYXNlIE1vZGVsUGFja2FnZS5JTlRFR1JBVElPTl9ERUNPUkFUT1I6IHsKKwkJCQlJbnRlZ3JhdGlvbkRlY29yYXRvciBpbnRlZ3JhdGlvbkRlY29yYXRvciA9IChJbnRlZ3JhdGlvbkRlY29yYXRvcil0aGVFT2JqZWN0OworCQkJCVQxIHJlc3VsdCA9IGNhc2VJbnRlZ3JhdGlvbkRlY29yYXRvcihpbnRlZ3JhdGlvbkRlY29yYXRvcik7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlTm9kZURlY29yYXRvcihpbnRlZ3JhdGlvbkRlY29yYXRvcik7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlRGVjb3JhdG9yKGludGVncmF0aW9uRGVjb3JhdG9yKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VJZGVudGlmaWFibGUoaW50ZWdyYXRpb25EZWNvcmF0b3IpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZUNvbW1vbl9Db21wYXJhYmxlKGludGVncmF0aW9uRGVjb3JhdG9yKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VTYW5pdHlDaGVja2VyKGludGVncmF0aW9uRGVjb3JhdG9yKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGRlZmF1bHRDYXNlKHRoZUVPYmplY3QpOworCQkJCXJldHVybiByZXN1bHQ7CisJCQl9CisJCQlkZWZhdWx0OiByZXR1cm4gZGVmYXVsdENhc2UodGhlRU9iamVjdCk7CisJCX0KKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5EZWNvcmF0b3I8L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsKKwkgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KKwkgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5EZWNvcmF0b3I8L2VtPicuCisJICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBUMSBjYXNlRGVjb3JhdG9yKERlY29yYXRvciBvYmplY3QpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+RWRnZSBEZWNvcmF0b3I8L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsKKwkgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KKwkgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5FZGdlIERlY29yYXRvcjwvZW0+Jy4KKwkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFQxIGNhc2VFZGdlRGVjb3JhdG9yKEVkZ2VEZWNvcmF0b3Igb2JqZWN0KSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkdyYXBoIERlY29yYXRvcjwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOworCSAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgorCSAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkdyYXBoIERlY29yYXRvcjwvZW0+Jy4KKwkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFQxIGNhc2VHcmFwaERlY29yYXRvcihHcmFwaERlY29yYXRvciBvYmplY3QpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+TW9kZWw8L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsKKwkgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KKwkgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5Nb2RlbDwvZW0+Jy4KKwkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFQxIGNhc2VNb2RlbChNb2RlbCBvYmplY3QpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+Tm9kZSBEZWNvcmF0b3I8L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsKKwkgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KKwkgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5Ob2RlIERlY29yYXRvcjwvZW0+Jy4KKwkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFQxIGNhc2VOb2RlRGVjb3JhdG9yKE5vZGVEZWNvcmF0b3Igb2JqZWN0KSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPlNURU0gVGltZTwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOworCSAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgorCSAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPlNURU0gVGltZTwvZW0+Jy4KKwkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFQxIGNhc2VTVEVNVGltZShTVEVNVGltZSBvYmplY3QpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+Q29tcGFyYWJsZTwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOworCSAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgorCSAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkNvbXBhcmFibGU8L2VtPicuCisJICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyA8VD4gVDEgY2FzZUNvbXBhcmFibGUoQ29tcGFyYWJsZTxUPiBvYmplY3QpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+SW50ZWdyYXRpb24gRGVjb3JhdG9yPC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7CisJICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCisJICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+SW50ZWdyYXRpb24gRGVjb3JhdG9yPC9lbT4nLgorCSAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVDEgY2FzZUludGVncmF0aW9uRGVjb3JhdG9yKEludGVncmF0aW9uRGVjb3JhdG9yIG9iamVjdCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5Db21wYXJhYmxlPC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7CisJICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCisJICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+Q29tcGFyYWJsZTwvZW0+Jy4KKwkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIDxUPiBUMSBjYXNlQ29tbW9uX0NvbXBhcmFibGUoQ29tcGFyYWJsZTxUPiBvYmplY3QpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+U2FuaXR5IENoZWNrZXI8L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsKKwkgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KKwkgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5TYW5pdHkgQ2hlY2tlcjwvZW0+Jy4KKwkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFQxIGNhc2VTYW5pdHlDaGVja2VyKFNhbml0eUNoZWNrZXIgb2JqZWN0KSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPklkZW50aWZpYWJsZTwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOworCSAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgorCSAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPklkZW50aWZpYWJsZTwvZW0+Jy4KKwkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFQxIGNhc2VJZGVudGlmaWFibGUoSWRlbnRpZmlhYmxlIG9iamVjdCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5FT2JqZWN0PC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7CisJICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2gsIGJ1dCB0aGlzIGlzIHRoZSBsYXN0IGNhc2UgYW55d2F5LgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgorCSAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkVPYmplY3Q8L2VtPicuCisJICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBUMSBkZWZhdWx0Q2FzZShFT2JqZWN0IG9iamVjdCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKK30gLy9Nb2RlbFN3aXRjaApkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9tb2RpZmllci9Eb3VibGVNb2RpZmllci5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9tb2RpZmllci9Eb3VibGVNb2RpZmllci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjllMWY2YmIKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL21vZGlmaWVyL0RvdWJsZU1vZGlmaWVyLmphdmEKQEAgLTAsMCArMSw4NiBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXI7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDkgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIEEgcmVwcmVzZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPkRvdWJsZSBNb2RpZmllcjwvYj48L2VtPicuCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqCisgKiA8cD4KKyAqIFRoZSBmb2xsb3dpbmcgZmVhdHVyZXMgYXJlIHN1cHBvcnRlZDoKKyAqIDx1bD4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuRG91YmxlTW9kaWZpZXIjZ2V0VmFsdWUgPGVtPlZhbHVlPC9lbT59PC9saT4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuRG91YmxlTW9kaWZpZXIjZ2V0T3JpZ2luYWxWYWx1ZSA8ZW0+T3JpZ2luYWwgVmFsdWU8L2VtPn08L2xpPgorICogPC91bD4KKyAqIDwvcD4KKyAqCisgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5Nb2RpZmllclBhY2thZ2UjZ2V0RG91YmxlTW9kaWZpZXIoKQorICogQG1vZGVsCisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBpbnRlcmZhY2UgRG91YmxlTW9kaWZpZXIgZXh0ZW5kcyBTaW5nbGVWYWx1ZU1vZGlmaWVyIHsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPlZhbHVlPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8cD4KKwkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5WYWx1ZTwvZW0+JyBhdHRyaWJ1dGUgaXNuJ3QgY2xlYXIsCisJICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLgorCSAqIDwvcD4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5WYWx1ZTwvZW0+JyBhdHRyaWJ1dGUuCisJICogQHNlZSAjc2V0VmFsdWUoZG91YmxlKQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLk1vZGlmaWVyUGFja2FnZSNnZXREb3VibGVNb2RpZmllcl9WYWx1ZSgpCisJICogQG1vZGVsCisJICogQGdlbmVyYXRlZAorCSAqLworCWRvdWJsZSBnZXRWYWx1ZSgpOworCisJLyoqCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLkRvdWJsZU1vZGlmaWVyI2dldFZhbHVlIDxlbT5WYWx1ZTwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+VmFsdWU8L2VtPicgYXR0cmlidXRlLgorCSAqIEBzZWUgI2dldFZhbHVlKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJdm9pZCBzZXRWYWx1ZShkb3VibGUgdmFsdWUpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+T3JpZ2luYWwgVmFsdWU8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyA8Y29kZT4iLTFFMjAwIjwvY29kZT4uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8cD4KKwkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5PcmlnaW5hbCBWYWx1ZTwvZW0+JyBhdHRyaWJ1dGUgaXNuJ3QgY2xlYXIsCisJICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLgorCSAqIDwvcD4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5PcmlnaW5hbCBWYWx1ZTwvZW0+JyBhdHRyaWJ1dGUuCisJICogQHNlZSAjc2V0T3JpZ2luYWxWYWx1ZShkb3VibGUpCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuTW9kaWZpZXJQYWNrYWdlI2dldERvdWJsZU1vZGlmaWVyX09yaWdpbmFsVmFsdWUoKQorCSAqIEBtb2RlbCBkZWZhdWx0PSItMUUyMDAiIHRyYW5zaWVudD0idHJ1ZSIKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJZG91YmxlIGdldE9yaWdpbmFsVmFsdWUoKTsKKworCS8qKgorCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5Eb3VibGVNb2RpZmllciNnZXRPcmlnaW5hbFZhbHVlIDxlbT5PcmlnaW5hbCBWYWx1ZTwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+T3JpZ2luYWwgVmFsdWU8L2VtPicgYXR0cmlidXRlLgorCSAqIEBzZWUgI2dldE9yaWdpbmFsVmFsdWUoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwl2b2lkIHNldE9yaWdpbmFsVmFsdWUoZG91YmxlIHZhbHVlKTsKK30gLy8gRG91YmxlTW9kaWZpZXIKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvbW9kaWZpZXIvRG91YmxlTk9QTW9kaWZpZXIuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvbW9kaWZpZXIvRG91YmxlTk9QTW9kaWZpZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMzNlZDIxCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9tb2RpZmllci9Eb3VibGVOT1BNb2RpZmllci5qYXZhCkBAIC0wLDAgKzEsMjQgQEAKKy8vIERvdWJsZU5PUE1vZGlmaWVyLmphdmEKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqCisgKiBBIDxjb2RlPk5PUE1vZGlmaWVyPC9jb2RlPiBkb2VzIG5vdGhpbmcuIEl0IGlzIHVzZWZ1bCBmb3IgdGhlIEdVSQorICogY29tcG9uZW50cyB0aGF0IGVkaXQge0BsaW5rIEZlYXR1cmVNb2RpZmllcn1zIHRvIGhhdmUgb25lIHRoYXQgaXMgYXZhaWxhYmxlCisgKiBmb3IgdGhlIGNhc2Ugd2hlbiBubyB7QGxpbmsgRmVhdHVyZU1vZGlmaWVyfSBpcyBzcGVjaWZpZWQgYnkgdGhlIHVzZXIuCisgKiAKKyAqIEBtb2RlbAorICovCitwdWJsaWMgaW50ZXJmYWNlIERvdWJsZU5PUE1vZGlmaWVyIGV4dGVuZHMgTk9QTW9kaWZpZXIgeworCS8vIE5vdGhpbmcKK30gLy8gRG91YmxlTk9QTW9kaWZpZXIKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvbW9kaWZpZXIvRG91YmxlUmFuZ2VNb2RpZmllci5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9tb2RpZmllci9Eb3VibGVSYW5nZU1vZGlmaWVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDkxNGU1NQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvbW9kaWZpZXIvRG91YmxlUmFuZ2VNb2RpZmllci5qYXZhCkBAIC0wLDAgKzEsMTAwIEBACisvLyBEb3VibGVSYW5nZU1vZGlmaWVyLmphdmEKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqCisgKiBBIDxjb2RlPkRvdWJsZVJhbmdlTW9kaWZpZXI8L2NvZGU+IG1vZGlmaWVzIGEgZG91YmxlIHZhbHVlZCBmZWF0dXJlIGZyb20gYQorICogc3RhcnRpbmcgdmFsdWUgdG8gYW5kIGVuZCB2YWx1ZSAoaW5jbHVzaXZlPiBieSBpbmNyZW1lbnRzLgorICogCisgKiBAbW9kZWwKKyAqLworcHVibGljIGludGVyZmFjZSBEb3VibGVSYW5nZU1vZGlmaWVyIGV4dGVuZHMgUmFuZ2VNb2RpZmllciB7CisJCisJLyoqCisJICogQG1vZGVsCisJICovCisJZG91YmxlIGdldE9yaWdpbmFsVmFsdWUoKTsKKwkKKwkvKioKKwkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuRG91YmxlUmFuZ2VNb2RpZmllciNnZXRPcmlnaW5hbFZhbHVlIDxlbT5PcmlnaW5hbCBWYWx1ZTwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+T3JpZ2luYWwgVmFsdWU8L2VtPicgYXR0cmlidXRlLgorCSAqIEBzZWUgI2dldE9yaWdpbmFsVmFsdWUoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwl2b2lkIHNldE9yaWdpbmFsVmFsdWUoZG91YmxlIHZhbHVlKTsKKworCS8qKgorCSAqIEBtb2RlbCBkZWZhdWx0PSItOTk5OTk5OTkuMCIKKwkgKi8KKwlkb3VibGUgZ2V0U3RhcnRWYWx1ZSgpOworCisJLyoqCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLkRvdWJsZVJhbmdlTW9kaWZpZXIjZ2V0U3RhcnRWYWx1ZSA8ZW0+U3RhcnQgVmFsdWU8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPlN0YXJ0IFZhbHVlPC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiBAc2VlICNnZXRTdGFydFZhbHVlKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJdm9pZCBzZXRTdGFydFZhbHVlKGRvdWJsZSB2YWx1ZSk7CisKKwkvKioKKwkgKiBAbW9kZWwgZGVmYXVsdD0iLTk5OTk5OTk5LjAiCisJICovCisJZG91YmxlIGdldEVuZFZhbHVlKCk7CisKKwkvKioKKwkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuRG91YmxlUmFuZ2VNb2RpZmllciNnZXRFbmRWYWx1ZSA8ZW0+RW5kIFZhbHVlPC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5FbmQgVmFsdWU8L2VtPicgYXR0cmlidXRlLgorCSAqIEBzZWUgI2dldEVuZFZhbHVlKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJdm9pZCBzZXRFbmRWYWx1ZShkb3VibGUgdmFsdWUpOworCisJLyoqCisJICogQG1vZGVsIGRlZmF1bHQ9Ii05OTk5OTk5OS4wIgorCSAqLworCWRvdWJsZSBnZXRJbmNyZW1lbnQoKTsKKworCS8qKgorCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5Eb3VibGVSYW5nZU1vZGlmaWVyI2dldEluY3JlbWVudCA8ZW0+SW5jcmVtZW50PC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5JbmNyZW1lbnQ8L2VtPicgYXR0cmlidXRlLgorCSAqIEBzZWUgI2dldEluY3JlbWVudCgpCisJICogQGdlbmVyYXRlZAorCSAqLworCXZvaWQgc2V0SW5jcmVtZW50KGRvdWJsZSB2YWx1ZSk7CisKKwkvKioKKwkgKiBAcmV0dXJuIHRoZSBuZXh0IHZhbHVlIG9mIHRoZSBmZWF0dXJlCisJICogQG1vZGVsIGRlZmF1bHQ9IjAuMCIgY2hhbmdlYWJsZT0idHJ1ZSIKKwkgKi8KKwlkb3VibGUgZ2V0TmV4dFZhbHVlKCk7CisKKwkvKioKKwkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuRG91YmxlUmFuZ2VNb2RpZmllciNnZXROZXh0VmFsdWUgPGVtPk5leHQgVmFsdWU8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPk5leHQgVmFsdWU8L2VtPicgYXR0cmlidXRlLgorCSAqIEBzZWUgI2dldE5leHRWYWx1ZSgpCisJICogQGdlbmVyYXRlZAorCSAqLworCXZvaWQgc2V0TmV4dFZhbHVlKGRvdWJsZSB2YWx1ZSk7CisKKwkKK30gLy8gRG91YmxlUmFuZ2VNb2RpZmllcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9tb2RpZmllci9Eb3VibGVTZXF1ZW5jZU1vZGlmaWVyLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL21vZGlmaWVyL0RvdWJsZVNlcXVlbmNlTW9kaWZpZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYjUyMGE5Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9tb2RpZmllci9Eb3VibGVTZXF1ZW5jZU1vZGlmaWVyLmphdmEKQEAgLTAsMCArMSwzMCBAQAorLy8gRG91YmxlU2VxdWVuY2VNb2RpZmllci5qYXZhCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllcjsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuRUxpc3Q7CisKKy8qKgorICogQSB7QGxpbmsgRG91YmxlU2VxdWVuY2VNb2RpZmllcn0gbW9kaWZpZXMgYSBmZWF0dXJlIGJ5IHNldHRpbmcgaXQgdG8gYQorICogc2VxdWVuY2Ugb2YgImRvdWJsZSIgdmFsdWVzLgorICogCisgKiBAbW9kZWwKKyAqLworcHVibGljIGludGVyZmFjZSBEb3VibGVTZXF1ZW5jZU1vZGlmaWVyIGV4dGVuZHMgU2VxdWVuY2VNb2RpZmllciB7CisKKwkvKioKKwkgKiBAbW9kZWwKKwkgKi8KKwlFTGlzdDxEb3VibGU+IGdldFNlcXVlbmNlKCk7CisKK30gLy8gRG91YmxlU2VxdWVuY2VNb2RpZmllcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9tb2RpZmllci9GZWF0dXJlTW9kaWZpZXIuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvbW9kaWZpZXIvRmVhdHVyZU1vZGlmaWVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjhlNjZjMwotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvbW9kaWZpZXIvRmVhdHVyZU1vZGlmaWVyLmphdmEKQEAgLTAsMCArMSwxMjggQEAKKy8vIEZlYXR1cmVNb2RpZmllci5qYXZhCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllcjsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FU3RydWN0dXJhbEZlYXR1cmU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5JZGVudGlmaWFibGU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5TYW5pdHlDaGVja2VyOworCisvKioKKyAqIEEge0BsaW5rIEZlYXR1cmVNb2RpZmllcn0gc3BlY2lmaWVzIGhvdyB0byBjaGFuZ2UgdGhlIHZhbHVlIG9mCisgKiAiZmVhdHVyZSIgaW4gYW4ge0BsaW5rIElkZW50aWZpYWJsZX0uCisgKiAKKyAqIEBtb2RlbCBhYnN0cmFjdD0idHJ1ZSIKKyAqIEBpbXBsZW1lbnRzIFNhbml0eUNoZWNrZXIKKyAqLworcHVibGljIGludGVyZmFjZSBGZWF0dXJlTW9kaWZpZXIgZXh0ZW5kcyBFT2JqZWN0LCBTYW5pdHlDaGVja2VyIHsKKwkKKwkvKioKKwkgKiBAcmV0dXJuIHRoZSB7QGxpbmsgSWRlbnRpZmlhYmxlfSB0aGF0IHdpbGwgYmUgbW9kaWZpZWQuCisJICogQG1vZGVsIAorCSAqLworCUVPYmplY3QgZ2V0VGFyZ2V0KCk7CisJCisJLyoqCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLkZlYXR1cmVNb2RpZmllciNnZXRUYXJnZXQgPGVtPlRhcmdldDwvZW0+fScgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+VGFyZ2V0PC9lbT4nIHJlZmVyZW5jZS4KKwkgKiBAc2VlICNnZXRUYXJnZXQoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwl2b2lkIHNldFRhcmdldChFT2JqZWN0IHZhbHVlKTsKKworCS8qKgorCSAqIEByZXR1cm4gdGhlIGlkIG9mIHRoZSBmZWF0dXJlIGJlaW5nIG1vZGlmaWVkCisJICogQG1vZGVsIHRyYW5zaWVudD0idHJ1ZSIgcmVzb2x2ZVByb3hpZXM9ImZhbHNlIgorCSAqLworCUVTdHJ1Y3R1cmFsRmVhdHVyZSBnZXRFU3RydWN0dXJhbEZlYXR1cmUoKTsKKworCS8qKgorCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5GZWF0dXJlTW9kaWZpZXIjZ2V0RVN0cnVjdHVyYWxGZWF0dXJlIDxlbT5FU3RydWN0dXJhbCBGZWF0dXJlPC9lbT59JyByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5FU3RydWN0dXJhbCBGZWF0dXJlPC9lbT4nIHJlZmVyZW5jZS4KKwkgKiBAc2VlICNnZXRFU3RydWN0dXJhbEZlYXR1cmUoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwl2b2lkIHNldEVTdHJ1Y3R1cmFsRmVhdHVyZShFU3RydWN0dXJhbEZlYXR1cmUgdmFsdWUpOworCisJLyoqCisJICogQG1vZGVsCisJICovCisJU3RyaW5nIGdldEZlYXR1cmVOYW1lKCk7CisJCisJLyoqCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLkZlYXR1cmVNb2RpZmllciNnZXRGZWF0dXJlTmFtZSA8ZW0+RmVhdHVyZSBOYW1lPC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5GZWF0dXJlIE5hbWU8L2VtPicgYXR0cmlidXRlLgorCSAqIEBzZWUgI2dldEZlYXR1cmVOYW1lKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJdm9pZCBzZXRGZWF0dXJlTmFtZShTdHJpbmcgdmFsdWUpOworCisJLyoqCisJICogQHJldHVybiB0aGUgZmVhdHVyZUlEIG9mIHRoZSB7QGxpbmsgRVN0cnVjdHVyYWxGZWF0dXJlfSB0byBiZSBtb2RpZmllZC4KKwkgKiBAbW9kZWwKKwkgKi8KKwlpbnQgZ2V0RmVhdHVyZUlkKCk7CisJCisJLyoqCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLkZlYXR1cmVNb2RpZmllciNnZXRGZWF0dXJlSWQgPGVtPkZlYXR1cmUgSWQ8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPkZlYXR1cmUgSWQ8L2VtPicgYXR0cmlidXRlLgorCSAqIEBzZWUgI2dldEZlYXR1cmVJZCgpCisJICogQGdlbmVyYXRlZAorCSAqLworCXZvaWQgc2V0RmVhdHVyZUlkKGludCB2YWx1ZSk7CisKKwkvKioKKwkgKiBAcmV0dXJuIHRoZSB0ZXh0dWFsIHJlcHJlc2VudGF0aW9uIG9mIHRoZSB2YWx1ZSB0aGF0IHdhcyB1c2VkIGluIHRoZQorCSAqICAgICAgICAgbGFzdCBjYWxsIHRvIHtAbGluayAjdXBkYXRlRmVhdHVyZSgpfQorCSAqIEBzZWUgI2dldE5leHRWYWx1ZSgpCisJICogQG1vZGVsIHRyYW5zaWVudD0idHJ1ZSIgY2hhbmdlYWJsZT0iZmFsc2UiCisJICovCisJU3RyaW5nIGdldEN1cnJlbnRWYWx1ZVRleHQoKTsKKwkKKwkvKioKKwkgKiBAbW9kZWwgdm9sYXRpbGU9InRydWUiIHRyYW5zaWVudD0idHJ1ZSIgY2hhbmdlYWJsZT0iZmFsc2UiCisJICovCisJdm9pZCB1cGRhdGVGZWF0dXJlKCk7CisKKwkvKioKKwkgKiBAcmV0dXJuIGEge0BsaW5rIExpc3R9IG9mIHtAbGluayBTdHJpbmd9cyB0aGF0IHN1bW1hcml6ZSB0aGUKKwkgKiAgICAgICAgIG1vZGlmaWNhdGlvbnMgbWFkZSB0byB0aGUgbGFzdCB7QGxpbmsgRU9iamVjdH0gYnkgdGhlIGNhbGwgdG8KKwkgKiAgICAgICAgIHtAbGluayAjdXBkYXRlRmVhdHVyZSgpfS4KKwkgKiBtb2RlbCB2b2xhdGlsZT0idHJ1ZSIgdHJhbnNpZW50PSJ0cnVlIiBjaGFuZ2VhYmxlPSJmYWxzZSIKKwkgKi8KKwlTdHJpbmcgZ2V0TW9kaWZpY2F0aW9uU3VtbWFyeSgpOworCisJLyoqCisJICogQHJldHVybiA8Y29kZT50cnVlPC9jb2RlPiBpZiBhbGwgb2YgdGhlIG1vZGlmaWNhdGlvbnMgdG8gdGhlIGZlYXR1cmUKKwkgKiAgICAgICAgIGJlZW4gY29tcGxldGVkLCA8Y29kZT5mYWxzZTwvY29kZT4sIG90aGVyd2lzZS4KKwkgKiBAbW9kZWwgdm9sYXRpbGU9InRydWUiIHRyYW5zaWVudD0idHJ1ZSIgY2hhbmdlYWJsZT0iZmFsc2UiCisJICovCisJYm9vbGVhbiBpc0NvbXBsZXRlKCk7CisJCisJLyoqCisJICogUmVzdG9yZSB0aGUgdmFsdWUgb2YgdGhlIGZlYXR1cmUgYmVpbmcgbW9kaWZpZWQgdG8gaXRzIG9yaWdpbmFsIHZhbHVlCisJICogQG1vZGVsIHZvbGF0aWxlPSJ0cnVlIiB0cmFuc2llbnQ9InRydWUiIGNoYW5nZWFibGU9ImZhbHNlIgorCSAqLworCXZvaWQgcmVzZXQoKTsKKworfSAvLyBGZWF0dXJlTW9kaWZpZXIKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvbW9kaWZpZXIvSW50ZWdlck1vZGlmaWVyLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL21vZGlmaWVyL0ludGVnZXJNb2RpZmllci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU3MmFhOTQKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL21vZGlmaWVyL0ludGVnZXJNb2RpZmllci5qYXZhCkBAIC0wLDAgKzEsODYgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA5IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiBBIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5JbnRlZ2VyIE1vZGlmaWVyPC9iPjwvZW0+Jy4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICoKKyAqIDxwPgorICogVGhlIGZvbGxvd2luZyBmZWF0dXJlcyBhcmUgc3VwcG9ydGVkOgorICogPHVsPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5JbnRlZ2VyTW9kaWZpZXIjZ2V0VmFsdWUgPGVtPlZhbHVlPC9lbT59PC9saT4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuSW50ZWdlck1vZGlmaWVyI2dldE9yaWdpbmFsVmFsdWUgPGVtPk9yaWdpbmFsIFZhbHVlPC9lbT59PC9saT4KKyAqIDwvdWw+CisgKiA8L3A+CisgKgorICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuTW9kaWZpZXJQYWNrYWdlI2dldEludGVnZXJNb2RpZmllcigpCisgKiBAbW9kZWwKKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGludGVyZmFjZSBJbnRlZ2VyTW9kaWZpZXIgZXh0ZW5kcyBTaW5nbGVWYWx1ZU1vZGlmaWVyIHsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPlZhbHVlPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8cD4KKwkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5WYWx1ZTwvZW0+JyBhdHRyaWJ1dGUgaXNuJ3QgY2xlYXIsCisJICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLgorCSAqIDwvcD4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5WYWx1ZTwvZW0+JyBhdHRyaWJ1dGUuCisJICogQHNlZSAjc2V0VmFsdWUoaW50KQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLk1vZGlmaWVyUGFja2FnZSNnZXRJbnRlZ2VyTW9kaWZpZXJfVmFsdWUoKQorCSAqIEBtb2RlbAorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlpbnQgZ2V0VmFsdWUoKTsKKworCS8qKgorCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5JbnRlZ2VyTW9kaWZpZXIjZ2V0VmFsdWUgPGVtPlZhbHVlPC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5WYWx1ZTwvZW0+JyBhdHRyaWJ1dGUuCisJICogQHNlZSAjZ2V0VmFsdWUoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwl2b2lkIHNldFZhbHVlKGludCB2YWx1ZSk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5PcmlnaW5hbCBWYWx1ZTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIGlzIDxjb2RlPiItMjAwMDAwMDAwMCI8L2NvZGU+LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPHA+CisJICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+T3JpZ2luYWwgVmFsdWU8L2VtPicgYXR0cmlidXRlIGlzbid0IGNsZWFyLAorCSAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4KKwkgKiA8L3A+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+T3JpZ2luYWwgVmFsdWU8L2VtPicgYXR0cmlidXRlLgorCSAqIEBzZWUgI3NldE9yaWdpbmFsVmFsdWUoaW50KQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLk1vZGlmaWVyUGFja2FnZSNnZXRJbnRlZ2VyTW9kaWZpZXJfT3JpZ2luYWxWYWx1ZSgpCisJICogQG1vZGVsIGRlZmF1bHQ9Ii0yMDAwMDAwMDAwIiB0cmFuc2llbnQ9InRydWUiCisJICogQGdlbmVyYXRlZAorCSAqLworCWludCBnZXRPcmlnaW5hbFZhbHVlKCk7CisKKwkvKioKKwkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuSW50ZWdlck1vZGlmaWVyI2dldE9yaWdpbmFsVmFsdWUgPGVtPk9yaWdpbmFsIFZhbHVlPC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5PcmlnaW5hbCBWYWx1ZTwvZW0+JyBhdHRyaWJ1dGUuCisJICogQHNlZSAjZ2V0T3JpZ2luYWxWYWx1ZSgpCisJICogQGdlbmVyYXRlZAorCSAqLworCXZvaWQgc2V0T3JpZ2luYWxWYWx1ZShpbnQgdmFsdWUpOworfSAvLyBJbnRlZ2VyTW9kaWZpZXIKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvbW9kaWZpZXIvSW50ZWdlck5PUE1vZGlmaWVyLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL21vZGlmaWVyL0ludGVnZXJOT1BNb2RpZmllci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVmM2EyOTEKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL21vZGlmaWVyL0ludGVnZXJOT1BNb2RpZmllci5qYXZhCkBAIC0wLDAgKzEsMjQgQEAKKy8vIEludGVnZXJOT1BNb2RpZmllci5qYXZhCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllcjsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKgorICogQSA8Y29kZT5OT1BNb2RpZmllcjwvY29kZT4gZG9lcyBub3RoaW5nLiBJdCBpcyB1c2VmdWwgZm9yIHRoZSBHVUkKKyAqIGNvbXBvbmVudHMgdGhhdCBlZGl0IHtAbGluayBGZWF0dXJlTW9kaWZpZXJ9cyB0byBoYXZlIG9uZSB0aGF0IGlzIGF2YWlsYWJsZQorICogZm9yIHRoZSBjYXNlIHdoZW4gbm8ge0BsaW5rIEZlYXR1cmVNb2RpZmllcn0gaXMgc3BlY2lmaWVkIGJ5IHRoZSB1c2VyLgorICogCisgKiBAbW9kZWwKKyAqLworcHVibGljIGludGVyZmFjZSBJbnRlZ2VyTk9QTW9kaWZpZXIgZXh0ZW5kcyBOT1BNb2RpZmllciB7CisJLy8gTm90aGluZworfSAvLyBJbnRlZ2VyTk9QTW9kaWZpZXIKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL21vZGlmaWVyL0ludGVnZXJSYW5nZU1vZGlmaWVyLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL21vZGlmaWVyL0ludGVnZXJSYW5nZU1vZGlmaWVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjJlMjZhZQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvbW9kaWZpZXIvSW50ZWdlclJhbmdlTW9kaWZpZXIuamF2YQpAQCAtMCwwICsxLDk5IEBACisvLyBJbnRlZ2VyUmFuZ2VNb2RpZmllci5qYXZhCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllcjsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKgorICogQSA8Y29kZT5JbnRlZ2VyUmFuZ2VNb2RpZmllcjwvY29kZT4gbW9kaWZpZXMgYW4gaW50ZWdlciB2YWx1ZWQgZmVhdHVyZSBmcm9tCisgKiBhIHN0YXJ0aW5nIHZhbHVlIHRvIGFuZCBlbmQgdmFsdWUgKGluY2x1c2l2ZT4gYnkgaW5jcmVtZW50cy4KKyAqIAorICogQG1vZGVsCisgKi8KK3B1YmxpYyBpbnRlcmZhY2UgSW50ZWdlclJhbmdlTW9kaWZpZXIgZXh0ZW5kcyBSYW5nZU1vZGlmaWVyIHsKKwkKKwkvKioKKwkgKiBAbW9kZWwKKwkgKi8KKwlpbnQgZ2V0T3JpZ2luYWxWYWx1ZSgpOworCQorCS8qKgorCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5JbnRlZ2VyUmFuZ2VNb2RpZmllciNnZXRPcmlnaW5hbFZhbHVlIDxlbT5PcmlnaW5hbCBWYWx1ZTwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+T3JpZ2luYWwgVmFsdWU8L2VtPicgYXR0cmlidXRlLgorCSAqIEBzZWUgI2dldE9yaWdpbmFsVmFsdWUoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwl2b2lkIHNldE9yaWdpbmFsVmFsdWUoaW50IHZhbHVlKTsKKworCS8qKgorCSAqIEBtb2RlbCBkZWZhdWx0PSItOTk5OTk5OTkiCisJICovCisJaW50IGdldFN0YXJ0VmFsdWUoKTsKKworCS8qKgorCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5JbnRlZ2VyUmFuZ2VNb2RpZmllciNnZXRTdGFydFZhbHVlIDxlbT5TdGFydCBWYWx1ZTwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+U3RhcnQgVmFsdWU8L2VtPicgYXR0cmlidXRlLgorCSAqIEBzZWUgI2dldFN0YXJ0VmFsdWUoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwl2b2lkIHNldFN0YXJ0VmFsdWUoaW50IHZhbHVlKTsKKworCS8qKgorCSAqIEBtb2RlbCBkZWZhdWx0PSItOTk5OTk5OTkiCisJICovCisJaW50IGdldEVuZFZhbHVlKCk7CisKKwkvKioKKwkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuSW50ZWdlclJhbmdlTW9kaWZpZXIjZ2V0RW5kVmFsdWUgPGVtPkVuZCBWYWx1ZTwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+RW5kIFZhbHVlPC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiBAc2VlICNnZXRFbmRWYWx1ZSgpCisJICogQGdlbmVyYXRlZAorCSAqLworCXZvaWQgc2V0RW5kVmFsdWUoaW50IHZhbHVlKTsKKworCS8qKgorCSAqIEBtb2RlbCBkZWZhdWx0PSItOTk5OTk5OTkiCisJICovCisJaW50IGdldEluY3JlbWVudCgpOworCisJLyoqCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLkludGVnZXJSYW5nZU1vZGlmaWVyI2dldEluY3JlbWVudCA8ZW0+SW5jcmVtZW50PC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5JbmNyZW1lbnQ8L2VtPicgYXR0cmlidXRlLgorCSAqIEBzZWUgI2dldEluY3JlbWVudCgpCisJICogQGdlbmVyYXRlZAorCSAqLworCXZvaWQgc2V0SW5jcmVtZW50KGludCB2YWx1ZSk7CisJCisJLyoqCisJICogQHJldHVybiB0aGUgbmV4dCB2YWx1ZSBvZiB0aGUgZmVhdHVyZQorCSAqIEBtb2RlbCBkZWZhdWx0PSItOTk5OTk5OTkiIGNoYW5nZWFibGU9InRydWUiCisJICovCisJaW50IGdldE5leHRWYWx1ZSgpOworCisJLyoqCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLkludGVnZXJSYW5nZU1vZGlmaWVyI2dldE5leHRWYWx1ZSA8ZW0+TmV4dCBWYWx1ZTwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+TmV4dCBWYWx1ZTwvZW0+JyBhdHRyaWJ1dGUuCisJICogQHNlZSAjZ2V0TmV4dFZhbHVlKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJdm9pZCBzZXROZXh0VmFsdWUoaW50IHZhbHVlKTsKKwkKK30gLy8gSW50ZWdlclJhbmdlTW9kaWZpZXIKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvbW9kaWZpZXIvSW50ZWdlclNlcXVlbmNlTW9kaWZpZXIuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvbW9kaWZpZXIvSW50ZWdlclNlcXVlbmNlTW9kaWZpZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNzA5OGU0Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9tb2RpZmllci9JbnRlZ2VyU2VxdWVuY2VNb2RpZmllci5qYXZhCkBAIC0wLDAgKzEsMjggQEAKKy8vIEludGVnZXJTZXF1ZW5jZU1vZGlmaWVyLmphdmEKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5FTGlzdDsKKworLyoqCisgKiBBIHtAbGluayBJbnRlZ2VyU2VxdWVuY2VNb2RpZmllcn0gbW9kaWZpZXMgYSBmZWF0dXJlIGJ5IHNldHRpbmcgaXQgdG8gYQorICogc2VxdWVuY2Ugb2YgImludGVnZXIiIHZhbHVlcy4KKyAqIAorICogQG1vZGVsCisgKi8KK3B1YmxpYyBpbnRlcmZhY2UgSW50ZWdlclNlcXVlbmNlTW9kaWZpZXIgZXh0ZW5kcyBTZXF1ZW5jZU1vZGlmaWVyIHsKKwkvKioKKwkgKiBAbW9kZWwKKwkgKi8KKwlFTGlzdDxJbnRlZ2VyPiBnZXRTZXF1ZW5jZSgpOworfSAvLyBJbnRlZ2VyU2VxdWVuY2VNb2RpZmllcgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvbW9kaWZpZXIvTG9uZ01vZGlmaWVyLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL21vZGlmaWVyL0xvbmdNb2RpZmllci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRiNjQwMzIKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL21vZGlmaWVyL0xvbmdNb2RpZmllci5qYXZhCkBAIC0wLDAgKzEsODYgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA5IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiBBIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5Mb25nIE1vZGlmaWVyPC9iPjwvZW0+Jy4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICoKKyAqIDxwPgorICogVGhlIGZvbGxvd2luZyBmZWF0dXJlcyBhcmUgc3VwcG9ydGVkOgorICogPHVsPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5Mb25nTW9kaWZpZXIjZ2V0VmFsdWUgPGVtPlZhbHVlPC9lbT59PC9saT4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuTG9uZ01vZGlmaWVyI2dldE9yaWdpbmFsVmFsdWUgPGVtPk9yaWdpbmFsIFZhbHVlPC9lbT59PC9saT4KKyAqIDwvdWw+CisgKiA8L3A+CisgKgorICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuTW9kaWZpZXJQYWNrYWdlI2dldExvbmdNb2RpZmllcigpCisgKiBAbW9kZWwKKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGludGVyZmFjZSBMb25nTW9kaWZpZXIgZXh0ZW5kcyBTaW5nbGVWYWx1ZU1vZGlmaWVyIHsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPlZhbHVlPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8cD4KKwkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5WYWx1ZTwvZW0+JyBhdHRyaWJ1dGUgaXNuJ3QgY2xlYXIsCisJICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLgorCSAqIDwvcD4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5WYWx1ZTwvZW0+JyBhdHRyaWJ1dGUuCisJICogQHNlZSAjc2V0VmFsdWUobG9uZykKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5Nb2RpZmllclBhY2thZ2UjZ2V0TG9uZ01vZGlmaWVyX1ZhbHVlKCkKKwkgKiBAbW9kZWwKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJbG9uZyBnZXRWYWx1ZSgpOworCisJLyoqCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLkxvbmdNb2RpZmllciNnZXRWYWx1ZSA8ZW0+VmFsdWU8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPlZhbHVlPC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiBAc2VlICNnZXRWYWx1ZSgpCisJICogQGdlbmVyYXRlZAorCSAqLworCXZvaWQgc2V0VmFsdWUobG9uZyB2YWx1ZSk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5PcmlnaW5hbCBWYWx1ZTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIGlzIDxjb2RlPiItMjAwMDAwMDAwMCI8L2NvZGU+LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPHA+CisJICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+T3JpZ2luYWwgVmFsdWU8L2VtPicgYXR0cmlidXRlIGlzbid0IGNsZWFyLAorCSAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4KKwkgKiA8L3A+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+T3JpZ2luYWwgVmFsdWU8L2VtPicgYXR0cmlidXRlLgorCSAqIEBzZWUgI3NldE9yaWdpbmFsVmFsdWUobG9uZykKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5Nb2RpZmllclBhY2thZ2UjZ2V0TG9uZ01vZGlmaWVyX09yaWdpbmFsVmFsdWUoKQorCSAqIEBtb2RlbCBkZWZhdWx0PSItMjAwMDAwMDAwMCIgdHJhbnNpZW50PSJ0cnVlIgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlsb25nIGdldE9yaWdpbmFsVmFsdWUoKTsKKworCS8qKgorCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5Mb25nTW9kaWZpZXIjZ2V0T3JpZ2luYWxWYWx1ZSA8ZW0+T3JpZ2luYWwgVmFsdWU8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPk9yaWdpbmFsIFZhbHVlPC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiBAc2VlICNnZXRPcmlnaW5hbFZhbHVlKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJdm9pZCBzZXRPcmlnaW5hbFZhbHVlKGxvbmcgdmFsdWUpOworfSAvLyBMb25nTW9kaWZpZXIKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvbW9kaWZpZXIvTG9uZ05PUE1vZGlmaWVyLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL21vZGlmaWVyL0xvbmdOT1BNb2RpZmllci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYyNjUyYjgKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL21vZGlmaWVyL0xvbmdOT1BNb2RpZmllci5qYXZhCkBAIC0wLDAgKzEsMjQgQEAKKy8vIExvbmdOT1BNb2RpZmllci5qYXZhCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllcjsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKgorICogQSA8Y29kZT5OT1BNb2RpZmllcjwvY29kZT4gZG9lcyBub3RoaW5nLiBJdCBpcyB1c2VmdWwgZm9yIHRoZSBHVUkKKyAqIGNvbXBvbmVudHMgdGhhdCBlZGl0IHtAbGluayBGZWF0dXJlTW9kaWZpZXJ9cyB0byBoYXZlIG9uZSB0aGF0IGlzIGF2YWlsYWJsZQorICogZm9yIHRoZSBjYXNlIHdoZW4gbm8ge0BsaW5rIEZlYXR1cmVNb2RpZmllcn0gaXMgc3BlY2lmaWVkIGJ5IHRoZSB1c2VyLgorICogCisgKiBAbW9kZWwKKyAqLworcHVibGljIGludGVyZmFjZSBMb25nTk9QTW9kaWZpZXIgZXh0ZW5kcyBOT1BNb2RpZmllciB7CisJLy8gTm90aGluZworfSAvLyBMb25nTk9QTW9kaWZpZXIKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvbW9kaWZpZXIvTG9uZ1JhbmdlTW9kaWZpZXIuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvbW9kaWZpZXIvTG9uZ1JhbmdlTW9kaWZpZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kODYwYTg1Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9tb2RpZmllci9Mb25nUmFuZ2VNb2RpZmllci5qYXZhCkBAIC0wLDAgKzEsOTggQEAKKy8vIExvbmdSYW5nZU1vZGlmaWVyLmphdmEKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqCisgKiBBIDxjb2RlPkxvbmdSYW5nZU1vZGlmaWVyPC9jb2RlPiBtb2RpZmllcyBhbiBsb25nIHZhbHVlZCBmZWF0dXJlIGZyb20KKyAqIGEgc3RhcnRpbmcgdmFsdWUgdG8gYW5kIGVuZCB2YWx1ZSAoaW5jbHVzaXZlPiBieSBpbmNyZW1lbnRzLgorICogCisgKiBAbW9kZWwKKyAqLworcHVibGljIGludGVyZmFjZSBMb25nUmFuZ2VNb2RpZmllciBleHRlbmRzIFJhbmdlTW9kaWZpZXIgeworCQorCS8qKgorCSAqIEBtb2RlbCBkZWZhdWx0PSItOTk5OTk5OTkiCisJICovCisJbG9uZyBnZXRPcmlnaW5hbFZhbHVlKCk7CisJCisJLyoqCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLkxvbmdSYW5nZU1vZGlmaWVyI2dldE9yaWdpbmFsVmFsdWUgPGVtPk9yaWdpbmFsIFZhbHVlPC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5PcmlnaW5hbCBWYWx1ZTwvZW0+JyBhdHRyaWJ1dGUuCisJICogQHNlZSAjZ2V0T3JpZ2luYWxWYWx1ZSgpCisJICogQGdlbmVyYXRlZAorCSAqLworCXZvaWQgc2V0T3JpZ2luYWxWYWx1ZShsb25nIHZhbHVlKTsKKworCS8qKgorCSAqIEBtb2RlbCBkZWZhdWx0PSItOTk5OTk5OTkiCisJICovCisJbG9uZyBnZXRTdGFydFZhbHVlKCk7CisKKwkvKioKKwkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuTG9uZ1JhbmdlTW9kaWZpZXIjZ2V0U3RhcnRWYWx1ZSA8ZW0+U3RhcnQgVmFsdWU8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPlN0YXJ0IFZhbHVlPC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiBAc2VlICNnZXRTdGFydFZhbHVlKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJdm9pZCBzZXRTdGFydFZhbHVlKGxvbmcgdmFsdWUpOworCisJLyoqCisJICogQG1vZGVsIGRlZmF1bHQ9Ii05OTk5OTk5OSIKKwkgKi8KKwlsb25nIGdldEVuZFZhbHVlKCk7CisKKwkvKioKKwkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuTG9uZ1JhbmdlTW9kaWZpZXIjZ2V0RW5kVmFsdWUgPGVtPkVuZCBWYWx1ZTwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+RW5kIFZhbHVlPC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiBAc2VlICNnZXRFbmRWYWx1ZSgpCisJICogQGdlbmVyYXRlZAorCSAqLworCXZvaWQgc2V0RW5kVmFsdWUobG9uZyB2YWx1ZSk7CisKKwkvKioKKwkgKiBAbW9kZWwgZGVmYXVsdD0iLTk5OTk5OTk5IgorCSAqLworCWxvbmcgZ2V0SW5jcmVtZW50KCk7CisKKwkvKioKKwkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuTG9uZ1JhbmdlTW9kaWZpZXIjZ2V0SW5jcmVtZW50IDxlbT5JbmNyZW1lbnQ8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPkluY3JlbWVudDwvZW0+JyBhdHRyaWJ1dGUuCisJICogQHNlZSAjZ2V0SW5jcmVtZW50KCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJdm9pZCBzZXRJbmNyZW1lbnQobG9uZyB2YWx1ZSk7CisJCisJLyoqCisJICogQHJldHVybiB0aGUgbmV4dCB2YWx1ZSBvZiB0aGUgZmVhdHVyZQorCSAqIEBtb2RlbCBkZWZhdWx0PSItOTk5OTk5OTkiIGNoYW5nZWFibGU9InRydWUiCisJICovCisJbG9uZyBnZXROZXh0VmFsdWUoKTsKKworCS8qKgorCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5Mb25nUmFuZ2VNb2RpZmllciNnZXROZXh0VmFsdWUgPGVtPk5leHQgVmFsdWU8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPk5leHQgVmFsdWU8L2VtPicgYXR0cmlidXRlLgorCSAqIEBzZWUgI2dldE5leHRWYWx1ZSgpCisJICogQGdlbmVyYXRlZAorCSAqLworCXZvaWQgc2V0TmV4dFZhbHVlKGxvbmcgdmFsdWUpOworfSAvLyBMb25nUmFuZ2VNb2RpZmllcgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvbW9kaWZpZXIvTG9uZ1NlcXVlbmNlTW9kaWZpZXIuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvbW9kaWZpZXIvTG9uZ1NlcXVlbmNlTW9kaWZpZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ODIxOTgzCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9tb2RpZmllci9Mb25nU2VxdWVuY2VNb2RpZmllci5qYXZhCkBAIC0wLDAgKzEsMjggQEAKKy8vIExvbmdTZXF1ZW5jZU1vZGlmaWVyLmphdmEKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5FTGlzdDsKKworLyoqCisgKiBBIHtAbGluayBMb25nU2VxdWVuY2VNb2RpZmllcn0gbW9kaWZpZXMgYSBmZWF0dXJlIGJ5IHNldHRpbmcgaXQgdG8gYQorICogc2VxdWVuY2Ugb2YgImxvbmciIHZhbHVlcy4KKyAqIAorICogQG1vZGVsCisgKi8KK3B1YmxpYyBpbnRlcmZhY2UgTG9uZ1NlcXVlbmNlTW9kaWZpZXIgZXh0ZW5kcyBTZXF1ZW5jZU1vZGlmaWVyIHsKKwkvKioKKwkgKiBAbW9kZWwKKwkgKi8KKwlFTGlzdDxMb25nPiBnZXRTZXF1ZW5jZSgpOworfSAvLyBMb25nU2VxdWVuY2VNb2RpZmllcgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvbW9kaWZpZXIvTW9kaWZpYWJsZS5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9tb2RpZmllci9Nb2RpZmlhYmxlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDhhOGQ1NAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvbW9kaWZpZXIvTW9kaWZpYWJsZS5qYXZhCkBAIC0wLDAgKzEsNTQgQEAKKy8vIE1vZGlmaWFibGUuamF2YQorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXI7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLklkZW50aWZpYWJsZTsKKworLyoqCisgKiBUaGlzIGludGVyZmFjZSBpcyBhICJtYXJrZXIgaW50ZXJmYWNlIiB1c2VkIHRvIGlkZW50aWZ5IHtAbGluayBJZGVudGlmaWFibGV9cworICogdGhhdCBjYW4gYmUgbW9kaWZpZWQgYnkgYSB7QGxpbmsgTW9kaWZpZXJ9LiBUaGUgbWFpbiB1c2Ugb2YgdGhpcyBtYXJrZXIgaXMgaW4KKyAqIDxhIGhyZWY9Imh0dHA6Ly93aWtpLmVjbGlwc2Uub3JnL0NvbW1hbmRfQ29yZV9FeHByZXNzaW9ucyI+Q29tbWFuZCBDb3JlCisgKiBFeHByZXNzaW9uczwvYT4gd2hlcmUgdGhleSBhcmUgdXNlZCBpbiA8ZW0+YWRhcHQ8L2VtPiBlbGVtZW50cyB0byB0ZXN0IGlmIHRoZQorICogY3VycmVudCBzZWxlY3Rpb24gY2FuIGJlIGFkYXB0ZWQgdG8gdGhlIHR5cGUgPGNvZGU+TW9kaWZpYWJsZTwvY29kZT4uIDwvcD4KKyAqIDxwPgorICogQW4gZXhhbXBsZSBvZiBpdHMgdXNlIGNhbiBiZSBmb3VuZCBpbgorICogPGNvZGU+b3JnLmVjbGlwc2Uuc3RlbS51aS9wbHVnaW4ueG1sPC9jb2RlPi4gSW4gdGhhdCBmaWxlIHRoZXJlIGFyZQorICogc2V2ZXJhbCBpbnN0YW5jZXMgb2YgZXh0ZW5zaW9ucyBvZiB0aGUgZXh0ZW5zaW9uIHBvaW50CisgKiA8Y29kZT5vcmcuZWNsaXBzZS5jb3JlLmV4cHJlc3Npb25zLmRlZmluaXRpb25zPC9jb2RlPjsgb25lIGNvbnRhaW5zIHRoZQorICogZGVmaW5pdGlvbiBvZiB0aGUgZXhwcmVzc2lvbgorICogPGNvZGU+b3JnLmVjbGlwc2Uuc3RlbS51aS5pc01vZGlmaWFibGVJZGVudGlmaWFibGU8L2NvZGU+IHdoaWNoIGluY2x1ZGVzCisgKiBhIHRlc3QgdGhhdCB0aGUgY3VycmVudCBzZWxlY3Rpb24gY2FuIGJlIGFkYXB0ZWQgdG8gPGNvZGU+TW9kaWZpYWJsZTwvY29kZT4KKyAqIChhbW9uZyBvdGhlciB0aGluZ3MpLiBUaGUgdmFsdWUgb2YgdGhlIGV4cHJlc3Npb24gaXMgdXNlZCB0byBlbmFibGUgdGhlCisgKiBjb21tYW5kIDxjb2RlPm9yZy5lY2xpcHNlLnN0ZW0udWkuY29tbWFuZC5uZXdtb2RpZmllcndpemFyZDwvY29kZT4KKyAqIGRlZmluZWQgdmlhIGEgPGNvZGU+b3JnLmVjbGlwc2UudWkuY29tbWFuZHM8L2NvZGU+IGV4dGVuc2lvbiBwb2ludCBlbHNld2hlcmUKKyAqIGluIHRoZSBzYW1lIGZpbGUuIFRoZSBjb21tYW5kIG9wZW5zIHRoZSB3aXphcmQgZm9yIGNyZWF0aW5nIGEgbmV3CisgKiA8Y29kZT5Nb2RpZmlhYmxlPC9jb2RlPiBnaXZlbiB0aGUgY3VycmVudCBzZWxlY3Rpb24uIFRoZSAiQ3JlYXRlIE1vZGlmaWVyIgorICogZW50cnkgaW4gdGhlIHBvcHVwIGNvbnRleHQgbWVudSBmb3IgdGhlIGN1cnJlbnQgc2VsZWN0aW9uIHdpbGwgYXBwZWFyIHdoZW4KKyAqIHRoaXMgY29tbWFuZCBpcyBlbmFibGVkLgorICogPC9wPgorICogPHA+CisgKiBJdCBpcyBub3Qgc3VmZmljaWVudCB0byBzaW1wbHkgaW1wbGVtZW50IHRoZSA8Y29kZT5Nb2RpZmlhYmxlPC9jb2RlPgorICogaW50ZXJmYWNlIGZvciB0aGlzIHRlc3QgdG8gcmV0dXJuIDxjb2RlPnRydWU8L2NvZGU+IGluIHRoZSBjb3JlIGV4cHJlc3Npb24uCisgKiBBbiBpbnN0YW5jZSBvZiB7QGxpbmsgSUFkYXB0ZXJGYWN0b3J5fSBuZWVkcyB0byBiZSBkZWZpbmVkIGFuZCB0aGVuCisgKiByZWdpc3RlcmVkIGFzIGEgInJ1biB0aW1lIGFkYXB0ZXIgZmFjdG9yeSIgdXNpbmcgdGhlIGV4dGVuc2lvbiBwb2ludAorICogPGNvZGU+b3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLmFkYXB0ZXJzPC9jb2RlPi4gVGhlIGZpbGUKKyAqIDxjb2RlPm9yZy5lY2xpcHNlLnN0ZW0udWkvcGx1Z2luLnhtbDwvY29kZT4gY29udGFpbnMgZXhhbXBsZXMuCisgKiAKKyAqIAorICogQG1vZGVsIGludGVyZmFjZT0idHJ1ZSIKKyAqLworcHVibGljIGludGVyZmFjZSBNb2RpZmlhYmxlIGV4dGVuZHMgRU9iamVjdCB7CisJLy8gTm90aGluZworfSAvLyBNb2RpZmlhYmxlClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9tb2RpZmllci9Nb2RpZmllci5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9tb2RpZmllci9Nb2RpZmllci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZhOGFmZmEKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL21vZGlmaWVyL01vZGlmaWVyLmphdmEKQEAgLTAsMCArMSwxMTkgQEAKKy8vIE1vZGlmaWVyLmphdmEKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGphdmEudXRpbC5MaXN0OworCitpbXBvcnQgamF2YXguc3FsLnJvd3NldC5QcmVkaWNhdGU7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuRUxpc3Q7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlVSSTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLklkZW50aWZpYWJsZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZXhwZXJpbWVudC5FeHBlcmltZW50OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5HcmFwaDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguTGFiZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkxhYmVsVmFsdWU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLkRlY29yYXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2NlbmFyaW8uU2NlbmFyaW87CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnRyaWdnZXIuVHJpZ2dlcjsKKworLyoqCisgKiBBIDxjb2RlPk1vZGlmaWVyPC9jb2RlPiBzcGVjaWZpZXMgdGhlIGNoYW5nZXMgdG8gYmUgbWFkZSB0byB0aGUgZmVhdHVyZXMgb2YKKyAqIGFuIHNwZWNpZmljICJ0YXJnZXQiIHtAbGluayBFT2JqZWN0fS4gSXQgY29udGFpbnMgdGhlIHtAbGluayBVUkl9IG9mIHRoZQorICoge0BsaW5rIElkZW50aWZpYWJsZX0gYW5kIGEgY29sbGVjdGlvbiBvZiB7QGxpbmsgRmVhdHVyZU1vZGlmaWVyfXMgdGhhdAorICogcGVyZm9ybSB0aGUgYWN0dWFsIGZlYXR1cmUgbW9kaWZpY2F0aW9uLiBBIDxjb2RlPk1vZGlmaWVyPC9jb2RlPiBjYW4gY2hhbmdlCisgKiB0aGUgdmFsdWUgb2YgYSBmZWF0dXJlIGluIGEge0BsaW5rIExhYmVsVmFsdWV9LCBpbnN0YW5jZXMgb2Ygd2hpY2ggYXJlIG5vdAorICoge0BsaW5rIElkZW50aWZpYWJsZX1zLiBJbiBzdWNoIGNhc2VzLCB0aGUge0BsaW5rIFVSSX0gc3BlY2lmaWVzIHRoZQorICoge0BsaW5rIExhYmVsfSBpbnN0YW5jZSB3aGljaCBjb250YWlucyBhIHJlZmVyZW5jZSB0byB0aGUge0BsaW5rIExhYmVsVmFsdWV9CisgKiBpbnN0YW5jZSB0aGF0IHdpbGwgYmUgbW9kaWZpZWQuCisgKiA8cD4KKyAqIDxjb2RlPk1vZGlmaWVyczwvY29kZT4gYXJlIHVzZWQgYnkgYm90aCB7QGxpbmsgRXhwZXJpbWVudH1zIGFuZAorICoge0BsaW5rIFRyaWdnZXJ9cyB0byBtb2RpZnkgZWxlbWVudHMgb2YgYSBjYW5vbmljYWwge0BsaW5rIEdyYXBofSB0aGF0CisgKiByZXByZXNlbnRzIHNpbXVsYXRpb24gc3RhdGUuIEluIHRoZSBmb3JtZXIgY2FzZSwgdGhlIDxjb2RlPk1vZGlmaWVyPC9jb2RlPgorICogbWFrZXMgYWx0ZXJhdGlvbnMgdG8gYSB7QGxpbmsgU2NlbmFyaW99IGluc3RhbmNlIGJlZm9yZSBpdCBpcyB1c2VkIHRvIGxhdW5jaAorICogYSBTaW11bGF0aW9uLiBJbiB0aGUgbGF0ZXIgY2FzZSwgYSA8Y29kZT5Nb2RpZmllcjwvY29kZT4gaXMgdXNlZCBhcyBhCisgKiB7QGxpbmsgRGVjb3JhdG9yfSB0aGF0IGlzIGNvbmRpdGlvbmFsbHkgZW5hYmxlZCBieSB0aGUgdmFsdWUgb2YgdGhlCisgKiB7QGxpbmsgUHJlZGljYXRlfSByZWZlcmVuY2VkIGJ5IGEge0BsaW5rIFRyaWdnZXJ9LgorICogPHA+CisgKiBUaGUge0BsaW5rIEZlYXR1cmVNb2RpZmllcn1zIHBlcmZvcm0gdGhlIGFjdHVhbCBtb2RpZmljYXRpb25zIHRvIHRoZQorICoge0BsaW5rIEVPYmplY3R9cy4KKyAqIDxwPgorICogVGhpcyBpbnRlcmZhY2UgZGVmaW5pdGlvbiBpcyBhbHNvIGFuICJBbm5vdGF0ZWQgSmF2YSBJbnRlcmZhY2UiIHRoYXQgZGVmaW5lcworICogb25lIGNsYXNzIGluIGEgPGEgaHJlZj0iaHR0cDovL3d3dy51bWwub3JnLyI+VU1MPC9hPiAibW9kZWwiLiBUaGUgVU1MIGNsYXNzCisgKiBkaWFncmFtIGZvciB0aGUgbW9kZWwgaXMgaW4gdGhlIDxjb2RlPmRvY3VtZW50YXRpb248L2NvZGU+IGZvbGRlciBvZiB0aGUKKyAqIHByb2plY3QuIFRoaXMgZmlsZSBhbmQgdGhlIG90aGVyIGludGVyZmFjZXMgaW4gdGhpcyBKYXZhIHBhY2thZ2UgYXJlCisgKiBwcm9jZXNzZWQgYnkgdGhlIEVjbGlwc2UgTW9kZWxpbmcgRnJhbWV3b3JrIChha2EgRU1GIDxhCisgKiBocmVmPSJodHRwOi8vb3JnLmVjbGlwc2UvZW1mIj5odHRwOi8vb3JnLmVjbGlwc2UvZW1mPC9hPikuIHRvIGF1dG9tYXRpY2FsbHkKKyAqIGdlbmVyYXRlIGFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBtb2RlbC4gRU1GIGlzIGRvY3VtZW50ZWQgaW4gdGhlIGJvb2sgPGEKKyAqIGhyZWY9Imh0dHA6Ly93d3cuYXdwcm9mZXNzaW9uYWwuY29tL2Jvb2tzdG9yZS9wcm9kdWN0LmFzcD9pc2JuPTAxMzE0MjU0MjAmcmw9MSI+RWNsaXBzZQorICogTW9kZWxpbmcgRnJhbWV3b3JrIDwvYT4gYnkgQnVkaW5za3ksIGV0IGFsLgorICogPC9wPgorICogQG1vZGVsCisgKi8KK3B1YmxpYyBpbnRlcmZhY2UgTW9kaWZpZXIgZXh0ZW5kcyBEZWNvcmF0b3IgeworCisJU3RyaW5nIFVSSV9UWVBFX01PRElGSUVSX1NFR01FTlQgPSAibW9kaWZpZXIiOworCQorCS8qKgorCSAqIEBtb2RlbAorCSAqLworCVVSSSBnZXRUYXJnZXRVUkkoKTsKKworCS8qKgorCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5Nb2RpZmllciNnZXRUYXJnZXRVUkkgPGVtPlRhcmdldCBVUkk8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPlRhcmdldCBVUkk8L2VtPicgYXR0cmlidXRlLgorCSAqIEBzZWUgI2dldFRhcmdldFVSSSgpCisJICogQGdlbmVyYXRlZAorCSAqLworCXZvaWQgc2V0VGFyZ2V0VVJJKFVSSSB2YWx1ZSk7CisKKwkvKioKKwkgKiBAbW9kZWwgY29udGFpbm1lbnQ9InRydWUiCisJICovCisJRUxpc3Q8RmVhdHVyZU1vZGlmaWVyPiBnZXRGZWF0dXJlTW9kaWZpZXJzKCk7CisKKwkvKioKKwkgKiBAcGFyYW0gYmFzZVNjZW5hcmlvCisJICogICAgICAgICAgICB0aGUge0BsaW5rIFNjZW5hcmlvfSB0byBiZSBtb2RpZmllZC4KKwkgKiAKKwkgKiBAbW9kZWwgdm9sYXRpbGU9InRydWUiIHRyYW5zaWVudD0idHJ1ZSIgY2hhbmdlYWJsZT0iZmFsc2UiCisJICovCisJdm9pZCB1cGRhdGVTY2VuYXJpbyhmaW5hbCBTY2VuYXJpbyBiYXNlU2NlbmFyaW8pOworCisJLyoqCisJICogQHJldHVybiBhIHtAbGluayBMaXN0fSBvZiB7QGxpbmsgU3RyaW5nfXMgdGhhdCBzdW1tYXJpemUgdGhlCisJICogICAgICAgICBtb2RpZmljYXRpb25zIG1hZGUgdG8gdGhlIGxhc3Qge0BsaW5rIFNjZW5hcmlvfSBieSB0aGUgY2FsbCB0bworCSAqICAgICAgICAge0BsaW5rICN1cGRhdGVTY2VuYXJpbyhTY2VuYXJpbyl9LgorCSAqIG1vZGVsIHZvbGF0aWxlPSJ0cnVlIiB0cmFuc2llbnQ9InRydWUiIGNoYW5nZWFibGU9ImZhbHNlIgorCSAqLworCUxpc3Q8U3RyaW5nPiBnZXRNb2RpZmljYXRpb25TdW1tYXJ5KCk7CisKKwkvKioKKwkgKiBAcmV0dXJuIDxjb2RlPnRydWU8L2NvZGU+IGlmIGFsbCBvZiB0aGUgbW9kaWZpY2F0aW9ucyB0byB0aGUKKwkgKiAgICAgICAgIHtAbGluayBJZGVudGlmaWFibGV9IGhhdmUgYmVlbiBjb21wbGV0ZWQsIDxjb2RlPmZhbHNlPC9jb2RlPiwKKwkgKiAgICAgICAgIG90aGVyd2lzZS4KKwkgKiBAbW9kZWwgdm9sYXRpbGU9InRydWUiIHRyYW5zaWVudD0idHJ1ZSIgY2hhbmdlYWJsZT0iZmFsc2UiCisJICovCisJYm9vbGVhbiBpc0NvbXBsZXRlKCk7CisKKwkvKioKKwkgKiBSZXN0b3JlIHRoZSB2YWx1ZSBvZiBhbGwgb2YgdGhlIGZlYXR1cmVzIGJlaW5nIG1vZGlmaWVkIHRvIHRoZWlyIG9yaWdpbmFsCisJICogdmFsdWVzLgorCSAqIAorCSAqIEBtb2RlbCB2b2xhdGlsZT0idHJ1ZSIgdHJhbnNpZW50PSJ0cnVlIiBjaGFuZ2VhYmxlPSJmYWxzZSIKKwkgKi8KKwl2b2lkIHJlc2V0KCk7Cit9IC8vIE1vZGlmaWVyCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL21vZGlmaWVyL01vZGlmaWVyRmFjdG9yeS5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9tb2RpZmllci9Nb2RpZmllckZhY3RvcnkuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YmZhMzc0Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9tb2RpZmllci9Nb2RpZmllckZhY3RvcnkuamF2YQpAQCAtMCwwICsxLDIyMiBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXI7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVGYWN0b3J5OworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiBUaGUgPGI+RmFjdG9yeTwvYj4gZm9yIHRoZSBtb2RlbC4KKyAqIEl0IHByb3ZpZGVzIGEgY3JlYXRlIG1ldGhvZCBmb3IgZWFjaCBub24tYWJzdHJhY3QgY2xhc3Mgb2YgdGhlIG1vZGVsLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5Nb2RpZmllclBhY2thZ2UKKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGludGVyZmFjZSBNb2RpZmllckZhY3RvcnkgZXh0ZW5kcyBFRmFjdG9yeSB7CisJLyoqCisJICogVGhlIHNpbmdsZXRvbiBpbnN0YW5jZSBvZiB0aGUgZmFjdG9yeS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlNb2RpZmllckZhY3RvcnkgZUlOU1RBTkNFID0gb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLmltcGwuTW9kaWZpZXJGYWN0b3J5SW1wbC5pbml0KCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPkRvdWJsZSBOT1AgTW9kaWZpZXI8L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPkRvdWJsZSBOT1AgTW9kaWZpZXI8L2VtPicuCisJICogQGdlbmVyYXRlZAorCSAqLworCURvdWJsZU5PUE1vZGlmaWVyIGNyZWF0ZURvdWJsZU5PUE1vZGlmaWVyKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPkRvdWJsZSBSYW5nZSBNb2RpZmllcjwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+RG91YmxlIFJhbmdlIE1vZGlmaWVyPC9lbT4nLgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlEb3VibGVSYW5nZU1vZGlmaWVyIGNyZWF0ZURvdWJsZVJhbmdlTW9kaWZpZXIoKTsKKworCS8qKgorCSAqIFJldHVybnMgYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+RG91YmxlIFNlcXVlbmNlIE1vZGlmaWVyPC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiBhIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5Eb3VibGUgU2VxdWVuY2UgTW9kaWZpZXI8L2VtPicuCisJICogQGdlbmVyYXRlZAorCSAqLworCURvdWJsZVNlcXVlbmNlTW9kaWZpZXIgY3JlYXRlRG91YmxlU2VxdWVuY2VNb2RpZmllcigpOworCisJLyoqCisJICogUmV0dXJucyBhIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5JbnRlZ2VyIE5PUCBNb2RpZmllcjwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+SW50ZWdlciBOT1AgTW9kaWZpZXI8L2VtPicuCisJICogQGdlbmVyYXRlZAorCSAqLworCUludGVnZXJOT1BNb2RpZmllciBjcmVhdGVJbnRlZ2VyTk9QTW9kaWZpZXIoKTsKKworCS8qKgorCSAqIFJldHVybnMgYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+SW50ZWdlciBSYW5nZSBNb2RpZmllcjwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+SW50ZWdlciBSYW5nZSBNb2RpZmllcjwvZW0+Jy4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJSW50ZWdlclJhbmdlTW9kaWZpZXIgY3JlYXRlSW50ZWdlclJhbmdlTW9kaWZpZXIoKTsKKworCS8qKgorCSAqIFJldHVybnMgYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+SW50ZWdlciBTZXF1ZW5jZSBNb2RpZmllcjwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+SW50ZWdlciBTZXF1ZW5jZSBNb2RpZmllcjwvZW0+Jy4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJSW50ZWdlclNlcXVlbmNlTW9kaWZpZXIgY3JlYXRlSW50ZWdlclNlcXVlbmNlTW9kaWZpZXIoKTsKKworCS8qKgorCSAqIFJldHVybnMgYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+TG9uZyBOT1AgTW9kaWZpZXI8L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPkxvbmcgTk9QIE1vZGlmaWVyPC9lbT4nLgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlMb25nTk9QTW9kaWZpZXIgY3JlYXRlTG9uZ05PUE1vZGlmaWVyKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPkxvbmcgUmFuZ2UgTW9kaWZpZXI8L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPkxvbmcgUmFuZ2UgTW9kaWZpZXI8L2VtPicuCisJICogQGdlbmVyYXRlZAorCSAqLworCUxvbmdSYW5nZU1vZGlmaWVyIGNyZWF0ZUxvbmdSYW5nZU1vZGlmaWVyKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPkxvbmcgU2VxdWVuY2UgTW9kaWZpZXI8L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPkxvbmcgU2VxdWVuY2UgTW9kaWZpZXI8L2VtPicuCisJICogQGdlbmVyYXRlZAorCSAqLworCUxvbmdTZXF1ZW5jZU1vZGlmaWVyIGNyZWF0ZUxvbmdTZXF1ZW5jZU1vZGlmaWVyKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPk1vZGlmaWVyPC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiBhIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5Nb2RpZmllcjwvZW0+Jy4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJTW9kaWZpZXIgY3JlYXRlTW9kaWZpZXIoKTsKKworCS8qKgorCSAqIFJldHVybnMgYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+Tk9QIE1vZGlmaWVyPC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiBhIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5OT1AgTW9kaWZpZXI8L2VtPicuCisJICogQGdlbmVyYXRlZAorCSAqLworCU5PUE1vZGlmaWVyIGNyZWF0ZU5PUE1vZGlmaWVyKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPlNURU0gVGltZSBOT1AgTW9kaWZpZXI8L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPlNURU0gVGltZSBOT1AgTW9kaWZpZXI8L2VtPicuCisJICogQGdlbmVyYXRlZAorCSAqLworCVNURU1UaW1lTk9QTW9kaWZpZXIgY3JlYXRlU1RFTVRpbWVOT1BNb2RpZmllcigpOworCisJLyoqCisJICogUmV0dXJucyBhIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5TVEVNIFRpbWUgUmFuZ2UgTW9kaWZpZXI8L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPlNURU0gVGltZSBSYW5nZSBNb2RpZmllcjwvZW0+Jy4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJU1RFTVRpbWVSYW5nZU1vZGlmaWVyIGNyZWF0ZVNURU1UaW1lUmFuZ2VNb2RpZmllcigpOworCisJLyoqCisJICogUmV0dXJucyBhIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5TVEVNIFRpbWUgU2VxdWVuY2UgTW9kaWZpZXI8L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPlNURU0gVGltZSBTZXF1ZW5jZSBNb2RpZmllcjwvZW0+Jy4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJU1RFTVRpbWVTZXF1ZW5jZU1vZGlmaWVyIGNyZWF0ZVNURU1UaW1lU2VxdWVuY2VNb2RpZmllcigpOworCisJLyoqCisJICogUmV0dXJucyBhIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5TdHJpbmcgTk9QIE1vZGlmaWVyPC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiBhIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5TdHJpbmcgTk9QIE1vZGlmaWVyPC9lbT4nLgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlTdHJpbmdOT1BNb2RpZmllciBjcmVhdGVTdHJpbmdOT1BNb2RpZmllcigpOworCisJLyoqCisJICogUmV0dXJucyBhIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5TdHJpbmcgU2VxdWVuY2UgTW9kaWZpZXI8L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPlN0cmluZyBTZXF1ZW5jZSBNb2RpZmllcjwvZW0+Jy4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJU3RyaW5nU2VxdWVuY2VNb2RpZmllciBjcmVhdGVTdHJpbmdTZXF1ZW5jZU1vZGlmaWVyKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPkRvdWJsZSBNb2RpZmllcjwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+RG91YmxlIE1vZGlmaWVyPC9lbT4nLgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlEb3VibGVNb2RpZmllciBjcmVhdGVEb3VibGVNb2RpZmllcigpOworCisJLyoqCisJICogUmV0dXJucyBhIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5JbnRlZ2VyIE1vZGlmaWVyPC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiBhIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5JbnRlZ2VyIE1vZGlmaWVyPC9lbT4nLgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlJbnRlZ2VyTW9kaWZpZXIgY3JlYXRlSW50ZWdlck1vZGlmaWVyKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPkxvbmcgTW9kaWZpZXI8L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPkxvbmcgTW9kaWZpZXI8L2VtPicuCisJICogQGdlbmVyYXRlZAorCSAqLworCUxvbmdNb2RpZmllciBjcmVhdGVMb25nTW9kaWZpZXIoKTsKKworCS8qKgorCSAqIFJldHVybnMgYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+U1RFTSBUaW1lIE1vZGlmaWVyPC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiBhIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5TVEVNIFRpbWUgTW9kaWZpZXI8L2VtPicuCisJICogQGdlbmVyYXRlZAorCSAqLworCVNURU1UaW1lTW9kaWZpZXIgY3JlYXRlU1RFTVRpbWVNb2RpZmllcigpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgcGFja2FnZSBzdXBwb3J0ZWQgYnkgdGhpcyBmYWN0b3J5LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgcGFja2FnZSBzdXBwb3J0ZWQgYnkgdGhpcyBmYWN0b3J5LgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlNb2RpZmllclBhY2thZ2UgZ2V0TW9kaWZpZXJQYWNrYWdlKCk7CisKK30gLy9Nb2RpZmllckZhY3RvcnkKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvbW9kaWZpZXIvTW9kaWZpZXJQYWNrYWdlLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL21vZGlmaWVyL01vZGlmaWVyUGFja2FnZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk1MDUzNDQKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL21vZGlmaWVyL01vZGlmaWVyUGFja2FnZS5qYXZhCkBAIC0wLDAgKzEsMzc5NSBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXI7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVBdHRyaWJ1dGU7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzczsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRVBhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVSZWZlcmVuY2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLk1vZGVsUGFja2FnZTsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogVGhlIDxiPlBhY2thZ2U8L2I+IGZvciB0aGUgbW9kZWwuCisgKiBJdCBjb250YWlucyBhY2Nlc3NvcnMgZm9yIHRoZSBtZXRhIG9iamVjdHMgdG8gcmVwcmVzZW50CisgKiA8dWw+CisgKiAgIDxsaT5lYWNoIGNsYXNzLDwvbGk+CisgKiAgIDxsaT5lYWNoIGZlYXR1cmUgb2YgZWFjaCBjbGFzcyw8L2xpPgorICogICA8bGk+ZWFjaCBlbnVtLDwvbGk+CisgKiAgIDxsaT5hbmQgZWFjaCBkYXRhIHR5cGU8L2xpPgorICogPC91bD4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuTW9kaWZpZXJGYWN0b3J5CisgKiBAbW9kZWwga2luZD0icGFja2FnZSIKKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGludGVyZmFjZSBNb2RpZmllclBhY2thZ2UgZXh0ZW5kcyBFUGFja2FnZSB7CisJLyoqCisJICogVGhlIHBhY2thZ2UgbmFtZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlTdHJpbmcgZU5BTUUgPSAibW9kaWZpZXIiOyAvLyROT04tTkxTLTEkCisKKwkvKioKKwkgKiBUaGUgcGFja2FnZSBuYW1lc3BhY2UgVVJJLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCVN0cmluZyBlTlNfVVJJID0gImh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL21vZGlmaWVyLmVjb3JlIjsgLy8kTk9OLU5MUy0xJAorCisJLyoqCisJICogVGhlIHBhY2thZ2UgbmFtZXNwYWNlIG5hbWUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJU3RyaW5nIGVOU19QUkVGSVggPSAib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyIjsgLy8kTk9OLU5MUy0xJAorCisJLyoqCisJICogVGhlIHNpbmdsZXRvbiBpbnN0YW5jZSBvZiB0aGUgcGFja2FnZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlNb2RpZmllclBhY2thZ2UgZUlOU1RBTkNFID0gb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLmltcGwuTW9kaWZpZXJQYWNrYWdlSW1wbC5pbml0KCk7CisKKwkvKioKKwkgKiBUaGUgbWV0YSBvYmplY3QgaWQgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5pbXBsLkZlYXR1cmVNb2RpZmllckltcGwgPGVtPkZlYXR1cmUgTW9kaWZpZXI8L2VtPn0nIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuaW1wbC5GZWF0dXJlTW9kaWZpZXJJbXBsCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuaW1wbC5Nb2RpZmllclBhY2thZ2VJbXBsI2dldEZlYXR1cmVNb2RpZmllcigpCisJICogQGdlbmVyYXRlZAorCSAqLworCWludCBGRUFUVVJFX01PRElGSUVSID0gMzsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5UYXJnZXQ8L2I+PC9lbT4nIHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBGRUFUVVJFX01PRElGSUVSX19UQVJHRVQgPSAwOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkVTdHJ1Y3R1cmFsIEZlYXR1cmU8L2I+PC9lbT4nIHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBGRUFUVVJFX01PRElGSUVSX19FU1RSVUNUVVJBTF9GRUFUVVJFID0gMTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5GZWF0dXJlIE5hbWU8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBGRUFUVVJFX01PRElGSUVSX19GRUFUVVJFX05BTUUgPSAyOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkZlYXR1cmUgSWQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBGRUFUVVJFX01PRElGSUVSX19GRUFUVVJFX0lEID0gMzsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5DdXJyZW50IFZhbHVlIFRleHQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBGRUFUVVJFX01PRElGSUVSX19DVVJSRU5UX1ZBTFVFX1RFWFQgPSA0OworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkNvbXBsZXRlPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgRkVBVFVSRV9NT0RJRklFUl9fQ09NUExFVEUgPSA1OworCisJLyoqCisJICogVGhlIG51bWJlciBvZiBzdHJ1Y3R1cmFsIGZlYXR1cmVzIG9mIHRoZSAnPGVtPkZlYXR1cmUgTW9kaWZpZXI8L2VtPicgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgRkVBVFVSRV9NT0RJRklFUl9GRUFUVVJFX0NPVU5UID0gNjsKKworCS8qKgorCSAqIFRoZSBtZXRhIG9iamVjdCBpZCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLmltcGwuTk9QTW9kaWZpZXJJbXBsIDxlbT5OT1AgTW9kaWZpZXI8L2VtPn0nIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuaW1wbC5OT1BNb2RpZmllckltcGwKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5pbXBsLk1vZGlmaWVyUGFja2FnZUltcGwjZ2V0Tk9QTW9kaWZpZXIoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlpbnQgTk9QX01PRElGSUVSID0gMTE7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VGFyZ2V0PC9iPjwvZW0+JyByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgTk9QX01PRElGSUVSX19UQVJHRVQgPSBGRUFUVVJFX01PRElGSUVSX19UQVJHRVQ7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RVN0cnVjdHVyYWwgRmVhdHVyZTwvYj48L2VtPicgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IE5PUF9NT0RJRklFUl9fRVNUUlVDVFVSQUxfRkVBVFVSRSA9IEZFQVRVUkVfTU9ESUZJRVJfX0VTVFJVQ1RVUkFMX0ZFQVRVUkU7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RmVhdHVyZSBOYW1lPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgTk9QX01PRElGSUVSX19GRUFUVVJFX05BTUUgPSBGRUFUVVJFX01PRElGSUVSX19GRUFUVVJFX05BTUU7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RmVhdHVyZSBJZDwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IE5PUF9NT0RJRklFUl9fRkVBVFVSRV9JRCA9IEZFQVRVUkVfTU9ESUZJRVJfX0ZFQVRVUkVfSUQ7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+Q3VycmVudCBWYWx1ZSBUZXh0PC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgTk9QX01PRElGSUVSX19DVVJSRU5UX1ZBTFVFX1RFWFQgPSBGRUFUVVJFX01PRElGSUVSX19DVVJSRU5UX1ZBTFVFX1RFWFQ7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+Q29tcGxldGU8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBOT1BfTU9ESUZJRVJfX0NPTVBMRVRFID0gRkVBVFVSRV9NT0RJRklFUl9fQ09NUExFVEU7CisKKwkvKioKKwkgKiBUaGUgbnVtYmVyIG9mIHN0cnVjdHVyYWwgZmVhdHVyZXMgb2YgdGhlICc8ZW0+Tk9QIE1vZGlmaWVyPC9lbT4nIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IE5PUF9NT0RJRklFUl9GRUFUVVJFX0NPVU5UID0gRkVBVFVSRV9NT0RJRklFUl9GRUFUVVJFX0NPVU5UICsgMDsKKworCS8qKgorCSAqIFRoZSBtZXRhIG9iamVjdCBpZCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLmltcGwuRG91YmxlTk9QTW9kaWZpZXJJbXBsIDxlbT5Eb3VibGUgTk9QIE1vZGlmaWVyPC9lbT59JyBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLmltcGwuRG91YmxlTk9QTW9kaWZpZXJJbXBsCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuaW1wbC5Nb2RpZmllclBhY2thZ2VJbXBsI2dldERvdWJsZU5PUE1vZGlmaWVyKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJaW50IERPVUJMRV9OT1BfTU9ESUZJRVIgPSAwOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlRhcmdldDwvYj48L2VtPicgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IERPVUJMRV9OT1BfTU9ESUZJRVJfX1RBUkdFVCA9IE5PUF9NT0RJRklFUl9fVEFSR0VUOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkVTdHJ1Y3R1cmFsIEZlYXR1cmU8L2I+PC9lbT4nIHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBET1VCTEVfTk9QX01PRElGSUVSX19FU1RSVUNUVVJBTF9GRUFUVVJFID0gTk9QX01PRElGSUVSX19FU1RSVUNUVVJBTF9GRUFUVVJFOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkZlYXR1cmUgTmFtZTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IERPVUJMRV9OT1BfTU9ESUZJRVJfX0ZFQVRVUkVfTkFNRSA9IE5PUF9NT0RJRklFUl9fRkVBVFVSRV9OQU1FOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkZlYXR1cmUgSWQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBET1VCTEVfTk9QX01PRElGSUVSX19GRUFUVVJFX0lEID0gTk9QX01PRElGSUVSX19GRUFUVVJFX0lEOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkN1cnJlbnQgVmFsdWUgVGV4dDwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IERPVUJMRV9OT1BfTU9ESUZJRVJfX0NVUlJFTlRfVkFMVUVfVEVYVCA9IE5PUF9NT0RJRklFUl9fQ1VSUkVOVF9WQUxVRV9URVhUOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkNvbXBsZXRlPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgRE9VQkxFX05PUF9NT0RJRklFUl9fQ09NUExFVEUgPSBOT1BfTU9ESUZJRVJfX0NPTVBMRVRFOworCisJLyoqCisJICogVGhlIG51bWJlciBvZiBzdHJ1Y3R1cmFsIGZlYXR1cmVzIG9mIHRoZSAnPGVtPkRvdWJsZSBOT1AgTW9kaWZpZXI8L2VtPicgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgRE9VQkxFX05PUF9NT0RJRklFUl9GRUFUVVJFX0NPVU5UID0gTk9QX01PRElGSUVSX0ZFQVRVUkVfQ09VTlQgKyAwOworCisJLyoqCisJICogVGhlIG1ldGEgb2JqZWN0IGlkIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuaW1wbC5SYW5nZU1vZGlmaWVySW1wbCA8ZW0+UmFuZ2UgTW9kaWZpZXI8L2VtPn0nIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuaW1wbC5SYW5nZU1vZGlmaWVySW1wbAorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLmltcGwuTW9kaWZpZXJQYWNrYWdlSW1wbCNnZXRSYW5nZU1vZGlmaWVyKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJaW50IFJBTkdFX01PRElGSUVSID0gMTI7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VGFyZ2V0PC9iPjwvZW0+JyByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgUkFOR0VfTU9ESUZJRVJfX1RBUkdFVCA9IEZFQVRVUkVfTU9ESUZJRVJfX1RBUkdFVDsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5FU3RydWN0dXJhbCBGZWF0dXJlPC9iPjwvZW0+JyByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgUkFOR0VfTU9ESUZJRVJfX0VTVFJVQ1RVUkFMX0ZFQVRVUkUgPSBGRUFUVVJFX01PRElGSUVSX19FU1RSVUNUVVJBTF9GRUFUVVJFOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkZlYXR1cmUgTmFtZTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFJBTkdFX01PRElGSUVSX19GRUFUVVJFX05BTUUgPSBGRUFUVVJFX01PRElGSUVSX19GRUFUVVJFX05BTUU7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RmVhdHVyZSBJZDwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFJBTkdFX01PRElGSUVSX19GRUFUVVJFX0lEID0gRkVBVFVSRV9NT0RJRklFUl9fRkVBVFVSRV9JRDsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5DdXJyZW50IFZhbHVlIFRleHQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBSQU5HRV9NT0RJRklFUl9fQ1VSUkVOVF9WQUxVRV9URVhUID0gRkVBVFVSRV9NT0RJRklFUl9fQ1VSUkVOVF9WQUxVRV9URVhUOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkNvbXBsZXRlPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgUkFOR0VfTU9ESUZJRVJfX0NPTVBMRVRFID0gRkVBVFVSRV9NT0RJRklFUl9fQ09NUExFVEU7CisKKwkvKioKKwkgKiBUaGUgbnVtYmVyIG9mIHN0cnVjdHVyYWwgZmVhdHVyZXMgb2YgdGhlICc8ZW0+UmFuZ2UgTW9kaWZpZXI8L2VtPicgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgUkFOR0VfTU9ESUZJRVJfRkVBVFVSRV9DT1VOVCA9IEZFQVRVUkVfTU9ESUZJRVJfRkVBVFVSRV9DT1VOVCArIDA7CisKKwkvKioKKwkgKiBUaGUgbWV0YSBvYmplY3QgaWQgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5pbXBsLkRvdWJsZVJhbmdlTW9kaWZpZXJJbXBsIDxlbT5Eb3VibGUgUmFuZ2UgTW9kaWZpZXI8L2VtPn0nIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuaW1wbC5Eb3VibGVSYW5nZU1vZGlmaWVySW1wbAorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLmltcGwuTW9kaWZpZXJQYWNrYWdlSW1wbCNnZXREb3VibGVSYW5nZU1vZGlmaWVyKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJaW50IERPVUJMRV9SQU5HRV9NT0RJRklFUiA9IDE7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VGFyZ2V0PC9iPjwvZW0+JyByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgRE9VQkxFX1JBTkdFX01PRElGSUVSX19UQVJHRVQgPSBSQU5HRV9NT0RJRklFUl9fVEFSR0VUOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkVTdHJ1Y3R1cmFsIEZlYXR1cmU8L2I+PC9lbT4nIHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBET1VCTEVfUkFOR0VfTU9ESUZJRVJfX0VTVFJVQ1RVUkFMX0ZFQVRVUkUgPSBSQU5HRV9NT0RJRklFUl9fRVNUUlVDVFVSQUxfRkVBVFVSRTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5GZWF0dXJlIE5hbWU8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBET1VCTEVfUkFOR0VfTU9ESUZJRVJfX0ZFQVRVUkVfTkFNRSA9IFJBTkdFX01PRElGSUVSX19GRUFUVVJFX05BTUU7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RmVhdHVyZSBJZDwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IERPVUJMRV9SQU5HRV9NT0RJRklFUl9fRkVBVFVSRV9JRCA9IFJBTkdFX01PRElGSUVSX19GRUFUVVJFX0lEOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkN1cnJlbnQgVmFsdWUgVGV4dDwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IERPVUJMRV9SQU5HRV9NT0RJRklFUl9fQ1VSUkVOVF9WQUxVRV9URVhUID0gUkFOR0VfTU9ESUZJRVJfX0NVUlJFTlRfVkFMVUVfVEVYVDsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5Db21wbGV0ZTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IERPVUJMRV9SQU5HRV9NT0RJRklFUl9fQ09NUExFVEUgPSBSQU5HRV9NT0RJRklFUl9fQ09NUExFVEU7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+U3RhcnQgVmFsdWU8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBET1VCTEVfUkFOR0VfTU9ESUZJRVJfX1NUQVJUX1ZBTFVFID0gUkFOR0VfTU9ESUZJRVJfRkVBVFVSRV9DT1VOVCArIDA7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RW5kIFZhbHVlPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgRE9VQkxFX1JBTkdFX01PRElGSUVSX19FTkRfVkFMVUUgPSBSQU5HRV9NT0RJRklFUl9GRUFUVVJFX0NPVU5UICsgMTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5JbmNyZW1lbnQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBET1VCTEVfUkFOR0VfTU9ESUZJRVJfX0lOQ1JFTUVOVCA9IFJBTkdFX01PRElGSUVSX0ZFQVRVUkVfQ09VTlQgKyAyOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPk5leHQgVmFsdWU8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBET1VCTEVfUkFOR0VfTU9ESUZJRVJfX05FWFRfVkFMVUUgPSBSQU5HRV9NT0RJRklFUl9GRUFUVVJFX0NPVU5UICsgMzsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5PcmlnaW5hbCBWYWx1ZTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IERPVUJMRV9SQU5HRV9NT0RJRklFUl9fT1JJR0lOQUxfVkFMVUUgPSBSQU5HRV9NT0RJRklFUl9GRUFUVVJFX0NPVU5UICsgNDsKKworCS8qKgorCSAqIFRoZSBudW1iZXIgb2Ygc3RydWN0dXJhbCBmZWF0dXJlcyBvZiB0aGUgJzxlbT5Eb3VibGUgUmFuZ2UgTW9kaWZpZXI8L2VtPicgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgRE9VQkxFX1JBTkdFX01PRElGSUVSX0ZFQVRVUkVfQ09VTlQgPSBSQU5HRV9NT0RJRklFUl9GRUFUVVJFX0NPVU5UICsgNTsKKworCS8qKgorCSAqIFRoZSBtZXRhIG9iamVjdCBpZCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLmltcGwuU2VxdWVuY2VNb2RpZmllckltcGwgPGVtPlNlcXVlbmNlIE1vZGlmaWVyPC9lbT59JyBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLmltcGwuU2VxdWVuY2VNb2RpZmllckltcGwKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5pbXBsLk1vZGlmaWVyUGFja2FnZUltcGwjZ2V0U2VxdWVuY2VNb2RpZmllcigpCisJICogQGdlbmVyYXRlZAorCSAqLworCWludCBTRVFVRU5DRV9NT0RJRklFUiA9IDE2OworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlRhcmdldDwvYj48L2VtPicgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNFUVVFTkNFX01PRElGSUVSX19UQVJHRVQgPSBGRUFUVVJFX01PRElGSUVSX19UQVJHRVQ7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RVN0cnVjdHVyYWwgRmVhdHVyZTwvYj48L2VtPicgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNFUVVFTkNFX01PRElGSUVSX19FU1RSVUNUVVJBTF9GRUFUVVJFID0gRkVBVFVSRV9NT0RJRklFUl9fRVNUUlVDVFVSQUxfRkVBVFVSRTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5GZWF0dXJlIE5hbWU8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTRVFVRU5DRV9NT0RJRklFUl9fRkVBVFVSRV9OQU1FID0gRkVBVFVSRV9NT0RJRklFUl9fRkVBVFVSRV9OQU1FOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkZlYXR1cmUgSWQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTRVFVRU5DRV9NT0RJRklFUl9fRkVBVFVSRV9JRCA9IEZFQVRVUkVfTU9ESUZJRVJfX0ZFQVRVUkVfSUQ7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+Q3VycmVudCBWYWx1ZSBUZXh0PC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU0VRVUVOQ0VfTU9ESUZJRVJfX0NVUlJFTlRfVkFMVUVfVEVYVCA9IEZFQVRVUkVfTU9ESUZJRVJfX0NVUlJFTlRfVkFMVUVfVEVYVDsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5Db21wbGV0ZTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNFUVVFTkNFX01PRElGSUVSX19DT01QTEVURSA9IEZFQVRVUkVfTU9ESUZJRVJfX0NPTVBMRVRFOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlNlcXVlbmNlIFNpemU8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTRVFVRU5DRV9NT0RJRklFUl9fU0VRVUVOQ0VfU0laRSA9IEZFQVRVUkVfTU9ESUZJRVJfRkVBVFVSRV9DT1VOVCArIDA7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+Q3VycmVudCBTZXF1ZW5jZSBJbmRleDwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNFUVVFTkNFX01PRElGSUVSX19DVVJSRU5UX1NFUVVFTkNFX0lOREVYID0gRkVBVFVSRV9NT0RJRklFUl9GRUFUVVJFX0NPVU5UICsgMTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5OZXh0IFZhbHVlPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU0VRVUVOQ0VfTU9ESUZJRVJfX05FWFRfVkFMVUUgPSBGRUFUVVJFX01PRElGSUVSX0ZFQVRVUkVfQ09VTlQgKyAyOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPk9yaWdpbmFsIFZhbHVlPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU0VRVUVOQ0VfTU9ESUZJRVJfX09SSUdJTkFMX1ZBTFVFID0gRkVBVFVSRV9NT0RJRklFUl9GRUFUVVJFX0NPVU5UICsgMzsKKworCS8qKgorCSAqIFRoZSBudW1iZXIgb2Ygc3RydWN0dXJhbCBmZWF0dXJlcyBvZiB0aGUgJzxlbT5TZXF1ZW5jZSBNb2RpZmllcjwvZW0+JyBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTRVFVRU5DRV9NT0RJRklFUl9GRUFUVVJFX0NPVU5UID0gRkVBVFVSRV9NT0RJRklFUl9GRUFUVVJFX0NPVU5UICsgNDsKKworCS8qKgorCSAqIFRoZSBtZXRhIG9iamVjdCBpZCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLmltcGwuRG91YmxlU2VxdWVuY2VNb2RpZmllckltcGwgPGVtPkRvdWJsZSBTZXF1ZW5jZSBNb2RpZmllcjwvZW0+fScgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5pbXBsLkRvdWJsZVNlcXVlbmNlTW9kaWZpZXJJbXBsCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuaW1wbC5Nb2RpZmllclBhY2thZ2VJbXBsI2dldERvdWJsZVNlcXVlbmNlTW9kaWZpZXIoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlpbnQgRE9VQkxFX1NFUVVFTkNFX01PRElGSUVSID0gMjsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5UYXJnZXQ8L2I+PC9lbT4nIHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBET1VCTEVfU0VRVUVOQ0VfTU9ESUZJRVJfX1RBUkdFVCA9IFNFUVVFTkNFX01PRElGSUVSX19UQVJHRVQ7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RVN0cnVjdHVyYWwgRmVhdHVyZTwvYj48L2VtPicgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IERPVUJMRV9TRVFVRU5DRV9NT0RJRklFUl9fRVNUUlVDVFVSQUxfRkVBVFVSRSA9IFNFUVVFTkNFX01PRElGSUVSX19FU1RSVUNUVVJBTF9GRUFUVVJFOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkZlYXR1cmUgTmFtZTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IERPVUJMRV9TRVFVRU5DRV9NT0RJRklFUl9fRkVBVFVSRV9OQU1FID0gU0VRVUVOQ0VfTU9ESUZJRVJfX0ZFQVRVUkVfTkFNRTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5GZWF0dXJlIElkPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgRE9VQkxFX1NFUVVFTkNFX01PRElGSUVSX19GRUFUVVJFX0lEID0gU0VRVUVOQ0VfTU9ESUZJRVJfX0ZFQVRVUkVfSUQ7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+Q3VycmVudCBWYWx1ZSBUZXh0PC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgRE9VQkxFX1NFUVVFTkNFX01PRElGSUVSX19DVVJSRU5UX1ZBTFVFX1RFWFQgPSBTRVFVRU5DRV9NT0RJRklFUl9fQ1VSUkVOVF9WQUxVRV9URVhUOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkNvbXBsZXRlPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgRE9VQkxFX1NFUVVFTkNFX01PRElGSUVSX19DT01QTEVURSA9IFNFUVVFTkNFX01PRElGSUVSX19DT01QTEVURTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5TZXF1ZW5jZSBTaXplPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgRE9VQkxFX1NFUVVFTkNFX01PRElGSUVSX19TRVFVRU5DRV9TSVpFID0gU0VRVUVOQ0VfTU9ESUZJRVJfX1NFUVVFTkNFX1NJWkU7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+Q3VycmVudCBTZXF1ZW5jZSBJbmRleDwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IERPVUJMRV9TRVFVRU5DRV9NT0RJRklFUl9fQ1VSUkVOVF9TRVFVRU5DRV9JTkRFWCA9IFNFUVVFTkNFX01PRElGSUVSX19DVVJSRU5UX1NFUVVFTkNFX0lOREVYOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPk5leHQgVmFsdWU8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBET1VCTEVfU0VRVUVOQ0VfTU9ESUZJRVJfX05FWFRfVkFMVUUgPSBTRVFVRU5DRV9NT0RJRklFUl9fTkVYVF9WQUxVRTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5PcmlnaW5hbCBWYWx1ZTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IERPVUJMRV9TRVFVRU5DRV9NT0RJRklFUl9fT1JJR0lOQUxfVkFMVUUgPSBTRVFVRU5DRV9NT0RJRklFUl9fT1JJR0lOQUxfVkFMVUU7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+U2VxdWVuY2U8L2I+PC9lbT4nIGF0dHJpYnV0ZSBsaXN0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IERPVUJMRV9TRVFVRU5DRV9NT0RJRklFUl9fU0VRVUVOQ0UgPSBTRVFVRU5DRV9NT0RJRklFUl9GRUFUVVJFX0NPVU5UICsgMDsKKworCS8qKgorCSAqIFRoZSBudW1iZXIgb2Ygc3RydWN0dXJhbCBmZWF0dXJlcyBvZiB0aGUgJzxlbT5Eb3VibGUgU2VxdWVuY2UgTW9kaWZpZXI8L2VtPicgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgRE9VQkxFX1NFUVVFTkNFX01PRElGSUVSX0ZFQVRVUkVfQ09VTlQgPSBTRVFVRU5DRV9NT0RJRklFUl9GRUFUVVJFX0NPVU5UICsgMTsKKworCS8qKgorCSAqIFRoZSBtZXRhIG9iamVjdCBpZCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLmltcGwuSW50ZWdlck5PUE1vZGlmaWVySW1wbCA8ZW0+SW50ZWdlciBOT1AgTW9kaWZpZXI8L2VtPn0nIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuaW1wbC5JbnRlZ2VyTk9QTW9kaWZpZXJJbXBsCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuaW1wbC5Nb2RpZmllclBhY2thZ2VJbXBsI2dldEludGVnZXJOT1BNb2RpZmllcigpCisJICogQGdlbmVyYXRlZAorCSAqLworCWludCBJTlRFR0VSX05PUF9NT0RJRklFUiA9IDQ7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VGFyZ2V0PC9iPjwvZW0+JyByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgSU5URUdFUl9OT1BfTU9ESUZJRVJfX1RBUkdFVCA9IE5PUF9NT0RJRklFUl9fVEFSR0VUOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkVTdHJ1Y3R1cmFsIEZlYXR1cmU8L2I+PC9lbT4nIHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBJTlRFR0VSX05PUF9NT0RJRklFUl9fRVNUUlVDVFVSQUxfRkVBVFVSRSA9IE5PUF9NT0RJRklFUl9fRVNUUlVDVFVSQUxfRkVBVFVSRTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5GZWF0dXJlIE5hbWU8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBJTlRFR0VSX05PUF9NT0RJRklFUl9fRkVBVFVSRV9OQU1FID0gTk9QX01PRElGSUVSX19GRUFUVVJFX05BTUU7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RmVhdHVyZSBJZDwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IElOVEVHRVJfTk9QX01PRElGSUVSX19GRUFUVVJFX0lEID0gTk9QX01PRElGSUVSX19GRUFUVVJFX0lEOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkN1cnJlbnQgVmFsdWUgVGV4dDwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IElOVEVHRVJfTk9QX01PRElGSUVSX19DVVJSRU5UX1ZBTFVFX1RFWFQgPSBOT1BfTU9ESUZJRVJfX0NVUlJFTlRfVkFMVUVfVEVYVDsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5Db21wbGV0ZTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IElOVEVHRVJfTk9QX01PRElGSUVSX19DT01QTEVURSA9IE5PUF9NT0RJRklFUl9fQ09NUExFVEU7CisKKwkvKioKKwkgKiBUaGUgbnVtYmVyIG9mIHN0cnVjdHVyYWwgZmVhdHVyZXMgb2YgdGhlICc8ZW0+SW50ZWdlciBOT1AgTW9kaWZpZXI8L2VtPicgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgSU5URUdFUl9OT1BfTU9ESUZJRVJfRkVBVFVSRV9DT1VOVCA9IE5PUF9NT0RJRklFUl9GRUFUVVJFX0NPVU5UICsgMDsKKworCS8qKgorCSAqIFRoZSBtZXRhIG9iamVjdCBpZCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLmltcGwuSW50ZWdlclJhbmdlTW9kaWZpZXJJbXBsIDxlbT5JbnRlZ2VyIFJhbmdlIE1vZGlmaWVyPC9lbT59JyBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLmltcGwuSW50ZWdlclJhbmdlTW9kaWZpZXJJbXBsCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuaW1wbC5Nb2RpZmllclBhY2thZ2VJbXBsI2dldEludGVnZXJSYW5nZU1vZGlmaWVyKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJaW50IElOVEVHRVJfUkFOR0VfTU9ESUZJRVIgPSA1OworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlRhcmdldDwvYj48L2VtPicgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IElOVEVHRVJfUkFOR0VfTU9ESUZJRVJfX1RBUkdFVCA9IFJBTkdFX01PRElGSUVSX19UQVJHRVQ7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RVN0cnVjdHVyYWwgRmVhdHVyZTwvYj48L2VtPicgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IElOVEVHRVJfUkFOR0VfTU9ESUZJRVJfX0VTVFJVQ1RVUkFMX0ZFQVRVUkUgPSBSQU5HRV9NT0RJRklFUl9fRVNUUlVDVFVSQUxfRkVBVFVSRTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5GZWF0dXJlIE5hbWU8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBJTlRFR0VSX1JBTkdFX01PRElGSUVSX19GRUFUVVJFX05BTUUgPSBSQU5HRV9NT0RJRklFUl9fRkVBVFVSRV9OQU1FOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkZlYXR1cmUgSWQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBJTlRFR0VSX1JBTkdFX01PRElGSUVSX19GRUFUVVJFX0lEID0gUkFOR0VfTU9ESUZJRVJfX0ZFQVRVUkVfSUQ7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+Q3VycmVudCBWYWx1ZSBUZXh0PC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgSU5URUdFUl9SQU5HRV9NT0RJRklFUl9fQ1VSUkVOVF9WQUxVRV9URVhUID0gUkFOR0VfTU9ESUZJRVJfX0NVUlJFTlRfVkFMVUVfVEVYVDsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5Db21wbGV0ZTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IElOVEVHRVJfUkFOR0VfTU9ESUZJRVJfX0NPTVBMRVRFID0gUkFOR0VfTU9ESUZJRVJfX0NPTVBMRVRFOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlN0YXJ0IFZhbHVlPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgSU5URUdFUl9SQU5HRV9NT0RJRklFUl9fU1RBUlRfVkFMVUUgPSBSQU5HRV9NT0RJRklFUl9GRUFUVVJFX0NPVU5UICsgMDsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5FbmQgVmFsdWU8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBJTlRFR0VSX1JBTkdFX01PRElGSUVSX19FTkRfVkFMVUUgPSBSQU5HRV9NT0RJRklFUl9GRUFUVVJFX0NPVU5UICsgMTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5JbmNyZW1lbnQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBJTlRFR0VSX1JBTkdFX01PRElGSUVSX19JTkNSRU1FTlQgPSBSQU5HRV9NT0RJRklFUl9GRUFUVVJFX0NPVU5UICsgMjsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5OZXh0IFZhbHVlPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgSU5URUdFUl9SQU5HRV9NT0RJRklFUl9fTkVYVF9WQUxVRSA9IFJBTkdFX01PRElGSUVSX0ZFQVRVUkVfQ09VTlQgKyAzOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPk9yaWdpbmFsIFZhbHVlPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgSU5URUdFUl9SQU5HRV9NT0RJRklFUl9fT1JJR0lOQUxfVkFMVUUgPSBSQU5HRV9NT0RJRklFUl9GRUFUVVJFX0NPVU5UICsgNDsKKworCS8qKgorCSAqIFRoZSBudW1iZXIgb2Ygc3RydWN0dXJhbCBmZWF0dXJlcyBvZiB0aGUgJzxlbT5JbnRlZ2VyIFJhbmdlIE1vZGlmaWVyPC9lbT4nIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IElOVEVHRVJfUkFOR0VfTU9ESUZJRVJfRkVBVFVSRV9DT1VOVCA9IFJBTkdFX01PRElGSUVSX0ZFQVRVUkVfQ09VTlQgKyA1OworCisJLyoqCisJICogVGhlIG1ldGEgb2JqZWN0IGlkIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuaW1wbC5JbnRlZ2VyU2VxdWVuY2VNb2RpZmllckltcGwgPGVtPkludGVnZXIgU2VxdWVuY2UgTW9kaWZpZXI8L2VtPn0nIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuaW1wbC5JbnRlZ2VyU2VxdWVuY2VNb2RpZmllckltcGwKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5pbXBsLk1vZGlmaWVyUGFja2FnZUltcGwjZ2V0SW50ZWdlclNlcXVlbmNlTW9kaWZpZXIoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlpbnQgSU5URUdFUl9TRVFVRU5DRV9NT0RJRklFUiA9IDY7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VGFyZ2V0PC9iPjwvZW0+JyByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgSU5URUdFUl9TRVFVRU5DRV9NT0RJRklFUl9fVEFSR0VUID0gU0VRVUVOQ0VfTU9ESUZJRVJfX1RBUkdFVDsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5FU3RydWN0dXJhbCBGZWF0dXJlPC9iPjwvZW0+JyByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgSU5URUdFUl9TRVFVRU5DRV9NT0RJRklFUl9fRVNUUlVDVFVSQUxfRkVBVFVSRSA9IFNFUVVFTkNFX01PRElGSUVSX19FU1RSVUNUVVJBTF9GRUFUVVJFOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkZlYXR1cmUgTmFtZTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IElOVEVHRVJfU0VRVUVOQ0VfTU9ESUZJRVJfX0ZFQVRVUkVfTkFNRSA9IFNFUVVFTkNFX01PRElGSUVSX19GRUFUVVJFX05BTUU7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RmVhdHVyZSBJZDwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IElOVEVHRVJfU0VRVUVOQ0VfTU9ESUZJRVJfX0ZFQVRVUkVfSUQgPSBTRVFVRU5DRV9NT0RJRklFUl9fRkVBVFVSRV9JRDsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5DdXJyZW50IFZhbHVlIFRleHQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBJTlRFR0VSX1NFUVVFTkNFX01PRElGSUVSX19DVVJSRU5UX1ZBTFVFX1RFWFQgPSBTRVFVRU5DRV9NT0RJRklFUl9fQ1VSUkVOVF9WQUxVRV9URVhUOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkNvbXBsZXRlPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgSU5URUdFUl9TRVFVRU5DRV9NT0RJRklFUl9fQ09NUExFVEUgPSBTRVFVRU5DRV9NT0RJRklFUl9fQ09NUExFVEU7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+U2VxdWVuY2UgU2l6ZTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IElOVEVHRVJfU0VRVUVOQ0VfTU9ESUZJRVJfX1NFUVVFTkNFX1NJWkUgPSBTRVFVRU5DRV9NT0RJRklFUl9fU0VRVUVOQ0VfU0laRTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5DdXJyZW50IFNlcXVlbmNlIEluZGV4PC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgSU5URUdFUl9TRVFVRU5DRV9NT0RJRklFUl9fQ1VSUkVOVF9TRVFVRU5DRV9JTkRFWCA9IFNFUVVFTkNFX01PRElGSUVSX19DVVJSRU5UX1NFUVVFTkNFX0lOREVYOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPk5leHQgVmFsdWU8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBJTlRFR0VSX1NFUVVFTkNFX01PRElGSUVSX19ORVhUX1ZBTFVFID0gU0VRVUVOQ0VfTU9ESUZJRVJfX05FWFRfVkFMVUU7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+T3JpZ2luYWwgVmFsdWU8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBJTlRFR0VSX1NFUVVFTkNFX01PRElGSUVSX19PUklHSU5BTF9WQUxVRSA9IFNFUVVFTkNFX01PRElGSUVSX19PUklHSU5BTF9WQUxVRTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5TZXF1ZW5jZTwvYj48L2VtPicgYXR0cmlidXRlIGxpc3QuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgSU5URUdFUl9TRVFVRU5DRV9NT0RJRklFUl9fU0VRVUVOQ0UgPSBTRVFVRU5DRV9NT0RJRklFUl9GRUFUVVJFX0NPVU5UICsgMDsKKworCS8qKgorCSAqIFRoZSBudW1iZXIgb2Ygc3RydWN0dXJhbCBmZWF0dXJlcyBvZiB0aGUgJzxlbT5JbnRlZ2VyIFNlcXVlbmNlIE1vZGlmaWVyPC9lbT4nIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IElOVEVHRVJfU0VRVUVOQ0VfTU9ESUZJRVJfRkVBVFVSRV9DT1VOVCA9IFNFUVVFTkNFX01PRElGSUVSX0ZFQVRVUkVfQ09VTlQgKyAxOworCisJLyoqCisJICogVGhlIG1ldGEgb2JqZWN0IGlkIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuaW1wbC5Mb25nTk9QTW9kaWZpZXJJbXBsIDxlbT5Mb25nIE5PUCBNb2RpZmllcjwvZW0+fScgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5pbXBsLkxvbmdOT1BNb2RpZmllckltcGwKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5pbXBsLk1vZGlmaWVyUGFja2FnZUltcGwjZ2V0TG9uZ05PUE1vZGlmaWVyKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJaW50IExPTkdfTk9QX01PRElGSUVSID0gNzsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5UYXJnZXQ8L2I+PC9lbT4nIHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBMT05HX05PUF9NT0RJRklFUl9fVEFSR0VUID0gTk9QX01PRElGSUVSX19UQVJHRVQ7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RVN0cnVjdHVyYWwgRmVhdHVyZTwvYj48L2VtPicgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IExPTkdfTk9QX01PRElGSUVSX19FU1RSVUNUVVJBTF9GRUFUVVJFID0gTk9QX01PRElGSUVSX19FU1RSVUNUVVJBTF9GRUFUVVJFOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkZlYXR1cmUgTmFtZTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IExPTkdfTk9QX01PRElGSUVSX19GRUFUVVJFX05BTUUgPSBOT1BfTU9ESUZJRVJfX0ZFQVRVUkVfTkFNRTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5GZWF0dXJlIElkPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgTE9OR19OT1BfTU9ESUZJRVJfX0ZFQVRVUkVfSUQgPSBOT1BfTU9ESUZJRVJfX0ZFQVRVUkVfSUQ7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+Q3VycmVudCBWYWx1ZSBUZXh0PC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgTE9OR19OT1BfTU9ESUZJRVJfX0NVUlJFTlRfVkFMVUVfVEVYVCA9IE5PUF9NT0RJRklFUl9fQ1VSUkVOVF9WQUxVRV9URVhUOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkNvbXBsZXRlPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgTE9OR19OT1BfTU9ESUZJRVJfX0NPTVBMRVRFID0gTk9QX01PRElGSUVSX19DT01QTEVURTsKKworCS8qKgorCSAqIFRoZSBudW1iZXIgb2Ygc3RydWN0dXJhbCBmZWF0dXJlcyBvZiB0aGUgJzxlbT5Mb25nIE5PUCBNb2RpZmllcjwvZW0+JyBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBMT05HX05PUF9NT0RJRklFUl9GRUFUVVJFX0NPVU5UID0gTk9QX01PRElGSUVSX0ZFQVRVUkVfQ09VTlQgKyAwOworCisJLyoqCisJICogVGhlIG1ldGEgb2JqZWN0IGlkIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuaW1wbC5Mb25nUmFuZ2VNb2RpZmllckltcGwgPGVtPkxvbmcgUmFuZ2UgTW9kaWZpZXI8L2VtPn0nIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuaW1wbC5Mb25nUmFuZ2VNb2RpZmllckltcGwKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5pbXBsLk1vZGlmaWVyUGFja2FnZUltcGwjZ2V0TG9uZ1JhbmdlTW9kaWZpZXIoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlpbnQgTE9OR19SQU5HRV9NT0RJRklFUiA9IDg7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VGFyZ2V0PC9iPjwvZW0+JyByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgTE9OR19SQU5HRV9NT0RJRklFUl9fVEFSR0VUID0gUkFOR0VfTU9ESUZJRVJfX1RBUkdFVDsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5FU3RydWN0dXJhbCBGZWF0dXJlPC9iPjwvZW0+JyByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgTE9OR19SQU5HRV9NT0RJRklFUl9fRVNUUlVDVFVSQUxfRkVBVFVSRSA9IFJBTkdFX01PRElGSUVSX19FU1RSVUNUVVJBTF9GRUFUVVJFOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkZlYXR1cmUgTmFtZTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IExPTkdfUkFOR0VfTU9ESUZJRVJfX0ZFQVRVUkVfTkFNRSA9IFJBTkdFX01PRElGSUVSX19GRUFUVVJFX05BTUU7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RmVhdHVyZSBJZDwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IExPTkdfUkFOR0VfTU9ESUZJRVJfX0ZFQVRVUkVfSUQgPSBSQU5HRV9NT0RJRklFUl9fRkVBVFVSRV9JRDsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5DdXJyZW50IFZhbHVlIFRleHQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBMT05HX1JBTkdFX01PRElGSUVSX19DVVJSRU5UX1ZBTFVFX1RFWFQgPSBSQU5HRV9NT0RJRklFUl9fQ1VSUkVOVF9WQUxVRV9URVhUOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkNvbXBsZXRlPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgTE9OR19SQU5HRV9NT0RJRklFUl9fQ09NUExFVEUgPSBSQU5HRV9NT0RJRklFUl9fQ09NUExFVEU7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+U3RhcnQgVmFsdWU8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBMT05HX1JBTkdFX01PRElGSUVSX19TVEFSVF9WQUxVRSA9IFJBTkdFX01PRElGSUVSX0ZFQVRVUkVfQ09VTlQgKyAwOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkVuZCBWYWx1ZTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IExPTkdfUkFOR0VfTU9ESUZJRVJfX0VORF9WQUxVRSA9IFJBTkdFX01PRElGSUVSX0ZFQVRVUkVfQ09VTlQgKyAxOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkluY3JlbWVudDwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IExPTkdfUkFOR0VfTU9ESUZJRVJfX0lOQ1JFTUVOVCA9IFJBTkdFX01PRElGSUVSX0ZFQVRVUkVfQ09VTlQgKyAyOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPk5leHQgVmFsdWU8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBMT05HX1JBTkdFX01PRElGSUVSX19ORVhUX1ZBTFVFID0gUkFOR0VfTU9ESUZJRVJfRkVBVFVSRV9DT1VOVCArIDM7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+T3JpZ2luYWwgVmFsdWU8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBMT05HX1JBTkdFX01PRElGSUVSX19PUklHSU5BTF9WQUxVRSA9IFJBTkdFX01PRElGSUVSX0ZFQVRVUkVfQ09VTlQgKyA0OworCisJLyoqCisJICogVGhlIG51bWJlciBvZiBzdHJ1Y3R1cmFsIGZlYXR1cmVzIG9mIHRoZSAnPGVtPkxvbmcgUmFuZ2UgTW9kaWZpZXI8L2VtPicgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgTE9OR19SQU5HRV9NT0RJRklFUl9GRUFUVVJFX0NPVU5UID0gUkFOR0VfTU9ESUZJRVJfRkVBVFVSRV9DT1VOVCArIDU7CisKKwkvKioKKwkgKiBUaGUgbWV0YSBvYmplY3QgaWQgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5pbXBsLkxvbmdTZXF1ZW5jZU1vZGlmaWVySW1wbCA8ZW0+TG9uZyBTZXF1ZW5jZSBNb2RpZmllcjwvZW0+fScgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5pbXBsLkxvbmdTZXF1ZW5jZU1vZGlmaWVySW1wbAorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLmltcGwuTW9kaWZpZXJQYWNrYWdlSW1wbCNnZXRMb25nU2VxdWVuY2VNb2RpZmllcigpCisJICogQGdlbmVyYXRlZAorCSAqLworCWludCBMT05HX1NFUVVFTkNFX01PRElGSUVSID0gOTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5UYXJnZXQ8L2I+PC9lbT4nIHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBMT05HX1NFUVVFTkNFX01PRElGSUVSX19UQVJHRVQgPSBTRVFVRU5DRV9NT0RJRklFUl9fVEFSR0VUOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkVTdHJ1Y3R1cmFsIEZlYXR1cmU8L2I+PC9lbT4nIHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBMT05HX1NFUVVFTkNFX01PRElGSUVSX19FU1RSVUNUVVJBTF9GRUFUVVJFID0gU0VRVUVOQ0VfTU9ESUZJRVJfX0VTVFJVQ1RVUkFMX0ZFQVRVUkU7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RmVhdHVyZSBOYW1lPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgTE9OR19TRVFVRU5DRV9NT0RJRklFUl9fRkVBVFVSRV9OQU1FID0gU0VRVUVOQ0VfTU9ESUZJRVJfX0ZFQVRVUkVfTkFNRTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5GZWF0dXJlIElkPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgTE9OR19TRVFVRU5DRV9NT0RJRklFUl9fRkVBVFVSRV9JRCA9IFNFUVVFTkNFX01PRElGSUVSX19GRUFUVVJFX0lEOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkN1cnJlbnQgVmFsdWUgVGV4dDwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IExPTkdfU0VRVUVOQ0VfTU9ESUZJRVJfX0NVUlJFTlRfVkFMVUVfVEVYVCA9IFNFUVVFTkNFX01PRElGSUVSX19DVVJSRU5UX1ZBTFVFX1RFWFQ7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+Q29tcGxldGU8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBMT05HX1NFUVVFTkNFX01PRElGSUVSX19DT01QTEVURSA9IFNFUVVFTkNFX01PRElGSUVSX19DT01QTEVURTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5TZXF1ZW5jZSBTaXplPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgTE9OR19TRVFVRU5DRV9NT0RJRklFUl9fU0VRVUVOQ0VfU0laRSA9IFNFUVVFTkNFX01PRElGSUVSX19TRVFVRU5DRV9TSVpFOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkN1cnJlbnQgU2VxdWVuY2UgSW5kZXg8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBMT05HX1NFUVVFTkNFX01PRElGSUVSX19DVVJSRU5UX1NFUVVFTkNFX0lOREVYID0gU0VRVUVOQ0VfTU9ESUZJRVJfX0NVUlJFTlRfU0VRVUVOQ0VfSU5ERVg7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+TmV4dCBWYWx1ZTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IExPTkdfU0VRVUVOQ0VfTU9ESUZJRVJfX05FWFRfVkFMVUUgPSBTRVFVRU5DRV9NT0RJRklFUl9fTkVYVF9WQUxVRTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5PcmlnaW5hbCBWYWx1ZTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IExPTkdfU0VRVUVOQ0VfTU9ESUZJRVJfX09SSUdJTkFMX1ZBTFVFID0gU0VRVUVOQ0VfTU9ESUZJRVJfX09SSUdJTkFMX1ZBTFVFOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlNlcXVlbmNlPC9iPjwvZW0+JyBhdHRyaWJ1dGUgbGlzdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBMT05HX1NFUVVFTkNFX01PRElGSUVSX19TRVFVRU5DRSA9IFNFUVVFTkNFX01PRElGSUVSX0ZFQVRVUkVfQ09VTlQgKyAwOworCisJLyoqCisJICogVGhlIG51bWJlciBvZiBzdHJ1Y3R1cmFsIGZlYXR1cmVzIG9mIHRoZSAnPGVtPkxvbmcgU2VxdWVuY2UgTW9kaWZpZXI8L2VtPicgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgTE9OR19TRVFVRU5DRV9NT0RJRklFUl9GRUFUVVJFX0NPVU5UID0gU0VRVUVOQ0VfTU9ESUZJRVJfRkVBVFVSRV9DT1VOVCArIDE7CisKKwkvKioKKwkgKiBUaGUgbWV0YSBvYmplY3QgaWQgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5pbXBsLk1vZGlmaWVySW1wbCA8ZW0+TW9kaWZpZXI8L2VtPn0nIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuaW1wbC5Nb2RpZmllckltcGwKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5pbXBsLk1vZGlmaWVyUGFja2FnZUltcGwjZ2V0TW9kaWZpZXIoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlpbnQgTU9ESUZJRVIgPSAxMDsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5VUkk8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBNT0RJRklFUl9fVVJJID0gTW9kZWxQYWNrYWdlLkRFQ09SQVRPUl9fVVJJOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlR5cGUgVVJJPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgTU9ESUZJRVJfX1RZUEVfVVJJID0gTW9kZWxQYWNrYWdlLkRFQ09SQVRPUl9fVFlQRV9VUkk7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RHVibGluIENvcmU8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBNT0RJRklFUl9fRFVCTElOX0NPUkUgPSBNb2RlbFBhY2thZ2UuREVDT1JBVE9SX19EVUJMSU5fQ09SRTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5MYWJlbHMgVG8gVXBkYXRlPC9iPjwvZW0+JyByZWZlcmVuY2UgbGlzdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBNT0RJRklFUl9fTEFCRUxTX1RPX1VQREFURSA9IE1vZGVsUGFja2FnZS5ERUNPUkFUT1JfX0xBQkVMU19UT19VUERBVEU7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+R3JhcGg8L2I+PC9lbT4nIGNvbnRhaW5lciByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgTU9ESUZJRVJfX0dSQVBIID0gTW9kZWxQYWNrYWdlLkRFQ09SQVRPUl9fR1JBUEg7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RW5hYmxlZDwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IE1PRElGSUVSX19FTkFCTEVEID0gTW9kZWxQYWNrYWdlLkRFQ09SQVRPUl9fRU5BQkxFRDsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5HcmFwaCBEZWNvcmF0ZWQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBNT0RJRklFUl9fR1JBUEhfREVDT1JBVEVEID0gTW9kZWxQYWNrYWdlLkRFQ09SQVRPUl9fR1JBUEhfREVDT1JBVEVEOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlByb2dyZXNzPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgTU9ESUZJRVJfX1BST0dSRVNTID0gTW9kZWxQYWNrYWdlLkRFQ09SQVRPUl9fUFJPR1JFU1M7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VGFyZ2V0IFVSSTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IE1PRElGSUVSX19UQVJHRVRfVVJJID0gTW9kZWxQYWNrYWdlLkRFQ09SQVRPUl9GRUFUVVJFX0NPVU5UICsgMDsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5GZWF0dXJlIE1vZGlmaWVyczwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3QuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgTU9ESUZJRVJfX0ZFQVRVUkVfTU9ESUZJRVJTID0gTW9kZWxQYWNrYWdlLkRFQ09SQVRPUl9GRUFUVVJFX0NPVU5UICsgMTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5Db21wbGV0ZTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IE1PRElGSUVSX19DT01QTEVURSA9IE1vZGVsUGFja2FnZS5ERUNPUkFUT1JfRkVBVFVSRV9DT1VOVCArIDI7CisKKwkvKioKKwkgKiBUaGUgbnVtYmVyIG9mIHN0cnVjdHVyYWwgZmVhdHVyZXMgb2YgdGhlICc8ZW0+TW9kaWZpZXI8L2VtPicgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgTU9ESUZJRVJfRkVBVFVSRV9DT1VOVCA9IE1vZGVsUGFja2FnZS5ERUNPUkFUT1JfRkVBVFVSRV9DT1VOVCArIDM7CisKKwkvKioKKwkgKiBUaGUgbWV0YSBvYmplY3QgaWQgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5pbXBsLlNURU1UaW1lTk9QTW9kaWZpZXJJbXBsIDxlbT5TVEVNIFRpbWUgTk9QIE1vZGlmaWVyPC9lbT59JyBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLmltcGwuU1RFTVRpbWVOT1BNb2RpZmllckltcGwKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5pbXBsLk1vZGlmaWVyUGFja2FnZUltcGwjZ2V0U1RFTVRpbWVOT1BNb2RpZmllcigpCisJICogQGdlbmVyYXRlZAorCSAqLworCWludCBTVEVNX1RJTUVfTk9QX01PRElGSUVSID0gMTM7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VGFyZ2V0PC9iPjwvZW0+JyByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU1RFTV9USU1FX05PUF9NT0RJRklFUl9fVEFSR0VUID0gTk9QX01PRElGSUVSX19UQVJHRVQ7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RVN0cnVjdHVyYWwgRmVhdHVyZTwvYj48L2VtPicgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNURU1fVElNRV9OT1BfTU9ESUZJRVJfX0VTVFJVQ1RVUkFMX0ZFQVRVUkUgPSBOT1BfTU9ESUZJRVJfX0VTVFJVQ1RVUkFMX0ZFQVRVUkU7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RmVhdHVyZSBOYW1lPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU1RFTV9USU1FX05PUF9NT0RJRklFUl9fRkVBVFVSRV9OQU1FID0gTk9QX01PRElGSUVSX19GRUFUVVJFX05BTUU7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RmVhdHVyZSBJZDwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNURU1fVElNRV9OT1BfTU9ESUZJRVJfX0ZFQVRVUkVfSUQgPSBOT1BfTU9ESUZJRVJfX0ZFQVRVUkVfSUQ7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+Q3VycmVudCBWYWx1ZSBUZXh0PC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU1RFTV9USU1FX05PUF9NT0RJRklFUl9fQ1VSUkVOVF9WQUxVRV9URVhUID0gTk9QX01PRElGSUVSX19DVVJSRU5UX1ZBTFVFX1RFWFQ7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+Q29tcGxldGU8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTVEVNX1RJTUVfTk9QX01PRElGSUVSX19DT01QTEVURSA9IE5PUF9NT0RJRklFUl9fQ09NUExFVEU7CisKKwkvKioKKwkgKiBUaGUgbnVtYmVyIG9mIHN0cnVjdHVyYWwgZmVhdHVyZXMgb2YgdGhlICc8ZW0+U1RFTSBUaW1lIE5PUCBNb2RpZmllcjwvZW0+JyBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTVEVNX1RJTUVfTk9QX01PRElGSUVSX0ZFQVRVUkVfQ09VTlQgPSBOT1BfTU9ESUZJRVJfRkVBVFVSRV9DT1VOVCArIDA7CisKKwkvKioKKwkgKiBUaGUgbWV0YSBvYmplY3QgaWQgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5pbXBsLlNURU1UaW1lUmFuZ2VNb2RpZmllckltcGwgPGVtPlNURU0gVGltZSBSYW5nZSBNb2RpZmllcjwvZW0+fScgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5pbXBsLlNURU1UaW1lUmFuZ2VNb2RpZmllckltcGwKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5pbXBsLk1vZGlmaWVyUGFja2FnZUltcGwjZ2V0U1RFTVRpbWVSYW5nZU1vZGlmaWVyKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJaW50IFNURU1fVElNRV9SQU5HRV9NT0RJRklFUiA9IDE0OworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlRhcmdldDwvYj48L2VtPicgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNURU1fVElNRV9SQU5HRV9NT0RJRklFUl9fVEFSR0VUID0gUkFOR0VfTU9ESUZJRVJfX1RBUkdFVDsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5FU3RydWN0dXJhbCBGZWF0dXJlPC9iPjwvZW0+JyByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU1RFTV9USU1FX1JBTkdFX01PRElGSUVSX19FU1RSVUNUVVJBTF9GRUFUVVJFID0gUkFOR0VfTU9ESUZJRVJfX0VTVFJVQ1RVUkFMX0ZFQVRVUkU7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RmVhdHVyZSBOYW1lPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU1RFTV9USU1FX1JBTkdFX01PRElGSUVSX19GRUFUVVJFX05BTUUgPSBSQU5HRV9NT0RJRklFUl9fRkVBVFVSRV9OQU1FOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkZlYXR1cmUgSWQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTVEVNX1RJTUVfUkFOR0VfTU9ESUZJRVJfX0ZFQVRVUkVfSUQgPSBSQU5HRV9NT0RJRklFUl9fRkVBVFVSRV9JRDsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5DdXJyZW50IFZhbHVlIFRleHQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTVEVNX1RJTUVfUkFOR0VfTU9ESUZJRVJfX0NVUlJFTlRfVkFMVUVfVEVYVCA9IFJBTkdFX01PRElGSUVSX19DVVJSRU5UX1ZBTFVFX1RFWFQ7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+Q29tcGxldGU8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTVEVNX1RJTUVfUkFOR0VfTU9ESUZJRVJfX0NPTVBMRVRFID0gUkFOR0VfTU9ESUZJRVJfX0NPTVBMRVRFOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlN0YXJ0IFZhbHVlPC9iPjwvZW0+JyByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU1RFTV9USU1FX1JBTkdFX01PRElGSUVSX19TVEFSVF9WQUxVRSA9IFJBTkdFX01PRElGSUVSX0ZFQVRVUkVfQ09VTlQgKyAwOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkVuZCBWYWx1ZTwvYj48L2VtPicgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNURU1fVElNRV9SQU5HRV9NT0RJRklFUl9fRU5EX1ZBTFVFID0gUkFOR0VfTU9ESUZJRVJfRkVBVFVSRV9DT1VOVCArIDE7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+SW5jcmVtZW50PC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU1RFTV9USU1FX1JBTkdFX01PRElGSUVSX19JTkNSRU1FTlQgPSBSQU5HRV9NT0RJRklFUl9GRUFUVVJFX0NPVU5UICsgMjsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5OZXh0IFZhbHVlPC9iPjwvZW0+JyByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU1RFTV9USU1FX1JBTkdFX01PRElGSUVSX19ORVhUX1ZBTFVFID0gUkFOR0VfTU9ESUZJRVJfRkVBVFVSRV9DT1VOVCArIDM7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+T3JpZ2luYWwgVmFsdWU8L2I+PC9lbT4nIHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTVEVNX1RJTUVfUkFOR0VfTU9ESUZJRVJfX09SSUdJTkFMX1ZBTFVFID0gUkFOR0VfTU9ESUZJRVJfRkVBVFVSRV9DT1VOVCArIDQ7CisKKwkvKioKKwkgKiBUaGUgbnVtYmVyIG9mIHN0cnVjdHVyYWwgZmVhdHVyZXMgb2YgdGhlICc8ZW0+U1RFTSBUaW1lIFJhbmdlIE1vZGlmaWVyPC9lbT4nIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNURU1fVElNRV9SQU5HRV9NT0RJRklFUl9GRUFUVVJFX0NPVU5UID0gUkFOR0VfTU9ESUZJRVJfRkVBVFVSRV9DT1VOVCArIDU7CisKKwkvKioKKwkgKiBUaGUgbWV0YSBvYmplY3QgaWQgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5pbXBsLlNURU1UaW1lU2VxdWVuY2VNb2RpZmllckltcGwgPGVtPlNURU0gVGltZSBTZXF1ZW5jZSBNb2RpZmllcjwvZW0+fScgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5pbXBsLlNURU1UaW1lU2VxdWVuY2VNb2RpZmllckltcGwKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5pbXBsLk1vZGlmaWVyUGFja2FnZUltcGwjZ2V0U1RFTVRpbWVTZXF1ZW5jZU1vZGlmaWVyKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJaW50IFNURU1fVElNRV9TRVFVRU5DRV9NT0RJRklFUiA9IDE1OworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlRhcmdldDwvYj48L2VtPicgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNURU1fVElNRV9TRVFVRU5DRV9NT0RJRklFUl9fVEFSR0VUID0gU0VRVUVOQ0VfTU9ESUZJRVJfX1RBUkdFVDsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5FU3RydWN0dXJhbCBGZWF0dXJlPC9iPjwvZW0+JyByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU1RFTV9USU1FX1NFUVVFTkNFX01PRElGSUVSX19FU1RSVUNUVVJBTF9GRUFUVVJFID0gU0VRVUVOQ0VfTU9ESUZJRVJfX0VTVFJVQ1RVUkFMX0ZFQVRVUkU7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RmVhdHVyZSBOYW1lPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU1RFTV9USU1FX1NFUVVFTkNFX01PRElGSUVSX19GRUFUVVJFX05BTUUgPSBTRVFVRU5DRV9NT0RJRklFUl9fRkVBVFVSRV9OQU1FOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkZlYXR1cmUgSWQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTVEVNX1RJTUVfU0VRVUVOQ0VfTU9ESUZJRVJfX0ZFQVRVUkVfSUQgPSBTRVFVRU5DRV9NT0RJRklFUl9fRkVBVFVSRV9JRDsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5DdXJyZW50IFZhbHVlIFRleHQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTVEVNX1RJTUVfU0VRVUVOQ0VfTU9ESUZJRVJfX0NVUlJFTlRfVkFMVUVfVEVYVCA9IFNFUVVFTkNFX01PRElGSUVSX19DVVJSRU5UX1ZBTFVFX1RFWFQ7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+Q29tcGxldGU8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTVEVNX1RJTUVfU0VRVUVOQ0VfTU9ESUZJRVJfX0NPTVBMRVRFID0gU0VRVUVOQ0VfTU9ESUZJRVJfX0NPTVBMRVRFOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlNlcXVlbmNlIFNpemU8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTVEVNX1RJTUVfU0VRVUVOQ0VfTU9ESUZJRVJfX1NFUVVFTkNFX1NJWkUgPSBTRVFVRU5DRV9NT0RJRklFUl9fU0VRVUVOQ0VfU0laRTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5DdXJyZW50IFNlcXVlbmNlIEluZGV4PC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU1RFTV9USU1FX1NFUVVFTkNFX01PRElGSUVSX19DVVJSRU5UX1NFUVVFTkNFX0lOREVYID0gU0VRVUVOQ0VfTU9ESUZJRVJfX0NVUlJFTlRfU0VRVUVOQ0VfSU5ERVg7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+TmV4dCBWYWx1ZTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNURU1fVElNRV9TRVFVRU5DRV9NT0RJRklFUl9fTkVYVF9WQUxVRSA9IFNFUVVFTkNFX01PRElGSUVSX19ORVhUX1ZBTFVFOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPk9yaWdpbmFsIFZhbHVlPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU1RFTV9USU1FX1NFUVVFTkNFX01PRElGSUVSX19PUklHSU5BTF9WQUxVRSA9IFNFUVVFTkNFX01PRElGSUVSX19PUklHSU5BTF9WQUxVRTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5TZXF1ZW5jZTwvYj48L2VtPicgcmVmZXJlbmNlIGxpc3QuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU1RFTV9USU1FX1NFUVVFTkNFX01PRElGSUVSX19TRVFVRU5DRSA9IFNFUVVFTkNFX01PRElGSUVSX0ZFQVRVUkVfQ09VTlQgKyAwOworCisJLyoqCisJICogVGhlIG51bWJlciBvZiBzdHJ1Y3R1cmFsIGZlYXR1cmVzIG9mIHRoZSAnPGVtPlNURU0gVGltZSBTZXF1ZW5jZSBNb2RpZmllcjwvZW0+JyBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTVEVNX1RJTUVfU0VRVUVOQ0VfTU9ESUZJRVJfRkVBVFVSRV9DT1VOVCA9IFNFUVVFTkNFX01PRElGSUVSX0ZFQVRVUkVfQ09VTlQgKyAxOworCisJLyoqCisJICogVGhlIG1ldGEgb2JqZWN0IGlkIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuaW1wbC5TdHJpbmdOT1BNb2RpZmllckltcGwgPGVtPlN0cmluZyBOT1AgTW9kaWZpZXI8L2VtPn0nIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuaW1wbC5TdHJpbmdOT1BNb2RpZmllckltcGwKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5pbXBsLk1vZGlmaWVyUGFja2FnZUltcGwjZ2V0U3RyaW5nTk9QTW9kaWZpZXIoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlpbnQgU1RSSU5HX05PUF9NT0RJRklFUiA9IDE3OworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlRhcmdldDwvYj48L2VtPicgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNUUklOR19OT1BfTU9ESUZJRVJfX1RBUkdFVCA9IE5PUF9NT0RJRklFUl9fVEFSR0VUOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkVTdHJ1Y3R1cmFsIEZlYXR1cmU8L2I+PC9lbT4nIHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTVFJJTkdfTk9QX01PRElGSUVSX19FU1RSVUNUVVJBTF9GRUFUVVJFID0gTk9QX01PRElGSUVSX19FU1RSVUNUVVJBTF9GRUFUVVJFOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkZlYXR1cmUgTmFtZTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNUUklOR19OT1BfTU9ESUZJRVJfX0ZFQVRVUkVfTkFNRSA9IE5PUF9NT0RJRklFUl9fRkVBVFVSRV9OQU1FOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkZlYXR1cmUgSWQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTVFJJTkdfTk9QX01PRElGSUVSX19GRUFUVVJFX0lEID0gTk9QX01PRElGSUVSX19GRUFUVVJFX0lEOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkN1cnJlbnQgVmFsdWUgVGV4dDwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNUUklOR19OT1BfTU9ESUZJRVJfX0NVUlJFTlRfVkFMVUVfVEVYVCA9IE5PUF9NT0RJRklFUl9fQ1VSUkVOVF9WQUxVRV9URVhUOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkNvbXBsZXRlPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU1RSSU5HX05PUF9NT0RJRklFUl9fQ09NUExFVEUgPSBOT1BfTU9ESUZJRVJfX0NPTVBMRVRFOworCisJLyoqCisJICogVGhlIG51bWJlciBvZiBzdHJ1Y3R1cmFsIGZlYXR1cmVzIG9mIHRoZSAnPGVtPlN0cmluZyBOT1AgTW9kaWZpZXI8L2VtPicgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU1RSSU5HX05PUF9NT0RJRklFUl9GRUFUVVJFX0NPVU5UID0gTk9QX01PRElGSUVSX0ZFQVRVUkVfQ09VTlQgKyAwOworCisJLyoqCisJICogVGhlIG1ldGEgb2JqZWN0IGlkIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuaW1wbC5TdHJpbmdTZXF1ZW5jZU1vZGlmaWVySW1wbCA8ZW0+U3RyaW5nIFNlcXVlbmNlIE1vZGlmaWVyPC9lbT59JyBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLmltcGwuU3RyaW5nU2VxdWVuY2VNb2RpZmllckltcGwKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5pbXBsLk1vZGlmaWVyUGFja2FnZUltcGwjZ2V0U3RyaW5nU2VxdWVuY2VNb2RpZmllcigpCisJICogQGdlbmVyYXRlZAorCSAqLworCWludCBTVFJJTkdfU0VRVUVOQ0VfTU9ESUZJRVIgPSAxODsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5UYXJnZXQ8L2I+PC9lbT4nIHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTVFJJTkdfU0VRVUVOQ0VfTU9ESUZJRVJfX1RBUkdFVCA9IFNFUVVFTkNFX01PRElGSUVSX19UQVJHRVQ7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RVN0cnVjdHVyYWwgRmVhdHVyZTwvYj48L2VtPicgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNUUklOR19TRVFVRU5DRV9NT0RJRklFUl9fRVNUUlVDVFVSQUxfRkVBVFVSRSA9IFNFUVVFTkNFX01PRElGSUVSX19FU1RSVUNUVVJBTF9GRUFUVVJFOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkZlYXR1cmUgTmFtZTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNUUklOR19TRVFVRU5DRV9NT0RJRklFUl9fRkVBVFVSRV9OQU1FID0gU0VRVUVOQ0VfTU9ESUZJRVJfX0ZFQVRVUkVfTkFNRTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5GZWF0dXJlIElkPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU1RSSU5HX1NFUVVFTkNFX01PRElGSUVSX19GRUFUVVJFX0lEID0gU0VRVUVOQ0VfTU9ESUZJRVJfX0ZFQVRVUkVfSUQ7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+Q3VycmVudCBWYWx1ZSBUZXh0PC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU1RSSU5HX1NFUVVFTkNFX01PRElGSUVSX19DVVJSRU5UX1ZBTFVFX1RFWFQgPSBTRVFVRU5DRV9NT0RJRklFUl9fQ1VSUkVOVF9WQUxVRV9URVhUOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkNvbXBsZXRlPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU1RSSU5HX1NFUVVFTkNFX01PRElGSUVSX19DT01QTEVURSA9IFNFUVVFTkNFX01PRElGSUVSX19DT01QTEVURTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5TZXF1ZW5jZSBTaXplPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU1RSSU5HX1NFUVVFTkNFX01PRElGSUVSX19TRVFVRU5DRV9TSVpFID0gU0VRVUVOQ0VfTU9ESUZJRVJfX1NFUVVFTkNFX1NJWkU7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+Q3VycmVudCBTZXF1ZW5jZSBJbmRleDwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNUUklOR19TRVFVRU5DRV9NT0RJRklFUl9fQ1VSUkVOVF9TRVFVRU5DRV9JTkRFWCA9IFNFUVVFTkNFX01PRElGSUVSX19DVVJSRU5UX1NFUVVFTkNFX0lOREVYOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPk5leHQgVmFsdWU8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTVFJJTkdfU0VRVUVOQ0VfTU9ESUZJRVJfX05FWFRfVkFMVUUgPSBTRVFVRU5DRV9NT0RJRklFUl9fTkVYVF9WQUxVRTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5PcmlnaW5hbCBWYWx1ZTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNUUklOR19TRVFVRU5DRV9NT0RJRklFUl9fT1JJR0lOQUxfVkFMVUUgPSBTRVFVRU5DRV9NT0RJRklFUl9fT1JJR0lOQUxfVkFMVUU7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+U2VxdWVuY2U8L2I+PC9lbT4nIGF0dHJpYnV0ZSBsaXN0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNUUklOR19TRVFVRU5DRV9NT0RJRklFUl9fU0VRVUVOQ0UgPSBTRVFVRU5DRV9NT0RJRklFUl9GRUFUVVJFX0NPVU5UICsgMDsKKworCS8qKgorCSAqIFRoZSBudW1iZXIgb2Ygc3RydWN0dXJhbCBmZWF0dXJlcyBvZiB0aGUgJzxlbT5TdHJpbmcgU2VxdWVuY2UgTW9kaWZpZXI8L2VtPicgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU1RSSU5HX1NFUVVFTkNFX01PRElGSUVSX0ZFQVRVUkVfQ09VTlQgPSBTRVFVRU5DRV9NT0RJRklFUl9GRUFUVVJFX0NPVU5UICsgMTsKKworCS8qKgorCSAqIFRoZSBtZXRhIG9iamVjdCBpZCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLk1vZGlmaWFibGUgPGVtPk1vZGlmaWFibGU8L2VtPn0nIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuTW9kaWZpYWJsZQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLmltcGwuTW9kaWZpZXJQYWNrYWdlSW1wbCNnZXRNb2RpZmlhYmxlKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJaW50IE1PRElGSUFCTEUgPSAxOTsKKworCS8qKgorCSAqIFRoZSBudW1iZXIgb2Ygc3RydWN0dXJhbCBmZWF0dXJlcyBvZiB0aGUgJzxlbT5Nb2RpZmlhYmxlPC9lbT4nIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IE1PRElGSUFCTEVfRkVBVFVSRV9DT1VOVCA9IDA7CisKKwkvKioKKwkgKiBUaGUgbWV0YSBvYmplY3QgaWQgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5pbXBsLlNpbmdsZVZhbHVlTW9kaWZpZXJJbXBsIDxlbT5TaW5nbGUgVmFsdWUgTW9kaWZpZXI8L2VtPn0nIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuaW1wbC5TaW5nbGVWYWx1ZU1vZGlmaWVySW1wbAorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLmltcGwuTW9kaWZpZXJQYWNrYWdlSW1wbCNnZXRTaW5nbGVWYWx1ZU1vZGlmaWVyKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJaW50IFNJTkdMRV9WQUxVRV9NT0RJRklFUiA9IDIwOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlRhcmdldDwvYj48L2VtPicgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNJTkdMRV9WQUxVRV9NT0RJRklFUl9fVEFSR0VUID0gRkVBVFVSRV9NT0RJRklFUl9fVEFSR0VUOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkVTdHJ1Y3R1cmFsIEZlYXR1cmU8L2I+PC9lbT4nIHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTSU5HTEVfVkFMVUVfTU9ESUZJRVJfX0VTVFJVQ1RVUkFMX0ZFQVRVUkUgPSBGRUFUVVJFX01PRElGSUVSX19FU1RSVUNUVVJBTF9GRUFUVVJFOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkZlYXR1cmUgTmFtZTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNJTkdMRV9WQUxVRV9NT0RJRklFUl9fRkVBVFVSRV9OQU1FID0gRkVBVFVSRV9NT0RJRklFUl9fRkVBVFVSRV9OQU1FOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkZlYXR1cmUgSWQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTSU5HTEVfVkFMVUVfTU9ESUZJRVJfX0ZFQVRVUkVfSUQgPSBGRUFUVVJFX01PRElGSUVSX19GRUFUVVJFX0lEOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkN1cnJlbnQgVmFsdWUgVGV4dDwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNJTkdMRV9WQUxVRV9NT0RJRklFUl9fQ1VSUkVOVF9WQUxVRV9URVhUID0gRkVBVFVSRV9NT0RJRklFUl9fQ1VSUkVOVF9WQUxVRV9URVhUOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkNvbXBsZXRlPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU0lOR0xFX1ZBTFVFX01PRElGSUVSX19DT01QTEVURSA9IEZFQVRVUkVfTU9ESUZJRVJfX0NPTVBMRVRFOworCisJLyoqCisJICogVGhlIG51bWJlciBvZiBzdHJ1Y3R1cmFsIGZlYXR1cmVzIG9mIHRoZSAnPGVtPlNpbmdsZSBWYWx1ZSBNb2RpZmllcjwvZW0+JyBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTSU5HTEVfVkFMVUVfTU9ESUZJRVJfRkVBVFVSRV9DT1VOVCA9IEZFQVRVUkVfTU9ESUZJRVJfRkVBVFVSRV9DT1VOVCArIDA7CisKKwkvKioKKwkgKiBUaGUgbWV0YSBvYmplY3QgaWQgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5pbXBsLkRvdWJsZU1vZGlmaWVySW1wbCA8ZW0+RG91YmxlIE1vZGlmaWVyPC9lbT59JyBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLmltcGwuRG91YmxlTW9kaWZpZXJJbXBsCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuaW1wbC5Nb2RpZmllclBhY2thZ2VJbXBsI2dldERvdWJsZU1vZGlmaWVyKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJaW50IERPVUJMRV9NT0RJRklFUiA9IDIxOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlRhcmdldDwvYj48L2VtPicgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IERPVUJMRV9NT0RJRklFUl9fVEFSR0VUID0gU0lOR0xFX1ZBTFVFX01PRElGSUVSX19UQVJHRVQ7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RVN0cnVjdHVyYWwgRmVhdHVyZTwvYj48L2VtPicgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IERPVUJMRV9NT0RJRklFUl9fRVNUUlVDVFVSQUxfRkVBVFVSRSA9IFNJTkdMRV9WQUxVRV9NT0RJRklFUl9fRVNUUlVDVFVSQUxfRkVBVFVSRTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5GZWF0dXJlIE5hbWU8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBET1VCTEVfTU9ESUZJRVJfX0ZFQVRVUkVfTkFNRSA9IFNJTkdMRV9WQUxVRV9NT0RJRklFUl9fRkVBVFVSRV9OQU1FOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkZlYXR1cmUgSWQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBET1VCTEVfTU9ESUZJRVJfX0ZFQVRVUkVfSUQgPSBTSU5HTEVfVkFMVUVfTU9ESUZJRVJfX0ZFQVRVUkVfSUQ7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+Q3VycmVudCBWYWx1ZSBUZXh0PC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgRE9VQkxFX01PRElGSUVSX19DVVJSRU5UX1ZBTFVFX1RFWFQgPSBTSU5HTEVfVkFMVUVfTU9ESUZJRVJfX0NVUlJFTlRfVkFMVUVfVEVYVDsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5Db21wbGV0ZTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IERPVUJMRV9NT0RJRklFUl9fQ09NUExFVEUgPSBTSU5HTEVfVkFMVUVfTU9ESUZJRVJfX0NPTVBMRVRFOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlZhbHVlPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgRE9VQkxFX01PRElGSUVSX19WQUxVRSA9IFNJTkdMRV9WQUxVRV9NT0RJRklFUl9GRUFUVVJFX0NPVU5UICsgMDsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5PcmlnaW5hbCBWYWx1ZTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IERPVUJMRV9NT0RJRklFUl9fT1JJR0lOQUxfVkFMVUUgPSBTSU5HTEVfVkFMVUVfTU9ESUZJRVJfRkVBVFVSRV9DT1VOVCArIDE7CisKKwkvKioKKwkgKiBUaGUgbnVtYmVyIG9mIHN0cnVjdHVyYWwgZmVhdHVyZXMgb2YgdGhlICc8ZW0+RG91YmxlIE1vZGlmaWVyPC9lbT4nIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IERPVUJMRV9NT0RJRklFUl9GRUFUVVJFX0NPVU5UID0gU0lOR0xFX1ZBTFVFX01PRElGSUVSX0ZFQVRVUkVfQ09VTlQgKyAyOworCisJLyoqCisJICogVGhlIG1ldGEgb2JqZWN0IGlkIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuaW1wbC5JbnRlZ2VyTW9kaWZpZXJJbXBsIDxlbT5JbnRlZ2VyIE1vZGlmaWVyPC9lbT59JyBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLmltcGwuSW50ZWdlck1vZGlmaWVySW1wbAorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLmltcGwuTW9kaWZpZXJQYWNrYWdlSW1wbCNnZXRJbnRlZ2VyTW9kaWZpZXIoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlpbnQgSU5URUdFUl9NT0RJRklFUiA9IDIyOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlRhcmdldDwvYj48L2VtPicgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IElOVEVHRVJfTU9ESUZJRVJfX1RBUkdFVCA9IFNJTkdMRV9WQUxVRV9NT0RJRklFUl9fVEFSR0VUOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkVTdHJ1Y3R1cmFsIEZlYXR1cmU8L2I+PC9lbT4nIHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBJTlRFR0VSX01PRElGSUVSX19FU1RSVUNUVVJBTF9GRUFUVVJFID0gU0lOR0xFX1ZBTFVFX01PRElGSUVSX19FU1RSVUNUVVJBTF9GRUFUVVJFOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkZlYXR1cmUgTmFtZTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IElOVEVHRVJfTU9ESUZJRVJfX0ZFQVRVUkVfTkFNRSA9IFNJTkdMRV9WQUxVRV9NT0RJRklFUl9fRkVBVFVSRV9OQU1FOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkZlYXR1cmUgSWQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBJTlRFR0VSX01PRElGSUVSX19GRUFUVVJFX0lEID0gU0lOR0xFX1ZBTFVFX01PRElGSUVSX19GRUFUVVJFX0lEOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkN1cnJlbnQgVmFsdWUgVGV4dDwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IElOVEVHRVJfTU9ESUZJRVJfX0NVUlJFTlRfVkFMVUVfVEVYVCA9IFNJTkdMRV9WQUxVRV9NT0RJRklFUl9fQ1VSUkVOVF9WQUxVRV9URVhUOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkNvbXBsZXRlPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgSU5URUdFUl9NT0RJRklFUl9fQ09NUExFVEUgPSBTSU5HTEVfVkFMVUVfTU9ESUZJRVJfX0NPTVBMRVRFOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlZhbHVlPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgSU5URUdFUl9NT0RJRklFUl9fVkFMVUUgPSBTSU5HTEVfVkFMVUVfTU9ESUZJRVJfRkVBVFVSRV9DT1VOVCArIDA7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+T3JpZ2luYWwgVmFsdWU8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBJTlRFR0VSX01PRElGSUVSX19PUklHSU5BTF9WQUxVRSA9IFNJTkdMRV9WQUxVRV9NT0RJRklFUl9GRUFUVVJFX0NPVU5UICsgMTsKKworCS8qKgorCSAqIFRoZSBudW1iZXIgb2Ygc3RydWN0dXJhbCBmZWF0dXJlcyBvZiB0aGUgJzxlbT5JbnRlZ2VyIE1vZGlmaWVyPC9lbT4nIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IElOVEVHRVJfTU9ESUZJRVJfRkVBVFVSRV9DT1VOVCA9IFNJTkdMRV9WQUxVRV9NT0RJRklFUl9GRUFUVVJFX0NPVU5UICsgMjsKKworCS8qKgorCSAqIFRoZSBtZXRhIG9iamVjdCBpZCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLmltcGwuTG9uZ01vZGlmaWVySW1wbCA8ZW0+TG9uZyBNb2RpZmllcjwvZW0+fScgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5pbXBsLkxvbmdNb2RpZmllckltcGwKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5pbXBsLk1vZGlmaWVyUGFja2FnZUltcGwjZ2V0TG9uZ01vZGlmaWVyKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJaW50IExPTkdfTU9ESUZJRVIgPSAyMzsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5UYXJnZXQ8L2I+PC9lbT4nIHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBMT05HX01PRElGSUVSX19UQVJHRVQgPSBTSU5HTEVfVkFMVUVfTU9ESUZJRVJfX1RBUkdFVDsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5FU3RydWN0dXJhbCBGZWF0dXJlPC9iPjwvZW0+JyByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgTE9OR19NT0RJRklFUl9fRVNUUlVDVFVSQUxfRkVBVFVSRSA9IFNJTkdMRV9WQUxVRV9NT0RJRklFUl9fRVNUUlVDVFVSQUxfRkVBVFVSRTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5GZWF0dXJlIE5hbWU8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBMT05HX01PRElGSUVSX19GRUFUVVJFX05BTUUgPSBTSU5HTEVfVkFMVUVfTU9ESUZJRVJfX0ZFQVRVUkVfTkFNRTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5GZWF0dXJlIElkPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgTE9OR19NT0RJRklFUl9fRkVBVFVSRV9JRCA9IFNJTkdMRV9WQUxVRV9NT0RJRklFUl9fRkVBVFVSRV9JRDsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5DdXJyZW50IFZhbHVlIFRleHQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBMT05HX01PRElGSUVSX19DVVJSRU5UX1ZBTFVFX1RFWFQgPSBTSU5HTEVfVkFMVUVfTU9ESUZJRVJfX0NVUlJFTlRfVkFMVUVfVEVYVDsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5Db21wbGV0ZTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IExPTkdfTU9ESUZJRVJfX0NPTVBMRVRFID0gU0lOR0xFX1ZBTFVFX01PRElGSUVSX19DT01QTEVURTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5WYWx1ZTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IExPTkdfTU9ESUZJRVJfX1ZBTFVFID0gU0lOR0xFX1ZBTFVFX01PRElGSUVSX0ZFQVRVUkVfQ09VTlQgKyAwOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPk9yaWdpbmFsIFZhbHVlPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgTE9OR19NT0RJRklFUl9fT1JJR0lOQUxfVkFMVUUgPSBTSU5HTEVfVkFMVUVfTU9ESUZJRVJfRkVBVFVSRV9DT1VOVCArIDE7CisKKwkvKioKKwkgKiBUaGUgbnVtYmVyIG9mIHN0cnVjdHVyYWwgZmVhdHVyZXMgb2YgdGhlICc8ZW0+TG9uZyBNb2RpZmllcjwvZW0+JyBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBMT05HX01PRElGSUVSX0ZFQVRVUkVfQ09VTlQgPSBTSU5HTEVfVkFMVUVfTU9ESUZJRVJfRkVBVFVSRV9DT1VOVCArIDI7CisKKwkvKioKKwkgKiBUaGUgbWV0YSBvYmplY3QgaWQgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5pbXBsLlNURU1UaW1lTW9kaWZpZXJJbXBsIDxlbT5TVEVNIFRpbWUgTW9kaWZpZXI8L2VtPn0nIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuaW1wbC5TVEVNVGltZU1vZGlmaWVySW1wbAorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLmltcGwuTW9kaWZpZXJQYWNrYWdlSW1wbCNnZXRTVEVNVGltZU1vZGlmaWVyKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJaW50IFNURU1fVElNRV9NT0RJRklFUiA9IDI0OworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlRhcmdldDwvYj48L2VtPicgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNURU1fVElNRV9NT0RJRklFUl9fVEFSR0VUID0gU0lOR0xFX1ZBTFVFX01PRElGSUVSX19UQVJHRVQ7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RVN0cnVjdHVyYWwgRmVhdHVyZTwvYj48L2VtPicgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNURU1fVElNRV9NT0RJRklFUl9fRVNUUlVDVFVSQUxfRkVBVFVSRSA9IFNJTkdMRV9WQUxVRV9NT0RJRklFUl9fRVNUUlVDVFVSQUxfRkVBVFVSRTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5GZWF0dXJlIE5hbWU8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTVEVNX1RJTUVfTU9ESUZJRVJfX0ZFQVRVUkVfTkFNRSA9IFNJTkdMRV9WQUxVRV9NT0RJRklFUl9fRkVBVFVSRV9OQU1FOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkZlYXR1cmUgSWQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTVEVNX1RJTUVfTU9ESUZJRVJfX0ZFQVRVUkVfSUQgPSBTSU5HTEVfVkFMVUVfTU9ESUZJRVJfX0ZFQVRVUkVfSUQ7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+Q3VycmVudCBWYWx1ZSBUZXh0PC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU1RFTV9USU1FX01PRElGSUVSX19DVVJSRU5UX1ZBTFVFX1RFWFQgPSBTSU5HTEVfVkFMVUVfTU9ESUZJRVJfX0NVUlJFTlRfVkFMVUVfVEVYVDsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5Db21wbGV0ZTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNURU1fVElNRV9NT0RJRklFUl9fQ09NUExFVEUgPSBTSU5HTEVfVkFMVUVfTU9ESUZJRVJfX0NPTVBMRVRFOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlZhbHVlPC9iPjwvZW0+JyByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU1RFTV9USU1FX01PRElGSUVSX19WQUxVRSA9IFNJTkdMRV9WQUxVRV9NT0RJRklFUl9GRUFUVVJFX0NPVU5UICsgMDsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5PcmlnaW5hbCBWYWx1ZTwvYj48L2VtPicgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNURU1fVElNRV9NT0RJRklFUl9fT1JJR0lOQUxfVkFMVUUgPSBTSU5HTEVfVkFMVUVfTU9ESUZJRVJfRkVBVFVSRV9DT1VOVCArIDE7CisKKwkvKioKKwkgKiBUaGUgbnVtYmVyIG9mIHN0cnVjdHVyYWwgZmVhdHVyZXMgb2YgdGhlICc8ZW0+U1RFTSBUaW1lIE1vZGlmaWVyPC9lbT4nIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNURU1fVElNRV9NT0RJRklFUl9GRUFUVVJFX0NPVU5UID0gU0lOR0xFX1ZBTFVFX01PRElGSUVSX0ZFQVRVUkVfQ09VTlQgKyAyOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLkRvdWJsZU5PUE1vZGlmaWVyIDxlbT5Eb3VibGUgTk9QIE1vZGlmaWVyPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAnPGVtPkRvdWJsZSBOT1AgTW9kaWZpZXI8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuRG91YmxlTk9QTW9kaWZpZXIKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUNsYXNzIGdldERvdWJsZU5PUE1vZGlmaWVyKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuRG91YmxlUmFuZ2VNb2RpZmllciA8ZW0+RG91YmxlIFJhbmdlIE1vZGlmaWVyPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAnPGVtPkRvdWJsZSBSYW5nZSBNb2RpZmllcjwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5Eb3VibGVSYW5nZU1vZGlmaWVyCisJICogQGdlbmVyYXRlZAorCSAqLworCUVDbGFzcyBnZXREb3VibGVSYW5nZU1vZGlmaWVyKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5Eb3VibGVSYW5nZU1vZGlmaWVyI2dldFN0YXJ0VmFsdWUgPGVtPlN0YXJ0IFZhbHVlPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+U3RhcnQgVmFsdWU8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuRG91YmxlUmFuZ2VNb2RpZmllciNnZXRTdGFydFZhbHVlKCkKKwkgKiBAc2VlICNnZXREb3VibGVSYW5nZU1vZGlmaWVyKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUF0dHJpYnV0ZSBnZXREb3VibGVSYW5nZU1vZGlmaWVyX1N0YXJ0VmFsdWUoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLkRvdWJsZVJhbmdlTW9kaWZpZXIjZ2V0RW5kVmFsdWUgPGVtPkVuZCBWYWx1ZTwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPGVtPkVuZCBWYWx1ZTwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5Eb3VibGVSYW5nZU1vZGlmaWVyI2dldEVuZFZhbHVlKCkKKwkgKiBAc2VlICNnZXREb3VibGVSYW5nZU1vZGlmaWVyKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUF0dHJpYnV0ZSBnZXREb3VibGVSYW5nZU1vZGlmaWVyX0VuZFZhbHVlKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5Eb3VibGVSYW5nZU1vZGlmaWVyI2dldEluY3JlbWVudCA8ZW0+SW5jcmVtZW50PC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+SW5jcmVtZW50PC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLkRvdWJsZVJhbmdlTW9kaWZpZXIjZ2V0SW5jcmVtZW50KCkKKwkgKiBAc2VlICNnZXREb3VibGVSYW5nZU1vZGlmaWVyKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUF0dHJpYnV0ZSBnZXREb3VibGVSYW5nZU1vZGlmaWVyX0luY3JlbWVudCgpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuRG91YmxlUmFuZ2VNb2RpZmllciNnZXROZXh0VmFsdWUgPGVtPk5leHQgVmFsdWU8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxlbT5OZXh0IFZhbHVlPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLkRvdWJsZVJhbmdlTW9kaWZpZXIjZ2V0TmV4dFZhbHVlKCkKKwkgKiBAc2VlICNnZXREb3VibGVSYW5nZU1vZGlmaWVyKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUF0dHJpYnV0ZSBnZXREb3VibGVSYW5nZU1vZGlmaWVyX05leHRWYWx1ZSgpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuRG91YmxlUmFuZ2VNb2RpZmllciNnZXRPcmlnaW5hbFZhbHVlIDxlbT5PcmlnaW5hbCBWYWx1ZTwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPGVtPk9yaWdpbmFsIFZhbHVlPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLkRvdWJsZVJhbmdlTW9kaWZpZXIjZ2V0T3JpZ2luYWxWYWx1ZSgpCisJICogQHNlZSAjZ2V0RG91YmxlUmFuZ2VNb2RpZmllcigpCisJICogQGdlbmVyYXRlZAorCSAqLworCUVBdHRyaWJ1dGUgZ2V0RG91YmxlUmFuZ2VNb2RpZmllcl9PcmlnaW5hbFZhbHVlKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuRG91YmxlU2VxdWVuY2VNb2RpZmllciA8ZW0+RG91YmxlIFNlcXVlbmNlIE1vZGlmaWVyPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAnPGVtPkRvdWJsZSBTZXF1ZW5jZSBNb2RpZmllcjwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5Eb3VibGVTZXF1ZW5jZU1vZGlmaWVyCisJICogQGdlbmVyYXRlZAorCSAqLworCUVDbGFzcyBnZXREb3VibGVTZXF1ZW5jZU1vZGlmaWVyKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSBsaXN0ICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLkRvdWJsZVNlcXVlbmNlTW9kaWZpZXIjZ2V0U2VxdWVuY2UgPGVtPlNlcXVlbmNlPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlIGxpc3QgJzxlbT5TZXF1ZW5jZTwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5Eb3VibGVTZXF1ZW5jZU1vZGlmaWVyI2dldFNlcXVlbmNlKCkKKwkgKiBAc2VlICNnZXREb3VibGVTZXF1ZW5jZU1vZGlmaWVyKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUF0dHJpYnV0ZSBnZXREb3VibGVTZXF1ZW5jZU1vZGlmaWVyX1NlcXVlbmNlKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuRmVhdHVyZU1vZGlmaWVyIDxlbT5GZWF0dXJlIE1vZGlmaWVyPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAnPGVtPkZlYXR1cmUgTW9kaWZpZXI8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuRmVhdHVyZU1vZGlmaWVyCisJICogQGdlbmVyYXRlZAorCSAqLworCUVDbGFzcyBnZXRGZWF0dXJlTW9kaWZpZXIoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgcmVmZXJlbmNlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLkZlYXR1cmVNb2RpZmllciNnZXRUYXJnZXQgPGVtPlRhcmdldDwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIHJlZmVyZW5jZSAnPGVtPlRhcmdldDwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5GZWF0dXJlTW9kaWZpZXIjZ2V0VGFyZ2V0KCkKKwkgKiBAc2VlICNnZXRGZWF0dXJlTW9kaWZpZXIoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFUmVmZXJlbmNlIGdldEZlYXR1cmVNb2RpZmllcl9UYXJnZXQoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgcmVmZXJlbmNlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLkZlYXR1cmVNb2RpZmllciNnZXRFU3RydWN0dXJhbEZlYXR1cmUgPGVtPkVTdHJ1Y3R1cmFsIEZlYXR1cmU8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSByZWZlcmVuY2UgJzxlbT5FU3RydWN0dXJhbCBGZWF0dXJlPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLkZlYXR1cmVNb2RpZmllciNnZXRFU3RydWN0dXJhbEZlYXR1cmUoKQorCSAqIEBzZWUgI2dldEZlYXR1cmVNb2RpZmllcigpCisJICogQGdlbmVyYXRlZAorCSAqLworCUVSZWZlcmVuY2UgZ2V0RmVhdHVyZU1vZGlmaWVyX0VTdHJ1Y3R1cmFsRmVhdHVyZSgpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuRmVhdHVyZU1vZGlmaWVyI2dldEZlYXR1cmVOYW1lIDxlbT5GZWF0dXJlIE5hbWU8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxlbT5GZWF0dXJlIE5hbWU8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuRmVhdHVyZU1vZGlmaWVyI2dldEZlYXR1cmVOYW1lKCkKKwkgKiBAc2VlICNnZXRGZWF0dXJlTW9kaWZpZXIoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQXR0cmlidXRlIGdldEZlYXR1cmVNb2RpZmllcl9GZWF0dXJlTmFtZSgpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuRmVhdHVyZU1vZGlmaWVyI2dldEZlYXR1cmVJZCA8ZW0+RmVhdHVyZSBJZDwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPGVtPkZlYXR1cmUgSWQ8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuRmVhdHVyZU1vZGlmaWVyI2dldEZlYXR1cmVJZCgpCisJICogQHNlZSAjZ2V0RmVhdHVyZU1vZGlmaWVyKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUF0dHJpYnV0ZSBnZXRGZWF0dXJlTW9kaWZpZXJfRmVhdHVyZUlkKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5GZWF0dXJlTW9kaWZpZXIjZ2V0Q3VycmVudFZhbHVlVGV4dCA8ZW0+Q3VycmVudCBWYWx1ZSBUZXh0PC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+Q3VycmVudCBWYWx1ZSBUZXh0PC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLkZlYXR1cmVNb2RpZmllciNnZXRDdXJyZW50VmFsdWVUZXh0KCkKKwkgKiBAc2VlICNnZXRGZWF0dXJlTW9kaWZpZXIoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQXR0cmlidXRlIGdldEZlYXR1cmVNb2RpZmllcl9DdXJyZW50VmFsdWVUZXh0KCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5GZWF0dXJlTW9kaWZpZXIjaXNDb21wbGV0ZSA8ZW0+Q29tcGxldGU8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxlbT5Db21wbGV0ZTwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5GZWF0dXJlTW9kaWZpZXIjaXNDb21wbGV0ZSgpCisJICogQHNlZSAjZ2V0RmVhdHVyZU1vZGlmaWVyKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUF0dHJpYnV0ZSBnZXRGZWF0dXJlTW9kaWZpZXJfQ29tcGxldGUoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5JbnRlZ2VyTk9QTW9kaWZpZXIgPGVtPkludGVnZXIgTk9QIE1vZGlmaWVyPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAnPGVtPkludGVnZXIgTk9QIE1vZGlmaWVyPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLkludGVnZXJOT1BNb2RpZmllcgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQ2xhc3MgZ2V0SW50ZWdlck5PUE1vZGlmaWVyKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuSW50ZWdlclJhbmdlTW9kaWZpZXIgPGVtPkludGVnZXIgUmFuZ2UgTW9kaWZpZXI8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICc8ZW0+SW50ZWdlciBSYW5nZSBNb2RpZmllcjwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5JbnRlZ2VyUmFuZ2VNb2RpZmllcgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQ2xhc3MgZ2V0SW50ZWdlclJhbmdlTW9kaWZpZXIoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLkludGVnZXJSYW5nZU1vZGlmaWVyI2dldFN0YXJ0VmFsdWUgPGVtPlN0YXJ0IFZhbHVlPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+U3RhcnQgVmFsdWU8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuSW50ZWdlclJhbmdlTW9kaWZpZXIjZ2V0U3RhcnRWYWx1ZSgpCisJICogQHNlZSAjZ2V0SW50ZWdlclJhbmdlTW9kaWZpZXIoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQXR0cmlidXRlIGdldEludGVnZXJSYW5nZU1vZGlmaWVyX1N0YXJ0VmFsdWUoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLkludGVnZXJSYW5nZU1vZGlmaWVyI2dldEVuZFZhbHVlIDxlbT5FbmQgVmFsdWU8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxlbT5FbmQgVmFsdWU8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuSW50ZWdlclJhbmdlTW9kaWZpZXIjZ2V0RW5kVmFsdWUoKQorCSAqIEBzZWUgI2dldEludGVnZXJSYW5nZU1vZGlmaWVyKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUF0dHJpYnV0ZSBnZXRJbnRlZ2VyUmFuZ2VNb2RpZmllcl9FbmRWYWx1ZSgpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuSW50ZWdlclJhbmdlTW9kaWZpZXIjZ2V0SW5jcmVtZW50IDxlbT5JbmNyZW1lbnQ8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxlbT5JbmNyZW1lbnQ8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuSW50ZWdlclJhbmdlTW9kaWZpZXIjZ2V0SW5jcmVtZW50KCkKKwkgKiBAc2VlICNnZXRJbnRlZ2VyUmFuZ2VNb2RpZmllcigpCisJICogQGdlbmVyYXRlZAorCSAqLworCUVBdHRyaWJ1dGUgZ2V0SW50ZWdlclJhbmdlTW9kaWZpZXJfSW5jcmVtZW50KCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5JbnRlZ2VyUmFuZ2VNb2RpZmllciNnZXROZXh0VmFsdWUgPGVtPk5leHQgVmFsdWU8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxlbT5OZXh0IFZhbHVlPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLkludGVnZXJSYW5nZU1vZGlmaWVyI2dldE5leHRWYWx1ZSgpCisJICogQHNlZSAjZ2V0SW50ZWdlclJhbmdlTW9kaWZpZXIoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQXR0cmlidXRlIGdldEludGVnZXJSYW5nZU1vZGlmaWVyX05leHRWYWx1ZSgpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuSW50ZWdlclJhbmdlTW9kaWZpZXIjZ2V0T3JpZ2luYWxWYWx1ZSA8ZW0+T3JpZ2luYWwgVmFsdWU8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxlbT5PcmlnaW5hbCBWYWx1ZTwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5JbnRlZ2VyUmFuZ2VNb2RpZmllciNnZXRPcmlnaW5hbFZhbHVlKCkKKwkgKiBAc2VlICNnZXRJbnRlZ2VyUmFuZ2VNb2RpZmllcigpCisJICogQGdlbmVyYXRlZAorCSAqLworCUVBdHRyaWJ1dGUgZ2V0SW50ZWdlclJhbmdlTW9kaWZpZXJfT3JpZ2luYWxWYWx1ZSgpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLkludGVnZXJTZXF1ZW5jZU1vZGlmaWVyIDxlbT5JbnRlZ2VyIFNlcXVlbmNlIE1vZGlmaWVyPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAnPGVtPkludGVnZXIgU2VxdWVuY2UgTW9kaWZpZXI8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuSW50ZWdlclNlcXVlbmNlTW9kaWZpZXIKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUNsYXNzIGdldEludGVnZXJTZXF1ZW5jZU1vZGlmaWVyKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSBsaXN0ICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLkludGVnZXJTZXF1ZW5jZU1vZGlmaWVyI2dldFNlcXVlbmNlIDxlbT5TZXF1ZW5jZTwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSBsaXN0ICc8ZW0+U2VxdWVuY2U8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuSW50ZWdlclNlcXVlbmNlTW9kaWZpZXIjZ2V0U2VxdWVuY2UoKQorCSAqIEBzZWUgI2dldEludGVnZXJTZXF1ZW5jZU1vZGlmaWVyKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUF0dHJpYnV0ZSBnZXRJbnRlZ2VyU2VxdWVuY2VNb2RpZmllcl9TZXF1ZW5jZSgpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLkxvbmdOT1BNb2RpZmllciA8ZW0+TG9uZyBOT1AgTW9kaWZpZXI8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICc8ZW0+TG9uZyBOT1AgTW9kaWZpZXI8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuTG9uZ05PUE1vZGlmaWVyCisJICogQGdlbmVyYXRlZAorCSAqLworCUVDbGFzcyBnZXRMb25nTk9QTW9kaWZpZXIoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5Mb25nUmFuZ2VNb2RpZmllciA8ZW0+TG9uZyBSYW5nZSBNb2RpZmllcjwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJzxlbT5Mb25nIFJhbmdlIE1vZGlmaWVyPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLkxvbmdSYW5nZU1vZGlmaWVyCisJICogQGdlbmVyYXRlZAorCSAqLworCUVDbGFzcyBnZXRMb25nUmFuZ2VNb2RpZmllcigpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuTG9uZ1JhbmdlTW9kaWZpZXIjZ2V0U3RhcnRWYWx1ZSA8ZW0+U3RhcnQgVmFsdWU8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxlbT5TdGFydCBWYWx1ZTwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5Mb25nUmFuZ2VNb2RpZmllciNnZXRTdGFydFZhbHVlKCkKKwkgKiBAc2VlICNnZXRMb25nUmFuZ2VNb2RpZmllcigpCisJICogQGdlbmVyYXRlZAorCSAqLworCUVBdHRyaWJ1dGUgZ2V0TG9uZ1JhbmdlTW9kaWZpZXJfU3RhcnRWYWx1ZSgpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuTG9uZ1JhbmdlTW9kaWZpZXIjZ2V0RW5kVmFsdWUgPGVtPkVuZCBWYWx1ZTwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPGVtPkVuZCBWYWx1ZTwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5Mb25nUmFuZ2VNb2RpZmllciNnZXRFbmRWYWx1ZSgpCisJICogQHNlZSAjZ2V0TG9uZ1JhbmdlTW9kaWZpZXIoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQXR0cmlidXRlIGdldExvbmdSYW5nZU1vZGlmaWVyX0VuZFZhbHVlKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5Mb25nUmFuZ2VNb2RpZmllciNnZXRJbmNyZW1lbnQgPGVtPkluY3JlbWVudDwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPGVtPkluY3JlbWVudDwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5Mb25nUmFuZ2VNb2RpZmllciNnZXRJbmNyZW1lbnQoKQorCSAqIEBzZWUgI2dldExvbmdSYW5nZU1vZGlmaWVyKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUF0dHJpYnV0ZSBnZXRMb25nUmFuZ2VNb2RpZmllcl9JbmNyZW1lbnQoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLkxvbmdSYW5nZU1vZGlmaWVyI2dldE5leHRWYWx1ZSA8ZW0+TmV4dCBWYWx1ZTwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPGVtPk5leHQgVmFsdWU8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuTG9uZ1JhbmdlTW9kaWZpZXIjZ2V0TmV4dFZhbHVlKCkKKwkgKiBAc2VlICNnZXRMb25nUmFuZ2VNb2RpZmllcigpCisJICogQGdlbmVyYXRlZAorCSAqLworCUVBdHRyaWJ1dGUgZ2V0TG9uZ1JhbmdlTW9kaWZpZXJfTmV4dFZhbHVlKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5Mb25nUmFuZ2VNb2RpZmllciNnZXRPcmlnaW5hbFZhbHVlIDxlbT5PcmlnaW5hbCBWYWx1ZTwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPGVtPk9yaWdpbmFsIFZhbHVlPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLkxvbmdSYW5nZU1vZGlmaWVyI2dldE9yaWdpbmFsVmFsdWUoKQorCSAqIEBzZWUgI2dldExvbmdSYW5nZU1vZGlmaWVyKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUF0dHJpYnV0ZSBnZXRMb25nUmFuZ2VNb2RpZmllcl9PcmlnaW5hbFZhbHVlKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuTG9uZ1NlcXVlbmNlTW9kaWZpZXIgPGVtPkxvbmcgU2VxdWVuY2UgTW9kaWZpZXI8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICc8ZW0+TG9uZyBTZXF1ZW5jZSBNb2RpZmllcjwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5Mb25nU2VxdWVuY2VNb2RpZmllcgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQ2xhc3MgZ2V0TG9uZ1NlcXVlbmNlTW9kaWZpZXIoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlIGxpc3QgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuTG9uZ1NlcXVlbmNlTW9kaWZpZXIjZ2V0U2VxdWVuY2UgPGVtPlNlcXVlbmNlPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlIGxpc3QgJzxlbT5TZXF1ZW5jZTwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5Mb25nU2VxdWVuY2VNb2RpZmllciNnZXRTZXF1ZW5jZSgpCisJICogQHNlZSAjZ2V0TG9uZ1NlcXVlbmNlTW9kaWZpZXIoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQXR0cmlidXRlIGdldExvbmdTZXF1ZW5jZU1vZGlmaWVyX1NlcXVlbmNlKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuTW9kaWZpZXIgPGVtPk1vZGlmaWVyPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAnPGVtPk1vZGlmaWVyPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLk1vZGlmaWVyCisJICogQGdlbmVyYXRlZAorCSAqLworCUVDbGFzcyBnZXRNb2RpZmllcigpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuTW9kaWZpZXIjZ2V0VGFyZ2V0VVJJIDxlbT5UYXJnZXQgVVJJPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+VGFyZ2V0IFVSSTwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5Nb2RpZmllciNnZXRUYXJnZXRVUkkoKQorCSAqIEBzZWUgI2dldE1vZGlmaWVyKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUF0dHJpYnV0ZSBnZXRNb2RpZmllcl9UYXJnZXRVUkkoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3QgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuTW9kaWZpZXIjZ2V0RmVhdHVyZU1vZGlmaWVycyA8ZW0+RmVhdHVyZSBNb2RpZmllcnM8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBjb250YWlubWVudCByZWZlcmVuY2UgbGlzdCAnPGVtPkZlYXR1cmUgTW9kaWZpZXJzPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLk1vZGlmaWVyI2dldEZlYXR1cmVNb2RpZmllcnMoKQorCSAqIEBzZWUgI2dldE1vZGlmaWVyKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRVJlZmVyZW5jZSBnZXRNb2RpZmllcl9GZWF0dXJlTW9kaWZpZXJzKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5Nb2RpZmllciNpc0NvbXBsZXRlIDxlbT5Db21wbGV0ZTwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPGVtPkNvbXBsZXRlPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLk1vZGlmaWVyI2lzQ29tcGxldGUoKQorCSAqIEBzZWUgI2dldE1vZGlmaWVyKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUF0dHJpYnV0ZSBnZXRNb2RpZmllcl9Db21wbGV0ZSgpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLk5PUE1vZGlmaWVyIDxlbT5OT1AgTW9kaWZpZXI8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICc8ZW0+Tk9QIE1vZGlmaWVyPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLk5PUE1vZGlmaWVyCisJICogQGdlbmVyYXRlZAorCSAqLworCUVDbGFzcyBnZXROT1BNb2RpZmllcigpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLlJhbmdlTW9kaWZpZXIgPGVtPlJhbmdlIE1vZGlmaWVyPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAnPGVtPlJhbmdlIE1vZGlmaWVyPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLlJhbmdlTW9kaWZpZXIKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUNsYXNzIGdldFJhbmdlTW9kaWZpZXIoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5TVEVNVGltZU5PUE1vZGlmaWVyIDxlbT5TVEVNIFRpbWUgTk9QIE1vZGlmaWVyPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAnPGVtPlNURU0gVGltZSBOT1AgTW9kaWZpZXI8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuU1RFTVRpbWVOT1BNb2RpZmllcgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQ2xhc3MgZ2V0U1RFTVRpbWVOT1BNb2RpZmllcigpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLlNURU1UaW1lUmFuZ2VNb2RpZmllciA8ZW0+U1RFTSBUaW1lIFJhbmdlIE1vZGlmaWVyPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAnPGVtPlNURU0gVGltZSBSYW5nZSBNb2RpZmllcjwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5TVEVNVGltZVJhbmdlTW9kaWZpZXIKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUNsYXNzIGdldFNURU1UaW1lUmFuZ2VNb2RpZmllcigpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSByZWZlcmVuY2UgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuU1RFTVRpbWVSYW5nZU1vZGlmaWVyI2dldFN0YXJ0VmFsdWUgPGVtPlN0YXJ0IFZhbHVlPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgcmVmZXJlbmNlICc8ZW0+U3RhcnQgVmFsdWU8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuU1RFTVRpbWVSYW5nZU1vZGlmaWVyI2dldFN0YXJ0VmFsdWUoKQorCSAqIEBzZWUgI2dldFNURU1UaW1lUmFuZ2VNb2RpZmllcigpCisJICogQGdlbmVyYXRlZAorCSAqLworCUVSZWZlcmVuY2UgZ2V0U1RFTVRpbWVSYW5nZU1vZGlmaWVyX1N0YXJ0VmFsdWUoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgcmVmZXJlbmNlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLlNURU1UaW1lUmFuZ2VNb2RpZmllciNnZXRFbmRWYWx1ZSA8ZW0+RW5kIFZhbHVlPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgcmVmZXJlbmNlICc8ZW0+RW5kIFZhbHVlPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLlNURU1UaW1lUmFuZ2VNb2RpZmllciNnZXRFbmRWYWx1ZSgpCisJICogQHNlZSAjZ2V0U1RFTVRpbWVSYW5nZU1vZGlmaWVyKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRVJlZmVyZW5jZSBnZXRTVEVNVGltZVJhbmdlTW9kaWZpZXJfRW5kVmFsdWUoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLlNURU1UaW1lUmFuZ2VNb2RpZmllciNnZXRJbmNyZW1lbnQgPGVtPkluY3JlbWVudDwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPGVtPkluY3JlbWVudDwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5TVEVNVGltZVJhbmdlTW9kaWZpZXIjZ2V0SW5jcmVtZW50KCkKKwkgKiBAc2VlICNnZXRTVEVNVGltZVJhbmdlTW9kaWZpZXIoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQXR0cmlidXRlIGdldFNURU1UaW1lUmFuZ2VNb2RpZmllcl9JbmNyZW1lbnQoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgcmVmZXJlbmNlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLlNURU1UaW1lUmFuZ2VNb2RpZmllciNnZXROZXh0VmFsdWUgPGVtPk5leHQgVmFsdWU8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSByZWZlcmVuY2UgJzxlbT5OZXh0IFZhbHVlPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLlNURU1UaW1lUmFuZ2VNb2RpZmllciNnZXROZXh0VmFsdWUoKQorCSAqIEBzZWUgI2dldFNURU1UaW1lUmFuZ2VNb2RpZmllcigpCisJICogQGdlbmVyYXRlZAorCSAqLworCUVSZWZlcmVuY2UgZ2V0U1RFTVRpbWVSYW5nZU1vZGlmaWVyX05leHRWYWx1ZSgpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSByZWZlcmVuY2UgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuU1RFTVRpbWVSYW5nZU1vZGlmaWVyI2dldE9yaWdpbmFsVmFsdWUgPGVtPk9yaWdpbmFsIFZhbHVlPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgcmVmZXJlbmNlICc8ZW0+T3JpZ2luYWwgVmFsdWU8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuU1RFTVRpbWVSYW5nZU1vZGlmaWVyI2dldE9yaWdpbmFsVmFsdWUoKQorCSAqIEBzZWUgI2dldFNURU1UaW1lUmFuZ2VNb2RpZmllcigpCisJICogQGdlbmVyYXRlZAorCSAqLworCUVSZWZlcmVuY2UgZ2V0U1RFTVRpbWVSYW5nZU1vZGlmaWVyX09yaWdpbmFsVmFsdWUoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5TVEVNVGltZVNlcXVlbmNlTW9kaWZpZXIgPGVtPlNURU0gVGltZSBTZXF1ZW5jZSBNb2RpZmllcjwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJzxlbT5TVEVNIFRpbWUgU2VxdWVuY2UgTW9kaWZpZXI8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuU1RFTVRpbWVTZXF1ZW5jZU1vZGlmaWVyCisJICogQGdlbmVyYXRlZAorCSAqLworCUVDbGFzcyBnZXRTVEVNVGltZVNlcXVlbmNlTW9kaWZpZXIoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgcmVmZXJlbmNlIGxpc3QgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuU1RFTVRpbWVTZXF1ZW5jZU1vZGlmaWVyI2dldFNlcXVlbmNlIDxlbT5TZXF1ZW5jZTwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIHJlZmVyZW5jZSBsaXN0ICc8ZW0+U2VxdWVuY2U8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuU1RFTVRpbWVTZXF1ZW5jZU1vZGlmaWVyI2dldFNlcXVlbmNlKCkKKwkgKiBAc2VlICNnZXRTVEVNVGltZVNlcXVlbmNlTW9kaWZpZXIoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFUmVmZXJlbmNlIGdldFNURU1UaW1lU2VxdWVuY2VNb2RpZmllcl9TZXF1ZW5jZSgpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLlNlcXVlbmNlTW9kaWZpZXIgPGVtPlNlcXVlbmNlIE1vZGlmaWVyPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAnPGVtPlNlcXVlbmNlIE1vZGlmaWVyPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLlNlcXVlbmNlTW9kaWZpZXIKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUNsYXNzIGdldFNlcXVlbmNlTW9kaWZpZXIoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLlNlcXVlbmNlTW9kaWZpZXIjZ2V0U2VxdWVuY2VTaXplIDxlbT5TZXF1ZW5jZSBTaXplPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+U2VxdWVuY2UgU2l6ZTwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5TZXF1ZW5jZU1vZGlmaWVyI2dldFNlcXVlbmNlU2l6ZSgpCisJICogQHNlZSAjZ2V0U2VxdWVuY2VNb2RpZmllcigpCisJICogQGdlbmVyYXRlZAorCSAqLworCUVBdHRyaWJ1dGUgZ2V0U2VxdWVuY2VNb2RpZmllcl9TZXF1ZW5jZVNpemUoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLlNlcXVlbmNlTW9kaWZpZXIjZ2V0Q3VycmVudFNlcXVlbmNlSW5kZXggPGVtPkN1cnJlbnQgU2VxdWVuY2UgSW5kZXg8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxlbT5DdXJyZW50IFNlcXVlbmNlIEluZGV4PC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLlNlcXVlbmNlTW9kaWZpZXIjZ2V0Q3VycmVudFNlcXVlbmNlSW5kZXgoKQorCSAqIEBzZWUgI2dldFNlcXVlbmNlTW9kaWZpZXIoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQXR0cmlidXRlIGdldFNlcXVlbmNlTW9kaWZpZXJfQ3VycmVudFNlcXVlbmNlSW5kZXgoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLlNlcXVlbmNlTW9kaWZpZXIjZ2V0TmV4dFZhbHVlIDxlbT5OZXh0IFZhbHVlPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+TmV4dCBWYWx1ZTwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5TZXF1ZW5jZU1vZGlmaWVyI2dldE5leHRWYWx1ZSgpCisJICogQHNlZSAjZ2V0U2VxdWVuY2VNb2RpZmllcigpCisJICogQGdlbmVyYXRlZAorCSAqLworCUVBdHRyaWJ1dGUgZ2V0U2VxdWVuY2VNb2RpZmllcl9OZXh0VmFsdWUoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLlNlcXVlbmNlTW9kaWZpZXIjZ2V0T3JpZ2luYWxWYWx1ZSA8ZW0+T3JpZ2luYWwgVmFsdWU8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxlbT5PcmlnaW5hbCBWYWx1ZTwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5TZXF1ZW5jZU1vZGlmaWVyI2dldE9yaWdpbmFsVmFsdWUoKQorCSAqIEBzZWUgI2dldFNlcXVlbmNlTW9kaWZpZXIoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQXR0cmlidXRlIGdldFNlcXVlbmNlTW9kaWZpZXJfT3JpZ2luYWxWYWx1ZSgpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLlN0cmluZ05PUE1vZGlmaWVyIDxlbT5TdHJpbmcgTk9QIE1vZGlmaWVyPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAnPGVtPlN0cmluZyBOT1AgTW9kaWZpZXI8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuU3RyaW5nTk9QTW9kaWZpZXIKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUNsYXNzIGdldFN0cmluZ05PUE1vZGlmaWVyKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuU3RyaW5nU2VxdWVuY2VNb2RpZmllciA8ZW0+U3RyaW5nIFNlcXVlbmNlIE1vZGlmaWVyPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAnPGVtPlN0cmluZyBTZXF1ZW5jZSBNb2RpZmllcjwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5TdHJpbmdTZXF1ZW5jZU1vZGlmaWVyCisJICogQGdlbmVyYXRlZAorCSAqLworCUVDbGFzcyBnZXRTdHJpbmdTZXF1ZW5jZU1vZGlmaWVyKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSBsaXN0ICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLlN0cmluZ1NlcXVlbmNlTW9kaWZpZXIjZ2V0U2VxdWVuY2UgPGVtPlNlcXVlbmNlPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlIGxpc3QgJzxlbT5TZXF1ZW5jZTwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5TdHJpbmdTZXF1ZW5jZU1vZGlmaWVyI2dldFNlcXVlbmNlKCkKKwkgKiBAc2VlICNnZXRTdHJpbmdTZXF1ZW5jZU1vZGlmaWVyKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUF0dHJpYnV0ZSBnZXRTdHJpbmdTZXF1ZW5jZU1vZGlmaWVyX1NlcXVlbmNlKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuTW9kaWZpYWJsZSA8ZW0+TW9kaWZpYWJsZTwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJzxlbT5Nb2RpZmlhYmxlPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLk1vZGlmaWFibGUKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUNsYXNzIGdldE1vZGlmaWFibGUoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5TaW5nbGVWYWx1ZU1vZGlmaWVyIDxlbT5TaW5nbGUgVmFsdWUgTW9kaWZpZXI8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICc8ZW0+U2luZ2xlIFZhbHVlIE1vZGlmaWVyPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLlNpbmdsZVZhbHVlTW9kaWZpZXIKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUNsYXNzIGdldFNpbmdsZVZhbHVlTW9kaWZpZXIoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5Eb3VibGVNb2RpZmllciA8ZW0+RG91YmxlIE1vZGlmaWVyPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAnPGVtPkRvdWJsZSBNb2RpZmllcjwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5Eb3VibGVNb2RpZmllcgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQ2xhc3MgZ2V0RG91YmxlTW9kaWZpZXIoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLkRvdWJsZU1vZGlmaWVyI2dldFZhbHVlIDxlbT5WYWx1ZTwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPGVtPlZhbHVlPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLkRvdWJsZU1vZGlmaWVyI2dldFZhbHVlKCkKKwkgKiBAc2VlICNnZXREb3VibGVNb2RpZmllcigpCisJICogQGdlbmVyYXRlZAorCSAqLworCUVBdHRyaWJ1dGUgZ2V0RG91YmxlTW9kaWZpZXJfVmFsdWUoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLkRvdWJsZU1vZGlmaWVyI2dldE9yaWdpbmFsVmFsdWUgPGVtPk9yaWdpbmFsIFZhbHVlPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+T3JpZ2luYWwgVmFsdWU8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuRG91YmxlTW9kaWZpZXIjZ2V0T3JpZ2luYWxWYWx1ZSgpCisJICogQHNlZSAjZ2V0RG91YmxlTW9kaWZpZXIoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQXR0cmlidXRlIGdldERvdWJsZU1vZGlmaWVyX09yaWdpbmFsVmFsdWUoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5JbnRlZ2VyTW9kaWZpZXIgPGVtPkludGVnZXIgTW9kaWZpZXI8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICc8ZW0+SW50ZWdlciBNb2RpZmllcjwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5JbnRlZ2VyTW9kaWZpZXIKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUNsYXNzIGdldEludGVnZXJNb2RpZmllcigpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuSW50ZWdlck1vZGlmaWVyI2dldFZhbHVlIDxlbT5WYWx1ZTwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPGVtPlZhbHVlPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLkludGVnZXJNb2RpZmllciNnZXRWYWx1ZSgpCisJICogQHNlZSAjZ2V0SW50ZWdlck1vZGlmaWVyKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUF0dHJpYnV0ZSBnZXRJbnRlZ2VyTW9kaWZpZXJfVmFsdWUoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLkludGVnZXJNb2RpZmllciNnZXRPcmlnaW5hbFZhbHVlIDxlbT5PcmlnaW5hbCBWYWx1ZTwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPGVtPk9yaWdpbmFsIFZhbHVlPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLkludGVnZXJNb2RpZmllciNnZXRPcmlnaW5hbFZhbHVlKCkKKwkgKiBAc2VlICNnZXRJbnRlZ2VyTW9kaWZpZXIoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQXR0cmlidXRlIGdldEludGVnZXJNb2RpZmllcl9PcmlnaW5hbFZhbHVlKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuTG9uZ01vZGlmaWVyIDxlbT5Mb25nIE1vZGlmaWVyPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAnPGVtPkxvbmcgTW9kaWZpZXI8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuTG9uZ01vZGlmaWVyCisJICogQGdlbmVyYXRlZAorCSAqLworCUVDbGFzcyBnZXRMb25nTW9kaWZpZXIoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLkxvbmdNb2RpZmllciNnZXRWYWx1ZSA8ZW0+VmFsdWU8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxlbT5WYWx1ZTwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5Mb25nTW9kaWZpZXIjZ2V0VmFsdWUoKQorCSAqIEBzZWUgI2dldExvbmdNb2RpZmllcigpCisJICogQGdlbmVyYXRlZAorCSAqLworCUVBdHRyaWJ1dGUgZ2V0TG9uZ01vZGlmaWVyX1ZhbHVlKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5Mb25nTW9kaWZpZXIjZ2V0T3JpZ2luYWxWYWx1ZSA8ZW0+T3JpZ2luYWwgVmFsdWU8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxlbT5PcmlnaW5hbCBWYWx1ZTwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5Mb25nTW9kaWZpZXIjZ2V0T3JpZ2luYWxWYWx1ZSgpCisJICogQHNlZSAjZ2V0TG9uZ01vZGlmaWVyKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUF0dHJpYnV0ZSBnZXRMb25nTW9kaWZpZXJfT3JpZ2luYWxWYWx1ZSgpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLlNURU1UaW1lTW9kaWZpZXIgPGVtPlNURU0gVGltZSBNb2RpZmllcjwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJzxlbT5TVEVNIFRpbWUgTW9kaWZpZXI8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuU1RFTVRpbWVNb2RpZmllcgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQ2xhc3MgZ2V0U1RFTVRpbWVNb2RpZmllcigpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSByZWZlcmVuY2UgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuU1RFTVRpbWVNb2RpZmllciNnZXRWYWx1ZSA8ZW0+VmFsdWU8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSByZWZlcmVuY2UgJzxlbT5WYWx1ZTwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5TVEVNVGltZU1vZGlmaWVyI2dldFZhbHVlKCkKKwkgKiBAc2VlICNnZXRTVEVNVGltZU1vZGlmaWVyKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRVJlZmVyZW5jZSBnZXRTVEVNVGltZU1vZGlmaWVyX1ZhbHVlKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIHJlZmVyZW5jZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5TVEVNVGltZU1vZGlmaWVyI2dldE9yaWdpbmFsVmFsdWUgPGVtPk9yaWdpbmFsIFZhbHVlPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgcmVmZXJlbmNlICc8ZW0+T3JpZ2luYWwgVmFsdWU8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuU1RFTVRpbWVNb2RpZmllciNnZXRPcmlnaW5hbFZhbHVlKCkKKwkgKiBAc2VlICNnZXRTVEVNVGltZU1vZGlmaWVyKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRVJlZmVyZW5jZSBnZXRTVEVNVGltZU1vZGlmaWVyX09yaWdpbmFsVmFsdWUoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIGZhY3RvcnkgdGhhdCBjcmVhdGVzIHRoZSBpbnN0YW5jZXMgb2YgdGhlIG1vZGVsLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgZmFjdG9yeSB0aGF0IGNyZWF0ZXMgdGhlIGluc3RhbmNlcyBvZiB0aGUgbW9kZWwuCisJICogQGdlbmVyYXRlZAorCSAqLworCU1vZGlmaWVyRmFjdG9yeSBnZXRNb2RpZmllckZhY3RvcnkoKTsKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogRGVmaW5lcyBsaXRlcmFscyBmb3IgdGhlIG1ldGEgb2JqZWN0cyB0aGF0IHJlcHJlc2VudAorCSAqIDx1bD4KKwkgKiAgIDxsaT5lYWNoIGNsYXNzLDwvbGk+CisJICogICA8bGk+ZWFjaCBmZWF0dXJlIG9mIGVhY2ggY2xhc3MsPC9saT4KKwkgKiAgIDxsaT5lYWNoIGVudW0sPC9saT4KKwkgKiAgIDxsaT5hbmQgZWFjaCBkYXRhIHR5cGU8L2xpPgorCSAqIDwvdWw+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCWludGVyZmFjZSBMaXRlcmFscyB7CisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLmltcGwuRG91YmxlTk9QTW9kaWZpZXJJbXBsIDxlbT5Eb3VibGUgTk9QIE1vZGlmaWVyPC9lbT59JyBjbGFzcy4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLmltcGwuRG91YmxlTk9QTW9kaWZpZXJJbXBsCisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLmltcGwuTW9kaWZpZXJQYWNrYWdlSW1wbCNnZXREb3VibGVOT1BNb2RpZmllcigpCisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVDbGFzcyBET1VCTEVfTk9QX01PRElGSUVSID0gZUlOU1RBTkNFLmdldERvdWJsZU5PUE1vZGlmaWVyKCk7CisKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuaW1wbC5Eb3VibGVSYW5nZU1vZGlmaWVySW1wbCA8ZW0+RG91YmxlIFJhbmdlIE1vZGlmaWVyPC9lbT59JyBjbGFzcy4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLmltcGwuRG91YmxlUmFuZ2VNb2RpZmllckltcGwKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuaW1wbC5Nb2RpZmllclBhY2thZ2VJbXBsI2dldERvdWJsZVJhbmdlTW9kaWZpZXIoKQorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQ2xhc3MgRE9VQkxFX1JBTkdFX01PRElGSUVSID0gZUlOU1RBTkNFLmdldERvdWJsZVJhbmdlTW9kaWZpZXIoKTsKKworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPlN0YXJ0IFZhbHVlPC9iPjwvZW0+JyBhdHRyaWJ1dGUgZmVhdHVyZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVBdHRyaWJ1dGUgRE9VQkxFX1JBTkdFX01PRElGSUVSX19TVEFSVF9WQUxVRSA9IGVJTlNUQU5DRS5nZXREb3VibGVSYW5nZU1vZGlmaWVyX1N0YXJ0VmFsdWUoKTsKKworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPkVuZCBWYWx1ZTwvYj48L2VtPicgYXR0cmlidXRlIGZlYXR1cmUuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQXR0cmlidXRlIERPVUJMRV9SQU5HRV9NT0RJRklFUl9fRU5EX1ZBTFVFID0gZUlOU1RBTkNFLmdldERvdWJsZVJhbmdlTW9kaWZpZXJfRW5kVmFsdWUoKTsKKworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPkluY3JlbWVudDwvYj48L2VtPicgYXR0cmlidXRlIGZlYXR1cmUuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQXR0cmlidXRlIERPVUJMRV9SQU5HRV9NT0RJRklFUl9fSU5DUkVNRU5UID0gZUlOU1RBTkNFLmdldERvdWJsZVJhbmdlTW9kaWZpZXJfSW5jcmVtZW50KCk7CisKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5OZXh0IFZhbHVlPC9iPjwvZW0+JyBhdHRyaWJ1dGUgZmVhdHVyZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVBdHRyaWJ1dGUgRE9VQkxFX1JBTkdFX01PRElGSUVSX19ORVhUX1ZBTFVFID0gZUlOU1RBTkNFLmdldERvdWJsZVJhbmdlTW9kaWZpZXJfTmV4dFZhbHVlKCk7CisKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5PcmlnaW5hbCBWYWx1ZTwvYj48L2VtPicgYXR0cmlidXRlIGZlYXR1cmUuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQXR0cmlidXRlIERPVUJMRV9SQU5HRV9NT0RJRklFUl9fT1JJR0lOQUxfVkFMVUUgPSBlSU5TVEFOQ0UuZ2V0RG91YmxlUmFuZ2VNb2RpZmllcl9PcmlnaW5hbFZhbHVlKCk7CisKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuaW1wbC5Eb3VibGVTZXF1ZW5jZU1vZGlmaWVySW1wbCA8ZW0+RG91YmxlIFNlcXVlbmNlIE1vZGlmaWVyPC9lbT59JyBjbGFzcy4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLmltcGwuRG91YmxlU2VxdWVuY2VNb2RpZmllckltcGwKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuaW1wbC5Nb2RpZmllclBhY2thZ2VJbXBsI2dldERvdWJsZVNlcXVlbmNlTW9kaWZpZXIoKQorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQ2xhc3MgRE9VQkxFX1NFUVVFTkNFX01PRElGSUVSID0gZUlOU1RBTkNFLmdldERvdWJsZVNlcXVlbmNlTW9kaWZpZXIoKTsKKworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPlNlcXVlbmNlPC9iPjwvZW0+JyBhdHRyaWJ1dGUgbGlzdCBmZWF0dXJlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUF0dHJpYnV0ZSBET1VCTEVfU0VRVUVOQ0VfTU9ESUZJRVJfX1NFUVVFTkNFID0gZUlOU1RBTkNFLmdldERvdWJsZVNlcXVlbmNlTW9kaWZpZXJfU2VxdWVuY2UoKTsKKworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5pbXBsLkZlYXR1cmVNb2RpZmllckltcGwgPGVtPkZlYXR1cmUgTW9kaWZpZXI8L2VtPn0nIGNsYXNzLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuaW1wbC5GZWF0dXJlTW9kaWZpZXJJbXBsCisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLmltcGwuTW9kaWZpZXJQYWNrYWdlSW1wbCNnZXRGZWF0dXJlTW9kaWZpZXIoKQorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQ2xhc3MgRkVBVFVSRV9NT0RJRklFUiA9IGVJTlNUQU5DRS5nZXRGZWF0dXJlTW9kaWZpZXIoKTsKKworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPlRhcmdldDwvYj48L2VtPicgcmVmZXJlbmNlIGZlYXR1cmUuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFUmVmZXJlbmNlIEZFQVRVUkVfTU9ESUZJRVJfX1RBUkdFVCA9IGVJTlNUQU5DRS5nZXRGZWF0dXJlTW9kaWZpZXJfVGFyZ2V0KCk7CisKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5FU3RydWN0dXJhbCBGZWF0dXJlPC9iPjwvZW0+JyByZWZlcmVuY2UgZmVhdHVyZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVSZWZlcmVuY2UgRkVBVFVSRV9NT0RJRklFUl9fRVNUUlVDVFVSQUxfRkVBVFVSRSA9IGVJTlNUQU5DRS5nZXRGZWF0dXJlTW9kaWZpZXJfRVN0cnVjdHVyYWxGZWF0dXJlKCk7CisKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5GZWF0dXJlIE5hbWU8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUF0dHJpYnV0ZSBGRUFUVVJFX01PRElGSUVSX19GRUFUVVJFX05BTUUgPSBlSU5TVEFOQ0UuZ2V0RmVhdHVyZU1vZGlmaWVyX0ZlYXR1cmVOYW1lKCk7CisKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5GZWF0dXJlIElkPC9iPjwvZW0+JyBhdHRyaWJ1dGUgZmVhdHVyZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVBdHRyaWJ1dGUgRkVBVFVSRV9NT0RJRklFUl9fRkVBVFVSRV9JRCA9IGVJTlNUQU5DRS5nZXRGZWF0dXJlTW9kaWZpZXJfRmVhdHVyZUlkKCk7CisKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5DdXJyZW50IFZhbHVlIFRleHQ8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUF0dHJpYnV0ZSBGRUFUVVJFX01PRElGSUVSX19DVVJSRU5UX1ZBTFVFX1RFWFQgPSBlSU5TVEFOQ0UuZ2V0RmVhdHVyZU1vZGlmaWVyX0N1cnJlbnRWYWx1ZVRleHQoKTsKKworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPkNvbXBsZXRlPC9iPjwvZW0+JyBhdHRyaWJ1dGUgZmVhdHVyZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVBdHRyaWJ1dGUgRkVBVFVSRV9NT0RJRklFUl9fQ09NUExFVEUgPSBlSU5TVEFOQ0UuZ2V0RmVhdHVyZU1vZGlmaWVyX0NvbXBsZXRlKCk7CisKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuaW1wbC5JbnRlZ2VyTk9QTW9kaWZpZXJJbXBsIDxlbT5JbnRlZ2VyIE5PUCBNb2RpZmllcjwvZW0+fScgY2xhc3MuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5pbXBsLkludGVnZXJOT1BNb2RpZmllckltcGwKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuaW1wbC5Nb2RpZmllclBhY2thZ2VJbXBsI2dldEludGVnZXJOT1BNb2RpZmllcigpCisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVDbGFzcyBJTlRFR0VSX05PUF9NT0RJRklFUiA9IGVJTlNUQU5DRS5nZXRJbnRlZ2VyTk9QTW9kaWZpZXIoKTsKKworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5pbXBsLkludGVnZXJSYW5nZU1vZGlmaWVySW1wbCA8ZW0+SW50ZWdlciBSYW5nZSBNb2RpZmllcjwvZW0+fScgY2xhc3MuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5pbXBsLkludGVnZXJSYW5nZU1vZGlmaWVySW1wbAorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5pbXBsLk1vZGlmaWVyUGFja2FnZUltcGwjZ2V0SW50ZWdlclJhbmdlTW9kaWZpZXIoKQorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQ2xhc3MgSU5URUdFUl9SQU5HRV9NT0RJRklFUiA9IGVJTlNUQU5DRS5nZXRJbnRlZ2VyUmFuZ2VNb2RpZmllcigpOworCisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+U3RhcnQgVmFsdWU8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUF0dHJpYnV0ZSBJTlRFR0VSX1JBTkdFX01PRElGSUVSX19TVEFSVF9WQUxVRSA9IGVJTlNUQU5DRS5nZXRJbnRlZ2VyUmFuZ2VNb2RpZmllcl9TdGFydFZhbHVlKCk7CisKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5FbmQgVmFsdWU8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUF0dHJpYnV0ZSBJTlRFR0VSX1JBTkdFX01PRElGSUVSX19FTkRfVkFMVUUgPSBlSU5TVEFOQ0UuZ2V0SW50ZWdlclJhbmdlTW9kaWZpZXJfRW5kVmFsdWUoKTsKKworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPkluY3JlbWVudDwvYj48L2VtPicgYXR0cmlidXRlIGZlYXR1cmUuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQXR0cmlidXRlIElOVEVHRVJfUkFOR0VfTU9ESUZJRVJfX0lOQ1JFTUVOVCA9IGVJTlNUQU5DRS5nZXRJbnRlZ2VyUmFuZ2VNb2RpZmllcl9JbmNyZW1lbnQoKTsKKworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPk5leHQgVmFsdWU8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUF0dHJpYnV0ZSBJTlRFR0VSX1JBTkdFX01PRElGSUVSX19ORVhUX1ZBTFVFID0gZUlOU1RBTkNFLmdldEludGVnZXJSYW5nZU1vZGlmaWVyX05leHRWYWx1ZSgpOworCisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+T3JpZ2luYWwgVmFsdWU8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUF0dHJpYnV0ZSBJTlRFR0VSX1JBTkdFX01PRElGSUVSX19PUklHSU5BTF9WQUxVRSA9IGVJTlNUQU5DRS5nZXRJbnRlZ2VyUmFuZ2VNb2RpZmllcl9PcmlnaW5hbFZhbHVlKCk7CisKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuaW1wbC5JbnRlZ2VyU2VxdWVuY2VNb2RpZmllckltcGwgPGVtPkludGVnZXIgU2VxdWVuY2UgTW9kaWZpZXI8L2VtPn0nIGNsYXNzLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuaW1wbC5JbnRlZ2VyU2VxdWVuY2VNb2RpZmllckltcGwKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuaW1wbC5Nb2RpZmllclBhY2thZ2VJbXBsI2dldEludGVnZXJTZXF1ZW5jZU1vZGlmaWVyKCkKKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUNsYXNzIElOVEVHRVJfU0VRVUVOQ0VfTU9ESUZJRVIgPSBlSU5TVEFOQ0UuZ2V0SW50ZWdlclNlcXVlbmNlTW9kaWZpZXIoKTsKKworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPlNlcXVlbmNlPC9iPjwvZW0+JyBhdHRyaWJ1dGUgbGlzdCBmZWF0dXJlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUF0dHJpYnV0ZSBJTlRFR0VSX1NFUVVFTkNFX01PRElGSUVSX19TRVFVRU5DRSA9IGVJTlNUQU5DRS5nZXRJbnRlZ2VyU2VxdWVuY2VNb2RpZmllcl9TZXF1ZW5jZSgpOworCisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLmltcGwuTG9uZ05PUE1vZGlmaWVySW1wbCA8ZW0+TG9uZyBOT1AgTW9kaWZpZXI8L2VtPn0nIGNsYXNzLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuaW1wbC5Mb25nTk9QTW9kaWZpZXJJbXBsCisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLmltcGwuTW9kaWZpZXJQYWNrYWdlSW1wbCNnZXRMb25nTk9QTW9kaWZpZXIoKQorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQ2xhc3MgTE9OR19OT1BfTU9ESUZJRVIgPSBlSU5TVEFOQ0UuZ2V0TG9uZ05PUE1vZGlmaWVyKCk7CisKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuaW1wbC5Mb25nUmFuZ2VNb2RpZmllckltcGwgPGVtPkxvbmcgUmFuZ2UgTW9kaWZpZXI8L2VtPn0nIGNsYXNzLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuaW1wbC5Mb25nUmFuZ2VNb2RpZmllckltcGwKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuaW1wbC5Nb2RpZmllclBhY2thZ2VJbXBsI2dldExvbmdSYW5nZU1vZGlmaWVyKCkKKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUNsYXNzIExPTkdfUkFOR0VfTU9ESUZJRVIgPSBlSU5TVEFOQ0UuZ2V0TG9uZ1JhbmdlTW9kaWZpZXIoKTsKKworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPlN0YXJ0IFZhbHVlPC9iPjwvZW0+JyBhdHRyaWJ1dGUgZmVhdHVyZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVBdHRyaWJ1dGUgTE9OR19SQU5HRV9NT0RJRklFUl9fU1RBUlRfVkFMVUUgPSBlSU5TVEFOQ0UuZ2V0TG9uZ1JhbmdlTW9kaWZpZXJfU3RhcnRWYWx1ZSgpOworCisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+RW5kIFZhbHVlPC9iPjwvZW0+JyBhdHRyaWJ1dGUgZmVhdHVyZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVBdHRyaWJ1dGUgTE9OR19SQU5HRV9NT0RJRklFUl9fRU5EX1ZBTFVFID0gZUlOU1RBTkNFLmdldExvbmdSYW5nZU1vZGlmaWVyX0VuZFZhbHVlKCk7CisKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5JbmNyZW1lbnQ8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUF0dHJpYnV0ZSBMT05HX1JBTkdFX01PRElGSUVSX19JTkNSRU1FTlQgPSBlSU5TVEFOQ0UuZ2V0TG9uZ1JhbmdlTW9kaWZpZXJfSW5jcmVtZW50KCk7CisKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5OZXh0IFZhbHVlPC9iPjwvZW0+JyBhdHRyaWJ1dGUgZmVhdHVyZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVBdHRyaWJ1dGUgTE9OR19SQU5HRV9NT0RJRklFUl9fTkVYVF9WQUxVRSA9IGVJTlNUQU5DRS5nZXRMb25nUmFuZ2VNb2RpZmllcl9OZXh0VmFsdWUoKTsKKworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPk9yaWdpbmFsIFZhbHVlPC9iPjwvZW0+JyBhdHRyaWJ1dGUgZmVhdHVyZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVBdHRyaWJ1dGUgTE9OR19SQU5HRV9NT0RJRklFUl9fT1JJR0lOQUxfVkFMVUUgPSBlSU5TVEFOQ0UuZ2V0TG9uZ1JhbmdlTW9kaWZpZXJfT3JpZ2luYWxWYWx1ZSgpOworCisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLmltcGwuTG9uZ1NlcXVlbmNlTW9kaWZpZXJJbXBsIDxlbT5Mb25nIFNlcXVlbmNlIE1vZGlmaWVyPC9lbT59JyBjbGFzcy4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLmltcGwuTG9uZ1NlcXVlbmNlTW9kaWZpZXJJbXBsCisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLmltcGwuTW9kaWZpZXJQYWNrYWdlSW1wbCNnZXRMb25nU2VxdWVuY2VNb2RpZmllcigpCisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVDbGFzcyBMT05HX1NFUVVFTkNFX01PRElGSUVSID0gZUlOU1RBTkNFLmdldExvbmdTZXF1ZW5jZU1vZGlmaWVyKCk7CisKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5TZXF1ZW5jZTwvYj48L2VtPicgYXR0cmlidXRlIGxpc3QgZmVhdHVyZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVBdHRyaWJ1dGUgTE9OR19TRVFVRU5DRV9NT0RJRklFUl9fU0VRVUVOQ0UgPSBlSU5TVEFOQ0UuZ2V0TG9uZ1NlcXVlbmNlTW9kaWZpZXJfU2VxdWVuY2UoKTsKKworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5pbXBsLk1vZGlmaWVySW1wbCA8ZW0+TW9kaWZpZXI8L2VtPn0nIGNsYXNzLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuaW1wbC5Nb2RpZmllckltcGwKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuaW1wbC5Nb2RpZmllclBhY2thZ2VJbXBsI2dldE1vZGlmaWVyKCkKKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUNsYXNzIE1PRElGSUVSID0gZUlOU1RBTkNFLmdldE1vZGlmaWVyKCk7CisKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5UYXJnZXQgVVJJPC9iPjwvZW0+JyBhdHRyaWJ1dGUgZmVhdHVyZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVBdHRyaWJ1dGUgTU9ESUZJRVJfX1RBUkdFVF9VUkkgPSBlSU5TVEFOQ0UuZ2V0TW9kaWZpZXJfVGFyZ2V0VVJJKCk7CisKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5GZWF0dXJlIE1vZGlmaWVyczwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3QgZmVhdHVyZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVSZWZlcmVuY2UgTU9ESUZJRVJfX0ZFQVRVUkVfTU9ESUZJRVJTID0gZUlOU1RBTkNFLmdldE1vZGlmaWVyX0ZlYXR1cmVNb2RpZmllcnMoKTsKKworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPkNvbXBsZXRlPC9iPjwvZW0+JyBhdHRyaWJ1dGUgZmVhdHVyZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVBdHRyaWJ1dGUgTU9ESUZJRVJfX0NPTVBMRVRFID0gZUlOU1RBTkNFLmdldE1vZGlmaWVyX0NvbXBsZXRlKCk7CisKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuaW1wbC5OT1BNb2RpZmllckltcGwgPGVtPk5PUCBNb2RpZmllcjwvZW0+fScgY2xhc3MuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5pbXBsLk5PUE1vZGlmaWVySW1wbAorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5pbXBsLk1vZGlmaWVyUGFja2FnZUltcGwjZ2V0Tk9QTW9kaWZpZXIoKQorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQ2xhc3MgTk9QX01PRElGSUVSID0gZUlOU1RBTkNFLmdldE5PUE1vZGlmaWVyKCk7CisKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuaW1wbC5SYW5nZU1vZGlmaWVySW1wbCA8ZW0+UmFuZ2UgTW9kaWZpZXI8L2VtPn0nIGNsYXNzLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuaW1wbC5SYW5nZU1vZGlmaWVySW1wbAorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5pbXBsLk1vZGlmaWVyUGFja2FnZUltcGwjZ2V0UmFuZ2VNb2RpZmllcigpCisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVDbGFzcyBSQU5HRV9NT0RJRklFUiA9IGVJTlNUQU5DRS5nZXRSYW5nZU1vZGlmaWVyKCk7CisKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuaW1wbC5TVEVNVGltZU5PUE1vZGlmaWVySW1wbCA8ZW0+U1RFTSBUaW1lIE5PUCBNb2RpZmllcjwvZW0+fScgY2xhc3MuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5pbXBsLlNURU1UaW1lTk9QTW9kaWZpZXJJbXBsCisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLmltcGwuTW9kaWZpZXJQYWNrYWdlSW1wbCNnZXRTVEVNVGltZU5PUE1vZGlmaWVyKCkKKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUNsYXNzIFNURU1fVElNRV9OT1BfTU9ESUZJRVIgPSBlSU5TVEFOQ0UuZ2V0U1RFTVRpbWVOT1BNb2RpZmllcigpOworCisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLmltcGwuU1RFTVRpbWVSYW5nZU1vZGlmaWVySW1wbCA8ZW0+U1RFTSBUaW1lIFJhbmdlIE1vZGlmaWVyPC9lbT59JyBjbGFzcy4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLmltcGwuU1RFTVRpbWVSYW5nZU1vZGlmaWVySW1wbAorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5pbXBsLk1vZGlmaWVyUGFja2FnZUltcGwjZ2V0U1RFTVRpbWVSYW5nZU1vZGlmaWVyKCkKKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUNsYXNzIFNURU1fVElNRV9SQU5HRV9NT0RJRklFUiA9IGVJTlNUQU5DRS5nZXRTVEVNVGltZVJhbmdlTW9kaWZpZXIoKTsKKworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPlN0YXJ0IFZhbHVlPC9iPjwvZW0+JyByZWZlcmVuY2UgZmVhdHVyZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVSZWZlcmVuY2UgU1RFTV9USU1FX1JBTkdFX01PRElGSUVSX19TVEFSVF9WQUxVRSA9IGVJTlNUQU5DRS5nZXRTVEVNVGltZVJhbmdlTW9kaWZpZXJfU3RhcnRWYWx1ZSgpOworCisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+RW5kIFZhbHVlPC9iPjwvZW0+JyByZWZlcmVuY2UgZmVhdHVyZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVSZWZlcmVuY2UgU1RFTV9USU1FX1JBTkdFX01PRElGSUVSX19FTkRfVkFMVUUgPSBlSU5TVEFOQ0UuZ2V0U1RFTVRpbWVSYW5nZU1vZGlmaWVyX0VuZFZhbHVlKCk7CisKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5JbmNyZW1lbnQ8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUF0dHJpYnV0ZSBTVEVNX1RJTUVfUkFOR0VfTU9ESUZJRVJfX0lOQ1JFTUVOVCA9IGVJTlNUQU5DRS5nZXRTVEVNVGltZVJhbmdlTW9kaWZpZXJfSW5jcmVtZW50KCk7CisKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5OZXh0IFZhbHVlPC9iPjwvZW0+JyByZWZlcmVuY2UgZmVhdHVyZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVSZWZlcmVuY2UgU1RFTV9USU1FX1JBTkdFX01PRElGSUVSX19ORVhUX1ZBTFVFID0gZUlOU1RBTkNFLmdldFNURU1UaW1lUmFuZ2VNb2RpZmllcl9OZXh0VmFsdWUoKTsKKworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPk9yaWdpbmFsIFZhbHVlPC9iPjwvZW0+JyByZWZlcmVuY2UgZmVhdHVyZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVSZWZlcmVuY2UgU1RFTV9USU1FX1JBTkdFX01PRElGSUVSX19PUklHSU5BTF9WQUxVRSA9IGVJTlNUQU5DRS5nZXRTVEVNVGltZVJhbmdlTW9kaWZpZXJfT3JpZ2luYWxWYWx1ZSgpOworCisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLmltcGwuU1RFTVRpbWVTZXF1ZW5jZU1vZGlmaWVySW1wbCA8ZW0+U1RFTSBUaW1lIFNlcXVlbmNlIE1vZGlmaWVyPC9lbT59JyBjbGFzcy4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLmltcGwuU1RFTVRpbWVTZXF1ZW5jZU1vZGlmaWVySW1wbAorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5pbXBsLk1vZGlmaWVyUGFja2FnZUltcGwjZ2V0U1RFTVRpbWVTZXF1ZW5jZU1vZGlmaWVyKCkKKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUNsYXNzIFNURU1fVElNRV9TRVFVRU5DRV9NT0RJRklFUiA9IGVJTlNUQU5DRS5nZXRTVEVNVGltZVNlcXVlbmNlTW9kaWZpZXIoKTsKKworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPlNlcXVlbmNlPC9iPjwvZW0+JyByZWZlcmVuY2UgbGlzdCBmZWF0dXJlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRVJlZmVyZW5jZSBTVEVNX1RJTUVfU0VRVUVOQ0VfTU9ESUZJRVJfX1NFUVVFTkNFID0gZUlOU1RBTkNFLmdldFNURU1UaW1lU2VxdWVuY2VNb2RpZmllcl9TZXF1ZW5jZSgpOworCisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLmltcGwuU2VxdWVuY2VNb2RpZmllckltcGwgPGVtPlNlcXVlbmNlIE1vZGlmaWVyPC9lbT59JyBjbGFzcy4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLmltcGwuU2VxdWVuY2VNb2RpZmllckltcGwKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuaW1wbC5Nb2RpZmllclBhY2thZ2VJbXBsI2dldFNlcXVlbmNlTW9kaWZpZXIoKQorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQ2xhc3MgU0VRVUVOQ0VfTU9ESUZJRVIgPSBlSU5TVEFOQ0UuZ2V0U2VxdWVuY2VNb2RpZmllcigpOworCisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+U2VxdWVuY2UgU2l6ZTwvYj48L2VtPicgYXR0cmlidXRlIGZlYXR1cmUuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQXR0cmlidXRlIFNFUVVFTkNFX01PRElGSUVSX19TRVFVRU5DRV9TSVpFID0gZUlOU1RBTkNFLmdldFNlcXVlbmNlTW9kaWZpZXJfU2VxdWVuY2VTaXplKCk7CisKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5DdXJyZW50IFNlcXVlbmNlIEluZGV4PC9iPjwvZW0+JyBhdHRyaWJ1dGUgZmVhdHVyZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVBdHRyaWJ1dGUgU0VRVUVOQ0VfTU9ESUZJRVJfX0NVUlJFTlRfU0VRVUVOQ0VfSU5ERVggPSBlSU5TVEFOQ0UuZ2V0U2VxdWVuY2VNb2RpZmllcl9DdXJyZW50U2VxdWVuY2VJbmRleCgpOworCisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+TmV4dCBWYWx1ZTwvYj48L2VtPicgYXR0cmlidXRlIGZlYXR1cmUuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQXR0cmlidXRlIFNFUVVFTkNFX01PRElGSUVSX19ORVhUX1ZBTFVFID0gZUlOU1RBTkNFLmdldFNlcXVlbmNlTW9kaWZpZXJfTmV4dFZhbHVlKCk7CisKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5PcmlnaW5hbCBWYWx1ZTwvYj48L2VtPicgYXR0cmlidXRlIGZlYXR1cmUuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQXR0cmlidXRlIFNFUVVFTkNFX01PRElGSUVSX19PUklHSU5BTF9WQUxVRSA9IGVJTlNUQU5DRS5nZXRTZXF1ZW5jZU1vZGlmaWVyX09yaWdpbmFsVmFsdWUoKTsKKworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5pbXBsLlN0cmluZ05PUE1vZGlmaWVySW1wbCA8ZW0+U3RyaW5nIE5PUCBNb2RpZmllcjwvZW0+fScgY2xhc3MuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5pbXBsLlN0cmluZ05PUE1vZGlmaWVySW1wbAorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5pbXBsLk1vZGlmaWVyUGFja2FnZUltcGwjZ2V0U3RyaW5nTk9QTW9kaWZpZXIoKQorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQ2xhc3MgU1RSSU5HX05PUF9NT0RJRklFUiA9IGVJTlNUQU5DRS5nZXRTdHJpbmdOT1BNb2RpZmllcigpOworCisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLmltcGwuU3RyaW5nU2VxdWVuY2VNb2RpZmllckltcGwgPGVtPlN0cmluZyBTZXF1ZW5jZSBNb2RpZmllcjwvZW0+fScgY2xhc3MuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5pbXBsLlN0cmluZ1NlcXVlbmNlTW9kaWZpZXJJbXBsCisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLmltcGwuTW9kaWZpZXJQYWNrYWdlSW1wbCNnZXRTdHJpbmdTZXF1ZW5jZU1vZGlmaWVyKCkKKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUNsYXNzIFNUUklOR19TRVFVRU5DRV9NT0RJRklFUiA9IGVJTlNUQU5DRS5nZXRTdHJpbmdTZXF1ZW5jZU1vZGlmaWVyKCk7CisKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5TZXF1ZW5jZTwvYj48L2VtPicgYXR0cmlidXRlIGxpc3QgZmVhdHVyZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVBdHRyaWJ1dGUgU1RSSU5HX1NFUVVFTkNFX01PRElGSUVSX19TRVFVRU5DRSA9IGVJTlNUQU5DRS5nZXRTdHJpbmdTZXF1ZW5jZU1vZGlmaWVyX1NlcXVlbmNlKCk7CisKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuTW9kaWZpYWJsZSA8ZW0+TW9kaWZpYWJsZTwvZW0+fScgY2xhc3MuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5Nb2RpZmlhYmxlCisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLmltcGwuTW9kaWZpZXJQYWNrYWdlSW1wbCNnZXRNb2RpZmlhYmxlKCkKKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUNsYXNzIE1PRElGSUFCTEUgPSBlSU5TVEFOQ0UuZ2V0TW9kaWZpYWJsZSgpOworCisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLmltcGwuU2luZ2xlVmFsdWVNb2RpZmllckltcGwgPGVtPlNpbmdsZSBWYWx1ZSBNb2RpZmllcjwvZW0+fScgY2xhc3MuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5pbXBsLlNpbmdsZVZhbHVlTW9kaWZpZXJJbXBsCisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLmltcGwuTW9kaWZpZXJQYWNrYWdlSW1wbCNnZXRTaW5nbGVWYWx1ZU1vZGlmaWVyKCkKKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUNsYXNzIFNJTkdMRV9WQUxVRV9NT0RJRklFUiA9IGVJTlNUQU5DRS5nZXRTaW5nbGVWYWx1ZU1vZGlmaWVyKCk7CisKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuaW1wbC5Eb3VibGVNb2RpZmllckltcGwgPGVtPkRvdWJsZSBNb2RpZmllcjwvZW0+fScgY2xhc3MuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5pbXBsLkRvdWJsZU1vZGlmaWVySW1wbAorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5pbXBsLk1vZGlmaWVyUGFja2FnZUltcGwjZ2V0RG91YmxlTW9kaWZpZXIoKQorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQ2xhc3MgRE9VQkxFX01PRElGSUVSID0gZUlOU1RBTkNFLmdldERvdWJsZU1vZGlmaWVyKCk7CisKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5WYWx1ZTwvYj48L2VtPicgYXR0cmlidXRlIGZlYXR1cmUuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQXR0cmlidXRlIERPVUJMRV9NT0RJRklFUl9fVkFMVUUgPSBlSU5TVEFOQ0UuZ2V0RG91YmxlTW9kaWZpZXJfVmFsdWUoKTsKKworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPk9yaWdpbmFsIFZhbHVlPC9iPjwvZW0+JyBhdHRyaWJ1dGUgZmVhdHVyZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVBdHRyaWJ1dGUgRE9VQkxFX01PRElGSUVSX19PUklHSU5BTF9WQUxVRSA9IGVJTlNUQU5DRS5nZXREb3VibGVNb2RpZmllcl9PcmlnaW5hbFZhbHVlKCk7CisKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuaW1wbC5JbnRlZ2VyTW9kaWZpZXJJbXBsIDxlbT5JbnRlZ2VyIE1vZGlmaWVyPC9lbT59JyBjbGFzcy4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLmltcGwuSW50ZWdlck1vZGlmaWVySW1wbAorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5pbXBsLk1vZGlmaWVyUGFja2FnZUltcGwjZ2V0SW50ZWdlck1vZGlmaWVyKCkKKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUNsYXNzIElOVEVHRVJfTU9ESUZJRVIgPSBlSU5TVEFOQ0UuZ2V0SW50ZWdlck1vZGlmaWVyKCk7CisKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5WYWx1ZTwvYj48L2VtPicgYXR0cmlidXRlIGZlYXR1cmUuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQXR0cmlidXRlIElOVEVHRVJfTU9ESUZJRVJfX1ZBTFVFID0gZUlOU1RBTkNFLmdldEludGVnZXJNb2RpZmllcl9WYWx1ZSgpOworCisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+T3JpZ2luYWwgVmFsdWU8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUF0dHJpYnV0ZSBJTlRFR0VSX01PRElGSUVSX19PUklHSU5BTF9WQUxVRSA9IGVJTlNUQU5DRS5nZXRJbnRlZ2VyTW9kaWZpZXJfT3JpZ2luYWxWYWx1ZSgpOworCisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLmltcGwuTG9uZ01vZGlmaWVySW1wbCA8ZW0+TG9uZyBNb2RpZmllcjwvZW0+fScgY2xhc3MuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5pbXBsLkxvbmdNb2RpZmllckltcGwKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuaW1wbC5Nb2RpZmllclBhY2thZ2VJbXBsI2dldExvbmdNb2RpZmllcigpCisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVDbGFzcyBMT05HX01PRElGSUVSID0gZUlOU1RBTkNFLmdldExvbmdNb2RpZmllcigpOworCisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+VmFsdWU8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUF0dHJpYnV0ZSBMT05HX01PRElGSUVSX19WQUxVRSA9IGVJTlNUQU5DRS5nZXRMb25nTW9kaWZpZXJfVmFsdWUoKTsKKworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPk9yaWdpbmFsIFZhbHVlPC9iPjwvZW0+JyBhdHRyaWJ1dGUgZmVhdHVyZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVBdHRyaWJ1dGUgTE9OR19NT0RJRklFUl9fT1JJR0lOQUxfVkFMVUUgPSBlSU5TVEFOQ0UuZ2V0TG9uZ01vZGlmaWVyX09yaWdpbmFsVmFsdWUoKTsKKworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5pbXBsLlNURU1UaW1lTW9kaWZpZXJJbXBsIDxlbT5TVEVNIFRpbWUgTW9kaWZpZXI8L2VtPn0nIGNsYXNzLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuaW1wbC5TVEVNVGltZU1vZGlmaWVySW1wbAorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5pbXBsLk1vZGlmaWVyUGFja2FnZUltcGwjZ2V0U1RFTVRpbWVNb2RpZmllcigpCisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVDbGFzcyBTVEVNX1RJTUVfTU9ESUZJRVIgPSBlSU5TVEFOQ0UuZ2V0U1RFTVRpbWVNb2RpZmllcigpOworCisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+VmFsdWU8L2I+PC9lbT4nIHJlZmVyZW5jZSBmZWF0dXJlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRVJlZmVyZW5jZSBTVEVNX1RJTUVfTU9ESUZJRVJfX1ZBTFVFID0gZUlOU1RBTkNFLmdldFNURU1UaW1lTW9kaWZpZXJfVmFsdWUoKTsKKworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPk9yaWdpbmFsIFZhbHVlPC9iPjwvZW0+JyByZWZlcmVuY2UgZmVhdHVyZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVSZWZlcmVuY2UgU1RFTV9USU1FX01PRElGSUVSX19PUklHSU5BTF9WQUxVRSA9IGVJTlNUQU5DRS5nZXRTVEVNVGltZU1vZGlmaWVyX09yaWdpbmFsVmFsdWUoKTsKKworCX0KKworfSAvL01vZGlmaWVyUGFja2FnZQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9tb2RpZmllci9OT1BNb2RpZmllci5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9tb2RpZmllci9OT1BNb2RpZmllci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNhOTFkZTYKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL21vZGlmaWVyL05PUE1vZGlmaWVyLmphdmEKQEAgLTAsMCArMSwyNCBAQAorLy8gTk9QTW9kaWZpZXIuamF2YQorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXI7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioKKyAqIEEgPGNvZGU+Tk9QTW9kaWZpZXI8L2NvZGU+IGRvZXMgbm90aGluZy4gSXQgaXMgdXNlZnVsIGZvciB0aGUgR1VJCisgKiBjb21wb25lbnRzIHRoYXQgZWRpdCB7QGxpbmsgRmVhdHVyZU1vZGlmaWVyfXMgdG8gaGF2ZSBvbmUgdGhhdCBpcyBhdmFpbGFibGUKKyAqIGZvciB0aGUgY2FzZSB3aGVuIG5vIHtAbGluayBGZWF0dXJlTW9kaWZpZXJ9IGlzIHNwZWNpZmllZCBieSB0aGUgdXNlci4KKyAqIAorICogQG1vZGVsCisgKi8KK3B1YmxpYyBpbnRlcmZhY2UgTk9QTW9kaWZpZXIgZXh0ZW5kcyBGZWF0dXJlTW9kaWZpZXIgeworCS8vIE5vdGhpbmcKK30gLy8gTk9QTW9kaWZpZXIKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvbW9kaWZpZXIvUmFuZ2VNb2RpZmllci5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9tb2RpZmllci9SYW5nZU1vZGlmaWVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzJkMzM4YgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvbW9kaWZpZXIvUmFuZ2VNb2RpZmllci5qYXZhCkBAIC0wLDAgKzEsMjkgQEAKKy8vIFJhbmdlTW9kaWZpZXIuamF2YQorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXI7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVTdHJ1Y3R1cmFsRmVhdHVyZTsKKworLyoqCisgKiBBIDxjb2RlPlJhbmdlTW9kaWZpZXI8L2NvZGU+IG1vZGlmaWVzIHRoZSB2YWx1ZSBvZiBhIG51bWVyaWMKKyAqIHtAbGluayBFU3RydWN0dXJhbEZlYXR1cmV9IG92ZXIgYSBzcGVjaWZpYyByYW5nZSBvZiB2YWx1ZXMuIEEKKyAqIDxjb2RlPlJhbmdlTW9kaWZpZXI8L2NvZGU+IHNwZWNpZmllcyBhIHN0YXJ0aW5nIHZhbHVlLCBhbiBlbmRpbmcgdmFsdWUgYW5kIGFuCisgKiBpbmNyZW1lbnQuIFRoZSBpbmNyZW1lbnQgaXMgc3VjY2Vzc2l2ZWx5IGFwcGxpZWQgdG8gdGhlIHN0YXJ0aW5nIHZhbHVlIHVudGlsCisgKiB0aGUgcmVzdWx0IGV4Y2VlZHMgdGhlIGVuZCB2YWx1ZS4gSWYgdGhlIGluY3JlbWVudCBpcyBuZWdhdGl2ZSwgdGhlIGVuZCB2YWx1ZQorICogbXVzdCBiZSBsZXNzIHRoYW4gdGhlIHN0YXJ0aW5nIHZhbHVlLgorICogCisgKiBAbW9kZWwgYWJzdHJhY3Q9InRydWUiCisgKi8KK3B1YmxpYyBpbnRlcmZhY2UgUmFuZ2VNb2RpZmllciBleHRlbmRzIEZlYXR1cmVNb2RpZmllciB7CisJLy8gTm90aGluZworfSAvLyBSYW5nZU1vZGlmaWVyCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL21vZGlmaWVyL1NURU1UaW1lTW9kaWZpZXIuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvbW9kaWZpZXIvU1RFTVRpbWVNb2RpZmllci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMyYWQ5YzcKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL21vZGlmaWVyL1NURU1UaW1lTW9kaWZpZXIuamF2YQpAQCAtMCwwICsxLDg3IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllcjsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuU1RFTVRpbWU7CisKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogQSByZXByZXNlbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+U1RFTSBUaW1lIE1vZGlmaWVyPC9iPjwvZW0+Jy4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICoKKyAqIDxwPgorICogVGhlIGZvbGxvd2luZyBmZWF0dXJlcyBhcmUgc3VwcG9ydGVkOgorICogPHVsPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5TVEVNVGltZU1vZGlmaWVyI2dldFZhbHVlIDxlbT5WYWx1ZTwvZW0+fTwvbGk+CisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLlNURU1UaW1lTW9kaWZpZXIjZ2V0T3JpZ2luYWxWYWx1ZSA8ZW0+T3JpZ2luYWwgVmFsdWU8L2VtPn08L2xpPgorICogPC91bD4KKyAqIDwvcD4KKyAqCisgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5Nb2RpZmllclBhY2thZ2UjZ2V0U1RFTVRpbWVNb2RpZmllcigpCisgKiBAbW9kZWwKKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGludGVyZmFjZSBTVEVNVGltZU1vZGlmaWVyIGV4dGVuZHMgU2luZ2xlVmFsdWVNb2RpZmllciB7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5WYWx1ZTwvYj48L2VtPicgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPHA+CisJICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+VmFsdWU8L2VtPicgcmVmZXJlbmNlIGlzbid0IGNsZWFyLAorCSAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4KKwkgKiA8L3A+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+VmFsdWU8L2VtPicgcmVmZXJlbmNlLgorCSAqIEBzZWUgI3NldFZhbHVlKFNURU1UaW1lKQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLk1vZGlmaWVyUGFja2FnZSNnZXRTVEVNVGltZU1vZGlmaWVyX1ZhbHVlKCkKKwkgKiBAbW9kZWwKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJU1RFTVRpbWUgZ2V0VmFsdWUoKTsKKworCS8qKgorCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5TVEVNVGltZU1vZGlmaWVyI2dldFZhbHVlIDxlbT5WYWx1ZTwvZW0+fScgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+VmFsdWU8L2VtPicgcmVmZXJlbmNlLgorCSAqIEBzZWUgI2dldFZhbHVlKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJdm9pZCBzZXRWYWx1ZShTVEVNVGltZSB2YWx1ZSk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5PcmlnaW5hbCBWYWx1ZTwvYj48L2VtPicgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPHA+CisJICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+T3JpZ2luYWwgVmFsdWU8L2VtPicgcmVmZXJlbmNlIGlzbid0IGNsZWFyLAorCSAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4KKwkgKiA8L3A+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+T3JpZ2luYWwgVmFsdWU8L2VtPicgcmVmZXJlbmNlLgorCSAqIEBzZWUgI3NldE9yaWdpbmFsVmFsdWUoU1RFTVRpbWUpCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuTW9kaWZpZXJQYWNrYWdlI2dldFNURU1UaW1lTW9kaWZpZXJfT3JpZ2luYWxWYWx1ZSgpCisJICogQG1vZGVsIHRyYW5zaWVudD0idHJ1ZSIKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJU1RFTVRpbWUgZ2V0T3JpZ2luYWxWYWx1ZSgpOworCisJLyoqCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLlNURU1UaW1lTW9kaWZpZXIjZ2V0T3JpZ2luYWxWYWx1ZSA8ZW0+T3JpZ2luYWwgVmFsdWU8L2VtPn0nIHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPk9yaWdpbmFsIFZhbHVlPC9lbT4nIHJlZmVyZW5jZS4KKwkgKiBAc2VlICNnZXRPcmlnaW5hbFZhbHVlKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJdm9pZCBzZXRPcmlnaW5hbFZhbHVlKFNURU1UaW1lIHZhbHVlKTsKK30gLy8gU1RFTVRpbWVNb2RpZmllcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9tb2RpZmllci9TVEVNVGltZU5PUE1vZGlmaWVyLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL21vZGlmaWVyL1NURU1UaW1lTk9QTW9kaWZpZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YTlmZjU1Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9tb2RpZmllci9TVEVNVGltZU5PUE1vZGlmaWVyLmphdmEKQEAgLTAsMCArMSwyNCBAQAorLy8gU1RFTVRpbWVOT1BNb2RpZmllci5qYXZhCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllcjsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKgorICogQSA8Y29kZT5OT1BNb2RpZmllcjwvY29kZT4gZG9lcyBub3RoaW5nLiBJdCBpcyB1c2VmdWwgZm9yIHRoZSBHVUkKKyAqIGNvbXBvbmVudHMgdGhhdCBlZGl0IHtAbGluayBGZWF0dXJlTW9kaWZpZXJ9cyB0byBoYXZlIG9uZSB0aGF0IGlzIGF2YWlsYWJsZQorICogZm9yIHRoZSBjYXNlIHdoZW4gbm8ge0BsaW5rIEZlYXR1cmVNb2RpZmllcn0gaXMgc3BlY2lmaWVkIGJ5IHRoZSB1c2VyLgorICogCisgKiBAbW9kZWwKKyAqLworcHVibGljIGludGVyZmFjZSBTVEVNVGltZU5PUE1vZGlmaWVyIGV4dGVuZHMgTk9QTW9kaWZpZXIgeworCS8vIE5vdGhpbmcKK30gLy8gU1RFTVRpbWVOT1BNb2RpZmllcgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvbW9kaWZpZXIvU1RFTVRpbWVSYW5nZU1vZGlmaWVyLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL21vZGlmaWVyL1NURU1UaW1lUmFuZ2VNb2RpZmllci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIzODQyN2YKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL21vZGlmaWVyL1NURU1UaW1lUmFuZ2VNb2RpZmllci5qYXZhCkBAIC0wLDAgKzEsOTggQEAKKy8vIFNURU1UaW1lUmFuZ2VNb2RpZmllci5qYXZhCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllcjsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuU1RFTVRpbWU7CisKKy8qKgorICogQSA8Y29kZT5TVEVNVGltZVJhbmdlTW9kaWZpZXI8L2NvZGU+IG1vZGlmaWVzIGFuIHtAbGluayBTVEVNVGltZX0gdmFsdWVkCisgKiBmZWF0dXJlIGZyb20gYSBzdGFydGluZyB2YWx1ZSB0byBhbmQgZW5kIHZhbHVlIChpbmNsdXNpdmU+IGJ5IGluY3JlbWVudHMuCisgKiAKKyAqIEBtb2RlbAorICovCitwdWJsaWMgaW50ZXJmYWNlIFNURU1UaW1lUmFuZ2VNb2RpZmllciBleHRlbmRzIFJhbmdlTW9kaWZpZXIgeworCQorCS8qKgorCSAqIEBtb2RlbAorCSAqLworCVNURU1UaW1lIGdldE9yaWdpbmFsVmFsdWUoKTsKKwkKKwkvKioKKwkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuU1RFTVRpbWVSYW5nZU1vZGlmaWVyI2dldE9yaWdpbmFsVmFsdWUgPGVtPk9yaWdpbmFsIFZhbHVlPC9lbT59JyByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5PcmlnaW5hbCBWYWx1ZTwvZW0+JyByZWZlcmVuY2UuCisJICogQHNlZSAjZ2V0T3JpZ2luYWxWYWx1ZSgpCisJICogQGdlbmVyYXRlZAorCSAqLworCXZvaWQgc2V0T3JpZ2luYWxWYWx1ZShTVEVNVGltZSB2YWx1ZSk7CisKKwkvKioKKwkgKiBAbW9kZWwKKwkgKi8KKwlTVEVNVGltZSBnZXRTdGFydFZhbHVlKCk7CisKKwkvKioKKwkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuU1RFTVRpbWVSYW5nZU1vZGlmaWVyI2dldFN0YXJ0VmFsdWUgPGVtPlN0YXJ0IFZhbHVlPC9lbT59JyByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+U3RhcnQgVmFsdWU8L2VtPicgcmVmZXJlbmNlLgorCSAqIEBzZWUgI2dldFN0YXJ0VmFsdWUoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwl2b2lkIHNldFN0YXJ0VmFsdWUoU1RFTVRpbWUgdmFsdWUpOworCisJLyoqCisJICogQG1vZGVsCisJICovCisJU1RFTVRpbWUgZ2V0RW5kVmFsdWUoKTsKKworCS8qKgorCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5TVEVNVGltZVJhbmdlTW9kaWZpZXIjZ2V0RW5kVmFsdWUgPGVtPkVuZCBWYWx1ZTwvZW0+fScgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPkVuZCBWYWx1ZTwvZW0+JyByZWZlcmVuY2UuCisJICogQHNlZSAjZ2V0RW5kVmFsdWUoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwl2b2lkIHNldEVuZFZhbHVlKFNURU1UaW1lIHZhbHVlKTsKKworCS8qKgorCSAqIEBtb2RlbAorCSAqLworCWxvbmcgZ2V0SW5jcmVtZW50KCk7CisKKwkvKioKKwkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuU1RFTVRpbWVSYW5nZU1vZGlmaWVyI2dldEluY3JlbWVudCA8ZW0+SW5jcmVtZW50PC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+SW5jcmVtZW50PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiBAc2VlICNnZXRJbmNyZW1lbnQoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwl2b2lkIHNldEluY3JlbWVudChsb25nIHZhbHVlKTsKKworCS8qKgorCSAqIEByZXR1cm4gdGhlIG5leHQgdmFsdWUgb2YgdGhlIGZlYXR1cmUKKwkgKiBAbW9kZWwgY2hhbmdlYWJsZT0idHJ1ZSIKKwkgKi8KKwlTVEVNVGltZSBnZXROZXh0VmFsdWUoKTsKKworCS8qKgorCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5TVEVNVGltZVJhbmdlTW9kaWZpZXIjZ2V0TmV4dFZhbHVlIDxlbT5OZXh0IFZhbHVlPC9lbT59JyByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5OZXh0IFZhbHVlPC9lbT4nIHJlZmVyZW5jZS4KKwkgKiBAc2VlICNnZXROZXh0VmFsdWUoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwl2b2lkIHNldE5leHRWYWx1ZShTVEVNVGltZSB2YWx1ZSk7CisKK30gLy8gU1RFTVRpbWVSYW5nZU1vZGlmaWVyCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL21vZGlmaWVyL1NURU1UaW1lU2VxdWVuY2VNb2RpZmllci5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9tb2RpZmllci9TVEVNVGltZVNlcXVlbmNlTW9kaWZpZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iODY0NmFkCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9tb2RpZmllci9TVEVNVGltZVNlcXVlbmNlTW9kaWZpZXIuamF2YQpAQCAtMCwwICsxLDI5IEBACisvLyBTVEVNVGltZVNlcXVlbmNlTW9kaWZpZXIuamF2YQorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXI7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLkVMaXN0OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5TVEVNVGltZTsKKworLyoqCisgKiBBIHtAbGluayBTVEVNVGltZVNlcXVlbmNlTW9kaWZpZXJ9IG1vZGlmaWVzIGEgZmVhdHVyZSBieSBzZXR0aW5nIGl0IHRvIGEKKyAqIHNlcXVlbmNlIG9mICJTVEVNVGltZSIgdmFsdWVzLgorICogCisgKiBAbW9kZWwKKyAqLworcHVibGljIGludGVyZmFjZSBTVEVNVGltZVNlcXVlbmNlTW9kaWZpZXIgZXh0ZW5kcyBTZXF1ZW5jZU1vZGlmaWVyIHsKKwkvKioKKwkgKiBAbW9kZWwKKwkgKi8KKwlFTGlzdDxTVEVNVGltZT4gZ2V0U2VxdWVuY2UoKTsKK30gLy8gU1RFTVRpbWVTZXF1ZW5jZU1vZGlmaWVyCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL21vZGlmaWVyL1NlcXVlbmNlTW9kaWZpZXIuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvbW9kaWZpZXIvU2VxdWVuY2VNb2RpZmllci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIzZjBmNGIKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL21vZGlmaWVyL1NlcXVlbmNlTW9kaWZpZXIuamF2YQpAQCAtMCwwICsxLDc2IEBACisvLyBTZXF1ZW5jZU1vZGlmaWVyLmphdmEKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCisvKioKKyAqIEEge0BsaW5rIFNlcXVlbmNlTW9kaWZpZXJ9IG1vZGlmaWVzIGEgZmVhdHVyZSBieSBzZXR0aW5nIGl0IHRvIGEKKyAqIHNlcXVlbmNlIG9mIHNwZWNpZmljIHZhbHVlcy4KKyAqIAorICogQG1vZGVsIGFic3RyYWN0PSJ0cnVlIgorICovCitwdWJsaWMgaW50ZXJmYWNlIFNlcXVlbmNlTW9kaWZpZXIgZXh0ZW5kcyBGZWF0dXJlTW9kaWZpZXIgeworCQorCS8qKgorCSAqIEBtb2RlbAorCSAqLworCU9iamVjdCBnZXRPcmlnaW5hbFZhbHVlKCk7CisKKwkvKioKKwkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuU2VxdWVuY2VNb2RpZmllciNnZXRPcmlnaW5hbFZhbHVlIDxlbT5PcmlnaW5hbCBWYWx1ZTwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+T3JpZ2luYWwgVmFsdWU8L2VtPicgYXR0cmlidXRlLgorCSAqIEBzZWUgI2dldE9yaWdpbmFsVmFsdWUoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwl2b2lkIHNldE9yaWdpbmFsVmFsdWUoT2JqZWN0IHZhbHVlKTsKKworCS8qKgorCSAqIEByZXR1cm4gdGhlIG51bWJlciBvZiBlbnRyaWVzIGluIHRoZSBjb2xsZWN0aW9uIG9mIHZhbHVlcy4KKwkgKiBAbW9kZWwgdm9sYXRpbGU9InRydWUiIHRyYW5zaWVudD0idHJ1ZSIgY2hhbmdlYWJsZT0iZmFsc2UiCisJICovCisJaW50IGdldFNlcXVlbmNlU2l6ZSgpOworCisJLyoqCisJICogQHJldHVybiB0aGUgaW5kZXggb2YgdGhlIGN1cnJlbnQgdmFsdWUgaW4gdGhlIHNlcXVlbmNlCisJICogQG1vZGVsIGRlZmF1bHQ9IjAiCisJICovCisJaW50IGdldEN1cnJlbnRTZXF1ZW5jZUluZGV4KCk7CisJCisJLyoqCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLlNlcXVlbmNlTW9kaWZpZXIjZ2V0Q3VycmVudFNlcXVlbmNlSW5kZXggPGVtPkN1cnJlbnQgU2VxdWVuY2UgSW5kZXg8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPkN1cnJlbnQgU2VxdWVuY2UgSW5kZXg8L2VtPicgYXR0cmlidXRlLgorCSAqIEBzZWUgI2dldEN1cnJlbnRTZXF1ZW5jZUluZGV4KCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJdm9pZCBzZXRDdXJyZW50U2VxdWVuY2VJbmRleChpbnQgdmFsdWUpOworCisJLyoqCisJICogQHJldHVybiB0aGUgbmV4dCB2YWx1ZSBpbiB0aGUgc2VxdWVuY2UKKwkgKiBAbW9kZWwgdm9sYXRpbGU9InRydWUiIHRyYW5zaWVudD0idHJ1ZSIgY2hhbmdlYWJsZT0idHJ1ZSIKKwkgKi8KKwlPYmplY3QgZ2V0TmV4dFZhbHVlKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHdoZXRoZXIgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5TZXF1ZW5jZU1vZGlmaWVyI2dldE5leHRWYWx1ZSA8ZW0+TmV4dCBWYWx1ZTwvZW0+fScgYXR0cmlidXRlIGlzIHNldC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gd2hldGhlciB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+TmV4dCBWYWx1ZTwvZW0+JyBhdHRyaWJ1dGUgaXMgc2V0LgorCSAqIEBzZWUgI2dldE5leHRWYWx1ZSgpCisJICogQGdlbmVyYXRlZAorCSAqLworCWJvb2xlYW4gaXNTZXROZXh0VmFsdWUoKTsKK30gLy8gU2VxdWVuY2VNb2RpZmllcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9tb2RpZmllci9TaW5nbGVWYWx1ZU1vZGlmaWVyLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL21vZGlmaWVyL1NpbmdsZVZhbHVlTW9kaWZpZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YzJmMjljCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9tb2RpZmllci9TaW5nbGVWYWx1ZU1vZGlmaWVyLmphdmEKQEAgLTAsMCArMSwyMSBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXI7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDkgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqCisgKiBBIHNwZWNpYWwgY2FzZSBvZiBSYW5nZSBNb2RpZmllciB3aGVyZSB0aGUgc3RhcnQgYW5kIGVuZCB2YWx1ZSBhcmUgdGhlIHNhbWUKKyAqCisgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5Nb2RpZmllclBhY2thZ2UjZ2V0U2luZ2xlVmFsdWVNb2RpZmllcigpCisgKiBAbW9kZWwgYWJzdHJhY3Q9InRydWUiCisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBpbnRlcmZhY2UgU2luZ2xlVmFsdWVNb2RpZmllciBleHRlbmRzIEZlYXR1cmVNb2RpZmllciB7Cit9IC8vIFNpbmdsZVZhbHVlTW9kaWZpZXIKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvbW9kaWZpZXIvU3RyaW5nTk9QTW9kaWZpZXIuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvbW9kaWZpZXIvU3RyaW5nTk9QTW9kaWZpZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZjMwOTc2Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9tb2RpZmllci9TdHJpbmdOT1BNb2RpZmllci5qYXZhCkBAIC0wLDAgKzEsMjQgQEAKKy8vIFN0cmluZ05PUE1vZGlmaWVyLmphdmEKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqCisgKiBBIDxjb2RlPk5PUE1vZGlmaWVyPC9jb2RlPiBkb2VzIG5vdGhpbmcuIEl0IGlzIHVzZWZ1bCBmb3IgdGhlIEdVSQorICogY29tcG9uZW50cyB0aGF0IGVkaXQge0BsaW5rIEZlYXR1cmVNb2RpZmllcn1zIHRvIGhhdmUgb25lIHRoYXQgaXMgYXZhaWxhYmxlCisgKiBmb3IgdGhlIGNhc2Ugd2hlbiBubyB7QGxpbmsgRmVhdHVyZU1vZGlmaWVyfSBpcyBzcGVjaWZpZWQgYnkgdGhlIHVzZXIuCisgKiAKKyAqIEBtb2RlbAorICovCitwdWJsaWMgaW50ZXJmYWNlIFN0cmluZ05PUE1vZGlmaWVyIGV4dGVuZHMgTk9QTW9kaWZpZXIgeworCS8vIE5vdGhpbmcKK30gLy8gU3RyaW5nTk9QTW9kaWZpZXIKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvbW9kaWZpZXIvU3RyaW5nU2VxdWVuY2VNb2RpZmllci5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9tb2RpZmllci9TdHJpbmdTZXF1ZW5jZU1vZGlmaWVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTg3OWQyMQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvbW9kaWZpZXIvU3RyaW5nU2VxdWVuY2VNb2RpZmllci5qYXZhCkBAIC0wLDAgKzEsMjggQEAKKy8vIFN0cmluZ1NlcXVlbmNlTW9kaWZpZXIuamF2YQorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXI7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLkVMaXN0OworCisvKioKKyAqIEEge0BsaW5rIFN0cmluZ1NlcXVlbmNlTW9kaWZpZXJ9IG1vZGlmaWVzIGEgZmVhdHVyZSBieSBzZXR0aW5nIGl0IHRvIGEKKyAqIHNlcXVlbmNlIG9mICJTdHJpbmciIHZhbHVlcy4KKyAqIAorICogQG1vZGVsCisgKi8KK3B1YmxpYyBpbnRlcmZhY2UgU3RyaW5nU2VxdWVuY2VNb2RpZmllciBleHRlbmRzIFNlcXVlbmNlTW9kaWZpZXIgeworCS8qKgorCSAqIEBtb2RlbAorCSAqLworCUVMaXN0PFN0cmluZz4gZ2V0U2VxdWVuY2UoKTsKK30gLy8gU3RyaW5nU2VxdWVuY2VNb2RpZmllcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9tb2RpZmllci9pbXBsL0RvdWJsZU1vZGlmaWVySW1wbC5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9tb2RpZmllci9pbXBsL0RvdWJsZU1vZGlmaWVySW1wbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjczZWNmNmYKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL21vZGlmaWVyL2ltcGwvRG91YmxlTW9kaWZpZXJJbXBsLmphdmEKQEAgLTAsMCArMSwyNTggQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLmltcGw7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDkgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLmltcGwuRU5vdGlmaWNhdGlvbkltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLkRvdWJsZU1vZGlmaWVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5Nb2RpZmllclBhY2thZ2U7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIEFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5Eb3VibGUgTW9kaWZpZXI8L2I+PC9lbT4nLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiA8cD4KKyAqIFRoZSBmb2xsb3dpbmcgZmVhdHVyZXMgYXJlIGltcGxlbWVudGVkOgorICogPHVsPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5pbXBsLkRvdWJsZU1vZGlmaWVySW1wbCNnZXRWYWx1ZSA8ZW0+VmFsdWU8L2VtPn08L2xpPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5pbXBsLkRvdWJsZU1vZGlmaWVySW1wbCNnZXRPcmlnaW5hbFZhbHVlIDxlbT5PcmlnaW5hbCBWYWx1ZTwvZW0+fTwvbGk+CisgKiA8L3VsPgorICogPC9wPgorICoKKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIERvdWJsZU1vZGlmaWVySW1wbCBleHRlbmRzIFNpbmdsZVZhbHVlTW9kaWZpZXJJbXBsIGltcGxlbWVudHMgRG91YmxlTW9kaWZpZXIgeworCS8qKgorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRWYWx1ZSgpIDxlbT5WYWx1ZTwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZ2V0VmFsdWUoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgZG91YmxlIFZBTFVFX0VERUZBVUxUID0gMC4wOworCS8qKgorCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldFZhbHVlKCkgPGVtPlZhbHVlPC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNnZXRWYWx1ZSgpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIGRvdWJsZSB2YWx1ZSA9IFZBTFVFX0VERUZBVUxUOworCisJLyoqCisJICogVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldE9yaWdpbmFsVmFsdWUoKSA8ZW0+T3JpZ2luYWwgVmFsdWU8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI2dldE9yaWdpbmFsVmFsdWUoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgZG91YmxlIE9SSUdJTkFMX1ZBTFVFX0VERUZBVUxUID0gLTEuMEUyMDA7CisJLyoqCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0T3JpZ2luYWxWYWx1ZSgpIDxlbT5PcmlnaW5hbCBWYWx1ZTwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZ2V0T3JpZ2luYWxWYWx1ZSgpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIGRvdWJsZSBvcmlnaW5hbFZhbHVlID0gT1JJR0lOQUxfVkFMVUVfRURFRkFVTFQ7CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgRG91YmxlTW9kaWZpZXJJbXBsKCkgeworCQlzdXBlcigpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCBFQ2xhc3MgZVN0YXRpY0NsYXNzKCkgeworCQlyZXR1cm4gTW9kaWZpZXJQYWNrYWdlLkxpdGVyYWxzLkRPVUJMRV9NT0RJRklFUjsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgZG91YmxlIGdldFZhbHVlKCkgeworCQlyZXR1cm4gdmFsdWU7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgc2V0VmFsdWUoZG91YmxlIG5ld1ZhbHVlKSB7CisJCWRvdWJsZSBvbGRWYWx1ZSA9IHZhbHVlOworCQl2YWx1ZSA9IG5ld1ZhbHVlOworCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpCisJCQllTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBNb2RpZmllclBhY2thZ2UuRE9VQkxFX01PRElGSUVSX19WQUxVRSwgb2xkVmFsdWUsIHZhbHVlKSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIGRvdWJsZSBnZXRPcmlnaW5hbFZhbHVlKCkgeworCQlyZXR1cm4gb3JpZ2luYWxWYWx1ZTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRPcmlnaW5hbFZhbHVlKGRvdWJsZSBuZXdPcmlnaW5hbFZhbHVlKSB7CisJCWRvdWJsZSBvbGRPcmlnaW5hbFZhbHVlID0gb3JpZ2luYWxWYWx1ZTsKKwkJb3JpZ2luYWxWYWx1ZSA9IG5ld09yaWdpbmFsVmFsdWU7CisJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkKKwkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIE1vZGlmaWVyUGFja2FnZS5ET1VCTEVfTU9ESUZJRVJfX09SSUdJTkFMX1ZBTFVFLCBvbGRPcmlnaW5hbFZhbHVlLCBvcmlnaW5hbFZhbHVlKSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIE9iamVjdCBlR2V0KGludCBmZWF0dXJlSUQsIGJvb2xlYW4gcmVzb2x2ZSwgYm9vbGVhbiBjb3JlVHlwZSkgeworCQlzd2l0Y2ggKGZlYXR1cmVJRCkgeworCQkJY2FzZSBNb2RpZmllclBhY2thZ2UuRE9VQkxFX01PRElGSUVSX19WQUxVRToKKwkJCQlyZXR1cm4gZ2V0VmFsdWUoKTsKKwkJCWNhc2UgTW9kaWZpZXJQYWNrYWdlLkRPVUJMRV9NT0RJRklFUl9fT1JJR0lOQUxfVkFMVUU6CisJCQkJcmV0dXJuIGdldE9yaWdpbmFsVmFsdWUoKTsKKwkJfQorCQlyZXR1cm4gc3VwZXIuZUdldChmZWF0dXJlSUQsIHJlc29sdmUsIGNvcmVUeXBlKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBlU2V0KGludCBmZWF0dXJlSUQsIE9iamVjdCBuZXdWYWx1ZSkgeworCQlzd2l0Y2ggKGZlYXR1cmVJRCkgeworCQkJY2FzZSBNb2RpZmllclBhY2thZ2UuRE9VQkxFX01PRElGSUVSX19WQUxVRToKKwkJCQlzZXRWYWx1ZSgoRG91YmxlKW5ld1ZhbHVlKTsKKwkJCQlyZXR1cm47CisJCQljYXNlIE1vZGlmaWVyUGFja2FnZS5ET1VCTEVfTU9ESUZJRVJfX09SSUdJTkFMX1ZBTFVFOgorCQkJCXNldE9yaWdpbmFsVmFsdWUoKERvdWJsZSluZXdWYWx1ZSk7CisJCQkJcmV0dXJuOworCQl9CisJCXN1cGVyLmVTZXQoZmVhdHVyZUlELCBuZXdWYWx1ZSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgZVVuc2V0KGludCBmZWF0dXJlSUQpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJCWNhc2UgTW9kaWZpZXJQYWNrYWdlLkRPVUJMRV9NT0RJRklFUl9fVkFMVUU6CisJCQkJc2V0VmFsdWUoVkFMVUVfRURFRkFVTFQpOworCQkJCXJldHVybjsKKwkJCWNhc2UgTW9kaWZpZXJQYWNrYWdlLkRPVUJMRV9NT0RJRklFUl9fT1JJR0lOQUxfVkFMVUU6CisJCQkJc2V0T3JpZ2luYWxWYWx1ZShPUklHSU5BTF9WQUxVRV9FREVGQVVMVCk7CisJCQkJcmV0dXJuOworCQl9CisJCXN1cGVyLmVVbnNldChmZWF0dXJlSUQpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBib29sZWFuIGVJc1NldChpbnQgZmVhdHVyZUlEKSB7CisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7CisJCQljYXNlIE1vZGlmaWVyUGFja2FnZS5ET1VCTEVfTU9ESUZJRVJfX1ZBTFVFOgorCQkJCXJldHVybiB2YWx1ZSAhPSBWQUxVRV9FREVGQVVMVDsKKwkJCWNhc2UgTW9kaWZpZXJQYWNrYWdlLkRPVUJMRV9NT0RJRklFUl9fT1JJR0lOQUxfVkFMVUU6CisJCQkJcmV0dXJuIG9yaWdpbmFsVmFsdWUgIT0gT1JJR0lOQUxfVkFMVUVfRURFRkFVTFQ7CisJCX0KKwkJcmV0dXJuIHN1cGVyLmVJc1NldChmZWF0dXJlSUQpOworCX0KKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLmltcGwuRmVhdHVyZU1vZGlmaWVySW1wbCN1cGRhdGVGZWF0dXJlKCkKKwkgKi8KKwkKKwlAU3VwcHJlc3NXYXJuaW5ncygiYm94aW5nIikKKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCB1cGRhdGVGZWF0dXJlKCkgeworCQkvLyBPcmlnaW5hbCB2YWx1ZSBjYXB0dXJlZCB5ZXQ/CisJCWlmICghZUlzU2V0KE1vZGlmaWVyUGFja2FnZS5ET1VCTEVfTU9ESUZJRVJfX09SSUdJTkFMX1ZBTFVFKSkgeworCQkJLy8gTm8KKwkJCXNldE9yaWdpbmFsVmFsdWUoKERvdWJsZSl0YXJnZXQuZUdldChnZXRFU3RydWN0dXJhbEZlYXR1cmUoKSkpOworCQl9IC8vIGlmCisJCXRhcmdldC5lU2V0KGdldEVTdHJ1Y3R1cmFsRmVhdHVyZSgpLCBnZXRWYWx1ZSgpKTsKKwkJY29tcGxldGUgPSB0cnVlOworCX0gLy8gdXBkYXRlRmVhdHVyZQorCisJCisJLyoqCisJICpyZXNldAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIHJlc2V0KCkgeworCQljb21wbGV0ZSA9IGZhbHNlOworCQlkb3VibGUgb3JpZ2luYWxWYWx1ZSA9IGdldE9yaWdpbmFsVmFsdWUoKTsKKwkJaWYob3JpZ2luYWxWYWx1ZSAhPSBPUklHSU5BTF9WQUxVRV9FREVGQVVMVCkgLy8gV2UgZG9uJ3Qgd2FudCB0byBzZXQgaXQgaWYgaXQgaGFzbid0IGJlZW4gY2FwdHVyZWQgeWV0LiAKKwkJCXRhcmdldC5lU2V0KGdldEVTdHJ1Y3R1cmFsRmVhdHVyZSgpLCBnZXRPcmlnaW5hbFZhbHVlKCkpOworCQlzZXRPcmlnaW5hbFZhbHVlKE9SSUdJTkFMX1ZBTFVFX0VERUZBVUxUKTsgLy8gVG8gbWFrZSBzdXJlIHdlIGNhcHR1cmUgYW55IG5ldyB2YWx1ZSBuZXh0IHRpbWUgc2ltdWxhdGlvbiBpcyBydW4KKwl9CisJCisJcHJpdmF0ZSBib29sZWFuIGNvbXBsZXRlID0gZmFsc2U7CisJLyoqCisJICogaXNDb21wbGV0ZQorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBib29sZWFuIGlzQ29tcGxldGUoKSB7CisJCXJldHVybiBjb21wbGV0ZTsKKwl9CisJCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIFN0cmluZyB0b1N0cmluZygpIHsKKwkJaWYgKGVJc1Byb3h5KCkpIHJldHVybiBzdXBlci50b1N0cmluZygpOworCisJCVN0cmluZ0J1ZmZlciByZXN1bHQgPSBuZXcgU3RyaW5nQnVmZmVyKHN1cGVyLnRvU3RyaW5nKCkpOworCQlyZXN1bHQuYXBwZW5kKCIgKHZhbHVlOiAiKTsgLy8kTk9OLU5MUy0xJAorCQlyZXN1bHQuYXBwZW5kKHZhbHVlKTsKKwkJcmVzdWx0LmFwcGVuZCgiLCBvcmlnaW5hbFZhbHVlOiAiKTsgLy8kTk9OLU5MUy0xJAorCQlyZXN1bHQuYXBwZW5kKG9yaWdpbmFsVmFsdWUpOworCQlyZXN1bHQuYXBwZW5kKCcpJyk7CisJCXJldHVybiByZXN1bHQudG9TdHJpbmcoKTsKKwl9CisKK30gLy9Eb3VibGVNb2RpZmllckltcGwKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvbW9kaWZpZXIvaW1wbC9Eb3VibGVOT1BNb2RpZmllckltcGwuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvbW9kaWZpZXIvaW1wbC9Eb3VibGVOT1BNb2RpZmllckltcGwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZjk4YTQxCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9tb2RpZmllci9pbXBsL0RvdWJsZU5PUE1vZGlmaWVySW1wbC5qYXZhCkBAIC0wLDAgKzEsNDcgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLmltcGw7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzczsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuRG91YmxlTk9QTW9kaWZpZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLk1vZGlmaWVyUGFja2FnZTsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPkRvdWJsZSBOT1AgTW9kaWZpZXI8L2I+PC9lbT4nLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiA8cD4KKyAqIDwvcD4KKyAqCisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBEb3VibGVOT1BNb2RpZmllckltcGwgZXh0ZW5kcyBOT1BNb2RpZmllckltcGwgaW1wbGVtZW50cyBEb3VibGVOT1BNb2RpZmllciB7CisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIERvdWJsZU5PUE1vZGlmaWVySW1wbCgpIHsKKwkJc3VwZXIoKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgRUNsYXNzIGVTdGF0aWNDbGFzcygpIHsKKwkJcmV0dXJuIE1vZGlmaWVyUGFja2FnZS5MaXRlcmFscy5ET1VCTEVfTk9QX01PRElGSUVSOworCX0KKworfSAvLyBEb3VibGVOT1BNb2RpZmllckltcGwKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvbW9kaWZpZXIvaW1wbC9Eb3VibGVSYW5nZU1vZGlmaWVySW1wbC5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9tb2RpZmllci9pbXBsL0RvdWJsZVJhbmdlTW9kaWZpZXJJbXBsLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGQyYmY5MQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvbW9kaWZpZXIvaW1wbC9Eb3VibGVSYW5nZU1vZGlmaWVySW1wbC5qYXZhCkBAIC0wLDAgKzEsNDI2IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5pbXBsOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5pbXBsLkVOb3RpZmljYXRpb25JbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5Eb3VibGVSYW5nZU1vZGlmaWVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5Nb2RpZmllclBhY2thZ2U7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPkRvdWJsZSBSYW5nZSBNb2RpZmllcjwvYj48L2VtPicuCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIDxwPgorICogVGhlIGZvbGxvd2luZyBmZWF0dXJlcyBhcmUgaW1wbGVtZW50ZWQ6CisgKiA8dWw+CisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLmltcGwuRG91YmxlUmFuZ2VNb2RpZmllckltcGwjZ2V0U3RhcnRWYWx1ZSA8ZW0+U3RhcnQgVmFsdWU8L2VtPn08L2xpPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5pbXBsLkRvdWJsZVJhbmdlTW9kaWZpZXJJbXBsI2dldEVuZFZhbHVlIDxlbT5FbmQgVmFsdWU8L2VtPn08L2xpPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5pbXBsLkRvdWJsZVJhbmdlTW9kaWZpZXJJbXBsI2dldEluY3JlbWVudCA8ZW0+SW5jcmVtZW50PC9lbT59PC9saT4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuaW1wbC5Eb3VibGVSYW5nZU1vZGlmaWVySW1wbCNnZXROZXh0VmFsdWUgPGVtPk5leHQgVmFsdWU8L2VtPn08L2xpPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5pbXBsLkRvdWJsZVJhbmdlTW9kaWZpZXJJbXBsI2dldE9yaWdpbmFsVmFsdWUgPGVtPk9yaWdpbmFsIFZhbHVlPC9lbT59PC9saT4KKyAqIDwvdWw+CisgKiA8L3A+CisgKgorICogQGdlbmVyYXRlZAorICovCitAU3VwcHJlc3NXYXJuaW5ncygiYm94aW5nIikKK3B1YmxpYyBjbGFzcyBEb3VibGVSYW5nZU1vZGlmaWVySW1wbCBleHRlbmRzIFJhbmdlTW9kaWZpZXJJbXBsIGltcGxlbWVudHMKKwkJRG91YmxlUmFuZ2VNb2RpZmllciB7CisJLyoqCisJICogVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldFN0YXJ0VmFsdWUoKSA8ZW0+U3RhcnQgVmFsdWU8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNnZXRTdGFydFZhbHVlKCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIGRvdWJsZSBTVEFSVF9WQUxVRV9FREVGQVVMVCA9IC05Ljk5OTk5OTlFNzsKKwkvKioKKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRTdGFydFZhbHVlKCkgPGVtPlN0YXJ0IFZhbHVlPC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZ2V0U3RhcnRWYWx1ZSgpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIGRvdWJsZSBzdGFydFZhbHVlID0gU1RBUlRfVkFMVUVfRURFRkFVTFQ7CisJLyoqCisJICogVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldEVuZFZhbHVlKCkgPGVtPkVuZCBWYWx1ZTwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI2dldEVuZFZhbHVlKCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIGRvdWJsZSBFTkRfVkFMVUVfRURFRkFVTFQgPSAtOS45OTk5OTk5RTc7CisJLyoqCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0RW5kVmFsdWUoKSA8ZW0+RW5kIFZhbHVlPC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZ2V0RW5kVmFsdWUoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBkb3VibGUgZW5kVmFsdWUgPSBFTkRfVkFMVUVfRURFRkFVTFQ7CisJLyoqCisJICogVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldEluY3JlbWVudCgpIDxlbT5JbmNyZW1lbnQ8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNnZXRJbmNyZW1lbnQoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgZG91YmxlIElOQ1JFTUVOVF9FREVGQVVMVCA9IC05Ljk5OTk5OTlFNzsKKwkvKioKKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRJbmNyZW1lbnQoKSA8ZW0+SW5jcmVtZW50PC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZ2V0SW5jcmVtZW50KCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgZG91YmxlIGluY3JlbWVudCA9IElOQ1JFTUVOVF9FREVGQVVMVDsKKworCS8qKgorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXROZXh0VmFsdWUoKSA8ZW0+TmV4dCBWYWx1ZTwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZ2V0TmV4dFZhbHVlKCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIGRvdWJsZSBORVhUX1ZBTFVFX0VERUZBVUxUID0gMC4wOworCS8qKgorCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldE5leHRWYWx1ZSgpIDxlbT5OZXh0IFZhbHVlPC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNnZXROZXh0VmFsdWUoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBkb3VibGUgbmV4dFZhbHVlID0gTkVYVF9WQUxVRV9FREVGQVVMVDsKKwkvKioKKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0T3JpZ2luYWxWYWx1ZSgpIDxlbT5PcmlnaW5hbCBWYWx1ZTwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZ2V0T3JpZ2luYWxWYWx1ZSgpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBkb3VibGUgT1JJR0lOQUxfVkFMVUVfRURFRkFVTFQgPSAwLjA7CisJLyoqCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0T3JpZ2luYWxWYWx1ZSgpIDxlbT5PcmlnaW5hbCBWYWx1ZTwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZ2V0T3JpZ2luYWxWYWx1ZSgpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIGRvdWJsZSBvcmlnaW5hbFZhbHVlID0gT1JJR0lOQUxfVkFMVUVfRURFRkFVTFQ7CisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBEb3VibGVSYW5nZU1vZGlmaWVySW1wbCgpIHsKKwkJc3VwZXIoKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIEVDbGFzcyBlU3RhdGljQ2xhc3MoKSB7CisJCXJldHVybiBNb2RpZmllclBhY2thZ2UuTGl0ZXJhbHMuRE9VQkxFX1JBTkdFX01PRElGSUVSOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgZG91YmxlIGdldFN0YXJ0VmFsdWUoKSB7CisJCXJldHVybiBzdGFydFZhbHVlOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRTdGFydFZhbHVlKGRvdWJsZSBuZXdTdGFydFZhbHVlKSB7CisJCWRvdWJsZSBvbGRTdGFydFZhbHVlID0gc3RhcnRWYWx1ZTsKKwkJc3RhcnRWYWx1ZSA9IG5ld1N0YXJ0VmFsdWU7CisJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkKKwkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIE1vZGlmaWVyUGFja2FnZS5ET1VCTEVfUkFOR0VfTU9ESUZJRVJfX1NUQVJUX1ZBTFVFLCBvbGRTdGFydFZhbHVlLCBzdGFydFZhbHVlKSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBkb3VibGUgZ2V0RW5kVmFsdWUoKSB7CisJCXJldHVybiBlbmRWYWx1ZTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgc2V0RW5kVmFsdWUoZG91YmxlIG5ld0VuZFZhbHVlKSB7CisJCWRvdWJsZSBvbGRFbmRWYWx1ZSA9IGVuZFZhbHVlOworCQllbmRWYWx1ZSA9IG5ld0VuZFZhbHVlOworCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpCisJCQllTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBNb2RpZmllclBhY2thZ2UuRE9VQkxFX1JBTkdFX01PRElGSUVSX19FTkRfVkFMVUUsIG9sZEVuZFZhbHVlLCBlbmRWYWx1ZSkpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgZG91YmxlIGdldEluY3JlbWVudCgpIHsKKwkJcmV0dXJuIGluY3JlbWVudDsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgc2V0SW5jcmVtZW50KGRvdWJsZSBuZXdJbmNyZW1lbnQpIHsKKwkJZG91YmxlIG9sZEluY3JlbWVudCA9IGluY3JlbWVudDsKKwkJaW5jcmVtZW50ID0gbmV3SW5jcmVtZW50OworCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpCisJCQllTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBNb2RpZmllclBhY2thZ2UuRE9VQkxFX1JBTkdFX01PRElGSUVSX19JTkNSRU1FTlQsIG9sZEluY3JlbWVudCwgaW5jcmVtZW50KSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCXB1YmxpYyBkb3VibGUgZ2V0TmV4dFZhbHVlKCkgeworCQkvLyBVbnNldD8KKwkJaWYgKCFlSXNTZXQoTW9kaWZpZXJQYWNrYWdlLkRPVUJMRV9SQU5HRV9NT0RJRklFUl9fTkVYVF9WQUxVRSkpIHsKKwkJCS8vIFllcworCQkJc2V0TmV4dFZhbHVlKGdldFN0YXJ0VmFsdWUoKSk7CisJCX0gLy8gaWYKKwkJCisJCWZpbmFsIGRvdWJsZSByZXRWYWx1ZSA9IG5leHRWYWx1ZTsKKwkJCisJCWNvbXBsZXRlID0gKGdldEluY3JlbWVudCgpIDwgMC4wKT8gKHJldFZhbHVlIDw9IGdldEVuZFZhbHVlKCkpOihyZXRWYWx1ZSA+PSBnZXRFbmRWYWx1ZSgpKTsgCisJCQorCQkvLyBTdGlsbCBpbmNyZW1lbnRpbmc/CisJCWlmICghY29tcGxldGUpIHsKKwkJCS8vIFllcworCQkJZmluYWwgZG91YmxlIHRlbXAgPSByZXRWYWx1ZSArIGdldEluY3JlbWVudCgpOworCQkJLy8gV291bGQgdGhlIG5ldyBjdXJyZW50VmFsdWUgYmUgZXF1YWwgb3IgInBhc3QiIHRoZSBlbmRWYWx1ZT8KKwkJCWlmICgoZ2V0SW5jcmVtZW50KCkgPj0gMCAmJiB0ZW1wIDwgZ2V0RW5kVmFsdWUoKSkgfHwgKGdldEluY3JlbWVudCgpIDwgMCAmJiB0ZW1wID4gZ2V0RW5kVmFsdWUoKSkpIHsKKwkJCQkvLyBObworCQkJCXNldE5leHRWYWx1ZSh0ZW1wKTsKKwkJCX0gLy8gaWYKKwkJCWVsc2UgeworCQkJCS8vIFllcworCQkJCXNldE5leHRWYWx1ZShnZXRFbmRWYWx1ZSgpKTsKKwkJCX0gLy8gZWxzZSAKKwkJfSAvLyBpZiAKKwkJY3VycmVudFZhbHVlVGV4dCA9IERvdWJsZS50b1N0cmluZyhyZXRWYWx1ZSk7CisJCXJldHVybiByZXRWYWx1ZTsKKwl9IC8vIGdldE5leHRWYWx1ZQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgc2V0TmV4dFZhbHVlKGRvdWJsZSBuZXdOZXh0VmFsdWUpIHsKKwkJZG91YmxlIG9sZE5leHRWYWx1ZSA9IG5leHRWYWx1ZTsKKwkJbmV4dFZhbHVlID0gbmV3TmV4dFZhbHVlOworCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpCisJCQllTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBNb2RpZmllclBhY2thZ2UuRE9VQkxFX1JBTkdFX01PRElGSUVSX19ORVhUX1ZBTFVFLCBvbGROZXh0VmFsdWUsIG5leHRWYWx1ZSkpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBkb3VibGUgZ2V0T3JpZ2luYWxWYWx1ZSgpIHsKKwkJcmV0dXJuIG9yaWdpbmFsVmFsdWU7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgc2V0T3JpZ2luYWxWYWx1ZShkb3VibGUgbmV3T3JpZ2luYWxWYWx1ZSkgeworCQlkb3VibGUgb2xkT3JpZ2luYWxWYWx1ZSA9IG9yaWdpbmFsVmFsdWU7CisJCW9yaWdpbmFsVmFsdWUgPSBuZXdPcmlnaW5hbFZhbHVlOworCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpCisJCQllTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBNb2RpZmllclBhY2thZ2UuRE9VQkxFX1JBTkdFX01PRElGSUVSX19PUklHSU5BTF9WQUxVRSwgb2xkT3JpZ2luYWxWYWx1ZSwgb3JpZ2luYWxWYWx1ZSkpOworCX0KKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLmltcGwuRmVhdHVyZU1vZGlmaWVySW1wbCN1cGRhdGVGZWF0dXJlKCkKKwkgKi8KKwkKKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCB1cGRhdGVGZWF0dXJlKCkgeworCQkvLyBPcmlnaW5hbCB2YWx1ZSBjYXB0dXJlZCB5ZXQ/CisJCWlmICghZUlzU2V0KE1vZGlmaWVyUGFja2FnZS5ET1VCTEVfUkFOR0VfTU9ESUZJRVJfX09SSUdJTkFMX1ZBTFVFKSkgeworCQkJLy8gTm8KKwkJCXNldE9yaWdpbmFsVmFsdWUoKERvdWJsZSlnZXRUYXJnZXQoKS5lR2V0KGdldEVTdHJ1Y3R1cmFsRmVhdHVyZSgpKSk7CisJCX0gLy8gaWYKKwkJZ2V0VGFyZ2V0KCkuZVNldChnZXRFU3RydWN0dXJhbEZlYXR1cmUoKSwgZ2V0TmV4dFZhbHVlKCkpOworCX0gLy8gdXBkYXRlRmVhdHVyZQorCisJCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuaW1wbC5SYW5nZU1vZGlmaWVySW1wbCNyZXNldCgpCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgcmVzZXQoKSB7CisJCXN1cGVyLnJlc2V0KCk7CisJCWVVbnNldChNb2RpZmllclBhY2thZ2UuRE9VQkxFX1JBTkdFX01PRElGSUVSX19ORVhUX1ZBTFVFKTsKKwkJZ2V0VGFyZ2V0KCkuZVNldChnZXRFU3RydWN0dXJhbEZlYXR1cmUoKSwgZ2V0T3JpZ2luYWxWYWx1ZSgpKTsKKwkJc2V0T3JpZ2luYWxWYWx1ZShPUklHSU5BTF9WQUxVRV9FREVGQVVMVCk7IC8vIFRvIG1ha2Ugc3VyZSB3ZSBjYXB0dXJlIGFueSBuZXcgdmFsdWUgbmV4dCB0aW1lIHNpbXVsYXRpb24gaXMgcnVuCisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBPYmplY3QgZUdldChpbnQgZmVhdHVyZUlELCBib29sZWFuIHJlc29sdmUsIGJvb2xlYW4gY29yZVR5cGUpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJCWNhc2UgTW9kaWZpZXJQYWNrYWdlLkRPVUJMRV9SQU5HRV9NT0RJRklFUl9fU1RBUlRfVkFMVUU6CisJCQkJcmV0dXJuIGdldFN0YXJ0VmFsdWUoKTsKKwkJCWNhc2UgTW9kaWZpZXJQYWNrYWdlLkRPVUJMRV9SQU5HRV9NT0RJRklFUl9fRU5EX1ZBTFVFOgorCQkJCXJldHVybiBnZXRFbmRWYWx1ZSgpOworCQkJY2FzZSBNb2RpZmllclBhY2thZ2UuRE9VQkxFX1JBTkdFX01PRElGSUVSX19JTkNSRU1FTlQ6CisJCQkJcmV0dXJuIGdldEluY3JlbWVudCgpOworCQkJY2FzZSBNb2RpZmllclBhY2thZ2UuRE9VQkxFX1JBTkdFX01PRElGSUVSX19ORVhUX1ZBTFVFOgorCQkJCXJldHVybiBnZXROZXh0VmFsdWUoKTsKKwkJCWNhc2UgTW9kaWZpZXJQYWNrYWdlLkRPVUJMRV9SQU5HRV9NT0RJRklFUl9fT1JJR0lOQUxfVkFMVUU6CisJCQkJcmV0dXJuIGdldE9yaWdpbmFsVmFsdWUoKTsKKwkJfQorCQlyZXR1cm4gc3VwZXIuZUdldChmZWF0dXJlSUQsIHJlc29sdmUsIGNvcmVUeXBlKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgZVNldChpbnQgZmVhdHVyZUlELCBPYmplY3QgbmV3VmFsdWUpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJCWNhc2UgTW9kaWZpZXJQYWNrYWdlLkRPVUJMRV9SQU5HRV9NT0RJRklFUl9fU1RBUlRfVkFMVUU6CisJCQkJc2V0U3RhcnRWYWx1ZSgoRG91YmxlKW5ld1ZhbHVlKTsKKwkJCQlyZXR1cm47CisJCQljYXNlIE1vZGlmaWVyUGFja2FnZS5ET1VCTEVfUkFOR0VfTU9ESUZJRVJfX0VORF9WQUxVRToKKwkJCQlzZXRFbmRWYWx1ZSgoRG91YmxlKW5ld1ZhbHVlKTsKKwkJCQlyZXR1cm47CisJCQljYXNlIE1vZGlmaWVyUGFja2FnZS5ET1VCTEVfUkFOR0VfTU9ESUZJRVJfX0lOQ1JFTUVOVDoKKwkJCQlzZXRJbmNyZW1lbnQoKERvdWJsZSluZXdWYWx1ZSk7CisJCQkJcmV0dXJuOworCQkJY2FzZSBNb2RpZmllclBhY2thZ2UuRE9VQkxFX1JBTkdFX01PRElGSUVSX19ORVhUX1ZBTFVFOgorCQkJCXNldE5leHRWYWx1ZSgoRG91YmxlKW5ld1ZhbHVlKTsKKwkJCQlyZXR1cm47CisJCQljYXNlIE1vZGlmaWVyUGFja2FnZS5ET1VCTEVfUkFOR0VfTU9ESUZJRVJfX09SSUdJTkFMX1ZBTFVFOgorCQkJCXNldE9yaWdpbmFsVmFsdWUoKERvdWJsZSluZXdWYWx1ZSk7CisJCQkJcmV0dXJuOworCQl9CisJCXN1cGVyLmVTZXQoZmVhdHVyZUlELCBuZXdWYWx1ZSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGVVbnNldChpbnQgZmVhdHVyZUlEKSB7CisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7CisJCQljYXNlIE1vZGlmaWVyUGFja2FnZS5ET1VCTEVfUkFOR0VfTU9ESUZJRVJfX1NUQVJUX1ZBTFVFOgorCQkJCXNldFN0YXJ0VmFsdWUoU1RBUlRfVkFMVUVfRURFRkFVTFQpOworCQkJCXJldHVybjsKKwkJCWNhc2UgTW9kaWZpZXJQYWNrYWdlLkRPVUJMRV9SQU5HRV9NT0RJRklFUl9fRU5EX1ZBTFVFOgorCQkJCXNldEVuZFZhbHVlKEVORF9WQUxVRV9FREVGQVVMVCk7CisJCQkJcmV0dXJuOworCQkJY2FzZSBNb2RpZmllclBhY2thZ2UuRE9VQkxFX1JBTkdFX01PRElGSUVSX19JTkNSRU1FTlQ6CisJCQkJc2V0SW5jcmVtZW50KElOQ1JFTUVOVF9FREVGQVVMVCk7CisJCQkJcmV0dXJuOworCQkJY2FzZSBNb2RpZmllclBhY2thZ2UuRE9VQkxFX1JBTkdFX01PRElGSUVSX19ORVhUX1ZBTFVFOgorCQkJCXNldE5leHRWYWx1ZShORVhUX1ZBTFVFX0VERUZBVUxUKTsKKwkJCQlyZXR1cm47CisJCQljYXNlIE1vZGlmaWVyUGFja2FnZS5ET1VCTEVfUkFOR0VfTU9ESUZJRVJfX09SSUdJTkFMX1ZBTFVFOgorCQkJCXNldE9yaWdpbmFsVmFsdWUoT1JJR0lOQUxfVkFMVUVfRURFRkFVTFQpOworCQkJCXJldHVybjsKKwkJfQorCQlzdXBlci5lVW5zZXQoZmVhdHVyZUlEKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIGJvb2xlYW4gZUlzU2V0KGludCBmZWF0dXJlSUQpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJCWNhc2UgTW9kaWZpZXJQYWNrYWdlLkRPVUJMRV9SQU5HRV9NT0RJRklFUl9fU1RBUlRfVkFMVUU6CisJCQkJcmV0dXJuIHN0YXJ0VmFsdWUgIT0gU1RBUlRfVkFMVUVfRURFRkFVTFQ7CisJCQljYXNlIE1vZGlmaWVyUGFja2FnZS5ET1VCTEVfUkFOR0VfTU9ESUZJRVJfX0VORF9WQUxVRToKKwkJCQlyZXR1cm4gZW5kVmFsdWUgIT0gRU5EX1ZBTFVFX0VERUZBVUxUOworCQkJY2FzZSBNb2RpZmllclBhY2thZ2UuRE9VQkxFX1JBTkdFX01PRElGSUVSX19JTkNSRU1FTlQ6CisJCQkJcmV0dXJuIGluY3JlbWVudCAhPSBJTkNSRU1FTlRfRURFRkFVTFQ7CisJCQljYXNlIE1vZGlmaWVyUGFja2FnZS5ET1VCTEVfUkFOR0VfTU9ESUZJRVJfX05FWFRfVkFMVUU6CisJCQkJcmV0dXJuIG5leHRWYWx1ZSAhPSBORVhUX1ZBTFVFX0VERUZBVUxUOworCQkJY2FzZSBNb2RpZmllclBhY2thZ2UuRE9VQkxFX1JBTkdFX01PRElGSUVSX19PUklHSU5BTF9WQUxVRToKKwkJCQlyZXR1cm4gb3JpZ2luYWxWYWx1ZSAhPSBPUklHSU5BTF9WQUxVRV9FREVGQVVMVDsKKwkJfQorCQlyZXR1cm4gc3VwZXIuZUlzU2V0KGZlYXR1cmVJRCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIFN0cmluZyB0b1N0cmluZygpIHsKKwkJaWYgKGVJc1Byb3h5KCkpIHJldHVybiBzdXBlci50b1N0cmluZygpOworCisJCVN0cmluZ0J1ZmZlciByZXN1bHQgPSBuZXcgU3RyaW5nQnVmZmVyKHN1cGVyLnRvU3RyaW5nKCkpOworCQlyZXN1bHQuYXBwZW5kKCIgKHN0YXJ0VmFsdWU6ICIpOyAvLyROT04tTkxTLTEkCisJCXJlc3VsdC5hcHBlbmQoc3RhcnRWYWx1ZSk7CisJCXJlc3VsdC5hcHBlbmQoIiwgZW5kVmFsdWU6ICIpOyAvLyROT04tTkxTLTEkCisJCXJlc3VsdC5hcHBlbmQoZW5kVmFsdWUpOworCQlyZXN1bHQuYXBwZW5kKCIsIGluY3JlbWVudDogIik7IC8vJE5PTi1OTFMtMSQKKwkJcmVzdWx0LmFwcGVuZChpbmNyZW1lbnQpOworCQlyZXN1bHQuYXBwZW5kKCIsIG5leHRWYWx1ZTogIik7IC8vJE5PTi1OTFMtMSQKKwkJcmVzdWx0LmFwcGVuZChuZXh0VmFsdWUpOworCQlyZXN1bHQuYXBwZW5kKCIsIG9yaWdpbmFsVmFsdWU6ICIpOyAvLyROT04tTkxTLTEkCisJCXJlc3VsdC5hcHBlbmQob3JpZ2luYWxWYWx1ZSk7CisJCXJlc3VsdC5hcHBlbmQoJyknKTsKKwkJcmV0dXJuIHJlc3VsdC50b1N0cmluZygpOworCX0KKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5TYW5pdHlDaGVja2VyI3NhbmUoKQorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBib29sZWFuIHNhbmUoKSB7CisJCWJvb2xlYW4gcmV0VmFsdWUgPSBzdXBlci5zYW5lKCk7CisJCWFzc2VydCByZXRWYWx1ZTsKKworCQlyZXRWYWx1ZSA9IHJldFZhbHVlICYmIChnZXRFbmRWYWx1ZSgpID49IGdldFN0YXJ0VmFsdWUoKSk7CisJCWFzc2VydCByZXRWYWx1ZTsKKworCQlyZXRWYWx1ZSA9IHJldFZhbHVlICYmIChnZXRJbmNyZW1lbnQoKSA+IDAuMCk7CisJCWFzc2VydCByZXRWYWx1ZTsKKworCQlyZXR1cm4gcmV0VmFsdWU7CisJfSAvLyBzYW5lCisKK30gLy8gRG91YmxlUmFuZ2VNb2RpZmllckltcGwKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvbW9kaWZpZXIvaW1wbC9Eb3VibGVTZXF1ZW5jZU1vZGlmaWVySW1wbC5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9tb2RpZmllci9pbXBsL0RvdWJsZVNlcXVlbmNlTW9kaWZpZXJJbXBsLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjJiZThmMAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvbW9kaWZpZXIvaW1wbC9Eb3VibGVTZXF1ZW5jZU1vZGlmaWVySW1wbC5qYXZhCkBAIC0wLDAgKzEsMTk1IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5pbXBsOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLkVMaXN0OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnV0aWwuRURhdGFUeXBlVW5pcXVlRUxpc3Q7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLkRvdWJsZVNlcXVlbmNlTW9kaWZpZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLk1vZGlmaWVyUGFja2FnZTsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPkRvdWJsZSBTZXF1ZW5jZSBNb2RpZmllcjwvYj48L2VtPicuCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIDxwPgorICogVGhlIGZvbGxvd2luZyBmZWF0dXJlcyBhcmUgaW1wbGVtZW50ZWQ6CisgKiA8dWw+CisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLmltcGwuRG91YmxlU2VxdWVuY2VNb2RpZmllckltcGwjZ2V0U2VxdWVuY2UgPGVtPlNlcXVlbmNlPC9lbT59PC9saT4KKyAqIDwvdWw+CisgKiA8L3A+CisgKgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgRG91YmxlU2VxdWVuY2VNb2RpZmllckltcGwgZXh0ZW5kcyBTZXF1ZW5jZU1vZGlmaWVySW1wbCBpbXBsZW1lbnRzIERvdWJsZVNlcXVlbmNlTW9kaWZpZXIgeworCS8qKgorCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldFNlcXVlbmNlKCkgPGVtPlNlcXVlbmNlPC9lbT59JyBhdHRyaWJ1dGUgbGlzdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI2dldFNlcXVlbmNlKCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgRUxpc3Q8RG91YmxlPiBzZXF1ZW5jZTsKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBEb3VibGVTZXF1ZW5jZU1vZGlmaWVySW1wbCgpIHsKKwkJc3VwZXIoKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgRUNsYXNzIGVTdGF0aWNDbGFzcygpIHsKKwkJcmV0dXJuIE1vZGlmaWVyUGFja2FnZS5MaXRlcmFscy5ET1VCTEVfU0VRVUVOQ0VfTU9ESUZJRVI7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVMaXN0PERvdWJsZT4gZ2V0U2VxdWVuY2UoKSB7CisJCWlmIChzZXF1ZW5jZSA9PSBudWxsKSB7CisJCQlzZXF1ZW5jZSA9IG5ldyBFRGF0YVR5cGVVbmlxdWVFTGlzdDxEb3VibGU+KERvdWJsZS5jbGFzcywgdGhpcywgTW9kaWZpZXJQYWNrYWdlLkRPVUJMRV9TRVFVRU5DRV9NT0RJRklFUl9fU0VRVUVOQ0UpOworCQl9CisJCXJldHVybiBzZXF1ZW5jZTsKKwl9CisKKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLmltcGwuU2VxdWVuY2VNb2RpZmllckltcGwjZ2V0TmV4dFZhbHVlKCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgT2JqZWN0IGdldE5leHRWYWx1ZSgpIHsKKwkJaW50IGluZGV4ID0gZ2V0Q3VycmVudFNlcXVlbmNlSW5kZXgoKTsKKwkJZmluYWwgT2JqZWN0IHJldFZhbHVlID0gZ2V0U2VxdWVuY2UoKS5nZXQoaW5kZXgrKyk7CisJCXNldEN1cnJlbnRTZXF1ZW5jZUluZGV4KGluZGV4KTsKKwkJcmV0dXJuIHJldFZhbHVlOworCX0gLy8gZ2V0TmV4dFZhbHVlCisJCisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5pbXBsLlNlcXVlbmNlTW9kaWZpZXJJbXBsI2dldFNlcXVlbmNlU2l6ZSgpCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIGludCBnZXRTZXF1ZW5jZVNpemUoKSB7CisJCXJldHVybiBnZXRTZXF1ZW5jZSgpLnNpemUoKTsKKwl9IC8vIGdldFNlcXVlbmNlU2l6ZQorCQorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuaW1wbC5GZWF0dXJlTW9kaWZpZXJJbXBsI3VwZGF0ZUZlYXR1cmUoKQorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIHVwZGF0ZUZlYXR1cmUoKSB7CisJCXN1cGVyLnVwZGF0ZUZlYXR1cmUoKTsKKwkJZ2V0VGFyZ2V0KCkuZVNldChnZXRFU3RydWN0dXJhbEZlYXR1cmUoKSwgZ2V0TmV4dFZhbHVlKCkpOworCX0KKwkKKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLmltcGwuRmVhdHVyZU1vZGlmaWVySW1wbCNyZXNldCgpCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgcmVzZXQoKSB7CisJCXN1cGVyLnJlc2V0KCk7CisJCWdldFRhcmdldCgpLmVTZXQoZ2V0RVN0cnVjdHVyYWxGZWF0dXJlKCksIGdldE9yaWdpbmFsVmFsdWUoKSk7CisJCXNldE9yaWdpbmFsVmFsdWUoT1JJR0lOQUxfVkFMVUVfRURFRkFVTFQpOyAvLyBUbyBtYWtlIHN1cmUgd2UgY2FwdHVyZSBhbnkgbmV3IHZhbHVlIG5leHQgdGltZSBzaW11bGF0aW9uIGlzIHJ1bgorCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBPYmplY3QgZUdldChpbnQgZmVhdHVyZUlELCBib29sZWFuIHJlc29sdmUsIGJvb2xlYW4gY29yZVR5cGUpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJCWNhc2UgTW9kaWZpZXJQYWNrYWdlLkRPVUJMRV9TRVFVRU5DRV9NT0RJRklFUl9fU0VRVUVOQ0U6CisJCQkJcmV0dXJuIGdldFNlcXVlbmNlKCk7CisJCX0KKwkJcmV0dXJuIHN1cGVyLmVHZXQoZmVhdHVyZUlELCByZXNvbHZlLCBjb3JlVHlwZSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQFN1cHByZXNzV2FybmluZ3MoInVuY2hlY2tlZCIpCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgZVNldChpbnQgZmVhdHVyZUlELCBPYmplY3QgbmV3VmFsdWUpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJCWNhc2UgTW9kaWZpZXJQYWNrYWdlLkRPVUJMRV9TRVFVRU5DRV9NT0RJRklFUl9fU0VRVUVOQ0U6CisJCQkJZ2V0U2VxdWVuY2UoKS5jbGVhcigpOworCQkJCWdldFNlcXVlbmNlKCkuYWRkQWxsKChDb2xsZWN0aW9uPD8gZXh0ZW5kcyBEb3VibGU+KW5ld1ZhbHVlKTsKKwkJCQlyZXR1cm47CisJCX0KKwkJc3VwZXIuZVNldChmZWF0dXJlSUQsIG5ld1ZhbHVlKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBlVW5zZXQoaW50IGZlYXR1cmVJRCkgeworCQlzd2l0Y2ggKGZlYXR1cmVJRCkgeworCQkJY2FzZSBNb2RpZmllclBhY2thZ2UuRE9VQkxFX1NFUVVFTkNFX01PRElGSUVSX19TRVFVRU5DRToKKwkJCQlnZXRTZXF1ZW5jZSgpLmNsZWFyKCk7CisJCQkJcmV0dXJuOworCQl9CisJCXN1cGVyLmVVbnNldChmZWF0dXJlSUQpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBib29sZWFuIGVJc1NldChpbnQgZmVhdHVyZUlEKSB7CisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7CisJCQljYXNlIE1vZGlmaWVyUGFja2FnZS5ET1VCTEVfU0VRVUVOQ0VfTU9ESUZJRVJfX1NFUVVFTkNFOgorCQkJCXJldHVybiBzZXF1ZW5jZSAhPSBudWxsICYmICFzZXF1ZW5jZS5pc0VtcHR5KCk7CisJCX0KKwkJcmV0dXJuIHN1cGVyLmVJc1NldChmZWF0dXJlSUQpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKSB7CisJCWlmIChlSXNQcm94eSgpKSByZXR1cm4gc3VwZXIudG9TdHJpbmcoKTsKKworCQlTdHJpbmdCdWZmZXIgcmVzdWx0ID0gbmV3IFN0cmluZ0J1ZmZlcihzdXBlci50b1N0cmluZygpKTsKKwkJcmVzdWx0LmFwcGVuZCgiIChzZXF1ZW5jZTogIik7IC8vJE5PTi1OTFMtMSQKKwkJcmVzdWx0LmFwcGVuZChzZXF1ZW5jZSk7CisJCXJlc3VsdC5hcHBlbmQoJyknKTsKKwkJcmV0dXJuIHJlc3VsdC50b1N0cmluZygpOworCX0KKworfSAvL0RvdWJsZVNlcXVlbmNlTW9kaWZpZXJJbXBsCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL21vZGlmaWVyL2ltcGwvRmVhdHVyZU1vZGlmaWVySW1wbC5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9tb2RpZmllci9pbXBsL0ZlYXR1cmVNb2RpZmllckltcGwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NDhkOWNiCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9tb2RpZmllci9pbXBsL0ZlYXR1cmVNb2RpZmllckltcGwuamF2YQpAQCAtMCwwICsxLDQ0MCBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuaW1wbDsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzczsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRVN0cnVjdHVyYWxGZWF0dXJlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5JbnRlcm5hbEVPYmplY3Q7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLmltcGwuRU5vdGlmaWNhdGlvbkltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLmltcGwuRU9iamVjdEltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLkZlYXR1cmVNb2RpZmllcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuTW9kaWZpZXJQYWNrYWdlOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiBBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+RmVhdHVyZSBNb2RpZmllcjwvYj48L2VtPicuCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIDxwPgorICogVGhlIGZvbGxvd2luZyBmZWF0dXJlcyBhcmUgaW1wbGVtZW50ZWQ6CisgKiA8dWw+CisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLmltcGwuRmVhdHVyZU1vZGlmaWVySW1wbCNnZXRUYXJnZXQgPGVtPlRhcmdldDwvZW0+fTwvbGk+CisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLmltcGwuRmVhdHVyZU1vZGlmaWVySW1wbCNnZXRFU3RydWN0dXJhbEZlYXR1cmUgPGVtPkVTdHJ1Y3R1cmFsIEZlYXR1cmU8L2VtPn08L2xpPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5pbXBsLkZlYXR1cmVNb2RpZmllckltcGwjZ2V0RmVhdHVyZU5hbWUgPGVtPkZlYXR1cmUgTmFtZTwvZW0+fTwvbGk+CisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLmltcGwuRmVhdHVyZU1vZGlmaWVySW1wbCNnZXRGZWF0dXJlSWQgPGVtPkZlYXR1cmUgSWQ8L2VtPn08L2xpPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5pbXBsLkZlYXR1cmVNb2RpZmllckltcGwjZ2V0Q3VycmVudFZhbHVlVGV4dCA8ZW0+Q3VycmVudCBWYWx1ZSBUZXh0PC9lbT59PC9saT4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuaW1wbC5GZWF0dXJlTW9kaWZpZXJJbXBsI2lzQ29tcGxldGUgPGVtPkNvbXBsZXRlPC9lbT59PC9saT4KKyAqIDwvdWw+CisgKiA8L3A+CisgKgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgYWJzdHJhY3QgY2xhc3MgRmVhdHVyZU1vZGlmaWVySW1wbCBleHRlbmRzIEVPYmplY3RJbXBsIGltcGxlbWVudHMgRmVhdHVyZU1vZGlmaWVyIHsKKwkvKioKKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRUYXJnZXQoKSA8ZW0+VGFyZ2V0PC9lbT59JyByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNnZXRUYXJnZXQoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBFT2JqZWN0IHRhcmdldDsKKworCS8qKgorCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldEVTdHJ1Y3R1cmFsRmVhdHVyZSgpIDxlbT5FU3RydWN0dXJhbCBGZWF0dXJlPC9lbT59JyByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNnZXRFU3RydWN0dXJhbEZlYXR1cmUoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBFU3RydWN0dXJhbEZlYXR1cmUgZVN0cnVjdHVyYWxGZWF0dXJlOworCisJLyoqCisJICogVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldEZlYXR1cmVOYW1lKCkgPGVtPkZlYXR1cmUgTmFtZTwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZ2V0RmVhdHVyZU5hbWUoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgU3RyaW5nIEZFQVRVUkVfTkFNRV9FREVGQVVMVCA9IG51bGw7CisKKwkvKioKKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRGZWF0dXJlTmFtZSgpIDxlbT5GZWF0dXJlIE5hbWU8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI2dldEZlYXR1cmVOYW1lKCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgU3RyaW5nIGZlYXR1cmVOYW1lID0gRkVBVFVSRV9OQU1FX0VERUZBVUxUOworCisJLyoqCisJICogVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldEZlYXR1cmVJZCgpIDxlbT5GZWF0dXJlIElkPC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNnZXRGZWF0dXJlSWQoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgaW50IEZFQVRVUkVfSURfRURFRkFVTFQgPSAwOworCisJLyoqCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0RmVhdHVyZUlkKCkgPGVtPkZlYXR1cmUgSWQ8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI2dldEZlYXR1cmVJZCgpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIGludCBmZWF0dXJlSWQgPSBGRUFUVVJFX0lEX0VERUZBVUxUOworCisJLyoqCisJICogVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldEN1cnJlbnRWYWx1ZVRleHQoKSA8ZW0+Q3VycmVudCBWYWx1ZSBUZXh0PC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNnZXRDdXJyZW50VmFsdWVUZXh0KCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIFN0cmluZyBDVVJSRU5UX1ZBTFVFX1RFWFRfRURFRkFVTFQgPSBudWxsOworCisJLyoqCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0Q3VycmVudFZhbHVlVGV4dCgpIDxlbT5DdXJyZW50IFZhbHVlIFRleHQ8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI2dldEN1cnJlbnRWYWx1ZVRleHQoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBTdHJpbmcgY3VycmVudFZhbHVlVGV4dCA9IENVUlJFTlRfVkFMVUVfVEVYVF9FREVGQVVMVDsKKworCS8qKgorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSAne0BsaW5rICNpc0NvbXBsZXRlKCkgPGVtPkNvbXBsZXRlPC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNpc0NvbXBsZXRlKCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIGJvb2xlYW4gQ09NUExFVEVfRURFRkFVTFQgPSBmYWxzZTsKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBGZWF0dXJlTW9kaWZpZXJJbXBsKCkgeworCQlzdXBlcigpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCBFQ2xhc3MgZVN0YXRpY0NsYXNzKCkgeworCQlyZXR1cm4gTW9kaWZpZXJQYWNrYWdlLkxpdGVyYWxzLkZFQVRVUkVfTU9ESUZJRVI7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCXB1YmxpYyBTdHJpbmcgZ2V0TW9kaWZpY2F0aW9uU3VtbWFyeSgpIHsKKwkJdHJ5IHsKKwkJCWZpbmFsIFN0cmluZ0J1aWxkZXIgc2IgPSBuZXcgU3RyaW5nQnVpbGRlcihlU3RydWN0dXJhbEZlYXR1cmUuZ2V0TmFtZSgpKTsKKwkJCXNiLmFwcGVuZCgiID0gIik7CisJCQlzYi5hcHBlbmQoZ2V0Q3VycmVudFZhbHVlVGV4dCgpKTsKKwkJCXJldHVybiBzYi50b1N0cmluZygpOworCQl9IGNhdGNoIChSdW50aW1lRXhjZXB0aW9uIGUpIHsKKwkJCXJldHVybiAiZm9vIjsKKwkJfQorCX0gLy8gZ2V0TW9kaWZpY2F0aW9uU3VtbWFyeQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCWFic3RyYWN0IHB1YmxpYyBib29sZWFuIGlzQ29tcGxldGUoKTsKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlwdWJsaWMgRVN0cnVjdHVyYWxGZWF0dXJlIGdldEVTdHJ1Y3R1cmFsRmVhdHVyZSgpIHsKKwkJLy8gSXMgaXQgc2V0IHlldD8KKwkJaWYgKCFlSXNTZXQoTW9kaWZpZXJQYWNrYWdlLmVJTlNUQU5DRS5nZXRGZWF0dXJlTW9kaWZpZXJfRVN0cnVjdHVyYWxGZWF0dXJlKCkpKSB7CisJCQkvLyBObworCQkJZVN0cnVjdHVyYWxGZWF0dXJlID0gdGFyZ2V0LmVDbGFzcygpLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZShnZXRGZWF0dXJlSWQoKSk7CisJCX0gLy8gaWYgCisJCQorCQlyZXR1cm4gZVN0cnVjdHVyYWxGZWF0dXJlOworCX0gLy8gZ2V0RVN0cnVjdHVyYWxGZWF0dXJlCisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJcHVibGljIHZvaWQgc2V0RVN0cnVjdHVyYWxGZWF0dXJlKEVTdHJ1Y3R1cmFsRmVhdHVyZSBuZXdFU3RydWN0dXJhbEZlYXR1cmUpIHsKKwkJRVN0cnVjdHVyYWxGZWF0dXJlIG9sZEVTdHJ1Y3R1cmFsRmVhdHVyZSA9IGVTdHJ1Y3R1cmFsRmVhdHVyZTsKKwkJZVN0cnVjdHVyYWxGZWF0dXJlID0gbmV3RVN0cnVjdHVyYWxGZWF0dXJlOworCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpCisJCQllTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBNb2RpZmllclBhY2thZ2UuRkVBVFVSRV9NT0RJRklFUl9fRVNUUlVDVFVSQUxfRkVBVFVSRSwgb2xkRVN0cnVjdHVyYWxGZWF0dXJlLCBlU3RydWN0dXJhbEZlYXR1cmUpKTsKKwkJLy8gSXMgaXQgbnVsbD8KKwkJaWYgKG5ld0VTdHJ1Y3R1cmFsRmVhdHVyZSAhPSBudWxsKSB7CisJCQkvLyBZZXMKKwkJCXNldEZlYXR1cmVJZChuZXdFU3RydWN0dXJhbEZlYXR1cmUuZ2V0RmVhdHVyZUlEKCkpOworCQkJc2V0RmVhdHVyZU5hbWUobmV3RVN0cnVjdHVyYWxGZWF0dXJlLmdldE5hbWUoKSk7CisJCX0gLy8gaWYgCisJCWVsc2UgeworCQkJLy8gTm8KKwkJCXNldEZlYXR1cmVJZChGRUFUVVJFX0lEX0VERUZBVUxUKTsKKwkJfSAvLyBlbHNlIAorCX0gLy8gc2V0RVN0cnVjdHVyYWxGZWF0dXJlCisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgaW50IGdldEZlYXR1cmVJZCgpIHsKKwkJcmV0dXJuIGZlYXR1cmVJZDsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRGZWF0dXJlSWQoaW50IG5ld0ZlYXR1cmVJZCkgeworCQlpbnQgb2xkRmVhdHVyZUlkID0gZmVhdHVyZUlkOworCQlmZWF0dXJlSWQgPSBuZXdGZWF0dXJlSWQ7CisJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkKKwkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIE1vZGlmaWVyUGFja2FnZS5GRUFUVVJFX01PRElGSUVSX19GRUFUVVJFX0lELCBvbGRGZWF0dXJlSWQsIGZlYXR1cmVJZCkpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFT2JqZWN0IGdldFRhcmdldCgpIHsKKwkJaWYgKHRhcmdldCAhPSBudWxsICYmIHRhcmdldC5lSXNQcm94eSgpKSB7CisJCQlJbnRlcm5hbEVPYmplY3Qgb2xkVGFyZ2V0ID0gKEludGVybmFsRU9iamVjdCl0YXJnZXQ7CisJCQl0YXJnZXQgPSBlUmVzb2x2ZVByb3h5KG9sZFRhcmdldCk7CisJCQlpZiAodGFyZ2V0ICE9IG9sZFRhcmdldCkgeworCQkJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkKKwkJCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlJFU09MVkUsIE1vZGlmaWVyUGFja2FnZS5GRUFUVVJFX01PRElGSUVSX19UQVJHRVQsIG9sZFRhcmdldCwgdGFyZ2V0KSk7CisJCQl9CisJCX0KKwkJcmV0dXJuIHRhcmdldDsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRU9iamVjdCBiYXNpY0dldFRhcmdldCgpIHsKKwkJcmV0dXJuIHRhcmdldDsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRUYXJnZXQoRU9iamVjdCBuZXdUYXJnZXQpIHsKKwkJRU9iamVjdCBvbGRUYXJnZXQgPSB0YXJnZXQ7CisJCXRhcmdldCA9IG5ld1RhcmdldDsKKwkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQorCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgTW9kaWZpZXJQYWNrYWdlLkZFQVRVUkVfTU9ESUZJRVJfX1RBUkdFVCwgb2xkVGFyZ2V0LCB0YXJnZXQpKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgU3RyaW5nIGdldEZlYXR1cmVOYW1lKCkgeworCQlyZXR1cm4gZmVhdHVyZU5hbWU7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgc2V0RmVhdHVyZU5hbWUoU3RyaW5nIG5ld0ZlYXR1cmVOYW1lKSB7CisJCVN0cmluZyBvbGRGZWF0dXJlTmFtZSA9IGZlYXR1cmVOYW1lOworCQlmZWF0dXJlTmFtZSA9IG5ld0ZlYXR1cmVOYW1lOworCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpCisJCQllTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBNb2RpZmllclBhY2thZ2UuRkVBVFVSRV9NT0RJRklFUl9fRkVBVFVSRV9OQU1FLCBvbGRGZWF0dXJlTmFtZSwgZmVhdHVyZU5hbWUpKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgU3RyaW5nIGdldEN1cnJlbnRWYWx1ZVRleHQoKSB7CisJCXJldHVybiBjdXJyZW50VmFsdWVUZXh0OworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlhYnN0cmFjdCBwdWJsaWMgdm9pZCB1cGRhdGVGZWF0dXJlKCk7CisJCisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJYWJzdHJhY3QgcHVibGljIHZvaWQgcmVzZXQoKTsKKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5TYW5pdHlDaGVja2VyI3NhbmUoKQorCSAqLworCXB1YmxpYyBib29sZWFuIHNhbmUoKSB7CisJCXJldHVybiB0cnVlOworCX0gLy8gc2FuZQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIE9iamVjdCBlR2V0KGludCBmZWF0dXJlSUQsIGJvb2xlYW4gcmVzb2x2ZSwgYm9vbGVhbiBjb3JlVHlwZSkgeworCQlzd2l0Y2ggKGZlYXR1cmVJRCkgeworCQkJY2FzZSBNb2RpZmllclBhY2thZ2UuRkVBVFVSRV9NT0RJRklFUl9fVEFSR0VUOgorCQkJCWlmIChyZXNvbHZlKSByZXR1cm4gZ2V0VGFyZ2V0KCk7CisJCQkJcmV0dXJuIGJhc2ljR2V0VGFyZ2V0KCk7CisJCQljYXNlIE1vZGlmaWVyUGFja2FnZS5GRUFUVVJFX01PRElGSUVSX19FU1RSVUNUVVJBTF9GRUFUVVJFOgorCQkJCXJldHVybiBnZXRFU3RydWN0dXJhbEZlYXR1cmUoKTsKKwkJCWNhc2UgTW9kaWZpZXJQYWNrYWdlLkZFQVRVUkVfTU9ESUZJRVJfX0ZFQVRVUkVfTkFNRToKKwkJCQlyZXR1cm4gZ2V0RmVhdHVyZU5hbWUoKTsKKwkJCWNhc2UgTW9kaWZpZXJQYWNrYWdlLkZFQVRVUkVfTU9ESUZJRVJfX0ZFQVRVUkVfSUQ6CisJCQkJcmV0dXJuIGdldEZlYXR1cmVJZCgpOworCQkJY2FzZSBNb2RpZmllclBhY2thZ2UuRkVBVFVSRV9NT0RJRklFUl9fQ1VSUkVOVF9WQUxVRV9URVhUOgorCQkJCXJldHVybiBnZXRDdXJyZW50VmFsdWVUZXh0KCk7CisJCQljYXNlIE1vZGlmaWVyUGFja2FnZS5GRUFUVVJFX01PRElGSUVSX19DT01QTEVURToKKwkJCQlyZXR1cm4gaXNDb21wbGV0ZSgpOworCQl9CisJCXJldHVybiBzdXBlci5lR2V0KGZlYXR1cmVJRCwgcmVzb2x2ZSwgY29yZVR5cGUpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGVTZXQoaW50IGZlYXR1cmVJRCwgT2JqZWN0IG5ld1ZhbHVlKSB7CisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7CisJCQljYXNlIE1vZGlmaWVyUGFja2FnZS5GRUFUVVJFX01PRElGSUVSX19UQVJHRVQ6CisJCQkJc2V0VGFyZ2V0KChFT2JqZWN0KW5ld1ZhbHVlKTsKKwkJCQlyZXR1cm47CisJCQljYXNlIE1vZGlmaWVyUGFja2FnZS5GRUFUVVJFX01PRElGSUVSX19FU1RSVUNUVVJBTF9GRUFUVVJFOgorCQkJCXNldEVTdHJ1Y3R1cmFsRmVhdHVyZSgoRVN0cnVjdHVyYWxGZWF0dXJlKW5ld1ZhbHVlKTsKKwkJCQlyZXR1cm47CisJCQljYXNlIE1vZGlmaWVyUGFja2FnZS5GRUFUVVJFX01PRElGSUVSX19GRUFUVVJFX05BTUU6CisJCQkJc2V0RmVhdHVyZU5hbWUoKFN0cmluZyluZXdWYWx1ZSk7CisJCQkJcmV0dXJuOworCQkJY2FzZSBNb2RpZmllclBhY2thZ2UuRkVBVFVSRV9NT0RJRklFUl9fRkVBVFVSRV9JRDoKKwkJCQlzZXRGZWF0dXJlSWQoKEludGVnZXIpbmV3VmFsdWUpOworCQkJCXJldHVybjsKKwkJfQorCQlzdXBlci5lU2V0KGZlYXR1cmVJRCwgbmV3VmFsdWUpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGVVbnNldChpbnQgZmVhdHVyZUlEKSB7CisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7CisJCQljYXNlIE1vZGlmaWVyUGFja2FnZS5GRUFUVVJFX01PRElGSUVSX19UQVJHRVQ6CisJCQkJc2V0VGFyZ2V0KChFT2JqZWN0KW51bGwpOworCQkJCXJldHVybjsKKwkJCWNhc2UgTW9kaWZpZXJQYWNrYWdlLkZFQVRVUkVfTU9ESUZJRVJfX0VTVFJVQ1RVUkFMX0ZFQVRVUkU6CisJCQkJc2V0RVN0cnVjdHVyYWxGZWF0dXJlKChFU3RydWN0dXJhbEZlYXR1cmUpbnVsbCk7CisJCQkJcmV0dXJuOworCQkJY2FzZSBNb2RpZmllclBhY2thZ2UuRkVBVFVSRV9NT0RJRklFUl9fRkVBVFVSRV9OQU1FOgorCQkJCXNldEZlYXR1cmVOYW1lKEZFQVRVUkVfTkFNRV9FREVGQVVMVCk7CisJCQkJcmV0dXJuOworCQkJY2FzZSBNb2RpZmllclBhY2thZ2UuRkVBVFVSRV9NT0RJRklFUl9fRkVBVFVSRV9JRDoKKwkJCQlzZXRGZWF0dXJlSWQoRkVBVFVSRV9JRF9FREVGQVVMVCk7CisJCQkJcmV0dXJuOworCQl9CisJCXN1cGVyLmVVbnNldChmZWF0dXJlSUQpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBib29sZWFuIGVJc1NldChpbnQgZmVhdHVyZUlEKSB7CisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7CisJCQljYXNlIE1vZGlmaWVyUGFja2FnZS5GRUFUVVJFX01PRElGSUVSX19UQVJHRVQ6CisJCQkJcmV0dXJuIHRhcmdldCAhPSBudWxsOworCQkJY2FzZSBNb2RpZmllclBhY2thZ2UuRkVBVFVSRV9NT0RJRklFUl9fRVNUUlVDVFVSQUxfRkVBVFVSRToKKwkJCQlyZXR1cm4gZVN0cnVjdHVyYWxGZWF0dXJlICE9IG51bGw7CisJCQljYXNlIE1vZGlmaWVyUGFja2FnZS5GRUFUVVJFX01PRElGSUVSX19GRUFUVVJFX05BTUU6CisJCQkJcmV0dXJuIEZFQVRVUkVfTkFNRV9FREVGQVVMVCA9PSBudWxsID8gZmVhdHVyZU5hbWUgIT0gbnVsbCA6ICFGRUFUVVJFX05BTUVfRURFRkFVTFQuZXF1YWxzKGZlYXR1cmVOYW1lKTsKKwkJCWNhc2UgTW9kaWZpZXJQYWNrYWdlLkZFQVRVUkVfTU9ESUZJRVJfX0ZFQVRVUkVfSUQ6CisJCQkJcmV0dXJuIGZlYXR1cmVJZCAhPSBGRUFUVVJFX0lEX0VERUZBVUxUOworCQkJY2FzZSBNb2RpZmllclBhY2thZ2UuRkVBVFVSRV9NT0RJRklFUl9fQ1VSUkVOVF9WQUxVRV9URVhUOgorCQkJCXJldHVybiBDVVJSRU5UX1ZBTFVFX1RFWFRfRURFRkFVTFQgPT0gbnVsbCA/IGN1cnJlbnRWYWx1ZVRleHQgIT0gbnVsbCA6ICFDVVJSRU5UX1ZBTFVFX1RFWFRfRURFRkFVTFQuZXF1YWxzKGN1cnJlbnRWYWx1ZVRleHQpOworCQkJY2FzZSBNb2RpZmllclBhY2thZ2UuRkVBVFVSRV9NT0RJRklFUl9fQ09NUExFVEU6CisJCQkJcmV0dXJuIGlzQ29tcGxldGUoKSAhPSBDT01QTEVURV9FREVGQVVMVDsKKwkJfQorCQlyZXR1cm4gc3VwZXIuZUlzU2V0KGZlYXR1cmVJRCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIFN0cmluZyB0b1N0cmluZygpIHsKKwkJaWYgKGVJc1Byb3h5KCkpIHJldHVybiBzdXBlci50b1N0cmluZygpOworCisJCVN0cmluZ0J1ZmZlciByZXN1bHQgPSBuZXcgU3RyaW5nQnVmZmVyKHN1cGVyLnRvU3RyaW5nKCkpOworCQlyZXN1bHQuYXBwZW5kKCIgKGZlYXR1cmVOYW1lOiAiKTsgLy8kTk9OLU5MUy0xJAorCQlyZXN1bHQuYXBwZW5kKGZlYXR1cmVOYW1lKTsKKwkJcmVzdWx0LmFwcGVuZCgiLCBmZWF0dXJlSWQ6ICIpOyAvLyROT04tTkxTLTEkCisJCXJlc3VsdC5hcHBlbmQoZmVhdHVyZUlkKTsKKwkJcmVzdWx0LmFwcGVuZCgiLCBjdXJyZW50VmFsdWVUZXh0OiAiKTsgLy8kTk9OLU5MUy0xJAorCQlyZXN1bHQuYXBwZW5kKGN1cnJlbnRWYWx1ZVRleHQpOworCQlyZXN1bHQuYXBwZW5kKCcpJyk7CisJCXJldHVybiByZXN1bHQudG9TdHJpbmcoKTsKKwl9CisKK30gLy9GZWF0dXJlTW9kaWZpZXJJbXBsCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL21vZGlmaWVyL2ltcGwvSW50ZWdlck1vZGlmaWVySW1wbC5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9tb2RpZmllci9pbXBsL0ludGVnZXJNb2RpZmllckltcGwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kOTllYTFjCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9tb2RpZmllci9pbXBsL0ludGVnZXJNb2RpZmllckltcGwuamF2YQpAQCAtMCwwICsxLDI1NyBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuaW1wbDsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzczsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuaW1wbC5FTm90aWZpY2F0aW9uSW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuSW50ZWdlck1vZGlmaWVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5Nb2RpZmllclBhY2thZ2U7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIEFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5JbnRlZ2VyIE1vZGlmaWVyPC9iPjwvZW0+Jy4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogPHA+CisgKiBUaGUgZm9sbG93aW5nIGZlYXR1cmVzIGFyZSBpbXBsZW1lbnRlZDoKKyAqIDx1bD4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuaW1wbC5JbnRlZ2VyTW9kaWZpZXJJbXBsI2dldFZhbHVlIDxlbT5WYWx1ZTwvZW0+fTwvbGk+CisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLmltcGwuSW50ZWdlck1vZGlmaWVySW1wbCNnZXRPcmlnaW5hbFZhbHVlIDxlbT5PcmlnaW5hbCBWYWx1ZTwvZW0+fTwvbGk+CisgKiA8L3VsPgorICogPC9wPgorICoKKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIEludGVnZXJNb2RpZmllckltcGwgZXh0ZW5kcyBTaW5nbGVWYWx1ZU1vZGlmaWVySW1wbCBpbXBsZW1lbnRzIEludGVnZXJNb2RpZmllciB7CisJLyoqCisJICogVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldFZhbHVlKCkgPGVtPlZhbHVlPC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNnZXRWYWx1ZSgpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBpbnQgVkFMVUVfRURFRkFVTFQgPSAwOworCS8qKgorCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldFZhbHVlKCkgPGVtPlZhbHVlPC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNnZXRWYWx1ZSgpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIGludCB2YWx1ZSA9IFZBTFVFX0VERUZBVUxUOworCS8qKgorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRPcmlnaW5hbFZhbHVlKCkgPGVtPk9yaWdpbmFsIFZhbHVlPC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNnZXRPcmlnaW5hbFZhbHVlKCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIGludCBPUklHSU5BTF9WQUxVRV9FREVGQVVMVCA9IC0yMDAwMDAwMDAwOworCS8qKgorCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldE9yaWdpbmFsVmFsdWUoKSA8ZW0+T3JpZ2luYWwgVmFsdWU8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI2dldE9yaWdpbmFsVmFsdWUoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBpbnQgb3JpZ2luYWxWYWx1ZSA9IE9SSUdJTkFMX1ZBTFVFX0VERUZBVUxUOworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBJbnRlZ2VyTW9kaWZpZXJJbXBsKCkgeworCQlzdXBlcigpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCBFQ2xhc3MgZVN0YXRpY0NsYXNzKCkgeworCQlyZXR1cm4gTW9kaWZpZXJQYWNrYWdlLkxpdGVyYWxzLklOVEVHRVJfTU9ESUZJRVI7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIGludCBnZXRWYWx1ZSgpIHsKKwkJcmV0dXJuIHZhbHVlOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIHNldFZhbHVlKGludCBuZXdWYWx1ZSkgeworCQlpbnQgb2xkVmFsdWUgPSB2YWx1ZTsKKwkJdmFsdWUgPSBuZXdWYWx1ZTsKKwkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQorCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgTW9kaWZpZXJQYWNrYWdlLklOVEVHRVJfTU9ESUZJRVJfX1ZBTFVFLCBvbGRWYWx1ZSwgdmFsdWUpKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgaW50IGdldE9yaWdpbmFsVmFsdWUoKSB7CisJCXJldHVybiBvcmlnaW5hbFZhbHVlOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIHNldE9yaWdpbmFsVmFsdWUoaW50IG5ld09yaWdpbmFsVmFsdWUpIHsKKwkJaW50IG9sZE9yaWdpbmFsVmFsdWUgPSBvcmlnaW5hbFZhbHVlOworCQlvcmlnaW5hbFZhbHVlID0gbmV3T3JpZ2luYWxWYWx1ZTsKKwkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQorCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgTW9kaWZpZXJQYWNrYWdlLklOVEVHRVJfTU9ESUZJRVJfX09SSUdJTkFMX1ZBTFVFLCBvbGRPcmlnaW5hbFZhbHVlLCBvcmlnaW5hbFZhbHVlKSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIE9iamVjdCBlR2V0KGludCBmZWF0dXJlSUQsIGJvb2xlYW4gcmVzb2x2ZSwgYm9vbGVhbiBjb3JlVHlwZSkgeworCQlzd2l0Y2ggKGZlYXR1cmVJRCkgeworCQkJY2FzZSBNb2RpZmllclBhY2thZ2UuSU5URUdFUl9NT0RJRklFUl9fVkFMVUU6CisJCQkJcmV0dXJuIGdldFZhbHVlKCk7CisJCQljYXNlIE1vZGlmaWVyUGFja2FnZS5JTlRFR0VSX01PRElGSUVSX19PUklHSU5BTF9WQUxVRToKKwkJCQlyZXR1cm4gZ2V0T3JpZ2luYWxWYWx1ZSgpOworCQl9CisJCXJldHVybiBzdXBlci5lR2V0KGZlYXR1cmVJRCwgcmVzb2x2ZSwgY29yZVR5cGUpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGVTZXQoaW50IGZlYXR1cmVJRCwgT2JqZWN0IG5ld1ZhbHVlKSB7CisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7CisJCQljYXNlIE1vZGlmaWVyUGFja2FnZS5JTlRFR0VSX01PRElGSUVSX19WQUxVRToKKwkJCQlzZXRWYWx1ZSgoSW50ZWdlciluZXdWYWx1ZSk7CisJCQkJcmV0dXJuOworCQkJY2FzZSBNb2RpZmllclBhY2thZ2UuSU5URUdFUl9NT0RJRklFUl9fT1JJR0lOQUxfVkFMVUU6CisJCQkJc2V0T3JpZ2luYWxWYWx1ZSgoSW50ZWdlciluZXdWYWx1ZSk7CisJCQkJcmV0dXJuOworCQl9CisJCXN1cGVyLmVTZXQoZmVhdHVyZUlELCBuZXdWYWx1ZSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgZVVuc2V0KGludCBmZWF0dXJlSUQpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJCWNhc2UgTW9kaWZpZXJQYWNrYWdlLklOVEVHRVJfTU9ESUZJRVJfX1ZBTFVFOgorCQkJCXNldFZhbHVlKFZBTFVFX0VERUZBVUxUKTsKKwkJCQlyZXR1cm47CisJCQljYXNlIE1vZGlmaWVyUGFja2FnZS5JTlRFR0VSX01PRElGSUVSX19PUklHSU5BTF9WQUxVRToKKwkJCQlzZXRPcmlnaW5hbFZhbHVlKE9SSUdJTkFMX1ZBTFVFX0VERUZBVUxUKTsKKwkJCQlyZXR1cm47CisJCX0KKwkJc3VwZXIuZVVuc2V0KGZlYXR1cmVJRCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIGJvb2xlYW4gZUlzU2V0KGludCBmZWF0dXJlSUQpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJCWNhc2UgTW9kaWZpZXJQYWNrYWdlLklOVEVHRVJfTU9ESUZJRVJfX1ZBTFVFOgorCQkJCXJldHVybiB2YWx1ZSAhPSBWQUxVRV9FREVGQVVMVDsKKwkJCWNhc2UgTW9kaWZpZXJQYWNrYWdlLklOVEVHRVJfTU9ESUZJRVJfX09SSUdJTkFMX1ZBTFVFOgorCQkJCXJldHVybiBvcmlnaW5hbFZhbHVlICE9IE9SSUdJTkFMX1ZBTFVFX0VERUZBVUxUOworCQl9CisJCXJldHVybiBzdXBlci5lSXNTZXQoZmVhdHVyZUlEKTsKKwl9CisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5pbXBsLkZlYXR1cmVNb2RpZmllckltcGwjdXBkYXRlRmVhdHVyZSgpCisJICovCisJCisJQFN1cHByZXNzV2FybmluZ3MoImJveGluZyIpCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgdXBkYXRlRmVhdHVyZSgpIHsKKwkJLy8gT3JpZ2luYWwgdmFsdWUgY2FwdHVyZWQgeWV0PworCQlpZiAoIWVJc1NldChNb2RpZmllclBhY2thZ2UuRE9VQkxFX01PRElGSUVSX19PUklHSU5BTF9WQUxVRSkpIHsKKwkJCS8vIE5vCisJCQlzZXRPcmlnaW5hbFZhbHVlKChJbnRlZ2VyKXRhcmdldC5lR2V0KGdldEVTdHJ1Y3R1cmFsRmVhdHVyZSgpKSk7CisJCX0gLy8gaWYKKwkJdGFyZ2V0LmVTZXQoZ2V0RVN0cnVjdHVyYWxGZWF0dXJlKCksIGdldFZhbHVlKCkpOworCQljb21wbGV0ZSA9IHRydWU7CisJfSAvLyB1cGRhdGVGZWF0dXJlCisKKwkKKwkvKioKKwkgKnJlc2V0CisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgcmVzZXQoKSB7CisJCWNvbXBsZXRlID0gZmFsc2U7CisJCWRvdWJsZSBvcmlnaW5hbFZhbHVlID0gZ2V0T3JpZ2luYWxWYWx1ZSgpOworCQlpZihvcmlnaW5hbFZhbHVlICE9IE9SSUdJTkFMX1ZBTFVFX0VERUZBVUxUKSAvLyBXZSBkb24ndCB3YW50IHRvIHNldCBpdCBpZiBpdCBoYXNuJ3QgYmVlbiBjYXB0dXJlZCB5ZXQuIAorCQkJdGFyZ2V0LmVTZXQoZ2V0RVN0cnVjdHVyYWxGZWF0dXJlKCksIG9yaWdpbmFsVmFsdWUpOworCQl0YXJnZXQuZVNldChnZXRFU3RydWN0dXJhbEZlYXR1cmUoKSwgZ2V0T3JpZ2luYWxWYWx1ZSgpKTsKKwkJc2V0T3JpZ2luYWxWYWx1ZShPUklHSU5BTF9WQUxVRV9FREVGQVVMVCk7IC8vIFRvIG1ha2Ugc3VyZSB3ZSBjYXB0dXJlIGFueSBuZXcgdmFsdWUgbmV4dCB0aW1lIHNpbXVsYXRpb24gaXMgcnVuCisJfQorCQorCQorCXByaXZhdGUgYm9vbGVhbiBjb21wbGV0ZSA9IGZhbHNlOworCS8qKgorCSAqIGlzQ29tcGxldGUKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgYm9vbGVhbiBpc0NvbXBsZXRlKCkgeworCQlyZXR1cm4gY29tcGxldGU7CisJfQorCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKSB7CisJCWlmIChlSXNQcm94eSgpKSByZXR1cm4gc3VwZXIudG9TdHJpbmcoKTsKKworCQlTdHJpbmdCdWZmZXIgcmVzdWx0ID0gbmV3IFN0cmluZ0J1ZmZlcihzdXBlci50b1N0cmluZygpKTsKKwkJcmVzdWx0LmFwcGVuZCgiICh2YWx1ZTogIik7IC8vJE5PTi1OTFMtMSQKKwkJcmVzdWx0LmFwcGVuZCh2YWx1ZSk7CisJCXJlc3VsdC5hcHBlbmQoIiwgb3JpZ2luYWxWYWx1ZTogIik7IC8vJE5PTi1OTFMtMSQKKwkJcmVzdWx0LmFwcGVuZChvcmlnaW5hbFZhbHVlKTsKKwkJcmVzdWx0LmFwcGVuZCgnKScpOworCQlyZXR1cm4gcmVzdWx0LnRvU3RyaW5nKCk7CisJfQorCit9IC8vSW50ZWdlck1vZGlmaWVySW1wbApkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9tb2RpZmllci9pbXBsL0ludGVnZXJOT1BNb2RpZmllckltcGwuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvbW9kaWZpZXIvaW1wbC9JbnRlZ2VyTk9QTW9kaWZpZXJJbXBsLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDYzYmY1OQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvbW9kaWZpZXIvaW1wbC9JbnRlZ2VyTk9QTW9kaWZpZXJJbXBsLmphdmEKQEAgLTAsMCArMSw0NyBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuaW1wbDsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5JbnRlZ2VyTk9QTW9kaWZpZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLk1vZGlmaWVyUGFja2FnZTsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPkludGVnZXIgTk9QIE1vZGlmaWVyPC9iPjwvZW0+Jy4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogPHA+CisgKiA8L3A+CisgKgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgSW50ZWdlck5PUE1vZGlmaWVySW1wbCBleHRlbmRzIE5PUE1vZGlmaWVySW1wbCBpbXBsZW1lbnRzIEludGVnZXJOT1BNb2RpZmllciB7CisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIEludGVnZXJOT1BNb2RpZmllckltcGwoKSB7CisJCXN1cGVyKCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIEVDbGFzcyBlU3RhdGljQ2xhc3MoKSB7CisJCXJldHVybiBNb2RpZmllclBhY2thZ2UuTGl0ZXJhbHMuSU5URUdFUl9OT1BfTU9ESUZJRVI7CisJfQorCit9IC8vSW50ZWdlck5PUE1vZGlmaWVySW1wbApkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9tb2RpZmllci9pbXBsL0ludGVnZXJSYW5nZU1vZGlmaWVySW1wbC5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9tb2RpZmllci9pbXBsL0ludGVnZXJSYW5nZU1vZGlmaWVySW1wbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYzMzFjY2IKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL21vZGlmaWVyL2ltcGwvSW50ZWdlclJhbmdlTW9kaWZpZXJJbXBsLmphdmEKQEAgLTAsMCArMSw0NDIgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLmltcGw7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLmltcGwuRU5vdGlmaWNhdGlvbkltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLkludGVnZXJSYW5nZU1vZGlmaWVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5Nb2RpZmllclBhY2thZ2U7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIEFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5JbnRlZ2VyIFJhbmdlIE1vZGlmaWVyPC9iPjwvZW0+Jy4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogPHA+CisgKiBUaGUgZm9sbG93aW5nIGZlYXR1cmVzIGFyZSBpbXBsZW1lbnRlZDoKKyAqIDx1bD4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuaW1wbC5JbnRlZ2VyUmFuZ2VNb2RpZmllckltcGwjZ2V0U3RhcnRWYWx1ZSA8ZW0+U3RhcnQgVmFsdWU8L2VtPn08L2xpPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5pbXBsLkludGVnZXJSYW5nZU1vZGlmaWVySW1wbCNnZXRFbmRWYWx1ZSA8ZW0+RW5kIFZhbHVlPC9lbT59PC9saT4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuaW1wbC5JbnRlZ2VyUmFuZ2VNb2RpZmllckltcGwjZ2V0SW5jcmVtZW50IDxlbT5JbmNyZW1lbnQ8L2VtPn08L2xpPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5pbXBsLkludGVnZXJSYW5nZU1vZGlmaWVySW1wbCNnZXROZXh0VmFsdWUgPGVtPk5leHQgVmFsdWU8L2VtPn08L2xpPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5pbXBsLkludGVnZXJSYW5nZU1vZGlmaWVySW1wbCNnZXRPcmlnaW5hbFZhbHVlIDxlbT5PcmlnaW5hbCBWYWx1ZTwvZW0+fTwvbGk+CisgKiA8L3VsPgorICogPC9wPgorICoKKyAqIEBnZW5lcmF0ZWQKKyAqLworQFN1cHByZXNzV2FybmluZ3MoImJveGluZyIpCitwdWJsaWMgY2xhc3MgSW50ZWdlclJhbmdlTW9kaWZpZXJJbXBsIGV4dGVuZHMgUmFuZ2VNb2RpZmllckltcGwgaW1wbGVtZW50cyBJbnRlZ2VyUmFuZ2VNb2RpZmllciB7CisJLyoqCisJICogVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldFN0YXJ0VmFsdWUoKSA8ZW0+U3RhcnQgVmFsdWU8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI2dldFN0YXJ0VmFsdWUoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgaW50IFNUQVJUX1ZBTFVFX0VERUZBVUxUID0gLTk5OTk5OTk5OworCS8qKgorCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldFN0YXJ0VmFsdWUoKSA8ZW0+U3RhcnQgVmFsdWU8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI2dldFN0YXJ0VmFsdWUoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBpbnQgc3RhcnRWYWx1ZSA9IFNUQVJUX1ZBTFVFX0VERUZBVUxUOworCS8qKgorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRFbmRWYWx1ZSgpIDxlbT5FbmQgVmFsdWU8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI2dldEVuZFZhbHVlKCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIGludCBFTkRfVkFMVUVfRURFRkFVTFQgPSAtOTk5OTk5OTk7CisJLyoqCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0RW5kVmFsdWUoKSA8ZW0+RW5kIFZhbHVlPC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNnZXRFbmRWYWx1ZSgpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIGludCBlbmRWYWx1ZSA9IEVORF9WQUxVRV9FREVGQVVMVDsKKwkvKioKKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0SW5jcmVtZW50KCkgPGVtPkluY3JlbWVudDwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZ2V0SW5jcmVtZW50KCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIGludCBJTkNSRU1FTlRfRURFRkFVTFQgPSAtOTk5OTk5OTk7CisJLyoqCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0SW5jcmVtZW50KCkgPGVtPkluY3JlbWVudDwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZ2V0SW5jcmVtZW50KCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgaW50IGluY3JlbWVudCA9IElOQ1JFTUVOVF9FREVGQVVMVDsKKworCS8qKgorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXROZXh0VmFsdWUoKSA8ZW0+TmV4dCBWYWx1ZTwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZ2V0TmV4dFZhbHVlKCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIGludCBORVhUX1ZBTFVFX0VERUZBVUxUID0gLTk5OTk5OTk5OworCS8qKgorCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldE5leHRWYWx1ZSgpIDxlbT5OZXh0IFZhbHVlPC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNnZXROZXh0VmFsdWUoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBpbnQgbmV4dFZhbHVlID0gTkVYVF9WQUxVRV9FREVGQVVMVDsKKwkvKioKKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0T3JpZ2luYWxWYWx1ZSgpIDxlbT5PcmlnaW5hbCBWYWx1ZTwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZ2V0T3JpZ2luYWxWYWx1ZSgpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBpbnQgT1JJR0lOQUxfVkFMVUVfRURFRkFVTFQgPSAwOworCS8qKgorCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldE9yaWdpbmFsVmFsdWUoKSA8ZW0+T3JpZ2luYWwgVmFsdWU8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI2dldE9yaWdpbmFsVmFsdWUoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBpbnQgb3JpZ2luYWxWYWx1ZSA9IE9SSUdJTkFMX1ZBTFVFX0VERUZBVUxUOworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBJbnRlZ2VyUmFuZ2VNb2RpZmllckltcGwoKSB7CisJCXN1cGVyKCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIEVDbGFzcyBlU3RhdGljQ2xhc3MoKSB7CisJCXJldHVybiBNb2RpZmllclBhY2thZ2UuTGl0ZXJhbHMuSU5URUdFUl9SQU5HRV9NT0RJRklFUjsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgaW50IGdldFN0YXJ0VmFsdWUoKSB7CisJCXJldHVybiBzdGFydFZhbHVlOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIHNldFN0YXJ0VmFsdWUoaW50IG5ld1N0YXJ0VmFsdWUpIHsKKwkJaW50IG9sZFN0YXJ0VmFsdWUgPSBzdGFydFZhbHVlOworCQlzdGFydFZhbHVlID0gbmV3U3RhcnRWYWx1ZTsKKwkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQorCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgTW9kaWZpZXJQYWNrYWdlLklOVEVHRVJfUkFOR0VfTU9ESUZJRVJfX1NUQVJUX1ZBTFVFLCBvbGRTdGFydFZhbHVlLCBzdGFydFZhbHVlKSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIGludCBnZXRFbmRWYWx1ZSgpIHsKKwkJcmV0dXJuIGVuZFZhbHVlOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIHNldEVuZFZhbHVlKGludCBuZXdFbmRWYWx1ZSkgeworCQlpbnQgb2xkRW5kVmFsdWUgPSBlbmRWYWx1ZTsKKwkJZW5kVmFsdWUgPSBuZXdFbmRWYWx1ZTsKKwkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQorCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgTW9kaWZpZXJQYWNrYWdlLklOVEVHRVJfUkFOR0VfTU9ESUZJRVJfX0VORF9WQUxVRSwgb2xkRW5kVmFsdWUsIGVuZFZhbHVlKSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIGludCBnZXRJbmNyZW1lbnQoKSB7CisJCXJldHVybiBpbmNyZW1lbnQ7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgc2V0SW5jcmVtZW50KGludCBuZXdJbmNyZW1lbnQpIHsKKwkJaW50IG9sZEluY3JlbWVudCA9IGluY3JlbWVudDsKKwkJaW5jcmVtZW50ID0gbmV3SW5jcmVtZW50OworCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpCisJCQllTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBNb2RpZmllclBhY2thZ2UuSU5URUdFUl9SQU5HRV9NT0RJRklFUl9fSU5DUkVNRU5ULCBvbGRJbmNyZW1lbnQsIGluY3JlbWVudCkpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlwdWJsaWMgaW50IGdldE5leHRWYWx1ZSgpIHsKKwkJLy8gVW5zZXQ/CisJCWlmICghZUlzU2V0KE1vZGlmaWVyUGFja2FnZS5JTlRFR0VSX1JBTkdFX01PRElGSUVSX19ORVhUX1ZBTFVFKSkgeworCQkJLy8gWWVzCisJCQlzZXROZXh0VmFsdWUoZ2V0U3RhcnRWYWx1ZSgpKTsKKwkJfSAvLyBpZgorCQkKKwkJZmluYWwgaW50IHJldFZhbHVlID0gbmV4dFZhbHVlOworCQljb21wbGV0ZSA9IHJldFZhbHVlID09IGdldEVuZFZhbHVlKCk7CisJCQorCQkvLyBTdGlsbCBpbmNyZW1lbnRpbmc/CisJCWlmICghY29tcGxldGUpIHsKKwkJCS8vIFllcworCQkJZmluYWwgaW50IHRlbXAgPSByZXRWYWx1ZSArIGdldEluY3JlbWVudCgpOworCQkJLy8gV291bGQgdGhlIG5ldyBjdXJyZW50VmFsdWUgYmUgZXF1YWwgb3IgInBhc3QiIHRoZSBlbmRWYWx1ZT8KKwkJCWlmIChNYXRoLmFicyh0ZW1wKSA8IE1hdGguYWJzKGdldEVuZFZhbHVlKCkpKSB7CisJCQkJLy8gTm8KKwkJCQlzZXROZXh0VmFsdWUodGVtcCk7CisJCQl9IC8vIGlmCisJCQllbHNlIHsKKwkJCQkvLyBZZXMKKwkJCQlzZXROZXh0VmFsdWUoZ2V0RW5kVmFsdWUoKSk7CisJCQl9IC8vIGVsc2UgCisJCX0gLy8gaWYgCisJCWN1cnJlbnRWYWx1ZVRleHQgPSBJbnRlZ2VyLnRvU3RyaW5nKHJldFZhbHVlKTsKKwkJcmV0dXJuIHJldFZhbHVlOworCX0gLy8gZ2V0TmV4dFZhbHVlCisJCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgc2V0TmV4dFZhbHVlKGludCBuZXdOZXh0VmFsdWUpIHsKKwkJaW50IG9sZE5leHRWYWx1ZSA9IG5leHRWYWx1ZTsKKwkJbmV4dFZhbHVlID0gbmV3TmV4dFZhbHVlOworCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpCisJCQllTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBNb2RpZmllclBhY2thZ2UuSU5URUdFUl9SQU5HRV9NT0RJRklFUl9fTkVYVF9WQUxVRSwgb2xkTmV4dFZhbHVlLCBuZXh0VmFsdWUpKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgaW50IGdldE9yaWdpbmFsVmFsdWUoKSB7CisJCXJldHVybiBvcmlnaW5hbFZhbHVlOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIHNldE9yaWdpbmFsVmFsdWUoaW50IG5ld09yaWdpbmFsVmFsdWUpIHsKKwkJaW50IG9sZE9yaWdpbmFsVmFsdWUgPSBvcmlnaW5hbFZhbHVlOworCQlvcmlnaW5hbFZhbHVlID0gbmV3T3JpZ2luYWxWYWx1ZTsKKwkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQorCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgTW9kaWZpZXJQYWNrYWdlLklOVEVHRVJfUkFOR0VfTU9ESUZJRVJfX09SSUdJTkFMX1ZBTFVFLCBvbGRPcmlnaW5hbFZhbHVlLCBvcmlnaW5hbFZhbHVlKSk7CisJfQorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuaW1wbC5GZWF0dXJlTW9kaWZpZXJJbXBsI3VwZGF0ZUZlYXR1cmUoKQorCSAqLworCQorCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIHVwZGF0ZUZlYXR1cmUoKSB7CisJCS8vIE9yaWdpbmFsIHZhbHVlIGNhcHR1cmVkIHlldD8KKwkJaWYgKCFlSXNTZXQoTW9kaWZpZXJQYWNrYWdlLklOVEVHRVJfUkFOR0VfTU9ESUZJRVJfX09SSUdJTkFMX1ZBTFVFKSkgeworCQkJLy8gTm8KKwkJCXNldE9yaWdpbmFsVmFsdWUoKEludGVnZXIpZ2V0VGFyZ2V0KCkuZUdldChnZXRFU3RydWN0dXJhbEZlYXR1cmUoKSkpOworCQl9IC8vIGlmCisJCWdldFRhcmdldCgpLmVTZXQoZ2V0RVN0cnVjdHVyYWxGZWF0dXJlKCksZ2V0TmV4dFZhbHVlKCkpOworCX0KKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLmltcGwuUmFuZ2VNb2RpZmllckltcGwjcmVzZXQoKQorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIHJlc2V0KCkgeworCQlzdXBlci5yZXNldCgpOworCQllVW5zZXQoTW9kaWZpZXJQYWNrYWdlLklOVEVHRVJfUkFOR0VfTU9ESUZJRVJfX05FWFRfVkFMVUUpOworCQlnZXRUYXJnZXQoKS5lU2V0KGdldEVTdHJ1Y3R1cmFsRmVhdHVyZSgpLCBnZXRPcmlnaW5hbFZhbHVlKCkpOworCQlzZXRPcmlnaW5hbFZhbHVlKE9SSUdJTkFMX1ZBTFVFX0VERUZBVUxUKTsgLy8gVG8gbWFrZSBzdXJlIHdlIGNhcHR1cmUgYW55IG5ldyB2YWx1ZSBuZXh0IHRpbWUgc2ltdWxhdGlvbiBpcyBydW4KKwl9CisJCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIE9iamVjdCBlR2V0KGludCBmZWF0dXJlSUQsIGJvb2xlYW4gcmVzb2x2ZSwgYm9vbGVhbiBjb3JlVHlwZSkgeworCQlzd2l0Y2ggKGZlYXR1cmVJRCkgeworCQkJY2FzZSBNb2RpZmllclBhY2thZ2UuSU5URUdFUl9SQU5HRV9NT0RJRklFUl9fU1RBUlRfVkFMVUU6CisJCQkJcmV0dXJuIGdldFN0YXJ0VmFsdWUoKTsKKwkJCWNhc2UgTW9kaWZpZXJQYWNrYWdlLklOVEVHRVJfUkFOR0VfTU9ESUZJRVJfX0VORF9WQUxVRToKKwkJCQlyZXR1cm4gZ2V0RW5kVmFsdWUoKTsKKwkJCWNhc2UgTW9kaWZpZXJQYWNrYWdlLklOVEVHRVJfUkFOR0VfTU9ESUZJRVJfX0lOQ1JFTUVOVDoKKwkJCQlyZXR1cm4gZ2V0SW5jcmVtZW50KCk7CisJCQljYXNlIE1vZGlmaWVyUGFja2FnZS5JTlRFR0VSX1JBTkdFX01PRElGSUVSX19ORVhUX1ZBTFVFOgorCQkJCXJldHVybiBnZXROZXh0VmFsdWUoKTsKKwkJCWNhc2UgTW9kaWZpZXJQYWNrYWdlLklOVEVHRVJfUkFOR0VfTU9ESUZJRVJfX09SSUdJTkFMX1ZBTFVFOgorCQkJCXJldHVybiBnZXRPcmlnaW5hbFZhbHVlKCk7CisJCX0KKwkJcmV0dXJuIHN1cGVyLmVHZXQoZmVhdHVyZUlELCByZXNvbHZlLCBjb3JlVHlwZSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgZVNldChpbnQgZmVhdHVyZUlELCBPYmplY3QgbmV3VmFsdWUpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJCWNhc2UgTW9kaWZpZXJQYWNrYWdlLklOVEVHRVJfUkFOR0VfTU9ESUZJRVJfX1NUQVJUX1ZBTFVFOgorCQkJCXNldFN0YXJ0VmFsdWUoKEludGVnZXIpbmV3VmFsdWUpOworCQkJCXJldHVybjsKKwkJCWNhc2UgTW9kaWZpZXJQYWNrYWdlLklOVEVHRVJfUkFOR0VfTU9ESUZJRVJfX0VORF9WQUxVRToKKwkJCQlzZXRFbmRWYWx1ZSgoSW50ZWdlciluZXdWYWx1ZSk7CisJCQkJcmV0dXJuOworCQkJY2FzZSBNb2RpZmllclBhY2thZ2UuSU5URUdFUl9SQU5HRV9NT0RJRklFUl9fSU5DUkVNRU5UOgorCQkJCXNldEluY3JlbWVudCgoSW50ZWdlciluZXdWYWx1ZSk7CisJCQkJcmV0dXJuOworCQkJY2FzZSBNb2RpZmllclBhY2thZ2UuSU5URUdFUl9SQU5HRV9NT0RJRklFUl9fTkVYVF9WQUxVRToKKwkJCQlzZXROZXh0VmFsdWUoKEludGVnZXIpbmV3VmFsdWUpOworCQkJCXJldHVybjsKKwkJCWNhc2UgTW9kaWZpZXJQYWNrYWdlLklOVEVHRVJfUkFOR0VfTU9ESUZJRVJfX09SSUdJTkFMX1ZBTFVFOgorCQkJCXNldE9yaWdpbmFsVmFsdWUoKEludGVnZXIpbmV3VmFsdWUpOworCQkJCXJldHVybjsKKwkJfQorCQlzdXBlci5lU2V0KGZlYXR1cmVJRCwgbmV3VmFsdWUpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGVVbnNldChpbnQgZmVhdHVyZUlEKSB7CisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7CisJCQljYXNlIE1vZGlmaWVyUGFja2FnZS5JTlRFR0VSX1JBTkdFX01PRElGSUVSX19TVEFSVF9WQUxVRToKKwkJCQlzZXRTdGFydFZhbHVlKFNUQVJUX1ZBTFVFX0VERUZBVUxUKTsKKwkJCQlyZXR1cm47CisJCQljYXNlIE1vZGlmaWVyUGFja2FnZS5JTlRFR0VSX1JBTkdFX01PRElGSUVSX19FTkRfVkFMVUU6CisJCQkJc2V0RW5kVmFsdWUoRU5EX1ZBTFVFX0VERUZBVUxUKTsKKwkJCQlyZXR1cm47CisJCQljYXNlIE1vZGlmaWVyUGFja2FnZS5JTlRFR0VSX1JBTkdFX01PRElGSUVSX19JTkNSRU1FTlQ6CisJCQkJc2V0SW5jcmVtZW50KElOQ1JFTUVOVF9FREVGQVVMVCk7CisJCQkJcmV0dXJuOworCQkJY2FzZSBNb2RpZmllclBhY2thZ2UuSU5URUdFUl9SQU5HRV9NT0RJRklFUl9fTkVYVF9WQUxVRToKKwkJCQlzZXROZXh0VmFsdWUoTkVYVF9WQUxVRV9FREVGQVVMVCk7CisJCQkJcmV0dXJuOworCQkJY2FzZSBNb2RpZmllclBhY2thZ2UuSU5URUdFUl9SQU5HRV9NT0RJRklFUl9fT1JJR0lOQUxfVkFMVUU6CisJCQkJc2V0T3JpZ2luYWxWYWx1ZShPUklHSU5BTF9WQUxVRV9FREVGQVVMVCk7CisJCQkJcmV0dXJuOworCQl9CisJCXN1cGVyLmVVbnNldChmZWF0dXJlSUQpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBib29sZWFuIGVJc1NldChpbnQgZmVhdHVyZUlEKSB7CisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7CisJCQljYXNlIE1vZGlmaWVyUGFja2FnZS5JTlRFR0VSX1JBTkdFX01PRElGSUVSX19TVEFSVF9WQUxVRToKKwkJCQlyZXR1cm4gc3RhcnRWYWx1ZSAhPSBTVEFSVF9WQUxVRV9FREVGQVVMVDsKKwkJCWNhc2UgTW9kaWZpZXJQYWNrYWdlLklOVEVHRVJfUkFOR0VfTU9ESUZJRVJfX0VORF9WQUxVRToKKwkJCQlyZXR1cm4gZW5kVmFsdWUgIT0gRU5EX1ZBTFVFX0VERUZBVUxUOworCQkJY2FzZSBNb2RpZmllclBhY2thZ2UuSU5URUdFUl9SQU5HRV9NT0RJRklFUl9fSU5DUkVNRU5UOgorCQkJCXJldHVybiBpbmNyZW1lbnQgIT0gSU5DUkVNRU5UX0VERUZBVUxUOworCQkJY2FzZSBNb2RpZmllclBhY2thZ2UuSU5URUdFUl9SQU5HRV9NT0RJRklFUl9fTkVYVF9WQUxVRToKKwkJCQlyZXR1cm4gbmV4dFZhbHVlICE9IE5FWFRfVkFMVUVfRURFRkFVTFQ7CisJCQljYXNlIE1vZGlmaWVyUGFja2FnZS5JTlRFR0VSX1JBTkdFX01PRElGSUVSX19PUklHSU5BTF9WQUxVRToKKwkJCQlyZXR1cm4gb3JpZ2luYWxWYWx1ZSAhPSBPUklHSU5BTF9WQUxVRV9FREVGQVVMVDsKKwkJfQorCQlyZXR1cm4gc3VwZXIuZUlzU2V0KGZlYXR1cmVJRCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIFN0cmluZyB0b1N0cmluZygpIHsKKwkJaWYgKGVJc1Byb3h5KCkpIHJldHVybiBzdXBlci50b1N0cmluZygpOworCisJCVN0cmluZ0J1ZmZlciByZXN1bHQgPSBuZXcgU3RyaW5nQnVmZmVyKHN1cGVyLnRvU3RyaW5nKCkpOworCQlyZXN1bHQuYXBwZW5kKCIgKHN0YXJ0VmFsdWU6ICIpOyAvLyROT04tTkxTLTEkCisJCXJlc3VsdC5hcHBlbmQoc3RhcnRWYWx1ZSk7CisJCXJlc3VsdC5hcHBlbmQoIiwgZW5kVmFsdWU6ICIpOyAvLyROT04tTkxTLTEkCisJCXJlc3VsdC5hcHBlbmQoZW5kVmFsdWUpOworCQlyZXN1bHQuYXBwZW5kKCIsIGluY3JlbWVudDogIik7IC8vJE5PTi1OTFMtMSQKKwkJcmVzdWx0LmFwcGVuZChpbmNyZW1lbnQpOworCQlyZXN1bHQuYXBwZW5kKCIsIG5leHRWYWx1ZTogIik7IC8vJE5PTi1OTFMtMSQKKwkJcmVzdWx0LmFwcGVuZChuZXh0VmFsdWUpOworCQlyZXN1bHQuYXBwZW5kKCIsIG9yaWdpbmFsVmFsdWU6ICIpOyAvLyROT04tTkxTLTEkCisJCXJlc3VsdC5hcHBlbmQob3JpZ2luYWxWYWx1ZSk7CisJCXJlc3VsdC5hcHBlbmQoJyknKTsKKwkJcmV0dXJuIHJlc3VsdC50b1N0cmluZygpOworCX0KKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5TYW5pdHlDaGVja2VyI3NhbmUoKQorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBib29sZWFuIHNhbmUoKSB7CisJCWJvb2xlYW4gcmV0VmFsdWUgPSBzdXBlci5zYW5lKCk7CisJCWFzc2VydCByZXRWYWx1ZTsKKwkJCisJCXJldFZhbHVlID0gcmV0VmFsdWUgJiYgKGdldEVuZFZhbHVlKCkgPj0gZ2V0U3RhcnRWYWx1ZSgpKTsKKwkJYXNzZXJ0IHJldFZhbHVlOworCQkKKwkJcmV0VmFsdWUgPSByZXRWYWx1ZSAmJiAoZ2V0SW5jcmVtZW50KCkgPiAwKTsKKwkJYXNzZXJ0IHJldFZhbHVlOworCQkKKwkJcmV0dXJuIHJldFZhbHVlOworCX0gLy8gc2FuZQorCit9IC8vSW50ZWdlclJhbmdlTW9kaWZpZXJJbXBsCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL21vZGlmaWVyL2ltcGwvSW50ZWdlclNlcXVlbmNlTW9kaWZpZXJJbXBsLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL21vZGlmaWVyL2ltcGwvSW50ZWdlclNlcXVlbmNlTW9kaWZpZXJJbXBsLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWUzOGU2ZAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvbW9kaWZpZXIvaW1wbC9JbnRlZ2VyU2VxdWVuY2VNb2RpZmllckltcGwuamF2YQpAQCAtMCwwICsxLDE5NCBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuaW1wbDsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5FTGlzdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS51dGlsLkVEYXRhVHlwZVVuaXF1ZUVMaXN0OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5JbnRlZ2VyU2VxdWVuY2VNb2RpZmllcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuTW9kaWZpZXJQYWNrYWdlOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiBBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+SW50ZWdlciBTZXF1ZW5jZSBNb2RpZmllcjwvYj48L2VtPicuCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIDxwPgorICogVGhlIGZvbGxvd2luZyBmZWF0dXJlcyBhcmUgaW1wbGVtZW50ZWQ6CisgKiA8dWw+CisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLmltcGwuSW50ZWdlclNlcXVlbmNlTW9kaWZpZXJJbXBsI2dldFNlcXVlbmNlIDxlbT5TZXF1ZW5jZTwvZW0+fTwvbGk+CisgKiA8L3VsPgorICogPC9wPgorICoKKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIEludGVnZXJTZXF1ZW5jZU1vZGlmaWVySW1wbCBleHRlbmRzIFNlcXVlbmNlTW9kaWZpZXJJbXBsIGltcGxlbWVudHMgSW50ZWdlclNlcXVlbmNlTW9kaWZpZXIgeworCS8qKgorCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldFNlcXVlbmNlKCkgPGVtPlNlcXVlbmNlPC9lbT59JyBhdHRyaWJ1dGUgbGlzdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI2dldFNlcXVlbmNlKCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgRUxpc3Q8SW50ZWdlcj4gc2VxdWVuY2U7CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgSW50ZWdlclNlcXVlbmNlTW9kaWZpZXJJbXBsKCkgeworCQlzdXBlcigpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCBFQ2xhc3MgZVN0YXRpY0NsYXNzKCkgeworCQlyZXR1cm4gTW9kaWZpZXJQYWNrYWdlLkxpdGVyYWxzLklOVEVHRVJfU0VRVUVOQ0VfTU9ESUZJRVI7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVMaXN0PEludGVnZXI+IGdldFNlcXVlbmNlKCkgeworCQlpZiAoc2VxdWVuY2UgPT0gbnVsbCkgeworCQkJc2VxdWVuY2UgPSBuZXcgRURhdGFUeXBlVW5pcXVlRUxpc3Q8SW50ZWdlcj4oSW50ZWdlci5jbGFzcywgdGhpcywgTW9kaWZpZXJQYWNrYWdlLklOVEVHRVJfU0VRVUVOQ0VfTU9ESUZJRVJfX1NFUVVFTkNFKTsKKwkJfQorCQlyZXR1cm4gc2VxdWVuY2U7CisJfQorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuaW1wbC5TZXF1ZW5jZU1vZGlmaWVySW1wbCNnZXROZXh0VmFsdWUoKQorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBPYmplY3QgZ2V0TmV4dFZhbHVlKCkgeworCQlpbnQgaW5kZXggPSBnZXRDdXJyZW50U2VxdWVuY2VJbmRleCgpOworCQlmaW5hbCBPYmplY3QgcmV0VmFsdWUgPSBnZXRTZXF1ZW5jZSgpLmdldChpbmRleCsrKTsKKwkJc2V0Q3VycmVudFNlcXVlbmNlSW5kZXgoaW5kZXgpOwkKKwkJY3VycmVudFZhbHVlVGV4dCA9IHJldFZhbHVlLnRvU3RyaW5nKCk7CisJCXJldHVybiByZXRWYWx1ZTsKKwl9IC8vIGdldE5leHRWYWx1ZQorCQorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuaW1wbC5TZXF1ZW5jZU1vZGlmaWVySW1wbCNnZXRTZXF1ZW5jZVNpemUoKQorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBpbnQgZ2V0U2VxdWVuY2VTaXplKCkgeworCQlyZXR1cm4gZ2V0U2VxdWVuY2UoKS5zaXplKCk7CisJfSAvLyBnZXRTZXF1ZW5jZVNpemUKKwkKKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLmltcGwuRmVhdHVyZU1vZGlmaWVySW1wbCN1cGRhdGVGZWF0dXJlKCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCB1cGRhdGVGZWF0dXJlKCkgeworCQlzdXBlci51cGRhdGVGZWF0dXJlKCk7CisJCWdldFRhcmdldCgpLmVTZXQoZ2V0RVN0cnVjdHVyYWxGZWF0dXJlKCksIGdldE5leHRWYWx1ZSgpKTsKKwl9CisJCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuaW1wbC5GZWF0dXJlTW9kaWZpZXJJbXBsI3Jlc2V0KCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCByZXNldCgpIHsKKwkJc3VwZXIucmVzZXQoKTsKKwkJZ2V0VGFyZ2V0KCkuZVNldChnZXRFU3RydWN0dXJhbEZlYXR1cmUoKSwgZ2V0T3JpZ2luYWxWYWx1ZSgpKTsKKwkJc2V0T3JpZ2luYWxWYWx1ZShPUklHSU5BTF9WQUxVRV9FREVGQVVMVCk7IC8vIFRvIG1ha2Ugc3VyZSB3ZSBjYXB0dXJlIGFueSBuZXcgdmFsdWUgbmV4dCB0aW1lIHNpbXVsYXRpb24gaXMgcnVuCisJfQorCQorCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBPYmplY3QgZUdldChpbnQgZmVhdHVyZUlELCBib29sZWFuIHJlc29sdmUsIGJvb2xlYW4gY29yZVR5cGUpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJCWNhc2UgTW9kaWZpZXJQYWNrYWdlLklOVEVHRVJfU0VRVUVOQ0VfTU9ESUZJRVJfX1NFUVVFTkNFOgorCQkJCXJldHVybiBnZXRTZXF1ZW5jZSgpOworCQl9CisJCXJldHVybiBzdXBlci5lR2V0KGZlYXR1cmVJRCwgcmVzb2x2ZSwgY29yZVR5cGUpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBTdXBwcmVzc1dhcm5pbmdzKCJ1bmNoZWNrZWQiKQorCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGVTZXQoaW50IGZlYXR1cmVJRCwgT2JqZWN0IG5ld1ZhbHVlKSB7CisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7CisJCQljYXNlIE1vZGlmaWVyUGFja2FnZS5JTlRFR0VSX1NFUVVFTkNFX01PRElGSUVSX19TRVFVRU5DRToKKwkJCQlnZXRTZXF1ZW5jZSgpLmNsZWFyKCk7CisJCQkJZ2V0U2VxdWVuY2UoKS5hZGRBbGwoKENvbGxlY3Rpb248PyBleHRlbmRzIEludGVnZXI+KW5ld1ZhbHVlKTsKKwkJCQlyZXR1cm47CisJCX0KKwkJc3VwZXIuZVNldChmZWF0dXJlSUQsIG5ld1ZhbHVlKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBlVW5zZXQoaW50IGZlYXR1cmVJRCkgeworCQlzd2l0Y2ggKGZlYXR1cmVJRCkgeworCQkJY2FzZSBNb2RpZmllclBhY2thZ2UuSU5URUdFUl9TRVFVRU5DRV9NT0RJRklFUl9fU0VRVUVOQ0U6CisJCQkJZ2V0U2VxdWVuY2UoKS5jbGVhcigpOworCQkJCXJldHVybjsKKwkJfQorCQlzdXBlci5lVW5zZXQoZmVhdHVyZUlEKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgYm9vbGVhbiBlSXNTZXQoaW50IGZlYXR1cmVJRCkgeworCQlzd2l0Y2ggKGZlYXR1cmVJRCkgeworCQkJY2FzZSBNb2RpZmllclBhY2thZ2UuSU5URUdFUl9TRVFVRU5DRV9NT0RJRklFUl9fU0VRVUVOQ0U6CisJCQkJcmV0dXJuIHNlcXVlbmNlICE9IG51bGwgJiYgIXNlcXVlbmNlLmlzRW1wdHkoKTsKKwkJfQorCQlyZXR1cm4gc3VwZXIuZUlzU2V0KGZlYXR1cmVJRCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIFN0cmluZyB0b1N0cmluZygpIHsKKwkJaWYgKGVJc1Byb3h5KCkpIHJldHVybiBzdXBlci50b1N0cmluZygpOworCisJCVN0cmluZ0J1ZmZlciByZXN1bHQgPSBuZXcgU3RyaW5nQnVmZmVyKHN1cGVyLnRvU3RyaW5nKCkpOworCQlyZXN1bHQuYXBwZW5kKCIgKHNlcXVlbmNlOiAiKTsgLy8kTk9OLU5MUy0xJAorCQlyZXN1bHQuYXBwZW5kKHNlcXVlbmNlKTsKKwkJcmVzdWx0LmFwcGVuZCgnKScpOworCQlyZXR1cm4gcmVzdWx0LnRvU3RyaW5nKCk7CisJfQorCit9IC8vSW50ZWdlclNlcXVlbmNlTW9kaWZpZXJJbXBsCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL21vZGlmaWVyL2ltcGwvTG9uZ01vZGlmaWVySW1wbC5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9tb2RpZmllci9pbXBsL0xvbmdNb2RpZmllckltcGwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNTVlMzQyCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9tb2RpZmllci9pbXBsL0xvbmdNb2RpZmllckltcGwuamF2YQpAQCAtMCwwICsxLDI1OSBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuaW1wbDsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzczsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuaW1wbC5FTm90aWZpY2F0aW9uSW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuTG9uZ01vZGlmaWVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5Nb2RpZmllclBhY2thZ2U7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIEFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5Mb25nIE1vZGlmaWVyPC9iPjwvZW0+Jy4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogPHA+CisgKiBUaGUgZm9sbG93aW5nIGZlYXR1cmVzIGFyZSBpbXBsZW1lbnRlZDoKKyAqIDx1bD4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuaW1wbC5Mb25nTW9kaWZpZXJJbXBsI2dldFZhbHVlIDxlbT5WYWx1ZTwvZW0+fTwvbGk+CisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLmltcGwuTG9uZ01vZGlmaWVySW1wbCNnZXRPcmlnaW5hbFZhbHVlIDxlbT5PcmlnaW5hbCBWYWx1ZTwvZW0+fTwvbGk+CisgKiA8L3VsPgorICogPC9wPgorICoKKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIExvbmdNb2RpZmllckltcGwgZXh0ZW5kcyBTaW5nbGVWYWx1ZU1vZGlmaWVySW1wbCBpbXBsZW1lbnRzIExvbmdNb2RpZmllciB7CisJLyoqCisJICogVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldFZhbHVlKCkgPGVtPlZhbHVlPC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNnZXRWYWx1ZSgpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBsb25nIFZBTFVFX0VERUZBVUxUID0gMEw7CisJLyoqCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0VmFsdWUoKSA8ZW0+VmFsdWU8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI2dldFZhbHVlKCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgbG9uZyB2YWx1ZSA9IFZBTFVFX0VERUZBVUxUOworCisJLyoqCisJICogVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldE9yaWdpbmFsVmFsdWUoKSA8ZW0+T3JpZ2luYWwgVmFsdWU8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI2dldE9yaWdpbmFsVmFsdWUoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgbG9uZyBPUklHSU5BTF9WQUxVRV9FREVGQVVMVCA9IC0yMDAwMDAwMDAwTDsKKwkvKioKKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRPcmlnaW5hbFZhbHVlKCkgPGVtPk9yaWdpbmFsIFZhbHVlPC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNnZXRPcmlnaW5hbFZhbHVlKCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgbG9uZyBvcmlnaW5hbFZhbHVlID0gT1JJR0lOQUxfVkFMVUVfRURFRkFVTFQ7CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgTG9uZ01vZGlmaWVySW1wbCgpIHsKKwkJc3VwZXIoKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgRUNsYXNzIGVTdGF0aWNDbGFzcygpIHsKKwkJcmV0dXJuIE1vZGlmaWVyUGFja2FnZS5MaXRlcmFscy5MT05HX01PRElGSUVSOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBsb25nIGdldFZhbHVlKCkgeworCQlyZXR1cm4gdmFsdWU7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgc2V0VmFsdWUobG9uZyBuZXdWYWx1ZSkgeworCQlsb25nIG9sZFZhbHVlID0gdmFsdWU7CisJCXZhbHVlID0gbmV3VmFsdWU7CisJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkKKwkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIE1vZGlmaWVyUGFja2FnZS5MT05HX01PRElGSUVSX19WQUxVRSwgb2xkVmFsdWUsIHZhbHVlKSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIGxvbmcgZ2V0T3JpZ2luYWxWYWx1ZSgpIHsKKwkJcmV0dXJuIG9yaWdpbmFsVmFsdWU7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgc2V0T3JpZ2luYWxWYWx1ZShsb25nIG5ld09yaWdpbmFsVmFsdWUpIHsKKwkJbG9uZyBvbGRPcmlnaW5hbFZhbHVlID0gb3JpZ2luYWxWYWx1ZTsKKwkJb3JpZ2luYWxWYWx1ZSA9IG5ld09yaWdpbmFsVmFsdWU7CisJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkKKwkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIE1vZGlmaWVyUGFja2FnZS5MT05HX01PRElGSUVSX19PUklHSU5BTF9WQUxVRSwgb2xkT3JpZ2luYWxWYWx1ZSwgb3JpZ2luYWxWYWx1ZSkpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBPYmplY3QgZUdldChpbnQgZmVhdHVyZUlELCBib29sZWFuIHJlc29sdmUsIGJvb2xlYW4gY29yZVR5cGUpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJCWNhc2UgTW9kaWZpZXJQYWNrYWdlLkxPTkdfTU9ESUZJRVJfX1ZBTFVFOgorCQkJCXJldHVybiBnZXRWYWx1ZSgpOworCQkJY2FzZSBNb2RpZmllclBhY2thZ2UuTE9OR19NT0RJRklFUl9fT1JJR0lOQUxfVkFMVUU6CisJCQkJcmV0dXJuIGdldE9yaWdpbmFsVmFsdWUoKTsKKwkJfQorCQlyZXR1cm4gc3VwZXIuZUdldChmZWF0dXJlSUQsIHJlc29sdmUsIGNvcmVUeXBlKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBlU2V0KGludCBmZWF0dXJlSUQsIE9iamVjdCBuZXdWYWx1ZSkgeworCQlzd2l0Y2ggKGZlYXR1cmVJRCkgeworCQkJY2FzZSBNb2RpZmllclBhY2thZ2UuTE9OR19NT0RJRklFUl9fVkFMVUU6CisJCQkJc2V0VmFsdWUoKExvbmcpbmV3VmFsdWUpOworCQkJCXJldHVybjsKKwkJCWNhc2UgTW9kaWZpZXJQYWNrYWdlLkxPTkdfTU9ESUZJRVJfX09SSUdJTkFMX1ZBTFVFOgorCQkJCXNldE9yaWdpbmFsVmFsdWUoKExvbmcpbmV3VmFsdWUpOworCQkJCXJldHVybjsKKwkJfQorCQlzdXBlci5lU2V0KGZlYXR1cmVJRCwgbmV3VmFsdWUpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGVVbnNldChpbnQgZmVhdHVyZUlEKSB7CisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7CisJCQljYXNlIE1vZGlmaWVyUGFja2FnZS5MT05HX01PRElGSUVSX19WQUxVRToKKwkJCQlzZXRWYWx1ZShWQUxVRV9FREVGQVVMVCk7CisJCQkJcmV0dXJuOworCQkJY2FzZSBNb2RpZmllclBhY2thZ2UuTE9OR19NT0RJRklFUl9fT1JJR0lOQUxfVkFMVUU6CisJCQkJc2V0T3JpZ2luYWxWYWx1ZShPUklHSU5BTF9WQUxVRV9FREVGQVVMVCk7CisJCQkJcmV0dXJuOworCQl9CisJCXN1cGVyLmVVbnNldChmZWF0dXJlSUQpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBib29sZWFuIGVJc1NldChpbnQgZmVhdHVyZUlEKSB7CisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7CisJCQljYXNlIE1vZGlmaWVyUGFja2FnZS5MT05HX01PRElGSUVSX19WQUxVRToKKwkJCQlyZXR1cm4gdmFsdWUgIT0gVkFMVUVfRURFRkFVTFQ7CisJCQljYXNlIE1vZGlmaWVyUGFja2FnZS5MT05HX01PRElGSUVSX19PUklHSU5BTF9WQUxVRToKKwkJCQlyZXR1cm4gb3JpZ2luYWxWYWx1ZSAhPSBPUklHSU5BTF9WQUxVRV9FREVGQVVMVDsKKwkJfQorCQlyZXR1cm4gc3VwZXIuZUlzU2V0KGZlYXR1cmVJRCk7CisJfQorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuaW1wbC5GZWF0dXJlTW9kaWZpZXJJbXBsI3VwZGF0ZUZlYXR1cmUoKQorCSAqLworCQorCUBTdXBwcmVzc1dhcm5pbmdzKCJib3hpbmciKQorCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIHVwZGF0ZUZlYXR1cmUoKSB7CisJCS8vIE9yaWdpbmFsIHZhbHVlIGNhcHR1cmVkIHlldD8KKwkJaWYgKCFlSXNTZXQoTW9kaWZpZXJQYWNrYWdlLkRPVUJMRV9NT0RJRklFUl9fT1JJR0lOQUxfVkFMVUUpKSB7CisJCQkvLyBObworCQkJc2V0T3JpZ2luYWxWYWx1ZSgoTG9uZyl0YXJnZXQuZUdldChnZXRFU3RydWN0dXJhbEZlYXR1cmUoKSkpOworCQl9IC8vIGlmCisJCXRhcmdldC5lU2V0KGdldEVTdHJ1Y3R1cmFsRmVhdHVyZSgpLCBnZXRWYWx1ZSgpKTsKKwkJY29tcGxldGUgPSB0cnVlOworCX0gLy8gdXBkYXRlRmVhdHVyZQorCisJCisJLyoqCisJICpyZXNldAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIHJlc2V0KCkgeworCQljb21wbGV0ZSA9IGZhbHNlOworCQlkb3VibGUgb3JpZ2luYWxWYWx1ZSA9IGdldE9yaWdpbmFsVmFsdWUoKTsKKwkJaWYob3JpZ2luYWxWYWx1ZSAhPSBPUklHSU5BTF9WQUxVRV9FREVGQVVMVCkgLy8gV2UgZG9uJ3Qgd2FudCB0byBzZXQgaXQgaWYgaXQgaGFzbid0IGJlZW4gY2FwdHVyZWQgeWV0LiAKKwkJCXRhcmdldC5lU2V0KGdldEVTdHJ1Y3R1cmFsRmVhdHVyZSgpLCBvcmlnaW5hbFZhbHVlKTsKKwkJc2V0T3JpZ2luYWxWYWx1ZShPUklHSU5BTF9WQUxVRV9FREVGQVVMVCk7IC8vIFRvIG1ha2Ugc3VyZSB3ZSBjYXB0dXJlIGFueSBuZXcgdmFsdWUgbmV4dCB0aW1lIHNpbXVsYXRpb24gaXMgcnVuCisJfQorCQorCQorCXByaXZhdGUgYm9vbGVhbiBjb21wbGV0ZSA9IGZhbHNlOworCS8qKgorCSAqIGlzQ29tcGxldGUKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgYm9vbGVhbiBpc0NvbXBsZXRlKCkgeworCQlyZXR1cm4gY29tcGxldGU7CisJfQorCQorCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKSB7CisJCWlmIChlSXNQcm94eSgpKSByZXR1cm4gc3VwZXIudG9TdHJpbmcoKTsKKworCQlTdHJpbmdCdWZmZXIgcmVzdWx0ID0gbmV3IFN0cmluZ0J1ZmZlcihzdXBlci50b1N0cmluZygpKTsKKwkJcmVzdWx0LmFwcGVuZCgiICh2YWx1ZTogIik7IC8vJE5PTi1OTFMtMSQKKwkJcmVzdWx0LmFwcGVuZCh2YWx1ZSk7CisJCXJlc3VsdC5hcHBlbmQoIiwgb3JpZ2luYWxWYWx1ZTogIik7IC8vJE5PTi1OTFMtMSQKKwkJcmVzdWx0LmFwcGVuZChvcmlnaW5hbFZhbHVlKTsKKwkJcmVzdWx0LmFwcGVuZCgnKScpOworCQlyZXR1cm4gcmVzdWx0LnRvU3RyaW5nKCk7CisJfQorCit9IC8vTG9uZ01vZGlmaWVySW1wbApkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9tb2RpZmllci9pbXBsL0xvbmdOT1BNb2RpZmllckltcGwuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvbW9kaWZpZXIvaW1wbC9Mb25nTk9QTW9kaWZpZXJJbXBsLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTMwMTg5NAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvbW9kaWZpZXIvaW1wbC9Mb25nTk9QTW9kaWZpZXJJbXBsLmphdmEKQEAgLTAsMCArMSw0NyBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuaW1wbDsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5Mb25nTk9QTW9kaWZpZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLk1vZGlmaWVyUGFja2FnZTsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPkxvbmcgTk9QIE1vZGlmaWVyPC9iPjwvZW0+Jy4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogPHA+CisgKiA8L3A+CisgKgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgTG9uZ05PUE1vZGlmaWVySW1wbCBleHRlbmRzIE5PUE1vZGlmaWVySW1wbCBpbXBsZW1lbnRzIExvbmdOT1BNb2RpZmllciB7CisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIExvbmdOT1BNb2RpZmllckltcGwoKSB7CisJCXN1cGVyKCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIEVDbGFzcyBlU3RhdGljQ2xhc3MoKSB7CisJCXJldHVybiBNb2RpZmllclBhY2thZ2UuTGl0ZXJhbHMuTE9OR19OT1BfTU9ESUZJRVI7CisJfQorCit9IC8vIExvbmdOT1BNb2RpZmllckltcGwKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvbW9kaWZpZXIvaW1wbC9Mb25nUmFuZ2VNb2RpZmllckltcGwuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvbW9kaWZpZXIvaW1wbC9Mb25nUmFuZ2VNb2RpZmllckltcGwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZGIzMWRiCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9tb2RpZmllci9pbXBsL0xvbmdSYW5nZU1vZGlmaWVySW1wbC5qYXZhCkBAIC0wLDAgKzEsNDQ0IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5pbXBsOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5pbXBsLkVOb3RpZmljYXRpb25JbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5Mb25nUmFuZ2VNb2RpZmllcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuTW9kaWZpZXJQYWNrYWdlOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiBBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+TG9uZyBSYW5nZSBNb2RpZmllcjwvYj48L2VtPicuCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIDxwPgorICogVGhlIGZvbGxvd2luZyBmZWF0dXJlcyBhcmUgaW1wbGVtZW50ZWQ6CisgKiA8dWw+CisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLmltcGwuTG9uZ1JhbmdlTW9kaWZpZXJJbXBsI2dldFN0YXJ0VmFsdWUgPGVtPlN0YXJ0IFZhbHVlPC9lbT59PC9saT4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuaW1wbC5Mb25nUmFuZ2VNb2RpZmllckltcGwjZ2V0RW5kVmFsdWUgPGVtPkVuZCBWYWx1ZTwvZW0+fTwvbGk+CisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLmltcGwuTG9uZ1JhbmdlTW9kaWZpZXJJbXBsI2dldEluY3JlbWVudCA8ZW0+SW5jcmVtZW50PC9lbT59PC9saT4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuaW1wbC5Mb25nUmFuZ2VNb2RpZmllckltcGwjZ2V0TmV4dFZhbHVlIDxlbT5OZXh0IFZhbHVlPC9lbT59PC9saT4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuaW1wbC5Mb25nUmFuZ2VNb2RpZmllckltcGwjZ2V0T3JpZ2luYWxWYWx1ZSA8ZW0+T3JpZ2luYWwgVmFsdWU8L2VtPn08L2xpPgorICogPC91bD4KKyAqIDwvcD4KKyAqCisgKiBAZ2VuZXJhdGVkCisgKi8KK0BTdXBwcmVzc1dhcm5pbmdzKCJib3hpbmciKQorcHVibGljIGNsYXNzIExvbmdSYW5nZU1vZGlmaWVySW1wbCBleHRlbmRzIFJhbmdlTW9kaWZpZXJJbXBsIGltcGxlbWVudHMgTG9uZ1JhbmdlTW9kaWZpZXIgeworCS8qKgorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRTdGFydFZhbHVlKCkgPGVtPlN0YXJ0IFZhbHVlPC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNnZXRTdGFydFZhbHVlKCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIGxvbmcgU1RBUlRfVkFMVUVfRURFRkFVTFQgPSAtOTk5OTk5OTlMOworCS8qKgorCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldFN0YXJ0VmFsdWUoKSA8ZW0+U3RhcnQgVmFsdWU8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI2dldFN0YXJ0VmFsdWUoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBsb25nIHN0YXJ0VmFsdWUgPSBTVEFSVF9WQUxVRV9FREVGQVVMVDsKKwkvKioKKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0RW5kVmFsdWUoKSA8ZW0+RW5kIFZhbHVlPC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNnZXRFbmRWYWx1ZSgpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBsb25nIEVORF9WQUxVRV9FREVGQVVMVCA9IC05OTk5OTk5OUw7CisJLyoqCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0RW5kVmFsdWUoKSA8ZW0+RW5kIFZhbHVlPC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNnZXRFbmRWYWx1ZSgpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIGxvbmcgZW5kVmFsdWUgPSBFTkRfVkFMVUVfRURFRkFVTFQ7CisJLyoqCisJICogVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldEluY3JlbWVudCgpIDxlbT5JbmNyZW1lbnQ8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI2dldEluY3JlbWVudCgpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBsb25nIElOQ1JFTUVOVF9FREVGQVVMVCA9IC05OTk5OTk5OUw7CisJLyoqCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0SW5jcmVtZW50KCkgPGVtPkluY3JlbWVudDwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZ2V0SW5jcmVtZW50KCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgbG9uZyBpbmNyZW1lbnQgPSBJTkNSRU1FTlRfRURFRkFVTFQ7CisKKwkvKioKKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0TmV4dFZhbHVlKCkgPGVtPk5leHQgVmFsdWU8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI2dldE5leHRWYWx1ZSgpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBsb25nIE5FWFRfVkFMVUVfRURFRkFVTFQgPSAtOTk5OTk5OTlMOworCS8qKgorCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldE5leHRWYWx1ZSgpIDxlbT5OZXh0IFZhbHVlPC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNnZXROZXh0VmFsdWUoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBsb25nIG5leHRWYWx1ZSA9IE5FWFRfVkFMVUVfRURFRkFVTFQ7CisJLyoqCisJICogVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldE9yaWdpbmFsVmFsdWUoKSA8ZW0+T3JpZ2luYWwgVmFsdWU8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI2dldE9yaWdpbmFsVmFsdWUoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgbG9uZyBPUklHSU5BTF9WQUxVRV9FREVGQVVMVCA9IC05OTk5OTk5OUw7CisJLyoqCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0T3JpZ2luYWxWYWx1ZSgpIDxlbT5PcmlnaW5hbCBWYWx1ZTwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZ2V0T3JpZ2luYWxWYWx1ZSgpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIGxvbmcgb3JpZ2luYWxWYWx1ZSA9IE9SSUdJTkFMX1ZBTFVFX0VERUZBVUxUOworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBMb25nUmFuZ2VNb2RpZmllckltcGwoKSB7CisJCXN1cGVyKCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIEVDbGFzcyBlU3RhdGljQ2xhc3MoKSB7CisJCXJldHVybiBNb2RpZmllclBhY2thZ2UuTGl0ZXJhbHMuTE9OR19SQU5HRV9NT0RJRklFUjsKKwl9CisJCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIGxvbmcgZ2V0U3RhcnRWYWx1ZSgpIHsKKwkJcmV0dXJuIHN0YXJ0VmFsdWU7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgc2V0U3RhcnRWYWx1ZShsb25nIG5ld1N0YXJ0VmFsdWUpIHsKKwkJbG9uZyBvbGRTdGFydFZhbHVlID0gc3RhcnRWYWx1ZTsKKwkJc3RhcnRWYWx1ZSA9IG5ld1N0YXJ0VmFsdWU7CisJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkKKwkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIE1vZGlmaWVyUGFja2FnZS5MT05HX1JBTkdFX01PRElGSUVSX19TVEFSVF9WQUxVRSwgb2xkU3RhcnRWYWx1ZSwgc3RhcnRWYWx1ZSkpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBsb25nIGdldEVuZFZhbHVlKCkgeworCQlyZXR1cm4gZW5kVmFsdWU7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgc2V0RW5kVmFsdWUobG9uZyBuZXdFbmRWYWx1ZSkgeworCQlsb25nIG9sZEVuZFZhbHVlID0gZW5kVmFsdWU7CisJCWVuZFZhbHVlID0gbmV3RW5kVmFsdWU7CisJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkKKwkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIE1vZGlmaWVyUGFja2FnZS5MT05HX1JBTkdFX01PRElGSUVSX19FTkRfVkFMVUUsIG9sZEVuZFZhbHVlLCBlbmRWYWx1ZSkpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBsb25nIGdldEluY3JlbWVudCgpIHsKKwkJcmV0dXJuIGluY3JlbWVudDsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRJbmNyZW1lbnQobG9uZyBuZXdJbmNyZW1lbnQpIHsKKwkJbG9uZyBvbGRJbmNyZW1lbnQgPSBpbmNyZW1lbnQ7CisJCWluY3JlbWVudCA9IG5ld0luY3JlbWVudDsKKwkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQorCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgTW9kaWZpZXJQYWNrYWdlLkxPTkdfUkFOR0VfTU9ESUZJRVJfX0lOQ1JFTUVOVCwgb2xkSW5jcmVtZW50LCBpbmNyZW1lbnQpKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJcHVibGljIGxvbmcgZ2V0TmV4dFZhbHVlKCkgeworCQkvLyBVbnNldD8KKwkJaWYgKCFlSXNTZXQoTW9kaWZpZXJQYWNrYWdlLkxPTkdfUkFOR0VfTU9ESUZJRVJfX05FWFRfVkFMVUUpKSB7CisJCQkvLyBZZXMKKwkJCXNldE5leHRWYWx1ZShnZXRTdGFydFZhbHVlKCkpOworCQl9IC8vIGlmCisJCQorCQlmaW5hbCBsb25nIHJldFZhbHVlID0gbmV4dFZhbHVlOworCQljb21wbGV0ZSA9IHJldFZhbHVlID09IGdldEVuZFZhbHVlKCk7CisJCQorCQkvLyBTdGlsbCBpbmNyZW1lbnRpbmc/CisJCWlmICghY29tcGxldGUpIHsKKwkJCS8vIFllcworCQkJZmluYWwgbG9uZyB0ZW1wID0gcmV0VmFsdWUgKyBnZXRJbmNyZW1lbnQoKTsKKwkJCS8vIFdvdWxkIHRoZSBuZXcgY3VycmVudFZhbHVlIGJlIGVxdWFsIG9yICJwYXN0IiB0aGUgZW5kVmFsdWU/CisJCQlpZiAoTWF0aC5hYnModGVtcCkgPCBNYXRoLmFicyhnZXRFbmRWYWx1ZSgpKSkgeworCQkJCS8vIE5vCisJCQkJc2V0TmV4dFZhbHVlKHRlbXApOworCQkJfSAvLyBpZgorCQkJZWxzZSB7CisJCQkJLy8gWWVzCisJCQkJc2V0TmV4dFZhbHVlKGdldEVuZFZhbHVlKCkpOworCQkJfSAvLyBlbHNlIAorCQl9IC8vIGlmIAorCQljdXJyZW50VmFsdWVUZXh0ID0gTG9uZy50b1N0cmluZyhyZXRWYWx1ZSk7CisJCXJldHVybiByZXRWYWx1ZTsKKwl9IC8vIGdldE5leHRWYWx1ZQorCQorCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIHNldE5leHRWYWx1ZShsb25nIG5ld05leHRWYWx1ZSkgeworCQlsb25nIG9sZE5leHRWYWx1ZSA9IG5leHRWYWx1ZTsKKwkJbmV4dFZhbHVlID0gbmV3TmV4dFZhbHVlOworCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpCisJCQllTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBNb2RpZmllclBhY2thZ2UuTE9OR19SQU5HRV9NT0RJRklFUl9fTkVYVF9WQUxVRSwgb2xkTmV4dFZhbHVlLCBuZXh0VmFsdWUpKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgbG9uZyBnZXRPcmlnaW5hbFZhbHVlKCkgeworCQlyZXR1cm4gb3JpZ2luYWxWYWx1ZTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRPcmlnaW5hbFZhbHVlKGxvbmcgbmV3T3JpZ2luYWxWYWx1ZSkgeworCQlsb25nIG9sZE9yaWdpbmFsVmFsdWUgPSBvcmlnaW5hbFZhbHVlOworCQlvcmlnaW5hbFZhbHVlID0gbmV3T3JpZ2luYWxWYWx1ZTsKKwkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQorCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgTW9kaWZpZXJQYWNrYWdlLkxPTkdfUkFOR0VfTU9ESUZJRVJfX09SSUdJTkFMX1ZBTFVFLCBvbGRPcmlnaW5hbFZhbHVlLCBvcmlnaW5hbFZhbHVlKSk7CisJfQorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuaW1wbC5GZWF0dXJlTW9kaWZpZXJJbXBsI3VwZGF0ZUZlYXR1cmUoKQorCSAqLworCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgdXBkYXRlRmVhdHVyZSgpIHsKKwkJLy8gT3JpZ2luYWwgdmFsdWUgY2FwdHVyZWQgeWV0PworCQlpZiAoIWVJc1NldChNb2RpZmllclBhY2thZ2UuSU5URUdFUl9SQU5HRV9NT0RJRklFUl9fT1JJR0lOQUxfVkFMVUUpKSB7CisJCQkvLyBObworCQkJc2V0T3JpZ2luYWxWYWx1ZSgoTG9uZylnZXRUYXJnZXQoKS5lR2V0KGdldEVTdHJ1Y3R1cmFsRmVhdHVyZSgpKSk7CisJCX0gLy8gaWYKKwkJZ2V0VGFyZ2V0KCkuZVNldChnZXRFU3RydWN0dXJhbEZlYXR1cmUoKSxnZXROZXh0VmFsdWUoKSk7CisJfQorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuaW1wbC5SYW5nZU1vZGlmaWVySW1wbCNyZXNldCgpCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgcmVzZXQoKSB7CisJCXN1cGVyLnJlc2V0KCk7CisJCWVVbnNldChNb2RpZmllclBhY2thZ2UuTE9OR19SQU5HRV9NT0RJRklFUl9fTkVYVF9WQUxVRSk7CisJCWdldFRhcmdldCgpLmVTZXQoZ2V0RVN0cnVjdHVyYWxGZWF0dXJlKCksIGdldE9yaWdpbmFsVmFsdWUoKSk7CisJCXNldE9yaWdpbmFsVmFsdWUoT1JJR0lOQUxfVkFMVUVfRURFRkFVTFQpOyAvLyBUbyBtYWtlIHN1cmUgd2UgY2FwdHVyZSBhbnkgbmV3IHZhbHVlIG5leHQgdGltZSBzaW11bGF0aW9uIGlzIHJ1bgorCX0KKwkKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgT2JqZWN0IGVHZXQoaW50IGZlYXR1cmVJRCwgYm9vbGVhbiByZXNvbHZlLCBib29sZWFuIGNvcmVUeXBlKSB7CisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7CisJCQljYXNlIE1vZGlmaWVyUGFja2FnZS5MT05HX1JBTkdFX01PRElGSUVSX19TVEFSVF9WQUxVRToKKwkJCQlyZXR1cm4gZ2V0U3RhcnRWYWx1ZSgpOworCQkJY2FzZSBNb2RpZmllclBhY2thZ2UuTE9OR19SQU5HRV9NT0RJRklFUl9fRU5EX1ZBTFVFOgorCQkJCXJldHVybiBnZXRFbmRWYWx1ZSgpOworCQkJY2FzZSBNb2RpZmllclBhY2thZ2UuTE9OR19SQU5HRV9NT0RJRklFUl9fSU5DUkVNRU5UOgorCQkJCXJldHVybiBnZXRJbmNyZW1lbnQoKTsKKwkJCWNhc2UgTW9kaWZpZXJQYWNrYWdlLkxPTkdfUkFOR0VfTU9ESUZJRVJfX05FWFRfVkFMVUU6CisJCQkJcmV0dXJuIGdldE5leHRWYWx1ZSgpOworCQkJY2FzZSBNb2RpZmllclBhY2thZ2UuTE9OR19SQU5HRV9NT0RJRklFUl9fT1JJR0lOQUxfVkFMVUU6CisJCQkJcmV0dXJuIGdldE9yaWdpbmFsVmFsdWUoKTsKKwkJfQorCQlyZXR1cm4gc3VwZXIuZUdldChmZWF0dXJlSUQsIHJlc29sdmUsIGNvcmVUeXBlKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBlU2V0KGludCBmZWF0dXJlSUQsIE9iamVjdCBuZXdWYWx1ZSkgeworCQlzd2l0Y2ggKGZlYXR1cmVJRCkgeworCQkJY2FzZSBNb2RpZmllclBhY2thZ2UuTE9OR19SQU5HRV9NT0RJRklFUl9fU1RBUlRfVkFMVUU6CisJCQkJc2V0U3RhcnRWYWx1ZSgoTG9uZyluZXdWYWx1ZSk7CisJCQkJcmV0dXJuOworCQkJY2FzZSBNb2RpZmllclBhY2thZ2UuTE9OR19SQU5HRV9NT0RJRklFUl9fRU5EX1ZBTFVFOgorCQkJCXNldEVuZFZhbHVlKChMb25nKW5ld1ZhbHVlKTsKKwkJCQlyZXR1cm47CisJCQljYXNlIE1vZGlmaWVyUGFja2FnZS5MT05HX1JBTkdFX01PRElGSUVSX19JTkNSRU1FTlQ6CisJCQkJc2V0SW5jcmVtZW50KChMb25nKW5ld1ZhbHVlKTsKKwkJCQlyZXR1cm47CisJCQljYXNlIE1vZGlmaWVyUGFja2FnZS5MT05HX1JBTkdFX01PRElGSUVSX19ORVhUX1ZBTFVFOgorCQkJCXNldE5leHRWYWx1ZSgoTG9uZyluZXdWYWx1ZSk7CisJCQkJcmV0dXJuOworCQkJY2FzZSBNb2RpZmllclBhY2thZ2UuTE9OR19SQU5HRV9NT0RJRklFUl9fT1JJR0lOQUxfVkFMVUU6CisJCQkJc2V0T3JpZ2luYWxWYWx1ZSgoTG9uZyluZXdWYWx1ZSk7CisJCQkJcmV0dXJuOworCQl9CisJCXN1cGVyLmVTZXQoZmVhdHVyZUlELCBuZXdWYWx1ZSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgZVVuc2V0KGludCBmZWF0dXJlSUQpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJCWNhc2UgTW9kaWZpZXJQYWNrYWdlLkxPTkdfUkFOR0VfTU9ESUZJRVJfX1NUQVJUX1ZBTFVFOgorCQkJCXNldFN0YXJ0VmFsdWUoU1RBUlRfVkFMVUVfRURFRkFVTFQpOworCQkJCXJldHVybjsKKwkJCWNhc2UgTW9kaWZpZXJQYWNrYWdlLkxPTkdfUkFOR0VfTU9ESUZJRVJfX0VORF9WQUxVRToKKwkJCQlzZXRFbmRWYWx1ZShFTkRfVkFMVUVfRURFRkFVTFQpOworCQkJCXJldHVybjsKKwkJCWNhc2UgTW9kaWZpZXJQYWNrYWdlLkxPTkdfUkFOR0VfTU9ESUZJRVJfX0lOQ1JFTUVOVDoKKwkJCQlzZXRJbmNyZW1lbnQoSU5DUkVNRU5UX0VERUZBVUxUKTsKKwkJCQlyZXR1cm47CisJCQljYXNlIE1vZGlmaWVyUGFja2FnZS5MT05HX1JBTkdFX01PRElGSUVSX19ORVhUX1ZBTFVFOgorCQkJCXNldE5leHRWYWx1ZShORVhUX1ZBTFVFX0VERUZBVUxUKTsKKwkJCQlyZXR1cm47CisJCQljYXNlIE1vZGlmaWVyUGFja2FnZS5MT05HX1JBTkdFX01PRElGSUVSX19PUklHSU5BTF9WQUxVRToKKwkJCQlzZXRPcmlnaW5hbFZhbHVlKE9SSUdJTkFMX1ZBTFVFX0VERUZBVUxUKTsKKwkJCQlyZXR1cm47CisJCX0KKwkJc3VwZXIuZVVuc2V0KGZlYXR1cmVJRCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIGJvb2xlYW4gZUlzU2V0KGludCBmZWF0dXJlSUQpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJCWNhc2UgTW9kaWZpZXJQYWNrYWdlLkxPTkdfUkFOR0VfTU9ESUZJRVJfX1NUQVJUX1ZBTFVFOgorCQkJCXJldHVybiBzdGFydFZhbHVlICE9IFNUQVJUX1ZBTFVFX0VERUZBVUxUOworCQkJY2FzZSBNb2RpZmllclBhY2thZ2UuTE9OR19SQU5HRV9NT0RJRklFUl9fRU5EX1ZBTFVFOgorCQkJCXJldHVybiBlbmRWYWx1ZSAhPSBFTkRfVkFMVUVfRURFRkFVTFQ7CisJCQljYXNlIE1vZGlmaWVyUGFja2FnZS5MT05HX1JBTkdFX01PRElGSUVSX19JTkNSRU1FTlQ6CisJCQkJcmV0dXJuIGluY3JlbWVudCAhPSBJTkNSRU1FTlRfRURFRkFVTFQ7CisJCQljYXNlIE1vZGlmaWVyUGFja2FnZS5MT05HX1JBTkdFX01PRElGSUVSX19ORVhUX1ZBTFVFOgorCQkJCXJldHVybiBuZXh0VmFsdWUgIT0gTkVYVF9WQUxVRV9FREVGQVVMVDsKKwkJCWNhc2UgTW9kaWZpZXJQYWNrYWdlLkxPTkdfUkFOR0VfTU9ESUZJRVJfX09SSUdJTkFMX1ZBTFVFOgorCQkJCXJldHVybiBvcmlnaW5hbFZhbHVlICE9IE9SSUdJTkFMX1ZBTFVFX0VERUZBVUxUOworCQl9CisJCXJldHVybiBzdXBlci5lSXNTZXQoZmVhdHVyZUlEKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkgeworCQlpZiAoZUlzUHJveHkoKSkgcmV0dXJuIHN1cGVyLnRvU3RyaW5nKCk7CisKKwkJU3RyaW5nQnVmZmVyIHJlc3VsdCA9IG5ldyBTdHJpbmdCdWZmZXIoc3VwZXIudG9TdHJpbmcoKSk7CisJCXJlc3VsdC5hcHBlbmQoIiAoc3RhcnRWYWx1ZTogIik7IC8vJE5PTi1OTFMtMSQKKwkJcmVzdWx0LmFwcGVuZChzdGFydFZhbHVlKTsKKwkJcmVzdWx0LmFwcGVuZCgiLCBlbmRWYWx1ZTogIik7IC8vJE5PTi1OTFMtMSQKKwkJcmVzdWx0LmFwcGVuZChlbmRWYWx1ZSk7CisJCXJlc3VsdC5hcHBlbmQoIiwgaW5jcmVtZW50OiAiKTsgLy8kTk9OLU5MUy0xJAorCQlyZXN1bHQuYXBwZW5kKGluY3JlbWVudCk7CisJCXJlc3VsdC5hcHBlbmQoIiwgbmV4dFZhbHVlOiAiKTsgLy8kTk9OLU5MUy0xJAorCQlyZXN1bHQuYXBwZW5kKG5leHRWYWx1ZSk7CisJCXJlc3VsdC5hcHBlbmQoIiwgb3JpZ2luYWxWYWx1ZTogIik7IC8vJE5PTi1OTFMtMSQKKwkJcmVzdWx0LmFwcGVuZChvcmlnaW5hbFZhbHVlKTsKKwkJcmVzdWx0LmFwcGVuZCgnKScpOworCQlyZXR1cm4gcmVzdWx0LnRvU3RyaW5nKCk7CisJfQorCisKKwkKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uU2FuaXR5Q2hlY2tlciNzYW5lKCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgYm9vbGVhbiBzYW5lKCkgeworCQlib29sZWFuIHJldFZhbHVlID0gc3VwZXIuc2FuZSgpOworCQlhc3NlcnQgcmV0VmFsdWU7CisJCQorCQlyZXRWYWx1ZSA9IHJldFZhbHVlICYmIChnZXRFbmRWYWx1ZSgpID49IGdldFN0YXJ0VmFsdWUoKSk7CisJCWFzc2VydCByZXRWYWx1ZTsKKwkJCisJCXJldFZhbHVlID0gcmV0VmFsdWUgJiYgKGdldEluY3JlbWVudCgpID4gMEwpOworCQlhc3NlcnQgcmV0VmFsdWU7CisJCQorCQlyZXR1cm4gcmV0VmFsdWU7CisJfSAvLyBzYW5lCisKK30gLy9Mb25nUmFuZ2VNb2RpZmllckltcGwKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvbW9kaWZpZXIvaW1wbC9Mb25nU2VxdWVuY2VNb2RpZmllckltcGwuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvbW9kaWZpZXIvaW1wbC9Mb25nU2VxdWVuY2VNb2RpZmllckltcGwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZDZkNjk1Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9tb2RpZmllci9pbXBsL0xvbmdTZXF1ZW5jZU1vZGlmaWVySW1wbC5qYXZhCkBAIC0wLDAgKzEsMTk0IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5pbXBsOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLkVMaXN0OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnV0aWwuRURhdGFUeXBlVW5pcXVlRUxpc3Q7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLkxvbmdTZXF1ZW5jZU1vZGlmaWVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5Nb2RpZmllclBhY2thZ2U7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIEFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5Mb25nIFNlcXVlbmNlIE1vZGlmaWVyPC9iPjwvZW0+Jy4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogPHA+CisgKiBUaGUgZm9sbG93aW5nIGZlYXR1cmVzIGFyZSBpbXBsZW1lbnRlZDoKKyAqIDx1bD4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuaW1wbC5Mb25nU2VxdWVuY2VNb2RpZmllckltcGwjZ2V0U2VxdWVuY2UgPGVtPlNlcXVlbmNlPC9lbT59PC9saT4KKyAqIDwvdWw+CisgKiA8L3A+CisgKgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgTG9uZ1NlcXVlbmNlTW9kaWZpZXJJbXBsIGV4dGVuZHMgU2VxdWVuY2VNb2RpZmllckltcGwgaW1wbGVtZW50cyBMb25nU2VxdWVuY2VNb2RpZmllciB7CisJLyoqCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0U2VxdWVuY2UoKSA8ZW0+U2VxdWVuY2U8L2VtPn0nIGF0dHJpYnV0ZSBsaXN0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZ2V0U2VxdWVuY2UoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBFTGlzdDxMb25nPiBzZXF1ZW5jZTsKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBMb25nU2VxdWVuY2VNb2RpZmllckltcGwoKSB7CisJCXN1cGVyKCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIEVDbGFzcyBlU3RhdGljQ2xhc3MoKSB7CisJCXJldHVybiBNb2RpZmllclBhY2thZ2UuTGl0ZXJhbHMuTE9OR19TRVFVRU5DRV9NT0RJRklFUjsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUxpc3Q8TG9uZz4gZ2V0U2VxdWVuY2UoKSB7CisJCWlmIChzZXF1ZW5jZSA9PSBudWxsKSB7CisJCQlzZXF1ZW5jZSA9IG5ldyBFRGF0YVR5cGVVbmlxdWVFTGlzdDxMb25nPihMb25nLmNsYXNzLCB0aGlzLCBNb2RpZmllclBhY2thZ2UuTE9OR19TRVFVRU5DRV9NT0RJRklFUl9fU0VRVUVOQ0UpOworCQl9CisJCXJldHVybiBzZXF1ZW5jZTsKKwl9CisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5pbXBsLlNlcXVlbmNlTW9kaWZpZXJJbXBsI2dldE5leHRWYWx1ZSgpCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIE9iamVjdCBnZXROZXh0VmFsdWUoKSB7CisJCWludCBpbmRleCA9IGdldEN1cnJlbnRTZXF1ZW5jZUluZGV4KCk7CisJCWZpbmFsIE9iamVjdCByZXRWYWx1ZSA9IGdldFNlcXVlbmNlKCkuZ2V0KGluZGV4KyspOworCQlzZXRDdXJyZW50U2VxdWVuY2VJbmRleChpbmRleCk7CQorCQljdXJyZW50VmFsdWVUZXh0ID0gcmV0VmFsdWUudG9TdHJpbmcoKTsKKwkJcmV0dXJuIHJldFZhbHVlOworCX0gLy8gZ2V0TmV4dFZhbHVlCisJCisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5pbXBsLlNlcXVlbmNlTW9kaWZpZXJJbXBsI2dldFNlcXVlbmNlU2l6ZSgpCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIGludCBnZXRTZXF1ZW5jZVNpemUoKSB7CisJCXJldHVybiBnZXRTZXF1ZW5jZSgpLnNpemUoKTsKKwl9IC8vIGdldFNlcXVlbmNlU2l6ZQorCQorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuaW1wbC5GZWF0dXJlTW9kaWZpZXJJbXBsI3VwZGF0ZUZlYXR1cmUoKQorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIHVwZGF0ZUZlYXR1cmUoKSB7CisJCXN1cGVyLnVwZGF0ZUZlYXR1cmUoKTsKKwkJZ2V0VGFyZ2V0KCkuZVNldChnZXRFU3RydWN0dXJhbEZlYXR1cmUoKSwgZ2V0TmV4dFZhbHVlKCkpOworCX0KKwkKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5pbXBsLkZlYXR1cmVNb2RpZmllckltcGwjcmVzZXQoKQorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIHJlc2V0KCkgeworCQlzdXBlci5yZXNldCgpOworCQlnZXRUYXJnZXQoKS5lU2V0KGdldEVTdHJ1Y3R1cmFsRmVhdHVyZSgpLCBnZXRPcmlnaW5hbFZhbHVlKCkpOworCQlzZXRPcmlnaW5hbFZhbHVlKE9SSUdJTkFMX1ZBTFVFX0VERUZBVUxUKTsgLy8gVG8gbWFrZSBzdXJlIHdlIGNhcHR1cmUgYW55IG5ldyB2YWx1ZSBuZXh0IHRpbWUgc2ltdWxhdGlvbiBpcyBydW4KKwl9CisJCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIE9iamVjdCBlR2V0KGludCBmZWF0dXJlSUQsIGJvb2xlYW4gcmVzb2x2ZSwgYm9vbGVhbiBjb3JlVHlwZSkgeworCQlzd2l0Y2ggKGZlYXR1cmVJRCkgeworCQkJY2FzZSBNb2RpZmllclBhY2thZ2UuTE9OR19TRVFVRU5DRV9NT0RJRklFUl9fU0VRVUVOQ0U6CisJCQkJcmV0dXJuIGdldFNlcXVlbmNlKCk7CisJCX0KKwkJcmV0dXJuIHN1cGVyLmVHZXQoZmVhdHVyZUlELCByZXNvbHZlLCBjb3JlVHlwZSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQFN1cHByZXNzV2FybmluZ3MoInVuY2hlY2tlZCIpCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgZVNldChpbnQgZmVhdHVyZUlELCBPYmplY3QgbmV3VmFsdWUpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJCWNhc2UgTW9kaWZpZXJQYWNrYWdlLkxPTkdfU0VRVUVOQ0VfTU9ESUZJRVJfX1NFUVVFTkNFOgorCQkJCWdldFNlcXVlbmNlKCkuY2xlYXIoKTsKKwkJCQlnZXRTZXF1ZW5jZSgpLmFkZEFsbCgoQ29sbGVjdGlvbjw/IGV4dGVuZHMgTG9uZz4pbmV3VmFsdWUpOworCQkJCXJldHVybjsKKwkJfQorCQlzdXBlci5lU2V0KGZlYXR1cmVJRCwgbmV3VmFsdWUpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGVVbnNldChpbnQgZmVhdHVyZUlEKSB7CisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7CisJCQljYXNlIE1vZGlmaWVyUGFja2FnZS5MT05HX1NFUVVFTkNFX01PRElGSUVSX19TRVFVRU5DRToKKwkJCQlnZXRTZXF1ZW5jZSgpLmNsZWFyKCk7CisJCQkJcmV0dXJuOworCQl9CisJCXN1cGVyLmVVbnNldChmZWF0dXJlSUQpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBib29sZWFuIGVJc1NldChpbnQgZmVhdHVyZUlEKSB7CisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7CisJCQljYXNlIE1vZGlmaWVyUGFja2FnZS5MT05HX1NFUVVFTkNFX01PRElGSUVSX19TRVFVRU5DRToKKwkJCQlyZXR1cm4gc2VxdWVuY2UgIT0gbnVsbCAmJiAhc2VxdWVuY2UuaXNFbXB0eSgpOworCQl9CisJCXJldHVybiBzdXBlci5lSXNTZXQoZmVhdHVyZUlEKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkgeworCQlpZiAoZUlzUHJveHkoKSkgcmV0dXJuIHN1cGVyLnRvU3RyaW5nKCk7CisKKwkJU3RyaW5nQnVmZmVyIHJlc3VsdCA9IG5ldyBTdHJpbmdCdWZmZXIoc3VwZXIudG9TdHJpbmcoKSk7CisJCXJlc3VsdC5hcHBlbmQoIiAoc2VxdWVuY2U6ICIpOyAvLyROT04tTkxTLTEkCisJCXJlc3VsdC5hcHBlbmQoc2VxdWVuY2UpOworCQlyZXN1bHQuYXBwZW5kKCcpJyk7CisJCXJldHVybiByZXN1bHQudG9TdHJpbmcoKTsKKwl9CisKK30gLy9Mb25nU2VxdWVuY2VNb2RpZmllckltcGwKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvbW9kaWZpZXIvaW1wbC9Nb2RpZmllckZhY3RvcnlJbXBsLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL21vZGlmaWVyL2ltcGwvTW9kaWZpZXJGYWN0b3J5SW1wbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNhMzBmYzMKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL21vZGlmaWVyL2ltcGwvTW9kaWZpZXJGYWN0b3J5SW1wbC5qYXZhCkBAIC0wLDAgKzEsMzUxIEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5pbXBsOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5VUkk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzczsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRURhdGFUeXBlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuaW1wbC5FRmFjdG9yeUltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnBsdWdpbi5FY29yZVBsdWdpbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuRG91YmxlTW9kaWZpZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLkRvdWJsZU5PUE1vZGlmaWVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5Eb3VibGVSYW5nZU1vZGlmaWVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5Eb3VibGVTZXF1ZW5jZU1vZGlmaWVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5JbnRlZ2VyTW9kaWZpZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLkludGVnZXJOT1BNb2RpZmllcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuSW50ZWdlclJhbmdlTW9kaWZpZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLkludGVnZXJTZXF1ZW5jZU1vZGlmaWVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5Mb25nTW9kaWZpZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLkxvbmdOT1BNb2RpZmllcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuTG9uZ1JhbmdlTW9kaWZpZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLkxvbmdTZXF1ZW5jZU1vZGlmaWVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5Nb2RpZmllcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuTW9kaWZpZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5Nb2RpZmllclBhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLk5PUE1vZGlmaWVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5TVEVNVGltZU1vZGlmaWVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5TVEVNVGltZU5PUE1vZGlmaWVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5TVEVNVGltZVJhbmdlTW9kaWZpZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLlNURU1UaW1lU2VxdWVuY2VNb2RpZmllcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuU3RyaW5nTk9QTW9kaWZpZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLlN0cmluZ1NlcXVlbmNlTW9kaWZpZXI7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIEFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBtb2RlbCA8Yj5GYWN0b3J5PC9iPi4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgTW9kaWZpZXJGYWN0b3J5SW1wbCBleHRlbmRzIEVGYWN0b3J5SW1wbCBpbXBsZW1lbnRzIE1vZGlmaWVyRmFjdG9yeSB7CisJLyoqCisJICogQ3JlYXRlcyB0aGUgZGVmYXVsdCBmYWN0b3J5IGltcGxlbWVudGF0aW9uLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBzdGF0aWMgTW9kaWZpZXJGYWN0b3J5IGluaXQoKSB7CisJCXRyeSB7CisJCQlNb2RpZmllckZhY3RvcnkgdGhlTW9kaWZpZXJGYWN0b3J5ID0gKE1vZGlmaWVyRmFjdG9yeSlFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFRmFjdG9yeSgiaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvbW9kaWZpZXIuZWNvcmUiKTsgLy8kTk9OLU5MUy0xJCAKKwkJCWlmICh0aGVNb2RpZmllckZhY3RvcnkgIT0gbnVsbCkgeworCQkJCXJldHVybiB0aGVNb2RpZmllckZhY3Rvcnk7CisJCQl9CisJCX0KKwkJY2F0Y2ggKEV4Y2VwdGlvbiBleGNlcHRpb24pIHsKKwkJCUVjb3JlUGx1Z2luLklOU1RBTkNFLmxvZyhleGNlcHRpb24pOworCQl9CisJCXJldHVybiBuZXcgTW9kaWZpZXJGYWN0b3J5SW1wbCgpOworCX0KKworCS8qKgorCSAqIENyZWF0ZXMgYW4gaW5zdGFuY2Ugb2YgdGhlIGZhY3RvcnkuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIE1vZGlmaWVyRmFjdG9yeUltcGwoKSB7CisJCXN1cGVyKCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIEVPYmplY3QgY3JlYXRlKEVDbGFzcyBlQ2xhc3MpIHsKKwkJc3dpdGNoIChlQ2xhc3MuZ2V0Q2xhc3NpZmllcklEKCkpIHsKKwkJCWNhc2UgTW9kaWZpZXJQYWNrYWdlLkRPVUJMRV9OT1BfTU9ESUZJRVI6IHJldHVybiBjcmVhdGVEb3VibGVOT1BNb2RpZmllcigpOworCQkJY2FzZSBNb2RpZmllclBhY2thZ2UuRE9VQkxFX1JBTkdFX01PRElGSUVSOiByZXR1cm4gY3JlYXRlRG91YmxlUmFuZ2VNb2RpZmllcigpOworCQkJY2FzZSBNb2RpZmllclBhY2thZ2UuRE9VQkxFX1NFUVVFTkNFX01PRElGSUVSOiByZXR1cm4gY3JlYXRlRG91YmxlU2VxdWVuY2VNb2RpZmllcigpOworCQkJY2FzZSBNb2RpZmllclBhY2thZ2UuSU5URUdFUl9OT1BfTU9ESUZJRVI6IHJldHVybiBjcmVhdGVJbnRlZ2VyTk9QTW9kaWZpZXIoKTsKKwkJCWNhc2UgTW9kaWZpZXJQYWNrYWdlLklOVEVHRVJfUkFOR0VfTU9ESUZJRVI6IHJldHVybiBjcmVhdGVJbnRlZ2VyUmFuZ2VNb2RpZmllcigpOworCQkJY2FzZSBNb2RpZmllclBhY2thZ2UuSU5URUdFUl9TRVFVRU5DRV9NT0RJRklFUjogcmV0dXJuIGNyZWF0ZUludGVnZXJTZXF1ZW5jZU1vZGlmaWVyKCk7CisJCQljYXNlIE1vZGlmaWVyUGFja2FnZS5MT05HX05PUF9NT0RJRklFUjogcmV0dXJuIGNyZWF0ZUxvbmdOT1BNb2RpZmllcigpOworCQkJY2FzZSBNb2RpZmllclBhY2thZ2UuTE9OR19SQU5HRV9NT0RJRklFUjogcmV0dXJuIGNyZWF0ZUxvbmdSYW5nZU1vZGlmaWVyKCk7CisJCQljYXNlIE1vZGlmaWVyUGFja2FnZS5MT05HX1NFUVVFTkNFX01PRElGSUVSOiByZXR1cm4gY3JlYXRlTG9uZ1NlcXVlbmNlTW9kaWZpZXIoKTsKKwkJCWNhc2UgTW9kaWZpZXJQYWNrYWdlLk1PRElGSUVSOiByZXR1cm4gY3JlYXRlTW9kaWZpZXIoKTsKKwkJCWNhc2UgTW9kaWZpZXJQYWNrYWdlLk5PUF9NT0RJRklFUjogcmV0dXJuIGNyZWF0ZU5PUE1vZGlmaWVyKCk7CisJCQljYXNlIE1vZGlmaWVyUGFja2FnZS5TVEVNX1RJTUVfTk9QX01PRElGSUVSOiByZXR1cm4gY3JlYXRlU1RFTVRpbWVOT1BNb2RpZmllcigpOworCQkJY2FzZSBNb2RpZmllclBhY2thZ2UuU1RFTV9USU1FX1JBTkdFX01PRElGSUVSOiByZXR1cm4gY3JlYXRlU1RFTVRpbWVSYW5nZU1vZGlmaWVyKCk7CisJCQljYXNlIE1vZGlmaWVyUGFja2FnZS5TVEVNX1RJTUVfU0VRVUVOQ0VfTU9ESUZJRVI6IHJldHVybiBjcmVhdGVTVEVNVGltZVNlcXVlbmNlTW9kaWZpZXIoKTsKKwkJCWNhc2UgTW9kaWZpZXJQYWNrYWdlLlNUUklOR19OT1BfTU9ESUZJRVI6IHJldHVybiBjcmVhdGVTdHJpbmdOT1BNb2RpZmllcigpOworCQkJY2FzZSBNb2RpZmllclBhY2thZ2UuU1RSSU5HX1NFUVVFTkNFX01PRElGSUVSOiByZXR1cm4gY3JlYXRlU3RyaW5nU2VxdWVuY2VNb2RpZmllcigpOworCQkJY2FzZSBNb2RpZmllclBhY2thZ2UuRE9VQkxFX01PRElGSUVSOiByZXR1cm4gY3JlYXRlRG91YmxlTW9kaWZpZXIoKTsKKwkJCWNhc2UgTW9kaWZpZXJQYWNrYWdlLklOVEVHRVJfTU9ESUZJRVI6IHJldHVybiBjcmVhdGVJbnRlZ2VyTW9kaWZpZXIoKTsKKwkJCWNhc2UgTW9kaWZpZXJQYWNrYWdlLkxPTkdfTU9ESUZJRVI6IHJldHVybiBjcmVhdGVMb25nTW9kaWZpZXIoKTsKKwkJCWNhc2UgTW9kaWZpZXJQYWNrYWdlLlNURU1fVElNRV9NT0RJRklFUjogcmV0dXJuIGNyZWF0ZVNURU1UaW1lTW9kaWZpZXIoKTsKKwkJCWRlZmF1bHQ6CisJCQkJdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiVGhlIGNsYXNzICciICsgZUNsYXNzLmdldE5hbWUoKSArICInIGlzIG5vdCBhIHZhbGlkIGNsYXNzaWZpZXIiKTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCisJCX0KKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRG91YmxlTk9QTW9kaWZpZXIgY3JlYXRlRG91YmxlTk9QTW9kaWZpZXIoKSB7CisJCURvdWJsZU5PUE1vZGlmaWVySW1wbCBkb3VibGVOT1BNb2RpZmllciA9IG5ldyBEb3VibGVOT1BNb2RpZmllckltcGwoKTsKKwkJcmV0dXJuIGRvdWJsZU5PUE1vZGlmaWVyOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBEb3VibGVSYW5nZU1vZGlmaWVyIGNyZWF0ZURvdWJsZVJhbmdlTW9kaWZpZXIoKSB7CisJCURvdWJsZVJhbmdlTW9kaWZpZXJJbXBsIGRvdWJsZVJhbmdlTW9kaWZpZXIgPSBuZXcgRG91YmxlUmFuZ2VNb2RpZmllckltcGwoKTsKKwkJcmV0dXJuIGRvdWJsZVJhbmdlTW9kaWZpZXI7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIERvdWJsZVNlcXVlbmNlTW9kaWZpZXIgY3JlYXRlRG91YmxlU2VxdWVuY2VNb2RpZmllcigpIHsKKwkJRG91YmxlU2VxdWVuY2VNb2RpZmllckltcGwgZG91YmxlU2VxdWVuY2VNb2RpZmllciA9IG5ldyBEb3VibGVTZXF1ZW5jZU1vZGlmaWVySW1wbCgpOworCQlyZXR1cm4gZG91YmxlU2VxdWVuY2VNb2RpZmllcjsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgSW50ZWdlck5PUE1vZGlmaWVyIGNyZWF0ZUludGVnZXJOT1BNb2RpZmllcigpIHsKKwkJSW50ZWdlck5PUE1vZGlmaWVySW1wbCBpbnRlZ2VyTk9QTW9kaWZpZXIgPSBuZXcgSW50ZWdlck5PUE1vZGlmaWVySW1wbCgpOworCQlyZXR1cm4gaW50ZWdlck5PUE1vZGlmaWVyOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBJbnRlZ2VyUmFuZ2VNb2RpZmllciBjcmVhdGVJbnRlZ2VyUmFuZ2VNb2RpZmllcigpIHsKKwkJSW50ZWdlclJhbmdlTW9kaWZpZXJJbXBsIGludGVnZXJSYW5nZU1vZGlmaWVyID0gbmV3IEludGVnZXJSYW5nZU1vZGlmaWVySW1wbCgpOworCQlyZXR1cm4gaW50ZWdlclJhbmdlTW9kaWZpZXI7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEludGVnZXJTZXF1ZW5jZU1vZGlmaWVyIGNyZWF0ZUludGVnZXJTZXF1ZW5jZU1vZGlmaWVyKCkgeworCQlJbnRlZ2VyU2VxdWVuY2VNb2RpZmllckltcGwgaW50ZWdlclNlcXVlbmNlTW9kaWZpZXIgPSBuZXcgSW50ZWdlclNlcXVlbmNlTW9kaWZpZXJJbXBsKCk7CisJCXJldHVybiBpbnRlZ2VyU2VxdWVuY2VNb2RpZmllcjsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgTG9uZ05PUE1vZGlmaWVyIGNyZWF0ZUxvbmdOT1BNb2RpZmllcigpIHsKKwkJTG9uZ05PUE1vZGlmaWVySW1wbCBsb25nTk9QTW9kaWZpZXIgPSBuZXcgTG9uZ05PUE1vZGlmaWVySW1wbCgpOworCQlyZXR1cm4gbG9uZ05PUE1vZGlmaWVyOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBMb25nUmFuZ2VNb2RpZmllciBjcmVhdGVMb25nUmFuZ2VNb2RpZmllcigpIHsKKwkJTG9uZ1JhbmdlTW9kaWZpZXJJbXBsIGxvbmdSYW5nZU1vZGlmaWVyID0gbmV3IExvbmdSYW5nZU1vZGlmaWVySW1wbCgpOworCQlyZXR1cm4gbG9uZ1JhbmdlTW9kaWZpZXI7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIExvbmdTZXF1ZW5jZU1vZGlmaWVyIGNyZWF0ZUxvbmdTZXF1ZW5jZU1vZGlmaWVyKCkgeworCQlMb25nU2VxdWVuY2VNb2RpZmllckltcGwgbG9uZ1NlcXVlbmNlTW9kaWZpZXIgPSBuZXcgTG9uZ1NlcXVlbmNlTW9kaWZpZXJJbXBsKCk7CisJCXJldHVybiBsb25nU2VxdWVuY2VNb2RpZmllcjsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgTW9kaWZpZXIgY3JlYXRlTW9kaWZpZXIoKSB7CisJCU1vZGlmaWVySW1wbCBtb2RpZmllciA9IG5ldyBNb2RpZmllckltcGwoKTsKKwkJcmV0dXJuIG1vZGlmaWVyOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBOT1BNb2RpZmllciBjcmVhdGVOT1BNb2RpZmllcigpIHsKKwkJTk9QTW9kaWZpZXJJbXBsIG5vcE1vZGlmaWVyID0gbmV3IE5PUE1vZGlmaWVySW1wbCgpOworCQlyZXR1cm4gbm9wTW9kaWZpZXI7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFNURU1UaW1lTk9QTW9kaWZpZXIgY3JlYXRlU1RFTVRpbWVOT1BNb2RpZmllcigpIHsKKwkJU1RFTVRpbWVOT1BNb2RpZmllckltcGwgc3RlbVRpbWVOT1BNb2RpZmllciA9IG5ldyBTVEVNVGltZU5PUE1vZGlmaWVySW1wbCgpOworCQlyZXR1cm4gc3RlbVRpbWVOT1BNb2RpZmllcjsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgU1RFTVRpbWVSYW5nZU1vZGlmaWVyIGNyZWF0ZVNURU1UaW1lUmFuZ2VNb2RpZmllcigpIHsKKwkJU1RFTVRpbWVSYW5nZU1vZGlmaWVySW1wbCBzdGVtVGltZVJhbmdlTW9kaWZpZXIgPSBuZXcgU1RFTVRpbWVSYW5nZU1vZGlmaWVySW1wbCgpOworCQlyZXR1cm4gc3RlbVRpbWVSYW5nZU1vZGlmaWVyOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBTVEVNVGltZVNlcXVlbmNlTW9kaWZpZXIgY3JlYXRlU1RFTVRpbWVTZXF1ZW5jZU1vZGlmaWVyKCkgeworCQlTVEVNVGltZVNlcXVlbmNlTW9kaWZpZXJJbXBsIHN0ZW1UaW1lU2VxdWVuY2VNb2RpZmllciA9IG5ldyBTVEVNVGltZVNlcXVlbmNlTW9kaWZpZXJJbXBsKCk7CisJCXJldHVybiBzdGVtVGltZVNlcXVlbmNlTW9kaWZpZXI7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFN0cmluZ05PUE1vZGlmaWVyIGNyZWF0ZVN0cmluZ05PUE1vZGlmaWVyKCkgeworCQlTdHJpbmdOT1BNb2RpZmllckltcGwgc3RyaW5nTk9QTW9kaWZpZXIgPSBuZXcgU3RyaW5nTk9QTW9kaWZpZXJJbXBsKCk7CisJCXJldHVybiBzdHJpbmdOT1BNb2RpZmllcjsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgU3RyaW5nU2VxdWVuY2VNb2RpZmllciBjcmVhdGVTdHJpbmdTZXF1ZW5jZU1vZGlmaWVyKCkgeworCQlTdHJpbmdTZXF1ZW5jZU1vZGlmaWVySW1wbCBzdHJpbmdTZXF1ZW5jZU1vZGlmaWVyID0gbmV3IFN0cmluZ1NlcXVlbmNlTW9kaWZpZXJJbXBsKCk7CisJCXJldHVybiBzdHJpbmdTZXF1ZW5jZU1vZGlmaWVyOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBEb3VibGVNb2RpZmllciBjcmVhdGVEb3VibGVNb2RpZmllcigpIHsKKwkJRG91YmxlTW9kaWZpZXJJbXBsIGRvdWJsZU1vZGlmaWVyID0gbmV3IERvdWJsZU1vZGlmaWVySW1wbCgpOworCQlyZXR1cm4gZG91YmxlTW9kaWZpZXI7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEludGVnZXJNb2RpZmllciBjcmVhdGVJbnRlZ2VyTW9kaWZpZXIoKSB7CisJCUludGVnZXJNb2RpZmllckltcGwgaW50ZWdlck1vZGlmaWVyID0gbmV3IEludGVnZXJNb2RpZmllckltcGwoKTsKKwkJcmV0dXJuIGludGVnZXJNb2RpZmllcjsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgTG9uZ01vZGlmaWVyIGNyZWF0ZUxvbmdNb2RpZmllcigpIHsKKwkJTG9uZ01vZGlmaWVySW1wbCBsb25nTW9kaWZpZXIgPSBuZXcgTG9uZ01vZGlmaWVySW1wbCgpOworCQlyZXR1cm4gbG9uZ01vZGlmaWVyOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBTVEVNVGltZU1vZGlmaWVyIGNyZWF0ZVNURU1UaW1lTW9kaWZpZXIoKSB7CisJCVNURU1UaW1lTW9kaWZpZXJJbXBsIHN0ZW1UaW1lTW9kaWZpZXIgPSBuZXcgU1RFTVRpbWVNb2RpZmllckltcGwoKTsKKwkJcmV0dXJuIHN0ZW1UaW1lTW9kaWZpZXI7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCXB1YmxpYyBVUkkgY3JlYXRlVVJJRnJvbVN0cmluZyhFRGF0YVR5cGUgZURhdGFUeXBlLCBTdHJpbmcgaW5pdGlhbFZhbHVlKSB7CisJCXJldHVybiBVUkkuY3JlYXRlVVJJKGluaXRpYWxWYWx1ZSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCXB1YmxpYyBTdHJpbmcgY29udmVydFVSSVRvU3RyaW5nKEVEYXRhVHlwZSBlRGF0YVR5cGUsIE9iamVjdCBpbnN0YW5jZVZhbHVlKSB7CisJCXJldHVybiBpbnN0YW5jZVZhbHVlLnRvU3RyaW5nKCk7CisJfQorCQorCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBNb2RpZmllclBhY2thZ2UgZ2V0TW9kaWZpZXJQYWNrYWdlKCkgeworCQlyZXR1cm4gKE1vZGlmaWVyUGFja2FnZSlnZXRFUGFja2FnZSgpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGRlcHJlY2F0ZWQKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQERlcHJlY2F0ZWQKKwlwdWJsaWMgc3RhdGljIE1vZGlmaWVyUGFja2FnZSBnZXRQYWNrYWdlKCkgeworCQlyZXR1cm4gTW9kaWZpZXJQYWNrYWdlLmVJTlNUQU5DRTsKKwl9CisKK30gLy9Nb2RpZmllckZhY3RvcnlJbXBsCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL21vZGlmaWVyL2ltcGwvTW9kaWZpZXJJbXBsLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL21vZGlmaWVyL2ltcGwvTW9kaWZpZXJJbXBsLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWRlYzYxNAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvbW9kaWZpZXIvaW1wbC9Nb2RpZmllckltcGwuamF2YQpAQCAtMCwwICsxLDUxMyBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuaW1wbDsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OworaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOworaW1wb3J0IGphdmEudXRpbC5MaXN0OworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbkNoYWluOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5FTGlzdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuVVJJOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3Q7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkludGVybmFsRU9iamVjdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuaW1wbC5FTm90aWZpY2F0aW9uSW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUudXRpbC5FT2JqZWN0Q29udGFpbm1lbnRFTGlzdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUudXRpbC5JbnRlcm5hbEVMaXN0OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5Db3JlUGx1Z2luOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5TVEVNVVJJOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5FZGdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5HcmFwaDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguTGFiZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLk5vZGVMYWJlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuRGVjb3JhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5Nb2RlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuU1RFTVRpbWU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLmltcGwuRGVjb3JhdG9ySW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuRmVhdHVyZU1vZGlmaWVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5Nb2RpZmllcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuTW9kaWZpZXJQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zY2VuYXJpby5TY2VuYXJpbzsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiBBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICcKKyAqIDxlbT48Yj5Nb2RpZmllcjwvYj48L2VtPicuIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogPHA+CisgKiBUaGUgZm9sbG93aW5nIGZlYXR1cmVzIGFyZSBpbXBsZW1lbnRlZDoKKyAqIDx1bD4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuaW1wbC5Nb2RpZmllckltcGwjZ2V0VGFyZ2V0VVJJIDxlbT5UYXJnZXQgVVJJPC9lbT59PC9saT4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuaW1wbC5Nb2RpZmllckltcGwjZ2V0RmVhdHVyZU1vZGlmaWVycyA8ZW0+RmVhdHVyZSBNb2RpZmllcnM8L2VtPn08L2xpPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5pbXBsLk1vZGlmaWVySW1wbCNpc0NvbXBsZXRlIDxlbT5Db21wbGV0ZTwvZW0+fTwvbGk+CisgKiA8L3VsPgorICogPC9wPgorICoKKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIE1vZGlmaWVySW1wbCBleHRlbmRzIERlY29yYXRvckltcGwgaW1wbGVtZW50cyBNb2RpZmllciB7CisJLyoqCisJICogVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldFRhcmdldFVSSSgpIDxlbT5UYXJnZXQgVVJJPC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZ2V0VGFyZ2V0VVJJKCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIFVSSSBUQVJHRVRfVVJJX0VERUZBVUxUID0gbnVsbDsKKworCS8qKgorCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldFRhcmdldFVSSSgpIDxlbT5UYXJnZXQgVVJJPC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZ2V0VGFyZ2V0VVJJKCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgVVJJIHRhcmdldFVSSSA9IFRBUkdFVF9VUklfRURFRkFVTFQ7CisKKwkvKioKKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRGZWF0dXJlTW9kaWZpZXJzKCkKKwkgKiA8ZW0+RmVhdHVyZSBNb2RpZmllcnM8L2VtPn0nIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0LiA8IS0tCisJICogYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBzZWUgI2dldEZlYXR1cmVNb2RpZmllcnMoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBFTGlzdDxGZWF0dXJlTW9kaWZpZXI+IGZlYXR1cmVNb2RpZmllcnM7CisKKwkvLyBzZXQgdG8gdHJ1ZSB3aGVuIHRoZXJlJ3MgYW4gZXJyb3IKKwlwcml2YXRlIGJvb2xlYW4gY29tcGxldGUgPSBmYWxzZTsKKworCisJLyoqCisJICogVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2lzQ29tcGxldGUoKSA8ZW0+Q29tcGxldGU8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNpc0NvbXBsZXRlKCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIGJvb2xlYW4gQ09NUExFVEVfRURFRkFVTFQgPSBmYWxzZTsKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJcHJvdGVjdGVkIE1vZGlmaWVySW1wbCgpIHsKKwkJc3VwZXIoKTsKKwkJc2V0VVJJKFNURU1VUkkuY3JlYXRlVVJJKFVSSV9UWVBFX01PRElGSUVSX1NFR01FTlQgKyAiLyIKKwkJCQkrICBTVEVNVVJJLmdlbmVyYXRlVW5pcXVlUGFydCgpKSk7CisJCXNldFR5cGVVUkkoU1RFTVVSSS5NT0RJRklFUl9UWVBFX1VSSSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCBFQ2xhc3MgZVN0YXRpY0NsYXNzKCkgeworCQlyZXR1cm4gTW9kaWZpZXJQYWNrYWdlLkxpdGVyYWxzLk1PRElGSUVSOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVVJJIGdldFRhcmdldFVSSSgpIHsKKwkJcmV0dXJuIHRhcmdldFVSSTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgc2V0VGFyZ2V0VVJJKFVSSSBuZXdUYXJnZXRVUkkpIHsKKwkJVVJJIG9sZFRhcmdldFVSSSA9IHRhcmdldFVSSTsKKwkJdGFyZ2V0VVJJID0gbmV3VGFyZ2V0VVJJOworCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpCisJCQllTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBNb2RpZmllclBhY2thZ2UuTU9ESUZJRVJfX1RBUkdFVF9VUkksIG9sZFRhcmdldFVSSSwgdGFyZ2V0VVJJKSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFTGlzdDxGZWF0dXJlTW9kaWZpZXI+IGdldEZlYXR1cmVNb2RpZmllcnMoKSB7CisJCWlmIChmZWF0dXJlTW9kaWZpZXJzID09IG51bGwpIHsKKwkJCWZlYXR1cmVNb2RpZmllcnMgPSBuZXcgRU9iamVjdENvbnRhaW5tZW50RUxpc3Q8RmVhdHVyZU1vZGlmaWVyPihGZWF0dXJlTW9kaWZpZXIuY2xhc3MsIHRoaXMsIE1vZGlmaWVyUGFja2FnZS5NT0RJRklFUl9fRkVBVFVSRV9NT0RJRklFUlMpOworCQl9CisJCXJldHVybiBmZWF0dXJlTW9kaWZpZXJzOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJcHVibGljIGJvb2xlYW4gaXNDb21wbGV0ZSgpIHsKKworCQlpZiAoY29tcGxldGUpIHsKKwkJCS8vIFllcworCQkJcmV0dXJuIHRydWU7CisJCX0gLy8gaWYKKworCQlib29sZWFuIHJldFZhbHVlID0gdHJ1ZTsKKworCQlmb3IgKEZlYXR1cmVNb2RpZmllciBmZWF0dXJlTW9kaWZpZXIgOiBnZXRGZWF0dXJlTW9kaWZpZXJzKCkpIHsKKwkJCXJldFZhbHVlID0gZmVhdHVyZU1vZGlmaWVyLmlzQ29tcGxldGUoKTsKKwkJCS8vIEZvdW5kIG9uZSB0aGF0J3MgZmFsc2U/CisJCQlpZiAoIXJldFZhbHVlKSB7CisJCQkJLy8gWWVzCisJCQkJYnJlYWs7CisJCQl9IC8vIGlmCisJCX0gLy8gZm9yIGVhY2ggRmVhdHVyZU1vZGlmaWVyCisJCXJldHVybiByZXRWYWx1ZTsKKwl9IC8vIGlzQ29tcGxldGUKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlwdWJsaWMgdm9pZCByZXNldCgpIHsKKwkJZm9yIChGZWF0dXJlTW9kaWZpZXIgZmVhdHVyZU1vZGlmaWVyIDogZ2V0RmVhdHVyZU1vZGlmaWVycygpKSB7CisJCQlmZWF0dXJlTW9kaWZpZXIucmVzZXQoKTsKKwkJfSAvLyBmb3IgZWFjaCBGZWF0dXJlTW9kaWZpZXIKKwl9IC8vIHJlc2V0CisKKwkKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5pbXBsLkRlY29yYXRvckltcGwjcmVzZXRMYWJlbHMoKQorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIHJlc2V0TGFiZWxzKCkgeworCQlyZXNldCgpOworCX0KKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLmltcGwuRGVjb3JhdG9ySW1wbCNkZWNvcmF0ZUdyYXBoKCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgYm9vbGVhbiBkZWNvcmF0ZUdyYXBoKFNURU1UaW1lIHRpbWUpIHsKKwkJLy8gTm90aGluZworCQlyZXR1cm4gdHJ1ZTsKKwl9IC8vIGRlY29yYXRlR3JhcGgKKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLmltcGwuRGVjb3JhdG9ySW1wbCN1cGRhdGVMYWJlbHMob3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLlNURU1UaW1lLAorCSAqICAgICAgbG9uZykKKwkgKiAgICAgIAorCSAqICBPbmx5IGludm9rZWQgYnkgdHJpZ2dlcnMKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCB1cGRhdGVMYWJlbHMoU1RFTVRpbWUgdGltZSwgbG9uZyB0aW1lclBlcmlvZCwgaW50IGN5Y2xlKSB7CisJCUVPYmplY3QgdGFyZ2V0ID0gZ2V0VGFyZ2V0KGdldEdyYXBoKCkpOworCQlpZih0YXJnZXQgIT0gbnVsbCkgeworCQkJbW9kaWZ5VGFyZ2V0KHRhcmdldCk7CisvLwkJCUNvbW1lbnRlZCBvdXQuIFRoZSBjb2RlIHdhcyB1c2VkIHRvIGZvcmNlIGlub2N1bGF0b3JzIHRvIHJlLWlub2N1bGF0ZSB0aGUgcG9wdWxhdGlvbi4gQ29udHJvbExhYmVscyBhcmUgdXNlZCB0byBoYW5kbGUgdGhpcyBub3cgaW5zdGVhZAkJCQorLy8JCQlpZih0YXJnZXQgaW5zdGFuY2VvZiBEZWNvcmF0b3IpIHsKKy8vCQkJCSgoRGVjb3JhdG9yKXRhcmdldCkuc2V0R3JhcGhEZWNvcmF0ZWQoZmFsc2UpOworLy8JCQkJKChEZWNvcmF0b3IpdGFyZ2V0KS5kZWNvcmF0ZUdyYXBoKHRpbWUpOworLy8JCQkJKChEZWNvcmF0b3IpdGFyZ2V0KS5zZXRHcmFwaERlY29yYXRlZCh0cnVlKTsKKy8vCQkJfQorCQl9CisJfSAvLyB1cGRhdGVMYWJlbHMKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJcHVibGljIHZvaWQgdXBkYXRlU2NlbmFyaW8oZmluYWwgU2NlbmFyaW8gc2NlbmFyaW8pIHsKKwkJRU9iamVjdCB0ID0gZ2V0VGFyZ2V0KHNjZW5hcmlvKTsKKwkJaWYodCA9PSBudWxsKQorCQkJQ29yZVBsdWdpbi5sb2dFcnJvcigiTW9kaWZpZXIgIit0aGlzLmdldFVSSSgpKyIgY2Fubm90IGZpbmQgdGFyZ2V0ICIrZ2V0VGFyZ2V0VVJJKCkrIiBpbiBzY2VuYXJpbyAiK3NjZW5hcmlvLmdldFVSSSgpLCBuZXcgRXhjZXB0aW9uKCkpOworCQllbHNlIG1vZGlmeVRhcmdldCh0KTsKKwl9IC8vIHVwZGF0ZVNjZW5hcmlvCisKKwlwcml2YXRlIEVPYmplY3QgZ2V0VGFyZ2V0KGZpbmFsIFNjZW5hcmlvIHNjZW5hcmlvKSB7CisJCUVPYmplY3QgcmV0VmFsdWUgPSBudWxsOworCQkvLyBTZXF1ZW5jZXI/CisJCWlmIChzY2VuYXJpby5nZXRTZXF1ZW5jZXIoKS5nZXRVUkkoKS5lcXVhbHMoZ2V0VGFyZ2V0VVJJKCkpKSB7CisJCQkvLyBZZXMKKwkJCXJldFZhbHVlID0gc2NlbmFyaW8uZ2V0U2VxdWVuY2VyKCk7CisJCX0gLy8gaWYKKwkJZWxzZSB7CisJCQkvLyBObworCQkJLy8gU2NlbmFyaW8gRGVjb3JhdG9ycz8KKwkJCS8qIENvbW1lbnRlZCBvdXQgNi8xMC8wOSBzaW5jZSBhIG1vZGlmaWVyIGZvciBpbmZlY3RvcnMgbmVlZHMgdG8gbW9kaWZ5IHRoZSBpbmZlY3RvciBpbiB0aGUgZ3JhcGgKKwkJCWZvciAoRGVjb3JhdG9yIHNjZW5hcmlvRGVjb3JhdG9yIDogc2NlbmFyaW8uZ2V0U2NlbmFyaW9EZWNvcmF0b3JzKCkpIHsKKwkJCQkvLyBPdXIgdGFyZ2V0PworCQkJCWlmIChzY2VuYXJpb0RlY29yYXRvci5nZXRVUkkoKS5lcXVhbHModGFyZ2V0VVJJKSkgeworCQkJCQkvLyBZZXMKKwkJCQkJcmV0VmFsdWUgPSBzY2VuYXJpb0RlY29yYXRvcjsKKwkJCQkJYnJlYWs7CisJCQkJfSAvLyBpZgorCQkJfSAvLyBmb3IgZWFjaCBTY2VuYXJpbyBEZWNvcmF0b3IKKwkJCSovCisJCQkvLyBEaWQgd2UgZmluZCBhIFNjZW5hcmlvIGRlY29yYXRvcj8KKwkJCWlmIChyZXRWYWx1ZSA9PSBudWxsKSB7CisJCQkJLy8gTm8KKwkJCQkvLyBXZSd2ZSBkb25lIHRoZSBlYXN5IHN0dWZmCisJCQkJcmV0VmFsdWUgPSBnZXRUYXJnZXQoc2NlbmFyaW8uZ2V0TW9kZWwoKSk7CisJCQl9IC8vIGlmIG5vIFNjZW5hcmlvIERlY29yYXRvcgorCisJCX0gLy8gZWxzZSBub3QgYSBTY2VuYXJpbyBkZWNvcmF0b3IKKwkJcmV0dXJuIHJldFZhbHVlOworCX0gLy8gZ2V0SWRlbnRpZmlhYmxlCisKKwlwcml2YXRlIEVPYmplY3QgZ2V0VGFyZ2V0KGZpbmFsIE1vZGVsIG1vZGVsKSB7CisJCUVPYmplY3QgcmV0VmFsdWUgPSBudWxsOworCQlmb3IgKERlY29yYXRvciBkZWNvcmF0b3IgOiBtb2RlbC5nZXROb2RlRGVjb3JhdG9ycygpKSB7CisJCQkvLyBPdXIgdGFyZ2V0PworCQkJaWYgKGRlY29yYXRvci5nZXRVUkkoKS5lcXVhbHMoZ2V0VGFyZ2V0VVJJKCkpKSB7CisJCQkJLy8gWWVzCisJCQkJcmV0VmFsdWUgPSBkZWNvcmF0b3I7CisJCQkJYnJlYWs7CisJCQl9IC8vIGlmCisJCQkKKwkJfSAvLyBmb3IgZWFjaCBEZWNvcmF0b3IKKworCQlpZihyZXRWYWx1ZSA9PSBudWxsKQorCQkJZm9yKE1vZGVsIG06bW9kZWwuZ2V0TW9kZWxzKCkpIHsKKwkJCQlyZXRWYWx1ZSA9IGdldFRhcmdldChtKTsKKwkJCQlpZihyZXRWYWx1ZSAhPSBudWxsKSBicmVhazsKKwkJCX0KKwkJCisJCS8vIEEgTm9kZSBsYWJlbD8KKwkJaWYgKHJldFZhbHVlID09IG51bGwpIHsKKwkJCWZvcihHcmFwaCBnOm1vZGVsLmdldEdyYXBocygpKSB7CisJCQkJcmV0VmFsdWUgPSBmaW5kTm9kZUxhYmVsKGcpOworCQkJCWlmKHJldFZhbHVlICE9IG51bGwpIGJyZWFrOworCQkJfQorCQl9IC8vIGlmIHJldFZhbHVlID09IG51bGwKKworCQkvLyBBbiBFZGdlIExhYmVsPworCQlpZiAocmV0VmFsdWUgPT0gbnVsbCkgeworCQkJZm9yKEdyYXBoIGc6bW9kZWwuZ2V0R3JhcGhzKCkpIHsKKwkJCQlyZXRWYWx1ZSA9IGZpbmRFZGdlTGFiZWwoZyk7CisJCQkJaWYocmV0VmFsdWUgIT0gbnVsbCkgYnJlYWs7CisJCQl9CisJCX0gLy8gaWYgcmV0VmFsdWUgPT0gbnVsbAorCQlyZXR1cm4gcmV0VmFsdWU7CisJfSAKKwkKKwlwcml2YXRlIEVPYmplY3QgZ2V0VGFyZ2V0KGZpbmFsIEdyYXBoIGdyYXBoKSB7CisJCUVPYmplY3QgcmV0VmFsdWUgPSBudWxsOworCQlmb3IgKERlY29yYXRvciBkZWNvcmF0b3IgOiBncmFwaC5nZXREZWNvcmF0b3JzKCkpIHsKKwkJCS8vIE91ciB0YXJnZXQ/CisJCQlpZiAoZGVjb3JhdG9yLmdldFVSSSgpLmVxdWFscyhnZXRUYXJnZXRVUkkoKSkpIHsKKwkJCQkvLyBZZXMKKwkJCQlyZXRWYWx1ZSA9IGRlY29yYXRvcjsKKwkJCQlicmVhazsKKwkJCX0gLy8gaWYKKwkJCQorCQl9IC8vIGZvciBlYWNoIERlY29yYXRvcgorCisJCS8vIEEgTm9kZSBsYWJlbD8KKwkJaWYocmV0VmFsdWUgPT0gbnVsbCkgcmV0VmFsdWUgPSBmaW5kTm9kZUxhYmVsKGdyYXBoKTsKKwkJaWYocmV0VmFsdWUgPT0gbnVsbCkgcmV0VmFsdWUgPSBmaW5kRWRnZUxhYmVsKGdyYXBoKTsKKwkJCisJCWlmKHJldFZhbHVlID09IG51bGwpIAorCQkJQ29yZVBsdWdpbi5sb2dFcnJvcigiVW5hYmxlIHRvIGZpbmQgdGFyZ2V0IHRvIG1vZGlmeSBoYXZpbmcgVVJJICIrZ2V0VGFyZ2V0VVJJKCksIG5ldyBFeGNlcHRpb24oKSk7CisJCXJldHVybiByZXRWYWx1ZTsKKwl9IC8vIGdldElkZW50aWZpYWJsZQorCisKKwlwcml2YXRlIEVPYmplY3QgZmluZE5vZGVMYWJlbChHcmFwaCBnKSB7CisJCWZvciAoTm9kZUxhYmVsIG5vZGVMYWJlbCA6IGcuZ2V0Tm9kZUxhYmVscygpLnZhbHVlcygpKSB7CisJCQkvLyBPdXIgdGFyZ2V0PworCQkJaWYgKG5vZGVMYWJlbC5nZXRVUkkoKS5lcXVhbHMoZ2V0VGFyZ2V0VVJJKCkpKSB7CisJCQkJLy8gWWVzCisJCQkJcmV0dXJuICBub2RlTGFiZWw7CisJCQl9IC8vIGlmCisJCX0gLy8gZm9yIGVhY2ggTm9kZSBMYWJlbAorCQlyZXR1cm4gbnVsbDsKKwkJCisJfQorCQorCXByaXZhdGUgRU9iamVjdCBmaW5kRWRnZUxhYmVsKEdyYXBoIGcpIHsKKwkJZm9yIChFZGdlIGVkZ2UgOiBnLmdldEVkZ2VzKCkudmFsdWVzKCkpIHsKKwkJCS8vIE91ciB0YXJnZXQ/CisJCQlpZiAoZWRnZS5nZXRMYWJlbCgpLmdldFVSSSgpLmVxdWFscyhnZXRUYXJnZXRVUkkoKSkpIHsKKwkJCQkvLyBZZXMKKwkJCQlyZXR1cm4gZWRnZS5nZXRMYWJlbCgpOworCQkJfSAvLyBpZgorCQl9IC8vIGZvciBlYWNoIEVkZ2UKKwkJcmV0dXJuIG51bGw7CisJfQorCQorCXByaXZhdGUgdm9pZCBtb2RpZnlUYXJnZXQoRU9iamVjdCB0YXJnZXQpIHsKKwkJLy8gWWVzCisJCWZvciAoRmVhdHVyZU1vZGlmaWVyIGZlYXR1cmVNb2RpZmllciA6IGdldEZlYXR1cmVNb2RpZmllcnMoKSkgeworCQkJCQorCQkJLy8gSWYgdGhlIElkZW50aWZpYWJsZSBpcyBhIGxhYmVsLCB0aGVuIHRoZSBmZWF0dXJlIHdlCisJCQkvLyBhcmUgbW9kaWZ5aW5nIGNvdWxkIGJlIGluIHRoZSBjdXJyZW50IGxhYmVsIHZhbHVlLiBJZiBpdCBpcworCQkJLy8gd2UgbmVlZCB0byBhZGp1c3QgdGhlIHRhcmdldCBvZiB0aGUgZmVhdHVyZSBtb2RpZmllci4KKwkJCS8vIAorCQkJaWYgKHRhcmdldCBpbnN0YW5jZW9mIExhYmVsKSB7CisJCQkJLy8gWWVzCisJCQkJZmluYWwgTGFiZWwgbCA9IChMYWJlbCl0YXJnZXQ7CisJCQkJdGFyZ2V0ID0gbC5nZXRDdXJyZW50VmFsdWUoKTsKKwkJCX0KKwkJCWZlYXR1cmVNb2RpZmllci5zZXRUYXJnZXQodGFyZ2V0KTsKKwkJCWZlYXR1cmVNb2RpZmllci51cGRhdGVGZWF0dXJlKCk7CisJCX0gLy8gZm9yIGVhY2ggRmVhdHVyZU1vZGlmaWVyCisJfSAvLyBtb2RpZnlJZGVudGlmaWFibGUKKworCS8qKgorCSAqIExvb2sgaW5zaWRlIHRoZSBkZWNvcmF0b3JzIGZvciB0aGUgdGFyZ2V0LiBUaGlzIGlzIHRvIGZpbmQgc3RyaW5nIHZhbHVlcyBhbmQKKwkgKiBkb3VibGUgdmFsdWVzLiAKKwkgKiBAcGFyYW0gZW9iagorCSAqIEBwYXJhbSB0YXJnZXQKKwkgKiBAcmV0dXJuIEVPYmplY3QgdGhlIHRhcmdldCBpZiBmb3VuZCwgb3RoZXJ3aXNlIG51bGwKKwkgKi8KKwlwdWJsaWMgRU9iamVjdCBkZWVwRmluZENoaWxkcmVuKEVPYmplY3QgZW9iaiwgRU9iamVjdCB0YXJnZXQpIHsKKwkJaWYoZW9iai5lcXVhbHModGFyZ2V0KSkgcmV0dXJuIGVvYmo7CisJCWZvcihFT2JqZWN0IGVvOmVvYmouZUNvbnRlbnRzKCkpIHsKKwkJCWRlZXBGaW5kQ2hpbGRyZW4oZW8sIHRhcmdldCk7CisJCX0KKwkJcmV0dXJuIG51bGw7CisJfQorCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLk1vZGlmaWVyI2dldE1vZGlmaWNhdGlvblN1bW1hcnkoKQorCSAqLworCXB1YmxpYyBMaXN0PFN0cmluZz4gZ2V0TW9kaWZpY2F0aW9uU3VtbWFyeSgpIHsKKwkJZmluYWwgTGlzdDxTdHJpbmc+IHJldFZhbHVlID0gbmV3IEFycmF5TGlzdDxTdHJpbmc+KCk7CisJCWZvciAoRmVhdHVyZU1vZGlmaWVyIGZlYXR1cmVNb2RpZmllciA6IGdldEZlYXR1cmVNb2RpZmllcnMoKSkgeworCQkJcmV0VmFsdWUuYWRkKGZlYXR1cmVNb2RpZmllci5nZXRNb2RpZmljYXRpb25TdW1tYXJ5KCkpOworCQl9IC8vIGZvciBlYWNoIEZlYXR1cmVNb2RpZmllcgorCQlyZXR1cm4gcmV0VmFsdWU7CisJfSAvLyBnZXRNb2RpZmljYXRpb25TdW1tYXJ5CisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uaW1wbC5JZGVudGlmaWFibGVJbXBsI3NhbmUoKQorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBib29sZWFuIHNhbmUoKSB7CisJCWJvb2xlYW4gcmV0VmFsdWUgPSBzdXBlci5zYW5lKCk7CisJCWFzc2VydCByZXRWYWx1ZTsKKworCQkvKgorCQkgKiBUaGlzIGlzIGNvbW1lbnRlZCBvdXQgYmVjYXVzZSBvZiB0aGUgZGlmZmljdWx0eSBvZiBkeW5hbWljYWxseQorCQkgKiBjcmVhdGluZyBhIHRlc3Qgb2JqZWN0IHRoYXQgaXMgZGVyaXZlZCBmcm9tIElkZW50aWZhYmxlLiBTbyB0aGUgdGVzdAorCQkgKiBvYmplY3QgZG9lc24ndCBoYXZlIGEgVVJJLiBTZWUgTW9uaXRvclRlc3QjY3JlYXRlVGVzdFBhY2thZ2UoKQorCQkgKi8KKwkJLy8gcmV0VmFsdWUgPSByZXRWYWx1ZSAmJiB0YXJnZXRVUkkgIT0gbnVsbDsKKwkJLy8gYXNzZXJ0IHJldFZhbHVlOworCQlmb3IgKEZlYXR1cmVNb2RpZmllciBmZWF0dXJlTW9kaWZpZXIgOiBnZXRGZWF0dXJlTW9kaWZpZXJzKCkpIHsKKwkJCXJldFZhbHVlID0gcmV0VmFsdWUgJiYgZmVhdHVyZU1vZGlmaWVyLnNhbmUoKTsKKwkJCWFzc2VydCByZXRWYWx1ZTsKKwkJfSAvLyBmb3IgZWFjaCBGZWF0dXJlTW9kaWZpZXIKKwkJcmV0dXJuIHJldFZhbHVlOworCX0gLy8gc2FuZQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBOb3RpZmljYXRpb25DaGFpbiBlSW52ZXJzZVJlbW92ZShJbnRlcm5hbEVPYmplY3Qgb3RoZXJFbmQsCisJCQlpbnQgZmVhdHVyZUlELCBOb3RpZmljYXRpb25DaGFpbiBtc2dzKSB7CisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7CisJCQljYXNlIE1vZGlmaWVyUGFja2FnZS5NT0RJRklFUl9fRkVBVFVSRV9NT0RJRklFUlM6CisJCQkJcmV0dXJuICgoSW50ZXJuYWxFTGlzdDw/PilnZXRGZWF0dXJlTW9kaWZpZXJzKCkpLmJhc2ljUmVtb3ZlKG90aGVyRW5kLCBtc2dzKTsKKwkJfQorCQlyZXR1cm4gc3VwZXIuZUludmVyc2VSZW1vdmUob3RoZXJFbmQsIGZlYXR1cmVJRCwgbXNncyk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBPYmplY3QgZUdldChpbnQgZmVhdHVyZUlELCBib29sZWFuIHJlc29sdmUsIGJvb2xlYW4gY29yZVR5cGUpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJCWNhc2UgTW9kaWZpZXJQYWNrYWdlLk1PRElGSUVSX19UQVJHRVRfVVJJOgorCQkJCXJldHVybiBnZXRUYXJnZXRVUkkoKTsKKwkJCWNhc2UgTW9kaWZpZXJQYWNrYWdlLk1PRElGSUVSX19GRUFUVVJFX01PRElGSUVSUzoKKwkJCQlyZXR1cm4gZ2V0RmVhdHVyZU1vZGlmaWVycygpOworCQkJY2FzZSBNb2RpZmllclBhY2thZ2UuTU9ESUZJRVJfX0NPTVBMRVRFOgorCQkJCXJldHVybiBpc0NvbXBsZXRlKCk7CisJCX0KKwkJcmV0dXJuIHN1cGVyLmVHZXQoZmVhdHVyZUlELCByZXNvbHZlLCBjb3JlVHlwZSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBTdXBwcmVzc1dhcm5pbmdzKCJ1bmNoZWNrZWQiKQorCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGVTZXQoaW50IGZlYXR1cmVJRCwgT2JqZWN0IG5ld1ZhbHVlKSB7CisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7CisJCQljYXNlIE1vZGlmaWVyUGFja2FnZS5NT0RJRklFUl9fVEFSR0VUX1VSSToKKwkJCQlzZXRUYXJnZXRVUkkoKFVSSSluZXdWYWx1ZSk7CisJCQkJcmV0dXJuOworCQkJY2FzZSBNb2RpZmllclBhY2thZ2UuTU9ESUZJRVJfX0ZFQVRVUkVfTU9ESUZJRVJTOgorCQkJCWdldEZlYXR1cmVNb2RpZmllcnMoKS5jbGVhcigpOworCQkJCWdldEZlYXR1cmVNb2RpZmllcnMoKS5hZGRBbGwoKENvbGxlY3Rpb248PyBleHRlbmRzIEZlYXR1cmVNb2RpZmllcj4pbmV3VmFsdWUpOworCQkJCXJldHVybjsKKwkJfQorCQlzdXBlci5lU2V0KGZlYXR1cmVJRCwgbmV3VmFsdWUpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBlVW5zZXQoaW50IGZlYXR1cmVJRCkgeworCQlzd2l0Y2ggKGZlYXR1cmVJRCkgeworCQkJY2FzZSBNb2RpZmllclBhY2thZ2UuTU9ESUZJRVJfX1RBUkdFVF9VUkk6CisJCQkJc2V0VGFyZ2V0VVJJKFRBUkdFVF9VUklfRURFRkFVTFQpOworCQkJCXJldHVybjsKKwkJCWNhc2UgTW9kaWZpZXJQYWNrYWdlLk1PRElGSUVSX19GRUFUVVJFX01PRElGSUVSUzoKKwkJCQlnZXRGZWF0dXJlTW9kaWZpZXJzKCkuY2xlYXIoKTsKKwkJCQlyZXR1cm47CisJCX0KKwkJc3VwZXIuZVVuc2V0KGZlYXR1cmVJRCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBib29sZWFuIGVJc1NldChpbnQgZmVhdHVyZUlEKSB7CisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7CisJCQljYXNlIE1vZGlmaWVyUGFja2FnZS5NT0RJRklFUl9fVEFSR0VUX1VSSToKKwkJCQlyZXR1cm4gVEFSR0VUX1VSSV9FREVGQVVMVCA9PSBudWxsID8gdGFyZ2V0VVJJICE9IG51bGwgOiAhVEFSR0VUX1VSSV9FREVGQVVMVC5lcXVhbHModGFyZ2V0VVJJKTsKKwkJCWNhc2UgTW9kaWZpZXJQYWNrYWdlLk1PRElGSUVSX19GRUFUVVJFX01PRElGSUVSUzoKKwkJCQlyZXR1cm4gZmVhdHVyZU1vZGlmaWVycyAhPSBudWxsICYmICFmZWF0dXJlTW9kaWZpZXJzLmlzRW1wdHkoKTsKKwkJCWNhc2UgTW9kaWZpZXJQYWNrYWdlLk1PRElGSUVSX19DT01QTEVURToKKwkJCQlyZXR1cm4gaXNDb21wbGV0ZSgpICE9IENPTVBMRVRFX0VERUZBVUxUOworCQl9CisJCXJldHVybiBzdXBlci5lSXNTZXQoZmVhdHVyZUlEKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIFN0cmluZyB0b1N0cmluZygpIHsKKwkJaWYgKGVJc1Byb3h5KCkpIHJldHVybiBzdXBlci50b1N0cmluZygpOworCisJCVN0cmluZ0J1ZmZlciByZXN1bHQgPSBuZXcgU3RyaW5nQnVmZmVyKHN1cGVyLnRvU3RyaW5nKCkpOworCQlyZXN1bHQuYXBwZW5kKCIgKHRhcmdldFVSSTogIik7IC8vJE5PTi1OTFMtMSQKKwkJcmVzdWx0LmFwcGVuZCh0YXJnZXRVUkkpOworCQlyZXN1bHQuYXBwZW5kKCcpJyk7CisJCXJldHVybiByZXN1bHQudG9TdHJpbmcoKTsKKwl9CisKK30gLy8gTW9kaWZpZXJJbXBsCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL21vZGlmaWVyL2ltcGwvTW9kaWZpZXJQYWNrYWdlSW1wbC5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9tb2RpZmllci9pbXBsL01vZGlmaWVyUGFja2FnZUltcGwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMDBhNmFmCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9tb2RpZmllci9pbXBsL01vZGlmaWVyUGFja2FnZUltcGwuamF2YQpAQCAtMCwwICsxLDEyNzkgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLmltcGw7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVBdHRyaWJ1dGU7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzczsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9wZXJhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRVBhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVSZWZlcmVuY2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVjb3JlUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuaW1wbC5FUGFja2FnZUltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5Db21tb25QYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uaW1wbC5Db21tb25QYWNrYWdlSW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZXhwZXJpbWVudC5FeHBlcmltZW50UGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZXhwZXJpbWVudC5pbXBsLkV4cGVyaW1lbnRQYWNrYWdlSW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguR3JhcGhQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5pbXBsLkdyYXBoUGFja2FnZUltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmxvZ2dlci5Mb2dnZXJQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5sb2dnZXIuaW1wbC5Mb2dnZXJQYWNrYWdlSW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuTW9kZWxQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5pbXBsLk1vZGVsUGFja2FnZUltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLkRvdWJsZU1vZGlmaWVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5Eb3VibGVOT1BNb2RpZmllcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuRG91YmxlUmFuZ2VNb2RpZmllcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuRG91YmxlU2VxdWVuY2VNb2RpZmllcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuRmVhdHVyZU1vZGlmaWVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5JbnRlZ2VyTW9kaWZpZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLkludGVnZXJOT1BNb2RpZmllcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuSW50ZWdlclJhbmdlTW9kaWZpZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLkludGVnZXJTZXF1ZW5jZU1vZGlmaWVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5Mb25nTW9kaWZpZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLkxvbmdOT1BNb2RpZmllcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuTG9uZ1JhbmdlTW9kaWZpZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLkxvbmdTZXF1ZW5jZU1vZGlmaWVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5Nb2RpZmlhYmxlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5Nb2RpZmllcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuTW9kaWZpZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5Nb2RpZmllclBhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLk5PUE1vZGlmaWVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5SYW5nZU1vZGlmaWVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5TVEVNVGltZU1vZGlmaWVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5TVEVNVGltZU5PUE1vZGlmaWVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5TVEVNVGltZVJhbmdlTW9kaWZpZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLlNURU1UaW1lU2VxdWVuY2VNb2RpZmllcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuU2VxdWVuY2VNb2RpZmllcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuU2luZ2xlVmFsdWVNb2RpZmllcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuU3RyaW5nTk9QTW9kaWZpZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLlN0cmluZ1NlcXVlbmNlTW9kaWZpZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZS5QcmVkaWNhdGVQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUuaW1wbC5QcmVkaWNhdGVQYWNrYWdlSW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2NlbmFyaW8uU2NlbmFyaW9QYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zY2VuYXJpby5pbXBsLlNjZW5hcmlvUGFja2FnZUltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNlcXVlbmNlci5TZXF1ZW5jZXJQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zZXF1ZW5jZXIuaW1wbC5TZXF1ZW5jZXJQYWNrYWdlSW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc29sdmVyLlNvbHZlclBhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNvbHZlci5pbXBsLlNvbHZlclBhY2thZ2VJbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS50cmlnZ2VyLlRyaWdnZXJQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS50cmlnZ2VyLmltcGwuVHJpZ2dlclBhY2thZ2VJbXBsOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiBBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgbW9kZWwgPGI+UGFja2FnZTwvYj4uCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIE1vZGlmaWVyUGFja2FnZUltcGwgZXh0ZW5kcyBFUGFja2FnZUltcGwgaW1wbGVtZW50cyBNb2RpZmllclBhY2thZ2UgeworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByaXZhdGUgRUNsYXNzIGRvdWJsZU5PUE1vZGlmaWVyRUNsYXNzID0gbnVsbDsKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByaXZhdGUgRUNsYXNzIGRvdWJsZVJhbmdlTW9kaWZpZXJFQ2xhc3MgPSBudWxsOworCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJpdmF0ZSBFQ2xhc3MgZG91YmxlU2VxdWVuY2VNb2RpZmllckVDbGFzcyA9IG51bGw7CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcml2YXRlIEVDbGFzcyBmZWF0dXJlTW9kaWZpZXJFQ2xhc3MgPSBudWxsOworCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJpdmF0ZSBFQ2xhc3MgaW50ZWdlck5PUE1vZGlmaWVyRUNsYXNzID0gbnVsbDsKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByaXZhdGUgRUNsYXNzIGludGVnZXJSYW5nZU1vZGlmaWVyRUNsYXNzID0gbnVsbDsKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByaXZhdGUgRUNsYXNzIGludGVnZXJTZXF1ZW5jZU1vZGlmaWVyRUNsYXNzID0gbnVsbDsKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByaXZhdGUgRUNsYXNzIGxvbmdOT1BNb2RpZmllckVDbGFzcyA9IG51bGw7CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcml2YXRlIEVDbGFzcyBsb25nUmFuZ2VNb2RpZmllckVDbGFzcyA9IG51bGw7CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcml2YXRlIEVDbGFzcyBsb25nU2VxdWVuY2VNb2RpZmllckVDbGFzcyA9IG51bGw7CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcml2YXRlIEVDbGFzcyBtb2RpZmllckVDbGFzcyA9IG51bGw7CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcml2YXRlIEVDbGFzcyBub3BNb2RpZmllckVDbGFzcyA9IG51bGw7CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcml2YXRlIEVDbGFzcyByYW5nZU1vZGlmaWVyRUNsYXNzID0gbnVsbDsKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByaXZhdGUgRUNsYXNzIHN0ZW1UaW1lTk9QTW9kaWZpZXJFQ2xhc3MgPSBudWxsOworCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJpdmF0ZSBFQ2xhc3Mgc3RlbVRpbWVSYW5nZU1vZGlmaWVyRUNsYXNzID0gbnVsbDsKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByaXZhdGUgRUNsYXNzIHN0ZW1UaW1lU2VxdWVuY2VNb2RpZmllckVDbGFzcyA9IG51bGw7CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcml2YXRlIEVDbGFzcyBzZXF1ZW5jZU1vZGlmaWVyRUNsYXNzID0gbnVsbDsKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByaXZhdGUgRUNsYXNzIHN0cmluZ05PUE1vZGlmaWVyRUNsYXNzID0gbnVsbDsKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByaXZhdGUgRUNsYXNzIHN0cmluZ1NlcXVlbmNlTW9kaWZpZXJFQ2xhc3MgPSBudWxsOworCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJpdmF0ZSBFQ2xhc3MgbW9kaWZpYWJsZUVDbGFzcyA9IG51bGw7CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcml2YXRlIEVDbGFzcyBzaW5nbGVWYWx1ZU1vZGlmaWVyRUNsYXNzID0gbnVsbDsKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByaXZhdGUgRUNsYXNzIGRvdWJsZU1vZGlmaWVyRUNsYXNzID0gbnVsbDsKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByaXZhdGUgRUNsYXNzIGludGVnZXJNb2RpZmllckVDbGFzcyA9IG51bGw7CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcml2YXRlIEVDbGFzcyBsb25nTW9kaWZpZXJFQ2xhc3MgPSBudWxsOworCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJpdmF0ZSBFQ2xhc3Mgc3RlbVRpbWVNb2RpZmllckVDbGFzcyA9IG51bGw7CisKKwkvKioKKwkgKiBDcmVhdGVzIGFuIGluc3RhbmNlIG9mIHRoZSBtb2RlbCA8Yj5QYWNrYWdlPC9iPiwgcmVnaXN0ZXJlZCB3aXRoCisJICoge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FUGFja2FnZS5SZWdpc3RyeSBFUGFja2FnZS5SZWdpc3RyeX0gYnkgdGhlIHBhY2thZ2UKKwkgKiBwYWNrYWdlIFVSSSB2YWx1ZS4KKwkgKiA8cD5Ob3RlOiB0aGUgY29ycmVjdCB3YXkgdG8gY3JlYXRlIHRoZSBwYWNrYWdlIGlzIHZpYSB0aGUgc3RhdGljCisJICogZmFjdG9yeSBtZXRob2Qge0BsaW5rICNpbml0IGluaXQoKX0sIHdoaWNoIGFsc28gcGVyZm9ybXMKKwkgKiBpbml0aWFsaXphdGlvbiBvZiB0aGUgcGFja2FnZSwgb3IgcmV0dXJucyB0aGUgcmVnaXN0ZXJlZCBwYWNrYWdlLAorCSAqIGlmIG9uZSBhbHJlYWR5IGV4aXN0cy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVQYWNrYWdlLlJlZ2lzdHJ5CisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuTW9kaWZpZXJQYWNrYWdlI2VOU19VUkkKKwkgKiBAc2VlICNpbml0KCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJpdmF0ZSBNb2RpZmllclBhY2thZ2VJbXBsKCkgeworCQlzdXBlcihlTlNfVVJJLCBNb2RpZmllckZhY3RvcnkuZUlOU1RBTkNFKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcml2YXRlIHN0YXRpYyBib29sZWFuIGlzSW5pdGVkID0gZmFsc2U7CisKKwkvKioKKwkgKiBDcmVhdGVzLCByZWdpc3RlcnMsIGFuZCBpbml0aWFsaXplcyB0aGUgPGI+UGFja2FnZTwvYj4gZm9yIHRoaXMgbW9kZWwsIGFuZCBmb3IgYW55IG90aGVycyB1cG9uIHdoaWNoIGl0IGRlcGVuZHMuCisJICogCisJICogPHA+VGhpcyBtZXRob2QgaXMgdXNlZCB0byBpbml0aWFsaXplIHtAbGluayBNb2RpZmllclBhY2thZ2UjZUlOU1RBTkNFfSB3aGVuIHRoYXQgZmllbGQgaXMgYWNjZXNzZWQuCisJICogQ2xpZW50cyBzaG91bGQgbm90IGludm9rZSBpdCBkaXJlY3RseS4gSW5zdGVhZCwgdGhleSBzaG91bGQgc2ltcGx5IGFjY2VzcyB0aGF0IGZpZWxkIHRvIG9idGFpbiB0aGUgcGFja2FnZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI2VOU19VUkkKKwkgKiBAc2VlICNjcmVhdGVQYWNrYWdlQ29udGVudHMoKQorCSAqIEBzZWUgI2luaXRpYWxpemVQYWNrYWdlQ29udGVudHMoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgc3RhdGljIE1vZGlmaWVyUGFja2FnZSBpbml0KCkgeworCQlpZiAoaXNJbml0ZWQpIHJldHVybiAoTW9kaWZpZXJQYWNrYWdlKUVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVQYWNrYWdlKE1vZGlmaWVyUGFja2FnZS5lTlNfVVJJKTsKKworCQkvLyBPYnRhaW4gb3IgY3JlYXRlIGFuZCByZWdpc3RlciBwYWNrYWdlCisJCU1vZGlmaWVyUGFja2FnZUltcGwgdGhlTW9kaWZpZXJQYWNrYWdlID0gKE1vZGlmaWVyUGFja2FnZUltcGwpKEVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldChlTlNfVVJJKSBpbnN0YW5jZW9mIE1vZGlmaWVyUGFja2FnZUltcGwgPyBFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXQoZU5TX1VSSSkgOiBuZXcgTW9kaWZpZXJQYWNrYWdlSW1wbCgpKTsKKworCQlpc0luaXRlZCA9IHRydWU7CisKKwkJLy8gSW5pdGlhbGl6ZSBzaW1wbGUgZGVwZW5kZW5jaWVzCisJCUVjb3JlUGFja2FnZS5lSU5TVEFOQ0UuZUNsYXNzKCk7CisKKwkJLy8gT2J0YWluIG9yIGNyZWF0ZSBhbmQgcmVnaXN0ZXIgaW50ZXJkZXBlbmRlbmNpZXMKKwkJQ29tbW9uUGFja2FnZUltcGwgdGhlQ29tbW9uUGFja2FnZSA9IChDb21tb25QYWNrYWdlSW1wbCkoRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RVBhY2thZ2UoQ29tbW9uUGFja2FnZS5lTlNfVVJJKSBpbnN0YW5jZW9mIENvbW1vblBhY2thZ2VJbXBsID8gRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RVBhY2thZ2UoQ29tbW9uUGFja2FnZS5lTlNfVVJJKSA6IENvbW1vblBhY2thZ2UuZUlOU1RBTkNFKTsKKwkJRXhwZXJpbWVudFBhY2thZ2VJbXBsIHRoZUV4cGVyaW1lbnRQYWNrYWdlID0gKEV4cGVyaW1lbnRQYWNrYWdlSW1wbCkoRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RVBhY2thZ2UoRXhwZXJpbWVudFBhY2thZ2UuZU5TX1VSSSkgaW5zdGFuY2VvZiBFeHBlcmltZW50UGFja2FnZUltcGwgPyBFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShFeHBlcmltZW50UGFja2FnZS5lTlNfVVJJKSA6IEV4cGVyaW1lbnRQYWNrYWdlLmVJTlNUQU5DRSk7CisJCUdyYXBoUGFja2FnZUltcGwgdGhlR3JhcGhQYWNrYWdlID0gKEdyYXBoUGFja2FnZUltcGwpKEVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVQYWNrYWdlKEdyYXBoUGFja2FnZS5lTlNfVVJJKSBpbnN0YW5jZW9mIEdyYXBoUGFja2FnZUltcGwgPyBFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShHcmFwaFBhY2thZ2UuZU5TX1VSSSkgOiBHcmFwaFBhY2thZ2UuZUlOU1RBTkNFKTsKKwkJTW9kZWxQYWNrYWdlSW1wbCB0aGVNb2RlbFBhY2thZ2UgPSAoTW9kZWxQYWNrYWdlSW1wbCkoRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RVBhY2thZ2UoTW9kZWxQYWNrYWdlLmVOU19VUkkpIGluc3RhbmNlb2YgTW9kZWxQYWNrYWdlSW1wbCA/IEVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVQYWNrYWdlKE1vZGVsUGFja2FnZS5lTlNfVVJJKSA6IE1vZGVsUGFja2FnZS5lSU5TVEFOQ0UpOworCQlQcmVkaWNhdGVQYWNrYWdlSW1wbCB0aGVQcmVkaWNhdGVQYWNrYWdlID0gKFByZWRpY2F0ZVBhY2thZ2VJbXBsKShFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShQcmVkaWNhdGVQYWNrYWdlLmVOU19VUkkpIGluc3RhbmNlb2YgUHJlZGljYXRlUGFja2FnZUltcGwgPyBFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShQcmVkaWNhdGVQYWNrYWdlLmVOU19VUkkpIDogUHJlZGljYXRlUGFja2FnZS5lSU5TVEFOQ0UpOworCQlTY2VuYXJpb1BhY2thZ2VJbXBsIHRoZVNjZW5hcmlvUGFja2FnZSA9IChTY2VuYXJpb1BhY2thZ2VJbXBsKShFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShTY2VuYXJpb1BhY2thZ2UuZU5TX1VSSSkgaW5zdGFuY2VvZiBTY2VuYXJpb1BhY2thZ2VJbXBsID8gRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RVBhY2thZ2UoU2NlbmFyaW9QYWNrYWdlLmVOU19VUkkpIDogU2NlbmFyaW9QYWNrYWdlLmVJTlNUQU5DRSk7CisJCVNlcXVlbmNlclBhY2thZ2VJbXBsIHRoZVNlcXVlbmNlclBhY2thZ2UgPSAoU2VxdWVuY2VyUGFja2FnZUltcGwpKEVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVQYWNrYWdlKFNlcXVlbmNlclBhY2thZ2UuZU5TX1VSSSkgaW5zdGFuY2VvZiBTZXF1ZW5jZXJQYWNrYWdlSW1wbCA/IEVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVQYWNrYWdlKFNlcXVlbmNlclBhY2thZ2UuZU5TX1VSSSkgOiBTZXF1ZW5jZXJQYWNrYWdlLmVJTlNUQU5DRSk7CisJCVRyaWdnZXJQYWNrYWdlSW1wbCB0aGVUcmlnZ2VyUGFja2FnZSA9IChUcmlnZ2VyUGFja2FnZUltcGwpKEVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVQYWNrYWdlKFRyaWdnZXJQYWNrYWdlLmVOU19VUkkpIGluc3RhbmNlb2YgVHJpZ2dlclBhY2thZ2VJbXBsID8gRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RVBhY2thZ2UoVHJpZ2dlclBhY2thZ2UuZU5TX1VSSSkgOiBUcmlnZ2VyUGFja2FnZS5lSU5TVEFOQ0UpOworCQlTb2x2ZXJQYWNrYWdlSW1wbCB0aGVTb2x2ZXJQYWNrYWdlID0gKFNvbHZlclBhY2thZ2VJbXBsKShFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShTb2x2ZXJQYWNrYWdlLmVOU19VUkkpIGluc3RhbmNlb2YgU29sdmVyUGFja2FnZUltcGwgPyBFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShTb2x2ZXJQYWNrYWdlLmVOU19VUkkpIDogU29sdmVyUGFja2FnZS5lSU5TVEFOQ0UpOworCQlMb2dnZXJQYWNrYWdlSW1wbCB0aGVMb2dnZXJQYWNrYWdlID0gKExvZ2dlclBhY2thZ2VJbXBsKShFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShMb2dnZXJQYWNrYWdlLmVOU19VUkkpIGluc3RhbmNlb2YgTG9nZ2VyUGFja2FnZUltcGwgPyBFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShMb2dnZXJQYWNrYWdlLmVOU19VUkkpIDogTG9nZ2VyUGFja2FnZS5lSU5TVEFOQ0UpOworCisJCS8vIENyZWF0ZSBwYWNrYWdlIG1ldGEtZGF0YSBvYmplY3RzCisJCXRoZU1vZGlmaWVyUGFja2FnZS5jcmVhdGVQYWNrYWdlQ29udGVudHMoKTsKKwkJdGhlQ29tbW9uUGFja2FnZS5jcmVhdGVQYWNrYWdlQ29udGVudHMoKTsKKwkJdGhlRXhwZXJpbWVudFBhY2thZ2UuY3JlYXRlUGFja2FnZUNvbnRlbnRzKCk7CisJCXRoZUdyYXBoUGFja2FnZS5jcmVhdGVQYWNrYWdlQ29udGVudHMoKTsKKwkJdGhlTW9kZWxQYWNrYWdlLmNyZWF0ZVBhY2thZ2VDb250ZW50cygpOworCQl0aGVQcmVkaWNhdGVQYWNrYWdlLmNyZWF0ZVBhY2thZ2VDb250ZW50cygpOworCQl0aGVTY2VuYXJpb1BhY2thZ2UuY3JlYXRlUGFja2FnZUNvbnRlbnRzKCk7CisJCXRoZVNlcXVlbmNlclBhY2thZ2UuY3JlYXRlUGFja2FnZUNvbnRlbnRzKCk7CisJCXRoZVRyaWdnZXJQYWNrYWdlLmNyZWF0ZVBhY2thZ2VDb250ZW50cygpOworCQl0aGVTb2x2ZXJQYWNrYWdlLmNyZWF0ZVBhY2thZ2VDb250ZW50cygpOworCQl0aGVMb2dnZXJQYWNrYWdlLmNyZWF0ZVBhY2thZ2VDb250ZW50cygpOworCisJCS8vIEluaXRpYWxpemUgY3JlYXRlZCBtZXRhLWRhdGEKKwkJdGhlTW9kaWZpZXJQYWNrYWdlLmluaXRpYWxpemVQYWNrYWdlQ29udGVudHMoKTsKKwkJdGhlQ29tbW9uUGFja2FnZS5pbml0aWFsaXplUGFja2FnZUNvbnRlbnRzKCk7CisJCXRoZUV4cGVyaW1lbnRQYWNrYWdlLmluaXRpYWxpemVQYWNrYWdlQ29udGVudHMoKTsKKwkJdGhlR3JhcGhQYWNrYWdlLmluaXRpYWxpemVQYWNrYWdlQ29udGVudHMoKTsKKwkJdGhlTW9kZWxQYWNrYWdlLmluaXRpYWxpemVQYWNrYWdlQ29udGVudHMoKTsKKwkJdGhlUHJlZGljYXRlUGFja2FnZS5pbml0aWFsaXplUGFja2FnZUNvbnRlbnRzKCk7CisJCXRoZVNjZW5hcmlvUGFja2FnZS5pbml0aWFsaXplUGFja2FnZUNvbnRlbnRzKCk7CisJCXRoZVNlcXVlbmNlclBhY2thZ2UuaW5pdGlhbGl6ZVBhY2thZ2VDb250ZW50cygpOworCQl0aGVUcmlnZ2VyUGFja2FnZS5pbml0aWFsaXplUGFja2FnZUNvbnRlbnRzKCk7CisJCXRoZVNvbHZlclBhY2thZ2UuaW5pdGlhbGl6ZVBhY2thZ2VDb250ZW50cygpOworCQl0aGVMb2dnZXJQYWNrYWdlLmluaXRpYWxpemVQYWNrYWdlQ29udGVudHMoKTsKKworCQkvLyBNYXJrIG1ldGEtZGF0YSB0byBpbmRpY2F0ZSBpdCBjYW4ndCBiZSBjaGFuZ2VkCisJCXRoZU1vZGlmaWVyUGFja2FnZS5mcmVlemUoKTsKKworICAKKwkJLy8gVXBkYXRlIHRoZSByZWdpc3RyeSBhbmQgcmV0dXJuIHRoZSBwYWNrYWdlCisJCUVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLnB1dChNb2RpZmllclBhY2thZ2UuZU5TX1VSSSwgdGhlTW9kaWZpZXJQYWNrYWdlKTsKKwkJcmV0dXJuIHRoZU1vZGlmaWVyUGFja2FnZTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUNsYXNzIGdldERvdWJsZU5PUE1vZGlmaWVyKCkgeworCQlyZXR1cm4gZG91YmxlTk9QTW9kaWZpZXJFQ2xhc3M7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVDbGFzcyBnZXREb3VibGVSYW5nZU1vZGlmaWVyKCkgeworCQlyZXR1cm4gZG91YmxlUmFuZ2VNb2RpZmllckVDbGFzczsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUF0dHJpYnV0ZSBnZXREb3VibGVSYW5nZU1vZGlmaWVyX1N0YXJ0VmFsdWUoKSB7CisJCXJldHVybiAoRUF0dHJpYnV0ZSlkb3VibGVSYW5nZU1vZGlmaWVyRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVBdHRyaWJ1dGUgZ2V0RG91YmxlUmFuZ2VNb2RpZmllcl9FbmRWYWx1ZSgpIHsKKwkJcmV0dXJuIChFQXR0cmlidXRlKWRvdWJsZVJhbmdlTW9kaWZpZXJFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgxKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUF0dHJpYnV0ZSBnZXREb3VibGVSYW5nZU1vZGlmaWVyX0luY3JlbWVudCgpIHsKKwkJcmV0dXJuIChFQXR0cmlidXRlKWRvdWJsZVJhbmdlTW9kaWZpZXJFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgyKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUF0dHJpYnV0ZSBnZXREb3VibGVSYW5nZU1vZGlmaWVyX05leHRWYWx1ZSgpIHsKKwkJcmV0dXJuIChFQXR0cmlidXRlKWRvdWJsZVJhbmdlTW9kaWZpZXJFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgzKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUF0dHJpYnV0ZSBnZXREb3VibGVSYW5nZU1vZGlmaWVyX09yaWdpbmFsVmFsdWUoKSB7CisJCXJldHVybiAoRUF0dHJpYnV0ZSlkb3VibGVSYW5nZU1vZGlmaWVyRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoNCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVDbGFzcyBnZXREb3VibGVTZXF1ZW5jZU1vZGlmaWVyKCkgeworCQlyZXR1cm4gZG91YmxlU2VxdWVuY2VNb2RpZmllckVDbGFzczsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUF0dHJpYnV0ZSBnZXREb3VibGVTZXF1ZW5jZU1vZGlmaWVyX1NlcXVlbmNlKCkgeworCQlyZXR1cm4gKEVBdHRyaWJ1dGUpZG91YmxlU2VxdWVuY2VNb2RpZmllckVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDApOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQ2xhc3MgZ2V0RmVhdHVyZU1vZGlmaWVyKCkgeworCQlyZXR1cm4gZmVhdHVyZU1vZGlmaWVyRUNsYXNzOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFUmVmZXJlbmNlIGdldEZlYXR1cmVNb2RpZmllcl9UYXJnZXQoKSB7CisJCXJldHVybiAoRVJlZmVyZW5jZSlmZWF0dXJlTW9kaWZpZXJFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgwKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRVJlZmVyZW5jZSBnZXRGZWF0dXJlTW9kaWZpZXJfRVN0cnVjdHVyYWxGZWF0dXJlKCkgeworCQlyZXR1cm4gKEVSZWZlcmVuY2UpZmVhdHVyZU1vZGlmaWVyRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVBdHRyaWJ1dGUgZ2V0RmVhdHVyZU1vZGlmaWVyX0ZlYXR1cmVOYW1lKCkgeworCQlyZXR1cm4gKEVBdHRyaWJ1dGUpZmVhdHVyZU1vZGlmaWVyRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMik7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVBdHRyaWJ1dGUgZ2V0RmVhdHVyZU1vZGlmaWVyX0ZlYXR1cmVJZCgpIHsKKwkJcmV0dXJuIChFQXR0cmlidXRlKWZlYXR1cmVNb2RpZmllckVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDMpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQXR0cmlidXRlIGdldEZlYXR1cmVNb2RpZmllcl9DdXJyZW50VmFsdWVUZXh0KCkgeworCQlyZXR1cm4gKEVBdHRyaWJ1dGUpZmVhdHVyZU1vZGlmaWVyRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoNCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVBdHRyaWJ1dGUgZ2V0RmVhdHVyZU1vZGlmaWVyX0NvbXBsZXRlKCkgeworCQlyZXR1cm4gKEVBdHRyaWJ1dGUpZmVhdHVyZU1vZGlmaWVyRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoNSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVDbGFzcyBnZXRJbnRlZ2VyTk9QTW9kaWZpZXIoKSB7CisJCXJldHVybiBpbnRlZ2VyTk9QTW9kaWZpZXJFQ2xhc3M7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVDbGFzcyBnZXRJbnRlZ2VyUmFuZ2VNb2RpZmllcigpIHsKKwkJcmV0dXJuIGludGVnZXJSYW5nZU1vZGlmaWVyRUNsYXNzOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQXR0cmlidXRlIGdldEludGVnZXJSYW5nZU1vZGlmaWVyX1N0YXJ0VmFsdWUoKSB7CisJCXJldHVybiAoRUF0dHJpYnV0ZSlpbnRlZ2VyUmFuZ2VNb2RpZmllckVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDApOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQXR0cmlidXRlIGdldEludGVnZXJSYW5nZU1vZGlmaWVyX0VuZFZhbHVlKCkgeworCQlyZXR1cm4gKEVBdHRyaWJ1dGUpaW50ZWdlclJhbmdlTW9kaWZpZXJFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgxKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUF0dHJpYnV0ZSBnZXRJbnRlZ2VyUmFuZ2VNb2RpZmllcl9JbmNyZW1lbnQoKSB7CisJCXJldHVybiAoRUF0dHJpYnV0ZSlpbnRlZ2VyUmFuZ2VNb2RpZmllckVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDIpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQXR0cmlidXRlIGdldEludGVnZXJSYW5nZU1vZGlmaWVyX05leHRWYWx1ZSgpIHsKKwkJcmV0dXJuIChFQXR0cmlidXRlKWludGVnZXJSYW5nZU1vZGlmaWVyRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMyk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVBdHRyaWJ1dGUgZ2V0SW50ZWdlclJhbmdlTW9kaWZpZXJfT3JpZ2luYWxWYWx1ZSgpIHsKKwkJcmV0dXJuIChFQXR0cmlidXRlKWludGVnZXJSYW5nZU1vZGlmaWVyRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoNCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVDbGFzcyBnZXRJbnRlZ2VyU2VxdWVuY2VNb2RpZmllcigpIHsKKwkJcmV0dXJuIGludGVnZXJTZXF1ZW5jZU1vZGlmaWVyRUNsYXNzOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQXR0cmlidXRlIGdldEludGVnZXJTZXF1ZW5jZU1vZGlmaWVyX1NlcXVlbmNlKCkgeworCQlyZXR1cm4gKEVBdHRyaWJ1dGUpaW50ZWdlclNlcXVlbmNlTW9kaWZpZXJFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgwKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUNsYXNzIGdldExvbmdOT1BNb2RpZmllcigpIHsKKwkJcmV0dXJuIGxvbmdOT1BNb2RpZmllckVDbGFzczsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUNsYXNzIGdldExvbmdSYW5nZU1vZGlmaWVyKCkgeworCQlyZXR1cm4gbG9uZ1JhbmdlTW9kaWZpZXJFQ2xhc3M7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVBdHRyaWJ1dGUgZ2V0TG9uZ1JhbmdlTW9kaWZpZXJfU3RhcnRWYWx1ZSgpIHsKKwkJcmV0dXJuIChFQXR0cmlidXRlKWxvbmdSYW5nZU1vZGlmaWVyRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVBdHRyaWJ1dGUgZ2V0TG9uZ1JhbmdlTW9kaWZpZXJfRW5kVmFsdWUoKSB7CisJCXJldHVybiAoRUF0dHJpYnV0ZSlsb25nUmFuZ2VNb2RpZmllckVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDEpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQXR0cmlidXRlIGdldExvbmdSYW5nZU1vZGlmaWVyX0luY3JlbWVudCgpIHsKKwkJcmV0dXJuIChFQXR0cmlidXRlKWxvbmdSYW5nZU1vZGlmaWVyRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMik7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVBdHRyaWJ1dGUgZ2V0TG9uZ1JhbmdlTW9kaWZpZXJfTmV4dFZhbHVlKCkgeworCQlyZXR1cm4gKEVBdHRyaWJ1dGUpbG9uZ1JhbmdlTW9kaWZpZXJFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgzKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUF0dHJpYnV0ZSBnZXRMb25nUmFuZ2VNb2RpZmllcl9PcmlnaW5hbFZhbHVlKCkgeworCQlyZXR1cm4gKEVBdHRyaWJ1dGUpbG9uZ1JhbmdlTW9kaWZpZXJFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCg0KTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUNsYXNzIGdldExvbmdTZXF1ZW5jZU1vZGlmaWVyKCkgeworCQlyZXR1cm4gbG9uZ1NlcXVlbmNlTW9kaWZpZXJFQ2xhc3M7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVBdHRyaWJ1dGUgZ2V0TG9uZ1NlcXVlbmNlTW9kaWZpZXJfU2VxdWVuY2UoKSB7CisJCXJldHVybiAoRUF0dHJpYnV0ZSlsb25nU2VxdWVuY2VNb2RpZmllckVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDApOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQ2xhc3MgZ2V0TW9kaWZpZXIoKSB7CisJCXJldHVybiBtb2RpZmllckVDbGFzczsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUF0dHJpYnV0ZSBnZXRNb2RpZmllcl9UYXJnZXRVUkkoKSB7CisJCXJldHVybiAoRUF0dHJpYnV0ZSltb2RpZmllckVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDApOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFUmVmZXJlbmNlIGdldE1vZGlmaWVyX0ZlYXR1cmVNb2RpZmllcnMoKSB7CisJCXJldHVybiAoRVJlZmVyZW5jZSltb2RpZmllckVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDEpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQXR0cmlidXRlIGdldE1vZGlmaWVyX0NvbXBsZXRlKCkgeworCQlyZXR1cm4gKEVBdHRyaWJ1dGUpbW9kaWZpZXJFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgyKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUNsYXNzIGdldE5PUE1vZGlmaWVyKCkgeworCQlyZXR1cm4gbm9wTW9kaWZpZXJFQ2xhc3M7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVDbGFzcyBnZXRSYW5nZU1vZGlmaWVyKCkgeworCQlyZXR1cm4gcmFuZ2VNb2RpZmllckVDbGFzczsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUNsYXNzIGdldFNURU1UaW1lTk9QTW9kaWZpZXIoKSB7CisJCXJldHVybiBzdGVtVGltZU5PUE1vZGlmaWVyRUNsYXNzOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQ2xhc3MgZ2V0U1RFTVRpbWVSYW5nZU1vZGlmaWVyKCkgeworCQlyZXR1cm4gc3RlbVRpbWVSYW5nZU1vZGlmaWVyRUNsYXNzOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFUmVmZXJlbmNlIGdldFNURU1UaW1lUmFuZ2VNb2RpZmllcl9TdGFydFZhbHVlKCkgeworCQlyZXR1cm4gKEVSZWZlcmVuY2Upc3RlbVRpbWVSYW5nZU1vZGlmaWVyRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVSZWZlcmVuY2UgZ2V0U1RFTVRpbWVSYW5nZU1vZGlmaWVyX0VuZFZhbHVlKCkgeworCQlyZXR1cm4gKEVSZWZlcmVuY2Upc3RlbVRpbWVSYW5nZU1vZGlmaWVyRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVBdHRyaWJ1dGUgZ2V0U1RFTVRpbWVSYW5nZU1vZGlmaWVyX0luY3JlbWVudCgpIHsKKwkJcmV0dXJuIChFQXR0cmlidXRlKXN0ZW1UaW1lUmFuZ2VNb2RpZmllckVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDIpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFUmVmZXJlbmNlIGdldFNURU1UaW1lUmFuZ2VNb2RpZmllcl9OZXh0VmFsdWUoKSB7CisJCXJldHVybiAoRVJlZmVyZW5jZSlzdGVtVGltZVJhbmdlTW9kaWZpZXJFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgzKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRVJlZmVyZW5jZSBnZXRTVEVNVGltZVJhbmdlTW9kaWZpZXJfT3JpZ2luYWxWYWx1ZSgpIHsKKwkJcmV0dXJuIChFUmVmZXJlbmNlKXN0ZW1UaW1lUmFuZ2VNb2RpZmllckVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDQpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQ2xhc3MgZ2V0U1RFTVRpbWVTZXF1ZW5jZU1vZGlmaWVyKCkgeworCQlyZXR1cm4gc3RlbVRpbWVTZXF1ZW5jZU1vZGlmaWVyRUNsYXNzOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFUmVmZXJlbmNlIGdldFNURU1UaW1lU2VxdWVuY2VNb2RpZmllcl9TZXF1ZW5jZSgpIHsKKwkJcmV0dXJuIChFUmVmZXJlbmNlKXN0ZW1UaW1lU2VxdWVuY2VNb2RpZmllckVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDApOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQ2xhc3MgZ2V0U2VxdWVuY2VNb2RpZmllcigpIHsKKwkJcmV0dXJuIHNlcXVlbmNlTW9kaWZpZXJFQ2xhc3M7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVBdHRyaWJ1dGUgZ2V0U2VxdWVuY2VNb2RpZmllcl9TZXF1ZW5jZVNpemUoKSB7CisJCXJldHVybiAoRUF0dHJpYnV0ZSlzZXF1ZW5jZU1vZGlmaWVyRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVBdHRyaWJ1dGUgZ2V0U2VxdWVuY2VNb2RpZmllcl9DdXJyZW50U2VxdWVuY2VJbmRleCgpIHsKKwkJcmV0dXJuIChFQXR0cmlidXRlKXNlcXVlbmNlTW9kaWZpZXJFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgxKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUF0dHJpYnV0ZSBnZXRTZXF1ZW5jZU1vZGlmaWVyX05leHRWYWx1ZSgpIHsKKwkJcmV0dXJuIChFQXR0cmlidXRlKXNlcXVlbmNlTW9kaWZpZXJFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgyKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUF0dHJpYnV0ZSBnZXRTZXF1ZW5jZU1vZGlmaWVyX09yaWdpbmFsVmFsdWUoKSB7CisJCXJldHVybiAoRUF0dHJpYnV0ZSlzZXF1ZW5jZU1vZGlmaWVyRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMyk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVDbGFzcyBnZXRTdHJpbmdOT1BNb2RpZmllcigpIHsKKwkJcmV0dXJuIHN0cmluZ05PUE1vZGlmaWVyRUNsYXNzOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQ2xhc3MgZ2V0U3RyaW5nU2VxdWVuY2VNb2RpZmllcigpIHsKKwkJcmV0dXJuIHN0cmluZ1NlcXVlbmNlTW9kaWZpZXJFQ2xhc3M7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVBdHRyaWJ1dGUgZ2V0U3RyaW5nU2VxdWVuY2VNb2RpZmllcl9TZXF1ZW5jZSgpIHsKKwkJcmV0dXJuIChFQXR0cmlidXRlKXN0cmluZ1NlcXVlbmNlTW9kaWZpZXJFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgwKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUNsYXNzIGdldE1vZGlmaWFibGUoKSB7CisJCXJldHVybiBtb2RpZmlhYmxlRUNsYXNzOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQ2xhc3MgZ2V0U2luZ2xlVmFsdWVNb2RpZmllcigpIHsKKwkJcmV0dXJuIHNpbmdsZVZhbHVlTW9kaWZpZXJFQ2xhc3M7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVDbGFzcyBnZXREb3VibGVNb2RpZmllcigpIHsKKwkJcmV0dXJuIGRvdWJsZU1vZGlmaWVyRUNsYXNzOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQXR0cmlidXRlIGdldERvdWJsZU1vZGlmaWVyX1ZhbHVlKCkgeworCQlyZXR1cm4gKEVBdHRyaWJ1dGUpZG91YmxlTW9kaWZpZXJFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgwKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUF0dHJpYnV0ZSBnZXREb3VibGVNb2RpZmllcl9PcmlnaW5hbFZhbHVlKCkgeworCQlyZXR1cm4gKEVBdHRyaWJ1dGUpZG91YmxlTW9kaWZpZXJFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgxKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUNsYXNzIGdldEludGVnZXJNb2RpZmllcigpIHsKKwkJcmV0dXJuIGludGVnZXJNb2RpZmllckVDbGFzczsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUF0dHJpYnV0ZSBnZXRJbnRlZ2VyTW9kaWZpZXJfVmFsdWUoKSB7CisJCXJldHVybiAoRUF0dHJpYnV0ZSlpbnRlZ2VyTW9kaWZpZXJFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgwKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUF0dHJpYnV0ZSBnZXRJbnRlZ2VyTW9kaWZpZXJfT3JpZ2luYWxWYWx1ZSgpIHsKKwkJcmV0dXJuIChFQXR0cmlidXRlKWludGVnZXJNb2RpZmllckVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDEpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQ2xhc3MgZ2V0TG9uZ01vZGlmaWVyKCkgeworCQlyZXR1cm4gbG9uZ01vZGlmaWVyRUNsYXNzOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQXR0cmlidXRlIGdldExvbmdNb2RpZmllcl9WYWx1ZSgpIHsKKwkJcmV0dXJuIChFQXR0cmlidXRlKWxvbmdNb2RpZmllckVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDApOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQXR0cmlidXRlIGdldExvbmdNb2RpZmllcl9PcmlnaW5hbFZhbHVlKCkgeworCQlyZXR1cm4gKEVBdHRyaWJ1dGUpbG9uZ01vZGlmaWVyRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVDbGFzcyBnZXRTVEVNVGltZU1vZGlmaWVyKCkgeworCQlyZXR1cm4gc3RlbVRpbWVNb2RpZmllckVDbGFzczsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRVJlZmVyZW5jZSBnZXRTVEVNVGltZU1vZGlmaWVyX1ZhbHVlKCkgeworCQlyZXR1cm4gKEVSZWZlcmVuY2Upc3RlbVRpbWVNb2RpZmllckVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDApOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFUmVmZXJlbmNlIGdldFNURU1UaW1lTW9kaWZpZXJfT3JpZ2luYWxWYWx1ZSgpIHsKKwkJcmV0dXJuIChFUmVmZXJlbmNlKXN0ZW1UaW1lTW9kaWZpZXJFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgxKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgTW9kaWZpZXJGYWN0b3J5IGdldE1vZGlmaWVyRmFjdG9yeSgpIHsKKwkJcmV0dXJuIChNb2RpZmllckZhY3RvcnkpZ2V0RUZhY3RvcnlJbnN0YW5jZSgpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByaXZhdGUgYm9vbGVhbiBpc0NyZWF0ZWQgPSBmYWxzZTsKKworCS8qKgorCSAqIENyZWF0ZXMgdGhlIG1ldGEtbW9kZWwgb2JqZWN0cyBmb3IgdGhlIHBhY2thZ2UuICBUaGlzIG1ldGhvZCBpcworCSAqIGd1YXJkZWQgdG8gaGF2ZSBubyBhZmZlY3Qgb24gYW55IGludm9jYXRpb24gYnV0IGl0cyBmaXJzdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBjcmVhdGVQYWNrYWdlQ29udGVudHMoKSB7CisJCWlmIChpc0NyZWF0ZWQpIHJldHVybjsKKwkJaXNDcmVhdGVkID0gdHJ1ZTsKKworCQkvLyBDcmVhdGUgY2xhc3NlcyBhbmQgdGhlaXIgZmVhdHVyZXMKKwkJZG91YmxlTk9QTW9kaWZpZXJFQ2xhc3MgPSBjcmVhdGVFQ2xhc3MoRE9VQkxFX05PUF9NT0RJRklFUik7CisKKwkJZG91YmxlUmFuZ2VNb2RpZmllckVDbGFzcyA9IGNyZWF0ZUVDbGFzcyhET1VCTEVfUkFOR0VfTU9ESUZJRVIpOworCQljcmVhdGVFQXR0cmlidXRlKGRvdWJsZVJhbmdlTW9kaWZpZXJFQ2xhc3MsIERPVUJMRV9SQU5HRV9NT0RJRklFUl9fU1RBUlRfVkFMVUUpOworCQljcmVhdGVFQXR0cmlidXRlKGRvdWJsZVJhbmdlTW9kaWZpZXJFQ2xhc3MsIERPVUJMRV9SQU5HRV9NT0RJRklFUl9fRU5EX1ZBTFVFKTsKKwkJY3JlYXRlRUF0dHJpYnV0ZShkb3VibGVSYW5nZU1vZGlmaWVyRUNsYXNzLCBET1VCTEVfUkFOR0VfTU9ESUZJRVJfX0lOQ1JFTUVOVCk7CisJCWNyZWF0ZUVBdHRyaWJ1dGUoZG91YmxlUmFuZ2VNb2RpZmllckVDbGFzcywgRE9VQkxFX1JBTkdFX01PRElGSUVSX19ORVhUX1ZBTFVFKTsKKwkJY3JlYXRlRUF0dHJpYnV0ZShkb3VibGVSYW5nZU1vZGlmaWVyRUNsYXNzLCBET1VCTEVfUkFOR0VfTU9ESUZJRVJfX09SSUdJTkFMX1ZBTFVFKTsKKworCQlkb3VibGVTZXF1ZW5jZU1vZGlmaWVyRUNsYXNzID0gY3JlYXRlRUNsYXNzKERPVUJMRV9TRVFVRU5DRV9NT0RJRklFUik7CisJCWNyZWF0ZUVBdHRyaWJ1dGUoZG91YmxlU2VxdWVuY2VNb2RpZmllckVDbGFzcywgRE9VQkxFX1NFUVVFTkNFX01PRElGSUVSX19TRVFVRU5DRSk7CisKKwkJZmVhdHVyZU1vZGlmaWVyRUNsYXNzID0gY3JlYXRlRUNsYXNzKEZFQVRVUkVfTU9ESUZJRVIpOworCQljcmVhdGVFUmVmZXJlbmNlKGZlYXR1cmVNb2RpZmllckVDbGFzcywgRkVBVFVSRV9NT0RJRklFUl9fVEFSR0VUKTsKKwkJY3JlYXRlRVJlZmVyZW5jZShmZWF0dXJlTW9kaWZpZXJFQ2xhc3MsIEZFQVRVUkVfTU9ESUZJRVJfX0VTVFJVQ1RVUkFMX0ZFQVRVUkUpOworCQljcmVhdGVFQXR0cmlidXRlKGZlYXR1cmVNb2RpZmllckVDbGFzcywgRkVBVFVSRV9NT0RJRklFUl9fRkVBVFVSRV9OQU1FKTsKKwkJY3JlYXRlRUF0dHJpYnV0ZShmZWF0dXJlTW9kaWZpZXJFQ2xhc3MsIEZFQVRVUkVfTU9ESUZJRVJfX0ZFQVRVUkVfSUQpOworCQljcmVhdGVFQXR0cmlidXRlKGZlYXR1cmVNb2RpZmllckVDbGFzcywgRkVBVFVSRV9NT0RJRklFUl9fQ1VSUkVOVF9WQUxVRV9URVhUKTsKKwkJY3JlYXRlRUF0dHJpYnV0ZShmZWF0dXJlTW9kaWZpZXJFQ2xhc3MsIEZFQVRVUkVfTU9ESUZJRVJfX0NPTVBMRVRFKTsKKworCQlpbnRlZ2VyTk9QTW9kaWZpZXJFQ2xhc3MgPSBjcmVhdGVFQ2xhc3MoSU5URUdFUl9OT1BfTU9ESUZJRVIpOworCisJCWludGVnZXJSYW5nZU1vZGlmaWVyRUNsYXNzID0gY3JlYXRlRUNsYXNzKElOVEVHRVJfUkFOR0VfTU9ESUZJRVIpOworCQljcmVhdGVFQXR0cmlidXRlKGludGVnZXJSYW5nZU1vZGlmaWVyRUNsYXNzLCBJTlRFR0VSX1JBTkdFX01PRElGSUVSX19TVEFSVF9WQUxVRSk7CisJCWNyZWF0ZUVBdHRyaWJ1dGUoaW50ZWdlclJhbmdlTW9kaWZpZXJFQ2xhc3MsIElOVEVHRVJfUkFOR0VfTU9ESUZJRVJfX0VORF9WQUxVRSk7CisJCWNyZWF0ZUVBdHRyaWJ1dGUoaW50ZWdlclJhbmdlTW9kaWZpZXJFQ2xhc3MsIElOVEVHRVJfUkFOR0VfTU9ESUZJRVJfX0lOQ1JFTUVOVCk7CisJCWNyZWF0ZUVBdHRyaWJ1dGUoaW50ZWdlclJhbmdlTW9kaWZpZXJFQ2xhc3MsIElOVEVHRVJfUkFOR0VfTU9ESUZJRVJfX05FWFRfVkFMVUUpOworCQljcmVhdGVFQXR0cmlidXRlKGludGVnZXJSYW5nZU1vZGlmaWVyRUNsYXNzLCBJTlRFR0VSX1JBTkdFX01PRElGSUVSX19PUklHSU5BTF9WQUxVRSk7CisKKwkJaW50ZWdlclNlcXVlbmNlTW9kaWZpZXJFQ2xhc3MgPSBjcmVhdGVFQ2xhc3MoSU5URUdFUl9TRVFVRU5DRV9NT0RJRklFUik7CisJCWNyZWF0ZUVBdHRyaWJ1dGUoaW50ZWdlclNlcXVlbmNlTW9kaWZpZXJFQ2xhc3MsIElOVEVHRVJfU0VRVUVOQ0VfTU9ESUZJRVJfX1NFUVVFTkNFKTsKKworCQlsb25nTk9QTW9kaWZpZXJFQ2xhc3MgPSBjcmVhdGVFQ2xhc3MoTE9OR19OT1BfTU9ESUZJRVIpOworCisJCWxvbmdSYW5nZU1vZGlmaWVyRUNsYXNzID0gY3JlYXRlRUNsYXNzKExPTkdfUkFOR0VfTU9ESUZJRVIpOworCQljcmVhdGVFQXR0cmlidXRlKGxvbmdSYW5nZU1vZGlmaWVyRUNsYXNzLCBMT05HX1JBTkdFX01PRElGSUVSX19TVEFSVF9WQUxVRSk7CisJCWNyZWF0ZUVBdHRyaWJ1dGUobG9uZ1JhbmdlTW9kaWZpZXJFQ2xhc3MsIExPTkdfUkFOR0VfTU9ESUZJRVJfX0VORF9WQUxVRSk7CisJCWNyZWF0ZUVBdHRyaWJ1dGUobG9uZ1JhbmdlTW9kaWZpZXJFQ2xhc3MsIExPTkdfUkFOR0VfTU9ESUZJRVJfX0lOQ1JFTUVOVCk7CisJCWNyZWF0ZUVBdHRyaWJ1dGUobG9uZ1JhbmdlTW9kaWZpZXJFQ2xhc3MsIExPTkdfUkFOR0VfTU9ESUZJRVJfX05FWFRfVkFMVUUpOworCQljcmVhdGVFQXR0cmlidXRlKGxvbmdSYW5nZU1vZGlmaWVyRUNsYXNzLCBMT05HX1JBTkdFX01PRElGSUVSX19PUklHSU5BTF9WQUxVRSk7CisKKwkJbG9uZ1NlcXVlbmNlTW9kaWZpZXJFQ2xhc3MgPSBjcmVhdGVFQ2xhc3MoTE9OR19TRVFVRU5DRV9NT0RJRklFUik7CisJCWNyZWF0ZUVBdHRyaWJ1dGUobG9uZ1NlcXVlbmNlTW9kaWZpZXJFQ2xhc3MsIExPTkdfU0VRVUVOQ0VfTU9ESUZJRVJfX1NFUVVFTkNFKTsKKworCQltb2RpZmllckVDbGFzcyA9IGNyZWF0ZUVDbGFzcyhNT0RJRklFUik7CisJCWNyZWF0ZUVBdHRyaWJ1dGUobW9kaWZpZXJFQ2xhc3MsIE1PRElGSUVSX19UQVJHRVRfVVJJKTsKKwkJY3JlYXRlRVJlZmVyZW5jZShtb2RpZmllckVDbGFzcywgTU9ESUZJRVJfX0ZFQVRVUkVfTU9ESUZJRVJTKTsKKwkJY3JlYXRlRUF0dHJpYnV0ZShtb2RpZmllckVDbGFzcywgTU9ESUZJRVJfX0NPTVBMRVRFKTsKKworCQlub3BNb2RpZmllckVDbGFzcyA9IGNyZWF0ZUVDbGFzcyhOT1BfTU9ESUZJRVIpOworCisJCXJhbmdlTW9kaWZpZXJFQ2xhc3MgPSBjcmVhdGVFQ2xhc3MoUkFOR0VfTU9ESUZJRVIpOworCisJCXN0ZW1UaW1lTk9QTW9kaWZpZXJFQ2xhc3MgPSBjcmVhdGVFQ2xhc3MoU1RFTV9USU1FX05PUF9NT0RJRklFUik7CisKKwkJc3RlbVRpbWVSYW5nZU1vZGlmaWVyRUNsYXNzID0gY3JlYXRlRUNsYXNzKFNURU1fVElNRV9SQU5HRV9NT0RJRklFUik7CisJCWNyZWF0ZUVSZWZlcmVuY2Uoc3RlbVRpbWVSYW5nZU1vZGlmaWVyRUNsYXNzLCBTVEVNX1RJTUVfUkFOR0VfTU9ESUZJRVJfX1NUQVJUX1ZBTFVFKTsKKwkJY3JlYXRlRVJlZmVyZW5jZShzdGVtVGltZVJhbmdlTW9kaWZpZXJFQ2xhc3MsIFNURU1fVElNRV9SQU5HRV9NT0RJRklFUl9fRU5EX1ZBTFVFKTsKKwkJY3JlYXRlRUF0dHJpYnV0ZShzdGVtVGltZVJhbmdlTW9kaWZpZXJFQ2xhc3MsIFNURU1fVElNRV9SQU5HRV9NT0RJRklFUl9fSU5DUkVNRU5UKTsKKwkJY3JlYXRlRVJlZmVyZW5jZShzdGVtVGltZVJhbmdlTW9kaWZpZXJFQ2xhc3MsIFNURU1fVElNRV9SQU5HRV9NT0RJRklFUl9fTkVYVF9WQUxVRSk7CisJCWNyZWF0ZUVSZWZlcmVuY2Uoc3RlbVRpbWVSYW5nZU1vZGlmaWVyRUNsYXNzLCBTVEVNX1RJTUVfUkFOR0VfTU9ESUZJRVJfX09SSUdJTkFMX1ZBTFVFKTsKKworCQlzdGVtVGltZVNlcXVlbmNlTW9kaWZpZXJFQ2xhc3MgPSBjcmVhdGVFQ2xhc3MoU1RFTV9USU1FX1NFUVVFTkNFX01PRElGSUVSKTsKKwkJY3JlYXRlRVJlZmVyZW5jZShzdGVtVGltZVNlcXVlbmNlTW9kaWZpZXJFQ2xhc3MsIFNURU1fVElNRV9TRVFVRU5DRV9NT0RJRklFUl9fU0VRVUVOQ0UpOworCisJCXNlcXVlbmNlTW9kaWZpZXJFQ2xhc3MgPSBjcmVhdGVFQ2xhc3MoU0VRVUVOQ0VfTU9ESUZJRVIpOworCQljcmVhdGVFQXR0cmlidXRlKHNlcXVlbmNlTW9kaWZpZXJFQ2xhc3MsIFNFUVVFTkNFX01PRElGSUVSX19TRVFVRU5DRV9TSVpFKTsKKwkJY3JlYXRlRUF0dHJpYnV0ZShzZXF1ZW5jZU1vZGlmaWVyRUNsYXNzLCBTRVFVRU5DRV9NT0RJRklFUl9fQ1VSUkVOVF9TRVFVRU5DRV9JTkRFWCk7CisJCWNyZWF0ZUVBdHRyaWJ1dGUoc2VxdWVuY2VNb2RpZmllckVDbGFzcywgU0VRVUVOQ0VfTU9ESUZJRVJfX05FWFRfVkFMVUUpOworCQljcmVhdGVFQXR0cmlidXRlKHNlcXVlbmNlTW9kaWZpZXJFQ2xhc3MsIFNFUVVFTkNFX01PRElGSUVSX19PUklHSU5BTF9WQUxVRSk7CisKKwkJc3RyaW5nTk9QTW9kaWZpZXJFQ2xhc3MgPSBjcmVhdGVFQ2xhc3MoU1RSSU5HX05PUF9NT0RJRklFUik7CisKKwkJc3RyaW5nU2VxdWVuY2VNb2RpZmllckVDbGFzcyA9IGNyZWF0ZUVDbGFzcyhTVFJJTkdfU0VRVUVOQ0VfTU9ESUZJRVIpOworCQljcmVhdGVFQXR0cmlidXRlKHN0cmluZ1NlcXVlbmNlTW9kaWZpZXJFQ2xhc3MsIFNUUklOR19TRVFVRU5DRV9NT0RJRklFUl9fU0VRVUVOQ0UpOworCisJCW1vZGlmaWFibGVFQ2xhc3MgPSBjcmVhdGVFQ2xhc3MoTU9ESUZJQUJMRSk7CisKKwkJc2luZ2xlVmFsdWVNb2RpZmllckVDbGFzcyA9IGNyZWF0ZUVDbGFzcyhTSU5HTEVfVkFMVUVfTU9ESUZJRVIpOworCisJCWRvdWJsZU1vZGlmaWVyRUNsYXNzID0gY3JlYXRlRUNsYXNzKERPVUJMRV9NT0RJRklFUik7CisJCWNyZWF0ZUVBdHRyaWJ1dGUoZG91YmxlTW9kaWZpZXJFQ2xhc3MsIERPVUJMRV9NT0RJRklFUl9fVkFMVUUpOworCQljcmVhdGVFQXR0cmlidXRlKGRvdWJsZU1vZGlmaWVyRUNsYXNzLCBET1VCTEVfTU9ESUZJRVJfX09SSUdJTkFMX1ZBTFVFKTsKKworCQlpbnRlZ2VyTW9kaWZpZXJFQ2xhc3MgPSBjcmVhdGVFQ2xhc3MoSU5URUdFUl9NT0RJRklFUik7CisJCWNyZWF0ZUVBdHRyaWJ1dGUoaW50ZWdlck1vZGlmaWVyRUNsYXNzLCBJTlRFR0VSX01PRElGSUVSX19WQUxVRSk7CisJCWNyZWF0ZUVBdHRyaWJ1dGUoaW50ZWdlck1vZGlmaWVyRUNsYXNzLCBJTlRFR0VSX01PRElGSUVSX19PUklHSU5BTF9WQUxVRSk7CisKKwkJbG9uZ01vZGlmaWVyRUNsYXNzID0gY3JlYXRlRUNsYXNzKExPTkdfTU9ESUZJRVIpOworCQljcmVhdGVFQXR0cmlidXRlKGxvbmdNb2RpZmllckVDbGFzcywgTE9OR19NT0RJRklFUl9fVkFMVUUpOworCQljcmVhdGVFQXR0cmlidXRlKGxvbmdNb2RpZmllckVDbGFzcywgTE9OR19NT0RJRklFUl9fT1JJR0lOQUxfVkFMVUUpOworCisJCXN0ZW1UaW1lTW9kaWZpZXJFQ2xhc3MgPSBjcmVhdGVFQ2xhc3MoU1RFTV9USU1FX01PRElGSUVSKTsKKwkJY3JlYXRlRVJlZmVyZW5jZShzdGVtVGltZU1vZGlmaWVyRUNsYXNzLCBTVEVNX1RJTUVfTU9ESUZJRVJfX1ZBTFVFKTsKKwkJY3JlYXRlRVJlZmVyZW5jZShzdGVtVGltZU1vZGlmaWVyRUNsYXNzLCBTVEVNX1RJTUVfTU9ESUZJRVJfX09SSUdJTkFMX1ZBTFVFKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcml2YXRlIGJvb2xlYW4gaXNJbml0aWFsaXplZCA9IGZhbHNlOworCisJLyoqCisJICogQ29tcGxldGUgdGhlIGluaXRpYWxpemF0aW9uIG9mIHRoZSBwYWNrYWdlIGFuZCBpdHMgbWV0YS1tb2RlbC4gIFRoaXMKKwkgKiBtZXRob2QgaXMgZ3VhcmRlZCB0byBoYXZlIG5vIGFmZmVjdCBvbiBhbnkgaW52b2NhdGlvbiBidXQgaXRzIGZpcnN0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIGluaXRpYWxpemVQYWNrYWdlQ29udGVudHMoKSB7CisJCWlmIChpc0luaXRpYWxpemVkKSByZXR1cm47CisJCWlzSW5pdGlhbGl6ZWQgPSB0cnVlOworCisJCS8vIEluaXRpYWxpemUgcGFja2FnZQorCQlzZXROYW1lKGVOQU1FKTsKKwkJc2V0TnNQcmVmaXgoZU5TX1BSRUZJWCk7CisJCXNldE5zVVJJKGVOU19VUkkpOworCisJCS8vIE9idGFpbiBvdGhlciBkZXBlbmRlbnQgcGFja2FnZXMKKwkJRWNvcmVQYWNrYWdlIHRoZUVjb3JlUGFja2FnZSA9IChFY29yZVBhY2thZ2UpRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RVBhY2thZ2UoRWNvcmVQYWNrYWdlLmVOU19VUkkpOworCQlNb2RlbFBhY2thZ2UgdGhlTW9kZWxQYWNrYWdlID0gKE1vZGVsUGFja2FnZSlFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShNb2RlbFBhY2thZ2UuZU5TX1VSSSk7CisJCUNvbW1vblBhY2thZ2UgdGhlQ29tbW9uUGFja2FnZSA9IChDb21tb25QYWNrYWdlKUVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVQYWNrYWdlKENvbW1vblBhY2thZ2UuZU5TX1VSSSk7CisJCVNjZW5hcmlvUGFja2FnZSB0aGVTY2VuYXJpb1BhY2thZ2UgPSAoU2NlbmFyaW9QYWNrYWdlKUVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVQYWNrYWdlKFNjZW5hcmlvUGFja2FnZS5lTlNfVVJJKTsKKworCQkvLyBDcmVhdGUgdHlwZSBwYXJhbWV0ZXJzCisKKwkJLy8gU2V0IGJvdW5kcyBmb3IgdHlwZSBwYXJhbWV0ZXJzCisKKwkJLy8gQWRkIHN1cGVydHlwZXMgdG8gY2xhc3NlcworCQlkb3VibGVOT1BNb2RpZmllckVDbGFzcy5nZXRFU3VwZXJUeXBlcygpLmFkZCh0aGlzLmdldE5PUE1vZGlmaWVyKCkpOworCQlkb3VibGVSYW5nZU1vZGlmaWVyRUNsYXNzLmdldEVTdXBlclR5cGVzKCkuYWRkKHRoaXMuZ2V0UmFuZ2VNb2RpZmllcigpKTsKKwkJZG91YmxlU2VxdWVuY2VNb2RpZmllckVDbGFzcy5nZXRFU3VwZXJUeXBlcygpLmFkZCh0aGlzLmdldFNlcXVlbmNlTW9kaWZpZXIoKSk7CisJCWludGVnZXJOT1BNb2RpZmllckVDbGFzcy5nZXRFU3VwZXJUeXBlcygpLmFkZCh0aGlzLmdldE5PUE1vZGlmaWVyKCkpOworCQlpbnRlZ2VyUmFuZ2VNb2RpZmllckVDbGFzcy5nZXRFU3VwZXJUeXBlcygpLmFkZCh0aGlzLmdldFJhbmdlTW9kaWZpZXIoKSk7CisJCWludGVnZXJTZXF1ZW5jZU1vZGlmaWVyRUNsYXNzLmdldEVTdXBlclR5cGVzKCkuYWRkKHRoaXMuZ2V0U2VxdWVuY2VNb2RpZmllcigpKTsKKwkJbG9uZ05PUE1vZGlmaWVyRUNsYXNzLmdldEVTdXBlclR5cGVzKCkuYWRkKHRoaXMuZ2V0Tk9QTW9kaWZpZXIoKSk7CisJCWxvbmdSYW5nZU1vZGlmaWVyRUNsYXNzLmdldEVTdXBlclR5cGVzKCkuYWRkKHRoaXMuZ2V0UmFuZ2VNb2RpZmllcigpKTsKKwkJbG9uZ1NlcXVlbmNlTW9kaWZpZXJFQ2xhc3MuZ2V0RVN1cGVyVHlwZXMoKS5hZGQodGhpcy5nZXRTZXF1ZW5jZU1vZGlmaWVyKCkpOworCQltb2RpZmllckVDbGFzcy5nZXRFU3VwZXJUeXBlcygpLmFkZCh0aGVNb2RlbFBhY2thZ2UuZ2V0RGVjb3JhdG9yKCkpOworCQlub3BNb2RpZmllckVDbGFzcy5nZXRFU3VwZXJUeXBlcygpLmFkZCh0aGlzLmdldEZlYXR1cmVNb2RpZmllcigpKTsKKwkJcmFuZ2VNb2RpZmllckVDbGFzcy5nZXRFU3VwZXJUeXBlcygpLmFkZCh0aGlzLmdldEZlYXR1cmVNb2RpZmllcigpKTsKKwkJc3RlbVRpbWVOT1BNb2RpZmllckVDbGFzcy5nZXRFU3VwZXJUeXBlcygpLmFkZCh0aGlzLmdldE5PUE1vZGlmaWVyKCkpOworCQlzdGVtVGltZVJhbmdlTW9kaWZpZXJFQ2xhc3MuZ2V0RVN1cGVyVHlwZXMoKS5hZGQodGhpcy5nZXRSYW5nZU1vZGlmaWVyKCkpOworCQlzdGVtVGltZVNlcXVlbmNlTW9kaWZpZXJFQ2xhc3MuZ2V0RVN1cGVyVHlwZXMoKS5hZGQodGhpcy5nZXRTZXF1ZW5jZU1vZGlmaWVyKCkpOworCQlzZXF1ZW5jZU1vZGlmaWVyRUNsYXNzLmdldEVTdXBlclR5cGVzKCkuYWRkKHRoaXMuZ2V0RmVhdHVyZU1vZGlmaWVyKCkpOworCQlzdHJpbmdOT1BNb2RpZmllckVDbGFzcy5nZXRFU3VwZXJUeXBlcygpLmFkZCh0aGlzLmdldE5PUE1vZGlmaWVyKCkpOworCQlzdHJpbmdTZXF1ZW5jZU1vZGlmaWVyRUNsYXNzLmdldEVTdXBlclR5cGVzKCkuYWRkKHRoaXMuZ2V0U2VxdWVuY2VNb2RpZmllcigpKTsKKwkJc2luZ2xlVmFsdWVNb2RpZmllckVDbGFzcy5nZXRFU3VwZXJUeXBlcygpLmFkZCh0aGlzLmdldEZlYXR1cmVNb2RpZmllcigpKTsKKwkJZG91YmxlTW9kaWZpZXJFQ2xhc3MuZ2V0RVN1cGVyVHlwZXMoKS5hZGQodGhpcy5nZXRTaW5nbGVWYWx1ZU1vZGlmaWVyKCkpOworCQlpbnRlZ2VyTW9kaWZpZXJFQ2xhc3MuZ2V0RVN1cGVyVHlwZXMoKS5hZGQodGhpcy5nZXRTaW5nbGVWYWx1ZU1vZGlmaWVyKCkpOworCQlsb25nTW9kaWZpZXJFQ2xhc3MuZ2V0RVN1cGVyVHlwZXMoKS5hZGQodGhpcy5nZXRTaW5nbGVWYWx1ZU1vZGlmaWVyKCkpOworCQlzdGVtVGltZU1vZGlmaWVyRUNsYXNzLmdldEVTdXBlclR5cGVzKCkuYWRkKHRoaXMuZ2V0U2luZ2xlVmFsdWVNb2RpZmllcigpKTsKKworCQkvLyBJbml0aWFsaXplIGNsYXNzZXMgYW5kIGZlYXR1cmVzOyBhZGQgb3BlcmF0aW9ucyBhbmQgcGFyYW1ldGVycworCQlpbml0RUNsYXNzKGRvdWJsZU5PUE1vZGlmaWVyRUNsYXNzLCBEb3VibGVOT1BNb2RpZmllci5jbGFzcywgIkRvdWJsZU5PUE1vZGlmaWVyIiwgIUlTX0FCU1RSQUNULCAhSVNfSU5URVJGQUNFLCBJU19HRU5FUkFURURfSU5TVEFOQ0VfQ0xBU1MpOyAvLyROT04tTkxTLTEkCisKKwkJaW5pdEVDbGFzcyhkb3VibGVSYW5nZU1vZGlmaWVyRUNsYXNzLCBEb3VibGVSYW5nZU1vZGlmaWVyLmNsYXNzLCAiRG91YmxlUmFuZ2VNb2RpZmllciIsICFJU19BQlNUUkFDVCwgIUlTX0lOVEVSRkFDRSwgSVNfR0VORVJBVEVEX0lOU1RBTkNFX0NMQVNTKTsgLy8kTk9OLU5MUy0xJAorCQlpbml0RUF0dHJpYnV0ZShnZXREb3VibGVSYW5nZU1vZGlmaWVyX1N0YXJ0VmFsdWUoKSwgZWNvcmVQYWNrYWdlLmdldEVEb3VibGUoKSwgInN0YXJ0VmFsdWUiLCAiLTk5OTk5OTk5LjAiLCAwLCAxLCBEb3VibGVSYW5nZU1vZGlmaWVyLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKKwkJaW5pdEVBdHRyaWJ1dGUoZ2V0RG91YmxlUmFuZ2VNb2RpZmllcl9FbmRWYWx1ZSgpLCBlY29yZVBhY2thZ2UuZ2V0RURvdWJsZSgpLCAiZW5kVmFsdWUiLCAiLTk5OTk5OTk5LjAiLCAwLCAxLCBEb3VibGVSYW5nZU1vZGlmaWVyLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKKwkJaW5pdEVBdHRyaWJ1dGUoZ2V0RG91YmxlUmFuZ2VNb2RpZmllcl9JbmNyZW1lbnQoKSwgZWNvcmVQYWNrYWdlLmdldEVEb3VibGUoKSwgImluY3JlbWVudCIsICItOTk5OTk5OTkuMCIsIDAsIDEsIERvdWJsZVJhbmdlTW9kaWZpZXIuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAorCQlpbml0RUF0dHJpYnV0ZShnZXREb3VibGVSYW5nZU1vZGlmaWVyX05leHRWYWx1ZSgpLCBlY29yZVBhY2thZ2UuZ2V0RURvdWJsZSgpLCAibmV4dFZhbHVlIiwgIjAuMCIsIDAsIDEsIERvdWJsZVJhbmdlTW9kaWZpZXIuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAorCQlpbml0RUF0dHJpYnV0ZShnZXREb3VibGVSYW5nZU1vZGlmaWVyX09yaWdpbmFsVmFsdWUoKSwgZWNvcmVQYWNrYWdlLmdldEVEb3VibGUoKSwgIm9yaWdpbmFsVmFsdWUiLCBudWxsLCAwLCAxLCBEb3VibGVSYW5nZU1vZGlmaWVyLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOyAvLyROT04tTkxTLTEkCisKKwkJaW5pdEVDbGFzcyhkb3VibGVTZXF1ZW5jZU1vZGlmaWVyRUNsYXNzLCBEb3VibGVTZXF1ZW5jZU1vZGlmaWVyLmNsYXNzLCAiRG91YmxlU2VxdWVuY2VNb2RpZmllciIsICFJU19BQlNUUkFDVCwgIUlTX0lOVEVSRkFDRSwgSVNfR0VORVJBVEVEX0lOU1RBTkNFX0NMQVNTKTsgLy8kTk9OLU5MUy0xJAorCQlpbml0RUF0dHJpYnV0ZShnZXREb3VibGVTZXF1ZW5jZU1vZGlmaWVyX1NlcXVlbmNlKCksIGVjb3JlUGFja2FnZS5nZXRFRG91YmxlT2JqZWN0KCksICJzZXF1ZW5jZSIsIG51bGwsIDAsIC0xLCBEb3VibGVTZXF1ZW5jZU1vZGlmaWVyLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOyAvLyROT04tTkxTLTEkCisKKwkJaW5pdEVDbGFzcyhmZWF0dXJlTW9kaWZpZXJFQ2xhc3MsIEZlYXR1cmVNb2RpZmllci5jbGFzcywgIkZlYXR1cmVNb2RpZmllciIsIElTX0FCU1RSQUNULCAhSVNfSU5URVJGQUNFLCBJU19HRU5FUkFURURfSU5TVEFOQ0VfQ0xBU1MpOyAvLyROT04tTkxTLTEkCisJCWluaXRFUmVmZXJlbmNlKGdldEZlYXR1cmVNb2RpZmllcl9UYXJnZXQoKSwgdGhlRWNvcmVQYWNrYWdlLmdldEVPYmplY3QoKSwgbnVsbCwgInRhcmdldCIsIG51bGwsIDAsIDEsIEZlYXR1cmVNb2RpZmllci5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfQ09NUE9TSVRFLCBJU19SRVNPTFZFX1BST1hJRVMsICFJU19VTlNFVFRBQkxFLCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsgLy8kTk9OLU5MUy0xJAorCQlpbml0RVJlZmVyZW5jZShnZXRGZWF0dXJlTW9kaWZpZXJfRVN0cnVjdHVyYWxGZWF0dXJlKCksIHRoZUVjb3JlUGFja2FnZS5nZXRFU3RydWN0dXJhbEZlYXR1cmUoKSwgbnVsbCwgImVTdHJ1Y3R1cmFsRmVhdHVyZSIsIG51bGwsIDAsIDEsIEZlYXR1cmVNb2RpZmllci5jbGFzcywgSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19DT01QT1NJVEUsICFJU19SRVNPTFZFX1BST1hJRVMsICFJU19VTlNFVFRBQkxFLCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsgLy8kTk9OLU5MUy0xJAorCQlpbml0RUF0dHJpYnV0ZShnZXRGZWF0dXJlTW9kaWZpZXJfRmVhdHVyZU5hbWUoKSwgZWNvcmVQYWNrYWdlLmdldEVTdHJpbmcoKSwgImZlYXR1cmVOYW1lIiwgbnVsbCwgMCwgMSwgRmVhdHVyZU1vZGlmaWVyLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOyAvLyROT04tTkxTLTEkCisJCWluaXRFQXR0cmlidXRlKGdldEZlYXR1cmVNb2RpZmllcl9GZWF0dXJlSWQoKSwgZWNvcmVQYWNrYWdlLmdldEVJbnQoKSwgImZlYXR1cmVJZCIsIG51bGwsIDAsIDEsIEZlYXR1cmVNb2RpZmllci5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsgLy8kTk9OLU5MUy0xJAorCQlpbml0RUF0dHJpYnV0ZShnZXRGZWF0dXJlTW9kaWZpZXJfQ3VycmVudFZhbHVlVGV4dCgpLCBlY29yZVBhY2thZ2UuZ2V0RVN0cmluZygpLCAiY3VycmVudFZhbHVlVGV4dCIsIG51bGwsIDAsIDEsIEZlYXR1cmVNb2RpZmllci5jbGFzcywgSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsICFJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsgLy8kTk9OLU5MUy0xJAorCQlpbml0RUF0dHJpYnV0ZShnZXRGZWF0dXJlTW9kaWZpZXJfQ29tcGxldGUoKSwgZWNvcmVQYWNrYWdlLmdldEVCb29sZWFuKCksICJjb21wbGV0ZSIsIG51bGwsIDAsIDEsIEZlYXR1cmVNb2RpZmllci5jbGFzcywgSVNfVFJBTlNJRU5ULCBJU19WT0xBVElMRSwgIUlTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOyAvLyROT04tTkxTLTEkCisKKwkJYWRkRU9wZXJhdGlvbihmZWF0dXJlTW9kaWZpZXJFQ2xhc3MsIG51bGwsICJ1cGRhdGVGZWF0dXJlIiwgMCwgMSwgSVNfVU5JUVVFLCBJU19PUkRFUkVEKTsgLy8kTk9OLU5MUy0xJAorCisJCWFkZEVPcGVyYXRpb24oZmVhdHVyZU1vZGlmaWVyRUNsYXNzLCBudWxsLCAicmVzZXQiLCAwLCAxLCBJU19VTklRVUUsIElTX09SREVSRUQpOyAvLyROT04tTkxTLTEkCisKKwkJaW5pdEVDbGFzcyhpbnRlZ2VyTk9QTW9kaWZpZXJFQ2xhc3MsIEludGVnZXJOT1BNb2RpZmllci5jbGFzcywgIkludGVnZXJOT1BNb2RpZmllciIsICFJU19BQlNUUkFDVCwgIUlTX0lOVEVSRkFDRSwgSVNfR0VORVJBVEVEX0lOU1RBTkNFX0NMQVNTKTsgLy8kTk9OLU5MUy0xJAorCisJCWluaXRFQ2xhc3MoaW50ZWdlclJhbmdlTW9kaWZpZXJFQ2xhc3MsIEludGVnZXJSYW5nZU1vZGlmaWVyLmNsYXNzLCAiSW50ZWdlclJhbmdlTW9kaWZpZXIiLCAhSVNfQUJTVFJBQ1QsICFJU19JTlRFUkZBQ0UsIElTX0dFTkVSQVRFRF9JTlNUQU5DRV9DTEFTUyk7IC8vJE5PTi1OTFMtMSQKKwkJaW5pdEVBdHRyaWJ1dGUoZ2V0SW50ZWdlclJhbmdlTW9kaWZpZXJfU3RhcnRWYWx1ZSgpLCBlY29yZVBhY2thZ2UuZ2V0RUludCgpLCAic3RhcnRWYWx1ZSIsICItOTk5OTk5OTkiLCAwLCAxLCBJbnRlZ2VyUmFuZ2VNb2RpZmllci5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCisJCWluaXRFQXR0cmlidXRlKGdldEludGVnZXJSYW5nZU1vZGlmaWVyX0VuZFZhbHVlKCksIGVjb3JlUGFja2FnZS5nZXRFSW50KCksICJlbmRWYWx1ZSIsICItOTk5OTk5OTkiLCAwLCAxLCBJbnRlZ2VyUmFuZ2VNb2RpZmllci5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCisJCWluaXRFQXR0cmlidXRlKGdldEludGVnZXJSYW5nZU1vZGlmaWVyX0luY3JlbWVudCgpLCBlY29yZVBhY2thZ2UuZ2V0RUludCgpLCAiaW5jcmVtZW50IiwgIi05OTk5OTk5OSIsIDAsIDEsIEludGVnZXJSYW5nZU1vZGlmaWVyLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKKwkJaW5pdEVBdHRyaWJ1dGUoZ2V0SW50ZWdlclJhbmdlTW9kaWZpZXJfTmV4dFZhbHVlKCksIGVjb3JlUGFja2FnZS5nZXRFSW50KCksICJuZXh0VmFsdWUiLCAiLTk5OTk5OTk5IiwgMCwgMSwgSW50ZWdlclJhbmdlTW9kaWZpZXIuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAorCQlpbml0RUF0dHJpYnV0ZShnZXRJbnRlZ2VyUmFuZ2VNb2RpZmllcl9PcmlnaW5hbFZhbHVlKCksIGVjb3JlUGFja2FnZS5nZXRFSW50KCksICJvcmlnaW5hbFZhbHVlIiwgbnVsbCwgMCwgMSwgSW50ZWdlclJhbmdlTW9kaWZpZXIuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7IC8vJE5PTi1OTFMtMSQKKworCQlpbml0RUNsYXNzKGludGVnZXJTZXF1ZW5jZU1vZGlmaWVyRUNsYXNzLCBJbnRlZ2VyU2VxdWVuY2VNb2RpZmllci5jbGFzcywgIkludGVnZXJTZXF1ZW5jZU1vZGlmaWVyIiwgIUlTX0FCU1RSQUNULCAhSVNfSU5URVJGQUNFLCBJU19HRU5FUkFURURfSU5TVEFOQ0VfQ0xBU1MpOyAvLyROT04tTkxTLTEkCisJCWluaXRFQXR0cmlidXRlKGdldEludGVnZXJTZXF1ZW5jZU1vZGlmaWVyX1NlcXVlbmNlKCksIGVjb3JlUGFja2FnZS5nZXRFSW50ZWdlck9iamVjdCgpLCAic2VxdWVuY2UiLCBudWxsLCAwLCAtMSwgSW50ZWdlclNlcXVlbmNlTW9kaWZpZXIuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7IC8vJE5PTi1OTFMtMSQKKworCQlpbml0RUNsYXNzKGxvbmdOT1BNb2RpZmllckVDbGFzcywgTG9uZ05PUE1vZGlmaWVyLmNsYXNzLCAiTG9uZ05PUE1vZGlmaWVyIiwgIUlTX0FCU1RSQUNULCAhSVNfSU5URVJGQUNFLCBJU19HRU5FUkFURURfSU5TVEFOQ0VfQ0xBU1MpOyAvLyROT04tTkxTLTEkCisKKwkJaW5pdEVDbGFzcyhsb25nUmFuZ2VNb2RpZmllckVDbGFzcywgTG9uZ1JhbmdlTW9kaWZpZXIuY2xhc3MsICJMb25nUmFuZ2VNb2RpZmllciIsICFJU19BQlNUUkFDVCwgIUlTX0lOVEVSRkFDRSwgSVNfR0VORVJBVEVEX0lOU1RBTkNFX0NMQVNTKTsgLy8kTk9OLU5MUy0xJAorCQlpbml0RUF0dHJpYnV0ZShnZXRMb25nUmFuZ2VNb2RpZmllcl9TdGFydFZhbHVlKCksIGVjb3JlUGFja2FnZS5nZXRFTG9uZygpLCAic3RhcnRWYWx1ZSIsICItOTk5OTk5OTkiLCAwLCAxLCBMb25nUmFuZ2VNb2RpZmllci5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCisJCWluaXRFQXR0cmlidXRlKGdldExvbmdSYW5nZU1vZGlmaWVyX0VuZFZhbHVlKCksIGVjb3JlUGFja2FnZS5nZXRFTG9uZygpLCAiZW5kVmFsdWUiLCAiLTk5OTk5OTk5IiwgMCwgMSwgTG9uZ1JhbmdlTW9kaWZpZXIuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAorCQlpbml0RUF0dHJpYnV0ZShnZXRMb25nUmFuZ2VNb2RpZmllcl9JbmNyZW1lbnQoKSwgZWNvcmVQYWNrYWdlLmdldEVMb25nKCksICJpbmNyZW1lbnQiLCAiLTk5OTk5OTk5IiwgMCwgMSwgTG9uZ1JhbmdlTW9kaWZpZXIuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAorCQlpbml0RUF0dHJpYnV0ZShnZXRMb25nUmFuZ2VNb2RpZmllcl9OZXh0VmFsdWUoKSwgZWNvcmVQYWNrYWdlLmdldEVMb25nKCksICJuZXh0VmFsdWUiLCAiLTk5OTk5OTk5IiwgMCwgMSwgTG9uZ1JhbmdlTW9kaWZpZXIuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAorCQlpbml0RUF0dHJpYnV0ZShnZXRMb25nUmFuZ2VNb2RpZmllcl9PcmlnaW5hbFZhbHVlKCksIGVjb3JlUGFja2FnZS5nZXRFTG9uZygpLCAib3JpZ2luYWxWYWx1ZSIsICItOTk5OTk5OTkiLCAwLCAxLCBMb25nUmFuZ2VNb2RpZmllci5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCisKKwkJaW5pdEVDbGFzcyhsb25nU2VxdWVuY2VNb2RpZmllckVDbGFzcywgTG9uZ1NlcXVlbmNlTW9kaWZpZXIuY2xhc3MsICJMb25nU2VxdWVuY2VNb2RpZmllciIsICFJU19BQlNUUkFDVCwgIUlTX0lOVEVSRkFDRSwgSVNfR0VORVJBVEVEX0lOU1RBTkNFX0NMQVNTKTsgLy8kTk9OLU5MUy0xJAorCQlpbml0RUF0dHJpYnV0ZShnZXRMb25nU2VxdWVuY2VNb2RpZmllcl9TZXF1ZW5jZSgpLCBlY29yZVBhY2thZ2UuZ2V0RUxvbmdPYmplY3QoKSwgInNlcXVlbmNlIiwgbnVsbCwgMCwgLTEsIExvbmdTZXF1ZW5jZU1vZGlmaWVyLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOyAvLyROT04tTkxTLTEkCisKKwkJaW5pdEVDbGFzcyhtb2RpZmllckVDbGFzcywgTW9kaWZpZXIuY2xhc3MsICJNb2RpZmllciIsICFJU19BQlNUUkFDVCwgIUlTX0lOVEVSRkFDRSwgSVNfR0VORVJBVEVEX0lOU1RBTkNFX0NMQVNTKTsgLy8kTk9OLU5MUy0xJAorCQlpbml0RUF0dHJpYnV0ZShnZXRNb2RpZmllcl9UYXJnZXRVUkkoKSwgdGhlQ29tbW9uUGFja2FnZS5nZXRVUkkoKSwgInRhcmdldFVSSSIsIG51bGwsIDAsIDEsIE1vZGlmaWVyLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOyAvLyROT04tTkxTLTEkCisJCWluaXRFUmVmZXJlbmNlKGdldE1vZGlmaWVyX0ZlYXR1cmVNb2RpZmllcnMoKSwgdGhpcy5nZXRGZWF0dXJlTW9kaWZpZXIoKSwgbnVsbCwgImZlYXR1cmVNb2RpZmllcnMiLCBudWxsLCAwLCAtMSwgTW9kaWZpZXIuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgSVNfQ09NUE9TSVRFLCAhSVNfUkVTT0xWRV9QUk9YSUVTLCAhSVNfVU5TRVRUQUJMRSwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7IC8vJE5PTi1OTFMtMSQKKwkJaW5pdEVBdHRyaWJ1dGUoZ2V0TW9kaWZpZXJfQ29tcGxldGUoKSwgZWNvcmVQYWNrYWdlLmdldEVCb29sZWFuKCksICJjb21wbGV0ZSIsIG51bGwsIDAsIDEsIE1vZGlmaWVyLmNsYXNzLCBJU19UUkFOU0lFTlQsIElTX1ZPTEFUSUxFLCAhSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7IC8vJE5PTi1OTFMtMSQKKworCQlFT3BlcmF0aW9uIG9wID0gYWRkRU9wZXJhdGlvbihtb2RpZmllckVDbGFzcywgbnVsbCwgInVwZGF0ZVNjZW5hcmlvIiwgMCwgMSwgSVNfVU5JUVVFLCBJU19PUkRFUkVEKTsgLy8kTk9OLU5MUy0xJAorCQlhZGRFUGFyYW1ldGVyKG9wLCB0aGVTY2VuYXJpb1BhY2thZ2UuZ2V0U2NlbmFyaW8oKSwgImJhc2VTY2VuYXJpbyIsIDAsIDEsIElTX1VOSVFVRSwgSVNfT1JERVJFRCk7IC8vJE5PTi1OTFMtMSQKKworCQlhZGRFT3BlcmF0aW9uKG1vZGlmaWVyRUNsYXNzLCBudWxsLCAicmVzZXQiLCAwLCAxLCBJU19VTklRVUUsIElTX09SREVSRUQpOyAvLyROT04tTkxTLTEkCisKKwkJaW5pdEVDbGFzcyhub3BNb2RpZmllckVDbGFzcywgTk9QTW9kaWZpZXIuY2xhc3MsICJOT1BNb2RpZmllciIsICFJU19BQlNUUkFDVCwgIUlTX0lOVEVSRkFDRSwgSVNfR0VORVJBVEVEX0lOU1RBTkNFX0NMQVNTKTsgLy8kTk9OLU5MUy0xJAorCisJCWluaXRFQ2xhc3MocmFuZ2VNb2RpZmllckVDbGFzcywgUmFuZ2VNb2RpZmllci5jbGFzcywgIlJhbmdlTW9kaWZpZXIiLCBJU19BQlNUUkFDVCwgIUlTX0lOVEVSRkFDRSwgSVNfR0VORVJBVEVEX0lOU1RBTkNFX0NMQVNTKTsgLy8kTk9OLU5MUy0xJAorCisJCWluaXRFQ2xhc3Moc3RlbVRpbWVOT1BNb2RpZmllckVDbGFzcywgU1RFTVRpbWVOT1BNb2RpZmllci5jbGFzcywgIlNURU1UaW1lTk9QTW9kaWZpZXIiLCAhSVNfQUJTVFJBQ1QsICFJU19JTlRFUkZBQ0UsIElTX0dFTkVSQVRFRF9JTlNUQU5DRV9DTEFTUyk7IC8vJE5PTi1OTFMtMSQKKworCQlpbml0RUNsYXNzKHN0ZW1UaW1lUmFuZ2VNb2RpZmllckVDbGFzcywgU1RFTVRpbWVSYW5nZU1vZGlmaWVyLmNsYXNzLCAiU1RFTVRpbWVSYW5nZU1vZGlmaWVyIiwgIUlTX0FCU1RSQUNULCAhSVNfSU5URVJGQUNFLCBJU19HRU5FUkFURURfSU5TVEFOQ0VfQ0xBU1MpOyAvLyROT04tTkxTLTEkCisJCWluaXRFUmVmZXJlbmNlKGdldFNURU1UaW1lUmFuZ2VNb2RpZmllcl9TdGFydFZhbHVlKCksIHRoZU1vZGVsUGFja2FnZS5nZXRTVEVNVGltZSgpLCBudWxsLCAic3RhcnRWYWx1ZSIsIG51bGwsIDAsIDEsIFNURU1UaW1lUmFuZ2VNb2RpZmllci5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfQ09NUE9TSVRFLCBJU19SRVNPTFZFX1BST1hJRVMsICFJU19VTlNFVFRBQkxFLCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsgLy8kTk9OLU5MUy0xJAorCQlpbml0RVJlZmVyZW5jZShnZXRTVEVNVGltZVJhbmdlTW9kaWZpZXJfRW5kVmFsdWUoKSwgdGhlTW9kZWxQYWNrYWdlLmdldFNURU1UaW1lKCksIG51bGwsICJlbmRWYWx1ZSIsIG51bGwsIDAsIDEsIFNURU1UaW1lUmFuZ2VNb2RpZmllci5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfQ09NUE9TSVRFLCBJU19SRVNPTFZFX1BST1hJRVMsICFJU19VTlNFVFRBQkxFLCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsgLy8kTk9OLU5MUy0xJAorCQlpbml0RUF0dHJpYnV0ZShnZXRTVEVNVGltZVJhbmdlTW9kaWZpZXJfSW5jcmVtZW50KCksIGVjb3JlUGFja2FnZS5nZXRFTG9uZygpLCAiaW5jcmVtZW50IiwgbnVsbCwgMCwgMSwgU1RFTVRpbWVSYW5nZU1vZGlmaWVyLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOyAvLyROT04tTkxTLTEkCisJCWluaXRFUmVmZXJlbmNlKGdldFNURU1UaW1lUmFuZ2VNb2RpZmllcl9OZXh0VmFsdWUoKSwgdGhlTW9kZWxQYWNrYWdlLmdldFNURU1UaW1lKCksIG51bGwsICJuZXh0VmFsdWUiLCBudWxsLCAwLCAxLCBTVEVNVGltZVJhbmdlTW9kaWZpZXIuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX0NPTVBPU0lURSwgSVNfUkVTT0xWRV9QUk9YSUVTLCAhSVNfVU5TRVRUQUJMRSwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7IC8vJE5PTi1OTFMtMSQKKwkJaW5pdEVSZWZlcmVuY2UoZ2V0U1RFTVRpbWVSYW5nZU1vZGlmaWVyX09yaWdpbmFsVmFsdWUoKSwgdGhlTW9kZWxQYWNrYWdlLmdldFNURU1UaW1lKCksIG51bGwsICJvcmlnaW5hbFZhbHVlIiwgbnVsbCwgMCwgMSwgU1RFTVRpbWVSYW5nZU1vZGlmaWVyLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19DT01QT1NJVEUsIElTX1JFU09MVkVfUFJPWElFUywgIUlTX1VOU0VUVEFCTEUsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOyAvLyROT04tTkxTLTEkCisKKwkJaW5pdEVDbGFzcyhzdGVtVGltZVNlcXVlbmNlTW9kaWZpZXJFQ2xhc3MsIFNURU1UaW1lU2VxdWVuY2VNb2RpZmllci5jbGFzcywgIlNURU1UaW1lU2VxdWVuY2VNb2RpZmllciIsICFJU19BQlNUUkFDVCwgIUlTX0lOVEVSRkFDRSwgSVNfR0VORVJBVEVEX0lOU1RBTkNFX0NMQVNTKTsgLy8kTk9OLU5MUy0xJAorCQlpbml0RVJlZmVyZW5jZShnZXRTVEVNVGltZVNlcXVlbmNlTW9kaWZpZXJfU2VxdWVuY2UoKSwgdGhlTW9kZWxQYWNrYWdlLmdldFNURU1UaW1lKCksIG51bGwsICJzZXF1ZW5jZSIsIG51bGwsIDAsIC0xLCBTVEVNVGltZVNlcXVlbmNlTW9kaWZpZXIuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX0NPTVBPU0lURSwgSVNfUkVTT0xWRV9QUk9YSUVTLCAhSVNfVU5TRVRUQUJMRSwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7IC8vJE5PTi1OTFMtMSQKKworCQlpbml0RUNsYXNzKHNlcXVlbmNlTW9kaWZpZXJFQ2xhc3MsIFNlcXVlbmNlTW9kaWZpZXIuY2xhc3MsICJTZXF1ZW5jZU1vZGlmaWVyIiwgSVNfQUJTVFJBQ1QsICFJU19JTlRFUkZBQ0UsIElTX0dFTkVSQVRFRF9JTlNUQU5DRV9DTEFTUyk7IC8vJE5PTi1OTFMtMSQKKwkJaW5pdEVBdHRyaWJ1dGUoZ2V0U2VxdWVuY2VNb2RpZmllcl9TZXF1ZW5jZVNpemUoKSwgZWNvcmVQYWNrYWdlLmdldEVJbnQoKSwgInNlcXVlbmNlU2l6ZSIsIG51bGwsIDAsIDEsIFNlcXVlbmNlTW9kaWZpZXIuY2xhc3MsIElTX1RSQU5TSUVOVCwgSVNfVk9MQVRJTEUsICFJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsgLy8kTk9OLU5MUy0xJAorCQlpbml0RUF0dHJpYnV0ZShnZXRTZXF1ZW5jZU1vZGlmaWVyX0N1cnJlbnRTZXF1ZW5jZUluZGV4KCksIGVjb3JlUGFja2FnZS5nZXRFSW50KCksICJjdXJyZW50U2VxdWVuY2VJbmRleCIsICIwIiwgMCwgMSwgU2VxdWVuY2VNb2RpZmllci5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCisJCWluaXRFQXR0cmlidXRlKGdldFNlcXVlbmNlTW9kaWZpZXJfTmV4dFZhbHVlKCksIGVjb3JlUGFja2FnZS5nZXRFSmF2YU9iamVjdCgpLCAibmV4dFZhbHVlIiwgbnVsbCwgMCwgMSwgU2VxdWVuY2VNb2RpZmllci5jbGFzcywgSVNfVFJBTlNJRU5ULCBJU19WT0xBVElMRSwgIUlTX0NIQU5HRUFCTEUsIElTX1VOU0VUVEFCTEUsICFJU19JRCwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7IC8vJE5PTi1OTFMtMSQKKwkJaW5pdEVBdHRyaWJ1dGUoZ2V0U2VxdWVuY2VNb2RpZmllcl9PcmlnaW5hbFZhbHVlKCksIGVjb3JlUGFja2FnZS5nZXRFSmF2YU9iamVjdCgpLCAib3JpZ2luYWxWYWx1ZSIsIG51bGwsIDAsIDEsIFNlcXVlbmNlTW9kaWZpZXIuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7IC8vJE5PTi1OTFMtMSQKKworCQlpbml0RUNsYXNzKHN0cmluZ05PUE1vZGlmaWVyRUNsYXNzLCBTdHJpbmdOT1BNb2RpZmllci5jbGFzcywgIlN0cmluZ05PUE1vZGlmaWVyIiwgIUlTX0FCU1RSQUNULCAhSVNfSU5URVJGQUNFLCBJU19HRU5FUkFURURfSU5TVEFOQ0VfQ0xBU1MpOyAvLyROT04tTkxTLTEkCisKKwkJaW5pdEVDbGFzcyhzdHJpbmdTZXF1ZW5jZU1vZGlmaWVyRUNsYXNzLCBTdHJpbmdTZXF1ZW5jZU1vZGlmaWVyLmNsYXNzLCAiU3RyaW5nU2VxdWVuY2VNb2RpZmllciIsICFJU19BQlNUUkFDVCwgIUlTX0lOVEVSRkFDRSwgSVNfR0VORVJBVEVEX0lOU1RBTkNFX0NMQVNTKTsgLy8kTk9OLU5MUy0xJAorCQlpbml0RUF0dHJpYnV0ZShnZXRTdHJpbmdTZXF1ZW5jZU1vZGlmaWVyX1NlcXVlbmNlKCksIGVjb3JlUGFja2FnZS5nZXRFU3RyaW5nKCksICJzZXF1ZW5jZSIsIG51bGwsIDAsIC0xLCBTdHJpbmdTZXF1ZW5jZU1vZGlmaWVyLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOyAvLyROT04tTkxTLTEkCisKKwkJaW5pdEVDbGFzcyhtb2RpZmlhYmxlRUNsYXNzLCBNb2RpZmlhYmxlLmNsYXNzLCAiTW9kaWZpYWJsZSIsIElTX0FCU1RSQUNULCBJU19JTlRFUkZBQ0UsIElTX0dFTkVSQVRFRF9JTlNUQU5DRV9DTEFTUyk7IC8vJE5PTi1OTFMtMSQKKworCQlpbml0RUNsYXNzKHNpbmdsZVZhbHVlTW9kaWZpZXJFQ2xhc3MsIFNpbmdsZVZhbHVlTW9kaWZpZXIuY2xhc3MsICJTaW5nbGVWYWx1ZU1vZGlmaWVyIiwgSVNfQUJTVFJBQ1QsICFJU19JTlRFUkZBQ0UsIElTX0dFTkVSQVRFRF9JTlNUQU5DRV9DTEFTUyk7IC8vJE5PTi1OTFMtMSQKKworCQlpbml0RUNsYXNzKGRvdWJsZU1vZGlmaWVyRUNsYXNzLCBEb3VibGVNb2RpZmllci5jbGFzcywgIkRvdWJsZU1vZGlmaWVyIiwgIUlTX0FCU1RSQUNULCAhSVNfSU5URVJGQUNFLCBJU19HRU5FUkFURURfSU5TVEFOQ0VfQ0xBU1MpOyAvLyROT04tTkxTLTEkCisJCWluaXRFQXR0cmlidXRlKGdldERvdWJsZU1vZGlmaWVyX1ZhbHVlKCksIHRoZUVjb3JlUGFja2FnZS5nZXRFRG91YmxlKCksICJ2YWx1ZSIsIG51bGwsIDAsIDEsIERvdWJsZU1vZGlmaWVyLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOyAvLyROT04tTkxTLTEkCisJCWluaXRFQXR0cmlidXRlKGdldERvdWJsZU1vZGlmaWVyX09yaWdpbmFsVmFsdWUoKSwgdGhlRWNvcmVQYWNrYWdlLmdldEVEb3VibGUoKSwgIm9yaWdpbmFsVmFsdWUiLCAiLTFFMjAwIiwgMCwgMSwgRG91YmxlTW9kaWZpZXIuY2xhc3MsIElTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCisKKwkJaW5pdEVDbGFzcyhpbnRlZ2VyTW9kaWZpZXJFQ2xhc3MsIEludGVnZXJNb2RpZmllci5jbGFzcywgIkludGVnZXJNb2RpZmllciIsICFJU19BQlNUUkFDVCwgIUlTX0lOVEVSRkFDRSwgSVNfR0VORVJBVEVEX0lOU1RBTkNFX0NMQVNTKTsgLy8kTk9OLU5MUy0xJAorCQlpbml0RUF0dHJpYnV0ZShnZXRJbnRlZ2VyTW9kaWZpZXJfVmFsdWUoKSwgdGhlRWNvcmVQYWNrYWdlLmdldEVJbnQoKSwgInZhbHVlIiwgbnVsbCwgMCwgMSwgSW50ZWdlck1vZGlmaWVyLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOyAvLyROT04tTkxTLTEkCisJCWluaXRFQXR0cmlidXRlKGdldEludGVnZXJNb2RpZmllcl9PcmlnaW5hbFZhbHVlKCksIHRoZUVjb3JlUGFja2FnZS5nZXRFSW50KCksICJvcmlnaW5hbFZhbHVlIiwgIi0yMDAwMDAwMDAwIiwgMCwgMSwgSW50ZWdlck1vZGlmaWVyLmNsYXNzLCBJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAorCisJCWluaXRFQ2xhc3MobG9uZ01vZGlmaWVyRUNsYXNzLCBMb25nTW9kaWZpZXIuY2xhc3MsICJMb25nTW9kaWZpZXIiLCAhSVNfQUJTVFJBQ1QsICFJU19JTlRFUkZBQ0UsIElTX0dFTkVSQVRFRF9JTlNUQU5DRV9DTEFTUyk7IC8vJE5PTi1OTFMtMSQKKwkJaW5pdEVBdHRyaWJ1dGUoZ2V0TG9uZ01vZGlmaWVyX1ZhbHVlKCksIHRoZUVjb3JlUGFja2FnZS5nZXRFTG9uZygpLCAidmFsdWUiLCBudWxsLCAwLCAxLCBMb25nTW9kaWZpZXIuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7IC8vJE5PTi1OTFMtMSQKKwkJaW5pdEVBdHRyaWJ1dGUoZ2V0TG9uZ01vZGlmaWVyX09yaWdpbmFsVmFsdWUoKSwgdGhlRWNvcmVQYWNrYWdlLmdldEVMb25nKCksICJvcmlnaW5hbFZhbHVlIiwgIi0yMDAwMDAwMDAwIiwgMCwgMSwgTG9uZ01vZGlmaWVyLmNsYXNzLCBJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAorCisJCWluaXRFQ2xhc3Moc3RlbVRpbWVNb2RpZmllckVDbGFzcywgU1RFTVRpbWVNb2RpZmllci5jbGFzcywgIlNURU1UaW1lTW9kaWZpZXIiLCAhSVNfQUJTVFJBQ1QsICFJU19JTlRFUkZBQ0UsIElTX0dFTkVSQVRFRF9JTlNUQU5DRV9DTEFTUyk7IC8vJE5PTi1OTFMtMSQKKwkJaW5pdEVSZWZlcmVuY2UoZ2V0U1RFTVRpbWVNb2RpZmllcl9WYWx1ZSgpLCB0aGVNb2RlbFBhY2thZ2UuZ2V0U1RFTVRpbWUoKSwgbnVsbCwgInZhbHVlIiwgbnVsbCwgMCwgMSwgU1RFTVRpbWVNb2RpZmllci5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfQ09NUE9TSVRFLCBJU19SRVNPTFZFX1BST1hJRVMsICFJU19VTlNFVFRBQkxFLCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsgLy8kTk9OLU5MUy0xJAorCQlpbml0RVJlZmVyZW5jZShnZXRTVEVNVGltZU1vZGlmaWVyX09yaWdpbmFsVmFsdWUoKSwgdGhlTW9kZWxQYWNrYWdlLmdldFNURU1UaW1lKCksIG51bGwsICJvcmlnaW5hbFZhbHVlIiwgbnVsbCwgMCwgMSwgU1RFTVRpbWVNb2RpZmllci5jbGFzcywgSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19DT01QT1NJVEUsIElTX1JFU09MVkVfUFJPWElFUywgIUlTX1VOU0VUVEFCTEUsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOyAvLyROT04tTkxTLTEkCisKKwkJLy8gQ3JlYXRlIHJlc291cmNlCisJCWNyZWF0ZVJlc291cmNlKGVOU19VUkkpOworCX0KKworfSAvL01vZGlmaWVyUGFja2FnZUltcGwKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvbW9kaWZpZXIvaW1wbC9OT1BNb2RpZmllckltcGwuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvbW9kaWZpZXIvaW1wbC9OT1BNb2RpZmllckltcGwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NTJkMmZmCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9tb2RpZmllci9pbXBsL05PUE1vZGlmaWVySW1wbC5qYXZhCkBAIC0wLDAgKzEsNjkgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLmltcGw7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzczsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuTW9kaWZpZXJQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5OT1BNb2RpZmllcjsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiBBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+Tk9QIE1vZGlmaWVyPC9iPjwvZW0+Jy4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogPHA+CisgKiA8L3A+CisgKgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgTk9QTW9kaWZpZXJJbXBsIGV4dGVuZHMgRmVhdHVyZU1vZGlmaWVySW1wbCBpbXBsZW1lbnRzCisJCU5PUE1vZGlmaWVyIHsKKwkKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5GZWF0dXJlTW9kaWZpZXIjcmVzZXQoKQorCSAqLworCXB1YmxpYyB2b2lkIHJlc2V0KCkgeworCQkvLyBOb3RoaW5nIHRvIGRvCQkKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIE5PUE1vZGlmaWVySW1wbCgpIHsKKwkJc3VwZXIoKTsKKwl9CisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5pbXBsLkZlYXR1cmVNb2RpZmllckltcGwjaXNDb21wbGV0ZSgpCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIGJvb2xlYW4gaXNDb21wbGV0ZSgpIHsKKwkJcmV0dXJuIHRydWU7CisJfQorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuaW1wbC5GZWF0dXJlTW9kaWZpZXJJbXBsI3VwZGF0ZUZlYXR1cmUob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgdXBkYXRlRmVhdHVyZSgpIHsKKwkJLy8gZG8gbm90aGluZworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgRUNsYXNzIGVTdGF0aWNDbGFzcygpIHsKKwkJcmV0dXJuIE1vZGlmaWVyUGFja2FnZS5MaXRlcmFscy5OT1BfTU9ESUZJRVI7CisJfQorCit9IC8vIE5PUE1vZGlmaWVySW1wbApkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9tb2RpZmllci9pbXBsL1JhbmdlTW9kaWZpZXJJbXBsLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL21vZGlmaWVyL2ltcGwvUmFuZ2VNb2RpZmllckltcGwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMzQ3MWY4Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9tb2RpZmllci9pbXBsL1JhbmdlTW9kaWZpZXJJbXBsLmphdmEKQEAgLTAsMCArMSw3MyBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuaW1wbDsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5Nb2RpZmllclBhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLlJhbmdlTW9kaWZpZXI7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIEFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5SYW5nZSBNb2RpZmllcjwvYj48L2VtPicuCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIDxwPgorICogPC9wPgorICoKKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGFic3RyYWN0IGNsYXNzIFJhbmdlTW9kaWZpZXJJbXBsIGV4dGVuZHMgRmVhdHVyZU1vZGlmaWVySW1wbCBpbXBsZW1lbnRzIFJhbmdlTW9kaWZpZXIgeworCQorCisJLyoqCisJICogSWYgPGNvZGU+dHJ1ZTwvY29kZT4gdGhlbiB0aGUgbW9kaWZpZXIgaGFzIGNvbXBsZXRlZAorCSAqIEBzZWUgRG91YmxlUmFuZ2VNb2RpZmllckltcGwjZ2V0TmV4dFZhbHVlKCkKKwkgKi8KKwlwcm90ZWN0ZWQgYm9vbGVhbiBjb21wbGV0ZSA9IGZhbHNlOworCisJCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIFJhbmdlTW9kaWZpZXJJbXBsKCkgeworCQlzdXBlcigpOworCX0KKworCQorCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLmltcGwuRmVhdHVyZU1vZGlmaWVySW1wbCNpc0NvbXBsZXRlKCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgYm9vbGVhbiBpc0NvbXBsZXRlKCkgeworCQlyZXR1cm4gY29tcGxldGU7CisJfQorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuaW1wbC5GZWF0dXJlTW9kaWZpZXJJbXBsI3Jlc2V0KCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCByZXNldCgpIHsKKwkJY29tcGxldGUgPSBmYWxzZTsJCQorCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCBFQ2xhc3MgZVN0YXRpY0NsYXNzKCkgeworCQlyZXR1cm4gTW9kaWZpZXJQYWNrYWdlLkxpdGVyYWxzLlJBTkdFX01PRElGSUVSOworCX0KKworfSAvL1JhbmdlTW9kaWZpZXJJbXBsCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL21vZGlmaWVyL2ltcGwvU1RFTVRpbWVNb2RpZmllckltcGwuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvbW9kaWZpZXIvaW1wbC9TVEVNVGltZU1vZGlmaWVySW1wbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAyZTdjMzYKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL21vZGlmaWVyL2ltcGwvU1RFTVRpbWVNb2RpZmllckltcGwuamF2YQpAQCAtMCwwICsxLDI1NCBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuaW1wbDsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzczsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuSW50ZXJuYWxFT2JqZWN0OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5pbXBsLkVOb3RpZmljYXRpb25JbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5TVEVNVGltZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuTW9kaWZpZXJQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5TVEVNVGltZU1vZGlmaWVyOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiBBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+U1RFTSBUaW1lIE1vZGlmaWVyPC9iPjwvZW0+Jy4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogPHA+CisgKiBUaGUgZm9sbG93aW5nIGZlYXR1cmVzIGFyZSBpbXBsZW1lbnRlZDoKKyAqIDx1bD4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuaW1wbC5TVEVNVGltZU1vZGlmaWVySW1wbCNnZXRWYWx1ZSA8ZW0+VmFsdWU8L2VtPn08L2xpPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5pbXBsLlNURU1UaW1lTW9kaWZpZXJJbXBsI2dldE9yaWdpbmFsVmFsdWUgPGVtPk9yaWdpbmFsIFZhbHVlPC9lbT59PC9saT4KKyAqIDwvdWw+CisgKiA8L3A+CisgKgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgU1RFTVRpbWVNb2RpZmllckltcGwgZXh0ZW5kcyBTaW5nbGVWYWx1ZU1vZGlmaWVySW1wbCBpbXBsZW1lbnRzIFNURU1UaW1lTW9kaWZpZXIgeworCS8qKgorCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldFZhbHVlKCkgPGVtPlZhbHVlPC9lbT59JyByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNnZXRWYWx1ZSgpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIFNURU1UaW1lIHZhbHVlOworCisJLyoqCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0T3JpZ2luYWxWYWx1ZSgpIDxlbT5PcmlnaW5hbCBWYWx1ZTwvZW0+fScgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZ2V0T3JpZ2luYWxWYWx1ZSgpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIFNURU1UaW1lIG9yaWdpbmFsVmFsdWU7CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgU1RFTVRpbWVNb2RpZmllckltcGwoKSB7CisJCXN1cGVyKCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIEVDbGFzcyBlU3RhdGljQ2xhc3MoKSB7CisJCXJldHVybiBNb2RpZmllclBhY2thZ2UuTGl0ZXJhbHMuU1RFTV9USU1FX01PRElGSUVSOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBTVEVNVGltZSBnZXRWYWx1ZSgpIHsKKwkJaWYgKHZhbHVlICE9IG51bGwgJiYgdmFsdWUuZUlzUHJveHkoKSkgeworCQkJSW50ZXJuYWxFT2JqZWN0IG9sZFZhbHVlID0gKEludGVybmFsRU9iamVjdCl2YWx1ZTsKKwkJCXZhbHVlID0gKFNURU1UaW1lKWVSZXNvbHZlUHJveHkob2xkVmFsdWUpOworCQkJaWYgKHZhbHVlICE9IG9sZFZhbHVlKSB7CisJCQkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQorCQkJCQllTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uUkVTT0xWRSwgTW9kaWZpZXJQYWNrYWdlLlNURU1fVElNRV9NT0RJRklFUl9fVkFMVUUsIG9sZFZhbHVlLCB2YWx1ZSkpOworCQkJfQorCQl9CisJCXJldHVybiB2YWx1ZTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgU1RFTVRpbWUgYmFzaWNHZXRWYWx1ZSgpIHsKKwkJcmV0dXJuIHZhbHVlOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIHNldFZhbHVlKFNURU1UaW1lIG5ld1ZhbHVlKSB7CisJCVNURU1UaW1lIG9sZFZhbHVlID0gdmFsdWU7CisJCXZhbHVlID0gbmV3VmFsdWU7CisJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkKKwkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIE1vZGlmaWVyUGFja2FnZS5TVEVNX1RJTUVfTU9ESUZJRVJfX1ZBTFVFLCBvbGRWYWx1ZSwgdmFsdWUpKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgU1RFTVRpbWUgZ2V0T3JpZ2luYWxWYWx1ZSgpIHsKKwkJaWYgKG9yaWdpbmFsVmFsdWUgIT0gbnVsbCAmJiBvcmlnaW5hbFZhbHVlLmVJc1Byb3h5KCkpIHsKKwkJCUludGVybmFsRU9iamVjdCBvbGRPcmlnaW5hbFZhbHVlID0gKEludGVybmFsRU9iamVjdClvcmlnaW5hbFZhbHVlOworCQkJb3JpZ2luYWxWYWx1ZSA9IChTVEVNVGltZSllUmVzb2x2ZVByb3h5KG9sZE9yaWdpbmFsVmFsdWUpOworCQkJaWYgKG9yaWdpbmFsVmFsdWUgIT0gb2xkT3JpZ2luYWxWYWx1ZSkgeworCQkJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkKKwkJCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlJFU09MVkUsIE1vZGlmaWVyUGFja2FnZS5TVEVNX1RJTUVfTU9ESUZJRVJfX09SSUdJTkFMX1ZBTFVFLCBvbGRPcmlnaW5hbFZhbHVlLCBvcmlnaW5hbFZhbHVlKSk7CisJCQl9CisJCX0KKwkJcmV0dXJuIG9yaWdpbmFsVmFsdWU7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFNURU1UaW1lIGJhc2ljR2V0T3JpZ2luYWxWYWx1ZSgpIHsKKwkJcmV0dXJuIG9yaWdpbmFsVmFsdWU7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgc2V0T3JpZ2luYWxWYWx1ZShTVEVNVGltZSBuZXdPcmlnaW5hbFZhbHVlKSB7CisJCVNURU1UaW1lIG9sZE9yaWdpbmFsVmFsdWUgPSBvcmlnaW5hbFZhbHVlOworCQlvcmlnaW5hbFZhbHVlID0gbmV3T3JpZ2luYWxWYWx1ZTsKKwkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQorCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgTW9kaWZpZXJQYWNrYWdlLlNURU1fVElNRV9NT0RJRklFUl9fT1JJR0lOQUxfVkFMVUUsIG9sZE9yaWdpbmFsVmFsdWUsIG9yaWdpbmFsVmFsdWUpKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgT2JqZWN0IGVHZXQoaW50IGZlYXR1cmVJRCwgYm9vbGVhbiByZXNvbHZlLCBib29sZWFuIGNvcmVUeXBlKSB7CisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7CisJCQljYXNlIE1vZGlmaWVyUGFja2FnZS5TVEVNX1RJTUVfTU9ESUZJRVJfX1ZBTFVFOgorCQkJCWlmIChyZXNvbHZlKSByZXR1cm4gZ2V0VmFsdWUoKTsKKwkJCQlyZXR1cm4gYmFzaWNHZXRWYWx1ZSgpOworCQkJY2FzZSBNb2RpZmllclBhY2thZ2UuU1RFTV9USU1FX01PRElGSUVSX19PUklHSU5BTF9WQUxVRToKKwkJCQlpZiAocmVzb2x2ZSkgcmV0dXJuIGdldE9yaWdpbmFsVmFsdWUoKTsKKwkJCQlyZXR1cm4gYmFzaWNHZXRPcmlnaW5hbFZhbHVlKCk7CisJCX0KKwkJcmV0dXJuIHN1cGVyLmVHZXQoZmVhdHVyZUlELCByZXNvbHZlLCBjb3JlVHlwZSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgZVNldChpbnQgZmVhdHVyZUlELCBPYmplY3QgbmV3VmFsdWUpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJCWNhc2UgTW9kaWZpZXJQYWNrYWdlLlNURU1fVElNRV9NT0RJRklFUl9fVkFMVUU6CisJCQkJc2V0VmFsdWUoKFNURU1UaW1lKW5ld1ZhbHVlKTsKKwkJCQlyZXR1cm47CisJCQljYXNlIE1vZGlmaWVyUGFja2FnZS5TVEVNX1RJTUVfTU9ESUZJRVJfX09SSUdJTkFMX1ZBTFVFOgorCQkJCXNldE9yaWdpbmFsVmFsdWUoKFNURU1UaW1lKW5ld1ZhbHVlKTsKKwkJCQlyZXR1cm47CisJCX0KKwkJc3VwZXIuZVNldChmZWF0dXJlSUQsIG5ld1ZhbHVlKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBlVW5zZXQoaW50IGZlYXR1cmVJRCkgeworCQlzd2l0Y2ggKGZlYXR1cmVJRCkgeworCQkJY2FzZSBNb2RpZmllclBhY2thZ2UuU1RFTV9USU1FX01PRElGSUVSX19WQUxVRToKKwkJCQlzZXRWYWx1ZSgoU1RFTVRpbWUpbnVsbCk7CisJCQkJcmV0dXJuOworCQkJY2FzZSBNb2RpZmllclBhY2thZ2UuU1RFTV9USU1FX01PRElGSUVSX19PUklHSU5BTF9WQUxVRToKKwkJCQlzZXRPcmlnaW5hbFZhbHVlKChTVEVNVGltZSludWxsKTsKKwkJCQlyZXR1cm47CisJCX0KKwkJc3VwZXIuZVVuc2V0KGZlYXR1cmVJRCk7CisJfQorCisJQFN1cHByZXNzV2FybmluZ3MoImJveGluZyIpCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgdXBkYXRlRmVhdHVyZSgpIHsKKwkJLy8gT3JpZ2luYWwgdmFsdWUgY2FwdHVyZWQgeWV0PworCQlpZiAoIWVJc1NldChNb2RpZmllclBhY2thZ2UuRE9VQkxFX01PRElGSUVSX19PUklHSU5BTF9WQUxVRSkpIHsKKwkJCS8vIE5vCisJCQlzZXRPcmlnaW5hbFZhbHVlKChTVEVNVGltZSlnZXRUYXJnZXQoKS5lR2V0KGdldEVTdHJ1Y3R1cmFsRmVhdHVyZSgpKSk7CisJCX0gLy8gaWYKKwkJZ2V0VGFyZ2V0KCkuZVNldChnZXRFU3RydWN0dXJhbEZlYXR1cmUoKSwgZ2V0VmFsdWUoKSk7CisJCWNvbXBsZXRlID0gdHJ1ZTsKKwl9IC8vIHVwZGF0ZUZlYXR1cmUKKworCQorCS8qKgorCSAqcmVzZXQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCByZXNldCgpIHsKKwkJY29tcGxldGUgPSBmYWxzZTsKKwkJZ2V0VGFyZ2V0KCkuZVNldChnZXRFU3RydWN0dXJhbEZlYXR1cmUoKSwgZ2V0T3JpZ2luYWxWYWx1ZSgpKTsKKwkJc2V0T3JpZ2luYWxWYWx1ZShudWxsKTsgLy8gVG8gbWFrZSBzdXJlIHdlIGNhcHR1cmUgYW55IG5ldyB2YWx1ZSBuZXh0IHRpbWUgc2ltdWxhdGlvbiBpcyBydW4KKwl9CisJCisJcHJpdmF0ZSBib29sZWFuIGNvbXBsZXRlID0gZmFsc2U7CisJLyoqCisJICogaXNDb21wbGV0ZQorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBib29sZWFuIGlzQ29tcGxldGUoKSB7CisJCXJldHVybiBjb21wbGV0ZTsKKwl9CisJCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIGJvb2xlYW4gZUlzU2V0KGludCBmZWF0dXJlSUQpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJCWNhc2UgTW9kaWZpZXJQYWNrYWdlLlNURU1fVElNRV9NT0RJRklFUl9fVkFMVUU6CisJCQkJcmV0dXJuIHZhbHVlICE9IG51bGw7CisJCQljYXNlIE1vZGlmaWVyUGFja2FnZS5TVEVNX1RJTUVfTU9ESUZJRVJfX09SSUdJTkFMX1ZBTFVFOgorCQkJCXJldHVybiBvcmlnaW5hbFZhbHVlICE9IG51bGw7CisJCX0KKwkJcmV0dXJuIHN1cGVyLmVJc1NldChmZWF0dXJlSUQpOworCX0KKworfSAvL1NURU1UaW1lTW9kaWZpZXJJbXBsCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL21vZGlmaWVyL2ltcGwvU1RFTVRpbWVOT1BNb2RpZmllckltcGwuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvbW9kaWZpZXIvaW1wbC9TVEVNVGltZU5PUE1vZGlmaWVySW1wbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI2NjRiZDQKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL21vZGlmaWVyL2ltcGwvU1RFTVRpbWVOT1BNb2RpZmllckltcGwuamF2YQpAQCAtMCwwICsxLDQ3IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5pbXBsOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLk1vZGlmaWVyUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuU1RFTVRpbWVOT1BNb2RpZmllcjsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPlNURU0gVGltZSBOT1AgTW9kaWZpZXI8L2I+PC9lbT4nLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiA8cD4KKyAqIDwvcD4KKyAqCisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBTVEVNVGltZU5PUE1vZGlmaWVySW1wbCBleHRlbmRzIE5PUE1vZGlmaWVySW1wbCBpbXBsZW1lbnRzIFNURU1UaW1lTk9QTW9kaWZpZXIgeworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBTVEVNVGltZU5PUE1vZGlmaWVySW1wbCgpIHsKKwkJc3VwZXIoKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgRUNsYXNzIGVTdGF0aWNDbGFzcygpIHsKKwkJcmV0dXJuIE1vZGlmaWVyUGFja2FnZS5MaXRlcmFscy5TVEVNX1RJTUVfTk9QX01PRElGSUVSOworCX0KKworfSAvLyBTVEVNVGltZU5PUE1vZGlmaWVySW1wbApkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9tb2RpZmllci9pbXBsL1NURU1UaW1lUmFuZ2VNb2RpZmllckltcGwuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvbW9kaWZpZXIvaW1wbC9TVEVNVGltZVJhbmdlTW9kaWZpZXJJbXBsLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjEyNzI5YwotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvbW9kaWZpZXIvaW1wbC9TVEVNVGltZVJhbmdlTW9kaWZpZXJJbXBsLmphdmEKQEAgLTAsMCArMSw0NDUgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLmltcGw7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkludGVybmFsRU9iamVjdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuaW1wbC5FTm90aWZpY2F0aW9uSW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUudXRpbC5FY29yZVV0aWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLlNURU1UaW1lOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5Nb2RpZmllclBhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLlNURU1UaW1lUmFuZ2VNb2RpZmllcjsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiBBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+U1RFTSBUaW1lIFJhbmdlIE1vZGlmaWVyPC9iPjwvZW0+Jy4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogPHA+CisgKiBUaGUgZm9sbG93aW5nIGZlYXR1cmVzIGFyZSBpbXBsZW1lbnRlZDoKKyAqIDx1bD4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuaW1wbC5TVEVNVGltZVJhbmdlTW9kaWZpZXJJbXBsI2dldFN0YXJ0VmFsdWUgPGVtPlN0YXJ0IFZhbHVlPC9lbT59PC9saT4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuaW1wbC5TVEVNVGltZVJhbmdlTW9kaWZpZXJJbXBsI2dldEVuZFZhbHVlIDxlbT5FbmQgVmFsdWU8L2VtPn08L2xpPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5pbXBsLlNURU1UaW1lUmFuZ2VNb2RpZmllckltcGwjZ2V0SW5jcmVtZW50IDxlbT5JbmNyZW1lbnQ8L2VtPn08L2xpPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5pbXBsLlNURU1UaW1lUmFuZ2VNb2RpZmllckltcGwjZ2V0TmV4dFZhbHVlIDxlbT5OZXh0IFZhbHVlPC9lbT59PC9saT4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuaW1wbC5TVEVNVGltZVJhbmdlTW9kaWZpZXJJbXBsI2dldE9yaWdpbmFsVmFsdWUgPGVtPk9yaWdpbmFsIFZhbHVlPC9lbT59PC9saT4KKyAqIDwvdWw+CisgKiA8L3A+CisgKgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgU1RFTVRpbWVSYW5nZU1vZGlmaWVySW1wbCBleHRlbmRzIFJhbmdlTW9kaWZpZXJJbXBsIGltcGxlbWVudHMKKwkJU1RFTVRpbWVSYW5nZU1vZGlmaWVyIHsKKwkvKioKKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRTdGFydFZhbHVlKCkgPGVtPlN0YXJ0IFZhbHVlPC9lbT59JyByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZ2V0U3RhcnRWYWx1ZSgpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIFNURU1UaW1lIHN0YXJ0VmFsdWU7CisJLyoqCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0RW5kVmFsdWUoKSA8ZW0+RW5kIFZhbHVlPC9lbT59JyByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZ2V0RW5kVmFsdWUoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBTVEVNVGltZSBlbmRWYWx1ZTsKKwkvKioKKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0SW5jcmVtZW50KCkgPGVtPkluY3JlbWVudDwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI2dldEluY3JlbWVudCgpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBsb25nIElOQ1JFTUVOVF9FREVGQVVMVCA9IDBMOworCS8qKgorCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldEluY3JlbWVudCgpIDxlbT5JbmNyZW1lbnQ8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNnZXRJbmNyZW1lbnQoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBsb25nIGluY3JlbWVudCA9IElOQ1JFTUVOVF9FREVGQVVMVDsKKworCS8qKgorCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldE5leHRWYWx1ZSgpIDxlbT5OZXh0IFZhbHVlPC9lbT59JyByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZ2V0TmV4dFZhbHVlKCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgU1RFTVRpbWUgbmV4dFZhbHVlOworCisJLyoqCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0T3JpZ2luYWxWYWx1ZSgpIDxlbT5PcmlnaW5hbCBWYWx1ZTwvZW0+fScgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZ2V0T3JpZ2luYWxWYWx1ZSgpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIFNURU1UaW1lIG9yaWdpbmFsVmFsdWU7CisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICovCisJcHJvdGVjdGVkIFNURU1UaW1lUmFuZ2VNb2RpZmllckltcGwoKSB7CisJCXN1cGVyKCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCBFQ2xhc3MgZVN0YXRpY0NsYXNzKCkgeworCQlyZXR1cm4gTW9kaWZpZXJQYWNrYWdlLkxpdGVyYWxzLlNURU1fVElNRV9SQU5HRV9NT0RJRklFUjsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFNURU1UaW1lIGdldFN0YXJ0VmFsdWUoKSB7CisJCWlmIChzdGFydFZhbHVlICE9IG51bGwgJiYgc3RhcnRWYWx1ZS5lSXNQcm94eSgpKSB7CisJCQlJbnRlcm5hbEVPYmplY3Qgb2xkU3RhcnRWYWx1ZSA9IChJbnRlcm5hbEVPYmplY3Qpc3RhcnRWYWx1ZTsKKwkJCXN0YXJ0VmFsdWUgPSAoU1RFTVRpbWUpZVJlc29sdmVQcm94eShvbGRTdGFydFZhbHVlKTsKKwkJCWlmIChzdGFydFZhbHVlICE9IG9sZFN0YXJ0VmFsdWUpIHsKKwkJCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpCisJCQkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5SRVNPTFZFLCBNb2RpZmllclBhY2thZ2UuU1RFTV9USU1FX1JBTkdFX01PRElGSUVSX19TVEFSVF9WQUxVRSwgb2xkU3RhcnRWYWx1ZSwgc3RhcnRWYWx1ZSkpOworCQkJfQorCQl9CisJCXJldHVybiBzdGFydFZhbHVlOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgU1RFTVRpbWUgYmFzaWNHZXRTdGFydFZhbHVlKCkgeworCQlyZXR1cm4gc3RhcnRWYWx1ZTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgc2V0U3RhcnRWYWx1ZShTVEVNVGltZSBuZXdTdGFydFZhbHVlKSB7CisJCVNURU1UaW1lIG9sZFN0YXJ0VmFsdWUgPSBzdGFydFZhbHVlOworCQlzdGFydFZhbHVlID0gbmV3U3RhcnRWYWx1ZTsKKwkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQorCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgTW9kaWZpZXJQYWNrYWdlLlNURU1fVElNRV9SQU5HRV9NT0RJRklFUl9fU1RBUlRfVkFMVUUsIG9sZFN0YXJ0VmFsdWUsIHN0YXJ0VmFsdWUpKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFNURU1UaW1lIGdldEVuZFZhbHVlKCkgeworCQlpZiAoZW5kVmFsdWUgIT0gbnVsbCAmJiBlbmRWYWx1ZS5lSXNQcm94eSgpKSB7CisJCQlJbnRlcm5hbEVPYmplY3Qgb2xkRW5kVmFsdWUgPSAoSW50ZXJuYWxFT2JqZWN0KWVuZFZhbHVlOworCQkJZW5kVmFsdWUgPSAoU1RFTVRpbWUpZVJlc29sdmVQcm94eShvbGRFbmRWYWx1ZSk7CisJCQlpZiAoZW5kVmFsdWUgIT0gb2xkRW5kVmFsdWUpIHsKKwkJCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpCisJCQkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5SRVNPTFZFLCBNb2RpZmllclBhY2thZ2UuU1RFTV9USU1FX1JBTkdFX01PRElGSUVSX19FTkRfVkFMVUUsIG9sZEVuZFZhbHVlLCBlbmRWYWx1ZSkpOworCQkJfQorCQl9CisJCXJldHVybiBlbmRWYWx1ZTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFNURU1UaW1lIGJhc2ljR2V0RW5kVmFsdWUoKSB7CisJCXJldHVybiBlbmRWYWx1ZTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgc2V0RW5kVmFsdWUoU1RFTVRpbWUgbmV3RW5kVmFsdWUpIHsKKwkJU1RFTVRpbWUgb2xkRW5kVmFsdWUgPSBlbmRWYWx1ZTsKKwkJZW5kVmFsdWUgPSBuZXdFbmRWYWx1ZTsKKwkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQorCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgTW9kaWZpZXJQYWNrYWdlLlNURU1fVElNRV9SQU5HRV9NT0RJRklFUl9fRU5EX1ZBTFVFLCBvbGRFbmRWYWx1ZSwgZW5kVmFsdWUpKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIGxvbmcgZ2V0SW5jcmVtZW50KCkgeworCQlyZXR1cm4gaW5jcmVtZW50OworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRJbmNyZW1lbnQobG9uZyBuZXdJbmNyZW1lbnQpIHsKKwkJbG9uZyBvbGRJbmNyZW1lbnQgPSBpbmNyZW1lbnQ7CisJCWluY3JlbWVudCA9IG5ld0luY3JlbWVudDsKKwkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQorCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgTW9kaWZpZXJQYWNrYWdlLlNURU1fVElNRV9SQU5HRV9NT0RJRklFUl9fSU5DUkVNRU5ULCBvbGRJbmNyZW1lbnQsIGluY3JlbWVudCkpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgT2JqZWN0IGVHZXQoaW50IGZlYXR1cmVJRCwgYm9vbGVhbiByZXNvbHZlLCBib29sZWFuIGNvcmVUeXBlKSB7CisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7CisJCQljYXNlIE1vZGlmaWVyUGFja2FnZS5TVEVNX1RJTUVfUkFOR0VfTU9ESUZJRVJfX1NUQVJUX1ZBTFVFOgorCQkJCWlmIChyZXNvbHZlKSByZXR1cm4gZ2V0U3RhcnRWYWx1ZSgpOworCQkJCXJldHVybiBiYXNpY0dldFN0YXJ0VmFsdWUoKTsKKwkJCWNhc2UgTW9kaWZpZXJQYWNrYWdlLlNURU1fVElNRV9SQU5HRV9NT0RJRklFUl9fRU5EX1ZBTFVFOgorCQkJCWlmIChyZXNvbHZlKSByZXR1cm4gZ2V0RW5kVmFsdWUoKTsKKwkJCQlyZXR1cm4gYmFzaWNHZXRFbmRWYWx1ZSgpOworCQkJY2FzZSBNb2RpZmllclBhY2thZ2UuU1RFTV9USU1FX1JBTkdFX01PRElGSUVSX19JTkNSRU1FTlQ6CisJCQkJcmV0dXJuIGdldEluY3JlbWVudCgpOworCQkJY2FzZSBNb2RpZmllclBhY2thZ2UuU1RFTV9USU1FX1JBTkdFX01PRElGSUVSX19ORVhUX1ZBTFVFOgorCQkJCWlmIChyZXNvbHZlKSByZXR1cm4gZ2V0TmV4dFZhbHVlKCk7CisJCQkJcmV0dXJuIGJhc2ljR2V0TmV4dFZhbHVlKCk7CisJCQljYXNlIE1vZGlmaWVyUGFja2FnZS5TVEVNX1RJTUVfUkFOR0VfTU9ESUZJRVJfX09SSUdJTkFMX1ZBTFVFOgorCQkJCWlmIChyZXNvbHZlKSByZXR1cm4gZ2V0T3JpZ2luYWxWYWx1ZSgpOworCQkJCXJldHVybiBiYXNpY0dldE9yaWdpbmFsVmFsdWUoKTsKKwkJfQorCQlyZXR1cm4gc3VwZXIuZUdldChmZWF0dXJlSUQsIHJlc29sdmUsIGNvcmVUeXBlKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgZVNldChpbnQgZmVhdHVyZUlELCBPYmplY3QgbmV3VmFsdWUpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJCWNhc2UgTW9kaWZpZXJQYWNrYWdlLlNURU1fVElNRV9SQU5HRV9NT0RJRklFUl9fU1RBUlRfVkFMVUU6CisJCQkJc2V0U3RhcnRWYWx1ZSgoU1RFTVRpbWUpbmV3VmFsdWUpOworCQkJCXJldHVybjsKKwkJCWNhc2UgTW9kaWZpZXJQYWNrYWdlLlNURU1fVElNRV9SQU5HRV9NT0RJRklFUl9fRU5EX1ZBTFVFOgorCQkJCXNldEVuZFZhbHVlKChTVEVNVGltZSluZXdWYWx1ZSk7CisJCQkJcmV0dXJuOworCQkJY2FzZSBNb2RpZmllclBhY2thZ2UuU1RFTV9USU1FX1JBTkdFX01PRElGSUVSX19JTkNSRU1FTlQ6CisJCQkJc2V0SW5jcmVtZW50KChMb25nKW5ld1ZhbHVlKTsKKwkJCQlyZXR1cm47CisJCQljYXNlIE1vZGlmaWVyUGFja2FnZS5TVEVNX1RJTUVfUkFOR0VfTU9ESUZJRVJfX05FWFRfVkFMVUU6CisJCQkJc2V0TmV4dFZhbHVlKChTVEVNVGltZSluZXdWYWx1ZSk7CisJCQkJcmV0dXJuOworCQkJY2FzZSBNb2RpZmllclBhY2thZ2UuU1RFTV9USU1FX1JBTkdFX01PRElGSUVSX19PUklHSU5BTF9WQUxVRToKKwkJCQlzZXRPcmlnaW5hbFZhbHVlKChTVEVNVGltZSluZXdWYWx1ZSk7CisJCQkJcmV0dXJuOworCQl9CisJCXN1cGVyLmVTZXQoZmVhdHVyZUlELCBuZXdWYWx1ZSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGVVbnNldChpbnQgZmVhdHVyZUlEKSB7CisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7CisJCQljYXNlIE1vZGlmaWVyUGFja2FnZS5TVEVNX1RJTUVfUkFOR0VfTU9ESUZJRVJfX1NUQVJUX1ZBTFVFOgorCQkJCXNldFN0YXJ0VmFsdWUoKFNURU1UaW1lKW51bGwpOworCQkJCXJldHVybjsKKwkJCWNhc2UgTW9kaWZpZXJQYWNrYWdlLlNURU1fVElNRV9SQU5HRV9NT0RJRklFUl9fRU5EX1ZBTFVFOgorCQkJCXNldEVuZFZhbHVlKChTVEVNVGltZSludWxsKTsKKwkJCQlyZXR1cm47CisJCQljYXNlIE1vZGlmaWVyUGFja2FnZS5TVEVNX1RJTUVfUkFOR0VfTU9ESUZJRVJfX0lOQ1JFTUVOVDoKKwkJCQlzZXRJbmNyZW1lbnQoSU5DUkVNRU5UX0VERUZBVUxUKTsKKwkJCQlyZXR1cm47CisJCQljYXNlIE1vZGlmaWVyUGFja2FnZS5TVEVNX1RJTUVfUkFOR0VfTU9ESUZJRVJfX05FWFRfVkFMVUU6CisJCQkJc2V0TmV4dFZhbHVlKChTVEVNVGltZSludWxsKTsKKwkJCQlyZXR1cm47CisJCQljYXNlIE1vZGlmaWVyUGFja2FnZS5TVEVNX1RJTUVfUkFOR0VfTU9ESUZJRVJfX09SSUdJTkFMX1ZBTFVFOgorCQkJCXNldE9yaWdpbmFsVmFsdWUoKFNURU1UaW1lKW51bGwpOworCQkJCXJldHVybjsKKwkJfQorCQlzdXBlci5lVW5zZXQoZmVhdHVyZUlEKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIGJvb2xlYW4gZUlzU2V0KGludCBmZWF0dXJlSUQpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJCWNhc2UgTW9kaWZpZXJQYWNrYWdlLlNURU1fVElNRV9SQU5HRV9NT0RJRklFUl9fU1RBUlRfVkFMVUU6CisJCQkJcmV0dXJuIHN0YXJ0VmFsdWUgIT0gbnVsbDsKKwkJCWNhc2UgTW9kaWZpZXJQYWNrYWdlLlNURU1fVElNRV9SQU5HRV9NT0RJRklFUl9fRU5EX1ZBTFVFOgorCQkJCXJldHVybiBlbmRWYWx1ZSAhPSBudWxsOworCQkJY2FzZSBNb2RpZmllclBhY2thZ2UuU1RFTV9USU1FX1JBTkdFX01PRElGSUVSX19JTkNSRU1FTlQ6CisJCQkJcmV0dXJuIGluY3JlbWVudCAhPSBJTkNSRU1FTlRfRURFRkFVTFQ7CisJCQljYXNlIE1vZGlmaWVyUGFja2FnZS5TVEVNX1RJTUVfUkFOR0VfTU9ESUZJRVJfX05FWFRfVkFMVUU6CisJCQkJcmV0dXJuIG5leHRWYWx1ZSAhPSBudWxsOworCQkJY2FzZSBNb2RpZmllclBhY2thZ2UuU1RFTV9USU1FX1JBTkdFX01PRElGSUVSX19PUklHSU5BTF9WQUxVRToKKwkJCQlyZXR1cm4gb3JpZ2luYWxWYWx1ZSAhPSBudWxsOworCQl9CisJCXJldHVybiBzdXBlci5lSXNTZXQoZmVhdHVyZUlEKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIFN0cmluZyB0b1N0cmluZygpIHsKKwkJaWYgKGVJc1Byb3h5KCkpIHJldHVybiBzdXBlci50b1N0cmluZygpOworCisJCVN0cmluZ0J1ZmZlciByZXN1bHQgPSBuZXcgU3RyaW5nQnVmZmVyKHN1cGVyLnRvU3RyaW5nKCkpOworCQlyZXN1bHQuYXBwZW5kKCIgKGluY3JlbWVudDogIik7IC8vJE5PTi1OTFMtMSQKKwkJcmVzdWx0LmFwcGVuZChpbmNyZW1lbnQpOworCQlyZXN1bHQuYXBwZW5kKCcpJyk7CisJCXJldHVybiByZXN1bHQudG9TdHJpbmcoKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCXB1YmxpYyBTVEVNVGltZSBnZXROZXh0VmFsdWUoKSB7CisJCS8vIFVuc2V0PworCQlpZiAoIWVJc1NldChNb2RpZmllclBhY2thZ2UuU1RFTV9USU1FX1JBTkdFX01PRElGSUVSX19ORVhUX1ZBTFVFKSkgeworCQkJLy8gWWVzCisJCQluZXh0VmFsdWUgPSBzdGFydFZhbHVlOworCQl9IC8vIGlmCisKKwkJZmluYWwgU1RFTVRpbWUgcmV0VmFsdWUgPSBuZXh0VmFsdWU7CisJCWNvbXBsZXRlID0gcmV0VmFsdWUudmFsdWVFcXVhbHMoZW5kVmFsdWUpOworCisJCS8vIFN0aWxsIGluY3JlbWVudGluZz8KKwkJaWYgKCFjb21wbGV0ZSkgeworCQkJLy8gWWVzCisJCQlmaW5hbCBTVEVNVGltZSB0ZW1wID0gKChTVEVNVGltZSkgRWNvcmVVdGlsLmNvcHkocmV0VmFsdWUpKQorCQkJCQkuYWRkSW5jcmVtZW50KGluY3JlbWVudCk7CisJCQkvLyBXb3VsZCB0aGUgbmV3IGN1cnJlbnRWYWx1ZSBiZSBlcXVhbCBvciAicGFzdCIgdGhlIGVuZFZhbHVlPworCQkJaWYgKHRlbXAuZ2V0VGltZSgpLmJlZm9yZShlbmRWYWx1ZS5nZXRUaW1lKCkpKSB7CisJCQkJLy8gTm8KKwkJCQluZXh0VmFsdWUgPSB0ZW1wOworCQkJfSAvLyBpZgorCQkJZWxzZSB7CisJCQkJLy8gWWVzCisJCQkJbmV4dFZhbHVlID0gZW5kVmFsdWU7CisJCQl9IC8vIGVsc2UKKwkJfSAvLyBpZgorCQljdXJyZW50VmFsdWVUZXh0ID0gcmV0VmFsdWUudG9TdHJpbmcoKTsKKwkJcmV0dXJuIHJldFZhbHVlOworCisJfSAvLyBnZXROZXh0VmFsdWUKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgU1RFTVRpbWUgYmFzaWNHZXROZXh0VmFsdWUoKSB7CisJCXJldHVybiBuZXh0VmFsdWU7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgc2V0TmV4dFZhbHVlKFNURU1UaW1lIG5ld05leHRWYWx1ZSkgeworCQlTVEVNVGltZSBvbGROZXh0VmFsdWUgPSBuZXh0VmFsdWU7CisJCW5leHRWYWx1ZSA9IG5ld05leHRWYWx1ZTsKKwkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQorCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgTW9kaWZpZXJQYWNrYWdlLlNURU1fVElNRV9SQU5HRV9NT0RJRklFUl9fTkVYVF9WQUxVRSwgb2xkTmV4dFZhbHVlLCBuZXh0VmFsdWUpKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgU1RFTVRpbWUgZ2V0T3JpZ2luYWxWYWx1ZSgpIHsKKwkJaWYgKG9yaWdpbmFsVmFsdWUgIT0gbnVsbCAmJiBvcmlnaW5hbFZhbHVlLmVJc1Byb3h5KCkpIHsKKwkJCUludGVybmFsRU9iamVjdCBvbGRPcmlnaW5hbFZhbHVlID0gKEludGVybmFsRU9iamVjdClvcmlnaW5hbFZhbHVlOworCQkJb3JpZ2luYWxWYWx1ZSA9IChTVEVNVGltZSllUmVzb2x2ZVByb3h5KG9sZE9yaWdpbmFsVmFsdWUpOworCQkJaWYgKG9yaWdpbmFsVmFsdWUgIT0gb2xkT3JpZ2luYWxWYWx1ZSkgeworCQkJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkKKwkJCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlJFU09MVkUsIE1vZGlmaWVyUGFja2FnZS5TVEVNX1RJTUVfUkFOR0VfTU9ESUZJRVJfX09SSUdJTkFMX1ZBTFVFLCBvbGRPcmlnaW5hbFZhbHVlLCBvcmlnaW5hbFZhbHVlKSk7CisJCQl9CisJCX0KKwkJcmV0dXJuIG9yaWdpbmFsVmFsdWU7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFNURU1UaW1lIGJhc2ljR2V0T3JpZ2luYWxWYWx1ZSgpIHsKKwkJcmV0dXJuIG9yaWdpbmFsVmFsdWU7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgc2V0T3JpZ2luYWxWYWx1ZShTVEVNVGltZSBuZXdPcmlnaW5hbFZhbHVlKSB7CisJCVNURU1UaW1lIG9sZE9yaWdpbmFsVmFsdWUgPSBvcmlnaW5hbFZhbHVlOworCQlvcmlnaW5hbFZhbHVlID0gbmV3T3JpZ2luYWxWYWx1ZTsKKwkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQorCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgTW9kaWZpZXJQYWNrYWdlLlNURU1fVElNRV9SQU5HRV9NT0RJRklFUl9fT1JJR0lOQUxfVkFMVUUsIG9sZE9yaWdpbmFsVmFsdWUsIG9yaWdpbmFsVmFsdWUpKTsKKwl9CisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5pbXBsLkZlYXR1cmVNb2RpZmllckltcGwjdXBkYXRlRmVhdHVyZSgpCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgdXBkYXRlRmVhdHVyZSgpIHsKKwkJLy8gT3JpZ2luYWwgdmFsdWUgY2FwdHVyZWQgeWV0PworCQlpZiAoIWVJc1NldChNb2RpZmllclBhY2thZ2UuSU5URUdFUl9SQU5HRV9NT0RJRklFUl9fT1JJR0lOQUxfVkFMVUUpKSB7CisJCQkvLyBObworCQkJc2V0T3JpZ2luYWxWYWx1ZSgoU1RFTVRpbWUpZ2V0VGFyZ2V0KCkuZUdldChnZXRFU3RydWN0dXJhbEZlYXR1cmUoKSkpOworCQl9IC8vIGlmCisJCWdldFRhcmdldCgpLmVTZXQoZ2V0RVN0cnVjdHVyYWxGZWF0dXJlKCksIGdldE5leHRWYWx1ZSgpKTsKKwl9CisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5pbXBsLlJhbmdlTW9kaWZpZXJJbXBsI3Jlc2V0KCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCByZXNldCgpIHsKKwkJc3VwZXIucmVzZXQoKTsKKwkJZVVuc2V0KE1vZGlmaWVyUGFja2FnZS5TVEVNX1RJTUVfUkFOR0VfTU9ESUZJRVJfX05FWFRfVkFMVUUpOworCQlnZXRUYXJnZXQoKS5lU2V0KGdldEVTdHJ1Y3R1cmFsRmVhdHVyZSgpLCBnZXRPcmlnaW5hbFZhbHVlKCkpOworCQlzZXRPcmlnaW5hbFZhbHVlKG51bGwpOyAvLyBUbyBtYWtlIHN1cmUgd2UgY2FwdHVyZSBhbnkgbmV3IHZhbHVlIG5leHQgdGltZSBzaW11bGF0aW9uIGlzIHJ1bgorCX0KKwkKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uU2FuaXR5Q2hlY2tlciNzYW5lKCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgYm9vbGVhbiBzYW5lKCkgeworCQlib29sZWFuIHJldFZhbHVlID0gc3VwZXIuc2FuZSgpOworCQlhc3NlcnQgcmV0VmFsdWU7CisKKwkJcmV0VmFsdWUgPSByZXRWYWx1ZQorCQkJCSYmICEoKGdldEVuZFZhbHVlKCkpLmdldFRpbWUoKS5iZWZvcmUoKGdldFN0YXJ0VmFsdWUoKSkuZ2V0VGltZSgpKSk7CisJCWFzc2VydCByZXRWYWx1ZTsKKworCQlyZXRWYWx1ZSA9IHJldFZhbHVlICYmIGdldEluY3JlbWVudCgpID4gMDsKKwkJYXNzZXJ0IHJldFZhbHVlOworCisJCXJldHVybiByZXRWYWx1ZTsKKwl9IC8vIHNhbmUKKworfSAvLyBTVEVNVGltZVJhbmdlTW9kaWZpZXJJbXBsCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL21vZGlmaWVyL2ltcGwvU1RFTVRpbWVTZXF1ZW5jZU1vZGlmaWVySW1wbC5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9tb2RpZmllci9pbXBsL1NURU1UaW1lU2VxdWVuY2VNb2RpZmllckltcGwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iOWIyNWZiCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9tb2RpZmllci9pbXBsL1NURU1UaW1lU2VxdWVuY2VNb2RpZmllckltcGwuamF2YQpAQCAtMCwwICsxLDE3OSBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuaW1wbDsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5FTGlzdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS51dGlsLkVPYmplY3RSZXNvbHZpbmdFTGlzdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuU1RFTVRpbWU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLk1vZGlmaWVyUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuU1RFTVRpbWVTZXF1ZW5jZU1vZGlmaWVyOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiBBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+U1RFTSBUaW1lIFNlcXVlbmNlIE1vZGlmaWVyPC9iPjwvZW0+Jy4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogPHA+CisgKiBUaGUgZm9sbG93aW5nIGZlYXR1cmVzIGFyZSBpbXBsZW1lbnRlZDoKKyAqIDx1bD4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuaW1wbC5TVEVNVGltZVNlcXVlbmNlTW9kaWZpZXJJbXBsI2dldFNlcXVlbmNlIDxlbT5TZXF1ZW5jZTwvZW0+fTwvbGk+CisgKiA8L3VsPgorICogPC9wPgorICoKKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIFNURU1UaW1lU2VxdWVuY2VNb2RpZmllckltcGwgZXh0ZW5kcyBTZXF1ZW5jZU1vZGlmaWVySW1wbCBpbXBsZW1lbnRzIFNURU1UaW1lU2VxdWVuY2VNb2RpZmllciB7CisJLyoqCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0U2VxdWVuY2UoKSA8ZW0+U2VxdWVuY2U8L2VtPn0nIHJlZmVyZW5jZSBsaXN0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZ2V0U2VxdWVuY2UoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBFTGlzdDxTVEVNVGltZT4gc2VxdWVuY2U7CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgU1RFTVRpbWVTZXF1ZW5jZU1vZGlmaWVySW1wbCgpIHsKKwkJc3VwZXIoKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgRUNsYXNzIGVTdGF0aWNDbGFzcygpIHsKKwkJcmV0dXJuIE1vZGlmaWVyUGFja2FnZS5MaXRlcmFscy5TVEVNX1RJTUVfU0VRVUVOQ0VfTU9ESUZJRVI7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVMaXN0PFNURU1UaW1lPiBnZXRTZXF1ZW5jZSgpIHsKKwkJaWYgKHNlcXVlbmNlID09IG51bGwpIHsKKwkJCXNlcXVlbmNlID0gbmV3IEVPYmplY3RSZXNvbHZpbmdFTGlzdDxTVEVNVGltZT4oU1RFTVRpbWUuY2xhc3MsIHRoaXMsIE1vZGlmaWVyUGFja2FnZS5TVEVNX1RJTUVfU0VRVUVOQ0VfTU9ESUZJRVJfX1NFUVVFTkNFKTsKKwkJfQorCQlyZXR1cm4gc2VxdWVuY2U7CisJfQorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuaW1wbC5TZXF1ZW5jZU1vZGlmaWVySW1wbCNnZXROZXh0VmFsdWUoKQorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBPYmplY3QgZ2V0TmV4dFZhbHVlKCkgeworCQlpbnQgaW5kZXggPSBnZXRDdXJyZW50U2VxdWVuY2VJbmRleCgpOworCQlmaW5hbCBPYmplY3QgcmV0VmFsdWUgPSBnZXRTZXF1ZW5jZSgpLmdldChpbmRleCsrKTsKKwkJc2V0Q3VycmVudFNlcXVlbmNlSW5kZXgoaW5kZXgpOwkJCisJCWN1cnJlbnRWYWx1ZVRleHQgPSByZXRWYWx1ZS50b1N0cmluZygpOworCQlyZXR1cm4gcmV0VmFsdWU7CisJfSAvLyBnZXROZXh0VmFsdWUKKwkKKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLmltcGwuU2VxdWVuY2VNb2RpZmllckltcGwjZ2V0U2VxdWVuY2VTaXplKCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgaW50IGdldFNlcXVlbmNlU2l6ZSgpIHsKKwkJcmV0dXJuIGdldFNlcXVlbmNlKCkuc2l6ZSgpOworCX0gLy8gZ2V0U2VxdWVuY2VTaXplCisJCisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5pbXBsLkZlYXR1cmVNb2RpZmllckltcGwjdXBkYXRlRmVhdHVyZSgpCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgdXBkYXRlRmVhdHVyZSgpIHsKKwkJc3VwZXIudXBkYXRlRmVhdHVyZSgpOworCQlnZXRUYXJnZXQoKS5lU2V0KGdldEVTdHJ1Y3R1cmFsRmVhdHVyZSgpLCBnZXROZXh0VmFsdWUoKSk7CisJfQorCQorCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLmltcGwuRmVhdHVyZU1vZGlmaWVySW1wbCNyZXNldCgpCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgcmVzZXQoKSB7CisJCXN1cGVyLnJlc2V0KCk7CisJCWdldFRhcmdldCgpLmVTZXQoZ2V0RVN0cnVjdHVyYWxGZWF0dXJlKCksIGdldE9yaWdpbmFsVmFsdWUoKSk7CisJCXNldE9yaWdpbmFsVmFsdWUoT1JJR0lOQUxfVkFMVUVfRURFRkFVTFQpOyAvLyBUbyBtYWtlIHN1cmUgd2UgY2FwdHVyZSBhbnkgbmV3IHZhbHVlIG5leHQgdGltZSBzaW11bGF0aW9uIGlzIHJ1bgorCX0KKwkKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgT2JqZWN0IGVHZXQoaW50IGZlYXR1cmVJRCwgYm9vbGVhbiByZXNvbHZlLCBib29sZWFuIGNvcmVUeXBlKSB7CisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7CisJCQljYXNlIE1vZGlmaWVyUGFja2FnZS5TVEVNX1RJTUVfU0VRVUVOQ0VfTU9ESUZJRVJfX1NFUVVFTkNFOgorCQkJCXJldHVybiBnZXRTZXF1ZW5jZSgpOworCQl9CisJCXJldHVybiBzdXBlci5lR2V0KGZlYXR1cmVJRCwgcmVzb2x2ZSwgY29yZVR5cGUpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBTdXBwcmVzc1dhcm5pbmdzKCJ1bmNoZWNrZWQiKQorCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGVTZXQoaW50IGZlYXR1cmVJRCwgT2JqZWN0IG5ld1ZhbHVlKSB7CisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7CisJCQljYXNlIE1vZGlmaWVyUGFja2FnZS5TVEVNX1RJTUVfU0VRVUVOQ0VfTU9ESUZJRVJfX1NFUVVFTkNFOgorCQkJCWdldFNlcXVlbmNlKCkuY2xlYXIoKTsKKwkJCQlnZXRTZXF1ZW5jZSgpLmFkZEFsbCgoQ29sbGVjdGlvbjw/IGV4dGVuZHMgU1RFTVRpbWU+KW5ld1ZhbHVlKTsKKwkJCQlyZXR1cm47CisJCX0KKwkJc3VwZXIuZVNldChmZWF0dXJlSUQsIG5ld1ZhbHVlKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBlVW5zZXQoaW50IGZlYXR1cmVJRCkgeworCQlzd2l0Y2ggKGZlYXR1cmVJRCkgeworCQkJY2FzZSBNb2RpZmllclBhY2thZ2UuU1RFTV9USU1FX1NFUVVFTkNFX01PRElGSUVSX19TRVFVRU5DRToKKwkJCQlnZXRTZXF1ZW5jZSgpLmNsZWFyKCk7CisJCQkJcmV0dXJuOworCQl9CisJCXN1cGVyLmVVbnNldChmZWF0dXJlSUQpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBib29sZWFuIGVJc1NldChpbnQgZmVhdHVyZUlEKSB7CisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7CisJCQljYXNlIE1vZGlmaWVyUGFja2FnZS5TVEVNX1RJTUVfU0VRVUVOQ0VfTU9ESUZJRVJfX1NFUVVFTkNFOgorCQkJCXJldHVybiBzZXF1ZW5jZSAhPSBudWxsICYmICFzZXF1ZW5jZS5pc0VtcHR5KCk7CisJCX0KKwkJcmV0dXJuIHN1cGVyLmVJc1NldChmZWF0dXJlSUQpOworCX0KKworfSAvL1NURU1UaW1lU2VxdWVuY2VNb2RpZmllckltcGwKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvbW9kaWZpZXIvaW1wbC9TZXF1ZW5jZU1vZGlmaWVySW1wbC5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9tb2RpZmllci9pbXBsL1NlcXVlbmNlTW9kaWZpZXJJbXBsLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWIzNWFmNQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvbW9kaWZpZXIvaW1wbC9TZXF1ZW5jZU1vZGlmaWVySW1wbC5qYXZhCkBAIC0wLDAgKzEsMzA5IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5pbXBsOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5pbXBsLkVOb3RpZmljYXRpb25JbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5Nb2RpZmllclBhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLlNlcXVlbmNlTW9kaWZpZXI7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIEFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5TZXF1ZW5jZSBNb2RpZmllcjwvYj48L2VtPicuCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIDxwPgorICogVGhlIGZvbGxvd2luZyBmZWF0dXJlcyBhcmUgaW1wbGVtZW50ZWQ6CisgKiA8dWw+CisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLmltcGwuU2VxdWVuY2VNb2RpZmllckltcGwjZ2V0U2VxdWVuY2VTaXplIDxlbT5TZXF1ZW5jZSBTaXplPC9lbT59PC9saT4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuaW1wbC5TZXF1ZW5jZU1vZGlmaWVySW1wbCNnZXRDdXJyZW50U2VxdWVuY2VJbmRleCA8ZW0+Q3VycmVudCBTZXF1ZW5jZSBJbmRleDwvZW0+fTwvbGk+CisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLmltcGwuU2VxdWVuY2VNb2RpZmllckltcGwjZ2V0TmV4dFZhbHVlIDxlbT5OZXh0IFZhbHVlPC9lbT59PC9saT4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuaW1wbC5TZXF1ZW5jZU1vZGlmaWVySW1wbCNnZXRPcmlnaW5hbFZhbHVlIDxlbT5PcmlnaW5hbCBWYWx1ZTwvZW0+fTwvbGk+CisgKiA8L3VsPgorICogPC9wPgorICoKKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGFic3RyYWN0IGNsYXNzIFNlcXVlbmNlTW9kaWZpZXJJbXBsIGV4dGVuZHMgRmVhdHVyZU1vZGlmaWVySW1wbCBpbXBsZW1lbnRzIFNlcXVlbmNlTW9kaWZpZXIgeworCS8qKgorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRTZXF1ZW5jZVNpemUoKSA8ZW0+U2VxdWVuY2UgU2l6ZTwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZ2V0U2VxdWVuY2VTaXplKCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIGludCBTRVFVRU5DRV9TSVpFX0VERUZBVUxUID0gMDsKKworCS8qKgorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRDdXJyZW50U2VxdWVuY2VJbmRleCgpIDxlbT5DdXJyZW50IFNlcXVlbmNlIEluZGV4PC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNnZXRDdXJyZW50U2VxdWVuY2VJbmRleCgpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBpbnQgQ1VSUkVOVF9TRVFVRU5DRV9JTkRFWF9FREVGQVVMVCA9IDA7CisJLyoqCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0Q3VycmVudFNlcXVlbmNlSW5kZXgoKSA8ZW0+Q3VycmVudCBTZXF1ZW5jZSBJbmRleDwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZ2V0Q3VycmVudFNlcXVlbmNlSW5kZXgoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBpbnQgY3VycmVudFNlcXVlbmNlSW5kZXggPSBDVVJSRU5UX1NFUVVFTkNFX0lOREVYX0VERUZBVUxUOworCisJLyoqCisJICogVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldE5leHRWYWx1ZSgpIDxlbT5OZXh0IFZhbHVlPC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNnZXROZXh0VmFsdWUoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgT2JqZWN0IE5FWFRfVkFMVUVfRURFRkFVTFQgPSBudWxsOworCisJLyoqCisJICogVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldE9yaWdpbmFsVmFsdWUoKSA8ZW0+T3JpZ2luYWwgVmFsdWU8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI2dldE9yaWdpbmFsVmFsdWUoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgT2JqZWN0IE9SSUdJTkFMX1ZBTFVFX0VERUZBVUxUID0gbnVsbDsKKworCS8qKgorCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldE9yaWdpbmFsVmFsdWUoKSA8ZW0+T3JpZ2luYWwgVmFsdWU8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI2dldE9yaWdpbmFsVmFsdWUoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBPYmplY3Qgb3JpZ2luYWxWYWx1ZSA9IE9SSUdJTkFMX1ZBTFVFX0VERUZBVUxUOworCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIFNlcXVlbmNlTW9kaWZpZXJJbXBsKCkgeworCQlzdXBlcigpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCBFQ2xhc3MgZVN0YXRpY0NsYXNzKCkgeworCQlyZXR1cm4gTW9kaWZpZXJQYWNrYWdlLkxpdGVyYWxzLlNFUVVFTkNFX01PRElGSUVSOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBpbnQgZ2V0U2VxdWVuY2VTaXplKCkgeworCQkvLyBUT0RPOiBpbXBsZW1lbnQgdGhpcyBtZXRob2QgdG8gcmV0dXJuIHRoZSAnU2VxdWVuY2UgU2l6ZScgYXR0cmlidXRlCisJCS8vIEVuc3VyZSB0aGF0IHlvdSByZW1vdmUgQGdlbmVyYXRlZCBvciBtYXJrIGl0IEBnZW5lcmF0ZWQgTk9UCisJCXRocm93IG5ldyBVbnN1cHBvcnRlZE9wZXJhdGlvbkV4Y2VwdGlvbigpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBpbnQgZ2V0Q3VycmVudFNlcXVlbmNlSW5kZXgoKSB7CisJCXJldHVybiBjdXJyZW50U2VxdWVuY2VJbmRleDsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRDdXJyZW50U2VxdWVuY2VJbmRleChpbnQgbmV3Q3VycmVudFNlcXVlbmNlSW5kZXgpIHsKKwkJaW50IG9sZEN1cnJlbnRTZXF1ZW5jZUluZGV4ID0gY3VycmVudFNlcXVlbmNlSW5kZXg7CisJCWN1cnJlbnRTZXF1ZW5jZUluZGV4ID0gbmV3Q3VycmVudFNlcXVlbmNlSW5kZXg7CisJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkKKwkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIE1vZGlmaWVyUGFja2FnZS5TRVFVRU5DRV9NT0RJRklFUl9fQ1VSUkVOVF9TRVFVRU5DRV9JTkRFWCwgb2xkQ3VycmVudFNlcXVlbmNlSW5kZXgsIGN1cnJlbnRTZXF1ZW5jZUluZGV4KSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogCisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlhYnN0cmFjdCBwdWJsaWMgT2JqZWN0IGdldE5leHRWYWx1ZSgpOworCQkKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgYm9vbGVhbiBpc1NldE5leHRWYWx1ZSgpIHsKKwkJLy8gVE9ETzogaW1wbGVtZW50IHRoaXMgbWV0aG9kIHRvIHJldHVybiB3aGV0aGVyIHRoZSAnTmV4dCBWYWx1ZScgYXR0cmlidXRlIGlzIHNldAorCQkvLyBFbnN1cmUgdGhhdCB5b3UgcmVtb3ZlIEBnZW5lcmF0ZWQgb3IgbWFyayBpdCBAZ2VuZXJhdGVkIE5PVAorCQl0aHJvdyBuZXcgVW5zdXBwb3J0ZWRPcGVyYXRpb25FeGNlcHRpb24oKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgT2JqZWN0IGdldE9yaWdpbmFsVmFsdWUoKSB7CisJCXJldHVybiBvcmlnaW5hbFZhbHVlOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIHNldE9yaWdpbmFsVmFsdWUoT2JqZWN0IG5ld09yaWdpbmFsVmFsdWUpIHsKKwkJT2JqZWN0IG9sZE9yaWdpbmFsVmFsdWUgPSBvcmlnaW5hbFZhbHVlOworCQlvcmlnaW5hbFZhbHVlID0gbmV3T3JpZ2luYWxWYWx1ZTsKKwkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQorCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgTW9kaWZpZXJQYWNrYWdlLlNFUVVFTkNFX01PRElGSUVSX19PUklHSU5BTF9WQUxVRSwgb2xkT3JpZ2luYWxWYWx1ZSwgb3JpZ2luYWxWYWx1ZSkpOworCX0KKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLmltcGwuRmVhdHVyZU1vZGlmaWVySW1wbCNpc0NvbXBsZXRlKCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgYm9vbGVhbiBpc0NvbXBsZXRlKCkgeworCQlyZXR1cm4gZ2V0Q3VycmVudFNlcXVlbmNlSW5kZXgoKSA+PSBnZXRTZXF1ZW5jZVNpemUoKTsKKwl9IC8vIGlzQ29tcGxldGUKKworCQorCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLmltcGwuRmVhdHVyZU1vZGlmaWVySW1wbCNyZXNldCgpCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgcmVzZXQoKSB7CisJCXNldEN1cnJlbnRTZXF1ZW5jZUluZGV4KENVUlJFTlRfU0VRVUVOQ0VfSU5ERVhfRURFRkFVTFQpOwkJCisJfQorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuaW1wbC5GZWF0dXJlTW9kaWZpZXJJbXBsI3VwZGF0ZUZlYXR1cmUoKQorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIHVwZGF0ZUZlYXR1cmUoKSB7CisJCS8vIENhcHR1cmUgdGhlIG9yaWdpbmFsIHZhbHVlPworCQlpZiAoZ2V0Q3VycmVudFNlcXVlbmNlSW5kZXgoKSA9PSBDVVJSRU5UX1NFUVVFTkNFX0lOREVYX0VERUZBVUxUKSB7CisJCQkvLyBZZXMKKwkJCXNldE9yaWdpbmFsVmFsdWUoZ2V0VGFyZ2V0KCkuZUdldChnZXRFU3RydWN0dXJhbEZlYXR1cmUoKSkpOworCQl9IC8vIGlmCisJfSAvLyB1cGRhdGVGZWF0dXJlCisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgT2JqZWN0IGVHZXQoaW50IGZlYXR1cmVJRCwgYm9vbGVhbiByZXNvbHZlLCBib29sZWFuIGNvcmVUeXBlKSB7CisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7CisJCQljYXNlIE1vZGlmaWVyUGFja2FnZS5TRVFVRU5DRV9NT0RJRklFUl9fU0VRVUVOQ0VfU0laRToKKwkJCQlyZXR1cm4gZ2V0U2VxdWVuY2VTaXplKCk7CisJCQljYXNlIE1vZGlmaWVyUGFja2FnZS5TRVFVRU5DRV9NT0RJRklFUl9fQ1VSUkVOVF9TRVFVRU5DRV9JTkRFWDoKKwkJCQlyZXR1cm4gZ2V0Q3VycmVudFNlcXVlbmNlSW5kZXgoKTsKKwkJCWNhc2UgTW9kaWZpZXJQYWNrYWdlLlNFUVVFTkNFX01PRElGSUVSX19ORVhUX1ZBTFVFOgorCQkJCXJldHVybiBnZXROZXh0VmFsdWUoKTsKKwkJCWNhc2UgTW9kaWZpZXJQYWNrYWdlLlNFUVVFTkNFX01PRElGSUVSX19PUklHSU5BTF9WQUxVRToKKwkJCQlyZXR1cm4gZ2V0T3JpZ2luYWxWYWx1ZSgpOworCQl9CisJCXJldHVybiBzdXBlci5lR2V0KGZlYXR1cmVJRCwgcmVzb2x2ZSwgY29yZVR5cGUpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGVTZXQoaW50IGZlYXR1cmVJRCwgT2JqZWN0IG5ld1ZhbHVlKSB7CisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7CisJCQljYXNlIE1vZGlmaWVyUGFja2FnZS5TRVFVRU5DRV9NT0RJRklFUl9fQ1VSUkVOVF9TRVFVRU5DRV9JTkRFWDoKKwkJCQlzZXRDdXJyZW50U2VxdWVuY2VJbmRleCgoSW50ZWdlciluZXdWYWx1ZSk7CisJCQkJcmV0dXJuOworCQkJY2FzZSBNb2RpZmllclBhY2thZ2UuU0VRVUVOQ0VfTU9ESUZJRVJfX09SSUdJTkFMX1ZBTFVFOgorCQkJCXNldE9yaWdpbmFsVmFsdWUobmV3VmFsdWUpOworCQkJCXJldHVybjsKKwkJfQorCQlzdXBlci5lU2V0KGZlYXR1cmVJRCwgbmV3VmFsdWUpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGVVbnNldChpbnQgZmVhdHVyZUlEKSB7CisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7CisJCQljYXNlIE1vZGlmaWVyUGFja2FnZS5TRVFVRU5DRV9NT0RJRklFUl9fQ1VSUkVOVF9TRVFVRU5DRV9JTkRFWDoKKwkJCQlzZXRDdXJyZW50U2VxdWVuY2VJbmRleChDVVJSRU5UX1NFUVVFTkNFX0lOREVYX0VERUZBVUxUKTsKKwkJCQlyZXR1cm47CisJCQljYXNlIE1vZGlmaWVyUGFja2FnZS5TRVFVRU5DRV9NT0RJRklFUl9fT1JJR0lOQUxfVkFMVUU6CisJCQkJc2V0T3JpZ2luYWxWYWx1ZShPUklHSU5BTF9WQUxVRV9FREVGQVVMVCk7CisJCQkJcmV0dXJuOworCQl9CisJCXN1cGVyLmVVbnNldChmZWF0dXJlSUQpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBib29sZWFuIGVJc1NldChpbnQgZmVhdHVyZUlEKSB7CisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7CisJCQljYXNlIE1vZGlmaWVyUGFja2FnZS5TRVFVRU5DRV9NT0RJRklFUl9fU0VRVUVOQ0VfU0laRToKKwkJCQlyZXR1cm4gZ2V0U2VxdWVuY2VTaXplKCkgIT0gU0VRVUVOQ0VfU0laRV9FREVGQVVMVDsKKwkJCWNhc2UgTW9kaWZpZXJQYWNrYWdlLlNFUVVFTkNFX01PRElGSUVSX19DVVJSRU5UX1NFUVVFTkNFX0lOREVYOgorCQkJCXJldHVybiBjdXJyZW50U2VxdWVuY2VJbmRleCAhPSBDVVJSRU5UX1NFUVVFTkNFX0lOREVYX0VERUZBVUxUOworCQkJY2FzZSBNb2RpZmllclBhY2thZ2UuU0VRVUVOQ0VfTU9ESUZJRVJfX05FWFRfVkFMVUU6CisJCQkJcmV0dXJuIGlzU2V0TmV4dFZhbHVlKCk7CisJCQljYXNlIE1vZGlmaWVyUGFja2FnZS5TRVFVRU5DRV9NT0RJRklFUl9fT1JJR0lOQUxfVkFMVUU6CisJCQkJcmV0dXJuIE9SSUdJTkFMX1ZBTFVFX0VERUZBVUxUID09IG51bGwgPyBvcmlnaW5hbFZhbHVlICE9IG51bGwgOiAhT1JJR0lOQUxfVkFMVUVfRURFRkFVTFQuZXF1YWxzKG9yaWdpbmFsVmFsdWUpOworCQl9CisJCXJldHVybiBzdXBlci5lSXNTZXQoZmVhdHVyZUlEKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkgeworCQlpZiAoZUlzUHJveHkoKSkgcmV0dXJuIHN1cGVyLnRvU3RyaW5nKCk7CisKKwkJU3RyaW5nQnVmZmVyIHJlc3VsdCA9IG5ldyBTdHJpbmdCdWZmZXIoc3VwZXIudG9TdHJpbmcoKSk7CisJCXJlc3VsdC5hcHBlbmQoIiAoY3VycmVudFNlcXVlbmNlSW5kZXg6ICIpOyAvLyROT04tTkxTLTEkCisJCXJlc3VsdC5hcHBlbmQoY3VycmVudFNlcXVlbmNlSW5kZXgpOworCQlyZXN1bHQuYXBwZW5kKCIsIG9yaWdpbmFsVmFsdWU6ICIpOyAvLyROT04tTkxTLTEkCisJCXJlc3VsdC5hcHBlbmQob3JpZ2luYWxWYWx1ZSk7CisJCXJlc3VsdC5hcHBlbmQoJyknKTsKKwkJcmV0dXJuIHJlc3VsdC50b1N0cmluZygpOworCX0KKworfSAvL1NlcXVlbmNlTW9kaWZpZXJJbXBsCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL21vZGlmaWVyL2ltcGwvU2luZ2xlVmFsdWVNb2RpZmllckltcGwuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvbW9kaWZpZXIvaW1wbC9TaW5nbGVWYWx1ZU1vZGlmaWVySW1wbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNkMTU1MDAKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL21vZGlmaWVyL2ltcGwvU2luZ2xlVmFsdWVNb2RpZmllckltcGwuamF2YQpAQCAtMCwwICsxLDQ3IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5pbXBsOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA5IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLk1vZGlmaWVyUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuU2luZ2xlVmFsdWVNb2RpZmllcjsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPlNpbmdsZSBWYWx1ZSBNb2RpZmllcjwvYj48L2VtPicuCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIDxwPgorICogPC9wPgorICoKKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGFic3RyYWN0IGNsYXNzIFNpbmdsZVZhbHVlTW9kaWZpZXJJbXBsIGV4dGVuZHMgRmVhdHVyZU1vZGlmaWVySW1wbCBpbXBsZW1lbnRzIFNpbmdsZVZhbHVlTW9kaWZpZXIgeworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBTaW5nbGVWYWx1ZU1vZGlmaWVySW1wbCgpIHsKKwkJc3VwZXIoKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgRUNsYXNzIGVTdGF0aWNDbGFzcygpIHsKKwkJcmV0dXJuIE1vZGlmaWVyUGFja2FnZS5MaXRlcmFscy5TSU5HTEVfVkFMVUVfTU9ESUZJRVI7CisJfQorCit9IC8vU2luZ2xlVmFsdWVNb2RpZmllckltcGwKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvbW9kaWZpZXIvaW1wbC9TdHJpbmdOT1BNb2RpZmllckltcGwuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvbW9kaWZpZXIvaW1wbC9TdHJpbmdOT1BNb2RpZmllckltcGwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40M2Y3MGIwCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9tb2RpZmllci9pbXBsL1N0cmluZ05PUE1vZGlmaWVySW1wbC5qYXZhCkBAIC0wLDAgKzEsNDcgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLmltcGw7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzczsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuTW9kaWZpZXJQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5TdHJpbmdOT1BNb2RpZmllcjsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPlN0cmluZyBOT1AgTW9kaWZpZXI8L2I+PC9lbT4nLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiA8cD4KKyAqIDwvcD4KKyAqCisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBTdHJpbmdOT1BNb2RpZmllckltcGwgZXh0ZW5kcyBOT1BNb2RpZmllckltcGwgaW1wbGVtZW50cyBTdHJpbmdOT1BNb2RpZmllciB7CisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIFN0cmluZ05PUE1vZGlmaWVySW1wbCgpIHsKKwkJc3VwZXIoKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgRUNsYXNzIGVTdGF0aWNDbGFzcygpIHsKKwkJcmV0dXJuIE1vZGlmaWVyUGFja2FnZS5MaXRlcmFscy5TVFJJTkdfTk9QX01PRElGSUVSOworCX0KKworfSAvL1N0cmluZ05PUE1vZGlmaWVySW1wbApkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9tb2RpZmllci9pbXBsL1N0cmluZ1NlcXVlbmNlTW9kaWZpZXJJbXBsLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL21vZGlmaWVyL2ltcGwvU3RyaW5nU2VxdWVuY2VNb2RpZmllckltcGwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZDQ4Njg3Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9tb2RpZmllci9pbXBsL1N0cmluZ1NlcXVlbmNlTW9kaWZpZXJJbXBsLmphdmEKQEAgLTAsMCArMSwxOTQgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLmltcGw7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuRUxpc3Q7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzczsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUudXRpbC5FRGF0YVR5cGVVbmlxdWVFTGlzdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuTW9kaWZpZXJQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5TdHJpbmdTZXF1ZW5jZU1vZGlmaWVyOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiBBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+U3RyaW5nIFNlcXVlbmNlIE1vZGlmaWVyPC9iPjwvZW0+Jy4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogPHA+CisgKiBUaGUgZm9sbG93aW5nIGZlYXR1cmVzIGFyZSBpbXBsZW1lbnRlZDoKKyAqIDx1bD4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuaW1wbC5TdHJpbmdTZXF1ZW5jZU1vZGlmaWVySW1wbCNnZXRTZXF1ZW5jZSA8ZW0+U2VxdWVuY2U8L2VtPn08L2xpPgorICogPC91bD4KKyAqIDwvcD4KKyAqCisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBTdHJpbmdTZXF1ZW5jZU1vZGlmaWVySW1wbCBleHRlbmRzIFNlcXVlbmNlTW9kaWZpZXJJbXBsIGltcGxlbWVudHMgU3RyaW5nU2VxdWVuY2VNb2RpZmllciB7CisJLyoqCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0U2VxdWVuY2UoKSA8ZW0+U2VxdWVuY2U8L2VtPn0nIGF0dHJpYnV0ZSBsaXN0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZ2V0U2VxdWVuY2UoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBFTGlzdDxTdHJpbmc+IHNlcXVlbmNlOworCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIFN0cmluZ1NlcXVlbmNlTW9kaWZpZXJJbXBsKCkgeworCQlzdXBlcigpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCBFQ2xhc3MgZVN0YXRpY0NsYXNzKCkgeworCQlyZXR1cm4gTW9kaWZpZXJQYWNrYWdlLkxpdGVyYWxzLlNUUklOR19TRVFVRU5DRV9NT0RJRklFUjsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUxpc3Q8U3RyaW5nPiBnZXRTZXF1ZW5jZSgpIHsKKwkJaWYgKHNlcXVlbmNlID09IG51bGwpIHsKKwkJCXNlcXVlbmNlID0gbmV3IEVEYXRhVHlwZVVuaXF1ZUVMaXN0PFN0cmluZz4oU3RyaW5nLmNsYXNzLCB0aGlzLCBNb2RpZmllclBhY2thZ2UuU1RSSU5HX1NFUVVFTkNFX01PRElGSUVSX19TRVFVRU5DRSk7CisJCX0KKwkJcmV0dXJuIHNlcXVlbmNlOworCX0KKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLmltcGwuU2VxdWVuY2VNb2RpZmllckltcGwjZ2V0TmV4dFZhbHVlKCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgT2JqZWN0IGdldE5leHRWYWx1ZSgpIHsKKwkJaW50IGluZGV4ID0gZ2V0Q3VycmVudFNlcXVlbmNlSW5kZXgoKTsKKwkJZmluYWwgT2JqZWN0IHJldFZhbHVlID0gZ2V0U2VxdWVuY2UoKS5nZXQoaW5kZXgrKyk7CisJCXNldEN1cnJlbnRTZXF1ZW5jZUluZGV4KGluZGV4KTsJCisJCWN1cnJlbnRWYWx1ZVRleHQgPSByZXRWYWx1ZS50b1N0cmluZygpOworCQlyZXR1cm4gcmV0VmFsdWU7CisJfSAvLyBnZXROZXh0VmFsdWUKKwkKKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLmltcGwuU2VxdWVuY2VNb2RpZmllckltcGwjZ2V0U2VxdWVuY2VTaXplKCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgaW50IGdldFNlcXVlbmNlU2l6ZSgpIHsKKwkJcmV0dXJuIGdldFNlcXVlbmNlKCkuc2l6ZSgpOworCX0gLy8gZ2V0U2VxdWVuY2VTaXplCisJCisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5pbXBsLkZlYXR1cmVNb2RpZmllckltcGwjdXBkYXRlRmVhdHVyZSgpCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgdXBkYXRlRmVhdHVyZSgpIHsKKwkJc3VwZXIudXBkYXRlRmVhdHVyZSgpOworCQlnZXRUYXJnZXQoKS5lU2V0KGdldEVTdHJ1Y3R1cmFsRmVhdHVyZSgpLCBnZXROZXh0VmFsdWUoKSk7CisJfQorCQorCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLmltcGwuRmVhdHVyZU1vZGlmaWVySW1wbCNyZXNldCgpCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgcmVzZXQoKSB7CisJCXN1cGVyLnJlc2V0KCk7CisJCWdldFRhcmdldCgpLmVTZXQoZ2V0RVN0cnVjdHVyYWxGZWF0dXJlKCksIGdldE9yaWdpbmFsVmFsdWUoKSk7CisJCXNldE9yaWdpbmFsVmFsdWUoT1JJR0lOQUxfVkFMVUVfRURFRkFVTFQpOyAvLyBUbyBtYWtlIHN1cmUgd2UgY2FwdHVyZSBhbnkgbmV3IHZhbHVlIG5leHQgdGltZSBzaW11bGF0aW9uIGlzIHJ1bgorCX0KKwkKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgT2JqZWN0IGVHZXQoaW50IGZlYXR1cmVJRCwgYm9vbGVhbiByZXNvbHZlLCBib29sZWFuIGNvcmVUeXBlKSB7CisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7CisJCQljYXNlIE1vZGlmaWVyUGFja2FnZS5TVFJJTkdfU0VRVUVOQ0VfTU9ESUZJRVJfX1NFUVVFTkNFOgorCQkJCXJldHVybiBnZXRTZXF1ZW5jZSgpOworCQl9CisJCXJldHVybiBzdXBlci5lR2V0KGZlYXR1cmVJRCwgcmVzb2x2ZSwgY29yZVR5cGUpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBTdXBwcmVzc1dhcm5pbmdzKCJ1bmNoZWNrZWQiKQorCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGVTZXQoaW50IGZlYXR1cmVJRCwgT2JqZWN0IG5ld1ZhbHVlKSB7CisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7CisJCQljYXNlIE1vZGlmaWVyUGFja2FnZS5TVFJJTkdfU0VRVUVOQ0VfTU9ESUZJRVJfX1NFUVVFTkNFOgorCQkJCWdldFNlcXVlbmNlKCkuY2xlYXIoKTsKKwkJCQlnZXRTZXF1ZW5jZSgpLmFkZEFsbCgoQ29sbGVjdGlvbjw/IGV4dGVuZHMgU3RyaW5nPiluZXdWYWx1ZSk7CisJCQkJcmV0dXJuOworCQl9CisJCXN1cGVyLmVTZXQoZmVhdHVyZUlELCBuZXdWYWx1ZSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgZVVuc2V0KGludCBmZWF0dXJlSUQpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJCWNhc2UgTW9kaWZpZXJQYWNrYWdlLlNUUklOR19TRVFVRU5DRV9NT0RJRklFUl9fU0VRVUVOQ0U6CisJCQkJZ2V0U2VxdWVuY2UoKS5jbGVhcigpOworCQkJCXJldHVybjsKKwkJfQorCQlzdXBlci5lVW5zZXQoZmVhdHVyZUlEKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgYm9vbGVhbiBlSXNTZXQoaW50IGZlYXR1cmVJRCkgeworCQlzd2l0Y2ggKGZlYXR1cmVJRCkgeworCQkJY2FzZSBNb2RpZmllclBhY2thZ2UuU1RSSU5HX1NFUVVFTkNFX01PRElGSUVSX19TRVFVRU5DRToKKwkJCQlyZXR1cm4gc2VxdWVuY2UgIT0gbnVsbCAmJiAhc2VxdWVuY2UuaXNFbXB0eSgpOworCQl9CisJCXJldHVybiBzdXBlci5lSXNTZXQoZmVhdHVyZUlEKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkgeworCQlpZiAoZUlzUHJveHkoKSkgcmV0dXJuIHN1cGVyLnRvU3RyaW5nKCk7CisKKwkJU3RyaW5nQnVmZmVyIHJlc3VsdCA9IG5ldyBTdHJpbmdCdWZmZXIoc3VwZXIudG9TdHJpbmcoKSk7CisJCXJlc3VsdC5hcHBlbmQoIiAoc2VxdWVuY2U6ICIpOyAvLyROT04tTkxTLTEkCisJCXJlc3VsdC5hcHBlbmQoc2VxdWVuY2UpOworCQlyZXN1bHQuYXBwZW5kKCcpJyk7CisJCXJldHVybiByZXN1bHQudG9TdHJpbmcoKTsKKwl9CisKK30gLy9TdHJpbmdTZXF1ZW5jZU1vZGlmaWVySW1wbApkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9tb2RpZmllci9wcm92aWRlci9Eb3VibGVNb2RpZmllckl0ZW1Qcm92aWRlci5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9tb2RpZmllci9wcm92aWRlci9Eb3VibGVNb2RpZmllckl0ZW1Qcm92aWRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAzMWVhNmYKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL21vZGlmaWVyL3Byb3ZpZGVyL0RvdWJsZU1vZGlmaWVySXRlbVByb3ZpZGVyLmphdmEKQEAgLTAsMCArMSwxODggQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLnByb3ZpZGVyOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA5IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCitpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5BZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JRWRpdGluZ0RvbWFpbkl0ZW1Qcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbUxhYmVsUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1Qcm9wZXJ0eVNvdXJjZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JU3RydWN0dXJlZEl0ZW1Db250ZW50UHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVRyZWVJdGVtQ29udGVudFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuVmlld2VyTm90aWZpY2F0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5Eb3VibGVNb2RpZmllcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuTW9kaWZpZXJQYWNrYWdlOworCisvKioKKyAqIFRoaXMgaXMgdGhlIGl0ZW0gcHJvdmlkZXIgYWRhcHRlciBmb3IgYSB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLkRvdWJsZU1vZGlmaWVyfSBvYmplY3QuCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBEb3VibGVNb2RpZmllckl0ZW1Qcm92aWRlcgorCWV4dGVuZHMgU2luZ2xlVmFsdWVNb2RpZmllckl0ZW1Qcm92aWRlcgorCWltcGxlbWVudHMKKwkJSUVkaXRpbmdEb21haW5JdGVtUHJvdmlkZXIsCisJCUlTdHJ1Y3R1cmVkSXRlbUNvbnRlbnRQcm92aWRlciwKKwkJSVRyZWVJdGVtQ29udGVudFByb3ZpZGVyLAorCQlJSXRlbUxhYmVsUHJvdmlkZXIsCisJCUlJdGVtUHJvcGVydHlTb3VyY2UgeworCS8qKgorCSAqIFRoaXMgY29uc3RydWN0cyBhbiBpbnN0YW5jZSBmcm9tIGEgZmFjdG9yeSBhbmQgYSBub3RpZmllci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRG91YmxlTW9kaWZpZXJJdGVtUHJvdmlkZXIoQWRhcHRlckZhY3RvcnkgYWRhcHRlckZhY3RvcnkpIHsKKwkJc3VwZXIoYWRhcHRlckZhY3RvcnkpOworCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyB0aGUgcHJvcGVydHkgZGVzY3JpcHRvcnMgZm9yIHRoZSBhZGFwdGVkIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBMaXN0PElJdGVtUHJvcGVydHlEZXNjcmlwdG9yPiBnZXRQcm9wZXJ0eURlc2NyaXB0b3JzKE9iamVjdCBvYmplY3QpIHsKKwkJaWYgKGl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzID09IG51bGwpIHsKKwkJCXN1cGVyLmdldFByb3BlcnR5RGVzY3JpcHRvcnMob2JqZWN0KTsKKworCQkJYWRkVmFsdWVQcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0KTsKKwkJCWFkZE9yaWdpbmFsVmFsdWVQcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0KTsKKwkJfQorCQlyZXR1cm4gaXRlbVByb3BlcnR5RGVzY3JpcHRvcnM7CisJfQorCisJLyoqCisJICogVGhpcyBhZGRzIGEgcHJvcGVydHkgZGVzY3JpcHRvciBmb3IgdGhlIFZhbHVlIGZlYXR1cmUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgYWRkVmFsdWVQcm9wZXJ0eURlc2NyaXB0b3IoT2JqZWN0IG9iamVjdCkgeworCQlpdGVtUHJvcGVydHlEZXNjcmlwdG9ycy5hZGQKKwkJCShjcmVhdGVJdGVtUHJvcGVydHlEZXNjcmlwdG9yCisJCQkJKCgoQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSlhZGFwdGVyRmFjdG9yeSkuZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCksCisJCQkJIGdldFJlc291cmNlTG9jYXRvcigpLAorCQkJCSBnZXRTdHJpbmcoIl9VSV9Eb3VibGVNb2RpZmllcl92YWx1ZV9mZWF0dXJlIiksIC8vJE5PTi1OTFMtMSQKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfUHJvcGVydHlEZXNjcmlwdG9yX2Rlc2NyaXB0aW9uIiwgIl9VSV9Eb3VibGVNb2RpZmllcl92YWx1ZV9mZWF0dXJlIiwgIl9VSV9Eb3VibGVNb2RpZmllcl90eXBlIiksIC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJCAvLyROT04tTkxTLTMkCisJCQkJIE1vZGlmaWVyUGFja2FnZS5MaXRlcmFscy5ET1VCTEVfTU9ESUZJRVJfX1ZBTFVFLAorCQkJCSB0cnVlLAorCQkJCSBmYWxzZSwKKwkJCQkgZmFsc2UsCisJCQkJIEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IuUkVBTF9WQUxVRV9JTUFHRSwKKwkJCQkgbnVsbCwKKwkJCQkgbnVsbCkpOworCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyBhIHByb3BlcnR5IGRlc2NyaXB0b3IgZm9yIHRoZSBPcmlnaW5hbCBWYWx1ZSBmZWF0dXJlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIGFkZE9yaWdpbmFsVmFsdWVQcm9wZXJ0eURlc2NyaXB0b3IoT2JqZWN0IG9iamVjdCkgeworCQlpdGVtUHJvcGVydHlEZXNjcmlwdG9ycy5hZGQKKwkJCShjcmVhdGVJdGVtUHJvcGVydHlEZXNjcmlwdG9yCisJCQkJKCgoQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSlhZGFwdGVyRmFjdG9yeSkuZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCksCisJCQkJIGdldFJlc291cmNlTG9jYXRvcigpLAorCQkJCSBnZXRTdHJpbmcoIl9VSV9Eb3VibGVNb2RpZmllcl9vcmlnaW5hbFZhbHVlX2ZlYXR1cmUiKSwgLy8kTk9OLU5MUy0xJAorCQkJCSBnZXRTdHJpbmcoIl9VSV9Qcm9wZXJ0eURlc2NyaXB0b3JfZGVzY3JpcHRpb24iLCAiX1VJX0RvdWJsZU1vZGlmaWVyX29yaWdpbmFsVmFsdWVfZmVhdHVyZSIsICJfVUlfRG91YmxlTW9kaWZpZXJfdHlwZSIpLCAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQgLy8kTk9OLU5MUy0zJAorCQkJCSBNb2RpZmllclBhY2thZ2UuTGl0ZXJhbHMuRE9VQkxFX01PRElGSUVSX19PUklHSU5BTF9WQUxVRSwKKwkJCQkgZmFsc2UsCisJCQkJIGZhbHNlLAorCQkJCSBmYWxzZSwKKwkJCQkgSXRlbVByb3BlcnR5RGVzY3JpcHRvci5SRUFMX1ZBTFVFX0lNQUdFLAorCQkJCSBudWxsLAorCQkJCSBudWxsKSk7CisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIERvdWJsZU1vZGlmaWVyLmdpZi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIE9iamVjdCBnZXRJbWFnZShPYmplY3Qgb2JqZWN0KSB7CisJCXJldHVybiBvdmVybGF5SW1hZ2Uob2JqZWN0LCBnZXRSZXNvdXJjZUxvY2F0b3IoKS5nZXRJbWFnZSgiZnVsbC9jdXN0b21vYmoxNi9Eb3VibGVNb2RpZmllci5wbmciKSk7IC8vJE5PTi1OTFMtMSQKKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgdGhlIGxhYmVsIHRleHQgZm9yIHRoZSBhZGFwdGVkIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBTdHJpbmcgZ2V0VGV4dEdlbihPYmplY3Qgb2JqZWN0KSB7CisJCVN0cmluZyBsYWJlbCA9ICgoRG91YmxlTW9kaWZpZXIpb2JqZWN0KS5nZXRGZWF0dXJlTmFtZSgpOworCQlyZXR1cm4gbGFiZWwgPT0gbnVsbCB8fCBsYWJlbC5sZW5ndGgoKSA9PSAwID8KKwkJCWdldFN0cmluZygiX1VJX0RvdWJsZU1vZGlmaWVyX3R5cGUiKSA6IC8vJE5PTi1OTFMtMSQKKwkJCWdldFN0cmluZygiX1VJX0RvdWJsZU1vZGlmaWVyX3R5cGUiKSArICIgIiArIGxhYmVsOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKKwl9CisJCisJLyoqCisJICogVGhpcyByZXR1cm5zIHRoZSBsYWJlbCB0ZXh0IGZvciB0aGUgYWRhcHRlZCBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIFN0cmluZyBnZXRUZXh0KE9iamVjdCBvYmplY3QpIHsKKwkJU3RyaW5nIGxhYmVsID0gKChEb3VibGVNb2RpZmllcilvYmplY3QpLmdldEZlYXR1cmVOYW1lKCk7CisJCXJldHVybiBsYWJlbCA9PSBudWxsIHx8IGxhYmVsLmxlbmd0aCgpID09IDAgPworCQkJZ2V0U3RyaW5nKCJfVUlfRG91YmxlTW9kaWZpZXJfdHlwZSIpIDogLy8kTk9OLU5MUy0xJAorCQkKKwkJIGxhYmVsKyIgIisoKERvdWJsZU1vZGlmaWVyKW9iamVjdCkuZ2V0VmFsdWUoKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGhhbmRsZXMgbW9kZWwgbm90aWZpY2F0aW9ucyBieSBjYWxsaW5nIHtAbGluayAjdXBkYXRlQ2hpbGRyZW59IHRvIHVwZGF0ZSBhbnkgY2FjaGVkCisJICogY2hpbGRyZW4gYW5kIGJ5IGNyZWF0aW5nIGEgdmlld2VyIG5vdGlmaWNhdGlvbiwgd2hpY2ggaXQgcGFzc2VzIHRvIHtAbGluayAjZmlyZU5vdGlmeUNoYW5nZWR9LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIG5vdGlmeUNoYW5nZWQoTm90aWZpY2F0aW9uIG5vdGlmaWNhdGlvbikgeworCQl1cGRhdGVDaGlsZHJlbihub3RpZmljYXRpb24pOworCisJCXN3aXRjaCAobm90aWZpY2F0aW9uLmdldEZlYXR1cmVJRChEb3VibGVNb2RpZmllci5jbGFzcykpIHsKKwkJCWNhc2UgTW9kaWZpZXJQYWNrYWdlLkRPVUJMRV9NT0RJRklFUl9fVkFMVUU6CisJCQljYXNlIE1vZGlmaWVyUGFja2FnZS5ET1VCTEVfTU9ESUZJRVJfX09SSUdJTkFMX1ZBTFVFOgorCQkJCWZpcmVOb3RpZnlDaGFuZ2VkKG5ldyBWaWV3ZXJOb3RpZmljYXRpb24obm90aWZpY2F0aW9uLCBub3RpZmljYXRpb24uZ2V0Tm90aWZpZXIoKSwgZmFsc2UsIHRydWUpKTsKKwkJCQlyZXR1cm47CisJCX0KKwkJc3VwZXIubm90aWZ5Q2hhbmdlZChub3RpZmljYXRpb24pOworCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmVkaXQuY29tbWFuZC5Db21tYW5kUGFyYW1ldGVyfXMgZGVzY3JpYmluZyB0aGUgY2hpbGRyZW4KKwkgKiB0aGF0IGNhbiBiZSBjcmVhdGVkIHVuZGVyIHRoaXMgb2JqZWN0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIGNvbGxlY3ROZXdDaGlsZERlc2NyaXB0b3JzKENvbGxlY3Rpb248T2JqZWN0PiBuZXdDaGlsZERlc2NyaXB0b3JzLCBPYmplY3Qgb2JqZWN0KSB7CisJCXN1cGVyLmNvbGxlY3ROZXdDaGlsZERlc2NyaXB0b3JzKG5ld0NoaWxkRGVzY3JpcHRvcnMsIG9iamVjdCk7CisJfQorCit9CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL21vZGlmaWVyL3Byb3ZpZGVyL0RvdWJsZU5PUE1vZGlmaWVySXRlbVByb3ZpZGVyLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL21vZGlmaWVyL3Byb3ZpZGVyL0RvdWJsZU5PUE1vZGlmaWVySXRlbVByb3ZpZGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGI0ZmM1ZQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvbW9kaWZpZXIvcHJvdmlkZXIvRG91YmxlTk9QTW9kaWZpZXJJdGVtUHJvdmlkZXIuamF2YQpAQCAtMCwwICsxLDEwNiBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIucHJvdmlkZXI7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LkFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JRWRpdGluZ0RvbWFpbkl0ZW1Qcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbUxhYmVsUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1Qcm9wZXJ0eVNvdXJjZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JU3RydWN0dXJlZEl0ZW1Db250ZW50UHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVRyZWVJdGVtQ29udGVudFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5Eb3VibGVOT1BNb2RpZmllcjsKKworLyoqCisgKiBUaGlzIGlzIHRoZSBpdGVtIHByb3ZpZGVyIGFkYXB0ZXIgZm9yIGEge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5Eb3VibGVOT1BNb2RpZmllcn0gb2JqZWN0LgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgRG91YmxlTk9QTW9kaWZpZXJJdGVtUHJvdmlkZXIKKwlleHRlbmRzIE5PUE1vZGlmaWVySXRlbVByb3ZpZGVyCisJaW1wbGVtZW50cworCQlJRWRpdGluZ0RvbWFpbkl0ZW1Qcm92aWRlciwKKwkJSVN0cnVjdHVyZWRJdGVtQ29udGVudFByb3ZpZGVyLAorCQlJVHJlZUl0ZW1Db250ZW50UHJvdmlkZXIsCisJCUlJdGVtTGFiZWxQcm92aWRlciwKKwkJSUl0ZW1Qcm9wZXJ0eVNvdXJjZSB7CisJLyoqCisJICogVGhpcyBjb25zdHJ1Y3RzIGFuIGluc3RhbmNlIGZyb20gYSBmYWN0b3J5IGFuZCBhIG5vdGlmaWVyLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBEb3VibGVOT1BNb2RpZmllckl0ZW1Qcm92aWRlcihBZGFwdGVyRmFjdG9yeSBhZGFwdGVyRmFjdG9yeSkgeworCQlzdXBlcihhZGFwdGVyRmFjdG9yeSk7CisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIHRoZSBwcm9wZXJ0eSBkZXNjcmlwdG9ycyBmb3IgdGhlIGFkYXB0ZWQgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIExpc3Q8SUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I+IGdldFByb3BlcnR5RGVzY3JpcHRvcnMoT2JqZWN0IG9iamVjdCkgeworCQlpZiAoaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMgPT0gbnVsbCkgeworCQkJc3VwZXIuZ2V0UHJvcGVydHlEZXNjcmlwdG9ycyhvYmplY3QpOworCisJCX0KKwkJcmV0dXJuIGl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzOworCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyB0aGUgbGFiZWwgdGV4dCBmb3IgdGhlIGFkYXB0ZWQgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIFN0cmluZyBnZXRUZXh0KE9iamVjdCBvYmplY3QpIHsKKwkJU3RyaW5nIGxhYmVsID0gKChEb3VibGVOT1BNb2RpZmllcilvYmplY3QpLmdldEZlYXR1cmVOYW1lKCk7CisJCXJldHVybiBsYWJlbCA9PSBudWxsIHx8IGxhYmVsLmxlbmd0aCgpID09IDAgPworCQkJZ2V0U3RyaW5nKCJfVUlfRG91YmxlTk9QTW9kaWZpZXJfdHlwZSIpIDogLy8kTk9OLU5MUy0xJAorCQkJZ2V0U3RyaW5nKCJfVUlfRG91YmxlTk9QTW9kaWZpZXJfdHlwZSIpICsgIiAiICsgbGFiZWw7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAorCX0KKworCS8qKgorCSAqIFRoaXMgaGFuZGxlcyBtb2RlbCBub3RpZmljYXRpb25zIGJ5IGNhbGxpbmcge0BsaW5rICN1cGRhdGVDaGlsZHJlbn0gdG8gdXBkYXRlIGFueSBjYWNoZWQKKwkgKiBjaGlsZHJlbiBhbmQgYnkgY3JlYXRpbmcgYSB2aWV3ZXIgbm90aWZpY2F0aW9uLCB3aGljaCBpdCBwYXNzZXMgdG8ge0BsaW5rICNmaXJlTm90aWZ5Q2hhbmdlZH0uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgbm90aWZ5Q2hhbmdlZChOb3RpZmljYXRpb24gbm90aWZpY2F0aW9uKSB7CisJCXVwZGF0ZUNoaWxkcmVuKG5vdGlmaWNhdGlvbik7CisJCXN1cGVyLm5vdGlmeUNoYW5nZWQobm90aWZpY2F0aW9uKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFkZHMge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lZGl0LmNvbW1hbmQuQ29tbWFuZFBhcmFtZXRlcn1zIGRlc2NyaWJpbmcgdGhlIGNoaWxkcmVuCisJICogdGhhdCBjYW4gYmUgY3JlYXRlZCB1bmRlciB0aGlzIG9iamVjdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgdm9pZCBjb2xsZWN0TmV3Q2hpbGREZXNjcmlwdG9ycyhDb2xsZWN0aW9uPE9iamVjdD4gbmV3Q2hpbGREZXNjcmlwdG9ycywgT2JqZWN0IG9iamVjdCkgeworCQlzdXBlci5jb2xsZWN0TmV3Q2hpbGREZXNjcmlwdG9ycyhuZXdDaGlsZERlc2NyaXB0b3JzLCBvYmplY3QpOworCX0KKworfQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9tb2RpZmllci9wcm92aWRlci9Eb3VibGVSYW5nZU1vZGlmaWVySXRlbVByb3ZpZGVyLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL21vZGlmaWVyL3Byb3ZpZGVyL0RvdWJsZVJhbmdlTW9kaWZpZXJJdGVtUHJvdmlkZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hODg0MDg4Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9tb2RpZmllci9wcm92aWRlci9Eb3VibGVSYW5nZU1vZGlmaWVySXRlbVByb3ZpZGVyLmphdmEKQEAgLTAsMCArMSwyMDggQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLnByb3ZpZGVyOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOworaW1wb3J0IGphdmEudXRpbC5MaXN0OworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkNvbXBvc2VhYmxlQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUVkaXRpbmdEb21haW5JdGVtUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1MYWJlbFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtUHJvcGVydHlEZXNjcmlwdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtUHJvcGVydHlTb3VyY2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVN0cnVjdHVyZWRJdGVtQ29udGVudFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklUcmVlSXRlbUNvbnRlbnRQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JdGVtUHJvcGVydHlEZXNjcmlwdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLlZpZXdlck5vdGlmaWNhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuRG91YmxlUmFuZ2VNb2RpZmllcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuTW9kaWZpZXJQYWNrYWdlOworCisvKioKKyAqIFRoaXMgaXMgdGhlIGl0ZW0gcHJvdmlkZXIgYWRhcHRlciBmb3IgYSB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLkRvdWJsZVJhbmdlTW9kaWZpZXJ9IG9iamVjdC4KKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIERvdWJsZVJhbmdlTW9kaWZpZXJJdGVtUHJvdmlkZXIKKwlleHRlbmRzIFJhbmdlTW9kaWZpZXJJdGVtUHJvdmlkZXIKKwlpbXBsZW1lbnRzCQorCQlJRWRpdGluZ0RvbWFpbkl0ZW1Qcm92aWRlciwJCisJCUlTdHJ1Y3R1cmVkSXRlbUNvbnRlbnRQcm92aWRlciwJCisJCUlUcmVlSXRlbUNvbnRlbnRQcm92aWRlciwJCisJCUlJdGVtTGFiZWxQcm92aWRlciwJCisJCUlJdGVtUHJvcGVydHlTb3VyY2UgeworCS8qKgorCSAqIFRoaXMgY29uc3RydWN0cyBhbiBpbnN0YW5jZSBmcm9tIGEgZmFjdG9yeSBhbmQgYSBub3RpZmllci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRG91YmxlUmFuZ2VNb2RpZmllckl0ZW1Qcm92aWRlcihBZGFwdGVyRmFjdG9yeSBhZGFwdGVyRmFjdG9yeSkgeworCQlzdXBlcihhZGFwdGVyRmFjdG9yeSk7CisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIHRoZSBwcm9wZXJ0eSBkZXNjcmlwdG9ycyBmb3IgdGhlIGFkYXB0ZWQgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIExpc3Q8SUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I+IGdldFByb3BlcnR5RGVzY3JpcHRvcnMoT2JqZWN0IG9iamVjdCkgeworCQlpZiAoaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMgPT0gbnVsbCkgeworCQkJc3VwZXIuZ2V0UHJvcGVydHlEZXNjcmlwdG9ycyhvYmplY3QpOworCisJCQlhZGRTdGFydFZhbHVlUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCk7CisJCQlhZGRFbmRWYWx1ZVByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QpOworCQkJYWRkSW5jcmVtZW50UHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCk7CisJCX0KKwkJcmV0dXJuIGl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzOworCX0KKwkKKworCS8qKgorCSAqIFRoaXMgYWRkcyBhIHByb3BlcnR5IGRlc2NyaXB0b3IgZm9yIHRoZSBTdGFydCBWYWx1ZSBmZWF0dXJlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIGFkZFN0YXJ0VmFsdWVQcm9wZXJ0eURlc2NyaXB0b3IoT2JqZWN0IG9iamVjdCkgeworCQlpdGVtUHJvcGVydHlEZXNjcmlwdG9ycy5hZGQKKwkJCShjcmVhdGVJdGVtUHJvcGVydHlEZXNjcmlwdG9yCisJCQkJKCgoQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSlhZGFwdGVyRmFjdG9yeSkuZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCksCisJCQkJIGdldFJlc291cmNlTG9jYXRvcigpLAorCQkJCSBnZXRTdHJpbmcoIl9VSV9Eb3VibGVSYW5nZU1vZGlmaWVyX3N0YXJ0VmFsdWVfZmVhdHVyZSIpLCAvLyROT04tTkxTLTEkCisJCQkJIGdldFN0cmluZygiX1VJX1Byb3BlcnR5RGVzY3JpcHRvcl9kZXNjcmlwdGlvbiIsICJfVUlfRG91YmxlUmFuZ2VNb2RpZmllcl9zdGFydFZhbHVlX2ZlYXR1cmUiLCAiX1VJX0RvdWJsZVJhbmdlTW9kaWZpZXJfdHlwZSIpLCAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQgLy8kTk9OLU5MUy0zJAorCQkJCSBNb2RpZmllclBhY2thZ2UuTGl0ZXJhbHMuRE9VQkxFX1JBTkdFX01PRElGSUVSX19TVEFSVF9WQUxVRSwKKwkJCQkgdHJ1ZSwKKwkJCQkgZmFsc2UsCisJCQkJIGZhbHNlLAorCQkJCSBJdGVtUHJvcGVydHlEZXNjcmlwdG9yLlJFQUxfVkFMVUVfSU1BR0UsCisJCQkJIG51bGwsCisJCQkJIG51bGwpKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFkZHMgYSBwcm9wZXJ0eSBkZXNjcmlwdG9yIGZvciB0aGUgRW5kIFZhbHVlIGZlYXR1cmUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgYWRkRW5kVmFsdWVQcm9wZXJ0eURlc2NyaXB0b3IoT2JqZWN0IG9iamVjdCkgeworCQlpdGVtUHJvcGVydHlEZXNjcmlwdG9ycy5hZGQKKwkJCShjcmVhdGVJdGVtUHJvcGVydHlEZXNjcmlwdG9yCisJCQkJKCgoQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSlhZGFwdGVyRmFjdG9yeSkuZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCksCisJCQkJIGdldFJlc291cmNlTG9jYXRvcigpLAorCQkJCSBnZXRTdHJpbmcoIl9VSV9Eb3VibGVSYW5nZU1vZGlmaWVyX2VuZFZhbHVlX2ZlYXR1cmUiKSwgLy8kTk9OLU5MUy0xJAorCQkJCSBnZXRTdHJpbmcoIl9VSV9Qcm9wZXJ0eURlc2NyaXB0b3JfZGVzY3JpcHRpb24iLCAiX1VJX0RvdWJsZVJhbmdlTW9kaWZpZXJfZW5kVmFsdWVfZmVhdHVyZSIsICJfVUlfRG91YmxlUmFuZ2VNb2RpZmllcl90eXBlIiksIC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJCAvLyROT04tTkxTLTMkCisJCQkJIE1vZGlmaWVyUGFja2FnZS5MaXRlcmFscy5ET1VCTEVfUkFOR0VfTU9ESUZJRVJfX0VORF9WQUxVRSwKKwkJCQkgdHJ1ZSwKKwkJCQkgZmFsc2UsCisJCQkJIGZhbHNlLAorCQkJCSBJdGVtUHJvcGVydHlEZXNjcmlwdG9yLlJFQUxfVkFMVUVfSU1BR0UsCisJCQkJIG51bGwsCisJCQkJIG51bGwpKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFkZHMgYSBwcm9wZXJ0eSBkZXNjcmlwdG9yIGZvciB0aGUgSW5jcmVtZW50IGZlYXR1cmUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgYWRkSW5jcmVtZW50UHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdCBvYmplY3QpIHsKKwkJaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMuYWRkCisJCQkoY3JlYXRlSXRlbVByb3BlcnR5RGVzY3JpcHRvcgorCQkJCSgoKENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnkpYWRhcHRlckZhY3RvcnkpLmdldFJvb3RBZGFwdGVyRmFjdG9yeSgpLAorCQkJCSBnZXRSZXNvdXJjZUxvY2F0b3IoKSwKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfRG91YmxlUmFuZ2VNb2RpZmllcl9pbmNyZW1lbnRfZmVhdHVyZSIpLCAvLyROT04tTkxTLTEkCisJCQkJIGdldFN0cmluZygiX1VJX1Byb3BlcnR5RGVzY3JpcHRvcl9kZXNjcmlwdGlvbiIsICJfVUlfRG91YmxlUmFuZ2VNb2RpZmllcl9pbmNyZW1lbnRfZmVhdHVyZSIsICJfVUlfRG91YmxlUmFuZ2VNb2RpZmllcl90eXBlIiksIC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJCAvLyROT04tTkxTLTMkCisJCQkJIE1vZGlmaWVyUGFja2FnZS5MaXRlcmFscy5ET1VCTEVfUkFOR0VfTU9ESUZJRVJfX0lOQ1JFTUVOVCwKKwkJCQkgdHJ1ZSwKKwkJCQkgZmFsc2UsCisJCQkJIGZhbHNlLAorCQkJCSBJdGVtUHJvcGVydHlEZXNjcmlwdG9yLlJFQUxfVkFMVUVfSU1BR0UsCisJCQkJIG51bGwsCisJCQkJIG51bGwpKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgdGhlIGxhYmVsIHRleHQgZm9yIHRoZSBhZGFwdGVkIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgU3RyaW5nIGdldFRleHQoT2JqZWN0IG9iamVjdCkgeworCQlmaW5hbCBEb3VibGVSYW5nZU1vZGlmaWVyIHJtID0gKERvdWJsZVJhbmdlTW9kaWZpZXIpb2JqZWN0OworCQlmaW5hbCBTdHJpbmdCdWlsZGVyIHNiID0gbmV3IFN0cmluZ0J1aWxkZXIocm0uZ2V0RmVhdHVyZU5hbWUoKSk7CisJCXNiLmFwcGVuZCgiOiAiKTsKKwkJc2IuYXBwZW5kKHJtLmdldFN0YXJ0VmFsdWUoKSk7CisJCXNiLmFwcGVuZCgiIHRvICIpOworCQlzYi5hcHBlbmQocm0uZ2V0RW5kVmFsdWUoKSk7CisJCXNiLmFwcGVuZCgiIGJ5ICIpOworCQlzYi5hcHBlbmQocm0uZ2V0SW5jcmVtZW50KCkpOworCQlyZXR1cm4gc2IudG9TdHJpbmcoKTsKKwl9IC8vIGdldFRleHQKKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyB0aGUgbGFiZWwgdGV4dCBmb3IgdGhlIGFkYXB0ZWQgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFN0cmluZyBnZXRUZXh0R2VuKE9iamVjdCBvYmplY3QpIHsKKwkJU3RyaW5nIGxhYmVsID0gKChEb3VibGVSYW5nZU1vZGlmaWVyKW9iamVjdCkuZ2V0RmVhdHVyZU5hbWUoKTsKKwkJcmV0dXJuIGxhYmVsID09IG51bGwgfHwgbGFiZWwubGVuZ3RoKCkgPT0gMCA/CisJCQlnZXRTdHJpbmcoIl9VSV9Eb3VibGVSYW5nZU1vZGlmaWVyX3R5cGUiKSA6IC8vJE5PTi1OTFMtMSQKKwkJCWdldFN0cmluZygiX1VJX0RvdWJsZVJhbmdlTW9kaWZpZXJfdHlwZSIpICsgIiAiICsgbGFiZWw7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAorCX0KKworCQorCS8qKgorCSAqIFRoaXMgaGFuZGxlcyBtb2RlbCBub3RpZmljYXRpb25zIGJ5IGNhbGxpbmcge0BsaW5rICN1cGRhdGVDaGlsZHJlbn0gdG8gdXBkYXRlIGFueSBjYWNoZWQKKwkgKiBjaGlsZHJlbiBhbmQgYnkgY3JlYXRpbmcgYSB2aWV3ZXIgbm90aWZpY2F0aW9uLCB3aGljaCBpdCBwYXNzZXMgdG8ge0BsaW5rICNmaXJlTm90aWZ5Q2hhbmdlZH0uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgbm90aWZ5Q2hhbmdlZChOb3RpZmljYXRpb24gbm90aWZpY2F0aW9uKSB7CisJCXVwZGF0ZUNoaWxkcmVuKG5vdGlmaWNhdGlvbik7CisKKwkJc3dpdGNoIChub3RpZmljYXRpb24uZ2V0RmVhdHVyZUlEKERvdWJsZVJhbmdlTW9kaWZpZXIuY2xhc3MpKSB7CisJCQljYXNlIE1vZGlmaWVyUGFja2FnZS5ET1VCTEVfUkFOR0VfTU9ESUZJRVJfX1NUQVJUX1ZBTFVFOgorCQkJY2FzZSBNb2RpZmllclBhY2thZ2UuRE9VQkxFX1JBTkdFX01PRElGSUVSX19FTkRfVkFMVUU6CisJCQljYXNlIE1vZGlmaWVyUGFja2FnZS5ET1VCTEVfUkFOR0VfTU9ESUZJRVJfX0lOQ1JFTUVOVDoKKwkJCWNhc2UgTW9kaWZpZXJQYWNrYWdlLkRPVUJMRV9SQU5HRV9NT0RJRklFUl9fTkVYVF9WQUxVRToKKwkJCWNhc2UgTW9kaWZpZXJQYWNrYWdlLkRPVUJMRV9SQU5HRV9NT0RJRklFUl9fT1JJR0lOQUxfVkFMVUU6CisJCQkJZmlyZU5vdGlmeUNoYW5nZWQobmV3IFZpZXdlck5vdGlmaWNhdGlvbihub3RpZmljYXRpb24sIG5vdGlmaWNhdGlvbi5nZXROb3RpZmllcigpLCBmYWxzZSwgdHJ1ZSkpOworCQkJCXJldHVybjsKKwkJfQorCQlzdXBlci5ub3RpZnlDaGFuZ2VkKG5vdGlmaWNhdGlvbik7CisJfQorCisJLyoqCisJICogVGhpcyBhZGRzIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuZWRpdC5jb21tYW5kLkNvbW1hbmRQYXJhbWV0ZXJ9cyBkZXNjcmliaW5nIHRoZSBjaGlsZHJlbgorCSAqIHRoYXQgY2FuIGJlIGNyZWF0ZWQgdW5kZXIgdGhpcyBvYmplY3QuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgY29sbGVjdE5ld0NoaWxkRGVzY3JpcHRvcnMoQ29sbGVjdGlvbjxPYmplY3Q+IG5ld0NoaWxkRGVzY3JpcHRvcnMsIE9iamVjdCBvYmplY3QpIHsKKwkJc3VwZXIuY29sbGVjdE5ld0NoaWxkRGVzY3JpcHRvcnMobmV3Q2hpbGREZXNjcmlwdG9ycywgb2JqZWN0KTsKKwl9CisKK30KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvbW9kaWZpZXIvcHJvdmlkZXIvRG91YmxlU2VxdWVuY2VNb2RpZmllckl0ZW1Qcm92aWRlci5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9tb2RpZmllci9wcm92aWRlci9Eb3VibGVTZXF1ZW5jZU1vZGlmaWVySXRlbVByb3ZpZGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDM0NTg1YQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvbW9kaWZpZXIvcHJvdmlkZXIvRG91YmxlU2VxdWVuY2VNb2RpZmllckl0ZW1Qcm92aWRlci5qYXZhCkBAIC0wLDAgKzEsMTM5IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5wcm92aWRlcjsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOworaW1wb3J0IGphdmEudXRpbC5MaXN0OworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkNvbXBvc2VhYmxlQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUVkaXRpbmdEb21haW5JdGVtUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1MYWJlbFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtUHJvcGVydHlEZXNjcmlwdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtUHJvcGVydHlTb3VyY2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVN0cnVjdHVyZWRJdGVtQ29udGVudFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklUcmVlSXRlbUNvbnRlbnRQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JdGVtUHJvcGVydHlEZXNjcmlwdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLlZpZXdlck5vdGlmaWNhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuRG91YmxlU2VxdWVuY2VNb2RpZmllcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuTW9kaWZpZXJQYWNrYWdlOworCisvKioKKyAqIFRoaXMgaXMgdGhlIGl0ZW0gcHJvdmlkZXIgYWRhcHRlciBmb3IgYSB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLkRvdWJsZVNlcXVlbmNlTW9kaWZpZXJ9IG9iamVjdC4KKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIERvdWJsZVNlcXVlbmNlTW9kaWZpZXJJdGVtUHJvdmlkZXIKKwlleHRlbmRzIFNlcXVlbmNlTW9kaWZpZXJJdGVtUHJvdmlkZXIKKwlpbXBsZW1lbnRzCisJCUlFZGl0aW5nRG9tYWluSXRlbVByb3ZpZGVyLAorCQlJU3RydWN0dXJlZEl0ZW1Db250ZW50UHJvdmlkZXIsCisJCUlUcmVlSXRlbUNvbnRlbnRQcm92aWRlciwKKwkJSUl0ZW1MYWJlbFByb3ZpZGVyLAorCQlJSXRlbVByb3BlcnR5U291cmNlIHsKKwkvKioKKwkgKiBUaGlzIGNvbnN0cnVjdHMgYW4gaW5zdGFuY2UgZnJvbSBhIGZhY3RvcnkgYW5kIGEgbm90aWZpZXIuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIERvdWJsZVNlcXVlbmNlTW9kaWZpZXJJdGVtUHJvdmlkZXIoQWRhcHRlckZhY3RvcnkgYWRhcHRlckZhY3RvcnkpIHsKKwkJc3VwZXIoYWRhcHRlckZhY3RvcnkpOworCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyB0aGUgcHJvcGVydHkgZGVzY3JpcHRvcnMgZm9yIHRoZSBhZGFwdGVkIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBMaXN0PElJdGVtUHJvcGVydHlEZXNjcmlwdG9yPiBnZXRQcm9wZXJ0eURlc2NyaXB0b3JzKE9iamVjdCBvYmplY3QpIHsKKwkJaWYgKGl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzID09IG51bGwpIHsKKwkJCXN1cGVyLmdldFByb3BlcnR5RGVzY3JpcHRvcnMob2JqZWN0KTsKKworCQkJYWRkU2VxdWVuY2VQcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0KTsKKwkJfQorCQlyZXR1cm4gaXRlbVByb3BlcnR5RGVzY3JpcHRvcnM7CisJfQorCisJLyoqCisJICogVGhpcyBhZGRzIGEgcHJvcGVydHkgZGVzY3JpcHRvciBmb3IgdGhlIFNlcXVlbmNlIGZlYXR1cmUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgYWRkU2VxdWVuY2VQcm9wZXJ0eURlc2NyaXB0b3IoT2JqZWN0IG9iamVjdCkgeworCQlpdGVtUHJvcGVydHlEZXNjcmlwdG9ycy5hZGQKKwkJCShjcmVhdGVJdGVtUHJvcGVydHlEZXNjcmlwdG9yCisJCQkJKCgoQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSlhZGFwdGVyRmFjdG9yeSkuZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCksCisJCQkJIGdldFJlc291cmNlTG9jYXRvcigpLAorCQkJCSBnZXRTdHJpbmcoIl9VSV9Eb3VibGVTZXF1ZW5jZU1vZGlmaWVyX3NlcXVlbmNlX2ZlYXR1cmUiKSwgLy8kTk9OLU5MUy0xJAorCQkJCSBnZXRTdHJpbmcoIl9VSV9Qcm9wZXJ0eURlc2NyaXB0b3JfZGVzY3JpcHRpb24iLCAiX1VJX0RvdWJsZVNlcXVlbmNlTW9kaWZpZXJfc2VxdWVuY2VfZmVhdHVyZSIsICJfVUlfRG91YmxlU2VxdWVuY2VNb2RpZmllcl90eXBlIiksIC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJCAvLyROT04tTkxTLTMkCisJCQkJIE1vZGlmaWVyUGFja2FnZS5MaXRlcmFscy5ET1VCTEVfU0VRVUVOQ0VfTU9ESUZJRVJfX1NFUVVFTkNFLAorCQkJCSB0cnVlLAorCQkJCSBmYWxzZSwKKwkJCQkgZmFsc2UsCisJCQkJIEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IuR0VORVJJQ19WQUxVRV9JTUFHRSwKKwkJCQkgbnVsbCwKKwkJCQkgbnVsbCkpOworCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyB0aGUgbGFiZWwgdGV4dCBmb3IgdGhlIGFkYXB0ZWQgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIFN0cmluZyBnZXRUZXh0KE9iamVjdCBvYmplY3QpIHsKKwkJU3RyaW5nIGxhYmVsID0gKChEb3VibGVTZXF1ZW5jZU1vZGlmaWVyKW9iamVjdCkuZ2V0RmVhdHVyZU5hbWUoKTsKKwkJcmV0dXJuIGxhYmVsID09IG51bGwgfHwgbGFiZWwubGVuZ3RoKCkgPT0gMCA/CisJCQlnZXRTdHJpbmcoIl9VSV9Eb3VibGVTZXF1ZW5jZU1vZGlmaWVyX3R5cGUiKSA6IC8vJE5PTi1OTFMtMSQKKwkJCWdldFN0cmluZygiX1VJX0RvdWJsZVNlcXVlbmNlTW9kaWZpZXJfdHlwZSIpICsgIiAiICsgbGFiZWw7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAorCX0KKworCS8qKgorCSAqIFRoaXMgaGFuZGxlcyBtb2RlbCBub3RpZmljYXRpb25zIGJ5IGNhbGxpbmcge0BsaW5rICN1cGRhdGVDaGlsZHJlbn0gdG8gdXBkYXRlIGFueSBjYWNoZWQKKwkgKiBjaGlsZHJlbiBhbmQgYnkgY3JlYXRpbmcgYSB2aWV3ZXIgbm90aWZpY2F0aW9uLCB3aGljaCBpdCBwYXNzZXMgdG8ge0BsaW5rICNmaXJlTm90aWZ5Q2hhbmdlZH0uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgbm90aWZ5Q2hhbmdlZChOb3RpZmljYXRpb24gbm90aWZpY2F0aW9uKSB7CisJCXVwZGF0ZUNoaWxkcmVuKG5vdGlmaWNhdGlvbik7CisKKwkJc3dpdGNoIChub3RpZmljYXRpb24uZ2V0RmVhdHVyZUlEKERvdWJsZVNlcXVlbmNlTW9kaWZpZXIuY2xhc3MpKSB7CisJCQljYXNlIE1vZGlmaWVyUGFja2FnZS5ET1VCTEVfU0VRVUVOQ0VfTU9ESUZJRVJfX1NFUVVFTkNFOgorCQkJCWZpcmVOb3RpZnlDaGFuZ2VkKG5ldyBWaWV3ZXJOb3RpZmljYXRpb24obm90aWZpY2F0aW9uLCBub3RpZmljYXRpb24uZ2V0Tm90aWZpZXIoKSwgZmFsc2UsIHRydWUpKTsKKwkJCQlyZXR1cm47CisJCX0KKwkJc3VwZXIubm90aWZ5Q2hhbmdlZChub3RpZmljYXRpb24pOworCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmVkaXQuY29tbWFuZC5Db21tYW5kUGFyYW1ldGVyfXMgZGVzY3JpYmluZyB0aGUgY2hpbGRyZW4KKwkgKiB0aGF0IGNhbiBiZSBjcmVhdGVkIHVuZGVyIHRoaXMgb2JqZWN0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIGNvbGxlY3ROZXdDaGlsZERlc2NyaXB0b3JzKENvbGxlY3Rpb248T2JqZWN0PiBuZXdDaGlsZERlc2NyaXB0b3JzLCBPYmplY3Qgb2JqZWN0KSB7CisJCXN1cGVyLmNvbGxlY3ROZXdDaGlsZERlc2NyaXB0b3JzKG5ld0NoaWxkRGVzY3JpcHRvcnMsIG9iamVjdCk7CisJfQorCit9CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL21vZGlmaWVyL3Byb3ZpZGVyL0ZlYXR1cmVNb2RpZmllckl0ZW1Qcm92aWRlci5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9tb2RpZmllci9wcm92aWRlci9GZWF0dXJlTW9kaWZpZXJJdGVtUHJvdmlkZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMzdhNWZiCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9tb2RpZmllci9wcm92aWRlci9GZWF0dXJlTW9kaWZpZXJJdGVtUHJvdmlkZXIuamF2YQpAQCAtMCwwICsxLDE3OCBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIucHJvdmlkZXI7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5BZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlJlc291cmNlTG9jYXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5Db21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklFZGl0aW5nRG9tYWluSXRlbVByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtTGFiZWxQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbVByb3BlcnR5RGVzY3JpcHRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbVByb3BlcnR5U291cmNlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklTdHJ1Y3R1cmVkSXRlbUNvbnRlbnRQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JVHJlZUl0ZW1Db250ZW50UHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSXRlbVByb3BlcnR5RGVzY3JpcHRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JdGVtUHJvdmlkZXJBZGFwdGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLlZpZXdlck5vdGlmaWNhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLnByb3ZpZGVyLkNvcmVFZGl0UGx1Z2luOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5GZWF0dXJlTW9kaWZpZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLk1vZGlmaWVyUGFja2FnZTsKKworLyoqCisgKiBUaGlzIGlzIHRoZSBpdGVtIHByb3ZpZGVyIGFkYXB0ZXIgZm9yIGEge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5GZWF0dXJlTW9kaWZpZXJ9IG9iamVjdC4KKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIEZlYXR1cmVNb2RpZmllckl0ZW1Qcm92aWRlcgorCWV4dGVuZHMgSXRlbVByb3ZpZGVyQWRhcHRlcgorCWltcGxlbWVudHMJCisJCUlFZGl0aW5nRG9tYWluSXRlbVByb3ZpZGVyLAkKKwkJSVN0cnVjdHVyZWRJdGVtQ29udGVudFByb3ZpZGVyLAkKKwkJSVRyZWVJdGVtQ29udGVudFByb3ZpZGVyLAkKKwkJSUl0ZW1MYWJlbFByb3ZpZGVyLAkKKwkJSUl0ZW1Qcm9wZXJ0eVNvdXJjZSB7CisJLyoqCisJICogVGhpcyBjb25zdHJ1Y3RzIGFuIGluc3RhbmNlIGZyb20gYSBmYWN0b3J5IGFuZCBhIG5vdGlmaWVyLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBGZWF0dXJlTW9kaWZpZXJJdGVtUHJvdmlkZXIoQWRhcHRlckZhY3RvcnkgYWRhcHRlckZhY3RvcnkpIHsKKwkJc3VwZXIoYWRhcHRlckZhY3RvcnkpOworCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyB0aGUgcHJvcGVydHkgZGVzY3JpcHRvcnMgZm9yIHRoZSBhZGFwdGVkIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBMaXN0PElJdGVtUHJvcGVydHlEZXNjcmlwdG9yPiBnZXRQcm9wZXJ0eURlc2NyaXB0b3JzKE9iamVjdCBvYmplY3QpIHsKKwkJaWYgKGl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzID09IG51bGwpIHsKKwkJCXN1cGVyLmdldFByb3BlcnR5RGVzY3JpcHRvcnMob2JqZWN0KTsKKworCQkJYWRkRmVhdHVyZU5hbWVQcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0KTsKKwkJCWFkZENvbXBsZXRlUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCk7CisJCX0KKwkJcmV0dXJuIGl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzOworCX0KKwkKKwkvKioKKwkgKiBUaGlzIGFkZHMgYSBwcm9wZXJ0eSBkZXNjcmlwdG9yIGZvciB0aGUgQ29tcGxldGUgZmVhdHVyZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBhZGRDb21wbGV0ZVByb3BlcnR5RGVzY3JpcHRvcihPYmplY3Qgb2JqZWN0KSB7CisJCWl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzLmFkZAorCQkJKGNyZWF0ZUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IKKwkJCQkoKChDb21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5KWFkYXB0ZXJGYWN0b3J5KS5nZXRSb290QWRhcHRlckZhY3RvcnkoKSwKKwkJCQkgZ2V0UmVzb3VyY2VMb2NhdG9yKCksCisJCQkJIGdldFN0cmluZygiX1VJX0ZlYXR1cmVNb2RpZmllcl9jb21wbGV0ZV9mZWF0dXJlIiksIC8vJE5PTi1OTFMtMSQKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfUHJvcGVydHlEZXNjcmlwdG9yX2Rlc2NyaXB0aW9uIiwgIl9VSV9GZWF0dXJlTW9kaWZpZXJfY29tcGxldGVfZmVhdHVyZSIsICJfVUlfRmVhdHVyZU1vZGlmaWVyX3R5cGUiKSwgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkIC8vJE5PTi1OTFMtMyQKKwkJCQkgTW9kaWZpZXJQYWNrYWdlLkxpdGVyYWxzLkZFQVRVUkVfTU9ESUZJRVJfX0NPTVBMRVRFLAorCQkJCSBmYWxzZSwKKwkJCQkgZmFsc2UsCisJCQkJIGZhbHNlLAorCQkJCSBJdGVtUHJvcGVydHlEZXNjcmlwdG9yLkJPT0xFQU5fVkFMVUVfSU1BR0UsCisJCQkJIG51bGwsCisJCQkJIG51bGwpKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFkZHMgYSBwcm9wZXJ0eSBkZXNjcmlwdG9yIGZvciB0aGUgRmVhdHVyZSBOYW1lIGZlYXR1cmUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgYWRkRmVhdHVyZU5hbWVQcm9wZXJ0eURlc2NyaXB0b3IoT2JqZWN0IG9iamVjdCkgeworCQlpdGVtUHJvcGVydHlEZXNjcmlwdG9ycy5hZGQKKwkJCShjcmVhdGVJdGVtUHJvcGVydHlEZXNjcmlwdG9yCisJCQkJKCgoQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSlhZGFwdGVyRmFjdG9yeSkuZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCksCisJCQkJIGdldFJlc291cmNlTG9jYXRvcigpLAorCQkJCSBnZXRTdHJpbmcoIl9VSV9GZWF0dXJlTW9kaWZpZXJfZmVhdHVyZU5hbWVfZmVhdHVyZSIpLCAvLyROT04tTkxTLTEkCisJCQkJIGdldFN0cmluZygiX1VJX1Byb3BlcnR5RGVzY3JpcHRvcl9kZXNjcmlwdGlvbiIsICJfVUlfRmVhdHVyZU1vZGlmaWVyX2ZlYXR1cmVOYW1lX2ZlYXR1cmUiLCAiX1VJX0ZlYXR1cmVNb2RpZmllcl90eXBlIiksIC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJCAvLyROT04tTkxTLTMkCisJCQkJIE1vZGlmaWVyUGFja2FnZS5MaXRlcmFscy5GRUFUVVJFX01PRElGSUVSX19GRUFUVVJFX05BTUUsCisJCQkJIGZhbHNlLAorCQkJCSBmYWxzZSwKKwkJCQkgZmFsc2UsCisJCQkJIEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IuR0VORVJJQ19WQUxVRV9JTUFHRSwKKwkJCQkgbnVsbCwKKwkJCQkgbnVsbCkpOworCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyB0aGUgbGFiZWwgdGV4dCBmb3IgdGhlIGFkYXB0ZWQgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIFN0cmluZyBnZXRUZXh0KE9iamVjdCBvYmplY3QpIHsKKwkJU3RyaW5nIGxhYmVsID0gKChGZWF0dXJlTW9kaWZpZXIpb2JqZWN0KS5nZXRGZWF0dXJlTmFtZSgpOworCQlyZXR1cm4gbGFiZWwgPT0gbnVsbCB8fCBsYWJlbC5sZW5ndGgoKSA9PSAwID8KKwkJCWdldFN0cmluZygiX1VJX0ZlYXR1cmVNb2RpZmllcl90eXBlIikgOiAvLyROT04tTkxTLTEkCisJCQlnZXRTdHJpbmcoIl9VSV9GZWF0dXJlTW9kaWZpZXJfdHlwZSIpICsgIiAiICsgbGFiZWw7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAorCX0KKwkKKwkvKioKKwkgKiBUaGlzIGhhbmRsZXMgbW9kZWwgbm90aWZpY2F0aW9ucyBieSBjYWxsaW5nIHtAbGluayAjdXBkYXRlQ2hpbGRyZW59IHRvIHVwZGF0ZSBhbnkgY2FjaGVkCisJICogY2hpbGRyZW4gYW5kIGJ5IGNyZWF0aW5nIGEgdmlld2VyIG5vdGlmaWNhdGlvbiwgd2hpY2ggaXQgcGFzc2VzIHRvIHtAbGluayAjZmlyZU5vdGlmeUNoYW5nZWR9LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIG5vdGlmeUNoYW5nZWQoTm90aWZpY2F0aW9uIG5vdGlmaWNhdGlvbikgeworCQl1cGRhdGVDaGlsZHJlbihub3RpZmljYXRpb24pOworCisJCXN3aXRjaCAobm90aWZpY2F0aW9uLmdldEZlYXR1cmVJRChGZWF0dXJlTW9kaWZpZXIuY2xhc3MpKSB7CisJCQljYXNlIE1vZGlmaWVyUGFja2FnZS5GRUFUVVJFX01PRElGSUVSX19GRUFUVVJFX05BTUU6CisJCQljYXNlIE1vZGlmaWVyUGFja2FnZS5GRUFUVVJFX01PRElGSUVSX19GRUFUVVJFX0lEOgorCQkJY2FzZSBNb2RpZmllclBhY2thZ2UuRkVBVFVSRV9NT0RJRklFUl9fQ1VSUkVOVF9WQUxVRV9URVhUOgorCQkJY2FzZSBNb2RpZmllclBhY2thZ2UuRkVBVFVSRV9NT0RJRklFUl9fQ09NUExFVEU6CisJCQkJZmlyZU5vdGlmeUNoYW5nZWQobmV3IFZpZXdlck5vdGlmaWNhdGlvbihub3RpZmljYXRpb24sIG5vdGlmaWNhdGlvbi5nZXROb3RpZmllcigpLCBmYWxzZSwgdHJ1ZSkpOworCQkJCXJldHVybjsKKwkJfQorCQlzdXBlci5ub3RpZnlDaGFuZ2VkKG5vdGlmaWNhdGlvbik7CisJfQorCisJLyoqCisJICogVGhpcyBhZGRzIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuZWRpdC5jb21tYW5kLkNvbW1hbmRQYXJhbWV0ZXJ9cyBkZXNjcmliaW5nIHRoZSBjaGlsZHJlbgorCSAqIHRoYXQgY2FuIGJlIGNyZWF0ZWQgdW5kZXIgdGhpcyBvYmplY3QuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgY29sbGVjdE5ld0NoaWxkRGVzY3JpcHRvcnMoQ29sbGVjdGlvbjxPYmplY3Q+IG5ld0NoaWxkRGVzY3JpcHRvcnMsIE9iamVjdCBvYmplY3QpIHsKKwkJc3VwZXIuY29sbGVjdE5ld0NoaWxkRGVzY3JpcHRvcnMobmV3Q2hpbGREZXNjcmlwdG9ycywgb2JqZWN0KTsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm4gdGhlIHJlc291cmNlIGxvY2F0b3IgZm9yIHRoaXMgaXRlbSBwcm92aWRlcidzIHJlc291cmNlcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgUmVzb3VyY2VMb2NhdG9yIGdldFJlc291cmNlTG9jYXRvcigpIHsKKwkJcmV0dXJuIENvcmVFZGl0UGx1Z2luLklOU1RBTkNFOworCX0KKworfQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9tb2RpZmllci9wcm92aWRlci9JbnRlZ2VyTW9kaWZpZXJJdGVtUHJvdmlkZXIuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvbW9kaWZpZXIvcHJvdmlkZXIvSW50ZWdlck1vZGlmaWVySXRlbVByb3ZpZGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2M2YmI3ZAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvbW9kaWZpZXIvcHJvdmlkZXIvSW50ZWdlck1vZGlmaWVySXRlbVByb3ZpZGVyLmphdmEKQEAgLTAsMCArMSwxODggQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLnByb3ZpZGVyOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA5IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCitpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5BZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JRWRpdGluZ0RvbWFpbkl0ZW1Qcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbUxhYmVsUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1Qcm9wZXJ0eVNvdXJjZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JU3RydWN0dXJlZEl0ZW1Db250ZW50UHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVRyZWVJdGVtQ29udGVudFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuVmlld2VyTm90aWZpY2F0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5JbnRlZ2VyTW9kaWZpZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLk1vZGlmaWVyUGFja2FnZTsKKworLyoqCisgKiBUaGlzIGlzIHRoZSBpdGVtIHByb3ZpZGVyIGFkYXB0ZXIgZm9yIGEge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5JbnRlZ2VyTW9kaWZpZXJ9IG9iamVjdC4KKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIEludGVnZXJNb2RpZmllckl0ZW1Qcm92aWRlcgorCWV4dGVuZHMgU2luZ2xlVmFsdWVNb2RpZmllckl0ZW1Qcm92aWRlcgorCWltcGxlbWVudHMKKwkJSUVkaXRpbmdEb21haW5JdGVtUHJvdmlkZXIsCisJCUlTdHJ1Y3R1cmVkSXRlbUNvbnRlbnRQcm92aWRlciwKKwkJSVRyZWVJdGVtQ29udGVudFByb3ZpZGVyLAorCQlJSXRlbUxhYmVsUHJvdmlkZXIsCisJCUlJdGVtUHJvcGVydHlTb3VyY2UgeworCS8qKgorCSAqIFRoaXMgY29uc3RydWN0cyBhbiBpbnN0YW5jZSBmcm9tIGEgZmFjdG9yeSBhbmQgYSBub3RpZmllci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgSW50ZWdlck1vZGlmaWVySXRlbVByb3ZpZGVyKEFkYXB0ZXJGYWN0b3J5IGFkYXB0ZXJGYWN0b3J5KSB7CisJCXN1cGVyKGFkYXB0ZXJGYWN0b3J5KTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgdGhlIHByb3BlcnR5IGRlc2NyaXB0b3JzIGZvciB0aGUgYWRhcHRlZCBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgTGlzdDxJSXRlbVByb3BlcnR5RGVzY3JpcHRvcj4gZ2V0UHJvcGVydHlEZXNjcmlwdG9ycyhPYmplY3Qgb2JqZWN0KSB7CisJCWlmIChpdGVtUHJvcGVydHlEZXNjcmlwdG9ycyA9PSBudWxsKSB7CisJCQlzdXBlci5nZXRQcm9wZXJ0eURlc2NyaXB0b3JzKG9iamVjdCk7CisKKwkJCWFkZFZhbHVlUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCk7CisJCQlhZGRPcmlnaW5hbFZhbHVlUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCk7CisJCX0KKwkJcmV0dXJuIGl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzOworCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyBhIHByb3BlcnR5IGRlc2NyaXB0b3IgZm9yIHRoZSBWYWx1ZSBmZWF0dXJlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIGFkZFZhbHVlUHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdCBvYmplY3QpIHsKKwkJaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMuYWRkCisJCQkoY3JlYXRlSXRlbVByb3BlcnR5RGVzY3JpcHRvcgorCQkJCSgoKENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnkpYWRhcHRlckZhY3RvcnkpLmdldFJvb3RBZGFwdGVyRmFjdG9yeSgpLAorCQkJCSBnZXRSZXNvdXJjZUxvY2F0b3IoKSwKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfSW50ZWdlck1vZGlmaWVyX3ZhbHVlX2ZlYXR1cmUiKSwgLy8kTk9OLU5MUy0xJAorCQkJCSBnZXRTdHJpbmcoIl9VSV9Qcm9wZXJ0eURlc2NyaXB0b3JfZGVzY3JpcHRpb24iLCAiX1VJX0ludGVnZXJNb2RpZmllcl92YWx1ZV9mZWF0dXJlIiwgIl9VSV9JbnRlZ2VyTW9kaWZpZXJfdHlwZSIpLCAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQgLy8kTk9OLU5MUy0zJAorCQkJCSBNb2RpZmllclBhY2thZ2UuTGl0ZXJhbHMuSU5URUdFUl9NT0RJRklFUl9fVkFMVUUsCisJCQkJIHRydWUsCisJCQkJIGZhbHNlLAorCQkJCSBmYWxzZSwKKwkJCQkgSXRlbVByb3BlcnR5RGVzY3JpcHRvci5JTlRFR1JBTF9WQUxVRV9JTUFHRSwKKwkJCQkgbnVsbCwKKwkJCQkgbnVsbCkpOworCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyBhIHByb3BlcnR5IGRlc2NyaXB0b3IgZm9yIHRoZSBPcmlnaW5hbCBWYWx1ZSBmZWF0dXJlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIGFkZE9yaWdpbmFsVmFsdWVQcm9wZXJ0eURlc2NyaXB0b3IoT2JqZWN0IG9iamVjdCkgeworCQlpdGVtUHJvcGVydHlEZXNjcmlwdG9ycy5hZGQKKwkJCShjcmVhdGVJdGVtUHJvcGVydHlEZXNjcmlwdG9yCisJCQkJKCgoQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSlhZGFwdGVyRmFjdG9yeSkuZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCksCisJCQkJIGdldFJlc291cmNlTG9jYXRvcigpLAorCQkJCSBnZXRTdHJpbmcoIl9VSV9JbnRlZ2VyTW9kaWZpZXJfb3JpZ2luYWxWYWx1ZV9mZWF0dXJlIiksIC8vJE5PTi1OTFMtMSQKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfUHJvcGVydHlEZXNjcmlwdG9yX2Rlc2NyaXB0aW9uIiwgIl9VSV9JbnRlZ2VyTW9kaWZpZXJfb3JpZ2luYWxWYWx1ZV9mZWF0dXJlIiwgIl9VSV9JbnRlZ2VyTW9kaWZpZXJfdHlwZSIpLCAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQgLy8kTk9OLU5MUy0zJAorCQkJCSBNb2RpZmllclBhY2thZ2UuTGl0ZXJhbHMuSU5URUdFUl9NT0RJRklFUl9fT1JJR0lOQUxfVkFMVUUsCisJCQkJIGZhbHNlLAorCQkJCSBmYWxzZSwKKwkJCQkgZmFsc2UsCisJCQkJIEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IuSU5URUdSQUxfVkFMVUVfSU1BR0UsCisJCQkJIG51bGwsCisJCQkJIG51bGwpKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgSW50ZWdlck1vZGlmaWVyLmdpZi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIE9iamVjdCBnZXRJbWFnZShPYmplY3Qgb2JqZWN0KSB7CisJCXJldHVybiBvdmVybGF5SW1hZ2Uob2JqZWN0LCBnZXRSZXNvdXJjZUxvY2F0b3IoKS5nZXRJbWFnZSgiZnVsbC9jdXN0b21vYmoxNi9JbnRlZ2VyTW9kaWZpZXIucG5nIikpOyAvLyROT04tTkxTLTEkCisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIHRoZSBsYWJlbCB0ZXh0IGZvciB0aGUgYWRhcHRlZCBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgU3RyaW5nIGdldFRleHRHZW4oT2JqZWN0IG9iamVjdCkgeworCQlTdHJpbmcgbGFiZWwgPSAoKEludGVnZXJNb2RpZmllcilvYmplY3QpLmdldEZlYXR1cmVOYW1lKCk7CisJCXJldHVybiBsYWJlbCA9PSBudWxsIHx8IGxhYmVsLmxlbmd0aCgpID09IDAgPworCQkJZ2V0U3RyaW5nKCJfVUlfSW50ZWdlck1vZGlmaWVyX3R5cGUiKSA6IC8vJE5PTi1OTFMtMSQKKwkJCWdldFN0cmluZygiX1VJX0ludGVnZXJNb2RpZmllcl90eXBlIikgKyAiICIgKyBsYWJlbDsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCisJfQorCQorCS8qKgorCSAqIFRoaXMgcmV0dXJucyB0aGUgbGFiZWwgdGV4dCBmb3IgdGhlIGFkYXB0ZWQgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBTdHJpbmcgZ2V0VGV4dChPYmplY3Qgb2JqZWN0KSB7CisJCVN0cmluZyBsYWJlbCA9ICgoSW50ZWdlck1vZGlmaWVyKW9iamVjdCkuZ2V0RmVhdHVyZU5hbWUoKTsKKwkJcmV0dXJuIGxhYmVsID09IG51bGwgfHwgbGFiZWwubGVuZ3RoKCkgPT0gMCA/CisJCQlnZXRTdHJpbmcoIl9VSV9JbnRlZ2VyTW9kaWZpZXJfdHlwZSIpIDogLy8kTk9OLU5MUy0xJAorCQkKKwkJIGxhYmVsKyIgIisoKEludGVnZXJNb2RpZmllcilvYmplY3QpLmdldFZhbHVlKCk7CisJfQorCisJLyoqCisJICogVGhpcyBoYW5kbGVzIG1vZGVsIG5vdGlmaWNhdGlvbnMgYnkgY2FsbGluZyB7QGxpbmsgI3VwZGF0ZUNoaWxkcmVufSB0byB1cGRhdGUgYW55IGNhY2hlZAorCSAqIGNoaWxkcmVuIGFuZCBieSBjcmVhdGluZyBhIHZpZXdlciBub3RpZmljYXRpb24sIHdoaWNoIGl0IHBhc3NlcyB0byB7QGxpbmsgI2ZpcmVOb3RpZnlDaGFuZ2VkfS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBub3RpZnlDaGFuZ2VkKE5vdGlmaWNhdGlvbiBub3RpZmljYXRpb24pIHsKKwkJdXBkYXRlQ2hpbGRyZW4obm90aWZpY2F0aW9uKTsKKworCQlzd2l0Y2ggKG5vdGlmaWNhdGlvbi5nZXRGZWF0dXJlSUQoSW50ZWdlck1vZGlmaWVyLmNsYXNzKSkgeworCQkJY2FzZSBNb2RpZmllclBhY2thZ2UuSU5URUdFUl9NT0RJRklFUl9fVkFMVUU6CisJCQljYXNlIE1vZGlmaWVyUGFja2FnZS5JTlRFR0VSX01PRElGSUVSX19PUklHSU5BTF9WQUxVRToKKwkJCQlmaXJlTm90aWZ5Q2hhbmdlZChuZXcgVmlld2VyTm90aWZpY2F0aW9uKG5vdGlmaWNhdGlvbiwgbm90aWZpY2F0aW9uLmdldE5vdGlmaWVyKCksIGZhbHNlLCB0cnVlKSk7CisJCQkJcmV0dXJuOworCQl9CisJCXN1cGVyLm5vdGlmeUNoYW5nZWQobm90aWZpY2F0aW9uKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFkZHMge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lZGl0LmNvbW1hbmQuQ29tbWFuZFBhcmFtZXRlcn1zIGRlc2NyaWJpbmcgdGhlIGNoaWxkcmVuCisJICogdGhhdCBjYW4gYmUgY3JlYXRlZCB1bmRlciB0aGlzIG9iamVjdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgdm9pZCBjb2xsZWN0TmV3Q2hpbGREZXNjcmlwdG9ycyhDb2xsZWN0aW9uPE9iamVjdD4gbmV3Q2hpbGREZXNjcmlwdG9ycywgT2JqZWN0IG9iamVjdCkgeworCQlzdXBlci5jb2xsZWN0TmV3Q2hpbGREZXNjcmlwdG9ycyhuZXdDaGlsZERlc2NyaXB0b3JzLCBvYmplY3QpOworCX0KKworfQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9tb2RpZmllci9wcm92aWRlci9JbnRlZ2VyTk9QTW9kaWZpZXJJdGVtUHJvdmlkZXIuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvbW9kaWZpZXIvcHJvdmlkZXIvSW50ZWdlck5PUE1vZGlmaWVySXRlbVByb3ZpZGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzZiMWMyYwotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvbW9kaWZpZXIvcHJvdmlkZXIvSW50ZWdlck5PUE1vZGlmaWVySXRlbVByb3ZpZGVyLmphdmEKQEAgLTAsMCArMSwxMDYgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLnByb3ZpZGVyOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCitpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5BZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUVkaXRpbmdEb21haW5JdGVtUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1MYWJlbFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtUHJvcGVydHlEZXNjcmlwdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtUHJvcGVydHlTb3VyY2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVN0cnVjdHVyZWRJdGVtQ29udGVudFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklUcmVlSXRlbUNvbnRlbnRQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuSW50ZWdlck5PUE1vZGlmaWVyOworCisvKioKKyAqIFRoaXMgaXMgdGhlIGl0ZW0gcHJvdmlkZXIgYWRhcHRlciBmb3IgYSB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLkludGVnZXJOT1BNb2RpZmllcn0gb2JqZWN0LgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgSW50ZWdlck5PUE1vZGlmaWVySXRlbVByb3ZpZGVyCisJZXh0ZW5kcyBOT1BNb2RpZmllckl0ZW1Qcm92aWRlcgorCWltcGxlbWVudHMKKwkJSUVkaXRpbmdEb21haW5JdGVtUHJvdmlkZXIsCisJCUlTdHJ1Y3R1cmVkSXRlbUNvbnRlbnRQcm92aWRlciwKKwkJSVRyZWVJdGVtQ29udGVudFByb3ZpZGVyLAorCQlJSXRlbUxhYmVsUHJvdmlkZXIsCisJCUlJdGVtUHJvcGVydHlTb3VyY2UgeworCS8qKgorCSAqIFRoaXMgY29uc3RydWN0cyBhbiBpbnN0YW5jZSBmcm9tIGEgZmFjdG9yeSBhbmQgYSBub3RpZmllci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgSW50ZWdlck5PUE1vZGlmaWVySXRlbVByb3ZpZGVyKEFkYXB0ZXJGYWN0b3J5IGFkYXB0ZXJGYWN0b3J5KSB7CisJCXN1cGVyKGFkYXB0ZXJGYWN0b3J5KTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgdGhlIHByb3BlcnR5IGRlc2NyaXB0b3JzIGZvciB0aGUgYWRhcHRlZCBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgTGlzdDxJSXRlbVByb3BlcnR5RGVzY3JpcHRvcj4gZ2V0UHJvcGVydHlEZXNjcmlwdG9ycyhPYmplY3Qgb2JqZWN0KSB7CisJCWlmIChpdGVtUHJvcGVydHlEZXNjcmlwdG9ycyA9PSBudWxsKSB7CisJCQlzdXBlci5nZXRQcm9wZXJ0eURlc2NyaXB0b3JzKG9iamVjdCk7CisKKwkJfQorCQlyZXR1cm4gaXRlbVByb3BlcnR5RGVzY3JpcHRvcnM7CisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIHRoZSBsYWJlbCB0ZXh0IGZvciB0aGUgYWRhcHRlZCBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgU3RyaW5nIGdldFRleHQoT2JqZWN0IG9iamVjdCkgeworCQlTdHJpbmcgbGFiZWwgPSAoKEludGVnZXJOT1BNb2RpZmllcilvYmplY3QpLmdldEZlYXR1cmVOYW1lKCk7CisJCXJldHVybiBsYWJlbCA9PSBudWxsIHx8IGxhYmVsLmxlbmd0aCgpID09IDAgPworCQkJZ2V0U3RyaW5nKCJfVUlfSW50ZWdlck5PUE1vZGlmaWVyX3R5cGUiKSA6IC8vJE5PTi1OTFMtMSQKKwkJCWdldFN0cmluZygiX1VJX0ludGVnZXJOT1BNb2RpZmllcl90eXBlIikgKyAiICIgKyBsYWJlbDsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCisJfQorCisJLyoqCisJICogVGhpcyBoYW5kbGVzIG1vZGVsIG5vdGlmaWNhdGlvbnMgYnkgY2FsbGluZyB7QGxpbmsgI3VwZGF0ZUNoaWxkcmVufSB0byB1cGRhdGUgYW55IGNhY2hlZAorCSAqIGNoaWxkcmVuIGFuZCBieSBjcmVhdGluZyBhIHZpZXdlciBub3RpZmljYXRpb24sIHdoaWNoIGl0IHBhc3NlcyB0byB7QGxpbmsgI2ZpcmVOb3RpZnlDaGFuZ2VkfS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBub3RpZnlDaGFuZ2VkKE5vdGlmaWNhdGlvbiBub3RpZmljYXRpb24pIHsKKwkJdXBkYXRlQ2hpbGRyZW4obm90aWZpY2F0aW9uKTsKKwkJc3VwZXIubm90aWZ5Q2hhbmdlZChub3RpZmljYXRpb24pOworCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmVkaXQuY29tbWFuZC5Db21tYW5kUGFyYW1ldGVyfXMgZGVzY3JpYmluZyB0aGUgY2hpbGRyZW4KKwkgKiB0aGF0IGNhbiBiZSBjcmVhdGVkIHVuZGVyIHRoaXMgb2JqZWN0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIGNvbGxlY3ROZXdDaGlsZERlc2NyaXB0b3JzKENvbGxlY3Rpb248T2JqZWN0PiBuZXdDaGlsZERlc2NyaXB0b3JzLCBPYmplY3Qgb2JqZWN0KSB7CisJCXN1cGVyLmNvbGxlY3ROZXdDaGlsZERlc2NyaXB0b3JzKG5ld0NoaWxkRGVzY3JpcHRvcnMsIG9iamVjdCk7CisJfQorCit9CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL21vZGlmaWVyL3Byb3ZpZGVyL0ludGVnZXJSYW5nZU1vZGlmaWVySXRlbVByb3ZpZGVyLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL21vZGlmaWVyL3Byb3ZpZGVyL0ludGVnZXJSYW5nZU1vZGlmaWVySXRlbVByb3ZpZGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjY3OWY1ZQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvbW9kaWZpZXIvcHJvdmlkZXIvSW50ZWdlclJhbmdlTW9kaWZpZXJJdGVtUHJvdmlkZXIuamF2YQpAQCAtMCwwICsxLDIyNiBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIucHJvdmlkZXI7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5BZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JRWRpdGluZ0RvbWFpbkl0ZW1Qcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbUxhYmVsUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1Qcm9wZXJ0eVNvdXJjZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JU3RydWN0dXJlZEl0ZW1Db250ZW50UHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVRyZWVJdGVtQ29udGVudFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuVmlld2VyTm90aWZpY2F0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5JbnRlZ2VyUmFuZ2VNb2RpZmllcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuTW9kaWZpZXJQYWNrYWdlOworCisvKioKKyAqIFRoaXMgaXMgdGhlIGl0ZW0gcHJvdmlkZXIgYWRhcHRlciBmb3IgYSB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLkludGVnZXJSYW5nZU1vZGlmaWVyfSBvYmplY3QuCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBJbnRlZ2VyUmFuZ2VNb2RpZmllckl0ZW1Qcm92aWRlcgorCWV4dGVuZHMgUmFuZ2VNb2RpZmllckl0ZW1Qcm92aWRlcgorCWltcGxlbWVudHMJCisJCUlFZGl0aW5nRG9tYWluSXRlbVByb3ZpZGVyLAkKKwkJSVN0cnVjdHVyZWRJdGVtQ29udGVudFByb3ZpZGVyLAkKKwkJSVRyZWVJdGVtQ29udGVudFByb3ZpZGVyLAkKKwkJSUl0ZW1MYWJlbFByb3ZpZGVyLAkKKwkJSUl0ZW1Qcm9wZXJ0eVNvdXJjZSB7CisJLyoqCisJICogVGhpcyBjb25zdHJ1Y3RzIGFuIGluc3RhbmNlIGZyb20gYSBmYWN0b3J5IGFuZCBhIG5vdGlmaWVyLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBJbnRlZ2VyUmFuZ2VNb2RpZmllckl0ZW1Qcm92aWRlcihBZGFwdGVyRmFjdG9yeSBhZGFwdGVyRmFjdG9yeSkgeworCQlzdXBlcihhZGFwdGVyRmFjdG9yeSk7CisJfQorCisvLwkvKioKKy8vCSAqIFRoaXMgcmV0dXJucyB0aGUgcHJvcGVydHkgZGVzY3JpcHRvcnMgZm9yIHRoZSBhZGFwdGVkIGNsYXNzLgorLy8JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKy8vCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorLy8JICogQGdlbmVyYXRlZAorLy8JICovCisvLwlAT3ZlcnJpZGUKKy8vCXB1YmxpYyBMaXN0PElJdGVtUHJvcGVydHlEZXNjcmlwdG9yPiBnZXRQcm9wZXJ0eURlc2NyaXB0b3JzKE9iamVjdCBvYmplY3QpIHsKKy8vCQlpZiAoaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMgPT0gbnVsbCkgeworLy8JCQlzdXBlci5nZXRQcm9wZXJ0eURlc2NyaXB0b3JzKG9iamVjdCk7CisvLworLy8JCQlhZGRTdGFydFZhbHVlUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCk7CisvLwkJCWFkZEVuZFZhbHVlUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCk7CisvLwkJCWFkZEluY3JlbWVudFByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QpOworLy8JCQlhZGROZXh0VmFsdWVQcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0KTsKKy8vCQl9CisvLwkJcmV0dXJuIGl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzOworLy8JfQorCQorCS8qKgorCSAqIFRoaXMgcmV0dXJucyB0aGUgcHJvcGVydHkgZGVzY3JpcHRvcnMgZm9yIHRoZSBhZGFwdGVkIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBMaXN0PElJdGVtUHJvcGVydHlEZXNjcmlwdG9yPiBnZXRQcm9wZXJ0eURlc2NyaXB0b3JzKE9iamVjdCBvYmplY3QpIHsKKwkJaWYgKGl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzID09IG51bGwpIHsKKwkJCXN1cGVyLmdldFByb3BlcnR5RGVzY3JpcHRvcnMob2JqZWN0KTsKKworCQkJYWRkU3RhcnRWYWx1ZVByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QpOworCQkJYWRkRW5kVmFsdWVQcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0KTsKKwkJCWFkZEluY3JlbWVudFByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QpOworCQl9CisJCXJldHVybiBpdGVtUHJvcGVydHlEZXNjcmlwdG9yczsKKwl9CisJCisKKwkvKioKKwkgKiBUaGlzIGFkZHMgYSBwcm9wZXJ0eSBkZXNjcmlwdG9yIGZvciB0aGUgU3RhcnQgVmFsdWUgZmVhdHVyZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBhZGRTdGFydFZhbHVlUHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdCBvYmplY3QpIHsKKwkJaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMuYWRkCisJCQkoY3JlYXRlSXRlbVByb3BlcnR5RGVzY3JpcHRvcgorCQkJCSgoKENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnkpYWRhcHRlckZhY3RvcnkpLmdldFJvb3RBZGFwdGVyRmFjdG9yeSgpLAorCQkJCSBnZXRSZXNvdXJjZUxvY2F0b3IoKSwKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfSW50ZWdlclJhbmdlTW9kaWZpZXJfc3RhcnRWYWx1ZV9mZWF0dXJlIiksIC8vJE5PTi1OTFMtMSQKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfUHJvcGVydHlEZXNjcmlwdG9yX2Rlc2NyaXB0aW9uIiwgIl9VSV9JbnRlZ2VyUmFuZ2VNb2RpZmllcl9zdGFydFZhbHVlX2ZlYXR1cmUiLCAiX1VJX0ludGVnZXJSYW5nZU1vZGlmaWVyX3R5cGUiKSwgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkIC8vJE5PTi1OTFMtMyQKKwkJCQkgTW9kaWZpZXJQYWNrYWdlLkxpdGVyYWxzLklOVEVHRVJfUkFOR0VfTU9ESUZJRVJfX1NUQVJUX1ZBTFVFLAorCQkJCSB0cnVlLAorCQkJCSBmYWxzZSwKKwkJCQkgZmFsc2UsCisJCQkJIEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IuSU5URUdSQUxfVkFMVUVfSU1BR0UsCisJCQkJIG51bGwsCisJCQkJIG51bGwpKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFkZHMgYSBwcm9wZXJ0eSBkZXNjcmlwdG9yIGZvciB0aGUgRW5kIFZhbHVlIGZlYXR1cmUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgYWRkRW5kVmFsdWVQcm9wZXJ0eURlc2NyaXB0b3IoT2JqZWN0IG9iamVjdCkgeworCQlpdGVtUHJvcGVydHlEZXNjcmlwdG9ycy5hZGQKKwkJCShjcmVhdGVJdGVtUHJvcGVydHlEZXNjcmlwdG9yCisJCQkJKCgoQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSlhZGFwdGVyRmFjdG9yeSkuZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCksCisJCQkJIGdldFJlc291cmNlTG9jYXRvcigpLAorCQkJCSBnZXRTdHJpbmcoIl9VSV9JbnRlZ2VyUmFuZ2VNb2RpZmllcl9lbmRWYWx1ZV9mZWF0dXJlIiksIC8vJE5PTi1OTFMtMSQKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfUHJvcGVydHlEZXNjcmlwdG9yX2Rlc2NyaXB0aW9uIiwgIl9VSV9JbnRlZ2VyUmFuZ2VNb2RpZmllcl9lbmRWYWx1ZV9mZWF0dXJlIiwgIl9VSV9JbnRlZ2VyUmFuZ2VNb2RpZmllcl90eXBlIiksIC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJCAvLyROT04tTkxTLTMkCisJCQkJIE1vZGlmaWVyUGFja2FnZS5MaXRlcmFscy5JTlRFR0VSX1JBTkdFX01PRElGSUVSX19FTkRfVkFMVUUsCisJCQkJIHRydWUsCisJCQkJIGZhbHNlLAorCQkJCSBmYWxzZSwKKwkJCQkgSXRlbVByb3BlcnR5RGVzY3JpcHRvci5JTlRFR1JBTF9WQUxVRV9JTUFHRSwKKwkJCQkgbnVsbCwKKwkJCQkgbnVsbCkpOworCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyBhIHByb3BlcnR5IGRlc2NyaXB0b3IgZm9yIHRoZSBJbmNyZW1lbnQgZmVhdHVyZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBhZGRJbmNyZW1lbnRQcm9wZXJ0eURlc2NyaXB0b3IoT2JqZWN0IG9iamVjdCkgeworCQlpdGVtUHJvcGVydHlEZXNjcmlwdG9ycy5hZGQKKwkJCShjcmVhdGVJdGVtUHJvcGVydHlEZXNjcmlwdG9yCisJCQkJKCgoQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSlhZGFwdGVyRmFjdG9yeSkuZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCksCisJCQkJIGdldFJlc291cmNlTG9jYXRvcigpLAorCQkJCSBnZXRTdHJpbmcoIl9VSV9JbnRlZ2VyUmFuZ2VNb2RpZmllcl9pbmNyZW1lbnRfZmVhdHVyZSIpLCAvLyROT04tTkxTLTEkCisJCQkJIGdldFN0cmluZygiX1VJX1Byb3BlcnR5RGVzY3JpcHRvcl9kZXNjcmlwdGlvbiIsICJfVUlfSW50ZWdlclJhbmdlTW9kaWZpZXJfaW5jcmVtZW50X2ZlYXR1cmUiLCAiX1VJX0ludGVnZXJSYW5nZU1vZGlmaWVyX3R5cGUiKSwgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkIC8vJE5PTi1OTFMtMyQKKwkJCQkgTW9kaWZpZXJQYWNrYWdlLkxpdGVyYWxzLklOVEVHRVJfUkFOR0VfTU9ESUZJRVJfX0lOQ1JFTUVOVCwKKwkJCQkgdHJ1ZSwKKwkJCQkgZmFsc2UsCisJCQkJIGZhbHNlLAorCQkJCSBJdGVtUHJvcGVydHlEZXNjcmlwdG9yLklOVEVHUkFMX1ZBTFVFX0lNQUdFLAorCQkJCSBudWxsLAorCQkJCSBudWxsKSk7CisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIHRoZSBsYWJlbCB0ZXh0IGZvciB0aGUgYWRhcHRlZCBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIFN0cmluZyBnZXRUZXh0KE9iamVjdCBvYmplY3QpIHsKKwkJZmluYWwgSW50ZWdlclJhbmdlTW9kaWZpZXIgcm0gPSAoSW50ZWdlclJhbmdlTW9kaWZpZXIpb2JqZWN0OworCQlmaW5hbCBTdHJpbmdCdWlsZGVyIHNiID0gbmV3IFN0cmluZ0J1aWxkZXIocm0uZ2V0RmVhdHVyZU5hbWUoKSk7CisJCXNiLmFwcGVuZCgiOiAiKTsKKwkJc2IuYXBwZW5kKHJtLmdldFN0YXJ0VmFsdWUoKSk7CisJCXNiLmFwcGVuZCgiIHRvICIpOworCQlzYi5hcHBlbmQocm0uZ2V0RW5kVmFsdWUoKSk7CisJCXNiLmFwcGVuZCgiIGJ5ICIpOworCQlzYi5hcHBlbmQocm0uZ2V0SW5jcmVtZW50KCkpOworCQlyZXR1cm4gc2IudG9TdHJpbmcoKTsKKwl9IC8vIGdldFRleHQKKwkKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgdGhlIGxhYmVsIHRleHQgZm9yIHRoZSBhZGFwdGVkIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBTdHJpbmcgZ2V0VGV4dEdlbihPYmplY3Qgb2JqZWN0KSB7CisJCVN0cmluZyBsYWJlbCA9ICgoSW50ZWdlclJhbmdlTW9kaWZpZXIpb2JqZWN0KS5nZXRGZWF0dXJlTmFtZSgpOworCQlyZXR1cm4gbGFiZWwgPT0gbnVsbCB8fCBsYWJlbC5sZW5ndGgoKSA9PSAwID8KKwkJCWdldFN0cmluZygiX1VJX0ludGVnZXJSYW5nZU1vZGlmaWVyX3R5cGUiKSA6IC8vJE5PTi1OTFMtMSQKKwkJCWdldFN0cmluZygiX1VJX0ludGVnZXJSYW5nZU1vZGlmaWVyX3R5cGUiKSArICIgIiArIGxhYmVsOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKKwl9CisKKwkvKioKKwkgKiBUaGlzIGhhbmRsZXMgbW9kZWwgbm90aWZpY2F0aW9ucyBieSBjYWxsaW5nIHtAbGluayAjdXBkYXRlQ2hpbGRyZW59IHRvIHVwZGF0ZSBhbnkgY2FjaGVkCisJICogY2hpbGRyZW4gYW5kIGJ5IGNyZWF0aW5nIGEgdmlld2VyIG5vdGlmaWNhdGlvbiwgd2hpY2ggaXQgcGFzc2VzIHRvIHtAbGluayAjZmlyZU5vdGlmeUNoYW5nZWR9LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIG5vdGlmeUNoYW5nZWQoTm90aWZpY2F0aW9uIG5vdGlmaWNhdGlvbikgeworCQl1cGRhdGVDaGlsZHJlbihub3RpZmljYXRpb24pOworCisJCXN3aXRjaCAobm90aWZpY2F0aW9uLmdldEZlYXR1cmVJRChJbnRlZ2VyUmFuZ2VNb2RpZmllci5jbGFzcykpIHsKKwkJCWNhc2UgTW9kaWZpZXJQYWNrYWdlLklOVEVHRVJfUkFOR0VfTU9ESUZJRVJfX1NUQVJUX1ZBTFVFOgorCQkJY2FzZSBNb2RpZmllclBhY2thZ2UuSU5URUdFUl9SQU5HRV9NT0RJRklFUl9fRU5EX1ZBTFVFOgorCQkJY2FzZSBNb2RpZmllclBhY2thZ2UuSU5URUdFUl9SQU5HRV9NT0RJRklFUl9fSU5DUkVNRU5UOgorCQkJY2FzZSBNb2RpZmllclBhY2thZ2UuSU5URUdFUl9SQU5HRV9NT0RJRklFUl9fTkVYVF9WQUxVRToKKwkJCWNhc2UgTW9kaWZpZXJQYWNrYWdlLklOVEVHRVJfUkFOR0VfTU9ESUZJRVJfX09SSUdJTkFMX1ZBTFVFOgorCQkJCWZpcmVOb3RpZnlDaGFuZ2VkKG5ldyBWaWV3ZXJOb3RpZmljYXRpb24obm90aWZpY2F0aW9uLCBub3RpZmljYXRpb24uZ2V0Tm90aWZpZXIoKSwgZmFsc2UsIHRydWUpKTsKKwkJCQlyZXR1cm47CisJCX0KKwkJc3VwZXIubm90aWZ5Q2hhbmdlZChub3RpZmljYXRpb24pOworCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmVkaXQuY29tbWFuZC5Db21tYW5kUGFyYW1ldGVyfXMgZGVzY3JpYmluZyB0aGUgY2hpbGRyZW4KKwkgKiB0aGF0IGNhbiBiZSBjcmVhdGVkIHVuZGVyIHRoaXMgb2JqZWN0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIGNvbGxlY3ROZXdDaGlsZERlc2NyaXB0b3JzKENvbGxlY3Rpb248T2JqZWN0PiBuZXdDaGlsZERlc2NyaXB0b3JzLCBPYmplY3Qgb2JqZWN0KSB7CisJCXN1cGVyLmNvbGxlY3ROZXdDaGlsZERlc2NyaXB0b3JzKG5ld0NoaWxkRGVzY3JpcHRvcnMsIG9iamVjdCk7CisJfQorCit9CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL21vZGlmaWVyL3Byb3ZpZGVyL0ludGVnZXJTZXF1ZW5jZU1vZGlmaWVySXRlbVByb3ZpZGVyLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL21vZGlmaWVyL3Byb3ZpZGVyL0ludGVnZXJTZXF1ZW5jZU1vZGlmaWVySXRlbVByb3ZpZGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzk4NzQzMAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvbW9kaWZpZXIvcHJvdmlkZXIvSW50ZWdlclNlcXVlbmNlTW9kaWZpZXJJdGVtUHJvdmlkZXIuamF2YQpAQCAtMCwwICsxLDEzOSBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIucHJvdmlkZXI7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LkFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5Db21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklFZGl0aW5nRG9tYWluSXRlbVByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtTGFiZWxQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbVByb3BlcnR5RGVzY3JpcHRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbVByb3BlcnR5U291cmNlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklTdHJ1Y3R1cmVkSXRlbUNvbnRlbnRQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JVHJlZUl0ZW1Db250ZW50UHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSXRlbVByb3BlcnR5RGVzY3JpcHRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5WaWV3ZXJOb3RpZmljYXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLkludGVnZXJTZXF1ZW5jZU1vZGlmaWVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5Nb2RpZmllclBhY2thZ2U7CisKKy8qKgorICogVGhpcyBpcyB0aGUgaXRlbSBwcm92aWRlciBhZGFwdGVyIGZvciBhIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuSW50ZWdlclNlcXVlbmNlTW9kaWZpZXJ9IG9iamVjdC4KKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIEludGVnZXJTZXF1ZW5jZU1vZGlmaWVySXRlbVByb3ZpZGVyCisJZXh0ZW5kcyBTZXF1ZW5jZU1vZGlmaWVySXRlbVByb3ZpZGVyCisJaW1wbGVtZW50cworCQlJRWRpdGluZ0RvbWFpbkl0ZW1Qcm92aWRlciwKKwkJSVN0cnVjdHVyZWRJdGVtQ29udGVudFByb3ZpZGVyLAorCQlJVHJlZUl0ZW1Db250ZW50UHJvdmlkZXIsCisJCUlJdGVtTGFiZWxQcm92aWRlciwKKwkJSUl0ZW1Qcm9wZXJ0eVNvdXJjZSB7CisJLyoqCisJICogVGhpcyBjb25zdHJ1Y3RzIGFuIGluc3RhbmNlIGZyb20gYSBmYWN0b3J5IGFuZCBhIG5vdGlmaWVyLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBJbnRlZ2VyU2VxdWVuY2VNb2RpZmllckl0ZW1Qcm92aWRlcihBZGFwdGVyRmFjdG9yeSBhZGFwdGVyRmFjdG9yeSkgeworCQlzdXBlcihhZGFwdGVyRmFjdG9yeSk7CisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIHRoZSBwcm9wZXJ0eSBkZXNjcmlwdG9ycyBmb3IgdGhlIGFkYXB0ZWQgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIExpc3Q8SUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I+IGdldFByb3BlcnR5RGVzY3JpcHRvcnMoT2JqZWN0IG9iamVjdCkgeworCQlpZiAoaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMgPT0gbnVsbCkgeworCQkJc3VwZXIuZ2V0UHJvcGVydHlEZXNjcmlwdG9ycyhvYmplY3QpOworCisJCQlhZGRTZXF1ZW5jZVByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QpOworCQl9CisJCXJldHVybiBpdGVtUHJvcGVydHlEZXNjcmlwdG9yczsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFkZHMgYSBwcm9wZXJ0eSBkZXNjcmlwdG9yIGZvciB0aGUgU2VxdWVuY2UgZmVhdHVyZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBhZGRTZXF1ZW5jZVByb3BlcnR5RGVzY3JpcHRvcihPYmplY3Qgb2JqZWN0KSB7CisJCWl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzLmFkZAorCQkJKGNyZWF0ZUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IKKwkJCQkoKChDb21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5KWFkYXB0ZXJGYWN0b3J5KS5nZXRSb290QWRhcHRlckZhY3RvcnkoKSwKKwkJCQkgZ2V0UmVzb3VyY2VMb2NhdG9yKCksCisJCQkJIGdldFN0cmluZygiX1VJX0ludGVnZXJTZXF1ZW5jZU1vZGlmaWVyX3NlcXVlbmNlX2ZlYXR1cmUiKSwgLy8kTk9OLU5MUy0xJAorCQkJCSBnZXRTdHJpbmcoIl9VSV9Qcm9wZXJ0eURlc2NyaXB0b3JfZGVzY3JpcHRpb24iLCAiX1VJX0ludGVnZXJTZXF1ZW5jZU1vZGlmaWVyX3NlcXVlbmNlX2ZlYXR1cmUiLCAiX1VJX0ludGVnZXJTZXF1ZW5jZU1vZGlmaWVyX3R5cGUiKSwgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkIC8vJE5PTi1OTFMtMyQKKwkJCQkgTW9kaWZpZXJQYWNrYWdlLkxpdGVyYWxzLklOVEVHRVJfU0VRVUVOQ0VfTU9ESUZJRVJfX1NFUVVFTkNFLAorCQkJCSB0cnVlLAorCQkJCSBmYWxzZSwKKwkJCQkgZmFsc2UsCisJCQkJIEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IuR0VORVJJQ19WQUxVRV9JTUFHRSwKKwkJCQkgbnVsbCwKKwkJCQkgbnVsbCkpOworCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyB0aGUgbGFiZWwgdGV4dCBmb3IgdGhlIGFkYXB0ZWQgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIFN0cmluZyBnZXRUZXh0KE9iamVjdCBvYmplY3QpIHsKKwkJU3RyaW5nIGxhYmVsID0gKChJbnRlZ2VyU2VxdWVuY2VNb2RpZmllcilvYmplY3QpLmdldEZlYXR1cmVOYW1lKCk7CisJCXJldHVybiBsYWJlbCA9PSBudWxsIHx8IGxhYmVsLmxlbmd0aCgpID09IDAgPworCQkJZ2V0U3RyaW5nKCJfVUlfSW50ZWdlclNlcXVlbmNlTW9kaWZpZXJfdHlwZSIpIDogLy8kTk9OLU5MUy0xJAorCQkJZ2V0U3RyaW5nKCJfVUlfSW50ZWdlclNlcXVlbmNlTW9kaWZpZXJfdHlwZSIpICsgIiAiICsgbGFiZWw7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAorCX0KKworCS8qKgorCSAqIFRoaXMgaGFuZGxlcyBtb2RlbCBub3RpZmljYXRpb25zIGJ5IGNhbGxpbmcge0BsaW5rICN1cGRhdGVDaGlsZHJlbn0gdG8gdXBkYXRlIGFueSBjYWNoZWQKKwkgKiBjaGlsZHJlbiBhbmQgYnkgY3JlYXRpbmcgYSB2aWV3ZXIgbm90aWZpY2F0aW9uLCB3aGljaCBpdCBwYXNzZXMgdG8ge0BsaW5rICNmaXJlTm90aWZ5Q2hhbmdlZH0uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgbm90aWZ5Q2hhbmdlZChOb3RpZmljYXRpb24gbm90aWZpY2F0aW9uKSB7CisJCXVwZGF0ZUNoaWxkcmVuKG5vdGlmaWNhdGlvbik7CisKKwkJc3dpdGNoIChub3RpZmljYXRpb24uZ2V0RmVhdHVyZUlEKEludGVnZXJTZXF1ZW5jZU1vZGlmaWVyLmNsYXNzKSkgeworCQkJY2FzZSBNb2RpZmllclBhY2thZ2UuSU5URUdFUl9TRVFVRU5DRV9NT0RJRklFUl9fU0VRVUVOQ0U6CisJCQkJZmlyZU5vdGlmeUNoYW5nZWQobmV3IFZpZXdlck5vdGlmaWNhdGlvbihub3RpZmljYXRpb24sIG5vdGlmaWNhdGlvbi5nZXROb3RpZmllcigpLCBmYWxzZSwgdHJ1ZSkpOworCQkJCXJldHVybjsKKwkJfQorCQlzdXBlci5ub3RpZnlDaGFuZ2VkKG5vdGlmaWNhdGlvbik7CisJfQorCisJLyoqCisJICogVGhpcyBhZGRzIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuZWRpdC5jb21tYW5kLkNvbW1hbmRQYXJhbWV0ZXJ9cyBkZXNjcmliaW5nIHRoZSBjaGlsZHJlbgorCSAqIHRoYXQgY2FuIGJlIGNyZWF0ZWQgdW5kZXIgdGhpcyBvYmplY3QuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgY29sbGVjdE5ld0NoaWxkRGVzY3JpcHRvcnMoQ29sbGVjdGlvbjxPYmplY3Q+IG5ld0NoaWxkRGVzY3JpcHRvcnMsIE9iamVjdCBvYmplY3QpIHsKKwkJc3VwZXIuY29sbGVjdE5ld0NoaWxkRGVzY3JpcHRvcnMobmV3Q2hpbGREZXNjcmlwdG9ycywgb2JqZWN0KTsKKwl9CisKK30KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvbW9kaWZpZXIvcHJvdmlkZXIvTG9uZ01vZGlmaWVySXRlbVByb3ZpZGVyLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL21vZGlmaWVyL3Byb3ZpZGVyL0xvbmdNb2RpZmllckl0ZW1Qcm92aWRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjViYzAyODcKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL21vZGlmaWVyL3Byb3ZpZGVyL0xvbmdNb2RpZmllckl0ZW1Qcm92aWRlci5qYXZhCkBAIC0wLDAgKzEsMTg4IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5wcm92aWRlcjsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOworaW1wb3J0IGphdmEudXRpbC5MaXN0OworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkNvbXBvc2VhYmxlQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUVkaXRpbmdEb21haW5JdGVtUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1MYWJlbFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtUHJvcGVydHlEZXNjcmlwdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtUHJvcGVydHlTb3VyY2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVN0cnVjdHVyZWRJdGVtQ29udGVudFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklUcmVlSXRlbUNvbnRlbnRQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JdGVtUHJvcGVydHlEZXNjcmlwdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLlZpZXdlck5vdGlmaWNhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuTG9uZ01vZGlmaWVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5Nb2RpZmllclBhY2thZ2U7CisKKy8qKgorICogVGhpcyBpcyB0aGUgaXRlbSBwcm92aWRlciBhZGFwdGVyIGZvciBhIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuTG9uZ01vZGlmaWVyfSBvYmplY3QuCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBMb25nTW9kaWZpZXJJdGVtUHJvdmlkZXIKKwlleHRlbmRzIFNpbmdsZVZhbHVlTW9kaWZpZXJJdGVtUHJvdmlkZXIKKwlpbXBsZW1lbnRzCisJCUlFZGl0aW5nRG9tYWluSXRlbVByb3ZpZGVyLAorCQlJU3RydWN0dXJlZEl0ZW1Db250ZW50UHJvdmlkZXIsCisJCUlUcmVlSXRlbUNvbnRlbnRQcm92aWRlciwKKwkJSUl0ZW1MYWJlbFByb3ZpZGVyLAorCQlJSXRlbVByb3BlcnR5U291cmNlIHsKKwkvKioKKwkgKiBUaGlzIGNvbnN0cnVjdHMgYW4gaW5zdGFuY2UgZnJvbSBhIGZhY3RvcnkgYW5kIGEgbm90aWZpZXIuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIExvbmdNb2RpZmllckl0ZW1Qcm92aWRlcihBZGFwdGVyRmFjdG9yeSBhZGFwdGVyRmFjdG9yeSkgeworCQlzdXBlcihhZGFwdGVyRmFjdG9yeSk7CisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIHRoZSBwcm9wZXJ0eSBkZXNjcmlwdG9ycyBmb3IgdGhlIGFkYXB0ZWQgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIExpc3Q8SUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I+IGdldFByb3BlcnR5RGVzY3JpcHRvcnMoT2JqZWN0IG9iamVjdCkgeworCQlpZiAoaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMgPT0gbnVsbCkgeworCQkJc3VwZXIuZ2V0UHJvcGVydHlEZXNjcmlwdG9ycyhvYmplY3QpOworCisJCQlhZGRWYWx1ZVByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QpOworCQkJYWRkT3JpZ2luYWxWYWx1ZVByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QpOworCQl9CisJCXJldHVybiBpdGVtUHJvcGVydHlEZXNjcmlwdG9yczsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFkZHMgYSBwcm9wZXJ0eSBkZXNjcmlwdG9yIGZvciB0aGUgVmFsdWUgZmVhdHVyZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBhZGRWYWx1ZVByb3BlcnR5RGVzY3JpcHRvcihPYmplY3Qgb2JqZWN0KSB7CisJCWl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzLmFkZAorCQkJKGNyZWF0ZUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IKKwkJCQkoKChDb21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5KWFkYXB0ZXJGYWN0b3J5KS5nZXRSb290QWRhcHRlckZhY3RvcnkoKSwKKwkJCQkgZ2V0UmVzb3VyY2VMb2NhdG9yKCksCisJCQkJIGdldFN0cmluZygiX1VJX0xvbmdNb2RpZmllcl92YWx1ZV9mZWF0dXJlIiksIC8vJE5PTi1OTFMtMSQKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfUHJvcGVydHlEZXNjcmlwdG9yX2Rlc2NyaXB0aW9uIiwgIl9VSV9Mb25nTW9kaWZpZXJfdmFsdWVfZmVhdHVyZSIsICJfVUlfTG9uZ01vZGlmaWVyX3R5cGUiKSwgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkIC8vJE5PTi1OTFMtMyQKKwkJCQkgTW9kaWZpZXJQYWNrYWdlLkxpdGVyYWxzLkxPTkdfTU9ESUZJRVJfX1ZBTFVFLAorCQkJCSB0cnVlLAorCQkJCSBmYWxzZSwKKwkJCQkgZmFsc2UsCisJCQkJIEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IuSU5URUdSQUxfVkFMVUVfSU1BR0UsCisJCQkJIG51bGwsCisJCQkJIG51bGwpKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFkZHMgYSBwcm9wZXJ0eSBkZXNjcmlwdG9yIGZvciB0aGUgT3JpZ2luYWwgVmFsdWUgZmVhdHVyZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBhZGRPcmlnaW5hbFZhbHVlUHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdCBvYmplY3QpIHsKKwkJaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMuYWRkCisJCQkoY3JlYXRlSXRlbVByb3BlcnR5RGVzY3JpcHRvcgorCQkJCSgoKENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnkpYWRhcHRlckZhY3RvcnkpLmdldFJvb3RBZGFwdGVyRmFjdG9yeSgpLAorCQkJCSBnZXRSZXNvdXJjZUxvY2F0b3IoKSwKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfTG9uZ01vZGlmaWVyX29yaWdpbmFsVmFsdWVfZmVhdHVyZSIpLCAvLyROT04tTkxTLTEkCisJCQkJIGdldFN0cmluZygiX1VJX1Byb3BlcnR5RGVzY3JpcHRvcl9kZXNjcmlwdGlvbiIsICJfVUlfTG9uZ01vZGlmaWVyX29yaWdpbmFsVmFsdWVfZmVhdHVyZSIsICJfVUlfTG9uZ01vZGlmaWVyX3R5cGUiKSwgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkIC8vJE5PTi1OTFMtMyQKKwkJCQkgTW9kaWZpZXJQYWNrYWdlLkxpdGVyYWxzLkxPTkdfTU9ESUZJRVJfX09SSUdJTkFMX1ZBTFVFLAorCQkJCSBmYWxzZSwKKwkJCQkgZmFsc2UsCisJCQkJIGZhbHNlLAorCQkJCSBJdGVtUHJvcGVydHlEZXNjcmlwdG9yLklOVEVHUkFMX1ZBTFVFX0lNQUdFLAorCQkJCSBudWxsLAorCQkJCSBudWxsKSk7CisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIExvbmdNb2RpZmllci5naWYuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBPYmplY3QgZ2V0SW1hZ2UoT2JqZWN0IG9iamVjdCkgeworCQlyZXR1cm4gb3ZlcmxheUltYWdlKG9iamVjdCwgZ2V0UmVzb3VyY2VMb2NhdG9yKCkuZ2V0SW1hZ2UoImZ1bGwvY3VzdG9tb2JqMTYvTG9uZ01vZGlmaWVyLnBuZyIpKTsgLy8kTk9OLU5MUy0xJAorCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyB0aGUgbGFiZWwgdGV4dCBmb3IgdGhlIGFkYXB0ZWQgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisKKwlwdWJsaWMgU3RyaW5nIGdldFRleHRHZW4oT2JqZWN0IG9iamVjdCkgeworCQlTdHJpbmcgbGFiZWwgPSAoKExvbmdNb2RpZmllcilvYmplY3QpLmdldEZlYXR1cmVOYW1lKCk7CisJCXJldHVybiBsYWJlbCA9PSBudWxsIHx8IGxhYmVsLmxlbmd0aCgpID09IDAgPworCQkJZ2V0U3RyaW5nKCJfVUlfTG9uZ01vZGlmaWVyX3R5cGUiKSA6IC8vJE5PTi1OTFMtMSQKKwkJCWdldFN0cmluZygiX1VJX0xvbmdNb2RpZmllcl90eXBlIikgKyAiICIgKyBsYWJlbDsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIHRoZSBsYWJlbCB0ZXh0IGZvciB0aGUgYWRhcHRlZCBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIFN0cmluZyBnZXRUZXh0KE9iamVjdCBvYmplY3QpIHsKKwkJU3RyaW5nIGxhYmVsID0gKChMb25nTW9kaWZpZXIpb2JqZWN0KS5nZXRGZWF0dXJlTmFtZSgpOworCQlyZXR1cm4gbGFiZWwgPT0gbnVsbCB8fCBsYWJlbC5sZW5ndGgoKSA9PSAwID8KKwkJCWdldFN0cmluZygiX1VJX0xvbmdNb2RpZmllcl90eXBlIikgOiAvLyROT04tTkxTLTEkCisJCQorCQkgbGFiZWwrIiAiKygoTG9uZ01vZGlmaWVyKW9iamVjdCkuZ2V0VmFsdWUoKTsKKwl9CisJLyoqCisJICogVGhpcyBoYW5kbGVzIG1vZGVsIG5vdGlmaWNhdGlvbnMgYnkgY2FsbGluZyB7QGxpbmsgI3VwZGF0ZUNoaWxkcmVufSB0byB1cGRhdGUgYW55IGNhY2hlZAorCSAqIGNoaWxkcmVuIGFuZCBieSBjcmVhdGluZyBhIHZpZXdlciBub3RpZmljYXRpb24sIHdoaWNoIGl0IHBhc3NlcyB0byB7QGxpbmsgI2ZpcmVOb3RpZnlDaGFuZ2VkfS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBub3RpZnlDaGFuZ2VkKE5vdGlmaWNhdGlvbiBub3RpZmljYXRpb24pIHsKKwkJdXBkYXRlQ2hpbGRyZW4obm90aWZpY2F0aW9uKTsKKworCQlzd2l0Y2ggKG5vdGlmaWNhdGlvbi5nZXRGZWF0dXJlSUQoTG9uZ01vZGlmaWVyLmNsYXNzKSkgeworCQkJY2FzZSBNb2RpZmllclBhY2thZ2UuTE9OR19NT0RJRklFUl9fVkFMVUU6CisJCQljYXNlIE1vZGlmaWVyUGFja2FnZS5MT05HX01PRElGSUVSX19PUklHSU5BTF9WQUxVRToKKwkJCQlmaXJlTm90aWZ5Q2hhbmdlZChuZXcgVmlld2VyTm90aWZpY2F0aW9uKG5vdGlmaWNhdGlvbiwgbm90aWZpY2F0aW9uLmdldE5vdGlmaWVyKCksIGZhbHNlLCB0cnVlKSk7CisJCQkJcmV0dXJuOworCQl9CisJCXN1cGVyLm5vdGlmeUNoYW5nZWQobm90aWZpY2F0aW9uKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFkZHMge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lZGl0LmNvbW1hbmQuQ29tbWFuZFBhcmFtZXRlcn1zIGRlc2NyaWJpbmcgdGhlIGNoaWxkcmVuCisJICogdGhhdCBjYW4gYmUgY3JlYXRlZCB1bmRlciB0aGlzIG9iamVjdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgdm9pZCBjb2xsZWN0TmV3Q2hpbGREZXNjcmlwdG9ycyhDb2xsZWN0aW9uPE9iamVjdD4gbmV3Q2hpbGREZXNjcmlwdG9ycywgT2JqZWN0IG9iamVjdCkgeworCQlzdXBlci5jb2xsZWN0TmV3Q2hpbGREZXNjcmlwdG9ycyhuZXdDaGlsZERlc2NyaXB0b3JzLCBvYmplY3QpOworCX0KKworfQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9tb2RpZmllci9wcm92aWRlci9Mb25nTk9QTW9kaWZpZXJJdGVtUHJvdmlkZXIuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvbW9kaWZpZXIvcHJvdmlkZXIvTG9uZ05PUE1vZGlmaWVySXRlbVByb3ZpZGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjU4ZGYzMAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvbW9kaWZpZXIvcHJvdmlkZXIvTG9uZ05PUE1vZGlmaWVySXRlbVByb3ZpZGVyLmphdmEKQEAgLTAsMCArMSwxMDYgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLnByb3ZpZGVyOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCitpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5BZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUVkaXRpbmdEb21haW5JdGVtUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1MYWJlbFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtUHJvcGVydHlEZXNjcmlwdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtUHJvcGVydHlTb3VyY2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVN0cnVjdHVyZWRJdGVtQ29udGVudFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklUcmVlSXRlbUNvbnRlbnRQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuTG9uZ05PUE1vZGlmaWVyOworCisvKioKKyAqIFRoaXMgaXMgdGhlIGl0ZW0gcHJvdmlkZXIgYWRhcHRlciBmb3IgYSB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLkxvbmdOT1BNb2RpZmllcn0gb2JqZWN0LgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgTG9uZ05PUE1vZGlmaWVySXRlbVByb3ZpZGVyCisJZXh0ZW5kcyBOT1BNb2RpZmllckl0ZW1Qcm92aWRlcgorCWltcGxlbWVudHMKKwkJSUVkaXRpbmdEb21haW5JdGVtUHJvdmlkZXIsCisJCUlTdHJ1Y3R1cmVkSXRlbUNvbnRlbnRQcm92aWRlciwKKwkJSVRyZWVJdGVtQ29udGVudFByb3ZpZGVyLAorCQlJSXRlbUxhYmVsUHJvdmlkZXIsCisJCUlJdGVtUHJvcGVydHlTb3VyY2UgeworCS8qKgorCSAqIFRoaXMgY29uc3RydWN0cyBhbiBpbnN0YW5jZSBmcm9tIGEgZmFjdG9yeSBhbmQgYSBub3RpZmllci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgTG9uZ05PUE1vZGlmaWVySXRlbVByb3ZpZGVyKEFkYXB0ZXJGYWN0b3J5IGFkYXB0ZXJGYWN0b3J5KSB7CisJCXN1cGVyKGFkYXB0ZXJGYWN0b3J5KTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgdGhlIHByb3BlcnR5IGRlc2NyaXB0b3JzIGZvciB0aGUgYWRhcHRlZCBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgTGlzdDxJSXRlbVByb3BlcnR5RGVzY3JpcHRvcj4gZ2V0UHJvcGVydHlEZXNjcmlwdG9ycyhPYmplY3Qgb2JqZWN0KSB7CisJCWlmIChpdGVtUHJvcGVydHlEZXNjcmlwdG9ycyA9PSBudWxsKSB7CisJCQlzdXBlci5nZXRQcm9wZXJ0eURlc2NyaXB0b3JzKG9iamVjdCk7CisKKwkJfQorCQlyZXR1cm4gaXRlbVByb3BlcnR5RGVzY3JpcHRvcnM7CisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIHRoZSBsYWJlbCB0ZXh0IGZvciB0aGUgYWRhcHRlZCBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgU3RyaW5nIGdldFRleHQoT2JqZWN0IG9iamVjdCkgeworCQlTdHJpbmcgbGFiZWwgPSAoKExvbmdOT1BNb2RpZmllcilvYmplY3QpLmdldEZlYXR1cmVOYW1lKCk7CisJCXJldHVybiBsYWJlbCA9PSBudWxsIHx8IGxhYmVsLmxlbmd0aCgpID09IDAgPworCQkJZ2V0U3RyaW5nKCJfVUlfTG9uZ05PUE1vZGlmaWVyX3R5cGUiKSA6IC8vJE5PTi1OTFMtMSQKKwkJCWdldFN0cmluZygiX1VJX0xvbmdOT1BNb2RpZmllcl90eXBlIikgKyAiICIgKyBsYWJlbDsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCisJfQorCisJLyoqCisJICogVGhpcyBoYW5kbGVzIG1vZGVsIG5vdGlmaWNhdGlvbnMgYnkgY2FsbGluZyB7QGxpbmsgI3VwZGF0ZUNoaWxkcmVufSB0byB1cGRhdGUgYW55IGNhY2hlZAorCSAqIGNoaWxkcmVuIGFuZCBieSBjcmVhdGluZyBhIHZpZXdlciBub3RpZmljYXRpb24sIHdoaWNoIGl0IHBhc3NlcyB0byB7QGxpbmsgI2ZpcmVOb3RpZnlDaGFuZ2VkfS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBub3RpZnlDaGFuZ2VkKE5vdGlmaWNhdGlvbiBub3RpZmljYXRpb24pIHsKKwkJdXBkYXRlQ2hpbGRyZW4obm90aWZpY2F0aW9uKTsKKwkJc3VwZXIubm90aWZ5Q2hhbmdlZChub3RpZmljYXRpb24pOworCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmVkaXQuY29tbWFuZC5Db21tYW5kUGFyYW1ldGVyfXMgZGVzY3JpYmluZyB0aGUgY2hpbGRyZW4KKwkgKiB0aGF0IGNhbiBiZSBjcmVhdGVkIHVuZGVyIHRoaXMgb2JqZWN0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIGNvbGxlY3ROZXdDaGlsZERlc2NyaXB0b3JzKENvbGxlY3Rpb248T2JqZWN0PiBuZXdDaGlsZERlc2NyaXB0b3JzLCBPYmplY3Qgb2JqZWN0KSB7CisJCXN1cGVyLmNvbGxlY3ROZXdDaGlsZERlc2NyaXB0b3JzKG5ld0NoaWxkRGVzY3JpcHRvcnMsIG9iamVjdCk7CisJfQorCit9CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL21vZGlmaWVyL3Byb3ZpZGVyL0xvbmdSYW5nZU1vZGlmaWVySXRlbVByb3ZpZGVyLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL21vZGlmaWVyL3Byb3ZpZGVyL0xvbmdSYW5nZU1vZGlmaWVySXRlbVByb3ZpZGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGYwNzgzNwotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvbW9kaWZpZXIvcHJvdmlkZXIvTG9uZ1JhbmdlTW9kaWZpZXJJdGVtUHJvdmlkZXIuamF2YQpAQCAtMCwwICsxLDIyNiBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIucHJvdmlkZXI7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LkFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5Db21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklFZGl0aW5nRG9tYWluSXRlbVByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtTGFiZWxQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbVByb3BlcnR5RGVzY3JpcHRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbVByb3BlcnR5U291cmNlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklTdHJ1Y3R1cmVkSXRlbUNvbnRlbnRQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JVHJlZUl0ZW1Db250ZW50UHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSXRlbVByb3BlcnR5RGVzY3JpcHRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5WaWV3ZXJOb3RpZmljYXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLkxvbmdSYW5nZU1vZGlmaWVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5Nb2RpZmllclBhY2thZ2U7CisKKy8qKgorICogVGhpcyBpcyB0aGUgaXRlbSBwcm92aWRlciBhZGFwdGVyIGZvciBhIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuTG9uZ1JhbmdlTW9kaWZpZXJ9IG9iamVjdC4KKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIExvbmdSYW5nZU1vZGlmaWVySXRlbVByb3ZpZGVyCisJZXh0ZW5kcyBSYW5nZU1vZGlmaWVySXRlbVByb3ZpZGVyCisJaW1wbGVtZW50cworCQlJRWRpdGluZ0RvbWFpbkl0ZW1Qcm92aWRlciwKKwkJSVN0cnVjdHVyZWRJdGVtQ29udGVudFByb3ZpZGVyLAorCQlJVHJlZUl0ZW1Db250ZW50UHJvdmlkZXIsCisJCUlJdGVtTGFiZWxQcm92aWRlciwKKwkJSUl0ZW1Qcm9wZXJ0eVNvdXJjZSB7CisJLyoqCisJICogVGhpcyBjb25zdHJ1Y3RzIGFuIGluc3RhbmNlIGZyb20gYSBmYWN0b3J5IGFuZCBhIG5vdGlmaWVyLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBMb25nUmFuZ2VNb2RpZmllckl0ZW1Qcm92aWRlcihBZGFwdGVyRmFjdG9yeSBhZGFwdGVyRmFjdG9yeSkgeworCQlzdXBlcihhZGFwdGVyRmFjdG9yeSk7CisJfQorCisvLwkvKioKKy8vCSAqIFRoaXMgcmV0dXJucyB0aGUgcHJvcGVydHkgZGVzY3JpcHRvcnMgZm9yIHRoZSBhZGFwdGVkIGNsYXNzLgorLy8JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKy8vCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorLy8JICogQGdlbmVyYXRlZAorLy8JICovCisvLwlAT3ZlcnJpZGUKKy8vCXB1YmxpYyBMaXN0PElJdGVtUHJvcGVydHlEZXNjcmlwdG9yPiBnZXRQcm9wZXJ0eURlc2NyaXB0b3JzKE9iamVjdCBvYmplY3QpIHsKKy8vCQlpZiAoaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMgPT0gbnVsbCkgeworLy8JCQlzdXBlci5nZXRQcm9wZXJ0eURlc2NyaXB0b3JzKG9iamVjdCk7CisvLworLy8JCQlhZGRTdGFydFZhbHVlUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCk7CisvLwkJCWFkZEVuZFZhbHVlUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCk7CisvLwkJCWFkZEluY3JlbWVudFByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QpOworLy8JCQlhZGROZXh0VmFsdWVQcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0KTsKKy8vCQl9CisvLwkJcmV0dXJuIGl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzOworLy8JfQorCQorCS8qKgorCSAqIFRoaXMgcmV0dXJucyB0aGUgcHJvcGVydHkgZGVzY3JpcHRvcnMgZm9yIHRoZSBhZGFwdGVkIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBMaXN0PElJdGVtUHJvcGVydHlEZXNjcmlwdG9yPiBnZXRQcm9wZXJ0eURlc2NyaXB0b3JzKE9iamVjdCBvYmplY3QpIHsKKwkJaWYgKGl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzID09IG51bGwpIHsKKwkJCXN1cGVyLmdldFByb3BlcnR5RGVzY3JpcHRvcnMob2JqZWN0KTsKKworCQkJYWRkU3RhcnRWYWx1ZVByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QpOworCQkJYWRkRW5kVmFsdWVQcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0KTsKKwkJCWFkZEluY3JlbWVudFByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QpOworCQl9CisJCXJldHVybiBpdGVtUHJvcGVydHlEZXNjcmlwdG9yczsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFkZHMgYSBwcm9wZXJ0eSBkZXNjcmlwdG9yIGZvciB0aGUgU3RhcnQgVmFsdWUgZmVhdHVyZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBhZGRTdGFydFZhbHVlUHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdCBvYmplY3QpIHsKKwkJaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMuYWRkCisJCQkoY3JlYXRlSXRlbVByb3BlcnR5RGVzY3JpcHRvcgorCQkJCSgoKENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnkpYWRhcHRlckZhY3RvcnkpLmdldFJvb3RBZGFwdGVyRmFjdG9yeSgpLAorCQkJCSBnZXRSZXNvdXJjZUxvY2F0b3IoKSwKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfTG9uZ1JhbmdlTW9kaWZpZXJfc3RhcnRWYWx1ZV9mZWF0dXJlIiksIC8vJE5PTi1OTFMtMSQKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfUHJvcGVydHlEZXNjcmlwdG9yX2Rlc2NyaXB0aW9uIiwgIl9VSV9Mb25nUmFuZ2VNb2RpZmllcl9zdGFydFZhbHVlX2ZlYXR1cmUiLCAiX1VJX0xvbmdSYW5nZU1vZGlmaWVyX3R5cGUiKSwgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkIC8vJE5PTi1OTFMtMyQKKwkJCQkgTW9kaWZpZXJQYWNrYWdlLkxpdGVyYWxzLkxPTkdfUkFOR0VfTU9ESUZJRVJfX1NUQVJUX1ZBTFVFLAorCQkJCSB0cnVlLAorCQkJCSBmYWxzZSwKKwkJCQkgZmFsc2UsCisJCQkJIEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IuSU5URUdSQUxfVkFMVUVfSU1BR0UsCisJCQkJIG51bGwsCisJCQkJIG51bGwpKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFkZHMgYSBwcm9wZXJ0eSBkZXNjcmlwdG9yIGZvciB0aGUgRW5kIFZhbHVlIGZlYXR1cmUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgYWRkRW5kVmFsdWVQcm9wZXJ0eURlc2NyaXB0b3IoT2JqZWN0IG9iamVjdCkgeworCQlpdGVtUHJvcGVydHlEZXNjcmlwdG9ycy5hZGQKKwkJCShjcmVhdGVJdGVtUHJvcGVydHlEZXNjcmlwdG9yCisJCQkJKCgoQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSlhZGFwdGVyRmFjdG9yeSkuZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCksCisJCQkJIGdldFJlc291cmNlTG9jYXRvcigpLAorCQkJCSBnZXRTdHJpbmcoIl9VSV9Mb25nUmFuZ2VNb2RpZmllcl9lbmRWYWx1ZV9mZWF0dXJlIiksIC8vJE5PTi1OTFMtMSQKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfUHJvcGVydHlEZXNjcmlwdG9yX2Rlc2NyaXB0aW9uIiwgIl9VSV9Mb25nUmFuZ2VNb2RpZmllcl9lbmRWYWx1ZV9mZWF0dXJlIiwgIl9VSV9Mb25nUmFuZ2VNb2RpZmllcl90eXBlIiksIC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJCAvLyROT04tTkxTLTMkCisJCQkJIE1vZGlmaWVyUGFja2FnZS5MaXRlcmFscy5MT05HX1JBTkdFX01PRElGSUVSX19FTkRfVkFMVUUsCisJCQkJIHRydWUsCisJCQkJIGZhbHNlLAorCQkJCSBmYWxzZSwKKwkJCQkgSXRlbVByb3BlcnR5RGVzY3JpcHRvci5JTlRFR1JBTF9WQUxVRV9JTUFHRSwKKwkJCQkgbnVsbCwKKwkJCQkgbnVsbCkpOworCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyBhIHByb3BlcnR5IGRlc2NyaXB0b3IgZm9yIHRoZSBJbmNyZW1lbnQgZmVhdHVyZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBhZGRJbmNyZW1lbnRQcm9wZXJ0eURlc2NyaXB0b3IoT2JqZWN0IG9iamVjdCkgeworCQlpdGVtUHJvcGVydHlEZXNjcmlwdG9ycy5hZGQKKwkJCShjcmVhdGVJdGVtUHJvcGVydHlEZXNjcmlwdG9yCisJCQkJKCgoQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSlhZGFwdGVyRmFjdG9yeSkuZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCksCisJCQkJIGdldFJlc291cmNlTG9jYXRvcigpLAorCQkJCSBnZXRTdHJpbmcoIl9VSV9Mb25nUmFuZ2VNb2RpZmllcl9pbmNyZW1lbnRfZmVhdHVyZSIpLCAvLyROT04tTkxTLTEkCisJCQkJIGdldFN0cmluZygiX1VJX1Byb3BlcnR5RGVzY3JpcHRvcl9kZXNjcmlwdGlvbiIsICJfVUlfTG9uZ1JhbmdlTW9kaWZpZXJfaW5jcmVtZW50X2ZlYXR1cmUiLCAiX1VJX0xvbmdSYW5nZU1vZGlmaWVyX3R5cGUiKSwgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkIC8vJE5PTi1OTFMtMyQKKwkJCQkgTW9kaWZpZXJQYWNrYWdlLkxpdGVyYWxzLkxPTkdfUkFOR0VfTU9ESUZJRVJfX0lOQ1JFTUVOVCwKKwkJCQkgdHJ1ZSwKKwkJCQkgZmFsc2UsCisJCQkJIGZhbHNlLAorCQkJCSBJdGVtUHJvcGVydHlEZXNjcmlwdG9yLklOVEVHUkFMX1ZBTFVFX0lNQUdFLAorCQkJCSBudWxsLAorCQkJCSBudWxsKSk7CisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIHRoZSBsYWJlbCB0ZXh0IGZvciB0aGUgYWRhcHRlZCBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIFN0cmluZyBnZXRUZXh0KE9iamVjdCBvYmplY3QpIHsKKwkJZmluYWwgTG9uZ1JhbmdlTW9kaWZpZXIgcm0gPSAoTG9uZ1JhbmdlTW9kaWZpZXIpb2JqZWN0OworCQlmaW5hbCBTdHJpbmdCdWlsZGVyIHNiID0gbmV3IFN0cmluZ0J1aWxkZXIocm0uZ2V0RmVhdHVyZU5hbWUoKSk7CisJCXNiLmFwcGVuZCgiOiAiKTsKKwkJc2IuYXBwZW5kKHJtLmdldFN0YXJ0VmFsdWUoKSk7CisJCXNiLmFwcGVuZCgiIHRvICIpOworCQlzYi5hcHBlbmQocm0uZ2V0RW5kVmFsdWUoKSk7CisJCXNiLmFwcGVuZCgiIGJ5ICIpOworCQlzYi5hcHBlbmQocm0uZ2V0SW5jcmVtZW50KCkpOworCQlyZXR1cm4gc2IudG9TdHJpbmcoKTsKKwl9IC8vIGdldFRleHQKKwkKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgdGhlIGxhYmVsIHRleHQgZm9yIHRoZSBhZGFwdGVkIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBTdHJpbmcgZ2V0VGV4dEdlbihPYmplY3Qgb2JqZWN0KSB7CisJCVN0cmluZyBsYWJlbCA9ICgoTG9uZ1JhbmdlTW9kaWZpZXIpb2JqZWN0KS5nZXRGZWF0dXJlTmFtZSgpOworCQlyZXR1cm4gbGFiZWwgPT0gbnVsbCB8fCBsYWJlbC5sZW5ndGgoKSA9PSAwID8KKwkJCWdldFN0cmluZygiX1VJX0xvbmdSYW5nZU1vZGlmaWVyX3R5cGUiKSA6IC8vJE5PTi1OTFMtMSQKKwkJCWdldFN0cmluZygiX1VJX0xvbmdSYW5nZU1vZGlmaWVyX3R5cGUiKSArICIgIiArIGxhYmVsOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKKwl9CisKKwkvKioKKwkgKiBUaGlzIGhhbmRsZXMgbW9kZWwgbm90aWZpY2F0aW9ucyBieSBjYWxsaW5nIHtAbGluayAjdXBkYXRlQ2hpbGRyZW59IHRvIHVwZGF0ZSBhbnkgY2FjaGVkCisJICogY2hpbGRyZW4gYW5kIGJ5IGNyZWF0aW5nIGEgdmlld2VyIG5vdGlmaWNhdGlvbiwgd2hpY2ggaXQgcGFzc2VzIHRvIHtAbGluayAjZmlyZU5vdGlmeUNoYW5nZWR9LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIG5vdGlmeUNoYW5nZWQoTm90aWZpY2F0aW9uIG5vdGlmaWNhdGlvbikgeworCQl1cGRhdGVDaGlsZHJlbihub3RpZmljYXRpb24pOworCisJCXN3aXRjaCAobm90aWZpY2F0aW9uLmdldEZlYXR1cmVJRChMb25nUmFuZ2VNb2RpZmllci5jbGFzcykpIHsKKwkJCWNhc2UgTW9kaWZpZXJQYWNrYWdlLkxPTkdfUkFOR0VfTU9ESUZJRVJfX1NUQVJUX1ZBTFVFOgorCQkJY2FzZSBNb2RpZmllclBhY2thZ2UuTE9OR19SQU5HRV9NT0RJRklFUl9fRU5EX1ZBTFVFOgorCQkJY2FzZSBNb2RpZmllclBhY2thZ2UuTE9OR19SQU5HRV9NT0RJRklFUl9fSU5DUkVNRU5UOgorCQkJY2FzZSBNb2RpZmllclBhY2thZ2UuTE9OR19SQU5HRV9NT0RJRklFUl9fTkVYVF9WQUxVRToKKwkJCWNhc2UgTW9kaWZpZXJQYWNrYWdlLkxPTkdfUkFOR0VfTU9ESUZJRVJfX09SSUdJTkFMX1ZBTFVFOgorCQkJCWZpcmVOb3RpZnlDaGFuZ2VkKG5ldyBWaWV3ZXJOb3RpZmljYXRpb24obm90aWZpY2F0aW9uLCBub3RpZmljYXRpb24uZ2V0Tm90aWZpZXIoKSwgZmFsc2UsIHRydWUpKTsKKwkJCQlyZXR1cm47CisJCX0KKwkJc3VwZXIubm90aWZ5Q2hhbmdlZChub3RpZmljYXRpb24pOworCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmVkaXQuY29tbWFuZC5Db21tYW5kUGFyYW1ldGVyfXMgZGVzY3JpYmluZyB0aGUgY2hpbGRyZW4KKwkgKiB0aGF0IGNhbiBiZSBjcmVhdGVkIHVuZGVyIHRoaXMgb2JqZWN0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIGNvbGxlY3ROZXdDaGlsZERlc2NyaXB0b3JzKENvbGxlY3Rpb248T2JqZWN0PiBuZXdDaGlsZERlc2NyaXB0b3JzLCBPYmplY3Qgb2JqZWN0KSB7CisJCXN1cGVyLmNvbGxlY3ROZXdDaGlsZERlc2NyaXB0b3JzKG5ld0NoaWxkRGVzY3JpcHRvcnMsIG9iamVjdCk7CisJfQorCit9CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL21vZGlmaWVyL3Byb3ZpZGVyL0xvbmdTZXF1ZW5jZU1vZGlmaWVySXRlbVByb3ZpZGVyLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL21vZGlmaWVyL3Byb3ZpZGVyL0xvbmdTZXF1ZW5jZU1vZGlmaWVySXRlbVByb3ZpZGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWZhNDc3NwotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvbW9kaWZpZXIvcHJvdmlkZXIvTG9uZ1NlcXVlbmNlTW9kaWZpZXJJdGVtUHJvdmlkZXIuamF2YQpAQCAtMCwwICsxLDEzOSBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIucHJvdmlkZXI7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LkFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5Db21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklFZGl0aW5nRG9tYWluSXRlbVByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtTGFiZWxQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbVByb3BlcnR5RGVzY3JpcHRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbVByb3BlcnR5U291cmNlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklTdHJ1Y3R1cmVkSXRlbUNvbnRlbnRQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JVHJlZUl0ZW1Db250ZW50UHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSXRlbVByb3BlcnR5RGVzY3JpcHRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5WaWV3ZXJOb3RpZmljYXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLkxvbmdTZXF1ZW5jZU1vZGlmaWVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5Nb2RpZmllclBhY2thZ2U7CisKKy8qKgorICogVGhpcyBpcyB0aGUgaXRlbSBwcm92aWRlciBhZGFwdGVyIGZvciBhIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuTG9uZ1NlcXVlbmNlTW9kaWZpZXJ9IG9iamVjdC4KKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIExvbmdTZXF1ZW5jZU1vZGlmaWVySXRlbVByb3ZpZGVyCisJZXh0ZW5kcyBTZXF1ZW5jZU1vZGlmaWVySXRlbVByb3ZpZGVyCisJaW1wbGVtZW50cworCQlJRWRpdGluZ0RvbWFpbkl0ZW1Qcm92aWRlciwKKwkJSVN0cnVjdHVyZWRJdGVtQ29udGVudFByb3ZpZGVyLAorCQlJVHJlZUl0ZW1Db250ZW50UHJvdmlkZXIsCisJCUlJdGVtTGFiZWxQcm92aWRlciwKKwkJSUl0ZW1Qcm9wZXJ0eVNvdXJjZSB7CisJLyoqCisJICogVGhpcyBjb25zdHJ1Y3RzIGFuIGluc3RhbmNlIGZyb20gYSBmYWN0b3J5IGFuZCBhIG5vdGlmaWVyLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBMb25nU2VxdWVuY2VNb2RpZmllckl0ZW1Qcm92aWRlcihBZGFwdGVyRmFjdG9yeSBhZGFwdGVyRmFjdG9yeSkgeworCQlzdXBlcihhZGFwdGVyRmFjdG9yeSk7CisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIHRoZSBwcm9wZXJ0eSBkZXNjcmlwdG9ycyBmb3IgdGhlIGFkYXB0ZWQgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIExpc3Q8SUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I+IGdldFByb3BlcnR5RGVzY3JpcHRvcnMoT2JqZWN0IG9iamVjdCkgeworCQlpZiAoaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMgPT0gbnVsbCkgeworCQkJc3VwZXIuZ2V0UHJvcGVydHlEZXNjcmlwdG9ycyhvYmplY3QpOworCisJCQlhZGRTZXF1ZW5jZVByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QpOworCQl9CisJCXJldHVybiBpdGVtUHJvcGVydHlEZXNjcmlwdG9yczsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFkZHMgYSBwcm9wZXJ0eSBkZXNjcmlwdG9yIGZvciB0aGUgU2VxdWVuY2UgZmVhdHVyZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBhZGRTZXF1ZW5jZVByb3BlcnR5RGVzY3JpcHRvcihPYmplY3Qgb2JqZWN0KSB7CisJCWl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzLmFkZAorCQkJKGNyZWF0ZUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IKKwkJCQkoKChDb21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5KWFkYXB0ZXJGYWN0b3J5KS5nZXRSb290QWRhcHRlckZhY3RvcnkoKSwKKwkJCQkgZ2V0UmVzb3VyY2VMb2NhdG9yKCksCisJCQkJIGdldFN0cmluZygiX1VJX0xvbmdTZXF1ZW5jZU1vZGlmaWVyX3NlcXVlbmNlX2ZlYXR1cmUiKSwgLy8kTk9OLU5MUy0xJAorCQkJCSBnZXRTdHJpbmcoIl9VSV9Qcm9wZXJ0eURlc2NyaXB0b3JfZGVzY3JpcHRpb24iLCAiX1VJX0xvbmdTZXF1ZW5jZU1vZGlmaWVyX3NlcXVlbmNlX2ZlYXR1cmUiLCAiX1VJX0xvbmdTZXF1ZW5jZU1vZGlmaWVyX3R5cGUiKSwgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkIC8vJE5PTi1OTFMtMyQKKwkJCQkgTW9kaWZpZXJQYWNrYWdlLkxpdGVyYWxzLkxPTkdfU0VRVUVOQ0VfTU9ESUZJRVJfX1NFUVVFTkNFLAorCQkJCSB0cnVlLAorCQkJCSBmYWxzZSwKKwkJCQkgZmFsc2UsCisJCQkJIEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IuR0VORVJJQ19WQUxVRV9JTUFHRSwKKwkJCQkgbnVsbCwKKwkJCQkgbnVsbCkpOworCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyB0aGUgbGFiZWwgdGV4dCBmb3IgdGhlIGFkYXB0ZWQgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIFN0cmluZyBnZXRUZXh0KE9iamVjdCBvYmplY3QpIHsKKwkJU3RyaW5nIGxhYmVsID0gKChMb25nU2VxdWVuY2VNb2RpZmllcilvYmplY3QpLmdldEZlYXR1cmVOYW1lKCk7CisJCXJldHVybiBsYWJlbCA9PSBudWxsIHx8IGxhYmVsLmxlbmd0aCgpID09IDAgPworCQkJZ2V0U3RyaW5nKCJfVUlfTG9uZ1NlcXVlbmNlTW9kaWZpZXJfdHlwZSIpIDogLy8kTk9OLU5MUy0xJAorCQkJZ2V0U3RyaW5nKCJfVUlfTG9uZ1NlcXVlbmNlTW9kaWZpZXJfdHlwZSIpICsgIiAiICsgbGFiZWw7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAorCX0KKworCS8qKgorCSAqIFRoaXMgaGFuZGxlcyBtb2RlbCBub3RpZmljYXRpb25zIGJ5IGNhbGxpbmcge0BsaW5rICN1cGRhdGVDaGlsZHJlbn0gdG8gdXBkYXRlIGFueSBjYWNoZWQKKwkgKiBjaGlsZHJlbiBhbmQgYnkgY3JlYXRpbmcgYSB2aWV3ZXIgbm90aWZpY2F0aW9uLCB3aGljaCBpdCBwYXNzZXMgdG8ge0BsaW5rICNmaXJlTm90aWZ5Q2hhbmdlZH0uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgbm90aWZ5Q2hhbmdlZChOb3RpZmljYXRpb24gbm90aWZpY2F0aW9uKSB7CisJCXVwZGF0ZUNoaWxkcmVuKG5vdGlmaWNhdGlvbik7CisKKwkJc3dpdGNoIChub3RpZmljYXRpb24uZ2V0RmVhdHVyZUlEKExvbmdTZXF1ZW5jZU1vZGlmaWVyLmNsYXNzKSkgeworCQkJY2FzZSBNb2RpZmllclBhY2thZ2UuTE9OR19TRVFVRU5DRV9NT0RJRklFUl9fU0VRVUVOQ0U6CisJCQkJZmlyZU5vdGlmeUNoYW5nZWQobmV3IFZpZXdlck5vdGlmaWNhdGlvbihub3RpZmljYXRpb24sIG5vdGlmaWNhdGlvbi5nZXROb3RpZmllcigpLCBmYWxzZSwgdHJ1ZSkpOworCQkJCXJldHVybjsKKwkJfQorCQlzdXBlci5ub3RpZnlDaGFuZ2VkKG5vdGlmaWNhdGlvbik7CisJfQorCisJLyoqCisJICogVGhpcyBhZGRzIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuZWRpdC5jb21tYW5kLkNvbW1hbmRQYXJhbWV0ZXJ9cyBkZXNjcmliaW5nIHRoZSBjaGlsZHJlbgorCSAqIHRoYXQgY2FuIGJlIGNyZWF0ZWQgdW5kZXIgdGhpcyBvYmplY3QuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgY29sbGVjdE5ld0NoaWxkRGVzY3JpcHRvcnMoQ29sbGVjdGlvbjxPYmplY3Q+IG5ld0NoaWxkRGVzY3JpcHRvcnMsIE9iamVjdCBvYmplY3QpIHsKKwkJc3VwZXIuY29sbGVjdE5ld0NoaWxkRGVzY3JpcHRvcnMobmV3Q2hpbGREZXNjcmlwdG9ycywgb2JqZWN0KTsKKwl9CisKK30KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvbW9kaWZpZXIvcHJvdmlkZXIvTW9kaWZpZXJJdGVtUHJvdmlkZXIuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvbW9kaWZpZXIvcHJvdmlkZXIvTW9kaWZpZXJJdGVtUHJvdmlkZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZjM5NzlhCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9tb2RpZmllci9wcm92aWRlci9Nb2RpZmllckl0ZW1Qcm92aWRlci5qYXZhCkBAIC0wLDAgKzEsMjI5IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5wcm92aWRlcjsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LkFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuUmVzb3VyY2VMb2NhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5VUkk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVTdHJ1Y3R1cmFsRmVhdHVyZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5Db21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklFZGl0aW5nRG9tYWluSXRlbVByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtTGFiZWxQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbVByb3BlcnR5RGVzY3JpcHRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbVByb3BlcnR5U291cmNlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklTdHJ1Y3R1cmVkSXRlbUNvbnRlbnRQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JVHJlZUl0ZW1Db250ZW50UHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSXRlbVByb3BlcnR5RGVzY3JpcHRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5WaWV3ZXJOb3RpZmljYXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5wcm92aWRlci5Db3JlRWRpdFBsdWdpbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwucHJvdmlkZXIuRGVjb3JhdG9ySXRlbVByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5Nb2RpZmllcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuTW9kaWZpZXJQYWNrYWdlOworCisvKioKKyAqIFRoaXMgaXMgdGhlIGl0ZW0gcHJvdmlkZXIgYWRhcHRlciBmb3IgYQorICoge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5Nb2RpZmllcn0gb2JqZWN0LiA8IS0tCisgKiBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiAKKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIE1vZGlmaWVySXRlbVByb3ZpZGVyIGV4dGVuZHMgRGVjb3JhdG9ySXRlbVByb3ZpZGVyIGltcGxlbWVudHMKKwkJSUVkaXRpbmdEb21haW5JdGVtUHJvdmlkZXIsIElTdHJ1Y3R1cmVkSXRlbUNvbnRlbnRQcm92aWRlciwKKwkJSVRyZWVJdGVtQ29udGVudFByb3ZpZGVyLCBJSXRlbUxhYmVsUHJvdmlkZXIsIElJdGVtUHJvcGVydHlTb3VyY2UgeworCS8qKgorCSAqIFRoaXMgY29uc3RydWN0cyBhbiBpbnN0YW5jZSBmcm9tIGEgZmFjdG9yeSBhbmQgYSBub3RpZmllci4gPCEtLQorCSAqIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIE1vZGlmaWVySXRlbVByb3ZpZGVyKEFkYXB0ZXJGYWN0b3J5IGFkYXB0ZXJGYWN0b3J5KSB7CisJCXN1cGVyKGFkYXB0ZXJGYWN0b3J5KTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgdGhlIHByb3BlcnR5IGRlc2NyaXB0b3JzIGZvciB0aGUgYWRhcHRlZCBjbGFzcy4gPCEtLQorCSAqIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIExpc3Q8SUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I+IGdldFByb3BlcnR5RGVzY3JpcHRvcnMoT2JqZWN0IG9iamVjdCkgeworCQlpZiAoaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMgPT0gbnVsbCkgeworCQkJc3VwZXIuZ2V0UHJvcGVydHlEZXNjcmlwdG9ycyhvYmplY3QpOworCisJCQlhZGRUYXJnZXRVUklQcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0KTsKKwkJCWFkZENvbXBsZXRlUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCk7CisJCX0KKwkJcmV0dXJuIGl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzOworCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyBhIHByb3BlcnR5IGRlc2NyaXB0b3IgZm9yIHRoZSBUYXJnZXQgVVJJIGZlYXR1cmUuIDwhLS0KKwkgKiBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogCisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIGFkZFRhcmdldFVSSVByb3BlcnR5RGVzY3JpcHRvcihPYmplY3Qgb2JqZWN0KSB7CisJCWl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzLmFkZAorCQkJKGNyZWF0ZUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IKKwkJCQkoKChDb21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5KWFkYXB0ZXJGYWN0b3J5KS5nZXRSb290QWRhcHRlckZhY3RvcnkoKSwKKwkJCQkgZ2V0UmVzb3VyY2VMb2NhdG9yKCksCisJCQkJIGdldFN0cmluZygiX1VJX01vZGlmaWVyX3RhcmdldFVSSV9mZWF0dXJlIiksIC8vJE5PTi1OTFMtMSQKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfUHJvcGVydHlEZXNjcmlwdG9yX2Rlc2NyaXB0aW9uIiwgIl9VSV9Nb2RpZmllcl90YXJnZXRVUklfZmVhdHVyZSIsICJfVUlfTW9kaWZpZXJfdHlwZSIpLCAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQgLy8kTk9OLU5MUy0zJAorCQkJCSBNb2RpZmllclBhY2thZ2UuTGl0ZXJhbHMuTU9ESUZJRVJfX1RBUkdFVF9VUkksCisJCQkJIGZhbHNlLAorCQkJCSBmYWxzZSwKKwkJCQkgZmFsc2UsCisJCQkJIEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IuR0VORVJJQ19WQUxVRV9JTUFHRSwKKwkJCQkgbnVsbCwKKwkJCQkgbnVsbCkpOworCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyBhIHByb3BlcnR5IGRlc2NyaXB0b3IgZm9yIHRoZSBDb21wbGV0ZSBmZWF0dXJlLiA8IS0tCisJICogYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBhZGRDb21wbGV0ZVByb3BlcnR5RGVzY3JpcHRvcihPYmplY3Qgb2JqZWN0KSB7CisJCWl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzLmFkZAorCQkJKGNyZWF0ZUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IKKwkJCQkoKChDb21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5KWFkYXB0ZXJGYWN0b3J5KS5nZXRSb290QWRhcHRlckZhY3RvcnkoKSwKKwkJCQkgZ2V0UmVzb3VyY2VMb2NhdG9yKCksCisJCQkJIGdldFN0cmluZygiX1VJX01vZGlmaWVyX2NvbXBsZXRlX2ZlYXR1cmUiKSwgLy8kTk9OLU5MUy0xJAorCQkJCSBnZXRTdHJpbmcoIl9VSV9Qcm9wZXJ0eURlc2NyaXB0b3JfZGVzY3JpcHRpb24iLCAiX1VJX01vZGlmaWVyX2NvbXBsZXRlX2ZlYXR1cmUiLCAiX1VJX01vZGlmaWVyX3R5cGUiKSwgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkIC8vJE5PTi1OTFMtMyQKKwkJCQkgTW9kaWZpZXJQYWNrYWdlLkxpdGVyYWxzLk1PRElGSUVSX19DT01QTEVURSwKKwkJCQkgZmFsc2UsCisJCQkJIGZhbHNlLAorCQkJCSBmYWxzZSwKKwkJCQkgSXRlbVByb3BlcnR5RGVzY3JpcHRvci5CT09MRUFOX1ZBTFVFX0lNQUdFLAorCQkJCSBudWxsLAorCQkJCSBudWxsKSk7CisJfQorCisJLyoqCisJICogVGhpcyBzcGVjaWZpZXMgaG93IHRvIGltcGxlbWVudCB7QGxpbmsgI2dldENoaWxkcmVufSBhbmQgaXMgdXNlZCB0byBkZWR1Y2UgYW4gYXBwcm9wcmlhdGUgZmVhdHVyZSBmb3IgYW4KKwkgKiB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmVkaXQuY29tbWFuZC5BZGRDb21tYW5kfSwge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lZGl0LmNvbW1hbmQuUmVtb3ZlQ29tbWFuZH0gb3IKKwkgKiB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmVkaXQuY29tbWFuZC5Nb3ZlQ29tbWFuZH0gaW4ge0BsaW5rICNjcmVhdGVDb21tYW5kfS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIENvbGxlY3Rpb248PyBleHRlbmRzIEVTdHJ1Y3R1cmFsRmVhdHVyZT4gZ2V0Q2hpbGRyZW5GZWF0dXJlcygKKwkJCU9iamVjdCBvYmplY3QpIHsKKwkJaWYgKGNoaWxkcmVuRmVhdHVyZXMgPT0gbnVsbCkgeworCQkJc3VwZXIuZ2V0Q2hpbGRyZW5GZWF0dXJlcyhvYmplY3QpOworCQkJY2hpbGRyZW5GZWF0dXJlcy5hZGQoTW9kaWZpZXJQYWNrYWdlLkxpdGVyYWxzLk1PRElGSUVSX19GRUFUVVJFX01PRElGSUVSUyk7CisJCX0KKwkJcmV0dXJuIGNoaWxkcmVuRmVhdHVyZXM7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCBFU3RydWN0dXJhbEZlYXR1cmUgZ2V0Q2hpbGRGZWF0dXJlKE9iamVjdCBvYmplY3QsIE9iamVjdCBjaGlsZCkgeworCQkvLyBDaGVjayB0aGUgdHlwZSBvZiB0aGUgc3BlY2lmaWVkIGNoaWxkIG9iamVjdCBhbmQgcmV0dXJuIHRoZSBwcm9wZXIgZmVhdHVyZSB0byB1c2UgZm9yCisJCS8vIGFkZGluZyAoc2VlIHtAbGluayBBZGRDb21tYW5kfSkgaXQgYXMgYSBjaGlsZC4KKworCQlyZXR1cm4gc3VwZXIuZ2V0Q2hpbGRGZWF0dXJlKG9iamVjdCwgY2hpbGQpOworCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyBNb2RpZmllci5naWYuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBPYmplY3QgZ2V0SW1hZ2UoT2JqZWN0IG9iamVjdCkgeworCQlyZXR1cm4gb3ZlcmxheUltYWdlKG9iamVjdCwgZ2V0UmVzb3VyY2VMb2NhdG9yKCkuZ2V0SW1hZ2UoImZ1bGwvY3VzdG9tb2JqMTYvTW9kaWZpZXIiKSk7CisJfQorCQorCS8qKgorCSAqIFRoaXMgcmV0dXJucyB0aGUgbGFiZWwgdGV4dCBmb3IgdGhlIGFkYXB0ZWQgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYworCSAqIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkICBOT1QKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgU3RyaW5nIGdldFRleHQoT2JqZWN0IG9iamVjdCkgeworCQlyZXR1cm4gc3VwZXIuZ2V0VGV4dChvYmplY3QpOworCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyB0aGUgbGFiZWwgdGV4dCBmb3IgdGhlIGFkYXB0ZWQgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYworCSAqIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIFN0cmluZyBnZXRUZXh0R2VuKE9iamVjdCBvYmplY3QpIHsKKwkJVVJJIGxhYmVsVmFsdWUgPSAoKE1vZGlmaWVyKW9iamVjdCkuZ2V0VVJJKCk7CisJCVN0cmluZyBsYWJlbCA9IGxhYmVsVmFsdWUgPT0gbnVsbCA/IG51bGwgOiBsYWJlbFZhbHVlLnRvU3RyaW5nKCk7CisJCXJldHVybiBsYWJlbCA9PSBudWxsIHx8IGxhYmVsLmxlbmd0aCgpID09IDAgPworCQkJZ2V0U3RyaW5nKCJfVUlfTW9kaWZpZXJfdHlwZSIpIDogLy8kTk9OLU5MUy0xJAorCQkJZ2V0U3RyaW5nKCJfVUlfTW9kaWZpZXJfdHlwZSIpICsgIiAiICsgbGFiZWw7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAorCX0KKwkKKwkvKioKKwkgKiBUaGlzIGhhbmRsZXMgbW9kZWwgbm90aWZpY2F0aW9ucyBieSBjYWxsaW5nIHtAbGluayAjdXBkYXRlQ2hpbGRyZW59IHRvIHVwZGF0ZSBhbnkgY2FjaGVkCisJICogY2hpbGRyZW4gYW5kIGJ5IGNyZWF0aW5nIGEgdmlld2VyIG5vdGlmaWNhdGlvbiwgd2hpY2ggaXQgcGFzc2VzIHRvIHtAbGluayAjZmlyZU5vdGlmeUNoYW5nZWR9LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0KKwkgKiBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIG5vdGlmeUNoYW5nZWQoTm90aWZpY2F0aW9uIG5vdGlmaWNhdGlvbikgeworCQl1cGRhdGVDaGlsZHJlbihub3RpZmljYXRpb24pOworCisJCXN3aXRjaCAobm90aWZpY2F0aW9uLmdldEZlYXR1cmVJRChNb2RpZmllci5jbGFzcykpIHsKKwkJCWNhc2UgTW9kaWZpZXJQYWNrYWdlLk1PRElGSUVSX19DT01QTEVURToKKwkJCQlmaXJlTm90aWZ5Q2hhbmdlZChuZXcgVmlld2VyTm90aWZpY2F0aW9uKG5vdGlmaWNhdGlvbiwgbm90aWZpY2F0aW9uLmdldE5vdGlmaWVyKCksIGZhbHNlLCB0cnVlKSk7CisJCQkJcmV0dXJuOworCQkJY2FzZSBNb2RpZmllclBhY2thZ2UuTU9ESUZJRVJfX0ZFQVRVUkVfTU9ESUZJRVJTOgorCQkJCWZpcmVOb3RpZnlDaGFuZ2VkKG5ldyBWaWV3ZXJOb3RpZmljYXRpb24obm90aWZpY2F0aW9uLCBub3RpZmljYXRpb24uZ2V0Tm90aWZpZXIoKSwgdHJ1ZSwgZmFsc2UpKTsKKwkJCQlyZXR1cm47CisJCX0KKwkJc3VwZXIubm90aWZ5Q2hhbmdlZChub3RpZmljYXRpb24pOworCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmVkaXQuY29tbWFuZC5Db21tYW5kUGFyYW1ldGVyfXMKKwkgKiBkZXNjcmliaW5nIHRoZSBjaGlsZHJlbiB0aGF0IGNhbiBiZSBjcmVhdGVkIHVuZGVyIHRoaXMgb2JqZWN0LiA8IS0tCisJICogYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgdm9pZCBjb2xsZWN0TmV3Q2hpbGREZXNjcmlwdG9ycygKKwkJCUNvbGxlY3Rpb248T2JqZWN0PiBuZXdDaGlsZERlc2NyaXB0b3JzLCBPYmplY3Qgb2JqZWN0KSB7CisJCXN1cGVyLmNvbGxlY3ROZXdDaGlsZERlc2NyaXB0b3JzKG5ld0NoaWxkRGVzY3JpcHRvcnMsIG9iamVjdCk7CisJfQorCisJLyoqCisJICogUmV0dXJuIHRoZSByZXNvdXJjZSBsb2NhdG9yIGZvciB0aGlzIGl0ZW0gcHJvdmlkZXIncyByZXNvdXJjZXMuIDwhLS0KKwkgKiBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogCisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBSZXNvdXJjZUxvY2F0b3IgZ2V0UmVzb3VyY2VMb2NhdG9yKCkgeworCQlyZXR1cm4gQ29yZUVkaXRQbHVnaW4uSU5TVEFOQ0U7CisJfQorCit9CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL21vZGlmaWVyL3Byb3ZpZGVyL01vZGlmaWVySXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvbW9kaWZpZXIvcHJvdmlkZXIvTW9kaWZpZXJJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg0YTg1ZWEKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL21vZGlmaWVyL3Byb3ZpZGVyL01vZGlmaWVySXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkuamF2YQpAQCAtMCwwICsxLDY2MyBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIucHJvdmlkZXI7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LkFkYXB0ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkNoYW5nZU5vdGlmaWVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkNvbXBvc2VhYmxlQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuQ29tcG9zZWRBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JQ2hhbmdlTm90aWZpZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSURpc3Bvc2FibGU7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUVkaXRpbmdEb21haW5JdGVtUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1MYWJlbFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtUHJvcGVydHlTb3VyY2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSU5vdGlmeUNoYW5nZWRMaXN0ZW5lcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JU3RydWN0dXJlZEl0ZW1Db250ZW50UHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVRyZWVJdGVtQ29udGVudFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci51dGlsLk1vZGlmaWVyQWRhcHRlckZhY3Rvcnk7CisKKy8qKgorICogVGhpcyBpcyB0aGUgZmFjdG9yeSB0aGF0IGlzIHVzZWQgdG8gcHJvdmlkZSB0aGUgaW50ZXJmYWNlcyBuZWVkZWQgdG8gc3VwcG9ydCBWaWV3ZXJzLgorICogVGhlIGFkYXB0ZXJzIGdlbmVyYXRlZCBieSB0aGlzIGZhY3RvcnkgY29udmVydCBFTUYgYWRhcHRlciBub3RpZmljYXRpb25zIGludG8gY2FsbHMgdG8ge0BsaW5rICNmaXJlTm90aWZ5Q2hhbmdlZCBmaXJlTm90aWZ5Q2hhbmdlZH0uCisgKiBUaGUgYWRhcHRlcnMgYWxzbyBzdXBwb3J0IEVjbGlwc2UgcHJvcGVydHkgc2hlZXRzLgorICogTm90ZSB0aGF0IG1vc3Qgb2YgdGhlIGFkYXB0ZXJzIGFyZSBzaGFyZWQgYW1vbmcgbXVsdGlwbGUgaW5zdGFuY2VzLgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQGdlbmVyYXRlZAorICovCitAU3VwcHJlc3NXYXJuaW5ncygiYWxsIikKK3B1YmxpYyBjbGFzcyBNb2RpZmllckl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5IGV4dGVuZHMgTW9kaWZpZXJBZGFwdGVyRmFjdG9yeSBpbXBsZW1lbnRzIENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnksIElDaGFuZ2VOb3RpZmllciwgSURpc3Bvc2FibGUgeworCS8qKgorCSAqIFRoaXMga2VlcHMgdHJhY2sgb2YgdGhlIHJvb3QgYWRhcHRlciBmYWN0b3J5IHRoYXQgZGVsZWdhdGVzIHRvIHRoaXMgYWRhcHRlciBmYWN0b3J5LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBDb21wb3NlZEFkYXB0ZXJGYWN0b3J5IHBhcmVudEFkYXB0ZXJGYWN0b3J5OworCisJLyoqCisJICogVGhpcyBpcyB1c2VkIHRvIGltcGxlbWVudCB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUNoYW5nZU5vdGlmaWVyfS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgSUNoYW5nZU5vdGlmaWVyIGNoYW5nZU5vdGlmaWVyID0gbmV3IENoYW5nZU5vdGlmaWVyKCk7CisKKwkvKioKKwkgKiBUaGlzIGtlZXBzIHRyYWNrIG9mIGFsbCB0aGUgc3VwcG9ydGVkIHR5cGVzIGNoZWNrZWQgYnkge0BsaW5rICNpc0ZhY3RvcnlGb3JUeXBlIGlzRmFjdG9yeUZvclR5cGV9LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBDb2xsZWN0aW9uPE9iamVjdD4gc3VwcG9ydGVkVHlwZXMgPSBuZXcgQXJyYXlMaXN0PE9iamVjdD4oKTsKKworCS8qKgorCSAqIFRoaXMgY29uc3RydWN0cyBhbiBpbnN0YW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgTW9kaWZpZXJJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSgpIHsKKwkJc3VwcG9ydGVkVHlwZXMuYWRkKElFZGl0aW5nRG9tYWluSXRlbVByb3ZpZGVyLmNsYXNzKTsKKwkJc3VwcG9ydGVkVHlwZXMuYWRkKElTdHJ1Y3R1cmVkSXRlbUNvbnRlbnRQcm92aWRlci5jbGFzcyk7CisJCXN1cHBvcnRlZFR5cGVzLmFkZChJVHJlZUl0ZW1Db250ZW50UHJvdmlkZXIuY2xhc3MpOworCQlzdXBwb3J0ZWRUeXBlcy5hZGQoSUl0ZW1MYWJlbFByb3ZpZGVyLmNsYXNzKTsKKwkJc3VwcG9ydGVkVHlwZXMuYWRkKElJdGVtUHJvcGVydHlTb3VyY2UuY2xhc3MpOworCX0KKworCS8qKgorCSAqIFRoaXMga2VlcHMgdHJhY2sgb2YgdGhlIG9uZSBhZGFwdGVyIHVzZWQgZm9yIGFsbCB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLkRvdWJsZU5PUE1vZGlmaWVyfSBpbnN0YW5jZXMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIERvdWJsZU5PUE1vZGlmaWVySXRlbVByb3ZpZGVyIGRvdWJsZU5PUE1vZGlmaWVySXRlbVByb3ZpZGVyOworCisJLyoqCisJICogVGhpcyBjcmVhdGVzIGFuIGFkYXB0ZXIgZm9yIGEge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5Eb3VibGVOT1BNb2RpZmllcn0uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlRG91YmxlTk9QTW9kaWZpZXJBZGFwdGVyKCkgeworCQlpZiAoZG91YmxlTk9QTW9kaWZpZXJJdGVtUHJvdmlkZXIgPT0gbnVsbCkgeworCQkJZG91YmxlTk9QTW9kaWZpZXJJdGVtUHJvdmlkZXIgPSBuZXcgRG91YmxlTk9QTW9kaWZpZXJJdGVtUHJvdmlkZXIodGhpcyk7CisJCX0KKworCQlyZXR1cm4gZG91YmxlTk9QTW9kaWZpZXJJdGVtUHJvdmlkZXI7CisJfQorCisJLyoqCisJICogVGhpcyBrZWVwcyB0cmFjayBvZiB0aGUgb25lIGFkYXB0ZXIgdXNlZCBmb3IgYWxsIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuRG91YmxlUmFuZ2VNb2RpZmllcn0gaW5zdGFuY2VzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBEb3VibGVSYW5nZU1vZGlmaWVySXRlbVByb3ZpZGVyIGRvdWJsZVJhbmdlTW9kaWZpZXJJdGVtUHJvdmlkZXI7CisKKwkvKioKKwkgKiBUaGlzIGNyZWF0ZXMgYW4gYWRhcHRlciBmb3IgYSB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLkRvdWJsZVJhbmdlTW9kaWZpZXJ9LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZURvdWJsZVJhbmdlTW9kaWZpZXJBZGFwdGVyKCkgeworCQlpZiAoZG91YmxlUmFuZ2VNb2RpZmllckl0ZW1Qcm92aWRlciA9PSBudWxsKSB7CisJCQlkb3VibGVSYW5nZU1vZGlmaWVySXRlbVByb3ZpZGVyID0gbmV3IERvdWJsZVJhbmdlTW9kaWZpZXJJdGVtUHJvdmlkZXIodGhpcyk7CisJCX0KKworCQlyZXR1cm4gZG91YmxlUmFuZ2VNb2RpZmllckl0ZW1Qcm92aWRlcjsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGtlZXBzIHRyYWNrIG9mIHRoZSBvbmUgYWRhcHRlciB1c2VkIGZvciBhbGwge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5Eb3VibGVTZXF1ZW5jZU1vZGlmaWVyfSBpbnN0YW5jZXMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIERvdWJsZVNlcXVlbmNlTW9kaWZpZXJJdGVtUHJvdmlkZXIgZG91YmxlU2VxdWVuY2VNb2RpZmllckl0ZW1Qcm92aWRlcjsKKworCS8qKgorCSAqIFRoaXMgY3JlYXRlcyBhbiBhZGFwdGVyIGZvciBhIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuRG91YmxlU2VxdWVuY2VNb2RpZmllcn0uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlRG91YmxlU2VxdWVuY2VNb2RpZmllckFkYXB0ZXIoKSB7CisJCWlmIChkb3VibGVTZXF1ZW5jZU1vZGlmaWVySXRlbVByb3ZpZGVyID09IG51bGwpIHsKKwkJCWRvdWJsZVNlcXVlbmNlTW9kaWZpZXJJdGVtUHJvdmlkZXIgPSBuZXcgRG91YmxlU2VxdWVuY2VNb2RpZmllckl0ZW1Qcm92aWRlcih0aGlzKTsKKwkJfQorCisJCXJldHVybiBkb3VibGVTZXF1ZW5jZU1vZGlmaWVySXRlbVByb3ZpZGVyOworCX0KKworCS8qKgorCSAqIFRoaXMga2VlcHMgdHJhY2sgb2YgdGhlIG9uZSBhZGFwdGVyIHVzZWQgZm9yIGFsbCB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLkludGVnZXJOT1BNb2RpZmllcn0gaW5zdGFuY2VzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBJbnRlZ2VyTk9QTW9kaWZpZXJJdGVtUHJvdmlkZXIgaW50ZWdlck5PUE1vZGlmaWVySXRlbVByb3ZpZGVyOworCisJLyoqCisJICogVGhpcyBjcmVhdGVzIGFuIGFkYXB0ZXIgZm9yIGEge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5JbnRlZ2VyTk9QTW9kaWZpZXJ9LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZUludGVnZXJOT1BNb2RpZmllckFkYXB0ZXIoKSB7CisJCWlmIChpbnRlZ2VyTk9QTW9kaWZpZXJJdGVtUHJvdmlkZXIgPT0gbnVsbCkgeworCQkJaW50ZWdlck5PUE1vZGlmaWVySXRlbVByb3ZpZGVyID0gbmV3IEludGVnZXJOT1BNb2RpZmllckl0ZW1Qcm92aWRlcih0aGlzKTsKKwkJfQorCisJCXJldHVybiBpbnRlZ2VyTk9QTW9kaWZpZXJJdGVtUHJvdmlkZXI7CisJfQorCisJLyoqCisJICogVGhpcyBrZWVwcyB0cmFjayBvZiB0aGUgb25lIGFkYXB0ZXIgdXNlZCBmb3IgYWxsIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuSW50ZWdlclJhbmdlTW9kaWZpZXJ9IGluc3RhbmNlcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgSW50ZWdlclJhbmdlTW9kaWZpZXJJdGVtUHJvdmlkZXIgaW50ZWdlclJhbmdlTW9kaWZpZXJJdGVtUHJvdmlkZXI7CisKKwkvKioKKwkgKiBUaGlzIGNyZWF0ZXMgYW4gYWRhcHRlciBmb3IgYSB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLkludGVnZXJSYW5nZU1vZGlmaWVyfS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVJbnRlZ2VyUmFuZ2VNb2RpZmllckFkYXB0ZXIoKSB7CisJCWlmIChpbnRlZ2VyUmFuZ2VNb2RpZmllckl0ZW1Qcm92aWRlciA9PSBudWxsKSB7CisJCQlpbnRlZ2VyUmFuZ2VNb2RpZmllckl0ZW1Qcm92aWRlciA9IG5ldyBJbnRlZ2VyUmFuZ2VNb2RpZmllckl0ZW1Qcm92aWRlcih0aGlzKTsKKwkJfQorCisJCXJldHVybiBpbnRlZ2VyUmFuZ2VNb2RpZmllckl0ZW1Qcm92aWRlcjsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGtlZXBzIHRyYWNrIG9mIHRoZSBvbmUgYWRhcHRlciB1c2VkIGZvciBhbGwge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5JbnRlZ2VyU2VxdWVuY2VNb2RpZmllcn0gaW5zdGFuY2VzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBJbnRlZ2VyU2VxdWVuY2VNb2RpZmllckl0ZW1Qcm92aWRlciBpbnRlZ2VyU2VxdWVuY2VNb2RpZmllckl0ZW1Qcm92aWRlcjsKKworCS8qKgorCSAqIFRoaXMgY3JlYXRlcyBhbiBhZGFwdGVyIGZvciBhIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuSW50ZWdlclNlcXVlbmNlTW9kaWZpZXJ9LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZUludGVnZXJTZXF1ZW5jZU1vZGlmaWVyQWRhcHRlcigpIHsKKwkJaWYgKGludGVnZXJTZXF1ZW5jZU1vZGlmaWVySXRlbVByb3ZpZGVyID09IG51bGwpIHsKKwkJCWludGVnZXJTZXF1ZW5jZU1vZGlmaWVySXRlbVByb3ZpZGVyID0gbmV3IEludGVnZXJTZXF1ZW5jZU1vZGlmaWVySXRlbVByb3ZpZGVyKHRoaXMpOworCQl9CisKKwkJcmV0dXJuIGludGVnZXJTZXF1ZW5jZU1vZGlmaWVySXRlbVByb3ZpZGVyOworCX0KKworCS8qKgorCSAqIFRoaXMga2VlcHMgdHJhY2sgb2YgdGhlIG9uZSBhZGFwdGVyIHVzZWQgZm9yIGFsbCB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLkxvbmdOT1BNb2RpZmllcn0gaW5zdGFuY2VzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBMb25nTk9QTW9kaWZpZXJJdGVtUHJvdmlkZXIgbG9uZ05PUE1vZGlmaWVySXRlbVByb3ZpZGVyOworCisJLyoqCisJICogVGhpcyBjcmVhdGVzIGFuIGFkYXB0ZXIgZm9yIGEge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5Mb25nTk9QTW9kaWZpZXJ9LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZUxvbmdOT1BNb2RpZmllckFkYXB0ZXIoKSB7CisJCWlmIChsb25nTk9QTW9kaWZpZXJJdGVtUHJvdmlkZXIgPT0gbnVsbCkgeworCQkJbG9uZ05PUE1vZGlmaWVySXRlbVByb3ZpZGVyID0gbmV3IExvbmdOT1BNb2RpZmllckl0ZW1Qcm92aWRlcih0aGlzKTsKKwkJfQorCisJCXJldHVybiBsb25nTk9QTW9kaWZpZXJJdGVtUHJvdmlkZXI7CisJfQorCisJLyoqCisJICogVGhpcyBrZWVwcyB0cmFjayBvZiB0aGUgb25lIGFkYXB0ZXIgdXNlZCBmb3IgYWxsIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuTG9uZ1JhbmdlTW9kaWZpZXJ9IGluc3RhbmNlcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgTG9uZ1JhbmdlTW9kaWZpZXJJdGVtUHJvdmlkZXIgbG9uZ1JhbmdlTW9kaWZpZXJJdGVtUHJvdmlkZXI7CisKKwkvKioKKwkgKiBUaGlzIGNyZWF0ZXMgYW4gYWRhcHRlciBmb3IgYSB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLkxvbmdSYW5nZU1vZGlmaWVyfS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVMb25nUmFuZ2VNb2RpZmllckFkYXB0ZXIoKSB7CisJCWlmIChsb25nUmFuZ2VNb2RpZmllckl0ZW1Qcm92aWRlciA9PSBudWxsKSB7CisJCQlsb25nUmFuZ2VNb2RpZmllckl0ZW1Qcm92aWRlciA9IG5ldyBMb25nUmFuZ2VNb2RpZmllckl0ZW1Qcm92aWRlcih0aGlzKTsKKwkJfQorCisJCXJldHVybiBsb25nUmFuZ2VNb2RpZmllckl0ZW1Qcm92aWRlcjsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGtlZXBzIHRyYWNrIG9mIHRoZSBvbmUgYWRhcHRlciB1c2VkIGZvciBhbGwge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5Mb25nU2VxdWVuY2VNb2RpZmllcn0gaW5zdGFuY2VzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBMb25nU2VxdWVuY2VNb2RpZmllckl0ZW1Qcm92aWRlciBsb25nU2VxdWVuY2VNb2RpZmllckl0ZW1Qcm92aWRlcjsKKworCS8qKgorCSAqIFRoaXMgY3JlYXRlcyBhbiBhZGFwdGVyIGZvciBhIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuTG9uZ1NlcXVlbmNlTW9kaWZpZXJ9LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZUxvbmdTZXF1ZW5jZU1vZGlmaWVyQWRhcHRlcigpIHsKKwkJaWYgKGxvbmdTZXF1ZW5jZU1vZGlmaWVySXRlbVByb3ZpZGVyID09IG51bGwpIHsKKwkJCWxvbmdTZXF1ZW5jZU1vZGlmaWVySXRlbVByb3ZpZGVyID0gbmV3IExvbmdTZXF1ZW5jZU1vZGlmaWVySXRlbVByb3ZpZGVyKHRoaXMpOworCQl9CisKKwkJcmV0dXJuIGxvbmdTZXF1ZW5jZU1vZGlmaWVySXRlbVByb3ZpZGVyOworCX0KKworCS8qKgorCSAqIFRoaXMga2VlcHMgdHJhY2sgb2YgdGhlIG9uZSBhZGFwdGVyIHVzZWQgZm9yIGFsbCB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLk1vZGlmaWVyfSBpbnN0YW5jZXMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIE1vZGlmaWVySXRlbVByb3ZpZGVyIG1vZGlmaWVySXRlbVByb3ZpZGVyOworCisJLyoqCisJICogVGhpcyBjcmVhdGVzIGFuIGFkYXB0ZXIgZm9yIGEge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5Nb2RpZmllcn0uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlTW9kaWZpZXJBZGFwdGVyKCkgeworCQlpZiAobW9kaWZpZXJJdGVtUHJvdmlkZXIgPT0gbnVsbCkgeworCQkJbW9kaWZpZXJJdGVtUHJvdmlkZXIgPSBuZXcgTW9kaWZpZXJJdGVtUHJvdmlkZXIodGhpcyk7CisJCX0KKworCQlyZXR1cm4gbW9kaWZpZXJJdGVtUHJvdmlkZXI7CisJfQorCisJLyoqCisJICogVGhpcyBrZWVwcyB0cmFjayBvZiB0aGUgb25lIGFkYXB0ZXIgdXNlZCBmb3IgYWxsIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuTk9QTW9kaWZpZXJ9IGluc3RhbmNlcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgTk9QTW9kaWZpZXJJdGVtUHJvdmlkZXIgbm9wTW9kaWZpZXJJdGVtUHJvdmlkZXI7CisKKwkvKioKKwkgKiBUaGlzIGNyZWF0ZXMgYW4gYWRhcHRlciBmb3IgYSB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLk5PUE1vZGlmaWVyfS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVOT1BNb2RpZmllckFkYXB0ZXIoKSB7CisJCWlmIChub3BNb2RpZmllckl0ZW1Qcm92aWRlciA9PSBudWxsKSB7CisJCQlub3BNb2RpZmllckl0ZW1Qcm92aWRlciA9IG5ldyBOT1BNb2RpZmllckl0ZW1Qcm92aWRlcih0aGlzKTsKKwkJfQorCisJCXJldHVybiBub3BNb2RpZmllckl0ZW1Qcm92aWRlcjsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGtlZXBzIHRyYWNrIG9mIHRoZSBvbmUgYWRhcHRlciB1c2VkIGZvciBhbGwge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5TVEVNVGltZU5PUE1vZGlmaWVyfSBpbnN0YW5jZXMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIFNURU1UaW1lTk9QTW9kaWZpZXJJdGVtUHJvdmlkZXIgc3RlbVRpbWVOT1BNb2RpZmllckl0ZW1Qcm92aWRlcjsKKworCS8qKgorCSAqIFRoaXMgY3JlYXRlcyBhbiBhZGFwdGVyIGZvciBhIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuU1RFTVRpbWVOT1BNb2RpZmllcn0uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlU1RFTVRpbWVOT1BNb2RpZmllckFkYXB0ZXIoKSB7CisJCWlmIChzdGVtVGltZU5PUE1vZGlmaWVySXRlbVByb3ZpZGVyID09IG51bGwpIHsKKwkJCXN0ZW1UaW1lTk9QTW9kaWZpZXJJdGVtUHJvdmlkZXIgPSBuZXcgU1RFTVRpbWVOT1BNb2RpZmllckl0ZW1Qcm92aWRlcih0aGlzKTsKKwkJfQorCisJCXJldHVybiBzdGVtVGltZU5PUE1vZGlmaWVySXRlbVByb3ZpZGVyOworCX0KKworCS8qKgorCSAqIFRoaXMga2VlcHMgdHJhY2sgb2YgdGhlIG9uZSBhZGFwdGVyIHVzZWQgZm9yIGFsbCB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLlNURU1UaW1lUmFuZ2VNb2RpZmllcn0gaW5zdGFuY2VzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBTVEVNVGltZVJhbmdlTW9kaWZpZXJJdGVtUHJvdmlkZXIgc3RlbVRpbWVSYW5nZU1vZGlmaWVySXRlbVByb3ZpZGVyOworCisJLyoqCisJICogVGhpcyBjcmVhdGVzIGFuIGFkYXB0ZXIgZm9yIGEge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5TVEVNVGltZVJhbmdlTW9kaWZpZXJ9LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZVNURU1UaW1lUmFuZ2VNb2RpZmllckFkYXB0ZXIoKSB7CisJCWlmIChzdGVtVGltZVJhbmdlTW9kaWZpZXJJdGVtUHJvdmlkZXIgPT0gbnVsbCkgeworCQkJc3RlbVRpbWVSYW5nZU1vZGlmaWVySXRlbVByb3ZpZGVyID0gbmV3IFNURU1UaW1lUmFuZ2VNb2RpZmllckl0ZW1Qcm92aWRlcih0aGlzKTsKKwkJfQorCisJCXJldHVybiBzdGVtVGltZVJhbmdlTW9kaWZpZXJJdGVtUHJvdmlkZXI7CisJfQorCisJLyoqCisJICogVGhpcyBrZWVwcyB0cmFjayBvZiB0aGUgb25lIGFkYXB0ZXIgdXNlZCBmb3IgYWxsIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuU1RFTVRpbWVTZXF1ZW5jZU1vZGlmaWVyfSBpbnN0YW5jZXMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIFNURU1UaW1lU2VxdWVuY2VNb2RpZmllckl0ZW1Qcm92aWRlciBzdGVtVGltZVNlcXVlbmNlTW9kaWZpZXJJdGVtUHJvdmlkZXI7CisKKwkvKioKKwkgKiBUaGlzIGNyZWF0ZXMgYW4gYWRhcHRlciBmb3IgYSB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLlNURU1UaW1lU2VxdWVuY2VNb2RpZmllcn0uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlU1RFTVRpbWVTZXF1ZW5jZU1vZGlmaWVyQWRhcHRlcigpIHsKKwkJaWYgKHN0ZW1UaW1lU2VxdWVuY2VNb2RpZmllckl0ZW1Qcm92aWRlciA9PSBudWxsKSB7CisJCQlzdGVtVGltZVNlcXVlbmNlTW9kaWZpZXJJdGVtUHJvdmlkZXIgPSBuZXcgU1RFTVRpbWVTZXF1ZW5jZU1vZGlmaWVySXRlbVByb3ZpZGVyKHRoaXMpOworCQl9CisKKwkJcmV0dXJuIHN0ZW1UaW1lU2VxdWVuY2VNb2RpZmllckl0ZW1Qcm92aWRlcjsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGtlZXBzIHRyYWNrIG9mIHRoZSBvbmUgYWRhcHRlciB1c2VkIGZvciBhbGwge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5TdHJpbmdOT1BNb2RpZmllcn0gaW5zdGFuY2VzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBTdHJpbmdOT1BNb2RpZmllckl0ZW1Qcm92aWRlciBzdHJpbmdOT1BNb2RpZmllckl0ZW1Qcm92aWRlcjsKKworCS8qKgorCSAqIFRoaXMgY3JlYXRlcyBhbiBhZGFwdGVyIGZvciBhIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuU3RyaW5nTk9QTW9kaWZpZXJ9LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZVN0cmluZ05PUE1vZGlmaWVyQWRhcHRlcigpIHsKKwkJaWYgKHN0cmluZ05PUE1vZGlmaWVySXRlbVByb3ZpZGVyID09IG51bGwpIHsKKwkJCXN0cmluZ05PUE1vZGlmaWVySXRlbVByb3ZpZGVyID0gbmV3IFN0cmluZ05PUE1vZGlmaWVySXRlbVByb3ZpZGVyKHRoaXMpOworCQl9CisKKwkJcmV0dXJuIHN0cmluZ05PUE1vZGlmaWVySXRlbVByb3ZpZGVyOworCX0KKworCS8qKgorCSAqIFRoaXMga2VlcHMgdHJhY2sgb2YgdGhlIG9uZSBhZGFwdGVyIHVzZWQgZm9yIGFsbCB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLlN0cmluZ1NlcXVlbmNlTW9kaWZpZXJ9IGluc3RhbmNlcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgU3RyaW5nU2VxdWVuY2VNb2RpZmllckl0ZW1Qcm92aWRlciBzdHJpbmdTZXF1ZW5jZU1vZGlmaWVySXRlbVByb3ZpZGVyOworCisJLyoqCisJICogVGhpcyBjcmVhdGVzIGFuIGFkYXB0ZXIgZm9yIGEge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5TdHJpbmdTZXF1ZW5jZU1vZGlmaWVyfS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVTdHJpbmdTZXF1ZW5jZU1vZGlmaWVyQWRhcHRlcigpIHsKKwkJaWYgKHN0cmluZ1NlcXVlbmNlTW9kaWZpZXJJdGVtUHJvdmlkZXIgPT0gbnVsbCkgeworCQkJc3RyaW5nU2VxdWVuY2VNb2RpZmllckl0ZW1Qcm92aWRlciA9IG5ldyBTdHJpbmdTZXF1ZW5jZU1vZGlmaWVySXRlbVByb3ZpZGVyKHRoaXMpOworCQl9CisKKwkJcmV0dXJuIHN0cmluZ1NlcXVlbmNlTW9kaWZpZXJJdGVtUHJvdmlkZXI7CisJfQorCisJLyoqCisJICogVGhpcyBrZWVwcyB0cmFjayBvZiB0aGUgb25lIGFkYXB0ZXIgdXNlZCBmb3IgYWxsIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuRG91YmxlTW9kaWZpZXJ9IGluc3RhbmNlcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgRG91YmxlTW9kaWZpZXJJdGVtUHJvdmlkZXIgZG91YmxlTW9kaWZpZXJJdGVtUHJvdmlkZXI7CisKKwkvKioKKwkgKiBUaGlzIGNyZWF0ZXMgYW4gYWRhcHRlciBmb3IgYSB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLkRvdWJsZU1vZGlmaWVyfS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVEb3VibGVNb2RpZmllckFkYXB0ZXIoKSB7CisJCWlmIChkb3VibGVNb2RpZmllckl0ZW1Qcm92aWRlciA9PSBudWxsKSB7CisJCQlkb3VibGVNb2RpZmllckl0ZW1Qcm92aWRlciA9IG5ldyBEb3VibGVNb2RpZmllckl0ZW1Qcm92aWRlcih0aGlzKTsKKwkJfQorCisJCXJldHVybiBkb3VibGVNb2RpZmllckl0ZW1Qcm92aWRlcjsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGtlZXBzIHRyYWNrIG9mIHRoZSBvbmUgYWRhcHRlciB1c2VkIGZvciBhbGwge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5JbnRlZ2VyTW9kaWZpZXJ9IGluc3RhbmNlcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgSW50ZWdlck1vZGlmaWVySXRlbVByb3ZpZGVyIGludGVnZXJNb2RpZmllckl0ZW1Qcm92aWRlcjsKKworCS8qKgorCSAqIFRoaXMgY3JlYXRlcyBhbiBhZGFwdGVyIGZvciBhIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuSW50ZWdlck1vZGlmaWVyfS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVJbnRlZ2VyTW9kaWZpZXJBZGFwdGVyKCkgeworCQlpZiAoaW50ZWdlck1vZGlmaWVySXRlbVByb3ZpZGVyID09IG51bGwpIHsKKwkJCWludGVnZXJNb2RpZmllckl0ZW1Qcm92aWRlciA9IG5ldyBJbnRlZ2VyTW9kaWZpZXJJdGVtUHJvdmlkZXIodGhpcyk7CisJCX0KKworCQlyZXR1cm4gaW50ZWdlck1vZGlmaWVySXRlbVByb3ZpZGVyOworCX0KKworCS8qKgorCSAqIFRoaXMga2VlcHMgdHJhY2sgb2YgdGhlIG9uZSBhZGFwdGVyIHVzZWQgZm9yIGFsbCB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLkxvbmdNb2RpZmllcn0gaW5zdGFuY2VzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBMb25nTW9kaWZpZXJJdGVtUHJvdmlkZXIgbG9uZ01vZGlmaWVySXRlbVByb3ZpZGVyOworCisJLyoqCisJICogVGhpcyBjcmVhdGVzIGFuIGFkYXB0ZXIgZm9yIGEge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5Mb25nTW9kaWZpZXJ9LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZUxvbmdNb2RpZmllckFkYXB0ZXIoKSB7CisJCWlmIChsb25nTW9kaWZpZXJJdGVtUHJvdmlkZXIgPT0gbnVsbCkgeworCQkJbG9uZ01vZGlmaWVySXRlbVByb3ZpZGVyID0gbmV3IExvbmdNb2RpZmllckl0ZW1Qcm92aWRlcih0aGlzKTsKKwkJfQorCisJCXJldHVybiBsb25nTW9kaWZpZXJJdGVtUHJvdmlkZXI7CisJfQorCisJLyoqCisJICogVGhpcyBrZWVwcyB0cmFjayBvZiB0aGUgb25lIGFkYXB0ZXIgdXNlZCBmb3IgYWxsIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuU1RFTVRpbWVNb2RpZmllcn0gaW5zdGFuY2VzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBTVEVNVGltZU1vZGlmaWVySXRlbVByb3ZpZGVyIHN0ZW1UaW1lTW9kaWZpZXJJdGVtUHJvdmlkZXI7CisKKwkvKioKKwkgKiBUaGlzIGNyZWF0ZXMgYW4gYWRhcHRlciBmb3IgYSB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLlNURU1UaW1lTW9kaWZpZXJ9LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZVNURU1UaW1lTW9kaWZpZXJBZGFwdGVyKCkgeworCQlpZiAoc3RlbVRpbWVNb2RpZmllckl0ZW1Qcm92aWRlciA9PSBudWxsKSB7CisJCQlzdGVtVGltZU1vZGlmaWVySXRlbVByb3ZpZGVyID0gbmV3IFNURU1UaW1lTW9kaWZpZXJJdGVtUHJvdmlkZXIodGhpcyk7CisJCX0KKworCQlyZXR1cm4gc3RlbVRpbWVNb2RpZmllckl0ZW1Qcm92aWRlcjsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgdGhlIHJvb3QgYWRhcHRlciBmYWN0b3J5IHRoYXQgY29udGFpbnMgdGhpcyBmYWN0b3J5LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBDb21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5IGdldFJvb3RBZGFwdGVyRmFjdG9yeSgpIHsKKwkJcmV0dXJuIHBhcmVudEFkYXB0ZXJGYWN0b3J5ID09IG51bGwgPyB0aGlzIDogcGFyZW50QWRhcHRlckZhY3RvcnkuZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCk7CisJfQorCisJLyoqCisJICogVGhpcyBzZXRzIHRoZSBjb21wb3NlZCBhZGFwdGVyIGZhY3RvcnkgdGhhdCBjb250YWlucyB0aGlzIGZhY3RvcnkuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgc2V0UGFyZW50QWRhcHRlckZhY3RvcnkoQ29tcG9zZWRBZGFwdGVyRmFjdG9yeSBwYXJlbnRBZGFwdGVyRmFjdG9yeSkgeworCQl0aGlzLnBhcmVudEFkYXB0ZXJGYWN0b3J5ID0gcGFyZW50QWRhcHRlckZhY3Rvcnk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIGJvb2xlYW4gaXNGYWN0b3J5Rm9yVHlwZShPYmplY3QgdHlwZSkgeworCQlyZXR1cm4gc3VwcG9ydGVkVHlwZXMuY29udGFpbnModHlwZSkgfHwgc3VwZXIuaXNGYWN0b3J5Rm9yVHlwZSh0eXBlKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGltcGxlbWVudGF0aW9uIHN1YnN0aXR1dGVzIHRoZSBmYWN0b3J5IGl0c2VsZiBhcyB0aGUga2V5IGZvciB0aGUgYWRhcHRlci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgQWRhcHRlciBhZGFwdChOb3RpZmllciBub3RpZmllciwgT2JqZWN0IHR5cGUpIHsKKwkJcmV0dXJuIHN1cGVyLmFkYXB0KG5vdGlmaWVyLCB0aGlzKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgT2JqZWN0IGFkYXB0KE9iamVjdCBvYmplY3QsIE9iamVjdCB0eXBlKSB7CisJCWlmIChpc0ZhY3RvcnlGb3JUeXBlKHR5cGUpKSB7CisJCQlPYmplY3QgYWRhcHRlciA9IHN1cGVyLmFkYXB0KG9iamVjdCwgdHlwZSk7CisJCQlpZiAoISh0eXBlIGluc3RhbmNlb2YgQ2xhc3M8Pz4pIHx8ICgoKENsYXNzPD8+KXR5cGUpLmlzSW5zdGFuY2UoYWRhcHRlcikpKSB7CisJCQkJcmV0dXJuIGFkYXB0ZXI7CisJCQl9CisJCX0KKworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFkZHMgYSBsaXN0ZW5lci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBhZGRMaXN0ZW5lcihJTm90aWZ5Q2hhbmdlZExpc3RlbmVyIG5vdGlmeUNoYW5nZWRMaXN0ZW5lcikgeworCQljaGFuZ2VOb3RpZmllci5hZGRMaXN0ZW5lcihub3RpZnlDaGFuZ2VkTGlzdGVuZXIpOworCX0KKworCS8qKgorCSAqIFRoaXMgcmVtb3ZlcyBhIGxpc3RlbmVyLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIHJlbW92ZUxpc3RlbmVyKElOb3RpZnlDaGFuZ2VkTGlzdGVuZXIgbm90aWZ5Q2hhbmdlZExpc3RlbmVyKSB7CisJCWNoYW5nZU5vdGlmaWVyLnJlbW92ZUxpc3RlbmVyKG5vdGlmeUNoYW5nZWRMaXN0ZW5lcik7CisJfQorCisJLyoqCisJICogVGhpcyBkZWxlZ2F0ZXMgdG8ge0BsaW5rICNjaGFuZ2VOb3RpZmllcn0gYW5kIHRvIHtAbGluayAjcGFyZW50QWRhcHRlckZhY3Rvcnl9LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIGZpcmVOb3RpZnlDaGFuZ2VkKE5vdGlmaWNhdGlvbiBub3RpZmljYXRpb24pIHsKKwkJY2hhbmdlTm90aWZpZXIuZmlyZU5vdGlmeUNoYW5nZWQobm90aWZpY2F0aW9uKTsKKworCQlpZiAocGFyZW50QWRhcHRlckZhY3RvcnkgIT0gbnVsbCkgeworCQkJcGFyZW50QWRhcHRlckZhY3RvcnkuZmlyZU5vdGlmeUNoYW5nZWQobm90aWZpY2F0aW9uKTsKKwkJfQorCX0KKworCS8qKgorCSAqIFRoaXMgZGlzcG9zZXMgYWxsIG9mIHRoZSBpdGVtIHByb3ZpZGVycyBjcmVhdGVkIGJ5IHRoaXMgZmFjdG9yeS4gCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgZGlzcG9zZSgpIHsKKwkJaWYgKGRvdWJsZU5PUE1vZGlmaWVySXRlbVByb3ZpZGVyICE9IG51bGwpIGRvdWJsZU5PUE1vZGlmaWVySXRlbVByb3ZpZGVyLmRpc3Bvc2UoKTsKKwkJaWYgKGRvdWJsZVJhbmdlTW9kaWZpZXJJdGVtUHJvdmlkZXIgIT0gbnVsbCkgZG91YmxlUmFuZ2VNb2RpZmllckl0ZW1Qcm92aWRlci5kaXNwb3NlKCk7CisJCWlmIChkb3VibGVTZXF1ZW5jZU1vZGlmaWVySXRlbVByb3ZpZGVyICE9IG51bGwpIGRvdWJsZVNlcXVlbmNlTW9kaWZpZXJJdGVtUHJvdmlkZXIuZGlzcG9zZSgpOworCQlpZiAoaW50ZWdlck5PUE1vZGlmaWVySXRlbVByb3ZpZGVyICE9IG51bGwpIGludGVnZXJOT1BNb2RpZmllckl0ZW1Qcm92aWRlci5kaXNwb3NlKCk7CisJCWlmIChpbnRlZ2VyUmFuZ2VNb2RpZmllckl0ZW1Qcm92aWRlciAhPSBudWxsKSBpbnRlZ2VyUmFuZ2VNb2RpZmllckl0ZW1Qcm92aWRlci5kaXNwb3NlKCk7CisJCWlmIChpbnRlZ2VyU2VxdWVuY2VNb2RpZmllckl0ZW1Qcm92aWRlciAhPSBudWxsKSBpbnRlZ2VyU2VxdWVuY2VNb2RpZmllckl0ZW1Qcm92aWRlci5kaXNwb3NlKCk7CisJCWlmIChsb25nTk9QTW9kaWZpZXJJdGVtUHJvdmlkZXIgIT0gbnVsbCkgbG9uZ05PUE1vZGlmaWVySXRlbVByb3ZpZGVyLmRpc3Bvc2UoKTsKKwkJaWYgKGxvbmdSYW5nZU1vZGlmaWVySXRlbVByb3ZpZGVyICE9IG51bGwpIGxvbmdSYW5nZU1vZGlmaWVySXRlbVByb3ZpZGVyLmRpc3Bvc2UoKTsKKwkJaWYgKGxvbmdTZXF1ZW5jZU1vZGlmaWVySXRlbVByb3ZpZGVyICE9IG51bGwpIGxvbmdTZXF1ZW5jZU1vZGlmaWVySXRlbVByb3ZpZGVyLmRpc3Bvc2UoKTsKKwkJaWYgKG1vZGlmaWVySXRlbVByb3ZpZGVyICE9IG51bGwpIG1vZGlmaWVySXRlbVByb3ZpZGVyLmRpc3Bvc2UoKTsKKwkJaWYgKG5vcE1vZGlmaWVySXRlbVByb3ZpZGVyICE9IG51bGwpIG5vcE1vZGlmaWVySXRlbVByb3ZpZGVyLmRpc3Bvc2UoKTsKKwkJaWYgKHN0ZW1UaW1lTk9QTW9kaWZpZXJJdGVtUHJvdmlkZXIgIT0gbnVsbCkgc3RlbVRpbWVOT1BNb2RpZmllckl0ZW1Qcm92aWRlci5kaXNwb3NlKCk7CisJCWlmIChzdGVtVGltZVJhbmdlTW9kaWZpZXJJdGVtUHJvdmlkZXIgIT0gbnVsbCkgc3RlbVRpbWVSYW5nZU1vZGlmaWVySXRlbVByb3ZpZGVyLmRpc3Bvc2UoKTsKKwkJaWYgKHN0ZW1UaW1lU2VxdWVuY2VNb2RpZmllckl0ZW1Qcm92aWRlciAhPSBudWxsKSBzdGVtVGltZVNlcXVlbmNlTW9kaWZpZXJJdGVtUHJvdmlkZXIuZGlzcG9zZSgpOworCQlpZiAoc3RyaW5nTk9QTW9kaWZpZXJJdGVtUHJvdmlkZXIgIT0gbnVsbCkgc3RyaW5nTk9QTW9kaWZpZXJJdGVtUHJvdmlkZXIuZGlzcG9zZSgpOworCQlpZiAoc3RyaW5nU2VxdWVuY2VNb2RpZmllckl0ZW1Qcm92aWRlciAhPSBudWxsKSBzdHJpbmdTZXF1ZW5jZU1vZGlmaWVySXRlbVByb3ZpZGVyLmRpc3Bvc2UoKTsKKwkJaWYgKGRvdWJsZU1vZGlmaWVySXRlbVByb3ZpZGVyICE9IG51bGwpIGRvdWJsZU1vZGlmaWVySXRlbVByb3ZpZGVyLmRpc3Bvc2UoKTsKKwkJaWYgKGludGVnZXJNb2RpZmllckl0ZW1Qcm92aWRlciAhPSBudWxsKSBpbnRlZ2VyTW9kaWZpZXJJdGVtUHJvdmlkZXIuZGlzcG9zZSgpOworCQlpZiAobG9uZ01vZGlmaWVySXRlbVByb3ZpZGVyICE9IG51bGwpIGxvbmdNb2RpZmllckl0ZW1Qcm92aWRlci5kaXNwb3NlKCk7CisJCWlmIChzdGVtVGltZU1vZGlmaWVySXRlbVByb3ZpZGVyICE9IG51bGwpIHN0ZW1UaW1lTW9kaWZpZXJJdGVtUHJvdmlkZXIuZGlzcG9zZSgpOworCX0KKworfQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9tb2RpZmllci9wcm92aWRlci9OT1BNb2RpZmllckl0ZW1Qcm92aWRlci5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9tb2RpZmllci9wcm92aWRlci9OT1BNb2RpZmllckl0ZW1Qcm92aWRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBlZTRhMzkKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL21vZGlmaWVyL3Byb3ZpZGVyL05PUE1vZGlmaWVySXRlbVByb3ZpZGVyLmphdmEKQEAgLTAsMCArMSwxMTcgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLnByb3ZpZGVyOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCitpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5BZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUVkaXRpbmdEb21haW5JdGVtUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1MYWJlbFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtUHJvcGVydHlEZXNjcmlwdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtUHJvcGVydHlTb3VyY2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVN0cnVjdHVyZWRJdGVtQ29udGVudFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklUcmVlSXRlbUNvbnRlbnRQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuTk9QTW9kaWZpZXI7CisKKy8qKgorICogVGhpcyBpcyB0aGUgaXRlbSBwcm92aWRlciBhZGFwdGVyIGZvciBhIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuTk9QTW9kaWZpZXJ9IG9iamVjdC4KKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIE5PUE1vZGlmaWVySXRlbVByb3ZpZGVyCisJZXh0ZW5kcyBGZWF0dXJlTW9kaWZpZXJJdGVtUHJvdmlkZXIKKwlpbXBsZW1lbnRzCisJCUlFZGl0aW5nRG9tYWluSXRlbVByb3ZpZGVyLAorCQlJU3RydWN0dXJlZEl0ZW1Db250ZW50UHJvdmlkZXIsCisJCUlUcmVlSXRlbUNvbnRlbnRQcm92aWRlciwKKwkJSUl0ZW1MYWJlbFByb3ZpZGVyLAorCQlJSXRlbVByb3BlcnR5U291cmNlIHsKKwkvKioKKwkgKiBUaGlzIGNvbnN0cnVjdHMgYW4gaW5zdGFuY2UgZnJvbSBhIGZhY3RvcnkgYW5kIGEgbm90aWZpZXIuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIE5PUE1vZGlmaWVySXRlbVByb3ZpZGVyKEFkYXB0ZXJGYWN0b3J5IGFkYXB0ZXJGYWN0b3J5KSB7CisJCXN1cGVyKGFkYXB0ZXJGYWN0b3J5KTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgdGhlIHByb3BlcnR5IGRlc2NyaXB0b3JzIGZvciB0aGUgYWRhcHRlZCBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgTGlzdDxJSXRlbVByb3BlcnR5RGVzY3JpcHRvcj4gZ2V0UHJvcGVydHlEZXNjcmlwdG9ycyhPYmplY3Qgb2JqZWN0KSB7CisJCWlmIChpdGVtUHJvcGVydHlEZXNjcmlwdG9ycyA9PSBudWxsKSB7CisJCQlzdXBlci5nZXRQcm9wZXJ0eURlc2NyaXB0b3JzKG9iamVjdCk7CisKKwkJfQorCQlyZXR1cm4gaXRlbVByb3BlcnR5RGVzY3JpcHRvcnM7CisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIE5PUE1vZGlmaWVyLmdpZi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgT2JqZWN0IGdldEltYWdlKE9iamVjdCBvYmplY3QpIHsKKwkJcmV0dXJuIG92ZXJsYXlJbWFnZShvYmplY3QsIGdldFJlc291cmNlTG9jYXRvcigpLmdldEltYWdlKCJmdWxsL29iajE2L05PUE1vZGlmaWVyIikpOyAvLyROT04tTkxTLTEkCisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIHRoZSBsYWJlbCB0ZXh0IGZvciB0aGUgYWRhcHRlZCBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgU3RyaW5nIGdldFRleHQoT2JqZWN0IG9iamVjdCkgeworCQlTdHJpbmcgbGFiZWwgPSAoKE5PUE1vZGlmaWVyKW9iamVjdCkuZ2V0RmVhdHVyZU5hbWUoKTsKKwkJcmV0dXJuIGxhYmVsID09IG51bGwgfHwgbGFiZWwubGVuZ3RoKCkgPT0gMCA/CisJCQlnZXRTdHJpbmcoIl9VSV9OT1BNb2RpZmllcl90eXBlIikgOiAvLyROT04tTkxTLTEkCisJCQlnZXRTdHJpbmcoIl9VSV9OT1BNb2RpZmllcl90eXBlIikgKyAiICIgKyBsYWJlbDsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCisJfQorCisJLyoqCisJICogVGhpcyBoYW5kbGVzIG1vZGVsIG5vdGlmaWNhdGlvbnMgYnkgY2FsbGluZyB7QGxpbmsgI3VwZGF0ZUNoaWxkcmVufSB0byB1cGRhdGUgYW55IGNhY2hlZAorCSAqIGNoaWxkcmVuIGFuZCBieSBjcmVhdGluZyBhIHZpZXdlciBub3RpZmljYXRpb24sIHdoaWNoIGl0IHBhc3NlcyB0byB7QGxpbmsgI2ZpcmVOb3RpZnlDaGFuZ2VkfS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBub3RpZnlDaGFuZ2VkKE5vdGlmaWNhdGlvbiBub3RpZmljYXRpb24pIHsKKwkJdXBkYXRlQ2hpbGRyZW4obm90aWZpY2F0aW9uKTsKKwkJc3VwZXIubm90aWZ5Q2hhbmdlZChub3RpZmljYXRpb24pOworCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmVkaXQuY29tbWFuZC5Db21tYW5kUGFyYW1ldGVyfXMgZGVzY3JpYmluZyB0aGUgY2hpbGRyZW4KKwkgKiB0aGF0IGNhbiBiZSBjcmVhdGVkIHVuZGVyIHRoaXMgb2JqZWN0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIGNvbGxlY3ROZXdDaGlsZERlc2NyaXB0b3JzKENvbGxlY3Rpb248T2JqZWN0PiBuZXdDaGlsZERlc2NyaXB0b3JzLCBPYmplY3Qgb2JqZWN0KSB7CisJCXN1cGVyLmNvbGxlY3ROZXdDaGlsZERlc2NyaXB0b3JzKG5ld0NoaWxkRGVzY3JpcHRvcnMsIG9iamVjdCk7CisJfQorCit9CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL21vZGlmaWVyL3Byb3ZpZGVyL1JhbmdlTW9kaWZpZXJJdGVtUHJvdmlkZXIuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvbW9kaWZpZXIvcHJvdmlkZXIvUmFuZ2VNb2RpZmllckl0ZW1Qcm92aWRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ0NGFkM2IKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL21vZGlmaWVyL3Byb3ZpZGVyL1JhbmdlTW9kaWZpZXJJdGVtUHJvdmlkZXIuamF2YQpAQCAtMCwwICsxLDExNiBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIucHJvdmlkZXI7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5BZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUVkaXRpbmdEb21haW5JdGVtUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1MYWJlbFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtUHJvcGVydHlEZXNjcmlwdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtUHJvcGVydHlTb3VyY2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVN0cnVjdHVyZWRJdGVtQ29udGVudFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklUcmVlSXRlbUNvbnRlbnRQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuUmFuZ2VNb2RpZmllcjsKKworLyoqCisgKiBUaGlzIGlzIHRoZSBpdGVtIHByb3ZpZGVyIGFkYXB0ZXIgZm9yIGEge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5SYW5nZU1vZGlmaWVyfSBvYmplY3QuCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBSYW5nZU1vZGlmaWVySXRlbVByb3ZpZGVyCisJZXh0ZW5kcyBGZWF0dXJlTW9kaWZpZXJJdGVtUHJvdmlkZXIKKwlpbXBsZW1lbnRzCQorCQlJRWRpdGluZ0RvbWFpbkl0ZW1Qcm92aWRlciwJCisJCUlTdHJ1Y3R1cmVkSXRlbUNvbnRlbnRQcm92aWRlciwJCisJCUlUcmVlSXRlbUNvbnRlbnRQcm92aWRlciwJCisJCUlJdGVtTGFiZWxQcm92aWRlciwJCisJCUlJdGVtUHJvcGVydHlTb3VyY2UgeworCS8qKgorCSAqIFRoaXMgY29uc3RydWN0cyBhbiBpbnN0YW5jZSBmcm9tIGEgZmFjdG9yeSBhbmQgYSBub3RpZmllci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgUmFuZ2VNb2RpZmllckl0ZW1Qcm92aWRlcihBZGFwdGVyRmFjdG9yeSBhZGFwdGVyRmFjdG9yeSkgeworCQlzdXBlcihhZGFwdGVyRmFjdG9yeSk7CisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIHRoZSBwcm9wZXJ0eSBkZXNjcmlwdG9ycyBmb3IgdGhlIGFkYXB0ZWQgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIExpc3Q8SUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I+IGdldFByb3BlcnR5RGVzY3JpcHRvcnMoT2JqZWN0IG9iamVjdCkgeworCQlpZiAoaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMgPT0gbnVsbCkgeworCQkJc3VwZXIuZ2V0UHJvcGVydHlEZXNjcmlwdG9ycyhvYmplY3QpOworCisJCX0KKwkJcmV0dXJuIGl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzOworCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyBSYW5nZU1vZGlmaWVyLmdpZi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgT2JqZWN0IGdldEltYWdlKE9iamVjdCBvYmplY3QpIHsKKwkJcmV0dXJuIG92ZXJsYXlJbWFnZShvYmplY3QsIGdldFJlc291cmNlTG9jYXRvcigpLmdldEltYWdlKCJmdWxsL29iajE2L1JhbmdlTW9kaWZpZXIiKSk7IC8vJE5PTi1OTFMtMSQKKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgdGhlIGxhYmVsIHRleHQgZm9yIHRoZSBhZGFwdGVkIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBTdHJpbmcgZ2V0VGV4dChPYmplY3Qgb2JqZWN0KSB7CisJCVN0cmluZyBsYWJlbCA9ICgoUmFuZ2VNb2RpZmllcilvYmplY3QpLmdldEZlYXR1cmVOYW1lKCk7CisJCXJldHVybiBsYWJlbCA9PSBudWxsIHx8IGxhYmVsLmxlbmd0aCgpID09IDAgPworCQkJZ2V0U3RyaW5nKCJfVUlfUmFuZ2VNb2RpZmllcl90eXBlIikgOiAvLyROT04tTkxTLTEkCisJCQlnZXRTdHJpbmcoIl9VSV9SYW5nZU1vZGlmaWVyX3R5cGUiKSArICIgIiArIGxhYmVsOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKKwl9CisKKwkvKioKKwkgKiBUaGlzIGhhbmRsZXMgbW9kZWwgbm90aWZpY2F0aW9ucyBieSBjYWxsaW5nIHtAbGluayAjdXBkYXRlQ2hpbGRyZW59IHRvIHVwZGF0ZSBhbnkgY2FjaGVkCisJICogY2hpbGRyZW4gYW5kIGJ5IGNyZWF0aW5nIGEgdmlld2VyIG5vdGlmaWNhdGlvbiwgd2hpY2ggaXQgcGFzc2VzIHRvIHtAbGluayAjZmlyZU5vdGlmeUNoYW5nZWR9LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIG5vdGlmeUNoYW5nZWQoTm90aWZpY2F0aW9uIG5vdGlmaWNhdGlvbikgeworCQl1cGRhdGVDaGlsZHJlbihub3RpZmljYXRpb24pOworCQlzdXBlci5ub3RpZnlDaGFuZ2VkKG5vdGlmaWNhdGlvbik7CisJfQorCisJLyoqCisJICogVGhpcyBhZGRzIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuZWRpdC5jb21tYW5kLkNvbW1hbmRQYXJhbWV0ZXJ9cyBkZXNjcmliaW5nIHRoZSBjaGlsZHJlbgorCSAqIHRoYXQgY2FuIGJlIGNyZWF0ZWQgdW5kZXIgdGhpcyBvYmplY3QuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgY29sbGVjdE5ld0NoaWxkRGVzY3JpcHRvcnMoQ29sbGVjdGlvbjxPYmplY3Q+IG5ld0NoaWxkRGVzY3JpcHRvcnMsIE9iamVjdCBvYmplY3QpIHsKKwkJc3VwZXIuY29sbGVjdE5ld0NoaWxkRGVzY3JpcHRvcnMobmV3Q2hpbGREZXNjcmlwdG9ycywgb2JqZWN0KTsKKwl9CisKK30KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvbW9kaWZpZXIvcHJvdmlkZXIvU1RFTVRpbWVNb2RpZmllckl0ZW1Qcm92aWRlci5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9tb2RpZmllci9wcm92aWRlci9TVEVNVGltZU1vZGlmaWVySXRlbVByb3ZpZGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGUzMjAwNQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvbW9kaWZpZXIvcHJvdmlkZXIvU1RFTVRpbWVNb2RpZmllckl0ZW1Qcm92aWRlci5qYXZhCkBAIC0wLDAgKzEsMTY1IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5wcm92aWRlcjsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOworaW1wb3J0IGphdmEudXRpbC5MaXN0OworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkNvbXBvc2VhYmxlQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUVkaXRpbmdEb21haW5JdGVtUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1MYWJlbFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtUHJvcGVydHlEZXNjcmlwdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtUHJvcGVydHlTb3VyY2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVN0cnVjdHVyZWRJdGVtQ29udGVudFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklUcmVlSXRlbUNvbnRlbnRQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuTW9kaWZpZXJQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5TVEVNVGltZU1vZGlmaWVyOworCisvKioKKyAqIFRoaXMgaXMgdGhlIGl0ZW0gcHJvdmlkZXIgYWRhcHRlciBmb3IgYSB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLlNURU1UaW1lTW9kaWZpZXJ9IG9iamVjdC4KKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIFNURU1UaW1lTW9kaWZpZXJJdGVtUHJvdmlkZXIKKwlleHRlbmRzIFNpbmdsZVZhbHVlTW9kaWZpZXJJdGVtUHJvdmlkZXIKKwlpbXBsZW1lbnRzCisJCUlFZGl0aW5nRG9tYWluSXRlbVByb3ZpZGVyLAorCQlJU3RydWN0dXJlZEl0ZW1Db250ZW50UHJvdmlkZXIsCisJCUlUcmVlSXRlbUNvbnRlbnRQcm92aWRlciwKKwkJSUl0ZW1MYWJlbFByb3ZpZGVyLAorCQlJSXRlbVByb3BlcnR5U291cmNlIHsKKwkvKioKKwkgKiBUaGlzIGNvbnN0cnVjdHMgYW4gaW5zdGFuY2UgZnJvbSBhIGZhY3RvcnkgYW5kIGEgbm90aWZpZXIuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFNURU1UaW1lTW9kaWZpZXJJdGVtUHJvdmlkZXIoQWRhcHRlckZhY3RvcnkgYWRhcHRlckZhY3RvcnkpIHsKKwkJc3VwZXIoYWRhcHRlckZhY3RvcnkpOworCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyB0aGUgcHJvcGVydHkgZGVzY3JpcHRvcnMgZm9yIHRoZSBhZGFwdGVkIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBMaXN0PElJdGVtUHJvcGVydHlEZXNjcmlwdG9yPiBnZXRQcm9wZXJ0eURlc2NyaXB0b3JzKE9iamVjdCBvYmplY3QpIHsKKwkJaWYgKGl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzID09IG51bGwpIHsKKwkJCXN1cGVyLmdldFByb3BlcnR5RGVzY3JpcHRvcnMob2JqZWN0KTsKKworCQkJYWRkVmFsdWVQcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0KTsKKwkJCWFkZE9yaWdpbmFsVmFsdWVQcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0KTsKKwkJfQorCQlyZXR1cm4gaXRlbVByb3BlcnR5RGVzY3JpcHRvcnM7CisJfQorCisJLyoqCisJICogVGhpcyBhZGRzIGEgcHJvcGVydHkgZGVzY3JpcHRvciBmb3IgdGhlIFZhbHVlIGZlYXR1cmUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgYWRkVmFsdWVQcm9wZXJ0eURlc2NyaXB0b3IoT2JqZWN0IG9iamVjdCkgeworCQlpdGVtUHJvcGVydHlEZXNjcmlwdG9ycy5hZGQKKwkJCShjcmVhdGVJdGVtUHJvcGVydHlEZXNjcmlwdG9yCisJCQkJKCgoQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSlhZGFwdGVyRmFjdG9yeSkuZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCksCisJCQkJIGdldFJlc291cmNlTG9jYXRvcigpLAorCQkJCSBnZXRTdHJpbmcoIl9VSV9TVEVNVGltZU1vZGlmaWVyX3ZhbHVlX2ZlYXR1cmUiKSwgLy8kTk9OLU5MUy0xJAorCQkJCSBnZXRTdHJpbmcoIl9VSV9Qcm9wZXJ0eURlc2NyaXB0b3JfZGVzY3JpcHRpb24iLCAiX1VJX1NURU1UaW1lTW9kaWZpZXJfdmFsdWVfZmVhdHVyZSIsICJfVUlfU1RFTVRpbWVNb2RpZmllcl90eXBlIiksIC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJCAvLyROT04tTkxTLTMkCisJCQkJIE1vZGlmaWVyUGFja2FnZS5MaXRlcmFscy5TVEVNX1RJTUVfTU9ESUZJRVJfX1ZBTFVFLAorCQkJCSB0cnVlLAorCQkJCSBmYWxzZSwKKwkJCQkgdHJ1ZSwKKwkJCQkgbnVsbCwKKwkJCQkgbnVsbCwKKwkJCQkgbnVsbCkpOworCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyBhIHByb3BlcnR5IGRlc2NyaXB0b3IgZm9yIHRoZSBPcmlnaW5hbCBWYWx1ZSBmZWF0dXJlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIGFkZE9yaWdpbmFsVmFsdWVQcm9wZXJ0eURlc2NyaXB0b3IoT2JqZWN0IG9iamVjdCkgeworCQlpdGVtUHJvcGVydHlEZXNjcmlwdG9ycy5hZGQKKwkJCShjcmVhdGVJdGVtUHJvcGVydHlEZXNjcmlwdG9yCisJCQkJKCgoQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSlhZGFwdGVyRmFjdG9yeSkuZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCksCisJCQkJIGdldFJlc291cmNlTG9jYXRvcigpLAorCQkJCSBnZXRTdHJpbmcoIl9VSV9TVEVNVGltZU1vZGlmaWVyX29yaWdpbmFsVmFsdWVfZmVhdHVyZSIpLCAvLyROT04tTkxTLTEkCisJCQkJIGdldFN0cmluZygiX1VJX1Byb3BlcnR5RGVzY3JpcHRvcl9kZXNjcmlwdGlvbiIsICJfVUlfU1RFTVRpbWVNb2RpZmllcl9vcmlnaW5hbFZhbHVlX2ZlYXR1cmUiLCAiX1VJX1NURU1UaW1lTW9kaWZpZXJfdHlwZSIpLCAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQgLy8kTk9OLU5MUy0zJAorCQkJCSBNb2RpZmllclBhY2thZ2UuTGl0ZXJhbHMuU1RFTV9USU1FX01PRElGSUVSX19PUklHSU5BTF9WQUxVRSwKKwkJCQkgZmFsc2UsCisJCQkJIGZhbHNlLAorCQkJCSB0cnVlLAorCQkJCSBudWxsLAorCQkJCSBudWxsLAorCQkJCSBudWxsKSk7CisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIFNURU1UaW1lTW9kaWZpZXIuZ2lmLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBPYmplY3QgZ2V0SW1hZ2UoT2JqZWN0IG9iamVjdCkgeworCQlyZXR1cm4gb3ZlcmxheUltYWdlKG9iamVjdCwgZ2V0UmVzb3VyY2VMb2NhdG9yKCkuZ2V0SW1hZ2UoImZ1bGwvb2JqMTYvU1RFTVRpbWVNb2RpZmllciIpKTsgLy8kTk9OLU5MUy0xJAorCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyB0aGUgbGFiZWwgdGV4dCBmb3IgdGhlIGFkYXB0ZWQgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIFN0cmluZyBnZXRUZXh0KE9iamVjdCBvYmplY3QpIHsKKwkJU3RyaW5nIGxhYmVsID0gKChTVEVNVGltZU1vZGlmaWVyKW9iamVjdCkuZ2V0RmVhdHVyZU5hbWUoKTsKKwkJcmV0dXJuIGxhYmVsID09IG51bGwgfHwgbGFiZWwubGVuZ3RoKCkgPT0gMCA/CisJCQlnZXRTdHJpbmcoIl9VSV9TVEVNVGltZU1vZGlmaWVyX3R5cGUiKSA6IC8vJE5PTi1OTFMtMSQKKwkJCWdldFN0cmluZygiX1VJX1NURU1UaW1lTW9kaWZpZXJfdHlwZSIpICsgIiAiICsgbGFiZWw7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAorCX0KKworCS8qKgorCSAqIFRoaXMgaGFuZGxlcyBtb2RlbCBub3RpZmljYXRpb25zIGJ5IGNhbGxpbmcge0BsaW5rICN1cGRhdGVDaGlsZHJlbn0gdG8gdXBkYXRlIGFueSBjYWNoZWQKKwkgKiBjaGlsZHJlbiBhbmQgYnkgY3JlYXRpbmcgYSB2aWV3ZXIgbm90aWZpY2F0aW9uLCB3aGljaCBpdCBwYXNzZXMgdG8ge0BsaW5rICNmaXJlTm90aWZ5Q2hhbmdlZH0uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgbm90aWZ5Q2hhbmdlZChOb3RpZmljYXRpb24gbm90aWZpY2F0aW9uKSB7CisJCXVwZGF0ZUNoaWxkcmVuKG5vdGlmaWNhdGlvbik7CisJCXN1cGVyLm5vdGlmeUNoYW5nZWQobm90aWZpY2F0aW9uKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFkZHMge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lZGl0LmNvbW1hbmQuQ29tbWFuZFBhcmFtZXRlcn1zIGRlc2NyaWJpbmcgdGhlIGNoaWxkcmVuCisJICogdGhhdCBjYW4gYmUgY3JlYXRlZCB1bmRlciB0aGlzIG9iamVjdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgdm9pZCBjb2xsZWN0TmV3Q2hpbGREZXNjcmlwdG9ycyhDb2xsZWN0aW9uPE9iamVjdD4gbmV3Q2hpbGREZXNjcmlwdG9ycywgT2JqZWN0IG9iamVjdCkgeworCQlzdXBlci5jb2xsZWN0TmV3Q2hpbGREZXNjcmlwdG9ycyhuZXdDaGlsZERlc2NyaXB0b3JzLCBvYmplY3QpOworCX0KKworfQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9tb2RpZmllci9wcm92aWRlci9TVEVNVGltZU5PUE1vZGlmaWVySXRlbVByb3ZpZGVyLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL21vZGlmaWVyL3Byb3ZpZGVyL1NURU1UaW1lTk9QTW9kaWZpZXJJdGVtUHJvdmlkZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNzk2ODBkCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9tb2RpZmllci9wcm92aWRlci9TVEVNVGltZU5PUE1vZGlmaWVySXRlbVByb3ZpZGVyLmphdmEKQEAgLTAsMCArMSwxMDYgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLnByb3ZpZGVyOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCitpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5BZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUVkaXRpbmdEb21haW5JdGVtUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1MYWJlbFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtUHJvcGVydHlEZXNjcmlwdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtUHJvcGVydHlTb3VyY2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVN0cnVjdHVyZWRJdGVtQ29udGVudFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklUcmVlSXRlbUNvbnRlbnRQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuU1RFTVRpbWVOT1BNb2RpZmllcjsKKworLyoqCisgKiBUaGlzIGlzIHRoZSBpdGVtIHByb3ZpZGVyIGFkYXB0ZXIgZm9yIGEge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5TVEVNVGltZU5PUE1vZGlmaWVyfSBvYmplY3QuCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBTVEVNVGltZU5PUE1vZGlmaWVySXRlbVByb3ZpZGVyCisJZXh0ZW5kcyBOT1BNb2RpZmllckl0ZW1Qcm92aWRlcgorCWltcGxlbWVudHMKKwkJSUVkaXRpbmdEb21haW5JdGVtUHJvdmlkZXIsCisJCUlTdHJ1Y3R1cmVkSXRlbUNvbnRlbnRQcm92aWRlciwKKwkJSVRyZWVJdGVtQ29udGVudFByb3ZpZGVyLAorCQlJSXRlbUxhYmVsUHJvdmlkZXIsCisJCUlJdGVtUHJvcGVydHlTb3VyY2UgeworCS8qKgorCSAqIFRoaXMgY29uc3RydWN0cyBhbiBpbnN0YW5jZSBmcm9tIGEgZmFjdG9yeSBhbmQgYSBub3RpZmllci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgU1RFTVRpbWVOT1BNb2RpZmllckl0ZW1Qcm92aWRlcihBZGFwdGVyRmFjdG9yeSBhZGFwdGVyRmFjdG9yeSkgeworCQlzdXBlcihhZGFwdGVyRmFjdG9yeSk7CisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIHRoZSBwcm9wZXJ0eSBkZXNjcmlwdG9ycyBmb3IgdGhlIGFkYXB0ZWQgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIExpc3Q8SUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I+IGdldFByb3BlcnR5RGVzY3JpcHRvcnMoT2JqZWN0IG9iamVjdCkgeworCQlpZiAoaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMgPT0gbnVsbCkgeworCQkJc3VwZXIuZ2V0UHJvcGVydHlEZXNjcmlwdG9ycyhvYmplY3QpOworCisJCX0KKwkJcmV0dXJuIGl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzOworCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyB0aGUgbGFiZWwgdGV4dCBmb3IgdGhlIGFkYXB0ZWQgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIFN0cmluZyBnZXRUZXh0KE9iamVjdCBvYmplY3QpIHsKKwkJU3RyaW5nIGxhYmVsID0gKChTVEVNVGltZU5PUE1vZGlmaWVyKW9iamVjdCkuZ2V0RmVhdHVyZU5hbWUoKTsKKwkJcmV0dXJuIGxhYmVsID09IG51bGwgfHwgbGFiZWwubGVuZ3RoKCkgPT0gMCA/CisJCQlnZXRTdHJpbmcoIl9VSV9TVEVNVGltZU5PUE1vZGlmaWVyX3R5cGUiKSA6IC8vJE5PTi1OTFMtMSQKKwkJCWdldFN0cmluZygiX1VJX1NURU1UaW1lTk9QTW9kaWZpZXJfdHlwZSIpICsgIiAiICsgbGFiZWw7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAorCX0KKworCS8qKgorCSAqIFRoaXMgaGFuZGxlcyBtb2RlbCBub3RpZmljYXRpb25zIGJ5IGNhbGxpbmcge0BsaW5rICN1cGRhdGVDaGlsZHJlbn0gdG8gdXBkYXRlIGFueSBjYWNoZWQKKwkgKiBjaGlsZHJlbiBhbmQgYnkgY3JlYXRpbmcgYSB2aWV3ZXIgbm90aWZpY2F0aW9uLCB3aGljaCBpdCBwYXNzZXMgdG8ge0BsaW5rICNmaXJlTm90aWZ5Q2hhbmdlZH0uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgbm90aWZ5Q2hhbmdlZChOb3RpZmljYXRpb24gbm90aWZpY2F0aW9uKSB7CisJCXVwZGF0ZUNoaWxkcmVuKG5vdGlmaWNhdGlvbik7CisJCXN1cGVyLm5vdGlmeUNoYW5nZWQobm90aWZpY2F0aW9uKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFkZHMge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lZGl0LmNvbW1hbmQuQ29tbWFuZFBhcmFtZXRlcn1zIGRlc2NyaWJpbmcgdGhlIGNoaWxkcmVuCisJICogdGhhdCBjYW4gYmUgY3JlYXRlZCB1bmRlciB0aGlzIG9iamVjdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgdm9pZCBjb2xsZWN0TmV3Q2hpbGREZXNjcmlwdG9ycyhDb2xsZWN0aW9uPE9iamVjdD4gbmV3Q2hpbGREZXNjcmlwdG9ycywgT2JqZWN0IG9iamVjdCkgeworCQlzdXBlci5jb2xsZWN0TmV3Q2hpbGREZXNjcmlwdG9ycyhuZXdDaGlsZERlc2NyaXB0b3JzLCBvYmplY3QpOworCX0KKworfQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9tb2RpZmllci9wcm92aWRlci9TVEVNVGltZVJhbmdlTW9kaWZpZXJJdGVtUHJvdmlkZXIuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvbW9kaWZpZXIvcHJvdmlkZXIvU1RFTVRpbWVSYW5nZU1vZGlmaWVySXRlbVByb3ZpZGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTEzMDc4MwotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvbW9kaWZpZXIvcHJvdmlkZXIvU1RFTVRpbWVSYW5nZU1vZGlmaWVySXRlbVByb3ZpZGVyLmphdmEKQEAgLTAsMCArMSwyNDUgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLnByb3ZpZGVyOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOworaW1wb3J0IGphdmEudXRpbC5MaXN0OworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkNvbXBvc2VhYmxlQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUVkaXRpbmdEb21haW5JdGVtUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1MYWJlbFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtUHJvcGVydHlEZXNjcmlwdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtUHJvcGVydHlTb3VyY2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVN0cnVjdHVyZWRJdGVtQ29udGVudFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklUcmVlSXRlbUNvbnRlbnRQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JdGVtUHJvcGVydHlEZXNjcmlwdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLlZpZXdlck5vdGlmaWNhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuTW9kaWZpZXJQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5TVEVNVGltZVJhbmdlTW9kaWZpZXI7CisKKy8qKgorICogVGhpcyBpcyB0aGUgaXRlbSBwcm92aWRlciBhZGFwdGVyIGZvciBhIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuU1RFTVRpbWVSYW5nZU1vZGlmaWVyfSBvYmplY3QuCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBTVEVNVGltZVJhbmdlTW9kaWZpZXJJdGVtUHJvdmlkZXIKKwlleHRlbmRzIFJhbmdlTW9kaWZpZXJJdGVtUHJvdmlkZXIKKwlpbXBsZW1lbnRzCQorCQlJRWRpdGluZ0RvbWFpbkl0ZW1Qcm92aWRlciwJCisJCUlTdHJ1Y3R1cmVkSXRlbUNvbnRlbnRQcm92aWRlciwJCisJCUlUcmVlSXRlbUNvbnRlbnRQcm92aWRlciwJCisJCUlJdGVtTGFiZWxQcm92aWRlciwJCisJCUlJdGVtUHJvcGVydHlTb3VyY2UgeworCS8qKgorCSAqIFRoaXMgY29uc3RydWN0cyBhbiBpbnN0YW5jZSBmcm9tIGEgZmFjdG9yeSBhbmQgYSBub3RpZmllci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgU1RFTVRpbWVSYW5nZU1vZGlmaWVySXRlbVByb3ZpZGVyKEFkYXB0ZXJGYWN0b3J5IGFkYXB0ZXJGYWN0b3J5KSB7CisJCXN1cGVyKGFkYXB0ZXJGYWN0b3J5KTsKKwl9CisKKy8vCS8qKgorLy8JICogVGhpcyByZXR1cm5zIHRoZSBwcm9wZXJ0eSBkZXNjcmlwdG9ycyBmb3IgdGhlIGFkYXB0ZWQgY2xhc3MuCisvLwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorLy8JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisvLwkgKiBAZ2VuZXJhdGVkCisvLwkgKi8KKy8vCUBPdmVycmlkZQorLy8JcHVibGljIExpc3Q8SUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I+IGdldFByb3BlcnR5RGVzY3JpcHRvcnMoT2JqZWN0IG9iamVjdCkgeworLy8JCWlmIChpdGVtUHJvcGVydHlEZXNjcmlwdG9ycyA9PSBudWxsKSB7CisvLwkJCXN1cGVyLmdldFByb3BlcnR5RGVzY3JpcHRvcnMob2JqZWN0KTsKKy8vCisvLwkJCWFkZFN0YXJ0VmFsdWVQcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0KTsKKy8vCQkJYWRkRW5kVmFsdWVQcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0KTsKKy8vCQkJYWRkSW5jcmVtZW50UHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCk7CisvLwkJCWFkZE5leHRWYWx1ZVByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QpOworLy8JCX0KKy8vCQlyZXR1cm4gaXRlbVByb3BlcnR5RGVzY3JpcHRvcnM7CisvLwl9CisJCisJLyoqCisJICogVGhpcyByZXR1cm5zIHRoZSBwcm9wZXJ0eSBkZXNjcmlwdG9ycyBmb3IgdGhlIGFkYXB0ZWQgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIExpc3Q8SUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I+IGdldFByb3BlcnR5RGVzY3JpcHRvcnMoT2JqZWN0IG9iamVjdCkgeworCQlpZiAoaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMgPT0gbnVsbCkgeworCQkJc3VwZXIuZ2V0UHJvcGVydHlEZXNjcmlwdG9ycyhvYmplY3QpOworCisJCQlhZGRTdGFydFZhbHVlUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCk7CisJCQlhZGRFbmRWYWx1ZVByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QpOworCQkJYWRkSW5jcmVtZW50UHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCk7CisJCQlhZGROZXh0VmFsdWVQcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0KTsKKwkJfQorCQlyZXR1cm4gaXRlbVByb3BlcnR5RGVzY3JpcHRvcnM7CisJfQorCQorCisJLyoqCisJICogVGhpcyBhZGRzIGEgcHJvcGVydHkgZGVzY3JpcHRvciBmb3IgdGhlIFN0YXJ0IFZhbHVlIGZlYXR1cmUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgYWRkU3RhcnRWYWx1ZVByb3BlcnR5RGVzY3JpcHRvcihPYmplY3Qgb2JqZWN0KSB7CisJCWl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzLmFkZAorCQkJKGNyZWF0ZUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IKKwkJCQkoKChDb21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5KWFkYXB0ZXJGYWN0b3J5KS5nZXRSb290QWRhcHRlckZhY3RvcnkoKSwKKwkJCQkgZ2V0UmVzb3VyY2VMb2NhdG9yKCksCisJCQkJIGdldFN0cmluZygiX1VJX1NURU1UaW1lUmFuZ2VNb2RpZmllcl9zdGFydFZhbHVlX2ZlYXR1cmUiKSwgLy8kTk9OLU5MUy0xJAorCQkJCSBnZXRTdHJpbmcoIl9VSV9Qcm9wZXJ0eURlc2NyaXB0b3JfZGVzY3JpcHRpb24iLCAiX1VJX1NURU1UaW1lUmFuZ2VNb2RpZmllcl9zdGFydFZhbHVlX2ZlYXR1cmUiLCAiX1VJX1NURU1UaW1lUmFuZ2VNb2RpZmllcl90eXBlIiksIC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJCAvLyROT04tTkxTLTMkCisJCQkJIE1vZGlmaWVyUGFja2FnZS5MaXRlcmFscy5TVEVNX1RJTUVfUkFOR0VfTU9ESUZJRVJfX1NUQVJUX1ZBTFVFLAorCQkJCSB0cnVlLAorCQkJCSBmYWxzZSwKKwkJCQkgdHJ1ZSwKKwkJCQkgbnVsbCwKKwkJCQkgbnVsbCwKKwkJCQkgbnVsbCkpOworCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyBhIHByb3BlcnR5IGRlc2NyaXB0b3IgZm9yIHRoZSBFbmQgVmFsdWUgZmVhdHVyZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBhZGRFbmRWYWx1ZVByb3BlcnR5RGVzY3JpcHRvcihPYmplY3Qgb2JqZWN0KSB7CisJCWl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzLmFkZAorCQkJKGNyZWF0ZUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IKKwkJCQkoKChDb21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5KWFkYXB0ZXJGYWN0b3J5KS5nZXRSb290QWRhcHRlckZhY3RvcnkoKSwKKwkJCQkgZ2V0UmVzb3VyY2VMb2NhdG9yKCksCisJCQkJIGdldFN0cmluZygiX1VJX1NURU1UaW1lUmFuZ2VNb2RpZmllcl9lbmRWYWx1ZV9mZWF0dXJlIiksIC8vJE5PTi1OTFMtMSQKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfUHJvcGVydHlEZXNjcmlwdG9yX2Rlc2NyaXB0aW9uIiwgIl9VSV9TVEVNVGltZVJhbmdlTW9kaWZpZXJfZW5kVmFsdWVfZmVhdHVyZSIsICJfVUlfU1RFTVRpbWVSYW5nZU1vZGlmaWVyX3R5cGUiKSwgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkIC8vJE5PTi1OTFMtMyQKKwkJCQkgTW9kaWZpZXJQYWNrYWdlLkxpdGVyYWxzLlNURU1fVElNRV9SQU5HRV9NT0RJRklFUl9fRU5EX1ZBTFVFLAorCQkJCSB0cnVlLAorCQkJCSBmYWxzZSwKKwkJCQkgdHJ1ZSwKKwkJCQkgbnVsbCwKKwkJCQkgbnVsbCwKKwkJCQkgbnVsbCkpOworCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyBhIHByb3BlcnR5IGRlc2NyaXB0b3IgZm9yIHRoZSBJbmNyZW1lbnQgZmVhdHVyZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBhZGRJbmNyZW1lbnRQcm9wZXJ0eURlc2NyaXB0b3IoT2JqZWN0IG9iamVjdCkgeworCQlpdGVtUHJvcGVydHlEZXNjcmlwdG9ycy5hZGQKKwkJCShjcmVhdGVJdGVtUHJvcGVydHlEZXNjcmlwdG9yCisJCQkJKCgoQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSlhZGFwdGVyRmFjdG9yeSkuZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCksCisJCQkJIGdldFJlc291cmNlTG9jYXRvcigpLAorCQkJCSBnZXRTdHJpbmcoIl9VSV9TVEVNVGltZVJhbmdlTW9kaWZpZXJfaW5jcmVtZW50X2ZlYXR1cmUiKSwgLy8kTk9OLU5MUy0xJAorCQkJCSBnZXRTdHJpbmcoIl9VSV9Qcm9wZXJ0eURlc2NyaXB0b3JfZGVzY3JpcHRpb24iLCAiX1VJX1NURU1UaW1lUmFuZ2VNb2RpZmllcl9pbmNyZW1lbnRfZmVhdHVyZSIsICJfVUlfU1RFTVRpbWVSYW5nZU1vZGlmaWVyX3R5cGUiKSwgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkIC8vJE5PTi1OTFMtMyQKKwkJCQkgTW9kaWZpZXJQYWNrYWdlLkxpdGVyYWxzLlNURU1fVElNRV9SQU5HRV9NT0RJRklFUl9fSU5DUkVNRU5ULAorCQkJCSB0cnVlLAorCQkJCSBmYWxzZSwKKwkJCQkgZmFsc2UsCisJCQkJIEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IuSU5URUdSQUxfVkFMVUVfSU1BR0UsCisJCQkJIG51bGwsCisJCQkJIG51bGwpKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFkZHMgYSBwcm9wZXJ0eSBkZXNjcmlwdG9yIGZvciB0aGUgTmV4dCBWYWx1ZSBmZWF0dXJlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIGFkZE5leHRWYWx1ZVByb3BlcnR5RGVzY3JpcHRvcihPYmplY3Qgb2JqZWN0KSB7CisJCWl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzLmFkZAorCQkJKGNyZWF0ZUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IKKwkJCQkoKChDb21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5KWFkYXB0ZXJGYWN0b3J5KS5nZXRSb290QWRhcHRlckZhY3RvcnkoKSwKKwkJCQkgZ2V0UmVzb3VyY2VMb2NhdG9yKCksCisJCQkJIGdldFN0cmluZygiX1VJX1NURU1UaW1lUmFuZ2VNb2RpZmllcl9uZXh0VmFsdWVfZmVhdHVyZSIpLCAvLyROT04tTkxTLTEkCisJCQkJIGdldFN0cmluZygiX1VJX1Byb3BlcnR5RGVzY3JpcHRvcl9kZXNjcmlwdGlvbiIsICJfVUlfU1RFTVRpbWVSYW5nZU1vZGlmaWVyX25leHRWYWx1ZV9mZWF0dXJlIiwgIl9VSV9TVEVNVGltZVJhbmdlTW9kaWZpZXJfdHlwZSIpLCAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQgLy8kTk9OLU5MUy0zJAorCQkJCSBNb2RpZmllclBhY2thZ2UuTGl0ZXJhbHMuU1RFTV9USU1FX1JBTkdFX01PRElGSUVSX19ORVhUX1ZBTFVFLAorCQkJCSB0cnVlLAorCQkJCSBmYWxzZSwKKwkJCQkgZmFsc2UsCisJCQkJIG51bGwsCisJCQkJIG51bGwsCisJCQkJIG51bGwpKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgdGhlIGxhYmVsIHRleHQgZm9yIHRoZSBhZGFwdGVkIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgU3RyaW5nIGdldFRleHQoT2JqZWN0IG9iamVjdCkgeworCQlmaW5hbCBTVEVNVGltZVJhbmdlTW9kaWZpZXIgcm0gPSAoU1RFTVRpbWVSYW5nZU1vZGlmaWVyKW9iamVjdDsKKwkJZmluYWwgU3RyaW5nQnVpbGRlciBzYiA9IG5ldyBTdHJpbmdCdWlsZGVyKHJtLmdldEZlYXR1cmVOYW1lKCkpOworCQlzYi5hcHBlbmQoIjogIik7CisJCXNiLmFwcGVuZChybS5nZXRTdGFydFZhbHVlKCkpOworCQlzYi5hcHBlbmQoIiB0byAiKTsKKwkJc2IuYXBwZW5kKHJtLmdldEVuZFZhbHVlKCkpOworCQlzYi5hcHBlbmQoIiBieSAiKTsKKwkJc2IuYXBwZW5kKHJtLmdldEluY3JlbWVudCgpKTsKKwkJcmV0dXJuIHNiLnRvU3RyaW5nKCk7CisJfSAvLyBnZXRUZXh0CisJCisJLyoqCisJICogVGhpcyByZXR1cm5zIHRoZSBsYWJlbCB0ZXh0IGZvciB0aGUgYWRhcHRlZCBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgU3RyaW5nIGdldFRleHRHZW4oT2JqZWN0IG9iamVjdCkgeworCQlTdHJpbmcgbGFiZWwgPSAoKFNURU1UaW1lUmFuZ2VNb2RpZmllcilvYmplY3QpLmdldEZlYXR1cmVOYW1lKCk7CisJCXJldHVybiBsYWJlbCA9PSBudWxsIHx8IGxhYmVsLmxlbmd0aCgpID09IDAgPworCQkJZ2V0U3RyaW5nKCJfVUlfU1RFTVRpbWVSYW5nZU1vZGlmaWVyX3R5cGUiKSA6IC8vJE5PTi1OTFMtMSQKKwkJCWdldFN0cmluZygiX1VJX1NURU1UaW1lUmFuZ2VNb2RpZmllcl90eXBlIikgKyAiICIgKyBsYWJlbDsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCisJfQorCisJLyoqCisJICogVGhpcyBoYW5kbGVzIG1vZGVsIG5vdGlmaWNhdGlvbnMgYnkgY2FsbGluZyB7QGxpbmsgI3VwZGF0ZUNoaWxkcmVufSB0byB1cGRhdGUgYW55IGNhY2hlZAorCSAqIGNoaWxkcmVuIGFuZCBieSBjcmVhdGluZyBhIHZpZXdlciBub3RpZmljYXRpb24sIHdoaWNoIGl0IHBhc3NlcyB0byB7QGxpbmsgI2ZpcmVOb3RpZnlDaGFuZ2VkfS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBub3RpZnlDaGFuZ2VkKE5vdGlmaWNhdGlvbiBub3RpZmljYXRpb24pIHsKKwkJdXBkYXRlQ2hpbGRyZW4obm90aWZpY2F0aW9uKTsKKworCQlzd2l0Y2ggKG5vdGlmaWNhdGlvbi5nZXRGZWF0dXJlSUQoU1RFTVRpbWVSYW5nZU1vZGlmaWVyLmNsYXNzKSkgeworCQkJY2FzZSBNb2RpZmllclBhY2thZ2UuU1RFTV9USU1FX1JBTkdFX01PRElGSUVSX19JTkNSRU1FTlQ6CisJCQkJZmlyZU5vdGlmeUNoYW5nZWQobmV3IFZpZXdlck5vdGlmaWNhdGlvbihub3RpZmljYXRpb24sIG5vdGlmaWNhdGlvbi5nZXROb3RpZmllcigpLCBmYWxzZSwgdHJ1ZSkpOworCQkJCXJldHVybjsKKwkJfQorCQlzdXBlci5ub3RpZnlDaGFuZ2VkKG5vdGlmaWNhdGlvbik7CisJfQorCisJLyoqCisJICogVGhpcyBhZGRzIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuZWRpdC5jb21tYW5kLkNvbW1hbmRQYXJhbWV0ZXJ9cyBkZXNjcmliaW5nIHRoZSBjaGlsZHJlbgorCSAqIHRoYXQgY2FuIGJlIGNyZWF0ZWQgdW5kZXIgdGhpcyBvYmplY3QuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgY29sbGVjdE5ld0NoaWxkRGVzY3JpcHRvcnMoQ29sbGVjdGlvbjxPYmplY3Q+IG5ld0NoaWxkRGVzY3JpcHRvcnMsIE9iamVjdCBvYmplY3QpIHsKKwkJc3VwZXIuY29sbGVjdE5ld0NoaWxkRGVzY3JpcHRvcnMobmV3Q2hpbGREZXNjcmlwdG9ycywgb2JqZWN0KTsKKwl9CisKK30KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvbW9kaWZpZXIvcHJvdmlkZXIvU1RFTVRpbWVTZXF1ZW5jZU1vZGlmaWVySXRlbVByb3ZpZGVyLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL21vZGlmaWVyL3Byb3ZpZGVyL1NURU1UaW1lU2VxdWVuY2VNb2RpZmllckl0ZW1Qcm92aWRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFhOGIwZmEKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL21vZGlmaWVyL3Byb3ZpZGVyL1NURU1UaW1lU2VxdWVuY2VNb2RpZmllckl0ZW1Qcm92aWRlci5qYXZhCkBAIC0wLDAgKzEsMTMxIEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5wcm92aWRlcjsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOworaW1wb3J0IGphdmEudXRpbC5MaXN0OworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkNvbXBvc2VhYmxlQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUVkaXRpbmdEb21haW5JdGVtUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1MYWJlbFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtUHJvcGVydHlEZXNjcmlwdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtUHJvcGVydHlTb3VyY2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVN0cnVjdHVyZWRJdGVtQ29udGVudFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklUcmVlSXRlbUNvbnRlbnRQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuTW9kaWZpZXJQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5TVEVNVGltZVNlcXVlbmNlTW9kaWZpZXI7CisKKy8qKgorICogVGhpcyBpcyB0aGUgaXRlbSBwcm92aWRlciBhZGFwdGVyIGZvciBhIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuU1RFTVRpbWVTZXF1ZW5jZU1vZGlmaWVyfSBvYmplY3QuCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBTVEVNVGltZVNlcXVlbmNlTW9kaWZpZXJJdGVtUHJvdmlkZXIKKwlleHRlbmRzIFNlcXVlbmNlTW9kaWZpZXJJdGVtUHJvdmlkZXIKKwlpbXBsZW1lbnRzCisJCUlFZGl0aW5nRG9tYWluSXRlbVByb3ZpZGVyLAorCQlJU3RydWN0dXJlZEl0ZW1Db250ZW50UHJvdmlkZXIsCisJCUlUcmVlSXRlbUNvbnRlbnRQcm92aWRlciwKKwkJSUl0ZW1MYWJlbFByb3ZpZGVyLAorCQlJSXRlbVByb3BlcnR5U291cmNlIHsKKwkvKioKKwkgKiBUaGlzIGNvbnN0cnVjdHMgYW4gaW5zdGFuY2UgZnJvbSBhIGZhY3RvcnkgYW5kIGEgbm90aWZpZXIuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFNURU1UaW1lU2VxdWVuY2VNb2RpZmllckl0ZW1Qcm92aWRlcihBZGFwdGVyRmFjdG9yeSBhZGFwdGVyRmFjdG9yeSkgeworCQlzdXBlcihhZGFwdGVyRmFjdG9yeSk7CisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIHRoZSBwcm9wZXJ0eSBkZXNjcmlwdG9ycyBmb3IgdGhlIGFkYXB0ZWQgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIExpc3Q8SUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I+IGdldFByb3BlcnR5RGVzY3JpcHRvcnMoT2JqZWN0IG9iamVjdCkgeworCQlpZiAoaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMgPT0gbnVsbCkgeworCQkJc3VwZXIuZ2V0UHJvcGVydHlEZXNjcmlwdG9ycyhvYmplY3QpOworCisJCQlhZGRTZXF1ZW5jZVByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QpOworCQl9CisJCXJldHVybiBpdGVtUHJvcGVydHlEZXNjcmlwdG9yczsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFkZHMgYSBwcm9wZXJ0eSBkZXNjcmlwdG9yIGZvciB0aGUgU2VxdWVuY2UgZmVhdHVyZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBhZGRTZXF1ZW5jZVByb3BlcnR5RGVzY3JpcHRvcihPYmplY3Qgb2JqZWN0KSB7CisJCWl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzLmFkZAorCQkJKGNyZWF0ZUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IKKwkJCQkoKChDb21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5KWFkYXB0ZXJGYWN0b3J5KS5nZXRSb290QWRhcHRlckZhY3RvcnkoKSwKKwkJCQkgZ2V0UmVzb3VyY2VMb2NhdG9yKCksCisJCQkJIGdldFN0cmluZygiX1VJX1NURU1UaW1lU2VxdWVuY2VNb2RpZmllcl9zZXF1ZW5jZV9mZWF0dXJlIiksIC8vJE5PTi1OTFMtMSQKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfUHJvcGVydHlEZXNjcmlwdG9yX2Rlc2NyaXB0aW9uIiwgIl9VSV9TVEVNVGltZVNlcXVlbmNlTW9kaWZpZXJfc2VxdWVuY2VfZmVhdHVyZSIsICJfVUlfU1RFTVRpbWVTZXF1ZW5jZU1vZGlmaWVyX3R5cGUiKSwgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkIC8vJE5PTi1OTFMtMyQKKwkJCQkgTW9kaWZpZXJQYWNrYWdlLkxpdGVyYWxzLlNURU1fVElNRV9TRVFVRU5DRV9NT0RJRklFUl9fU0VRVUVOQ0UsCisJCQkJIHRydWUsCisJCQkJIGZhbHNlLAorCQkJCSB0cnVlLAorCQkJCSBudWxsLAorCQkJCSBudWxsLAorCQkJCSBudWxsKSk7CisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIHRoZSBsYWJlbCB0ZXh0IGZvciB0aGUgYWRhcHRlZCBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgU3RyaW5nIGdldFRleHQoT2JqZWN0IG9iamVjdCkgeworCQlTdHJpbmcgbGFiZWwgPSAoKFNURU1UaW1lU2VxdWVuY2VNb2RpZmllcilvYmplY3QpLmdldEZlYXR1cmVOYW1lKCk7CisJCXJldHVybiBsYWJlbCA9PSBudWxsIHx8IGxhYmVsLmxlbmd0aCgpID09IDAgPworCQkJZ2V0U3RyaW5nKCJfVUlfU1RFTVRpbWVTZXF1ZW5jZU1vZGlmaWVyX3R5cGUiKSA6IC8vJE5PTi1OTFMtMSQKKwkJCWdldFN0cmluZygiX1VJX1NURU1UaW1lU2VxdWVuY2VNb2RpZmllcl90eXBlIikgKyAiICIgKyBsYWJlbDsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCisJfQorCisJLyoqCisJICogVGhpcyBoYW5kbGVzIG1vZGVsIG5vdGlmaWNhdGlvbnMgYnkgY2FsbGluZyB7QGxpbmsgI3VwZGF0ZUNoaWxkcmVufSB0byB1cGRhdGUgYW55IGNhY2hlZAorCSAqIGNoaWxkcmVuIGFuZCBieSBjcmVhdGluZyBhIHZpZXdlciBub3RpZmljYXRpb24sIHdoaWNoIGl0IHBhc3NlcyB0byB7QGxpbmsgI2ZpcmVOb3RpZnlDaGFuZ2VkfS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBub3RpZnlDaGFuZ2VkKE5vdGlmaWNhdGlvbiBub3RpZmljYXRpb24pIHsKKwkJdXBkYXRlQ2hpbGRyZW4obm90aWZpY2F0aW9uKTsKKwkJc3VwZXIubm90aWZ5Q2hhbmdlZChub3RpZmljYXRpb24pOworCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmVkaXQuY29tbWFuZC5Db21tYW5kUGFyYW1ldGVyfXMgZGVzY3JpYmluZyB0aGUgY2hpbGRyZW4KKwkgKiB0aGF0IGNhbiBiZSBjcmVhdGVkIHVuZGVyIHRoaXMgb2JqZWN0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIGNvbGxlY3ROZXdDaGlsZERlc2NyaXB0b3JzKENvbGxlY3Rpb248T2JqZWN0PiBuZXdDaGlsZERlc2NyaXB0b3JzLCBPYmplY3Qgb2JqZWN0KSB7CisJCXN1cGVyLmNvbGxlY3ROZXdDaGlsZERlc2NyaXB0b3JzKG5ld0NoaWxkRGVzY3JpcHRvcnMsIG9iamVjdCk7CisJfQorCit9CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL21vZGlmaWVyL3Byb3ZpZGVyL1NlcXVlbmNlTW9kaWZpZXJJdGVtUHJvdmlkZXIuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvbW9kaWZpZXIvcHJvdmlkZXIvU2VxdWVuY2VNb2RpZmllckl0ZW1Qcm92aWRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA1NjA4MzAKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL21vZGlmaWVyL3Byb3ZpZGVyL1NlcXVlbmNlTW9kaWZpZXJJdGVtUHJvdmlkZXIuamF2YQpAQCAtMCwwICsxLDIyMSBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIucHJvdmlkZXI7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5BZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JRWRpdGluZ0RvbWFpbkl0ZW1Qcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbUxhYmVsUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1Qcm9wZXJ0eVNvdXJjZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JU3RydWN0dXJlZEl0ZW1Db250ZW50UHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVRyZWVJdGVtQ29udGVudFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuVmlld2VyTm90aWZpY2F0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5Nb2RpZmllclBhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLlNlcXVlbmNlTW9kaWZpZXI7CisKKy8qKgorICogVGhpcyBpcyB0aGUgaXRlbSBwcm92aWRlciBhZGFwdGVyIGZvciBhIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuU2VxdWVuY2VNb2RpZmllcn0gb2JqZWN0LgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgU2VxdWVuY2VNb2RpZmllckl0ZW1Qcm92aWRlcgorCWV4dGVuZHMgRmVhdHVyZU1vZGlmaWVySXRlbVByb3ZpZGVyCisJaW1wbGVtZW50cwkKKwkJSUVkaXRpbmdEb21haW5JdGVtUHJvdmlkZXIsCQorCQlJU3RydWN0dXJlZEl0ZW1Db250ZW50UHJvdmlkZXIsCQorCQlJVHJlZUl0ZW1Db250ZW50UHJvdmlkZXIsCQorCQlJSXRlbUxhYmVsUHJvdmlkZXIsCQorCQlJSXRlbVByb3BlcnR5U291cmNlIHsKKwkvKioKKwkgKiBUaGlzIGNvbnN0cnVjdHMgYW4gaW5zdGFuY2UgZnJvbSBhIGZhY3RvcnkgYW5kIGEgbm90aWZpZXIuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFNlcXVlbmNlTW9kaWZpZXJJdGVtUHJvdmlkZXIoQWRhcHRlckZhY3RvcnkgYWRhcHRlckZhY3RvcnkpIHsKKwkJc3VwZXIoYWRhcHRlckZhY3RvcnkpOworCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyB0aGUgcHJvcGVydHkgZGVzY3JpcHRvcnMgZm9yIHRoZSBhZGFwdGVkIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBMaXN0PElJdGVtUHJvcGVydHlEZXNjcmlwdG9yPiBnZXRQcm9wZXJ0eURlc2NyaXB0b3JzKE9iamVjdCBvYmplY3QpIHsKKwkJaWYgKGl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzID09IG51bGwpIHsKKwkJCXN1cGVyLmdldFByb3BlcnR5RGVzY3JpcHRvcnMob2JqZWN0KTsKKworCQkJYWRkU2VxdWVuY2VTaXplUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCk7CisJCQlhZGRDdXJyZW50U2VxdWVuY2VJbmRleFByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QpOworCQkJYWRkTmV4dFZhbHVlUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCk7CisJCQlhZGRPcmlnaW5hbFZhbHVlUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCk7CisJCX0KKwkJcmV0dXJuIGl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzOworCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyBhIHByb3BlcnR5IGRlc2NyaXB0b3IgZm9yIHRoZSBTZXF1ZW5jZSBTaXplIGZlYXR1cmUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgYWRkU2VxdWVuY2VTaXplUHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdCBvYmplY3QpIHsKKwkJaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMuYWRkCisJCQkoY3JlYXRlSXRlbVByb3BlcnR5RGVzY3JpcHRvcgorCQkJCSgoKENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnkpYWRhcHRlckZhY3RvcnkpLmdldFJvb3RBZGFwdGVyRmFjdG9yeSgpLAorCQkJCSBnZXRSZXNvdXJjZUxvY2F0b3IoKSwKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfU2VxdWVuY2VNb2RpZmllcl9zZXF1ZW5jZVNpemVfZmVhdHVyZSIpLCAvLyROT04tTkxTLTEkCisJCQkJIGdldFN0cmluZygiX1VJX1Byb3BlcnR5RGVzY3JpcHRvcl9kZXNjcmlwdGlvbiIsICJfVUlfU2VxdWVuY2VNb2RpZmllcl9zZXF1ZW5jZVNpemVfZmVhdHVyZSIsICJfVUlfU2VxdWVuY2VNb2RpZmllcl90eXBlIiksIC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJCAvLyROT04tTkxTLTMkCisJCQkJIE1vZGlmaWVyUGFja2FnZS5MaXRlcmFscy5TRVFVRU5DRV9NT0RJRklFUl9fU0VRVUVOQ0VfU0laRSwKKwkJCQkgZmFsc2UsCisJCQkJIGZhbHNlLAorCQkJCSBmYWxzZSwKKwkJCQkgSXRlbVByb3BlcnR5RGVzY3JpcHRvci5JTlRFR1JBTF9WQUxVRV9JTUFHRSwKKwkJCQkgbnVsbCwKKwkJCQkgbnVsbCkpOworCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyBhIHByb3BlcnR5IGRlc2NyaXB0b3IgZm9yIHRoZSBDdXJyZW50IFNlcXVlbmNlIEluZGV4IGZlYXR1cmUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgYWRkQ3VycmVudFNlcXVlbmNlSW5kZXhQcm9wZXJ0eURlc2NyaXB0b3IoT2JqZWN0IG9iamVjdCkgeworCQlpdGVtUHJvcGVydHlEZXNjcmlwdG9ycy5hZGQKKwkJCShjcmVhdGVJdGVtUHJvcGVydHlEZXNjcmlwdG9yCisJCQkJKCgoQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSlhZGFwdGVyRmFjdG9yeSkuZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCksCisJCQkJIGdldFJlc291cmNlTG9jYXRvcigpLAorCQkJCSBnZXRTdHJpbmcoIl9VSV9TZXF1ZW5jZU1vZGlmaWVyX2N1cnJlbnRTZXF1ZW5jZUluZGV4X2ZlYXR1cmUiKSwgLy8kTk9OLU5MUy0xJAorCQkJCSBnZXRTdHJpbmcoIl9VSV9Qcm9wZXJ0eURlc2NyaXB0b3JfZGVzY3JpcHRpb24iLCAiX1VJX1NlcXVlbmNlTW9kaWZpZXJfY3VycmVudFNlcXVlbmNlSW5kZXhfZmVhdHVyZSIsICJfVUlfU2VxdWVuY2VNb2RpZmllcl90eXBlIiksIC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJCAvLyROT04tTkxTLTMkCisJCQkJIE1vZGlmaWVyUGFja2FnZS5MaXRlcmFscy5TRVFVRU5DRV9NT0RJRklFUl9fQ1VSUkVOVF9TRVFVRU5DRV9JTkRFWCwKKwkJCQkgZmFsc2UsCisJCQkJIGZhbHNlLAorCQkJCSBmYWxzZSwKKwkJCQkgSXRlbVByb3BlcnR5RGVzY3JpcHRvci5JTlRFR1JBTF9WQUxVRV9JTUFHRSwKKwkJCQkgbnVsbCwKKwkJCQkgbnVsbCkpOworCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyBhIHByb3BlcnR5IGRlc2NyaXB0b3IgZm9yIHRoZSBOZXh0IFZhbHVlIGZlYXR1cmUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgYWRkTmV4dFZhbHVlUHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdCBvYmplY3QpIHsKKwkJaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMuYWRkCisJCQkoY3JlYXRlSXRlbVByb3BlcnR5RGVzY3JpcHRvcgorCQkJCSgoKENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnkpYWRhcHRlckZhY3RvcnkpLmdldFJvb3RBZGFwdGVyRmFjdG9yeSgpLAorCQkJCSBnZXRSZXNvdXJjZUxvY2F0b3IoKSwKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfU2VxdWVuY2VNb2RpZmllcl9uZXh0VmFsdWVfZmVhdHVyZSIpLCAvLyROT04tTkxTLTEkCisJCQkJIGdldFN0cmluZygiX1VJX1Byb3BlcnR5RGVzY3JpcHRvcl9kZXNjcmlwdGlvbiIsICJfVUlfU2VxdWVuY2VNb2RpZmllcl9uZXh0VmFsdWVfZmVhdHVyZSIsICJfVUlfU2VxdWVuY2VNb2RpZmllcl90eXBlIiksIC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJCAvLyROT04tTkxTLTMkCisJCQkJIE1vZGlmaWVyUGFja2FnZS5MaXRlcmFscy5TRVFVRU5DRV9NT0RJRklFUl9fTkVYVF9WQUxVRSwKKwkJCQkgZmFsc2UsCisJCQkJIGZhbHNlLAorCQkJCSBmYWxzZSwKKwkJCQkgSXRlbVByb3BlcnR5RGVzY3JpcHRvci5HRU5FUklDX1ZBTFVFX0lNQUdFLAorCQkJCSBudWxsLAorCQkJCSBudWxsKSk7CisJfQorCisJLyoqCisJICogVGhpcyBhZGRzIGEgcHJvcGVydHkgZGVzY3JpcHRvciBmb3IgdGhlIE9yaWdpbmFsIFZhbHVlIGZlYXR1cmUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgYWRkT3JpZ2luYWxWYWx1ZVByb3BlcnR5RGVzY3JpcHRvcihPYmplY3Qgb2JqZWN0KSB7CisJCWl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzLmFkZAorCQkJKGNyZWF0ZUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IKKwkJCQkoKChDb21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5KWFkYXB0ZXJGYWN0b3J5KS5nZXRSb290QWRhcHRlckZhY3RvcnkoKSwKKwkJCQkgZ2V0UmVzb3VyY2VMb2NhdG9yKCksCisJCQkJIGdldFN0cmluZygiX1VJX1NlcXVlbmNlTW9kaWZpZXJfb3JpZ2luYWxWYWx1ZV9mZWF0dXJlIiksIC8vJE5PTi1OTFMtMSQKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfUHJvcGVydHlEZXNjcmlwdG9yX2Rlc2NyaXB0aW9uIiwgIl9VSV9TZXF1ZW5jZU1vZGlmaWVyX29yaWdpbmFsVmFsdWVfZmVhdHVyZSIsICJfVUlfU2VxdWVuY2VNb2RpZmllcl90eXBlIiksIC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJCAvLyROT04tTkxTLTMkCisJCQkJIE1vZGlmaWVyUGFja2FnZS5MaXRlcmFscy5TRVFVRU5DRV9NT0RJRklFUl9fT1JJR0lOQUxfVkFMVUUsCisJCQkJIHRydWUsCisJCQkJIGZhbHNlLAorCQkJCSBmYWxzZSwKKwkJCQkgSXRlbVByb3BlcnR5RGVzY3JpcHRvci5HRU5FUklDX1ZBTFVFX0lNQUdFLAorCQkJCSBudWxsLAorCQkJCSBudWxsKSk7CisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIFNlcXVlbmNlTW9kaWZpZXIuZ2lmLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgT2JqZWN0IGdldEltYWdlKE9iamVjdCBvYmplY3QpIHsKKwkJcmV0dXJuIG92ZXJsYXlJbWFnZShvYmplY3QsIGdldFJlc291cmNlTG9jYXRvcigpLmdldEltYWdlKCJmdWxsL2N1c3RvbW9iajE2L1NlcXVlbmNlTW9kaWZpZXIucG5nIikpOyAvLyROT04tTkxTLTEkCisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIHRoZSBsYWJlbCB0ZXh0IGZvciB0aGUgYWRhcHRlZCBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgU3RyaW5nIGdldFRleHQoT2JqZWN0IG9iamVjdCkgeworCQlTdHJpbmcgbGFiZWwgPSAoKFNlcXVlbmNlTW9kaWZpZXIpb2JqZWN0KS5nZXRGZWF0dXJlTmFtZSgpOworCQlyZXR1cm4gbGFiZWwgPT0gbnVsbCB8fCBsYWJlbC5sZW5ndGgoKSA9PSAwID8KKwkJCWdldFN0cmluZygiX1VJX1NlcXVlbmNlTW9kaWZpZXJfdHlwZSIpIDogLy8kTk9OLU5MUy0xJAorCQkJZ2V0U3RyaW5nKCJfVUlfU2VxdWVuY2VNb2RpZmllcl90eXBlIikgKyAiICIgKyBsYWJlbDsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCisJfQorCisJLyoqCisJICogVGhpcyBoYW5kbGVzIG1vZGVsIG5vdGlmaWNhdGlvbnMgYnkgY2FsbGluZyB7QGxpbmsgI3VwZGF0ZUNoaWxkcmVufSB0byB1cGRhdGUgYW55IGNhY2hlZAorCSAqIGNoaWxkcmVuIGFuZCBieSBjcmVhdGluZyBhIHZpZXdlciBub3RpZmljYXRpb24sIHdoaWNoIGl0IHBhc3NlcyB0byB7QGxpbmsgI2ZpcmVOb3RpZnlDaGFuZ2VkfS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBub3RpZnlDaGFuZ2VkKE5vdGlmaWNhdGlvbiBub3RpZmljYXRpb24pIHsKKwkJdXBkYXRlQ2hpbGRyZW4obm90aWZpY2F0aW9uKTsKKworCQlzd2l0Y2ggKG5vdGlmaWNhdGlvbi5nZXRGZWF0dXJlSUQoU2VxdWVuY2VNb2RpZmllci5jbGFzcykpIHsKKwkJCWNhc2UgTW9kaWZpZXJQYWNrYWdlLlNFUVVFTkNFX01PRElGSUVSX19TRVFVRU5DRV9TSVpFOgorCQkJY2FzZSBNb2RpZmllclBhY2thZ2UuU0VRVUVOQ0VfTU9ESUZJRVJfX0NVUlJFTlRfU0VRVUVOQ0VfSU5ERVg6CisJCQljYXNlIE1vZGlmaWVyUGFja2FnZS5TRVFVRU5DRV9NT0RJRklFUl9fTkVYVF9WQUxVRToKKwkJCWNhc2UgTW9kaWZpZXJQYWNrYWdlLlNFUVVFTkNFX01PRElGSUVSX19PUklHSU5BTF9WQUxVRToKKwkJCQlmaXJlTm90aWZ5Q2hhbmdlZChuZXcgVmlld2VyTm90aWZpY2F0aW9uKG5vdGlmaWNhdGlvbiwgbm90aWZpY2F0aW9uLmdldE5vdGlmaWVyKCksIGZhbHNlLCB0cnVlKSk7CisJCQkJcmV0dXJuOworCQl9CisJCXN1cGVyLm5vdGlmeUNoYW5nZWQobm90aWZpY2F0aW9uKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFkZHMge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lZGl0LmNvbW1hbmQuQ29tbWFuZFBhcmFtZXRlcn1zIGRlc2NyaWJpbmcgdGhlIGNoaWxkcmVuCisJICogdGhhdCBjYW4gYmUgY3JlYXRlZCB1bmRlciB0aGlzIG9iamVjdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgdm9pZCBjb2xsZWN0TmV3Q2hpbGREZXNjcmlwdG9ycyhDb2xsZWN0aW9uPE9iamVjdD4gbmV3Q2hpbGREZXNjcmlwdG9ycywgT2JqZWN0IG9iamVjdCkgeworCQlzdXBlci5jb2xsZWN0TmV3Q2hpbGREZXNjcmlwdG9ycyhuZXdDaGlsZERlc2NyaXB0b3JzLCBvYmplY3QpOworCX0KKworfQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9tb2RpZmllci9wcm92aWRlci9TaW5nbGVWYWx1ZU1vZGlmaWVySXRlbVByb3ZpZGVyLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL21vZGlmaWVyL3Byb3ZpZGVyL1NpbmdsZVZhbHVlTW9kaWZpZXJJdGVtUHJvdmlkZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NDFkNTYzCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9tb2RpZmllci9wcm92aWRlci9TaW5nbGVWYWx1ZU1vZGlmaWVySXRlbVByb3ZpZGVyLmphdmEKQEAgLTAsMCArMSwxMDYgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLnByb3ZpZGVyOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA5IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCitpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5BZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUVkaXRpbmdEb21haW5JdGVtUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1MYWJlbFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtUHJvcGVydHlEZXNjcmlwdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtUHJvcGVydHlTb3VyY2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVN0cnVjdHVyZWRJdGVtQ29udGVudFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklUcmVlSXRlbUNvbnRlbnRQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuU2luZ2xlVmFsdWVNb2RpZmllcjsKKworLyoqCisgKiBUaGlzIGlzIHRoZSBpdGVtIHByb3ZpZGVyIGFkYXB0ZXIgZm9yIGEge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5TaW5nbGVWYWx1ZU1vZGlmaWVyfSBvYmplY3QuCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBTaW5nbGVWYWx1ZU1vZGlmaWVySXRlbVByb3ZpZGVyCisJZXh0ZW5kcyBGZWF0dXJlTW9kaWZpZXJJdGVtUHJvdmlkZXIKKwlpbXBsZW1lbnRzCisJCUlFZGl0aW5nRG9tYWluSXRlbVByb3ZpZGVyLAorCQlJU3RydWN0dXJlZEl0ZW1Db250ZW50UHJvdmlkZXIsCisJCUlUcmVlSXRlbUNvbnRlbnRQcm92aWRlciwKKwkJSUl0ZW1MYWJlbFByb3ZpZGVyLAorCQlJSXRlbVByb3BlcnR5U291cmNlIHsKKwkvKioKKwkgKiBUaGlzIGNvbnN0cnVjdHMgYW4gaW5zdGFuY2UgZnJvbSBhIGZhY3RvcnkgYW5kIGEgbm90aWZpZXIuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFNpbmdsZVZhbHVlTW9kaWZpZXJJdGVtUHJvdmlkZXIoQWRhcHRlckZhY3RvcnkgYWRhcHRlckZhY3RvcnkpIHsKKwkJc3VwZXIoYWRhcHRlckZhY3RvcnkpOworCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyB0aGUgcHJvcGVydHkgZGVzY3JpcHRvcnMgZm9yIHRoZSBhZGFwdGVkIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBMaXN0PElJdGVtUHJvcGVydHlEZXNjcmlwdG9yPiBnZXRQcm9wZXJ0eURlc2NyaXB0b3JzKE9iamVjdCBvYmplY3QpIHsKKwkJaWYgKGl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzID09IG51bGwpIHsKKwkJCXN1cGVyLmdldFByb3BlcnR5RGVzY3JpcHRvcnMob2JqZWN0KTsKKworCQl9CisJCXJldHVybiBpdGVtUHJvcGVydHlEZXNjcmlwdG9yczsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgdGhlIGxhYmVsIHRleHQgZm9yIHRoZSBhZGFwdGVkIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBTdHJpbmcgZ2V0VGV4dChPYmplY3Qgb2JqZWN0KSB7CisJCVN0cmluZyBsYWJlbCA9ICgoU2luZ2xlVmFsdWVNb2RpZmllcilvYmplY3QpLmdldEZlYXR1cmVOYW1lKCk7CisJCXJldHVybiBsYWJlbCA9PSBudWxsIHx8IGxhYmVsLmxlbmd0aCgpID09IDAgPworCQkJZ2V0U3RyaW5nKCJfVUlfU2luZ2xlVmFsdWVNb2RpZmllcl90eXBlIikgOiAvLyROT04tTkxTLTEkCisJCQlnZXRTdHJpbmcoIl9VSV9TaW5nbGVWYWx1ZU1vZGlmaWVyX3R5cGUiKSArICIgIiArIGxhYmVsOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKKwl9CisKKwkvKioKKwkgKiBUaGlzIGhhbmRsZXMgbW9kZWwgbm90aWZpY2F0aW9ucyBieSBjYWxsaW5nIHtAbGluayAjdXBkYXRlQ2hpbGRyZW59IHRvIHVwZGF0ZSBhbnkgY2FjaGVkCisJICogY2hpbGRyZW4gYW5kIGJ5IGNyZWF0aW5nIGEgdmlld2VyIG5vdGlmaWNhdGlvbiwgd2hpY2ggaXQgcGFzc2VzIHRvIHtAbGluayAjZmlyZU5vdGlmeUNoYW5nZWR9LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIG5vdGlmeUNoYW5nZWQoTm90aWZpY2F0aW9uIG5vdGlmaWNhdGlvbikgeworCQl1cGRhdGVDaGlsZHJlbihub3RpZmljYXRpb24pOworCQlzdXBlci5ub3RpZnlDaGFuZ2VkKG5vdGlmaWNhdGlvbik7CisJfQorCisJLyoqCisJICogVGhpcyBhZGRzIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuZWRpdC5jb21tYW5kLkNvbW1hbmRQYXJhbWV0ZXJ9cyBkZXNjcmliaW5nIHRoZSBjaGlsZHJlbgorCSAqIHRoYXQgY2FuIGJlIGNyZWF0ZWQgdW5kZXIgdGhpcyBvYmplY3QuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgY29sbGVjdE5ld0NoaWxkRGVzY3JpcHRvcnMoQ29sbGVjdGlvbjxPYmplY3Q+IG5ld0NoaWxkRGVzY3JpcHRvcnMsIE9iamVjdCBvYmplY3QpIHsKKwkJc3VwZXIuY29sbGVjdE5ld0NoaWxkRGVzY3JpcHRvcnMobmV3Q2hpbGREZXNjcmlwdG9ycywgb2JqZWN0KTsKKwl9CisKK30KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvbW9kaWZpZXIvcHJvdmlkZXIvU3RyaW5nTk9QTW9kaWZpZXJJdGVtUHJvdmlkZXIuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvbW9kaWZpZXIvcHJvdmlkZXIvU3RyaW5nTk9QTW9kaWZpZXJJdGVtUHJvdmlkZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44OTRmNGE2Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9tb2RpZmllci9wcm92aWRlci9TdHJpbmdOT1BNb2RpZmllckl0ZW1Qcm92aWRlci5qYXZhCkBAIC0wLDAgKzEsMTA2IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5wcm92aWRlcjsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOworaW1wb3J0IGphdmEudXRpbC5MaXN0OworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklFZGl0aW5nRG9tYWluSXRlbVByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtTGFiZWxQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbVByb3BlcnR5RGVzY3JpcHRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbVByb3BlcnR5U291cmNlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklTdHJ1Y3R1cmVkSXRlbUNvbnRlbnRQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JVHJlZUl0ZW1Db250ZW50UHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLlN0cmluZ05PUE1vZGlmaWVyOworCisvKioKKyAqIFRoaXMgaXMgdGhlIGl0ZW0gcHJvdmlkZXIgYWRhcHRlciBmb3IgYSB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLlN0cmluZ05PUE1vZGlmaWVyfSBvYmplY3QuCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBTdHJpbmdOT1BNb2RpZmllckl0ZW1Qcm92aWRlcgorCWV4dGVuZHMgTk9QTW9kaWZpZXJJdGVtUHJvdmlkZXIKKwlpbXBsZW1lbnRzCisJCUlFZGl0aW5nRG9tYWluSXRlbVByb3ZpZGVyLAorCQlJU3RydWN0dXJlZEl0ZW1Db250ZW50UHJvdmlkZXIsCisJCUlUcmVlSXRlbUNvbnRlbnRQcm92aWRlciwKKwkJSUl0ZW1MYWJlbFByb3ZpZGVyLAorCQlJSXRlbVByb3BlcnR5U291cmNlIHsKKwkvKioKKwkgKiBUaGlzIGNvbnN0cnVjdHMgYW4gaW5zdGFuY2UgZnJvbSBhIGZhY3RvcnkgYW5kIGEgbm90aWZpZXIuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFN0cmluZ05PUE1vZGlmaWVySXRlbVByb3ZpZGVyKEFkYXB0ZXJGYWN0b3J5IGFkYXB0ZXJGYWN0b3J5KSB7CisJCXN1cGVyKGFkYXB0ZXJGYWN0b3J5KTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgdGhlIHByb3BlcnR5IGRlc2NyaXB0b3JzIGZvciB0aGUgYWRhcHRlZCBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgTGlzdDxJSXRlbVByb3BlcnR5RGVzY3JpcHRvcj4gZ2V0UHJvcGVydHlEZXNjcmlwdG9ycyhPYmplY3Qgb2JqZWN0KSB7CisJCWlmIChpdGVtUHJvcGVydHlEZXNjcmlwdG9ycyA9PSBudWxsKSB7CisJCQlzdXBlci5nZXRQcm9wZXJ0eURlc2NyaXB0b3JzKG9iamVjdCk7CisKKwkJfQorCQlyZXR1cm4gaXRlbVByb3BlcnR5RGVzY3JpcHRvcnM7CisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIHRoZSBsYWJlbCB0ZXh0IGZvciB0aGUgYWRhcHRlZCBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgU3RyaW5nIGdldFRleHQoT2JqZWN0IG9iamVjdCkgeworCQlTdHJpbmcgbGFiZWwgPSAoKFN0cmluZ05PUE1vZGlmaWVyKW9iamVjdCkuZ2V0RmVhdHVyZU5hbWUoKTsKKwkJcmV0dXJuIGxhYmVsID09IG51bGwgfHwgbGFiZWwubGVuZ3RoKCkgPT0gMCA/CisJCQlnZXRTdHJpbmcoIl9VSV9TdHJpbmdOT1BNb2RpZmllcl90eXBlIikgOiAvLyROT04tTkxTLTEkCisJCQlnZXRTdHJpbmcoIl9VSV9TdHJpbmdOT1BNb2RpZmllcl90eXBlIikgKyAiICIgKyBsYWJlbDsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCisJfQorCisJLyoqCisJICogVGhpcyBoYW5kbGVzIG1vZGVsIG5vdGlmaWNhdGlvbnMgYnkgY2FsbGluZyB7QGxpbmsgI3VwZGF0ZUNoaWxkcmVufSB0byB1cGRhdGUgYW55IGNhY2hlZAorCSAqIGNoaWxkcmVuIGFuZCBieSBjcmVhdGluZyBhIHZpZXdlciBub3RpZmljYXRpb24sIHdoaWNoIGl0IHBhc3NlcyB0byB7QGxpbmsgI2ZpcmVOb3RpZnlDaGFuZ2VkfS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBub3RpZnlDaGFuZ2VkKE5vdGlmaWNhdGlvbiBub3RpZmljYXRpb24pIHsKKwkJdXBkYXRlQ2hpbGRyZW4obm90aWZpY2F0aW9uKTsKKwkJc3VwZXIubm90aWZ5Q2hhbmdlZChub3RpZmljYXRpb24pOworCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmVkaXQuY29tbWFuZC5Db21tYW5kUGFyYW1ldGVyfXMgZGVzY3JpYmluZyB0aGUgY2hpbGRyZW4KKwkgKiB0aGF0IGNhbiBiZSBjcmVhdGVkIHVuZGVyIHRoaXMgb2JqZWN0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIGNvbGxlY3ROZXdDaGlsZERlc2NyaXB0b3JzKENvbGxlY3Rpb248T2JqZWN0PiBuZXdDaGlsZERlc2NyaXB0b3JzLCBPYmplY3Qgb2JqZWN0KSB7CisJCXN1cGVyLmNvbGxlY3ROZXdDaGlsZERlc2NyaXB0b3JzKG5ld0NoaWxkRGVzY3JpcHRvcnMsIG9iamVjdCk7CisJfQorCit9CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL21vZGlmaWVyL3Byb3ZpZGVyL1N0cmluZ1NlcXVlbmNlTW9kaWZpZXJJdGVtUHJvdmlkZXIuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvbW9kaWZpZXIvcHJvdmlkZXIvU3RyaW5nU2VxdWVuY2VNb2RpZmllckl0ZW1Qcm92aWRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEyZjQ1ZTAKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL21vZGlmaWVyL3Byb3ZpZGVyL1N0cmluZ1NlcXVlbmNlTW9kaWZpZXJJdGVtUHJvdmlkZXIuamF2YQpAQCAtMCwwICsxLDEzOCBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIucHJvdmlkZXI7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5BZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JRWRpdGluZ0RvbWFpbkl0ZW1Qcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbUxhYmVsUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1Qcm9wZXJ0eVNvdXJjZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JU3RydWN0dXJlZEl0ZW1Db250ZW50UHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVRyZWVJdGVtQ29udGVudFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuVmlld2VyTm90aWZpY2F0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5Nb2RpZmllclBhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLlN0cmluZ1NlcXVlbmNlTW9kaWZpZXI7CisKKy8qKgorICogVGhpcyBpcyB0aGUgaXRlbSBwcm92aWRlciBhZGFwdGVyIGZvciBhIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuU3RyaW5nU2VxdWVuY2VNb2RpZmllcn0gb2JqZWN0LgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgU3RyaW5nU2VxdWVuY2VNb2RpZmllckl0ZW1Qcm92aWRlcgorCWV4dGVuZHMgU2VxdWVuY2VNb2RpZmllckl0ZW1Qcm92aWRlcgorCWltcGxlbWVudHMKKwkJSUVkaXRpbmdEb21haW5JdGVtUHJvdmlkZXIsCisJCUlTdHJ1Y3R1cmVkSXRlbUNvbnRlbnRQcm92aWRlciwKKwkJSVRyZWVJdGVtQ29udGVudFByb3ZpZGVyLAorCQlJSXRlbUxhYmVsUHJvdmlkZXIsCisJCUlJdGVtUHJvcGVydHlTb3VyY2UgeworCS8qKgorCSAqIFRoaXMgY29uc3RydWN0cyBhbiBpbnN0YW5jZSBmcm9tIGEgZmFjdG9yeSBhbmQgYSBub3RpZmllci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgU3RyaW5nU2VxdWVuY2VNb2RpZmllckl0ZW1Qcm92aWRlcihBZGFwdGVyRmFjdG9yeSBhZGFwdGVyRmFjdG9yeSkgeworCQlzdXBlcihhZGFwdGVyRmFjdG9yeSk7CisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIHRoZSBwcm9wZXJ0eSBkZXNjcmlwdG9ycyBmb3IgdGhlIGFkYXB0ZWQgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIExpc3Q8SUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I+IGdldFByb3BlcnR5RGVzY3JpcHRvcnMoT2JqZWN0IG9iamVjdCkgeworCQlpZiAoaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMgPT0gbnVsbCkgeworCQkJc3VwZXIuZ2V0UHJvcGVydHlEZXNjcmlwdG9ycyhvYmplY3QpOworCisJCQlhZGRTZXF1ZW5jZVByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QpOworCQl9CisJCXJldHVybiBpdGVtUHJvcGVydHlEZXNjcmlwdG9yczsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFkZHMgYSBwcm9wZXJ0eSBkZXNjcmlwdG9yIGZvciB0aGUgU2VxdWVuY2UgZmVhdHVyZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBhZGRTZXF1ZW5jZVByb3BlcnR5RGVzY3JpcHRvcihPYmplY3Qgb2JqZWN0KSB7CisJCWl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzLmFkZAorCQkJKGNyZWF0ZUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IKKwkJCQkoKChDb21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5KWFkYXB0ZXJGYWN0b3J5KS5nZXRSb290QWRhcHRlckZhY3RvcnkoKSwKKwkJCQkgZ2V0UmVzb3VyY2VMb2NhdG9yKCksCisJCQkJIGdldFN0cmluZygiX1VJX1N0cmluZ1NlcXVlbmNlTW9kaWZpZXJfc2VxdWVuY2VfZmVhdHVyZSIpLCAvLyROT04tTkxTLTEkCisJCQkJIGdldFN0cmluZygiX1VJX1Byb3BlcnR5RGVzY3JpcHRvcl9kZXNjcmlwdGlvbiIsICJfVUlfU3RyaW5nU2VxdWVuY2VNb2RpZmllcl9zZXF1ZW5jZV9mZWF0dXJlIiwgIl9VSV9TdHJpbmdTZXF1ZW5jZU1vZGlmaWVyX3R5cGUiKSwgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkIC8vJE5PTi1OTFMtMyQKKwkJCQkgTW9kaWZpZXJQYWNrYWdlLkxpdGVyYWxzLlNUUklOR19TRVFVRU5DRV9NT0RJRklFUl9fU0VRVUVOQ0UsCisJCQkJIHRydWUsCisJCQkJIGZhbHNlLAorCQkJCSBmYWxzZSwKKwkJCQkgSXRlbVByb3BlcnR5RGVzY3JpcHRvci5HRU5FUklDX1ZBTFVFX0lNQUdFLAorCQkJCSBudWxsLAorCQkJCSBudWxsKSk7CisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIHRoZSBsYWJlbCB0ZXh0IGZvciB0aGUgYWRhcHRlZCBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgU3RyaW5nIGdldFRleHQoT2JqZWN0IG9iamVjdCkgeworCQlTdHJpbmcgbGFiZWwgPSAoKFN0cmluZ1NlcXVlbmNlTW9kaWZpZXIpb2JqZWN0KS5nZXRGZWF0dXJlTmFtZSgpOworCQlyZXR1cm4gbGFiZWwgPT0gbnVsbCB8fCBsYWJlbC5sZW5ndGgoKSA9PSAwID8KKwkJCWdldFN0cmluZygiX1VJX1N0cmluZ1NlcXVlbmNlTW9kaWZpZXJfdHlwZSIpIDogLy8kTk9OLU5MUy0xJAorCQkJZ2V0U3RyaW5nKCJfVUlfU3RyaW5nU2VxdWVuY2VNb2RpZmllcl90eXBlIikgKyAiICIgKyBsYWJlbDsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCisJfQorCisJLyoqCisJICogVGhpcyBoYW5kbGVzIG1vZGVsIG5vdGlmaWNhdGlvbnMgYnkgY2FsbGluZyB7QGxpbmsgI3VwZGF0ZUNoaWxkcmVufSB0byB1cGRhdGUgYW55IGNhY2hlZAorCSAqIGNoaWxkcmVuIGFuZCBieSBjcmVhdGluZyBhIHZpZXdlciBub3RpZmljYXRpb24sIHdoaWNoIGl0IHBhc3NlcyB0byB7QGxpbmsgI2ZpcmVOb3RpZnlDaGFuZ2VkfS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBub3RpZnlDaGFuZ2VkKE5vdGlmaWNhdGlvbiBub3RpZmljYXRpb24pIHsKKwkJdXBkYXRlQ2hpbGRyZW4obm90aWZpY2F0aW9uKTsKKworCQlzd2l0Y2ggKG5vdGlmaWNhdGlvbi5nZXRGZWF0dXJlSUQoU3RyaW5nU2VxdWVuY2VNb2RpZmllci5jbGFzcykpIHsKKwkJCWNhc2UgTW9kaWZpZXJQYWNrYWdlLlNUUklOR19TRVFVRU5DRV9NT0RJRklFUl9fU0VRVUVOQ0U6CisJCQkJZmlyZU5vdGlmeUNoYW5nZWQobmV3IFZpZXdlck5vdGlmaWNhdGlvbihub3RpZmljYXRpb24sIG5vdGlmaWNhdGlvbi5nZXROb3RpZmllcigpLCBmYWxzZSwgdHJ1ZSkpOworCQkJCXJldHVybjsKKwkJfQorCQlzdXBlci5ub3RpZnlDaGFuZ2VkKG5vdGlmaWNhdGlvbik7CisJfQorCisJLyoqCisJICogVGhpcyBhZGRzIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuZWRpdC5jb21tYW5kLkNvbW1hbmRQYXJhbWV0ZXJ9cyBkZXNjcmliaW5nIHRoZSBjaGlsZHJlbgorCSAqIHRoYXQgY2FuIGJlIGNyZWF0ZWQgdW5kZXIgdGhpcyBvYmplY3QuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgY29sbGVjdE5ld0NoaWxkRGVzY3JpcHRvcnMoQ29sbGVjdGlvbjxPYmplY3Q+IG5ld0NoaWxkRGVzY3JpcHRvcnMsIE9iamVjdCBvYmplY3QpIHsKKwkJc3VwZXIuY29sbGVjdE5ld0NoaWxkRGVzY3JpcHRvcnMobmV3Q2hpbGREZXNjcmlwdG9ycywgb2JqZWN0KTsKKwl9CisKK30KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvbW9kaWZpZXIvdXRpbC9Nb2RpZmllckFkYXB0ZXJGYWN0b3J5LmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL21vZGlmaWVyL3V0aWwvTW9kaWZpZXJBZGFwdGVyRmFjdG9yeS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZlNjdmNTgKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL21vZGlmaWVyL3V0aWwvTW9kaWZpZXJBZGFwdGVyRmFjdG9yeS5qYXZhCkBAIC0wLDAgKzEsNjU4IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci51dGlsOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LkFkYXB0ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuaW1wbC5BZGFwdGVyRmFjdG9yeUltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3Q7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5JZGVudGlmaWFibGU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5TYW5pdHlDaGVja2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5EZWNvcmF0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLkRvdWJsZU1vZGlmaWVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5Eb3VibGVOT1BNb2RpZmllcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuRG91YmxlUmFuZ2VNb2RpZmllcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuRG91YmxlU2VxdWVuY2VNb2RpZmllcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuRmVhdHVyZU1vZGlmaWVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5JbnRlZ2VyTW9kaWZpZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLkludGVnZXJOT1BNb2RpZmllcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuSW50ZWdlclJhbmdlTW9kaWZpZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLkludGVnZXJTZXF1ZW5jZU1vZGlmaWVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5Mb25nTW9kaWZpZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLkxvbmdOT1BNb2RpZmllcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuTG9uZ1JhbmdlTW9kaWZpZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLkxvbmdTZXF1ZW5jZU1vZGlmaWVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5Nb2RpZmlhYmxlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5Nb2RpZmllcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuTW9kaWZpZXJQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5OT1BNb2RpZmllcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuUmFuZ2VNb2RpZmllcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuU1RFTVRpbWVNb2RpZmllcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuU1RFTVRpbWVOT1BNb2RpZmllcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuU1RFTVRpbWVSYW5nZU1vZGlmaWVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5TVEVNVGltZVNlcXVlbmNlTW9kaWZpZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLlNlcXVlbmNlTW9kaWZpZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLlNpbmdsZVZhbHVlTW9kaWZpZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLlN0cmluZ05PUE1vZGlmaWVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5TdHJpbmdTZXF1ZW5jZU1vZGlmaWVyOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiBUaGUgPGI+QWRhcHRlciBGYWN0b3J5PC9iPiBmb3IgdGhlIG1vZGVsLgorICogSXQgcHJvdmlkZXMgYW4gYWRhcHRlciA8Y29kZT5jcmVhdGVYWFg8L2NvZGU+IG1ldGhvZCBmb3IgZWFjaCBjbGFzcyBvZiB0aGUgbW9kZWwuCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLk1vZGlmaWVyUGFja2FnZQorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgTW9kaWZpZXJBZGFwdGVyRmFjdG9yeSBleHRlbmRzIEFkYXB0ZXJGYWN0b3J5SW1wbCB7CisJLyoqCisJICogVGhlIGNhY2hlZCBtb2RlbCBwYWNrYWdlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBzdGF0aWMgTW9kaWZpZXJQYWNrYWdlIG1vZGVsUGFja2FnZTsKKworCS8qKgorCSAqIENyZWF0ZXMgYW4gaW5zdGFuY2Ugb2YgdGhlIGFkYXB0ZXIgZmFjdG9yeS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgTW9kaWZpZXJBZGFwdGVyRmFjdG9yeSgpIHsKKwkJaWYgKG1vZGVsUGFja2FnZSA9PSBudWxsKSB7CisJCQltb2RlbFBhY2thZ2UgPSBNb2RpZmllclBhY2thZ2UuZUlOU1RBTkNFOworCQl9CisJfQorCisJLyoqCisJICogUmV0dXJucyB3aGV0aGVyIHRoaXMgZmFjdG9yeSBpcyBhcHBsaWNhYmxlIGZvciB0aGUgdHlwZSBvZiB0aGUgb2JqZWN0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIDxjb2RlPnRydWU8L2NvZGU+IGlmIHRoZSBvYmplY3QgaXMgZWl0aGVyIHRoZSBtb2RlbCdzIHBhY2thZ2Ugb3IgaXMgYW4gaW5zdGFuY2Ugb2JqZWN0IG9mIHRoZSBtb2RlbC4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHdoZXRoZXIgdGhpcyBmYWN0b3J5IGlzIGFwcGxpY2FibGUgZm9yIHRoZSB0eXBlIG9mIHRoZSBvYmplY3QuCisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBib29sZWFuIGlzRmFjdG9yeUZvclR5cGUoT2JqZWN0IG9iamVjdCkgeworCQlpZiAob2JqZWN0ID09IG1vZGVsUGFja2FnZSkgeworCQkJcmV0dXJuIHRydWU7CisJCX0KKwkJaWYgKG9iamVjdCBpbnN0YW5jZW9mIEVPYmplY3QpIHsKKwkJCXJldHVybiAoKEVPYmplY3Qpb2JqZWN0KS5lQ2xhc3MoKS5nZXRFUGFja2FnZSgpID09IG1vZGVsUGFja2FnZTsKKwkJfQorCQlyZXR1cm4gZmFsc2U7CisJfQorCisJLyoqCisJICogVGhlIHN3aXRjaCB0aGF0IGRlbGVnYXRlcyB0byB0aGUgPGNvZGU+Y3JlYXRlWFhYPC9jb2RlPiBtZXRob2RzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBNb2RpZmllclN3aXRjaDxBZGFwdGVyPiBtb2RlbFN3aXRjaCA9CisJCW5ldyBNb2RpZmllclN3aXRjaDxBZGFwdGVyPigpIHsKKwkJCUBPdmVycmlkZQorCQkJcHVibGljIEFkYXB0ZXIgY2FzZURvdWJsZU5PUE1vZGlmaWVyKERvdWJsZU5PUE1vZGlmaWVyIG9iamVjdCkgeworCQkJCXJldHVybiBjcmVhdGVEb3VibGVOT1BNb2RpZmllckFkYXB0ZXIoKTsKKwkJCX0KKwkJCUBPdmVycmlkZQorCQkJcHVibGljIEFkYXB0ZXIgY2FzZURvdWJsZVJhbmdlTW9kaWZpZXIoRG91YmxlUmFuZ2VNb2RpZmllciBvYmplY3QpIHsKKwkJCQlyZXR1cm4gY3JlYXRlRG91YmxlUmFuZ2VNb2RpZmllckFkYXB0ZXIoKTsKKwkJCX0KKwkJCUBPdmVycmlkZQorCQkJcHVibGljIEFkYXB0ZXIgY2FzZURvdWJsZVNlcXVlbmNlTW9kaWZpZXIoRG91YmxlU2VxdWVuY2VNb2RpZmllciBvYmplY3QpIHsKKwkJCQlyZXR1cm4gY3JlYXRlRG91YmxlU2VxdWVuY2VNb2RpZmllckFkYXB0ZXIoKTsKKwkJCX0KKwkJCUBPdmVycmlkZQorCQkJcHVibGljIEFkYXB0ZXIgY2FzZUZlYXR1cmVNb2RpZmllcihGZWF0dXJlTW9kaWZpZXIgb2JqZWN0KSB7CisJCQkJcmV0dXJuIGNyZWF0ZUZlYXR1cmVNb2RpZmllckFkYXB0ZXIoKTsKKwkJCX0KKwkJCUBPdmVycmlkZQorCQkJcHVibGljIEFkYXB0ZXIgY2FzZUludGVnZXJOT1BNb2RpZmllcihJbnRlZ2VyTk9QTW9kaWZpZXIgb2JqZWN0KSB7CisJCQkJcmV0dXJuIGNyZWF0ZUludGVnZXJOT1BNb2RpZmllckFkYXB0ZXIoKTsKKwkJCX0KKwkJCUBPdmVycmlkZQorCQkJcHVibGljIEFkYXB0ZXIgY2FzZUludGVnZXJSYW5nZU1vZGlmaWVyKEludGVnZXJSYW5nZU1vZGlmaWVyIG9iamVjdCkgeworCQkJCXJldHVybiBjcmVhdGVJbnRlZ2VyUmFuZ2VNb2RpZmllckFkYXB0ZXIoKTsKKwkJCX0KKwkJCUBPdmVycmlkZQorCQkJcHVibGljIEFkYXB0ZXIgY2FzZUludGVnZXJTZXF1ZW5jZU1vZGlmaWVyKEludGVnZXJTZXF1ZW5jZU1vZGlmaWVyIG9iamVjdCkgeworCQkJCXJldHVybiBjcmVhdGVJbnRlZ2VyU2VxdWVuY2VNb2RpZmllckFkYXB0ZXIoKTsKKwkJCX0KKwkJCUBPdmVycmlkZQorCQkJcHVibGljIEFkYXB0ZXIgY2FzZUxvbmdOT1BNb2RpZmllcihMb25nTk9QTW9kaWZpZXIgb2JqZWN0KSB7CisJCQkJcmV0dXJuIGNyZWF0ZUxvbmdOT1BNb2RpZmllckFkYXB0ZXIoKTsKKwkJCX0KKwkJCUBPdmVycmlkZQorCQkJcHVibGljIEFkYXB0ZXIgY2FzZUxvbmdSYW5nZU1vZGlmaWVyKExvbmdSYW5nZU1vZGlmaWVyIG9iamVjdCkgeworCQkJCXJldHVybiBjcmVhdGVMb25nUmFuZ2VNb2RpZmllckFkYXB0ZXIoKTsKKwkJCX0KKwkJCUBPdmVycmlkZQorCQkJcHVibGljIEFkYXB0ZXIgY2FzZUxvbmdTZXF1ZW5jZU1vZGlmaWVyKExvbmdTZXF1ZW5jZU1vZGlmaWVyIG9iamVjdCkgeworCQkJCXJldHVybiBjcmVhdGVMb25nU2VxdWVuY2VNb2RpZmllckFkYXB0ZXIoKTsKKwkJCX0KKwkJCUBPdmVycmlkZQorCQkJcHVibGljIEFkYXB0ZXIgY2FzZU1vZGlmaWVyKE1vZGlmaWVyIG9iamVjdCkgeworCQkJCXJldHVybiBjcmVhdGVNb2RpZmllckFkYXB0ZXIoKTsKKwkJCX0KKwkJCUBPdmVycmlkZQorCQkJcHVibGljIEFkYXB0ZXIgY2FzZU5PUE1vZGlmaWVyKE5PUE1vZGlmaWVyIG9iamVjdCkgeworCQkJCXJldHVybiBjcmVhdGVOT1BNb2RpZmllckFkYXB0ZXIoKTsKKwkJCX0KKwkJCUBPdmVycmlkZQorCQkJcHVibGljIEFkYXB0ZXIgY2FzZVJhbmdlTW9kaWZpZXIoUmFuZ2VNb2RpZmllciBvYmplY3QpIHsKKwkJCQlyZXR1cm4gY3JlYXRlUmFuZ2VNb2RpZmllckFkYXB0ZXIoKTsKKwkJCX0KKwkJCUBPdmVycmlkZQorCQkJcHVibGljIEFkYXB0ZXIgY2FzZVNURU1UaW1lTk9QTW9kaWZpZXIoU1RFTVRpbWVOT1BNb2RpZmllciBvYmplY3QpIHsKKwkJCQlyZXR1cm4gY3JlYXRlU1RFTVRpbWVOT1BNb2RpZmllckFkYXB0ZXIoKTsKKwkJCX0KKwkJCUBPdmVycmlkZQorCQkJcHVibGljIEFkYXB0ZXIgY2FzZVNURU1UaW1lUmFuZ2VNb2RpZmllcihTVEVNVGltZVJhbmdlTW9kaWZpZXIgb2JqZWN0KSB7CisJCQkJcmV0dXJuIGNyZWF0ZVNURU1UaW1lUmFuZ2VNb2RpZmllckFkYXB0ZXIoKTsKKwkJCX0KKwkJCUBPdmVycmlkZQorCQkJcHVibGljIEFkYXB0ZXIgY2FzZVNURU1UaW1lU2VxdWVuY2VNb2RpZmllcihTVEVNVGltZVNlcXVlbmNlTW9kaWZpZXIgb2JqZWN0KSB7CisJCQkJcmV0dXJuIGNyZWF0ZVNURU1UaW1lU2VxdWVuY2VNb2RpZmllckFkYXB0ZXIoKTsKKwkJCX0KKwkJCUBPdmVycmlkZQorCQkJcHVibGljIEFkYXB0ZXIgY2FzZVNlcXVlbmNlTW9kaWZpZXIoU2VxdWVuY2VNb2RpZmllciBvYmplY3QpIHsKKwkJCQlyZXR1cm4gY3JlYXRlU2VxdWVuY2VNb2RpZmllckFkYXB0ZXIoKTsKKwkJCX0KKwkJCUBPdmVycmlkZQorCQkJcHVibGljIEFkYXB0ZXIgY2FzZVN0cmluZ05PUE1vZGlmaWVyKFN0cmluZ05PUE1vZGlmaWVyIG9iamVjdCkgeworCQkJCXJldHVybiBjcmVhdGVTdHJpbmdOT1BNb2RpZmllckFkYXB0ZXIoKTsKKwkJCX0KKwkJCUBPdmVycmlkZQorCQkJcHVibGljIEFkYXB0ZXIgY2FzZVN0cmluZ1NlcXVlbmNlTW9kaWZpZXIoU3RyaW5nU2VxdWVuY2VNb2RpZmllciBvYmplY3QpIHsKKwkJCQlyZXR1cm4gY3JlYXRlU3RyaW5nU2VxdWVuY2VNb2RpZmllckFkYXB0ZXIoKTsKKwkJCX0KKwkJCUBPdmVycmlkZQorCQkJcHVibGljIEFkYXB0ZXIgY2FzZU1vZGlmaWFibGUoTW9kaWZpYWJsZSBvYmplY3QpIHsKKwkJCQlyZXR1cm4gY3JlYXRlTW9kaWZpYWJsZUFkYXB0ZXIoKTsKKwkJCX0KKwkJCUBPdmVycmlkZQorCQkJcHVibGljIEFkYXB0ZXIgY2FzZVNpbmdsZVZhbHVlTW9kaWZpZXIoU2luZ2xlVmFsdWVNb2RpZmllciBvYmplY3QpIHsKKwkJCQlyZXR1cm4gY3JlYXRlU2luZ2xlVmFsdWVNb2RpZmllckFkYXB0ZXIoKTsKKwkJCX0KKwkJCUBPdmVycmlkZQorCQkJcHVibGljIEFkYXB0ZXIgY2FzZURvdWJsZU1vZGlmaWVyKERvdWJsZU1vZGlmaWVyIG9iamVjdCkgeworCQkJCXJldHVybiBjcmVhdGVEb3VibGVNb2RpZmllckFkYXB0ZXIoKTsKKwkJCX0KKwkJCUBPdmVycmlkZQorCQkJcHVibGljIEFkYXB0ZXIgY2FzZUludGVnZXJNb2RpZmllcihJbnRlZ2VyTW9kaWZpZXIgb2JqZWN0KSB7CisJCQkJcmV0dXJuIGNyZWF0ZUludGVnZXJNb2RpZmllckFkYXB0ZXIoKTsKKwkJCX0KKwkJCUBPdmVycmlkZQorCQkJcHVibGljIEFkYXB0ZXIgY2FzZUxvbmdNb2RpZmllcihMb25nTW9kaWZpZXIgb2JqZWN0KSB7CisJCQkJcmV0dXJuIGNyZWF0ZUxvbmdNb2RpZmllckFkYXB0ZXIoKTsKKwkJCX0KKwkJCUBPdmVycmlkZQorCQkJcHVibGljIEFkYXB0ZXIgY2FzZVNURU1UaW1lTW9kaWZpZXIoU1RFTVRpbWVNb2RpZmllciBvYmplY3QpIHsKKwkJCQlyZXR1cm4gY3JlYXRlU1RFTVRpbWVNb2RpZmllckFkYXB0ZXIoKTsKKwkJCX0KKwkJCUBPdmVycmlkZQorCQkJcHVibGljIDxUPiBBZGFwdGVyIGNhc2VDb21wYXJhYmxlKENvbXBhcmFibGU8VD4gb2JqZWN0KSB7CisJCQkJcmV0dXJuIGNyZWF0ZUNvbXBhcmFibGVBZGFwdGVyKCk7CisJCQl9CisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyBBZGFwdGVyIGNhc2VTYW5pdHlDaGVja2VyKFNhbml0eUNoZWNrZXIgb2JqZWN0KSB7CisJCQkJcmV0dXJuIGNyZWF0ZVNhbml0eUNoZWNrZXJBZGFwdGVyKCk7CisJCQl9CisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyBBZGFwdGVyIGNhc2VJZGVudGlmaWFibGUoSWRlbnRpZmlhYmxlIG9iamVjdCkgeworCQkJCXJldHVybiBjcmVhdGVJZGVudGlmaWFibGVBZGFwdGVyKCk7CisJCQl9CisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyBBZGFwdGVyIGNhc2VEZWNvcmF0b3IoRGVjb3JhdG9yIG9iamVjdCkgeworCQkJCXJldHVybiBjcmVhdGVEZWNvcmF0b3JBZGFwdGVyKCk7CisJCQl9CisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyBBZGFwdGVyIGRlZmF1bHRDYXNlKEVPYmplY3Qgb2JqZWN0KSB7CisJCQkJcmV0dXJuIGNyZWF0ZUVPYmplY3RBZGFwdGVyKCk7CisJCQl9CisJCX07CisKKwkvKioKKwkgKiBDcmVhdGVzIGFuIGFkYXB0ZXIgZm9yIHRoZSA8Y29kZT50YXJnZXQ8L2NvZGU+LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIHRhcmdldCB0aGUgb2JqZWN0IHRvIGFkYXB0LgorCSAqIEByZXR1cm4gdGhlIGFkYXB0ZXIgZm9yIHRoZSA8Y29kZT50YXJnZXQ8L2NvZGU+LgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVBZGFwdGVyKE5vdGlmaWVyIHRhcmdldCkgeworCQlyZXR1cm4gbW9kZWxTd2l0Y2guZG9Td2l0Y2goKEVPYmplY3QpdGFyZ2V0KTsKKwl9CisKKworCS8qKgorCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLkRvdWJsZU5PUE1vZGlmaWVyIDxlbT5Eb3VibGUgTk9QIE1vZGlmaWVyPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsKKwkgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5Eb3VibGVOT1BNb2RpZmllcgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVEb3VibGVOT1BNb2RpZmllckFkYXB0ZXIoKSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLkRvdWJsZVJhbmdlTW9kaWZpZXIgPGVtPkRvdWJsZSBSYW5nZSBNb2RpZmllcjwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7CisJICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuRG91YmxlUmFuZ2VNb2RpZmllcgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVEb3VibGVSYW5nZU1vZGlmaWVyQWRhcHRlcigpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuRG91YmxlU2VxdWVuY2VNb2RpZmllciA8ZW0+RG91YmxlIFNlcXVlbmNlIE1vZGlmaWVyPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsKKwkgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5Eb3VibGVTZXF1ZW5jZU1vZGlmaWVyCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZURvdWJsZVNlcXVlbmNlTW9kaWZpZXJBZGFwdGVyKCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5GZWF0dXJlTW9kaWZpZXIgPGVtPkZlYXR1cmUgTW9kaWZpZXI8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOworCSAqIGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZSB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5LgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLkZlYXR1cmVNb2RpZmllcgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVGZWF0dXJlTW9kaWZpZXJBZGFwdGVyKCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5JbnRlZ2VyTk9QTW9kaWZpZXIgPGVtPkludGVnZXIgTk9QIE1vZGlmaWVyPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsKKwkgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5JbnRlZ2VyTk9QTW9kaWZpZXIKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlSW50ZWdlck5PUE1vZGlmaWVyQWRhcHRlcigpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuSW50ZWdlclJhbmdlTW9kaWZpZXIgPGVtPkludGVnZXIgUmFuZ2UgTW9kaWZpZXI8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOworCSAqIGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZSB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5LgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLkludGVnZXJSYW5nZU1vZGlmaWVyCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZUludGVnZXJSYW5nZU1vZGlmaWVyQWRhcHRlcigpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuSW50ZWdlclNlcXVlbmNlTW9kaWZpZXIgPGVtPkludGVnZXIgU2VxdWVuY2UgTW9kaWZpZXI8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOworCSAqIGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZSB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5LgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLkludGVnZXJTZXF1ZW5jZU1vZGlmaWVyCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZUludGVnZXJTZXF1ZW5jZU1vZGlmaWVyQWRhcHRlcigpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuTG9uZ05PUE1vZGlmaWVyIDxlbT5Mb25nIE5PUCBNb2RpZmllcjwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7CisJICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuTG9uZ05PUE1vZGlmaWVyCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZUxvbmdOT1BNb2RpZmllckFkYXB0ZXIoKSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLkxvbmdSYW5nZU1vZGlmaWVyIDxlbT5Mb25nIFJhbmdlIE1vZGlmaWVyPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsKKwkgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5Mb25nUmFuZ2VNb2RpZmllcgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVMb25nUmFuZ2VNb2RpZmllckFkYXB0ZXIoKSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLkxvbmdTZXF1ZW5jZU1vZGlmaWVyIDxlbT5Mb25nIFNlcXVlbmNlIE1vZGlmaWVyPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsKKwkgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5Mb25nU2VxdWVuY2VNb2RpZmllcgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVMb25nU2VxdWVuY2VNb2RpZmllckFkYXB0ZXIoKSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLk1vZGlmaWVyIDxlbT5Nb2RpZmllcjwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7CisJICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuTW9kaWZpZXIKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlTW9kaWZpZXJBZGFwdGVyKCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5OT1BNb2RpZmllciA8ZW0+Tk9QIE1vZGlmaWVyPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsKKwkgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5OT1BNb2RpZmllcgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVOT1BNb2RpZmllckFkYXB0ZXIoKSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLlJhbmdlTW9kaWZpZXIgPGVtPlJhbmdlIE1vZGlmaWVyPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsKKwkgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5SYW5nZU1vZGlmaWVyCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZVJhbmdlTW9kaWZpZXJBZGFwdGVyKCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5TVEVNVGltZU5PUE1vZGlmaWVyIDxlbT5TVEVNIFRpbWUgTk9QIE1vZGlmaWVyPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsKKwkgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5TVEVNVGltZU5PUE1vZGlmaWVyCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZVNURU1UaW1lTk9QTW9kaWZpZXJBZGFwdGVyKCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5TVEVNVGltZVJhbmdlTW9kaWZpZXIgPGVtPlNURU0gVGltZSBSYW5nZSBNb2RpZmllcjwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7CisJICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuU1RFTVRpbWVSYW5nZU1vZGlmaWVyCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZVNURU1UaW1lUmFuZ2VNb2RpZmllckFkYXB0ZXIoKSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLlNURU1UaW1lU2VxdWVuY2VNb2RpZmllciA8ZW0+U1RFTSBUaW1lIFNlcXVlbmNlIE1vZGlmaWVyPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsKKwkgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5TVEVNVGltZVNlcXVlbmNlTW9kaWZpZXIKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlU1RFTVRpbWVTZXF1ZW5jZU1vZGlmaWVyQWRhcHRlcigpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuU2VxdWVuY2VNb2RpZmllciA8ZW0+U2VxdWVuY2UgTW9kaWZpZXI8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOworCSAqIGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZSB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5LgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLlNlcXVlbmNlTW9kaWZpZXIKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlU2VxdWVuY2VNb2RpZmllckFkYXB0ZXIoKSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLlN0cmluZ05PUE1vZGlmaWVyIDxlbT5TdHJpbmcgTk9QIE1vZGlmaWVyPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsKKwkgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5TdHJpbmdOT1BNb2RpZmllcgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVTdHJpbmdOT1BNb2RpZmllckFkYXB0ZXIoKSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLlN0cmluZ1NlcXVlbmNlTW9kaWZpZXIgPGVtPlN0cmluZyBTZXF1ZW5jZSBNb2RpZmllcjwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7CisJICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuU3RyaW5nU2VxdWVuY2VNb2RpZmllcgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVTdHJpbmdTZXF1ZW5jZU1vZGlmaWVyQWRhcHRlcigpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuTW9kaWZpYWJsZSA8ZW0+TW9kaWZpYWJsZTwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7CisJICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuTW9kaWZpYWJsZQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVNb2RpZmlhYmxlQWRhcHRlcigpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuU2luZ2xlVmFsdWVNb2RpZmllciA8ZW0+U2luZ2xlIFZhbHVlIE1vZGlmaWVyPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsKKwkgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5TaW5nbGVWYWx1ZU1vZGlmaWVyCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZVNpbmdsZVZhbHVlTW9kaWZpZXJBZGFwdGVyKCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5Eb3VibGVNb2RpZmllciA8ZW0+RG91YmxlIE1vZGlmaWVyPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsKKwkgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5Eb3VibGVNb2RpZmllcgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVEb3VibGVNb2RpZmllckFkYXB0ZXIoKSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLkludGVnZXJNb2RpZmllciA8ZW0+SW50ZWdlciBNb2RpZmllcjwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7CisJICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuSW50ZWdlck1vZGlmaWVyCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZUludGVnZXJNb2RpZmllckFkYXB0ZXIoKSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLkxvbmdNb2RpZmllciA8ZW0+TG9uZyBNb2RpZmllcjwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7CisJICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuTG9uZ01vZGlmaWVyCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZUxvbmdNb2RpZmllckFkYXB0ZXIoKSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLlNURU1UaW1lTW9kaWZpZXIgPGVtPlNURU0gVGltZSBNb2RpZmllcjwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7CisJICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuU1RFTVRpbWVNb2RpZmllcgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVTVEVNVGltZU1vZGlmaWVyQWRhcHRlcigpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBqYXZhLmxhbmcuQ29tcGFyYWJsZSA8ZW0+Q29tcGFyYWJsZTwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7CisJICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCisJICogQHNlZSBqYXZhLmxhbmcuQ29tcGFyYWJsZQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVDb21wYXJhYmxlQWRhcHRlcigpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLlNhbml0eUNoZWNrZXIgPGVtPlNhbml0eSBDaGVja2VyPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsKKwkgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uU2FuaXR5Q2hlY2tlcgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVTYW5pdHlDaGVja2VyQWRhcHRlcigpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLklkZW50aWZpYWJsZSA8ZW0+SWRlbnRpZmlhYmxlPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsKKwkgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uSWRlbnRpZmlhYmxlCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZUlkZW50aWZpYWJsZUFkYXB0ZXIoKSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLkRlY29yYXRvciA8ZW0+RGVjb3JhdG9yPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsKKwkgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5EZWNvcmF0b3IKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlRGVjb3JhdG9yQWRhcHRlcigpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciB0aGUgZGVmYXVsdCBjYXNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbC4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlRU9iamVjdEFkYXB0ZXIoKSB7CisJCXJldHVybiBudWxsOworCX0KKworfSAvL01vZGlmaWVyQWRhcHRlckZhY3RvcnkKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvbW9kaWZpZXIvdXRpbC9Nb2RpZmllclN3aXRjaC5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9tb2RpZmllci91dGlsL01vZGlmaWVyU3dpdGNoLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWI3YTg2OQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvbW9kaWZpZXIvdXRpbC9Nb2RpZmllclN3aXRjaC5qYXZhCkBAIC0wLDAgKzEsNzcwIEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci51dGlsOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGphdmEudXRpbC5MaXN0OworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzczsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLklkZW50aWZpYWJsZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLlNhbml0eUNoZWNrZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLkRlY29yYXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuRG91YmxlTW9kaWZpZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLkRvdWJsZU5PUE1vZGlmaWVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5Eb3VibGVSYW5nZU1vZGlmaWVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5Eb3VibGVTZXF1ZW5jZU1vZGlmaWVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5GZWF0dXJlTW9kaWZpZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLkludGVnZXJNb2RpZmllcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuSW50ZWdlck5PUE1vZGlmaWVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5JbnRlZ2VyUmFuZ2VNb2RpZmllcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuSW50ZWdlclNlcXVlbmNlTW9kaWZpZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLkxvbmdNb2RpZmllcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuTG9uZ05PUE1vZGlmaWVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5Mb25nUmFuZ2VNb2RpZmllcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuTG9uZ1NlcXVlbmNlTW9kaWZpZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLk1vZGlmaWFibGU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLk1vZGlmaWVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5Nb2RpZmllclBhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLk5PUE1vZGlmaWVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5SYW5nZU1vZGlmaWVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5TVEVNVGltZU1vZGlmaWVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5TVEVNVGltZU5PUE1vZGlmaWVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5TVEVNVGltZVJhbmdlTW9kaWZpZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLlNURU1UaW1lU2VxdWVuY2VNb2RpZmllcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuU2VxdWVuY2VNb2RpZmllcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuU2luZ2xlVmFsdWVNb2RpZmllcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuU3RyaW5nTk9QTW9kaWZpZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLlN0cmluZ1NlcXVlbmNlTW9kaWZpZXI7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIFRoZSA8Yj5Td2l0Y2g8L2I+IGZvciB0aGUgbW9kZWwncyBpbmhlcml0YW5jZSBoaWVyYXJjaHkuCisgKiBJdCBzdXBwb3J0cyB0aGUgY2FsbCB7QGxpbmsgI2RvU3dpdGNoKEVPYmplY3QpIGRvU3dpdGNoKG9iamVjdCl9CisgKiB0byBpbnZva2UgdGhlIDxjb2RlPmNhc2VYWFg8L2NvZGU+IG1ldGhvZCBmb3IgZWFjaCBjbGFzcyBvZiB0aGUgbW9kZWwsCisgKiBzdGFydGluZyB3aXRoIHRoZSBhY3R1YWwgY2xhc3Mgb2YgdGhlIG9iamVjdAorICogYW5kIHByb2NlZWRpbmcgdXAgdGhlIGluaGVyaXRhbmNlIGhpZXJhcmNoeQorICogdW50aWwgYSBub24tbnVsbCByZXN1bHQgaXMgcmV0dXJuZWQsCisgKiB3aGljaCBpcyB0aGUgcmVzdWx0IG9mIHRoZSBzd2l0Y2guCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLk1vZGlmaWVyUGFja2FnZQorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgTW9kaWZpZXJTd2l0Y2g8VDE+IHsKKwkvKioKKwkgKiBUaGUgY2FjaGVkIG1vZGVsIHBhY2thZ2UKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgc3RhdGljIE1vZGlmaWVyUGFja2FnZSBtb2RlbFBhY2thZ2U7CisKKwkvKioKKwkgKiBDcmVhdGVzIGFuIGluc3RhbmNlIG9mIHRoZSBzd2l0Y2guCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIE1vZGlmaWVyU3dpdGNoKCkgeworCQlpZiAobW9kZWxQYWNrYWdlID09IG51bGwpIHsKKwkJCW1vZGVsUGFja2FnZSA9IE1vZGlmaWVyUGFja2FnZS5lSU5TVEFOQ0U7CisJCX0KKwl9CisKKwkvKioKKwkgKiBDYWxscyA8Y29kZT5jYXNlWFhYPC9jb2RlPiBmb3IgZWFjaCBjbGFzcyBvZiB0aGUgbW9kZWwgdW50aWwgb25lIHJldHVybnMgYSBub24gbnVsbCByZXN1bHQ7IGl0IHlpZWxkcyB0aGF0IHJlc3VsdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIGZpcnN0IG5vbi1udWxsIHJlc3VsdCByZXR1cm5lZCBieSBhIDxjb2RlPmNhc2VYWFg8L2NvZGU+IGNhbGwuCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBUMSBkb1N3aXRjaChFT2JqZWN0IHRoZUVPYmplY3QpIHsKKwkJcmV0dXJuIGRvU3dpdGNoKHRoZUVPYmplY3QuZUNsYXNzKCksIHRoZUVPYmplY3QpOworCX0KKworCS8qKgorCSAqIENhbGxzIDxjb2RlPmNhc2VYWFg8L2NvZGU+IGZvciBlYWNoIGNsYXNzIG9mIHRoZSBtb2RlbCB1bnRpbCBvbmUgcmV0dXJucyBhIG5vbiBudWxsIHJlc3VsdDsgaXQgeWllbGRzIHRoYXQgcmVzdWx0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgZmlyc3Qgbm9uLW51bGwgcmVzdWx0IHJldHVybmVkIGJ5IGEgPGNvZGU+Y2FzZVhYWDwvY29kZT4gY2FsbC4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIFQxIGRvU3dpdGNoKEVDbGFzcyB0aGVFQ2xhc3MsIEVPYmplY3QgdGhlRU9iamVjdCkgeworCQlpZiAodGhlRUNsYXNzLmVDb250YWluZXIoKSA9PSBtb2RlbFBhY2thZ2UpIHsKKwkJCXJldHVybiBkb1N3aXRjaCh0aGVFQ2xhc3MuZ2V0Q2xhc3NpZmllcklEKCksIHRoZUVPYmplY3QpOworCQl9CisJCWVsc2UgeworCQkJTGlzdDxFQ2xhc3M+IGVTdXBlclR5cGVzID0gdGhlRUNsYXNzLmdldEVTdXBlclR5cGVzKCk7CisJCQlyZXR1cm4KKwkJCQllU3VwZXJUeXBlcy5pc0VtcHR5KCkgPworCQkJCQlkZWZhdWx0Q2FzZSh0aGVFT2JqZWN0KSA6CisJCQkJCWRvU3dpdGNoKGVTdXBlclR5cGVzLmdldCgwKSwgdGhlRU9iamVjdCk7CisJCX0KKwl9CisKKwkvKioKKwkgKiBDYWxscyA8Y29kZT5jYXNlWFhYPC9jb2RlPiBmb3IgZWFjaCBjbGFzcyBvZiB0aGUgbW9kZWwgdW50aWwgb25lIHJldHVybnMgYSBub24gbnVsbCByZXN1bHQ7IGl0IHlpZWxkcyB0aGF0IHJlc3VsdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIGZpcnN0IG5vbi1udWxsIHJlc3VsdCByZXR1cm5lZCBieSBhIDxjb2RlPmNhc2VYWFg8L2NvZGU+IGNhbGwuCisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBUMSBkb1N3aXRjaChpbnQgY2xhc3NpZmllcklELCBFT2JqZWN0IHRoZUVPYmplY3QpIHsKKwkJc3dpdGNoIChjbGFzc2lmaWVySUQpIHsKKwkJCWNhc2UgTW9kaWZpZXJQYWNrYWdlLkRPVUJMRV9OT1BfTU9ESUZJRVI6IHsKKwkJCQlEb3VibGVOT1BNb2RpZmllciBkb3VibGVOT1BNb2RpZmllciA9IChEb3VibGVOT1BNb2RpZmllcil0aGVFT2JqZWN0OworCQkJCVQxIHJlc3VsdCA9IGNhc2VEb3VibGVOT1BNb2RpZmllcihkb3VibGVOT1BNb2RpZmllcik7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlTk9QTW9kaWZpZXIoZG91YmxlTk9QTW9kaWZpZXIpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZUZlYXR1cmVNb2RpZmllcihkb3VibGVOT1BNb2RpZmllcik7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBkZWZhdWx0Q2FzZSh0aGVFT2JqZWN0KTsKKwkJCQlyZXR1cm4gcmVzdWx0OworCQkJfQorCQkJY2FzZSBNb2RpZmllclBhY2thZ2UuRE9VQkxFX1JBTkdFX01PRElGSUVSOiB7CisJCQkJRG91YmxlUmFuZ2VNb2RpZmllciBkb3VibGVSYW5nZU1vZGlmaWVyID0gKERvdWJsZVJhbmdlTW9kaWZpZXIpdGhlRU9iamVjdDsKKwkJCQlUMSByZXN1bHQgPSBjYXNlRG91YmxlUmFuZ2VNb2RpZmllcihkb3VibGVSYW5nZU1vZGlmaWVyKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VSYW5nZU1vZGlmaWVyKGRvdWJsZVJhbmdlTW9kaWZpZXIpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZUZlYXR1cmVNb2RpZmllcihkb3VibGVSYW5nZU1vZGlmaWVyKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGRlZmF1bHRDYXNlKHRoZUVPYmplY3QpOworCQkJCXJldHVybiByZXN1bHQ7CisJCQl9CisJCQljYXNlIE1vZGlmaWVyUGFja2FnZS5ET1VCTEVfU0VRVUVOQ0VfTU9ESUZJRVI6IHsKKwkJCQlEb3VibGVTZXF1ZW5jZU1vZGlmaWVyIGRvdWJsZVNlcXVlbmNlTW9kaWZpZXIgPSAoRG91YmxlU2VxdWVuY2VNb2RpZmllcil0aGVFT2JqZWN0OworCQkJCVQxIHJlc3VsdCA9IGNhc2VEb3VibGVTZXF1ZW5jZU1vZGlmaWVyKGRvdWJsZVNlcXVlbmNlTW9kaWZpZXIpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZVNlcXVlbmNlTW9kaWZpZXIoZG91YmxlU2VxdWVuY2VNb2RpZmllcik7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlRmVhdHVyZU1vZGlmaWVyKGRvdWJsZVNlcXVlbmNlTW9kaWZpZXIpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gZGVmYXVsdENhc2UodGhlRU9iamVjdCk7CisJCQkJcmV0dXJuIHJlc3VsdDsKKwkJCX0KKwkJCWNhc2UgTW9kaWZpZXJQYWNrYWdlLkZFQVRVUkVfTU9ESUZJRVI6IHsKKwkJCQlGZWF0dXJlTW9kaWZpZXIgZmVhdHVyZU1vZGlmaWVyID0gKEZlYXR1cmVNb2RpZmllcil0aGVFT2JqZWN0OworCQkJCVQxIHJlc3VsdCA9IGNhc2VGZWF0dXJlTW9kaWZpZXIoZmVhdHVyZU1vZGlmaWVyKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGRlZmF1bHRDYXNlKHRoZUVPYmplY3QpOworCQkJCXJldHVybiByZXN1bHQ7CisJCQl9CisJCQljYXNlIE1vZGlmaWVyUGFja2FnZS5JTlRFR0VSX05PUF9NT0RJRklFUjogeworCQkJCUludGVnZXJOT1BNb2RpZmllciBpbnRlZ2VyTk9QTW9kaWZpZXIgPSAoSW50ZWdlck5PUE1vZGlmaWVyKXRoZUVPYmplY3Q7CisJCQkJVDEgcmVzdWx0ID0gY2FzZUludGVnZXJOT1BNb2RpZmllcihpbnRlZ2VyTk9QTW9kaWZpZXIpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZU5PUE1vZGlmaWVyKGludGVnZXJOT1BNb2RpZmllcik7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlRmVhdHVyZU1vZGlmaWVyKGludGVnZXJOT1BNb2RpZmllcik7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBkZWZhdWx0Q2FzZSh0aGVFT2JqZWN0KTsKKwkJCQlyZXR1cm4gcmVzdWx0OworCQkJfQorCQkJY2FzZSBNb2RpZmllclBhY2thZ2UuSU5URUdFUl9SQU5HRV9NT0RJRklFUjogeworCQkJCUludGVnZXJSYW5nZU1vZGlmaWVyIGludGVnZXJSYW5nZU1vZGlmaWVyID0gKEludGVnZXJSYW5nZU1vZGlmaWVyKXRoZUVPYmplY3Q7CisJCQkJVDEgcmVzdWx0ID0gY2FzZUludGVnZXJSYW5nZU1vZGlmaWVyKGludGVnZXJSYW5nZU1vZGlmaWVyKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VSYW5nZU1vZGlmaWVyKGludGVnZXJSYW5nZU1vZGlmaWVyKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VGZWF0dXJlTW9kaWZpZXIoaW50ZWdlclJhbmdlTW9kaWZpZXIpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gZGVmYXVsdENhc2UodGhlRU9iamVjdCk7CisJCQkJcmV0dXJuIHJlc3VsdDsKKwkJCX0KKwkJCWNhc2UgTW9kaWZpZXJQYWNrYWdlLklOVEVHRVJfU0VRVUVOQ0VfTU9ESUZJRVI6IHsKKwkJCQlJbnRlZ2VyU2VxdWVuY2VNb2RpZmllciBpbnRlZ2VyU2VxdWVuY2VNb2RpZmllciA9IChJbnRlZ2VyU2VxdWVuY2VNb2RpZmllcil0aGVFT2JqZWN0OworCQkJCVQxIHJlc3VsdCA9IGNhc2VJbnRlZ2VyU2VxdWVuY2VNb2RpZmllcihpbnRlZ2VyU2VxdWVuY2VNb2RpZmllcik7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlU2VxdWVuY2VNb2RpZmllcihpbnRlZ2VyU2VxdWVuY2VNb2RpZmllcik7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlRmVhdHVyZU1vZGlmaWVyKGludGVnZXJTZXF1ZW5jZU1vZGlmaWVyKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGRlZmF1bHRDYXNlKHRoZUVPYmplY3QpOworCQkJCXJldHVybiByZXN1bHQ7CisJCQl9CisJCQljYXNlIE1vZGlmaWVyUGFja2FnZS5MT05HX05PUF9NT0RJRklFUjogeworCQkJCUxvbmdOT1BNb2RpZmllciBsb25nTk9QTW9kaWZpZXIgPSAoTG9uZ05PUE1vZGlmaWVyKXRoZUVPYmplY3Q7CisJCQkJVDEgcmVzdWx0ID0gY2FzZUxvbmdOT1BNb2RpZmllcihsb25nTk9QTW9kaWZpZXIpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZU5PUE1vZGlmaWVyKGxvbmdOT1BNb2RpZmllcik7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlRmVhdHVyZU1vZGlmaWVyKGxvbmdOT1BNb2RpZmllcik7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBkZWZhdWx0Q2FzZSh0aGVFT2JqZWN0KTsKKwkJCQlyZXR1cm4gcmVzdWx0OworCQkJfQorCQkJY2FzZSBNb2RpZmllclBhY2thZ2UuTE9OR19SQU5HRV9NT0RJRklFUjogeworCQkJCUxvbmdSYW5nZU1vZGlmaWVyIGxvbmdSYW5nZU1vZGlmaWVyID0gKExvbmdSYW5nZU1vZGlmaWVyKXRoZUVPYmplY3Q7CisJCQkJVDEgcmVzdWx0ID0gY2FzZUxvbmdSYW5nZU1vZGlmaWVyKGxvbmdSYW5nZU1vZGlmaWVyKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VSYW5nZU1vZGlmaWVyKGxvbmdSYW5nZU1vZGlmaWVyKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VGZWF0dXJlTW9kaWZpZXIobG9uZ1JhbmdlTW9kaWZpZXIpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gZGVmYXVsdENhc2UodGhlRU9iamVjdCk7CisJCQkJcmV0dXJuIHJlc3VsdDsKKwkJCX0KKwkJCWNhc2UgTW9kaWZpZXJQYWNrYWdlLkxPTkdfU0VRVUVOQ0VfTU9ESUZJRVI6IHsKKwkJCQlMb25nU2VxdWVuY2VNb2RpZmllciBsb25nU2VxdWVuY2VNb2RpZmllciA9IChMb25nU2VxdWVuY2VNb2RpZmllcil0aGVFT2JqZWN0OworCQkJCVQxIHJlc3VsdCA9IGNhc2VMb25nU2VxdWVuY2VNb2RpZmllcihsb25nU2VxdWVuY2VNb2RpZmllcik7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlU2VxdWVuY2VNb2RpZmllcihsb25nU2VxdWVuY2VNb2RpZmllcik7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlRmVhdHVyZU1vZGlmaWVyKGxvbmdTZXF1ZW5jZU1vZGlmaWVyKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGRlZmF1bHRDYXNlKHRoZUVPYmplY3QpOworCQkJCXJldHVybiByZXN1bHQ7CisJCQl9CisJCQljYXNlIE1vZGlmaWVyUGFja2FnZS5NT0RJRklFUjogeworCQkJCU1vZGlmaWVyIG1vZGlmaWVyID0gKE1vZGlmaWVyKXRoZUVPYmplY3Q7CisJCQkJVDEgcmVzdWx0ID0gY2FzZU1vZGlmaWVyKG1vZGlmaWVyKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VEZWNvcmF0b3IobW9kaWZpZXIpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZUlkZW50aWZpYWJsZShtb2RpZmllcik7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlQ29tcGFyYWJsZShtb2RpZmllcik7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlU2FuaXR5Q2hlY2tlcihtb2RpZmllcik7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBkZWZhdWx0Q2FzZSh0aGVFT2JqZWN0KTsKKwkJCQlyZXR1cm4gcmVzdWx0OworCQkJfQorCQkJY2FzZSBNb2RpZmllclBhY2thZ2UuTk9QX01PRElGSUVSOiB7CisJCQkJTk9QTW9kaWZpZXIgbm9wTW9kaWZpZXIgPSAoTk9QTW9kaWZpZXIpdGhlRU9iamVjdDsKKwkJCQlUMSByZXN1bHQgPSBjYXNlTk9QTW9kaWZpZXIobm9wTW9kaWZpZXIpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZUZlYXR1cmVNb2RpZmllcihub3BNb2RpZmllcik7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBkZWZhdWx0Q2FzZSh0aGVFT2JqZWN0KTsKKwkJCQlyZXR1cm4gcmVzdWx0OworCQkJfQorCQkJY2FzZSBNb2RpZmllclBhY2thZ2UuUkFOR0VfTU9ESUZJRVI6IHsKKwkJCQlSYW5nZU1vZGlmaWVyIHJhbmdlTW9kaWZpZXIgPSAoUmFuZ2VNb2RpZmllcil0aGVFT2JqZWN0OworCQkJCVQxIHJlc3VsdCA9IGNhc2VSYW5nZU1vZGlmaWVyKHJhbmdlTW9kaWZpZXIpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZUZlYXR1cmVNb2RpZmllcihyYW5nZU1vZGlmaWVyKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGRlZmF1bHRDYXNlKHRoZUVPYmplY3QpOworCQkJCXJldHVybiByZXN1bHQ7CisJCQl9CisJCQljYXNlIE1vZGlmaWVyUGFja2FnZS5TVEVNX1RJTUVfTk9QX01PRElGSUVSOiB7CisJCQkJU1RFTVRpbWVOT1BNb2RpZmllciBzdGVtVGltZU5PUE1vZGlmaWVyID0gKFNURU1UaW1lTk9QTW9kaWZpZXIpdGhlRU9iamVjdDsKKwkJCQlUMSByZXN1bHQgPSBjYXNlU1RFTVRpbWVOT1BNb2RpZmllcihzdGVtVGltZU5PUE1vZGlmaWVyKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VOT1BNb2RpZmllcihzdGVtVGltZU5PUE1vZGlmaWVyKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VGZWF0dXJlTW9kaWZpZXIoc3RlbVRpbWVOT1BNb2RpZmllcik7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBkZWZhdWx0Q2FzZSh0aGVFT2JqZWN0KTsKKwkJCQlyZXR1cm4gcmVzdWx0OworCQkJfQorCQkJY2FzZSBNb2RpZmllclBhY2thZ2UuU1RFTV9USU1FX1JBTkdFX01PRElGSUVSOiB7CisJCQkJU1RFTVRpbWVSYW5nZU1vZGlmaWVyIHN0ZW1UaW1lUmFuZ2VNb2RpZmllciA9IChTVEVNVGltZVJhbmdlTW9kaWZpZXIpdGhlRU9iamVjdDsKKwkJCQlUMSByZXN1bHQgPSBjYXNlU1RFTVRpbWVSYW5nZU1vZGlmaWVyKHN0ZW1UaW1lUmFuZ2VNb2RpZmllcik7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlUmFuZ2VNb2RpZmllcihzdGVtVGltZVJhbmdlTW9kaWZpZXIpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZUZlYXR1cmVNb2RpZmllcihzdGVtVGltZVJhbmdlTW9kaWZpZXIpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gZGVmYXVsdENhc2UodGhlRU9iamVjdCk7CisJCQkJcmV0dXJuIHJlc3VsdDsKKwkJCX0KKwkJCWNhc2UgTW9kaWZpZXJQYWNrYWdlLlNURU1fVElNRV9TRVFVRU5DRV9NT0RJRklFUjogeworCQkJCVNURU1UaW1lU2VxdWVuY2VNb2RpZmllciBzdGVtVGltZVNlcXVlbmNlTW9kaWZpZXIgPSAoU1RFTVRpbWVTZXF1ZW5jZU1vZGlmaWVyKXRoZUVPYmplY3Q7CisJCQkJVDEgcmVzdWx0ID0gY2FzZVNURU1UaW1lU2VxdWVuY2VNb2RpZmllcihzdGVtVGltZVNlcXVlbmNlTW9kaWZpZXIpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZVNlcXVlbmNlTW9kaWZpZXIoc3RlbVRpbWVTZXF1ZW5jZU1vZGlmaWVyKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VGZWF0dXJlTW9kaWZpZXIoc3RlbVRpbWVTZXF1ZW5jZU1vZGlmaWVyKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGRlZmF1bHRDYXNlKHRoZUVPYmplY3QpOworCQkJCXJldHVybiByZXN1bHQ7CisJCQl9CisJCQljYXNlIE1vZGlmaWVyUGFja2FnZS5TRVFVRU5DRV9NT0RJRklFUjogeworCQkJCVNlcXVlbmNlTW9kaWZpZXIgc2VxdWVuY2VNb2RpZmllciA9IChTZXF1ZW5jZU1vZGlmaWVyKXRoZUVPYmplY3Q7CisJCQkJVDEgcmVzdWx0ID0gY2FzZVNlcXVlbmNlTW9kaWZpZXIoc2VxdWVuY2VNb2RpZmllcik7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlRmVhdHVyZU1vZGlmaWVyKHNlcXVlbmNlTW9kaWZpZXIpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gZGVmYXVsdENhc2UodGhlRU9iamVjdCk7CisJCQkJcmV0dXJuIHJlc3VsdDsKKwkJCX0KKwkJCWNhc2UgTW9kaWZpZXJQYWNrYWdlLlNUUklOR19OT1BfTU9ESUZJRVI6IHsKKwkJCQlTdHJpbmdOT1BNb2RpZmllciBzdHJpbmdOT1BNb2RpZmllciA9IChTdHJpbmdOT1BNb2RpZmllcil0aGVFT2JqZWN0OworCQkJCVQxIHJlc3VsdCA9IGNhc2VTdHJpbmdOT1BNb2RpZmllcihzdHJpbmdOT1BNb2RpZmllcik7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlTk9QTW9kaWZpZXIoc3RyaW5nTk9QTW9kaWZpZXIpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZUZlYXR1cmVNb2RpZmllcihzdHJpbmdOT1BNb2RpZmllcik7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBkZWZhdWx0Q2FzZSh0aGVFT2JqZWN0KTsKKwkJCQlyZXR1cm4gcmVzdWx0OworCQkJfQorCQkJY2FzZSBNb2RpZmllclBhY2thZ2UuU1RSSU5HX1NFUVVFTkNFX01PRElGSUVSOiB7CisJCQkJU3RyaW5nU2VxdWVuY2VNb2RpZmllciBzdHJpbmdTZXF1ZW5jZU1vZGlmaWVyID0gKFN0cmluZ1NlcXVlbmNlTW9kaWZpZXIpdGhlRU9iamVjdDsKKwkJCQlUMSByZXN1bHQgPSBjYXNlU3RyaW5nU2VxdWVuY2VNb2RpZmllcihzdHJpbmdTZXF1ZW5jZU1vZGlmaWVyKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VTZXF1ZW5jZU1vZGlmaWVyKHN0cmluZ1NlcXVlbmNlTW9kaWZpZXIpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZUZlYXR1cmVNb2RpZmllcihzdHJpbmdTZXF1ZW5jZU1vZGlmaWVyKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGRlZmF1bHRDYXNlKHRoZUVPYmplY3QpOworCQkJCXJldHVybiByZXN1bHQ7CisJCQl9CisJCQljYXNlIE1vZGlmaWVyUGFja2FnZS5NT0RJRklBQkxFOiB7CisJCQkJTW9kaWZpYWJsZSBtb2RpZmlhYmxlID0gKE1vZGlmaWFibGUpdGhlRU9iamVjdDsKKwkJCQlUMSByZXN1bHQgPSBjYXNlTW9kaWZpYWJsZShtb2RpZmlhYmxlKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGRlZmF1bHRDYXNlKHRoZUVPYmplY3QpOworCQkJCXJldHVybiByZXN1bHQ7CisJCQl9CisJCQljYXNlIE1vZGlmaWVyUGFja2FnZS5TSU5HTEVfVkFMVUVfTU9ESUZJRVI6IHsKKwkJCQlTaW5nbGVWYWx1ZU1vZGlmaWVyIHNpbmdsZVZhbHVlTW9kaWZpZXIgPSAoU2luZ2xlVmFsdWVNb2RpZmllcil0aGVFT2JqZWN0OworCQkJCVQxIHJlc3VsdCA9IGNhc2VTaW5nbGVWYWx1ZU1vZGlmaWVyKHNpbmdsZVZhbHVlTW9kaWZpZXIpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZUZlYXR1cmVNb2RpZmllcihzaW5nbGVWYWx1ZU1vZGlmaWVyKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGRlZmF1bHRDYXNlKHRoZUVPYmplY3QpOworCQkJCXJldHVybiByZXN1bHQ7CisJCQl9CisJCQljYXNlIE1vZGlmaWVyUGFja2FnZS5ET1VCTEVfTU9ESUZJRVI6IHsKKwkJCQlEb3VibGVNb2RpZmllciBkb3VibGVNb2RpZmllciA9IChEb3VibGVNb2RpZmllcil0aGVFT2JqZWN0OworCQkJCVQxIHJlc3VsdCA9IGNhc2VEb3VibGVNb2RpZmllcihkb3VibGVNb2RpZmllcik7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlU2luZ2xlVmFsdWVNb2RpZmllcihkb3VibGVNb2RpZmllcik7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlRmVhdHVyZU1vZGlmaWVyKGRvdWJsZU1vZGlmaWVyKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGRlZmF1bHRDYXNlKHRoZUVPYmplY3QpOworCQkJCXJldHVybiByZXN1bHQ7CisJCQl9CisJCQljYXNlIE1vZGlmaWVyUGFja2FnZS5JTlRFR0VSX01PRElGSUVSOiB7CisJCQkJSW50ZWdlck1vZGlmaWVyIGludGVnZXJNb2RpZmllciA9IChJbnRlZ2VyTW9kaWZpZXIpdGhlRU9iamVjdDsKKwkJCQlUMSByZXN1bHQgPSBjYXNlSW50ZWdlck1vZGlmaWVyKGludGVnZXJNb2RpZmllcik7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlU2luZ2xlVmFsdWVNb2RpZmllcihpbnRlZ2VyTW9kaWZpZXIpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZUZlYXR1cmVNb2RpZmllcihpbnRlZ2VyTW9kaWZpZXIpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gZGVmYXVsdENhc2UodGhlRU9iamVjdCk7CisJCQkJcmV0dXJuIHJlc3VsdDsKKwkJCX0KKwkJCWNhc2UgTW9kaWZpZXJQYWNrYWdlLkxPTkdfTU9ESUZJRVI6IHsKKwkJCQlMb25nTW9kaWZpZXIgbG9uZ01vZGlmaWVyID0gKExvbmdNb2RpZmllcil0aGVFT2JqZWN0OworCQkJCVQxIHJlc3VsdCA9IGNhc2VMb25nTW9kaWZpZXIobG9uZ01vZGlmaWVyKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VTaW5nbGVWYWx1ZU1vZGlmaWVyKGxvbmdNb2RpZmllcik7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlRmVhdHVyZU1vZGlmaWVyKGxvbmdNb2RpZmllcik7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBkZWZhdWx0Q2FzZSh0aGVFT2JqZWN0KTsKKwkJCQlyZXR1cm4gcmVzdWx0OworCQkJfQorCQkJY2FzZSBNb2RpZmllclBhY2thZ2UuU1RFTV9USU1FX01PRElGSUVSOiB7CisJCQkJU1RFTVRpbWVNb2RpZmllciBzdGVtVGltZU1vZGlmaWVyID0gKFNURU1UaW1lTW9kaWZpZXIpdGhlRU9iamVjdDsKKwkJCQlUMSByZXN1bHQgPSBjYXNlU1RFTVRpbWVNb2RpZmllcihzdGVtVGltZU1vZGlmaWVyKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VTaW5nbGVWYWx1ZU1vZGlmaWVyKHN0ZW1UaW1lTW9kaWZpZXIpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZUZlYXR1cmVNb2RpZmllcihzdGVtVGltZU1vZGlmaWVyKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGRlZmF1bHRDYXNlKHRoZUVPYmplY3QpOworCQkJCXJldHVybiByZXN1bHQ7CisJCQl9CisJCQlkZWZhdWx0OiByZXR1cm4gZGVmYXVsdENhc2UodGhlRU9iamVjdCk7CisJCX0KKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5Eb3VibGUgTk9QIE1vZGlmaWVyPC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7CisJICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCisJICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+RG91YmxlIE5PUCBNb2RpZmllcjwvZW0+Jy4KKwkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFQxIGNhc2VEb3VibGVOT1BNb2RpZmllcihEb3VibGVOT1BNb2RpZmllciBvYmplY3QpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+RG91YmxlIFJhbmdlIE1vZGlmaWVyPC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7CisJICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCisJICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+RG91YmxlIFJhbmdlIE1vZGlmaWVyPC9lbT4nLgorCSAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVDEgY2FzZURvdWJsZVJhbmdlTW9kaWZpZXIoRG91YmxlUmFuZ2VNb2RpZmllciBvYmplY3QpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+RG91YmxlIFNlcXVlbmNlIE1vZGlmaWVyPC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7CisJICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCisJICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+RG91YmxlIFNlcXVlbmNlIE1vZGlmaWVyPC9lbT4nLgorCSAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVDEgY2FzZURvdWJsZVNlcXVlbmNlTW9kaWZpZXIoRG91YmxlU2VxdWVuY2VNb2RpZmllciBvYmplY3QpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+RmVhdHVyZSBNb2RpZmllcjwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOworCSAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgorCSAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkZlYXR1cmUgTW9kaWZpZXI8L2VtPicuCisJICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBUMSBjYXNlRmVhdHVyZU1vZGlmaWVyKEZlYXR1cmVNb2RpZmllciBvYmplY3QpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+SW50ZWdlciBOT1AgTW9kaWZpZXI8L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsKKwkgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KKwkgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5JbnRlZ2VyIE5PUCBNb2RpZmllcjwvZW0+Jy4KKwkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFQxIGNhc2VJbnRlZ2VyTk9QTW9kaWZpZXIoSW50ZWdlck5PUE1vZGlmaWVyIG9iamVjdCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5JbnRlZ2VyIFJhbmdlIE1vZGlmaWVyPC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7CisJICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCisJICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+SW50ZWdlciBSYW5nZSBNb2RpZmllcjwvZW0+Jy4KKwkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFQxIGNhc2VJbnRlZ2VyUmFuZ2VNb2RpZmllcihJbnRlZ2VyUmFuZ2VNb2RpZmllciBvYmplY3QpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+SW50ZWdlciBTZXF1ZW5jZSBNb2RpZmllcjwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOworCSAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgorCSAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkludGVnZXIgU2VxdWVuY2UgTW9kaWZpZXI8L2VtPicuCisJICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBUMSBjYXNlSW50ZWdlclNlcXVlbmNlTW9kaWZpZXIoSW50ZWdlclNlcXVlbmNlTW9kaWZpZXIgb2JqZWN0KSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkxvbmcgTk9QIE1vZGlmaWVyPC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7CisJICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCisJICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+TG9uZyBOT1AgTW9kaWZpZXI8L2VtPicuCisJICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBUMSBjYXNlTG9uZ05PUE1vZGlmaWVyKExvbmdOT1BNb2RpZmllciBvYmplY3QpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+TG9uZyBSYW5nZSBNb2RpZmllcjwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOworCSAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgorCSAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkxvbmcgUmFuZ2UgTW9kaWZpZXI8L2VtPicuCisJICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBUMSBjYXNlTG9uZ1JhbmdlTW9kaWZpZXIoTG9uZ1JhbmdlTW9kaWZpZXIgb2JqZWN0KSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkxvbmcgU2VxdWVuY2UgTW9kaWZpZXI8L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsKKwkgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KKwkgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5Mb25nIFNlcXVlbmNlIE1vZGlmaWVyPC9lbT4nLgorCSAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVDEgY2FzZUxvbmdTZXF1ZW5jZU1vZGlmaWVyKExvbmdTZXF1ZW5jZU1vZGlmaWVyIG9iamVjdCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5Nb2RpZmllcjwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOworCSAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgorCSAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPk1vZGlmaWVyPC9lbT4nLgorCSAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVDEgY2FzZU1vZGlmaWVyKE1vZGlmaWVyIG9iamVjdCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5OT1AgTW9kaWZpZXI8L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsKKwkgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KKwkgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5OT1AgTW9kaWZpZXI8L2VtPicuCisJICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBUMSBjYXNlTk9QTW9kaWZpZXIoTk9QTW9kaWZpZXIgb2JqZWN0KSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPlJhbmdlIE1vZGlmaWVyPC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7CisJICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCisJICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+UmFuZ2UgTW9kaWZpZXI8L2VtPicuCisJICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBUMSBjYXNlUmFuZ2VNb2RpZmllcihSYW5nZU1vZGlmaWVyIG9iamVjdCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5TVEVNIFRpbWUgTk9QIE1vZGlmaWVyPC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7CisJICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCisJICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+U1RFTSBUaW1lIE5PUCBNb2RpZmllcjwvZW0+Jy4KKwkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFQxIGNhc2VTVEVNVGltZU5PUE1vZGlmaWVyKFNURU1UaW1lTk9QTW9kaWZpZXIgb2JqZWN0KSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPlNURU0gVGltZSBSYW5nZSBNb2RpZmllcjwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOworCSAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgorCSAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPlNURU0gVGltZSBSYW5nZSBNb2RpZmllcjwvZW0+Jy4KKwkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFQxIGNhc2VTVEVNVGltZVJhbmdlTW9kaWZpZXIoU1RFTVRpbWVSYW5nZU1vZGlmaWVyIG9iamVjdCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5TVEVNIFRpbWUgU2VxdWVuY2UgTW9kaWZpZXI8L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsKKwkgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KKwkgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5TVEVNIFRpbWUgU2VxdWVuY2UgTW9kaWZpZXI8L2VtPicuCisJICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBUMSBjYXNlU1RFTVRpbWVTZXF1ZW5jZU1vZGlmaWVyKFNURU1UaW1lU2VxdWVuY2VNb2RpZmllciBvYmplY3QpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+U2VxdWVuY2UgTW9kaWZpZXI8L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsKKwkgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KKwkgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5TZXF1ZW5jZSBNb2RpZmllcjwvZW0+Jy4KKwkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFQxIGNhc2VTZXF1ZW5jZU1vZGlmaWVyKFNlcXVlbmNlTW9kaWZpZXIgb2JqZWN0KSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPlN0cmluZyBOT1AgTW9kaWZpZXI8L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsKKwkgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KKwkgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5TdHJpbmcgTk9QIE1vZGlmaWVyPC9lbT4nLgorCSAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVDEgY2FzZVN0cmluZ05PUE1vZGlmaWVyKFN0cmluZ05PUE1vZGlmaWVyIG9iamVjdCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5TdHJpbmcgU2VxdWVuY2UgTW9kaWZpZXI8L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsKKwkgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KKwkgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5TdHJpbmcgU2VxdWVuY2UgTW9kaWZpZXI8L2VtPicuCisJICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBUMSBjYXNlU3RyaW5nU2VxdWVuY2VNb2RpZmllcihTdHJpbmdTZXF1ZW5jZU1vZGlmaWVyIG9iamVjdCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5Nb2RpZmlhYmxlPC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7CisJICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCisJICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+TW9kaWZpYWJsZTwvZW0+Jy4KKwkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFQxIGNhc2VNb2RpZmlhYmxlKE1vZGlmaWFibGUgb2JqZWN0KSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPlNpbmdsZSBWYWx1ZSBNb2RpZmllcjwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOworCSAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgorCSAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPlNpbmdsZSBWYWx1ZSBNb2RpZmllcjwvZW0+Jy4KKwkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFQxIGNhc2VTaW5nbGVWYWx1ZU1vZGlmaWVyKFNpbmdsZVZhbHVlTW9kaWZpZXIgb2JqZWN0KSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkRvdWJsZSBNb2RpZmllcjwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOworCSAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgorCSAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkRvdWJsZSBNb2RpZmllcjwvZW0+Jy4KKwkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFQxIGNhc2VEb3VibGVNb2RpZmllcihEb3VibGVNb2RpZmllciBvYmplY3QpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+SW50ZWdlciBNb2RpZmllcjwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOworCSAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgorCSAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkludGVnZXIgTW9kaWZpZXI8L2VtPicuCisJICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBUMSBjYXNlSW50ZWdlck1vZGlmaWVyKEludGVnZXJNb2RpZmllciBvYmplY3QpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+TG9uZyBNb2RpZmllcjwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOworCSAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgorCSAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkxvbmcgTW9kaWZpZXI8L2VtPicuCisJICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBUMSBjYXNlTG9uZ01vZGlmaWVyKExvbmdNb2RpZmllciBvYmplY3QpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+U1RFTSBUaW1lIE1vZGlmaWVyPC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7CisJICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCisJICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+U1RFTSBUaW1lIE1vZGlmaWVyPC9lbT4nLgorCSAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVDEgY2FzZVNURU1UaW1lTW9kaWZpZXIoU1RFTVRpbWVNb2RpZmllciBvYmplY3QpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+Q29tcGFyYWJsZTwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOworCSAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgorCSAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkNvbXBhcmFibGU8L2VtPicuCisJICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyA8VD4gVDEgY2FzZUNvbXBhcmFibGUoQ29tcGFyYWJsZTxUPiBvYmplY3QpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+U2FuaXR5IENoZWNrZXI8L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsKKwkgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KKwkgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5TYW5pdHkgQ2hlY2tlcjwvZW0+Jy4KKwkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFQxIGNhc2VTYW5pdHlDaGVja2VyKFNhbml0eUNoZWNrZXIgb2JqZWN0KSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPklkZW50aWZpYWJsZTwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOworCSAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgorCSAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPklkZW50aWZpYWJsZTwvZW0+Jy4KKwkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFQxIGNhc2VJZGVudGlmaWFibGUoSWRlbnRpZmlhYmxlIG9iamVjdCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5EZWNvcmF0b3I8L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsKKwkgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KKwkgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5EZWNvcmF0b3I8L2VtPicuCisJICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBUMSBjYXNlRGVjb3JhdG9yKERlY29yYXRvciBvYmplY3QpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+RU9iamVjdDwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOworCSAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLCBidXQgdGhpcyBpcyB0aGUgbGFzdCBjYXNlIGFueXdheS4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KKwkgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5FT2JqZWN0PC9lbT4nLgorCSAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVDEgZGVmYXVsdENhc2UoRU9iamVjdCBvYmplY3QpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCit9IC8vTW9kaWZpZXJTd2l0Y2gKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvcHJlZGljYXRlL0FuZC5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9wcmVkaWNhdGUvQW5kLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTRhMjc4MAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvcHJlZGljYXRlL0FuZC5qYXZhCkBAIC0wLDAgKzEsMjYgQEAKKy8vIEFuZC5qYXZhCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGU7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioKKyAqIDxjb2RlPkFuZDwvY29kZT4gaXMgYSB7QGxpbmsgTmFyeUJvb2xlYW5PcGVyYXRvcn0gd2hvc2UgdmFsdWUgaXMKKyAqIDxjb2RlPnRydWU8L2NvZGU+IG9ubHkgaWYgdGhlIHZhbHVlcyBvZiBhbGwgb2YgaXRzIG9wZXJhbmRzIGFyZQorICogPGNvZGU+dHJ1ZTwvY29kZT4uCisgKiAKKyAqIEBzZWUgT3IKKyAqIEBzZWUgTm90CisgKiBAbW9kZWwKKyAqLworcHVibGljIGludGVyZmFjZSBBbmQgZXh0ZW5kcyBOYXJ5Qm9vbGVhbk9wZXJhdG9yIHsKKwkvLyBOb3RoaW5nCit9IC8vIEFuZApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvcHJlZGljYXRlL0Jvb2xlYW5FeHByZXNzaW9uLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3ByZWRpY2F0ZS9Cb29sZWFuRXhwcmVzc2lvbi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM5MjBiZTQKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3ByZWRpY2F0ZS9Cb29sZWFuRXhwcmVzc2lvbi5qYXZhCkBAIC0wLDAgKzEsMjUgQEAKKy8vIEJvb2xlYW5FeHByZXNzaW9uLmphdmEKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKgorICogQSA8Y29kZT5Cb29sZWFuRXhwcmVzc2lvbjwvY29kZT4gaXMgYSB7QGxpbmsgUHJlZGljYXRlfSB3aG9zZSB2YWx1ZSBpcyB0aGUKKyAqIHJlc3VsdCBvZiBldmFsdWF0aW5nIGEgbG9naWNhbCAoYm9vbGVhbikgZXhwcmVzc2lvbi4KKyAqIAorICogQHNlZSBUZXN0CisgKiBAc2VlIFByZWRpY2F0ZVJlZmVyZW5jZQorICogQG1vZGVsIGFic3RyYWN0PSJ0cnVlIgorICovCitwdWJsaWMgaW50ZXJmYWNlIEJvb2xlYW5FeHByZXNzaW9uIGV4dGVuZHMgUHJlZGljYXRlIHsKKwkvLyBOb3RoaW5nCit9IC8vIEJvb2xlYW5FeHByZXNzaW9uClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9wcmVkaWNhdGUvQm9vbGVhbk9wZXJhdG9yLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3ByZWRpY2F0ZS9Cb29sZWFuT3BlcmF0b3IuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43Njk0MjEwCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9wcmVkaWNhdGUvQm9vbGVhbk9wZXJhdG9yLmphdmEKQEAgLTAsMCArMSwyNSBAQAorLy8gQm9vbGVhbk9wZXJhdG9yLmphdmEKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKgorICogQSA8Y29kZT5Cb29sZWFuT3BlcmF0b3I8L2NvZGU+IGlzIGEge0BsaW5rIEJvb2xlYW5FeHByZXNzaW9ufSB3aG9zZSB2YWx1ZSBpcworICogdGhlIHJlc3VsdCBvZiBldmFsdWF0aW5nIGEgYm9vbGVhbiBvcGVyYXRvci4KKyAqIAorICogQHNlZSBVbmFyeUJvb2xlYW5PcGVyYXRvcgorICogQHNlZSBOYXJ5Qm9vbGVhbk9wZXJhdG9yCisgKiBAbW9kZWwgYWJzdHJhY3Q9InRydWUiCisgKi8KK3B1YmxpYyBpbnRlcmZhY2UgQm9vbGVhbk9wZXJhdG9yIGV4dGVuZHMgQm9vbGVhbkV4cHJlc3Npb24geworCS8vIE5vdGhpbmcKK30gLy8gQm9vbGVhbk9wZXJhdG9yClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9wcmVkaWNhdGUvRWxhcHNlZFRpbWVUZXN0LmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3ByZWRpY2F0ZS9FbGFwc2VkVGltZVRlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MTJjZmY3Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9wcmVkaWNhdGUvRWxhcHNlZFRpbWVUZXN0LmphdmEKQEAgLTAsMCArMSw4MyBAQAorLy8gRWxhcHNlZFRpbWVUZXN0LmphdmEKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuU1RFTVRpbWU7CisKKy8qKgorICogQSA8Y29kZT5FbGFwc2VkVGltZVRlc3Q8L2NvZGU+IGlzIGEge0BsaW5rIFRpbWVUZXN0fSB0aGF0IHJldHVybnMgYSBib29sZWFuCisgKiB2YWx1ZSBkZXBlbmRpbmcgdXBvbiB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIHRoZSBmaXJzdCB0aW1lIHZhbHVlIHBhc3NlZCB0bworICoge0BsaW5rICNldmFsdWF0ZShvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuU1RFTVRpbWUsIGxvbmcsIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5EZWNvcmF0b3IpfQorICogYW5kIHN1YnNlcXVlbnQgdmFsdWVzLgorICogCisgKiBAbW9kZWwKKyAqLworcHVibGljIGludGVyZmFjZSBFbGFwc2VkVGltZVRlc3QgZXh0ZW5kcyBUaW1lVGVzdCB7CisKKwkvKioKKwkgKiBAcmV0dXJuIHRoZSB0aW1lIHZhbHVlIHVzZWQgZm9yIGNvbXBhcmlzb24gcHVycG9zZXMuCisJICogQG1vZGVsIGNvbnRhaW5tZW50PSJ0cnVlIgorCSAqLworCVNURU1UaW1lIGdldFJlZmVyZW5jZVRpbWUoKTsKKworCS8qKgorCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUuRWxhcHNlZFRpbWVUZXN0I2dldFJlZmVyZW5jZVRpbWUgPGVtPlJlZmVyZW5jZSBUaW1lPC9lbT59JyBjb250YWlubWVudCByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5SZWZlcmVuY2UgVGltZTwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UuCisJICogQHNlZSAjZ2V0UmVmZXJlbmNlVGltZSgpCisJICogQGdlbmVyYXRlZAorCSAqLworCXZvaWQgc2V0UmVmZXJlbmNlVGltZShTVEVNVGltZSB2YWx1ZSk7CisKKwkvKioKKwkgKiBAcmV0dXJuIDxjb2RlPnRydWU8L2NvZGU+IGlmIHRoZSByZWZlcmVuY2UgdGltZSBoYXMgYmVlbiBzZXQKKwkgKiBAbW9kZWwgZGVmYXVsdD0iZmFsc2UiCisJICovCisJYm9vbGVhbiBpc1JlZmVyZW5jZVRpbWVWYWxpZCgpOworCisJLyoqCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZS5FbGFwc2VkVGltZVRlc3QjaXNSZWZlcmVuY2VUaW1lVmFsaWQgPGVtPlJlZmVyZW5jZSBUaW1lIFZhbGlkPC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5SZWZlcmVuY2UgVGltZSBWYWxpZDwvZW0+JyBhdHRyaWJ1dGUuCisJICogQHNlZSAjaXNSZWZlcmVuY2VUaW1lVmFsaWQoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwl2b2lkIHNldFJlZmVyZW5jZVRpbWVWYWxpZChib29sZWFuIHZhbHVlKTsKKworCS8qKgorCSAqIEByZXR1cm4gdGhlIG51bWJlciBvZiBtaWxsaXNlY29uZHMgb2YgZWxhcHNlZCB0aW1lIHRvIGJlIHVzZWQgZm9yCisJICogICAgICAgICBjb21wYXJpc29uIGJldHdlZW4gdGhlIHJlZmVyZW5jZSB0aW1lIGFuZCB0aGUgY3VycmVudCB0aW1lLgorCSAqIEBtb2RlbCB0cmFuc2llbnQ9InRydWUiIGNoYW5nZWFibGU9ImZhbHNlIgorCSAqLworCWxvbmcgZ2V0RWxhcHNlZE1pbGxpc2Vjb25kcygpOworCisJLyoqCisJICogQHJldHVybiB0aGUgbnVtYmVyIG9mIGRheXMgb2YgZWxhcHNlZCB0aW1lIHRvIGJlIHVzZWQgZm9yIHRoZSBjb21wYXJpc29uCisJICogICAgICAgICBiZXR3ZWVuIHRoZSByZWZlcmVuY2UgdGltZSBhbmQgdGhlIGN1cnJlbnQgdGltZS4KKwkgKiBAbW9kZWwgZGVmYXVsdD0iMCIKKwkgKi8KKwlpbnQgZ2V0TnVtYmVyb2ZEYXlzKCk7CisKKwkvKioKKwkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlLkVsYXBzZWRUaW1lVGVzdCNnZXROdW1iZXJvZkRheXMgPGVtPk51bWJlcm9mIERheXM8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPk51bWJlcm9mIERheXM8L2VtPicgYXR0cmlidXRlLgorCSAqIEBzZWUgI2dldE51bWJlcm9mRGF5cygpCisJICogQGdlbmVyYXRlZAorCSAqLworCXZvaWQgc2V0TnVtYmVyb2ZEYXlzKGludCB2YWx1ZSk7CisKK30gLy8gRWxhcHNlZFRpbWVUZXN0ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9wcmVkaWNhdGUvRmFsc2UuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvcHJlZGljYXRlL0ZhbHNlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTQ4OWY0ZAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvcHJlZGljYXRlL0ZhbHNlLmphdmEKQEAgLTAsMCArMSwyMyBAQAorLy8gRmFsc2UuamF2YQorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqCisgKiA8Y29kZT5GYWxzZTwvY29kZT4gaXMgYSB7QGxpbmsgVGVzdH0gd2hvc2UgdmFsdWUgaXMgYWx3YXlzIDxjb2RlPmZhbHNlPC9jb2RlPi4KKyAqIAorICogQHNlZSBUcnVlCisgKiBAbW9kZWwKKyAqLworcHVibGljIGludGVyZmFjZSBGYWxzZSBleHRlbmRzIFRlc3QgeworCS8vIE5vdGhpbmcKK30gLy8gRmFsc2UKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3ByZWRpY2F0ZS9JZGVudGlmaWFibGVQcmVkaWNhdGUuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvcHJlZGljYXRlL0lkZW50aWZpYWJsZVByZWRpY2F0ZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY2ZWU1YWUKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3ByZWRpY2F0ZS9JZGVudGlmaWFibGVQcmVkaWNhdGUuamF2YQpAQCAtMCwwICsxLDMxIEBACisvLyBJZGVudGlmaWFibGVQcmVkaWNhdGUuamF2YQorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5VUkk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5JZGVudGlmaWFibGU7CisKKy8qKgorICogQSA8Y29kZT5JZGVudGlmaWFibGVQcmVkaWNhdGU8L2NvZGU+IHJlcHJlc2VudHMgYSB0ZXN0YWJsZSBjb25kaXRpb24gdGhhdCBpcworICogSWRlbnRpZmlhYmxlLgorICogCisgKiBAbW9kZWwgYWJzdHJhY3Q9InRydWUiCisgKi8KK3B1YmxpYyBpbnRlcmZhY2UgSWRlbnRpZmlhYmxlUHJlZGljYXRlIGV4dGVuZHMgSWRlbnRpZmlhYmxlLCBQcmVkaWNhdGUgeworCQorCS8qKgorCSAqIFRoaXMgaXMgdGhlIHNlZ21lbnQgb2YgdGhlIHR5cGUge0BsaW5rIFVSSX0gdGhhdCBwcmVmaXhlcyBhbGwgb3RoZXIgc2VnbWVudHMgaW4gYQorCSAqIHByZWRpY2F0ZSB7QGxpbmsgVVJJfXMuCisJICovCisJU3RyaW5nIFVSSV9UWVBFX1BSRURJQ0FURV9TRUdNRU5UID0gInByZWRpY2F0ZSI7Cit9IC8vIElkZW50aWZpYWJsZVByZWRpY2F0ZQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvcHJlZGljYXRlL0lkZW50aWZpYWJsZVByZWRpY2F0ZUV4cHJlc3Npb24uamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvcHJlZGljYXRlL0lkZW50aWZpYWJsZVByZWRpY2F0ZUV4cHJlc3Npb24uamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNDgyYjdkCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9wcmVkaWNhdGUvSWRlbnRpZmlhYmxlUHJlZGljYXRlRXhwcmVzc2lvbi5qYXZhCkBAIC0wLDAgKzEsMjQgQEAKKy8vIElkZW50aWZpYWJsZVByZWRpY2F0ZUV4cHJlc3Npb24uamF2YQorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqCisgKiBBbiA8Y29kZT5JZGVudGlmaWFibGVQcmVkaWNhdGVFeHByZXNzaW9uPC9jb2RlPiBpcyBhIFByZWRpY2F0ZUV4cHJlc3Npb24gdGhhdAorICogaXMgSWRlbnRpZmlhYmxlLgorICogCisgKiBAbW9kZWwKKyAqLworcHVibGljIGludGVyZmFjZSBJZGVudGlmaWFibGVQcmVkaWNhdGVFeHByZXNzaW9uIGV4dGVuZHMgSWRlbnRpZmlhYmxlUHJlZGljYXRlLAorCQlQcmVkaWNhdGVFeHByZXNzaW9uIHsKKwkvLyBOb3RoaW5nCit9IC8vIElkZW50aWZpYWJsZVByZWRpY2F0ZUV4cHJlc3Npb24KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3ByZWRpY2F0ZS9JZGVudGlmaWFibGVUZXN0LmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3ByZWRpY2F0ZS9JZGVudGlmaWFibGVUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzBiMTMzYQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvcHJlZGljYXRlL0lkZW50aWZpYWJsZVRlc3QuamF2YQpAQCAtMCwwICsxLDIyIEBACisvLyBJZGVudGlmaWFibGVUZXN0LmphdmEKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKgorICogQSA8Y29kZT5JZGVudGlmaWFibGVUZXN0PGNvZGU+IGlzIGEgPGNvZGU+SWRlbnRpZmlhYmxlUHJlZGljYXRlPC9jb2RlPiByZXByZXNlbnRzIGEgdGVzdGFibGUgY29uZGl0aW9uLgorICogCisgKiBAbW9kZWwgYWJzdHJhY3Q9InRydWUiCisgKi8KK3B1YmxpYyBpbnRlcmZhY2UgSWRlbnRpZmlhYmxlVGVzdCBleHRlbmRzIElkZW50aWZpYWJsZVByZWRpY2F0ZSwgVGVzdCB7CisJLy8gTm90aGluZworfSAvLyBJZGVudGlmaWFibGVUZXN0ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9wcmVkaWNhdGUvTmFyeUJvb2xlYW5PcGVyYXRvci5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9wcmVkaWNhdGUvTmFyeUJvb2xlYW5PcGVyYXRvci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgyNzU4Y2MKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3ByZWRpY2F0ZS9OYXJ5Qm9vbGVhbk9wZXJhdG9yLmphdmEKQEAgLTAsMCArMSwzMSBAQAorLy8gTmFyeUJvb2xlYW5PcGVyYXRvci5qYXZhCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGU7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLkVMaXN0OworCisvKioKKyAqIEEgPGNvZGU+TmFyeUJvb2xlYW5PcGVyYXRvcjwvY29kZT4gaXMgYSB7QGxpbmsgQm9vbGVhbk9wZXJhdG9yfSB3aG9zZSB2YWx1ZQorICogaXMgdGhlIHJlc3VsdCBvZiBldmFsdWF0aW5nIGEgYm9vbGVhbiBvcGVyYXRvciB0aGF0IHRha2VzIG9uZSBvciAodXN1YWxseSkKKyAqIG1vcmUgb3BlcmFuZHMuCisgKiAKKyAqIEBzZWUgVW5hcnlCb29sZWFuT3BlcmF0b3IKKyAqIEBtb2RlbCBhYnN0cmFjdD0idHJ1ZSIKKyAqLworcHVibGljIGludGVyZmFjZSBOYXJ5Qm9vbGVhbk9wZXJhdG9yIGV4dGVuZHMgQm9vbGVhbk9wZXJhdG9yIHsKKwkvKioKKwkgKiBAcmV0dXJuIHRoZSBjb2xsZWN0aW9uIG9mIG9wZXJhbmRzIHRvIHRoaXMgb3BlcmF0b3IKKwkgKiBAbW9kZWwgdHlwZT0iUHJlZGljYXRlIiBjb250YWlubWVudD0idHJ1ZSIKKwkgKi8KKwlFTGlzdDxQcmVkaWNhdGU+IGdldE9wZXJhbmRzKCk7Cit9IC8vIE5hcnlCb29sZWFuT3BlcmF0b3IKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3ByZWRpY2F0ZS9Ob3QuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvcHJlZGljYXRlL05vdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY4NjhjNmMKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3ByZWRpY2F0ZS9Ob3QuamF2YQpAQCAtMCwwICsxLDI2IEBACisvLyBOb3QuamF2YQorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqCisgKiA8Y29kZT5Ob3Q8L2NvZGU+IGlzIGEge0BsaW5rIFVuYXJ5Qm9vbGVhbk9wZXJhdG9yfSB3aG9zZSB2YWx1ZSBpcworICogPGNvZGU+dHJ1ZTwvY29kZT4gaWYgdGhlIHZhbHVlIG9mIGl0cyBvcGVyYW5kIGlzIDxjb2RlPmZhbHNlPC9jb2RlPiwKKyAqIG90aGVyd2lzZSBpdCBpcyA8Y29kZT5mYWxzZTwvY29kZT4uCisgKiAKKyAqIEBzZWUgQW5kCisgKiBAc2VlIE9yCisgKiBAbW9kZWwKKyAqLworcHVibGljIGludGVyZmFjZSBOb3QgZXh0ZW5kcyBVbmFyeUJvb2xlYW5PcGVyYXRvciB7CisJLy8gTm90aGluZworfSAvLyBOb3QKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3ByZWRpY2F0ZS9Pci5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9wcmVkaWNhdGUvT3IuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NjIyNDZiCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9wcmVkaWNhdGUvT3IuamF2YQpAQCAtMCwwICsxLDI1IEBACisvLyBPci5qYXZhCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGU7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioKKyAqIEFuIDxjb2RlPk9yPC9jb2RlPiBpcyBhIHtAbGluayBOYXJ5Qm9vbGVhbk9wZXJhdG9yfSB3aG9zZSB2YWx1ZSBpcworICogPGNvZGU+dHJ1ZTwvY29kZT4gaWYgYW55IG9mIHRoZSB2YWx1ZXMgb2YgaXRzIG9wZXJhbmRzIGFyZSA8Y29kZT50cnVlPC9jb2RlPi4KKyAqIAorICogQHNlZSBBbmQKKyAqIEBzZWUgTm90CisgKiBAbW9kZWwKKyAqLworcHVibGljIGludGVyZmFjZSBPciBleHRlbmRzIE5hcnlCb29sZWFuT3BlcmF0b3IgeworCS8vIE5vdGhpbmcKK30gLy8gT3IKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3ByZWRpY2F0ZS9QcmVkaWNhdGUuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvcHJlZGljYXRlL1ByZWRpY2F0ZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNjZjUxYmQKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3ByZWRpY2F0ZS9QcmVkaWNhdGUuamF2YQpAQCAtMCwwICsxLDU5IEBACisvLyBQcmVkaWNhdGUuamF2YQorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5HcmFwaDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuRGVjb3JhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5TVEVNVGltZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUudHJpZ2dlci5UcmlnZ2VyOworCisvKioKKyAqIEEgPGNvZGU+UHJlZGljYXRlPC9jb2RlPiByZXByZXNlbnRzIGEgdGVzdGFibGUgY29uZGl0aW9uLiBJbnN0YW5jZXMgb2YKKyAqIDxjb2RlPlByZWRpY2F0ZTwvY29kZT4gYXJlIHJlZmVyZW5jZWQgYnkge0BsaW5rIFRyaWdnZXJ9cyB0aGF0IHVzZSB0aGUgdmFsdWUKKyAqIHJldHVybmVkIGJ5IHtAbGluayAjZXZhbHVhdGUoU1RFTVRpbWUsIGxvbmcsIERlY29yYXRvcil9IHRvIGNvbnRyb2wgdGhlCisgKiBleGVjdXRpb24gb2YgYW5vdGhlciB7QGxpbmsgRGVjb3JhdG9yfSBjYWxsZWQgdGhlIHtAbGluayBUcmlnZ2VyfSdzICJhY3Rpb24iLgorICogPHA+CisgKiBUaGlzIGludGVyZmFjZSBkZWZpbml0aW9uIGlzIGFsc28gYW4gIkFubm90YXRlZCBKYXZhIEludGVyZmFjZSIgdGhhdCBkZWZpbmVzCisgKiBvbmUgY2xhc3MgaW4gYSA8YSBocmVmPSJodHRwOi8vd3d3LnVtbC5vcmcvIj5VTUw8L2E+ICJtb2RlbCIuIFRoZSBVTUwgY2xhc3MKKyAqIGRpYWdyYW0gZm9yIHRoZSBtb2RlbCBpcyBpbiB0aGUgPGNvZGU+ZG9jdW1lbnRhdGlvbjwvY29kZT4gZm9sZGVyIG9mIHRoZQorICogcHJvamVjdC4gVGhpcyBmaWxlIGFuZCB0aGUgb3RoZXIgaW50ZXJmYWNlcyBpbiB0aGlzIEphdmEgcGFja2FnZSBhcmUKKyAqIHByb2Nlc3NlZCBieSB0aGUgRWNsaXBzZSBNb2RlbGluZyBGcmFtZXdvcmsgKGFrYSBFTUYgPGEKKyAqIGhyZWY9Imh0dHA6Ly9vcmcuZWNsaXBzZS9lbWYiPmh0dHA6Ly9vcmcuZWNsaXBzZS9lbWY8L2E+KS4gdG8gYXV0b21hdGljYWxseQorICogZ2VuZXJhdGUgYW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIG1vZGVsLiBFTUYgaXMgZG9jdW1lbnRlZCBpbiB0aGUgYm9vayA8YQorICogaHJlZj0iaHR0cDovL3d3dy5hd3Byb2Zlc3Npb25hbC5jb20vYm9va3N0b3JlL3Byb2R1Y3QuYXNwP2lzYm49MDEzMTQyNTQyMCZybD0xIj5FY2xpcHNlCisgKiBNb2RlbGluZyBGcmFtZXdvcmsgPC9hPiBieSBCdWRpbnNreSwgZXQgYWwuCisgKiA8L3A+CisgKiBAc2VlIFRyaWdnZXIKKyAqIEBzZWUgTW9kaWZpZXIKKyAqIEBtb2RlbCBhYnN0cmFjdD0idHJ1ZSIKKyAqLworcHVibGljIGludGVyZmFjZSBQcmVkaWNhdGUgZXh0ZW5kcyBFT2JqZWN0IHsKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQG1vZGVsCisJICogQGdlbmVyYXRlZAorCSAqLworCWJvb2xlYW4gZXZhbHVhdGUoU1RFTVRpbWUgdGltZSwgbG9uZyB0aW1lclBlcmlvZCwgR3JhcGggZ3JhcGgpOworCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAbW9kZWwKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJdm9pZCByZXNldCgpOworCit9IC8vIFByZWRpY2F0ZQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvcHJlZGljYXRlL1ByZWRpY2F0ZUV4cHJlc3Npb24uamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvcHJlZGljYXRlL1ByZWRpY2F0ZUV4cHJlc3Npb24uamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YmZkMDAxCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9wcmVkaWNhdGUvUHJlZGljYXRlRXhwcmVzc2lvbi5qYXZhCkBAIC0wLDAgKzEsMzkgQEAKKy8vIFByZWRpY2F0ZUV4cHJlc3Npb24uamF2YQorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqCisgKiBBIDxjb2RlPlByZWRpY2F0ZUV4cHJlc3Npb248L2NvZGU+IGlzIGEge0BsaW5rIEJvb2xlYW5FeHByZXNzaW9ufSB3aG9zZSB2YWx1ZQorICogaXMgdGhlIHJlc3VsdCBvZiBldmFsdWF0aW5nIGEge0BsaW5rIFByZWRpY2F0ZX0uCisgKiAKKyAqIEBtb2RlbAorICovCitwdWJsaWMgaW50ZXJmYWNlIFByZWRpY2F0ZUV4cHJlc3Npb24gZXh0ZW5kcyBCb29sZWFuRXhwcmVzc2lvbiB7CisKKwkvKioKKwkgKiBAcmV0dXJuIHRoZSB7QGxpbmsgUHJlZGljYXRlfSB0aGF0IGRldGVybWluZXMgdGhlIHZhbHVlIG9mIHRoaXMKKwkgKiAgICAgICAgIGV4cHJlc3Npb24uCisJICogQG1vZGVsIGNvbnRhaW5tZW50PSJ0cnVlIgorCSAqLworCVByZWRpY2F0ZSBnZXRQcmVkaWNhdGUoKTsKKworCS8qKgorCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUuUHJlZGljYXRlRXhwcmVzc2lvbiNnZXRQcmVkaWNhdGUgPGVtPlByZWRpY2F0ZTwvZW0+fScgY29udGFpbm1lbnQgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+UHJlZGljYXRlPC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZS4KKwkgKiBAc2VlICNnZXRQcmVkaWNhdGUoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwl2b2lkIHNldFByZWRpY2F0ZShQcmVkaWNhdGUgdmFsdWUpOworfSAvLyBQcmVkaWNhdGVFeHByZXNzaW9uClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9wcmVkaWNhdGUvUHJlZGljYXRlRmFjdG9yeS5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9wcmVkaWNhdGUvUHJlZGljYXRlRmFjdG9yeS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRlOWYwNTgKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3ByZWRpY2F0ZS9QcmVkaWNhdGVGYWN0b3J5LmphdmEKQEAgLTAsMCArMSwxMjIgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVGYWN0b3J5OworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiBUaGUgPGI+RmFjdG9yeTwvYj4gZm9yIHRoZSBtb2RlbC4KKyAqIEl0IHByb3ZpZGVzIGEgY3JlYXRlIG1ldGhvZCBmb3IgZWFjaCBub24tYWJzdHJhY3QgY2xhc3Mgb2YgdGhlIG1vZGVsLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUuUHJlZGljYXRlUGFja2FnZQorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgaW50ZXJmYWNlIFByZWRpY2F0ZUZhY3RvcnkgZXh0ZW5kcyBFRmFjdG9yeSB7CisJLyoqCisJICogVGhlIHNpbmdsZXRvbiBpbnN0YW5jZSBvZiB0aGUgZmFjdG9yeS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlQcmVkaWNhdGVGYWN0b3J5IGVJTlNUQU5DRSA9IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUuaW1wbC5QcmVkaWNhdGVGYWN0b3J5SW1wbC5pbml0KCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPkFuZDwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+QW5kPC9lbT4nLgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlBbmQgY3JlYXRlQW5kKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPkZhbHNlPC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiBhIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5GYWxzZTwvZW0+Jy4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRmFsc2UgY3JlYXRlRmFsc2UoKTsKKworCS8qKgorCSAqIFJldHVybnMgYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+Tm90PC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiBhIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5Ob3Q8L2VtPicuCisJICogQGdlbmVyYXRlZAorCSAqLworCU5vdCBjcmVhdGVOb3QoKTsKKworCS8qKgorCSAqIFJldHVybnMgYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+T3I8L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPk9yPC9lbT4nLgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlPciBjcmVhdGVPcigpOworCisJLyoqCisJICogUmV0dXJucyBhIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5SZWZlcmVuY2U8L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPlJlZmVyZW5jZTwvZW0+Jy4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJUHJlZGljYXRlUmVmZXJlbmNlIGNyZWF0ZVByZWRpY2F0ZVJlZmVyZW5jZSgpOworCisJLyoqCisJICogUmV0dXJucyBhIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5UcnVlPC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiBhIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5UcnVlPC9lbT4nLgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlUcnVlIGNyZWF0ZVRydWUoKTsKKworCS8qKgorCSAqIFJldHVybnMgYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+RXhwcmVzc2lvbjwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+RXhwcmVzc2lvbjwvZW0+Jy4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJUHJlZGljYXRlRXhwcmVzc2lvbiBjcmVhdGVQcmVkaWNhdGVFeHByZXNzaW9uKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPklkZW50aWZpYWJsZSBQcmVkaWNhdGUgRXhwcmVzc2lvbjwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+SWRlbnRpZmlhYmxlIFByZWRpY2F0ZSBFeHByZXNzaW9uPC9lbT4nLgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlJZGVudGlmaWFibGVQcmVkaWNhdGVFeHByZXNzaW9uIGNyZWF0ZUlkZW50aWZpYWJsZVByZWRpY2F0ZUV4cHJlc3Npb24oKTsKKworCS8qKgorCSAqIFJldHVybnMgYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+RWxhcHNlZCBUaW1lIFRlc3Q8L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPkVsYXBzZWQgVGltZSBUZXN0PC9lbT4nLgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFbGFwc2VkVGltZVRlc3QgY3JlYXRlRWxhcHNlZFRpbWVUZXN0KCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBwYWNrYWdlIHN1cHBvcnRlZCBieSB0aGlzIGZhY3RvcnkuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBwYWNrYWdlIHN1cHBvcnRlZCBieSB0aGlzIGZhY3RvcnkuCisJICogQGdlbmVyYXRlZAorCSAqLworCVByZWRpY2F0ZVBhY2thZ2UgZ2V0UHJlZGljYXRlUGFja2FnZSgpOworCit9IC8vUHJlZGljYXRlRmFjdG9yeQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9wcmVkaWNhdGUvUHJlZGljYXRlUGFja2FnZS5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9wcmVkaWNhdGUvUHJlZGljYXRlUGFja2FnZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk2YTQyMTEKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3ByZWRpY2F0ZS9QcmVkaWNhdGVQYWNrYWdlLmphdmEKQEAgLTAsMCArMSwxMTQxIEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGU7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQXR0cmlidXRlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FUmVmZXJlbmNlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uQ29tbW9uUGFja2FnZTsKKworLy9pbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5Db21tb25QYWNrYWdlOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiBUaGUgPGI+UGFja2FnZTwvYj4gZm9yIHRoZSBtb2RlbC4KKyAqIEl0IGNvbnRhaW5zIGFjY2Vzc29ycyBmb3IgdGhlIG1ldGEgb2JqZWN0cyB0byByZXByZXNlbnQKKyAqIDx1bD4KKyAqICAgPGxpPmVhY2ggY2xhc3MsPC9saT4KKyAqICAgPGxpPmVhY2ggZmVhdHVyZSBvZiBlYWNoIGNsYXNzLDwvbGk+CisgKiAgIDxsaT5lYWNoIGVudW0sPC9saT4KKyAqICAgPGxpPmFuZCBlYWNoIGRhdGEgdHlwZTwvbGk+CisgKiA8L3VsPgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUuUHJlZGljYXRlRmFjdG9yeQorICogQG1vZGVsIGtpbmQ9InBhY2thZ2UiCisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBpbnRlcmZhY2UgUHJlZGljYXRlUGFja2FnZSBleHRlbmRzIEVQYWNrYWdlIHsKKwkvKioKKwkgKiBUaGUgcGFja2FnZSBuYW1lLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCVN0cmluZyBlTkFNRSA9ICJwcmVkaWNhdGUiOyAvLyROT04tTkxTLTEkCisKKwkvKioKKwkgKiBUaGUgcGFja2FnZSBuYW1lc3BhY2UgVVJJLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCVN0cmluZyBlTlNfVVJJID0gImh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3ByZWRpY2F0ZS5lY29yZSI7IC8vJE5PTi1OTFMtMSQKKworCS8qKgorCSAqIFRoZSBwYWNrYWdlIG5hbWVzcGFjZSBuYW1lLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCVN0cmluZyBlTlNfUFJFRklYID0gIm9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUiOyAvLyROT04tTkxTLTEkCisKKwkvKioKKwkgKiBUaGUgc2luZ2xldG9uIGluc3RhbmNlIG9mIHRoZSBwYWNrYWdlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCVByZWRpY2F0ZVBhY2thZ2UgZUlOU1RBTkNFID0gb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZS5pbXBsLlByZWRpY2F0ZVBhY2thZ2VJbXBsLmluaXQoKTsKKworCS8qKgorCSAqIFRoZSBtZXRhIG9iamVjdCBpZCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZS5pbXBsLlByZWRpY2F0ZUltcGwgPGVtPlByZWRpY2F0ZTwvZW0+fScgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUuaW1wbC5QcmVkaWNhdGVJbXBsCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlLmltcGwuUHJlZGljYXRlUGFja2FnZUltcGwjZ2V0UHJlZGljYXRlKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJaW50IFBSRURJQ0FURSA9IDc7CisKKwkvKioKKwkgKiBUaGUgbnVtYmVyIG9mIHN0cnVjdHVyYWwgZmVhdHVyZXMgb2YgdGhlICc8ZW0+UHJlZGljYXRlPC9lbT4nIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFBSRURJQ0FURV9GRUFUVVJFX0NPVU5UID0gMDsKKworCS8qKgorCSAqIFRoZSBtZXRhIG9iamVjdCBpZCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZS5pbXBsLkJvb2xlYW5FeHByZXNzaW9uSW1wbCA8ZW0+Qm9vbGVhbiBFeHByZXNzaW9uPC9lbT59JyBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZS5pbXBsLkJvb2xlYW5FeHByZXNzaW9uSW1wbAorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZS5pbXBsLlByZWRpY2F0ZVBhY2thZ2VJbXBsI2dldEJvb2xlYW5FeHByZXNzaW9uKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJaW50IEJPT0xFQU5fRVhQUkVTU0lPTiA9IDE7CisKKwkvKioKKwkgKiBUaGUgbnVtYmVyIG9mIHN0cnVjdHVyYWwgZmVhdHVyZXMgb2YgdGhlICc8ZW0+Qm9vbGVhbiBFeHByZXNzaW9uPC9lbT4nIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IEJPT0xFQU5fRVhQUkVTU0lPTl9GRUFUVVJFX0NPVU5UID0gUFJFRElDQVRFX0ZFQVRVUkVfQ09VTlQgKyAwOworCisJLyoqCisJICogVGhlIG1ldGEgb2JqZWN0IGlkIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlLmltcGwuQm9vbGVhbk9wZXJhdG9ySW1wbCA8ZW0+Qm9vbGVhbiBPcGVyYXRvcjwvZW0+fScgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUuaW1wbC5Cb29sZWFuT3BlcmF0b3JJbXBsCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlLmltcGwuUHJlZGljYXRlUGFja2FnZUltcGwjZ2V0Qm9vbGVhbk9wZXJhdG9yKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJaW50IEJPT0xFQU5fT1BFUkFUT1IgPSAyOworCisJLyoqCisJICogVGhlIG51bWJlciBvZiBzdHJ1Y3R1cmFsIGZlYXR1cmVzIG9mIHRoZSAnPGVtPkJvb2xlYW4gT3BlcmF0b3I8L2VtPicgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgQk9PTEVBTl9PUEVSQVRPUl9GRUFUVVJFX0NPVU5UID0gQk9PTEVBTl9FWFBSRVNTSU9OX0ZFQVRVUkVfQ09VTlQgKyAwOworCisJLyoqCisJICogVGhlIG1ldGEgb2JqZWN0IGlkIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlLmltcGwuTmFyeUJvb2xlYW5PcGVyYXRvckltcGwgPGVtPk5hcnkgQm9vbGVhbiBPcGVyYXRvcjwvZW0+fScgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUuaW1wbC5OYXJ5Qm9vbGVhbk9wZXJhdG9ySW1wbAorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZS5pbXBsLlByZWRpY2F0ZVBhY2thZ2VJbXBsI2dldE5hcnlCb29sZWFuT3BlcmF0b3IoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlpbnQgTkFSWV9CT09MRUFOX09QRVJBVE9SID0gNDsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5PcGVyYW5kczwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3QuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgTkFSWV9CT09MRUFOX09QRVJBVE9SX19PUEVSQU5EUyA9IEJPT0xFQU5fT1BFUkFUT1JfRkVBVFVSRV9DT1VOVCArIDA7CisKKwkvKioKKwkgKiBUaGUgbnVtYmVyIG9mIHN0cnVjdHVyYWwgZmVhdHVyZXMgb2YgdGhlICc8ZW0+TmFyeSBCb29sZWFuIE9wZXJhdG9yPC9lbT4nIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IE5BUllfQk9PTEVBTl9PUEVSQVRPUl9GRUFUVVJFX0NPVU5UID0gQk9PTEVBTl9PUEVSQVRPUl9GRUFUVVJFX0NPVU5UICsgMTsKKworCS8qKgorCSAqIFRoZSBtZXRhIG9iamVjdCBpZCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZS5pbXBsLkFuZEltcGwgPGVtPkFuZDwvZW0+fScgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUuaW1wbC5BbmRJbXBsCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlLmltcGwuUHJlZGljYXRlUGFja2FnZUltcGwjZ2V0QW5kKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJaW50IEFORCA9IDA7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+T3BlcmFuZHM8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IEFORF9fT1BFUkFORFMgPSBOQVJZX0JPT0xFQU5fT1BFUkFUT1JfX09QRVJBTkRTOworCisJLyoqCisJICogVGhlIG51bWJlciBvZiBzdHJ1Y3R1cmFsIGZlYXR1cmVzIG9mIHRoZSAnPGVtPkFuZDwvZW0+JyBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBBTkRfRkVBVFVSRV9DT1VOVCA9IE5BUllfQk9PTEVBTl9PUEVSQVRPUl9GRUFUVVJFX0NPVU5UICsgMDsKKworCS8qKgorCSAqIFRoZSBtZXRhIG9iamVjdCBpZCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZS5pbXBsLlRlc3RJbXBsIDxlbT5UZXN0PC9lbT59JyBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZS5pbXBsLlRlc3RJbXBsCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlLmltcGwuUHJlZGljYXRlUGFja2FnZUltcGwjZ2V0VGVzdCgpCisJICogQGdlbmVyYXRlZAorCSAqLworCWludCBURVNUID0gOTsKKworCS8qKgorCSAqIFRoZSBudW1iZXIgb2Ygc3RydWN0dXJhbCBmZWF0dXJlcyBvZiB0aGUgJzxlbT5UZXN0PC9lbT4nIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFRFU1RfRkVBVFVSRV9DT1VOVCA9IFBSRURJQ0FURV9GRUFUVVJFX0NPVU5UICsgMDsKKworCS8qKgorCSAqIFRoZSBtZXRhIG9iamVjdCBpZCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZS5pbXBsLkZhbHNlSW1wbCA8ZW0+RmFsc2U8L2VtPn0nIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlLmltcGwuRmFsc2VJbXBsCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlLmltcGwuUHJlZGljYXRlUGFja2FnZUltcGwjZ2V0RmFsc2UoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlpbnQgRkFMU0UgPSAzOworCisJLyoqCisJICogVGhlIG51bWJlciBvZiBzdHJ1Y3R1cmFsIGZlYXR1cmVzIG9mIHRoZSAnPGVtPkZhbHNlPC9lbT4nIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IEZBTFNFX0ZFQVRVUkVfQ09VTlQgPSBURVNUX0ZFQVRVUkVfQ09VTlQgKyAwOworCisJLyoqCisJICogVGhlIG1ldGEgb2JqZWN0IGlkIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlLmltcGwuVW5hcnlCb29sZWFuT3BlcmF0b3JJbXBsIDxlbT5VbmFyeSBCb29sZWFuIE9wZXJhdG9yPC9lbT59JyBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZS5pbXBsLlVuYXJ5Qm9vbGVhbk9wZXJhdG9ySW1wbAorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZS5pbXBsLlByZWRpY2F0ZVBhY2thZ2VJbXBsI2dldFVuYXJ5Qm9vbGVhbk9wZXJhdG9yKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJaW50IFVOQVJZX0JPT0xFQU5fT1BFUkFUT1IgPSAxMTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5PcGVyYW5kPC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgVU5BUllfQk9PTEVBTl9PUEVSQVRPUl9fT1BFUkFORCA9IEJPT0xFQU5fT1BFUkFUT1JfRkVBVFVSRV9DT1VOVCArIDA7CisKKwkvKioKKwkgKiBUaGUgbnVtYmVyIG9mIHN0cnVjdHVyYWwgZmVhdHVyZXMgb2YgdGhlICc8ZW0+VW5hcnkgQm9vbGVhbiBPcGVyYXRvcjwvZW0+JyBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBVTkFSWV9CT09MRUFOX09QRVJBVE9SX0ZFQVRVUkVfQ09VTlQgPSBCT09MRUFOX09QRVJBVE9SX0ZFQVRVUkVfQ09VTlQgKyAxOworCisJLyoqCisJICogVGhlIG1ldGEgb2JqZWN0IGlkIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlLmltcGwuTm90SW1wbCA8ZW0+Tm90PC9lbT59JyBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZS5pbXBsLk5vdEltcGwKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUuaW1wbC5QcmVkaWNhdGVQYWNrYWdlSW1wbCNnZXROb3QoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlpbnQgTk9UID0gNTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5PcGVyYW5kPC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgTk9UX19PUEVSQU5EID0gVU5BUllfQk9PTEVBTl9PUEVSQVRPUl9fT1BFUkFORDsKKworCS8qKgorCSAqIFRoZSBudW1iZXIgb2Ygc3RydWN0dXJhbCBmZWF0dXJlcyBvZiB0aGUgJzxlbT5Ob3Q8L2VtPicgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgTk9UX0ZFQVRVUkVfQ09VTlQgPSBVTkFSWV9CT09MRUFOX09QRVJBVE9SX0ZFQVRVUkVfQ09VTlQgKyAwOworCisJLyoqCisJICogVGhlIG1ldGEgb2JqZWN0IGlkIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlLmltcGwuT3JJbXBsIDxlbT5PcjwvZW0+fScgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUuaW1wbC5PckltcGwKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUuaW1wbC5QcmVkaWNhdGVQYWNrYWdlSW1wbCNnZXRPcigpCisJICogQGdlbmVyYXRlZAorCSAqLworCWludCBPUiA9IDY7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+T3BlcmFuZHM8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IE9SX19PUEVSQU5EUyA9IE5BUllfQk9PTEVBTl9PUEVSQVRPUl9fT1BFUkFORFM7CisKKwkvKioKKwkgKiBUaGUgbnVtYmVyIG9mIHN0cnVjdHVyYWwgZmVhdHVyZXMgb2YgdGhlICc8ZW0+T3I8L2VtPicgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgT1JfRkVBVFVSRV9DT1VOVCA9IE5BUllfQk9PTEVBTl9PUEVSQVRPUl9GRUFUVVJFX0NPVU5UICsgMDsKKworCS8qKgorCSAqIFRoZSBtZXRhIG9iamVjdCBpZCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZS5pbXBsLlByZWRpY2F0ZVJlZmVyZW5jZUltcGwgPGVtPlJlZmVyZW5jZTwvZW0+fScgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUuaW1wbC5QcmVkaWNhdGVSZWZlcmVuY2VJbXBsCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlLmltcGwuUHJlZGljYXRlUGFja2FnZUltcGwjZ2V0UHJlZGljYXRlUmVmZXJlbmNlKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJaW50IFBSRURJQ0FURV9SRUZFUkVOQ0UgPSA4OworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlByZWRpY2F0ZTwvYj48L2VtPicgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFBSRURJQ0FURV9SRUZFUkVOQ0VfX1BSRURJQ0FURSA9IFBSRURJQ0FURV9GRUFUVVJFX0NPVU5UICsgMDsKKworCS8qKgorCSAqIFRoZSBudW1iZXIgb2Ygc3RydWN0dXJhbCBmZWF0dXJlcyBvZiB0aGUgJzxlbT5SZWZlcmVuY2U8L2VtPicgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgUFJFRElDQVRFX1JFRkVSRU5DRV9GRUFUVVJFX0NPVU5UID0gUFJFRElDQVRFX0ZFQVRVUkVfQ09VTlQgKyAxOworCisJLyoqCisJICogVGhlIG1ldGEgb2JqZWN0IGlkIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlLmltcGwuVHJ1ZUltcGwgPGVtPlRydWU8L2VtPn0nIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlLmltcGwuVHJ1ZUltcGwKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUuaW1wbC5QcmVkaWNhdGVQYWNrYWdlSW1wbCNnZXRUcnVlKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJaW50IFRSVUUgPSAxMDsKKworCS8qKgorCSAqIFRoZSBudW1iZXIgb2Ygc3RydWN0dXJhbCBmZWF0dXJlcyBvZiB0aGUgJzxlbT5UcnVlPC9lbT4nIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFRSVUVfRkVBVFVSRV9DT1VOVCA9IFRFU1RfRkVBVFVSRV9DT1VOVCArIDA7CisKKworCS8qKgorCSAqIFRoZSBtZXRhIG9iamVjdCBpZCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZS5pbXBsLlByZWRpY2F0ZUV4cHJlc3Npb25JbXBsIDxlbT5FeHByZXNzaW9uPC9lbT59JyBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZS5pbXBsLlByZWRpY2F0ZUV4cHJlc3Npb25JbXBsCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlLmltcGwuUHJlZGljYXRlUGFja2FnZUltcGwjZ2V0UHJlZGljYXRlRXhwcmVzc2lvbigpCisJICogQGdlbmVyYXRlZAorCSAqLworCWludCBQUkVESUNBVEVfRVhQUkVTU0lPTiA9IDEyOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlByZWRpY2F0ZTwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFBSRURJQ0FURV9FWFBSRVNTSU9OX19QUkVESUNBVEUgPSBCT09MRUFOX0VYUFJFU1NJT05fRkVBVFVSRV9DT1VOVCArIDA7CisKKwkvKioKKwkgKiBUaGUgbnVtYmVyIG9mIHN0cnVjdHVyYWwgZmVhdHVyZXMgb2YgdGhlICc8ZW0+RXhwcmVzc2lvbjwvZW0+JyBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBQUkVESUNBVEVfRVhQUkVTU0lPTl9GRUFUVVJFX0NPVU5UID0gQk9PTEVBTl9FWFBSRVNTSU9OX0ZFQVRVUkVfQ09VTlQgKyAxOworCisKKwkvKioKKwkgKiBUaGUgbWV0YSBvYmplY3QgaWQgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUuaW1wbC5JZGVudGlmaWFibGVQcmVkaWNhdGVJbXBsIDxlbT5JZGVudGlmaWFibGUgUHJlZGljYXRlPC9lbT59JyBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZS5pbXBsLklkZW50aWZpYWJsZVByZWRpY2F0ZUltcGwKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUuaW1wbC5QcmVkaWNhdGVQYWNrYWdlSW1wbCNnZXRJZGVudGlmaWFibGVQcmVkaWNhdGUoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlpbnQgSURFTlRJRklBQkxFX1BSRURJQ0FURSA9IDEzOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlVSSTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IElERU5USUZJQUJMRV9QUkVESUNBVEVfX1VSSSA9IENvbW1vblBhY2thZ2UuSURFTlRJRklBQkxFX19VUkk7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VHlwZSBVUkk8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBJREVOVElGSUFCTEVfUFJFRElDQVRFX19UWVBFX1VSSSA9IENvbW1vblBhY2thZ2UuSURFTlRJRklBQkxFX19UWVBFX1VSSTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5EdWJsaW4gQ29yZTwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IElERU5USUZJQUJMRV9QUkVESUNBVEVfX0RVQkxJTl9DT1JFID0gQ29tbW9uUGFja2FnZS5JREVOVElGSUFCTEVfX0RVQkxJTl9DT1JFOworCisJLyoqCisJICogVGhlIG51bWJlciBvZiBzdHJ1Y3R1cmFsIGZlYXR1cmVzIG9mIHRoZSAnPGVtPklkZW50aWZpYWJsZSBQcmVkaWNhdGU8L2VtPicgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgSURFTlRJRklBQkxFX1BSRURJQ0FURV9GRUFUVVJFX0NPVU5UID0gQ29tbW9uUGFja2FnZS5JREVOVElGSUFCTEVfRkVBVFVSRV9DT1VOVCArIDA7CisKKwkvKioKKwkgKiBUaGUgbWV0YSBvYmplY3QgaWQgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUuaW1wbC5JZGVudGlmaWFibGVQcmVkaWNhdGVFeHByZXNzaW9uSW1wbCA8ZW0+SWRlbnRpZmlhYmxlIFByZWRpY2F0ZSBFeHByZXNzaW9uPC9lbT59JyBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZS5pbXBsLklkZW50aWZpYWJsZVByZWRpY2F0ZUV4cHJlc3Npb25JbXBsCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlLmltcGwuUHJlZGljYXRlUGFja2FnZUltcGwjZ2V0SWRlbnRpZmlhYmxlUHJlZGljYXRlRXhwcmVzc2lvbigpCisJICogQGdlbmVyYXRlZAorCSAqLworCWludCBJREVOVElGSUFCTEVfUFJFRElDQVRFX0VYUFJFU1NJT04gPSAxNDsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5VUkk8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBJREVOVElGSUFCTEVfUFJFRElDQVRFX0VYUFJFU1NJT05fX1VSSSA9IElERU5USUZJQUJMRV9QUkVESUNBVEVfX1VSSTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5UeXBlIFVSSTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IElERU5USUZJQUJMRV9QUkVESUNBVEVfRVhQUkVTU0lPTl9fVFlQRV9VUkkgPSBJREVOVElGSUFCTEVfUFJFRElDQVRFX19UWVBFX1VSSTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5EdWJsaW4gQ29yZTwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IElERU5USUZJQUJMRV9QUkVESUNBVEVfRVhQUkVTU0lPTl9fRFVCTElOX0NPUkUgPSBJREVOVElGSUFCTEVfUFJFRElDQVRFX19EVUJMSU5fQ09SRTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5QcmVkaWNhdGU8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBJREVOVElGSUFCTEVfUFJFRElDQVRFX0VYUFJFU1NJT05fX1BSRURJQ0FURSA9IElERU5USUZJQUJMRV9QUkVESUNBVEVfRkVBVFVSRV9DT1VOVCArIDA7CisKKwkvKioKKwkgKiBUaGUgbnVtYmVyIG9mIHN0cnVjdHVyYWwgZmVhdHVyZXMgb2YgdGhlICc8ZW0+SWRlbnRpZmlhYmxlIFByZWRpY2F0ZSBFeHByZXNzaW9uPC9lbT4nIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IElERU5USUZJQUJMRV9QUkVESUNBVEVfRVhQUkVTU0lPTl9GRUFUVVJFX0NPVU5UID0gSURFTlRJRklBQkxFX1BSRURJQ0FURV9GRUFUVVJFX0NPVU5UICsgMTsKKworCS8qKgorCSAqIFRoZSBtZXRhIG9iamVjdCBpZCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZS5pbXBsLklkZW50aWZpYWJsZVRlc3RJbXBsIDxlbT5JZGVudGlmaWFibGUgVGVzdDwvZW0+fScgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUuaW1wbC5JZGVudGlmaWFibGVUZXN0SW1wbAorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZS5pbXBsLlByZWRpY2F0ZVBhY2thZ2VJbXBsI2dldElkZW50aWZpYWJsZVRlc3QoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlpbnQgSURFTlRJRklBQkxFX1RFU1QgPSAxNTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5VUkk8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBJREVOVElGSUFCTEVfVEVTVF9fVVJJID0gSURFTlRJRklBQkxFX1BSRURJQ0FURV9fVVJJOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlR5cGUgVVJJPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgSURFTlRJRklBQkxFX1RFU1RfX1RZUEVfVVJJID0gSURFTlRJRklBQkxFX1BSRURJQ0FURV9fVFlQRV9VUkk7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RHVibGluIENvcmU8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBJREVOVElGSUFCTEVfVEVTVF9fRFVCTElOX0NPUkUgPSBJREVOVElGSUFCTEVfUFJFRElDQVRFX19EVUJMSU5fQ09SRTsKKworCS8qKgorCSAqIFRoZSBudW1iZXIgb2Ygc3RydWN0dXJhbCBmZWF0dXJlcyBvZiB0aGUgJzxlbT5JZGVudGlmaWFibGUgVGVzdDwvZW0+JyBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBJREVOVElGSUFCTEVfVEVTVF9GRUFUVVJFX0NPVU5UID0gSURFTlRJRklBQkxFX1BSRURJQ0FURV9GRUFUVVJFX0NPVU5UICsgMDsKKworCisJLyoqCisJICogVGhlIG1ldGEgb2JqZWN0IGlkIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlLmltcGwuVGltZVRlc3RJbXBsIDxlbT5UaW1lIFRlc3Q8L2VtPn0nIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlLmltcGwuVGltZVRlc3RJbXBsCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlLmltcGwuUHJlZGljYXRlUGFja2FnZUltcGwjZ2V0VGltZVRlc3QoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlpbnQgVElNRV9URVNUID0gMTY7CisKKwkvKioKKwkgKiBUaGUgbnVtYmVyIG9mIHN0cnVjdHVyYWwgZmVhdHVyZXMgb2YgdGhlICc8ZW0+VGltZSBUZXN0PC9lbT4nIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFRJTUVfVEVTVF9GRUFUVVJFX0NPVU5UID0gVEVTVF9GRUFUVVJFX0NPVU5UICsgMDsKKworCisJLyoqCisJICogVGhlIG1ldGEgb2JqZWN0IGlkIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlLmltcGwuRWxhcHNlZFRpbWVUZXN0SW1wbCA8ZW0+RWxhcHNlZCBUaW1lIFRlc3Q8L2VtPn0nIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlLmltcGwuRWxhcHNlZFRpbWVUZXN0SW1wbAorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZS5pbXBsLlByZWRpY2F0ZVBhY2thZ2VJbXBsI2dldEVsYXBzZWRUaW1lVGVzdCgpCisJICogQGdlbmVyYXRlZAorCSAqLworCWludCBFTEFQU0VEX1RJTUVfVEVTVCA9IDE3OworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlJlZmVyZW5jZSBUaW1lIFZhbGlkPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgRUxBUFNFRF9USU1FX1RFU1RfX1JFRkVSRU5DRV9USU1FX1ZBTElEID0gVElNRV9URVNUX0ZFQVRVUkVfQ09VTlQgKyAwOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkVsYXBzZWQgTWlsbGlzZWNvbmRzPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgRUxBUFNFRF9USU1FX1RFU1RfX0VMQVBTRURfTUlMTElTRUNPTkRTID0gVElNRV9URVNUX0ZFQVRVUkVfQ09VTlQgKyAxOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPk51bWJlcm9mIERheXM8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBFTEFQU0VEX1RJTUVfVEVTVF9fTlVNQkVST0ZfREFZUyA9IFRJTUVfVEVTVF9GRUFUVVJFX0NPVU5UICsgMjsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5SZWZlcmVuY2UgVGltZTwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IEVMQVBTRURfVElNRV9URVNUX19SRUZFUkVOQ0VfVElNRSA9IFRJTUVfVEVTVF9GRUFUVVJFX0NPVU5UICsgMzsKKworCS8qKgorCSAqIFRoZSBudW1iZXIgb2Ygc3RydWN0dXJhbCBmZWF0dXJlcyBvZiB0aGUgJzxlbT5FbGFwc2VkIFRpbWUgVGVzdDwvZW0+JyBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBFTEFQU0VEX1RJTUVfVEVTVF9GRUFUVVJFX0NPVU5UID0gVElNRV9URVNUX0ZFQVRVUkVfQ09VTlQgKyA0OworCisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlLkFuZCA8ZW0+QW5kPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAnPGVtPkFuZDwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUuQW5kCisJICogQGdlbmVyYXRlZAorCSAqLworCUVDbGFzcyBnZXRBbmQoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUuQm9vbGVhbkV4cHJlc3Npb24gPGVtPkJvb2xlYW4gRXhwcmVzc2lvbjwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJzxlbT5Cb29sZWFuIEV4cHJlc3Npb248L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlLkJvb2xlYW5FeHByZXNzaW9uCisJICogQGdlbmVyYXRlZAorCSAqLworCUVDbGFzcyBnZXRCb29sZWFuRXhwcmVzc2lvbigpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZS5Cb29sZWFuT3BlcmF0b3IgPGVtPkJvb2xlYW4gT3BlcmF0b3I8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICc8ZW0+Qm9vbGVhbiBPcGVyYXRvcjwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUuQm9vbGVhbk9wZXJhdG9yCisJICogQGdlbmVyYXRlZAorCSAqLworCUVDbGFzcyBnZXRCb29sZWFuT3BlcmF0b3IoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUuRmFsc2UgPGVtPkZhbHNlPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAnPGVtPkZhbHNlPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZS5GYWxzZQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQ2xhc3MgZ2V0RmFsc2UoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUuTmFyeUJvb2xlYW5PcGVyYXRvciA8ZW0+TmFyeSBCb29sZWFuIE9wZXJhdG9yPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAnPGVtPk5hcnkgQm9vbGVhbiBPcGVyYXRvcjwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUuTmFyeUJvb2xlYW5PcGVyYXRvcgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQ2xhc3MgZ2V0TmFyeUJvb2xlYW5PcGVyYXRvcigpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBjb250YWlubWVudCByZWZlcmVuY2UgbGlzdCAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUuTmFyeUJvb2xlYW5PcGVyYXRvciNnZXRPcGVyYW5kcyA8ZW0+T3BlcmFuZHM8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBjb250YWlubWVudCByZWZlcmVuY2UgbGlzdCAnPGVtPk9wZXJhbmRzPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZS5OYXJ5Qm9vbGVhbk9wZXJhdG9yI2dldE9wZXJhbmRzKCkKKwkgKiBAc2VlICNnZXROYXJ5Qm9vbGVhbk9wZXJhdG9yKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRVJlZmVyZW5jZSBnZXROYXJ5Qm9vbGVhbk9wZXJhdG9yX09wZXJhbmRzKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlLk5vdCA8ZW0+Tm90PC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAnPGVtPk5vdDwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUuTm90CisJICogQGdlbmVyYXRlZAorCSAqLworCUVDbGFzcyBnZXROb3QoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUuT3IgPGVtPk9yPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAnPGVtPk9yPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZS5PcgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQ2xhc3MgZ2V0T3IoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUuUHJlZGljYXRlIDxlbT5QcmVkaWNhdGU8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICc8ZW0+UHJlZGljYXRlPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZS5QcmVkaWNhdGUKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUNsYXNzIGdldFByZWRpY2F0ZSgpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZS5QcmVkaWNhdGVSZWZlcmVuY2UgPGVtPlJlZmVyZW5jZTwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJzxlbT5SZWZlcmVuY2U8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlLlByZWRpY2F0ZVJlZmVyZW5jZQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQ2xhc3MgZ2V0UHJlZGljYXRlUmVmZXJlbmNlKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIHJlZmVyZW5jZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUuUHJlZGljYXRlUmVmZXJlbmNlI2dldFByZWRpY2F0ZSA8ZW0+UHJlZGljYXRlPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgcmVmZXJlbmNlICc8ZW0+UHJlZGljYXRlPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZS5QcmVkaWNhdGVSZWZlcmVuY2UjZ2V0UHJlZGljYXRlKCkKKwkgKiBAc2VlICNnZXRQcmVkaWNhdGVSZWZlcmVuY2UoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFUmVmZXJlbmNlIGdldFByZWRpY2F0ZVJlZmVyZW5jZV9QcmVkaWNhdGUoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUuVGVzdCA8ZW0+VGVzdDwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJzxlbT5UZXN0PC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZS5UZXN0CisJICogQGdlbmVyYXRlZAorCSAqLworCUVDbGFzcyBnZXRUZXN0KCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlLlRydWUgPGVtPlRydWU8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICc8ZW0+VHJ1ZTwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUuVHJ1ZQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQ2xhc3MgZ2V0VHJ1ZSgpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZS5VbmFyeUJvb2xlYW5PcGVyYXRvciA8ZW0+VW5hcnkgQm9vbGVhbiBPcGVyYXRvcjwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJzxlbT5VbmFyeSBCb29sZWFuIE9wZXJhdG9yPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZS5VbmFyeUJvb2xlYW5PcGVyYXRvcgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQ2xhc3MgZ2V0VW5hcnlCb29sZWFuT3BlcmF0b3IoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgY29udGFpbm1lbnQgcmVmZXJlbmNlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZS5VbmFyeUJvb2xlYW5PcGVyYXRvciNnZXRPcGVyYW5kIDxlbT5PcGVyYW5kPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgY29udGFpbm1lbnQgcmVmZXJlbmNlICc8ZW0+T3BlcmFuZDwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUuVW5hcnlCb29sZWFuT3BlcmF0b3IjZ2V0T3BlcmFuZCgpCisJICogQHNlZSAjZ2V0VW5hcnlCb29sZWFuT3BlcmF0b3IoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFUmVmZXJlbmNlIGdldFVuYXJ5Qm9vbGVhbk9wZXJhdG9yX09wZXJhbmQoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUuUHJlZGljYXRlRXhwcmVzc2lvbiA8ZW0+RXhwcmVzc2lvbjwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJzxlbT5FeHByZXNzaW9uPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZS5QcmVkaWNhdGVFeHByZXNzaW9uCisJICogQGdlbmVyYXRlZAorCSAqLworCUVDbGFzcyBnZXRQcmVkaWNhdGVFeHByZXNzaW9uKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGNvbnRhaW5tZW50IHJlZmVyZW5jZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUuUHJlZGljYXRlRXhwcmVzc2lvbiNnZXRQcmVkaWNhdGUgPGVtPlByZWRpY2F0ZTwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGNvbnRhaW5tZW50IHJlZmVyZW5jZSAnPGVtPlByZWRpY2F0ZTwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUuUHJlZGljYXRlRXhwcmVzc2lvbiNnZXRQcmVkaWNhdGUoKQorCSAqIEBzZWUgI2dldFByZWRpY2F0ZUV4cHJlc3Npb24oKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFUmVmZXJlbmNlIGdldFByZWRpY2F0ZUV4cHJlc3Npb25fUHJlZGljYXRlKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlLklkZW50aWZpYWJsZVByZWRpY2F0ZSA8ZW0+SWRlbnRpZmlhYmxlIFByZWRpY2F0ZTwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJzxlbT5JZGVudGlmaWFibGUgUHJlZGljYXRlPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZS5JZGVudGlmaWFibGVQcmVkaWNhdGUKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUNsYXNzIGdldElkZW50aWZpYWJsZVByZWRpY2F0ZSgpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZS5JZGVudGlmaWFibGVQcmVkaWNhdGVFeHByZXNzaW9uIDxlbT5JZGVudGlmaWFibGUgUHJlZGljYXRlIEV4cHJlc3Npb248L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICc8ZW0+SWRlbnRpZmlhYmxlIFByZWRpY2F0ZSBFeHByZXNzaW9uPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZS5JZGVudGlmaWFibGVQcmVkaWNhdGVFeHByZXNzaW9uCisJICogQGdlbmVyYXRlZAorCSAqLworCUVDbGFzcyBnZXRJZGVudGlmaWFibGVQcmVkaWNhdGVFeHByZXNzaW9uKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlLklkZW50aWZpYWJsZVRlc3QgPGVtPklkZW50aWZpYWJsZSBUZXN0PC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAnPGVtPklkZW50aWZpYWJsZSBUZXN0PC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZS5JZGVudGlmaWFibGVUZXN0CisJICogQGdlbmVyYXRlZAorCSAqLworCUVDbGFzcyBnZXRJZGVudGlmaWFibGVUZXN0KCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlLlRpbWVUZXN0IDxlbT5UaW1lIFRlc3Q8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICc8ZW0+VGltZSBUZXN0PC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZS5UaW1lVGVzdAorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQ2xhc3MgZ2V0VGltZVRlc3QoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUuRWxhcHNlZFRpbWVUZXN0IDxlbT5FbGFwc2VkIFRpbWUgVGVzdDwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJzxlbT5FbGFwc2VkIFRpbWUgVGVzdDwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUuRWxhcHNlZFRpbWVUZXN0CisJICogQGdlbmVyYXRlZAorCSAqLworCUVDbGFzcyBnZXRFbGFwc2VkVGltZVRlc3QoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZS5FbGFwc2VkVGltZVRlc3QjaXNSZWZlcmVuY2VUaW1lVmFsaWQgPGVtPlJlZmVyZW5jZSBUaW1lIFZhbGlkPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+UmVmZXJlbmNlIFRpbWUgVmFsaWQ8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlLkVsYXBzZWRUaW1lVGVzdCNpc1JlZmVyZW5jZVRpbWVWYWxpZCgpCisJICogQHNlZSAjZ2V0RWxhcHNlZFRpbWVUZXN0KCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUF0dHJpYnV0ZSBnZXRFbGFwc2VkVGltZVRlc3RfUmVmZXJlbmNlVGltZVZhbGlkKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUuRWxhcHNlZFRpbWVUZXN0I2dldEVsYXBzZWRNaWxsaXNlY29uZHMgPGVtPkVsYXBzZWQgTWlsbGlzZWNvbmRzPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+RWxhcHNlZCBNaWxsaXNlY29uZHM8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlLkVsYXBzZWRUaW1lVGVzdCNnZXRFbGFwc2VkTWlsbGlzZWNvbmRzKCkKKwkgKiBAc2VlICNnZXRFbGFwc2VkVGltZVRlc3QoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQXR0cmlidXRlIGdldEVsYXBzZWRUaW1lVGVzdF9FbGFwc2VkTWlsbGlzZWNvbmRzKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUuRWxhcHNlZFRpbWVUZXN0I2dldE51bWJlcm9mRGF5cyA8ZW0+TnVtYmVyb2YgRGF5czwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPGVtPk51bWJlcm9mIERheXM8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlLkVsYXBzZWRUaW1lVGVzdCNnZXROdW1iZXJvZkRheXMoKQorCSAqIEBzZWUgI2dldEVsYXBzZWRUaW1lVGVzdCgpCisJICogQGdlbmVyYXRlZAorCSAqLworCUVBdHRyaWJ1dGUgZ2V0RWxhcHNlZFRpbWVUZXN0X051bWJlcm9mRGF5cygpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBjb250YWlubWVudCByZWZlcmVuY2UgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlLkVsYXBzZWRUaW1lVGVzdCNnZXRSZWZlcmVuY2VUaW1lIDxlbT5SZWZlcmVuY2UgVGltZTwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGNvbnRhaW5tZW50IHJlZmVyZW5jZSAnPGVtPlJlZmVyZW5jZSBUaW1lPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZS5FbGFwc2VkVGltZVRlc3QjZ2V0UmVmZXJlbmNlVGltZSgpCisJICogQHNlZSAjZ2V0RWxhcHNlZFRpbWVUZXN0KCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRVJlZmVyZW5jZSBnZXRFbGFwc2VkVGltZVRlc3RfUmVmZXJlbmNlVGltZSgpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgZmFjdG9yeSB0aGF0IGNyZWF0ZXMgdGhlIGluc3RhbmNlcyBvZiB0aGUgbW9kZWwuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBmYWN0b3J5IHRoYXQgY3JlYXRlcyB0aGUgaW5zdGFuY2VzIG9mIHRoZSBtb2RlbC4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJUHJlZGljYXRlRmFjdG9yeSBnZXRQcmVkaWNhdGVGYWN0b3J5KCk7CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIERlZmluZXMgbGl0ZXJhbHMgZm9yIHRoZSBtZXRhIG9iamVjdHMgdGhhdCByZXByZXNlbnQKKwkgKiA8dWw+CisJICogICA8bGk+ZWFjaCBjbGFzcyw8L2xpPgorCSAqICAgPGxpPmVhY2ggZmVhdHVyZSBvZiBlYWNoIGNsYXNzLDwvbGk+CisJICogICA8bGk+ZWFjaCBlbnVtLDwvbGk+CisJICogICA8bGk+YW5kIGVhY2ggZGF0YSB0eXBlPC9saT4KKwkgKiA8L3VsPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlpbnRlcmZhY2UgTGl0ZXJhbHMgeworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUuaW1wbC5BbmRJbXBsIDxlbT5BbmQ8L2VtPn0nIGNsYXNzLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlLmltcGwuQW5kSW1wbAorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUuaW1wbC5QcmVkaWNhdGVQYWNrYWdlSW1wbCNnZXRBbmQoKQorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQ2xhc3MgQU5EID0gZUlOU1RBTkNFLmdldEFuZCgpOworCisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZS5pbXBsLkJvb2xlYW5FeHByZXNzaW9uSW1wbCA8ZW0+Qm9vbGVhbiBFeHByZXNzaW9uPC9lbT59JyBjbGFzcy4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZS5pbXBsLkJvb2xlYW5FeHByZXNzaW9uSW1wbAorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUuaW1wbC5QcmVkaWNhdGVQYWNrYWdlSW1wbCNnZXRCb29sZWFuRXhwcmVzc2lvbigpCisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVDbGFzcyBCT09MRUFOX0VYUFJFU1NJT04gPSBlSU5TVEFOQ0UuZ2V0Qm9vbGVhbkV4cHJlc3Npb24oKTsKKworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUuaW1wbC5Cb29sZWFuT3BlcmF0b3JJbXBsIDxlbT5Cb29sZWFuIE9wZXJhdG9yPC9lbT59JyBjbGFzcy4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZS5pbXBsLkJvb2xlYW5PcGVyYXRvckltcGwKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlLmltcGwuUHJlZGljYXRlUGFja2FnZUltcGwjZ2V0Qm9vbGVhbk9wZXJhdG9yKCkKKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUNsYXNzIEJPT0xFQU5fT1BFUkFUT1IgPSBlSU5TVEFOQ0UuZ2V0Qm9vbGVhbk9wZXJhdG9yKCk7CisKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlLmltcGwuRmFsc2VJbXBsIDxlbT5GYWxzZTwvZW0+fScgY2xhc3MuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUuaW1wbC5GYWxzZUltcGwKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlLmltcGwuUHJlZGljYXRlUGFja2FnZUltcGwjZ2V0RmFsc2UoKQorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQ2xhc3MgRkFMU0UgPSBlSU5TVEFOQ0UuZ2V0RmFsc2UoKTsKKworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUuaW1wbC5OYXJ5Qm9vbGVhbk9wZXJhdG9ySW1wbCA8ZW0+TmFyeSBCb29sZWFuIE9wZXJhdG9yPC9lbT59JyBjbGFzcy4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZS5pbXBsLk5hcnlCb29sZWFuT3BlcmF0b3JJbXBsCisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZS5pbXBsLlByZWRpY2F0ZVBhY2thZ2VJbXBsI2dldE5hcnlCb29sZWFuT3BlcmF0b3IoKQorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQ2xhc3MgTkFSWV9CT09MRUFOX09QRVJBVE9SID0gZUlOU1RBTkNFLmdldE5hcnlCb29sZWFuT3BlcmF0b3IoKTsKKworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPk9wZXJhbmRzPC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UgbGlzdCBmZWF0dXJlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRVJlZmVyZW5jZSBOQVJZX0JPT0xFQU5fT1BFUkFUT1JfX09QRVJBTkRTID0gZUlOU1RBTkNFLmdldE5hcnlCb29sZWFuT3BlcmF0b3JfT3BlcmFuZHMoKTsKKworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUuaW1wbC5Ob3RJbXBsIDxlbT5Ob3Q8L2VtPn0nIGNsYXNzLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlLmltcGwuTm90SW1wbAorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUuaW1wbC5QcmVkaWNhdGVQYWNrYWdlSW1wbCNnZXROb3QoKQorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQ2xhc3MgTk9UID0gZUlOU1RBTkNFLmdldE5vdCgpOworCisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZS5pbXBsLk9ySW1wbCA8ZW0+T3I8L2VtPn0nIGNsYXNzLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlLmltcGwuT3JJbXBsCisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZS5pbXBsLlByZWRpY2F0ZVBhY2thZ2VJbXBsI2dldE9yKCkKKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUNsYXNzIE9SID0gZUlOU1RBTkNFLmdldE9yKCk7CisKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlLmltcGwuUHJlZGljYXRlSW1wbCA8ZW0+UHJlZGljYXRlPC9lbT59JyBjbGFzcy4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZS5pbXBsLlByZWRpY2F0ZUltcGwKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlLmltcGwuUHJlZGljYXRlUGFja2FnZUltcGwjZ2V0UHJlZGljYXRlKCkKKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUNsYXNzIFBSRURJQ0FURSA9IGVJTlNUQU5DRS5nZXRQcmVkaWNhdGUoKTsKKworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUuaW1wbC5QcmVkaWNhdGVSZWZlcmVuY2VJbXBsIDxlbT5SZWZlcmVuY2U8L2VtPn0nIGNsYXNzLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlLmltcGwuUHJlZGljYXRlUmVmZXJlbmNlSW1wbAorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUuaW1wbC5QcmVkaWNhdGVQYWNrYWdlSW1wbCNnZXRQcmVkaWNhdGVSZWZlcmVuY2UoKQorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQ2xhc3MgUFJFRElDQVRFX1JFRkVSRU5DRSA9IGVJTlNUQU5DRS5nZXRQcmVkaWNhdGVSZWZlcmVuY2UoKTsKKworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPlByZWRpY2F0ZTwvYj48L2VtPicgcmVmZXJlbmNlIGZlYXR1cmUuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFUmVmZXJlbmNlIFBSRURJQ0FURV9SRUZFUkVOQ0VfX1BSRURJQ0FURSA9IGVJTlNUQU5DRS5nZXRQcmVkaWNhdGVSZWZlcmVuY2VfUHJlZGljYXRlKCk7CisKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlLmltcGwuVGVzdEltcGwgPGVtPlRlc3Q8L2VtPn0nIGNsYXNzLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlLmltcGwuVGVzdEltcGwKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlLmltcGwuUHJlZGljYXRlUGFja2FnZUltcGwjZ2V0VGVzdCgpCisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVDbGFzcyBURVNUID0gZUlOU1RBTkNFLmdldFRlc3QoKTsKKworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUuaW1wbC5UcnVlSW1wbCA8ZW0+VHJ1ZTwvZW0+fScgY2xhc3MuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUuaW1wbC5UcnVlSW1wbAorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUuaW1wbC5QcmVkaWNhdGVQYWNrYWdlSW1wbCNnZXRUcnVlKCkKKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUNsYXNzIFRSVUUgPSBlSU5TVEFOQ0UuZ2V0VHJ1ZSgpOworCisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZS5pbXBsLlVuYXJ5Qm9vbGVhbk9wZXJhdG9ySW1wbCA8ZW0+VW5hcnkgQm9vbGVhbiBPcGVyYXRvcjwvZW0+fScgY2xhc3MuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUuaW1wbC5VbmFyeUJvb2xlYW5PcGVyYXRvckltcGwKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlLmltcGwuUHJlZGljYXRlUGFja2FnZUltcGwjZ2V0VW5hcnlCb29sZWFuT3BlcmF0b3IoKQorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQ2xhc3MgVU5BUllfQk9PTEVBTl9PUEVSQVRPUiA9IGVJTlNUQU5DRS5nZXRVbmFyeUJvb2xlYW5PcGVyYXRvcigpOworCisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+T3BlcmFuZDwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlIGZlYXR1cmUuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFUmVmZXJlbmNlIFVOQVJZX0JPT0xFQU5fT1BFUkFUT1JfX09QRVJBTkQgPSBlSU5TVEFOQ0UuZ2V0VW5hcnlCb29sZWFuT3BlcmF0b3JfT3BlcmFuZCgpOworCisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZS5pbXBsLlByZWRpY2F0ZUV4cHJlc3Npb25JbXBsIDxlbT5FeHByZXNzaW9uPC9lbT59JyBjbGFzcy4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZS5pbXBsLlByZWRpY2F0ZUV4cHJlc3Npb25JbXBsCisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZS5pbXBsLlByZWRpY2F0ZVBhY2thZ2VJbXBsI2dldFByZWRpY2F0ZUV4cHJlc3Npb24oKQorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQ2xhc3MgUFJFRElDQVRFX0VYUFJFU1NJT04gPSBlSU5TVEFOQ0UuZ2V0UHJlZGljYXRlRXhwcmVzc2lvbigpOworCisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+UHJlZGljYXRlPC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UgZmVhdHVyZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVSZWZlcmVuY2UgUFJFRElDQVRFX0VYUFJFU1NJT05fX1BSRURJQ0FURSA9IGVJTlNUQU5DRS5nZXRQcmVkaWNhdGVFeHByZXNzaW9uX1ByZWRpY2F0ZSgpOworCisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZS5pbXBsLklkZW50aWZpYWJsZVByZWRpY2F0ZUltcGwgPGVtPklkZW50aWZpYWJsZSBQcmVkaWNhdGU8L2VtPn0nIGNsYXNzLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlLmltcGwuSWRlbnRpZmlhYmxlUHJlZGljYXRlSW1wbAorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUuaW1wbC5QcmVkaWNhdGVQYWNrYWdlSW1wbCNnZXRJZGVudGlmaWFibGVQcmVkaWNhdGUoKQorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQ2xhc3MgSURFTlRJRklBQkxFX1BSRURJQ0FURSA9IGVJTlNUQU5DRS5nZXRJZGVudGlmaWFibGVQcmVkaWNhdGUoKTsKKworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUuaW1wbC5JZGVudGlmaWFibGVQcmVkaWNhdGVFeHByZXNzaW9uSW1wbCA8ZW0+SWRlbnRpZmlhYmxlIFByZWRpY2F0ZSBFeHByZXNzaW9uPC9lbT59JyBjbGFzcy4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZS5pbXBsLklkZW50aWZpYWJsZVByZWRpY2F0ZUV4cHJlc3Npb25JbXBsCisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZS5pbXBsLlByZWRpY2F0ZVBhY2thZ2VJbXBsI2dldElkZW50aWZpYWJsZVByZWRpY2F0ZUV4cHJlc3Npb24oKQorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQ2xhc3MgSURFTlRJRklBQkxFX1BSRURJQ0FURV9FWFBSRVNTSU9OID0gZUlOU1RBTkNFLmdldElkZW50aWZpYWJsZVByZWRpY2F0ZUV4cHJlc3Npb24oKTsKKworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUuaW1wbC5JZGVudGlmaWFibGVUZXN0SW1wbCA8ZW0+SWRlbnRpZmlhYmxlIFRlc3Q8L2VtPn0nIGNsYXNzLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlLmltcGwuSWRlbnRpZmlhYmxlVGVzdEltcGwKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlLmltcGwuUHJlZGljYXRlUGFja2FnZUltcGwjZ2V0SWRlbnRpZmlhYmxlVGVzdCgpCisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVDbGFzcyBJREVOVElGSUFCTEVfVEVTVCA9IGVJTlNUQU5DRS5nZXRJZGVudGlmaWFibGVUZXN0KCk7CisKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlLmltcGwuVGltZVRlc3RJbXBsIDxlbT5UaW1lIFRlc3Q8L2VtPn0nIGNsYXNzLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlLmltcGwuVGltZVRlc3RJbXBsCisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZS5pbXBsLlByZWRpY2F0ZVBhY2thZ2VJbXBsI2dldFRpbWVUZXN0KCkKKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUNsYXNzIFRJTUVfVEVTVCA9IGVJTlNUQU5DRS5nZXRUaW1lVGVzdCgpOworCisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZS5pbXBsLkVsYXBzZWRUaW1lVGVzdEltcGwgPGVtPkVsYXBzZWQgVGltZSBUZXN0PC9lbT59JyBjbGFzcy4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZS5pbXBsLkVsYXBzZWRUaW1lVGVzdEltcGwKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlLmltcGwuUHJlZGljYXRlUGFja2FnZUltcGwjZ2V0RWxhcHNlZFRpbWVUZXN0KCkKKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUNsYXNzIEVMQVBTRURfVElNRV9URVNUID0gZUlOU1RBTkNFLmdldEVsYXBzZWRUaW1lVGVzdCgpOworCisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+UmVmZXJlbmNlIFRpbWUgVmFsaWQ8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUF0dHJpYnV0ZSBFTEFQU0VEX1RJTUVfVEVTVF9fUkVGRVJFTkNFX1RJTUVfVkFMSUQgPSBlSU5TVEFOQ0UuZ2V0RWxhcHNlZFRpbWVUZXN0X1JlZmVyZW5jZVRpbWVWYWxpZCgpOworCisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+RWxhcHNlZCBNaWxsaXNlY29uZHM8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUF0dHJpYnV0ZSBFTEFQU0VEX1RJTUVfVEVTVF9fRUxBUFNFRF9NSUxMSVNFQ09ORFMgPSBlSU5TVEFOQ0UuZ2V0RWxhcHNlZFRpbWVUZXN0X0VsYXBzZWRNaWxsaXNlY29uZHMoKTsKKworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPk51bWJlcm9mIERheXM8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUF0dHJpYnV0ZSBFTEFQU0VEX1RJTUVfVEVTVF9fTlVNQkVST0ZfREFZUyA9IGVJTlNUQU5DRS5nZXRFbGFwc2VkVGltZVRlc3RfTnVtYmVyb2ZEYXlzKCk7CisKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5SZWZlcmVuY2UgVGltZTwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlIGZlYXR1cmUuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFUmVmZXJlbmNlIEVMQVBTRURfVElNRV9URVNUX19SRUZFUkVOQ0VfVElNRSA9IGVJTlNUQU5DRS5nZXRFbGFwc2VkVGltZVRlc3RfUmVmZXJlbmNlVGltZSgpOworCisJfQorCit9IC8vUHJlZGljYXRlUGFja2FnZQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9wcmVkaWNhdGUvUHJlZGljYXRlUmVmZXJlbmNlLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3ByZWRpY2F0ZS9QcmVkaWNhdGVSZWZlcmVuY2UuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wOWY3NmY3Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9wcmVkaWNhdGUvUHJlZGljYXRlUmVmZXJlbmNlLmphdmEKQEAgLTAsMCArMSwzOCBAQAorLy8gUHJlZGljYXRlUmVmZXJlbmNlLmphdmEKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKgorICogQW4gPGNvZGU+UHJlZGljYXRlUmVmZXJlbmNlPC9jb2RlPiBpcyBhIHtAbGluayBQcmVkaWNhdGV9IHdob3NlIHZhbHVlIGlzIHRoZQorICogcmVzdWx0IG9mIGV2YWx1YXRpbmcgYSByZWZlcmVuY2VkIChpLmUuLCBub24tY29udGFpbm1lbnQpIHtAbGluayBQcmVkaWNhdGV9LgorICogCisgKiBAc2VlIFRlc3QKKyAqIEBzZWUgQm9vbGVhbkV4cHJlc3Npb24KKyAqIEBtb2RlbAorICovCitwdWJsaWMgaW50ZXJmYWNlIFByZWRpY2F0ZVJlZmVyZW5jZSBleHRlbmRzIFByZWRpY2F0ZSB7CisJLyoqCisJICogQG1vZGVsIGNvbnRhaW5tZW50PSJmYWxzZSIKKwkgKi8KKwlQcmVkaWNhdGUgZ2V0UHJlZGljYXRlKCk7CisKKwkvKioKKwkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlLlByZWRpY2F0ZVJlZmVyZW5jZSNnZXRQcmVkaWNhdGUgPGVtPlByZWRpY2F0ZTwvZW0+fScgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+UHJlZGljYXRlPC9lbT4nIHJlZmVyZW5jZS4KKwkgKiBAc2VlICNnZXRQcmVkaWNhdGUoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwl2b2lkIHNldFByZWRpY2F0ZShQcmVkaWNhdGUgdmFsdWUpOworfSAvLyBQcmVkaWNhdGVSZWZlcmVuY2UKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3ByZWRpY2F0ZS9UZXN0LmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3ByZWRpY2F0ZS9UZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWM1ZjBjZQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvcHJlZGljYXRlL1Rlc3QuamF2YQpAQCAtMCwwICsxLDI2IEBACisvLyBUZXN0LmphdmEKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKgorICogQSA8Y29kZT5UZXN0PC9jb2RlPiBpcyBhIHtAbGluayBQcmVkaWNhdGV9IHdob3NlIHZhbHVlIGlzIHRoZSByZXN1bHQgb2YKKyAqIGV4ZWN1dGluZyB1bmRlcmx5aW5nIGNvZGUgcmF0aGVyIHRoYW4gZnJvbSB0aGUgZXZhbHVhdGlvbiBvZiBzb21lIGJvb2xlYW4KKyAqIGV4cHJlc3Npb24uCisgKiAKKyAqIEBzZWUgQm9vbGVhbkV4cHJlc3Npb24KKyAqIEBzZWUgUHJlZGljYXRlUmVmZXJlbmNlCisgKiBAbW9kZWwgYWJzdHJhY3Q9InRydWUiCisgKi8KK3B1YmxpYyBpbnRlcmZhY2UgVGVzdCBleHRlbmRzIFByZWRpY2F0ZSB7CisJLy8gTm90aGluZworfSAvLyBUZXN0ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9wcmVkaWNhdGUvVGltZVRlc3QuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvcHJlZGljYXRlL1RpbWVUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjc5MTRlMwotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvcHJlZGljYXRlL1RpbWVUZXN0LmphdmEKQEAgLTAsMCArMSwyNiBAQAorLy8gVGltZVRlc3QuamF2YQorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCisvKioKKyAqIEEgPGNvZGU+VGltZVRlc3Q8L2NvZGU+IGlzIGEgPGNvZGU+VGVzdDwvY29kZT4gdGhhdCByZXR1cm5zIGEgYm9vbGVhbiB2YWx1ZQorICogZGVwZW5kaW5nIHVwb24gdGhlIGNvbXBhcmlzb24gb2YgdGhlIHRpbWUgdmFsdWVzIHBhc3NlZCB0bworICoge0BsaW5rICNldmFsdWF0ZShvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuU1RFTVRpbWUsIGxvbmcsIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5EZWNvcmF0b3IpfQorICogYW5kIGEgcmVmZXJlbmNlIHRpbWUgdmFsdWUuCisgKiAKKyAqIEBtb2RlbCBhYnN0cmFjdD0idHJ1ZSIKKyAqLworcHVibGljIGludGVyZmFjZSBUaW1lVGVzdCBleHRlbmRzIFRlc3QgeworCS8vIE5vdGhpbmcJCit9IC8vIFRpbWVUZXN0ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9wcmVkaWNhdGUvVHJ1ZS5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9wcmVkaWNhdGUvVHJ1ZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEwNDEyYWQKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3ByZWRpY2F0ZS9UcnVlLmphdmEKQEAgLTAsMCArMSwyMyBAQAorLy8gVHJ1ZS5qYXZhCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGU7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioKKyAqIDxjb2RlPlRydWU8L2NvZGU+IGlzIGEge0BsaW5rIFRlc3R9IHdob3NlIHZhbHVlIGlzIGFsd2F5cyA8Y29kZT50cnVlPC9jb2RlPi4KKyAqIAorICogQHNlZSBGYWxzZQorICogQG1vZGVsCisgKi8KK3B1YmxpYyBpbnRlcmZhY2UgVHJ1ZSBleHRlbmRzIFRlc3QgeworCS8vIE5vdGhpbmcKK30gLy8gVHJ1ZQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvcHJlZGljYXRlL1VuYXJ5Qm9vbGVhbk9wZXJhdG9yLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3ByZWRpY2F0ZS9VbmFyeUJvb2xlYW5PcGVyYXRvci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRiOWE1ODIKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3ByZWRpY2F0ZS9VbmFyeUJvb2xlYW5PcGVyYXRvci5qYXZhCkBAIC0wLDAgKzEsMzkgQEAKKy8vIFVuYXJ5Qm9vbGVhbk9wZXJhdG9yLmphdmEKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKgorICogQW4gPGNvZGU+VW5hcnlCb29sZWFuT3BlcmF0b3I8L2NvZGU+IGlzIGEge0BsaW5rIEJvb2xlYW5PcGVyYXRvcn0gd2hvc2UgdmFsdWUKKyAqIGlzIHRoZSByZXN1bHQgb2YgZXZhbHVhdGluZyBhIGJvb2xlYW4gb3BlcmF0b3IgdGhhdCB0YWtlcyBvbmx5IGEgc2luZ2xlCisgKiBvcGVyYW5kLgorICogCisgKiBAc2VlIE5hcnlCb29sZWFuT3BlcmF0b3IKKyAqIEBtb2RlbCBhYnN0cmFjdD0idHJ1ZSIKKyAqLworcHVibGljIGludGVyZmFjZSBVbmFyeUJvb2xlYW5PcGVyYXRvciBleHRlbmRzIEJvb2xlYW5PcGVyYXRvciB7CisJLyoqCisJICogQHJldHVybiB0aGUgb3BlcmFuZCBvZiB0aGUgb3BlcmF0b3IKKwkgKiBAbW9kZWwgY29udGFpbm1lbnQ9InRydWUiCisJICovCisJUHJlZGljYXRlIGdldE9wZXJhbmQoKTsKKworCS8qKgorCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUuVW5hcnlCb29sZWFuT3BlcmF0b3IjZ2V0T3BlcmFuZCA8ZW0+T3BlcmFuZDwvZW0+fScgY29udGFpbm1lbnQgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+T3BlcmFuZDwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UuCisJICogQHNlZSAjZ2V0T3BlcmFuZCgpCisJICogQGdlbmVyYXRlZAorCSAqLworCXZvaWQgc2V0T3BlcmFuZChQcmVkaWNhdGUgdmFsdWUpOworfSAvLyBVbmFyeUJvb2xlYW5PcGVyYXRvcgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvcHJlZGljYXRlL2ltcGwvQW5kSW1wbC5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9wcmVkaWNhdGUvaW1wbC9BbmRJbXBsLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWYzODU2MAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvcHJlZGljYXRlL2ltcGwvQW5kSW1wbC5qYXZhCkBAIC0wLDAgKzEsNjYgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZS5pbXBsOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkdyYXBoOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5TVEVNVGltZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlLkFuZDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlLlByZWRpY2F0ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlLlByZWRpY2F0ZVBhY2thZ2U7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIEFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5BbmQ8L2I+PC9lbT4nLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiA8cD4KKyAqIDwvcD4KKyAqCisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBBbmRJbXBsIGV4dGVuZHMgTmFyeUJvb2xlYW5PcGVyYXRvckltcGwgaW1wbGVtZW50cyBBbmQgeworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBBbmRJbXBsKCkgeworCQlzdXBlcigpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCBFQ2xhc3MgZVN0YXRpY0NsYXNzKCkgeworCQlyZXR1cm4gUHJlZGljYXRlUGFja2FnZS5MaXRlcmFscy5BTkQ7CisJfQorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlLmltcGwuUHJlZGljYXRlSW1wbCNldmFsdWF0ZShvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuU1RFTVRpbWUsIGxvbmcsIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5EZWNvcmF0b3IpCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIGJvb2xlYW4gZXZhbHVhdGUoU1RFTVRpbWUgdGltZSwgbG9uZyB0aW1lclBlcmlvZCwgR3JhcGggZ3JhcGgpIHsKKwkJYm9vbGVhbiByZXRWYWx1ZSA9IHRydWU7CisJCWZvciAoUHJlZGljYXRlIHByZWRpY2F0ZSA6IGdldE9wZXJhbmRzKCkpIHsKKwkJCXJldFZhbHVlID0gcHJlZGljYXRlLmV2YWx1YXRlKHRpbWUsIHRpbWVyUGVyaW9kLCAgZ3JhcGgpOworCQkJLy8gSXMgaXQgZmFsc2UKKwkJCWlmICghcmV0VmFsdWUpIHsKKwkJCQkvLyBZZXMKKwkJCQlicmVhazsKKwkJCX0gLy8gaWYgCisJCX0gLy8gZm9yIGVhY2ggUHJlZGljYXRlCisJCXJldHVybiByZXRWYWx1ZTsKKwl9IC8vIGV2YWx1YXRlCit9IC8vQW5kSW1wbApkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9wcmVkaWNhdGUvaW1wbC9Cb29sZWFuRXhwcmVzc2lvbkltcGwuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvcHJlZGljYXRlL2ltcGwvQm9vbGVhbkV4cHJlc3Npb25JbXBsLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGI5NzQ1YQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvcHJlZGljYXRlL2ltcGwvQm9vbGVhbkV4cHJlc3Npb25JbXBsLmphdmEKQEAgLTAsMCArMSw0NyBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlLmltcGw7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzczsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlLkJvb2xlYW5FeHByZXNzaW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUuUHJlZGljYXRlUGFja2FnZTsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPkJvb2xlYW4gRXhwcmVzc2lvbjwvYj48L2VtPicuCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIDxwPgorICogPC9wPgorICoKKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGFic3RyYWN0IGNsYXNzIEJvb2xlYW5FeHByZXNzaW9uSW1wbCBleHRlbmRzIFByZWRpY2F0ZUltcGwgaW1wbGVtZW50cyBCb29sZWFuRXhwcmVzc2lvbiB7CisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIEJvb2xlYW5FeHByZXNzaW9uSW1wbCgpIHsKKwkJc3VwZXIoKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgRUNsYXNzIGVTdGF0aWNDbGFzcygpIHsKKwkJcmV0dXJuIFByZWRpY2F0ZVBhY2thZ2UuTGl0ZXJhbHMuQk9PTEVBTl9FWFBSRVNTSU9OOworCX0KKworfSAvL0Jvb2xlYW5FeHByZXNzaW9uSW1wbApkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9wcmVkaWNhdGUvaW1wbC9Cb29sZWFuT3BlcmF0b3JJbXBsLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3ByZWRpY2F0ZS9pbXBsL0Jvb2xlYW5PcGVyYXRvckltcGwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iODcyY2RkCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9wcmVkaWNhdGUvaW1wbC9Cb29sZWFuT3BlcmF0b3JJbXBsLmphdmEKQEAgLTAsMCArMSw0NyBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlLmltcGw7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzczsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlLkJvb2xlYW5PcGVyYXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlLlByZWRpY2F0ZVBhY2thZ2U7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIEFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5Cb29sZWFuIE9wZXJhdG9yPC9iPjwvZW0+Jy4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogPHA+CisgKiA8L3A+CisgKgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgYWJzdHJhY3QgY2xhc3MgQm9vbGVhbk9wZXJhdG9ySW1wbCBleHRlbmRzIEJvb2xlYW5FeHByZXNzaW9uSW1wbCBpbXBsZW1lbnRzIEJvb2xlYW5PcGVyYXRvciB7CisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIEJvb2xlYW5PcGVyYXRvckltcGwoKSB7CisJCXN1cGVyKCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIEVDbGFzcyBlU3RhdGljQ2xhc3MoKSB7CisJCXJldHVybiBQcmVkaWNhdGVQYWNrYWdlLkxpdGVyYWxzLkJPT0xFQU5fT1BFUkFUT1I7CisJfQorCit9IC8vQm9vbGVhbk9wZXJhdG9ySW1wbApkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9wcmVkaWNhdGUvaW1wbC9FbGFwc2VkVGltZVRlc3RJbXBsLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3ByZWRpY2F0ZS9pbXBsL0VsYXBzZWRUaW1lVGVzdEltcGwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZjVmZWEwCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9wcmVkaWNhdGUvaW1wbC9FbGFwc2VkVGltZVRlc3RJbXBsLmphdmEKQEAgLTAsMCArMSwzNzQgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZS5pbXBsOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb25DaGFpbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5JbnRlcm5hbEVPYmplY3Q7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLmltcGwuRU5vdGlmaWNhdGlvbkltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnV0aWwuRWNvcmVVdGlsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5HcmFwaDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuTW9kZWxGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5TVEVNVGltZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlLkVsYXBzZWRUaW1lVGVzdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlLlByZWRpY2F0ZVBhY2thZ2U7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIEFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5FbGFwc2VkIFRpbWUgVGVzdDwvYj48L2VtPicuCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIDxwPgorICogVGhlIGZvbGxvd2luZyBmZWF0dXJlcyBhcmUgaW1wbGVtZW50ZWQ6CisgKiA8dWw+CisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZS5pbXBsLkVsYXBzZWRUaW1lVGVzdEltcGwjaXNSZWZlcmVuY2VUaW1lVmFsaWQgPGVtPlJlZmVyZW5jZSBUaW1lIFZhbGlkPC9lbT59PC9saT4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlLmltcGwuRWxhcHNlZFRpbWVUZXN0SW1wbCNnZXRFbGFwc2VkTWlsbGlzZWNvbmRzIDxlbT5FbGFwc2VkIE1pbGxpc2Vjb25kczwvZW0+fTwvbGk+CisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZS5pbXBsLkVsYXBzZWRUaW1lVGVzdEltcGwjZ2V0TnVtYmVyb2ZEYXlzIDxlbT5OdW1iZXJvZiBEYXlzPC9lbT59PC9saT4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlLmltcGwuRWxhcHNlZFRpbWVUZXN0SW1wbCNnZXRSZWZlcmVuY2VUaW1lIDxlbT5SZWZlcmVuY2UgVGltZTwvZW0+fTwvbGk+CisgKiA8L3VsPgorICogPC9wPgorICoKKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIEVsYXBzZWRUaW1lVGVzdEltcGwgZXh0ZW5kcyBUaW1lVGVzdEltcGwgaW1wbGVtZW50cyBFbGFwc2VkVGltZVRlc3QgeworCS8qKgorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSAne0BsaW5rICNpc1JlZmVyZW5jZVRpbWVWYWxpZCgpIDxlbT5SZWZlcmVuY2UgVGltZSBWYWxpZDwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjaXNSZWZlcmVuY2VUaW1lVmFsaWQoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgYm9vbGVhbiBSRUZFUkVOQ0VfVElNRV9WQUxJRF9FREVGQVVMVCA9IGZhbHNlOworCisJLyoqCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjaXNSZWZlcmVuY2VUaW1lVmFsaWQoKSA8ZW0+UmVmZXJlbmNlIFRpbWUgVmFsaWQ8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI2lzUmVmZXJlbmNlVGltZVZhbGlkKCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgYm9vbGVhbiByZWZlcmVuY2VUaW1lVmFsaWQgPSBSRUZFUkVOQ0VfVElNRV9WQUxJRF9FREVGQVVMVDsKKworCS8qKgorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRFbGFwc2VkTWlsbGlzZWNvbmRzKCkgPGVtPkVsYXBzZWQgTWlsbGlzZWNvbmRzPC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNnZXRFbGFwc2VkTWlsbGlzZWNvbmRzKCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIGxvbmcgRUxBUFNFRF9NSUxMSVNFQ09ORFNfRURFRkFVTFQgPSAwTDsKKworCS8qKgorCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldEVsYXBzZWRNaWxsaXNlY29uZHMoKSA8ZW0+RWxhcHNlZCBNaWxsaXNlY29uZHM8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI2dldEVsYXBzZWRNaWxsaXNlY29uZHMoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBsb25nIGVsYXBzZWRNaWxsaXNlY29uZHMgPSBFTEFQU0VEX01JTExJU0VDT05EU19FREVGQVVMVDsKKworCS8qKgorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXROdW1iZXJvZkRheXMoKSA8ZW0+TnVtYmVyb2YgRGF5czwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZ2V0TnVtYmVyb2ZEYXlzKCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIGludCBOVU1CRVJPRl9EQVlTX0VERUZBVUxUID0gMDsKKworCS8qKgorCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldE51bWJlcm9mRGF5cygpIDxlbT5OdW1iZXJvZiBEYXlzPC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNnZXROdW1iZXJvZkRheXMoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBpbnQgbnVtYmVyb2ZEYXlzID0gTlVNQkVST0ZfREFZU19FREVGQVVMVDsKKworCS8qKgorCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldFJlZmVyZW5jZVRpbWUoKSA8ZW0+UmVmZXJlbmNlIFRpbWU8L2VtPn0nIGNvbnRhaW5tZW50IHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI2dldFJlZmVyZW5jZVRpbWUoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBTVEVNVGltZSByZWZlcmVuY2VUaW1lOworCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCXByb3RlY3RlZCBFbGFwc2VkVGltZVRlc3RJbXBsKCkgeworCQlzdXBlcigpOworCQlzZXRSZWZlcmVuY2VUaW1lKE1vZGVsRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlU1RFTVRpbWUoKSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIEVDbGFzcyBlU3RhdGljQ2xhc3MoKSB7CisJCXJldHVybiBQcmVkaWNhdGVQYWNrYWdlLkxpdGVyYWxzLkVMQVBTRURfVElNRV9URVNUOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBib29sZWFuIGlzUmVmZXJlbmNlVGltZVZhbGlkKCkgeworCQlyZXR1cm4gcmVmZXJlbmNlVGltZVZhbGlkOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIHNldFJlZmVyZW5jZVRpbWVWYWxpZChib29sZWFuIG5ld1JlZmVyZW5jZVRpbWVWYWxpZCkgeworCQlib29sZWFuIG9sZFJlZmVyZW5jZVRpbWVWYWxpZCA9IHJlZmVyZW5jZVRpbWVWYWxpZDsKKwkJcmVmZXJlbmNlVGltZVZhbGlkID0gbmV3UmVmZXJlbmNlVGltZVZhbGlkOworCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpCisJCQllTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBQcmVkaWNhdGVQYWNrYWdlLkVMQVBTRURfVElNRV9URVNUX19SRUZFUkVOQ0VfVElNRV9WQUxJRCwgb2xkUmVmZXJlbmNlVGltZVZhbGlkLCByZWZlcmVuY2VUaW1lVmFsaWQpKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgbG9uZyBnZXRFbGFwc2VkTWlsbGlzZWNvbmRzKCkgeworCQlyZXR1cm4gZWxhcHNlZE1pbGxpc2Vjb25kczsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgaW50IGdldE51bWJlcm9mRGF5cygpIHsKKwkJcmV0dXJuIG51bWJlcm9mRGF5czsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJcHVibGljIHZvaWQgc2V0TnVtYmVyb2ZEYXlzKGludCBuZXdOdW1iZXJvZkRheXMpIHsKKwkJaW50IG9sZE51bWJlcm9mRGF5cyA9IGdldE51bWJlcm9mRGF5cygpOworCQludW1iZXJvZkRheXMgPSBuZXdOdW1iZXJvZkRheXM7CisJCQorCQllbGFwc2VkTWlsbGlzZWNvbmRzID0gZ2V0TnVtYmVyb2ZEYXlzKCkgKiBTVEVNVGltZS5Vbml0cy5EQVkuZ2V0TWlsbGlzZWNvbmRzKCk7CisJCQorCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpCisJCQllTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBQcmVkaWNhdGVQYWNrYWdlLkVMQVBTRURfVElNRV9URVNUX19OVU1CRVJPRl9EQVlTLCBvbGROdW1iZXJvZkRheXMsIG51bWJlcm9mRGF5cykpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBTVEVNVGltZSBnZXRSZWZlcmVuY2VUaW1lKCkgeworCQlyZXR1cm4gcmVmZXJlbmNlVGltZTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgTm90aWZpY2F0aW9uQ2hhaW4gYmFzaWNTZXRSZWZlcmVuY2VUaW1lKFNURU1UaW1lIG5ld1JlZmVyZW5jZVRpbWUsIE5vdGlmaWNhdGlvbkNoYWluIG1zZ3MpIHsKKwkJU1RFTVRpbWUgb2xkUmVmZXJlbmNlVGltZSA9IHJlZmVyZW5jZVRpbWU7CisJCXJlZmVyZW5jZVRpbWUgPSBuZXdSZWZlcmVuY2VUaW1lOworCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpIHsKKwkJCUVOb3RpZmljYXRpb25JbXBsIG5vdGlmaWNhdGlvbiA9IG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBQcmVkaWNhdGVQYWNrYWdlLkVMQVBTRURfVElNRV9URVNUX19SRUZFUkVOQ0VfVElNRSwgb2xkUmVmZXJlbmNlVGltZSwgbmV3UmVmZXJlbmNlVGltZSk7CisJCQlpZiAobXNncyA9PSBudWxsKSBtc2dzID0gbm90aWZpY2F0aW9uOyBlbHNlIG1zZ3MuYWRkKG5vdGlmaWNhdGlvbik7CisJCX0KKwkJcmV0dXJuIG1zZ3M7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgc2V0UmVmZXJlbmNlVGltZShTVEVNVGltZSBuZXdSZWZlcmVuY2VUaW1lKSB7CisJCWlmIChuZXdSZWZlcmVuY2VUaW1lICE9IHJlZmVyZW5jZVRpbWUpIHsKKwkJCU5vdGlmaWNhdGlvbkNoYWluIG1zZ3MgPSBudWxsOworCQkJaWYgKHJlZmVyZW5jZVRpbWUgIT0gbnVsbCkKKwkJCQltc2dzID0gKChJbnRlcm5hbEVPYmplY3QpcmVmZXJlbmNlVGltZSkuZUludmVyc2VSZW1vdmUodGhpcywgRU9QUE9TSVRFX0ZFQVRVUkVfQkFTRSAtIFByZWRpY2F0ZVBhY2thZ2UuRUxBUFNFRF9USU1FX1RFU1RfX1JFRkVSRU5DRV9USU1FLCBudWxsLCBtc2dzKTsKKwkJCWlmIChuZXdSZWZlcmVuY2VUaW1lICE9IG51bGwpCisJCQkJbXNncyA9ICgoSW50ZXJuYWxFT2JqZWN0KW5ld1JlZmVyZW5jZVRpbWUpLmVJbnZlcnNlQWRkKHRoaXMsIEVPUFBPU0lURV9GRUFUVVJFX0JBU0UgLSBQcmVkaWNhdGVQYWNrYWdlLkVMQVBTRURfVElNRV9URVNUX19SRUZFUkVOQ0VfVElNRSwgbnVsbCwgbXNncyk7CisJCQltc2dzID0gYmFzaWNTZXRSZWZlcmVuY2VUaW1lKG5ld1JlZmVyZW5jZVRpbWUsIG1zZ3MpOworCQkJaWYgKG1zZ3MgIT0gbnVsbCkgbXNncy5kaXNwYXRjaCgpOworCQl9CisJCWVsc2UgaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQorCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgUHJlZGljYXRlUGFja2FnZS5FTEFQU0VEX1RJTUVfVEVTVF9fUkVGRVJFTkNFX1RJTUUsIG5ld1JlZmVyZW5jZVRpbWUsIG5ld1JlZmVyZW5jZVRpbWUpKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgTm90aWZpY2F0aW9uQ2hhaW4gZUludmVyc2VSZW1vdmUoSW50ZXJuYWxFT2JqZWN0IG90aGVyRW5kLCBpbnQgZmVhdHVyZUlELCBOb3RpZmljYXRpb25DaGFpbiBtc2dzKSB7CisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7CisJCQljYXNlIFByZWRpY2F0ZVBhY2thZ2UuRUxBUFNFRF9USU1FX1RFU1RfX1JFRkVSRU5DRV9USU1FOgorCQkJCXJldHVybiBiYXNpY1NldFJlZmVyZW5jZVRpbWUobnVsbCwgbXNncyk7CisJCX0KKwkJcmV0dXJuIHN1cGVyLmVJbnZlcnNlUmVtb3ZlKG90aGVyRW5kLCBmZWF0dXJlSUQsIG1zZ3MpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBPYmplY3QgZUdldChpbnQgZmVhdHVyZUlELCBib29sZWFuIHJlc29sdmUsIGJvb2xlYW4gY29yZVR5cGUpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJCWNhc2UgUHJlZGljYXRlUGFja2FnZS5FTEFQU0VEX1RJTUVfVEVTVF9fUkVGRVJFTkNFX1RJTUVfVkFMSUQ6CisJCQkJcmV0dXJuIGlzUmVmZXJlbmNlVGltZVZhbGlkKCk7CisJCQljYXNlIFByZWRpY2F0ZVBhY2thZ2UuRUxBUFNFRF9USU1FX1RFU1RfX0VMQVBTRURfTUlMTElTRUNPTkRTOgorCQkJCXJldHVybiBnZXRFbGFwc2VkTWlsbGlzZWNvbmRzKCk7CisJCQljYXNlIFByZWRpY2F0ZVBhY2thZ2UuRUxBUFNFRF9USU1FX1RFU1RfX05VTUJFUk9GX0RBWVM6CisJCQkJcmV0dXJuIGdldE51bWJlcm9mRGF5cygpOworCQkJY2FzZSBQcmVkaWNhdGVQYWNrYWdlLkVMQVBTRURfVElNRV9URVNUX19SRUZFUkVOQ0VfVElNRToKKwkJCQlyZXR1cm4gZ2V0UmVmZXJlbmNlVGltZSgpOworCQl9CisJCXJldHVybiBzdXBlci5lR2V0KGZlYXR1cmVJRCwgcmVzb2x2ZSwgY29yZVR5cGUpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGVTZXQoaW50IGZlYXR1cmVJRCwgT2JqZWN0IG5ld1ZhbHVlKSB7CisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7CisJCQljYXNlIFByZWRpY2F0ZVBhY2thZ2UuRUxBUFNFRF9USU1FX1RFU1RfX1JFRkVSRU5DRV9USU1FX1ZBTElEOgorCQkJCXNldFJlZmVyZW5jZVRpbWVWYWxpZCgoQm9vbGVhbiluZXdWYWx1ZSk7CisJCQkJcmV0dXJuOworCQkJY2FzZSBQcmVkaWNhdGVQYWNrYWdlLkVMQVBTRURfVElNRV9URVNUX19OVU1CRVJPRl9EQVlTOgorCQkJCXNldE51bWJlcm9mRGF5cygoSW50ZWdlciluZXdWYWx1ZSk7CisJCQkJcmV0dXJuOworCQkJY2FzZSBQcmVkaWNhdGVQYWNrYWdlLkVMQVBTRURfVElNRV9URVNUX19SRUZFUkVOQ0VfVElNRToKKwkJCQlzZXRSZWZlcmVuY2VUaW1lKChTVEVNVGltZSluZXdWYWx1ZSk7CisJCQkJcmV0dXJuOworCQl9CisJCXN1cGVyLmVTZXQoZmVhdHVyZUlELCBuZXdWYWx1ZSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgZVVuc2V0KGludCBmZWF0dXJlSUQpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJCWNhc2UgUHJlZGljYXRlUGFja2FnZS5FTEFQU0VEX1RJTUVfVEVTVF9fUkVGRVJFTkNFX1RJTUVfVkFMSUQ6CisJCQkJc2V0UmVmZXJlbmNlVGltZVZhbGlkKFJFRkVSRU5DRV9USU1FX1ZBTElEX0VERUZBVUxUKTsKKwkJCQlyZXR1cm47CisJCQljYXNlIFByZWRpY2F0ZVBhY2thZ2UuRUxBUFNFRF9USU1FX1RFU1RfX05VTUJFUk9GX0RBWVM6CisJCQkJc2V0TnVtYmVyb2ZEYXlzKE5VTUJFUk9GX0RBWVNfRURFRkFVTFQpOworCQkJCXJldHVybjsKKwkJCWNhc2UgUHJlZGljYXRlUGFja2FnZS5FTEFQU0VEX1RJTUVfVEVTVF9fUkVGRVJFTkNFX1RJTUU6CisJCQkJc2V0UmVmZXJlbmNlVGltZSgoU1RFTVRpbWUpbnVsbCk7CisJCQkJcmV0dXJuOworCQl9CisJCXN1cGVyLmVVbnNldChmZWF0dXJlSUQpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBib29sZWFuIGVJc1NldChpbnQgZmVhdHVyZUlEKSB7CisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7CisJCQljYXNlIFByZWRpY2F0ZVBhY2thZ2UuRUxBUFNFRF9USU1FX1RFU1RfX1JFRkVSRU5DRV9USU1FX1ZBTElEOgorCQkJCXJldHVybiByZWZlcmVuY2VUaW1lVmFsaWQgIT0gUkVGRVJFTkNFX1RJTUVfVkFMSURfRURFRkFVTFQ7CisJCQljYXNlIFByZWRpY2F0ZVBhY2thZ2UuRUxBUFNFRF9USU1FX1RFU1RfX0VMQVBTRURfTUlMTElTRUNPTkRTOgorCQkJCXJldHVybiBlbGFwc2VkTWlsbGlzZWNvbmRzICE9IEVMQVBTRURfTUlMTElTRUNPTkRTX0VERUZBVUxUOworCQkJY2FzZSBQcmVkaWNhdGVQYWNrYWdlLkVMQVBTRURfVElNRV9URVNUX19OVU1CRVJPRl9EQVlTOgorCQkJCXJldHVybiBudW1iZXJvZkRheXMgIT0gTlVNQkVST0ZfREFZU19FREVGQVVMVDsKKwkJCWNhc2UgUHJlZGljYXRlUGFja2FnZS5FTEFQU0VEX1RJTUVfVEVTVF9fUkVGRVJFTkNFX1RJTUU6CisJCQkJcmV0dXJuIHJlZmVyZW5jZVRpbWUgIT0gbnVsbDsKKwkJfQorCQlyZXR1cm4gc3VwZXIuZUlzU2V0KGZlYXR1cmVJRCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIFN0cmluZyB0b1N0cmluZygpIHsKKwkJaWYgKGVJc1Byb3h5KCkpIHJldHVybiBzdXBlci50b1N0cmluZygpOworCisJCVN0cmluZ0J1ZmZlciByZXN1bHQgPSBuZXcgU3RyaW5nQnVmZmVyKHN1cGVyLnRvU3RyaW5nKCkpOworCQlyZXN1bHQuYXBwZW5kKCIgKHJlZmVyZW5jZVRpbWVWYWxpZDogIik7IC8vJE5PTi1OTFMtMSQKKwkJcmVzdWx0LmFwcGVuZChyZWZlcmVuY2VUaW1lVmFsaWQpOworCQlyZXN1bHQuYXBwZW5kKCIsIGVsYXBzZWRNaWxsaXNlY29uZHM6ICIpOyAvLyROT04tTkxTLTEkCisJCXJlc3VsdC5hcHBlbmQoZWxhcHNlZE1pbGxpc2Vjb25kcyk7CisJCXJlc3VsdC5hcHBlbmQoIiwgbnVtYmVyb2ZEYXlzOiAiKTsgLy8kTk9OLU5MUy0xJAorCQlyZXN1bHQuYXBwZW5kKG51bWJlcm9mRGF5cyk7CisJCXJlc3VsdC5hcHBlbmQoJyknKTsKKwkJcmV0dXJuIHJlc3VsdC50b1N0cmluZygpOworCX0KKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZS5pbXBsLlByZWRpY2F0ZUltcGwjZXZhbHVhdGUob3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLlNURU1UaW1lLCBsb25nLCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuRGVjb3JhdG9yKQorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBib29sZWFuIGV2YWx1YXRlKFNURU1UaW1lIHRpbWUsIGxvbmcgdGltZXJQZXJpb2QsIEdyYXBoIGdyYXBoKSB7CisJCWJvb2xlYW4gcmV0VmFsdWUgPSBmYWxzZTsKKwkJLy8gSXMgdGhlIHJlZmVyZW5jZSB0aW1lIHZhbGlkPworCQlpZiAoaXNSZWZlcmVuY2VUaW1lVmFsaWQoKSkgeworCQkJLy8gWWVzCisJCQlmaW5hbCBsb25nIGVsYXBzZWRUaW1lTVMgPSB0aW1lLmdldFRpbWUoKS5nZXRUaW1lKCkgLSBnZXRSZWZlcmVuY2VUaW1lKCkuZ2V0VGltZSgpLmdldFRpbWUoKTsKKwkJCS8vIEhhcyBlbm91Z2ggdGltZSBnb25lIGJ5PworCQkJcmV0VmFsdWUgPSBlbGFwc2VkVGltZU1TID49IGdldEVsYXBzZWRNaWxsaXNlY29uZHMoKTsKKwkJfSAvLyBpZiByZWZlcmVuY2UgdGltZSB2YWxpZD8KKwkJZWxzZSB7CisJCQkvLyBObworCQkJLy8gVGhpcyBtdXN0IGJlIHRoZSBmaXJzdCB0aW1lIHRoaXMgaGFzIGJlZW4gY2FsbGVkIHNvIHRoaXMgbXVzdCBiZQorCQkJLy8gdGhlIHN0YXJ0IG9mIHRoZSBzaW11bGF0aW9uLiBSZW1lbWJlciB0aGUgdGltZSB2YWx1ZSBwYXNzZWQgaW4gYXMKKwkJCS8vIHRoZSByZWZlcmVuY2UgdmFsdWUuCisJCQkKKwkJCVNURU1UaW1lIG5ld1RpbWUgPSAoU1RFTVRpbWUpRWNvcmVVdGlsLmNvcHkodGltZSk7CisJCQluZXdUaW1lID0gbmV3VGltZS5hZGRJbmNyZW1lbnQoLXRpbWVyUGVyaW9kKTsgLy8gU3Vic3RyYWN0IG9uZSB0aW1lIHBlcmlvZAorCQkJc2V0UmVmZXJlbmNlVGltZShuZXdUaW1lKTsKKwkJCXNldFJlZmVyZW5jZVRpbWVWYWxpZCh0cnVlKTsJCQkKKwkJfSAvLyBlbHNlCisJCQorCQlyZXR1cm4gcmV0VmFsdWU7CisJfSAvLyBldmFsdWF0ZQorCQorfSAvL0VsYXBzZWRUaW1lVGVzdEltcGwKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvcHJlZGljYXRlL2ltcGwvRmFsc2VJbXBsLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3ByZWRpY2F0ZS9pbXBsL0ZhbHNlSW1wbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNiY2Y3ODcKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3ByZWRpY2F0ZS9pbXBsL0ZhbHNlSW1wbC5qYXZhCkBAIC0wLDAgKzEsNTcgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZS5pbXBsOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkdyYXBoOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5TVEVNVGltZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlLkZhbHNlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUuUHJlZGljYXRlUGFja2FnZTsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPkZhbHNlPC9iPjwvZW0+Jy4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogPHA+CisgKiA8L3A+CisgKgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgRmFsc2VJbXBsIGV4dGVuZHMgVGVzdEltcGwgaW1wbGVtZW50cyBGYWxzZSB7CisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIEZhbHNlSW1wbCgpIHsKKwkJc3VwZXIoKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgRUNsYXNzIGVTdGF0aWNDbGFzcygpIHsKKwkJcmV0dXJuIFByZWRpY2F0ZVBhY2thZ2UuTGl0ZXJhbHMuRkFMU0U7CisJfQorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlLmltcGwuUHJlZGljYXRlSW1wbCNldmFsdWF0ZShvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuU1RFTVRpbWUsIGxvbmcsIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5EZWNvcmF0b3IpCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIGJvb2xlYW4gZXZhbHVhdGUoU1RFTVRpbWUgdGltZSwgbG9uZyB0aW1lclBlcmlvZCwgR3JhcGggZ3JhcGgpIHsKKwkJcmV0dXJuIGZhbHNlOworCX0KKwkKK30gLy9GYWxzZUltcGwKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvcHJlZGljYXRlL2ltcGwvSWRlbnRpZmlhYmxlUHJlZGljYXRlRXhwcmVzc2lvbkltcGwuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvcHJlZGljYXRlL2ltcGwvSWRlbnRpZmlhYmxlUHJlZGljYXRlRXhwcmVzc2lvbkltcGwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MGUyNzE1Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9wcmVkaWNhdGUvaW1wbC9JZGVudGlmaWFibGVQcmVkaWNhdGVFeHByZXNzaW9uSW1wbC5qYXZhCkBAIC0wLDAgKzEsMjcwIEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUuaW1wbDsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uQ2hhaW47CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzczsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuSW50ZXJuYWxFT2JqZWN0OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5pbXBsLkVOb3RpZmljYXRpb25JbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkNvbXBvc2VkQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1MYWJlbFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uSWRlbnRpZmlhYmxlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5HcmFwaDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuU1RFTVRpbWU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZS5Cb29sZWFuRXhwcmVzc2lvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlLklkZW50aWZpYWJsZVByZWRpY2F0ZUV4cHJlc3Npb247CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZS5QcmVkaWNhdGU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZS5QcmVkaWNhdGVFeHByZXNzaW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUuUHJlZGljYXRlUGFja2FnZTsKKworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiBBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+SWRlbnRpZmlhYmxlIFByZWRpY2F0ZSBFeHByZXNzaW9uPC9iPjwvZW0+Jy4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogPHA+CisgKiBUaGUgZm9sbG93aW5nIGZlYXR1cmVzIGFyZSBpbXBsZW1lbnRlZDoKKyAqIDx1bD4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlLmltcGwuSWRlbnRpZmlhYmxlUHJlZGljYXRlRXhwcmVzc2lvbkltcGwjZ2V0UHJlZGljYXRlIDxlbT5QcmVkaWNhdGU8L2VtPn08L2xpPgorICogPC91bD4KKyAqIDwvcD4KKyAqCisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBJZGVudGlmaWFibGVQcmVkaWNhdGVFeHByZXNzaW9uSW1wbCBleHRlbmRzIElkZW50aWZpYWJsZVByZWRpY2F0ZUltcGwgaW1wbGVtZW50cyBJZGVudGlmaWFibGVQcmVkaWNhdGVFeHByZXNzaW9uIHsKKwkvKioKKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRQcmVkaWNhdGUoKSA8ZW0+UHJlZGljYXRlPC9lbT59JyBjb250YWlubWVudCByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNnZXRQcmVkaWNhdGUoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBQcmVkaWNhdGUgcHJlZGljYXRlOworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBJZGVudGlmaWFibGVQcmVkaWNhdGVFeHByZXNzaW9uSW1wbCgpIHsKKwkJc3VwZXIoKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJcHVibGljIHZvaWQgcmVzZXQoKSB7CisJCWlmKHRoaXMuZ2V0UHJlZGljYXRlKCkgIT0gbnVsbCkKKwkJCXRoaXMuZ2V0UHJlZGljYXRlKCkucmVzZXQoKTsKKwl9CisJCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIEVDbGFzcyBlU3RhdGljQ2xhc3MoKSB7CisJCXJldHVybiBQcmVkaWNhdGVQYWNrYWdlLkxpdGVyYWxzLklERU5USUZJQUJMRV9QUkVESUNBVEVfRVhQUkVTU0lPTjsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgUHJlZGljYXRlIGdldFByZWRpY2F0ZSgpIHsKKwkJcmV0dXJuIHByZWRpY2F0ZTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgTm90aWZpY2F0aW9uQ2hhaW4gYmFzaWNTZXRQcmVkaWNhdGUoUHJlZGljYXRlIG5ld1ByZWRpY2F0ZSwgTm90aWZpY2F0aW9uQ2hhaW4gbXNncykgeworCQlQcmVkaWNhdGUgb2xkUHJlZGljYXRlID0gcHJlZGljYXRlOworCQlwcmVkaWNhdGUgPSBuZXdQcmVkaWNhdGU7CisJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkgeworCQkJRU5vdGlmaWNhdGlvbkltcGwgbm90aWZpY2F0aW9uID0gbmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIFByZWRpY2F0ZVBhY2thZ2UuSURFTlRJRklBQkxFX1BSRURJQ0FURV9FWFBSRVNTSU9OX19QUkVESUNBVEUsIG9sZFByZWRpY2F0ZSwgbmV3UHJlZGljYXRlKTsKKwkJCWlmIChtc2dzID09IG51bGwpIG1zZ3MgPSBub3RpZmljYXRpb247IGVsc2UgbXNncy5hZGQobm90aWZpY2F0aW9uKTsKKwkJfQorCQlyZXR1cm4gbXNnczsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRQcmVkaWNhdGUoUHJlZGljYXRlIG5ld1ByZWRpY2F0ZSkgeworCQlpZiAobmV3UHJlZGljYXRlICE9IHByZWRpY2F0ZSkgeworCQkJTm90aWZpY2F0aW9uQ2hhaW4gbXNncyA9IG51bGw7CisJCQlpZiAocHJlZGljYXRlICE9IG51bGwpCisJCQkJbXNncyA9ICgoSW50ZXJuYWxFT2JqZWN0KXByZWRpY2F0ZSkuZUludmVyc2VSZW1vdmUodGhpcywgRU9QUE9TSVRFX0ZFQVRVUkVfQkFTRSAtIFByZWRpY2F0ZVBhY2thZ2UuSURFTlRJRklBQkxFX1BSRURJQ0FURV9FWFBSRVNTSU9OX19QUkVESUNBVEUsIG51bGwsIG1zZ3MpOworCQkJaWYgKG5ld1ByZWRpY2F0ZSAhPSBudWxsKQorCQkJCW1zZ3MgPSAoKEludGVybmFsRU9iamVjdCluZXdQcmVkaWNhdGUpLmVJbnZlcnNlQWRkKHRoaXMsIEVPUFBPU0lURV9GRUFUVVJFX0JBU0UgLSBQcmVkaWNhdGVQYWNrYWdlLklERU5USUZJQUJMRV9QUkVESUNBVEVfRVhQUkVTU0lPTl9fUFJFRElDQVRFLCBudWxsLCBtc2dzKTsKKwkJCW1zZ3MgPSBiYXNpY1NldFByZWRpY2F0ZShuZXdQcmVkaWNhdGUsIG1zZ3MpOworCQkJaWYgKG1zZ3MgIT0gbnVsbCkgbXNncy5kaXNwYXRjaCgpOworCQl9CisJCWVsc2UgaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQorCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgUHJlZGljYXRlUGFja2FnZS5JREVOVElGSUFCTEVfUFJFRElDQVRFX0VYUFJFU1NJT05fX1BSRURJQ0FURSwgbmV3UHJlZGljYXRlLCBuZXdQcmVkaWNhdGUpKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgTm90aWZpY2F0aW9uQ2hhaW4gZUludmVyc2VSZW1vdmUoSW50ZXJuYWxFT2JqZWN0IG90aGVyRW5kLCBpbnQgZmVhdHVyZUlELCBOb3RpZmljYXRpb25DaGFpbiBtc2dzKSB7CisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7CisJCQljYXNlIFByZWRpY2F0ZVBhY2thZ2UuSURFTlRJRklBQkxFX1BSRURJQ0FURV9FWFBSRVNTSU9OX19QUkVESUNBVEU6CisJCQkJcmV0dXJuIGJhc2ljU2V0UHJlZGljYXRlKG51bGwsIG1zZ3MpOworCQl9CisJCXJldHVybiBzdXBlci5lSW52ZXJzZVJlbW92ZShvdGhlckVuZCwgZmVhdHVyZUlELCBtc2dzKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgT2JqZWN0IGVHZXQoaW50IGZlYXR1cmVJRCwgYm9vbGVhbiByZXNvbHZlLCBib29sZWFuIGNvcmVUeXBlKSB7CisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7CisJCQljYXNlIFByZWRpY2F0ZVBhY2thZ2UuSURFTlRJRklBQkxFX1BSRURJQ0FURV9FWFBSRVNTSU9OX19QUkVESUNBVEU6CisJCQkJcmV0dXJuIGdldFByZWRpY2F0ZSgpOworCQl9CisJCXJldHVybiBzdXBlci5lR2V0KGZlYXR1cmVJRCwgcmVzb2x2ZSwgY29yZVR5cGUpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGVTZXQoaW50IGZlYXR1cmVJRCwgT2JqZWN0IG5ld1ZhbHVlKSB7CisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7CisJCQljYXNlIFByZWRpY2F0ZVBhY2thZ2UuSURFTlRJRklBQkxFX1BSRURJQ0FURV9FWFBSRVNTSU9OX19QUkVESUNBVEU6CisJCQkJc2V0UHJlZGljYXRlKChQcmVkaWNhdGUpbmV3VmFsdWUpOworCQkJCXJldHVybjsKKwkJfQorCQlzdXBlci5lU2V0KGZlYXR1cmVJRCwgbmV3VmFsdWUpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGVVbnNldChpbnQgZmVhdHVyZUlEKSB7CisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7CisJCQljYXNlIFByZWRpY2F0ZVBhY2thZ2UuSURFTlRJRklBQkxFX1BSRURJQ0FURV9FWFBSRVNTSU9OX19QUkVESUNBVEU6CisJCQkJc2V0UHJlZGljYXRlKChQcmVkaWNhdGUpbnVsbCk7CisJCQkJcmV0dXJuOworCQl9CisJCXN1cGVyLmVVbnNldChmZWF0dXJlSUQpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBib29sZWFuIGVJc1NldChpbnQgZmVhdHVyZUlEKSB7CisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7CisJCQljYXNlIFByZWRpY2F0ZVBhY2thZ2UuSURFTlRJRklBQkxFX1BSRURJQ0FURV9FWFBSRVNTSU9OX19QUkVESUNBVEU6CisJCQkJcmV0dXJuIHByZWRpY2F0ZSAhPSBudWxsOworCQl9CisJCXJldHVybiBzdXBlci5lSXNTZXQoZmVhdHVyZUlEKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgaW50IGVCYXNlU3RydWN0dXJhbEZlYXR1cmVJRChpbnQgZGVyaXZlZEZlYXR1cmVJRCwgQ2xhc3M8Pz4gYmFzZUNsYXNzKSB7CisJCWlmIChiYXNlQ2xhc3MgPT0gQm9vbGVhbkV4cHJlc3Npb24uY2xhc3MpIHsKKwkJCXN3aXRjaCAoZGVyaXZlZEZlYXR1cmVJRCkgeworCQkJCWRlZmF1bHQ6IHJldHVybiAtMTsKKwkJCX0KKwkJfQorCQlpZiAoYmFzZUNsYXNzID09IFByZWRpY2F0ZUV4cHJlc3Npb24uY2xhc3MpIHsKKwkJCXN3aXRjaCAoZGVyaXZlZEZlYXR1cmVJRCkgeworCQkJCWNhc2UgUHJlZGljYXRlUGFja2FnZS5JREVOVElGSUFCTEVfUFJFRElDQVRFX0VYUFJFU1NJT05fX1BSRURJQ0FURTogcmV0dXJuIFByZWRpY2F0ZVBhY2thZ2UuUFJFRElDQVRFX0VYUFJFU1NJT05fX1BSRURJQ0FURTsKKwkJCQlkZWZhdWx0OiByZXR1cm4gLTE7CisJCQl9CisJCX0KKwkJcmV0dXJuIHN1cGVyLmVCYXNlU3RydWN0dXJhbEZlYXR1cmVJRChkZXJpdmVkRmVhdHVyZUlELCBiYXNlQ2xhc3MpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBpbnQgZURlcml2ZWRTdHJ1Y3R1cmFsRmVhdHVyZUlEKGludCBiYXNlRmVhdHVyZUlELCBDbGFzczw/PiBiYXNlQ2xhc3MpIHsKKwkJaWYgKGJhc2VDbGFzcyA9PSBCb29sZWFuRXhwcmVzc2lvbi5jbGFzcykgeworCQkJc3dpdGNoIChiYXNlRmVhdHVyZUlEKSB7CisJCQkJZGVmYXVsdDogcmV0dXJuIC0xOworCQkJfQorCQl9CisJCWlmIChiYXNlQ2xhc3MgPT0gUHJlZGljYXRlRXhwcmVzc2lvbi5jbGFzcykgeworCQkJc3dpdGNoIChiYXNlRmVhdHVyZUlEKSB7CisJCQkJY2FzZSBQcmVkaWNhdGVQYWNrYWdlLlBSRURJQ0FURV9FWFBSRVNTSU9OX19QUkVESUNBVEU6IHJldHVybiBQcmVkaWNhdGVQYWNrYWdlLklERU5USUZJQUJMRV9QUkVESUNBVEVfRVhQUkVTU0lPTl9fUFJFRElDQVRFOworCQkJCWRlZmF1bHQ6IHJldHVybiAtMTsKKwkJCX0KKwkJfQorCQlyZXR1cm4gc3VwZXIuZURlcml2ZWRTdHJ1Y3R1cmFsRmVhdHVyZUlEKGJhc2VGZWF0dXJlSUQsIGJhc2VDbGFzcyk7CisJfQorCisJLyoqCisJICogQHNlZSBJZGVudGlmaWFibGUjY29tcGFyZVRvKElkZW50aWZpYWJsZSkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgaW50IGNvbXBhcmVUbyhJZGVudGlmaWFibGUgbykgeworCQlmaW5hbCBDb21wb3NlZEFkYXB0ZXJGYWN0b3J5IGl0ZW1Qcm92aWRlckZhY3RvcnkgPSBuZXcgQ29tcG9zZWRBZGFwdGVyRmFjdG9yeSgKKwkJCQlDb21wb3NlZEFkYXB0ZXJGYWN0b3J5LkRlc2NyaXB0b3IuUmVnaXN0cnkuSU5TVEFOQ0UpOworCisJCWZpbmFsIElJdGVtTGFiZWxQcm92aWRlciBscDEgPSAoSUl0ZW1MYWJlbFByb3ZpZGVyKSBpdGVtUHJvdmlkZXJGYWN0b3J5LmFkYXB0KAorCQkJCXRoaXMsIElJdGVtTGFiZWxQcm92aWRlci5jbGFzcyk7CisJCWZpbmFsIElJdGVtTGFiZWxQcm92aWRlciBscDIgPSAoSUl0ZW1MYWJlbFByb3ZpZGVyKSBpdGVtUHJvdmlkZXJGYWN0b3J5LmFkYXB0KG8sCisJCQkJSUl0ZW1MYWJlbFByb3ZpZGVyLmNsYXNzKTsKKwkJcmV0dXJuIGxwMS5nZXRUZXh0KHRoaXMpLmNvbXBhcmVUbyhscDIuZ2V0VGV4dChvKSk7CisJfSAvLyBjb21wYXJlVG8KKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZS5pbXBsLklkZW50aWZpYWJsZVByZWRpY2F0ZUltcGwjZXZhbHVhdGUob3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLlNURU1UaW1lLCBsb25nLCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuRGVjb3JhdG9yKQorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBib29sZWFuIGV2YWx1YXRlKFNURU1UaW1lIHRpbWUsIGxvbmcgdGltZXJQZXJpb2QsIEdyYXBoIGdyYXBoKSB7CisJCWJvb2xlYW4gcmV0VmFsdWUgPSBmYWxzZTsKKwkJZmluYWwgUHJlZGljYXRlIHByZWRpY2F0ZSA9IGdldFByZWRpY2F0ZSgpOworCQkvLyBXYXMgYSBwcmVkaWNhdGUgc3VwcGxpZWQ/CisJCWlmIChwcmVkaWNhdGUgIT0gbnVsbCkgeworCQkJLy8gWWVzCisJCQlyZXRWYWx1ZSA9IHByZWRpY2F0ZS5ldmFsdWF0ZSh0aW1lLCB0aW1lclBlcmlvZCwgIGdyYXBoKTsKKwkJfQkJCisJCXJldHVybiByZXRWYWx1ZTsKKwl9IC8vIGV2YWx1YXRlCisKK30gLy9JZGVudGlmaWFibGVQcmVkaWNhdGVFeHByZXNzaW9uSW1wbApkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9wcmVkaWNhdGUvaW1wbC9JZGVudGlmaWFibGVQcmVkaWNhdGVJbXBsLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3ByZWRpY2F0ZS9pbXBsL0lkZW50aWZpYWJsZVByZWRpY2F0ZUltcGwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMTlhNWY1Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9wcmVkaWNhdGUvaW1wbC9JZGVudGlmaWFibGVQcmVkaWNhdGVJbXBsLmphdmEKQEAgLTAsMCArMSw3NSBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlLmltcGw7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzczsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuU1RFTVVSSTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLmltcGwuSWRlbnRpZmlhYmxlSW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguR3JhcGg7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLlNURU1UaW1lOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUuSWRlbnRpZmlhYmxlUHJlZGljYXRlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUuUHJlZGljYXRlUGFja2FnZTsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPklkZW50aWZpYWJsZSBQcmVkaWNhdGU8L2I+PC9lbT4nLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiA8cD4KKyAqIDwvcD4KKyAqCisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBhYnN0cmFjdCBjbGFzcyBJZGVudGlmaWFibGVQcmVkaWNhdGVJbXBsIGV4dGVuZHMgSWRlbnRpZmlhYmxlSW1wbCBpbXBsZW1lbnRzIElkZW50aWZpYWJsZVByZWRpY2F0ZSB7CisJCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCXByb3RlY3RlZCBJZGVudGlmaWFibGVQcmVkaWNhdGVJbXBsKCkgeworCQlzdXBlcigpOworCQlzZXRVUkkoU1RFTVVSSS5jcmVhdGVVUkkoVVJJX1RZUEVfUFJFRElDQVRFX1NFR01FTlQgKyAiLyIKKwkJCQkrICBTVEVNVVJJLmdlbmVyYXRlVW5pcXVlUGFydCgpKSk7CisJCXNldFR5cGVVUkkoU1RFTVVSSS5QUkVESUNBVEVfVFlQRV9VUkkpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCBFQ2xhc3MgZVN0YXRpY0NsYXNzKCkgeworCQlyZXR1cm4gUHJlZGljYXRlUGFja2FnZS5MaXRlcmFscy5JREVOVElGSUFCTEVfUFJFRElDQVRFOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBib29sZWFuIGV2YWx1YXRlKFNURU1UaW1lIHRpbWUsIGxvbmcgdGltZXJQZXJpb2QsIEdyYXBoIGdyYXBoKSB7CisJCS8vIFRPRE86IGltcGxlbWVudCB0aGlzIG1ldGhvZAorCQkvLyBFbnN1cmUgdGhhdCB5b3UgcmVtb3ZlIEBnZW5lcmF0ZWQgb3IgbWFyayBpdCBAZ2VuZXJhdGVkIE5PVAorCQl0aHJvdyBuZXcgVW5zdXBwb3J0ZWRPcGVyYXRpb25FeGNlcHRpb24oKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJcHVibGljIHZvaWQgcmVzZXQoKSB7CisJCS8vIE5vdGhpbmcsIG92ZXJyaWRlIGluIHN1YmNsYXNzCisJfQorCit9IC8vSWRlbnRpZmlhYmxlUHJlZGljYXRlSW1wbApkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9wcmVkaWNhdGUvaW1wbC9JZGVudGlmaWFibGVUZXN0SW1wbC5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9wcmVkaWNhdGUvaW1wbC9JZGVudGlmaWFibGVUZXN0SW1wbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRmODM3YTAKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3ByZWRpY2F0ZS9pbXBsL0lkZW50aWZpYWJsZVRlc3RJbXBsLmphdmEKQEAgLTAsMCArMSw0NyBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlLmltcGw7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzczsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlLklkZW50aWZpYWJsZVRlc3Q7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZS5QcmVkaWNhdGVQYWNrYWdlOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiBBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+SWRlbnRpZmlhYmxlIFRlc3Q8L2I+PC9lbT4nLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiA8cD4KKyAqIDwvcD4KKyAqCisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBhYnN0cmFjdCBjbGFzcyBJZGVudGlmaWFibGVUZXN0SW1wbCBleHRlbmRzIElkZW50aWZpYWJsZVByZWRpY2F0ZUltcGwgaW1wbGVtZW50cyBJZGVudGlmaWFibGVUZXN0IHsKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgSWRlbnRpZmlhYmxlVGVzdEltcGwoKSB7CisJCXN1cGVyKCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIEVDbGFzcyBlU3RhdGljQ2xhc3MoKSB7CisJCXJldHVybiBQcmVkaWNhdGVQYWNrYWdlLkxpdGVyYWxzLklERU5USUZJQUJMRV9URVNUOworCX0KKworfSAvL0lkZW50aWZpYWJsZVRlc3RJbXBsCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3ByZWRpY2F0ZS9pbXBsL05hcnlCb29sZWFuT3BlcmF0b3JJbXBsLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3ByZWRpY2F0ZS9pbXBsL05hcnlCb29sZWFuT3BlcmF0b3JJbXBsLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWVlNjA0ZQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvcHJlZGljYXRlL2ltcGwvTmFyeUJvb2xlYW5PcGVyYXRvckltcGwuamF2YQpAQCAtMCwwICsxLDE1NSBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlLmltcGw7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb25DaGFpbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuRUxpc3Q7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzczsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuSW50ZXJuYWxFT2JqZWN0OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS51dGlsLkVPYmplY3RDb250YWlubWVudEVMaXN0OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS51dGlsLkludGVybmFsRUxpc3Q7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZS5OYXJ5Qm9vbGVhbk9wZXJhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUuUHJlZGljYXRlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUuUHJlZGljYXRlUGFja2FnZTsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPk5hcnkgQm9vbGVhbiBPcGVyYXRvcjwvYj48L2VtPicuCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIDxwPgorICogVGhlIGZvbGxvd2luZyBmZWF0dXJlcyBhcmUgaW1wbGVtZW50ZWQ6CisgKiA8dWw+CisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZS5pbXBsLk5hcnlCb29sZWFuT3BlcmF0b3JJbXBsI2dldE9wZXJhbmRzIDxlbT5PcGVyYW5kczwvZW0+fTwvbGk+CisgKiA8L3VsPgorICogPC9wPgorICoKKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGFic3RyYWN0IGNsYXNzIE5hcnlCb29sZWFuT3BlcmF0b3JJbXBsIGV4dGVuZHMgQm9vbGVhbk9wZXJhdG9ySW1wbCBpbXBsZW1lbnRzIE5hcnlCb29sZWFuT3BlcmF0b3IgeworCS8qKgorCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldE9wZXJhbmRzKCkgPGVtPk9wZXJhbmRzPC9lbT59JyBjb250YWlubWVudCByZWZlcmVuY2UgbGlzdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI2dldE9wZXJhbmRzKCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgRUxpc3Q8UHJlZGljYXRlPiBvcGVyYW5kczsKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBOYXJ5Qm9vbGVhbk9wZXJhdG9ySW1wbCgpIHsKKwkJc3VwZXIoKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgRUNsYXNzIGVTdGF0aWNDbGFzcygpIHsKKwkJcmV0dXJuIFByZWRpY2F0ZVBhY2thZ2UuTGl0ZXJhbHMuTkFSWV9CT09MRUFOX09QRVJBVE9SOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFTGlzdDxQcmVkaWNhdGU+IGdldE9wZXJhbmRzKCkgeworCQlpZiAob3BlcmFuZHMgPT0gbnVsbCkgeworCQkJb3BlcmFuZHMgPSBuZXcgRU9iamVjdENvbnRhaW5tZW50RUxpc3Q8UHJlZGljYXRlPihQcmVkaWNhdGUuY2xhc3MsIHRoaXMsIFByZWRpY2F0ZVBhY2thZ2UuTkFSWV9CT09MRUFOX09QRVJBVE9SX19PUEVSQU5EUyk7CisJCX0KKwkJcmV0dXJuIG9wZXJhbmRzOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBOb3RpZmljYXRpb25DaGFpbiBlSW52ZXJzZVJlbW92ZShJbnRlcm5hbEVPYmplY3Qgb3RoZXJFbmQsIGludCBmZWF0dXJlSUQsIE5vdGlmaWNhdGlvbkNoYWluIG1zZ3MpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJCWNhc2UgUHJlZGljYXRlUGFja2FnZS5OQVJZX0JPT0xFQU5fT1BFUkFUT1JfX09QRVJBTkRTOgorCQkJCXJldHVybiAoKEludGVybmFsRUxpc3Q8Pz4pZ2V0T3BlcmFuZHMoKSkuYmFzaWNSZW1vdmUob3RoZXJFbmQsIG1zZ3MpOworCQl9CisJCXJldHVybiBzdXBlci5lSW52ZXJzZVJlbW92ZShvdGhlckVuZCwgZmVhdHVyZUlELCBtc2dzKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgT2JqZWN0IGVHZXQoaW50IGZlYXR1cmVJRCwgYm9vbGVhbiByZXNvbHZlLCBib29sZWFuIGNvcmVUeXBlKSB7CisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7CisJCQljYXNlIFByZWRpY2F0ZVBhY2thZ2UuTkFSWV9CT09MRUFOX09QRVJBVE9SX19PUEVSQU5EUzoKKwkJCQlyZXR1cm4gZ2V0T3BlcmFuZHMoKTsKKwkJfQorCQlyZXR1cm4gc3VwZXIuZUdldChmZWF0dXJlSUQsIHJlc29sdmUsIGNvcmVUeXBlKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAU3VwcHJlc3NXYXJuaW5ncygidW5jaGVja2VkIikKKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBlU2V0KGludCBmZWF0dXJlSUQsIE9iamVjdCBuZXdWYWx1ZSkgeworCQlzd2l0Y2ggKGZlYXR1cmVJRCkgeworCQkJY2FzZSBQcmVkaWNhdGVQYWNrYWdlLk5BUllfQk9PTEVBTl9PUEVSQVRPUl9fT1BFUkFORFM6CisJCQkJZ2V0T3BlcmFuZHMoKS5jbGVhcigpOworCQkJCWdldE9wZXJhbmRzKCkuYWRkQWxsKChDb2xsZWN0aW9uPD8gZXh0ZW5kcyBQcmVkaWNhdGU+KW5ld1ZhbHVlKTsKKwkJCQlyZXR1cm47CisJCX0KKwkJc3VwZXIuZVNldChmZWF0dXJlSUQsIG5ld1ZhbHVlKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBlVW5zZXQoaW50IGZlYXR1cmVJRCkgeworCQlzd2l0Y2ggKGZlYXR1cmVJRCkgeworCQkJY2FzZSBQcmVkaWNhdGVQYWNrYWdlLk5BUllfQk9PTEVBTl9PUEVSQVRPUl9fT1BFUkFORFM6CisJCQkJZ2V0T3BlcmFuZHMoKS5jbGVhcigpOworCQkJCXJldHVybjsKKwkJfQorCQlzdXBlci5lVW5zZXQoZmVhdHVyZUlEKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgYm9vbGVhbiBlSXNTZXQoaW50IGZlYXR1cmVJRCkgeworCQlzd2l0Y2ggKGZlYXR1cmVJRCkgeworCQkJY2FzZSBQcmVkaWNhdGVQYWNrYWdlLk5BUllfQk9PTEVBTl9PUEVSQVRPUl9fT1BFUkFORFM6CisJCQkJcmV0dXJuIG9wZXJhbmRzICE9IG51bGwgJiYgIW9wZXJhbmRzLmlzRW1wdHkoKTsKKwkJfQorCQlyZXR1cm4gc3VwZXIuZUlzU2V0KGZlYXR1cmVJRCk7CisJfQorCit9IC8vTmFyeUJvb2xlYW5PcGVyYXRvckltcGwKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvcHJlZGljYXRlL2ltcGwvTm90SW1wbC5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9wcmVkaWNhdGUvaW1wbC9Ob3RJbXBsLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODlkNGUzYgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvcHJlZGljYXRlL2ltcGwvTm90SW1wbC5qYXZhCkBAIC0wLDAgKzEsNTggQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZS5pbXBsOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkdyYXBoOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5TVEVNVGltZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlLk5vdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlLlByZWRpY2F0ZVBhY2thZ2U7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIEFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5Ob3Q8L2I+PC9lbT4nLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiA8cD4KKyAqIDwvcD4KKyAqCisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBOb3RJbXBsIGV4dGVuZHMgVW5hcnlCb29sZWFuT3BlcmF0b3JJbXBsIGltcGxlbWVudHMgTm90IHsKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgTm90SW1wbCgpIHsKKwkJc3VwZXIoKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgRUNsYXNzIGVTdGF0aWNDbGFzcygpIHsKKwkJcmV0dXJuIFByZWRpY2F0ZVBhY2thZ2UuTGl0ZXJhbHMuTk9UOworCX0KKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZS5pbXBsLlByZWRpY2F0ZUltcGwjZXZhbHVhdGUob3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLlNURU1UaW1lLCBsb25nLCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuRGVjb3JhdG9yKQorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBib29sZWFuIGV2YWx1YXRlKFNURU1UaW1lIHRpbWUsIGxvbmcgdGltZXJQZXJpb2QsIEdyYXBoIGdyYXBoKSB7CisJCXJldHVybiAhZ2V0T3BlcmFuZCgpLmV2YWx1YXRlKHRpbWUsIHRpbWVyUGVyaW9kLCAgZ3JhcGgpOworCX0KKworCQorfSAvL05vdEltcGwKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvcHJlZGljYXRlL2ltcGwvT3JJbXBsLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3ByZWRpY2F0ZS9pbXBsL09ySW1wbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkxZmZjOWMKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3ByZWRpY2F0ZS9pbXBsL09ySW1wbC5qYXZhCkBAIC0wLDAgKzEsNjggQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZS5pbXBsOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkdyYXBoOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5TVEVNVGltZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlLk9yOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUuUHJlZGljYXRlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUuUHJlZGljYXRlUGFja2FnZTsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPk9yPC9iPjwvZW0+Jy4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogPHA+CisgKiA8L3A+CisgKgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgT3JJbXBsIGV4dGVuZHMgTmFyeUJvb2xlYW5PcGVyYXRvckltcGwgaW1wbGVtZW50cyBPciB7CisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIE9ySW1wbCgpIHsKKwkJc3VwZXIoKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgRUNsYXNzIGVTdGF0aWNDbGFzcygpIHsKKwkJcmV0dXJuIFByZWRpY2F0ZVBhY2thZ2UuTGl0ZXJhbHMuT1I7CisJfQorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlLmltcGwuUHJlZGljYXRlSW1wbCNldmFsdWF0ZShvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuU1RFTVRpbWUsIGxvbmcsIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5EZWNvcmF0b3IpCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIGJvb2xlYW4gZXZhbHVhdGUoU1RFTVRpbWUgdGltZSwgbG9uZyB0aW1lclBlcmlvZCwgR3JhcGggZ3JhcGgpIHsKKwkJYm9vbGVhbiByZXRWYWx1ZSA9IGZhbHNlOworCQlmb3IgKFByZWRpY2F0ZSBwcmVkaWNhdGUgOiBnZXRPcGVyYW5kcygpKSB7CisJCQlyZXRWYWx1ZSA9IHByZWRpY2F0ZS5ldmFsdWF0ZSh0aW1lLCB0aW1lclBlcmlvZCwgIGdyYXBoKTsKKwkJCS8vIE9uZSBpcyB0cnVlPworCQkJaWYgKHJldFZhbHVlKSB7CisJCQkJLy8gWWVzCisJCQkJYnJlYWs7CisJCQl9IC8vIGlmIAorCQl9IC8vIGZvciBlYWNoIFByZWRpY2F0ZQorCQlyZXR1cm4gcmV0VmFsdWU7CisJfSAvLyBldmFsdWF0ZQorCisJCit9IC8vT3JJbXBsCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3ByZWRpY2F0ZS9pbXBsL1ByZWRpY2F0ZUV4cHJlc3Npb25JbXBsLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3ByZWRpY2F0ZS9pbXBsL1ByZWRpY2F0ZUV4cHJlc3Npb25JbXBsLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjgxYjlkMQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvcHJlZGljYXRlL2ltcGwvUHJlZGljYXRlRXhwcmVzc2lvbkltcGwuamF2YQpAQCAtMCwwICsxLDE5NiBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlLmltcGw7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbkNoYWluOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkludGVybmFsRU9iamVjdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuaW1wbC5FTm90aWZpY2F0aW9uSW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguR3JhcGg7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLlNURU1UaW1lOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUuUHJlZGljYXRlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUuUHJlZGljYXRlRXhwcmVzc2lvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlLlByZWRpY2F0ZVBhY2thZ2U7CisKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPkV4cHJlc3Npb248L2I+PC9lbT4nLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiA8cD4KKyAqIFRoZSBmb2xsb3dpbmcgZmVhdHVyZXMgYXJlIGltcGxlbWVudGVkOgorICogPHVsPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUuaW1wbC5QcmVkaWNhdGVFeHByZXNzaW9uSW1wbCNnZXRQcmVkaWNhdGUgPGVtPlByZWRpY2F0ZTwvZW0+fTwvbGk+CisgKiA8L3VsPgorICogPC9wPgorICoKKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIFByZWRpY2F0ZUV4cHJlc3Npb25JbXBsIGV4dGVuZHMgQm9vbGVhbkV4cHJlc3Npb25JbXBsIGltcGxlbWVudHMgUHJlZGljYXRlRXhwcmVzc2lvbiB7CisJLyoqCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0UHJlZGljYXRlKCkgPGVtPlByZWRpY2F0ZTwvZW0+fScgY29udGFpbm1lbnQgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZ2V0UHJlZGljYXRlKCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgUHJlZGljYXRlIHByZWRpY2F0ZTsKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBQcmVkaWNhdGVFeHByZXNzaW9uSW1wbCgpIHsKKwkJc3VwZXIoKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgRUNsYXNzIGVTdGF0aWNDbGFzcygpIHsKKwkJcmV0dXJuIFByZWRpY2F0ZVBhY2thZ2UuTGl0ZXJhbHMuUFJFRElDQVRFX0VYUFJFU1NJT047CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFByZWRpY2F0ZSBnZXRQcmVkaWNhdGUoKSB7CisJCXJldHVybiBwcmVkaWNhdGU7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIE5vdGlmaWNhdGlvbkNoYWluIGJhc2ljU2V0UHJlZGljYXRlKFByZWRpY2F0ZSBuZXdQcmVkaWNhdGUsIE5vdGlmaWNhdGlvbkNoYWluIG1zZ3MpIHsKKwkJUHJlZGljYXRlIG9sZFByZWRpY2F0ZSA9IHByZWRpY2F0ZTsKKwkJcHJlZGljYXRlID0gbmV3UHJlZGljYXRlOworCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpIHsKKwkJCUVOb3RpZmljYXRpb25JbXBsIG5vdGlmaWNhdGlvbiA9IG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBQcmVkaWNhdGVQYWNrYWdlLlBSRURJQ0FURV9FWFBSRVNTSU9OX19QUkVESUNBVEUsIG9sZFByZWRpY2F0ZSwgbmV3UHJlZGljYXRlKTsKKwkJCWlmIChtc2dzID09IG51bGwpIG1zZ3MgPSBub3RpZmljYXRpb247IGVsc2UgbXNncy5hZGQobm90aWZpY2F0aW9uKTsKKwkJfQorCQlyZXR1cm4gbXNnczsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRQcmVkaWNhdGUoUHJlZGljYXRlIG5ld1ByZWRpY2F0ZSkgeworCQlpZiAobmV3UHJlZGljYXRlICE9IHByZWRpY2F0ZSkgeworCQkJTm90aWZpY2F0aW9uQ2hhaW4gbXNncyA9IG51bGw7CisJCQlpZiAocHJlZGljYXRlICE9IG51bGwpCisJCQkJbXNncyA9ICgoSW50ZXJuYWxFT2JqZWN0KXByZWRpY2F0ZSkuZUludmVyc2VSZW1vdmUodGhpcywgRU9QUE9TSVRFX0ZFQVRVUkVfQkFTRSAtIFByZWRpY2F0ZVBhY2thZ2UuUFJFRElDQVRFX0VYUFJFU1NJT05fX1BSRURJQ0FURSwgbnVsbCwgbXNncyk7CisJCQlpZiAobmV3UHJlZGljYXRlICE9IG51bGwpCisJCQkJbXNncyA9ICgoSW50ZXJuYWxFT2JqZWN0KW5ld1ByZWRpY2F0ZSkuZUludmVyc2VBZGQodGhpcywgRU9QUE9TSVRFX0ZFQVRVUkVfQkFTRSAtIFByZWRpY2F0ZVBhY2thZ2UuUFJFRElDQVRFX0VYUFJFU1NJT05fX1BSRURJQ0FURSwgbnVsbCwgbXNncyk7CisJCQltc2dzID0gYmFzaWNTZXRQcmVkaWNhdGUobmV3UHJlZGljYXRlLCBtc2dzKTsKKwkJCWlmIChtc2dzICE9IG51bGwpIG1zZ3MuZGlzcGF0Y2goKTsKKwkJfQorCQllbHNlIGlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkKKwkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIFByZWRpY2F0ZVBhY2thZ2UuUFJFRElDQVRFX0VYUFJFU1NJT05fX1BSRURJQ0FURSwgbmV3UHJlZGljYXRlLCBuZXdQcmVkaWNhdGUpKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgTm90aWZpY2F0aW9uQ2hhaW4gZUludmVyc2VSZW1vdmUoSW50ZXJuYWxFT2JqZWN0IG90aGVyRW5kLCBpbnQgZmVhdHVyZUlELCBOb3RpZmljYXRpb25DaGFpbiBtc2dzKSB7CisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7CisJCQljYXNlIFByZWRpY2F0ZVBhY2thZ2UuUFJFRElDQVRFX0VYUFJFU1NJT05fX1BSRURJQ0FURToKKwkJCQlyZXR1cm4gYmFzaWNTZXRQcmVkaWNhdGUobnVsbCwgbXNncyk7CisJCX0KKwkJcmV0dXJuIHN1cGVyLmVJbnZlcnNlUmVtb3ZlKG90aGVyRW5kLCBmZWF0dXJlSUQsIG1zZ3MpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBPYmplY3QgZUdldChpbnQgZmVhdHVyZUlELCBib29sZWFuIHJlc29sdmUsIGJvb2xlYW4gY29yZVR5cGUpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJCWNhc2UgUHJlZGljYXRlUGFja2FnZS5QUkVESUNBVEVfRVhQUkVTU0lPTl9fUFJFRElDQVRFOgorCQkJCXJldHVybiBnZXRQcmVkaWNhdGUoKTsKKwkJfQorCQlyZXR1cm4gc3VwZXIuZUdldChmZWF0dXJlSUQsIHJlc29sdmUsIGNvcmVUeXBlKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBlU2V0KGludCBmZWF0dXJlSUQsIE9iamVjdCBuZXdWYWx1ZSkgeworCQlzd2l0Y2ggKGZlYXR1cmVJRCkgeworCQkJY2FzZSBQcmVkaWNhdGVQYWNrYWdlLlBSRURJQ0FURV9FWFBSRVNTSU9OX19QUkVESUNBVEU6CisJCQkJc2V0UHJlZGljYXRlKChQcmVkaWNhdGUpbmV3VmFsdWUpOworCQkJCXJldHVybjsKKwkJfQorCQlzdXBlci5lU2V0KGZlYXR1cmVJRCwgbmV3VmFsdWUpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGVVbnNldChpbnQgZmVhdHVyZUlEKSB7CisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7CisJCQljYXNlIFByZWRpY2F0ZVBhY2thZ2UuUFJFRElDQVRFX0VYUFJFU1NJT05fX1BSRURJQ0FURToKKwkJCQlzZXRQcmVkaWNhdGUoKFByZWRpY2F0ZSludWxsKTsKKwkJCQlyZXR1cm47CisJCX0KKwkJc3VwZXIuZVVuc2V0KGZlYXR1cmVJRCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIGJvb2xlYW4gZUlzU2V0KGludCBmZWF0dXJlSUQpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJCWNhc2UgUHJlZGljYXRlUGFja2FnZS5QUkVESUNBVEVfRVhQUkVTU0lPTl9fUFJFRElDQVRFOgorCQkJCXJldHVybiBwcmVkaWNhdGUgIT0gbnVsbDsKKwkJfQorCQlyZXR1cm4gc3VwZXIuZUlzU2V0KGZlYXR1cmVJRCk7CisJfQorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlLmltcGwuUHJlZGljYXRlSW1wbCNldmFsdWF0ZShvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuU1RFTVRpbWUsIGxvbmcsIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5EZWNvcmF0b3IpCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIGJvb2xlYW4gZXZhbHVhdGUoU1RFTVRpbWUgdGltZSwgbG9uZyB0aW1lclBlcmlvZCwgR3JhcGggZ3JhcGgpIHsKKwkJdHJ5IHsKKwkJCXJldHVybiBnZXRQcmVkaWNhdGUoKS5ldmFsdWF0ZSh0aW1lLCB0aW1lclBlcmlvZCwgIGdyYXBoKTsKKwkJfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKKwkJCXJldHVybiBmYWxzZTsKKwkJfQorCX0KKworfSAvL1ByZWRpY2F0ZUV4cHJlc3Npb25JbXBsCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3ByZWRpY2F0ZS9pbXBsL1ByZWRpY2F0ZUZhY3RvcnlJbXBsLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3ByZWRpY2F0ZS9pbXBsL1ByZWRpY2F0ZUZhY3RvcnlJbXBsLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjhmMTYzYgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvcHJlZGljYXRlL2ltcGwvUHJlZGljYXRlRmFjdG9yeUltcGwuamF2YQpAQCAtMCwwICsxLDE5OSBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlLmltcGw7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzczsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRVBhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLmltcGwuRUZhY3RvcnlJbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5wbHVnaW4uRWNvcmVQbHVnaW47CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZS5BbmQ7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZS5FbGFwc2VkVGltZVRlc3Q7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZS5GYWxzZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlLklkZW50aWZpYWJsZVByZWRpY2F0ZUV4cHJlc3Npb247CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZS5Ob3Q7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZS5PcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlLlByZWRpY2F0ZUV4cHJlc3Npb247CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZS5QcmVkaWNhdGVGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUuUHJlZGljYXRlUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlLlByZWRpY2F0ZVJlZmVyZW5jZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlLlRydWU7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIEFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBtb2RlbCA8Yj5GYWN0b3J5PC9iPi4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgUHJlZGljYXRlRmFjdG9yeUltcGwgZXh0ZW5kcyBFRmFjdG9yeUltcGwgaW1wbGVtZW50cyBQcmVkaWNhdGVGYWN0b3J5IHsKKwkvKioKKwkgKiBDcmVhdGVzIHRoZSBkZWZhdWx0IGZhY3RvcnkgaW1wbGVtZW50YXRpb24uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHN0YXRpYyBQcmVkaWNhdGVGYWN0b3J5IGluaXQoKSB7CisJCXRyeSB7CisJCQlQcmVkaWNhdGVGYWN0b3J5IHRoZVByZWRpY2F0ZUZhY3RvcnkgPSAoUHJlZGljYXRlRmFjdG9yeSlFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFRmFjdG9yeSgiaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvcHJlZGljYXRlLmVjb3JlIik7IC8vJE5PTi1OTFMtMSQgCisJCQlpZiAodGhlUHJlZGljYXRlRmFjdG9yeSAhPSBudWxsKSB7CisJCQkJcmV0dXJuIHRoZVByZWRpY2F0ZUZhY3Rvcnk7CisJCQl9CisJCX0KKwkJY2F0Y2ggKEV4Y2VwdGlvbiBleGNlcHRpb24pIHsKKwkJCUVjb3JlUGx1Z2luLklOU1RBTkNFLmxvZyhleGNlcHRpb24pOworCQl9CisJCXJldHVybiBuZXcgUHJlZGljYXRlRmFjdG9yeUltcGwoKTsKKwl9CisKKwkvKioKKwkgKiBDcmVhdGVzIGFuIGluc3RhbmNlIG9mIHRoZSBmYWN0b3J5LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBQcmVkaWNhdGVGYWN0b3J5SW1wbCgpIHsKKwkJc3VwZXIoKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgRU9iamVjdCBjcmVhdGUoRUNsYXNzIGVDbGFzcykgeworCQlzd2l0Y2ggKGVDbGFzcy5nZXRDbGFzc2lmaWVySUQoKSkgeworCQkJY2FzZSBQcmVkaWNhdGVQYWNrYWdlLkFORDogcmV0dXJuIGNyZWF0ZUFuZCgpOworCQkJY2FzZSBQcmVkaWNhdGVQYWNrYWdlLkZBTFNFOiByZXR1cm4gY3JlYXRlRmFsc2UoKTsKKwkJCWNhc2UgUHJlZGljYXRlUGFja2FnZS5OT1Q6IHJldHVybiBjcmVhdGVOb3QoKTsKKwkJCWNhc2UgUHJlZGljYXRlUGFja2FnZS5PUjogcmV0dXJuIGNyZWF0ZU9yKCk7CisJCQljYXNlIFByZWRpY2F0ZVBhY2thZ2UuUFJFRElDQVRFX1JFRkVSRU5DRTogcmV0dXJuIGNyZWF0ZVByZWRpY2F0ZVJlZmVyZW5jZSgpOworCQkJY2FzZSBQcmVkaWNhdGVQYWNrYWdlLlRSVUU6IHJldHVybiBjcmVhdGVUcnVlKCk7CisJCQljYXNlIFByZWRpY2F0ZVBhY2thZ2UuUFJFRElDQVRFX0VYUFJFU1NJT046IHJldHVybiBjcmVhdGVQcmVkaWNhdGVFeHByZXNzaW9uKCk7CisJCQljYXNlIFByZWRpY2F0ZVBhY2thZ2UuSURFTlRJRklBQkxFX1BSRURJQ0FURV9FWFBSRVNTSU9OOiByZXR1cm4gY3JlYXRlSWRlbnRpZmlhYmxlUHJlZGljYXRlRXhwcmVzc2lvbigpOworCQkJY2FzZSBQcmVkaWNhdGVQYWNrYWdlLkVMQVBTRURfVElNRV9URVNUOiByZXR1cm4gY3JlYXRlRWxhcHNlZFRpbWVUZXN0KCk7CisJCQlkZWZhdWx0OgorCQkJCXRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIlRoZSBjbGFzcyAnIiArIGVDbGFzcy5nZXROYW1lKCkgKyAiJyBpcyBub3QgYSB2YWxpZCBjbGFzc2lmaWVyIik7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAorCQl9CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEFuZCBjcmVhdGVBbmQoKSB7CisJCUFuZEltcGwgYW5kID0gbmV3IEFuZEltcGwoKTsKKwkJcmV0dXJuIGFuZDsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRmFsc2UgY3JlYXRlRmFsc2UoKSB7CisJCUZhbHNlSW1wbCBmYWxzZV8gPSBuZXcgRmFsc2VJbXBsKCk7CisJCXJldHVybiBmYWxzZV87CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIE5vdCBjcmVhdGVOb3QoKSB7CisJCU5vdEltcGwgbm90ID0gbmV3IE5vdEltcGwoKTsKKwkJcmV0dXJuIG5vdDsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgT3IgY3JlYXRlT3IoKSB7CisJCU9ySW1wbCBvciA9IG5ldyBPckltcGwoKTsKKwkJcmV0dXJuIG9yOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBQcmVkaWNhdGVSZWZlcmVuY2UgY3JlYXRlUHJlZGljYXRlUmVmZXJlbmNlKCkgeworCQlQcmVkaWNhdGVSZWZlcmVuY2VJbXBsIHByZWRpY2F0ZVJlZmVyZW5jZSA9IG5ldyBQcmVkaWNhdGVSZWZlcmVuY2VJbXBsKCk7CisJCXJldHVybiBwcmVkaWNhdGVSZWZlcmVuY2U7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFRydWUgY3JlYXRlVHJ1ZSgpIHsKKwkJVHJ1ZUltcGwgdHJ1ZV8gPSBuZXcgVHJ1ZUltcGwoKTsKKwkJcmV0dXJuIHRydWVfOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBQcmVkaWNhdGVFeHByZXNzaW9uIGNyZWF0ZVByZWRpY2F0ZUV4cHJlc3Npb24oKSB7CisJCVByZWRpY2F0ZUV4cHJlc3Npb25JbXBsIHByZWRpY2F0ZUV4cHJlc3Npb24gPSBuZXcgUHJlZGljYXRlRXhwcmVzc2lvbkltcGwoKTsKKwkJcmV0dXJuIHByZWRpY2F0ZUV4cHJlc3Npb247CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIElkZW50aWZpYWJsZVByZWRpY2F0ZUV4cHJlc3Npb24gY3JlYXRlSWRlbnRpZmlhYmxlUHJlZGljYXRlRXhwcmVzc2lvbigpIHsKKwkJSWRlbnRpZmlhYmxlUHJlZGljYXRlRXhwcmVzc2lvbkltcGwgaWRlbnRpZmlhYmxlUHJlZGljYXRlRXhwcmVzc2lvbiA9IG5ldyBJZGVudGlmaWFibGVQcmVkaWNhdGVFeHByZXNzaW9uSW1wbCgpOworCQlyZXR1cm4gaWRlbnRpZmlhYmxlUHJlZGljYXRlRXhwcmVzc2lvbjsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRWxhcHNlZFRpbWVUZXN0IGNyZWF0ZUVsYXBzZWRUaW1lVGVzdCgpIHsKKwkJRWxhcHNlZFRpbWVUZXN0SW1wbCBlbGFwc2VkVGltZVRlc3QgPSBuZXcgRWxhcHNlZFRpbWVUZXN0SW1wbCgpOworCQlyZXR1cm4gZWxhcHNlZFRpbWVUZXN0OworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBQcmVkaWNhdGVQYWNrYWdlIGdldFByZWRpY2F0ZVBhY2thZ2UoKSB7CisJCXJldHVybiAoUHJlZGljYXRlUGFja2FnZSlnZXRFUGFja2FnZSgpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGRlcHJlY2F0ZWQKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQERlcHJlY2F0ZWQKKwlwdWJsaWMgc3RhdGljIFByZWRpY2F0ZVBhY2thZ2UgZ2V0UGFja2FnZSgpIHsKKwkJcmV0dXJuIFByZWRpY2F0ZVBhY2thZ2UuZUlOU1RBTkNFOworCX0KKworfSAvL1ByZWRpY2F0ZUZhY3RvcnlJbXBsCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3ByZWRpY2F0ZS9pbXBsL1ByZWRpY2F0ZUltcGwuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvcHJlZGljYXRlL2ltcGwvUHJlZGljYXRlSW1wbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAzZjVmOWEKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3ByZWRpY2F0ZS9pbXBsL1ByZWRpY2F0ZUltcGwuamF2YQpAQCAtMCwwICsxLDcwIEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUuaW1wbDsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5pbXBsLkVPYmplY3RJbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5HcmFwaDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuU1RFTVRpbWU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZS5QcmVkaWNhdGU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZS5QcmVkaWNhdGVQYWNrYWdlOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiBBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+UHJlZGljYXRlPC9iPjwvZW0+Jy4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogPHA+CisgKiA8L3A+CisgKgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgYWJzdHJhY3QgY2xhc3MgUHJlZGljYXRlSW1wbCBleHRlbmRzIEVPYmplY3RJbXBsIGltcGxlbWVudHMgUHJlZGljYXRlIHsKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgUHJlZGljYXRlSW1wbCgpIHsKKwkJc3VwZXIoKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgRUNsYXNzIGVTdGF0aWNDbGFzcygpIHsKKwkJcmV0dXJuIFByZWRpY2F0ZVBhY2thZ2UuTGl0ZXJhbHMuUFJFRElDQVRFOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBib29sZWFuIGV2YWx1YXRlKFNURU1UaW1lIHRpbWUsIGxvbmcgdGltZXJQZXJpb2QsIEdyYXBoIGdyYXBoKSB7CisJCS8vIFRPRE86IGltcGxlbWVudCB0aGlzIG1ldGhvZAorCQkvLyBFbnN1cmUgdGhhdCB5b3UgcmVtb3ZlIEBnZW5lcmF0ZWQgb3IgbWFyayBpdCBAZ2VuZXJhdGVkIE5PVAorCQl0aHJvdyBuZXcgVW5zdXBwb3J0ZWRPcGVyYXRpb25FeGNlcHRpb24oKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJcHVibGljIHZvaWQgcmVzZXQoKSB7CisJCS8vIFN1YmNsYXNzZXMgb3ZlcnJpZGVzIGlmIG5lY2Vzc2FyeQorCX0KKworfSAvL1ByZWRpY2F0ZUltcGwKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvcHJlZGljYXRlL2ltcGwvUHJlZGljYXRlUGFja2FnZUltcGwuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvcHJlZGljYXRlL2ltcGwvUHJlZGljYXRlUGFja2FnZUltcGwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZDhjNjk2Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9wcmVkaWNhdGUvaW1wbC9QcmVkaWNhdGVQYWNrYWdlSW1wbC5qYXZhCkBAIC0wLDAgKzEsNzA4IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUuaW1wbDsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUF0dHJpYnV0ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT3BlcmF0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRVJlZmVyZW5jZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRWNvcmVQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5pbXBsLkVQYWNrYWdlSW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLkNvbW1vblBhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5pbXBsLkNvbW1vblBhY2thZ2VJbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5leHBlcmltZW50LkV4cGVyaW1lbnRQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5leHBlcmltZW50LmltcGwuRXhwZXJpbWVudFBhY2thZ2VJbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5HcmFwaFBhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmltcGwuR3JhcGhQYWNrYWdlSW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubG9nZ2VyLkxvZ2dlclBhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmxvZ2dlci5pbXBsLkxvZ2dlclBhY2thZ2VJbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5Nb2RlbFBhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLmltcGwuTW9kZWxQYWNrYWdlSW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuTW9kaWZpZXJQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5pbXBsLk1vZGlmaWVyUGFja2FnZUltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZS5BbmQ7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZS5Cb29sZWFuRXhwcmVzc2lvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlLkJvb2xlYW5PcGVyYXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlLkVsYXBzZWRUaW1lVGVzdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlLkZhbHNlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUuSWRlbnRpZmlhYmxlUHJlZGljYXRlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUuSWRlbnRpZmlhYmxlUHJlZGljYXRlRXhwcmVzc2lvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlLklkZW50aWZpYWJsZVRlc3Q7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZS5OYXJ5Qm9vbGVhbk9wZXJhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUuTm90OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUuT3I7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZS5QcmVkaWNhdGU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZS5QcmVkaWNhdGVFeHByZXNzaW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUuUHJlZGljYXRlRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlLlByZWRpY2F0ZVBhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZS5QcmVkaWNhdGVSZWZlcmVuY2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZS5UZXN0OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUuVGltZVRlc3Q7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZS5UcnVlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUuVW5hcnlCb29sZWFuT3BlcmF0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNjZW5hcmlvLlNjZW5hcmlvUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2NlbmFyaW8uaW1wbC5TY2VuYXJpb1BhY2thZ2VJbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zZXF1ZW5jZXIuU2VxdWVuY2VyUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2VxdWVuY2VyLmltcGwuU2VxdWVuY2VyUGFja2FnZUltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNvbHZlci5Tb2x2ZXJQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zb2x2ZXIuaW1wbC5Tb2x2ZXJQYWNrYWdlSW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUudHJpZ2dlci5UcmlnZ2VyUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUudHJpZ2dlci5pbXBsLlRyaWdnZXJQYWNrYWdlSW1wbDsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIG1vZGVsIDxiPlBhY2thZ2U8L2I+LgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBQcmVkaWNhdGVQYWNrYWdlSW1wbCBleHRlbmRzIEVQYWNrYWdlSW1wbCBpbXBsZW1lbnRzIFByZWRpY2F0ZVBhY2thZ2UgeworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByaXZhdGUgRUNsYXNzIGFuZEVDbGFzcyA9IG51bGw7CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcml2YXRlIEVDbGFzcyBib29sZWFuRXhwcmVzc2lvbkVDbGFzcyA9IG51bGw7CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcml2YXRlIEVDbGFzcyBib29sZWFuT3BlcmF0b3JFQ2xhc3MgPSBudWxsOworCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJpdmF0ZSBFQ2xhc3MgZmFsc2VFQ2xhc3MgPSBudWxsOworCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJpdmF0ZSBFQ2xhc3MgbmFyeUJvb2xlYW5PcGVyYXRvckVDbGFzcyA9IG51bGw7CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcml2YXRlIEVDbGFzcyBub3RFQ2xhc3MgPSBudWxsOworCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJpdmF0ZSBFQ2xhc3Mgb3JFQ2xhc3MgPSBudWxsOworCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJpdmF0ZSBFQ2xhc3MgcHJlZGljYXRlRUNsYXNzID0gbnVsbDsKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByaXZhdGUgRUNsYXNzIHByZWRpY2F0ZVJlZmVyZW5jZUVDbGFzcyA9IG51bGw7CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcml2YXRlIEVDbGFzcyB0ZXN0RUNsYXNzID0gbnVsbDsKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByaXZhdGUgRUNsYXNzIHRydWVFQ2xhc3MgPSBudWxsOworCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJpdmF0ZSBFQ2xhc3MgdW5hcnlCb29sZWFuT3BlcmF0b3JFQ2xhc3MgPSBudWxsOworCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJpdmF0ZSBFQ2xhc3MgcHJlZGljYXRlRXhwcmVzc2lvbkVDbGFzcyA9IG51bGw7CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcml2YXRlIEVDbGFzcyBpZGVudGlmaWFibGVQcmVkaWNhdGVFQ2xhc3MgPSBudWxsOworCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJpdmF0ZSBFQ2xhc3MgaWRlbnRpZmlhYmxlUHJlZGljYXRlRXhwcmVzc2lvbkVDbGFzcyA9IG51bGw7CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcml2YXRlIEVDbGFzcyBpZGVudGlmaWFibGVUZXN0RUNsYXNzID0gbnVsbDsKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByaXZhdGUgRUNsYXNzIHRpbWVUZXN0RUNsYXNzID0gbnVsbDsKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByaXZhdGUgRUNsYXNzIGVsYXBzZWRUaW1lVGVzdEVDbGFzcyA9IG51bGw7CisKKwkvKioKKwkgKiBDcmVhdGVzIGFuIGluc3RhbmNlIG9mIHRoZSBtb2RlbCA8Yj5QYWNrYWdlPC9iPiwgcmVnaXN0ZXJlZCB3aXRoCisJICoge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FUGFja2FnZS5SZWdpc3RyeSBFUGFja2FnZS5SZWdpc3RyeX0gYnkgdGhlIHBhY2thZ2UKKwkgKiBwYWNrYWdlIFVSSSB2YWx1ZS4KKwkgKiA8cD5Ob3RlOiB0aGUgY29ycmVjdCB3YXkgdG8gY3JlYXRlIHRoZSBwYWNrYWdlIGlzIHZpYSB0aGUgc3RhdGljCisJICogZmFjdG9yeSBtZXRob2Qge0BsaW5rICNpbml0IGluaXQoKX0sIHdoaWNoIGFsc28gcGVyZm9ybXMKKwkgKiBpbml0aWFsaXphdGlvbiBvZiB0aGUgcGFja2FnZSwgb3IgcmV0dXJucyB0aGUgcmVnaXN0ZXJlZCBwYWNrYWdlLAorCSAqIGlmIG9uZSBhbHJlYWR5IGV4aXN0cy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVQYWNrYWdlLlJlZ2lzdHJ5CisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlLlByZWRpY2F0ZVBhY2thZ2UjZU5TX1VSSQorCSAqIEBzZWUgI2luaXQoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcml2YXRlIFByZWRpY2F0ZVBhY2thZ2VJbXBsKCkgeworCQlzdXBlcihlTlNfVVJJLCBQcmVkaWNhdGVGYWN0b3J5LmVJTlNUQU5DRSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJpdmF0ZSBzdGF0aWMgYm9vbGVhbiBpc0luaXRlZCA9IGZhbHNlOworCisJLyoqCisJICogQ3JlYXRlcywgcmVnaXN0ZXJzLCBhbmQgaW5pdGlhbGl6ZXMgdGhlIDxiPlBhY2thZ2U8L2I+IGZvciB0aGlzIG1vZGVsLCBhbmQgZm9yIGFueSBvdGhlcnMgdXBvbiB3aGljaCBpdCBkZXBlbmRzLgorCSAqIAorCSAqIDxwPlRoaXMgbWV0aG9kIGlzIHVzZWQgdG8gaW5pdGlhbGl6ZSB7QGxpbmsgUHJlZGljYXRlUGFja2FnZSNlSU5TVEFOQ0V9IHdoZW4gdGhhdCBmaWVsZCBpcyBhY2Nlc3NlZC4KKwkgKiBDbGllbnRzIHNob3VsZCBub3QgaW52b2tlIGl0IGRpcmVjdGx5LiBJbnN0ZWFkLCB0aGV5IHNob3VsZCBzaW1wbHkgYWNjZXNzIHRoYXQgZmllbGQgdG8gb2J0YWluIHRoZSBwYWNrYWdlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZU5TX1VSSQorCSAqIEBzZWUgI2NyZWF0ZVBhY2thZ2VDb250ZW50cygpCisJICogQHNlZSAjaW5pdGlhbGl6ZVBhY2thZ2VDb250ZW50cygpCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBzdGF0aWMgUHJlZGljYXRlUGFja2FnZSBpbml0KCkgeworCQlpZiAoaXNJbml0ZWQpIHJldHVybiAoUHJlZGljYXRlUGFja2FnZSlFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShQcmVkaWNhdGVQYWNrYWdlLmVOU19VUkkpOworCisJCS8vIE9idGFpbiBvciBjcmVhdGUgYW5kIHJlZ2lzdGVyIHBhY2thZ2UKKwkJUHJlZGljYXRlUGFja2FnZUltcGwgdGhlUHJlZGljYXRlUGFja2FnZSA9IChQcmVkaWNhdGVQYWNrYWdlSW1wbCkoRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0KGVOU19VUkkpIGluc3RhbmNlb2YgUHJlZGljYXRlUGFja2FnZUltcGwgPyBFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXQoZU5TX1VSSSkgOiBuZXcgUHJlZGljYXRlUGFja2FnZUltcGwoKSk7CisKKwkJaXNJbml0ZWQgPSB0cnVlOworCisJCS8vIEluaXRpYWxpemUgc2ltcGxlIGRlcGVuZGVuY2llcworCQlFY29yZVBhY2thZ2UuZUlOU1RBTkNFLmVDbGFzcygpOworCisJCS8vIE9idGFpbiBvciBjcmVhdGUgYW5kIHJlZ2lzdGVyIGludGVyZGVwZW5kZW5jaWVzCisJCUNvbW1vblBhY2thZ2VJbXBsIHRoZUNvbW1vblBhY2thZ2UgPSAoQ29tbW9uUGFja2FnZUltcGwpKEVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVQYWNrYWdlKENvbW1vblBhY2thZ2UuZU5TX1VSSSkgaW5zdGFuY2VvZiBDb21tb25QYWNrYWdlSW1wbCA/IEVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVQYWNrYWdlKENvbW1vblBhY2thZ2UuZU5TX1VSSSkgOiBDb21tb25QYWNrYWdlLmVJTlNUQU5DRSk7CisJCUV4cGVyaW1lbnRQYWNrYWdlSW1wbCB0aGVFeHBlcmltZW50UGFja2FnZSA9IChFeHBlcmltZW50UGFja2FnZUltcGwpKEVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVQYWNrYWdlKEV4cGVyaW1lbnRQYWNrYWdlLmVOU19VUkkpIGluc3RhbmNlb2YgRXhwZXJpbWVudFBhY2thZ2VJbXBsID8gRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RVBhY2thZ2UoRXhwZXJpbWVudFBhY2thZ2UuZU5TX1VSSSkgOiBFeHBlcmltZW50UGFja2FnZS5lSU5TVEFOQ0UpOworCQlHcmFwaFBhY2thZ2VJbXBsIHRoZUdyYXBoUGFja2FnZSA9IChHcmFwaFBhY2thZ2VJbXBsKShFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShHcmFwaFBhY2thZ2UuZU5TX1VSSSkgaW5zdGFuY2VvZiBHcmFwaFBhY2thZ2VJbXBsID8gRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RVBhY2thZ2UoR3JhcGhQYWNrYWdlLmVOU19VUkkpIDogR3JhcGhQYWNrYWdlLmVJTlNUQU5DRSk7CisJCU1vZGVsUGFja2FnZUltcGwgdGhlTW9kZWxQYWNrYWdlID0gKE1vZGVsUGFja2FnZUltcGwpKEVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVQYWNrYWdlKE1vZGVsUGFja2FnZS5lTlNfVVJJKSBpbnN0YW5jZW9mIE1vZGVsUGFja2FnZUltcGwgPyBFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShNb2RlbFBhY2thZ2UuZU5TX1VSSSkgOiBNb2RlbFBhY2thZ2UuZUlOU1RBTkNFKTsKKwkJTW9kaWZpZXJQYWNrYWdlSW1wbCB0aGVNb2RpZmllclBhY2thZ2UgPSAoTW9kaWZpZXJQYWNrYWdlSW1wbCkoRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RVBhY2thZ2UoTW9kaWZpZXJQYWNrYWdlLmVOU19VUkkpIGluc3RhbmNlb2YgTW9kaWZpZXJQYWNrYWdlSW1wbCA/IEVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVQYWNrYWdlKE1vZGlmaWVyUGFja2FnZS5lTlNfVVJJKSA6IE1vZGlmaWVyUGFja2FnZS5lSU5TVEFOQ0UpOworCQlTY2VuYXJpb1BhY2thZ2VJbXBsIHRoZVNjZW5hcmlvUGFja2FnZSA9IChTY2VuYXJpb1BhY2thZ2VJbXBsKShFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShTY2VuYXJpb1BhY2thZ2UuZU5TX1VSSSkgaW5zdGFuY2VvZiBTY2VuYXJpb1BhY2thZ2VJbXBsID8gRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RVBhY2thZ2UoU2NlbmFyaW9QYWNrYWdlLmVOU19VUkkpIDogU2NlbmFyaW9QYWNrYWdlLmVJTlNUQU5DRSk7CisJCVNlcXVlbmNlclBhY2thZ2VJbXBsIHRoZVNlcXVlbmNlclBhY2thZ2UgPSAoU2VxdWVuY2VyUGFja2FnZUltcGwpKEVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVQYWNrYWdlKFNlcXVlbmNlclBhY2thZ2UuZU5TX1VSSSkgaW5zdGFuY2VvZiBTZXF1ZW5jZXJQYWNrYWdlSW1wbCA/IEVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVQYWNrYWdlKFNlcXVlbmNlclBhY2thZ2UuZU5TX1VSSSkgOiBTZXF1ZW5jZXJQYWNrYWdlLmVJTlNUQU5DRSk7CisJCVRyaWdnZXJQYWNrYWdlSW1wbCB0aGVUcmlnZ2VyUGFja2FnZSA9IChUcmlnZ2VyUGFja2FnZUltcGwpKEVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVQYWNrYWdlKFRyaWdnZXJQYWNrYWdlLmVOU19VUkkpIGluc3RhbmNlb2YgVHJpZ2dlclBhY2thZ2VJbXBsID8gRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RVBhY2thZ2UoVHJpZ2dlclBhY2thZ2UuZU5TX1VSSSkgOiBUcmlnZ2VyUGFja2FnZS5lSU5TVEFOQ0UpOworCQlTb2x2ZXJQYWNrYWdlSW1wbCB0aGVTb2x2ZXJQYWNrYWdlID0gKFNvbHZlclBhY2thZ2VJbXBsKShFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShTb2x2ZXJQYWNrYWdlLmVOU19VUkkpIGluc3RhbmNlb2YgU29sdmVyUGFja2FnZUltcGwgPyBFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShTb2x2ZXJQYWNrYWdlLmVOU19VUkkpIDogU29sdmVyUGFja2FnZS5lSU5TVEFOQ0UpOworCQlMb2dnZXJQYWNrYWdlSW1wbCB0aGVMb2dnZXJQYWNrYWdlID0gKExvZ2dlclBhY2thZ2VJbXBsKShFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShMb2dnZXJQYWNrYWdlLmVOU19VUkkpIGluc3RhbmNlb2YgTG9nZ2VyUGFja2FnZUltcGwgPyBFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShMb2dnZXJQYWNrYWdlLmVOU19VUkkpIDogTG9nZ2VyUGFja2FnZS5lSU5TVEFOQ0UpOworCisJCS8vIENyZWF0ZSBwYWNrYWdlIG1ldGEtZGF0YSBvYmplY3RzCisJCXRoZVByZWRpY2F0ZVBhY2thZ2UuY3JlYXRlUGFja2FnZUNvbnRlbnRzKCk7CisJCXRoZUNvbW1vblBhY2thZ2UuY3JlYXRlUGFja2FnZUNvbnRlbnRzKCk7CisJCXRoZUV4cGVyaW1lbnRQYWNrYWdlLmNyZWF0ZVBhY2thZ2VDb250ZW50cygpOworCQl0aGVHcmFwaFBhY2thZ2UuY3JlYXRlUGFja2FnZUNvbnRlbnRzKCk7CisJCXRoZU1vZGVsUGFja2FnZS5jcmVhdGVQYWNrYWdlQ29udGVudHMoKTsKKwkJdGhlTW9kaWZpZXJQYWNrYWdlLmNyZWF0ZVBhY2thZ2VDb250ZW50cygpOworCQl0aGVTY2VuYXJpb1BhY2thZ2UuY3JlYXRlUGFja2FnZUNvbnRlbnRzKCk7CisJCXRoZVNlcXVlbmNlclBhY2thZ2UuY3JlYXRlUGFja2FnZUNvbnRlbnRzKCk7CisJCXRoZVRyaWdnZXJQYWNrYWdlLmNyZWF0ZVBhY2thZ2VDb250ZW50cygpOworCQl0aGVTb2x2ZXJQYWNrYWdlLmNyZWF0ZVBhY2thZ2VDb250ZW50cygpOworCQl0aGVMb2dnZXJQYWNrYWdlLmNyZWF0ZVBhY2thZ2VDb250ZW50cygpOworCisJCS8vIEluaXRpYWxpemUgY3JlYXRlZCBtZXRhLWRhdGEKKwkJdGhlUHJlZGljYXRlUGFja2FnZS5pbml0aWFsaXplUGFja2FnZUNvbnRlbnRzKCk7CisJCXRoZUNvbW1vblBhY2thZ2UuaW5pdGlhbGl6ZVBhY2thZ2VDb250ZW50cygpOworCQl0aGVFeHBlcmltZW50UGFja2FnZS5pbml0aWFsaXplUGFja2FnZUNvbnRlbnRzKCk7CisJCXRoZUdyYXBoUGFja2FnZS5pbml0aWFsaXplUGFja2FnZUNvbnRlbnRzKCk7CisJCXRoZU1vZGVsUGFja2FnZS5pbml0aWFsaXplUGFja2FnZUNvbnRlbnRzKCk7CisJCXRoZU1vZGlmaWVyUGFja2FnZS5pbml0aWFsaXplUGFja2FnZUNvbnRlbnRzKCk7CisJCXRoZVNjZW5hcmlvUGFja2FnZS5pbml0aWFsaXplUGFja2FnZUNvbnRlbnRzKCk7CisJCXRoZVNlcXVlbmNlclBhY2thZ2UuaW5pdGlhbGl6ZVBhY2thZ2VDb250ZW50cygpOworCQl0aGVUcmlnZ2VyUGFja2FnZS5pbml0aWFsaXplUGFja2FnZUNvbnRlbnRzKCk7CisJCXRoZVNvbHZlclBhY2thZ2UuaW5pdGlhbGl6ZVBhY2thZ2VDb250ZW50cygpOworCQl0aGVMb2dnZXJQYWNrYWdlLmluaXRpYWxpemVQYWNrYWdlQ29udGVudHMoKTsKKworCQkvLyBNYXJrIG1ldGEtZGF0YSB0byBpbmRpY2F0ZSBpdCBjYW4ndCBiZSBjaGFuZ2VkCisJCXRoZVByZWRpY2F0ZVBhY2thZ2UuZnJlZXplKCk7CisKKyAgCisJCS8vIFVwZGF0ZSB0aGUgcmVnaXN0cnkgYW5kIHJldHVybiB0aGUgcGFja2FnZQorCQlFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5wdXQoUHJlZGljYXRlUGFja2FnZS5lTlNfVVJJLCB0aGVQcmVkaWNhdGVQYWNrYWdlKTsKKwkJcmV0dXJuIHRoZVByZWRpY2F0ZVBhY2thZ2U7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVDbGFzcyBnZXRBbmQoKSB7CisJCXJldHVybiBhbmRFQ2xhc3M7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVDbGFzcyBnZXRCb29sZWFuRXhwcmVzc2lvbigpIHsKKwkJcmV0dXJuIGJvb2xlYW5FeHByZXNzaW9uRUNsYXNzOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQ2xhc3MgZ2V0Qm9vbGVhbk9wZXJhdG9yKCkgeworCQlyZXR1cm4gYm9vbGVhbk9wZXJhdG9yRUNsYXNzOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQ2xhc3MgZ2V0RmFsc2UoKSB7CisJCXJldHVybiBmYWxzZUVDbGFzczsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUNsYXNzIGdldE5hcnlCb29sZWFuT3BlcmF0b3IoKSB7CisJCXJldHVybiBuYXJ5Qm9vbGVhbk9wZXJhdG9yRUNsYXNzOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFUmVmZXJlbmNlIGdldE5hcnlCb29sZWFuT3BlcmF0b3JfT3BlcmFuZHMoKSB7CisJCXJldHVybiAoRVJlZmVyZW5jZSluYXJ5Qm9vbGVhbk9wZXJhdG9yRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVDbGFzcyBnZXROb3QoKSB7CisJCXJldHVybiBub3RFQ2xhc3M7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVDbGFzcyBnZXRPcigpIHsKKwkJcmV0dXJuIG9yRUNsYXNzOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQ2xhc3MgZ2V0UHJlZGljYXRlKCkgeworCQlyZXR1cm4gcHJlZGljYXRlRUNsYXNzOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQ2xhc3MgZ2V0UHJlZGljYXRlUmVmZXJlbmNlKCkgeworCQlyZXR1cm4gcHJlZGljYXRlUmVmZXJlbmNlRUNsYXNzOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFUmVmZXJlbmNlIGdldFByZWRpY2F0ZVJlZmVyZW5jZV9QcmVkaWNhdGUoKSB7CisJCXJldHVybiAoRVJlZmVyZW5jZSlwcmVkaWNhdGVSZWZlcmVuY2VFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgwKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUNsYXNzIGdldFRlc3QoKSB7CisJCXJldHVybiB0ZXN0RUNsYXNzOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQ2xhc3MgZ2V0VHJ1ZSgpIHsKKwkJcmV0dXJuIHRydWVFQ2xhc3M7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVDbGFzcyBnZXRVbmFyeUJvb2xlYW5PcGVyYXRvcigpIHsKKwkJcmV0dXJuIHVuYXJ5Qm9vbGVhbk9wZXJhdG9yRUNsYXNzOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFUmVmZXJlbmNlIGdldFVuYXJ5Qm9vbGVhbk9wZXJhdG9yX09wZXJhbmQoKSB7CisJCXJldHVybiAoRVJlZmVyZW5jZSl1bmFyeUJvb2xlYW5PcGVyYXRvckVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDApOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQ2xhc3MgZ2V0UHJlZGljYXRlRXhwcmVzc2lvbigpIHsKKwkJcmV0dXJuIHByZWRpY2F0ZUV4cHJlc3Npb25FQ2xhc3M7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVSZWZlcmVuY2UgZ2V0UHJlZGljYXRlRXhwcmVzc2lvbl9QcmVkaWNhdGUoKSB7CisJCXJldHVybiAoRVJlZmVyZW5jZSlwcmVkaWNhdGVFeHByZXNzaW9uRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVDbGFzcyBnZXRJZGVudGlmaWFibGVQcmVkaWNhdGUoKSB7CisJCXJldHVybiBpZGVudGlmaWFibGVQcmVkaWNhdGVFQ2xhc3M7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVDbGFzcyBnZXRJZGVudGlmaWFibGVQcmVkaWNhdGVFeHByZXNzaW9uKCkgeworCQlyZXR1cm4gaWRlbnRpZmlhYmxlUHJlZGljYXRlRXhwcmVzc2lvbkVDbGFzczsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUNsYXNzIGdldElkZW50aWZpYWJsZVRlc3QoKSB7CisJCXJldHVybiBpZGVudGlmaWFibGVUZXN0RUNsYXNzOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQ2xhc3MgZ2V0VGltZVRlc3QoKSB7CisJCXJldHVybiB0aW1lVGVzdEVDbGFzczsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUNsYXNzIGdldEVsYXBzZWRUaW1lVGVzdCgpIHsKKwkJcmV0dXJuIGVsYXBzZWRUaW1lVGVzdEVDbGFzczsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUF0dHJpYnV0ZSBnZXRFbGFwc2VkVGltZVRlc3RfUmVmZXJlbmNlVGltZVZhbGlkKCkgeworCQlyZXR1cm4gKEVBdHRyaWJ1dGUpZWxhcHNlZFRpbWVUZXN0RUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVBdHRyaWJ1dGUgZ2V0RWxhcHNlZFRpbWVUZXN0X0VsYXBzZWRNaWxsaXNlY29uZHMoKSB7CisJCXJldHVybiAoRUF0dHJpYnV0ZSllbGFwc2VkVGltZVRlc3RFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgxKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUF0dHJpYnV0ZSBnZXRFbGFwc2VkVGltZVRlc3RfTnVtYmVyb2ZEYXlzKCkgeworCQlyZXR1cm4gKEVBdHRyaWJ1dGUpZWxhcHNlZFRpbWVUZXN0RUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMik7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVSZWZlcmVuY2UgZ2V0RWxhcHNlZFRpbWVUZXN0X1JlZmVyZW5jZVRpbWUoKSB7CisJCXJldHVybiAoRVJlZmVyZW5jZSllbGFwc2VkVGltZVRlc3RFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgzKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgUHJlZGljYXRlRmFjdG9yeSBnZXRQcmVkaWNhdGVGYWN0b3J5KCkgeworCQlyZXR1cm4gKFByZWRpY2F0ZUZhY3RvcnkpZ2V0RUZhY3RvcnlJbnN0YW5jZSgpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByaXZhdGUgYm9vbGVhbiBpc0NyZWF0ZWQgPSBmYWxzZTsKKworCS8qKgorCSAqIENyZWF0ZXMgdGhlIG1ldGEtbW9kZWwgb2JqZWN0cyBmb3IgdGhlIHBhY2thZ2UuICBUaGlzIG1ldGhvZCBpcworCSAqIGd1YXJkZWQgdG8gaGF2ZSBubyBhZmZlY3Qgb24gYW55IGludm9jYXRpb24gYnV0IGl0cyBmaXJzdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBjcmVhdGVQYWNrYWdlQ29udGVudHMoKSB7CisJCWlmIChpc0NyZWF0ZWQpIHJldHVybjsKKwkJaXNDcmVhdGVkID0gdHJ1ZTsKKworCQkvLyBDcmVhdGUgY2xhc3NlcyBhbmQgdGhlaXIgZmVhdHVyZXMKKwkJYW5kRUNsYXNzID0gY3JlYXRlRUNsYXNzKEFORCk7CisKKwkJYm9vbGVhbkV4cHJlc3Npb25FQ2xhc3MgPSBjcmVhdGVFQ2xhc3MoQk9PTEVBTl9FWFBSRVNTSU9OKTsKKworCQlib29sZWFuT3BlcmF0b3JFQ2xhc3MgPSBjcmVhdGVFQ2xhc3MoQk9PTEVBTl9PUEVSQVRPUik7CisKKwkJZmFsc2VFQ2xhc3MgPSBjcmVhdGVFQ2xhc3MoRkFMU0UpOworCisJCW5hcnlCb29sZWFuT3BlcmF0b3JFQ2xhc3MgPSBjcmVhdGVFQ2xhc3MoTkFSWV9CT09MRUFOX09QRVJBVE9SKTsKKwkJY3JlYXRlRVJlZmVyZW5jZShuYXJ5Qm9vbGVhbk9wZXJhdG9yRUNsYXNzLCBOQVJZX0JPT0xFQU5fT1BFUkFUT1JfX09QRVJBTkRTKTsKKworCQlub3RFQ2xhc3MgPSBjcmVhdGVFQ2xhc3MoTk9UKTsKKworCQlvckVDbGFzcyA9IGNyZWF0ZUVDbGFzcyhPUik7CisKKwkJcHJlZGljYXRlRUNsYXNzID0gY3JlYXRlRUNsYXNzKFBSRURJQ0FURSk7CisKKwkJcHJlZGljYXRlUmVmZXJlbmNlRUNsYXNzID0gY3JlYXRlRUNsYXNzKFBSRURJQ0FURV9SRUZFUkVOQ0UpOworCQljcmVhdGVFUmVmZXJlbmNlKHByZWRpY2F0ZVJlZmVyZW5jZUVDbGFzcywgUFJFRElDQVRFX1JFRkVSRU5DRV9fUFJFRElDQVRFKTsKKworCQl0ZXN0RUNsYXNzID0gY3JlYXRlRUNsYXNzKFRFU1QpOworCisJCXRydWVFQ2xhc3MgPSBjcmVhdGVFQ2xhc3MoVFJVRSk7CisKKwkJdW5hcnlCb29sZWFuT3BlcmF0b3JFQ2xhc3MgPSBjcmVhdGVFQ2xhc3MoVU5BUllfQk9PTEVBTl9PUEVSQVRPUik7CisJCWNyZWF0ZUVSZWZlcmVuY2UodW5hcnlCb29sZWFuT3BlcmF0b3JFQ2xhc3MsIFVOQVJZX0JPT0xFQU5fT1BFUkFUT1JfX09QRVJBTkQpOworCisJCXByZWRpY2F0ZUV4cHJlc3Npb25FQ2xhc3MgPSBjcmVhdGVFQ2xhc3MoUFJFRElDQVRFX0VYUFJFU1NJT04pOworCQljcmVhdGVFUmVmZXJlbmNlKHByZWRpY2F0ZUV4cHJlc3Npb25FQ2xhc3MsIFBSRURJQ0FURV9FWFBSRVNTSU9OX19QUkVESUNBVEUpOworCisJCWlkZW50aWZpYWJsZVByZWRpY2F0ZUVDbGFzcyA9IGNyZWF0ZUVDbGFzcyhJREVOVElGSUFCTEVfUFJFRElDQVRFKTsKKworCQlpZGVudGlmaWFibGVQcmVkaWNhdGVFeHByZXNzaW9uRUNsYXNzID0gY3JlYXRlRUNsYXNzKElERU5USUZJQUJMRV9QUkVESUNBVEVfRVhQUkVTU0lPTik7CisKKwkJaWRlbnRpZmlhYmxlVGVzdEVDbGFzcyA9IGNyZWF0ZUVDbGFzcyhJREVOVElGSUFCTEVfVEVTVCk7CisKKwkJdGltZVRlc3RFQ2xhc3MgPSBjcmVhdGVFQ2xhc3MoVElNRV9URVNUKTsKKworCQllbGFwc2VkVGltZVRlc3RFQ2xhc3MgPSBjcmVhdGVFQ2xhc3MoRUxBUFNFRF9USU1FX1RFU1QpOworCQljcmVhdGVFQXR0cmlidXRlKGVsYXBzZWRUaW1lVGVzdEVDbGFzcywgRUxBUFNFRF9USU1FX1RFU1RfX1JFRkVSRU5DRV9USU1FX1ZBTElEKTsKKwkJY3JlYXRlRUF0dHJpYnV0ZShlbGFwc2VkVGltZVRlc3RFQ2xhc3MsIEVMQVBTRURfVElNRV9URVNUX19FTEFQU0VEX01JTExJU0VDT05EUyk7CisJCWNyZWF0ZUVBdHRyaWJ1dGUoZWxhcHNlZFRpbWVUZXN0RUNsYXNzLCBFTEFQU0VEX1RJTUVfVEVTVF9fTlVNQkVST0ZfREFZUyk7CisJCWNyZWF0ZUVSZWZlcmVuY2UoZWxhcHNlZFRpbWVUZXN0RUNsYXNzLCBFTEFQU0VEX1RJTUVfVEVTVF9fUkVGRVJFTkNFX1RJTUUpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByaXZhdGUgYm9vbGVhbiBpc0luaXRpYWxpemVkID0gZmFsc2U7CisKKwkvKioKKwkgKiBDb21wbGV0ZSB0aGUgaW5pdGlhbGl6YXRpb24gb2YgdGhlIHBhY2thZ2UgYW5kIGl0cyBtZXRhLW1vZGVsLiAgVGhpcworCSAqIG1ldGhvZCBpcyBndWFyZGVkIHRvIGhhdmUgbm8gYWZmZWN0IG9uIGFueSBpbnZvY2F0aW9uIGJ1dCBpdHMgZmlyc3QuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgaW5pdGlhbGl6ZVBhY2thZ2VDb250ZW50cygpIHsKKwkJaWYgKGlzSW5pdGlhbGl6ZWQpIHJldHVybjsKKwkJaXNJbml0aWFsaXplZCA9IHRydWU7CisKKwkJLy8gSW5pdGlhbGl6ZSBwYWNrYWdlCisJCXNldE5hbWUoZU5BTUUpOworCQlzZXROc1ByZWZpeChlTlNfUFJFRklYKTsKKwkJc2V0TnNVUkkoZU5TX1VSSSk7CisKKwkJLy8gT2J0YWluIG90aGVyIGRlcGVuZGVudCBwYWNrYWdlcworCQlNb2RlbFBhY2thZ2UgdGhlTW9kZWxQYWNrYWdlID0gKE1vZGVsUGFja2FnZSlFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShNb2RlbFBhY2thZ2UuZU5TX1VSSSk7CisJCUdyYXBoUGFja2FnZSB0aGVHcmFwaFBhY2thZ2UgPSAoR3JhcGhQYWNrYWdlKUVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVQYWNrYWdlKEdyYXBoUGFja2FnZS5lTlNfVVJJKTsKKwkJQ29tbW9uUGFja2FnZSB0aGVDb21tb25QYWNrYWdlID0gKENvbW1vblBhY2thZ2UpRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RVBhY2thZ2UoQ29tbW9uUGFja2FnZS5lTlNfVVJJKTsKKworCQkvLyBDcmVhdGUgdHlwZSBwYXJhbWV0ZXJzCisKKwkJLy8gU2V0IGJvdW5kcyBmb3IgdHlwZSBwYXJhbWV0ZXJzCisKKwkJLy8gQWRkIHN1cGVydHlwZXMgdG8gY2xhc3NlcworCQlhbmRFQ2xhc3MuZ2V0RVN1cGVyVHlwZXMoKS5hZGQodGhpcy5nZXROYXJ5Qm9vbGVhbk9wZXJhdG9yKCkpOworCQlib29sZWFuRXhwcmVzc2lvbkVDbGFzcy5nZXRFU3VwZXJUeXBlcygpLmFkZCh0aGlzLmdldFByZWRpY2F0ZSgpKTsKKwkJYm9vbGVhbk9wZXJhdG9yRUNsYXNzLmdldEVTdXBlclR5cGVzKCkuYWRkKHRoaXMuZ2V0Qm9vbGVhbkV4cHJlc3Npb24oKSk7CisJCWZhbHNlRUNsYXNzLmdldEVTdXBlclR5cGVzKCkuYWRkKHRoaXMuZ2V0VGVzdCgpKTsKKwkJbmFyeUJvb2xlYW5PcGVyYXRvckVDbGFzcy5nZXRFU3VwZXJUeXBlcygpLmFkZCh0aGlzLmdldEJvb2xlYW5PcGVyYXRvcigpKTsKKwkJbm90RUNsYXNzLmdldEVTdXBlclR5cGVzKCkuYWRkKHRoaXMuZ2V0VW5hcnlCb29sZWFuT3BlcmF0b3IoKSk7CisJCW9yRUNsYXNzLmdldEVTdXBlclR5cGVzKCkuYWRkKHRoaXMuZ2V0TmFyeUJvb2xlYW5PcGVyYXRvcigpKTsKKwkJcHJlZGljYXRlUmVmZXJlbmNlRUNsYXNzLmdldEVTdXBlclR5cGVzKCkuYWRkKHRoaXMuZ2V0UHJlZGljYXRlKCkpOworCQl0ZXN0RUNsYXNzLmdldEVTdXBlclR5cGVzKCkuYWRkKHRoaXMuZ2V0UHJlZGljYXRlKCkpOworCQl0cnVlRUNsYXNzLmdldEVTdXBlclR5cGVzKCkuYWRkKHRoaXMuZ2V0VGVzdCgpKTsKKwkJdW5hcnlCb29sZWFuT3BlcmF0b3JFQ2xhc3MuZ2V0RVN1cGVyVHlwZXMoKS5hZGQodGhpcy5nZXRCb29sZWFuT3BlcmF0b3IoKSk7CisJCXByZWRpY2F0ZUV4cHJlc3Npb25FQ2xhc3MuZ2V0RVN1cGVyVHlwZXMoKS5hZGQodGhpcy5nZXRCb29sZWFuRXhwcmVzc2lvbigpKTsKKwkJaWRlbnRpZmlhYmxlUHJlZGljYXRlRUNsYXNzLmdldEVTdXBlclR5cGVzKCkuYWRkKHRoZUNvbW1vblBhY2thZ2UuZ2V0SWRlbnRpZmlhYmxlKCkpOworCQlpZGVudGlmaWFibGVQcmVkaWNhdGVFQ2xhc3MuZ2V0RVN1cGVyVHlwZXMoKS5hZGQodGhpcy5nZXRQcmVkaWNhdGUoKSk7CisJCWlkZW50aWZpYWJsZVByZWRpY2F0ZUV4cHJlc3Npb25FQ2xhc3MuZ2V0RVN1cGVyVHlwZXMoKS5hZGQodGhpcy5nZXRJZGVudGlmaWFibGVQcmVkaWNhdGUoKSk7CisJCWlkZW50aWZpYWJsZVByZWRpY2F0ZUV4cHJlc3Npb25FQ2xhc3MuZ2V0RVN1cGVyVHlwZXMoKS5hZGQodGhpcy5nZXRQcmVkaWNhdGVFeHByZXNzaW9uKCkpOworCQlpZGVudGlmaWFibGVUZXN0RUNsYXNzLmdldEVTdXBlclR5cGVzKCkuYWRkKHRoaXMuZ2V0SWRlbnRpZmlhYmxlUHJlZGljYXRlKCkpOworCQlpZGVudGlmaWFibGVUZXN0RUNsYXNzLmdldEVTdXBlclR5cGVzKCkuYWRkKHRoaXMuZ2V0VGVzdCgpKTsKKwkJdGltZVRlc3RFQ2xhc3MuZ2V0RVN1cGVyVHlwZXMoKS5hZGQodGhpcy5nZXRUZXN0KCkpOworCQllbGFwc2VkVGltZVRlc3RFQ2xhc3MuZ2V0RVN1cGVyVHlwZXMoKS5hZGQodGhpcy5nZXRUaW1lVGVzdCgpKTsKKworCQkvLyBJbml0aWFsaXplIGNsYXNzZXMgYW5kIGZlYXR1cmVzOyBhZGQgb3BlcmF0aW9ucyBhbmQgcGFyYW1ldGVycworCQlpbml0RUNsYXNzKGFuZEVDbGFzcywgQW5kLmNsYXNzLCAiQW5kIiwgIUlTX0FCU1RSQUNULCAhSVNfSU5URVJGQUNFLCBJU19HRU5FUkFURURfSU5TVEFOQ0VfQ0xBU1MpOyAvLyROT04tTkxTLTEkCisKKwkJaW5pdEVDbGFzcyhib29sZWFuRXhwcmVzc2lvbkVDbGFzcywgQm9vbGVhbkV4cHJlc3Npb24uY2xhc3MsICJCb29sZWFuRXhwcmVzc2lvbiIsIElTX0FCU1RSQUNULCAhSVNfSU5URVJGQUNFLCBJU19HRU5FUkFURURfSU5TVEFOQ0VfQ0xBU1MpOyAvLyROT04tTkxTLTEkCisKKwkJaW5pdEVDbGFzcyhib29sZWFuT3BlcmF0b3JFQ2xhc3MsIEJvb2xlYW5PcGVyYXRvci5jbGFzcywgIkJvb2xlYW5PcGVyYXRvciIsIElTX0FCU1RSQUNULCAhSVNfSU5URVJGQUNFLCBJU19HRU5FUkFURURfSU5TVEFOQ0VfQ0xBU1MpOyAvLyROT04tTkxTLTEkCisKKwkJaW5pdEVDbGFzcyhmYWxzZUVDbGFzcywgRmFsc2UuY2xhc3MsICJGYWxzZSIsICFJU19BQlNUUkFDVCwgIUlTX0lOVEVSRkFDRSwgSVNfR0VORVJBVEVEX0lOU1RBTkNFX0NMQVNTKTsgLy8kTk9OLU5MUy0xJAorCisJCWluaXRFQ2xhc3MobmFyeUJvb2xlYW5PcGVyYXRvckVDbGFzcywgTmFyeUJvb2xlYW5PcGVyYXRvci5jbGFzcywgIk5hcnlCb29sZWFuT3BlcmF0b3IiLCBJU19BQlNUUkFDVCwgIUlTX0lOVEVSRkFDRSwgSVNfR0VORVJBVEVEX0lOU1RBTkNFX0NMQVNTKTsgLy8kTk9OLU5MUy0xJAorCQlpbml0RVJlZmVyZW5jZShnZXROYXJ5Qm9vbGVhbk9wZXJhdG9yX09wZXJhbmRzKCksIHRoaXMuZ2V0UHJlZGljYXRlKCksIG51bGwsICJvcGVyYW5kcyIsIG51bGwsIDAsIC0xLCBOYXJ5Qm9vbGVhbk9wZXJhdG9yLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsIElTX0NPTVBPU0lURSwgIUlTX1JFU09MVkVfUFJPWElFUywgIUlTX1VOU0VUVEFCTEUsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOyAvLyROT04tTkxTLTEkCisKKwkJaW5pdEVDbGFzcyhub3RFQ2xhc3MsIE5vdC5jbGFzcywgIk5vdCIsICFJU19BQlNUUkFDVCwgIUlTX0lOVEVSRkFDRSwgSVNfR0VORVJBVEVEX0lOU1RBTkNFX0NMQVNTKTsgLy8kTk9OLU5MUy0xJAorCisJCWluaXRFQ2xhc3Mob3JFQ2xhc3MsIE9yLmNsYXNzLCAiT3IiLCAhSVNfQUJTVFJBQ1QsICFJU19JTlRFUkZBQ0UsIElTX0dFTkVSQVRFRF9JTlNUQU5DRV9DTEFTUyk7IC8vJE5PTi1OTFMtMSQKKworCQlpbml0RUNsYXNzKHByZWRpY2F0ZUVDbGFzcywgUHJlZGljYXRlLmNsYXNzLCAiUHJlZGljYXRlIiwgSVNfQUJTVFJBQ1QsICFJU19JTlRFUkZBQ0UsIElTX0dFTkVSQVRFRF9JTlNUQU5DRV9DTEFTUyk7IC8vJE5PTi1OTFMtMSQKKworCQlFT3BlcmF0aW9uIG9wID0gYWRkRU9wZXJhdGlvbihwcmVkaWNhdGVFQ2xhc3MsIGVjb3JlUGFja2FnZS5nZXRFQm9vbGVhbigpLCAiZXZhbHVhdGUiLCAwLCAxLCBJU19VTklRVUUsIElTX09SREVSRUQpOyAvLyROT04tTkxTLTEkCisJCWFkZEVQYXJhbWV0ZXIob3AsIHRoZU1vZGVsUGFja2FnZS5nZXRTVEVNVGltZSgpLCAidGltZSIsIDAsIDEsIElTX1VOSVFVRSwgSVNfT1JERVJFRCk7IC8vJE5PTi1OTFMtMSQKKwkJYWRkRVBhcmFtZXRlcihvcCwgZWNvcmVQYWNrYWdlLmdldEVMb25nKCksICJ0aW1lclBlcmlvZCIsIDAsIDEsIElTX1VOSVFVRSwgSVNfT1JERVJFRCk7IC8vJE5PTi1OTFMtMSQKKwkJYWRkRVBhcmFtZXRlcihvcCwgdGhlR3JhcGhQYWNrYWdlLmdldEdyYXBoKCksICJncmFwaCIsIDAsIDEsIElTX1VOSVFVRSwgSVNfT1JERVJFRCk7IC8vJE5PTi1OTFMtMSQKKworCQlhZGRFT3BlcmF0aW9uKHByZWRpY2F0ZUVDbGFzcywgbnVsbCwgInJlc2V0IiwgMCwgMSwgSVNfVU5JUVVFLCBJU19PUkRFUkVEKTsgLy8kTk9OLU5MUy0xJAorCisJCWluaXRFQ2xhc3MocHJlZGljYXRlUmVmZXJlbmNlRUNsYXNzLCBQcmVkaWNhdGVSZWZlcmVuY2UuY2xhc3MsICJQcmVkaWNhdGVSZWZlcmVuY2UiLCAhSVNfQUJTVFJBQ1QsICFJU19JTlRFUkZBQ0UsIElTX0dFTkVSQVRFRF9JTlNUQU5DRV9DTEFTUyk7IC8vJE5PTi1OTFMtMSQKKwkJaW5pdEVSZWZlcmVuY2UoZ2V0UHJlZGljYXRlUmVmZXJlbmNlX1ByZWRpY2F0ZSgpLCB0aGlzLmdldFByZWRpY2F0ZSgpLCBudWxsLCAicHJlZGljYXRlIiwgbnVsbCwgMCwgMSwgUHJlZGljYXRlUmVmZXJlbmNlLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19DT01QT1NJVEUsIElTX1JFU09MVkVfUFJPWElFUywgIUlTX1VOU0VUVEFCTEUsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOyAvLyROT04tTkxTLTEkCisKKwkJaW5pdEVDbGFzcyh0ZXN0RUNsYXNzLCBUZXN0LmNsYXNzLCAiVGVzdCIsIElTX0FCU1RSQUNULCAhSVNfSU5URVJGQUNFLCBJU19HRU5FUkFURURfSU5TVEFOQ0VfQ0xBU1MpOyAvLyROT04tTkxTLTEkCisKKwkJaW5pdEVDbGFzcyh0cnVlRUNsYXNzLCBUcnVlLmNsYXNzLCAiVHJ1ZSIsICFJU19BQlNUUkFDVCwgIUlTX0lOVEVSRkFDRSwgSVNfR0VORVJBVEVEX0lOU1RBTkNFX0NMQVNTKTsgLy8kTk9OLU5MUy0xJAorCisJCWluaXRFQ2xhc3ModW5hcnlCb29sZWFuT3BlcmF0b3JFQ2xhc3MsIFVuYXJ5Qm9vbGVhbk9wZXJhdG9yLmNsYXNzLCAiVW5hcnlCb29sZWFuT3BlcmF0b3IiLCBJU19BQlNUUkFDVCwgIUlTX0lOVEVSRkFDRSwgSVNfR0VORVJBVEVEX0lOU1RBTkNFX0NMQVNTKTsgLy8kTk9OLU5MUy0xJAorCQlpbml0RVJlZmVyZW5jZShnZXRVbmFyeUJvb2xlYW5PcGVyYXRvcl9PcGVyYW5kKCksIHRoaXMuZ2V0UHJlZGljYXRlKCksIG51bGwsICJvcGVyYW5kIiwgbnVsbCwgMCwgMSwgVW5hcnlCb29sZWFuT3BlcmF0b3IuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgSVNfQ09NUE9TSVRFLCAhSVNfUkVTT0xWRV9QUk9YSUVTLCAhSVNfVU5TRVRUQUJMRSwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7IC8vJE5PTi1OTFMtMSQKKworCQlpbml0RUNsYXNzKHByZWRpY2F0ZUV4cHJlc3Npb25FQ2xhc3MsIFByZWRpY2F0ZUV4cHJlc3Npb24uY2xhc3MsICJQcmVkaWNhdGVFeHByZXNzaW9uIiwgIUlTX0FCU1RSQUNULCAhSVNfSU5URVJGQUNFLCBJU19HRU5FUkFURURfSU5TVEFOQ0VfQ0xBU1MpOyAvLyROT04tTkxTLTEkCisJCWluaXRFUmVmZXJlbmNlKGdldFByZWRpY2F0ZUV4cHJlc3Npb25fUHJlZGljYXRlKCksIHRoaXMuZ2V0UHJlZGljYXRlKCksIG51bGwsICJwcmVkaWNhdGUiLCBudWxsLCAwLCAxLCBQcmVkaWNhdGVFeHByZXNzaW9uLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsIElTX0NPTVBPU0lURSwgIUlTX1JFU09MVkVfUFJPWElFUywgIUlTX1VOU0VUVEFCTEUsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOyAvLyROT04tTkxTLTEkCisKKwkJaW5pdEVDbGFzcyhpZGVudGlmaWFibGVQcmVkaWNhdGVFQ2xhc3MsIElkZW50aWZpYWJsZVByZWRpY2F0ZS5jbGFzcywgIklkZW50aWZpYWJsZVByZWRpY2F0ZSIsIElTX0FCU1RSQUNULCAhSVNfSU5URVJGQUNFLCBJU19HRU5FUkFURURfSU5TVEFOQ0VfQ0xBU1MpOyAvLyROT04tTkxTLTEkCisKKwkJaW5pdEVDbGFzcyhpZGVudGlmaWFibGVQcmVkaWNhdGVFeHByZXNzaW9uRUNsYXNzLCBJZGVudGlmaWFibGVQcmVkaWNhdGVFeHByZXNzaW9uLmNsYXNzLCAiSWRlbnRpZmlhYmxlUHJlZGljYXRlRXhwcmVzc2lvbiIsICFJU19BQlNUUkFDVCwgIUlTX0lOVEVSRkFDRSwgSVNfR0VORVJBVEVEX0lOU1RBTkNFX0NMQVNTKTsgLy8kTk9OLU5MUy0xJAorCisJCWluaXRFQ2xhc3MoaWRlbnRpZmlhYmxlVGVzdEVDbGFzcywgSWRlbnRpZmlhYmxlVGVzdC5jbGFzcywgIklkZW50aWZpYWJsZVRlc3QiLCBJU19BQlNUUkFDVCwgIUlTX0lOVEVSRkFDRSwgSVNfR0VORVJBVEVEX0lOU1RBTkNFX0NMQVNTKTsgLy8kTk9OLU5MUy0xJAorCisJCWluaXRFQ2xhc3ModGltZVRlc3RFQ2xhc3MsIFRpbWVUZXN0LmNsYXNzLCAiVGltZVRlc3QiLCBJU19BQlNUUkFDVCwgIUlTX0lOVEVSRkFDRSwgSVNfR0VORVJBVEVEX0lOU1RBTkNFX0NMQVNTKTsgLy8kTk9OLU5MUy0xJAorCisJCWluaXRFQ2xhc3MoZWxhcHNlZFRpbWVUZXN0RUNsYXNzLCBFbGFwc2VkVGltZVRlc3QuY2xhc3MsICJFbGFwc2VkVGltZVRlc3QiLCAhSVNfQUJTVFJBQ1QsICFJU19JTlRFUkZBQ0UsIElTX0dFTkVSQVRFRF9JTlNUQU5DRV9DTEFTUyk7IC8vJE5PTi1OTFMtMSQKKwkJaW5pdEVBdHRyaWJ1dGUoZ2V0RWxhcHNlZFRpbWVUZXN0X1JlZmVyZW5jZVRpbWVWYWxpZCgpLCBlY29yZVBhY2thZ2UuZ2V0RUJvb2xlYW4oKSwgInJlZmVyZW5jZVRpbWVWYWxpZCIsICJmYWxzZSIsIDAsIDEsIEVsYXBzZWRUaW1lVGVzdC5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCisJCWluaXRFQXR0cmlidXRlKGdldEVsYXBzZWRUaW1lVGVzdF9FbGFwc2VkTWlsbGlzZWNvbmRzKCksIGVjb3JlUGFja2FnZS5nZXRFTG9uZygpLCAiZWxhcHNlZE1pbGxpc2Vjb25kcyIsIG51bGwsIDAsIDEsIEVsYXBzZWRUaW1lVGVzdC5jbGFzcywgSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsICFJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsgLy8kTk9OLU5MUy0xJAorCQlpbml0RUF0dHJpYnV0ZShnZXRFbGFwc2VkVGltZVRlc3RfTnVtYmVyb2ZEYXlzKCksIGVjb3JlUGFja2FnZS5nZXRFSW50KCksICJudW1iZXJvZkRheXMiLCAiMCIsIDAsIDEsIEVsYXBzZWRUaW1lVGVzdC5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCisJCWluaXRFUmVmZXJlbmNlKGdldEVsYXBzZWRUaW1lVGVzdF9SZWZlcmVuY2VUaW1lKCksIHRoZU1vZGVsUGFja2FnZS5nZXRTVEVNVGltZSgpLCBudWxsLCAicmVmZXJlbmNlVGltZSIsIG51bGwsIDAsIDEsIEVsYXBzZWRUaW1lVGVzdC5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCBJU19DT01QT1NJVEUsICFJU19SRVNPTFZFX1BST1hJRVMsICFJU19VTlNFVFRBQkxFLCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsgLy8kTk9OLU5MUy0xJAorCisJCS8vIENyZWF0ZSByZXNvdXJjZQorCQljcmVhdGVSZXNvdXJjZShlTlNfVVJJKTsKKwl9CisKK30gLy9QcmVkaWNhdGVQYWNrYWdlSW1wbApkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9wcmVkaWNhdGUvaW1wbC9QcmVkaWNhdGVSZWZlcmVuY2VJbXBsLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3ByZWRpY2F0ZS9pbXBsL1ByZWRpY2F0ZVJlZmVyZW5jZUltcGwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jN2E2NDEwCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9wcmVkaWNhdGUvaW1wbC9QcmVkaWNhdGVSZWZlcmVuY2VJbXBsLmphdmEKQEAgLTAsMCArMSwxNzUgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZS5pbXBsOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5JbnRlcm5hbEVPYmplY3Q7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLmltcGwuRU5vdGlmaWNhdGlvbkltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkdyYXBoOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5TVEVNVGltZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlLlByZWRpY2F0ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlLlByZWRpY2F0ZVBhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZS5QcmVkaWNhdGVSZWZlcmVuY2U7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIEFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5SZWZlcmVuY2U8L2I+PC9lbT4nLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiA8cD4KKyAqIFRoZSBmb2xsb3dpbmcgZmVhdHVyZXMgYXJlIGltcGxlbWVudGVkOgorICogPHVsPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUuaW1wbC5QcmVkaWNhdGVSZWZlcmVuY2VJbXBsI2dldFByZWRpY2F0ZSA8ZW0+UHJlZGljYXRlPC9lbT59PC9saT4KKyAqIDwvdWw+CisgKiA8L3A+CisgKgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgUHJlZGljYXRlUmVmZXJlbmNlSW1wbCBleHRlbmRzIFByZWRpY2F0ZUltcGwgaW1wbGVtZW50cyBQcmVkaWNhdGVSZWZlcmVuY2UgeworCS8qKgorCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldFByZWRpY2F0ZSgpIDxlbT5QcmVkaWNhdGU8L2VtPn0nIHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI2dldFByZWRpY2F0ZSgpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIFByZWRpY2F0ZSBwcmVkaWNhdGU7CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgUHJlZGljYXRlUmVmZXJlbmNlSW1wbCgpIHsKKwkJc3VwZXIoKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgRUNsYXNzIGVTdGF0aWNDbGFzcygpIHsKKwkJcmV0dXJuIFByZWRpY2F0ZVBhY2thZ2UuTGl0ZXJhbHMuUFJFRElDQVRFX1JFRkVSRU5DRTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgUHJlZGljYXRlIGdldFByZWRpY2F0ZSgpIHsKKwkJaWYgKHByZWRpY2F0ZSAhPSBudWxsICYmIHByZWRpY2F0ZS5lSXNQcm94eSgpKSB7CisJCQlJbnRlcm5hbEVPYmplY3Qgb2xkUHJlZGljYXRlID0gKEludGVybmFsRU9iamVjdClwcmVkaWNhdGU7CisJCQlwcmVkaWNhdGUgPSAoUHJlZGljYXRlKWVSZXNvbHZlUHJveHkob2xkUHJlZGljYXRlKTsKKwkJCWlmIChwcmVkaWNhdGUgIT0gb2xkUHJlZGljYXRlKSB7CisJCQkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQorCQkJCQllTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uUkVTT0xWRSwgUHJlZGljYXRlUGFja2FnZS5QUkVESUNBVEVfUkVGRVJFTkNFX19QUkVESUNBVEUsIG9sZFByZWRpY2F0ZSwgcHJlZGljYXRlKSk7CisJCQl9CisJCX0KKwkJcmV0dXJuIHByZWRpY2F0ZTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgUHJlZGljYXRlIGJhc2ljR2V0UHJlZGljYXRlKCkgeworCQlyZXR1cm4gcHJlZGljYXRlOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIHNldFByZWRpY2F0ZShQcmVkaWNhdGUgbmV3UHJlZGljYXRlKSB7CisJCVByZWRpY2F0ZSBvbGRQcmVkaWNhdGUgPSBwcmVkaWNhdGU7CisJCXByZWRpY2F0ZSA9IG5ld1ByZWRpY2F0ZTsKKwkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQorCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgUHJlZGljYXRlUGFja2FnZS5QUkVESUNBVEVfUkVGRVJFTkNFX19QUkVESUNBVEUsIG9sZFByZWRpY2F0ZSwgcHJlZGljYXRlKSk7CisJfQorCisJCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlLmltcGwuUHJlZGljYXRlSW1wbCNldmFsdWF0ZShvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuU1RFTVRpbWUsIGxvbmcsIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5EZWNvcmF0b3IpCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIGJvb2xlYW4gZXZhbHVhdGUoU1RFTVRpbWUgdGltZSwgbG9uZyB0aW1lclBlcmlvZCwgR3JhcGggZ3JhcGgpIHsKKwkJcmV0dXJuIGdldFByZWRpY2F0ZSgpLmV2YWx1YXRlKHRpbWUsIHRpbWVyUGVyaW9kLCAgZ3JhcGgpOworCX0gLy8gZXZhbHVhdGUKKwkKKwkKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBPYmplY3QgZUdldChpbnQgZmVhdHVyZUlELCBib29sZWFuIHJlc29sdmUsIGJvb2xlYW4gY29yZVR5cGUpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJCWNhc2UgUHJlZGljYXRlUGFja2FnZS5QUkVESUNBVEVfUkVGRVJFTkNFX19QUkVESUNBVEU6CisJCQkJaWYgKHJlc29sdmUpIHJldHVybiBnZXRQcmVkaWNhdGUoKTsKKwkJCQlyZXR1cm4gYmFzaWNHZXRQcmVkaWNhdGUoKTsKKwkJfQorCQlyZXR1cm4gc3VwZXIuZUdldChmZWF0dXJlSUQsIHJlc29sdmUsIGNvcmVUeXBlKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBlU2V0KGludCBmZWF0dXJlSUQsIE9iamVjdCBuZXdWYWx1ZSkgeworCQlzd2l0Y2ggKGZlYXR1cmVJRCkgeworCQkJY2FzZSBQcmVkaWNhdGVQYWNrYWdlLlBSRURJQ0FURV9SRUZFUkVOQ0VfX1BSRURJQ0FURToKKwkJCQlzZXRQcmVkaWNhdGUoKFByZWRpY2F0ZSluZXdWYWx1ZSk7CisJCQkJcmV0dXJuOworCQl9CisJCXN1cGVyLmVTZXQoZmVhdHVyZUlELCBuZXdWYWx1ZSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgZVVuc2V0KGludCBmZWF0dXJlSUQpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJCWNhc2UgUHJlZGljYXRlUGFja2FnZS5QUkVESUNBVEVfUkVGRVJFTkNFX19QUkVESUNBVEU6CisJCQkJc2V0UHJlZGljYXRlKChQcmVkaWNhdGUpbnVsbCk7CisJCQkJcmV0dXJuOworCQl9CisJCXN1cGVyLmVVbnNldChmZWF0dXJlSUQpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBib29sZWFuIGVJc1NldChpbnQgZmVhdHVyZUlEKSB7CisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7CisJCQljYXNlIFByZWRpY2F0ZVBhY2thZ2UuUFJFRElDQVRFX1JFRkVSRU5DRV9fUFJFRElDQVRFOgorCQkJCXJldHVybiBwcmVkaWNhdGUgIT0gbnVsbDsKKwkJfQorCQlyZXR1cm4gc3VwZXIuZUlzU2V0KGZlYXR1cmVJRCk7CisJfQorCit9IC8vUHJlZGljYXRlUmVmZXJlbmNlSW1wbApkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9wcmVkaWNhdGUvaW1wbC9UZXN0SW1wbC5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9wcmVkaWNhdGUvaW1wbC9UZXN0SW1wbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEzNzZiNmYKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3ByZWRpY2F0ZS9pbXBsL1Rlc3RJbXBsLmphdmEKQEAgLTAsMCArMSw0NyBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlLmltcGw7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzczsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlLlByZWRpY2F0ZVBhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZS5UZXN0OworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiBBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+VGVzdDwvYj48L2VtPicuCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIDxwPgorICogPC9wPgorICoKKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGFic3RyYWN0IGNsYXNzIFRlc3RJbXBsIGV4dGVuZHMgUHJlZGljYXRlSW1wbCBpbXBsZW1lbnRzIFRlc3QgeworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBUZXN0SW1wbCgpIHsKKwkJc3VwZXIoKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgRUNsYXNzIGVTdGF0aWNDbGFzcygpIHsKKwkJcmV0dXJuIFByZWRpY2F0ZVBhY2thZ2UuTGl0ZXJhbHMuVEVTVDsKKwl9CisKK30gLy9UZXN0SW1wbApkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9wcmVkaWNhdGUvaW1wbC9UaW1lVGVzdEltcGwuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvcHJlZGljYXRlL2ltcGwvVGltZVRlc3RJbXBsLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjdhZGQ3MQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvcHJlZGljYXRlL2ltcGwvVGltZVRlc3RJbXBsLmphdmEKQEAgLTAsMCArMSw0OCBAQAorLy8gVGltZVRlc3RJbXBsLmphdmEKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZS5pbXBsOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZS5QcmVkaWNhdGVQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUuVGltZVRlc3Q7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIEFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5UaW1lIFRlc3Q8L2I+PC9lbT4nLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiA8cD4KKyAqIDwvcD4KKyAqCisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBhYnN0cmFjdCBjbGFzcyBUaW1lVGVzdEltcGwgZXh0ZW5kcyBUZXN0SW1wbCBpbXBsZW1lbnRzIFRpbWVUZXN0IHsKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgVGltZVRlc3RJbXBsKCkgeworCQlzdXBlcigpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCBFQ2xhc3MgZVN0YXRpY0NsYXNzKCkgeworCQlyZXR1cm4gUHJlZGljYXRlUGFja2FnZS5MaXRlcmFscy5USU1FX1RFU1Q7CisJfQorCQorfSAvL1RpbWVUZXN0SW1wbApkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9wcmVkaWNhdGUvaW1wbC9UcnVlSW1wbC5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9wcmVkaWNhdGUvaW1wbC9UcnVlSW1wbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE3N2ZhZWEKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3ByZWRpY2F0ZS9pbXBsL1RydWVJbXBsLmphdmEKQEAgLTAsMCArMSw1NyBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlLmltcGw7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzczsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguR3JhcGg7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLlNURU1UaW1lOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUuUHJlZGljYXRlUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlLlRydWU7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIEFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5UcnVlPC9iPjwvZW0+Jy4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogPHA+CisgKiA8L3A+CisgKgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgVHJ1ZUltcGwgZXh0ZW5kcyBUZXN0SW1wbCBpbXBsZW1lbnRzIFRydWUgeworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBUcnVlSW1wbCgpIHsKKwkJc3VwZXIoKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgRUNsYXNzIGVTdGF0aWNDbGFzcygpIHsKKwkJcmV0dXJuIFByZWRpY2F0ZVBhY2thZ2UuTGl0ZXJhbHMuVFJVRTsKKwl9CisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUuaW1wbC5QcmVkaWNhdGVJbXBsI2V2YWx1YXRlKG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5TVEVNVGltZSwgbG9uZywgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLkRlY29yYXRvcikKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgYm9vbGVhbiBldmFsdWF0ZShTVEVNVGltZSB0aW1lLCBsb25nIHRpbWVyUGVyaW9kLCBHcmFwaCBncmFwaCkgeworCQlyZXR1cm4gdHJ1ZTsKKwl9CisKK30gLy9UcnVlSW1wbApkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9wcmVkaWNhdGUvaW1wbC9VbmFyeUJvb2xlYW5PcGVyYXRvckltcGwuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvcHJlZGljYXRlL2ltcGwvVW5hcnlCb29sZWFuT3BlcmF0b3JJbXBsLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmE4MzhmNwotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvcHJlZGljYXRlL2ltcGwvVW5hcnlCb29sZWFuT3BlcmF0b3JJbXBsLmphdmEKQEAgLTAsMCArMSwxODEgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZS5pbXBsOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb25DaGFpbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5JbnRlcm5hbEVPYmplY3Q7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLmltcGwuRU5vdGlmaWNhdGlvbkltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZS5QcmVkaWNhdGU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZS5QcmVkaWNhdGVQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUuVW5hcnlCb29sZWFuT3BlcmF0b3I7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIEFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5VbmFyeSBCb29sZWFuIE9wZXJhdG9yPC9iPjwvZW0+Jy4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogPHA+CisgKiBUaGUgZm9sbG93aW5nIGZlYXR1cmVzIGFyZSBpbXBsZW1lbnRlZDoKKyAqIDx1bD4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlLmltcGwuVW5hcnlCb29sZWFuT3BlcmF0b3JJbXBsI2dldE9wZXJhbmQgPGVtPk9wZXJhbmQ8L2VtPn08L2xpPgorICogPC91bD4KKyAqIDwvcD4KKyAqCisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBhYnN0cmFjdCBjbGFzcyBVbmFyeUJvb2xlYW5PcGVyYXRvckltcGwgZXh0ZW5kcyBCb29sZWFuT3BlcmF0b3JJbXBsIGltcGxlbWVudHMgVW5hcnlCb29sZWFuT3BlcmF0b3IgeworCS8qKgorCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldE9wZXJhbmQoKSA8ZW0+T3BlcmFuZDwvZW0+fScgY29udGFpbm1lbnQgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZ2V0T3BlcmFuZCgpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIFByZWRpY2F0ZSBvcGVyYW5kOworCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIFVuYXJ5Qm9vbGVhbk9wZXJhdG9ySW1wbCgpIHsKKwkJc3VwZXIoKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgRUNsYXNzIGVTdGF0aWNDbGFzcygpIHsKKwkJcmV0dXJuIFByZWRpY2F0ZVBhY2thZ2UuTGl0ZXJhbHMuVU5BUllfQk9PTEVBTl9PUEVSQVRPUjsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgUHJlZGljYXRlIGdldE9wZXJhbmQoKSB7CisJCXJldHVybiBvcGVyYW5kOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBOb3RpZmljYXRpb25DaGFpbiBiYXNpY1NldE9wZXJhbmQoUHJlZGljYXRlIG5ld09wZXJhbmQsIE5vdGlmaWNhdGlvbkNoYWluIG1zZ3MpIHsKKwkJUHJlZGljYXRlIG9sZE9wZXJhbmQgPSBvcGVyYW5kOworCQlvcGVyYW5kID0gbmV3T3BlcmFuZDsKKwkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKSB7CisJCQlFTm90aWZpY2F0aW9uSW1wbCBub3RpZmljYXRpb24gPSBuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgUHJlZGljYXRlUGFja2FnZS5VTkFSWV9CT09MRUFOX09QRVJBVE9SX19PUEVSQU5ELCBvbGRPcGVyYW5kLCBuZXdPcGVyYW5kKTsKKwkJCWlmIChtc2dzID09IG51bGwpIG1zZ3MgPSBub3RpZmljYXRpb247IGVsc2UgbXNncy5hZGQobm90aWZpY2F0aW9uKTsKKwkJfQorCQlyZXR1cm4gbXNnczsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRPcGVyYW5kKFByZWRpY2F0ZSBuZXdPcGVyYW5kKSB7CisJCWlmIChuZXdPcGVyYW5kICE9IG9wZXJhbmQpIHsKKwkJCU5vdGlmaWNhdGlvbkNoYWluIG1zZ3MgPSBudWxsOworCQkJaWYgKG9wZXJhbmQgIT0gbnVsbCkKKwkJCQltc2dzID0gKChJbnRlcm5hbEVPYmplY3Qpb3BlcmFuZCkuZUludmVyc2VSZW1vdmUodGhpcywgRU9QUE9TSVRFX0ZFQVRVUkVfQkFTRSAtIFByZWRpY2F0ZVBhY2thZ2UuVU5BUllfQk9PTEVBTl9PUEVSQVRPUl9fT1BFUkFORCwgbnVsbCwgbXNncyk7CisJCQlpZiAobmV3T3BlcmFuZCAhPSBudWxsKQorCQkJCW1zZ3MgPSAoKEludGVybmFsRU9iamVjdCluZXdPcGVyYW5kKS5lSW52ZXJzZUFkZCh0aGlzLCBFT1BQT1NJVEVfRkVBVFVSRV9CQVNFIC0gUHJlZGljYXRlUGFja2FnZS5VTkFSWV9CT09MRUFOX09QRVJBVE9SX19PUEVSQU5ELCBudWxsLCBtc2dzKTsKKwkJCW1zZ3MgPSBiYXNpY1NldE9wZXJhbmQobmV3T3BlcmFuZCwgbXNncyk7CisJCQlpZiAobXNncyAhPSBudWxsKSBtc2dzLmRpc3BhdGNoKCk7CisJCX0KKwkJZWxzZSBpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpCisJCQllTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBQcmVkaWNhdGVQYWNrYWdlLlVOQVJZX0JPT0xFQU5fT1BFUkFUT1JfX09QRVJBTkQsIG5ld09wZXJhbmQsIG5ld09wZXJhbmQpKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgTm90aWZpY2F0aW9uQ2hhaW4gZUludmVyc2VSZW1vdmUoSW50ZXJuYWxFT2JqZWN0IG90aGVyRW5kLCBpbnQgZmVhdHVyZUlELCBOb3RpZmljYXRpb25DaGFpbiBtc2dzKSB7CisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7CisJCQljYXNlIFByZWRpY2F0ZVBhY2thZ2UuVU5BUllfQk9PTEVBTl9PUEVSQVRPUl9fT1BFUkFORDoKKwkJCQlyZXR1cm4gYmFzaWNTZXRPcGVyYW5kKG51bGwsIG1zZ3MpOworCQl9CisJCXJldHVybiBzdXBlci5lSW52ZXJzZVJlbW92ZShvdGhlckVuZCwgZmVhdHVyZUlELCBtc2dzKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgT2JqZWN0IGVHZXQoaW50IGZlYXR1cmVJRCwgYm9vbGVhbiByZXNvbHZlLCBib29sZWFuIGNvcmVUeXBlKSB7CisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7CisJCQljYXNlIFByZWRpY2F0ZVBhY2thZ2UuVU5BUllfQk9PTEVBTl9PUEVSQVRPUl9fT1BFUkFORDoKKwkJCQlyZXR1cm4gZ2V0T3BlcmFuZCgpOworCQl9CisJCXJldHVybiBzdXBlci5lR2V0KGZlYXR1cmVJRCwgcmVzb2x2ZSwgY29yZVR5cGUpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGVTZXQoaW50IGZlYXR1cmVJRCwgT2JqZWN0IG5ld1ZhbHVlKSB7CisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7CisJCQljYXNlIFByZWRpY2F0ZVBhY2thZ2UuVU5BUllfQk9PTEVBTl9PUEVSQVRPUl9fT1BFUkFORDoKKwkJCQlzZXRPcGVyYW5kKChQcmVkaWNhdGUpbmV3VmFsdWUpOworCQkJCXJldHVybjsKKwkJfQorCQlzdXBlci5lU2V0KGZlYXR1cmVJRCwgbmV3VmFsdWUpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGVVbnNldChpbnQgZmVhdHVyZUlEKSB7CisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7CisJCQljYXNlIFByZWRpY2F0ZVBhY2thZ2UuVU5BUllfQk9PTEVBTl9PUEVSQVRPUl9fT1BFUkFORDoKKwkJCQlzZXRPcGVyYW5kKChQcmVkaWNhdGUpbnVsbCk7CisJCQkJcmV0dXJuOworCQl9CisJCXN1cGVyLmVVbnNldChmZWF0dXJlSUQpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBib29sZWFuIGVJc1NldChpbnQgZmVhdHVyZUlEKSB7CisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7CisJCQljYXNlIFByZWRpY2F0ZVBhY2thZ2UuVU5BUllfQk9PTEVBTl9PUEVSQVRPUl9fT1BFUkFORDoKKwkJCQlyZXR1cm4gb3BlcmFuZCAhPSBudWxsOworCQl9CisJCXJldHVybiBzdXBlci5lSXNTZXQoZmVhdHVyZUlEKTsKKwl9CisKK30gLy9VbmFyeUJvb2xlYW5PcGVyYXRvckltcGwKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvcHJlZGljYXRlL3Byb3ZpZGVyL0FuZEl0ZW1Qcm92aWRlci5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9wcmVkaWNhdGUvcHJvdmlkZXIvQW5kSXRlbVByb3ZpZGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDk0YTYyNgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvcHJlZGljYXRlL3Byb3ZpZGVyL0FuZEl0ZW1Qcm92aWRlci5qYXZhCkBAIC0wLDAgKzEsMTIzIEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUucHJvdmlkZXI7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5BZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUVkaXRpbmdEb21haW5JdGVtUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1MYWJlbFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtUHJvcGVydHlEZXNjcmlwdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtUHJvcGVydHlTb3VyY2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVN0cnVjdHVyZWRJdGVtQ29udGVudFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklUcmVlSXRlbUNvbnRlbnRQcm92aWRlcjsKKworLyoqCisgKiBUaGlzIGlzIHRoZSBpdGVtIHByb3ZpZGVyIGFkYXB0ZXIgZm9yIGEge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUuQW5kfSBvYmplY3QuCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBBbmRJdGVtUHJvdmlkZXIKKwlleHRlbmRzIE5hcnlCb29sZWFuT3BlcmF0b3JJdGVtUHJvdmlkZXIKKwlpbXBsZW1lbnRzCisJCUlFZGl0aW5nRG9tYWluSXRlbVByb3ZpZGVyLAorCQlJU3RydWN0dXJlZEl0ZW1Db250ZW50UHJvdmlkZXIsCisJCUlUcmVlSXRlbUNvbnRlbnRQcm92aWRlciwKKwkJSUl0ZW1MYWJlbFByb3ZpZGVyLAorCQlJSXRlbVByb3BlcnR5U291cmNlIHsKKwkvKioKKwkgKiBUaGlzIGNvbnN0cnVjdHMgYW4gaW5zdGFuY2UgZnJvbSBhIGZhY3RvcnkgYW5kIGEgbm90aWZpZXIuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEFuZEl0ZW1Qcm92aWRlcihBZGFwdGVyRmFjdG9yeSBhZGFwdGVyRmFjdG9yeSkgeworCQlzdXBlcihhZGFwdGVyRmFjdG9yeSk7CisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIHRoZSBwcm9wZXJ0eSBkZXNjcmlwdG9ycyBmb3IgdGhlIGFkYXB0ZWQgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIExpc3Q8SUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I+IGdldFByb3BlcnR5RGVzY3JpcHRvcnMoT2JqZWN0IG9iamVjdCkgeworCQlpZiAoaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMgPT0gbnVsbCkgeworCQkJc3VwZXIuZ2V0UHJvcGVydHlEZXNjcmlwdG9ycyhvYmplY3QpOworCisJCX0KKwkJcmV0dXJuIGl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzOworCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyBBbmQuZ2lmLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgT2JqZWN0IGdldEltYWdlKE9iamVjdCBvYmplY3QpIHsKKwkJcmV0dXJuIG92ZXJsYXlJbWFnZShvYmplY3QsIGdldFJlc291cmNlTG9jYXRvcigpLmdldEltYWdlKCJmdWxsL2N1c3RvbW9iajE2L0FuZC5wbmciKSk7IC8vJE5PTi1OTFMtMSQKKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgdGhlIGxhYmVsIHRleHQgZm9yIHRoZSBhZGFwdGVkIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgU3RyaW5nIGdldFRleHQoT2JqZWN0IG9iamVjdCkgeworCQlyZXR1cm4gIiYiOworCX0KKwkKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgdGhlIGxhYmVsIHRleHQgZm9yIHRoZSBhZGFwdGVkIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworLy8JQE92ZXJyaWRlCisJcHVibGljIFN0cmluZyBnZXRUZXh0R2VuKE9iamVjdCBvYmplY3QpIHsKKwkJcmV0dXJuIGdldFN0cmluZygiX1VJX0FuZF90eXBlIik7IC8vJE5PTi1OTFMtMSQKKwl9CisKKwkvKioKKwkgKiBUaGlzIGhhbmRsZXMgbW9kZWwgbm90aWZpY2F0aW9ucyBieSBjYWxsaW5nIHtAbGluayAjdXBkYXRlQ2hpbGRyZW59IHRvIHVwZGF0ZSBhbnkgY2FjaGVkCisJICogY2hpbGRyZW4gYW5kIGJ5IGNyZWF0aW5nIGEgdmlld2VyIG5vdGlmaWNhdGlvbiwgd2hpY2ggaXQgcGFzc2VzIHRvIHtAbGluayAjZmlyZU5vdGlmeUNoYW5nZWR9LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIG5vdGlmeUNoYW5nZWQoTm90aWZpY2F0aW9uIG5vdGlmaWNhdGlvbikgeworCQl1cGRhdGVDaGlsZHJlbihub3RpZmljYXRpb24pOworCQlzdXBlci5ub3RpZnlDaGFuZ2VkKG5vdGlmaWNhdGlvbik7CisJfQorCisJLyoqCisJICogVGhpcyBhZGRzIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuZWRpdC5jb21tYW5kLkNvbW1hbmRQYXJhbWV0ZXJ9cyBkZXNjcmliaW5nIHRoZSBjaGlsZHJlbgorCSAqIHRoYXQgY2FuIGJlIGNyZWF0ZWQgdW5kZXIgdGhpcyBvYmplY3QuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgY29sbGVjdE5ld0NoaWxkRGVzY3JpcHRvcnMoQ29sbGVjdGlvbjxPYmplY3Q+IG5ld0NoaWxkRGVzY3JpcHRvcnMsIE9iamVjdCBvYmplY3QpIHsKKwkJc3VwZXIuY29sbGVjdE5ld0NoaWxkRGVzY3JpcHRvcnMobmV3Q2hpbGREZXNjcmlwdG9ycywgb2JqZWN0KTsKKwl9CisKK30KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvcHJlZGljYXRlL3Byb3ZpZGVyL0Jvb2xlYW5FeHByZXNzaW9uSXRlbVByb3ZpZGVyLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3ByZWRpY2F0ZS9wcm92aWRlci9Cb29sZWFuRXhwcmVzc2lvbkl0ZW1Qcm92aWRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjczODJiNTIKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3ByZWRpY2F0ZS9wcm92aWRlci9Cb29sZWFuRXhwcmVzc2lvbkl0ZW1Qcm92aWRlci5qYXZhCkBAIC0wLDAgKzEsMTAyIEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUucHJvdmlkZXI7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LkFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JRWRpdGluZ0RvbWFpbkl0ZW1Qcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbUxhYmVsUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1Qcm9wZXJ0eVNvdXJjZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JU3RydWN0dXJlZEl0ZW1Db250ZW50UHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVRyZWVJdGVtQ29udGVudFByb3ZpZGVyOworCisvKioKKyAqIFRoaXMgaXMgdGhlIGl0ZW0gcHJvdmlkZXIgYWRhcHRlciBmb3IgYSB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZS5Cb29sZWFuRXhwcmVzc2lvbn0gb2JqZWN0LgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgQm9vbGVhbkV4cHJlc3Npb25JdGVtUHJvdmlkZXIKKwlleHRlbmRzIFByZWRpY2F0ZUl0ZW1Qcm92aWRlcgorCWltcGxlbWVudHMKKwkJSUVkaXRpbmdEb21haW5JdGVtUHJvdmlkZXIsCisJCUlTdHJ1Y3R1cmVkSXRlbUNvbnRlbnRQcm92aWRlciwKKwkJSVRyZWVJdGVtQ29udGVudFByb3ZpZGVyLAorCQlJSXRlbUxhYmVsUHJvdmlkZXIsCisJCUlJdGVtUHJvcGVydHlTb3VyY2UgeworCS8qKgorCSAqIFRoaXMgY29uc3RydWN0cyBhbiBpbnN0YW5jZSBmcm9tIGEgZmFjdG9yeSBhbmQgYSBub3RpZmllci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQm9vbGVhbkV4cHJlc3Npb25JdGVtUHJvdmlkZXIoQWRhcHRlckZhY3RvcnkgYWRhcHRlckZhY3RvcnkpIHsKKwkJc3VwZXIoYWRhcHRlckZhY3RvcnkpOworCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyB0aGUgcHJvcGVydHkgZGVzY3JpcHRvcnMgZm9yIHRoZSBhZGFwdGVkIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBMaXN0PElJdGVtUHJvcGVydHlEZXNjcmlwdG9yPiBnZXRQcm9wZXJ0eURlc2NyaXB0b3JzKE9iamVjdCBvYmplY3QpIHsKKwkJaWYgKGl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzID09IG51bGwpIHsKKwkJCXN1cGVyLmdldFByb3BlcnR5RGVzY3JpcHRvcnMob2JqZWN0KTsKKworCQl9CisJCXJldHVybiBpdGVtUHJvcGVydHlEZXNjcmlwdG9yczsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgdGhlIGxhYmVsIHRleHQgZm9yIHRoZSBhZGFwdGVkIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBTdHJpbmcgZ2V0VGV4dChPYmplY3Qgb2JqZWN0KSB7CisJCXJldHVybiBnZXRTdHJpbmcoIl9VSV9Cb29sZWFuRXhwcmVzc2lvbl90eXBlIik7IC8vJE5PTi1OTFMtMSQKKwl9CisKKwkvKioKKwkgKiBUaGlzIGhhbmRsZXMgbW9kZWwgbm90aWZpY2F0aW9ucyBieSBjYWxsaW5nIHtAbGluayAjdXBkYXRlQ2hpbGRyZW59IHRvIHVwZGF0ZSBhbnkgY2FjaGVkCisJICogY2hpbGRyZW4gYW5kIGJ5IGNyZWF0aW5nIGEgdmlld2VyIG5vdGlmaWNhdGlvbiwgd2hpY2ggaXQgcGFzc2VzIHRvIHtAbGluayAjZmlyZU5vdGlmeUNoYW5nZWR9LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIG5vdGlmeUNoYW5nZWQoTm90aWZpY2F0aW9uIG5vdGlmaWNhdGlvbikgeworCQl1cGRhdGVDaGlsZHJlbihub3RpZmljYXRpb24pOworCQlzdXBlci5ub3RpZnlDaGFuZ2VkKG5vdGlmaWNhdGlvbik7CisJfQorCisJLyoqCisJICogVGhpcyBhZGRzIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuZWRpdC5jb21tYW5kLkNvbW1hbmRQYXJhbWV0ZXJ9cyBkZXNjcmliaW5nIHRoZSBjaGlsZHJlbgorCSAqIHRoYXQgY2FuIGJlIGNyZWF0ZWQgdW5kZXIgdGhpcyBvYmplY3QuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgY29sbGVjdE5ld0NoaWxkRGVzY3JpcHRvcnMoQ29sbGVjdGlvbjxPYmplY3Q+IG5ld0NoaWxkRGVzY3JpcHRvcnMsIE9iamVjdCBvYmplY3QpIHsKKwkJc3VwZXIuY29sbGVjdE5ld0NoaWxkRGVzY3JpcHRvcnMobmV3Q2hpbGREZXNjcmlwdG9ycywgb2JqZWN0KTsKKwl9CisKK30KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvcHJlZGljYXRlL3Byb3ZpZGVyL0Jvb2xlYW5PcGVyYXRvckl0ZW1Qcm92aWRlci5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9wcmVkaWNhdGUvcHJvdmlkZXIvQm9vbGVhbk9wZXJhdG9ySXRlbVByb3ZpZGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTNkZDFlYQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvcHJlZGljYXRlL3Byb3ZpZGVyL0Jvb2xlYW5PcGVyYXRvckl0ZW1Qcm92aWRlci5qYXZhCkBAIC0wLDAgKzEsMTAyIEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUucHJvdmlkZXI7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5BZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUVkaXRpbmdEb21haW5JdGVtUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1MYWJlbFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtUHJvcGVydHlEZXNjcmlwdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtUHJvcGVydHlTb3VyY2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVN0cnVjdHVyZWRJdGVtQ29udGVudFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklUcmVlSXRlbUNvbnRlbnRQcm92aWRlcjsKKworCisvKioKKyAqIFRoaXMgaXMgdGhlIGl0ZW0gcHJvdmlkZXIgYWRhcHRlciBmb3IgYSB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZS5Cb29sZWFuT3BlcmF0b3J9IG9iamVjdC4KKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIEJvb2xlYW5PcGVyYXRvckl0ZW1Qcm92aWRlcgorCWV4dGVuZHMgQm9vbGVhbkV4cHJlc3Npb25JdGVtUHJvdmlkZXIKKwlpbXBsZW1lbnRzCisJCUlFZGl0aW5nRG9tYWluSXRlbVByb3ZpZGVyLAorCQlJU3RydWN0dXJlZEl0ZW1Db250ZW50UHJvdmlkZXIsCisJCUlUcmVlSXRlbUNvbnRlbnRQcm92aWRlciwKKwkJSUl0ZW1MYWJlbFByb3ZpZGVyLAorCQlJSXRlbVByb3BlcnR5U291cmNlIHsKKwkvKioKKwkgKiBUaGlzIGNvbnN0cnVjdHMgYW4gaW5zdGFuY2UgZnJvbSBhIGZhY3RvcnkgYW5kIGEgbm90aWZpZXIuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEJvb2xlYW5PcGVyYXRvckl0ZW1Qcm92aWRlcihBZGFwdGVyRmFjdG9yeSBhZGFwdGVyRmFjdG9yeSkgeworCQlzdXBlcihhZGFwdGVyRmFjdG9yeSk7CisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIHRoZSBwcm9wZXJ0eSBkZXNjcmlwdG9ycyBmb3IgdGhlIGFkYXB0ZWQgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIExpc3Q8SUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I+IGdldFByb3BlcnR5RGVzY3JpcHRvcnMoT2JqZWN0IG9iamVjdCkgeworCQlpZiAoaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMgPT0gbnVsbCkgeworCQkJc3VwZXIuZ2V0UHJvcGVydHlEZXNjcmlwdG9ycyhvYmplY3QpOworCisJCX0KKwkJcmV0dXJuIGl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzOworCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyB0aGUgbGFiZWwgdGV4dCBmb3IgdGhlIGFkYXB0ZWQgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIFN0cmluZyBnZXRUZXh0KE9iamVjdCBvYmplY3QpIHsKKwkJcmV0dXJuIGdldFN0cmluZygiX1VJX0Jvb2xlYW5PcGVyYXRvcl90eXBlIik7IC8vJE5PTi1OTFMtMSQKKwl9CisKKwkvKioKKwkgKiBUaGlzIGhhbmRsZXMgbW9kZWwgbm90aWZpY2F0aW9ucyBieSBjYWxsaW5nIHtAbGluayAjdXBkYXRlQ2hpbGRyZW59IHRvIHVwZGF0ZSBhbnkgY2FjaGVkCisJICogY2hpbGRyZW4gYW5kIGJ5IGNyZWF0aW5nIGEgdmlld2VyIG5vdGlmaWNhdGlvbiwgd2hpY2ggaXQgcGFzc2VzIHRvIHtAbGluayAjZmlyZU5vdGlmeUNoYW5nZWR9LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIG5vdGlmeUNoYW5nZWQoTm90aWZpY2F0aW9uIG5vdGlmaWNhdGlvbikgeworCQl1cGRhdGVDaGlsZHJlbihub3RpZmljYXRpb24pOworCQlzdXBlci5ub3RpZnlDaGFuZ2VkKG5vdGlmaWNhdGlvbik7CisJfQorCisJLyoqCisJICogVGhpcyBhZGRzIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuZWRpdC5jb21tYW5kLkNvbW1hbmRQYXJhbWV0ZXJ9cyBkZXNjcmliaW5nIHRoZSBjaGlsZHJlbgorCSAqIHRoYXQgY2FuIGJlIGNyZWF0ZWQgdW5kZXIgdGhpcyBvYmplY3QuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgY29sbGVjdE5ld0NoaWxkRGVzY3JpcHRvcnMoQ29sbGVjdGlvbjxPYmplY3Q+IG5ld0NoaWxkRGVzY3JpcHRvcnMsIE9iamVjdCBvYmplY3QpIHsKKwkJc3VwZXIuY29sbGVjdE5ld0NoaWxkRGVzY3JpcHRvcnMobmV3Q2hpbGREZXNjcmlwdG9ycywgb2JqZWN0KTsKKwl9CisKK30KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvcHJlZGljYXRlL3Byb3ZpZGVyL0VsYXBzZWRUaW1lVGVzdEl0ZW1Qcm92aWRlci5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9wcmVkaWNhdGUvcHJvdmlkZXIvRWxhcHNlZFRpbWVUZXN0SXRlbVByb3ZpZGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjg2ODFlYQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvcHJlZGljYXRlL3Byb3ZpZGVyL0VsYXBzZWRUaW1lVGVzdEl0ZW1Qcm92aWRlci5qYXZhCkBAIC0wLDAgKzEsMTU5IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUucHJvdmlkZXI7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5BZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JRWRpdGluZ0RvbWFpbkl0ZW1Qcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbUxhYmVsUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1Qcm9wZXJ0eVNvdXJjZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JU3RydWN0dXJlZEl0ZW1Db250ZW50UHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVRyZWVJdGVtQ29udGVudFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuVmlld2VyTm90aWZpY2F0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUuRWxhcHNlZFRpbWVUZXN0OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUuUHJlZGljYXRlUGFja2FnZTsKKworLyoqCisgKiBUaGlzIGlzIHRoZSBpdGVtIHByb3ZpZGVyIGFkYXB0ZXIgZm9yIGEge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUuRWxhcHNlZFRpbWVUZXN0fSBvYmplY3QuCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBFbGFwc2VkVGltZVRlc3RJdGVtUHJvdmlkZXIKKwlleHRlbmRzIFRpbWVUZXN0SXRlbVByb3ZpZGVyCisJaW1wbGVtZW50cworCQlJRWRpdGluZ0RvbWFpbkl0ZW1Qcm92aWRlciwKKwkJSVN0cnVjdHVyZWRJdGVtQ29udGVudFByb3ZpZGVyLAorCQlJVHJlZUl0ZW1Db250ZW50UHJvdmlkZXIsCisJCUlJdGVtTGFiZWxQcm92aWRlciwKKwkJSUl0ZW1Qcm9wZXJ0eVNvdXJjZSB7CisJLyoqCisJICogVGhpcyBjb25zdHJ1Y3RzIGFuIGluc3RhbmNlIGZyb20gYSBmYWN0b3J5IGFuZCBhIG5vdGlmaWVyLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFbGFwc2VkVGltZVRlc3RJdGVtUHJvdmlkZXIoQWRhcHRlckZhY3RvcnkgYWRhcHRlckZhY3RvcnkpIHsKKwkJc3VwZXIoYWRhcHRlckZhY3RvcnkpOworCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyB0aGUgcHJvcGVydHkgZGVzY3JpcHRvcnMgZm9yIHRoZSBhZGFwdGVkIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBMaXN0PElJdGVtUHJvcGVydHlEZXNjcmlwdG9yPiBnZXRQcm9wZXJ0eURlc2NyaXB0b3JzKE9iamVjdCBvYmplY3QpIHsKKwkJaWYgKGl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzID09IG51bGwpIHsKKwkJCXN1cGVyLmdldFByb3BlcnR5RGVzY3JpcHRvcnMob2JqZWN0KTsKKworCQkJYWRkTnVtYmVyb2ZEYXlzUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCk7CisJCX0KKwkJcmV0dXJuIGl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzOworCX0KKwkKKwkvKioKKwkgKiBUaGlzIGFkZHMgYSBwcm9wZXJ0eSBkZXNjcmlwdG9yIGZvciB0aGUgTnVtYmVyb2YgRGF5cyBmZWF0dXJlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIGFkZE51bWJlcm9mRGF5c1Byb3BlcnR5RGVzY3JpcHRvcihPYmplY3Qgb2JqZWN0KSB7CisJCWl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzLmFkZAorCQkJKGNyZWF0ZUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IKKwkJCQkoKChDb21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5KWFkYXB0ZXJGYWN0b3J5KS5nZXRSb290QWRhcHRlckZhY3RvcnkoKSwKKwkJCQkgZ2V0UmVzb3VyY2VMb2NhdG9yKCksCisJCQkJIGdldFN0cmluZygiX1VJX0VsYXBzZWRUaW1lVGVzdF9udW1iZXJvZkRheXNfZmVhdHVyZSIpLCAvLyROT04tTkxTLTEkCisJCQkJIGdldFN0cmluZygiX1VJX1Byb3BlcnR5RGVzY3JpcHRvcl9kZXNjcmlwdGlvbiIsICJfVUlfRWxhcHNlZFRpbWVUZXN0X251bWJlcm9mRGF5c19mZWF0dXJlIiwgIl9VSV9FbGFwc2VkVGltZVRlc3RfdHlwZSIpLCAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQgLy8kTk9OLU5MUy0zJAorCQkJCSBQcmVkaWNhdGVQYWNrYWdlLkxpdGVyYWxzLkVMQVBTRURfVElNRV9URVNUX19OVU1CRVJPRl9EQVlTLAorCQkJCSB0cnVlLAorCQkJCSBmYWxzZSwKKwkJCQkgZmFsc2UsCisJCQkJIEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IuSU5URUdSQUxfVkFMVUVfSU1BR0UsCisJCQkJIG51bGwsCisJCQkJIG51bGwpKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgRWxhcHNlZFRpbWVUZXN0LmdpZi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIE9iamVjdCBnZXRJbWFnZShPYmplY3Qgb2JqZWN0KSB7CisJCXJldHVybiBvdmVybGF5SW1hZ2Uob2JqZWN0LCBnZXRSZXNvdXJjZUxvY2F0b3IoKS5nZXRJbWFnZSgiZnVsbC9jdXN0b21vYmoxNi9FbGFwc2VkVGltZVRlc3QucG5nIikpOyAvLyROT04tTkxTLTEkCisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIHRoZSBsYWJlbCB0ZXh0IGZvciB0aGUgYWRhcHRlZCBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIFN0cmluZyBnZXRUZXh0KE9iamVjdCBvYmplY3QpIHsKKwkJZmluYWwgRWxhcHNlZFRpbWVUZXN0IGV0dCA9IChFbGFwc2VkVGltZVRlc3Qpb2JqZWN0OworCQlyZXR1cm4gIkFmdGVyICIgKyAgZXR0LmdldE51bWJlcm9mRGF5cygpICsgIiBkYXlzIjsKKwl9IC8vIGdldFRleHQKKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyB0aGUgbGFiZWwgdGV4dCBmb3IgdGhlIGFkYXB0ZWQgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJLy9AT3ZlcnJpZGUKKwlwdWJsaWMgU3RyaW5nIGdldFRleHRHZW4oT2JqZWN0IG9iamVjdCkgeworCQlFbGFwc2VkVGltZVRlc3QgZWxhcHNlZFRpbWVUZXN0ID0gKEVsYXBzZWRUaW1lVGVzdClvYmplY3Q7CisJCXJldHVybiBnZXRTdHJpbmcoIl9VSV9FbGFwc2VkVGltZVRlc3RfdHlwZSIpICsgIiAiICsgZWxhcHNlZFRpbWVUZXN0LmlzUmVmZXJlbmNlVGltZVZhbGlkKCk7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAorCX0KKwkKKwkvKioKKwkgKiBUaGlzIGhhbmRsZXMgbW9kZWwgbm90aWZpY2F0aW9ucyBieSBjYWxsaW5nIHtAbGluayAjdXBkYXRlQ2hpbGRyZW59IHRvIHVwZGF0ZSBhbnkgY2FjaGVkCisJICogY2hpbGRyZW4gYW5kIGJ5IGNyZWF0aW5nIGEgdmlld2VyIG5vdGlmaWNhdGlvbiwgd2hpY2ggaXQgcGFzc2VzIHRvIHtAbGluayAjZmlyZU5vdGlmeUNoYW5nZWR9LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIG5vdGlmeUNoYW5nZWQoTm90aWZpY2F0aW9uIG5vdGlmaWNhdGlvbikgeworCQl1cGRhdGVDaGlsZHJlbihub3RpZmljYXRpb24pOworCisJCXN3aXRjaCAobm90aWZpY2F0aW9uLmdldEZlYXR1cmVJRChFbGFwc2VkVGltZVRlc3QuY2xhc3MpKSB7CisJCQljYXNlIFByZWRpY2F0ZVBhY2thZ2UuRUxBUFNFRF9USU1FX1RFU1RfX05VTUJFUk9GX0RBWVM6CisJCQkJZmlyZU5vdGlmeUNoYW5nZWQobmV3IFZpZXdlck5vdGlmaWNhdGlvbihub3RpZmljYXRpb24sIG5vdGlmaWNhdGlvbi5nZXROb3RpZmllcigpLCBmYWxzZSwgdHJ1ZSkpOworCQkJCXJldHVybjsKKwkJfQorCQlzdXBlci5ub3RpZnlDaGFuZ2VkKG5vdGlmaWNhdGlvbik7CisJfQorCisJLyoqCisJICogVGhpcyBhZGRzIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuZWRpdC5jb21tYW5kLkNvbW1hbmRQYXJhbWV0ZXJ9cyBkZXNjcmliaW5nIHRoZSBjaGlsZHJlbgorCSAqIHRoYXQgY2FuIGJlIGNyZWF0ZWQgdW5kZXIgdGhpcyBvYmplY3QuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgY29sbGVjdE5ld0NoaWxkRGVzY3JpcHRvcnMoQ29sbGVjdGlvbjxPYmplY3Q+IG5ld0NoaWxkRGVzY3JpcHRvcnMsIE9iamVjdCBvYmplY3QpIHsKKwkJc3VwZXIuY29sbGVjdE5ld0NoaWxkRGVzY3JpcHRvcnMobmV3Q2hpbGREZXNjcmlwdG9ycywgb2JqZWN0KTsKKwl9CisKK30gLy8gRWxhcHNlZFRpbWVUZXN0SXRlbVByb3ZpZGVyCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3ByZWRpY2F0ZS9wcm92aWRlci9GYWxzZUl0ZW1Qcm92aWRlci5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9wcmVkaWNhdGUvcHJvdmlkZXIvRmFsc2VJdGVtUHJvdmlkZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMGNkMmI3Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9wcmVkaWNhdGUvcHJvdmlkZXIvRmFsc2VJdGVtUHJvdmlkZXIuamF2YQpAQCAtMCwwICsxLDEyNCBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlLnByb3ZpZGVyOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCitpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5BZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUVkaXRpbmdEb21haW5JdGVtUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1MYWJlbFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtUHJvcGVydHlEZXNjcmlwdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtUHJvcGVydHlTb3VyY2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVN0cnVjdHVyZWRJdGVtQ29udGVudFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklUcmVlSXRlbUNvbnRlbnRQcm92aWRlcjsKKworLyoqCisgKiBUaGlzIGlzIHRoZSBpdGVtIHByb3ZpZGVyIGFkYXB0ZXIgZm9yIGEge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUuRmFsc2V9IG9iamVjdC4KKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIEZhbHNlSXRlbVByb3ZpZGVyCisJZXh0ZW5kcyBUZXN0SXRlbVByb3ZpZGVyCisJaW1wbGVtZW50cworCQlJRWRpdGluZ0RvbWFpbkl0ZW1Qcm92aWRlciwKKwkJSVN0cnVjdHVyZWRJdGVtQ29udGVudFByb3ZpZGVyLAorCQlJVHJlZUl0ZW1Db250ZW50UHJvdmlkZXIsCisJCUlJdGVtTGFiZWxQcm92aWRlciwKKwkJSUl0ZW1Qcm9wZXJ0eVNvdXJjZSB7CisJLyoqCisJICogVGhpcyBjb25zdHJ1Y3RzIGFuIGluc3RhbmNlIGZyb20gYSBmYWN0b3J5IGFuZCBhIG5vdGlmaWVyLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBGYWxzZUl0ZW1Qcm92aWRlcihBZGFwdGVyRmFjdG9yeSBhZGFwdGVyRmFjdG9yeSkgeworCQlzdXBlcihhZGFwdGVyRmFjdG9yeSk7CisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIHRoZSBwcm9wZXJ0eSBkZXNjcmlwdG9ycyBmb3IgdGhlIGFkYXB0ZWQgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIExpc3Q8SUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I+IGdldFByb3BlcnR5RGVzY3JpcHRvcnMoT2JqZWN0IG9iamVjdCkgeworCQlpZiAoaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMgPT0gbnVsbCkgeworCQkJc3VwZXIuZ2V0UHJvcGVydHlEZXNjcmlwdG9ycyhvYmplY3QpOworCisJCX0KKwkJcmV0dXJuIGl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzOworCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyBGYWxzZS5naWYuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIE9iamVjdCBnZXRJbWFnZShPYmplY3Qgb2JqZWN0KSB7CisJCXJldHVybiBvdmVybGF5SW1hZ2Uob2JqZWN0LCBnZXRSZXNvdXJjZUxvY2F0b3IoKS5nZXRJbWFnZSgiZnVsbC9vYmoxNi9GYWxzZSIpKTsgLy8kTk9OLU5MUy0xJAorCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyB0aGUgbGFiZWwgdGV4dCBmb3IgdGhlIGFkYXB0ZWQgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBTdHJpbmcgZ2V0VGV4dChPYmplY3Qgb2JqZWN0KSB7CisJCXJldHVybiAiRmFsc2UiOworCX0KKwkKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgdGhlIGxhYmVsIHRleHQgZm9yIHRoZSBhZGFwdGVkIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCS8vQE92ZXJyaWRlCisJcHVibGljIFN0cmluZyBnZXRUZXh0R2VuKE9iamVjdCBvYmplY3QpIHsKKwkJcmV0dXJuIGdldFN0cmluZygiX1VJX0ZhbHNlX3R5cGUiKTsgLy8kTk9OLU5MUy0xJAorCX0KKworCS8qKgorCSAqIFRoaXMgaGFuZGxlcyBtb2RlbCBub3RpZmljYXRpb25zIGJ5IGNhbGxpbmcge0BsaW5rICN1cGRhdGVDaGlsZHJlbn0gdG8gdXBkYXRlIGFueSBjYWNoZWQKKwkgKiBjaGlsZHJlbiBhbmQgYnkgY3JlYXRpbmcgYSB2aWV3ZXIgbm90aWZpY2F0aW9uLCB3aGljaCBpdCBwYXNzZXMgdG8ge0BsaW5rICNmaXJlTm90aWZ5Q2hhbmdlZH0uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgbm90aWZ5Q2hhbmdlZChOb3RpZmljYXRpb24gbm90aWZpY2F0aW9uKSB7CisJCXVwZGF0ZUNoaWxkcmVuKG5vdGlmaWNhdGlvbik7CisJCXN1cGVyLm5vdGlmeUNoYW5nZWQobm90aWZpY2F0aW9uKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFkZHMge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lZGl0LmNvbW1hbmQuQ29tbWFuZFBhcmFtZXRlcn1zIGRlc2NyaWJpbmcgdGhlIGNoaWxkcmVuCisJICogdGhhdCBjYW4gYmUgY3JlYXRlZCB1bmRlciB0aGlzIG9iamVjdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgdm9pZCBjb2xsZWN0TmV3Q2hpbGREZXNjcmlwdG9ycyhDb2xsZWN0aW9uPE9iamVjdD4gbmV3Q2hpbGREZXNjcmlwdG9ycywgT2JqZWN0IG9iamVjdCkgeworCQlzdXBlci5jb2xsZWN0TmV3Q2hpbGREZXNjcmlwdG9ycyhuZXdDaGlsZERlc2NyaXB0b3JzLCBvYmplY3QpOworCX0KKworfQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9wcmVkaWNhdGUvcHJvdmlkZXIvSWRlbnRpZmlhYmxlUHJlZGljYXRlRXhwcmVzc2lvbkl0ZW1Qcm92aWRlci5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9wcmVkaWNhdGUvcHJvdmlkZXIvSWRlbnRpZmlhYmxlUHJlZGljYXRlRXhwcmVzc2lvbkl0ZW1Qcm92aWRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA2MTA5MGQKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3ByZWRpY2F0ZS9wcm92aWRlci9JZGVudGlmaWFibGVQcmVkaWNhdGVFeHByZXNzaW9uSXRlbVByb3ZpZGVyLmphdmEKQEAgLTAsMCArMSwyODMgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZS5wcm92aWRlcjsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LkFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuVVJJOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FU3RydWN0dXJhbEZlYXR1cmU7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUVkaXRpbmdEb21haW5JdGVtUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1MYWJlbFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtUHJvcGVydHlEZXNjcmlwdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtUHJvcGVydHlTb3VyY2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVN0cnVjdHVyZWRJdGVtQ29udGVudFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklUcmVlSXRlbUNvbnRlbnRQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5WaWV3ZXJOb3RpZmljYXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5wcm92aWRlci5JZGVudGlmaWFibGVJdGVtUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZS5JZGVudGlmaWFibGVQcmVkaWNhdGVFeHByZXNzaW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUuUHJlZGljYXRlRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlLlByZWRpY2F0ZVBhY2thZ2U7CisKKy8qKgorICogVGhpcyBpcyB0aGUgaXRlbSBwcm92aWRlciBhZGFwdGVyIGZvciBhIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlLklkZW50aWZpYWJsZVByZWRpY2F0ZUV4cHJlc3Npb259IG9iamVjdC4KKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIElkZW50aWZpYWJsZVByZWRpY2F0ZUV4cHJlc3Npb25JdGVtUHJvdmlkZXIKKwlleHRlbmRzIElkZW50aWZpYWJsZVByZWRpY2F0ZUl0ZW1Qcm92aWRlcgorCWltcGxlbWVudHMKKwkJSUVkaXRpbmdEb21haW5JdGVtUHJvdmlkZXIsCisJCUlTdHJ1Y3R1cmVkSXRlbUNvbnRlbnRQcm92aWRlciwKKwkJSVRyZWVJdGVtQ29udGVudFByb3ZpZGVyLAorCQlJSXRlbUxhYmVsUHJvdmlkZXIsCisJCUlJdGVtUHJvcGVydHlTb3VyY2UgeworCS8qKgorCSAqIFRoaXMgY29uc3RydWN0cyBhbiBpbnN0YW5jZSBmcm9tIGEgZmFjdG9yeSBhbmQgYSBub3RpZmllci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgSWRlbnRpZmlhYmxlUHJlZGljYXRlRXhwcmVzc2lvbkl0ZW1Qcm92aWRlcihBZGFwdGVyRmFjdG9yeSBhZGFwdGVyRmFjdG9yeSkgeworCQlzdXBlcihhZGFwdGVyRmFjdG9yeSk7CisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIHRoZSBwcm9wZXJ0eSBkZXNjcmlwdG9ycyBmb3IgdGhlIGFkYXB0ZWQgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIExpc3Q8SUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I+IGdldFByb3BlcnR5RGVzY3JpcHRvcnMoT2JqZWN0IG9iamVjdCkgeworCQlpZiAoaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMgPT0gbnVsbCkgeworCQkJc3VwZXIuZ2V0UHJvcGVydHlEZXNjcmlwdG9ycyhvYmplY3QpOworCisJCX0KKwkJcmV0dXJuIGl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzOworCX0KKworCS8qKgorCSAqIFRoaXMgc3BlY2lmaWVzIGhvdyB0byBpbXBsZW1lbnQge0BsaW5rICNnZXRDaGlsZHJlbn0gYW5kIGlzIHVzZWQgdG8gZGVkdWNlIGFuIGFwcHJvcHJpYXRlIGZlYXR1cmUgZm9yIGFuCisJICoge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lZGl0LmNvbW1hbmQuQWRkQ29tbWFuZH0sIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuZWRpdC5jb21tYW5kLlJlbW92ZUNvbW1hbmR9IG9yCisJICoge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lZGl0LmNvbW1hbmQuTW92ZUNvbW1hbmR9IGluIHtAbGluayAjY3JlYXRlQ29tbWFuZH0uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIENvbGxlY3Rpb248PyBleHRlbmRzIEVTdHJ1Y3R1cmFsRmVhdHVyZT4gZ2V0Q2hpbGRyZW5GZWF0dXJlcyhPYmplY3Qgb2JqZWN0KSB7CisJCWlmIChjaGlsZHJlbkZlYXR1cmVzID09IG51bGwpIHsKKwkJCXN1cGVyLmdldENoaWxkcmVuRmVhdHVyZXMob2JqZWN0KTsKKwkJCWNoaWxkcmVuRmVhdHVyZXMuYWRkKFByZWRpY2F0ZVBhY2thZ2UuTGl0ZXJhbHMuUFJFRElDQVRFX0VYUFJFU1NJT05fX1BSRURJQ0FURSk7CisJCX0KKwkJcmV0dXJuIGNoaWxkcmVuRmVhdHVyZXM7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIEVTdHJ1Y3R1cmFsRmVhdHVyZSBnZXRDaGlsZEZlYXR1cmUoT2JqZWN0IG9iamVjdCwgT2JqZWN0IGNoaWxkKSB7CisJCS8vIENoZWNrIHRoZSB0eXBlIG9mIHRoZSBzcGVjaWZpZWQgY2hpbGQgb2JqZWN0IGFuZCByZXR1cm4gdGhlIHByb3BlciBmZWF0dXJlIHRvIHVzZSBmb3IKKwkJLy8gYWRkaW5nIChzZWUge0BsaW5rIEFkZENvbW1hbmR9KSBpdCBhcyBhIGNoaWxkLgorCisJCXJldHVybiBzdXBlci5nZXRDaGlsZEZlYXR1cmUob2JqZWN0LCBjaGlsZCk7CisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIFByZWRpY2F0ZS5naWYuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBPYmplY3QgZ2V0SW1hZ2UoT2JqZWN0IG9iamVjdCkgeworCQlyZXR1cm4gb3ZlcmxheUltYWdlKG9iamVjdCwgZ2V0UmVzb3VyY2VMb2NhdG9yKCkuZ2V0SW1hZ2UoImZ1bGwvY3VzdG9tb2JqMTYvUHJlZGljYXRlIikpOworCX0KKwkKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgSWRlbnRpZmlhYmxlUHJlZGljYXRlRXhwcmVzc2lvbi5naWYuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIE9iamVjdCBnZXRJbWFnZUdlbihPYmplY3Qgb2JqZWN0KSB7CisJCXJldHVybiBvdmVybGF5SW1hZ2Uob2JqZWN0LCBnZXRSZXNvdXJjZUxvY2F0b3IoKS5nZXRJbWFnZSgiZnVsbC9vYmoxNi9JZGVudGlmaWFibGVQcmVkaWNhdGVFeHByZXNzaW9uIikpOyAvLyROT04tTkxTLTEkCisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIHRoZSBsYWJlbCB0ZXh0IGZvciB0aGUgYWRhcHRlZCBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgSWRlbnRpZmlhYmxlSXRlbVByb3ZpZGVyI2dldFRleHQoT2JqZWN0KQorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIFN0cmluZyBnZXRUZXh0KE9iamVjdCBvYmplY3QpIHsKKwkJcmV0dXJuIHN1cGVyLmdldFRleHQob2JqZWN0KTsKKwl9CisJCisJLyoqCisJICogVGhpcyByZXR1cm5zIHRoZSBsYWJlbCB0ZXh0IGZvciB0aGUgYWRhcHRlZCBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgU3RyaW5nIGdldFRleHRHZW4oT2JqZWN0IG9iamVjdCkgeworCQlVUkkgbGFiZWxWYWx1ZSA9ICgoSWRlbnRpZmlhYmxlUHJlZGljYXRlRXhwcmVzc2lvbilvYmplY3QpLmdldFVSSSgpOworCQlTdHJpbmcgbGFiZWwgPSBsYWJlbFZhbHVlID09IG51bGwgPyBudWxsIDogbGFiZWxWYWx1ZS50b1N0cmluZygpOworCQlyZXR1cm4gbGFiZWwgPT0gbnVsbCB8fCBsYWJlbC5sZW5ndGgoKSA9PSAwID8KKwkJCWdldFN0cmluZygiX1VJX0lkZW50aWZpYWJsZVByZWRpY2F0ZUV4cHJlc3Npb25fdHlwZSIpIDogLy8kTk9OLU5MUy0xJAorCQkJZ2V0U3RyaW5nKCJfVUlfSWRlbnRpZmlhYmxlUHJlZGljYXRlRXhwcmVzc2lvbl90eXBlIikgKyAiICIgKyBsYWJlbDsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCisJfQorCisJLyoqCisJICogVGhpcyBoYW5kbGVzIG1vZGVsIG5vdGlmaWNhdGlvbnMgYnkgY2FsbGluZyB7QGxpbmsgI3VwZGF0ZUNoaWxkcmVufSB0byB1cGRhdGUgYW55IGNhY2hlZAorCSAqIGNoaWxkcmVuIGFuZCBieSBjcmVhdGluZyBhIHZpZXdlciBub3RpZmljYXRpb24sIHdoaWNoIGl0IHBhc3NlcyB0byB7QGxpbmsgI2ZpcmVOb3RpZnlDaGFuZ2VkfS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBub3RpZnlDaGFuZ2VkKE5vdGlmaWNhdGlvbiBub3RpZmljYXRpb24pIHsKKwkJdXBkYXRlQ2hpbGRyZW4obm90aWZpY2F0aW9uKTsKKworCQlzd2l0Y2ggKG5vdGlmaWNhdGlvbi5nZXRGZWF0dXJlSUQoSWRlbnRpZmlhYmxlUHJlZGljYXRlRXhwcmVzc2lvbi5jbGFzcykpIHsKKwkJCWNhc2UgUHJlZGljYXRlUGFja2FnZS5JREVOVElGSUFCTEVfUFJFRElDQVRFX0VYUFJFU1NJT05fX1BSRURJQ0FURToKKwkJCQlmaXJlTm90aWZ5Q2hhbmdlZChuZXcgVmlld2VyTm90aWZpY2F0aW9uKG5vdGlmaWNhdGlvbiwgbm90aWZpY2F0aW9uLmdldE5vdGlmaWVyKCksIHRydWUsIGZhbHNlKSk7CisJCQkJcmV0dXJuOworCQl9CisJCXN1cGVyLm5vdGlmeUNoYW5nZWQobm90aWZpY2F0aW9uKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFkZHMge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lZGl0LmNvbW1hbmQuQ29tbWFuZFBhcmFtZXRlcn1zIGRlc2NyaWJpbmcgdGhlIGNoaWxkcmVuCisJICogdGhhdCBjYW4gYmUgY3JlYXRlZCB1bmRlciB0aGlzIG9iamVjdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgY29sbGVjdE5ld0NoaWxkRGVzY3JpcHRvcnMoQ29sbGVjdGlvbjxPYmplY3Q+IG5ld0NoaWxkRGVzY3JpcHRvcnMsIE9iamVjdCBvYmplY3QpIHsKKwkJc3VwZXIuY29sbGVjdE5ld0NoaWxkRGVzY3JpcHRvcnMobmV3Q2hpbGREZXNjcmlwdG9ycywgb2JqZWN0KTsKKworCQluZXdDaGlsZERlc2NyaXB0b3JzLmFkZAorCQkJKGNyZWF0ZUNoaWxkUGFyYW1ldGVyCisJCQkJKFByZWRpY2F0ZVBhY2thZ2UuTGl0ZXJhbHMuUFJFRElDQVRFX0VYUFJFU1NJT05fX1BSRURJQ0FURSwKKwkJCQkgUHJlZGljYXRlRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlQW5kKCkpKTsKKworCQluZXdDaGlsZERlc2NyaXB0b3JzLmFkZAorCQkJKGNyZWF0ZUNoaWxkUGFyYW1ldGVyCisJCQkJKFByZWRpY2F0ZVBhY2thZ2UuTGl0ZXJhbHMuUFJFRElDQVRFX0VYUFJFU1NJT05fX1BSRURJQ0FURSwKKwkJCQkgUHJlZGljYXRlRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlRmFsc2UoKSkpOworCisJCW5ld0NoaWxkRGVzY3JpcHRvcnMuYWRkCisJCQkoY3JlYXRlQ2hpbGRQYXJhbWV0ZXIKKwkJCQkoUHJlZGljYXRlUGFja2FnZS5MaXRlcmFscy5QUkVESUNBVEVfRVhQUkVTU0lPTl9fUFJFRElDQVRFLAorCQkJCSBQcmVkaWNhdGVGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVOb3QoKSkpOworCisJCW5ld0NoaWxkRGVzY3JpcHRvcnMuYWRkCisJCQkoY3JlYXRlQ2hpbGRQYXJhbWV0ZXIKKwkJCQkoUHJlZGljYXRlUGFja2FnZS5MaXRlcmFscy5QUkVESUNBVEVfRVhQUkVTU0lPTl9fUFJFRElDQVRFLAorCQkJCSBQcmVkaWNhdGVGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVPcigpKSk7CisKKy8vCQluZXdDaGlsZERlc2NyaXB0b3JzLmFkZAorLy8JCQkoY3JlYXRlQ2hpbGRQYXJhbWV0ZXIKKy8vCQkJCShQcmVkaWNhdGVQYWNrYWdlLkxpdGVyYWxzLlBSRURJQ0FURV9FWFBSRVNTSU9OX19QUkVESUNBVEUsCisvLwkJCQkgUHJlZGljYXRlRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlUHJlZGljYXRlUmVmZXJlbmNlKCkpKTsKKworCQluZXdDaGlsZERlc2NyaXB0b3JzLmFkZAorCQkJKGNyZWF0ZUNoaWxkUGFyYW1ldGVyCisJCQkJKFByZWRpY2F0ZVBhY2thZ2UuTGl0ZXJhbHMuUFJFRElDQVRFX0VYUFJFU1NJT05fX1BSRURJQ0FURSwKKwkJCQkgUHJlZGljYXRlRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlVHJ1ZSgpKSk7CisKKwkJbmV3Q2hpbGREZXNjcmlwdG9ycy5hZGQKKwkJCShjcmVhdGVDaGlsZFBhcmFtZXRlcgorCQkJCShQcmVkaWNhdGVQYWNrYWdlLkxpdGVyYWxzLlBSRURJQ0FURV9FWFBSRVNTSU9OX19QUkVESUNBVEUsCisJCQkJIFByZWRpY2F0ZUZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZVByZWRpY2F0ZUV4cHJlc3Npb24oKSkpOworCisvLwkJbmV3Q2hpbGREZXNjcmlwdG9ycy5hZGQKKy8vCQkJKGNyZWF0ZUNoaWxkUGFyYW1ldGVyCisvLwkJCQkoUHJlZGljYXRlUGFja2FnZS5MaXRlcmFscy5QUkVESUNBVEVfRVhQUkVTU0lPTl9fUFJFRElDQVRFLAorLy8JCQkJIFByZWRpY2F0ZUZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZUlkZW50aWZpYWJsZVByZWRpY2F0ZUV4cHJlc3Npb24oKSkpOworCisJCW5ld0NoaWxkRGVzY3JpcHRvcnMuYWRkCisJCQkoY3JlYXRlQ2hpbGRQYXJhbWV0ZXIKKwkJCQkoUHJlZGljYXRlUGFja2FnZS5MaXRlcmFscy5QUkVESUNBVEVfRVhQUkVTU0lPTl9fUFJFRElDQVRFLAorCQkJCSBQcmVkaWNhdGVGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVFbGFwc2VkVGltZVRlc3QoKSkpOworCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmVkaXQuY29tbWFuZC5Db21tYW5kUGFyYW1ldGVyfXMgZGVzY3JpYmluZyB0aGUgY2hpbGRyZW4KKwkgKiB0aGF0IGNhbiBiZSBjcmVhdGVkIHVuZGVyIHRoaXMgb2JqZWN0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCS8vQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgY29sbGVjdE5ld0NoaWxkRGVzY3JpcHRvcnNHZW4oQ29sbGVjdGlvbjxPYmplY3Q+IG5ld0NoaWxkRGVzY3JpcHRvcnMsIE9iamVjdCBvYmplY3QpIHsKKwkJc3VwZXIuY29sbGVjdE5ld0NoaWxkRGVzY3JpcHRvcnMobmV3Q2hpbGREZXNjcmlwdG9ycywgb2JqZWN0KTsKKworCQluZXdDaGlsZERlc2NyaXB0b3JzLmFkZAorCQkJKGNyZWF0ZUNoaWxkUGFyYW1ldGVyCisJCQkJKFByZWRpY2F0ZVBhY2thZ2UuTGl0ZXJhbHMuUFJFRElDQVRFX0VYUFJFU1NJT05fX1BSRURJQ0FURSwKKwkJCQkgUHJlZGljYXRlRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlQW5kKCkpKTsKKworCQluZXdDaGlsZERlc2NyaXB0b3JzLmFkZAorCQkJKGNyZWF0ZUNoaWxkUGFyYW1ldGVyCisJCQkJKFByZWRpY2F0ZVBhY2thZ2UuTGl0ZXJhbHMuUFJFRElDQVRFX0VYUFJFU1NJT05fX1BSRURJQ0FURSwKKwkJCQkgUHJlZGljYXRlRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlRmFsc2UoKSkpOworCisJCW5ld0NoaWxkRGVzY3JpcHRvcnMuYWRkCisJCQkoY3JlYXRlQ2hpbGRQYXJhbWV0ZXIKKwkJCQkoUHJlZGljYXRlUGFja2FnZS5MaXRlcmFscy5QUkVESUNBVEVfRVhQUkVTU0lPTl9fUFJFRElDQVRFLAorCQkJCSBQcmVkaWNhdGVGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVOb3QoKSkpOworCisJCW5ld0NoaWxkRGVzY3JpcHRvcnMuYWRkCisJCQkoY3JlYXRlQ2hpbGRQYXJhbWV0ZXIKKwkJCQkoUHJlZGljYXRlUGFja2FnZS5MaXRlcmFscy5QUkVESUNBVEVfRVhQUkVTU0lPTl9fUFJFRElDQVRFLAorCQkJCSBQcmVkaWNhdGVGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVPcigpKSk7CisKKwkJbmV3Q2hpbGREZXNjcmlwdG9ycy5hZGQKKwkJCShjcmVhdGVDaGlsZFBhcmFtZXRlcgorCQkJCShQcmVkaWNhdGVQYWNrYWdlLkxpdGVyYWxzLlBSRURJQ0FURV9FWFBSRVNTSU9OX19QUkVESUNBVEUsCisJCQkJIFByZWRpY2F0ZUZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZVByZWRpY2F0ZVJlZmVyZW5jZSgpKSk7CisKKwkJbmV3Q2hpbGREZXNjcmlwdG9ycy5hZGQKKwkJCShjcmVhdGVDaGlsZFBhcmFtZXRlcgorCQkJCShQcmVkaWNhdGVQYWNrYWdlLkxpdGVyYWxzLlBSRURJQ0FURV9FWFBSRVNTSU9OX19QUkVESUNBVEUsCisJCQkJIFByZWRpY2F0ZUZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZVRydWUoKSkpOworCisJCW5ld0NoaWxkRGVzY3JpcHRvcnMuYWRkCisJCQkoY3JlYXRlQ2hpbGRQYXJhbWV0ZXIKKwkJCQkoUHJlZGljYXRlUGFja2FnZS5MaXRlcmFscy5QUkVESUNBVEVfRVhQUkVTU0lPTl9fUFJFRElDQVRFLAorCQkJCSBQcmVkaWNhdGVGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVQcmVkaWNhdGVFeHByZXNzaW9uKCkpKTsKKworCQluZXdDaGlsZERlc2NyaXB0b3JzLmFkZAorCQkJKGNyZWF0ZUNoaWxkUGFyYW1ldGVyCisJCQkJKFByZWRpY2F0ZVBhY2thZ2UuTGl0ZXJhbHMuUFJFRElDQVRFX0VYUFJFU1NJT05fX1BSRURJQ0FURSwKKwkJCQkgUHJlZGljYXRlRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlSWRlbnRpZmlhYmxlUHJlZGljYXRlRXhwcmVzc2lvbigpKSk7CisKKwkJbmV3Q2hpbGREZXNjcmlwdG9ycy5hZGQKKwkJCShjcmVhdGVDaGlsZFBhcmFtZXRlcgorCQkJCShQcmVkaWNhdGVQYWNrYWdlLkxpdGVyYWxzLlBSRURJQ0FURV9FWFBSRVNTSU9OX19QUkVESUNBVEUsCisJCQkJIFByZWRpY2F0ZUZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZUVsYXBzZWRUaW1lVGVzdCgpKSk7CisJfQorCit9CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3ByZWRpY2F0ZS9wcm92aWRlci9JZGVudGlmaWFibGVQcmVkaWNhdGVJdGVtUHJvdmlkZXIuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvcHJlZGljYXRlL3Byb3ZpZGVyL0lkZW50aWZpYWJsZVByZWRpY2F0ZUl0ZW1Qcm92aWRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZkYTBhMmEKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3ByZWRpY2F0ZS9wcm92aWRlci9JZGVudGlmaWFibGVQcmVkaWNhdGVJdGVtUHJvdmlkZXIuamF2YQpAQCAtMCwwICsxLDExNSBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlLnByb3ZpZGVyOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOworaW1wb3J0IGphdmEudXRpbC5MaXN0OworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5SZXNvdXJjZUxvY2F0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUNoaWxkQ3JlYXRpb25FeHRlbmRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JRWRpdGluZ0RvbWFpbkl0ZW1Qcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbUxhYmVsUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1Qcm9wZXJ0eVNvdXJjZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JU3RydWN0dXJlZEl0ZW1Db250ZW50UHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVRyZWVJdGVtQ29udGVudFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24ucHJvdmlkZXIuSWRlbnRpZmlhYmxlSXRlbVByb3ZpZGVyOworCisvKioKKyAqIFRoaXMgaXMgdGhlIGl0ZW0gcHJvdmlkZXIgYWRhcHRlciBmb3IgYSB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZS5JZGVudGlmaWFibGVQcmVkaWNhdGV9IG9iamVjdC4KKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIElkZW50aWZpYWJsZVByZWRpY2F0ZUl0ZW1Qcm92aWRlcgorCWV4dGVuZHMgSWRlbnRpZmlhYmxlSXRlbVByb3ZpZGVyCisJaW1wbGVtZW50cworCQlJRWRpdGluZ0RvbWFpbkl0ZW1Qcm92aWRlciwKKwkJSVN0cnVjdHVyZWRJdGVtQ29udGVudFByb3ZpZGVyLAorCQlJVHJlZUl0ZW1Db250ZW50UHJvdmlkZXIsCisJCUlJdGVtTGFiZWxQcm92aWRlciwKKwkJSUl0ZW1Qcm9wZXJ0eVNvdXJjZSB7CisJLyoqCisJICogVGhpcyBjb25zdHJ1Y3RzIGFuIGluc3RhbmNlIGZyb20gYSBmYWN0b3J5IGFuZCBhIG5vdGlmaWVyLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBJZGVudGlmaWFibGVQcmVkaWNhdGVJdGVtUHJvdmlkZXIoQWRhcHRlckZhY3RvcnkgYWRhcHRlckZhY3RvcnkpIHsKKwkJc3VwZXIoYWRhcHRlckZhY3RvcnkpOworCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyB0aGUgcHJvcGVydHkgZGVzY3JpcHRvcnMgZm9yIHRoZSBhZGFwdGVkIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBMaXN0PElJdGVtUHJvcGVydHlEZXNjcmlwdG9yPiBnZXRQcm9wZXJ0eURlc2NyaXB0b3JzKE9iamVjdCBvYmplY3QpIHsKKwkJaWYgKGl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzID09IG51bGwpIHsKKwkJCXN1cGVyLmdldFByb3BlcnR5RGVzY3JpcHRvcnMob2JqZWN0KTsKKworCQl9CisJCXJldHVybiBpdGVtUHJvcGVydHlEZXNjcmlwdG9yczsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgdGhlIGxhYmVsIHRleHQgZm9yIHRoZSBhZGFwdGVkIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgU3RyaW5nIGdldFRleHQoT2JqZWN0IG9iamVjdCkgeworCQlyZXR1cm4gc3VwZXIuZ2V0VGV4dChvYmplY3QpOworCX0KKworCS8qKgorCSAqIFRoaXMgaGFuZGxlcyBtb2RlbCBub3RpZmljYXRpb25zIGJ5IGNhbGxpbmcge0BsaW5rICN1cGRhdGVDaGlsZHJlbn0gdG8gdXBkYXRlIGFueSBjYWNoZWQKKwkgKiBjaGlsZHJlbiBhbmQgYnkgY3JlYXRpbmcgYSB2aWV3ZXIgbm90aWZpY2F0aW9uLCB3aGljaCBpdCBwYXNzZXMgdG8ge0BsaW5rICNmaXJlTm90aWZ5Q2hhbmdlZH0uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgbm90aWZ5Q2hhbmdlZChOb3RpZmljYXRpb24gbm90aWZpY2F0aW9uKSB7CisJCXVwZGF0ZUNoaWxkcmVuKG5vdGlmaWNhdGlvbik7CisJCXN1cGVyLm5vdGlmeUNoYW5nZWQobm90aWZpY2F0aW9uKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFkZHMge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lZGl0LmNvbW1hbmQuQ29tbWFuZFBhcmFtZXRlcn1zIGRlc2NyaWJpbmcgdGhlIGNoaWxkcmVuCisJICogdGhhdCBjYW4gYmUgY3JlYXRlZCB1bmRlciB0aGlzIG9iamVjdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgdm9pZCBjb2xsZWN0TmV3Q2hpbGREZXNjcmlwdG9ycyhDb2xsZWN0aW9uPE9iamVjdD4gbmV3Q2hpbGREZXNjcmlwdG9ycywgT2JqZWN0IG9iamVjdCkgeworCQlzdXBlci5jb2xsZWN0TmV3Q2hpbGREZXNjcmlwdG9ycyhuZXdDaGlsZERlc2NyaXB0b3JzLCBvYmplY3QpOworCX0KKworCS8qKgorCSAqIFJldHVybiB0aGUgcmVzb3VyY2UgbG9jYXRvciBmb3IgdGhpcyBpdGVtIHByb3ZpZGVyJ3MgcmVzb3VyY2VzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBSZXNvdXJjZUxvY2F0b3IgZ2V0UmVzb3VyY2VMb2NhdG9yKCkgeworCQlyZXR1cm4gKChJQ2hpbGRDcmVhdGlvbkV4dGVuZGVyKWFkYXB0ZXJGYWN0b3J5KS5nZXRSZXNvdXJjZUxvY2F0b3IoKTsKKwl9CisKK30KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvcHJlZGljYXRlL3Byb3ZpZGVyL0lkZW50aWZpYWJsZVRlc3RJdGVtUHJvdmlkZXIuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvcHJlZGljYXRlL3Byb3ZpZGVyL0lkZW50aWZpYWJsZVRlc3RJdGVtUHJvdmlkZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZGQ2YWMxCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9wcmVkaWNhdGUvcHJvdmlkZXIvSWRlbnRpZmlhYmxlVGVzdEl0ZW1Qcm92aWRlci5qYXZhCkBAIC0wLDAgKzEsMTA3IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUucHJvdmlkZXI7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5BZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlVSSTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JRWRpdGluZ0RvbWFpbkl0ZW1Qcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbUxhYmVsUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1Qcm9wZXJ0eVNvdXJjZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JU3RydWN0dXJlZEl0ZW1Db250ZW50UHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVRyZWVJdGVtQ29udGVudFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUuSWRlbnRpZmlhYmxlVGVzdDsKKworLyoqCisgKiBUaGlzIGlzIHRoZSBpdGVtIHByb3ZpZGVyIGFkYXB0ZXIgZm9yIGEge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUuSWRlbnRpZmlhYmxlVGVzdH0gb2JqZWN0LgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgSWRlbnRpZmlhYmxlVGVzdEl0ZW1Qcm92aWRlcgorCWV4dGVuZHMgSWRlbnRpZmlhYmxlUHJlZGljYXRlSXRlbVByb3ZpZGVyCisJaW1wbGVtZW50cworCQlJRWRpdGluZ0RvbWFpbkl0ZW1Qcm92aWRlciwKKwkJSVN0cnVjdHVyZWRJdGVtQ29udGVudFByb3ZpZGVyLAorCQlJVHJlZUl0ZW1Db250ZW50UHJvdmlkZXIsCisJCUlJdGVtTGFiZWxQcm92aWRlciwKKwkJSUl0ZW1Qcm9wZXJ0eVNvdXJjZSB7CisJLyoqCisJICogVGhpcyBjb25zdHJ1Y3RzIGFuIGluc3RhbmNlIGZyb20gYSBmYWN0b3J5IGFuZCBhIG5vdGlmaWVyLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBJZGVudGlmaWFibGVUZXN0SXRlbVByb3ZpZGVyKEFkYXB0ZXJGYWN0b3J5IGFkYXB0ZXJGYWN0b3J5KSB7CisJCXN1cGVyKGFkYXB0ZXJGYWN0b3J5KTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgdGhlIHByb3BlcnR5IGRlc2NyaXB0b3JzIGZvciB0aGUgYWRhcHRlZCBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgTGlzdDxJSXRlbVByb3BlcnR5RGVzY3JpcHRvcj4gZ2V0UHJvcGVydHlEZXNjcmlwdG9ycyhPYmplY3Qgb2JqZWN0KSB7CisJCWlmIChpdGVtUHJvcGVydHlEZXNjcmlwdG9ycyA9PSBudWxsKSB7CisJCQlzdXBlci5nZXRQcm9wZXJ0eURlc2NyaXB0b3JzKG9iamVjdCk7CisKKwkJfQorCQlyZXR1cm4gaXRlbVByb3BlcnR5RGVzY3JpcHRvcnM7CisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIHRoZSBsYWJlbCB0ZXh0IGZvciB0aGUgYWRhcHRlZCBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgU3RyaW5nIGdldFRleHQoT2JqZWN0IG9iamVjdCkgeworCQlVUkkgbGFiZWxWYWx1ZSA9ICgoSWRlbnRpZmlhYmxlVGVzdClvYmplY3QpLmdldFVSSSgpOworCQlTdHJpbmcgbGFiZWwgPSBsYWJlbFZhbHVlID09IG51bGwgPyBudWxsIDogbGFiZWxWYWx1ZS50b1N0cmluZygpOworCQlyZXR1cm4gbGFiZWwgPT0gbnVsbCB8fCBsYWJlbC5sZW5ndGgoKSA9PSAwID8KKwkJCWdldFN0cmluZygiX1VJX0lkZW50aWZpYWJsZVRlc3RfdHlwZSIpIDogLy8kTk9OLU5MUy0xJAorCQkJZ2V0U3RyaW5nKCJfVUlfSWRlbnRpZmlhYmxlVGVzdF90eXBlIikgKyAiICIgKyBsYWJlbDsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCisJfQorCisJLyoqCisJICogVGhpcyBoYW5kbGVzIG1vZGVsIG5vdGlmaWNhdGlvbnMgYnkgY2FsbGluZyB7QGxpbmsgI3VwZGF0ZUNoaWxkcmVufSB0byB1cGRhdGUgYW55IGNhY2hlZAorCSAqIGNoaWxkcmVuIGFuZCBieSBjcmVhdGluZyBhIHZpZXdlciBub3RpZmljYXRpb24sIHdoaWNoIGl0IHBhc3NlcyB0byB7QGxpbmsgI2ZpcmVOb3RpZnlDaGFuZ2VkfS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBub3RpZnlDaGFuZ2VkKE5vdGlmaWNhdGlvbiBub3RpZmljYXRpb24pIHsKKwkJdXBkYXRlQ2hpbGRyZW4obm90aWZpY2F0aW9uKTsKKwkJc3VwZXIubm90aWZ5Q2hhbmdlZChub3RpZmljYXRpb24pOworCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmVkaXQuY29tbWFuZC5Db21tYW5kUGFyYW1ldGVyfXMgZGVzY3JpYmluZyB0aGUgY2hpbGRyZW4KKwkgKiB0aGF0IGNhbiBiZSBjcmVhdGVkIHVuZGVyIHRoaXMgb2JqZWN0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIGNvbGxlY3ROZXdDaGlsZERlc2NyaXB0b3JzKENvbGxlY3Rpb248T2JqZWN0PiBuZXdDaGlsZERlc2NyaXB0b3JzLCBPYmplY3Qgb2JqZWN0KSB7CisJCXN1cGVyLmNvbGxlY3ROZXdDaGlsZERlc2NyaXB0b3JzKG5ld0NoaWxkRGVzY3JpcHRvcnMsIG9iamVjdCk7CisJfQorCit9CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3ByZWRpY2F0ZS9wcm92aWRlci9OYXJ5Qm9vbGVhbk9wZXJhdG9ySXRlbVByb3ZpZGVyLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3ByZWRpY2F0ZS9wcm92aWRlci9OYXJ5Qm9vbGVhbk9wZXJhdG9ySXRlbVByb3ZpZGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjgyZDliOAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvcHJlZGljYXRlL3Byb3ZpZGVyL05hcnlCb29sZWFuT3BlcmF0b3JJdGVtUHJvdmlkZXIuamF2YQpAQCAtMCwwICsxLDI0NiBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlLnByb3ZpZGVyOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCitpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5BZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVTdHJ1Y3R1cmFsRmVhdHVyZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JRWRpdGluZ0RvbWFpbkl0ZW1Qcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbUxhYmVsUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1Qcm9wZXJ0eVNvdXJjZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JU3RydWN0dXJlZEl0ZW1Db250ZW50UHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVRyZWVJdGVtQ29udGVudFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLlZpZXdlck5vdGlmaWNhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlLk5hcnlCb29sZWFuT3BlcmF0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZS5QcmVkaWNhdGVGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUuUHJlZGljYXRlUGFja2FnZTsKKworLyoqCisgKiBUaGlzIGlzIHRoZSBpdGVtIHByb3ZpZGVyIGFkYXB0ZXIgZm9yIGEge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUuTmFyeUJvb2xlYW5PcGVyYXRvcn0gb2JqZWN0LgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgTmFyeUJvb2xlYW5PcGVyYXRvckl0ZW1Qcm92aWRlcgorCWV4dGVuZHMgQm9vbGVhbk9wZXJhdG9ySXRlbVByb3ZpZGVyCisJaW1wbGVtZW50cworCQlJRWRpdGluZ0RvbWFpbkl0ZW1Qcm92aWRlciwKKwkJSVN0cnVjdHVyZWRJdGVtQ29udGVudFByb3ZpZGVyLAorCQlJVHJlZUl0ZW1Db250ZW50UHJvdmlkZXIsCisJCUlJdGVtTGFiZWxQcm92aWRlciwKKwkJSUl0ZW1Qcm9wZXJ0eVNvdXJjZSB7CisJLyoqCisJICogVGhpcyBjb25zdHJ1Y3RzIGFuIGluc3RhbmNlIGZyb20gYSBmYWN0b3J5IGFuZCBhIG5vdGlmaWVyLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBOYXJ5Qm9vbGVhbk9wZXJhdG9ySXRlbVByb3ZpZGVyKEFkYXB0ZXJGYWN0b3J5IGFkYXB0ZXJGYWN0b3J5KSB7CisJCXN1cGVyKGFkYXB0ZXJGYWN0b3J5KTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgdGhlIHByb3BlcnR5IGRlc2NyaXB0b3JzIGZvciB0aGUgYWRhcHRlZCBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgTGlzdDxJSXRlbVByb3BlcnR5RGVzY3JpcHRvcj4gZ2V0UHJvcGVydHlEZXNjcmlwdG9ycyhPYmplY3Qgb2JqZWN0KSB7CisJCWlmIChpdGVtUHJvcGVydHlEZXNjcmlwdG9ycyA9PSBudWxsKSB7CisJCQlzdXBlci5nZXRQcm9wZXJ0eURlc2NyaXB0b3JzKG9iamVjdCk7CisKKwkJfQorCQlyZXR1cm4gaXRlbVByb3BlcnR5RGVzY3JpcHRvcnM7CisJfQorCisJLyoqCisJICogVGhpcyBzcGVjaWZpZXMgaG93IHRvIGltcGxlbWVudCB7QGxpbmsgI2dldENoaWxkcmVufSBhbmQgaXMgdXNlZCB0byBkZWR1Y2UgYW4gYXBwcm9wcmlhdGUgZmVhdHVyZSBmb3IgYW4KKwkgKiB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmVkaXQuY29tbWFuZC5BZGRDb21tYW5kfSwge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lZGl0LmNvbW1hbmQuUmVtb3ZlQ29tbWFuZH0gb3IKKwkgKiB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmVkaXQuY29tbWFuZC5Nb3ZlQ29tbWFuZH0gaW4ge0BsaW5rICNjcmVhdGVDb21tYW5kfS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgQ29sbGVjdGlvbjw/IGV4dGVuZHMgRVN0cnVjdHVyYWxGZWF0dXJlPiBnZXRDaGlsZHJlbkZlYXR1cmVzKE9iamVjdCBvYmplY3QpIHsKKwkJaWYgKGNoaWxkcmVuRmVhdHVyZXMgPT0gbnVsbCkgeworCQkJc3VwZXIuZ2V0Q2hpbGRyZW5GZWF0dXJlcyhvYmplY3QpOworCQkJY2hpbGRyZW5GZWF0dXJlcy5hZGQoUHJlZGljYXRlUGFja2FnZS5MaXRlcmFscy5OQVJZX0JPT0xFQU5fT1BFUkFUT1JfX09QRVJBTkRTKTsKKwkJfQorCQlyZXR1cm4gY2hpbGRyZW5GZWF0dXJlczsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgRVN0cnVjdHVyYWxGZWF0dXJlIGdldENoaWxkRmVhdHVyZShPYmplY3Qgb2JqZWN0LCBPYmplY3QgY2hpbGQpIHsKKwkJLy8gQ2hlY2sgdGhlIHR5cGUgb2YgdGhlIHNwZWNpZmllZCBjaGlsZCBvYmplY3QgYW5kIHJldHVybiB0aGUgcHJvcGVyIGZlYXR1cmUgdG8gdXNlIGZvcgorCQkvLyBhZGRpbmcgKHNlZSB7QGxpbmsgQWRkQ29tbWFuZH0pIGl0IGFzIGEgY2hpbGQuCisKKwkJcmV0dXJuIHN1cGVyLmdldENoaWxkRmVhdHVyZShvYmplY3QsIGNoaWxkKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgdGhlIGxhYmVsIHRleHQgZm9yIHRoZSBhZGFwdGVkIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBTdHJpbmcgZ2V0VGV4dChPYmplY3Qgb2JqZWN0KSB7CisJCXJldHVybiBnZXRTdHJpbmcoIl9VSV9OYXJ5Qm9vbGVhbk9wZXJhdG9yX3R5cGUiKTsgLy8kTk9OLU5MUy0xJAorCX0KKworCS8qKgorCSAqIFRoaXMgaGFuZGxlcyBtb2RlbCBub3RpZmljYXRpb25zIGJ5IGNhbGxpbmcge0BsaW5rICN1cGRhdGVDaGlsZHJlbn0gdG8gdXBkYXRlIGFueSBjYWNoZWQKKwkgKiBjaGlsZHJlbiBhbmQgYnkgY3JlYXRpbmcgYSB2aWV3ZXIgbm90aWZpY2F0aW9uLCB3aGljaCBpdCBwYXNzZXMgdG8ge0BsaW5rICNmaXJlTm90aWZ5Q2hhbmdlZH0uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgbm90aWZ5Q2hhbmdlZChOb3RpZmljYXRpb24gbm90aWZpY2F0aW9uKSB7CisJCXVwZGF0ZUNoaWxkcmVuKG5vdGlmaWNhdGlvbik7CisKKwkJc3dpdGNoIChub3RpZmljYXRpb24uZ2V0RmVhdHVyZUlEKE5hcnlCb29sZWFuT3BlcmF0b3IuY2xhc3MpKSB7CisJCQljYXNlIFByZWRpY2F0ZVBhY2thZ2UuTkFSWV9CT09MRUFOX09QRVJBVE9SX19PUEVSQU5EUzoKKwkJCQlmaXJlTm90aWZ5Q2hhbmdlZChuZXcgVmlld2VyTm90aWZpY2F0aW9uKG5vdGlmaWNhdGlvbiwgbm90aWZpY2F0aW9uLmdldE5vdGlmaWVyKCksIHRydWUsIGZhbHNlKSk7CisJCQkJcmV0dXJuOworCQl9CisJCXN1cGVyLm5vdGlmeUNoYW5nZWQobm90aWZpY2F0aW9uKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFkZHMge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lZGl0LmNvbW1hbmQuQ29tbWFuZFBhcmFtZXRlcn1zIGRlc2NyaWJpbmcgdGhlIGNoaWxkcmVuCisJICogdGhhdCBjYW4gYmUgY3JlYXRlZCB1bmRlciB0aGlzIG9iamVjdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgY29sbGVjdE5ld0NoaWxkRGVzY3JpcHRvcnMoQ29sbGVjdGlvbjxPYmplY3Q+IG5ld0NoaWxkRGVzY3JpcHRvcnMsIE9iamVjdCBvYmplY3QpIHsKKwkJc3VwZXIuY29sbGVjdE5ld0NoaWxkRGVzY3JpcHRvcnMobmV3Q2hpbGREZXNjcmlwdG9ycywgb2JqZWN0KTsKKworCQluZXdDaGlsZERlc2NyaXB0b3JzLmFkZAorCQkJKGNyZWF0ZUNoaWxkUGFyYW1ldGVyCisJCQkJKFByZWRpY2F0ZVBhY2thZ2UuTGl0ZXJhbHMuTkFSWV9CT09MRUFOX09QRVJBVE9SX19PUEVSQU5EUywKKwkJCQkgUHJlZGljYXRlRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlQW5kKCkpKTsKKworCQluZXdDaGlsZERlc2NyaXB0b3JzLmFkZAorCQkJKGNyZWF0ZUNoaWxkUGFyYW1ldGVyCisJCQkJKFByZWRpY2F0ZVBhY2thZ2UuTGl0ZXJhbHMuTkFSWV9CT09MRUFOX09QRVJBVE9SX19PUEVSQU5EUywKKwkJCQkgUHJlZGljYXRlRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlRmFsc2UoKSkpOworCisJCW5ld0NoaWxkRGVzY3JpcHRvcnMuYWRkCisJCQkoY3JlYXRlQ2hpbGRQYXJhbWV0ZXIKKwkJCQkoUHJlZGljYXRlUGFja2FnZS5MaXRlcmFscy5OQVJZX0JPT0xFQU5fT1BFUkFUT1JfX09QRVJBTkRTLAorCQkJCSBQcmVkaWNhdGVGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVOb3QoKSkpOworCisJCW5ld0NoaWxkRGVzY3JpcHRvcnMuYWRkCisJCQkoY3JlYXRlQ2hpbGRQYXJhbWV0ZXIKKwkJCQkoUHJlZGljYXRlUGFja2FnZS5MaXRlcmFscy5OQVJZX0JPT0xFQU5fT1BFUkFUT1JfX09QRVJBTkRTLAorCQkJCSBQcmVkaWNhdGVGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVPcigpKSk7CisKKy8vCQluZXdDaGlsZERlc2NyaXB0b3JzLmFkZAorLy8JCQkoY3JlYXRlQ2hpbGRQYXJhbWV0ZXIKKy8vCQkJCShQcmVkaWNhdGVQYWNrYWdlLkxpdGVyYWxzLk5BUllfQk9PTEVBTl9PUEVSQVRPUl9fT1BFUkFORFMsCisvLwkJCQkgUHJlZGljYXRlRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlUHJlZGljYXRlUmVmZXJlbmNlKCkpKTsKKworCQluZXdDaGlsZERlc2NyaXB0b3JzLmFkZAorCQkJKGNyZWF0ZUNoaWxkUGFyYW1ldGVyCisJCQkJKFByZWRpY2F0ZVBhY2thZ2UuTGl0ZXJhbHMuTkFSWV9CT09MRUFOX09QRVJBVE9SX19PUEVSQU5EUywKKwkJCQkgUHJlZGljYXRlRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlVHJ1ZSgpKSk7CisKKwkJbmV3Q2hpbGREZXNjcmlwdG9ycy5hZGQKKwkJCShjcmVhdGVDaGlsZFBhcmFtZXRlcgorCQkJCShQcmVkaWNhdGVQYWNrYWdlLkxpdGVyYWxzLk5BUllfQk9PTEVBTl9PUEVSQVRPUl9fT1BFUkFORFMsCisJCQkJIFByZWRpY2F0ZUZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZVByZWRpY2F0ZUV4cHJlc3Npb24oKSkpOworCisvLwkJbmV3Q2hpbGREZXNjcmlwdG9ycy5hZGQKKy8vCQkJKGNyZWF0ZUNoaWxkUGFyYW1ldGVyCisvLwkJCQkoUHJlZGljYXRlUGFja2FnZS5MaXRlcmFscy5OQVJZX0JPT0xFQU5fT1BFUkFUT1JfX09QRVJBTkRTLAorLy8JCQkJIFByZWRpY2F0ZUZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZUlkZW50aWZpYWJsZVByZWRpY2F0ZUV4cHJlc3Npb24oKSkpOworCisJCW5ld0NoaWxkRGVzY3JpcHRvcnMuYWRkCisJCQkoY3JlYXRlQ2hpbGRQYXJhbWV0ZXIKKwkJCQkoUHJlZGljYXRlUGFja2FnZS5MaXRlcmFscy5OQVJZX0JPT0xFQU5fT1BFUkFUT1JfX09QRVJBTkRTLAorCQkJCSBQcmVkaWNhdGVGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVFbGFwc2VkVGltZVRlc3QoKSkpOworCX0gLy8gY29sbGVjdE5ld0NoaWxkRGVzY3JpcHRvcnMKKworCS8qKgorCSAqIFRoaXMgYWRkcyB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmVkaXQuY29tbWFuZC5Db21tYW5kUGFyYW1ldGVyfXMgZGVzY3JpYmluZyB0aGUgY2hpbGRyZW4KKwkgKiB0aGF0IGNhbiBiZSBjcmVhdGVkIHVuZGVyIHRoaXMgb2JqZWN0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCS8vQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgY29sbGVjdE5ld0NoaWxkRGVzY3JpcHRvcnNHZW4oQ29sbGVjdGlvbjxPYmplY3Q+IG5ld0NoaWxkRGVzY3JpcHRvcnMsIE9iamVjdCBvYmplY3QpIHsKKwkJc3VwZXIuY29sbGVjdE5ld0NoaWxkRGVzY3JpcHRvcnMobmV3Q2hpbGREZXNjcmlwdG9ycywgb2JqZWN0KTsKKworCQluZXdDaGlsZERlc2NyaXB0b3JzLmFkZAorCQkJKGNyZWF0ZUNoaWxkUGFyYW1ldGVyCisJCQkJKFByZWRpY2F0ZVBhY2thZ2UuTGl0ZXJhbHMuTkFSWV9CT09MRUFOX09QRVJBVE9SX19PUEVSQU5EUywKKwkJCQkgUHJlZGljYXRlRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlQW5kKCkpKTsKKworCQluZXdDaGlsZERlc2NyaXB0b3JzLmFkZAorCQkJKGNyZWF0ZUNoaWxkUGFyYW1ldGVyCisJCQkJKFByZWRpY2F0ZVBhY2thZ2UuTGl0ZXJhbHMuTkFSWV9CT09MRUFOX09QRVJBVE9SX19PUEVSQU5EUywKKwkJCQkgUHJlZGljYXRlRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlRmFsc2UoKSkpOworCisJCW5ld0NoaWxkRGVzY3JpcHRvcnMuYWRkCisJCQkoY3JlYXRlQ2hpbGRQYXJhbWV0ZXIKKwkJCQkoUHJlZGljYXRlUGFja2FnZS5MaXRlcmFscy5OQVJZX0JPT0xFQU5fT1BFUkFUT1JfX09QRVJBTkRTLAorCQkJCSBQcmVkaWNhdGVGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVOb3QoKSkpOworCisJCW5ld0NoaWxkRGVzY3JpcHRvcnMuYWRkCisJCQkoY3JlYXRlQ2hpbGRQYXJhbWV0ZXIKKwkJCQkoUHJlZGljYXRlUGFja2FnZS5MaXRlcmFscy5OQVJZX0JPT0xFQU5fT1BFUkFUT1JfX09QRVJBTkRTLAorCQkJCSBQcmVkaWNhdGVGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVPcigpKSk7CisKKwkJbmV3Q2hpbGREZXNjcmlwdG9ycy5hZGQKKwkJCShjcmVhdGVDaGlsZFBhcmFtZXRlcgorCQkJCShQcmVkaWNhdGVQYWNrYWdlLkxpdGVyYWxzLk5BUllfQk9PTEVBTl9PUEVSQVRPUl9fT1BFUkFORFMsCisJCQkJIFByZWRpY2F0ZUZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZVByZWRpY2F0ZVJlZmVyZW5jZSgpKSk7CisKKwkJbmV3Q2hpbGREZXNjcmlwdG9ycy5hZGQKKwkJCShjcmVhdGVDaGlsZFBhcmFtZXRlcgorCQkJCShQcmVkaWNhdGVQYWNrYWdlLkxpdGVyYWxzLk5BUllfQk9PTEVBTl9PUEVSQVRPUl9fT1BFUkFORFMsCisJCQkJIFByZWRpY2F0ZUZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZVRydWUoKSkpOworCisJCW5ld0NoaWxkRGVzY3JpcHRvcnMuYWRkCisJCQkoY3JlYXRlQ2hpbGRQYXJhbWV0ZXIKKwkJCQkoUHJlZGljYXRlUGFja2FnZS5MaXRlcmFscy5OQVJZX0JPT0xFQU5fT1BFUkFUT1JfX09QRVJBTkRTLAorCQkJCSBQcmVkaWNhdGVGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVQcmVkaWNhdGVFeHByZXNzaW9uKCkpKTsKKworCQluZXdDaGlsZERlc2NyaXB0b3JzLmFkZAorCQkJKGNyZWF0ZUNoaWxkUGFyYW1ldGVyCisJCQkJKFByZWRpY2F0ZVBhY2thZ2UuTGl0ZXJhbHMuTkFSWV9CT09MRUFOX09QRVJBVE9SX19PUEVSQU5EUywKKwkJCQkgUHJlZGljYXRlRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlSWRlbnRpZmlhYmxlUHJlZGljYXRlRXhwcmVzc2lvbigpKSk7CisKKwkJbmV3Q2hpbGREZXNjcmlwdG9ycy5hZGQKKwkJCShjcmVhdGVDaGlsZFBhcmFtZXRlcgorCQkJCShQcmVkaWNhdGVQYWNrYWdlLkxpdGVyYWxzLk5BUllfQk9PTEVBTl9PUEVSQVRPUl9fT1BFUkFORFMsCisJCQkJIFByZWRpY2F0ZUZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZUVsYXBzZWRUaW1lVGVzdCgpKSk7CisJfQorCisJCit9IC8vIE5hcnlCb29sZWFuT3BlcmF0b3JJdGVtUHJvdmlkZXIKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvcHJlZGljYXRlL3Byb3ZpZGVyL05vdEl0ZW1Qcm92aWRlci5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9wcmVkaWNhdGUvcHJvdmlkZXIvTm90SXRlbVByb3ZpZGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzJiMDNmMAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvcHJlZGljYXRlL3Byb3ZpZGVyL05vdEl0ZW1Qcm92aWRlci5qYXZhCkBAIC0wLDAgKzEsMTIzIEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUucHJvdmlkZXI7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5BZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUVkaXRpbmdEb21haW5JdGVtUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1MYWJlbFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtUHJvcGVydHlEZXNjcmlwdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtUHJvcGVydHlTb3VyY2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVN0cnVjdHVyZWRJdGVtQ29udGVudFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklUcmVlSXRlbUNvbnRlbnRQcm92aWRlcjsKKworLyoqCisgKiBUaGlzIGlzIHRoZSBpdGVtIHByb3ZpZGVyIGFkYXB0ZXIgZm9yIGEge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUuTm90fSBvYmplY3QuCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBOb3RJdGVtUHJvdmlkZXIKKwlleHRlbmRzIFVuYXJ5Qm9vbGVhbk9wZXJhdG9ySXRlbVByb3ZpZGVyCisJaW1wbGVtZW50cworCQlJRWRpdGluZ0RvbWFpbkl0ZW1Qcm92aWRlciwKKwkJSVN0cnVjdHVyZWRJdGVtQ29udGVudFByb3ZpZGVyLAorCQlJVHJlZUl0ZW1Db250ZW50UHJvdmlkZXIsCisJCUlJdGVtTGFiZWxQcm92aWRlciwKKwkJSUl0ZW1Qcm9wZXJ0eVNvdXJjZSB7CisJLyoqCisJICogVGhpcyBjb25zdHJ1Y3RzIGFuIGluc3RhbmNlIGZyb20gYSBmYWN0b3J5IGFuZCBhIG5vdGlmaWVyLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBOb3RJdGVtUHJvdmlkZXIoQWRhcHRlckZhY3RvcnkgYWRhcHRlckZhY3RvcnkpIHsKKwkJc3VwZXIoYWRhcHRlckZhY3RvcnkpOworCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyB0aGUgcHJvcGVydHkgZGVzY3JpcHRvcnMgZm9yIHRoZSBhZGFwdGVkIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBMaXN0PElJdGVtUHJvcGVydHlEZXNjcmlwdG9yPiBnZXRQcm9wZXJ0eURlc2NyaXB0b3JzKE9iamVjdCBvYmplY3QpIHsKKwkJaWYgKGl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzID09IG51bGwpIHsKKwkJCXN1cGVyLmdldFByb3BlcnR5RGVzY3JpcHRvcnMob2JqZWN0KTsKKworCQl9CisJCXJldHVybiBpdGVtUHJvcGVydHlEZXNjcmlwdG9yczsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgTm90LmdpZi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIE9iamVjdCBnZXRJbWFnZShPYmplY3Qgb2JqZWN0KSB7CisJCXJldHVybiBvdmVybGF5SW1hZ2Uob2JqZWN0LCBnZXRSZXNvdXJjZUxvY2F0b3IoKS5nZXRJbWFnZSgiZnVsbC9jdXN0b21vYmoxNi9Ob3QucG5nIikpOyAvLyROT04tTkxTLTEkCisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIHRoZSBsYWJlbCB0ZXh0IGZvciB0aGUgYWRhcHRlZCBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIFN0cmluZyBnZXRUZXh0KE9iamVjdCBvYmplY3QpIHsKKwkJcmV0dXJuICIhIjsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgdGhlIGxhYmVsIHRleHQgZm9yIHRoZSBhZGFwdGVkIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCS8vQE92ZXJyaWRlCisJcHVibGljIFN0cmluZyBnZXRUZXh0R2VuKE9iamVjdCBvYmplY3QpIHsKKwkJcmV0dXJuIGdldFN0cmluZygiX1VJX05vdF90eXBlIik7IC8vJE5PTi1OTFMtMSQKKwl9CisJCisJLyoqCisJICogVGhpcyBoYW5kbGVzIG1vZGVsIG5vdGlmaWNhdGlvbnMgYnkgY2FsbGluZyB7QGxpbmsgI3VwZGF0ZUNoaWxkcmVufSB0byB1cGRhdGUgYW55IGNhY2hlZAorCSAqIGNoaWxkcmVuIGFuZCBieSBjcmVhdGluZyBhIHZpZXdlciBub3RpZmljYXRpb24sIHdoaWNoIGl0IHBhc3NlcyB0byB7QGxpbmsgI2ZpcmVOb3RpZnlDaGFuZ2VkfS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBub3RpZnlDaGFuZ2VkKE5vdGlmaWNhdGlvbiBub3RpZmljYXRpb24pIHsKKwkJdXBkYXRlQ2hpbGRyZW4obm90aWZpY2F0aW9uKTsKKwkJc3VwZXIubm90aWZ5Q2hhbmdlZChub3RpZmljYXRpb24pOworCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmVkaXQuY29tbWFuZC5Db21tYW5kUGFyYW1ldGVyfXMgZGVzY3JpYmluZyB0aGUgY2hpbGRyZW4KKwkgKiB0aGF0IGNhbiBiZSBjcmVhdGVkIHVuZGVyIHRoaXMgb2JqZWN0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIGNvbGxlY3ROZXdDaGlsZERlc2NyaXB0b3JzKENvbGxlY3Rpb248T2JqZWN0PiBuZXdDaGlsZERlc2NyaXB0b3JzLCBPYmplY3Qgb2JqZWN0KSB7CisJCXN1cGVyLmNvbGxlY3ROZXdDaGlsZERlc2NyaXB0b3JzKG5ld0NoaWxkRGVzY3JpcHRvcnMsIG9iamVjdCk7CisJfQorCit9CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3ByZWRpY2F0ZS9wcm92aWRlci9Pckl0ZW1Qcm92aWRlci5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9wcmVkaWNhdGUvcHJvdmlkZXIvT3JJdGVtUHJvdmlkZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MDYzZmEwCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9wcmVkaWNhdGUvcHJvdmlkZXIvT3JJdGVtUHJvdmlkZXIuamF2YQpAQCAtMCwwICsxLDEyNCBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlLnByb3ZpZGVyOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOworaW1wb3J0IGphdmEudXRpbC5MaXN0OworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklFZGl0aW5nRG9tYWluSXRlbVByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtTGFiZWxQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbVByb3BlcnR5RGVzY3JpcHRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbVByb3BlcnR5U291cmNlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklTdHJ1Y3R1cmVkSXRlbUNvbnRlbnRQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JVHJlZUl0ZW1Db250ZW50UHJvdmlkZXI7CisKKy8qKgorICogVGhpcyBpcyB0aGUgaXRlbSBwcm92aWRlciBhZGFwdGVyIGZvciBhIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlLk9yfSBvYmplY3QuCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBPckl0ZW1Qcm92aWRlcgorCWV4dGVuZHMgTmFyeUJvb2xlYW5PcGVyYXRvckl0ZW1Qcm92aWRlcgorCWltcGxlbWVudHMKKwkJSUVkaXRpbmdEb21haW5JdGVtUHJvdmlkZXIsCisJCUlTdHJ1Y3R1cmVkSXRlbUNvbnRlbnRQcm92aWRlciwKKwkJSVRyZWVJdGVtQ29udGVudFByb3ZpZGVyLAorCQlJSXRlbUxhYmVsUHJvdmlkZXIsCisJCUlJdGVtUHJvcGVydHlTb3VyY2UgeworCS8qKgorCSAqIFRoaXMgY29uc3RydWN0cyBhbiBpbnN0YW5jZSBmcm9tIGEgZmFjdG9yeSBhbmQgYSBub3RpZmllci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgT3JJdGVtUHJvdmlkZXIoQWRhcHRlckZhY3RvcnkgYWRhcHRlckZhY3RvcnkpIHsKKwkJc3VwZXIoYWRhcHRlckZhY3RvcnkpOworCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyB0aGUgcHJvcGVydHkgZGVzY3JpcHRvcnMgZm9yIHRoZSBhZGFwdGVkIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBMaXN0PElJdGVtUHJvcGVydHlEZXNjcmlwdG9yPiBnZXRQcm9wZXJ0eURlc2NyaXB0b3JzKE9iamVjdCBvYmplY3QpIHsKKwkJaWYgKGl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzID09IG51bGwpIHsKKwkJCXN1cGVyLmdldFByb3BlcnR5RGVzY3JpcHRvcnMob2JqZWN0KTsKKworCQl9CisJCXJldHVybiBpdGVtUHJvcGVydHlEZXNjcmlwdG9yczsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgT3IuZ2lmLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgT2JqZWN0IGdldEltYWdlKE9iamVjdCBvYmplY3QpIHsKKwkJcmV0dXJuIG92ZXJsYXlJbWFnZShvYmplY3QsIGdldFJlc291cmNlTG9jYXRvcigpLmdldEltYWdlKCJmdWxsL2N1c3RvbW9iajE2L09yLnBuZyIpKTsgLy8kTk9OLU5MUy0xJAorCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyB0aGUgbGFiZWwgdGV4dCBmb3IgdGhlIGFkYXB0ZWQgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIFN0cmluZyBnZXRUZXh0KE9iamVjdCBvYmplY3QpIHsKKwkJcmV0dXJuIGdldFN0cmluZygiX1VJX09yX3R5cGUiKTsgLy8kTk9OLU5MUy0xJAorCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyB0aGUgbGFiZWwgdGV4dCBmb3IgdGhlIGFkYXB0ZWQgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJLy9AT3ZlcnJpZGUKKwlwdWJsaWMgU3RyaW5nIGdldFRleHRHZW4oT2JqZWN0IG9iamVjdCkgeworCQlyZXR1cm4gZ2V0U3RyaW5nKCJfVUlfT3JfdHlwZSIpOyAvLyROT04tTkxTLTEkCisJfQorCisJCisJLyoqCisJICogVGhpcyBoYW5kbGVzIG1vZGVsIG5vdGlmaWNhdGlvbnMgYnkgY2FsbGluZyB7QGxpbmsgI3VwZGF0ZUNoaWxkcmVufSB0byB1cGRhdGUgYW55IGNhY2hlZAorCSAqIGNoaWxkcmVuIGFuZCBieSBjcmVhdGluZyBhIHZpZXdlciBub3RpZmljYXRpb24sIHdoaWNoIGl0IHBhc3NlcyB0byB7QGxpbmsgI2ZpcmVOb3RpZnlDaGFuZ2VkfS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBub3RpZnlDaGFuZ2VkKE5vdGlmaWNhdGlvbiBub3RpZmljYXRpb24pIHsKKwkJdXBkYXRlQ2hpbGRyZW4obm90aWZpY2F0aW9uKTsKKwkJc3VwZXIubm90aWZ5Q2hhbmdlZChub3RpZmljYXRpb24pOworCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmVkaXQuY29tbWFuZC5Db21tYW5kUGFyYW1ldGVyfXMgZGVzY3JpYmluZyB0aGUgY2hpbGRyZW4KKwkgKiB0aGF0IGNhbiBiZSBjcmVhdGVkIHVuZGVyIHRoaXMgb2JqZWN0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIGNvbGxlY3ROZXdDaGlsZERlc2NyaXB0b3JzKENvbGxlY3Rpb248T2JqZWN0PiBuZXdDaGlsZERlc2NyaXB0b3JzLCBPYmplY3Qgb2JqZWN0KSB7CisJCXN1cGVyLmNvbGxlY3ROZXdDaGlsZERlc2NyaXB0b3JzKG5ld0NoaWxkRGVzY3JpcHRvcnMsIG9iamVjdCk7CisJfQorCit9CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3ByZWRpY2F0ZS9wcm92aWRlci9QcmVkaWNhdGVFeHByZXNzaW9uSXRlbVByb3ZpZGVyLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3ByZWRpY2F0ZS9wcm92aWRlci9QcmVkaWNhdGVFeHByZXNzaW9uSXRlbVByb3ZpZGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDI0ZjhlYQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvcHJlZGljYXRlL3Byb3ZpZGVyL1ByZWRpY2F0ZUV4cHJlc3Npb25JdGVtUHJvdmlkZXIuamF2YQpAQCAtMCwwICsxLDI3OSBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlLnByb3ZpZGVyOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOworaW1wb3J0IGphdmEudXRpbC5MaXN0OworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FU3RydWN0dXJhbEZlYXR1cmU7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUVkaXRpbmdEb21haW5JdGVtUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1MYWJlbFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtUHJvcGVydHlEZXNjcmlwdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtUHJvcGVydHlTb3VyY2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVN0cnVjdHVyZWRJdGVtQ29udGVudFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklUcmVlSXRlbUNvbnRlbnRQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5WaWV3ZXJOb3RpZmljYXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZS5QcmVkaWNhdGVFeHByZXNzaW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUuUHJlZGljYXRlRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlLlByZWRpY2F0ZVBhY2thZ2U7CisKKy8qKgorICogVGhpcyBpcyB0aGUgaXRlbSBwcm92aWRlciBhZGFwdGVyIGZvciBhIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlLlByZWRpY2F0ZUV4cHJlc3Npb259IG9iamVjdC4KKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIFByZWRpY2F0ZUV4cHJlc3Npb25JdGVtUHJvdmlkZXIKKwlleHRlbmRzIEJvb2xlYW5FeHByZXNzaW9uSXRlbVByb3ZpZGVyCisJaW1wbGVtZW50cworCQlJRWRpdGluZ0RvbWFpbkl0ZW1Qcm92aWRlciwKKwkJSVN0cnVjdHVyZWRJdGVtQ29udGVudFByb3ZpZGVyLAorCQlJVHJlZUl0ZW1Db250ZW50UHJvdmlkZXIsCisJCUlJdGVtTGFiZWxQcm92aWRlciwKKwkJSUl0ZW1Qcm9wZXJ0eVNvdXJjZSB7CisJLyoqCisJICogVGhpcyBjb25zdHJ1Y3RzIGFuIGluc3RhbmNlIGZyb20gYSBmYWN0b3J5IGFuZCBhIG5vdGlmaWVyLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBQcmVkaWNhdGVFeHByZXNzaW9uSXRlbVByb3ZpZGVyKEFkYXB0ZXJGYWN0b3J5IGFkYXB0ZXJGYWN0b3J5KSB7CisJCXN1cGVyKGFkYXB0ZXJGYWN0b3J5KTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgdGhlIHByb3BlcnR5IGRlc2NyaXB0b3JzIGZvciB0aGUgYWRhcHRlZCBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgTGlzdDxJSXRlbVByb3BlcnR5RGVzY3JpcHRvcj4gZ2V0UHJvcGVydHlEZXNjcmlwdG9ycyhPYmplY3Qgb2JqZWN0KSB7CisJCWlmIChpdGVtUHJvcGVydHlEZXNjcmlwdG9ycyA9PSBudWxsKSB7CisJCQlzdXBlci5nZXRQcm9wZXJ0eURlc2NyaXB0b3JzKG9iamVjdCk7CisKKwkJfQorCQlyZXR1cm4gaXRlbVByb3BlcnR5RGVzY3JpcHRvcnM7CisJfQorCisJLyoqCisJICogVGhpcyBzcGVjaWZpZXMgaG93IHRvIGltcGxlbWVudCB7QGxpbmsgI2dldENoaWxkcmVufSBhbmQgaXMgdXNlZCB0byBkZWR1Y2UgYW4gYXBwcm9wcmlhdGUgZmVhdHVyZSBmb3IgYW4KKwkgKiB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmVkaXQuY29tbWFuZC5BZGRDb21tYW5kfSwge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lZGl0LmNvbW1hbmQuUmVtb3ZlQ29tbWFuZH0gb3IKKwkgKiB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmVkaXQuY29tbWFuZC5Nb3ZlQ29tbWFuZH0gaW4ge0BsaW5rICNjcmVhdGVDb21tYW5kfS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgQ29sbGVjdGlvbjw/IGV4dGVuZHMgRVN0cnVjdHVyYWxGZWF0dXJlPiBnZXRDaGlsZHJlbkZlYXR1cmVzKE9iamVjdCBvYmplY3QpIHsKKwkJaWYgKGNoaWxkcmVuRmVhdHVyZXMgPT0gbnVsbCkgeworCQkJc3VwZXIuZ2V0Q2hpbGRyZW5GZWF0dXJlcyhvYmplY3QpOworCQkJY2hpbGRyZW5GZWF0dXJlcy5hZGQoUHJlZGljYXRlUGFja2FnZS5MaXRlcmFscy5QUkVESUNBVEVfRVhQUkVTU0lPTl9fUFJFRElDQVRFKTsKKwkJfQorCQlyZXR1cm4gY2hpbGRyZW5GZWF0dXJlczsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgRVN0cnVjdHVyYWxGZWF0dXJlIGdldENoaWxkRmVhdHVyZShPYmplY3Qgb2JqZWN0LCBPYmplY3QgY2hpbGQpIHsKKwkJLy8gQ2hlY2sgdGhlIHR5cGUgb2YgdGhlIHNwZWNpZmllZCBjaGlsZCBvYmplY3QgYW5kIHJldHVybiB0aGUgcHJvcGVyIGZlYXR1cmUgdG8gdXNlIGZvcgorCQkvLyBhZGRpbmcgKHNlZSB7QGxpbmsgQWRkQ29tbWFuZH0pIGl0IGFzIGEgY2hpbGQuCisKKwkJcmV0dXJuIHN1cGVyLmdldENoaWxkRmVhdHVyZShvYmplY3QsIGNoaWxkKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgUHJlZGljYXRlRXhwcmVzc2lvbi5naWYuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBPYmplY3QgZ2V0SW1hZ2UoT2JqZWN0IG9iamVjdCkgeworCQlyZXR1cm4gb3ZlcmxheUltYWdlKG9iamVjdCwgZ2V0UmVzb3VyY2VMb2NhdG9yKCkuZ2V0SW1hZ2UoImZ1bGwvY3VzdG9tb2JqMTYvUHJlZGljYXRlIikpOworCX0KKwkKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgUHJlZGljYXRlRXhwcmVzc2lvbi5naWYuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIE9iamVjdCBnZXRJbWFnZUdlbihPYmplY3Qgb2JqZWN0KSB7CisJCXJldHVybiBvdmVybGF5SW1hZ2Uob2JqZWN0LCBnZXRSZXNvdXJjZUxvY2F0b3IoKS5nZXRJbWFnZSgiZnVsbC9vYmoxNi9QcmVkaWNhdGVFeHByZXNzaW9uIikpOyAvLyROT04tTkxTLTEkCisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIHRoZSBsYWJlbCB0ZXh0IGZvciB0aGUgYWRhcHRlZCBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIFN0cmluZyBnZXRUZXh0KE9iamVjdCBvYmplY3QpIHsKKwkJcmV0dXJuICIoKSI7CisJfQorCQorCS8qKgorCSAqIFRoaXMgcmV0dXJucyB0aGUgbGFiZWwgdGV4dCBmb3IgdGhlIGFkYXB0ZWQgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJLy9AT3ZlcnJpZGUKKwlwdWJsaWMgU3RyaW5nIGdldFRleHRHZW4oT2JqZWN0IG9iamVjdCkgeworCQlyZXR1cm4gZ2V0U3RyaW5nKCJfVUlfUHJlZGljYXRlRXhwcmVzc2lvbl90eXBlIik7IC8vJE5PTi1OTFMtMSQKKwl9CisKKwkvKioKKwkgKiBUaGlzIGhhbmRsZXMgbW9kZWwgbm90aWZpY2F0aW9ucyBieSBjYWxsaW5nIHtAbGluayAjdXBkYXRlQ2hpbGRyZW59IHRvIHVwZGF0ZSBhbnkgY2FjaGVkCisJICogY2hpbGRyZW4gYW5kIGJ5IGNyZWF0aW5nIGEgdmlld2VyIG5vdGlmaWNhdGlvbiwgd2hpY2ggaXQgcGFzc2VzIHRvIHtAbGluayAjZmlyZU5vdGlmeUNoYW5nZWR9LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIG5vdGlmeUNoYW5nZWQoTm90aWZpY2F0aW9uIG5vdGlmaWNhdGlvbikgeworCQl1cGRhdGVDaGlsZHJlbihub3RpZmljYXRpb24pOworCisJCXN3aXRjaCAobm90aWZpY2F0aW9uLmdldEZlYXR1cmVJRChQcmVkaWNhdGVFeHByZXNzaW9uLmNsYXNzKSkgeworCQkJY2FzZSBQcmVkaWNhdGVQYWNrYWdlLlBSRURJQ0FURV9FWFBSRVNTSU9OX19QUkVESUNBVEU6CisJCQkJZmlyZU5vdGlmeUNoYW5nZWQobmV3IFZpZXdlck5vdGlmaWNhdGlvbihub3RpZmljYXRpb24sIG5vdGlmaWNhdGlvbi5nZXROb3RpZmllcigpLCB0cnVlLCBmYWxzZSkpOworCQkJCXJldHVybjsKKwkJfQorCQlzdXBlci5ub3RpZnlDaGFuZ2VkKG5vdGlmaWNhdGlvbik7CisJfQorCisJLyoqCisJICogVGhpcyBhZGRzIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuZWRpdC5jb21tYW5kLkNvbW1hbmRQYXJhbWV0ZXJ9cyBkZXNjcmliaW5nIHRoZSBjaGlsZHJlbgorCSAqIHRoYXQgY2FuIGJlIGNyZWF0ZWQgdW5kZXIgdGhpcyBvYmplY3QuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIGNvbGxlY3ROZXdDaGlsZERlc2NyaXB0b3JzKENvbGxlY3Rpb248T2JqZWN0PiBuZXdDaGlsZERlc2NyaXB0b3JzLCBPYmplY3Qgb2JqZWN0KSB7CisJCXN1cGVyLmNvbGxlY3ROZXdDaGlsZERlc2NyaXB0b3JzKG5ld0NoaWxkRGVzY3JpcHRvcnMsIG9iamVjdCk7CisKKwkJbmV3Q2hpbGREZXNjcmlwdG9ycy5hZGQKKwkJCShjcmVhdGVDaGlsZFBhcmFtZXRlcgorCQkJCShQcmVkaWNhdGVQYWNrYWdlLkxpdGVyYWxzLlBSRURJQ0FURV9FWFBSRVNTSU9OX19QUkVESUNBVEUsCisJCQkJIFByZWRpY2F0ZUZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZUFuZCgpKSk7CisKKwkJbmV3Q2hpbGREZXNjcmlwdG9ycy5hZGQKKwkJCShjcmVhdGVDaGlsZFBhcmFtZXRlcgorCQkJCShQcmVkaWNhdGVQYWNrYWdlLkxpdGVyYWxzLlBSRURJQ0FURV9FWFBSRVNTSU9OX19QUkVESUNBVEUsCisJCQkJIFByZWRpY2F0ZUZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZUZhbHNlKCkpKTsKKworCQluZXdDaGlsZERlc2NyaXB0b3JzLmFkZAorCQkJKGNyZWF0ZUNoaWxkUGFyYW1ldGVyCisJCQkJKFByZWRpY2F0ZVBhY2thZ2UuTGl0ZXJhbHMuUFJFRElDQVRFX0VYUFJFU1NJT05fX1BSRURJQ0FURSwKKwkJCQkgUHJlZGljYXRlRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlTm90KCkpKTsKKworCQluZXdDaGlsZERlc2NyaXB0b3JzLmFkZAorCQkJKGNyZWF0ZUNoaWxkUGFyYW1ldGVyCisJCQkJKFByZWRpY2F0ZVBhY2thZ2UuTGl0ZXJhbHMuUFJFRElDQVRFX0VYUFJFU1NJT05fX1BSRURJQ0FURSwKKwkJCQkgUHJlZGljYXRlRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlT3IoKSkpOworCisvLwkJbmV3Q2hpbGREZXNjcmlwdG9ycy5hZGQKKy8vCQkJKGNyZWF0ZUNoaWxkUGFyYW1ldGVyCisvLwkJCQkoUHJlZGljYXRlUGFja2FnZS5MaXRlcmFscy5QUkVESUNBVEVfRVhQUkVTU0lPTl9fUFJFRElDQVRFLAorLy8JCQkJIFByZWRpY2F0ZUZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZVByZWRpY2F0ZVJlZmVyZW5jZSgpKSk7CisKKwkJbmV3Q2hpbGREZXNjcmlwdG9ycy5hZGQKKwkJCShjcmVhdGVDaGlsZFBhcmFtZXRlcgorCQkJCShQcmVkaWNhdGVQYWNrYWdlLkxpdGVyYWxzLlBSRURJQ0FURV9FWFBSRVNTSU9OX19QUkVESUNBVEUsCisJCQkJIFByZWRpY2F0ZUZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZVRydWUoKSkpOworCisJCW5ld0NoaWxkRGVzY3JpcHRvcnMuYWRkCisJCQkoY3JlYXRlQ2hpbGRQYXJhbWV0ZXIKKwkJCQkoUHJlZGljYXRlUGFja2FnZS5MaXRlcmFscy5QUkVESUNBVEVfRVhQUkVTU0lPTl9fUFJFRElDQVRFLAorCQkJCSBQcmVkaWNhdGVGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVQcmVkaWNhdGVFeHByZXNzaW9uKCkpKTsKKworLy8JCW5ld0NoaWxkRGVzY3JpcHRvcnMuYWRkCisvLwkJCShjcmVhdGVDaGlsZFBhcmFtZXRlcgorLy8JCQkJKFByZWRpY2F0ZVBhY2thZ2UuTGl0ZXJhbHMuUFJFRElDQVRFX0VYUFJFU1NJT05fX1BSRURJQ0FURSwKKy8vCQkJCSBQcmVkaWNhdGVGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVJZGVudGlmaWFibGVQcmVkaWNhdGVFeHByZXNzaW9uKCkpKTsKKwkJCisKKwluZXdDaGlsZERlc2NyaXB0b3JzLmFkZAorCQkoY3JlYXRlQ2hpbGRQYXJhbWV0ZXIKKwkJCShQcmVkaWNhdGVQYWNrYWdlLkxpdGVyYWxzLlBSRURJQ0FURV9FWFBSRVNTSU9OX19QUkVESUNBVEUsCisJCQkgUHJlZGljYXRlRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlRWxhcHNlZFRpbWVUZXN0KCkpKTsKKwkJCisJfSAvLyBjb2xsZWN0TmV3Q2hpbGREZXNjcmlwdG9ycworCisJLyoqCisJICogVGhpcyBhZGRzIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuZWRpdC5jb21tYW5kLkNvbW1hbmRQYXJhbWV0ZXJ9cyBkZXNjcmliaW5nIHRoZSBjaGlsZHJlbgorCSAqIHRoYXQgY2FuIGJlIGNyZWF0ZWQgdW5kZXIgdGhpcyBvYmplY3QuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJLy9AT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgdm9pZCBjb2xsZWN0TmV3Q2hpbGREZXNjcmlwdG9yc0dlbihDb2xsZWN0aW9uPE9iamVjdD4gbmV3Q2hpbGREZXNjcmlwdG9ycywgT2JqZWN0IG9iamVjdCkgeworCQlzdXBlci5jb2xsZWN0TmV3Q2hpbGREZXNjcmlwdG9ycyhuZXdDaGlsZERlc2NyaXB0b3JzLCBvYmplY3QpOworCisJCW5ld0NoaWxkRGVzY3JpcHRvcnMuYWRkCisJCQkoY3JlYXRlQ2hpbGRQYXJhbWV0ZXIKKwkJCQkoUHJlZGljYXRlUGFja2FnZS5MaXRlcmFscy5QUkVESUNBVEVfRVhQUkVTU0lPTl9fUFJFRElDQVRFLAorCQkJCSBQcmVkaWNhdGVGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVBbmQoKSkpOworCisJCW5ld0NoaWxkRGVzY3JpcHRvcnMuYWRkCisJCQkoY3JlYXRlQ2hpbGRQYXJhbWV0ZXIKKwkJCQkoUHJlZGljYXRlUGFja2FnZS5MaXRlcmFscy5QUkVESUNBVEVfRVhQUkVTU0lPTl9fUFJFRElDQVRFLAorCQkJCSBQcmVkaWNhdGVGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVGYWxzZSgpKSk7CisKKwkJbmV3Q2hpbGREZXNjcmlwdG9ycy5hZGQKKwkJCShjcmVhdGVDaGlsZFBhcmFtZXRlcgorCQkJCShQcmVkaWNhdGVQYWNrYWdlLkxpdGVyYWxzLlBSRURJQ0FURV9FWFBSRVNTSU9OX19QUkVESUNBVEUsCisJCQkJIFByZWRpY2F0ZUZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZU5vdCgpKSk7CisKKwkJbmV3Q2hpbGREZXNjcmlwdG9ycy5hZGQKKwkJCShjcmVhdGVDaGlsZFBhcmFtZXRlcgorCQkJCShQcmVkaWNhdGVQYWNrYWdlLkxpdGVyYWxzLlBSRURJQ0FURV9FWFBSRVNTSU9OX19QUkVESUNBVEUsCisJCQkJIFByZWRpY2F0ZUZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZU9yKCkpKTsKKworCQluZXdDaGlsZERlc2NyaXB0b3JzLmFkZAorCQkJKGNyZWF0ZUNoaWxkUGFyYW1ldGVyCisJCQkJKFByZWRpY2F0ZVBhY2thZ2UuTGl0ZXJhbHMuUFJFRElDQVRFX0VYUFJFU1NJT05fX1BSRURJQ0FURSwKKwkJCQkgUHJlZGljYXRlRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlUHJlZGljYXRlUmVmZXJlbmNlKCkpKTsKKworCQluZXdDaGlsZERlc2NyaXB0b3JzLmFkZAorCQkJKGNyZWF0ZUNoaWxkUGFyYW1ldGVyCisJCQkJKFByZWRpY2F0ZVBhY2thZ2UuTGl0ZXJhbHMuUFJFRElDQVRFX0VYUFJFU1NJT05fX1BSRURJQ0FURSwKKwkJCQkgUHJlZGljYXRlRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlVHJ1ZSgpKSk7CisKKwkJbmV3Q2hpbGREZXNjcmlwdG9ycy5hZGQKKwkJCShjcmVhdGVDaGlsZFBhcmFtZXRlcgorCQkJCShQcmVkaWNhdGVQYWNrYWdlLkxpdGVyYWxzLlBSRURJQ0FURV9FWFBSRVNTSU9OX19QUkVESUNBVEUsCisJCQkJIFByZWRpY2F0ZUZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZVByZWRpY2F0ZUV4cHJlc3Npb24oKSkpOworCisJCW5ld0NoaWxkRGVzY3JpcHRvcnMuYWRkCisJCQkoY3JlYXRlQ2hpbGRQYXJhbWV0ZXIKKwkJCQkoUHJlZGljYXRlUGFja2FnZS5MaXRlcmFscy5QUkVESUNBVEVfRVhQUkVTU0lPTl9fUFJFRElDQVRFLAorCQkJCSBQcmVkaWNhdGVGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVJZGVudGlmaWFibGVQcmVkaWNhdGVFeHByZXNzaW9uKCkpKTsKKworCQluZXdDaGlsZERlc2NyaXB0b3JzLmFkZAorCQkJKGNyZWF0ZUNoaWxkUGFyYW1ldGVyCisJCQkJKFByZWRpY2F0ZVBhY2thZ2UuTGl0ZXJhbHMuUFJFRElDQVRFX0VYUFJFU1NJT05fX1BSRURJQ0FURSwKKwkJCQkgUHJlZGljYXRlRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlRWxhcHNlZFRpbWVUZXN0KCkpKTsKKwl9CisJCit9IC8vIFByZWRpY2F0ZUV4cHJlc3Npb25JdGVtUHJvdmlkZXIKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvcHJlZGljYXRlL3Byb3ZpZGVyL1ByZWRpY2F0ZUl0ZW1Qcm92aWRlci5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9wcmVkaWNhdGUvcHJvdmlkZXIvUHJlZGljYXRlSXRlbVByb3ZpZGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWIwYzAzZgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvcHJlZGljYXRlL3Byb3ZpZGVyL1ByZWRpY2F0ZUl0ZW1Qcm92aWRlci5qYXZhCkBAIC0wLDAgKzEsMTQ1IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUucHJvdmlkZXI7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5BZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlJlc291cmNlTG9jYXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JQ2hpbGRDcmVhdGlvbkV4dGVuZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklFZGl0aW5nRG9tYWluSXRlbVByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtTGFiZWxQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbVByb3BlcnR5RGVzY3JpcHRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbVByb3BlcnR5U291cmNlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklTdHJ1Y3R1cmVkSXRlbUNvbnRlbnRQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JVHJlZUl0ZW1Db250ZW50UHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSXRlbVByb3ZpZGVyQWRhcHRlcjsKKworLyoqCisgKiBUaGlzIGlzIHRoZSBpdGVtIHByb3ZpZGVyIGFkYXB0ZXIgZm9yIGEge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUuUHJlZGljYXRlfSBvYmplY3QuCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBQcmVkaWNhdGVJdGVtUHJvdmlkZXIKKwlleHRlbmRzIEl0ZW1Qcm92aWRlckFkYXB0ZXIKKwlpbXBsZW1lbnRzCisJCUlFZGl0aW5nRG9tYWluSXRlbVByb3ZpZGVyLAorCQlJU3RydWN0dXJlZEl0ZW1Db250ZW50UHJvdmlkZXIsCisJCUlUcmVlSXRlbUNvbnRlbnRQcm92aWRlciwKKwkJSUl0ZW1MYWJlbFByb3ZpZGVyLAorCQlJSXRlbVByb3BlcnR5U291cmNlIHsKKwkvKioKKwkgKiBUaGlzIGNvbnN0cnVjdHMgYW4gaW5zdGFuY2UgZnJvbSBhIGZhY3RvcnkgYW5kIGEgbm90aWZpZXIuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFByZWRpY2F0ZUl0ZW1Qcm92aWRlcihBZGFwdGVyRmFjdG9yeSBhZGFwdGVyRmFjdG9yeSkgeworCQlzdXBlcihhZGFwdGVyRmFjdG9yeSk7CisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIHRoZSBwcm9wZXJ0eSBkZXNjcmlwdG9ycyBmb3IgdGhlIGFkYXB0ZWQgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIExpc3Q8SUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I+IGdldFByb3BlcnR5RGVzY3JpcHRvcnMoT2JqZWN0IG9iamVjdCkgeworCQlpZiAoaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMgPT0gbnVsbCkgeworCQkJc3VwZXIuZ2V0UHJvcGVydHlEZXNjcmlwdG9ycyhvYmplY3QpOworCisJCX0KKwkJcmV0dXJuIGl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzOworCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyBQcmVkaWNhdGUuZ2lmLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgT2JqZWN0IGdldEltYWdlKE9iamVjdCBvYmplY3QpIHsKKwkJcmV0dXJuIG92ZXJsYXlJbWFnZShvYmplY3QsIGdldFJlc291cmNlTG9jYXRvcigpLmdldEltYWdlKCJmdWxsL2N1c3RvbW9iajE2L1ByZWRpY2F0ZSIpKTsKKwl9CisJCisJLyoqCisJICogVGhpcyByZXR1cm5zIFByZWRpY2F0ZS5naWYuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIE9iamVjdCBnZXRJbWFnZUdlbihPYmplY3Qgb2JqZWN0KSB7CisJCXJldHVybiBvdmVybGF5SW1hZ2Uob2JqZWN0LCBnZXRSZXNvdXJjZUxvY2F0b3IoKS5nZXRJbWFnZSgiZnVsbC9vYmoxNi9QcmVkaWNhdGUiKSk7IC8vJE5PTi1OTFMtMSQKKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgdGhlIGxhYmVsIHRleHQgZm9yIHRoZSBhZGFwdGVkIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBTdHJpbmcgZ2V0VGV4dChPYmplY3Qgb2JqZWN0KSB7CisJCXJldHVybiBnZXRTdHJpbmcoIl9VSV9QcmVkaWNhdGVfdHlwZSIpOyAvLyROT04tTkxTLTEkCisJfQorCisJLyoqCisJICogVGhpcyBoYW5kbGVzIG1vZGVsIG5vdGlmaWNhdGlvbnMgYnkgY2FsbGluZyB7QGxpbmsgI3VwZGF0ZUNoaWxkcmVufSB0byB1cGRhdGUgYW55IGNhY2hlZAorCSAqIGNoaWxkcmVuIGFuZCBieSBjcmVhdGluZyBhIHZpZXdlciBub3RpZmljYXRpb24sIHdoaWNoIGl0IHBhc3NlcyB0byB7QGxpbmsgI2ZpcmVOb3RpZnlDaGFuZ2VkfS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBub3RpZnlDaGFuZ2VkKE5vdGlmaWNhdGlvbiBub3RpZmljYXRpb24pIHsKKwkJdXBkYXRlQ2hpbGRyZW4obm90aWZpY2F0aW9uKTsKKwkJc3VwZXIubm90aWZ5Q2hhbmdlZChub3RpZmljYXRpb24pOworCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmVkaXQuY29tbWFuZC5Db21tYW5kUGFyYW1ldGVyfXMgZGVzY3JpYmluZyB0aGUgY2hpbGRyZW4KKwkgKiB0aGF0IGNhbiBiZSBjcmVhdGVkIHVuZGVyIHRoaXMgb2JqZWN0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIGNvbGxlY3ROZXdDaGlsZERlc2NyaXB0b3JzKENvbGxlY3Rpb248T2JqZWN0PiBuZXdDaGlsZERlc2NyaXB0b3JzLCBPYmplY3Qgb2JqZWN0KSB7CisJCXN1cGVyLmNvbGxlY3ROZXdDaGlsZERlc2NyaXB0b3JzKG5ld0NoaWxkRGVzY3JpcHRvcnMsIG9iamVjdCk7CisJfQorCisJLyoqCisJICogUmV0dXJuIHRoZSByZXNvdXJjZSBsb2NhdG9yIGZvciB0aGlzIGl0ZW0gcHJvdmlkZXIncyByZXNvdXJjZXMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIFJlc291cmNlTG9jYXRvciBnZXRSZXNvdXJjZUxvY2F0b3IoKSB7CisJCXJldHVybiAoKElDaGlsZENyZWF0aW9uRXh0ZW5kZXIpYWRhcHRlckZhY3RvcnkpLmdldFJlc291cmNlTG9jYXRvcigpOworCX0KKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSXRlbVByb3ZpZGVyQWRhcHRlciNpc1dyYXBwaW5nTmVlZGVkKGphdmEubGFuZy5PYmplY3QpCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIGJvb2xlYW4gaXNXcmFwcGluZ05lZWRlZChPYmplY3Qgb2JqZWN0KSB7CisJCXJldHVybiB0cnVlOworCX0KKworCQorfSAvLyAKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvcHJlZGljYXRlL3Byb3ZpZGVyL1ByZWRpY2F0ZUl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5LmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3ByZWRpY2F0ZS9wcm92aWRlci9QcmVkaWNhdGVJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY1NjMwNzMKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3ByZWRpY2F0ZS9wcm92aWRlci9QcmVkaWNhdGVJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeS5qYXZhCkBAIC0wLDAgKzEsNDQxIEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUucHJvdmlkZXI7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LkFkYXB0ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5SZXNvdXJjZUxvY2F0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQuZG9tYWluLkVkaXRpbmdEb21haW47CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuQ2hhbmdlTm90aWZpZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuQ2hpbGRDcmVhdGlvbkV4dGVuZGVyTWFuYWdlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5Db21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkNvbXBvc2VkQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUNoYW5nZU5vdGlmaWVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklDaGlsZENyZWF0aW9uRXh0ZW5kZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSURpc3Bvc2FibGU7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUVkaXRpbmdEb21haW5JdGVtUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1MYWJlbFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtUHJvcGVydHlTb3VyY2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSU5vdGlmeUNoYW5nZWRMaXN0ZW5lcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JU3RydWN0dXJlZEl0ZW1Db250ZW50UHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVRyZWVJdGVtQ29udGVudFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24ucHJvdmlkZXIuQ29yZUVkaXRQbHVnaW47CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZS5QcmVkaWNhdGVQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUudXRpbC5QcmVkaWNhdGVBZGFwdGVyRmFjdG9yeTsKKworLyoqCisgKiBUaGlzIGlzIHRoZSBmYWN0b3J5IHRoYXQgaXMgdXNlZCB0byBwcm92aWRlIHRoZSBpbnRlcmZhY2VzIG5lZWRlZCB0byBzdXBwb3J0IFZpZXdlcnMuCisgKiBUaGUgYWRhcHRlcnMgZ2VuZXJhdGVkIGJ5IHRoaXMgZmFjdG9yeSBjb252ZXJ0IEVNRiBhZGFwdGVyIG5vdGlmaWNhdGlvbnMgaW50byBjYWxscyB0byB7QGxpbmsgI2ZpcmVOb3RpZnlDaGFuZ2VkIGZpcmVOb3RpZnlDaGFuZ2VkfS4KKyAqIFRoZSBhZGFwdGVycyBhbHNvIHN1cHBvcnQgRWNsaXBzZSBwcm9wZXJ0eSBzaGVldHMuCisgKiBOb3RlIHRoYXQgbW9zdCBvZiB0aGUgYWRhcHRlcnMgYXJlIHNoYXJlZCBhbW9uZyBtdWx0aXBsZSBpbnN0YW5jZXMuCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBQcmVkaWNhdGVJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSBleHRlbmRzIFByZWRpY2F0ZUFkYXB0ZXJGYWN0b3J5IGltcGxlbWVudHMgQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSwgSUNoYW5nZU5vdGlmaWVyLCBJRGlzcG9zYWJsZSwgSUNoaWxkQ3JlYXRpb25FeHRlbmRlciB7CisJLyoqCisJICogVGhpcyBrZWVwcyB0cmFjayBvZiB0aGUgcm9vdCBhZGFwdGVyIGZhY3RvcnkgdGhhdCBkZWxlZ2F0ZXMgdG8gdGhpcyBhZGFwdGVyIGZhY3RvcnkuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIENvbXBvc2VkQWRhcHRlckZhY3RvcnkgcGFyZW50QWRhcHRlckZhY3Rvcnk7CisKKwkvKioKKwkgKiBUaGlzIGlzIHVzZWQgdG8gaW1wbGVtZW50IHtAbGluayBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JQ2hhbmdlTm90aWZpZXJ9LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBJQ2hhbmdlTm90aWZpZXIgY2hhbmdlTm90aWZpZXIgPSBuZXcgQ2hhbmdlTm90aWZpZXIoKTsKKworCS8qKgorCSAqIFRoaXMgaGVscHMgbWFuYWdlIHRoZSBjaGlsZCBjcmVhdGlvbiBleHRlbmRlcnMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIENoaWxkQ3JlYXRpb25FeHRlbmRlck1hbmFnZXIgY2hpbGRDcmVhdGlvbkV4dGVuZGVyTWFuYWdlciA9IG5ldyBDaGlsZENyZWF0aW9uRXh0ZW5kZXJNYW5hZ2VyKENvcmVFZGl0UGx1Z2luLklOU1RBTkNFLCBQcmVkaWNhdGVQYWNrYWdlLmVOU19VUkkpOworCisJLyoqCisJICogVGhpcyBrZWVwcyB0cmFjayBvZiBhbGwgdGhlIHN1cHBvcnRlZCB0eXBlcyBjaGVja2VkIGJ5IHtAbGluayAjaXNGYWN0b3J5Rm9yVHlwZSBpc0ZhY3RvcnlGb3JUeXBlfS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgQ29sbGVjdGlvbjxPYmplY3Q+IHN1cHBvcnRlZFR5cGVzID0gbmV3IEFycmF5TGlzdDxPYmplY3Q+KCk7CisKKwkvKioKKwkgKiBUaGlzIGNvbnN0cnVjdHMgYW4gaW5zdGFuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFByZWRpY2F0ZUl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5KCkgeworCQlzdXBwb3J0ZWRUeXBlcy5hZGQoSUVkaXRpbmdEb21haW5JdGVtUHJvdmlkZXIuY2xhc3MpOworCQlzdXBwb3J0ZWRUeXBlcy5hZGQoSVN0cnVjdHVyZWRJdGVtQ29udGVudFByb3ZpZGVyLmNsYXNzKTsKKwkJc3VwcG9ydGVkVHlwZXMuYWRkKElUcmVlSXRlbUNvbnRlbnRQcm92aWRlci5jbGFzcyk7CisJCXN1cHBvcnRlZFR5cGVzLmFkZChJSXRlbUxhYmVsUHJvdmlkZXIuY2xhc3MpOworCQlzdXBwb3J0ZWRUeXBlcy5hZGQoSUl0ZW1Qcm9wZXJ0eVNvdXJjZS5jbGFzcyk7CisJfQorCisJLyoqCisJICogVGhpcyBrZWVwcyB0cmFjayBvZiB0aGUgb25lIGFkYXB0ZXIgdXNlZCBmb3IgYWxsIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlLkFuZH0gaW5zdGFuY2VzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBBbmRJdGVtUHJvdmlkZXIgYW5kSXRlbVByb3ZpZGVyOworCisJLyoqCisJICogVGhpcyBjcmVhdGVzIGFuIGFkYXB0ZXIgZm9yIGEge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUuQW5kfS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVBbmRBZGFwdGVyKCkgeworCQlpZiAoYW5kSXRlbVByb3ZpZGVyID09IG51bGwpIHsKKwkJCWFuZEl0ZW1Qcm92aWRlciA9IG5ldyBBbmRJdGVtUHJvdmlkZXIodGhpcyk7CisJCX0KKworCQlyZXR1cm4gYW5kSXRlbVByb3ZpZGVyOworCX0KKworCS8qKgorCSAqIFRoaXMga2VlcHMgdHJhY2sgb2YgdGhlIG9uZSBhZGFwdGVyIHVzZWQgZm9yIGFsbCB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZS5GYWxzZX0gaW5zdGFuY2VzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBGYWxzZUl0ZW1Qcm92aWRlciBmYWxzZUl0ZW1Qcm92aWRlcjsKKworCS8qKgorCSAqIFRoaXMgY3JlYXRlcyBhbiBhZGFwdGVyIGZvciBhIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlLkZhbHNlfS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVGYWxzZUFkYXB0ZXIoKSB7CisJCWlmIChmYWxzZUl0ZW1Qcm92aWRlciA9PSBudWxsKSB7CisJCQlmYWxzZUl0ZW1Qcm92aWRlciA9IG5ldyBGYWxzZUl0ZW1Qcm92aWRlcih0aGlzKTsKKwkJfQorCisJCXJldHVybiBmYWxzZUl0ZW1Qcm92aWRlcjsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGtlZXBzIHRyYWNrIG9mIHRoZSBvbmUgYWRhcHRlciB1c2VkIGZvciBhbGwge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUuTm90fSBpbnN0YW5jZXMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIE5vdEl0ZW1Qcm92aWRlciBub3RJdGVtUHJvdmlkZXI7CisKKwkvKioKKwkgKiBUaGlzIGNyZWF0ZXMgYW4gYWRhcHRlciBmb3IgYSB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZS5Ob3R9LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZU5vdEFkYXB0ZXIoKSB7CisJCWlmIChub3RJdGVtUHJvdmlkZXIgPT0gbnVsbCkgeworCQkJbm90SXRlbVByb3ZpZGVyID0gbmV3IE5vdEl0ZW1Qcm92aWRlcih0aGlzKTsKKwkJfQorCisJCXJldHVybiBub3RJdGVtUHJvdmlkZXI7CisJfQorCisJLyoqCisJICogVGhpcyBrZWVwcyB0cmFjayBvZiB0aGUgb25lIGFkYXB0ZXIgdXNlZCBmb3IgYWxsIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlLk9yfSBpbnN0YW5jZXMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIE9ySXRlbVByb3ZpZGVyIG9ySXRlbVByb3ZpZGVyOworCisJLyoqCisJICogVGhpcyBjcmVhdGVzIGFuIGFkYXB0ZXIgZm9yIGEge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUuT3J9LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZU9yQWRhcHRlcigpIHsKKwkJaWYgKG9ySXRlbVByb3ZpZGVyID09IG51bGwpIHsKKwkJCW9ySXRlbVByb3ZpZGVyID0gbmV3IE9ySXRlbVByb3ZpZGVyKHRoaXMpOworCQl9CisKKwkJcmV0dXJuIG9ySXRlbVByb3ZpZGVyOworCX0KKworCS8qKgorCSAqIFRoaXMga2VlcHMgdHJhY2sgb2YgdGhlIG9uZSBhZGFwdGVyIHVzZWQgZm9yIGFsbCB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZS5QcmVkaWNhdGVSZWZlcmVuY2V9IGluc3RhbmNlcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgUHJlZGljYXRlUmVmZXJlbmNlSXRlbVByb3ZpZGVyIHByZWRpY2F0ZVJlZmVyZW5jZUl0ZW1Qcm92aWRlcjsKKworCS8qKgorCSAqIFRoaXMgY3JlYXRlcyBhbiBhZGFwdGVyIGZvciBhIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlLlByZWRpY2F0ZVJlZmVyZW5jZX0uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlUHJlZGljYXRlUmVmZXJlbmNlQWRhcHRlcigpIHsKKwkJaWYgKHByZWRpY2F0ZVJlZmVyZW5jZUl0ZW1Qcm92aWRlciA9PSBudWxsKSB7CisJCQlwcmVkaWNhdGVSZWZlcmVuY2VJdGVtUHJvdmlkZXIgPSBuZXcgUHJlZGljYXRlUmVmZXJlbmNlSXRlbVByb3ZpZGVyKHRoaXMpOworCQl9CisKKwkJcmV0dXJuIHByZWRpY2F0ZVJlZmVyZW5jZUl0ZW1Qcm92aWRlcjsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGtlZXBzIHRyYWNrIG9mIHRoZSBvbmUgYWRhcHRlciB1c2VkIGZvciBhbGwge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUuVHJ1ZX0gaW5zdGFuY2VzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBUcnVlSXRlbVByb3ZpZGVyIHRydWVJdGVtUHJvdmlkZXI7CisKKwkvKioKKwkgKiBUaGlzIGNyZWF0ZXMgYW4gYWRhcHRlciBmb3IgYSB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZS5UcnVlfS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVUcnVlQWRhcHRlcigpIHsKKwkJaWYgKHRydWVJdGVtUHJvdmlkZXIgPT0gbnVsbCkgeworCQkJdHJ1ZUl0ZW1Qcm92aWRlciA9IG5ldyBUcnVlSXRlbVByb3ZpZGVyKHRoaXMpOworCQl9CisKKwkJcmV0dXJuIHRydWVJdGVtUHJvdmlkZXI7CisJfQorCisJLyoqCisJICogVGhpcyBrZWVwcyB0cmFjayBvZiB0aGUgb25lIGFkYXB0ZXIgdXNlZCBmb3IgYWxsIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlLlByZWRpY2F0ZUV4cHJlc3Npb259IGluc3RhbmNlcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgUHJlZGljYXRlRXhwcmVzc2lvbkl0ZW1Qcm92aWRlciBwcmVkaWNhdGVFeHByZXNzaW9uSXRlbVByb3ZpZGVyOworCisJLyoqCisJICogVGhpcyBjcmVhdGVzIGFuIGFkYXB0ZXIgZm9yIGEge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUuUHJlZGljYXRlRXhwcmVzc2lvbn0uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlUHJlZGljYXRlRXhwcmVzc2lvbkFkYXB0ZXIoKSB7CisJCWlmIChwcmVkaWNhdGVFeHByZXNzaW9uSXRlbVByb3ZpZGVyID09IG51bGwpIHsKKwkJCXByZWRpY2F0ZUV4cHJlc3Npb25JdGVtUHJvdmlkZXIgPSBuZXcgUHJlZGljYXRlRXhwcmVzc2lvbkl0ZW1Qcm92aWRlcih0aGlzKTsKKwkJfQorCisJCXJldHVybiBwcmVkaWNhdGVFeHByZXNzaW9uSXRlbVByb3ZpZGVyOworCX0KKworCS8qKgorCSAqIFRoaXMga2VlcHMgdHJhY2sgb2YgdGhlIG9uZSBhZGFwdGVyIHVzZWQgZm9yIGFsbCB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZS5JZGVudGlmaWFibGVQcmVkaWNhdGVFeHByZXNzaW9ufSBpbnN0YW5jZXMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIElkZW50aWZpYWJsZVByZWRpY2F0ZUV4cHJlc3Npb25JdGVtUHJvdmlkZXIgaWRlbnRpZmlhYmxlUHJlZGljYXRlRXhwcmVzc2lvbkl0ZW1Qcm92aWRlcjsKKworCS8qKgorCSAqIFRoaXMgY3JlYXRlcyBhbiBhZGFwdGVyIGZvciBhIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlLklkZW50aWZpYWJsZVByZWRpY2F0ZUV4cHJlc3Npb259LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZUlkZW50aWZpYWJsZVByZWRpY2F0ZUV4cHJlc3Npb25BZGFwdGVyKCkgeworCQlpZiAoaWRlbnRpZmlhYmxlUHJlZGljYXRlRXhwcmVzc2lvbkl0ZW1Qcm92aWRlciA9PSBudWxsKSB7CisJCQlpZGVudGlmaWFibGVQcmVkaWNhdGVFeHByZXNzaW9uSXRlbVByb3ZpZGVyID0gbmV3IElkZW50aWZpYWJsZVByZWRpY2F0ZUV4cHJlc3Npb25JdGVtUHJvdmlkZXIodGhpcyk7CisJCX0KKworCQlyZXR1cm4gaWRlbnRpZmlhYmxlUHJlZGljYXRlRXhwcmVzc2lvbkl0ZW1Qcm92aWRlcjsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGtlZXBzIHRyYWNrIG9mIHRoZSBvbmUgYWRhcHRlciB1c2VkIGZvciBhbGwge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUuRWxhcHNlZFRpbWVUZXN0fSBpbnN0YW5jZXMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIEVsYXBzZWRUaW1lVGVzdEl0ZW1Qcm92aWRlciBlbGFwc2VkVGltZVRlc3RJdGVtUHJvdmlkZXI7CisKKwkvKioKKwkgKiBUaGlzIGNyZWF0ZXMgYW4gYWRhcHRlciBmb3IgYSB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZS5FbGFwc2VkVGltZVRlc3R9LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZUVsYXBzZWRUaW1lVGVzdEFkYXB0ZXIoKSB7CisJCWlmIChlbGFwc2VkVGltZVRlc3RJdGVtUHJvdmlkZXIgPT0gbnVsbCkgeworCQkJZWxhcHNlZFRpbWVUZXN0SXRlbVByb3ZpZGVyID0gbmV3IEVsYXBzZWRUaW1lVGVzdEl0ZW1Qcm92aWRlcih0aGlzKTsKKwkJfQorCisJCXJldHVybiBlbGFwc2VkVGltZVRlc3RJdGVtUHJvdmlkZXI7CisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIHRoZSByb290IGFkYXB0ZXIgZmFjdG9yeSB0aGF0IGNvbnRhaW5zIHRoaXMgZmFjdG9yeS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSBnZXRSb290QWRhcHRlckZhY3RvcnkoKSB7CisJCXJldHVybiBwYXJlbnRBZGFwdGVyRmFjdG9yeSA9PSBudWxsID8gdGhpcyA6IHBhcmVudEFkYXB0ZXJGYWN0b3J5LmdldFJvb3RBZGFwdGVyRmFjdG9yeSgpOworCX0KKworCS8qKgorCSAqIFRoaXMgc2V0cyB0aGUgY29tcG9zZWQgYWRhcHRlciBmYWN0b3J5IHRoYXQgY29udGFpbnMgdGhpcyBmYWN0b3J5LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIHNldFBhcmVudEFkYXB0ZXJGYWN0b3J5KENvbXBvc2VkQWRhcHRlckZhY3RvcnkgcGFyZW50QWRhcHRlckZhY3RvcnkpIHsKKwkJdGhpcy5wYXJlbnRBZGFwdGVyRmFjdG9yeSA9IHBhcmVudEFkYXB0ZXJGYWN0b3J5OworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBib29sZWFuIGlzRmFjdG9yeUZvclR5cGUoT2JqZWN0IHR5cGUpIHsKKwkJcmV0dXJuIHN1cHBvcnRlZFR5cGVzLmNvbnRhaW5zKHR5cGUpIHx8IHN1cGVyLmlzRmFjdG9yeUZvclR5cGUodHlwZSk7CisJfQorCisJLyoqCisJICogVGhpcyBpbXBsZW1lbnRhdGlvbiBzdWJzdGl0dXRlcyB0aGUgZmFjdG9yeSBpdHNlbGYgYXMgdGhlIGtleSBmb3IgdGhlIGFkYXB0ZXIuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIEFkYXB0ZXIgYWRhcHQoTm90aWZpZXIgbm90aWZpZXIsIE9iamVjdCB0eXBlKSB7CisJCXJldHVybiBzdXBlci5hZGFwdChub3RpZmllciwgdGhpcyk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQFN1cHByZXNzV2FybmluZ3MoInVuY2hlY2tlZCIpCisJQE92ZXJyaWRlCisJcHVibGljIE9iamVjdCBhZGFwdChPYmplY3Qgb2JqZWN0LCBPYmplY3QgdHlwZSkgeworCQlpZiAoaXNGYWN0b3J5Rm9yVHlwZSh0eXBlKSkgeworCQkJT2JqZWN0IGFkYXB0ZXIgPSBzdXBlci5hZGFwdChvYmplY3QsIHR5cGUpOworCQkJaWYgKCEodHlwZSBpbnN0YW5jZW9mIENsYXNzPD8+KSB8fCAoKChDbGFzczw/Pil0eXBlKS5pc0luc3RhbmNlKGFkYXB0ZXIpKSkgeworCQkJCXJldHVybiBhZGFwdGVyOworCQkJfQorCQl9CisKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIExpc3Q8SUNoaWxkQ3JlYXRpb25FeHRlbmRlcj4gZ2V0Q2hpbGRDcmVhdGlvbkV4dGVuZGVycygpIHsKKwkJcmV0dXJuIGNoaWxkQ3JlYXRpb25FeHRlbmRlck1hbmFnZXIuZ2V0Q2hpbGRDcmVhdGlvbkV4dGVuZGVycygpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBDb2xsZWN0aW9uPD8+IGdldE5ld0NoaWxkRGVzY3JpcHRvcnMoT2JqZWN0IG9iamVjdCwgRWRpdGluZ0RvbWFpbiBlZGl0aW5nRG9tYWluKSB7CisJCXJldHVybiBjaGlsZENyZWF0aW9uRXh0ZW5kZXJNYW5hZ2VyLmdldE5ld0NoaWxkRGVzY3JpcHRvcnMob2JqZWN0LCBlZGl0aW5nRG9tYWluKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgUmVzb3VyY2VMb2NhdG9yIGdldFJlc291cmNlTG9jYXRvcigpIHsKKwkJcmV0dXJuIGNoaWxkQ3JlYXRpb25FeHRlbmRlck1hbmFnZXI7CisJfQorCisJLyoqCisJICogVGhpcyBhZGRzIGEgbGlzdGVuZXIuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgYWRkTGlzdGVuZXIoSU5vdGlmeUNoYW5nZWRMaXN0ZW5lciBub3RpZnlDaGFuZ2VkTGlzdGVuZXIpIHsKKwkJY2hhbmdlTm90aWZpZXIuYWRkTGlzdGVuZXIobm90aWZ5Q2hhbmdlZExpc3RlbmVyKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHJlbW92ZXMgYSBsaXN0ZW5lci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCByZW1vdmVMaXN0ZW5lcihJTm90aWZ5Q2hhbmdlZExpc3RlbmVyIG5vdGlmeUNoYW5nZWRMaXN0ZW5lcikgeworCQljaGFuZ2VOb3RpZmllci5yZW1vdmVMaXN0ZW5lcihub3RpZnlDaGFuZ2VkTGlzdGVuZXIpOworCX0KKworCS8qKgorCSAqIFRoaXMgZGVsZWdhdGVzIHRvIHtAbGluayAjY2hhbmdlTm90aWZpZXJ9IGFuZCB0byB7QGxpbmsgI3BhcmVudEFkYXB0ZXJGYWN0b3J5fS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBmaXJlTm90aWZ5Q2hhbmdlZChOb3RpZmljYXRpb24gbm90aWZpY2F0aW9uKSB7CisJCWNoYW5nZU5vdGlmaWVyLmZpcmVOb3RpZnlDaGFuZ2VkKG5vdGlmaWNhdGlvbik7CisKKwkJaWYgKHBhcmVudEFkYXB0ZXJGYWN0b3J5ICE9IG51bGwpIHsKKwkJCXBhcmVudEFkYXB0ZXJGYWN0b3J5LmZpcmVOb3RpZnlDaGFuZ2VkKG5vdGlmaWNhdGlvbik7CisJCX0KKwl9CisKKwkvKioKKwkgKiBUaGlzIGRpc3Bvc2VzIGFsbCBvZiB0aGUgaXRlbSBwcm92aWRlcnMgY3JlYXRlZCBieSB0aGlzIGZhY3RvcnkuIAorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIGRpc3Bvc2UoKSB7CisJCWlmIChhbmRJdGVtUHJvdmlkZXIgIT0gbnVsbCkgYW5kSXRlbVByb3ZpZGVyLmRpc3Bvc2UoKTsKKwkJaWYgKGZhbHNlSXRlbVByb3ZpZGVyICE9IG51bGwpIGZhbHNlSXRlbVByb3ZpZGVyLmRpc3Bvc2UoKTsKKwkJaWYgKG5vdEl0ZW1Qcm92aWRlciAhPSBudWxsKSBub3RJdGVtUHJvdmlkZXIuZGlzcG9zZSgpOworCQlpZiAob3JJdGVtUHJvdmlkZXIgIT0gbnVsbCkgb3JJdGVtUHJvdmlkZXIuZGlzcG9zZSgpOworCQlpZiAocHJlZGljYXRlUmVmZXJlbmNlSXRlbVByb3ZpZGVyICE9IG51bGwpIHByZWRpY2F0ZVJlZmVyZW5jZUl0ZW1Qcm92aWRlci5kaXNwb3NlKCk7CisJCWlmICh0cnVlSXRlbVByb3ZpZGVyICE9IG51bGwpIHRydWVJdGVtUHJvdmlkZXIuZGlzcG9zZSgpOworCQlpZiAocHJlZGljYXRlRXhwcmVzc2lvbkl0ZW1Qcm92aWRlciAhPSBudWxsKSBwcmVkaWNhdGVFeHByZXNzaW9uSXRlbVByb3ZpZGVyLmRpc3Bvc2UoKTsKKwkJaWYgKGlkZW50aWZpYWJsZVByZWRpY2F0ZUV4cHJlc3Npb25JdGVtUHJvdmlkZXIgIT0gbnVsbCkgaWRlbnRpZmlhYmxlUHJlZGljYXRlRXhwcmVzc2lvbkl0ZW1Qcm92aWRlci5kaXNwb3NlKCk7CisJCWlmIChlbGFwc2VkVGltZVRlc3RJdGVtUHJvdmlkZXIgIT0gbnVsbCkgZWxhcHNlZFRpbWVUZXN0SXRlbVByb3ZpZGVyLmRpc3Bvc2UoKTsKKwl9CisKK30KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvcHJlZGljYXRlL3Byb3ZpZGVyL1ByZWRpY2F0ZVJlZmVyZW5jZUl0ZW1Qcm92aWRlci5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9wcmVkaWNhdGUvcHJvdmlkZXIvUHJlZGljYXRlUmVmZXJlbmNlSXRlbVByb3ZpZGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGI4NWI1OAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvcHJlZGljYXRlL3Byb3ZpZGVyL1ByZWRpY2F0ZVJlZmVyZW5jZUl0ZW1Qcm92aWRlci5qYXZhCkBAIC0wLDAgKzEsMTUzIEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUucHJvdmlkZXI7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LkFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRVN0cnVjdHVyYWxGZWF0dXJlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklFZGl0aW5nRG9tYWluSXRlbVByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtTGFiZWxQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbVByb3BlcnR5RGVzY3JpcHRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbVByb3BlcnR5U291cmNlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklTdHJ1Y3R1cmVkSXRlbUNvbnRlbnRQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JVHJlZUl0ZW1Db250ZW50UHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuVmlld2VyTm90aWZpY2F0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUuUHJlZGljYXRlUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlLlByZWRpY2F0ZVJlZmVyZW5jZTsKKworLyoqCisgKiBUaGlzIGlzIHRoZSBpdGVtIHByb3ZpZGVyIGFkYXB0ZXIgZm9yIGEge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUuUHJlZGljYXRlUmVmZXJlbmNlfSBvYmplY3QuCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBQcmVkaWNhdGVSZWZlcmVuY2VJdGVtUHJvdmlkZXIKKwlleHRlbmRzIFByZWRpY2F0ZUl0ZW1Qcm92aWRlcgorCWltcGxlbWVudHMKKwkJSUVkaXRpbmdEb21haW5JdGVtUHJvdmlkZXIsCisJCUlTdHJ1Y3R1cmVkSXRlbUNvbnRlbnRQcm92aWRlciwKKwkJSVRyZWVJdGVtQ29udGVudFByb3ZpZGVyLAorCQlJSXRlbUxhYmVsUHJvdmlkZXIsCisJCUlJdGVtUHJvcGVydHlTb3VyY2UgeworCS8qKgorCSAqIFRoaXMgY29uc3RydWN0cyBhbiBpbnN0YW5jZSBmcm9tIGEgZmFjdG9yeSBhbmQgYSBub3RpZmllci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgUHJlZGljYXRlUmVmZXJlbmNlSXRlbVByb3ZpZGVyKEFkYXB0ZXJGYWN0b3J5IGFkYXB0ZXJGYWN0b3J5KSB7CisJCXN1cGVyKGFkYXB0ZXJGYWN0b3J5KTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgdGhlIHByb3BlcnR5IGRlc2NyaXB0b3JzIGZvciB0aGUgYWRhcHRlZCBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgTGlzdDxJSXRlbVByb3BlcnR5RGVzY3JpcHRvcj4gZ2V0UHJvcGVydHlEZXNjcmlwdG9ycyhPYmplY3Qgb2JqZWN0KSB7CisJCWlmIChpdGVtUHJvcGVydHlEZXNjcmlwdG9ycyA9PSBudWxsKSB7CisJCQlzdXBlci5nZXRQcm9wZXJ0eURlc2NyaXB0b3JzKG9iamVjdCk7CisKKwkJfQorCQlyZXR1cm4gaXRlbVByb3BlcnR5RGVzY3JpcHRvcnM7CisJfQorCisJLyoqCisJICogVGhpcyBzcGVjaWZpZXMgaG93IHRvIGltcGxlbWVudCB7QGxpbmsgI2dldENoaWxkcmVufSBhbmQgaXMgdXNlZCB0byBkZWR1Y2UgYW4gYXBwcm9wcmlhdGUgZmVhdHVyZSBmb3IgYW4KKwkgKiB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmVkaXQuY29tbWFuZC5BZGRDb21tYW5kfSwge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lZGl0LmNvbW1hbmQuUmVtb3ZlQ29tbWFuZH0gb3IKKwkgKiB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmVkaXQuY29tbWFuZC5Nb3ZlQ29tbWFuZH0gaW4ge0BsaW5rICNjcmVhdGVDb21tYW5kfS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgQ29sbGVjdGlvbjw/IGV4dGVuZHMgRVN0cnVjdHVyYWxGZWF0dXJlPiBnZXRDaGlsZHJlbkZlYXR1cmVzKE9iamVjdCBvYmplY3QpIHsKKwkJaWYgKGNoaWxkcmVuRmVhdHVyZXMgPT0gbnVsbCkgeworCQkJc3VwZXIuZ2V0Q2hpbGRyZW5GZWF0dXJlcyhvYmplY3QpOworCQkJY2hpbGRyZW5GZWF0dXJlcy5hZGQoUHJlZGljYXRlUGFja2FnZS5MaXRlcmFscy5QUkVESUNBVEVfUkVGRVJFTkNFX19QUkVESUNBVEUpOworCQl9CisJCXJldHVybiBjaGlsZHJlbkZlYXR1cmVzOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCBFU3RydWN0dXJhbEZlYXR1cmUgZ2V0Q2hpbGRGZWF0dXJlKE9iamVjdCBvYmplY3QsIE9iamVjdCBjaGlsZCkgeworCQkvLyBDaGVjayB0aGUgdHlwZSBvZiB0aGUgc3BlY2lmaWVkIGNoaWxkIG9iamVjdCBhbmQgcmV0dXJuIHRoZSBwcm9wZXIgZmVhdHVyZSB0byB1c2UgZm9yCisJCS8vIGFkZGluZyAoc2VlIHtAbGluayBBZGRDb21tYW5kfSkgaXQgYXMgYSBjaGlsZC4KKworCQlyZXR1cm4gc3VwZXIuZ2V0Q2hpbGRGZWF0dXJlKG9iamVjdCwgY2hpbGQpOworCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyBQcmVkaWNhdGVSZWZlcmVuY2UuZ2lmLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBPYmplY3QgZ2V0SW1hZ2UoT2JqZWN0IG9iamVjdCkgeworCQlyZXR1cm4gb3ZlcmxheUltYWdlKG9iamVjdCwgZ2V0UmVzb3VyY2VMb2NhdG9yKCkuZ2V0SW1hZ2UoImZ1bGwvb2JqMTYvUHJlZGljYXRlUmVmZXJlbmNlIikpOyAvLyROT04tTkxTLTEkCisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIHRoZSBsYWJlbCB0ZXh0IGZvciB0aGUgYWRhcHRlZCBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgU3RyaW5nIGdldFRleHQoT2JqZWN0IG9iamVjdCkgeworCQlyZXR1cm4gZ2V0U3RyaW5nKCJfVUlfUHJlZGljYXRlUmVmZXJlbmNlX3R5cGUiKTsgLy8kTk9OLU5MUy0xJAorCX0KKworCS8qKgorCSAqIFRoaXMgaGFuZGxlcyBtb2RlbCBub3RpZmljYXRpb25zIGJ5IGNhbGxpbmcge0BsaW5rICN1cGRhdGVDaGlsZHJlbn0gdG8gdXBkYXRlIGFueSBjYWNoZWQKKwkgKiBjaGlsZHJlbiBhbmQgYnkgY3JlYXRpbmcgYSB2aWV3ZXIgbm90aWZpY2F0aW9uLCB3aGljaCBpdCBwYXNzZXMgdG8ge0BsaW5rICNmaXJlTm90aWZ5Q2hhbmdlZH0uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgbm90aWZ5Q2hhbmdlZChOb3RpZmljYXRpb24gbm90aWZpY2F0aW9uKSB7CisJCXVwZGF0ZUNoaWxkcmVuKG5vdGlmaWNhdGlvbik7CisKKwkJc3dpdGNoIChub3RpZmljYXRpb24uZ2V0RmVhdHVyZUlEKFByZWRpY2F0ZVJlZmVyZW5jZS5jbGFzcykpIHsKKwkJCWNhc2UgUHJlZGljYXRlUGFja2FnZS5QUkVESUNBVEVfUkVGRVJFTkNFX19QUkVESUNBVEU6CisJCQkJZmlyZU5vdGlmeUNoYW5nZWQobmV3IFZpZXdlck5vdGlmaWNhdGlvbihub3RpZmljYXRpb24sIG5vdGlmaWNhdGlvbi5nZXROb3RpZmllcigpLCB0cnVlLCBmYWxzZSkpOworCQkJCXJldHVybjsKKwkJfQorCQlzdXBlci5ub3RpZnlDaGFuZ2VkKG5vdGlmaWNhdGlvbik7CisJfQorCisJLyoqCisJICogVGhpcyBhZGRzIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuZWRpdC5jb21tYW5kLkNvbW1hbmRQYXJhbWV0ZXJ9cyBkZXNjcmliaW5nIHRoZSBjaGlsZHJlbgorCSAqIHRoYXQgY2FuIGJlIGNyZWF0ZWQgdW5kZXIgdGhpcyBvYmplY3QuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgY29sbGVjdE5ld0NoaWxkRGVzY3JpcHRvcnMoQ29sbGVjdGlvbjxPYmplY3Q+IG5ld0NoaWxkRGVzY3JpcHRvcnMsIE9iamVjdCBvYmplY3QpIHsKKwkJc3VwZXIuY29sbGVjdE5ld0NoaWxkRGVzY3JpcHRvcnMobmV3Q2hpbGREZXNjcmlwdG9ycywgb2JqZWN0KTsKKwl9CisKK30KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvcHJlZGljYXRlL3Byb3ZpZGVyL1Rlc3RJdGVtUHJvdmlkZXIuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvcHJlZGljYXRlL3Byb3ZpZGVyL1Rlc3RJdGVtUHJvdmlkZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZThkOGE5Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9wcmVkaWNhdGUvcHJvdmlkZXIvVGVzdEl0ZW1Qcm92aWRlci5qYXZhCkBAIC0wLDAgKzEsMTEzIEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUucHJvdmlkZXI7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LkFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JRWRpdGluZ0RvbWFpbkl0ZW1Qcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbUxhYmVsUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1Qcm9wZXJ0eVNvdXJjZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JU3RydWN0dXJlZEl0ZW1Db250ZW50UHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVRyZWVJdGVtQ29udGVudFByb3ZpZGVyOworCisvKioKKyAqIFRoaXMgaXMgdGhlIGl0ZW0gcHJvdmlkZXIgYWRhcHRlciBmb3IgYSB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZS5UZXN0fSBvYmplY3QuCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBUZXN0SXRlbVByb3ZpZGVyCisJZXh0ZW5kcyBQcmVkaWNhdGVJdGVtUHJvdmlkZXIKKwlpbXBsZW1lbnRzCisJCUlFZGl0aW5nRG9tYWluSXRlbVByb3ZpZGVyLAorCQlJU3RydWN0dXJlZEl0ZW1Db250ZW50UHJvdmlkZXIsCisJCUlUcmVlSXRlbUNvbnRlbnRQcm92aWRlciwKKwkJSUl0ZW1MYWJlbFByb3ZpZGVyLAorCQlJSXRlbVByb3BlcnR5U291cmNlIHsKKwkvKioKKwkgKiBUaGlzIGNvbnN0cnVjdHMgYW4gaW5zdGFuY2UgZnJvbSBhIGZhY3RvcnkgYW5kIGEgbm90aWZpZXIuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFRlc3RJdGVtUHJvdmlkZXIoQWRhcHRlckZhY3RvcnkgYWRhcHRlckZhY3RvcnkpIHsKKwkJc3VwZXIoYWRhcHRlckZhY3RvcnkpOworCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyB0aGUgcHJvcGVydHkgZGVzY3JpcHRvcnMgZm9yIHRoZSBhZGFwdGVkIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBMaXN0PElJdGVtUHJvcGVydHlEZXNjcmlwdG9yPiBnZXRQcm9wZXJ0eURlc2NyaXB0b3JzKE9iamVjdCBvYmplY3QpIHsKKwkJaWYgKGl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzID09IG51bGwpIHsKKwkJCXN1cGVyLmdldFByb3BlcnR5RGVzY3JpcHRvcnMob2JqZWN0KTsKKworCQl9CisJCXJldHVybiBpdGVtUHJvcGVydHlEZXNjcmlwdG9yczsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgVGVzdC5naWYuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIE9iamVjdCBnZXRJbWFnZShPYmplY3Qgb2JqZWN0KSB7CisJCXJldHVybiBvdmVybGF5SW1hZ2Uob2JqZWN0LCBnZXRSZXNvdXJjZUxvY2F0b3IoKS5nZXRJbWFnZSgiZnVsbC9vYmoxNi9UZXN0IikpOyAvLyROT04tTkxTLTEkCisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIHRoZSBsYWJlbCB0ZXh0IGZvciB0aGUgYWRhcHRlZCBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgU3RyaW5nIGdldFRleHQoT2JqZWN0IG9iamVjdCkgeworCQlyZXR1cm4gZ2V0U3RyaW5nKCJfVUlfVGVzdF90eXBlIik7IC8vJE5PTi1OTFMtMSQKKwl9CisKKwkvKioKKwkgKiBUaGlzIGhhbmRsZXMgbW9kZWwgbm90aWZpY2F0aW9ucyBieSBjYWxsaW5nIHtAbGluayAjdXBkYXRlQ2hpbGRyZW59IHRvIHVwZGF0ZSBhbnkgY2FjaGVkCisJICogY2hpbGRyZW4gYW5kIGJ5IGNyZWF0aW5nIGEgdmlld2VyIG5vdGlmaWNhdGlvbiwgd2hpY2ggaXQgcGFzc2VzIHRvIHtAbGluayAjZmlyZU5vdGlmeUNoYW5nZWR9LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIG5vdGlmeUNoYW5nZWQoTm90aWZpY2F0aW9uIG5vdGlmaWNhdGlvbikgeworCQl1cGRhdGVDaGlsZHJlbihub3RpZmljYXRpb24pOworCQlzdXBlci5ub3RpZnlDaGFuZ2VkKG5vdGlmaWNhdGlvbik7CisJfQorCisJLyoqCisJICogVGhpcyBhZGRzIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuZWRpdC5jb21tYW5kLkNvbW1hbmRQYXJhbWV0ZXJ9cyBkZXNjcmliaW5nIHRoZSBjaGlsZHJlbgorCSAqIHRoYXQgY2FuIGJlIGNyZWF0ZWQgdW5kZXIgdGhpcyBvYmplY3QuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgY29sbGVjdE5ld0NoaWxkRGVzY3JpcHRvcnMoQ29sbGVjdGlvbjxPYmplY3Q+IG5ld0NoaWxkRGVzY3JpcHRvcnMsIE9iamVjdCBvYmplY3QpIHsKKwkJc3VwZXIuY29sbGVjdE5ld0NoaWxkRGVzY3JpcHRvcnMobmV3Q2hpbGREZXNjcmlwdG9ycywgb2JqZWN0KTsKKwl9CisKK30KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvcHJlZGljYXRlL3Byb3ZpZGVyL1RpbWVUZXN0SXRlbVByb3ZpZGVyLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3ByZWRpY2F0ZS9wcm92aWRlci9UaW1lVGVzdEl0ZW1Qcm92aWRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM2MGZjZDQKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3ByZWRpY2F0ZS9wcm92aWRlci9UaW1lVGVzdEl0ZW1Qcm92aWRlci5qYXZhCkBAIC0wLDAgKzEsMTAxIEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUucHJvdmlkZXI7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5BZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUVkaXRpbmdEb21haW5JdGVtUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1MYWJlbFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtUHJvcGVydHlEZXNjcmlwdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtUHJvcGVydHlTb3VyY2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVN0cnVjdHVyZWRJdGVtQ29udGVudFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklUcmVlSXRlbUNvbnRlbnRQcm92aWRlcjsKKworLyoqCisgKiBUaGlzIGlzIHRoZSBpdGVtIHByb3ZpZGVyIGFkYXB0ZXIgZm9yIGEge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUuVGltZVRlc3R9IG9iamVjdC4KKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIFRpbWVUZXN0SXRlbVByb3ZpZGVyCisJZXh0ZW5kcyBUZXN0SXRlbVByb3ZpZGVyCisJaW1wbGVtZW50cworCQlJRWRpdGluZ0RvbWFpbkl0ZW1Qcm92aWRlciwKKwkJSVN0cnVjdHVyZWRJdGVtQ29udGVudFByb3ZpZGVyLAorCQlJVHJlZUl0ZW1Db250ZW50UHJvdmlkZXIsCisJCUlJdGVtTGFiZWxQcm92aWRlciwKKwkJSUl0ZW1Qcm9wZXJ0eVNvdXJjZSB7CisJLyoqCisJICogVGhpcyBjb25zdHJ1Y3RzIGFuIGluc3RhbmNlIGZyb20gYSBmYWN0b3J5IGFuZCBhIG5vdGlmaWVyLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBUaW1lVGVzdEl0ZW1Qcm92aWRlcihBZGFwdGVyRmFjdG9yeSBhZGFwdGVyRmFjdG9yeSkgeworCQlzdXBlcihhZGFwdGVyRmFjdG9yeSk7CisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIHRoZSBwcm9wZXJ0eSBkZXNjcmlwdG9ycyBmb3IgdGhlIGFkYXB0ZWQgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIExpc3Q8SUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I+IGdldFByb3BlcnR5RGVzY3JpcHRvcnMoT2JqZWN0IG9iamVjdCkgeworCQlpZiAoaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMgPT0gbnVsbCkgeworCQkJc3VwZXIuZ2V0UHJvcGVydHlEZXNjcmlwdG9ycyhvYmplY3QpOworCisJCX0KKwkJcmV0dXJuIGl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzOworCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyB0aGUgbGFiZWwgdGV4dCBmb3IgdGhlIGFkYXB0ZWQgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIFN0cmluZyBnZXRUZXh0KE9iamVjdCBvYmplY3QpIHsKKwkJcmV0dXJuIGdldFN0cmluZygiX1VJX1RpbWVUZXN0X3R5cGUiKTsgLy8kTk9OLU5MUy0xJAorCX0KKworCS8qKgorCSAqIFRoaXMgaGFuZGxlcyBtb2RlbCBub3RpZmljYXRpb25zIGJ5IGNhbGxpbmcge0BsaW5rICN1cGRhdGVDaGlsZHJlbn0gdG8gdXBkYXRlIGFueSBjYWNoZWQKKwkgKiBjaGlsZHJlbiBhbmQgYnkgY3JlYXRpbmcgYSB2aWV3ZXIgbm90aWZpY2F0aW9uLCB3aGljaCBpdCBwYXNzZXMgdG8ge0BsaW5rICNmaXJlTm90aWZ5Q2hhbmdlZH0uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgbm90aWZ5Q2hhbmdlZChOb3RpZmljYXRpb24gbm90aWZpY2F0aW9uKSB7CisJCXVwZGF0ZUNoaWxkcmVuKG5vdGlmaWNhdGlvbik7CisJCXN1cGVyLm5vdGlmeUNoYW5nZWQobm90aWZpY2F0aW9uKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFkZHMge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lZGl0LmNvbW1hbmQuQ29tbWFuZFBhcmFtZXRlcn1zIGRlc2NyaWJpbmcgdGhlIGNoaWxkcmVuCisJICogdGhhdCBjYW4gYmUgY3JlYXRlZCB1bmRlciB0aGlzIG9iamVjdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgdm9pZCBjb2xsZWN0TmV3Q2hpbGREZXNjcmlwdG9ycyhDb2xsZWN0aW9uPE9iamVjdD4gbmV3Q2hpbGREZXNjcmlwdG9ycywgT2JqZWN0IG9iamVjdCkgeworCQlzdXBlci5jb2xsZWN0TmV3Q2hpbGREZXNjcmlwdG9ycyhuZXdDaGlsZERlc2NyaXB0b3JzLCBvYmplY3QpOworCX0KKworfQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9wcmVkaWNhdGUvcHJvdmlkZXIvVHJ1ZUl0ZW1Qcm92aWRlci5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9wcmVkaWNhdGUvcHJvdmlkZXIvVHJ1ZUl0ZW1Qcm92aWRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgyNWQ3NzYKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3ByZWRpY2F0ZS9wcm92aWRlci9UcnVlSXRlbVByb3ZpZGVyLmphdmEKQEAgLTAsMCArMSwxMjQgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZS5wcm92aWRlcjsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LkFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JRWRpdGluZ0RvbWFpbkl0ZW1Qcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbUxhYmVsUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1Qcm9wZXJ0eVNvdXJjZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JU3RydWN0dXJlZEl0ZW1Db250ZW50UHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVRyZWVJdGVtQ29udGVudFByb3ZpZGVyOworCisvKioKKyAqIFRoaXMgaXMgdGhlIGl0ZW0gcHJvdmlkZXIgYWRhcHRlciBmb3IgYSB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZS5UcnVlfSBvYmplY3QuCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBUcnVlSXRlbVByb3ZpZGVyCisJZXh0ZW5kcyBUZXN0SXRlbVByb3ZpZGVyCisJaW1wbGVtZW50cworCQlJRWRpdGluZ0RvbWFpbkl0ZW1Qcm92aWRlciwKKwkJSVN0cnVjdHVyZWRJdGVtQ29udGVudFByb3ZpZGVyLAorCQlJVHJlZUl0ZW1Db250ZW50UHJvdmlkZXIsCisJCUlJdGVtTGFiZWxQcm92aWRlciwKKwkJSUl0ZW1Qcm9wZXJ0eVNvdXJjZSB7CisJLyoqCisJICogVGhpcyBjb25zdHJ1Y3RzIGFuIGluc3RhbmNlIGZyb20gYSBmYWN0b3J5IGFuZCBhIG5vdGlmaWVyLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBUcnVlSXRlbVByb3ZpZGVyKEFkYXB0ZXJGYWN0b3J5IGFkYXB0ZXJGYWN0b3J5KSB7CisJCXN1cGVyKGFkYXB0ZXJGYWN0b3J5KTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgdGhlIHByb3BlcnR5IGRlc2NyaXB0b3JzIGZvciB0aGUgYWRhcHRlZCBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgTGlzdDxJSXRlbVByb3BlcnR5RGVzY3JpcHRvcj4gZ2V0UHJvcGVydHlEZXNjcmlwdG9ycyhPYmplY3Qgb2JqZWN0KSB7CisJCWlmIChpdGVtUHJvcGVydHlEZXNjcmlwdG9ycyA9PSBudWxsKSB7CisJCQlzdXBlci5nZXRQcm9wZXJ0eURlc2NyaXB0b3JzKG9iamVjdCk7CisKKwkJfQorCQlyZXR1cm4gaXRlbVByb3BlcnR5RGVzY3JpcHRvcnM7CisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIFRydWUuZ2lmLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBPYmplY3QgZ2V0SW1hZ2UoT2JqZWN0IG9iamVjdCkgeworCQlyZXR1cm4gb3ZlcmxheUltYWdlKG9iamVjdCwgZ2V0UmVzb3VyY2VMb2NhdG9yKCkuZ2V0SW1hZ2UoImZ1bGwvb2JqMTYvVHJ1ZSIpKTsgLy8kTk9OLU5MUy0xJAorCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyB0aGUgbGFiZWwgdGV4dCBmb3IgdGhlIGFkYXB0ZWQgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBTdHJpbmcgZ2V0VGV4dChPYmplY3Qgb2JqZWN0KSB7CisJCXJldHVybiAiVHJ1ZSI7CisJfQorCQorCS8qKgorCSAqIFRoaXMgcmV0dXJucyB0aGUgbGFiZWwgdGV4dCBmb3IgdGhlIGFkYXB0ZWQgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJLy9AT3ZlcnJpZGUKKwlwdWJsaWMgU3RyaW5nIGdldFRleHRHZW4oT2JqZWN0IG9iamVjdCkgeworCQlyZXR1cm4gZ2V0U3RyaW5nKCJfVUlfVHJ1ZV90eXBlIik7IC8vJE5PTi1OTFMtMSQKKwl9CisJCisKKwkvKioKKwkgKiBUaGlzIGhhbmRsZXMgbW9kZWwgbm90aWZpY2F0aW9ucyBieSBjYWxsaW5nIHtAbGluayAjdXBkYXRlQ2hpbGRyZW59IHRvIHVwZGF0ZSBhbnkgY2FjaGVkCisJICogY2hpbGRyZW4gYW5kIGJ5IGNyZWF0aW5nIGEgdmlld2VyIG5vdGlmaWNhdGlvbiwgd2hpY2ggaXQgcGFzc2VzIHRvIHtAbGluayAjZmlyZU5vdGlmeUNoYW5nZWR9LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIG5vdGlmeUNoYW5nZWQoTm90aWZpY2F0aW9uIG5vdGlmaWNhdGlvbikgeworCQl1cGRhdGVDaGlsZHJlbihub3RpZmljYXRpb24pOworCQlzdXBlci5ub3RpZnlDaGFuZ2VkKG5vdGlmaWNhdGlvbik7CisJfQorCisJLyoqCisJICogVGhpcyBhZGRzIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuZWRpdC5jb21tYW5kLkNvbW1hbmRQYXJhbWV0ZXJ9cyBkZXNjcmliaW5nIHRoZSBjaGlsZHJlbgorCSAqIHRoYXQgY2FuIGJlIGNyZWF0ZWQgdW5kZXIgdGhpcyBvYmplY3QuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgY29sbGVjdE5ld0NoaWxkRGVzY3JpcHRvcnMoQ29sbGVjdGlvbjxPYmplY3Q+IG5ld0NoaWxkRGVzY3JpcHRvcnMsIE9iamVjdCBvYmplY3QpIHsKKwkJc3VwZXIuY29sbGVjdE5ld0NoaWxkRGVzY3JpcHRvcnMobmV3Q2hpbGREZXNjcmlwdG9ycywgb2JqZWN0KTsKKwl9CisKK30KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvcHJlZGljYXRlL3Byb3ZpZGVyL1VuYXJ5Qm9vbGVhbk9wZXJhdG9ySXRlbVByb3ZpZGVyLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3ByZWRpY2F0ZS9wcm92aWRlci9VbmFyeUJvb2xlYW5PcGVyYXRvckl0ZW1Qcm92aWRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM1ZjMwODgKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3ByZWRpY2F0ZS9wcm92aWRlci9VbmFyeUJvb2xlYW5PcGVyYXRvckl0ZW1Qcm92aWRlci5qYXZhCkBAIC0wLDAgKzEsMjQ1IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUucHJvdmlkZXI7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LkFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRVN0cnVjdHVyYWxGZWF0dXJlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklFZGl0aW5nRG9tYWluSXRlbVByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtTGFiZWxQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbVByb3BlcnR5RGVzY3JpcHRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbVByb3BlcnR5U291cmNlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklTdHJ1Y3R1cmVkSXRlbUNvbnRlbnRQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JVHJlZUl0ZW1Db250ZW50UHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuVmlld2VyTm90aWZpY2F0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUuUHJlZGljYXRlRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlLlByZWRpY2F0ZVBhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZS5VbmFyeUJvb2xlYW5PcGVyYXRvcjsKKworLyoqCisgKiBUaGlzIGlzIHRoZSBpdGVtIHByb3ZpZGVyIGFkYXB0ZXIgZm9yIGEge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUuVW5hcnlCb29sZWFuT3BlcmF0b3J9IG9iamVjdC4KKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIFVuYXJ5Qm9vbGVhbk9wZXJhdG9ySXRlbVByb3ZpZGVyCisJZXh0ZW5kcyBCb29sZWFuT3BlcmF0b3JJdGVtUHJvdmlkZXIKKwlpbXBsZW1lbnRzCisJCUlFZGl0aW5nRG9tYWluSXRlbVByb3ZpZGVyLAorCQlJU3RydWN0dXJlZEl0ZW1Db250ZW50UHJvdmlkZXIsCisJCUlUcmVlSXRlbUNvbnRlbnRQcm92aWRlciwKKwkJSUl0ZW1MYWJlbFByb3ZpZGVyLAorCQlJSXRlbVByb3BlcnR5U291cmNlIHsKKwkvKioKKwkgKiBUaGlzIGNvbnN0cnVjdHMgYW4gaW5zdGFuY2UgZnJvbSBhIGZhY3RvcnkgYW5kIGEgbm90aWZpZXIuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFVuYXJ5Qm9vbGVhbk9wZXJhdG9ySXRlbVByb3ZpZGVyKEFkYXB0ZXJGYWN0b3J5IGFkYXB0ZXJGYWN0b3J5KSB7CisJCXN1cGVyKGFkYXB0ZXJGYWN0b3J5KTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgdGhlIHByb3BlcnR5IGRlc2NyaXB0b3JzIGZvciB0aGUgYWRhcHRlZCBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgTGlzdDxJSXRlbVByb3BlcnR5RGVzY3JpcHRvcj4gZ2V0UHJvcGVydHlEZXNjcmlwdG9ycyhPYmplY3Qgb2JqZWN0KSB7CisJCWlmIChpdGVtUHJvcGVydHlEZXNjcmlwdG9ycyA9PSBudWxsKSB7CisJCQlzdXBlci5nZXRQcm9wZXJ0eURlc2NyaXB0b3JzKG9iamVjdCk7CisKKwkJfQorCQlyZXR1cm4gaXRlbVByb3BlcnR5RGVzY3JpcHRvcnM7CisJfQorCisJLyoqCisJICogVGhpcyBzcGVjaWZpZXMgaG93IHRvIGltcGxlbWVudCB7QGxpbmsgI2dldENoaWxkcmVufSBhbmQgaXMgdXNlZCB0byBkZWR1Y2UgYW4gYXBwcm9wcmlhdGUgZmVhdHVyZSBmb3IgYW4KKwkgKiB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmVkaXQuY29tbWFuZC5BZGRDb21tYW5kfSwge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lZGl0LmNvbW1hbmQuUmVtb3ZlQ29tbWFuZH0gb3IKKwkgKiB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmVkaXQuY29tbWFuZC5Nb3ZlQ29tbWFuZH0gaW4ge0BsaW5rICNjcmVhdGVDb21tYW5kfS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgQ29sbGVjdGlvbjw/IGV4dGVuZHMgRVN0cnVjdHVyYWxGZWF0dXJlPiBnZXRDaGlsZHJlbkZlYXR1cmVzKE9iamVjdCBvYmplY3QpIHsKKwkJaWYgKGNoaWxkcmVuRmVhdHVyZXMgPT0gbnVsbCkgeworCQkJc3VwZXIuZ2V0Q2hpbGRyZW5GZWF0dXJlcyhvYmplY3QpOworCQkJY2hpbGRyZW5GZWF0dXJlcy5hZGQoUHJlZGljYXRlUGFja2FnZS5MaXRlcmFscy5VTkFSWV9CT09MRUFOX09QRVJBVE9SX19PUEVSQU5EKTsKKwkJfQorCQlyZXR1cm4gY2hpbGRyZW5GZWF0dXJlczsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgRVN0cnVjdHVyYWxGZWF0dXJlIGdldENoaWxkRmVhdHVyZShPYmplY3Qgb2JqZWN0LCBPYmplY3QgY2hpbGQpIHsKKwkJLy8gQ2hlY2sgdGhlIHR5cGUgb2YgdGhlIHNwZWNpZmllZCBjaGlsZCBvYmplY3QgYW5kIHJldHVybiB0aGUgcHJvcGVyIGZlYXR1cmUgdG8gdXNlIGZvcgorCQkvLyBhZGRpbmcgKHNlZSB7QGxpbmsgQWRkQ29tbWFuZH0pIGl0IGFzIGEgY2hpbGQuCisKKwkJcmV0dXJuIHN1cGVyLmdldENoaWxkRmVhdHVyZShvYmplY3QsIGNoaWxkKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgdGhlIGxhYmVsIHRleHQgZm9yIHRoZSBhZGFwdGVkIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBTdHJpbmcgZ2V0VGV4dChPYmplY3Qgb2JqZWN0KSB7CisJCXJldHVybiBnZXRTdHJpbmcoIl9VSV9VbmFyeUJvb2xlYW5PcGVyYXRvcl90eXBlIik7IC8vJE5PTi1OTFMtMSQKKwl9CisKKwkvKioKKwkgKiBUaGlzIGhhbmRsZXMgbW9kZWwgbm90aWZpY2F0aW9ucyBieSBjYWxsaW5nIHtAbGluayAjdXBkYXRlQ2hpbGRyZW59IHRvIHVwZGF0ZSBhbnkgY2FjaGVkCisJICogY2hpbGRyZW4gYW5kIGJ5IGNyZWF0aW5nIGEgdmlld2VyIG5vdGlmaWNhdGlvbiwgd2hpY2ggaXQgcGFzc2VzIHRvIHtAbGluayAjZmlyZU5vdGlmeUNoYW5nZWR9LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIG5vdGlmeUNoYW5nZWQoTm90aWZpY2F0aW9uIG5vdGlmaWNhdGlvbikgeworCQl1cGRhdGVDaGlsZHJlbihub3RpZmljYXRpb24pOworCisJCXN3aXRjaCAobm90aWZpY2F0aW9uLmdldEZlYXR1cmVJRChVbmFyeUJvb2xlYW5PcGVyYXRvci5jbGFzcykpIHsKKwkJCWNhc2UgUHJlZGljYXRlUGFja2FnZS5VTkFSWV9CT09MRUFOX09QRVJBVE9SX19PUEVSQU5EOgorCQkJCWZpcmVOb3RpZnlDaGFuZ2VkKG5ldyBWaWV3ZXJOb3RpZmljYXRpb24obm90aWZpY2F0aW9uLCBub3RpZmljYXRpb24uZ2V0Tm90aWZpZXIoKSwgdHJ1ZSwgZmFsc2UpKTsKKwkJCQlyZXR1cm47CisJCX0KKwkJc3VwZXIubm90aWZ5Q2hhbmdlZChub3RpZmljYXRpb24pOworCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmVkaXQuY29tbWFuZC5Db21tYW5kUGFyYW1ldGVyfXMgZGVzY3JpYmluZyB0aGUgY2hpbGRyZW4KKwkgKiB0aGF0IGNhbiBiZSBjcmVhdGVkIHVuZGVyIHRoaXMgb2JqZWN0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgdm9pZCBjb2xsZWN0TmV3Q2hpbGREZXNjcmlwdG9ycyhDb2xsZWN0aW9uPE9iamVjdD4gbmV3Q2hpbGREZXNjcmlwdG9ycywgT2JqZWN0IG9iamVjdCkgeworCQlzdXBlci5jb2xsZWN0TmV3Q2hpbGREZXNjcmlwdG9ycyhuZXdDaGlsZERlc2NyaXB0b3JzLCBvYmplY3QpOworCisJCW5ld0NoaWxkRGVzY3JpcHRvcnMuYWRkCisJCQkoY3JlYXRlQ2hpbGRQYXJhbWV0ZXIKKwkJCQkoUHJlZGljYXRlUGFja2FnZS5MaXRlcmFscy5VTkFSWV9CT09MRUFOX09QRVJBVE9SX19PUEVSQU5ELAorCQkJCSBQcmVkaWNhdGVGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVBbmQoKSkpOworCisJCW5ld0NoaWxkRGVzY3JpcHRvcnMuYWRkCisJCQkoY3JlYXRlQ2hpbGRQYXJhbWV0ZXIKKwkJCQkoUHJlZGljYXRlUGFja2FnZS5MaXRlcmFscy5VTkFSWV9CT09MRUFOX09QRVJBVE9SX19PUEVSQU5ELAorCQkJCSBQcmVkaWNhdGVGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVGYWxzZSgpKSk7CisKKwkJbmV3Q2hpbGREZXNjcmlwdG9ycy5hZGQKKwkJCShjcmVhdGVDaGlsZFBhcmFtZXRlcgorCQkJCShQcmVkaWNhdGVQYWNrYWdlLkxpdGVyYWxzLlVOQVJZX0JPT0xFQU5fT1BFUkFUT1JfX09QRVJBTkQsCisJCQkJIFByZWRpY2F0ZUZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZU5vdCgpKSk7CisKKwkJbmV3Q2hpbGREZXNjcmlwdG9ycy5hZGQKKwkJCShjcmVhdGVDaGlsZFBhcmFtZXRlcgorCQkJCShQcmVkaWNhdGVQYWNrYWdlLkxpdGVyYWxzLlVOQVJZX0JPT0xFQU5fT1BFUkFUT1JfX09QRVJBTkQsCisJCQkJIFByZWRpY2F0ZUZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZU9yKCkpKTsKKworLy8JCW5ld0NoaWxkRGVzY3JpcHRvcnMuYWRkCisvLwkJCShjcmVhdGVDaGlsZFBhcmFtZXRlcgorLy8JCQkJKFByZWRpY2F0ZVBhY2thZ2UuTGl0ZXJhbHMuVU5BUllfQk9PTEVBTl9PUEVSQVRPUl9fT1BFUkFORCwKKy8vCQkJCSBQcmVkaWNhdGVGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVQcmVkaWNhdGVSZWZlcmVuY2UoKSkpOworCisJCW5ld0NoaWxkRGVzY3JpcHRvcnMuYWRkCisJCQkoY3JlYXRlQ2hpbGRQYXJhbWV0ZXIKKwkJCQkoUHJlZGljYXRlUGFja2FnZS5MaXRlcmFscy5VTkFSWV9CT09MRUFOX09QRVJBVE9SX19PUEVSQU5ELAorCQkJCSBQcmVkaWNhdGVGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVUcnVlKCkpKTsKKworCQluZXdDaGlsZERlc2NyaXB0b3JzLmFkZAorCQkJKGNyZWF0ZUNoaWxkUGFyYW1ldGVyCisJCQkJKFByZWRpY2F0ZVBhY2thZ2UuTGl0ZXJhbHMuVU5BUllfQk9PTEVBTl9PUEVSQVRPUl9fT1BFUkFORCwKKwkJCQkgUHJlZGljYXRlRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlUHJlZGljYXRlRXhwcmVzc2lvbigpKSk7CisKKy8vCQluZXdDaGlsZERlc2NyaXB0b3JzLmFkZAorLy8JCQkoY3JlYXRlQ2hpbGRQYXJhbWV0ZXIKKy8vCQkJCShQcmVkaWNhdGVQYWNrYWdlLkxpdGVyYWxzLlVOQVJZX0JPT0xFQU5fT1BFUkFUT1JfX09QRVJBTkQsCisvLwkJCQkgUHJlZGljYXRlRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlSWRlbnRpZmlhYmxlUHJlZGljYXRlRXhwcmVzc2lvbigpKSk7CisKKwkJbmV3Q2hpbGREZXNjcmlwdG9ycy5hZGQKKwkJCShjcmVhdGVDaGlsZFBhcmFtZXRlcgorCQkJCShQcmVkaWNhdGVQYWNrYWdlLkxpdGVyYWxzLlVOQVJZX0JPT0xFQU5fT1BFUkFUT1JfX09QRVJBTkQsCisJCQkJIFByZWRpY2F0ZUZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZUVsYXBzZWRUaW1lVGVzdCgpKSk7CisJfSAvLyBjb2xsZWN0TmV3Q2hpbGREZXNjcmlwdG9ycworCisJLyoqCisJICogVGhpcyBhZGRzIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuZWRpdC5jb21tYW5kLkNvbW1hbmRQYXJhbWV0ZXJ9cyBkZXNjcmliaW5nIHRoZSBjaGlsZHJlbgorCSAqIHRoYXQgY2FuIGJlIGNyZWF0ZWQgdW5kZXIgdGhpcyBvYmplY3QuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJLy9AT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgdm9pZCBjb2xsZWN0TmV3Q2hpbGREZXNjcmlwdG9yc0dlbihDb2xsZWN0aW9uPE9iamVjdD4gbmV3Q2hpbGREZXNjcmlwdG9ycywgT2JqZWN0IG9iamVjdCkgeworCQlzdXBlci5jb2xsZWN0TmV3Q2hpbGREZXNjcmlwdG9ycyhuZXdDaGlsZERlc2NyaXB0b3JzLCBvYmplY3QpOworCisJCW5ld0NoaWxkRGVzY3JpcHRvcnMuYWRkCisJCQkoY3JlYXRlQ2hpbGRQYXJhbWV0ZXIKKwkJCQkoUHJlZGljYXRlUGFja2FnZS5MaXRlcmFscy5VTkFSWV9CT09MRUFOX09QRVJBVE9SX19PUEVSQU5ELAorCQkJCSBQcmVkaWNhdGVGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVBbmQoKSkpOworCisJCW5ld0NoaWxkRGVzY3JpcHRvcnMuYWRkCisJCQkoY3JlYXRlQ2hpbGRQYXJhbWV0ZXIKKwkJCQkoUHJlZGljYXRlUGFja2FnZS5MaXRlcmFscy5VTkFSWV9CT09MRUFOX09QRVJBVE9SX19PUEVSQU5ELAorCQkJCSBQcmVkaWNhdGVGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVGYWxzZSgpKSk7CisKKwkJbmV3Q2hpbGREZXNjcmlwdG9ycy5hZGQKKwkJCShjcmVhdGVDaGlsZFBhcmFtZXRlcgorCQkJCShQcmVkaWNhdGVQYWNrYWdlLkxpdGVyYWxzLlVOQVJZX0JPT0xFQU5fT1BFUkFUT1JfX09QRVJBTkQsCisJCQkJIFByZWRpY2F0ZUZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZU5vdCgpKSk7CisKKwkJbmV3Q2hpbGREZXNjcmlwdG9ycy5hZGQKKwkJCShjcmVhdGVDaGlsZFBhcmFtZXRlcgorCQkJCShQcmVkaWNhdGVQYWNrYWdlLkxpdGVyYWxzLlVOQVJZX0JPT0xFQU5fT1BFUkFUT1JfX09QRVJBTkQsCisJCQkJIFByZWRpY2F0ZUZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZU9yKCkpKTsKKworCQluZXdDaGlsZERlc2NyaXB0b3JzLmFkZAorCQkJKGNyZWF0ZUNoaWxkUGFyYW1ldGVyCisJCQkJKFByZWRpY2F0ZVBhY2thZ2UuTGl0ZXJhbHMuVU5BUllfQk9PTEVBTl9PUEVSQVRPUl9fT1BFUkFORCwKKwkJCQkgUHJlZGljYXRlRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlUHJlZGljYXRlUmVmZXJlbmNlKCkpKTsKKworCQluZXdDaGlsZERlc2NyaXB0b3JzLmFkZAorCQkJKGNyZWF0ZUNoaWxkUGFyYW1ldGVyCisJCQkJKFByZWRpY2F0ZVBhY2thZ2UuTGl0ZXJhbHMuVU5BUllfQk9PTEVBTl9PUEVSQVRPUl9fT1BFUkFORCwKKwkJCQkgUHJlZGljYXRlRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlVHJ1ZSgpKSk7CisKKwkJbmV3Q2hpbGREZXNjcmlwdG9ycy5hZGQKKwkJCShjcmVhdGVDaGlsZFBhcmFtZXRlcgorCQkJCShQcmVkaWNhdGVQYWNrYWdlLkxpdGVyYWxzLlVOQVJZX0JPT0xFQU5fT1BFUkFUT1JfX09QRVJBTkQsCisJCQkJIFByZWRpY2F0ZUZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZVByZWRpY2F0ZUV4cHJlc3Npb24oKSkpOworCisJCW5ld0NoaWxkRGVzY3JpcHRvcnMuYWRkCisJCQkoY3JlYXRlQ2hpbGRQYXJhbWV0ZXIKKwkJCQkoUHJlZGljYXRlUGFja2FnZS5MaXRlcmFscy5VTkFSWV9CT09MRUFOX09QRVJBVE9SX19PUEVSQU5ELAorCQkJCSBQcmVkaWNhdGVGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVJZGVudGlmaWFibGVQcmVkaWNhdGVFeHByZXNzaW9uKCkpKTsKKworCQluZXdDaGlsZERlc2NyaXB0b3JzLmFkZAorCQkJKGNyZWF0ZUNoaWxkUGFyYW1ldGVyCisJCQkJKFByZWRpY2F0ZVBhY2thZ2UuTGl0ZXJhbHMuVU5BUllfQk9PTEVBTl9PUEVSQVRPUl9fT1BFUkFORCwKKwkJCQkgUHJlZGljYXRlRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlRWxhcHNlZFRpbWVUZXN0KCkpKTsKKwl9CisKK30gLy8gVW5hcnlCb29sZWFuT3BlcmF0b3JJdGVtUHJvdmlkZXIKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvcHJlZGljYXRlL3V0aWwvUHJlZGljYXRlQWRhcHRlckZhY3RvcnkuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvcHJlZGljYXRlL3V0aWwvUHJlZGljYXRlQWRhcHRlckZhY3RvcnkuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MjM5MWEyCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9wcmVkaWNhdGUvdXRpbC9QcmVkaWNhdGVBZGFwdGVyRmFjdG9yeS5qYXZhCkBAIC0wLDAgKzEsNTA2IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUudXRpbDsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5BZGFwdGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LmltcGwuQWRhcHRlckZhY3RvcnlJbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uSWRlbnRpZmlhYmxlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uU2FuaXR5Q2hlY2tlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlLkFuZDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlLkJvb2xlYW5FeHByZXNzaW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUuQm9vbGVhbk9wZXJhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUuRWxhcHNlZFRpbWVUZXN0OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUuRmFsc2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZS5JZGVudGlmaWFibGVQcmVkaWNhdGU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZS5JZGVudGlmaWFibGVQcmVkaWNhdGVFeHByZXNzaW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUuSWRlbnRpZmlhYmxlVGVzdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlLk5hcnlCb29sZWFuT3BlcmF0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZS5Ob3Q7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZS5PcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlLlByZWRpY2F0ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlLlByZWRpY2F0ZUV4cHJlc3Npb247CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZS5QcmVkaWNhdGVQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUuUHJlZGljYXRlUmVmZXJlbmNlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUuVGVzdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlLlRpbWVUZXN0OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUuVHJ1ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlLlVuYXJ5Qm9vbGVhbk9wZXJhdG9yOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiBUaGUgPGI+QWRhcHRlciBGYWN0b3J5PC9iPiBmb3IgdGhlIG1vZGVsLgorICogSXQgcHJvdmlkZXMgYW4gYWRhcHRlciA8Y29kZT5jcmVhdGVYWFg8L2NvZGU+IG1ldGhvZCBmb3IgZWFjaCBjbGFzcyBvZiB0aGUgbW9kZWwuCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZS5QcmVkaWNhdGVQYWNrYWdlCisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBQcmVkaWNhdGVBZGFwdGVyRmFjdG9yeSBleHRlbmRzIEFkYXB0ZXJGYWN0b3J5SW1wbCB7CisJLyoqCisJICogVGhlIGNhY2hlZCBtb2RlbCBwYWNrYWdlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBzdGF0aWMgUHJlZGljYXRlUGFja2FnZSBtb2RlbFBhY2thZ2U7CisKKwkvKioKKwkgKiBDcmVhdGVzIGFuIGluc3RhbmNlIG9mIHRoZSBhZGFwdGVyIGZhY3RvcnkuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFByZWRpY2F0ZUFkYXB0ZXJGYWN0b3J5KCkgeworCQlpZiAobW9kZWxQYWNrYWdlID09IG51bGwpIHsKKwkJCW1vZGVsUGFja2FnZSA9IFByZWRpY2F0ZVBhY2thZ2UuZUlOU1RBTkNFOworCQl9CisJfQorCisJLyoqCisJICogUmV0dXJucyB3aGV0aGVyIHRoaXMgZmFjdG9yeSBpcyBhcHBsaWNhYmxlIGZvciB0aGUgdHlwZSBvZiB0aGUgb2JqZWN0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIDxjb2RlPnRydWU8L2NvZGU+IGlmIHRoZSBvYmplY3QgaXMgZWl0aGVyIHRoZSBtb2RlbCdzIHBhY2thZ2Ugb3IgaXMgYW4gaW5zdGFuY2Ugb2JqZWN0IG9mIHRoZSBtb2RlbC4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHdoZXRoZXIgdGhpcyBmYWN0b3J5IGlzIGFwcGxpY2FibGUgZm9yIHRoZSB0eXBlIG9mIHRoZSBvYmplY3QuCisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBib29sZWFuIGlzRmFjdG9yeUZvclR5cGUoT2JqZWN0IG9iamVjdCkgeworCQlpZiAob2JqZWN0ID09IG1vZGVsUGFja2FnZSkgeworCQkJcmV0dXJuIHRydWU7CisJCX0KKwkJaWYgKG9iamVjdCBpbnN0YW5jZW9mIEVPYmplY3QpIHsKKwkJCXJldHVybiAoKEVPYmplY3Qpb2JqZWN0KS5lQ2xhc3MoKS5nZXRFUGFja2FnZSgpID09IG1vZGVsUGFja2FnZTsKKwkJfQorCQlyZXR1cm4gZmFsc2U7CisJfQorCisJLyoqCisJICogVGhlIHN3aXRjaCB0aGF0IGRlbGVnYXRlcyB0byB0aGUgPGNvZGU+Y3JlYXRlWFhYPC9jb2RlPiBtZXRob2RzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBQcmVkaWNhdGVTd2l0Y2g8QWRhcHRlcj4gbW9kZWxTd2l0Y2ggPQorCQluZXcgUHJlZGljYXRlU3dpdGNoPEFkYXB0ZXI+KCkgeworCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgQWRhcHRlciBjYXNlQW5kKEFuZCBvYmplY3QpIHsKKwkJCQlyZXR1cm4gY3JlYXRlQW5kQWRhcHRlcigpOworCQkJfQorCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgQWRhcHRlciBjYXNlQm9vbGVhbkV4cHJlc3Npb24oQm9vbGVhbkV4cHJlc3Npb24gb2JqZWN0KSB7CisJCQkJcmV0dXJuIGNyZWF0ZUJvb2xlYW5FeHByZXNzaW9uQWRhcHRlcigpOworCQkJfQorCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgQWRhcHRlciBjYXNlQm9vbGVhbk9wZXJhdG9yKEJvb2xlYW5PcGVyYXRvciBvYmplY3QpIHsKKwkJCQlyZXR1cm4gY3JlYXRlQm9vbGVhbk9wZXJhdG9yQWRhcHRlcigpOworCQkJfQorCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgQWRhcHRlciBjYXNlRmFsc2UoRmFsc2Ugb2JqZWN0KSB7CisJCQkJcmV0dXJuIGNyZWF0ZUZhbHNlQWRhcHRlcigpOworCQkJfQorCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgQWRhcHRlciBjYXNlTmFyeUJvb2xlYW5PcGVyYXRvcihOYXJ5Qm9vbGVhbk9wZXJhdG9yIG9iamVjdCkgeworCQkJCXJldHVybiBjcmVhdGVOYXJ5Qm9vbGVhbk9wZXJhdG9yQWRhcHRlcigpOworCQkJfQorCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgQWRhcHRlciBjYXNlTm90KE5vdCBvYmplY3QpIHsKKwkJCQlyZXR1cm4gY3JlYXRlTm90QWRhcHRlcigpOworCQkJfQorCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgQWRhcHRlciBjYXNlT3IoT3Igb2JqZWN0KSB7CisJCQkJcmV0dXJuIGNyZWF0ZU9yQWRhcHRlcigpOworCQkJfQorCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgQWRhcHRlciBjYXNlUHJlZGljYXRlKFByZWRpY2F0ZSBvYmplY3QpIHsKKwkJCQlyZXR1cm4gY3JlYXRlUHJlZGljYXRlQWRhcHRlcigpOworCQkJfQorCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgQWRhcHRlciBjYXNlUHJlZGljYXRlUmVmZXJlbmNlKFByZWRpY2F0ZVJlZmVyZW5jZSBvYmplY3QpIHsKKwkJCQlyZXR1cm4gY3JlYXRlUHJlZGljYXRlUmVmZXJlbmNlQWRhcHRlcigpOworCQkJfQorCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgQWRhcHRlciBjYXNlVGVzdChUZXN0IG9iamVjdCkgeworCQkJCXJldHVybiBjcmVhdGVUZXN0QWRhcHRlcigpOworCQkJfQorCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgQWRhcHRlciBjYXNlVHJ1ZShUcnVlIG9iamVjdCkgeworCQkJCXJldHVybiBjcmVhdGVUcnVlQWRhcHRlcigpOworCQkJfQorCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgQWRhcHRlciBjYXNlVW5hcnlCb29sZWFuT3BlcmF0b3IoVW5hcnlCb29sZWFuT3BlcmF0b3Igb2JqZWN0KSB7CisJCQkJcmV0dXJuIGNyZWF0ZVVuYXJ5Qm9vbGVhbk9wZXJhdG9yQWRhcHRlcigpOworCQkJfQorCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgQWRhcHRlciBjYXNlUHJlZGljYXRlRXhwcmVzc2lvbihQcmVkaWNhdGVFeHByZXNzaW9uIG9iamVjdCkgeworCQkJCXJldHVybiBjcmVhdGVQcmVkaWNhdGVFeHByZXNzaW9uQWRhcHRlcigpOworCQkJfQorCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgQWRhcHRlciBjYXNlSWRlbnRpZmlhYmxlUHJlZGljYXRlKElkZW50aWZpYWJsZVByZWRpY2F0ZSBvYmplY3QpIHsKKwkJCQlyZXR1cm4gY3JlYXRlSWRlbnRpZmlhYmxlUHJlZGljYXRlQWRhcHRlcigpOworCQkJfQorCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgQWRhcHRlciBjYXNlSWRlbnRpZmlhYmxlUHJlZGljYXRlRXhwcmVzc2lvbihJZGVudGlmaWFibGVQcmVkaWNhdGVFeHByZXNzaW9uIG9iamVjdCkgeworCQkJCXJldHVybiBjcmVhdGVJZGVudGlmaWFibGVQcmVkaWNhdGVFeHByZXNzaW9uQWRhcHRlcigpOworCQkJfQorCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgQWRhcHRlciBjYXNlSWRlbnRpZmlhYmxlVGVzdChJZGVudGlmaWFibGVUZXN0IG9iamVjdCkgeworCQkJCXJldHVybiBjcmVhdGVJZGVudGlmaWFibGVUZXN0QWRhcHRlcigpOworCQkJfQorCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgQWRhcHRlciBjYXNlVGltZVRlc3QoVGltZVRlc3Qgb2JqZWN0KSB7CisJCQkJcmV0dXJuIGNyZWF0ZVRpbWVUZXN0QWRhcHRlcigpOworCQkJfQorCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgQWRhcHRlciBjYXNlRWxhcHNlZFRpbWVUZXN0KEVsYXBzZWRUaW1lVGVzdCBvYmplY3QpIHsKKwkJCQlyZXR1cm4gY3JlYXRlRWxhcHNlZFRpbWVUZXN0QWRhcHRlcigpOworCQkJfQorCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgPFQ+IEFkYXB0ZXIgY2FzZUNvbXBhcmFibGUoQ29tcGFyYWJsZTxUPiBvYmplY3QpIHsKKwkJCQlyZXR1cm4gY3JlYXRlQ29tcGFyYWJsZUFkYXB0ZXIoKTsKKwkJCX0KKwkJCUBPdmVycmlkZQorCQkJcHVibGljIEFkYXB0ZXIgY2FzZVNhbml0eUNoZWNrZXIoU2FuaXR5Q2hlY2tlciBvYmplY3QpIHsKKwkJCQlyZXR1cm4gY3JlYXRlU2FuaXR5Q2hlY2tlckFkYXB0ZXIoKTsKKwkJCX0KKwkJCUBPdmVycmlkZQorCQkJcHVibGljIEFkYXB0ZXIgY2FzZUlkZW50aWZpYWJsZShJZGVudGlmaWFibGUgb2JqZWN0KSB7CisJCQkJcmV0dXJuIGNyZWF0ZUlkZW50aWZpYWJsZUFkYXB0ZXIoKTsKKwkJCX0KKwkJCUBPdmVycmlkZQorCQkJcHVibGljIEFkYXB0ZXIgZGVmYXVsdENhc2UoRU9iamVjdCBvYmplY3QpIHsKKwkJCQlyZXR1cm4gY3JlYXRlRU9iamVjdEFkYXB0ZXIoKTsKKwkJCX0KKwkJfTsKKworCS8qKgorCSAqIENyZWF0ZXMgYW4gYWRhcHRlciBmb3IgdGhlIDxjb2RlPnRhcmdldDwvY29kZT4uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gdGFyZ2V0IHRoZSBvYmplY3QgdG8gYWRhcHQuCisJICogQHJldHVybiB0aGUgYWRhcHRlciBmb3IgdGhlIDxjb2RlPnRhcmdldDwvY29kZT4uCisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZUFkYXB0ZXIoTm90aWZpZXIgdGFyZ2V0KSB7CisJCXJldHVybiBtb2RlbFN3aXRjaC5kb1N3aXRjaCgoRU9iamVjdCl0YXJnZXQpOworCX0KKworCisJLyoqCisJICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlLkFuZCA8ZW0+QW5kPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsKKwkgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUuQW5kCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZUFuZEFkYXB0ZXIoKSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZS5Cb29sZWFuRXhwcmVzc2lvbiA8ZW0+Qm9vbGVhbiBFeHByZXNzaW9uPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsKKwkgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUuQm9vbGVhbkV4cHJlc3Npb24KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlQm9vbGVhbkV4cHJlc3Npb25BZGFwdGVyKCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUuQm9vbGVhbk9wZXJhdG9yIDxlbT5Cb29sZWFuIE9wZXJhdG9yPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsKKwkgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUuQm9vbGVhbk9wZXJhdG9yCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZUJvb2xlYW5PcGVyYXRvckFkYXB0ZXIoKSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZS5GYWxzZSA8ZW0+RmFsc2U8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOworCSAqIGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZSB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5LgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZS5GYWxzZQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVGYWxzZUFkYXB0ZXIoKSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZS5OYXJ5Qm9vbGVhbk9wZXJhdG9yIDxlbT5OYXJ5IEJvb2xlYW4gT3BlcmF0b3I8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOworCSAqIGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZSB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5LgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZS5OYXJ5Qm9vbGVhbk9wZXJhdG9yCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZU5hcnlCb29sZWFuT3BlcmF0b3JBZGFwdGVyKCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUuTm90IDxlbT5Ob3Q8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOworCSAqIGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZSB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5LgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZS5Ob3QKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlTm90QWRhcHRlcigpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlLk9yIDxlbT5PcjwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7CisJICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlLk9yCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZU9yQWRhcHRlcigpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlLlByZWRpY2F0ZSA8ZW0+UHJlZGljYXRlPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsKKwkgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUuUHJlZGljYXRlCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZVByZWRpY2F0ZUFkYXB0ZXIoKSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZS5QcmVkaWNhdGVSZWZlcmVuY2UgPGVtPlJlZmVyZW5jZTwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7CisJICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlLlByZWRpY2F0ZVJlZmVyZW5jZQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVQcmVkaWNhdGVSZWZlcmVuY2VBZGFwdGVyKCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUuVGVzdCA8ZW0+VGVzdDwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7CisJICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlLlRlc3QKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlVGVzdEFkYXB0ZXIoKSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZS5UcnVlIDxlbT5UcnVlPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsKKwkgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUuVHJ1ZQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVUcnVlQWRhcHRlcigpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlLlVuYXJ5Qm9vbGVhbk9wZXJhdG9yIDxlbT5VbmFyeSBCb29sZWFuIE9wZXJhdG9yPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsKKwkgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUuVW5hcnlCb29sZWFuT3BlcmF0b3IKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlVW5hcnlCb29sZWFuT3BlcmF0b3JBZGFwdGVyKCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUuUHJlZGljYXRlRXhwcmVzc2lvbiA8ZW0+RXhwcmVzc2lvbjwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7CisJICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlLlByZWRpY2F0ZUV4cHJlc3Npb24KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlUHJlZGljYXRlRXhwcmVzc2lvbkFkYXB0ZXIoKSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZS5JZGVudGlmaWFibGVQcmVkaWNhdGUgPGVtPklkZW50aWZpYWJsZSBQcmVkaWNhdGU8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOworCSAqIGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZSB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5LgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZS5JZGVudGlmaWFibGVQcmVkaWNhdGUKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlSWRlbnRpZmlhYmxlUHJlZGljYXRlQWRhcHRlcigpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlLklkZW50aWZpYWJsZVByZWRpY2F0ZUV4cHJlc3Npb24gPGVtPklkZW50aWZpYWJsZSBQcmVkaWNhdGUgRXhwcmVzc2lvbjwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7CisJICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlLklkZW50aWZpYWJsZVByZWRpY2F0ZUV4cHJlc3Npb24KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlSWRlbnRpZmlhYmxlUHJlZGljYXRlRXhwcmVzc2lvbkFkYXB0ZXIoKSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZS5JZGVudGlmaWFibGVUZXN0IDxlbT5JZGVudGlmaWFibGUgVGVzdDwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7CisJICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlLklkZW50aWZpYWJsZVRlc3QKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlSWRlbnRpZmlhYmxlVGVzdEFkYXB0ZXIoKSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZS5UaW1lVGVzdCA8ZW0+VGltZSBUZXN0PC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsKKwkgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUuVGltZVRlc3QKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlVGltZVRlc3RBZGFwdGVyKCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUuRWxhcHNlZFRpbWVUZXN0IDxlbT5FbGFwc2VkIFRpbWUgVGVzdDwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7CisJICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlLkVsYXBzZWRUaW1lVGVzdAorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVFbGFwc2VkVGltZVRlc3RBZGFwdGVyKCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIGphdmEubGFuZy5Db21wYXJhYmxlIDxlbT5Db21wYXJhYmxlPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsKKwkgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KKwkgKiBAc2VlIGphdmEubGFuZy5Db21wYXJhYmxlCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZUNvbXBhcmFibGVBZGFwdGVyKCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uU2FuaXR5Q2hlY2tlciA8ZW0+U2FuaXR5IENoZWNrZXI8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOworCSAqIGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZSB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5LgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5TYW5pdHlDaGVja2VyCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZVNhbml0eUNoZWNrZXJBZGFwdGVyKCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uSWRlbnRpZmlhYmxlIDxlbT5JZGVudGlmaWFibGU8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOworCSAqIGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZSB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5LgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5JZGVudGlmaWFibGUKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlSWRlbnRpZmlhYmxlQWRhcHRlcigpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciB0aGUgZGVmYXVsdCBjYXNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbC4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlRU9iamVjdEFkYXB0ZXIoKSB7CisJCXJldHVybiBudWxsOworCX0KKworfSAvL1ByZWRpY2F0ZUFkYXB0ZXJGYWN0b3J5CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3ByZWRpY2F0ZS91dGlsL1ByZWRpY2F0ZVN3aXRjaC5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9wcmVkaWNhdGUvdXRpbC9QcmVkaWNhdGVTd2l0Y2guamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MThhNThiCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9wcmVkaWNhdGUvdXRpbC9QcmVkaWNhdGVTd2l0Y2guamF2YQpAQCAtMCwwICsxLDYwNiBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlLnV0aWw7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworaW1wb3J0IGphdmEudXRpbC5MaXN0OworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzczsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLklkZW50aWZpYWJsZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLlNhbml0eUNoZWNrZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZS5BbmQ7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZS5Cb29sZWFuRXhwcmVzc2lvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlLkJvb2xlYW5PcGVyYXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlLkVsYXBzZWRUaW1lVGVzdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlLkZhbHNlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUuSWRlbnRpZmlhYmxlUHJlZGljYXRlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUuSWRlbnRpZmlhYmxlUHJlZGljYXRlRXhwcmVzc2lvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlLklkZW50aWZpYWJsZVRlc3Q7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZS5OYXJ5Qm9vbGVhbk9wZXJhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUuTm90OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUuT3I7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZS5QcmVkaWNhdGU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZS5QcmVkaWNhdGVFeHByZXNzaW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUuUHJlZGljYXRlUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlLlByZWRpY2F0ZVJlZmVyZW5jZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlLlRlc3Q7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZS5UaW1lVGVzdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlLlRydWU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZS5VbmFyeUJvb2xlYW5PcGVyYXRvcjsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogVGhlIDxiPlN3aXRjaDwvYj4gZm9yIHRoZSBtb2RlbCdzIGluaGVyaXRhbmNlIGhpZXJhcmNoeS4KKyAqIEl0IHN1cHBvcnRzIHRoZSBjYWxsIHtAbGluayAjZG9Td2l0Y2goRU9iamVjdCkgZG9Td2l0Y2gob2JqZWN0KX0KKyAqIHRvIGludm9rZSB0aGUgPGNvZGU+Y2FzZVhYWDwvY29kZT4gbWV0aG9kIGZvciBlYWNoIGNsYXNzIG9mIHRoZSBtb2RlbCwKKyAqIHN0YXJ0aW5nIHdpdGggdGhlIGFjdHVhbCBjbGFzcyBvZiB0aGUgb2JqZWN0CisgKiBhbmQgcHJvY2VlZGluZyB1cCB0aGUgaW5oZXJpdGFuY2UgaGllcmFyY2h5CisgKiB1bnRpbCBhIG5vbi1udWxsIHJlc3VsdCBpcyByZXR1cm5lZCwKKyAqIHdoaWNoIGlzIHRoZSByZXN1bHQgb2YgdGhlIHN3aXRjaC4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlLlByZWRpY2F0ZVBhY2thZ2UKKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIFByZWRpY2F0ZVN3aXRjaDxUMT4geworCS8qKgorCSAqIFRoZSBjYWNoZWQgbW9kZWwgcGFja2FnZQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBzdGF0aWMgUHJlZGljYXRlUGFja2FnZSBtb2RlbFBhY2thZ2U7CisKKwkvKioKKwkgKiBDcmVhdGVzIGFuIGluc3RhbmNlIG9mIHRoZSBzd2l0Y2guCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFByZWRpY2F0ZVN3aXRjaCgpIHsKKwkJaWYgKG1vZGVsUGFja2FnZSA9PSBudWxsKSB7CisJCQltb2RlbFBhY2thZ2UgPSBQcmVkaWNhdGVQYWNrYWdlLmVJTlNUQU5DRTsKKwkJfQorCX0KKworCS8qKgorCSAqIENhbGxzIDxjb2RlPmNhc2VYWFg8L2NvZGU+IGZvciBlYWNoIGNsYXNzIG9mIHRoZSBtb2RlbCB1bnRpbCBvbmUgcmV0dXJucyBhIG5vbiBudWxsIHJlc3VsdDsgaXQgeWllbGRzIHRoYXQgcmVzdWx0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgZmlyc3Qgbm9uLW51bGwgcmVzdWx0IHJldHVybmVkIGJ5IGEgPGNvZGU+Y2FzZVhYWDwvY29kZT4gY2FsbC4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFQxIGRvU3dpdGNoKEVPYmplY3QgdGhlRU9iamVjdCkgeworCQlyZXR1cm4gZG9Td2l0Y2godGhlRU9iamVjdC5lQ2xhc3MoKSwgdGhlRU9iamVjdCk7CisJfQorCisJLyoqCisJICogQ2FsbHMgPGNvZGU+Y2FzZVhYWDwvY29kZT4gZm9yIGVhY2ggY2xhc3Mgb2YgdGhlIG1vZGVsIHVudGlsIG9uZSByZXR1cm5zIGEgbm9uIG51bGwgcmVzdWx0OyBpdCB5aWVsZHMgdGhhdCByZXN1bHQuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBmaXJzdCBub24tbnVsbCByZXN1bHQgcmV0dXJuZWQgYnkgYSA8Y29kZT5jYXNlWFhYPC9jb2RlPiBjYWxsLgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgVDEgZG9Td2l0Y2goRUNsYXNzIHRoZUVDbGFzcywgRU9iamVjdCB0aGVFT2JqZWN0KSB7CisJCWlmICh0aGVFQ2xhc3MuZUNvbnRhaW5lcigpID09IG1vZGVsUGFja2FnZSkgeworCQkJcmV0dXJuIGRvU3dpdGNoKHRoZUVDbGFzcy5nZXRDbGFzc2lmaWVySUQoKSwgdGhlRU9iamVjdCk7CisJCX0KKwkJZWxzZSB7CisJCQlMaXN0PEVDbGFzcz4gZVN1cGVyVHlwZXMgPSB0aGVFQ2xhc3MuZ2V0RVN1cGVyVHlwZXMoKTsKKwkJCXJldHVybgorCQkJCWVTdXBlclR5cGVzLmlzRW1wdHkoKSA/CisJCQkJCWRlZmF1bHRDYXNlKHRoZUVPYmplY3QpIDoKKwkJCQkJZG9Td2l0Y2goZVN1cGVyVHlwZXMuZ2V0KDApLCB0aGVFT2JqZWN0KTsKKwkJfQorCX0KKworCS8qKgorCSAqIENhbGxzIDxjb2RlPmNhc2VYWFg8L2NvZGU+IGZvciBlYWNoIGNsYXNzIG9mIHRoZSBtb2RlbCB1bnRpbCBvbmUgcmV0dXJucyBhIG5vbiBudWxsIHJlc3VsdDsgaXQgeWllbGRzIHRoYXQgcmVzdWx0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgZmlyc3Qgbm9uLW51bGwgcmVzdWx0IHJldHVybmVkIGJ5IGEgPGNvZGU+Y2FzZVhYWDwvY29kZT4gY2FsbC4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIFQxIGRvU3dpdGNoKGludCBjbGFzc2lmaWVySUQsIEVPYmplY3QgdGhlRU9iamVjdCkgeworCQlzd2l0Y2ggKGNsYXNzaWZpZXJJRCkgeworCQkJY2FzZSBQcmVkaWNhdGVQYWNrYWdlLkFORDogeworCQkJCUFuZCBhbmQgPSAoQW5kKXRoZUVPYmplY3Q7CisJCQkJVDEgcmVzdWx0ID0gY2FzZUFuZChhbmQpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZU5hcnlCb29sZWFuT3BlcmF0b3IoYW5kKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VCb29sZWFuT3BlcmF0b3IoYW5kKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VCb29sZWFuRXhwcmVzc2lvbihhbmQpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZVByZWRpY2F0ZShhbmQpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gZGVmYXVsdENhc2UodGhlRU9iamVjdCk7CisJCQkJcmV0dXJuIHJlc3VsdDsKKwkJCX0KKwkJCWNhc2UgUHJlZGljYXRlUGFja2FnZS5CT09MRUFOX0VYUFJFU1NJT046IHsKKwkJCQlCb29sZWFuRXhwcmVzc2lvbiBib29sZWFuRXhwcmVzc2lvbiA9IChCb29sZWFuRXhwcmVzc2lvbil0aGVFT2JqZWN0OworCQkJCVQxIHJlc3VsdCA9IGNhc2VCb29sZWFuRXhwcmVzc2lvbihib29sZWFuRXhwcmVzc2lvbik7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlUHJlZGljYXRlKGJvb2xlYW5FeHByZXNzaW9uKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGRlZmF1bHRDYXNlKHRoZUVPYmplY3QpOworCQkJCXJldHVybiByZXN1bHQ7CisJCQl9CisJCQljYXNlIFByZWRpY2F0ZVBhY2thZ2UuQk9PTEVBTl9PUEVSQVRPUjogeworCQkJCUJvb2xlYW5PcGVyYXRvciBib29sZWFuT3BlcmF0b3IgPSAoQm9vbGVhbk9wZXJhdG9yKXRoZUVPYmplY3Q7CisJCQkJVDEgcmVzdWx0ID0gY2FzZUJvb2xlYW5PcGVyYXRvcihib29sZWFuT3BlcmF0b3IpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZUJvb2xlYW5FeHByZXNzaW9uKGJvb2xlYW5PcGVyYXRvcik7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlUHJlZGljYXRlKGJvb2xlYW5PcGVyYXRvcik7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBkZWZhdWx0Q2FzZSh0aGVFT2JqZWN0KTsKKwkJCQlyZXR1cm4gcmVzdWx0OworCQkJfQorCQkJY2FzZSBQcmVkaWNhdGVQYWNrYWdlLkZBTFNFOiB7CisJCQkJRmFsc2UgZmFsc2VfID0gKEZhbHNlKXRoZUVPYmplY3Q7CisJCQkJVDEgcmVzdWx0ID0gY2FzZUZhbHNlKGZhbHNlXyk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlVGVzdChmYWxzZV8pOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZVByZWRpY2F0ZShmYWxzZV8pOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gZGVmYXVsdENhc2UodGhlRU9iamVjdCk7CisJCQkJcmV0dXJuIHJlc3VsdDsKKwkJCX0KKwkJCWNhc2UgUHJlZGljYXRlUGFja2FnZS5OQVJZX0JPT0xFQU5fT1BFUkFUT1I6IHsKKwkJCQlOYXJ5Qm9vbGVhbk9wZXJhdG9yIG5hcnlCb29sZWFuT3BlcmF0b3IgPSAoTmFyeUJvb2xlYW5PcGVyYXRvcil0aGVFT2JqZWN0OworCQkJCVQxIHJlc3VsdCA9IGNhc2VOYXJ5Qm9vbGVhbk9wZXJhdG9yKG5hcnlCb29sZWFuT3BlcmF0b3IpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZUJvb2xlYW5PcGVyYXRvcihuYXJ5Qm9vbGVhbk9wZXJhdG9yKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VCb29sZWFuRXhwcmVzc2lvbihuYXJ5Qm9vbGVhbk9wZXJhdG9yKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VQcmVkaWNhdGUobmFyeUJvb2xlYW5PcGVyYXRvcik7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBkZWZhdWx0Q2FzZSh0aGVFT2JqZWN0KTsKKwkJCQlyZXR1cm4gcmVzdWx0OworCQkJfQorCQkJY2FzZSBQcmVkaWNhdGVQYWNrYWdlLk5PVDogeworCQkJCU5vdCBub3QgPSAoTm90KXRoZUVPYmplY3Q7CisJCQkJVDEgcmVzdWx0ID0gY2FzZU5vdChub3QpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZVVuYXJ5Qm9vbGVhbk9wZXJhdG9yKG5vdCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlQm9vbGVhbk9wZXJhdG9yKG5vdCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlQm9vbGVhbkV4cHJlc3Npb24obm90KTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VQcmVkaWNhdGUobm90KTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGRlZmF1bHRDYXNlKHRoZUVPYmplY3QpOworCQkJCXJldHVybiByZXN1bHQ7CisJCQl9CisJCQljYXNlIFByZWRpY2F0ZVBhY2thZ2UuT1I6IHsKKwkJCQlPciBvciA9IChPcil0aGVFT2JqZWN0OworCQkJCVQxIHJlc3VsdCA9IGNhc2VPcihvcik7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlTmFyeUJvb2xlYW5PcGVyYXRvcihvcik7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlQm9vbGVhbk9wZXJhdG9yKG9yKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VCb29sZWFuRXhwcmVzc2lvbihvcik7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlUHJlZGljYXRlKG9yKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGRlZmF1bHRDYXNlKHRoZUVPYmplY3QpOworCQkJCXJldHVybiByZXN1bHQ7CisJCQl9CisJCQljYXNlIFByZWRpY2F0ZVBhY2thZ2UuUFJFRElDQVRFOiB7CisJCQkJUHJlZGljYXRlIHByZWRpY2F0ZSA9IChQcmVkaWNhdGUpdGhlRU9iamVjdDsKKwkJCQlUMSByZXN1bHQgPSBjYXNlUHJlZGljYXRlKHByZWRpY2F0ZSk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBkZWZhdWx0Q2FzZSh0aGVFT2JqZWN0KTsKKwkJCQlyZXR1cm4gcmVzdWx0OworCQkJfQorCQkJY2FzZSBQcmVkaWNhdGVQYWNrYWdlLlBSRURJQ0FURV9SRUZFUkVOQ0U6IHsKKwkJCQlQcmVkaWNhdGVSZWZlcmVuY2UgcHJlZGljYXRlUmVmZXJlbmNlID0gKFByZWRpY2F0ZVJlZmVyZW5jZSl0aGVFT2JqZWN0OworCQkJCVQxIHJlc3VsdCA9IGNhc2VQcmVkaWNhdGVSZWZlcmVuY2UocHJlZGljYXRlUmVmZXJlbmNlKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VQcmVkaWNhdGUocHJlZGljYXRlUmVmZXJlbmNlKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGRlZmF1bHRDYXNlKHRoZUVPYmplY3QpOworCQkJCXJldHVybiByZXN1bHQ7CisJCQl9CisJCQljYXNlIFByZWRpY2F0ZVBhY2thZ2UuVEVTVDogeworCQkJCVRlc3QgdGVzdCA9IChUZXN0KXRoZUVPYmplY3Q7CisJCQkJVDEgcmVzdWx0ID0gY2FzZVRlc3QodGVzdCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlUHJlZGljYXRlKHRlc3QpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gZGVmYXVsdENhc2UodGhlRU9iamVjdCk7CisJCQkJcmV0dXJuIHJlc3VsdDsKKwkJCX0KKwkJCWNhc2UgUHJlZGljYXRlUGFja2FnZS5UUlVFOiB7CisJCQkJVHJ1ZSB0cnVlXyA9IChUcnVlKXRoZUVPYmplY3Q7CisJCQkJVDEgcmVzdWx0ID0gY2FzZVRydWUodHJ1ZV8pOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZVRlc3QodHJ1ZV8pOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZVByZWRpY2F0ZSh0cnVlXyk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBkZWZhdWx0Q2FzZSh0aGVFT2JqZWN0KTsKKwkJCQlyZXR1cm4gcmVzdWx0OworCQkJfQorCQkJY2FzZSBQcmVkaWNhdGVQYWNrYWdlLlVOQVJZX0JPT0xFQU5fT1BFUkFUT1I6IHsKKwkJCQlVbmFyeUJvb2xlYW5PcGVyYXRvciB1bmFyeUJvb2xlYW5PcGVyYXRvciA9IChVbmFyeUJvb2xlYW5PcGVyYXRvcil0aGVFT2JqZWN0OworCQkJCVQxIHJlc3VsdCA9IGNhc2VVbmFyeUJvb2xlYW5PcGVyYXRvcih1bmFyeUJvb2xlYW5PcGVyYXRvcik7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlQm9vbGVhbk9wZXJhdG9yKHVuYXJ5Qm9vbGVhbk9wZXJhdG9yKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VCb29sZWFuRXhwcmVzc2lvbih1bmFyeUJvb2xlYW5PcGVyYXRvcik7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlUHJlZGljYXRlKHVuYXJ5Qm9vbGVhbk9wZXJhdG9yKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGRlZmF1bHRDYXNlKHRoZUVPYmplY3QpOworCQkJCXJldHVybiByZXN1bHQ7CisJCQl9CisJCQljYXNlIFByZWRpY2F0ZVBhY2thZ2UuUFJFRElDQVRFX0VYUFJFU1NJT046IHsKKwkJCQlQcmVkaWNhdGVFeHByZXNzaW9uIHByZWRpY2F0ZUV4cHJlc3Npb24gPSAoUHJlZGljYXRlRXhwcmVzc2lvbil0aGVFT2JqZWN0OworCQkJCVQxIHJlc3VsdCA9IGNhc2VQcmVkaWNhdGVFeHByZXNzaW9uKHByZWRpY2F0ZUV4cHJlc3Npb24pOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZUJvb2xlYW5FeHByZXNzaW9uKHByZWRpY2F0ZUV4cHJlc3Npb24pOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZVByZWRpY2F0ZShwcmVkaWNhdGVFeHByZXNzaW9uKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGRlZmF1bHRDYXNlKHRoZUVPYmplY3QpOworCQkJCXJldHVybiByZXN1bHQ7CisJCQl9CisJCQljYXNlIFByZWRpY2F0ZVBhY2thZ2UuSURFTlRJRklBQkxFX1BSRURJQ0FURTogeworCQkJCUlkZW50aWZpYWJsZVByZWRpY2F0ZSBpZGVudGlmaWFibGVQcmVkaWNhdGUgPSAoSWRlbnRpZmlhYmxlUHJlZGljYXRlKXRoZUVPYmplY3Q7CisJCQkJVDEgcmVzdWx0ID0gY2FzZUlkZW50aWZpYWJsZVByZWRpY2F0ZShpZGVudGlmaWFibGVQcmVkaWNhdGUpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZUlkZW50aWZpYWJsZShpZGVudGlmaWFibGVQcmVkaWNhdGUpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZVByZWRpY2F0ZShpZGVudGlmaWFibGVQcmVkaWNhdGUpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZUNvbXBhcmFibGUoaWRlbnRpZmlhYmxlUHJlZGljYXRlKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VTYW5pdHlDaGVja2VyKGlkZW50aWZpYWJsZVByZWRpY2F0ZSk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBkZWZhdWx0Q2FzZSh0aGVFT2JqZWN0KTsKKwkJCQlyZXR1cm4gcmVzdWx0OworCQkJfQorCQkJY2FzZSBQcmVkaWNhdGVQYWNrYWdlLklERU5USUZJQUJMRV9QUkVESUNBVEVfRVhQUkVTU0lPTjogeworCQkJCUlkZW50aWZpYWJsZVByZWRpY2F0ZUV4cHJlc3Npb24gaWRlbnRpZmlhYmxlUHJlZGljYXRlRXhwcmVzc2lvbiA9IChJZGVudGlmaWFibGVQcmVkaWNhdGVFeHByZXNzaW9uKXRoZUVPYmplY3Q7CisJCQkJVDEgcmVzdWx0ID0gY2FzZUlkZW50aWZpYWJsZVByZWRpY2F0ZUV4cHJlc3Npb24oaWRlbnRpZmlhYmxlUHJlZGljYXRlRXhwcmVzc2lvbik7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlSWRlbnRpZmlhYmxlUHJlZGljYXRlKGlkZW50aWZpYWJsZVByZWRpY2F0ZUV4cHJlc3Npb24pOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZVByZWRpY2F0ZUV4cHJlc3Npb24oaWRlbnRpZmlhYmxlUHJlZGljYXRlRXhwcmVzc2lvbik7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlSWRlbnRpZmlhYmxlKGlkZW50aWZpYWJsZVByZWRpY2F0ZUV4cHJlc3Npb24pOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZUJvb2xlYW5FeHByZXNzaW9uKGlkZW50aWZpYWJsZVByZWRpY2F0ZUV4cHJlc3Npb24pOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZUNvbXBhcmFibGUoaWRlbnRpZmlhYmxlUHJlZGljYXRlRXhwcmVzc2lvbik7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlU2FuaXR5Q2hlY2tlcihpZGVudGlmaWFibGVQcmVkaWNhdGVFeHByZXNzaW9uKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VQcmVkaWNhdGUoaWRlbnRpZmlhYmxlUHJlZGljYXRlRXhwcmVzc2lvbik7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBkZWZhdWx0Q2FzZSh0aGVFT2JqZWN0KTsKKwkJCQlyZXR1cm4gcmVzdWx0OworCQkJfQorCQkJY2FzZSBQcmVkaWNhdGVQYWNrYWdlLklERU5USUZJQUJMRV9URVNUOiB7CisJCQkJSWRlbnRpZmlhYmxlVGVzdCBpZGVudGlmaWFibGVUZXN0ID0gKElkZW50aWZpYWJsZVRlc3QpdGhlRU9iamVjdDsKKwkJCQlUMSByZXN1bHQgPSBjYXNlSWRlbnRpZmlhYmxlVGVzdChpZGVudGlmaWFibGVUZXN0KTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VJZGVudGlmaWFibGVQcmVkaWNhdGUoaWRlbnRpZmlhYmxlVGVzdCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlVGVzdChpZGVudGlmaWFibGVUZXN0KTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VJZGVudGlmaWFibGUoaWRlbnRpZmlhYmxlVGVzdCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlUHJlZGljYXRlKGlkZW50aWZpYWJsZVRlc3QpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZUNvbXBhcmFibGUoaWRlbnRpZmlhYmxlVGVzdCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlU2FuaXR5Q2hlY2tlcihpZGVudGlmaWFibGVUZXN0KTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGRlZmF1bHRDYXNlKHRoZUVPYmplY3QpOworCQkJCXJldHVybiByZXN1bHQ7CisJCQl9CisJCQljYXNlIFByZWRpY2F0ZVBhY2thZ2UuVElNRV9URVNUOiB7CisJCQkJVGltZVRlc3QgdGltZVRlc3QgPSAoVGltZVRlc3QpdGhlRU9iamVjdDsKKwkJCQlUMSByZXN1bHQgPSBjYXNlVGltZVRlc3QodGltZVRlc3QpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZVRlc3QodGltZVRlc3QpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZVByZWRpY2F0ZSh0aW1lVGVzdCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBkZWZhdWx0Q2FzZSh0aGVFT2JqZWN0KTsKKwkJCQlyZXR1cm4gcmVzdWx0OworCQkJfQorCQkJY2FzZSBQcmVkaWNhdGVQYWNrYWdlLkVMQVBTRURfVElNRV9URVNUOiB7CisJCQkJRWxhcHNlZFRpbWVUZXN0IGVsYXBzZWRUaW1lVGVzdCA9IChFbGFwc2VkVGltZVRlc3QpdGhlRU9iamVjdDsKKwkJCQlUMSByZXN1bHQgPSBjYXNlRWxhcHNlZFRpbWVUZXN0KGVsYXBzZWRUaW1lVGVzdCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlVGltZVRlc3QoZWxhcHNlZFRpbWVUZXN0KTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VUZXN0KGVsYXBzZWRUaW1lVGVzdCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlUHJlZGljYXRlKGVsYXBzZWRUaW1lVGVzdCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBkZWZhdWx0Q2FzZSh0aGVFT2JqZWN0KTsKKwkJCQlyZXR1cm4gcmVzdWx0OworCQkJfQorCQkJZGVmYXVsdDogcmV0dXJuIGRlZmF1bHRDYXNlKHRoZUVPYmplY3QpOworCQl9CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+QW5kPC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7CisJICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCisJICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+QW5kPC9lbT4nLgorCSAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVDEgY2FzZUFuZChBbmQgb2JqZWN0KSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkJvb2xlYW4gRXhwcmVzc2lvbjwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOworCSAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgorCSAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkJvb2xlYW4gRXhwcmVzc2lvbjwvZW0+Jy4KKwkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFQxIGNhc2VCb29sZWFuRXhwcmVzc2lvbihCb29sZWFuRXhwcmVzc2lvbiBvYmplY3QpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+Qm9vbGVhbiBPcGVyYXRvcjwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOworCSAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgorCSAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkJvb2xlYW4gT3BlcmF0b3I8L2VtPicuCisJICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBUMSBjYXNlQm9vbGVhbk9wZXJhdG9yKEJvb2xlYW5PcGVyYXRvciBvYmplY3QpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+RmFsc2U8L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsKKwkgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KKwkgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5GYWxzZTwvZW0+Jy4KKwkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFQxIGNhc2VGYWxzZShGYWxzZSBvYmplY3QpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+TmFyeSBCb29sZWFuIE9wZXJhdG9yPC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7CisJICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCisJICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+TmFyeSBCb29sZWFuIE9wZXJhdG9yPC9lbT4nLgorCSAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVDEgY2FzZU5hcnlCb29sZWFuT3BlcmF0b3IoTmFyeUJvb2xlYW5PcGVyYXRvciBvYmplY3QpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+Tm90PC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7CisJICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCisJICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+Tm90PC9lbT4nLgorCSAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVDEgY2FzZU5vdChOb3Qgb2JqZWN0KSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPk9yPC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7CisJICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCisJICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+T3I8L2VtPicuCisJICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBUMSBjYXNlT3IoT3Igb2JqZWN0KSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPlByZWRpY2F0ZTwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOworCSAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgorCSAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPlByZWRpY2F0ZTwvZW0+Jy4KKwkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFQxIGNhc2VQcmVkaWNhdGUoUHJlZGljYXRlIG9iamVjdCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5SZWZlcmVuY2U8L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsKKwkgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KKwkgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5SZWZlcmVuY2U8L2VtPicuCisJICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBUMSBjYXNlUHJlZGljYXRlUmVmZXJlbmNlKFByZWRpY2F0ZVJlZmVyZW5jZSBvYmplY3QpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+VGVzdDwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOworCSAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgorCSAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPlRlc3Q8L2VtPicuCisJICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBUMSBjYXNlVGVzdChUZXN0IG9iamVjdCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5UcnVlPC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7CisJICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCisJICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+VHJ1ZTwvZW0+Jy4KKwkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFQxIGNhc2VUcnVlKFRydWUgb2JqZWN0KSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPlVuYXJ5IEJvb2xlYW4gT3BlcmF0b3I8L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsKKwkgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KKwkgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5VbmFyeSBCb29sZWFuIE9wZXJhdG9yPC9lbT4nLgorCSAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVDEgY2FzZVVuYXJ5Qm9vbGVhbk9wZXJhdG9yKFVuYXJ5Qm9vbGVhbk9wZXJhdG9yIG9iamVjdCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5FeHByZXNzaW9uPC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7CisJICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCisJICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+RXhwcmVzc2lvbjwvZW0+Jy4KKwkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFQxIGNhc2VQcmVkaWNhdGVFeHByZXNzaW9uKFByZWRpY2F0ZUV4cHJlc3Npb24gb2JqZWN0KSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPklkZW50aWZpYWJsZSBQcmVkaWNhdGU8L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsKKwkgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KKwkgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5JZGVudGlmaWFibGUgUHJlZGljYXRlPC9lbT4nLgorCSAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVDEgY2FzZUlkZW50aWZpYWJsZVByZWRpY2F0ZShJZGVudGlmaWFibGVQcmVkaWNhdGUgb2JqZWN0KSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPklkZW50aWZpYWJsZSBQcmVkaWNhdGUgRXhwcmVzc2lvbjwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOworCSAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgorCSAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPklkZW50aWZpYWJsZSBQcmVkaWNhdGUgRXhwcmVzc2lvbjwvZW0+Jy4KKwkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFQxIGNhc2VJZGVudGlmaWFibGVQcmVkaWNhdGVFeHByZXNzaW9uKElkZW50aWZpYWJsZVByZWRpY2F0ZUV4cHJlc3Npb24gb2JqZWN0KSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPklkZW50aWZpYWJsZSBUZXN0PC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7CisJICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCisJICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+SWRlbnRpZmlhYmxlIFRlc3Q8L2VtPicuCisJICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBUMSBjYXNlSWRlbnRpZmlhYmxlVGVzdChJZGVudGlmaWFibGVUZXN0IG9iamVjdCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5UaW1lIFRlc3Q8L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsKKwkgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KKwkgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5UaW1lIFRlc3Q8L2VtPicuCisJICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBUMSBjYXNlVGltZVRlc3QoVGltZVRlc3Qgb2JqZWN0KSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkVsYXBzZWQgVGltZSBUZXN0PC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7CisJICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCisJICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+RWxhcHNlZCBUaW1lIFRlc3Q8L2VtPicuCisJICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBUMSBjYXNlRWxhcHNlZFRpbWVUZXN0KEVsYXBzZWRUaW1lVGVzdCBvYmplY3QpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+Q29tcGFyYWJsZTwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOworCSAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgorCSAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkNvbXBhcmFibGU8L2VtPicuCisJICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyA8VD4gVDEgY2FzZUNvbXBhcmFibGUoQ29tcGFyYWJsZTxUPiBvYmplY3QpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+U2FuaXR5IENoZWNrZXI8L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsKKwkgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KKwkgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5TYW5pdHkgQ2hlY2tlcjwvZW0+Jy4KKwkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFQxIGNhc2VTYW5pdHlDaGVja2VyKFNhbml0eUNoZWNrZXIgb2JqZWN0KSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPklkZW50aWZpYWJsZTwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOworCSAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgorCSAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPklkZW50aWZpYWJsZTwvZW0+Jy4KKwkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFQxIGNhc2VJZGVudGlmaWFibGUoSWRlbnRpZmlhYmxlIG9iamVjdCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5FT2JqZWN0PC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7CisJICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2gsIGJ1dCB0aGlzIGlzIHRoZSBsYXN0IGNhc2UgYW55d2F5LgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgorCSAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkVPYmplY3Q8L2VtPicuCisJICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBUMSBkZWZhdWx0Q2FzZShFT2JqZWN0IG9iamVjdCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKK30gLy9QcmVkaWNhdGVTd2l0Y2gKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvc2NlbmFyaW8vU2NlbmFyaW8uamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvc2NlbmFyaW8vU2NlbmFyaW8uamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZmQ5NTU3Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9zY2VuYXJpby9TY2VuYXJpby5qYXZhCkBAIC0wLDAgKzEsMjY0IEBACisvLyBTY2VuYXJpby5qYXZhCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zY2VuYXJpbzsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuRUxpc3Q7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5JZGVudGlmaWFibGU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkdyYXBoOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5sb2dnZXIuTG9nZ2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5EZWNvcmF0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLk1vZGVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zZXF1ZW5jZXIuU2VxdWVuY2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zb2x2ZXIuU29sdmVyOworCisvKioKKyAqIEEgPGNvZGU+U2NlbmFyaW88L2NvZGU+IGNvbWJpbmVzIGFsbCBvZiB0aGUgY29tcG9uZW50cyByZXF1aXJlZCB0byBjcmVhdGUKKyAqIGFuZCBleGVjdXRlIGEgc2ltdWxhdGlvbi4gVGhlc2UgYXJlIGEge0BsaW5rIE1vZGVsfSwgYSB7QGxpbmsgU2VxdWVuY2VyfSwKKyAqIGFuZCBhIHNldCBvZiA8Y29kZT5TY2VuYXJpbzwvY29kZT4gc3BlY2lmaWMge0BsaW5rIERlY29yYXRvcn0ncy4KKyAqIDxwPgorICogVGhlIHtAbGluayBNb2RlbH0gY29udGFpbnMgdGhlIGRldGFpbHMgb2YgaG93IHRvIGNvbnN0cnVjdCB0aGUKKyAqIDxlbT5jYW5vbmljYWwgZ3JhcGg8L2VtPiAoc2VlIHtAbGluayBHcmFwaH0uIFRoaXMgZ3JhcGggaXMgd2hhdCB0aGUKKyAqIDxjb2RlPlNjZW5hcmlvPC9jb2RlPiB1c2VzIHRvIHJlcHJlc2VudCB0aGUgc3RhdGUgb2YgYSBzaW11bGF0aW9uLgorICogPHA+CisgKiBUaGUge0BsaW5rIFNlcXVlbmNlcn0gaXMgdXNlZCBieSB0aGUgPGNvZGU+U2NlbmFyaW88L2NvZGU+IHRvIGRldGVybWluZSB0aGUKKyAqIHNlcXVlbmNlIG9mIHBvaW50cyBpbiB0aW1lIHRocm91Z2ggd2hpY2ggdGhlIDxjb2RlPlNjZW5hcmlvPC9jb2RlPiB3aWxsCisgKiB7QGxpbmsgI3N0ZXAoKX0gYXMgaXQgY29tcHV0ZXMgc3VjY2Vzc2l2ZSBzaW11bGF0aW9uIHN0YXRlcy4KKyAqIDxwPgorICogVGhlICJzY2VuYXJpbyBkZWNvcmF0b3JzIiBpbXBsZW1lbnQgdGhhdCBwYXJ0IG9mIHRoZSBzaW11bGF0aW9uIGNvbXB1dGF0aW9uCisgKiB0aGF0IGlzIHNwZWNpZmljIHRvIHRoZSA8Y29kZT5TY2VuYXJpbzwvY29kZT4uCisgKiA8cD4KKyAqIEEgPGNvZGU+U2NlbmFyaW88L2NvZGU+IGltcGxlbWVudHMgYWxsIG9mIHRoZSBsb2dpYyBuZWNlc3NhcnkgdG8gc2VxdWVuY2UKKyAqIHRocm91Z2ggZWFjaCBzdGVwIG9mIGEgc2ltdWxhdGlvbiBhbmQgY2FuIGJlIGV4ZWN1dGVkIG91dHNpZGUgb2YgdGhlIEVjbGlwc2UKKyAqIHdvcmtiZW5jaC4KKyAqIDwvcD4KKyAqIDxwPgorICogVGhpcyBpbnRlcmZhY2UgZGVmaW5pdGlvbiBpcyBhbHNvIGFuICJBbm5vdGF0ZWQgSmF2YSBJbnRlcmZhY2UiIHRoYXQgZGVmaW5lcworICogb25lIGNsYXNzIGluIGEgPGEgaHJlZj0iaHR0cDovL3d3dy51bWwub3JnLyI+VU1MPC9hPiAibW9kZWwiLiBUaGUgVU1MIGNsYXNzCisgKiBkaWFncmFtIGZvciB0aGUgbW9kZWwgaXMgaW4gdGhlIDxjb2RlPmRvY3VtZW50YXRpb248L2NvZGU+IGZvbGRlciBvZiB0aGUKKyAqIHByb2plY3QuIFRoaXMgZmlsZSBhbmQgdGhlIG90aGVyIGludGVyZmFjZXMgaW4gdGhpcyBKYXZhIHBhY2thZ2UgYXJlCisgKiBwcm9jZXNzZWQgYnkgdGhlIEVjbGlwc2UgTW9kZWxpbmcgRnJhbWV3b3JrIChha2EgRU1GIDxhCisgKiBocmVmPSJodHRwOi8vb3JnLmVjbGlwc2UvZW1mIj5odHRwOi8vb3JnLmVjbGlwc2UvZW1mPC9hPikuIHRvIGF1dG9tYXRpY2FsbHkKKyAqIGdlbmVyYXRlIGFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBtb2RlbC4gRU1GIGlzIGRvY3VtZW50ZWQgaW4gdGhlIGJvb2sgPGEKKyAqIGhyZWY9Imh0dHA6Ly93d3cuYXdwcm9mZXNzaW9uYWwuY29tL2Jvb2tzdG9yZS9wcm9kdWN0LmFzcD9pc2JuPTAxMzE0MjU0MjAmcmw9MSI+RWNsaXBzZQorICogTW9kZWxpbmcgRnJhbWV3b3JrIDwvYT4gYnkgQnVkaW5za3ksIGV0IGFsLgorICogPC9wPgorICogCisgKiBAc2VlIE1vZGVsCisgKiBAc2VlIEdyYXBoCisgKiAKKyAqIEBtb2RlbAorICovCitwdWJsaWMgaW50ZXJmYWNlIFNjZW5hcmlvIGV4dGVuZHMgSWRlbnRpZmlhYmxlIHsKKworCS8qKgorCSAqIFRoaXMgaXMgdGhlIHNlZ21lbnQgb2YgdGhlIHR5cGUgVVJJIHRoYXQgcHJlZml4ZXMgYWxsIG90aGVyIHNlZ21lbnRzIGluIGEKKwkgKiBzY2VuYXJpbyBVUkkuCisJICovCisJU3RyaW5nIFVSSV9UWVBFX1NDRU5BUklPX1NFR01FTlQgPSAic2NlbmFyaW8iOworCQorCS8qKgorCSAqIFRoZSB7QGxpbmsgTW9kZWx9IGNvbnRhaW5zIGFsbCBvZiB0aGUgZGV0YWlscyByZXF1aXJlZCB0byBjb25zdHJ1Y3QgdGhlCisJICogY2Fub25pY2FsIGdyYXBoIHRoYXQgdGhlIHNjZW5hcmlvIHdpbGwgdXNlIHRvIHJlcHJlc2VudCB0aGUgc3RhdGUgb2YgYQorCSAqIHNpbXVsYXRpb24uCisJICogCisJICogQHJldHVybiB0aGUgU2NlbmFyaW8ncyB7QGxpbmsgTW9kZWx9LgorCSAqIEBtb2RlbCBjb250YWlubWVudD0iZmFsc2UiCisJICovCisJTW9kZWwgZ2V0TW9kZWwoKTsKKworCS8qKgorCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zY2VuYXJpby5TY2VuYXJpbyNnZXRNb2RlbCA8ZW0+TW9kZWw8L2VtPn0nIHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5Nb2RlbDwvZW0+JyByZWZlcmVuY2UuCisJICogQHNlZSAjZ2V0TW9kZWwoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwl2b2lkIHNldE1vZGVsKE1vZGVsIHZhbHVlKTsKKworCS8qKgorCSAqIFRoZSB7QGxpbmsgU2VxdWVuY2VyfSBpcyB0aGUgY29tcG9uZW50IHRoYXQgZGV0ZXJtaW5lcyB0aGUgdGltZSBvZiB0aGUKKwkgKiBzaW11bGF0aW9uLiBJdCBnZW5lcmF0ZXMge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5TVEVNVGltZX0KKwkgKiB2YWx1ZXMgdGhhdCBhcmUgdGhlbiB1c2VkIGJ5IHRoZSB7QGxpbmsgRGVjb3JhdG9yfSdzIHRvIHVwZGF0ZSB0aGUKKwkgKiB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkxhYmVsfSdzIGluIHRoZSBjYW5vbmljYWwgZ3JhcGguCisJICogCisJICogQG1vZGVsIGNvbnRhaW5tZW50PSJmYWxzZSIKKwkgKi8KKwlTZXF1ZW5jZXIgZ2V0U2VxdWVuY2VyKCk7CisKKwkvKioKKwkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2NlbmFyaW8uU2NlbmFyaW8jZ2V0U2VxdWVuY2VyIDxlbT5TZXF1ZW5jZXI8L2VtPn0nIHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5TZXF1ZW5jZXI8L2VtPicgcmVmZXJlbmNlLgorCSAqIEBzZWUgI2dldFNlcXVlbmNlcigpCisJICogQGdlbmVyYXRlZAorCSAqLworCXZvaWQgc2V0U2VxdWVuY2VyKFNlcXVlbmNlciB2YWx1ZSk7CisKKwkvKioKKwkgKiBUaGUgInNjZW5hcmlvIGRlY29yYXRvcnMiIGFyZSB0aGUge0BsaW5rIERlY29yYXRvcn0ncyB0aGF0IGNhbgorCSAqICJkZWNvcmF0ZSIgKGkuZS4sIG1vZGlmeSkgdGhlIGNhbm9uaWNhbCB7QGxpbmsgR3JhcGh9IGFmdGVyIGl0IGhhcyBiZWVuCisJICogZ2VuZXJhdGVkIGJ5IHRoZSB7QGxpbmsgTW9kZWx9LiBUeXBpY2FsbHksIHRoZXNlIGRlY29yYXRvcnMgYXJlIHVzZWQgdG8KKwkgKiBwcm92aWRlIHNjZW5hcmlvIHNwZWNpZmljIGluaXRpYWxpemF0aW9uIG9mIGEgc2ltdWxhdGlvbiBpbmRlcGVuZGVudCBvZgorCSAqIHRoZSBtb3JlIGdlbmVyYWwgaW5pdGlhbGl6YXRpb24gcHJvdmlkZWQgYnkgdGhlIGRlY29yYXRvcnMgaW4gdGhlCisJICoge0BsaW5rIE1vZGVsfS4KKwkgKiA8cD4KKwkgKiBGb3IgaW5zdGFuY2UsIGluIHRoZSBjYXNlIG9mIGEgZGlzZWFzZSBzaW11bGF0aW9uLCB0aGUgbW9kZWwgZGVjb3JhdG9ycworCSAqIHdvdWxkIGluY2x1ZGUgb25lIHRoYXQgaW1wbGVtZW50cyBhIGRpc2Vhc2UgbW9kZWwuIFRoYXQgZGVjb3JhdG9yIHdvdWxkCisJICogaGF2ZSBhZGRlZCBsYWJlbHMgdG8gYXBwcm9wcmlhdGUgbm9kZXMgdG8gcmVwcmVzZW50IHRoZSBzdGF0ZSBvZiB0aGUKKwkgKiBkaXNlYXNlIGF0IHNwZWNpZmljIGdlb2dyYXBoaWMgbG9jYXRpb25zIChsaWtlbHkgbW9zdCBvZiB0aGUKKwkgKiB7QGxpbmsgTm9kZXN9IGluIHRoZSB7QGxpbmsgR3JhcGh9KS4gSG93ZXZlciwgbm9uZSBvZiB0aGUgZGlzZWFzZSBzdGF0ZXMKKwkgKiB3b3VsZCAobGlrZWx5KSBpbmNsdWRlIGluZmVjdGVkIHBvcHVsYXRpb24gbWVtYmVycy4gVGhlIGpvYiBvZgorCSAqIGludHJvZHVjaW5nIHRoZSBpbmZlY3RlZCBwb3B1bGF0aW9uIG1lbWJlcnMgd291bGQgYmUgbGVmdCB1cCB0byBhCisJICogZGVjb3JhdG9yIGNvbnRhaW5lZCBpbiB0aGUgc2NlbmFyaW8uIFRodXMsIG9uZSBjb3VsZCByZXVzZSB0aGUgc2FtZQorCSAqIHVuZGVybHlpbmcge0BsaW5rIE1vZGVsfSBpbiBkaWZmZXJlbnQge0BsaW5rIFNjZW5hcmlvfSdzLiBFYWNoCisJICoge0BsaW5rIFNjZW5hcmlvfSwgaW4gdHVybiwgd291bGQgY29udGFpbiBhIHtAbGluayBEZWNvcmF0b3J9IGNvbmZpZ3VyZWQKKwkgKiBmb3IgYSBkaWZmZXJlbnQgaW5mZWN0aW9uIHN0YXJ0aW5nIHBvaW50LgorCSAqIDxwPgorCSAqIAorCSAqIEBzZWUgI2luaXRpYWxpemUoKQorCSAqIEBzZWUgI2dldENhbm9uaWNhbEdyYXBoKCkKKwkgKiAKKwkgKiBAcmV0dXJuIHRoZSBTY2VuYXJpbyBEZWNvcmF0b3JzCisJICogQG1vZGVsIHR5cGU9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5EZWNvcmF0b3IiCisJICogICAgICAgIGNvbnRhaW5tZW50PSJmYWxzZSIKKwkgKi8KKwlFTGlzdDxEZWNvcmF0b3I+IGdldFNjZW5hcmlvRGVjb3JhdG9ycygpOworCisJLyoqCisJICogVGhlIGNhbm9uaWNhbCB7QGxpbmsgR3JhcGh9IGlzIGNyZWF0ZWQgYnkgdGhlIHNjZW5hcmlvJ3Mge0BsaW5rIE1vZGVsfQorCSAqIHdoZW4gdGhlIG1ldGhvZCB7QGxpbmsgI2luaXRpYWxpemUoKX0gaXMgaW52b2tlZC4gVGhpcyBvY2N1cnMgZWl0aGVyIGJ5IGEKKwkgKiBkaXJlY3QgY2FsbCBvciBtb3JlIHR5cGljYWxseSBpbiB0aGUge0BsaW5rICNzdGVwKCl9IG1ldGhvZC4KKwkgKiAKKwkgKiBAcmV0dXJuIHRoZSBjYW5vbmljYWwgZ3JhcGgsIG9yIG51bGwgaWYgdGhlIFNjZW5hcmlvIGhhc24ndCBiZWVuCisJICogICAgICAgICBpbml0aWFsaXplZC4KKwkgKiAKKwkgKiBAbW9kZWwgcmVzb2x2ZVByb3hpZXM9ImZhbHNlIiBjaGFuZ2VhYmxlPSJmYWxzZSIKKwkgKi8KKwlHcmFwaCBnZXRDYW5vbmljYWxHcmFwaCgpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+UHJvZ3Jlc3M8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyA8Y29kZT4iMC4wIjwvY29kZT4uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8cD4KKwkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5Qcm9ncmVzczwvZW0+JyBhdHRyaWJ1dGUgaXNuJ3QgY2xlYXIsCisJICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLgorCSAqIDwvcD4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5Qcm9ncmVzczwvZW0+JyBhdHRyaWJ1dGUuCisJICogQHNlZSAjc2V0UHJvZ3Jlc3MoZG91YmxlKQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNjZW5hcmlvLlNjZW5hcmlvUGFja2FnZSNnZXRTY2VuYXJpb19Qcm9ncmVzcygpCisJICogQG1vZGVsIGRlZmF1bHQ9IjAuMCIgdHJhbnNpZW50PSJ0cnVlIgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlkb3VibGUgZ2V0UHJvZ3Jlc3MoKTsKKworCS8qKgorCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zY2VuYXJpby5TY2VuYXJpbyNnZXRQcm9ncmVzcyA8ZW0+UHJvZ3Jlc3M8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPlByb2dyZXNzPC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiBAc2VlICNnZXRQcm9ncmVzcygpCisJICogQGdlbmVyYXRlZAorCSAqLworCXZvaWQgc2V0UHJvZ3Jlc3MoZG91YmxlIHZhbHVlKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPlNvbHZlcjwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPHA+CisJICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+U29sdmVyPC9lbT4nIHJlZmVyZW5jZSBpc24ndCBjbGVhciwKKwkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uCisJICogPC9wPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPlNvbHZlcjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UuCisJICogQHNlZSAjc2V0U29sdmVyKFNvbHZlcikKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zY2VuYXJpby5TY2VuYXJpb1BhY2thZ2UjZ2V0U2NlbmFyaW9fU29sdmVyKCkKKwkgKiBAbW9kZWwgY29udGFpbm1lbnQ9InRydWUiCisJICogQGdlbmVyYXRlZAorCSAqLworCVNvbHZlciBnZXRTb2x2ZXIoKTsKKworCS8qKgorCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zY2VuYXJpby5TY2VuYXJpbyNnZXRTb2x2ZXIgPGVtPlNvbHZlcjwvZW0+fScgY29udGFpbm1lbnQgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+U29sdmVyPC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZS4KKwkgKiBAc2VlICNnZXRTb2x2ZXIoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwl2b2lkIHNldFNvbHZlcihTb2x2ZXIgdmFsdWUpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+TG9nZ2VyczwvYj48L2VtPicgcmVmZXJlbmNlIGxpc3QuCisJICogVGhlIGxpc3QgY29udGVudHMgYXJlIG9mIHR5cGUge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5sb2dnZXIuTG9nZ2VyfS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDxwPgorCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPkxvZ2dlcnM8L2VtPicgcmVmZXJlbmNlIGxpc3QgaXNuJ3QgY2xlYXIsCisJICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLgorCSAqIDwvcD4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5Mb2dnZXJzPC9lbT4nIHJlZmVyZW5jZSBsaXN0LgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNjZW5hcmlvLlNjZW5hcmlvUGFja2FnZSNnZXRTY2VuYXJpb19Mb2dnZXJzKCkKKwkgKiBAbW9kZWwKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUxpc3Q8TG9nZ2VyPiBnZXRMb2dnZXJzKCk7CisKKwkvKioKKwkgKiBTZXF1ZW5jZSB0aGUgbW9kZWwgYnkgb25lIHNpbXVsYXRpb24gc3RlcC4gVGhpcyBwZXJmb3JtcyBhbnkKKwkgKiBpbml0aWFsaXphdGlvbiByZXF1aXJlZCB0byBjcmVhdGUgdGhlIGNhbm9uaWNhbCB7QGxpbmsgR3JhcGh9LCBpZgorCSAqIG5lY2Vzc2FyeS4KKwkgKiAKKwkgKiBAcGFyYW0gbCBMaXN0ZW5lciB0aGF0IG5lZWRzIHRvIGJlIG5vdGlmaWVkIG9mIHByb2dyZXNzIG9mIGRlY29yYXRvcnMKKwkgKiBAc2VlICNpbml0aWFsaXplKCkKKwkgKiBAcmV0dXJuIDxjb2RlPnRydWU8L2NvZGU+IGlmIHRoZSBzZXF1ZW5jZSBjYW4gY29udGludWUsCisJICogICAgICAgICA8Y29kZT5mYWxzZTwvY29kZT4gaWYgdGhlIHNlcXVlbmNlIGhhcyBjb21wbGV0ZWQuCisJICogCisJICogQG1vZGVsIHZvbGF0aWxlPSJ0cnVlIiB0cmFuc2llbnQ9InRydWUiIGNoYW5nZWFibGU9ImZhbHNlIgorCSAqLworCWJvb2xlYW4gc3RlcCgpOworCQorCS8qKgorCSAqIFJlc2V0IHRoZSBzdGF0ZSBvZiB0aGUgY2Fub25pY2FsIHtAbGluayBHcmFwaH0gdG8gaXRzIGluaXRpYWwgc3RhdGUuIFRoaXMKKwkgKiBkb2VzIG5vdCBkZWxldGUgYW5kIHJlY3JlYXRlIHRoZSBjYW5vbmljYWwgZ3JhcGguCisJICogCisJICogQG1vZGVsIHZvbGF0aWxlPSJ0cnVlIiB0cmFuc2llbnQ9InRydWUiIGNoYW5nZWFibGU9ImZhbHNlIgorCSAqLworCXZvaWQgcmVzZXQoKTsKKworCS8qKgorCSAqIENyZWF0ZSB0aGUgY2Fub25pY2FsIHtAbGluayBHcmFwaH0gYW5kIHBlcmZvcm0gaW5pdGlhbGl6YXRpb24gc3RlcHMKKwkgKiByZXF1aXJlZCB0byBzZXF1ZW5jZSB0aGUgc2NlbmFyaW8uIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBieQorCSAqIHtAbGluayAjc3RlcCgpfSB3aGVuIGl0IG5lZWRzIHRvIGNyZWF0ZSB0aGUgY2Fub25pY2FsIHtAbGluayBHcmFwaH0uIEl0CisJICogY2FuIGJlIGNhbGxlZCBiZWZvcmUgYSBjYWxsIHRvIHtAbGluayAjc3RlcCgpfSB0byBjcmVhdGUgdGhlCisJICoge0BsaW5rIEdyYXBofS4KKwkgKiAKKwkgKiBAc2VlICNnZXRDYW5vbmljYWxHcmFwaCgpCisJICogCisJICogQG1vZGVsIHZvbGF0aWxlPSJ0cnVlIiB0cmFuc2llbnQ9InRydWUiIGNoYW5nZWFibGU9ImZhbHNlIgorCSAqLworCXZvaWQgaW5pdGlhbGl6ZSgpOworCisJLyoqCisJICogQHJldHVybiB0aGUgdGl0bGUgb2YgdGhlIHNjZW5hcmlvIGFzIHNwZWNpZmllZCBieSBpdHMKKwkgKiAgICAgICAgIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLkR1YmxpbkNvcmV9LCBvciwgaWYgbm8KKwkgKiAgICAgICAgIHRpdGxlIGlzIGRlZmluZWQsIHJldHVybiB0aGUgZW1wdHkgc3RyaW5nLgorCSAqIAorCSAqIEBzZWUgSWRlbnRpZmlhYmxlI2dldER1YmxpbkNvcmUoKQorCSAqIAorCSAqIEBtb2RlbCB2b2xhdGlsZT0idHJ1ZSIgdHJhbnNpZW50PSJ0cnVlIiBjaGFuZ2VhYmxlPSJmYWxzZSIKKwkgKi8KKwlTdHJpbmcgcHJvZHVjZVRpdGxlKCk7CisJCit9IC8vIFNjZW5hcmlvCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3NjZW5hcmlvL1NjZW5hcmlvRmFjdG9yeS5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9zY2VuYXJpby9TY2VuYXJpb0ZhY3RvcnkuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ODg3NWFhCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9zY2VuYXJpby9TY2VuYXJpb0ZhY3RvcnkuamF2YQpAQCAtMCwwICsxLDUxIEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zY2VuYXJpbzsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUZhY3Rvcnk7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIFRoZSA8Yj5GYWN0b3J5PC9iPiBmb3IgdGhlIG1vZGVsLgorICogSXQgcHJvdmlkZXMgYSBjcmVhdGUgbWV0aG9kIGZvciBlYWNoIG5vbi1hYnN0cmFjdCBjbGFzcyBvZiB0aGUgbW9kZWwuCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNjZW5hcmlvLlNjZW5hcmlvUGFja2FnZQorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgaW50ZXJmYWNlIFNjZW5hcmlvRmFjdG9yeSBleHRlbmRzIEVGYWN0b3J5IHsKKwkvKioKKwkgKiBUaGUgc2luZ2xldG9uIGluc3RhbmNlIG9mIHRoZSBmYWN0b3J5LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCVNjZW5hcmlvRmFjdG9yeSBlSU5TVEFOQ0UgPSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2NlbmFyaW8uaW1wbC5TY2VuYXJpb0ZhY3RvcnlJbXBsLmluaXQoKTsKKworCS8qKgorCSAqIFJldHVybnMgYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+U2NlbmFyaW88L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPlNjZW5hcmlvPC9lbT4nLgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlTY2VuYXJpbyBjcmVhdGVTY2VuYXJpbygpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgcGFja2FnZSBzdXBwb3J0ZWQgYnkgdGhpcyBmYWN0b3J5LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgcGFja2FnZSBzdXBwb3J0ZWQgYnkgdGhpcyBmYWN0b3J5LgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlTY2VuYXJpb1BhY2thZ2UgZ2V0U2NlbmFyaW9QYWNrYWdlKCk7CisKK30gLy9TY2VuYXJpb0ZhY3RvcnkKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvc2NlbmFyaW8vU2NlbmFyaW9QYWNrYWdlLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3NjZW5hcmlvL1NjZW5hcmlvUGFja2FnZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU5Yjk0MjUKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3NjZW5hcmlvL1NjZW5hcmlvUGFja2FnZS5qYXZhCkBAIC0wLDAgKzEsMzU1IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zY2VuYXJpbzsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8vaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQXR0cmlidXRlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQXR0cmlidXRlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FUmVmZXJlbmNlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uQ29tbW9uUGFja2FnZTsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogVGhlIDxiPlBhY2thZ2U8L2I+IGZvciB0aGUgbW9kZWwuCisgKiBJdCBjb250YWlucyBhY2Nlc3NvcnMgZm9yIHRoZSBtZXRhIG9iamVjdHMgdG8gcmVwcmVzZW50CisgKiA8dWw+CisgKiAgIDxsaT5lYWNoIGNsYXNzLDwvbGk+CisgKiAgIDxsaT5lYWNoIGZlYXR1cmUgb2YgZWFjaCBjbGFzcyw8L2xpPgorICogICA8bGk+ZWFjaCBlbnVtLDwvbGk+CisgKiAgIDxsaT5hbmQgZWFjaCBkYXRhIHR5cGU8L2xpPgorICogPC91bD4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2NlbmFyaW8uU2NlbmFyaW9GYWN0b3J5CisgKiBAbW9kZWwga2luZD0icGFja2FnZSIKKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGludGVyZmFjZSBTY2VuYXJpb1BhY2thZ2UgZXh0ZW5kcyBFUGFja2FnZSB7CisJLyoqCisJICogVGhlIHBhY2thZ2UgbmFtZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlTdHJpbmcgZU5BTUUgPSAic2NlbmFyaW8iOworCisJLyoqCisJICogVGhlIHBhY2thZ2UgbmFtZXNwYWNlIFVSSS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlTdHJpbmcgZU5TX1VSSSA9ICJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9zY2VuYXJpby5lY29yZSI7CisKKwkvKioKKwkgKiBUaGUgcGFja2FnZSBuYW1lc3BhY2UgbmFtZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlTdHJpbmcgZU5TX1BSRUZJWCA9ICJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2NlbmFyaW8iOworCisJLyoqCisJICogVGhlIHNpbmdsZXRvbiBpbnN0YW5jZSBvZiB0aGUgcGFja2FnZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlTY2VuYXJpb1BhY2thZ2UgZUlOU1RBTkNFID0gb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNjZW5hcmlvLmltcGwuU2NlbmFyaW9QYWNrYWdlSW1wbC5pbml0KCk7CisKKwkvKioKKwkgKiBUaGUgbWV0YSBvYmplY3QgaWQgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zY2VuYXJpby5pbXBsLlNjZW5hcmlvSW1wbCA8ZW0+U2NlbmFyaW88L2VtPn0nIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2NlbmFyaW8uaW1wbC5TY2VuYXJpb0ltcGwKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zY2VuYXJpby5pbXBsLlNjZW5hcmlvUGFja2FnZUltcGwjZ2V0U2NlbmFyaW8oKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlpbnQgU0NFTkFSSU8gPSAwOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlVSSTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNDRU5BUklPX19VUkkgPSBDb21tb25QYWNrYWdlLklERU5USUZJQUJMRV9fVVJJOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlR5cGUgVVJJPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU0NFTkFSSU9fX1RZUEVfVVJJID0gQ29tbW9uUGFja2FnZS5JREVOVElGSUFCTEVfX1RZUEVfVVJJOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkR1YmxpbiBDb3JlPC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU0NFTkFSSU9fX0RVQkxJTl9DT1JFID0gQ29tbW9uUGFja2FnZS5JREVOVElGSUFCTEVfX0RVQkxJTl9DT1JFOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPk1vZGVsPC9iPjwvZW0+JyByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU0NFTkFSSU9fX01PREVMID0gQ29tbW9uUGFja2FnZS5JREVOVElGSUFCTEVfRkVBVFVSRV9DT1VOVCArIDA7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+U2VxdWVuY2VyPC9iPjwvZW0+JyByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU0NFTkFSSU9fX1NFUVVFTkNFUiA9IENvbW1vblBhY2thZ2UuSURFTlRJRklBQkxFX0ZFQVRVUkVfQ09VTlQgKyAxOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlNjZW5hcmlvIERlY29yYXRvcnM8L2I+PC9lbT4nIHJlZmVyZW5jZSBsaXN0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNDRU5BUklPX19TQ0VOQVJJT19ERUNPUkFUT1JTID0gQ29tbW9uUGFja2FnZS5JREVOVElGSUFCTEVfRkVBVFVSRV9DT1VOVCArIDI7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+Q2Fub25pY2FsIEdyYXBoPC9iPjwvZW0+JyByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU0NFTkFSSU9fX0NBTk9OSUNBTF9HUkFQSCA9IENvbW1vblBhY2thZ2UuSURFTlRJRklBQkxFX0ZFQVRVUkVfQ09VTlQgKyAzOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlByb2dyZXNzPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU0NFTkFSSU9fX1BST0dSRVNTID0gQ29tbW9uUGFja2FnZS5JREVOVElGSUFCTEVfRkVBVFVSRV9DT1VOVCArIDQ7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+U29sdmVyPC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU0NFTkFSSU9fX1NPTFZFUiA9IENvbW1vblBhY2thZ2UuSURFTlRJRklBQkxFX0ZFQVRVUkVfQ09VTlQgKyA1OworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkxvZ2dlcnM8L2I+PC9lbT4nIHJlZmVyZW5jZSBsaXN0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNDRU5BUklPX19MT0dHRVJTID0gQ29tbW9uUGFja2FnZS5JREVOVElGSUFCTEVfRkVBVFVSRV9DT1VOVCArIDY7CisKKwkvKioKKwkgKiBUaGUgbnVtYmVyIG9mIHN0cnVjdHVyYWwgZmVhdHVyZXMgb2YgdGhlICc8ZW0+U2NlbmFyaW88L2VtPicgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU0NFTkFSSU9fRkVBVFVSRV9DT1VOVCA9IENvbW1vblBhY2thZ2UuSURFTlRJRklBQkxFX0ZFQVRVUkVfQ09VTlQgKyA3OworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNjZW5hcmlvLlNjZW5hcmlvIDxlbT5TY2VuYXJpbzwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJzxlbT5TY2VuYXJpbzwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zY2VuYXJpby5TY2VuYXJpbworCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQ2xhc3MgZ2V0U2NlbmFyaW8oKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgcmVmZXJlbmNlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNjZW5hcmlvLlNjZW5hcmlvI2dldE1vZGVsIDxlbT5Nb2RlbDwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIHJlZmVyZW5jZSAnPGVtPk1vZGVsPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNjZW5hcmlvLlNjZW5hcmlvI2dldE1vZGVsKCkKKwkgKiBAc2VlICNnZXRTY2VuYXJpbygpCisJICogQGdlbmVyYXRlZAorCSAqLworCUVSZWZlcmVuY2UgZ2V0U2NlbmFyaW9fTW9kZWwoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgcmVmZXJlbmNlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNjZW5hcmlvLlNjZW5hcmlvI2dldFNlcXVlbmNlciA8ZW0+U2VxdWVuY2VyPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgcmVmZXJlbmNlICc8ZW0+U2VxdWVuY2VyPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNjZW5hcmlvLlNjZW5hcmlvI2dldFNlcXVlbmNlcigpCisJICogQHNlZSAjZ2V0U2NlbmFyaW8oKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFUmVmZXJlbmNlIGdldFNjZW5hcmlvX1NlcXVlbmNlcigpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSByZWZlcmVuY2UgbGlzdCAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zY2VuYXJpby5TY2VuYXJpbyNnZXRTY2VuYXJpb0RlY29yYXRvcnMgPGVtPlNjZW5hcmlvIERlY29yYXRvcnM8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSByZWZlcmVuY2UgbGlzdCAnPGVtPlNjZW5hcmlvIERlY29yYXRvcnM8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2NlbmFyaW8uU2NlbmFyaW8jZ2V0U2NlbmFyaW9EZWNvcmF0b3JzKCkKKwkgKiBAc2VlICNnZXRTY2VuYXJpbygpCisJICogQGdlbmVyYXRlZAorCSAqLworCUVSZWZlcmVuY2UgZ2V0U2NlbmFyaW9fU2NlbmFyaW9EZWNvcmF0b3JzKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIHJlZmVyZW5jZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zY2VuYXJpby5TY2VuYXJpbyNnZXRDYW5vbmljYWxHcmFwaCA8ZW0+Q2Fub25pY2FsIEdyYXBoPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgcmVmZXJlbmNlICc8ZW0+Q2Fub25pY2FsIEdyYXBoPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNjZW5hcmlvLlNjZW5hcmlvI2dldENhbm9uaWNhbEdyYXBoKCkKKwkgKiBAc2VlICNnZXRTY2VuYXJpbygpCisJICogQGdlbmVyYXRlZAorCSAqLworCUVSZWZlcmVuY2UgZ2V0U2NlbmFyaW9fQ2Fub25pY2FsR3JhcGgoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNjZW5hcmlvLlNjZW5hcmlvI2dldFByb2dyZXNzIDxlbT5Qcm9ncmVzczwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPGVtPlByb2dyZXNzPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNjZW5hcmlvLlNjZW5hcmlvI2dldFByb2dyZXNzKCkKKwkgKiBAc2VlICNnZXRTY2VuYXJpbygpCisJICogQGdlbmVyYXRlZAorCSAqLworCUVBdHRyaWJ1dGUgZ2V0U2NlbmFyaW9fUHJvZ3Jlc3MoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgY29udGFpbm1lbnQgcmVmZXJlbmNlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNjZW5hcmlvLlNjZW5hcmlvI2dldFNvbHZlciA8ZW0+U29sdmVyPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgY29udGFpbm1lbnQgcmVmZXJlbmNlICc8ZW0+U29sdmVyPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNjZW5hcmlvLlNjZW5hcmlvI2dldFNvbHZlcigpCisJICogQHNlZSAjZ2V0U2NlbmFyaW8oKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFUmVmZXJlbmNlIGdldFNjZW5hcmlvX1NvbHZlcigpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSByZWZlcmVuY2UgbGlzdCAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zY2VuYXJpby5TY2VuYXJpbyNnZXRMb2dnZXJzIDxlbT5Mb2dnZXJzPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgcmVmZXJlbmNlIGxpc3QgJzxlbT5Mb2dnZXJzPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNjZW5hcmlvLlNjZW5hcmlvI2dldExvZ2dlcnMoKQorCSAqIEBzZWUgI2dldFNjZW5hcmlvKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRVJlZmVyZW5jZSBnZXRTY2VuYXJpb19Mb2dnZXJzKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBmYWN0b3J5IHRoYXQgY3JlYXRlcyB0aGUgaW5zdGFuY2VzIG9mIHRoZSBtb2RlbC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIGZhY3RvcnkgdGhhdCBjcmVhdGVzIHRoZSBpbnN0YW5jZXMgb2YgdGhlIG1vZGVsLgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlTY2VuYXJpb0ZhY3RvcnkgZ2V0U2NlbmFyaW9GYWN0b3J5KCk7CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIERlZmluZXMgbGl0ZXJhbHMgZm9yIHRoZSBtZXRhIG9iamVjdHMgdGhhdCByZXByZXNlbnQKKwkgKiA8dWw+CisJICogICA8bGk+ZWFjaCBjbGFzcyw8L2xpPgorCSAqICAgPGxpPmVhY2ggZmVhdHVyZSBvZiBlYWNoIGNsYXNzLDwvbGk+CisJICogICA8bGk+ZWFjaCBlbnVtLDwvbGk+CisJICogICA8bGk+YW5kIGVhY2ggZGF0YSB0eXBlPC9saT4KKwkgKiA8L3VsPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlpbnRlcmZhY2UgTGl0ZXJhbHMgIHsKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2NlbmFyaW8uaW1wbC5TY2VuYXJpb0ltcGwgPGVtPlNjZW5hcmlvPC9lbT59JyBjbGFzcy4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNjZW5hcmlvLmltcGwuU2NlbmFyaW9JbXBsCisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNjZW5hcmlvLmltcGwuU2NlbmFyaW9QYWNrYWdlSW1wbCNnZXRTY2VuYXJpbygpCisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVDbGFzcyBTQ0VOQVJJTyA9IGVJTlNUQU5DRS5nZXRTY2VuYXJpbygpOworCisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+TW9kZWw8L2I+PC9lbT4nIHJlZmVyZW5jZSBmZWF0dXJlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRVJlZmVyZW5jZSBTQ0VOQVJJT19fTU9ERUwgPSBlSU5TVEFOQ0UuZ2V0U2NlbmFyaW9fTW9kZWwoKTsKKworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPlNlcXVlbmNlcjwvYj48L2VtPicgcmVmZXJlbmNlIGZlYXR1cmUuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFUmVmZXJlbmNlIFNDRU5BUklPX19TRVFVRU5DRVIgPSBlSU5TVEFOQ0UuZ2V0U2NlbmFyaW9fU2VxdWVuY2VyKCk7CisKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5TY2VuYXJpbyBEZWNvcmF0b3JzPC9iPjwvZW0+JyByZWZlcmVuY2UgbGlzdCBmZWF0dXJlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRVJlZmVyZW5jZSBTQ0VOQVJJT19fU0NFTkFSSU9fREVDT1JBVE9SUyA9IGVJTlNUQU5DRS5nZXRTY2VuYXJpb19TY2VuYXJpb0RlY29yYXRvcnMoKTsKKworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPkNhbm9uaWNhbCBHcmFwaDwvYj48L2VtPicgcmVmZXJlbmNlIGZlYXR1cmUuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFUmVmZXJlbmNlIFNDRU5BUklPX19DQU5PTklDQUxfR1JBUEggPSBlSU5TVEFOQ0UuZ2V0U2NlbmFyaW9fQ2Fub25pY2FsR3JhcGgoKTsKKworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPlByb2dyZXNzPC9iPjwvZW0+JyBhdHRyaWJ1dGUgZmVhdHVyZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVBdHRyaWJ1dGUgU0NFTkFSSU9fX1BST0dSRVNTID0gZUlOU1RBTkNFLmdldFNjZW5hcmlvX1Byb2dyZXNzKCk7CisKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5Tb2x2ZXI8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBmZWF0dXJlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRVJlZmVyZW5jZSBTQ0VOQVJJT19fU09MVkVSID0gZUlOU1RBTkNFLmdldFNjZW5hcmlvX1NvbHZlcigpOworCisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+TG9nZ2VyczwvYj48L2VtPicgcmVmZXJlbmNlIGxpc3QgZmVhdHVyZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVSZWZlcmVuY2UgU0NFTkFSSU9fX0xPR0dFUlMgPSBlSU5TVEFOQ0UuZ2V0U2NlbmFyaW9fTG9nZ2VycygpOworCit9CisKK30gLy9TY2VuYXJpb1BhY2thZ2UKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvc2NlbmFyaW8vaW1wbC9TY2VuYXJpb0ZhY3RvcnlJbXBsLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3NjZW5hcmlvL2ltcGwvU2NlbmFyaW9GYWN0b3J5SW1wbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRlZjk3NjkKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3NjZW5hcmlvL2ltcGwvU2NlbmFyaW9GYWN0b3J5SW1wbC5qYXZhCkBAIC0wLDAgKzEsMTAzIEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zY2VuYXJpby5pbXBsOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAKKyAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4gCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIAorICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wIAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQgCisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbCAKKyAqIAorICogQ29udHJpYnV0b3JzOiAKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuaW1wbC5FRmFjdG9yeUltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnBsdWdpbi5FY29yZVBsdWdpbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2NlbmFyaW8uU2NlbmFyaW87CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNjZW5hcmlvLlNjZW5hcmlvRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2NlbmFyaW8uU2NlbmFyaW9QYWNrYWdlOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiBBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgbW9kZWwgPGI+RmFjdG9yeTwvYj4uCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIFNjZW5hcmlvRmFjdG9yeUltcGwgZXh0ZW5kcyBFRmFjdG9yeUltcGwgaW1wbGVtZW50cyBTY2VuYXJpb0ZhY3RvcnkgeworCS8qKgorCSAqIENyZWF0ZXMgdGhlIGRlZmF1bHQgZmFjdG9yeSBpbXBsZW1lbnRhdGlvbi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgc3RhdGljIFNjZW5hcmlvRmFjdG9yeSBpbml0KCkgeworCQl0cnkgeworCQkJU2NlbmFyaW9GYWN0b3J5IHRoZVNjZW5hcmlvRmFjdG9yeSA9IChTY2VuYXJpb0ZhY3RvcnkpRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RUZhY3RvcnkoImh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3NjZW5hcmlvLmVjb3JlIik7IC8vJE5PTi1OTFMtMSQgCisJCQlpZiAodGhlU2NlbmFyaW9GYWN0b3J5ICE9IG51bGwpIHsKKwkJCQlyZXR1cm4gdGhlU2NlbmFyaW9GYWN0b3J5OworCQkJfQorCQl9CisJCWNhdGNoIChFeGNlcHRpb24gZXhjZXB0aW9uKSB7CisJCQlFY29yZVBsdWdpbi5JTlNUQU5DRS5sb2coZXhjZXB0aW9uKTsKKwkJfQorCQlyZXR1cm4gbmV3IFNjZW5hcmlvRmFjdG9yeUltcGwoKTsKKwl9CisKKwkvKioKKwkgKiBDcmVhdGVzIGFuIGluc3RhbmNlIG9mIHRoZSBmYWN0b3J5LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBTY2VuYXJpb0ZhY3RvcnlJbXBsKCkgeworCQlzdXBlcigpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBFT2JqZWN0IGNyZWF0ZShFQ2xhc3MgZUNsYXNzKSB7CisJCXN3aXRjaCAoZUNsYXNzLmdldENsYXNzaWZpZXJJRCgpKSB7CisJCQljYXNlIFNjZW5hcmlvUGFja2FnZS5TQ0VOQVJJTzogcmV0dXJuIGNyZWF0ZVNjZW5hcmlvKCk7CisJCQlkZWZhdWx0OgorCQkJCXRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIlRoZSBjbGFzcyAnIiArIGVDbGFzcy5nZXROYW1lKCkgKyAiJyBpcyBub3QgYSB2YWxpZCBjbGFzc2lmaWVyIik7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAorCQl9CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFNjZW5hcmlvIGNyZWF0ZVNjZW5hcmlvKCkgeworCQlTY2VuYXJpb0ltcGwgc2NlbmFyaW8gPSBuZXcgU2NlbmFyaW9JbXBsKCk7CisJCXJldHVybiBzY2VuYXJpbzsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgU2NlbmFyaW9QYWNrYWdlIGdldFNjZW5hcmlvUGFja2FnZSgpIHsKKwkJcmV0dXJuIChTY2VuYXJpb1BhY2thZ2UpZ2V0RVBhY2thZ2UoKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBkZXByZWNhdGVkCisJICogQGdlbmVyYXRlZAorCSAqLworCUBEZXByZWNhdGVkCisJcHVibGljIHN0YXRpYyBTY2VuYXJpb1BhY2thZ2UgZ2V0UGFja2FnZSgpIHsKKwkJcmV0dXJuIFNjZW5hcmlvUGFja2FnZS5lSU5TVEFOQ0U7CisJfQorCit9IC8vU2NlbmFyaW9GYWN0b3J5SW1wbApkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9zY2VuYXJpby9pbXBsL1NjZW5hcmlvSW1wbC5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9zY2VuYXJpby9pbXBsL1NjZW5hcmlvSW1wbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ3MzY5ZjcKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3NjZW5hcmlvL2ltcGwvU2NlbmFyaW9JbXBsLmphdmEKQEAgLTAsMCArMSw3OTAgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNjZW5hcmlvLmltcGw7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIAorICogQ29weXJpZ2h0IChjKSAyMDA2LCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiAKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdCAKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sIAorICogCisgKiBDb250cmlidXRvcnM6IAorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiAKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworIAoraW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7CitpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247CitpbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbkNoYWluOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LmltcGwuQWRhcHRlckltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLkVMaXN0OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5VUkk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzczsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuSW50ZXJuYWxFT2JqZWN0OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5pbXBsLkVOb3RpZmljYXRpb25JbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS51dGlsLkVPYmplY3RSZXNvbHZpbmdFTGlzdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUudXRpbC5FY29yZVV0aWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLkNvcmVQbHVnaW47CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLlNURU1VUkk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5JZGVudGlmaWFibGU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5pbXBsLklkZW50aWZpYWJsZUZpbHRlckltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5pbXBsLklkZW50aWZpYWJsZUltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkdyYXBoOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5VbnJlc29sdmVkSWRlbnRpZmlhYmxlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5sb2dnZXIuTG9nZ2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5EZWNvcmF0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLkludGVncmF0aW9uRGVjb3JhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5Nb2RlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuTW9kZWxQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5TVEVNVGltZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2NlbmFyaW8uU2NlbmFyaW87CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNjZW5hcmlvLlNjZW5hcmlvUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2VxdWVuY2VyLlNlcXVlbmNlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc29sdmVyLlNvbHZlcjsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiBBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+U2NlbmFyaW88L2I+PC9lbT4nLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiA8cD4KKyAqIFRoZSBmb2xsb3dpbmcgZmVhdHVyZXMgYXJlIGltcGxlbWVudGVkOgorICogPHVsPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zY2VuYXJpby5pbXBsLlNjZW5hcmlvSW1wbCNnZXRNb2RlbCA8ZW0+TW9kZWw8L2VtPn08L2xpPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zY2VuYXJpby5pbXBsLlNjZW5hcmlvSW1wbCNnZXRTZXF1ZW5jZXIgPGVtPlNlcXVlbmNlcjwvZW0+fTwvbGk+CisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNjZW5hcmlvLmltcGwuU2NlbmFyaW9JbXBsI2dldFNjZW5hcmlvRGVjb3JhdG9ycyA8ZW0+U2NlbmFyaW8gRGVjb3JhdG9yczwvZW0+fTwvbGk+CisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNjZW5hcmlvLmltcGwuU2NlbmFyaW9JbXBsI2dldENhbm9uaWNhbEdyYXBoIDxlbT5DYW5vbmljYWwgR3JhcGg8L2VtPn08L2xpPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zY2VuYXJpby5pbXBsLlNjZW5hcmlvSW1wbCNnZXRQcm9ncmVzcyA8ZW0+UHJvZ3Jlc3M8L2VtPn08L2xpPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zY2VuYXJpby5pbXBsLlNjZW5hcmlvSW1wbCNnZXRTb2x2ZXIgPGVtPlNvbHZlcjwvZW0+fTwvbGk+CisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNjZW5hcmlvLmltcGwuU2NlbmFyaW9JbXBsI2dldExvZ2dlcnMgPGVtPkxvZ2dlcnM8L2VtPn08L2xpPgorICogPC91bD4KKyAqIDwvcD4KKyAqCisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBTY2VuYXJpb0ltcGwgZXh0ZW5kcyBJZGVudGlmaWFibGVJbXBsIGltcGxlbWVudHMgU2NlbmFyaW8geworCisJCisJLyoqCisJICogVGhpcyBpcyB0aGUge0BsaW5rIFVSSX0gdXNlZCB0byBpZGVudGlmeSB0aGUgY2Fub25pY2FsIHtAbGluayBHcmFwaH0gdXNlZCBkdXJpbmcgdGhlCisJICogc2ltdWxhdGlvbgorCSAqIAorCSAqIFRPRE8gaXMgdGhpcyB0aGUgcmlnaHQgVVJJIHRvIHVzZSBmb3IgY2Fub25pY2FsIGdyYXBocz8KKwkgKi8KKwlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIFVSSSBDQU5PTklDQUxfR1JBUEhfVVJJID0gVVJJCisJCQkuY3JlYXRlVVJJKCJzdGVtOmNhbm9uaWNhbGdyYXBoIik7CisJCisJLyoqCisJICogVGhpcyBmbGFnIGNvbnRyb2xzIHRoZSByZXBvcnRpbmcgb2YgZWFjaCBhbmQgZXZlcnkgdW5yZXNvbHZlZCAKKwkgKiB7QGxpbmsgSWRlbnRpZmlhYmxlfSByZWZlcmVuY2UgZW5jb3VudGVyZWQgd2hlbiBjcmVhdGluZyB0aGUgCisJICogY2Fub25pY2FsIHtAbGluayBHcmFwaH0uICBEZWZhdWx0OiA8Y29kZT5mYWxzZTwvY29kZT4KKwkgKi8KKwlwdWJsaWMgc3RhdGljIGJvb2xlYW4gcmVwb3J0RWFjaFVucmVzb2x2ZWRJZGVudGlmaWFibGUgPSB0cnVlOworCisJLyoqCisJICogVGhpcyBmbGFnIGNvbnRyb2xzIHRoZSByZXBvcnRpbmcgb2YgZGFuZ2xpbmcgYWlyIHRyYW5zcG9ydCBlZGdlcyAKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGJvb2xlYW4gcmVwb3J0RGFuZ2xpbmdBaXJUcmFuc3BvcnRFZGdlcyA9IGZhbHNlOyAKKworCS8qKgorCSAqIFRoaXMgZmxhZyBjb250cm9scyB0aGUgcmVwb3J0aW5nIG9mIGEgc2luZ2xlIHN1bW1hcnkgbWVzc2FnZSBvZiB0aGUgCisJICogbnVtYmVyIG9mIHVucmVzb2x2ZWQge0BsaW5rIElkZW50aWZpYWJsZX0gcmVmZXJlbmNlcyBlbmNvdW50ZXJlZCAKKwkgKiB3aGVuIGNyZWF0aW5nIHRoZSBjYW5vbmljYWwge0BsaW5rIEdyYXBofS4gRGVmYXVsdDogPGNvZGU+ZmFsc2U8L2NvZGU+CisJICovCisJcHVibGljIHN0YXRpYyBib29sZWFuIHJlcG9ydE51bWJlcm9mVW5yZXNvbHZlZElkZW50aWZpYWJsZXMgPSBmYWxzZTsKKwkKKwkvKioKKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRNb2RlbCgpIDxlbT5Nb2RlbDwvZW0+fScgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI2dldE1vZGVsKCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgTW9kZWwgbW9kZWw7CisKKwkvKioKKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRTZXF1ZW5jZXIoKSA8ZW0+U2VxdWVuY2VyPC9lbT59JyByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZ2V0U2VxdWVuY2VyKCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgU2VxdWVuY2VyIHNlcXVlbmNlcjsKKworCS8qKgorCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldFNjZW5hcmlvRGVjb3JhdG9ycygpIDxlbT5TY2VuYXJpbyBEZWNvcmF0b3JzPC9lbT59JyByZWZlcmVuY2UgbGlzdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNnZXRTY2VuYXJpb0RlY29yYXRvcnMoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBFTGlzdDxEZWNvcmF0b3I+IHNjZW5hcmlvRGVjb3JhdG9yczsKKworCS8qKgorCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldENhbm9uaWNhbEdyYXBoKCkgPGVtPkNhbm9uaWNhbCBHcmFwaDwvZW0+fScgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI2dldENhbm9uaWNhbEdyYXBoKCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgR3JhcGggY2Fub25pY2FsR3JhcGg7CisJCisJLyoqCisJICogVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldFByb2dyZXNzKCkgPGVtPlByb2dyZXNzPC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNnZXRQcm9ncmVzcygpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBkb3VibGUgUFJPR1JFU1NfRURFRkFVTFQgPSAwLjA7CisKKwkvKioKKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRQcm9ncmVzcygpIDxlbT5Qcm9ncmVzczwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZ2V0UHJvZ3Jlc3MoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBkb3VibGUgcHJvZ3Jlc3MgPSBQUk9HUkVTU19FREVGQVVMVDsKKworCQorCS8qKgorCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldFNvbHZlcigpIDxlbT5Tb2x2ZXI8L2VtPn0nIGNvbnRhaW5tZW50IHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI2dldFNvbHZlcigpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIFNvbHZlciBzb2x2ZXI7CisKKworCS8qKgorCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldExvZ2dlcnMoKSA8ZW0+TG9nZ2VyczwvZW0+fScgcmVmZXJlbmNlIGxpc3QuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNnZXRMb2dnZXJzKCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgRUxpc3Q8TG9nZ2VyPiBsb2dnZXJzOworCisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCXByb3RlY3RlZCBTY2VuYXJpb0ltcGwoKSB7CisJCXN1cGVyKCk7CisJCXNldFVSSShTVEVNVVJJLmNyZWF0ZVVSSShVUklfVFlQRV9TQ0VOQVJJT19TRUdNRU5UICsgIi8iCisJCQkJKyAgU1RFTVVSSS5nZW5lcmF0ZVVuaXF1ZVBhcnQoKSkpOworCQlzZXRUeXBlVVJJKFNURU1VUkkuU0NFTkFSSU9fVFlQRV9VUkkpOworCX0gLy8gU2NlbmFyaW9JbXBsCisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIEVDbGFzcyBlU3RhdGljQ2xhc3MoKSB7CisJCXJldHVybiBTY2VuYXJpb1BhY2thZ2UuTGl0ZXJhbHMuU0NFTkFSSU87CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBNb2RlbCBnZXRNb2RlbCgpIHsKKwkJaWYgKG1vZGVsICE9IG51bGwgJiYgbW9kZWwuZUlzUHJveHkoKSkgeworCQkJSW50ZXJuYWxFT2JqZWN0IG9sZE1vZGVsID0gKEludGVybmFsRU9iamVjdCltb2RlbDsKKwkJCW1vZGVsID0gKE1vZGVsKWVSZXNvbHZlUHJveHkob2xkTW9kZWwpOworCQkJaWYgKG1vZGVsICE9IG9sZE1vZGVsKSB7CisJCQkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQorCQkJCQllTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uUkVTT0xWRSwgU2NlbmFyaW9QYWNrYWdlLlNDRU5BUklPX19NT0RFTCwgb2xkTW9kZWwsIG1vZGVsKSk7CisJCQl9CisJCX0KKwkJcmV0dXJuIG1vZGVsOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBNb2RlbCBiYXNpY0dldE1vZGVsKCkgeworCQlyZXR1cm4gbW9kZWw7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIHNldE1vZGVsKE1vZGVsIG5ld01vZGVsKSB7CisJCU1vZGVsIG9sZE1vZGVsID0gbW9kZWw7CisJCW1vZGVsID0gbmV3TW9kZWw7CisJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkKKwkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIFNjZW5hcmlvUGFja2FnZS5TQ0VOQVJJT19fTU9ERUwsIG9sZE1vZGVsLCBtb2RlbCkpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgU2VxdWVuY2VyIGdldFNlcXVlbmNlcigpIHsKKwkJaWYgKHNlcXVlbmNlciAhPSBudWxsICYmIHNlcXVlbmNlci5lSXNQcm94eSgpKSB7CisJCQlJbnRlcm5hbEVPYmplY3Qgb2xkU2VxdWVuY2VyID0gKEludGVybmFsRU9iamVjdClzZXF1ZW5jZXI7CisJCQlzZXF1ZW5jZXIgPSAoU2VxdWVuY2VyKWVSZXNvbHZlUHJveHkob2xkU2VxdWVuY2VyKTsKKwkJCWlmIChzZXF1ZW5jZXIgIT0gb2xkU2VxdWVuY2VyKSB7CisJCQkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQorCQkJCQllTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uUkVTT0xWRSwgU2NlbmFyaW9QYWNrYWdlLlNDRU5BUklPX19TRVFVRU5DRVIsIG9sZFNlcXVlbmNlciwgc2VxdWVuY2VyKSk7CisJCQl9CisJCX0KKwkJcmV0dXJuIHNlcXVlbmNlcjsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgU2VxdWVuY2VyIGJhc2ljR2V0U2VxdWVuY2VyKCkgeworCQlyZXR1cm4gc2VxdWVuY2VyOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRTZXF1ZW5jZXIoU2VxdWVuY2VyIG5ld1NlcXVlbmNlcikgeworCQlTZXF1ZW5jZXIgb2xkU2VxdWVuY2VyID0gc2VxdWVuY2VyOworCQlzZXF1ZW5jZXIgPSBuZXdTZXF1ZW5jZXI7CisJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkKKwkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIFNjZW5hcmlvUGFja2FnZS5TQ0VOQVJJT19fU0VRVUVOQ0VSLCBvbGRTZXF1ZW5jZXIsIHNlcXVlbmNlcikpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogCisJICogVGhlIHZhbHVlIGlzIHNldCBpbiB7QGxpbmsgI2luaXRpYWxpemUoKX0gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBHcmFwaCBnZXRDYW5vbmljYWxHcmFwaCgpIHsKKwkJcmV0dXJuIGNhbm9uaWNhbEdyYXBoOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBkb3VibGUgZ2V0UHJvZ3Jlc3MoKSB7CisJCXJldHVybiBwcm9ncmVzczsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRQcm9ncmVzcyhkb3VibGUgbmV3UHJvZ3Jlc3MpIHsKKwkJZG91YmxlIG9sZFByb2dyZXNzID0gcHJvZ3Jlc3M7CisJCXByb2dyZXNzID0gbmV3UHJvZ3Jlc3M7CisJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkKKwkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIFNjZW5hcmlvUGFja2FnZS5TQ0VOQVJJT19fUFJPR1JFU1MsIG9sZFByb2dyZXNzLCBwcm9ncmVzcykpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBTb2x2ZXIgZ2V0U29sdmVyKCkgeworCQlyZXR1cm4gc29sdmVyOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBOb3RpZmljYXRpb25DaGFpbiBiYXNpY1NldFNvbHZlcihTb2x2ZXIgbmV3U29sdmVyLCBOb3RpZmljYXRpb25DaGFpbiBtc2dzKSB7CisJCVNvbHZlciBvbGRTb2x2ZXIgPSBzb2x2ZXI7CisJCXNvbHZlciA9IG5ld1NvbHZlcjsKKwkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKSB7CisJCQlFTm90aWZpY2F0aW9uSW1wbCBub3RpZmljYXRpb24gPSBuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgU2NlbmFyaW9QYWNrYWdlLlNDRU5BUklPX19TT0xWRVIsIG9sZFNvbHZlciwgbmV3U29sdmVyKTsKKwkJCWlmIChtc2dzID09IG51bGwpIG1zZ3MgPSBub3RpZmljYXRpb247IGVsc2UgbXNncy5hZGQobm90aWZpY2F0aW9uKTsKKwkJfQorCQlyZXR1cm4gbXNnczsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRTb2x2ZXIoU29sdmVyIG5ld1NvbHZlcikgeworCQlpZiAobmV3U29sdmVyICE9IHNvbHZlcikgeworCQkJTm90aWZpY2F0aW9uQ2hhaW4gbXNncyA9IG51bGw7CisJCQlpZiAoc29sdmVyICE9IG51bGwpCisJCQkJbXNncyA9ICgoSW50ZXJuYWxFT2JqZWN0KXNvbHZlcikuZUludmVyc2VSZW1vdmUodGhpcywgRU9QUE9TSVRFX0ZFQVRVUkVfQkFTRSAtIFNjZW5hcmlvUGFja2FnZS5TQ0VOQVJJT19fU09MVkVSLCBudWxsLCBtc2dzKTsKKwkJCWlmIChuZXdTb2x2ZXIgIT0gbnVsbCkKKwkJCQltc2dzID0gKChJbnRlcm5hbEVPYmplY3QpbmV3U29sdmVyKS5lSW52ZXJzZUFkZCh0aGlzLCBFT1BQT1NJVEVfRkVBVFVSRV9CQVNFIC0gU2NlbmFyaW9QYWNrYWdlLlNDRU5BUklPX19TT0xWRVIsIG51bGwsIG1zZ3MpOworCQkJbXNncyA9IGJhc2ljU2V0U29sdmVyKG5ld1NvbHZlciwgbXNncyk7CisJCQlpZiAobXNncyAhPSBudWxsKSBtc2dzLmRpc3BhdGNoKCk7CisJCX0KKwkJZWxzZSBpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpCisJCQllTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBTY2VuYXJpb1BhY2thZ2UuU0NFTkFSSU9fX1NPTFZFUiwgbmV3U29sdmVyLCBuZXdTb2x2ZXIpKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUxpc3Q8TG9nZ2VyPiBnZXRMb2dnZXJzKCkgeworCQlpZiAobG9nZ2VycyA9PSBudWxsKSB7CisJCQlsb2dnZXJzID0gbmV3IEVPYmplY3RSZXNvbHZpbmdFTGlzdDxMb2dnZXI+KExvZ2dlci5jbGFzcywgdGhpcywgU2NlbmFyaW9QYWNrYWdlLlNDRU5BUklPX19MT0dHRVJTKTsKKwkJfQorCQlyZXR1cm4gbG9nZ2VyczsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEByZXR1cm4gPGNvZGU+dHJ1ZTwvY29kZT4gaWYgaXQncyBvayB0byBjYWxsIHN0ZXAgYWdhaW4uCisJICogCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogCisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlwdWJsaWMgYm9vbGVhbiBzdGVwKCkgeworCQlib29sZWFuIHN1Y2Nlc3MgPSB0cnVlOworCQkvLyBJcyB0aGUgc2VxdWVuY2VyIGZpbmlzaGVkPworCQkKKwkJaWYgKCFnZXRTZXF1ZW5jZXIoKS5pc1RpbWVUb1N0b3AoKSkgeworCQkJLy8gTm8KKwkJCS8vIElzIHRoZXJlIGEgY2Fub25pY2FsIGdyYXBoPworCQkJaWYgKGdldENhbm9uaWNhbEdyYXBoKCkgPT0gbnVsbCkgeworCQkJCS8vIE5vCisJCQkJLy8gQ3JlYXRlIG9uZSB0aGVuLi4uCisJCQkJaW5pdGlhbGl6ZSgpOworCQkJfSAvLyBpZiBubyBjYW5vbmljYWwgZ3JhcGgKKworCQkJLy8gRXZlcnl0aGluZyBzaG91bGQgYmUgc2FuZQorCQkJYXNzZXJ0IHNhbmUoKTsKKworCQkJZmluYWwgU1RFTVRpbWUgY3VycmVudFRpbWUgPSBnZXRTZXF1ZW5jZXIoKS5nZXROZXh0VGltZSgpOworCQkJZmluYWwgbG9uZyB0aW1lRGVsdGEgPSBnZXRTZXF1ZW5jZXIoKS5nZXRUaW1lRGVsdGEoKTsKKwkJCQorCQkJLy8gRmlyc3QgcmVzZXQgdGhlIHByb2dyZXNzIG9mIGVhY2ggZGVjb3JhdG9yIHRvIDAuIE5lY2Vzc2FyeSBmb3IgdGhlIGl0ZXJhdGlvbiBwcm9ncmVzcworCQkJLy8gYmFyCisJCQlmb3IgKGZpbmFsIEl0ZXJhdG9yPERlY29yYXRvcj4gZGVjb3JhdG9ySXRlciA9IGdldENhbm9uaWNhbEdyYXBoKCkKKwkJCQkJLmdldERlY29yYXRvcnMoKS5pdGVyYXRvcigpOyBkZWNvcmF0b3JJdGVyLmhhc05leHQoKTspIHsKKwkJCQlmaW5hbCBEZWNvcmF0b3IgZGVjb3JhdG9yID0gZGVjb3JhdG9ySXRlci5uZXh0KCk7CisJCQkJZGVjb3JhdG9yLnNldFByb2dyZXNzKDAuMCk7CisJCQl9CisJCQkKKwkJCQorCQkJLy8gRG8gdGhlIG9uZSBzdGVwIHVzaW5nIHRoZSBjdXJyZW50IHNvbHZlcgorCQkJc3VjY2VzcyA9IGdldFNvbHZlcigpLnN0ZXAoY3VycmVudFRpbWUsIHRpbWVEZWx0YSwgZ2V0U2VxdWVuY2VyKCkuZ2V0Q3ljbGUoKSk7CisJCQkJCQkKKwkJCS8vIEV2ZXJ5dGhpbmcgc2hvdWxkIHN0aWxsIGJlIHNhbmUKKwkJCWFzc2VydCBzYW5lKCk7CisJCisJCQkvLyBPbmNlIGV2ZXJ5b25lIGlzIGRvbmUsIHdlIHRlbGwgdGhlIGdyYXBoIHRvIHN3aXRjaCBhbGwgdGhlCisJCQkvLyBkeW5hbWljIGxhYmVscyB0byB0aGVpciBuZXh0IHZhbHVlIGFuZCB0aGVuIHdlJ3JlIHJlYWR5IHRvIGRvCisJCQkvLyBpdCBhbGwgb3ZlciBhZ2Fpbi4KKwkJCWdldENhbm9uaWNhbEdyYXBoKCkuc3dpdGNoVG9OZXh0VmFsdWUoY3VycmVudFRpbWUpOworCQl9IC8vIGlmIHNlcXVlbmNlciBmaW5pc2hlZAorCQlpZihzdWNjZXNzKSBzdWNjZXNzID0gIWdldFNlcXVlbmNlcigpLmlzVGltZVRvU3RvcCgpOworCQlyZXR1cm4gc3VjY2VzczsKKwl9IC8vIHN0ZXAKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJcHVibGljIHZvaWQgcmVzZXQoKSB7CisJCS8vIFNldCB0aGUgc2VxdWVuY2VyIGJhY2sgdG8gaXRzIG9yaWdpbmFsIHN0YXRlLiBUaGUgc2VxdWVuY2VyIGRldGVybWluZXMKKwkJLy8gdGhlICJjdXJyZW50IiB0aW1lIG9mIHRoZSBzaW11bGF0aW9uLiBUaGlzIGlzIGEgdmFsdWUgdXNlZCB0byBjb21wdXRlCisJCS8vIHRoZSB2YWx1ZXMgb2YgZHluYW1pYyBsYWJlbHMgZm9yIGVhY2ggc3RlcCBvZiB0aGUgc2ltdWxhdGlvbi4KKwkJZ2V0U2VxdWVuY2VyKCkucmVzZXQoKTsKKwkJCisJCS8vICBOb3cgZ2l2ZSBlYWNoIGRlY29yYXRvciBhIGNoYW5jZSB0byByZXNldCBpdHMgZHluYW1pYworCQkvLyBsYWJlbHMgaW4gdGhlIGNhbm9uaWNhbCBncmFwaAorCQkKKwkJLy8gU0VEIGZpeC4gV2UgbmVlZCB0byByZXNldCB0aGUgZGlzZWFzZSBtb2RlbHMgZmlyc3Qgc2luY2UgdGhlIGluZmVjdG9ycworCQkvLyBpbm9jdWxhdG9ycyBkZXBlbmQgdXAgdGhvc2UgYmVpbmcgcmVzZXQgYmVmb3JlaGFuZC4KKwkJCisJCUFycmF5TGlzdDxEZWNvcmF0b3I+aW50RGVjb3JhdG9ycyA9IG5ldyBBcnJheUxpc3Q8RGVjb3JhdG9yPigpOworCQlBcnJheUxpc3Q8RGVjb3JhdG9yPm90aGVyRGVjb3JhdG9ycyA9IG5ldyBBcnJheUxpc3Q8RGVjb3JhdG9yPigpOworCQkKKwkJZm9yIChmaW5hbCBJdGVyYXRvcjxEZWNvcmF0b3I+IGdyYXBoRGVjb3JhdG9ySXRlciA9IGdldENhbm9uaWNhbEdyYXBoKCkuZ2V0RGVjb3JhdG9ycygpCisJCQkJLml0ZXJhdG9yKCk7IGdyYXBoRGVjb3JhdG9ySXRlci5oYXNOZXh0KCk7KSB7CisJCQlmaW5hbCBEZWNvcmF0b3IgZGVjb3JhdG9yID0gZ3JhcGhEZWNvcmF0b3JJdGVyCisJCQkJCS5uZXh0KCk7CisJCQlpZihkZWNvcmF0b3IgaW5zdGFuY2VvZiBJbnRlZ3JhdGlvbkRlY29yYXRvcilpbnREZWNvcmF0b3JzLmFkZChkZWNvcmF0b3IpOworCQkJZWxzZSBvdGhlckRlY29yYXRvcnMuYWRkKGRlY29yYXRvcik7CisJCX0KKwkJZm9yKERlY29yYXRvciBkZWNvcmF0b3I6aW50RGVjb3JhdG9ycyl7CisJCQkvLyBJcyB0aGUgRGVjb3JhdG9yIGVuYWJsZWQ/CisJCQlpZiAoZGVjb3JhdG9yLmlzRW5hYmxlZCgpKSB7CisJCQkJLy8gWWVzCisJCQkJZGVjb3JhdG9yLnJlc2V0TGFiZWxzKCk7CisJCQl9IC8vIGlmIAorCQkJCisJCQkvLyBSZXNldCB0aGUgc29sdmVyCisJCX0gLy8gZm9yIGVhY2ggZGVjb3JhdG9yCisJCWZvcihEZWNvcmF0b3IgZGVjb3JhdG9yOm90aGVyRGVjb3JhdG9ycyl7CisJCQkvLyBJcyB0aGUgRGVjb3JhdG9yIGVuYWJsZWQ/CisJCQlpZiAoZGVjb3JhdG9yLmlzRW5hYmxlZCgpKSB7CisJCQkJLy8gWWVzCisJCQkJZGVjb3JhdG9yLnJlc2V0TGFiZWxzKCk7CisJCQl9IC8vIGlmIAorCQkJCisJCQkvLyBSZXNldCB0aGUgc29sdmVyCisJCX0gLy8gZm9yIGVhY2ggZGVjb3JhdG9yCisJCisJCWdldFNvbHZlcigpLnJlc2V0KCk7CisJfS8vIHJlc2V0CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCXB1YmxpYyB2b2lkIGluaXRpYWxpemUoKSB7CisJCS8vIFNldCB0aGUgc2VxdWVuY2VyIGJhY2sgdG8gaXRzIG9yaWdpbmFsIHN0YXRlLiBUaGUgc2VxdWVuY2VyIGRldGVybWluZXMKKwkJLy8gdGhlICJjdXJyZW50IiB0aW1lIG9mIHRoZSBzaW11bGF0aW9uLiBUaGlzIGlzIGEgdmFsdWUgdXNlZCB0byBjb21wdXRlCisJCS8vIHRoZSB2YWx1ZXMgb2YgZHluYW1pYyBsYWJlbHMgZm9yIGVhY2ggc3RlcCBvZiB0aGUgc2ltdWxhdGlvbi4KKwkJZ2V0U2VxdWVuY2VyKCkucmVzZXQoKTsKKworCQkvLyBQcmVwYXJlIHRoZSBtb2RlbCBhbmQgcGVyZm9ybSBhbnkgcHJlLXByb2Nlc3Npbmcgc3RlcHMgbmVjZXNzYXJ5CisJCS8vIGJlZm9yZSB3ZSBiZWdpbgorCQlTVEVNVGltZSBzdGFydCA9IGdldFNlcXVlbmNlcigpLmdldFN0YXJ0VGltZSgpOworCQlnZXRNb2RlbCgpLnByZXBhcmUoc3RhcnQpOworCQkKKwkJLy8gR2V0IHRoZSBjYW5vbmljYWwgZ3JhcGggdGhhdCB3ZSdsbCB1c2UgZm9yIHRoZSBzaW11bGF0aW9uLiBJdAorCQkvLyBtYWludGFpbnMgYWxsIHN0YXRlIGluZm9ybWF0aW9uIGR1cmluZyB0aGUgc2ltdWxhdGlvbi4KKwkJY2Fub25pY2FsR3JhcGggPSBnZXRNb2RlbCgpLmdldENhbm9uaWNhbEdyYXBoKENBTk9OSUNBTF9HUkFQSF9VUkksIG5ldyBJZGVudGlmaWFibGVGaWx0ZXJJbXBsKGdldE1vZGVsKCkuZ2V0RHVibGluQ29yZSgpLmdldENvdmVyYWdlKCkpLCBzdGFydCk7CisKKwkJZ2V0Q2Fub25pY2FsR3JhcGgoKS5zZXRUaW1lKChTVEVNVGltZSkgRWNvcmVVdGlsLmNvcHkoZ2V0U2VxdWVuY2VyKCkKKwkJCQkuZ2V0Q3VycmVudFRpbWUoKSkpOworCisJCS8vCisJCS8vIENvbmZpcm0sIHJlLXZhbGlkYXRlIHRoZSBzZXQgb2YgdW5yZXNvbHZlZCBpZGVudGlmaWFibGVzLgorCQkvLyBCZWNhdXNlIHdlIGFkZCBncmFwaHMgdG8gZ3JhcGhzIGFuZCBtb2RlbHMgdG8gbW9kZWxzIHNvbWUgb2YgdGhlIAorCQkvLyB1bnJlc29sdmVkIGlkZW50aWZpYWJsZXMgZG8gbm90IHJlc29sdmUgdW50aWwgdGhlIHZlcnkgZW5kCisJCS8vIHRoaXMgbWV0aG9kIGRvZXMgdGhhdCBjaGVjayBvbiB0aGUgRklOQUwgY2Fub25pY2FsR3JhcGguCisJCS8vCisJCUl0ZXJhdG9yPFVucmVzb2x2ZWRJZGVudGlmaWFibGU+IHVucmVzb2x2ZWQgPSBnZXRDYW5vbmljYWxHcmFwaCgpLmdldFVucmVzb2x2ZWRJZGVudGlmaWFibGVzKCkuaXRlcmF0b3IoKTsKKwkJICB3aGlsZSAodW5yZXNvbHZlZC5oYXNOZXh0KCkpIHsKKwkJICAgVW5yZXNvbHZlZElkZW50aWZpYWJsZSB0ZW1wID0gdW5yZXNvbHZlZC5uZXh0KCk7CisJCSAgIAorCQkgICBpZiAoZ2V0Q2Fub25pY2FsR3JhcGgoKS5nZXROb2RlcygpLmdldCh0ZW1wLmdldFVucmVzb2x2ZWRVUkkoKSkgIT0gbnVsbCAKKwkJICAgICB8fCBnZXRDYW5vbmljYWxHcmFwaCgpLmdldEVkZ2VzKCkuZ2V0KHRlbXAuZ2V0VW5yZXNvbHZlZFVSSSgpKSAhPSBudWxsKSB7CisJCSAgICB1bnJlc29sdmVkLnJlbW92ZSgpOworCQkgICB9CisJCX0KKwkJLy8gSnVzdCBjaGVja2luZy4uLgorCQlhc3NlcnQgZ2V0Q2Fub25pY2FsR3JhcGgoKS5zYW5lKCk7CisKKwkJLy8gQWRkIHRoZSBhZGFwdG9ycyB0byBrZWVwIHRyYWNrIG9mIHRoZSBwcm9ncmVzcyBmb3IgZWFjaCBncmFwaCBkZWNvcmF0b3IKKwkJZmluYWwgZG91YmxlIG51bURlY29yYXRvcnMgPSB0aGlzLmdldENhbm9uaWNhbEdyYXBoKCkuZ2V0RGVjb3JhdG9ycygpLnNpemUoKTsKKwkJZmluYWwgU2NlbmFyaW8gc2VsZiA9IHRoaXM7CisJCWZvciAoZmluYWwgSXRlcmF0b3I8RGVjb3JhdG9yPiBzY2VuYXJpb0RlY29yYXRvcnMgPSB0aGlzLmdldENhbm9uaWNhbEdyYXBoKCkuZ2V0RGVjb3JhdG9ycygpCisJCQkJLml0ZXJhdG9yKCk7IHNjZW5hcmlvRGVjb3JhdG9ycy5oYXNOZXh0KCk7KSB7CisJCQlmaW5hbCBEZWNvcmF0b3IgZGVjb3JhdG9yID0gc2NlbmFyaW9EZWNvcmF0b3JzLm5leHQoKTsKKwkJCWRlY29yYXRvci5lQWRhcHRlcnMoKS5hZGQoCisJCQkJCW5ldyBBZGFwdGVySW1wbCgpIHsKKwkJCQkJCS8qKgorCQkJCQkJICAgKiBAb3ZlcnJpZGUKKwkJCQkJCSAgICovCisJCQkJCQkgIHB1YmxpYyB2b2lkIG5vdGlmeUNoYW5nZWQoTm90aWZpY2F0aW9uIG1zZykKKwkJCQkJCSAgeworCQkJCQkJCSAgRGVjb3JhdG9yIGRlY29yYXRvciA9IChEZWNvcmF0b3IpbXNnLmdldE5vdGlmaWVyKCk7CisJCQkJCQkJICBzd2l0Y2gobXNnLmdldEZlYXR1cmVJRChEZWNvcmF0b3IuY2xhc3MpKSB7CisJCQkJCQkJICAJY2FzZSBNb2RlbFBhY2thZ2UuREVDT1JBVE9SX19QUk9HUkVTUzoKKwkJCQkJCQkgIAkJZG91YmxlIGRlbHRhID0gKG1zZy5nZXROZXdEb3VibGVWYWx1ZSgpIC0gbXNnLmdldE9sZERvdWJsZVZhbHVlKCkpOworCQkJCQkJCSAgCQlkZWx0YSAvPSBudW1EZWNvcmF0b3JzOworCQkJCQkJCSAgCQlzZWxmLnNldFByb2dyZXNzKHNlbGYuZ2V0UHJvZ3Jlc3MoKStkZWx0YSk7CisJCQkJCQkJICB9CisJCQkJCQkgIH0KKwkJCQkJfQorCQkJKTsKKwkJfQorCQkKKwkJLy8gVGhlIHNjZW5hcmlvIGRlY29yYXRvcnMgYXJlIHJlZ3VsYXIgZGVjb3JhdG9ycyB0aGF0IGFyZSBhbGxvd2VkIHRvCisJCS8vIG1vZGlmaWVkIHRoZSBzdGF0ZSBvZiB0aGUgY2Fub25pY2FsIGdyYXBoIHRvIGN1c3RvbWl6ZSBpdCBmb3IgYQorCQkvLyBwYXJ0aWN1bGFyIHNjZW5hcmlvLiBBdCB0aGlzIHBvaW50IHRoZSBtb2RlbCBkZWNvcmF0b3JzIGhhdmUgZG9uZQorCQkvLyB0aGVpciBqb2IuIFRoZXkgd2VyZSBpbnZva2VkIGFib3ZlIGluIHRoZSBjYWxsIHRvCisJCS8vIGdldENhbm9uaWNhbEdyYXBoKCkuIE5vdyBpdCBpcyB0aGUgdHVybiBvZiB0aGUgc2NlbmFyaW8gZGVjb3JhdG9ycyB0bworCQkvLyBhZGQgdGhlaXIgZmluYWwgdG91Y2ggdG8gdGhlIGdyYXBoLiBUaGUgc2NlbmFyaW8gZGVjb3JhdG9ycyBuZWVkIHRvCisJCS8vIGJlIGNvcGllZCBob3dldmVyIHNvIHRoYXQgYW55IHN0YXRlIGluZm9ybWF0aW9uIHRoZXkgbWF5IGdlbmVyYXRlIGFuZAorCQkvLyByZXRhaW4gZG9lcyBub3QgYmVjb21lIHBhcnQgb2YgdGhlIHNjZW5hcmlvIGl0c2VsZi4gCisKKwkJQXJyYXlMaXN0PERlY29yYXRvcj5pbnREZWNvcmF0b3JzID0gbmV3IEFycmF5TGlzdDxEZWNvcmF0b3I+KCk7CisJCUFycmF5TGlzdDxEZWNvcmF0b3I+b3RoZXJEZWNvcmF0b3JzID0gbmV3IEFycmF5TGlzdDxEZWNvcmF0b3I+KCk7CisJCS8vIExldCB0aGUgc2NlbmFyaW8gZGVjb3JhdG9ycyBkZWNvcmF0ZSB0aGUgZ3JhcGgKKwkJZm9yIChmaW5hbCBJdGVyYXRvcjxEZWNvcmF0b3I+IHNjZW5hcmlvRGVjb3JhdG9ycyA9IHRoaXMuZ2V0U2NlbmFyaW9EZWNvcmF0b3JzKCkKKwkJCQkuaXRlcmF0b3IoKTsgc2NlbmFyaW9EZWNvcmF0b3JzLmhhc05leHQoKTspIHsKKwkJCWZpbmFsIERlY29yYXRvciBkZWNvcmF0b3IgPSAoRGVjb3JhdG9yKSBFY29yZVV0aWwuY29weShzY2VuYXJpb0RlY29yYXRvcnMubmV4dCgpKTsKKwkJCWlmKGRlY29yYXRvciBpbnN0YW5jZW9mIEludGVncmF0aW9uRGVjb3JhdG9yKWludERlY29yYXRvcnMuYWRkKGRlY29yYXRvcik7CisJCQllbHNlIG90aGVyRGVjb3JhdG9ycy5hZGQoZGVjb3JhdG9yKTsKKwkJfQorCQlmb3IoRGVjb3JhdG9yIGRlY29yYXRvcjppbnREZWNvcmF0b3JzKSB7CisJCQlnZXRDYW5vbmljYWxHcmFwaCgpLmdldERlY29yYXRvcnMoKS5hZGQoZGVjb3JhdG9yKTsKKwkJCWRlY29yYXRvci5kZWNvcmF0ZUdyYXBoKHN0YXJ0KTsKKwkJCWRlY29yYXRvci5zZXRHcmFwaERlY29yYXRlZCh0cnVlKTsKKwkJfSAKKwkJZm9yKERlY29yYXRvciBkZWNvcmF0b3I6b3RoZXJEZWNvcmF0b3JzKSB7CisJCQlnZXRDYW5vbmljYWxHcmFwaCgpLmdldERlY29yYXRvcnMoKS5hZGQoZGVjb3JhdG9yKTsKKwkJCWRlY29yYXRvci5kZWNvcmF0ZUdyYXBoKHN0YXJ0KTsKKwkJCWRlY29yYXRvci5zZXRHcmFwaERlY29yYXRlZCh0cnVlKTsKKwkJfSAKKworCQkKKwkJLy8gQXJlIHRoZXJlIGFueSB1bnJlc29sdmVkIGlkZW50aWZpYWJsZXMgaW4gdGhlIGNhbm9uaWNhbCBncmFwaCBhbmQgCisJCS8vIHNob3VsZCB3ZSByZXBvcnQgdGhlbT8KKwkJaWYgKCByZXBvcnRFYWNoVW5yZXNvbHZlZElkZW50aWZpYWJsZSAmJiBnZXRDYW5vbmljYWxHcmFwaCgpLmdldFVucmVzb2x2ZWRJZGVudGlmaWFibGVzKCkuc2l6ZSgpID4gMCkgeworCQkJLy8gWWVzCisJCQlsb2dVbnJlc29sdmVkSWRlbnRpZmlhYmxlcygpOworCQl9CisJCQorCQkvLyBBcmUgdGhlcmUgYW55IHVucmVzb2x2ZWQgaWRlbnRpZmlhYmxlcyBpbiB0aGUgY2Fub25pY2FsIGdyYXBoIGFuZCAKKwkJLy8gc2hvdWxkIHdlIHJlcG9ydCB0aGVpciBudW1iZXI/CisJCWlmICggcmVwb3J0TnVtYmVyb2ZVbnJlc29sdmVkSWRlbnRpZmlhYmxlcyAmJiBnZXRDYW5vbmljYWxHcmFwaCgpLmdldFVucmVzb2x2ZWRJZGVudGlmaWFibGVzKCkuc2l6ZSgpID4gMCkgeworCQkJLy8gWWVzCisJCQlsb2dOdW1iZXJPZlVucmVzb2x2ZWRJZGVudGlmaWFibGVzKCk7CisJCX0KKwl9IC8vIGluaXRpYWxpemUKKworCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogCisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlwdWJsaWMgU3RyaW5nIHByb2R1Y2VUaXRsZSgpIHsKKwkJU3RyaW5nIHJldFZhbHVlID0gdGhpcy5nZXRVUkkoKS5sYXN0U2VnbWVudCgpOworCQlpZihyZXRWYWx1ZS5jb250YWlucygiLiIpKQorCQkJcmV0dXJuIHJldFZhbHVlLnN1YnN0cmluZygwLCByZXRWYWx1ZS5pbmRleE9mKCIuIikpOworCQllbHNlIHJldHVybiByZXRWYWx1ZTsJCisJfSAvLyBwcm9kdWNlVGl0bGUKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBOb3RpZmljYXRpb25DaGFpbiBlSW52ZXJzZVJlbW92ZShJbnRlcm5hbEVPYmplY3Qgb3RoZXJFbmQsIGludCBmZWF0dXJlSUQsIE5vdGlmaWNhdGlvbkNoYWluIG1zZ3MpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJCWNhc2UgU2NlbmFyaW9QYWNrYWdlLlNDRU5BUklPX19TT0xWRVI6CisJCQkJcmV0dXJuIGJhc2ljU2V0U29sdmVyKG51bGwsIG1zZ3MpOworCQl9CisJCXJldHVybiBzdXBlci5lSW52ZXJzZVJlbW92ZShvdGhlckVuZCwgZmVhdHVyZUlELCBtc2dzKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVMaXN0PERlY29yYXRvcj4gZ2V0U2NlbmFyaW9EZWNvcmF0b3JzKCkgeworCQlpZiAoc2NlbmFyaW9EZWNvcmF0b3JzID09IG51bGwpIHsKKwkJCXNjZW5hcmlvRGVjb3JhdG9ycyA9IG5ldyBFT2JqZWN0UmVzb2x2aW5nRUxpc3Q8RGVjb3JhdG9yPihEZWNvcmF0b3IuY2xhc3MsIHRoaXMsIFNjZW5hcmlvUGFja2FnZS5TQ0VOQVJJT19fU0NFTkFSSU9fREVDT1JBVE9SUyk7CisJCX0KKwkJcmV0dXJuIHNjZW5hcmlvRGVjb3JhdG9yczsKKwl9CisKKwkvKioKKwkgKiBSZXBvcnQgdGhlIHVucmVzb2x2ZWQgSWRlbnRpZmlhYmxlcyBpbiB0aGUgY2Fub25pY2FsIGdyYXBoCisJICovCisJcHJpdmF0ZSB2b2lkIGxvZ1VucmVzb2x2ZWRJZGVudGlmaWFibGVzKCkgeworCQlmb3IgKEl0ZXJhdG9yPFVucmVzb2x2ZWRJZGVudGlmaWFibGU+IHVucmVzb2x2ZWRJdGVyID0gZ2V0Q2Fub25pY2FsR3JhcGgoKQorCQkJCS5nZXRVbnJlc29sdmVkSWRlbnRpZmlhYmxlcygpLml0ZXJhdG9yKCk7IHVucmVzb2x2ZWRJdGVyCisJCQkJLmhhc05leHQoKTspIHsKKwkJCWZpbmFsIFVucmVzb2x2ZWRJZGVudGlmaWFibGUgdW5yZXNvbHZlZElEID0gdW5yZXNvbHZlZEl0ZXIKKwkJCQkJLm5leHQoKTsKKwkJCQkKKwkJCUNvcmVQbHVnaW4ubG9nSW5mb3JtYXRpb24oIkluIHNjZW5hcmlvICIKKwkJCQkJKyBwcm9kdWNlVGl0bGUoKQorCQkJCQkrICJcIiwgbW9kZWwgXCIiCisJCQkJCSsgdW5yZXNvbHZlZElELmdldE1vZGVsKCkuZ2V0RHVibGluQ29yZSgpCisJCQkJCQkJLmdldFRpdGxlKCkKKwkJCQkJKyAiXCIsICB0aGUgVVJJIFwiIgorCQkJCQkrIHVucmVzb2x2ZWRJRC5nZXRVbnJlc29sdmVkVVJJKCkKKwkJCQkJKyAiXCIgd2FzIHVucmVzb2x2ZWQuIgorCQorCQkJLCBudWxsKTsKKwkJfSAvLyBmb3IgZWFjaCB1bnJlc29sdmVkIGlkZW50aWZpYWJsZQorCX0gLy8gcmVwb3J0VW5yZXNvbHZlZElkZW50aWZpYWJsZXMKKworCS8qKgorCSAqIFJlcG9ydCB0aGUgbnVtYmVyIG9mIHVucmVzb2x2ZWQgSWRlbnRpZmlhYmxlcyBpbiB0aGUgY2Fub25pY2FsIGdyYXBoLgorCSAqLworCXByaXZhdGUgdm9pZCBsb2dOdW1iZXJPZlVucmVzb2x2ZWRJZGVudGlmaWFibGVzKCkgeworCQlDb3JlUGx1Z2luLmxvZ0luZm9ybWF0aW9uKCJJbiBzY2VuYXJpbyBcIiIKKwkJCQkrIHByb2R1Y2VUaXRsZSgpCisJCQkJKyAiXCIsIHRoZXJlIHdlcmUgIgorCQkJCSsgZ2V0Q2Fub25pY2FsR3JhcGgoKS5nZXRVbnJlc29sdmVkSWRlbnRpZmlhYmxlcygpLnNpemUoKQorCQkJCSsgIiB1bnJlc29sdmVkIHJlZmVyZW5jZXMuIgorCQksIG51bGwpOworCQkKKwl9IC8vIGxvZ051bWJlck9mVW5yZXNvbHZlZElkZW50aWZpYWJsZXMKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgT2JqZWN0IGVHZXQoaW50IGZlYXR1cmVJRCwgYm9vbGVhbiByZXNvbHZlLCBib29sZWFuIGNvcmVUeXBlKSB7CisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7CisJCQljYXNlIFNjZW5hcmlvUGFja2FnZS5TQ0VOQVJJT19fTU9ERUw6CisJCQkJaWYgKHJlc29sdmUpIHJldHVybiBnZXRNb2RlbCgpOworCQkJCXJldHVybiBiYXNpY0dldE1vZGVsKCk7CisJCQljYXNlIFNjZW5hcmlvUGFja2FnZS5TQ0VOQVJJT19fU0VRVUVOQ0VSOgorCQkJCWlmIChyZXNvbHZlKSByZXR1cm4gZ2V0U2VxdWVuY2VyKCk7CisJCQkJcmV0dXJuIGJhc2ljR2V0U2VxdWVuY2VyKCk7CisJCQljYXNlIFNjZW5hcmlvUGFja2FnZS5TQ0VOQVJJT19fU0NFTkFSSU9fREVDT1JBVE9SUzoKKwkJCQlyZXR1cm4gZ2V0U2NlbmFyaW9EZWNvcmF0b3JzKCk7CisJCQljYXNlIFNjZW5hcmlvUGFja2FnZS5TQ0VOQVJJT19fQ0FOT05JQ0FMX0dSQVBIOgorCQkJCXJldHVybiBnZXRDYW5vbmljYWxHcmFwaCgpOworCQkJY2FzZSBTY2VuYXJpb1BhY2thZ2UuU0NFTkFSSU9fX1BST0dSRVNTOgorCQkJCXJldHVybiBnZXRQcm9ncmVzcygpOworCQkJY2FzZSBTY2VuYXJpb1BhY2thZ2UuU0NFTkFSSU9fX1NPTFZFUjoKKwkJCQlyZXR1cm4gZ2V0U29sdmVyKCk7CisJCQljYXNlIFNjZW5hcmlvUGFja2FnZS5TQ0VOQVJJT19fTE9HR0VSUzoKKwkJCQlyZXR1cm4gZ2V0TG9nZ2VycygpOworCQl9CisJCXJldHVybiBzdXBlci5lR2V0KGZlYXR1cmVJRCwgcmVzb2x2ZSwgY29yZVR5cGUpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAU3VwcHJlc3NXYXJuaW5ncygidW5jaGVja2VkIikKKwkJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgZVNldChpbnQgZmVhdHVyZUlELCBPYmplY3QgbmV3VmFsdWUpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJCWNhc2UgU2NlbmFyaW9QYWNrYWdlLlNDRU5BUklPX19NT0RFTDoKKwkJCQlzZXRNb2RlbCgoTW9kZWwpbmV3VmFsdWUpOworCQkJCXJldHVybjsKKwkJCWNhc2UgU2NlbmFyaW9QYWNrYWdlLlNDRU5BUklPX19TRVFVRU5DRVI6CisJCQkJc2V0U2VxdWVuY2VyKChTZXF1ZW5jZXIpbmV3VmFsdWUpOworCQkJCXJldHVybjsKKwkJCWNhc2UgU2NlbmFyaW9QYWNrYWdlLlNDRU5BUklPX19TQ0VOQVJJT19ERUNPUkFUT1JTOgorCQkJCWdldFNjZW5hcmlvRGVjb3JhdG9ycygpLmNsZWFyKCk7CisJCQkJZ2V0U2NlbmFyaW9EZWNvcmF0b3JzKCkuYWRkQWxsKChDb2xsZWN0aW9uPD8gZXh0ZW5kcyBEZWNvcmF0b3I+KW5ld1ZhbHVlKTsKKwkJCQlyZXR1cm47CisJCQljYXNlIFNjZW5hcmlvUGFja2FnZS5TQ0VOQVJJT19fUFJPR1JFU1M6CisJCQkJc2V0UHJvZ3Jlc3MoKERvdWJsZSluZXdWYWx1ZSk7CisJCQkJcmV0dXJuOworCQkJY2FzZSBTY2VuYXJpb1BhY2thZ2UuU0NFTkFSSU9fX1NPTFZFUjoKKwkJCQlzZXRTb2x2ZXIoKFNvbHZlciluZXdWYWx1ZSk7CisJCQkJcmV0dXJuOworCQkJY2FzZSBTY2VuYXJpb1BhY2thZ2UuU0NFTkFSSU9fX0xPR0dFUlM6CisJCQkJZ2V0TG9nZ2VycygpLmNsZWFyKCk7CisJCQkJZ2V0TG9nZ2VycygpLmFkZEFsbCgoQ29sbGVjdGlvbjw/IGV4dGVuZHMgTG9nZ2VyPiluZXdWYWx1ZSk7CisJCQkJcmV0dXJuOworCQl9CisJCXN1cGVyLmVTZXQoZmVhdHVyZUlELCBuZXdWYWx1ZSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGVVbnNldChpbnQgZmVhdHVyZUlEKSB7CisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7CisJCQljYXNlIFNjZW5hcmlvUGFja2FnZS5TQ0VOQVJJT19fTU9ERUw6CisJCQkJc2V0TW9kZWwoKE1vZGVsKW51bGwpOworCQkJCXJldHVybjsKKwkJCWNhc2UgU2NlbmFyaW9QYWNrYWdlLlNDRU5BUklPX19TRVFVRU5DRVI6CisJCQkJc2V0U2VxdWVuY2VyKChTZXF1ZW5jZXIpbnVsbCk7CisJCQkJcmV0dXJuOworCQkJY2FzZSBTY2VuYXJpb1BhY2thZ2UuU0NFTkFSSU9fX1NDRU5BUklPX0RFQ09SQVRPUlM6CisJCQkJZ2V0U2NlbmFyaW9EZWNvcmF0b3JzKCkuY2xlYXIoKTsKKwkJCQlyZXR1cm47CisJCQljYXNlIFNjZW5hcmlvUGFja2FnZS5TQ0VOQVJJT19fUFJPR1JFU1M6CisJCQkJc2V0UHJvZ3Jlc3MoUFJPR1JFU1NfRURFRkFVTFQpOworCQkJCXJldHVybjsKKwkJCWNhc2UgU2NlbmFyaW9QYWNrYWdlLlNDRU5BUklPX19TT0xWRVI6CisJCQkJc2V0U29sdmVyKChTb2x2ZXIpbnVsbCk7CisJCQkJcmV0dXJuOworCQkJY2FzZSBTY2VuYXJpb1BhY2thZ2UuU0NFTkFSSU9fX0xPR0dFUlM6CisJCQkJZ2V0TG9nZ2VycygpLmNsZWFyKCk7CisJCQkJcmV0dXJuOworCQl9CisJCXN1cGVyLmVVbnNldChmZWF0dXJlSUQpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgYm9vbGVhbiBlSXNTZXQoaW50IGZlYXR1cmVJRCkgeworCQlzd2l0Y2ggKGZlYXR1cmVJRCkgeworCQkJY2FzZSBTY2VuYXJpb1BhY2thZ2UuU0NFTkFSSU9fX01PREVMOgorCQkJCXJldHVybiBtb2RlbCAhPSBudWxsOworCQkJY2FzZSBTY2VuYXJpb1BhY2thZ2UuU0NFTkFSSU9fX1NFUVVFTkNFUjoKKwkJCQlyZXR1cm4gc2VxdWVuY2VyICE9IG51bGw7CisJCQljYXNlIFNjZW5hcmlvUGFja2FnZS5TQ0VOQVJJT19fU0NFTkFSSU9fREVDT1JBVE9SUzoKKwkJCQlyZXR1cm4gc2NlbmFyaW9EZWNvcmF0b3JzICE9IG51bGwgJiYgIXNjZW5hcmlvRGVjb3JhdG9ycy5pc0VtcHR5KCk7CisJCQljYXNlIFNjZW5hcmlvUGFja2FnZS5TQ0VOQVJJT19fQ0FOT05JQ0FMX0dSQVBIOgorCQkJCXJldHVybiBjYW5vbmljYWxHcmFwaCAhPSBudWxsOworCQkJY2FzZSBTY2VuYXJpb1BhY2thZ2UuU0NFTkFSSU9fX1BST0dSRVNTOgorCQkJCXJldHVybiBwcm9ncmVzcyAhPSBQUk9HUkVTU19FREVGQVVMVDsKKwkJCWNhc2UgU2NlbmFyaW9QYWNrYWdlLlNDRU5BUklPX19TT0xWRVI6CisJCQkJcmV0dXJuIHNvbHZlciAhPSBudWxsOworCQkJY2FzZSBTY2VuYXJpb1BhY2thZ2UuU0NFTkFSSU9fX0xPR0dFUlM6CisJCQkJcmV0dXJuIGxvZ2dlcnMgIT0gbnVsbCAmJiAhbG9nZ2Vycy5pc0VtcHR5KCk7CisJCX0KKwkJcmV0dXJuIHN1cGVyLmVJc1NldChmZWF0dXJlSUQpOworCX0KKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb21tb24uaW1wbC5JZGVudGlmaWFibGVJbXBsI3RvU3RyaW5nKCkKKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKSB7CisJCS8vIElmIHRoZXJlIGlzIGEgdGl0bGUgdGhlbiB3ZSB1c2UgdGhhdCBvdGhlcndpc2Ugd2UgbGV0IHRoZSBzdXBlciBjbGFzcworCQkvLyBoYW5kbGUgaXQKKwkJZmluYWwgU3RyaW5nIHRpdGxlID0gZ2V0RHVibGluQ29yZSgpLmdldFRpdGxlKCk7CisJCXJldHVybiAodGl0bGUgIT0gbnVsbCA/IHRpdGxlIDogc3VwZXIudG9TdHJpbmcoKSk7CisJfSAvLyB0b1N0cmluZworCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvbW1vbi5pbXBsLklkZW50aWZpYWJsZUltcGwjc2FuZSgpCisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgYm9vbGVhbiBzYW5lKCkgeworCQlib29sZWFuIHJldFZhbHVlID0gc3VwZXIuc2FuZSgpOworCisJCWlmIChyZXRWYWx1ZSAmJiBnZXRNb2RlbCgpICE9IG51bGwpIHsKKwkJCXJldFZhbHVlID0gcmV0VmFsdWUgJiYgZ2V0TW9kZWwoKS5zYW5lKCk7CisJCQlhc3NlcnQgcmV0VmFsdWU7CisJCX0KKworCQlpZiAocmV0VmFsdWUgJiYgZ2V0Q2Fub25pY2FsR3JhcGgoKSAhPSBudWxsKSB7CisJCQlyZXRWYWx1ZSA9IHJldFZhbHVlICYmIGdldENhbm9uaWNhbEdyYXBoKCkuc2FuZSgpOworCQkJYXNzZXJ0IHJldFZhbHVlOworCQl9CisKKwkJaWYgKHJldFZhbHVlICYmIGdldFNlcXVlbmNlcigpICE9IG51bGwpIHsKKwkJCXJldFZhbHVlID0gcmV0VmFsdWUgJiYgZ2V0U2VxdWVuY2VyKCkuc2FuZSgpOworCQkJYXNzZXJ0IHJldFZhbHVlOworCQl9CisKKwkJcmV0dXJuIHJldFZhbHVlOworCX0gLy8gc2FuZQorCit9IC8vIFNjZW5hcmlvSW1wbApkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9zY2VuYXJpby9pbXBsL1NjZW5hcmlvUGFja2FnZUltcGwuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvc2NlbmFyaW8vaW1wbC9TY2VuYXJpb1BhY2thZ2VJbXBsLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTUwZTA1NQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvc2NlbmFyaW8vaW1wbC9TY2VuYXJpb1BhY2thZ2VJbXBsLmphdmEKQEAgLTAsMCArMSwzMjggQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNjZW5hcmlvLmltcGw7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIAorICogQ29weXJpZ2h0IChjKSAyMDA2LCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiAKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdCAKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sIAorICogCisgKiBDb250cmlidXRvcnM6IAorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiAKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworIAorLy9pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVBdHRyaWJ1dGU7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUF0dHJpYnV0ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRVJlZmVyZW5jZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRWNvcmVQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5pbXBsLkVQYWNrYWdlSW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLkNvbW1vblBhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5pbXBsLkNvbW1vblBhY2thZ2VJbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5leHBlcmltZW50LkV4cGVyaW1lbnRQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5leHBlcmltZW50LmltcGwuRXhwZXJpbWVudFBhY2thZ2VJbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5HcmFwaFBhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmltcGwuR3JhcGhQYWNrYWdlSW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubG9nZ2VyLkxvZ2dlclBhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmxvZ2dlci5pbXBsLkxvZ2dlclBhY2thZ2VJbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5Nb2RlbFBhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLmltcGwuTW9kZWxQYWNrYWdlSW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuTW9kaWZpZXJQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5pbXBsLk1vZGlmaWVyUGFja2FnZUltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZS5QcmVkaWNhdGVQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUuaW1wbC5QcmVkaWNhdGVQYWNrYWdlSW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2NlbmFyaW8uU2NlbmFyaW87CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNjZW5hcmlvLlNjZW5hcmlvRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2NlbmFyaW8uU2NlbmFyaW9QYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zZXF1ZW5jZXIuU2VxdWVuY2VyUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2VxdWVuY2VyLmltcGwuU2VxdWVuY2VyUGFja2FnZUltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNvbHZlci5Tb2x2ZXJQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zb2x2ZXIuaW1wbC5Tb2x2ZXJQYWNrYWdlSW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUudHJpZ2dlci5UcmlnZ2VyUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUudHJpZ2dlci5pbXBsLlRyaWdnZXJQYWNrYWdlSW1wbDsKKworLy9pbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNlcXVlbmNlci5TZXF1ZW5jZXI7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIEFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBtb2RlbCA8Yj5QYWNrYWdlPC9iPi4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgU2NlbmFyaW9QYWNrYWdlSW1wbCBleHRlbmRzIEVQYWNrYWdlSW1wbCBpbXBsZW1lbnRzIFNjZW5hcmlvUGFja2FnZSB7CisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJpdmF0ZSBFQ2xhc3Mgc2NlbmFyaW9FQ2xhc3MgPSBudWxsOworCisJLyoqCisJICogQ3JlYXRlcyBhbiBpbnN0YW5jZSBvZiB0aGUgbW9kZWwgPGI+UGFja2FnZTwvYj4sIHJlZ2lzdGVyZWQgd2l0aAorCSAqIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRVBhY2thZ2UuUmVnaXN0cnkgRVBhY2thZ2UuUmVnaXN0cnl9IGJ5IHRoZSBwYWNrYWdlCisJICogcGFja2FnZSBVUkkgdmFsdWUuCisJICogPHA+Tm90ZTogdGhlIGNvcnJlY3Qgd2F5IHRvIGNyZWF0ZSB0aGUgcGFja2FnZSBpcyB2aWEgdGhlIHN0YXRpYworCSAqIGZhY3RvcnkgbWV0aG9kIHtAbGluayAjaW5pdCBpbml0KCl9LCB3aGljaCBhbHNvIHBlcmZvcm1zCisJICogaW5pdGlhbGl6YXRpb24gb2YgdGhlIHBhY2thZ2UsIG9yIHJldHVybnMgdGhlIHJlZ2lzdGVyZWQgcGFja2FnZSwKKwkgKiBpZiBvbmUgYWxyZWFkeSBleGlzdHMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FUGFja2FnZS5SZWdpc3RyeQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNjZW5hcmlvLlNjZW5hcmlvUGFja2FnZSNlTlNfVVJJCisJICogQHNlZSAjaW5pdCgpCisJICogQGdlbmVyYXRlZAorCSAqLworCXByaXZhdGUgU2NlbmFyaW9QYWNrYWdlSW1wbCgpIHsKKwkJc3VwZXIoZU5TX1VSSSwgU2NlbmFyaW9GYWN0b3J5LmVJTlNUQU5DRSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJpdmF0ZSBzdGF0aWMgYm9vbGVhbiBpc0luaXRlZCA9IGZhbHNlOworCisJLyoqCisJICogQ3JlYXRlcywgcmVnaXN0ZXJzLCBhbmQgaW5pdGlhbGl6ZXMgdGhlIDxiPlBhY2thZ2U8L2I+IGZvciB0aGlzIG1vZGVsLCBhbmQgZm9yIGFueSBvdGhlcnMgdXBvbiB3aGljaCBpdCBkZXBlbmRzLgorCSAqIAorCSAqIDxwPlRoaXMgbWV0aG9kIGlzIHVzZWQgdG8gaW5pdGlhbGl6ZSB7QGxpbmsgU2NlbmFyaW9QYWNrYWdlI2VJTlNUQU5DRX0gd2hlbiB0aGF0IGZpZWxkIGlzIGFjY2Vzc2VkLgorCSAqIENsaWVudHMgc2hvdWxkIG5vdCBpbnZva2UgaXQgZGlyZWN0bHkuIEluc3RlYWQsIHRoZXkgc2hvdWxkIHNpbXBseSBhY2Nlc3MgdGhhdCBmaWVsZCB0byBvYnRhaW4gdGhlIHBhY2thZ2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNlTlNfVVJJCisJICogQHNlZSAjY3JlYXRlUGFja2FnZUNvbnRlbnRzKCkKKwkgKiBAc2VlICNpbml0aWFsaXplUGFja2FnZUNvbnRlbnRzKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHN0YXRpYyBTY2VuYXJpb1BhY2thZ2UgaW5pdCgpIHsKKwkJaWYgKGlzSW5pdGVkKSByZXR1cm4gKFNjZW5hcmlvUGFja2FnZSlFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShTY2VuYXJpb1BhY2thZ2UuZU5TX1VSSSk7CisKKwkJLy8gT2J0YWluIG9yIGNyZWF0ZSBhbmQgcmVnaXN0ZXIgcGFja2FnZQorCQlTY2VuYXJpb1BhY2thZ2VJbXBsIHRoZVNjZW5hcmlvUGFja2FnZSA9IChTY2VuYXJpb1BhY2thZ2VJbXBsKShFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXQoZU5TX1VSSSkgaW5zdGFuY2VvZiBTY2VuYXJpb1BhY2thZ2VJbXBsID8gRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0KGVOU19VUkkpIDogbmV3IFNjZW5hcmlvUGFja2FnZUltcGwoKSk7CisKKwkJaXNJbml0ZWQgPSB0cnVlOworCisJCS8vIEluaXRpYWxpemUgc2ltcGxlIGRlcGVuZGVuY2llcworCQlFY29yZVBhY2thZ2UuZUlOU1RBTkNFLmVDbGFzcygpOworCisJCS8vIE9idGFpbiBvciBjcmVhdGUgYW5kIHJlZ2lzdGVyIGludGVyZGVwZW5kZW5jaWVzCisJCUNvbW1vblBhY2thZ2VJbXBsIHRoZUNvbW1vblBhY2thZ2UgPSAoQ29tbW9uUGFja2FnZUltcGwpKEVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVQYWNrYWdlKENvbW1vblBhY2thZ2UuZU5TX1VSSSkgaW5zdGFuY2VvZiBDb21tb25QYWNrYWdlSW1wbCA/IEVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVQYWNrYWdlKENvbW1vblBhY2thZ2UuZU5TX1VSSSkgOiBDb21tb25QYWNrYWdlLmVJTlNUQU5DRSk7CisJCUV4cGVyaW1lbnRQYWNrYWdlSW1wbCB0aGVFeHBlcmltZW50UGFja2FnZSA9IChFeHBlcmltZW50UGFja2FnZUltcGwpKEVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVQYWNrYWdlKEV4cGVyaW1lbnRQYWNrYWdlLmVOU19VUkkpIGluc3RhbmNlb2YgRXhwZXJpbWVudFBhY2thZ2VJbXBsID8gRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RVBhY2thZ2UoRXhwZXJpbWVudFBhY2thZ2UuZU5TX1VSSSkgOiBFeHBlcmltZW50UGFja2FnZS5lSU5TVEFOQ0UpOworCQlHcmFwaFBhY2thZ2VJbXBsIHRoZUdyYXBoUGFja2FnZSA9IChHcmFwaFBhY2thZ2VJbXBsKShFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShHcmFwaFBhY2thZ2UuZU5TX1VSSSkgaW5zdGFuY2VvZiBHcmFwaFBhY2thZ2VJbXBsID8gRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RVBhY2thZ2UoR3JhcGhQYWNrYWdlLmVOU19VUkkpIDogR3JhcGhQYWNrYWdlLmVJTlNUQU5DRSk7CisJCU1vZGVsUGFja2FnZUltcGwgdGhlTW9kZWxQYWNrYWdlID0gKE1vZGVsUGFja2FnZUltcGwpKEVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVQYWNrYWdlKE1vZGVsUGFja2FnZS5lTlNfVVJJKSBpbnN0YW5jZW9mIE1vZGVsUGFja2FnZUltcGwgPyBFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShNb2RlbFBhY2thZ2UuZU5TX1VSSSkgOiBNb2RlbFBhY2thZ2UuZUlOU1RBTkNFKTsKKwkJTW9kaWZpZXJQYWNrYWdlSW1wbCB0aGVNb2RpZmllclBhY2thZ2UgPSAoTW9kaWZpZXJQYWNrYWdlSW1wbCkoRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RVBhY2thZ2UoTW9kaWZpZXJQYWNrYWdlLmVOU19VUkkpIGluc3RhbmNlb2YgTW9kaWZpZXJQYWNrYWdlSW1wbCA/IEVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVQYWNrYWdlKE1vZGlmaWVyUGFja2FnZS5lTlNfVVJJKSA6IE1vZGlmaWVyUGFja2FnZS5lSU5TVEFOQ0UpOworCQlQcmVkaWNhdGVQYWNrYWdlSW1wbCB0aGVQcmVkaWNhdGVQYWNrYWdlID0gKFByZWRpY2F0ZVBhY2thZ2VJbXBsKShFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShQcmVkaWNhdGVQYWNrYWdlLmVOU19VUkkpIGluc3RhbmNlb2YgUHJlZGljYXRlUGFja2FnZUltcGwgPyBFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShQcmVkaWNhdGVQYWNrYWdlLmVOU19VUkkpIDogUHJlZGljYXRlUGFja2FnZS5lSU5TVEFOQ0UpOworCQlTZXF1ZW5jZXJQYWNrYWdlSW1wbCB0aGVTZXF1ZW5jZXJQYWNrYWdlID0gKFNlcXVlbmNlclBhY2thZ2VJbXBsKShFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShTZXF1ZW5jZXJQYWNrYWdlLmVOU19VUkkpIGluc3RhbmNlb2YgU2VxdWVuY2VyUGFja2FnZUltcGwgPyBFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShTZXF1ZW5jZXJQYWNrYWdlLmVOU19VUkkpIDogU2VxdWVuY2VyUGFja2FnZS5lSU5TVEFOQ0UpOworCQlUcmlnZ2VyUGFja2FnZUltcGwgdGhlVHJpZ2dlclBhY2thZ2UgPSAoVHJpZ2dlclBhY2thZ2VJbXBsKShFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShUcmlnZ2VyUGFja2FnZS5lTlNfVVJJKSBpbnN0YW5jZW9mIFRyaWdnZXJQYWNrYWdlSW1wbCA/IEVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVQYWNrYWdlKFRyaWdnZXJQYWNrYWdlLmVOU19VUkkpIDogVHJpZ2dlclBhY2thZ2UuZUlOU1RBTkNFKTsKKwkJU29sdmVyUGFja2FnZUltcGwgdGhlU29sdmVyUGFja2FnZSA9IChTb2x2ZXJQYWNrYWdlSW1wbCkoRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RVBhY2thZ2UoU29sdmVyUGFja2FnZS5lTlNfVVJJKSBpbnN0YW5jZW9mIFNvbHZlclBhY2thZ2VJbXBsID8gRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RVBhY2thZ2UoU29sdmVyUGFja2FnZS5lTlNfVVJJKSA6IFNvbHZlclBhY2thZ2UuZUlOU1RBTkNFKTsKKwkJTG9nZ2VyUGFja2FnZUltcGwgdGhlTG9nZ2VyUGFja2FnZSA9IChMb2dnZXJQYWNrYWdlSW1wbCkoRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RVBhY2thZ2UoTG9nZ2VyUGFja2FnZS5lTlNfVVJJKSBpbnN0YW5jZW9mIExvZ2dlclBhY2thZ2VJbXBsID8gRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RVBhY2thZ2UoTG9nZ2VyUGFja2FnZS5lTlNfVVJJKSA6IExvZ2dlclBhY2thZ2UuZUlOU1RBTkNFKTsKKworCQkvLyBDcmVhdGUgcGFja2FnZSBtZXRhLWRhdGEgb2JqZWN0cworCQl0aGVTY2VuYXJpb1BhY2thZ2UuY3JlYXRlUGFja2FnZUNvbnRlbnRzKCk7CisJCXRoZUNvbW1vblBhY2thZ2UuY3JlYXRlUGFja2FnZUNvbnRlbnRzKCk7CisJCXRoZUV4cGVyaW1lbnRQYWNrYWdlLmNyZWF0ZVBhY2thZ2VDb250ZW50cygpOworCQl0aGVHcmFwaFBhY2thZ2UuY3JlYXRlUGFja2FnZUNvbnRlbnRzKCk7CisJCXRoZU1vZGVsUGFja2FnZS5jcmVhdGVQYWNrYWdlQ29udGVudHMoKTsKKwkJdGhlTW9kaWZpZXJQYWNrYWdlLmNyZWF0ZVBhY2thZ2VDb250ZW50cygpOworCQl0aGVQcmVkaWNhdGVQYWNrYWdlLmNyZWF0ZVBhY2thZ2VDb250ZW50cygpOworCQl0aGVTZXF1ZW5jZXJQYWNrYWdlLmNyZWF0ZVBhY2thZ2VDb250ZW50cygpOworCQl0aGVUcmlnZ2VyUGFja2FnZS5jcmVhdGVQYWNrYWdlQ29udGVudHMoKTsKKwkJdGhlU29sdmVyUGFja2FnZS5jcmVhdGVQYWNrYWdlQ29udGVudHMoKTsKKwkJdGhlTG9nZ2VyUGFja2FnZS5jcmVhdGVQYWNrYWdlQ29udGVudHMoKTsKKworCQkvLyBJbml0aWFsaXplIGNyZWF0ZWQgbWV0YS1kYXRhCisJCXRoZVNjZW5hcmlvUGFja2FnZS5pbml0aWFsaXplUGFja2FnZUNvbnRlbnRzKCk7CisJCXRoZUNvbW1vblBhY2thZ2UuaW5pdGlhbGl6ZVBhY2thZ2VDb250ZW50cygpOworCQl0aGVFeHBlcmltZW50UGFja2FnZS5pbml0aWFsaXplUGFja2FnZUNvbnRlbnRzKCk7CisJCXRoZUdyYXBoUGFja2FnZS5pbml0aWFsaXplUGFja2FnZUNvbnRlbnRzKCk7CisJCXRoZU1vZGVsUGFja2FnZS5pbml0aWFsaXplUGFja2FnZUNvbnRlbnRzKCk7CisJCXRoZU1vZGlmaWVyUGFja2FnZS5pbml0aWFsaXplUGFja2FnZUNvbnRlbnRzKCk7CisJCXRoZVByZWRpY2F0ZVBhY2thZ2UuaW5pdGlhbGl6ZVBhY2thZ2VDb250ZW50cygpOworCQl0aGVTZXF1ZW5jZXJQYWNrYWdlLmluaXRpYWxpemVQYWNrYWdlQ29udGVudHMoKTsKKwkJdGhlVHJpZ2dlclBhY2thZ2UuaW5pdGlhbGl6ZVBhY2thZ2VDb250ZW50cygpOworCQl0aGVTb2x2ZXJQYWNrYWdlLmluaXRpYWxpemVQYWNrYWdlQ29udGVudHMoKTsKKwkJdGhlTG9nZ2VyUGFja2FnZS5pbml0aWFsaXplUGFja2FnZUNvbnRlbnRzKCk7CisKKwkJLy8gTWFyayBtZXRhLWRhdGEgdG8gaW5kaWNhdGUgaXQgY2FuJ3QgYmUgY2hhbmdlZAorCQl0aGVTY2VuYXJpb1BhY2thZ2UuZnJlZXplKCk7CisKKyAgCisJCS8vIFVwZGF0ZSB0aGUgcmVnaXN0cnkgYW5kIHJldHVybiB0aGUgcGFja2FnZQorCQlFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5wdXQoU2NlbmFyaW9QYWNrYWdlLmVOU19VUkksIHRoZVNjZW5hcmlvUGFja2FnZSk7CisJCXJldHVybiB0aGVTY2VuYXJpb1BhY2thZ2U7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVDbGFzcyBnZXRTY2VuYXJpbygpIHsKKwkJcmV0dXJuIHNjZW5hcmlvRUNsYXNzOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFUmVmZXJlbmNlIGdldFNjZW5hcmlvX01vZGVsKCkgeworCQlyZXR1cm4gKEVSZWZlcmVuY2Upc2NlbmFyaW9FQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgwKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRVJlZmVyZW5jZSBnZXRTY2VuYXJpb19TZXF1ZW5jZXIoKSB7CisJCXJldHVybiAoRVJlZmVyZW5jZSlzY2VuYXJpb0VDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDEpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFUmVmZXJlbmNlIGdldFNjZW5hcmlvX1NjZW5hcmlvRGVjb3JhdG9ycygpIHsKKwkJcmV0dXJuIChFUmVmZXJlbmNlKXNjZW5hcmlvRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMik7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVSZWZlcmVuY2UgZ2V0U2NlbmFyaW9fQ2Fub25pY2FsR3JhcGgoKSB7CisJCXJldHVybiAoRVJlZmVyZW5jZSlzY2VuYXJpb0VDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDMpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQXR0cmlidXRlIGdldFNjZW5hcmlvX1Byb2dyZXNzKCkgeworCQlyZXR1cm4gKEVBdHRyaWJ1dGUpc2NlbmFyaW9FQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCg0KTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRVJlZmVyZW5jZSBnZXRTY2VuYXJpb19Tb2x2ZXIoKSB7CisJCXJldHVybiAoRVJlZmVyZW5jZSlzY2VuYXJpb0VDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDUpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFUmVmZXJlbmNlIGdldFNjZW5hcmlvX0xvZ2dlcnMoKSB7CisJCXJldHVybiAoRVJlZmVyZW5jZSlzY2VuYXJpb0VDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDYpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBTY2VuYXJpb0ZhY3RvcnkgZ2V0U2NlbmFyaW9GYWN0b3J5KCkgeworCQlyZXR1cm4gKFNjZW5hcmlvRmFjdG9yeSlnZXRFRmFjdG9yeUluc3RhbmNlKCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJpdmF0ZSBib29sZWFuIGlzQ3JlYXRlZCA9IGZhbHNlOworCisJLyoqCisJICogQ3JlYXRlcyB0aGUgbWV0YS1tb2RlbCBvYmplY3RzIGZvciB0aGUgcGFja2FnZS4gIFRoaXMgbWV0aG9kIGlzCisJICogZ3VhcmRlZCB0byBoYXZlIG5vIGFmZmVjdCBvbiBhbnkgaW52b2NhdGlvbiBidXQgaXRzIGZpcnN0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIGNyZWF0ZVBhY2thZ2VDb250ZW50cygpIHsKKwkJaWYgKGlzQ3JlYXRlZCkgcmV0dXJuOworCQlpc0NyZWF0ZWQgPSB0cnVlOworCisJCS8vIENyZWF0ZSBjbGFzc2VzIGFuZCB0aGVpciBmZWF0dXJlcworCQlzY2VuYXJpb0VDbGFzcyA9IGNyZWF0ZUVDbGFzcyhTQ0VOQVJJTyk7CisJCWNyZWF0ZUVSZWZlcmVuY2Uoc2NlbmFyaW9FQ2xhc3MsIFNDRU5BUklPX19NT0RFTCk7CisJCWNyZWF0ZUVSZWZlcmVuY2Uoc2NlbmFyaW9FQ2xhc3MsIFNDRU5BUklPX19TRVFVRU5DRVIpOworCQljcmVhdGVFUmVmZXJlbmNlKHNjZW5hcmlvRUNsYXNzLCBTQ0VOQVJJT19fU0NFTkFSSU9fREVDT1JBVE9SUyk7CisJCWNyZWF0ZUVSZWZlcmVuY2Uoc2NlbmFyaW9FQ2xhc3MsIFNDRU5BUklPX19DQU5PTklDQUxfR1JBUEgpOworCQljcmVhdGVFQXR0cmlidXRlKHNjZW5hcmlvRUNsYXNzLCBTQ0VOQVJJT19fUFJPR1JFU1MpOworCQljcmVhdGVFUmVmZXJlbmNlKHNjZW5hcmlvRUNsYXNzLCBTQ0VOQVJJT19fU09MVkVSKTsKKwkJY3JlYXRlRVJlZmVyZW5jZShzY2VuYXJpb0VDbGFzcywgU0NFTkFSSU9fX0xPR0dFUlMpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByaXZhdGUgYm9vbGVhbiBpc0luaXRpYWxpemVkID0gZmFsc2U7CisKKwkvKioKKwkgKiBDb21wbGV0ZSB0aGUgaW5pdGlhbGl6YXRpb24gb2YgdGhlIHBhY2thZ2UgYW5kIGl0cyBtZXRhLW1vZGVsLiAgVGhpcworCSAqIG1ldGhvZCBpcyBndWFyZGVkIHRvIGhhdmUgbm8gYWZmZWN0IG9uIGFueSBpbnZvY2F0aW9uIGJ1dCBpdHMgZmlyc3QuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgaW5pdGlhbGl6ZVBhY2thZ2VDb250ZW50cygpIHsKKwkJaWYgKGlzSW5pdGlhbGl6ZWQpIHJldHVybjsKKwkJaXNJbml0aWFsaXplZCA9IHRydWU7CisKKwkJLy8gSW5pdGlhbGl6ZSBwYWNrYWdlCisJCXNldE5hbWUoZU5BTUUpOworCQlzZXROc1ByZWZpeChlTlNfUFJFRklYKTsKKwkJc2V0TnNVUkkoZU5TX1VSSSk7CisKKwkJLy8gT2J0YWluIG90aGVyIGRlcGVuZGVudCBwYWNrYWdlcworCQlDb21tb25QYWNrYWdlIHRoZUNvbW1vblBhY2thZ2UgPSAoQ29tbW9uUGFja2FnZSlFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShDb21tb25QYWNrYWdlLmVOU19VUkkpOworCQlNb2RlbFBhY2thZ2UgdGhlTW9kZWxQYWNrYWdlID0gKE1vZGVsUGFja2FnZSlFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShNb2RlbFBhY2thZ2UuZU5TX1VSSSk7CisJCVNlcXVlbmNlclBhY2thZ2UgdGhlU2VxdWVuY2VyUGFja2FnZSA9IChTZXF1ZW5jZXJQYWNrYWdlKUVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVQYWNrYWdlKFNlcXVlbmNlclBhY2thZ2UuZU5TX1VSSSk7CisJCUdyYXBoUGFja2FnZSB0aGVHcmFwaFBhY2thZ2UgPSAoR3JhcGhQYWNrYWdlKUVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVQYWNrYWdlKEdyYXBoUGFja2FnZS5lTlNfVVJJKTsKKwkJU29sdmVyUGFja2FnZSB0aGVTb2x2ZXJQYWNrYWdlID0gKFNvbHZlclBhY2thZ2UpRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RVBhY2thZ2UoU29sdmVyUGFja2FnZS5lTlNfVVJJKTsKKwkJTG9nZ2VyUGFja2FnZSB0aGVMb2dnZXJQYWNrYWdlID0gKExvZ2dlclBhY2thZ2UpRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RVBhY2thZ2UoTG9nZ2VyUGFja2FnZS5lTlNfVVJJKTsKKworCQkvLyBDcmVhdGUgdHlwZSBwYXJhbWV0ZXJzCisKKwkJLy8gU2V0IGJvdW5kcyBmb3IgdHlwZSBwYXJhbWV0ZXJzCisKKwkJLy8gQWRkIHN1cGVydHlwZXMgdG8gY2xhc3NlcworCQlzY2VuYXJpb0VDbGFzcy5nZXRFU3VwZXJUeXBlcygpLmFkZCh0aGVDb21tb25QYWNrYWdlLmdldElkZW50aWZpYWJsZSgpKTsKKworCQkvLyBJbml0aWFsaXplIGNsYXNzZXMgYW5kIGZlYXR1cmVzOyBhZGQgb3BlcmF0aW9ucyBhbmQgcGFyYW1ldGVycworCQlpbml0RUNsYXNzKHNjZW5hcmlvRUNsYXNzLCBTY2VuYXJpby5jbGFzcywgIlNjZW5hcmlvIiwgIUlTX0FCU1RSQUNULCAhSVNfSU5URVJGQUNFLCBJU19HRU5FUkFURURfSU5TVEFOQ0VfQ0xBU1MpOyAvLyROT04tTkxTLTEkCisJCWluaXRFUmVmZXJlbmNlKGdldFNjZW5hcmlvX01vZGVsKCksIHRoZU1vZGVsUGFja2FnZS5nZXRNb2RlbCgpLCBudWxsLCAibW9kZWwiLCBudWxsLCAwLCAxLCBTY2VuYXJpby5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfQ09NUE9TSVRFLCBJU19SRVNPTFZFX1BST1hJRVMsICFJU19VTlNFVFRBQkxFLCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsgLy8kTk9OLU5MUy0xJAorCQlpbml0RVJlZmVyZW5jZShnZXRTY2VuYXJpb19TZXF1ZW5jZXIoKSwgdGhlU2VxdWVuY2VyUGFja2FnZS5nZXRTZXF1ZW5jZXIoKSwgbnVsbCwgInNlcXVlbmNlciIsIG51bGwsIDAsIDEsIFNjZW5hcmlvLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19DT01QT1NJVEUsIElTX1JFU09MVkVfUFJPWElFUywgIUlTX1VOU0VUVEFCTEUsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOyAvLyROT04tTkxTLTEkCisJCWluaXRFUmVmZXJlbmNlKGdldFNjZW5hcmlvX1NjZW5hcmlvRGVjb3JhdG9ycygpLCB0aGVNb2RlbFBhY2thZ2UuZ2V0RGVjb3JhdG9yKCksIG51bGwsICJzY2VuYXJpb0RlY29yYXRvcnMiLCBudWxsLCAwLCAtMSwgU2NlbmFyaW8uY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX0NPTVBPU0lURSwgSVNfUkVTT0xWRV9QUk9YSUVTLCAhSVNfVU5TRVRUQUJMRSwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7IC8vJE5PTi1OTFMtMSQKKwkJaW5pdEVSZWZlcmVuY2UoZ2V0U2NlbmFyaW9fQ2Fub25pY2FsR3JhcGgoKSwgdGhlR3JhcGhQYWNrYWdlLmdldEdyYXBoKCksIG51bGwsICJjYW5vbmljYWxHcmFwaCIsIG51bGwsIDAsIDEsIFNjZW5hcmlvLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsICFJU19DSEFOR0VBQkxFLCAhSVNfQ09NUE9TSVRFLCAhSVNfUkVTT0xWRV9QUk9YSUVTLCAhSVNfVU5TRVRUQUJMRSwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7IC8vJE5PTi1OTFMtMSQKKwkJaW5pdEVBdHRyaWJ1dGUoZ2V0U2NlbmFyaW9fUHJvZ3Jlc3MoKSwgZWNvcmVQYWNrYWdlLmdldEVEb3VibGUoKSwgInByb2dyZXNzIiwgIjAuMCIsIDAsIDEsIFNjZW5hcmlvLmNsYXNzLCBJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAorCQlpbml0RVJlZmVyZW5jZShnZXRTY2VuYXJpb19Tb2x2ZXIoKSwgdGhlU29sdmVyUGFja2FnZS5nZXRTb2x2ZXIoKSwgbnVsbCwgInNvbHZlciIsIG51bGwsIDAsIDEsIFNjZW5hcmlvLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsIElTX0NPTVBPU0lURSwgIUlTX1JFU09MVkVfUFJPWElFUywgIUlTX1VOU0VUVEFCTEUsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOyAvLyROT04tTkxTLTEkCisJCWluaXRFUmVmZXJlbmNlKGdldFNjZW5hcmlvX0xvZ2dlcnMoKSwgdGhlTG9nZ2VyUGFja2FnZS5nZXRMb2dnZXIoKSwgbnVsbCwgImxvZ2dlcnMiLCBudWxsLCAwLCAtMSwgU2NlbmFyaW8uY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX0NPTVBPU0lURSwgSVNfUkVTT0xWRV9QUk9YSUVTLCAhSVNfVU5TRVRUQUJMRSwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7IC8vJE5PTi1OTFMtMSQKKworCQlhZGRFT3BlcmF0aW9uKHNjZW5hcmlvRUNsYXNzLCBlY29yZVBhY2thZ2UuZ2V0RUJvb2xlYW4oKSwgInN0ZXAiLCAwLCAxLCBJU19VTklRVUUsIElTX09SREVSRUQpOyAvLyROT04tTkxTLTEkCisKKwkJYWRkRU9wZXJhdGlvbihzY2VuYXJpb0VDbGFzcywgbnVsbCwgInJlc2V0IiwgMCwgMSwgSVNfVU5JUVVFLCBJU19PUkRFUkVEKTsgLy8kTk9OLU5MUy0xJAorCisJCWFkZEVPcGVyYXRpb24oc2NlbmFyaW9FQ2xhc3MsIG51bGwsICJpbml0aWFsaXplIiwgMCwgMSwgSVNfVU5JUVVFLCBJU19PUkRFUkVEKTsgLy8kTk9OLU5MUy0xJAorCisJCWFkZEVPcGVyYXRpb24oc2NlbmFyaW9FQ2xhc3MsIGVjb3JlUGFja2FnZS5nZXRFU3RyaW5nKCksICJwcm9kdWNlVGl0bGUiLCAwLCAxLCBJU19VTklRVUUsIElTX09SREVSRUQpOyAvLyROT04tTkxTLTEkCisKKwkJLy8gQ3JlYXRlIHJlc291cmNlCisJCWNyZWF0ZVJlc291cmNlKGVOU19VUkkpOworCX0KKworfSAvL1NjZW5hcmlvUGFja2FnZUltcGwKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvc2NlbmFyaW8vcHJvdmlkZXIvU2NlbmFyaW9FZGl0UGx1Z2luLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3NjZW5hcmlvL3Byb3ZpZGVyL1NjZW5hcmlvRWRpdFBsdWdpbi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU1MmVlMDAKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3NjZW5hcmlvL3Byb3ZpZGVyL1NjZW5hcmlvRWRpdFBsdWdpbi5qYXZhCkBAIC0wLDAgKzEsMTA0IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zY2VuYXJpby5wcm92aWRlcjsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuIAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyAKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0IAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwgCisgKiAKKyAqIENvbnRyaWJ1dG9yczogCisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLkVNRlBsdWdpbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnVpLkVjbGlwc2VVSVBsdWdpbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuUmVzb3VyY2VMb2NhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24ucHJvdmlkZXIuQ29tbW9uRWRpdFBsdWdpbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGgucHJvdmlkZXIuR3JhcGhFZGl0UGx1Z2luOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5wcm92aWRlci5Nb2RlbEVkaXRQbHVnaW47CisKKy8qKgorICogVGhpcyBpcyB0aGUgY2VudHJhbCBzaW5nbGV0b24gZm9yIHRoZSBTY2VuYXJpbyBlZGl0b3IgcGx1Z2luLgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgZmluYWwgY2xhc3MgU2NlbmFyaW9FZGl0UGx1Z2luIGV4dGVuZHMgRU1GUGx1Z2luIHsKKwkvKioKKwkgKiBLZWVwIHRyYWNrIG9mIHRoZSBzaW5nbGV0b24uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBTY2VuYXJpb0VkaXRQbHVnaW4gSU5TVEFOQ0UgPSBuZXcgU2NlbmFyaW9FZGl0UGx1Z2luKCk7CisKKwkvKioKKwkgKiBLZWVwIHRyYWNrIG9mIHRoZSBzaW5nbGV0b24uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJpdmF0ZSBzdGF0aWMgSW1wbGVtZW50YXRpb24gcGx1Z2luOworCisJLyoqCisJICogQ3JlYXRlIHRoZSBpbnN0YW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgU2NlbmFyaW9FZGl0UGx1Z2luKCkgeworCQlzdXBlcgorCQkgIChuZXcgUmVzb3VyY2VMb2NhdG9yIFtdIHsKKwkJICAgICBNb2RlbEVkaXRQbHVnaW4uSU5TVEFOQ0UsCisJCSAgICAgQ29tbW9uRWRpdFBsdWdpbi5JTlNUQU5DRSwKKwkJICAgICBHcmFwaEVkaXRQbHVnaW4uSU5TVEFOQ0UsCisJCSAgIH0pOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIHNpbmdsZXRvbiBpbnN0YW5jZSBvZiB0aGUgRWNsaXBzZSBwbHVnaW4uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBzaW5nbGV0b24gaW5zdGFuY2UuCisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBSZXNvdXJjZUxvY2F0b3IgZ2V0UGx1Z2luUmVzb3VyY2VMb2NhdG9yKCkgeworCQlyZXR1cm4gcGx1Z2luOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIHNpbmdsZXRvbiBpbnN0YW5jZSBvZiB0aGUgRWNsaXBzZSBwbHVnaW4uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBzaW5nbGV0b24gaW5zdGFuY2UuCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBzdGF0aWMgSW1wbGVtZW50YXRpb24gZ2V0UGx1Z2luKCkgeworCQlyZXR1cm4gcGx1Z2luOworCX0KKworCS8qKgorCSAqIFRoZSBhY3R1YWwgaW1wbGVtZW50YXRpb24gb2YgdGhlIEVjbGlwc2UgPGI+UGx1Z2luPC9iPi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGNsYXNzIEltcGxlbWVudGF0aW9uIGV4dGVuZHMgRWNsaXBzZVVJUGx1Z2luIHsKKwkJLyoqCisJCSAqIENyZWF0ZXMgYW4gaW5zdGFuY2UuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlwdWJsaWMgSW1wbGVtZW50YXRpb24oKSB7CisJCQlzdXBlcigpOworCisJCQkvLyBSZW1lbWJlciB0aGUgc3RhdGljIGluc3RhbmNlLgorCQkJLy8KKwkJCXBsdWdpbiA9IHRoaXM7CisJCX0KKwl9CisKK30KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvc2NlbmFyaW8vcHJvdmlkZXIvU2NlbmFyaW9JdGVtUHJvdmlkZXIuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvc2NlbmFyaW8vcHJvdmlkZXIvU2NlbmFyaW9JdGVtUHJvdmlkZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZGQxZmM3Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9zY2VuYXJpby9wcm92aWRlci9TY2VuYXJpb0l0ZW1Qcm92aWRlci5qYXZhCkBAIC0wLDAgKzEsNDAyIEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zY2VuYXJpby5wcm92aWRlcjsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuIAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyAKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0IAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwgCisgKiAKKyAqIENvbnRyaWJ1dG9yczogCisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OworaW1wb3J0IGphdmEudXRpbC5BcnJheXM7CitpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JRmlsZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLmNvbW1hbmQuQ29tbWFuZDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLmNvbW1hbmQuQ29tcG91bmRDb21tYW5kOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LkFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuUmVzb3VyY2VMb2NhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5VUkk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3Q7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVTdHJ1Y3R1cmFsRmVhdHVyZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUucmVzb3VyY2UuUmVzb3VyY2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQuY29tbWFuZC5BZGRDb21tYW5kOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LmNvbW1hbmQuQ3JlYXRlQ2hpbGRDb21tYW5kOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LmRvbWFpbi5FZGl0aW5nRG9tYWluOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklFZGl0aW5nRG9tYWluSXRlbVByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtTGFiZWxQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbVByb3BlcnR5RGVzY3JpcHRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbVByb3BlcnR5U291cmNlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklTdHJ1Y3R1cmVkSXRlbUNvbnRlbnRQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JVHJlZUl0ZW1Db250ZW50UHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuVmlld2VyTm90aWZpY2F0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5VdGlsaXR5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uSWRlbnRpZmlhYmxlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24ucHJvdmlkZXIuQ29yZUVkaXRQbHVnaW47CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5wcm92aWRlci5JZGVudGlmaWFibGVJdGVtUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLkRlY29yYXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuTW9kZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLk1vZGVsRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2NlbmFyaW8uU2NlbmFyaW87CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNjZW5hcmlvLlNjZW5hcmlvUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2VxdWVuY2VyLlNlcXVlbmNlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2VxdWVuY2VyLlNlcXVlbmNlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNvbHZlci5Tb2x2ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5kbmQuRE5EOworCisvKioKKyAqIFRoaXMgaXMgdGhlIGl0ZW0gcHJvdmlkZXIgYWRhcHRlciBmb3IgYQorICoge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zY2VuYXJpby5TY2VuYXJpb30gb2JqZWN0LiA8IS0tCisgKiBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiAKKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIFNjZW5hcmlvSXRlbVByb3ZpZGVyIGV4dGVuZHMgSWRlbnRpZmlhYmxlSXRlbVByb3ZpZGVyIGltcGxlbWVudHMKKwkJSUVkaXRpbmdEb21haW5JdGVtUHJvdmlkZXIsIElTdHJ1Y3R1cmVkSXRlbUNvbnRlbnRQcm92aWRlciwKKwkJSVRyZWVJdGVtQ29udGVudFByb3ZpZGVyLCBJSXRlbUxhYmVsUHJvdmlkZXIsIElJdGVtUHJvcGVydHlTb3VyY2UgeworCS8qKgorCSAqIFRoaXMgY29uc3RydWN0cyBhbiBpbnN0YW5jZSBmcm9tIGEgZmFjdG9yeSBhbmQgYSBub3RpZmllci4gPCEtLQorCSAqIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFNjZW5hcmlvSXRlbVByb3ZpZGVyKEFkYXB0ZXJGYWN0b3J5IGFkYXB0ZXJGYWN0b3J5KSB7CisJCXN1cGVyKGFkYXB0ZXJGYWN0b3J5KTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgdGhlIHByb3BlcnR5IGRlc2NyaXB0b3JzIGZvciB0aGUgYWRhcHRlZCBjbGFzcy4gPCEtLQorCSAqIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIExpc3Q8SUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I+IGdldFByb3BlcnR5RGVzY3JpcHRvcnMoT2JqZWN0IG9iamVjdCkgeworCQlpZiAoaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMgPT0gbnVsbCkgeworCQkJc3VwZXIuZ2V0UHJvcGVydHlEZXNjcmlwdG9ycyhvYmplY3QpOworCisJCX0KKwkJcmV0dXJuIGl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzOworCX0KKwkKKwkvKioKKwkgKiBUaGlzIHNwZWNpZmllcyBob3cgdG8gaW1wbGVtZW50IHtAbGluayAjZ2V0Q2hpbGRyZW59IGFuZCBpcyB1c2VkIHRvIGRlZHVjZSBhbiBhcHByb3ByaWF0ZSBmZWF0dXJlIGZvciBhbgorCSAqIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuZWRpdC5jb21tYW5kLkFkZENvbW1hbmR9LCB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmVkaXQuY29tbWFuZC5SZW1vdmVDb21tYW5kfSBvcgorCSAqIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuZWRpdC5jb21tYW5kLk1vdmVDb21tYW5kfSBpbiB7QGxpbmsgI2NyZWF0ZUNvbW1hbmR9LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgQ29sbGVjdGlvbjw/IGV4dGVuZHMgRVN0cnVjdHVyYWxGZWF0dXJlPiBnZXRDaGlsZHJlbkZlYXR1cmVzKAorCQkJT2JqZWN0IG9iamVjdCkgeworCQlpZiAoY2hpbGRyZW5GZWF0dXJlcyA9PSBudWxsKSB7CisJCQlzdXBlci5nZXRDaGlsZHJlbkZlYXR1cmVzKG9iamVjdCk7CisJCQljaGlsZHJlbkZlYXR1cmVzLmFkZChTY2VuYXJpb1BhY2thZ2UuTGl0ZXJhbHMuU0NFTkFSSU9fX01PREVMKTsKKwkJCWNoaWxkcmVuRmVhdHVyZXMuYWRkKFNjZW5hcmlvUGFja2FnZS5MaXRlcmFscy5TQ0VOQVJJT19fU0VRVUVOQ0VSKTsKKwkJCWNoaWxkcmVuRmVhdHVyZXMuYWRkKFNjZW5hcmlvUGFja2FnZS5MaXRlcmFscy5TQ0VOQVJJT19fU0NFTkFSSU9fREVDT1JBVE9SUyk7CisJCQljaGlsZHJlbkZlYXR1cmVzLmFkZChTY2VuYXJpb1BhY2thZ2UuTGl0ZXJhbHMuU0NFTkFSSU9fX1NPTFZFUik7CisJCQljaGlsZHJlbkZlYXR1cmVzLmFkZChTY2VuYXJpb1BhY2thZ2UuTGl0ZXJhbHMuU0NFTkFSSU9fX0xPR0dFUlMpOworCQl9CisJCXJldHVybiBjaGlsZHJlbkZlYXR1cmVzOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgRVN0cnVjdHVyYWxGZWF0dXJlIGdldENoaWxkRmVhdHVyZShPYmplY3Qgb2JqZWN0LCBPYmplY3QgY2hpbGQpIHsKKwkJLy8gQ2hlY2sgdGhlIHR5cGUgb2YgdGhlIHNwZWNpZmllZCBjaGlsZCBvYmplY3QgYW5kIHJldHVybiB0aGUgcHJvcGVyIGZlYXR1cmUgdG8gdXNlIGZvcgorCQkvLyBhZGRpbmcgKHNlZSB7QGxpbmsgQWRkQ29tbWFuZH0pIGl0IGFzIGEgY2hpbGQuCisKKwkJcmV0dXJuIHN1cGVyLmdldENoaWxkRmVhdHVyZShvYmplY3QsIGNoaWxkKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgU2NlbmFyaW8uZ2lmLiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBPYmplY3QgZ2V0SW1hZ2UoT2JqZWN0IG9iamVjdCkgeworCQlyZXR1cm4gb3ZlcmxheUltYWdlKG9iamVjdCwgZ2V0UmVzb3VyY2VMb2NhdG9yKCkuZ2V0SW1hZ2UoCisJCQkJImZ1bGwvY3VzdG9tb2JqMTYvU2NlbmFyaW8iKSk7CisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIHRoZSBsYWJlbCB0ZXh0IGZvciB0aGUgYWRhcHRlZCBjbGFzcy4gPCEtLSBiZWdpbi11c2VyLWRvYworCSAqIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBTdHJpbmcgZ2V0VGV4dChPYmplY3Qgb2JqZWN0KSB7CisJCXJldHVybiBzdXBlci5nZXRUZXh0KG9iamVjdCk7CisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIHRoZSBsYWJlbCB0ZXh0IGZvciB0aGUgYWRhcHRlZCBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jCisJICogLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgU3RyaW5nIGdldFRleHRHZW4oT2JqZWN0IG9iamVjdCkgeworCQlVUkkgbGFiZWxWYWx1ZSA9ICgoU2NlbmFyaW8pb2JqZWN0KS5nZXRVUkkoKTsKKwkJU3RyaW5nIGxhYmVsID0gbGFiZWxWYWx1ZSA9PSBudWxsID8gbnVsbCA6IGxhYmVsVmFsdWUudG9TdHJpbmcoKTsKKwkJcmV0dXJuIGxhYmVsID09IG51bGwgfHwgbGFiZWwubGVuZ3RoKCkgPT0gMCA/CisJCQlnZXRTdHJpbmcoIl9VSV9TY2VuYXJpb190eXBlIikgOiAvLyROT04tTkxTLTEkCisJCQlnZXRTdHJpbmcoIl9VSV9TY2VuYXJpb190eXBlIikgKyAiICIgKyBsYWJlbDsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCisJfQorCisJLyoqCisJICogVGhpcyBoYW5kbGVzIG1vZGVsIG5vdGlmaWNhdGlvbnMgYnkgY2FsbGluZyB7QGxpbmsgI3VwZGF0ZUNoaWxkcmVufSB0byB1cGRhdGUgYW55IGNhY2hlZAorCSAqIGNoaWxkcmVuIGFuZCBieSBjcmVhdGluZyBhIHZpZXdlciBub3RpZmljYXRpb24sIHdoaWNoIGl0IHBhc3NlcyB0byB7QGxpbmsgI2ZpcmVOb3RpZnlDaGFuZ2VkfS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tCisJICogZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBub3RpZnlDaGFuZ2VkKE5vdGlmaWNhdGlvbiBub3RpZmljYXRpb24pIHsKKwkJdXBkYXRlQ2hpbGRyZW4obm90aWZpY2F0aW9uKTsKKworCQlzd2l0Y2ggKG5vdGlmaWNhdGlvbi5nZXRGZWF0dXJlSUQoU2NlbmFyaW8uY2xhc3MpKSB7CisJCQljYXNlIFNjZW5hcmlvUGFja2FnZS5TQ0VOQVJJT19fUFJPR1JFU1M6CisJCQkJZmlyZU5vdGlmeUNoYW5nZWQobmV3IFZpZXdlck5vdGlmaWNhdGlvbihub3RpZmljYXRpb24sIG5vdGlmaWNhdGlvbi5nZXROb3RpZmllcigpLCBmYWxzZSwgdHJ1ZSkpOworCQkJCXJldHVybjsKKwkJCWNhc2UgU2NlbmFyaW9QYWNrYWdlLlNDRU5BUklPX19NT0RFTDoKKwkJCWNhc2UgU2NlbmFyaW9QYWNrYWdlLlNDRU5BUklPX19TRVFVRU5DRVI6CisJCQljYXNlIFNjZW5hcmlvUGFja2FnZS5TQ0VOQVJJT19fU0NFTkFSSU9fREVDT1JBVE9SUzoKKwkJCWNhc2UgU2NlbmFyaW9QYWNrYWdlLlNDRU5BUklPX19TT0xWRVI6CisJCQljYXNlIFNjZW5hcmlvUGFja2FnZS5TQ0VOQVJJT19fTE9HR0VSUzoKKwkJCQlmaXJlTm90aWZ5Q2hhbmdlZChuZXcgVmlld2VyTm90aWZpY2F0aW9uKG5vdGlmaWNhdGlvbiwgbm90aWZpY2F0aW9uLmdldE5vdGlmaWVyKCksIHRydWUsIGZhbHNlKSk7CisJCQkJcmV0dXJuOworCQl9CisJCXN1cGVyLm5vdGlmeUNoYW5nZWQobm90aWZpY2F0aW9uKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFkZHMge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lZGl0LmNvbW1hbmQuQ29tbWFuZFBhcmFtZXRlcn1zCisJICogZGVzY3JpYmluZyB0aGUgY2hpbGRyZW4gdGhhdCBjYW4gYmUgY3JlYXRlZCB1bmRlciB0aGlzIG9iamVjdC4gPCEtLQorCSAqIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgY29sbGVjdE5ld0NoaWxkRGVzY3JpcHRvcnMoCisJCQlDb2xsZWN0aW9uPE9iamVjdD4gbmV3Q2hpbGREZXNjcmlwdG9ycywgT2JqZWN0IG9iamVjdCkgeworCQlzdXBlci5jb2xsZWN0TmV3Q2hpbGREZXNjcmlwdG9ycyhuZXdDaGlsZERlc2NyaXB0b3JzLCBvYmplY3QpOworCisJCW5ld0NoaWxkRGVzY3JpcHRvcnMuYWRkCisJCQkoY3JlYXRlQ2hpbGRQYXJhbWV0ZXIKKwkJCQkoU2NlbmFyaW9QYWNrYWdlLkxpdGVyYWxzLlNDRU5BUklPX19NT0RFTCwKKwkJCQkgTW9kZWxGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVNb2RlbCgpKSk7CisKKwkJbmV3Q2hpbGREZXNjcmlwdG9ycy5hZGQKKwkJCShjcmVhdGVDaGlsZFBhcmFtZXRlcgorCQkJCShTY2VuYXJpb1BhY2thZ2UuTGl0ZXJhbHMuU0NFTkFSSU9fX1NFUVVFTkNFUiwKKwkJCQkgU2VxdWVuY2VyRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlU2VxdWVudGlhbFNlcXVlbmNlcigpKSk7CisKKwkJbmV3Q2hpbGREZXNjcmlwdG9ycy5hZGQKKwkJCShjcmVhdGVDaGlsZFBhcmFtZXRlcgorCQkJCShTY2VuYXJpb1BhY2thZ2UuTGl0ZXJhbHMuU0NFTkFSSU9fX1NFUVVFTkNFUiwKKwkJCQkgU2VxdWVuY2VyRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlUmVhbFRpbWVTZXF1ZW5jZXIoKSkpOworCisJCW5ld0NoaWxkRGVzY3JpcHRvcnMuYWRkCisJCQkoY3JlYXRlQ2hpbGRQYXJhbWV0ZXIKKwkJCQkoU2NlbmFyaW9QYWNrYWdlLkxpdGVyYWxzLlNDRU5BUklPX19TT0xWRVIsCisJCQkJIFNvbHZlckZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZVNvbHZlcigpKSk7CisJfQorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JdGVtUHJvdmlkZXJBZGFwdGVyI2NyZWF0ZUFkZENvbW1hbmQob3JnLmVjbGlwc2UuZW1mLmVkaXQuZG9tYWluLkVkaXRpbmdEb21haW4sCisJICogICAgICBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCwKKwkgKiAgICAgIG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FU3RydWN0dXJhbEZlYXR1cmUsIGphdmEudXRpbC5Db2xsZWN0aW9uLCBpbnQpCisJICovCisJQFN1cHByZXNzV2FybmluZ3MoInVuY2hlY2tlZCIpCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIENvbW1hbmQgY3JlYXRlQWRkQ29tbWFuZChFZGl0aW5nRG9tYWluIGRvbWFpbiwgRU9iamVjdCBvd25lciwKKwkJCUVTdHJ1Y3R1cmFsRmVhdHVyZSBmZWF0dXJlLCBDb2xsZWN0aW9uPD8+IGNvbGxlY3Rpb24sIGludCBpbmRleCkgeworCQlmaW5hbCBDb2xsZWN0aW9uIGlkZW50aWZpYWJsZUNvbGxlY3Rpb24gPSBuZXcgQXJyYXlMaXN0KCk7CisJCWZvciAoT2JqZWN0IHZhbHVlIDogY29sbGVjdGlvbikgeworCisJCQlPYmplY3QgdGVtcCA9IHZhbHVlOworCQkJaWYgKHZhbHVlIGluc3RhbmNlb2YgSUZpbGUpIHsKKwkJCQkvLyBZZXMKKwkJCQlmaW5hbCBJRmlsZSBpRmlsZSA9IChJRmlsZSkgdmFsdWU7CisJCQkJZmluYWwgVVJJIHVyaSA9IFVSSS5jcmVhdGVGaWxlVVJJKGlGaWxlLmdldExvY2F0aW9uKCkKKwkJCQkJCS50b1N0cmluZygpKTsKKwkJCQlmaW5hbCBJZGVudGlmaWFibGUgaWRlbnRpZmFibGUgPSBVdGlsaXR5LmdldElkZW50aWZpYWJsZSh1cmkpOworCQkJCWlkZW50aWZpYWJsZUNvbGxlY3Rpb24uYWRkKGlkZW50aWZhYmxlKTsKKwkJCQl0ZW1wID0gaWRlbnRpZmFibGU7CisJCQl9IC8vIGlmIElGaWxlCisKKwkJCWVsc2UgaWYgKHZhbHVlIGluc3RhbmNlb2YgU3RyaW5nKSB7CisJCQkJLy8gWWVzCisJCQkJZmluYWwgU3RyaW5nIHVyaVN0cmluZyA9IChTdHJpbmcpIHZhbHVlOworCQkJCXRyeSB7CisJCQkJCWZpbmFsIFVSSSB1cmkgPSBVUkkuY3JlYXRlVVJJKHVyaVN0cmluZyk7CisJCQkJCWZpbmFsIElkZW50aWZpYWJsZSBpZGVudGlmYWJsZSA9IFV0aWxpdHkKKwkJCQkJCQkuZ2V0SWRlbnRpZmlhYmxlKHVyaSk7CisJCQkJCXRlbXAgPSBpZGVudGlmYWJsZTsKKwkJCQl9IGNhdGNoIChFeGNlcHRpb24gZSkgeworCQkJCQkvLyBJZ25vcmUgaXQKKwkJCQl9CisJCQl9IC8vIGlmIFN0cmluZworCisJCQlpZiAodGVtcCBpbnN0YW5jZW9mIElkZW50aWZpYWJsZSkgeworCQkJCWlkZW50aWZpYWJsZUNvbGxlY3Rpb24uYWRkKHRlbXApOworCQkJfQorCQl9IC8vIGZvciBlYWNoIE9iamVjdAorCisJCXJldHVybiBzdXBlci5jcmVhdGVBZGRDb21tYW5kKGRvbWFpbiwgb3duZXIsIGZlYXR1cmUsCisJCQkJaWRlbnRpZmlhYmxlQ29sbGVjdGlvbiwgaW5kZXgpOworCX0gLy8gY3JlYXRlQWRkQ29tbWFuZAorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JdGVtUHJvdmlkZXJBZGFwdGVyI2NyZWF0ZVNldENvbW1hbmQob3JnLmVjbGlwc2UuZW1mLmVkaXQuZG9tYWluLkVkaXRpbmdEb21haW4sCisJICogICAgICBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCwKKwkgKiAgICAgIG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FU3RydWN0dXJhbEZlYXR1cmUsIGphdmEubGFuZy5PYmplY3QsIGludCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgQ29tbWFuZCBjcmVhdGVTZXRDb21tYW5kKEVkaXRpbmdEb21haW4gZG9tYWluLCBFT2JqZWN0IG93bmVyLAorCQkJRVN0cnVjdHVyYWxGZWF0dXJlIGZlYXR1cmUsIE9iamVjdCB2YWx1ZSwgaW50IGluZGV4KSB7CisJCS8vIEFyZSB3ZSBzZXR0aW5nIHRoZSBtb2RlbCBkdXJpbmcgYSBkcmFnIGFuZCBkcm9wPworCQlPYmplY3QgdGVtcCA9IHZhbHVlOworCisJCWlmICh2YWx1ZSBpbnN0YW5jZW9mIElGaWxlKSB7CisJCQkvLyBZZXMKKwkJCWZpbmFsIElGaWxlIGlGaWxlID0gKElGaWxlKSB2YWx1ZTsKKwkJCWZpbmFsIFVSSSB1cmkgPSBVUkkuY3JlYXRlRmlsZVVSSShpRmlsZS5nZXRMb2NhdGlvbigpLnRvU3RyaW5nKCkpOworCQkJZmluYWwgSWRlbnRpZmlhYmxlIGlkZW50aWZhYmxlID0gVXRpbGl0eS5nZXRJZGVudGlmaWFibGUodXJpKTsKKwkJCXRlbXAgPSBpZGVudGlmYWJsZTsKKwkJfSAvLyBpZiBJRmlsZQorCisJCWVsc2UgaWYgKHZhbHVlIGluc3RhbmNlb2YgU3RyaW5nKSB7CisJCQkvLyBZZXMKKwkJCS8vIFRoZXNlIGNvbWUgZnJvbSBJZGVudGlmYWJsZVBsdWdpblZpZXcKKwkJCWZpbmFsIFN0cmluZyB1cmlTdHJpbmcgPSAoU3RyaW5nKSB2YWx1ZTsKKwkJCXRyeSB7CisJCQkJZmluYWwgVVJJIHVyaSA9IFVSSS5jcmVhdGVVUkkodXJpU3RyaW5nKTsKKwkJCQlmaW5hbCBJZGVudGlmaWFibGUgaWRlbnRpZmFibGUgPSBVdGlsaXR5LmdldElkZW50aWZpYWJsZSh1cmkpOworCQkJCXRlbXAgPSBpZGVudGlmYWJsZTsKKwkJCX0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CisJCQkJLy8gSWdub3JlIGl0CisJCQl9CisJCX0gLy8gaWYgU3RyaW5nCisKKwkJaWYgKHRlbXAgaW5zdGFuY2VvZiBNb2RlbCkgeworCQkJcmV0dXJuIHN1cGVyLmNyZWF0ZVNldENvbW1hbmQoZG9tYWluLCBvd25lciwKKwkJCQkJU2NlbmFyaW9QYWNrYWdlLmVJTlNUQU5DRS5nZXRTY2VuYXJpb19Nb2RlbCgpLCB0ZW1wLCBpbmRleCk7CisJCX0gZWxzZSBpZiAodGVtcCBpbnN0YW5jZW9mIFNlcXVlbmNlcikgeworCQkJcmV0dXJuIHN1cGVyLmNyZWF0ZVNldENvbW1hbmQoZG9tYWluLCBvd25lciwKKwkJCQkJU2NlbmFyaW9QYWNrYWdlLmVJTlNUQU5DRS5nZXRTY2VuYXJpb19TZXF1ZW5jZXIoKSwgdGVtcCwKKwkJCQkJaW5kZXgpOworCQl9IC8vIGlmCisJCWVsc2UgaWYgKHRlbXAgaW5zdGFuY2VvZiBEZWNvcmF0b3IpIHsKKwkJCXJldHVybiBzdXBlcgorCQkJCQkuY3JlYXRlQWRkQ29tbWFuZCgKKwkJCQkJCQlkb21haW4sCisJCQkJCQkJb3duZXIsCisJCQkJCQkJU2NlbmFyaW9QYWNrYWdlLmVJTlNUQU5DRQorCQkJCQkJCQkJLmdldFNjZW5hcmlvKCkKKwkJCQkJCQkJCS5nZXRFU3RydWN0dXJhbEZlYXR1cmUoCisJCQkJCQkJCQkJCVNjZW5hcmlvUGFja2FnZS5TQ0VOQVJJT19fU0NFTkFSSU9fREVDT1JBVE9SUyksCisJCQkJCQkJQXJyYXlzLmFzTGlzdCgobmV3IE9iamVjdFtdIHsgdGVtcCB9KSksIGluZGV4KTsKKwkJfSAvLyBpZgorCQllbHNlIHsKKworCQkJcmV0dXJuIHN1cGVyLmNyZWF0ZVNldENvbW1hbmQoZG9tYWluLCBvd25lciwgZmVhdHVyZSwgdmFsdWUsIGluZGV4KTsKKwkJfQorCX0gLy8gY3JlYXRlU2V0Q29tbWFuZAorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JdGVtUHJvdmlkZXJBZGFwdGVyI2NyZWF0ZURyYWdBbmREcm9wQ29tbWFuZChvcmcuZWNsaXBzZS5lbWYuZWRpdC5kb21haW4uRWRpdGluZ0RvbWFpbiwKKwkgKiAgICAgIGphdmEubGFuZy5PYmplY3QsIGZsb2F0LCBpbnQsIGludCwgamF2YS51dGlsLkNvbGxlY3Rpb24pCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIENvbW1hbmQgY3JlYXRlRHJhZ0FuZERyb3BDb21tYW5kKEVkaXRpbmdEb21haW4gZG9tYWluLAorCQkJT2JqZWN0IG93bmVyLCBmbG9hdCBsb2NhdGlvbiwgaW50IG9wZXJhdGlvbnMsIGludCBvcGVyYXRpb24sCisJCQlDb2xsZWN0aW9uPD8+IGNvbGxlY3Rpb24pIHsKKwkJLy8gV2UgYWRkIERORC5EUk9QX0xJTksgYXMgYW4gYWxsb3dlZCBvcGVyYXRpb24gYmVjYXVzZSBhbGwgZHJvcHMgd2lsbAorCQkvLyBiZSBsaW5rcyBhbmQgc29tZSBzb3VyY2VzIGRvbid0IGFsbG93IGxpbmtzLCB3ZSBjb252ZXJ0IHRvIGxpbmtzCisJCS8vIGFueXdheQorCQlyZXR1cm4gc3VwZXIuY3JlYXRlRHJhZ0FuZERyb3BDb21tYW5kKGRvbWFpbiwgb3duZXIsIGxvY2F0aW9uLAorCQkJCW9wZXJhdGlvbnMgfCBETkQuRFJPUF9MSU5LLCBvcGVyYXRpb24sIGNvbGxlY3Rpb24pOworCX0gLy8gY3JlYXRlRHJhZ0FuZERyb3BDb21tYW5kCisKKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgQ29tbWFuZCBjcmVhdGVDcmVhdGVDaGlsZENvbW1hbmQoRWRpdGluZ0RvbWFpbiBkb21haW4sCisJCQlFT2JqZWN0IG93bmVyLCBFU3RydWN0dXJhbEZlYXR1cmUgZmVhdHVyZSwgT2JqZWN0IHZhbHVlLCBpbnQgaW5kZXgsCisJCQlDb2xsZWN0aW9uPD8+IGNvbGxlY3Rpb24pIHsKKworCQlyZXR1cm4gbmV3IENyZWF0ZUNoaWxkQ29tbWFuZChkb21haW4sIG93bmVyLCBmZWF0dXJlLCB2YWx1ZSwKKwkJCQljb2xsZWN0aW9uLCB0aGlzKSB7CisJCQkvKioKKwkJCSAqIEBzZWUgb3JnLmVjbGlwc2UuZW1mLmVkaXQuY29tbWFuZC5DcmVhdGVDaGlsZENvbW1hbmQjY3JlYXRlQ29tbWFuZCgpCisJCQkgKi8KKwkJCUBPdmVycmlkZQorCQkJcHJvdGVjdGVkIENvbW1hbmQgY3JlYXRlQ29tbWFuZCgpIHsKKworCQkJCUNvbW1hbmQgcmV0VmFsdWUgPSBudWxsOworCisJCQkJZmluYWwgQ29tbWFuZCBjcmVhdGVDaGlsZENvbW1hbmQgPSBzdXBlci5jcmVhdGVDb21tYW5kKCk7CisKKwkJCQkvLyBBcmUgd2UgY3JlYXRpbmcgYSBNb2RlbD8KKwkJCQlpZiAoY2hpbGQgaW5zdGFuY2VvZiBNb2RlbCkgeworCQkJCQkvLyBZZXMKKwkJCQkJZmluYWwgTW9kZWwgbW9kZWwgPSAoTW9kZWwpIGNoaWxkOworCQkJCQkvLyBEb2VzIHRoZSBtb2RlbCBoYXZlIGEgcmVzb3VyY2UgYWxyZWFkeT8KKwkJCQkJaWYgKG1vZGVsLmVSZXNvdXJjZSgpID09IG51bGwpIHsKKwkJCQkJCS8vIE5vCisJCQkJCQlmaW5hbCBSZXNvdXJjZSBwYXJlbnRSZXNvdXJjZSA9IG93bmVyLmVSZXNvdXJjZSgpOworCQkJCQkJZmluYWwgQ29tbWFuZCBhZGRDb21tYW5kID0gbmV3IEFkZENvbW1hbmQoZG9tYWluLAorCQkJCQkJCQlwYXJlbnRSZXNvdXJjZS5nZXRDb250ZW50cygpLCBtb2RlbCk7CisKKwkJCQkJCWZpbmFsIENvbXBvdW5kQ29tbWFuZCBjb21wb3VuZENvbW1hbmQgPSBuZXcgQ29tcG91bmRDb21tYW5kKAorCQkJCQkJCQkwLCBjcmVhdGVDaGlsZENvbW1hbmQuZ2V0TGFiZWwoKSwKKwkJCQkJCQkJY3JlYXRlQ2hpbGRDb21tYW5kLmdldERlc2NyaXB0aW9uKCkpOworCQkJCQkJY29tcG91bmRDb21tYW5kLmFwcGVuZChjcmVhdGVDaGlsZENvbW1hbmQpOworCQkJCQkJY29tcG91bmRDb21tYW5kLmFwcGVuZChhZGRDb21tYW5kKTsKKwkJCQkJCXJldFZhbHVlID0gY29tcG91bmRDb21tYW5kOworCQkJCQl9IC8vIGlmIE1vZGVsIGRvZXMgbm90IGhhdmUgYSByZXNvdXJjZQorCQkJCX0gLy8gaWYgTW9kZWwKKwkJCQllbHNlIHsKKwkJCQkJcmV0VmFsdWUgPSBjcmVhdGVDaGlsZENvbW1hbmQ7CisJCQkJfQorCisJCQkJcmV0dXJuIHJldFZhbHVlOworCQkJfQorCQl9OyAvLyBDcmVhdGVDaGlsZENvbW1hbmQKKworCX0vLyBjcmVhdGVDcmVhdGVDaGlsZENvbW1hbmQKKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSXRlbVByb3ZpZGVyQWRhcHRlciNpc1dyYXBwaW5nTmVlZGVkKGphdmEubGFuZy5PYmplY3QpCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIGJvb2xlYW4gaXNXcmFwcGluZ05lZWRlZChPYmplY3Qgb2JqZWN0KSB7CisJCS8vIHJldHVybiBzdXBlci5pc1dyYXBwaW5nTmVlZGVkKG9iamVjdCk7CisJCS8vIFdlIHJldHVybiB0cnVlIHNvIHRoYXQgbm9uLWNvbnRhaW5tZW50IHJlZmVyZW5jZXMgYXJlIHdyYXBwZWQuIFRoaXMKKwkJLy8gZW5hYmxlcyB0aGUgZGVsZXRlIGNvbW1hbmQgaW4gdGhlIGVkaXRvcidzIGNvbnRleHQgbWVudS4KKwkJcmV0dXJuIHRydWU7CisJfSAvLyBpc1dyYXBwaW5nTmVlZGVkCisKKwkvKioKKwkgKiBSZXR1cm4gdGhlIHJlc291cmNlIGxvY2F0b3IgZm9yIHRoaXMgaXRlbSBwcm92aWRlcidzIHJlc291cmNlcy4gPCEtLQorCSAqIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIFJlc291cmNlTG9jYXRvciBnZXRSZXNvdXJjZUxvY2F0b3IoKSB7CisJCXJldHVybiBDb3JlRWRpdFBsdWdpbi5JTlNUQU5DRTsKKwl9CisKK30gLy8gU2NlbmFyaW9JdGVtUHJvdmlkZXIKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvc2NlbmFyaW8vcHJvdmlkZXIvU2NlbmFyaW9JdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeS5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9zY2VuYXJpby9wcm92aWRlci9TY2VuYXJpb0l0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWIyZTIxNwotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvc2NlbmFyaW8vcHJvdmlkZXIvU2NlbmFyaW9JdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeS5qYXZhCkBAIC0wLDAgKzEsMjA3IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zY2VuYXJpby5wcm92aWRlcjsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuIAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyAKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0IAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwgCisgKiAKKyAqIENvbnRyaWJ1dG9yczogCisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgCitpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LkFkYXB0ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkNoYW5nZU5vdGlmaWVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkNvbXBvc2VhYmxlQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuQ29tcG9zZWRBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JQ2hhbmdlTm90aWZpZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSURpc3Bvc2FibGU7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUVkaXRpbmdEb21haW5JdGVtUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1MYWJlbFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtUHJvcGVydHlTb3VyY2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSU5vdGlmeUNoYW5nZWRMaXN0ZW5lcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JU3RydWN0dXJlZEl0ZW1Db250ZW50UHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVRyZWVJdGVtQ29udGVudFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zY2VuYXJpby51dGlsLlNjZW5hcmlvQWRhcHRlckZhY3Rvcnk7CisKKy8qKgorICogVGhpcyBpcyB0aGUgZmFjdG9yeSB0aGF0IGlzIHVzZWQgdG8gcHJvdmlkZSB0aGUgaW50ZXJmYWNlcyBuZWVkZWQgdG8gc3VwcG9ydCBWaWV3ZXJzLgorICogVGhlIGFkYXB0ZXJzIGdlbmVyYXRlZCBieSB0aGlzIGZhY3RvcnkgY29udmVydCBFTUYgYWRhcHRlciBub3RpZmljYXRpb25zIGludG8gY2FsbHMgdG8ge0BsaW5rICNmaXJlTm90aWZ5Q2hhbmdlZCBmaXJlTm90aWZ5Q2hhbmdlZH0uCisgKiBUaGUgYWRhcHRlcnMgYWxzbyBzdXBwb3J0IEVjbGlwc2UgcHJvcGVydHkgc2hlZXRzLgorICogTm90ZSB0aGF0IG1vc3Qgb2YgdGhlIGFkYXB0ZXJzIGFyZSBzaGFyZWQgYW1vbmcgbXVsdGlwbGUgaW5zdGFuY2VzLgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgU2NlbmFyaW9JdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSBleHRlbmRzIFNjZW5hcmlvQWRhcHRlckZhY3RvcnkgaW1wbGVtZW50cyBDb21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5LCBJQ2hhbmdlTm90aWZpZXIsIElEaXNwb3NhYmxlIHsKKwkvKioKKwkgKiBUaGlzIGtlZXBzIHRyYWNrIG9mIHRoZSByb290IGFkYXB0ZXIgZmFjdG9yeSB0aGF0IGRlbGVnYXRlcyB0byB0aGlzIGFkYXB0ZXIgZmFjdG9yeS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgQ29tcG9zZWRBZGFwdGVyRmFjdG9yeSBwYXJlbnRBZGFwdGVyRmFjdG9yeTsKKworCS8qKgorCSAqIFRoaXMgaXMgdXNlZCB0byBpbXBsZW1lbnQge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklDaGFuZ2VOb3RpZmllcn0uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIElDaGFuZ2VOb3RpZmllciBjaGFuZ2VOb3RpZmllciA9IG5ldyBDaGFuZ2VOb3RpZmllcigpOworCisJLyoqCisJICogVGhpcyBrZWVwcyB0cmFjayBvZiBhbGwgdGhlIHN1cHBvcnRlZCB0eXBlcyBjaGVja2VkIGJ5IHtAbGluayAjaXNGYWN0b3J5Rm9yVHlwZSBpc0ZhY3RvcnlGb3JUeXBlfS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgQ29sbGVjdGlvbjxPYmplY3Q+IHN1cHBvcnRlZFR5cGVzID0gbmV3IEFycmF5TGlzdDxPYmplY3Q+KCk7CisKKwkvKioKKwkgKiBUaGlzIGNvbnN0cnVjdHMgYW4gaW5zdGFuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFNjZW5hcmlvSXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkoKSB7CisJCXN1cHBvcnRlZFR5cGVzLmFkZChJRWRpdGluZ0RvbWFpbkl0ZW1Qcm92aWRlci5jbGFzcyk7CisJCXN1cHBvcnRlZFR5cGVzLmFkZChJU3RydWN0dXJlZEl0ZW1Db250ZW50UHJvdmlkZXIuY2xhc3MpOworCQlzdXBwb3J0ZWRUeXBlcy5hZGQoSVRyZWVJdGVtQ29udGVudFByb3ZpZGVyLmNsYXNzKTsKKwkJc3VwcG9ydGVkVHlwZXMuYWRkKElJdGVtTGFiZWxQcm92aWRlci5jbGFzcyk7CisJCXN1cHBvcnRlZFR5cGVzLmFkZChJSXRlbVByb3BlcnR5U291cmNlLmNsYXNzKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGtlZXBzIHRyYWNrIG9mIHRoZSBvbmUgYWRhcHRlciB1c2VkIGZvciBhbGwge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zY2VuYXJpby5TY2VuYXJpb30gaW5zdGFuY2VzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBTY2VuYXJpb0l0ZW1Qcm92aWRlciBzY2VuYXJpb0l0ZW1Qcm92aWRlcjsKKworCS8qKgorCSAqIFRoaXMgY3JlYXRlcyBhbiBhZGFwdGVyIGZvciBhIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2NlbmFyaW8uU2NlbmFyaW99LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZVNjZW5hcmlvQWRhcHRlcigpIHsKKwkJaWYgKHNjZW5hcmlvSXRlbVByb3ZpZGVyID09IG51bGwpIHsKKwkJCXNjZW5hcmlvSXRlbVByb3ZpZGVyID0gbmV3IFNjZW5hcmlvSXRlbVByb3ZpZGVyKHRoaXMpOworCQl9CisKKwkJcmV0dXJuIHNjZW5hcmlvSXRlbVByb3ZpZGVyOworCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyB0aGUgcm9vdCBhZGFwdGVyIGZhY3RvcnkgdGhhdCBjb250YWlucyB0aGlzIGZhY3RvcnkuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnkgZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCkgeworCQlyZXR1cm4gcGFyZW50QWRhcHRlckZhY3RvcnkgPT0gbnVsbCA/IHRoaXMgOiBwYXJlbnRBZGFwdGVyRmFjdG9yeS5nZXRSb290QWRhcHRlckZhY3RvcnkoKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHNldHMgdGhlIGNvbXBvc2VkIGFkYXB0ZXIgZmFjdG9yeSB0aGF0IGNvbnRhaW5zIHRoaXMgZmFjdG9yeS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRQYXJlbnRBZGFwdGVyRmFjdG9yeShDb21wb3NlZEFkYXB0ZXJGYWN0b3J5IHBhcmVudEFkYXB0ZXJGYWN0b3J5KSB7CisJCXRoaXMucGFyZW50QWRhcHRlckZhY3RvcnkgPSBwYXJlbnRBZGFwdGVyRmFjdG9yeTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgYm9vbGVhbiBpc0ZhY3RvcnlGb3JUeXBlKE9iamVjdCB0eXBlKSB7CisJCXJldHVybiBzdXBwb3J0ZWRUeXBlcy5jb250YWlucyh0eXBlKSB8fCBzdXBlci5pc0ZhY3RvcnlGb3JUeXBlKHR5cGUpOworCX0KKworCS8qKgorCSAqIFRoaXMgaW1wbGVtZW50YXRpb24gc3Vic3RpdHV0ZXMgdGhlIGZhY3RvcnkgaXRzZWxmIGFzIHRoZSBrZXkgZm9yIHRoZSBhZGFwdGVyLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBBZGFwdGVyIGFkYXB0KE5vdGlmaWVyIG5vdGlmaWVyLCBPYmplY3QgdHlwZSkgeworCQlyZXR1cm4gc3VwZXIuYWRhcHQobm90aWZpZXIsIHRoaXMpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBTdXBwcmVzc1dhcm5pbmdzKCJ1bmNoZWNrZWQiKQorCUBPdmVycmlkZQorCXB1YmxpYyBPYmplY3QgYWRhcHQoT2JqZWN0IG9iamVjdCwgT2JqZWN0IHR5cGUpIHsKKwkJaWYgKGlzRmFjdG9yeUZvclR5cGUodHlwZSkpIHsKKwkJCU9iamVjdCBhZGFwdGVyID0gc3VwZXIuYWRhcHQob2JqZWN0LCB0eXBlKTsKKwkJCWlmICghKHR5cGUgaW5zdGFuY2VvZiBDbGFzczw/PikgfHwgKCgoQ2xhc3M8Pz4pdHlwZSkuaXNJbnN0YW5jZShhZGFwdGVyKSkpIHsKKwkJCQlyZXR1cm4gYWRhcHRlcjsKKwkJCX0KKwkJfQorCisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyBhIGxpc3RlbmVyLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIGFkZExpc3RlbmVyKElOb3RpZnlDaGFuZ2VkTGlzdGVuZXIgbm90aWZ5Q2hhbmdlZExpc3RlbmVyKSB7CisJCWNoYW5nZU5vdGlmaWVyLmFkZExpc3RlbmVyKG5vdGlmeUNoYW5nZWRMaXN0ZW5lcik7CisJfQorCisJLyoqCisJICogVGhpcyByZW1vdmVzIGEgbGlzdGVuZXIuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgcmVtb3ZlTGlzdGVuZXIoSU5vdGlmeUNoYW5nZWRMaXN0ZW5lciBub3RpZnlDaGFuZ2VkTGlzdGVuZXIpIHsKKwkJY2hhbmdlTm90aWZpZXIucmVtb3ZlTGlzdGVuZXIobm90aWZ5Q2hhbmdlZExpc3RlbmVyKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGRlbGVnYXRlcyB0byB7QGxpbmsgI2NoYW5nZU5vdGlmaWVyfSBhbmQgdG8ge0BsaW5rICNwYXJlbnRBZGFwdGVyRmFjdG9yeX0uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgZmlyZU5vdGlmeUNoYW5nZWQoTm90aWZpY2F0aW9uIG5vdGlmaWNhdGlvbikgeworCQljaGFuZ2VOb3RpZmllci5maXJlTm90aWZ5Q2hhbmdlZChub3RpZmljYXRpb24pOworCisJCWlmIChwYXJlbnRBZGFwdGVyRmFjdG9yeSAhPSBudWxsKSB7CisJCQlwYXJlbnRBZGFwdGVyRmFjdG9yeS5maXJlTm90aWZ5Q2hhbmdlZChub3RpZmljYXRpb24pOworCQl9CisJfQorCisJLyoqCisJICogVGhpcyBkaXNwb3NlcyBhbGwgb2YgdGhlIGl0ZW0gcHJvdmlkZXJzIGNyZWF0ZWQgYnkgdGhpcyBmYWN0b3J5LiAKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBkaXNwb3NlKCkgeworCQlpZiAoc2NlbmFyaW9JdGVtUHJvdmlkZXIgIT0gbnVsbCkgc2NlbmFyaW9JdGVtUHJvdmlkZXIuZGlzcG9zZSgpOworCX0KKworfQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9zY2VuYXJpby91dGlsL1NjZW5hcmlvQWRhcHRlckZhY3RvcnkuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvc2NlbmFyaW8vdXRpbC9TY2VuYXJpb0FkYXB0ZXJGYWN0b3J5LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTJlOWY1ZAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvc2NlbmFyaW8vdXRpbC9TY2VuYXJpb0FkYXB0ZXJGYWN0b3J5LmphdmEKQEAgLTAsMCArMSwxNzggQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNjZW5hcmlvLnV0aWw7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIAorICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiAKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdCAKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sIAorICogCisgKiBDb250cmlidXRvcnM6IAorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiAKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworIAoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LkFkYXB0ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuaW1wbC5BZGFwdGVyRmFjdG9yeUltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3Q7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5JZGVudGlmaWFibGU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5TYW5pdHlDaGVja2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zY2VuYXJpby5TY2VuYXJpbzsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2NlbmFyaW8uU2NlbmFyaW9QYWNrYWdlOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IFRoZSA8Yj5BZGFwdGVyIEZhY3Rvcnk8L2I+IGZvciB0aGUgbW9kZWwuIEl0CisgKiBwcm92aWRlcyBhbiBhZGFwdGVyIDxjb2RlPmNyZWF0ZVhYWDwvY29kZT4gbWV0aG9kIGZvciBlYWNoIGNsYXNzIG9mIHRoZQorICogbW9kZWwuIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2NlbmFyaW8uU2NlbmFyaW9QYWNrYWdlCisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBTY2VuYXJpb0FkYXB0ZXJGYWN0b3J5IGV4dGVuZHMgQWRhcHRlckZhY3RvcnlJbXBsIHsKKwkvKioKKwkgKiBUaGUgY2FjaGVkIG1vZGVsIHBhY2thZ2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBzdGF0aWMgU2NlbmFyaW9QYWNrYWdlIG1vZGVsUGFja2FnZTsKKworCS8qKgorCSAqIENyZWF0ZXMgYW4gaW5zdGFuY2Ugb2YgdGhlIGFkYXB0ZXIgZmFjdG9yeS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tCisJICogZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgU2NlbmFyaW9BZGFwdGVyRmFjdG9yeSgpIHsKKwkJaWYgKG1vZGVsUGFja2FnZSA9PSBudWxsKSB7CisJCQltb2RlbFBhY2thZ2UgPSBTY2VuYXJpb1BhY2thZ2UuZUlOU1RBTkNFOworCQl9CisJfQorCisJLyoqCisJICogUmV0dXJucyB3aGV0aGVyIHRoaXMgZmFjdG9yeSBpcyBhcHBsaWNhYmxlIGZvciB0aGUgdHlwZSBvZiB0aGUgb2JqZWN0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyA8Y29kZT50cnVlPC9jb2RlPgorCSAqIGlmIHRoZSBvYmplY3QgaXMgZWl0aGVyIHRoZSBtb2RlbCdzIHBhY2thZ2Ugb3IgaXMgYW4gaW5zdGFuY2Ugb2JqZWN0IG9mCisJICogdGhlIG1vZGVsLiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHdoZXRoZXIgdGhpcyBmYWN0b3J5IGlzIGFwcGxpY2FibGUgZm9yIHRoZSB0eXBlIG9mIHRoZSBvYmplY3QuCisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBib29sZWFuIGlzRmFjdG9yeUZvclR5cGUoT2JqZWN0IG9iamVjdCkgeworCQlpZiAob2JqZWN0ID09IG1vZGVsUGFja2FnZSkgeworCQkJcmV0dXJuIHRydWU7CisJCX0KKwkJaWYgKG9iamVjdCBpbnN0YW5jZW9mIEVPYmplY3QpIHsKKwkJCXJldHVybiAoKEVPYmplY3Qpb2JqZWN0KS5lQ2xhc3MoKS5nZXRFUGFja2FnZSgpID09IG1vZGVsUGFja2FnZTsKKwkJfQorCQlyZXR1cm4gZmFsc2U7CisJfQorCisJLyoqCisJICogVGhlIHN3aXRjaCB0aGUgZGVsZWdhdGVzIHRvIHRoZSA8Y29kZT5jcmVhdGVYWFg8L2NvZGU+IG1ldGhvZHMuIDwhLS0KKwkgKiBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogCisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBTY2VuYXJpb1N3aXRjaDxBZGFwdGVyPiBtb2RlbFN3aXRjaCA9CisJCW5ldyBTY2VuYXJpb1N3aXRjaDxBZGFwdGVyPigpIHsKKwkJCUBPdmVycmlkZQorCQkJcHVibGljIEFkYXB0ZXIgY2FzZVNjZW5hcmlvKFNjZW5hcmlvIG9iamVjdCkgeworCQkJCXJldHVybiBjcmVhdGVTY2VuYXJpb0FkYXB0ZXIoKTsKKwkJCX0KKwkJCUBPdmVycmlkZQorCQkJcHVibGljIDxUPiBBZGFwdGVyIGNhc2VDb21wYXJhYmxlKENvbXBhcmFibGU8VD4gb2JqZWN0KSB7CisJCQkJcmV0dXJuIGNyZWF0ZUNvbXBhcmFibGVBZGFwdGVyKCk7CisJCQl9CisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyBBZGFwdGVyIGNhc2VTYW5pdHlDaGVja2VyKFNhbml0eUNoZWNrZXIgb2JqZWN0KSB7CisJCQkJcmV0dXJuIGNyZWF0ZVNhbml0eUNoZWNrZXJBZGFwdGVyKCk7CisJCQl9CisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyBBZGFwdGVyIGNhc2VJZGVudGlmaWFibGUoSWRlbnRpZmlhYmxlIG9iamVjdCkgeworCQkJCXJldHVybiBjcmVhdGVJZGVudGlmaWFibGVBZGFwdGVyKCk7CisJCQl9CisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyBBZGFwdGVyIGRlZmF1bHRDYXNlKEVPYmplY3Qgb2JqZWN0KSB7CisJCQkJcmV0dXJuIGNyZWF0ZUVPYmplY3RBZGFwdGVyKCk7CisJCQl9CisJCX07CisKKwkvKioKKwkgKiBDcmVhdGVzIGFuIGFkYXB0ZXIgZm9yIHRoZSA8Y29kZT50YXJnZXQ8L2NvZGU+LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MKKwkgKiAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIHRhcmdldCB0aGUgb2JqZWN0IHRvIGFkYXB0LgorCSAqIEByZXR1cm4gdGhlIGFkYXB0ZXIgZm9yIHRoZSA8Y29kZT50YXJnZXQ8L2NvZGU+LgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVBZGFwdGVyKE5vdGlmaWVyIHRhcmdldCkgeworCQlyZXR1cm4gbW9kZWxTd2l0Y2guZG9Td2l0Y2goKEVPYmplY3QpdGFyZ2V0KTsKKwl9CisKKworCS8qKgorCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNjZW5hcmlvLlNjZW5hcmlvIDxlbT5TY2VuYXJpbzwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0CisJICogd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7IGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZQorCSAqIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNjZW5hcmlvLlNjZW5hcmlvCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZVNjZW5hcmlvQWRhcHRlcigpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBqYXZhLmxhbmcuQ29tcGFyYWJsZSA8ZW0+Q29tcGFyYWJsZTwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7CisJICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCisJICogQHNlZSBqYXZhLmxhbmcuQ29tcGFyYWJsZQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVDb21wYXJhYmxlQWRhcHRlcigpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLlNhbml0eUNoZWNrZXIgPGVtPlNhbml0eSBDaGVja2VyPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsKKwkgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uU2FuaXR5Q2hlY2tlcgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVTYW5pdHlDaGVja2VyQWRhcHRlcigpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLklkZW50aWZpYWJsZSA8ZW0+SWRlbnRpZmlhYmxlPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQKKwkgKiB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsgaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlCisJICogd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLklkZW50aWZpYWJsZQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVJZGVudGlmaWFibGVBZGFwdGVyKCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIHRoZSBkZWZhdWx0IGNhc2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gVGhpcworCSAqIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsLiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlRU9iamVjdEFkYXB0ZXIoKSB7CisJCXJldHVybiBudWxsOworCX0KKworfSAvLyBTY2VuYXJpb0FkYXB0ZXJGYWN0b3J5CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3NjZW5hcmlvL3V0aWwvU2NlbmFyaW9Td2l0Y2guamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvc2NlbmFyaW8vdXRpbC9TY2VuYXJpb1N3aXRjaC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ3MjJkYmEKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3NjZW5hcmlvL3V0aWwvU2NlbmFyaW9Td2l0Y2guamF2YQpAQCAtMCwwICsxLDE3NiBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2NlbmFyaW8udXRpbDsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuIAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyAKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0IAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwgCisgKiAKKyAqIENvbnRyaWJ1dG9yczogCisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgCitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uSWRlbnRpZmlhYmxlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uU2FuaXR5Q2hlY2tlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2NlbmFyaW8uU2NlbmFyaW87CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNjZW5hcmlvLlNjZW5hcmlvUGFja2FnZTsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiBUaGUgPGI+U3dpdGNoPC9iPiBmb3IgdGhlIG1vZGVsJ3MgaW5oZXJpdGFuY2UKKyAqIGhpZXJhcmNoeS4gSXQgc3VwcG9ydHMgdGhlIGNhbGwge0BsaW5rICNkb1N3aXRjaChFT2JqZWN0KSBkb1N3aXRjaChvYmplY3QpfQorICogdG8gaW52b2tlIHRoZSA8Y29kZT5jYXNlWFhYPC9jb2RlPiBtZXRob2QgZm9yIGVhY2ggY2xhc3Mgb2YgdGhlIG1vZGVsLAorICogc3RhcnRpbmcgd2l0aCB0aGUgYWN0dWFsIGNsYXNzIG9mIHRoZSBvYmplY3QgYW5kIHByb2NlZWRpbmcgdXAgdGhlCisgKiBpbmhlcml0YW5jZSBoaWVyYXJjaHkgdW50aWwgYSBub24tbnVsbCByZXN1bHQgaXMgcmV0dXJuZWQsIHdoaWNoIGlzIHRoZQorICogcmVzdWx0IG9mIHRoZSBzd2l0Y2guIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2NlbmFyaW8uU2NlbmFyaW9QYWNrYWdlCisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBTY2VuYXJpb1N3aXRjaDxUMT4geworCS8qKgorCSAqIFRoZSBjYWNoZWQgbW9kZWwgcGFja2FnZQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgc3RhdGljIFNjZW5hcmlvUGFja2FnZSBtb2RlbFBhY2thZ2U7CisKKwkvKioKKwkgKiBDcmVhdGVzIGFuIGluc3RhbmNlIG9mIHRoZSBzd2l0Y2guCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLQorCSAqIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFNjZW5hcmlvU3dpdGNoKCkgeworCQlpZiAobW9kZWxQYWNrYWdlID09IG51bGwpIHsKKwkJCW1vZGVsUGFja2FnZSA9IFNjZW5hcmlvUGFja2FnZS5lSU5TVEFOQ0U7CisJCX0KKwl9CisKKwkvKioKKwkgKiBDYWxscyA8Y29kZT5jYXNlWFhYPC9jb2RlPiBmb3IgZWFjaCBjbGFzcyBvZiB0aGUgbW9kZWwgdW50aWwgb25lIHJldHVybnMgYSBub24gbnVsbCByZXN1bHQ7IGl0IHlpZWxkcyB0aGF0IHJlc3VsdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIGZpcnN0IG5vbi1udWxsIHJlc3VsdCByZXR1cm5lZCBieSBhIDxjb2RlPmNhc2VYWFg8L2NvZGU+IGNhbGwuCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBUMSBkb1N3aXRjaChFT2JqZWN0IHRoZUVPYmplY3QpIHsKKwkJcmV0dXJuIGRvU3dpdGNoKHRoZUVPYmplY3QuZUNsYXNzKCksIHRoZUVPYmplY3QpOworCX0KKworCS8qKgorCSAqIENhbGxzIDxjb2RlPmNhc2VYWFg8L2NvZGU+IGZvciBlYWNoIGNsYXNzIG9mIHRoZSBtb2RlbCB1bnRpbCBvbmUgcmV0dXJucyBhIG5vbiBudWxsIHJlc3VsdDsgaXQgeWllbGRzIHRoYXQgcmVzdWx0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgZmlyc3Qgbm9uLW51bGwgcmVzdWx0IHJldHVybmVkIGJ5IGEgPGNvZGU+Y2FzZVhYWDwvY29kZT4gY2FsbC4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIFQxIGRvU3dpdGNoKEVDbGFzcyB0aGVFQ2xhc3MsIEVPYmplY3QgdGhlRU9iamVjdCkgeworCQlpZiAodGhlRUNsYXNzLmVDb250YWluZXIoKSA9PSBtb2RlbFBhY2thZ2UpIHsKKwkJCXJldHVybiBkb1N3aXRjaCh0aGVFQ2xhc3MuZ2V0Q2xhc3NpZmllcklEKCksIHRoZUVPYmplY3QpOworCQl9CisJCWVsc2UgeworCQkJTGlzdDxFQ2xhc3M+IGVTdXBlclR5cGVzID0gdGhlRUNsYXNzLmdldEVTdXBlclR5cGVzKCk7CisJCQlyZXR1cm4KKwkJCQllU3VwZXJUeXBlcy5pc0VtcHR5KCkgPworCQkJCQlkZWZhdWx0Q2FzZSh0aGVFT2JqZWN0KSA6CisJCQkJCWRvU3dpdGNoKGVTdXBlclR5cGVzLmdldCgwKSwgdGhlRU9iamVjdCk7CisJCX0KKwl9CisKKwkvKioKKwkgKiBDYWxscyA8Y29kZT5jYXNlWFhYPC9jb2RlPiBmb3IgZWFjaCBjbGFzcyBvZiB0aGUgbW9kZWwgdW50aWwgb25lIHJldHVybnMgYSBub24gbnVsbCByZXN1bHQ7IGl0IHlpZWxkcyB0aGF0IHJlc3VsdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIGZpcnN0IG5vbi1udWxsIHJlc3VsdCByZXR1cm5lZCBieSBhIDxjb2RlPmNhc2VYWFg8L2NvZGU+IGNhbGwuCisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBUMSBkb1N3aXRjaChpbnQgY2xhc3NpZmllcklELCBFT2JqZWN0IHRoZUVPYmplY3QpIHsKKwkJc3dpdGNoIChjbGFzc2lmaWVySUQpIHsKKwkJCWNhc2UgU2NlbmFyaW9QYWNrYWdlLlNDRU5BUklPOiB7CisJCQkJU2NlbmFyaW8gc2NlbmFyaW8gPSAoU2NlbmFyaW8pdGhlRU9iamVjdDsKKwkJCQlUMSByZXN1bHQgPSBjYXNlU2NlbmFyaW8oc2NlbmFyaW8pOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZUlkZW50aWZpYWJsZShzY2VuYXJpbyk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlQ29tcGFyYWJsZShzY2VuYXJpbyk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlU2FuaXR5Q2hlY2tlcihzY2VuYXJpbyk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBkZWZhdWx0Q2FzZSh0aGVFT2JqZWN0KTsKKwkJCQlyZXR1cm4gcmVzdWx0OworCQkJfQorCQkJZGVmYXVsdDogcmV0dXJuIGRlZmF1bHRDYXNlKHRoZUVPYmplY3QpOworCQl9CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+U2NlbmFyaW88L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7IHJldHVybmluZyBhCisJICogbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgorCSAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPlNjZW5hcmlvPC9lbT4nLgorCSAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVDEgY2FzZVNjZW5hcmlvKFNjZW5hcmlvIG9iamVjdCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5Db21wYXJhYmxlPC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7CisJICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCisJICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+Q29tcGFyYWJsZTwvZW0+Jy4KKwkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIDxUPiBUMSBjYXNlQ29tcGFyYWJsZShDb21wYXJhYmxlPFQ+IG9iamVjdCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5TYW5pdHkgQ2hlY2tlcjwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOworCSAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgorCSAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPlNhbml0eSBDaGVja2VyPC9lbT4nLgorCSAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVDEgY2FzZVNhbml0eUNoZWNrZXIoU2FuaXR5Q2hlY2tlciBvYmplY3QpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+SWRlbnRpZmlhYmxlPC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOyByZXR1cm5pbmcgYQorCSAqIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KKwkgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5JZGVudGlmaWFibGU8L2VtPicuCisJICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBUMSBjYXNlSWRlbnRpZmlhYmxlKElkZW50aWZpYWJsZSBvYmplY3QpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+RU9iamVjdDwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsgcmV0dXJuaW5nIGEKKwkgKiBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaCwgYnV0IHRoaXMgaXMgdGhlIGxhc3QgY2FzZQorCSAqIGFueXdheS4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCisJICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+RU9iamVjdDwvZW0+Jy4KKwkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFQxIGRlZmF1bHRDYXNlKEVPYmplY3Qgb2JqZWN0KSB7CisJCXJldHVybiBudWxsOworCX0KKworfSAvLyBTY2VuYXJpb1N3aXRjaApkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9zZXF1ZW5jZXIvUmVhbFRpbWVTZXF1ZW5jZXIuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvc2VxdWVuY2VyL1JlYWxUaW1lU2VxdWVuY2VyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDU5MTI5ZAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvc2VxdWVuY2VyL1JlYWxUaW1lU2VxdWVuY2VyLmphdmEKQEAgLTAsMCArMSwyNCBAQAorLy8gUmVhbFRpbWVTZXF1ZW5jZXIuamF2YQorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2VxdWVuY2VyOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqCisgKiBBIDxjb2RlPlJlYWxUaW1lU2VxdWVuY2VyPC9jb2RlPiBpcyBhIDxjb2RlPlNlcXVlbnRpYWxTZXF1ZW5jZXI8L2NvZGU+CisgKiB0aGF0IGFsd2F5cyBhcyBhIHN0YXJ0aW5nIHRpbWUgZXF1YWwgdG8gdGhlIGN1cnJlbnQgdGltZS4gSXQgYWxzbyBzbGVlcHMgZm9yCisgKiB0aGUgdGltZSBpbmNyZW1lbnQgb2YgdGhlIHNlcXVlbmNlLgorICogCisgKiBAbW9kZWwKKyAqLworcHVibGljIGludGVyZmFjZSBSZWFsVGltZVNlcXVlbmNlciBleHRlbmRzIFNlcXVlbnRpYWxTZXF1ZW5jZXIgeworCit9IC8vIFJlYWxUaW1lU2VxdWVuY2VyCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3NlcXVlbmNlci9TZXF1ZW5jZXIuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvc2VxdWVuY2VyL1NlcXVlbmNlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgyYTkwODcKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3NlcXVlbmNlci9TZXF1ZW5jZXIuamF2YQpAQCAtMCwwICsxLDIwNyBAQAorLy8gU2VxdWVuY2VyLmphdmEKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNlcXVlbmNlcjsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLklkZW50aWZpYWJsZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguR3JhcGg7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLlNURU1UaW1lOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zY2VuYXJpby5TY2VuYXJpbzsKKworLyoqCisgKiBBIDxjb2RlPlNlcXVlbmNlcjwvY29kZT4gaXMgdGhlIGNvbXB1dGF0aW9uYWwgdW5pdCB0aGF0IGRldGVybWluZXMgdGhlCisgKiBzZXF1ZW5jZSBvZiB0aW1lIHBvaW50cyBhdCB3aGljaCB0aGUgc3RhdGUgb2YgdGhlIGNhbm9uaWNhbCB7QGxpbmsgR3JhcGh9IGlzCisgKiBkZXRlcm1pbmVkLiBJdCBhbHNvIGlzIHVzZWQgdG8gZGV0ZXJtaW5lIGlmIGFuZCB3aGVuIHRoZSBzZXF1ZW5jZSB0ZXJtaW5hdGVzLgorICogPHA+CisgKiBUaGlzIGludGVyZmFjZSBkZWZpbml0aW9uIGlzIGFsc28gYW4gIkFubm90YXRlZCBKYXZhIEludGVyZmFjZSIgdGhhdCBkZWZpbmVzCisgKiBvbmUgY2xhc3MgaW4gYSA8YSBocmVmPSJodHRwOi8vd3d3LnVtbC5vcmcvIj5VTUw8L2E+ICJtb2RlbCIuIFRoZSBVTUwgY2xhc3MKKyAqIGRpYWdyYW0gZm9yIHRoZSBtb2RlbCBpcyBpbiB0aGUgPGNvZGU+ZG9jdW1lbnRhdGlvbjwvY29kZT4gZm9sZGVyIG9mIHRoZQorICogcHJvamVjdC4gVGhpcyBmaWxlIGFuZCB0aGUgb3RoZXIgaW50ZXJmYWNlcyBpbiB0aGlzIEphdmEgcGFja2FnZSBhcmUKKyAqIHByb2Nlc3NlZCBieSB0aGUgRWNsaXBzZSBNb2RlbGluZyBGcmFtZXdvcmsgKGFrYSBFTUYgPGEKKyAqIGhyZWY9Imh0dHA6Ly9vcmcuZWNsaXBzZS9lbWYiPmh0dHA6Ly9vcmcuZWNsaXBzZS9lbWY8L2E+KS4gdG8gYXV0b21hdGljYWxseQorICogZ2VuZXJhdGUgYW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIG1vZGVsLiBFTUYgaXMgZG9jdW1lbnRlZCBpbiB0aGUgYm9vayA8YQorICogaHJlZj0iaHR0cDovL3d3dy5hd3Byb2Zlc3Npb25hbC5jb20vYm9va3N0b3JlL3Byb2R1Y3QuYXNwP2lzYm49MDEzMTQyNTQyMCZybD0xIj5FY2xpcHNlCisgKiBNb2RlbGluZyBGcmFtZXdvcmsgPC9hPiBieSBCdWRpbnNreSwgZXQgYWwuCisgKiA8L3A+CisgKiBAc2VlIFNjZW5hcmlvI3N0ZXAoKQorICogQHNlZSBTVEVNVGltZQorICogCisgKiBAbW9kZWwgYWJzdHJhY3Q9InRydWUiCisgKi8KK3B1YmxpYyBpbnRlcmZhY2UgU2VxdWVuY2VyIGV4dGVuZHMgSWRlbnRpZmlhYmxlIHsKKworCS8qKgorCSAqIFRoaXMgY29uc3RhbnQgaXMgcmV0dXJuZWQgYnkge0BsaW5rICNnZXRFbmRUaW1lKCl9IHdoZW4gYQorCSAqIDxjb2RlPlNlcXVlbmNlcjwvY29kZT4gaGFzIG5vIHNwZWNpZmllZCBlbmQgdGltZS4KKwkgKiAKKwkgKiBAc2VlICNnZXREdXJhdGlvbigpCisJICovCisJbG9uZyBVTktOT1dOX0RVUkFUSU9OID0gLTE7CisKKwkvKioKKwkgKiBAcmV0dXJuIHRoZSBzdGFydCB0aW1lIG9mIHRoZSBzZXF1ZW5jZS4KKwkgKiAKKwkgKiBAbW9kZWwgcmVzb2x2ZVByb3hpZXM9ImZhbHNlIiBjb250YWlubWVudD0idHJ1ZSIKKwkgKi8KKwlTVEVNVGltZSBnZXRTdGFydFRpbWUoKTsKKworCS8qKgorCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zZXF1ZW5jZXIuU2VxdWVuY2VyI2dldFN0YXJ0VGltZSA8ZW0+U3RhcnQgVGltZTwvZW0+fScgY29udGFpbm1lbnQgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPlN0YXJ0IFRpbWU8L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlLgorCSAqIEBzZWUgI2dldFN0YXJ0VGltZSgpCisJICogQGdlbmVyYXRlZAorCSAqLworCXZvaWQgc2V0U3RhcnRUaW1lKFNURU1UaW1lIHZhbHVlKTsKKworCS8qKgorCSAqIEByZXR1cm4gdGhlIGVuZGluZyB0aW1lIG9mIHRoZSBzZXF1ZW5jZSwgb3Ige0BsaW5rICNVTktOT1dOX0RVUkFUSU9OfSBpZgorCSAqICAgICAgICAgdGhlcmUgaXMgbm8gZW5kIHRpbWUuCisJICogCisJICogQG1vZGVsIHJlc29sdmVQcm94aWVzPSJmYWxzZSIgY29udGFpbm1lbnQ9InRydWUiCisJICovCisJU1RFTVRpbWUgZ2V0RW5kVGltZSgpOworCisJLyoqCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNlcXVlbmNlci5TZXF1ZW5jZXIjZ2V0RW5kVGltZSA8ZW0+RW5kIFRpbWU8L2VtPn0nIGNvbnRhaW5tZW50IHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5FbmQgVGltZTwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UuCisJICogQHNlZSAjZ2V0RW5kVGltZSgpCisJICogQGdlbmVyYXRlZAorCSAqLworCXZvaWQgc2V0RW5kVGltZShTVEVNVGltZSB2YWx1ZSk7CisKKwkvKioKKwkgKiBAcmV0dXJuIHRoZSA8Y29kZT5TZXF1ZW5jZXI8L2NvZGU+J3MgY3VycmVudCB0aW1lLgorCSAqIEBtb2RlbCByZXNvbHZlUHJveGllcz0iZmFsc2UiIGNvbnRhaW5tZW50PSJ0cnVlIgorCSAqLworCVNURU1UaW1lIGdldEN1cnJlbnRUaW1lKCk7CisKKwkvKioKKwkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2VxdWVuY2VyLlNlcXVlbmNlciNnZXRDdXJyZW50VGltZSA8ZW0+Q3VycmVudCBUaW1lPC9lbT59JyBjb250YWlubWVudCByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+Q3VycmVudCBUaW1lPC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZS4KKwkgKiBAc2VlICNnZXRDdXJyZW50VGltZSgpCisJICogQGdlbmVyYXRlZAorCSAqLworCXZvaWQgc2V0Q3VycmVudFRpbWUoU1RFTVRpbWUgdmFsdWUpOworCisJLyoqCisJICogQHJldHVybiB0aGUgbmV4dCB0aW1lIHBvaW50IGluIHRoZSBzZXF1ZW5jZS4gQXMgYSBzaWRlIGVmZmVjdCB0aGUKKwkgKiAgICAgICAgIDxjb2RlPnNlcXVlbmNlcjwvY29kZT4ncyBjdXJyZW50IHRpbWUgaXMgc2V0IHRvIHRoZSByZXR1cm5lZAorCSAqICAgICAgICAgdmFsdWUuCisJICogCisJICogQG1vZGVsIHZvbGF0aWxlPSJ0cnVlIiB0cmFuc2llbnQ9InRydWUiIGNoYW5nZWFibGU9ImZhbHNlIgorCSAqICAgICAgICByZXNvbHZlUHJveGllcz0iZmFsc2UiCisJICovCisJU1RFTVRpbWUgZ2V0TmV4dFRpbWUoKTsKKworCS8qKgorCSAqIEByZXR1cm4gdGhlIHRpbWUgZGlmZmVyZW5jZSBpbiBtaWxsaXNlY29uZHMgYmV0d2VlbiB0aGUgdmFsdWUgcmV0dXJuZWQgYnkKKwkgKiAgICAgICAgIHtAbGluayAgI2dldEN1cnJlbnRUaW1lKCl9IGFuZCB0aGF0IHJldHVybmVkIGJ5CisJICogICAgICAgICB7QGxpbmsgI2dldE5leHRUaW1lKCl9LiBUaGlzIHZhbHVlIGlzIG9ubHkgdmFsaWQgYWZ0ZXIgYSBjYWxsIHRvCisJICogICAgICAgICB7QGxpbmsgI2dldE5leHRUaW1lKCl9LgorCSAqIAorCSAqIEBzZWUgI2dldEN1cnJlbnRUaW1lKCkKKwkgKiBAc2VlICNnZXROZXh0VGltZSgpCisJICogCisJICogQG1vZGVsIGNoYW5nZWFibGU9ImZhbHNlIiB0cmFuc2llbnQ9InRydWUiCisJICovCisJbG9uZyBnZXRUaW1lRGVsdGEoKTsKKworCS8qKgorCSAqIEByZXR1cm4gdGhlIHRvdGFsIGFtb3VudCBvZiB0aW1lIGluIG1pbGxpc2Vjb25kcyBpbiB0aGUgc2VxdWVuY2UuIElmCisJICogICAgICAgICB0aGVyZSBpcyBubyBlbmRpbmcgdGltZSBzcGVjaWZpZWQgZm9yIHRoZSBzZXF1ZW5jZSwgdGhlIGNvbnN0YW50CisJICogICAgICAgICB7QGxpbmsgI1VOS05PV05fRFVSQVRJT059IGlzIHJldHVybmVkLgorCSAqIEBzZWUgI1VOS05PV05fRFVSQVRJT04KKwkgKiBAbW9kZWwgZGVmYXVsdD0iLTEiCisJICovCisJbG9uZyBnZXREdXJhdGlvbigpOworCisJLyoqCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNlcXVlbmNlci5TZXF1ZW5jZXIjZ2V0RHVyYXRpb24gPGVtPkR1cmF0aW9uPC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+RHVyYXRpb248L2VtPicgYXR0cmlidXRlLgorCSAqIEBzZWUgI2dldER1cmF0aW9uKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJdm9pZCBzZXREdXJhdGlvbihsb25nIHZhbHVlKTsKKworCS8qKgorCSAqIEByZXR1cm4gdHJ1ZSBpZiB0aGUgc2VxdWVuY2UgaGFzIGVuZGVkLgorCSAqIAorCSAqIEBtb2RlbCB2b2xhdGlsZT0idHJ1ZSIgdHJhbnNpZW50PSJ0cnVlIiBjaGFuZ2VhYmxlPSJmYWxzZSIKKwkgKi8KKwlib29sZWFuIGlzVGltZVRvU3RvcCgpOworCisJLyoqCisJICogU2V0IHRoZSBjdXJyZW50IHRpbWUgdG8gdGhlIHN0YXJ0IHRpbWUgYW5kIHByZXBhcmUgdGhlCisJICogPGNvZGU+U2VxdWVuY2VyPC9jb2RlPiB0byBiZWdpbiBjb21wdXRpbmcgdGhlIG5leHQgdGltZSBmcm9tIHRoYXQKKwkgKiBwb2ludC4gQWxzbyByZXNldCB0aGUgYW1vdW50IG9mIHdvcmsgY29tcGxldGUKKwkgKiAKKwkgKiBAc2VlICNnZXROZXh0VGltZSgpCisJICogQHNlZSAjZ2V0V29ya0NvbXBsZXRlKCkKKwkgKiAKKwkgKiBAbW9kZWwgdm9sYXRpbGU9InRydWUiIHRyYW5zaWVudD0idHJ1ZSIgY2hhbmdlYWJsZT0iZmFsc2UiCisJICovCisJdm9pZCByZXNldCgpOworCisJLyoqCisJICogQHJldHVybiBhbiB2YWx1ZSAoMC0xMDApIHJlcHJlc2VudGluZyB0aGUgcGVyY2VudGFnZSBvZiB0aGUgc2VxdWVuY2UKKwkgKiAgICAgICAgIHRoYXQgaGFzIGJlZW4gY29tcGxldGVkIHNvIGZhci4gSWYgbm8gZW5kIHRpbWUgaGFzIGJlZW4KKwkgKiAgICAgICAgIHNwZWNpZmllZCwgdGhlbiByZXR1cm4gMC4KKwkgKiAKKwkgKiBAbW9kZWwKKwkgKi8KKwlkb3VibGUgZ2V0V29ya0NvbXBsZXRlKCk7CisKKwkvKioKKwkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2VxdWVuY2VyLlNlcXVlbmNlciNnZXRXb3JrQ29tcGxldGUgPGVtPldvcmsgQ29tcGxldGU8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPldvcmsgQ29tcGxldGU8L2VtPicgYXR0cmlidXRlLgorCSAqIEBzZWUgI2dldFdvcmtDb21wbGV0ZSgpCisJICogQGdlbmVyYXRlZAorCSAqLworCXZvaWQgc2V0V29ya0NvbXBsZXRlKGRvdWJsZSB2YWx1ZSk7CisKKwkvKioKKwkgKiBAcmV0dXJuIGFuIGludGVnZXIgKDAtMTAwKSByZXByZXNlbnRpbmcgdGhlIHBlcmNlbnRhZ2Ugb2YgdGhlIHNlcXVlbmNlCisJICogICAgICAgICB0aGF0IHdhcyBjb21wbGV0ZWQgYnkgdGhlIHRpbWUgZGVsdGEgYmV0d2VlbiB0aGUgcHJldmlvdXMgdHdvCisJICogICAgICAgICBjYWxscyB0byB7QGxpbmsgI2dldE5leHRUaW1lKCl9CisJICogCisJICogQG1vZGVsIHZvbGF0aWxlPSJ0cnVlIiB0cmFuc2llbnQ9InRydWUiIGNoYW5nZWFibGU9ImZhbHNlIgorCSAqLworCWludCBnZXRXb3JrSW5jcmVtZW50KCk7CisKKwkvKioKKwkgKiBvYnRhaW4gdGhlIG51bWJlciBvZiBwcm9jZXNzaW5nIGN5Y2xlcyB0aGF0IGhhdmUgCisJICogYmVlbiBjb21wbGV0ZWQuICAKKwkgKiBJdCB3aWxsIHJldHVybiAwIGlmIG5vIGN5Y2xlcyBoYXZlIGJlZW4gY29tcGxldGVkIAorCSAqIG9yIGlmIHRoZSBzaW11bGF0aW9uIHdhcyByZXNldCBvciBpcyBqdXN0IHN0YXJ0aW5nLgorCSAqIAorCSAqIEByZXR1cm4gbnVtYmVyIG9mIGNvbXBsZXRlZCBjeWNsZXMuCisJICogQG1vZGVsIGRlZmF1bHQ9IjAiCisJICovCisJaW50IGdldEN5Y2xlKCk7CisKKwkvKioKKwkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2VxdWVuY2VyLlNlcXVlbmNlciNnZXRDeWNsZSA8ZW0+Q3ljbGU8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPkN5Y2xlPC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiBAc2VlICNnZXRDeWNsZSgpCisJICogQGdlbmVyYXRlZAorCSAqLworCXZvaWQgc2V0Q3ljbGUoaW50IHZhbHVlKTsKKwkKK30gLy8gU2VxdWVuY2VyCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3NlcXVlbmNlci9TZXF1ZW5jZXJGYWN0b3J5LmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3NlcXVlbmNlci9TZXF1ZW5jZXJGYWN0b3J5LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmFhNmZmNwotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvc2VxdWVuY2VyL1NlcXVlbmNlckZhY3RvcnkuamF2YQpAQCAtMCwwICsxLDYwIEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zZXF1ZW5jZXI7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVGYWN0b3J5OworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiBUaGUgPGI+RmFjdG9yeTwvYj4gZm9yIHRoZSBtb2RlbC4KKyAqIEl0IHByb3ZpZGVzIGEgY3JlYXRlIG1ldGhvZCBmb3IgZWFjaCBub24tYWJzdHJhY3QgY2xhc3Mgb2YgdGhlIG1vZGVsLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zZXF1ZW5jZXIuU2VxdWVuY2VyUGFja2FnZQorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgaW50ZXJmYWNlIFNlcXVlbmNlckZhY3RvcnkgZXh0ZW5kcyBFRmFjdG9yeSB7CisJLyoqCisJICogVGhlIHNpbmdsZXRvbiBpbnN0YW5jZSBvZiB0aGUgZmFjdG9yeS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlTZXF1ZW5jZXJGYWN0b3J5IGVJTlNUQU5DRSA9IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zZXF1ZW5jZXIuaW1wbC5TZXF1ZW5jZXJGYWN0b3J5SW1wbC5pbml0KCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPlJlYWwgVGltZSBTZXF1ZW5jZXI8L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPlJlYWwgVGltZSBTZXF1ZW5jZXI8L2VtPicuCisJICogQGdlbmVyYXRlZAorCSAqLworCVJlYWxUaW1lU2VxdWVuY2VyIGNyZWF0ZVJlYWxUaW1lU2VxdWVuY2VyKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPlNlcXVlbnRpYWwgU2VxdWVuY2VyPC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiBhIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5TZXF1ZW50aWFsIFNlcXVlbmNlcjwvZW0+Jy4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJU2VxdWVudGlhbFNlcXVlbmNlciBjcmVhdGVTZXF1ZW50aWFsU2VxdWVuY2VyKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBwYWNrYWdlIHN1cHBvcnRlZCBieSB0aGlzIGZhY3RvcnkuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBwYWNrYWdlIHN1cHBvcnRlZCBieSB0aGlzIGZhY3RvcnkuCisJICogQGdlbmVyYXRlZAorCSAqLworCVNlcXVlbmNlclBhY2thZ2UgZ2V0U2VxdWVuY2VyUGFja2FnZSgpOworCit9IC8vU2VxdWVuY2VyRmFjdG9yeQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9zZXF1ZW5jZXIvU2VxdWVuY2VyUGFja2FnZS5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9zZXF1ZW5jZXIvU2VxdWVuY2VyUGFja2FnZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMyZTc2NWEKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3NlcXVlbmNlci9TZXF1ZW5jZXJQYWNrYWdlLmphdmEKQEAgLTAsMCArMSw3ODggQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNlcXVlbmNlcjsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUF0dHJpYnV0ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRVJlZmVyZW5jZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLkNvbW1vblBhY2thZ2U7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIFRoZSA8Yj5QYWNrYWdlPC9iPiBmb3IgdGhlIG1vZGVsLgorICogSXQgY29udGFpbnMgYWNjZXNzb3JzIGZvciB0aGUgbWV0YSBvYmplY3RzIHRvIHJlcHJlc2VudAorICogPHVsPgorICogICA8bGk+ZWFjaCBjbGFzcyw8L2xpPgorICogICA8bGk+ZWFjaCBmZWF0dXJlIG9mIGVhY2ggY2xhc3MsPC9saT4KKyAqICAgPGxpPmVhY2ggZW51bSw8L2xpPgorICogICA8bGk+YW5kIGVhY2ggZGF0YSB0eXBlPC9saT4KKyAqIDwvdWw+CisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNlcXVlbmNlci5TZXF1ZW5jZXJGYWN0b3J5CisgKiBAbW9kZWwga2luZD0icGFja2FnZSIKKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGludGVyZmFjZSBTZXF1ZW5jZXJQYWNrYWdlIGV4dGVuZHMgRVBhY2thZ2UgeworCS8qKgorCSAqIFRoZSBwYWNrYWdlIG5hbWUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJU3RyaW5nIGVOQU1FID0gInNlcXVlbmNlciI7IC8vJE5PTi1OTFMtMSQKKworCS8qKgorCSAqIFRoZSBwYWNrYWdlIG5hbWVzcGFjZSBVUkkuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJU3RyaW5nIGVOU19VUkkgPSAiaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvc2VxdWVuY2VyLmVjb3JlIjsgLy8kTk9OLU5MUy0xJAorCisJLyoqCisJICogVGhlIHBhY2thZ2UgbmFtZXNwYWNlIG5hbWUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJU3RyaW5nIGVOU19QUkVGSVggPSAib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNlcXVlbmNlciI7IC8vJE5PTi1OTFMtMSQKKworCS8qKgorCSAqIFRoZSBzaW5nbGV0b24gaW5zdGFuY2Ugb2YgdGhlIHBhY2thZ2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJU2VxdWVuY2VyUGFja2FnZSBlSU5TVEFOQ0UgPSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2VxdWVuY2VyLmltcGwuU2VxdWVuY2VyUGFja2FnZUltcGwuaW5pdCgpOworCisJLyoqCisJICogVGhlIG1ldGEgb2JqZWN0IGlkIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2VxdWVuY2VyLmltcGwuU2VxdWVuY2VySW1wbCA8ZW0+U2VxdWVuY2VyPC9lbT59JyBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNlcXVlbmNlci5pbXBsLlNlcXVlbmNlckltcGwKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zZXF1ZW5jZXIuaW1wbC5TZXF1ZW5jZXJQYWNrYWdlSW1wbCNnZXRTZXF1ZW5jZXIoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlpbnQgU0VRVUVOQ0VSID0gMTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5VUkk8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTRVFVRU5DRVJfX1VSSSA9IENvbW1vblBhY2thZ2UuSURFTlRJRklBQkxFX19VUkk7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VHlwZSBVUkk8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTRVFVRU5DRVJfX1RZUEVfVVJJID0gQ29tbW9uUGFja2FnZS5JREVOVElGSUFCTEVfX1RZUEVfVVJJOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkR1YmxpbiBDb3JlPC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU0VRVUVOQ0VSX19EVUJMSU5fQ09SRSA9IENvbW1vblBhY2thZ2UuSURFTlRJRklBQkxFX19EVUJMSU5fQ09SRTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5TdGFydCBUaW1lPC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU0VRVUVOQ0VSX19TVEFSVF9USU1FID0gQ29tbW9uUGFja2FnZS5JREVOVElGSUFCTEVfRkVBVFVSRV9DT1VOVCArIDA7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RW5kIFRpbWU8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTRVFVRU5DRVJfX0VORF9USU1FID0gQ29tbW9uUGFja2FnZS5JREVOVElGSUFCTEVfRkVBVFVSRV9DT1VOVCArIDE7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+Q3VycmVudCBUaW1lPC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU0VRVUVOQ0VSX19DVVJSRU5UX1RJTUUgPSBDb21tb25QYWNrYWdlLklERU5USUZJQUJMRV9GRUFUVVJFX0NPVU5UICsgMjsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5OZXh0IFRpbWU8L2I+PC9lbT4nIHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTRVFVRU5DRVJfX05FWFRfVElNRSA9IENvbW1vblBhY2thZ2UuSURFTlRJRklBQkxFX0ZFQVRVUkVfQ09VTlQgKyAzOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlRpbWUgRGVsdGE8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTRVFVRU5DRVJfX1RJTUVfREVMVEEgPSBDb21tb25QYWNrYWdlLklERU5USUZJQUJMRV9GRUFUVVJFX0NPVU5UICsgNDsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5EdXJhdGlvbjwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNFUVVFTkNFUl9fRFVSQVRJT04gPSBDb21tb25QYWNrYWdlLklERU5USUZJQUJMRV9GRUFUVVJFX0NPVU5UICsgNTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5UaW1lIFRvIFN0b3A8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTRVFVRU5DRVJfX1RJTUVfVE9fU1RPUCA9IENvbW1vblBhY2thZ2UuSURFTlRJRklBQkxFX0ZFQVRVUkVfQ09VTlQgKyA2OworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPldvcmsgQ29tcGxldGU8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTRVFVRU5DRVJfX1dPUktfQ09NUExFVEUgPSBDb21tb25QYWNrYWdlLklERU5USUZJQUJMRV9GRUFUVVJFX0NPVU5UICsgNzsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5Xb3JrIEluY3JlbWVudDwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNFUVVFTkNFUl9fV09SS19JTkNSRU1FTlQgPSBDb21tb25QYWNrYWdlLklERU5USUZJQUJMRV9GRUFUVVJFX0NPVU5UICsgODsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5DeWNsZTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNFUVVFTkNFUl9fQ1lDTEUgPSBDb21tb25QYWNrYWdlLklERU5USUZJQUJMRV9GRUFUVVJFX0NPVU5UICsgOTsKKworCS8qKgorCSAqIFRoZSBudW1iZXIgb2Ygc3RydWN0dXJhbCBmZWF0dXJlcyBvZiB0aGUgJzxlbT5TZXF1ZW5jZXI8L2VtPicgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU0VRVUVOQ0VSX0ZFQVRVUkVfQ09VTlQgPSBDb21tb25QYWNrYWdlLklERU5USUZJQUJMRV9GRUFUVVJFX0NPVU5UICsgMTA7CisKKwkvKioKKwkgKiBUaGUgbWV0YSBvYmplY3QgaWQgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zZXF1ZW5jZXIuaW1wbC5TZXF1ZW50aWFsU2VxdWVuY2VySW1wbCA8ZW0+U2VxdWVudGlhbCBTZXF1ZW5jZXI8L2VtPn0nIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2VxdWVuY2VyLmltcGwuU2VxdWVudGlhbFNlcXVlbmNlckltcGwKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zZXF1ZW5jZXIuaW1wbC5TZXF1ZW5jZXJQYWNrYWdlSW1wbCNnZXRTZXF1ZW50aWFsU2VxdWVuY2VyKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJaW50IFNFUVVFTlRJQUxfU0VRVUVOQ0VSID0gMjsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5VUkk8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTRVFVRU5USUFMX1NFUVVFTkNFUl9fVVJJID0gU0VRVUVOQ0VSX19VUkk7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VHlwZSBVUkk8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTRVFVRU5USUFMX1NFUVVFTkNFUl9fVFlQRV9VUkkgPSBTRVFVRU5DRVJfX1RZUEVfVVJJOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkR1YmxpbiBDb3JlPC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU0VRVUVOVElBTF9TRVFVRU5DRVJfX0RVQkxJTl9DT1JFID0gU0VRVUVOQ0VSX19EVUJMSU5fQ09SRTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5TdGFydCBUaW1lPC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU0VRVUVOVElBTF9TRVFVRU5DRVJfX1NUQVJUX1RJTUUgPSBTRVFVRU5DRVJfX1NUQVJUX1RJTUU7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RW5kIFRpbWU8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTRVFVRU5USUFMX1NFUVVFTkNFUl9fRU5EX1RJTUUgPSBTRVFVRU5DRVJfX0VORF9USU1FOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkN1cnJlbnQgVGltZTwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNFUVVFTlRJQUxfU0VRVUVOQ0VSX19DVVJSRU5UX1RJTUUgPSBTRVFVRU5DRVJfX0NVUlJFTlRfVElNRTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5OZXh0IFRpbWU8L2I+PC9lbT4nIHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTRVFVRU5USUFMX1NFUVVFTkNFUl9fTkVYVF9USU1FID0gU0VRVUVOQ0VSX19ORVhUX1RJTUU7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VGltZSBEZWx0YTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNFUVVFTlRJQUxfU0VRVUVOQ0VSX19USU1FX0RFTFRBID0gU0VRVUVOQ0VSX19USU1FX0RFTFRBOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkR1cmF0aW9uPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU0VRVUVOVElBTF9TRVFVRU5DRVJfX0RVUkFUSU9OID0gU0VRVUVOQ0VSX19EVVJBVElPTjsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5UaW1lIFRvIFN0b3A8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTRVFVRU5USUFMX1NFUVVFTkNFUl9fVElNRV9UT19TVE9QID0gU0VRVUVOQ0VSX19USU1FX1RPX1NUT1A7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+V29yayBDb21wbGV0ZTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNFUVVFTlRJQUxfU0VRVUVOQ0VSX19XT1JLX0NPTVBMRVRFID0gU0VRVUVOQ0VSX19XT1JLX0NPTVBMRVRFOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPldvcmsgSW5jcmVtZW50PC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU0VRVUVOVElBTF9TRVFVRU5DRVJfX1dPUktfSU5DUkVNRU5UID0gU0VRVUVOQ0VSX19XT1JLX0lOQ1JFTUVOVDsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5DeWNsZTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNFUVVFTlRJQUxfU0VRVUVOQ0VSX19DWUNMRSA9IFNFUVVFTkNFUl9fQ1lDTEU7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VGltZSBJbmNyZW1lbnQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTRVFVRU5USUFMX1NFUVVFTkNFUl9fVElNRV9JTkNSRU1FTlQgPSBTRVFVRU5DRVJfRkVBVFVSRV9DT1VOVCArIDA7CisKKwkvKioKKwkgKiBUaGUgbnVtYmVyIG9mIHN0cnVjdHVyYWwgZmVhdHVyZXMgb2YgdGhlICc8ZW0+U2VxdWVudGlhbCBTZXF1ZW5jZXI8L2VtPicgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU0VRVUVOVElBTF9TRVFVRU5DRVJfRkVBVFVSRV9DT1VOVCA9IFNFUVVFTkNFUl9GRUFUVVJFX0NPVU5UICsgMTsKKworCS8qKgorCSAqIFRoZSBtZXRhIG9iamVjdCBpZCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNlcXVlbmNlci5pbXBsLlJlYWxUaW1lU2VxdWVuY2VySW1wbCA8ZW0+UmVhbCBUaW1lIFNlcXVlbmNlcjwvZW0+fScgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zZXF1ZW5jZXIuaW1wbC5SZWFsVGltZVNlcXVlbmNlckltcGwKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zZXF1ZW5jZXIuaW1wbC5TZXF1ZW5jZXJQYWNrYWdlSW1wbCNnZXRSZWFsVGltZVNlcXVlbmNlcigpCisJICogQGdlbmVyYXRlZAorCSAqLworCWludCBSRUFMX1RJTUVfU0VRVUVOQ0VSID0gMDsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5VUkk8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBSRUFMX1RJTUVfU0VRVUVOQ0VSX19VUkkgPSBTRVFVRU5USUFMX1NFUVVFTkNFUl9fVVJJOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlR5cGUgVVJJPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgUkVBTF9USU1FX1NFUVVFTkNFUl9fVFlQRV9VUkkgPSBTRVFVRU5USUFMX1NFUVVFTkNFUl9fVFlQRV9VUkk7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RHVibGluIENvcmU8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBSRUFMX1RJTUVfU0VRVUVOQ0VSX19EVUJMSU5fQ09SRSA9IFNFUVVFTlRJQUxfU0VRVUVOQ0VSX19EVUJMSU5fQ09SRTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5TdGFydCBUaW1lPC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgUkVBTF9USU1FX1NFUVVFTkNFUl9fU1RBUlRfVElNRSA9IFNFUVVFTlRJQUxfU0VRVUVOQ0VSX19TVEFSVF9USU1FOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkVuZCBUaW1lPC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgUkVBTF9USU1FX1NFUVVFTkNFUl9fRU5EX1RJTUUgPSBTRVFVRU5USUFMX1NFUVVFTkNFUl9fRU5EX1RJTUU7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+Q3VycmVudCBUaW1lPC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgUkVBTF9USU1FX1NFUVVFTkNFUl9fQ1VSUkVOVF9USU1FID0gU0VRVUVOVElBTF9TRVFVRU5DRVJfX0NVUlJFTlRfVElNRTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5OZXh0IFRpbWU8L2I+PC9lbT4nIHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBSRUFMX1RJTUVfU0VRVUVOQ0VSX19ORVhUX1RJTUUgPSBTRVFVRU5USUFMX1NFUVVFTkNFUl9fTkVYVF9USU1FOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlRpbWUgRGVsdGE8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBSRUFMX1RJTUVfU0VRVUVOQ0VSX19USU1FX0RFTFRBID0gU0VRVUVOVElBTF9TRVFVRU5DRVJfX1RJTUVfREVMVEE7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RHVyYXRpb248L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBSRUFMX1RJTUVfU0VRVUVOQ0VSX19EVVJBVElPTiA9IFNFUVVFTlRJQUxfU0VRVUVOQ0VSX19EVVJBVElPTjsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5UaW1lIFRvIFN0b3A8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBSRUFMX1RJTUVfU0VRVUVOQ0VSX19USU1FX1RPX1NUT1AgPSBTRVFVRU5USUFMX1NFUVVFTkNFUl9fVElNRV9UT19TVE9QOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPldvcmsgQ29tcGxldGU8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBSRUFMX1RJTUVfU0VRVUVOQ0VSX19XT1JLX0NPTVBMRVRFID0gU0VRVUVOVElBTF9TRVFVRU5DRVJfX1dPUktfQ09NUExFVEU7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+V29yayBJbmNyZW1lbnQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBSRUFMX1RJTUVfU0VRVUVOQ0VSX19XT1JLX0lOQ1JFTUVOVCA9IFNFUVVFTlRJQUxfU0VRVUVOQ0VSX19XT1JLX0lOQ1JFTUVOVDsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5DeWNsZTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFJFQUxfVElNRV9TRVFVRU5DRVJfX0NZQ0xFID0gU0VRVUVOVElBTF9TRVFVRU5DRVJfX0NZQ0xFOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlRpbWUgSW5jcmVtZW50PC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgUkVBTF9USU1FX1NFUVVFTkNFUl9fVElNRV9JTkNSRU1FTlQgPSBTRVFVRU5USUFMX1NFUVVFTkNFUl9fVElNRV9JTkNSRU1FTlQ7CisKKwkvKioKKwkgKiBUaGUgbnVtYmVyIG9mIHN0cnVjdHVyYWwgZmVhdHVyZXMgb2YgdGhlICc8ZW0+UmVhbCBUaW1lIFNlcXVlbmNlcjwvZW0+JyBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBSRUFMX1RJTUVfU0VRVUVOQ0VSX0ZFQVRVUkVfQ09VTlQgPSBTRVFVRU5USUFMX1NFUVVFTkNFUl9GRUFUVVJFX0NPVU5UICsgMDsKKworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNlcXVlbmNlci5SZWFsVGltZVNlcXVlbmNlciA8ZW0+UmVhbCBUaW1lIFNlcXVlbmNlcjwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJzxlbT5SZWFsIFRpbWUgU2VxdWVuY2VyPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNlcXVlbmNlci5SZWFsVGltZVNlcXVlbmNlcgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQ2xhc3MgZ2V0UmVhbFRpbWVTZXF1ZW5jZXIoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zZXF1ZW5jZXIuU2VxdWVuY2VyIDxlbT5TZXF1ZW5jZXI8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICc8ZW0+U2VxdWVuY2VyPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNlcXVlbmNlci5TZXF1ZW5jZXIKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUNsYXNzIGdldFNlcXVlbmNlcigpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBjb250YWlubWVudCByZWZlcmVuY2UgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2VxdWVuY2VyLlNlcXVlbmNlciNnZXRTdGFydFRpbWUgPGVtPlN0YXJ0IFRpbWU8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBjb250YWlubWVudCByZWZlcmVuY2UgJzxlbT5TdGFydCBUaW1lPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNlcXVlbmNlci5TZXF1ZW5jZXIjZ2V0U3RhcnRUaW1lKCkKKwkgKiBAc2VlICNnZXRTZXF1ZW5jZXIoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFUmVmZXJlbmNlIGdldFNlcXVlbmNlcl9TdGFydFRpbWUoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgY29udGFpbm1lbnQgcmVmZXJlbmNlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNlcXVlbmNlci5TZXF1ZW5jZXIjZ2V0RW5kVGltZSA8ZW0+RW5kIFRpbWU8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBjb250YWlubWVudCByZWZlcmVuY2UgJzxlbT5FbmQgVGltZTwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zZXF1ZW5jZXIuU2VxdWVuY2VyI2dldEVuZFRpbWUoKQorCSAqIEBzZWUgI2dldFNlcXVlbmNlcigpCisJICogQGdlbmVyYXRlZAorCSAqLworCUVSZWZlcmVuY2UgZ2V0U2VxdWVuY2VyX0VuZFRpbWUoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgY29udGFpbm1lbnQgcmVmZXJlbmNlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNlcXVlbmNlci5TZXF1ZW5jZXIjZ2V0Q3VycmVudFRpbWUgPGVtPkN1cnJlbnQgVGltZTwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGNvbnRhaW5tZW50IHJlZmVyZW5jZSAnPGVtPkN1cnJlbnQgVGltZTwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zZXF1ZW5jZXIuU2VxdWVuY2VyI2dldEN1cnJlbnRUaW1lKCkKKwkgKiBAc2VlICNnZXRTZXF1ZW5jZXIoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFUmVmZXJlbmNlIGdldFNlcXVlbmNlcl9DdXJyZW50VGltZSgpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSByZWZlcmVuY2UgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2VxdWVuY2VyLlNlcXVlbmNlciNnZXROZXh0VGltZSA8ZW0+TmV4dCBUaW1lPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgcmVmZXJlbmNlICc8ZW0+TmV4dCBUaW1lPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNlcXVlbmNlci5TZXF1ZW5jZXIjZ2V0TmV4dFRpbWUoKQorCSAqIEBzZWUgI2dldFNlcXVlbmNlcigpCisJICogQGdlbmVyYXRlZAorCSAqLworCUVSZWZlcmVuY2UgZ2V0U2VxdWVuY2VyX05leHRUaW1lKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zZXF1ZW5jZXIuU2VxdWVuY2VyI2dldFRpbWVEZWx0YSA8ZW0+VGltZSBEZWx0YTwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPGVtPlRpbWUgRGVsdGE8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2VxdWVuY2VyLlNlcXVlbmNlciNnZXRUaW1lRGVsdGEoKQorCSAqIEBzZWUgI2dldFNlcXVlbmNlcigpCisJICogQGdlbmVyYXRlZAorCSAqLworCUVBdHRyaWJ1dGUgZ2V0U2VxdWVuY2VyX1RpbWVEZWx0YSgpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2VxdWVuY2VyLlNlcXVlbmNlciNnZXREdXJhdGlvbiA8ZW0+RHVyYXRpb248L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxlbT5EdXJhdGlvbjwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zZXF1ZW5jZXIuU2VxdWVuY2VyI2dldER1cmF0aW9uKCkKKwkgKiBAc2VlICNnZXRTZXF1ZW5jZXIoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQXR0cmlidXRlIGdldFNlcXVlbmNlcl9EdXJhdGlvbigpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2VxdWVuY2VyLlNlcXVlbmNlciNpc1RpbWVUb1N0b3AgPGVtPlRpbWUgVG8gU3RvcDwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPGVtPlRpbWUgVG8gU3RvcDwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zZXF1ZW5jZXIuU2VxdWVuY2VyI2lzVGltZVRvU3RvcCgpCisJICogQHNlZSAjZ2V0U2VxdWVuY2VyKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUF0dHJpYnV0ZSBnZXRTZXF1ZW5jZXJfVGltZVRvU3RvcCgpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2VxdWVuY2VyLlNlcXVlbmNlciNnZXRXb3JrQ29tcGxldGUgPGVtPldvcmsgQ29tcGxldGU8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxlbT5Xb3JrIENvbXBsZXRlPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNlcXVlbmNlci5TZXF1ZW5jZXIjZ2V0V29ya0NvbXBsZXRlKCkKKwkgKiBAc2VlICNnZXRTZXF1ZW5jZXIoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQXR0cmlidXRlIGdldFNlcXVlbmNlcl9Xb3JrQ29tcGxldGUoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNlcXVlbmNlci5TZXF1ZW5jZXIjZ2V0V29ya0luY3JlbWVudCA8ZW0+V29yayBJbmNyZW1lbnQ8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxlbT5Xb3JrIEluY3JlbWVudDwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zZXF1ZW5jZXIuU2VxdWVuY2VyI2dldFdvcmtJbmNyZW1lbnQoKQorCSAqIEBzZWUgI2dldFNlcXVlbmNlcigpCisJICogQGdlbmVyYXRlZAorCSAqLworCUVBdHRyaWJ1dGUgZ2V0U2VxdWVuY2VyX1dvcmtJbmNyZW1lbnQoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNlcXVlbmNlci5TZXF1ZW5jZXIjZ2V0Q3ljbGUgPGVtPkN5Y2xlPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+Q3ljbGU8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2VxdWVuY2VyLlNlcXVlbmNlciNnZXRDeWNsZSgpCisJICogQHNlZSAjZ2V0U2VxdWVuY2VyKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUF0dHJpYnV0ZSBnZXRTZXF1ZW5jZXJfQ3ljbGUoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zZXF1ZW5jZXIuU2VxdWVudGlhbFNlcXVlbmNlciA8ZW0+U2VxdWVudGlhbCBTZXF1ZW5jZXI8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICc8ZW0+U2VxdWVudGlhbCBTZXF1ZW5jZXI8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2VxdWVuY2VyLlNlcXVlbnRpYWxTZXF1ZW5jZXIKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUNsYXNzIGdldFNlcXVlbnRpYWxTZXF1ZW5jZXIoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNlcXVlbmNlci5TZXF1ZW50aWFsU2VxdWVuY2VyI2dldFRpbWVJbmNyZW1lbnQgPGVtPlRpbWUgSW5jcmVtZW50PC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+VGltZSBJbmNyZW1lbnQ8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2VxdWVuY2VyLlNlcXVlbnRpYWxTZXF1ZW5jZXIjZ2V0VGltZUluY3JlbWVudCgpCisJICogQHNlZSAjZ2V0U2VxdWVudGlhbFNlcXVlbmNlcigpCisJICogQGdlbmVyYXRlZAorCSAqLworCUVBdHRyaWJ1dGUgZ2V0U2VxdWVudGlhbFNlcXVlbmNlcl9UaW1lSW5jcmVtZW50KCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBmYWN0b3J5IHRoYXQgY3JlYXRlcyB0aGUgaW5zdGFuY2VzIG9mIHRoZSBtb2RlbC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIGZhY3RvcnkgdGhhdCBjcmVhdGVzIHRoZSBpbnN0YW5jZXMgb2YgdGhlIG1vZGVsLgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlTZXF1ZW5jZXJGYWN0b3J5IGdldFNlcXVlbmNlckZhY3RvcnkoKTsKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogRGVmaW5lcyBsaXRlcmFscyBmb3IgdGhlIG1ldGEgb2JqZWN0cyB0aGF0IHJlcHJlc2VudAorCSAqIDx1bD4KKwkgKiAgIDxsaT5lYWNoIGNsYXNzLDwvbGk+CisJICogICA8bGk+ZWFjaCBmZWF0dXJlIG9mIGVhY2ggY2xhc3MsPC9saT4KKwkgKiAgIDxsaT5lYWNoIGVudW0sPC9saT4KKwkgKiAgIDxsaT5hbmQgZWFjaCBkYXRhIHR5cGU8L2xpPgorCSAqIDwvdWw+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCWludGVyZmFjZSBMaXRlcmFscyB7CisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNlcXVlbmNlci5pbXBsLlJlYWxUaW1lU2VxdWVuY2VySW1wbCA8ZW0+UmVhbCBUaW1lIFNlcXVlbmNlcjwvZW0+fScgY2xhc3MuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zZXF1ZW5jZXIuaW1wbC5SZWFsVGltZVNlcXVlbmNlckltcGwKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2VxdWVuY2VyLmltcGwuU2VxdWVuY2VyUGFja2FnZUltcGwjZ2V0UmVhbFRpbWVTZXF1ZW5jZXIoKQorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQ2xhc3MgUkVBTF9USU1FX1NFUVVFTkNFUiA9IGVJTlNUQU5DRS5nZXRSZWFsVGltZVNlcXVlbmNlcigpOworCisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNlcXVlbmNlci5pbXBsLlNlcXVlbmNlckltcGwgPGVtPlNlcXVlbmNlcjwvZW0+fScgY2xhc3MuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zZXF1ZW5jZXIuaW1wbC5TZXF1ZW5jZXJJbXBsCisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNlcXVlbmNlci5pbXBsLlNlcXVlbmNlclBhY2thZ2VJbXBsI2dldFNlcXVlbmNlcigpCisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVDbGFzcyBTRVFVRU5DRVIgPSBlSU5TVEFOQ0UuZ2V0U2VxdWVuY2VyKCk7CisKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5TdGFydCBUaW1lPC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UgZmVhdHVyZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVSZWZlcmVuY2UgU0VRVUVOQ0VSX19TVEFSVF9USU1FID0gZUlOU1RBTkNFLmdldFNlcXVlbmNlcl9TdGFydFRpbWUoKTsKKworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPkVuZCBUaW1lPC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UgZmVhdHVyZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVSZWZlcmVuY2UgU0VRVUVOQ0VSX19FTkRfVElNRSA9IGVJTlNUQU5DRS5nZXRTZXF1ZW5jZXJfRW5kVGltZSgpOworCisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+Q3VycmVudCBUaW1lPC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UgZmVhdHVyZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVSZWZlcmVuY2UgU0VRVUVOQ0VSX19DVVJSRU5UX1RJTUUgPSBlSU5TVEFOQ0UuZ2V0U2VxdWVuY2VyX0N1cnJlbnRUaW1lKCk7CisKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5OZXh0IFRpbWU8L2I+PC9lbT4nIHJlZmVyZW5jZSBmZWF0dXJlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRVJlZmVyZW5jZSBTRVFVRU5DRVJfX05FWFRfVElNRSA9IGVJTlNUQU5DRS5nZXRTZXF1ZW5jZXJfTmV4dFRpbWUoKTsKKworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPlRpbWUgRGVsdGE8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUF0dHJpYnV0ZSBTRVFVRU5DRVJfX1RJTUVfREVMVEEgPSBlSU5TVEFOQ0UuZ2V0U2VxdWVuY2VyX1RpbWVEZWx0YSgpOworCisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+RHVyYXRpb248L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUF0dHJpYnV0ZSBTRVFVRU5DRVJfX0RVUkFUSU9OID0gZUlOU1RBTkNFLmdldFNlcXVlbmNlcl9EdXJhdGlvbigpOworCisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+VGltZSBUbyBTdG9wPC9iPjwvZW0+JyBhdHRyaWJ1dGUgZmVhdHVyZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVBdHRyaWJ1dGUgU0VRVUVOQ0VSX19USU1FX1RPX1NUT1AgPSBlSU5TVEFOQ0UuZ2V0U2VxdWVuY2VyX1RpbWVUb1N0b3AoKTsKKworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPldvcmsgQ29tcGxldGU8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUF0dHJpYnV0ZSBTRVFVRU5DRVJfX1dPUktfQ09NUExFVEUgPSBlSU5TVEFOQ0UuZ2V0U2VxdWVuY2VyX1dvcmtDb21wbGV0ZSgpOworCisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+V29yayBJbmNyZW1lbnQ8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUF0dHJpYnV0ZSBTRVFVRU5DRVJfX1dPUktfSU5DUkVNRU5UID0gZUlOU1RBTkNFLmdldFNlcXVlbmNlcl9Xb3JrSW5jcmVtZW50KCk7CisKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5DeWNsZTwvYj48L2VtPicgYXR0cmlidXRlIGZlYXR1cmUuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQXR0cmlidXRlIFNFUVVFTkNFUl9fQ1lDTEUgPSBlSU5TVEFOQ0UuZ2V0U2VxdWVuY2VyX0N5Y2xlKCk7CisKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2VxdWVuY2VyLmltcGwuU2VxdWVudGlhbFNlcXVlbmNlckltcGwgPGVtPlNlcXVlbnRpYWwgU2VxdWVuY2VyPC9lbT59JyBjbGFzcy4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNlcXVlbmNlci5pbXBsLlNlcXVlbnRpYWxTZXF1ZW5jZXJJbXBsCisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNlcXVlbmNlci5pbXBsLlNlcXVlbmNlclBhY2thZ2VJbXBsI2dldFNlcXVlbnRpYWxTZXF1ZW5jZXIoKQorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQ2xhc3MgU0VRVUVOVElBTF9TRVFVRU5DRVIgPSBlSU5TVEFOQ0UuZ2V0U2VxdWVudGlhbFNlcXVlbmNlcigpOworCisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+VGltZSBJbmNyZW1lbnQ8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUF0dHJpYnV0ZSBTRVFVRU5USUFMX1NFUVVFTkNFUl9fVElNRV9JTkNSRU1FTlQgPSBlSU5TVEFOQ0UuZ2V0U2VxdWVudGlhbFNlcXVlbmNlcl9UaW1lSW5jcmVtZW50KCk7CisKKwl9CisKK30gLy9TZXF1ZW5jZXJQYWNrYWdlCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3NlcXVlbmNlci9TZXF1ZW50aWFsU2VxdWVuY2VyLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3NlcXVlbmNlci9TZXF1ZW50aWFsU2VxdWVuY2VyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTBjMzk5YQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvc2VxdWVuY2VyL1NlcXVlbnRpYWxTZXF1ZW5jZXIuamF2YQpAQCAtMCwwICsxLDQxIEBACisvLyBTZXF1ZW50aWFsU2VxdWVuY2VyLmphdmEKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNlcXVlbmNlcjsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKgorKiBBIDxjb2RlPlNlcXVlbnRpYWxTZXF1ZW5jZXI8L2NvZGU+IGlzIGEge0BsaW5rIFNlcXVlbmNlcn0gdGhhdCBnZW5lcmF0ZXMKKyogc2VxdWVudGlhbCB0aW1lIHBvaW50cyB0aGF0IGFyZSB1bmlmb3JtbHkgc3BhY2VkIGF0IGEgY29uc3RhbnQgaW50ZXJ2YWwgb2YKKyogdGltZS4KKyogCisqIEBtb2RlbAorKi8KK3B1YmxpYyBpbnRlcmZhY2UgU2VxdWVudGlhbFNlcXVlbmNlciBleHRlbmRzIFNlcXVlbmNlciB7CisKKwkvKioKKwkgKiBAcmV0dXJuIHRoZSBudW1iZXIgb2YgbWlsbGlzZWNvbmRzIGJldHdlZW4gdGhlIHRpbWUgcG9pbnRzIHJldHVybmVkIGJ5CisJICogICAgICAgICBzdWNjZXNzaXZlIGNhbGxzIHRvIHtAbGluayBTZXF1ZW5jZXIjZ2V0TmV4dFRpbWUoKX0uCisJICogCisJICogQG1vZGVsCisJICovCisJbG9uZyBnZXRUaW1lSW5jcmVtZW50KCk7CisKKwkvKioKKwkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2VxdWVuY2VyLlNlcXVlbnRpYWxTZXF1ZW5jZXIjZ2V0VGltZUluY3JlbWVudCA8ZW0+VGltZSBJbmNyZW1lbnQ8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5UaW1lIEluY3JlbWVudDwvZW0+JyBhdHRyaWJ1dGUuCisJICogQHNlZSAjZ2V0VGltZUluY3JlbWVudCgpCisJICogQGdlbmVyYXRlZAorCSAqLworCXZvaWQgc2V0VGltZUluY3JlbWVudChsb25nIHZhbHVlKTsKKworfSAvLyBTZXF1ZW50aWFsU2VxdWVuY2VyCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3NlcXVlbmNlci9pbXBsL1JlYWxUaW1lU2VxdWVuY2VySW1wbC5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9zZXF1ZW5jZXIvaW1wbC9SZWFsVGltZVNlcXVlbmNlckltcGwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zODAwOWNjCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9zZXF1ZW5jZXIvaW1wbC9SZWFsVGltZVNlcXVlbmNlckltcGwuamF2YQpAQCAtMCwwICsxLDE1MSBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2VxdWVuY2VyLmltcGw7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzczsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuQ29yZVBsdWdpbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuTW9kZWxGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5TVEVNVGltZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2VxdWVuY2VyLlJlYWxUaW1lU2VxdWVuY2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zZXF1ZW5jZXIuU2VxdWVuY2VyUGFja2FnZTsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiBBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+UmVhbCBUaW1lIFNlcXVlbmNlcjwvYj48L2VtPicuCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIDxwPgorICogPC9wPgorICoKKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIFJlYWxUaW1lU2VxdWVuY2VySW1wbCBleHRlbmRzIFNlcXVlbnRpYWxTZXF1ZW5jZXJJbXBsIGltcGxlbWVudHMKKwkJUmVhbFRpbWVTZXF1ZW5jZXIgeworCS8qKgorCSAqIElmIDxjb2RlPnRydWU8L2NvZGU+IHRoZW4gdGhlIG1ldGhvZCB7QGxpbmsgI2dldE5leHRDYWxsZWQoKX0gaGFzIGJlZW4KKwkgKiBjYWxsZWQgb25jZS4gVGhpcyBpcyBjaGVja2VkIGJlbG93IGluIHtAbGluayAjZ2V0U3RhcnRUaW1lKCl9LgorCSAqLworCXByaXZhdGUgYm9vbGVhbiBnZXROZXh0Q2FsbGVkID0gZmFsc2U7CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIFJlYWxUaW1lU2VxdWVuY2VySW1wbCgpIHsKKwkJc3VwZXIoKTsKKwl9CisKKwkvKioKKwkgKiBUaGUgc3RhcnQgdGltZSBmb3IgYSByZWFsLXRpbWUgc2VxdWVuY2VyIGlzIHRoZSBjdXJyZW50IHRpbWUgdW50aWwgdGhlcmUKKwkgKiBpcyBhIGNhbGwgdG8gZ2V0TmV4dFRpbWUoKSwgYXQgd2hpY2ggcG9pbnQgdGhlIHN0YXJ0IHRpbWUgaXMgZml4ZWQuCisJICogCisJICogQHNlZSAjZ2V0TmV4dENhbGxlZAorCSAqIEBzZWUgI2dldE5leHRUaW1lKCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgU1RFTVRpbWUgZ2V0U3RhcnRUaW1lKCkgeworCQkvLyBIYXMgZ2V0TmV4dFRpbWUgYmVlbiBjYWxsZWQgeWV0LgorCQlpZiAoIWdldE5leHRDYWxsZWQpIHsKKwkJCS8vIE5vCisJCQlyZXR1cm4gZ2V0Q3VycmVudFN5c3RlbVRpbWUoKTsKKwkJfSAvLyBpZgorCQllbHNlIHsKKwkJCXJldHVybiBzdXBlci5nZXRTdGFydFRpbWUoKTsKKwkJfQorCX0gLy8gZ2V0U3RhcnRUaW1lCisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zZXF1ZW5jZXIuaW1wbC5TZXF1ZW50aWFsU2VxdWVuY2VySW1wbCNnZXROZXh0VGltZSgpCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIFNURU1UaW1lIGdldE5leHRUaW1lKCkgeworCQlzdXBlci5nZXROZXh0VGltZSgpOworCQkKKwkJLy8gSXMgdGhpcyBvdXIgZmlyc3QgY2FsbD8KKwkJaWYgKCFnZXROZXh0Q2FsbGVkKSB7CisJCQkvLyBZZXMKKwkJCWdldE5leHRDYWxsZWQgPSB0cnVlOworCQkJLy8gVGhlIHN0YXJ0IHRpbWUgaXMgcmlnaHQgbm93CisJCQlzZXRTdGFydFRpbWUoZ2V0Q3VycmVudFN5c3RlbVRpbWUoKSk7CisJCX0gLy8gaWYKKworCQlmaW5hbCBTVEVNVGltZSBjdXJyZW50VGltZSA9IGdldEN1cnJlbnRUaW1lKCk7CisJCQorCQlmaW5hbCBTVEVNVGltZSB0aW1lVG9XYWtlVXAgPSBzdXBlci5nZXROZXh0VGltZSgpOworCisJCS8vIE5vdyB3ZSBzbGVlcCB1bnRpbCBpdCBpcyB0aGUgbmV4dCB0aW1lCisJCXNsZWVwVW50aWwodGltZVRvV2FrZVVwLCBjdXJyZW50VGltZSk7CisKKwkJLy8gV2UgbWF5IG9yIG1heSBub3QgaGF2ZSB3b2tlbiB1cCB3aGVuIHdlIGV4cGVjdGVkLiBTZXQgdGhlIGN1cnJlbnQKKwkJLy8gdGltZSB0byBiZSB3aGF0ZXZlciB0aGUgdGltZSBpcyBub3cuCisJCXNldEN1cnJlbnRUaW1lKGdldEN1cnJlbnRTeXN0ZW1UaW1lKCkpOworCQlyZXR1cm4gZ2V0Q3VycmVudFRpbWUoKTsKKwl9IC8vIGdldE5leHRUaW1lCisKKwkvKioKKwkgKiBAcGFyYW0gY3VycmVudFRpbWUgVE9ETworCSAqIEBwYXJhbSByZXRWYWx1ZQorCSAqLworCXByaXZhdGUgdm9pZCBzbGVlcFVudGlsKFNURU1UaW1lIGZ1dHVyZVRpbWUsIFNURU1UaW1lIGN1cnJlbnRUaW1lKSB7CisJCWZpbmFsIGxvbmcgbWlsbGlzZWNvbmRzVG9TbGVlcCA9IGZ1dHVyZVRpbWUuZ2V0VGltZSgpLmdldFRpbWUoKQorCQkJCS0gY3VycmVudFRpbWUuZ2V0VGltZSgpLmdldFRpbWUoKTsKKwkJdHJ5IHsKKwkJCVRocmVhZC5zbGVlcChtaWxsaXNlY29uZHNUb1NsZWVwKTsKKwkJfSBjYXRjaCAoSW50ZXJydXB0ZWRFeGNlcHRpb24gZSkgeworCQkJQ29yZVBsdWdpbi5sb2dJbmZvcm1hdGlvbigKKwkJCQkJIlJlYWxUaW1lU2VxdWVuY2VyJ3Mgc2xlZXAgd2FzIGludGVycnVwdGVkIiwgZSk7CisJCX0KKwl9IC8vIHNsZWVwVW50aWwKKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNlcXVlbmNlci5pbXBsLlNlcXVlbmNlckltcGwjc2V0RW5kVGltZShvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuU1RFTVRpbWUpCisJICogQHRocm93cyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24KKwkgKiAgICAgICAgICAgICBpZiB0aGUgbmV3IGVuZCB0aW1lIGlzIGJlZm9yZSB0aGUgY3VycmVudCAod2FsbCBjbG9jaykgdGltZS4KKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBzZXRFbmRUaW1lKFNURU1UaW1lIG5ld0VuZFRpbWUpIHsKKwkJLy8gVGhlIGVuZCB0aW1lIHNob3VsZCBiZSBsYXRlciB0aGFuIHRoZSBjdXJyZW50IHRpbWUKKwkJZmluYWwgU1RFTVRpbWUgY3VycmVudFRpbWUgPSBnZXRDdXJyZW50U3lzdGVtVGltZSgpOworCQlpZiAoaXNFbmRUaW1lQmVmb3JlKGN1cnJlbnRUaW1lKSkgeworCQkJc3VwZXIuc2V0RW5kVGltZShuZXdFbmRUaW1lKTsKKwkJfSAvLyBpZgorCQllbHNlIHsKKwkJCXRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIlRoZSBuZXcgZW5kIHRpbWUgXCIiCisJCQkJCSsgbmV3RW5kVGltZS50b1N0cmluZygpCisJCQkJCSsgIlwiIGlzIG5vdCBhZnRlciB0aGUgY3VycmVudCB0aW1lIG9mIFwiIgorCQkJCQkrIGN1cnJlbnRUaW1lLnRvU3RyaW5nKCkgKyAiXCIiKTsKKwkJfSAvLyBlbHNlCisJfSAvLyBzZXRFbmRUaW1lCisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zZXF1ZW5jZXIuaW1wbC5TZXF1ZW50aWFsU2VxdWVuY2VySW1wbCNyZXNldCgpCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgcmVzZXQoKSB7CisJCXN1cGVyLnJlc2V0KCk7CisJCWdldE5leHRDYWxsZWQgPSBmYWxzZTsKKwl9IC8vIHJlc2V0CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIEVDbGFzcyBlU3RhdGljQ2xhc3MoKSB7CisJCXJldHVybiBTZXF1ZW5jZXJQYWNrYWdlLkxpdGVyYWxzLlJFQUxfVElNRV9TRVFVRU5DRVI7CisJfQorCisJLyoqCisJICogQHJldHVybiB0aGUgY3VycmVudCByZWFsIHdhbGwgY2xvY2sgdGltZSBhcyByZXR1cm5lZCBieSB0aGUgc3lzdGVtLgorCSAqLworCXByb3RlY3RlZCBzdGF0aWMgU1RFTVRpbWUgZ2V0Q3VycmVudFN5c3RlbVRpbWUoKSB7CisJCXJldHVybiBNb2RlbEZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZVNURU1UaW1lKCk7CisJfSAvLyBnZXRDdXJyZW50U3lzdGVtVGltZQorfSAvLyBSZWFsVGltZVNlcXVlbmNlckltcGwKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvc2VxdWVuY2VyL2ltcGwvU2VxdWVuY2VyRmFjdG9yeUltcGwuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvc2VxdWVuY2VyL2ltcGwvU2VxdWVuY2VyRmFjdG9yeUltcGwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZjg1NDdhCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9zZXF1ZW5jZXIvaW1wbC9TZXF1ZW5jZXJGYWN0b3J5SW1wbC5qYXZhCkBAIC0wLDAgKzEsMTE1IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zZXF1ZW5jZXIuaW1wbDsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuaW1wbC5FRmFjdG9yeUltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnBsdWdpbi5FY29yZVBsdWdpbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2VxdWVuY2VyLlJlYWxUaW1lU2VxdWVuY2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zZXF1ZW5jZXIuU2VxdWVuY2VyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2VxdWVuY2VyLlNlcXVlbmNlclBhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNlcXVlbmNlci5TZXF1ZW50aWFsU2VxdWVuY2VyOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiBBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgbW9kZWwgPGI+RmFjdG9yeTwvYj4uCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIFNlcXVlbmNlckZhY3RvcnlJbXBsIGV4dGVuZHMgRUZhY3RvcnlJbXBsIGltcGxlbWVudHMgU2VxdWVuY2VyRmFjdG9yeSB7CisJLyoqCisJICogQ3JlYXRlcyB0aGUgZGVmYXVsdCBmYWN0b3J5IGltcGxlbWVudGF0aW9uLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBzdGF0aWMgU2VxdWVuY2VyRmFjdG9yeSBpbml0KCkgeworCQl0cnkgeworCQkJU2VxdWVuY2VyRmFjdG9yeSB0aGVTZXF1ZW5jZXJGYWN0b3J5ID0gKFNlcXVlbmNlckZhY3RvcnkpRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RUZhY3RvcnkoImh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3NlcXVlbmNlci5lY29yZSIpOyAvLyROT04tTkxTLTEkIAorCQkJaWYgKHRoZVNlcXVlbmNlckZhY3RvcnkgIT0gbnVsbCkgeworCQkJCXJldHVybiB0aGVTZXF1ZW5jZXJGYWN0b3J5OworCQkJfQorCQl9CisJCWNhdGNoIChFeGNlcHRpb24gZXhjZXB0aW9uKSB7CisJCQlFY29yZVBsdWdpbi5JTlNUQU5DRS5sb2coZXhjZXB0aW9uKTsKKwkJfQorCQlyZXR1cm4gbmV3IFNlcXVlbmNlckZhY3RvcnlJbXBsKCk7CisJfQorCisJLyoqCisJICogQ3JlYXRlcyBhbiBpbnN0YW5jZSBvZiB0aGUgZmFjdG9yeS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgU2VxdWVuY2VyRmFjdG9yeUltcGwoKSB7CisJCXN1cGVyKCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIEVPYmplY3QgY3JlYXRlKEVDbGFzcyBlQ2xhc3MpIHsKKwkJc3dpdGNoIChlQ2xhc3MuZ2V0Q2xhc3NpZmllcklEKCkpIHsKKwkJCWNhc2UgU2VxdWVuY2VyUGFja2FnZS5SRUFMX1RJTUVfU0VRVUVOQ0VSOiByZXR1cm4gY3JlYXRlUmVhbFRpbWVTZXF1ZW5jZXIoKTsKKwkJCWNhc2UgU2VxdWVuY2VyUGFja2FnZS5TRVFVRU5USUFMX1NFUVVFTkNFUjogcmV0dXJuIGNyZWF0ZVNlcXVlbnRpYWxTZXF1ZW5jZXIoKTsKKwkJCWRlZmF1bHQ6CisJCQkJdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiVGhlIGNsYXNzICciICsgZUNsYXNzLmdldE5hbWUoKSArICInIGlzIG5vdCBhIHZhbGlkIGNsYXNzaWZpZXIiKTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCisJCX0KKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgUmVhbFRpbWVTZXF1ZW5jZXIgY3JlYXRlUmVhbFRpbWVTZXF1ZW5jZXIoKSB7CisJCVJlYWxUaW1lU2VxdWVuY2VySW1wbCByZWFsVGltZVNlcXVlbmNlciA9IG5ldyBSZWFsVGltZVNlcXVlbmNlckltcGwoKTsKKwkJcmV0dXJuIHJlYWxUaW1lU2VxdWVuY2VyOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBTZXF1ZW50aWFsU2VxdWVuY2VyIGNyZWF0ZVNlcXVlbnRpYWxTZXF1ZW5jZXIoKSB7CisJCVNlcXVlbnRpYWxTZXF1ZW5jZXJJbXBsIHNlcXVlbnRpYWxTZXF1ZW5jZXIgPSBuZXcgU2VxdWVudGlhbFNlcXVlbmNlckltcGwoKTsKKwkJcmV0dXJuIHNlcXVlbnRpYWxTZXF1ZW5jZXI7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFNlcXVlbmNlclBhY2thZ2UgZ2V0U2VxdWVuY2VyUGFja2FnZSgpIHsKKwkJcmV0dXJuIChTZXF1ZW5jZXJQYWNrYWdlKWdldEVQYWNrYWdlKCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZGVwcmVjYXRlZAorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlARGVwcmVjYXRlZAorCXB1YmxpYyBzdGF0aWMgU2VxdWVuY2VyUGFja2FnZSBnZXRQYWNrYWdlKCkgeworCQlyZXR1cm4gU2VxdWVuY2VyUGFja2FnZS5lSU5TVEFOQ0U7CisJfQorCit9IC8vU2VxdWVuY2VyRmFjdG9yeUltcGwKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvc2VxdWVuY2VyL2ltcGwvU2VxdWVuY2VySW1wbC5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9zZXF1ZW5jZXIvaW1wbC9TZXF1ZW5jZXJJbXBsLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTAxNGMyNgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvc2VxdWVuY2VyL2ltcGwvU2VxdWVuY2VySW1wbC5qYXZhCkBAIC0wLDAgKzEsNjA3IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zZXF1ZW5jZXIuaW1wbDsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogCisgKiBDb3B5cmlnaHQgKGMpIDIwMDcsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuIAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyAKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0IAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwgCisgKiAKKyAqIENvbnRyaWJ1dG9yczogCisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqYXZhLnRleHQuU2ltcGxlRGF0ZUZvcm1hdDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb25DaGFpbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5JbnRlcm5hbEVPYmplY3Q7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLmltcGwuRU5vdGlmaWNhdGlvbkltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnV0aWwuRWNvcmVVdGlsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uaW1wbC5JZGVudGlmaWFibGVJbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5Nb2RlbEZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLlNURU1UaW1lOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zZXF1ZW5jZXIuU2VxdWVuY2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zZXF1ZW5jZXIuU2VxdWVuY2VyUGFja2FnZTsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiBBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+U2VxdWVuY2VyPC9iPjwvZW0+Jy4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogPHA+CisgKiBUaGUgZm9sbG93aW5nIGZlYXR1cmVzIGFyZSBpbXBsZW1lbnRlZDoKKyAqIDx1bD4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2VxdWVuY2VyLmltcGwuU2VxdWVuY2VySW1wbCNnZXRTdGFydFRpbWUgPGVtPlN0YXJ0IFRpbWU8L2VtPn08L2xpPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zZXF1ZW5jZXIuaW1wbC5TZXF1ZW5jZXJJbXBsI2dldEVuZFRpbWUgPGVtPkVuZCBUaW1lPC9lbT59PC9saT4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2VxdWVuY2VyLmltcGwuU2VxdWVuY2VySW1wbCNnZXRDdXJyZW50VGltZSA8ZW0+Q3VycmVudCBUaW1lPC9lbT59PC9saT4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2VxdWVuY2VyLmltcGwuU2VxdWVuY2VySW1wbCNnZXROZXh0VGltZSA8ZW0+TmV4dCBUaW1lPC9lbT59PC9saT4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2VxdWVuY2VyLmltcGwuU2VxdWVuY2VySW1wbCNnZXRUaW1lRGVsdGEgPGVtPlRpbWUgRGVsdGE8L2VtPn08L2xpPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zZXF1ZW5jZXIuaW1wbC5TZXF1ZW5jZXJJbXBsI2dldER1cmF0aW9uIDxlbT5EdXJhdGlvbjwvZW0+fTwvbGk+CisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNlcXVlbmNlci5pbXBsLlNlcXVlbmNlckltcGwjaXNUaW1lVG9TdG9wIDxlbT5UaW1lIFRvIFN0b3A8L2VtPn08L2xpPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zZXF1ZW5jZXIuaW1wbC5TZXF1ZW5jZXJJbXBsI2dldFdvcmtDb21wbGV0ZSA8ZW0+V29yayBDb21wbGV0ZTwvZW0+fTwvbGk+CisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNlcXVlbmNlci5pbXBsLlNlcXVlbmNlckltcGwjZ2V0V29ya0luY3JlbWVudCA8ZW0+V29yayBJbmNyZW1lbnQ8L2VtPn08L2xpPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zZXF1ZW5jZXIuaW1wbC5TZXF1ZW5jZXJJbXBsI2dldEN5Y2xlIDxlbT5DeWNsZTwvZW0+fTwvbGk+CisgKiA8L3VsPgorICogPC9wPgorICoKKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGFic3RyYWN0IGNsYXNzIFNlcXVlbmNlckltcGwgZXh0ZW5kcyBJZGVudGlmaWFibGVJbXBsIGltcGxlbWVudHMKKwkJU2VxdWVuY2VyIHsKKworCS8qKgorCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldFN0YXJ0VGltZSgpIDxlbT5TdGFydCBUaW1lPC9lbT59JworCSAqIGNvbnRhaW5tZW50IHJlZmVyZW5jZS4gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogCisJICogQHNlZSAjZ2V0U3RhcnRUaW1lKCkKKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIFNURU1UaW1lIHN0YXJ0VGltZSA9IE1vZGVsRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlU1RFTVRpbWUoKTsKKworCS8qKgorCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldEVuZFRpbWUoKSA8ZW0+RW5kIFRpbWU8L2VtPn0nIGNvbnRhaW5tZW50IHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNnZXRFbmRUaW1lKCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgU1RFTVRpbWUgZW5kVGltZTsKKworCS8qKgorCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldEN1cnJlbnRUaW1lKCkgPGVtPkN1cnJlbnQgVGltZTwvZW0+fScgY29udGFpbm1lbnQgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI2dldEN1cnJlbnRUaW1lKCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgU1RFTVRpbWUgY3VycmVudFRpbWU7CisKKwkvKioKKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0VGltZURlbHRhKCkgPGVtPlRpbWUgRGVsdGE8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNnZXRUaW1lRGVsdGEoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgbG9uZyBUSU1FX0RFTFRBX0VERUZBVUxUID0gMEw7CisKKwkvKioKKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRUaW1lRGVsdGEoKSA8ZW0+VGltZSBEZWx0YTwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI2dldFRpbWVEZWx0YSgpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIGxvbmcgdGltZURlbHRhID0gVElNRV9ERUxUQV9FREVGQVVMVDsKKworCS8qKgorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXREdXJhdGlvbigpIDxlbT5EdXJhdGlvbjwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI2dldER1cmF0aW9uKCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIGxvbmcgRFVSQVRJT05fRURFRkFVTFQgPSAtMUw7CisKKwkvKioKKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXREdXJhdGlvbigpIDxlbT5EdXJhdGlvbjwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI2dldER1cmF0aW9uKCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgbG9uZyBkdXJhdGlvbiA9IERVUkFUSU9OX0VERUZBVUxUOworCisJLyoqCisJICogVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2lzVGltZVRvU3RvcCgpIDxlbT5UaW1lIFRvIFN0b3A8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNpc1RpbWVUb1N0b3AoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgYm9vbGVhbiBUSU1FX1RPX1NUT1BfRURFRkFVTFQgPSBmYWxzZTsKKworCS8qKgorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRXb3JrQ29tcGxldGUoKSA8ZW0+V29yayBDb21wbGV0ZTwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI2dldFdvcmtDb21wbGV0ZSgpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBkb3VibGUgV09SS19DT01QTEVURV9FREVGQVVMVCA9IDAuMDsKKworCS8qKgorCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldFdvcmtDb21wbGV0ZSgpIDxlbT5Xb3JrIENvbXBsZXRlPC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZ2V0V29ya0NvbXBsZXRlKCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgZG91YmxlIHdvcmtDb21wbGV0ZSA9IFdPUktfQ09NUExFVEVfRURFRkFVTFQ7CisKKwkvKioKKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0V29ya0luY3JlbWVudCgpIDxlbT5Xb3JrIEluY3JlbWVudDwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI2dldFdvcmtJbmNyZW1lbnQoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgaW50IFdPUktfSU5DUkVNRU5UX0VERUZBVUxUID0gMDsKKworCS8qKgorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRDeWNsZSgpIDxlbT5DeWNsZTwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI2dldEN5Y2xlKCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIGludCBDWUNMRV9FREVGQVVMVCA9IDA7CisKKwkvKioKKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRDeWNsZSgpIDxlbT5DeWNsZTwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI2dldEN5Y2xlKCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgaW50IGN5Y2xlID0gQ1lDTEVfRURFRkFVTFQ7CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIFNlcXVlbmNlckltcGwoKSB7CisJCXN1cGVyKCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCBFQ2xhc3MgZVN0YXRpY0NsYXNzKCkgeworCQlyZXR1cm4gU2VxdWVuY2VyUGFja2FnZS5MaXRlcmFscy5TRVFVRU5DRVI7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogCisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlwdWJsaWMgU1RFTVRpbWUgZ2V0U3RhcnRUaW1lKCkgeworCQlyZXR1cm4gKFNURU1UaW1lKSBFY29yZVV0aWwuY29weShzdGFydFRpbWUpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgTm90aWZpY2F0aW9uQ2hhaW4gYmFzaWNTZXRTdGFydFRpbWUoU1RFTVRpbWUgbmV3U3RhcnRUaW1lLAorCQkJTm90aWZpY2F0aW9uQ2hhaW4gbXNncykgeworCQlTVEVNVGltZSBvbGRTdGFydFRpbWUgPSBzdGFydFRpbWU7CisJCXN0YXJ0VGltZSA9IG5ld1N0YXJ0VGltZTsKKwkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKSB7CisJCQlFTm90aWZpY2F0aW9uSW1wbCBub3RpZmljYXRpb24gPSBuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgU2VxdWVuY2VyUGFja2FnZS5TRVFVRU5DRVJfX1NUQVJUX1RJTUUsIG9sZFN0YXJ0VGltZSwgbmV3U3RhcnRUaW1lKTsKKwkJCWlmIChtc2dzID09IG51bGwpIG1zZ3MgPSBub3RpZmljYXRpb247IGVsc2UgbXNncy5hZGQobm90aWZpY2F0aW9uKTsKKwkJfQorCQlyZXR1cm4gbXNnczsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgc2V0U3RhcnRUaW1lKFNURU1UaW1lIG5ld1N0YXJ0VGltZSkgeworCQlpZiAobmV3U3RhcnRUaW1lICE9IHN0YXJ0VGltZSkgeworCQkJTm90aWZpY2F0aW9uQ2hhaW4gbXNncyA9IG51bGw7CisJCQlpZiAoc3RhcnRUaW1lICE9IG51bGwpCisJCQkJbXNncyA9ICgoSW50ZXJuYWxFT2JqZWN0KXN0YXJ0VGltZSkuZUludmVyc2VSZW1vdmUodGhpcywgRU9QUE9TSVRFX0ZFQVRVUkVfQkFTRSAtIFNlcXVlbmNlclBhY2thZ2UuU0VRVUVOQ0VSX19TVEFSVF9USU1FLCBudWxsLCBtc2dzKTsKKwkJCWlmIChuZXdTdGFydFRpbWUgIT0gbnVsbCkKKwkJCQltc2dzID0gKChJbnRlcm5hbEVPYmplY3QpbmV3U3RhcnRUaW1lKS5lSW52ZXJzZUFkZCh0aGlzLCBFT1BQT1NJVEVfRkVBVFVSRV9CQVNFIC0gU2VxdWVuY2VyUGFja2FnZS5TRVFVRU5DRVJfX1NUQVJUX1RJTUUsIG51bGwsIG1zZ3MpOworCQkJbXNncyA9IGJhc2ljU2V0U3RhcnRUaW1lKG5ld1N0YXJ0VGltZSwgbXNncyk7CisJCQlpZiAobXNncyAhPSBudWxsKSBtc2dzLmRpc3BhdGNoKCk7CisJCX0KKwkJZWxzZSBpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpCisJCQllTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBTZXF1ZW5jZXJQYWNrYWdlLlNFUVVFTkNFUl9fU1RBUlRfVElNRSwgbmV3U3RhcnRUaW1lLCBuZXdTdGFydFRpbWUpKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFNURU1UaW1lIGdldEVuZFRpbWUoKSB7CisJCXJldHVybiBlbmRUaW1lOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgTm90aWZpY2F0aW9uQ2hhaW4gYmFzaWNTZXRFbmRUaW1lKFNURU1UaW1lIG5ld0VuZFRpbWUsCisJCQlOb3RpZmljYXRpb25DaGFpbiBtc2dzKSB7CisJCVNURU1UaW1lIG9sZEVuZFRpbWUgPSBlbmRUaW1lOworCQllbmRUaW1lID0gbmV3RW5kVGltZTsKKwkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKSB7CisJCQlFTm90aWZpY2F0aW9uSW1wbCBub3RpZmljYXRpb24gPSBuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgU2VxdWVuY2VyUGFja2FnZS5TRVFVRU5DRVJfX0VORF9USU1FLCBvbGRFbmRUaW1lLCBuZXdFbmRUaW1lKTsKKwkJCWlmIChtc2dzID09IG51bGwpIG1zZ3MgPSBub3RpZmljYXRpb247IGVsc2UgbXNncy5hZGQobm90aWZpY2F0aW9uKTsKKwkJfQorCQlyZXR1cm4gbXNnczsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgc2V0RW5kVGltZShTVEVNVGltZSBuZXdFbmRUaW1lKSB7CisJCWlmIChuZXdFbmRUaW1lICE9IGVuZFRpbWUpIHsKKwkJCU5vdGlmaWNhdGlvbkNoYWluIG1zZ3MgPSBudWxsOworCQkJaWYgKGVuZFRpbWUgIT0gbnVsbCkKKwkJCQltc2dzID0gKChJbnRlcm5hbEVPYmplY3QpZW5kVGltZSkuZUludmVyc2VSZW1vdmUodGhpcywgRU9QUE9TSVRFX0ZFQVRVUkVfQkFTRSAtIFNlcXVlbmNlclBhY2thZ2UuU0VRVUVOQ0VSX19FTkRfVElNRSwgbnVsbCwgbXNncyk7CisJCQlpZiAobmV3RW5kVGltZSAhPSBudWxsKQorCQkJCW1zZ3MgPSAoKEludGVybmFsRU9iamVjdCluZXdFbmRUaW1lKS5lSW52ZXJzZUFkZCh0aGlzLCBFT1BQT1NJVEVfRkVBVFVSRV9CQVNFIC0gU2VxdWVuY2VyUGFja2FnZS5TRVFVRU5DRVJfX0VORF9USU1FLCBudWxsLCBtc2dzKTsKKwkJCW1zZ3MgPSBiYXNpY1NldEVuZFRpbWUobmV3RW5kVGltZSwgbXNncyk7CisJCQlpZiAobXNncyAhPSBudWxsKSBtc2dzLmRpc3BhdGNoKCk7CisJCX0KKwkJZWxzZSBpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpCisJCQllTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBTZXF1ZW5jZXJQYWNrYWdlLlNFUVVFTkNFUl9fRU5EX1RJTUUsIG5ld0VuZFRpbWUsIG5ld0VuZFRpbWUpKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCXB1YmxpYyBTVEVNVGltZSBnZXRDdXJyZW50VGltZSgpIHsKKwkJLy8gSXMgdGhlIGN1cnJlbnQgdGltZSBzZXQgeWV0PworCQlpZiAoY3VycmVudFRpbWUgPT0gbnVsbCkgeworCQkJLy8gTm8KKwkJCS8vIFRoZW4gdGhlIGN1cnJlbnQgdGltZSBpcyB0aGUgc3RhcnQgdGltZS4KKwkJCXNldEN1cnJlbnRUaW1lKChTVEVNVGltZSkgRWNvcmVVdGlsLmNvcHkoZ2V0U3RhcnRUaW1lKCkpKTsKKwkJfQorCQlyZXR1cm4gKFNURU1UaW1lKSBFY29yZVV0aWwuY29weShjdXJyZW50VGltZSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBOb3RpZmljYXRpb25DaGFpbiBiYXNpY1NldEN1cnJlbnRUaW1lKFNURU1UaW1lIG5ld0N1cnJlbnRUaW1lLAorCQkJTm90aWZpY2F0aW9uQ2hhaW4gbXNncykgeworCQlTVEVNVGltZSBvbGRDdXJyZW50VGltZSA9IGN1cnJlbnRUaW1lOworCQljdXJyZW50VGltZSA9IG5ld0N1cnJlbnRUaW1lOworCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpIHsKKwkJCUVOb3RpZmljYXRpb25JbXBsIG5vdGlmaWNhdGlvbiA9IG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBTZXF1ZW5jZXJQYWNrYWdlLlNFUVVFTkNFUl9fQ1VSUkVOVF9USU1FLCBvbGRDdXJyZW50VGltZSwgbmV3Q3VycmVudFRpbWUpOworCQkJaWYgKG1zZ3MgPT0gbnVsbCkgbXNncyA9IG5vdGlmaWNhdGlvbjsgZWxzZSBtc2dzLmFkZChub3RpZmljYXRpb24pOworCQl9CisJCXJldHVybiBtc2dzOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRDdXJyZW50VGltZShTVEVNVGltZSBuZXdDdXJyZW50VGltZSkgeworCQlpZiAobmV3Q3VycmVudFRpbWUgIT0gY3VycmVudFRpbWUpIHsKKwkJCU5vdGlmaWNhdGlvbkNoYWluIG1zZ3MgPSBudWxsOworCQkJaWYgKGN1cnJlbnRUaW1lICE9IG51bGwpCisJCQkJbXNncyA9ICgoSW50ZXJuYWxFT2JqZWN0KWN1cnJlbnRUaW1lKS5lSW52ZXJzZVJlbW92ZSh0aGlzLCBFT1BQT1NJVEVfRkVBVFVSRV9CQVNFIC0gU2VxdWVuY2VyUGFja2FnZS5TRVFVRU5DRVJfX0NVUlJFTlRfVElNRSwgbnVsbCwgbXNncyk7CisJCQlpZiAobmV3Q3VycmVudFRpbWUgIT0gbnVsbCkKKwkJCQltc2dzID0gKChJbnRlcm5hbEVPYmplY3QpbmV3Q3VycmVudFRpbWUpLmVJbnZlcnNlQWRkKHRoaXMsIEVPUFBPU0lURV9GRUFUVVJFX0JBU0UgLSBTZXF1ZW5jZXJQYWNrYWdlLlNFUVVFTkNFUl9fQ1VSUkVOVF9USU1FLCBudWxsLCBtc2dzKTsKKwkJCW1zZ3MgPSBiYXNpY1NldEN1cnJlbnRUaW1lKG5ld0N1cnJlbnRUaW1lLCBtc2dzKTsKKwkJCWlmIChtc2dzICE9IG51bGwpIG1zZ3MuZGlzcGF0Y2goKTsKKwkJfQorCQllbHNlIGlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkKKwkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIFNlcXVlbmNlclBhY2thZ2UuU0VRVUVOQ0VSX19DVVJSRU5UX1RJTUUsIG5ld0N1cnJlbnRUaW1lLCBuZXdDdXJyZW50VGltZSkpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJcHVibGljIFNURU1UaW1lIGdldE5leHRUaW1lKCkgeworCQlzZXRDeWNsZShnZXRDeWNsZSgpICsgMSk7IC8vIGNvdW50IHRoaXMgYXMgYSBjb21wbGV0ZWQgY3ljbGUKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBsb25nIGdldFRpbWVEZWx0YSgpIHsKKwkJcmV0dXJuIHRpbWVEZWx0YTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCXB1YmxpYyBsb25nIGdldER1cmF0aW9uKCkgeworCQkvLyBDYW4gd2UgY29tcHV0ZSBhIGR1cmF0aW9uPworCQlpZiAoZHVyYXRpb24gPT0gVU5LTk9XTl9EVVJBVElPTiAmJiBnZXRTdGFydFRpbWUoKSAhPSBudWxsCisJCQkJJiYgZ2V0RW5kVGltZSgpICE9IG51bGwpIHsKKwkJCS8vIFllcworCQkJc2V0RHVyYXRpb24oZ2V0RW5kVGltZSgpLmdldFRpbWUoKS5nZXRUaW1lKCkgLSBnZXRTdGFydFRpbWUoKS5nZXRUaW1lKCkuZ2V0VGltZSgpKTsKKwkJfQorCQlyZXR1cm4gZHVyYXRpb247CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIHNldER1cmF0aW9uKGxvbmcgbmV3RHVyYXRpb24pIHsKKwkJbG9uZyBvbGREdXJhdGlvbiA9IGR1cmF0aW9uOworCQlkdXJhdGlvbiA9IG5ld0R1cmF0aW9uOworCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpCisJCQllTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBTZXF1ZW5jZXJQYWNrYWdlLlNFUVVFTkNFUl9fRFVSQVRJT04sIG9sZER1cmF0aW9uLCBkdXJhdGlvbikpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgYm9vbGVhbiBpc1RpbWVUb1N0b3AoKSB7CisJCS8vIFRPRE86IGltcGxlbWVudCB0aGlzIG1ldGhvZCB0byByZXR1cm4gdGhlICdUaW1lIFRvIFN0b3AnIGF0dHJpYnV0ZQorCQkvLyBFbnN1cmUgdGhhdCB5b3UgcmVtb3ZlIEBnZW5lcmF0ZWQgb3IgbWFyayBpdCBAZ2VuZXJhdGVkIE5PVAorCQl0aHJvdyBuZXcgVW5zdXBwb3J0ZWRPcGVyYXRpb25FeGNlcHRpb24oKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIGRvdWJsZSBnZXRXb3JrQ29tcGxldGUoKSB7CisJCXJldHVybiB3b3JrQ29tcGxldGU7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIHNldFdvcmtDb21wbGV0ZShkb3VibGUgbmV3V29ya0NvbXBsZXRlKSB7CisJCWRvdWJsZSBvbGRXb3JrQ29tcGxldGUgPSB3b3JrQ29tcGxldGU7CisJCXdvcmtDb21wbGV0ZSA9IG5ld1dvcmtDb21wbGV0ZTsKKwkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQorCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgU2VxdWVuY2VyUGFja2FnZS5TRVFVRU5DRVJfX1dPUktfQ09NUExFVEUsIG9sZFdvcmtDb21wbGV0ZSwgd29ya0NvbXBsZXRlKSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBpbnQgZ2V0V29ya0luY3JlbWVudCgpIHsKKwkJLy8gVE9ETzogaW1wbGVtZW50IHRoaXMgbWV0aG9kIHRvIHJldHVybiB0aGUgJ1dvcmsgSW5jcmVtZW50JyBhdHRyaWJ1dGUKKwkJLy8gRW5zdXJlIHRoYXQgeW91IHJlbW92ZSBAZ2VuZXJhdGVkIG9yIG1hcmsgaXQgQGdlbmVyYXRlZCBOT1QKKwkJdGhyb3cgbmV3IFVuc3VwcG9ydGVkT3BlcmF0aW9uRXhjZXB0aW9uKCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBpbnQgZ2V0Q3ljbGUoKSB7CisJCXJldHVybiBjeWNsZTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgc2V0Q3ljbGUoaW50IG5ld0N5Y2xlKSB7CisJCWludCBvbGRDeWNsZSA9IGN5Y2xlOworCQljeWNsZSA9IG5ld0N5Y2xlOworCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpCisJCQllTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBTZXF1ZW5jZXJQYWNrYWdlLlNFUVVFTkNFUl9fQ1lDTEUsIG9sZEN5Y2xlLCBjeWNsZSkpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJcHVibGljIHZvaWQgcmVzZXQoKSB7CisJCXNldEN1cnJlbnRUaW1lKChTVEVNVGltZSkgRWNvcmVVdGlsLmNvcHkoZ2V0U3RhcnRUaW1lKCkpKTsKKwkJc2V0V29ya0NvbXBsZXRlKDApOworCQlzZXRDeWNsZShDWUNMRV9FREVGQVVMVCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBOb3RpZmljYXRpb25DaGFpbiBlSW52ZXJzZVJlbW92ZShJbnRlcm5hbEVPYmplY3Qgb3RoZXJFbmQsCisJCQlpbnQgZmVhdHVyZUlELCBOb3RpZmljYXRpb25DaGFpbiBtc2dzKSB7CisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7CisJCQljYXNlIFNlcXVlbmNlclBhY2thZ2UuU0VRVUVOQ0VSX19TVEFSVF9USU1FOgorCQkJCXJldHVybiBiYXNpY1NldFN0YXJ0VGltZShudWxsLCBtc2dzKTsKKwkJCWNhc2UgU2VxdWVuY2VyUGFja2FnZS5TRVFVRU5DRVJfX0VORF9USU1FOgorCQkJCXJldHVybiBiYXNpY1NldEVuZFRpbWUobnVsbCwgbXNncyk7CisJCQljYXNlIFNlcXVlbmNlclBhY2thZ2UuU0VRVUVOQ0VSX19DVVJSRU5UX1RJTUU6CisJCQkJcmV0dXJuIGJhc2ljU2V0Q3VycmVudFRpbWUobnVsbCwgbXNncyk7CisJCX0KKwkJcmV0dXJuIHN1cGVyLmVJbnZlcnNlUmVtb3ZlKG90aGVyRW5kLCBmZWF0dXJlSUQsIG1zZ3MpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgT2JqZWN0IGVHZXQoaW50IGZlYXR1cmVJRCwgYm9vbGVhbiByZXNvbHZlLCBib29sZWFuIGNvcmVUeXBlKSB7CisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7CisJCQljYXNlIFNlcXVlbmNlclBhY2thZ2UuU0VRVUVOQ0VSX19TVEFSVF9USU1FOgorCQkJCXJldHVybiBnZXRTdGFydFRpbWUoKTsKKwkJCWNhc2UgU2VxdWVuY2VyUGFja2FnZS5TRVFVRU5DRVJfX0VORF9USU1FOgorCQkJCXJldHVybiBnZXRFbmRUaW1lKCk7CisJCQljYXNlIFNlcXVlbmNlclBhY2thZ2UuU0VRVUVOQ0VSX19DVVJSRU5UX1RJTUU6CisJCQkJcmV0dXJuIGdldEN1cnJlbnRUaW1lKCk7CisJCQljYXNlIFNlcXVlbmNlclBhY2thZ2UuU0VRVUVOQ0VSX19ORVhUX1RJTUU6CisJCQkJcmV0dXJuIGdldE5leHRUaW1lKCk7CisJCQljYXNlIFNlcXVlbmNlclBhY2thZ2UuU0VRVUVOQ0VSX19USU1FX0RFTFRBOgorCQkJCXJldHVybiBnZXRUaW1lRGVsdGEoKTsKKwkJCWNhc2UgU2VxdWVuY2VyUGFja2FnZS5TRVFVRU5DRVJfX0RVUkFUSU9OOgorCQkJCXJldHVybiBnZXREdXJhdGlvbigpOworCQkJY2FzZSBTZXF1ZW5jZXJQYWNrYWdlLlNFUVVFTkNFUl9fVElNRV9UT19TVE9QOgorCQkJCXJldHVybiBpc1RpbWVUb1N0b3AoKTsKKwkJCWNhc2UgU2VxdWVuY2VyUGFja2FnZS5TRVFVRU5DRVJfX1dPUktfQ09NUExFVEU6CisJCQkJcmV0dXJuIGdldFdvcmtDb21wbGV0ZSgpOworCQkJY2FzZSBTZXF1ZW5jZXJQYWNrYWdlLlNFUVVFTkNFUl9fV09SS19JTkNSRU1FTlQ6CisJCQkJcmV0dXJuIGdldFdvcmtJbmNyZW1lbnQoKTsKKwkJCWNhc2UgU2VxdWVuY2VyUGFja2FnZS5TRVFVRU5DRVJfX0NZQ0xFOgorCQkJCXJldHVybiBnZXRDeWNsZSgpOworCQl9CisJCXJldHVybiBzdXBlci5lR2V0KGZlYXR1cmVJRCwgcmVzb2x2ZSwgY29yZVR5cGUpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBlU2V0KGludCBmZWF0dXJlSUQsIE9iamVjdCBuZXdWYWx1ZSkgeworCQlzd2l0Y2ggKGZlYXR1cmVJRCkgeworCQkJY2FzZSBTZXF1ZW5jZXJQYWNrYWdlLlNFUVVFTkNFUl9fU1RBUlRfVElNRToKKwkJCQlzZXRTdGFydFRpbWUoKFNURU1UaW1lKW5ld1ZhbHVlKTsKKwkJCQlyZXR1cm47CisJCQljYXNlIFNlcXVlbmNlclBhY2thZ2UuU0VRVUVOQ0VSX19FTkRfVElNRToKKwkJCQlzZXRFbmRUaW1lKChTVEVNVGltZSluZXdWYWx1ZSk7CisJCQkJcmV0dXJuOworCQkJY2FzZSBTZXF1ZW5jZXJQYWNrYWdlLlNFUVVFTkNFUl9fQ1VSUkVOVF9USU1FOgorCQkJCXNldEN1cnJlbnRUaW1lKChTVEVNVGltZSluZXdWYWx1ZSk7CisJCQkJcmV0dXJuOworCQkJY2FzZSBTZXF1ZW5jZXJQYWNrYWdlLlNFUVVFTkNFUl9fRFVSQVRJT046CisJCQkJc2V0RHVyYXRpb24oKExvbmcpbmV3VmFsdWUpOworCQkJCXJldHVybjsKKwkJCWNhc2UgU2VxdWVuY2VyUGFja2FnZS5TRVFVRU5DRVJfX1dPUktfQ09NUExFVEU6CisJCQkJc2V0V29ya0NvbXBsZXRlKChEb3VibGUpbmV3VmFsdWUpOworCQkJCXJldHVybjsKKwkJCWNhc2UgU2VxdWVuY2VyUGFja2FnZS5TRVFVRU5DRVJfX0NZQ0xFOgorCQkJCXNldEN5Y2xlKChJbnRlZ2VyKW5ld1ZhbHVlKTsKKwkJCQlyZXR1cm47CisJCX0KKwkJc3VwZXIuZVNldChmZWF0dXJlSUQsIG5ld1ZhbHVlKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgZVVuc2V0KGludCBmZWF0dXJlSUQpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJCWNhc2UgU2VxdWVuY2VyUGFja2FnZS5TRVFVRU5DRVJfX1NUQVJUX1RJTUU6CisJCQkJc2V0U3RhcnRUaW1lKChTVEVNVGltZSludWxsKTsKKwkJCQlyZXR1cm47CisJCQljYXNlIFNlcXVlbmNlclBhY2thZ2UuU0VRVUVOQ0VSX19FTkRfVElNRToKKwkJCQlzZXRFbmRUaW1lKChTVEVNVGltZSludWxsKTsKKwkJCQlyZXR1cm47CisJCQljYXNlIFNlcXVlbmNlclBhY2thZ2UuU0VRVUVOQ0VSX19DVVJSRU5UX1RJTUU6CisJCQkJc2V0Q3VycmVudFRpbWUoKFNURU1UaW1lKW51bGwpOworCQkJCXJldHVybjsKKwkJCWNhc2UgU2VxdWVuY2VyUGFja2FnZS5TRVFVRU5DRVJfX0RVUkFUSU9OOgorCQkJCXNldER1cmF0aW9uKERVUkFUSU9OX0VERUZBVUxUKTsKKwkJCQlyZXR1cm47CisJCQljYXNlIFNlcXVlbmNlclBhY2thZ2UuU0VRVUVOQ0VSX19XT1JLX0NPTVBMRVRFOgorCQkJCXNldFdvcmtDb21wbGV0ZShXT1JLX0NPTVBMRVRFX0VERUZBVUxUKTsKKwkJCQlyZXR1cm47CisJCQljYXNlIFNlcXVlbmNlclBhY2thZ2UuU0VRVUVOQ0VSX19DWUNMRToKKwkJCQlzZXRDeWNsZShDWUNMRV9FREVGQVVMVCk7CisJCQkJcmV0dXJuOworCQl9CisJCXN1cGVyLmVVbnNldChmZWF0dXJlSUQpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgYm9vbGVhbiBlSXNTZXQoaW50IGZlYXR1cmVJRCkgeworCQlzd2l0Y2ggKGZlYXR1cmVJRCkgeworCQkJY2FzZSBTZXF1ZW5jZXJQYWNrYWdlLlNFUVVFTkNFUl9fU1RBUlRfVElNRToKKwkJCQlyZXR1cm4gc3RhcnRUaW1lICE9IG51bGw7CisJCQljYXNlIFNlcXVlbmNlclBhY2thZ2UuU0VRVUVOQ0VSX19FTkRfVElNRToKKwkJCQlyZXR1cm4gZW5kVGltZSAhPSBudWxsOworCQkJY2FzZSBTZXF1ZW5jZXJQYWNrYWdlLlNFUVVFTkNFUl9fQ1VSUkVOVF9USU1FOgorCQkJCXJldHVybiBjdXJyZW50VGltZSAhPSBudWxsOworCQkJY2FzZSBTZXF1ZW5jZXJQYWNrYWdlLlNFUVVFTkNFUl9fTkVYVF9USU1FOgorCQkJCXJldHVybiBnZXROZXh0VGltZSgpICE9IG51bGw7CisJCQljYXNlIFNlcXVlbmNlclBhY2thZ2UuU0VRVUVOQ0VSX19USU1FX0RFTFRBOgorCQkJCXJldHVybiB0aW1lRGVsdGEgIT0gVElNRV9ERUxUQV9FREVGQVVMVDsKKwkJCWNhc2UgU2VxdWVuY2VyUGFja2FnZS5TRVFVRU5DRVJfX0RVUkFUSU9OOgorCQkJCXJldHVybiBkdXJhdGlvbiAhPSBEVVJBVElPTl9FREVGQVVMVDsKKwkJCWNhc2UgU2VxdWVuY2VyUGFja2FnZS5TRVFVRU5DRVJfX1RJTUVfVE9fU1RPUDoKKwkJCQlyZXR1cm4gaXNUaW1lVG9TdG9wKCkgIT0gVElNRV9UT19TVE9QX0VERUZBVUxUOworCQkJY2FzZSBTZXF1ZW5jZXJQYWNrYWdlLlNFUVVFTkNFUl9fV09SS19DT01QTEVURToKKwkJCQlyZXR1cm4gd29ya0NvbXBsZXRlICE9IFdPUktfQ09NUExFVEVfRURFRkFVTFQ7CisJCQljYXNlIFNlcXVlbmNlclBhY2thZ2UuU0VRVUVOQ0VSX19XT1JLX0lOQ1JFTUVOVDoKKwkJCQlyZXR1cm4gZ2V0V29ya0luY3JlbWVudCgpICE9IFdPUktfSU5DUkVNRU5UX0VERUZBVUxUOworCQkJY2FzZSBTZXF1ZW5jZXJQYWNrYWdlLlNFUVVFTkNFUl9fQ1lDTEU6CisJCQkJcmV0dXJuIGN5Y2xlICE9IENZQ0xFX0VERUZBVUxUOworCQl9CisJCXJldHVybiBzdXBlci5lSXNTZXQoZmVhdHVyZUlEKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCXB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKSB7CisJCWlmIChlSXNQcm94eSgpKQorCQkJcmV0dXJuIHN1cGVyLnRvU3RyaW5nKCk7CisKKwkJZmluYWwgU2ltcGxlRGF0ZUZvcm1hdCBkYXRlRm9ybWF0ID0gbmV3IFNpbXBsZURhdGVGb3JtYXQoIk1NTSBkLCB5eXl5Iik7CisKKwkJZmluYWwgU3RyaW5nQnVmZmVyIHJlc3VsdCA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKKwkJcmVzdWx0LmFwcGVuZChkYXRlRm9ybWF0LmZvcm1hdChzdGFydFRpbWUuZ2V0VGltZSgpKSk7CisKKwkJaWYgKGdldEVuZFRpbWUoKSAhPSBudWxsKSB7CisJCQlyZXN1bHQuYXBwZW5kKCIgdG8gIik7CisJCQlyZXN1bHQuYXBwZW5kKGRhdGVGb3JtYXQuZm9ybWF0KGdldEVuZFRpbWUoKS5nZXRUaW1lKCkpKTsKKwkJfQorCisJCWlmIChnZXRDdXJyZW50VGltZSgpICE9IG51bGwpIHsKKwkJCXJlc3VsdC5hcHBlbmQoIiwgY3VycmVudD0iKTsKKwkJCXJlc3VsdC5hcHBlbmQoZGF0ZUZvcm1hdC5mb3JtYXQoZ2V0Q3VycmVudFRpbWUoKS5nZXRUaW1lKCkpKTsKKwkJfQorCisJCXJlc3VsdC5hcHBlbmQoIiAodGltZURlbHRhOiAiKTsgLy8kTk9OLU5MUy0xJAorCQlyZXN1bHQuYXBwZW5kKGdldFRpbWVEZWx0YSgpKTsKKwkJcmVzdWx0LmFwcGVuZCgiICgiKTsKKwkJZmluYWwgbG9uZyBkYXlzID0gZ2V0VGltZURlbHRhKCkgLyBTVEVNVGltZS5Vbml0cy5EQVkuZ2V0TWlsbGlzZWNvbmRzKCk7CisJCXJlc3VsdC5hcHBlbmQoZGF5cyk7CisJCXJlc3VsdC5hcHBlbmQoZGF5cyA9PSAxID8gIiBkYXkpIiA6ICIgZGF5cykiKTsKKwkJcmVzdWx0LmFwcGVuZCgiLCBkdXJhdGlvbjogIik7IC8vJE5PTi1OTFMtMSQKKwkJcmVzdWx0LmFwcGVuZChnZXREdXJhdGlvbigpKTsKKwkJcmVzdWx0LmFwcGVuZCgiLCB3b3JrQ29tcGxldGU6ICIpOyAvLyROT04tTkxTLTEkCisJCXJlc3VsdC5hcHBlbmQoZ2V0V29ya0NvbXBsZXRlKCkpOworCQlyZXN1bHQuYXBwZW5kKCcpJyk7CisJCXJldHVybiByZXN1bHQudG9TdHJpbmcoKTsKKwl9CisKK30gLy8gU2VxdWVuY2VySW1wbApkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9zZXF1ZW5jZXIvaW1wbC9TZXF1ZW5jZXJQYWNrYWdlSW1wbC5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9zZXF1ZW5jZXIvaW1wbC9TZXF1ZW5jZXJQYWNrYWdlSW1wbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRmNzBhZjEKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3NlcXVlbmNlci9pbXBsL1NlcXVlbmNlclBhY2thZ2VJbXBsLmphdmEKQEAgLTAsMCArMSw0MDIgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNlcXVlbmNlci5pbXBsOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA3LCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQXR0cmlidXRlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FUmVmZXJlbmNlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FY29yZVBhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLmltcGwuRVBhY2thZ2VJbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uQ29tbW9uUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLmltcGwuQ29tbW9uUGFja2FnZUltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmV4cGVyaW1lbnQuRXhwZXJpbWVudFBhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmV4cGVyaW1lbnQuaW1wbC5FeHBlcmltZW50UGFja2FnZUltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkdyYXBoUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguaW1wbC5HcmFwaFBhY2thZ2VJbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5sb2dnZXIuTG9nZ2VyUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubG9nZ2VyLmltcGwuTG9nZ2VyUGFja2FnZUltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLk1vZGVsUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuaW1wbC5Nb2RlbFBhY2thZ2VJbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5Nb2RpZmllclBhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLmltcGwuTW9kaWZpZXJQYWNrYWdlSW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlLlByZWRpY2F0ZVBhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZS5pbXBsLlByZWRpY2F0ZVBhY2thZ2VJbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zY2VuYXJpby5TY2VuYXJpb1BhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNjZW5hcmlvLmltcGwuU2NlbmFyaW9QYWNrYWdlSW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2VxdWVuY2VyLlJlYWxUaW1lU2VxdWVuY2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zZXF1ZW5jZXIuU2VxdWVuY2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zZXF1ZW5jZXIuU2VxdWVuY2VyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2VxdWVuY2VyLlNlcXVlbmNlclBhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNlcXVlbmNlci5TZXF1ZW50aWFsU2VxdWVuY2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zb2x2ZXIuU29sdmVyUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc29sdmVyLmltcGwuU29sdmVyUGFja2FnZUltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnRyaWdnZXIuVHJpZ2dlclBhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnRyaWdnZXIuaW1wbC5UcmlnZ2VyUGFja2FnZUltcGw7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIEFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBtb2RlbCA8Yj5QYWNrYWdlPC9iPi4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgU2VxdWVuY2VyUGFja2FnZUltcGwgZXh0ZW5kcyBFUGFja2FnZUltcGwgaW1wbGVtZW50cyBTZXF1ZW5jZXJQYWNrYWdlIHsKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcml2YXRlIEVDbGFzcyByZWFsVGltZVNlcXVlbmNlckVDbGFzcyA9IG51bGw7CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcml2YXRlIEVDbGFzcyBzZXF1ZW5jZXJFQ2xhc3MgPSBudWxsOworCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJpdmF0ZSBFQ2xhc3Mgc2VxdWVudGlhbFNlcXVlbmNlckVDbGFzcyA9IG51bGw7CisKKwkvKioKKwkgKiBDcmVhdGVzIGFuIGluc3RhbmNlIG9mIHRoZSBtb2RlbCA8Yj5QYWNrYWdlPC9iPiwgcmVnaXN0ZXJlZCB3aXRoCisJICoge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FUGFja2FnZS5SZWdpc3RyeSBFUGFja2FnZS5SZWdpc3RyeX0gYnkgdGhlIHBhY2thZ2UKKwkgKiBwYWNrYWdlIFVSSSB2YWx1ZS4KKwkgKiA8cD5Ob3RlOiB0aGUgY29ycmVjdCB3YXkgdG8gY3JlYXRlIHRoZSBwYWNrYWdlIGlzIHZpYSB0aGUgc3RhdGljCisJICogZmFjdG9yeSBtZXRob2Qge0BsaW5rICNpbml0IGluaXQoKX0sIHdoaWNoIGFsc28gcGVyZm9ybXMKKwkgKiBpbml0aWFsaXphdGlvbiBvZiB0aGUgcGFja2FnZSwgb3IgcmV0dXJucyB0aGUgcmVnaXN0ZXJlZCBwYWNrYWdlLAorCSAqIGlmIG9uZSBhbHJlYWR5IGV4aXN0cy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVQYWNrYWdlLlJlZ2lzdHJ5CisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2VxdWVuY2VyLlNlcXVlbmNlclBhY2thZ2UjZU5TX1VSSQorCSAqIEBzZWUgI2luaXQoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcml2YXRlIFNlcXVlbmNlclBhY2thZ2VJbXBsKCkgeworCQlzdXBlcihlTlNfVVJJLCBTZXF1ZW5jZXJGYWN0b3J5LmVJTlNUQU5DRSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJpdmF0ZSBzdGF0aWMgYm9vbGVhbiBpc0luaXRlZCA9IGZhbHNlOworCisJLyoqCisJICogQ3JlYXRlcywgcmVnaXN0ZXJzLCBhbmQgaW5pdGlhbGl6ZXMgdGhlIDxiPlBhY2thZ2U8L2I+IGZvciB0aGlzIG1vZGVsLCBhbmQgZm9yIGFueSBvdGhlcnMgdXBvbiB3aGljaCBpdCBkZXBlbmRzLgorCSAqIAorCSAqIDxwPlRoaXMgbWV0aG9kIGlzIHVzZWQgdG8gaW5pdGlhbGl6ZSB7QGxpbmsgU2VxdWVuY2VyUGFja2FnZSNlSU5TVEFOQ0V9IHdoZW4gdGhhdCBmaWVsZCBpcyBhY2Nlc3NlZC4KKwkgKiBDbGllbnRzIHNob3VsZCBub3QgaW52b2tlIGl0IGRpcmVjdGx5LiBJbnN0ZWFkLCB0aGV5IHNob3VsZCBzaW1wbHkgYWNjZXNzIHRoYXQgZmllbGQgdG8gb2J0YWluIHRoZSBwYWNrYWdlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZU5TX1VSSQorCSAqIEBzZWUgI2NyZWF0ZVBhY2thZ2VDb250ZW50cygpCisJICogQHNlZSAjaW5pdGlhbGl6ZVBhY2thZ2VDb250ZW50cygpCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBzdGF0aWMgU2VxdWVuY2VyUGFja2FnZSBpbml0KCkgeworCQlpZiAoaXNJbml0ZWQpIHJldHVybiAoU2VxdWVuY2VyUGFja2FnZSlFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShTZXF1ZW5jZXJQYWNrYWdlLmVOU19VUkkpOworCisJCS8vIE9idGFpbiBvciBjcmVhdGUgYW5kIHJlZ2lzdGVyIHBhY2thZ2UKKwkJU2VxdWVuY2VyUGFja2FnZUltcGwgdGhlU2VxdWVuY2VyUGFja2FnZSA9IChTZXF1ZW5jZXJQYWNrYWdlSW1wbCkoRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0KGVOU19VUkkpIGluc3RhbmNlb2YgU2VxdWVuY2VyUGFja2FnZUltcGwgPyBFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXQoZU5TX1VSSSkgOiBuZXcgU2VxdWVuY2VyUGFja2FnZUltcGwoKSk7CisKKwkJaXNJbml0ZWQgPSB0cnVlOworCisJCS8vIEluaXRpYWxpemUgc2ltcGxlIGRlcGVuZGVuY2llcworCQlFY29yZVBhY2thZ2UuZUlOU1RBTkNFLmVDbGFzcygpOworCisJCS8vIE9idGFpbiBvciBjcmVhdGUgYW5kIHJlZ2lzdGVyIGludGVyZGVwZW5kZW5jaWVzCisJCUNvbW1vblBhY2thZ2VJbXBsIHRoZUNvbW1vblBhY2thZ2UgPSAoQ29tbW9uUGFja2FnZUltcGwpKEVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVQYWNrYWdlKENvbW1vblBhY2thZ2UuZU5TX1VSSSkgaW5zdGFuY2VvZiBDb21tb25QYWNrYWdlSW1wbCA/IEVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVQYWNrYWdlKENvbW1vblBhY2thZ2UuZU5TX1VSSSkgOiBDb21tb25QYWNrYWdlLmVJTlNUQU5DRSk7CisJCUV4cGVyaW1lbnRQYWNrYWdlSW1wbCB0aGVFeHBlcmltZW50UGFja2FnZSA9IChFeHBlcmltZW50UGFja2FnZUltcGwpKEVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVQYWNrYWdlKEV4cGVyaW1lbnRQYWNrYWdlLmVOU19VUkkpIGluc3RhbmNlb2YgRXhwZXJpbWVudFBhY2thZ2VJbXBsID8gRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RVBhY2thZ2UoRXhwZXJpbWVudFBhY2thZ2UuZU5TX1VSSSkgOiBFeHBlcmltZW50UGFja2FnZS5lSU5TVEFOQ0UpOworCQlHcmFwaFBhY2thZ2VJbXBsIHRoZUdyYXBoUGFja2FnZSA9IChHcmFwaFBhY2thZ2VJbXBsKShFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShHcmFwaFBhY2thZ2UuZU5TX1VSSSkgaW5zdGFuY2VvZiBHcmFwaFBhY2thZ2VJbXBsID8gRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RVBhY2thZ2UoR3JhcGhQYWNrYWdlLmVOU19VUkkpIDogR3JhcGhQYWNrYWdlLmVJTlNUQU5DRSk7CisJCU1vZGVsUGFja2FnZUltcGwgdGhlTW9kZWxQYWNrYWdlID0gKE1vZGVsUGFja2FnZUltcGwpKEVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVQYWNrYWdlKE1vZGVsUGFja2FnZS5lTlNfVVJJKSBpbnN0YW5jZW9mIE1vZGVsUGFja2FnZUltcGwgPyBFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShNb2RlbFBhY2thZ2UuZU5TX1VSSSkgOiBNb2RlbFBhY2thZ2UuZUlOU1RBTkNFKTsKKwkJTW9kaWZpZXJQYWNrYWdlSW1wbCB0aGVNb2RpZmllclBhY2thZ2UgPSAoTW9kaWZpZXJQYWNrYWdlSW1wbCkoRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RVBhY2thZ2UoTW9kaWZpZXJQYWNrYWdlLmVOU19VUkkpIGluc3RhbmNlb2YgTW9kaWZpZXJQYWNrYWdlSW1wbCA/IEVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVQYWNrYWdlKE1vZGlmaWVyUGFja2FnZS5lTlNfVVJJKSA6IE1vZGlmaWVyUGFja2FnZS5lSU5TVEFOQ0UpOworCQlQcmVkaWNhdGVQYWNrYWdlSW1wbCB0aGVQcmVkaWNhdGVQYWNrYWdlID0gKFByZWRpY2F0ZVBhY2thZ2VJbXBsKShFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShQcmVkaWNhdGVQYWNrYWdlLmVOU19VUkkpIGluc3RhbmNlb2YgUHJlZGljYXRlUGFja2FnZUltcGwgPyBFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShQcmVkaWNhdGVQYWNrYWdlLmVOU19VUkkpIDogUHJlZGljYXRlUGFja2FnZS5lSU5TVEFOQ0UpOworCQlTY2VuYXJpb1BhY2thZ2VJbXBsIHRoZVNjZW5hcmlvUGFja2FnZSA9IChTY2VuYXJpb1BhY2thZ2VJbXBsKShFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShTY2VuYXJpb1BhY2thZ2UuZU5TX1VSSSkgaW5zdGFuY2VvZiBTY2VuYXJpb1BhY2thZ2VJbXBsID8gRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RVBhY2thZ2UoU2NlbmFyaW9QYWNrYWdlLmVOU19VUkkpIDogU2NlbmFyaW9QYWNrYWdlLmVJTlNUQU5DRSk7CisJCVRyaWdnZXJQYWNrYWdlSW1wbCB0aGVUcmlnZ2VyUGFja2FnZSA9IChUcmlnZ2VyUGFja2FnZUltcGwpKEVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVQYWNrYWdlKFRyaWdnZXJQYWNrYWdlLmVOU19VUkkpIGluc3RhbmNlb2YgVHJpZ2dlclBhY2thZ2VJbXBsID8gRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RVBhY2thZ2UoVHJpZ2dlclBhY2thZ2UuZU5TX1VSSSkgOiBUcmlnZ2VyUGFja2FnZS5lSU5TVEFOQ0UpOworCQlTb2x2ZXJQYWNrYWdlSW1wbCB0aGVTb2x2ZXJQYWNrYWdlID0gKFNvbHZlclBhY2thZ2VJbXBsKShFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShTb2x2ZXJQYWNrYWdlLmVOU19VUkkpIGluc3RhbmNlb2YgU29sdmVyUGFja2FnZUltcGwgPyBFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShTb2x2ZXJQYWNrYWdlLmVOU19VUkkpIDogU29sdmVyUGFja2FnZS5lSU5TVEFOQ0UpOworCQlMb2dnZXJQYWNrYWdlSW1wbCB0aGVMb2dnZXJQYWNrYWdlID0gKExvZ2dlclBhY2thZ2VJbXBsKShFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShMb2dnZXJQYWNrYWdlLmVOU19VUkkpIGluc3RhbmNlb2YgTG9nZ2VyUGFja2FnZUltcGwgPyBFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShMb2dnZXJQYWNrYWdlLmVOU19VUkkpIDogTG9nZ2VyUGFja2FnZS5lSU5TVEFOQ0UpOworCisJCS8vIENyZWF0ZSBwYWNrYWdlIG1ldGEtZGF0YSBvYmplY3RzCisJCXRoZVNlcXVlbmNlclBhY2thZ2UuY3JlYXRlUGFja2FnZUNvbnRlbnRzKCk7CisJCXRoZUNvbW1vblBhY2thZ2UuY3JlYXRlUGFja2FnZUNvbnRlbnRzKCk7CisJCXRoZUV4cGVyaW1lbnRQYWNrYWdlLmNyZWF0ZVBhY2thZ2VDb250ZW50cygpOworCQl0aGVHcmFwaFBhY2thZ2UuY3JlYXRlUGFja2FnZUNvbnRlbnRzKCk7CisJCXRoZU1vZGVsUGFja2FnZS5jcmVhdGVQYWNrYWdlQ29udGVudHMoKTsKKwkJdGhlTW9kaWZpZXJQYWNrYWdlLmNyZWF0ZVBhY2thZ2VDb250ZW50cygpOworCQl0aGVQcmVkaWNhdGVQYWNrYWdlLmNyZWF0ZVBhY2thZ2VDb250ZW50cygpOworCQl0aGVTY2VuYXJpb1BhY2thZ2UuY3JlYXRlUGFja2FnZUNvbnRlbnRzKCk7CisJCXRoZVRyaWdnZXJQYWNrYWdlLmNyZWF0ZVBhY2thZ2VDb250ZW50cygpOworCQl0aGVTb2x2ZXJQYWNrYWdlLmNyZWF0ZVBhY2thZ2VDb250ZW50cygpOworCQl0aGVMb2dnZXJQYWNrYWdlLmNyZWF0ZVBhY2thZ2VDb250ZW50cygpOworCisJCS8vIEluaXRpYWxpemUgY3JlYXRlZCBtZXRhLWRhdGEKKwkJdGhlU2VxdWVuY2VyUGFja2FnZS5pbml0aWFsaXplUGFja2FnZUNvbnRlbnRzKCk7CisJCXRoZUNvbW1vblBhY2thZ2UuaW5pdGlhbGl6ZVBhY2thZ2VDb250ZW50cygpOworCQl0aGVFeHBlcmltZW50UGFja2FnZS5pbml0aWFsaXplUGFja2FnZUNvbnRlbnRzKCk7CisJCXRoZUdyYXBoUGFja2FnZS5pbml0aWFsaXplUGFja2FnZUNvbnRlbnRzKCk7CisJCXRoZU1vZGVsUGFja2FnZS5pbml0aWFsaXplUGFja2FnZUNvbnRlbnRzKCk7CisJCXRoZU1vZGlmaWVyUGFja2FnZS5pbml0aWFsaXplUGFja2FnZUNvbnRlbnRzKCk7CisJCXRoZVByZWRpY2F0ZVBhY2thZ2UuaW5pdGlhbGl6ZVBhY2thZ2VDb250ZW50cygpOworCQl0aGVTY2VuYXJpb1BhY2thZ2UuaW5pdGlhbGl6ZVBhY2thZ2VDb250ZW50cygpOworCQl0aGVUcmlnZ2VyUGFja2FnZS5pbml0aWFsaXplUGFja2FnZUNvbnRlbnRzKCk7CisJCXRoZVNvbHZlclBhY2thZ2UuaW5pdGlhbGl6ZVBhY2thZ2VDb250ZW50cygpOworCQl0aGVMb2dnZXJQYWNrYWdlLmluaXRpYWxpemVQYWNrYWdlQ29udGVudHMoKTsKKworCQkvLyBNYXJrIG1ldGEtZGF0YSB0byBpbmRpY2F0ZSBpdCBjYW4ndCBiZSBjaGFuZ2VkCisJCXRoZVNlcXVlbmNlclBhY2thZ2UuZnJlZXplKCk7CisKKyAgCisJCS8vIFVwZGF0ZSB0aGUgcmVnaXN0cnkgYW5kIHJldHVybiB0aGUgcGFja2FnZQorCQlFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5wdXQoU2VxdWVuY2VyUGFja2FnZS5lTlNfVVJJLCB0aGVTZXF1ZW5jZXJQYWNrYWdlKTsKKwkJcmV0dXJuIHRoZVNlcXVlbmNlclBhY2thZ2U7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVDbGFzcyBnZXRSZWFsVGltZVNlcXVlbmNlcigpIHsKKwkJcmV0dXJuIHJlYWxUaW1lU2VxdWVuY2VyRUNsYXNzOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQ2xhc3MgZ2V0U2VxdWVuY2VyKCkgeworCQlyZXR1cm4gc2VxdWVuY2VyRUNsYXNzOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFUmVmZXJlbmNlIGdldFNlcXVlbmNlcl9TdGFydFRpbWUoKSB7CisJCXJldHVybiAoRVJlZmVyZW5jZSlzZXF1ZW5jZXJFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgwKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRVJlZmVyZW5jZSBnZXRTZXF1ZW5jZXJfRW5kVGltZSgpIHsKKwkJcmV0dXJuIChFUmVmZXJlbmNlKXNlcXVlbmNlckVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDEpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFUmVmZXJlbmNlIGdldFNlcXVlbmNlcl9DdXJyZW50VGltZSgpIHsKKwkJcmV0dXJuIChFUmVmZXJlbmNlKXNlcXVlbmNlckVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDIpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFUmVmZXJlbmNlIGdldFNlcXVlbmNlcl9OZXh0VGltZSgpIHsKKwkJcmV0dXJuIChFUmVmZXJlbmNlKXNlcXVlbmNlckVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDMpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQXR0cmlidXRlIGdldFNlcXVlbmNlcl9UaW1lRGVsdGEoKSB7CisJCXJldHVybiAoRUF0dHJpYnV0ZSlzZXF1ZW5jZXJFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCg0KTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUF0dHJpYnV0ZSBnZXRTZXF1ZW5jZXJfRHVyYXRpb24oKSB7CisJCXJldHVybiAoRUF0dHJpYnV0ZSlzZXF1ZW5jZXJFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCg1KTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUF0dHJpYnV0ZSBnZXRTZXF1ZW5jZXJfVGltZVRvU3RvcCgpIHsKKwkJcmV0dXJuIChFQXR0cmlidXRlKXNlcXVlbmNlckVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDYpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQXR0cmlidXRlIGdldFNlcXVlbmNlcl9Xb3JrQ29tcGxldGUoKSB7CisJCXJldHVybiAoRUF0dHJpYnV0ZSlzZXF1ZW5jZXJFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCg3KTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUF0dHJpYnV0ZSBnZXRTZXF1ZW5jZXJfV29ya0luY3JlbWVudCgpIHsKKwkJcmV0dXJuIChFQXR0cmlidXRlKXNlcXVlbmNlckVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDgpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQXR0cmlidXRlIGdldFNlcXVlbmNlcl9DeWNsZSgpIHsKKwkJcmV0dXJuIChFQXR0cmlidXRlKXNlcXVlbmNlckVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDkpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQ2xhc3MgZ2V0U2VxdWVudGlhbFNlcXVlbmNlcigpIHsKKwkJcmV0dXJuIHNlcXVlbnRpYWxTZXF1ZW5jZXJFQ2xhc3M7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVBdHRyaWJ1dGUgZ2V0U2VxdWVudGlhbFNlcXVlbmNlcl9UaW1lSW5jcmVtZW50KCkgeworCQlyZXR1cm4gKEVBdHRyaWJ1dGUpc2VxdWVudGlhbFNlcXVlbmNlckVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDApOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBTZXF1ZW5jZXJGYWN0b3J5IGdldFNlcXVlbmNlckZhY3RvcnkoKSB7CisJCXJldHVybiAoU2VxdWVuY2VyRmFjdG9yeSlnZXRFRmFjdG9yeUluc3RhbmNlKCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJpdmF0ZSBib29sZWFuIGlzQ3JlYXRlZCA9IGZhbHNlOworCisJLyoqCisJICogQ3JlYXRlcyB0aGUgbWV0YS1tb2RlbCBvYmplY3RzIGZvciB0aGUgcGFja2FnZS4gIFRoaXMgbWV0aG9kIGlzCisJICogZ3VhcmRlZCB0byBoYXZlIG5vIGFmZmVjdCBvbiBhbnkgaW52b2NhdGlvbiBidXQgaXRzIGZpcnN0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIGNyZWF0ZVBhY2thZ2VDb250ZW50cygpIHsKKwkJaWYgKGlzQ3JlYXRlZCkgcmV0dXJuOworCQlpc0NyZWF0ZWQgPSB0cnVlOworCisJCS8vIENyZWF0ZSBjbGFzc2VzIGFuZCB0aGVpciBmZWF0dXJlcworCQlyZWFsVGltZVNlcXVlbmNlckVDbGFzcyA9IGNyZWF0ZUVDbGFzcyhSRUFMX1RJTUVfU0VRVUVOQ0VSKTsKKworCQlzZXF1ZW5jZXJFQ2xhc3MgPSBjcmVhdGVFQ2xhc3MoU0VRVUVOQ0VSKTsKKwkJY3JlYXRlRVJlZmVyZW5jZShzZXF1ZW5jZXJFQ2xhc3MsIFNFUVVFTkNFUl9fU1RBUlRfVElNRSk7CisJCWNyZWF0ZUVSZWZlcmVuY2Uoc2VxdWVuY2VyRUNsYXNzLCBTRVFVRU5DRVJfX0VORF9USU1FKTsKKwkJY3JlYXRlRVJlZmVyZW5jZShzZXF1ZW5jZXJFQ2xhc3MsIFNFUVVFTkNFUl9fQ1VSUkVOVF9USU1FKTsKKwkJY3JlYXRlRVJlZmVyZW5jZShzZXF1ZW5jZXJFQ2xhc3MsIFNFUVVFTkNFUl9fTkVYVF9USU1FKTsKKwkJY3JlYXRlRUF0dHJpYnV0ZShzZXF1ZW5jZXJFQ2xhc3MsIFNFUVVFTkNFUl9fVElNRV9ERUxUQSk7CisJCWNyZWF0ZUVBdHRyaWJ1dGUoc2VxdWVuY2VyRUNsYXNzLCBTRVFVRU5DRVJfX0RVUkFUSU9OKTsKKwkJY3JlYXRlRUF0dHJpYnV0ZShzZXF1ZW5jZXJFQ2xhc3MsIFNFUVVFTkNFUl9fVElNRV9UT19TVE9QKTsKKwkJY3JlYXRlRUF0dHJpYnV0ZShzZXF1ZW5jZXJFQ2xhc3MsIFNFUVVFTkNFUl9fV09SS19DT01QTEVURSk7CisJCWNyZWF0ZUVBdHRyaWJ1dGUoc2VxdWVuY2VyRUNsYXNzLCBTRVFVRU5DRVJfX1dPUktfSU5DUkVNRU5UKTsKKwkJY3JlYXRlRUF0dHJpYnV0ZShzZXF1ZW5jZXJFQ2xhc3MsIFNFUVVFTkNFUl9fQ1lDTEUpOworCisJCXNlcXVlbnRpYWxTZXF1ZW5jZXJFQ2xhc3MgPSBjcmVhdGVFQ2xhc3MoU0VRVUVOVElBTF9TRVFVRU5DRVIpOworCQljcmVhdGVFQXR0cmlidXRlKHNlcXVlbnRpYWxTZXF1ZW5jZXJFQ2xhc3MsIFNFUVVFTlRJQUxfU0VRVUVOQ0VSX19USU1FX0lOQ1JFTUVOVCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJpdmF0ZSBib29sZWFuIGlzSW5pdGlhbGl6ZWQgPSBmYWxzZTsKKworCS8qKgorCSAqIENvbXBsZXRlIHRoZSBpbml0aWFsaXphdGlvbiBvZiB0aGUgcGFja2FnZSBhbmQgaXRzIG1ldGEtbW9kZWwuICBUaGlzCisJICogbWV0aG9kIGlzIGd1YXJkZWQgdG8gaGF2ZSBubyBhZmZlY3Qgb24gYW55IGludm9jYXRpb24gYnV0IGl0cyBmaXJzdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBpbml0aWFsaXplUGFja2FnZUNvbnRlbnRzKCkgeworCQlpZiAoaXNJbml0aWFsaXplZCkgcmV0dXJuOworCQlpc0luaXRpYWxpemVkID0gdHJ1ZTsKKworCQkvLyBJbml0aWFsaXplIHBhY2thZ2UKKwkJc2V0TmFtZShlTkFNRSk7CisJCXNldE5zUHJlZml4KGVOU19QUkVGSVgpOworCQlzZXROc1VSSShlTlNfVVJJKTsKKworCQkvLyBPYnRhaW4gb3RoZXIgZGVwZW5kZW50IHBhY2thZ2VzCisJCUNvbW1vblBhY2thZ2UgdGhlQ29tbW9uUGFja2FnZSA9IChDb21tb25QYWNrYWdlKUVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVQYWNrYWdlKENvbW1vblBhY2thZ2UuZU5TX1VSSSk7CisJCU1vZGVsUGFja2FnZSB0aGVNb2RlbFBhY2thZ2UgPSAoTW9kZWxQYWNrYWdlKUVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVQYWNrYWdlKE1vZGVsUGFja2FnZS5lTlNfVVJJKTsKKworCQkvLyBDcmVhdGUgdHlwZSBwYXJhbWV0ZXJzCisKKwkJLy8gU2V0IGJvdW5kcyBmb3IgdHlwZSBwYXJhbWV0ZXJzCisKKwkJLy8gQWRkIHN1cGVydHlwZXMgdG8gY2xhc3NlcworCQlyZWFsVGltZVNlcXVlbmNlckVDbGFzcy5nZXRFU3VwZXJUeXBlcygpLmFkZCh0aGlzLmdldFNlcXVlbnRpYWxTZXF1ZW5jZXIoKSk7CisJCXNlcXVlbmNlckVDbGFzcy5nZXRFU3VwZXJUeXBlcygpLmFkZCh0aGVDb21tb25QYWNrYWdlLmdldElkZW50aWZpYWJsZSgpKTsKKwkJc2VxdWVudGlhbFNlcXVlbmNlckVDbGFzcy5nZXRFU3VwZXJUeXBlcygpLmFkZCh0aGlzLmdldFNlcXVlbmNlcigpKTsKKworCQkvLyBJbml0aWFsaXplIGNsYXNzZXMgYW5kIGZlYXR1cmVzOyBhZGQgb3BlcmF0aW9ucyBhbmQgcGFyYW1ldGVycworCQlpbml0RUNsYXNzKHJlYWxUaW1lU2VxdWVuY2VyRUNsYXNzLCBSZWFsVGltZVNlcXVlbmNlci5jbGFzcywgIlJlYWxUaW1lU2VxdWVuY2VyIiwgIUlTX0FCU1RSQUNULCAhSVNfSU5URVJGQUNFLCBJU19HRU5FUkFURURfSU5TVEFOQ0VfQ0xBU1MpOyAvLyROT04tTkxTLTEkCisKKwkJaW5pdEVDbGFzcyhzZXF1ZW5jZXJFQ2xhc3MsIFNlcXVlbmNlci5jbGFzcywgIlNlcXVlbmNlciIsIElTX0FCU1RSQUNULCAhSVNfSU5URVJGQUNFLCBJU19HRU5FUkFURURfSU5TVEFOQ0VfQ0xBU1MpOyAvLyROT04tTkxTLTEkCisJCWluaXRFUmVmZXJlbmNlKGdldFNlcXVlbmNlcl9TdGFydFRpbWUoKSwgdGhlTW9kZWxQYWNrYWdlLmdldFNURU1UaW1lKCksIG51bGwsICJzdGFydFRpbWUiLCBudWxsLCAwLCAxLCBTZXF1ZW5jZXIuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgSVNfQ09NUE9TSVRFLCAhSVNfUkVTT0xWRV9QUk9YSUVTLCAhSVNfVU5TRVRUQUJMRSwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7IC8vJE5PTi1OTFMtMSQKKwkJaW5pdEVSZWZlcmVuY2UoZ2V0U2VxdWVuY2VyX0VuZFRpbWUoKSwgdGhlTW9kZWxQYWNrYWdlLmdldFNURU1UaW1lKCksIG51bGwsICJlbmRUaW1lIiwgbnVsbCwgMCwgMSwgU2VxdWVuY2VyLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsIElTX0NPTVBPU0lURSwgIUlTX1JFU09MVkVfUFJPWElFUywgIUlTX1VOU0VUVEFCTEUsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOyAvLyROT04tTkxTLTEkCisJCWluaXRFUmVmZXJlbmNlKGdldFNlcXVlbmNlcl9DdXJyZW50VGltZSgpLCB0aGVNb2RlbFBhY2thZ2UuZ2V0U1RFTVRpbWUoKSwgbnVsbCwgImN1cnJlbnRUaW1lIiwgbnVsbCwgMCwgMSwgU2VxdWVuY2VyLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsIElTX0NPTVBPU0lURSwgIUlTX1JFU09MVkVfUFJPWElFUywgIUlTX1VOU0VUVEFCTEUsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOyAvLyROT04tTkxTLTEkCisJCWluaXRFUmVmZXJlbmNlKGdldFNlcXVlbmNlcl9OZXh0VGltZSgpLCB0aGVNb2RlbFBhY2thZ2UuZ2V0U1RFTVRpbWUoKSwgbnVsbCwgIm5leHRUaW1lIiwgbnVsbCwgMCwgMSwgU2VxdWVuY2VyLmNsYXNzLCBJU19UUkFOU0lFTlQsIElTX1ZPTEFUSUxFLCAhSVNfQ0hBTkdFQUJMRSwgIUlTX0NPTVBPU0lURSwgIUlTX1JFU09MVkVfUFJPWElFUywgIUlTX1VOU0VUVEFCTEUsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOyAvLyROT04tTkxTLTEkCisJCWluaXRFQXR0cmlidXRlKGdldFNlcXVlbmNlcl9UaW1lRGVsdGEoKSwgZWNvcmVQYWNrYWdlLmdldEVMb25nKCksICJ0aW1lRGVsdGEiLCBudWxsLCAwLCAxLCBTZXF1ZW5jZXIuY2xhc3MsIElTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCAhSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7IC8vJE5PTi1OTFMtMSQKKwkJaW5pdEVBdHRyaWJ1dGUoZ2V0U2VxdWVuY2VyX0R1cmF0aW9uKCksIGVjb3JlUGFja2FnZS5nZXRFTG9uZygpLCAiZHVyYXRpb24iLCAiLTEiLCAwLCAxLCBTZXF1ZW5jZXIuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAorCQlpbml0RUF0dHJpYnV0ZShnZXRTZXF1ZW5jZXJfVGltZVRvU3RvcCgpLCBlY29yZVBhY2thZ2UuZ2V0RUJvb2xlYW4oKSwgInRpbWVUb1N0b3AiLCBudWxsLCAwLCAxLCBTZXF1ZW5jZXIuY2xhc3MsIElTX1RSQU5TSUVOVCwgSVNfVk9MQVRJTEUsICFJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsgLy8kTk9OLU5MUy0xJAorCQlpbml0RUF0dHJpYnV0ZShnZXRTZXF1ZW5jZXJfV29ya0NvbXBsZXRlKCksIGVjb3JlUGFja2FnZS5nZXRFRG91YmxlKCksICJ3b3JrQ29tcGxldGUiLCBudWxsLCAwLCAxLCBTZXF1ZW5jZXIuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7IC8vJE5PTi1OTFMtMSQKKwkJaW5pdEVBdHRyaWJ1dGUoZ2V0U2VxdWVuY2VyX1dvcmtJbmNyZW1lbnQoKSwgZWNvcmVQYWNrYWdlLmdldEVJbnQoKSwgIndvcmtJbmNyZW1lbnQiLCBudWxsLCAwLCAxLCBTZXF1ZW5jZXIuY2xhc3MsIElTX1RSQU5TSUVOVCwgSVNfVk9MQVRJTEUsICFJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsgLy8kTk9OLU5MUy0xJAorCQlpbml0RUF0dHJpYnV0ZShnZXRTZXF1ZW5jZXJfQ3ljbGUoKSwgZWNvcmVQYWNrYWdlLmdldEVJbnQoKSwgImN5Y2xlIiwgIjAiLCAwLCAxLCBTZXF1ZW5jZXIuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAorCisJCWFkZEVPcGVyYXRpb24oc2VxdWVuY2VyRUNsYXNzLCBudWxsLCAicmVzZXQiLCAwLCAxLCBJU19VTklRVUUsIElTX09SREVSRUQpOyAvLyROT04tTkxTLTEkCisKKwkJaW5pdEVDbGFzcyhzZXF1ZW50aWFsU2VxdWVuY2VyRUNsYXNzLCBTZXF1ZW50aWFsU2VxdWVuY2VyLmNsYXNzLCAiU2VxdWVudGlhbFNlcXVlbmNlciIsICFJU19BQlNUUkFDVCwgIUlTX0lOVEVSRkFDRSwgSVNfR0VORVJBVEVEX0lOU1RBTkNFX0NMQVNTKTsgLy8kTk9OLU5MUy0xJAorCQlpbml0RUF0dHJpYnV0ZShnZXRTZXF1ZW50aWFsU2VxdWVuY2VyX1RpbWVJbmNyZW1lbnQoKSwgZWNvcmVQYWNrYWdlLmdldEVMb25nKCksICJ0aW1lSW5jcmVtZW50IiwgbnVsbCwgMCwgMSwgU2VxdWVudGlhbFNlcXVlbmNlci5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsgLy8kTk9OLU5MUy0xJAorCisJCS8vIENyZWF0ZSByZXNvdXJjZQorCQljcmVhdGVSZXNvdXJjZShlTlNfVVJJKTsKKwl9CisKK30gLy9TZXF1ZW5jZXJQYWNrYWdlSW1wbApkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9zZXF1ZW5jZXIvaW1wbC9TZXF1ZW50aWFsU2VxdWVuY2VySW1wbC5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9zZXF1ZW5jZXIvaW1wbC9TZXF1ZW50aWFsU2VxdWVuY2VySW1wbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJjZTE2NDMKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3NlcXVlbmNlci9pbXBsL1NlcXVlbnRpYWxTZXF1ZW5jZXJJbXBsLmphdmEKQEAgLTAsMCArMSwyOTUgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNlcXVlbmNlci5pbXBsOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5pbXBsLkVOb3RpZmljYXRpb25JbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS51dGlsLkVjb3JlVXRpbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuU1RFTVRpbWU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNlcXVlbmNlci5TZXF1ZW5jZXJQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zZXF1ZW5jZXIuU2VxdWVudGlhbFNlcXVlbmNlcjsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiBBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+U2VxdWVudGlhbCBTZXF1ZW5jZXI8L2I+PC9lbT4nLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiA8cD4KKyAqIFRoZSBmb2xsb3dpbmcgZmVhdHVyZXMgYXJlIGltcGxlbWVudGVkOgorICogPHVsPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zZXF1ZW5jZXIuaW1wbC5TZXF1ZW50aWFsU2VxdWVuY2VySW1wbCNnZXRUaW1lSW5jcmVtZW50IDxlbT5UaW1lIEluY3JlbWVudDwvZW0+fTwvbGk+CisgKiA8L3VsPgorICogPC9wPgorICoKKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIFNlcXVlbnRpYWxTZXF1ZW5jZXJJbXBsIGV4dGVuZHMgU2VxdWVuY2VySW1wbCBpbXBsZW1lbnRzCisJCVNlcXVlbnRpYWxTZXF1ZW5jZXIgeworCS8qKgorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRUaW1lSW5jcmVtZW50KCkgPGVtPlRpbWUgSW5jcmVtZW50PC9lbT59JworCSAqIGF0dHJpYnV0ZS4gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogCisJICogQHNlZSAjZ2V0VGltZUluY3JlbWVudCgpCisJICogQGdlbmVyYXRlZCBOT1QKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgbG9uZyBUSU1FX0lOQ1JFTUVOVF9FREVGQVVMVCA9IFNURU1UaW1lLlVuaXRzLkRBWS5nZXRNaWxsaXNlY29uZHMoKTsKKworCS8qKgorCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldFRpbWVJbmNyZW1lbnQoKSA8ZW0+VGltZSBJbmNyZW1lbnQ8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNnZXRUaW1lSW5jcmVtZW50KCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgbG9uZyB0aW1lSW5jcmVtZW50ID0gVElNRV9JTkNSRU1FTlRfRURFRkFVTFQ7CisKKwkvKioKKwkgKiBUaGlzIGlzIGFuIGFjY3VtdWxhdG9yIG9mIHRoZSB3b3JrIGluY3JlbWVudCB0aGF0IGtlZXBzIGFjY291bnQgb2YgdGhlCisJICogZnJhY3Rpb24gb2YgdGhlIHdvcmsgaW5jcmVtZW50cyB1bnRpbCB0aGV5IGV4Y2VlZCAxLjAKKwkgKi8KKwlwcml2YXRlIGRvdWJsZSB3b3JrSW5jcmVtZW50UnVubmluZ1RvdGFsID0gMC4wOworCisJLyoqCisJICogSWYgPGNvZGU+dHJ1ZTwvY29kZT4gdGhlbiB0aGUgbGFzdCB2YWx1ZSBoYXMgYmVlbiByZXR1cm5lZCBieQorCSAqIHtAbGluayAjZ2V0TmV4dFRpbWUoKX0KKwkgKi8KKwlwcml2YXRlIGJvb2xlYW4gZW5kT2ZTZXF1ZW5jZVJlYWNoZWQgPSBmYWxzZTsKKworCS8qKgorCSAqIElmIDxjb2RlPnRydWU8L2NvZGU+IHRoZW4gdGhlIG1ldGhvZCB7QGxpbmsgI2dldE5leHRUaW1lKCl9IGhhcyBub3QKKwkgKiBiZWVuIGNhbGxlZCB5ZXQgc28gd2hlbiBpdCBpcyBpdCBzaG91bGQgcmV0dXJuIHRoZSB2YWx1ZSByZXR1cm5lZCBieQorCSAqIHtAbGluayAjZ2V0U3RhcnRUaW1lKCl9CisJICovCisJcHJpdmF0ZSBib29sZWFuIGdldE5leHRUaW1lTm90Q2FsbGVkID0gdHJ1ZTsKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJcHJvdGVjdGVkIFNlcXVlbnRpYWxTZXF1ZW5jZXJJbXBsKCkgeworCQlzdXBlcigpOworCQkvLyBUaGUgdGltZSBkZWx0YSBpcyBhbHdheXMgdGhlIHNhbWUgd2l0aCBhIHNlcXVlbnRpYWwgc2VxdWVuY2VyCisJCXRpbWVEZWx0YSA9IGdldFRpbWVJbmNyZW1lbnQoKTsKKwl9IC8vIFNlcXVlbnRpYWxTZXF1ZW5jZXJJbXBsCisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIEVDbGFzcyBlU3RhdGljQ2xhc3MoKSB7CisJCXJldHVybiBTZXF1ZW5jZXJQYWNrYWdlLkxpdGVyYWxzLlNFUVVFTlRJQUxfU0VRVUVOQ0VSOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgbG9uZyBnZXRUaW1lSW5jcmVtZW50KCkgeworCQlyZXR1cm4gdGltZUluY3JlbWVudDsKKwl9CisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uc2NlbmFyaW8uaW1wbC5TZXF1ZW5jZXJJbXBsI2lzVGltZVRvU3RvcCgpCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIGJvb2xlYW4gaXNUaW1lVG9TdG9wKCkgeworCQlyZXR1cm4gZW5kT2ZTZXF1ZW5jZVJlYWNoZWQgfHwgaXNFbmRUaW1lQmVmb3JlKGdldEN1cnJlbnRUaW1lKCkpOworCX0gLy8gaXNUaW1lVG9TdG9wCisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCXB1YmxpYyB2b2lkIHNldFRpbWVJbmNyZW1lbnQobG9uZyBuZXdUaW1lSW5jcmVtZW50KSB7CisJCWxvbmcgb2xkVGltZUluY3JlbWVudCA9IGdldFRpbWVJbmNyZW1lbnQoKTsKKwkJdGltZUluY3JlbWVudCA9IG5ld1RpbWVJbmNyZW1lbnQ7CisJCXRpbWVEZWx0YSA9IGdldFRpbWVJbmNyZW1lbnQoKTsKKwkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQorCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwKKwkJCQkJU2VxdWVuY2VyUGFja2FnZS5TRVFVRU5USUFMX1NFUVVFTkNFUl9fVElNRV9JTkNSRU1FTlQsCisJCQkJCW9sZFRpbWVJbmNyZW1lbnQsIGdldFRpbWVJbmNyZW1lbnQoKSkpOworCX0KKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5zY2VuYXJpby5pbXBsLlNlcXVlbmNlckltcGwjZ2V0TmV4dFRpbWUoKQorCSAqIAorCSAqIEFtb25nIG90aGVyIHRoaW5ncyB0aGF0IHRoaXMgZG9lcywgaXQgaW5jcmVtZW50cyB0aGUgCisJICogY291bnQgb2YgdGhlIG51bWJlciBvZiBjb21wbGV0ZWQgY3ljbGVzLiAKKwkgKgorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBTVEVNVGltZSBnZXROZXh0VGltZSgpIHsKKwkJc3VwZXIuZ2V0TmV4dFRpbWUoKTsKKwkJCisJCVNURU1UaW1lIG5leHRUaW1lID0gbnVsbDsKKwkJLy8gSXMgdGhpcyBvdXIgZmlyc3QgY2FsbD8KKwkJaWYgKGdldE5leHRUaW1lTm90Q2FsbGVkKSB7CisJCQkvLyBZZXMKKwkJCS8vIHRoZW4gdGhlIHN0YXJ0IHRpbWUgaXMgdGhlIGZpcnN0IHZhbHVlIHRvIHJldHVybiwgd2UgZG9uJ3QKKwkJCS8vIHRlc3QgZm9yIGl0IHJlbGF0aW9uc2hpcCB0byB0aGUgZW5kIHRpbWUgaGVyZS4gIFRoaXMgbWFrZXMKKwkJCS8vIGl0IHBvc3NpYmxlIHRoYXQgdGhlIHZhbHVlIHJldHVybmVkIHdvdWxkIGJlIGFmdGVyIHRoZSBlbmQgdGltZS4KKwkJCW5leHRUaW1lID0gZ2V0U3RhcnRUaW1lKCk7CisJCQlnZXROZXh0VGltZU5vdENhbGxlZCA9IGZhbHNlOworCQl9IC8vIGlmIGZpcnN0IGNhbGwKKwkJZWxzZSB7CisJCQlmaW5hbCBTVEVNVGltZSBwb3RlbnRpYWxOZXh0VGltZSA9IGdldEN1cnJlbnRUaW1lKCkuYWRkSW5jcmVtZW50KAorCQkJCQlnZXRUaW1lSW5jcmVtZW50KCkpOworCQkJCisJCQkvLyBXYXMgYW4gZW5kIHRpbWUgc3BlY2lmaWVkIGFuZCBpcyBpdCBiZWZvcmUgdGhlIHBvdGVudGlhbCBuZXh0CisJCQkvLyB0aW1lPworCQkJaWYgKGlzRW5kVGltZUJlZm9yZShwb3RlbnRpYWxOZXh0VGltZSkpIHsKKwkJCQkvLyBZZXMKKwkJCQkvLyBUaGVuIHRoZSBlbmQgdGltZSBpcyB0aGUgbmV4dCB2YWx1ZSB0byByZXR1cm4KKwkJCQluZXh0VGltZSA9IChTVEVNVGltZSkgRWNvcmVVdGlsLmNvcHkoZ2V0RW5kVGltZSgpKTsKKwkJCX0gLy8gaWYgZW5kIHRpbWUgc3BlY2lmaWVkCisJCQllbHNlIHsKKwkJCQluZXh0VGltZSA9IHBvdGVudGlhbE5leHRUaW1lOworCQkJfSAvLyBlbHNlCisKKwkJCS8vIEFyZSB3ZSByZXR1cm5pbmcgYSB2YWx1ZSBlcXVhbCB0byB0aGUgc3BlY2lmaWVkIGVuZCB0aW1lPworCQkJaWYgKG5leHRUaW1lLnZhbHVlRXF1YWxzKGdldEVuZFRpbWUoKSkpIHsKKwkJCQkvLyBZZXMKKwkJCQkvLyBvaywgdGhlbiB0aGlzIGlzIHRoZSBsYXN0IHZhbHVlIG9mIHRoZSBzZXF1ZW5jZS4gVGhlIG5leHQKKwkJCQkvLyBjYWxsCisJCQkJLy8gdG8gaXNUaW1lVG9TdG9wKCkgc2hvdWxkIGZhaWwKKwkJCQllbmRPZlNlcXVlbmNlUmVhY2hlZCA9IHRydWU7CisJCQl9IC8vIGlmCisJCX0gLy8gZWxzZSBub3QgZmlyc3QgY2FsbAorCQlzZXRDdXJyZW50VGltZShuZXh0VGltZSk7CisJCXNldFdvcmtDb21wbGV0ZShNYXRoLm1pbihnZXRXb3JrQ29tcGxldGUoKSArIGdldFdvcmtJbmNyZW1lbnQoKSwgMTAwKSk7CisJCQorCQlyZXR1cm4gZ2V0Q3VycmVudFRpbWUoKTsKKwl9IC8vIGdldE5leHRUaW1lCisKKwkvKioKKwkgKiBAcGFyYW0gdGltZQorCSAqIEByZXR1cm4gPGNvZGU+dHJ1ZTwvY29kZT4gaWYgdGhlIGVuZCB0aW1lIGlzIHNwZWNpZmllZCBhbmQgaXQgaXMgYmVmb3JlCisJICogICAgICAgICB0aGUgY3VycmVudCB0aW1lLCA8Y29kZT5mYWxzZTwvY29kZT4sIG90aGVyd2lzZS4KKwkgKi8KKwlwcm90ZWN0ZWQgYm9vbGVhbiBpc0VuZFRpbWVCZWZvcmUoU1RFTVRpbWUgdGltZSkgeworCQlyZXR1cm4gZ2V0RW5kVGltZSgpICE9IG51bGwKKwkJCQkmJiAoZ2V0RW5kVGltZSgpLmdldFRpbWUoKS5iZWZvcmUodGltZS5nZXRUaW1lKCkpKTsKKwl9IC8vIGlzRW5kVGltZUJlZm9yZQorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnNjZW5hcmlvLmltcGwuU2VxdWVuY2VySW1wbCNnZXRXb3JrSW5jcmVtZW50KCkKKwkgKi8KKwlAU3VwcHJlc3NXYXJuaW5ncygiY2FzdCIpCisJQE92ZXJyaWRlCisJcHVibGljIGludCBnZXRXb3JrSW5jcmVtZW50KCkgeworCQlpbnQgcmV0VmFsdWUgPSAwOworCQkvLyBJcyB0aGVyZSBhIHdvcmsgaW5jcmVtZW50PworCQlpZiAoZ2V0RHVyYXRpb24oKSAhPSBVTktOT1dOX0RVUkFUSU9OKSB7CisJCQkvLyBZZXMKKwkJCS8vIFRoZSB3b3JrIGluY3JlbWVudCBjb3VsZCBiZSBmcmFjdGlvbmFsICg8MS4wKS4gSWYgc28gdGhlbiBpdCB3aWxsCisJCQkvLyBub3QgYWNjdW11bGF0ZSBpbiB0aGUgcHJvZ3Jlc3MgbW9uaXRvci4gU28sIHdlIGtlZXAgYSBydW5uaW5nIHN1bQorCQkJLy8gb2YgdGhlIHdvcmsgaW5jcmVtZW50IGFuZCB3aGVuIGl0IGV4Y2VlZHMgMS4wIHdlIHJldHVybiB0aGUgdmFsdWUKKwkJCS8vIGxlc3MgdGhlIGZyYWN0aW9uYWwgcGFydCBhbmQga2VlcCB0aGF0IGZvciB0aGUgZnV0dXJlLgorCQkJd29ya0luY3JlbWVudFJ1bm5pbmdUb3RhbCArPSAxMDAuMCAqIChkb3VibGUpIGdldFRpbWVJbmNyZW1lbnQoKQorCQkJCQkvIChkb3VibGUpIChnZXREdXJhdGlvbigpK2dldFRpbWVJbmNyZW1lbnQoKSk7CisKKwkJCS8vIERvIHdlIGhhdmUgbW9yZSB0aGFuIDEuMD8KKwkJCWlmICh3b3JrSW5jcmVtZW50UnVubmluZ1RvdGFsID49IDEuMCkgeworCQkJCS8vIFllcworCQkJCXJldFZhbHVlID0gKGludCkgd29ya0luY3JlbWVudFJ1bm5pbmdUb3RhbDsKKwkJCQl3b3JrSW5jcmVtZW50UnVubmluZ1RvdGFsIC09IHJldFZhbHVlOworCQkJfQorCQl9CisKKwkJcmV0dXJuIHJldFZhbHVlOworCisJfSAvLyBnZXRXb3JrSW5jcmVtZW50CisKKwkvKioKKwkgKiBoYW5kbGUgd2hhdCBuZWVkcyB0byBiZSBkb25lIHdoZW4gYSBzaW11bGF0aW9uIGlzIHJlc2V0LgorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIHJlc2V0KCkgeworCQlzdXBlci5yZXNldCgpOworCQl3b3JrSW5jcmVtZW50UnVubmluZ1RvdGFsID0gMC4wOworCQlnZXROZXh0VGltZU5vdENhbGxlZCA9IHRydWU7CisJCWVuZE9mU2VxdWVuY2VSZWFjaGVkID0gZmFsc2U7CisJfSAvLyByZXNldAorCQorCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgT2JqZWN0IGVHZXQoaW50IGZlYXR1cmVJRCwgYm9vbGVhbiByZXNvbHZlLCBib29sZWFuIGNvcmVUeXBlKSB7CisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7CisJCQljYXNlIFNlcXVlbmNlclBhY2thZ2UuU0VRVUVOVElBTF9TRVFVRU5DRVJfX1RJTUVfSU5DUkVNRU5UOgorCQkJCXJldHVybiBnZXRUaW1lSW5jcmVtZW50KCk7CisJCX0KKwkJcmV0dXJuIHN1cGVyLmVHZXQoZmVhdHVyZUlELCByZXNvbHZlLCBjb3JlVHlwZSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGVTZXQoaW50IGZlYXR1cmVJRCwgT2JqZWN0IG5ld1ZhbHVlKSB7CisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7CisJCQljYXNlIFNlcXVlbmNlclBhY2thZ2UuU0VRVUVOVElBTF9TRVFVRU5DRVJfX1RJTUVfSU5DUkVNRU5UOgorCQkJCXNldFRpbWVJbmNyZW1lbnQoKExvbmcpbmV3VmFsdWUpOworCQkJCXJldHVybjsKKwkJfQorCQlzdXBlci5lU2V0KGZlYXR1cmVJRCwgbmV3VmFsdWUpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBlVW5zZXQoaW50IGZlYXR1cmVJRCkgeworCQlzd2l0Y2ggKGZlYXR1cmVJRCkgeworCQkJY2FzZSBTZXF1ZW5jZXJQYWNrYWdlLlNFUVVFTlRJQUxfU0VRVUVOQ0VSX19USU1FX0lOQ1JFTUVOVDoKKwkJCQlzZXRUaW1lSW5jcmVtZW50KFRJTUVfSU5DUkVNRU5UX0VERUZBVUxUKTsKKwkJCQlyZXR1cm47CisJCX0KKwkJc3VwZXIuZVVuc2V0KGZlYXR1cmVJRCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBib29sZWFuIGVJc1NldChpbnQgZmVhdHVyZUlEKSB7CisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7CisJCQljYXNlIFNlcXVlbmNlclBhY2thZ2UuU0VRVUVOVElBTF9TRVFVRU5DRVJfX1RJTUVfSU5DUkVNRU5UOgorCQkJCXJldHVybiB0aW1lSW5jcmVtZW50ICE9IFRJTUVfSU5DUkVNRU5UX0VERUZBVUxUOworCQl9CisJCXJldHVybiBzdXBlci5lSXNTZXQoZmVhdHVyZUlEKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIFN0cmluZyB0b1N0cmluZygpIHsKKwkJaWYgKGVJc1Byb3h5KCkpIHJldHVybiBzdXBlci50b1N0cmluZygpOworCisJCVN0cmluZ0J1ZmZlciByZXN1bHQgPSBuZXcgU3RyaW5nQnVmZmVyKHN1cGVyLnRvU3RyaW5nKCkpOworCQlyZXN1bHQuYXBwZW5kKCIgKHRpbWVJbmNyZW1lbnQ6ICIpOyAvLyROT04tTkxTLTEkCisJCXJlc3VsdC5hcHBlbmQodGltZUluY3JlbWVudCk7CisJCXJlc3VsdC5hcHBlbmQoJyknKTsKKwkJcmV0dXJuIHJlc3VsdC50b1N0cmluZygpOworCX0KKworfSAvLyBTZXF1ZW50aWFsU2VxdWVuY2VySW1wbApkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9zZXF1ZW5jZXIvcHJvdmlkZXIvUmVhbFRpbWVTZXF1ZW5jZXJJdGVtUHJvdmlkZXIuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvc2VxdWVuY2VyL3Byb3ZpZGVyL1JlYWxUaW1lU2VxdWVuY2VySXRlbVByb3ZpZGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWM0Yjk1OAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvc2VxdWVuY2VyL3Byb3ZpZGVyL1JlYWxUaW1lU2VxdWVuY2VySXRlbVByb3ZpZGVyLmphdmEKQEAgLTAsMCArMSwxMjkgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNlcXVlbmNlci5wcm92aWRlcjsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LkFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuVVJJOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklFZGl0aW5nRG9tYWluSXRlbVByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtTGFiZWxQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbVByb3BlcnR5RGVzY3JpcHRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbVByb3BlcnR5U291cmNlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklTdHJ1Y3R1cmVkSXRlbUNvbnRlbnRQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JVHJlZUl0ZW1Db250ZW50UHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNlcXVlbmNlci5SZWFsVGltZVNlcXVlbmNlcjsKKworLyoqCisgKiBUaGlzIGlzIHRoZSBpdGVtIHByb3ZpZGVyIGFkYXB0ZXIgZm9yIGEge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zZXF1ZW5jZXIuUmVhbFRpbWVTZXF1ZW5jZXJ9IG9iamVjdC4KKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIFJlYWxUaW1lU2VxdWVuY2VySXRlbVByb3ZpZGVyCisJZXh0ZW5kcyBTZXF1ZW50aWFsU2VxdWVuY2VySXRlbVByb3ZpZGVyCisJaW1wbGVtZW50cwkKKwkJSUVkaXRpbmdEb21haW5JdGVtUHJvdmlkZXIsCQorCQlJU3RydWN0dXJlZEl0ZW1Db250ZW50UHJvdmlkZXIsCQorCQlJVHJlZUl0ZW1Db250ZW50UHJvdmlkZXIsCQorCQlJSXRlbUxhYmVsUHJvdmlkZXIsCQorCQlJSXRlbVByb3BlcnR5U291cmNlIHsKKwkvKioKKwkgKiBUaGlzIGNvbnN0cnVjdHMgYW4gaW5zdGFuY2UgZnJvbSBhIGZhY3RvcnkgYW5kIGEgbm90aWZpZXIuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFJlYWxUaW1lU2VxdWVuY2VySXRlbVByb3ZpZGVyKEFkYXB0ZXJGYWN0b3J5IGFkYXB0ZXJGYWN0b3J5KSB7CisJCXN1cGVyKGFkYXB0ZXJGYWN0b3J5KTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgdGhlIHByb3BlcnR5IGRlc2NyaXB0b3JzIGZvciB0aGUgYWRhcHRlZCBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgTGlzdDxJSXRlbVByb3BlcnR5RGVzY3JpcHRvcj4gZ2V0UHJvcGVydHlEZXNjcmlwdG9ycyhPYmplY3Qgb2JqZWN0KSB7CisJCWlmIChpdGVtUHJvcGVydHlEZXNjcmlwdG9ycyA9PSBudWxsKSB7CisJCQlzdXBlci5nZXRQcm9wZXJ0eURlc2NyaXB0b3JzKG9iamVjdCk7CisKKwkJfQorCQlyZXR1cm4gaXRlbVByb3BlcnR5RGVzY3JpcHRvcnM7CisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIFJlYWxUaW1lU2VxdWVuY2VyLmdpZi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIE9iamVjdCBnZXRJbWFnZShPYmplY3Qgb2JqZWN0KSB7CisJCXJldHVybiBvdmVybGF5SW1hZ2Uob2JqZWN0LCBnZXRSZXNvdXJjZUxvY2F0b3IoKS5nZXRJbWFnZSgiZnVsbC9jdXN0b21vYmoxNi9SZWFsVGltZVNlcXVlbmNlciIpKTsKKwl9CisJCisJLyoqCisJICogVGhpcyByZXR1cm5zIHRoZSBsYWJlbCB0ZXh0IGZvciB0aGUgYWRhcHRlZCBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIFN0cmluZyBnZXRUZXh0KE9iamVjdCBvYmplY3QpIHsKKwkJcmV0dXJuIHN1cGVyLmdldFRleHQob2JqZWN0KTsKKwl9CisJCisJLyoqCisJICogVGhpcyByZXR1cm5zIHRoZSBsYWJlbCB0ZXh0IGZvciB0aGUgYWRhcHRlZCBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgU3RyaW5nIGdldFRleHRHZW4oT2JqZWN0IG9iamVjdCkgeworCQlVUkkgbGFiZWxWYWx1ZSA9ICgoUmVhbFRpbWVTZXF1ZW5jZXIpb2JqZWN0KS5nZXRVUkkoKTsKKwkJU3RyaW5nIGxhYmVsID0gbGFiZWxWYWx1ZSA9PSBudWxsID8gbnVsbCA6IGxhYmVsVmFsdWUudG9TdHJpbmcoKTsKKwkJcmV0dXJuIGxhYmVsID09IG51bGwgfHwgbGFiZWwubGVuZ3RoKCkgPT0gMCA/CisJCQlnZXRTdHJpbmcoIl9VSV9SZWFsVGltZVNlcXVlbmNlcl90eXBlIikgOiAvLyROT04tTkxTLTEkCisJCQlnZXRTdHJpbmcoIl9VSV9SZWFsVGltZVNlcXVlbmNlcl90eXBlIikgKyAiICIgKyBsYWJlbDsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCisJfQorCisJLyoqCisJICogVGhpcyBoYW5kbGVzIG1vZGVsIG5vdGlmaWNhdGlvbnMgYnkgY2FsbGluZyB7QGxpbmsgI3VwZGF0ZUNoaWxkcmVufSB0byB1cGRhdGUgYW55IGNhY2hlZAorCSAqIGNoaWxkcmVuIGFuZCBieSBjcmVhdGluZyBhIHZpZXdlciBub3RpZmljYXRpb24sIHdoaWNoIGl0IHBhc3NlcyB0byB7QGxpbmsgI2ZpcmVOb3RpZnlDaGFuZ2VkfS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBub3RpZnlDaGFuZ2VkKE5vdGlmaWNhdGlvbiBub3RpZmljYXRpb24pIHsKKwkJdXBkYXRlQ2hpbGRyZW4obm90aWZpY2F0aW9uKTsKKwkJc3VwZXIubm90aWZ5Q2hhbmdlZChub3RpZmljYXRpb24pOworCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmVkaXQuY29tbWFuZC5Db21tYW5kUGFyYW1ldGVyfXMgZGVzY3JpYmluZyB0aGUgY2hpbGRyZW4KKwkgKiB0aGF0IGNhbiBiZSBjcmVhdGVkIHVuZGVyIHRoaXMgb2JqZWN0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIGNvbGxlY3ROZXdDaGlsZERlc2NyaXB0b3JzKENvbGxlY3Rpb248T2JqZWN0PiBuZXdDaGlsZERlc2NyaXB0b3JzLCBPYmplY3Qgb2JqZWN0KSB7CisJCXN1cGVyLmNvbGxlY3ROZXdDaGlsZERlc2NyaXB0b3JzKG5ld0NoaWxkRGVzY3JpcHRvcnMsIG9iamVjdCk7CisJfQorCit9CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3NlcXVlbmNlci9wcm92aWRlci9TZXF1ZW5jZXJJdGVtUHJvdmlkZXIuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvc2VxdWVuY2VyL3Byb3ZpZGVyL1NlcXVlbmNlckl0ZW1Qcm92aWRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY5YTVmOWYKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3NlcXVlbmNlci9wcm92aWRlci9TZXF1ZW5jZXJJdGVtUHJvdmlkZXIuamF2YQpAQCAtMCwwICsxLDM5MiBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2VxdWVuY2VyLnByb3ZpZGVyOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA2LCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCitpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5BZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlJlc291cmNlTG9jYXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuVVJJOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkNvbXBvc2VhYmxlQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUVkaXRpbmdEb21haW5JdGVtUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1MYWJlbFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtUHJvcGVydHlEZXNjcmlwdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtUHJvcGVydHlTb3VyY2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVN0cnVjdHVyZWRJdGVtQ29udGVudFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklUcmVlSXRlbUNvbnRlbnRQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JdGVtUHJvcGVydHlEZXNjcmlwdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLlZpZXdlck5vdGlmaWNhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLnByb3ZpZGVyLkNvcmVFZGl0UGx1Z2luOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24ucHJvdmlkZXIuSWRlbnRpZmlhYmxlSXRlbVByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zZXF1ZW5jZXIuU2VxdWVuY2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zZXF1ZW5jZXIuU2VxdWVuY2VyUGFja2FnZTsKKworLyoqCisgKiBUaGlzIGlzIHRoZSBpdGVtIHByb3ZpZGVyIGFkYXB0ZXIgZm9yIGEge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zZXF1ZW5jZXIuU2VxdWVuY2VyfSBvYmplY3QuCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBTZXF1ZW5jZXJJdGVtUHJvdmlkZXIKKwlleHRlbmRzIElkZW50aWZpYWJsZUl0ZW1Qcm92aWRlcgorCWltcGxlbWVudHMJCisJCUlFZGl0aW5nRG9tYWluSXRlbVByb3ZpZGVyLAkKKwkJSVN0cnVjdHVyZWRJdGVtQ29udGVudFByb3ZpZGVyLAkKKwkJSVRyZWVJdGVtQ29udGVudFByb3ZpZGVyLAkKKwkJSUl0ZW1MYWJlbFByb3ZpZGVyLAkKKwkJSUl0ZW1Qcm9wZXJ0eVNvdXJjZSB7CisJLyoqCisJICogVGhpcyBjb25zdHJ1Y3RzIGFuIGluc3RhbmNlIGZyb20gYSBmYWN0b3J5IGFuZCBhIG5vdGlmaWVyLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBTZXF1ZW5jZXJJdGVtUHJvdmlkZXIoQWRhcHRlckZhY3RvcnkgYWRhcHRlckZhY3RvcnkpIHsKKwkJc3VwZXIoYWRhcHRlckZhY3RvcnkpOworCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyB0aGUgcHJvcGVydHkgZGVzY3JpcHRvcnMgZm9yIHRoZSBhZGFwdGVkIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBMaXN0PElJdGVtUHJvcGVydHlEZXNjcmlwdG9yPiBnZXRQcm9wZXJ0eURlc2NyaXB0b3JzKE9iamVjdCBvYmplY3QpIHsKKwkJaWYgKGl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzID09IG51bGwpIHsKKwkJCXN1cGVyLmdldFByb3BlcnR5RGVzY3JpcHRvcnMob2JqZWN0KTsKKworCQkJYWRkU3RhcnRUaW1lUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCk7CisJCQlhZGRFbmRUaW1lUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCk7CisJCQlhZGRDdXJyZW50VGltZVByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QpOworCQkJYWRkTmV4dFRpbWVQcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0KTsKKwkJCWFkZFRpbWVEZWx0YVByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QpOworCQkJYWRkRHVyYXRpb25Qcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0KTsKKwkJCWFkZFRpbWVUb1N0b3BQcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0KTsKKwkJCWFkZFdvcmtDb21wbGV0ZVByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QpOworCQkJYWRkV29ya0luY3JlbWVudFByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QpOworCQkJYWRkQ3ljbGVQcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0KTsKKwkJfQorCQlyZXR1cm4gaXRlbVByb3BlcnR5RGVzY3JpcHRvcnM7CisJfQorCQorCS8qKgorCSAqIFRoaXMgYWRkcyBhIHByb3BlcnR5IGRlc2NyaXB0b3IgZm9yIHRoZSBTdGFydCBUaW1lIGZlYXR1cmUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgYWRkU3RhcnRUaW1lUHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdCBvYmplY3QpIHsKKwkJaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMuYWRkCisJCQkoY3JlYXRlSXRlbVByb3BlcnR5RGVzY3JpcHRvcgorCQkJCSgoKENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnkpYWRhcHRlckZhY3RvcnkpLmdldFJvb3RBZGFwdGVyRmFjdG9yeSgpLAorCQkJCSBnZXRSZXNvdXJjZUxvY2F0b3IoKSwKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfU2VxdWVuY2VyX3N0YXJ0VGltZV9mZWF0dXJlIiksIC8vJE5PTi1OTFMtMSQKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfUHJvcGVydHlEZXNjcmlwdG9yX2Rlc2NyaXB0aW9uIiwgIl9VSV9TZXF1ZW5jZXJfc3RhcnRUaW1lX2ZlYXR1cmUiLCAiX1VJX1NlcXVlbmNlcl90eXBlIiksIC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJCAvLyROT04tTkxTLTMkCisJCQkJIFNlcXVlbmNlclBhY2thZ2UuTGl0ZXJhbHMuU0VRVUVOQ0VSX19TVEFSVF9USU1FLAorCQkJCSB0cnVlLAorCQkJCSBmYWxzZSwKKwkJCQkgZmFsc2UsCisJCQkJIG51bGwsCisJCQkJIG51bGwsCisJCQkJIG51bGwpKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFkZHMgYSBwcm9wZXJ0eSBkZXNjcmlwdG9yIGZvciB0aGUgRW5kIFRpbWUgZmVhdHVyZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBhZGRFbmRUaW1lUHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdCBvYmplY3QpIHsKKwkJaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMuYWRkCisJCQkoY3JlYXRlSXRlbVByb3BlcnR5RGVzY3JpcHRvcgorCQkJCSgoKENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnkpYWRhcHRlckZhY3RvcnkpLmdldFJvb3RBZGFwdGVyRmFjdG9yeSgpLAorCQkJCSBnZXRSZXNvdXJjZUxvY2F0b3IoKSwKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfU2VxdWVuY2VyX2VuZFRpbWVfZmVhdHVyZSIpLCAvLyROT04tTkxTLTEkCisJCQkJIGdldFN0cmluZygiX1VJX1Byb3BlcnR5RGVzY3JpcHRvcl9kZXNjcmlwdGlvbiIsICJfVUlfU2VxdWVuY2VyX2VuZFRpbWVfZmVhdHVyZSIsICJfVUlfU2VxdWVuY2VyX3R5cGUiKSwgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkIC8vJE5PTi1OTFMtMyQKKwkJCQkgU2VxdWVuY2VyUGFja2FnZS5MaXRlcmFscy5TRVFVRU5DRVJfX0VORF9USU1FLAorCQkJCSB0cnVlLAorCQkJCSBmYWxzZSwKKwkJCQkgZmFsc2UsCisJCQkJIG51bGwsCisJCQkJIG51bGwsCisJCQkJIG51bGwpKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFkZHMgYSBwcm9wZXJ0eSBkZXNjcmlwdG9yIGZvciB0aGUgQ3VycmVudCBUaW1lIGZlYXR1cmUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgYWRkQ3VycmVudFRpbWVQcm9wZXJ0eURlc2NyaXB0b3IoT2JqZWN0IG9iamVjdCkgeworCQlpdGVtUHJvcGVydHlEZXNjcmlwdG9ycy5hZGQKKwkJCShjcmVhdGVJdGVtUHJvcGVydHlEZXNjcmlwdG9yCisJCQkJKCgoQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSlhZGFwdGVyRmFjdG9yeSkuZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCksCisJCQkJIGdldFJlc291cmNlTG9jYXRvcigpLAorCQkJCSBnZXRTdHJpbmcoIl9VSV9TZXF1ZW5jZXJfY3VycmVudFRpbWVfZmVhdHVyZSIpLCAvLyROT04tTkxTLTEkCisJCQkJIGdldFN0cmluZygiX1VJX1Byb3BlcnR5RGVzY3JpcHRvcl9kZXNjcmlwdGlvbiIsICJfVUlfU2VxdWVuY2VyX2N1cnJlbnRUaW1lX2ZlYXR1cmUiLCAiX1VJX1NlcXVlbmNlcl90eXBlIiksIC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJCAvLyROT04tTkxTLTMkCisJCQkJIFNlcXVlbmNlclBhY2thZ2UuTGl0ZXJhbHMuU0VRVUVOQ0VSX19DVVJSRU5UX1RJTUUsCisJCQkJIGZhbHNlLAorCQkJCSBmYWxzZSwKKwkJCQkgZmFsc2UsCisJCQkJIG51bGwsCisJCQkJIG51bGwsCisJCQkJIG51bGwpKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFkZHMgYSBwcm9wZXJ0eSBkZXNjcmlwdG9yIGZvciB0aGUgTmV4dCBUaW1lIGZlYXR1cmUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgYWRkTmV4dFRpbWVQcm9wZXJ0eURlc2NyaXB0b3IoT2JqZWN0IG9iamVjdCkgeworCQlpdGVtUHJvcGVydHlEZXNjcmlwdG9ycy5hZGQKKwkJCShjcmVhdGVJdGVtUHJvcGVydHlEZXNjcmlwdG9yCisJCQkJKCgoQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSlhZGFwdGVyRmFjdG9yeSkuZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCksCisJCQkJIGdldFJlc291cmNlTG9jYXRvcigpLAorCQkJCSBnZXRTdHJpbmcoIl9VSV9TZXF1ZW5jZXJfbmV4dFRpbWVfZmVhdHVyZSIpLCAvLyROT04tTkxTLTEkCisJCQkJIGdldFN0cmluZygiX1VJX1Byb3BlcnR5RGVzY3JpcHRvcl9kZXNjcmlwdGlvbiIsICJfVUlfU2VxdWVuY2VyX25leHRUaW1lX2ZlYXR1cmUiLCAiX1VJX1NlcXVlbmNlcl90eXBlIiksIC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJCAvLyROT04tTkxTLTMkCisJCQkJIFNlcXVlbmNlclBhY2thZ2UuTGl0ZXJhbHMuU0VRVUVOQ0VSX19ORVhUX1RJTUUsCisJCQkJIGZhbHNlLAorCQkJCSBmYWxzZSwKKwkJCQkgZmFsc2UsCisJCQkJIG51bGwsCisJCQkJIG51bGwsCisJCQkJIG51bGwpKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFkZHMgYSBwcm9wZXJ0eSBkZXNjcmlwdG9yIGZvciB0aGUgVGltZSBEZWx0YSBmZWF0dXJlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIGFkZFRpbWVEZWx0YVByb3BlcnR5RGVzY3JpcHRvcihPYmplY3Qgb2JqZWN0KSB7CisJCWl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzLmFkZAorCQkJKGNyZWF0ZUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IKKwkJCQkoKChDb21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5KWFkYXB0ZXJGYWN0b3J5KS5nZXRSb290QWRhcHRlckZhY3RvcnkoKSwKKwkJCQkgZ2V0UmVzb3VyY2VMb2NhdG9yKCksCisJCQkJIGdldFN0cmluZygiX1VJX1NlcXVlbmNlcl90aW1lRGVsdGFfZmVhdHVyZSIpLCAvLyROT04tTkxTLTEkCisJCQkJIGdldFN0cmluZygiX1VJX1Byb3BlcnR5RGVzY3JpcHRvcl9kZXNjcmlwdGlvbiIsICJfVUlfU2VxdWVuY2VyX3RpbWVEZWx0YV9mZWF0dXJlIiwgIl9VSV9TZXF1ZW5jZXJfdHlwZSIpLCAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQgLy8kTk9OLU5MUy0zJAorCQkJCSBTZXF1ZW5jZXJQYWNrYWdlLkxpdGVyYWxzLlNFUVVFTkNFUl9fVElNRV9ERUxUQSwKKwkJCQkgZmFsc2UsCisJCQkJIGZhbHNlLAorCQkJCSBmYWxzZSwKKwkJCQkgSXRlbVByb3BlcnR5RGVzY3JpcHRvci5JTlRFR1JBTF9WQUxVRV9JTUFHRSwKKwkJCQkgbnVsbCwKKwkJCQkgbnVsbCkpOworCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyBhIHByb3BlcnR5IGRlc2NyaXB0b3IgZm9yIHRoZSBEdXJhdGlvbiBmZWF0dXJlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIGFkZER1cmF0aW9uUHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdCBvYmplY3QpIHsKKwkJaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMuYWRkCisJCQkoY3JlYXRlSXRlbVByb3BlcnR5RGVzY3JpcHRvcgorCQkJCSgoKENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnkpYWRhcHRlckZhY3RvcnkpLmdldFJvb3RBZGFwdGVyRmFjdG9yeSgpLAorCQkJCSBnZXRSZXNvdXJjZUxvY2F0b3IoKSwKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfU2VxdWVuY2VyX2R1cmF0aW9uX2ZlYXR1cmUiKSwgLy8kTk9OLU5MUy0xJAorCQkJCSBnZXRTdHJpbmcoIl9VSV9Qcm9wZXJ0eURlc2NyaXB0b3JfZGVzY3JpcHRpb24iLCAiX1VJX1NlcXVlbmNlcl9kdXJhdGlvbl9mZWF0dXJlIiwgIl9VSV9TZXF1ZW5jZXJfdHlwZSIpLCAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQgLy8kTk9OLU5MUy0zJAorCQkJCSBTZXF1ZW5jZXJQYWNrYWdlLkxpdGVyYWxzLlNFUVVFTkNFUl9fRFVSQVRJT04sCisJCQkJIGZhbHNlLAorCQkJCSBmYWxzZSwKKwkJCQkgZmFsc2UsCisJCQkJIEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IuSU5URUdSQUxfVkFMVUVfSU1BR0UsCisJCQkJIG51bGwsCisJCQkJIG51bGwpKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFkZHMgYSBwcm9wZXJ0eSBkZXNjcmlwdG9yIGZvciB0aGUgVGltZSBUbyBTdG9wIGZlYXR1cmUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgYWRkVGltZVRvU3RvcFByb3BlcnR5RGVzY3JpcHRvcihPYmplY3Qgb2JqZWN0KSB7CisJCWl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzLmFkZAorCQkJKGNyZWF0ZUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IKKwkJCQkoKChDb21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5KWFkYXB0ZXJGYWN0b3J5KS5nZXRSb290QWRhcHRlckZhY3RvcnkoKSwKKwkJCQkgZ2V0UmVzb3VyY2VMb2NhdG9yKCksCisJCQkJIGdldFN0cmluZygiX1VJX1NlcXVlbmNlcl90aW1lVG9TdG9wX2ZlYXR1cmUiKSwgLy8kTk9OLU5MUy0xJAorCQkJCSBnZXRTdHJpbmcoIl9VSV9Qcm9wZXJ0eURlc2NyaXB0b3JfZGVzY3JpcHRpb24iLCAiX1VJX1NlcXVlbmNlcl90aW1lVG9TdG9wX2ZlYXR1cmUiLCAiX1VJX1NlcXVlbmNlcl90eXBlIiksIC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJCAvLyROT04tTkxTLTMkCisJCQkJIFNlcXVlbmNlclBhY2thZ2UuTGl0ZXJhbHMuU0VRVUVOQ0VSX19USU1FX1RPX1NUT1AsCisJCQkJIGZhbHNlLAorCQkJCSBmYWxzZSwKKwkJCQkgZmFsc2UsCisJCQkJIEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IuQk9PTEVBTl9WQUxVRV9JTUFHRSwKKwkJCQkgbnVsbCwKKwkJCQkgbnVsbCkpOworCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyBhIHByb3BlcnR5IGRlc2NyaXB0b3IgZm9yIHRoZSBXb3JrIENvbXBsZXRlIGZlYXR1cmUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgYWRkV29ya0NvbXBsZXRlUHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdCBvYmplY3QpIHsKKwkJaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMuYWRkCisJCQkoY3JlYXRlSXRlbVByb3BlcnR5RGVzY3JpcHRvcgorCQkJCSgoKENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnkpYWRhcHRlckZhY3RvcnkpLmdldFJvb3RBZGFwdGVyRmFjdG9yeSgpLAorCQkJCSBnZXRSZXNvdXJjZUxvY2F0b3IoKSwKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfU2VxdWVuY2VyX3dvcmtDb21wbGV0ZV9mZWF0dXJlIiksIC8vJE5PTi1OTFMtMSQKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfUHJvcGVydHlEZXNjcmlwdG9yX2Rlc2NyaXB0aW9uIiwgIl9VSV9TZXF1ZW5jZXJfd29ya0NvbXBsZXRlX2ZlYXR1cmUiLCAiX1VJX1NlcXVlbmNlcl90eXBlIiksIC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJCAvLyROT04tTkxTLTMkCisJCQkJIFNlcXVlbmNlclBhY2thZ2UuTGl0ZXJhbHMuU0VRVUVOQ0VSX19XT1JLX0NPTVBMRVRFLAorCQkJCSBmYWxzZSwKKwkJCQkgZmFsc2UsCisJCQkJIGZhbHNlLAorCQkJCSBJdGVtUHJvcGVydHlEZXNjcmlwdG9yLlJFQUxfVkFMVUVfSU1BR0UsCisJCQkJIG51bGwsCisJCQkJIG51bGwpKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFkZHMgYSBwcm9wZXJ0eSBkZXNjcmlwdG9yIGZvciB0aGUgV29yayBJbmNyZW1lbnQgZmVhdHVyZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBhZGRXb3JrSW5jcmVtZW50UHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdCBvYmplY3QpIHsKKwkJaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMuYWRkCisJCQkoY3JlYXRlSXRlbVByb3BlcnR5RGVzY3JpcHRvcgorCQkJCSgoKENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnkpYWRhcHRlckZhY3RvcnkpLmdldFJvb3RBZGFwdGVyRmFjdG9yeSgpLAorCQkJCSBnZXRSZXNvdXJjZUxvY2F0b3IoKSwKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfU2VxdWVuY2VyX3dvcmtJbmNyZW1lbnRfZmVhdHVyZSIpLCAvLyROT04tTkxTLTEkCisJCQkJIGdldFN0cmluZygiX1VJX1Byb3BlcnR5RGVzY3JpcHRvcl9kZXNjcmlwdGlvbiIsICJfVUlfU2VxdWVuY2VyX3dvcmtJbmNyZW1lbnRfZmVhdHVyZSIsICJfVUlfU2VxdWVuY2VyX3R5cGUiKSwgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkIC8vJE5PTi1OTFMtMyQKKwkJCQkgU2VxdWVuY2VyUGFja2FnZS5MaXRlcmFscy5TRVFVRU5DRVJfX1dPUktfSU5DUkVNRU5ULAorCQkJCSBmYWxzZSwKKwkJCQkgZmFsc2UsCisJCQkJIGZhbHNlLAorCQkJCSBJdGVtUHJvcGVydHlEZXNjcmlwdG9yLklOVEVHUkFMX1ZBTFVFX0lNQUdFLAorCQkJCSBudWxsLAorCQkJCSBudWxsKSk7CisJfQorCisJLyoqCisJICogVGhpcyBhZGRzIGEgcHJvcGVydHkgZGVzY3JpcHRvciBmb3IgdGhlIEN5Y2xlIGZlYXR1cmUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgYWRkQ3ljbGVQcm9wZXJ0eURlc2NyaXB0b3IoT2JqZWN0IG9iamVjdCkgeworCQlpdGVtUHJvcGVydHlEZXNjcmlwdG9ycy5hZGQKKwkJCShjcmVhdGVJdGVtUHJvcGVydHlEZXNjcmlwdG9yCisJCQkJKCgoQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSlhZGFwdGVyRmFjdG9yeSkuZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCksCisJCQkJIGdldFJlc291cmNlTG9jYXRvcigpLAorCQkJCSBnZXRTdHJpbmcoIl9VSV9TZXF1ZW5jZXJfY3ljbGVfZmVhdHVyZSIpLCAvLyROT04tTkxTLTEkCisJCQkJIGdldFN0cmluZygiX1VJX1Byb3BlcnR5RGVzY3JpcHRvcl9kZXNjcmlwdGlvbiIsICJfVUlfU2VxdWVuY2VyX2N5Y2xlX2ZlYXR1cmUiLCAiX1VJX1NlcXVlbmNlcl90eXBlIiksIC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJCAvLyROT04tTkxTLTMkCisJCQkJIFNlcXVlbmNlclBhY2thZ2UuTGl0ZXJhbHMuU0VRVUVOQ0VSX19DWUNMRSwKKwkJCQkgZmFsc2UsCisJCQkJIGZhbHNlLAorCQkJCSBmYWxzZSwKKwkJCQkgSXRlbVByb3BlcnR5RGVzY3JpcHRvci5JTlRFR1JBTF9WQUxVRV9JTUFHRSwKKwkJCQkgbnVsbCwKKwkJCQkgbnVsbCkpOworCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyB0aGUgbGFiZWwgdGV4dCBmb3IgdGhlIGFkYXB0ZWQgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBTdHJpbmcgZ2V0VGV4dChPYmplY3Qgb2JqZWN0KSB7CisJCXJldHVybiBzdXBlci5nZXRUZXh0KG9iamVjdCk7CisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIHRoZSBsYWJlbCB0ZXh0IGZvciB0aGUgYWRhcHRlZCBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgU3RyaW5nIGdldFRleHRHZW4oT2JqZWN0IG9iamVjdCkgeworCQlVUkkgbGFiZWxWYWx1ZSA9ICgoU2VxdWVuY2VyKW9iamVjdCkuZ2V0VVJJKCk7CisJCVN0cmluZyBsYWJlbCA9IGxhYmVsVmFsdWUgPT0gbnVsbCA/IG51bGwgOiBsYWJlbFZhbHVlLnRvU3RyaW5nKCk7CisJCXJldHVybiBsYWJlbCA9PSBudWxsIHx8IGxhYmVsLmxlbmd0aCgpID09IDAgPworCQkJZ2V0U3RyaW5nKCJfVUlfU2VxdWVuY2VyX3R5cGUiKSA6IC8vJE5PTi1OTFMtMSQKKwkJCWdldFN0cmluZygiX1VJX1NlcXVlbmNlcl90eXBlIikgKyAiICIgKyBsYWJlbDsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCisJfQorCQorCS8qKgorCSAqIFRoaXMgcmV0dXJucyBTZXF1ZW5jZXIuZ2lmLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgT2JqZWN0IGdldEltYWdlKE9iamVjdCBvYmplY3QpIHsKKwkJcmV0dXJuIG92ZXJsYXlJbWFnZShvYmplY3QsIGdldFJlc291cmNlTG9jYXRvcigpLmdldEltYWdlKCJmdWxsL2N1c3RvbW9iajE2L1NlcXVlbmNlciIpKTsKKwl9CisJCisJLyoqCisJICogVGhpcyBoYW5kbGVzIG1vZGVsIG5vdGlmaWNhdGlvbnMgYnkgY2FsbGluZyB7QGxpbmsgI3VwZGF0ZUNoaWxkcmVufSB0byB1cGRhdGUgYW55IGNhY2hlZAorCSAqIGNoaWxkcmVuIGFuZCBieSBjcmVhdGluZyBhIHZpZXdlciBub3RpZmljYXRpb24sIHdoaWNoIGl0IHBhc3NlcyB0byB7QGxpbmsgI2ZpcmVOb3RpZnlDaGFuZ2VkfS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBub3RpZnlDaGFuZ2VkKE5vdGlmaWNhdGlvbiBub3RpZmljYXRpb24pIHsKKwkJdXBkYXRlQ2hpbGRyZW4obm90aWZpY2F0aW9uKTsKKworCQlzd2l0Y2ggKG5vdGlmaWNhdGlvbi5nZXRGZWF0dXJlSUQoU2VxdWVuY2VyLmNsYXNzKSkgeworCQkJY2FzZSBTZXF1ZW5jZXJQYWNrYWdlLlNFUVVFTkNFUl9fU1RBUlRfVElNRToKKwkJCWNhc2UgU2VxdWVuY2VyUGFja2FnZS5TRVFVRU5DRVJfX0VORF9USU1FOgorCQkJY2FzZSBTZXF1ZW5jZXJQYWNrYWdlLlNFUVVFTkNFUl9fQ1VSUkVOVF9USU1FOgorCQkJY2FzZSBTZXF1ZW5jZXJQYWNrYWdlLlNFUVVFTkNFUl9fVElNRV9ERUxUQToKKwkJCWNhc2UgU2VxdWVuY2VyUGFja2FnZS5TRVFVRU5DRVJfX0RVUkFUSU9OOgorCQkJY2FzZSBTZXF1ZW5jZXJQYWNrYWdlLlNFUVVFTkNFUl9fVElNRV9UT19TVE9QOgorCQkJY2FzZSBTZXF1ZW5jZXJQYWNrYWdlLlNFUVVFTkNFUl9fV09SS19DT01QTEVURToKKwkJCWNhc2UgU2VxdWVuY2VyUGFja2FnZS5TRVFVRU5DRVJfX1dPUktfSU5DUkVNRU5UOgorCQkJY2FzZSBTZXF1ZW5jZXJQYWNrYWdlLlNFUVVFTkNFUl9fQ1lDTEU6CisJCQkJZmlyZU5vdGlmeUNoYW5nZWQobmV3IFZpZXdlck5vdGlmaWNhdGlvbihub3RpZmljYXRpb24sIG5vdGlmaWNhdGlvbi5nZXROb3RpZmllcigpLCBmYWxzZSwgdHJ1ZSkpOworCQkJCXJldHVybjsKKwkJfQorCQlzdXBlci5ub3RpZnlDaGFuZ2VkKG5vdGlmaWNhdGlvbik7CisJfQorCisJLyoqCisJICogVGhpcyBhZGRzIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuZWRpdC5jb21tYW5kLkNvbW1hbmRQYXJhbWV0ZXJ9cyBkZXNjcmliaW5nIHRoZSBjaGlsZHJlbgorCSAqIHRoYXQgY2FuIGJlIGNyZWF0ZWQgdW5kZXIgdGhpcyBvYmplY3QuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgY29sbGVjdE5ld0NoaWxkRGVzY3JpcHRvcnMoQ29sbGVjdGlvbjxPYmplY3Q+IG5ld0NoaWxkRGVzY3JpcHRvcnMsIE9iamVjdCBvYmplY3QpIHsKKwkJc3VwZXIuY29sbGVjdE5ld0NoaWxkRGVzY3JpcHRvcnMobmV3Q2hpbGREZXNjcmlwdG9ycywgb2JqZWN0KTsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm4gdGhlIHJlc291cmNlIGxvY2F0b3IgZm9yIHRoaXMgaXRlbSBwcm92aWRlcidzIHJlc291cmNlcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgUmVzb3VyY2VMb2NhdG9yIGdldFJlc291cmNlTG9jYXRvcigpIHsKKwkJcmV0dXJuIENvcmVFZGl0UGx1Z2luLklOU1RBTkNFOworCX0KKworfQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9zZXF1ZW5jZXIvcHJvdmlkZXIvU2VxdWVuY2VySXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvc2VxdWVuY2VyL3Byb3ZpZGVyL1NlcXVlbmNlckl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzBiZDAxOAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvc2VxdWVuY2VyL3Byb3ZpZGVyL1NlcXVlbmNlckl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5LmphdmEKQEAgLTAsMCArMSwyMzEgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNlcXVlbmNlci5wcm92aWRlcjsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OworaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuQWRhcHRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuQ2hhbmdlTm90aWZpZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5Db21wb3NlZEFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklDaGFuZ2VOb3RpZmllcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JRGlzcG9zYWJsZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JRWRpdGluZ0RvbWFpbkl0ZW1Qcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbUxhYmVsUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1Qcm9wZXJ0eVNvdXJjZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JTm90aWZ5Q2hhbmdlZExpc3RlbmVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklTdHJ1Y3R1cmVkSXRlbUNvbnRlbnRQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JVHJlZUl0ZW1Db250ZW50UHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNlcXVlbmNlci51dGlsLlNlcXVlbmNlckFkYXB0ZXJGYWN0b3J5OworCisvKioKKyAqIFRoaXMgaXMgdGhlIGZhY3RvcnkgdGhhdCBpcyB1c2VkIHRvIHByb3ZpZGUgdGhlIGludGVyZmFjZXMgbmVlZGVkIHRvIHN1cHBvcnQgVmlld2Vycy4KKyAqIFRoZSBhZGFwdGVycyBnZW5lcmF0ZWQgYnkgdGhpcyBmYWN0b3J5IGNvbnZlcnQgRU1GIGFkYXB0ZXIgbm90aWZpY2F0aW9ucyBpbnRvIGNhbGxzIHRvIHtAbGluayAjZmlyZU5vdGlmeUNoYW5nZWQgZmlyZU5vdGlmeUNoYW5nZWR9LgorICogVGhlIGFkYXB0ZXJzIGFsc28gc3VwcG9ydCBFY2xpcHNlIHByb3BlcnR5IHNoZWV0cy4KKyAqIE5vdGUgdGhhdCBtb3N0IG9mIHRoZSBhZGFwdGVycyBhcmUgc2hhcmVkIGFtb25nIG11bHRpcGxlIGluc3RhbmNlcy4KKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIFNlcXVlbmNlckl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5IGV4dGVuZHMgU2VxdWVuY2VyQWRhcHRlckZhY3RvcnkgaW1wbGVtZW50cyBDb21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5LCBJQ2hhbmdlTm90aWZpZXIsIElEaXNwb3NhYmxlIHsKKwkvKioKKwkgKiBUaGlzIGtlZXBzIHRyYWNrIG9mIHRoZSByb290IGFkYXB0ZXIgZmFjdG9yeSB0aGF0IGRlbGVnYXRlcyB0byB0aGlzIGFkYXB0ZXIgZmFjdG9yeS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgQ29tcG9zZWRBZGFwdGVyRmFjdG9yeSBwYXJlbnRBZGFwdGVyRmFjdG9yeTsKKworCS8qKgorCSAqIFRoaXMgaXMgdXNlZCB0byBpbXBsZW1lbnQge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklDaGFuZ2VOb3RpZmllcn0uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIElDaGFuZ2VOb3RpZmllciBjaGFuZ2VOb3RpZmllciA9IG5ldyBDaGFuZ2VOb3RpZmllcigpOworCisJLyoqCisJICogVGhpcyBrZWVwcyB0cmFjayBvZiBhbGwgdGhlIHN1cHBvcnRlZCB0eXBlcyBjaGVja2VkIGJ5IHtAbGluayAjaXNGYWN0b3J5Rm9yVHlwZSBpc0ZhY3RvcnlGb3JUeXBlfS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgQ29sbGVjdGlvbjxPYmplY3Q+IHN1cHBvcnRlZFR5cGVzID0gbmV3IEFycmF5TGlzdDxPYmplY3Q+KCk7CisKKwkvKioKKwkgKiBUaGlzIGNvbnN0cnVjdHMgYW4gaW5zdGFuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFNlcXVlbmNlckl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5KCkgeworCQlzdXBwb3J0ZWRUeXBlcy5hZGQoSUVkaXRpbmdEb21haW5JdGVtUHJvdmlkZXIuY2xhc3MpOworCQlzdXBwb3J0ZWRUeXBlcy5hZGQoSVN0cnVjdHVyZWRJdGVtQ29udGVudFByb3ZpZGVyLmNsYXNzKTsKKwkJc3VwcG9ydGVkVHlwZXMuYWRkKElUcmVlSXRlbUNvbnRlbnRQcm92aWRlci5jbGFzcyk7CisJCXN1cHBvcnRlZFR5cGVzLmFkZChJSXRlbUxhYmVsUHJvdmlkZXIuY2xhc3MpOworCQlzdXBwb3J0ZWRUeXBlcy5hZGQoSUl0ZW1Qcm9wZXJ0eVNvdXJjZS5jbGFzcyk7CisJfQorCisJLyoqCisJICogVGhpcyBrZWVwcyB0cmFjayBvZiB0aGUgb25lIGFkYXB0ZXIgdXNlZCBmb3IgYWxsIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2VxdWVuY2VyLlJlYWxUaW1lU2VxdWVuY2VyfSBpbnN0YW5jZXMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIFJlYWxUaW1lU2VxdWVuY2VySXRlbVByb3ZpZGVyIHJlYWxUaW1lU2VxdWVuY2VySXRlbVByb3ZpZGVyOworCisJLyoqCisJICogVGhpcyBjcmVhdGVzIGFuIGFkYXB0ZXIgZm9yIGEge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zZXF1ZW5jZXIuUmVhbFRpbWVTZXF1ZW5jZXJ9LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZVJlYWxUaW1lU2VxdWVuY2VyQWRhcHRlcigpIHsKKwkJaWYgKHJlYWxUaW1lU2VxdWVuY2VySXRlbVByb3ZpZGVyID09IG51bGwpIHsKKwkJCXJlYWxUaW1lU2VxdWVuY2VySXRlbVByb3ZpZGVyID0gbmV3IFJlYWxUaW1lU2VxdWVuY2VySXRlbVByb3ZpZGVyKHRoaXMpOworCQl9CisKKwkJcmV0dXJuIHJlYWxUaW1lU2VxdWVuY2VySXRlbVByb3ZpZGVyOworCX0KKworCS8qKgorCSAqIFRoaXMga2VlcHMgdHJhY2sgb2YgdGhlIG9uZSBhZGFwdGVyIHVzZWQgZm9yIGFsbCB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNlcXVlbmNlci5TZXF1ZW50aWFsU2VxdWVuY2VyfSBpbnN0YW5jZXMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIFNlcXVlbnRpYWxTZXF1ZW5jZXJJdGVtUHJvdmlkZXIgc2VxdWVudGlhbFNlcXVlbmNlckl0ZW1Qcm92aWRlcjsKKworCS8qKgorCSAqIFRoaXMgY3JlYXRlcyBhbiBhZGFwdGVyIGZvciBhIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2VxdWVuY2VyLlNlcXVlbnRpYWxTZXF1ZW5jZXJ9LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZVNlcXVlbnRpYWxTZXF1ZW5jZXJBZGFwdGVyKCkgeworCQlpZiAoc2VxdWVudGlhbFNlcXVlbmNlckl0ZW1Qcm92aWRlciA9PSBudWxsKSB7CisJCQlzZXF1ZW50aWFsU2VxdWVuY2VySXRlbVByb3ZpZGVyID0gbmV3IFNlcXVlbnRpYWxTZXF1ZW5jZXJJdGVtUHJvdmlkZXIodGhpcyk7CisJCX0KKworCQlyZXR1cm4gc2VxdWVudGlhbFNlcXVlbmNlckl0ZW1Qcm92aWRlcjsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgdGhlIHJvb3QgYWRhcHRlciBmYWN0b3J5IHRoYXQgY29udGFpbnMgdGhpcyBmYWN0b3J5LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBDb21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5IGdldFJvb3RBZGFwdGVyRmFjdG9yeSgpIHsKKwkJcmV0dXJuIHBhcmVudEFkYXB0ZXJGYWN0b3J5ID09IG51bGwgPyB0aGlzIDogcGFyZW50QWRhcHRlckZhY3RvcnkuZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCk7CisJfQorCisJLyoqCisJICogVGhpcyBzZXRzIHRoZSBjb21wb3NlZCBhZGFwdGVyIGZhY3RvcnkgdGhhdCBjb250YWlucyB0aGlzIGZhY3RvcnkuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgc2V0UGFyZW50QWRhcHRlckZhY3RvcnkoQ29tcG9zZWRBZGFwdGVyRmFjdG9yeSBwYXJlbnRBZGFwdGVyRmFjdG9yeSkgeworCQl0aGlzLnBhcmVudEFkYXB0ZXJGYWN0b3J5ID0gcGFyZW50QWRhcHRlckZhY3Rvcnk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIGJvb2xlYW4gaXNGYWN0b3J5Rm9yVHlwZShPYmplY3QgdHlwZSkgeworCQlyZXR1cm4gc3VwcG9ydGVkVHlwZXMuY29udGFpbnModHlwZSkgfHwgc3VwZXIuaXNGYWN0b3J5Rm9yVHlwZSh0eXBlKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGltcGxlbWVudGF0aW9uIHN1YnN0aXR1dGVzIHRoZSBmYWN0b3J5IGl0c2VsZiBhcyB0aGUga2V5IGZvciB0aGUgYWRhcHRlci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgQWRhcHRlciBhZGFwdChOb3RpZmllciBub3RpZmllciwgT2JqZWN0IHR5cGUpIHsKKwkJcmV0dXJuIHN1cGVyLmFkYXB0KG5vdGlmaWVyLCB0aGlzKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAU3VwcHJlc3NXYXJuaW5ncygidW5jaGVja2VkIikKKwlAT3ZlcnJpZGUKKwlwdWJsaWMgT2JqZWN0IGFkYXB0KE9iamVjdCBvYmplY3QsIE9iamVjdCB0eXBlKSB7CisJCWlmIChpc0ZhY3RvcnlGb3JUeXBlKHR5cGUpKSB7CisJCQlPYmplY3QgYWRhcHRlciA9IHN1cGVyLmFkYXB0KG9iamVjdCwgdHlwZSk7CisJCQlpZiAoISh0eXBlIGluc3RhbmNlb2YgQ2xhc3M8Pz4pIHx8ICgoKENsYXNzPD8+KXR5cGUpLmlzSW5zdGFuY2UoYWRhcHRlcikpKSB7CisJCQkJcmV0dXJuIGFkYXB0ZXI7CisJCQl9CisJCX0KKworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFkZHMgYSBsaXN0ZW5lci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBhZGRMaXN0ZW5lcihJTm90aWZ5Q2hhbmdlZExpc3RlbmVyIG5vdGlmeUNoYW5nZWRMaXN0ZW5lcikgeworCQljaGFuZ2VOb3RpZmllci5hZGRMaXN0ZW5lcihub3RpZnlDaGFuZ2VkTGlzdGVuZXIpOworCX0KKworCS8qKgorCSAqIFRoaXMgcmVtb3ZlcyBhIGxpc3RlbmVyLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIHJlbW92ZUxpc3RlbmVyKElOb3RpZnlDaGFuZ2VkTGlzdGVuZXIgbm90aWZ5Q2hhbmdlZExpc3RlbmVyKSB7CisJCWNoYW5nZU5vdGlmaWVyLnJlbW92ZUxpc3RlbmVyKG5vdGlmeUNoYW5nZWRMaXN0ZW5lcik7CisJfQorCisJLyoqCisJICogVGhpcyBkZWxlZ2F0ZXMgdG8ge0BsaW5rICNjaGFuZ2VOb3RpZmllcn0gYW5kIHRvIHtAbGluayAjcGFyZW50QWRhcHRlckZhY3Rvcnl9LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIGZpcmVOb3RpZnlDaGFuZ2VkKE5vdGlmaWNhdGlvbiBub3RpZmljYXRpb24pIHsKKwkJY2hhbmdlTm90aWZpZXIuZmlyZU5vdGlmeUNoYW5nZWQobm90aWZpY2F0aW9uKTsKKworCQlpZiAocGFyZW50QWRhcHRlckZhY3RvcnkgIT0gbnVsbCkgeworCQkJcGFyZW50QWRhcHRlckZhY3RvcnkuZmlyZU5vdGlmeUNoYW5nZWQobm90aWZpY2F0aW9uKTsKKwkJfQorCX0KKworCS8qKgorCSAqIFRoaXMgZGlzcG9zZXMgYWxsIG9mIHRoZSBpdGVtIHByb3ZpZGVycyBjcmVhdGVkIGJ5IHRoaXMgZmFjdG9yeS4gCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgZGlzcG9zZSgpIHsKKwkJaWYgKHJlYWxUaW1lU2VxdWVuY2VySXRlbVByb3ZpZGVyICE9IG51bGwpIHJlYWxUaW1lU2VxdWVuY2VySXRlbVByb3ZpZGVyLmRpc3Bvc2UoKTsKKwkJaWYgKHNlcXVlbnRpYWxTZXF1ZW5jZXJJdGVtUHJvdmlkZXIgIT0gbnVsbCkgc2VxdWVudGlhbFNlcXVlbmNlckl0ZW1Qcm92aWRlci5kaXNwb3NlKCk7CisJfQorCit9CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3NlcXVlbmNlci9wcm92aWRlci9TZXF1ZW50aWFsU2VxdWVuY2VySXRlbVByb3ZpZGVyLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3NlcXVlbmNlci9wcm92aWRlci9TZXF1ZW50aWFsU2VxdWVuY2VySXRlbVByb3ZpZGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTUzNjNkMwotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvc2VxdWVuY2VyL3Byb3ZpZGVyL1NlcXVlbnRpYWxTZXF1ZW5jZXJJdGVtUHJvdmlkZXIuamF2YQpAQCAtMCwwICsxLDE2MyBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2VxdWVuY2VyLnByb3ZpZGVyOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOworaW1wb3J0IGphdmEudXRpbC5MaXN0OworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5VUkk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JRWRpdGluZ0RvbWFpbkl0ZW1Qcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbUxhYmVsUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1Qcm9wZXJ0eVNvdXJjZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JU3RydWN0dXJlZEl0ZW1Db250ZW50UHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVRyZWVJdGVtQ29udGVudFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuVmlld2VyTm90aWZpY2F0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zZXF1ZW5jZXIuU2VxdWVuY2VyUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2VxdWVuY2VyLlNlcXVlbnRpYWxTZXF1ZW5jZXI7CisKKy8qKgorICogVGhpcyBpcyB0aGUgaXRlbSBwcm92aWRlciBhZGFwdGVyIGZvciBhIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2VxdWVuY2VyLlNlcXVlbnRpYWxTZXF1ZW5jZXJ9IG9iamVjdC4KKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIFNlcXVlbnRpYWxTZXF1ZW5jZXJJdGVtUHJvdmlkZXIKKwlleHRlbmRzIFNlcXVlbmNlckl0ZW1Qcm92aWRlcgorCWltcGxlbWVudHMJCisJCUlFZGl0aW5nRG9tYWluSXRlbVByb3ZpZGVyLAkKKwkJSVN0cnVjdHVyZWRJdGVtQ29udGVudFByb3ZpZGVyLAkKKwkJSVRyZWVJdGVtQ29udGVudFByb3ZpZGVyLAkKKwkJSUl0ZW1MYWJlbFByb3ZpZGVyLAkKKwkJSUl0ZW1Qcm9wZXJ0eVNvdXJjZSB7CisJLyoqCisJICogVGhpcyBjb25zdHJ1Y3RzIGFuIGluc3RhbmNlIGZyb20gYSBmYWN0b3J5IGFuZCBhIG5vdGlmaWVyLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBTZXF1ZW50aWFsU2VxdWVuY2VySXRlbVByb3ZpZGVyKEFkYXB0ZXJGYWN0b3J5IGFkYXB0ZXJGYWN0b3J5KSB7CisJCXN1cGVyKGFkYXB0ZXJGYWN0b3J5KTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgdGhlIHByb3BlcnR5IGRlc2NyaXB0b3JzIGZvciB0aGUgYWRhcHRlZCBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgTGlzdDxJSXRlbVByb3BlcnR5RGVzY3JpcHRvcj4gZ2V0UHJvcGVydHlEZXNjcmlwdG9ycyhPYmplY3Qgb2JqZWN0KSB7CisJCWlmIChpdGVtUHJvcGVydHlEZXNjcmlwdG9ycyA9PSBudWxsKSB7CisJCQlzdXBlci5nZXRQcm9wZXJ0eURlc2NyaXB0b3JzKG9iamVjdCk7CisKKwkJCWFkZFRpbWVJbmNyZW1lbnRQcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0KTsKKwkJfQorCQlyZXR1cm4gaXRlbVByb3BlcnR5RGVzY3JpcHRvcnM7CisJfQorCisJLyoqCisJICogVGhpcyBhZGRzIGEgcHJvcGVydHkgZGVzY3JpcHRvciBmb3IgdGhlIFRpbWUgSW5jcmVtZW50IGZlYXR1cmUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgYWRkVGltZUluY3JlbWVudFByb3BlcnR5RGVzY3JpcHRvcihPYmplY3Qgb2JqZWN0KSB7CisJCWl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzLmFkZAorCQkJKGNyZWF0ZUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IKKwkJCQkoKChDb21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5KWFkYXB0ZXJGYWN0b3J5KS5nZXRSb290QWRhcHRlckZhY3RvcnkoKSwKKwkJCQkgZ2V0UmVzb3VyY2VMb2NhdG9yKCksCisJCQkJIGdldFN0cmluZygiX1VJX1NlcXVlbnRpYWxTZXF1ZW5jZXJfdGltZUluY3JlbWVudF9mZWF0dXJlIiksIC8vJE5PTi1OTFMtMSQKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfUHJvcGVydHlEZXNjcmlwdG9yX2Rlc2NyaXB0aW9uIiwgIl9VSV9TZXF1ZW50aWFsU2VxdWVuY2VyX3RpbWVJbmNyZW1lbnRfZmVhdHVyZSIsICJfVUlfU2VxdWVudGlhbFNlcXVlbmNlcl90eXBlIiksIC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJCAvLyROT04tTkxTLTMkCisJCQkJIFNlcXVlbmNlclBhY2thZ2UuTGl0ZXJhbHMuU0VRVUVOVElBTF9TRVFVRU5DRVJfX1RJTUVfSU5DUkVNRU5ULAorCQkJCSB0cnVlLAorCQkJCSBmYWxzZSwKKwkJCQkgZmFsc2UsCisJCQkJIEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IuSU5URUdSQUxfVkFMVUVfSU1BR0UsCisJCQkJIG51bGwsCisJCQkJIG51bGwpKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgU2VxdWVuY2VyLmdpZi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIE9iamVjdCBnZXRJbWFnZShPYmplY3Qgb2JqZWN0KSB7CisJCXJldHVybiBvdmVybGF5SW1hZ2Uob2JqZWN0LCBnZXRSZXNvdXJjZUxvY2F0b3IoKS5nZXRJbWFnZSgiZnVsbC9jdXN0b21vYmoxNi9TZXF1ZW5jZXIiKSk7CisJfQorCQorCS8qKgorCSAqIFRoaXMgcmV0dXJucyB0aGUgbGFiZWwgdGV4dCBmb3IgdGhlIGFkYXB0ZWQgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBTdHJpbmcgZ2V0VGV4dChPYmplY3Qgb2JqZWN0KSB7CisJCXJldHVybiBzdXBlci5nZXRUZXh0KG9iamVjdCk7CisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIHRoZSBsYWJlbCB0ZXh0IGZvciB0aGUgYWRhcHRlZCBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgU3RyaW5nIGdldFRleHRHZW4oT2JqZWN0IG9iamVjdCkgeworCQlVUkkgbGFiZWxWYWx1ZSA9ICgoU2VxdWVudGlhbFNlcXVlbmNlcilvYmplY3QpLmdldFVSSSgpOworCQlTdHJpbmcgbGFiZWwgPSBsYWJlbFZhbHVlID09IG51bGwgPyBudWxsIDogbGFiZWxWYWx1ZS50b1N0cmluZygpOworCQlyZXR1cm4gbGFiZWwgPT0gbnVsbCB8fCBsYWJlbC5sZW5ndGgoKSA9PSAwID8KKwkJCWdldFN0cmluZygiX1VJX1NlcXVlbnRpYWxTZXF1ZW5jZXJfdHlwZSIpIDogLy8kTk9OLU5MUy0xJAorCQkJZ2V0U3RyaW5nKCJfVUlfU2VxdWVudGlhbFNlcXVlbmNlcl90eXBlIikgKyAiICIgKyBsYWJlbDsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCisJfQorCisJCisJLyoqCisJICogVGhpcyBoYW5kbGVzIG1vZGVsIG5vdGlmaWNhdGlvbnMgYnkgY2FsbGluZyB7QGxpbmsgI3VwZGF0ZUNoaWxkcmVufSB0byB1cGRhdGUgYW55IGNhY2hlZAorCSAqIGNoaWxkcmVuIGFuZCBieSBjcmVhdGluZyBhIHZpZXdlciBub3RpZmljYXRpb24sIHdoaWNoIGl0IHBhc3NlcyB0byB7QGxpbmsgI2ZpcmVOb3RpZnlDaGFuZ2VkfS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBub3RpZnlDaGFuZ2VkKE5vdGlmaWNhdGlvbiBub3RpZmljYXRpb24pIHsKKwkJdXBkYXRlQ2hpbGRyZW4obm90aWZpY2F0aW9uKTsKKworCQlzd2l0Y2ggKG5vdGlmaWNhdGlvbi5nZXRGZWF0dXJlSUQoU2VxdWVudGlhbFNlcXVlbmNlci5jbGFzcykpIHsKKwkJCWNhc2UgU2VxdWVuY2VyUGFja2FnZS5TRVFVRU5USUFMX1NFUVVFTkNFUl9fVElNRV9JTkNSRU1FTlQ6CisJCQkJZmlyZU5vdGlmeUNoYW5nZWQobmV3IFZpZXdlck5vdGlmaWNhdGlvbihub3RpZmljYXRpb24sIG5vdGlmaWNhdGlvbi5nZXROb3RpZmllcigpLCBmYWxzZSwgdHJ1ZSkpOworCQkJCXJldHVybjsKKwkJfQorCQlzdXBlci5ub3RpZnlDaGFuZ2VkKG5vdGlmaWNhdGlvbik7CisJfQorCisJLyoqCisJICogVGhpcyBhZGRzIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuZWRpdC5jb21tYW5kLkNvbW1hbmRQYXJhbWV0ZXJ9cyBkZXNjcmliaW5nIHRoZSBjaGlsZHJlbgorCSAqIHRoYXQgY2FuIGJlIGNyZWF0ZWQgdW5kZXIgdGhpcyBvYmplY3QuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgY29sbGVjdE5ld0NoaWxkRGVzY3JpcHRvcnMoQ29sbGVjdGlvbjxPYmplY3Q+IG5ld0NoaWxkRGVzY3JpcHRvcnMsIE9iamVjdCBvYmplY3QpIHsKKwkJc3VwZXIuY29sbGVjdE5ld0NoaWxkRGVzY3JpcHRvcnMobmV3Q2hpbGREZXNjcmlwdG9ycywgb2JqZWN0KTsKKwl9CisKK30KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvc2VxdWVuY2VyL3V0aWwvU2VxdWVuY2VyQWRhcHRlckZhY3RvcnkuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvc2VxdWVuY2VyL3V0aWwvU2VxdWVuY2VyQWRhcHRlckZhY3RvcnkuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZGRmZWI0Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9zZXF1ZW5jZXIvdXRpbC9TZXF1ZW5jZXJBZGFwdGVyRmFjdG9yeS5qYXZhCkBAIC0wLDAgKzEsMjIxIEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zZXF1ZW5jZXIudXRpbDsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNywgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5BZGFwdGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LmltcGwuQWRhcHRlckZhY3RvcnlJbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uSWRlbnRpZmlhYmxlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uU2FuaXR5Q2hlY2tlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2VxdWVuY2VyLlJlYWxUaW1lU2VxdWVuY2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zZXF1ZW5jZXIuU2VxdWVuY2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zZXF1ZW5jZXIuU2VxdWVuY2VyUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2VxdWVuY2VyLlNlcXVlbnRpYWxTZXF1ZW5jZXI7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIFRoZSA8Yj5BZGFwdGVyIEZhY3Rvcnk8L2I+IGZvciB0aGUgbW9kZWwuCisgKiBJdCBwcm92aWRlcyBhbiBhZGFwdGVyIDxjb2RlPmNyZWF0ZVhYWDwvY29kZT4gbWV0aG9kIGZvciBlYWNoIGNsYXNzIG9mIHRoZSBtb2RlbC4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2VxdWVuY2VyLlNlcXVlbmNlclBhY2thZ2UKKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIFNlcXVlbmNlckFkYXB0ZXJGYWN0b3J5IGV4dGVuZHMgQWRhcHRlckZhY3RvcnlJbXBsIHsKKwkvKioKKwkgKiBUaGUgY2FjaGVkIG1vZGVsIHBhY2thZ2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHN0YXRpYyBTZXF1ZW5jZXJQYWNrYWdlIG1vZGVsUGFja2FnZTsKKworCS8qKgorCSAqIENyZWF0ZXMgYW4gaW5zdGFuY2Ugb2YgdGhlIGFkYXB0ZXIgZmFjdG9yeS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgU2VxdWVuY2VyQWRhcHRlckZhY3RvcnkoKSB7CisJCWlmIChtb2RlbFBhY2thZ2UgPT0gbnVsbCkgeworCQkJbW9kZWxQYWNrYWdlID0gU2VxdWVuY2VyUGFja2FnZS5lSU5TVEFOQ0U7CisJCX0KKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHdoZXRoZXIgdGhpcyBmYWN0b3J5IGlzIGFwcGxpY2FibGUgZm9yIHRoZSB0eXBlIG9mIHRoZSBvYmplY3QuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgPGNvZGU+dHJ1ZTwvY29kZT4gaWYgdGhlIG9iamVjdCBpcyBlaXRoZXIgdGhlIG1vZGVsJ3MgcGFja2FnZSBvciBpcyBhbiBpbnN0YW5jZSBvYmplY3Qgb2YgdGhlIG1vZGVsLgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gd2hldGhlciB0aGlzIGZhY3RvcnkgaXMgYXBwbGljYWJsZSBmb3IgdGhlIHR5cGUgb2YgdGhlIG9iamVjdC4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIGJvb2xlYW4gaXNGYWN0b3J5Rm9yVHlwZShPYmplY3Qgb2JqZWN0KSB7CisJCWlmIChvYmplY3QgPT0gbW9kZWxQYWNrYWdlKSB7CisJCQlyZXR1cm4gdHJ1ZTsKKwkJfQorCQlpZiAob2JqZWN0IGluc3RhbmNlb2YgRU9iamVjdCkgeworCQkJcmV0dXJuICgoRU9iamVjdClvYmplY3QpLmVDbGFzcygpLmdldEVQYWNrYWdlKCkgPT0gbW9kZWxQYWNrYWdlOworCQl9CisJCXJldHVybiBmYWxzZTsKKwl9CisKKwkvKioKKwkgKiBUaGUgc3dpdGNoIHRoYXQgZGVsZWdhdGVzIHRvIHRoZSA8Y29kZT5jcmVhdGVYWFg8L2NvZGU+IG1ldGhvZHMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIFNlcXVlbmNlclN3aXRjaDxBZGFwdGVyPiBtb2RlbFN3aXRjaCA9CisJCW5ldyBTZXF1ZW5jZXJTd2l0Y2g8QWRhcHRlcj4oKSB7CisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyBBZGFwdGVyIGNhc2VSZWFsVGltZVNlcXVlbmNlcihSZWFsVGltZVNlcXVlbmNlciBvYmplY3QpIHsKKwkJCQlyZXR1cm4gY3JlYXRlUmVhbFRpbWVTZXF1ZW5jZXJBZGFwdGVyKCk7CisJCQl9CisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyBBZGFwdGVyIGNhc2VTZXF1ZW5jZXIoU2VxdWVuY2VyIG9iamVjdCkgeworCQkJCXJldHVybiBjcmVhdGVTZXF1ZW5jZXJBZGFwdGVyKCk7CisJCQl9CisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyBBZGFwdGVyIGNhc2VTZXF1ZW50aWFsU2VxdWVuY2VyKFNlcXVlbnRpYWxTZXF1ZW5jZXIgb2JqZWN0KSB7CisJCQkJcmV0dXJuIGNyZWF0ZVNlcXVlbnRpYWxTZXF1ZW5jZXJBZGFwdGVyKCk7CisJCQl9CisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyA8VD4gQWRhcHRlciBjYXNlQ29tcGFyYWJsZShDb21wYXJhYmxlPFQ+IG9iamVjdCkgeworCQkJCXJldHVybiBjcmVhdGVDb21wYXJhYmxlQWRhcHRlcigpOworCQkJfQorCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgQWRhcHRlciBjYXNlU2FuaXR5Q2hlY2tlcihTYW5pdHlDaGVja2VyIG9iamVjdCkgeworCQkJCXJldHVybiBjcmVhdGVTYW5pdHlDaGVja2VyQWRhcHRlcigpOworCQkJfQorCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgQWRhcHRlciBjYXNlSWRlbnRpZmlhYmxlKElkZW50aWZpYWJsZSBvYmplY3QpIHsKKwkJCQlyZXR1cm4gY3JlYXRlSWRlbnRpZmlhYmxlQWRhcHRlcigpOworCQkJfQorCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgQWRhcHRlciBkZWZhdWx0Q2FzZShFT2JqZWN0IG9iamVjdCkgeworCQkJCXJldHVybiBjcmVhdGVFT2JqZWN0QWRhcHRlcigpOworCQkJfQorCQl9OworCisJLyoqCisJICogQ3JlYXRlcyBhbiBhZGFwdGVyIGZvciB0aGUgPGNvZGU+dGFyZ2V0PC9jb2RlPi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSB0YXJnZXQgdGhlIG9iamVjdCB0byBhZGFwdC4KKwkgKiBAcmV0dXJuIHRoZSBhZGFwdGVyIGZvciB0aGUgPGNvZGU+dGFyZ2V0PC9jb2RlPi4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlQWRhcHRlcihOb3RpZmllciB0YXJnZXQpIHsKKwkJcmV0dXJuIG1vZGVsU3dpdGNoLmRvU3dpdGNoKChFT2JqZWN0KXRhcmdldCk7CisJfQorCisKKwkvKioKKwkgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zZXF1ZW5jZXIuUmVhbFRpbWVTZXF1ZW5jZXIgPGVtPlJlYWwgVGltZSBTZXF1ZW5jZXI8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOworCSAqIGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZSB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5LgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNlcXVlbmNlci5SZWFsVGltZVNlcXVlbmNlcgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVSZWFsVGltZVNlcXVlbmNlckFkYXB0ZXIoKSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNlcXVlbmNlci5TZXF1ZW5jZXIgPGVtPlNlcXVlbmNlcjwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7CisJICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2VxdWVuY2VyLlNlcXVlbmNlcgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVTZXF1ZW5jZXJBZGFwdGVyKCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zZXF1ZW5jZXIuU2VxdWVudGlhbFNlcXVlbmNlciA8ZW0+U2VxdWVudGlhbCBTZXF1ZW5jZXI8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOworCSAqIGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZSB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5LgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNlcXVlbmNlci5TZXF1ZW50aWFsU2VxdWVuY2VyCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZVNlcXVlbnRpYWxTZXF1ZW5jZXJBZGFwdGVyKCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIGphdmEubGFuZy5Db21wYXJhYmxlIDxlbT5Db21wYXJhYmxlPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsKKwkgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KKwkgKiBAc2VlIGphdmEubGFuZy5Db21wYXJhYmxlCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZUNvbXBhcmFibGVBZGFwdGVyKCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uU2FuaXR5Q2hlY2tlciA8ZW0+U2FuaXR5IENoZWNrZXI8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOworCSAqIGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZSB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5LgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5TYW5pdHlDaGVja2VyCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZVNhbml0eUNoZWNrZXJBZGFwdGVyKCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uSWRlbnRpZmlhYmxlIDxlbT5JZGVudGlmaWFibGU8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOworCSAqIGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZSB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5LgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5JZGVudGlmaWFibGUKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlSWRlbnRpZmlhYmxlQWRhcHRlcigpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciB0aGUgZGVmYXVsdCBjYXNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbC4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlRU9iamVjdEFkYXB0ZXIoKSB7CisJCXJldHVybiBudWxsOworCX0KKworfSAvL1NlcXVlbmNlckFkYXB0ZXJGYWN0b3J5CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3NlcXVlbmNlci91dGlsL1NlcXVlbmNlclN3aXRjaC5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9zZXF1ZW5jZXIvdXRpbC9TZXF1ZW5jZXJTd2l0Y2guamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZTMzZGU1Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9zZXF1ZW5jZXIvdXRpbC9TZXF1ZW5jZXJTd2l0Y2guamF2YQpAQCAtMCwwICsxLDIzOCBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2VxdWVuY2VyLnV0aWw7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDcsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uSWRlbnRpZmlhYmxlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uU2FuaXR5Q2hlY2tlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2VxdWVuY2VyLlJlYWxUaW1lU2VxdWVuY2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zZXF1ZW5jZXIuU2VxdWVuY2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zZXF1ZW5jZXIuU2VxdWVuY2VyUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2VxdWVuY2VyLlNlcXVlbnRpYWxTZXF1ZW5jZXI7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIFRoZSA8Yj5Td2l0Y2g8L2I+IGZvciB0aGUgbW9kZWwncyBpbmhlcml0YW5jZSBoaWVyYXJjaHkuCisgKiBJdCBzdXBwb3J0cyB0aGUgY2FsbCB7QGxpbmsgI2RvU3dpdGNoKEVPYmplY3QpIGRvU3dpdGNoKG9iamVjdCl9CisgKiB0byBpbnZva2UgdGhlIDxjb2RlPmNhc2VYWFg8L2NvZGU+IG1ldGhvZCBmb3IgZWFjaCBjbGFzcyBvZiB0aGUgbW9kZWwsCisgKiBzdGFydGluZyB3aXRoIHRoZSBhY3R1YWwgY2xhc3Mgb2YgdGhlIG9iamVjdAorICogYW5kIHByb2NlZWRpbmcgdXAgdGhlIGluaGVyaXRhbmNlIGhpZXJhcmNoeQorICogdW50aWwgYSBub24tbnVsbCByZXN1bHQgaXMgcmV0dXJuZWQsCisgKiB3aGljaCBpcyB0aGUgcmVzdWx0IG9mIHRoZSBzd2l0Y2guCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNlcXVlbmNlci5TZXF1ZW5jZXJQYWNrYWdlCisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBTZXF1ZW5jZXJTd2l0Y2g8VDE+IHsKKwkvKioKKwkgKiBUaGUgY2FjaGVkIG1vZGVsIHBhY2thZ2UKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgc3RhdGljIFNlcXVlbmNlclBhY2thZ2UgbW9kZWxQYWNrYWdlOworCisJLyoqCisJICogQ3JlYXRlcyBhbiBpbnN0YW5jZSBvZiB0aGUgc3dpdGNoLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBTZXF1ZW5jZXJTd2l0Y2goKSB7CisJCWlmIChtb2RlbFBhY2thZ2UgPT0gbnVsbCkgeworCQkJbW9kZWxQYWNrYWdlID0gU2VxdWVuY2VyUGFja2FnZS5lSU5TVEFOQ0U7CisJCX0KKwl9CisKKwkvKioKKwkgKiBDYWxscyA8Y29kZT5jYXNlWFhYPC9jb2RlPiBmb3IgZWFjaCBjbGFzcyBvZiB0aGUgbW9kZWwgdW50aWwgb25lIHJldHVybnMgYSBub24gbnVsbCByZXN1bHQ7IGl0IHlpZWxkcyB0aGF0IHJlc3VsdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIGZpcnN0IG5vbi1udWxsIHJlc3VsdCByZXR1cm5lZCBieSBhIDxjb2RlPmNhc2VYWFg8L2NvZGU+IGNhbGwuCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBUMSBkb1N3aXRjaChFT2JqZWN0IHRoZUVPYmplY3QpIHsKKwkJcmV0dXJuIGRvU3dpdGNoKHRoZUVPYmplY3QuZUNsYXNzKCksIHRoZUVPYmplY3QpOworCX0KKworCS8qKgorCSAqIENhbGxzIDxjb2RlPmNhc2VYWFg8L2NvZGU+IGZvciBlYWNoIGNsYXNzIG9mIHRoZSBtb2RlbCB1bnRpbCBvbmUgcmV0dXJucyBhIG5vbiBudWxsIHJlc3VsdDsgaXQgeWllbGRzIHRoYXQgcmVzdWx0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgZmlyc3Qgbm9uLW51bGwgcmVzdWx0IHJldHVybmVkIGJ5IGEgPGNvZGU+Y2FzZVhYWDwvY29kZT4gY2FsbC4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIFQxIGRvU3dpdGNoKEVDbGFzcyB0aGVFQ2xhc3MsIEVPYmplY3QgdGhlRU9iamVjdCkgeworCQlpZiAodGhlRUNsYXNzLmVDb250YWluZXIoKSA9PSBtb2RlbFBhY2thZ2UpIHsKKwkJCXJldHVybiBkb1N3aXRjaCh0aGVFQ2xhc3MuZ2V0Q2xhc3NpZmllcklEKCksIHRoZUVPYmplY3QpOworCQl9CisJCWVsc2UgeworCQkJTGlzdDxFQ2xhc3M+IGVTdXBlclR5cGVzID0gdGhlRUNsYXNzLmdldEVTdXBlclR5cGVzKCk7CisJCQlyZXR1cm4KKwkJCQllU3VwZXJUeXBlcy5pc0VtcHR5KCkgPworCQkJCQlkZWZhdWx0Q2FzZSh0aGVFT2JqZWN0KSA6CisJCQkJCWRvU3dpdGNoKGVTdXBlclR5cGVzLmdldCgwKSwgdGhlRU9iamVjdCk7CisJCX0KKwl9CisKKwkvKioKKwkgKiBDYWxscyA8Y29kZT5jYXNlWFhYPC9jb2RlPiBmb3IgZWFjaCBjbGFzcyBvZiB0aGUgbW9kZWwgdW50aWwgb25lIHJldHVybnMgYSBub24gbnVsbCByZXN1bHQ7IGl0IHlpZWxkcyB0aGF0IHJlc3VsdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIGZpcnN0IG5vbi1udWxsIHJlc3VsdCByZXR1cm5lZCBieSBhIDxjb2RlPmNhc2VYWFg8L2NvZGU+IGNhbGwuCisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBUMSBkb1N3aXRjaChpbnQgY2xhc3NpZmllcklELCBFT2JqZWN0IHRoZUVPYmplY3QpIHsKKwkJc3dpdGNoIChjbGFzc2lmaWVySUQpIHsKKwkJCWNhc2UgU2VxdWVuY2VyUGFja2FnZS5SRUFMX1RJTUVfU0VRVUVOQ0VSOiB7CisJCQkJUmVhbFRpbWVTZXF1ZW5jZXIgcmVhbFRpbWVTZXF1ZW5jZXIgPSAoUmVhbFRpbWVTZXF1ZW5jZXIpdGhlRU9iamVjdDsKKwkJCQlUMSByZXN1bHQgPSBjYXNlUmVhbFRpbWVTZXF1ZW5jZXIocmVhbFRpbWVTZXF1ZW5jZXIpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZVNlcXVlbnRpYWxTZXF1ZW5jZXIocmVhbFRpbWVTZXF1ZW5jZXIpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZVNlcXVlbmNlcihyZWFsVGltZVNlcXVlbmNlcik7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlSWRlbnRpZmlhYmxlKHJlYWxUaW1lU2VxdWVuY2VyKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VDb21wYXJhYmxlKHJlYWxUaW1lU2VxdWVuY2VyKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VTYW5pdHlDaGVja2VyKHJlYWxUaW1lU2VxdWVuY2VyKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGRlZmF1bHRDYXNlKHRoZUVPYmplY3QpOworCQkJCXJldHVybiByZXN1bHQ7CisJCQl9CisJCQljYXNlIFNlcXVlbmNlclBhY2thZ2UuU0VRVUVOQ0VSOiB7CisJCQkJU2VxdWVuY2VyIHNlcXVlbmNlciA9IChTZXF1ZW5jZXIpdGhlRU9iamVjdDsKKwkJCQlUMSByZXN1bHQgPSBjYXNlU2VxdWVuY2VyKHNlcXVlbmNlcik7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlSWRlbnRpZmlhYmxlKHNlcXVlbmNlcik7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlQ29tcGFyYWJsZShzZXF1ZW5jZXIpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZVNhbml0eUNoZWNrZXIoc2VxdWVuY2VyKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGRlZmF1bHRDYXNlKHRoZUVPYmplY3QpOworCQkJCXJldHVybiByZXN1bHQ7CisJCQl9CisJCQljYXNlIFNlcXVlbmNlclBhY2thZ2UuU0VRVUVOVElBTF9TRVFVRU5DRVI6IHsKKwkJCQlTZXF1ZW50aWFsU2VxdWVuY2VyIHNlcXVlbnRpYWxTZXF1ZW5jZXIgPSAoU2VxdWVudGlhbFNlcXVlbmNlcil0aGVFT2JqZWN0OworCQkJCVQxIHJlc3VsdCA9IGNhc2VTZXF1ZW50aWFsU2VxdWVuY2VyKHNlcXVlbnRpYWxTZXF1ZW5jZXIpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZVNlcXVlbmNlcihzZXF1ZW50aWFsU2VxdWVuY2VyKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VJZGVudGlmaWFibGUoc2VxdWVudGlhbFNlcXVlbmNlcik7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlQ29tcGFyYWJsZShzZXF1ZW50aWFsU2VxdWVuY2VyKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VTYW5pdHlDaGVja2VyKHNlcXVlbnRpYWxTZXF1ZW5jZXIpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gZGVmYXVsdENhc2UodGhlRU9iamVjdCk7CisJCQkJcmV0dXJuIHJlc3VsdDsKKwkJCX0KKwkJCWRlZmF1bHQ6IHJldHVybiBkZWZhdWx0Q2FzZSh0aGVFT2JqZWN0KTsKKwkJfQorCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPlJlYWwgVGltZSBTZXF1ZW5jZXI8L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsKKwkgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KKwkgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5SZWFsIFRpbWUgU2VxdWVuY2VyPC9lbT4nLgorCSAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVDEgY2FzZVJlYWxUaW1lU2VxdWVuY2VyKFJlYWxUaW1lU2VxdWVuY2VyIG9iamVjdCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5TZXF1ZW5jZXI8L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsKKwkgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KKwkgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5TZXF1ZW5jZXI8L2VtPicuCisJICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBUMSBjYXNlU2VxdWVuY2VyKFNlcXVlbmNlciBvYmplY3QpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+U2VxdWVudGlhbCBTZXF1ZW5jZXI8L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsKKwkgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KKwkgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5TZXF1ZW50aWFsIFNlcXVlbmNlcjwvZW0+Jy4KKwkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFQxIGNhc2VTZXF1ZW50aWFsU2VxdWVuY2VyKFNlcXVlbnRpYWxTZXF1ZW5jZXIgb2JqZWN0KSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkNvbXBhcmFibGU8L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsKKwkgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KKwkgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5Db21wYXJhYmxlPC9lbT4nLgorCSAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgPFQ+IFQxIGNhc2VDb21wYXJhYmxlKENvbXBhcmFibGU8VD4gb2JqZWN0KSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPlNhbml0eSBDaGVja2VyPC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7CisJICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCisJICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+U2FuaXR5IENoZWNrZXI8L2VtPicuCisJICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBUMSBjYXNlU2FuaXR5Q2hlY2tlcihTYW5pdHlDaGVja2VyIG9iamVjdCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5JZGVudGlmaWFibGU8L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsKKwkgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KKwkgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5JZGVudGlmaWFibGU8L2VtPicuCisJICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBUMSBjYXNlSWRlbnRpZmlhYmxlKElkZW50aWZpYWJsZSBvYmplY3QpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+RU9iamVjdDwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOworCSAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLCBidXQgdGhpcyBpcyB0aGUgbGFzdCBjYXNlIGFueXdheS4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KKwkgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5FT2JqZWN0PC9lbT4nLgorCSAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVDEgZGVmYXVsdENhc2UoRU9iamVjdCBvYmplY3QpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCit9IC8vU2VxdWVuY2VyU3dpdGNoCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3NvbHZlci9Tb2x2ZXIuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvc29sdmVyL1NvbHZlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZiMzUyNDQKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3NvbHZlci9Tb2x2ZXIuamF2YQpAQCAtMCwwICsxLDEzOCBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc29sdmVyOw0KKw0KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorICogQ29weXJpZ2h0IChjKSAyMDA5IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLg0KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMNCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjANCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdA0KKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sDQorICoNCisgKiBDb250cmlidXRvcnM6DQorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbg0KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KKw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuRUxpc3Q7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uSWRlbnRpZmlhYmxlOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguR3JhcGhQYXJ0aXRpb25lcjsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLkRlY29yYXRvcjsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLlNURU1UaW1lOw0KKw0KKy8qKg0KKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorICogQSByZXByZXNlbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+U29sdmVyPC9iPjwvZW0+Jy4NCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisgKg0KKyAqIDxwPg0KKyAqIFRoZSBmb2xsb3dpbmcgZmVhdHVyZXMgYXJlIHN1cHBvcnRlZDoNCisgKiA8dWw+DQorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zb2x2ZXIuU29sdmVyI2dldERlY29yYXRvcnMgPGVtPkRlY29yYXRvcnM8L2VtPn08L2xpPg0KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc29sdmVyLlNvbHZlciNpc0luaXRpYWxpemVkIDxlbT5Jbml0aWFsaXplZDwvZW0+fTwvbGk+DQorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zb2x2ZXIuU29sdmVyI2dldFBhcnRpdGlvbmVyIDxlbT5QYXJ0aXRpb25lcjwvZW0+fTwvbGk+DQorICogPC91bD4NCisgKiA8L3A+DQorICoNCisgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zb2x2ZXIuU29sdmVyUGFja2FnZSNnZXRTb2x2ZXIoKQ0KKyAqIEBtb2RlbA0KKyAqIEBnZW5lcmF0ZWQNCisgKi8NCitwdWJsaWMgaW50ZXJmYWNlIFNvbHZlciBleHRlbmRzIElkZW50aWZpYWJsZSB7DQorCQ0KKwlwdWJsaWMgZmluYWwgc3RhdGljIFN0cmluZyBVUklfVFlQRSA9ICJTb2x2ZXIiOw0KKw0KKwkvKioNCisJICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+RGVjb3JhdG9yczwvYj48L2VtPicgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8cD4NCisJICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+RGVjb3JhdG9yczwvZW0+JyByZWZlcmVuY2UgaXNuJ3QgY2xlYXIsDQorCSAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4NCisJICogPC9wPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+RGVjb3JhdG9yczwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIEBzZWUgI3NldERlY29yYXRvcnMoRUxpc3QpDQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNvbHZlci5Tb2x2ZXJQYWNrYWdlI2dldFNvbHZlcl9EZWNvcmF0b3JzKCkNCisJICogQG1vZGVsIG1hbnk9ImZhbHNlIiB0cmFuc2llbnQ9InRydWUiDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCUVMaXN0PERlY29yYXRvcj4gZ2V0RGVjb3JhdG9ycygpOw0KKw0KKwkvKioNCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNvbHZlci5Tb2x2ZXIjZ2V0RGVjb3JhdG9ycyA8ZW0+RGVjb3JhdG9yczwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+RGVjb3JhdG9yczwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIEBzZWUgI2dldERlY29yYXRvcnMoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwl2b2lkIHNldERlY29yYXRvcnMoRUxpc3Q8RGVjb3JhdG9yPiB2YWx1ZSk7DQorDQorCS8qKg0KKwkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5Jbml0aWFsaXplZDwvYj48L2VtPicgYXR0cmlidXRlLg0KKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyA8Y29kZT4iZmFsc2UiPC9jb2RlPi4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPHA+DQorCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPkluaXRpYWxpemVkPC9lbT4nIGF0dHJpYnV0ZSBpc24ndCBjbGVhciwNCisJICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLg0KKwkgKiA8L3A+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5Jbml0aWFsaXplZDwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIEBzZWUgI3NldEluaXRpYWxpemVkKGJvb2xlYW4pDQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNvbHZlci5Tb2x2ZXJQYWNrYWdlI2dldFNvbHZlcl9Jbml0aWFsaXplZCgpDQorCSAqIEBtb2RlbCBkZWZhdWx0PSJmYWxzZSIgdHJhbnNpZW50PSJ0cnVlIiB2b2xhdGlsZT0idHJ1ZSINCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJYm9vbGVhbiBpc0luaXRpYWxpemVkKCk7DQorDQorCS8qKg0KKwkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc29sdmVyLlNvbHZlciNpc0luaXRpYWxpemVkIDxlbT5Jbml0aWFsaXplZDwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+SW5pdGlhbGl6ZWQ8L2VtPicgYXR0cmlidXRlLg0KKwkgKiBAc2VlICNpc0luaXRpYWxpemVkKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJdm9pZCBzZXRJbml0aWFsaXplZChib29sZWFuIHZhbHVlKTsNCisNCisJLyoqDQorCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPlBhcnRpdGlvbmVyPC9iPjwvZW0+JyByZWZlcmVuY2UuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDxwPg0KKwkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5QYXJ0aXRpb25lcjwvZW0+JyByZWZlcmVuY2UgaXNuJ3QgY2xlYXIsDQorCSAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4NCisJICogPC9wPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+UGFydGl0aW9uZXI8L2VtPicgcmVmZXJlbmNlLg0KKwkgKiBAc2VlICNzZXRQYXJ0aXRpb25lcihHcmFwaFBhcnRpdGlvbmVyKQ0KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zb2x2ZXIuU29sdmVyUGFja2FnZSNnZXRTb2x2ZXJfUGFydGl0aW9uZXIoKQ0KKwkgKiBAbW9kZWwgdHJhbnNpZW50PSJ0cnVlIg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlHcmFwaFBhcnRpdGlvbmVyIGdldFBhcnRpdGlvbmVyKCk7DQorDQorCS8qKg0KKwkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc29sdmVyLlNvbHZlciNnZXRQYXJ0aXRpb25lciA8ZW0+UGFydGl0aW9uZXI8L2VtPn0nIHJlZmVyZW5jZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPlBhcnRpdGlvbmVyPC9lbT4nIHJlZmVyZW5jZS4NCisJICogQHNlZSAjZ2V0UGFydGl0aW9uZXIoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwl2b2lkIHNldFBhcnRpdGlvbmVyKEdyYXBoUGFydGl0aW9uZXIgdmFsdWUpOw0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBtb2RlbA0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlib29sZWFuIHN0ZXAoU1RFTVRpbWUgdGltZSwgbG9uZyB0aW1lRGVsdGEsIGludCBjeWNsZSk7DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQG1vZGVsDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXZvaWQgcmVzZXQoKTsNCisNCisJcHVibGljIHZvaWQgaW5pdGlhbGl6ZShTVEVNVGltZSB0LCBHcmFwaFBhcnRpdGlvbmVyIHApOw0KK30gLy8gU29sdmVyDQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9zb2x2ZXIvU29sdmVyRmFjdG9yeS5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9zb2x2ZXIvU29sdmVyRmFjdG9yeS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY5NDY1ZDQKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3NvbHZlci9Tb2x2ZXJGYWN0b3J5LmphdmEKQEAgLTAsMCArMSw1MSBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc29sdmVyOw0KKw0KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorICogQ29weXJpZ2h0IChjKSAyMDA5IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLg0KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMNCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjANCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdA0KKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sDQorICoNCisgKiBDb250cmlidXRvcnM6DQorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbg0KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KKw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUZhY3Rvcnk7DQorDQorLyoqDQorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisgKiBUaGUgPGI+RmFjdG9yeTwvYj4gZm9yIHRoZSBtb2RlbC4NCisgKiBJdCBwcm92aWRlcyBhIGNyZWF0ZSBtZXRob2QgZm9yIGVhY2ggbm9uLWFic3RyYWN0IGNsYXNzIG9mIHRoZSBtb2RlbC4NCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zb2x2ZXIuU29sdmVyUGFja2FnZQ0KKyAqIEBnZW5lcmF0ZWQNCisgKi8NCitwdWJsaWMgaW50ZXJmYWNlIFNvbHZlckZhY3RvcnkgZXh0ZW5kcyBFRmFjdG9yeSB7DQorCS8qKg0KKwkgKiBUaGUgc2luZ2xldG9uIGluc3RhbmNlIG9mIHRoZSBmYWN0b3J5Lg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJU29sdmVyRmFjdG9yeSBlSU5TVEFOQ0UgPSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc29sdmVyLmltcGwuU29sdmVyRmFjdG9yeUltcGwuaW5pdCgpOw0KKw0KKwkvKioNCisJICogUmV0dXJucyBhIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5Tb2x2ZXI8L2VtPicuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcmV0dXJuIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPlNvbHZlcjwvZW0+Jy4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJU29sdmVyIGNyZWF0ZVNvbHZlcigpOw0KKw0KKwkvKioNCisJICogUmV0dXJucyB0aGUgcGFja2FnZSBzdXBwb3J0ZWQgYnkgdGhpcyBmYWN0b3J5Lg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHJldHVybiB0aGUgcGFja2FnZSBzdXBwb3J0ZWQgYnkgdGhpcyBmYWN0b3J5Lg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlTb2x2ZXJQYWNrYWdlIGdldFNvbHZlclBhY2thZ2UoKTsNCisNCit9IC8vU29sdmVyRmFjdG9yeQ0KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvc29sdmVyL1NvbHZlclBhY2thZ2UuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvc29sdmVyL1NvbHZlclBhY2thZ2UuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNzU5MTQzCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9zb2x2ZXIvU29sdmVyUGFja2FnZS5qYXZhCkBAIC0wLDAgKzEsMjQzIEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zb2x2ZXI7DQorDQorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisgKiBDb3B5cmlnaHQgKGMpIDIwMDkgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuDQorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscw0KKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMA0KKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0DQorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwNCisgKg0KKyAqIENvbnRyaWJ1dG9yczoNCisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uDQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQorDQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQXR0cmlidXRlOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRVBhY2thZ2U7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FUmVmZXJlbmNlOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLkNvbW1vblBhY2thZ2U7DQorDQorLyoqDQorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisgKiBUaGUgPGI+UGFja2FnZTwvYj4gZm9yIHRoZSBtb2RlbC4NCisgKiBJdCBjb250YWlucyBhY2Nlc3NvcnMgZm9yIHRoZSBtZXRhIG9iamVjdHMgdG8gcmVwcmVzZW50DQorICogPHVsPg0KKyAqICAgPGxpPmVhY2ggY2xhc3MsPC9saT4NCisgKiAgIDxsaT5lYWNoIGZlYXR1cmUgb2YgZWFjaCBjbGFzcyw8L2xpPg0KKyAqICAgPGxpPmVhY2ggZW51bSw8L2xpPg0KKyAqICAgPGxpPmFuZCBlYWNoIGRhdGEgdHlwZTwvbGk+DQorICogPC91bD4NCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zb2x2ZXIuU29sdmVyRmFjdG9yeQ0KKyAqIEBtb2RlbCBraW5kPSJwYWNrYWdlIg0KKyAqIEBnZW5lcmF0ZWQNCisgKi8NCitwdWJsaWMgaW50ZXJmYWNlIFNvbHZlclBhY2thZ2UgZXh0ZW5kcyBFUGFja2FnZSB7DQorCS8qKg0KKwkgKiBUaGUgcGFja2FnZSBuYW1lLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJU3RyaW5nIGVOQU1FID0gInNvbHZlciI7IC8vJE5PTi1OTFMtMSQNCisNCisJLyoqDQorCSAqIFRoZSBwYWNrYWdlIG5hbWVzcGFjZSBVUkkuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlTdHJpbmcgZU5TX1VSSSA9ICJodHRwOi8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3NvbHZlciI7IC8vJE5PTi1OTFMtMSQNCisNCisJLyoqDQorCSAqIFRoZSBwYWNrYWdlIG5hbWVzcGFjZSBuYW1lLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJU3RyaW5nIGVOU19QUkVGSVggPSAib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNvbHZlciI7IC8vJE5PTi1OTFMtMSQNCisNCisJLyoqDQorCSAqIFRoZSBzaW5nbGV0b24gaW5zdGFuY2Ugb2YgdGhlIHBhY2thZ2UuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlTb2x2ZXJQYWNrYWdlIGVJTlNUQU5DRSA9IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zb2x2ZXIuaW1wbC5Tb2x2ZXJQYWNrYWdlSW1wbC5pbml0KCk7DQorDQorCS8qKg0KKwkgKiBUaGUgbWV0YSBvYmplY3QgaWQgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zb2x2ZXIuaW1wbC5Tb2x2ZXJJbXBsIDxlbT5Tb2x2ZXI8L2VtPn0nIGNsYXNzLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc29sdmVyLmltcGwuU29sdmVySW1wbA0KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zb2x2ZXIuaW1wbC5Tb2x2ZXJQYWNrYWdlSW1wbCNnZXRTb2x2ZXIoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlpbnQgU09MVkVSID0gMDsNCisNCisJLyoqDQorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5VUkk8L2I+PC9lbT4nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCWludCBTT0xWRVJfX1VSSSA9IENvbW1vblBhY2thZ2UuSURFTlRJRklBQkxFX19VUkk7DQorDQorCS8qKg0KKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VHlwZSBVUkk8L2I+PC9lbT4nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCWludCBTT0xWRVJfX1RZUEVfVVJJID0gQ29tbW9uUGFja2FnZS5JREVOVElGSUFCTEVfX1RZUEVfVVJJOw0KKw0KKwkvKioNCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkR1YmxpbiBDb3JlPC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqIEBvcmRlcmVkDQorCSAqLw0KKwlpbnQgU09MVkVSX19EVUJMSU5fQ09SRSA9IENvbW1vblBhY2thZ2UuSURFTlRJRklBQkxFX19EVUJMSU5fQ09SRTsNCisNCisJLyoqDQorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5EZWNvcmF0b3JzPC9iPjwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqIEBvcmRlcmVkDQorCSAqLw0KKwlpbnQgU09MVkVSX19ERUNPUkFUT1JTID0gQ29tbW9uUGFja2FnZS5JREVOVElGSUFCTEVfRkVBVFVSRV9DT1VOVCArIDA7DQorDQorCS8qKg0KKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+SW5pdGlhbGl6ZWQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCWludCBTT0xWRVJfX0lOSVRJQUxJWkVEID0gQ29tbW9uUGFja2FnZS5JREVOVElGSUFCTEVfRkVBVFVSRV9DT1VOVCArIDE7DQorDQorCS8qKg0KKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+UGFydGl0aW9uZXI8L2I+PC9lbT4nIHJlZmVyZW5jZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCWludCBTT0xWRVJfX1BBUlRJVElPTkVSID0gQ29tbW9uUGFja2FnZS5JREVOVElGSUFCTEVfRkVBVFVSRV9DT1VOVCArIDI7DQorDQorCS8qKg0KKwkgKiBUaGUgbnVtYmVyIG9mIHN0cnVjdHVyYWwgZmVhdHVyZXMgb2YgdGhlICc8ZW0+U29sdmVyPC9lbT4nIGNsYXNzLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJaW50IFNPTFZFUl9GRUFUVVJFX0NPVU5UID0gQ29tbW9uUGFja2FnZS5JREVOVElGSUFCTEVfRkVBVFVSRV9DT1VOVCArIDM7DQorDQorDQorCS8qKg0KKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc29sdmVyLlNvbHZlciA8ZW0+U29sdmVyPC9lbT59Jy4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAnPGVtPlNvbHZlcjwvZW0+Jy4NCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc29sdmVyLlNvbHZlcg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlFQ2xhc3MgZ2V0U29sdmVyKCk7DQorDQorCS8qKg0KKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zb2x2ZXIuU29sdmVyI2dldERlY29yYXRvcnMgPGVtPkRlY29yYXRvcnM8L2VtPn0nLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxlbT5EZWNvcmF0b3JzPC9lbT4nLg0KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zb2x2ZXIuU29sdmVyI2dldERlY29yYXRvcnMoKQ0KKwkgKiBAc2VlICNnZXRTb2x2ZXIoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlFQXR0cmlidXRlIGdldFNvbHZlcl9EZWNvcmF0b3JzKCk7DQorDQorCS8qKg0KKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zb2x2ZXIuU29sdmVyI2lzSW5pdGlhbGl6ZWQgPGVtPkluaXRpYWxpemVkPC9lbT59Jy4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+SW5pdGlhbGl6ZWQ8L2VtPicuDQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNvbHZlci5Tb2x2ZXIjaXNJbml0aWFsaXplZCgpDQorCSAqIEBzZWUgI2dldFNvbHZlcigpDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCUVBdHRyaWJ1dGUgZ2V0U29sdmVyX0luaXRpYWxpemVkKCk7DQorDQorCS8qKg0KKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIHJlZmVyZW5jZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zb2x2ZXIuU29sdmVyI2dldFBhcnRpdGlvbmVyIDxlbT5QYXJ0aXRpb25lcjwvZW0+fScuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIHJlZmVyZW5jZSAnPGVtPlBhcnRpdGlvbmVyPC9lbT4nLg0KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zb2x2ZXIuU29sdmVyI2dldFBhcnRpdGlvbmVyKCkNCisJICogQHNlZSAjZ2V0U29sdmVyKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJRVJlZmVyZW5jZSBnZXRTb2x2ZXJfUGFydGl0aW9uZXIoKTsNCisNCisJLyoqDQorCSAqIFJldHVybnMgdGhlIGZhY3RvcnkgdGhhdCBjcmVhdGVzIHRoZSBpbnN0YW5jZXMgb2YgdGhlIG1vZGVsLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHJldHVybiB0aGUgZmFjdG9yeSB0aGF0IGNyZWF0ZXMgdGhlIGluc3RhbmNlcyBvZiB0aGUgbW9kZWwuDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCVNvbHZlckZhY3RvcnkgZ2V0U29sdmVyRmFjdG9yeSgpOw0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogRGVmaW5lcyBsaXRlcmFscyBmb3IgdGhlIG1ldGEgb2JqZWN0cyB0aGF0IHJlcHJlc2VudA0KKwkgKiA8dWw+DQorCSAqICAgPGxpPmVhY2ggY2xhc3MsPC9saT4NCisJICogICA8bGk+ZWFjaCBmZWF0dXJlIG9mIGVhY2ggY2xhc3MsPC9saT4NCisJICogICA8bGk+ZWFjaCBlbnVtLDwvbGk+DQorCSAqICAgPGxpPmFuZCBlYWNoIGRhdGEgdHlwZTwvbGk+DQorCSAqIDwvdWw+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlpbnRlcmZhY2UgTGl0ZXJhbHMgew0KKwkJLyoqDQorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNvbHZlci5pbXBsLlNvbHZlckltcGwgPGVtPlNvbHZlcjwvZW0+fScgY2xhc3MuDQorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zb2x2ZXIuaW1wbC5Tb2x2ZXJJbXBsDQorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zb2x2ZXIuaW1wbC5Tb2x2ZXJQYWNrYWdlSW1wbCNnZXRTb2x2ZXIoKQ0KKwkJICogQGdlbmVyYXRlZA0KKwkJICovDQorCQlFQ2xhc3MgU09MVkVSID0gZUlOU1RBTkNFLmdldFNvbHZlcigpOw0KKw0KKwkJLyoqDQorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+RGVjb3JhdG9yczwvYj48L2VtPicgYXR0cmlidXRlIGZlYXR1cmUuDQorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCQkgKiBAZ2VuZXJhdGVkDQorCQkgKi8NCisJCUVBdHRyaWJ1dGUgU09MVkVSX19ERUNPUkFUT1JTID0gZUlOU1RBTkNFLmdldFNvbHZlcl9EZWNvcmF0b3JzKCk7DQorDQorCQkvKioNCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5Jbml0aWFsaXplZDwvYj48L2VtPicgYXR0cmlidXRlIGZlYXR1cmUuDQorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCQkgKiBAZ2VuZXJhdGVkDQorCQkgKi8NCisJCUVBdHRyaWJ1dGUgU09MVkVSX19JTklUSUFMSVpFRCA9IGVJTlNUQU5DRS5nZXRTb2x2ZXJfSW5pdGlhbGl6ZWQoKTsNCisNCisJCS8qKg0KKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPlBhcnRpdGlvbmVyPC9iPjwvZW0+JyByZWZlcmVuY2UgZmVhdHVyZS4NCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJCSAqIEBnZW5lcmF0ZWQNCisJCSAqLw0KKwkJRVJlZmVyZW5jZSBTT0xWRVJfX1BBUlRJVElPTkVSID0gZUlOU1RBTkNFLmdldFNvbHZlcl9QYXJ0aXRpb25lcigpOw0KKw0KKwl9DQorDQorfSAvL1NvbHZlclBhY2thZ2UNCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3NvbHZlci9pbXBsL1NvbHZlckZhY3RvcnlJbXBsLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3NvbHZlci9pbXBsL1NvbHZlckZhY3RvcnlJbXBsLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTE0ZDk4ZgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvc29sdmVyL2ltcGwvU29sdmVyRmFjdG9yeUltcGwuamF2YQpAQCAtMCwwICsxLDEwMyBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc29sdmVyLmltcGw7DQorDQorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisgKiBDb3B5cmlnaHQgKGMpIDIwMDkgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuDQorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscw0KKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMA0KKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0DQorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwNCisgKg0KKyAqIENvbnRyaWJ1dG9yczoNCisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uDQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQorDQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0Ow0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRVBhY2thZ2U7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5pbXBsLkVGYWN0b3J5SW1wbDsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnBsdWdpbi5FY29yZVBsdWdpbjsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNvbHZlci5Tb2x2ZXI7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zb2x2ZXIuU29sdmVyRmFjdG9yeTsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNvbHZlci5Tb2x2ZXJQYWNrYWdlOw0KKw0KKy8qKg0KKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorICogQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIG1vZGVsIDxiPkZhY3Rvcnk8L2I+Lg0KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKyAqIEBnZW5lcmF0ZWQNCisgKi8NCitwdWJsaWMgY2xhc3MgU29sdmVyRmFjdG9yeUltcGwgZXh0ZW5kcyBFRmFjdG9yeUltcGwgaW1wbGVtZW50cyBTb2x2ZXJGYWN0b3J5IHsNCisJLyoqDQorCSAqIENyZWF0ZXMgdGhlIGRlZmF1bHQgZmFjdG9yeSBpbXBsZW1lbnRhdGlvbi4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBzdGF0aWMgU29sdmVyRmFjdG9yeSBpbml0KCkgew0KKwkJdHJ5IHsNCisJCQlTb2x2ZXJGYWN0b3J5IHRoZVNvbHZlckZhY3RvcnkgPSAoU29sdmVyRmFjdG9yeSlFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFRmFjdG9yeSgiaHR0cDovL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9zb2x2ZXIiKTsgLy8kTk9OLU5MUy0xJCANCisJCQlpZiAodGhlU29sdmVyRmFjdG9yeSAhPSBudWxsKSB7DQorCQkJCXJldHVybiB0aGVTb2x2ZXJGYWN0b3J5Ow0KKwkJCX0NCisJCX0NCisJCWNhdGNoIChFeGNlcHRpb24gZXhjZXB0aW9uKSB7DQorCQkJRWNvcmVQbHVnaW4uSU5TVEFOQ0UubG9nKGV4Y2VwdGlvbik7DQorCQl9DQorCQlyZXR1cm4gbmV3IFNvbHZlckZhY3RvcnlJbXBsKCk7DQorCX0NCisNCisJLyoqDQorCSAqIENyZWF0ZXMgYW4gaW5zdGFuY2Ugb2YgdGhlIGZhY3RvcnkuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgU29sdmVyRmFjdG9yeUltcGwoKSB7DQorCQlzdXBlcigpOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJQE92ZXJyaWRlDQorCXB1YmxpYyBFT2JqZWN0IGNyZWF0ZShFQ2xhc3MgZUNsYXNzKSB7DQorCQlzd2l0Y2ggKGVDbGFzcy5nZXRDbGFzc2lmaWVySUQoKSkgew0KKwkJCWNhc2UgU29sdmVyUGFja2FnZS5TT0xWRVI6IHJldHVybiBjcmVhdGVTb2x2ZXIoKTsNCisJCQlkZWZhdWx0Og0KKwkJCQl0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJUaGUgY2xhc3MgJyIgKyBlQ2xhc3MuZ2V0TmFtZSgpICsgIicgaXMgbm90IGEgdmFsaWQgY2xhc3NpZmllciIpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQNCisJCX0NCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBTb2x2ZXIgY3JlYXRlU29sdmVyKCkgew0KKwkJU29sdmVySW1wbCBzb2x2ZXIgPSBuZXcgU29sdmVySW1wbCgpOw0KKwkJcmV0dXJuIHNvbHZlcjsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBTb2x2ZXJQYWNrYWdlIGdldFNvbHZlclBhY2thZ2UoKSB7DQorCQlyZXR1cm4gKFNvbHZlclBhY2thZ2UpZ2V0RVBhY2thZ2UoKTsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBkZXByZWNhdGVkDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCUBEZXByZWNhdGVkDQorCXB1YmxpYyBzdGF0aWMgU29sdmVyUGFja2FnZSBnZXRQYWNrYWdlKCkgew0KKwkJcmV0dXJuIFNvbHZlclBhY2thZ2UuZUlOU1RBTkNFOw0KKwl9DQorDQorfSAvL1NvbHZlckZhY3RvcnlJbXBsDQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9zb2x2ZXIvaW1wbC9Tb2x2ZXJJbXBsLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3NvbHZlci9pbXBsL1NvbHZlckltcGwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hOTExNDA1Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9zb2x2ZXIvaW1wbC9Tb2x2ZXJJbXBsLmphdmEKQEAgLTAsMCArMSwzMzUgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNvbHZlci5pbXBsOw0KKw0KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorICogQ29weXJpZ2h0IChjKSAyMDA5IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLg0KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMNCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjANCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdA0KKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sDQorICoNCisgKiBDb250cmlidXRvcnM6DQorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbg0KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KKw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb247DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5CYXNpY0VMaXN0Ow0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuRUxpc3Q7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5JbnRlcm5hbEVPYmplY3Q7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5pbXBsLkVOb3RpZmljYXRpb25JbXBsOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuU1RFTVVSSTsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5pbXBsLklkZW50aWZpYWJsZUltcGw7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5EeW5hbWljTGFiZWw7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5HcmFwaFBhcnRpdGlvbmVyOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguSW50ZWdyYXRpb25MYWJlbDsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkludGVncmF0aW9uTGFiZWxWYWx1ZTsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLkRlY29yYXRvcjsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLkludGVncmF0aW9uRGVjb3JhdG9yOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuU1RFTVRpbWU7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zb2x2ZXIuU29sdmVyOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc29sdmVyLlNvbHZlclBhY2thZ2U7DQorDQorLyoqDQorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisgKiBBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+U29sdmVyPC9iPjwvZW0+Jy4NCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisgKiA8cD4NCisgKiBUaGUgZm9sbG93aW5nIGZlYXR1cmVzIGFyZSBpbXBsZW1lbnRlZDoNCisgKiA8dWw+DQorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zb2x2ZXIuaW1wbC5Tb2x2ZXJJbXBsI2dldERlY29yYXRvcnMgPGVtPkRlY29yYXRvcnM8L2VtPn08L2xpPg0KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc29sdmVyLmltcGwuU29sdmVySW1wbCNpc0luaXRpYWxpemVkIDxlbT5Jbml0aWFsaXplZDwvZW0+fTwvbGk+DQorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zb2x2ZXIuaW1wbC5Tb2x2ZXJJbXBsI2dldFBhcnRpdGlvbmVyIDxlbT5QYXJ0aXRpb25lcjwvZW0+fTwvbGk+DQorICogPC91bD4NCisgKiA8L3A+DQorICoNCisgKiBAZ2VuZXJhdGVkDQorICovDQorcHVibGljIGNsYXNzIFNvbHZlckltcGwgZXh0ZW5kcyBJZGVudGlmaWFibGVJbXBsIGltcGxlbWVudHMgU29sdmVyIHsNCisJLyoqDQorCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldERlY29yYXRvcnMoKSA8ZW0+RGVjb3JhdG9yczwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHNlZSAjZ2V0RGVjb3JhdG9ycygpDQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCXByb3RlY3RlZCBFTGlzdDxEZWNvcmF0b3I+IGRlY29yYXRvcnM7DQorDQorCS8qKg0KKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjaXNJbml0aWFsaXplZCgpIDxlbT5Jbml0aWFsaXplZDwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHNlZSAjaXNJbml0aWFsaXplZCgpDQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgYm9vbGVhbiBJTklUSUFMSVpFRF9FREVGQVVMVCA9IGZhbHNlOw0KKwkvKioNCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0UGFydGl0aW9uZXIoKSA8ZW0+UGFydGl0aW9uZXI8L2VtPn0nIHJlZmVyZW5jZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBzZWUgI2dldFBhcnRpdGlvbmVyKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJcHJvdGVjdGVkIEdyYXBoUGFydGl0aW9uZXIgcGFydGl0aW9uZXI7DQorDQorCXByaXZhdGUgYm9vbGVhbiBpbml0aWFsaXplZDsNCisJDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZCBOT1QNCisJICovDQorCXByb3RlY3RlZCBTb2x2ZXJJbXBsKCkgew0KKwkJc3VwZXIoKTsNCisJCXRoaXMuc2V0VHlwZVVSSShTVEVNVVJJLlNPTFZFUl9UWVBFX1VSSSk7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlAT3ZlcnJpZGUNCisJcHJvdGVjdGVkIEVDbGFzcyBlU3RhdGljQ2xhc3MoKSB7DQorCQlyZXR1cm4gU29sdmVyUGFja2FnZS5MaXRlcmFscy5TT0xWRVI7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgRUxpc3Q8RGVjb3JhdG9yPiBnZXREZWNvcmF0b3JzKCkgew0KKwkJcmV0dXJuIGRlY29yYXRvcnM7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgdm9pZCBzZXREZWNvcmF0b3JzKEVMaXN0PERlY29yYXRvcj4gbmV3RGVjb3JhdG9ycykgew0KKwkJRUxpc3Q8RGVjb3JhdG9yPiBvbGREZWNvcmF0b3JzID0gZGVjb3JhdG9yczsNCisJCWRlY29yYXRvcnMgPSBuZXdEZWNvcmF0b3JzOw0KKwkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQ0KKwkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIFNvbHZlclBhY2thZ2UuU09MVkVSX19ERUNPUkFUT1JTLCBvbGREZWNvcmF0b3JzLCBkZWNvcmF0b3JzKSk7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkIE5PVA0KKwkgKi8NCisJcHVibGljIGJvb2xlYW4gaXNJbml0aWFsaXplZCgpIHsNCisJCXJldHVybiB0aGlzLmluaXRpYWxpemVkOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZCBOT1QNCisJICovDQorCXB1YmxpYyB2b2lkIHNldEluaXRpYWxpemVkKGJvb2xlYW4gbmV3SW5pdGlhbGl6ZWQpIHsNCisJCXRoaXMuaW5pdGlhbGl6ZWQgPSBuZXdJbml0aWFsaXplZDsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBHcmFwaFBhcnRpdGlvbmVyIGdldFBhcnRpdGlvbmVyKCkgew0KKwkJaWYgKHBhcnRpdGlvbmVyICE9IG51bGwgJiYgcGFydGl0aW9uZXIuZUlzUHJveHkoKSkgew0KKwkJCUludGVybmFsRU9iamVjdCBvbGRQYXJ0aXRpb25lciA9IChJbnRlcm5hbEVPYmplY3QpcGFydGl0aW9uZXI7DQorCQkJcGFydGl0aW9uZXIgPSAoR3JhcGhQYXJ0aXRpb25lcillUmVzb2x2ZVByb3h5KG9sZFBhcnRpdGlvbmVyKTsNCisJCQlpZiAocGFydGl0aW9uZXIgIT0gb2xkUGFydGl0aW9uZXIpIHsNCisJCQkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQ0KKwkJCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlJFU09MVkUsIFNvbHZlclBhY2thZ2UuU09MVkVSX19QQVJUSVRJT05FUiwgb2xkUGFydGl0aW9uZXIsIHBhcnRpdGlvbmVyKSk7DQorCQkJfQ0KKwkJfQ0KKwkJcmV0dXJuIHBhcnRpdGlvbmVyOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIEdyYXBoUGFydGl0aW9uZXIgYmFzaWNHZXRQYXJ0aXRpb25lcigpIHsNCisJCXJldHVybiBwYXJ0aXRpb25lcjsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyB2b2lkIHNldFBhcnRpdGlvbmVyKEdyYXBoUGFydGl0aW9uZXIgbmV3UGFydGl0aW9uZXIpIHsNCisJCUdyYXBoUGFydGl0aW9uZXIgb2xkUGFydGl0aW9uZXIgPSBwYXJ0aXRpb25lcjsNCisJCXBhcnRpdGlvbmVyID0gbmV3UGFydGl0aW9uZXI7DQorCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpDQorCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgU29sdmVyUGFja2FnZS5TT0xWRVJfX1BBUlRJVElPTkVSLCBvbGRQYXJ0aXRpb25lciwgcGFydGl0aW9uZXIpKTsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBib29sZWFuIHN0ZXAoU1RFTVRpbWUgdGltZSwgbG9uZyB0aW1lRGVsdGEsIGludCBjeWNsZSkgew0KKwkJLy8gVE9ETzogaW1wbGVtZW50IHRoaXMgbWV0aG9kDQorCQkvLyBFbnN1cmUgdGhhdCB5b3UgcmVtb3ZlIEBnZW5lcmF0ZWQgb3IgbWFyayBpdCBAZ2VuZXJhdGVkIE5PVA0KKwkJdGhyb3cgbmV3IFVuc3VwcG9ydGVkT3BlcmF0aW9uRXhjZXB0aW9uKCk7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgdm9pZCByZXNldCgpIHsNCisJCS8vIFRPRE86IGltcGxlbWVudCB0aGlzIG1ldGhvZA0KKwkJLy8gRW5zdXJlIHRoYXQgeW91IHJlbW92ZSBAZ2VuZXJhdGVkIG9yIG1hcmsgaXQgQGdlbmVyYXRlZCBOT1QNCisJCXRocm93IG5ldyBVbnN1cHBvcnRlZE9wZXJhdGlvbkV4Y2VwdGlvbigpOw0KKwl9DQorDQorCS8qKg0KKwkgKiBpbml0aWFsaXplIGJlZm9yZSBzaW11bGF0aW9uIGJlZ2lucy4gUmV3aW5kL2ZvcndhcmQgYW55IHBvcHVsYXRpb24gbW9kZWwNCisJICogdmFsdWVzIHRvIHRoZSBzdGFydCB0aW1lIG9mIHRoZSBzZXF1ZW5jZXINCisJICogQHBhcmFtIHRpbWUNCisJICovDQorCXB1YmxpYyB2b2lkIGluaXRpYWxpemUoU1RFTVRpbWUgdGltZSwgR3JhcGhQYXJ0aXRpb25lciBwKSB7DQorCQl0aGlzLnBhcnRpdGlvbmVyID0gcDsNCisJCUVMaXN0PERlY29yYXRvcj4gcmVkb0xpc3QgPSBuZXcgQmFzaWNFTGlzdDxEZWNvcmF0b3I+KCk7DQorCQkNCisJCWJvb2xlYW4gcmVkbyA9IGZhbHNlOw0KKwkJZm9yKERlY29yYXRvciBkOnRoaXMuZ2V0RGVjb3JhdG9ycygpKSB7DQorCQkJaWYoZCBpbnN0YW5jZW9mIEludGVncmF0aW9uRGVjb3JhdG9yKSB7DQorCQkJCUVMaXN0PER5bmFtaWNMYWJlbD4gbGFiZWxzID0gZC5nZXRMYWJlbHNUb1VwZGF0ZSgpOw0KKwkJCQlmb3IoRHluYW1pY0xhYmVsIGw6bGFiZWxzKSB7DQorCQkJCQlpZihsIGluc3RhbmNlb2YgSW50ZWdyYXRpb25MYWJlbCkgew0KKwkJCQkJCUludGVncmF0aW9uTGFiZWwgaWwgPSAoSW50ZWdyYXRpb25MYWJlbClsOw0KKwkJCQkJCWlsLnJlc2V0KHRpbWUpOw0KKwkJCQkJCWlmKCgoSW50ZWdyYXRpb25MYWJlbFZhbHVlKWlsLmdldERlbHRhVmFsdWUoKSkuZ2V0QXJyaXZhbHMoKS5zaXplKCkgPiAwIHx8DQorCQkJCQkJCQkoKEludGVncmF0aW9uTGFiZWxWYWx1ZSlpbC5nZXREZWx0YVZhbHVlKCkpLmdldERlcGFydHVyZXMoKS5zaXplKCkgPiAwKQ0KKwkJCQkJCQlyZWRvID0gdHJ1ZTsNCisJCQkJCX0NCisJCQkJfQ0KKwkJCX0NCisJCQlpZighcmVkbylyZWRvTGlzdC5hZGQoZCk7DQorCQl9DQorCQkvLyBGaXggZGVjb3JhdG9ycyB3aXRoIHVuYXBwbGllZCBkZWx0YXMNCisJCWlmKHJlZG8pIHsNCisJCQlmb3IoRGVjb3JhdG9yIGQ6cmVkb0xpc3QpIHsNCisJCQkJaWYoZCBpbnN0YW5jZW9mIEludGVncmF0aW9uRGVjb3JhdG9yKSB7DQorCQkJCQlFTGlzdDxEeW5hbWljTGFiZWw+IGxhYmVscyA9IGQuZ2V0TGFiZWxzVG9VcGRhdGUoKTsNCisJCQkJCWZvcihEeW5hbWljTGFiZWwgbDpsYWJlbHMpIHsNCisJCQkJCQlpZihsIGluc3RhbmNlb2YgSW50ZWdyYXRpb25MYWJlbCkgew0KKwkJCQkJCQlJbnRlZ3JhdGlvbkxhYmVsIGlsID0gKEludGVncmF0aW9uTGFiZWwpbDsNCisJCQkJCQkJaWwucmVzZXQodGltZSk7DQorCQkJCQkJfQ0KKwkJCQkJfQ0KKwkJCQl9DQorCQkJfQ0KKwkJfQ0KKwkJdGhpcy5zZXRJbml0aWFsaXplZCh0cnVlKTsNCisJfQ0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCUBPdmVycmlkZQ0KKwlwdWJsaWMgT2JqZWN0IGVHZXQoaW50IGZlYXR1cmVJRCwgYm9vbGVhbiByZXNvbHZlLCBib29sZWFuIGNvcmVUeXBlKSB7DQorCQlzd2l0Y2ggKGZlYXR1cmVJRCkgew0KKwkJCWNhc2UgU29sdmVyUGFja2FnZS5TT0xWRVJfX0RFQ09SQVRPUlM6DQorCQkJCXJldHVybiBnZXREZWNvcmF0b3JzKCk7DQorCQkJY2FzZSBTb2x2ZXJQYWNrYWdlLlNPTFZFUl9fSU5JVElBTElaRUQ6DQorCQkJCXJldHVybiBpc0luaXRpYWxpemVkKCk7DQorCQkJY2FzZSBTb2x2ZXJQYWNrYWdlLlNPTFZFUl9fUEFSVElUSU9ORVI6DQorCQkJCWlmIChyZXNvbHZlKSByZXR1cm4gZ2V0UGFydGl0aW9uZXIoKTsNCisJCQkJcmV0dXJuIGJhc2ljR2V0UGFydGl0aW9uZXIoKTsNCisJCX0NCisJCXJldHVybiBzdXBlci5lR2V0KGZlYXR1cmVJRCwgcmVzb2x2ZSwgY29yZVR5cGUpOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJQFN1cHByZXNzV2FybmluZ3MoInVuY2hlY2tlZCIpDQorCUBPdmVycmlkZQ0KKwlwdWJsaWMgdm9pZCBlU2V0KGludCBmZWF0dXJlSUQsIE9iamVjdCBuZXdWYWx1ZSkgew0KKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsNCisJCQljYXNlIFNvbHZlclBhY2thZ2UuU09MVkVSX19ERUNPUkFUT1JTOg0KKwkJCQlzZXREZWNvcmF0b3JzKChFTGlzdDxEZWNvcmF0b3I+KW5ld1ZhbHVlKTsNCisJCQkJcmV0dXJuOw0KKwkJCWNhc2UgU29sdmVyUGFja2FnZS5TT0xWRVJfX0lOSVRJQUxJWkVEOg0KKwkJCQlzZXRJbml0aWFsaXplZCgoQm9vbGVhbiluZXdWYWx1ZSk7DQorCQkJCXJldHVybjsNCisJCQljYXNlIFNvbHZlclBhY2thZ2UuU09MVkVSX19QQVJUSVRJT05FUjoNCisJCQkJc2V0UGFydGl0aW9uZXIoKEdyYXBoUGFydGl0aW9uZXIpbmV3VmFsdWUpOw0KKwkJCQlyZXR1cm47DQorCQl9DQorCQlzdXBlci5lU2V0KGZlYXR1cmVJRCwgbmV3VmFsdWUpOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJQE92ZXJyaWRlDQorCXB1YmxpYyB2b2lkIGVVbnNldChpbnQgZmVhdHVyZUlEKSB7DQorCQlzd2l0Y2ggKGZlYXR1cmVJRCkgew0KKwkJCWNhc2UgU29sdmVyUGFja2FnZS5TT0xWRVJfX0RFQ09SQVRPUlM6DQorCQkJCXNldERlY29yYXRvcnMoKEVMaXN0PERlY29yYXRvcj4pbnVsbCk7DQorCQkJCXJldHVybjsNCisJCQljYXNlIFNvbHZlclBhY2thZ2UuU09MVkVSX19JTklUSUFMSVpFRDoNCisJCQkJc2V0SW5pdGlhbGl6ZWQoSU5JVElBTElaRURfRURFRkFVTFQpOw0KKwkJCQlyZXR1cm47DQorCQkJY2FzZSBTb2x2ZXJQYWNrYWdlLlNPTFZFUl9fUEFSVElUSU9ORVI6DQorCQkJCXNldFBhcnRpdGlvbmVyKChHcmFwaFBhcnRpdGlvbmVyKW51bGwpOw0KKwkJCQlyZXR1cm47DQorCQl9DQorCQlzdXBlci5lVW5zZXQoZmVhdHVyZUlEKTsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCUBPdmVycmlkZQ0KKwlwdWJsaWMgYm9vbGVhbiBlSXNTZXQoaW50IGZlYXR1cmVJRCkgew0KKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsNCisJCQljYXNlIFNvbHZlclBhY2thZ2UuU09MVkVSX19ERUNPUkFUT1JTOg0KKwkJCQlyZXR1cm4gZGVjb3JhdG9ycyAhPSBudWxsOw0KKwkJCWNhc2UgU29sdmVyUGFja2FnZS5TT0xWRVJfX0lOSVRJQUxJWkVEOg0KKwkJCQlyZXR1cm4gaXNJbml0aWFsaXplZCgpICE9IElOSVRJQUxJWkVEX0VERUZBVUxUOw0KKwkJCWNhc2UgU29sdmVyUGFja2FnZS5TT0xWRVJfX1BBUlRJVElPTkVSOg0KKwkJCQlyZXR1cm4gcGFydGl0aW9uZXIgIT0gbnVsbDsNCisJCX0NCisJCXJldHVybiBzdXBlci5lSXNTZXQoZmVhdHVyZUlEKTsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCUBPdmVycmlkZQ0KKwlwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkgew0KKwkJaWYgKGVJc1Byb3h5KCkpIHJldHVybiBzdXBlci50b1N0cmluZygpOw0KKw0KKwkJU3RyaW5nQnVmZmVyIHJlc3VsdCA9IG5ldyBTdHJpbmdCdWZmZXIoc3VwZXIudG9TdHJpbmcoKSk7DQorCQlyZXN1bHQuYXBwZW5kKCIgKGRlY29yYXRvcnM6ICIpOyAvLyROT04tTkxTLTEkDQorCQlyZXN1bHQuYXBwZW5kKGRlY29yYXRvcnMpOw0KKwkJcmVzdWx0LmFwcGVuZCgnKScpOw0KKwkJcmV0dXJuIHJlc3VsdC50b1N0cmluZygpOw0KKwl9DQorDQorfSAvL1NvbHZlckltcGwNCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3NvbHZlci9pbXBsL1NvbHZlclBhY2thZ2VJbXBsLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3NvbHZlci9pbXBsL1NvbHZlclBhY2thZ2VJbXBsLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzM3YWE0ZQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvc29sdmVyL2ltcGwvU29sdmVyUGFja2FnZUltcGwuamF2YQpAQCAtMCwwICsxLDI4MiBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc29sdmVyLmltcGw7DQorDQorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisgKiBDb3B5cmlnaHQgKGMpIDIwMDkgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuDQorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscw0KKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMA0KKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0DQorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwNCisgKg0KKyAqIENvbnRyaWJ1dG9yczoNCisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uDQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQorDQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQXR0cmlidXRlOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUdlbmVyaWNUeXBlOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9wZXJhdGlvbjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVQYWNrYWdlOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRVJlZmVyZW5jZTsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVjb3JlUGFja2FnZTsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLmltcGwuRVBhY2thZ2VJbXBsOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLkNvbW1vblBhY2thZ2U7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uaW1wbC5Db21tb25QYWNrYWdlSW1wbDsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmV4cGVyaW1lbnQuRXhwZXJpbWVudFBhY2thZ2U7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5leHBlcmltZW50LmltcGwuRXhwZXJpbWVudFBhY2thZ2VJbXBsOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguR3JhcGhQYWNrYWdlOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguaW1wbC5HcmFwaFBhY2thZ2VJbXBsOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubG9nZ2VyLkxvZ2dlclBhY2thZ2U7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5sb2dnZXIuaW1wbC5Mb2dnZXJQYWNrYWdlSW1wbDsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLk1vZGVsUGFja2FnZTsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLmltcGwuTW9kZWxQYWNrYWdlSW1wbDsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLk1vZGlmaWVyUGFja2FnZTsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLmltcGwuTW9kaWZpZXJQYWNrYWdlSW1wbDsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZS5QcmVkaWNhdGVQYWNrYWdlOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlLmltcGwuUHJlZGljYXRlUGFja2FnZUltcGw7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zY2VuYXJpby5TY2VuYXJpb1BhY2thZ2U7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zY2VuYXJpby5pbXBsLlNjZW5hcmlvUGFja2FnZUltcGw7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zZXF1ZW5jZXIuU2VxdWVuY2VyUGFja2FnZTsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNlcXVlbmNlci5pbXBsLlNlcXVlbmNlclBhY2thZ2VJbXBsOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc29sdmVyLlNvbHZlcjsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNvbHZlci5Tb2x2ZXJGYWN0b3J5Ow0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc29sdmVyLlNvbHZlclBhY2thZ2U7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS50cmlnZ2VyLlRyaWdnZXJQYWNrYWdlOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUudHJpZ2dlci5pbXBsLlRyaWdnZXJQYWNrYWdlSW1wbDsNCisNCisvKioNCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKyAqIEFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBtb2RlbCA8Yj5QYWNrYWdlPC9iPi4NCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisgKiBAZ2VuZXJhdGVkDQorICovDQorcHVibGljIGNsYXNzIFNvbHZlclBhY2thZ2VJbXBsIGV4dGVuZHMgRVBhY2thZ2VJbXBsIGltcGxlbWVudHMgU29sdmVyUGFja2FnZSB7DQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJpdmF0ZSBFQ2xhc3Mgc29sdmVyRUNsYXNzID0gbnVsbDsNCisNCisJLyoqDQorCSAqIENyZWF0ZXMgYW4gaW5zdGFuY2Ugb2YgdGhlIG1vZGVsIDxiPlBhY2thZ2U8L2I+LCByZWdpc3RlcmVkIHdpdGgNCisJICoge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FUGFja2FnZS5SZWdpc3RyeSBFUGFja2FnZS5SZWdpc3RyeX0gYnkgdGhlIHBhY2thZ2UNCisJICogcGFja2FnZSBVUkkgdmFsdWUuDQorCSAqIDxwPk5vdGU6IHRoZSBjb3JyZWN0IHdheSB0byBjcmVhdGUgdGhlIHBhY2thZ2UgaXMgdmlhIHRoZSBzdGF0aWMNCisJICogZmFjdG9yeSBtZXRob2Qge0BsaW5rICNpbml0IGluaXQoKX0sIHdoaWNoIGFsc28gcGVyZm9ybXMNCisJICogaW5pdGlhbGl6YXRpb24gb2YgdGhlIHBhY2thZ2UsIG9yIHJldHVybnMgdGhlIHJlZ2lzdGVyZWQgcGFja2FnZSwNCisJICogaWYgb25lIGFscmVhZHkgZXhpc3RzLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHNlZSBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRVBhY2thZ2UuUmVnaXN0cnkNCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc29sdmVyLlNvbHZlclBhY2thZ2UjZU5TX1VSSQ0KKwkgKiBAc2VlICNpbml0KCkNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJpdmF0ZSBTb2x2ZXJQYWNrYWdlSW1wbCgpIHsNCisJCXN1cGVyKGVOU19VUkksIFNvbHZlckZhY3RvcnkuZUlOU1RBTkNFKTsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByaXZhdGUgc3RhdGljIGJvb2xlYW4gaXNJbml0ZWQgPSBmYWxzZTsNCisNCisJLyoqDQorCSAqIENyZWF0ZXMsIHJlZ2lzdGVycywgYW5kIGluaXRpYWxpemVzIHRoZSA8Yj5QYWNrYWdlPC9iPiBmb3IgdGhpcyBtb2RlbCwgYW5kIGZvciBhbnkgb3RoZXJzIHVwb24gd2hpY2ggaXQgZGVwZW5kcy4NCisJICogDQorCSAqIDxwPlRoaXMgbWV0aG9kIGlzIHVzZWQgdG8gaW5pdGlhbGl6ZSB7QGxpbmsgU29sdmVyUGFja2FnZSNlSU5TVEFOQ0V9IHdoZW4gdGhhdCBmaWVsZCBpcyBhY2Nlc3NlZC4NCisJICogQ2xpZW50cyBzaG91bGQgbm90IGludm9rZSBpdCBkaXJlY3RseS4gSW5zdGVhZCwgdGhleSBzaG91bGQgc2ltcGx5IGFjY2VzcyB0aGF0IGZpZWxkIHRvIG9idGFpbiB0aGUgcGFja2FnZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBzZWUgI2VOU19VUkkNCisJICogQHNlZSAjY3JlYXRlUGFja2FnZUNvbnRlbnRzKCkNCisJICogQHNlZSAjaW5pdGlhbGl6ZVBhY2thZ2VDb250ZW50cygpDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBzdGF0aWMgU29sdmVyUGFja2FnZSBpbml0KCkgew0KKwkJaWYgKGlzSW5pdGVkKSByZXR1cm4gKFNvbHZlclBhY2thZ2UpRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RVBhY2thZ2UoU29sdmVyUGFja2FnZS5lTlNfVVJJKTsNCisNCisJCS8vIE9idGFpbiBvciBjcmVhdGUgYW5kIHJlZ2lzdGVyIHBhY2thZ2UNCisJCVNvbHZlclBhY2thZ2VJbXBsIHRoZVNvbHZlclBhY2thZ2UgPSAoU29sdmVyUGFja2FnZUltcGwpKEVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldChlTlNfVVJJKSBpbnN0YW5jZW9mIFNvbHZlclBhY2thZ2VJbXBsID8gRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0KGVOU19VUkkpIDogbmV3IFNvbHZlclBhY2thZ2VJbXBsKCkpOw0KKw0KKwkJaXNJbml0ZWQgPSB0cnVlOw0KKw0KKwkJLy8gSW5pdGlhbGl6ZSBzaW1wbGUgZGVwZW5kZW5jaWVzDQorCQlFY29yZVBhY2thZ2UuZUlOU1RBTkNFLmVDbGFzcygpOw0KKw0KKwkJLy8gT2J0YWluIG9yIGNyZWF0ZSBhbmQgcmVnaXN0ZXIgaW50ZXJkZXBlbmRlbmNpZXMNCisJCUNvbW1vblBhY2thZ2VJbXBsIHRoZUNvbW1vblBhY2thZ2UgPSAoQ29tbW9uUGFja2FnZUltcGwpKEVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVQYWNrYWdlKENvbW1vblBhY2thZ2UuZU5TX1VSSSkgaW5zdGFuY2VvZiBDb21tb25QYWNrYWdlSW1wbCA/IEVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVQYWNrYWdlKENvbW1vblBhY2thZ2UuZU5TX1VSSSkgOiBDb21tb25QYWNrYWdlLmVJTlNUQU5DRSk7DQorCQlFeHBlcmltZW50UGFja2FnZUltcGwgdGhlRXhwZXJpbWVudFBhY2thZ2UgPSAoRXhwZXJpbWVudFBhY2thZ2VJbXBsKShFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShFeHBlcmltZW50UGFja2FnZS5lTlNfVVJJKSBpbnN0YW5jZW9mIEV4cGVyaW1lbnRQYWNrYWdlSW1wbCA/IEVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVQYWNrYWdlKEV4cGVyaW1lbnRQYWNrYWdlLmVOU19VUkkpIDogRXhwZXJpbWVudFBhY2thZ2UuZUlOU1RBTkNFKTsNCisJCUdyYXBoUGFja2FnZUltcGwgdGhlR3JhcGhQYWNrYWdlID0gKEdyYXBoUGFja2FnZUltcGwpKEVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVQYWNrYWdlKEdyYXBoUGFja2FnZS5lTlNfVVJJKSBpbnN0YW5jZW9mIEdyYXBoUGFja2FnZUltcGwgPyBFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShHcmFwaFBhY2thZ2UuZU5TX1VSSSkgOiBHcmFwaFBhY2thZ2UuZUlOU1RBTkNFKTsNCisJCU1vZGVsUGFja2FnZUltcGwgdGhlTW9kZWxQYWNrYWdlID0gKE1vZGVsUGFja2FnZUltcGwpKEVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVQYWNrYWdlKE1vZGVsUGFja2FnZS5lTlNfVVJJKSBpbnN0YW5jZW9mIE1vZGVsUGFja2FnZUltcGwgPyBFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShNb2RlbFBhY2thZ2UuZU5TX1VSSSkgOiBNb2RlbFBhY2thZ2UuZUlOU1RBTkNFKTsNCisJCU1vZGlmaWVyUGFja2FnZUltcGwgdGhlTW9kaWZpZXJQYWNrYWdlID0gKE1vZGlmaWVyUGFja2FnZUltcGwpKEVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVQYWNrYWdlKE1vZGlmaWVyUGFja2FnZS5lTlNfVVJJKSBpbnN0YW5jZW9mIE1vZGlmaWVyUGFja2FnZUltcGwgPyBFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShNb2RpZmllclBhY2thZ2UuZU5TX1VSSSkgOiBNb2RpZmllclBhY2thZ2UuZUlOU1RBTkNFKTsNCisJCVByZWRpY2F0ZVBhY2thZ2VJbXBsIHRoZVByZWRpY2F0ZVBhY2thZ2UgPSAoUHJlZGljYXRlUGFja2FnZUltcGwpKEVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVQYWNrYWdlKFByZWRpY2F0ZVBhY2thZ2UuZU5TX1VSSSkgaW5zdGFuY2VvZiBQcmVkaWNhdGVQYWNrYWdlSW1wbCA/IEVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVQYWNrYWdlKFByZWRpY2F0ZVBhY2thZ2UuZU5TX1VSSSkgOiBQcmVkaWNhdGVQYWNrYWdlLmVJTlNUQU5DRSk7DQorCQlTY2VuYXJpb1BhY2thZ2VJbXBsIHRoZVNjZW5hcmlvUGFja2FnZSA9IChTY2VuYXJpb1BhY2thZ2VJbXBsKShFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShTY2VuYXJpb1BhY2thZ2UuZU5TX1VSSSkgaW5zdGFuY2VvZiBTY2VuYXJpb1BhY2thZ2VJbXBsID8gRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RVBhY2thZ2UoU2NlbmFyaW9QYWNrYWdlLmVOU19VUkkpIDogU2NlbmFyaW9QYWNrYWdlLmVJTlNUQU5DRSk7DQorCQlTZXF1ZW5jZXJQYWNrYWdlSW1wbCB0aGVTZXF1ZW5jZXJQYWNrYWdlID0gKFNlcXVlbmNlclBhY2thZ2VJbXBsKShFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShTZXF1ZW5jZXJQYWNrYWdlLmVOU19VUkkpIGluc3RhbmNlb2YgU2VxdWVuY2VyUGFja2FnZUltcGwgPyBFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShTZXF1ZW5jZXJQYWNrYWdlLmVOU19VUkkpIDogU2VxdWVuY2VyUGFja2FnZS5lSU5TVEFOQ0UpOw0KKwkJVHJpZ2dlclBhY2thZ2VJbXBsIHRoZVRyaWdnZXJQYWNrYWdlID0gKFRyaWdnZXJQYWNrYWdlSW1wbCkoRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RVBhY2thZ2UoVHJpZ2dlclBhY2thZ2UuZU5TX1VSSSkgaW5zdGFuY2VvZiBUcmlnZ2VyUGFja2FnZUltcGwgPyBFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShUcmlnZ2VyUGFja2FnZS5lTlNfVVJJKSA6IFRyaWdnZXJQYWNrYWdlLmVJTlNUQU5DRSk7DQorCQlMb2dnZXJQYWNrYWdlSW1wbCB0aGVMb2dnZXJQYWNrYWdlID0gKExvZ2dlclBhY2thZ2VJbXBsKShFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShMb2dnZXJQYWNrYWdlLmVOU19VUkkpIGluc3RhbmNlb2YgTG9nZ2VyUGFja2FnZUltcGwgPyBFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShMb2dnZXJQYWNrYWdlLmVOU19VUkkpIDogTG9nZ2VyUGFja2FnZS5lSU5TVEFOQ0UpOw0KKw0KKwkJLy8gQ3JlYXRlIHBhY2thZ2UgbWV0YS1kYXRhIG9iamVjdHMNCisJCXRoZVNvbHZlclBhY2thZ2UuY3JlYXRlUGFja2FnZUNvbnRlbnRzKCk7DQorCQl0aGVDb21tb25QYWNrYWdlLmNyZWF0ZVBhY2thZ2VDb250ZW50cygpOw0KKwkJdGhlRXhwZXJpbWVudFBhY2thZ2UuY3JlYXRlUGFja2FnZUNvbnRlbnRzKCk7DQorCQl0aGVHcmFwaFBhY2thZ2UuY3JlYXRlUGFja2FnZUNvbnRlbnRzKCk7DQorCQl0aGVNb2RlbFBhY2thZ2UuY3JlYXRlUGFja2FnZUNvbnRlbnRzKCk7DQorCQl0aGVNb2RpZmllclBhY2thZ2UuY3JlYXRlUGFja2FnZUNvbnRlbnRzKCk7DQorCQl0aGVQcmVkaWNhdGVQYWNrYWdlLmNyZWF0ZVBhY2thZ2VDb250ZW50cygpOw0KKwkJdGhlU2NlbmFyaW9QYWNrYWdlLmNyZWF0ZVBhY2thZ2VDb250ZW50cygpOw0KKwkJdGhlU2VxdWVuY2VyUGFja2FnZS5jcmVhdGVQYWNrYWdlQ29udGVudHMoKTsNCisJCXRoZVRyaWdnZXJQYWNrYWdlLmNyZWF0ZVBhY2thZ2VDb250ZW50cygpOw0KKwkJdGhlTG9nZ2VyUGFja2FnZS5jcmVhdGVQYWNrYWdlQ29udGVudHMoKTsNCisNCisJCS8vIEluaXRpYWxpemUgY3JlYXRlZCBtZXRhLWRhdGENCisJCXRoZVNvbHZlclBhY2thZ2UuaW5pdGlhbGl6ZVBhY2thZ2VDb250ZW50cygpOw0KKwkJdGhlQ29tbW9uUGFja2FnZS5pbml0aWFsaXplUGFja2FnZUNvbnRlbnRzKCk7DQorCQl0aGVFeHBlcmltZW50UGFja2FnZS5pbml0aWFsaXplUGFja2FnZUNvbnRlbnRzKCk7DQorCQl0aGVHcmFwaFBhY2thZ2UuaW5pdGlhbGl6ZVBhY2thZ2VDb250ZW50cygpOw0KKwkJdGhlTW9kZWxQYWNrYWdlLmluaXRpYWxpemVQYWNrYWdlQ29udGVudHMoKTsNCisJCXRoZU1vZGlmaWVyUGFja2FnZS5pbml0aWFsaXplUGFja2FnZUNvbnRlbnRzKCk7DQorCQl0aGVQcmVkaWNhdGVQYWNrYWdlLmluaXRpYWxpemVQYWNrYWdlQ29udGVudHMoKTsNCisJCXRoZVNjZW5hcmlvUGFja2FnZS5pbml0aWFsaXplUGFja2FnZUNvbnRlbnRzKCk7DQorCQl0aGVTZXF1ZW5jZXJQYWNrYWdlLmluaXRpYWxpemVQYWNrYWdlQ29udGVudHMoKTsNCisJCXRoZVRyaWdnZXJQYWNrYWdlLmluaXRpYWxpemVQYWNrYWdlQ29udGVudHMoKTsNCisJCXRoZUxvZ2dlclBhY2thZ2UuaW5pdGlhbGl6ZVBhY2thZ2VDb250ZW50cygpOw0KKw0KKwkJLy8gTWFyayBtZXRhLWRhdGEgdG8gaW5kaWNhdGUgaXQgY2FuJ3QgYmUgY2hhbmdlZA0KKwkJdGhlU29sdmVyUGFja2FnZS5mcmVlemUoKTsNCisNCisgIA0KKwkJLy8gVXBkYXRlIHRoZSByZWdpc3RyeSBhbmQgcmV0dXJuIHRoZSBwYWNrYWdlDQorCQlFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5wdXQoU29sdmVyUGFja2FnZS5lTlNfVVJJLCB0aGVTb2x2ZXJQYWNrYWdlKTsNCisJCXJldHVybiB0aGVTb2x2ZXJQYWNrYWdlOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIEVDbGFzcyBnZXRTb2x2ZXIoKSB7DQorCQlyZXR1cm4gc29sdmVyRUNsYXNzOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIEVBdHRyaWJ1dGUgZ2V0U29sdmVyX0RlY29yYXRvcnMoKSB7DQorCQlyZXR1cm4gKEVBdHRyaWJ1dGUpc29sdmVyRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMCk7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgRUF0dHJpYnV0ZSBnZXRTb2x2ZXJfSW5pdGlhbGl6ZWQoKSB7DQorCQlyZXR1cm4gKEVBdHRyaWJ1dGUpc29sdmVyRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMSk7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgRVJlZmVyZW5jZSBnZXRTb2x2ZXJfUGFydGl0aW9uZXIoKSB7DQorCQlyZXR1cm4gKEVSZWZlcmVuY2Upc29sdmVyRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMik7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgU29sdmVyRmFjdG9yeSBnZXRTb2x2ZXJGYWN0b3J5KCkgew0KKwkJcmV0dXJuIChTb2x2ZXJGYWN0b3J5KWdldEVGYWN0b3J5SW5zdGFuY2UoKTsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByaXZhdGUgYm9vbGVhbiBpc0NyZWF0ZWQgPSBmYWxzZTsNCisNCisJLyoqDQorCSAqIENyZWF0ZXMgdGhlIG1ldGEtbW9kZWwgb2JqZWN0cyBmb3IgdGhlIHBhY2thZ2UuICBUaGlzIG1ldGhvZCBpcw0KKwkgKiBndWFyZGVkIHRvIGhhdmUgbm8gYWZmZWN0IG9uIGFueSBpbnZvY2F0aW9uIGJ1dCBpdHMgZmlyc3QuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgdm9pZCBjcmVhdGVQYWNrYWdlQ29udGVudHMoKSB7DQorCQlpZiAoaXNDcmVhdGVkKSByZXR1cm47DQorCQlpc0NyZWF0ZWQgPSB0cnVlOw0KKw0KKwkJLy8gQ3JlYXRlIGNsYXNzZXMgYW5kIHRoZWlyIGZlYXR1cmVzDQorCQlzb2x2ZXJFQ2xhc3MgPSBjcmVhdGVFQ2xhc3MoU09MVkVSKTsNCisJCWNyZWF0ZUVBdHRyaWJ1dGUoc29sdmVyRUNsYXNzLCBTT0xWRVJfX0RFQ09SQVRPUlMpOw0KKwkJY3JlYXRlRUF0dHJpYnV0ZShzb2x2ZXJFQ2xhc3MsIFNPTFZFUl9fSU5JVElBTElaRUQpOw0KKwkJY3JlYXRlRVJlZmVyZW5jZShzb2x2ZXJFQ2xhc3MsIFNPTFZFUl9fUEFSVElUSU9ORVIpOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJpdmF0ZSBib29sZWFuIGlzSW5pdGlhbGl6ZWQgPSBmYWxzZTsNCisNCisJLyoqDQorCSAqIENvbXBsZXRlIHRoZSBpbml0aWFsaXphdGlvbiBvZiB0aGUgcGFja2FnZSBhbmQgaXRzIG1ldGEtbW9kZWwuICBUaGlzDQorCSAqIG1ldGhvZCBpcyBndWFyZGVkIHRvIGhhdmUgbm8gYWZmZWN0IG9uIGFueSBpbnZvY2F0aW9uIGJ1dCBpdHMgZmlyc3QuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgdm9pZCBpbml0aWFsaXplUGFja2FnZUNvbnRlbnRzKCkgew0KKwkJaWYgKGlzSW5pdGlhbGl6ZWQpIHJldHVybjsNCisJCWlzSW5pdGlhbGl6ZWQgPSB0cnVlOw0KKw0KKwkJLy8gSW5pdGlhbGl6ZSBwYWNrYWdlDQorCQlzZXROYW1lKGVOQU1FKTsNCisJCXNldE5zUHJlZml4KGVOU19QUkVGSVgpOw0KKwkJc2V0TnNVUkkoZU5TX1VSSSk7DQorDQorCQkvLyBPYnRhaW4gb3RoZXIgZGVwZW5kZW50IHBhY2thZ2VzDQorCQlDb21tb25QYWNrYWdlIHRoZUNvbW1vblBhY2thZ2UgPSAoQ29tbW9uUGFja2FnZSlFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShDb21tb25QYWNrYWdlLmVOU19VUkkpOw0KKwkJRWNvcmVQYWNrYWdlIHRoZUVjb3JlUGFja2FnZSA9IChFY29yZVBhY2thZ2UpRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RVBhY2thZ2UoRWNvcmVQYWNrYWdlLmVOU19VUkkpOw0KKwkJTW9kZWxQYWNrYWdlIHRoZU1vZGVsUGFja2FnZSA9IChNb2RlbFBhY2thZ2UpRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RVBhY2thZ2UoTW9kZWxQYWNrYWdlLmVOU19VUkkpOw0KKwkJR3JhcGhQYWNrYWdlIHRoZUdyYXBoUGFja2FnZSA9IChHcmFwaFBhY2thZ2UpRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RVBhY2thZ2UoR3JhcGhQYWNrYWdlLmVOU19VUkkpOw0KKw0KKwkJLy8gQ3JlYXRlIHR5cGUgcGFyYW1ldGVycw0KKw0KKwkJLy8gU2V0IGJvdW5kcyBmb3IgdHlwZSBwYXJhbWV0ZXJzDQorDQorCQkvLyBBZGQgc3VwZXJ0eXBlcyB0byBjbGFzc2VzDQorCQlzb2x2ZXJFQ2xhc3MuZ2V0RVN1cGVyVHlwZXMoKS5hZGQodGhlQ29tbW9uUGFja2FnZS5nZXRJZGVudGlmaWFibGUoKSk7DQorDQorCQkvLyBJbml0aWFsaXplIGNsYXNzZXMgYW5kIGZlYXR1cmVzOyBhZGQgb3BlcmF0aW9ucyBhbmQgcGFyYW1ldGVycw0KKwkJaW5pdEVDbGFzcyhzb2x2ZXJFQ2xhc3MsIFNvbHZlci5jbGFzcywgIlNvbHZlciIsICFJU19BQlNUUkFDVCwgIUlTX0lOVEVSRkFDRSwgSVNfR0VORVJBVEVEX0lOU1RBTkNFX0NMQVNTKTsgLy8kTk9OLU5MUy0xJA0KKwkJRUdlbmVyaWNUeXBlIGcxID0gY3JlYXRlRUdlbmVyaWNUeXBlKHRoZUVjb3JlUGFja2FnZS5nZXRFRUxpc3QoKSk7DQorCQlFR2VuZXJpY1R5cGUgZzIgPSBjcmVhdGVFR2VuZXJpY1R5cGUodGhlTW9kZWxQYWNrYWdlLmdldERlY29yYXRvcigpKTsNCisJCWcxLmdldEVUeXBlQXJndW1lbnRzKCkuYWRkKGcyKTsNCisJCWluaXRFQXR0cmlidXRlKGdldFNvbHZlcl9EZWNvcmF0b3JzKCksIGcxLCAiZGVjb3JhdG9ycyIsIG51bGwsIDAsIDEsIFNvbHZlci5jbGFzcywgSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOyAvLyROT04tTkxTLTEkDQorCQlpbml0RUF0dHJpYnV0ZShnZXRTb2x2ZXJfSW5pdGlhbGl6ZWQoKSwgdGhlRWNvcmVQYWNrYWdlLmdldEVCb29sZWFuKCksICJpbml0aWFsaXplZCIsICJmYWxzZSIsIDAsIDEsIFNvbHZlci5jbGFzcywgSVNfVFJBTlNJRU5ULCBJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJA0KKwkJaW5pdEVSZWZlcmVuY2UoZ2V0U29sdmVyX1BhcnRpdGlvbmVyKCksIHRoZUdyYXBoUGFja2FnZS5nZXRHcmFwaFBhcnRpdGlvbmVyKCksIG51bGwsICJwYXJ0aXRpb25lciIsIG51bGwsIDAsIDEsIFNvbHZlci5jbGFzcywgSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19DT01QT1NJVEUsIElTX1JFU09MVkVfUFJPWElFUywgIUlTX1VOU0VUVEFCTEUsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOyAvLyROT04tTkxTLTEkDQorDQorCQlFT3BlcmF0aW9uIG9wID0gYWRkRU9wZXJhdGlvbihzb2x2ZXJFQ2xhc3MsIHRoZUVjb3JlUGFja2FnZS5nZXRFQm9vbGVhbigpLCAic3RlcCIsIDAsIDEsIElTX1VOSVFVRSwgSVNfT1JERVJFRCk7IC8vJE5PTi1OTFMtMSQNCisJCWFkZEVQYXJhbWV0ZXIob3AsIHRoZU1vZGVsUGFja2FnZS5nZXRTVEVNVGltZSgpLCAidGltZSIsIDAsIDEsIElTX1VOSVFVRSwgSVNfT1JERVJFRCk7IC8vJE5PTi1OTFMtMSQNCisJCWFkZEVQYXJhbWV0ZXIob3AsIHRoZUVjb3JlUGFja2FnZS5nZXRFTG9uZygpLCAidGltZURlbHRhIiwgMCwgMSwgSVNfVU5JUVVFLCBJU19PUkRFUkVEKTsgLy8kTk9OLU5MUy0xJA0KKwkJYWRkRVBhcmFtZXRlcihvcCwgdGhlRWNvcmVQYWNrYWdlLmdldEVJbnQoKSwgImN5Y2xlIiwgMCwgMSwgSVNfVU5JUVVFLCBJU19PUkRFUkVEKTsgLy8kTk9OLU5MUy0xJA0KKw0KKwkJYWRkRU9wZXJhdGlvbihzb2x2ZXJFQ2xhc3MsIG51bGwsICJyZXNldCIsIDAsIDEsIElTX1VOSVFVRSwgSVNfT1JERVJFRCk7IC8vJE5PTi1OTFMtMSQNCisNCisJCS8vIENyZWF0ZSByZXNvdXJjZQ0KKwkJY3JlYXRlUmVzb3VyY2UoZU5TX1VSSSk7DQorCX0NCisNCit9IC8vU29sdmVyUGFja2FnZUltcGwNCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3NvbHZlci9wcm92aWRlci9Tb2x2ZXJJdGVtUHJvdmlkZXIuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvc29sdmVyL3Byb3ZpZGVyL1NvbHZlckl0ZW1Qcm92aWRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk2OWRiMjQKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3NvbHZlci9wcm92aWRlci9Tb2x2ZXJJdGVtUHJvdmlkZXIuamF2YQpAQCAtMCwwICsxLDIwNCBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc29sdmVyLnByb3ZpZGVyOw0KKw0KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorICogQ29weXJpZ2h0IChjKSAyMDA5IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLg0KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMNCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjANCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdA0KKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sDQorICoNCisgKiBDb250cmlidXRvcnM6DQorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbg0KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KKw0KKw0KK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsNCitpbXBvcnQgamF2YS51dGlsLkxpc3Q7DQorDQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LkFkYXB0ZXJGYWN0b3J5Ow0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb247DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5SZXNvdXJjZUxvY2F0b3I7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5VUkk7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkNvbXBvc2VhYmxlQWRhcHRlckZhY3Rvcnk7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklFZGl0aW5nRG9tYWluSXRlbVByb3ZpZGVyOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbUxhYmVsUHJvdmlkZXI7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtUHJvcGVydHlEZXNjcmlwdG9yOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbVByb3BlcnR5U291cmNlOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JU3RydWN0dXJlZEl0ZW1Db250ZW50UHJvdmlkZXI7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklUcmVlSXRlbUNvbnRlbnRQcm92aWRlcjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSXRlbVByb3BlcnR5RGVzY3JpcHRvcjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuVmlld2VyTm90aWZpY2F0aW9uOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLnByb3ZpZGVyLkNvcmVFZGl0UGx1Z2luOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLnByb3ZpZGVyLklkZW50aWZpYWJsZUl0ZW1Qcm92aWRlcjsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNvbHZlci5Tb2x2ZXI7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zb2x2ZXIuU29sdmVyUGFja2FnZTsNCisNCisvKioNCisgKiBUaGlzIGlzIHRoZSBpdGVtIHByb3ZpZGVyIGFkYXB0ZXIgZm9yIGEge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zb2x2ZXIuU29sdmVyfSBvYmplY3QuDQorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisgKiBAZ2VuZXJhdGVkDQorICovDQorcHVibGljIGNsYXNzIFNvbHZlckl0ZW1Qcm92aWRlcg0KKwlleHRlbmRzIElkZW50aWZpYWJsZUl0ZW1Qcm92aWRlcg0KKwlpbXBsZW1lbnRzDQorCQlJRWRpdGluZ0RvbWFpbkl0ZW1Qcm92aWRlciwNCisJCUlTdHJ1Y3R1cmVkSXRlbUNvbnRlbnRQcm92aWRlciwNCisJCUlUcmVlSXRlbUNvbnRlbnRQcm92aWRlciwNCisJCUlJdGVtTGFiZWxQcm92aWRlciwNCisJCUlJdGVtUHJvcGVydHlTb3VyY2Ugew0KKwkvKioNCisJICogVGhpcyBjb25zdHJ1Y3RzIGFuIGluc3RhbmNlIGZyb20gYSBmYWN0b3J5IGFuZCBhIG5vdGlmaWVyLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIFNvbHZlckl0ZW1Qcm92aWRlcihBZGFwdGVyRmFjdG9yeSBhZGFwdGVyRmFjdG9yeSkgew0KKwkJc3VwZXIoYWRhcHRlckZhY3RvcnkpOw0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIHJldHVybnMgdGhlIHByb3BlcnR5IGRlc2NyaXB0b3JzIGZvciB0aGUgYWRhcHRlZCBjbGFzcy4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCUBPdmVycmlkZQ0KKwlwdWJsaWMgTGlzdDxJSXRlbVByb3BlcnR5RGVzY3JpcHRvcj4gZ2V0UHJvcGVydHlEZXNjcmlwdG9ycyhPYmplY3Qgb2JqZWN0KSB7DQorCQlpZiAoaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMgPT0gbnVsbCkgew0KKwkJCXN1cGVyLmdldFByb3BlcnR5RGVzY3JpcHRvcnMob2JqZWN0KTsNCisNCisJCQlhZGREZWNvcmF0b3JzUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCk7DQorCQkJYWRkUGFydGl0aW9uZXJQcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0KTsNCisJCX0NCisJCXJldHVybiBpdGVtUHJvcGVydHlEZXNjcmlwdG9yczsNCisJfQ0KKw0KKwkvKioNCisJICogVGhpcyBhZGRzIGEgcHJvcGVydHkgZGVzY3JpcHRvciBmb3IgdGhlIERlY29yYXRvcnMgZmVhdHVyZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCB2b2lkIGFkZERlY29yYXRvcnNQcm9wZXJ0eURlc2NyaXB0b3IoT2JqZWN0IG9iamVjdCkgew0KKwkJaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMuYWRkDQorCQkJKGNyZWF0ZUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3INCisJCQkJKCgoQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSlhZGFwdGVyRmFjdG9yeSkuZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCksDQorCQkJCSBnZXRSZXNvdXJjZUxvY2F0b3IoKSwNCisJCQkJIGdldFN0cmluZygiX1VJX1NvbHZlcl9kZWNvcmF0b3JzX2ZlYXR1cmUiKSwgLy8kTk9OLU5MUy0xJA0KKwkJCQkgZ2V0U3RyaW5nKCJfVUlfUHJvcGVydHlEZXNjcmlwdG9yX2Rlc2NyaXB0aW9uIiwgIl9VSV9Tb2x2ZXJfZGVjb3JhdG9yc19mZWF0dXJlIiwgIl9VSV9Tb2x2ZXJfdHlwZSIpLCAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQgLy8kTk9OLU5MUy0zJA0KKwkJCQkgU29sdmVyUGFja2FnZS5MaXRlcmFscy5TT0xWRVJfX0RFQ09SQVRPUlMsDQorCQkJCSB0cnVlLA0KKwkJCQkgZmFsc2UsDQorCQkJCSB0cnVlLA0KKwkJCQkgSXRlbVByb3BlcnR5RGVzY3JpcHRvci5HRU5FUklDX1ZBTFVFX0lNQUdFLA0KKwkJCQkgbnVsbCwNCisJCQkJIG51bGwpKTsNCisJfQ0KKw0KKwkvKioNCisJICogVGhpcyBhZGRzIGEgcHJvcGVydHkgZGVzY3JpcHRvciBmb3IgdGhlIFBhcnRpdGlvbmVyIGZlYXR1cmUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgdm9pZCBhZGRQYXJ0aXRpb25lclByb3BlcnR5RGVzY3JpcHRvcihPYmplY3Qgb2JqZWN0KSB7DQorCQlpdGVtUHJvcGVydHlEZXNjcmlwdG9ycy5hZGQNCisJCQkoY3JlYXRlSXRlbVByb3BlcnR5RGVzY3JpcHRvcg0KKwkJCQkoKChDb21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5KWFkYXB0ZXJGYWN0b3J5KS5nZXRSb290QWRhcHRlckZhY3RvcnkoKSwNCisJCQkJIGdldFJlc291cmNlTG9jYXRvcigpLA0KKwkJCQkgZ2V0U3RyaW5nKCJfVUlfU29sdmVyX3BhcnRpdGlvbmVyX2ZlYXR1cmUiKSwgLy8kTk9OLU5MUy0xJA0KKwkJCQkgZ2V0U3RyaW5nKCJfVUlfUHJvcGVydHlEZXNjcmlwdG9yX2Rlc2NyaXB0aW9uIiwgIl9VSV9Tb2x2ZXJfcGFydGl0aW9uZXJfZmVhdHVyZSIsICJfVUlfU29sdmVyX3R5cGUiKSwgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkIC8vJE5PTi1OTFMtMyQNCisJCQkJIFNvbHZlclBhY2thZ2UuTGl0ZXJhbHMuU09MVkVSX19QQVJUSVRJT05FUiwNCisJCQkJIHRydWUsDQorCQkJCSBmYWxzZSwNCisJCQkJIHRydWUsDQorCQkJCSBudWxsLA0KKwkJCQkgbnVsbCwNCisJCQkJIG51bGwpKTsNCisJfQ0KKw0KKwkvKioNCisJICogVGhpcyByZXR1cm5zIFNvbHZlci5naWYuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlAT3ZlcnJpZGUNCisJcHVibGljIE9iamVjdCBnZXRJbWFnZShPYmplY3Qgb2JqZWN0KSB7DQorCQlyZXR1cm4gb3ZlcmxheUltYWdlKG9iamVjdCwgZ2V0UmVzb3VyY2VMb2NhdG9yKCkuZ2V0SW1hZ2UoImZ1bGwvb2JqMTYvU29sdmVyIikpOyAvLyROT04tTkxTLTEkDQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgcmV0dXJucyB0aGUgbGFiZWwgdGV4dCBmb3IgdGhlIGFkYXB0ZWQgY2xhc3MuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlAT3ZlcnJpZGUNCisJcHVibGljIFN0cmluZyBnZXRUZXh0KE9iamVjdCBvYmplY3QpIHsNCisJCVVSSSBsYWJlbFZhbHVlID0gKChTb2x2ZXIpb2JqZWN0KS5nZXRVUkkoKTsNCisJCVN0cmluZyBsYWJlbCA9IGxhYmVsVmFsdWUgPT0gbnVsbCA/IG51bGwgOiBsYWJlbFZhbHVlLnRvU3RyaW5nKCk7DQorCQlyZXR1cm4gbGFiZWwgPT0gbnVsbCB8fCBsYWJlbC5sZW5ndGgoKSA9PSAwID8NCisJCQlnZXRTdHJpbmcoIl9VSV9Tb2x2ZXJfdHlwZSIpIDogLy8kTk9OLU5MUy0xJA0KKwkJCWdldFN0cmluZygiX1VJX1NvbHZlcl90eXBlIikgKyAiICIgKyBsYWJlbDsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkDQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgcmV0dXJucyB0aGUgbGFiZWwgdGV4dCBmb3IgdGhlIGFkYXB0ZWQgY2xhc3MuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlAT3ZlcnJpZGUNCisJcHVibGljIFN0cmluZyBnZXRUZXh0R2VuKE9iamVjdCBvYmplY3QpIHsNCisJCVVSSSBsYWJlbFZhbHVlID0gKChTb2x2ZXIpb2JqZWN0KS5nZXRVUkkoKTsNCisJCVN0cmluZyBsYWJlbCA9IGxhYmVsVmFsdWUgPT0gbnVsbCA/IG51bGwgOiBsYWJlbFZhbHVlLnRvU3RyaW5nKCk7DQorCQlyZXR1cm4gbGFiZWwgPT0gbnVsbCB8fCBsYWJlbC5sZW5ndGgoKSA9PSAwID8NCisJCQlnZXRTdHJpbmcoIl9VSV9Tb2x2ZXJfdHlwZSIpIDogLy8kTk9OLU5MUy0xJA0KKwkJCWdldFN0cmluZygiX1VJX1NvbHZlcl90eXBlIikgKyAiICIgKyBsYWJlbDsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkDQorCX0NCisJDQorCS8qKg0KKwkgKiBUaGlzIGhhbmRsZXMgbW9kZWwgbm90aWZpY2F0aW9ucyBieSBjYWxsaW5nIHtAbGluayAjdXBkYXRlQ2hpbGRyZW59IHRvIHVwZGF0ZSBhbnkgY2FjaGVkDQorCSAqIGNoaWxkcmVuIGFuZCBieSBjcmVhdGluZyBhIHZpZXdlciBub3RpZmljYXRpb24sIHdoaWNoIGl0IHBhc3NlcyB0byB7QGxpbmsgI2ZpcmVOb3RpZnlDaGFuZ2VkfS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCUBPdmVycmlkZQ0KKwlwdWJsaWMgdm9pZCBub3RpZnlDaGFuZ2VkKE5vdGlmaWNhdGlvbiBub3RpZmljYXRpb24pIHsNCisJCXVwZGF0ZUNoaWxkcmVuKG5vdGlmaWNhdGlvbik7DQorDQorCQlzd2l0Y2ggKG5vdGlmaWNhdGlvbi5nZXRGZWF0dXJlSUQoU29sdmVyLmNsYXNzKSkgew0KKwkJCWNhc2UgU29sdmVyUGFja2FnZS5TT0xWRVJfX0lOSVRJQUxJWkVEOg0KKwkJCQlmaXJlTm90aWZ5Q2hhbmdlZChuZXcgVmlld2VyTm90aWZpY2F0aW9uKG5vdGlmaWNhdGlvbiwgbm90aWZpY2F0aW9uLmdldE5vdGlmaWVyKCksIGZhbHNlLCB0cnVlKSk7DQorCQkJCXJldHVybjsNCisJCX0NCisJCXN1cGVyLm5vdGlmeUNoYW5nZWQobm90aWZpY2F0aW9uKTsNCisJfQ0KKw0KKwkvKioNCisJICogVGhpcyBhZGRzIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuZWRpdC5jb21tYW5kLkNvbW1hbmRQYXJhbWV0ZXJ9cyBkZXNjcmliaW5nIHRoZSBjaGlsZHJlbg0KKwkgKiB0aGF0IGNhbiBiZSBjcmVhdGVkIHVuZGVyIHRoaXMgb2JqZWN0Lg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJQE92ZXJyaWRlDQorCXByb3RlY3RlZCB2b2lkIGNvbGxlY3ROZXdDaGlsZERlc2NyaXB0b3JzKENvbGxlY3Rpb248T2JqZWN0PiBuZXdDaGlsZERlc2NyaXB0b3JzLCBPYmplY3Qgb2JqZWN0KSB7DQorCQlzdXBlci5jb2xsZWN0TmV3Q2hpbGREZXNjcmlwdG9ycyhuZXdDaGlsZERlc2NyaXB0b3JzLCBvYmplY3QpOw0KKwl9DQorDQorCS8qKg0KKwkgKiBSZXR1cm4gdGhlIHJlc291cmNlIGxvY2F0b3IgZm9yIHRoaXMgaXRlbSBwcm92aWRlcidzIHJlc291cmNlcy4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCUBPdmVycmlkZQ0KKwlwdWJsaWMgUmVzb3VyY2VMb2NhdG9yIGdldFJlc291cmNlTG9jYXRvcigpIHsNCisJCXJldHVybiBDb3JlRWRpdFBsdWdpbi5JTlNUQU5DRTsNCisJfQ0KKw0KK30NCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3NvbHZlci9wcm92aWRlci9Tb2x2ZXJJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeS5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9zb2x2ZXIvcHJvdmlkZXIvU29sdmVySXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYjllZmVkCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9zb2x2ZXIvcHJvdmlkZXIvU29sdmVySXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkuamF2YQpAQCAtMCwwICsxLDIwNyBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc29sdmVyLnByb3ZpZGVyOw0KKw0KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorICogQ29weXJpZ2h0IChjKSAyMDA5IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLg0KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMNCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjANCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdA0KKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sDQorICoNCisgKiBDb250cmlidXRvcnM6DQorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbg0KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KKw0KK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0Ow0KK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsNCisNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuQWRhcHRlcjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmllcjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuQ2hhbmdlTm90aWZpZXI7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkNvbXBvc2VhYmxlQWRhcHRlckZhY3Rvcnk7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkNvbXBvc2VkQWRhcHRlckZhY3Rvcnk7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklDaGFuZ2VOb3RpZmllcjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSURpc3Bvc2FibGU7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklFZGl0aW5nRG9tYWluSXRlbVByb3ZpZGVyOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbUxhYmVsUHJvdmlkZXI7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtUHJvcGVydHlTb3VyY2U7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklOb3RpZnlDaGFuZ2VkTGlzdGVuZXI7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklTdHJ1Y3R1cmVkSXRlbUNvbnRlbnRQcm92aWRlcjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVRyZWVJdGVtQ29udGVudFByb3ZpZGVyOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc29sdmVyLnV0aWwuU29sdmVyQWRhcHRlckZhY3Rvcnk7DQorDQorLyoqDQorICogVGhpcyBpcyB0aGUgZmFjdG9yeSB0aGF0IGlzIHVzZWQgdG8gcHJvdmlkZSB0aGUgaW50ZXJmYWNlcyBuZWVkZWQgdG8gc3VwcG9ydCBWaWV3ZXJzLg0KKyAqIFRoZSBhZGFwdGVycyBnZW5lcmF0ZWQgYnkgdGhpcyBmYWN0b3J5IGNvbnZlcnQgRU1GIGFkYXB0ZXIgbm90aWZpY2F0aW9ucyBpbnRvIGNhbGxzIHRvIHtAbGluayAjZmlyZU5vdGlmeUNoYW5nZWQgZmlyZU5vdGlmeUNoYW5nZWR9Lg0KKyAqIFRoZSBhZGFwdGVycyBhbHNvIHN1cHBvcnQgRWNsaXBzZSBwcm9wZXJ0eSBzaGVldHMuDQorICogTm90ZSB0aGF0IG1vc3Qgb2YgdGhlIGFkYXB0ZXJzIGFyZSBzaGFyZWQgYW1vbmcgbXVsdGlwbGUgaW5zdGFuY2VzLg0KKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorICogQGdlbmVyYXRlZA0KKyAqLw0KK3B1YmxpYyBjbGFzcyBTb2x2ZXJJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSBleHRlbmRzIFNvbHZlckFkYXB0ZXJGYWN0b3J5IGltcGxlbWVudHMgQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSwgSUNoYW5nZU5vdGlmaWVyLCBJRGlzcG9zYWJsZSB7DQorCS8qKg0KKwkgKiBUaGlzIGtlZXBzIHRyYWNrIG9mIHRoZSByb290IGFkYXB0ZXIgZmFjdG9yeSB0aGF0IGRlbGVnYXRlcyB0byB0aGlzIGFkYXB0ZXIgZmFjdG9yeS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCBDb21wb3NlZEFkYXB0ZXJGYWN0b3J5IHBhcmVudEFkYXB0ZXJGYWN0b3J5Ow0KKw0KKwkvKioNCisJICogVGhpcyBpcyB1c2VkIHRvIGltcGxlbWVudCB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUNoYW5nZU5vdGlmaWVyfS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCBJQ2hhbmdlTm90aWZpZXIgY2hhbmdlTm90aWZpZXIgPSBuZXcgQ2hhbmdlTm90aWZpZXIoKTsNCisNCisJLyoqDQorCSAqIFRoaXMga2VlcHMgdHJhY2sgb2YgYWxsIHRoZSBzdXBwb3J0ZWQgdHlwZXMgY2hlY2tlZCBieSB7QGxpbmsgI2lzRmFjdG9yeUZvclR5cGUgaXNGYWN0b3J5Rm9yVHlwZX0uDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgQ29sbGVjdGlvbjxPYmplY3Q+IHN1cHBvcnRlZFR5cGVzID0gbmV3IEFycmF5TGlzdDxPYmplY3Q+KCk7DQorDQorCS8qKg0KKwkgKiBUaGlzIGNvbnN0cnVjdHMgYW4gaW5zdGFuY2UuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgU29sdmVySXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkoKSB7DQorCQlzdXBwb3J0ZWRUeXBlcy5hZGQoSUVkaXRpbmdEb21haW5JdGVtUHJvdmlkZXIuY2xhc3MpOw0KKwkJc3VwcG9ydGVkVHlwZXMuYWRkKElTdHJ1Y3R1cmVkSXRlbUNvbnRlbnRQcm92aWRlci5jbGFzcyk7DQorCQlzdXBwb3J0ZWRUeXBlcy5hZGQoSVRyZWVJdGVtQ29udGVudFByb3ZpZGVyLmNsYXNzKTsNCisJCXN1cHBvcnRlZFR5cGVzLmFkZChJSXRlbUxhYmVsUHJvdmlkZXIuY2xhc3MpOw0KKwkJc3VwcG9ydGVkVHlwZXMuYWRkKElJdGVtUHJvcGVydHlTb3VyY2UuY2xhc3MpOw0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIGtlZXBzIHRyYWNrIG9mIHRoZSBvbmUgYWRhcHRlciB1c2VkIGZvciBhbGwge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zb2x2ZXIuU29sdmVyfSBpbnN0YW5jZXMuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgU29sdmVySXRlbVByb3ZpZGVyIHNvbHZlckl0ZW1Qcm92aWRlcjsNCisNCisJLyoqDQorCSAqIFRoaXMgY3JlYXRlcyBhbiBhZGFwdGVyIGZvciBhIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc29sdmVyLlNvbHZlcn0uDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlAT3ZlcnJpZGUNCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlU29sdmVyQWRhcHRlcigpIHsNCisJCWlmIChzb2x2ZXJJdGVtUHJvdmlkZXIgPT0gbnVsbCkgew0KKwkJCXNvbHZlckl0ZW1Qcm92aWRlciA9IG5ldyBTb2x2ZXJJdGVtUHJvdmlkZXIodGhpcyk7DQorCQl9DQorDQorCQlyZXR1cm4gc29sdmVySXRlbVByb3ZpZGVyOw0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIHJldHVybnMgdGhlIHJvb3QgYWRhcHRlciBmYWN0b3J5IHRoYXQgY29udGFpbnMgdGhpcyBmYWN0b3J5Lg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnkgZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCkgew0KKwkJcmV0dXJuIHBhcmVudEFkYXB0ZXJGYWN0b3J5ID09IG51bGwgPyB0aGlzIDogcGFyZW50QWRhcHRlckZhY3RvcnkuZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCk7DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgc2V0cyB0aGUgY29tcG9zZWQgYWRhcHRlciBmYWN0b3J5IHRoYXQgY29udGFpbnMgdGhpcyBmYWN0b3J5Lg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIHZvaWQgc2V0UGFyZW50QWRhcHRlckZhY3RvcnkoQ29tcG9zZWRBZGFwdGVyRmFjdG9yeSBwYXJlbnRBZGFwdGVyRmFjdG9yeSkgew0KKwkJdGhpcy5wYXJlbnRBZGFwdGVyRmFjdG9yeSA9IHBhcmVudEFkYXB0ZXJGYWN0b3J5Ow0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJQE92ZXJyaWRlDQorCXB1YmxpYyBib29sZWFuIGlzRmFjdG9yeUZvclR5cGUoT2JqZWN0IHR5cGUpIHsNCisJCXJldHVybiBzdXBwb3J0ZWRUeXBlcy5jb250YWlucyh0eXBlKSB8fCBzdXBlci5pc0ZhY3RvcnlGb3JUeXBlKHR5cGUpOw0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIGltcGxlbWVudGF0aW9uIHN1YnN0aXR1dGVzIHRoZSBmYWN0b3J5IGl0c2VsZiBhcyB0aGUga2V5IGZvciB0aGUgYWRhcHRlci4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCUBPdmVycmlkZQ0KKwlwdWJsaWMgQWRhcHRlciBhZGFwdChOb3RpZmllciBub3RpZmllciwgT2JqZWN0IHR5cGUpIHsNCisJCXJldHVybiBzdXBlci5hZGFwdChub3RpZmllciwgdGhpcyk7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlAU3VwcHJlc3NXYXJuaW5ncygidW5jaGVja2VkIikNCisJQE92ZXJyaWRlDQorCXB1YmxpYyBPYmplY3QgYWRhcHQoT2JqZWN0IG9iamVjdCwgT2JqZWN0IHR5cGUpIHsNCisJCWlmIChpc0ZhY3RvcnlGb3JUeXBlKHR5cGUpKSB7DQorCQkJT2JqZWN0IGFkYXB0ZXIgPSBzdXBlci5hZGFwdChvYmplY3QsIHR5cGUpOw0KKwkJCWlmICghKHR5cGUgaW5zdGFuY2VvZiBDbGFzczw/PikgfHwgKCgoQ2xhc3M8Pz4pdHlwZSkuaXNJbnN0YW5jZShhZGFwdGVyKSkpIHsNCisJCQkJcmV0dXJuIGFkYXB0ZXI7DQorCQkJfQ0KKwkJfQ0KKw0KKwkJcmV0dXJuIG51bGw7DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgYWRkcyBhIGxpc3RlbmVyLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIHZvaWQgYWRkTGlzdGVuZXIoSU5vdGlmeUNoYW5nZWRMaXN0ZW5lciBub3RpZnlDaGFuZ2VkTGlzdGVuZXIpIHsNCisJCWNoYW5nZU5vdGlmaWVyLmFkZExpc3RlbmVyKG5vdGlmeUNoYW5nZWRMaXN0ZW5lcik7DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgcmVtb3ZlcyBhIGxpc3RlbmVyLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIHZvaWQgcmVtb3ZlTGlzdGVuZXIoSU5vdGlmeUNoYW5nZWRMaXN0ZW5lciBub3RpZnlDaGFuZ2VkTGlzdGVuZXIpIHsNCisJCWNoYW5nZU5vdGlmaWVyLnJlbW92ZUxpc3RlbmVyKG5vdGlmeUNoYW5nZWRMaXN0ZW5lcik7DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgZGVsZWdhdGVzIHRvIHtAbGluayAjY2hhbmdlTm90aWZpZXJ9IGFuZCB0byB7QGxpbmsgI3BhcmVudEFkYXB0ZXJGYWN0b3J5fS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyB2b2lkIGZpcmVOb3RpZnlDaGFuZ2VkKE5vdGlmaWNhdGlvbiBub3RpZmljYXRpb24pIHsNCisJCWNoYW5nZU5vdGlmaWVyLmZpcmVOb3RpZnlDaGFuZ2VkKG5vdGlmaWNhdGlvbik7DQorDQorCQlpZiAocGFyZW50QWRhcHRlckZhY3RvcnkgIT0gbnVsbCkgew0KKwkJCXBhcmVudEFkYXB0ZXJGYWN0b3J5LmZpcmVOb3RpZnlDaGFuZ2VkKG5vdGlmaWNhdGlvbik7DQorCQl9DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgZGlzcG9zZXMgYWxsIG9mIHRoZSBpdGVtIHByb3ZpZGVycyBjcmVhdGVkIGJ5IHRoaXMgZmFjdG9yeS4gDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgdm9pZCBkaXNwb3NlKCkgew0KKwkJaWYgKHNvbHZlckl0ZW1Qcm92aWRlciAhPSBudWxsKSBzb2x2ZXJJdGVtUHJvdmlkZXIuZGlzcG9zZSgpOw0KKwl9DQorDQorfQ0KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvc29sdmVyL3V0aWwvU29sdmVyQWRhcHRlckZhY3RvcnkuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvc29sdmVyL3V0aWwvU29sdmVyQWRhcHRlckZhY3RvcnkuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YTVmNzdlCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9zb2x2ZXIvdXRpbC9Tb2x2ZXJBZGFwdGVyRmFjdG9yeS5qYXZhCkBAIC0wLDAgKzEsMTgzIEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zb2x2ZXIudXRpbDsNCisNCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyAqIENvcHlyaWdodCAoYykgMjAwOSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4NCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzDQorICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wDQorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQNCisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbA0KKyAqDQorICogQ29udHJpYnV0b3JzOg0KKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24NCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCisNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuQWRhcHRlcjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpZXI7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LmltcGwuQWRhcHRlckZhY3RvcnlJbXBsOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdDsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5JZGVudGlmaWFibGU7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uU2FuaXR5Q2hlY2tlcjsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNvbHZlci5Tb2x2ZXI7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zb2x2ZXIuU29sdmVyUGFja2FnZTsNCisNCisvKioNCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKyAqIFRoZSA8Yj5BZGFwdGVyIEZhY3Rvcnk8L2I+IGZvciB0aGUgbW9kZWwuDQorICogSXQgcHJvdmlkZXMgYW4gYWRhcHRlciA8Y29kZT5jcmVhdGVYWFg8L2NvZGU+IG1ldGhvZCBmb3IgZWFjaCBjbGFzcyBvZiB0aGUgbW9kZWwuDQorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc29sdmVyLlNvbHZlclBhY2thZ2UNCisgKiBAZ2VuZXJhdGVkDQorICovDQorcHVibGljIGNsYXNzIFNvbHZlckFkYXB0ZXJGYWN0b3J5IGV4dGVuZHMgQWRhcHRlckZhY3RvcnlJbXBsIHsNCisJLyoqDQorCSAqIFRoZSBjYWNoZWQgbW9kZWwgcGFja2FnZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCBzdGF0aWMgU29sdmVyUGFja2FnZSBtb2RlbFBhY2thZ2U7DQorDQorCS8qKg0KKwkgKiBDcmVhdGVzIGFuIGluc3RhbmNlIG9mIHRoZSBhZGFwdGVyIGZhY3RvcnkuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgU29sdmVyQWRhcHRlckZhY3RvcnkoKSB7DQorCQlpZiAobW9kZWxQYWNrYWdlID09IG51bGwpIHsNCisJCQltb2RlbFBhY2thZ2UgPSBTb2x2ZXJQYWNrYWdlLmVJTlNUQU5DRTsNCisJCX0NCisJfQ0KKw0KKwkvKioNCisJICogUmV0dXJucyB3aGV0aGVyIHRoaXMgZmFjdG9yeSBpcyBhcHBsaWNhYmxlIGZvciB0aGUgdHlwZSBvZiB0aGUgb2JqZWN0Lg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgPGNvZGU+dHJ1ZTwvY29kZT4gaWYgdGhlIG9iamVjdCBpcyBlaXRoZXIgdGhlIG1vZGVsJ3MgcGFja2FnZSBvciBpcyBhbiBpbnN0YW5jZSBvYmplY3Qgb2YgdGhlIG1vZGVsLg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHJldHVybiB3aGV0aGVyIHRoaXMgZmFjdG9yeSBpcyBhcHBsaWNhYmxlIGZvciB0aGUgdHlwZSBvZiB0aGUgb2JqZWN0Lg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlAT3ZlcnJpZGUNCisJcHVibGljIGJvb2xlYW4gaXNGYWN0b3J5Rm9yVHlwZShPYmplY3Qgb2JqZWN0KSB7DQorCQlpZiAob2JqZWN0ID09IG1vZGVsUGFja2FnZSkgew0KKwkJCXJldHVybiB0cnVlOw0KKwkJfQ0KKwkJaWYgKG9iamVjdCBpbnN0YW5jZW9mIEVPYmplY3QpIHsNCisJCQlyZXR1cm4gKChFT2JqZWN0KW9iamVjdCkuZUNsYXNzKCkuZ2V0RVBhY2thZ2UoKSA9PSBtb2RlbFBhY2thZ2U7DQorCQl9DQorCQlyZXR1cm4gZmFsc2U7DQorCX0NCisNCisJLyoqDQorCSAqIFRoZSBzd2l0Y2ggdGhhdCBkZWxlZ2F0ZXMgdG8gdGhlIDxjb2RlPmNyZWF0ZVhYWDwvY29kZT4gbWV0aG9kcy4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCBTb2x2ZXJTd2l0Y2g8QWRhcHRlcj4gbW9kZWxTd2l0Y2ggPQ0KKwkJbmV3IFNvbHZlclN3aXRjaDxBZGFwdGVyPigpIHsNCisJCQlAT3ZlcnJpZGUNCisJCQlwdWJsaWMgQWRhcHRlciBjYXNlU29sdmVyKFNvbHZlciBvYmplY3QpIHsNCisJCQkJcmV0dXJuIGNyZWF0ZVNvbHZlckFkYXB0ZXIoKTsNCisJCQl9DQorCQkJQE92ZXJyaWRlDQorCQkJcHVibGljIDxUPiBBZGFwdGVyIGNhc2VDb21wYXJhYmxlKENvbXBhcmFibGU8VD4gb2JqZWN0KSB7DQorCQkJCXJldHVybiBjcmVhdGVDb21wYXJhYmxlQWRhcHRlcigpOw0KKwkJCX0NCisJCQlAT3ZlcnJpZGUNCisJCQlwdWJsaWMgQWRhcHRlciBjYXNlU2FuaXR5Q2hlY2tlcihTYW5pdHlDaGVja2VyIG9iamVjdCkgew0KKwkJCQlyZXR1cm4gY3JlYXRlU2FuaXR5Q2hlY2tlckFkYXB0ZXIoKTsNCisJCQl9DQorCQkJQE92ZXJyaWRlDQorCQkJcHVibGljIEFkYXB0ZXIgY2FzZUlkZW50aWZpYWJsZShJZGVudGlmaWFibGUgb2JqZWN0KSB7DQorCQkJCXJldHVybiBjcmVhdGVJZGVudGlmaWFibGVBZGFwdGVyKCk7DQorCQkJfQ0KKwkJCUBPdmVycmlkZQ0KKwkJCXB1YmxpYyBBZGFwdGVyIGRlZmF1bHRDYXNlKEVPYmplY3Qgb2JqZWN0KSB7DQorCQkJCXJldHVybiBjcmVhdGVFT2JqZWN0QWRhcHRlcigpOw0KKwkJCX0NCisJCX07DQorDQorCS8qKg0KKwkgKiBDcmVhdGVzIGFuIGFkYXB0ZXIgZm9yIHRoZSA8Y29kZT50YXJnZXQ8L2NvZGU+Lg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHBhcmFtIHRhcmdldCB0aGUgb2JqZWN0IHRvIGFkYXB0Lg0KKwkgKiBAcmV0dXJuIHRoZSBhZGFwdGVyIGZvciB0aGUgPGNvZGU+dGFyZ2V0PC9jb2RlPi4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJQE92ZXJyaWRlDQorCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZUFkYXB0ZXIoTm90aWZpZXIgdGFyZ2V0KSB7DQorCQlyZXR1cm4gbW9kZWxTd2l0Y2guZG9Td2l0Y2goKEVPYmplY3QpdGFyZ2V0KTsNCisJfQ0KKw0KKw0KKwkvKioNCisJICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc29sdmVyLlNvbHZlciA8ZW0+U29sdmVyPC9lbT59Jy4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOw0KKwkgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLg0KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zb2x2ZXIuU29sdmVyDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZVNvbHZlckFkYXB0ZXIoKSB7DQorCQlyZXR1cm4gbnVsbDsNCisJfQ0KKw0KKwkvKioNCisJICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBqYXZhLmxhbmcuQ29tcGFyYWJsZSA8ZW0+Q29tcGFyYWJsZTwvZW0+fScuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsNCisJICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuDQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4NCisJICogQHNlZSBqYXZhLmxhbmcuQ29tcGFyYWJsZQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVDb21wYXJhYmxlQWRhcHRlcigpIHsNCisJCXJldHVybiBudWxsOw0KKwl9DQorDQorCS8qKg0KKwkgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uU2FuaXR5Q2hlY2tlciA8ZW0+U2FuaXR5IENoZWNrZXI8L2VtPn0nLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7DQorCSAqIGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZSB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5Lg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuDQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5TYW5pdHlDaGVja2VyDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZVNhbml0eUNoZWNrZXJBZGFwdGVyKCkgew0KKwkJcmV0dXJuIG51bGw7DQorCX0NCisNCisJLyoqDQorCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5JZGVudGlmaWFibGUgPGVtPklkZW50aWZpYWJsZTwvZW0+fScuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsNCisJICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuDQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4NCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLklkZW50aWZpYWJsZQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVJZGVudGlmaWFibGVBZGFwdGVyKCkgew0KKwkJcmV0dXJuIG51bGw7DQorCX0NCisNCisJLyoqDQorCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgdGhlIGRlZmF1bHQgY2FzZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbC4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVFT2JqZWN0QWRhcHRlcigpIHsNCisJCXJldHVybiBudWxsOw0KKwl9DQorDQorfSAvL1NvbHZlckFkYXB0ZXJGYWN0b3J5DQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9zb2x2ZXIvdXRpbC9Tb2x2ZXJTd2l0Y2guamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvc29sdmVyL3V0aWwvU29sdmVyU3dpdGNoLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2RlMDU2NAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvc29sdmVyL3V0aWwvU29sdmVyU3dpdGNoLmphdmEKQEAgLTAsMCArMSwxODUgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNvbHZlci51dGlsOw0KKw0KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorICogQ29weXJpZ2h0IChjKSAyMDA5IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLg0KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMNCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjANCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdA0KKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sDQorICoNCisgKiBDb250cmlidXRvcnM6DQorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbg0KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KKw0KK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsNCisNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzczsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3Q7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uSWRlbnRpZmlhYmxlOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLlNhbml0eUNoZWNrZXI7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zb2x2ZXIuU29sdmVyOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc29sdmVyLlNvbHZlclBhY2thZ2U7DQorDQorLyoqDQorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisgKiBUaGUgPGI+U3dpdGNoPC9iPiBmb3IgdGhlIG1vZGVsJ3MgaW5oZXJpdGFuY2UgaGllcmFyY2h5Lg0KKyAqIEl0IHN1cHBvcnRzIHRoZSBjYWxsIHtAbGluayAjZG9Td2l0Y2goRU9iamVjdCkgZG9Td2l0Y2gob2JqZWN0KX0NCisgKiB0byBpbnZva2UgdGhlIDxjb2RlPmNhc2VYWFg8L2NvZGU+IG1ldGhvZCBmb3IgZWFjaCBjbGFzcyBvZiB0aGUgbW9kZWwsDQorICogc3RhcnRpbmcgd2l0aCB0aGUgYWN0dWFsIGNsYXNzIG9mIHRoZSBvYmplY3QNCisgKiBhbmQgcHJvY2VlZGluZyB1cCB0aGUgaW5oZXJpdGFuY2UgaGllcmFyY2h5DQorICogdW50aWwgYSBub24tbnVsbCByZXN1bHQgaXMgcmV0dXJuZWQsDQorICogd2hpY2ggaXMgdGhlIHJlc3VsdCBvZiB0aGUgc3dpdGNoLg0KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKyAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNvbHZlci5Tb2x2ZXJQYWNrYWdlDQorICogQGdlbmVyYXRlZA0KKyAqLw0KK3B1YmxpYyBjbGFzcyBTb2x2ZXJTd2l0Y2g8VDE+IHsNCisJLyoqDQorCSAqIFRoZSBjYWNoZWQgbW9kZWwgcGFja2FnZQ0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIHN0YXRpYyBTb2x2ZXJQYWNrYWdlIG1vZGVsUGFja2FnZTsNCisNCisJLyoqDQorCSAqIENyZWF0ZXMgYW4gaW5zdGFuY2Ugb2YgdGhlIHN3aXRjaC4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBTb2x2ZXJTd2l0Y2goKSB7DQorCQlpZiAobW9kZWxQYWNrYWdlID09IG51bGwpIHsNCisJCQltb2RlbFBhY2thZ2UgPSBTb2x2ZXJQYWNrYWdlLmVJTlNUQU5DRTsNCisJCX0NCisJfQ0KKw0KKwkvKioNCisJICogQ2FsbHMgPGNvZGU+Y2FzZVhYWDwvY29kZT4gZm9yIGVhY2ggY2xhc3Mgb2YgdGhlIG1vZGVsIHVudGlsIG9uZSByZXR1cm5zIGEgbm9uIG51bGwgcmVzdWx0OyBpdCB5aWVsZHMgdGhhdCByZXN1bHQuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcmV0dXJuIHRoZSBmaXJzdCBub24tbnVsbCByZXN1bHQgcmV0dXJuZWQgYnkgYSA8Y29kZT5jYXNlWFhYPC9jb2RlPiBjYWxsLg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgVDEgZG9Td2l0Y2goRU9iamVjdCB0aGVFT2JqZWN0KSB7DQorCQlyZXR1cm4gZG9Td2l0Y2godGhlRU9iamVjdC5lQ2xhc3MoKSwgdGhlRU9iamVjdCk7DQorCX0NCisNCisJLyoqDQorCSAqIENhbGxzIDxjb2RlPmNhc2VYWFg8L2NvZGU+IGZvciBlYWNoIGNsYXNzIG9mIHRoZSBtb2RlbCB1bnRpbCBvbmUgcmV0dXJucyBhIG5vbiBudWxsIHJlc3VsdDsgaXQgeWllbGRzIHRoYXQgcmVzdWx0Lg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHJldHVybiB0aGUgZmlyc3Qgbm9uLW51bGwgcmVzdWx0IHJldHVybmVkIGJ5IGEgPGNvZGU+Y2FzZVhYWDwvY29kZT4gY2FsbC4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIFQxIGRvU3dpdGNoKEVDbGFzcyB0aGVFQ2xhc3MsIEVPYmplY3QgdGhlRU9iamVjdCkgew0KKwkJaWYgKHRoZUVDbGFzcy5lQ29udGFpbmVyKCkgPT0gbW9kZWxQYWNrYWdlKSB7DQorCQkJcmV0dXJuIGRvU3dpdGNoKHRoZUVDbGFzcy5nZXRDbGFzc2lmaWVySUQoKSwgdGhlRU9iamVjdCk7DQorCQl9DQorCQllbHNlIHsNCisJCQlMaXN0PEVDbGFzcz4gZVN1cGVyVHlwZXMgPSB0aGVFQ2xhc3MuZ2V0RVN1cGVyVHlwZXMoKTsNCisJCQlyZXR1cm4NCisJCQkJZVN1cGVyVHlwZXMuaXNFbXB0eSgpID8NCisJCQkJCWRlZmF1bHRDYXNlKHRoZUVPYmplY3QpIDoNCisJCQkJCWRvU3dpdGNoKGVTdXBlclR5cGVzLmdldCgwKSwgdGhlRU9iamVjdCk7DQorCQl9DQorCX0NCisNCisJLyoqDQorCSAqIENhbGxzIDxjb2RlPmNhc2VYWFg8L2NvZGU+IGZvciBlYWNoIGNsYXNzIG9mIHRoZSBtb2RlbCB1bnRpbCBvbmUgcmV0dXJucyBhIG5vbiBudWxsIHJlc3VsdDsgaXQgeWllbGRzIHRoYXQgcmVzdWx0Lg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHJldHVybiB0aGUgZmlyc3Qgbm9uLW51bGwgcmVzdWx0IHJldHVybmVkIGJ5IGEgPGNvZGU+Y2FzZVhYWDwvY29kZT4gY2FsbC4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIFQxIGRvU3dpdGNoKGludCBjbGFzc2lmaWVySUQsIEVPYmplY3QgdGhlRU9iamVjdCkgew0KKwkJc3dpdGNoIChjbGFzc2lmaWVySUQpIHsNCisJCQljYXNlIFNvbHZlclBhY2thZ2UuU09MVkVSOiB7DQorCQkJCVNvbHZlciBzb2x2ZXIgPSAoU29sdmVyKXRoZUVPYmplY3Q7DQorCQkJCVQxIHJlc3VsdCA9IGNhc2VTb2x2ZXIoc29sdmVyKTsNCisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlSWRlbnRpZmlhYmxlKHNvbHZlcik7DQorCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZUNvbXBhcmFibGUoc29sdmVyKTsNCisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlU2FuaXR5Q2hlY2tlcihzb2x2ZXIpOw0KKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGRlZmF1bHRDYXNlKHRoZUVPYmplY3QpOw0KKwkJCQlyZXR1cm4gcmVzdWx0Ow0KKwkJCX0NCisJCQlkZWZhdWx0OiByZXR1cm4gZGVmYXVsdENhc2UodGhlRU9iamVjdCk7DQorCQl9DQorCX0NCisNCisJLyoqDQorCSAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPlNvbHZlcjwvZW0+Jy4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7DQorCSAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guDQorCSAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPlNvbHZlcjwvZW0+Jy4NCisJICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBUMSBjYXNlU29sdmVyKFNvbHZlciBvYmplY3QpIHsNCisJCXJldHVybiBudWxsOw0KKwl9DQorDQorCS8qKg0KKwkgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5Db21wYXJhYmxlPC9lbT4nLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsNCisJICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guDQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4NCisJICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+Q29tcGFyYWJsZTwvZW0+Jy4NCisJICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyA8VD4gVDEgY2FzZUNvbXBhcmFibGUoQ29tcGFyYWJsZTxUPiBvYmplY3QpIHsNCisJCXJldHVybiBudWxsOw0KKwl9DQorDQorCS8qKg0KKwkgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5TYW5pdHkgQ2hlY2tlcjwvZW0+Jy4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7DQorCSAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guDQorCSAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPlNhbml0eSBDaGVja2VyPC9lbT4nLg0KKwkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIFQxIGNhc2VTYW5pdHlDaGVja2VyKFNhbml0eUNoZWNrZXIgb2JqZWN0KSB7DQorCQlyZXR1cm4gbnVsbDsNCisJfQ0KKw0KKwkvKioNCisJICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+SWRlbnRpZmlhYmxlPC9lbT4nLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsNCisJICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guDQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4NCisJICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+SWRlbnRpZmlhYmxlPC9lbT4nLg0KKwkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIFQxIGNhc2VJZGVudGlmaWFibGUoSWRlbnRpZmlhYmxlIG9iamVjdCkgew0KKwkJcmV0dXJuIG51bGw7DQorCX0NCisNCisJLyoqDQorCSAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkVPYmplY3Q8L2VtPicuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOw0KKwkgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaCwgYnV0IHRoaXMgaXMgdGhlIGxhc3QgY2FzZSBhbnl3YXkuDQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4NCisJICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+RU9iamVjdDwvZW0+Jy4NCisJICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBUMSBkZWZhdWx0Q2FzZShFT2JqZWN0IG9iamVjdCkgew0KKwkJcmV0dXJuIG51bGw7DQorCX0NCisNCit9IC8vU29sdmVyU3dpdGNoDQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS90cmlnZ2VyL1RyaWdnZXIuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvdHJpZ2dlci9UcmlnZ2VyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjIyZGFhMgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvdHJpZ2dlci9UcmlnZ2VyLmphdmEKQEAgLTAsMCArMSw4OSBAQAorLy8gVHJpZ2dlci5qYXZhCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS50cmlnZ2VyOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5FTGlzdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuVVJJOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5EZWNvcmF0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZS5QcmVkaWNhdGU7CisKKy8qKgorICogQSA8Y29kZT5UcmlnZ2VyPC9jb2RlPiBpcyBhIHtAbGluayBEZWNvcmF0b3J9IHRoYXQgYWxsb3dzIGZvciBjb25kaXRpb25hbAorICogZXhlY3V0aW9uIG9mIGFub3RoZXIge0BsaW5rIERlY29yYXRvcn0uIEl0IGNvbWJpbmVzIGEgcmVmZXJlbmNlIHRvIGEKKyAqIGNvbmRpdGlvbmFsIHtAbGluayBQcmVkaWNhdGV9IHdpdGggYSByZWZlcmVuY2UgdG8gYW5vdGhlciB7QGxpbmsgRGVjb3JhdG9yfQorICogY2FsbGVkIHRoZSAiYWN0aW9uIiAoe0BsaW5rICNnZXRBY3Rpb24oKX0uIFdoZW4gdGhlIDxjb2RlPlRyaWdnZXI8L2NvZGU+J3MKKyAqIHtAbGluayAjdXBkYXRlTGFiZWxzKG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5TVEVNVGltZSwgbG9uZyl9IG1ldGhvZAorICogaXMgY2FsbGVkIGl0IGludm9rZXMgdGhlIHtAbGluayBQcmVkaWNhdGV9IGFuZCBpZiBpdCByZXR1cm5zCisgKiA8Y29kZT50cnVlPC9jb2RlPiB0aGVuIHRoZSA8Y29kZT5UcmlnZ2VyPC9jb2RlPiBjYWxscyB0aGUKKyAqIHtAbGluayAjdXBkYXRlTGFiZWxzKG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5TVEVNVGltZSwgbG9uZyl9IG1ldGhvZAorICogb2YgdGhlIHJlZmVyZW5jZWQge0BsaW5rIERlY29yYXRvcn0uCisgKiA8cD4KKyAqIEZyZXF1ZW50bHksIHRoZSBhY3Rpb24gd2lsbCBiZSBhbiBpbnN0YW5jZSBvZgorICoge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5Nb2RpZmllcn0gd2hpY2ggd2lsbCB0aGVuIGFsdGVyCisgKiBzb21lIGFzcGVjdCBvZiB0aGUgcnVubmluZyBTaW11bGF0aW9uLgorICogPHA+CisgKiBUaGlzIGludGVyZmFjZSBkZWZpbml0aW9uIGlzIGFsc28gYW4gIkFubm90YXRlZCBKYXZhIEludGVyZmFjZSIgdGhhdCBkZWZpbmVzCisgKiBvbmUgY2xhc3MgaW4gYSA8YSBocmVmPSJodHRwOi8vd3d3LnVtbC5vcmcvIj5VTUw8L2E+ICJtb2RlbCIuIFRoZSBVTUwgY2xhc3MKKyAqIGRpYWdyYW0gZm9yIHRoZSBtb2RlbCBpcyBpbiB0aGUgPGNvZGU+ZG9jdW1lbnRhdGlvbjwvY29kZT4gZm9sZGVyIG9mIHRoZQorICogcHJvamVjdC4gVGhpcyBmaWxlIGFuZCB0aGUgb3RoZXIgaW50ZXJmYWNlcyBpbiB0aGlzIEphdmEgcGFja2FnZSBhcmUKKyAqIHByb2Nlc3NlZCBieSB0aGUgRWNsaXBzZSBNb2RlbGluZyBGcmFtZXdvcmsgKGFrYSBFTUYgPGEKKyAqIGhyZWY9Imh0dHA6Ly9vcmcuZWNsaXBzZS9lbWYiPmh0dHA6Ly9vcmcuZWNsaXBzZS9lbWY8L2E+KS4gdG8gYXV0b21hdGljYWxseQorICogZ2VuZXJhdGUgYW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIG1vZGVsLiBFTUYgaXMgZG9jdW1lbnRlZCBpbiB0aGUgYm9vayA8YQorICogaHJlZj0iaHR0cDovL3d3dy5hd3Byb2Zlc3Npb25hbC5jb20vYm9va3N0b3JlL3Byb2R1Y3QuYXNwP2lzYm49MDEzMTQyNTQyMCZybD0xIj5FY2xpcHNlCisgKiBNb2RlbGluZyBGcmFtZXdvcmsgPC9hPiBieSBCdWRpbnNreSwgZXQgYWwuCisgKiA8L3A+CisgKiBAbW9kZWwKKyAqLworcHVibGljIGludGVyZmFjZSBUcmlnZ2VyIGV4dGVuZHMgRGVjb3JhdG9yIHsKKwkvKioKKwkgKiBUaGlzIGlzIHRoZSBzZWdtZW50IG9mIHRoZSB0eXBlIHtAbGluayBVUkl9IHRoYXQgcHJlZml4ZXMgYWxsIG90aGVyCisJICogc2VnbWVudHMgaW4gYSB7QGxpbmsgVHJpZ2dlcn0ge0BsaW5rIFVSSX0uCisJICovCisJU3RyaW5nIFVSSV9UWVBFX1RSSUdHRVJfU0VHTUVOVCA9ICJ0cmlnZ2VyIjsKKworCS8qKgorCSAqIEByZXR1cm4gdGhlIHtAbGluayBUcmlnZ2VyfSdzIFByZWRpY2F0ZQorCSAqIEBtb2RlbCBjb250YWlubWVudD0iZmFsc2UiCisJICovCisJUHJlZGljYXRlIGdldFByZWRpY2F0ZSgpOworCisJLyoqCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICcKKwkgKiB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnRyaWdnZXIuVHJpZ2dlciNnZXRQcmVkaWNhdGUKKwkgKiA8ZW0+UHJlZGljYXRlPC9lbT59JyByZWZlcmVuY2UuIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jCisJICogLS0+CisJICogCisJICogQHBhcmFtIHZhbHVlCisJICogICAgICAgICAgICB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPlByZWRpY2F0ZTwvZW0+JyByZWZlcmVuY2UuCisJICogQHNlZSAjZ2V0UHJlZGljYXRlKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJdm9pZCBzZXRQcmVkaWNhdGUoUHJlZGljYXRlIHZhbHVlKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPkFjdGlvbnM8L2I+PC9lbT4nIHJlZmVyZW5jZSBsaXN0LgorCSAqIFRoZSBsaXN0IGNvbnRlbnRzIGFyZSBvZiB0eXBlIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuRGVjb3JhdG9yfS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDxwPgorCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPkFjdGlvbnM8L2VtPicgcmVmZXJlbmNlIGxpc3QgaXNuJ3QgY2xlYXIsCisJICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLgorCSAqIDwvcD4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5BY3Rpb25zPC9lbT4nIHJlZmVyZW5jZSBsaXN0LgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnRyaWdnZXIuVHJpZ2dlclBhY2thZ2UjZ2V0VHJpZ2dlcl9BY3Rpb25zKCkKKwkgKiBAbW9kZWwKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUxpc3Q8RGVjb3JhdG9yPiBnZXRBY3Rpb25zKCk7CisKK30gLy8gVHJpZ2dlcgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvdHJpZ2dlci9UcmlnZ2VyRmFjdG9yeS5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS90cmlnZ2VyL1RyaWdnZXJGYWN0b3J5LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzZiYmYyNgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvdHJpZ2dlci9UcmlnZ2VyRmFjdG9yeS5qYXZhCkBAIC0wLDAgKzEsNTEgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnRyaWdnZXI7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVGYWN0b3J5OworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiBUaGUgPGI+RmFjdG9yeTwvYj4gZm9yIHRoZSBtb2RlbC4KKyAqIEl0IHByb3ZpZGVzIGEgY3JlYXRlIG1ldGhvZCBmb3IgZWFjaCBub24tYWJzdHJhY3QgY2xhc3Mgb2YgdGhlIG1vZGVsLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS50cmlnZ2VyLlRyaWdnZXJQYWNrYWdlCisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBpbnRlcmZhY2UgVHJpZ2dlckZhY3RvcnkgZXh0ZW5kcyBFRmFjdG9yeSB7CisJLyoqCisJICogVGhlIHNpbmdsZXRvbiBpbnN0YW5jZSBvZiB0aGUgZmFjdG9yeS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlUcmlnZ2VyRmFjdG9yeSBlSU5TVEFOQ0UgPSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUudHJpZ2dlci5pbXBsLlRyaWdnZXJGYWN0b3J5SW1wbC5pbml0KCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPlRyaWdnZXI8L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPlRyaWdnZXI8L2VtPicuCisJICogQGdlbmVyYXRlZAorCSAqLworCVRyaWdnZXIgY3JlYXRlVHJpZ2dlcigpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgcGFja2FnZSBzdXBwb3J0ZWQgYnkgdGhpcyBmYWN0b3J5LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgcGFja2FnZSBzdXBwb3J0ZWQgYnkgdGhpcyBmYWN0b3J5LgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlUcmlnZ2VyUGFja2FnZSBnZXRUcmlnZ2VyUGFja2FnZSgpOworCit9IC8vVHJpZ2dlckZhY3RvcnkKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvdHJpZ2dlci9UcmlnZ2VyUGFja2FnZS5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS90cmlnZ2VyL1RyaWdnZXJQYWNrYWdlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWY5OWI0MgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvdHJpZ2dlci9UcmlnZ2VyUGFja2FnZS5qYXZhCkBAIC0wLDAgKzEsMjU5IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS50cmlnZ2VyOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FUmVmZXJlbmNlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5Nb2RlbFBhY2thZ2U7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIFRoZSA8Yj5QYWNrYWdlPC9iPiBmb3IgdGhlIG1vZGVsLgorICogSXQgY29udGFpbnMgYWNjZXNzb3JzIGZvciB0aGUgbWV0YSBvYmplY3RzIHRvIHJlcHJlc2VudAorICogPHVsPgorICogICA8bGk+ZWFjaCBjbGFzcyw8L2xpPgorICogICA8bGk+ZWFjaCBmZWF0dXJlIG9mIGVhY2ggY2xhc3MsPC9saT4KKyAqICAgPGxpPmVhY2ggZW51bSw8L2xpPgorICogICA8bGk+YW5kIGVhY2ggZGF0YSB0eXBlPC9saT4KKyAqIDwvdWw+CisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnRyaWdnZXIuVHJpZ2dlckZhY3RvcnkKKyAqIEBtb2RlbCBraW5kPSJwYWNrYWdlIgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgaW50ZXJmYWNlIFRyaWdnZXJQYWNrYWdlIGV4dGVuZHMgRVBhY2thZ2UgeworCS8qKgorCSAqIFRoZSBwYWNrYWdlIG5hbWUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJU3RyaW5nIGVOQU1FID0gInRyaWdnZXIiOyAvLyROT04tTkxTLTEkCisKKwkvKioKKwkgKiBUaGUgcGFja2FnZSBuYW1lc3BhY2UgVVJJLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCVN0cmluZyBlTlNfVVJJID0gImh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3RyaWdnZXIuZWNvcmUiOyAvLyROT04tTkxTLTEkCisKKwkvKioKKwkgKiBUaGUgcGFja2FnZSBuYW1lc3BhY2UgbmFtZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlTdHJpbmcgZU5TX1BSRUZJWCA9ICJvcmcuZWNsaXBzZS5zdGVtLmNvcmUudHJpZ2dlciI7IC8vJE5PTi1OTFMtMSQKKworCS8qKgorCSAqIFRoZSBzaW5nbGV0b24gaW5zdGFuY2Ugb2YgdGhlIHBhY2thZ2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJVHJpZ2dlclBhY2thZ2UgZUlOU1RBTkNFID0gb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnRyaWdnZXIuaW1wbC5UcmlnZ2VyUGFja2FnZUltcGwuaW5pdCgpOworCisJLyoqCisJICogVGhlIG1ldGEgb2JqZWN0IGlkIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUudHJpZ2dlci5pbXBsLlRyaWdnZXJJbXBsIDxlbT5UcmlnZ2VyPC9lbT59JyBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnRyaWdnZXIuaW1wbC5UcmlnZ2VySW1wbAorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnRyaWdnZXIuaW1wbC5UcmlnZ2VyUGFja2FnZUltcGwjZ2V0VHJpZ2dlcigpCisJICogQGdlbmVyYXRlZAorCSAqLworCWludCBUUklHR0VSID0gMDsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5VUkk8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBUUklHR0VSX19VUkkgPSBNb2RlbFBhY2thZ2UuREVDT1JBVE9SX19VUkk7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VHlwZSBVUkk8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBUUklHR0VSX19UWVBFX1VSSSA9IE1vZGVsUGFja2FnZS5ERUNPUkFUT1JfX1RZUEVfVVJJOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkR1YmxpbiBDb3JlPC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgVFJJR0dFUl9fRFVCTElOX0NPUkUgPSBNb2RlbFBhY2thZ2UuREVDT1JBVE9SX19EVUJMSU5fQ09SRTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5MYWJlbHMgVG8gVXBkYXRlPC9iPjwvZW0+JyByZWZlcmVuY2UgbGlzdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBUUklHR0VSX19MQUJFTFNfVE9fVVBEQVRFID0gTW9kZWxQYWNrYWdlLkRFQ09SQVRPUl9fTEFCRUxTX1RPX1VQREFURTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5HcmFwaDwvYj48L2VtPicgY29udGFpbmVyIHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBUUklHR0VSX19HUkFQSCA9IE1vZGVsUGFja2FnZS5ERUNPUkFUT1JfX0dSQVBIOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkVuYWJsZWQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBUUklHR0VSX19FTkFCTEVEID0gTW9kZWxQYWNrYWdlLkRFQ09SQVRPUl9fRU5BQkxFRDsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5HcmFwaCBEZWNvcmF0ZWQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBUUklHR0VSX19HUkFQSF9ERUNPUkFURUQgPSBNb2RlbFBhY2thZ2UuREVDT1JBVE9SX19HUkFQSF9ERUNPUkFURUQ7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+UHJvZ3Jlc3M8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBUUklHR0VSX19QUk9HUkVTUyA9IE1vZGVsUGFja2FnZS5ERUNPUkFUT1JfX1BST0dSRVNTOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlByZWRpY2F0ZTwvYj48L2VtPicgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFRSSUdHRVJfX1BSRURJQ0FURSA9IE1vZGVsUGFja2FnZS5ERUNPUkFUT1JfRkVBVFVSRV9DT1VOVCArIDA7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+QWN0aW9uczwvYj48L2VtPicgcmVmZXJlbmNlIGxpc3QuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgVFJJR0dFUl9fQUNUSU9OUyA9IE1vZGVsUGFja2FnZS5ERUNPUkFUT1JfRkVBVFVSRV9DT1VOVCArIDE7CisKKwkvKioKKwkgKiBUaGUgbnVtYmVyIG9mIHN0cnVjdHVyYWwgZmVhdHVyZXMgb2YgdGhlICc8ZW0+VHJpZ2dlcjwvZW0+JyBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBUUklHR0VSX0ZFQVRVUkVfQ09VTlQgPSBNb2RlbFBhY2thZ2UuREVDT1JBVE9SX0ZFQVRVUkVfQ09VTlQgKyAyOworCisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUudHJpZ2dlci5UcmlnZ2VyIDxlbT5UcmlnZ2VyPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAnPGVtPlRyaWdnZXI8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUudHJpZ2dlci5UcmlnZ2VyCisJICogQGdlbmVyYXRlZAorCSAqLworCUVDbGFzcyBnZXRUcmlnZ2VyKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIHJlZmVyZW5jZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS50cmlnZ2VyLlRyaWdnZXIjZ2V0UHJlZGljYXRlIDxlbT5QcmVkaWNhdGU8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSByZWZlcmVuY2UgJzxlbT5QcmVkaWNhdGU8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUudHJpZ2dlci5UcmlnZ2VyI2dldFByZWRpY2F0ZSgpCisJICogQHNlZSAjZ2V0VHJpZ2dlcigpCisJICogQGdlbmVyYXRlZAorCSAqLworCUVSZWZlcmVuY2UgZ2V0VHJpZ2dlcl9QcmVkaWNhdGUoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgcmVmZXJlbmNlIGxpc3QgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUudHJpZ2dlci5UcmlnZ2VyI2dldEFjdGlvbnMgPGVtPkFjdGlvbnM8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSByZWZlcmVuY2UgbGlzdCAnPGVtPkFjdGlvbnM8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUudHJpZ2dlci5UcmlnZ2VyI2dldEFjdGlvbnMoKQorCSAqIEBzZWUgI2dldFRyaWdnZXIoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFUmVmZXJlbmNlIGdldFRyaWdnZXJfQWN0aW9ucygpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgZmFjdG9yeSB0aGF0IGNyZWF0ZXMgdGhlIGluc3RhbmNlcyBvZiB0aGUgbW9kZWwuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBmYWN0b3J5IHRoYXQgY3JlYXRlcyB0aGUgaW5zdGFuY2VzIG9mIHRoZSBtb2RlbC4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJVHJpZ2dlckZhY3RvcnkgZ2V0VHJpZ2dlckZhY3RvcnkoKTsKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogRGVmaW5lcyBsaXRlcmFscyBmb3IgdGhlIG1ldGEgb2JqZWN0cyB0aGF0IHJlcHJlc2VudAorCSAqIDx1bD4KKwkgKiAgIDxsaT5lYWNoIGNsYXNzLDwvbGk+CisJICogICA8bGk+ZWFjaCBmZWF0dXJlIG9mIGVhY2ggY2xhc3MsPC9saT4KKwkgKiAgIDxsaT5lYWNoIGVudW0sPC9saT4KKwkgKiAgIDxsaT5hbmQgZWFjaCBkYXRhIHR5cGU8L2xpPgorCSAqIDwvdWw+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCWludGVyZmFjZSBMaXRlcmFscyB7CisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnRyaWdnZXIuaW1wbC5UcmlnZ2VySW1wbCA8ZW0+VHJpZ2dlcjwvZW0+fScgY2xhc3MuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS50cmlnZ2VyLmltcGwuVHJpZ2dlckltcGwKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUudHJpZ2dlci5pbXBsLlRyaWdnZXJQYWNrYWdlSW1wbCNnZXRUcmlnZ2VyKCkKKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUNsYXNzIFRSSUdHRVIgPSBlSU5TVEFOQ0UuZ2V0VHJpZ2dlcigpOworCisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+UHJlZGljYXRlPC9iPjwvZW0+JyByZWZlcmVuY2UgZmVhdHVyZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVSZWZlcmVuY2UgVFJJR0dFUl9fUFJFRElDQVRFID0gZUlOU1RBTkNFLmdldFRyaWdnZXJfUHJlZGljYXRlKCk7CisKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5BY3Rpb25zPC9iPjwvZW0+JyByZWZlcmVuY2UgbGlzdCBmZWF0dXJlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRVJlZmVyZW5jZSBUUklHR0VSX19BQ1RJT05TID0gZUlOU1RBTkNFLmdldFRyaWdnZXJfQWN0aW9ucygpOworCisJfQorCit9IC8vVHJpZ2dlclBhY2thZ2UKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvdHJpZ2dlci9pbXBsL1RyaWdnZXJGYWN0b3J5SW1wbC5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS90cmlnZ2VyL2ltcGwvVHJpZ2dlckZhY3RvcnlJbXBsLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGEwYTU3MgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvdHJpZ2dlci9pbXBsL1RyaWdnZXJGYWN0b3J5SW1wbC5qYXZhCkBAIC0wLDAgKzEsMTAzIEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS50cmlnZ2VyLmltcGw7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzczsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRVBhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLmltcGwuRUZhY3RvcnlJbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5wbHVnaW4uRWNvcmVQbHVnaW47CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnRyaWdnZXIuVHJpZ2dlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUudHJpZ2dlci5UcmlnZ2VyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUudHJpZ2dlci5UcmlnZ2VyUGFja2FnZTsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIG1vZGVsIDxiPkZhY3Rvcnk8L2I+LgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBUcmlnZ2VyRmFjdG9yeUltcGwgZXh0ZW5kcyBFRmFjdG9yeUltcGwgaW1wbGVtZW50cyBUcmlnZ2VyRmFjdG9yeSB7CisJLyoqCisJICogQ3JlYXRlcyB0aGUgZGVmYXVsdCBmYWN0b3J5IGltcGxlbWVudGF0aW9uLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBzdGF0aWMgVHJpZ2dlckZhY3RvcnkgaW5pdCgpIHsKKwkJdHJ5IHsKKwkJCVRyaWdnZXJGYWN0b3J5IHRoZVRyaWdnZXJGYWN0b3J5ID0gKFRyaWdnZXJGYWN0b3J5KUVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVGYWN0b3J5KCJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS90cmlnZ2VyLmVjb3JlIik7IC8vJE5PTi1OTFMtMSQgCisJCQlpZiAodGhlVHJpZ2dlckZhY3RvcnkgIT0gbnVsbCkgeworCQkJCXJldHVybiB0aGVUcmlnZ2VyRmFjdG9yeTsKKwkJCX0KKwkJfQorCQljYXRjaCAoRXhjZXB0aW9uIGV4Y2VwdGlvbikgeworCQkJRWNvcmVQbHVnaW4uSU5TVEFOQ0UubG9nKGV4Y2VwdGlvbik7CisJCX0KKwkJcmV0dXJuIG5ldyBUcmlnZ2VyRmFjdG9yeUltcGwoKTsKKwl9CisKKwkvKioKKwkgKiBDcmVhdGVzIGFuIGluc3RhbmNlIG9mIHRoZSBmYWN0b3J5LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBUcmlnZ2VyRmFjdG9yeUltcGwoKSB7CisJCXN1cGVyKCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIEVPYmplY3QgY3JlYXRlKEVDbGFzcyBlQ2xhc3MpIHsKKwkJc3dpdGNoIChlQ2xhc3MuZ2V0Q2xhc3NpZmllcklEKCkpIHsKKwkJCWNhc2UgVHJpZ2dlclBhY2thZ2UuVFJJR0dFUjogcmV0dXJuIGNyZWF0ZVRyaWdnZXIoKTsKKwkJCWRlZmF1bHQ6CisJCQkJdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiVGhlIGNsYXNzICciICsgZUNsYXNzLmdldE5hbWUoKSArICInIGlzIG5vdCBhIHZhbGlkIGNsYXNzaWZpZXIiKTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCisJCX0KKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVHJpZ2dlciBjcmVhdGVUcmlnZ2VyKCkgeworCQlUcmlnZ2VySW1wbCB0cmlnZ2VyID0gbmV3IFRyaWdnZXJJbXBsKCk7CisJCXJldHVybiB0cmlnZ2VyOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBUcmlnZ2VyUGFja2FnZSBnZXRUcmlnZ2VyUGFja2FnZSgpIHsKKwkJcmV0dXJuIChUcmlnZ2VyUGFja2FnZSlnZXRFUGFja2FnZSgpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGRlcHJlY2F0ZWQKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQERlcHJlY2F0ZWQKKwlwdWJsaWMgc3RhdGljIFRyaWdnZXJQYWNrYWdlIGdldFBhY2thZ2UoKSB7CisJCXJldHVybiBUcmlnZ2VyUGFja2FnZS5lSU5TVEFOQ0U7CisJfQorCit9IC8vVHJpZ2dlckZhY3RvcnlJbXBsCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3RyaWdnZXIvaW1wbC9UcmlnZ2VySW1wbC5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS90cmlnZ2VyL2ltcGwvVHJpZ2dlckltcGwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMThlZDM0Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS90cmlnZ2VyL2ltcGwvVHJpZ2dlckltcGwuamF2YQpAQCAtMCwwICsxLDMzMSBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUudHJpZ2dlci5pbXBsOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7CitpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLkVMaXN0OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkludGVybmFsRU9iamVjdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuaW1wbC5FTm90aWZpY2F0aW9uSW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUudXRpbC5FT2JqZWN0UmVzb2x2aW5nRUxpc3Q7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnV0aWwuRWNvcmVVdGlsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5Db3JlUGx1Z2luOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5HcmFwaDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuRGVjb3JhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5TVEVNVGltZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuaW1wbC5EZWNvcmF0b3JJbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5Nb2RpZmllcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlLlByZWRpY2F0ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUudHJpZ2dlci5UcmlnZ2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS50cmlnZ2VyLlRyaWdnZXJQYWNrYWdlOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiBBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+VHJpZ2dlcjwvYj48L2VtPicuCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIDxwPgorICogVGhlIGZvbGxvd2luZyBmZWF0dXJlcyBhcmUgaW1wbGVtZW50ZWQ6CisgKiA8dWw+CisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnRyaWdnZXIuaW1wbC5UcmlnZ2VySW1wbCNnZXRQcmVkaWNhdGUgPGVtPlByZWRpY2F0ZTwvZW0+fTwvbGk+CisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnRyaWdnZXIuaW1wbC5UcmlnZ2VySW1wbCNnZXRBY3Rpb25zIDxlbT5BY3Rpb25zPC9lbT59PC9saT4KKyAqIDwvdWw+CisgKiA8L3A+CisgKgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgVHJpZ2dlckltcGwgZXh0ZW5kcyBEZWNvcmF0b3JJbXBsIGltcGxlbWVudHMgVHJpZ2dlciB7CisJLyoqCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0UHJlZGljYXRlKCkgPGVtPlByZWRpY2F0ZTwvZW0+fScgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZ2V0UHJlZGljYXRlKCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgUHJlZGljYXRlIHByZWRpY2F0ZTsKKworCS8qKgorCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldEFjdGlvbnMoKSA8ZW0+QWN0aW9uczwvZW0+fScgcmVmZXJlbmNlIGxpc3QuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNnZXRBY3Rpb25zKCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgRUxpc3Q8RGVjb3JhdG9yPiBhY3Rpb25zOworCisJcHJvdGVjdGVkIExpc3Q8RGVjb3JhdG9yPiBhY3Rpb25Db3BpZXM7CisJCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIFRyaWdnZXJJbXBsKCkgeworCQlzdXBlcigpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCBFQ2xhc3MgZVN0YXRpY0NsYXNzKCkgeworCQlyZXR1cm4gVHJpZ2dlclBhY2thZ2UuTGl0ZXJhbHMuVFJJR0dFUjsKKwl9CisKKwkKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5pbXBsLkRlY29yYXRvckltcGwjZGVjb3JhdGVHcmFwaCgpCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIGJvb2xlYW4gZGVjb3JhdGVHcmFwaChTVEVNVGltZSB0aW1lKSB7CisJCS8vIERvIHdlIGhhdmUgYWN0aW9uPworCQlpZiAoZ2V0QWN0aW9ucygpICE9IG51bGwpIHsKKwkJCS8vIFllcworCQkJLy8gSGF2ZSB3ZSBhbHJlYWR5IG1hZGUgYSBjb3B5IG9mIHRoZSBhY3Rpb24/CisJCQlpZiAoYWN0aW9uQ29waWVzID09IG51bGwgfHwgYWN0aW9uQ29waWVzLnNpemUoKSA8IGdldEFjdGlvbnMoKS5zaXplKCkpIHsKKwkJCQkvLyBObworCQkJCWFjdGlvbkNvcGllcyA9IG5ldyBBcnJheUxpc3Q8RGVjb3JhdG9yPigpOworCQkJCWZvcihpbnQgaT0wO2k8Z2V0QWN0aW9ucygpLnNpemUoKTsrK2kpICB7CisJCQkJCWFjdGlvbkNvcGllcy5hZGQoKERlY29yYXRvcikgRWNvcmVVdGlsLmNvcHkoZ2V0QWN0aW9ucygpLmdldChpKSkpOworCQkJCQlnZXRHcmFwaCgpLmdldERlY29yYXRvcnMoKS5hZGQoYWN0aW9uQ29waWVzLmdldChpKSk7CisJCQkJfQorCQkJfSAvLyBpZgorCQkJZm9yKERlY29yYXRvciBkOmFjdGlvbkNvcGllcykgZC5zZXRFbmFibGVkKGZhbHNlKTsKKwkJCQorCQl9IC8vIGlmIHdlIGhhdmUgYW4gYWN0aW9uCisJCWVsc2UgeworCQkJLy8gTm8KKwkJCUNvcmVQbHVnaW4ubG9nSW5mb3JtYXRpb24oIk5vIGFjdGlvbnMgc3BlY2lmaWVkIGZvciB0cmlnZ2VyIFwiIit0aGlzLmdldER1YmxpbkNvcmUoKS5nZXRUaXRsZSgpKyAiXCIiLCBudWxsKTsKKwkJfQorCQkvLyBUbyBjbGVhciBvdXQgY2FjaGUgaW4gY2FzZSBzb21lIGF0dHJpYnV0ZSBvZiB0aGUgcHJlZGljYXRlIGhhcyBjaGFuZ2VkCisJCWdldFByZWRpY2F0ZSgpLnJlc2V0KCk7CisJCXJldHVybiB0cnVlOworCX0gLy8gZGVjb3JhdGVHcmFwaAorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuaW1wbC5EZWNvcmF0b3JJbXBsI3VwZGF0ZUxhYmVscyhvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuU1RFTVRpbWUsCisJICogICAgICBsb25nKQorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIHVwZGF0ZUxhYmVscyhTVEVNVGltZSB0aW1lLCBsb25nIHRpbWVyUGVyaW9kLCBpbnQgY3ljbGUpIHsKKwkJLy8gRXZhbHVhdGUgdGhlIHByZWRpY2F0ZSBhbmQgaWYgaXQgcmV0dXJucyB0cnVlLCB0aGVuIGxldCB0aGUgYWN0aW9ucworCQkvLyBkZWNvcmF0ZSB0aGUgZ3JhcGguCisJCWlmIChnZXRQcmVkaWNhdGUoKS5ldmFsdWF0ZSh0aW1lLCB0aW1lclBlcmlvZCwgICgoR3JhcGgpdGhpcy5lQ29udGFpbmVyKCkpKSkgeworCisJCQkvLyBEbyB3ZSBoYXZlIGFjdGlvbnM/CisJCQlpZiAoYWN0aW9uQ29waWVzICE9IG51bGwpIHsKKwkJCQkvLyBZZXMKKwkJCQlmb3IoRGVjb3JhdG9yIGFjdGlvbkNvcHk6YWN0aW9uQ29waWVzKSB7CisJCQkJCS8vIFllcworCQkJCQlhY3Rpb25Db3B5LnNldEVuYWJsZWQodHJ1ZSk7CisJCQorCQkJCQkvLyBIYXMgdGhlIGFjdGlvbiBkZWNvcmF0ZWQgdGhlIGdyYXBoIHlldD8KKwkJCQkJaWYgKCFhY3Rpb25Db3B5LmlzR3JhcGhEZWNvcmF0ZWQoKSkgeworCQkJCQkJLy8gTm8KKwkJCQkJCWFjdGlvbkNvcHkuZGVjb3JhdGVHcmFwaCh0aW1lKTsKKwkJCQkJCWFjdGlvbkNvcHkuc2V0R3JhcGhEZWNvcmF0ZWQodHJ1ZSk7CisJCQkJCX0gLy8gaWYgZ3JhcGggbm90IGRlY29yYXRlZCB5ZXQKKwkJCisJCQkJCWFjdGlvbkNvcHkudXBkYXRlTGFiZWxzKHRpbWUsIHRpbWVyUGVyaW9kLCBjeWNsZSk7CisJCQkJfSAKKwkJCX0KKwkJfS8vIGlmIGFjdGlvbnMgdGltZQorCQllbHNlIHsKKwkJICAvLyBObworCQkgIHRoaXMucmVzZXRMYWJlbHMoKTsKKwkJfSAvLyBlbHNlCisJfSAvLyB1cGRhdGVMYWJlbHMKKworCQorCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLmltcGwuRGVjb3JhdG9ySW1wbCNyZXNldExhYmVscygpCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgcmVzZXRMYWJlbHMoKSB7CisJCWlmIChhY3Rpb25Db3BpZXMgIT0gbnVsbCkgeworCQkJZm9yKERlY29yYXRvciBhY3Rpb25Db3B5OmFjdGlvbkNvcGllcykgeworCQkJCS8vIFllcworCQkJCWFjdGlvbkNvcHkuc2V0RW5hYmxlZChmYWxzZSk7CisJCQkJYWN0aW9uQ29weS5zZXRHcmFwaERlY29yYXRlZChmYWxzZSk7CisJCQkJLy8gVGhlIHByb2JsZW0gd2l0aCByZXNldGluZyBsYWJlbHMgaW4gYSBUcmlnZ2VyIGlzIHRoYXQgaXQgaW1wbGllcworCQkJCS8vIHNvbWUga2luZCBvZiBpbml0aWFsaXphdGlvbiBvZiB0aGUgbGFiZWxzIGJ5IHRoZSBhY3Rpb24gdGhhdCBpbgorCQkJCS8vIGZhY3Qgc2hvdWxkIGJlIGNvbmRpdGlvbmFsIG9uIHRoZSB2YWx1ZSBvZiB0aGUgVHJpZ2dlcidzCisJCQkJLy8gcHJlZGljYXRlLgorCQkJCS8vIElzIHRoZSBhY3Rpb24gYSBNb2RpZmllcj8KKwkJCQlpZiAoYWN0aW9uQ29weSBpbnN0YW5jZW9mIE1vZGlmaWVyKSB7CisJCQkJCS8vIFllcworCQkJCQkvLyBJdCdzIG9rYXkgZm9yIGEgTW9kaWZpZXIgdG8gcmVzZXQgaXRzIGxhYmVscyBiZWNhdXNlIHRoaXMKKwkJCQkJLy8gcmVzdG9yZXMgdGhlbSB0byB0aGVpciBvcmlnaW5hbCB2YWx1ZXMuIFRoaXMgd29ya3MgZm9yIHN0YXRpYworCQkJCQkvLyBsYWJlbHMuIEEgbW9yZSBnZW5lcmFsIERlY29yYXRvciwgbGlrZSBhbiBJbmZlY3RvciwgbWlnaHQgZG8KKwkJCQkJLy8gdGhpbmdzIGl0IHNob3VsZCBub3QgZG8gdW5sZXNzIGl0IGlzIHRyaWdnZXJlZC4KKwkJCQkJTW9kaWZpZXIgbW9kaWZpZXIgPSAoTW9kaWZpZXIpIGFjdGlvbkNvcHk7CisJCQkJCW1vZGlmaWVyLnJlc2V0TGFiZWxzKCk7CisJCQkJfQorCQkJfQorCQl9IC8vIGlmCisJCXRoaXMuZ2V0UHJlZGljYXRlKCkucmVzZXQoKTsKKwl9IC8vIHJlc2V0TGFiZWxzCisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5pbXBsLkRlY29yYXRvckltcGwjc2FuZSgpCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIGJvb2xlYW4gc2FuZSgpIHsKKwkJYm9vbGVhbiByZXRWYWx1ZSA9IHN1cGVyLnNhbmUoKTsKKwkJCisvLwkJcmV0VmFsdWUgPSByZXRWYWx1ZSAmJiBnZXRQcmVkaWNhdGUoKSAhPSBudWxsOworLy8JCWFzc2VydCByZXRWYWx1ZTsKKwkJCisJCS8vcmV0VmFsdWUgPSByZXRWYWx1ZSAmJiBnZXRQcmVkaWNhdGUoKS5zYW5lKCk7CisJCS8vYXNzZXJ0IHJldFZhbHVlOworCQkKKwkJaWYoZ2V0QWN0aW9ucygpICE9IG51bGwpCisJCQlmb3IoRGVjb3JhdG9yIGQ6Z2V0QWN0aW9ucygpKSByZXRWYWx1ZSA9IHJldFZhbHVlICYmIGQuc2FuZSgpOworCQkKKwkJYXNzZXJ0IHJldFZhbHVlOworCQkKKwkJaWYoYWN0aW9uQ29waWVzICE9IG51bGwpCisJCQlmb3IoRGVjb3JhdG9yIGQ6YWN0aW9uQ29waWVzKSByZXRWYWx1ZSA9IHJldFZhbHVlICYmIGQuc2FuZSgpOworCQlhc3NlcnQgcmV0VmFsdWU7CisJCQorCQlyZXR1cm4gcmV0VmFsdWU7CisJfSAvLyBzYW5lCisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgUHJlZGljYXRlIGdldFByZWRpY2F0ZSgpIHsKKwkJaWYgKHByZWRpY2F0ZSAhPSBudWxsICYmIHByZWRpY2F0ZS5lSXNQcm94eSgpKSB7CisJCQlJbnRlcm5hbEVPYmplY3Qgb2xkUHJlZGljYXRlID0gKEludGVybmFsRU9iamVjdClwcmVkaWNhdGU7CisJCQlwcmVkaWNhdGUgPSAoUHJlZGljYXRlKWVSZXNvbHZlUHJveHkob2xkUHJlZGljYXRlKTsKKwkJCWlmIChwcmVkaWNhdGUgIT0gb2xkUHJlZGljYXRlKSB7CisJCQkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQorCQkJCQllTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uUkVTT0xWRSwgVHJpZ2dlclBhY2thZ2UuVFJJR0dFUl9fUFJFRElDQVRFLCBvbGRQcmVkaWNhdGUsIHByZWRpY2F0ZSkpOworCQkJfQorCQl9CisJCXJldHVybiBwcmVkaWNhdGU7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFByZWRpY2F0ZSBiYXNpY0dldFByZWRpY2F0ZSgpIHsKKwkJcmV0dXJuIHByZWRpY2F0ZTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRQcmVkaWNhdGUoUHJlZGljYXRlIG5ld1ByZWRpY2F0ZSkgeworCQlQcmVkaWNhdGUgb2xkUHJlZGljYXRlID0gcHJlZGljYXRlOworCQlwcmVkaWNhdGUgPSBuZXdQcmVkaWNhdGU7CisJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkKKwkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIFRyaWdnZXJQYWNrYWdlLlRSSUdHRVJfX1BSRURJQ0FURSwgb2xkUHJlZGljYXRlLCBwcmVkaWNhdGUpKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUxpc3Q8RGVjb3JhdG9yPiBnZXRBY3Rpb25zKCkgeworCQlpZiAoYWN0aW9ucyA9PSBudWxsKSB7CisJCQlhY3Rpb25zID0gbmV3IEVPYmplY3RSZXNvbHZpbmdFTGlzdDxEZWNvcmF0b3I+KERlY29yYXRvci5jbGFzcywgdGhpcywgVHJpZ2dlclBhY2thZ2UuVFJJR0dFUl9fQUNUSU9OUyk7CisJCX0KKwkJcmV0dXJuIGFjdGlvbnM7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIE9iamVjdCBlR2V0KGludCBmZWF0dXJlSUQsIGJvb2xlYW4gcmVzb2x2ZSwgYm9vbGVhbiBjb3JlVHlwZSkgeworCQlzd2l0Y2ggKGZlYXR1cmVJRCkgeworCQkJY2FzZSBUcmlnZ2VyUGFja2FnZS5UUklHR0VSX19QUkVESUNBVEU6CisJCQkJaWYgKHJlc29sdmUpIHJldHVybiBnZXRQcmVkaWNhdGUoKTsKKwkJCQlyZXR1cm4gYmFzaWNHZXRQcmVkaWNhdGUoKTsKKwkJCWNhc2UgVHJpZ2dlclBhY2thZ2UuVFJJR0dFUl9fQUNUSU9OUzoKKwkJCQlyZXR1cm4gZ2V0QWN0aW9ucygpOworCQl9CisJCXJldHVybiBzdXBlci5lR2V0KGZlYXR1cmVJRCwgcmVzb2x2ZSwgY29yZVR5cGUpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBTdXBwcmVzc1dhcm5pbmdzKCJ1bmNoZWNrZWQiKQorCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGVTZXQoaW50IGZlYXR1cmVJRCwgT2JqZWN0IG5ld1ZhbHVlKSB7CisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7CisJCQljYXNlIFRyaWdnZXJQYWNrYWdlLlRSSUdHRVJfX1BSRURJQ0FURToKKwkJCQlzZXRQcmVkaWNhdGUoKFByZWRpY2F0ZSluZXdWYWx1ZSk7CisJCQkJcmV0dXJuOworCQkJY2FzZSBUcmlnZ2VyUGFja2FnZS5UUklHR0VSX19BQ1RJT05TOgorCQkJCWdldEFjdGlvbnMoKS5jbGVhcigpOworCQkJCWdldEFjdGlvbnMoKS5hZGRBbGwoKENvbGxlY3Rpb248PyBleHRlbmRzIERlY29yYXRvcj4pbmV3VmFsdWUpOworCQkJCXJldHVybjsKKwkJfQorCQlzdXBlci5lU2V0KGZlYXR1cmVJRCwgbmV3VmFsdWUpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGVVbnNldChpbnQgZmVhdHVyZUlEKSB7CisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7CisJCQljYXNlIFRyaWdnZXJQYWNrYWdlLlRSSUdHRVJfX1BSRURJQ0FURToKKwkJCQlzZXRQcmVkaWNhdGUoKFByZWRpY2F0ZSludWxsKTsKKwkJCQlyZXR1cm47CisJCQljYXNlIFRyaWdnZXJQYWNrYWdlLlRSSUdHRVJfX0FDVElPTlM6CisJCQkJZ2V0QWN0aW9ucygpLmNsZWFyKCk7CisJCQkJcmV0dXJuOworCQl9CisJCXN1cGVyLmVVbnNldChmZWF0dXJlSUQpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBib29sZWFuIGVJc1NldChpbnQgZmVhdHVyZUlEKSB7CisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7CisJCQljYXNlIFRyaWdnZXJQYWNrYWdlLlRSSUdHRVJfX1BSRURJQ0FURToKKwkJCQlyZXR1cm4gcHJlZGljYXRlICE9IG51bGw7CisJCQljYXNlIFRyaWdnZXJQYWNrYWdlLlRSSUdHRVJfX0FDVElPTlM6CisJCQkJcmV0dXJuIGFjdGlvbnMgIT0gbnVsbCAmJiAhYWN0aW9ucy5pc0VtcHR5KCk7CisJCX0KKwkJcmV0dXJuIHN1cGVyLmVJc1NldChmZWF0dXJlSUQpOworCX0KKworfSAvL1RyaWdnZXJJbXBsCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3RyaWdnZXIvaW1wbC9UcmlnZ2VyUGFja2FnZUltcGwuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvdHJpZ2dlci9pbXBsL1RyaWdnZXJQYWNrYWdlSW1wbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJlYmYyYTIKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3RyaWdnZXIvaW1wbC9UcmlnZ2VyUGFja2FnZUltcGwuamF2YQpAQCAtMCwwICsxLDI1NiBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUudHJpZ2dlci5pbXBsOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FUmVmZXJlbmNlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FY29yZVBhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLmltcGwuRVBhY2thZ2VJbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uQ29tbW9uUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLmltcGwuQ29tbW9uUGFja2FnZUltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmV4cGVyaW1lbnQuRXhwZXJpbWVudFBhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmV4cGVyaW1lbnQuaW1wbC5FeHBlcmltZW50UGFja2FnZUltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkdyYXBoUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguaW1wbC5HcmFwaFBhY2thZ2VJbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5sb2dnZXIuTG9nZ2VyUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubG9nZ2VyLmltcGwuTG9nZ2VyUGFja2FnZUltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLk1vZGVsUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuaW1wbC5Nb2RlbFBhY2thZ2VJbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5Nb2RpZmllclBhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLmltcGwuTW9kaWZpZXJQYWNrYWdlSW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlLlByZWRpY2F0ZVBhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZS5pbXBsLlByZWRpY2F0ZVBhY2thZ2VJbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zY2VuYXJpby5TY2VuYXJpb1BhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNjZW5hcmlvLmltcGwuU2NlbmFyaW9QYWNrYWdlSW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2VxdWVuY2VyLlNlcXVlbmNlclBhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNlcXVlbmNlci5pbXBsLlNlcXVlbmNlclBhY2thZ2VJbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zb2x2ZXIuU29sdmVyUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc29sdmVyLmltcGwuU29sdmVyUGFja2FnZUltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnRyaWdnZXIuVHJpZ2dlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUudHJpZ2dlci5UcmlnZ2VyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUudHJpZ2dlci5UcmlnZ2VyUGFja2FnZTsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIG1vZGVsIDxiPlBhY2thZ2U8L2I+LgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBUcmlnZ2VyUGFja2FnZUltcGwgZXh0ZW5kcyBFUGFja2FnZUltcGwgaW1wbGVtZW50cyBUcmlnZ2VyUGFja2FnZSB7CisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJpdmF0ZSBFQ2xhc3MgdHJpZ2dlckVDbGFzcyA9IG51bGw7CisKKwkvKioKKwkgKiBDcmVhdGVzIGFuIGluc3RhbmNlIG9mIHRoZSBtb2RlbCA8Yj5QYWNrYWdlPC9iPiwgcmVnaXN0ZXJlZCB3aXRoCisJICoge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FUGFja2FnZS5SZWdpc3RyeSBFUGFja2FnZS5SZWdpc3RyeX0gYnkgdGhlIHBhY2thZ2UKKwkgKiBwYWNrYWdlIFVSSSB2YWx1ZS4KKwkgKiA8cD5Ob3RlOiB0aGUgY29ycmVjdCB3YXkgdG8gY3JlYXRlIHRoZSBwYWNrYWdlIGlzIHZpYSB0aGUgc3RhdGljCisJICogZmFjdG9yeSBtZXRob2Qge0BsaW5rICNpbml0IGluaXQoKX0sIHdoaWNoIGFsc28gcGVyZm9ybXMKKwkgKiBpbml0aWFsaXphdGlvbiBvZiB0aGUgcGFja2FnZSwgb3IgcmV0dXJucyB0aGUgcmVnaXN0ZXJlZCBwYWNrYWdlLAorCSAqIGlmIG9uZSBhbHJlYWR5IGV4aXN0cy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVQYWNrYWdlLlJlZ2lzdHJ5CisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUudHJpZ2dlci5UcmlnZ2VyUGFja2FnZSNlTlNfVVJJCisJICogQHNlZSAjaW5pdCgpCisJICogQGdlbmVyYXRlZAorCSAqLworCXByaXZhdGUgVHJpZ2dlclBhY2thZ2VJbXBsKCkgeworCQlzdXBlcihlTlNfVVJJLCBUcmlnZ2VyRmFjdG9yeS5lSU5TVEFOQ0UpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByaXZhdGUgc3RhdGljIGJvb2xlYW4gaXNJbml0ZWQgPSBmYWxzZTsKKworCS8qKgorCSAqIENyZWF0ZXMsIHJlZ2lzdGVycywgYW5kIGluaXRpYWxpemVzIHRoZSA8Yj5QYWNrYWdlPC9iPiBmb3IgdGhpcyBtb2RlbCwgYW5kIGZvciBhbnkgb3RoZXJzIHVwb24gd2hpY2ggaXQgZGVwZW5kcy4KKwkgKiAKKwkgKiA8cD5UaGlzIG1ldGhvZCBpcyB1c2VkIHRvIGluaXRpYWxpemUge0BsaW5rIFRyaWdnZXJQYWNrYWdlI2VJTlNUQU5DRX0gd2hlbiB0aGF0IGZpZWxkIGlzIGFjY2Vzc2VkLgorCSAqIENsaWVudHMgc2hvdWxkIG5vdCBpbnZva2UgaXQgZGlyZWN0bHkuIEluc3RlYWQsIHRoZXkgc2hvdWxkIHNpbXBseSBhY2Nlc3MgdGhhdCBmaWVsZCB0byBvYnRhaW4gdGhlIHBhY2thZ2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNlTlNfVVJJCisJICogQHNlZSAjY3JlYXRlUGFja2FnZUNvbnRlbnRzKCkKKwkgKiBAc2VlICNpbml0aWFsaXplUGFja2FnZUNvbnRlbnRzKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHN0YXRpYyBUcmlnZ2VyUGFja2FnZSBpbml0KCkgeworCQlpZiAoaXNJbml0ZWQpIHJldHVybiAoVHJpZ2dlclBhY2thZ2UpRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RVBhY2thZ2UoVHJpZ2dlclBhY2thZ2UuZU5TX1VSSSk7CisKKwkJLy8gT2J0YWluIG9yIGNyZWF0ZSBhbmQgcmVnaXN0ZXIgcGFja2FnZQorCQlUcmlnZ2VyUGFja2FnZUltcGwgdGhlVHJpZ2dlclBhY2thZ2UgPSAoVHJpZ2dlclBhY2thZ2VJbXBsKShFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXQoZU5TX1VSSSkgaW5zdGFuY2VvZiBUcmlnZ2VyUGFja2FnZUltcGwgPyBFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXQoZU5TX1VSSSkgOiBuZXcgVHJpZ2dlclBhY2thZ2VJbXBsKCkpOworCisJCWlzSW5pdGVkID0gdHJ1ZTsKKworCQkvLyBJbml0aWFsaXplIHNpbXBsZSBkZXBlbmRlbmNpZXMKKwkJRWNvcmVQYWNrYWdlLmVJTlNUQU5DRS5lQ2xhc3MoKTsKKworCQkvLyBPYnRhaW4gb3IgY3JlYXRlIGFuZCByZWdpc3RlciBpbnRlcmRlcGVuZGVuY2llcworCQlDb21tb25QYWNrYWdlSW1wbCB0aGVDb21tb25QYWNrYWdlID0gKENvbW1vblBhY2thZ2VJbXBsKShFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShDb21tb25QYWNrYWdlLmVOU19VUkkpIGluc3RhbmNlb2YgQ29tbW9uUGFja2FnZUltcGwgPyBFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShDb21tb25QYWNrYWdlLmVOU19VUkkpIDogQ29tbW9uUGFja2FnZS5lSU5TVEFOQ0UpOworCQlFeHBlcmltZW50UGFja2FnZUltcGwgdGhlRXhwZXJpbWVudFBhY2thZ2UgPSAoRXhwZXJpbWVudFBhY2thZ2VJbXBsKShFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShFeHBlcmltZW50UGFja2FnZS5lTlNfVVJJKSBpbnN0YW5jZW9mIEV4cGVyaW1lbnRQYWNrYWdlSW1wbCA/IEVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVQYWNrYWdlKEV4cGVyaW1lbnRQYWNrYWdlLmVOU19VUkkpIDogRXhwZXJpbWVudFBhY2thZ2UuZUlOU1RBTkNFKTsKKwkJR3JhcGhQYWNrYWdlSW1wbCB0aGVHcmFwaFBhY2thZ2UgPSAoR3JhcGhQYWNrYWdlSW1wbCkoRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RVBhY2thZ2UoR3JhcGhQYWNrYWdlLmVOU19VUkkpIGluc3RhbmNlb2YgR3JhcGhQYWNrYWdlSW1wbCA/IEVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVQYWNrYWdlKEdyYXBoUGFja2FnZS5lTlNfVVJJKSA6IEdyYXBoUGFja2FnZS5lSU5TVEFOQ0UpOworCQlNb2RlbFBhY2thZ2VJbXBsIHRoZU1vZGVsUGFja2FnZSA9IChNb2RlbFBhY2thZ2VJbXBsKShFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShNb2RlbFBhY2thZ2UuZU5TX1VSSSkgaW5zdGFuY2VvZiBNb2RlbFBhY2thZ2VJbXBsID8gRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RVBhY2thZ2UoTW9kZWxQYWNrYWdlLmVOU19VUkkpIDogTW9kZWxQYWNrYWdlLmVJTlNUQU5DRSk7CisJCU1vZGlmaWVyUGFja2FnZUltcGwgdGhlTW9kaWZpZXJQYWNrYWdlID0gKE1vZGlmaWVyUGFja2FnZUltcGwpKEVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVQYWNrYWdlKE1vZGlmaWVyUGFja2FnZS5lTlNfVVJJKSBpbnN0YW5jZW9mIE1vZGlmaWVyUGFja2FnZUltcGwgPyBFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShNb2RpZmllclBhY2thZ2UuZU5TX1VSSSkgOiBNb2RpZmllclBhY2thZ2UuZUlOU1RBTkNFKTsKKwkJUHJlZGljYXRlUGFja2FnZUltcGwgdGhlUHJlZGljYXRlUGFja2FnZSA9IChQcmVkaWNhdGVQYWNrYWdlSW1wbCkoRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RVBhY2thZ2UoUHJlZGljYXRlUGFja2FnZS5lTlNfVVJJKSBpbnN0YW5jZW9mIFByZWRpY2F0ZVBhY2thZ2VJbXBsID8gRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RVBhY2thZ2UoUHJlZGljYXRlUGFja2FnZS5lTlNfVVJJKSA6IFByZWRpY2F0ZVBhY2thZ2UuZUlOU1RBTkNFKTsKKwkJU2NlbmFyaW9QYWNrYWdlSW1wbCB0aGVTY2VuYXJpb1BhY2thZ2UgPSAoU2NlbmFyaW9QYWNrYWdlSW1wbCkoRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RVBhY2thZ2UoU2NlbmFyaW9QYWNrYWdlLmVOU19VUkkpIGluc3RhbmNlb2YgU2NlbmFyaW9QYWNrYWdlSW1wbCA/IEVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVQYWNrYWdlKFNjZW5hcmlvUGFja2FnZS5lTlNfVVJJKSA6IFNjZW5hcmlvUGFja2FnZS5lSU5TVEFOQ0UpOworCQlTZXF1ZW5jZXJQYWNrYWdlSW1wbCB0aGVTZXF1ZW5jZXJQYWNrYWdlID0gKFNlcXVlbmNlclBhY2thZ2VJbXBsKShFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShTZXF1ZW5jZXJQYWNrYWdlLmVOU19VUkkpIGluc3RhbmNlb2YgU2VxdWVuY2VyUGFja2FnZUltcGwgPyBFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShTZXF1ZW5jZXJQYWNrYWdlLmVOU19VUkkpIDogU2VxdWVuY2VyUGFja2FnZS5lSU5TVEFOQ0UpOworCQlTb2x2ZXJQYWNrYWdlSW1wbCB0aGVTb2x2ZXJQYWNrYWdlID0gKFNvbHZlclBhY2thZ2VJbXBsKShFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShTb2x2ZXJQYWNrYWdlLmVOU19VUkkpIGluc3RhbmNlb2YgU29sdmVyUGFja2FnZUltcGwgPyBFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShTb2x2ZXJQYWNrYWdlLmVOU19VUkkpIDogU29sdmVyUGFja2FnZS5lSU5TVEFOQ0UpOworCQlMb2dnZXJQYWNrYWdlSW1wbCB0aGVMb2dnZXJQYWNrYWdlID0gKExvZ2dlclBhY2thZ2VJbXBsKShFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShMb2dnZXJQYWNrYWdlLmVOU19VUkkpIGluc3RhbmNlb2YgTG9nZ2VyUGFja2FnZUltcGwgPyBFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShMb2dnZXJQYWNrYWdlLmVOU19VUkkpIDogTG9nZ2VyUGFja2FnZS5lSU5TVEFOQ0UpOworCisJCS8vIENyZWF0ZSBwYWNrYWdlIG1ldGEtZGF0YSBvYmplY3RzCisJCXRoZVRyaWdnZXJQYWNrYWdlLmNyZWF0ZVBhY2thZ2VDb250ZW50cygpOworCQl0aGVDb21tb25QYWNrYWdlLmNyZWF0ZVBhY2thZ2VDb250ZW50cygpOworCQl0aGVFeHBlcmltZW50UGFja2FnZS5jcmVhdGVQYWNrYWdlQ29udGVudHMoKTsKKwkJdGhlR3JhcGhQYWNrYWdlLmNyZWF0ZVBhY2thZ2VDb250ZW50cygpOworCQl0aGVNb2RlbFBhY2thZ2UuY3JlYXRlUGFja2FnZUNvbnRlbnRzKCk7CisJCXRoZU1vZGlmaWVyUGFja2FnZS5jcmVhdGVQYWNrYWdlQ29udGVudHMoKTsKKwkJdGhlUHJlZGljYXRlUGFja2FnZS5jcmVhdGVQYWNrYWdlQ29udGVudHMoKTsKKwkJdGhlU2NlbmFyaW9QYWNrYWdlLmNyZWF0ZVBhY2thZ2VDb250ZW50cygpOworCQl0aGVTZXF1ZW5jZXJQYWNrYWdlLmNyZWF0ZVBhY2thZ2VDb250ZW50cygpOworCQl0aGVTb2x2ZXJQYWNrYWdlLmNyZWF0ZVBhY2thZ2VDb250ZW50cygpOworCQl0aGVMb2dnZXJQYWNrYWdlLmNyZWF0ZVBhY2thZ2VDb250ZW50cygpOworCisJCS8vIEluaXRpYWxpemUgY3JlYXRlZCBtZXRhLWRhdGEKKwkJdGhlVHJpZ2dlclBhY2thZ2UuaW5pdGlhbGl6ZVBhY2thZ2VDb250ZW50cygpOworCQl0aGVDb21tb25QYWNrYWdlLmluaXRpYWxpemVQYWNrYWdlQ29udGVudHMoKTsKKwkJdGhlRXhwZXJpbWVudFBhY2thZ2UuaW5pdGlhbGl6ZVBhY2thZ2VDb250ZW50cygpOworCQl0aGVHcmFwaFBhY2thZ2UuaW5pdGlhbGl6ZVBhY2thZ2VDb250ZW50cygpOworCQl0aGVNb2RlbFBhY2thZ2UuaW5pdGlhbGl6ZVBhY2thZ2VDb250ZW50cygpOworCQl0aGVNb2RpZmllclBhY2thZ2UuaW5pdGlhbGl6ZVBhY2thZ2VDb250ZW50cygpOworCQl0aGVQcmVkaWNhdGVQYWNrYWdlLmluaXRpYWxpemVQYWNrYWdlQ29udGVudHMoKTsKKwkJdGhlU2NlbmFyaW9QYWNrYWdlLmluaXRpYWxpemVQYWNrYWdlQ29udGVudHMoKTsKKwkJdGhlU2VxdWVuY2VyUGFja2FnZS5pbml0aWFsaXplUGFja2FnZUNvbnRlbnRzKCk7CisJCXRoZVNvbHZlclBhY2thZ2UuaW5pdGlhbGl6ZVBhY2thZ2VDb250ZW50cygpOworCQl0aGVMb2dnZXJQYWNrYWdlLmluaXRpYWxpemVQYWNrYWdlQ29udGVudHMoKTsKKworCQkvLyBNYXJrIG1ldGEtZGF0YSB0byBpbmRpY2F0ZSBpdCBjYW4ndCBiZSBjaGFuZ2VkCisJCXRoZVRyaWdnZXJQYWNrYWdlLmZyZWV6ZSgpOworCisgIAorCQkvLyBVcGRhdGUgdGhlIHJlZ2lzdHJ5IGFuZCByZXR1cm4gdGhlIHBhY2thZ2UKKwkJRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UucHV0KFRyaWdnZXJQYWNrYWdlLmVOU19VUkksIHRoZVRyaWdnZXJQYWNrYWdlKTsKKwkJcmV0dXJuIHRoZVRyaWdnZXJQYWNrYWdlOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQ2xhc3MgZ2V0VHJpZ2dlcigpIHsKKwkJcmV0dXJuIHRyaWdnZXJFQ2xhc3M7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVSZWZlcmVuY2UgZ2V0VHJpZ2dlcl9QcmVkaWNhdGUoKSB7CisJCXJldHVybiAoRVJlZmVyZW5jZSl0cmlnZ2VyRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVSZWZlcmVuY2UgZ2V0VHJpZ2dlcl9BY3Rpb25zKCkgeworCQlyZXR1cm4gKEVSZWZlcmVuY2UpdHJpZ2dlckVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDEpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBUcmlnZ2VyRmFjdG9yeSBnZXRUcmlnZ2VyRmFjdG9yeSgpIHsKKwkJcmV0dXJuIChUcmlnZ2VyRmFjdG9yeSlnZXRFRmFjdG9yeUluc3RhbmNlKCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJpdmF0ZSBib29sZWFuIGlzQ3JlYXRlZCA9IGZhbHNlOworCisJLyoqCisJICogQ3JlYXRlcyB0aGUgbWV0YS1tb2RlbCBvYmplY3RzIGZvciB0aGUgcGFja2FnZS4gIFRoaXMgbWV0aG9kIGlzCisJICogZ3VhcmRlZCB0byBoYXZlIG5vIGFmZmVjdCBvbiBhbnkgaW52b2NhdGlvbiBidXQgaXRzIGZpcnN0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIGNyZWF0ZVBhY2thZ2VDb250ZW50cygpIHsKKwkJaWYgKGlzQ3JlYXRlZCkgcmV0dXJuOworCQlpc0NyZWF0ZWQgPSB0cnVlOworCisJCS8vIENyZWF0ZSBjbGFzc2VzIGFuZCB0aGVpciBmZWF0dXJlcworCQl0cmlnZ2VyRUNsYXNzID0gY3JlYXRlRUNsYXNzKFRSSUdHRVIpOworCQljcmVhdGVFUmVmZXJlbmNlKHRyaWdnZXJFQ2xhc3MsIFRSSUdHRVJfX1BSRURJQ0FURSk7CisJCWNyZWF0ZUVSZWZlcmVuY2UodHJpZ2dlckVDbGFzcywgVFJJR0dFUl9fQUNUSU9OUyk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJpdmF0ZSBib29sZWFuIGlzSW5pdGlhbGl6ZWQgPSBmYWxzZTsKKworCS8qKgorCSAqIENvbXBsZXRlIHRoZSBpbml0aWFsaXphdGlvbiBvZiB0aGUgcGFja2FnZSBhbmQgaXRzIG1ldGEtbW9kZWwuICBUaGlzCisJICogbWV0aG9kIGlzIGd1YXJkZWQgdG8gaGF2ZSBubyBhZmZlY3Qgb24gYW55IGludm9jYXRpb24gYnV0IGl0cyBmaXJzdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBpbml0aWFsaXplUGFja2FnZUNvbnRlbnRzKCkgeworCQlpZiAoaXNJbml0aWFsaXplZCkgcmV0dXJuOworCQlpc0luaXRpYWxpemVkID0gdHJ1ZTsKKworCQkvLyBJbml0aWFsaXplIHBhY2thZ2UKKwkJc2V0TmFtZShlTkFNRSk7CisJCXNldE5zUHJlZml4KGVOU19QUkVGSVgpOworCQlzZXROc1VSSShlTlNfVVJJKTsKKworCQkvLyBPYnRhaW4gb3RoZXIgZGVwZW5kZW50IHBhY2thZ2VzCisJCU1vZGVsUGFja2FnZSB0aGVNb2RlbFBhY2thZ2UgPSAoTW9kZWxQYWNrYWdlKUVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVQYWNrYWdlKE1vZGVsUGFja2FnZS5lTlNfVVJJKTsKKwkJUHJlZGljYXRlUGFja2FnZSB0aGVQcmVkaWNhdGVQYWNrYWdlID0gKFByZWRpY2F0ZVBhY2thZ2UpRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RVBhY2thZ2UoUHJlZGljYXRlUGFja2FnZS5lTlNfVVJJKTsKKworCQkvLyBDcmVhdGUgdHlwZSBwYXJhbWV0ZXJzCisKKwkJLy8gU2V0IGJvdW5kcyBmb3IgdHlwZSBwYXJhbWV0ZXJzCisKKwkJLy8gQWRkIHN1cGVydHlwZXMgdG8gY2xhc3NlcworCQl0cmlnZ2VyRUNsYXNzLmdldEVTdXBlclR5cGVzKCkuYWRkKHRoZU1vZGVsUGFja2FnZS5nZXREZWNvcmF0b3IoKSk7CisKKwkJLy8gSW5pdGlhbGl6ZSBjbGFzc2VzIGFuZCBmZWF0dXJlczsgYWRkIG9wZXJhdGlvbnMgYW5kIHBhcmFtZXRlcnMKKwkJaW5pdEVDbGFzcyh0cmlnZ2VyRUNsYXNzLCBUcmlnZ2VyLmNsYXNzLCAiVHJpZ2dlciIsICFJU19BQlNUUkFDVCwgIUlTX0lOVEVSRkFDRSwgSVNfR0VORVJBVEVEX0lOU1RBTkNFX0NMQVNTKTsgLy8kTk9OLU5MUy0xJAorCQlpbml0RVJlZmVyZW5jZShnZXRUcmlnZ2VyX1ByZWRpY2F0ZSgpLCB0aGVQcmVkaWNhdGVQYWNrYWdlLmdldFByZWRpY2F0ZSgpLCBudWxsLCAicHJlZGljYXRlIiwgbnVsbCwgMCwgMSwgVHJpZ2dlci5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfQ09NUE9TSVRFLCBJU19SRVNPTFZFX1BST1hJRVMsICFJU19VTlNFVFRBQkxFLCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsgLy8kTk9OLU5MUy0xJAorCQlpbml0RVJlZmVyZW5jZShnZXRUcmlnZ2VyX0FjdGlvbnMoKSwgdGhlTW9kZWxQYWNrYWdlLmdldERlY29yYXRvcigpLCBudWxsLCAiYWN0aW9ucyIsIG51bGwsIDAsIC0xLCBUcmlnZ2VyLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19DT01QT1NJVEUsIElTX1JFU09MVkVfUFJPWElFUywgIUlTX1VOU0VUVEFCTEUsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOyAvLyROT04tTkxTLTEkCisKKwkJLy8gQ3JlYXRlIHJlc291cmNlCisJCWNyZWF0ZVJlc291cmNlKGVOU19VUkkpOworCX0KKworfSAvL1RyaWdnZXJQYWNrYWdlSW1wbApkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS90cmlnZ2VyL3Byb3ZpZGVyL1RyaWdnZXJJdGVtUHJvdmlkZXIuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvdHJpZ2dlci9wcm92aWRlci9UcmlnZ2VySXRlbVByb3ZpZGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmNkZTI4MwotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvdHJpZ2dlci9wcm92aWRlci9UcmlnZ2VySXRlbVByb3ZpZGVyLmphdmEKQEAgLTAsMCArMSwyOTcgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnRyaWdnZXIucHJvdmlkZXI7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JRmlsZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLmNvbW1hbmQuQ29tbWFuZDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5BZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlJlc291cmNlTG9jYXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuVVJJOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FU3RydWN0dXJhbEZlYXR1cmU7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQuZG9tYWluLkVkaXRpbmdEb21haW47CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JRWRpdGluZ0RvbWFpbkl0ZW1Qcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbUxhYmVsUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1Qcm9wZXJ0eVNvdXJjZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JU3RydWN0dXJlZEl0ZW1Db250ZW50UHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVRyZWVJdGVtQ29udGVudFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLlZpZXdlck5vdGlmaWNhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuVXRpbGl0eTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLklkZW50aWZpYWJsZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLnByb3ZpZGVyLkNvcmVFZGl0UGx1Z2luOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5EZWNvcmF0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLnByb3ZpZGVyLkRlY29yYXRvckl0ZW1Qcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlLlByZWRpY2F0ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUudHJpZ2dlci5UcmlnZ2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS50cmlnZ2VyLlRyaWdnZXJQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5kbmQuRE5EOworCisvKioKKyAqIFRoaXMgaXMgdGhlIGl0ZW0gcHJvdmlkZXIgYWRhcHRlciBmb3IgYSB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnRyaWdnZXIuVHJpZ2dlcn0gb2JqZWN0LgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgVHJpZ2dlckl0ZW1Qcm92aWRlcgorCWV4dGVuZHMgRGVjb3JhdG9ySXRlbVByb3ZpZGVyCisJaW1wbGVtZW50cworCQlJRWRpdGluZ0RvbWFpbkl0ZW1Qcm92aWRlciwKKwkJSVN0cnVjdHVyZWRJdGVtQ29udGVudFByb3ZpZGVyLAorCQlJVHJlZUl0ZW1Db250ZW50UHJvdmlkZXIsCisJCUlJdGVtTGFiZWxQcm92aWRlciwKKwkJSUl0ZW1Qcm9wZXJ0eVNvdXJjZSB7CisJLyoqCisJICogVGhpcyBjb25zdHJ1Y3RzIGFuIGluc3RhbmNlIGZyb20gYSBmYWN0b3J5IGFuZCBhIG5vdGlmaWVyLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBUcmlnZ2VySXRlbVByb3ZpZGVyKEFkYXB0ZXJGYWN0b3J5IGFkYXB0ZXJGYWN0b3J5KSB7CisJCXN1cGVyKGFkYXB0ZXJGYWN0b3J5KTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgdGhlIHByb3BlcnR5IGRlc2NyaXB0b3JzIGZvciB0aGUgYWRhcHRlZCBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgTGlzdDxJSXRlbVByb3BlcnR5RGVzY3JpcHRvcj4gZ2V0UHJvcGVydHlEZXNjcmlwdG9ycyhPYmplY3Qgb2JqZWN0KSB7CisJCWlmIChpdGVtUHJvcGVydHlEZXNjcmlwdG9ycyA9PSBudWxsKSB7CisJCQlzdXBlci5nZXRQcm9wZXJ0eURlc2NyaXB0b3JzKG9iamVjdCk7CisKKwkJCWFkZEFjdGlvbnNQcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0KTsKKwkJfQorCQlyZXR1cm4gaXRlbVByb3BlcnR5RGVzY3JpcHRvcnM7CisJfQorCisJLyoqCisJICogVGhpcyBhZGRzIGEgcHJvcGVydHkgZGVzY3JpcHRvciBmb3IgdGhlIEFjdGlvbnMgZmVhdHVyZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBhZGRBY3Rpb25zUHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdCBvYmplY3QpIHsKKwkJaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMuYWRkCisJCQkoY3JlYXRlSXRlbVByb3BlcnR5RGVzY3JpcHRvcgorCQkJCSgoKENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnkpYWRhcHRlckZhY3RvcnkpLmdldFJvb3RBZGFwdGVyRmFjdG9yeSgpLAorCQkJCSBnZXRSZXNvdXJjZUxvY2F0b3IoKSwKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfVHJpZ2dlcl9hY3Rpb25zX2ZlYXR1cmUiKSwgLy8kTk9OLU5MUy0xJAorCQkJCSBnZXRTdHJpbmcoIl9VSV9Qcm9wZXJ0eURlc2NyaXB0b3JfZGVzY3JpcHRpb24iLCAiX1VJX1RyaWdnZXJfYWN0aW9uc19mZWF0dXJlIiwgIl9VSV9UcmlnZ2VyX3R5cGUiKSwgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkIC8vJE5PTi1OTFMtMyQKKwkJCQkgVHJpZ2dlclBhY2thZ2UuTGl0ZXJhbHMuVFJJR0dFUl9fQUNUSU9OUywKKwkJCQkgdHJ1ZSwKKwkJCQkgZmFsc2UsCisJCQkJIHRydWUsCisJCQkJIG51bGwsCisJCQkJIG51bGwsCisJCQkJIG51bGwpKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHNwZWNpZmllcyBob3cgdG8gaW1wbGVtZW50IHtAbGluayAjZ2V0Q2hpbGRyZW59IGFuZCBpcyB1c2VkIHRvIGRlZHVjZSBhbiBhcHByb3ByaWF0ZSBmZWF0dXJlIGZvciBhbgorCSAqIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuZWRpdC5jb21tYW5kLkFkZENvbW1hbmR9LCB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmVkaXQuY29tbWFuZC5SZW1vdmVDb21tYW5kfSBvcgorCSAqIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuZWRpdC5jb21tYW5kLk1vdmVDb21tYW5kfSBpbiB7QGxpbmsgI2NyZWF0ZUNvbW1hbmR9LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBDb2xsZWN0aW9uPD8gZXh0ZW5kcyBFU3RydWN0dXJhbEZlYXR1cmU+IGdldENoaWxkcmVuRmVhdHVyZXMoT2JqZWN0IG9iamVjdCkgeworCQlpZiAoY2hpbGRyZW5GZWF0dXJlcyA9PSBudWxsKSB7CisJCQlzdXBlci5nZXRDaGlsZHJlbkZlYXR1cmVzKG9iamVjdCk7CisJCQljaGlsZHJlbkZlYXR1cmVzLmFkZChUcmlnZ2VyUGFja2FnZS5MaXRlcmFscy5UUklHR0VSX19QUkVESUNBVEUpOworCQl9CisJCXJldHVybiBjaGlsZHJlbkZlYXR1cmVzOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCBFU3RydWN0dXJhbEZlYXR1cmUgZ2V0Q2hpbGRGZWF0dXJlKE9iamVjdCBvYmplY3QsIE9iamVjdCBjaGlsZCkgeworCQkvLyBDaGVjayB0aGUgdHlwZSBvZiB0aGUgc3BlY2lmaWVkIGNoaWxkIG9iamVjdCBhbmQgcmV0dXJuIHRoZSBwcm9wZXIgZmVhdHVyZSB0byB1c2UgZm9yCisJCS8vIGFkZGluZyAoc2VlIHtAbGluayBBZGRDb21tYW5kfSkgaXQgYXMgYSBjaGlsZC4KKworCQlyZXR1cm4gc3VwZXIuZ2V0Q2hpbGRGZWF0dXJlKG9iamVjdCwgY2hpbGQpOworCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyBUcmlnZ2VyLmdpZi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIE9iamVjdCBnZXRJbWFnZShPYmplY3Qgb2JqZWN0KSB7CisJCXJldHVybiBvdmVybGF5SW1hZ2Uob2JqZWN0LCBnZXRSZXNvdXJjZUxvY2F0b3IoKS5nZXRJbWFnZSgiZnVsbC9jdXN0b21vYmoxNi9UcmlnZ2VyIikpOworCX0KKwkKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgVHJpZ2dlci5naWYuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIE9iamVjdCBnZXRJbWFnZUdlbihPYmplY3Qgb2JqZWN0KSB7CisJCXJldHVybiBvdmVybGF5SW1hZ2Uob2JqZWN0LCBnZXRSZXNvdXJjZUxvY2F0b3IoKS5nZXRJbWFnZSgiZnVsbC9vYmoxNi9UcmlnZ2VyIikpOyAvLyROT04tTkxTLTEkCisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIHRoZSBsYWJlbCB0ZXh0IGZvciB0aGUgYWRhcHRlZCBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIFN0cmluZyBnZXRUZXh0KE9iamVjdCBvYmplY3QpIHsKKwkJcmV0dXJuIHN1cGVyLmdldFRleHQob2JqZWN0KTsKKwkJfQorCQorCS8qKgorCSAqIFRoaXMgcmV0dXJucyB0aGUgbGFiZWwgdGV4dCBmb3IgdGhlIGFkYXB0ZWQgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIFN0cmluZyBnZXRUZXh0R2VuKE9iamVjdCBvYmplY3QpIHsKKwkJVVJJIGxhYmVsVmFsdWUgPSAoKFRyaWdnZXIpb2JqZWN0KS5nZXRVUkkoKTsKKwkJU3RyaW5nIGxhYmVsID0gbGFiZWxWYWx1ZSA9PSBudWxsID8gbnVsbCA6IGxhYmVsVmFsdWUudG9TdHJpbmcoKTsKKwkJcmV0dXJuIGxhYmVsID09IG51bGwgfHwgbGFiZWwubGVuZ3RoKCkgPT0gMCA/CisJCQlnZXRTdHJpbmcoIl9VSV9UcmlnZ2VyX3R5cGUiKSA6IC8vJE5PTi1OTFMtMSQKKwkJCWdldFN0cmluZygiX1VJX1RyaWdnZXJfdHlwZSIpICsgIiAiICsgbGFiZWw7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAorCX0KKwkKKworCS8qKgorCSAqIFRoaXMgaGFuZGxlcyBtb2RlbCBub3RpZmljYXRpb25zIGJ5IGNhbGxpbmcge0BsaW5rICN1cGRhdGVDaGlsZHJlbn0gdG8gdXBkYXRlIGFueSBjYWNoZWQKKwkgKiBjaGlsZHJlbiBhbmQgYnkgY3JlYXRpbmcgYSB2aWV3ZXIgbm90aWZpY2F0aW9uLCB3aGljaCBpdCBwYXNzZXMgdG8ge0BsaW5rICNmaXJlTm90aWZ5Q2hhbmdlZH0uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgbm90aWZ5Q2hhbmdlZChOb3RpZmljYXRpb24gbm90aWZpY2F0aW9uKSB7CisJCXVwZGF0ZUNoaWxkcmVuKG5vdGlmaWNhdGlvbik7CisKKwkJc3dpdGNoIChub3RpZmljYXRpb24uZ2V0RmVhdHVyZUlEKFRyaWdnZXIuY2xhc3MpKSB7CisJCQljYXNlIFRyaWdnZXJQYWNrYWdlLlRSSUdHRVJfX1BSRURJQ0FURToKKwkJCQlmaXJlTm90aWZ5Q2hhbmdlZChuZXcgVmlld2VyTm90aWZpY2F0aW9uKG5vdGlmaWNhdGlvbiwgbm90aWZpY2F0aW9uLmdldE5vdGlmaWVyKCksIHRydWUsIGZhbHNlKSk7CisJCQkJcmV0dXJuOworCQl9CisJCXN1cGVyLm5vdGlmeUNoYW5nZWQobm90aWZpY2F0aW9uKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFkZHMge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lZGl0LmNvbW1hbmQuQ29tbWFuZFBhcmFtZXRlcn1zIGRlc2NyaWJpbmcgdGhlIGNoaWxkcmVuCisJICogdGhhdCBjYW4gYmUgY3JlYXRlZCB1bmRlciB0aGlzIG9iamVjdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgdm9pZCBjb2xsZWN0TmV3Q2hpbGREZXNjcmlwdG9ycyhDb2xsZWN0aW9uPE9iamVjdD4gbmV3Q2hpbGREZXNjcmlwdG9ycywgT2JqZWN0IG9iamVjdCkgeworCQlzdXBlci5jb2xsZWN0TmV3Q2hpbGREZXNjcmlwdG9ycyhuZXdDaGlsZERlc2NyaXB0b3JzLCBvYmplY3QpOworCX0KKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSXRlbVByb3ZpZGVyQWRhcHRlciNjcmVhdGVTZXRDb21tYW5kKG9yZy5lY2xpcHNlLmVtZi5lZGl0LmRvbWFpbi5FZGl0aW5nRG9tYWluLAorCSAqICAgICAgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QsCisJICogICAgICBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRVN0cnVjdHVyYWxGZWF0dXJlLCBqYXZhLmxhbmcuT2JqZWN0LCBpbnQpCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIENvbW1hbmQgY3JlYXRlU2V0Q29tbWFuZChFZGl0aW5nRG9tYWluIGRvbWFpbiwgRU9iamVjdCBvd25lciwKKwkJCUVTdHJ1Y3R1cmFsRmVhdHVyZSBmZWF0dXJlLCBPYmplY3QgdmFsdWUsIGludCBpbmRleCkgeworCQkvLyBBcmUgd2Ugc2V0dGluZyB0aGUgbW9kZWwgZHVyaW5nIGEgZHJhZyBhbmQgZHJvcD8KKwkJT2JqZWN0IHRlbXAgPSB2YWx1ZTsKKworCQlpZiAodmFsdWUgaW5zdGFuY2VvZiBJRmlsZSkgeworCQkJLy8gWWVzCisJCQlmaW5hbCBJRmlsZSBpRmlsZSA9IChJRmlsZSkgdmFsdWU7CisJCQlmaW5hbCBVUkkgdXJpID0gVVJJLmNyZWF0ZUZpbGVVUkkoaUZpbGUuZ2V0TG9jYXRpb24oKS50b1N0cmluZygpKTsKKwkJCWZpbmFsIElkZW50aWZpYWJsZSBpZGVudGlmYWJsZSA9IFV0aWxpdHkuZ2V0SWRlbnRpZmlhYmxlKHVyaSk7CisJCQl0ZW1wID0gaWRlbnRpZmFibGU7CisJCX0gLy8gaWYgSUZpbGUKKworCQllbHNlIGlmICh2YWx1ZSBpbnN0YW5jZW9mIFN0cmluZykgeworCQkJLy8gWWVzCisJCQkvLyBUaGVzZSBjb21lIGZyb20gSWRlbnRpZmFibGVQbHVnaW5WaWV3CisJCQlmaW5hbCBTdHJpbmcgdXJpU3RyaW5nID0gKFN0cmluZykgdmFsdWU7CisJCQl0cnkgeworCQkJCWZpbmFsIFVSSSB1cmkgPSBVUkkuY3JlYXRlVVJJKHVyaVN0cmluZyk7CisJCQkJZmluYWwgSWRlbnRpZmlhYmxlIGlkZW50aWZhYmxlID0gVXRpbGl0eS5nZXRJZGVudGlmaWFibGUodXJpKTsKKwkJCQl0ZW1wID0gaWRlbnRpZmFibGU7CisJCQl9IGNhdGNoIChFeGNlcHRpb24gZSkgeworCQkJCS8vIElnbm9yZSBpdAorCQkJfQorCQl9IC8vIGlmIFN0cmluZworCisJCWlmICh0ZW1wIGluc3RhbmNlb2YgUHJlZGljYXRlKSB7CisJCQlyZXR1cm4gc3VwZXIuY3JlYXRlU2V0Q29tbWFuZChkb21haW4sIG93bmVyLAorCQkJCQlUcmlnZ2VyUGFja2FnZS5lSU5TVEFOQ0UuZ2V0VHJpZ2dlcl9QcmVkaWNhdGUoKSwgdGVtcCwgaW5kZXgpOworCQl9IGVsc2UgaWYgKHRlbXAgaW5zdGFuY2VvZiBEZWNvcmF0b3IpIHsKKwkJCXJldHVybiBzdXBlci5jcmVhdGVTZXRDb21tYW5kKGRvbWFpbiwgb3duZXIsCisJCQkJCVRyaWdnZXJQYWNrYWdlLmVJTlNUQU5DRS5nZXRUcmlnZ2VyX0FjdGlvbnMoKSwgdGVtcCwKKwkJCQkJaW5kZXgpOworCQl9IC8vIGlmCisJCWVsc2UgeworCQkJcmV0dXJuIHN1cGVyLmNyZWF0ZVNldENvbW1hbmQoZG9tYWluLCBvd25lciwgZmVhdHVyZSwgdmFsdWUsIGluZGV4KTsKKwkJfQorCX0gLy8gY3JlYXRlU2V0Q29tbWFuZAorCQorCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSXRlbVByb3ZpZGVyQWRhcHRlciNjcmVhdGVEcmFnQW5kRHJvcENvbW1hbmQob3JnLmVjbGlwc2UuZW1mLmVkaXQuZG9tYWluLkVkaXRpbmdEb21haW4sCisJICogICAgICBqYXZhLmxhbmcuT2JqZWN0LCBmbG9hdCwgaW50LCBpbnQsIGphdmEudXRpbC5Db2xsZWN0aW9uKQorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCBDb21tYW5kIGNyZWF0ZURyYWdBbmREcm9wQ29tbWFuZChFZGl0aW5nRG9tYWluIGRvbWFpbiwKKwkJCU9iamVjdCBvd25lciwgZmxvYXQgbG9jYXRpb24sIGludCBvcGVyYXRpb25zLCBpbnQgb3BlcmF0aW9uLAorCQkJQ29sbGVjdGlvbjw/PiBjb2xsZWN0aW9uKSB7CisJCS8vIFdlIGFkZCBETkQuRFJPUF9MSU5LIGFzIGFuIGFsbG93ZWQgb3BlcmF0aW9uIGJlY2F1c2UgYWxsIGRyb3BzIHdpbGwKKwkJLy8gYmUgbGlua3MgYW5kIHNvbWUgc291cmNlcyBkb24ndCBhbGxvdyBsaW5rcywgd2UgY29udmVydCB0byBsaW5rcworCQkvLyBhbnl3YXkKKwkJcmV0dXJuIHN1cGVyLmNyZWF0ZURyYWdBbmREcm9wQ29tbWFuZChkb21haW4sIG93bmVyLCBsb2NhdGlvbiwKKwkJCQlvcGVyYXRpb25zIHwgRE5ELkRST1BfTElOSywgb3BlcmF0aW9uLCBjb2xsZWN0aW9uKTsKKwl9IC8vIGNyZWF0ZURyYWdBbmREcm9wQ29tbWFuZAorCQorCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSXRlbVByb3ZpZGVyQWRhcHRlciNpc1dyYXBwaW5nTmVlZGVkKGphdmEubGFuZy5PYmplY3QpCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIGJvb2xlYW4gaXNXcmFwcGluZ05lZWRlZChPYmplY3Qgb2JqZWN0KSB7CisJCS8vIHJldHVybiBzdXBlci5pc1dyYXBwaW5nTmVlZGVkKG9iamVjdCk7CisJCS8vIFdlIHJldHVybiB0cnVlIHNvIHRoYXQgbm9uLWNvbnRhaW5tZW50IHJlZmVyZW5jZXMgYXJlIHdyYXBwZWQuIFRoaXMKKwkJLy8gZW5hYmxlcyB0aGUgZGVsZXRlIGNvbW1hbmQgaW4gdGhlIGVkaXRvcidzIGNvbnRleHQgbWVudS4KKwkJcmV0dXJuIHRydWU7CisJfSAvLyBpc1dyYXBwaW5nTmVlZGVkCisJCisJLyoqCisJICogUmV0dXJuIHRoZSByZXNvdXJjZSBsb2NhdG9yIGZvciB0aGlzIGl0ZW0gcHJvdmlkZXIncyByZXNvdXJjZXMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIFJlc291cmNlTG9jYXRvciBnZXRSZXNvdXJjZUxvY2F0b3IoKSB7CisJCXJldHVybiBDb3JlRWRpdFBsdWdpbi5JTlNUQU5DRTsKKwl9CisKK30KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvdHJpZ2dlci9wcm92aWRlci9UcmlnZ2VySXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvdHJpZ2dlci9wcm92aWRlci9UcmlnZ2VySXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYmFlOWRlCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS90cmlnZ2VyL3Byb3ZpZGVyL1RyaWdnZXJJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeS5qYXZhCkBAIC0wLDAgKzEsMjA3IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS50cmlnZ2VyLnByb3ZpZGVyOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7CitpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5BZGFwdGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmllcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5DaGFuZ2VOb3RpZmllcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5Db21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkNvbXBvc2VkQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUNoYW5nZU5vdGlmaWVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklEaXNwb3NhYmxlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklFZGl0aW5nRG9tYWluSXRlbVByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtTGFiZWxQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbVByb3BlcnR5U291cmNlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklOb3RpZnlDaGFuZ2VkTGlzdGVuZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVN0cnVjdHVyZWRJdGVtQ29udGVudFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklUcmVlSXRlbUNvbnRlbnRQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUudHJpZ2dlci51dGlsLlRyaWdnZXJBZGFwdGVyRmFjdG9yeTsKKworLyoqCisgKiBUaGlzIGlzIHRoZSBmYWN0b3J5IHRoYXQgaXMgdXNlZCB0byBwcm92aWRlIHRoZSBpbnRlcmZhY2VzIG5lZWRlZCB0byBzdXBwb3J0IFZpZXdlcnMuCisgKiBUaGUgYWRhcHRlcnMgZ2VuZXJhdGVkIGJ5IHRoaXMgZmFjdG9yeSBjb252ZXJ0IEVNRiBhZGFwdGVyIG5vdGlmaWNhdGlvbnMgaW50byBjYWxscyB0byB7QGxpbmsgI2ZpcmVOb3RpZnlDaGFuZ2VkIGZpcmVOb3RpZnlDaGFuZ2VkfS4KKyAqIFRoZSBhZGFwdGVycyBhbHNvIHN1cHBvcnQgRWNsaXBzZSBwcm9wZXJ0eSBzaGVldHMuCisgKiBOb3RlIHRoYXQgbW9zdCBvZiB0aGUgYWRhcHRlcnMgYXJlIHNoYXJlZCBhbW9uZyBtdWx0aXBsZSBpbnN0YW5jZXMuCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBUcmlnZ2VySXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkgZXh0ZW5kcyBUcmlnZ2VyQWRhcHRlckZhY3RvcnkgaW1wbGVtZW50cyBDb21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5LCBJQ2hhbmdlTm90aWZpZXIsIElEaXNwb3NhYmxlIHsKKwkvKioKKwkgKiBUaGlzIGtlZXBzIHRyYWNrIG9mIHRoZSByb290IGFkYXB0ZXIgZmFjdG9yeSB0aGF0IGRlbGVnYXRlcyB0byB0aGlzIGFkYXB0ZXIgZmFjdG9yeS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgQ29tcG9zZWRBZGFwdGVyRmFjdG9yeSBwYXJlbnRBZGFwdGVyRmFjdG9yeTsKKworCS8qKgorCSAqIFRoaXMgaXMgdXNlZCB0byBpbXBsZW1lbnQge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklDaGFuZ2VOb3RpZmllcn0uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIElDaGFuZ2VOb3RpZmllciBjaGFuZ2VOb3RpZmllciA9IG5ldyBDaGFuZ2VOb3RpZmllcigpOworCisJLyoqCisJICogVGhpcyBrZWVwcyB0cmFjayBvZiBhbGwgdGhlIHN1cHBvcnRlZCB0eXBlcyBjaGVja2VkIGJ5IHtAbGluayAjaXNGYWN0b3J5Rm9yVHlwZSBpc0ZhY3RvcnlGb3JUeXBlfS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgQ29sbGVjdGlvbjxPYmplY3Q+IHN1cHBvcnRlZFR5cGVzID0gbmV3IEFycmF5TGlzdDxPYmplY3Q+KCk7CisKKwkvKioKKwkgKiBUaGlzIGNvbnN0cnVjdHMgYW4gaW5zdGFuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFRyaWdnZXJJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSgpIHsKKwkJc3VwcG9ydGVkVHlwZXMuYWRkKElFZGl0aW5nRG9tYWluSXRlbVByb3ZpZGVyLmNsYXNzKTsKKwkJc3VwcG9ydGVkVHlwZXMuYWRkKElTdHJ1Y3R1cmVkSXRlbUNvbnRlbnRQcm92aWRlci5jbGFzcyk7CisJCXN1cHBvcnRlZFR5cGVzLmFkZChJVHJlZUl0ZW1Db250ZW50UHJvdmlkZXIuY2xhc3MpOworCQlzdXBwb3J0ZWRUeXBlcy5hZGQoSUl0ZW1MYWJlbFByb3ZpZGVyLmNsYXNzKTsKKwkJc3VwcG9ydGVkVHlwZXMuYWRkKElJdGVtUHJvcGVydHlTb3VyY2UuY2xhc3MpOworCX0KKworCS8qKgorCSAqIFRoaXMga2VlcHMgdHJhY2sgb2YgdGhlIG9uZSBhZGFwdGVyIHVzZWQgZm9yIGFsbCB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnRyaWdnZXIuVHJpZ2dlcn0gaW5zdGFuY2VzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBUcmlnZ2VySXRlbVByb3ZpZGVyIHRyaWdnZXJJdGVtUHJvdmlkZXI7CisKKwkvKioKKwkgKiBUaGlzIGNyZWF0ZXMgYW4gYWRhcHRlciBmb3IgYSB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnRyaWdnZXIuVHJpZ2dlcn0uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlVHJpZ2dlckFkYXB0ZXIoKSB7CisJCWlmICh0cmlnZ2VySXRlbVByb3ZpZGVyID09IG51bGwpIHsKKwkJCXRyaWdnZXJJdGVtUHJvdmlkZXIgPSBuZXcgVHJpZ2dlckl0ZW1Qcm92aWRlcih0aGlzKTsKKwkJfQorCisJCXJldHVybiB0cmlnZ2VySXRlbVByb3ZpZGVyOworCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyB0aGUgcm9vdCBhZGFwdGVyIGZhY3RvcnkgdGhhdCBjb250YWlucyB0aGlzIGZhY3RvcnkuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnkgZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCkgeworCQlyZXR1cm4gcGFyZW50QWRhcHRlckZhY3RvcnkgPT0gbnVsbCA/IHRoaXMgOiBwYXJlbnRBZGFwdGVyRmFjdG9yeS5nZXRSb290QWRhcHRlckZhY3RvcnkoKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHNldHMgdGhlIGNvbXBvc2VkIGFkYXB0ZXIgZmFjdG9yeSB0aGF0IGNvbnRhaW5zIHRoaXMgZmFjdG9yeS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRQYXJlbnRBZGFwdGVyRmFjdG9yeShDb21wb3NlZEFkYXB0ZXJGYWN0b3J5IHBhcmVudEFkYXB0ZXJGYWN0b3J5KSB7CisJCXRoaXMucGFyZW50QWRhcHRlckZhY3RvcnkgPSBwYXJlbnRBZGFwdGVyRmFjdG9yeTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgYm9vbGVhbiBpc0ZhY3RvcnlGb3JUeXBlKE9iamVjdCB0eXBlKSB7CisJCXJldHVybiBzdXBwb3J0ZWRUeXBlcy5jb250YWlucyh0eXBlKSB8fCBzdXBlci5pc0ZhY3RvcnlGb3JUeXBlKHR5cGUpOworCX0KKworCS8qKgorCSAqIFRoaXMgaW1wbGVtZW50YXRpb24gc3Vic3RpdHV0ZXMgdGhlIGZhY3RvcnkgaXRzZWxmIGFzIHRoZSBrZXkgZm9yIHRoZSBhZGFwdGVyLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBBZGFwdGVyIGFkYXB0KE5vdGlmaWVyIG5vdGlmaWVyLCBPYmplY3QgdHlwZSkgeworCQlyZXR1cm4gc3VwZXIuYWRhcHQobm90aWZpZXIsIHRoaXMpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBTdXBwcmVzc1dhcm5pbmdzKCJ1bmNoZWNrZWQiKQorCUBPdmVycmlkZQorCXB1YmxpYyBPYmplY3QgYWRhcHQoT2JqZWN0IG9iamVjdCwgT2JqZWN0IHR5cGUpIHsKKwkJaWYgKGlzRmFjdG9yeUZvclR5cGUodHlwZSkpIHsKKwkJCU9iamVjdCBhZGFwdGVyID0gc3VwZXIuYWRhcHQob2JqZWN0LCB0eXBlKTsKKwkJCWlmICghKHR5cGUgaW5zdGFuY2VvZiBDbGFzczw/PikgfHwgKCgoQ2xhc3M8Pz4pdHlwZSkuaXNJbnN0YW5jZShhZGFwdGVyKSkpIHsKKwkJCQlyZXR1cm4gYWRhcHRlcjsKKwkJCX0KKwkJfQorCisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyBhIGxpc3RlbmVyLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIGFkZExpc3RlbmVyKElOb3RpZnlDaGFuZ2VkTGlzdGVuZXIgbm90aWZ5Q2hhbmdlZExpc3RlbmVyKSB7CisJCWNoYW5nZU5vdGlmaWVyLmFkZExpc3RlbmVyKG5vdGlmeUNoYW5nZWRMaXN0ZW5lcik7CisJfQorCisJLyoqCisJICogVGhpcyByZW1vdmVzIGEgbGlzdGVuZXIuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgcmVtb3ZlTGlzdGVuZXIoSU5vdGlmeUNoYW5nZWRMaXN0ZW5lciBub3RpZnlDaGFuZ2VkTGlzdGVuZXIpIHsKKwkJY2hhbmdlTm90aWZpZXIucmVtb3ZlTGlzdGVuZXIobm90aWZ5Q2hhbmdlZExpc3RlbmVyKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGRlbGVnYXRlcyB0byB7QGxpbmsgI2NoYW5nZU5vdGlmaWVyfSBhbmQgdG8ge0BsaW5rICNwYXJlbnRBZGFwdGVyRmFjdG9yeX0uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgZmlyZU5vdGlmeUNoYW5nZWQoTm90aWZpY2F0aW9uIG5vdGlmaWNhdGlvbikgeworCQljaGFuZ2VOb3RpZmllci5maXJlTm90aWZ5Q2hhbmdlZChub3RpZmljYXRpb24pOworCisJCWlmIChwYXJlbnRBZGFwdGVyRmFjdG9yeSAhPSBudWxsKSB7CisJCQlwYXJlbnRBZGFwdGVyRmFjdG9yeS5maXJlTm90aWZ5Q2hhbmdlZChub3RpZmljYXRpb24pOworCQl9CisJfQorCisJLyoqCisJICogVGhpcyBkaXNwb3NlcyBhbGwgb2YgdGhlIGl0ZW0gcHJvdmlkZXJzIGNyZWF0ZWQgYnkgdGhpcyBmYWN0b3J5LiAKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBkaXNwb3NlKCkgeworCQlpZiAodHJpZ2dlckl0ZW1Qcm92aWRlciAhPSBudWxsKSB0cmlnZ2VySXRlbVByb3ZpZGVyLmRpc3Bvc2UoKTsKKwl9CisKK30KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvdHJpZ2dlci91dGlsL1RyaWdnZXJBZGFwdGVyRmFjdG9yeS5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS90cmlnZ2VyL3V0aWwvVHJpZ2dlckFkYXB0ZXJGYWN0b3J5LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTFmNDI3NQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvdHJpZ2dlci91dGlsL1RyaWdnZXJBZGFwdGVyRmFjdG9yeS5qYXZhCkBAIC0wLDAgKzEsMjAyIEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS50cmlnZ2VyLnV0aWw7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuQWRhcHRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmllcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5pbXBsLkFkYXB0ZXJGYWN0b3J5SW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLklkZW50aWZpYWJsZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLlNhbml0eUNoZWNrZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLkRlY29yYXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUudHJpZ2dlci5UcmlnZ2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS50cmlnZ2VyLlRyaWdnZXJQYWNrYWdlOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiBUaGUgPGI+QWRhcHRlciBGYWN0b3J5PC9iPiBmb3IgdGhlIG1vZGVsLgorICogSXQgcHJvdmlkZXMgYW4gYWRhcHRlciA8Y29kZT5jcmVhdGVYWFg8L2NvZGU+IG1ldGhvZCBmb3IgZWFjaCBjbGFzcyBvZiB0aGUgbW9kZWwuCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnRyaWdnZXIuVHJpZ2dlclBhY2thZ2UKKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIFRyaWdnZXJBZGFwdGVyRmFjdG9yeSBleHRlbmRzIEFkYXB0ZXJGYWN0b3J5SW1wbCB7CisJLyoqCisJICogVGhlIGNhY2hlZCBtb2RlbCBwYWNrYWdlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBzdGF0aWMgVHJpZ2dlclBhY2thZ2UgbW9kZWxQYWNrYWdlOworCisJLyoqCisJICogQ3JlYXRlcyBhbiBpbnN0YW5jZSBvZiB0aGUgYWRhcHRlciBmYWN0b3J5LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBUcmlnZ2VyQWRhcHRlckZhY3RvcnkoKSB7CisJCWlmIChtb2RlbFBhY2thZ2UgPT0gbnVsbCkgeworCQkJbW9kZWxQYWNrYWdlID0gVHJpZ2dlclBhY2thZ2UuZUlOU1RBTkNFOworCQl9CisJfQorCisJLyoqCisJICogUmV0dXJucyB3aGV0aGVyIHRoaXMgZmFjdG9yeSBpcyBhcHBsaWNhYmxlIGZvciB0aGUgdHlwZSBvZiB0aGUgb2JqZWN0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIDxjb2RlPnRydWU8L2NvZGU+IGlmIHRoZSBvYmplY3QgaXMgZWl0aGVyIHRoZSBtb2RlbCdzIHBhY2thZ2Ugb3IgaXMgYW4gaW5zdGFuY2Ugb2JqZWN0IG9mIHRoZSBtb2RlbC4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHdoZXRoZXIgdGhpcyBmYWN0b3J5IGlzIGFwcGxpY2FibGUgZm9yIHRoZSB0eXBlIG9mIHRoZSBvYmplY3QuCisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBib29sZWFuIGlzRmFjdG9yeUZvclR5cGUoT2JqZWN0IG9iamVjdCkgeworCQlpZiAob2JqZWN0ID09IG1vZGVsUGFja2FnZSkgeworCQkJcmV0dXJuIHRydWU7CisJCX0KKwkJaWYgKG9iamVjdCBpbnN0YW5jZW9mIEVPYmplY3QpIHsKKwkJCXJldHVybiAoKEVPYmplY3Qpb2JqZWN0KS5lQ2xhc3MoKS5nZXRFUGFja2FnZSgpID09IG1vZGVsUGFja2FnZTsKKwkJfQorCQlyZXR1cm4gZmFsc2U7CisJfQorCisJLyoqCisJICogVGhlIHN3aXRjaCB0aGF0IGRlbGVnYXRlcyB0byB0aGUgPGNvZGU+Y3JlYXRlWFhYPC9jb2RlPiBtZXRob2RzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBUcmlnZ2VyU3dpdGNoPEFkYXB0ZXI+IG1vZGVsU3dpdGNoID0KKwkJbmV3IFRyaWdnZXJTd2l0Y2g8QWRhcHRlcj4oKSB7CisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyBBZGFwdGVyIGNhc2VUcmlnZ2VyKFRyaWdnZXIgb2JqZWN0KSB7CisJCQkJcmV0dXJuIGNyZWF0ZVRyaWdnZXJBZGFwdGVyKCk7CisJCQl9CisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyA8VD4gQWRhcHRlciBjYXNlQ29tcGFyYWJsZShDb21wYXJhYmxlPFQ+IG9iamVjdCkgeworCQkJCXJldHVybiBjcmVhdGVDb21wYXJhYmxlQWRhcHRlcigpOworCQkJfQorCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgQWRhcHRlciBjYXNlU2FuaXR5Q2hlY2tlcihTYW5pdHlDaGVja2VyIG9iamVjdCkgeworCQkJCXJldHVybiBjcmVhdGVTYW5pdHlDaGVja2VyQWRhcHRlcigpOworCQkJfQorCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgQWRhcHRlciBjYXNlSWRlbnRpZmlhYmxlKElkZW50aWZpYWJsZSBvYmplY3QpIHsKKwkJCQlyZXR1cm4gY3JlYXRlSWRlbnRpZmlhYmxlQWRhcHRlcigpOworCQkJfQorCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgQWRhcHRlciBjYXNlRGVjb3JhdG9yKERlY29yYXRvciBvYmplY3QpIHsKKwkJCQlyZXR1cm4gY3JlYXRlRGVjb3JhdG9yQWRhcHRlcigpOworCQkJfQorCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgQWRhcHRlciBkZWZhdWx0Q2FzZShFT2JqZWN0IG9iamVjdCkgeworCQkJCXJldHVybiBjcmVhdGVFT2JqZWN0QWRhcHRlcigpOworCQkJfQorCQl9OworCisJLyoqCisJICogQ3JlYXRlcyBhbiBhZGFwdGVyIGZvciB0aGUgPGNvZGU+dGFyZ2V0PC9jb2RlPi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSB0YXJnZXQgdGhlIG9iamVjdCB0byBhZGFwdC4KKwkgKiBAcmV0dXJuIHRoZSBhZGFwdGVyIGZvciB0aGUgPGNvZGU+dGFyZ2V0PC9jb2RlPi4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlQWRhcHRlcihOb3RpZmllciB0YXJnZXQpIHsKKwkJcmV0dXJuIG1vZGVsU3dpdGNoLmRvU3dpdGNoKChFT2JqZWN0KXRhcmdldCk7CisJfQorCisKKwkvKioKKwkgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS50cmlnZ2VyLlRyaWdnZXIgPGVtPlRyaWdnZXI8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOworCSAqIGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZSB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5LgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnRyaWdnZXIuVHJpZ2dlcgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVUcmlnZ2VyQWRhcHRlcigpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBqYXZhLmxhbmcuQ29tcGFyYWJsZSA8ZW0+Q29tcGFyYWJsZTwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7CisJICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCisJICogQHNlZSBqYXZhLmxhbmcuQ29tcGFyYWJsZQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVDb21wYXJhYmxlQWRhcHRlcigpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLlNhbml0eUNoZWNrZXIgPGVtPlNhbml0eSBDaGVja2VyPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsKKwkgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uU2FuaXR5Q2hlY2tlcgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVTYW5pdHlDaGVja2VyQWRhcHRlcigpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLklkZW50aWZpYWJsZSA8ZW0+SWRlbnRpZmlhYmxlPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsKKwkgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uSWRlbnRpZmlhYmxlCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZUlkZW50aWZpYWJsZUFkYXB0ZXIoKSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLkRlY29yYXRvciA8ZW0+RGVjb3JhdG9yPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsKKwkgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5EZWNvcmF0b3IKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlRGVjb3JhdG9yQWRhcHRlcigpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciB0aGUgZGVmYXVsdCBjYXNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbC4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlRU9iamVjdEFkYXB0ZXIoKSB7CisJCXJldHVybiBudWxsOworCX0KKworfSAvL1RyaWdnZXJBZGFwdGVyRmFjdG9yeQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS90cmlnZ2VyL3V0aWwvVHJpZ2dlclN3aXRjaC5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS90cmlnZ2VyL3V0aWwvVHJpZ2dlclN3aXRjaC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY4Y2I2MGMKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3RyaWdnZXIvdXRpbC9UcmlnZ2VyU3dpdGNoLmphdmEKQEAgLTAsMCArMSwyMDIgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnRyaWdnZXIudXRpbDsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3Q7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5JZGVudGlmaWFibGU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5TYW5pdHlDaGVja2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5EZWNvcmF0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnRyaWdnZXIuVHJpZ2dlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUudHJpZ2dlci5UcmlnZ2VyUGFja2FnZTsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogVGhlIDxiPlN3aXRjaDwvYj4gZm9yIHRoZSBtb2RlbCdzIGluaGVyaXRhbmNlIGhpZXJhcmNoeS4KKyAqIEl0IHN1cHBvcnRzIHRoZSBjYWxsIHtAbGluayAjZG9Td2l0Y2goRU9iamVjdCkgZG9Td2l0Y2gob2JqZWN0KX0KKyAqIHRvIGludm9rZSB0aGUgPGNvZGU+Y2FzZVhYWDwvY29kZT4gbWV0aG9kIGZvciBlYWNoIGNsYXNzIG9mIHRoZSBtb2RlbCwKKyAqIHN0YXJ0aW5nIHdpdGggdGhlIGFjdHVhbCBjbGFzcyBvZiB0aGUgb2JqZWN0CisgKiBhbmQgcHJvY2VlZGluZyB1cCB0aGUgaW5oZXJpdGFuY2UgaGllcmFyY2h5CisgKiB1bnRpbCBhIG5vbi1udWxsIHJlc3VsdCBpcyByZXR1cm5lZCwKKyAqIHdoaWNoIGlzIHRoZSByZXN1bHQgb2YgdGhlIHN3aXRjaC4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUudHJpZ2dlci5UcmlnZ2VyUGFja2FnZQorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgVHJpZ2dlclN3aXRjaDxUMT4geworCS8qKgorCSAqIFRoZSBjYWNoZWQgbW9kZWwgcGFja2FnZQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBzdGF0aWMgVHJpZ2dlclBhY2thZ2UgbW9kZWxQYWNrYWdlOworCisJLyoqCisJICogQ3JlYXRlcyBhbiBpbnN0YW5jZSBvZiB0aGUgc3dpdGNoLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBUcmlnZ2VyU3dpdGNoKCkgeworCQlpZiAobW9kZWxQYWNrYWdlID09IG51bGwpIHsKKwkJCW1vZGVsUGFja2FnZSA9IFRyaWdnZXJQYWNrYWdlLmVJTlNUQU5DRTsKKwkJfQorCX0KKworCS8qKgorCSAqIENhbGxzIDxjb2RlPmNhc2VYWFg8L2NvZGU+IGZvciBlYWNoIGNsYXNzIG9mIHRoZSBtb2RlbCB1bnRpbCBvbmUgcmV0dXJucyBhIG5vbiBudWxsIHJlc3VsdDsgaXQgeWllbGRzIHRoYXQgcmVzdWx0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgZmlyc3Qgbm9uLW51bGwgcmVzdWx0IHJldHVybmVkIGJ5IGEgPGNvZGU+Y2FzZVhYWDwvY29kZT4gY2FsbC4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFQxIGRvU3dpdGNoKEVPYmplY3QgdGhlRU9iamVjdCkgeworCQlyZXR1cm4gZG9Td2l0Y2godGhlRU9iamVjdC5lQ2xhc3MoKSwgdGhlRU9iamVjdCk7CisJfQorCisJLyoqCisJICogQ2FsbHMgPGNvZGU+Y2FzZVhYWDwvY29kZT4gZm9yIGVhY2ggY2xhc3Mgb2YgdGhlIG1vZGVsIHVudGlsIG9uZSByZXR1cm5zIGEgbm9uIG51bGwgcmVzdWx0OyBpdCB5aWVsZHMgdGhhdCByZXN1bHQuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBmaXJzdCBub24tbnVsbCByZXN1bHQgcmV0dXJuZWQgYnkgYSA8Y29kZT5jYXNlWFhYPC9jb2RlPiBjYWxsLgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgVDEgZG9Td2l0Y2goRUNsYXNzIHRoZUVDbGFzcywgRU9iamVjdCB0aGVFT2JqZWN0KSB7CisJCWlmICh0aGVFQ2xhc3MuZUNvbnRhaW5lcigpID09IG1vZGVsUGFja2FnZSkgeworCQkJcmV0dXJuIGRvU3dpdGNoKHRoZUVDbGFzcy5nZXRDbGFzc2lmaWVySUQoKSwgdGhlRU9iamVjdCk7CisJCX0KKwkJZWxzZSB7CisJCQlMaXN0PEVDbGFzcz4gZVN1cGVyVHlwZXMgPSB0aGVFQ2xhc3MuZ2V0RVN1cGVyVHlwZXMoKTsKKwkJCXJldHVybgorCQkJCWVTdXBlclR5cGVzLmlzRW1wdHkoKSA/CisJCQkJCWRlZmF1bHRDYXNlKHRoZUVPYmplY3QpIDoKKwkJCQkJZG9Td2l0Y2goZVN1cGVyVHlwZXMuZ2V0KDApLCB0aGVFT2JqZWN0KTsKKwkJfQorCX0KKworCS8qKgorCSAqIENhbGxzIDxjb2RlPmNhc2VYWFg8L2NvZGU+IGZvciBlYWNoIGNsYXNzIG9mIHRoZSBtb2RlbCB1bnRpbCBvbmUgcmV0dXJucyBhIG5vbiBudWxsIHJlc3VsdDsgaXQgeWllbGRzIHRoYXQgcmVzdWx0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgZmlyc3Qgbm9uLW51bGwgcmVzdWx0IHJldHVybmVkIGJ5IGEgPGNvZGU+Y2FzZVhYWDwvY29kZT4gY2FsbC4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIFQxIGRvU3dpdGNoKGludCBjbGFzc2lmaWVySUQsIEVPYmplY3QgdGhlRU9iamVjdCkgeworCQlzd2l0Y2ggKGNsYXNzaWZpZXJJRCkgeworCQkJY2FzZSBUcmlnZ2VyUGFja2FnZS5UUklHR0VSOiB7CisJCQkJVHJpZ2dlciB0cmlnZ2VyID0gKFRyaWdnZXIpdGhlRU9iamVjdDsKKwkJCQlUMSByZXN1bHQgPSBjYXNlVHJpZ2dlcih0cmlnZ2VyKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VEZWNvcmF0b3IodHJpZ2dlcik7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlSWRlbnRpZmlhYmxlKHRyaWdnZXIpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZUNvbXBhcmFibGUodHJpZ2dlcik7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlU2FuaXR5Q2hlY2tlcih0cmlnZ2VyKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGRlZmF1bHRDYXNlKHRoZUVPYmplY3QpOworCQkJCXJldHVybiByZXN1bHQ7CisJCQl9CisJCQlkZWZhdWx0OiByZXR1cm4gZGVmYXVsdENhc2UodGhlRU9iamVjdCk7CisJCX0KKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5UcmlnZ2VyPC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7CisJICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCisJICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+VHJpZ2dlcjwvZW0+Jy4KKwkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFQxIGNhc2VUcmlnZ2VyKFRyaWdnZXIgb2JqZWN0KSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkNvbXBhcmFibGU8L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsKKwkgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KKwkgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5Db21wYXJhYmxlPC9lbT4nLgorCSAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgPFQ+IFQxIGNhc2VDb21wYXJhYmxlKENvbXBhcmFibGU8VD4gb2JqZWN0KSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPlNhbml0eSBDaGVja2VyPC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7CisJICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCisJICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+U2FuaXR5IENoZWNrZXI8L2VtPicuCisJICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBUMSBjYXNlU2FuaXR5Q2hlY2tlcihTYW5pdHlDaGVja2VyIG9iamVjdCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5JZGVudGlmaWFibGU8L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsKKwkgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KKwkgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5JZGVudGlmaWFibGU8L2VtPicuCisJICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBUMSBjYXNlSWRlbnRpZmlhYmxlKElkZW50aWZpYWJsZSBvYmplY3QpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+RGVjb3JhdG9yPC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7CisJICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCisJICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+RGVjb3JhdG9yPC9lbT4nLgorCSAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVDEgY2FzZURlY29yYXRvcihEZWNvcmF0b3Igb2JqZWN0KSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkVPYmplY3Q8L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsKKwkgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaCwgYnV0IHRoaXMgaXMgdGhlIGxhc3QgY2FzZSBhbnl3YXkuCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCisJICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+RU9iamVjdDwvZW0+Jy4KKwkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFQxIGRlZmF1bHRDYXNlKEVPYmplY3Qgb2JqZWN0KSB7CisJCXJldHVybiBudWxsOworCX0KKworfSAvL1RyaWdnZXJTd2l0Y2gKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy8uY2xhc3NwYXRoIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLy5jbGFzc3BhdGgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzA0ZTg2MQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy8uY2xhc3NwYXRoCkBAIC0wLDAgKzEsNyBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxjbGFzc3BhdGg+CisJPGNsYXNzcGF0aGVudHJ5IGtpbmQ9InNyYyIgcGF0aD0ic3JjIi8+CisJPGNsYXNzcGF0aGVudHJ5IGtpbmQ9ImNvbiIgcGF0aD0ib3JnLmVjbGlwc2UuamR0LmxhdW5jaGluZy5KUkVfQ09OVEFJTkVSL29yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC5kZWJ1Zy51aS5sYXVuY2hlci5TdGFuZGFyZFZNVHlwZS9KMlNFLTEuNSIvPgorCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJjb24iIHBhdGg9Im9yZy5lY2xpcHNlLnBkZS5jb3JlLnJlcXVpcmVkUGx1Z2lucyIvPgorCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJvdXRwdXQiIHBhdGg9ImJpbiIvPgorPC9jbGFzc3BhdGg+CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvLmN2c2lnbm9yZSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy8uY3ZzaWdub3JlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhlMjdiZTcKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvLmN2c2lnbm9yZQpAQCAtMCwwICsxIEBACit0ZXh0CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvLmZicHJlZnMgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvLmZicHJlZnMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjIyNjhhMQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy8uZmJwcmVmcwpAQCAtMCwwICsxLDEyNSBAQAorI0ZpbmRCdWdzIFVzZXIgUHJlZmVyZW5jZXMKKyNUdWUgQXVnIDExIDE1OjA4OjEyIEVEVCAyMDA5CitkZXRlY3RvckFwcGVuZGluZ1RvQW5PYmplY3RPdXRwdXRTdHJlYW09QXBwZW5kaW5nVG9Bbk9iamVjdE91dHB1dFN0cmVhbXx0cnVlCitkZXRlY3RvckJhZEFwcGxldENvbnN0cnVjdG9yPUJhZEFwcGxldENvbnN0cnVjdG9yfGZhbHNlCitkZXRlY3RvckJhZFJlc3VsdFNldEFjY2Vzcz1CYWRSZXN1bHRTZXRBY2Nlc3N8dHJ1ZQorZGV0ZWN0b3JCYWRTeW50YXhGb3JSZWd1bGFyRXhwcmVzc2lvbj1CYWRTeW50YXhGb3JSZWd1bGFyRXhwcmVzc2lvbnx0cnVlCitkZXRlY3RvckJhZFVzZU9mUmV0dXJuVmFsdWU9QmFkVXNlT2ZSZXR1cm5WYWx1ZXx0cnVlCitkZXRlY3RvckJhZGx5T3ZlcnJpZGRlbkFkYXB0ZXI9QmFkbHlPdmVycmlkZGVuQWRhcHRlcnx0cnVlCitkZXRlY3RvckJvb2xlYW5SZXR1cm5OdWxsPUJvb2xlYW5SZXR1cm5OdWxsfHRydWUKK2RldGVjdG9yQ2FsbFRvVW5zdXBwb3J0ZWRNZXRob2Q9Q2FsbFRvVW5zdXBwb3J0ZWRNZXRob2R8dHJ1ZQorZGV0ZWN0b3JDaGVja0ltbXV0YWJsZUFubm90YXRpb249Q2hlY2tJbW11dGFibGVBbm5vdGF0aW9ufHRydWUKK2RldGVjdG9yQ2hlY2tUeXBlUXVhbGlmaWVycz1DaGVja1R5cGVRdWFsaWZpZXJzfHRydWUKK2RldGVjdG9yQ2xvbmVJZGlvbT1DbG9uZUlkaW9tfHRydWUKK2RldGVjdG9yQ29tcGFyYXRvcklkaW9tPUNvbXBhcmF0b3JJZGlvbXx0cnVlCitkZXRlY3RvckNvbmZ1c2VkSW5oZXJpdGFuY2U9Q29uZnVzZWRJbmhlcml0YW5jZXx0cnVlCitkZXRlY3RvckNvbmZ1c2lvbkJldHdlZW5Jbmhlcml0ZWRBbmRPdXRlck1ldGhvZD1Db25mdXNpb25CZXR3ZWVuSW5oZXJpdGVkQW5kT3V0ZXJNZXRob2R8dHJ1ZQorZGV0ZWN0b3JDcm9zc1NpdGVTY3JpcHRpbmc9Q3Jvc3NTaXRlU2NyaXB0aW5nfHRydWUKK2RldGVjdG9yRG9JbnNpZGVEb1ByaXZpbGVnZWQ9RG9JbnNpZGVEb1ByaXZpbGVnZWR8dHJ1ZQorZGV0ZWN0b3JEb250Q2F0Y2hJbGxlZ2FsTW9uaXRvclN0YXRlRXhjZXB0aW9uPURvbnRDYXRjaElsbGVnYWxNb25pdG9yU3RhdGVFeGNlcHRpb258dHJ1ZQorZGV0ZWN0b3JEb250VXNlRW51bT1Eb250VXNlRW51bXx0cnVlCitkZXRlY3RvckRyb3BwZWRFeGNlcHRpb249RHJvcHBlZEV4Y2VwdGlvbnx0cnVlCitkZXRlY3RvckR1bWJNZXRob2RJbnZvY2F0aW9ucz1EdW1iTWV0aG9kSW52b2NhdGlvbnN8dHJ1ZQorZGV0ZWN0b3JEdW1iTWV0aG9kcz1EdW1iTWV0aG9kc3x0cnVlCitkZXRlY3RvckR1cGxpY2F0ZUJyYW5jaGVzPUR1cGxpY2F0ZUJyYW5jaGVzfHRydWUKK2RldGVjdG9yRW1wdHlaaXBGaWxlRW50cnk9RW1wdHlaaXBGaWxlRW50cnl8dHJ1ZQorZGV0ZWN0b3JFcXVhbHNPcGVyYW5kU2hvdWxkSGF2ZUNsYXNzQ29tcGF0aWJsZVdpdGhUaGlzPUVxdWFsc09wZXJhbmRTaG91bGRIYXZlQ2xhc3NDb21wYXRpYmxlV2l0aFRoaXN8dHJ1ZQorZGV0ZWN0b3JGaW5hbGl6ZXJOdWxsc0ZpZWxkcz1GaW5hbGl6ZXJOdWxsc0ZpZWxkc3x0cnVlCitkZXRlY3RvckZpbmRCYWRDYXN0Mj1GaW5kQmFkQ2FzdDJ8dHJ1ZQorZGV0ZWN0b3JGaW5kQmFkRm9yTG9vcD1GaW5kQmFkRm9yTG9vcHx0cnVlCitkZXRlY3RvckZpbmRDaXJjdWxhckRlcGVuZGVuY2llcz1GaW5kQ2lyY3VsYXJEZXBlbmRlbmNpZXN8ZmFsc2UKK2RldGVjdG9yRmluZERlYWRMb2NhbFN0b3Jlcz1GaW5kRGVhZExvY2FsU3RvcmVzfHRydWUKK2RldGVjdG9yRmluZERvdWJsZUNoZWNrPUZpbmREb3VibGVDaGVja3x0cnVlCitkZXRlY3RvckZpbmRFbXB0eVN5bmNocm9uaXplZEJsb2NrPUZpbmRFbXB0eVN5bmNocm9uaXplZEJsb2NrfHRydWUKK2RldGVjdG9yRmluZEZpZWxkU2VsZkFzc2lnbm1lbnQ9RmluZEZpZWxkU2VsZkFzc2lnbm1lbnR8dHJ1ZQorZGV0ZWN0b3JGaW5kRmluYWxpemVJbnZvY2F0aW9ucz1GaW5kRmluYWxpemVJbnZvY2F0aW9uc3x0cnVlCitkZXRlY3RvckZpbmRGbG9hdEVxdWFsaXR5PUZpbmRGbG9hdEVxdWFsaXR5fHRydWUKK2RldGVjdG9yRmluZEhFbWlzbWF0Y2g9RmluZEhFbWlzbWF0Y2h8dHJ1ZQorZGV0ZWN0b3JGaW5kSW5jb25zaXN0ZW50U3luYzI9RmluZEluY29uc2lzdGVudFN5bmMyfHRydWUKK2RldGVjdG9yRmluZEpTUjE2NkxvY2tNb25pdG9yZW50ZXI9RmluZEpTUjE2NkxvY2tNb25pdG9yZW50ZXJ8dHJ1ZQorZGV0ZWN0b3JGaW5kTG9jYWxTZWxmQXNzaWdubWVudDI9RmluZExvY2FsU2VsZkFzc2lnbm1lbnQyfHRydWUKK2RldGVjdG9yRmluZE1hc2tlZEZpZWxkcz1GaW5kTWFza2VkRmllbGRzfHRydWUKK2RldGVjdG9yRmluZE1pc21hdGNoZWRXYWl0T3JOb3RpZnk9RmluZE1pc21hdGNoZWRXYWl0T3JOb3RpZnl8dHJ1ZQorZGV0ZWN0b3JGaW5kTmFrZWROb3RpZnk9RmluZE5ha2VkTm90aWZ5fHRydWUKK2RldGVjdG9yRmluZE5vblNlcmlhbGl6YWJsZVN0b3JlSW50b1Nlc3Npb249RmluZE5vblNlcmlhbGl6YWJsZVN0b3JlSW50b1Nlc3Npb258dHJ1ZQorZGV0ZWN0b3JGaW5kTm9uU2VyaWFsaXphYmxlVmFsdWVQYXNzZWRUb1dyaXRlT2JqZWN0PUZpbmROb25TZXJpYWxpemFibGVWYWx1ZVBhc3NlZFRvV3JpdGVPYmplY3R8dHJ1ZQorZGV0ZWN0b3JGaW5kTm9uU2hvcnRDaXJjdWl0PUZpbmROb25TaG9ydENpcmN1aXR8dHJ1ZQorZGV0ZWN0b3JGaW5kTnVsbERlcmVmPUZpbmROdWxsRGVyZWZ8dHJ1ZQorZGV0ZWN0b3JGaW5kTnVsbERlcmVmc0ludm9sdmluZ05vblNob3J0Q2lyY3VpdEV2YWx1YXRpb249RmluZE51bGxEZXJlZnNJbnZvbHZpbmdOb25TaG9ydENpcmN1aXRFdmFsdWF0aW9ufHRydWUKK2RldGVjdG9yRmluZE9wZW5TdHJlYW09RmluZE9wZW5TdHJlYW18dHJ1ZQorZGV0ZWN0b3JGaW5kUHV6emxlcnM9RmluZFB1enpsZXJzfHRydWUKK2RldGVjdG9yRmluZFJlZkNvbXBhcmlzb249RmluZFJlZkNvbXBhcmlzb258dHJ1ZQorZGV0ZWN0b3JGaW5kUmV0dXJuUmVmPUZpbmRSZXR1cm5SZWZ8dHJ1ZQorZGV0ZWN0b3JGaW5kUnVuSW52b2NhdGlvbnM9RmluZFJ1bkludm9jYXRpb25zfHRydWUKK2RldGVjdG9yRmluZFNlbGZDb21wYXJpc29uPUZpbmRTZWxmQ29tcGFyaXNvbnx0cnVlCitkZXRlY3RvckZpbmRTZWxmQ29tcGFyaXNvbjI9RmluZFNlbGZDb21wYXJpc29uMnx0cnVlCitkZXRlY3RvckZpbmRTbGVlcFdpdGhMb2NrSGVsZD1GaW5kU2xlZXBXaXRoTG9ja0hlbGR8dHJ1ZQorZGV0ZWN0b3JGaW5kU3Bpbkxvb3A9RmluZFNwaW5Mb29wfHRydWUKK2RldGVjdG9yRmluZFNxbEluamVjdGlvbj1GaW5kU3FsSW5qZWN0aW9ufHRydWUKK2RldGVjdG9yRmluZFR3b0xvY2tXYWl0PUZpbmRUd29Mb2NrV2FpdHx0cnVlCitkZXRlY3RvckZpbmRVbmNhbGxlZFByaXZhdGVNZXRob2RzPUZpbmRVbmNhbGxlZFByaXZhdGVNZXRob2RzfHRydWUKK2RldGVjdG9yRmluZFVuY29uZGl0aW9uYWxXYWl0PUZpbmRVbmNvbmRpdGlvbmFsV2FpdHx0cnVlCitkZXRlY3RvckZpbmRVbmluaXRpYWxpemVkR2V0PUZpbmRVbmluaXRpYWxpemVkR2V0fHRydWUKK2RldGVjdG9yRmluZFVucmVsYXRlZFR5cGVzSW5HZW5lcmljQ29udGFpbmVyPUZpbmRVbnJlbGF0ZWRUeXBlc0luR2VuZXJpY0NvbnRhaW5lcnx0cnVlCitkZXRlY3RvckZpbmRVbnJlbGVhc2VkTG9jaz1GaW5kVW5yZWxlYXNlZExvY2t8dHJ1ZQorZGV0ZWN0b3JGaW5kVW5zYXRpc2ZpZWRPYmxpZ2F0aW9uPUZpbmRVbnNhdGlzZmllZE9ibGlnYXRpb258dHJ1ZQorZGV0ZWN0b3JGaW5kVW5zeW5jR2V0PUZpbmRVbnN5bmNHZXR8dHJ1ZQorZGV0ZWN0b3JGaW5kVXNlbGVzc0NvbnRyb2xGbG93PUZpbmRVc2VsZXNzQ29udHJvbEZsb3d8dHJ1ZQorZGV0ZWN0b3JGb3JtYXRTdHJpbmdDaGVja2VyPUZvcm1hdFN0cmluZ0NoZWNrZXJ8dHJ1ZQorZGV0ZWN0b3JIdWdlU2hhcmVkU3RyaW5nQ29uc3RhbnRzPUh1Z2VTaGFyZWRTdHJpbmdDb25zdGFudHN8dHJ1ZQorZGV0ZWN0b3JJRGl2UmVzdWx0Q2FzdFRvRG91YmxlPUlEaXZSZXN1bHRDYXN0VG9Eb3VibGV8dHJ1ZQorZGV0ZWN0b3JJbmNvbXBhdE1hc2s9SW5jb21wYXRNYXNrfHRydWUKK2RldGVjdG9ySW5jb25zaXN0ZW50QW5ub3RhdGlvbnM9SW5jb25zaXN0ZW50QW5ub3RhdGlvbnN8dHJ1ZQorZGV0ZWN0b3JJbmVmZmljaWVudE1lbWJlckFjY2Vzcz1JbmVmZmljaWVudE1lbWJlckFjY2Vzc3xmYWxzZQorZGV0ZWN0b3JJbmVmZmljaWVudFRvQXJyYXk9SW5lZmZpY2llbnRUb0FycmF5fHRydWUKK2RldGVjdG9ySW5maW5pdGVMb29wPUluZmluaXRlTG9vcHx0cnVlCitkZXRlY3RvckluZmluaXRlUmVjdXJzaXZlTG9vcD1JbmZpbml0ZVJlY3Vyc2l2ZUxvb3B8dHJ1ZQorZGV0ZWN0b3JJbmZpbml0ZVJlY3Vyc2l2ZUxvb3AyPUluZmluaXRlUmVjdXJzaXZlTG9vcDJ8ZmFsc2UKK2RldGVjdG9ySW5oZXJpdGFuY2VVbnNhZmVHZXRSZXNvdXJjZT1Jbmhlcml0YW5jZVVuc2FmZUdldFJlc291cmNlfHRydWUKK2RldGVjdG9ySW5pdGlhbGl6YXRpb25DaGFpbj1Jbml0aWFsaXphdGlvbkNoYWlufHRydWUKK2RldGVjdG9ySW5zdGFudGlhdGVTdGF0aWNDbGFzcz1JbnN0YW50aWF0ZVN0YXRpY0NsYXNzfHRydWUKK2RldGVjdG9ySW52YWxpZEpVbml0VGVzdD1JbnZhbGlkSlVuaXRUZXN0fHRydWUKK2RldGVjdG9ySXRlcmF0b3JJZGlvbXM9SXRlcmF0b3JJZGlvbXN8dHJ1ZQorZGV0ZWN0b3JMYXp5SW5pdD1MYXp5SW5pdHx0cnVlCitkZXRlY3RvckxvYWRPZktub3duTnVsbFZhbHVlPUxvYWRPZktub3duTnVsbFZhbHVlfHRydWUKK2RldGVjdG9yTWV0aG9kUmV0dXJuQ2hlY2s9TWV0aG9kUmV0dXJuQ2hlY2t8dHJ1ZQorZGV0ZWN0b3JNdWx0aXRocmVhZGVkSW5zdGFuY2VBY2Nlc3M9TXVsdGl0aHJlYWRlZEluc3RhbmNlQWNjZXNzfHRydWUKK2RldGVjdG9yTXV0YWJsZUxvY2s9TXV0YWJsZUxvY2t8dHJ1ZQorZGV0ZWN0b3JNdXRhYmxlU3RhdGljRmllbGRzPU11dGFibGVTdGF0aWNGaWVsZHN8dHJ1ZQorZGV0ZWN0b3JOYW1pbmc9TmFtaW5nfHRydWUKK2RldGVjdG9yTnVtYmVyQ29uc3RydWN0b3I9TnVtYmVyQ29uc3RydWN0b3J8ZmFsc2UKK2RldGVjdG9yT3ZlcnJpZGluZ0VxdWFsc05vdFN5bW1ldHJpY2FsPU92ZXJyaWRpbmdFcXVhbHNOb3RTeW1tZXRyaWNhbHx0cnVlCitkZXRlY3RvclByZWZlclplcm9MZW5ndGhBcnJheXM9UHJlZmVyWmVyb0xlbmd0aEFycmF5c3x0cnVlCitkZXRlY3RvclB1YmxpY1NlbWFwaG9yZXM9UHVibGljU2VtYXBob3Jlc3xmYWxzZQorZGV0ZWN0b3JRdWVzdGlvbmFibGVCb29sZWFuQXNzaWdubWVudD1RdWVzdGlvbmFibGVCb29sZWFuQXNzaWdubWVudHx0cnVlCitkZXRlY3RvclJlYWRSZXR1cm5TaG91bGRCZUNoZWNrZWQ9UmVhZFJldHVyblNob3VsZEJlQ2hlY2tlZHx0cnVlCitkZXRlY3RvclJlZHVuZGFudEludGVyZmFjZXM9UmVkdW5kYW50SW50ZXJmYWNlc3x0cnVlCitkZXRlY3RvclJlcGVhdGVkQ29uZGl0aW9uYWxzPVJlcGVhdGVkQ29uZGl0aW9uYWxzfHRydWUKK2RldGVjdG9yUnVudGltZUV4Y2VwdGlvbkNhcHR1cmU9UnVudGltZUV4Y2VwdGlvbkNhcHR1cmV8dHJ1ZQorZGV0ZWN0b3JTZXJpYWxpemFibGVJZGlvbT1TZXJpYWxpemFibGVJZGlvbXx0cnVlCitkZXRlY3RvclN0YXJ0SW5Db25zdHJ1Y3Rvcj1TdGFydEluQ29uc3RydWN0b3J8dHJ1ZQorZGV0ZWN0b3JTdGF0aWNDYWxlbmRhckRldGVjdG9yPVN0YXRpY0NhbGVuZGFyRGV0ZWN0b3J8dHJ1ZQorZGV0ZWN0b3JTdHJpbmdDb25jYXRlbmF0aW9uPVN0cmluZ0NvbmNhdGVuYXRpb258dHJ1ZQorZGV0ZWN0b3JTdXBlcmZsdW91c0luc3RhbmNlT2Y9U3VwZXJmbHVvdXNJbnN0YW5jZU9mfHRydWUKK2RldGVjdG9yU3VzcGljaW91c1RocmVhZEludGVycnVwdGVkPVN1c3BpY2lvdXNUaHJlYWRJbnRlcnJ1cHRlZHx0cnVlCitkZXRlY3RvclN3aXRjaEZhbGx0aHJvdWdoPVN3aXRjaEZhbGx0aHJvdWdofHRydWUKK2RldGVjdG9yU3luY2hyb25pemVBbmROdWxsQ2hlY2tGaWVsZD1TeW5jaHJvbml6ZUFuZE51bGxDaGVja0ZpZWxkfHRydWUKK2RldGVjdG9yU3luY2hyb25pemVPbkNsYXNzTGl0ZXJhbE5vdEdldENsYXNzPVN5bmNocm9uaXplT25DbGFzc0xpdGVyYWxOb3RHZXRDbGFzc3x0cnVlCitkZXRlY3RvclN5bmNocm9uaXppbmdPbkNvbnRlbnRzT2ZGaWVsZFRvUHJvdGVjdEZpZWxkPVN5bmNocm9uaXppbmdPbkNvbnRlbnRzT2ZGaWVsZFRvUHJvdGVjdEZpZWxkfHRydWUKK2RldGVjdG9yVVJMUHJvYmxlbXM9VVJMUHJvYmxlbXN8dHJ1ZQorZGV0ZWN0b3JVbmNhbGxhYmxlTWV0aG9kT2ZBbm9ueW1vdXNDbGFzcz1VbmNhbGxhYmxlTWV0aG9kT2ZBbm9ueW1vdXNDbGFzc3x0cnVlCitkZXRlY3RvclVubmVjZXNzYXJ5TWF0aD1Vbm5lY2Vzc2FyeU1hdGh8dHJ1ZQorZGV0ZWN0b3JVbnJlYWRGaWVsZHM9VW5yZWFkRmllbGRzfHRydWUKK2RldGVjdG9yVXNlT2JqZWN0RXF1YWxzPVVzZU9iamVjdEVxdWFsc3xmYWxzZQorZGV0ZWN0b3JVc2VsZXNzU3ViY2xhc3NNZXRob2Q9VXNlbGVzc1N1YmNsYXNzTWV0aG9kfGZhbHNlCitkZXRlY3RvclZhckFyZ3NQcm9ibGVtcz1WYXJBcmdzUHJvYmxlbXN8dHJ1ZQorZGV0ZWN0b3JWb2xhdGlsZVVzYWdlPVZvbGF0aWxlVXNhZ2V8dHJ1ZQorZGV0ZWN0b3JXYWl0SW5Mb29wPVdhaXRJbkxvb3B8dHJ1ZQorZGV0ZWN0b3JXcm9uZ01hcEl0ZXJhdG9yPVdyb25nTWFwSXRlcmF0b3J8dHJ1ZQorZGV0ZWN0b3JYTUxGYWN0b3J5QnlwYXNzPVhNTEZhY3RvcnlCeXBhc3N8dHJ1ZQorZGV0ZWN0b3JfdGhyZXNob2xkPTIKK2VmZm9ydD1tYXgKK2V4Y2x1ZGVmaWx0ZXIwPS5zZXR0aW5ncy9maW5kYnVncy5leGNsdWRlLnhtbAorZmlsdGVyX3NldHRpbmdzPU1lZGl1bXxCQURfUFJBQ1RJQ0UsQ09SUkVDVE5FU1MsRVhQRVJJTUVOVEFMLEkxOE4sTUFMSUNJT1VTX0NPREUsTVRfQ09SUkVDVE5FU1MsUEVSRk9STUFOQ0UsU0VDVVJJVFksU1RZTEV8ZmFsc2UKK2ZpbHRlcl9zZXR0aW5nc19uZWc9Tk9JU0V8CitydW5fYXRfZnVsbF9idWlsZD1mYWxzZQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLy5wcm9qZWN0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLy5wcm9qZWN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc1NWMwNmIKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvLnByb2plY3QKQEAgLTAsMCArMSwyOCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxwcm9qZWN0RGVzY3JpcHRpb24+CisJPG5hbWU+b3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9uczwvbmFtZT4KKwk8Y29tbWVudD48L2NvbW1lbnQ+CisJPHByb2plY3RzPgorCTwvcHJvamVjdHM+CisJPGJ1aWxkU3BlYz4KKwkJPGJ1aWxkQ29tbWFuZD4KKwkJCTxuYW1lPm9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFidWlsZGVyPC9uYW1lPgorCQkJPGFyZ3VtZW50cz4KKwkJCTwvYXJndW1lbnRzPgorCQk8L2J1aWxkQ29tbWFuZD4KKwkJPGJ1aWxkQ29tbWFuZD4KKwkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5NYW5pZmVzdEJ1aWxkZXI8L25hbWU+CisJCQk8YXJndW1lbnRzPgorCQkJPC9hcmd1bWVudHM+CisJCTwvYnVpbGRDb21tYW5kPgorCQk8YnVpbGRDb21tYW5kPgorCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLlNjaGVtYUJ1aWxkZXI8L25hbWU+CisJCQk8YXJndW1lbnRzPgorCQkJPC9hcmd1bWVudHM+CisJCTwvYnVpbGRDb21tYW5kPgorCTwvYnVpbGRTcGVjPgorCTxuYXR1cmVzPgorCQk8bmF0dXJlPm9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFuYXR1cmU8L25hdHVyZT4KKwkJPG5hdHVyZT5vcmcuZWNsaXBzZS5wZGUuUGx1Z2luTmF0dXJlPC9uYXR1cmU+CisJPC9uYXR1cmVzPgorPC9wcm9qZWN0RGVzY3JpcHRpb24+CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvLnNldHRpbmdzL2ZpbmRidWdzLmV4Y2x1ZGUueG1sIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLy5zZXR0aW5ncy9maW5kYnVncy5leGNsdWRlLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42OGRlYmZjCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLy5zZXR0aW5ncy9maW5kYnVncy5leGNsdWRlLnhtbApAQCAtMCwwICsxLDQ2IEBACis8RmluZEJ1Z3NGaWx0ZXI+CisgICAgPE1hdGNoPgorICAgICAgICA8UGFja2FnZSBuYW1lPSJ+b3JnXC5lY2xpcHNlXC5zdGVtXC5kZWZpbml0aW9uc1wuKiIgLz4KKyAgICAgICAgPEJ1ZyBjb2RlPSJTVCxMSSxNUyxJQyIgLz4KKyAgICA8L01hdGNoPgorICAgIDxNYXRjaD4KKyAgICAgICAgPFBhY2thZ2UgbmFtZT0ifm9yZ1wuZWNsaXBzZVwuc3RlbVwuZGVmaW5pdGlvbnNcLipcLioiIC8+CisgICAgICAgIDxCdWcgY29kZT0iU1QsTEksTVMsSUMiIC8+CisgICAgPC9NYXRjaD4KKyAgICA8TWF0Y2g+CisgICAgICAgIDxQYWNrYWdlIG5hbWU9In5vcmdcLmVjbGlwc2VcLnN0ZW1cLmRlZmluaXRpb25zXC4qXC4qXC4qIiAvPgorICAgICAgICA8QnVnIGNvZGU9IlNULExJLE1TLElDIiAvPgorICAgIDwvTWF0Y2g+CisgICAgPE1hdGNoPgorICAgICAgICA8UGFja2FnZSBuYW1lPSJ+b3JnXC5lY2xpcHNlXC5zdGVtXC5kZWZpbml0aW9uc1wuZWRnZXNcLioiIC8+CisgICAgICAgIDxCdWcgY29kZT0iU1QsTEksTVMsSUMiIC8+CisgICAgPC9NYXRjaD4KKyAgICA8TWF0Y2g+CisgICAgICAgIDxQYWNrYWdlIG5hbWU9In5vcmdcLmVjbGlwc2VcLnN0ZW1cLmRlZmluaXRpb25zXC5lZGdlc1wudXRpbFwuKlwuKiIgLz4KKyAgICAgICAgPEJ1ZyBjb2RlPSJTVCxMSSxNUyxJQyIgLz4KKyAgICA8L01hdGNoPgorICAgIDxNYXRjaD4KKyAgICAgICAgPFBhY2thZ2UgbmFtZT0ifm9yZ1wuZWNsaXBzZVwuc3RlbVwuZGVmaW5pdGlvbnNcLmxhYmVsc1wuKiIgLz4KKyAgICAgICAgPEJ1ZyBjb2RlPSJTVCxMSSxNUyxJQyIgLz4KKyAgICA8L01hdGNoPgorICAgIDxNYXRjaD4KKyAgICAgICAgPFBhY2thZ2UgbmFtZT0ifm9yZ1wuZWNsaXBzZVwuc3RlbVwuZGVmaW5pdGlvbnNcLmxhYmVsc1wudXRpbFwuKlwuKiIgLz4KKyAgICAgICAgPEJ1ZyBjb2RlPSJTVCxMSSxNUyxJQyIgLz4KKyAgICA8L01hdGNoPgorICAgICAgIDxNYXRjaD4KKyAgICAgICAgPFBhY2thZ2UgbmFtZT0ifm9yZ1wuZWNsaXBzZVwuc3RlbVwuZGVmaW5pdGlvbnNcLm5vZGVzXC4qIiAvPgorICAgICAgICA8QnVnIGNvZGU9IlNULExJLE1TLElDIiAvPgorICAgIDwvTWF0Y2g+CisgICAgICAgPE1hdGNoPgorICAgICAgICA8UGFja2FnZSBuYW1lPSJ+b3JnXC5lY2xpcHNlXC5zdGVtXC5kZWZpbml0aW9uc1wubm9kZXNcLnV0aWxcLipcLioiIC8+CisgICAgICAgIDxCdWcgY29kZT0iU1QsTEksTVMsSUMiIC8+CisgICAgPC9NYXRjaD4KKyAgICA8TWF0Y2g+CisgICAgICAgIDxQYWNrYWdlIG5hbWU9In5vcmdcLmVjbGlwc2VcLnN0ZW1cLmRlZmluaXRpb25zXC50eXBlc1wuKiIgLz4KKyAgICAgICAgPEJ1ZyBjb2RlPSJTVCxMSSxNUyxJQyIgLz4KKyAgICA8L01hdGNoPgorICAgIDxNYXRjaD4KKyAgICAgICAgPFBhY2thZ2UgbmFtZT0ifm9yZ1wuZWNsaXBzZVwuc3RlbVwuZGVmaW5pdGlvbnNcLnR5cGVzXC51dGlsXC4qXC4qIiAvPgorICAgICAgICA8QnVnIGNvZGU9IlNULExJLE1TLElDIiAvPgorICAgIDwvTWF0Y2g+Cis8L0ZpbmRCdWdzRmlsdGVyPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFmNTllZGMKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzCkBAIC0wLDAgKzEsNjkgQEAKKyNNb24gSmFuIDIxIDEyOjM5OjI2IEVTVCAyMDA4CitlY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29kZWdlbi50YXJnZXRQbGF0Zm9ybT0xLjUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvbXBsaWFuY2U9MS41CitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5kb2MuY29tbWVudC5zdXBwb3J0PWVuYWJsZWQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uYW5ub3RhdGlvblN1cGVySW50ZXJmYWNlPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uYXNzZXJ0SWRlbnRpZmllcj1lcnJvcgorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5hdXRvYm94aW5nPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZGVwcmVjYXRpb249d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5kZXByZWNhdGlvbkluRGVwcmVjYXRlZENvZGU9ZGlzYWJsZWQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZGVwcmVjYXRpb25XaGVuT3ZlcnJpZGluZ0RlcHJlY2F0ZWRNZXRob2Q9ZGlzYWJsZWQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZGlzY291cmFnZWRSZWZlcmVuY2U9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5lbXB0eVN0YXRlbWVudD1pZ25vcmUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZW51bUlkZW50aWZpZXI9ZXJyb3IKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZmFsbHRocm91Z2hDYXNlPWlnbm9yZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5maWVsZEhpZGluZz1pZ25vcmUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZmluYWxQYXJhbWV0ZXJCb3VuZD13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZpbmFsbHlCbG9ja05vdENvbXBsZXRpbmdOb3JtYWxseT13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZvcmJpZGRlblJlZmVyZW5jZT1lcnJvcgorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5oaWRkZW5DYXRjaEJsb2NrPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW5jb21wYXRpYmxlTm9uSW5oZXJpdGVkSW50ZXJmYWNlTWV0aG9kPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW5jb21wbGV0ZUVudW1Td2l0Y2g9aWdub3JlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmluZGlyZWN0U3RhdGljQWNjZXNzPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW52YWxpZEphdmFkb2M9aWdub3JlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmludmFsaWRKYXZhZG9jVGFncz1lbmFibGVkCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmludmFsaWRKYXZhZG9jVGFnc0RlcHJlY2F0ZWRSZWY9ZW5hYmxlZAorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbnZhbGlkSmF2YWRvY1RhZ3NOb3RWaXNpYmxlUmVmPWVuYWJsZWQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW52YWxpZEphdmFkb2NUYWdzVmlzaWJpbGl0eT1wdWJsaWMKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubG9jYWxWYXJpYWJsZUhpZGluZz1pZ25vcmUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWV0aG9kV2l0aENvbnN0cnVjdG9yTmFtZT13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdEZXByZWNhdGVkQW5ub3RhdGlvbj1pZ25vcmUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0phdmFkb2NDb21tZW50cz1pZ25vcmUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0phdmFkb2NDb21tZW50c092ZXJyaWRpbmc9ZW5hYmxlZAorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nSmF2YWRvY0NvbW1lbnRzVmlzaWJpbGl0eT1wdWJsaWMKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0phdmFkb2NUYWdzPWlnbm9yZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nSmF2YWRvY1RhZ3NPdmVycmlkaW5nPWVuYWJsZWQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0phdmFkb2NUYWdzVmlzaWJpbGl0eT1wdWJsaWMKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ092ZXJyaWRlQW5ub3RhdGlvbj13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdTZXJpYWxWZXJzaW9uPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubm9FZmZlY3RBc3NpZ25tZW50PXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubm9JbXBsaWNpdFN0cmluZ0NvbnZlcnNpb249d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5ub25FeHRlcm5hbGl6ZWRTdHJpbmdMaXRlcmFsPWlnbm9yZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5udWxsUmVmZXJlbmNlPWlnbm9yZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5vdmVycmlkaW5nUGFja2FnZURlZmF1bHRNZXRob2Q9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5wYXJhbWV0ZXJBc3NpZ25tZW50PWlnbm9yZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5wb3NzaWJsZUFjY2lkZW50YWxCb29sZWFuQXNzaWdubWVudD13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnJhd1R5cGVSZWZlcmVuY2U9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5zcGVjaWFsUGFyYW1ldGVySGlkaW5nRmllbGQ9ZGlzYWJsZWQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uc3RhdGljQWNjZXNzUmVjZWl2ZXI9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5zdXBwcmVzc1dhcm5pbmdzPWVuYWJsZWQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uc3ludGhldGljQWNjZXNzRW11bGF0aW9uPWlnbm9yZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS50eXBlUGFyYW1ldGVySGlkaW5nPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5jaGVja2VkVHlwZU9wZXJhdGlvbj13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVuZG9jdW1lbnRlZEVtcHR5QmxvY2s9aWdub3JlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVuaGFuZGxlZFdhcm5pbmdUb2tlbj13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVubmVjZXNzYXJ5RWxzZT1pZ25vcmUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5uZWNlc3NhcnlUeXBlQ2hlY2s9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnF1YWxpZmllZEZpZWxkQWNjZXNzPWlnbm9yZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWREZWNsYXJlZFRocm93bkV4Y2VwdGlvbj13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZERlY2xhcmVkVGhyb3duRXhjZXB0aW9uV2hlbk92ZXJyaWRpbmc9ZW5hYmxlZAorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRJbXBvcnQ9aWdub3JlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZExhYmVsPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkTG9jYWw9aWdub3JlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZFBhcmFtZXRlcj1pZ25vcmUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkUGFyYW1ldGVyV2hlbkltcGxlbWVudGluZ0Fic3RyYWN0PWVuYWJsZWQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkUGFyYW1ldGVyV2hlbk92ZXJyaWRpbmdDb25jcmV0ZT1lbmFibGVkCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZFByaXZhdGVNZW1iZXI9aWdub3JlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnZhcmFyZ3NBcmd1bWVudE5lZWRDYXN0PXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnNvdXJjZT0xLjUKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LnVpLnByZWZzIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQudWkucHJlZnMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjdiNTk5YQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LnVpLnByZWZzCkBAIC0wLDAgKzEsNTAgQEAKKyNXZWQgU2VwIDEyIDIyOjE3OjA1IEVEVCAyMDA3CitjbGVhbnVwLmFkZF9kZWZhdWx0X3NlcmlhbF92ZXJzaW9uX2lkPXRydWUKK2NsZWFudXAuYWRkX2dlbmVyYXRlZF9zZXJpYWxfdmVyc2lvbl9pZD1mYWxzZQorY2xlYW51cC5hZGRfbWlzc2luZ19hbm5vdGF0aW9ucz10cnVlCitjbGVhbnVwLmFkZF9taXNzaW5nX2RlcHJlY2F0ZWRfYW5ub3RhdGlvbnM9dHJ1ZQorY2xlYW51cC5hZGRfbWlzc2luZ19ubHNfdGFncz1mYWxzZQorY2xlYW51cC5hZGRfbWlzc2luZ19vdmVycmlkZV9hbm5vdGF0aW9ucz10cnVlCitjbGVhbnVwLmFkZF9zZXJpYWxfdmVyc2lvbl9pZD1mYWxzZQorY2xlYW51cC5hbHdheXNfdXNlX2Jsb2Nrcz10cnVlCitjbGVhbnVwLmFsd2F5c191c2VfcGFyZW50aGVzZXNfaW5fZXhwcmVzc2lvbnM9dHJ1ZQorY2xlYW51cC5hbHdheXNfdXNlX3RoaXNfZm9yX25vbl9zdGF0aWNfZmllbGRfYWNjZXNzPWZhbHNlCitjbGVhbnVwLmFsd2F5c191c2VfdGhpc19mb3Jfbm9uX3N0YXRpY19tZXRob2RfYWNjZXNzPWZhbHNlCitjbGVhbnVwLmNvbnZlcnRfdG9fZW5oYW5jZWRfZm9yX2xvb3A9dHJ1ZQorY2xlYW51cC5mb3JtYXRfc291cmNlX2NvZGU9dHJ1ZQorY2xlYW51cC5tYWtlX2xvY2FsX3ZhcmlhYmxlX2ZpbmFsPXRydWUKK2NsZWFudXAubWFrZV9wYXJhbWV0ZXJzX2ZpbmFsPXRydWUKK2NsZWFudXAubWFrZV9wcml2YXRlX2ZpZWxkc19maW5hbD10cnVlCitjbGVhbnVwLm1ha2VfdmFyaWFibGVfZGVjbGFyYXRpb25zX2ZpbmFsPXRydWUKK2NsZWFudXAubmV2ZXJfdXNlX2Jsb2Nrcz1mYWxzZQorY2xlYW51cC5uZXZlcl91c2VfcGFyZW50aGVzZXNfaW5fZXhwcmVzc2lvbnM9ZmFsc2UKK2NsZWFudXAub3JnYW5pemVfaW1wb3J0cz10cnVlCitjbGVhbnVwLnF1YWxpZnlfc3RhdGljX2ZpZWxkX2FjY2Vzc2VzX3dpdGhfZGVjbGFyaW5nX2NsYXNzPWZhbHNlCitjbGVhbnVwLnF1YWxpZnlfc3RhdGljX21lbWJlcl9hY2Nlc3Nlc190aHJvdWdoX2luc3RhbmNlc193aXRoX2RlY2xhcmluZ19jbGFzcz10cnVlCitjbGVhbnVwLnF1YWxpZnlfc3RhdGljX21lbWJlcl9hY2Nlc3Nlc190aHJvdWdoX3N1YnR5cGVzX3dpdGhfZGVjbGFyaW5nX2NsYXNzPXRydWUKK2NsZWFudXAucXVhbGlmeV9zdGF0aWNfbWVtYmVyX2FjY2Vzc2VzX3dpdGhfZGVjbGFyaW5nX2NsYXNzPXRydWUKK2NsZWFudXAucXVhbGlmeV9zdGF0aWNfbWV0aG9kX2FjY2Vzc2VzX3dpdGhfZGVjbGFyaW5nX2NsYXNzPWZhbHNlCitjbGVhbnVwLnJlbW92ZV9wcml2YXRlX2NvbnN0cnVjdG9ycz10cnVlCitjbGVhbnVwLnJlbW92ZV90cmFpbGluZ193aGl0ZXNwYWNlcz10cnVlCitjbGVhbnVwLnJlbW92ZV90cmFpbGluZ193aGl0ZXNwYWNlc19hbGw9dHJ1ZQorY2xlYW51cC5yZW1vdmVfdHJhaWxpbmdfd2hpdGVzcGFjZXNfaWdub3JlX2VtcHR5PWZhbHNlCitjbGVhbnVwLnJlbW92ZV91bm5lY2Vzc2FyeV9jYXN0cz10cnVlCitjbGVhbnVwLnJlbW92ZV91bm5lY2Vzc2FyeV9ubHNfdGFncz10cnVlCitjbGVhbnVwLnJlbW92ZV91bnVzZWRfaW1wb3J0cz10cnVlCitjbGVhbnVwLnJlbW92ZV91bnVzZWRfbG9jYWxfdmFyaWFibGVzPXRydWUKK2NsZWFudXAucmVtb3ZlX3VudXNlZF9wcml2YXRlX2ZpZWxkcz10cnVlCitjbGVhbnVwLnJlbW92ZV91bnVzZWRfcHJpdmF0ZV9tZW1iZXJzPXRydWUKK2NsZWFudXAucmVtb3ZlX3VudXNlZF9wcml2YXRlX21ldGhvZHM9dHJ1ZQorY2xlYW51cC5yZW1vdmVfdW51c2VkX3ByaXZhdGVfdHlwZXM9dHJ1ZQorY2xlYW51cC5zb3J0X21lbWJlcnM9ZmFsc2UKK2NsZWFudXAuc29ydF9tZW1iZXJzX2FsbD1mYWxzZQorY2xlYW51cC51c2VfYmxvY2tzPXRydWUKK2NsZWFudXAudXNlX2Jsb2Nrc19vbmx5X2Zvcl9yZXR1cm5fYW5kX3Rocm93PWZhbHNlCitjbGVhbnVwLnVzZV9wYXJlbnRoZXNlc19pbl9leHByZXNzaW9ucz1mYWxzZQorY2xlYW51cC51c2VfdGhpc19mb3Jfbm9uX3N0YXRpY19maWVsZF9hY2Nlc3M9ZmFsc2UKK2NsZWFudXAudXNlX3RoaXNfZm9yX25vbl9zdGF0aWNfZmllbGRfYWNjZXNzX29ubHlfaWZfbmVjZXNzYXJ5PXRydWUKK2NsZWFudXAudXNlX3RoaXNfZm9yX25vbl9zdGF0aWNfbWV0aG9kX2FjY2Vzcz1mYWxzZQorY2xlYW51cC51c2VfdGhpc19mb3Jfbm9uX3N0YXRpY19tZXRob2RfYWNjZXNzX29ubHlfaWZfbmVjZXNzYXJ5PXRydWUKK2NsZWFudXBfcHJvZmlsZT1fY2xlYW51cAorY2xlYW51cF9zZXR0aW5nc192ZXJzaW9uPTIKK2VjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvTUVUQS1JTkYvTUFOSUZFU1QuTUYgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvTUVUQS1JTkYvTUFOSUZFU1QuTUYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODNjM2UyNQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy9NRVRBLUlORi9NQU5JRkVTVC5NRgpAQCAtMCwwICsxLDQzIEBACitNYW5pZmVzdC1WZXJzaW9uOiAxLjAKK0J1bmRsZS1NYW5pZmVzdFZlcnNpb246IDIKK0J1bmRsZS1OYW1lOiAlcGx1Z2luTmFtZQorQnVuZGxlLVN5bWJvbGljTmFtZTogb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9uczsgc2luZ2xldG9uOj10cnVlCitCdW5kbGUtVmVyc2lvbjogMS4yLjEKK0J1bmRsZS1DbGFzc1BhdGg6IC4KK0J1bmRsZS1BY3RpdmF0b3I6IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuQWN0aXZhdG9yCitCdW5kbGUtVmVuZG9yOiAlcHJvdmlkZXJOYW1lCitCdW5kbGUtTG9jYWxpemF0aW9uOiBwbHVnaW4KK0V4cG9ydC1QYWNrYWdlOiBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLAorIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuYWRhcHRlcnMucmVsYXRpdmV2YWx1ZSwKKyBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmFkYXB0ZXJzLnJlbGF0aXZldmFsdWUuaGlzdG9yeSwKKyBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmFkYXB0ZXJzLnNwYXRpYWwsCisgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5hZGFwdGVycy5zcGF0aWFsLmdlbywKKyBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmFkYXB0ZXJzLnNwYXRpYWwuZ2VvLnByZWZlcmVuY2VzLAorIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuZWRnZXMsCisgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5lZGdlcy5pbXBsLAorIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuZWRnZXMucHJvdmlkZXIsCisgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5lZGdlcy51dGlsLAorIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLAorIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLmltcGwsCisgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMucHJlc2VudGF0aW9uLAorIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLnByb3ZpZGVyLAorIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLnV0aWwsCisgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYXR0aWNlLAorIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGF0dGljZS5pbXBsLAorIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubm9kZXMsCisgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5ub2Rlcy5pbXBsLAorIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubm9kZXMucHJlc2VudGF0aW9uLAorIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubm9kZXMucHJvdmlkZXIsCisgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5ub2Rlcy51dGlsLAorIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMudHlwZXMsCisgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy50eXBlcy5pbXBsLAorIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMudHlwZXMucHJvdmlkZXIsCisgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy50eXBlcy51dGlsCitSZXF1aXJlLUJ1bmRsZTogb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLAorIG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzO3Zpc2liaWxpdHk6PXJlZXhwb3J0LAorIG9yZy5lY2xpcHNlLnN0ZW0uY29yZTt2aXNpYmlsaXR5Oj1yZWV4cG9ydCwKKyBvcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5LAorIG9yZy5lY2xpcHNlLnVpLmlkZTt2aXNpYmlsaXR5Oj1yZWV4cG9ydAorQnVuZGxlLUFjdGl2YXRpb25Qb2xpY3k6IGxhenkKK0J1bmRsZS1SZXF1aXJlZEV4ZWN1dGlvbkVudmlyb25tZW50OiBKMlNFLTEuNQorSW1wb3J0LVBhY2thZ2U6IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5wcm92aWRlcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zL2J1aWxkLnByb3BlcnRpZXMgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvYnVpbGQucHJvcGVydGllcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZTU5ZGZhCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zL2J1aWxkLnByb3BlcnRpZXMKQEAgLTAsMCArMSwxOSBAQAorIyA8Y29weXJpZ2h0PgorIyA8L2NvcHlyaWdodD4KKyMKKyMgJElkJAorCitiaW4uaW5jbHVkZXMgPSAuLFwKKyAgICAgICAgICAgICAgIGljb25zLyxcCisgICAgICAgICAgICAgICBNRVRBLUlORi8sXAorICAgICAgICAgICAgICAgcGx1Z2luLnhtbCxcCisgICAgICAgICAgICAgICBwbHVnaW4ucHJvcGVydGllcyxcCisgICAgICAgICAgICAgICBiaW4vLFwKKyAgICAgICAgICAgICAgIGVwbC12MTAuaHRtbCxcCisgICAgICAgICAgICAgICBub3RpY2UuaHRtbCxcCisgICAgICAgICAgICAgICBwbHVnaW5femgucHJvcGVydGllcyxcCisgICAgICAgICAgICAgICBwbHVnaW5fa3IucHJvcGVydGllcyxcCisgICAgICAgICAgICAgICBwbHVnaW5fZGUucHJvcGVydGllcworamFycy5jb21waWxlLm9yZGVyID0gLgorc291cmNlLi4gPSBzcmMvCitvdXRwdXQuLiA9IGJpbi8KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy9lcGwtdjEwLmh0bWwgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvZXBsLXYxMC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVkNGIxOTYKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvZXBsLXYxMC5odG1sCkBAIC0wLDAgKzEsMzI4IEBACis8aHRtbCB4bWxuczpvPSJ1cm46c2NoZW1hcy1taWNyb3NvZnQtY29tOm9mZmljZTpvZmZpY2UiCit4bWxuczp3PSJ1cm46c2NoZW1hcy1taWNyb3NvZnQtY29tOm9mZmljZTp3b3JkIgoreG1sbnM9Imh0dHA6Ly93d3cudzMub3JnL1RSL1JFQy1odG1sNDAiPgorCis8aGVhZD4KKzxtZXRhIGh0dHAtZXF1aXY9Q29udGVudC1UeXBlIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD13aW5kb3dzLTEyNTIiPgorPG1ldGEgbmFtZT1Qcm9nSWQgY29udGVudD1Xb3JkLkRvY3VtZW50PgorPG1ldGEgbmFtZT1HZW5lcmF0b3IgY29udGVudD0iTWljcm9zb2Z0IFdvcmQgOSI+Cis8bWV0YSBuYW1lPU9yaWdpbmF0b3IgY29udGVudD0iTWljcm9zb2Z0IFdvcmQgOSI+Cis8bGluayByZWw9RmlsZS1MaXN0CitocmVmPSIuL0VjbGlwc2UlMjBFUEwlMjAyMDAzXzExXzEwJTIwRmluYWxfZmlsZXMvZmlsZWxpc3QueG1sIj4KKzx0aXRsZT5FY2xpcHNlIFB1YmxpYyBMaWNlbnNlIC0gVmVyc2lvbiAxLjA8L3RpdGxlPgorPCEtLVtpZiBndGUgbXNvIDldPjx4bWw+CisgPG86RG9jdW1lbnRQcm9wZXJ0aWVzPgorICA8bzpSZXZpc2lvbj4yPC9vOlJldmlzaW9uPgorICA8bzpUb3RhbFRpbWU+MzwvbzpUb3RhbFRpbWU+CisgIDxvOkNyZWF0ZWQ+MjAwNC0wMy0wNVQyMzowMzowMFo8L286Q3JlYXRlZD4KKyAgPG86TGFzdFNhdmVkPjIwMDQtMDMtMDVUMjM6MDM6MDBaPC9vOkxhc3RTYXZlZD4KKyAgPG86UGFnZXM+NDwvbzpQYWdlcz4KKyAgPG86V29yZHM+MTYyNjwvbzpXb3Jkcz4KKyAgPG86Q2hhcmFjdGVycz45MjcwPC9vOkNoYXJhY3RlcnM+CisgICA8bzpMaW5lcz43NzwvbzpMaW5lcz4KKyAgPG86UGFyYWdyYXBocz4xODwvbzpQYXJhZ3JhcGhzPgorICA8bzpDaGFyYWN0ZXJzV2l0aFNwYWNlcz4xMTM4NDwvbzpDaGFyYWN0ZXJzV2l0aFNwYWNlcz4KKyAgPG86VmVyc2lvbj45LjQ0MDI8L286VmVyc2lvbj4KKyA8L286RG9jdW1lbnRQcm9wZXJ0aWVzPgorPC94bWw+PCFbZW5kaWZdLS0+PCEtLVtpZiBndGUgbXNvIDldPjx4bWw+CisgPHc6V29yZERvY3VtZW50PgorICA8dzpUcmFja1JldmlzaW9ucy8+CisgPC93OldvcmREb2N1bWVudD4KKzwveG1sPjwhW2VuZGlmXS0tPgorPHN0eWxlPgorPCEtLQorIC8qIEZvbnQgRGVmaW5pdGlvbnMgKi8KK0Bmb250LWZhY2UKKwl7Zm9udC1mYW1pbHk6VGFob21hOworCXBhbm9zZS0xOjIgMTEgNiA0IDMgNSA0IDQgMiA0OworCW1zby1mb250LWNoYXJzZXQ6MDsKKwltc28tZ2VuZXJpYy1mb250LWZhbWlseTpzd2lzczsKKwltc28tZm9udC1waXRjaDp2YXJpYWJsZTsKKwltc28tZm9udC1zaWduYXR1cmU6NTUzNjc5NDk1IC0yMTQ3NDgzNjQ4IDggMCA2NjA0NyAwO30KKyAvKiBTdHlsZSBEZWZpbml0aW9ucyAqLworcC5Nc29Ob3JtYWwsIGxpLk1zb05vcm1hbCwgZGl2Lk1zb05vcm1hbAorCXttc28tc3R5bGUtcGFyZW50OiIiOworCW1hcmdpbjowaW47CisJbWFyZ2luLWJvdHRvbTouMDAwMXB0OworCW1zby1wYWdpbmF0aW9uOndpZG93LW9ycGhhbjsKKwlmb250LXNpemU6MTIuMHB0OworCWZvbnQtZmFtaWx5OiJUaW1lcyBOZXcgUm9tYW4iOworCW1zby1mYXJlYXN0LWZvbnQtZmFtaWx5OiJUaW1lcyBOZXcgUm9tYW4iO30KK3AKKwl7bWFyZ2luLXJpZ2h0OjBpbjsKKwltc28tbWFyZ2luLXRvcC1hbHQ6YXV0bzsKKwltc28tbWFyZ2luLWJvdHRvbS1hbHQ6YXV0bzsKKwltYXJnaW4tbGVmdDowaW47CisJbXNvLXBhZ2luYXRpb246d2lkb3ctb3JwaGFuOworCWZvbnQtc2l6ZToxMi4wcHQ7CisJZm9udC1mYW1pbHk6IlRpbWVzIE5ldyBSb21hbiI7CisJbXNvLWZhcmVhc3QtZm9udC1mYW1pbHk6IlRpbWVzIE5ldyBSb21hbiI7fQorcC5CYWxsb29uVGV4dCwgbGkuQmFsbG9vblRleHQsIGRpdi5CYWxsb29uVGV4dAorCXttc28tc3R5bGUtbmFtZToiQmFsbG9vbiBUZXh0IjsKKwltYXJnaW46MGluOworCW1hcmdpbi1ib3R0b206LjAwMDFwdDsKKwltc28tcGFnaW5hdGlvbjp3aWRvdy1vcnBoYW47CisJZm9udC1zaXplOjguMHB0OworCWZvbnQtZmFtaWx5OlRhaG9tYTsKKwltc28tZmFyZWFzdC1mb250LWZhbWlseToiVGltZXMgTmV3IFJvbWFuIjt9CitAcGFnZSBTZWN0aW9uMQorCXtzaXplOjguNWluIDExLjBpbjsKKwltYXJnaW46MS4waW4gMS4yNWluIDEuMGluIDEuMjVpbjsKKwltc28taGVhZGVyLW1hcmdpbjouNWluOworCW1zby1mb290ZXItbWFyZ2luOi41aW47CisJbXNvLXBhcGVyLXNvdXJjZTowO30KK2Rpdi5TZWN0aW9uMQorCXtwYWdlOlNlY3Rpb24xO30KKy0tPgorPC9zdHlsZT4KKzwvaGVhZD4KKworPGJvZHkgbGFuZz1FTi1VUyBzdHlsZT0ndGFiLWludGVydmFsOi41aW4nPgorCis8ZGl2IGNsYXNzPVNlY3Rpb24xPgorCis8cCBhbGlnbj1jZW50ZXIgc3R5bGU9J3RleHQtYWxpZ246Y2VudGVyJz48Yj5FY2xpcHNlIFB1YmxpYyBMaWNlbnNlIC0gdiAxLjA8L2I+Cis8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5USEUgQUNDT01QQU5ZSU5HIFBST0dSQU0gSVMgUFJPVklERUQgVU5ERVIKK1RIRSBURVJNUyBPRiBUSElTIEVDTElQU0UgUFVCTElDIExJQ0VOU0UgKCZxdW90O0FHUkVFTUVOVCZxdW90OykuIEFOWSBVU0UsCitSRVBST0RVQ1RJT04gT1IgRElTVFJJQlVUSU9OIE9GIFRIRSBQUk9HUkFNIENPTlNUSVRVVEVTIFJFQ0lQSUVOVCdTIEFDQ0VQVEFOQ0UKK09GIFRISVMgQUdSRUVNRU5ULjwvc3Bhbj4gPC9wPgorCis8cD48Yj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+MS4gREVGSU5JVElPTlM8L3NwYW4+PC9iPiA8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4mcXVvdDtDb250cmlidXRpb24mcXVvdDsgbWVhbnM6PC9zcGFuPiA8L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmEpCitpbiB0aGUgY2FzZSBvZiB0aGUgaW5pdGlhbCBDb250cmlidXRvciwgdGhlIGluaXRpYWwgY29kZSBhbmQgZG9jdW1lbnRhdGlvbgorZGlzdHJpYnV0ZWQgdW5kZXIgdGhpcyBBZ3JlZW1lbnQsIGFuZDxiciBjbGVhcj1sZWZ0PgorYikgaW4gdGhlIGNhc2Ugb2YgZWFjaCBzdWJzZXF1ZW50IENvbnRyaWJ1dG9yOjwvc3Bhbj48L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmkpCitjaGFuZ2VzIHRvIHRoZSBQcm9ncmFtLCBhbmQ8L3NwYW4+PC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5paSkKK2FkZGl0aW9ucyB0byB0aGUgUHJvZ3JhbTs8L3NwYW4+PC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz53aGVyZQorc3VjaCBjaGFuZ2VzIGFuZC9vciBhZGRpdGlvbnMgdG8gdGhlIFByb2dyYW0gb3JpZ2luYXRlIGZyb20gYW5kIGFyZSBkaXN0cmlidXRlZAorYnkgdGhhdCBwYXJ0aWN1bGFyIENvbnRyaWJ1dG9yLiBBIENvbnRyaWJ1dGlvbiAnb3JpZ2luYXRlcycgZnJvbSBhIENvbnRyaWJ1dG9yCitpZiBpdCB3YXMgYWRkZWQgdG8gdGhlIFByb2dyYW0gYnkgc3VjaCBDb250cmlidXRvciBpdHNlbGYgb3IgYW55b25lIGFjdGluZyBvbgorc3VjaCBDb250cmlidXRvcidzIGJlaGFsZi4gQ29udHJpYnV0aW9ucyBkbyBub3QgaW5jbHVkZSBhZGRpdGlvbnMgdG8gdGhlCitQcm9ncmFtIHdoaWNoOiAoaSkgYXJlIHNlcGFyYXRlIG1vZHVsZXMgb2Ygc29mdHdhcmUgZGlzdHJpYnV0ZWQgaW4gY29uanVuY3Rpb24KK3dpdGggdGhlIFByb2dyYW0gdW5kZXIgdGhlaXIgb3duIGxpY2Vuc2UgYWdyZWVtZW50LCBhbmQgKGlpKSBhcmUgbm90IGRlcml2YXRpdmUKK3dvcmtzIG9mIHRoZSBQcm9ncmFtLiA8L3NwYW4+PC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+JnF1b3Q7Q29udHJpYnV0b3ImcXVvdDsgbWVhbnMgYW55IHBlcnNvbiBvcgorZW50aXR5IHRoYXQgZGlzdHJpYnV0ZXMgdGhlIFByb2dyYW0uPC9zcGFuPiA8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4mcXVvdDtMaWNlbnNlZCBQYXRlbnRzICZxdW90OyBtZWFuIHBhdGVudAorY2xhaW1zIGxpY2Vuc2FibGUgYnkgYSBDb250cmlidXRvciB3aGljaCBhcmUgbmVjZXNzYXJpbHkgaW5mcmluZ2VkIGJ5IHRoZSB1c2UKK29yIHNhbGUgb2YgaXRzIENvbnRyaWJ1dGlvbiBhbG9uZSBvciB3aGVuIGNvbWJpbmVkIHdpdGggdGhlIFByb2dyYW0uIDwvc3Bhbj48L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4mcXVvdDtQcm9ncmFtJnF1b3Q7IG1lYW5zIHRoZSBDb250cmlidXRpb25zCitkaXN0cmlidXRlZCBpbiBhY2NvcmRhbmNlIHdpdGggdGhpcyBBZ3JlZW1lbnQuPC9zcGFuPiA8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4mcXVvdDtSZWNpcGllbnQmcXVvdDsgbWVhbnMgYW55b25lIHdobworcmVjZWl2ZXMgdGhlIFByb2dyYW0gdW5kZXIgdGhpcyBBZ3JlZW1lbnQsIGluY2x1ZGluZyBhbGwgQ29udHJpYnV0b3JzLjwvc3Bhbj4gPC9wPgorCis8cD48Yj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+Mi4gR1JBTlQgT0YgUklHSFRTPC9zcGFuPjwvYj4gPC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5hKQorU3ViamVjdCB0byB0aGUgdGVybXMgb2YgdGhpcyBBZ3JlZW1lbnQsIGVhY2ggQ29udHJpYnV0b3IgaGVyZWJ5IGdyYW50cyBSZWNpcGllbnQKK2Egbm9uLWV4Y2x1c2l2ZSwgd29ybGR3aWRlLCByb3lhbHR5LWZyZWUgY29weXJpZ2h0IGxpY2Vuc2UgdG88c3Bhbgorc3R5bGU9J2NvbG9yOnJlZCc+IDwvc3Bhbj5yZXByb2R1Y2UsIHByZXBhcmUgZGVyaXZhdGl2ZSB3b3JrcyBvZiwgcHVibGljbHkKK2Rpc3BsYXksIHB1YmxpY2x5IHBlcmZvcm0sIGRpc3RyaWJ1dGUgYW5kIHN1YmxpY2Vuc2UgdGhlIENvbnRyaWJ1dGlvbiBvZiBzdWNoCitDb250cmlidXRvciwgaWYgYW55LCBhbmQgc3VjaCBkZXJpdmF0aXZlIHdvcmtzLCBpbiBzb3VyY2UgY29kZSBhbmQgb2JqZWN0IGNvZGUKK2Zvcm0uPC9zcGFuPjwvcD4KKworPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YikKK1N1YmplY3QgdG8gdGhlIHRlcm1zIG9mIHRoaXMgQWdyZWVtZW50LCBlYWNoIENvbnRyaWJ1dG9yIGhlcmVieSBncmFudHMKK1JlY2lwaWVudCBhIG5vbi1leGNsdXNpdmUsIHdvcmxkd2lkZSw8c3BhbiBzdHlsZT0nY29sb3I6Z3JlZW4nPiA8L3NwYW4+cm95YWx0eS1mcmVlCitwYXRlbnQgbGljZW5zZSB1bmRlciBMaWNlbnNlZCBQYXRlbnRzIHRvIG1ha2UsIHVzZSwgc2VsbCwgb2ZmZXIgdG8gc2VsbCwgaW1wb3J0CithbmQgb3RoZXJ3aXNlIHRyYW5zZmVyIHRoZSBDb250cmlidXRpb24gb2Ygc3VjaCBDb250cmlidXRvciwgaWYgYW55LCBpbiBzb3VyY2UKK2NvZGUgYW5kIG9iamVjdCBjb2RlIGZvcm0uIFRoaXMgcGF0ZW50IGxpY2Vuc2Ugc2hhbGwgYXBwbHkgdG8gdGhlIGNvbWJpbmF0aW9uCitvZiB0aGUgQ29udHJpYnV0aW9uIGFuZCB0aGUgUHJvZ3JhbSBpZiwgYXQgdGhlIHRpbWUgdGhlIENvbnRyaWJ1dGlvbiBpcyBhZGRlZAorYnkgdGhlIENvbnRyaWJ1dG9yLCBzdWNoIGFkZGl0aW9uIG9mIHRoZSBDb250cmlidXRpb24gY2F1c2VzIHN1Y2ggY29tYmluYXRpb24KK3RvIGJlIGNvdmVyZWQgYnkgdGhlIExpY2Vuc2VkIFBhdGVudHMuIFRoZSBwYXRlbnQgbGljZW5zZSBzaGFsbCBub3QgYXBwbHkgdG8KK2FueSBvdGhlciBjb21iaW5hdGlvbnMgd2hpY2ggaW5jbHVkZSB0aGUgQ29udHJpYnV0aW9uLiBObyBoYXJkd2FyZSBwZXIgc2UgaXMKK2xpY2Vuc2VkIGhlcmV1bmRlci4gPC9zcGFuPjwvcD4KKworPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YykKK1JlY2lwaWVudCB1bmRlcnN0YW5kcyB0aGF0IGFsdGhvdWdoIGVhY2ggQ29udHJpYnV0b3IgZ3JhbnRzIHRoZSBsaWNlbnNlcyB0byBpdHMKK0NvbnRyaWJ1dGlvbnMgc2V0IGZvcnRoIGhlcmVpbiwgbm8gYXNzdXJhbmNlcyBhcmUgcHJvdmlkZWQgYnkgYW55IENvbnRyaWJ1dG9yCit0aGF0IHRoZSBQcm9ncmFtIGRvZXMgbm90IGluZnJpbmdlIHRoZSBwYXRlbnQgb3Igb3RoZXIgaW50ZWxsZWN0dWFsIHByb3BlcnR5CityaWdodHMgb2YgYW55IG90aGVyIGVudGl0eS4gRWFjaCBDb250cmlidXRvciBkaXNjbGFpbXMgYW55IGxpYWJpbGl0eSB0byBSZWNpcGllbnQKK2ZvciBjbGFpbXMgYnJvdWdodCBieSBhbnkgb3RoZXIgZW50aXR5IGJhc2VkIG9uIGluZnJpbmdlbWVudCBvZiBpbnRlbGxlY3R1YWwKK3Byb3BlcnR5IHJpZ2h0cyBvciBvdGhlcndpc2UuIEFzIGEgY29uZGl0aW9uIHRvIGV4ZXJjaXNpbmcgdGhlIHJpZ2h0cyBhbmQKK2xpY2Vuc2VzIGdyYW50ZWQgaGVyZXVuZGVyLCBlYWNoIFJlY2lwaWVudCBoZXJlYnkgYXNzdW1lcyBzb2xlIHJlc3BvbnNpYmlsaXR5Cit0byBzZWN1cmUgYW55IG90aGVyIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgbmVlZGVkLCBpZiBhbnkuIEZvciBleGFtcGxlLAoraWYgYSB0aGlyZCBwYXJ0eSBwYXRlbnQgbGljZW5zZSBpcyByZXF1aXJlZCB0byBhbGxvdyBSZWNpcGllbnQgdG8gZGlzdHJpYnV0ZQordGhlIFByb2dyYW0sIGl0IGlzIFJlY2lwaWVudCdzIHJlc3BvbnNpYmlsaXR5IHRvIGFjcXVpcmUgdGhhdCBsaWNlbnNlIGJlZm9yZQorZGlzdHJpYnV0aW5nIHRoZSBQcm9ncmFtLjwvc3Bhbj48L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmQpCitFYWNoIENvbnRyaWJ1dG9yIHJlcHJlc2VudHMgdGhhdCB0byBpdHMga25vd2xlZGdlIGl0IGhhcyBzdWZmaWNpZW50IGNvcHlyaWdodAorcmlnaHRzIGluIGl0cyBDb250cmlidXRpb24sIGlmIGFueSwgdG8gZ3JhbnQgdGhlIGNvcHlyaWdodCBsaWNlbnNlIHNldCBmb3J0aCBpbgordGhpcyBBZ3JlZW1lbnQuIDwvc3Bhbj48L3A+CisKKzxwPjxiPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4zLiBSRVFVSVJFTUVOVFM8L3NwYW4+PC9iPiA8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5BIENvbnRyaWJ1dG9yIG1heSBjaG9vc2UgdG8gZGlzdHJpYnV0ZSB0aGUKK1Byb2dyYW0gaW4gb2JqZWN0IGNvZGUgZm9ybSB1bmRlciBpdHMgb3duIGxpY2Vuc2UgYWdyZWVtZW50LCBwcm92aWRlZCB0aGF0Ojwvc3Bhbj4KKzwvcD4KKworPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YSkKK2l0IGNvbXBsaWVzIHdpdGggdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoaXMgQWdyZWVtZW50OyBhbmQ8L3NwYW4+PC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5iKQoraXRzIGxpY2Vuc2UgYWdyZWVtZW50Ojwvc3Bhbj48L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmkpCitlZmZlY3RpdmVseSBkaXNjbGFpbXMgb24gYmVoYWxmIG9mIGFsbCBDb250cmlidXRvcnMgYWxsIHdhcnJhbnRpZXMgYW5kCitjb25kaXRpb25zLCBleHByZXNzIGFuZCBpbXBsaWVkLCBpbmNsdWRpbmcgd2FycmFudGllcyBvciBjb25kaXRpb25zIG9mIHRpdGxlCithbmQgbm9uLWluZnJpbmdlbWVudCwgYW5kIGltcGxpZWQgd2FycmFudGllcyBvciBjb25kaXRpb25zIG9mIG1lcmNoYW50YWJpbGl0eQorYW5kIGZpdG5lc3MgZm9yIGEgcGFydGljdWxhciBwdXJwb3NlOyA8L3NwYW4+PC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5paSkKK2VmZmVjdGl2ZWx5IGV4Y2x1ZGVzIG9uIGJlaGFsZiBvZiBhbGwgQ29udHJpYnV0b3JzIGFsbCBsaWFiaWxpdHkgZm9yIGRhbWFnZXMsCitpbmNsdWRpbmcgZGlyZWN0LCBpbmRpcmVjdCwgc3BlY2lhbCwgaW5jaWRlbnRhbCBhbmQgY29uc2VxdWVudGlhbCBkYW1hZ2VzLCBzdWNoCithcyBsb3N0IHByb2ZpdHM7IDwvc3Bhbj48L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmlpaSkKK3N0YXRlcyB0aGF0IGFueSBwcm92aXNpb25zIHdoaWNoIGRpZmZlciBmcm9tIHRoaXMgQWdyZWVtZW50IGFyZSBvZmZlcmVkIGJ5IHRoYXQKK0NvbnRyaWJ1dG9yIGFsb25lIGFuZCBub3QgYnkgYW55IG90aGVyIHBhcnR5OyBhbmQ8L3NwYW4+PC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5pdikKK3N0YXRlcyB0aGF0IHNvdXJjZSBjb2RlIGZvciB0aGUgUHJvZ3JhbSBpcyBhdmFpbGFibGUgZnJvbSBzdWNoIENvbnRyaWJ1dG9yLCBhbmQKK2luZm9ybXMgbGljZW5zZWVzIGhvdyB0byBvYnRhaW4gaXQgaW4gYSByZWFzb25hYmxlIG1hbm5lciBvbiBvciB0aHJvdWdoIGEKK21lZGl1bSBjdXN0b21hcmlseSB1c2VkIGZvciBzb2Z0d2FyZSBleGNoYW5nZS48c3BhbiBzdHlsZT0nY29sb3I6Ymx1ZSc+IDwvc3Bhbj48L3NwYW4+PC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+V2hlbiB0aGUgUHJvZ3JhbSBpcyBtYWRlIGF2YWlsYWJsZSBpbiBzb3VyY2UKK2NvZGUgZm9ybTo8L3NwYW4+IDwvcD4KKworPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YSkKK2l0IG11c3QgYmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhpcyBBZ3JlZW1lbnQ7IGFuZCA8L3NwYW4+PC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5iKSBhCitjb3B5IG9mIHRoaXMgQWdyZWVtZW50IG11c3QgYmUgaW5jbHVkZWQgd2l0aCBlYWNoIGNvcHkgb2YgdGhlIFByb2dyYW0uIDwvc3Bhbj48L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5Db250cmlidXRvcnMgbWF5IG5vdCByZW1vdmUgb3IgYWx0ZXIgYW55Citjb3B5cmlnaHQgbm90aWNlcyBjb250YWluZWQgd2l0aGluIHRoZSBQcm9ncmFtLiA8L3NwYW4+PC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+RWFjaCBDb250cmlidXRvciBtdXN0IGlkZW50aWZ5IGl0c2VsZiBhcyB0aGUKK29yaWdpbmF0b3Igb2YgaXRzIENvbnRyaWJ1dGlvbiwgaWYgYW55LCBpbiBhIG1hbm5lciB0aGF0IHJlYXNvbmFibHkgYWxsb3dzCitzdWJzZXF1ZW50IFJlY2lwaWVudHMgdG8gaWRlbnRpZnkgdGhlIG9yaWdpbmF0b3Igb2YgdGhlIENvbnRyaWJ1dGlvbi4gPC9zcGFuPjwvcD4KKworPHA+PGI+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPjQuIENPTU1FUkNJQUwgRElTVFJJQlVUSU9OPC9zcGFuPjwvYj4gPC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+Q29tbWVyY2lhbCBkaXN0cmlidXRvcnMgb2Ygc29mdHdhcmUgbWF5CithY2NlcHQgY2VydGFpbiByZXNwb25zaWJpbGl0aWVzIHdpdGggcmVzcGVjdCB0byBlbmQgdXNlcnMsIGJ1c2luZXNzIHBhcnRuZXJzCithbmQgdGhlIGxpa2UuIFdoaWxlIHRoaXMgbGljZW5zZSBpcyBpbnRlbmRlZCB0byBmYWNpbGl0YXRlIHRoZSBjb21tZXJjaWFsIHVzZQorb2YgdGhlIFByb2dyYW0sIHRoZSBDb250cmlidXRvciB3aG8gaW5jbHVkZXMgdGhlIFByb2dyYW0gaW4gYSBjb21tZXJjaWFsCitwcm9kdWN0IG9mZmVyaW5nIHNob3VsZCBkbyBzbyBpbiBhIG1hbm5lciB3aGljaCBkb2VzIG5vdCBjcmVhdGUgcG90ZW50aWFsCitsaWFiaWxpdHkgZm9yIG90aGVyIENvbnRyaWJ1dG9ycy4gVGhlcmVmb3JlLCBpZiBhIENvbnRyaWJ1dG9yIGluY2x1ZGVzIHRoZQorUHJvZ3JhbSBpbiBhIGNvbW1lcmNpYWwgcHJvZHVjdCBvZmZlcmluZywgc3VjaCBDb250cmlidXRvciAoJnF1b3Q7Q29tbWVyY2lhbAorQ29udHJpYnV0b3ImcXVvdDspIGhlcmVieSBhZ3JlZXMgdG8gZGVmZW5kIGFuZCBpbmRlbW5pZnkgZXZlcnkgb3RoZXIKK0NvbnRyaWJ1dG9yICgmcXVvdDtJbmRlbW5pZmllZCBDb250cmlidXRvciZxdW90OykgYWdhaW5zdCBhbnkgbG9zc2VzLCBkYW1hZ2VzIGFuZAorY29zdHMgKGNvbGxlY3RpdmVseSAmcXVvdDtMb3NzZXMmcXVvdDspIGFyaXNpbmcgZnJvbSBjbGFpbXMsIGxhd3N1aXRzIGFuZCBvdGhlcgorbGVnYWwgYWN0aW9ucyBicm91Z2h0IGJ5IGEgdGhpcmQgcGFydHkgYWdhaW5zdCB0aGUgSW5kZW1uaWZpZWQgQ29udHJpYnV0b3IgdG8KK3RoZSBleHRlbnQgY2F1c2VkIGJ5IHRoZSBhY3RzIG9yIG9taXNzaW9ucyBvZiBzdWNoIENvbW1lcmNpYWwgQ29udHJpYnV0b3IgaW4KK2Nvbm5lY3Rpb24gd2l0aCBpdHMgZGlzdHJpYnV0aW9uIG9mIHRoZSBQcm9ncmFtIGluIGEgY29tbWVyY2lhbCBwcm9kdWN0CitvZmZlcmluZy4gVGhlIG9ibGlnYXRpb25zIGluIHRoaXMgc2VjdGlvbiBkbyBub3QgYXBwbHkgdG8gYW55IGNsYWltcyBvciBMb3NzZXMKK3JlbGF0aW5nIHRvIGFueSBhY3R1YWwgb3IgYWxsZWdlZCBpbnRlbGxlY3R1YWwgcHJvcGVydHkgaW5mcmluZ2VtZW50LiBJbiBvcmRlcgordG8gcXVhbGlmeSwgYW4gSW5kZW1uaWZpZWQgQ29udHJpYnV0b3IgbXVzdDogYSkgcHJvbXB0bHkgbm90aWZ5IHRoZSBDb21tZXJjaWFsCitDb250cmlidXRvciBpbiB3cml0aW5nIG9mIHN1Y2ggY2xhaW0sIGFuZCBiKSBhbGxvdyB0aGUgQ29tbWVyY2lhbCBDb250cmlidXRvcgordG8gY29udHJvbCwgYW5kIGNvb3BlcmF0ZSB3aXRoIHRoZSBDb21tZXJjaWFsIENvbnRyaWJ1dG9yIGluLCB0aGUgZGVmZW5zZSBhbmQKK2FueSByZWxhdGVkIHNldHRsZW1lbnQgbmVnb3RpYXRpb25zLiBUaGUgSW5kZW1uaWZpZWQgQ29udHJpYnV0b3IgbWF5IHBhcnRpY2lwYXRlCitpbiBhbnkgc3VjaCBjbGFpbSBhdCBpdHMgb3duIGV4cGVuc2UuPC9zcGFuPiA8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5Gb3IgZXhhbXBsZSwgYSBDb250cmlidXRvciBtaWdodCBpbmNsdWRlIHRoZQorUHJvZ3JhbSBpbiBhIGNvbW1lcmNpYWwgcHJvZHVjdCBvZmZlcmluZywgUHJvZHVjdCBYLiBUaGF0IENvbnRyaWJ1dG9yIGlzIHRoZW4gYQorQ29tbWVyY2lhbCBDb250cmlidXRvci4gSWYgdGhhdCBDb21tZXJjaWFsIENvbnRyaWJ1dG9yIHRoZW4gbWFrZXMgcGVyZm9ybWFuY2UKK2NsYWltcywgb3Igb2ZmZXJzIHdhcnJhbnRpZXMgcmVsYXRlZCB0byBQcm9kdWN0IFgsIHRob3NlIHBlcmZvcm1hbmNlIGNsYWltcyBhbmQKK3dhcnJhbnRpZXMgYXJlIHN1Y2ggQ29tbWVyY2lhbCBDb250cmlidXRvcidzIHJlc3BvbnNpYmlsaXR5IGFsb25lLiBVbmRlciB0aGlzCitzZWN0aW9uLCB0aGUgQ29tbWVyY2lhbCBDb250cmlidXRvciB3b3VsZCBoYXZlIHRvIGRlZmVuZCBjbGFpbXMgYWdhaW5zdCB0aGUKK290aGVyIENvbnRyaWJ1dG9ycyByZWxhdGVkIHRvIHRob3NlIHBlcmZvcm1hbmNlIGNsYWltcyBhbmQgd2FycmFudGllcywgYW5kIGlmIGEKK2NvdXJ0IHJlcXVpcmVzIGFueSBvdGhlciBDb250cmlidXRvciB0byBwYXkgYW55IGRhbWFnZXMgYXMgYSByZXN1bHQsIHRoZQorQ29tbWVyY2lhbCBDb250cmlidXRvciBtdXN0IHBheSB0aG9zZSBkYW1hZ2VzLjwvc3Bhbj4gPC9wPgorCis8cD48Yj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+NS4gTk8gV0FSUkFOVFk8L3NwYW4+PC9iPiA8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5FWENFUFQgQVMgRVhQUkVTU0xZIFNFVCBGT1JUSCBJTiBUSElTCitBR1JFRU1FTlQsIFRIRSBQUk9HUkFNIElTIFBST1ZJREVEIE9OIEFOICZxdW90O0FTIElTJnF1b3Q7IEJBU0lTLCBXSVRIT1VUCitXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIEVJVEhFUiBFWFBSRVNTIE9SIElNUExJRUQgSU5DTFVESU5HLAorV0lUSE9VVCBMSU1JVEFUSU9OLCBBTlkgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIFRJVExFLCBOT04tSU5GUklOR0VNRU5ULAorTUVSQ0hBTlRBQklMSVRZIE9SIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBFYWNoIFJlY2lwaWVudCBpcyBzb2xlbHkKK3Jlc3BvbnNpYmxlIGZvciBkZXRlcm1pbmluZyB0aGUgYXBwcm9wcmlhdGVuZXNzIG9mIHVzaW5nIGFuZCBkaXN0cmlidXRpbmcgdGhlCitQcm9ncmFtIGFuZCBhc3N1bWVzIGFsbCByaXNrcyBhc3NvY2lhdGVkIHdpdGggaXRzIGV4ZXJjaXNlIG9mIHJpZ2h0cyB1bmRlciB0aGlzCitBZ3JlZW1lbnQgLCBpbmNsdWRpbmcgYnV0IG5vdCBsaW1pdGVkIHRvIHRoZSByaXNrcyBhbmQgY29zdHMgb2YgcHJvZ3JhbSBlcnJvcnMsCitjb21wbGlhbmNlIHdpdGggYXBwbGljYWJsZSBsYXdzLCBkYW1hZ2UgdG8gb3IgbG9zcyBvZiBkYXRhLCBwcm9ncmFtcyBvcgorZXF1aXBtZW50LCBhbmQgdW5hdmFpbGFiaWxpdHkgb3IgaW50ZXJydXB0aW9uIG9mIG9wZXJhdGlvbnMuIDwvc3Bhbj48L3A+CisKKzxwPjxiPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz42LiBESVNDTEFJTUVSIE9GIExJQUJJTElUWTwvc3Bhbj48L2I+IDwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkVYQ0VQVCBBUyBFWFBSRVNTTFkgU0VUIEZPUlRIIElOIFRISVMKK0FHUkVFTUVOVCwgTkVJVEhFUiBSRUNJUElFTlQgTk9SIEFOWSBDT05UUklCVVRPUlMgU0hBTEwgSEFWRSBBTlkgTElBQklMSVRZIEZPUgorQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisoSU5DTFVESU5HIFdJVEhPVVQgTElNSVRBVElPTiBMT1NUIFBST0ZJVFMpLCBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcKK05FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT1IgRElTVFJJQlVUSU9OIE9GCitUSEUgUFJPR1JBTSBPUiBUSEUgRVhFUkNJU0UgT0YgQU5ZIFJJR0hUUyBHUkFOVEVEIEhFUkVVTkRFUiwgRVZFTiBJRiBBRFZJU0VEIE9GCitUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLjwvc3Bhbj4gPC9wPgorCis8cD48Yj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+Ny4gR0VORVJBTDwvc3Bhbj48L2I+IDwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPklmIGFueSBwcm92aXNpb24gb2YgdGhpcyBBZ3JlZW1lbnQgaXMgaW52YWxpZAorb3IgdW5lbmZvcmNlYWJsZSB1bmRlciBhcHBsaWNhYmxlIGxhdywgaXQgc2hhbGwgbm90IGFmZmVjdCB0aGUgdmFsaWRpdHkgb3IKK2VuZm9yY2VhYmlsaXR5IG9mIHRoZSByZW1haW5kZXIgb2YgdGhlIHRlcm1zIG9mIHRoaXMgQWdyZWVtZW50LCBhbmQgd2l0aG91dAorZnVydGhlciBhY3Rpb24gYnkgdGhlIHBhcnRpZXMgaGVyZXRvLCBzdWNoIHByb3Zpc2lvbiBzaGFsbCBiZSByZWZvcm1lZCB0byB0aGUKK21pbmltdW0gZXh0ZW50IG5lY2Vzc2FyeSB0byBtYWtlIHN1Y2ggcHJvdmlzaW9uIHZhbGlkIGFuZCBlbmZvcmNlYWJsZS48L3NwYW4+IDwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPklmIFJlY2lwaWVudCBpbnN0aXR1dGVzIHBhdGVudCBsaXRpZ2F0aW9uCithZ2FpbnN0IGFueSBlbnRpdHkgKGluY2x1ZGluZyBhIGNyb3NzLWNsYWltIG9yIGNvdW50ZXJjbGFpbSBpbiBhIGxhd3N1aXQpCithbGxlZ2luZyB0aGF0IHRoZSBQcm9ncmFtIGl0c2VsZiAoZXhjbHVkaW5nIGNvbWJpbmF0aW9ucyBvZiB0aGUgUHJvZ3JhbSB3aXRoCitvdGhlciBzb2Z0d2FyZSBvciBoYXJkd2FyZSkgaW5mcmluZ2VzIHN1Y2ggUmVjaXBpZW50J3MgcGF0ZW50KHMpLCB0aGVuIHN1Y2gKK1JlY2lwaWVudCdzIHJpZ2h0cyBncmFudGVkIHVuZGVyIFNlY3Rpb24gMihiKSBzaGFsbCB0ZXJtaW5hdGUgYXMgb2YgdGhlIGRhdGUKK3N1Y2ggbGl0aWdhdGlvbiBpcyBmaWxlZC4gPC9zcGFuPjwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkFsbCBSZWNpcGllbnQncyByaWdodHMgdW5kZXIgdGhpcyBBZ3JlZW1lbnQKK3NoYWxsIHRlcm1pbmF0ZSBpZiBpdCBmYWlscyB0byBjb21wbHkgd2l0aCBhbnkgb2YgdGhlIG1hdGVyaWFsIHRlcm1zIG9yCitjb25kaXRpb25zIG9mIHRoaXMgQWdyZWVtZW50IGFuZCBkb2VzIG5vdCBjdXJlIHN1Y2ggZmFpbHVyZSBpbiBhIHJlYXNvbmFibGUKK3BlcmlvZCBvZiB0aW1lIGFmdGVyIGJlY29taW5nIGF3YXJlIG9mIHN1Y2ggbm9uY29tcGxpYW5jZS4gSWYgYWxsIFJlY2lwaWVudCdzCityaWdodHMgdW5kZXIgdGhpcyBBZ3JlZW1lbnQgdGVybWluYXRlLCBSZWNpcGllbnQgYWdyZWVzIHRvIGNlYXNlIHVzZSBhbmQKK2Rpc3RyaWJ1dGlvbiBvZiB0aGUgUHJvZ3JhbSBhcyBzb29uIGFzIHJlYXNvbmFibHkgcHJhY3RpY2FibGUuIEhvd2V2ZXIsCitSZWNpcGllbnQncyBvYmxpZ2F0aW9ucyB1bmRlciB0aGlzIEFncmVlbWVudCBhbmQgYW55IGxpY2Vuc2VzIGdyYW50ZWQgYnkKK1JlY2lwaWVudCByZWxhdGluZyB0byB0aGUgUHJvZ3JhbSBzaGFsbCBjb250aW51ZSBhbmQgc3Vydml2ZS4gPC9zcGFuPjwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkV2ZXJ5b25lIGlzIHBlcm1pdHRlZCB0byBjb3B5IGFuZCBkaXN0cmlidXRlCitjb3BpZXMgb2YgdGhpcyBBZ3JlZW1lbnQsIGJ1dCBpbiBvcmRlciB0byBhdm9pZCBpbmNvbnNpc3RlbmN5IHRoZSBBZ3JlZW1lbnQgaXMKK2NvcHlyaWdodGVkIGFuZCBtYXkgb25seSBiZSBtb2RpZmllZCBpbiB0aGUgZm9sbG93aW5nIG1hbm5lci4gVGhlIEFncmVlbWVudAorU3Rld2FyZCByZXNlcnZlcyB0aGUgcmlnaHQgdG8gcHVibGlzaCBuZXcgdmVyc2lvbnMgKGluY2x1ZGluZyByZXZpc2lvbnMpIG9mCit0aGlzIEFncmVlbWVudCBmcm9tIHRpbWUgdG8gdGltZS4gTm8gb25lIG90aGVyIHRoYW4gdGhlIEFncmVlbWVudCBTdGV3YXJkIGhhcwordGhlIHJpZ2h0IHRvIG1vZGlmeSB0aGlzIEFncmVlbWVudC4gVGhlIEVjbGlwc2UgRm91bmRhdGlvbiBpcyB0aGUgaW5pdGlhbAorQWdyZWVtZW50IFN0ZXdhcmQuIFRoZSBFY2xpcHNlIEZvdW5kYXRpb24gbWF5IGFzc2lnbiB0aGUgcmVzcG9uc2liaWxpdHkgdG8KK3NlcnZlIGFzIHRoZSBBZ3JlZW1lbnQgU3Rld2FyZCB0byBhIHN1aXRhYmxlIHNlcGFyYXRlIGVudGl0eS4gRWFjaCBuZXcgdmVyc2lvbgorb2YgdGhlIEFncmVlbWVudCB3aWxsIGJlIGdpdmVuIGEgZGlzdGluZ3Vpc2hpbmcgdmVyc2lvbiBudW1iZXIuIFRoZSBQcm9ncmFtCisoaW5jbHVkaW5nIENvbnRyaWJ1dGlvbnMpIG1heSBhbHdheXMgYmUgZGlzdHJpYnV0ZWQgc3ViamVjdCB0byB0aGUgdmVyc2lvbiBvZgordGhlIEFncmVlbWVudCB1bmRlciB3aGljaCBpdCB3YXMgcmVjZWl2ZWQuIEluIGFkZGl0aW9uLCBhZnRlciBhIG5ldyB2ZXJzaW9uIG9mCit0aGUgQWdyZWVtZW50IGlzIHB1Ymxpc2hlZCwgQ29udHJpYnV0b3IgbWF5IGVsZWN0IHRvIGRpc3RyaWJ1dGUgdGhlIFByb2dyYW0KKyhpbmNsdWRpbmcgaXRzIENvbnRyaWJ1dGlvbnMpIHVuZGVyIHRoZSBuZXcgdmVyc2lvbi4gRXhjZXB0IGFzIGV4cHJlc3NseSBzdGF0ZWQKK2luIFNlY3Rpb25zIDIoYSkgYW5kIDIoYikgYWJvdmUsIFJlY2lwaWVudCByZWNlaXZlcyBubyByaWdodHMgb3IgbGljZW5zZXMgdG8KK3RoZSBpbnRlbGxlY3R1YWwgcHJvcGVydHkgb2YgYW55IENvbnRyaWJ1dG9yIHVuZGVyIHRoaXMgQWdyZWVtZW50LCB3aGV0aGVyCitleHByZXNzbHksIGJ5IGltcGxpY2F0aW9uLCBlc3RvcHBlbCBvciBvdGhlcndpc2UuIEFsbCByaWdodHMgaW4gdGhlIFByb2dyYW0gbm90CitleHByZXNzbHkgZ3JhbnRlZCB1bmRlciB0aGlzIEFncmVlbWVudCBhcmUgcmVzZXJ2ZWQuPC9zcGFuPiA8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5UaGlzIEFncmVlbWVudCBpcyBnb3Zlcm5lZCBieSB0aGUgbGF3cyBvZiB0aGUKK1N0YXRlIG9mIE5ldyBZb3JrIGFuZCB0aGUgaW50ZWxsZWN0dWFsIHByb3BlcnR5IGxhd3Mgb2YgdGhlIFVuaXRlZCBTdGF0ZXMgb2YKK0FtZXJpY2EuIE5vIHBhcnR5IHRvIHRoaXMgQWdyZWVtZW50IHdpbGwgYnJpbmcgYSBsZWdhbCBhY3Rpb24gdW5kZXIgdGhpcworQWdyZWVtZW50IG1vcmUgdGhhbiBvbmUgeWVhciBhZnRlciB0aGUgY2F1c2Ugb2YgYWN0aW9uIGFyb3NlLiBFYWNoIHBhcnR5IHdhaXZlcworaXRzIHJpZ2h0cyB0byBhIGp1cnkgdHJpYWwgaW4gYW55IHJlc3VsdGluZyBsaXRpZ2F0aW9uLjwvc3Bhbj4gPC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWw+PCFbaWYgIXN1cHBvcnRFbXB0eVBhcmFzXT4mbmJzcDs8IVtlbmRpZl0+PG86cD48L286cD48L3A+CisKKzwvZGl2PgorCis8L2JvZHk+CisKKzwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvaWNvbnMvZnVsbC9jdG9vbDE2L0NyZWF0ZUR5bmFtaWNMYWJlbF9uZXh0VmFsdWVfQXJlYUxhYmVsVmFsdWUuZ2lmIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zL2ljb25zL2Z1bGwvY3Rvb2wxNi9DcmVhdGVEeW5hbWljTGFiZWxfbmV4dFZhbHVlX0FyZWFMYWJlbFZhbHVlLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZjcwZDRkCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zL2ljb25zL2Z1bGwvY3Rvb2wxNi9DcmVhdGVEeW5hbWljTGFiZWxfbmV4dFZhbHVlX0FyZWFMYWJlbFZhbHVlLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvaWNvbnMvZnVsbC9jdG9vbDE2L0NyZWF0ZUR5bmFtaWNMYWJlbF9uZXh0VmFsdWVfQ29tbW9uQm9yZGVyUmVsYXRpb25zaGlwTGFiZWxWYWx1ZS5naWYgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvaWNvbnMvZnVsbC9jdG9vbDE2L0NyZWF0ZUR5bmFtaWNMYWJlbF9uZXh0VmFsdWVfQ29tbW9uQm9yZGVyUmVsYXRpb25zaGlwTGFiZWxWYWx1ZS5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjg5YWFkYwotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy9pY29ucy9mdWxsL2N0b29sMTYvQ3JlYXRlRHluYW1pY0xhYmVsX25leHRWYWx1ZV9Db21tb25Cb3JkZXJSZWxhdGlvbnNoaXBMYWJlbFZhbHVlLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvaWNvbnMvZnVsbC9jdG9vbDE2L0NyZWF0ZUR5bmFtaWNMYWJlbF9uZXh0VmFsdWVfTWlncmF0aW9uRWRnZUxhYmVsVmFsdWUuZ2lmIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zL2ljb25zL2Z1bGwvY3Rvb2wxNi9DcmVhdGVEeW5hbWljTGFiZWxfbmV4dFZhbHVlX01pZ3JhdGlvbkVkZ2VMYWJlbFZhbHVlLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MzBmZDc1Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zL2ljb25zL2Z1bGwvY3Rvb2wxNi9DcmVhdGVEeW5hbWljTGFiZWxfbmV4dFZhbHVlX01pZ3JhdGlvbkVkZ2VMYWJlbFZhbHVlLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvaWNvbnMvZnVsbC9jdG9vbDE2L0NyZWF0ZUR5bmFtaWNMYWJlbF9uZXh0VmFsdWVfTWl4aW5nRWRnZUxhYmVsVmFsdWUuZ2lmIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zL2ljb25zL2Z1bGwvY3Rvb2wxNi9DcmVhdGVEeW5hbWljTGFiZWxfbmV4dFZhbHVlX01peGluZ0VkZ2VMYWJlbFZhbHVlLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZjIxOGNiCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zL2ljb25zL2Z1bGwvY3Rvb2wxNi9DcmVhdGVEeW5hbWljTGFiZWxfbmV4dFZhbHVlX01peGluZ0VkZ2VMYWJlbFZhbHVlLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvaWNvbnMvZnVsbC9jdG9vbDE2L0NyZWF0ZUR5bmFtaWNMYWJlbF9uZXh0VmFsdWVfUGh5c2ljYWxSZWxhdGlvbnNoaXBMYWJlbFZhbHVlLmdpZiBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy9pY29ucy9mdWxsL2N0b29sMTYvQ3JlYXRlRHluYW1pY0xhYmVsX25leHRWYWx1ZV9QaHlzaWNhbFJlbGF0aW9uc2hpcExhYmVsVmFsdWUuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYzN2NlODcKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvaWNvbnMvZnVsbC9jdG9vbDE2L0NyZWF0ZUR5bmFtaWNMYWJlbF9uZXh0VmFsdWVfUGh5c2ljYWxSZWxhdGlvbnNoaXBMYWJlbFZhbHVlLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvaWNvbnMvZnVsbC9jdG9vbDE2L0NyZWF0ZUR5bmFtaWNMYWJlbF9uZXh0VmFsdWVfUG9wdWxhdGlvbkxhYmVsVmFsdWUuZ2lmIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zL2ljb25zL2Z1bGwvY3Rvb2wxNi9DcmVhdGVEeW5hbWljTGFiZWxfbmV4dFZhbHVlX1BvcHVsYXRpb25MYWJlbFZhbHVlLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYzM0YTBmCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zL2ljb25zL2Z1bGwvY3Rvb2wxNi9DcmVhdGVEeW5hbWljTGFiZWxfbmV4dFZhbHVlX1BvcHVsYXRpb25MYWJlbFZhbHVlLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvaWNvbnMvZnVsbC9jdG9vbDE2L0NyZWF0ZUR5bmFtaWNMYWJlbF9uZXh0VmFsdWVfUmVsYXRpdmVQaHlzaWNhbFJlbGF0aW9uc2hpcExhYmVsVmFsdWUuZ2lmIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zL2ljb25zL2Z1bGwvY3Rvb2wxNi9DcmVhdGVEeW5hbWljTGFiZWxfbmV4dFZhbHVlX1JlbGF0aXZlUGh5c2ljYWxSZWxhdGlvbnNoaXBMYWJlbFZhbHVlLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZjA4NGFlCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zL2ljb25zL2Z1bGwvY3Rvb2wxNi9DcmVhdGVEeW5hbWljTGFiZWxfbmV4dFZhbHVlX1JlbGF0aXZlUGh5c2ljYWxSZWxhdGlvbnNoaXBMYWJlbFZhbHVlLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvaWNvbnMvZnVsbC9jdG9vbDE2L0NyZWF0ZUR5bmFtaWNMYWJlbF9uZXh0VmFsdWVfUm9hZFRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsVmFsdWUuZ2lmIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zL2ljb25zL2Z1bGwvY3Rvb2wxNi9DcmVhdGVEeW5hbWljTGFiZWxfbmV4dFZhbHVlX1JvYWRUcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbFZhbHVlLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZjQ4NWQ3Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zL2ljb25zL2Z1bGwvY3Rvb2wxNi9DcmVhdGVEeW5hbWljTGFiZWxfbmV4dFZhbHVlX1JvYWRUcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbFZhbHVlLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvaWNvbnMvZnVsbC9jdG9vbDE2L0NyZWF0ZUR5bmFtaWNMYWJlbF9uZXh0VmFsdWVfVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxWYWx1ZS5naWYgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvaWNvbnMvZnVsbC9jdG9vbDE2L0NyZWF0ZUR5bmFtaWNMYWJlbF9uZXh0VmFsdWVfVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxWYWx1ZS5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGE1Mjc2MQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy9pY29ucy9mdWxsL2N0b29sMTYvQ3JlYXRlRHluYW1pY0xhYmVsX25leHRWYWx1ZV9UcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbFZhbHVlLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvaWNvbnMvZnVsbC9jdG9vbDE2L0NyZWF0ZUVkZ2VfbGFiZWxfQ29tbW9uQm9yZGVyUmVsYXRpb25zaGlwTGFiZWwuZ2lmIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zL2ljb25zL2Z1bGwvY3Rvb2wxNi9DcmVhdGVFZGdlX2xhYmVsX0NvbW1vbkJvcmRlclJlbGF0aW9uc2hpcExhYmVsLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NzUyZmYwCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zL2ljb25zL2Z1bGwvY3Rvb2wxNi9DcmVhdGVFZGdlX2xhYmVsX0NvbW1vbkJvcmRlclJlbGF0aW9uc2hpcExhYmVsLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvaWNvbnMvZnVsbC9jdG9vbDE2L0NyZWF0ZUVkZ2VfbGFiZWxfTWlncmF0aW9uRWRnZUxhYmVsLmdpZiBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy9pY29ucy9mdWxsL2N0b29sMTYvQ3JlYXRlRWRnZV9sYWJlbF9NaWdyYXRpb25FZGdlTGFiZWwuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQyMDU2NGUKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvaWNvbnMvZnVsbC9jdG9vbDE2L0NyZWF0ZUVkZ2VfbGFiZWxfTWlncmF0aW9uRWRnZUxhYmVsLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvaWNvbnMvZnVsbC9jdG9vbDE2L0NyZWF0ZUVkZ2VfbGFiZWxfTWl4aW5nRWRnZUxhYmVsLmdpZiBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy9pY29ucy9mdWxsL2N0b29sMTYvQ3JlYXRlRWRnZV9sYWJlbF9NaXhpbmdFZGdlTGFiZWwuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMzODJhYTYKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvaWNvbnMvZnVsbC9jdG9vbDE2L0NyZWF0ZUVkZ2VfbGFiZWxfTWl4aW5nRWRnZUxhYmVsLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvaWNvbnMvZnVsbC9jdG9vbDE2L0NyZWF0ZUVkZ2VfbGFiZWxfUmVsYXRpdmVQaHlzaWNhbFJlbGF0aW9uc2hpcExhYmVsLmdpZiBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy9pY29ucy9mdWxsL2N0b29sMTYvQ3JlYXRlRWRnZV9sYWJlbF9SZWxhdGl2ZVBoeXNpY2FsUmVsYXRpb25zaGlwTGFiZWwuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFiNDUzZjQKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvaWNvbnMvZnVsbC9jdG9vbDE2L0NyZWF0ZUVkZ2VfbGFiZWxfUmVsYXRpdmVQaHlzaWNhbFJlbGF0aW9uc2hpcExhYmVsLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvaWNvbnMvZnVsbC9jdG9vbDE2L0NyZWF0ZUVkZ2VfbGFiZWxfVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWwuZ2lmIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zL2ljb25zL2Z1bGwvY3Rvb2wxNi9DcmVhdGVFZGdlX2xhYmVsX1RyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNjE0MjVkCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zL2ljb25zL2Z1bGwvY3Rvb2wxNi9DcmVhdGVFZGdlX2xhYmVsX1RyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvaWNvbnMvZnVsbC9jdG9vbDE2L0NyZWF0ZUlkZW50aWZpYWJsZV9kdWJsaW5Db3JlX0R1YmxpbkNvcmUuZ2lmIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zL2ljb25zL2Z1bGwvY3Rvb2wxNi9DcmVhdGVJZGVudGlmaWFibGVfZHVibGluQ29yZV9EdWJsaW5Db3JlLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MjhmZjNmCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zL2ljb25zL2Z1bGwvY3Rvb2wxNi9DcmVhdGVJZGVudGlmaWFibGVfZHVibGluQ29yZV9EdWJsaW5Db3JlLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvaWNvbnMvZnVsbC9jdG9vbDE2L0NyZWF0ZUxhYmVsX2N1cnJlbnRWYWx1ZV9BcmVhTGFiZWxWYWx1ZS5naWYgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvaWNvbnMvZnVsbC9jdG9vbDE2L0NyZWF0ZUxhYmVsX2N1cnJlbnRWYWx1ZV9BcmVhTGFiZWxWYWx1ZS5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmY4YjM4MAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy9pY29ucy9mdWxsL2N0b29sMTYvQ3JlYXRlTGFiZWxfY3VycmVudFZhbHVlX0FyZWFMYWJlbFZhbHVlLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvaWNvbnMvZnVsbC9jdG9vbDE2L0NyZWF0ZUxhYmVsX2N1cnJlbnRWYWx1ZV9Db21tb25Cb3JkZXJSZWxhdGlvbnNoaXBMYWJlbFZhbHVlLmdpZiBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy9pY29ucy9mdWxsL2N0b29sMTYvQ3JlYXRlTGFiZWxfY3VycmVudFZhbHVlX0NvbW1vbkJvcmRlclJlbGF0aW9uc2hpcExhYmVsVmFsdWUuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY5M2M5MmQKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvaWNvbnMvZnVsbC9jdG9vbDE2L0NyZWF0ZUxhYmVsX2N1cnJlbnRWYWx1ZV9Db21tb25Cb3JkZXJSZWxhdGlvbnNoaXBMYWJlbFZhbHVlLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvaWNvbnMvZnVsbC9jdG9vbDE2L0NyZWF0ZUxhYmVsX2N1cnJlbnRWYWx1ZV9NaWdyYXRpb25FZGdlTGFiZWxWYWx1ZS5naWYgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvaWNvbnMvZnVsbC9jdG9vbDE2L0NyZWF0ZUxhYmVsX2N1cnJlbnRWYWx1ZV9NaWdyYXRpb25FZGdlTGFiZWxWYWx1ZS5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWJmNmJiZQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy9pY29ucy9mdWxsL2N0b29sMTYvQ3JlYXRlTGFiZWxfY3VycmVudFZhbHVlX01pZ3JhdGlvbkVkZ2VMYWJlbFZhbHVlLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvaWNvbnMvZnVsbC9jdG9vbDE2L0NyZWF0ZUxhYmVsX2N1cnJlbnRWYWx1ZV9NaXhpbmdFZGdlTGFiZWxWYWx1ZS5naWYgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvaWNvbnMvZnVsbC9jdG9vbDE2L0NyZWF0ZUxhYmVsX2N1cnJlbnRWYWx1ZV9NaXhpbmdFZGdlTGFiZWxWYWx1ZS5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjkxMDU2MAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy9pY29ucy9mdWxsL2N0b29sMTYvQ3JlYXRlTGFiZWxfY3VycmVudFZhbHVlX01peGluZ0VkZ2VMYWJlbFZhbHVlLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvaWNvbnMvZnVsbC9jdG9vbDE2L0NyZWF0ZUxhYmVsX2N1cnJlbnRWYWx1ZV9QaHlzaWNhbFJlbGF0aW9uc2hpcExhYmVsVmFsdWUuZ2lmIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zL2ljb25zL2Z1bGwvY3Rvb2wxNi9DcmVhdGVMYWJlbF9jdXJyZW50VmFsdWVfUGh5c2ljYWxSZWxhdGlvbnNoaXBMYWJlbFZhbHVlLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZjc2NWUxCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zL2ljb25zL2Z1bGwvY3Rvb2wxNi9DcmVhdGVMYWJlbF9jdXJyZW50VmFsdWVfUGh5c2ljYWxSZWxhdGlvbnNoaXBMYWJlbFZhbHVlLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvaWNvbnMvZnVsbC9jdG9vbDE2L0NyZWF0ZUxhYmVsX2N1cnJlbnRWYWx1ZV9Qb3B1bGF0aW9uTGFiZWxWYWx1ZS5naWYgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvaWNvbnMvZnVsbC9jdG9vbDE2L0NyZWF0ZUxhYmVsX2N1cnJlbnRWYWx1ZV9Qb3B1bGF0aW9uTGFiZWxWYWx1ZS5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDQ2ZGEwMQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy9pY29ucy9mdWxsL2N0b29sMTYvQ3JlYXRlTGFiZWxfY3VycmVudFZhbHVlX1BvcHVsYXRpb25MYWJlbFZhbHVlLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvaWNvbnMvZnVsbC9jdG9vbDE2L0NyZWF0ZUxhYmVsX2N1cnJlbnRWYWx1ZV9SZWxhdGl2ZVBoeXNpY2FsUmVsYXRpb25zaGlwTGFiZWxWYWx1ZS5naWYgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvaWNvbnMvZnVsbC9jdG9vbDE2L0NyZWF0ZUxhYmVsX2N1cnJlbnRWYWx1ZV9SZWxhdGl2ZVBoeXNpY2FsUmVsYXRpb25zaGlwTGFiZWxWYWx1ZS5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDE5M2JmMwotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy9pY29ucy9mdWxsL2N0b29sMTYvQ3JlYXRlTGFiZWxfY3VycmVudFZhbHVlX1JlbGF0aXZlUGh5c2ljYWxSZWxhdGlvbnNoaXBMYWJlbFZhbHVlLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvaWNvbnMvZnVsbC9jdG9vbDE2L0NyZWF0ZUxhYmVsX2N1cnJlbnRWYWx1ZV9Sb2FkVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxWYWx1ZS5naWYgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvaWNvbnMvZnVsbC9jdG9vbDE2L0NyZWF0ZUxhYmVsX2N1cnJlbnRWYWx1ZV9Sb2FkVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxWYWx1ZS5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDRhZmFmZAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy9pY29ucy9mdWxsL2N0b29sMTYvQ3JlYXRlTGFiZWxfY3VycmVudFZhbHVlX1JvYWRUcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbFZhbHVlLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvaWNvbnMvZnVsbC9jdG9vbDE2L0NyZWF0ZUxhYmVsX2N1cnJlbnRWYWx1ZV9UcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbFZhbHVlLmdpZiBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy9pY29ucy9mdWxsL2N0b29sMTYvQ3JlYXRlTGFiZWxfY3VycmVudFZhbHVlX1RyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsVmFsdWUuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIwZjE5ZWEKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvaWNvbnMvZnVsbC9jdG9vbDE2L0NyZWF0ZUxhYmVsX2N1cnJlbnRWYWx1ZV9UcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbFZhbHVlLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvaWNvbnMvZnVsbC9jdXN0b20xNi9taWdyYXRpb24ucG5nIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zL2ljb25zL2Z1bGwvY3VzdG9tMTYvbWlncmF0aW9uLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZTA1YjVjCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zL2ljb25zL2Z1bGwvY3VzdG9tMTYvbWlncmF0aW9uLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvaWNvbnMvZnVsbC9jdXN0b20xNi9yb2FkLnBuZyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy9pY29ucy9mdWxsL2N1c3RvbTE2L3JvYWQucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdkZTEwZDYKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvaWNvbnMvZnVsbC9jdXN0b20xNi9yb2FkLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvaWNvbnMvZnVsbC9vYmoxNi9FYXJ0aFNjaWVuY2VMYWJlbC5naWYgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvaWNvbnMvZnVsbC9vYmoxNi9FYXJ0aFNjaWVuY2VMYWJlbC5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2RkM2I3NgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy9pY29ucy9mdWxsL29iajE2L0VhcnRoU2NpZW5jZUxhYmVsLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvaWNvbnMvZnVsbC9vYmoxNi9FYXJ0aFNjaWVuY2VMYWJlbFZhbHVlLmdpZiBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy9pY29ucy9mdWxsL29iajE2L0VhcnRoU2NpZW5jZUxhYmVsVmFsdWUuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhhNWM3MGMKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvaWNvbnMvZnVsbC9vYmoxNi9FYXJ0aFNjaWVuY2VMYWJlbFZhbHVlLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvaWNvbnMvZnVsbC9vYmoxNi9FZGdlc01vZGVsRmlsZS5naWYgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvaWNvbnMvZnVsbC9vYmoxNi9FZGdlc01vZGVsRmlsZS5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjkxYzVkZgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy9pY29ucy9mdWxsL29iajE2L0VkZ2VzTW9kZWxGaWxlLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvaWNvbnMvZnVsbC9vYmoxNi9MYWJlbHNNb2RlbEZpbGUuZ2lmIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zL2ljb25zL2Z1bGwvb2JqMTYvTGFiZWxzTW9kZWxGaWxlLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMjUxNzkyCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zL2ljb25zL2Z1bGwvb2JqMTYvTGFiZWxzTW9kZWxGaWxlLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvaWNvbnMvZnVsbC9vYmoxNi9Ob2Rlc01vZGVsRmlsZS5naWYgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvaWNvbnMvZnVsbC9vYmoxNi9Ob2Rlc01vZGVsRmlsZS5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGIzYWQ4MAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy9pY29ucy9mdWxsL29iajE2L05vZGVzTW9kZWxGaWxlLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvaWNvbnMvZnVsbC9vYmoxNi9Qb3B1bGF0aW9uRWRnZS5naWYgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvaWNvbnMvZnVsbC9vYmoxNi9Qb3B1bGF0aW9uRWRnZS5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOThiMzUxZgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy9pY29ucy9mdWxsL29iajE2L1BvcHVsYXRpb25FZGdlLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvaWNvbnMvZnVsbC93aXpiYW4vTmV3RWRnZXMuZ2lmIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zL2ljb25zL2Z1bGwvd2l6YmFuL05ld0VkZ2VzLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZTg4NjVmCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zL2ljb25zL2Z1bGwvd2l6YmFuL05ld0VkZ2VzLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvaWNvbnMvZnVsbC93aXpiYW4vTmV3TGFiZWxzLmdpZiBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy9pY29ucy9mdWxsL3dpemJhbi9OZXdMYWJlbHMuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk3ZmQxZTEKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvaWNvbnMvZnVsbC93aXpiYW4vTmV3TGFiZWxzLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvaWNvbnMvZnVsbC93aXpiYW4vTmV3Tm9kZXMuZ2lmIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zL2ljb25zL2Z1bGwvd2l6YmFuL05ld05vZGVzLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zM2YyMTJmCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zL2ljb25zL2Z1bGwvd2l6YmFuL05ld05vZGVzLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvbW9kZWwvZGVmaW5pdGlvbnMuZ2VubW9kZWwgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvbW9kZWwvZGVmaW5pdGlvbnMuZ2VubW9kZWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGI1MTUzNwotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy9tb2RlbC9kZWZpbml0aW9ucy5nZW5tb2RlbApAQCAtMCwwICsxLDEzOCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxnZW5tb2RlbDpHZW5Nb2RlbCB4bWk6dmVyc2lvbj0iMi4wIgorICAgIHhtbG5zOnhtaT0iaHR0cDovL3d3dy5vbWcub3JnL1hNSSIgeG1sbnM6ZWNvcmU9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDIvRWNvcmUiCisgICAgeG1sbnM6Z2VubW9kZWw9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDIvR2VuTW9kZWwiIGNvcHlyaWdodFRleHQ9IiIKKyAgICBtb2RlbERpcmVjdG9yeT0iL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvc3JjIiBlZGl0RGlyZWN0b3J5PSIvb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy9zcmMiCisgICAgZWRpdG9yRGlyZWN0b3J5PSIvb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy9zcmMiIG1vZGVsUGx1Z2luSUQ9Im9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMiCisgICAgcmVkaXJlY3Rpb249IiIgbW9kZWxOYW1lPSJEZWZpbml0aW9ucyIgbm9uTkxTTWFya2Vycz0idHJ1ZSIgdGVzdHNEaXJlY3Rvcnk9Ii9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRlZmluaXRpb25zL3NyYyIKKyAgICBpbXBvcnRlcklEPSJvcmcuZWNsaXBzZS5lbWYuaW1wb3J0ZXIuamF2YSIgY29tcGxpYW5jZUxldmVsPSI1LjAiIGNvcHlyaWdodEZpZWxkcz0iZmFsc2UiCisgICAgdXNlZEdlblBhY2thZ2VzPSIuLi8uLi9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvbW9kZWwvY29yZS5nZW5tb2RlbCMvL2dyYXBoIC4uLy4uL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9tb2RlbC9jb3JlLmdlbm1vZGVsIy8vY29tbW9uIC4uLy4uL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9tb2RlbC9jb3JlLmdlbm1vZGVsIy8vbW9kZWwgcGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5lbWYuZWNvcmUvbW9kZWwvRWNvcmUuZ2VubW9kZWwjLy9lY29yZSAuLi8uLi9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvbW9kZWwvY29yZS5nZW5tb2RlbCMvL21vZGlmaWVyIC4uLy4uL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9tb2RlbC9jb3JlLmdlbm1vZGVsIy8vc2NlbmFyaW8gLi4vLi4vb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL21vZGVsL2NvcmUuZ2VubW9kZWwjLy9zZXF1ZW5jZXIgLi4vLi4vb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL21vZGVsL2NvcmUuZ2VubW9kZWwjLy9zb2x2ZXIiPgorICA8Zm9yZWlnbk1vZGVsPkBtb2RlbDwvZm9yZWlnbk1vZGVsPgorICA8Z2VuUGFja2FnZXMgcHJlZml4PSJFZGdlcyIgYmFzZVBhY2thZ2U9Im9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMiIGRpc3Bvc2FibGVQcm92aWRlckZhY3Rvcnk9InRydWUiCisgICAgICBnZW5lcmF0ZUV4YW1wbGVDbGFzcz0iZmFsc2UiIG11bHRpcGxlRWRpdG9yUGFnZXM9ImZhbHNlIiBnZW5lcmF0ZU1vZGVsV2l6YXJkPSJmYWxzZSIKKyAgICAgIGVjb3JlUGFja2FnZT0iZWRnZXMuZWNvcmUjLyI+CisgICAgPGdlbkNsYXNzZXMgZWNvcmVDbGFzcz0iZWRnZXMuZWNvcmUjLy9NaWdyYXRpb25FZGdlIi8+CisgICAgPGdlbkNsYXNzZXMgZWNvcmVDbGFzcz0iZWRnZXMuZWNvcmUjLy9NaWdyYXRpb25FZGdlTGFiZWwiLz4KKyAgICA8Z2VuQ2xhc3NlcyBpbWFnZT0iZmFsc2UiIGVjb3JlQ2xhc3M9ImVkZ2VzLmVjb3JlIy8vTWlncmF0aW9uRWRnZUxhYmVsVmFsdWUiPgorICAgICAgPGdlbkZlYXR1cmVzIGNyZWF0ZUNoaWxkPSJmYWxzZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFQXR0cmlidXRlIGVkZ2VzLmVjb3JlIy8vTWlncmF0aW9uRWRnZUxhYmVsVmFsdWUvbWlncmF0aW9uUmF0ZSIvPgorICAgIDwvZ2VuQ2xhc3Nlcz4KKyAgICA8Z2VuQ2xhc3NlcyBpbWFnZT0iZmFsc2UiIGVjb3JlQ2xhc3M9ImVkZ2VzLmVjb3JlIy8vTWl4aW5nRWRnZSIvPgorICAgIDxnZW5DbGFzc2VzIGltYWdlPSJmYWxzZSIgZWNvcmVDbGFzcz0iZWRnZXMuZWNvcmUjLy9NaXhpbmdFZGdlTGFiZWwiLz4KKyAgICA8Z2VuQ2xhc3NlcyBpbWFnZT0iZmFsc2UiIGVjb3JlQ2xhc3M9ImVkZ2VzLmVjb3JlIy8vTWl4aW5nRWRnZUxhYmVsVmFsdWUiPgorICAgICAgPGdlbkZlYXR1cmVzIGNyZWF0ZUNoaWxkPSJmYWxzZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFQXR0cmlidXRlIGVkZ2VzLmVjb3JlIy8vTWl4aW5nRWRnZUxhYmVsVmFsdWUvbWl4aW5nUmF0ZSIvPgorICAgIDwvZ2VuQ2xhc3Nlcz4KKyAgICA8Z2VuQ2xhc3NlcyBlY29yZUNsYXNzPSJlZGdlcy5lY29yZSMvL1BvcHVsYXRpb25FZGdlIj4KKyAgICAgIDxnZW5GZWF0dXJlcyBjcmVhdGVDaGlsZD0iZmFsc2UiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RUF0dHJpYnV0ZSBlZGdlcy5lY29yZSMvL1BvcHVsYXRpb25FZGdlL3BvcHVsYXRpb25JZGVudGlmaWVyIi8+CisgICAgPC9nZW5DbGFzc2VzPgorICA8L2dlblBhY2thZ2VzPgorICA8Z2VuUGFja2FnZXMgcHJlZml4PSJMYWJlbHMiIGJhc2VQYWNrYWdlPSJvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zIiBkaXNwb3NhYmxlUHJvdmlkZXJGYWN0b3J5PSJ0cnVlIgorICAgICAgZ2VuZXJhdGVFeGFtcGxlQ2xhc3M9ImZhbHNlIiBtdWx0aXBsZUVkaXRvclBhZ2VzPSJmYWxzZSIgZ2VuZXJhdGVNb2RlbFdpemFyZD0iZmFsc2UiCisgICAgICBlY29yZVBhY2thZ2U9ImxhYmVscy5lY29yZSMvIj4KKyAgICA8Z2VuRW51bXMgZWNvcmVFbnVtPSJsYWJlbHMuZWNvcmUjLy9SZWxhdGl2ZVBoeXNpY2FsUmVsYXRpb25zaGlwIj4KKyAgICAgIDxnZW5FbnVtTGl0ZXJhbHMgZWNvcmVFbnVtTGl0ZXJhbD0ibGFiZWxzLmVjb3JlIy8vUmVsYXRpdmVQaHlzaWNhbFJlbGF0aW9uc2hpcC9VbnNwZWNpZmllZCIvPgorICAgICAgPGdlbkVudW1MaXRlcmFscyBlY29yZUVudW1MaXRlcmFsPSJsYWJlbHMuZWNvcmUjLy9SZWxhdGl2ZVBoeXNpY2FsUmVsYXRpb25zaGlwL0Fib3ZlIi8+CisgICAgICA8Z2VuRW51bUxpdGVyYWxzIGVjb3JlRW51bUxpdGVyYWw9ImxhYmVscy5lY29yZSMvL1JlbGF0aXZlUGh5c2ljYWxSZWxhdGlvbnNoaXAvQmVsb3ciLz4KKyAgICAgIDxnZW5FbnVtTGl0ZXJhbHMgZWNvcmVFbnVtTGl0ZXJhbD0ibGFiZWxzLmVjb3JlIy8vUmVsYXRpdmVQaHlzaWNhbFJlbGF0aW9uc2hpcC9SaWdodE9mIi8+CisgICAgICA8Z2VuRW51bUxpdGVyYWxzIGVjb3JlRW51bUxpdGVyYWw9ImxhYmVscy5lY29yZSMvL1JlbGF0aXZlUGh5c2ljYWxSZWxhdGlvbnNoaXAvTGVmdE9mIi8+CisgICAgICA8Z2VuRW51bUxpdGVyYWxzIGVjb3JlRW51bUxpdGVyYWw9ImxhYmVscy5lY29yZSMvL1JlbGF0aXZlUGh5c2ljYWxSZWxhdGlvbnNoaXAvTm9ydGhPZiIvPgorICAgICAgPGdlbkVudW1MaXRlcmFscyBlY29yZUVudW1MaXRlcmFsPSJsYWJlbHMuZWNvcmUjLy9SZWxhdGl2ZVBoeXNpY2FsUmVsYXRpb25zaGlwL1NvdXRoT2YiLz4KKyAgICAgIDxnZW5FbnVtTGl0ZXJhbHMgZWNvcmVFbnVtTGl0ZXJhbD0ibGFiZWxzLmVjb3JlIy8vUmVsYXRpdmVQaHlzaWNhbFJlbGF0aW9uc2hpcC9XZXN0T2YiLz4KKyAgICAgIDxnZW5FbnVtTGl0ZXJhbHMgZWNvcmVFbnVtTGl0ZXJhbD0ibGFiZWxzLmVjb3JlIy8vUmVsYXRpdmVQaHlzaWNhbFJlbGF0aW9uc2hpcC9FYXN0T2YiLz4KKyAgICAgIDxnZW5FbnVtTGl0ZXJhbHMgZWNvcmVFbnVtTGl0ZXJhbD0ibGFiZWxzLmVjb3JlIy8vUmVsYXRpdmVQaHlzaWNhbFJlbGF0aW9uc2hpcC9Db250YWlucyIvPgorICAgICAgPGdlbkVudW1MaXRlcmFscyBlY29yZUVudW1MaXRlcmFsPSJsYWJlbHMuZWNvcmUjLy9SZWxhdGl2ZVBoeXNpY2FsUmVsYXRpb25zaGlwL0NvbnRhaW5lZEJ5Ii8+CisgICAgICA8Z2VuRW51bUxpdGVyYWxzIGVjb3JlRW51bUxpdGVyYWw9ImxhYmVscy5lY29yZSMvL1JlbGF0aXZlUGh5c2ljYWxSZWxhdGlvbnNoaXAvT3ZlcmxhcHMiLz4KKyAgICAgIDxnZW5FbnVtTGl0ZXJhbHMgZWNvcmVFbnVtTGl0ZXJhbD0ibGFiZWxzLmVjb3JlIy8vUmVsYXRpdmVQaHlzaWNhbFJlbGF0aW9uc2hpcC9PcmJpdHMiLz4KKyAgICA8L2dlbkVudW1zPgorICAgIDxnZW5FbnVtcyBlY29yZUVudW09ImxhYmVscy5lY29yZSMvL1RyYW5zcG9ydE1vZGUiPgorICAgICAgPGdlbkVudW1MaXRlcmFscyBlY29yZUVudW1MaXRlcmFsPSJsYWJlbHMuZWNvcmUjLy9UcmFuc3BvcnRNb2RlL3Vuc3BlY2lmaWVkIi8+CisgICAgICA8Z2VuRW51bUxpdGVyYWxzIGVjb3JlRW51bUxpdGVyYWw9ImxhYmVscy5lY29yZSMvL1RyYW5zcG9ydE1vZGUvYWlyIi8+CisgICAgICA8Z2VuRW51bUxpdGVyYWxzIGVjb3JlRW51bUxpdGVyYWw9ImxhYmVscy5lY29yZSMvL1RyYW5zcG9ydE1vZGUvcm9hZCIvPgorICAgICAgPGdlbkVudW1MaXRlcmFscyBlY29yZUVudW1MaXRlcmFsPSJsYWJlbHMuZWNvcmUjLy9UcmFuc3BvcnRNb2RlL3JhaWwiLz4KKyAgICAgIDxnZW5FbnVtTGl0ZXJhbHMgZWNvcmVFbnVtTGl0ZXJhbD0ibGFiZWxzLmVjb3JlIy8vVHJhbnNwb3J0TW9kZS9tYXJpbmUiLz4KKyAgICAgIDxnZW5FbnVtTGl0ZXJhbHMgZWNvcmVFbnVtTGl0ZXJhbD0ibGFiZWxzLmVjb3JlIy8vVHJhbnNwb3J0TW9kZS9mb290Ii8+CisgICAgPC9nZW5FbnVtcz4KKyAgICA8Z2VuQ2xhc3NlcyBpbWFnZT0iZmFsc2UiIGVjb3JlQ2xhc3M9ImxhYmVscy5lY29yZSMvL0FyZWFMYWJlbCI+CisgICAgICA8Z2VuRmVhdHVyZXMgcHJvcGVydHk9IlJlYWRvbmx5IiBub3RpZnk9ImZhbHNlIiBjcmVhdGVDaGlsZD0iZmFsc2UiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RVJlZmVyZW5jZSBsYWJlbHMuZWNvcmUjLy9BcmVhTGFiZWwvY3VycmVudEFyZWFWYWx1ZSIvPgorICAgIDwvZ2VuQ2xhc3Nlcz4KKyAgICA8Z2VuQ2xhc3NlcyBpbWFnZT0iZmFsc2UiIGVjb3JlQ2xhc3M9ImxhYmVscy5lY29yZSMvL0FyZWFMYWJlbFZhbHVlIj4KKyAgICAgIDxnZW5GZWF0dXJlcyBjcmVhdGVDaGlsZD0iZmFsc2UiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RUF0dHJpYnV0ZSBsYWJlbHMuZWNvcmUjLy9BcmVhTGFiZWxWYWx1ZS9hcmVhIi8+CisgICAgICA8Z2VuRmVhdHVyZXMgY3JlYXRlQ2hpbGQ9ImZhbHNlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVBdHRyaWJ1dGUgbGFiZWxzLmVjb3JlIy8vQXJlYUxhYmVsVmFsdWUvYXZlcmFnZUV4dGVudCIvPgorICAgIDwvZ2VuQ2xhc3Nlcz4KKyAgICA8Z2VuQ2xhc3NlcyBpbWFnZT0iZmFsc2UiIGVjb3JlQ2xhc3M9ImxhYmVscy5lY29yZSMvL0NvbW1vbkJvcmRlclJlbGF0aW9uc2hpcExhYmVsIi8+CisgICAgPGdlbkNsYXNzZXMgaW1hZ2U9ImZhbHNlIiBlY29yZUNsYXNzPSJsYWJlbHMuZWNvcmUjLy9Db21tb25Cb3JkZXJSZWxhdGlvbnNoaXBMYWJlbFZhbHVlIj4KKyAgICAgIDxnZW5GZWF0dXJlcyBjcmVhdGVDaGlsZD0iZmFsc2UiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RUF0dHJpYnV0ZSBsYWJlbHMuZWNvcmUjLy9Db21tb25Cb3JkZXJSZWxhdGlvbnNoaXBMYWJlbFZhbHVlL2JvcmRlckxlbmd0aCIvPgorICAgIDwvZ2VuQ2xhc3Nlcz4KKyAgICA8Z2VuQ2xhc3NlcyBpbWFnZT0iZmFsc2UiIGVjb3JlQ2xhc3M9ImxhYmVscy5lY29yZSMvL1BoeXNpY2FsUmVsYXRpb25zaGlwTGFiZWwiLz4KKyAgICA8Z2VuQ2xhc3NlcyBpbWFnZT0iZmFsc2UiIGVjb3JlQ2xhc3M9ImxhYmVscy5lY29yZSMvL1BvcHVsYXRpb25MYWJlbCI+CisgICAgICA8Z2VuRmVhdHVyZXMgY3JlYXRlQ2hpbGQ9ImZhbHNlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVBdHRyaWJ1dGUgbGFiZWxzLmVjb3JlIy8vUG9wdWxhdGlvbkxhYmVsL3BvcHVsYXRpb25JZGVudGlmaWVyIi8+CisgICAgICA8Z2VuRmVhdHVyZXMgY3JlYXRlQ2hpbGQ9ImZhbHNlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVBdHRyaWJ1dGUgbGFiZWxzLmVjb3JlIy8vUG9wdWxhdGlvbkxhYmVsL25hbWUiLz4KKyAgICAgIDxnZW5GZWF0dXJlcyBwcm9wZXJ0eT0iUmVhZG9ubHkiIG5vdGlmeT0iZmFsc2UiIGNyZWF0ZUNoaWxkPSJmYWxzZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFUmVmZXJlbmNlIGxhYmVscy5lY29yZSMvL1BvcHVsYXRpb25MYWJlbC9jdXJyZW50UG9wdWxhdGlvblZhbHVlIi8+CisgICAgICA8Z2VuRmVhdHVyZXMgY3JlYXRlQ2hpbGQ9ImZhbHNlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVBdHRyaWJ1dGUgbGFiZWxzLmVjb3JlIy8vUG9wdWxhdGlvbkxhYmVsL3BvcHVsYXRlZEFyZWEiLz4KKyAgICAgIDxnZW5GZWF0dXJlcyBjcmVhdGVDaGlsZD0iZmFsc2UiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RUF0dHJpYnV0ZSBsYWJlbHMuZWNvcmUjLy9Qb3B1bGF0aW9uTGFiZWwvdmFsaWRZZWFyIi8+CisgICAgPC9nZW5DbGFzc2VzPgorICAgIDxnZW5DbGFzc2VzIGltYWdlPSJmYWxzZSIgZWNvcmVDbGFzcz0ibGFiZWxzLmVjb3JlIy8vUG9wdWxhdGlvbkxhYmVsVmFsdWUiPgorICAgICAgPGdlbkZlYXR1cmVzIGNyZWF0ZUNoaWxkPSJmYWxzZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFQXR0cmlidXRlIGxhYmVscy5lY29yZSMvL1BvcHVsYXRpb25MYWJlbFZhbHVlL2NvdW50Ii8+CisgICAgPC9nZW5DbGFzc2VzPgorICAgIDxnZW5DbGFzc2VzIGltYWdlPSJmYWxzZSIgZWNvcmVDbGFzcz0ibGFiZWxzLmVjb3JlIy8vUmVsYXRpdmVQaHlzaWNhbFJlbGF0aW9uc2hpcExhYmVsIj4KKyAgICAgIDxnZW5GZWF0dXJlcyBwcm9wZXJ0eT0iUmVhZG9ubHkiIG5vdGlmeT0iZmFsc2UiIGNyZWF0ZUNoaWxkPSJmYWxzZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFUmVmZXJlbmNlIGxhYmVscy5lY29yZSMvL1JlbGF0aXZlUGh5c2ljYWxSZWxhdGlvbnNoaXBMYWJlbC9jdXJyZW50UmVsYXRpb25zaGlwIi8+CisgICAgPC9nZW5DbGFzc2VzPgorICAgIDxnZW5DbGFzc2VzIGltYWdlPSJmYWxzZSIgZWNvcmVDbGFzcz0ibGFiZWxzLmVjb3JlIy8vUmVsYXRpdmVQaHlzaWNhbFJlbGF0aW9uc2hpcExhYmVsVmFsdWUiPgorICAgICAgPGdlbkZlYXR1cmVzIGNyZWF0ZUNoaWxkPSJmYWxzZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFQXR0cmlidXRlIGxhYmVscy5lY29yZSMvL1JlbGF0aXZlUGh5c2ljYWxSZWxhdGlvbnNoaXBMYWJlbFZhbHVlL2FkamFjZW50Ii8+CisgICAgICA8Z2VuRmVhdHVyZXMgY3JlYXRlQ2hpbGQ9ImZhbHNlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVBdHRyaWJ1dGUgbGFiZWxzLmVjb3JlIy8vUmVsYXRpdmVQaHlzaWNhbFJlbGF0aW9uc2hpcExhYmVsVmFsdWUvcmVsYXRpb25zaGlwIi8+CisgICAgPC9nZW5DbGFzc2VzPgorICAgIDxnZW5DbGFzc2VzIGltYWdlPSJmYWxzZSIgZWNvcmVDbGFzcz0ibGFiZWxzLmVjb3JlIy8vVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWwiPgorICAgICAgPGdlbkZlYXR1cmVzIGNyZWF0ZUNoaWxkPSJmYWxzZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFQXR0cmlidXRlIGxhYmVscy5lY29yZSMvL1RyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsL3RyYW5zcG9ydE1vZGUiLz4KKyAgICAgIDxnZW5GZWF0dXJlcyBjcmVhdGVDaGlsZD0iZmFsc2UiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RUF0dHJpYnV0ZSBsYWJlbHMuZWNvcmUjLy9UcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbC9wb3B1bGF0aW9uSWRlbnRpZmllciIvPgorICAgICAgPGdlbkZlYXR1cmVzIGNyZWF0ZUNoaWxkPSJmYWxzZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFQXR0cmlidXRlIGxhYmVscy5lY29yZSMvL1RyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsL3RyYW5zcG9ydElkZW50aWZpZXIiLz4KKyAgICAgIDxnZW5GZWF0dXJlcyBwcm9wZXJ0eT0iUmVhZG9ubHkiIG5vdGlmeT0iZmFsc2UiIGNyZWF0ZUNoaWxkPSJmYWxzZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFUmVmZXJlbmNlIGxhYmVscy5lY29yZSMvL1RyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsL2N1cnJlbnRUcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbFZhbHVlIi8+CisgICAgICA8Z2VuRmVhdHVyZXMgY3JlYXRlQ2hpbGQ9ImZhbHNlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVBdHRyaWJ1dGUgbGFiZWxzLmVjb3JlIy8vVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWwvcmF0ZVRpbWVQZXJpb2QiLz4KKyAgICAgIDxnZW5GZWF0dXJlcyBwcm9wZXJ0eT0iUmVhZG9ubHkiIGNyZWF0ZUNoaWxkPSJmYWxzZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFQXR0cmlidXRlIGxhYmVscy5lY29yZSMvL1RyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsL2RlcGFydHVyZUNhcGFjaXR5Ii8+CisgICAgICA8Z2VuRmVhdHVyZXMgY3JlYXRlQ2hpbGQ9ImZhbHNlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVBdHRyaWJ1dGUgbGFiZWxzLmVjb3JlIy8vVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWwvbWF4aW11bURlcGFydHVyZUNhcGFjaXR5Ii8+CisgICAgICA8Z2VuRmVhdHVyZXMgcHJvcGVydHk9IlJlYWRvbmx5IiBjcmVhdGVDaGlsZD0iZmFsc2UiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RUF0dHJpYnV0ZSBsYWJlbHMuZWNvcmUjLy9UcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbC9jYXBhY2l0eSIvPgorICAgICAgPGdlbkZlYXR1cmVzIGNyZWF0ZUNoaWxkPSJmYWxzZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFQXR0cmlidXRlIGxhYmVscy5lY29yZSMvL1RyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsL21heGltdW1DYXBhY2l0eSIvPgorICAgICAgPGdlbkZlYXR1cmVzIGNyZWF0ZUNoaWxkPSJmYWxzZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFQXR0cmlidXRlIGxhYmVscy5lY29yZSMvL1RyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsL3RyYW5zaXRUaW1lIi8+CisgICAgICA8Z2VuRmVhdHVyZXMgY3JlYXRlQ2hpbGQ9ImZhbHNlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVBdHRyaWJ1dGUgbGFiZWxzLmVjb3JlIy8vVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWwvc3RhcnRVcERlbGF5Ii8+CisgICAgPC9nZW5DbGFzc2VzPgorICAgIDxnZW5DbGFzc2VzIGltYWdlPSJmYWxzZSIgZWNvcmVDbGFzcz0ibGFiZWxzLmVjb3JlIy8vVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxWYWx1ZSI+CisgICAgICA8Z2VuRmVhdHVyZXMgY3JlYXRlQ2hpbGQ9ImZhbHNlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVBdHRyaWJ1dGUgbGFiZWxzLmVjb3JlIy8vVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxWYWx1ZS9hdmFpbGFibGVEZXBhcnR1cmVDYXBhY2l0eVByb3BvcnRpb24iLz4KKyAgICA8L2dlbkNsYXNzZXM+CisgICAgPGdlbkNsYXNzZXMgaW1hZ2U9ImZhbHNlIiBlY29yZUNsYXNzPSJsYWJlbHMuZWNvcmUjLy9QaHlzaWNhbFJlbGF0aW9uc2hpcExhYmVsVmFsdWUiLz4KKyAgICA8Z2VuQ2xhc3NlcyBlY29yZUNsYXNzPSJsYWJlbHMuZWNvcmUjLy9Sb2FkVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWwiLz4KKyAgICA8Z2VuQ2xhc3NlcyBpbWFnZT0iZmFsc2UiIGVjb3JlQ2xhc3M9ImxhYmVscy5lY29yZSMvL1JvYWRUcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbFZhbHVlIj4KKyAgICAgIDxnZW5GZWF0dXJlcyBjcmVhdGVDaGlsZD0iZmFsc2UiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RUF0dHJpYnV0ZSBsYWJlbHMuZWNvcmUjLy9Sb2FkVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxWYWx1ZS9yb2FkTmFtZSIvPgorICAgICAgPGdlbkZlYXR1cmVzIGNyZWF0ZUNoaWxkPSJmYWxzZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFQXR0cmlidXRlIGxhYmVscy5lY29yZSMvL1JvYWRUcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbFZhbHVlL3JvYWRDbGFzcyIvPgorICAgICAgPGdlbkZlYXR1cmVzIGNyZWF0ZUNoaWxkPSJmYWxzZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFQXR0cmlidXRlIGxhYmVscy5lY29yZSMvL1JvYWRUcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbFZhbHVlL251bWJlckNyb3NzaW5ncyIvPgorICAgIDwvZ2VuQ2xhc3Nlcz4KKyAgICA8Z2VuQ2xhc3NlcyBlY29yZUNsYXNzPSJsYWJlbHMuZWNvcmUjLy9FYXJ0aFNjaWVuY2VMYWJlbCI+CisgICAgICA8Z2VuRmVhdHVyZXMgcHJvcGVydHk9IlJlYWRvbmx5IiBub3RpZnk9ImZhbHNlIiBjcmVhdGVDaGlsZD0iZmFsc2UiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RVJlZmVyZW5jZSBsYWJlbHMuZWNvcmUjLy9FYXJ0aFNjaWVuY2VMYWJlbC9jdXJyZW50RWFydGhTY2llbmNlVmFsdWUiLz4KKyAgICA8L2dlbkNsYXNzZXM+CisgICAgPGdlbkNsYXNzZXMgZWNvcmVDbGFzcz0ibGFiZWxzLmVjb3JlIy8vRWFydGhTY2llbmNlTGFiZWxWYWx1ZSI+CisgICAgICA8Z2VuRmVhdHVyZXMgY3JlYXRlQ2hpbGQ9ImZhbHNlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVBdHRyaWJ1dGUgbGFiZWxzLmVjb3JlIy8vRWFydGhTY2llbmNlTGFiZWxWYWx1ZS9kYXRhVHlwZSIvPgorICAgICAgPGdlbkZlYXR1cmVzIGNyZWF0ZUNoaWxkPSJmYWxzZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFQXR0cmlidXRlIGxhYmVscy5lY29yZSMvL0VhcnRoU2NpZW5jZUxhYmVsVmFsdWUvdW5pdHMiLz4KKyAgICAgIDxnZW5GZWF0dXJlcyBjcmVhdGVDaGlsZD0iZmFsc2UiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RUF0dHJpYnV0ZSBsYWJlbHMuZWNvcmUjLy9FYXJ0aFNjaWVuY2VMYWJlbFZhbHVlL21lYW4iLz4KKyAgICAgIDxnZW5GZWF0dXJlcyBjcmVhdGVDaGlsZD0iZmFsc2UiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RUF0dHJpYnV0ZSBsYWJlbHMuZWNvcmUjLy9FYXJ0aFNjaWVuY2VMYWJlbFZhbHVlL3NkIi8+CisgICAgICA8Z2VuRmVhdHVyZXMgY3JlYXRlQ2hpbGQ9ImZhbHNlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVBdHRyaWJ1dGUgbGFiZWxzLmVjb3JlIy8vRWFydGhTY2llbmNlTGFiZWxWYWx1ZS9taW4iLz4KKyAgICAgIDxnZW5GZWF0dXJlcyBjcmVhdGVDaGlsZD0iZmFsc2UiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RUF0dHJpYnV0ZSBsYWJlbHMuZWNvcmUjLy9FYXJ0aFNjaWVuY2VMYWJlbFZhbHVlL21heCIvPgorICAgICAgPGdlbkZlYXR1cmVzIGNyZWF0ZUNoaWxkPSJmYWxzZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFQXR0cmlidXRlIGxhYmVscy5lY29yZSMvL0VhcnRoU2NpZW5jZUxhYmVsVmFsdWUvbWVkaWFuIi8+CisgICAgICA8Z2VuRmVhdHVyZXMgY3JlYXRlQ2hpbGQ9ImZhbHNlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVBdHRyaWJ1dGUgbGFiZWxzLmVjb3JlIy8vRWFydGhTY2llbmNlTGFiZWxWYWx1ZS9za2V3bmVzcyIvPgorICAgICAgPGdlbkZlYXR1cmVzIGNyZWF0ZUNoaWxkPSJmYWxzZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFQXR0cmlidXRlIGxhYmVscy5lY29yZSMvL0VhcnRoU2NpZW5jZUxhYmVsVmFsdWUva3VydG9zaXMiLz4KKyAgICAgIDxnZW5GZWF0dXJlcyBjcmVhdGVDaGlsZD0iZmFsc2UiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RUF0dHJpYnV0ZSBsYWJlbHMuZWNvcmUjLy9FYXJ0aFNjaWVuY2VMYWJlbFZhbHVlL3JtcyIvPgorICAgICAgPGdlbkZlYXR1cmVzIGNyZWF0ZUNoaWxkPSJmYWxzZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFQXR0cmlidXRlIGxhYmVscy5lY29yZSMvL0VhcnRoU2NpZW5jZUxhYmVsVmFsdWUvc2FtcGxlc2l6ZSIvPgorICAgICAgPGdlbkZlYXR1cmVzIGNyZWF0ZUNoaWxkPSJmYWxzZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFQXR0cmlidXRlIGxhYmVscy5lY29yZSMvL0VhcnRoU2NpZW5jZUxhYmVsVmFsdWUvcmFuZ2UiLz4KKyAgICA8L2dlbkNsYXNzZXM+CisgIDwvZ2VuUGFja2FnZXM+CisgIDxnZW5QYWNrYWdlcyBwcmVmaXg9Ik5vZGVzIiBiYXNlUGFja2FnZT0ib3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucyIgZGlzcG9zYWJsZVByb3ZpZGVyRmFjdG9yeT0idHJ1ZSIKKyAgICAgIGdlbmVyYXRlRXhhbXBsZUNsYXNzPSJmYWxzZSIgbXVsdGlwbGVFZGl0b3JQYWdlcz0iZmFsc2UiIGdlbmVyYXRlTW9kZWxXaXphcmQ9ImZhbHNlIgorICAgICAgY29udGVudFR5cGVJZGVudGlmaWVyPSIiIGVjb3JlUGFja2FnZT0ibm9kZXMuZWNvcmUjLyI+CisgICAgPGdlbkNsYXNzZXMgaW1hZ2U9ImZhbHNlIiBlY29yZUNsYXNzPSJub2Rlcy5lY29yZSMvL0dlb2dyYXBoaWNGZWF0dXJlIi8+CisgICAgPGdlbkNsYXNzZXMgaW1hZ2U9ImZhbHNlIiBlY29yZUNsYXNzPSJub2Rlcy5lY29yZSMvL1JlZ2lvbiIvPgorICAgIDxnZW5DbGFzc2VzIGltYWdlPSJmYWxzZSIgZWNvcmVDbGFzcz0ibm9kZXMuZWNvcmUjLy9Ob2RlIi8+CisgIDwvZ2VuUGFja2FnZXM+CisgIDxnZW5QYWNrYWdlcyBwcmVmaXg9IlR5cGVzIiBiYXNlUGFja2FnZT0ib3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucyIgZGlzcG9zYWJsZVByb3ZpZGVyRmFjdG9yeT0idHJ1ZSIKKyAgICAgIGVjb3JlUGFja2FnZT0idHlwZXMuZWNvcmUjLyI+CisgICAgPGdlbkNsYXNzZXMgaW1hZ2U9ImZhbHNlIiBlY29yZUNsYXNzPSJ0eXBlcy5lY29yZSMvL0NhdGVnb3JpemVkVHlwZSIvPgorICAgIDxnZW5DbGFzc2VzIGltYWdlPSJmYWxzZSIgZWNvcmVDbGFzcz0idHlwZXMuZWNvcmUjLy9SYXRlIj4KKyAgICAgIDxnZW5GZWF0dXJlcyBjcmVhdGVDaGlsZD0iZmFsc2UiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RUF0dHJpYnV0ZSB0eXBlcy5lY29yZSMvL1JhdGUvcmF0ZSIvPgorICAgIDwvZ2VuQ2xhc3Nlcz4KKyAgPC9nZW5QYWNrYWdlcz4KKzwvZ2VubW9kZWw6R2VuTW9kZWw+CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvbW9kZWwvZWRnZXMuZWNvcmUgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvbW9kZWwvZWRnZXMuZWNvcmUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODM5MzY1NwotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy9tb2RlbC9lZGdlcy5lY29yZQpAQCAtMCwwICsxLDIxIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPGVjb3JlOkVQYWNrYWdlIHhtaTp2ZXJzaW9uPSIyLjAiCisgICAgeG1sbnM6eG1pPSJodHRwOi8vd3d3Lm9tZy5vcmcvWE1JIiB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIgorICAgIHhtbG5zOmVjb3JlPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2VtZi8yMDAyL0Vjb3JlIiBuYW1lPSJlZGdlcyIKKyAgICBuc1VSST0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL2VkZ2VzLmVjb3JlIiBuc1ByZWZpeD0ib3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5lZGdlcyI+CisgIDxlQ2xhc3NpZmllcnMgeHNpOnR5cGU9ImVjb3JlOkVDbGFzcyIgbmFtZT0iTWlncmF0aW9uRWRnZSIgZVN1cGVyVHlwZXM9IiMvL1BvcHVsYXRpb25FZGdlIi8+CisgIDxlQ2xhc3NpZmllcnMgeHNpOnR5cGU9ImVjb3JlOkVDbGFzcyIgbmFtZT0iTWlncmF0aW9uRWRnZUxhYmVsIiBlU3VwZXJUeXBlcz0iLi4vLi4vb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL21vZGVsL2dyYXBoLmVjb3JlIy8vRWRnZUxhYmVsIC4uLy4uL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9tb2RlbC9tb2RpZmllci5lY29yZSMvL01vZGlmaWFibGUiLz4KKyAgPGVDbGFzc2lmaWVycyB4c2k6dHlwZT0iZWNvcmU6RUNsYXNzIiBuYW1lPSJNaWdyYXRpb25FZGdlTGFiZWxWYWx1ZSIgZVN1cGVyVHlwZXM9Ii4uLy4uL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9tb2RlbC9ncmFwaC5lY29yZSMvL0xhYmVsVmFsdWUiPgorICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJtaWdyYXRpb25SYXRlIiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDIvRWNvcmUjLy9FRG91YmxlIgorICAgICAgICBkZWZhdWx0VmFsdWVMaXRlcmFsPSIwLjAiLz4KKyAgPC9lQ2xhc3NpZmllcnM+CisgIDxlQ2xhc3NpZmllcnMgeHNpOnR5cGU9ImVjb3JlOkVDbGFzcyIgbmFtZT0iTWl4aW5nRWRnZSIgZVN1cGVyVHlwZXM9IiMvL1BvcHVsYXRpb25FZGdlIi8+CisgIDxlQ2xhc3NpZmllcnMgeHNpOnR5cGU9ImVjb3JlOkVDbGFzcyIgbmFtZT0iTWl4aW5nRWRnZUxhYmVsIiBlU3VwZXJUeXBlcz0iLi4vLi4vb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL21vZGVsL2dyYXBoLmVjb3JlIy8vRWRnZUxhYmVsIC4uLy4uL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9tb2RlbC9tb2RpZmllci5lY29yZSMvL01vZGlmaWFibGUiLz4KKyAgPGVDbGFzc2lmaWVycyB4c2k6dHlwZT0iZWNvcmU6RUNsYXNzIiBuYW1lPSJNaXhpbmdFZGdlTGFiZWxWYWx1ZSIgZVN1cGVyVHlwZXM9Ii4uLy4uL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9tb2RlbC9ncmFwaC5lY29yZSMvL0xhYmVsVmFsdWUiPgorICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJtaXhpbmdSYXRlIiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDIvRWNvcmUjLy9FRG91YmxlIi8+CisgIDwvZUNsYXNzaWZpZXJzPgorICA8ZUNsYXNzaWZpZXJzIHhzaTp0eXBlPSJlY29yZTpFQ2xhc3MiIG5hbWU9IlBvcHVsYXRpb25FZGdlIiBlU3VwZXJUeXBlcz0iLi4vLi4vb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL21vZGVsL2dyYXBoLmVjb3JlIy8vRWRnZSI+CisgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVBdHRyaWJ1dGUiIG5hbWU9InBvcHVsYXRpb25JZGVudGlmaWVyIiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIHBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2UuZW1mLmVjb3JlL21vZGVsL0Vjb3JlLmVjb3JlIy8vRVN0cmluZyIKKyAgICAgICAgZGVmYXVsdFZhbHVlTGl0ZXJhbD0iaHVtYW4iLz4KKyAgPC9lQ2xhc3NpZmllcnM+Cis8L2Vjb3JlOkVQYWNrYWdlPgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zL21vZGVsL2xhYmVscy5lY29yZSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy9tb2RlbC9sYWJlbHMuZWNvcmUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzYxMWQ2MAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy9tb2RlbC9sYWJlbHMuZWNvcmUKQEAgLTAsMCArMSwxMjkgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+DQorPGVjb3JlOkVQYWNrYWdlIHhtaTp2ZXJzaW9uPSIyLjAiDQorICAgIHhtbG5zOnhtaT0iaHR0cDovL3d3dy5vbWcub3JnL1hNSSIgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSINCisgICAgeG1sbnM6ZWNvcmU9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDIvRWNvcmUiIG5hbWU9ImxhYmVscyINCisgICAgbnNVUkk9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy9sYWJlbHMuZWNvcmUiIG5zUHJlZml4PSJvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscyI+DQorICA8ZUNsYXNzaWZpZXJzIHhzaTp0eXBlPSJlY29yZTpFQ2xhc3MiIG5hbWU9IkFyZWFMYWJlbCIgZVN1cGVyVHlwZXM9Ii4uLy4uL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9tb2RlbC9ncmFwaC5lY29yZSMvL1N0YXRpY05vZGVMYWJlbCI+DQorICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFUmVmZXJlbmNlIiBuYW1lPSJjdXJyZW50QXJlYVZhbHVlIiBlVHlwZT0iIy8vQXJlYUxhYmVsVmFsdWUiDQorICAgICAgICBjaGFuZ2VhYmxlPSJmYWxzZSIgdm9sYXRpbGU9InRydWUiIHRyYW5zaWVudD0idHJ1ZSIgcmVzb2x2ZVByb3hpZXM9ImZhbHNlIi8+DQorICA8L2VDbGFzc2lmaWVycz4NCisgIDxlQ2xhc3NpZmllcnMgeHNpOnR5cGU9ImVjb3JlOkVDbGFzcyIgbmFtZT0iQXJlYUxhYmVsVmFsdWUiIGVTdXBlclR5cGVzPSIuLi8uLi9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvbW9kZWwvZ3JhcGguZWNvcmUjLy9MYWJlbFZhbHVlIj4NCisgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVBdHRyaWJ1dGUiIG5hbWU9ImFyZWEiIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9lbWYvMjAwMi9FY29yZSMvL0VEb3VibGUiLz4NCisgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVBdHRyaWJ1dGUiIG5hbWU9ImF2ZXJhZ2VFeHRlbnQiIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9lbWYvMjAwMi9FY29yZSMvL0VEb3VibGUiLz4NCisgIDwvZUNsYXNzaWZpZXJzPg0KKyAgPGVDbGFzc2lmaWVycyB4c2k6dHlwZT0iZWNvcmU6RUNsYXNzIiBuYW1lPSJDb21tb25Cb3JkZXJSZWxhdGlvbnNoaXBMYWJlbCIgZVN1cGVyVHlwZXM9IiMvL1BoeXNpY2FsUmVsYXRpb25zaGlwTGFiZWwiLz4NCisgIDxlQ2xhc3NpZmllcnMgeHNpOnR5cGU9ImVjb3JlOkVDbGFzcyIgbmFtZT0iQ29tbW9uQm9yZGVyUmVsYXRpb25zaGlwTGFiZWxWYWx1ZSINCisgICAgICBlU3VwZXJUeXBlcz0iIy8vUGh5c2ljYWxSZWxhdGlvbnNoaXBMYWJlbFZhbHVlIj4NCisgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVBdHRyaWJ1dGUiIG5hbWU9ImJvcmRlckxlbmd0aCIgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2VtZi8yMDAyL0Vjb3JlIy8vRURvdWJsZSIvPg0KKyAgPC9lQ2xhc3NpZmllcnM+DQorICA8ZUNsYXNzaWZpZXJzIHhzaTp0eXBlPSJlY29yZTpFQ2xhc3MiIG5hbWU9IlBoeXNpY2FsUmVsYXRpb25zaGlwTGFiZWwiIGFic3RyYWN0PSJ0cnVlIg0KKyAgICAgIGVTdXBlclR5cGVzPSIuLi8uLi9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvbW9kZWwvZ3JhcGguZWNvcmUjLy9TdGF0aWNFZGdlTGFiZWwiLz4NCisgIDxlQ2xhc3NpZmllcnMgeHNpOnR5cGU9ImVjb3JlOkVDbGFzcyIgbmFtZT0iUG9wdWxhdGlvbkxhYmVsIiBlU3VwZXJUeXBlcz0iLi4vLi4vb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL21vZGVsL2dyYXBoLmVjb3JlIy8vU3RhdGljTm9kZUxhYmVsIj4NCisgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVBdHRyaWJ1dGUiIG5hbWU9InBvcHVsYXRpb25JZGVudGlmaWVyIiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDIvRWNvcmUjLy9FU3RyaW5nIi8+DQorICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJuYW1lIiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDIvRWNvcmUjLy9FU3RyaW5nIi8+DQorICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFUmVmZXJlbmNlIiBuYW1lPSJjdXJyZW50UG9wdWxhdGlvblZhbHVlIg0KKyAgICAgICAgZVR5cGU9IiMvL1BvcHVsYXRpb25MYWJlbFZhbHVlIiBjaGFuZ2VhYmxlPSJmYWxzZSIgdm9sYXRpbGU9InRydWUiIHRyYW5zaWVudD0idHJ1ZSINCisgICAgICAgIHJlc29sdmVQcm94aWVzPSJmYWxzZSIvPg0KKyAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0icG9wdWxhdGVkQXJlYSIgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2VtZi8yMDAyL0Vjb3JlIy8vRURvdWJsZSINCisgICAgICAgIGRlZmF1bHRWYWx1ZUxpdGVyYWw9IjAiLz4NCisgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVBdHRyaWJ1dGUiIG5hbWU9InZhbGlkWWVhciIgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2VtZi8yMDAyL0Vjb3JlIy8vRUludCINCisgICAgICAgIGRlZmF1bHRWYWx1ZUxpdGVyYWw9IjIwMDYiLz4NCisgIDwvZUNsYXNzaWZpZXJzPg0KKyAgPGVDbGFzc2lmaWVycyB4c2k6dHlwZT0iZWNvcmU6RUNsYXNzIiBuYW1lPSJQb3B1bGF0aW9uTGFiZWxWYWx1ZSIgZVN1cGVyVHlwZXM9Ii4uLy4uL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9tb2RlbC9ncmFwaC5lY29yZSMvL0xhYmVsVmFsdWUiPg0KKyAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0iY291bnQiIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9lbWYvMjAwMi9FY29yZSMvL0VEb3VibGUiLz4NCisgIDwvZUNsYXNzaWZpZXJzPg0KKyAgPGVDbGFzc2lmaWVycyB4c2k6dHlwZT0iZWNvcmU6RUNsYXNzIiBuYW1lPSJSZWxhdGl2ZVBoeXNpY2FsUmVsYXRpb25zaGlwTGFiZWwiIGVTdXBlclR5cGVzPSIjLy9QaHlzaWNhbFJlbGF0aW9uc2hpcExhYmVsIj4NCisgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVSZWZlcmVuY2UiIG5hbWU9ImN1cnJlbnRSZWxhdGlvbnNoaXAiIGVUeXBlPSIjLy9SZWxhdGl2ZVBoeXNpY2FsUmVsYXRpb25zaGlwTGFiZWxWYWx1ZSINCisgICAgICAgIGNoYW5nZWFibGU9ImZhbHNlIiB2b2xhdGlsZT0idHJ1ZSIgdHJhbnNpZW50PSJ0cnVlIiByZXNvbHZlUHJveGllcz0iZmFsc2UiLz4NCisgIDwvZUNsYXNzaWZpZXJzPg0KKyAgPGVDbGFzc2lmaWVycyB4c2k6dHlwZT0iZWNvcmU6RUNsYXNzIiBuYW1lPSJSZWxhdGl2ZVBoeXNpY2FsUmVsYXRpb25zaGlwTGFiZWxWYWx1ZSINCisgICAgICBlU3VwZXJUeXBlcz0iLi4vLi4vb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL21vZGVsL2dyYXBoLmVjb3JlIy8vTGFiZWxWYWx1ZSI+DQorICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJhZGphY2VudCIgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2VtZi8yMDAyL0Vjb3JlIy8vRUJvb2xlYW4iLz4NCisgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVBdHRyaWJ1dGUiIG5hbWU9InJlbGF0aW9uc2hpcCIgZVR5cGU9IiMvL1JlbGF0aXZlUGh5c2ljYWxSZWxhdGlvbnNoaXAiLz4NCisgIDwvZUNsYXNzaWZpZXJzPg0KKyAgPGVDbGFzc2lmaWVycyB4c2k6dHlwZT0iZWNvcmU6RUNsYXNzIiBuYW1lPSJUcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbCIgZVN1cGVyVHlwZXM9Ii4uLy4uL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9tb2RlbC9ncmFwaC5lY29yZSMvL0R5bmFtaWNFZGdlTGFiZWwiPg0KKyAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0idHJhbnNwb3J0TW9kZSIgZVR5cGU9IiMvL1RyYW5zcG9ydE1vZGUiLz4NCisgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVBdHRyaWJ1dGUiIG5hbWU9InBvcHVsYXRpb25JZGVudGlmaWVyIiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDIvRWNvcmUjLy9FU3RyaW5nIi8+DQorICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJ0cmFuc3BvcnRJZGVudGlmaWVyIiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDIvRWNvcmUjLy9FU3RyaW5nIi8+DQorICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFUmVmZXJlbmNlIiBuYW1lPSJjdXJyZW50VHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxWYWx1ZSINCisgICAgICAgIGVUeXBlPSIjLy9UcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbFZhbHVlIiBjaGFuZ2VhYmxlPSJmYWxzZSIgdm9sYXRpbGU9InRydWUiDQorICAgICAgICB0cmFuc2llbnQ9InRydWUiIHJlc29sdmVQcm94aWVzPSJmYWxzZSIvPg0KKyAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0icmF0ZVRpbWVQZXJpb2QiIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9lbWYvMjAwMi9FY29yZSMvL0VMb25nIi8+DQorICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJkZXBhcnR1cmVDYXBhY2l0eSIgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2VtZi8yMDAyL0Vjb3JlIy8vRUludCINCisgICAgICAgIGNoYW5nZWFibGU9ImZhbHNlIiB2b2xhdGlsZT0idHJ1ZSIgdHJhbnNpZW50PSJ0cnVlIi8+DQorICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJtYXhpbXVtRGVwYXJ0dXJlQ2FwYWNpdHkiDQorICAgICAgICBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDIvRWNvcmUjLy9FSW50Ii8+DQorICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJjYXBhY2l0eSIgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2VtZi8yMDAyL0Vjb3JlIy8vRUludCINCisgICAgICAgIGNoYW5nZWFibGU9ImZhbHNlIiB2b2xhdGlsZT0idHJ1ZSIgdHJhbnNpZW50PSJ0cnVlIi8+DQorICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJtYXhpbXVtQ2FwYWNpdHkiIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9lbWYvMjAwMi9FY29yZSMvL0VJbnQiLz4NCisgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVBdHRyaWJ1dGUiIG5hbWU9InRyYW5zaXRUaW1lIiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDIvRWNvcmUjLy9FTG9uZyIvPg0KKyAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0ic3RhcnRVcERlbGF5IiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDIvRWNvcmUjLy9FTG9uZyIvPg0KKyAgPC9lQ2xhc3NpZmllcnM+DQorICA8ZUNsYXNzaWZpZXJzIHhzaTp0eXBlPSJlY29yZTpFQ2xhc3MiIG5hbWU9IlRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsVmFsdWUiIGVTdXBlclR5cGVzPSIuLi8uLi9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvbW9kZWwvZ3JhcGguZWNvcmUjLy9MYWJlbFZhbHVlIj4NCisgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVBdHRyaWJ1dGUiIG5hbWU9ImF2YWlsYWJsZURlcGFydHVyZUNhcGFjaXR5UHJvcG9ydGlvbiINCisgICAgICAgIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9lbWYvMjAwMi9FY29yZSMvL0VEb3VibGUiIGRlZmF1bHRWYWx1ZUxpdGVyYWw9IjEuMCIvPg0KKyAgPC9lQ2xhc3NpZmllcnM+DQorICA8ZUNsYXNzaWZpZXJzIHhzaTp0eXBlPSJlY29yZTpFQ2xhc3MiIG5hbWU9IlBoeXNpY2FsUmVsYXRpb25zaGlwTGFiZWxWYWx1ZSIgZVN1cGVyVHlwZXM9Ii4uLy4uL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9tb2RlbC9ncmFwaC5lY29yZSMvL0xhYmVsVmFsdWUiLz4NCisgIDxlQ2xhc3NpZmllcnMgeHNpOnR5cGU9ImVjb3JlOkVDbGFzcyIgbmFtZT0iUm9hZFRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsIiBlU3VwZXJUeXBlcz0iIy8vUGh5c2ljYWxSZWxhdGlvbnNoaXBMYWJlbCIvPg0KKyAgPGVDbGFzc2lmaWVycyB4c2k6dHlwZT0iZWNvcmU6RUNsYXNzIiBuYW1lPSJSb2FkVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxWYWx1ZSINCisgICAgICBlU3VwZXJUeXBlcz0iIy8vUGh5c2ljYWxSZWxhdGlvbnNoaXBMYWJlbFZhbHVlIj4NCisgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVBdHRyaWJ1dGUiIG5hbWU9InJvYWROYW1lIiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDIvRWNvcmUjLy9FU3RyaW5nIg0KKyAgICAgICAgZGVmYXVsdFZhbHVlTGl0ZXJhbD0icm9hZCIvPg0KKyAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0icm9hZENsYXNzIiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDIvRWNvcmUjLy9FU3RyaW5nIg0KKyAgICAgICAgZGVmYXVsdFZhbHVlTGl0ZXJhbD0icm91dGUiLz4NCisgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVBdHRyaWJ1dGUiIG5hbWU9Im51bWJlckNyb3NzaW5ncyIgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2VtZi8yMDAyL0Vjb3JlIy8vRUludCINCisgICAgICAgIGRlZmF1bHRWYWx1ZUxpdGVyYWw9IjEiLz4NCisgIDwvZUNsYXNzaWZpZXJzPg0KKyAgPGVDbGFzc2lmaWVycyB4c2k6dHlwZT0iZWNvcmU6RUVudW0iIG5hbWU9IlJlbGF0aXZlUGh5c2ljYWxSZWxhdGlvbnNoaXAiPg0KKyAgICA8ZUxpdGVyYWxzIG5hbWU9IlVuc3BlY2lmaWVkIi8+DQorICAgIDxlTGl0ZXJhbHMgbmFtZT0iQWJvdmUiIHZhbHVlPSIyIi8+DQorICAgIDxlTGl0ZXJhbHMgbmFtZT0iQmVsb3ciIHZhbHVlPSI0Ii8+DQorICAgIDxlTGl0ZXJhbHMgbmFtZT0iUmlnaHRPZiIgdmFsdWU9IjYiLz4NCisgICAgPGVMaXRlcmFscyBuYW1lPSJMZWZ0T2YiIHZhbHVlPSI4Ii8+DQorICAgIDxlTGl0ZXJhbHMgbmFtZT0iTm9ydGhPZiIgdmFsdWU9IjEwIi8+DQorICAgIDxlTGl0ZXJhbHMgbmFtZT0iU291dGhPZiIgdmFsdWU9IjEyIi8+DQorICAgIDxlTGl0ZXJhbHMgbmFtZT0iV2VzdE9mIiB2YWx1ZT0iMTQiLz4NCisgICAgPGVMaXRlcmFscyBuYW1lPSJFYXN0T2YiIHZhbHVlPSIxNiIvPg0KKyAgICA8ZUxpdGVyYWxzIG5hbWU9IkNvbnRhaW5zIiB2YWx1ZT0iMTgiLz4NCisgICAgPGVMaXRlcmFscyBuYW1lPSJDb250YWluZWRCeSIgdmFsdWU9IjIwIi8+DQorICAgIDxlTGl0ZXJhbHMgbmFtZT0iT3ZlcmxhcHMiIHZhbHVlPSIyMiIvPg0KKyAgICA8ZUxpdGVyYWxzIG5hbWU9Ik9yYml0cyIgdmFsdWU9IjI0Ii8+DQorICA8L2VDbGFzc2lmaWVycz4NCisgIDxlQ2xhc3NpZmllcnMgeHNpOnR5cGU9ImVjb3JlOkVFbnVtIiBuYW1lPSJUcmFuc3BvcnRNb2RlIj4NCisgICAgPGVMaXRlcmFscyBuYW1lPSJ1bnNwZWNpZmllZCIvPg0KKyAgICA8ZUxpdGVyYWxzIG5hbWU9ImFpciIgdmFsdWU9IjIiLz4NCisgICAgPGVMaXRlcmFscyBuYW1lPSJyb2FkIiB2YWx1ZT0iNCIvPg0KKyAgICA8ZUxpdGVyYWxzIG5hbWU9InJhaWwiIHZhbHVlPSI2Ii8+DQorICAgIDxlTGl0ZXJhbHMgbmFtZT0ibWFyaW5lIiB2YWx1ZT0iOCIvPg0KKyAgICA8ZUxpdGVyYWxzIG5hbWU9ImZvb3QiIHZhbHVlPSIxMCIvPg0KKyAgPC9lQ2xhc3NpZmllcnM+DQorICA8ZUNsYXNzaWZpZXJzIHhzaTp0eXBlPSJlY29yZTpFQ2xhc3MiIG5hbWU9IkVhcnRoU2NpZW5jZUxhYmVsIiBlU3VwZXJUeXBlcz0iLi4vLi4vb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL21vZGVsL2dyYXBoLmVjb3JlIy8vU3RhdGljTm9kZUxhYmVsIj4NCisgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVSZWZlcmVuY2UiIG5hbWU9ImN1cnJlbnRFYXJ0aFNjaWVuY2VWYWx1ZSINCisgICAgICAgIGVUeXBlPSIjLy9FYXJ0aFNjaWVuY2VMYWJlbFZhbHVlIiBjaGFuZ2VhYmxlPSJmYWxzZSIgdm9sYXRpbGU9InRydWUiIHRyYW5zaWVudD0idHJ1ZSINCisgICAgICAgIHJlc29sdmVQcm94aWVzPSJmYWxzZSIvPg0KKyAgPC9lQ2xhc3NpZmllcnM+DQorICA8ZUNsYXNzaWZpZXJzIHhzaTp0eXBlPSJlY29yZTpFQ2xhc3MiIG5hbWU9IkVhcnRoU2NpZW5jZUxhYmVsVmFsdWUiIGVTdXBlclR5cGVzPSIuLi8uLi9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvbW9kZWwvZ3JhcGguZWNvcmUjLy9MYWJlbFZhbHVlIj4NCisgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVBdHRyaWJ1dGUiIG5hbWU9ImRhdGFUeXBlIiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIHBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2UuZW1mLmVjb3JlL21vZGVsL0Vjb3JlLmVjb3JlIy8vRVN0cmluZyIvPg0KKyAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0idW5pdHMiIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgcGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5lbWYuZWNvcmUvbW9kZWwvRWNvcmUuZWNvcmUjLy9FU3RyaW5nIi8+DQorICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJtZWFuIiB1bmlxdWU9ImZhbHNlIiB1cHBlckJvdW5kPSItMSINCisgICAgICAgIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgcGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5lbWYuZWNvcmUvbW9kZWwvRWNvcmUuZWNvcmUjLy9FRG91YmxlIi8+DQorICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJzZCIgdW5pcXVlPSJmYWxzZSIgdXBwZXJCb3VuZD0iLTEiDQorICAgICAgICBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIHBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2UuZW1mLmVjb3JlL21vZGVsL0Vjb3JlLmVjb3JlIy8vRURvdWJsZSIvPg0KKyAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0ibWluIiB1bmlxdWU9ImZhbHNlIiB1cHBlckJvdW5kPSItMSINCisgICAgICAgIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgcGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5lbWYuZWNvcmUvbW9kZWwvRWNvcmUuZWNvcmUjLy9FRG91YmxlIi8+DQorICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJtYXgiIHVuaXF1ZT0iZmFsc2UiIHVwcGVyQm91bmQ9Ii0xIg0KKyAgICAgICAgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLmVtZi5lY29yZS9tb2RlbC9FY29yZS5lY29yZSMvL0VEb3VibGUiLz4NCisgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVBdHRyaWJ1dGUiIG5hbWU9Im1lZGlhbiIgdW5pcXVlPSJmYWxzZSINCisgICAgICAgIHVwcGVyQm91bmQ9Ii0xIiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIHBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2UuZW1mLmVjb3JlL21vZGVsL0Vjb3JlLmVjb3JlIy8vRURvdWJsZSIvPg0KKyAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0ic2tld25lc3MiIHVuaXF1ZT0iZmFsc2UiDQorICAgICAgICB1cHBlckJvdW5kPSItMSIgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLmVtZi5lY29yZS9tb2RlbC9FY29yZS5lY29yZSMvL0VEb3VibGUiLz4NCisgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVBdHRyaWJ1dGUiIG5hbWU9Imt1cnRvc2lzIiB1bmlxdWU9ImZhbHNlIg0KKyAgICAgICAgdXBwZXJCb3VuZD0iLTEiIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgcGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5lbWYuZWNvcmUvbW9kZWwvRWNvcmUuZWNvcmUjLy9FRG91YmxlIi8+DQorICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJybXMiIHVuaXF1ZT0iZmFsc2UiIHVwcGVyQm91bmQ9Ii0xIg0KKyAgICAgICAgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLmVtZi5lY29yZS9tb2RlbC9FY29yZS5lY29yZSMvL0VEb3VibGUiLz4NCisgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVBdHRyaWJ1dGUiIG5hbWU9InNhbXBsZXNpemUiIHVuaXF1ZT0iZmFsc2UiDQorICAgICAgICB1cHBlckJvdW5kPSItMSIgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLmVtZi5lY29yZS9tb2RlbC9FY29yZS5lY29yZSMvL0VEb3VibGUiLz4NCisgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVBdHRyaWJ1dGUiIG5hbWU9InJhbmdlIiB1bmlxdWU9ImZhbHNlIiB1cHBlckJvdW5kPSItMSINCisgICAgICAgIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgcGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5lbWYuZWNvcmUvbW9kZWwvRWNvcmUuZWNvcmUjLy9FRG91YmxlIi8+DQorICA8L2VDbGFzc2lmaWVycz4NCis8L2Vjb3JlOkVQYWNrYWdlPg0KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy9tb2RlbC9ub2Rlcy5lY29yZSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy9tb2RlbC9ub2Rlcy5lY29yZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMTg4ZTA4Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zL21vZGVsL25vZGVzLmVjb3JlCkBAIC0wLDAgKzEsMTAgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+DQorPGVjb3JlOkVQYWNrYWdlIHhtaTp2ZXJzaW9uPSIyLjAiDQorICAgIHhtbG5zOnhtaT0iaHR0cDovL3d3dy5vbWcub3JnL1hNSSIgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSINCisgICAgeG1sbnM6ZWNvcmU9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDIvRWNvcmUiIG5hbWU9Im5vZGVzIg0KKyAgICBuc1VSST0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL25vZGVzLmVjb3JlIiBuc1ByZWZpeD0ib3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5ub2RlcyI+DQorICA8ZUNsYXNzaWZpZXJzIHhzaTp0eXBlPSJlY29yZTpFQ2xhc3MiIG5hbWU9Ikdlb2dyYXBoaWNGZWF0dXJlIiBhYnN0cmFjdD0idHJ1ZSIgZVN1cGVyVHlwZXM9Ii4uLy4uL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9tb2RlbC9ncmFwaC5lY29yZSMvL05vZGUiLz4NCisgIDxlQ2xhc3NpZmllcnMgeHNpOnR5cGU9ImVjb3JlOkVDbGFzcyIgbmFtZT0iUmVnaW9uIiBlU3VwZXJUeXBlcz0iIy8vR2VvZ3JhcGhpY0ZlYXR1cmUiLz4NCisgIDxlQ2xhc3NpZmllcnMgeHNpOnR5cGU9ImVjb3JlOkVDbGFzcyIgbmFtZT0iTm9kZSIgaW5zdGFuY2VDbGFzc05hbWU9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5Ob2RlIg0KKyAgICAgIGFic3RyYWN0PSJ0cnVlIiBpbnRlcmZhY2U9InRydWUiLz4NCis8L2Vjb3JlOkVQYWNrYWdlPg0KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy9tb2RlbC90eXBlcy5lY29yZSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy9tb2RlbC90eXBlcy5lY29yZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jN2Q0NjFjCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zL21vZGVsL3R5cGVzLmVjb3JlCkBAIC0wLDAgKzEsMTAgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+DQorPGVjb3JlOkVQYWNrYWdlIHhtaTp2ZXJzaW9uPSIyLjAiDQorICAgIHhtbG5zOnhtaT0iaHR0cDovL3d3dy5vbWcub3JnL1hNSSIgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSINCisgICAgeG1sbnM6ZWNvcmU9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDIvRWNvcmUiIG5hbWU9InR5cGVzIg0KKyAgICBuc1VSST0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL3R5cGVzLmVjb3JlIiBuc1ByZWZpeD0ib3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy50eXBlcyI+DQorICA8ZUNsYXNzaWZpZXJzIHhzaTp0eXBlPSJlY29yZTpFQ2xhc3MiIG5hbWU9IkNhdGVnb3JpemVkVHlwZSIgYWJzdHJhY3Q9InRydWUiIGludGVyZmFjZT0idHJ1ZSIvPg0KKyAgPGVDbGFzc2lmaWVycyB4c2k6dHlwZT0iZWNvcmU6RUNsYXNzIiBuYW1lPSJSYXRlIiBhYnN0cmFjdD0idHJ1ZSI+DQorICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJyYXRlIiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDIvRWNvcmUjLy9FRG91YmxlIi8+DQorICA8L2VDbGFzc2lmaWVycz4NCis8L2Vjb3JlOkVQYWNrYWdlPg0KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy9ub3RpY2UuaHRtbCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy9ub3RpY2UuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNmFmOTY2Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zL25vdGljZS5odG1sCkBAIC0wLDAgKzEsNzkgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAvL0VOIj4KKzxodG1sPgorPGhlYWQ+Cis8bWV0YSBodHRwLWVxdWl2PUNvbnRlbnQtVHlwZSBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9aXNvLTg4NTktMSI+Cis8dGl0bGU+RWNsaXBzZS5vcmcgU29mdHdhcmUgVXNlciBBZ3JlZW1lbnQ8L3RpdGxlPgorPC9oZWFkPgorCis8Ym9keSBsYW5nPSJFTi1VUyIgbGluaz1ibHVlIHZsaW5rPXB1cnBsZT4KKzxoMj5FY2xpcHNlIEZvdW5kYXRpb24gU29mdHdhcmUgVXNlciBBZ3JlZW1lbnQ8L2gyPgorPHA+TWFyY2ggMTcsIDIwMDU8L3A+CisKKzxoMz5Vc2FnZSBPZiBDb250ZW50PC9oMz4KKworPHA+VEhFIEVDTElQU0UgRk9VTkRBVElPTiBNQUtFUyBBVkFJTEFCTEUgU09GVFdBUkUsIERPQ1VNRU5UQVRJT04sIElORk9STUFUSU9OIEFORC9PUiBPVEhFUiBNQVRFUklBTFMgRk9SIE9QRU4gU09VUkNFIFBST0pFQ1RTCisgICAoQ09MTEVDVElWRUxZICZxdW90O0NPTlRFTlQmcXVvdDspLiAgVVNFIE9GIFRIRSBDT05URU5UIElTIEdPVkVSTkVEIEJZIFRIRSBURVJNUyBBTkQgQ09ORElUSU9OUyBPRiBUSElTIEFHUkVFTUVOVCBBTkQvT1IgVEhFIFRFUk1TIEFORAorICAgQ09ORElUSU9OUyBPRiBMSUNFTlNFIEFHUkVFTUVOVFMgT1IgTk9USUNFUyBJTkRJQ0FURUQgT1IgUkVGRVJFTkNFRCBCRUxPVy4gIEJZIFVTSU5HIFRIRSBDT05URU5ULCBZT1UgQUdSRUUgVEhBVCBZT1VSIFVTRQorICAgT0YgVEhFIENPTlRFTlQgSVMgR09WRVJORUQgQlkgVEhJUyBBR1JFRU1FTlQgQU5EL09SIFRIRSBURVJNUyBBTkQgQ09ORElUSU9OUyBPRiBBTlkgQVBQTElDQUJMRSBMSUNFTlNFIEFHUkVFTUVOVFMgT1IKKyAgIE5PVElDRVMgSU5ESUNBVEVEIE9SIFJFRkVSRU5DRUQgQkVMT1cuICBJRiBZT1UgRE8gTk9UIEFHUkVFIFRPIFRIRSBURVJNUyBBTkQgQ09ORElUSU9OUyBPRiBUSElTIEFHUkVFTUVOVCBBTkQgVEhFIFRFUk1TIEFORAorICAgQ09ORElUSU9OUyBPRiBBTlkgQVBQTElDQUJMRSBMSUNFTlNFIEFHUkVFTUVOVFMgT1IgTk9USUNFUyBJTkRJQ0FURUQgT1IgUkVGRVJFTkNFRCBCRUxPVywgVEhFTiBZT1UgTUFZIE5PVCBVU0UgVEhFIENPTlRFTlQuPC9wPgorICAgCis8aDM+QXBwbGljYWJsZSBMaWNlbnNlczwvaDM+ICAgCisgICAKKzxwPlVubGVzcyBvdGhlcndpc2UgaW5kaWNhdGVkLCBhbGwgQ29udGVudCBtYWRlIGF2YWlsYWJsZSBieSB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uIGlzIHByb3ZpZGVkIHRvIHlvdSB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjAKKyAgICgmcXVvdDtFUEwmcXVvdDspLiAgQSBjb3B5IG9mIHRoZSBFUEwgaXMgcHJvdmlkZWQgd2l0aCB0aGlzIENvbnRlbnQgYW5kIGlzIGFsc28gYXZhaWxhYmxlIGF0IDxhIGhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sIj5odHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbDwvYT4uCisgICBGb3IgcHVycG9zZXMgb2YgdGhlIEVQTCwgJnF1b3Q7UHJvZ3JhbSZxdW90OyB3aWxsIG1lYW4gdGhlIENvbnRlbnQuPC9wPgorCis8cD5Db250ZW50IGluY2x1ZGVzLCBidXQgaXMgbm90IGxpbWl0ZWQgdG8sIHNvdXJjZSBjb2RlLCBvYmplY3QgY29kZSwgZG9jdW1lbnRhdGlvbiBhbmQgb3RoZXIgZmlsZXMgbWFpbnRhaW5lZCBpbiB0aGUgRWNsaXBzZS5vcmcgQ1ZTIHJlcG9zaXRvcnkgKCZxdW90O1JlcG9zaXRvcnkmcXVvdDspIGluIENWUworICAgbW9kdWxlcyAoJnF1b3Q7TW9kdWxlcyZxdW90OykgYW5kIG1hZGUgYXZhaWxhYmxlIGFzIGRvd25sb2FkYWJsZSBhcmNoaXZlcyAoJnF1b3Q7RG93bmxvYWRzJnF1b3Q7KS48L3A+CisgICAKKzx1bD4KKwk8bGk+Q29udGVudCBtYXkgYmUgc3RydWN0dXJlZCBhbmQgcGFja2FnZWQgaW50byBtb2R1bGVzIHRvIGZhY2lsaXRhdGUgZGVsaXZlcmluZywgZXh0ZW5kaW5nLCBhbmQgdXBncmFkaW5nIHRoZSBDb250ZW50LiAgVHlwaWNhbCBtb2R1bGVzIG1heSBpbmNsdWRlIHBsdWctaW5zICgmcXVvdDtQbHVnLWlucyZxdW90OyksIHBsdWctaW4gZnJhZ21lbnRzICgmcXVvdDtGcmFnbWVudHMmcXVvdDspLCBhbmQgZmVhdHVyZXMgKCZxdW90O0ZlYXR1cmVzJnF1b3Q7KS48L2xpPgorCTxsaT5FYWNoIFBsdWctaW4gb3IgRnJhZ21lbnQgbWF5IGJlIHBhY2thZ2VkIGFzIGEgc3ViLWRpcmVjdG9yeSBvciBKQVIgKEphdmEmdHJhZGU7IEFSY2hpdmUpIGluIGEgZGlyZWN0b3J5IG5hbWVkICZxdW90O3BsdWdpbnMmcXVvdDsuPC9saT4KKwk8bGk+QSBGZWF0dXJlIGlzIGEgYnVuZGxlIG9mIG9uZSBvciBtb3JlIFBsdWctaW5zIGFuZC9vciBGcmFnbWVudHMgYW5kIGFzc29jaWF0ZWQgbWF0ZXJpYWwuICBFYWNoIEZlYXR1cmUgbWF5IGJlIHBhY2thZ2VkIGFzIGEgc3ViLWRpcmVjdG9yeSBpbiBhIGRpcmVjdG9yeSBuYW1lZCAmcXVvdDtmZWF0dXJlcyZxdW90Oy4gIFdpdGhpbiBhIEZlYXR1cmUsIGZpbGVzIG5hbWVkICZxdW90O2ZlYXR1cmUueG1sJnF1b3Q7IG1heSBjb250YWluIGEgbGlzdCBvZiB0aGUgbmFtZXMgYW5kIHZlcnNpb24gbnVtYmVycyBvZiB0aGUgUGx1Zy1pbnMKKyAgICAgIGFuZC9vciBGcmFnbWVudHMgYXNzb2NpYXRlZCB3aXRoIHRoYXQgRmVhdHVyZS48L2xpPgorCTxsaT5GZWF0dXJlcyBtYXkgYWxzbyBpbmNsdWRlIG90aGVyIEZlYXR1cmVzICgmcXVvdDtJbmNsdWRlZCBGZWF0dXJlcyZxdW90OykuIFdpdGhpbiBhIEZlYXR1cmUsIGZpbGVzIG5hbWVkICZxdW90O2ZlYXR1cmUueG1sJnF1b3Q7IG1heSBjb250YWluIGEgbGlzdCBvZiB0aGUgbmFtZXMgYW5kIHZlcnNpb24gbnVtYmVycyBvZiBJbmNsdWRlZCBGZWF0dXJlcy48L2xpPgorPC91bD4gICAKKyAKKzxwPlRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBnb3Zlcm5pbmcgUGx1Zy1pbnMgYW5kIEZyYWdtZW50cyBzaG91bGQgYmUgY29udGFpbmVkIGluIGZpbGVzIG5hbWVkICZxdW90O2Fib3V0Lmh0bWwmcXVvdDsgKCZxdW90O0Fib3V0cyZxdW90OykuIFRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBnb3Zlcm5pbmcgRmVhdHVyZXMgYW5kCitJbmNsdWRlZCBGZWF0dXJlcyBzaG91bGQgYmUgY29udGFpbmVkIGluIGZpbGVzIG5hbWVkICZxdW90O2xpY2Vuc2UuaHRtbCZxdW90OyAoJnF1b3Q7RmVhdHVyZSBMaWNlbnNlcyZxdW90OykuICBBYm91dHMgYW5kIEZlYXR1cmUgTGljZW5zZXMgbWF5IGJlIGxvY2F0ZWQgaW4gYW55IGRpcmVjdG9yeSBvZiBhIERvd25sb2FkIG9yIE1vZHVsZQoraW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG8gdGhlIGZvbGxvd2luZyBsb2NhdGlvbnM6PC9wPgorCis8dWw+CisJPGxpPlRoZSB0b3AtbGV2ZWwgKHJvb3QpIGRpcmVjdG9yeTwvbGk+CisJPGxpPlBsdWctaW4gYW5kIEZyYWdtZW50IGRpcmVjdG9yaWVzPC9saT4KKwk8bGk+SW5zaWRlIFBsdWctaW5zIGFuZCBGcmFnbWVudHMgcGFja2FnZWQgYXMgSkFSczwvbGk+CisJPGxpPlN1Yi1kaXJlY3RvcmllcyBvZiB0aGUgZGlyZWN0b3J5IG5hbWVkICZxdW90O3NyYyZxdW90OyBvZiBjZXJ0YWluIFBsdWctaW5zPC9saT4KKwk8bGk+RmVhdHVyZSBkaXJlY3RvcmllczwvbGk+Cis8L3VsPgorCQkKKzxwPk5vdGU6IGlmIGEgRmVhdHVyZSBtYWRlIGF2YWlsYWJsZSBieSB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uIGlzIGluc3RhbGxlZCB1c2luZyB0aGUgRWNsaXBzZSBVcGRhdGUgTWFuYWdlciwgeW91IG11c3QgYWdyZWUgdG8gYSBsaWNlbnNlICgmcXVvdDtGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlJnF1b3Q7KSBkdXJpbmcgdGhlCitpbnN0YWxsYXRpb24gcHJvY2Vzcy4gIElmIHRoZSBGZWF0dXJlIGNvbnRhaW5zIEluY2x1ZGVkIEZlYXR1cmVzLCB0aGUgRmVhdHVyZSBVcGRhdGUgTGljZW5zZSBzaG91bGQgZWl0aGVyIHByb3ZpZGUgeW91IHdpdGggdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIGdvdmVybmluZyB0aGUgSW5jbHVkZWQgRmVhdHVyZXMgb3IKK2luZm9ybSB5b3Ugd2hlcmUgeW91IGNhbiBsb2NhdGUgdGhlbS4gIEZlYXR1cmUgVXBkYXRlIExpY2Vuc2VzIG1heSBiZSBmb3VuZCBpbiB0aGUgJnF1b3Q7bGljZW5zZSZxdW90OyBwcm9wZXJ0eSBvZiBmaWxlcyBuYW1lZCAmcXVvdDtmZWF0dXJlLnByb3BlcnRpZXMmcXVvdDsgZm91bmQgd2l0aGluIGEgRmVhdHVyZS4KK1N1Y2ggQWJvdXRzLCBGZWF0dXJlIExpY2Vuc2VzLCBhbmQgRmVhdHVyZSBVcGRhdGUgTGljZW5zZXMgY29udGFpbiB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgKG9yIHJlZmVyZW5jZXMgdG8gc3VjaCB0ZXJtcyBhbmQgY29uZGl0aW9ucykgdGhhdCBnb3Zlcm4geW91ciB1c2Ugb2YgdGhlIGFzc29jaWF0ZWQgQ29udGVudCBpbgordGhhdCBkaXJlY3RvcnkuPC9wPgorCis8cD5USEUgQUJPVVRTLCBGRUFUVVJFIExJQ0VOU0VTLCBBTkQgRkVBVFVSRSBVUERBVEUgTElDRU5TRVMgTUFZIFJFRkVSIFRPIFRIRSBFUEwgT1IgT1RIRVIgTElDRU5TRSBBR1JFRU1FTlRTLCBOT1RJQ0VTIE9SIFRFUk1TIEFORCBDT05ESVRJT05TLiAgU09NRSBPRiBUSEVTRQorT1RIRVIgTElDRU5TRSBBR1JFRU1FTlRTIE1BWSBJTkNMVURFIChCVVQgQVJFIE5PVCBMSU1JVEVEIFRPKTo8L3A+CisKKzx1bD4KKwk8bGk+Q29tbW9uIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4wIChhdmFpbGFibGUgYXQgPGEgaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9jcGwtdjEwLmh0bWwiPmh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvY3BsLXYxMC5odG1sPC9hPik8L2xpPgorCTxsaT5BcGFjaGUgU29mdHdhcmUgTGljZW5zZSAxLjEgKGF2YWlsYWJsZSBhdCA8YSBocmVmPSJodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRSI+aHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0U8L2E+KTwvbGk+CisJPGxpPkFwYWNoZSBTb2Z0d2FyZSBMaWNlbnNlIDIuMCAoYXZhaWxhYmxlIGF0IDxhIGhyZWY9Imh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMCI+aHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wPC9hPik8L2xpPgorCTxsaT5JQk0gUHVibGljIExpY2Vuc2UgMS4wIChhdmFpbGFibGUgYXQgPGEgaHJlZj0iaHR0cDovL29zcy5zb2Z0d2FyZS5pYm0uY29tL2RldmVsb3BlcndvcmtzL29wZW5zb3VyY2UvbGljZW5zZTEwLmh0bWwiPmh0dHA6Ly9vc3Muc29mdHdhcmUuaWJtLmNvbS9kZXZlbG9wZXJ3b3Jrcy9vcGVuc291cmNlL2xpY2Vuc2UxMC5odG1sPC9hPik8L2xpPgkKKwk8bGk+TWV0cm8gTGluayBQdWJsaWMgTGljZW5zZSAxLjAwIChhdmFpbGFibGUgYXQgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuZ3JvdXAub3JnL29wZW5tb3RpZi9zdXBwb3J0ZXJzL21ldHJvbGluay9saWNlbnNlLmh0bWwiPmh0dHA6Ly93d3cub3Blbmdyb3VwLm9yZy9vcGVubW90aWYvc3VwcG9ydGVycy9tZXRyb2xpbmsvbGljZW5zZS5odG1sPC9hPik8L2xpPgorCTxsaT5Nb3ppbGxhIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4xIChhdmFpbGFibGUgYXQgPGEgaHJlZj0iaHR0cDovL3d3dy5tb3ppbGxhLm9yZy9NUEwvTVBMLTEuMS5odG1sIj5odHRwOi8vd3d3Lm1vemlsbGEub3JnL01QTC9NUEwtMS4xLmh0bWw8L2E+KTwvbGk+Cis8L3VsPgorCis8cD5JVCBJUyBZT1VSIE9CTElHQVRJT04gVE8gUkVBRCBBTkQgQUNDRVBUIEFMTCBTVUNIIFRFUk1TIEFORCBDT05ESVRJT05TIFBSSU9SIFRPIFVTRSBPRiBUSEUgQ09OVEVOVC4gIElmIG5vIEFib3V0LCBGZWF0dXJlIExpY2Vuc2UsIG9yIEZlYXR1cmUgVXBkYXRlIExpY2Vuc2UgaXMgcHJvdmlkZWQsIHBsZWFzZQorY29udGFjdCB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uIHRvIGRldGVybWluZSB3aGF0IHRlcm1zIGFuZCBjb25kaXRpb25zIGdvdmVybiB0aGF0IHBhcnRpY3VsYXIgQ29udGVudC48L3A+CisKKzxoMz5DcnlwdG9ncmFwaHk8L2gzPgorCis8cD5Db250ZW50IG1heSBjb250YWluIGVuY3J5cHRpb24gc29mdHdhcmUuIFRoZSBjb3VudHJ5IGluIHdoaWNoIHlvdSBhcmUgY3VycmVudGx5IG1heSBoYXZlIHJlc3RyaWN0aW9ucyBvbiB0aGUgaW1wb3J0LCBwb3NzZXNzaW9uLCBhbmQgdXNlLCBhbmQvb3IgcmUtZXhwb3J0IHRvCisgICBhbm90aGVyIGNvdW50cnksIG9mIGVuY3J5cHRpb24gc29mdHdhcmUuIEJFRk9SRSB1c2luZyBhbnkgZW5jcnlwdGlvbiBzb2Z0d2FyZSwgcGxlYXNlIGNoZWNrIHRoZSBjb3VudHJ5J3MgbGF3cywgcmVndWxhdGlvbnMgYW5kIHBvbGljaWVzIGNvbmNlcm5pbmcgdGhlIGltcG9ydCwKKyAgIHBvc3Nlc3Npb24sIG9yIHVzZSwgYW5kIHJlLWV4cG9ydCBvZiBlbmNyeXB0aW9uIHNvZnR3YXJlLCB0byBzZWUgaWYgdGhpcyBpcyBwZXJtaXR0ZWQuPC9wPgorICAgCis8c21hbGw+SmF2YSBhbmQgYWxsIEphdmEtYmFzZWQgdHJhZGVtYXJrcyBhcmUgdHJhZGVtYXJrcyBvZiBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuIGluIHRoZSBVbml0ZWQgU3RhdGVzLCBvdGhlciBjb3VudHJpZXMsIG9yIGJvdGguPC9zbWFsbD4gICAKKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy9wbHVnaW4ucHJvcGVydGllcyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy9wbHVnaW4ucHJvcGVydGllcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44OGRhZjlkCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zL3BsdWdpbi5wcm9wZXJ0aWVzCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy9wbHVnaW4ueG1sIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zL3BsdWdpbi54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGEyY2JhZQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy9wbHVnaW4ueG1sCkBAIC0wLDAgKzEsMTAzIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPD9lY2xpcHNlIHZlcnNpb249IjMuMCI/PgorCis8IS0tCisgPGNvcHlyaWdodD4KKyA8L2NvcHlyaWdodD4KKworICRJZCQKKy0tPgorCis8cGx1Z2luPgorCisgICA8ZXh0ZW5zaW9uIHBvaW50PSJvcmcuZWNsaXBzZS5lbWYuZWRpdC5pdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yaWVzIj4KKyAgICAgIDxmYWN0b3J5CisgICAgICAgICAgICB1cmk9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy9lZGdlcy5lY29yZSIKKyAgICAgICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmVkZ2VzLnByb3ZpZGVyLkVkZ2VzSXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkiCisgICAgICAgICAgICBzdXBwb3J0ZWRUeXBlcz0KKyAgICAgICAgICAgICAgIm9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklFZGl0aW5nRG9tYWluSXRlbVByb3ZpZGVyCisgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JU3RydWN0dXJlZEl0ZW1Db250ZW50UHJvdmlkZXIKKyAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklUcmVlSXRlbUNvbnRlbnRQcm92aWRlcgorICAgICAgICAgICAgICAgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1MYWJlbFByb3ZpZGVyCisgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbVByb3BlcnR5U291cmNlIi8+CisgICA8L2V4dGVuc2lvbj4KKworICAgPGV4dGVuc2lvbiBwb2ludD0ib3JnLmVjbGlwc2UuZW1mLmVkaXQuaXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcmllcyI+CisgICAgICA8ZmFjdG9yeQorICAgICAgICAgICAgdXJpPSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvbGFiZWxzLmVjb3JlIgorICAgICAgICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLnByb3ZpZGVyLkxhYmVsc0l0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5IgorICAgICAgICAgICAgc3VwcG9ydGVkVHlwZXM9CisgICAgICAgICAgICAgICJvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JRWRpdGluZ0RvbWFpbkl0ZW1Qcm92aWRlcgorICAgICAgICAgICAgICAgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVN0cnVjdHVyZWRJdGVtQ29udGVudFByb3ZpZGVyCisgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JVHJlZUl0ZW1Db250ZW50UHJvdmlkZXIKKyAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtTGFiZWxQcm92aWRlcgorICAgICAgICAgICAgICAgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1Qcm9wZXJ0eVNvdXJjZSIvPgorICAgPC9leHRlbnNpb24+CisKKyAgIDxleHRlbnNpb24gcG9pbnQ9Im9yZy5lY2xpcHNlLmVtZi5lZGl0Lml0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3JpZXMiPgorICAgICAgPGZhY3RvcnkKKyAgICAgICAgICAgIHVyaT0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL25vZGVzLmVjb3JlIgorICAgICAgICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubm9kZXMucHJvdmlkZXIuTm9kZXNJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSIKKyAgICAgICAgICAgIHN1cHBvcnRlZFR5cGVzPQorICAgICAgICAgICAgICAib3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUVkaXRpbmdEb21haW5JdGVtUHJvdmlkZXIKKyAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklTdHJ1Y3R1cmVkSXRlbUNvbnRlbnRQcm92aWRlcgorICAgICAgICAgICAgICAgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVRyZWVJdGVtQ29udGVudFByb3ZpZGVyCisgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbUxhYmVsUHJvdmlkZXIKKyAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtUHJvcGVydHlTb3VyY2UiLz4KKyAgIDwvZXh0ZW5zaW9uPgorCisgICA8ZXh0ZW5zaW9uIHBvaW50PSJvcmcuZWNsaXBzZS5lbWYuZWNvcmUuZ2VuZXJhdGVkX3BhY2thZ2UiPgorICAgICAgPHBhY2thZ2UKKyAgICAgICAgICAgIHVyaT0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL2VkZ2VzLmVjb3JlIgorICAgICAgICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuZWRnZXMuRWRnZXNQYWNrYWdlIgorICAgICAgICAgICAgZ2VuTW9kZWw9Im1vZGVsL2RlZmluaXRpb25zLmdlbm1vZGVsIi8+CisgICA8L2V4dGVuc2lvbj4KKworICAgPGV4dGVuc2lvbiBwb2ludD0ib3JnLmVjbGlwc2UuZW1mLmVjb3JlLmdlbmVyYXRlZF9wYWNrYWdlIj4KKyAgICAgIDxwYWNrYWdlCisgICAgICAgICAgICB1cmk9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy9sYWJlbHMuZWNvcmUiCisgICAgICAgICAgICBjbGFzcz0ib3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuTGFiZWxzUGFja2FnZSIKKyAgICAgICAgICAgIGdlbk1vZGVsPSJtb2RlbC9kZWZpbml0aW9ucy5nZW5tb2RlbCIvPgorICAgPC9leHRlbnNpb24+CisKKyAgIDxleHRlbnNpb24gcG9pbnQ9Im9yZy5lY2xpcHNlLmVtZi5lY29yZS5nZW5lcmF0ZWRfcGFja2FnZSI+CisgICAgICA8cGFja2FnZQorICAgICAgICAgICAgdXJpPSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvbm9kZXMuZWNvcmUiCisgICAgICAgICAgICBjbGFzcz0ib3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5ub2Rlcy5Ob2Rlc1BhY2thZ2UiCisgICAgICAgICAgICBnZW5Nb2RlbD0ibW9kZWwvZGVmaW5pdGlvbnMuZ2VubW9kZWwiLz4KKyAgIDwvZXh0ZW5zaW9uPgorCisgICA8ZXh0ZW5zaW9uIHBvaW50PSJvcmcuZWNsaXBzZS51aS5lZGl0b3JzIj4KKyAgICAgIDxlZGl0b3IKKyAgICAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmVkZ2VzLnByZXNlbnRhdGlvbi5FZGdlc0VkaXRvcklEIgorICAgICAgICAgICAgbmFtZT0iJV9VSV9FZGdlc0VkaXRvcl9sYWJlbCIKKyAgICAgICAgICAgIGljb249Imljb25zL2Z1bGwvb2JqMTYvRWRnZXNNb2RlbEZpbGUuZ2lmIgorICAgICAgICAgICAgZXh0ZW5zaW9ucz0iZWRnZXMiCisgICAgICAgICAgICBjbGFzcz0ib3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5lZGdlcy5wcmVzZW50YXRpb24uRWRnZXNFZGl0b3IiCisgICAgICAgICAgICBjb250cmlidXRvckNsYXNzPSJvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmVkZ2VzLnByZXNlbnRhdGlvbi5FZGdlc0FjdGlvbkJhckNvbnRyaWJ1dG9yIj4KKyAgICAgIDwvZWRpdG9yPgorICAgPC9leHRlbnNpb24+CisKKyAgIDxleHRlbnNpb24gcG9pbnQ9Im9yZy5lY2xpcHNlLnVpLmVkaXRvcnMiPgorICAgICAgPGVkaXRvcgorICAgICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLnByZXNlbnRhdGlvbi5MYWJlbHNFZGl0b3JJRCIKKyAgICAgICAgICAgIG5hbWU9IiVfVUlfTGFiZWxzRWRpdG9yX2xhYmVsIgorICAgICAgICAgICAgaWNvbj0iaWNvbnMvZnVsbC9vYmoxNi9MYWJlbHNNb2RlbEZpbGUuZ2lmIgorICAgICAgICAgICAgZXh0ZW5zaW9ucz0ibGFiZWxzIgorICAgICAgICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLnByZXNlbnRhdGlvbi5MYWJlbHNFZGl0b3IiCisgICAgICAgICAgICBjb250cmlidXRvckNsYXNzPSJvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5wcmVzZW50YXRpb24uTGFiZWxzQWN0aW9uQmFyQ29udHJpYnV0b3IiPgorICAgICAgPC9lZGl0b3I+CisgICA8L2V4dGVuc2lvbj4KKworICAgPGV4dGVuc2lvbiBwb2ludD0ib3JnLmVjbGlwc2UudWkuZWRpdG9ycyI+CisgICAgICA8ZWRpdG9yCisgICAgICAgICAgICBpZD0ib3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5ub2Rlcy5wcmVzZW50YXRpb24uTm9kZXNFZGl0b3JJRCIKKyAgICAgICAgICAgIG5hbWU9IiVfVUlfTm9kZXNFZGl0b3JfbGFiZWwiCisgICAgICAgICAgICBpY29uPSJpY29ucy9mdWxsL29iajE2L05vZGVzTW9kZWxGaWxlLmdpZiIKKyAgICAgICAgICAgIGV4dGVuc2lvbnM9Im5vZGVzIgorICAgICAgICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubm9kZXMucHJlc2VudGF0aW9uLk5vZGVzRWRpdG9yIgorICAgICAgICAgICAgY29udHJpYnV0b3JDbGFzcz0ib3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5ub2Rlcy5wcmVzZW50YXRpb24uTm9kZXNBY3Rpb25CYXJDb250cmlidXRvciI+CisgICAgICA8L2VkaXRvcj4KKyAgIDwvZXh0ZW5zaW9uPgorCis8L3BsdWdpbj4KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy9wbHVnaW5fZGUucHJvcGVydGllcyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy9wbHVnaW5fZGUucHJvcGVydGllcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MDNmYmM1Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zL3BsdWdpbl9kZS5wcm9wZXJ0aWVzCkBAIC0wLDAgKzEsMjQ5IEBACisjLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyMgKiBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisjICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworIyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorIyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisjICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyMgKgorIyAqIENvbnRyaWJ1dG9yczoKKyMgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisjICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyMgVG8gY29kZSBkZXZlbG9wZXI6CisjICAgRG8gTk9UIGNoYW5nZSB0aGUgcHJvcGVydGllcyBiZXR3ZWVuIHRoaXMgbGluZSBhbmQgdGhlCisjICAgIiUlJSBFTkQgT0YgVFJBTlNMQVRFRCBQUk9QRVJUSUVTICUlJSIgbGluZS4KKyMgICBNYWtlIGEgbmV3IHByb3BlcnR5IG5hbWUsIGFwcGVuZCB0byB0aGUgZW5kIG9mIHRoZSBmaWxlIGFuZCBjaGFuZ2UKKyMgICB0aGUgY29kZSB0byB1c2UgdGhlIG5ldyBwcm9wZXJ0eS4KKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorIyAlJSUgRU5EIE9GIFRSQU5TTEFURUQgUFJPUEVSVElFUyAlJSUKKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworcGx1Z2luTmFtZT1TVEVNIERlZmluaXRpb25lbi1Nb2RlbGwKK3Byb3ZpZGVyTmFtZT1FY2xpcHNlLm9yZworCisjIFByZWZlcmVuY2UgcGFnZQorX1VJX01hcERNUFBhZ2U9S2FydGVuZGF0ZW4gTWFuYWdlbWVudAorCisKK19VSV9DcmVhdGVDaGlsZF90ZXh0PXswfQorX1VJX0NyZWF0ZUNoaWxkX3RleHQyPXsxfSB7MH0KK19VSV9DcmVhdGVDaGlsZF90ZXh0Mz17MX0KK19VSV9DcmVhdGVDaGlsZF90b29sdGlwPU5ldWVzIHswfSB1bnRlciB7MX0gRmVhdHVyZSBlcnN0ZWxsZW4KK19VSV9DcmVhdGVDaGlsZF9kZXNjcmlwdGlvbj1OZXVlcyBLaW5kIHZvbSBUeXAgezB9IGZcdTAwZmNyIGRhcyB7MX0gTWVya21hbCBkZXIgYXVzZ2V3XHUwMGU0aGx0ZW4gezJ9IGVyc3RlbGxlbgorX1VJX0NyZWF0ZVNpYmxpbmdfZGVzY3JpcHRpb249TmV1ZXMgR2VzY2h3aXN0ZXJ0ZWlsIHZvbSBUeXAgezB9IGZcdTAwZmNyIGRlbiBhdXNnZXdcdTAwZTRobHRlbiB7Mn0gdW50ZXIgZGVtIHsxfSBNZXJrbWFsIGRlcyBFbHRlcm50ZWlsIGVyc3RlbGxlbgorCitfVUlfUHJvcGVydHlEZXNjcmlwdG9yX2Rlc2NyaXB0aW9uPXswfSB2b24gezF9CisKK19VSV9BcmVhTGFiZWxfdHlwZT1GbFx1MDBlNGNoZW5sYWJlbAorX1VJX0FyZWFMYWJlbFZhbHVlX3R5cGU9V2VydCBmXHUwMGZjciBGbFx1MDBlNGNoZW5sYWJlbAorX1VJX0NvbW1vbkJvcmRlclJlbGF0aW9uc2hpcExhYmVsX3R5cGU9Q29tbW9uIEJvcmRlciBSZWxhdGlvbnNoaXAgTGFiZWwKK19VSV9Db21tb25Cb3JkZXJSZWxhdGlvbnNoaXBMYWJlbFZhbHVlX3R5cGU9Q29tbW9uIEJvcmRlciBSZWxhdGlvbnNoaXAgTGFiZWwgVmFsdWUKK19VSV9QaHlzaWNhbFJlbGF0aW9uc2hpcExhYmVsX3R5cGU9UGh5c2lrYWxpc2NoZXMgQmV6aWVodW5nc2xhYmVsCitfVUlfUG9wdWxhdGlvbkxhYmVsX3R5cGU9QmV2XHUwMGY2bGtlcnVuZ3NsYWJlbAorX1VJX1BvcHVsYXRpb25MYWJlbFZhbHVlX3R5cGU9QmV2XHUwMGY2bGtlcnVuZ3NsYWJlbHdlcnQKK19VSV9SZWxhdGl2ZVBoeXNpY2FsUmVsYXRpb25zaGlwTGFiZWxfdHlwZT1SZWxhdGl2ZXMgcGh5c2lzY2hlcyBCZXppZWh1bmdzbGFiZWwKK19VSV9SZWxhdGl2ZVBoeXNpY2FsUmVsYXRpb25zaGlwTGFiZWxWYWx1ZV90eXBlPVJlbGF0aXZlciBwaHlzaXNjaGVyIEJlemllaHVuZ3NsYWJlbHdlcnQKK19VSV9UcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbF90eXBlPVZlcmtlaHJzLUJlemllaHVuZ3MtTGFiZWwKK19VSV9UcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbFZhbHVlX3R5cGU9VmVya2VocnMtQmV6aWVodW5ncy1MYWJlbC1XZXJ0CitfVUlfR2VvZ3JhcGhpY0ZlYXR1cmVfdHlwZT1HZW9ncmFwaGlzY2hlcyBNZXJrbWFsCitfVUlfUmVnaW9uX3R5cGU9UmVnaW9uCitfVUlfTm9kZV90eXBlPUtub3RlbgorX1VJX1Vua25vd25fdHlwZT1PYmpla3QKKworX1VJX1Vua25vd25fZGF0YXR5cGU9V2VydAorCitfVUlfQXJlYUxhYmVsX2N1cnJlbnRBcmVhVmFsdWVfZmVhdHVyZT1EZXJ6ZWl0aWdlciBHZWJpZXRzd2VydAorX1VJX0FyZWFMYWJlbFZhbHVlX2FyZWFfZmVhdHVyZT1GbFx1MDBlNGNoZQorX1VJX0NvbW1vbkJvcmRlclJlbGF0aW9uc2hpcExhYmVsVmFsdWVfYm9yZGVyTGVuZ3RoX2ZlYXR1cmU9R3JlbnpsXHUwMGU0bmdlCitfVUlfUG9wdWxhdGlvbkxhYmVsX3BvcHVsYXRpb25JZGVudGlmaWVyX2ZlYXR1cmU9QmV2XHUwMGY2bGtlcnVuZ3NiZXplaWNobmVyCitfVUlfUG9wdWxhdGlvbkxhYmVsX25hbWVfZmVhdHVyZT1OYW1lCitfVUlfUG9wdWxhdGlvbkxhYmVsX2N1cnJlbnRQb3B1bGF0aW9uVmFsdWVfZmVhdHVyZT1EZXJ6ZWl0aWdlciBCZXZcdTAwZjZsa2VydW5nc3dlcnQKK19VSV9Qb3B1bGF0aW9uTGFiZWxfcG9wdWxhdGVkQXJlYV9mZWF0dXJlPUJld29obnRlcyBHZWJpZXQKK19VSV9Qb3B1bGF0aW9uTGFiZWxWYWx1ZV9jb3VudF9mZWF0dXJlPUFuemFobAorX1VJX1JlbGF0aXZlUGh5c2ljYWxSZWxhdGlvbnNoaXBMYWJlbF9jdXJyZW50UmVsYXRpb25zaGlwX2ZlYXR1cmU9RGVyemVpdGlnZXIgQmV6aWVodW5nCitfVUlfUmVsYXRpdmVQaHlzaWNhbFJlbGF0aW9uc2hpcExhYmVsVmFsdWVfYWRqYWNlbnRfZmVhdHVyZT1BbmdyZW56ZW5kCitfVUlfUmVsYXRpdmVQaHlzaWNhbFJlbGF0aW9uc2hpcExhYmVsVmFsdWVfcmVsYXRpb25zaGlwX2ZlYXR1cmU9QmV6aWVodW5nCitfVUlfVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxfdHJhbnNwb3J0TW9kZV9mZWF0dXJlPVZlcmtlaHJzLU1vZHVzCitfVUlfVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxfcG9wdWxhdGlvbklkZW50aWZpZXJfZmVhdHVyZT1CZXZcdTAwZjZsa2VydW5nc2JlemVpY2huZXIKK19VSV9UcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbF90cmFuc3BvcnRJZGVudGlmaWVyX2ZlYXR1cmU9VmVya2VocnMtSWRlbnRpZml6aWVyZXIKK19VSV9UcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbF9jdXJyZW50VHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxWYWx1ZV9mZWF0dXJlPURlcnplaXRpZ2VyIFRyYW5zcG9ydGJlemllaHVuZy1MYWJlbC1XZXJ0CitfVUlfVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxWYWx1ZV9wb3B1bGF0aW9uQ291bnRfZmVhdHVyZT1CZXZcdTAwZjZsa2VydW5nc2FuemFobAorX1VJX1RyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsVmFsdWVfdGltZVBlcmlvZF9mZWF0dXJlPVplaXRyYXVtCitfVUlfVW5rbm93bl9mZWF0dXJlPU5pY2h0IHNwZXppZml6aWVydAorCitfVUlfUmVsYXRpdmVQaHlzaWNhbFJlbGF0aW9uc2hpcF9VbnNwZWNpZmllZF9saXRlcmFsPU5pY2h0IHNwZXppZml6aWVydAorX1VJX1JlbGF0aXZlUGh5c2ljYWxSZWxhdGlvbnNoaXBfQWJvdmVfbGl0ZXJhbD1PYmVuCitfVUlfUmVsYXRpdmVQaHlzaWNhbFJlbGF0aW9uc2hpcF9CZWxvd19saXRlcmFsPVVudGVuCitfVUlfUmVsYXRpdmVQaHlzaWNhbFJlbGF0aW9uc2hpcF9SaWdodE9mX2xpdGVyYWw9UmVjaHRzVm9uCitfVUlfUmVsYXRpdmVQaHlzaWNhbFJlbGF0aW9uc2hpcF9MZWZ0T2ZfbGl0ZXJhbD1MaW5rc1ZvbgorX1VJX1JlbGF0aXZlUGh5c2ljYWxSZWxhdGlvbnNoaXBfTm9ydGhPZl9saXRlcmFsPU5cdTAwZjZyZGxpY2hWb24KK19VSV9SZWxhdGl2ZVBoeXNpY2FsUmVsYXRpb25zaGlwX1NvdXRoT2ZfbGl0ZXJhbD1TXHUwMGZjZGxpY2hWb24KK19VSV9SZWxhdGl2ZVBoeXNpY2FsUmVsYXRpb25zaGlwX1dlc3RPZl9saXRlcmFsPVdlc3RsaWNoVm9uCitfVUlfUmVsYXRpdmVQaHlzaWNhbFJlbGF0aW9uc2hpcF9FYXN0T2ZfbGl0ZXJhbD1cdTAwZDZzdGxpY2hWb24KK19VSV9SZWxhdGl2ZVBoeXNpY2FsUmVsYXRpb25zaGlwX0NvbnRhaW5zX2xpdGVyYWw9RW50aFx1MDBlNGx0CitfVUlfUmVsYXRpdmVQaHlzaWNhbFJlbGF0aW9uc2hpcF9Db250YWluZWRCeV9saXRlcmFsPUNvbnRhaW5lZEJ5CitfVUlfUmVsYXRpdmVQaHlzaWNhbFJlbGF0aW9uc2hpcF9PdmVybGFwc19saXRlcmFsPVx1MDBkY2JlcmxhcHB1bmdlbgorX1VJX1JlbGF0aXZlUGh5c2ljYWxSZWxhdGlvbnNoaXBfT3JiaXRzX2xpdGVyYWw9T3JiaXRzCitfVUlfVHJhbnNwb3J0TW9kZV91bnNwZWNpZmllZF9saXRlcmFsPW5pY2h0IHNwZXppZml6aWVydAorX1VJX1RyYW5zcG9ydE1vZGVfYWlyX2xpdGVyYWw9THVmdAorX1VJX1RyYW5zcG9ydE1vZGVfcm9hZF9saXRlcmFsPVN0cmFcdTAwZGZlCitfVUlfVHJhbnNwb3J0TW9kZV9yYWlsX2xpdGVyYWw9U2NoaWVuZW4KK19VSV9UcmFuc3BvcnRNb2RlX21hcmluZV9saXRlcmFsPU1hcmluZQorX1VJX1RyYW5zcG9ydE1vZGVfZm9vdF9saXRlcmFsPUZ1XHUwMGRmCitfVUlfTGFiZWxzRWRpdG9yX21lbnU9JkxhYmVscyBFZGl0b3IKK19VSV9Ob2Rlc0VkaXRvcl9tZW51PSZOb2RlcyBFZGl0b3IKKworX1VJX0NyZWF0ZUNoaWxkX21lbnVfaXRlbT0mTmV3IENoaWxkCitfVUlfQ3JlYXRlU2libGluZ19tZW51X2l0ZW09TiZldWVzIEdlc2Nod2lzdGVydGVpbAorCitfVUlfU2hvd1Byb3BlcnRpZXNWaWV3X21lbnVfaXRlbT1TaG93ICYgUHJvcGVydGllcyBWaWV3CitfVUlfUmVmcmVzaFZpZXdlcl9tZW51X2l0ZW09JlJlZnJlc2gKKworX1VJX1NlbGVjdGlvblBhZ2VfbGFiZWw9QXVzd2FobAorX1VJX1BhcmVudFBhZ2VfbGFiZWw9RWx0ZXJudGVpbAorX1VJX0xpc3RQYWdlX2xhYmVsPUxpc3RlCitfVUlfVHJlZVBhZ2VfbGFiZWw9QmF1bQorX1VJX1RhYmxlUGFnZV9sYWJlbD1UYWJlbGxlCitfVUlfVHJlZVdpdGhDb2x1bW5zUGFnZV9sYWJlbD1CYXVtIG1pdCBTcGFsdGVuCitfVUlfT2JqZWN0Q29sdW1uX2xhYmVsPU9iamVrdAorX1VJX1NlbGZDb2x1bW5fbGFiZWw9U2VsYnN0CisKK19VSV9Ob09iamVjdFNlbGVjdGVkPU5pY2h0cyBhdXNnZXdcdTAwZTRobHQKK19VSV9TaW5nbGVPYmplY3RTZWxlY3RlZD1BdXNnZXdcdTAwZTRobHRlcyBPYmpla3Q6IHswfQorX1VJX011bHRpT2JqZWN0U2VsZWN0ZWQ9QXVzZ2V3XHUwMGU0aGx0ZSB7MH0gT2JqZWt0ZQorCitfVUlfT3BlbkVkaXRvckVycm9yX2xhYmVsPUVkaXRvciBcdTAwZjZmZm5lbgorCitfVUlfV2l6YXJkX2NhdGVnb3J5PUJlaXNwaWVsIEVNRiBNb2RlbGwgRXJzdGVsbHVuZ3Nhc3Npc3RlbnQKKworX1VJX0NyZWF0ZU1vZGVsRXJyb3JfbWVzc2FnZT1BdWZnZXRyZXRlbmUgUHJvYmxlbWUgaW4gZGVyIERhdGVpICJ7MH0iCisKK19VSV9MYWJlbHNNb2RlbFdpemFyZF9sYWJlbD1MYWJlbHMtTW9kZWxsCitfVUlfTGFiZWxzTW9kZWxXaXphcmRfZGVzY3JpcHRpb249TmV1ZXMgTGFiZWxzLU1vZGVsbCBlcnN0ZWxsZW4KKworX1VJX0xhYmVsc0VkaXRvcl9sYWJlbD1MYWJlbHMtTW9kZWxsZWRpdG9yCisKK19VSV9MYWJlbHNFZGl0b3JGaWxlbmFtZURlZmF1bHRCYXNlPU1laW4KK19VSV9MYWJlbHNFZGl0b3JGaWxlbmFtZUV4dGVuc2lvbj1MYWJlbAorCitfVUlfTm9kZXNNb2RlbFdpemFyZF9sYWJlbD1Lbm90ZW5tb2RlbGwKK19VSV9Ob2Rlc01vZGVsV2l6YXJkX2Rlc2NyaXB0aW9uPU5ldWVzIEtub3Rlbi1Nb2RlbGwgZXJzdGVsbGVuCisKK19VSV9Ob2Rlc0VkaXRvcl9sYWJlbD1Lbm90ZW5tb2RlbGwtRWRpdG9yCisKK19VSV9Ob2Rlc0VkaXRvckZpbGVuYW1lRGVmYXVsdEJhc2U9TWVpbgorX1VJX05vZGVzRWRpdG9yRmlsZW5hbWVFeHRlbnNpb249S25vdGVuCisKK19VSV9XaXphcmRfbGFiZWw9TmV1CisKK19XQVJOX0ZpbGVuYW1lRXh0ZW5zaW9uPURlciBEYXRlaW5hbWUgbXVzcyBhdWYgIi57MH0iIGVuZGVuCisKK19VSV9Nb2RlbE9iamVjdD1Nb2RlbGwgT2JqZWt0CitfVUlfWE1MRW5jb2Rpbmc9WE1MIEtvZGllcnVuZworX1VJX1hNTEVuY29kaW5nQ2hvaWNlcz1VVEYtOCBBU0NJSSBVVEYtMTYgVVRGLTE2QkUgVVRGLTE2TEUgSVNPLTg4NTktMQorX1VJX1dpemFyZF9pbml0aWFsX29iamVjdF9kZXNjcmlwdGlvbj1adSBlcnpldWdlbmRlcyBNb2RlbGxvYmpla3Qgd1x1MDBlNGhsZW4KKworX1VJX0ZpbGVDb25mbGljdF9sYWJlbD1EYXRlaWtvbmZsaWt0CitfV0FSTl9GaWxlQ29uZmxpY3Q9RXMgZ2lidCBuaWNodCBnZXNwZWljaGVydGUgXHUwMGM0bmRlcnVuZ2VuLCBkaWUgS29uZmxpa3RlIG1pdCBcdTAwYzRuZGVydW5nZW4gYXVcdTAwZGZlcmhhbGIgZGVzIEVkaXRvcnMgZXJ6ZXVnZW4uIE1cdTAwZjZjaHRlbiBTaWUgZGllIFx1MDBjNG5kZXJ1bmdlbiBpbSBFZGl0b3IgdmVyd2VyZmVuPworCitfVUlfVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxfdGltZVBlcmlvZF9mZWF0dXJlPVplaXRyYXVtCitfVUlfUGh5c2ljYWxSZWxhdGlvbnNoaXBMYWJlbFZhbHVlX3R5cGU9UGh5c2lrYWxpc2NoZXMgQmV6aWVodW5nc2xhYmVsd2VydAorX1VJX1RyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsX3JhdGVUaW1lUGVyaW9kX2ZlYXR1cmU9WmVpdGRhdWVyIFJhdGUKK19VSV9UcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbF9kZXBhcnR1cmVDYXBhY2l0eV9mZWF0dXJlPUthcGF6aXRcdTAwZTR0IGZcdTAwZmNyIEF1c3JlaXNlbmRlCitfVUlfVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxfbWF4aW11bURlcGFydHVyZUNhcGFjaXR5X2ZlYXR1cmU9TWF4aW1hbGUgS2FwYXppdFx1MDBlNHQgZlx1MDBmY3IgQWJyZWlzZW4KK19VSV9UcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbF9jYXBhY2l0eV9mZWF0dXJlPUthcGF6aXRcdTAwZTR0CitfVUlfVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxfbWF4aW11bUNhcGFjaXR5X2ZlYXR1cmU9TWF4aW1hbGUgS2FwYXppdFx1MDBlNHQKK19VSV9UcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbF90cmFuc2l0VGltZV9mZWF0dXJlPUR1cmNocmVpc2UtWmVpdAorX1VJX1RyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsX3N0YXJ0VXBEZWxheV9mZWF0dXJlPVN0YXJ0LVZlcnpcdTAwZjZnZXJ1bmcKK19VSV9UcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbFZhbHVlX2F2YWlsYWJsZURlcGFydHVyZUNhcGFjaXR5UHJvcG9ydGlvbl9mZWF0dXJlPUVyaFx1MDBlNGx0bGljaCBEZXBhcnR1cmUgQ2FwYWNpdHkgQW50ZWlsCitfVUlfTWlncmF0aW9uRWRnZV90eXBlPU1pZ3JhdGlvbnNrYW50ZQorX1VJX01pZ3JhdGlvbkVkZ2VMYWJlbF90eXBlPU1pZ3JhdGlvbnNrYW50ZW5sYWJlbAorX1VJX01pZ3JhdGlvbkVkZ2VMYWJlbFZhbHVlX3R5cGU9TWlncmF0aW9uc2thbnRlbmxhYmVsLVdlcnQKK19VSV9NaXhpbmdFZGdlX3R5cGU9RHVyY2htaXNjaHVuZ3NrYW50ZQorX1VJX01peGluZ0VkZ2VMYWJlbF90eXBlPUR1cmNobWlzY2h1bmdza2FudGVubGFiZWwKK19VSV9NaXhpbmdFZGdlTGFiZWxWYWx1ZV90eXBlPUR1cmNobWlzY2h1bmdza2FudGVubGFiZWwtV2VydAorX1VJX01pZ3JhdGlvbkVkZ2VMYWJlbFZhbHVlX21pZ3JhdGlvblJhdGVfZmVhdHVyZT1NaWdyYXRpb25zcmF0ZQorX1VJX01peGluZ0VkZ2VMYWJlbFZhbHVlX21peGluZ1JhdGVfZmVhdHVyZT1EdXJjaG1pc2NodW5nc3JhdGUKK19VSV9Sb2FkVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxfdHlwZT1TdHJhXHUwMGRmZW52ZXJrZWhyLUJlemllaHVuZ3NsYWJlbAorX1VJX1JvYWRUcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbFZhbHVlX3R5cGU9U3RyYVx1MDBkZmVudmVya2Voci1CZXppZWh1bmdzbGFiZWx3ZXJ0CitfVUlfUm9hZFRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsVmFsdWVfcm9hZE5hbWVfZmVhdHVyZT1TdHJhXHUwMGRmZW5uYW1lCitfVUlfUm9hZFRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsVmFsdWVfcm9hZENsYXNzX2ZlYXR1cmU9U3RyYVx1MDBkZmVua2xhc3NlCitfVUlfUm9hZFRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsVmFsdWVfbnVtYmVyQ3Jvc3NpbmdzX2ZlYXR1cmU9QW56YWhsIEtyZXV6dW5nZW4KK19VSV9FZGdlc0VkaXRvcl9tZW51PSZFZGdlcyBFZGl0b3IKK19VSV9FZGdlc01vZGVsV2l6YXJkX2xhYmVsPUthbnRlbm1vZGVsbAorX1VJX0VkZ2VzTW9kZWxXaXphcmRfZGVzY3JpcHRpb249TmV1ZXMgS2FudGVuLU1vZGVsbCBlcnN0ZWxsZW4KKworX1VJX0VkZ2VzRWRpdG9yX2xhYmVsPUthbnRlbm1vZGVsbC1FZGl0b3IKKworX1VJX0VkZ2VzRWRpdG9yRmlsZW5hbWVEZWZhdWx0QmFzZT1NZWluCitfVUlfRWRnZXNFZGl0b3JGaWxlbmFtZUV4dGVuc2lvbj1LYW50ZW4KKworX1VJX0VkZ2VzRWRpdG9yRmlsZW5hbWVFeHRlbnNpb25zPUthbnRlbgorCitfVUlfTGFiZWxzRWRpdG9yRmlsZW5hbWVFeHRlbnNpb25zPUxhYmVsCisKK19VSV9Ob2Rlc0VkaXRvckZpbGVuYW1lRXh0ZW5zaW9ucz1Lbm90ZW4KKworX1dBUk5fRmlsZW5hbWVFeHRlbnNpb25zPURlciBEYXRlaW5hbWUgbXVzcyBlaW5lIGRlciBmb2xnZW5kZW4gRW5kdW5nZW4gaGFiZW46IHswfQorCitfVUlfQ2F0ZWdvcml6ZWRUeXBlX3R5cGU9S2F0ZWdvcmlzaWVydGVyIFR5cAorX1VJX1JhdGVfdHlwZT1SYXRlCitfVUlfUmF0ZV9yYXRlX2ZlYXR1cmU9UmF0ZQorX1VJX1R5cGVzRWRpdG9yX21lbnU9JlR5cGVzIEVkaXRvcgorCitfVUlfVHlwZXNNb2RlbFdpemFyZF9sYWJlbD1UeXBlbi1Nb2RlbGwKK19VSV9UeXBlc01vZGVsV2l6YXJkX2Rlc2NyaXB0aW9uPU5ldWVzIFR5cGVuLU1vZGVsbCBlcnN0ZWxsZW4KKworX1VJX1R5cGVzRWRpdG9yX2xhYmVsPVR5cGVuLU1vZGVsbC1FZGl0b3IKKworX1VJX1R5cGVzRWRpdG9yRmlsZW5hbWVEZWZhdWx0QmFzZT1NZWluCitfVUlfVHlwZXNFZGl0b3JGaWxlbmFtZUV4dGVuc2lvbnM9VHlwZW4KKworX1VJX1BvcHVsYXRpb25MYWJlbF92YWxpZFllYXJfZmVhdHVyZT1HXHUwMGZjbHRpZ2VzIEphaHIKK19VSV9Qb3B1bGF0aW9uTGFiZWxfbmV4dFBvcHVsYXRpb25MYWJlbFZhbHVlX2ZlYXR1cmU9Tlx1MDBlNGNoc3RlciBCZXZcdTAwZjZsa2VydW5nc2xhYmVsd2VydAorX1VJX1BvcHVsYXRpb25MYWJlbF9kZWx0YVBvcHVsYXRpb25MYWJlbFZhbHVlX2ZlYXR1cmU9RGVsdGEtQmV2XHUwMGY2bGtlcnVuZ3NsYWJlbC1XZXJ0CitfVUlfUG9wdWxhdGlvbkxhYmVsX2N1cnJlbnRUZW1wUG9wdWxhdGlvbkxhYmVsVmFsdWVfZmVhdHVyZT1EZXJ6ZWl0aWdlciBUZW1wLUJldlx1MDBmNmxrZXJ1bmdzbGFiZWwtV2VydAorX1VJX1BvcHVsYXRpb25MYWJlbF9vcmlnaW5hbFBvcHVsYXRpb25MYWJlbFZhbHVlX2ZlYXR1cmU9VXJzcHJcdTAwZmNuZ2xpY2hlciBCZXZcdTAwZjZsa2VydW5ncy1MYWJlbHdlcnQKK19VSV9Qb3B1bGF0aW9uTGFiZWxfeVNjYWxlX2ZlYXR1cmU9WS1Ta2FsaWVydW5nCitfVUlfUG9wdWxhdGlvbkxhYmVsX2N1cnJlbnRZUG9wdWxhdGlvbkxhYmVsVmFsdWVfZmVhdHVyZT1EZXJ6ZWl0aWdlciBZLUJldlx1MDBmNmxrZXJ1bmctTGFiZWwtV2VydAorX1VJX0FyZWFMYWJlbFZhbHVlX2F2ZXJhZ2VFeHRlbnRfZmVhdHVyZT1EdXJjaHNjaG5pdHRsaWNoZXMgQXVzbWFcdTAwZGYKK19VSV9Qb3B1bGF0aW9uTW9kZWxMYWJlbF90eXBlPUJldlx1MDBmNmxrZXJ1bmdzbW9kZWxsLUxhYmVsCitfVUlfU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxMYWJlbF90eXBlPVN0YW5kYXJkLUJldlx1MDBmNmxrZXJ1bmdzbW9kZWxsLUxhYmVsCitfVUlfUG9wdWxhdGlvbk1vZGVsTGFiZWxWYWx1ZV90eXBlPUJldlx1MDBmNmxrZXJ1bmdzbW9kZWxsLUxhYmVsd2VydAorX1VJX1N0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWxWYWx1ZV90eXBlPVN0YW5kYXJkLUJldlx1MDBmNmxrZXJ1bmdzbW9kZWxsLUxhYmVsLVdlcnQKK19VSV9JbnRlZ3JhdGlvbkxhYmVsX3R5cGU9SW50ZWdyYXRpb25zbGFiZWwKK19VSV9JbnRlZ3JhdGlvbkxhYmVsVmFsdWVfdHlwZT1JbnRlZ3JhdGlvbnNsYWJlbHdlcnQKK19VSV9JbnRlZ3JhdGlvbkRlY29yYXRvcl90eXBlPUludGVncmF0aW9uc2Rla29yYXRvcgorX1VJX1BvcHVsYXRpb25Nb2RlbExhYmVsX3BvcHVsYXRpb25MYWJlbF9mZWF0dXJlPUJldlx1MDBmNmxrZXJ1bmdzbGFiZWwKK19VSV9Qb3B1bGF0aW9uTW9kZWxMYWJlbF9wb3B1bGF0aW9uSWRlbnRpZmllcl9mZWF0dXJlPUJldlx1MDBmNmxrZXJ1bmdzYmV6ZWljaG5lcgorX1VJX1N0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWxfZGVsdGFWYWx1ZV9mZWF0dXJlPURlbHRhLVdlcnQKK19VSV9TdGFuZGFyZFBvcHVsYXRpb25Nb2RlbExhYmVsX3Byb2JlVmFsdWVfZmVhdHVyZT1Qcm9iZS1XZXJ0CitfVUlfU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxMYWJlbF90ZW1wVmFsdWVfZmVhdHVyZT1UZW1wLVdlcnQKK19VSV9TdGFuZGFyZFBvcHVsYXRpb25Nb2RlbExhYmVsX29yaWdpbmFsVmFsdWVfZmVhdHVyZT1VcnNwclx1MDBmY25nbGljaGVyIFdlcnQKK19VSV9TdGFuZGFyZFBvcHVsYXRpb25Nb2RlbExhYmVsX2Vycm9yU2NhbGVfZmVhdHVyZT1Hclx1MDBmNlx1MDBkZmVub3JkbnVuZyBkZXMgRmVobGVycworX1VJX1N0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWxWYWx1ZV9jb3VudF9mZWF0dXJlPUFuemFobAorX1VJX1N0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWxWYWx1ZV9pbmNpZGVuY2VfZmVhdHVyZT1JbnppZGVuegorX1VJX1N0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWxWYWx1ZV9iaXJ0aHNfZmVhdHVyZT1HZWJ1cnRlbgorX1VJX1N0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWxWYWx1ZV9kZWF0aHNfZmVhdHVyZT1Ub2Rlc2ZcdTAwZTRsbGUKK19VSV9TdGFuZGFyZFBvcHVsYXRpb25Nb2RlbExhYmVsVmFsdWVfZGVuc2l0eV9mZWF0dXJlPURpY2h0ZQorX1VJX1BvcHVsYXRpb25FZGdlX3R5cGU9QmV2XHUwMGY2bGtlcnVuZ3NrYW50ZQorX1VJX1BvcHVsYXRpb25FZGdlX3BvcHVsYXRpb25JZGVudGlmaWVyX2ZlYXR1cmU9QmV2XHUwMGY2bGtlcnVuZ3NiZXplaWNobmVyCitfVUlfRWFydGhTY2llbmNlTGFiZWxfdHlwZT1HZW93aXNzZW5zY2hhZnQtTGFiZWwKK19VSV9FYXJ0aFNjaWVuY2VMYWJlbFZhbHVlX3R5cGU9R2Vvd2lzc2Vuc2NoYWZ0LUxhYmVsLVdlcnQKK19VSV9FYXJ0aFNjaWVuY2VMYWJlbF9jdXJyZW50RWFydGhTY2llbmNlVmFsdWVfZmVhdHVyZT1EZXJ6ZWl0aWdlciBHZW93aXNzZW5zY2hhZnRzd2VydAorX1VJX0VhcnRoU2NpZW5jZUxhYmVsVmFsdWVfZGF0YV9mZWF0dXJlPURhdGVuCitfVUlfRWFydGhTY2llbmNlTGFiZWxWYWx1ZV9kYXRhVHlwZV9mZWF0dXJlPURhdGVudHlwCitfVUlfRWFydGhTY2llbmNlTGFiZWxWYWx1ZV91bml0c19mZWF0dXJlPUVpbmhlaXRlbgorX1VJX0VhcnRoU2NpZW5jZUxhYmVsVmFsdWVfbWVhbl9mZWF0dXJlPU1pdHRlbHdlcnQKK19VSV9FYXJ0aFNjaWVuY2VMYWJlbFZhbHVlX3NkX2ZlYXR1cmU9U2QKK19VSV9FYXJ0aFNjaWVuY2VMYWJlbFZhbHVlX21pbl9mZWF0dXJlPU1pbgorX1VJX0VhcnRoU2NpZW5jZUxhYmVsVmFsdWVfbWF4X2ZlYXR1cmU9TWF4CitfVUlfRWFydGhTY2llbmNlTGFiZWxWYWx1ZV9tZWRpYW5fZmVhdHVyZT1NZWRpYW4KK19VSV9FYXJ0aFNjaWVuY2VMYWJlbFZhbHVlX3NrZXduZXNzX2ZlYXR1cmU9U2NoaWVmZQorX1VJX0VhcnRoU2NpZW5jZUxhYmVsVmFsdWVfa3VydG9zaXNfZmVhdHVyZT1XXHUwMGY2bGJ1bmcKK19VSV9FYXJ0aFNjaWVuY2VMYWJlbFZhbHVlX3Jtc19mZWF0dXJlPVJtcworX1VJX0VhcnRoU2NpZW5jZUxhYmVsVmFsdWVfc2FtcGxlc2l6ZV9mZWF0dXJlPVByb2JlbmdyXHUwMGY2XHUwMGRmZQorX1VJX0VhcnRoU2NpZW5jZUxhYmVsVmFsdWVfcmFuZ2VfZmVhdHVyZT1SZWljaHdlaXRlCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvcGx1Z2luX2tyLnByb3BlcnRpZXMgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvcGx1Z2luX2tyLnByb3BlcnRpZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTkyMWI1NQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy9wbHVnaW5fa3IucHJvcGVydGllcwpAQCAtMCwwICsxLDI0OSBAQAorIy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjICogQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorIyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyMgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyMgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorIyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisjICoKKyMgKiBDb250cmlidXRvcnM6CisjICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorIyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisjIFRvIGNvZGUgZGV2ZWxvcGVyOgorIyAgIERvIE5PVCBjaGFuZ2UgdGhlIHByb3BlcnRpZXMgYmV0d2VlbiB0aGlzIGxpbmUgYW5kIHRoZQorIyAgICIlJSUgRU5EIE9GIFRSQU5TTEFURUQgUFJPUEVSVElFUyAlJSUiIGxpbmUuCisjICAgTWFrZSBhIG5ldyBwcm9wZXJ0eSBuYW1lLCBhcHBlbmQgdG8gdGhlIGVuZCBvZiB0aGUgZmlsZSBhbmQgY2hhbmdlCisjICAgdGhlIGNvZGUgdG8gdXNlIHRoZSBuZXcgcHJvcGVydHkuCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyMgJSUlIEVORCBPRiBUUkFOU0xBVEVEIFBST1BFUlRJRVMgJSUlCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK3BsdWdpbk5hbWU9U1RFTSBcdWM4MTVcdWM3NTggXHViYWE4XHViMzc4Citwcm92aWRlck5hbWU9RWNsaXBzZS5vcmcKKworIyBQcmVmZXJlbmNlIHBhZ2UKK19VSV9NYXBETVBQYWdlPVx1YzljMFx1YjNjNCBcdWIzNzBcdWM3NzRcdWQxMzAgXHVhZDAwXHViOWFjCisKKworX1VJX0NyZWF0ZUNoaWxkX3RleHQ9ezB9CitfVUlfQ3JlYXRlQ2hpbGRfdGV4dDI9ezF9IHswfQorX1VJX0NyZWF0ZUNoaWxkX3RleHQzPXsxfQorX1VJX0NyZWF0ZUNoaWxkX3Rvb2x0aXA9ezF9IFx1YWUzMFx1YjJhNSBcdWQ1NThcdWM1ZDAgXHVjMGM4IHswfSBcdWI5Y2NcdWI0ZTRcdWFlMzAKK19VSV9DcmVhdGVDaGlsZF9kZXNjcmlwdGlvbj1cdWMxMjBcdWQwZGRcdWQ1NWMgezJ9XHVjNzU4IHsxfSBcdWFlMzBcdWIyYTVcdWM1ZDAgXHViMzAwXHVkNTVjIFx1ZDYxNVx1YzJkZCB7MH1cdWM3NTggXHVjMGM4XHViODVjXHVjNmI0IENoaWxkXHViOTdjIFx1YjljY1x1YjRlZFx1YjJjOFx1YjJlNC4KK19VSV9DcmVhdGVTaWJsaW5nX2Rlc2NyaXB0aW9uPVx1YmQ4MFx1YmFhOFx1Yzc1OCBcdWMxMjBcdWQwZGRcdWI0MWMgezJ9XHVjNWQwXHVjMTFjIHsxfSBcdWFlMzBcdWIyYTVcdWM1ZDAgXHViMzAwXHVkNTVjIFx1ZDYxNVx1YzJkZCB7MH1cdWM3NTggXHVjMGM4XHViODVjXHVjNmI0IFx1ZDYxNVx1YzgxY1x1Yjk3YyBcdWI5Y2NcdWI0ZWRcdWIyYzhcdWIyZTQuCisKK19VSV9Qcm9wZXJ0eURlc2NyaXB0b3JfZGVzY3JpcHRpb249ezF9IFx1YzkxMSB7MH0KKworX1VJX0FyZWFMYWJlbF90eXBlPVx1YzljMFx1YzVlZCBcdWI3N2NcdWJjYTgKK19VSV9BcmVhTGFiZWxWYWx1ZV90eXBlPVx1YzljMFx1YzVlZCBcdWI3N2NcdWJjYTggXHVhYzEyCitfVUlfQ29tbW9uQm9yZGVyUmVsYXRpb25zaGlwTGFiZWxfdHlwZT1cdWM3N2NcdWJjMTggXHVkMTRjXHViNDUwXHViOWFjIFx1YWQwMFx1YWNjNCBcdWI3N2NcdWJjYTgKK19VSV9Db21tb25Cb3JkZXJSZWxhdGlvbnNoaXBMYWJlbFZhbHVlX3R5cGU9XHVjNzdjXHViYzE4IFx1ZDE0Y1x1YjQ1MFx1YjlhYyBcdWFkMDBcdWFjYzQgXHViNzdjXHViY2E4IFx1YWMxMgorX1VJX1BoeXNpY2FsUmVsYXRpb25zaGlwTGFiZWxfdHlwZT1cdWJiM2NcdWI5YWNcdWM4MDEgXHVhZDAwXHVhY2M0IFx1Yjc3Y1x1YmNhOAorX1VJX1BvcHVsYXRpb25MYWJlbF90eXBlPVx1Yzc3OFx1YWQ2YyBcdWI3N2NcdWJjYTgKK19VSV9Qb3B1bGF0aW9uTGFiZWxWYWx1ZV90eXBlPVx1Yzc3OFx1YWQ2YyBcdWI3N2NcdWJjYTggXHVhYzEyCitfVUlfUmVsYXRpdmVQaHlzaWNhbFJlbGF0aW9uc2hpcExhYmVsX3R5cGU9XHVjMGMxXHViMzAwIFx1YmIzY1x1YjlhY1x1YzgwMSBcdWFkMDBcdWFjYzQgXHViNzdjXHViY2E4CitfVUlfUmVsYXRpdmVQaHlzaWNhbFJlbGF0aW9uc2hpcExhYmVsVmFsdWVfdHlwZT1cdWMwYzFcdWIzMDAgXHViYjNjXHViOWFjXHVjODAxIFx1YWQwMFx1YWNjNCBcdWI3N2NcdWJjYTggXHVhYzEyCitfVUlfVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxfdHlwZT1cdWM4MDRcdWMxYTEgXHVhZDAwXHVhY2M0IFx1Yjc3Y1x1YmNhOAorX1VJX1RyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsVmFsdWVfdHlwZT1cdWM4MDRcdWMxYTEgXHVhZDAwXHVhY2M0IFx1Yjc3Y1x1YmNhOCBcdWFjMTIKK19VSV9HZW9ncmFwaGljRmVhdHVyZV90eXBlPVx1YzljMFx1YjlhY1x1YzgwMSBcdWQyYjlcdWM5ZDUKK19VSV9SZWdpb25fdHlwZT1cdWM5YzBcdWJjMjkKK19VSV9Ob2RlX3R5cGU9XHViMTc4XHViNGRjCitfVUlfVW5rbm93bl90eXBlPVx1YWMxY1x1Y2NiNAorCitfVUlfVW5rbm93bl9kYXRhdHlwZT1cdWFjMTIKKworX1VJX0FyZWFMYWJlbF9jdXJyZW50QXJlYVZhbHVlX2ZlYXR1cmU9XHVkNjA0XHVjN2FjIFx1YzljMFx1YzVlZCBcdWFjMTIKK19VSV9BcmVhTGFiZWxWYWx1ZV9hcmVhX2ZlYXR1cmU9XHVjOWMwXHVjNWVkCitfVUlfQ29tbW9uQm9yZGVyUmVsYXRpb25zaGlwTGFiZWxWYWx1ZV9ib3JkZXJMZW5ndGhfZmVhdHVyZT1cdWQxNGNcdWI0NTBcdWI5YWMgXHVhZTM4XHVjNzc0CitfVUlfUG9wdWxhdGlvbkxhYmVsX3BvcHVsYXRpb25JZGVudGlmaWVyX2ZlYXR1cmU9XHVjNzc4XHVhZDZjIFx1YzJkZFx1YmNjNFx1Yzc5MAorX1VJX1BvcHVsYXRpb25MYWJlbF9uYW1lX2ZlYXR1cmU9XHVjNzc0XHViOTg0CitfVUlfUG9wdWxhdGlvbkxhYmVsX2N1cnJlbnRQb3B1bGF0aW9uVmFsdWVfZmVhdHVyZT1cdWQ2MDRcdWM3YWMgXHVjNzc4XHVhZDZjIFx1YWMxMgorX1VJX1BvcHVsYXRpb25MYWJlbF9wb3B1bGF0ZWRBcmVhX2ZlYXR1cmU9XHVjNzc4XHVhZDZjIFx1YmMwMFx1YzlkMSBcdWM5YzBcdWM1ZWQKK19VSV9Qb3B1bGF0aW9uTGFiZWxWYWx1ZV9jb3VudF9mZWF0dXJlPVx1ZDY5Zlx1YzIxOAorX1VJX1JlbGF0aXZlUGh5c2ljYWxSZWxhdGlvbnNoaXBMYWJlbF9jdXJyZW50UmVsYXRpb25zaGlwX2ZlYXR1cmU9XHVkNjA0XHVjN2FjIFx1YWQwMFx1YWNjNAorX1VJX1JlbGF0aXZlUGh5c2ljYWxSZWxhdGlvbnNoaXBMYWJlbFZhbHVlX2FkamFjZW50X2ZlYXR1cmU9XHVjNzc4XHVjODExCitfVUlfUmVsYXRpdmVQaHlzaWNhbFJlbGF0aW9uc2hpcExhYmVsVmFsdWVfcmVsYXRpb25zaGlwX2ZlYXR1cmU9XHVhZDAwXHVhY2M0CitfVUlfVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxfdHJhbnNwb3J0TW9kZV9mZWF0dXJlPVx1YzgwNFx1YzFhMSBcdWJhYThcdWI0ZGMKK19VSV9UcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbF9wb3B1bGF0aW9uSWRlbnRpZmllcl9mZWF0dXJlPVx1Yzc3OFx1YWQ2YyBcdWMyZGRcdWJjYzRcdWM3OTAKK19VSV9UcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbF90cmFuc3BvcnRJZGVudGlmaWVyX2ZlYXR1cmU9XHVjODA0XHVjMWExIFx1YzJkZFx1YmNjNFx1Yzc5MAorX1VJX1RyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsX2N1cnJlbnRUcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbFZhbHVlX2ZlYXR1cmU9XHVkNjA0XHVjN2FjIFx1YWQ1MFx1ZDFiNSBcdWFkMDBcdWFjYzQgXHViNzdjXHViY2E4IFx1YWMxMgorX1VJX1RyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsVmFsdWVfcG9wdWxhdGlvbkNvdW50X2ZlYXR1cmU9XHVjNzc4XHVhZDZjIFx1Y2U3NFx1YzZiNFx1ZDJiOAorX1VJX1RyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsVmFsdWVfdGltZVBlcmlvZF9mZWF0dXJlPVx1YWUzMFx1YWMwNAorX1VJX1Vua25vd25fZmVhdHVyZT1cdWM5YzBcdWM4MTVcdWI0MThcdWM5YzAgXHVjNTRhXHVjNzRjCisKK19VSV9SZWxhdGl2ZVBoeXNpY2FsUmVsYXRpb25zaGlwX1Vuc3BlY2lmaWVkX2xpdGVyYWw9XHVjOWMwXHVjODE1XHViNDE4XHVjOWMwIFx1YzU0YVx1Yzc0YworX1VJX1JlbGF0aXZlUGh5c2ljYWxSZWxhdGlvbnNoaXBfQWJvdmVfbGl0ZXJhbD1cdWM3MDQKK19VSV9SZWxhdGl2ZVBoeXNpY2FsUmVsYXRpb25zaGlwX0JlbG93X2xpdGVyYWw9XHVjNzc0XHVkNTU4CitfVUlfUmVsYXRpdmVQaHlzaWNhbFJlbGF0aW9uc2hpcF9SaWdodE9mX2xpdGVyYWw9XHVjNzU4IFx1YWQ4Y1x1YjlhYworX1VJX1JlbGF0aXZlUGh5c2ljYWxSZWxhdGlvbnNoaXBfTGVmdE9mX2xpdGVyYWw9TGVmdE9mCitfVUlfUmVsYXRpdmVQaHlzaWNhbFJlbGF0aW9uc2hpcF9Ob3J0aE9mX2xpdGVyYWw9Tm9ydGhPZgorX1VJX1JlbGF0aXZlUGh5c2ljYWxSZWxhdGlvbnNoaXBfU291dGhPZl9saXRlcmFsPVNvdXRoT2YKK19VSV9SZWxhdGl2ZVBoeXNpY2FsUmVsYXRpb25zaGlwX1dlc3RPZl9saXRlcmFsPVdlc3RPZgorX1VJX1JlbGF0aXZlUGh5c2ljYWxSZWxhdGlvbnNoaXBfRWFzdE9mX2xpdGVyYWw9RWFzdE9mCitfVUlfUmVsYXRpdmVQaHlzaWNhbFJlbGF0aW9uc2hpcF9Db250YWluc19saXRlcmFsPVx1ZDNlY1x1ZDU2OAorX1VJX1JlbGF0aXZlUGh5c2ljYWxSZWxhdGlvbnNoaXBfQ29udGFpbmVkQnlfbGl0ZXJhbD1cdWIyZTRcdWM3NGNcdWM1ZDAgXHVkM2VjXHVkNTY4XHViNDI4CitfVUlfUmVsYXRpdmVQaHlzaWNhbFJlbGF0aW9uc2hpcF9PdmVybGFwc19saXRlcmFsPVx1YzkxMVx1YmNmNQorX1VJX1JlbGF0aXZlUGh5c2ljYWxSZWxhdGlvbnNoaXBfT3JiaXRzX2xpdGVyYWw9XHVhZGE0XHViM2M0CitfVUlfVHJhbnNwb3J0TW9kZV91bnNwZWNpZmllZF9saXRlcmFsPVx1YmQ4OFx1ZDJiOVx1YzgxNQorX1VJX1RyYW5zcG9ydE1vZGVfYWlyX2xpdGVyYWw9XHVhY2Y1XHVhZTMwCitfVUlfVHJhbnNwb3J0TW9kZV9yb2FkX2xpdGVyYWw9XHViM2M0XHViODVjCitfVUlfVHJhbnNwb3J0TW9kZV9yYWlsX2xpdGVyYWw9XHViODA4XHVjNzdjCitfVUlfVHJhbnNwb3J0TW9kZV9tYXJpbmVfbGl0ZXJhbD1cdWMxMjBcdWJjMTUKK19VSV9UcmFuc3BvcnRNb2RlX2Zvb3RfbGl0ZXJhbD1mb290CitfVUlfTGFiZWxzRWRpdG9yX21lbnU9JkxhYmVscyBFZGl0b3IKK19VSV9Ob2Rlc0VkaXRvcl9tZW51PSZOb2RlcyBFZGl0b3IKKworX1VJX0NyZWF0ZUNoaWxkX21lbnVfaXRlbT0mTmV3IENoaWxkCitfVUlfQ3JlYXRlU2libGluZ19tZW51X2l0ZW09TiYgIFx1ZDYxNVx1YzgxYyBcdWM3OTBcdWI5ZTQKKworX1VJX1Nob3dQcm9wZXJ0aWVzVmlld19tZW51X2l0ZW09XHVkNDVjXHVjMmRjIFx1YmMwZiBcdWMxOGRcdWMxMzFcdWJjZjRcdWFlMzAKK19VSV9SZWZyZXNoVmlld2VyX21lbnVfaXRlbT0mUmVmcmVzaAorCitfVUlfU2VsZWN0aW9uUGFnZV9sYWJlbD1cdWMxMjBcdWQwZGQKK19VSV9QYXJlbnRQYWdlX2xhYmVsPVx1YmQ4MFx1YmFhOAorX1VJX0xpc3RQYWdlX2xhYmVsPVx1YmFhOVx1Yjg1ZAorX1VJX1RyZWVQYWdlX2xhYmVsPVx1YjA5OFx1YmIzNAorX1VJX1RhYmxlUGFnZV9sYWJlbD1cdWQxNGNcdWM3NzRcdWJlMTQKK19VSV9UcmVlV2l0aENvbHVtbnNQYWdlX2xhYmVsPVx1YjA5OFx1YmIzNFx1YzY0MCBcdWM1ZjQKK19VSV9PYmplY3RDb2x1bW5fbGFiZWw9XHVhYzFjXHVjY2I0CitfVUlfU2VsZkNvbHVtbl9sYWJlbD1cdWMxNDBcdWQ1MDQKKworX1VJX05vT2JqZWN0U2VsZWN0ZWQ9XHVjNTQ0XHViYjM0XHVhYzgzXHViM2M0IFx1YzU0OCBcdWMxMjBcdWQwZGRcdWQ1NjgKK19VSV9TaW5nbGVPYmplY3RTZWxlY3RlZD1cdWMxMjBcdWQwZGRcdWQ1NWMgXHVhYzFkXHVjY2I0IDogezB9CitfVUlfTXVsdGlPYmplY3RTZWxlY3RlZD1cdWMxMjBcdWQwZGRcdWI0MWMgezB9IFx1YWMxZFx1Y2NiNAorCitfVUlfT3BlbkVkaXRvckVycm9yX2xhYmVsPVx1YzYyNFx1ZDUwOCBcdWM1ZDBcdWI1MTRcdWQxMzAKKworX1VJX1dpemFyZF9jYXRlZ29yeT1cdWM2MDhcdWM4MWMgRU1GIFx1YmFhOFx1YjM3OCBcdWMwZGRcdWMxMzEgXHViOWM4XHViYzk1XHVjMGFjCisKK19VSV9DcmVhdGVNb2RlbEVycm9yX21lc3NhZ2U9XHVkMzBjXHVjNzdjICd7MH0gIlx1YzVkMFx1YzExYyBcdWJiMzhcdWM4MWMgXHViYzFjXHVjMGRkCisKK19VSV9MYWJlbHNNb2RlbFdpemFyZF9sYWJlbD1cdWI3N2NcdWJjYTggXHViYWE4XHViMzc4CitfVUlfTGFiZWxzTW9kZWxXaXphcmRfZGVzY3JpcHRpb249XHVjMGM4XHViODVjXHVjNmI0IFx1Yjc3Y1x1YmNhOCBcdWJhYThcdWIzNzggXHViOWNjXHViNGU0XHVhZTMwCisKK19VSV9MYWJlbHNFZGl0b3JfbGFiZWw9XHViNzdjXHViY2E4IFx1YmFhOFx1YjM3OCBcdWQzYjhcdWM5ZDFcdWFlMzAKKworX1VJX0xhYmVsc0VkaXRvckZpbGVuYW1lRGVmYXVsdEJhc2U9XHViMDk4XHVjNzU4CitfVUlfTGFiZWxzRWRpdG9yRmlsZW5hbWVFeHRlbnNpb249XHViNzdjXHViY2E4CisKK19VSV9Ob2Rlc01vZGVsV2l6YXJkX2xhYmVsPVx1YjE3OFx1YjRkYyBcdWJhYThcdWIzNzgKK19VSV9Ob2Rlc01vZGVsV2l6YXJkX2Rlc2NyaXB0aW9uPVx1YzBjOFx1Yjg1Y1x1YzZiNCBcdWIxNzhcdWI0ZGMgXHViYWE4XHViMzc4IFx1YjljY1x1YjRlNFx1YWUzMAorCitfVUlfTm9kZXNFZGl0b3JfbGFiZWw9XHViMTc4XHViNGRjIFx1YmFhOFx1YjM3OCBcdWQzYjhcdWM5ZDFcdWFlMzAKKworX1VJX05vZGVzRWRpdG9yRmlsZW5hbWVEZWZhdWx0QmFzZT1cdWIwOThcdWM3NTgKK19VSV9Ob2Rlc0VkaXRvckZpbGVuYW1lRXh0ZW5zaW9uPVx1YjE3OFx1YjRkYworCitfVUlfV2l6YXJkX2xhYmVsPVx1YzBjOFx1Yjg1Y1x1YzZiNAorCitfV0FSTl9GaWxlbmFtZUV4dGVuc2lvbj1cdWQzMGNcdWM3N2MgXHVjNzc0XHViOTg0XHVjNzQwICIuezB9Ilx1Yjg1YyBcdWIwNWRcdWIwOThcdWM1N2NcdWQ1NjguIAorCitfVUlfTW9kZWxPYmplY3Q9XHViYWE4XHViMzc4IFx1YWMxZFx1Y2NiNAorX1VJX1hNTEVuY29kaW5nPVhNTCBcdWM3NzhcdWNmNTRcdWI1MjkKK19VSV9YTUxFbmNvZGluZ0Nob2ljZXM9VVRGIC0gOCBBU0NJSSBVVEYgLSAxNiBVVEYgLSAxNkJFIFVURiAtIDE2TEUgSVNPIC0gODg1OSAtIDEKK19VSV9XaXphcmRfaW5pdGlhbF9vYmplY3RfZGVzY3JpcHRpb249XHVjMGRkXHVjMTMxXHVkNTYwIFx1YmFhOFx1YjM3OCBcdWFjMWNcdWNjYjQgXHVjMTIwXHVkMGRkCisKK19VSV9GaWxlQ29uZmxpY3RfbGFiZWw9XHVkMzBjXHVjNzdjIFx1Y2RhOVx1YjNjYworX1dBUk5fRmlsZUNvbmZsaWN0PVx1YzgwMFx1YzdhNVx1YjQxOFx1YzljMCBcdWM1NGFcdWM3NDAgXHVjMGFjXHVkNTZkXHViNGU0XHVjNzc0IFx1ZDNiOFx1YzlkMVx1YWUzMCBcdWM2NzhcdWJkODBcdWM3NTggXHViY2MwXHVhY2JkIFx1YzBhY1x1ZDU2ZFx1YjRlNFx1YWNmYyBcdWNkYTlcdWIzY2NcdWQ1NjguIFx1Yzc3NCBcdWQzYjhcdWM5ZDFcdWFlMzBcdWM3NTggXHViY2MwXHVhY2JkIFx1YzBhY1x1ZDU2ZFx1YjRlNFx1Yzc0NCBcdWNkZThcdWMxOGMgXHVkNTU4XHVjMmRjXHVhY2EwXHVjMmI1XHViMmM4XHVhZTRjPworCitfVUlfVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxfdGltZVBlcmlvZF9mZWF0dXJlPVx1YWUzMFx1YWMwNAorX1VJX1BoeXNpY2FsUmVsYXRpb25zaGlwTGFiZWxWYWx1ZV90eXBlPVx1YmIzY1x1YjlhY1x1YzgwMSBcdWFkMDBcdWFjYzQgXHViNzdjXHViY2E4IFx1YWMxMgorX1VJX1RyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsX3JhdGVUaW1lUGVyaW9kX2ZlYXR1cmU9XHVjMmRjXHVhYzA0IFx1YWUzMFx1YWMwNCBcdWJlNDRcdWM3MjgKK19VSV9UcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbF9kZXBhcnR1cmVDYXBhY2l0eV9mZWF0dXJlPVx1Y2Q5Y1x1YmMxYyBcdWFjMDBcdWIyYTUgXHVjNmE5XHViN2M5CitfVUlfVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxfbWF4aW11bURlcGFydHVyZUNhcGFjaXR5X2ZlYXR1cmU9XHVjZDVjXHViMzAwIFx1Y2Q5Y1x1YmMxYyBcdWM3NzhcdWM2ZDAKK19VSV9UcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbF9jYXBhY2l0eV9mZWF0dXJlPVx1YzZhOVx1YjdjOQorX1VJX1RyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsX21heGltdW1DYXBhY2l0eV9mZWF0dXJlPVx1Y2Q1Y1x1YjMwMCBcdWM2YTlcdWI3YzkKK19VSV9UcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbF90cmFuc2l0VGltZV9mZWF0dXJlPVx1YzE4Y1x1YzY5NCBcdWMyZGNcdWFjMDQKK19VSV9UcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbF9zdGFydFVwRGVsYXlfZmVhdHVyZT1cdWMyZGNcdWM3OTFcdWM3NDQgXHVjOWMwXHVjNWYwCitfVUlfVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxWYWx1ZV9hdmFpbGFibGVEZXBhcnR1cmVDYXBhY2l0eVByb3BvcnRpb25fZmVhdHVyZT1cdWMwYWNcdWM2YTkgXHVhYzAwXHViMmE1XHVkNTVjIFx1Y2Q5Y1x1YmMxYyBcdWM2YTlcdWI3YzkgXHViZTQ0XHVjNzI4CitfVUlfTWlncmF0aW9uRWRnZV90eXBlPVx1Yzc3NFx1YjNkOSBcdWFjMDBcdWM3YTVcdWM3OTBcdWI5YWMKK19VSV9NaWdyYXRpb25FZGdlTGFiZWxfdHlwZT1cdWM3NzRcdWIzZDkgXHVhYzAwXHVjN2E1XHVjNzkwXHViOWFjIFx1Yjc3Y1x1YmNhOAorX1VJX01pZ3JhdGlvbkVkZ2VMYWJlbFZhbHVlX3R5cGU9XHVjNzc0XHViM2Q5IFx1YWMwMFx1YzdhNVx1Yzc5MFx1YjlhYyBcdWI3N2NcdWJjYTggXHVhYzEyCitfVUlfTWl4aW5nRWRnZV90eXBlPVx1ZDYzY1x1ZDU2OSBcdWM1ZDBcdWM5YzAKK19VSV9NaXhpbmdFZGdlTGFiZWxfdHlwZT1cdWQ2M2NcdWQ1NjkgXHVjNWQwXHVjOWMwIFx1Yjc3Y1x1YmNhOAorX1VJX01peGluZ0VkZ2VMYWJlbFZhbHVlX3R5cGU9XHVkNjNjXHVkNTY5IFx1YzVkMFx1YzljMCBcdWI3N2NcdWJjYTggXHVhYzEyCitfVUlfTWlncmF0aW9uRWRnZUxhYmVsVmFsdWVfbWlncmF0aW9uUmF0ZV9mZWF0dXJlPVx1Yzc3NFx1YjNkOVx1YzcyOAorX1VJX01peGluZ0VkZ2VMYWJlbFZhbHVlX21peGluZ1JhdGVfZmVhdHVyZT1cdWQ2M2NcdWQ1NjkgXHVjMThkXHViM2M0CitfVUlfUm9hZFRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsX3R5cGU9XHViM2M0XHViODVjIFx1YWQ1MFx1ZDFiNSBcdWFkMDBcdWFjYzQgXHViNzdjXHViY2E4CitfVUlfUm9hZFRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsVmFsdWVfdHlwZT1cdWIzYzRcdWI4NWMgXHVhZDUwXHVkMWI1IFx1YWQwMFx1YWNjNCBcdWI3N2NcdWJjYTggXHVhYzEyCitfVUlfUm9hZFRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsVmFsdWVfcm9hZE5hbWVfZmVhdHVyZT1cdWIzYzRcdWI4NWMgXHVjNzc0XHViOTg0CitfVUlfUm9hZFRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsVmFsdWVfcm9hZENsYXNzX2ZlYXR1cmU9XHViM2M0XHViODVjIFx1ZDA3NFx1Yjc5OFx1YzJhNAorX1VJX1JvYWRUcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbFZhbHVlX251bWJlckNyb3NzaW5nc19mZWF0dXJlPVx1YWQ1MFx1Y2MyOCBcdWFjMmZcdWMyMTgKK19VSV9FZGdlc0VkaXRvcl9tZW51PSZFZGdlcyBFZGl0b3IKK19VSV9FZGdlc01vZGVsV2l6YXJkX2xhYmVsPVx1YWMwMFx1YzdhNVx1Yzc5MFx1YjlhY1x1YjRlNCBcdWJhYThcdWIzNzgKK19VSV9FZGdlc01vZGVsV2l6YXJkX2Rlc2NyaXB0aW9uPVx1YzBjOFx1Yjg1Y1x1YzZiNCBcdWFjMDBcdWM3YTVcdWM3OTBcdWI5YWMgXHViYWE4XHViMzc4IFx1YjljY1x1YjRlNFx1YWUzMAorCitfVUlfRWRnZXNFZGl0b3JfbGFiZWw9XHVhYzAwXHVjN2E1XHVjNzkwXHViOWFjXHViNGU0IFx1YmFhOFx1YjM3OCBcdWQzYjhcdWM5ZDFcdWFlMzAKKworX1VJX0VkZ2VzRWRpdG9yRmlsZW5hbWVEZWZhdWx0QmFzZT1cdWIwOThcdWM3NTgKK19VSV9FZGdlc0VkaXRvckZpbGVuYW1lRXh0ZW5zaW9uPVx1YWMwMFx1YzdhNVx1Yzc5MFx1YjlhYworCitfVUlfRWRnZXNFZGl0b3JGaWxlbmFtZUV4dGVuc2lvbnM9XHVhYzAwXHVjN2E1XHVjNzkwXHViOWFjCisKK19VSV9MYWJlbHNFZGl0b3JGaWxlbmFtZUV4dGVuc2lvbnM9XHViNzdjXHViY2E4CisKK19VSV9Ob2Rlc0VkaXRvckZpbGVuYW1lRXh0ZW5zaW9ucz1cdWIxNzhcdWI0ZGMKKworX1dBUk5fRmlsZW5hbWVFeHRlbnNpb25zPVx1ZDMwY1x1Yzc3YyBcdWM3NzRcdWI5ODRcdWM3NDAgXHViMmU0XHVjNzRjIFx1ZDY1NVx1YzdhNVx1Yzc5MCBcdWM5MTEgXHVkNTU4XHViMDk4XHViOTdjIFx1YWMwMFx1YzgzOFx1YzU3Y1x1ZDU2OCA6IHswfQorCitfVUlfQ2F0ZWdvcml6ZWRUeXBlX3R5cGU9XHViZDg0XHViOTU4IFx1ZDBjMFx1Yzc4NQorX1VJX1JhdGVfdHlwZT1cdWJlNDRcdWM3MjgKK19VSV9SYXRlX3JhdGVfZmVhdHVyZT1cdWJlNDRcdWM3MjgKK19VSV9UeXBlc0VkaXRvcl9tZW51PSZUeXBlcyBFZGl0b3IKKworX1VJX1R5cGVzTW9kZWxXaXphcmRfbGFiZWw9XHVjNzIwXHVkNjE1IFx1YmFhOFx1YjM3OAorX1VJX1R5cGVzTW9kZWxXaXphcmRfZGVzY3JpcHRpb249XHVjMGM4XHViODVjXHVjNmI0IFx1YzcyMFx1ZDYxNVx1Yzc1OCBcdWJhYThcdWIzNzhcdWM3NDQgXHViOWNjXHViNGU0XHVhZTMwCisKK19VSV9UeXBlc0VkaXRvcl9sYWJlbD1cdWM3MjBcdWQ2MTUgXHViYWE4XHViMzc4IFx1ZDNiOFx1YzlkMVx1YWUzMAorCitfVUlfVHlwZXNFZGl0b3JGaWxlbmFtZURlZmF1bHRCYXNlPVx1YjA5OFx1Yzc1OAorX1VJX1R5cGVzRWRpdG9yRmlsZW5hbWVFeHRlbnNpb25zPVx1YzcyMFx1ZDYxNQorCitfVUlfUG9wdWxhdGlvbkxhYmVsX3ZhbGlkWWVhcl9mZWF0dXJlPVx1YzcyMFx1ZDZhOCBcdWIxNDQKK19VSV9Qb3B1bGF0aW9uTGFiZWxfbmV4dFBvcHVsYXRpb25MYWJlbFZhbHVlX2ZlYXR1cmU9XHViMmU0XHVjNzRjIFx1Yzc3OFx1YWQ2YyBcdWI3N2NcdWJjYTggXHVhYzEyCitfVUlfUG9wdWxhdGlvbkxhYmVsX2RlbHRhUG9wdWxhdGlvbkxhYmVsVmFsdWVfZmVhdHVyZT1cdWIzNzhcdWQwYzAgXHVjNzc4XHVhZDZjIFx1Yjc3Y1x1YmNhOCBcdWFjMTIKK19VSV9Qb3B1bGF0aW9uTGFiZWxfY3VycmVudFRlbXBQb3B1bGF0aW9uTGFiZWxWYWx1ZV9mZWF0dXJlPVx1ZDYwNFx1YzdhYyBcdWM2MjhcdWIzYzQgXHVjNzc4XHVhZDZjIFx1Yjc3Y1x1YmNhOCBcdWFjMTIKK19VSV9Qb3B1bGF0aW9uTGFiZWxfb3JpZ2luYWxQb3B1bGF0aW9uTGFiZWxWYWx1ZV9mZWF0dXJlPVx1YzZkMFx1Yjc5OCBcdWM3NzhcdWFkNmMgXHViNzdjXHViY2E4IFx1YWMxMgorX1VJX1BvcHVsYXRpb25MYWJlbF95U2NhbGVfZmVhdHVyZT1ZU2NhbGUKK19VSV9Qb3B1bGF0aW9uTGFiZWxfY3VycmVudFlQb3B1bGF0aW9uTGFiZWxWYWx1ZV9mZWF0dXJlPVx1ZDYwNFx1YzdhYyBZXHVjNzc4XHVhZDZjIFx1Yjc3Y1x1YmNhOCBcdWFjMTIKK19VSV9BcmVhTGFiZWxWYWx1ZV9hdmVyYWdlRXh0ZW50X2ZlYXR1cmU9XHVkM2M5XHVhZGUwIFx1YmM5NFx1YzcwNAorX1VJX1BvcHVsYXRpb25Nb2RlbExhYmVsX3R5cGU9XHVjNzc4XHVhZDZjIFx1YmFhOFx1YjM3OCBcdWI3N2NcdWJjYTgKK19VSV9TdGFuZGFyZFBvcHVsYXRpb25Nb2RlbExhYmVsX3R5cGU9XHVkNDVjXHVjOTAwIFx1Yzc3OFx1YWQ2YyBcdWJhYThcdWIzNzggXHViNzdjXHViY2E4CitfVUlfUG9wdWxhdGlvbk1vZGVsTGFiZWxWYWx1ZV90eXBlPVx1Yzc3OFx1YWQ2YyBcdWJhYThcdWIzNzggXHViNzdjXHViY2E4IFx1YWMxMgorX1VJX1N0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWxWYWx1ZV90eXBlPVx1ZDQ1Y1x1YzkwMCBcdWM3NzhcdWFkNmMgXHViYWE4XHViMzc4IFx1Yjc3Y1x1YmNhOCBcdWFjMTIKK19VSV9JbnRlZ3JhdGlvbkxhYmVsX3R5cGU9XHVkMWI1XHVkNTY5IFx1Yjc3Y1x1YmNhOAorX1VJX0ludGVncmF0aW9uTGFiZWxWYWx1ZV90eXBlPVx1ZDFiNVx1ZDU2OSBcdWI3N2NcdWJjYTggXHVhYzEyCitfVUlfSW50ZWdyYXRpb25EZWNvcmF0b3JfdHlwZT1cdWQxYjVcdWQ1NjkgXHVjN2E1XHVjMmRkXHVjNzkwCitfVUlfUG9wdWxhdGlvbk1vZGVsTGFiZWxfcG9wdWxhdGlvbkxhYmVsX2ZlYXR1cmU9XHVjNzc4XHVhZDZjIFx1Yjc3Y1x1YmNhOAorX1VJX1BvcHVsYXRpb25Nb2RlbExhYmVsX3BvcHVsYXRpb25JZGVudGlmaWVyX2ZlYXR1cmU9XHVjNzc4XHVhZDZjIFx1YzJkZFx1YmNjNFx1Yzc5MAorX1VJX1N0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWxfZGVsdGFWYWx1ZV9mZWF0dXJlPVx1YjM3OFx1ZDBjMCBcdWFjMTIKK19VSV9TdGFuZGFyZFBvcHVsYXRpb25Nb2RlbExhYmVsX3Byb2JlVmFsdWVfZmVhdHVyZT1cdWQwZDBcdWMwYzlcdWM3OTAgXHVhYzEyCitfVUlfU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxMYWJlbF90ZW1wVmFsdWVfZmVhdHVyZT1cdWM2MjhcdWIzYzQgXHVhYzEyCitfVUlfU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxMYWJlbF9vcmlnaW5hbFZhbHVlX2ZlYXR1cmU9XHVjNmQwXHViNzk4IFx1YWMxMgorX1VJX1N0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWxfZXJyb3JTY2FsZV9mZWF0dXJlPVx1YzYyNFx1Yjk1OCBcdWMyYTRcdWNmMDBcdWM3N2MKK19VSV9TdGFuZGFyZFBvcHVsYXRpb25Nb2RlbExhYmVsVmFsdWVfY291bnRfZmVhdHVyZT1cdWQ2OWZcdWMyMTgKK19VSV9TdGFuZGFyZFBvcHVsYXRpb25Nb2RlbExhYmVsVmFsdWVfaW5jaWRlbmNlX2ZlYXR1cmU9XHViYzFjXHVjMGRkCitfVUlfU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxMYWJlbFZhbHVlX2JpcnRoc19mZWF0dXJlPVx1Y2Q5Y1x1YzBiMAorX1VJX1N0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWxWYWx1ZV9kZWF0aHNfZmVhdHVyZT1cdWMwYWNcdWI5ZGQKK19VSV9TdGFuZGFyZFBvcHVsYXRpb25Nb2RlbExhYmVsVmFsdWVfZGVuc2l0eV9mZWF0dXJlPVx1YmMwMFx1YjNjNAorX1VJX1BvcHVsYXRpb25FZGdlX3R5cGU9XHVjNzc4XHVhZDZjIFx1YWMwMFx1YzdhNVx1Yzc5MFx1YjlhYworX1VJX1BvcHVsYXRpb25FZGdlX3BvcHVsYXRpb25JZGVudGlmaWVyX2ZlYXR1cmU9XHVjNzc4XHVhZDZjIFx1YzJkZFx1YmNjNFx1Yzc5MAorX1VJX0VhcnRoU2NpZW5jZUxhYmVsX3R5cGU9XHVjOWMwXHVhZDZjIFx1YWNmY1x1ZDU1OSBcdWI3N2NcdWJjYTgKK19VSV9FYXJ0aFNjaWVuY2VMYWJlbFZhbHVlX3R5cGU9XHVjOWMwXHVhZDZjIFx1YWNmY1x1ZDU1OSBcdWI3N2NcdWJjYTggXHVhYzEyCitfVUlfRWFydGhTY2llbmNlTGFiZWxfY3VycmVudEVhcnRoU2NpZW5jZVZhbHVlX2ZlYXR1cmU9XHVkNjA0XHVjN2FjIFx1YzljMFx1YWQ2YyBcdWFjZmNcdWQ1NTkgXHVhYzEyCitfVUlfRWFydGhTY2llbmNlTGFiZWxWYWx1ZV9kYXRhX2ZlYXR1cmU9XHViMzcwXHVjNzc0XHVkMTMwCitfVUlfRWFydGhTY2llbmNlTGFiZWxWYWx1ZV9kYXRhVHlwZV9mZWF0dXJlPVx1YjM3MFx1Yzc3NFx1ZDEzMCBcdWM3MjBcdWQ2MTUKK19VSV9FYXJ0aFNjaWVuY2VMYWJlbFZhbHVlX3VuaXRzX2ZlYXR1cmU9XHViMmU4XHVjNzA0CitfVUlfRWFydGhTY2llbmNlTGFiZWxWYWx1ZV9tZWFuX2ZlYXR1cmU9XHVkM2M5XHVhZGUwCitfVUlfRWFydGhTY2llbmNlTGFiZWxWYWx1ZV9zZF9mZWF0dXJlPVNECitfVUlfRWFydGhTY2llbmNlTGFiZWxWYWx1ZV9taW5fZmVhdHVyZT1cdWNkNWNcdWMxOGMKK19VSV9FYXJ0aFNjaWVuY2VMYWJlbFZhbHVlX21heF9mZWF0dXJlPVx1Y2Q1Y1x1YjMwMAorX1VJX0VhcnRoU2NpZW5jZUxhYmVsVmFsdWVfbWVkaWFuX2ZlYXR1cmU9XHVjOTExXHVhYzA0XHVhYzEyCitfVUlfRWFydGhTY2llbmNlTGFiZWxWYWx1ZV9za2V3bmVzc19mZWF0dXJlPVx1YmU0NFx1YjMwMFx1Y2U2ZFx1YjNjNAorX1VJX0VhcnRoU2NpZW5jZUxhYmVsVmFsdWVfa3VydG9zaXNfZmVhdHVyZT1cdWNjYThcdWIzYzQKK19VSV9FYXJ0aFNjaWVuY2VMYWJlbFZhbHVlX3Jtc19mZWF0dXJlPVJNUworX1VJX0VhcnRoU2NpZW5jZUxhYmVsVmFsdWVfc2FtcGxlc2l6ZV9mZWF0dXJlPVx1YWNhY1x1YmNmOCBcdWMwYWNcdWM3NzRcdWM5ODgKK19VSV9FYXJ0aFNjaWVuY2VMYWJlbFZhbHVlX3JhbmdlX2ZlYXR1cmU9XHViYzk0XHVjNzA0CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvcGx1Z2luX3poLnByb3BlcnRpZXMgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvcGx1Z2luX3poLnByb3BlcnRpZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzk0Y2U1NgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy9wbHVnaW5femgucHJvcGVydGllcwpAQCAtMCwwICsxLDI0OSBAQAorIy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjICogQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorIyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyMgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyMgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorIyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisjICoKKyMgKiBDb250cmlidXRvcnM6CisjICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorIyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisjIFRvIGNvZGUgZGV2ZWxvcGVyOgorIyAgIERvIE5PVCBjaGFuZ2UgdGhlIHByb3BlcnRpZXMgYmV0d2VlbiB0aGlzIGxpbmUgYW5kIHRoZQorIyAgICIlJSUgRU5EIE9GIFRSQU5TTEFURUQgUFJPUEVSVElFUyAlJSUiIGxpbmUuCisjICAgTWFrZSBhIG5ldyBwcm9wZXJ0eSBuYW1lLCBhcHBlbmQgdG8gdGhlIGVuZCBvZiB0aGUgZmlsZSBhbmQgY2hhbmdlCisjICAgdGhlIGNvZGUgdG8gdXNlIHRoZSBuZXcgcHJvcGVydHkuCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyMgJSUlIEVORCBPRiBUUkFOU0xBVEVEIFBST1BFUlRJRVMgJSUlCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK3BsdWdpbk5hbWU9U1RFTVx1NWI5YVx1NGU0OVx1NmEyMVx1NTc4YgorcHJvdmlkZXJOYW1lPUVjbGlwc2Uub3JnCisKKyMgUHJlZmVyZW5jZSBwYWdlCitfVUlfTWFwRE1QUGFnZT1cdTU3MzBcdTU2ZmVcdTY1NzBcdTYzNmVcdTdiYTFcdTc0MDYKKworCitfVUlfQ3JlYXRlQ2hpbGRfdGV4dD17MH0KK19VSV9DcmVhdGVDaGlsZF90ZXh0Mj17MX0gezB9CitfVUlfQ3JlYXRlQ2hpbGRfdGV4dDM9ezF9CitfVUlfQ3JlYXRlQ2hpbGRfdG9vbHRpcD1cdTUyMWJcdTVlZmFcdTU3Mjh7MX0gezB9XHU2NWIwXHU1MjlmXHU4MGZkCitfVUlfQ3JlYXRlQ2hpbGRfZGVzY3JpcHRpb249XHU0ZTNhXHU5MDA5XHU1YjlhXHU3Njg0ezJ9XHU3Njg0ezF9XHU3Mjc5XHU2MDI3XHU2NzY1XHU1MjFiXHU1ZWZhXHU0ZTAwXHU0ZTJhXHU2NWIwXHU3Njg0ezB9XHU1YjUwXHU3YzdiCitfVUlfQ3JlYXRlU2libGluZ19kZXNjcmlwdGlvbj1cdTU3Mjh7MX1cdTc2ODRcdTcyMzZcdTk2YzZcdTRlMmRcdTRlM2FcdTkwMDlcdTViOWFcdTc2ODR7Mn1cdTY3NjVcdTUyMWJcdTVlZmFcdTRlMDBcdTRlMmF7MH1cdTdjN2JcdTU3OGJcdTc2ODRcdTY1YjBcdTc2ODRcdTUxNDRcdTVmMWZcdTdjN2IKKworX1VJX1Byb3BlcnR5RGVzY3JpcHRvcl9kZXNjcmlwdGlvbj17MH1cdTRlY2VcdTVjNWV7MX0KKworX1VJX0FyZWFMYWJlbF90eXBlPVx1OTc2Mlx1NzllZlx1NjgwN1x1N2I3ZQorX1VJX0FyZWFMYWJlbFZhbHVlX3R5cGU9XHU5NzYyXHU3OWVmXHU2ODA3XHU3YjdlXHU1MDNjCitfVUlfQ29tbW9uQm9yZGVyUmVsYXRpb25zaGlwTGFiZWxfdHlwZT1cdTUxNzFcdTU0MGNcdThmYjlcdTc1NGNcdTc2ODRcdTUxNzNcdTdjZmJcdTY4MDdcdTdiN2UKK19VSV9Db21tb25Cb3JkZXJSZWxhdGlvbnNoaXBMYWJlbFZhbHVlX3R5cGU9XHU1MTcxXHU1NDBjXHU4ZmI5XHU3NTRjXHU1MTczXHU3Y2ZiXHU3Njg0XHU2ODA3XHU3YjdlXHU1MDNjCitfVUlfUGh5c2ljYWxSZWxhdGlvbnNoaXBMYWJlbF90eXBlPVx1NWI5ZVx1OTY0NVx1NTE3M1x1N2NmYlx1NzY4NFx1NjgwN1x1N2I3ZQorX1VJX1BvcHVsYXRpb25MYWJlbF90eXBlPVx1NzljZFx1N2ZhNFx1NjgwN1x1N2I3ZQorX1VJX1BvcHVsYXRpb25MYWJlbFZhbHVlX3R5cGU9XHU3OWNkXHU3ZmE0XHU2ODA3XHU3YjdlXHU1MDNjCitfVUlfUmVsYXRpdmVQaHlzaWNhbFJlbGF0aW9uc2hpcExhYmVsX3R5cGU9XHU3NmY4XHU1YmY5XHU3MjY5XHU3NDA2XHU1MTczXHU3Y2ZiXHU3Njg0XHU2ODA3XHU3YjdlCitfVUlfUmVsYXRpdmVQaHlzaWNhbFJlbGF0aW9uc2hpcExhYmVsVmFsdWVfdHlwZT1cdTc2ZjhcdTViZjlcdTcyNjlcdTc0MDZcdTUxNzNcdTdjZmJcdTc2ODRcdTY4MDdcdTdiN2VcdTUwM2MKK19VSV9UcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbF90eXBlPVx1NGVhNFx1OTAxYVx1NTE3M1x1N2NmYlx1NzY4NFx1NjgwN1x1N2I3ZQorX1VJX1RyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsVmFsdWVfdHlwZT1cdTRlYTRcdTkwMWFcdTUxNzNcdTdjZmJcdTc2ODRcdTY4MDdcdTdiN2VcdTUwM2MKK19VSV9HZW9ncmFwaGljRmVhdHVyZV90eXBlPVx1NTczMFx1NzQwNlx1NzI3OVx1NWY4MQorX1VJX1JlZ2lvbl90eXBlPVx1NTMzYQorX1VJX05vZGVfdHlwZT1cdTgyODJcdTcwYjkKK19VSV9Vbmtub3duX3R5cGU9XHU1YmY5XHU4YzYxCisKK19VSV9Vbmtub3duX2RhdGF0eXBlPVx1NGVmN1x1NTAzYworCitfVUlfQXJlYUxhYmVsX2N1cnJlbnRBcmVhVmFsdWVfZmVhdHVyZT1cdTVmNTNcdTUyNGRcdTUzM2FcdTU3ZGZcdTUwM2MKK19VSV9BcmVhTGFiZWxWYWx1ZV9hcmVhX2ZlYXR1cmU9XHU5NzYyXHU3OWVmCitfVUlfQ29tbW9uQm9yZGVyUmVsYXRpb25zaGlwTGFiZWxWYWx1ZV9ib3JkZXJMZW5ndGhfZmVhdHVyZT1cdThmYjlcdTc1NGNcdTk1N2ZcdTVlYTYKK19VSV9Qb3B1bGF0aW9uTGFiZWxfcG9wdWxhdGlvbklkZW50aWZpZXJfZmVhdHVyZT1cdTc5Y2RcdTdmYTRcdTY4MDdcdThiYzZcdTdiMjYKK19VSV9Qb3B1bGF0aW9uTGFiZWxfbmFtZV9mZWF0dXJlPVx1NTQwZFx1NzlmMAorX1VJX1BvcHVsYXRpb25MYWJlbF9jdXJyZW50UG9wdWxhdGlvblZhbHVlX2ZlYXR1cmU9XHU3NmVlXHU1MjRkXHU3Njg0XHU3OWNkXHU3ZmE0XHU1MDNjCitfVUlfUG9wdWxhdGlvbkxhYmVsX3BvcHVsYXRlZEFyZWFfZmVhdHVyZT1cdTVjNDVcdTRmNGZcdTUzM2EKK19VSV9Qb3B1bGF0aW9uTGFiZWxWYWx1ZV9jb3VudF9mZWF0dXJlPVx1OGJhMVx1NjU3MAorX1VJX1JlbGF0aXZlUGh5c2ljYWxSZWxhdGlvbnNoaXBMYWJlbF9jdXJyZW50UmVsYXRpb25zaGlwX2ZlYXR1cmU9XHU1ZjUzXHU1MjRkXHU3Njg0XHU1MTczXHU3Y2ZiCitfVUlfUmVsYXRpdmVQaHlzaWNhbFJlbGF0aW9uc2hpcExhYmVsVmFsdWVfYWRqYWNlbnRfZmVhdHVyZT1cdTc2ZjhcdTkwYmIKK19VSV9SZWxhdGl2ZVBoeXNpY2FsUmVsYXRpb25zaGlwTGFiZWxWYWx1ZV9yZWxhdGlvbnNoaXBfZmVhdHVyZT1cdTUxNzNcdTdjZmIKK19VSV9UcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbF90cmFuc3BvcnRNb2RlX2ZlYXR1cmU9XHU0ZWE0XHU5MDFhXHU2NWI5XHU1ZjBmCitfVUlfVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxfcG9wdWxhdGlvbklkZW50aWZpZXJfZmVhdHVyZT1cdTc5Y2RcdTdmYTRcdTY4MDdcdThiYzZcdTdiMjYKK19VSV9UcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbF90cmFuc3BvcnRJZGVudGlmaWVyX2ZlYXR1cmU9XHU0ZWE0XHU5MDFhXHU2ODA3XHU4YmM2CitfVUlfVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxfY3VycmVudFRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsVmFsdWVfZmVhdHVyZT1cdTVmNTNcdTUyNGRcdThmZDBcdThmOTNcdTUxNzNcdTdjZmJcdTY4MDdcdTdiN2VcdTUwM2MKK19VSV9UcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbFZhbHVlX3BvcHVsYXRpb25Db3VudF9mZWF0dXJlPVx1NzljZFx1N2ZhNFx1NjU3MAorX1VJX1RyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsVmFsdWVfdGltZVBlcmlvZF9mZWF0dXJlPVx1NjVmNlx1OTVmNFx1NmJiNQorX1VJX1Vua25vd25fZmVhdHVyZT1cdTY3MmFcdTYzMDdcdTViOWEKKworX1VJX1JlbGF0aXZlUGh5c2ljYWxSZWxhdGlvbnNoaXBfVW5zcGVjaWZpZWRfbGl0ZXJhbD1cdTY3MmFcdTYzMDdcdTViOWEKK19VSV9SZWxhdGl2ZVBoeXNpY2FsUmVsYXRpb25zaGlwX0Fib3ZlX2xpdGVyYWw9XHU0ZTBhXHU5NzYyCitfVUlfUmVsYXRpdmVQaHlzaWNhbFJlbGF0aW9uc2hpcF9CZWxvd19saXRlcmFsPVx1NGUwYlx1OTc2MgorX1VJX1JlbGF0aXZlUGh5c2ljYWxSZWxhdGlvbnNoaXBfUmlnaHRPZl9saXRlcmFsPVx1NTcyOFx1NTNmM1x1OGZiOQorX1VJX1JlbGF0aXZlUGh5c2ljYWxSZWxhdGlvbnNoaXBfTGVmdE9mX2xpdGVyYWw9XHU1ZGU2XHU4ZmI5XHU3Njg0CitfVUlfUmVsYXRpdmVQaHlzaWNhbFJlbGF0aW9uc2hpcF9Ob3J0aE9mX2xpdGVyYWw9XHU1NzI4XHU1MzE3XHU4ZmI5CitfVUlfUmVsYXRpdmVQaHlzaWNhbFJlbGF0aW9uc2hpcF9Tb3V0aE9mX2xpdGVyYWw9XHU1NzI4XHU1MzU3XHU4ZmI5CitfVUlfUmVsYXRpdmVQaHlzaWNhbFJlbGF0aW9uc2hpcF9XZXN0T2ZfbGl0ZXJhbD1cdTU3MjhcdTg5N2ZcdThmYjkKK19VSV9SZWxhdGl2ZVBoeXNpY2FsUmVsYXRpb25zaGlwX0Vhc3RPZl9saXRlcmFsPVx1NTcyOFx1NGUxY1x1OGZiOQorX1VJX1JlbGF0aXZlUGh5c2ljYWxSZWxhdGlvbnNoaXBfQ29udGFpbnNfbGl0ZXJhbD1cdTUzMDVcdTU0MmIKK19VSV9SZWxhdGl2ZVBoeXNpY2FsUmVsYXRpb25zaGlwX0NvbnRhaW5lZEJ5X2xpdGVyYWw9XHU4OGFiXHUzMDAyXHUzMDAyXHUzMDAyXHU2M2E3XHU1MjM2CitfVUlfUmVsYXRpdmVQaHlzaWNhbFJlbGF0aW9uc2hpcF9PdmVybGFwc19saXRlcmFsPVx1OTFjZFx1NTNlMAorX1VJX1JlbGF0aXZlUGh5c2ljYWxSZWxhdGlvbnNoaXBfT3JiaXRzX2xpdGVyYWw9XHU4ZjY4XHU5MDUzCitfVUlfVHJhbnNwb3J0TW9kZV91bnNwZWNpZmllZF9saXRlcmFsPVx1NjcyYVx1NjMwN1x1NWI5YQorX1VJX1RyYW5zcG9ydE1vZGVfYWlyX2xpdGVyYWw9XHU3YTdhXHU2YzE0CitfVUlfVHJhbnNwb3J0TW9kZV9yb2FkX2xpdGVyYWw9XHU4ZGVmCitfVUlfVHJhbnNwb3J0TW9kZV9yYWlsX2xpdGVyYWw9XHU5NGMxXHU4ZGVmCitfVUlfVHJhbnNwb3J0TW9kZV9tYXJpbmVfbGl0ZXJhbD1cdTZkNzdcdTZkMGIKK19VSV9UcmFuc3BvcnRNb2RlX2Zvb3RfbGl0ZXJhbD1cdTgxMWEKK19VSV9MYWJlbHNFZGl0b3JfbWVudT0mTGFiZWxzIEVkaXRvcgorX1VJX05vZGVzRWRpdG9yX21lbnU9Jk5vZGVzIEVkaXRvcgorCitfVUlfQ3JlYXRlQ2hpbGRfbWVudV9pdGVtPSZOZXcgQ2hpbGQKK19VSV9DcmVhdGVTaWJsaW5nX21lbnVfaXRlbT1cdTY1YjBcdTc1MWZcdTYyMTBcdTRlMDBcdTRlMmFcdTUxNDRcdTVmMWZcdTdjN2IKKworX1VJX1Nob3dQcm9wZXJ0aWVzVmlld19tZW51X2l0ZW09XHU2NjNlXHU3OTNhXHU1NDhjXHU1YzVlXHU2MDI3XHU2N2U1XHU3NzBiCitfVUlfUmVmcmVzaFZpZXdlcl9tZW51X2l0ZW09JlJlZnJlc2gKKworX1VJX1NlbGVjdGlvblBhZ2VfbGFiZWw9XHU5MDA5XHU2MmU5CitfVUlfUGFyZW50UGFnZV9sYWJlbD1cdTViYjZcdTk1N2YKK19VSV9MaXN0UGFnZV9sYWJlbD1cdTc2ZWVcdTVmNTUKK19VSV9UcmVlUGFnZV9sYWJlbD1cdTY4MTEKK19VSV9UYWJsZVBhZ2VfbGFiZWw9XHU4ODY4CitfVUlfVHJlZVdpdGhDb2x1bW5zUGFnZV9sYWJlbD1cdTUyMDZcdTUyMTdcdTc2ODRcdTY4MTEKK19VSV9PYmplY3RDb2x1bW5fbGFiZWw9XHU1YmY5XHU4YzYxCitfVUlfU2VsZkNvbHVtbl9sYWJlbD1cdTgxZWFcdTVkZjEKKworX1VJX05vT2JqZWN0U2VsZWN0ZWQ9XHU2NWUwXHU5MDA5XHU1YjlhXHU1MTg1XHU1YmI5CitfVUlfU2luZ2xlT2JqZWN0U2VsZWN0ZWQ9XHU5MDA5XHU2MmU5XHU1YmY5XHU4YzYxXHVmZjFhezB9CitfVUlfTXVsdGlPYmplY3RTZWxlY3RlZD1cdTkwMDlcdTYyZTl7MH1cdTViZjlcdThjNjEKKworX1VJX09wZW5FZGl0b3JFcnJvcl9sYWJlbD1cdTYyNTNcdTVmMDBcdTdmMTZcdThmOTFcdTU2NjgKKworX1VJX1dpemFyZF9jYXRlZ29yeT1cdTRmOGJcdTU5ODJFTUZcdTZhMjFcdTU3OGJcdTUyMWJcdTVlZmFcdTU0MTFcdTViZmMKKworX1VJX0NyZWF0ZU1vZGVsRXJyb3JfbWVzc2FnZT1cdTU3MjhcdTY1ODdcdTRlZjZcdTIwMWN7MH1cdTIwMWRcdTRlMmRcdTkwNDdcdTUyMzBcdTc2ODRcdTk1ZWVcdTk4OTgKKworX1VJX0xhYmVsc01vZGVsV2l6YXJkX2xhYmVsPVx1NjgwN1x1N2I3ZU1vZGVsCitfVUlfTGFiZWxzTW9kZWxXaXphcmRfZGVzY3JpcHRpb249XHU1ZWZhXHU3YWNiXHU2YTIxXHU1NzhiXHU3Njg0XHU2NWIwXHU2ODA3XHU3YjdlCisKK19VSV9MYWJlbHNFZGl0b3JfbGFiZWw9XHU2ODA3XHU3YjdlXHU2YTIxXHU1NzhiXHU3ZjE2XHU4ZjkxXHU1NjY4CisKK19VSV9MYWJlbHNFZGl0b3JGaWxlbmFtZURlZmF1bHRCYXNlPVx1NjIxMVx1NzY4NAorX1VJX0xhYmVsc0VkaXRvckZpbGVuYW1lRXh0ZW5zaW9uPVx1NjgwN1x1N2I3ZQorCitfVUlfTm9kZXNNb2RlbFdpemFyZF9sYWJlbD1cdTgyODJcdTcwYjlcdTZhMjFcdTU3OGIKK19VSV9Ob2Rlc01vZGVsV2l6YXJkX2Rlc2NyaXB0aW9uPVx1NTIxYlx1NWVmYVx1NGUwMFx1NGUyYVx1NjViMFx1NzY4NFx1ODI4Mlx1NzBiOVx1NmEyMVx1NTc4YgorCitfVUlfTm9kZXNFZGl0b3JfbGFiZWw9XHU4MjgyXHU3MGI5XHU2YTIxXHU1NzhiXHU3ZjE2XHU4ZjkxXHU1NjY4CisKK19VSV9Ob2Rlc0VkaXRvckZpbGVuYW1lRGVmYXVsdEJhc2U9XHU2MjExXHU3Njg0CitfVUlfTm9kZXNFZGl0b3JGaWxlbmFtZUV4dGVuc2lvbj1cdTgyODJcdTcwYjkKKworX1VJX1dpemFyZF9sYWJlbD1cdTY1YjBcdTVlZmEKKworX1dBUk5fRmlsZW5hbWVFeHRlbnNpb249XHU2NTg3XHU0ZWY2XHU1NDBkXHU1ZmM1XHU5ODdiXHU0ZWU1J3swfSAnJ1x1N2VkM1x1NWMzZQorCitfVUlfTW9kZWxPYmplY3Q9XHU2YTIxXHU1NzhiXHU1YmY5XHU4YzYxCitfVUlfWE1MRW5jb2Rpbmc9WE1MXHU3ZjE2XHU3ODAxCitfVUlfWE1MRW5jb2RpbmdDaG9pY2VzPVVURi04IEFTQ0lJIFVURi0xNiBVVEYtMTZCRSBVVEYtMTZMRSBJU08tODg1OS0xCitfVUlfV2l6YXJkX2luaXRpYWxfb2JqZWN0X2Rlc2NyaXB0aW9uPVx1OTAwOVx1NjJlOVx1NTIxYlx1NWVmYVx1NGUwMFx1NGUyYVx1NmEyMVx1NTc4Ylx1NWJmOVx1OGM2MQorCitfVUlfRmlsZUNvbmZsaWN0X2xhYmVsPVx1NjU4N1x1NGVmNlx1NTFiMlx1N2E4MQorX1dBUk5fRmlsZUNvbmZsaWN0PVx1NjcwOVx1NjcyYVx1NGZkZFx1NWI1OFx1NzY4NFx1NjZmNFx1NjUzOVx1NGUwZVx1N2YxNlx1OGY5MVx1NTY2OFx1NTkxNlx1NzY4NFx1NjZmNFx1NjUzOVx1NTFiMlx1N2E4MVx1MzAwMlx1NGY2MFx1NjBmM1x1NjUzZVx1NWYwM1x1OGZkOVx1NGUyYVx1N2YxNlx1OGY5MVx1NTY2OFx1NzY4NFx1NjZmNFx1NjUzOVx1NTQxN1x1ZmYxZgorCitfVUlfVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxfdGltZVBlcmlvZF9mZWF0dXJlPVx1NjVmNlx1OTVmNFx1NmJiNQorX1VJX1BoeXNpY2FsUmVsYXRpb25zaGlwTGFiZWxWYWx1ZV90eXBlPVx1NWI5ZVx1OTY0NVx1NTE3M1x1N2NmYlx1NzY4NFx1NjgwN1x1N2I3ZVx1NTAzYworX1VJX1RyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsX3JhdGVUaW1lUGVyaW9kX2ZlYXR1cmU9XHU5MDFmXHU3Mzg3XHU2NWY2XHU5NWY0XHU2YmI1CitfVUlfVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxfZGVwYXJ0dXJlQ2FwYWNpdHlfZmVhdHVyZT1cdTUxZmFcdTUzZDFcdTViYjlcdTkxY2YKK19VSV9UcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbF9tYXhpbXVtRGVwYXJ0dXJlQ2FwYWNpdHlfZmVhdHVyZT1cdTY3MDBcdTU5MjdcdTUxZmFcdTUzZDFcdTViYjlcdTkxY2YKK19VSV9UcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbF9jYXBhY2l0eV9mZWF0dXJlPVx1NWJiOVx1OTFjZgorX1VJX1RyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsX21heGltdW1DYXBhY2l0eV9mZWF0dXJlPVx1NjcwMFx1NTkyN1x1NWJiOVx1OTFjZgorX1VJX1RyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsX3RyYW5zaXRUaW1lX2ZlYXR1cmU9XHU4ZmQwXHU5MDAxXHU2NWY2XHU5NWY0CitfVUlfVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxfc3RhcnRVcERlbGF5X2ZlYXR1cmU9XHU1NDJmXHU1MmE4XHU1ZWY2XHU2NWY2CitfVUlfVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxWYWx1ZV9hdmFpbGFibGVEZXBhcnR1cmVDYXBhY2l0eVByb3BvcnRpb25fZmVhdHVyZT1cdTczYjBcdTY3MDlcdTc2ODRcdTc5YmJcdTZlMmZcdTViYjlcdTkxY2ZcdTZiZDRcdTczODcKK19VSV9NaWdyYXRpb25FZGdlX3R5cGU9XHU4ZmMxXHU3OWZiXHU4ZmI5XHU3ZjE4CitfVUlfTWlncmF0aW9uRWRnZUxhYmVsX3R5cGU9XHU4ZmMxXHU3OWZiXHU4ZmI5XHU3ZjE4XHU2ODA3XHU3YjdlCitfVUlfTWlncmF0aW9uRWRnZUxhYmVsVmFsdWVfdHlwZT1cdThmYzFcdTc5ZmJcdThmYjlcdTdmMThcdTY4MDdcdTdiN2VcdTUwM2MKK19VSV9NaXhpbmdFZGdlX3R5cGU9XHU2ZGY3XHU1NDA4XHU4ZmI5XHU3NTRjCitfVUlfTWl4aW5nRWRnZUxhYmVsX3R5cGU9XHU2ZGY3XHU1NDA4XHU4ZmI5XHU3NTRjXHU2ODA3XHU3YjdlCitfVUlfTWl4aW5nRWRnZUxhYmVsVmFsdWVfdHlwZT1cdTZkZjdcdTU0MDhcdThmYjlcdTc1NGNcdTY4MDdcdTdiN2VcdTUwM2MKK19VSV9NaWdyYXRpb25FZGdlTGFiZWxWYWx1ZV9taWdyYXRpb25SYXRlX2ZlYXR1cmU9XHU4ZmMxXHU3OWZiXHU3Mzg3CitfVUlfTWl4aW5nRWRnZUxhYmVsVmFsdWVfbWl4aW5nUmF0ZV9mZWF0dXJlPVx1NmRmN1x1NTQwOFx1NzM4NworX1VJX1JvYWRUcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbF90eXBlPVx1OTA1M1x1OGRlZlx1OGZkMFx1OGY5M1x1NTE3M1x1N2NmYlx1NzY4NFx1NjgwN1x1N2I3ZQorX1VJX1JvYWRUcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbFZhbHVlX3R5cGU9XHU5MDUzXHU4ZGVmXHU4ZmQwXHU4ZjkzXHU1MTczXHU3Y2ZiXHU3Njg0XHU2ODA3XHU3YjdlXHU1MDNjCitfVUlfUm9hZFRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsVmFsdWVfcm9hZE5hbWVfZmVhdHVyZT1cdThkZWZcdTU0MGQKK19VSV9Sb2FkVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxWYWx1ZV9yb2FkQ2xhc3NfZmVhdHVyZT1cdTkwNTNcdThkZWZcdTdiNDlcdTdlYTcKK19VSV9Sb2FkVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxWYWx1ZV9udW1iZXJDcm9zc2luZ3NfZmVhdHVyZT1cdTdhN2ZcdThmYzdcdThmYjlcdTc1NGNcdTc2ODRcdThkZWZcdTc2ODRcdTY1NzBcdTkxY2YKK19VSV9FZGdlc0VkaXRvcl9tZW51PSZFZGdlcyBFZGl0b3IKK19VSV9FZGdlc01vZGVsV2l6YXJkX2xhYmVsPVx1OGZiOVx1N2YxOFx1NmEyMVx1NTc4YgorX1VJX0VkZ2VzTW9kZWxXaXphcmRfZGVzY3JpcHRpb249XHU1MjFiXHU1ZWZhXHU0ZTAwXHU0ZTJhXHU2NWIwXHU3Njg0XHU4ZmI5XHU3ZjE4XHU2YTIxXHU1NzhiCisKK19VSV9FZGdlc0VkaXRvcl9sYWJlbD1cdThmYjlcdTdmMThcdTZhMjFcdTU3OGJcdTdmMTZcdThmOTFcdTU2NjgKKworX1VJX0VkZ2VzRWRpdG9yRmlsZW5hbWVEZWZhdWx0QmFzZT1cdTYyMTFcdTc2ODQKK19VSV9FZGdlc0VkaXRvckZpbGVuYW1lRXh0ZW5zaW9uPVx1OGZiOVx1N2YxOAorCitfVUlfRWRnZXNFZGl0b3JGaWxlbmFtZUV4dGVuc2lvbnM9XHU4ZmI5XHU3ZjE4CisKK19VSV9MYWJlbHNFZGl0b3JGaWxlbmFtZUV4dGVuc2lvbnM9XHU2ODA3XHU3YjdlCisKK19VSV9Ob2Rlc0VkaXRvckZpbGVuYW1lRXh0ZW5zaW9ucz1cdTgyODJcdTcwYjkKKworX1dBUk5fRmlsZW5hbWVFeHRlbnNpb25zPVx1NjU4N1x1NGVmNlx1NTQwZFx1NWZjNVx1OTg3Ylx1NTE3N1x1NjcwOVx1NGVlNVx1NGUwYlx1NjI2OVx1NWM1NVx1NTQwZFx1NGU0Ylx1NGUwMFx1ZmYxYXswfQorCitfVUlfQ2F0ZWdvcml6ZWRUeXBlX3R5cGU9XHU1MjA2XHU3YzdiXHU1NzhiCitfVUlfUmF0ZV90eXBlPVx1OTAxZlx1NzM4NworX1VJX1JhdGVfcmF0ZV9mZWF0dXJlPVx1OTAxZlx1NzM4NworX1VJX1R5cGVzRWRpdG9yX21lbnU9JlR5cGVzIEVkaXRvcgorCitfVUlfVHlwZXNNb2RlbFdpemFyZF9sYWJlbD1cdTdjN2JcdTU3OGJcdTZhMjFcdTU3OGIKK19VSV9UeXBlc01vZGVsV2l6YXJkX2Rlc2NyaXB0aW9uPVx1NTIxYlx1NWVmYVx1NGUwMFx1NGUyYVx1NjViMFx1NzY4NFx1NzljZFx1N2M3Ylx1NmEyMVx1NTc4YgorCitfVUlfVHlwZXNFZGl0b3JfbGFiZWw9XHU3YzdiXHU1NzhiXHU2YTIxXHU1NzhiXHU3ZjE2XHU4ZjkxXHU1NjY4CisKK19VSV9UeXBlc0VkaXRvckZpbGVuYW1lRGVmYXVsdEJhc2U9XHU2MjExXHU3Njg0CitfVUlfVHlwZXNFZGl0b3JGaWxlbmFtZUV4dGVuc2lvbnM9XHU3YzdiXHU1NzhiCisKK19VSV9Qb3B1bGF0aW9uTGFiZWxfdmFsaWRZZWFyX2ZlYXR1cmU9XHU2NzA5XHU2NTQ4XHU1ZTc0CitfVUlfUG9wdWxhdGlvbkxhYmVsX25leHRQb3B1bGF0aW9uTGFiZWxWYWx1ZV9mZWF0dXJlPVx1NGUwYlx1NGUwMFx1NGUyYVx1NzljZFx1N2ZhNFx1NjgwN1x1N2I3ZVx1NTAzYworX1VJX1BvcHVsYXRpb25MYWJlbF9kZWx0YVBvcHVsYXRpb25MYWJlbFZhbHVlX2ZlYXR1cmU9XHU3OWNkXHU3ZmE0XHU2ODA3XHU3YjdlXHU1ZGVlXHU1MDNjCitfVUlfUG9wdWxhdGlvbkxhYmVsX2N1cnJlbnRUZW1wUG9wdWxhdGlvbkxhYmVsVmFsdWVfZmVhdHVyZT1cdTVmNTNcdTUyNGRcdTRlMzRcdTY1ZjZcdTc2ODRcdTc5Y2RcdTdmYTRcdTY4MDdcdTdiN2VcdTUwM2MKK19VSV9Qb3B1bGF0aW9uTGFiZWxfb3JpZ2luYWxQb3B1bGF0aW9uTGFiZWxWYWx1ZV9mZWF0dXJlPVx1NTM5Zlx1NjcyY1x1NzY4NFx1NzljZFx1N2ZhNFx1NjgwN1x1N2I3ZVx1NTAzYworX1VJX1BvcHVsYXRpb25MYWJlbF95U2NhbGVfZmVhdHVyZT1ZXHU3Njg0XHU1OTI3XHU1YzBmCitfVUlfUG9wdWxhdGlvbkxhYmVsX2N1cnJlbnRZUG9wdWxhdGlvbkxhYmVsVmFsdWVfZmVhdHVyZT1cdTVmNTNcdTUyNGRcdTc5Y2RcdTdmYTRcdTY4MDdcdTdiN2VcdTc2ODRZXHU1MDNjCitfVUlfQXJlYUxhYmVsVmFsdWVfYXZlcmFnZUV4dGVudF9mZWF0dXJlPVx1NWU3M1x1NTc0N1x1ODMwM1x1NTZmNAorX1VJX1BvcHVsYXRpb25Nb2RlbExhYmVsX3R5cGU9XHU3OWNkXHU3ZmE0XHU2YTIxXHU1NzhiXHU2ODA3XHU3YjdlCitfVUlfU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxMYWJlbF90eXBlPVx1NjgwN1x1NTFjNlx1NzljZFx1N2ZhNFx1NmEyMVx1NTc4Ylx1NzY4NFx1NjgwN1x1N2I3ZQorX1VJX1BvcHVsYXRpb25Nb2RlbExhYmVsVmFsdWVfdHlwZT1cdTc5Y2RcdTdmYTRcdTZhMjFcdTU3OGJcdTc2ODRcdTY4MDdcdTdiN2VcdTUwM2MKK19VSV9TdGFuZGFyZFBvcHVsYXRpb25Nb2RlbExhYmVsVmFsdWVfdHlwZT1cdTY4MDdcdTUxYzZcdTc5Y2RcdTdmYTRcdTZhMjFcdTU3OGJcdTY4MDdcdTdiN2VcdTUwM2MKK19VSV9JbnRlZ3JhdGlvbkxhYmVsX3R5cGU9XHU5NmM2XHU2MjEwXHU2ODA3XHU3YjdlCitfVUlfSW50ZWdyYXRpb25MYWJlbFZhbHVlX3R5cGU9XHU5NmM2XHU2MjEwXHU2ODA3XHU3YjdlXHU1MDNjCitfVUlfSW50ZWdyYXRpb25EZWNvcmF0b3JfdHlwZT1cdTk2YzZcdTYyMTBcdTRmZWVcdTk5NzBcdTU2NjgKK19VSV9Qb3B1bGF0aW9uTW9kZWxMYWJlbF9wb3B1bGF0aW9uTGFiZWxfZmVhdHVyZT1cdTc5Y2RcdTdmYTRcdTY4MDdcdTdiN2UKK19VSV9Qb3B1bGF0aW9uTW9kZWxMYWJlbF9wb3B1bGF0aW9uSWRlbnRpZmllcl9mZWF0dXJlPVx1NzljZFx1N2ZhNFx1NjgwN1x1OGJjNlx1N2IyNgorX1VJX1N0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWxfZGVsdGFWYWx1ZV9mZWF0dXJlPVx1NWRlZVx1NTAzYworX1VJX1N0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWxfcHJvYmVWYWx1ZV9mZWF0dXJlPVx1NmQ0Ylx1OGJkNVx1NjgwN1x1N2I3ZQorX1VJX1N0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWxfdGVtcFZhbHVlX2ZlYXR1cmU9XHU2ZTI5XHU1ZWE2XHU1MDNjCitfVUlfU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxMYWJlbF9vcmlnaW5hbFZhbHVlX2ZlYXR1cmU9XHU1MzlmXHU1OWNiXHU1MDNjCitfVUlfU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxMYWJlbF9lcnJvclNjYWxlX2ZlYXR1cmU9XHU5NTE5XHU4YmVmXHU4OWM0XHU2YTIxCitfVUlfU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxMYWJlbFZhbHVlX2NvdW50X2ZlYXR1cmU9XHU4YmExXHU2NTcwCitfVUlfU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxMYWJlbFZhbHVlX2luY2lkZW5jZV9mZWF0dXJlPVx1NTNkMVx1NzVjNVx1NzM4NworX1VJX1N0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWxWYWx1ZV9iaXJ0aHNfZmVhdHVyZT1cdTUxZmFcdTc1MWYKK19VSV9TdGFuZGFyZFBvcHVsYXRpb25Nb2RlbExhYmVsVmFsdWVfZGVhdGhzX2ZlYXR1cmU9XHU2YjdiXHU0ZWExCitfVUlfU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxMYWJlbFZhbHVlX2RlbnNpdHlfZmVhdHVyZT1cdTViYzZcdTVlYTYKK19VSV9Qb3B1bGF0aW9uRWRnZV90eXBlPVx1NzljZFx1N2ZhNFx1OGZiOVx1N2YxOAorX1VJX1BvcHVsYXRpb25FZGdlX3BvcHVsYXRpb25JZGVudGlmaWVyX2ZlYXR1cmU9XHU3OWNkXHU3ZmE0XHU2ODA3XHU4YmM2XHU3YjI2CitfVUlfRWFydGhTY2llbmNlTGFiZWxfdHlwZT1cdTU3MzBcdTc0MDNcdTc5ZDFcdTViNjZcdTY4MDdcdTdiN2UKK19VSV9FYXJ0aFNjaWVuY2VMYWJlbFZhbHVlX3R5cGU9XHU1NzMwXHU3NDAzXHU3OWQxXHU1YjY2XHU2ODA3XHU3YjdlXHU1MDNjCitfVUlfRWFydGhTY2llbmNlTGFiZWxfY3VycmVudEVhcnRoU2NpZW5jZVZhbHVlX2ZlYXR1cmU9XHU1ZjUzXHU1MjRkXHU1NzMwXHU3NDAzXHU3OWQxXHU1YjY2XHU1MDNjCitfVUlfRWFydGhTY2llbmNlTGFiZWxWYWx1ZV9kYXRhX2ZlYXR1cmU9XHU2NTcwXHU2MzZlCitfVUlfRWFydGhTY2llbmNlTGFiZWxWYWx1ZV9kYXRhVHlwZV9mZWF0dXJlPVx1NjU3MFx1NjM2ZVx1N2M3Ylx1NTc4YgorX1VJX0VhcnRoU2NpZW5jZUxhYmVsVmFsdWVfdW5pdHNfZmVhdHVyZT1cdTUzNTVcdTRmNGQKK19VSV9FYXJ0aFNjaWVuY2VMYWJlbFZhbHVlX21lYW5fZmVhdHVyZT1cdTVlNzNcdTU3NDcKK19VSV9FYXJ0aFNjaWVuY2VMYWJlbFZhbHVlX3NkX2ZlYXR1cmU9U0QgKFN0YW5kYXJkIERldmlhdGlvbikKK19VSV9FYXJ0aFNjaWVuY2VMYWJlbFZhbHVlX21pbl9mZWF0dXJlPVx1NjcwMFx1NWMwZgorX1VJX0VhcnRoU2NpZW5jZUxhYmVsVmFsdWVfbWF4X2ZlYXR1cmU9XHU2NzAwXHU1OTI3CitfVUlfRWFydGhTY2llbmNlTGFiZWxWYWx1ZV9tZWRpYW5fZmVhdHVyZT1cdTRlMmRcdTRmNGRcdTY1NzAKK19VSV9FYXJ0aFNjaWVuY2VMYWJlbFZhbHVlX3NrZXduZXNzX2ZlYXR1cmU9XHU1OTMxXHU3NzFmCitfVUlfRWFydGhTY2llbmNlTGFiZWxWYWx1ZV9rdXJ0b3Npc19mZWF0dXJlPVx1NWNmMFx1NWVhNgorX1VJX0VhcnRoU2NpZW5jZUxhYmVsVmFsdWVfcm1zX2ZlYXR1cmU9Uk1TCitfVUlfRWFydGhTY2llbmNlTGFiZWxWYWx1ZV9zYW1wbGVzaXplX2ZlYXR1cmU9XHU2ODM3XHU2NzJjXHU1OTI3XHU1YzBmCitfVUlfRWFydGhTY2llbmNlTGFiZWxWYWx1ZV9yYW5nZV9mZWF0dXJlPVx1ODMwM1x1NTZmNApkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL0FjdGl2YXRvci5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL0FjdGl2YXRvci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEwYWYxYzUKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvQWN0aXZhdG9yLmphdmEKQEAgLTAsMCArMSwxMzEgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9uczsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU3RhdHVzOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5Db25zdGFudHM7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkucGx1Z2luLkFic3RyYWN0VUlQbHVnaW47CitpbXBvcnQgb3JnLm9zZ2kuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHQ7CisKKy8qKgorICogVGhlIGFjdGl2YXRvciBjbGFzcyBjb250cm9scyB0aGUgcGx1Zy1pbiBsaWZlIGN5Y2xlCisgKi8KK3B1YmxpYyBjbGFzcyBBY3RpdmF0b3IgZXh0ZW5kcyBBYnN0cmFjdFVJUGx1Z2luIHsKKworCS8qKgorCSAqIFRoZSBwbHVnLWluIElECisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUExVR0lOX0lEID0gQ29uc3RhbnRzLklEX1JPT1QgKyAiLmRlZmluaXRpb25zIjsKKworCS8vIFRoZSBzaGFyZWQgaW5zdGFuY2UKKwlwcml2YXRlIHN0YXRpYyBBY3RpdmF0b3IgcGx1Z2luOworCisJLyoqCisJICogVGhlIGNvbnN0cnVjdG9yCisJICovCisJcHVibGljIEFjdGl2YXRvcigpIHsKKwkJcGx1Z2luID0gdGhpczsKKwl9CisKKwkvKioKKwkgKiBAcGFyYW0gY29udGV4dAorCSAqIEB0aHJvd3MgRXhjZXB0aW9uCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgc3RhcnQoQnVuZGxlQ29udGV4dCBjb250ZXh0KSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJc3VwZXIuc3RhcnQoY29udGV4dCk7CisJfQorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGx1Z2luI3N0b3Aob3JnLm9zZ2kuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHQpCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgc3RvcChCdW5kbGVDb250ZXh0IGNvbnRleHQpIHRocm93cyBFeGNlcHRpb24geworCQlwbHVnaW4gPSBudWxsOworCQlzdXBlci5zdG9wKGNvbnRleHQpOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIHNoYXJlZCBpbnN0YW5jZQorCSAqIAorCSAqIEByZXR1cm4gdGhlIHNoYXJlZCBpbnN0YW5jZQorCSAqLworCXB1YmxpYyBzdGF0aWMgQWN0aXZhdG9yIGdldERlZmF1bHQoKSB7CisJCXJldHVybiBwbHVnaW47CisJfQorCisJLyoqCisJICogTG9nIGFuIGVycm9yIHRvIHRoZSBJTG9nIGZvciB0aGlzIHBsdWdpbgorCSAqIAorCSAqIEBwYXJhbSBtZXNzYWdlCisJICogICAgICAgICAgICB0aGUgbG9jYWxpemVkIGVycm9yIG1lc3NhZ2UgdGV4dAorCSAqIEBwYXJhbSBleGNlcHRpb24KKwkgKiAgICAgICAgICAgIHRoZSBhc3NvY2lhdGVkIGV4Y2VwdGlvbiwgb3IgbnVsbAorCSAqLworCXB1YmxpYyBzdGF0aWMgdm9pZCBsb2dFcnJvcihTdHJpbmcgbWVzc2FnZSwgVGhyb3dhYmxlIGV4Y2VwdGlvbikgeworCQlwbHVnaW4uZ2V0TG9nKCkubG9nKAorCQkJCW5ldyBTdGF0dXMoSVN0YXR1cy5FUlJPUiwgcGx1Z2luLmdldEJ1bmRsZSgpLmdldFN5bWJvbGljTmFtZSgpLAorCQkJCQkJMCwgbWVzc2FnZSwgZXhjZXB0aW9uKSk7CisJfSAvLyBsb2dFcnJvcgorCisJLyoqCisJICogTG9nIGluZm9ybWF0aW9uIHRvIHRoZSBJTG9nIGZvciB0aGlzIHBsdWdpbgorCSAqIAorCSAqIEBwYXJhbSBtZXNzYWdlCisJICogICAgICAgICAgICB0aGUgbG9jYWxpemVkIGluZm9ybWF0aW9uIG1lc3NhZ2UgdGV4dAorCSAqIEBwYXJhbSBleGNlcHRpb24KKwkgKiAgICAgICAgICAgIHRoZSBhc3NvY2lhdGVkIGV4Y2VwdGlvbiwgb3IgbnVsbAorCSAqLworCXB1YmxpYyBzdGF0aWMgdm9pZCBsb2dJbmZvcm1hdGlvbihTdHJpbmcgbWVzc2FnZSwgVGhyb3dhYmxlIGV4Y2VwdGlvbikgeworCQkvLyBEbyB3ZSBoYXZlIGEgcGx1Z2luPworCQlpZiAocGx1Z2luICE9IG51bGwpIHsKKwkJCS8vIFllcworCQkJcGx1Z2luLmdldExvZygpLmxvZygKKwkJCQkJbmV3IFN0YXR1cyhJU3RhdHVzLklORk8sIHBsdWdpbi5nZXRCdW5kbGUoKS5nZXRTeW1ib2xpY05hbWUoKSwKKwkJCQkJCQkwLCBtZXNzYWdlLCBleGNlcHRpb24pKTsKKwkJfQorCQllbHNlIHsKKwkJCS8vIE5vCisJCQlTeXN0ZW0ub3V0LnByaW50bG4obWVzc2FnZSk7CisJCQkvLyBFeGNlcHRpb24/CisJCQlpZiAoZXhjZXB0aW9uICE9IG51bGwpIHsKKwkJCQkvLyBZZXMKKwkJCQlTeXN0ZW0ub3V0LnByaW50bG4oZXhjZXB0aW9uLmdldE1lc3NhZ2UoKSk7CisJCQl9IC8vIGlmIAorCQl9CisJfSAvLyBsb2dJbmZvcm1hdGlvbgorCQorCQorCS8qKgorCSAqIExvZyBpbmZvcm1hdGlvbiB0byB0aGUgSUxvZyBmb3IgdGhpcyBwbHVnaW4KKwkgKiBUaGUgbWV0aG9kIGlzIG92ZXJsb2FkZWQgdG8gYWxsb3cgZm9yIGxvZ0luZm9ybWF0aW9uIHdpdGhvdXQgYW4gZXJyb3IgCisJICogbWV0aG9kIHNldHMgdGhlIGVycm9yIHRvIG51bGwuIFRoaXMgc2hvdWxkIGJlIHVzZWQgaW5zdGVhZCBvZiBTeXN0ZW0ub3V0LnByaW50bG4KKwkgKiB0aHJvdWdob3V0IHRoZSBjb2RlLgorCSAqIEBwYXJhbSBtZXNzYWdlCisJICogICAgICAgICAgICB0aGUgbG9jYWxpemVkIGluZm9ybWF0aW9uIG1lc3NhZ2UgdGV4dAorCSAqCisJICovCisJcHVibGljIHN0YXRpYyB2b2lkIGxvZ0luZm9ybWF0aW9uKFN0cmluZyBtZXNzYWdlKSB7CisJCS8vIERvIHdlIGhhdmUgYSBwbHVnaW4/CisJCWlmIChwbHVnaW4gIT0gbnVsbCkgeworCQkJLy8gWWVzCisJCQlwbHVnaW4uZ2V0TG9nKCkubG9nKAorCQkJCQluZXcgU3RhdHVzKElTdGF0dXMuSU5GTywgcGx1Z2luLmdldEJ1bmRsZSgpLmdldFN5bWJvbGljTmFtZSgpLAorCQkJCQkJCTAsIG1lc3NhZ2UsIG51bGwpKTsKKwkJfQorCQllbHNlIHsKKwkJCS8vIE5vCisJCQlTeXN0ZW0ub3V0LnByaW50bG4obWVzc2FnZSk7CisJCX0KKwl9IC8vIGxvZ0luZm9ybWF0aW9uCit9CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvTG9jYXRpb25VdGlsaXR5LmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvTG9jYXRpb25VdGlsaXR5LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWRkMDI0YwotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy9Mb2NhdGlvblV0aWxpdHkuamF2YQpAQCAtMCwwICsxLDQwMyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOSwyMDEwIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9uczsKKworaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7CitpbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7CitpbXBvcnQgamF2YS51dGlsLkhhc2hTZXQ7CitpbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOworaW1wb3J0IGphdmEudXRpbC5MaXN0OworaW1wb3J0IGphdmEudXRpbC5NYXA7CitpbXBvcnQgamF2YS51dGlsLlNldDsKK2ltcG9ydCBqYXZhLnV0aWwuU29ydGVkU2V0OworaW1wb3J0IGphdmEudXRpbC5UcmVlU2V0OworCitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUNvbnRhaW5lcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUmVzb3VyY2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLkVMaXN0OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5FTWFwOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5VUkk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLlNURU1VUkk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLlV0aWxpdHk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5JZGVudGlmaWFibGU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkVkZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkdyYXBoOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5MYWJlbFZhbHVlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5Ob2RlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5Nb2RlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5Db21tb25Cb3JkZXJSZWxhdGlvbnNoaXBMYWJlbFZhbHVlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLlJlbGF0aXZlUGh5c2ljYWxSZWxhdGlvbnNoaXBMYWJlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5SZWxhdGl2ZVBoeXNpY2FsUmVsYXRpb25zaGlwTGFiZWxWYWx1ZTsKKworCisvKioKKyAqIFV0aWxpdHkgdG8gZXh0cmFjdCBub2RlIGtleXMgZnJvbSBhIHByb2plY3QKKyAqLworcHVibGljIGNsYXNzIExvY2F0aW9uVXRpbGl0eSB7CisKKwlzdGF0aWMgTWFwPFN0cmluZywgU2V0PFN0cmluZz4+IFtdIHRyZWVJU09LZXlNYXBzID0gbmV3IE1hcFs0XTsKKwlzdGF0aWMgTWFwPFN0cmluZywgVVJJPiBpc29LZXlVUklNYXAgPSBuZXcgSGFzaE1hcDxTdHJpbmcsIFVSST4oKTsKKwlzdGF0aWMgTGlzdDxNb2RlbD4gcHJvY2Vzc2VkTW9kZWxzID0gbmV3IEFycmF5TGlzdDxNb2RlbD4oKTsKKwkKKwlzdGF0aWMgYm9vbGVhbiBsb2FkZWQgPSBmYWxzZTsKKwkKKwlwdWJsaWMgc3RhdGljIHZvaWQgcmVzZXQoKSB7dHJlZUlTT0tleU1hcHMgPSBuZXcgTWFwWzRdO2lzb0tleVVSSU1hcC5jbGVhcigpO3Byb2Nlc3NlZE1vZGVscy5jbGVhcigpO2xvYWRlZD1mYWxzZTt9CisKKwlwdWJsaWMgc3RhdGljIFNldDxTdHJpbmc+IGdldEtleXMoSVByb2plY3QgcHJvamVjdCwgaW50IGxldmVsLCBTdHJpbmcgcGFyZW50KSB7CisJCQorCQlpZighbG9hZGVkKSB7CisJCQlmb3IoaW50IGk9MDtpPDQ7KytpKSB0cmVlSVNPS2V5TWFwc1tpXSA9IG5ldyBIYXNoTWFwPFN0cmluZywgU2V0PFN0cmluZz4+KCk7CisJCQlJQ29udGFpbmVyIG1vZGVsRm9sZGVyID0gcHJvamVjdC5nZXRGb2xkZXIoIm1vZGVscyIpOworCQkJCisJCQlJUmVzb3VyY2VbXSBtb2RlbHMgPSBudWxsOworCQkJdHJ5IHsKKwkJCQltb2RlbHMgPSBtb2RlbEZvbGRlci5tZW1iZXJzKCk7CisJCQl9IGNhdGNoKEV4Y2VwdGlvbiBlKSB7CisJCQkJZS5wcmludFN0YWNrVHJhY2UoKTsKKwkJCX0KKwkJCWlmIChtb2RlbHMgIT0gbnVsbCkgeworCQkJCWZvcihJUmVzb3VyY2Ugcjptb2RlbHMpIHsKKwkJCQkJLy8gaWdub3JlIHN5c3RlbSBmaWxlcworCQkJCQlpZihyLmdldE5hbWUoKS5zdGFydHNXaXRoKCIuIikpIGNvbnRpbnVlOworCQkJCQkKKwkJCQkJdHJ5IHsKKwkJCQkJCVVSSSB1cmkgPSBVUkkuY3JlYXRlVVJJKHIuZ2V0TG9jYXRpb25VUkkoKS50b1N0cmluZygpKTsKKwkJCQkJCUlkZW50aWZpYWJsZSBpZCA9IFV0aWxpdHkuZ2V0SWRlbnRpZmlhYmxlKHVyaSk7CisJCQkJCQlpZihpZCBpbnN0YW5jZW9mIE1vZGVsKSBwcm9jZXNzTW9kZWwoKE1vZGVsKWlkKTsKKwkJCQkJCQkKKwkJCQkJfSBjYXRjaChFeGNlcHRpb24gZSkgeworCQkJCQkJLy8gU2tpcCBiYWQgZmlsZQorCQkJCQl9CisJCQkJfQorCQkJfQorCQkKKwkJCUlDb250YWluZXIgZ3JhcGhzRm9sZGVyID0gcHJvamVjdC5nZXRGb2xkZXIoImdyYXBocyIpOworCQkJSVJlc291cmNlW10gZ3JhcGhzID0gbnVsbDsKKwkJCXRyeSB7CisJCQkJZ3JhcGhzID0gZ3JhcGhzRm9sZGVyLm1lbWJlcnMoKTsKKwkJCX0gY2F0Y2goRXhjZXB0aW9uIGUpIHsKKwkJCQllLnByaW50U3RhY2tUcmFjZSgpOworCQkJfQorCQkJaWYgKGdyYXBocyAhPSBudWxsKSB7CisJCQkJZm9yKElSZXNvdXJjZSByOmdyYXBocykgeworCQkJCQkvLyBpZ25vcmUgc3lzdGVtIGZpbGVzCisJCQkJCWlmKHIuZ2V0TmFtZSgpLnN0YXJ0c1dpdGgoIi4iKSkgY29udGludWU7CisJCQkJCQorCQkJCQl0cnkgeworCQkJCQkJVVJJIHVyaSA9IFVSSS5jcmVhdGVVUkkoci5nZXRMb2NhdGlvblVSSSgpLnRvU3RyaW5nKCkpOworCQkJCQkJSWRlbnRpZmlhYmxlIGlkID0gVXRpbGl0eS5nZXRJZGVudGlmaWFibGUodXJpKTsKKwkJCQkJCWlmKGlkIGluc3RhbmNlb2YgR3JhcGgpIHByb2Nlc3NHcmFwaCgoR3JhcGgpaWQpOworCQkJCQkJCQorCQkJCQl9IGNhdGNoKEV4Y2VwdGlvbiBlKSB7CisJCQkJCQkvLyBTa2lwIGJhZCBmaWxlCisJCQkJCX0KKwkJCQorCQkJCX0JCisJCQl9CisJCQlsb2FkZWQgPSB0cnVlOworCQl9CisJCQorCQlTZXQ8U3RyaW5nPnJlc3VsdCA9IG51bGw7CisJCQorCQlpZihwYXJlbnQgIT0gbnVsbCkgcmVzdWx0ID0gdHJlZUlTT0tleU1hcHNbbGV2ZWwtMV0uZ2V0KHBhcmVudCk7CisJCWVsc2UgcmVzdWx0ID0gdHJlZUlTT0tleU1hcHNbbGV2ZWxdLmtleVNldCgpOworCQlpZihyZXN1bHQhPSBudWxsKSAKKwkJCXJldHVybiByZXN1bHQ7CisJCXJldHVybiBuZXcgSGFzaFNldDxTdHJpbmc+KCk7IC8vIHJldHVybiBlbXB0eSBhcnJheQorCX0KKwkKKwlwcml2YXRlIHN0YXRpYyB2b2lkIHByb2Nlc3NNb2RlbChNb2RlbCBtKSB7CisJCXByb2Nlc3NlZE1vZGVscy5hZGQobSk7CisJCS8vIEZpcnN0IGdldCBzdWIgbW9kZWxzCisJCWZvcihNb2RlbCBtMjptLmdldE1vZGVscygpKSAKKwkJCWlmKCFwcm9jZXNzZWRNb2RlbHMuY29udGFpbnMobTIpKSBwcm9jZXNzTW9kZWwobTIpOworCQorCQkvLyBUbyB0aGUgZ3JhcGhzIGluIHRoZSBtb2RlbAorCQlFTGlzdDxHcmFwaD5ncmFwaHMgPSBtLmdldEdyYXBocygpOworCQlmb3IoR3JhcGggZzpncmFwaHMpIAorCQkJcHJvY2Vzc0dyYXBoKGcpOworCX0KKwkKKwlwcml2YXRlIHN0YXRpYyB2b2lkIHByb2Nlc3NHcmFwaChHcmFwaCBnKSB7CisJCS8vIERvIHRoZSBlZGdlcyBmaXJzdCB0byBnZXQgdGhlIGhpZXJhcmNoeQorCQkKKwkJZm9yKEVkZ2UgZTpnLmdldEVkZ2VzKCkudmFsdWVzKCkpIHsKKwkJCWlmKGUuZ2V0TGFiZWwoKS5nZXRDdXJyZW50VmFsdWUoKSBpbnN0YW5jZW9mIFJlbGF0aXZlUGh5c2ljYWxSZWxhdGlvbnNoaXBMYWJlbFZhbHVlKSB7CisJCQkJCisJCQkJaW50IHNvdXJjZUxldmVsID0gVXRpbGl0eS5rZXlMZXZlbChlLmdldE5vZGVBVVJJKCkubGFzdFNlZ21lbnQoKSk7CisJCQkJaW50IHRhcmdldExldmVsID0gVXRpbGl0eS5rZXlMZXZlbChlLmdldE5vZGVCVVJJKCkubGFzdFNlZ21lbnQoKSk7CisJCQkJU3RyaW5nIHNvdXJjZUtleSA9IGUuZ2V0Tm9kZUFVUkkoKS5sYXN0U2VnbWVudCgpOworCQkJCVN0cmluZyB0YXJnZXRLZXkgPSBlLmdldE5vZGVCVVJJKCkubGFzdFNlZ21lbnQoKTsKKwkJCQkKKwkJCQlpZih0cmVlSVNPS2V5TWFwc1tzb3VyY2VMZXZlbF0uY29udGFpbnNLZXkoc291cmNlS2V5KSkKKwkJCQkJdHJlZUlTT0tleU1hcHNbc291cmNlTGV2ZWxdLmdldChzb3VyY2VLZXkpLmFkZCh0YXJnZXRLZXkpOworCQkJCWVsc2UgeworCQkJCQlTb3J0ZWRTZXQ8U3RyaW5nPm5sID0gbmV3IFRyZWVTZXQ8U3RyaW5nPigpOworCQkJCQl0cmVlSVNPS2V5TWFwc1tzb3VyY2VMZXZlbF0ucHV0KHNvdXJjZUtleSwgbmwpOworCQkJCQlubC5hZGQodGFyZ2V0S2V5KTsKKwkJCQl9CisgCQkJCQkKKwkJCQlpZighdHJlZUlTT0tleU1hcHNbdGFyZ2V0TGV2ZWxdLmNvbnRhaW5zS2V5KHRhcmdldEtleSkpIHsKKwkJCQkJLy8gQWRkIHdpdGggZW1wdHkgY2hpbGQgc2V0CisJCQkJCVRyZWVTZXQ8U3RyaW5nPm5sID0gbmV3IFRyZWVTZXQ8U3RyaW5nPigpOworCQkJCQl0cmVlSVNPS2V5TWFwc1t0YXJnZXRMZXZlbF0ucHV0KHRhcmdldEtleSwgbmwpOworCQkJCX0KKwkJCQkKKwkJCQlpc29LZXlVUklNYXAucHV0KHNvdXJjZUtleSwgZS5nZXROb2RlQVVSSSgpKTsKKwkJCQlpc29LZXlVUklNYXAucHV0KHRhcmdldEtleSwgZS5nZXROb2RlQlVSSSgpKTsKKwkJCQkJCisJCQl9CisJCX0KKwkJCisJCS8vIE5vdyBmaW5kIGRhbmdsaW5nIG5vZGVzCisJCUVNYXA8VVJJLCBOb2RlPiBtYXAgPSBnLmdldE5vZGVzKCk7CisJCWZvcihVUkkgdTptYXAua2V5U2V0KCkpIHsKKwkJCWludCBsID0gVXRpbGl0eS5rZXlMZXZlbCh1Lmxhc3RTZWdtZW50KCkpOworCQkJaWYobCA9PSAtMSkgY29udGludWU7IC8vIG5vIHdvcmxkCisJCQlTdHJpbmcga2V5ID0gdS5sYXN0U2VnbWVudCgpOworCQkJaWYoIXRyZWVJU09LZXlNYXBzW2xdLmNvbnRhaW5zS2V5KGtleSkpIHsKKwkJCQlUcmVlU2V0PFN0cmluZz5ubCA9IG5ldyBUcmVlU2V0PFN0cmluZz4oKTsKKwkJCQl0cmVlSVNPS2V5TWFwc1tsXS5wdXQoa2V5LCBubCk7CisJCQkJaXNvS2V5VVJJTWFwLnB1dChrZXksIHUpOworCQkJfQkJCQorCQl9CisJfQorCQorCQorCS8qKgorCSAqIFBsYWNlIHRoZSBlZGdlcyBmcm9tIHRoZSBncmFwaCBpbiBhIE1hcCBrZXllZCBieSB0aGUgVVJJIG9mIHRoZSBlZGdlLgorCSAqIFRoaXMgYXZvaWRzIGR1cGxpY2F0ZXMgaW4gY2FzZSBzYW1lIGdyYXBoIGV4aXN0cyBpbiBtdWx0aXBsZSBtb2RlbHMgCisJICogQHBhcmFtIHByb2plY3QKKwkgKiBAcmV0dXJuCisJICovCisJcHVibGljIHN0YXRpYyBTZXQ8RWRnZT4gZ2V0Q29tbW9uQm9yZGVyRWRnZXMoSVByb2plY3QgcHJvamVjdCwgVVJJIGxvY2F0aW9uKSB7CisJICAgIE1hcDxTdHJpbmcsRWRnZT4gY2JFZGdlcyA9IG5ldyBIYXNoTWFwPFN0cmluZyxFZGdlPigpOworCQorCQlJQ29udGFpbmVyIG1vZGVsRm9sZGVyID0gcHJvamVjdC5nZXRGb2xkZXIoIm1vZGVscyIpOwkKKwkJSVJlc291cmNlW10gbW9kZWxzID0gbnVsbDsKKwkJdHJ5IHsKKwkJCW1vZGVscyA9IG1vZGVsRm9sZGVyLm1lbWJlcnMoKTsKKwkJfSBjYXRjaChFeGNlcHRpb24gZSkgeworCQkJZS5wcmludFN0YWNrVHJhY2UoKTsKKwkJfQorCQlpZiAobW9kZWxzICE9IG51bGwpIHsKKwkJCWZvcihJUmVzb3VyY2Ugcjptb2RlbHMpIHsKKwkJCQkvLyBpZ25vcmUgc3lzdGVtIGZpbGVzCisJCQkJaWYoci5nZXROYW1lKCkuc3RhcnRzV2l0aCgiLiIpKSBjb250aW51ZTsKKwkJCQkKKwkJCQl0cnkgeworCQkJCQlVUkkgdXJpID0gVVJJLmNyZWF0ZVVSSShyLmdldExvY2F0aW9uVVJJKCkudG9TdHJpbmcoKSk7CisJCQkJCUlkZW50aWZpYWJsZSBpZCA9IFV0aWxpdHkuZ2V0SWRlbnRpZmlhYmxlKHVyaSk7CisJCQkJCUdyYXBoIGcgPSAoKE1vZGVsKWlkKS5nZXRDYW5vbmljYWxHcmFwaChTVEVNVVJJLmNyZWF0ZVVSSSgiIiksIG51bGwsIG51bGwpOworCQkJCQlpZihpZCBpbnN0YW5jZW9mIE1vZGVsKSBjYkVkZ2VzLnB1dEFsbChnZXRHcmFwaENvbW1vbkJvcmRlckVkZ2VzKGcsIGxvY2F0aW9uKSk7CisJCQkJCQkKKwkJCQl9IGNhdGNoKEV4Y2VwdGlvbiBlKSB7CisJCQkJCS8vIFNraXAgYmFkIGZpbGUKKwkJCQl9CisJCQl9CisJCX0KKwkKKwkJLy8gT25seSBkbyB0aGUgZWRnZXMgaW4gdGhlIGdyYXBocyBmb2xkZXIgaWYgdGhlIHVzZXIgaGFzbid0IHNwZWNpZmllZCBhCisJCS8vIGxvY2F0aW9uLCBzaW5jZSB3ZSBuZWVkIHRvIHJlc29sdmUgdGhlIFVSSSdzIHRvIHN1cHBvcnQgbG9jYXRpb25zCisJCWlmKGxvY2F0aW9uID09IG51bGwgfHwgbG9jYXRpb24udG9TdHJpbmcoKS50cmltKCkuZXF1YWxzKCIiKSkgeworCQkJSUNvbnRhaW5lciBncmFwaHNGb2xkZXIgPSBwcm9qZWN0LmdldEZvbGRlcigiZ3JhcGhzIik7CisJCQlJUmVzb3VyY2VbXSBncmFwaHMgPSBudWxsOworCQkJdHJ5IHsKKwkJCQlncmFwaHMgPSBncmFwaHNGb2xkZXIubWVtYmVycygpOworCQkJfSBjYXRjaChFeGNlcHRpb24gZSkgeworCQkJCWUucHJpbnRTdGFja1RyYWNlKCk7CisJCQl9CisJCQlpZiAoZ3JhcGhzICE9IG51bGwpIHsKKwkJCQlmb3IoSVJlc291cmNlIHI6Z3JhcGhzKSB7CisJCQkJCS8vIGlnbm9yZSBzeXN0ZW0gZmlsZXMKKwkJCQkJaWYoci5nZXROYW1lKCkuc3RhcnRzV2l0aCgiLiIpKSBjb250aW51ZTsKKwkJCQkJCisJCQkJCXRyeSB7CisJCQkJCQlVUkkgdXJpID0gVVJJLmNyZWF0ZVVSSShyLmdldExvY2F0aW9uVVJJKCkudG9TdHJpbmcoKSk7CisJCQkJCQlJZGVudGlmaWFibGUgaWQgPSBVdGlsaXR5LmdldElkZW50aWZpYWJsZSh1cmkpOworCQkJCQkJaWYoaWQgaW5zdGFuY2VvZiBHcmFwaCkgY2JFZGdlcy5wdXRBbGwoZ2V0R3JhcGhDb21tb25Cb3JkZXJFZGdlcygoR3JhcGgpaWQsIGxvY2F0aW9uKSk7CisJCQkJCQkJCisJCQkJCX0gY2F0Y2goRXhjZXB0aW9uIGUpIHsKKwkJCQkJCS8vIFNraXAgYmFkIGZpbGUKKwkJCQkJfQorCQkJCX0KKwkJCX0KKwkJfQorCQlTZXQ8RWRnZT4gcmV0VmFsID0gbmV3IEhhc2hTZXQ8RWRnZT4oKTsKKwkJcmV0VmFsLmFkZEFsbChjYkVkZ2VzLnZhbHVlcygpKTsKKwkJcmV0dXJuIHJldFZhbDsKKwl9CisJCisJLyoqKgorCSAqIFBsYWNlIHRoZSBlZGdlcyBmcm9tIHRoZSBncmFwaCBpbiBhIE1hcCBrZXllZCBieSB0aGUgVVJJIG9mIHRoZSBlZGdlLgorCSAqIFRoaXMgYXZvaWRzIGR1cGxpY2F0ZXMgaW4gY2FzZSBzYW1lIGdyYXBoIGV4aXN0cyBpbiBtdWx0aXBsZSBtb2RlbHMKKwkgKiBAcGFyYW0gZworCSAqLworCXByaXZhdGUgc3RhdGljIE1hcDxTdHJpbmcsRWRnZT4gZ2V0R3JhcGhDb21tb25Cb3JkZXJFZGdlcyhHcmFwaCBnLCBVUkkgbG9jYXRpb24pIHsKKwkJCisJCU1hcDxTdHJpbmcsRWRnZT4gY2JFZGdlcyA9IG5ldyBIYXNoTWFwPFN0cmluZyxFZGdlPigpOworCQlmb3IoRWRnZSBlOmcuZ2V0RWRnZXMoKS52YWx1ZXMoKSkgeworCQkJaWYoZS5nZXRMYWJlbCgpLmdldEN1cnJlbnRWYWx1ZSgpIGluc3RhbmNlb2YgQ29tbW9uQm9yZGVyUmVsYXRpb25zaGlwTGFiZWxWYWx1ZSkgeworCQkJCVN0cmluZyB1cmlLZXkgPSBlLmdldFVSSSgpLmxhc3RTZWdtZW50KCk7CisJCQkJaWYobG9jYXRpb24gIT0gbnVsbCAmJiAhbG9jYXRpb24udG9TdHJpbmcoKS50cmltKCkuZXF1YWxzKCIiKSAgCisJCQkJCQkmJiBpc1NlbGZPckNoaWxkKGUuZ2V0QSgpLCBsb2NhdGlvbi5sYXN0U2VnbWVudCgpKSAmJiBpc1NlbGZPckNoaWxkKGUuZ2V0QigpLCBsb2NhdGlvbi5sYXN0U2VnbWVudCgpKSkKKwkJCQkJY2JFZGdlcy5wdXQodXJpS2V5LGUpOworCQkJCWVsc2UgaWYobG9jYXRpb24gPT0gbnVsbCB8fCBsb2NhdGlvbi50b1N0cmluZygpLnRyaW0oKS5lcXVhbHMoIiIpKQorCQkJCQljYkVkZ2VzLnB1dCh1cmlLZXksZSk7CisJCQl9CQorCQl9CisJCXJldHVybiBjYkVkZ2VzOworCX0vL2dldEdyYXBoQ29tbW9uQm9yZGVyRWRnZXMKKwkKKwkvKioKKwkgKiBSZXRyaWV2ZSBhbGwgbm9kZXMgaW4gYSBwcm9qZWN0CisJICogQHBhcmFtIHByb2plY3QKKwkgKiBAcGFyYW0gbG9jYXRpb24gVGhlIHBhcmVudCBsb2NhdGlvbgorCSAqIEByZXR1cm4gU2V0PE5vZGU+IEFsbCBub2RlcyBpbiBwYXJlbnQgYW5kIGNoaWxkcmVuCisJICovCisJcHVibGljIHN0YXRpYyBTZXQ8Tm9kZT4gZ2V0Tm9kZXMoSVByb2plY3QgcHJvamVjdCwgVVJJIGxvY2F0aW9uKSB7CisJICAgIFNldDxOb2RlPiBhbGxOb2RlcyA9IG5ldyBIYXNoU2V0PE5vZGU+KCk7CisJCisJCUlDb250YWluZXIgbW9kZWxGb2xkZXIgPSBwcm9qZWN0LmdldEZvbGRlcigibW9kZWxzIik7CQorCQlJUmVzb3VyY2VbXSBtb2RlbHMgPSBudWxsOworCQl0cnkgeworCQkJbW9kZWxzID0gbW9kZWxGb2xkZXIubWVtYmVycygpOworCQl9IGNhdGNoKEV4Y2VwdGlvbiBlKSB7CisJCQllLnByaW50U3RhY2tUcmFjZSgpOworCQl9CisJCWlmIChtb2RlbHMgIT0gbnVsbCkgeworCQkJZm9yKElSZXNvdXJjZSByOm1vZGVscykgeworCQkJCS8vIGlnbm9yZSBzeXN0ZW0gZmlsZXMKKwkJCQlpZihyLmdldE5hbWUoKS5zdGFydHNXaXRoKCIuIikpIGNvbnRpbnVlOworCQkJCQorCQkJCXRyeSB7CisJCQkJCVVSSSB1cmkgPSBVUkkuY3JlYXRlVVJJKHIuZ2V0TG9jYXRpb25VUkkoKS50b1N0cmluZygpKTsKKwkJCQkJTW9kZWwgbW9kID0gKE1vZGVsKVV0aWxpdHkuZ2V0SWRlbnRpZmlhYmxlKHVyaSk7CisJCQkJCUdyYXBoIGcgPSBtb2QuZ2V0Q2Fub25pY2FsR3JhcGgoU1RFTVVSSS5jcmVhdGVVUkkoIiIpLCBudWxsLCBudWxsKTsKKwkJCQkJYWRkR3JhcGhOb2RlcyhnLCBhbGxOb2RlcywgbG9jYXRpb24pOworCQkJCQkJCisJCQkJfSBjYXRjaChFeGNlcHRpb24gZSkgeworCQkJCQkvLyBTa2lwIGJhZCBmaWxlCisJCQkJfQorCQkJfQorCQl9CisJCXJldHVybiBhbGxOb2RlczsKKwl9CisKKwkvKioqCisJICogUmV0cmlldmUgYWxsIG5vZGVzIGZvciB0aGUgbG9jYXRpb24gaW4gdGhlIGdyYXBoCisJICogQHBhcmFtIGcKKwkgKiBAcGFyYW0gYWxsTm9kZXMgUmVzdWx0cyBhcmUgc3RvcmVkIGhlcmUKKwkgKiBAcGFyYW0gbG9jYXRpb24gVGhlIGxvY2F0aW9uLCBvciBudWxsIGlmIGFsbCBub2RlcyBzaG91bGQgYmUgcmV0cmlldmVkCisJICovCisJcHJpdmF0ZSBzdGF0aWMgdm9pZCBhZGRHcmFwaE5vZGVzKEdyYXBoIGcsIFNldDxOb2RlPmFsbE5vZGVzLCBVUkkgbG9jYXRpb24pIHsKKwkJZm9yKE5vZGUgbjpnLmdldE5vZGVzKCkudmFsdWVzKCkpIHsKKwkJCVN0cmluZyB1cmlLZXkgPSBuLmdldFVSSSgpLmxhc3RTZWdtZW50KCk7CisJCQlpZihsb2NhdGlvbiAhPSBudWxsICYmICFsb2NhdGlvbi50b1N0cmluZygpLnRyaW0oKS5lcXVhbHMoIiIpICAKKwkJCQkJCSYmIGlzU2VsZk9yQ2hpbGQobiwgbG9jYXRpb24ubGFzdFNlZ21lbnQoKSkgJiYKKwkJCQkJCSFjb250YWluc05vZGVVUkkobi5nZXRVUkkoKSwgYWxsTm9kZXMpKQorCQkJCQlhbGxOb2Rlcy5hZGQobik7CisJCQkJZWxzZSBpZihsb2NhdGlvbiA9PSBudWxsIHx8IGxvY2F0aW9uLnRvU3RyaW5nKCkudHJpbSgpLmVxdWFscygiIikgJiYgISBhbGxOb2Rlcy5jb250YWlucyhuKQorCQkJCQkJJiYgIWNvbnRhaW5zTm9kZVVSSShuLmdldFVSSSgpLCBhbGxOb2RlcykpCisJCQkJCWFsbE5vZGVzLmFkZChuKTsKKwkJCQkKKwkJfQorCX0vL2dldEdyYXBoQ29tbW9uQm9yZGVyRWRnZXMKKwkKKwlwcml2YXRlIHN0YXRpYyBib29sZWFuIGNvbnRhaW5zTm9kZVVSSShVUkkgdXJpLCBTZXQ8Tm9kZT5ub2RlcykgeworCQlmb3IoTm9kZSBuOm5vZGVzKSBpZihuLmdldFVSSSgpLmVxdWFscyh1cmkpKSByZXR1cm4gdHJ1ZTsKKwkJcmV0dXJuIGZhbHNlOworCX0KKworCQorCXB1YmxpYyBzdGF0aWMgVVJJIGdldFVSSUZyb21JU09LZXkoU3RyaW5nIGtleSkgeworCQlyZXR1cm4gaXNvS2V5VVJJTWFwLmdldChrZXkpOworCX0KKwkKKwlwcm90ZWN0ZWQgc3RhdGljIGJvb2xlYW4gaXNTZWxmT3JDaGlsZChOb2RlICBuLCBTdHJpbmcgcGFyZW50KSB7CisJCWlmKG4uZ2V0VVJJKCkubGFzdFNlZ21lbnQoKS5lcXVhbHMocGFyZW50KSkgcmV0dXJuIHRydWU7CisJCXJldHVybiBoYXNQYXJlbnQobiwgcGFyZW50KTsKKwl9CisJCisJcHJvdGVjdGVkIHN0YXRpYyBib29sZWFuIGhhc1BhcmVudChOb2RlIG4sIFN0cmluZyBrZXkpIHsKKwkJZm9yKEVkZ2UgZTpuLmdldEVkZ2VzKCkpIHsKKwkJCS8vIE1ha2Ugc3VyZSBpdCdzIGEgcGh5c2ljYWwgY29udGFpbm1lbnQgZWRnZQorCQkJYm9vbGVhbiBwaHlzID0gZS5nZXRMYWJlbCgpIGluc3RhbmNlb2YgUmVsYXRpdmVQaHlzaWNhbFJlbGF0aW9uc2hpcExhYmVsOworCQkJaWYoIXBoeXMpIAorCQkJCWNvbnRpbnVlOworCQkJaWYoZS5nZXRBKCkuZ2V0VVJJKCkubGFzdFNlZ21lbnQoKS5lcXVhbHMoa2V5KSkgcmV0dXJuIHRydWU7CisJCQllbHNlIGlmKFV0aWxpdHkua2V5TGV2ZWwoZS5nZXRBKCkuZ2V0VVJJKCkubGFzdFNlZ21lbnQoKSkgPCBVdGlsaXR5LmtleUxldmVsKG4uZ2V0VVJJKCkubGFzdFNlZ21lbnQoKSkpCisJCQkJcmV0dXJuIGhhc1BhcmVudChlLmdldEEoKSwga2V5KTsKKwkJfQorCQlyZXR1cm4gZmFsc2U7CisJfQorCQorCS8qKgorCSAqIGZpbmRzIGFsbCB0aGUgY2hpbGQgbm9kZXMgb2YgYSBwYXJlbnQgKGRpcmVjdCBjaGlsZHJlbiBhbmQgY2hpbGRyZW4gb2YgY2hpbGRyZW4gZXRjLi4uKQorCSAqIGFuZCByZXR1cm5zIHRoZW0gaW4gYSBzZXQuIAorCSAqIENoaWxkIGlzIGRlZmluZWQgYnkgYSBjb250YWlubWVudCByZWxhdGlvbnNoaXAKKwkgKiBAcGFyYW0gcGFyZW50CisJICovCisJcHVibGljIHN0YXRpYyBTZXQ8Tm9kZT4gZ2V0QWxsQ2hpbGRyZW4oTm9kZSBwYXJlbnQpIHsKKwkJU2V0PE5vZGU+IGFsbENoaWxkcmVuID0gbmV3IEhhc2hTZXQ8Tm9kZT4oKTsKKwkJU2V0PE5vZGU+IHRvRG9TZXQgPSBnZXRDaGlsZFNldChwYXJlbnQpOworCQl0b0RvU2V0LnJlbW92ZShwYXJlbnQpOworCQlTZXQ8Tm9kZT4gZGlyZWN0Q2hpbGRyZW4gID0gbmV3IEhhc2hTZXQ8Tm9kZT4oKTsKKwkJCisJCXdoaWxlKHRvRG9TZXQuc2l6ZSgpID49MSkgeworCQkJZGlyZWN0Q2hpbGRyZW4uYWRkQWxsKHRvRG9TZXQpOworCQkJSXRlcmF0b3I8Tm9kZT4gaXRlciA9IGRpcmVjdENoaWxkcmVuLml0ZXJhdG9yKCk7CisJCQl3aGlsZShpdGVyIT1udWxsICYmIGl0ZXIuaGFzTmV4dCgpKSB7CisJCQkJTm9kZSBuZXh0ID0gaXRlci5uZXh0KCk7CisJCQkJYWxsQ2hpbGRyZW4uYWRkKG5leHQpOworCQkJCVNldDxOb2RlPiBuZXh0U2V0ID0gZ2V0Q2hpbGRTZXQobmV4dCk7CisJCQkJbmV4dFNldC5yZW1vdmVBbGwoYWxsQ2hpbGRyZW4pOworCQkJCXRvRG9TZXQuYWRkQWxsKG5leHRTZXQpOworCQkJfQorCQkJdG9Eb1NldC5yZW1vdmVBbGwoZGlyZWN0Q2hpbGRyZW4pOworCQkJZGlyZWN0Q2hpbGRyZW4uY2xlYXIoKTsKKwkJfQorCQlyZXR1cm4gYWxsQ2hpbGRyZW47CisJfQorCQorCQorCS8qKgorCSAqIGZpbmRzIGFsbCB0aGUgZGlyZWN0IGNoaWxkIG5vZGVzIG9mIGEgcGFyZW50IGFuZCByZXR1cm5zIHRoZW0gaW4gYSBzZXQuCisJICogQ2hpbGQgaXMgZGVmaW5lZCBieSBhIGNvbnRhaW5tZW50IHJlbGF0aW9uc2hpcAorCSAqIEBwYXJhbSBwYXJlbnQKKwkgKi8KKwlwdWJsaWMgc3RhdGljIFNldDxOb2RlPiBnZXRDaGlsZFNldChOb2RlIHBhcmVudCkgeworCQlTZXQ8Tm9kZT4gY2hpbGRyZW4gPSBuZXcgSGFzaFNldDxOb2RlPigpOworCQlpZihwYXJlbnQgPT0gbnVsbCkgcmV0dXJuIGNoaWxkcmVuOworCQlTdHJpbmcgcGFyZW50SUQgPSBwYXJlbnQuZ2V0VVJJKCkubGFzdFNlZ21lbnQoKTsKKwkJLy9SZWxhdGl2ZVBoeXNpY2FsUmVsYXRpb25zaGlwTGFiZWxWYWx1ZQorCQlFTGlzdDxFZGdlPiBhbGxFZGdlcyA9IHBhcmVudC5nZXRFZGdlcygpOworCQlmb3IgKGludCBpID0gMDsgaSA8IGFsbEVkZ2VzLnNpemUoKTsgaSArKykgeworCQkJRWRnZSBlID0gYWxsRWRnZXMuZ2V0KGkpOworCQkJTGFiZWxWYWx1ZSBsdiA9IGUuZ2V0TGFiZWwoKS5nZXRDdXJyZW50VmFsdWUoKTsKKwkJCWlmKGx2IGluc3RhbmNlb2YgUmVsYXRpdmVQaHlzaWNhbFJlbGF0aW9uc2hpcExhYmVsVmFsdWUpIHsKKwkJCQlSZWxhdGl2ZVBoeXNpY2FsUmVsYXRpb25zaGlwTGFiZWxWYWx1ZSBjb250YWlubWVudCA9IChSZWxhdGl2ZVBoeXNpY2FsUmVsYXRpb25zaGlwTGFiZWxWYWx1ZSlsdjsKKwkJCQlOb2RlIG5laWdoYm9yTm9kZSA9IGUuZ2V0T3RoZXJOb2RlKHBhcmVudCk7CisJCQkJU3RyaW5nIG5laWdoYm9ySUQ9IG5laWdoYm9yTm9kZS5nZXRVUkkoKS5sYXN0U2VnbWVudCgpOworCQkJCS8vIGlzIGl0IHJlYWxseSBhIGNoaWxkCisJCQkJaWYobmVpZ2hib3JJRC5sZW5ndGgoKSA+IHBhcmVudElELmxlbmd0aCgpIHx8IHBhcmVudElELmVxdWFscygiWlpaIikpIHsKKwkJCQkJLy95ZXMKKwkJCQkJY2hpbGRyZW4uYWRkKG5laWdoYm9yTm9kZSk7CisJCQkJfS8vIGlzIGNoaWxkCisJCQl9Ly8gaXMgY29udGFpbm1lbnQgcmVsYXRpb25zaGlwCisJCX0vLyBmb3IgYWxsIGVkZ2VzCisJCS8vanVzdCB0byBiZSBzdXJlCisJCWNoaWxkcmVuLnJlbW92ZShwYXJlbnQpOworCQlyZXR1cm4gY2hpbGRyZW47CisJfQorCQorfQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL01lc3NhZ2VzLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvTWVzc2FnZXMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNTE3ZGE1Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL01lc3NhZ2VzLmphdmEKQEAgLTAsMCArMSw0NSBAQAorLy8gTWVzc2FnZXMuamF2YQorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDExIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGphdmEudXRpbC5NaXNzaW5nUmVzb3VyY2VFeGNlcHRpb247CitpbXBvcnQgamF2YS51dGlsLlJlc291cmNlQnVuZGxlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5Db25zdGFudHM7CisKKy8qKgorICogVGhpcyBjbGFzcyBpcyB0aGUgUmVzb3VyY2UgQnVuZGxlIGZvciB0aGlzIHBhY2thZ2UuCisgKi8KK3B1YmxpYyBjbGFzcyBNZXNzYWdlcyB7CisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEJVTkRMRV9OQU1FID0gQ29uc3RhbnRzLklEX1JPT1QKKwkJCSsgIi5kZWZpbml0aW9ucy5tZXNzYWdlcyI7IC8vJE5PTi1OTFMtMSQKKworCXByaXZhdGUgc3RhdGljIGZpbmFsIFJlc291cmNlQnVuZGxlIFJFU09VUkNFX0JVTkRMRSA9IFJlc291cmNlQnVuZGxlCisJCQkuZ2V0QnVuZGxlKEJVTkRMRV9OQU1FKTsKKworCXByaXZhdGUgTWVzc2FnZXMoKSB7CisJCS8vIGVtcHR5CisJfQorCisJLyoqCisJICogQHBhcmFtIGtleQorCSAqICAgICAgICAgICAgdGhlIGtleSBmb3IgdGhlIG1lc3NhZ2UKKwkgKiBAcmV0dXJuIHRoZSBzdHJpbmcgdGhhdCBtYXRjaGVzIHRoZSBrZXkKKwkgKi8KKwlwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRTdHJpbmcoZmluYWwgU3RyaW5nIGtleSkgeworCQl0cnkgeworCQkJcmV0dXJuIFJFU09VUkNFX0JVTkRMRS5nZXRTdHJpbmcoa2V5KTsKKwkJfSBjYXRjaCAoZmluYWwgTWlzc2luZ1Jlc291cmNlRXhjZXB0aW9uIGUpIHsKKwkJCXJldHVybiAnIScgKyBrZXkgKyAnISc7CisJCX0KKwl9IC8vIGdldFN0cmluZworfSAvLyBNZXNzYWdlcwpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL2FkYXB0ZXJzL3JlbGF0aXZldmFsdWUvUmVsYXRpdmVWYWx1ZVByb3ZpZGVyLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvYWRhcHRlcnMvcmVsYXRpdmV2YWx1ZS9SZWxhdGl2ZVZhbHVlUHJvdmlkZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wM2U4NjA3Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL2FkYXB0ZXJzL3JlbGF0aXZldmFsdWUvUmVsYXRpdmVWYWx1ZVByb3ZpZGVyLmphdmEKQEAgLTAsMCArMSw2NCBAQAorLy8gUmVsYXRpdmVWYWx1ZVByb3ZpZGVyLmphdmEKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5hZGFwdGVycy5yZWxhdGl2ZXZhbHVlOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGphdmEudXRpbC5MaXN0OworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVTdHJ1Y3R1cmFsRmVhdHVyZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbVByb3BlcnR5RGVzY3JpcHRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JdGVtUHJvcGVydHlEZXNjcmlwdG9yOworCisvKioKKyAqIFRoaXMgaW50ZXJmYWNlIGlzIGltcGxlbWVudGVkIGJ5IGNsYXNzZXMgdGhhdCBoYXZlIHByb3BlcnRpZXMgYW5kIGNhbiBtYXAgdGhlCisgKiB2YWx1ZSBvZiB0aGUgcHJvcGVydHkgdG8gYSB2YWx1ZSBiZXR3ZWVuIDAuMCAoemVybykgYW5kIDEuMCAob25lKSwgaW5jbHVzaXZlLgorICovCitwdWJsaWMgaW50ZXJmYWNlIFJlbGF0aXZlVmFsdWVQcm92aWRlciB7CisKKwkvKioKKwkgKiBAcmV0dXJuIHRoZSBwcm9wZXJ0aWVzIG9mIHRoZSBwcm92aWRlcgorCSAqLworCUxpc3Q8SUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I+IGdldFByb3BlcnRpZXMoKTsKKworCS8qKgorCSAqIERldGVybWluZSB0aGUgcmVsYXRpdmUgKDAuMCB0byAxLjApIHZhbHVlIG9mIHRoZSBwcm9wZXJ0eSBhcyBjb21wYXJlZCB0bworCSAqIHRoZSBvdGhlciBwcm9wZXJ0aWVzLgorCSAqIAorCSAqIEBwYXJhbSBwcm9wZXJ0eQorCSAqICAgICAgICAgICAgdGhlIHByb3BlcnR5IHdob3NlIHJlbGF0aXZlIHZhbHVlIGlzIHRvIGJlIGRldGVybWluZWQKKwkgKiBAcmV0dXJuIHJlbGF0aXZlICgwLjAtMS4wKSB2YWx1ZSBvZiB0aGUgcHJvcGVydHkgYXMgY29tcGFyZWQgdG8gdGhlIG90aGVyCisJICogICAgICAgICBwcm9wZXJ0aWVzLgorCSAqLworCWRvdWJsZSBnZXRSZWxhdGl2ZVZhbHVlKGZpbmFsIEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IgcHJvcGVydHkpOworCisJLyoqCisJICogRGV0ZXJtaW5lIHRoZSByZWxhdGl2ZSAoMC4wIHRvIDEuMCkgdmFsdWUgb2YgdGhlIHByb3BlcnR5IGFzIGNvbXBhcmVkIHRvCisJICogdGhlIG90aGVyIHByb3BlcnRpZXMuCisJICogCisJICogQHBhcmFtIGZlYXR1cmUKKwkgKiAgICAgICAgICAgIGZlYXR1cmUgb2YgdGhlIHByb3BlcnR5IHdob3NlIHJlbGF0aXZlIHZhbHVlIGlzIHRvIGJlCisJICogICAgICAgICAgICBkZXRlcm1pbmVkCisJICogQHJldHVybiByZWxhdGl2ZSAoMC4wLTEuMCkgdmFsdWUgb2YgdGhlIHByb3BlcnR5IGFzIGNvbXBhcmVkIHRvIHRoZSBvdGhlcgorCSAqICAgICAgICAgcHJvcGVydGllcy4KKwkgKi8KKwlkb3VibGUgZ2V0UmVsYXRpdmVWYWx1ZShmaW5hbCBFU3RydWN0dXJhbEZlYXR1cmUgZmVhdHVyZSk7CisJCisJLyoqCisJICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgZGVub21pbmF0b3Igb3Igc2NhbGUgdXNlZCB0byBjb252ZXJ0IHRvIHJlbGF0aXZlCisJICogdmFsdWVzIGluIHRoZSByYW5nZSAwLTEuIEZvciBleGFtcGxlLCBpbiBhbiBFcGlkZW1pYyBDb21wYXJ0bWVudCBtb2RlbAorCSAqIHRoZSBzdGF0ZSB2YWx1ZXMgYXJlIG5vcm1hbGl6ZWQgYnkgcG9wdWxhdGlvbi4KKwkgKiBJdCBpcyByZXF1aXJlZCB3aGVuZXZlciB3ZSBuZWVkIHRvIHN3aXRjaCBiZXR3ZWVuIHJlbGF0aXZlIGFuZCBhYnNvbHV0ZSB2YWx1ZXMKKwkgKiBvciBjYW4gYmUgdXNlZCB0byBjcmVhdGUgYSBsYWJlbCBzaG93aW5nIHRoZSBtYXhpbXVtIHNjYWxlIGZvciBhbnkgcmVsYXRpdmUgdmFsdWUuCisJICogQHJldHVybiB0aGUgZGVub21pbmF0b3Igb3Igc2NhbGUgdXNlZCB0byBub3JtYWxpemUgdGhlIHJlbGF0aXZlIHZhbHVlCisJICovCisJZG91YmxlIGdldERlbm9taW5hdG9yKGZpbmFsIEVTdHJ1Y3R1cmFsRmVhdHVyZSBmZWF0dXJlKSA7Cit9Ly8gUmVsYXRpdmVWYWx1ZVByb3ZpZGVyCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvYWRhcHRlcnMvcmVsYXRpdmV2YWx1ZS9SZWxhdGl2ZVZhbHVlUHJvdmlkZXJBZGFwdGVyLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvYWRhcHRlcnMvcmVsYXRpdmV2YWx1ZS9SZWxhdGl2ZVZhbHVlUHJvdmlkZXJBZGFwdGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODZlNjA1YQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy9hZGFwdGVycy9yZWxhdGl2ZXZhbHVlL1JlbGF0aXZlVmFsdWVQcm92aWRlckFkYXB0ZXIuamF2YQpAQCAtMCwwICsxLDY0IEBACisvLyBSZWxhdGl2ZVZhbHVlUHJvdmlkZXJBZGFwdGVyLmphdmEKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5hZGFwdGVycy5yZWxhdGl2ZXZhbHVlOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGphdmEudXRpbC5MaXN0OworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuaW1wbC5BZGFwdGVySW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRVN0cnVjdHVyYWxGZWF0dXJlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtUHJvcGVydHlEZXNjcmlwdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I7CisKKy8qKgorICogVGhpcyBjbGFzcyBhZGFwdHMgPGNvZGU+RU9iamVjdHM8L2NvZGU+J3MgdG8KKyAqIDxjb2RlPlJlbGF0aXZlVmFsdWVQcm92aWRlcjwvY29kZT4ncy4KKyAqLworYWJzdHJhY3QgcHVibGljIGNsYXNzIFJlbGF0aXZlVmFsdWVQcm92aWRlckFkYXB0ZXIgZXh0ZW5kcyBBZGFwdGVySW1wbAorCQlpbXBsZW1lbnRzIFJlbGF0aXZlVmFsdWVQcm92aWRlciB7CisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuYWRhcHRlcnMucmVsYXRpdmV2YWx1ZS5SZWxhdGl2ZVZhbHVlUHJvdmlkZXIjZ2V0UHJvcGVydGllcygpCisJICovCisJcHVibGljIGFic3RyYWN0IExpc3Q8SUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I+IGdldFByb3BlcnRpZXMoKTsKKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5hZGFwdGVycy5yZWxhdGl2ZXZhbHVlLlJlbGF0aXZlVmFsdWVQcm92aWRlciNnZXRSZWxhdGl2ZVZhbHVlKG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IpCisJICovCisJcHVibGljIGRvdWJsZSBnZXRSZWxhdGl2ZVZhbHVlKEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IgcHJvcGVydHkpIHsKKwkJcmV0dXJuIGdldFJlbGF0aXZlVmFsdWUoKEVTdHJ1Y3R1cmFsRmVhdHVyZSkgcHJvcGVydHkuZ2V0RmVhdHVyZShudWxsKSk7CisJfSAvLyBnZXRSZWxhdGl2ZVZhbHVlCisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuYWRhcHRlcnMucmVsYXRpdmV2YWx1ZS5SZWxhdGl2ZVZhbHVlUHJvdmlkZXIjZ2V0UmVsYXRpdmVWYWx1ZShvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRVN0cnVjdHVyYWxGZWF0dXJlKQorCSAqLworCXB1YmxpYyBhYnN0cmFjdCBkb3VibGUgZ2V0UmVsYXRpdmVWYWx1ZShmaW5hbCBFU3RydWN0dXJhbEZlYXR1cmUgZmVhdHVyZSk7CisJCisJLyoqCisJICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgZGVub21pbmF0b3Igb3Igc2NhbGUgdXNlZCB0byBjb252ZXJ0IHRvIHJlbGF0aXZlCisJICogdmFsdWVzIGluIHRoZSByYW5nZSAwLTEuIEZvciBleGFtcGxlLCBpbiBhbiBFcGlkZW1pYyBDb21wYXJ0bWVudCBtb2RlbAorCSAqIHRoZSBzdGF0ZSB2YWx1ZXMgYXJlIG5vcm1hbGl6ZWQgYnkgcG9wdWxhdGlvbi4KKwkgKiBJdCBpcyByZXF1aXJlZCB3aGVuZXZlciB3ZSBuZWVkIHRvIHN3aXRjaCBiZXR3ZWVuIHJlbGF0aXZlIGFuZCBhYnNvbHV0ZSB2YWx1ZXMKKwkgKiBvciBjYW4gYmUgdXNlZCB0byBjcmVhdGUgYSBsYWJlbCBzaG93aW5nIHRoZSBtYXhpbXVtIHNjYWxlIGZvciBhbnkgcmVsYXRpdmUgdmFsdWUuCisJICogQHJldHVybiB0aGUgZGVub21pbmF0b3Igb3Igc2NhbGUgdXNlZCB0byBub3JtYWxpemUgdGhlIHJlbGF0aXZlIHZhbHVlCisJICovCisJcHVibGljIGFic3RyYWN0IGRvdWJsZSBnZXREZW5vbWluYXRvcihmaW5hbCBFU3RydWN0dXJhbEZlYXR1cmUgZmVhdHVyZSkgOworCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5pbXBsLkFkYXB0ZXJJbXBsI2lzQWRhcHRlckZvclR5cGUoamF2YS5sYW5nLk9iamVjdCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgYm9vbGVhbiBpc0FkYXB0ZXJGb3JUeXBlKE9iamVjdCB0eXBlKSB7CisJCXJldHVybiB0eXBlID09IFJlbGF0aXZlVmFsdWVQcm92aWRlci5jbGFzczsKKwl9CisJCit9IC8vIFJlbGF0aXZlVmFsdWVQcm92aWRlckFkYXB0ZXIKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy9hZGFwdGVycy9yZWxhdGl2ZXZhbHVlL1JlbGF0aXZlVmFsdWVQcm92aWRlckFkYXB0ZXJGYWN0b3J5LmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvYWRhcHRlcnMvcmVsYXRpdmV2YWx1ZS9SZWxhdGl2ZVZhbHVlUHJvdmlkZXJBZGFwdGVyRmFjdG9yeS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRiNWJjYmMKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvYWRhcHRlcnMvcmVsYXRpdmV2YWx1ZS9SZWxhdGl2ZVZhbHVlUHJvdmlkZXJBZGFwdGVyRmFjdG9yeS5qYXZhCkBAIC0wLDAgKzEsNzQgQEAKKy8vIFJlbGF0aXZlVmFsdWVQcm92aWRlckFkYXB0ZXJGYWN0b3J5LmphdmEKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5hZGFwdGVycy5yZWxhdGl2ZXZhbHVlOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkNvbXBvc2VhYmxlQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuQ29tcG9zZWRBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JQ2hhbmdlTm90aWZpZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSURpc3Bvc2FibGU7CisKKy8qKgorICogVGhpcyBpbnRlcmZhY2UgaXMgaW1wbGVtZW50ZWQgYnkgY2xhc3NlcyB0aGF0IGNyZWF0ZSBhZGFwdGVycyB0aGF0IGFkYXB0CisgKiB7QGxpbmsgIEVPYmplY3R9cyB0byB7QGxpbmsgUmVsYXRpdmVWYWx1ZVByb3ZpZGVyfXMuCisgKi8KK3B1YmxpYyBpbnRlcmZhY2UgUmVsYXRpdmVWYWx1ZVByb3ZpZGVyQWRhcHRlckZhY3RvcnkgZXh0ZW5kcworCQlDb21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5LCBJQ2hhbmdlTm90aWZpZXIsIElEaXNwb3NhYmxlIHsKKworCS8qKgorCSAqIFRoaXMgaXMgdGhlIHNpbmdsZXRvbiBpbnN0YW5jZSBvZiB0aGUgZmFjdG9yeSB0aGF0IGNyZWF0ZXMKKwkgKiB7QGxpbmsgUmVsYXRpdmVWYWx1ZVByb3ZpZGVyfSBpbnN0YW5jZXMuCisJICogPHA+CisJICogVGhpcyBpbnN0YW5jZSBpcyBhIHtAbGluayBDb21wb3NlZEFkYXB0ZXJGYWN0b3J5fSB3aGljaCBtZWFucyB0aGF0IGl0CisJICogY29sbGVjdHMgdG9nZXRoZXIgb3RoZXIge0BsaW5rIENvbXBvc2VhYmxlQWRhcHRlckZhY3Rvcnl9IGFkYXB0ZXIKKwkgKiBmYWN0b3JpZXMuIEVhY2ggY2xhc3MgdGhhdCBpbXBsZW1lbnRzCisJICoge0BsaW5rIFJlbGF0aXZlVmFsdWVQcm92aWRlckFkYXB0ZXJGYWN0b3J5fSBuZWVkcyB0byBhZGQgaXRzZWxmIHRvIHRoaXMKKwkgKiBpbnN0YW5jZSB3aXRoIGEgY2FsbCB0bworCSAqIHtAbGluayBDb21wb3NlZEFkYXB0ZXJGYWN0b3J5I2FkZEFkYXB0ZXJGYWN0b3J5KG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LkFkYXB0ZXJGYWN0b3J5KX0uCisJICogVGhpcyB3aWxsIHRoZW4gYWxsb3cgYWRhcHRlcnMgY3JlYXRlZCBieSB0aGF0IGZhY3RvcnkgdG8gYmUgZm91bmQgd2hlbgorCSAqIGFkYXB0aW5nIGNsYXNzIGluc3RhbmNlcyBoYW5kbGVkIGJ5IHRoZSBuZXcgZmFjdG9yeS4KKwkgKiA8cD4KKwkgKiBCYXNpY2FsbHksIGlmIHlvdSBjcmVhdGUgYW4gRU1GIG1vZGVsIGFuZCBkZWZpbmUgYQorCSAqIHtAbGluayBSZWxhdGl2ZVZhbHVlUHJvdmlkZXJBZGFwdGVyRmFjdG9yeX0gZm9yIGl0IHNvIHRoYXQgdGhlIGNsYXNzZXMgaW4KKwkgKiB0aGF0IG1vZGVsIGNhbiBiZSBhZGFwdGVkLCB5b3UgbmVlZCB0byBob29rIHRoYXQgZmFjdG9yeSBpbnRvIHRoaXMgb25lIHNvCisJICogdGhhdCBsYXRlciB3aGVuIGFuIGF0dGVtcHQgaXMgbWFkZSB0byBhZGFwdCBhIGNsYXNzIGZyb20gdGhhdCBtb2RlbCBpcworCSAqIG1hZGUgdGhlIGFzc29jaWF0ZWQgZmFjdG9yeSB3aWxsIGJlIGZvdW5kLiBZb3UgY2FuIGRvIHRoYXQgYnkgYWRkaW5nIHRoZQorCSAqIGxpbmU6IDxjb2RlPgorCSAqIFJlbGF0aXZlVmFsdWVQcm92aWRlckFkYXB0ZXJGYWN0b3J5LklOU1RBTkNFLmFkZEFkYXB0ZXJGYWN0b3J5KHRoaXMpOworCSAqIDwvY29kZT4KKwkgKiB0byB0aGUgZGVmYXVsdCBjb25zdHJ1Y3RvciBvZiB0aGUgbmV3IGZhY3RvcnkgYWZ0ZXIgdGhlIHN1cGVyIGNhbGwuCisJICogWW91J3JlIG5vdCBkb25lIGhvd2V2ZXIsIHlvdSBhbHNvIGhhdmUgdG8gImZvcmNlIiBhbiBpbnN0YW5jZSBvZiB0aGUKKwkgKiBjbGFzcyB0byBiZSBjcmVhdGVkIHNvIHRoYXQgdGhlIGNvbnN0cnVjdG9yIGlzIHJ1bi4gVGhpcyBpcyB0eXBpY2FsbHkKKwkgKiBhY2hpZXZlZCBieSBhbGxvY2F0aW5nIGFuIGluc3RhbmNlIGluIHRoZSA8Y29kZT5zdGFydDwvY29kZT4gbWV0aG9kIG9mCisJICogdGhlIDxjb2RlPkFjdGl2YXRvcjwvY29kZT4gb2YgdGhlIHBsdWctaW4gdGhhdCBkZWZpbmVzIHRoZSBmYWN0b3J5LgorCSAqLworCVJlbGF0aXZlVmFsdWVQcm92aWRlckFkYXB0ZXJGYWN0b3J5SW1wbCBJTlNUQU5DRSA9IG5ldyBSZWxhdGl2ZVZhbHVlUHJvdmlkZXJBZGFwdGVyRmFjdG9yeUltcGwoKTsKKworCS8qKgorCSAqIFRoaXMgY2xhc3MgaXMgdGhlIGltcGxlbWVudGF0aW9uIG9mIHRoZSBmYWN0b3J5IHRoYXQgY3JlYXRlcworCSAqIHtAbGluayBSZWxhdGl2ZVZhbHVlUHJvdmlkZXJ9J3MKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGNsYXNzIFJlbGF0aXZlVmFsdWVQcm92aWRlckFkYXB0ZXJGYWN0b3J5SW1wbCBleHRlbmRzCisJCQlDb21wb3NlZEFkYXB0ZXJGYWN0b3J5IGltcGxlbWVudHMKKwkJCVJlbGF0aXZlVmFsdWVQcm92aWRlckFkYXB0ZXJGYWN0b3J5IHsKKworCQkvKioKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5Db21wb3NlZEFkYXB0ZXJGYWN0b3J5I2lzRmFjdG9yeUZvclR5cGUoamF2YS5sYW5nLk9iamVjdCkKKwkJICovCisJCUBPdmVycmlkZQorCQlwdWJsaWMgYm9vbGVhbiBpc0ZhY3RvcnlGb3JUeXBlKE9iamVjdCB0eXBlKSB7CisJCQlyZXR1cm4gdHlwZSA9PSBSZWxhdGl2ZVZhbHVlUHJvdmlkZXIuY2xhc3M7CisJCX0gLy8gaXNGYWN0b3J5Rm9yVHlwZQorCX0gLy8gUmVsYXRpdmVWYWx1ZVByb3ZpZGVyQWRhcHRlckZhY3RvcnlJbXBsCisKK30gLy8gUmVsYXRpdmVWYWx1ZVByb3ZpZGVyQWRhcHRlckZhY3RvcnkKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy9hZGFwdGVycy9yZWxhdGl2ZXZhbHVlL2hpc3RvcnkvUmVsYXRpdmVWYWx1ZUhpc3RvcnlFeHRlbmRlZExpc3RlbmVyLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvYWRhcHRlcnMvcmVsYXRpdmV2YWx1ZS9oaXN0b3J5L1JlbGF0aXZlVmFsdWVIaXN0b3J5RXh0ZW5kZWRMaXN0ZW5lci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRlMmI1NmMKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvYWRhcHRlcnMvcmVsYXRpdmV2YWx1ZS9oaXN0b3J5L1JlbGF0aXZlVmFsdWVIaXN0b3J5RXh0ZW5kZWRMaXN0ZW5lci5qYXZhCkBAIC0wLDAgKzEsMjIgQEAKKy8vIFJlbGF0aXZlVmFsdWVIaXN0b3J5RXh0ZW5kZWRMaXN0ZW5lci5qYXZhCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuYWRhcHRlcnMucmVsYXRpdmV2YWx1ZS5oaXN0b3J5OworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqCisgKiBUaGlzIGludGVyZmFjZSBpcyBpbXBsZW1lbnRlZCBieSBjbGFzc2VzIHRoYXQgd2FudCB0byBiZSBub3RpZmllZCB3aGVuIGEKKyAqIHtAbGluayBSZWxhdGl2ZVZhbHVlSGlzdG9yeVByb3ZpZGVyfSBjYW4gcHJvdmlkZSBhZGRpdGlvbmFsIGhpc3RvcnkgdmFsdWVzLgorICovCitwdWJsaWMgaW50ZXJmYWNlIFJlbGF0aXZlVmFsdWVIaXN0b3J5RXh0ZW5kZWRMaXN0ZW5lciB7CisJdm9pZCByZWxhdGl2ZVZhbHVlSGlzdG9yeUV4dGVuZGVkKAorCQkJZmluYWwgUmVsYXRpdmVWYWx1ZUhpc3RvcnlQcm92aWRlckFkYXB0ZXIgcmVsYXRpdmVWYWx1ZUhpc3RvcnlQcm92aWRlckFkYXB0ZXIpOworfSAvLyBSZWxhdGl2ZVZhbHVlSGlzdG9yeUV4dGVuZGVkTGlzdGVuZXIKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy9hZGFwdGVycy9yZWxhdGl2ZXZhbHVlL2hpc3RvcnkvUmVsYXRpdmVWYWx1ZUhpc3RvcnlQcm92aWRlci5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL2FkYXB0ZXJzL3JlbGF0aXZldmFsdWUvaGlzdG9yeS9SZWxhdGl2ZVZhbHVlSGlzdG9yeVByb3ZpZGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTdiZWU3NwotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy9hZGFwdGVycy9yZWxhdGl2ZXZhbHVlL2hpc3RvcnkvUmVsYXRpdmVWYWx1ZUhpc3RvcnlQcm92aWRlci5qYXZhCkBAIC0wLDAgKzEsMTEyIEBACisvLyBSZWxhdGl2ZVZhbHVlSGlzdG9yeVByb3ZpZGVyLmphdmEKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5hZGFwdGVycy5yZWxhdGl2ZXZhbHVlLmhpc3Rvcnk7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVTdHJ1Y3R1cmFsRmVhdHVyZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JdGVtUHJvcGVydHlEZXNjcmlwdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5TVEVNVGltZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmFkYXB0ZXJzLnJlbGF0aXZldmFsdWUuUmVsYXRpdmVWYWx1ZVByb3ZpZGVyOworCisvKioKKyAqIFRoaXMgaW50ZXJmYWNlIGlzIGltcGxlbWVudGVkIGJ5IGNsYXNzZXMgdGhhdCBoYXZlIHByb3BlcnRpZXMgYW5kIGNhbiBtYXAgdGhlCisgKiB2YWx1ZSBvZiB0aGUgcHJvcGVydHkgdG8gYSB2YWx1ZSBiZXR3ZWVuIDAuMCAoemVybykgYW5kIDEuMCAob25lKSwgaW5jbHVzaXZlLAorICogYW5kIHdoaWNoIGNhbiBwcm92aWRlIGhpc3RvcmljIHZhbHVlcyBmb3IgdGhvc2UgcHJvcGVydGllcyBhcyBhIGZ1bmN0aW9uIG9mCisgKiB0aW1lLgorICovCitwdWJsaWMgaW50ZXJmYWNlIFJlbGF0aXZlVmFsdWVIaXN0b3J5UHJvdmlkZXIgZXh0ZW5kcyBSZWxhdGl2ZVZhbHVlUHJvdmlkZXIgeworCS8qKgorCSAqIERldGVybWluZSB0aGUgcmVsYXRpdmUgKDAuMCB0byAxLjApIHZhbHVlIG9mIHRoZSBwcm9wZXJ0eSBhcyBjb21wYXJlZCB0bworCSAqIHRoZSBvdGhlciBwcm9wZXJ0aWVzIGFzIGEgZnVuY3Rpb24gb2YgVGltZS4KKwkgKiAKKwkgKiBAcGFyYW0gcHJvcGVydHkKKwkgKiAgICAgICAgICAgIHRoZSBwcm9wZXJ0eSB3aG9zZSByZWxhdGl2ZSB2YWx1ZSBpcyB0byBiZSBkZXRlcm1pbmVkCisJICogQHBhcmFtIHRpbWUKKwkgKiAgICAgICAgICAgIHRoZSB0aW1lIHRvIHVzZSB3aGVuIGRldGVybWluaW5nIHdoaWNoIHZhbHVlIHRvIHJldHVybi4KKwkgKiBAcmV0dXJuIHJlbGF0aXZlICgwLjAtMS4wKSB2YWx1ZSBvZiB0aGUgcHJvcGVydHkgYXMgY29tcGFyZWQgdG8gdGhlIG90aGVyCisJICogICAgICAgICBwcm9wZXJ0aWVzIGFuZCB3aG9zZSBhc3NvY2lhdGVkIHRpbWUgdmFsdWUgaXMgZWl0aGVyIGVxdWFsIHRvIG9yCisJICogICAgICAgICBhZnRlci9sYXRlciB0aGFuIHRoZSBwYXJhbWV0ZXIgdGltZS4KKwkgKi8KKwlkb3VibGUgZ2V0UmVsYXRpdmVWYWx1ZShmaW5hbCBJdGVtUHJvcGVydHlEZXNjcmlwdG9yIHByb3BlcnR5LAorCQkJZmluYWwgU1RFTVRpbWUgdGltZSk7CisKKwkvKioKKwkgKiBEZXRlcm1pbmUgdGhlIHJlbGF0aXZlICgwLjAgdG8gMS4wKSB2YWx1ZSBvZiB0aGUgcHJvcGVydHkgYXMgY29tcGFyZWQgdG8KKwkgKiB0aGUgb3RoZXIgcHJvcGVydGllcy4KKwkgKiAKKwkgKiBAcGFyYW0gZmVhdHVyZQorCSAqICAgICAgICAgICAgZmVhdHVyZSBvZiB0aGUgcHJvcGVydHkgd2hvc2UgcmVsYXRpdmUgdmFsdWUgaXMgdG8gYmUKKwkgKiAgICAgICAgICAgIGRldGVybWluZWQKKwkgKiBAcGFyYW0gdGltZQorCSAqICAgICAgICAgICAgdGhlIHRpbWUgdG8gdXNlIHdoZW4gZGV0ZXJtaW5pbmcgd2hpY2ggdmFsdWUgdG8gcmV0dXJuLgorCSAqIEByZXR1cm4gcmVsYXRpdmUgKDAuMC0xLjApIHZhbHVlIG9mIHRoZSBwcm9wZXJ0eSBhcyBjb21wYXJlZCB0byB0aGUgb3RoZXIKKwkgKiAgICAgICAgIHByb3BlcnRpZXMgYW5kIHdob3NlIGFzc29jaWF0ZWQgdGltZSB2YWx1ZSBpcyBlaXRoZXIgZXF1YWwgdG8gb3IKKwkgKiAgICAgICAgIGFmdGVyL2xhdGVyIHRoYW4gdGhlIHBhcmFtZXRlciB0aW1lLgorCSAqLworCWRvdWJsZSBnZXRSZWxhdGl2ZVZhbHVlKGZpbmFsIEVTdHJ1Y3R1cmFsRmVhdHVyZSBmZWF0dXJlLAorCQkJZmluYWwgU1RFTVRpbWUgdGltZSk7CisKKwkvKioKKwkgKiBQcm9kdWNlIGFsbCByZWxhdGl2ZSB2YWx1ZXMgZm9yIGEgZ2l2ZW4gcHJvcGVydHkuCisJICogCisJICogQHBhcmFtIHByb3BlcnR5CisJICogICAgICAgICAgICB0aGUgcHJvcGVydHkgd2hvc2UgcmVsYXRpdmUgdmFsdWUgaXMgdG8gYmUgZGV0ZXJtaW5lZAorCSAqIAorCSAqIEByZXR1cm4gYWxsIHJlbGF0aXZlICgwLjAtMS4wKSB2YWx1ZXMgb2YgdGhlIHByb3BlcnR5IGFzIGNvbXBhcmVkIHRvIHRoZQorCSAqICAgICAgICAgb3RoZXIgcHJvcGVydGllcy4gVGhlIGZpcnN0IHZhbHVlIG9mIHRoZSBhcnJheSAoaW5kZXggMCkgaXMgdGhlCisJICogICAgICAgICBvbGRlc3QgdmFsdWUuCisJICovCisJZG91YmxlW10gZ2V0QWxsSGlzdG9yaWNSZWxhdGl2ZVZhbHVlcyhmaW5hbCBJdGVtUHJvcGVydHlEZXNjcmlwdG9yIHByb3BlcnR5KTsKKworCS8qKgorCSAqIFByb2R1Y2UgYWxsIHJlbGF0aXZlIHZhbHVlcyBmb3IgYSBnaXZlbiBmZWF0dXJlLgorCSAqIAorCSAqIEBwYXJhbSBmZWF0dXJlCisJICogICAgICAgICAgICBmZWF0dXJlIG9mIHRoZSBwcm9wZXJ0eSB3aG9zZSByZWxhdGl2ZSB2YWx1ZSBpcyB0byBiZQorCSAqICAgICAgICAgICAgZGV0ZXJtaW5lZAorCSAqIEByZXR1cm4gYWxsIHJlbGF0aXZlICgwLjAtMS4wKSB2YWx1ZXMgb2YgdGhlIGZlYXR1cmUgYXMgY29tcGFyZWQgdG8gdGhlCisJICogICAgICAgICBvdGhlciBwcm9wZXJ0aWVzLiBUaGUgZmlyc3QgdmFsdWUgb2YgdGhlIGFycmF5IChpbmRleCAwKSBpcyB0aGUKKwkgKiAgICAgICAgIG9sZGVzdCB2YWx1ZS4KKwkgKi8KKwlkb3VibGVbXSBnZXRBbGxIaXN0b3JpY1JlbGF0aXZlVmFsdWVzKGZpbmFsIEVTdHJ1Y3R1cmFsRmVhdHVyZSBmZWF0dXJlKTsKKwkKKwkKKwkvKioKKwkgKiBQcm9kdWNlIGFsbCByZWxhdGl2ZSB2YWx1ZXMgaW4gYSB0aW1lIHJhbmdlCisJICogQHBhcmFtIHRpbWVSYW5nZQorCSAqIEByZXR1cm4gYWxsIHJlbGF0aXZlICgwLjAtMS4wKSB2YWx1ZXMgb2YgdGhlIGZlYXR1cmUgYXMgY29tcGFyZWQgdG8gdGhlCisJICogICAgICAgICBvdGhlciBwcm9wZXJ0aWVzLiBUaGUgZmlyc3QgdmFsdWUgb2YgdGhlIGFycmF5IChpbmRleCAwKSBpcyB0aGUKKwkgKiAgICAgICAgIG9sZGVzdCB2YWx1ZS4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uYWRhcHRlcnMuaGlzdG9yeS5IaXN0b3J5UHJvdmlkZXJBZGFwdGVyI2dldEhpc3RvcmljSW5zdGFuY2VzKCkKKwkgKi8KKwlwdWJsaWMgZG91YmxlW10gZ2V0SGlzdG9yaWNJbnN0YW5jZXMoZmluYWwgSXRlbVByb3BlcnR5RGVzY3JpcHRvciBwcm9wZXJ0eSwgU1RFTVRpbWVbXSB0aW1lUmFuZ2UpOworCisJLyoqCisJICogQHJldHVybiBhbGwgb2YgdGhlIHRpbWUgdmFsdWVzIHRoYXQgY29ycmVzcG9uZCB0byB0aGUgaGlzdG9yaWMgcmVsYXRpdmUKKwkgKiAgICAgICAgIHRpbWUgdmFsdWVzLiBUaGUgZmlyc3QgdmFsdWUgb2YgdGhlIGNvbGxlY3Rpb24gaXMgdGhlIHRpbWUgdmFsdWUKKwkgKiAgICAgICAgIGZvciB0aGUgZmlyc3QgdmFsdWUgb2YgdGhlIGNvbGxlY3Rpb24gcmV0dXJuZWQgYnkKKwkgKiAgICAgICAgIHtAbGluayAjZ2V0QWxsSGlzdG9yaWNSZWxhdGl2ZVZhbHVlcyhJdGVtUHJvcGVydHlEZXNjcmlwdG9yKX0gYW5kCisJICogICAgICAgICBieSB7QGxpbmsgI2dldEFsbEhpc3RvcmljUmVsYXRpdmVWYWx1ZXMoRVN0cnVjdHVyYWxGZWF0dXJlKX0uCisJICovCisJU1RFTVRpbWVbXSBnZXRBbGxIaXN0b3JpY1RpbWVWYWx1ZXMoKTsKKworCS8qKgorCSAqIEByZXR1cm4gdGhlIGVhcmxpZXN0IHRpbWUgdmFsdWUgYXNzb2NpYXRlZCB3aXRoIGEgcmVsYXRpdmUgdmFsdWUuCisJICovCisJU1RFTVRpbWUgZ2V0RWFybGllc3RUaW1lVmFsdWUoKTsKKworCS8qKgorCSAqIEByZXR1cm4gdGhlIGVhcmxpZXN0IChsb3dlc3QpIGN5Y2xlIG51bWJlcgorCSAqLworCWludCBnZXRFYXJsaWVzdEN5Y2xlTnVtYmVyKCk7CisKK30gLy8gUmVsYXRpdmVWYWx1ZUhpc3RvcnlQcm92aWRlcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL2FkYXB0ZXJzL3JlbGF0aXZldmFsdWUvaGlzdG9yeS9SZWxhdGl2ZVZhbHVlSGlzdG9yeVByb3ZpZGVyQWRhcHRlci5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL2FkYXB0ZXJzL3JlbGF0aXZldmFsdWUvaGlzdG9yeS9SZWxhdGl2ZVZhbHVlSGlzdG9yeVByb3ZpZGVyQWRhcHRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA0Mzg5NjEKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvYWRhcHRlcnMvcmVsYXRpdmV2YWx1ZS9oaXN0b3J5L1JlbGF0aXZlVmFsdWVIaXN0b3J5UHJvdmlkZXJBZGFwdGVyLmphdmEKQEAgLTAsMCArMSwxMjIgQEAKKy8vIFJlbGF0aWVWYWx1ZUhpc3RvcnlQcm92aWRlckFkYXB0ZXIuamF2YQorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmFkYXB0ZXJzLnJlbGF0aXZldmFsdWUuaGlzdG9yeTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuY29uY3VycmVudC5Db3B5T25Xcml0ZUFycmF5TGlzdDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FU3RydWN0dXJhbEZlYXR1cmU7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSXRlbVByb3BlcnR5RGVzY3JpcHRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmFkYXB0ZXJzLmhpc3RvcnkuSGlzdG9yeUV4dGVuZGVkTGlzdGVuZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5hZGFwdGVycy5oaXN0b3J5Lkhpc3RvcnlQcm92aWRlckFkYXB0ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLlNURU1UaW1lOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuYWRhcHRlcnMucmVsYXRpdmV2YWx1ZS5SZWxhdGl2ZVZhbHVlUHJvdmlkZXJBZGFwdGVyOworCisvKioKKyAqIFRoaXMgY2xhc3MgYWRhcHRzIDxjb2RlPkVPYmplY3RzPC9jb2RlPidzIHRvCisgKiA8Y29kZT5SZWxhdGl2ZVZhbHVlUHJvdmlkZXI8L2NvZGU+J3MuCisgKi8KK3B1YmxpYyBhYnN0cmFjdCBjbGFzcyBSZWxhdGl2ZVZhbHVlSGlzdG9yeVByb3ZpZGVyQWRhcHRlciBleHRlbmRzCisJCVJlbGF0aXZlVmFsdWVQcm92aWRlckFkYXB0ZXIgaW1wbGVtZW50cyBSZWxhdGl2ZVZhbHVlSGlzdG9yeVByb3ZpZGVyLAorCQlIaXN0b3J5RXh0ZW5kZWRMaXN0ZW5lciB7CisKKwlwcml2YXRlIExpc3Q8UmVsYXRpdmVWYWx1ZUhpc3RvcnlFeHRlbmRlZExpc3RlbmVyPiBleHRlbnNpb25MaXN0ZW5lcnMgPSBuZXcgQ29weU9uV3JpdGVBcnJheUxpc3Q8UmVsYXRpdmVWYWx1ZUhpc3RvcnlFeHRlbmRlZExpc3RlbmVyPigpOworCisJLy8gVGhpcyBzaG91bGQgYmUgcmVtb3ZlZCBEQUYKKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgZWFybGllc3RDeWNsZU51bWJlciA9IDA7CisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuYWRhcHRlcnMucmVsYXRpdmV2YWx1ZS5oaXN0b3J5LlJlbGF0aXZlVmFsdWVIaXN0b3J5UHJvdmlkZXIjZ2V0UmVsYXRpdmVWYWx1ZShvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JdGVtUHJvcGVydHlEZXNjcmlwdG9yLAorCSAqICAgICAgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLlNURU1UaW1lKQorCSAqLworCXB1YmxpYyBkb3VibGUgZ2V0UmVsYXRpdmVWYWx1ZShmaW5hbCBJdGVtUHJvcGVydHlEZXNjcmlwdG9yIHByb3BlcnR5LAorCQkJZmluYWwgU1RFTVRpbWUgdGltZSkgeworCQlyZXR1cm4gZ2V0UmVsYXRpdmVWYWx1ZSgoRVN0cnVjdHVyYWxGZWF0dXJlKSBwcm9wZXJ0eS5nZXRGZWF0dXJlKG51bGwpLAorCQkJCXRpbWUpOworCX0KKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5hZGFwdGVycy5yZWxhdGl2ZXZhbHVlLmhpc3RvcnkuUmVsYXRpdmVWYWx1ZUhpc3RvcnlQcm92aWRlciNnZXRSZWxhdGl2ZVZhbHVlKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FU3RydWN0dXJhbEZlYXR1cmUsCisJICogICAgICBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuU1RFTVRpbWUpCisJICovCisJYWJzdHJhY3QgcHVibGljIGRvdWJsZSBnZXRSZWxhdGl2ZVZhbHVlKEVTdHJ1Y3R1cmFsRmVhdHVyZSBmZWF0dXJlLAorCQkJU1RFTVRpbWUgdGltZSk7CisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuYWRhcHRlcnMucmVsYXRpdmV2YWx1ZS5oaXN0b3J5LlJlbGF0aXZlVmFsdWVIaXN0b3J5UHJvdmlkZXIjZ2V0QWxsSGlzdG9yaWNSZWxhdGl2ZVZhbHVlcyhvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRVN0cnVjdHVyYWxGZWF0dXJlKQorCSAqLworCWFic3RyYWN0IHB1YmxpYyBkb3VibGVbXSBnZXRBbGxIaXN0b3JpY1JlbGF0aXZlVmFsdWVzKAorCQkJRVN0cnVjdHVyYWxGZWF0dXJlIGZlYXR1cmUpOworCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmFkYXB0ZXJzLnJlbGF0aXZldmFsdWUuaGlzdG9yeS5SZWxhdGl2ZVZhbHVlSGlzdG9yeVByb3ZpZGVyI2dldEFsbEhpc3RvcmljUmVsYXRpdmVWYWx1ZXMob3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSXRlbVByb3BlcnR5RGVzY3JpcHRvcikKKwkgKi8KKwlwdWJsaWMgZG91YmxlW10gZ2V0QWxsSGlzdG9yaWNSZWxhdGl2ZVZhbHVlcygKKwkJCWZpbmFsIEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IgcHJvcGVydHkpIHsKKwkJcmV0dXJuIGdldEFsbEhpc3RvcmljUmVsYXRpdmVWYWx1ZXMoKEVTdHJ1Y3R1cmFsRmVhdHVyZSkgcHJvcGVydHkKKwkJCQkuZ2V0RmVhdHVyZShudWxsKSk7CisJfQorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmFkYXB0ZXJzLnJlbGF0aXZldmFsdWUuaGlzdG9yeS5SZWxhdGl2ZVZhbHVlSGlzdG9yeVByb3ZpZGVyI2dldEFsbEhpc3RvcmljVGltZVZhbHVlcygpCisJICovCisJYWJzdHJhY3QgcHVibGljIFNURU1UaW1lW10gZ2V0QWxsSGlzdG9yaWNUaW1lVmFsdWVzKCk7CisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuYWRhcHRlcnMucmVsYXRpdmV2YWx1ZS5oaXN0b3J5LlJlbGF0aXZlVmFsdWVIaXN0b3J5UHJvdmlkZXIjZ2V0RWFybGllc3RUaW1lVmFsdWUoKQorCSAqLworCWFic3RyYWN0IHB1YmxpYyBTVEVNVGltZSBnZXRFYXJsaWVzdFRpbWVWYWx1ZSgpOworCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmFkYXB0ZXJzLnJlbGF0aXZldmFsdWUuaGlzdG9yeS5SZWxhdGl2ZVZhbHVlSGlzdG9yeVByb3ZpZGVyI2dldEVhcmxpZXN0Q3ljbGVOdW1iZXIoKQorCSAqLworCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmFkYXB0ZXJzLnJlbGF0aXZldmFsdWUuaGlzdG9yeS5SZWxhdGl2ZVZhbHVlSGlzdG9yeVByb3ZpZGVyI2dldEVhcmxpZXN0Q3ljbGVOdW1iZXIoKQorCSAqLworCXB1YmxpYyBpbnQgZ2V0RWFybGllc3RDeWNsZU51bWJlcigpIHsKKwkJcmV0dXJuIGVhcmxpZXN0Q3ljbGVOdW1iZXI7CisJfQorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5pbXBsLkFkYXB0ZXJJbXBsI2lzQWRhcHRlckZvclR5cGUoamF2YS5sYW5nLk9iamVjdCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgYm9vbGVhbiBpc0FkYXB0ZXJGb3JUeXBlKGZpbmFsIE9iamVjdCB0eXBlKSB7CisJCXJldHVybiB0eXBlID09IFJlbGF0aXZlVmFsdWVIaXN0b3J5UHJvdmlkZXIuY2xhc3M7CisJfQorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmFkYXB0ZXJzLmhpc3RvcnkuSGlzdG9yeUV4dGVuZGVkTGlzdGVuZXIjaGlzdG9yeUV4dGVuZGVkKG9yZy5lY2xpcHNlLnN0ZW0uYWRhcHRlcnMuaGlzdG9yeS5IaXN0b3J5UHJvdmlkZXJBZGFwdGVyKQorCSAqLworCXB1YmxpYyB2b2lkIGhpc3RvcnlFeHRlbmRlZChIaXN0b3J5UHJvdmlkZXJBZGFwdGVyIGhpc3RvcnlQcm92aWRlckFkYXB0ZXIpIHsKKwkJZmlyZUhpc3RvcnlFeHRlbmRlZCgpOworCX0KKworCXB1YmxpYyB2b2lkIGFkZEV4dGVuc2lvbkxpc3RlbmVyKAorCQkJUmVsYXRpdmVWYWx1ZUhpc3RvcnlFeHRlbmRlZExpc3RlbmVyIGxpc3RlbmVyKSB7CisJCWV4dGVuc2lvbkxpc3RlbmVycy5hZGQobGlzdGVuZXIpOworCX0KKworCXB1YmxpYyB2b2lkIHJlbW92ZUV4dGVuc2lvbkxpc3RlbmVyKAorCQkJUmVsYXRpdmVWYWx1ZUhpc3RvcnlFeHRlbmRlZExpc3RlbmVyIGxpc3RlbmVyKSB7CisJCWV4dGVuc2lvbkxpc3RlbmVycy5yZW1vdmUobGlzdGVuZXIpOworCX0KKworCXByb3RlY3RlZCB2b2lkIGZpcmVIaXN0b3J5RXh0ZW5kZWQoKSB7CisJCWZvciAoUmVsYXRpdmVWYWx1ZUhpc3RvcnlFeHRlbmRlZExpc3RlbmVyIGxpc3RlbmVyIDogZXh0ZW5zaW9uTGlzdGVuZXJzKSB7CisJCQlsaXN0ZW5lci5yZWxhdGl2ZVZhbHVlSGlzdG9yeUV4dGVuZGVkKHRoaXMpOworCQl9IC8vIGZvciBlYWNoIEhpc3RvcnlFeHRlbmRlZExpc3RlbmVyCisJfQorCit9IC8vIFJlbGF0aWVWYWx1ZUhpc3RvcnlQcm92aWRlckFkYXB0ZXIKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy9hZGFwdGVycy9yZWxhdGl2ZXZhbHVlL2hpc3RvcnkvUmVsYXRpdmVWYWx1ZUhpc3RvcnlQcm92aWRlckFkYXB0ZXJGYWN0b3J5LmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvYWRhcHRlcnMvcmVsYXRpdmV2YWx1ZS9oaXN0b3J5L1JlbGF0aXZlVmFsdWVIaXN0b3J5UHJvdmlkZXJBZGFwdGVyRmFjdG9yeS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZmOGQ0NjgKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvYWRhcHRlcnMvcmVsYXRpdmV2YWx1ZS9oaXN0b3J5L1JlbGF0aXZlVmFsdWVIaXN0b3J5UHJvdmlkZXJBZGFwdGVyRmFjdG9yeS5qYXZhCkBAIC0wLDAgKzEsNzMgQEAKKy8vIFJlbGF0aXZlVmFsdWVIaXN0b3J5UHJvdmlkZXJBZGFwdGVyRmFjdG9yeS5qYXZhCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuYWRhcHRlcnMucmVsYXRpdmV2YWx1ZS5oaXN0b3J5OworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkNvbXBvc2VhYmxlQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuQ29tcG9zZWRBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JQ2hhbmdlTm90aWZpZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSURpc3Bvc2FibGU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5hZGFwdGVycy5yZWxhdGl2ZXZhbHVlLlJlbGF0aXZlVmFsdWVQcm92aWRlckFkYXB0ZXJGYWN0b3J5OworCisvKioKKyAqIFRoaXMgaW50ZXJmYWNlIGlzIGltcGxlbWVudGVkIGJ5IGNsYXNzZXMgdGhhdCBjcmVhdGUgYWRhcHRlcnMgdGhhdCBhZGFwdAorICoge0BsaW5rICBFT2JqZWN0fXMgdG8ge0BsaW5rIFJlbGF0aXZlVmFsdWVIaXN0b3J5UHJvdmlkZXJ9cy4KKyAqLworcHVibGljIGludGVyZmFjZSBSZWxhdGl2ZVZhbHVlSGlzdG9yeVByb3ZpZGVyQWRhcHRlckZhY3RvcnkgZXh0ZW5kcworCQlDb21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5LCBJQ2hhbmdlTm90aWZpZXIsIElEaXNwb3NhYmxlIHsKKworCS8qKgorCSAqIFRoaXMgaXMgdGhlIHNpbmdsZXRvbiBpbnN0YW5jZSBvZiB0aGUgZmFjdG9yeSB0aGF0IGNyZWF0ZXMKKwkgKiB7QGxpbmsgUmVsYXRpdmVWYWx1ZUhpc3RvcnlQcm92aWRlcn0gaW5zdGFuY2VzLgorCSAqIDxwPgorCSAqIFRoaXMgaW5zdGFuY2UgaXMgYSB7QGxpbmsgQ29tcG9zZWRBZGFwdGVyRmFjdG9yeX0gd2hpY2ggbWVhbnMgdGhhdCBpdAorCSAqIGNvbGxlY3RzIHRvZ2V0aGVyIG90aGVyIHtAbGluayBDb21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5fSBhZGFwdGVyCisJICogZmFjdG9yaWVzLiBFYWNoIGNsYXNzIHRoYXQgaW1wbGVtZW50cworCSAqIHtAbGluayBSZWxhdGl2ZVZhbHVlUHJvdmlkZXJBZGFwdGVyRmFjdG9yeX0gbmVlZHMgdG8gYWRkIGl0c2VsZiB0byB0aGlzCisJICogaW5zdGFuY2Ugd2l0aCBhIGNhbGwgdG8KKwkgKiB7QGxpbmsgQ29tcG9zZWRBZGFwdGVyRmFjdG9yeSNhZGRBZGFwdGVyRmFjdG9yeShvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5BZGFwdGVyRmFjdG9yeSl9LgorCSAqIFRoaXMgd2lsbCB0aGVuIGFsbG93IGFkYXB0ZXJzIGNyZWF0ZWQgYnkgdGhhdCBmYWN0b3J5IHRvIGJlIGZvdW5kIHdoZW4KKwkgKiBhZGFwdGluZyBjbGFzcyBpbnN0YW5jZXMgaGFuZGxlZCBieSB0aGUgbmV3IGZhY3RvcnkuCisJICogPHA+CisJICogQmFzaWNhbGx5LCBpZiB5b3UgY3JlYXRlIGFuIEVNRiBtb2RlbCBhbmQgZGVmaW5lIGEKKwkgKiB7QGxpbmsgUmVsYXRpdmVWYWx1ZUhpc3RvcnlQcm92aWRlckFkYXB0ZXJGYWN0b3J5fSBmb3IgaXQgc28gdGhhdCB0aGUKKwkgKiBjbGFzc2VzIGluIHRoYXQgbW9kZWwgY2FuIGJlIGFkYXB0ZWQsIHlvdSBuZWVkIHRvIGhvb2sgdGhhdCBmYWN0b3J5IGludG8KKwkgKiB0aGlzIG9uZSBzbyB0aGF0IGxhdGVyIHdoZW4gYW4gYXR0ZW1wdCBpcyBtYWRlIHRvIGFkYXB0IGEgY2xhc3MgZnJvbSB0aGF0CisJICogbW9kZWwgaXMgbWFkZSB0aGUgYXNzb2NpYXRlZCBmYWN0b3J5IHdpbGwgYmUgZm91bmQuIFlvdSBjYW4gZG8gdGhhdCBieQorCSAqIGFkZGluZyB0aGUgbGluZTogPGNvZGU+CisJICogUmVsYXRpdmVWYWx1ZUhpc3RvcnlQcm92aWRlckFkYXB0ZXJGYWN0b3J5LklOU1RBTkNFLmFkZEFkYXB0ZXJGYWN0b3J5KHRoaXMpOworCSAqIDwvY29kZT4KKwkgKiB0byB0aGUgZGVmYXVsdCBjb25zdHJ1Y3RvciBvZiB0aGUgbmV3IGZhY3RvcnkgYWZ0ZXIgdGhlIHN1cGVyIGNhbGwuCisJICogWW91J3JlIG5vdCBkb25lIGhvd2V2ZXIsIHlvdSBhbHNvIGhhdmUgdG8gImZvcmNlIiBhbiBpbnN0YW5jZSBvZiB0aGUKKwkgKiBjbGFzcyB0byBiZSBjcmVhdGVkIHNvIHRoYXQgdGhlIGNvbnN0cnVjdG9yIGlzIHJ1bi4gVGhpcyBpcyB0eXBpY2FsbHkKKwkgKiBhY2hpZXZlZCBieSBhbGxvY2F0aW5nIGFuIGluc3RhbmNlIGluIHRoZSA8Y29kZT5zdGFydDwvY29kZT4gbWV0aG9kIG9mCisJICogdGhlIDxjb2RlPkFjdGl2YXRvcjwvY29kZT4gb2YgdGhlIHBsdWctaW4gdGhhdCBkZWZpbmVzIHRoZSBmYWN0b3J5LiAgCisJICovCisJUmVsYXRpdmVWYWx1ZUhpc3RvcnlQcm92aWRlckFkYXB0ZXJGYWN0b3J5SW1wbCBJTlNUQU5DRSA9IG5ldyBSZWxhdGl2ZVZhbHVlSGlzdG9yeVByb3ZpZGVyQWRhcHRlckZhY3RvcnlJbXBsKCk7CisKKwkvKioKKwkgKiBUaGlzIGNsYXNzIHJlcHJlc2VudHMKKwkgKi8KKwlwdWJsaWMgY2xhc3MgUmVsYXRpdmVWYWx1ZUhpc3RvcnlQcm92aWRlckFkYXB0ZXJGYWN0b3J5SW1wbCBleHRlbmRzCisJCQlDb21wb3NlZEFkYXB0ZXJGYWN0b3J5IGltcGxlbWVudHMKKwkJCVJlbGF0aXZlVmFsdWVIaXN0b3J5UHJvdmlkZXJBZGFwdGVyRmFjdG9yeSB7CisJCS8qKgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkNvbXBvc2VkQWRhcHRlckZhY3RvcnkjaXNGYWN0b3J5Rm9yVHlwZShqYXZhLmxhbmcuT2JqZWN0KQorCQkgKi8KKwkJQE92ZXJyaWRlCisJCXB1YmxpYyBib29sZWFuIGlzRmFjdG9yeUZvclR5cGUoT2JqZWN0IHR5cGUpIHsKKwkJCXJldHVybiB0eXBlID09IFJlbGF0aXZlVmFsdWVIaXN0b3J5UHJvdmlkZXIuY2xhc3M7CisJCX0gLy8gaXNGYWN0b3J5Rm9yVHlwZQorCX0gLy8gUmVsYXRpdmVWYWx1ZUhpc3RvcnlQcm92aWRlckFkYXB0ZXJGYWN0b3J5SW1wbAorCit9IC8vIFJlbGF0aXZlVmFsdWVIaXN0b3J5UHJvdmlkZXJBZGFwdGVyRmFjdG9yeQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL2FkYXB0ZXJzL3NwYXRpYWwvU3BhdGlhbFByb3ZpZGVyLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvYWRhcHRlcnMvc3BhdGlhbC9TcGF0aWFsUHJvdmlkZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YzJhMmNlCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL2FkYXB0ZXJzL3NwYXRpYWwvU3BhdGlhbFByb3ZpZGVyLmphdmEKQEAgLTAsMCArMSwyMCBAQAorLy8gU3BhdGlhbFByb3ZpZGVyLmphdmEKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5hZGFwdGVycy5zcGF0aWFsOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqCisgKiBUaGlzIGludGVyZmFjZSBpcyBpbXBsZW1lbnRlZCBieSBjbGFzc2VzIHRoYXQgcHJvdmlkZSBzcGF0aWFsIGRlc2NyaXB0aW9ucy4KKyAqLworcHVibGljIGludGVyZmFjZSBTcGF0aWFsUHJvdmlkZXIgeworCS8vIE1hcmtlciBpbnRlcmZhY2UKK30gLy8gU3BhdGlhbFByb3ZpZGVyCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvYWRhcHRlcnMvc3BhdGlhbC9TcGF0aWFsUHJvdmlkZXJBZGFwdGVyLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvYWRhcHRlcnMvc3BhdGlhbC9TcGF0aWFsUHJvdmlkZXJBZGFwdGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzdmMmVjZQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy9hZGFwdGVycy9zcGF0aWFsL1NwYXRpYWxQcm92aWRlckFkYXB0ZXIuamF2YQpAQCAtMCwwICsxLDUzIEBACisvLyBTcGF0aWFsUHJvdmlkZXJBZGFwdGVyLmphdmEKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5hZGFwdGVycy5zcGF0aWFsOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LmltcGwuQWRhcHRlckltcGw7CisKKy8qKgorICogVGhpcyBjbGFzcyBpcyBleHRlbmRlZCBieSBjbGFzc2VzIHRoYXQgYWRhcHQgSWRlbnRpZmlhYmxlcyB0bworICogU3BhdGlhbFByb3ZpZGVycy4KKyAqIAorICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLklkZW50aWZpYWJsZQorICovCithYnN0cmFjdCBwdWJsaWMgY2xhc3MgU3BhdGlhbFByb3ZpZGVyQWRhcHRlciBleHRlbmRzIEFkYXB0ZXJJbXBsIGltcGxlbWVudHMKKwkJU3BhdGlhbFByb3ZpZGVyIHsKKworCS8qKgorCSAqIFRoaXMgaXMgdGhlIHNjaGVtZSB1c2VkIGZvciBzcGVjaWZ5aW5nIFVSSSdzIHRoYXQgYXJlIHZhbHVlcyBmb3IgdGhlCisJICogPGVtPnNwYXRpYWw8L2VtPiBhdHRyaWJ1dGUgb2YgYW4gPGNvZGU+SWRlbnRpZmlhYmxlPC9jb2RlPidzIGR1YmxpbgorCSAqIGNvcmUgaW5zdGFuY2UuIElmIHRoZSB2YWx1ZSBpcyBhIHZhbGlkIFVSSSB0aGF0IGNvbmZvcm1zIHRvIHRoaXMgc2NoZW1lLAorCSAqIGl0IHdpbGwgYmUgaW50ZXJwcmV0ZWQgYnkgdGhlIGFkYXB0ZXIuCisJICogCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLklkZW50aWZpYWJsZQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5EdWJsaW5Db3JlI2dldFNwYXRpYWwoKQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5EdWJsaW5Db3JlI3NldFNwYXRpYWwoU3RyaW5nKQorCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFNURU1fU1BBVElBTF9TQ0hFTUUgPSAic3RlbXNwYXRpYWwiOworCisJLyoqCisJICogdGhlIHNjaGVtZSB3aXRoIGEgY29sb24KKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBTVEVNX1NQQVRJQUxfU0NIRU1FX1BSRUZJWCA9IFNURU1fU1BBVElBTF9TQ0hFTUUKKwkJCSsgIjoiOworCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5pbXBsLkFkYXB0ZXJJbXBsI2lzQWRhcHRlckZvclR5cGUoamF2YS5sYW5nLk9iamVjdCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgYm9vbGVhbiBpc0FkYXB0ZXJGb3JUeXBlKE9iamVjdCB0eXBlKSB7CisJCXJldHVybiB0eXBlID09IFNwYXRpYWxQcm92aWRlci5jbGFzczsKKwl9IC8vIGlzQWRhcHRlckZvclR5cGUKKwkKKwkKK30gLy8gU3BhdGlhbFByb3ZpZGVyQWRhcHRlcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL2FkYXB0ZXJzL3NwYXRpYWwvU3BhdGlhbFByb3ZpZGVyQWRhcHRlckZhY3RvcnkuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy9hZGFwdGVycy9zcGF0aWFsL1NwYXRpYWxQcm92aWRlckFkYXB0ZXJGYWN0b3J5LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2UzNTM0MQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy9hZGFwdGVycy9zcGF0aWFsL1NwYXRpYWxQcm92aWRlckFkYXB0ZXJGYWN0b3J5LmphdmEKQEAgLTAsMCArMSwzMyBAQAorLy8gU3BhdGlhbFByb3ZpZGVyQWRhcHRlckZhY3RvcnkuamF2YQorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmFkYXB0ZXJzLnNwYXRpYWw7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuaW1wbC5BZGFwdGVyRmFjdG9yeUltcGw7CisKKy8qKgorICogVGhpcyBjbGFzcyBpcyBleHRlbmRlZCBieSBjbGFzc2VzIHRoYXQgY3JlYXRlIGFkYXB0ZXJzIHRoYXQgYWRhcHQKKyAqIElkZW50aWZpYWJsZXMgdG8gU3BhdGlhbFByb3ZpZGVycy4KKyAqIAorICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLklkZW50aWZpYWJsZQorICovCitwdWJsaWMgYWJzdHJhY3QgY2xhc3MgU3BhdGlhbFByb3ZpZGVyQWRhcHRlckZhY3RvcnkgZXh0ZW5kcyBBZGFwdGVyRmFjdG9yeUltcGwgeworCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5pbXBsLkFkYXB0ZXJGYWN0b3J5SW1wbCNpc0ZhY3RvcnlGb3JUeXBlKGphdmEubGFuZy5PYmplY3QpCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIGJvb2xlYW4gaXNGYWN0b3J5Rm9yVHlwZShPYmplY3QgdHlwZSkgeworCQlyZXR1cm4gdHlwZSA9PSBTcGF0aWFsUHJvdmlkZXIuY2xhc3M7CisJfSAvLyBpc0ZhY3RvcnlGb3JUeXBlCisKK30gLy8gU3BhdGlhbFByb3ZpZGVyQWRhcHRlckZhY3RvcnkKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy9hZGFwdGVycy9zcGF0aWFsL2dlby9JbmxpbmVMYXRMb25nRGF0YVByb3ZpZGVyLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvYWRhcHRlcnMvc3BhdGlhbC9nZW8vSW5saW5lTGF0TG9uZ0RhdGFQcm92aWRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNjYzAwMDgKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvYWRhcHRlcnMvc3BhdGlhbC9nZW8vSW5saW5lTGF0TG9uZ0RhdGFQcm92aWRlci5qYXZhCkBAIC0wLDAgKzEsMTY2IEBACisvLyBJbmxpbmVMYXRMb25nRGF0YVByb3ZpZGVyLmphdmEKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5hZGFwdGVycy5zcGF0aWFsLmdlbzsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqYXZhLnRleHQuTnVtYmVyRm9ybWF0OworaW1wb3J0IGphdmEudXRpbC5TdHJpbmdUb2tlbml6ZXI7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuVVJJOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuQWN0aXZhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuYWRhcHRlcnMuc3BhdGlhbC5TcGF0aWFsUHJvdmlkZXJBZGFwdGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuYWRhcHRlcnMuc3BhdGlhbC5nZW8uTGF0TG9uZy5TZWdtZW50OworCisvKioKKyAqIFRoaXMgY2xhc3MgaW50ZXJwcmV0cyBhIFVSSSB0aGF0IGNvbnRhaW5zIGVtYmVkZGVkIChpLmUuLCAiaW5saW5lIikgbGF0L2xvbmcKKyAqIGRhdGEuCisgKiA8cD4KKyAqIFRoZSBmb3JtYXQgb2YgdGhlIFVSSSBpcyBhIGNvbW1hIHNlcGFyYXRlZCBsaXN0IG9mIGxhdC9sb25nIHBhaXJzIGFzIGRvdWJsZQorICogdmFsdWVzLiBUaGVzZSBjYW4gYmUgc2VwYXJhdGVkIGludG8gInNlZ21lbnRzIiBieSBzbGFzaGVzICgiLyIpIHdoaWNoIHdpbGwKKyAqIGNyZWF0ZSBzZXBhcmF0ZSBsYXQvbG9uZyBzZXF1ZW5jZXMgKGFycmF5cykgaW4gdGhlIHJldHVybiB2YWx1ZS4KKyAqIAorICogPHByZT4KKyAqICAgZS5nLiwgJnF1b3Q7aW5saW5lOkxhdDEsTG9uZzEsTGF0MixMb25nMi9MYXQzLExvbmczLExhdDQsTG9uZzQmcXVvdDsKKyAqIDwvcHJlPgorICogCisgKiA8L3A+CisgKiAKKyAqIEBzZWUgUGxhdGZvcm1MYXRMb25nRGF0YVByb3ZpZGVyCisgKiBAc2VlIExhdExvbmdQcm92aWRlckFkYXB0ZXIKKyAqLworcHVibGljIGNsYXNzIElubGluZUxhdExvbmdEYXRhUHJvdmlkZXIgaW1wbGVtZW50cyBMYXRMb25nRGF0YVByb3ZpZGVyIHsKKworCS8qKgorCSAqIFRoaXMgaXMgdGhlIHNjaGVtZSBmb3IgYW4gImlubGluZSIgZGF0YSBVUkkgdGhhdCBzcGVjaWZpZXMgbGF0L2xvbmcgZGF0YQorCSAqIGluIHRoZSBVUkkKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBJTkxJTkVfU0NIRU1FID0gImlubGluZSI7CisKKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgTlVNQkVSX09GX0ZBQ1RJT05BTF9ESUdJVFMgPSAyOworCisJcHJpdmF0ZSBzdGF0aWMgTnVtYmVyRm9ybWF0IGZvcm1hdHRlciA9IG51bGw7CisKKwlzdGF0aWMgeworCQkvLyBUaGUgc3RhdGljIGluaXRpYWxpemVyIGlzbid0IGJlaW5nIGNhbGxlZCBpbiBlY2xpcHNlCisJCS8vIFJlZ2lzdGVyIHRoaXMgZGF0YSBwcm92aWRlciB3aXRoIHRoZSBhZGFwdGVyIHNvIGl0IGNhbiBmaW5kIHVzIHdoZW4KKwkJLy8gaXQgY29tZXMgYWNyb3NzIGFuICJpbmxpbmUiIFVSSS4KKwkJLy8gTGF0TG9uZ1Byb3ZpZGVyQWRhcHRlci5yZWdpc3RlckxhdExvbmdEYXRhUHJvdmlkZXIoSU5MSU5FX1NDSEVNRSwKKwkJLy8gbmV3IElubGluZUxhdExvbmdEYXRhUHJvdmlkZXIoKSk7CisJfSAvLyBzdGF0aWMKKworCS8qKgorCSAqIEBwYXJhbSBkYXRhVVJJCisJICogQHJldHVybiBhIGxhdGl0dWRlL2xvbmdpdHVkZSB2YWx1ZQorCSAqLworCXB1YmxpYyBMYXRMb25nIGdldExhdExvbmcoZmluYWwgVVJJIGRhdGFVUkkpIHsKKwkJZmluYWwgTGF0TG9uZyByZXRWYWx1ZSA9IG5ldyBMYXRMb25nKCk7CisKKwkJZmluYWwgU3RyaW5nW10gc2VnbWVudHMgPSBkYXRhVVJJLnNlZ21lbnRzKCk7CisJCXRyeSB7CisJCQlmb3IgKGZpbmFsIFN0cmluZyBzZWdtZW50U3RyaW5nIDogc2VnbWVudHMpIHsKKwkJCQlmaW5hbCBMYXRMb25nLlNlZ21lbnRCdWlsZGVyIHNiID0gbmV3IExhdExvbmcuU2VnbWVudEJ1aWxkZXIoKTsKKworCQkJCWZpbmFsIFN0cmluZ1Rva2VuaXplciBzdCA9IG5ldyBTdHJpbmdUb2tlbml6ZXIoc2VnbWVudFN0cmluZywKKwkJCQkJCSIsIik7CisJCQkJd2hpbGUgKHN0Lmhhc01vcmVUb2tlbnMoKSkgeworCQkJCQlmaW5hbCBTdHJpbmcgbGF0aXR1ZGVTdHJpbmcgPSBzdC5uZXh0VG9rZW4oKTsKKwkJCQkJLy8gSXMgdGhlcmUgYSBtYXRjaGluZyBMb25naXR1ZGU/CisJCQkJCWlmIChzdC5oYXNNb3JlVG9rZW5zKCkpIHsKKwkJCQkJCS8vIFllcworCQkJCQkJc2IuYWRkKGxhdGl0dWRlU3RyaW5nLCBzdC5uZXh0VG9rZW4oKSk7CisJCQkJCX0gZWxzZSB7CisJCQkJCQkvLyBObworCQkJCQkJLy8gbGF0L2xvbmcgbWlzbWF0Y2gKKwkJCQkJCUFjdGl2YXRvcgorCQkJCQkJCQkubG9nRXJyb3IoCisJCQkJCQkJCQkJIklubGluZSBsYXQvbG9uZyBkYXRhIFwiIgorCQkJCQkJCQkJCQkJKyBzZWdtZW50U3RyaW5nCisJCQkJCQkJCQkJCQkrICJcIiBpcyBtaXNzaW5nIGEgbG9uZ2l0dWRlIG1hdGNoIGZvciB0aGUgbGF0aXR1ZGUgXCIiCisJCQkJCQkJCQkJCQkrIGxhdGl0dWRlU3RyaW5nICsgIlwiIiwgbnVsbCk7CisJCQkJCQlzYi5jbGVhcigpOworCQkJCQkJYnJlYWs7CisJCQkJCX0gLy8gZWxzZQorCQkJCX0gLy8gd2hpbGUgbW9yZSB0b2tlbnMKKworCQkJCS8vIEFueXRoaW5nIGluIHRoZSBzZWdtZW50IGJ1aWxkZXI/CisJCQkJaWYgKHNiLnNpemUoKSA+IDApIHsKKwkJCQkJLy8gWWVzCisJCQkJCXJldFZhbHVlLmFkZChzYi50b1NlZ21lbnQoKSk7CisJCQkJfQorCQkJfSAvLyBmb3IgZWFjaCBzZWdtZW50CisJCX0gLy8gdHJ5CisJCWNhdGNoIChmaW5hbCBOdW1iZXJGb3JtYXRFeGNlcHRpb24gbmZlKSB7CisJCQlBY3RpdmF0b3IubG9nSW5mb3JtYXRpb24oCisJCQkJCSJJbmxpbmUgbGF0L2xvbmcgZGF0YSBpcyBub3QgcHJvcGVybHkgZm9ybWF0dGVkIisgbmZlLmdldE1lc3NhZ2UoKSk7CisJCX0gLy8gY2F0Y2gKKwkJcmV0dXJuIHJldFZhbHVlOworCX0gLy8gZ2V0TGF0TG9uZworCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmFkYXB0ZXJzLnNwYXRpYWwuZ2VvLkxhdExvbmdEYXRhUHJvdmlkZXIjZ2V0TGF0TG9uZ05vV2FpdChvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuVVJJKQorCSAqLworCXB1YmxpYyBMYXRMb25nIGdldExhdExvbmdOb1dhaXQoZmluYWwgVVJJIGRhdGFVUkkpIHsKKwkJcmV0dXJuIGdldExhdExvbmcoZGF0YVVSSSk7CisJfSAvLyBnZXRMYXRMb25nTm9XYWl0CisKKwkvKioKKwkgKiBFbmNvZGUgYSBsaXN0IG9mIGFycmF5cyBvZiBkb3VibGUgdmFsdWVzIHJlcHJlc2VudGluZyBwb2x5Z29ucy9saW5lcyBpbnRvCisJICogYW4gc3BhdGlhbCBpbmxpbmUgVVJJIHN0cmluZy4KKwkgKiAKKwkgKiBAcGFyYW0gc2VnbWVudEFycmF5cworCSAqICAgICAgICAgICAgYSBsaXN0IG9mIGFycmF5cyBlYWNoIG9mIHdoaWNoIHJlcHJlc2VudHMgYSBwb2x5Z29uL2xpbmUKKwkgKiBAcmV0dXJuIHRoZSBsaXN0IG9mIHZhbHVlcyBpbiB0aGUgYXJyYXlzIGVuY29kZWQgaW4gYSBzcGF0aWFsIGlubGluZSBVUkkKKwkgKiAgICAgICAgIHN0cmluZworCSAqLworCXB1YmxpYyBzdGF0aWMgU3RyaW5nIGNyZWF0ZVNwYXRpYWxJbmxpbmVVUklTdHJpbmcoCisJCQlmaW5hbCBMYXRMb25nIHNlZ21lbnRBcnJheXMpIHsKKwkJZmluYWwgU3RyaW5nQnVpbGRlciBzYiA9IG5ldyBTdHJpbmdCdWlsZGVyKAorCQkJCVNwYXRpYWxQcm92aWRlckFkYXB0ZXIuU1RFTV9TUEFUSUFMX1NDSEVNRV9QUkVGSVgpOworCQlzYi5hcHBlbmQoY3JlYXRlSW5saW5lVVJJU3RyaW5nKHNlZ21lbnRBcnJheXMpKTsKKwkJcmV0dXJuIHNiLnRvU3RyaW5nKCk7CisJfSAvLyBjcmVhdGVTcGF0aWFsSW5saW5lVVJJU3RyaW5nCisKKwkvKioKKwkgKiBFbmNvZGUgYSBsaXN0IG9mIGFycmF5cyBvZiBkb3VibGUgdmFsdWVzIHJlcHJlc2VudGluZyBwb2x5Z29ucy9saW5lcyBpbnRvCisJICogYW4gaW5saW5lIFVSSSBzdHJpbmcuIFRoaXMgaXMgdGhlIGludmVyc2Ugb3BlcmF0aW9uIG9mCisJICoge0BsaW5rICNnZXRMYXRMb25nKFVSSSl9LgorCSAqIAorCSAqIEBwYXJhbSBsYXRMb25nCisJICogCisJICogQHJldHVybiB0aGUgbGlzdCBvZiB2YWx1ZXMgaW4gdGhlIGFycmF5cyBlbmNvZGVkIGluIGFuIGlubGluZSBVUkkgc3RyaW5nCisJICovCisJcHVibGljIHN0YXRpYyBTdHJpbmcgY3JlYXRlSW5saW5lVVJJU3RyaW5nKGZpbmFsIExhdExvbmcgbGF0TG9uZykgeworCQlmaW5hbCBTdHJpbmdCdWlsZGVyIHNiID0gbmV3IFN0cmluZ0J1aWxkZXIoSU5MSU5FX1NDSEVNRSk7CisJCXNiLmFwcGVuZCgiOi8vIik7CisJCWZvciAoZmluYWwgU2VnbWVudCBzZWdtZW50IDogbGF0TG9uZy5nZXRTZWdtZW50cygpKSB7CisJCQlzYi5hcHBlbmQoIi8iKTsKKwkJCXNiLmFwcGVuZChzZWdtZW50LnRvSW5saW5lVVJJU3RyaW5nKCkpOworCQl9IC8vIGZvciBlYWNoIHNlZ21lbnQKKworCQlyZXR1cm4gc2IudG9TdHJpbmcoKTsKKwl9IC8vIGNyZWF0ZUlubGluZVVSSVN0cmluZworCisJLyoqCisJICogQHJldHVybiBhIGZvcm1hdHRlcgorCSAqLworCXByaXZhdGUgc3RhdGljIE51bWJlckZvcm1hdCBnZXRGb3JtYXR0ZXIoKSB7CisJCS8vIElzIHRoZXJlIGFscmVhZHkgYSBmb3JtYXR0ZXI/CisJCWlmIChmb3JtYXR0ZXIgPT0gbnVsbCkgeworCQkJLy8gTm8KKwkJCWZvcm1hdHRlciA9IE51bWJlckZvcm1hdC5nZXROdW1iZXJJbnN0YW5jZSgpOworCQkJZm9ybWF0dGVyLnNldE1heGltdW1GcmFjdGlvbkRpZ2l0cyhOVU1CRVJfT0ZfRkFDVElPTkFMX0RJR0lUUyk7CisJCQlmb3JtYXR0ZXIuc2V0TWluaW11bUZyYWN0aW9uRGlnaXRzKE5VTUJFUl9PRl9GQUNUSU9OQUxfRElHSVRTKTsKKwkJfQorCQlyZXR1cm4gZm9ybWF0dGVyOworCX0gLy8gZ2V0Rm9ybWF0dGVyCisKK30gLy8gSW5saW5lTGF0TG9uZ0RhdGFQcm92aWRlcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL2FkYXB0ZXJzL3NwYXRpYWwvZ2VvL0xhdExvbmcuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy9hZGFwdGVycy9zcGF0aWFsL2dlby9MYXRMb25nLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzRjMmE3ZQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy9hZGFwdGVycy9zcGF0aWFsL2dlby9MYXRMb25nLmphdmEKQEAgLTAsMCArMSw0ODYgQEAKKy8vIExhdExvbmcuamF2YQorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmFkYXB0ZXJzLnNwYXRpYWwuZ2VvOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CisKKy8qKgorICogVGhpcyBjbGFzcyBpcyBhIGNvbGxlY3Rpb24gb2YgbGF0aXR1ZGUvbG9uZ2l0dWRlIGRhdGEgcGFpcnMgcGFydGl0aW9uZWQgaW50bworICogb25lIG9yIG1vcmUgInNlZ21lbnRzIi4gRWFjaCBzZWdtZW50IGlzIGEgc2VxdWVuY2Ugb2YgbGF0aXR1ZGUvbG9uZ2l0dWRlIGRhdGEKKyAqIHBhaXJzLiBBIHNlZ21lbnQgY291bGQgZm9ybSBhIGNsb3NlZCBwb2x5Z29uIG9yIGl0IGNvdWxkIGJlIGEgcGF0aC4gQQorICoge0BsaW5rIFNlZ21lbnRCdWlsZGVyfSBjYW4gYmUgdXNlZCB0byBjb25zdHJ1Y3QgYSB7QGxpbmsgU2VnbWVudH0uCisgKi8KK3B1YmxpYyBjbGFzcyBMYXRMb25nIHsKKworCXByaXZhdGUgc3RhdGljIGZpbmFsIGludCBOVU1CRVJfT0ZfRkFDVElPTkFMX0RJR0lUUyA9IDI7CisKKwkvL3N0YXRpYyBOdW1iZXJGb3JtYXQgZm9ybWF0dGVyID0gbnVsbDsKKworCXByaXZhdGUgZmluYWwgTGlzdDxTZWdtZW50PiBzZWdtZW50cyA9IG5ldyBBcnJheUxpc3Q8U2VnbWVudD4oKTsKKworCS8qKgorCSAqIEFkZCBhIHNlZ21lbnQgdG8gYSBjb2xsZWN0aW9uCisJICogCisJICogQHBhcmFtIHNlZ21lbnQKKwkgKiAgICAgICAgICAgIHRoZSBzZWdtZW50IHRvIGFkZCB0byB0aGUgY29sbGVjdGlvbgorCSAqLworCXB1YmxpYyB2b2lkIGFkZChmaW5hbCBTZWdtZW50IHNlZ21lbnQpIHsKKwkJc2VnbWVudHMuYWRkKHNlZ21lbnQpOworCX0KKworCS8qKgorCSAqIEBwYXJhbSBzZWdtZW50cworCSAqICAgICAgICAgICAgYWRkIHRoZSBsaXN0IG9mIHNlZ21lbnRzIHRvIHRoZSBjb2xsZWN0aW9uIG1haW50YWluZWQgYnkKKwkgKiAgICAgICAgICAgIExhdExvbmcKKwkgKi8KKwlwdWJsaWMgdm9pZCBhZGQoZmluYWwgTGlzdDxTZWdtZW50PiBzZWdtZW50cykgeworCQl0aGlzLnNlZ21lbnRzLmFkZEFsbChzZWdtZW50cyk7CisJfSAvLyBhZGQKKworCS8qKgorCSAqIEFkZCB0aGUgc2VnbWVudHMgZnJvbSBvbmUgPGNvZGU+TGF0TG9uZzwvY29kZT4gdG8gdGhpcyBvbmUuCisJICogCisJICogQHBhcmFtIGxhdExvbmcKKwkgKiAgICAgICAgICAgIHRoZSA8Y29kZT5MYXRMb25nPC9jb2RlPiBpbnN0YW5jZSB0aGF0IGNvbnRhaW5zIHRoZSBzZWdtZW50cworCSAqICAgICAgICAgICAgdG8gYWRkLgorCSAqLworCXB1YmxpYyB2b2lkIGFkZChmaW5hbCBMYXRMb25nIGxhdExvbmcpIHsKKwkJc2VnbWVudHMuYWRkQWxsKGxhdExvbmcuZ2V0U2VnbWVudHMoKSk7CisJfSAvLyBhZGQKKworCS8qKgorCSAqIEByZXR1cm4gdGhlIGxpc3Qgb2Ygc2VnbWVudHMKKwkgKi8KKwlwdWJsaWMgZmluYWwgTGlzdDxTZWdtZW50PiBnZXRTZWdtZW50cygpIHsKKwkJcmV0dXJuIHNlZ21lbnRzOworCX0gLy8gZ2V0U2VnbWVudHMKKworCS8qKgorCSAqIEByZXR1cm4gdGhlIG51bWJlciBvZiBzZWdtZW50cworCSAqLworCXB1YmxpYyBmaW5hbCBpbnQgc2l6ZSgpIHsKKwkJcmV0dXJuIHNlZ21lbnRzLnNpemUoKTsKKwl9IC8vIHNpemUKKworCS8qKgorCSAqIEBzZWUgamF2YS5sYW5nLk9iamVjdCN0b1N0cmluZygpCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIFN0cmluZyB0b1N0cmluZygpIHsKKwkJcmV0dXJuIEludGVnZXIudG9TdHJpbmcoc2l6ZSgpKTsKKwl9IC8vIHRvU3RyaW5nCisKKwkvKioKKwkgKiBAcmV0dXJuIGEgbnVtYmVyIGZvcm1hdHRlcgorCSAqLworLy8Jc3RhdGljIE51bWJlckZvcm1hdCBnZXRGb3JtYXR0ZXIoKSB7CisvLwkJLy8gSXMgdGhlcmUgYWxyZWFkeSBhIGZvcm1hdHRlcj8KKy8vCQlpZiAoZm9ybWF0dGVyID09IG51bGwpIHsKKy8vCQkJLy8gTm8KKy8vCQkJZm9ybWF0dGVyID0gTnVtYmVyRm9ybWF0LmdldE51bWJlckluc3RhbmNlKCk7CisvLwkJCWZvcm1hdHRlci5zZXRNYXhpbXVtRnJhY3Rpb25EaWdpdHMoTlVNQkVSX09GX0ZBQ1RJT05BTF9ESUdJVFMpOworLy8JCQlmb3JtYXR0ZXIuc2V0TWluaW11bUZyYWN0aW9uRGlnaXRzKE5VTUJFUl9PRl9GQUNUSU9OQUxfRElHSVRTKTsKKy8vCQl9CisvLwkJcmV0dXJuIGZvcm1hdHRlcjsKKy8vCX0gLy8gZ2V0Rm9ybWF0dGVyCisJCisJLyoqCisJICogQ29udmVydHMgZG91YmxlIHZhbHVlIGludG8gYSBmcmFjdGlvbmFsIHN0cmluZyB3aXRoIGZyYWNEaWdpdHMgCisJICogbnVtYmVyIG9mIGRlY2ltYWwgcGxhY2VzLiAgU2hvdWxkIGJlIGxvY2FsZSBhZ25vc3RpYy4KKwkgKiBAcGFyYW0gdmFsdWUgdmFsdWUgdG8gY29udmVydAorCSAqIEBwYXJhbSBmcmFjRGlnaXRzIG51bWJlciBvZiBkaWdpdHMgYWZ0ZXIgZGVjaW1hbCBwb2ludCB0byBob2xkCisJICogQHJldHVybiBTdHJpbmcgY29udGFpbmluZyBuZXcgdmFsdWUKKwkgKi8KKwlzdGF0aWMgU3RyaW5nIGZvcm1hdExhdExuZ1ZhbHVlKGRvdWJsZSB2YWx1ZSwgZG91YmxlIGZyYWNEaWdpdHMpIHsKKwkJCisJCWRvdWJsZSBwb3dlciA9IE1hdGgucG93KDEwLCBmcmFjRGlnaXRzKTsKKwkJcmV0dXJuIFN0cmluZy52YWx1ZU9mKCgobG9uZykodmFsdWUqcG93ZXIpKS9wb3dlcik7CisJfQorCQorCS8qKgorCSAqIENvbnZlcnRzIGRvdWJsZSB2YWx1ZSBpbnRvIGEgZnJhY3Rpb25hbCBzdHJpbmcgd2l0aCBkZWZhdWx0IAorCSAqIG51bWJlciBvZiBkZWNpbWFsIHBsYWNlcy4gIFNob3VsZCBiZSBsb2NhbGUgYWdub3N0aWMuCisJICogQHBhcmFtIHZhbHVlIHZhbHVlIHRvIGNvbnZlcnQKKwkgKiBAcmV0dXJuIFN0cmluZyBjb250YWluaW5nIG5ldyB2YWx1ZQorCSAqLworCXN0YXRpYyBTdHJpbmcgZm9ybWF0TGF0TG5nVmFsdWUoZG91YmxlIHZhbHVlKSB7CisJCXJldHVybiBmb3JtYXRMYXRMbmdWYWx1ZSh2YWx1ZSwgTlVNQkVSX09GX0ZBQ1RJT05BTF9ESUdJVFMpOworCX0KKworCS8qKgorCSAqIFRoaXMgY2xhc3MgY3JlYXRlcyB7QGxpbmsgU2VnbWVudH0ncworCSAqLworCXB1YmxpYyBzdGF0aWMgY2xhc3MgU2VnbWVudEJ1aWxkZXIgeworCisJCXByaXZhdGUgZmluYWwgTGlzdDxMYXRMb25nUGFpcj4gY29sbGVjdGVkUGFpcnMgPSBuZXcgQXJyYXlMaXN0PExhdExvbmdQYWlyPigpOworCisJCS8qKgorCQkgKiBAcGFyYW0gbGF0aXR1ZGVTdHJpbmcKKwkJICogICAgICAgICAgICBhIGRvdWJsZSBsYXRpdHVkZSB2YWx1ZSByZXByZXNlbnRlZCBhcyBhCisJCSAqICAgICAgICAgICAgPGNvZGU+U3RyaW5nPC9jb2RlPgorCQkgKiBAcGFyYW0gbG9uZ2l0dWRlU3RyaW5nCisJCSAqICAgICAgICAgICAgYSBkb3VibGUgbG9uZ2l0dWRlIHZhbHVlIHJlcHJlc2VudGVkIGFzIGEKKwkJICogICAgICAgICAgICA8Y29kZT5TdHJpbmc8L2NvZGU+CisJCSAqIEB0aHJvd3MgTnVtYmVyRm9ybWF0RXhjZXB0aW9uCisJCSAqLworCQlwdWJsaWMgdm9pZCBhZGQoZmluYWwgU3RyaW5nIGxhdGl0dWRlU3RyaW5nLGZpbmFsIFN0cmluZyBsb25naXR1ZGVTdHJpbmcpIHRocm93cyBOdW1iZXJGb3JtYXRFeGNlcHRpb24geworCQkJZG91YmxlIGRMYXQgPSBEb3VibGUucGFyc2VEb3VibGUobGF0aXR1ZGVTdHJpbmcpOworCQkJZG91YmxlIGRMbmcgPSBEb3VibGUucGFyc2VEb3VibGUobG9uZ2l0dWRlU3RyaW5nKTsKKwkJCWFkZChkTGF0LGRMbmcpOworCQl9IC8vIGFkZAorCisKKwkJLyoqCisJCSAqIEBwYXJhbSBsYXRpdHVkZQorCQkgKiBAcGFyYW0gbG9uZ2l0dWRlCisJCSAqLworCQlwdWJsaWMgdm9pZCBhZGQoZmluYWwgZG91YmxlIGxhdGl0dWRlLCBmaW5hbCBkb3VibGUgbG9uZ2l0dWRlKSB7CisJCQljb2xsZWN0ZWRQYWlycy5hZGQobmV3IExhdExvbmdQYWlyKGxhdGl0dWRlLCBsb25naXR1ZGUpKTsKKwkJfSAvLyBhZGQKKworCQkvKioKKwkJICogQHJldHVybiB0aGUgbnVtYmVyIG9mIGxhdGl0dWRlL2xvbmdpdHVkZSBkYXRhIHBhaXJzIGluIHRoZSBzZWdtZW50CisJCSAqICAgICAgICAgYmVpbmcgYnVpbHQuCisJCSAqLworCQlwdWJsaWMgaW50IHNpemUoKSB7CisJCQlyZXR1cm4gY29sbGVjdGVkUGFpcnMuc2l6ZSgpOworCQl9IC8vIHNpemUKKworCQkvKioKKwkJICogUmVtb3ZlIGFsbCBvZiB0aGUgY29sbGVjdGVkIGxhdGl0dWRlL2xvbmdpdHVkZSBwYWlycyBjb2xsZWN0ZWQgc28gZmFyCisJCSAqLworCQlwdWJsaWMgdm9pZCBjbGVhcigpIHsKKwkJCWNvbGxlY3RlZFBhaXJzLmNsZWFyKCk7CisJCX0gLy8gY2xlYXIKKworCQkvKioKKwkJICogQHJldHVybiB0aGUgY29sbGVjdGVkIGxhdGl0dWRlL2xvbmdpdHVkZSBkYXRhIHBhaXJzIGFzIGEgc2VnbWVudC4KKwkJICovCisJCXB1YmxpYyBTZWdtZW50IHRvU2VnbWVudCgpIHsKKwkJCXJldHVybiB0b1NlZ21lbnQoY29sbGVjdGVkUGFpcnMpOworCQl9IC8vIHRvU2VnbWVudAorCisJCS8qKgorCQkgKiBDcmVhdGUgYSB7QGxpbmsgU2VnbWVudH0sIGJ1dCByZWR1Y2UgdGhlIG51bWJlciBvZiBkYXRhIHBvaW50cyBpdAorCQkgKiBjb250YWlucyBieSB0aGUgc2FtcGxlIGZyZXF1ZW5jeS4gQSB2YWx1ZSBvZiAiMSIgbWVhbnMgYWxsIHBvaW50cyBhcmUKKwkJICogaW5jbHVkZWQsIGEgdmFsdWUgb2YgIjIiIG1lYW5zIHRoYXQgZXZlcnkgMm5kIHBvaW50IGlzIGluY2x1ZGVkLiBUaGUKKwkJICogZmlyc3QgYW5kIGxhc3QgcG9pbnRzIGFyZSBhbHdheXMgaW5jbHVkZWQuCisJCSAqIAorCQkgKiBAcGFyYW0gc2FtcGxlRnJlcXVlbmN5CisJCSAqICAgICAgICAgICAgdGhlIGZyZXF1ZW5jeSBpbiBkYXRhIHBvaW50cyBhdCB3aGljaCB0aGUgcGFpcnMgYXJlCisJCSAqICAgICAgICAgICAgc2FtcGxlZC4KKwkJICogQHJldHVybiBhIHN1YnNldCBvZiB0aGUgY29sbGVjdGVkIGxhdGl0dWRlL2xvbmdpdHVkZSBkYXRhIHBhaXJzIGFzIGEKKwkJICogICAgICAgICBzZWdtZW50LgorCQkgKiBAdGhyb3dzIElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiBpZiBzYW1wbGVGcmVxdWVuY3kgaXMgPCAxCisJCSAqLworCQlwdWJsaWMgU2VnbWVudCB0b1NlZ21lbnQoZmluYWwgaW50IHNhbXBsZUZyZXF1ZW5jeSkgeworCQkJcmV0dXJuIHRvU2VnbWVudChjcmVhdGVEb3duU2FtcGxlZFBhaXJzKHNhbXBsZUZyZXF1ZW5jeSwKKwkJCQkJY29sbGVjdGVkUGFpcnMpKTsKKwkJfSAvLyB0b1NlZ21lbnQKKworCQkvKioKKwkJICogQHBhcmFtIHNhbXBsZUZyZXF1ZW5jeSAgdGhlIGZyZXF1ZW5jeSBpbiBkYXRhIHBvaW50cyBhdCB3aGljaCB0aGUgcGFpcnMgYXJlCisJCSAqICAgICAgICAgICAgc2FtcGxlZC4KKwkJICogQHBhcmFtIHBhaXJzCisJCSAqIEB0aHJvd3MgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uIGlmIHNhbXBsZUZyZXF1ZW5jeSBpcyA8IDEKKwkJICovCisJCXByaXZhdGUgZmluYWwgTGlzdDxMYXRMb25nUGFpcj4gY3JlYXRlRG93blNhbXBsZWRQYWlycygKKwkJCQlmaW5hbCBpbnQgc2FtcGxlRnJlcXVlbmN5LCBmaW5hbCBMaXN0PExhdExvbmdQYWlyPiBwYWlycykgeworCQkJZmluYWwgTGlzdDxMYXRMb25nUGFpcj4gZG93blNhbXBsZWRQYWlycyA9IG5ldyBBcnJheUxpc3Q8TGF0TG9uZ1BhaXI+KCk7CisKKwkJCS8vIElzIHRoZSBzYW1wbGUgZnJlcXVlbmN5IHRvbyBzbWFsbD8KKwkJCWlmIChzYW1wbGVGcmVxdWVuY3kgPj0gMSkgeworCQkJCS8vIE5vCisJCQkJZmluYWwgaW50IGxhc3RQb2ludCA9IGNvbGxlY3RlZFBhaXJzLnNpemUoKSAtIDE7CisKKwkJCQkvLyBJcyBpdCBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gdGhlIG51bWJlciBvZiBwYWlycz8KKwkJCQlpZiAoc2FtcGxlRnJlcXVlbmN5IDwgbGFzdFBvaW50KSB7CisJCQkJCS8vIE5vCisJCQkJCWludCBkYXRhUG9pbnRDb3VudGVyID0gMDsKKwkJCQkJZm9yIChmaW5hbCBMYXRMb25nUGFpciBwYWlyIDogcGFpcnMpIHsKKwkJCQkJCS8vIEluY2x1ZGUgdGhpcyBwb2ludD8KKwkJCQkJCWlmIChkYXRhUG9pbnRDb3VudGVyICUgc2FtcGxlRnJlcXVlbmN5ID09IDAKKwkJCQkJCQkJfHwgZGF0YVBvaW50Q291bnRlciA9PSBsYXN0UG9pbnQpIHsKKwkJCQkJCQkvLyBZZXMKKwkJCQkJCQlkb3duU2FtcGxlZFBhaXJzLmFkZChwYWlyKTsKKwkJCQkJCX0gLy8gaWYgaW5jbHVkZSB0aGlzIHBvaW50CisJCQkJCQlkYXRhUG9pbnRDb3VudGVyKys7CisJCQkJCX0gLy8gZm9yIGVhY2ggbGF0L2xvbmcgcG9pbnQKKwkJCQl9IC8vIGlmIHNhbXBsZSBmcmVxdWVuY3kgbm90IGdyZWF0ZXIgdGhhbiBudW1iZXIgb2YgcGFpcnMKKwkJCQllbHNlIHsKKwkJCQkJLy8gWWVzCisJCQkJCS8vIFBpY2sgdGhlIGZpcnN0IHBvaW50LCB0aGUgbWlkZGxlIHBvaW50IGFuZCB0aGUgbGFzdCBwb2ludAorCQkJCQlkb3duU2FtcGxlZFBhaXJzLmFkZChwYWlycy5nZXQoMCkpOworCQkJCQlkb3duU2FtcGxlZFBhaXJzLmFkZChwYWlycy5nZXQocGFpcnMuc2l6ZSgpIC8gMikpOworCQkJCQlkb3duU2FtcGxlZFBhaXJzLmFkZChwYWlycy5nZXQobGFzdFBvaW50KSk7CisJCQkJfSAvLyBlbHNlCisKKwkJCX0gLy8gaWYgc2FtcGxlIGZyZXF1ZW5jeSBub3QgdG9vIHNtYWxsCisJCQllbHNlIHsKKwkJCQkvLyBZZXMKKwkJCQkvLyBCYWQgc2FtcGxlIGZyZXF1ZW5jeQorCQkJCXRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIlNhbXBsZSBmcmVxdWVuY3kgXCIiCisJCQkJCQkrIHNhbXBsZUZyZXF1ZW5jeSArICJcIiBtdXN0IGJlIDEgb3IgZ3JlYXRlciIpOworCQkJfQorCisJCQlyZXR1cm4gZG93blNhbXBsZWRQYWlyczsKKwkJfSAvLyBjcmVhdGVEb3duU2FtcGxlZFBhaXJzCisKKwkJLyoqCisJCSAqIEBwYXJhbSBwYWlycworCQkgKiAgICAgICAgICAgIGEgbGlzdCBvZiBsYXQvbG9uZyBkYXRhIHBhaXJzCisJCSAqIEByZXR1cm4gdGhlIGxhdGl0dWRlL2xvbmdpdHVkZSBkYXRhIHBhaXJzIGFzIGEgc2VnbWVudC4KKwkJICovCisJCXByaXZhdGUgU2VnbWVudCB0b1NlZ21lbnQoZmluYWwgTGlzdDxMYXRMb25nUGFpcj4gcGFpcnMpIHsKKwkJCWZpbmFsIGRvdWJsZVtdW10gZGF0YSA9IG5ldyBkb3VibGVbcGFpcnMuc2l6ZSgpXVsyXTsKKworCQkJaW50IGkgPSAwOworCQkJZm9yIChmaW5hbCBMYXRMb25nUGFpciBsYXRMb25nUGFpciA6IHBhaXJzKSB7CisJCQkJZGF0YVtpXVtTZWdtZW50LkxBVElUVURFX0lOREVYXSA9IGxhdExvbmdQYWlyLmxhdGl0dWRlOworCQkJCWRhdGFbaV1bU2VnbWVudC5MT05HSVRVREVfSU5ERVhdID0gbGF0TG9uZ1BhaXIubG9uZ2l0dWRlOworCQkJCWkrKzsKKwkJCX0KKwkJCXJldHVybiBuZXcgU2VnbWVudChkYXRhKTsKKwkJfSAvLyB0b1NlZ21lbnQKKworCQkvKioKKwkJICogQHNlZSBqYXZhLmxhbmcuT2JqZWN0I3RvU3RyaW5nKCkKKwkJICovCisJCUBPdmVycmlkZQorCQlwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkgeworCQkJZmluYWwgU3RyaW5nQnVpbGRlciBzYiA9IG5ldyBTdHJpbmdCdWlsZGVyKCk7CisJCQkvLyBBbnkgbGF0aXR1ZGUvbG9uZ2l0dWRlIHBhaXJzPworCQkJaWYgKHNpemUoKSA+IDApIHsKKwkJCQlzYi5hcHBlbmQoY29sbGVjdGVkUGFpcnMuZ2V0KDApLnRvU3RyaW5nKCkpOworCQkJCS8vIE1vcmUgdGhhbiAyPworCQkJCWlmIChzaXplKCkgPiAyKSB7CisJCQkJCS8vIFllcworCQkJCQlzYi5hcHBlbmQoIi4uLjwiICsgKHNpemUoKSAtIDIpICsgIj4uLi4iKTsKKwkJCQl9CisJCQkJLy8gV2VyZSB0aGVyZSBhdCBsZWFzdCB0d28/CisJCQkJaWYgKHNpemUoKSA+IDEpIHsKKwkJCQkJLy8gWWVzCisJCQkJCXNiLmFwcGVuZChjb2xsZWN0ZWRQYWlycy5nZXQoc2l6ZSgpIC0gMSkudG9TdHJpbmcoKSk7CisJCQkJfQorCQkJfSAvLyBpZiBhbnkgcGFpcnMKKworCQkJcmV0dXJuIHNiLnRvU3RyaW5nKCk7CisJCX0gLy8gdG9TdHJpbmcKKworCQkvKioKKwkJICogVGhpcyBjbGFzcyByZXByZXNlbnRzIGEgbGF0aXR1ZGUvbG9uZ2l0dWRlIGRhdGEgcGFpci4KKwkJICovCisJCXByaXZhdGUgc3RhdGljIGNsYXNzIExhdExvbmdQYWlyIHsKKwkJCWRvdWJsZSBsYXRpdHVkZSA9IDAuMDsKKworCQkJZG91YmxlIGxvbmdpdHVkZSA9IDAuMDsKKworCQkJLyoqCisJCQkgKiBAcGFyYW0gbGF0CisJCQkgKiBAcGFyYW0gbG5nCisJCQkgKi8KKwkJCXByb3RlY3RlZCBMYXRMb25nUGFpcihmaW5hbCBkb3VibGUgbGF0aXR1ZGUsIGZpbmFsIGRvdWJsZSBsb25naXR1ZGUpIHsKKwkJCQlzdXBlcigpOworCQkJCWFzc2VydCBsb25naXR1ZGUgPj0gLTE4MC4wICYmIGxvbmdpdHVkZSA8PSAxODAuMDsKKwkJCQlhc3NlcnQgbGF0aXR1ZGUgPj0gLTkwLjAgJiYgbGF0aXR1ZGUgPD0gOTAuMDsKKwkJCQl0aGlzLmxhdGl0dWRlID0gbGF0aXR1ZGU7CisJCQkJdGhpcy5sb25naXR1ZGUgPSBsb25naXR1ZGU7CisJCQl9IC8vIExhdExvbmdQYWlyCisKKwkJCS8qKgorCQkJICogQHNlZSBqYXZhLmxhbmcuT2JqZWN0I3RvU3RyaW5nKCkKKwkJCSAqLworCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkgeworCQkJCWZpbmFsIFN0cmluZ0J1ZmZlciBzYiA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKKwkJCQlzYi5hcHBlbmQoZm9ybWF0TGF0TG5nVmFsdWUobGF0aXR1ZGUpKTsKKwkJCQlzYi5hcHBlbmQoIiwgIik7CisJCQkJc2IuYXBwZW5kKGZvcm1hdExhdExuZ1ZhbHVlKGxvbmdpdHVkZSkpOworCQkJCXJldHVybiBzYi50b1N0cmluZygpOworCQkJfQorCisJCX0gLy8gTGF0TG9uZ1BhaXIKKwl9IC8vIFNlZ21lbnRCdWlsZGVyCisKKwkvKioKKwkgKiBUaGlzIGNsYXNzIHJlcHJlc2VudHMgYSBzZXF1ZW5jZSBvZiBsYXRpdHVkZS9sb25naXR1ZGUgZGF0YSBwYWlycy4gQQorCSAqIHNlZ21lbnQgY291bGQgZm9ybSBhIGNsb3NlZCBwb2x5Z29uIG9yIGl0IGNvdWxkIGJlIGEgcGF0aC4KKwkgKi8KKwlwdWJsaWMgc3RhdGljIGNsYXNzIFNlZ21lbnQgeworCisJCS8vIEluIGEgdHdvIGVsZW1lbnQgYXJyYXkgdGhpcyBpcyB0aGUgaW5kZXggb2YgdGhlIGxhdGl0dWRlIHZhbHVlCisJCXN0YXRpYyBmaW5hbCBpbnQgTEFUSVRVREVfSU5ERVggPSAwOworCisJCS8vIEluIGEgdHdvIGVsZW1lbnQgYXJyYXkgdGhpcyBpcyB0aGUgaW5kZXggb2YgdGhlIGxvbmdpdHVkZSB2YWx1ZQorCQlzdGF0aWMgZmluYWwgaW50IExPTkdJVFVERV9JTkRFWCA9IDE7CisKKwkJLyoqCisJCSAqIFRoZSBsYXRpdHVkZS9sb25naXR1ZGUgZGF0YSBwYWlycy4KKwkJICovCisJCXByaXZhdGUgZG91YmxlW11bXSBkYXRhID0gbnVsbDsKKworCQkvKioKKwkJICogQHBhcmFtIGRhdGEKKwkJICogICAgICAgICAgICBhbiBhcnJheSBvZiBsYXRpdHVkZS9sb25naXR1ZGUgcGFpcnMKKwkJICovCisJCXB1YmxpYyBTZWdtZW50KGZpbmFsIGRvdWJsZVtdW10gZGF0YSkgeworCQkJdGhpcy5kYXRhID0gZGF0YTsKKwkJfSAvLyBTZWdtZW50CisKKwkJLyoqCisJCSAqIEBwYXJhbSBpCisJCSAqICAgICAgICAgICAgdGhlIGluZGV4IG9mIHRoZSBkYXRhIHBhaXIKKwkJICogQHJldHVybiB0aGUgbGF0aXR1ZGUgdmFsdWUgb2YgdGhlIGkndGggbGF0aXR1ZGUvbG9uZ2l0dWRlIGRhdGEgcGFpcgorCQkgKi8KKwkJcHVibGljIGRvdWJsZSBsYXRpdHVkZShmaW5hbCBpbnQgaSkgeworCQkJcmV0dXJuIGRhdGFbaV1bTEFUSVRVREVfSU5ERVhdOworCQl9IC8vIGxhdGl0dWRlCisKKwkJLyoqCisJCSAqIEBwYXJhbSBpCisJCSAqICAgICAgICAgICAgdGhlIGluZGV4IG9mIHRoZSBsYXRpdHVkZS9sb25naXR1ZGUgZGF0YSBwYWlyCisJCSAqIEByZXR1cm4gdGhlIGxvbmdpdHVkZSB2YWx1ZSBvZiB0aGUgaSd0aCBsYXRpdHVkZS9sb25naXR1ZGUgZGF0YSBwYWlyCisJCSAqLworCQlwdWJsaWMgZG91YmxlIGxvbmdpdHVkZShmaW5hbCBpbnQgaSkgeworCQkJcmV0dXJuIGRhdGFbaV1bTE9OR0lUVURFX0lOREVYXTsKKwkJfSAvLyBsb25naXR1ZGUKKworCQkvKioKKwkJICogQHJldHVybiB0aGUgbnVtYmVyIG9mIGxhdGl0dWRlL2xvbmdpdHVkZSBkYXRhIHBhaXJzCisJCSAqLworCQlwdWJsaWMgaW50IHNpemUoKSB7CisJCQlyZXR1cm4gZGF0YS5sZW5ndGg7CisJCX0gLy8gc2l6ZQorCisJCS8qKgorCQkgKiBAcmV0dXJuIDxjb2RlPnRydWU8L2NvZGU+IGlmIHRoZSBzZXF1ZW5jZSBvZiBsYXQvbG9uZyBwYWlycyBmb3JtIGEKKwkJICogICAgICAgICBjbG9zZWQgcG9seWdvbiwgPGNvZGU+ZmFsc2U8L2NvZGU+LCBvdGhlcndpc2UuCisJCSAqLworCQlwdWJsaWMgYm9vbGVhbiBpc1BvbHlnb24oKSB7CisJCQlmaW5hbCBpbnQgc2l6ZSA9IGRhdGEubGVuZ3RoOworCQkJcmV0dXJuIHNpemUgPiAyICYmIGRhdGFbMF1bMF0gPT0gZGF0YVtzaXplIC0gMV1bMF0KKwkJCQkJJiYgZGF0YVswXVsxXSA9PSBkYXRhW3NpemUgLSAxXVsxXTsKKwkJfSAvLyBpc1BvbHlnb24KKworCQkvKioKKwkJICogQHJldHVybiBjcmVhdGUgYSBVUkkgc3RyaW5nIHRoZSBlbmNvZGVzIHRoZSBsYXRpdHVkZS9sb25naXR1ZGUgdmFsdWVzCisJCSAqLworCQlwdWJsaWMgU3RyaW5nIHRvSW5saW5lVVJJU3RyaW5nKCkgeworCQkJZmluYWwgU3RyaW5nQnVpbGRlciBzYiA9IG5ldyBTdHJpbmdCdWlsZGVyKCk7CisKKwkJCWZvciAoaW50IGkgPSAwOyBpIDwgZGF0YS5sZW5ndGg7IGkrKykgeworCQkJCXNiLmFwcGVuZChmb3JtYXRMYXRMbmdWYWx1ZShkYXRhW2ldW0xBVElUVURFX0lOREVYXSkpOworCQkJCXNiLmFwcGVuZCgiLCIpOworCQkJCXNiLmFwcGVuZChmb3JtYXRMYXRMbmdWYWx1ZShkYXRhW2ldW0xPTkdJVFVERV9JTkRFWF0pKTsKKwkJCQkvLyBBbnkgbW9yZSB2YWx1ZXM/CisJCQkJaWYgKGkgPCBkYXRhLmxlbmd0aCAtIDEpIHsKKwkJCQkJLy8gWWVzCisJCQkJCXNiLmFwcGVuZCgiLCIpOworCQkJCX0KKwkJCX0KKwkJCXJldHVybiBzYi50b1N0cmluZygpOworCQl9IC8vIHRvSW5saW5lVVJJU3RyaW5nCisKKwkJLyoqCisJCSAqIEBzZWUgamF2YS5sYW5nLk9iamVjdCN0b1N0cmluZygpCisJCSAqLworCQlAT3ZlcnJpZGUKKwkJcHVibGljIFN0cmluZyB0b1N0cmluZygpIHsKKworCQkJZmluYWwgU3RyaW5nQnVpbGRlciBzYiA9IG5ldyBTdHJpbmdCdWlsZGVyKCk7CisJCQkvLyBBbnkgbGF0aXR1ZGUvbG9uZ2l0dWRlIHBhaXJzPworCQkJaWYgKGRhdGEubGVuZ3RoID4gMCkgeworCQkJCS8vIFllcworCQkJCXNiLmFwcGVuZChmb3JtYXRMYXRMbmdWYWx1ZShkYXRhWzBdW0xBVElUVURFX0lOREVYXSkpOworCQkJCXNiLmFwcGVuZCgiLCIpOworCQkJCXNiLmFwcGVuZChmb3JtYXRMYXRMbmdWYWx1ZShkYXRhWzBdW0xPTkdJVFVERV9JTkRFWF0pKTsKKworCQkJCS8vIE1vcmUgdGhhbiAyPworCQkJCWlmIChkYXRhLmxlbmd0aCA+IDIpIHsKKwkJCQkJLy8gWWVzCisJCQkJCXNiLmFwcGVuZCgiLi4uPCIgKyAoZGF0YS5sZW5ndGggLSAyKSArICI+Li4uIik7CisJCQkJfQorCQkJCS8vIFdlcmUgdGhlcmUgYXQgbGVhc3QgdHdvPworCQkJCWlmIChkYXRhLmxlbmd0aCA+IDEpIHsKKwkJCQkJLy8gWWVzCisJCQkJCXNiLmFwcGVuZChmb3JtYXRMYXRMbmdWYWx1ZSgKKwkJCQkJCQlkYXRhW2RhdGEubGVuZ3RoIC0gMV1bTEFUSVRVREVfSU5ERVhdKSk7CisJCQkJCXNiLmFwcGVuZCgiLCIpOworCQkJCQlzYi5hcHBlbmQoZm9ybWF0TGF0TG5nVmFsdWUoCisJCQkJCQkJZGF0YVtkYXRhLmxlbmd0aCAtIDFdW0xPTkdJVFVERV9JTkRFWF0pKTsKKwkJCQl9CisKKwkJCX0gLy8gaWYgYW55IHBhaXJzCisKKwkJCXJldHVybiBzYi50b1N0cmluZygpOworCQl9IC8vIHRvU3RyaW5nCisKKwkJLyoqCisJCSAqIEBzZWUgamF2YS5sYW5nLk9iamVjdCNoYXNoQ29kZSgpCisJCSAqLworCQlAT3ZlcnJpZGUKKwkJcHVibGljIGludCBoYXNoQ29kZSgpIHsKKworCQkJZG91YmxlIHN1bSA9IDEuMDsKKwkJCWZvciAoZmluYWwgZG91YmxlW10gZWxlbWVudCA6IGRhdGEpIHsKKwkJCQlzdW0gKz0gTWF0aC5hYnMoZWxlbWVudFswXSArIGVsZW1lbnRbMV0pOworCQkJfQorCisJCQkvLyRBTkFMWVNJUy1JR05PUkUKKwkJCWZpbmFsIGludCB0ZW1wID0gKChpbnQpIHN1bSkgKiAzMTsKKworCQkJcmV0dXJuIHRlbXAgKyBkYXRhLmxlbmd0aDsKKwkJCS8vIGZpbmFsIGludCBQUklNRSA9IDMxOworCQkJLy8gaW50IHJlc3VsdCA9IDE7CisJCQkvLyByZXN1bHQgPSBQUklNRSAqIHJlc3VsdCArIEFycmF5cy5oYXNoQ29kZShkYXRhKTsKKwkJCS8vIHJldHVybiByZXN1bHQ7CisJCX0KKworCQkvKioKKwkJICogQHNlZSBqYXZhLmxhbmcuT2JqZWN0I2VxdWFscyhqYXZhLmxhbmcuT2JqZWN0KQorCQkgKi8KKwkJQE92ZXJyaWRlCisJCXB1YmxpYyBib29sZWFuIGVxdWFscyhmaW5hbCBPYmplY3Qgb2JqKSB7CisJCQlpZiAodGhpcyA9PSBvYmopIHsKKwkJCQlyZXR1cm4gdHJ1ZTsKKwkJCX0KKwkJCWlmIChvYmogPT0gbnVsbCkgeworCQkJCXJldHVybiBmYWxzZTsKKwkJCX0KKwkJCWlmIChnZXRDbGFzcygpICE9IG9iai5nZXRDbGFzcygpKSB7CisJCQkJcmV0dXJuIGZhbHNlOworCQkJfQorCQkJZmluYWwgU2VnbWVudCBvdGhlciA9IChTZWdtZW50KSBvYmo7CisKKwkJCWlmIChkYXRhLmxlbmd0aCAhPSBvdGhlci5kYXRhLmxlbmd0aCkgeworCQkJCXJldHVybiBmYWxzZTsKKwkJCX0KKworCQkJZm9yIChmaW5hbCBkb3VibGVbXSBlbGVtZW50IDogZGF0YSkgeworCQkJCWlmIChlbGVtZW50W0xBVElUVURFX0lOREVYXSAhPSBlbGVtZW50W0xBVElUVURFX0lOREVYXSkgeworCQkJCQlyZXR1cm4gZmFsc2U7CisJCQkJfQorCQkJCWlmIChlbGVtZW50W0xPTkdJVFVERV9JTkRFWF0gIT0gZWxlbWVudFtMT05HSVRVREVfSU5ERVhdKSB7CisJCQkJCXJldHVybiBmYWxzZTsKKwkJCQl9CisJCQl9CisKKwkJCS8vIGlmICghQXJyYXlzLmVxdWFscyhkYXRhLCBvdGhlci5kYXRhKSkKKwkJCS8vIHJldHVybiBmYWxzZTsKKwkJCXJldHVybiB0cnVlOworCQl9CisKKwl9IC8vIFNlZ21lbnQKKworfSAvLyBMYXRMb25nCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvYWRhcHRlcnMvc3BhdGlhbC9nZW8vTGF0TG9uZ0RhdGFQcm92aWRlci5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL2FkYXB0ZXJzL3NwYXRpYWwvZ2VvL0xhdExvbmdEYXRhUHJvdmlkZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jOTQ2ZWRlCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL2FkYXB0ZXJzL3NwYXRpYWwvZ2VvL0xhdExvbmdEYXRhUHJvdmlkZXIuamF2YQpAQCAtMCwwICsxLDU3IEBACisvLyBMYXRMb25nRGF0YVByb3ZpZGVyLmphdmEKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5hZGFwdGVycy5zcGF0aWFsLmdlbzsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuVVJJOworCisvKioKKyAqIFRoaXMgaW50ZXJmYWNlIGlzIGV4dGVuZGVkIGJ5IGNsYXNzZXMgdGhhdCBjYW4gaW50ZXJwcmV0IGEgImRhdGEgdXJpIiBhcworICogY29udGFpbmVkIGluIGEgInN0ZW1zcGF0aWFsIiBVUkkgYW5kIHJldHVybiBsYXRpdHVkZSBhbmQgbG9uZ2l0dWRlIGRhdGEgZnJvbQorICogdGhlIHNvdXJjZSBzcGVjaWZpZWQgYnkgdGhlIFVSSS4gVGhlIHtAbGluayBMYXRMb25nUHJvdmlkZXJBZGFwdGVyfSBtYWludGFpbnMKKyAqIGEgc3RhdGljIHNpbmdsZXRvbiBjb2xsZWN0aW9uIG9mIGNsYXNzZXMgdGhhdCBpbXBsZW1lbnQgdGhpcyBpbnRlcmZhY2UuIFRoZQorICogY29sbGVjdGlvbiBpcyBpbmRleGVkIGJ5IHRoZSBzY2hlbWUgb2YgdGhlIFVSSSB0aGV5IGhhbmRsZS4gSXQgdXNlcyB0aGlzCisgKiBjb2xsZWN0aW9uIHRvIGZpbmQgdGhlIGFwcHJvcHJpYXRlIGluc3RhbmNlIGZvciB0aGUgVVJJJ3MgaXQgZW5jb3VudGVycyB0aGF0CisgKiBuZWVkIHRvIGJlIHByb2Nlc3NlZC4gVGhhdCBwcm9jZXNzaW5nIGlzIGRlbGVnYXRlZCB0byBjbGFzc2VzIHRoYXQgZXh0ZW5kCisgKiB0aGlzIGludGVyZmFjZS4KKyAqIDxwPgorICogVGh1cywgaWYgeW91IGV4dGVuZCB0aGlzIGludGVyZmFjZSB5b3Ugc2hvdWxkIGFsc28gcmVnaXN0ZXIgYW4gaW5zdGFuY2Ugb2YKKyAqIHlvdXIgY2xhc3Mgd2l0aCB0aGUgbWV0aG9kCisgKiB7QGxpbmsgTGF0TG9uZ1Byb3ZpZGVyQWRhcHRlciNyZWdpc3RlckxhdExvbmdEYXRhUHJvdmlkZXIoU3RyaW5nLCBMYXRMb25nRGF0YVByb3ZpZGVyKX0uCisgKiAKKyAqIEBzZWUgTGF0TG9uZ1Byb3ZpZGVyQWRhcHRlcgorICovCitwdWJsaWMgaW50ZXJmYWNlIExhdExvbmdEYXRhUHJvdmlkZXIgeworCisJLyoqCisJICogQHBhcmFtIGRhdGFVUkkKKwkgKiAgICAgICAgICAgIHRoZSBkYXRhIFVSSSB0byBiZSBwcm9jZXNzZWQgYnkgdGhpcyBwcm92aWRlcgorCSAqIEByZXR1cm4gYSBsaXN0IG9mIGFycmF5cyBvZiBsYXRpdHVkZS9sb25naXR1ZGUgcGFpcnMuCisJICovCisJTGF0TG9uZyBnZXRMYXRMb25nKFVSSSBkYXRhVVJJKTsKKworCS8qKgorCSAqIFRoaXMgbWV0aG9kIGlzIGp1c3QgbGlrZSB7QGxpbmsgI2dldExhdExvbmcoVVJJKX0gZXhjZXB0IHRoYXQgaXQgd2lsbAorCSAqIGltbWVkaWF0ZWx5IHJldHVybiB3aXRoIGFuIGVtcHR5IHtAbGluayBMYXRMb25nfSBpbnN0YW5jZSBpZiB0aGUgZGF0YQorCSAqIGlkZW50aWZpZWQgYnkgdGhlIFVSSSBoYXMgbm90IGJlZW4gcmV0cmlldmVkLiBBcyBhIHNpZGUgZWZmZWN0LCBpdCB3aWxsCisJICogY3JlYXRlIGEgc2VwYXJhdGUge0BsaW5rIG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5qb2JzLkpvYn0gKGkuZS4sCisJICogPGNvZGU+VGhyZWFkPC9jb2RlPikgdG8gcmV0cmlldmUgdGhlIGRhdGEuIElmIHRoYXQKKwkgKiB7QGxpbmsgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLmpvYnMuSm9ifSBjb21wbGV0ZXMgc3VjY2Vzc2Z1bGx5LCBhCisJICogZnV0dXJlIGNhbGwgd2lsbCByZXR1cm4gdGhlIGFwcHJvcHJpYXRlIGRhdGEuCisJICogCisJICogQHBhcmFtIGRhdGFVUkkKKwkgKiAgICAgICAgICAgIHRoZSBkYXRhIFVSSSB0byBiZSBwcm9jZXNzZWQgYnkgdGhpcyBwcm92aWRlcgorCSAqIEByZXR1cm4gYW4gaW5zdGFuY2Ugb2YgbGF0aXR1ZGUvbG9uZ2l0dWRlIGRhdGEuCisJICovCisJTGF0TG9uZyBnZXRMYXRMb25nTm9XYWl0KFVSSSBkYXRhVVJJKTsKKworfSAvLyBMYXRMb25nRGF0YVByb3ZpZGVyCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvYWRhcHRlcnMvc3BhdGlhbC9nZW8vTGF0TG9uZ1Byb3ZpZGVyLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvYWRhcHRlcnMvc3BhdGlhbC9nZW8vTGF0TG9uZ1Byb3ZpZGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDFiNGRjMgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy9hZGFwdGVycy9zcGF0aWFsL2dlby9MYXRMb25nUHJvdmlkZXIuamF2YQpAQCAtMCwwICsxLDQ2IEBACisvLyBMYXRMb25nUHJvdmlkZXIuamF2YQorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmFkYXB0ZXJzLnNwYXRpYWwuZ2VvOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuYWRhcHRlcnMuc3BhdGlhbC5TcGF0aWFsUHJvdmlkZXI7CisKKy8qKgorICogVGhpcyBpbnRlcmZhY2UgaXMgaW1wbGVtZW50ZWQgYnkgY2xhc3NlcyB0aGF0IHByb3ZpZGUgTGF0aXR1ZGUgYW5kIExvbmdpdHVkZQorICogZGF0YS4KKyAqLworcHVibGljIGludGVyZmFjZSBMYXRMb25nUHJvdmlkZXIgZXh0ZW5kcyBTcGF0aWFsUHJvdmlkZXIgeworCisJLyoqCisJICogQHJldHVybiBsYXRpdHVkZS9sb25naXR1ZGUgZGF0YS4KKwkgKi8KKwlMYXRMb25nIGdldExhdExvbmcoKTsKKworCS8qKgorCSAqIFRoaXMgaXMganVzdCBsaWtlIHtAbGluayAjZ2V0TGF0TG9uZygpfSBleGNlcHQgdGhhdCBpdCByZXR1cm5zIGFuIGVtcHR5CisJICogaW5zdGFuY2Ugb2Yge0BsaW5rIExhdExvbmd9IGlmIHRoZSBkYXRhIGhhcyBub3QgYmVlbiByZXRyaWV2ZWQgeWV0LiBBcyBhCisJICogc2lkZSBlZmZlY3QsIGl0IGltbWVkaWF0ZWx5IHNjaGVkdWxlcyBhCisJICoge0BsaW5rIG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5qb2JzLkpvYn0gdG8gcmV0cmlldmUgdGhlIGRhdGEuIEFzIHN1Y2gsCisJICogYSBmdXR1cmUgY2FsbCBtaWdodCBwcm9kdWNlIGEgZnVsbHkgcG9wdWxhdGVkIHJlc3VsdC4KKwkgKiAKKwkgKiBAcmV0dXJuIGxhdGl0dWRlL2xvbmdpdHVkZSBkYXRhLgorCSAqLworCUxhdExvbmcgZ2V0TGF0TG9uZ05vV2FpdCgpOworCQorCS8qKgorCSAqIFRoaXMgbWV0aG9kIHdpbGwgcmV0dXJuIHRoZSBMYXRpdHVkZSBhbmQgTG9uZ2l0dWRlIHZhbHVlcyBmb3IgdGhlIGFkYXB0ZWQKKwkgKiBvYmplY3QsIGlmIHN1Y2ggZXhpc3RzLiAKKwkgKiBAcmV0dXJuIExhdGl0dWRlIGFuZCBMb25naXR1ZGUgdmFsdWVzIGZvciB0aGUgYWRhcHRlZCBvYmplY3QKKwkgKi8KKwlkb3VibGVbXSBnZXRDZW50ZXIoKTsKKworfSAvLyBMYXRMb25nUHJvdmlkZXIKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy9hZGFwdGVycy9zcGF0aWFsL2dlby9MYXRMb25nUHJvdmlkZXJBZGFwdGVyLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvYWRhcHRlcnMvc3BhdGlhbC9nZW8vTGF0TG9uZ1Byb3ZpZGVyQWRhcHRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI5ZjVkNTEKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvYWRhcHRlcnMvc3BhdGlhbC9nZW8vTGF0TG9uZ1Byb3ZpZGVyQWRhcHRlci5qYXZhCkBAIC0wLDAgKzEsMzYxIEBACisvLyBMYXRMb25nUHJvdmlkZXJBZGFwdGVyLmphdmEKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5hZGFwdGVycy5zcGF0aWFsLmdlbzsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKK2ltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7CitpbXBvcnQgamF2YS51dGlsLk1hcDsKK2ltcG9ydCBqYXZhLnV0aWwuY29uY3VycmVudC5Db25jdXJyZW50SGFzaE1hcDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5VUkk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5JZGVudGlmaWFibGU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5BY3RpdmF0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5hZGFwdGVycy5zcGF0aWFsLlNwYXRpYWxQcm92aWRlckFkYXB0ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5hZGFwdGVycy5zcGF0aWFsLmdlby5MYXRMb25nLlNlZ21lbnQ7CisKKy8qKgorICogVGhpcyBjbGFzcyBhZGFwdHMgPGNvZGU+SWRlbnRpZmlhYmxlPC9jb2RlPidzIHRvCisgKiA8Y29kZT5MYXRMb25nUHJvdmlkZXI8L2NvZGU+J3MuIEl0IGV4dHJhY3RzIHRoZSBsYXQvbG9uZyBkYXRhIGJ5IGV4YW1pbmluZworICogdGhlIDxlbT5zcGF0aWFsPC9lbT4gYXR0cmlidXRlIG9mIGFuIDxjb2RlPklkZW50aWZpYWJsZTwvY29kZT4ncyBkdWJsaW4KKyAqIGNvcmUgaW5zdGFuY2UuIFR5cGljYWxseSwgdGhlIHZhbHVlIG9mIHRoZSBhdHRyaWJ1dGUgd2lsbCBiZSByZWNvZ25pemVkIGJ5CisgKiB0aGUgYWRhcHRlciBhbmQgdGhlIHZhbHVlcyByZXR1cm5lZC4gSWYgdGhlIGF0dHJpYnV0ZSBkb2VzIG5vdCBoYXZlIGEgdmFsdWUKKyAqIG9yIHRoZSBmb3JtYXQgb2YgdGhlIHZhbHVlIGlzIG5vdCByZWNvZ25pemVkLCB0aGVuIGFuIGVtcHR5IGxpc3Qgd2lsbCBiZQorICogcmV0dXJuZWQuCisgKiA8cD4KKyAqIFRoZSBmb3JtYXQgcmVjb2duaXplZCBieSB0aGUgYWRhcHRlciBpcyBhIFVSSSB3aXRoIHRoZSBzY2hlbWUgZGVmaW5lZCBieSB0aGUKKyAqIGNvbnN0YW50IHtAbGluayAjU1RFTV9TUEFUSUFMX1NDSEVNRSBTVEVNX1NQQVRJQUxfU0NIRU1FfQorICogCisgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uSWRlbnRpZmlhYmxlCisgKi8KK3B1YmxpYyBjbGFzcyBMYXRMb25nUHJvdmlkZXJBZGFwdGVyIGV4dGVuZHMgU3BhdGlhbFByb3ZpZGVyQWRhcHRlciBpbXBsZW1lbnRzCisJCUxhdExvbmdQcm92aWRlciB7CisKKwlwcml2YXRlIHN0YXRpYyBNYXA8SWRlbnRpZmlhYmxlLCBMYXRMb25nPiBpZGVudGlmaWFibGVMYXRMb25nQ2FjaGUgPSBuZXcgQ29uY3VycmVudEhhc2hNYXA8SWRlbnRpZmlhYmxlLCBMYXRMb25nPigpOworCXByaXZhdGUgc3RhdGljIE1hcDxJZGVudGlmaWFibGUsIGRvdWJsZVtdPiBpZGVudGlmaWFibGVDZW50ZXJDYWNoZSA9IG5ldyBDb25jdXJyZW50SGFzaE1hcDxJZGVudGlmaWFibGUsIGRvdWJsZVtdPigpOworCisJcHJpdmF0ZSBzdGF0aWMgTWFwPFN0cmluZywgTGF0TG9uZ0RhdGFQcm92aWRlcj4gbGF0TG9uZ0RhdGFQcm92aWRlcnMgPSBudWxsOworCisJLyoqCisJICogQWRkIHRoZSBsYXRMb25nRGF0YVByb3ZpZGVyIHRvIHRoZSBjb2xsZWN0aW9uIG9mIGF2YWlsYWJsZSB0byB0aGlzCisJICogYWRhcHRlcgorCSAqIAorCSAqIEBwYXJhbSBzY2hlbWUKKwkgKiAgICAgICAgICAgIHRoZSBrZXkgb2YgdGhlIFVSSSdzIHRoYXQgdGhlIGRhdGEgcHJvdmlkZXIgcHJvY2Vzc2VzCisJICogQHBhcmFtIGxhdExvbmdEYXRhUHJvdmlkZXIKKwkgKiAgICAgICAgICAgIHRoZSBkYXRhIHByb3ZpZGVyCisJICovCisJcHVibGljIHN0YXRpYyB2b2lkIHJlZ2lzdGVyTGF0TG9uZ0RhdGFQcm92aWRlcihmaW5hbCBTdHJpbmcgc2NoZW1lLAorCQkJZmluYWwgTGF0TG9uZ0RhdGFQcm92aWRlciBsYXRMb25nRGF0YVByb3ZpZGVyKSB7CisJCWdldExhdExvbmdEYXRhUHJvdmlkZXJzKCkucHV0KHNjaGVtZSwgbGF0TG9uZ0RhdGFQcm92aWRlcik7CisJfSAvLyByZWdpc3RlckxhdExvbmdEYXRhUHJvdmlkZXIKKworCS8qKgorCSAqIEByZXR1cm4gdGhlIG1hcCBiZXR3ZWVuIHNjaGVtZSdzIGFuZCB0aGVpciBsYXQvbG9uZyBkYXRhIHByb3ZpZGVycworCSAqLworCXN5bmNocm9uaXplZCBwdWJsaWMgc3RhdGljIE1hcDxTdHJpbmcsIExhdExvbmdEYXRhUHJvdmlkZXI+IGdldExhdExvbmdEYXRhUHJvdmlkZXJzKCkgeworCQkvLyBIYXMgdGhlIGhhcyBNYXAgYmVlbiBhbGxvY2F0ZWQgeWV0PworCQlpZiAobGF0TG9uZ0RhdGFQcm92aWRlcnMgPT0gbnVsbCkgeworCQkJLy8gTm8KKwkJCWxhdExvbmdEYXRhUHJvdmlkZXJzID0gbmV3IEhhc2hNYXA8U3RyaW5nLCBMYXRMb25nRGF0YVByb3ZpZGVyPigpOworCisJCQkvLyBXZSdyZSBkb2luZyB0aGlzIGhlcmUgYmVjYXVzZSB0aGUgc3RhdGljIGluaXRpYWxpemVyIGluCisJCQkvLyBJbmxpbmVMYXRMb25nRGF0YVByb3ZpZGVyIGlzbid0IGJlaW5nIGNhbGxlZC4KKwkJCWxhdExvbmdEYXRhUHJvdmlkZXJzLnB1dChJbmxpbmVMYXRMb25nRGF0YVByb3ZpZGVyLklOTElORV9TQ0hFTUUsCisJCQkJCW5ldyBJbmxpbmVMYXRMb25nRGF0YVByb3ZpZGVyKCkpOworCQkJbGF0TG9uZ0RhdGFQcm92aWRlcnMucHV0KAorCQkJCQlQbGF0Zm9ybUxhdExvbmdEYXRhUHJvdmlkZXIuUExBVEZPUk1fU0NIRU1FLAorCQkJCQluZXcgUGxhdGZvcm1MYXRMb25nRGF0YVByb3ZpZGVyKCkpOworCQl9CisJCXJldHVybiBsYXRMb25nRGF0YVByb3ZpZGVyczsKKwl9IC8vIGdldExhdExvbmdEYXRhUHJvdmlkZXJzCisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LmltcGwuQWRhcHRlckltcGwjaXNBZGFwdGVyRm9yVHlwZShqYXZhLmxhbmcuT2JqZWN0KQorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBib29sZWFuIGlzQWRhcHRlckZvclR5cGUoZmluYWwgT2JqZWN0IHR5cGUpIHsKKwkJYm9vbGVhbiByZXRWYWx1ZSA9IHR5cGUgPT0gTGF0TG9uZ1Byb3ZpZGVyLmNsYXNzOworCQkvLyBUcnkgdG8gdGhlIHN1cGVyIGNsYXNzPworCQlpZiAoIXJldFZhbHVlKSB7CisJCQkvLyBZZXMKKwkJCXJldFZhbHVlID0gc3VwZXIuaXNBZGFwdGVyRm9yVHlwZSh0eXBlKTsKKwkJfSAvLyBpZgorCQlyZXR1cm4gcmV0VmFsdWU7CisJfSAvLyBpc0FkYXB0ZXJGb3JUeXBlCisKKwkvKioKKwkgKiBAcmV0dXJuIHRoZSBsYXQvbG9uZyB2YWx1ZQorCSAqLworCXB1YmxpYyBMYXRMb25nIGdldExhdExvbmcoKSB7CisJCWZpbmFsIElkZW50aWZpYWJsZSBpZGVudGlmaWFibGUgPSAoSWRlbnRpZmlhYmxlKSBnZXRUYXJnZXQoKTsKKwkJTGF0TG9uZyByZXRWYWx1ZSA9IGlkZW50aWZpYWJsZUxhdExvbmdDYWNoZS5nZXQoaWRlbnRpZmlhYmxlKTsKKworCQkvLyBEbyB3ZSBoYXZlIGEgdmFsdWUgaW4gdGhlIGNhY2hlPworCQlpZiAocmV0VmFsdWUgPT0gbnVsbCkgeworCQkJLy8gTm8KKwkJCXJldFZhbHVlID0gbmV3IExhdExvbmcoKTsKKworCQkJLy8gRmlyc3QgbGV0J3MgZ2V0IHRoZSB2YWx1ZSBvZiB0aGUgc3BhdGlhbCBhdHRyaWJ1dGUgb2YgdGhlCisJCQkvLyBJZGVudGlmaWFibGUsIGlmIHRoZXJlIGlzIG9uZS4KKwkJCWZpbmFsIFN0cmluZyBzcGF0aWFsVmFsdWUgPSBpZGVudGlmaWFibGUuZ2V0RHVibGluQ29yZSgpCisJCQkJCS5nZXRTcGF0aWFsKCk7CisJCQkvLyBJcyB0aGVyZSBhIHNwYXRpYWwgdmFsdWUgZm9yIHRoaXMgSWRlbnRpZmlhYmxlIGFuZCBkb2VzIGl0IHN0YXJ0CisJCQkvLyB3aXRoIHRoZSBjb3JyZWN0IHByZWZpeD8KKwkJCWlmIChzcGF0aWFsVmFsdWUgIT0gbnVsbAorCQkJCQkmJiBzcGF0aWFsVmFsdWUKKwkJCQkJCQkuc3RhcnRzV2l0aChTcGF0aWFsUHJvdmlkZXJBZGFwdGVyLlNURU1fU1BBVElBTF9TQ0hFTUVfUFJFRklYKSkgeworCQkJCS8vIFllcworCQkJCS8vIFRyeSB0byBpbnRlcnByZXQgaXQgYnkgcGFyc2luZyBpdCBhcyBhIFVSSQorCQkJCXRyeSB7CisJCQkJCS8vIFRoaXMgaXMgd2hlcmUgaXQgbWlnaHQgYmUgcG9zc2libGUgdG8gZ2V0IGZhbmN5IHdpdGgKKwkJCQkJLy8gaW50ZXJwcmV0aW5nIHRoZSBVUkkuIFRoZSBmb3JtYXQgaXMKKwkJCQkJLy8gInN0ZW1zcGF0aWFsOmRhdGFVUkkiLgorCQkJCQkvLyBXaGVyZSAiZGF0YVVSSSIgaXMgdGhlIHJlYWwgc3BlY2lmaWNhdGlvbiBvZiB0aGUgZGF0YS4KKwkJCQkJLy8gRm9yIGV4YW1wbGUgd2UgbWlnaHQgaGF2ZQorCQkJCQkvLyAic3RlbXBzcGF0aWFsOmlubGluZTovLy8xMjAuMCwxMDEuMCwxMjAuMCwxMjAuMCIgd2hpY2gKKwkJCQkJLy8gd291bGQgZGlyZWN0bHkgKGkuZS4sICJpbmxpbmUiKSBkZWZpbmUgdGhlIGRhdGEgZm9yIGEKKwkJCQkJLy8gbGluZSBiZXR3ZWVuIHR3byBwb2ludHMgb24gdGhlIEVhcnRoJ3Mgc3VyZmFjZSBmcm9tCisJCQkJCS8vICIxMjAuMFcsCisJCQkJCS8vIDEwMS4wTiIgdG8gIjEyMC4wVywgMTIwLjBOIi4gT3IsCisJCQkJCS8vICJzdGVtc3BhdGlhbDpwbGF0Zm9ybTovLy9mb28vZGF0YS9iYXIuZ21sIiB3aGljaCB3b3VsZAorCQkJCQkvLyBzcGVjaWZ5IGEgZmlsZSBjb250YWluaW5nIHRoZSBkYXRhLgorCisJCQkJCWZpbmFsIFVSSSBkYXRhVVJJID0gZXh0cmFjdERhdGFVUkkoc3BhdGlhbFZhbHVlKTsKKworCQkJCQkvLyBXZXJlIHdlIHN1Y2Nlc3NmdWwgaW4gZXh0cmFjdGluZyBhIFVSSSBmcm9tIHRoZSBzdHJpbmc/CisJCQkJCWlmIChkYXRhVVJJICE9IG51bGwpIHsKKwkJCQkJCS8vIFllcworCQkJCQkJLy8gVGhpcyBjYWxsIHdpbGwgYXR0ZW1wdCB0byBmaW5kIHNvbWV0aGluZyB0aGF0IGNhbgorCQkJCQkJLy8gdW5kZXJzdGFuZCB0aGUgZGF0YVVSSSBhbmQgY29tZSB1cCB3aXRoIGxhdC9sb25nIGRhdGEKKwkJCQkJCS8vIGlmIGl0IGNhbiwgb3RoZXJ3aXNlIGlmIGl0IGNhbiBiZSBpbnRlcnByZXRlZCwgYQorCQkJCQkJLy8gbWVzc2FnZQorCQkJCQkJLy8gaXMgZHJvcHBlZCBpbnRvIHRoZSBsb2cgYW5kIGFuIGVtcHR5IGxpc3Qgd2lsbCBiZQorCQkJCQkJLy8gcmV0dXJuZWQKKwkJCQkJCXJldFZhbHVlID0gZ2V0TGF0TG9uZyhkYXRhVVJJKTsKKwkJCQkJCWlmIChyZXRWYWx1ZSAhPSBudWxsKSB7CisJCQkJCQkJaWRlbnRpZmlhYmxlTGF0TG9uZ0NhY2hlCisJCQkJCQkJCQkucHV0KGlkZW50aWZpYWJsZSwgcmV0VmFsdWUpOworCQkJCQkJfQorCQkJCQl9CisJCQkJCS8vIGVsc2UgdGhlIHByb2JsZW0gd2FzIGxvZ2dlZCBzbyBqdXN0IGlnbm9yZSBhbmQgcmV0dXJuIGFuCisJCQkJCS8vIGVtcHR5IGxpc3QKKwkJCQl9IGNhdGNoIChmaW5hbCBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24gZSkgeworCQkJCQkvLyBXZSBnZXQgaGVyZSB3aGVuIHRoZSB2YWx1ZSBvZiB0aGUgc3BhdGlhbCBhdHRyaWJ1dGUgaXNuJ3QKKwkJCQkJLy8gc29tZXRoaW5nIHdlIHVuZGVyc3RhbmQgc28gd2UncmUgZG9uZSwgd2UnbGwganVzdCByZXR1cm4KKwkJCQkJLy8gYW4KKwkJCQkJLy8gZW1wdHkgY29sbGVjdGlvbi4KKwkJCQl9CisKKwkJCX0gLy8gaWYgc3BhdGlhbCB2YWx1ZQorCQl9IC8vIGlmIHZhbHVlIGluIGNhY2hlCisKKwkJcmV0dXJuIHJldFZhbHVlOworCX0gLy8gZ2V0TGF0TG9uZworCisJLyoqCisJICogQHJldHVybiB0aGUgbGF0L2xvbmcgdmFsdWUKKwkgKi8KKwlwdWJsaWMgTGF0TG9uZyBnZXRMYXRMb25nTm9XYWl0KCkgeworCisJCWZpbmFsIElkZW50aWZpYWJsZSBpZGVudGlmaWFibGUgPSAoSWRlbnRpZmlhYmxlKSBnZXRUYXJnZXQoKTsKKwkJTGF0TG9uZyByZXRWYWx1ZSA9IGlkZW50aWZpYWJsZUxhdExvbmdDYWNoZS5nZXQoaWRlbnRpZmlhYmxlKTsKKworCQkvLyBEbyB3ZSBoYXZlIGEgdmFsdWUgaW4gdGhlIGNhY2hlPworCQlpZiAocmV0VmFsdWUgPT0gbnVsbCkgeworCQkJLy8gTm8KKwkJCXJldFZhbHVlID0gbmV3IExhdExvbmcoKTsKKworCQkJZmluYWwgU3RyaW5nIHNwYXRpYWxWYWx1ZSA9IGlkZW50aWZpYWJsZS5nZXREdWJsaW5Db3JlKCkKKwkJCQkJLmdldFNwYXRpYWwoKTsKKwkJCS8vIElzIHRoZXJlIGEgc3BhdGlhbCB2YWx1ZSBmb3IgdGhpcyBJZGVudGlmaWFibGUgYW5kIGRvZXMgaXQgc3RhcnQKKwkJCS8vIHdpdGggdGhlIGNvcnJlY3QgcHJlZml4PworCQkJaWYgKHNwYXRpYWxWYWx1ZSAhPSBudWxsCisJCQkJCSYmIHNwYXRpYWxWYWx1ZQorCQkJCQkJCS5zdGFydHNXaXRoKFNwYXRpYWxQcm92aWRlckFkYXB0ZXIuU1RFTV9TUEFUSUFMX1NDSEVNRV9QUkVGSVgpKSB7CisJCQkJLy8gWWVzCisJCQkJLy8gVHJ5IHRvIGludGVycHJldCBpdCBieSBwYXJzaW5nIGl0IGFzIGEgVVJJCisJCQkJdHJ5IHsKKwkJCQkJLy8gVGhpcyBpcyB3aGVyZSBpdCBtaWdodCBiZSBwb3NzaWJsZSB0byBnZXQgZmFuY3kgd2l0aAorCQkJCQkvLyBpbnRlcnByZXRpbmcgdGhlIFVSSS4gVGhlIGZvcm1hdCBpcworCQkJCQkvLyAic3RlbXNwYXRpYWw6ZGF0YVVSSSIuIFdoZXJlICJkYXRhVVJJIiBpcyB0aGUgcmVhbAorCQkJCQkvLyBzcGVjaWZpY2F0aW9uIG9mIHRoZSBkYXRhLiBGb3IgZXhhbXBsZSB3ZSBtaWdodCBoYXZlCisJCQkJCS8vICJzdGVtcHNwYXRpYWw6aW5saW5lOi8vLzEyMC4wLDEwMS4wLDEyMC4wLDEyMC4wIiB3aGljaAorCQkJCQkvLyB3b3VsZCBkaXJlY3RseSAoaS5lLiwgIiIpIGRlZmluZSB0aGUgZGF0YSBmb3IgYQorCQkJCQkvLyBsaW5lIGJldHdlZW4gdHdvIHBvaW50cyBvbiB0aGUgRWFydGgncyBzdXJmYWNlIGZyb20KKwkJCQkJLy8gIjEyMC4wVywgMTAxLjBOIiB0byAiMTIwLjBXLCAxMjAuME4iLiBPciwKKwkJCQkJLy8gInN0ZW1zcGF0aWFsOnBsYXRmb3JtOi8vL2Zvby9kYXRhL2Jhci5nbWwiIHdoaWNoIHdvdWxkCisJCQkJCS8vIHNwZWNpZnkgYSBmaWxlIGNvbnRhaW5pbmcgdGhlIGRhdGEuCisKKwkJCQkJZmluYWwgVVJJIGRhdGFVUkkgPSBleHRyYWN0RGF0YVVSSShzcGF0aWFsVmFsdWUpOworCisJCQkJCS8vIFdlcmUgd2Ugc3VjY2Vzc2Z1bCBpbiBleHRyYWN0aW5nIGEgVVJJIGZyb20gdGhlIHN0cmluZz8KKwkJCQkJaWYgKGRhdGFVUkkgIT0gbnVsbCkgeworCQkJCQkJLy8gWWVzCisJCQkJCQkvLyBUaGlzIGNhbGwgd2lsbCBhdHRlbXB0IHRvIGZpbmQgc29tZXRoaW5nIHRoYXQgY2FuCisJCQkJCQkvLyB1bmRlcnN0YW5kIHRoZSBkYXRhVVJJIGFuZCBjb21lIHVwIHdpdGggbGF0L2xvbmcgZGF0YQorCQkJCQkJLy8gaWYgaXQgY2FuLCBvdGhlcndpc2UgaWYgaXQgY2FuIGJlIGludGVycHJldGVkLCBhCisJCQkJCQkvLyBtZXNzYWdlIGlzIGRyb3BwZWQgaW50byB0aGUgbG9nIGFuZCBhbiBlbXB0eSBsaXN0CisJCQkJCQkvLyB3aWxsIGJlIHJldHVybmVkCisJCQkJCQlyZXRWYWx1ZSA9IGdldExhdExvbmdOb1dhaXQoZGF0YVVSSSk7CisJCQkJCQlpZiAocmV0VmFsdWUgIT0gbnVsbCkgeworCQkJCQkJCS8vIElzIGl0IGVtcHR5PworCQkJCQkJCWlmIChyZXRWYWx1ZS5zaXplKCkgPiAwKSB7CisJCQkJCQkJCS8vIE5vCisJCQkJCQkJCS8vIFdlIGRvbid0IGNhY2hlIGVtcHR5IHZhbHVlcyBiZWNhdXNlIHRoYXQgaXMKKwkJCQkJCQkJLy8gd2hhdCBpcyByZXR1cm5lZCBhcyBhIHRlbXBvcmFyeSB2YWx1ZSBpbgorCQkJCQkJCQkvLyAiTm9XYWl0IiBjYWxscy4gQSBzZXBhcmF0ZSBKb2IgbWlnaHQgYmUKKwkJCQkJCQkJLy8gcmVhZGluZyBpbiB0aGUgdmFsdWVzIGZvciB0aGUgZnV0dXJlIHNvIGlmIHdlCisJCQkJCQkJCS8vIGNhY2hlIGVtcHR5IHZhbHVlcyB3ZSdkIHJldHVybiB0aGVtIGluc3RlYWQKKwkJCQkJCQkJLy8gb2YgZ2V0dGluZyB0aGUgcmVhbCB2YWx1ZSByZWFkIGluIGxhdGVyLgorCQkJCQkJCQlpZGVudGlmaWFibGVMYXRMb25nQ2FjaGUucHV0KGlkZW50aWZpYWJsZSwKKwkJCQkJCQkJCQlyZXRWYWx1ZSk7CisJCQkJCQkJfQorCQkJCQkJfQorCQkJCQl9CisJCQkJCS8vIGVsc2UgdGhlIHByb2JsZW0gd2FzIGxvZ2dlZCBzbyBqdXN0IGlnbm9yZSBhbmQgcmV0dXJuIGFuCisJCQkJCS8vIGVtcHR5IHZhbHVlCisJCQkJfSBjYXRjaCAoZmluYWwgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uIGUpIHsKKwkJCQkJLy8gV2UgZ2V0IGhlcmUgd2hlbiB0aGUgdmFsdWUgb2YgdGhlIHNwYXRpYWwgYXR0cmlidXRlIGlzbid0CisJCQkJCS8vIHNvbWV0aGluZyB3ZSB1bmRlcnN0YW5kIHNvIHdlJ3JlIGRvbmUsIHdlJ2xsIGp1c3QgcmV0dXJuCisJCQkJCS8vIGFuIGVtcHR5IGNvbGxlY3Rpb24uCisJCQkJfQorCisJCQl9IC8vIGlmIHNwYXRpYWwgdmFsdWUKKwkJfSAvLyBpZiB2YWx1ZSBub3QgaW4gY2FjaGUKKwkJcmV0dXJuIHJldFZhbHVlOworCX0gLy8gZ2V0TGF0TG9uZ05vV2FpdAorCisJLyoqCisJICogQHBhcmFtIHN0ZW1TcGF0aWFsVVJJCisJICogICAgICAgICAgICBhIFVSSSB3aXRoIGEgInN0ZW1zcGF0aWFsIiBzY2hlbWUuIFRoZSBmb3JtYXQgb2YgdGhlIFVSSSBpcworCSAqICAgICAgICAgICAgInN0ZW1wc3BhdGlhbDpkYXRhVVJJIgorCSAqIEBzZWUgU3BhdGlhbFByb3ZpZGVyQWRhcHRlciNTVEVNX1NQQVRJQUxfU0NIRU1FCisJICogQHJldHVybiB0aGUgZGF0YSBVUkkgZXh0cmFjdGVkIGZyb20gdGhlIHN0ZW1TcGF0aWFsVVJJCisJICovCisJcHJpdmF0ZSBVUkkgZXh0cmFjdERhdGFVUkkoZmluYWwgU3RyaW5nIHN0ZW1TcGF0aWFsVVJJU3RyaW5nKSB7CisJCVVSSSByZXRWYWx1ZSA9IG51bGw7CisKKwkJdHJ5IHsKKwkJCWZpbmFsIFN0cmluZyBkYXRhVVJJU3RyaW5nID0gc3RlbVNwYXRpYWxVUklTdHJpbmcKKwkJCQkJLnN1YnN0cmluZyhTcGF0aWFsUHJvdmlkZXJBZGFwdGVyLlNURU1fU1BBVElBTF9TQ0hFTUVfUFJFRklYCisJCQkJCQkJLmxlbmd0aCgpKTsKKworCQkJcmV0VmFsdWUgPSBVUkkuY3JlYXRlVVJJKGRhdGFVUklTdHJpbmcpOworCQl9IGNhdGNoIChmaW5hbCBFeGNlcHRpb24gZSkgeworCQkJQWN0aXZhdG9yLmxvZ0Vycm9yKCJCYWRseSBmb3JtYXRlZCBzcGF0aWFsIFVSSSBcIiIKKwkJCQkJKyBzdGVtU3BhdGlhbFVSSVN0cmluZyArICJcIiIsIG51bGwpOworCQl9CisJCXJldHVybiByZXRWYWx1ZTsKKwl9IC8vIGV4dHJhY3REYXRhVVJJCisKKwkvKioKKwkgKiBAcGFyYW0gZGF0YVVSSQorCSAqICAgICAgICAgICAgdGhlIFVSSSBleHRyYWN0ZWQgZnJvbSBhIGR1YmxpbiBjb3JlIDxlbT5zcGF0aWFsPC9lbT4KKwkgKiAgICAgICAgICAgIGF0dHJpYnV0ZSB0aGF0IHNwZWNpZmllcyB0aGUgbG9jYXRpb24gb2YgbGF0L2xvbmcgZGF0YQorCSAqIEByZXR1cm4gYSBsaXN0IG9mIGFycmF5cyBvZiBsYXRpdHVkZS9sb25naXR1ZGUgcGFpcnMuCisJICovCisJcHJpdmF0ZSBMYXRMb25nIGdldExhdExvbmcoZmluYWwgVVJJIGRhdGFVUkkpIHsKKwkJTGF0TG9uZyByZXRWYWx1ZSA9IG5ldyBMYXRMb25nKCk7CisKKwkJZmluYWwgTGF0TG9uZ0RhdGFQcm92aWRlciBsYXRMb25nRGF0YVByb3ZpZGVyID0gZ2V0TGF0TG9uZ0RhdGFQcm92aWRlcihkYXRhVVJJCisJCQkJLnNjaGVtZSgpKTsKKwkJLy8gRGlkIHdlIGZpbmQgYSBkYXRhIHByb3ZpZGVyPworCQlpZiAobGF0TG9uZ0RhdGFQcm92aWRlciAhPSBudWxsKSB7CisJCQkvLyBZZXMKKwkJCXJldFZhbHVlID0gbGF0TG9uZ0RhdGFQcm92aWRlci5nZXRMYXRMb25nKGRhdGFVUkkpOworCQl9IGVsc2UgeworCQkJQWN0aXZhdG9yLmxvZ0Vycm9yKAorCQkJCQkiVW5hYmxlIHRvIGZpbmQgYSBsYXQvbG9uZyBkYXRhIHByb3ZpZGVyIGZvciBzY2hlbWUgXCIiCisJCQkJCQkJKyBkYXRhVVJJLnNjaGVtZSgpICsgIlwiIiwgbnVsbCk7CisJCX0KKworCQlyZXR1cm4gcmV0VmFsdWU7CisJfSAvLyBnZXRMYXRMb25nCisKKwkvKioKKwkgKiBAcGFyYW0gZGF0YVVSSQorCSAqICAgICAgICAgICAgdGhlIFVSSSBleHRyYWN0ZWQgZnJvbSBhIGR1YmxpbiBjb3JlIDxlbT5zcGF0aWFsPC9lbT4KKwkgKiAgICAgICAgICAgIGF0dHJpYnV0ZSB0aGF0IHNwZWNpZmllcyB0aGUgbG9jYXRpb24gb2YgbGF0L2xvbmcgZGF0YQorCSAqIEByZXR1cm4gYSBsaXN0IG9mIGFycmF5cyBvZiBsYXRpdHVkZS9sb25naXR1ZGUgcGFpcnMuCisJICovCisJcHJpdmF0ZSBMYXRMb25nIGdldExhdExvbmdOb1dhaXQoZmluYWwgVVJJIGRhdGFVUkkpIHsKKwkJTGF0TG9uZyByZXRWYWx1ZSA9IG5ldyBMYXRMb25nKCk7CisKKwkJZmluYWwgTGF0TG9uZ0RhdGFQcm92aWRlciBsYXRMb25nRGF0YVByb3ZpZGVyID0gZ2V0TGF0TG9uZ0RhdGFQcm92aWRlcihkYXRhVVJJCisJCQkJLnNjaGVtZSgpKTsKKwkJLy8gRGlkIHdlIGZpbmQgYSBkYXRhIHByb3ZpZGVyPworCQlpZiAobGF0TG9uZ0RhdGFQcm92aWRlciAhPSBudWxsKSB7CisJCQkvLyBZZXMKKwkJCXJldFZhbHVlID0gbGF0TG9uZ0RhdGFQcm92aWRlci5nZXRMYXRMb25nTm9XYWl0KGRhdGFVUkkpOworCQl9IGVsc2UgeworCQkJQWN0aXZhdG9yLmxvZ0Vycm9yKAorCQkJCQkiVW5hYmxlIHRvIGZpbmQgYSBsYXQvbG9uZyBkYXRhIHByb3ZpZGVyIGZvciBzY2hlbWUgXCIiCisJCQkJCQkJKyBkYXRhVVJJLnNjaGVtZSgpICsgIlwiIiwgbnVsbCk7CisJCX0KKworCQlyZXR1cm4gcmV0VmFsdWU7CisJfSAvLyBnZXRMYXRMb25nTm9XYWl0CisJCisJLyogKG5vbi1KYXZhZG9jKQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5hZGFwdGVycy5zcGF0aWFsLmdlby5MYXRMb25nUHJvdmlkZXIjZ2V0Q2VudGVyKCkKKwkgKi8KKwlwdWJsaWMgZG91YmxlW10gZ2V0Q2VudGVyKCkgewkJCisJCS8vRmlyc3QgdHJ5IHRvIGdldCB0aGUgY2VudGVyIG9mIHRoZSBpZGVudGlmaWFibGUgZnJvbSB0aGUgY2FjaGUKKwkJZG91YmxlW10gY2VudGVyTGF0TG9uZyA9IGlkZW50aWZpYWJsZUNlbnRlckNhY2hlLmdldChnZXRUYXJnZXQoKSk7CisJCWlmIChjZW50ZXJMYXRMb25nICE9IG51bGwpIHsKKwkJCS8vWWVzLCBpdCB3YXMgYWxyZWFkeSBjYWxjdWxhdGVkIHNvIGp1c3QgcmV0dXJuIHRoZSB2YWx1ZQorCQkJcmV0dXJuIGNlbnRlckxhdExvbmc7CisJCX0KKwkJCisJCS8vQ2FsY3VsYXRlIHRoZSBjZW50ZXIgYW5kIHB1dCBpdCBpbiB0aGUgY2FjaGUKKwkJY2VudGVyTGF0TG9uZyA9IG5ldyBkb3VibGVbMl07CisJCWRvdWJsZSBtYXhMYXQgPSBEb3VibGUuTUFYX1ZBTFVFLCBtYXhMb25nID0gRG91YmxlLk1BWF9WQUxVRSwgbWluTGF0ID0gRG91YmxlLk1JTl9WQUxVRSwgbWluTG9uZyA9IERvdWJsZS5NSU5fVkFMVUU7CisJCUxhdExvbmcgbGF0TG9uZyA9IGdldExhdExvbmcoKTsKKwkJaWYgKGxhdExvbmcuZ2V0U2VnbWVudHMoKS5pc0VtcHR5KCkpIHsKKwkJCXJldHVybiBudWxsOworCQl9CisJCUl0ZXJhdG9yPFNlZ21lbnQ+IHNlZ21lbnRzSXRlciA9IGxhdExvbmcuZ2V0U2VnbWVudHMoKS5pdGVyYXRvcigpOworCQl3aGlsZShzZWdtZW50c0l0ZXIuaGFzTmV4dCgpKSB7CisJCQlTZWdtZW50IHNlZ21lbnQgPSBzZWdtZW50c0l0ZXIubmV4dCgpOworCQkJaWYgKG1heExhdCA9PSBEb3VibGUuTUFYX1ZBTFVFICYmIG1pbkxhdCA9PSBEb3VibGUuTUlOX1ZBTFVFKSB7IC8vQXJiaXRyYXJ5IGluaXRpYWxpemUgdmFsdWVzIGZyb20gc2VnbWVudAorCQkJCW1heExhdCA9IG1pbkxhdCA9IHNlZ21lbnQubGF0aXR1ZGUoMCk7CisJCQkJbWF4TG9uZyA9IG1pbkxvbmcgPSBzZWdtZW50LmxvbmdpdHVkZSgwKTsKKwkJCX0KKwkJCWZpbmFsIGludCBzaXplID0gc2VnbWVudC5zaXplKCk7CisJCQlmb3IgKGludCBpPTA7IGk8c2l6ZTsgaSsrKSB7CQkJCQorCQkJCWRvdWJsZSBsb24gPSBzZWdtZW50LmxvbmdpdHVkZShpKTsKKwkJCQlkb3VibGUgbGF0ID0gc2VnbWVudC5sYXRpdHVkZShpKTsKKwkJCQlpZiAobWF4TG9uZyA8IGxvbikgbWF4TG9uZyA9IGxvbjsKKwkJCQlpZiAobWF4TGF0IDwgbGF0KSBtYXhMYXQgPSBsYXQ7CisJCQkJaWYgKG1pbkxvbmcgPiBsb24pIG1pbkxvbmcgPSBsb247CisJCQkJaWYgKG1pbkxhdCA+IGxhdCkgbWluTGF0ID0gbGF0OworCQkJfQorCQl9CisJCWNlbnRlckxhdExvbmdbMF0gPSAobWF4TGF0ICsgbWluTGF0KSAvIDIuMDsKKwkJY2VudGVyTGF0TG9uZ1sxXSA9IChtYXhMb25nICsgbWluTG9uZykgLyAyLjA7CisJCWlkZW50aWZpYWJsZUNlbnRlckNhY2hlLnB1dCgoSWRlbnRpZmlhYmxlKWdldFRhcmdldCgpLCBjZW50ZXJMYXRMb25nKTsKKwkJcmV0dXJuIGNlbnRlckxhdExvbmc7CisJfSAvLyBnZXRDZW50ZXIKKworCS8qKgorCSAqIEBwYXJhbSBzY2hlbWUKKwkgKiAgICAgICAgICAgIHRoZSBzY2hlbWUgb2YgdGhlIGRhdGEgVVJJIHRoYXQgd2UncmUgbG9va2luZyBmb3IgYSBsYXQvbG9uZworCSAqICAgICAgICAgICAgZGF0YSBwcm92aWRlciBmb3IKKwkgKiBAcmV0dXJuIGEgTGF0TG9uZ0RhdGFQcm92aWRlciB0aGF0IGNhbiBpbnRlcnByZXQgdGhlIFVSSSBhbmQgZXh0cmFjdAorCSAqICAgICAgICAgbGF0L2xvbmcgZGF0YSwgb3IgbnVsbAorCSAqLworCXByb3RlY3RlZCBMYXRMb25nRGF0YVByb3ZpZGVyIGdldExhdExvbmdEYXRhUHJvdmlkZXIoZmluYWwgU3RyaW5nIHNjaGVtZSkgeworCQlyZXR1cm4gZ2V0TGF0TG9uZ0RhdGFQcm92aWRlcnMoKS5nZXQoc2NoZW1lKTsKKwl9IC8vIGdldExhdExvbmdEYXRhUHJvdmlkZXIKKworfSAvLyBMYXRMb25nUHJvdmlkZXJBZGFwdGVyCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvYWRhcHRlcnMvc3BhdGlhbC9nZW8vTGF0TG9uZ1Byb3ZpZGVyQWRhcHRlckZhY3RvcnkuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy9hZGFwdGVycy9zcGF0aWFsL2dlby9MYXRMb25nUHJvdmlkZXJBZGFwdGVyRmFjdG9yeS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBhOGEwZjQKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvYWRhcHRlcnMvc3BhdGlhbC9nZW8vTGF0TG9uZ1Byb3ZpZGVyQWRhcHRlckZhY3RvcnkuamF2YQpAQCAtMCwwICsxLDYxIEBACisvLyBMYXRMb25nUHJvdmlkZXJBZGFwdGVyRmFjdG9yeS5qYXZhCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuYWRhcHRlcnMuc3BhdGlhbC5nZW87CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuQWRhcHRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmllcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmFkYXB0ZXJzLnNwYXRpYWwuU3BhdGlhbFByb3ZpZGVyQWRhcHRlckZhY3Rvcnk7CisKKy8qKgorICogVGhpcyBjbGFzcyBjcmVhdGVzIGFkYXB0ZXJzIHRoYXQgdGhhdCBhZGFwdCA8Y29kZT5JZGVudGlmaWFibGU8L2NvZGU+J3MgdG8KKyAqIDxjb2RlPkxhdExvbmdQcm92aWRlcjwvY29kZT4ncy4gVGhlIHR5cGljYWwgPGNvZGU+TGF0TG9uZ1Byb3ZpZGVyPC9jb2RlPgorICogdGhhdCBpcyByZXR1cm5lZCBleHRyYWN0cyB0aGUgbGF0L2xvbmcgZGF0YSBmcm9tIHRoZSA8ZW0+c3BhdGlhbDwvZW0+CisgKiBhdHRyaWJ1dGUgb2YgYW4gPGNvZGU+SWRlbnRpZmlhYmxlPC9jb2RlPidzIGR1YmxpbiBjb3JlIGluc3RhbmNlLgorICogCisgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uSWRlbnRpZmlhYmxlCisgKi8KK3B1YmxpYyBjbGFzcyBMYXRMb25nUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSBleHRlbmRzCisJCVNwYXRpYWxQcm92aWRlckFkYXB0ZXJGYWN0b3J5IHsKKworCS8qKgorCSAqIFRoaXMgaXMgdGhlIHNpbmdsZXRvbiBpbnN0YW5jZSBvZiB0aGUgYWRhcHRlci4KKwkgKi8KKwlwcml2YXRlIHN0YXRpYyBMYXRMb25nUHJvdmlkZXJBZGFwdGVyIGFkYXB0ZXIgPSBudWxsOworCisJLyoqCisJICogVGhpcyBpcyBhIHN0YXRpYyByZWZlcmVuY2UgdG8gdGhlIGFkYXB0ZXIgZmFjdG9yeSB0byB1c2UuCisJICovCisJcHVibGljIGZpbmFsIHN0YXRpYyBMYXRMb25nUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSBJTlNUQU5DRSA9IG5ldyBMYXRMb25nUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSgpOworCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmFkYXB0ZXJzLnNwYXRpYWwuU3BhdGlhbFByb3ZpZGVyQWRhcHRlckZhY3RvcnkjaXNGYWN0b3J5Rm9yVHlwZShqYXZhLmxhbmcuT2JqZWN0KQorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBib29sZWFuIGlzRmFjdG9yeUZvclR5cGUoZmluYWwgT2JqZWN0IHR5cGUpIHsKKwkJcmV0dXJuIHR5cGUgPT0gTGF0TG9uZ1Byb3ZpZGVyLmNsYXNzOworCX0gLy8gaXNGYWN0b3J5Rm9yVHlwZQorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmFkYXB0ZXJzLnNwYXRpYWwuTGF0TG9uZ1Byb3ZpZGVyQWRhcHRlckZhY3RvcnkjY3JlYXRlQWRhcHRlcihvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmllcikKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgQWRhcHRlciBjcmVhdGVBZGFwdGVyKGZpbmFsIE5vdGlmaWVyIHRhcmdldCkgeworCQkvLyBIYXZlIHdlIGFscmVhZHkgY3JlYXRlZCBhbiBhZGFwdGVyPworCQlpZiAoYWRhcHRlciA9PSBudWxsKSB7CisJCQkvLyBObworCQkJYWRhcHRlciA9IG5ldyBMYXRMb25nUHJvdmlkZXJBZGFwdGVyKCk7CisJCX0KKwkJcmV0dXJuIGFkYXB0ZXI7CisJfSAvLyBjcmVhdGVBZGFwdGVyCisKK30gLy8gTGF0TG9uZ1Byb3ZpZGVyQWRhcHRlckZhY3RvcnkKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy9hZGFwdGVycy9zcGF0aWFsL2dlby9QbGF0Zm9ybUxhdExvbmdEYXRhUHJvdmlkZXIuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy9hZGFwdGVycy9zcGF0aWFsL2dlby9QbGF0Zm9ybUxhdExvbmdEYXRhUHJvdmlkZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYmM4OTA2Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL2FkYXB0ZXJzL3NwYXRpYWwvZ2VvL1BsYXRmb3JtTGF0TG9uZ0RhdGFQcm92aWRlci5qYXZhCkBAIC0wLDAgKzEsNzczIEBACisvLyBQbGF0Zm9ybUxhdExvbmdEYXRhUHJvdmlkZXIuamF2YQorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmFkYXB0ZXJzLnNwYXRpYWwuZ2VvOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGphdmEuaW8uQnVmZmVyZWRSZWFkZXI7CitpbXBvcnQgamF2YS5pby5GaWxlTm90Rm91bmRFeGNlcHRpb247CitpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtOworaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW1SZWFkZXI7CitpbXBvcnQgamF2YS51dGlsLk1hcDsKK2ltcG9ydCBqYXZhLnV0aWwuU2V0OworaW1wb3J0IGphdmEudXRpbC5TdHJpbmdUb2tlbml6ZXI7CitpbXBvcnQgamF2YS51dGlsLmNvbmN1cnJlbnQuQ29uY3VycmVudEhhc2hNYXA7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVByb2dyZXNzTW9uaXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUHJlZmVyZW5jZXM7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlByZWZlcmVuY2VzLklQcm9wZXJ0eUNoYW5nZUxpc3RlbmVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QcmVmZXJlbmNlcy5Qcm9wZXJ0eUNoYW5nZUV2ZW50OworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TdGF0dXM7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLmpvYnMuSm9iOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5VUkk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnJlc291cmNlLlVSSUNvbnZlcnRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUucmVzb3VyY2UuaW1wbC5VUklDb252ZXJ0ZXJJbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuQWN0aXZhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuYWRhcHRlcnMuc3BhdGlhbC5nZW8uTGF0TG9uZy5TZWdtZW50QnVpbGRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmFkYXB0ZXJzLnNwYXRpYWwuZ2VvLnByZWZlcmVuY2VzLlByZWZlcmVuY2VDb25zdGFudHM7CitpbXBvcnQgb3JnLnhtbC5zYXguQXR0cmlidXRlczsKK2ltcG9ydCBvcmcueG1sLnNheC5JbnB1dFNvdXJjZTsKK2ltcG9ydCBvcmcueG1sLnNheC5Mb2NhdG9yOworaW1wb3J0IG9yZy54bWwuc2F4LlNBWEV4Y2VwdGlvbjsKK2ltcG9ydCBvcmcueG1sLnNheC5TQVhQYXJzZUV4Y2VwdGlvbjsKK2ltcG9ydCBvcmcueG1sLnNheC5YTUxSZWFkZXI7CitpbXBvcnQgb3JnLnhtbC5zYXguaGVscGVycy5EZWZhdWx0SGFuZGxlcjsKK2ltcG9ydCBvcmcueG1sLnNheC5oZWxwZXJzLlhNTFJlYWRlckZhY3Rvcnk7CisKKy8qKgorICogVGhpcyBjbGFzcyBpbnRlcnByZXRzIGEgVVJJIHRoYXQgc3BlY2lmaWVzIGEgZmlsZSBvZiAoaS5lLiwgInBsYXRmb3JtIikKKyAqIGxhdC9sb25nIGRhdGEgaW4gc29tZSBmb3JtYXQgKGN1cnJlbnRseSA8YQorICogaHJlZj0iaHR0cDovL3d3dy5vcGVuZ2lzLm5ldC9nbWwvIj5HTUw8L2E+KS4KKyAqIAorICogQHNlZSBJbmxpbmVMYXRMb25nRGF0YVByb3ZpZGVyCisgKiBAc2VlIExhdExvbmdQcm92aWRlckFkYXB0ZXIKKyAqLworQFN1cHByZXNzV2FybmluZ3MoImRlcHJlY2F0aW9uIikKK3B1YmxpYyBjbGFzcyBQbGF0Zm9ybUxhdExvbmdEYXRhUHJvdmlkZXIgaW1wbGVtZW50cyBMYXRMb25nRGF0YVByb3ZpZGVyIHsKKwkvKioKKwkgKiBUaGUgY2xhc3MgbmFtZSBvZiB0aGUgZmlyc3QgU0FYIFhNTCBwYXJzZXIgdG8gYXR0ZW1wdCB0byBjcmVhdGUgaWYgdGhlCisJICogZGVmYXVsdCBjYW5ub3QgYmUgZm91bmQuIFZhbHVlOgorCSAqIDxjb2RlPm9yZy5hcGFjaGUueGVyY2VzLnBhcnNlcnMuU0FYUGFyc2VyPC9jb2RlPgorCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFNBWF9QQVJTRVIxID0gIm9yZy5hcGFjaGUueGVyY2VzLnBhcnNlcnMuU0FYUGFyc2VyIjsKKworCS8qKgorCSAqIFRoZSBjbGFzcyBuYW1lIG9mIHRoZSBzZWNvbmQgU0FYIFhNTCBwYXJzZXIgdG8gYXR0ZW1wdCB0byBjcmVhdGUgaWYgdGhlCisJICogZGVmYXVsdCBjYW5ub3QgYmUgZm91bmQuIFZhbHVlOgorCSAqIDxjb2RlPm9yZy5hcGFjaGUuY3JpbXNvbi5wYXJzZXIuWE1MUmVhZGVySW1wbDwvY29kZT4KKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBTQVhfUEFSU0VSMiA9ICJvcmcuYXBhY2hlLmNyaW1zb24ucGFyc2VyLlhNTFJlYWRlckltcGwiOworCisJLyoqCisJICogVGhpcyBzZXQgb2YgbmVzdGVkIE1hcHMgaW1wbGVtZW50cyBhIGNhY2hlIGZvciBsYXRpdHVkZS9sb25naXR1ZGUgZGF0YQorCSAqIHJlYWQgaW4uIFRoZSBrZXkgb2YgdGhlIGZpcnN0IG1hcCBpcyB0aGUgVVJJIG9mIHRoZSBmaWxlIGNvbnRhaW5pbmcgdGhlCisJICogZGF0YS4gVGhlIGtleSBvZiB0aGUgc2Vjb25kIG1hcCBpcyB0aGUgaWRlbnRpZmllciB0aGF0IGlzIHRoZSBmcmFnbWVudCBvZgorCSAqIHRoZSBvcmlnaW5hbCBxdWVyeSBVUkkuIElmIHRoZSBmaXJzdCBtYXAgZG9lcyBub3QgY29udGFpbiBhbiBlbnRyeSBmb3IgYQorCSAqIHNwZWNpZmllZCBmaWxlLCB0aGVuIG9uZSBpcyBjcmVhdGVkIGFuZCBwb3B1bGF0ZWQgd2l0aCB0aGUgY29udGVudHMgb2YKKwkgKiB0aGUgZmlsZS4KKwkgKi8KKwlzdGF0aWMgTWFwPFVSSSwgTWFwPFN0cmluZywgTGF0TG9uZz4+IGNhY2hlID0gbmV3IENvbmN1cnJlbnRIYXNoTWFwPFVSSSwgTWFwPFN0cmluZywgTGF0TG9uZz4+KCk7CisKKwkvKioKKwkgKiBUaGlzIGlzIHRoZSBzY2hlbWUgZm9yIGEgInBsYXRmb3JtIiBkYXRhIFVSSSB0aGF0IHNwZWNpZmllcyBhIGZpbGUgdGhhdAorCSAqIGNvbnRhaW5zIGxhdC9sb25nIGRhdGEuCisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUExBVEZPUk1fU0NIRU1FID0gInBsYXRmb3JtIjsKKworCS8qKgorCSAqIFRoaXMgaXMgdGhlIG5hbWUgb2YgdGhlIGZvbGRlciB0aGF0IGNvbnRhaW5zIHRoZSBub3JtYWwgcmVzb2x1dGlvbiBHTUwKKwkgKiBmaWxlcy4KKwkgKi8KKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBDaGFyU2VxdWVuY2UgTk9STUFMX1JFU19GT0xERVIgPSAiY291bnRyeSI7CisKKwkvKioKKwkgKiBUaGlzIGlzIHRoZSBuYW1lIG9mIHRoZSBmb2xkZXIgdGhhdCBjb250YWlucyB0aGUgbG93ZXIgcmVzb2x1dGlvbiBHTUwKKwkgKiBmaWxlcworCSAqLworCXByaXZhdGUgc3RhdGljIGZpbmFsIENoYXJTZXF1ZW5jZSBMT1dfUkVTX0ZPTERFUiA9ICJjb3VudHJ5X3JlZHVjZWQiOworCisJLyoqCisJICogSWYgPGNvZGU+dHJ1ZTwvY29kZT4gdGhlbiB0aGUgbGF0aXR1ZGUvbG9uZ2l0dWRlIHBvaW50cyB3aWxsIGJlIHNhbXBsZWQKKwkgKiBhbmQgc29tZSB3aWxsIGJlIGRpc2NhcmRlZCB0byByZWR1Y2UgdGhlaXIgbnVtYmVyLgorCSAqLworCXB1YmxpYyBib29sZWFuIGlzU2FtcGxpbmcgPSBmYWxzZTsKKworCS8qKgorCSAqIFRoaXMgaXMgdGhlIGZyZXF1ZW5jeSBhdCB3aGljaCB0aGUgbGF0aXR1ZGUvbG9uZ2l0dWRlIGRhdGEgcG9pbnRzIHdpbGwgYmUKKwkgKiBzYW1wbGVkLiBBIHZhbHVlIG9mICIxIiBtZWFucyBldmVyeSBwb2ludCB3aWxsIGJlIGluY2x1ZGVkLCBhIHZhbHVlIG9mCisJICogIjIiIG1lYW5zIHRoYXQgZXZlcnkgMm5kIHBvaW50IHdpbGwgYmUgaW5jbHVkZWQuIFRoZSBmaXJzdCBhbmQgbGFzdCBkYXRhCisJICogcG9pbnRzIGFyZSBhbHdheXMgaW5jbHVkZWQuCisJICovCisJcHVibGljIGludCBzYW1wbGVGcmVxdWVuY3kgPSAxOworCisJLyoqCisJICogSWYgPGNvZGU+dHJ1ZTwvY29kZT4gdGhlbiBJL08gRXhjZXB0aW9ucyBhcmUgbG9nZ2VkLCBvdGhlcndpc2UgdGhleSBhcmUKKwkgKiBpZ25vcmVkLgorCSAqLworCXB1YmxpYyBib29sZWFuIHJlcG9ydElPRXhjZXB0aW9ucyA9IHRydWU7CisKKwkvKioKKwkgKiBJZiA8Y29kZT50cnVlPC9jb2RlPiB0aGVuIHRoZSBwYXRoIHRvIHRoZSBHTUwgZmlsZSB3aWxsIGJlIG1vZGlmaWVkIHRvCisJICogcG9pbnQgdG8gYSBzbWFsbGVyIEdNTCBmaWxlIHRoYXQgaGFzIGEgbG93ZXIgcmVzb2x1dGlvbi4KKwkgKi8KKwlwdWJsaWMgYm9vbGVhbiB1c2VMb3dlclJlc29sdXRpb25MYXRMb25nRGF0YSA9IGZhbHNlOworCisJLyoqCisJICogQ29uc3RydWN0b3IKKwkgKi8KKwlwdWJsaWMgUGxhdGZvcm1MYXRMb25nRGF0YVByb3ZpZGVyKCkgeworCQlzdXBlcigpOworCQlzZXRQcmVmZXJlbmNlcygpOworCisJCUFjdGl2YXRvci5nZXREZWZhdWx0KCkuZ2V0UGx1Z2luUHJlZmVyZW5jZXMoKQorCQkJCS5hZGRQcm9wZXJ0eUNoYW5nZUxpc3RlbmVyKG5ldyBJUHJvcGVydHlDaGFuZ2VMaXN0ZW5lcigpIHsKKwkJCQkJcHVibGljIHZvaWQgcHJvcGVydHlDaGFuZ2UoZmluYWwgUHJvcGVydHlDaGFuZ2VFdmVudCBldmVudCkgeworCQkJCQkJc2V0UHJlZmVyZW5jZXMoKTsKKwkJCQkJCS8vIEZsdXNoIGV2ZXJ5dGhpbmcgaW4gdGhlIGNhY2hlIHRvIGZvcmNlIGl0IHRvIGJlIHJlYWQKKwkJCQkJCS8vIGFnYWluIGZyb20gdGhlIGdtbCBmaWxlIGFuZCByZS1zYW1wbGVkCisJCQkJCQljYWNoZSA9IG5ldyBDb25jdXJyZW50SGFzaE1hcDxVUkksIE1hcDxTdHJpbmcsIExhdExvbmc+PigpOworCQkJCQl9IC8vIHByb3BlcnR5Q2hhbmdlCisJCQkJfSAvLyBJUHJvcGVydHlDaGFuZ2VMaXN0ZW5lcgorCQkJCSk7CisKKwl9IC8vIFBsYXRmb3JtTGF0TG9uZ0RhdGFQcm92aWRlcgorCisJCisJcHVibGljIHZvaWQgZmx1c2goKQorCXsKKwkJY2FjaGUgPSBuZXcgQ29uY3VycmVudEhhc2hNYXA8VVJJLCBNYXA8U3RyaW5nLCBMYXRMb25nPj4oKTsKKwl9CisKKwkKKwkKKwkvKioKKwkgKiBAcGFyYW0gbGF0bG9uZ0ZpbGVVUkkKKwkgKiBAcmV0dXJuIHRoZSBsYXQvbG9uZyB2YWx1ZXMKKwkgKi8KKwlwdWJsaWMgTGF0TG9uZyBnZXRMYXRMb25nKGZpbmFsIFVSSSBsYXRsb25nRmlsZVVSSSkgeworCQlMYXRMb25nIHJldFZhbHVlID0gbnVsbDsKKworCQkvLyBUaGUgVVJJIHNob3VsZCBoYXZlIGFuIElEIGFzIHRoZSBmcmFnbWVudCB0aGF0IHNwZWNpZmllcyB0aGUKKwkJLy8gbGF0aXR1ZGUvbG9uZ2l0dWRlIGRhdGEgaW4gdGhlIEdNTCBmaWxlLgorCisJCS8vIElzIHRoZXJlIGFuIGVudHJ5IGZvciBvdXIga2V5PworCQlyZXRWYWx1ZSA9IGdldExhdExvbmdNYXAobGF0bG9uZ0ZpbGVVUkkudHJpbUZyYWdtZW50KCkpLmdldCgKKwkJCQlsYXRsb25nRmlsZVVSSS5mcmFnbWVudCgpKTsKKworCQlyZXRWYWx1ZSA9IHJldFZhbHVlICE9IG51bGwgPyByZXRWYWx1ZSA6IG5ldyBMYXRMb25nKCk7CisJCXJldHVybiByZXRWYWx1ZTsKKwl9IC8vIGdldExhdExvbmcKKworCS8qKgorCSAqIFRoaXMgbWV0aG9kIGlzIGp1c3QgbGlrZSB7QGxpbmsgI2dldExhdExvbmcoVVJJKX0gZXhjZXB0IHRoYXQgaXQgd2lsbAorCSAqIGltbWVkaWF0ZWx5IHJldHVybiBhbiAiZW1wdHkiIExhdExvbmcgaW5zdGFuY2UgaWYgdGhlIGRhdGEgZm9yIHRoZSBVUkkKKwkgKiBoYXMgbm90IGJlZW4gcmV0cmlldmVkLiBJdCB3aWxsIGFsc28gc3RhcnQgYSBzZXBhcmF0ZSBqb2IgdG8gcmV0cmlldmUKKwkgKiB0aGF0IGRhdGEgYW5kIHdpbGwgcmV0dXJuIGl0IHdoZW4gdGhhdCBqb2IgY29tcGxldGVzIHN1Y2Nlc3NmdWxseS4KKwkgKiAKKwkgKiBAcGFyYW0gbGF0bG9uZ0ZpbGVVUkkKKwkgKiBAcmV0dXJuIHRoZSBsYXQvbG9uZyB2YWx1ZXMKKwkgKi8KKwlwdWJsaWMgTGF0TG9uZyBnZXRMYXRMb25nTm9XYWl0KGZpbmFsIFVSSSBsYXRsb25nRmlsZVVSSSkgeworCQlMYXRMb25nIHJldFZhbHVlID0gbnVsbDsKKworCQkvLyBUaGUgVVJJIHNob3VsZCBoYXZlIGFuIElEIGFzIHRoZSBmcmFnbWVudCB0aGF0IHNwZWNpZmllcyB0aGUKKwkJLy8gbGF0aXR1ZGUvbG9uZ2l0dWRlIGRhdGEgaW4gdGhlIEdNTCBmaWxlLgorCisJCS8vIElzIHRoZXJlIGFuIGVudHJ5IGZvciBvdXIga2V5PworCQlyZXRWYWx1ZSA9IGdldExhdExvbmdNYXBOb1dhaXQobGF0bG9uZ0ZpbGVVUkkudHJpbUZyYWdtZW50KCkpLmdldCgKKwkJCQlsYXRsb25nRmlsZVVSSS5mcmFnbWVudCgpKTsKKworCQlyZXRWYWx1ZSA9IHJldFZhbHVlICE9IG51bGwgPyByZXRWYWx1ZSA6IG5ldyBMYXRMb25nKCk7CisJCXJldHVybiByZXRWYWx1ZTsKKwl9IC8vIGdldExhdExvbmcKKworCS8qKgorCSAqIEBwYXJhbSBmaWxlVVJJCisJICogICAgICAgICAgICB0aGUgdXJpIG9mIGEgZmlsZSBvZiBsYXRpdHVkZS9sb25naXR1ZGUgZGF0YQorCSAqIEByZXR1cm4gdGhlIGlkZW50aWZpZXJzIG9mIHRoZSBsYXRpdHVkZS9sb25naXR1ZGUgZGF0YSBpbiB0aGUgZmlsZQorCSAqLworCXB1YmxpYyBTZXQ8U3RyaW5nPiBnZXRJZHMoZmluYWwgVVJJIGZpbGVVUkkpIHsKKwkJcmV0dXJuIGdldExhdExvbmdNYXAoZmlsZVVSSSkua2V5U2V0KCk7CisJfSAvLyBnZXRJZHMKKworCS8qKgorCSAqIFRoaXMgbWV0aG9kIGlzIGp1c3QgbGlrZSB7QGxpbmsgI2dldElkcyhVUkkpfSBleGNlcHQgdGhhdCBpdCB3aWxsIHJldHVybgorCSAqIGFuIGVtcHR5IHNldCBpZiB0aGUgZGF0YSByZWZlcmVuY2VkIGJ5IHRoZSBVUkkgaGFzIG5vdCBiZWVuIHJlYWQgeWV0LiBJdAorCSAqIHdpbGwgdGhlbiBjYXVzZSBhIHNlcGFyYXRlIGpvYiB0byBzdGFydCB0aGF0IHdpbGwgcmVhZCB0aGF0IGRhdGEuIEEKKwkgKiBzdWJzZXF1ZW50IGNhbGwsIGFmdGVyIHRoYXQgam9iIGNvbXBsZXRlcyBzdWNjZXNzZnVsbHksIHdvdWxkIHJldHVybiBhCisJICogc2V0IG9mIGlkcy4KKwkgKiAKKwkgKiBAcGFyYW0gZmlsZVVSSQorCSAqICAgICAgICAgICAgdGhlIHVyaSBvZiBhIGZpbGUgb2YgbGF0aXR1ZGUvbG9uZ2l0dWRlIGRhdGEKKwkgKiBAcmV0dXJuIHRoZSBpZGVudGlmaWVycyBvZiB0aGUgbGF0aXR1ZGUvbG9uZ2l0dWRlIGRhdGEgaW4gdGhlIGZpbGUKKwkgKi8KKwlwdWJsaWMgU2V0PFN0cmluZz4gZ2V0SWRzTm9XYWl0KGZpbmFsIFVSSSBmaWxlVVJJKSB7CisJCXJldHVybiBnZXRMYXRMb25nTWFwTm9XYWl0KGZpbGVVUkkpLmtleVNldCgpOworCX0gLy8gZ2V0SWRzCisKKwkvKioKKwkgKiBAcGFyYW0gZmlsZVVSSQorCSAqICAgICAgICAgICAgdGhlIHVyaSBvZiBhIGZpbGUgb2YgbGF0aXR1ZGUvbG9uZ2l0dWRlIGRhdGEKKwkgKiBAcmV0dXJuIHRoZSBtYXAgYmV0d2VlbiBpZCdzIGFuZCBkYXRhIHZhbHVlcyBmb3IgdGhhdCBmaWxlLgorCSAqLworCXByaXZhdGUgTWFwPFN0cmluZywgTGF0TG9uZz4gZ2V0TGF0TG9uZ01hcChmaW5hbCBVUkkgZmlsZVVSSSkgeworCQkvLyBIYXZlIHdlIHByb2Nlc3NlZCB0aGlzIGZpbGUgYmVmb3JlPworCQlNYXA8U3RyaW5nLCBMYXRMb25nPiBsYXRMb25nTWFwID0gY2FjaGUuZ2V0KGZpbGVVUkkpOworCQlpZiAobGF0TG9uZ01hcCA9PSBudWxsKSB7CisJCQkvLyBObworCQkJLy8gV2UgbmVlZCB0byByZWFkIHRoZSBjb250ZW50cyBvZiB0aGUgZmlsZSBhbmQgcG9wdWxhdGUgdGhlIGVudHJ5CisJCQlsYXRMb25nTWFwID0gY3JlYXRlTGF0TG9uZ01hcChmaWxlVVJJKTsKKwkJCWNhY2hlLnB1dChmaWxlVVJJLCBsYXRMb25nTWFwKTsKKwkJfQorCQlyZXR1cm4gbGF0TG9uZ01hcDsKKwl9IC8vIGdldExhdExvbmdNYXAKKworCS8qKgorCSAqIFRoaXMgbWV0aG9kIGlzIHRoZSBzYW1lIGFzIHtAbGluayAjZ2V0TGF0TG9uZ01hcChVUkkpfSwgZXhjZXB0IHRoYXQgaXQKKwkgKiBpbW1lZGlhdGVseSByZXR1cm5zIGFuIGluc3RhbmNlIG9mIHRoZSBsYXQvbG9uZyBtYXAuIFRoaXMgbWFwIHdpbGwgYmUKKwkgKiBlbXB0eSBpZiB0aGlzIGlzIHRoZSBmaXJzdCB0aW1lIGEgcmVxdWVzdCBoYXMgYmVlbiBtYWRlIGZvciBpdC4gSW4gdGhhdAorCSAqIGNhc2UgYSBzZXBhcmF0ZSBKb2IgKGkuZS4sIHRocmVhZCkgaXMgc2NoZWR1bGVkIHRvIHJlYWQgYW5kIHBvcHVsYXRlIHRoZQorCSAqIG1hcCBmcm9tIGEgR01MIGZpbGUuIFdoZW4gdGhhdCBpcyBmaW5pc2hlZCwgdGhlIGVtcHR5IG1hcCBpcyByZXBsYWNlZCBieQorCSAqIHRoZSBwb3B1bGF0ZWQgb25lIHNvIHRoYXQgdGhlIG5leHQgY2FsbCB3aWxsIHJldHVybiB0aGUgcG9wdWxhdGVkIG1hcC4KKwkgKiAKKwkgKiBAcGFyYW0gZmlsZVVSSQorCSAqICAgICAgICAgICAgdGhlIHVyaSBvZiBhIGZpbGUgb2YgbGF0aXR1ZGUvbG9uZ2l0dWRlIGRhdGEKKwkgKiBAcmV0dXJuIHRoZSBtYXAgYmV0d2VlbiBpZCdzIGFuZCBkYXRhIHZhbHVlcyBmb3IgdGhhdCBmaWxlLgorCSAqLworCXN5bmNocm9uaXplZCBwcml2YXRlIE1hcDxTdHJpbmcsIExhdExvbmc+IGdldExhdExvbmdNYXBOb1dhaXQoCisJCQlmaW5hbCBVUkkgZmlsZVVSSSkgeworCQkvLyBIYXZlIHdlIHByb2Nlc3NlZCB0aGlzIGZpbGUgYmVmb3JlPworCQlNYXA8U3RyaW5nLCBMYXRMb25nPiBsYXRMb25nTWFwID0gY2FjaGUuZ2V0KGZpbGVVUkkpOworCQlpZiAobGF0TG9uZ01hcCA9PSBudWxsKSB7CisJCQkvLyBObworCQkJLy8gV2UgbmVlZCB0byBwdXQgYW4gZW1wdHkgbWFwIGludG8gdGhlIGNhY2hlIHNvIHRoYXQgdGhlIG5leHQgY2FsbAorCQkJLy8gZG9lc24ndCB0cnkgdG8gc3RhcnQgdXAgYW5vdGhlciBqb2IgdG8gcmVhZCBpbiB0aGUgZmlsZS4KKwkJCWxhdExvbmdNYXAgPSBuZXcgQ29uY3VycmVudEhhc2hNYXA8U3RyaW5nLCBMYXRMb25nPigpOworCQkJY2FjaGUucHV0KGZpbGVVUkksIGxhdExvbmdNYXApOworCisJCQkvLyBOb3cgZG93biB0byBidXNpbmVzcywgd2UgY3JlYXRlIGEgc2VwYXJhdGUgam9iIHRvIHJlYWQgaW4gdGhlCisJCQkvLyBsYXQvbG9uZyBkYXRhIGZyb20gdGhlIEdNTCBmaWxlIGFuZCBwb3B1bGF0ZSB0aGUgbWFwLgorCQkJZmluYWwgSm9iIHJlYWRHTUxKb2IgPSBuZXcgSm9iKGZpbGVVUkkudG9TdHJpbmcoKSkgeworCQkJCS8qKgorCQkJCSAqIEBzZWUgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLmpvYnMuSm9iI3J1bihvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVByb2dyZXNzTW9uaXRvcikKKwkJCQkgKi8KKwkJCQlAT3ZlcnJpZGUKKwkJCQlwcm90ZWN0ZWQgSVN0YXR1cyBydW4oSVByb2dyZXNzTW9uaXRvciBtb25pdG9yKSB7CisJCQkJCW1vbml0b3IuYmVnaW5UYXNrKGZpbGVVUkkudG9TdHJpbmcoKSwgMTAwKTsKKwkJCQkJLy8gV2UgbmVlZCB0byByZWFkIHRoZSBjb250ZW50cyBvZiB0aGUgZmlsZSBhbmQgcG9wdWxhdGUgdGhlCisJCQkJCS8vIGVudHJ5CisJCQkJCWZpbmFsIE1hcDxTdHJpbmcsIExhdExvbmc+IGxhdExvbmdNYXAgPSBjcmVhdGVMYXRMb25nTWFwKGZpbGVVUkkpOworCQkJCQkvLyBSZXBsYWNlIHRoZSBlbXB0eSBtYXAgd2l0aCB0aGlzIG9uZS4KKwkJCQkJY2FjaGUucHV0KGZpbGVVUkksIGxhdExvbmdNYXApOworCQkJCQltb25pdG9yLmRvbmUoKTsKKwkJCQkJcmV0dXJuIG5ldyBTdGF0dXMoSVN0YXR1cy5PSywgQWN0aXZhdG9yLlBMVUdJTl9JRCwKKwkJCQkJCQlJU3RhdHVzLk9LLCAiRG9uZSIsIG51bGwpOworCQkJCX0gLy8gcnVuCisJCQl9OyAvLyByZWFkR01MSm9iCisJCQlyZWFkR01MSm9iLnNjaGVkdWxlKCk7CisJCX0gLy8gaWYgbm8gbGF0L2xvbmcgbWFwCisKKwkJcmV0dXJuIGxhdExvbmdNYXA7CisJfSAvLyBnZXRMYXRMb25nTWFwCisKKwlNYXA8U3RyaW5nLCBMYXRMb25nPiBjcmVhdGVMYXRMb25nTWFwKGZpbmFsIFVSSSBmaWxlVVJJKSB7CisJCWZpbmFsIE1hcDxTdHJpbmcsIExhdExvbmc+IGxhdExvbmdNYXAgPSBuZXcgQ29uY3VycmVudEhhc2hNYXA8U3RyaW5nLCBMYXRMb25nPigpOworCQlmaW5hbCBVUklDb252ZXJ0ZXIgY29udmVydGVyID0gbmV3IFVSSUNvbnZlcnRlckltcGwoKTsKKwkJZmluYWwgR01MRGVjb2RlciBnTUxEZWNvZGVyID0gbmV3IEdNTERlY29kZXIobGF0TG9uZ01hcCk7CisJCXRyeSB7CisJCQlmaW5hbCBJbnB1dFN0cmVhbSBpcyA9IGNvbnZlcnRlcgorCQkJCQkuY3JlYXRlSW5wdXRTdHJlYW0oYWRqdXN0RmlsZVBhdGgoZmlsZVVSSSkpOworCQkJZmluYWwgQnVmZmVyZWRSZWFkZXIgaW4gPSBuZXcgQnVmZmVyZWRSZWFkZXIobmV3IElucHV0U3RyZWFtUmVhZGVyKAorCQkJCQlpcykpOworCQkJcGFyc2VJbnB1dFN0cmVhbShpbiwgZ01MRGVjb2Rlcik7CisJCX0gLy8gdHJ5CisJCWNhdGNoIChmaW5hbCBJT0V4Y2VwdGlvbiBlKSB7CisJCQkvLyBJdCBjb3VsZCBiZSB0aGF0IHdlIHRyaWVkIHRvIGdldCBhIGxvdyByZXNvbHV0aW9uIHZlcnNpb24gb2YgdGhlCisJCQkvLyBmaWxlIGFuZCBpdCB3YXNuJ3QgZm91bmQuIFNvIGxldCdzIHRyeSBnZXR0aW5nIHRoZSByZWd1bGFyCisJCQkvLyByZXNvbHV0aW9uCisJCQkvLyBBcmUgd2UgZ2V0dGluZyBsb3cgcmVzb2x1dGlvbiBmaWxlcz8KKwkJCWlmICh1c2VMb3dlclJlc29sdXRpb25MYXRMb25nRGF0YSkgeworCQkJCS8vIFllcworCQkJCXRyeSB7CisJCQkJCS8vIFRyeSBhZ2FpbiB3aXRob3V0IGFkanVzdGluZyB0aGUgZmlsZSBwYXRoCisJCQkJCWZpbmFsIElucHV0U3RyZWFtIGlzID0gY29udmVydGVyLmNyZWF0ZUlucHV0U3RyZWFtKGZpbGVVUkkpOworCQkJCQlmaW5hbCBCdWZmZXJlZFJlYWRlciBpbiA9IG5ldyBCdWZmZXJlZFJlYWRlcigKKwkJCQkJCQluZXcgSW5wdXRTdHJlYW1SZWFkZXIoaXMpKTsKKwkJCQkJcGFyc2VJbnB1dFN0cmVhbShpbiwgZ01MRGVjb2Rlcik7CisJCQkJfSBjYXRjaCAoZmluYWwgRmlsZU5vdEZvdW5kRXhjZXB0aW9uIGZuZmUpIHsKKwkJCQkJLy8gU2hvdWxkIHdlIHJlcG9ydCB0aGUgbWlzc2luZyBmaWxlPworCQkJCQlpZiAocmVwb3J0SU9FeGNlcHRpb25zKSB7CisJCQkJCQkvLyBZZXMKKwkJCQkJCUFjdGl2YXRvci5sb2dJbmZvcm1hdGlvbihmbmZlLmdldE1lc3NhZ2UoKSwgZm5mZSk7CisJCQkJCX0KKwkJCQl9IC8vIGNhdGNoIEZpbGVOb3RGb3VuZEV4Y2VwdGlvbgorCQkJCWNhdGNoIChmaW5hbCBJT0V4Y2VwdGlvbiBlMikgeworCQkJCQkvLyBTaG91bGQgd2UgcmVwb3J0IHRoZSBlcnJvcj8KKwkJCQkJaWYgKHJlcG9ydElPRXhjZXB0aW9ucykgeworCQkJCQkJLy8gWWVzCisJCQkJCQlBY3RpdmF0b3IubG9nRXJyb3IoZTIuZ2V0TWVzc2FnZSgpLCBlMik7CisJCQkJCX0KKwkJCQl9IC8vIGNhdGNoIElPRXhjZXB0aW9uCisJCQl9IC8vIGlmIHVzaW5nIGxvdyByZXNvbHV0aW9uCisJCQkvLyBTaG91bGQgd2UgcmVwb3J0IHRoZSBlcnJvcj8KKwkJCWVsc2UgaWYgKHJlcG9ydElPRXhjZXB0aW9ucykgeworCQkJCS8vIFllcworCQkJCUFjdGl2YXRvci5sb2dFcnJvcihlLmdldE1lc3NhZ2UoKSwgZSk7CisJCQl9CisJCX0gLy8gY2F0Y2gKKworCQlyZXR1cm4gbGF0TG9uZ01hcDsKKwl9IC8vIGNyZWF0ZUxhdExvbmdNYXAKKworCS8qKgorCSAqIFRoaXMgbWV0aG9kIGRldGVybWluZXMgaWYgaXQgc2hvdWxkIG1vZGlmeSB0aGUgcGF0aCB0byB0aGUgR01MIGZpbGUgc28KKwkgKiB0aGF0IGEgZGlmZmVyZW50IGZpbGUgaXMgc2VsZWN0ZWQuIFR5cGljYWxseSwgdGhpcyBpcyB0byBzd2l0Y2ggdG8gYQorCSAqIGxvd2VyIHJlc29sdXRpb24gR01MIGZpbGUuCisJICogCisJICogQHBhcmFtIGZpbGVVUkkKKwkgKiAgICAgICAgICAgIHRoZSBvcmlnaW5hbCBVUkkKKwkgKiBAcmV0dXJuIHRoZSBhZGp1c3RlZCBVUkkKKwkgKi8KKwlwcml2YXRlIFVSSSBhZGp1c3RGaWxlUGF0aChmaW5hbCBVUkkgZmlsZVVSSSkgeworCQlVUkkgcmV0VmFsdWUgPSBmaWxlVVJJOworCisJCS8vIFNob3VsZCB3ZSB1c2UgYSBsb3dlciByZXNvbHV0aW9uIHZlcnNpb24gb2YgdGhlIGZpbGU/CisJCWlmICh1c2VMb3dlclJlc29sdXRpb25MYXRMb25nRGF0YSkgeworCQkJLy8gWWVzCisJCQlmaW5hbCBTdHJpbmcgYWRqdXN0ZWRQYXRoID0gZmlsZVVSSS50b1N0cmluZygpLnJlcGxhY2UoCisJCQkJCU5PUk1BTF9SRVNfRk9MREVSLCBMT1dfUkVTX0ZPTERFUik7CisJCQlyZXRWYWx1ZSA9IFVSSS5jcmVhdGVVUkkoYWRqdXN0ZWRQYXRoKTsKKwkJfQorCisJCXJldHVybiByZXRWYWx1ZTsKKwl9IC8vIGFkanVzdEZpbGVQYXRoCisKKwkvKioKKwkgKiBTZXQgdGhlIHByZWZlcmVuY2VzLgorCSAqIAorCSAqIEBzZWUgI2lzU2FtcGxpbmcKKwkgKiBAc2VlICNzYW1wbGVGcmVxdWVuY3kKKwkgKi8KKwlwcml2YXRlIHZvaWQgc2V0UHJlZmVyZW5jZXMoKSB7CisJCWZpbmFsIFByZWZlcmVuY2VzIHByZWZlcmVuY2VzID0gQWN0aXZhdG9yLmdldERlZmF1bHQoKQorCQkJCS5nZXRQbHVnaW5QcmVmZXJlbmNlcygpOworCQlpZihwcmVmZXJlbmNlcyAhPW51bGwpIHsKKwkJCWlzU2FtcGxpbmcgPSBwcmVmZXJlbmNlcy5nZXRCb29sZWFuKFByZWZlcmVuY2VDb25zdGFudHMuRE9XTl9TQU1QTEVfTEFUX0xPTkdfREFUQV9CT09MRUFOX1BSRUZFUkVOQ0UpOworCQkJc2FtcGxlRnJlcXVlbmN5ID0gcHJlZmVyZW5jZXMuZ2V0SW50KFByZWZlcmVuY2VDb25zdGFudHMuTEFUX0xPTkdfU0FNUExFX0ZSRVFVRU5DWV9JTlRFR0VSX1BSRUZFUkVOQ0UpOworCQkJcmVwb3J0SU9FeGNlcHRpb25zID0gcHJlZmVyZW5jZXMuZ2V0Qm9vbGVhbihQcmVmZXJlbmNlQ29uc3RhbnRzLlJFUE9SVF9JT19FWENFUFRJT05TX0JPT0xFQU5fUFJFRkVSRU5DRSk7CisJCQl1c2VMb3dlclJlc29sdXRpb25MYXRMb25nRGF0YSA9IHByZWZlcmVuY2VzLmdldEJvb2xlYW4oUHJlZmVyZW5jZUNvbnN0YW50cy5VU0VfTE9XRVJfUkVTT0xVVElPTl9MQVRfTE9OR19EQVRBX0JPT0xFQU5fUFJFRkVSRU5DRSk7CisJCX0KKwkJCisJfSAvLyBzZXRQZXJmZXJlbmNlcworCisJLyoqCisJICogVHJ5IHRvIGNyZWF0ZSBhIFNBWCBQYXJzZXIuIFRoZSBtZXRob2QgZmlyc3QgYXR0ZW1wdHMgdG8gY3JlYXRlIHRoZQorCSAqIGRlZmF1bHQgcGFyc2VyLiBUaGUgY2xhc3MgbmFtZSBvZiB0aGlzIHBhcnNlciBpcyBhc3NpZ25lZCB0byB0aGUgcHJvcGVydHkKKwkgKiAib3JnLnhtbC5zYXguZHJpdmVyIi4gVGhpcyB2YWx1ZSBpcyBkZWZpbmVkIG9uIHRoZSBjb21tYW5kIGxpbmUgdGhhdAorCSAqIHN0YXJ0cyB0aGUgSmF2YSBpbnRlcnByZXRlcgorCSAqIDxjb2RlPmphdmEgLURvcmcueG1sLnNheC5kcml2ZXI9b3JnLmFwYWNoZS54ZXJjZXMucGFyc2Vycy5TQVhQYXJzZXI8L2NvZGU+CisJICogSWYgaXQgaXMgbm90IHN1Y2Nlc3NmdWwgaW4gZmluZGluZyB0aGlzIHBhcnNlciwgaXQgd2lsbCBhdHRlbXB0IHRvIGNyZWF0ZQorCSAqIGFuIGluc3RhbmNlIG9mIDxjb2RlPm9yZy5hcGFjaGUueGVyY2VzLnBhcnNlcnMuU0FYUGFyc2VyPC9jb2RlPiwgaWYKKwkgKiB0aGF0IGZhaWxzLCBpdCB3aWxsIHRyeSB0aGUgcGFyc2VyCisJICogPGNvZGU+Im9yZy5hcGFjaGUuY3JpbXNvbi5wYXJzZXIuWE1MUmVhZGVySW1wbDwvY29kZT4uIElmIHRoYXQgZmFpbHMsCisJICogaXQgd2lsbCB0aHJvdyBhIDxjb2RlPlNpbXVsYXRpb25FeGNlcHRpb248L2NvZGU+IHJlcG9ydGluZyB0aGUKKwkgKiBpbmFiaWxpdHkgdG8gY3JlYXRlIGEgU0FYIFhNTCBQYXJzZXIuCisJICogCisJICogQHJldHVybiBhIFNBWFBhcnNlcgorCSAqLworCXB1YmxpYyBzdGF0aWMgWE1MUmVhZGVyIGdldFNBWFBhcnNlcigpIHsKKworCQlYTUxSZWFkZXIgcmV0VmFsdWUgPSBudWxsOworCQl0cnkgeworCQkJLy8gVHJ5IHRvIG1ha2UgdGhlIGRlZmF1bHQgU0FYIFBhcnNlcgorCQkJcmV0VmFsdWUgPSBYTUxSZWFkZXJGYWN0b3J5LmNyZWF0ZVhNTFJlYWRlcigpOworCisJCX0gLy8gdHJ5CisJCWNhdGNoIChmaW5hbCBTQVhFeGNlcHRpb24gc2F4ZSkgeworCQkJLy8gVHJ5IHNwZWNpZmljIHBhcnNlcnMKKwkJCXRyeSB7IC8vIFNBWF9QQVJTRVIxCisJCQkJcmV0VmFsdWUgPSBYTUxSZWFkZXJGYWN0b3J5LmNyZWF0ZVhNTFJlYWRlcihTQVhfUEFSU0VSMSk7CisJCQl9IC8vIHRyeSBTQVhfUEFSU0VSMQorCQkJY2F0Y2ggKGZpbmFsIFNBWEV4Y2VwdGlvbiBzYXhlMSkgeworCQkJCXRyeSB7IC8vIHRyeSBTQVhfUEFSU0VSMgorCQkJCQlyZXRWYWx1ZSA9IFhNTFJlYWRlckZhY3RvcnkuY3JlYXRlWE1MUmVhZGVyKFNBWF9QQVJTRVIyKTsKKwkJCQl9IC8vIHRyeSBTQVhfUEFSU0VSMgorCQkJCWNhdGNoIChmaW5hbCBTQVhFeGNlcHRpb24gc2F4ZTIpIHsKKwkJCQkJQWN0aXZhdG9yLmxvZ0Vycm9yKHNheGUyLmdldE1lc3NhZ2UoKSwgc2F4ZTIpOworCQkJCX0gLy8gY2F0Y2ggU0FYX1BBUlNFUjIKKwkJCX0gLy8gY2F0Y2ggU0FYX1BBUlNFUjEKKwkJfSAvLyBjYXRjaCBkZWZhdWx0CisKKwkJcmV0dXJuIHJldFZhbHVlOworCX0gLy8gZ2V0U0FYUGFyc2VyKCkKKworCS8qKgorCSAqIFBhcnNlIHRoZSBzcGVjaWZpZWQgaW5wdXQgY2hhcmFjdGVyIHN0cmVhbSB1c2luZyB0aGUKKwkgKiAKKwkgKiBzcGVjaWZpZWQgSGFuZGxlci4gV2hlcmUgdGhlIG91dHB1dCBpcyBzdG9yZWQgZGVwZW5kcyBvbiB0aGUgaGFuZGxlcgorCSAqIAorCSAqIEBwYXJhbSBpbgorCSAqICAgICAgICAgICAgQnVmZmVyZWRSZWFkZXIgdG8gcmVhZCB0aGUgWE1MIGZyb20uCisJICogQHBhcmFtIGhhbmRsZXIKKwkgKiAgICAgICAgICAgIFRoZSBjbGFzcyB0aGF0IHdpbGwgaGFuZGxlIHRoZSBwYXJzaW5nCisJICovCisJcHVibGljIHN0YXRpYyB2b2lkIHBhcnNlSW5wdXRTdHJlYW0oZmluYWwgQnVmZmVyZWRSZWFkZXIgaW4sCisJCQlmaW5hbCBEZWZhdWx0SGFuZGxlciBoYW5kbGVyKSB7CisJCXRyeSB7CisJCQlmaW5hbCBYTUxSZWFkZXIgc2F4UGFyc2VyID0gZ2V0U0FYUGFyc2VyKCk7CisJCQlzYXhQYXJzZXIuc2V0Q29udGVudEhhbmRsZXIoaGFuZGxlcik7CisJCQlzYXhQYXJzZXIucGFyc2UobmV3IElucHV0U291cmNlKGluKSk7CisJCQlpbi5jbG9zZSgpOworCQl9IGNhdGNoIChmaW5hbCBJT0V4Y2VwdGlvbiBlKSB7CisJCQlBY3RpdmF0b3IubG9nRXJyb3IoZS5nZXRNZXNzYWdlKCksIGUpOworCQl9IGNhdGNoIChmaW5hbCBTQVhFeGNlcHRpb24gZSkgeworCQkJQWN0aXZhdG9yLmxvZ0Vycm9yKGUuZ2V0TWVzc2FnZSgpLCBlKTsKKwkJfQorCX0gLy8gcGFyc2VJbnB1dFN0cmVhbQorCisJLyoqCisJICogVGhpcyBjbGFzcyBpcyBhIFNBWCBIYW5kbGVyIHVzZWQgdG8gcHJvY2VzcyB0aGUgY29udGVudHMgb2YgYSBHTUwgZmlsZQorCSAqIHNwZWNpZnlpbmcgbGF0aXR1ZGUvbG9uZ2l0dWRlIGRhdGEuCisJICovCisJcHVibGljIGNsYXNzIEdNTERlY29kZXIgZXh0ZW5kcyBEZWZhdWx0SGFuZGxlciB7CisKKwkJLy8gWE1MIGVsZW1lbnQgbmFtZQorCQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgWE1MX01BUF9FTEVNRU5UX05BTUUgPSAiTWFwIjsKKworCQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgWE1MX1RJVExFX0VMRU1FTlRfTkFNRSA9ICJ0aXRsZSI7CisKKwkJcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFhNTF9TVUJUSVRMRV9FTEVNRU5UX05BTUUgPSAic3ViVGl0bGUiOworCisJCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBYTUxfVVBEQVRFRF9FTEVNRU5UX05BTUUgPSAidXBkYXRlZCI7CisKKwkJcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFhNTF9FTlRSWV9FTEVNRU5UX05BTUUgPSAiZW50cnkiOworCisJCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBYTUxfV0hFUkVfRUxFTUVOVF9OQU1FID0gIndoZXJlIjsKKworCQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgWE1MX09VVEVSX0JPVU5EQVJZX0VMRU1FTlRfTkFNRSA9ICJvdXRlckJvdW5kYXJ5SXMiOworCisJCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBYTUxfTElORUFSX1JJTkdfRUxFTUVOVF9OQU1FID0gIkxpbmVhclJpbmciOworCisJCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBYTUxfUE9MWUdPTl9FTEVNRU5UX05BTUUgPSAiUG9seWdvbiI7CisKKwkJcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFhNTF9QT1NMSVNUX0VMRU1FTlRfTkFNRSA9ICJwb3NMaXN0IjsKKworCQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgWE1MX0lEX0FUVFIgPSAiZ21sOmlkIjsKKworCQkvKioKKwkJICogVGhpcyBpcyB0aGUgdGl0bGUgcGFyc2VkIGZyb20gdGhlIGZpbGUKKwkJICovCisJCXByaXZhdGUgU3RyaW5nIHRpdGxlID0gIiI7CisKKwkJLyoqCisJCSAqIFRoaXMgaXMgdGhlIHN1Yi10aXRsZSBwYXJzZWQgZnJvbSB0aGUgZmlsZTsKKwkJICovCisJCS8vIFdlJ3JlIGlnbm9yaW5nIHN1YnRpdGxlcyByaWdodCBub3cKKwkJLy8gcHJpdmF0ZSBTdHJpbmcgc3ViVGl0bGUgPSAiIjsKKwkJLyoqCisJCSAqIFRoaXMgaXMgdGhlIGRhdGUgdGhlIGZpbGUgd2FzIHVwZGF0ZWQgYXMgcGFyc2VkIGZyb20gdGhlIGZpbGU7CisJCSAqLworCQkvLyBXZSdyZSBpZ25vcmluZyB1cGRhdGVkIHJpZ2h0IG5vdworCQkvLyBwcml2YXRlIFN0cmluZyB1cGRhdGVkID0gIiI7CisJCS8qKgorCQkgKiBUaGlzIGlzIHRoZSBpZGVudGlmaWVyIG9mIHRoZSBjdXJyZW50IHBvbHlnb24gYmVpbmcgcGFyc2VkCisJCSAqLworCQlwcml2YXRlIFN0cmluZyBjdXJyZW50UG9seWdvbklkID0gbnVsbDsKKworCQkvLyBQYXJzZSBwb3NpdGlvbiBpbiB0aGUgZG9jdW1lbnQgYmVpbmcgcGFyc2VkCisJCXByaXZhdGUgTG9jYXRvciBsb2NhdG9yID0gbnVsbDsKKworCQkvKioKKwkJICogVGhlIG1hcCB0aGF0IGlzIGNvbnN0cnVjdGVkIGR1cmluZyB0aGUgcHJvY2Vzc2luZyBvZiB0aGUgR01MIGZpbGUuCisJCSAqLworCQlNYXA8U3RyaW5nLCBMYXRMb25nPiBsYXRMb25nTWFwID0gbnVsbDsKKworCQkvKioKKwkJICogVGhpcyBpcyB0aGUgY29sbGVjdGlvbiBvZgorCQkgKiB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5hZGFwdGVycy5zcGF0aWFsLmdlby5MYXRMb25nLlNlZ21lbnR9J3MKKwkJICogY29sbGVjdGVkIGZvciBhIHBvbHlnb24uCisJCSAqLworCQlwcml2YXRlIExhdExvbmcgcG9seWdvbkxhdExvbmcgPSBudWxsOworCisJCS8qKgorCQkgKiBUaGlzIHNlZ21lbnQgYnVpbGRlciBpcyB1c2VkIHRvIGNvbGxlY3QgdG9nZXRoZXIgcmVsYXRlZAorCQkgKiBsYXRpdHVkZS9sb25naXR1ZGUgZGF0YSBwYWlycyB0byBjcmVhdGUgYQorCQkgKiB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5hZGFwdGVycy5zcGF0aWFsLmdlby5MYXRMb25nLlNlZ21lbnR9CisJCSAqLworCQlwcml2YXRlIExhdExvbmcuU2VnbWVudEJ1aWxkZXIgc2VnbWVudEJ1aWxkZXIgPSBudWxsOworCisJCS8qKgorCQkgKiBUaGVzZSBhcmUgdGhlIGNoYXJhY3RlcnMgdGhhdCBoYXZlIGJlZW4gY29sbGVjdGVkIGJ1dCBhcmUgbm90IHlldAorCQkgKiBjb21wbGV0ZS4KKwkJICovCisJCXByaXZhdGUgU3RyaW5nQnVpbGRlciBjaGFyYWN0ZXJTdHJpbmdCdWlsZGVyID0gbmV3IFN0cmluZ0J1aWxkZXIoKTsKKworCQkvKioKKwkJICogQ29uc3RydWN0b3IKKwkJICovCisJCXByb3RlY3RlZCBHTUxEZWNvZGVyKGZpbmFsIE1hcDxTdHJpbmcsIExhdExvbmc+IGxhdExvbmdNYXApIHsKKwkJCXN1cGVyKCk7CisJCQl0aGlzLmxhdExvbmdNYXAgPSBsYXRMb25nTWFwOworCQl9IC8vIEdNTERlY29kZXIKKworCQkvKioKKwkJICogQHNlZSBvcmcueG1sLnNheC5oZWxwZXJzLkRlZmF1bHRIYW5kbGVyI3N0YXJ0RWxlbWVudChqYXZhLmxhbmcuU3RyaW5nLAorCQkgKiAgICAgIGphdmEubGFuZy5TdHJpbmcsIGphdmEubGFuZy5TdHJpbmcsIG9yZy54bWwuc2F4LkF0dHJpYnV0ZXMpCisJCSAqLworCQlAT3ZlcnJpZGUKKwkJcHVibGljIHZvaWQgc3RhcnRFbGVtZW50KGZpbmFsIFN0cmluZyBuYW1lc3BhY2UsIGZpbmFsIFN0cmluZyBzTmFtZSwgZmluYWwgU3RyaW5nIHFOYW1lLAorCQkJCWZpbmFsIEF0dHJpYnV0ZXMgYXR0cmlidXRlcykgdGhyb3dzIFNBWEV4Y2VwdGlvbiB7CisJCQkvLyBUaGUgbmFtZSBvZiB0aGUgZWxlbWVudAorCQkJZmluYWwgU3RyaW5nIGVsZW1lbnROYW1lID0gc05hbWUuZXF1YWxzKCIiKSA/IHFOYW1lIDogc05hbWU7CisKKwkJCS8vIFRoZSAiTWFwIiByb290IGVsZW1lbnQ/CisJCQlpZiAoZWxlbWVudE5hbWUuZXF1YWxzSWdub3JlQ2FzZShYTUxfTUFQX0VMRU1FTlRfTkFNRSkpIHsKKwkJCQkvLyBZZXMKKwkJCQlhc3NlcnQgbGF0TG9uZ01hcCAhPSBudWxsOworCQkJfSAvLyBlbHNlIGlmIE1hcAorCisJCQkvLyBBIHRpdGxlIGVsZW1lbnQ/CisJCQllbHNlIGlmIChlbGVtZW50TmFtZS5lcXVhbHNJZ25vcmVDYXNlKFhNTF9USVRMRV9FTEVNRU5UX05BTUUpKSB7CisJCQkJLy8gWWVzCisJCQkJY2hhcmFjdGVyU3RyaW5nQnVpbGRlciA9IG5ldyBTdHJpbmdCdWlsZGVyKCk7CisJCQl9IC8vIHRpdGxlCisKKwkJCS8vIHN1YlRpdGxlIGVsZW1lbnQ/CisJCQllbHNlIGlmIChlbGVtZW50TmFtZS5lcXVhbHNJZ25vcmVDYXNlKFhNTF9TVUJUSVRMRV9FTEVNRU5UX05BTUUpKSB7CisJCQkJLy8gWWVzCisJCQkJY2hhcmFjdGVyU3RyaW5nQnVpbGRlciA9IG5ldyBTdHJpbmdCdWlsZGVyKCk7CisJCQl9IC8vIHN1YlRpdGxlCisKKwkJCS8vIHVwZGF0ZWQgZWxlbWVudD8KKwkJCWVsc2UgaWYgKGVsZW1lbnROYW1lLmVxdWFsc0lnbm9yZUNhc2UoWE1MX1VQREFURURfRUxFTUVOVF9OQU1FKSkgeworCQkJCS8vIFllcworCQkJCWNoYXJhY3RlclN0cmluZ0J1aWxkZXIgPSBuZXcgU3RyaW5nQnVpbGRlcigpOworCQkJfSAvLyB1cGRhdGVkCisKKwkJCS8vIGVudHJ5IGVsZW1lbnQ/CisJCQllbHNlIGlmIChlbGVtZW50TmFtZS5lcXVhbHNJZ25vcmVDYXNlKFhNTF9FTlRSWV9FTEVNRU5UX05BTUUpKSB7CisJCQkJLy8gWWVzCisJCQl9IC8vIHVwZGF0ZWQKKworCQkJLy8gd2hlcmUgZWxlbWVudD8KKwkJCWVsc2UgaWYgKGVsZW1lbnROYW1lLmVxdWFsc0lnbm9yZUNhc2UoWE1MX1dIRVJFX0VMRU1FTlRfTkFNRSkpIHsKKwkJCQkvLyBZZXMKKwkJCX0gLy8gd2hlcmUKKworCQkJLy8gb3V0ZXJCb3VuZGFyeUlzIGVsZW1lbnQ/CisJCQllbHNlIGlmIChlbGVtZW50TmFtZQorCQkJCQkuZXF1YWxzSWdub3JlQ2FzZShYTUxfT1VURVJfQk9VTkRBUllfRUxFTUVOVF9OQU1FKSkgeworCQkJCS8vIFllcworCQkJfSAvLyBvdXRlckJvdW5kYXJ5SXMKKworCQkJLy8gbGluZWFyUmluZyBlbGVtZW50PworCQkJZWxzZSBpZiAoZWxlbWVudE5hbWUuZXF1YWxzSWdub3JlQ2FzZShYTUxfTElORUFSX1JJTkdfRUxFTUVOVF9OQU1FKSkgeworCQkJCS8vIFllcworCQkJfSAvLyBsaW5lYXJSaW5nCisKKwkJCS8vIHBvbHlnb24gZWxlbWVudD8KKwkJCWVsc2UgaWYgKGVsZW1lbnROYW1lLmVxdWFsc0lnbm9yZUNhc2UoWE1MX1BPTFlHT05fRUxFTUVOVF9OQU1FKSkgeworCQkJCS8vIFllcworCQkJCWFzc2VydCBjdXJyZW50UG9seWdvbklkID09IG51bGw7CisJCQkJYXNzZXJ0IHBvbHlnb25MYXRMb25nID09IG51bGw7CisJCQkJY3VycmVudFBvbHlnb25JZCA9IGF0dHJpYnV0ZXMuZ2V0VmFsdWUoWE1MX0lEX0FUVFIpOworCQkJCXBvbHlnb25MYXRMb25nID0gbmV3IExhdExvbmcoKTsKKwkJCX0gLy8gcG9seWdvbgorCisJCQkvLyBwb3NMaXN0IGVsZW1lbnQ/CisJCQllbHNlIGlmIChlbGVtZW50TmFtZS5lcXVhbHNJZ25vcmVDYXNlKFhNTF9QT1NMSVNUX0VMRU1FTlRfTkFNRSkpIHsKKwkJCQkvLyBZZXMKKwkJCQlhc3NlcnQgc2VnbWVudEJ1aWxkZXIgPT0gbnVsbDsKKwkJCQlzZWdtZW50QnVpbGRlciA9IG5ldyBTZWdtZW50QnVpbGRlcigpOworCQkJCWNoYXJhY3RlclN0cmluZ0J1aWxkZXIgPSBuZXcgU3RyaW5nQnVpbGRlcigpOworCQkJfSAvLyBwb3NMaXN0CisKKwkJCWVsc2UgeworCQkJCS8vIE5vCisJCQkJLy8gV2UgaGF2ZSBubyBpZGVhIHdoYXQgdGhpcyBlbGVtZW50IGlzCisJCQkJdGhyb3cgbmV3IFNBWFBhcnNlRXhjZXB0aW9uKCJJbnZhbGlkIGVsZW1lbnQgbmFtZSBcIiIKKwkJCQkJCSsgZWxlbWVudE5hbWUgKyAiXCIiLCBsb2NhdG9yKTsKKwkJCX0gLy8gZWxzZSB1bnJlY29nbml6ZWQgZWxlbWVudCBuYW1lCisJCX0gLy8gc3RhcnRFbGVtZW50CisKKwkJLyoqCisJCSAqIEBzZWUgb3JnLnhtbC5zYXguaGVscGVycy5EZWZhdWx0SGFuZGxlciNlbmRFbGVtZW50KGphdmEubGFuZy5TdHJpbmcsCisJCSAqICAgICAgamF2YS5sYW5nLlN0cmluZywgamF2YS5sYW5nLlN0cmluZykKKwkJICovCisJCUBPdmVycmlkZQorCQlwdWJsaWMgdm9pZCBlbmRFbGVtZW50KGZpbmFsIFN0cmluZyBuYW1lc3BhY2UsIGZpbmFsIFN0cmluZyBzTmFtZSwgZmluYWwgU3RyaW5nIHFOYW1lKQorCQkJCXRocm93cyBTQVhFeGNlcHRpb24geworCQkJLy8gVGhlIG5hbWUgb2YgdGhlIGVsZW1lbnQKKwkJCWZpbmFsIFN0cmluZyBlbGVtZW50TmFtZSA9IHNOYW1lLmVxdWFscygiIikgPyBxTmFtZSA6IHNOYW1lOworCisJCQkvLyBUaGUgIk1hcCIgcm9vdCBlbGVtZW50PworCQkJaWYgKGVsZW1lbnROYW1lLmVxdWFsc0lnbm9yZUNhc2UoWE1MX01BUF9FTEVNRU5UX05BTUUpKSB7CisJCQkJLy8gWWVzCisJCQkJYXNzZXJ0IGxhdExvbmdNYXAgIT0gbnVsbDsKKwkJCX0gLy8gZWxzZSBpZiBNYXAKKworCQkJLy8gQSB0aXRsZSBlbGVtZW50PworCQkJZWxzZSBpZiAoZWxlbWVudE5hbWUuZXF1YWxzSWdub3JlQ2FzZShYTUxfVElUTEVfRUxFTUVOVF9OQU1FKSkgeworCQkJCS8vIFllcworCQkJCXRpdGxlID0gY2hhcmFjdGVyU3RyaW5nQnVpbGRlci50b1N0cmluZygpOworCQkJCWNoYXJhY3RlclN0cmluZ0J1aWxkZXIgPSBuZXcgU3RyaW5nQnVpbGRlcigpOworCQkJfSAvLyB0aXRsZQorCisJCQkvLyBzdWJUaXRsZSBlbGVtZW50PworCQkJZWxzZSBpZiAoZWxlbWVudE5hbWUuZXF1YWxzSWdub3JlQ2FzZShYTUxfU1VCVElUTEVfRUxFTUVOVF9OQU1FKSkgeworCQkJCS8vIFllcworCQkJCS8vIFdlJ3JlIGlnbm9yaW5nIHN1YnRpdGxlcyByaWdodCBub3cKKwkJCQkvLyBzdWJUaXRsZSA9IGNoYXJhY3RlclN0cmluZ0J1aWxkZXIudG9TdHJpbmcoKTsKKwkJCQljaGFyYWN0ZXJTdHJpbmdCdWlsZGVyID0gbmV3IFN0cmluZ0J1aWxkZXIoKTsKKwkJCX0gLy8gc3ViVGl0bGUKKworCQkJLy8gdXBkYXRlZCBlbGVtZW50PworCQkJZWxzZSBpZiAoZWxlbWVudE5hbWUuZXF1YWxzSWdub3JlQ2FzZShYTUxfVVBEQVRFRF9FTEVNRU5UX05BTUUpKSB7CisJCQkJLy8gWWVzCisJCQkJLy8gdXBkYXRlZCA9IGNoYXJhY3RlclN0cmluZ0J1aWxkZXIudG9TdHJpbmcoKTsKKwkJCQljaGFyYWN0ZXJTdHJpbmdCdWlsZGVyID0gbmV3IFN0cmluZ0J1aWxkZXIoKTsKKwkJCX0gLy8gdXBkYXRlZAorCisJCQkvLyBlbnRyeSBlbGVtZW50PworCQkJZWxzZSBpZiAoZWxlbWVudE5hbWUuZXF1YWxzSWdub3JlQ2FzZShYTUxfRU5UUllfRUxFTUVOVF9OQU1FKSkgeworCQkJCS8vIFllcworCQkJfSAvLyBlbnRyeQorCisJCQkvLyB3aGVyZSBlbGVtZW50PworCQkJZWxzZSBpZiAoZWxlbWVudE5hbWUuZXF1YWxzSWdub3JlQ2FzZShYTUxfV0hFUkVfRUxFTUVOVF9OQU1FKSkgeworCQkJCS8vIFllcworCQkJfSAvLyB3aGVyZQorCisJCQkvLyBvdXRlckJvdW5kYXJ5SXMgZWxlbWVudD8KKwkJCWVsc2UgaWYgKGVsZW1lbnROYW1lCisJCQkJCS5lcXVhbHNJZ25vcmVDYXNlKFhNTF9PVVRFUl9CT1VOREFSWV9FTEVNRU5UX05BTUUpKSB7CisJCQkJLy8gWWVzCisJCQl9IC8vIG91dGVyQm91bmRhcnlJcworCisJCQkvLyBsaW5lYXJSaW5nIGVsZW1lbnQ/CisJCQllbHNlIGlmIChlbGVtZW50TmFtZS5lcXVhbHNJZ25vcmVDYXNlKFhNTF9MSU5FQVJfUklOR19FTEVNRU5UX05BTUUpKSB7CisJCQkJLy8gWWVzCisJCQl9IC8vIGxpbmVhclJpbmcKKworCQkJLy8gcG9seWdvbiBlbGVtZW50PworCQkJZWxzZSBpZiAoZWxlbWVudE5hbWUuZXF1YWxzSWdub3JlQ2FzZShYTUxfUE9MWUdPTl9FTEVNRU5UX05BTUUpKSB7CisJCQkJLy8gWWVzCisJCQkJbGF0TG9uZ01hcC5wdXQoY3VycmVudFBvbHlnb25JZCwgcG9seWdvbkxhdExvbmcpOworCQkJCWN1cnJlbnRQb2x5Z29uSWQgPSBudWxsOworCQkJCXBvbHlnb25MYXRMb25nID0gbnVsbDsKKwkJCX0gLy8gcG9seWdvbgorCisJCQkvLyBwb3NMaXN0IGVsZW1lbnQ/CisJCQllbHNlIGlmIChlbGVtZW50TmFtZS5lcXVhbHNJZ25vcmVDYXNlKFhNTF9QT1NMSVNUX0VMRU1FTlRfTkFNRSkpIHsKKwkJCQkvLyBZZXMKKwkJCQkvLyBQYXJzZSB0aGUgY3VycmVudCBjaGFyYWN0ZXJzIGZvciB0aGUgbGF0aXR1ZGUvbG9uZ2l0dWRlIGRhdGEKKwkJCQkvLyBwYWlycworCisJCQkJZmluYWwgU3RyaW5nVG9rZW5pemVyIHN0ID0gbmV3IFN0cmluZ1Rva2VuaXplcigKKwkJCQkJCWNoYXJhY3RlclN0cmluZ0J1aWxkZXIudG9TdHJpbmcoKSwgIiBcbiIpOworCQkJCWNoYXJhY3RlclN0cmluZ0J1aWxkZXIgPSBuZXcgU3RyaW5nQnVpbGRlcigpOworCisJCQkJd2hpbGUgKHN0Lmhhc01vcmVUb2tlbnMoKSkgeworCQkJCQlmaW5hbCBTdHJpbmcgdmFsdWUxID0gc3QubmV4dFRva2VuKCk7CisJCQkJCS8vIElzIHRoZXJlIGEgbWF0Y2hpbmcgTG9uZ2l0dWRlPworCQkJCQlpZiAoc3QuaGFzTW9yZVRva2VucygpKSB7CisJCQkJCQkvLyBZZXMKKwkJCQkJCS8vIExhdAorCQkJCQkJZmluYWwgU3RyaW5nIHZhbHVlMiA9IHN0Lm5leHRUb2tlbigpOworCQkJCQkJc2VnbWVudEJ1aWxkZXIuYWRkKHZhbHVlMSwgdmFsdWUyKTsKKwkJCQkJfSBlbHNlIHsKKwkJCQkJCS8vIE5vCisJCQkJCQkvLyBsYXQvbG9uZyBtaXNtYXRjaAorCQkJCQkJQWN0aXZhdG9yCisJCQkJCQkJCS5sb2dFcnJvcigKKwkJCQkJCQkJCQkiTGF0aXR1ZGUvTG9uZ2l0dWRlIGRhdGEgdGl0bGVkIFwiIgorCQkJCQkJCQkJCQkJKyB0aXRsZQorCQkJCQkJCQkJCQkJKyAiXCIgaXMgbWlzc2luZyBhIGxvbmdpdHVkZSAgbWF0Y2ggZm9yIHRoZSBsYXRpdHVkZSB2YWx1ZSBcIiIKKwkJCQkJCQkJCQkJCSsgdmFsdWUxICsgIlwiIGF0IGxpbmU6ICIKKwkJCQkJCQkJCQkJCSsgbG9jYXRvci5nZXRMaW5lTnVtYmVyKCkKKwkJCQkJCQkJCQkJCSsgIiwgY29sdW1uOiAiCisJCQkJCQkJCQkJCQkrIGxvY2F0b3IuZ2V0Q29sdW1uTnVtYmVyKCksCisJCQkJCQkJCQkJbnVsbCk7CisJCQkJCQkvLyBkaXNjYXJkIHdoYXRldmVyIHdlJ3ZlIGNvbGxlY3RlZCBzbyBmYXIKKwkJCQkJCXNlZ21lbnRCdWlsZGVyLmNsZWFyKCk7CisJCQkJCQlicmVhazsKKwkJCQkJfSAvLyBlbHNlCisJCQkJfSAvLyB3aGlsZSBtb3JlIHRva2VucworCisJCQkJLy8gQW55dGhpbmcgaW4gdGhlIHNlZ21lbnQ/CisJCQkJaWYgKHNlZ21lbnRCdWlsZGVyLnNpemUoKSA+IDApIHsKKwkJCQkJLy8gWWVzCisJCQkJCXRyeSB7CisJCQkJCQlwb2x5Z29uTGF0TG9uZy5hZGQoaXNTYW1wbGluZyA/IHNlZ21lbnRCdWlsZGVyCisJCQkJCQkJCS50b1NlZ21lbnQoc2FtcGxlRnJlcXVlbmN5KSA6IHNlZ21lbnRCdWlsZGVyCisJCQkJCQkJCS50b1NlZ21lbnQoKSk7CisJCQkJCX0gY2F0Y2ggKElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiBpYWUpIHsKKwkJCQkJCUFjdGl2YXRvci5sb2dFcnJvcigKKwkJCQkJCQkJIlByb2JsZW0gcHJvY2Vzc2luZyBMYXRpdHVkZS9Mb25naXR1ZGUgZGF0YSB0aXRsZWQgXCIiCisJCQkJCQkJCQkJKyB0aXRsZSArICJcIiIsIGlhZSk7CisJCQkJCX0KKwkJCQl9IC8vIGlmCisJCQkJc2VnbWVudEJ1aWxkZXIgPSBudWxsOworCQkJfSAvLyBwb3NMaXN0CisJCQllbHNlIHsKKwkJCQkvLyBObworCQkJCS8vIFdlIGhhdmUgbm8gaWRlYSB3aGF0IHRoaXMgZWxlbWVudCBpcworCQkJCXRocm93IG5ldyBTQVhQYXJzZUV4Y2VwdGlvbigiSW52YWxpZCBlbGVtZW50IG5hbWUgXCIiCisJCQkJCQkrIGVsZW1lbnROYW1lICsgIlwiIiwgbG9jYXRvcik7CisJCQl9IC8vIGVsc2UgdW5yZWNvZ25pemVkIGVsZW1lbnQgbmFtZQorCQl9IC8vIGVuZEVsZW1lbnQKKworCQkvKioKKwkJICogQHNlZSBvcmcueG1sLnNheC5oZWxwZXJzLkRlZmF1bHRIYW5kbGVyI2NoYXJhY3RlcnMoY2hhcltdLCBpbnQsIGludCkKKwkJICovCisJCUBPdmVycmlkZQorCQlwdWJsaWMgdm9pZCBjaGFyYWN0ZXJzKGZpbmFsIGNoYXJbXSBjaCwgZmluYWwgaW50IHN0YXJ0LAorCQkJCWZpbmFsIGludCBsZW5ndGgpIHsKKwkJCWNoYXJhY3RlclN0cmluZ0J1aWxkZXIuYXBwZW5kKG5ldyBTdHJpbmcoY2gsIHN0YXJ0LCBsZW5ndGgpKTsKKwkJfSAvLyBjaGFyYWN0ZXJzCisKKwkJLyoqCisJCSAqIEBzZWUgb3JnLnhtbC5zYXguaGVscGVycy5EZWZhdWx0SGFuZGxlciN3YXJuaW5nKG9yZy54bWwuc2F4LlNBWFBhcnNlRXhjZXB0aW9uKQorCQkgKi8KKwkJQE92ZXJyaWRlCisJCXB1YmxpYyB2b2lkIHdhcm5pbmcoZmluYWwgU0FYUGFyc2VFeGNlcHRpb24gc3BlKSB7CisJCQlBY3RpdmF0b3IubG9nSW5mb3JtYXRpb24oc3BlLmdldE1lc3NhZ2UoKSwgc3BlKTsKKwkJfSAvLyB3YXJuaW5nCisKKwkJLyoqCisJCSAqIEBzZWUgb3JnLnhtbC5zYXguaGVscGVycy5EZWZhdWx0SGFuZGxlciNlcnJvcihvcmcueG1sLnNheC5TQVhQYXJzZUV4Y2VwdGlvbikKKwkJICovCisJCUBPdmVycmlkZQorCQlwdWJsaWMgdm9pZCBlcnJvcihmaW5hbCBTQVhQYXJzZUV4Y2VwdGlvbiBzcGUpIHsKKwkJCUFjdGl2YXRvci5sb2dFcnJvcihzcGUuZ2V0TWVzc2FnZSgpLCBzcGUpOworCQl9IC8vIGVycm9yCisKKwkJLyoqCisJCSAqIEBzZWUgb3JnLnhtbC5zYXguaGVscGVycy5EZWZhdWx0SGFuZGxlciNmYXRhbEVycm9yKG9yZy54bWwuc2F4LlNBWFBhcnNlRXhjZXB0aW9uKQorCQkgKi8KKwkJQE92ZXJyaWRlCisJCXB1YmxpYyB2b2lkIGZhdGFsRXJyb3IoZmluYWwgU0FYUGFyc2VFeGNlcHRpb24gc3BlKSB7CisJCQlBY3RpdmF0b3IubG9nRXJyb3Ioc3BlLmdldE1lc3NhZ2UoKSwgc3BlKTsKKwkJfSAvLyBmYXRhbEVycm9yCisKKwkJLyoqCisJCSAqIEBzZWUgb3JnLnhtbC5zYXguaGVscGVycy5EZWZhdWx0SGFuZGxlciNzZXREb2N1bWVudExvY2F0b3Iob3JnLnhtbC5zYXguTG9jYXRvcikKKwkJICovCisJCUBPdmVycmlkZQorCQlwdWJsaWMgdm9pZCBzZXREb2N1bWVudExvY2F0b3IoZmluYWwgTG9jYXRvciBsb2NhdG9yKSB7CisJCQl0aGlzLmxvY2F0b3IgPSBsb2NhdG9yOworCQl9IC8vIHNldERvY3VtZW50TG9jYXRvcgorCisJfSAvLyBHTUxEZWNvZGVyCisKK30gLy8gUGxhdGZvcm1MYXRMb25nRGF0YVByb3ZpZGVyCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvYWRhcHRlcnMvc3BhdGlhbC9nZW8vcHJlZmVyZW5jZXMvTWFwRGF0YU1hbmFnZW1lbnRQcmVmZXJlbmNlUGFnZS5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL2FkYXB0ZXJzL3NwYXRpYWwvZ2VvL3ByZWZlcmVuY2VzL01hcERhdGFNYW5hZ2VtZW50UHJlZmVyZW5jZVBhZ2UuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNzEyNzk5Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL2FkYXB0ZXJzL3NwYXRpYWwvZ2VvL3ByZWZlcmVuY2VzL01hcERhdGFNYW5hZ2VtZW50UHJlZmVyZW5jZVBhZ2UuamF2YQpAQCAtMCwwICsxLDEwOCBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmFkYXB0ZXJzLnNwYXRpYWwuZ2VvLnByZWZlcmVuY2VzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnByZWZlcmVuY2UuQm9vbGVhbkZpZWxkRWRpdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnByZWZlcmVuY2UuRmllbGRFZGl0b3JQcmVmZXJlbmNlUGFnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5wcmVmZXJlbmNlLkludGVnZXJGaWVsZEVkaXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLkFjdGl2YXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5JV29ya2JlbmNoOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2hQcmVmZXJlbmNlUGFnZTsKKworLyoqCisgKiBUaGlzIGNsYXNzIHJlcHJlc2VudHMgYSBwcmVmZXJlbmNlIHBhZ2UgdGhhdCBpcyBjb250cmlidXRlZCB0byB0aGUKKyAqIFByZWZlcmVuY2VzIGRpYWxvZy4gQnkgc3ViLWNsYXNzaW5nIDxjb2RlPkZpZWxkRWRpdG9yUHJlZmVyZW5jZVBhZ2U8L2NvZGU+LAorICogd2UgY2FuIHVzZSB0aGUgZmllbGQgc3VwcG9ydCBidWlsdCBpbnRvIEpGYWNlIHRoYXQgYWxsb3dzIHVzIHRvIGNyZWF0ZSBhIHBhZ2UKKyAqIHRoYXQgaXMgc21hbGwgYW5kIGtub3dzIGhvdyB0byBzYXZlLCByZXN0b3JlIGFuZCBhcHBseSBpdHNlbGYuCisgKiA8cD4KKyAqIFRoaXMgcGFnZSBpcyB1c2VkIHRvIG1vZGlmeSBwcmVmZXJlbmNlcyBvbmx5LiBUaGV5IGFyZSBzdG9yZWQgaW4gdGhlCisgKiBwcmVmZXJlbmNlIHN0b3JlIHRoYXQgYmVsb25ncyB0byB0aGUgbWFpbiBwbHVnLWluIGNsYXNzLiBUaGF0IHdheSwKKyAqIHByZWZlcmVuY2VzIGNhbiBiZSBhY2Nlc3NlZCBkaXJlY3RseSB2aWEgdGhlIHByZWZlcmVuY2Ugc3RvcmUuCisgKi8KKworcHVibGljIGNsYXNzIE1hcERhdGFNYW5hZ2VtZW50UHJlZmVyZW5jZVBhZ2UgZXh0ZW5kcyBGaWVsZEVkaXRvclByZWZlcmVuY2VQYWdlCisJCWltcGxlbWVudHMgSVdvcmtiZW5jaFByZWZlcmVuY2VQYWdlIHsKKworCS8qKgorCSAqIFRoaXMgaXMgdGhlIG1pbmltdW0gc2FtcGxlIGZyZXF1ZW5jeSBmb3IgbGF0L2xvbmcgcG9seWdvbiBkYXRhLiBBIHZhbHVlCisJICogb2YgMSBtZWFucyBhbGwgcG9pbnRzIGFyZSBpbmNsdWRlZCAoaS5lLiBubyBzYW1wbGluZykKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIGludCBNSU5fU0FNUExFX0ZSRVFVRU5DWSA9IDE7CisKKwkvKioKKwkgKiBUaGlzIGlzIHRoZSBtYXhpbXVtIHNhbXBsZSBmcmVxdWVuY3kgZm9yIGxhdC9sb25nIHBvbHlnb24gZGF0YS4gVGhlcmUgaXMKKwkgKiBubyBnb29kIHZhbHVlIGZvciB0aGlzLgorCSAqLworCXByaXZhdGUgc3RhdGljIGZpbmFsIGludCBNQVhfU0FNUExFX0ZSRVFVRU5DWSA9IDEwMDA7CisKKwlCb29sZWFuRmllbGRFZGl0b3IgZW5hYmxlRG93bnNhbXBsZUZpZWxkRWRpdG9yID0gbnVsbDsKKworCUludGVnZXJGaWVsZEVkaXRvciBsYXRMb25nU2FtcGxlRnJlcXVlbmN5RmllbGRFZGl0b3IgPSBudWxsOworCisJQm9vbGVhbkZpZWxkRWRpdG9yIGVuYWJsZUlPRXhjZXB0aW9uUmVwb3J0aW5nRmllbGRFZGl0b3IgPSBudWxsOworCisJQm9vbGVhbkZpZWxkRWRpdG9yIHVzZUxvd1Jlc29sdXRpb25MYXRMb25nRGF0YUZpZWxkRWRpdG9yID0gbnVsbDsKKworCS8qKgorCSAqIENvbnN0cnVjdG9yCisJICovCisJcHVibGljIE1hcERhdGFNYW5hZ2VtZW50UHJlZmVyZW5jZVBhZ2UoKSB7CisJCXN1cGVyKEdSSUQpOworCQlzZXRQcmVmZXJlbmNlU3RvcmUoQWN0aXZhdG9yLmdldERlZmF1bHQoKS5nZXRQcmVmZXJlbmNlU3RvcmUoKSk7CisJCXNldERlc2NyaXB0aW9uKCJMYXRpdHVkZS9Mb25naXR1ZGUgcG9seWdvbiBzYW1wbGUgZnJlcXVlbmNlIHNwZWNpZmljYXRpb24uIik7CisJfSAvLyBNYXBEYXRhTWFuYWdlbWVudFByZWZlcmVuY2VQYWdlCisKKwkvKioKKwkgKiBDcmVhdGVzIHRoZSBmaWVsZCBlZGl0b3JzLiBGaWVsZCBlZGl0b3JzIGFyZSBhYnN0cmFjdGlvbnMgb2YgdGhlIGNvbW1vbgorCSAqIEdVSSBibG9ja3MgbmVlZGVkIHRvIG1hbmlwdWxhdGUgdmFyaW91cyB0eXBlcyBvZiBwcmVmZXJlbmNlcy4gRWFjaCBmaWVsZAorCSAqIGVkaXRvciBrbm93cyBob3cgdG8gc2F2ZSBhbmQgcmVzdG9yZSBpdHNlbGYuCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgY3JlYXRlRmllbGRFZGl0b3JzKCkgeworCQllbmFibGVEb3duc2FtcGxlRmllbGRFZGl0b3IgPSBuZXcgQm9vbGVhbkZpZWxkRWRpdG9yKAorCQkJCVByZWZlcmVuY2VDb25zdGFudHMuRE9XTl9TQU1QTEVfTEFUX0xPTkdfREFUQV9CT09MRUFOX1BSRUZFUkVOQ0UsCisJCQkJIiZEb3duIHNhbXBsZSBsYXRpdHVkZS9sb25naXR1ZGUgcG9seWdvbnMuIiwKKwkJCQlnZXRGaWVsZEVkaXRvclBhcmVudCgpKTsKKworCQlsYXRMb25nU2FtcGxlRnJlcXVlbmN5RmllbGRFZGl0b3IgPSBuZXcgSW50ZWdlckZpZWxkRWRpdG9yKAorCQkJCVByZWZlcmVuY2VDb25zdGFudHMuTEFUX0xPTkdfU0FNUExFX0ZSRVFVRU5DWV9JTlRFR0VSX1BSRUZFUkVOQ0UsCisJCQkJIiZsYXRpdHVkZS9sb25naXR1ZGUgZGF0YSBzYW1wbGUgZnJlcXVlbmN5LiIsCisJCQkJZ2V0RmllbGRFZGl0b3JQYXJlbnQoKSk7CisJCWxhdExvbmdTYW1wbGVGcmVxdWVuY3lGaWVsZEVkaXRvci5zZXRWYWxpZFJhbmdlKE1JTl9TQU1QTEVfRlJFUVVFTkNZLAorCQkJCU1BWF9TQU1QTEVfRlJFUVVFTkNZKTsKKwkJbGF0TG9uZ1NhbXBsZUZyZXF1ZW5jeUZpZWxkRWRpdG9yCisJCQkJLnNldEVycm9yTWVzc2FnZSgiRXJyb3I6IFZhbGlkIHJhbmdlOiAiICsgTUlOX1NBTVBMRV9GUkVRVUVOQ1kKKwkJCQkJCSsgIiB0byAiICsgTUFYX1NBTVBMRV9GUkVRVUVOQ1kgKyAiIGRhdGEgcG9pbnRzLiIpOworCisJCWVuYWJsZUlPRXhjZXB0aW9uUmVwb3J0aW5nRmllbGRFZGl0b3IgPSBuZXcgQm9vbGVhbkZpZWxkRWRpdG9yKAorCQkJCVByZWZlcmVuY2VDb25zdGFudHMuUkVQT1JUX0lPX0VYQ0VQVElPTlNfQk9PTEVBTl9QUkVGRVJFTkNFLAorCQkJCSImUmVwb3J0IEkvTyBFeGNlcHRpb25zLiIsIGdldEZpZWxkRWRpdG9yUGFyZW50KCkpOworCisJCXVzZUxvd1Jlc29sdXRpb25MYXRMb25nRGF0YUZpZWxkRWRpdG9yID0gbmV3IEJvb2xlYW5GaWVsZEVkaXRvcigKKwkJCQlQcmVmZXJlbmNlQ29uc3RhbnRzLlVTRV9MT1dFUl9SRVNPTFVUSU9OX0xBVF9MT05HX0RBVEFfQk9PTEVBTl9QUkVGRVJFTkNFLAorCQkJCSImVXNlIGxvd2VyIHJlc29sdXRpb24gbGF0L2xvbmcgZGF0YSBpZiBhdmFpbGFibGUuIiwKKwkJCQlnZXRGaWVsZEVkaXRvclBhcmVudCgpKTsKKworCQlhZGRGaWVsZChlbmFibGVEb3duc2FtcGxlRmllbGRFZGl0b3IpOworCQlhZGRGaWVsZChsYXRMb25nU2FtcGxlRnJlcXVlbmN5RmllbGRFZGl0b3IpOworCQlhZGRGaWVsZChlbmFibGVJT0V4Y2VwdGlvblJlcG9ydGluZ0ZpZWxkRWRpdG9yKTsKKwkJYWRkRmllbGQodXNlTG93UmVzb2x1dGlvbkxhdExvbmdEYXRhRmllbGRFZGl0b3IpOworCX0gLy8gY3JlYXRlRmllbGRFZGl0b3JzCisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2hQcmVmZXJlbmNlUGFnZSNpbml0KG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2gpCisJICovCisJcHVibGljIHZvaWQgaW5pdChmaW5hbCBJV29ya2JlbmNoIHdvcmtiZW5jaCkgeworCQkvLyBOb3RoaW5nCisJfQorCit9IC8vIE1hcERhdGFNYW5hZ2VtZW50UHJlZmVyZW5jZVBhZ2UKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy9hZGFwdGVycy9zcGF0aWFsL2dlby9wcmVmZXJlbmNlcy9QcmVmZXJlbmNlQ29uc3RhbnRzLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvYWRhcHRlcnMvc3BhdGlhbC9nZW8vcHJlZmVyZW5jZXMvUHJlZmVyZW5jZUNvbnN0YW50cy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg5NTcwZDcKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvYWRhcHRlcnMvc3BhdGlhbC9nZW8vcHJlZmVyZW5jZXMvUHJlZmVyZW5jZUNvbnN0YW50cy5qYXZhCkBAIC0wLDAgKzEsMjcgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5hZGFwdGVycy5zcGF0aWFsLmdlby5wcmVmZXJlbmNlczsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKgorICogQ29uc3RhbnQgZGVmaW5pdGlvbnMgZm9yIHBsdWctaW4gcHJlZmVyZW5jZXMKKyAqLworcHVibGljIGludGVyZmFjZSBQcmVmZXJlbmNlQ29uc3RhbnRzIHsKKworCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIERPV05fU0FNUExFX0xBVF9MT05HX0RBVEFfQk9PTEVBTl9QUkVGRVJFTkNFID0gIm9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGF0bG9uZy5zYW1wbGUiOworCisJcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgTEFUX0xPTkdfU0FNUExFX0ZSRVFVRU5DWV9JTlRFR0VSX1BSRUZFUkVOQ0UgPSAib3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYXRsb25nLnNhbXBsZWZyZXF1ZW5jeSI7CisKKwlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBSRVBPUlRfSU9fRVhDRVBUSU9OU19CT09MRUFOX1BSRUZFUkVOQ0UgPSAib3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYXRsb25nLmlvcmVwb3J0IjsKKworCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFVTRV9MT1dFUl9SRVNPTFVUSU9OX0xBVF9MT05HX0RBVEFfQk9PTEVBTl9QUkVGRVJFTkNFID0gIm9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGF0bG9uZy5sb3dyZXNvbHV0aW9uIjsKKworfSAvLyBQcmVmZXJlbmNlQ29uc3RhbnRzCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvYWRhcHRlcnMvc3BhdGlhbC9nZW8vcHJlZmVyZW5jZXMvUHJlZmVyZW5jZUluaXRpYWxpemVyLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvYWRhcHRlcnMvc3BhdGlhbC9nZW8vcHJlZmVyZW5jZXMvUHJlZmVyZW5jZUluaXRpYWxpemVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWQ5YWVmYgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy9hZGFwdGVycy9zcGF0aWFsL2dlby9wcmVmZXJlbmNlcy9QcmVmZXJlbmNlSW5pdGlhbGl6ZXIuamF2YQpAQCAtMCwwICsxLDQ2IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuYWRhcHRlcnMuc3BhdGlhbC5nZW8ucHJlZmVyZW5jZXM7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLnByZWZlcmVuY2VzLkFic3RyYWN0UHJlZmVyZW5jZUluaXRpYWxpemVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnByZWZlcmVuY2UuSVByZWZlcmVuY2VTdG9yZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLkFjdGl2YXRvcjsKKworLyoqCisgKiBDbGFzcyB1c2VkIHRvIGluaXRpYWxpemUgZGVmYXVsdCBwcmVmZXJlbmNlIHZhbHVlcy4KKyAqLworcHVibGljIGNsYXNzIFByZWZlcmVuY2VJbml0aWFsaXplciBleHRlbmRzIEFic3RyYWN0UHJlZmVyZW5jZUluaXRpYWxpemVyIHsKKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLnByZWZlcmVuY2VzLkFic3RyYWN0UHJlZmVyZW5jZUluaXRpYWxpemVyI2luaXRpYWxpemVEZWZhdWx0UHJlZmVyZW5jZXMoKQorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGluaXRpYWxpemVEZWZhdWx0UHJlZmVyZW5jZXMoKSB7CisJCWZpbmFsIElQcmVmZXJlbmNlU3RvcmUgc3RvcmUgPSBBY3RpdmF0b3IuZ2V0RGVmYXVsdCgpCisJCQkJLmdldFByZWZlcmVuY2VTdG9yZSgpOworCQlzdG9yZQorCQkJCS5zZXREZWZhdWx0KAorCQkJCQkJUHJlZmVyZW5jZUNvbnN0YW50cy5MQVRfTE9OR19TQU1QTEVfRlJFUVVFTkNZX0lOVEVHRVJfUFJFRkVSRU5DRSwKKwkJCQkJCU1hcERhdGFNYW5hZ2VtZW50UHJlZmVyZW5jZVBhZ2UuTUlOX1NBTVBMRV9GUkVRVUVOQ1kpOworCQlzdG9yZQorCQkJCS5zZXREZWZhdWx0KAorCQkJCQkJUHJlZmVyZW5jZUNvbnN0YW50cy5ET1dOX1NBTVBMRV9MQVRfTE9OR19EQVRBX0JPT0xFQU5fUFJFRkVSRU5DRSwKKwkJCQkJCWZhbHNlKTsKKwkJc3RvcmUuc2V0RGVmYXVsdCgKKwkJCQlQcmVmZXJlbmNlQ29uc3RhbnRzLlJFUE9SVF9JT19FWENFUFRJT05TX0JPT0xFQU5fUFJFRkVSRU5DRSwKKwkJCQlmYWxzZSk7CisJCXN0b3JlCisJCQkJLnNldERlZmF1bHQoCisJCQkJCQlQcmVmZXJlbmNlQ29uc3RhbnRzLlVTRV9MT1dFUl9SRVNPTFVUSU9OX0xBVF9MT05HX0RBVEFfQk9PTEVBTl9QUkVGRVJFTkNFLAorCQkJCQkJdHJ1ZSk7CisJfSAvLyBpbml0aWFsaXplRGVmYXVsdFByZWZlcmVuY2VzCit9IC8vIFByZWZlcmVuY2VJbml0aWFsaXplcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL2VkZ2VzL0VkZ2VzRmFjdG9yeS5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL2VkZ2VzL0VkZ2VzRmFjdG9yeS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNlMTU4NDMKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvZWRnZXMvRWRnZXNGYWN0b3J5LmphdmEKQEAgLTAsMCArMSwxMDUgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5lZGdlczsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUZhY3Rvcnk7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIFRoZSA8Yj5GYWN0b3J5PC9iPiBmb3IgdGhlIG1vZGVsLgorICogSXQgcHJvdmlkZXMgYSBjcmVhdGUgbWV0aG9kIGZvciBlYWNoIG5vbi1hYnN0cmFjdCBjbGFzcyBvZiB0aGUgbW9kZWwuCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5lZGdlcy5FZGdlc1BhY2thZ2UKKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGludGVyZmFjZSBFZGdlc0ZhY3RvcnkgZXh0ZW5kcyBFRmFjdG9yeSB7CisJLyoqCisJICogVGhlIHNpbmdsZXRvbiBpbnN0YW5jZSBvZiB0aGUgZmFjdG9yeS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFZGdlc0ZhY3RvcnkgZUlOU1RBTkNFID0gb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5lZGdlcy5pbXBsLkVkZ2VzRmFjdG9yeUltcGwuaW5pdCgpOworCisJLyoqCisJICogUmV0dXJucyBhIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5NaWdyYXRpb24gRWRnZTwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+TWlncmF0aW9uIEVkZ2U8L2VtPicuCisJICogQGdlbmVyYXRlZAorCSAqLworCU1pZ3JhdGlvbkVkZ2UgY3JlYXRlTWlncmF0aW9uRWRnZSgpOworCisJLyoqCisJICogUmV0dXJucyBhIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5NaWdyYXRpb24gRWRnZSBMYWJlbDwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+TWlncmF0aW9uIEVkZ2UgTGFiZWw8L2VtPicuCisJICogQGdlbmVyYXRlZAorCSAqLworCU1pZ3JhdGlvbkVkZ2VMYWJlbCBjcmVhdGVNaWdyYXRpb25FZGdlTGFiZWwoKTsKKworCS8qKgorCSAqIFJldHVybnMgYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+TWlncmF0aW9uIEVkZ2UgTGFiZWwgVmFsdWU8L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPk1pZ3JhdGlvbiBFZGdlIExhYmVsIFZhbHVlPC9lbT4nLgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlNaWdyYXRpb25FZGdlTGFiZWxWYWx1ZSBjcmVhdGVNaWdyYXRpb25FZGdlTGFiZWxWYWx1ZSgpOworCisJLyoqCisJICogUmV0dXJucyBhIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5NaXhpbmcgRWRnZTwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+TWl4aW5nIEVkZ2U8L2VtPicuCisJICogQGdlbmVyYXRlZAorCSAqLworCU1peGluZ0VkZ2UgY3JlYXRlTWl4aW5nRWRnZSgpOworCisJLyoqCisJICogUmV0dXJucyBhIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5NaXhpbmcgRWRnZSBMYWJlbDwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+TWl4aW5nIEVkZ2UgTGFiZWw8L2VtPicuCisJICogQGdlbmVyYXRlZAorCSAqLworCU1peGluZ0VkZ2VMYWJlbCBjcmVhdGVNaXhpbmdFZGdlTGFiZWwoKTsKKworCS8qKgorCSAqIFJldHVybnMgYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+TWl4aW5nIEVkZ2UgTGFiZWwgVmFsdWU8L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPk1peGluZyBFZGdlIExhYmVsIFZhbHVlPC9lbT4nLgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlNaXhpbmdFZGdlTGFiZWxWYWx1ZSBjcmVhdGVNaXhpbmdFZGdlTGFiZWxWYWx1ZSgpOworCisJLyoqCisJICogUmV0dXJucyBhIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5Qb3B1bGF0aW9uIEVkZ2U8L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPlBvcHVsYXRpb24gRWRnZTwvZW0+Jy4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJUG9wdWxhdGlvbkVkZ2UgY3JlYXRlUG9wdWxhdGlvbkVkZ2UoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIHBhY2thZ2Ugc3VwcG9ydGVkIGJ5IHRoaXMgZmFjdG9yeS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIHBhY2thZ2Ugc3VwcG9ydGVkIGJ5IHRoaXMgZmFjdG9yeS4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRWRnZXNQYWNrYWdlIGdldEVkZ2VzUGFja2FnZSgpOworCit9IC8vRWRnZXNGYWN0b3J5CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvZWRnZXMvRWRnZXNQYWNrYWdlLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvZWRnZXMvRWRnZXNQYWNrYWdlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWRjYzhkMAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy9lZGdlcy9FZGdlc1BhY2thZ2UuamF2YQpAQCAtMCwwICsxLDgzNiBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmVkZ2VzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQXR0cmlidXRlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5HcmFwaFBhY2thZ2U7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIFRoZSA8Yj5QYWNrYWdlPC9iPiBmb3IgdGhlIG1vZGVsLgorICogSXQgY29udGFpbnMgYWNjZXNzb3JzIGZvciB0aGUgbWV0YSBvYmplY3RzIHRvIHJlcHJlc2VudAorICogPHVsPgorICogICA8bGk+ZWFjaCBjbGFzcyw8L2xpPgorICogICA8bGk+ZWFjaCBmZWF0dXJlIG9mIGVhY2ggY2xhc3MsPC9saT4KKyAqICAgPGxpPmVhY2ggZW51bSw8L2xpPgorICogICA8bGk+YW5kIGVhY2ggZGF0YSB0eXBlPC9saT4KKyAqIDwvdWw+CisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5lZGdlcy5FZGdlc0ZhY3RvcnkKKyAqIEBtb2RlbCBraW5kPSJwYWNrYWdlIgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgaW50ZXJmYWNlIEVkZ2VzUGFja2FnZSBleHRlbmRzIEVQYWNrYWdlIHsKKwkvKioKKwkgKiBUaGUgcGFja2FnZSBuYW1lLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCVN0cmluZyBlTkFNRSA9ICJlZGdlcyI7CisKKwkvKioKKwkgKiBUaGUgcGFja2FnZSBuYW1lc3BhY2UgVVJJLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCVN0cmluZyBlTlNfVVJJID0gImh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy9lZGdlcy5lY29yZSI7CisKKwkvKioKKwkgKiBUaGUgcGFja2FnZSBuYW1lc3BhY2UgbmFtZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlTdHJpbmcgZU5TX1BSRUZJWCA9ICJvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmVkZ2VzIjsKKworCS8qKgorCSAqIFRoZSBzaW5nbGV0b24gaW5zdGFuY2Ugb2YgdGhlIHBhY2thZ2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRWRnZXNQYWNrYWdlIGVJTlNUQU5DRSA9IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuZWRnZXMuaW1wbC5FZGdlc1BhY2thZ2VJbXBsLmluaXQoKTsKKworCS8qKgorCSAqIFRoZSBtZXRhIG9iamVjdCBpZCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5lZGdlcy5pbXBsLlBvcHVsYXRpb25FZGdlSW1wbCA8ZW0+UG9wdWxhdGlvbiBFZGdlPC9lbT59JyBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5lZGdlcy5pbXBsLlBvcHVsYXRpb25FZGdlSW1wbAorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5lZGdlcy5pbXBsLkVkZ2VzUGFja2FnZUltcGwjZ2V0UG9wdWxhdGlvbkVkZ2UoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlpbnQgUE9QVUxBVElPTl9FREdFID0gNjsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5VUkk8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBQT1BVTEFUSU9OX0VER0VfX1VSSSA9IEdyYXBoUGFja2FnZS5FREdFX19VUkk7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VHlwZSBVUkk8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBQT1BVTEFUSU9OX0VER0VfX1RZUEVfVVJJID0gR3JhcGhQYWNrYWdlLkVER0VfX1RZUEVfVVJJOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkR1YmxpbiBDb3JlPC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgUE9QVUxBVElPTl9FREdFX19EVUJMSU5fQ09SRSA9IEdyYXBoUGFja2FnZS5FREdFX19EVUJMSU5fQ09SRTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5BPC9iPjwvZW0+JyByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgUE9QVUxBVElPTl9FREdFX19BID0gR3JhcGhQYWNrYWdlLkVER0VfX0E7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+Tm9kZSBBVVJJPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgUE9QVUxBVElPTl9FREdFX19OT0RFX0FVUkkgPSBHcmFwaFBhY2thZ2UuRURHRV9fTk9ERV9BVVJJOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkI8L2I+PC9lbT4nIHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBQT1BVTEFUSU9OX0VER0VfX0IgPSBHcmFwaFBhY2thZ2UuRURHRV9fQjsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5Ob2RlIEJVUkk8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBQT1BVTEFUSU9OX0VER0VfX05PREVfQlVSSSA9IEdyYXBoUGFja2FnZS5FREdFX19OT0RFX0JVUkk7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+TGFiZWw8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBQT1BVTEFUSU9OX0VER0VfX0xBQkVMID0gR3JhcGhQYWNrYWdlLkVER0VfX0xBQkVMOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkRpcmVjdGVkPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgUE9QVUxBVElPTl9FREdFX19ESVJFQ1RFRCA9IEdyYXBoUGFja2FnZS5FREdFX19ESVJFQ1RFRDsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5Qb3B1bGF0aW9uIElkZW50aWZpZXI8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBQT1BVTEFUSU9OX0VER0VfX1BPUFVMQVRJT05fSURFTlRJRklFUiA9IEdyYXBoUGFja2FnZS5FREdFX0ZFQVRVUkVfQ09VTlQgKyAwOworCisJLyoqCisJICogVGhlIG51bWJlciBvZiBzdHJ1Y3R1cmFsIGZlYXR1cmVzIG9mIHRoZSAnPGVtPlBvcHVsYXRpb24gRWRnZTwvZW0+JyBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBQT1BVTEFUSU9OX0VER0VfRkVBVFVSRV9DT1VOVCA9IEdyYXBoUGFja2FnZS5FREdFX0ZFQVRVUkVfQ09VTlQgKyAxOworCisJLyoqCisJICogVGhlIG1ldGEgb2JqZWN0IGlkIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmVkZ2VzLmltcGwuTWlncmF0aW9uRWRnZUltcGwgPGVtPk1pZ3JhdGlvbiBFZGdlPC9lbT59JyBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5lZGdlcy5pbXBsLk1pZ3JhdGlvbkVkZ2VJbXBsCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmVkZ2VzLmltcGwuRWRnZXNQYWNrYWdlSW1wbCNnZXRNaWdyYXRpb25FZGdlKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJaW50IE1JR1JBVElPTl9FREdFID0gMDsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5VUkk8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBNSUdSQVRJT05fRURHRV9fVVJJID0gUE9QVUxBVElPTl9FREdFX19VUkk7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VHlwZSBVUkk8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBNSUdSQVRJT05fRURHRV9fVFlQRV9VUkkgPSBQT1BVTEFUSU9OX0VER0VfX1RZUEVfVVJJOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkR1YmxpbiBDb3JlPC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgTUlHUkFUSU9OX0VER0VfX0RVQkxJTl9DT1JFID0gUE9QVUxBVElPTl9FREdFX19EVUJMSU5fQ09SRTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5BPC9iPjwvZW0+JyByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgTUlHUkFUSU9OX0VER0VfX0EgPSBQT1BVTEFUSU9OX0VER0VfX0E7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+Tm9kZSBBVVJJPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgTUlHUkFUSU9OX0VER0VfX05PREVfQVVSSSA9IFBPUFVMQVRJT05fRURHRV9fTk9ERV9BVVJJOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkI8L2I+PC9lbT4nIHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBNSUdSQVRJT05fRURHRV9fQiA9IFBPUFVMQVRJT05fRURHRV9fQjsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5Ob2RlIEJVUkk8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBNSUdSQVRJT05fRURHRV9fTk9ERV9CVVJJID0gUE9QVUxBVElPTl9FREdFX19OT0RFX0JVUkk7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+TGFiZWw8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBNSUdSQVRJT05fRURHRV9fTEFCRUwgPSBQT1BVTEFUSU9OX0VER0VfX0xBQkVMOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkRpcmVjdGVkPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgTUlHUkFUSU9OX0VER0VfX0RJUkVDVEVEID0gUE9QVUxBVElPTl9FREdFX19ESVJFQ1RFRDsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5Qb3B1bGF0aW9uIElkZW50aWZpZXI8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBNSUdSQVRJT05fRURHRV9fUE9QVUxBVElPTl9JREVOVElGSUVSID0gUE9QVUxBVElPTl9FREdFX19QT1BVTEFUSU9OX0lERU5USUZJRVI7CisKKwkvKioKKwkgKiBUaGUgbnVtYmVyIG9mIHN0cnVjdHVyYWwgZmVhdHVyZXMgb2YgdGhlICc8ZW0+TWlncmF0aW9uIEVkZ2U8L2VtPicgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgTUlHUkFUSU9OX0VER0VfRkVBVFVSRV9DT1VOVCA9IFBPUFVMQVRJT05fRURHRV9GRUFUVVJFX0NPVU5UICsgMDsKKworCS8qKgorCSAqIFRoZSBtZXRhIG9iamVjdCBpZCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5lZGdlcy5pbXBsLk1pZ3JhdGlvbkVkZ2VMYWJlbEltcGwgPGVtPk1pZ3JhdGlvbiBFZGdlIExhYmVsPC9lbT59JyBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5lZGdlcy5pbXBsLk1pZ3JhdGlvbkVkZ2VMYWJlbEltcGwKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuZWRnZXMuaW1wbC5FZGdlc1BhY2thZ2VJbXBsI2dldE1pZ3JhdGlvbkVkZ2VMYWJlbCgpCisJICogQGdlbmVyYXRlZAorCSAqLworCWludCBNSUdSQVRJT05fRURHRV9MQUJFTCA9IDE7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VVJJPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgTUlHUkFUSU9OX0VER0VfTEFCRUxfX1VSSSA9IEdyYXBoUGFja2FnZS5FREdFX0xBQkVMX19VUkk7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VHlwZSBVUkk8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBNSUdSQVRJT05fRURHRV9MQUJFTF9fVFlQRV9VUkkgPSBHcmFwaFBhY2thZ2UuRURHRV9MQUJFTF9fVFlQRV9VUkk7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RHVibGluIENvcmU8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBNSUdSQVRJT05fRURHRV9MQUJFTF9fRFVCTElOX0NPUkUgPSBHcmFwaFBhY2thZ2UuRURHRV9MQUJFTF9fRFVCTElOX0NPUkU7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VVJJIE9mIElkZW50aWZpYWJsZSBUbyBCZSBMYWJlbGVkPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgTUlHUkFUSU9OX0VER0VfTEFCRUxfX1VSSV9PRl9JREVOVElGSUFCTEVfVE9fQkVfTEFCRUxFRCA9IEdyYXBoUGFja2FnZS5FREdFX0xBQkVMX19VUklfT0ZfSURFTlRJRklBQkxFX1RPX0JFX0xBQkVMRUQ7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+Q3VycmVudCBWYWx1ZTwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IE1JR1JBVElPTl9FREdFX0xBQkVMX19DVVJSRU5UX1ZBTFVFID0gR3JhcGhQYWNrYWdlLkVER0VfTEFCRUxfX0NVUlJFTlRfVkFMVUU7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+SWRlbnRpZmlhYmxlPC9iPjwvZW0+JyByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgTUlHUkFUSU9OX0VER0VfTEFCRUxfX0lERU5USUZJQUJMRSA9IEdyYXBoUGFja2FnZS5FREdFX0xBQkVMX19JREVOVElGSUFCTEU7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RWRnZTwvYj48L2VtPicgY29udGFpbmVyIHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBNSUdSQVRJT05fRURHRV9MQUJFTF9fRURHRSA9IEdyYXBoUGFja2FnZS5FREdFX0xBQkVMX19FREdFOworCisJLyoqCisJICogVGhlIG51bWJlciBvZiBzdHJ1Y3R1cmFsIGZlYXR1cmVzIG9mIHRoZSAnPGVtPk1pZ3JhdGlvbiBFZGdlIExhYmVsPC9lbT4nIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IE1JR1JBVElPTl9FREdFX0xBQkVMX0ZFQVRVUkVfQ09VTlQgPSBHcmFwaFBhY2thZ2UuRURHRV9MQUJFTF9GRUFUVVJFX0NPVU5UICsgMDsKKworCS8qKgorCSAqIFRoZSBtZXRhIG9iamVjdCBpZCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5lZGdlcy5pbXBsLk1pZ3JhdGlvbkVkZ2VMYWJlbFZhbHVlSW1wbCA8ZW0+TWlncmF0aW9uIEVkZ2UgTGFiZWwgVmFsdWU8L2VtPn0nIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmVkZ2VzLmltcGwuTWlncmF0aW9uRWRnZUxhYmVsVmFsdWVJbXBsCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmVkZ2VzLmltcGwuRWRnZXNQYWNrYWdlSW1wbCNnZXRNaWdyYXRpb25FZGdlTGFiZWxWYWx1ZSgpCisJICogQGdlbmVyYXRlZAorCSAqLworCWludCBNSUdSQVRJT05fRURHRV9MQUJFTF9WQUxVRSA9IDI7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+TWlncmF0aW9uIFJhdGU8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBNSUdSQVRJT05fRURHRV9MQUJFTF9WQUxVRV9fTUlHUkFUSU9OX1JBVEUgPSBHcmFwaFBhY2thZ2UuTEFCRUxfVkFMVUVfRkVBVFVSRV9DT1VOVCArIDA7CisKKwkvKioKKwkgKiBUaGUgbnVtYmVyIG9mIHN0cnVjdHVyYWwgZmVhdHVyZXMgb2YgdGhlICc8ZW0+TWlncmF0aW9uIEVkZ2UgTGFiZWwgVmFsdWU8L2VtPicgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgTUlHUkFUSU9OX0VER0VfTEFCRUxfVkFMVUVfRkVBVFVSRV9DT1VOVCA9IEdyYXBoUGFja2FnZS5MQUJFTF9WQUxVRV9GRUFUVVJFX0NPVU5UICsgMTsKKworCS8qKgorCSAqIFRoZSBtZXRhIG9iamVjdCBpZCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5lZGdlcy5pbXBsLk1peGluZ0VkZ2VJbXBsIDxlbT5NaXhpbmcgRWRnZTwvZW0+fScgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuZWRnZXMuaW1wbC5NaXhpbmdFZGdlSW1wbAorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5lZGdlcy5pbXBsLkVkZ2VzUGFja2FnZUltcGwjZ2V0TWl4aW5nRWRnZSgpCisJICogQGdlbmVyYXRlZAorCSAqLworCWludCBNSVhJTkdfRURHRSA9IDM7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VVJJPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgTUlYSU5HX0VER0VfX1VSSSA9IFBPUFVMQVRJT05fRURHRV9fVVJJOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlR5cGUgVVJJPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgTUlYSU5HX0VER0VfX1RZUEVfVVJJID0gUE9QVUxBVElPTl9FREdFX19UWVBFX1VSSTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5EdWJsaW4gQ29yZTwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IE1JWElOR19FREdFX19EVUJMSU5fQ09SRSA9IFBPUFVMQVRJT05fRURHRV9fRFVCTElOX0NPUkU7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+QTwvYj48L2VtPicgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IE1JWElOR19FREdFX19BID0gUE9QVUxBVElPTl9FREdFX19BOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPk5vZGUgQVVSSTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IE1JWElOR19FREdFX19OT0RFX0FVUkkgPSBQT1BVTEFUSU9OX0VER0VfX05PREVfQVVSSTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5CPC9iPjwvZW0+JyByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgTUlYSU5HX0VER0VfX0IgPSBQT1BVTEFUSU9OX0VER0VfX0I7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+Tm9kZSBCVVJJPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgTUlYSU5HX0VER0VfX05PREVfQlVSSSA9IFBPUFVMQVRJT05fRURHRV9fTk9ERV9CVVJJOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkxhYmVsPC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgTUlYSU5HX0VER0VfX0xBQkVMID0gUE9QVUxBVElPTl9FREdFX19MQUJFTDsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5EaXJlY3RlZDwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IE1JWElOR19FREdFX19ESVJFQ1RFRCA9IFBPUFVMQVRJT05fRURHRV9fRElSRUNURUQ7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+UG9wdWxhdGlvbiBJZGVudGlmaWVyPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgTUlYSU5HX0VER0VfX1BPUFVMQVRJT05fSURFTlRJRklFUiA9IFBPUFVMQVRJT05fRURHRV9fUE9QVUxBVElPTl9JREVOVElGSUVSOworCisJLyoqCisJICogVGhlIG51bWJlciBvZiBzdHJ1Y3R1cmFsIGZlYXR1cmVzIG9mIHRoZSAnPGVtPk1peGluZyBFZGdlPC9lbT4nIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IE1JWElOR19FREdFX0ZFQVRVUkVfQ09VTlQgPSBQT1BVTEFUSU9OX0VER0VfRkVBVFVSRV9DT1VOVCArIDA7CisKKwkvKioKKwkgKiBUaGUgbWV0YSBvYmplY3QgaWQgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuZWRnZXMuaW1wbC5NaXhpbmdFZGdlTGFiZWxJbXBsIDxlbT5NaXhpbmcgRWRnZSBMYWJlbDwvZW0+fScgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuZWRnZXMuaW1wbC5NaXhpbmdFZGdlTGFiZWxJbXBsCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmVkZ2VzLmltcGwuRWRnZXNQYWNrYWdlSW1wbCNnZXRNaXhpbmdFZGdlTGFiZWwoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlpbnQgTUlYSU5HX0VER0VfTEFCRUwgPSA0OworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlVSSTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IE1JWElOR19FREdFX0xBQkVMX19VUkkgPSBHcmFwaFBhY2thZ2UuRURHRV9MQUJFTF9fVVJJOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlR5cGUgVVJJPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgTUlYSU5HX0VER0VfTEFCRUxfX1RZUEVfVVJJID0gR3JhcGhQYWNrYWdlLkVER0VfTEFCRUxfX1RZUEVfVVJJOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkR1YmxpbiBDb3JlPC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgTUlYSU5HX0VER0VfTEFCRUxfX0RVQkxJTl9DT1JFID0gR3JhcGhQYWNrYWdlLkVER0VfTEFCRUxfX0RVQkxJTl9DT1JFOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlVSSSBPZiBJZGVudGlmaWFibGUgVG8gQmUgTGFiZWxlZDwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IE1JWElOR19FREdFX0xBQkVMX19VUklfT0ZfSURFTlRJRklBQkxFX1RPX0JFX0xBQkVMRUQgPSBHcmFwaFBhY2thZ2UuRURHRV9MQUJFTF9fVVJJX09GX0lERU5USUZJQUJMRV9UT19CRV9MQUJFTEVEOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkN1cnJlbnQgVmFsdWU8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBNSVhJTkdfRURHRV9MQUJFTF9fQ1VSUkVOVF9WQUxVRSA9IEdyYXBoUGFja2FnZS5FREdFX0xBQkVMX19DVVJSRU5UX1ZBTFVFOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPklkZW50aWZpYWJsZTwvYj48L2VtPicgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IE1JWElOR19FREdFX0xBQkVMX19JREVOVElGSUFCTEUgPSBHcmFwaFBhY2thZ2UuRURHRV9MQUJFTF9fSURFTlRJRklBQkxFOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkVkZ2U8L2I+PC9lbT4nIGNvbnRhaW5lciByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgTUlYSU5HX0VER0VfTEFCRUxfX0VER0UgPSBHcmFwaFBhY2thZ2UuRURHRV9MQUJFTF9fRURHRTsKKworCS8qKgorCSAqIFRoZSBudW1iZXIgb2Ygc3RydWN0dXJhbCBmZWF0dXJlcyBvZiB0aGUgJzxlbT5NaXhpbmcgRWRnZSBMYWJlbDwvZW0+JyBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBNSVhJTkdfRURHRV9MQUJFTF9GRUFUVVJFX0NPVU5UID0gR3JhcGhQYWNrYWdlLkVER0VfTEFCRUxfRkVBVFVSRV9DT1VOVCArIDA7CisKKwkvKioKKwkgKiBUaGUgbWV0YSBvYmplY3QgaWQgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuZWRnZXMuaW1wbC5NaXhpbmdFZGdlTGFiZWxWYWx1ZUltcGwgPGVtPk1peGluZyBFZGdlIExhYmVsIFZhbHVlPC9lbT59JyBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5lZGdlcy5pbXBsLk1peGluZ0VkZ2VMYWJlbFZhbHVlSW1wbAorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5lZGdlcy5pbXBsLkVkZ2VzUGFja2FnZUltcGwjZ2V0TWl4aW5nRWRnZUxhYmVsVmFsdWUoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlpbnQgTUlYSU5HX0VER0VfTEFCRUxfVkFMVUUgPSA1OworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPk1peGluZyBSYXRlPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgTUlYSU5HX0VER0VfTEFCRUxfVkFMVUVfX01JWElOR19SQVRFID0gR3JhcGhQYWNrYWdlLkxBQkVMX1ZBTFVFX0ZFQVRVUkVfQ09VTlQgKyAwOworCisJLyoqCisJICogVGhlIG51bWJlciBvZiBzdHJ1Y3R1cmFsIGZlYXR1cmVzIG9mIHRoZSAnPGVtPk1peGluZyBFZGdlIExhYmVsIFZhbHVlPC9lbT4nIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IE1JWElOR19FREdFX0xBQkVMX1ZBTFVFX0ZFQVRVUkVfQ09VTlQgPSBHcmFwaFBhY2thZ2UuTEFCRUxfVkFMVUVfRkVBVFVSRV9DT1VOVCArIDE7CisKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuZWRnZXMuTWlncmF0aW9uRWRnZSA8ZW0+TWlncmF0aW9uIEVkZ2U8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICc8ZW0+TWlncmF0aW9uIEVkZ2U8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmVkZ2VzLk1pZ3JhdGlvbkVkZ2UKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUNsYXNzIGdldE1pZ3JhdGlvbkVkZ2UoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuZWRnZXMuTWlncmF0aW9uRWRnZUxhYmVsIDxlbT5NaWdyYXRpb24gRWRnZSBMYWJlbDwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJzxlbT5NaWdyYXRpb24gRWRnZSBMYWJlbDwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuZWRnZXMuTWlncmF0aW9uRWRnZUxhYmVsCisJICogQGdlbmVyYXRlZAorCSAqLworCUVDbGFzcyBnZXRNaWdyYXRpb25FZGdlTGFiZWwoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuZWRnZXMuTWlncmF0aW9uRWRnZUxhYmVsVmFsdWUgPGVtPk1pZ3JhdGlvbiBFZGdlIExhYmVsIFZhbHVlPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAnPGVtPk1pZ3JhdGlvbiBFZGdlIExhYmVsIFZhbHVlPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5lZGdlcy5NaWdyYXRpb25FZGdlTGFiZWxWYWx1ZQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQ2xhc3MgZ2V0TWlncmF0aW9uRWRnZUxhYmVsVmFsdWUoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5lZGdlcy5NaWdyYXRpb25FZGdlTGFiZWxWYWx1ZSNnZXRNaWdyYXRpb25SYXRlIDxlbT5NaWdyYXRpb24gUmF0ZTwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPGVtPk1pZ3JhdGlvbiBSYXRlPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5lZGdlcy5NaWdyYXRpb25FZGdlTGFiZWxWYWx1ZSNnZXRNaWdyYXRpb25SYXRlKCkKKwkgKiBAc2VlICNnZXRNaWdyYXRpb25FZGdlTGFiZWxWYWx1ZSgpCisJICogQGdlbmVyYXRlZAorCSAqLworCUVBdHRyaWJ1dGUgZ2V0TWlncmF0aW9uRWRnZUxhYmVsVmFsdWVfTWlncmF0aW9uUmF0ZSgpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5lZGdlcy5NaXhpbmdFZGdlIDxlbT5NaXhpbmcgRWRnZTwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJzxlbT5NaXhpbmcgRWRnZTwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuZWRnZXMuTWl4aW5nRWRnZQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQ2xhc3MgZ2V0TWl4aW5nRWRnZSgpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5lZGdlcy5NaXhpbmdFZGdlTGFiZWwgPGVtPk1peGluZyBFZGdlIExhYmVsPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAnPGVtPk1peGluZyBFZGdlIExhYmVsPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5lZGdlcy5NaXhpbmdFZGdlTGFiZWwKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUNsYXNzIGdldE1peGluZ0VkZ2VMYWJlbCgpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5lZGdlcy5NaXhpbmdFZGdlTGFiZWxWYWx1ZSA8ZW0+TWl4aW5nIEVkZ2UgTGFiZWwgVmFsdWU8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICc8ZW0+TWl4aW5nIEVkZ2UgTGFiZWwgVmFsdWU8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmVkZ2VzLk1peGluZ0VkZ2VMYWJlbFZhbHVlCisJICogQGdlbmVyYXRlZAorCSAqLworCUVDbGFzcyBnZXRNaXhpbmdFZGdlTGFiZWxWYWx1ZSgpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmVkZ2VzLk1peGluZ0VkZ2VMYWJlbFZhbHVlI2dldE1peGluZ1JhdGUgPGVtPk1peGluZyBSYXRlPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+TWl4aW5nIFJhdGU8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmVkZ2VzLk1peGluZ0VkZ2VMYWJlbFZhbHVlI2dldE1peGluZ1JhdGUoKQorCSAqIEBzZWUgI2dldE1peGluZ0VkZ2VMYWJlbFZhbHVlKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUF0dHJpYnV0ZSBnZXRNaXhpbmdFZGdlTGFiZWxWYWx1ZV9NaXhpbmdSYXRlKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmVkZ2VzLlBvcHVsYXRpb25FZGdlIDxlbT5Qb3B1bGF0aW9uIEVkZ2U8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICc8ZW0+UG9wdWxhdGlvbiBFZGdlPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5lZGdlcy5Qb3B1bGF0aW9uRWRnZQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQ2xhc3MgZ2V0UG9wdWxhdGlvbkVkZ2UoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5lZGdlcy5Qb3B1bGF0aW9uRWRnZSNnZXRQb3B1bGF0aW9uSWRlbnRpZmllciA8ZW0+UG9wdWxhdGlvbiBJZGVudGlmaWVyPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+UG9wdWxhdGlvbiBJZGVudGlmaWVyPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5lZGdlcy5Qb3B1bGF0aW9uRWRnZSNnZXRQb3B1bGF0aW9uSWRlbnRpZmllcigpCisJICogQHNlZSAjZ2V0UG9wdWxhdGlvbkVkZ2UoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQXR0cmlidXRlIGdldFBvcHVsYXRpb25FZGdlX1BvcHVsYXRpb25JZGVudGlmaWVyKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBmYWN0b3J5IHRoYXQgY3JlYXRlcyB0aGUgaW5zdGFuY2VzIG9mIHRoZSBtb2RlbC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIGZhY3RvcnkgdGhhdCBjcmVhdGVzIHRoZSBpbnN0YW5jZXMgb2YgdGhlIG1vZGVsLgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFZGdlc0ZhY3RvcnkgZ2V0RWRnZXNGYWN0b3J5KCk7CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIERlZmluZXMgbGl0ZXJhbHMgZm9yIHRoZSBtZXRhIG9iamVjdHMgdGhhdCByZXByZXNlbnQKKwkgKiA8dWw+CisJICogICA8bGk+ZWFjaCBjbGFzcyw8L2xpPgorCSAqICAgPGxpPmVhY2ggZmVhdHVyZSBvZiBlYWNoIGNsYXNzLDwvbGk+CisJICogICA8bGk+ZWFjaCBlbnVtLDwvbGk+CisJICogICA8bGk+YW5kIGVhY2ggZGF0YSB0eXBlPC9saT4KKwkgKiA8L3VsPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlpbnRlcmZhY2UgTGl0ZXJhbHMgeworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuZWRnZXMuaW1wbC5NaWdyYXRpb25FZGdlSW1wbCA8ZW0+TWlncmF0aW9uIEVkZ2U8L2VtPn0nIGNsYXNzLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmVkZ2VzLmltcGwuTWlncmF0aW9uRWRnZUltcGwKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmVkZ2VzLmltcGwuRWRnZXNQYWNrYWdlSW1wbCNnZXRNaWdyYXRpb25FZGdlKCkKKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUNsYXNzIE1JR1JBVElPTl9FREdFID0gZUlOU1RBTkNFLmdldE1pZ3JhdGlvbkVkZ2UoKTsKKworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuZWRnZXMuaW1wbC5NaWdyYXRpb25FZGdlTGFiZWxJbXBsIDxlbT5NaWdyYXRpb24gRWRnZSBMYWJlbDwvZW0+fScgY2xhc3MuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuZWRnZXMuaW1wbC5NaWdyYXRpb25FZGdlTGFiZWxJbXBsCisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5lZGdlcy5pbXBsLkVkZ2VzUGFja2FnZUltcGwjZ2V0TWlncmF0aW9uRWRnZUxhYmVsKCkKKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUNsYXNzIE1JR1JBVElPTl9FREdFX0xBQkVMID0gZUlOU1RBTkNFLmdldE1pZ3JhdGlvbkVkZ2VMYWJlbCgpOworCisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5lZGdlcy5pbXBsLk1pZ3JhdGlvbkVkZ2VMYWJlbFZhbHVlSW1wbCA8ZW0+TWlncmF0aW9uIEVkZ2UgTGFiZWwgVmFsdWU8L2VtPn0nIGNsYXNzLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmVkZ2VzLmltcGwuTWlncmF0aW9uRWRnZUxhYmVsVmFsdWVJbXBsCisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5lZGdlcy5pbXBsLkVkZ2VzUGFja2FnZUltcGwjZ2V0TWlncmF0aW9uRWRnZUxhYmVsVmFsdWUoKQorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQ2xhc3MgTUlHUkFUSU9OX0VER0VfTEFCRUxfVkFMVUUgPSBlSU5TVEFOQ0UuZ2V0TWlncmF0aW9uRWRnZUxhYmVsVmFsdWUoKTsKKworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPk1pZ3JhdGlvbiBSYXRlPC9iPjwvZW0+JyBhdHRyaWJ1dGUgZmVhdHVyZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVBdHRyaWJ1dGUgTUlHUkFUSU9OX0VER0VfTEFCRUxfVkFMVUVfX01JR1JBVElPTl9SQVRFID0gZUlOU1RBTkNFLmdldE1pZ3JhdGlvbkVkZ2VMYWJlbFZhbHVlX01pZ3JhdGlvblJhdGUoKTsKKworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuZWRnZXMuaW1wbC5NaXhpbmdFZGdlSW1wbCA8ZW0+TWl4aW5nIEVkZ2U8L2VtPn0nIGNsYXNzLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmVkZ2VzLmltcGwuTWl4aW5nRWRnZUltcGwKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmVkZ2VzLmltcGwuRWRnZXNQYWNrYWdlSW1wbCNnZXRNaXhpbmdFZGdlKCkKKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUNsYXNzIE1JWElOR19FREdFID0gZUlOU1RBTkNFLmdldE1peGluZ0VkZ2UoKTsKKworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuZWRnZXMuaW1wbC5NaXhpbmdFZGdlTGFiZWxJbXBsIDxlbT5NaXhpbmcgRWRnZSBMYWJlbDwvZW0+fScgY2xhc3MuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuZWRnZXMuaW1wbC5NaXhpbmdFZGdlTGFiZWxJbXBsCisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5lZGdlcy5pbXBsLkVkZ2VzUGFja2FnZUltcGwjZ2V0TWl4aW5nRWRnZUxhYmVsKCkKKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUNsYXNzIE1JWElOR19FREdFX0xBQkVMID0gZUlOU1RBTkNFLmdldE1peGluZ0VkZ2VMYWJlbCgpOworCisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5lZGdlcy5pbXBsLk1peGluZ0VkZ2VMYWJlbFZhbHVlSW1wbCA8ZW0+TWl4aW5nIEVkZ2UgTGFiZWwgVmFsdWU8L2VtPn0nIGNsYXNzLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmVkZ2VzLmltcGwuTWl4aW5nRWRnZUxhYmVsVmFsdWVJbXBsCisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5lZGdlcy5pbXBsLkVkZ2VzUGFja2FnZUltcGwjZ2V0TWl4aW5nRWRnZUxhYmVsVmFsdWUoKQorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQ2xhc3MgTUlYSU5HX0VER0VfTEFCRUxfVkFMVUUgPSBlSU5TVEFOQ0UuZ2V0TWl4aW5nRWRnZUxhYmVsVmFsdWUoKTsKKworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPk1peGluZyBSYXRlPC9iPjwvZW0+JyBhdHRyaWJ1dGUgZmVhdHVyZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVBdHRyaWJ1dGUgTUlYSU5HX0VER0VfTEFCRUxfVkFMVUVfX01JWElOR19SQVRFID0gZUlOU1RBTkNFLmdldE1peGluZ0VkZ2VMYWJlbFZhbHVlX01peGluZ1JhdGUoKTsKKworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuZWRnZXMuaW1wbC5Qb3B1bGF0aW9uRWRnZUltcGwgPGVtPlBvcHVsYXRpb24gRWRnZTwvZW0+fScgY2xhc3MuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuZWRnZXMuaW1wbC5Qb3B1bGF0aW9uRWRnZUltcGwKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmVkZ2VzLmltcGwuRWRnZXNQYWNrYWdlSW1wbCNnZXRQb3B1bGF0aW9uRWRnZSgpCisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVDbGFzcyBQT1BVTEFUSU9OX0VER0UgPSBlSU5TVEFOQ0UuZ2V0UG9wdWxhdGlvbkVkZ2UoKTsKKworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPlBvcHVsYXRpb24gSWRlbnRpZmllcjwvYj48L2VtPicgYXR0cmlidXRlIGZlYXR1cmUuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQXR0cmlidXRlIFBPUFVMQVRJT05fRURHRV9fUE9QVUxBVElPTl9JREVOVElGSUVSID0gZUlOU1RBTkNFLmdldFBvcHVsYXRpb25FZGdlX1BvcHVsYXRpb25JZGVudGlmaWVyKCk7CisKKwl9CisKK30gLy9FZGdlc1BhY2thZ2UKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy9lZGdlcy9NaWdyYXRpb25FZGdlLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvZWRnZXMvTWlncmF0aW9uRWRnZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk5ZDAwMTIKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvZWRnZXMvTWlncmF0aW9uRWRnZS5qYXZhCkBAIC0wLDAgKzEsNDAgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5lZGdlczsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworLyoqCisgKiBBbiBlZGdlIHJlcHJlc2VudGluZyBtaWdyYXRpb24gYmV0d2VlbiAKKyAqIHR3byBhcmVhcy4gVGhlc2UgZWRnZXMgaGF2ZSB0aGUgZm9sbG93aW5nIHJlc3RyaWN0aW9uczoKKyAqIC1nZXRMYWJlbCgpIG11c3QgcmV0dXJuIGEgbWlncmF0aW9uIGVkZ2UgbGFiZWwKKyAqIC1pc0RpcmVjdGVkKCkgbXVzdCByZXR1cm4gdHJ1ZQorICogCisgKiBAYXV0aG9yIGpsZXNzbGVyCisgKgorICogQG1vZGVsCisgKi8KK3B1YmxpYyBpbnRlcmZhY2UgTWlncmF0aW9uRWRnZSBleHRlbmRzIFBvcHVsYXRpb25FZGdlIHsKKworCS8qKgorCSAqIFRoaXMgaXMgdGhlIHNlZ21lbnQgb2YgdGhlIHR5cGUgVVJJIHRoYXQgcHJlZml4ZXMgYWxsIG90aGVyIHNlZ21lbnRzIGluIGEKKwkgKiBtaWdyYXRpb24gZWRnZSBVUkkuCisJICovCisJcHVibGljIFN0cmluZyBVUklfVFlQRV9NSUdSQVRJT05fRURHRV9TRUdNRU5UID0gVVJJX1RZUEVfRURHRV9TRUdNRU5UICsgIi9taWdyYXRpb24iOworCQorCQorCQorCS8qKk92ZXJyaWRlcyBnZXRMYWJlbCgpIHRvIGVuZm9yY2UgdGhlIHJldHVybmluZyBvZiBhIG1pZ3JhdGlvbiBlZGdlIGxhYmVsCisJICoqLworCU1pZ3JhdGlvbkVkZ2VMYWJlbCBnZXRMYWJlbCgpOworCXZvaWQgc2V0TGFiZWwoTWlncmF0aW9uRWRnZUxhYmVsIGxibCk7CisJCQkJCit9CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvZWRnZXMvTWlncmF0aW9uRWRnZUxhYmVsLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvZWRnZXMvTWlncmF0aW9uRWRnZUxhYmVsLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTBkZDI2OAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy9lZGdlcy9NaWdyYXRpb25FZGdlTGFiZWwuamF2YQpAQCAtMCwwICsxLDQzIEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuZWRnZXM7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkVkZ2VMYWJlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuTW9kaWZpYWJsZTsKKworCisvKioKKyAqIERlZmluZXMgYSBkaXJlY3RlZCBlZGdlIHRoYXQgcmVwcmVzZW50cyBtaWdyYXRpb24gYmV0d2VlbiB0d28gbm9kZXMuCisgKiBNaWdyYXRpb24gZGVub3RlcyBtb3ZlbWVudCBvZiB0aGUgcG9wdWxhdGlvbiBiZXR3ZWVuIHR3byBub2RlcyAoaS5lLiwgdGhlCisgKiBob21lIG5vZGUgb2YgbWlncmF0aW5nIHBvcHVsYXRpb24gY2hhbmdlcykuCisgKiAKKyAqIEBhdXRob3Igamxlc3NsZXIKKyAqIEBtb2RlbAorICovCisKK3B1YmxpYyBpbnRlcmZhY2UgTWlncmF0aW9uRWRnZUxhYmVsIGV4dGVuZHMgRWRnZUxhYmVsLCBNb2RpZmlhYmxlIHsKKwkKKwkKKwkvKioKKwkgKiBUaGlzIGlzIHRoZSBzZWdtZW50IG9mIHRoZSB0eXBlIFVSSSB0aGF0IHByZWZpeGVzIGFsbCBvdGhlciBzZWdtZW50cyBpbiBhCisJICogbWlncmF0aW9uIHJlbGF0aW9uc2hpcCBsYWJlbCB0eXBlIFVSSS4KKwkgKi8KKwlTdHJpbmcgVVJJX1RZUEVfTUlHUkFUSU9OX1JFTEFUSU9OU0hJUF9MQUJFTF9TRUdNRU5UID0gVVJJX1RZUEVfTEFCRUxfU0VHTUVOVAorCQkJKyAiL21pZ3JhdGlvbiI7CisJCisJCisJLyoqTWFrZSB0aGUgY3VycmVudCAgdmFsdWUgc3R1ZmYgaGF2ZSB0byBiZSBNaXhpbmdFZGdlTGFiZWxWYWx1ZXMKKwkgKiAqLworCU1pZ3JhdGlvbkVkZ2VMYWJlbFZhbHVlIGdldEN1cnJlbnRWYWx1ZSgpOworCXZvaWQgc2V0Q3VycmVudFZhbHVlKE1pZ3JhdGlvbkVkZ2VMYWJlbFZhbHVlIHZhbCk7CisJCQorfQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL2VkZ2VzL01pZ3JhdGlvbkVkZ2VMYWJlbFZhbHVlLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvZWRnZXMvTWlncmF0aW9uRWRnZUxhYmVsVmFsdWUuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYmNjZjRmCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL2VkZ2VzL01pZ3JhdGlvbkVkZ2VMYWJlbFZhbHVlLmphdmEKQEAgLTAsMCArMSw0MiBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmVkZ2VzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5MYWJlbFZhbHVlOworCisvKioKKyAqIFJlcHJlc2VudHMgdGhlIHJhdGUgb2YgbWlncmF0aW9uIGJldHdlZW4gdHdvIG5vZGVzLiBUaGlzIGlzIGEgCisgKiBudW1iZXIgYmV0d2VlbiAwIGFuZCBpbmZpbml0eQorICogCisgKiBAYXV0aG9yIGpsZXNzbGVyCisgKgorICpAbW9kZWwKKyAqLworcHVibGljIGludGVyZmFjZSBNaWdyYXRpb25FZGdlTGFiZWxWYWx1ZSBleHRlbmRzIExhYmVsVmFsdWUgeworCQorCS8qKlJldHVybnMgdGhlIG1pZ3JhdGlvbiByYXRlCisJICogQHJldHVybiBhIG51bWJlciBiZXR3ZWVuIDAgYW5kIGluZmluaXR5CisJICogCisJICogQG1vZGVsIGRlZmF1bHQ9IjAuMCIqLworCWRvdWJsZSBnZXRNaWdyYXRpb25SYXRlKCk7CisKKwkvKioKKwkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmVkZ2VzLk1pZ3JhdGlvbkVkZ2VMYWJlbFZhbHVlI2dldE1pZ3JhdGlvblJhdGUgPGVtPk1pZ3JhdGlvbiBSYXRlPC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5NaWdyYXRpb24gUmF0ZTwvZW0+JyBhdHRyaWJ1dGUuCisJICogQHNlZSAjZ2V0TWlncmF0aW9uUmF0ZSgpCisJICogQGdlbmVyYXRlZAorCSAqLworCXZvaWQgc2V0TWlncmF0aW9uUmF0ZShkb3VibGUgdmFsdWUpOworCit9CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvZWRnZXMvTWl4aW5nRWRnZS5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL2VkZ2VzL01peGluZ0VkZ2UuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZjBjNmRiCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL2VkZ2VzL01peGluZ0VkZ2UuamF2YQpAQCAtMCwwICsxLDM3IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuZWRnZXM7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKKy8qKgorICogQSBtaXhpbmcgZWRnZS4gQSBtaXhpbmcgZWRnZSBtdXN0IGhhdmUgdGhlIHByb3BlcnR5IHRoYXQ6CisgKiAgLSBpdCBpcyB1bmRpcmVjdGVkCisgKiAgLSBnZXRMYWJlbCgpIHJldHVybnMgYSBtaXhpbmcgZWRnZSBsYWJlbAorICogQGF1dGhvciBqbGVzc2xlcgorICoKKyAqIEBtb2RlbAorICovCitwdWJsaWMgaW50ZXJmYWNlIE1peGluZ0VkZ2UgZXh0ZW5kcyBQb3B1bGF0aW9uRWRnZSB7CisKKwkvKioKKwkgKiBUaGlzIGlzIHRoZSBzZWdtZW50IG9mIHRoZSB0eXBlIFVSSSB0aGF0IHByZWZpeGVzIGFsbCBvdGhlciBzZWdtZW50cyBpbiBhCisJICogbWl4aW5nIGVkZ2UgVVJJLgorCSAqLworCXB1YmxpYyBTdHJpbmcgVVJJX1RZUEVfTUlYSU5HX0VER0VfU0VHTUVOVCA9IFVSSV9UWVBFX0VER0VfU0VHTUVOVCArICIvbWl4aW5nIjsKKwkKKwkKKwkvKipPdmVycmlkZXMgZ2V0TGFiZWwoKSB0byBlbmZvcmNlIHRoZSByZXR1cm5pbmcgb2YgYSBtaXhpbmcgZWRnZSBsYWJlbAkKKwkgKi8KKwlNaXhpbmdFZGdlTGFiZWwgZ2V0TGFiZWwoKTsKKwl2b2lkIHNldExhYmVsKE1peGluZ0VkZ2VMYWJlbCBsYmwpOworCQkJCit9CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvZWRnZXMvTWl4aW5nRWRnZUxhYmVsLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvZWRnZXMvTWl4aW5nRWRnZUxhYmVsLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmRkYzRkMwotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy9lZGdlcy9NaXhpbmdFZGdlTGFiZWwuamF2YQpAQCAtMCwwICsxLDM4IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuZWRnZXM7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkVkZ2VMYWJlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuTW9kaWZpYWJsZTsKKworLyoqCisgKiBEZWZpbmVzIGEgbWl4aW5nIGVkZ2UuIE1peGluZyBlZGdlcyBhcmUgdW5kaXJlY3RlZCBhbmQgZGVmaW5lcyBzb21lIHJhdGUgb2YgCisgKiBjb250YWN0IGJldHdlZW4gbWVtYmVycyBvZiB0d28gcG9wdWxhdGlvbnMgaW4gd2hpY2ggdGhlIGhvbWUgcG9wdWxhdGlvbiBvZgorICogdGhlIGluZGl2aWR1YWxzIGludm9sdmVkIGRvZXMgbm90IGNoYW5nZS4KKyAqIAorICogQG1vZGVsCisgKiAqLworcHVibGljIGludGVyZmFjZSBNaXhpbmdFZGdlTGFiZWwgZXh0ZW5kcyBFZGdlTGFiZWwsIE1vZGlmaWFibGUgeworCQorCS8qKgorCSAqIFRoaXMgaXMgdGhlIHNlZ21lbnQgb2YgdGhlIHR5cGUgVVJJIHRoYXQgcHJlZml4ZXMgYWxsIG90aGVyIHNlZ21lbnRzIGluIGEKKwkgKiBtaXhpbmcgcmVsYXRpb25zaGlwIGxhYmVsIHR5cGUgVVJJLgorCSAqLworCVN0cmluZyBVUklfVFlQRV9NSVhJTkdfUkVMQVRJT05TSElQX0xBQkVMX1NFR01FTlQgPSBVUklfVFlQRV9MQUJFTF9TRUdNRU5UCisJCQkrICIvbWl4aW5nIjsKKwkKKwkvKipNYWtlIHRoZSBjdXJyZW50ICB2YWx1ZSBzdHVmZiBoYXZlIHRvIGJlIE1peGluZ0VkZ2VMYWJlbFZhbHVlcworCSAqICovCisJTWl4aW5nRWRnZUxhYmVsVmFsdWUgZ2V0Q3VycmVudFZhbHVlKCk7CisJdm9pZCBzZXRDdXJyZW50VmFsdWUoTWl4aW5nRWRnZUxhYmVsVmFsdWUgdmFsKTsKKworfQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL2VkZ2VzL01peGluZ0VkZ2VMYWJlbFZhbHVlLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvZWRnZXMvTWl4aW5nRWRnZUxhYmVsVmFsdWUuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NTUxMDVhCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL2VkZ2VzL01peGluZ0VkZ2VMYWJlbFZhbHVlLmphdmEKQEAgLTAsMCArMSwzOSBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmVkZ2VzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5MYWJlbFZhbHVlOworCisKKy8qKgorICogTGFiZWwgdmFsdWUgZGVub3RpbmcgdGhlIHJhdGUgb2YgbWl4aW5nIGJldHdlZW4gdHdvIHBvcHVsYXRpb25zLgorICogCisgKiBAbW9kZWwKKyAqKi8KK3B1YmxpYyBpbnRlcmZhY2UgTWl4aW5nRWRnZUxhYmVsVmFsdWUgZXh0ZW5kcyBMYWJlbFZhbHVlIHsKKwkJCisJLyoqVGhlIHJhdGUgb2YgbWl4aW5nIGJldHdlZW4gdGhlIHR3byBwb3B1bGF0aW9ucy4KKwkgKiAKKwkgKiBAbW9kZWwqLworCWRvdWJsZSBnZXRNaXhpbmdSYXRlKCk7CisKKwkvKioKKwkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmVkZ2VzLk1peGluZ0VkZ2VMYWJlbFZhbHVlI2dldE1peGluZ1JhdGUgPGVtPk1peGluZyBSYXRlPC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5NaXhpbmcgUmF0ZTwvZW0+JyBhdHRyaWJ1dGUuCisJICogQHNlZSAjZ2V0TWl4aW5nUmF0ZSgpCisJICogQGdlbmVyYXRlZAorCSAqLworCXZvaWQgc2V0TWl4aW5nUmF0ZShkb3VibGUgdmFsdWUpOworCit9CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvZWRnZXMvUG9wdWxhdGlvbkVkZ2UuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy9lZGdlcy9Qb3B1bGF0aW9uRWRnZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgxN2M0ZGYKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvZWRnZXMvUG9wdWxhdGlvbkVkZ2UuamF2YQpAQCAtMCwwICsxLDU5IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA5LDIwMTAgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmVkZ2VzOworCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkVkZ2U7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIEEgcmVwcmVzZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPlBvcHVsYXRpb24gRWRnZTwvYj48L2VtPicuCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqCisgKiA8cD4KKyAqIFRoZSBmb2xsb3dpbmcgZmVhdHVyZXMgYXJlIHN1cHBvcnRlZDoKKyAqIDx1bD4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmVkZ2VzLlBvcHVsYXRpb25FZGdlI2dldFBvcHVsYXRpb25JZGVudGlmaWVyIDxlbT5Qb3B1bGF0aW9uIElkZW50aWZpZXI8L2VtPn08L2xpPgorICogPC91bD4KKyAqIDwvcD4KKyAqCisgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuZWRnZXMuRWRnZXNQYWNrYWdlI2dldFBvcHVsYXRpb25FZGdlKCkKKyAqIEBtb2RlbAorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgaW50ZXJmYWNlIFBvcHVsYXRpb25FZGdlIGV4dGVuZHMgRWRnZSB7CisJLyoqCisJICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+UG9wdWxhdGlvbiBJZGVudGlmaWVyPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogVGhlIGRlZmF1bHQgdmFsdWUgaXMgPGNvZGU+Imh1bWFuIjwvY29kZT4uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8cD4KKwkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5Qb3B1bGF0aW9uIElkZW50aWZpZXI8L2VtPicgYXR0cmlidXRlIGlzbid0IGNsZWFyLAorCSAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4KKwkgKiA8L3A+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+UG9wdWxhdGlvbiBJZGVudGlmaWVyPC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiBAc2VlICNzZXRQb3B1bGF0aW9uSWRlbnRpZmllcihTdHJpbmcpCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmVkZ2VzLkVkZ2VzUGFja2FnZSNnZXRQb3B1bGF0aW9uRWRnZV9Qb3B1bGF0aW9uSWRlbnRpZmllcigpCisJICogQG1vZGVsIGRlZmF1bHQ9Imh1bWFuIgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlTdHJpbmcgZ2V0UG9wdWxhdGlvbklkZW50aWZpZXIoKTsKKworCS8qKgorCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuZWRnZXMuUG9wdWxhdGlvbkVkZ2UjZ2V0UG9wdWxhdGlvbklkZW50aWZpZXIgPGVtPlBvcHVsYXRpb24gSWRlbnRpZmllcjwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+UG9wdWxhdGlvbiBJZGVudGlmaWVyPC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiBAc2VlICNnZXRQb3B1bGF0aW9uSWRlbnRpZmllcigpCisJICogQGdlbmVyYXRlZAorCSAqLworCXZvaWQgc2V0UG9wdWxhdGlvbklkZW50aWZpZXIoU3RyaW5nIHZhbHVlKTsKKworfSAvLyBQb3B1bGF0aW9uRWRnZQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL2VkZ2VzL2ltcGwvRWRnZXNGYWN0b3J5SW1wbC5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL2VkZ2VzL2ltcGwvRWRnZXNGYWN0b3J5SW1wbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMyN2Q5OTYKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvZWRnZXMvaW1wbC9FZGdlc0ZhY3RvcnlJbXBsLmphdmEKQEAgLTAsMCArMSwxNzYgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5lZGdlcy5pbXBsOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3Q7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5pbXBsLkVGYWN0b3J5SW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUucGx1Z2luLkVjb3JlUGx1Z2luOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuZWRnZXMuKjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmVkZ2VzLkVkZ2VzRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmVkZ2VzLkVkZ2VzUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmVkZ2VzLk1pZ3JhdGlvbkVkZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5lZGdlcy5NaWdyYXRpb25FZGdlTGFiZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5lZGdlcy5NaWdyYXRpb25FZGdlTGFiZWxWYWx1ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmVkZ2VzLk1peGluZ0VkZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5lZGdlcy5NaXhpbmdFZGdlTGFiZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5lZGdlcy5NaXhpbmdFZGdlTGFiZWxWYWx1ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmVkZ2VzLlBvcHVsYXRpb25FZGdlOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiBBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgbW9kZWwgPGI+RmFjdG9yeTwvYj4uCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIEVkZ2VzRmFjdG9yeUltcGwgZXh0ZW5kcyBFRmFjdG9yeUltcGwgaW1wbGVtZW50cyBFZGdlc0ZhY3RvcnkgeworCS8qKgorCSAqIENyZWF0ZXMgdGhlIGRlZmF1bHQgZmFjdG9yeSBpbXBsZW1lbnRhdGlvbi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgc3RhdGljIEVkZ2VzRmFjdG9yeSBpbml0KCkgeworCQl0cnkgeworCQkJRWRnZXNGYWN0b3J5IHRoZUVkZ2VzRmFjdG9yeSA9IChFZGdlc0ZhY3RvcnkpRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RUZhY3RvcnkoImh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy9lZGdlcy5lY29yZSIpOyAvLyROT04tTkxTLTEkIAorCQkJaWYgKHRoZUVkZ2VzRmFjdG9yeSAhPSBudWxsKSB7CisJCQkJcmV0dXJuIHRoZUVkZ2VzRmFjdG9yeTsKKwkJCX0KKwkJfQorCQljYXRjaCAoRXhjZXB0aW9uIGV4Y2VwdGlvbikgeworCQkJRWNvcmVQbHVnaW4uSU5TVEFOQ0UubG9nKGV4Y2VwdGlvbik7CisJCX0KKwkJcmV0dXJuIG5ldyBFZGdlc0ZhY3RvcnlJbXBsKCk7CisJfQorCisJLyoqCisJICogQ3JlYXRlcyBhbiBpbnN0YW5jZSBvZiB0aGUgZmFjdG9yeS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRWRnZXNGYWN0b3J5SW1wbCgpIHsKKwkJc3VwZXIoKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgRU9iamVjdCBjcmVhdGUoRUNsYXNzIGVDbGFzcykgeworCQlzd2l0Y2ggKGVDbGFzcy5nZXRDbGFzc2lmaWVySUQoKSkgeworCQkJY2FzZSBFZGdlc1BhY2thZ2UuTUlHUkFUSU9OX0VER0U6IHJldHVybiBjcmVhdGVNaWdyYXRpb25FZGdlKCk7CisJCQljYXNlIEVkZ2VzUGFja2FnZS5NSUdSQVRJT05fRURHRV9MQUJFTDogcmV0dXJuIGNyZWF0ZU1pZ3JhdGlvbkVkZ2VMYWJlbCgpOworCQkJY2FzZSBFZGdlc1BhY2thZ2UuTUlHUkFUSU9OX0VER0VfTEFCRUxfVkFMVUU6IHJldHVybiBjcmVhdGVNaWdyYXRpb25FZGdlTGFiZWxWYWx1ZSgpOworCQkJY2FzZSBFZGdlc1BhY2thZ2UuTUlYSU5HX0VER0U6IHJldHVybiBjcmVhdGVNaXhpbmdFZGdlKCk7CisJCQljYXNlIEVkZ2VzUGFja2FnZS5NSVhJTkdfRURHRV9MQUJFTDogcmV0dXJuIGNyZWF0ZU1peGluZ0VkZ2VMYWJlbCgpOworCQkJY2FzZSBFZGdlc1BhY2thZ2UuTUlYSU5HX0VER0VfTEFCRUxfVkFMVUU6IHJldHVybiBjcmVhdGVNaXhpbmdFZGdlTGFiZWxWYWx1ZSgpOworCQkJY2FzZSBFZGdlc1BhY2thZ2UuUE9QVUxBVElPTl9FREdFOiByZXR1cm4gY3JlYXRlUG9wdWxhdGlvbkVkZ2UoKTsKKwkJCWRlZmF1bHQ6CisJCQkJdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiVGhlIGNsYXNzICciICsgZUNsYXNzLmdldE5hbWUoKSArICInIGlzIG5vdCBhIHZhbGlkIGNsYXNzaWZpZXIiKTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCisJCX0KKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgTWlncmF0aW9uRWRnZSBjcmVhdGVNaWdyYXRpb25FZGdlKCkgeworCQlNaWdyYXRpb25FZGdlSW1wbCBtaWdyYXRpb25FZGdlID0gbmV3IE1pZ3JhdGlvbkVkZ2VJbXBsKCk7CisJCXJldHVybiBtaWdyYXRpb25FZGdlOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBNaWdyYXRpb25FZGdlTGFiZWwgY3JlYXRlTWlncmF0aW9uRWRnZUxhYmVsKCkgeworCQlNaWdyYXRpb25FZGdlTGFiZWxJbXBsIG1pZ3JhdGlvbkVkZ2VMYWJlbCA9IG5ldyBNaWdyYXRpb25FZGdlTGFiZWxJbXBsKCk7CisJCXJldHVybiBtaWdyYXRpb25FZGdlTGFiZWw7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIE1pZ3JhdGlvbkVkZ2VMYWJlbFZhbHVlIGNyZWF0ZU1pZ3JhdGlvbkVkZ2VMYWJlbFZhbHVlKCkgeworCQlNaWdyYXRpb25FZGdlTGFiZWxWYWx1ZUltcGwgbWlncmF0aW9uRWRnZUxhYmVsVmFsdWUgPSBuZXcgTWlncmF0aW9uRWRnZUxhYmVsVmFsdWVJbXBsKCk7CisJCXJldHVybiBtaWdyYXRpb25FZGdlTGFiZWxWYWx1ZTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgTWl4aW5nRWRnZSBjcmVhdGVNaXhpbmdFZGdlKCkgeworCQlNaXhpbmdFZGdlSW1wbCBtaXhpbmdFZGdlID0gbmV3IE1peGluZ0VkZ2VJbXBsKCk7CisJCXJldHVybiBtaXhpbmdFZGdlOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBNaXhpbmdFZGdlTGFiZWwgY3JlYXRlTWl4aW5nRWRnZUxhYmVsKCkgeworCQlNaXhpbmdFZGdlTGFiZWxJbXBsIG1peGluZ0VkZ2VMYWJlbCA9IG5ldyBNaXhpbmdFZGdlTGFiZWxJbXBsKCk7CisJCXJldHVybiBtaXhpbmdFZGdlTGFiZWw7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIE1peGluZ0VkZ2VMYWJlbFZhbHVlIGNyZWF0ZU1peGluZ0VkZ2VMYWJlbFZhbHVlKCkgeworCQlNaXhpbmdFZGdlTGFiZWxWYWx1ZUltcGwgbWl4aW5nRWRnZUxhYmVsVmFsdWUgPSBuZXcgTWl4aW5nRWRnZUxhYmVsVmFsdWVJbXBsKCk7CisJCXJldHVybiBtaXhpbmdFZGdlTGFiZWxWYWx1ZTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgUG9wdWxhdGlvbkVkZ2UgY3JlYXRlUG9wdWxhdGlvbkVkZ2UoKSB7CisJCVBvcHVsYXRpb25FZGdlSW1wbCBwb3B1bGF0aW9uRWRnZSA9IG5ldyBQb3B1bGF0aW9uRWRnZUltcGwoKTsKKwkJcmV0dXJuIHBvcHVsYXRpb25FZGdlOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFZGdlc1BhY2thZ2UgZ2V0RWRnZXNQYWNrYWdlKCkgeworCQlyZXR1cm4gKEVkZ2VzUGFja2FnZSlnZXRFUGFja2FnZSgpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGRlcHJlY2F0ZWQKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQERlcHJlY2F0ZWQKKwlwdWJsaWMgc3RhdGljIEVkZ2VzUGFja2FnZSBnZXRQYWNrYWdlKCkgeworCQlyZXR1cm4gRWRnZXNQYWNrYWdlLmVJTlNUQU5DRTsKKwl9CisKK30gLy9FZGdlc0ZhY3RvcnlJbXBsCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvZWRnZXMvaW1wbC9FZGdlc1BhY2thZ2VJbXBsLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvZWRnZXMvaW1wbC9FZGdlc1BhY2thZ2VJbXBsLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTQxNmUwMAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy9lZGdlcy9pbXBsL0VkZ2VzUGFja2FnZUltcGwuamF2YQpAQCAtMCwwICsxLDM4MCBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmVkZ2VzLmltcGw7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVBdHRyaWJ1dGU7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzczsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRVBhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVjb3JlUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuaW1wbC5FUGFja2FnZUltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5Db21tb25QYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5HcmFwaFBhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLk1vZGVsUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuTW9kaWZpZXJQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zY2VuYXJpby5TY2VuYXJpb1BhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNlcXVlbmNlci5TZXF1ZW5jZXJQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zb2x2ZXIuU29sdmVyUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmVkZ2VzLkVkZ2VzRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmVkZ2VzLkVkZ2VzUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmVkZ2VzLk1pZ3JhdGlvbkVkZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5lZGdlcy5NaWdyYXRpb25FZGdlTGFiZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5lZGdlcy5NaWdyYXRpb25FZGdlTGFiZWxWYWx1ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmVkZ2VzLk1peGluZ0VkZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5lZGdlcy5NaXhpbmdFZGdlTGFiZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5lZGdlcy5NaXhpbmdFZGdlTGFiZWxWYWx1ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmVkZ2VzLlBvcHVsYXRpb25FZGdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLkxhYmVsc1BhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuaW1wbC5MYWJlbHNQYWNrYWdlSW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLm5vZGVzLk5vZGVzUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLm5vZGVzLmltcGwuTm9kZXNQYWNrYWdlSW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLnR5cGVzLlR5cGVzUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLnR5cGVzLmltcGwuVHlwZXNQYWNrYWdlSW1wbDsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIG1vZGVsIDxiPlBhY2thZ2U8L2I+LgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBFZGdlc1BhY2thZ2VJbXBsIGV4dGVuZHMgRVBhY2thZ2VJbXBsIGltcGxlbWVudHMgRWRnZXNQYWNrYWdlIHsKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcml2YXRlIEVDbGFzcyBtaWdyYXRpb25FZGdlRUNsYXNzID0gbnVsbDsKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByaXZhdGUgRUNsYXNzIG1pZ3JhdGlvbkVkZ2VMYWJlbEVDbGFzcyA9IG51bGw7CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcml2YXRlIEVDbGFzcyBtaWdyYXRpb25FZGdlTGFiZWxWYWx1ZUVDbGFzcyA9IG51bGw7CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcml2YXRlIEVDbGFzcyBtaXhpbmdFZGdlRUNsYXNzID0gbnVsbDsKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByaXZhdGUgRUNsYXNzIG1peGluZ0VkZ2VMYWJlbEVDbGFzcyA9IG51bGw7CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcml2YXRlIEVDbGFzcyBtaXhpbmdFZGdlTGFiZWxWYWx1ZUVDbGFzcyA9IG51bGw7CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcml2YXRlIEVDbGFzcyBwb3B1bGF0aW9uRWRnZUVDbGFzcyA9IG51bGw7CisKKwkvKioKKwkgKiBDcmVhdGVzIGFuIGluc3RhbmNlIG9mIHRoZSBtb2RlbCA8Yj5QYWNrYWdlPC9iPiwgcmVnaXN0ZXJlZCB3aXRoCisJICoge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FUGFja2FnZS5SZWdpc3RyeSBFUGFja2FnZS5SZWdpc3RyeX0gYnkgdGhlIHBhY2thZ2UKKwkgKiBwYWNrYWdlIFVSSSB2YWx1ZS4KKwkgKiA8cD5Ob3RlOiB0aGUgY29ycmVjdCB3YXkgdG8gY3JlYXRlIHRoZSBwYWNrYWdlIGlzIHZpYSB0aGUgc3RhdGljCisJICogZmFjdG9yeSBtZXRob2Qge0BsaW5rICNpbml0IGluaXQoKX0sIHdoaWNoIGFsc28gcGVyZm9ybXMKKwkgKiBpbml0aWFsaXphdGlvbiBvZiB0aGUgcGFja2FnZSwgb3IgcmV0dXJucyB0aGUgcmVnaXN0ZXJlZCBwYWNrYWdlLAorCSAqIGlmIG9uZSBhbHJlYWR5IGV4aXN0cy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVQYWNrYWdlLlJlZ2lzdHJ5CisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmVkZ2VzLkVkZ2VzUGFja2FnZSNlTlNfVVJJCisJICogQHNlZSAjaW5pdCgpCisJICogQGdlbmVyYXRlZAorCSAqLworCXByaXZhdGUgRWRnZXNQYWNrYWdlSW1wbCgpIHsKKwkJc3VwZXIoZU5TX1VSSSwgRWRnZXNGYWN0b3J5LmVJTlNUQU5DRSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJpdmF0ZSBzdGF0aWMgYm9vbGVhbiBpc0luaXRlZCA9IGZhbHNlOworCisJLyoqCisJICogQ3JlYXRlcywgcmVnaXN0ZXJzLCBhbmQgaW5pdGlhbGl6ZXMgdGhlIDxiPlBhY2thZ2U8L2I+IGZvciB0aGlzIG1vZGVsLCBhbmQgZm9yIGFueSBvdGhlcnMgdXBvbiB3aGljaCBpdCBkZXBlbmRzLgorCSAqIAorCSAqIDxwPlRoaXMgbWV0aG9kIGlzIHVzZWQgdG8gaW5pdGlhbGl6ZSB7QGxpbmsgRWRnZXNQYWNrYWdlI2VJTlNUQU5DRX0gd2hlbiB0aGF0IGZpZWxkIGlzIGFjY2Vzc2VkLgorCSAqIENsaWVudHMgc2hvdWxkIG5vdCBpbnZva2UgaXQgZGlyZWN0bHkuIEluc3RlYWQsIHRoZXkgc2hvdWxkIHNpbXBseSBhY2Nlc3MgdGhhdCBmaWVsZCB0byBvYnRhaW4gdGhlIHBhY2thZ2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNlTlNfVVJJCisJICogQHNlZSAjY3JlYXRlUGFja2FnZUNvbnRlbnRzKCkKKwkgKiBAc2VlICNpbml0aWFsaXplUGFja2FnZUNvbnRlbnRzKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHN0YXRpYyBFZGdlc1BhY2thZ2UgaW5pdCgpIHsKKwkJaWYgKGlzSW5pdGVkKSByZXR1cm4gKEVkZ2VzUGFja2FnZSlFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShFZGdlc1BhY2thZ2UuZU5TX1VSSSk7CisKKwkJLy8gT2J0YWluIG9yIGNyZWF0ZSBhbmQgcmVnaXN0ZXIgcGFja2FnZQorCQlFZGdlc1BhY2thZ2VJbXBsIHRoZUVkZ2VzUGFja2FnZSA9IChFZGdlc1BhY2thZ2VJbXBsKShFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXQoZU5TX1VSSSkgaW5zdGFuY2VvZiBFZGdlc1BhY2thZ2VJbXBsID8gRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0KGVOU19VUkkpIDogbmV3IEVkZ2VzUGFja2FnZUltcGwoKSk7CisKKwkJaXNJbml0ZWQgPSB0cnVlOworCisJCS8vIEluaXRpYWxpemUgc2ltcGxlIGRlcGVuZGVuY2llcworCQlHcmFwaFBhY2thZ2UuZUlOU1RBTkNFLmVDbGFzcygpOworCQlDb21tb25QYWNrYWdlLmVJTlNUQU5DRS5lQ2xhc3MoKTsKKwkJTW9kZWxQYWNrYWdlLmVJTlNUQU5DRS5lQ2xhc3MoKTsKKwkJTW9kaWZpZXJQYWNrYWdlLmVJTlNUQU5DRS5lQ2xhc3MoKTsKKwkJU2NlbmFyaW9QYWNrYWdlLmVJTlNUQU5DRS5lQ2xhc3MoKTsKKwkJU2VxdWVuY2VyUGFja2FnZS5lSU5TVEFOQ0UuZUNsYXNzKCk7CisJCVNvbHZlclBhY2thZ2UuZUlOU1RBTkNFLmVDbGFzcygpOworCisJCS8vIE9idGFpbiBvciBjcmVhdGUgYW5kIHJlZ2lzdGVyIGludGVyZGVwZW5kZW5jaWVzCisJCUxhYmVsc1BhY2thZ2VJbXBsIHRoZUxhYmVsc1BhY2thZ2UgPSAoTGFiZWxzUGFja2FnZUltcGwpKEVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVQYWNrYWdlKExhYmVsc1BhY2thZ2UuZU5TX1VSSSkgaW5zdGFuY2VvZiBMYWJlbHNQYWNrYWdlSW1wbCA/IEVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVQYWNrYWdlKExhYmVsc1BhY2thZ2UuZU5TX1VSSSkgOiBMYWJlbHNQYWNrYWdlLmVJTlNUQU5DRSk7CisJCU5vZGVzUGFja2FnZUltcGwgdGhlTm9kZXNQYWNrYWdlID0gKE5vZGVzUGFja2FnZUltcGwpKEVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVQYWNrYWdlKE5vZGVzUGFja2FnZS5lTlNfVVJJKSBpbnN0YW5jZW9mIE5vZGVzUGFja2FnZUltcGwgPyBFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShOb2Rlc1BhY2thZ2UuZU5TX1VSSSkgOiBOb2Rlc1BhY2thZ2UuZUlOU1RBTkNFKTsKKwkJVHlwZXNQYWNrYWdlSW1wbCB0aGVUeXBlc1BhY2thZ2UgPSAoVHlwZXNQYWNrYWdlSW1wbCkoRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RVBhY2thZ2UoVHlwZXNQYWNrYWdlLmVOU19VUkkpIGluc3RhbmNlb2YgVHlwZXNQYWNrYWdlSW1wbCA/IEVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVQYWNrYWdlKFR5cGVzUGFja2FnZS5lTlNfVVJJKSA6IFR5cGVzUGFja2FnZS5lSU5TVEFOQ0UpOworCisJCS8vIENyZWF0ZSBwYWNrYWdlIG1ldGEtZGF0YSBvYmplY3RzCisJCXRoZUVkZ2VzUGFja2FnZS5jcmVhdGVQYWNrYWdlQ29udGVudHMoKTsKKwkJdGhlTGFiZWxzUGFja2FnZS5jcmVhdGVQYWNrYWdlQ29udGVudHMoKTsKKwkJdGhlTm9kZXNQYWNrYWdlLmNyZWF0ZVBhY2thZ2VDb250ZW50cygpOworCQl0aGVUeXBlc1BhY2thZ2UuY3JlYXRlUGFja2FnZUNvbnRlbnRzKCk7CisKKwkJLy8gSW5pdGlhbGl6ZSBjcmVhdGVkIG1ldGEtZGF0YQorCQl0aGVFZGdlc1BhY2thZ2UuaW5pdGlhbGl6ZVBhY2thZ2VDb250ZW50cygpOworCQl0aGVMYWJlbHNQYWNrYWdlLmluaXRpYWxpemVQYWNrYWdlQ29udGVudHMoKTsKKwkJdGhlTm9kZXNQYWNrYWdlLmluaXRpYWxpemVQYWNrYWdlQ29udGVudHMoKTsKKwkJdGhlVHlwZXNQYWNrYWdlLmluaXRpYWxpemVQYWNrYWdlQ29udGVudHMoKTsKKworCQkvLyBNYXJrIG1ldGEtZGF0YSB0byBpbmRpY2F0ZSBpdCBjYW4ndCBiZSBjaGFuZ2VkCisJCXRoZUVkZ2VzUGFja2FnZS5mcmVlemUoKTsKKworICAKKwkJLy8gVXBkYXRlIHRoZSByZWdpc3RyeSBhbmQgcmV0dXJuIHRoZSBwYWNrYWdlCisJCUVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLnB1dChFZGdlc1BhY2thZ2UuZU5TX1VSSSwgdGhlRWRnZXNQYWNrYWdlKTsKKwkJcmV0dXJuIHRoZUVkZ2VzUGFja2FnZTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUNsYXNzIGdldE1pZ3JhdGlvbkVkZ2UoKSB7CisJCXJldHVybiBtaWdyYXRpb25FZGdlRUNsYXNzOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQ2xhc3MgZ2V0TWlncmF0aW9uRWRnZUxhYmVsKCkgeworCQlyZXR1cm4gbWlncmF0aW9uRWRnZUxhYmVsRUNsYXNzOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQ2xhc3MgZ2V0TWlncmF0aW9uRWRnZUxhYmVsVmFsdWUoKSB7CisJCXJldHVybiBtaWdyYXRpb25FZGdlTGFiZWxWYWx1ZUVDbGFzczsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUF0dHJpYnV0ZSBnZXRNaWdyYXRpb25FZGdlTGFiZWxWYWx1ZV9NaWdyYXRpb25SYXRlKCkgeworCQlyZXR1cm4gKEVBdHRyaWJ1dGUpbWlncmF0aW9uRWRnZUxhYmVsVmFsdWVFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgwKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUNsYXNzIGdldE1peGluZ0VkZ2UoKSB7CisJCXJldHVybiBtaXhpbmdFZGdlRUNsYXNzOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQ2xhc3MgZ2V0TWl4aW5nRWRnZUxhYmVsKCkgeworCQlyZXR1cm4gbWl4aW5nRWRnZUxhYmVsRUNsYXNzOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQ2xhc3MgZ2V0TWl4aW5nRWRnZUxhYmVsVmFsdWUoKSB7CisJCXJldHVybiBtaXhpbmdFZGdlTGFiZWxWYWx1ZUVDbGFzczsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUF0dHJpYnV0ZSBnZXRNaXhpbmdFZGdlTGFiZWxWYWx1ZV9NaXhpbmdSYXRlKCkgeworCQlyZXR1cm4gKEVBdHRyaWJ1dGUpbWl4aW5nRWRnZUxhYmVsVmFsdWVFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgwKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUNsYXNzIGdldFBvcHVsYXRpb25FZGdlKCkgeworCQlyZXR1cm4gcG9wdWxhdGlvbkVkZ2VFQ2xhc3M7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVBdHRyaWJ1dGUgZ2V0UG9wdWxhdGlvbkVkZ2VfUG9wdWxhdGlvbklkZW50aWZpZXIoKSB7CisJCXJldHVybiAoRUF0dHJpYnV0ZSlwb3B1bGF0aW9uRWRnZUVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDApOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFZGdlc0ZhY3RvcnkgZ2V0RWRnZXNGYWN0b3J5KCkgeworCQlyZXR1cm4gKEVkZ2VzRmFjdG9yeSlnZXRFRmFjdG9yeUluc3RhbmNlKCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJpdmF0ZSBib29sZWFuIGlzQ3JlYXRlZCA9IGZhbHNlOworCisJLyoqCisJICogQ3JlYXRlcyB0aGUgbWV0YS1tb2RlbCBvYmplY3RzIGZvciB0aGUgcGFja2FnZS4gIFRoaXMgbWV0aG9kIGlzCisJICogZ3VhcmRlZCB0byBoYXZlIG5vIGFmZmVjdCBvbiBhbnkgaW52b2NhdGlvbiBidXQgaXRzIGZpcnN0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIGNyZWF0ZVBhY2thZ2VDb250ZW50cygpIHsKKwkJaWYgKGlzQ3JlYXRlZCkgcmV0dXJuOworCQlpc0NyZWF0ZWQgPSB0cnVlOworCisJCS8vIENyZWF0ZSBjbGFzc2VzIGFuZCB0aGVpciBmZWF0dXJlcworCQltaWdyYXRpb25FZGdlRUNsYXNzID0gY3JlYXRlRUNsYXNzKE1JR1JBVElPTl9FREdFKTsKKworCQltaWdyYXRpb25FZGdlTGFiZWxFQ2xhc3MgPSBjcmVhdGVFQ2xhc3MoTUlHUkFUSU9OX0VER0VfTEFCRUwpOworCisJCW1pZ3JhdGlvbkVkZ2VMYWJlbFZhbHVlRUNsYXNzID0gY3JlYXRlRUNsYXNzKE1JR1JBVElPTl9FREdFX0xBQkVMX1ZBTFVFKTsKKwkJY3JlYXRlRUF0dHJpYnV0ZShtaWdyYXRpb25FZGdlTGFiZWxWYWx1ZUVDbGFzcywgTUlHUkFUSU9OX0VER0VfTEFCRUxfVkFMVUVfX01JR1JBVElPTl9SQVRFKTsKKworCQltaXhpbmdFZGdlRUNsYXNzID0gY3JlYXRlRUNsYXNzKE1JWElOR19FREdFKTsKKworCQltaXhpbmdFZGdlTGFiZWxFQ2xhc3MgPSBjcmVhdGVFQ2xhc3MoTUlYSU5HX0VER0VfTEFCRUwpOworCisJCW1peGluZ0VkZ2VMYWJlbFZhbHVlRUNsYXNzID0gY3JlYXRlRUNsYXNzKE1JWElOR19FREdFX0xBQkVMX1ZBTFVFKTsKKwkJY3JlYXRlRUF0dHJpYnV0ZShtaXhpbmdFZGdlTGFiZWxWYWx1ZUVDbGFzcywgTUlYSU5HX0VER0VfTEFCRUxfVkFMVUVfX01JWElOR19SQVRFKTsKKworCQlwb3B1bGF0aW9uRWRnZUVDbGFzcyA9IGNyZWF0ZUVDbGFzcyhQT1BVTEFUSU9OX0VER0UpOworCQljcmVhdGVFQXR0cmlidXRlKHBvcHVsYXRpb25FZGdlRUNsYXNzLCBQT1BVTEFUSU9OX0VER0VfX1BPUFVMQVRJT05fSURFTlRJRklFUik7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJpdmF0ZSBib29sZWFuIGlzSW5pdGlhbGl6ZWQgPSBmYWxzZTsKKworCS8qKgorCSAqIENvbXBsZXRlIHRoZSBpbml0aWFsaXphdGlvbiBvZiB0aGUgcGFja2FnZSBhbmQgaXRzIG1ldGEtbW9kZWwuICBUaGlzCisJICogbWV0aG9kIGlzIGd1YXJkZWQgdG8gaGF2ZSBubyBhZmZlY3Qgb24gYW55IGludm9jYXRpb24gYnV0IGl0cyBmaXJzdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBpbml0aWFsaXplUGFja2FnZUNvbnRlbnRzKCkgeworCQlpZiAoaXNJbml0aWFsaXplZCkgcmV0dXJuOworCQlpc0luaXRpYWxpemVkID0gdHJ1ZTsKKworCQkvLyBJbml0aWFsaXplIHBhY2thZ2UKKwkJc2V0TmFtZShlTkFNRSk7CisJCXNldE5zUHJlZml4KGVOU19QUkVGSVgpOworCQlzZXROc1VSSShlTlNfVVJJKTsKKworCQkvLyBPYnRhaW4gb3RoZXIgZGVwZW5kZW50IHBhY2thZ2VzCisJCUdyYXBoUGFja2FnZSB0aGVHcmFwaFBhY2thZ2UgPSAoR3JhcGhQYWNrYWdlKUVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVQYWNrYWdlKEdyYXBoUGFja2FnZS5lTlNfVVJJKTsKKwkJTW9kaWZpZXJQYWNrYWdlIHRoZU1vZGlmaWVyUGFja2FnZSA9IChNb2RpZmllclBhY2thZ2UpRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RVBhY2thZ2UoTW9kaWZpZXJQYWNrYWdlLmVOU19VUkkpOworCQlFY29yZVBhY2thZ2UgdGhlRWNvcmVQYWNrYWdlID0gKEVjb3JlUGFja2FnZSlFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShFY29yZVBhY2thZ2UuZU5TX1VSSSk7CisKKwkJLy8gQ3JlYXRlIHR5cGUgcGFyYW1ldGVycworCisJCS8vIFNldCBib3VuZHMgZm9yIHR5cGUgcGFyYW1ldGVycworCisJCS8vIEFkZCBzdXBlcnR5cGVzIHRvIGNsYXNzZXMKKwkJbWlncmF0aW9uRWRnZUVDbGFzcy5nZXRFU3VwZXJUeXBlcygpLmFkZCh0aGlzLmdldFBvcHVsYXRpb25FZGdlKCkpOworCQltaWdyYXRpb25FZGdlTGFiZWxFQ2xhc3MuZ2V0RVN1cGVyVHlwZXMoKS5hZGQodGhlR3JhcGhQYWNrYWdlLmdldEVkZ2VMYWJlbCgpKTsKKwkJbWlncmF0aW9uRWRnZUxhYmVsRUNsYXNzLmdldEVTdXBlclR5cGVzKCkuYWRkKHRoZU1vZGlmaWVyUGFja2FnZS5nZXRNb2RpZmlhYmxlKCkpOworCQltaWdyYXRpb25FZGdlTGFiZWxWYWx1ZUVDbGFzcy5nZXRFU3VwZXJUeXBlcygpLmFkZCh0aGVHcmFwaFBhY2thZ2UuZ2V0TGFiZWxWYWx1ZSgpKTsKKwkJbWl4aW5nRWRnZUVDbGFzcy5nZXRFU3VwZXJUeXBlcygpLmFkZCh0aGlzLmdldFBvcHVsYXRpb25FZGdlKCkpOworCQltaXhpbmdFZGdlTGFiZWxFQ2xhc3MuZ2V0RVN1cGVyVHlwZXMoKS5hZGQodGhlR3JhcGhQYWNrYWdlLmdldEVkZ2VMYWJlbCgpKTsKKwkJbWl4aW5nRWRnZUxhYmVsRUNsYXNzLmdldEVTdXBlclR5cGVzKCkuYWRkKHRoZU1vZGlmaWVyUGFja2FnZS5nZXRNb2RpZmlhYmxlKCkpOworCQltaXhpbmdFZGdlTGFiZWxWYWx1ZUVDbGFzcy5nZXRFU3VwZXJUeXBlcygpLmFkZCh0aGVHcmFwaFBhY2thZ2UuZ2V0TGFiZWxWYWx1ZSgpKTsKKwkJcG9wdWxhdGlvbkVkZ2VFQ2xhc3MuZ2V0RVN1cGVyVHlwZXMoKS5hZGQodGhlR3JhcGhQYWNrYWdlLmdldEVkZ2UoKSk7CisKKwkJLy8gSW5pdGlhbGl6ZSBjbGFzc2VzIGFuZCBmZWF0dXJlczsgYWRkIG9wZXJhdGlvbnMgYW5kIHBhcmFtZXRlcnMKKwkJaW5pdEVDbGFzcyhtaWdyYXRpb25FZGdlRUNsYXNzLCBNaWdyYXRpb25FZGdlLmNsYXNzLCAiTWlncmF0aW9uRWRnZSIsICFJU19BQlNUUkFDVCwgIUlTX0lOVEVSRkFDRSwgSVNfR0VORVJBVEVEX0lOU1RBTkNFX0NMQVNTKTsgLy8kTk9OLU5MUy0xJAorCisJCWluaXRFQ2xhc3MobWlncmF0aW9uRWRnZUxhYmVsRUNsYXNzLCBNaWdyYXRpb25FZGdlTGFiZWwuY2xhc3MsICJNaWdyYXRpb25FZGdlTGFiZWwiLCAhSVNfQUJTVFJBQ1QsICFJU19JTlRFUkZBQ0UsIElTX0dFTkVSQVRFRF9JTlNUQU5DRV9DTEFTUyk7IC8vJE5PTi1OTFMtMSQKKworCQlpbml0RUNsYXNzKG1pZ3JhdGlvbkVkZ2VMYWJlbFZhbHVlRUNsYXNzLCBNaWdyYXRpb25FZGdlTGFiZWxWYWx1ZS5jbGFzcywgIk1pZ3JhdGlvbkVkZ2VMYWJlbFZhbHVlIiwgIUlTX0FCU1RSQUNULCAhSVNfSU5URVJGQUNFLCBJU19HRU5FUkFURURfSU5TVEFOQ0VfQ0xBU1MpOyAvLyROT04tTkxTLTEkCisJCWluaXRFQXR0cmlidXRlKGdldE1pZ3JhdGlvbkVkZ2VMYWJlbFZhbHVlX01pZ3JhdGlvblJhdGUoKSwgZWNvcmVQYWNrYWdlLmdldEVEb3VibGUoKSwgIm1pZ3JhdGlvblJhdGUiLCAiMC4wIiwgMCwgMSwgTWlncmF0aW9uRWRnZUxhYmVsVmFsdWUuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAorCisJCWluaXRFQ2xhc3MobWl4aW5nRWRnZUVDbGFzcywgTWl4aW5nRWRnZS5jbGFzcywgIk1peGluZ0VkZ2UiLCAhSVNfQUJTVFJBQ1QsICFJU19JTlRFUkZBQ0UsIElTX0dFTkVSQVRFRF9JTlNUQU5DRV9DTEFTUyk7IC8vJE5PTi1OTFMtMSQKKworCQlpbml0RUNsYXNzKG1peGluZ0VkZ2VMYWJlbEVDbGFzcywgTWl4aW5nRWRnZUxhYmVsLmNsYXNzLCAiTWl4aW5nRWRnZUxhYmVsIiwgIUlTX0FCU1RSQUNULCAhSVNfSU5URVJGQUNFLCBJU19HRU5FUkFURURfSU5TVEFOQ0VfQ0xBU1MpOyAvLyROT04tTkxTLTEkCisKKwkJaW5pdEVDbGFzcyhtaXhpbmdFZGdlTGFiZWxWYWx1ZUVDbGFzcywgTWl4aW5nRWRnZUxhYmVsVmFsdWUuY2xhc3MsICJNaXhpbmdFZGdlTGFiZWxWYWx1ZSIsICFJU19BQlNUUkFDVCwgIUlTX0lOVEVSRkFDRSwgSVNfR0VORVJBVEVEX0lOU1RBTkNFX0NMQVNTKTsgLy8kTk9OLU5MUy0xJAorCQlpbml0RUF0dHJpYnV0ZShnZXRNaXhpbmdFZGdlTGFiZWxWYWx1ZV9NaXhpbmdSYXRlKCksIGVjb3JlUGFja2FnZS5nZXRFRG91YmxlKCksICJtaXhpbmdSYXRlIiwgbnVsbCwgMCwgMSwgTWl4aW5nRWRnZUxhYmVsVmFsdWUuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7IC8vJE5PTi1OTFMtMSQKKworCQlpbml0RUNsYXNzKHBvcHVsYXRpb25FZGdlRUNsYXNzLCBQb3B1bGF0aW9uRWRnZS5jbGFzcywgIlBvcHVsYXRpb25FZGdlIiwgIUlTX0FCU1RSQUNULCAhSVNfSU5URVJGQUNFLCBJU19HRU5FUkFURURfSU5TVEFOQ0VfQ0xBU1MpOyAvLyROT04tTkxTLTEkCisJCWluaXRFQXR0cmlidXRlKGdldFBvcHVsYXRpb25FZGdlX1BvcHVsYXRpb25JZGVudGlmaWVyKCksIHRoZUVjb3JlUGFja2FnZS5nZXRFU3RyaW5nKCksICJwb3B1bGF0aW9uSWRlbnRpZmllciIsICJodW1hbiIsIDAsIDEsIFBvcHVsYXRpb25FZGdlLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKKworCQkvLyBDcmVhdGUgcmVzb3VyY2UKKwkJY3JlYXRlUmVzb3VyY2UoZU5TX1VSSSk7CisJfQorCit9IC8vRWRnZXNQYWNrYWdlSW1wbApkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL2VkZ2VzL2ltcGwvTWlncmF0aW9uRWRnZUltcGwuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy9lZGdlcy9pbXBsL01pZ3JhdGlvbkVkZ2VJbXBsLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGU0MmRkOAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy9lZGdlcy9pbXBsL01pZ3JhdGlvbkVkZ2VJbXBsLmphdmEKQEAgLTAsMCArMSw5MyBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmVkZ2VzLmltcGw7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzczsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuU1RFTVVSSTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmVkZ2VzLkVkZ2VzRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmVkZ2VzLkVkZ2VzUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmVkZ2VzLk1pZ3JhdGlvbkVkZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5lZGdlcy5NaWdyYXRpb25FZGdlTGFiZWw7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIEFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5NaWdyYXRpb24gRWRnZTwvYj48L2VtPicuCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIDxwPgorICogPC9wPgorICoKKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIE1pZ3JhdGlvbkVkZ2VJbXBsIGV4dGVuZHMgUG9wdWxhdGlvbkVkZ2VJbXBsIGltcGxlbWVudHMgTWlncmF0aW9uRWRnZSB7CisJCisJLyoqCisJICogVGhpcyBpcyB1c2VkIHRvIGdlbmVyYXRlIHVuaXF1ZSBVUkkncyBmb3IgZWFjaCBNaWdyYXRpb25FZGdlIGdlbmVyYXRlZAorCSAqLworCXN0YXRpYyBpbnQgbWlncmF0aW9uRWRnZUNvdW50ZXIgPSAwOworCQorCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlwcm90ZWN0ZWQgTWlncmF0aW9uRWRnZUltcGwoKSB7CisJCXN1cGVyKCk7CisJCQorCQkvL3NldCB0aGUgVVJJCisJCXNldFVSSShTVEVNVVJJLmNyZWF0ZVVSSShVUklfVFlQRV9NSUdSQVRJT05fRURHRV9TRUdNRU5UICsgIi8iCisJCQkJKyBJbnRlZ2VyLnRvU3RyaW5nKG1pZ3JhdGlvbkVkZ2VDb3VudGVyKyspKSk7CisJCQorCQkvL01ha2UgYSBsYWJlbAorCQlzZXRMYWJlbChFZGdlc0ZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZU1pZ3JhdGlvbkVkZ2VMYWJlbCgpKTsJCQkJCisJCQorCQkvL3RoaXMgZWRnZSBtdXN0IGJlIGRpcmVjdGVkCisJCXNldERpcmVjdGVkKHRydWUpOworCQkKKwl9CisJCisJCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIEVDbGFzcyBlU3RhdGljQ2xhc3MoKSB7CisJCXJldHVybiBFZGdlc1BhY2thZ2UuTGl0ZXJhbHMuTUlHUkFUSU9OX0VER0U7CisJfQorCQorCS8qKioKKwkgKiBPdmVycmlkZSBzZXR0ZXIgZm9yIHNldERpcmVjdGVkIHNvIHRoYXQgaXQgd2lsbCBibG93IHVwIGlmIGFueW9uZSB0cmllcyB0byBtYWtlIGl0IGRpcmVjdGVkICh3aGVuIGFzc2VydGlvbnMgYXJlIG9uKS4KKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBzZXREaXJlY3RlZChib29sZWFuIGlzRGlyZWN0ZWQpIHsKKwkJYXNzZXJ0KGlzRGlyZWN0ZWQ9PXRydWUpOworCQlzdXBlci5zZXREaXJlY3RlZChpc0RpcmVjdGVkKTsKKwl9CisJCisJCisJLyoqT3ZlcnJpZGUgdG8gbWFrZSBnZXRFZGdlIHJldHVybiB0aGUgCisJICogY29ycmVjdCB0eXBlLiovCisJQE92ZXJyaWRlCisJcHVibGljIE1pZ3JhdGlvbkVkZ2VMYWJlbCBnZXRMYWJlbCgpIHsKKwkJcmV0dXJuIChNaWdyYXRpb25FZGdlTGFiZWwpc3VwZXIuZ2V0TGFiZWwoKTsJCisJfQorCisJcHVibGljIHZvaWQgc2V0TGFiZWwoTWlncmF0aW9uRWRnZUxhYmVsIGxibCkgeworCQkvL2p1c3QgZGVhbCB3aXRoIG1ha2luZyBzdXJlIHRoZSBVUkkgbGFiZWxpbmcgc2NoZW1lIGlzIGNvcnJlY3QgaGVyZS4KKwkJbGJsLnNldFVSSU9mSWRlbnRpZmlhYmxlVG9CZUxhYmVsZWQodGhpcy5nZXRVUkkoKSk7CisJCQorCQlzdXBlci5zZXRMYWJlbChsYmwpOworCX0KKwkKKwkKK30gLy9NaWdyYXRpb25FZGdlSW1wbApkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL2VkZ2VzL2ltcGwvTWlncmF0aW9uRWRnZUxhYmVsSW1wbC5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL2VkZ2VzL2ltcGwvTWlncmF0aW9uRWRnZUxhYmVsSW1wbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVmY2QzYWIKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvZWRnZXMvaW1wbC9NaWdyYXRpb25FZGdlTGFiZWxJbXBsLmphdmEKQEAgLTAsMCArMSw5NCBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmVkZ2VzLmltcGw7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5FZGdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5FZGdlTGFiZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLk5vZGU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmltcGwuRWRnZUxhYmVsSW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmVkZ2VzLkVkZ2VzRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmVkZ2VzLkVkZ2VzUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmVkZ2VzLk1pZ3JhdGlvbkVkZ2VMYWJlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmVkZ2VzLk1pZ3JhdGlvbkVkZ2VMYWJlbFZhbHVlOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiBBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+TWlncmF0aW9uIEVkZ2UgTGFiZWw8L2I+PC9lbT4nLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiA8cD4KKyAqIDwvcD4KKyAqCisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBNaWdyYXRpb25FZGdlTGFiZWxJbXBsIGV4dGVuZHMgRWRnZUxhYmVsSW1wbCBpbXBsZW1lbnRzIE1pZ3JhdGlvbkVkZ2VMYWJlbCB7CisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCXByb3RlY3RlZCBNaWdyYXRpb25FZGdlTGFiZWxJbXBsKCkgeworCQlzdXBlcigpOworCQlzZXRDdXJyZW50VmFsdWUoRWRnZXNGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVNaWdyYXRpb25FZGdlTGFiZWxWYWx1ZSgpKTsKKwl9CisKKwkvKioKKwkgKiBAcGFyYW0gbm9kZQorCSAqICAgICAgICAgICAgdGhlIG5vZGUKKwkgKiBAcmV0dXJuIHRoZSBFZGdlcyB0aGF0IHJlcHJlc2VudCB0aGUgY29tbW9uIGJvcmRlciByZWxhdGlvbnNoaXAgYmV0d2VlbgorCSAqICAgICAgICAgdGhlIG5vZGUgYW5kIG90aGVyIG5vZGVzLgorCSAqLworCXB1YmxpYyBzdGF0aWMgTGlzdDxFZGdlPiBnZXRNaWdyYXRpb25FZGdlc0Zyb21Ob2RlKGZpbmFsIE5vZGUgbm9kZSkgeworCQlmaW5hbCBMaXN0PEVkZ2U+IHJldFZhbHVlID0gbmV3IEFycmF5TGlzdDxFZGdlPigpOworCisJCWZvciAoSXRlcmF0b3I8RWRnZT4gZWRnZUl0ZXIgPSBub2RlLmdldEVkZ2VzKCkuaXRlcmF0b3IoKTsgZWRnZUl0ZXIuaGFzTmV4dCgpOykgeworCQkJZmluYWwgRWRnZSBlZGdlID0gZWRnZUl0ZXIubmV4dCgpOworCQkJZmluYWwgRWRnZUxhYmVsIGVkZ2VMYWJlbCA9IGVkZ2UuZ2V0TGFiZWwoKTsKKwkJCS8vIElzIHRoZSBsYWJlbCBhIG1pZ3JhdGlvbkVkZ2UgbGFiZWw/CisJCQlpZiAoZWRnZUxhYmVsIGluc3RhbmNlb2YgTWlncmF0aW9uRWRnZUxhYmVsKSB7CisJCQkJLy8gWWVzCisJCQkJcmV0VmFsdWUuYWRkKGVkZ2UpOworCQkJfQorCQl9IC8vIGZvcgorCisJCXJldHVybiByZXRWYWx1ZTsKKwl9IC8vIGdldE1pZ3JhdGlvbkVkZ2VzRnJvbU5vZGUKKwkKKwkKKwkKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgRUNsYXNzIGVTdGF0aWNDbGFzcygpIHsKKwkJcmV0dXJuIEVkZ2VzUGFja2FnZS5MaXRlcmFscy5NSUdSQVRJT05fRURHRV9MQUJFTDsKKwl9CisJCisJLyoqCisJICogTWFrZSB0aGUgY3VycmVudCB2YWx1ZSBzdHVmZiBoYXZlIHRvIGJlIE1peGluZ0VkZ2VMYWJlbFZhbHVlcworCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBNaWdyYXRpb25FZGdlTGFiZWxWYWx1ZSBnZXRDdXJyZW50VmFsdWUoKSB7CisJCXJldHVybigoTWlncmF0aW9uRWRnZUxhYmVsVmFsdWUpc3VwZXIuZ2V0Q3VycmVudFZhbHVlKCkpOworCX0KKwkKKwlwdWJsaWMgdm9pZCBzZXRDdXJyZW50VmFsdWUoTWlncmF0aW9uRWRnZUxhYmVsVmFsdWUgdmFsKSB7CisJCXN1cGVyLnNldEN1cnJlbnRWYWx1ZSh2YWwpOworCX0KKworfSAvL01pZ3JhdGlvbkVkZ2VMYWJlbEltcGwKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy9lZGdlcy9pbXBsL01pZ3JhdGlvbkVkZ2VMYWJlbFZhbHVlSW1wbC5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL2VkZ2VzL2ltcGwvTWlncmF0aW9uRWRnZUxhYmVsVmFsdWVJbXBsLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWRmZjdjNQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy9lZGdlcy9pbXBsL01pZ3JhdGlvbkVkZ2VMYWJlbFZhbHVlSW1wbC5qYXZhCkBAIC0wLDAgKzEsMTk2IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuZWRnZXMuaW1wbDsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzczsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuaW1wbC5FTm90aWZpY2F0aW9uSW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguaW1wbC5MYWJlbFZhbHVlSW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmVkZ2VzLkVkZ2VzUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmVkZ2VzLk1pZ3JhdGlvbkVkZ2VMYWJlbFZhbHVlOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiBBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+TWlncmF0aW9uIEVkZ2UgTGFiZWwgVmFsdWU8L2I+PC9lbT4nLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiA8cD4KKyAqIFRoZSBmb2xsb3dpbmcgZmVhdHVyZXMgYXJlIGltcGxlbWVudGVkOgorICogPHVsPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuZWRnZXMuaW1wbC5NaWdyYXRpb25FZGdlTGFiZWxWYWx1ZUltcGwjZ2V0TWlncmF0aW9uUmF0ZSA8ZW0+TWlncmF0aW9uIFJhdGU8L2VtPn08L2xpPgorICogPC91bD4KKyAqIDwvcD4KKyAqCisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBNaWdyYXRpb25FZGdlTGFiZWxWYWx1ZUltcGwgZXh0ZW5kcyBMYWJlbFZhbHVlSW1wbCBpbXBsZW1lbnRzIE1pZ3JhdGlvbkVkZ2VMYWJlbFZhbHVlIHsKKwkvKioKKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0TWlncmF0aW9uUmF0ZSgpIDxlbT5NaWdyYXRpb24gUmF0ZTwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZ2V0TWlncmF0aW9uUmF0ZSgpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBkb3VibGUgTUlHUkFUSU9OX1JBVEVfRURFRkFVTFQgPSAwLjA7CisKKwkvKioKKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRNaWdyYXRpb25SYXRlKCkgPGVtPk1pZ3JhdGlvbiBSYXRlPC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNnZXRNaWdyYXRpb25SYXRlKCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgZG91YmxlIG1pZ3JhdGlvblJhdGUgPSBNSUdSQVRJT05fUkFURV9FREVGQVVMVDsKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBNaWdyYXRpb25FZGdlTGFiZWxWYWx1ZUltcGwoKSB7CisJCXN1cGVyKCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIEVDbGFzcyBlU3RhdGljQ2xhc3MoKSB7CisJCXJldHVybiBFZGdlc1BhY2thZ2UuTGl0ZXJhbHMuTUlHUkFUSU9OX0VER0VfTEFCRUxfVkFMVUU7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIGRvdWJsZSBnZXRNaWdyYXRpb25SYXRlKCkgeworCQlyZXR1cm4gbWlncmF0aW9uUmF0ZTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRNaWdyYXRpb25SYXRlKGRvdWJsZSBuZXdNaWdyYXRpb25SYXRlKSB7CisJCWRvdWJsZSBvbGRNaWdyYXRpb25SYXRlID0gbWlncmF0aW9uUmF0ZTsKKwkJbWlncmF0aW9uUmF0ZSA9IG5ld01pZ3JhdGlvblJhdGU7CisJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkKKwkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIEVkZ2VzUGFja2FnZS5NSUdSQVRJT05fRURHRV9MQUJFTF9WQUxVRV9fTUlHUkFUSU9OX1JBVEUsIG9sZE1pZ3JhdGlvblJhdGUsIG1pZ3JhdGlvblJhdGUpKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgT2JqZWN0IGVHZXQoaW50IGZlYXR1cmVJRCwgYm9vbGVhbiByZXNvbHZlLCBib29sZWFuIGNvcmVUeXBlKSB7CisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7CisJCQljYXNlIEVkZ2VzUGFja2FnZS5NSUdSQVRJT05fRURHRV9MQUJFTF9WQUxVRV9fTUlHUkFUSU9OX1JBVEU6CisJCQkJcmV0dXJuIGdldE1pZ3JhdGlvblJhdGUoKTsKKwkJfQorCQlyZXR1cm4gc3VwZXIuZUdldChmZWF0dXJlSUQsIHJlc29sdmUsIGNvcmVUeXBlKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBlU2V0KGludCBmZWF0dXJlSUQsIE9iamVjdCBuZXdWYWx1ZSkgeworCQlzd2l0Y2ggKGZlYXR1cmVJRCkgeworCQkJY2FzZSBFZGdlc1BhY2thZ2UuTUlHUkFUSU9OX0VER0VfTEFCRUxfVkFMVUVfX01JR1JBVElPTl9SQVRFOgorCQkJCXNldE1pZ3JhdGlvblJhdGUoKERvdWJsZSluZXdWYWx1ZSk7CisJCQkJcmV0dXJuOworCQl9CisJCXN1cGVyLmVTZXQoZmVhdHVyZUlELCBuZXdWYWx1ZSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgZVVuc2V0KGludCBmZWF0dXJlSUQpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJCWNhc2UgRWRnZXNQYWNrYWdlLk1JR1JBVElPTl9FREdFX0xBQkVMX1ZBTFVFX19NSUdSQVRJT05fUkFURToKKwkJCQlzZXRNaWdyYXRpb25SYXRlKE1JR1JBVElPTl9SQVRFX0VERUZBVUxUKTsKKwkJCQlyZXR1cm47CisJCX0KKwkJc3VwZXIuZVVuc2V0KGZlYXR1cmVJRCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIGJvb2xlYW4gZUlzU2V0KGludCBmZWF0dXJlSUQpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJCWNhc2UgRWRnZXNQYWNrYWdlLk1JR1JBVElPTl9FREdFX0xBQkVMX1ZBTFVFX19NSUdSQVRJT05fUkFURToKKwkJCQlyZXR1cm4gbWlncmF0aW9uUmF0ZSAhPSBNSUdSQVRJT05fUkFURV9FREVGQVVMVDsKKwkJfQorCQlyZXR1cm4gc3VwZXIuZUlzU2V0KGZlYXR1cmVJRCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIFN0cmluZyB0b1N0cmluZygpIHsKKwkJaWYgKGVJc1Byb3h5KCkpIHJldHVybiBzdXBlci50b1N0cmluZygpOworCisJCVN0cmluZ0J1ZmZlciByZXN1bHQgPSBuZXcgU3RyaW5nQnVmZmVyKHN1cGVyLnRvU3RyaW5nKCkpOworCQlyZXN1bHQuYXBwZW5kKCIgKG1pZ3JhdGlvblJhdGU6ICIpOyAvLyROT04tTkxTLTEkCisJCXJlc3VsdC5hcHBlbmQobWlncmF0aW9uUmF0ZSk7CisJCXJlc3VsdC5hcHBlbmQoJyknKTsKKwkJcmV0dXJuIHJlc3VsdC50b1N0cmluZygpOworCX0KKworCS8qKgorCSAqIFJlc2V0cyB0aGUgdmFsdWUgZm9yIHRoaXMgbWlncmF0aW9uIGVkZ2UgdG8gdGhlIGRlZmF1bHQgdmFsdWUuIElzIHRoaXMKKwkgKiByZWFsbHkgdGhlIGNvcnJlY3QgYmVoYXZpb3I/IGRvIHdlIHJlYWxseSB3YW50IHRvIGdvIHRvIHRoZSBtb2RlbCBzdGFydAorCSAqIHN0YXRlPworCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIHJlc2V0KCkgeworCQlzZXRNaWdyYXRpb25SYXRlKE1JR1JBVElPTl9SQVRFX0VERUZBVUxUKTsKKwl9CisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5pbXBsLkxhYmVsVmFsdWVJbXBsI3NhbmUoKQorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBib29sZWFuIHNhbmUoKSB7CisJCWJvb2xlYW4gcmV0VmFsdWUgPSBzdXBlci5zYW5lKCk7CisJCQorCQlyZXRWYWx1ZSA9IHJldFZhbHVlICYmICFEb3VibGUuaXNOYU4oIGdldE1pZ3JhdGlvblJhdGUoKSk7CisJCWFzc2VydCByZXRWYWx1ZSA6ICJNaWdyYXRpb24gcmF0ZSBpcyBOYU4iOworCQkKKwkJcmV0VmFsdWUgPSByZXRWYWx1ZSAmJiAhRG91YmxlLmlzSW5maW5pdGUoIGdldE1pZ3JhdGlvblJhdGUoKSk7CisJCWFzc2VydCByZXRWYWx1ZTogIk1pZ3JhdGlvbiByYXRlIGlzIEluZmluaXRlIjsKKwkJCisJCXJldHVybiByZXRWYWx1ZTsKKwl9IC8vIHNhbmUKKworCQorfSAvL01pZ3JhdGlvbkVkZ2VMYWJlbFZhbHVlSW1wbApkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL2VkZ2VzL2ltcGwvTWl4aW5nRWRnZUltcGwuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy9lZGdlcy9pbXBsL01peGluZ0VkZ2VJbXBsLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzE1OWRiYQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy9lZGdlcy9pbXBsL01peGluZ0VkZ2VJbXBsLmphdmEKQEAgLTAsMCArMSw4NyBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmVkZ2VzLmltcGw7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzczsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuU1RFTVVSSTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmVkZ2VzLkVkZ2VzRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmVkZ2VzLkVkZ2VzUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmVkZ2VzLk1peGluZ0VkZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5lZGdlcy5NaXhpbmdFZGdlTGFiZWw7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIEFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5NaXhpbmcgRWRnZTwvYj48L2VtPicuCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIDxwPgorICogPC9wPgorICoKKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIE1peGluZ0VkZ2VJbXBsIGV4dGVuZHMgUG9wdWxhdGlvbkVkZ2VJbXBsIGltcGxlbWVudHMgTWl4aW5nRWRnZSB7CisKKwkvKioKKwkgKiBUaGlzIGlzIHVzZWQgdG8gZ2VuZXJhdGUgdW5pcXVlIFVSSSdzIGZvciBlYWNoIE1peGluZ0VkZ2UgZ2VuZXJhdGVkCisJICovCisJc3RhdGljIGludCBtaXhpbmdFZGdlQ291bnRlciA9IDA7CisJCisJCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCXByb3RlY3RlZCBNaXhpbmdFZGdlSW1wbCgpIHsKKwkJc3VwZXIoKTsKKwkJCQkKKwkJLy9zZXQgdGhlIFVSSQorCQlzZXRVUkkoU1RFTVVSSS5jcmVhdGVVUkkoVVJJX1RZUEVfTUlYSU5HX0VER0VfU0VHTUVOVCArICIvIgorCQkJCSsgSW50ZWdlci50b1N0cmluZyhtaXhpbmdFZGdlQ291bnRlcisrKSkpOworCQkKKwkJLy9NYWtlIGEgbGFiZWwKKwkJc2V0TGFiZWwoRWRnZXNGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVNaXhpbmdFZGdlTGFiZWwoKSk7CQkJCQorCQkJCQorCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCBFQ2xhc3MgZVN0YXRpY0NsYXNzKCkgeworCQlyZXR1cm4gRWRnZXNQYWNrYWdlLkxpdGVyYWxzLk1JWElOR19FREdFOworCX0KKwkKKwkKKwkvKioqCisJICogT3ZlcnJpZGUgc2V0dGVyIGZvciBzZXREaXJlY3RlZCBzbyB0aGF0IGl0IHdpbGwgYmxvdyB1cCBpZiBhbnlvbmUgdHJpZXMgdG8gbWFrZSBpdCBkaXJlY3RlZCAod2hlbiBhc3NlcnRpb25zIGFyZSBvbikuCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgc2V0RGlyZWN0ZWQoYm9vbGVhbiBpc0RpcmVjdGVkKSB7CisJCWFzc2VydChpc0RpcmVjdGVkPT1mYWxzZSk7CisJCXN1cGVyLnNldERpcmVjdGVkKGlzRGlyZWN0ZWQpOworCX0KKwkKKwkvKipPdmVycmlkZXMgbWV0aG9kcyBmcm9tIEVkZ2VJbXBsIGNvcnJlY3RseQorCSAqIGZvciBjb3JyZWN0IHJldHVybiB0eXBlcyovCisJQE92ZXJyaWRlCisJcHVibGljIE1peGluZ0VkZ2VMYWJlbCBnZXRMYWJlbCgpIHsKKwkJcmV0dXJuIChNaXhpbmdFZGdlTGFiZWwpc3VwZXIuZ2V0TGFiZWwoKTsKKwl9CisJcHVibGljIHZvaWQgc2V0TGFiZWwoTWl4aW5nRWRnZUxhYmVsIGxibCkgeworCQkvL2p1c3QgZGVhbCB3aXRoIG1ha2luZyBzdXJlIHRoZSBVUkkgbGFiZWxpbmcgc2NoZW1lIGlzIGNvcnJlY3QgaGVyZS4KKwkJbGJsLnNldFVSSU9mSWRlbnRpZmlhYmxlVG9CZUxhYmVsZWQodGhpcy5nZXRVUkkoKSk7CisJCXN1cGVyLnNldExhYmVsKGxibCk7CisJfQorCit9IC8vTWl4aW5nRWRnZUltcGwKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy9lZGdlcy9pbXBsL01peGluZ0VkZ2VMYWJlbEltcGwuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy9lZGdlcy9pbXBsL01peGluZ0VkZ2VMYWJlbEltcGwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMmZlYWZhCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL2VkZ2VzL2ltcGwvTWl4aW5nRWRnZUxhYmVsSW1wbC5qYXZhCkBAIC0wLDAgKzEsNjQgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5lZGdlcy5pbXBsOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmltcGwuRWRnZUxhYmVsSW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmVkZ2VzLkVkZ2VzRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmVkZ2VzLkVkZ2VzUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmVkZ2VzLk1peGluZ0VkZ2VMYWJlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmVkZ2VzLk1peGluZ0VkZ2VMYWJlbFZhbHVlOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiBBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+TWl4aW5nIEVkZ2UgTGFiZWw8L2I+PC9lbT4nLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiA8cD4KKyAqIDwvcD4KKyAqCisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBNaXhpbmdFZGdlTGFiZWxJbXBsIGV4dGVuZHMgRWRnZUxhYmVsSW1wbCBpbXBsZW1lbnRzIE1peGluZ0VkZ2VMYWJlbCB7CisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCXByb3RlY3RlZCBNaXhpbmdFZGdlTGFiZWxJbXBsKCkgeworCQlzdXBlcigpOworCQkKKwkJLy9zZXQgdGhlIE1peGluZ0VkZ2VMYWJlbAorCQlzZXRDdXJyZW50VmFsdWUoRWRnZXNGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVNaXhpbmdFZGdlTGFiZWxWYWx1ZSgpKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgRUNsYXNzIGVTdGF0aWNDbGFzcygpIHsKKwkJcmV0dXJuIEVkZ2VzUGFja2FnZS5MaXRlcmFscy5NSVhJTkdfRURHRV9MQUJFTDsKKwl9CisJCisJLyoqCisJICogTWV0aG9kcyBuZWVkIHRvIG1ha2UgdGhpcyByZXR1cm4gZWRnZSBsYWJlbHMgcHJvcGVybHkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgTWl4aW5nRWRnZUxhYmVsVmFsdWUgZ2V0Q3VycmVudFZhbHVlKCkgeworCQlyZXR1cm4gKE1peGluZ0VkZ2VMYWJlbFZhbHVlKXN1cGVyLmdldEN1cnJlbnRWYWx1ZSgpOworCX0KKwlwdWJsaWMgdm9pZCBzZXRDdXJyZW50VmFsdWUoTWl4aW5nRWRnZUxhYmVsVmFsdWUgdmFsKSB7CisJCXN1cGVyLnNldEN1cnJlbnRWYWx1ZSh2YWwpOworCX0KKworfSAvL01peGluZ0VkZ2VMYWJlbEltcGwKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy9lZGdlcy9pbXBsL01peGluZ0VkZ2VMYWJlbFZhbHVlSW1wbC5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL2VkZ2VzL2ltcGwvTWl4aW5nRWRnZUxhYmVsVmFsdWVJbXBsLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODMzZDdhNQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy9lZGdlcy9pbXBsL01peGluZ0VkZ2VMYWJlbFZhbHVlSW1wbC5qYXZhCkBAIC0wLDAgKzEsMTc4IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuZWRnZXMuaW1wbDsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzczsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuaW1wbC5FTm90aWZpY2F0aW9uSW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguaW1wbC5MYWJlbFZhbHVlSW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmVkZ2VzLkVkZ2VzUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmVkZ2VzLk1peGluZ0VkZ2VMYWJlbFZhbHVlOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiBBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+TWl4aW5nIEVkZ2UgTGFiZWwgVmFsdWU8L2I+PC9lbT4nLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiA8cD4KKyAqIFRoZSBmb2xsb3dpbmcgZmVhdHVyZXMgYXJlIGltcGxlbWVudGVkOgorICogPHVsPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuZWRnZXMuaW1wbC5NaXhpbmdFZGdlTGFiZWxWYWx1ZUltcGwjZ2V0TWl4aW5nUmF0ZSA8ZW0+TWl4aW5nIFJhdGU8L2VtPn08L2xpPgorICogPC91bD4KKyAqIDwvcD4KKyAqCisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBNaXhpbmdFZGdlTGFiZWxWYWx1ZUltcGwgZXh0ZW5kcyBMYWJlbFZhbHVlSW1wbCBpbXBsZW1lbnRzIE1peGluZ0VkZ2VMYWJlbFZhbHVlIHsKKwkvKioKKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0TWl4aW5nUmF0ZSgpIDxlbT5NaXhpbmcgUmF0ZTwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZ2V0TWl4aW5nUmF0ZSgpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBkb3VibGUgTUlYSU5HX1JBVEVfRURFRkFVTFQgPSAwLjA7CisKKwkvKioKKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRNaXhpbmdSYXRlKCkgPGVtPk1peGluZyBSYXRlPC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNnZXRNaXhpbmdSYXRlKCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgZG91YmxlIG1peGluZ1JhdGUgPSBNSVhJTkdfUkFURV9FREVGQVVMVDsKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBNaXhpbmdFZGdlTGFiZWxWYWx1ZUltcGwoKSB7CisJCXN1cGVyKCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIEVDbGFzcyBlU3RhdGljQ2xhc3MoKSB7CisJCXJldHVybiBFZGdlc1BhY2thZ2UuTGl0ZXJhbHMuTUlYSU5HX0VER0VfTEFCRUxfVkFMVUU7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIGRvdWJsZSBnZXRNaXhpbmdSYXRlKCkgeworCQlyZXR1cm4gbWl4aW5nUmF0ZTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRNaXhpbmdSYXRlKGRvdWJsZSBuZXdNaXhpbmdSYXRlKSB7CisJCWRvdWJsZSBvbGRNaXhpbmdSYXRlID0gbWl4aW5nUmF0ZTsKKwkJbWl4aW5nUmF0ZSA9IG5ld01peGluZ1JhdGU7CisJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkKKwkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIEVkZ2VzUGFja2FnZS5NSVhJTkdfRURHRV9MQUJFTF9WQUxVRV9fTUlYSU5HX1JBVEUsIG9sZE1peGluZ1JhdGUsIG1peGluZ1JhdGUpKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgT2JqZWN0IGVHZXQoaW50IGZlYXR1cmVJRCwgYm9vbGVhbiByZXNvbHZlLCBib29sZWFuIGNvcmVUeXBlKSB7CisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7CisJCQljYXNlIEVkZ2VzUGFja2FnZS5NSVhJTkdfRURHRV9MQUJFTF9WQUxVRV9fTUlYSU5HX1JBVEU6CisJCQkJcmV0dXJuIGdldE1peGluZ1JhdGUoKTsKKwkJfQorCQlyZXR1cm4gc3VwZXIuZUdldChmZWF0dXJlSUQsIHJlc29sdmUsIGNvcmVUeXBlKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBlU2V0KGludCBmZWF0dXJlSUQsIE9iamVjdCBuZXdWYWx1ZSkgeworCQlzd2l0Y2ggKGZlYXR1cmVJRCkgeworCQkJY2FzZSBFZGdlc1BhY2thZ2UuTUlYSU5HX0VER0VfTEFCRUxfVkFMVUVfX01JWElOR19SQVRFOgorCQkJCXNldE1peGluZ1JhdGUoKERvdWJsZSluZXdWYWx1ZSk7CisJCQkJcmV0dXJuOworCQl9CisJCXN1cGVyLmVTZXQoZmVhdHVyZUlELCBuZXdWYWx1ZSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgZVVuc2V0KGludCBmZWF0dXJlSUQpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJCWNhc2UgRWRnZXNQYWNrYWdlLk1JWElOR19FREdFX0xBQkVMX1ZBTFVFX19NSVhJTkdfUkFURToKKwkJCQlzZXRNaXhpbmdSYXRlKE1JWElOR19SQVRFX0VERUZBVUxUKTsKKwkJCQlyZXR1cm47CisJCX0KKwkJc3VwZXIuZVVuc2V0KGZlYXR1cmVJRCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIGJvb2xlYW4gZUlzU2V0KGludCBmZWF0dXJlSUQpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJCWNhc2UgRWRnZXNQYWNrYWdlLk1JWElOR19FREdFX0xBQkVMX1ZBTFVFX19NSVhJTkdfUkFURToKKwkJCQlyZXR1cm4gbWl4aW5nUmF0ZSAhPSBNSVhJTkdfUkFURV9FREVGQVVMVDsKKwkJfQorCQlyZXR1cm4gc3VwZXIuZUlzU2V0KGZlYXR1cmVJRCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIFN0cmluZyB0b1N0cmluZygpIHsKKwkJaWYgKGVJc1Byb3h5KCkpIHJldHVybiBzdXBlci50b1N0cmluZygpOworCisJCVN0cmluZ0J1ZmZlciByZXN1bHQgPSBuZXcgU3RyaW5nQnVmZmVyKHN1cGVyLnRvU3RyaW5nKCkpOworCQlyZXN1bHQuYXBwZW5kKCIgKG1peGluZ1JhdGU6ICIpOyAvLyROT04tTkxTLTEkCisJCXJlc3VsdC5hcHBlbmQobWl4aW5nUmF0ZSk7CisJCXJlc3VsdC5hcHBlbmQoJyknKTsKKwkJcmV0dXJuIHJlc3VsdC50b1N0cmluZygpOworCX0KKworCS8qKgorCSAqIGZvciByZXNldCBzZXQgdGhlIHJhdGUgdG8gdGhlIGRlZmF1bHQgcmF0ZS4KKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCByZXNldCgpIHsKKwkJc2V0TWl4aW5nUmF0ZShNSVhJTkdfUkFURV9FREVGQVVMVCk7CQorCX0KKwkKKworfSAvL01peGluZ0VkZ2VMYWJlbFZhbHVlSW1wbApkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL2VkZ2VzL2ltcGwvUG9wdWxhdGlvbkVkZ2VJbXBsLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvZWRnZXMvaW1wbC9Qb3B1bGF0aW9uRWRnZUltcGwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNTRkNzg5Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL2VkZ2VzL2ltcGwvUG9wdWxhdGlvbkVkZ2VJbXBsLmphdmEKQEAgLTAsMCArMSwxNjkgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5lZGdlcy5pbXBsOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAKKyAqIENvcHlyaWdodCAoYykgMjAxMSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4gCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIAorICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wIAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQgCisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbCAKKyAqIAorICogQ29udHJpYnV0b3JzOiAKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5pbXBsLkVOb3RpZmljYXRpb25JbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5pbXBsLkVkZ2VJbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuZWRnZXMuRWRnZXNQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuZWRnZXMuUG9wdWxhdGlvbkVkZ2U7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIEFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5Qb3B1bGF0aW9uIEVkZ2U8L2I+PC9lbT4nLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiA8cD4KKyAqIFRoZSBmb2xsb3dpbmcgZmVhdHVyZXMgYXJlIGltcGxlbWVudGVkOgorICogPHVsPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuZWRnZXMuaW1wbC5Qb3B1bGF0aW9uRWRnZUltcGwjZ2V0UG9wdWxhdGlvbklkZW50aWZpZXIgPGVtPlBvcHVsYXRpb24gSWRlbnRpZmllcjwvZW0+fTwvbGk+CisgKiA8L3VsPgorICogPC9wPgorICoKKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIFBvcHVsYXRpb25FZGdlSW1wbCBleHRlbmRzIEVkZ2VJbXBsIGltcGxlbWVudHMgUG9wdWxhdGlvbkVkZ2UgeworCS8qKgorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRQb3B1bGF0aW9uSWRlbnRpZmllcigpIDxlbT5Qb3B1bGF0aW9uIElkZW50aWZpZXI8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI2dldFBvcHVsYXRpb25JZGVudGlmaWVyKCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIFN0cmluZyBQT1BVTEFUSU9OX0lERU5USUZJRVJfRURFRkFVTFQgPSAiaHVtYW4iOyAvLyROT04tTkxTLTEkCisKKwkvKioKKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRQb3B1bGF0aW9uSWRlbnRpZmllcigpIDxlbT5Qb3B1bGF0aW9uIElkZW50aWZpZXI8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI2dldFBvcHVsYXRpb25JZGVudGlmaWVyKCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgU3RyaW5nIHBvcHVsYXRpb25JZGVudGlmaWVyID0gUE9QVUxBVElPTl9JREVOVElGSUVSX0VERUZBVUxUOworCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIFBvcHVsYXRpb25FZGdlSW1wbCgpIHsKKwkJc3VwZXIoKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgRUNsYXNzIGVTdGF0aWNDbGFzcygpIHsKKwkJcmV0dXJuIEVkZ2VzUGFja2FnZS5MaXRlcmFscy5QT1BVTEFUSU9OX0VER0U7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFN0cmluZyBnZXRQb3B1bGF0aW9uSWRlbnRpZmllcigpIHsKKwkJcmV0dXJuIHBvcHVsYXRpb25JZGVudGlmaWVyOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIHNldFBvcHVsYXRpb25JZGVudGlmaWVyKFN0cmluZyBuZXdQb3B1bGF0aW9uSWRlbnRpZmllcikgeworCQlTdHJpbmcgb2xkUG9wdWxhdGlvbklkZW50aWZpZXIgPSBwb3B1bGF0aW9uSWRlbnRpZmllcjsKKwkJcG9wdWxhdGlvbklkZW50aWZpZXIgPSBuZXdQb3B1bGF0aW9uSWRlbnRpZmllcjsKKwkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQorCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgRWRnZXNQYWNrYWdlLlBPUFVMQVRJT05fRURHRV9fUE9QVUxBVElPTl9JREVOVElGSUVSLCBvbGRQb3B1bGF0aW9uSWRlbnRpZmllciwgcG9wdWxhdGlvbklkZW50aWZpZXIpKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgT2JqZWN0IGVHZXQoaW50IGZlYXR1cmVJRCwgYm9vbGVhbiByZXNvbHZlLCBib29sZWFuIGNvcmVUeXBlKSB7CisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7CisJCQljYXNlIEVkZ2VzUGFja2FnZS5QT1BVTEFUSU9OX0VER0VfX1BPUFVMQVRJT05fSURFTlRJRklFUjoKKwkJCQlyZXR1cm4gZ2V0UG9wdWxhdGlvbklkZW50aWZpZXIoKTsKKwkJfQorCQlyZXR1cm4gc3VwZXIuZUdldChmZWF0dXJlSUQsIHJlc29sdmUsIGNvcmVUeXBlKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBlU2V0KGludCBmZWF0dXJlSUQsIE9iamVjdCBuZXdWYWx1ZSkgeworCQlzd2l0Y2ggKGZlYXR1cmVJRCkgeworCQkJY2FzZSBFZGdlc1BhY2thZ2UuUE9QVUxBVElPTl9FREdFX19QT1BVTEFUSU9OX0lERU5USUZJRVI6CisJCQkJc2V0UG9wdWxhdGlvbklkZW50aWZpZXIoKFN0cmluZyluZXdWYWx1ZSk7CisJCQkJcmV0dXJuOworCQl9CisJCXN1cGVyLmVTZXQoZmVhdHVyZUlELCBuZXdWYWx1ZSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgZVVuc2V0KGludCBmZWF0dXJlSUQpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJCWNhc2UgRWRnZXNQYWNrYWdlLlBPUFVMQVRJT05fRURHRV9fUE9QVUxBVElPTl9JREVOVElGSUVSOgorCQkJCXNldFBvcHVsYXRpb25JZGVudGlmaWVyKFBPUFVMQVRJT05fSURFTlRJRklFUl9FREVGQVVMVCk7CisJCQkJcmV0dXJuOworCQl9CisJCXN1cGVyLmVVbnNldChmZWF0dXJlSUQpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBib29sZWFuIGVJc1NldChpbnQgZmVhdHVyZUlEKSB7CisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7CisJCQljYXNlIEVkZ2VzUGFja2FnZS5QT1BVTEFUSU9OX0VER0VfX1BPUFVMQVRJT05fSURFTlRJRklFUjoKKwkJCQlyZXR1cm4gUE9QVUxBVElPTl9JREVOVElGSUVSX0VERUZBVUxUID09IG51bGwgPyBwb3B1bGF0aW9uSWRlbnRpZmllciAhPSBudWxsIDogIVBPUFVMQVRJT05fSURFTlRJRklFUl9FREVGQVVMVC5lcXVhbHMocG9wdWxhdGlvbklkZW50aWZpZXIpOworCQl9CisJCXJldHVybiBzdXBlci5lSXNTZXQoZmVhdHVyZUlEKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkgeworCQlpZiAoZUlzUHJveHkoKSkgcmV0dXJuIHN1cGVyLnRvU3RyaW5nKCk7CisKKwkJU3RyaW5nQnVmZmVyIHJlc3VsdCA9IG5ldyBTdHJpbmdCdWZmZXIoc3VwZXIudG9TdHJpbmcoKSk7CisJCXJlc3VsdC5hcHBlbmQoIiAocG9wdWxhdGlvbklkZW50aWZpZXI6ICIpOyAvLyROT04tTkxTLTEkCisJCXJlc3VsdC5hcHBlbmQocG9wdWxhdGlvbklkZW50aWZpZXIpOworCQlyZXN1bHQuYXBwZW5kKCcpJyk7CisJCXJldHVybiByZXN1bHQudG9TdHJpbmcoKTsKKwl9CisKK30gLy9Qb3B1bGF0aW9uRWRnZUltcGwKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy9lZGdlcy9wcmVzZW50YXRpb24vRWRnZXNBY3Rpb25CYXJDb250cmlidXRvci5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL2VkZ2VzL3ByZXNlbnRhdGlvbi9FZGdlc0FjdGlvbkJhckNvbnRyaWJ1dG9yLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTY1NTU3MAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy9lZGdlcy9wcmVzZW50YXRpb24vRWRnZXNBY3Rpb25CYXJDb250cmlidXRvci5qYXZhCkBAIC0wLDAgKzEsNDMwIEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuZWRnZXMucHJlc2VudGF0aW9uOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7CitpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnVpLnZpZXdlci5JVmlld2VyUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQuZG9tYWluLkVkaXRpbmdEb21haW47CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQuZG9tYWluLklFZGl0aW5nRG9tYWluUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkuYWN0aW9uLkNvbnRyb2xBY3Rpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkuYWN0aW9uLkNyZWF0ZUNoaWxkQWN0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmFjdGlvbi5DcmVhdGVTaWJsaW5nQWN0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmFjdGlvbi5FZGl0aW5nRG9tYWluQWN0aW9uQmFyQ29udHJpYnV0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkuYWN0aW9uLkxvYWRSZXNvdXJjZUFjdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5hY3Rpb24uVmFsaWRhdGVBY3Rpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLkFjdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uQWN0aW9uQ29udHJpYnV0aW9uSXRlbTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSUFjdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSUNvbnRyaWJ1dGlvbkl0ZW07CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklDb250cmlidXRpb25NYW5hZ2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JTWVudUxpc3RlbmVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JTWVudU1hbmFnZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklUb29sQmFyTWFuYWdlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uTWVudU1hbmFnZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLlNlcGFyYXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uU3ViQ29udHJpYnV0aW9uSXRlbTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvblByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVN0cnVjdHVyZWRTZWxlY3Rpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5TZWxlY3Rpb25DaGFuZ2VkRXZlbnQ7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5WaWV3ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5lZGdlcy5wcm92aWRlci5EZWZpbml0aW9uc0VkaXRQbHVnaW47CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuSUVkaXRvclBhcnQ7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuUGFydEluaXRFeGNlcHRpb247CisKKy8qKgorICogVGhpcyBpcyB0aGUgYWN0aW9uIGJhciBjb250cmlidXRvciBmb3IgdGhlIEVkZ2VzIG1vZGVsIGVkaXRvci4KKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIEVkZ2VzQWN0aW9uQmFyQ29udHJpYnV0b3IKKwlleHRlbmRzIEVkaXRpbmdEb21haW5BY3Rpb25CYXJDb250cmlidXRvcgorCWltcGxlbWVudHMgSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lciB7CisJLyoqCisJICogVGhpcyBrZWVwcyB0cmFjayBvZiB0aGUgYWN0aXZlIGVkaXRvci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgSUVkaXRvclBhcnQgYWN0aXZlRWRpdG9yUGFydDsKKworCS8qKgorCSAqIFRoaXMga2VlcHMgdHJhY2sgb2YgdGhlIGN1cnJlbnQgc2VsZWN0aW9uIHByb3ZpZGVyLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBJU2VsZWN0aW9uUHJvdmlkZXIgc2VsZWN0aW9uUHJvdmlkZXI7CisKKwkvKioKKwkgKiBUaGlzIGFjdGlvbiBvcGVucyB0aGUgUHJvcGVydGllcyB2aWV3LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBJQWN0aW9uIHNob3dQcm9wZXJ0aWVzVmlld0FjdGlvbiA9CisJCW5ldyBBY3Rpb24oRGVmaW5pdGlvbnNFZGl0UGx1Z2luLklOU1RBTkNFLmdldFN0cmluZygiX1VJX1Nob3dQcm9wZXJ0aWVzVmlld19tZW51X2l0ZW0iKSkgLy8kTk9OLU5MUy0xJAorCQl7CisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyB2b2lkIHJ1bigpIHsKKwkJCQl0cnkgeworCQkJCQlnZXRQYWdlKCkuc2hvd1ZpZXcoIm9yZy5lY2xpcHNlLnVpLnZpZXdzLlByb3BlcnR5U2hlZXQiKTsgLy8kTk9OLU5MUy0xJAorCQkJCX0KKwkJCQljYXRjaCAoUGFydEluaXRFeGNlcHRpb24gZXhjZXB0aW9uKSB7CisJCQkJCURlZmluaXRpb25zRWRpdFBsdWdpbi5JTlNUQU5DRS5sb2coZXhjZXB0aW9uKTsKKwkJCQl9CisJCQl9CisJCX07CisKKwkvKioKKwkgKiBUaGlzIGFjdGlvbiByZWZyZXNoZXMgdGhlIHZpZXdlciBvZiB0aGUgY3VycmVudCBlZGl0b3IgaWYgdGhlIGVkaXRvcgorCSAqIGltcGxlbWVudHMge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5jb21tb24udWkudmlld2VyLklWaWV3ZXJQcm92aWRlcn0uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIElBY3Rpb24gcmVmcmVzaFZpZXdlckFjdGlvbiA9CisJCW5ldyBBY3Rpb24oRGVmaW5pdGlvbnNFZGl0UGx1Z2luLklOU1RBTkNFLmdldFN0cmluZygiX1VJX1JlZnJlc2hWaWV3ZXJfbWVudV9pdGVtIikpIC8vJE5PTi1OTFMtMSQKKwkJeworCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgYm9vbGVhbiBpc0VuYWJsZWQoKSB7CisJCQkJcmV0dXJuIGFjdGl2ZUVkaXRvclBhcnQgaW5zdGFuY2VvZiBJVmlld2VyUHJvdmlkZXI7CisJCQl9CisKKwkJCUBPdmVycmlkZQorCQkJcHVibGljIHZvaWQgcnVuKCkgeworCQkJCWlmIChhY3RpdmVFZGl0b3JQYXJ0IGluc3RhbmNlb2YgSVZpZXdlclByb3ZpZGVyKSB7CisJCQkJCVZpZXdlciB2aWV3ZXIgPSAoKElWaWV3ZXJQcm92aWRlcilhY3RpdmVFZGl0b3JQYXJ0KS5nZXRWaWV3ZXIoKTsKKwkJCQkJaWYgKHZpZXdlciAhPSBudWxsKSB7CisJCQkJCQl2aWV3ZXIucmVmcmVzaCgpOworCQkJCQl9CisJCQkJfQorCQkJfQorCQl9OworCisJLyoqCisJICogVGhpcyB3aWxsIGNvbnRhaW4gb25lIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5hY3Rpb24uQ3JlYXRlQ2hpbGRBY3Rpb259IGNvcnJlc3BvbmRpbmcgdG8gZWFjaCBkZXNjcmlwdG9yCisJICogZ2VuZXJhdGVkIGZvciB0aGUgY3VycmVudCBzZWxlY3Rpb24gYnkgdGhlIGl0ZW0gcHJvdmlkZXIuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIENvbGxlY3Rpb248SUFjdGlvbj4gY3JlYXRlQ2hpbGRBY3Rpb25zOworCisJLyoqCisJICogVGhpcyBpcyB0aGUgbWVudSBtYW5hZ2VyIGludG8gd2hpY2ggbWVudSBjb250cmlidXRpb24gaXRlbXMgc2hvdWxkIGJlIGFkZGVkIGZvciBDcmVhdGVDaGlsZCBhY3Rpb25zLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBJTWVudU1hbmFnZXIgY3JlYXRlQ2hpbGRNZW51TWFuYWdlcjsKKworCS8qKgorCSAqIFRoaXMgd2lsbCBjb250YWluIG9uZSB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkuYWN0aW9uLkNyZWF0ZVNpYmxpbmdBY3Rpb259IGNvcnJlc3BvbmRpbmcgdG8gZWFjaCBkZXNjcmlwdG9yCisJICogZ2VuZXJhdGVkIGZvciB0aGUgY3VycmVudCBzZWxlY3Rpb24gYnkgdGhlIGl0ZW0gcHJvdmlkZXIuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIENvbGxlY3Rpb248SUFjdGlvbj4gY3JlYXRlU2libGluZ0FjdGlvbnM7CisKKwkvKioKKwkgKiBUaGlzIGlzIHRoZSBtZW51IG1hbmFnZXIgaW50byB3aGljaCBtZW51IGNvbnRyaWJ1dGlvbiBpdGVtcyBzaG91bGQgYmUgYWRkZWQgZm9yIENyZWF0ZVNpYmxpbmcgYWN0aW9ucy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgSU1lbnVNYW5hZ2VyIGNyZWF0ZVNpYmxpbmdNZW51TWFuYWdlcjsKKworCS8qKgorCSAqIFRoaXMgY3JlYXRlcyBhbiBpbnN0YW5jZSBvZiB0aGUgY29udHJpYnV0b3IuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVkZ2VzQWN0aW9uQmFyQ29udHJpYnV0b3IoKSB7CisJCXN1cGVyKEFERElUSU9OU19MQVNUX1NUWUxFKTsKKwkJbG9hZFJlc291cmNlQWN0aW9uID0gbmV3IExvYWRSZXNvdXJjZUFjdGlvbigpOworCQl2YWxpZGF0ZUFjdGlvbiA9IG5ldyBWYWxpZGF0ZUFjdGlvbigpOworCQljb250cm9sQWN0aW9uID0gbmV3IENvbnRyb2xBY3Rpb24oKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFkZHMgU2VwYXJhdG9ycyBmb3IgZWRpdG9yIGFkZGl0aW9ucyB0byB0aGUgdG9vbCBiYXIuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgY29udHJpYnV0ZVRvVG9vbEJhcihJVG9vbEJhck1hbmFnZXIgdG9vbEJhck1hbmFnZXIpIHsKKwkJdG9vbEJhck1hbmFnZXIuYWRkKG5ldyBTZXBhcmF0b3IoImVkZ2VzLXNldHRpbmdzIikpOyAvLyROT04tTkxTLTEkCisJCXRvb2xCYXJNYW5hZ2VyLmFkZChuZXcgU2VwYXJhdG9yKCJlZGdlcy1hZGRpdGlvbnMiKSk7IC8vJE5PTi1OTFMtMSQKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFkZHMgdG8gdGhlIG1lbnUgYmFyIGEgbWVudSBhbmQgc29tZSBzZXBhcmF0b3JzIGZvciBlZGl0b3IgYWRkaXRpb25zLAorCSAqIGFzIHdlbGwgYXMgdGhlIHN1Yi1tZW51cyBmb3Igb2JqZWN0IGNyZWF0aW9uIGl0ZW1zLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGNvbnRyaWJ1dGVUb01lbnUoSU1lbnVNYW5hZ2VyIG1lbnVNYW5hZ2VyKSB7CisJCXN1cGVyLmNvbnRyaWJ1dGVUb01lbnUobWVudU1hbmFnZXIpOworCisJCUlNZW51TWFuYWdlciBzdWJtZW51TWFuYWdlciA9IG5ldyBNZW51TWFuYWdlcihEZWZpbml0aW9uc0VkaXRQbHVnaW4uSU5TVEFOQ0UuZ2V0U3RyaW5nKCJfVUlfRWRnZXNFZGl0b3JfbWVudSIpLCAib3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5lZGdlc01lbnVJRCIpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKKwkJbWVudU1hbmFnZXIuaW5zZXJ0QWZ0ZXIoImFkZGl0aW9ucyIsIHN1Ym1lbnVNYW5hZ2VyKTsgLy8kTk9OLU5MUy0xJAorCQlzdWJtZW51TWFuYWdlci5hZGQobmV3IFNlcGFyYXRvcigic2V0dGluZ3MiKSk7IC8vJE5PTi1OTFMtMSQKKwkJc3VibWVudU1hbmFnZXIuYWRkKG5ldyBTZXBhcmF0b3IoImFjdGlvbnMiKSk7IC8vJE5PTi1OTFMtMSQKKwkJc3VibWVudU1hbmFnZXIuYWRkKG5ldyBTZXBhcmF0b3IoImFkZGl0aW9ucyIpKTsgLy8kTk9OLU5MUy0xJAorCQlzdWJtZW51TWFuYWdlci5hZGQobmV3IFNlcGFyYXRvcigiYWRkaXRpb25zLWVuZCIpKTsgLy8kTk9OLU5MUy0xJAorCisJCS8vIFByZXBhcmUgZm9yIENyZWF0ZUNoaWxkIGl0ZW0gYWRkaXRpb24gb3IgcmVtb3ZhbC4KKwkJLy8KKwkJY3JlYXRlQ2hpbGRNZW51TWFuYWdlciA9IG5ldyBNZW51TWFuYWdlcihEZWZpbml0aW9uc0VkaXRQbHVnaW4uSU5TVEFOQ0UuZ2V0U3RyaW5nKCJfVUlfQ3JlYXRlQ2hpbGRfbWVudV9pdGVtIikpOyAvLyROT04tTkxTLTEkCisJCXN1Ym1lbnVNYW5hZ2VyLmluc2VydEJlZm9yZSgiYWRkaXRpb25zIiwgY3JlYXRlQ2hpbGRNZW51TWFuYWdlcik7IC8vJE5PTi1OTFMtMSQKKworCQkvLyBQcmVwYXJlIGZvciBDcmVhdGVTaWJsaW5nIGl0ZW0gYWRkaXRpb24gb3IgcmVtb3ZhbC4KKwkJLy8KKwkJY3JlYXRlU2libGluZ01lbnVNYW5hZ2VyID0gbmV3IE1lbnVNYW5hZ2VyKERlZmluaXRpb25zRWRpdFBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoIl9VSV9DcmVhdGVTaWJsaW5nX21lbnVfaXRlbSIpKTsgLy8kTk9OLU5MUy0xJAorCQlzdWJtZW51TWFuYWdlci5pbnNlcnRCZWZvcmUoImFkZGl0aW9ucyIsIGNyZWF0ZVNpYmxpbmdNZW51TWFuYWdlcik7IC8vJE5PTi1OTFMtMSQKKworCQkvLyBGb3JjZSBhbiB1cGRhdGUgYmVjYXVzZSBFY2xpcHNlIGhpZGVzIGVtcHR5IG1lbnVzIG5vdy4KKwkJLy8KKwkJc3VibWVudU1hbmFnZXIuYWRkTWVudUxpc3RlbmVyCisJCQkobmV3IElNZW51TGlzdGVuZXIoKSB7CisJCQkJIHB1YmxpYyB2b2lkIG1lbnVBYm91dFRvU2hvdyhJTWVudU1hbmFnZXIgbWVudU1hbmFnZXIpIHsKKwkJCQkJIG1lbnVNYW5hZ2VyLnVwZGF0ZUFsbCh0cnVlKTsKKwkJCQkgfQorCQkJIH0pOworCisJCWFkZEdsb2JhbEFjdGlvbnMoc3VibWVudU1hbmFnZXIpOworCX0KKworCS8qKgorCSAqIFdoZW4gdGhlIGFjdGl2ZSBlZGl0b3IgY2hhbmdlcywgdGhpcyByZW1lbWJlcnMgdGhlIGNoYW5nZSBhbmQgcmVnaXN0ZXJzIHdpdGggaXQgYXMgYSBzZWxlY3Rpb24gcHJvdmlkZXIuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgc2V0QWN0aXZlRWRpdG9yKElFZGl0b3JQYXJ0IHBhcnQpIHsKKwkJc3VwZXIuc2V0QWN0aXZlRWRpdG9yKHBhcnQpOworCQlhY3RpdmVFZGl0b3JQYXJ0ID0gcGFydDsKKworCQkvLyBTd2l0Y2ggdG8gdGhlIG5ldyBzZWxlY3Rpb24gcHJvdmlkZXIuCisJCS8vCisJCWlmIChzZWxlY3Rpb25Qcm92aWRlciAhPSBudWxsKSB7CisJCQlzZWxlY3Rpb25Qcm92aWRlci5yZW1vdmVTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIodGhpcyk7CisJCX0KKwkJaWYgKHBhcnQgPT0gbnVsbCkgeworCQkJc2VsZWN0aW9uUHJvdmlkZXIgPSBudWxsOworCQl9CisJCWVsc2UgeworCQkJc2VsZWN0aW9uUHJvdmlkZXIgPSBwYXJ0LmdldFNpdGUoKS5nZXRTZWxlY3Rpb25Qcm92aWRlcigpOworCQkJc2VsZWN0aW9uUHJvdmlkZXIuYWRkU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyKHRoaXMpOworCisJCQkvLyBGYWtlIGEgc2VsZWN0aW9uIGNoYW5nZWQgZXZlbnQgdG8gdXBkYXRlIHRoZSBtZW51cy4KKwkJCS8vCisJCQlpZiAoc2VsZWN0aW9uUHJvdmlkZXIuZ2V0U2VsZWN0aW9uKCkgIT0gbnVsbCkgeworCQkJCXNlbGVjdGlvbkNoYW5nZWQobmV3IFNlbGVjdGlvbkNoYW5nZWRFdmVudChzZWxlY3Rpb25Qcm92aWRlciwgc2VsZWN0aW9uUHJvdmlkZXIuZ2V0U2VsZWN0aW9uKCkpKTsKKwkJCX0KKwkJfQorCX0KKworCS8qKgorCSAqIFRoaXMgaW1wbGVtZW50cyB7QGxpbmsgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyfSwKKwkgKiBoYW5kbGluZyB7QGxpbmsgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5TZWxlY3Rpb25DaGFuZ2VkRXZlbnR9cyBieSBxdWVyeWluZyBmb3IgdGhlIGNoaWxkcmVuIGFuZCBzaWJsaW5ncworCSAqIHRoYXQgY2FuIGJlIGFkZGVkIHRvIHRoZSBzZWxlY3RlZCBvYmplY3QgYW5kIHVwZGF0aW5nIHRoZSBtZW51cyBhY2NvcmRpbmdseS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZWxlY3Rpb25DaGFuZ2VkKFNlbGVjdGlvbkNoYW5nZWRFdmVudCBldmVudCkgeworCQkvLyBSZW1vdmUgYW55IG1lbnUgaXRlbXMgZm9yIG9sZCBzZWxlY3Rpb24uCisJCS8vCisJCWlmIChjcmVhdGVDaGlsZE1lbnVNYW5hZ2VyICE9IG51bGwpIHsKKwkJCWRlcG9wdWxhdGVNYW5hZ2VyKGNyZWF0ZUNoaWxkTWVudU1hbmFnZXIsIGNyZWF0ZUNoaWxkQWN0aW9ucyk7CisJCX0KKwkJaWYgKGNyZWF0ZVNpYmxpbmdNZW51TWFuYWdlciAhPSBudWxsKSB7CisJCQlkZXBvcHVsYXRlTWFuYWdlcihjcmVhdGVTaWJsaW5nTWVudU1hbmFnZXIsIGNyZWF0ZVNpYmxpbmdBY3Rpb25zKTsKKwkJfQorCisJCS8vIFF1ZXJ5IHRoZSBuZXcgc2VsZWN0aW9uIGZvciBhcHByb3ByaWF0ZSBuZXcgY2hpbGQvc2libGluZyBkZXNjcmlwdG9ycworCQkvLworCQlDb2xsZWN0aW9uPD8+IG5ld0NoaWxkRGVzY3JpcHRvcnMgPSBudWxsOworCQlDb2xsZWN0aW9uPD8+IG5ld1NpYmxpbmdEZXNjcmlwdG9ycyA9IG51bGw7CisKKwkJSVNlbGVjdGlvbiBzZWxlY3Rpb24gPSBldmVudC5nZXRTZWxlY3Rpb24oKTsKKwkJaWYgKHNlbGVjdGlvbiBpbnN0YW5jZW9mIElTdHJ1Y3R1cmVkU2VsZWN0aW9uICYmICgoSVN0cnVjdHVyZWRTZWxlY3Rpb24pc2VsZWN0aW9uKS5zaXplKCkgPT0gMSkgeworCQkJT2JqZWN0IG9iamVjdCA9ICgoSVN0cnVjdHVyZWRTZWxlY3Rpb24pc2VsZWN0aW9uKS5nZXRGaXJzdEVsZW1lbnQoKTsKKworCQkJRWRpdGluZ0RvbWFpbiBkb21haW4gPSAoKElFZGl0aW5nRG9tYWluUHJvdmlkZXIpYWN0aXZlRWRpdG9yUGFydCkuZ2V0RWRpdGluZ0RvbWFpbigpOworCisJCQluZXdDaGlsZERlc2NyaXB0b3JzID0gZG9tYWluLmdldE5ld0NoaWxkRGVzY3JpcHRvcnMob2JqZWN0LCBudWxsKTsKKwkJCW5ld1NpYmxpbmdEZXNjcmlwdG9ycyA9IGRvbWFpbi5nZXROZXdDaGlsZERlc2NyaXB0b3JzKG51bGwsIG9iamVjdCk7CisJCX0KKworCQkvLyBHZW5lcmF0ZSBhY3Rpb25zIGZvciBzZWxlY3Rpb247IHBvcHVsYXRlIGFuZCByZWRyYXcgdGhlIG1lbnVzLgorCQkvLworCQljcmVhdGVDaGlsZEFjdGlvbnMgPSBnZW5lcmF0ZUNyZWF0ZUNoaWxkQWN0aW9ucyhuZXdDaGlsZERlc2NyaXB0b3JzLCBzZWxlY3Rpb24pOworCQljcmVhdGVTaWJsaW5nQWN0aW9ucyA9IGdlbmVyYXRlQ3JlYXRlU2libGluZ0FjdGlvbnMobmV3U2libGluZ0Rlc2NyaXB0b3JzLCBzZWxlY3Rpb24pOworCisJCWlmIChjcmVhdGVDaGlsZE1lbnVNYW5hZ2VyICE9IG51bGwpIHsKKwkJCXBvcHVsYXRlTWFuYWdlcihjcmVhdGVDaGlsZE1lbnVNYW5hZ2VyLCBjcmVhdGVDaGlsZEFjdGlvbnMsIG51bGwpOworCQkJY3JlYXRlQ2hpbGRNZW51TWFuYWdlci51cGRhdGUodHJ1ZSk7CisJCX0KKwkJaWYgKGNyZWF0ZVNpYmxpbmdNZW51TWFuYWdlciAhPSBudWxsKSB7CisJCQlwb3B1bGF0ZU1hbmFnZXIoY3JlYXRlU2libGluZ01lbnVNYW5hZ2VyLCBjcmVhdGVTaWJsaW5nQWN0aW9ucywgbnVsbCk7CisJCQljcmVhdGVTaWJsaW5nTWVudU1hbmFnZXIudXBkYXRlKHRydWUpOworCQl9CisJfQorCisJLyoqCisJICogVGhpcyBnZW5lcmF0ZXMgYSB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkuYWN0aW9uLkNyZWF0ZUNoaWxkQWN0aW9ufSBmb3IgZWFjaCBvYmplY3QgaW4gPGNvZGU+ZGVzY3JpcHRvcnM8L2NvZGU+LAorCSAqIGFuZCByZXR1cm5zIHRoZSBjb2xsZWN0aW9uIG9mIHRoZXNlIGFjdGlvbnMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIENvbGxlY3Rpb248SUFjdGlvbj4gZ2VuZXJhdGVDcmVhdGVDaGlsZEFjdGlvbnMoQ29sbGVjdGlvbjw/PiBkZXNjcmlwdG9ycywgSVNlbGVjdGlvbiBzZWxlY3Rpb24pIHsKKwkJQ29sbGVjdGlvbjxJQWN0aW9uPiBhY3Rpb25zID0gbmV3IEFycmF5TGlzdDxJQWN0aW9uPigpOworCQlpZiAoZGVzY3JpcHRvcnMgIT0gbnVsbCkgeworCQkJZm9yIChPYmplY3QgZGVzY3JpcHRvciA6IGRlc2NyaXB0b3JzKSB7CisJCQkJYWN0aW9ucy5hZGQobmV3IENyZWF0ZUNoaWxkQWN0aW9uKGFjdGl2ZUVkaXRvclBhcnQsIHNlbGVjdGlvbiwgZGVzY3JpcHRvcikpOworCQkJfQorCQl9CisJCXJldHVybiBhY3Rpb25zOworCX0KKworCS8qKgorCSAqIFRoaXMgZ2VuZXJhdGVzIGEge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmFjdGlvbi5DcmVhdGVTaWJsaW5nQWN0aW9ufSBmb3IgZWFjaCBvYmplY3QgaW4gPGNvZGU+ZGVzY3JpcHRvcnM8L2NvZGU+LAorCSAqIGFuZCByZXR1cm5zIHRoZSBjb2xsZWN0aW9uIG9mIHRoZXNlIGFjdGlvbnMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIENvbGxlY3Rpb248SUFjdGlvbj4gZ2VuZXJhdGVDcmVhdGVTaWJsaW5nQWN0aW9ucyhDb2xsZWN0aW9uPD8+IGRlc2NyaXB0b3JzLCBJU2VsZWN0aW9uIHNlbGVjdGlvbikgeworCQlDb2xsZWN0aW9uPElBY3Rpb24+IGFjdGlvbnMgPSBuZXcgQXJyYXlMaXN0PElBY3Rpb24+KCk7CisJCWlmIChkZXNjcmlwdG9ycyAhPSBudWxsKSB7CisJCQlmb3IgKE9iamVjdCBkZXNjcmlwdG9yIDogZGVzY3JpcHRvcnMpIHsKKwkJCQlhY3Rpb25zLmFkZChuZXcgQ3JlYXRlU2libGluZ0FjdGlvbihhY3RpdmVFZGl0b3JQYXJ0LCBzZWxlY3Rpb24sIGRlc2NyaXB0b3IpKTsKKwkJCX0KKwkJfQorCQlyZXR1cm4gYWN0aW9uczsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHBvcHVsYXRlcyB0aGUgc3BlY2lmaWVkIDxjb2RlPm1hbmFnZXI8L2NvZGU+IHdpdGgge0BsaW5rIG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5BY3Rpb25Db250cmlidXRpb25JdGVtfXMKKwkgKiBiYXNlZCBvbiB0aGUge0BsaW5rIG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JQWN0aW9ufXMgY29udGFpbmVkIGluIHRoZSA8Y29kZT5hY3Rpb25zPC9jb2RlPiBjb2xsZWN0aW9uLAorCSAqIGJ5IGluc2VydGluZyB0aGVtIGJlZm9yZSB0aGUgc3BlY2lmaWVkIGNvbnRyaWJ1dGlvbiBpdGVtIDxjb2RlPmNvbnRyaWJ1dGlvbklEPC9jb2RlPi4KKwkgKiBJZiA8Y29kZT5jb250cmlidXRpb25JRDwvY29kZT4gaXMgPGNvZGU+bnVsbDwvY29kZT4sIHRoZXkgYXJlIHNpbXBseSBhZGRlZC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBwb3B1bGF0ZU1hbmFnZXIoSUNvbnRyaWJ1dGlvbk1hbmFnZXIgbWFuYWdlciwgQ29sbGVjdGlvbjw/IGV4dGVuZHMgSUFjdGlvbj4gYWN0aW9ucywgU3RyaW5nIGNvbnRyaWJ1dGlvbklEKSB7CisJCWlmIChhY3Rpb25zICE9IG51bGwpIHsKKwkJCWZvciAoSUFjdGlvbiBhY3Rpb24gOiBhY3Rpb25zKSB7CisJCQkJaWYgKGNvbnRyaWJ1dGlvbklEICE9IG51bGwpIHsKKwkJCQkJbWFuYWdlci5pbnNlcnRCZWZvcmUoY29udHJpYnV0aW9uSUQsIGFjdGlvbik7CisJCQkJfQorCQkJCWVsc2UgeworCQkJCQltYW5hZ2VyLmFkZChhY3Rpb24pOworCQkJCX0KKwkJCX0KKwkJfQorCX0KKwkJCisJLyoqCisJICogVGhpcyByZW1vdmVzIGZyb20gdGhlIHNwZWNpZmllZCA8Y29kZT5tYW5hZ2VyPC9jb2RlPiBhbGwge0BsaW5rIG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5BY3Rpb25Db250cmlidXRpb25JdGVtfXMKKwkgKiBiYXNlZCBvbiB0aGUge0BsaW5rIG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JQWN0aW9ufXMgY29udGFpbmVkIGluIHRoZSA8Y29kZT5hY3Rpb25zPC9jb2RlPiBjb2xsZWN0aW9uLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIGRlcG9wdWxhdGVNYW5hZ2VyKElDb250cmlidXRpb25NYW5hZ2VyIG1hbmFnZXIsIENvbGxlY3Rpb248PyBleHRlbmRzIElBY3Rpb24+IGFjdGlvbnMpIHsKKwkJaWYgKGFjdGlvbnMgIT0gbnVsbCkgeworCQkJSUNvbnRyaWJ1dGlvbkl0ZW1bXSBpdGVtcyA9IG1hbmFnZXIuZ2V0SXRlbXMoKTsKKwkJCWZvciAoaW50IGkgPSAwOyBpIDwgaXRlbXMubGVuZ3RoOyBpKyspIHsKKwkJCQkvLyBMb29rIGludG8gU3ViQ29udHJpYnV0aW9uSXRlbXMKKwkJCQkvLworCQkJCUlDb250cmlidXRpb25JdGVtIGNvbnRyaWJ1dGlvbkl0ZW0gPSBpdGVtc1tpXTsKKwkJCQl3aGlsZSAoY29udHJpYnV0aW9uSXRlbSBpbnN0YW5jZW9mIFN1YkNvbnRyaWJ1dGlvbkl0ZW0pIHsKKwkJCQkJY29udHJpYnV0aW9uSXRlbSA9ICgoU3ViQ29udHJpYnV0aW9uSXRlbSljb250cmlidXRpb25JdGVtKS5nZXRJbm5lckl0ZW0oKTsKKwkJCQl9CisKKwkJCQkvLyBEZWxldGUgdGhlIEFjdGlvbkNvbnRyaWJ1dGlvbkl0ZW1zIHdpdGggbWF0Y2hpbmcgYWN0aW9uLgorCQkJCS8vCisJCQkJaWYgKGNvbnRyaWJ1dGlvbkl0ZW0gaW5zdGFuY2VvZiBBY3Rpb25Db250cmlidXRpb25JdGVtKSB7CisJCQkJCUlBY3Rpb24gYWN0aW9uID0gKChBY3Rpb25Db250cmlidXRpb25JdGVtKWNvbnRyaWJ1dGlvbkl0ZW0pLmdldEFjdGlvbigpOworCQkJCQlpZiAoYWN0aW9ucy5jb250YWlucyhhY3Rpb24pKSB7CisJCQkJCQltYW5hZ2VyLnJlbW92ZShjb250cmlidXRpb25JdGVtKTsKKwkJCQkJfQorCQkJCX0KKwkJCX0KKwkJfQorCX0KKworCS8qKgorCSAqIFRoaXMgcG9wdWxhdGVzIHRoZSBwb3AtdXAgbWVudSBiZWZvcmUgaXQgYXBwZWFycy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBtZW51QWJvdXRUb1Nob3coSU1lbnVNYW5hZ2VyIG1lbnVNYW5hZ2VyKSB7CisJCXN1cGVyLm1lbnVBYm91dFRvU2hvdyhtZW51TWFuYWdlcik7CisJCU1lbnVNYW5hZ2VyIHN1Ym1lbnVNYW5hZ2VyID0gbnVsbDsKKworCQlzdWJtZW51TWFuYWdlciA9IG5ldyBNZW51TWFuYWdlcihEZWZpbml0aW9uc0VkaXRQbHVnaW4uSU5TVEFOQ0UuZ2V0U3RyaW5nKCJfVUlfQ3JlYXRlQ2hpbGRfbWVudV9pdGVtIikpOyAvLyROT04tTkxTLTEkCisJCXBvcHVsYXRlTWFuYWdlcihzdWJtZW51TWFuYWdlciwgY3JlYXRlQ2hpbGRBY3Rpb25zLCBudWxsKTsKKwkJbWVudU1hbmFnZXIuaW5zZXJ0QmVmb3JlKCJlZGl0Iiwgc3VibWVudU1hbmFnZXIpOyAvLyROT04tTkxTLTEkCisKKwkJc3VibWVudU1hbmFnZXIgPSBuZXcgTWVudU1hbmFnZXIoRGVmaW5pdGlvbnNFZGl0UGx1Z2luLklOU1RBTkNFLmdldFN0cmluZygiX1VJX0NyZWF0ZVNpYmxpbmdfbWVudV9pdGVtIikpOyAvLyROT04tTkxTLTEkCisJCXBvcHVsYXRlTWFuYWdlcihzdWJtZW51TWFuYWdlciwgY3JlYXRlU2libGluZ0FjdGlvbnMsIG51bGwpOworCQltZW51TWFuYWdlci5pbnNlcnRCZWZvcmUoImVkaXQiLCBzdWJtZW51TWFuYWdlcik7IC8vJE5PTi1OTFMtMSQKKwl9CisKKwkvKioKKwkgKiBUaGlzIGluc2VydHMgZ2xvYmFsIGFjdGlvbnMgYmVmb3JlIHRoZSAiYWRkaXRpb25zLWVuZCIgc2VwYXJhdG9yLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIGFkZEdsb2JhbEFjdGlvbnMoSU1lbnVNYW5hZ2VyIG1lbnVNYW5hZ2VyKSB7CisJCW1lbnVNYW5hZ2VyLmluc2VydEFmdGVyKCJhZGRpdGlvbnMtZW5kIiwgbmV3IFNlcGFyYXRvcigidWktYWN0aW9ucyIpKTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCisJCW1lbnVNYW5hZ2VyLmluc2VydEFmdGVyKCJ1aS1hY3Rpb25zIiwgc2hvd1Byb3BlcnRpZXNWaWV3QWN0aW9uKTsgLy8kTk9OLU5MUy0xJAorCisJCXJlZnJlc2hWaWV3ZXJBY3Rpb24uc2V0RW5hYmxlZChyZWZyZXNoVmlld2VyQWN0aW9uLmlzRW5hYmxlZCgpKTsJCQorCQltZW51TWFuYWdlci5pbnNlcnRBZnRlcigidWktYWN0aW9ucyIsIHJlZnJlc2hWaWV3ZXJBY3Rpb24pOyAvLyROT04tTkxTLTEkCisKKwkJc3VwZXIuYWRkR2xvYmFsQWN0aW9ucyhtZW51TWFuYWdlcik7CisJfQorCisJLyoqCisJICogVGhpcyBlbnN1cmVzIHRoYXQgYSBkZWxldGUgYWN0aW9uIHdpbGwgY2xlYW4gdXAgYWxsIHJlZmVyZW5jZXMgdG8gZGVsZXRlZCBvYmplY3RzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCBib29sZWFuIHJlbW92ZUFsbFJlZmVyZW5jZXNPbkRlbGV0ZSgpIHsKKwkJcmV0dXJuIHRydWU7CisJfQorCit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL2VkZ2VzL3ByZXNlbnRhdGlvbi9FZGdlc0VkaXRvci5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL2VkZ2VzL3ByZXNlbnRhdGlvbi9FZGdlc0VkaXRvci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ2ZWRjNGMKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvZWRnZXMvcHJlc2VudGF0aW9uL0VkZ2VzRWRpdG9yLmphdmEKQEAgLTAsMCArMSwxNTMwIEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuZWRnZXMucHJlc2VudGF0aW9uOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247CitpbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbTsKK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OworaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOworaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uczsKK2ltcG9ydCBqYXZhLnV0aWwuRXZlbnRPYmplY3Q7CitpbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7CitpbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOworaW1wb3J0IGphdmEudXRpbC5MaW5rZWRIYXNoTWFwOworaW1wb3J0IGphdmEudXRpbC5MaXN0OworaW1wb3J0IGphdmEudXRpbC5NYXA7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JRmlsZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JTWFya2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklSZXNvdXJjZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUmVzb3VyY2VDaGFuZ2VFdmVudDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUmVzb3VyY2VDaGFuZ2VMaXN0ZW5lcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUmVzb3VyY2VEZWx0YTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUmVzb3VyY2VEZWx0YVZpc2l0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuUmVzb3VyY2VzUGx1Z2luOworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5Db3JlRXhjZXB0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUGF0aDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVByb2dyZXNzTW9uaXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuTnVsbFByb2dyZXNzTW9uaXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLmNvbW1hbmQuQmFzaWNDb21tYW5kU3RhY2s7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5jb21tYW5kLkNvbW1hbmQ7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5jb21tYW5kLkNvbW1hbmRTdGFjazsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLmNvbW1hbmQuQ29tbWFuZFN0YWNrTGlzdGVuZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udWkuTWFya2VySGVscGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udWkuZWRpdG9yLlByb2JsZW1FZGl0b3JQYXJ0OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udWkudmlld2VyLklWaWV3ZXJQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuQmFzaWNEaWFnbm9zdGljOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5EaWFnbm9zdGljOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5VUkk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3Q7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVWYWxpZGF0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnByb3ZpZGVyLkVjb3JlSXRlbVByb3ZpZGVyQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnJlc291cmNlLlJlc291cmNlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5yZXNvdXJjZS5SZXNvdXJjZVNldDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUudXRpbC5FQ29udGVudEFkYXB0ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnV0aWwuRWNvcmVVdGlsOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LmRvbWFpbi5BZGFwdGVyRmFjdG9yeUVkaXRpbmdEb21haW47CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQuZG9tYWluLkVkaXRpbmdEb21haW47CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQuZG9tYWluLklFZGl0aW5nRG9tYWluUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuQWRhcHRlckZhY3RvcnlJdGVtRGVsZWdhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkNvbXBvc2VkQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuUmVmbGVjdGl2ZUl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLnJlc291cmNlLlJlc291cmNlSXRlbVByb3ZpZGVyQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkuYWN0aW9uLkVkaXRpbmdEb21haW5BY3Rpb25CYXJDb250cmlidXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5jZWxsZWRpdG9yLkFkYXB0ZXJGYWN0b3J5VHJlZUVkaXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5kbmQuRWRpdGluZ0RvbWFpblZpZXdlckRyb3BBZGFwdGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmRuZC5Mb2NhbFRyYW5zZmVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmRuZC5WaWV3ZXJEcmFnQWRhcHRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5wcm92aWRlci5BZGFwdGVyRmFjdG9yeUNvbnRlbnRQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5wcm92aWRlci5BZGFwdGVyRmFjdG9yeUxhYmVsUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkucHJvdmlkZXIuVW53cmFwcGluZ1NlbGVjdGlvblByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLnV0aWwuRWRpdFVJTWFya2VySGVscGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLnV0aWwuRWRpdFVJVXRpbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS52aWV3LkV4dGVuZGVkUHJvcGVydHlTaGVldFBhZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklNZW51TGlzdGVuZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklNZW51TWFuYWdlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSVN0YXR1c0xpbmVNYW5hZ2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JVG9vbEJhck1hbmFnZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLk1lbnVNYW5hZ2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5TZXBhcmF0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuZGlhbG9ncy5NZXNzYWdlRGlhbG9nOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmRpYWxvZ3MuUHJvZ3Jlc3NNb25pdG9yRGlhbG9nOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU3RydWN0dXJlZFNlbGVjdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlNlbGVjdGlvbkNoYW5nZWRFdmVudDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlN0cnVjdHVyZWRTZWxlY3Rpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5TdHJ1Y3R1cmVkVmlld2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuVHJlZVZpZXdlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlZpZXdlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLnByb3ZpZGVyLkNvbW1vbkl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5wcm92aWRlci5HcmFwaEl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5wcm92aWRlci5Nb2RlbEl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5wcm92aWRlci5Nb2RpZmllckl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zY2VuYXJpby5wcm92aWRlci5TY2VuYXJpb0l0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zZXF1ZW5jZXIucHJvdmlkZXIuU2VxdWVuY2VySXRlbVByb3ZpZGVyQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNvbHZlci5wcm92aWRlci5Tb2x2ZXJJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmVkZ2VzLnByb3ZpZGVyLkRlZmluaXRpb25zRWRpdFBsdWdpbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmVkZ2VzLnByb3ZpZGVyLkVkZ2VzSXRlbVByb3ZpZGVyQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMucHJvdmlkZXIuTGFiZWxzSXRlbVByb3ZpZGVyQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5ub2Rlcy5wcm92aWRlci5Ob2Rlc0l0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMudHlwZXMucHJvdmlkZXIuVHlwZXNJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuU1dUOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5jdXN0b20uQ1RhYkZvbGRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZG5kLkRORDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZG5kLlRyYW5zZmVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuQ29udHJvbEFkYXB0ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5Db250cm9sRXZlbnQ7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmdyYXBoaWNzLlBvaW50OworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5NZW51OworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlRyZWU7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuSUFjdGlvbkJhcnM7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuSUVkaXRvcklucHV0OworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklFZGl0b3JQYXJ0OworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklFZGl0b3JTaXRlOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklQYXJ0TGlzdGVuZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaFBhcnQ7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuUGFydEluaXRFeGNlcHRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuYWN0aW9ucy5Xb3Jrc3BhY2VNb2RpZnlPcGVyYXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuZGlhbG9ncy5TYXZlQXNEaWFsb2c7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuaWRlLklHb3RvTWFya2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLnBhcnQuRmlsZUVkaXRvcklucHV0OworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLnBhcnQuTXVsdGlQYWdlRWRpdG9yUGFydDsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS52aWV3cy5jb250ZW50b3V0bGluZS5Db250ZW50T3V0bGluZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS52aWV3cy5jb250ZW50b3V0bGluZS5Db250ZW50T3V0bGluZVBhZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkudmlld3MuY29udGVudG91dGxpbmUuSUNvbnRlbnRPdXRsaW5lUGFnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS52aWV3cy5wcm9wZXJ0aWVzLklQcm9wZXJ0eVNoZWV0UGFnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS52aWV3cy5wcm9wZXJ0aWVzLlByb3BlcnR5U2hlZXQ7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkudmlld3MucHJvcGVydGllcy5Qcm9wZXJ0eVNoZWV0UGFnZTsKKworCisvKioKKyAqIFRoaXMgaXMgYW4gZXhhbXBsZSBvZiBhIEVkZ2VzIG1vZGVsIGVkaXRvci4KKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIEVkZ2VzRWRpdG9yCisJZXh0ZW5kcyBNdWx0aVBhZ2VFZGl0b3JQYXJ0CisJaW1wbGVtZW50cyBJRWRpdGluZ0RvbWFpblByb3ZpZGVyLCBJU2VsZWN0aW9uUHJvdmlkZXIsIElNZW51TGlzdGVuZXIsIElWaWV3ZXJQcm92aWRlciwgSUdvdG9NYXJrZXIgeworCS8qKgorCSAqIFRoaXMga2VlcHMgdHJhY2sgb2YgdGhlIGVkaXRpbmcgZG9tYWluIHRoYXQgaXMgdXNlZCB0byB0cmFjayBhbGwgY2hhbmdlcyB0byB0aGUgbW9kZWwuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIEFkYXB0ZXJGYWN0b3J5RWRpdGluZ0RvbWFpbiBlZGl0aW5nRG9tYWluOworCisJLyoqCisJICogVGhpcyBpcyB0aGUgb25lIGFkYXB0ZXIgZmFjdG9yeSB1c2VkIGZvciBwcm92aWRpbmcgdmlld3Mgb2YgdGhlIG1vZGVsLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBDb21wb3NlZEFkYXB0ZXJGYWN0b3J5IGFkYXB0ZXJGYWN0b3J5OworCisJLyoqCisJICogVGhpcyBpcyB0aGUgY29udGVudCBvdXRsaW5lIHBhZ2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIElDb250ZW50T3V0bGluZVBhZ2UgY29udGVudE91dGxpbmVQYWdlOworCisJLyoqCisJICogVGhpcyBpcyBhIGtsdWRnZS4uLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBJU3RhdHVzTGluZU1hbmFnZXIgY29udGVudE91dGxpbmVTdGF0dXNMaW5lTWFuYWdlcjsKKworCS8qKgorCSAqIFRoaXMgaXMgdGhlIGNvbnRlbnQgb3V0bGluZSBwYWdlJ3Mgdmlld2VyLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBUcmVlVmlld2VyIGNvbnRlbnRPdXRsaW5lVmlld2VyOworCisJLyoqCisJICogVGhpcyBpcyB0aGUgcHJvcGVydHkgc2hlZXQgcGFnZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgUHJvcGVydHlTaGVldFBhZ2UgcHJvcGVydHlTaGVldFBhZ2U7CisKKwkvKioKKwkgKiBUaGlzIGlzIHRoZSB2aWV3ZXIgdGhhdCBzaGFkb3dzIHRoZSBzZWxlY3Rpb24gaW4gdGhlIGNvbnRlbnQgb3V0bGluZS4KKwkgKiBUaGUgcGFyZW50IHJlbGF0aW9uIG11c3QgYmUgY29ycmVjdGx5IGRlZmluZWQgZm9yIHRoaXMgdG8gd29yay4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgVHJlZVZpZXdlciBzZWxlY3Rpb25WaWV3ZXI7CisKKwkvKioKKwkgKiBUaGlzIGtlZXBzIHRyYWNrIG9mIHRoZSBhY3RpdmUgY29udGVudCB2aWV3ZXIsIHdoaWNoIG1heSBiZSBlaXRoZXIgb25lIG9mIHRoZSB2aWV3ZXJzIGluIHRoZSBwYWdlcyBvciB0aGUgY29udGVudCBvdXRsaW5lIHZpZXdlci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgVmlld2VyIGN1cnJlbnRWaWV3ZXI7CisKKwkvKioKKwkgKiBUaGlzIGxpc3RlbnMgdG8gd2hpY2ggZXZlciB2aWV3ZXIgaXMgYWN0aXZlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBJU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyIHNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcjsKKworCS8qKgorCSAqIFRoaXMga2VlcHMgdHJhY2sgb2YgYWxsIHRoZSB7QGxpbmsgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyfXMgdGhhdCBhcmUgbGlzdGVuaW5nIHRvIHRoaXMgZWRpdG9yLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBDb2xsZWN0aW9uPElTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXI+IHNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcnMgPSBuZXcgQXJyYXlMaXN0PElTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXI+KCk7CisKKwkvKioKKwkgKiBUaGlzIGtlZXBzIHRyYWNrIG9mIHRoZSBzZWxlY3Rpb24gb2YgdGhlIGVkaXRvciBhcyBhIHdob2xlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBJU2VsZWN0aW9uIGVkaXRvclNlbGVjdGlvbiA9IFN0cnVjdHVyZWRTZWxlY3Rpb24uRU1QVFk7CisKKwkvKioKKwkgKiBUaGUgTWFya2VySGVscGVyIGlzIHJlc3BvbnNpYmxlIGZvciBjcmVhdGluZyB3b3Jrc3BhY2UgcmVzb3VyY2UgbWFya2VycyBwcmVzZW50ZWQKKwkgKiBpbiBFY2xpcHNlJ3MgUHJvYmxlbXMgVmlldy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgTWFya2VySGVscGVyIG1hcmtlckhlbHBlciA9IG5ldyBFZGl0VUlNYXJrZXJIZWxwZXIoKTsKKworCS8qKgorCSAqIFRoaXMgbGlzdGVucyBmb3Igd2hlbiB0aGUgb3V0bGluZSBiZWNvbWVzIGFjdGl2ZQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBJUGFydExpc3RlbmVyIHBhcnRMaXN0ZW5lciA9CisJCW5ldyBJUGFydExpc3RlbmVyKCkgeworCQkJcHVibGljIHZvaWQgcGFydEFjdGl2YXRlZChJV29ya2JlbmNoUGFydCBwKSB7CisJCQkJaWYgKHAgaW5zdGFuY2VvZiBDb250ZW50T3V0bGluZSkgeworCQkJCQlpZiAoKChDb250ZW50T3V0bGluZSlwKS5nZXRDdXJyZW50UGFnZSgpID09IGNvbnRlbnRPdXRsaW5lUGFnZSkgeworCQkJCQkJZ2V0QWN0aW9uQmFyQ29udHJpYnV0b3IoKS5zZXRBY3RpdmVFZGl0b3IoRWRnZXNFZGl0b3IudGhpcyk7CisKKwkJCQkJCXNldEN1cnJlbnRWaWV3ZXIoY29udGVudE91dGxpbmVWaWV3ZXIpOworCQkJCQl9CisJCQkJfQorCQkJCWVsc2UgaWYgKHAgaW5zdGFuY2VvZiBQcm9wZXJ0eVNoZWV0KSB7CisJCQkJCWlmICgoKFByb3BlcnR5U2hlZXQpcCkuZ2V0Q3VycmVudFBhZ2UoKSA9PSBwcm9wZXJ0eVNoZWV0UGFnZSkgeworCQkJCQkJZ2V0QWN0aW9uQmFyQ29udHJpYnV0b3IoKS5zZXRBY3RpdmVFZGl0b3IoRWRnZXNFZGl0b3IudGhpcyk7CisJCQkJCQloYW5kbGVBY3RpdmF0ZSgpOworCQkJCQl9CisJCQkJfQorCQkJCWVsc2UgaWYgKHAgPT0gRWRnZXNFZGl0b3IudGhpcykgeworCQkJCQloYW5kbGVBY3RpdmF0ZSgpOworCQkJCX0KKwkJCX0KKwkJCXB1YmxpYyB2b2lkIHBhcnRCcm91Z2h0VG9Ub3AoSVdvcmtiZW5jaFBhcnQgcCkgeworCQkJCS8vIElnbm9yZS4KKwkJCX0KKwkJCXB1YmxpYyB2b2lkIHBhcnRDbG9zZWQoSVdvcmtiZW5jaFBhcnQgcCkgeworCQkJCS8vIElnbm9yZS4KKwkJCX0KKwkJCXB1YmxpYyB2b2lkIHBhcnREZWFjdGl2YXRlZChJV29ya2JlbmNoUGFydCBwKSB7CisJCQkJLy8gSWdub3JlLgorCQkJfQorCQkJcHVibGljIHZvaWQgcGFydE9wZW5lZChJV29ya2JlbmNoUGFydCBwKSB7CisJCQkJLy8gSWdub3JlLgorCQkJfQorCQl9OworCisJLyoqCisJICogUmVzb3VyY2VzIHRoYXQgaGF2ZSBiZWVuIHJlbW92ZWQgc2luY2UgbGFzdCBhY3RpdmF0aW9uLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBDb2xsZWN0aW9uPFJlc291cmNlPiByZW1vdmVkUmVzb3VyY2VzID0gbmV3IEFycmF5TGlzdDxSZXNvdXJjZT4oKTsKKworCS8qKgorCSAqIFJlc291cmNlcyB0aGF0IGhhdmUgYmVlbiBjaGFuZ2VkIHNpbmNlIGxhc3QgYWN0aXZhdGlvbi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgQ29sbGVjdGlvbjxSZXNvdXJjZT4gY2hhbmdlZFJlc291cmNlcyA9IG5ldyBBcnJheUxpc3Q8UmVzb3VyY2U+KCk7CisKKwkvKioKKwkgKiBSZXNvdXJjZXMgdGhhdCBoYXZlIGJlZW4gc2F2ZWQuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIENvbGxlY3Rpb248UmVzb3VyY2U+IHNhdmVkUmVzb3VyY2VzID0gbmV3IEFycmF5TGlzdDxSZXNvdXJjZT4oKTsKKworCS8qKgorCSAqIE1hcCB0byBzdG9yZSB0aGUgZGlhZ25vc3RpYyBhc3NvY2lhdGVkIHdpdGggYSByZXNvdXJjZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgTWFwPFJlc291cmNlLCBEaWFnbm9zdGljPiByZXNvdXJjZVRvRGlhZ25vc3RpY01hcCA9IG5ldyBMaW5rZWRIYXNoTWFwPFJlc291cmNlLCBEaWFnbm9zdGljPigpOworCisJLyoqCisJICogQ29udHJvbHMgd2hldGhlciB0aGUgcHJvYmxlbSBpbmRpY2F0aW9uIHNob3VsZCBiZSB1cGRhdGVkLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBib29sZWFuIHVwZGF0ZVByb2JsZW1JbmRpY2F0aW9uID0gdHJ1ZTsKKworCS8qKgorCSAqIEFkYXB0ZXIgdXNlZCB0byB1cGRhdGUgdGhlIHByb2JsZW0gaW5kaWNhdGlvbiB3aGVuIHJlc291cmNlcyBhcmUgZGVtYW5kZWQgbG9hZGVkLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBFQ29udGVudEFkYXB0ZXIgcHJvYmxlbUluZGljYXRpb25BZGFwdGVyID0gCisJCW5ldyBFQ29udGVudEFkYXB0ZXIoKSB7CisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyB2b2lkIG5vdGlmeUNoYW5nZWQoTm90aWZpY2F0aW9uIG5vdGlmaWNhdGlvbikgeworCQkJCWlmIChub3RpZmljYXRpb24uZ2V0Tm90aWZpZXIoKSBpbnN0YW5jZW9mIFJlc291cmNlKSB7CisJCQkJCXN3aXRjaCAobm90aWZpY2F0aW9uLmdldEZlYXR1cmVJRChSZXNvdXJjZS5jbGFzcykpIHsKKwkJCQkJCWNhc2UgUmVzb3VyY2UuUkVTT1VSQ0VfX0lTX0xPQURFRDoKKwkJCQkJCWNhc2UgUmVzb3VyY2UuUkVTT1VSQ0VfX0VSUk9SUzoKKwkJCQkJCWNhc2UgUmVzb3VyY2UuUkVTT1VSQ0VfX1dBUk5JTkdTOiB7CisJCQkJCQkJUmVzb3VyY2UgcmVzb3VyY2UgPSAoUmVzb3VyY2Upbm90aWZpY2F0aW9uLmdldE5vdGlmaWVyKCk7CisJCQkJCQkJRGlhZ25vc3RpYyBkaWFnbm9zdGljID0gYW5hbHl6ZVJlc291cmNlUHJvYmxlbXMocmVzb3VyY2UsIG51bGwpOworCQkJCQkJCWlmIChkaWFnbm9zdGljLmdldFNldmVyaXR5KCkgIT0gRGlhZ25vc3RpYy5PSykgeworCQkJCQkJCQlyZXNvdXJjZVRvRGlhZ25vc3RpY01hcC5wdXQocmVzb3VyY2UsIGRpYWdub3N0aWMpOworCQkJCQkJCX0KKwkJCQkJCQllbHNlIHsKKwkJCQkJCQkJcmVzb3VyY2VUb0RpYWdub3N0aWNNYXAucmVtb3ZlKHJlc291cmNlKTsKKwkJCQkJCQl9CisKKwkJCQkJCQlpZiAodXBkYXRlUHJvYmxlbUluZGljYXRpb24pIHsKKwkJCQkJCQkJZ2V0U2l0ZSgpLmdldFNoZWxsKCkuZ2V0RGlzcGxheSgpLmFzeW5jRXhlYworCQkJCQkJCQkJKG5ldyBSdW5uYWJsZSgpIHsKKwkJCQkJCQkJCQkgcHVibGljIHZvaWQgcnVuKCkgeworCQkJCQkJCQkJCQkgdXBkYXRlUHJvYmxlbUluZGljYXRpb24oKTsKKwkJCQkJCQkJCQkgfQorCQkJCQkJCQkJIH0pOworCQkJCQkJCX0KKwkJCQkJCQlicmVhazsKKwkJCQkJCX0KKwkJCQkJfQorCQkJCX0KKwkJCQllbHNlIHsKKwkJCQkJc3VwZXIubm90aWZ5Q2hhbmdlZChub3RpZmljYXRpb24pOworCQkJCX0KKwkJCX0KKworCQkJQE92ZXJyaWRlCisJCQlwcm90ZWN0ZWQgdm9pZCBzZXRUYXJnZXQoUmVzb3VyY2UgdGFyZ2V0KSB7CisJCQkJYmFzaWNTZXRUYXJnZXQodGFyZ2V0KTsKKwkJCX0KKworCQkJQE92ZXJyaWRlCisJCQlwcm90ZWN0ZWQgdm9pZCB1bnNldFRhcmdldChSZXNvdXJjZSB0YXJnZXQpIHsKKwkJCQliYXNpY1Vuc2V0VGFyZ2V0KHRhcmdldCk7CisJCQl9CisJCX07CisKKwkvKioKKwkgKiBUaGlzIGxpc3RlbnMgZm9yIHdvcmtzcGFjZSBjaGFuZ2VzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBJUmVzb3VyY2VDaGFuZ2VMaXN0ZW5lciByZXNvdXJjZUNoYW5nZUxpc3RlbmVyID0KKwkJbmV3IElSZXNvdXJjZUNoYW5nZUxpc3RlbmVyKCkgeworCQkJcHVibGljIHZvaWQgcmVzb3VyY2VDaGFuZ2VkKElSZXNvdXJjZUNoYW5nZUV2ZW50IGV2ZW50KSB7CisJCQkJSVJlc291cmNlRGVsdGEgZGVsdGEgPSBldmVudC5nZXREZWx0YSgpOworCQkJCXRyeSB7CisJCQkJCWNsYXNzIFJlc291cmNlRGVsdGFWaXNpdG9yIGltcGxlbWVudHMgSVJlc291cmNlRGVsdGFWaXNpdG9yIHsKKwkJCQkJCXByb3RlY3RlZCBSZXNvdXJjZVNldCByZXNvdXJjZVNldCA9IGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKTsKKwkJCQkJCXByb3RlY3RlZCBDb2xsZWN0aW9uPFJlc291cmNlPiBjaGFuZ2VkUmVzb3VyY2VzID0gbmV3IEFycmF5TGlzdDxSZXNvdXJjZT4oKTsKKwkJCQkJCXByb3RlY3RlZCBDb2xsZWN0aW9uPFJlc291cmNlPiByZW1vdmVkUmVzb3VyY2VzID0gbmV3IEFycmF5TGlzdDxSZXNvdXJjZT4oKTsKKworCQkJCQkJcHVibGljIGJvb2xlYW4gdmlzaXQoSVJlc291cmNlRGVsdGEgZGVsdGEpIHsKKwkJCQkJCQlpZiAoZGVsdGEuZ2V0UmVzb3VyY2UoKS5nZXRUeXBlKCkgPT0gSVJlc291cmNlLkZJTEUpIHsKKwkJCQkJCQkJaWYgKGRlbHRhLmdldEtpbmQoKSA9PSBJUmVzb3VyY2VEZWx0YS5SRU1PVkVEIHx8CisJCQkJCQkJCSAgICBkZWx0YS5nZXRLaW5kKCkgPT0gSVJlc291cmNlRGVsdGEuQ0hBTkdFRCAmJiBkZWx0YS5nZXRGbGFncygpICE9IElSZXNvdXJjZURlbHRhLk1BUktFUlMpIHsKKwkJCQkJCQkJCVJlc291cmNlIHJlc291cmNlID0gcmVzb3VyY2VTZXQuZ2V0UmVzb3VyY2UoVVJJLmNyZWF0ZVBsYXRmb3JtUmVzb3VyY2VVUkkoZGVsdGEuZ2V0RnVsbFBhdGgoKS50b1N0cmluZygpLCB0cnVlKSwgZmFsc2UpOworCQkJCQkJCQkJaWYgKHJlc291cmNlICE9IG51bGwpIHsKKwkJCQkJCQkJCQlpZiAoZGVsdGEuZ2V0S2luZCgpID09IElSZXNvdXJjZURlbHRhLlJFTU9WRUQpIHsKKwkJCQkJCQkJCQkJcmVtb3ZlZFJlc291cmNlcy5hZGQocmVzb3VyY2UpOworCQkJCQkJCQkJCX0KKwkJCQkJCQkJCQllbHNlIGlmICghc2F2ZWRSZXNvdXJjZXMucmVtb3ZlKHJlc291cmNlKSkgeworCQkJCQkJCQkJCQljaGFuZ2VkUmVzb3VyY2VzLmFkZChyZXNvdXJjZSk7CisJCQkJCQkJCQkJfQorCQkJCQkJCQkJfQorCQkJCQkJCQl9CisJCQkJCQkJfQorCisJCQkJCQkJcmV0dXJuIHRydWU7CisJCQkJCQl9CisKKwkJCQkJCXB1YmxpYyBDb2xsZWN0aW9uPFJlc291cmNlPiBnZXRDaGFuZ2VkUmVzb3VyY2VzKCkgeworCQkJCQkJCXJldHVybiBjaGFuZ2VkUmVzb3VyY2VzOworCQkJCQkJfQorCisJCQkJCQlwdWJsaWMgQ29sbGVjdGlvbjxSZXNvdXJjZT4gZ2V0UmVtb3ZlZFJlc291cmNlcygpIHsKKwkJCQkJCQlyZXR1cm4gcmVtb3ZlZFJlc291cmNlczsKKwkJCQkJCX0KKwkJCQkJfQorCisJCQkJCWZpbmFsIFJlc291cmNlRGVsdGFWaXNpdG9yIHZpc2l0b3IgPSBuZXcgUmVzb3VyY2VEZWx0YVZpc2l0b3IoKTsKKwkJCQkJZGVsdGEuYWNjZXB0KHZpc2l0b3IpOworCisJCQkJCWlmICghdmlzaXRvci5nZXRSZW1vdmVkUmVzb3VyY2VzKCkuaXNFbXB0eSgpKSB7CisJCQkJCQlnZXRTaXRlKCkuZ2V0U2hlbGwoKS5nZXREaXNwbGF5KCkuYXN5bmNFeGVjCisJCQkJCQkJKG5ldyBSdW5uYWJsZSgpIHsKKwkJCQkJCQkJIHB1YmxpYyB2b2lkIHJ1bigpIHsKKwkJCQkJCQkJCSByZW1vdmVkUmVzb3VyY2VzLmFkZEFsbCh2aXNpdG9yLmdldFJlbW92ZWRSZXNvdXJjZXMoKSk7CisJCQkJCQkJCQkgaWYgKCFpc0RpcnR5KCkpIHsKKwkJCQkJCQkJCQkgZ2V0U2l0ZSgpLmdldFBhZ2UoKS5jbG9zZUVkaXRvcihFZGdlc0VkaXRvci50aGlzLCBmYWxzZSk7CisJCQkJCQkJCQkgfQorCQkJCQkJCQkgfQorCQkJCQkJCSB9KTsKKwkJCQkJfQorCisJCQkJCWlmICghdmlzaXRvci5nZXRDaGFuZ2VkUmVzb3VyY2VzKCkuaXNFbXB0eSgpKSB7CisJCQkJCQlnZXRTaXRlKCkuZ2V0U2hlbGwoKS5nZXREaXNwbGF5KCkuYXN5bmNFeGVjCisJCQkJCQkJKG5ldyBSdW5uYWJsZSgpIHsKKwkJCQkJCQkJIHB1YmxpYyB2b2lkIHJ1bigpIHsKKwkJCQkJCQkJCSBjaGFuZ2VkUmVzb3VyY2VzLmFkZEFsbCh2aXNpdG9yLmdldENoYW5nZWRSZXNvdXJjZXMoKSk7CisJCQkJCQkJCQkgaWYgKGdldFNpdGUoKS5nZXRQYWdlKCkuZ2V0QWN0aXZlRWRpdG9yKCkgPT0gRWRnZXNFZGl0b3IudGhpcykgeworCQkJCQkJCQkJCSBoYW5kbGVBY3RpdmF0ZSgpOworCQkJCQkJCQkJIH0KKwkJCQkJCQkJIH0KKwkJCQkJCQkgfSk7CisJCQkJCX0KKwkJCQl9CisJCQkJY2F0Y2ggKENvcmVFeGNlcHRpb24gZXhjZXB0aW9uKSB7CisJCQkJCURlZmluaXRpb25zRWRpdFBsdWdpbi5JTlNUQU5DRS5sb2coZXhjZXB0aW9uKTsKKwkJCQl9CisJCQl9CisJCX07CisKKwkvKioKKwkgKiBIYW5kbGVzIGFjdGl2YXRpb24gb2YgdGhlIGVkaXRvciBvciBpdCdzIGFzc29jaWF0ZWQgdmlld3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgaGFuZGxlQWN0aXZhdGUoKSB7CisJCS8vIFJlY29tcHV0ZSB0aGUgcmVhZCBvbmx5IHN0YXRlLgorCQkvLworCQlpZiAoZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVRvUmVhZE9ubHlNYXAoKSAhPSBudWxsKSB7CisJCSAgZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVRvUmVhZE9ubHlNYXAoKS5jbGVhcigpOworCisJCSAgLy8gUmVmcmVzaCBhbnkgYWN0aW9ucyB0aGF0IG1heSBiZWNvbWUgZW5hYmxlZCBvciBkaXNhYmxlZC4KKwkJICAvLworCQkgIHNldFNlbGVjdGlvbihnZXRTZWxlY3Rpb24oKSk7CisJCX0KKworCQlpZiAoIXJlbW92ZWRSZXNvdXJjZXMuaXNFbXB0eSgpKSB7CisJCQlpZiAoaGFuZGxlRGlydHlDb25mbGljdCgpKSB7CisJCQkJZ2V0U2l0ZSgpLmdldFBhZ2UoKS5jbG9zZUVkaXRvcihFZGdlc0VkaXRvci50aGlzLCBmYWxzZSk7CisJCQl9CisJCQllbHNlIHsKKwkJCQlyZW1vdmVkUmVzb3VyY2VzLmNsZWFyKCk7CisJCQkJY2hhbmdlZFJlc291cmNlcy5jbGVhcigpOworCQkJCXNhdmVkUmVzb3VyY2VzLmNsZWFyKCk7CisJCQl9CisJCX0KKwkJZWxzZSBpZiAoIWNoYW5nZWRSZXNvdXJjZXMuaXNFbXB0eSgpKSB7CisJCQljaGFuZ2VkUmVzb3VyY2VzLnJlbW92ZUFsbChzYXZlZFJlc291cmNlcyk7CisJCQloYW5kbGVDaGFuZ2VkUmVzb3VyY2VzKCk7CisJCQljaGFuZ2VkUmVzb3VyY2VzLmNsZWFyKCk7CisJCQlzYXZlZFJlc291cmNlcy5jbGVhcigpOworCQl9CisJfQorCisJLyoqCisJICogSGFuZGxlcyB3aGF0IHRvIGRvIHdpdGggY2hhbmdlZCByZXNvdXJjZXMgb24gYWN0aXZhdGlvbi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBoYW5kbGVDaGFuZ2VkUmVzb3VyY2VzKCkgeworCQlpZiAoIWNoYW5nZWRSZXNvdXJjZXMuaXNFbXB0eSgpICYmICghaXNEaXJ0eSgpIHx8IGhhbmRsZURpcnR5Q29uZmxpY3QoKSkpIHsKKwkJCWlmIChpc0RpcnR5KCkpIHsKKwkJCQljaGFuZ2VkUmVzb3VyY2VzLmFkZEFsbChlZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkuZ2V0UmVzb3VyY2VzKCkpOworCQkJfQorCQkJZWRpdGluZ0RvbWFpbi5nZXRDb21tYW5kU3RhY2soKS5mbHVzaCgpOworCisJCQl1cGRhdGVQcm9ibGVtSW5kaWNhdGlvbiA9IGZhbHNlOworCQkJZm9yIChSZXNvdXJjZSByZXNvdXJjZSA6IGNoYW5nZWRSZXNvdXJjZXMpIHsKKwkJCQlpZiAocmVzb3VyY2UuaXNMb2FkZWQoKSkgeworCQkJCQlyZXNvdXJjZS51bmxvYWQoKTsKKwkJCQkJdHJ5IHsKKwkJCQkJCXJlc291cmNlLmxvYWQoQ29sbGVjdGlvbnMuRU1QVFlfTUFQKTsKKwkJCQkJfQorCQkJCQljYXRjaCAoSU9FeGNlcHRpb24gZXhjZXB0aW9uKSB7CisJCQkJCQlpZiAoIXJlc291cmNlVG9EaWFnbm9zdGljTWFwLmNvbnRhaW5zS2V5KHJlc291cmNlKSkgeworCQkJCQkJCXJlc291cmNlVG9EaWFnbm9zdGljTWFwLnB1dChyZXNvdXJjZSwgYW5hbHl6ZVJlc291cmNlUHJvYmxlbXMocmVzb3VyY2UsIGV4Y2VwdGlvbikpOworCQkJCQkJfQorCQkJCQl9CisJCQkJfQorCQkJfQorCisJCQlpZiAoQWRhcHRlckZhY3RvcnlFZGl0aW5nRG9tYWluLmlzU3RhbGUoZWRpdG9yU2VsZWN0aW9uKSkgeworCQkJCXNldFNlbGVjdGlvbihTdHJ1Y3R1cmVkU2VsZWN0aW9uLkVNUFRZKTsKKwkJCX0KKworCQkJdXBkYXRlUHJvYmxlbUluZGljYXRpb24gPSB0cnVlOworCQkJdXBkYXRlUHJvYmxlbUluZGljYXRpb24oKTsKKwkJfQorCX0KKyAgCisJLyoqCisJICogVXBkYXRlcyB0aGUgcHJvYmxlbXMgaW5kaWNhdGlvbiB3aXRoIHRoZSBpbmZvcm1hdGlvbiBkZXNjcmliZWQgaW4gdGhlIHNwZWNpZmllZCBkaWFnbm9zdGljLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIHVwZGF0ZVByb2JsZW1JbmRpY2F0aW9uKCkgeworCQlpZiAodXBkYXRlUHJvYmxlbUluZGljYXRpb24pIHsKKwkJCUJhc2ljRGlhZ25vc3RpYyBkaWFnbm9zdGljID0KKwkJCQluZXcgQmFzaWNEaWFnbm9zdGljCisJCQkJCShEaWFnbm9zdGljLk9LLAorCQkJCQkgIm9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMiLCAvLyROT04tTkxTLTEkCisJCQkJCSAwLAorCQkJCQkgbnVsbCwKKwkJCQkJIG5ldyBPYmplY3QgW10geyBlZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkgfSk7CisJCQlmb3IgKERpYWdub3N0aWMgY2hpbGREaWFnbm9zdGljIDogcmVzb3VyY2VUb0RpYWdub3N0aWNNYXAudmFsdWVzKCkpIHsKKwkJCQlpZiAoY2hpbGREaWFnbm9zdGljLmdldFNldmVyaXR5KCkgIT0gRGlhZ25vc3RpYy5PSykgeworCQkJCQlkaWFnbm9zdGljLmFkZChjaGlsZERpYWdub3N0aWMpOworCQkJCX0KKwkJCX0KKworCQkJaW50IGxhc3RFZGl0b3JQYWdlID0gZ2V0UGFnZUNvdW50KCkgLSAxOworCQkJaWYgKGxhc3RFZGl0b3JQYWdlID49IDAgJiYgZ2V0RWRpdG9yKGxhc3RFZGl0b3JQYWdlKSBpbnN0YW5jZW9mIFByb2JsZW1FZGl0b3JQYXJ0KSB7CisJCQkJKChQcm9ibGVtRWRpdG9yUGFydClnZXRFZGl0b3IobGFzdEVkaXRvclBhZ2UpKS5zZXREaWFnbm9zdGljKGRpYWdub3N0aWMpOworCQkJCWlmIChkaWFnbm9zdGljLmdldFNldmVyaXR5KCkgIT0gRGlhZ25vc3RpYy5PSykgeworCQkJCQlzZXRBY3RpdmVQYWdlKGxhc3RFZGl0b3JQYWdlKTsKKwkJCQl9CisJCQl9CisJCQllbHNlIGlmIChkaWFnbm9zdGljLmdldFNldmVyaXR5KCkgIT0gRGlhZ25vc3RpYy5PSykgeworCQkJCVByb2JsZW1FZGl0b3JQYXJ0IHByb2JsZW1FZGl0b3JQYXJ0ID0gbmV3IFByb2JsZW1FZGl0b3JQYXJ0KCk7CisJCQkJcHJvYmxlbUVkaXRvclBhcnQuc2V0RGlhZ25vc3RpYyhkaWFnbm9zdGljKTsKKwkJCQlwcm9ibGVtRWRpdG9yUGFydC5zZXRNYXJrZXJIZWxwZXIobWFya2VySGVscGVyKTsKKwkJCQl0cnkgeworCQkJCQlhZGRQYWdlKCsrbGFzdEVkaXRvclBhZ2UsIHByb2JsZW1FZGl0b3JQYXJ0LCBnZXRFZGl0b3JJbnB1dCgpKTsKKwkJCQkJc2V0UGFnZVRleHQobGFzdEVkaXRvclBhZ2UsIHByb2JsZW1FZGl0b3JQYXJ0LmdldFBhcnROYW1lKCkpOworCQkJCQlzZXRBY3RpdmVQYWdlKGxhc3RFZGl0b3JQYWdlKTsKKwkJCQkJc2hvd1RhYnMoKTsKKwkJCQl9CisJCQkJY2F0Y2ggKFBhcnRJbml0RXhjZXB0aW9uIGV4Y2VwdGlvbikgeworCQkJCQlEZWZpbml0aW9uc0VkaXRQbHVnaW4uSU5TVEFOQ0UubG9nKGV4Y2VwdGlvbik7CisJCQkJfQorCQkJfQorCisJCQlpZiAobWFya2VySGVscGVyLmhhc01hcmtlcnMoZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpKSkgeworCQkJCW1hcmtlckhlbHBlci5kZWxldGVNYXJrZXJzKGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKSk7CisJCQkJaWYgKGRpYWdub3N0aWMuZ2V0U2V2ZXJpdHkoKSAhPSBEaWFnbm9zdGljLk9LKSB7CisJCQkJCXRyeSB7CisJCQkJCQltYXJrZXJIZWxwZXIuY3JlYXRlTWFya2VycyhkaWFnbm9zdGljKTsKKwkJCQkJfQorCQkJCQljYXRjaCAoQ29yZUV4Y2VwdGlvbiBleGNlcHRpb24pIHsKKwkJCQkJCURlZmluaXRpb25zRWRpdFBsdWdpbi5JTlNUQU5DRS5sb2coZXhjZXB0aW9uKTsKKwkJCQkJfQorCQkJCX0KKwkJCX0KKwkJfQorCX0KKworCS8qKgorCSAqIFNob3dzIGEgZGlhbG9nIHRoYXQgYXNrcyBpZiBjb25mbGljdGluZyBjaGFuZ2VzIHNob3VsZCBiZSBkaXNjYXJkZWQuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIGJvb2xlYW4gaGFuZGxlRGlydHlDb25mbGljdCgpIHsKKwkJcmV0dXJuCisJCQlNZXNzYWdlRGlhbG9nLm9wZW5RdWVzdGlvbgorCQkJCShnZXRTaXRlKCkuZ2V0U2hlbGwoKSwKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfRmlsZUNvbmZsaWN0X2xhYmVsIiksIC8vJE5PTi1OTFMtMSQKKwkJCQkgZ2V0U3RyaW5nKCJfV0FSTl9GaWxlQ29uZmxpY3QiKSk7IC8vJE5PTi1OTFMtMSQKKwl9CisKKwkvKioKKwkgKiBUaGlzIGNyZWF0ZXMgYSBtb2RlbCBlZGl0b3IuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVkZ2VzRWRpdG9yKCkgeworCQlzdXBlcigpOworCQlpbml0aWFsaXplRWRpdGluZ0RvbWFpbigpOworCX0KKworCS8qKgorCSAqIFRoaXMgc2V0cyB1cCB0aGUgZWRpdGluZyBkb21haW4gZm9yIHRoZSBtb2RlbCBlZGl0b3IuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgaW5pdGlhbGl6ZUVkaXRpbmdEb21haW4oKSB7CisJCS8vIENyZWF0ZSBhbiBhZGFwdGVyIGZhY3RvcnkgdGhhdCB5aWVsZHMgaXRlbSBwcm92aWRlcnMuCisJCS8vCisJCWFkYXB0ZXJGYWN0b3J5ID0gbmV3IENvbXBvc2VkQWRhcHRlckZhY3RvcnkoQ29tcG9zZWRBZGFwdGVyRmFjdG9yeS5EZXNjcmlwdG9yLlJlZ2lzdHJ5LklOU1RBTkNFKTsKKworCQlhZGFwdGVyRmFjdG9yeS5hZGRBZGFwdGVyRmFjdG9yeShuZXcgUmVzb3VyY2VJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSgpKTsKKwkJYWRhcHRlckZhY3RvcnkuYWRkQWRhcHRlckZhY3RvcnkobmV3IEVkZ2VzSXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkoKSk7CisJCWFkYXB0ZXJGYWN0b3J5LmFkZEFkYXB0ZXJGYWN0b3J5KG5ldyBMYWJlbHNJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSgpKTsKKwkJYWRhcHRlckZhY3RvcnkuYWRkQWRhcHRlckZhY3RvcnkobmV3IE5vZGVzSXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkoKSk7CisJCWFkYXB0ZXJGYWN0b3J5LmFkZEFkYXB0ZXJGYWN0b3J5KG5ldyBUeXBlc0l0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5KCkpOworCQlhZGFwdGVyRmFjdG9yeS5hZGRBZGFwdGVyRmFjdG9yeShuZXcgR3JhcGhJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSgpKTsKKwkJYWRhcHRlckZhY3RvcnkuYWRkQWRhcHRlckZhY3RvcnkobmV3IENvbW1vbkl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5KCkpOworCQlhZGFwdGVyRmFjdG9yeS5hZGRBZGFwdGVyRmFjdG9yeShuZXcgTW9kZWxJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSgpKTsKKwkJYWRhcHRlckZhY3RvcnkuYWRkQWRhcHRlckZhY3RvcnkobmV3IEVjb3JlSXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkoKSk7CisJCWFkYXB0ZXJGYWN0b3J5LmFkZEFkYXB0ZXJGYWN0b3J5KG5ldyBNb2RpZmllckl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5KCkpOworCQlhZGFwdGVyRmFjdG9yeS5hZGRBZGFwdGVyRmFjdG9yeShuZXcgU2NlbmFyaW9JdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSgpKTsKKwkJYWRhcHRlckZhY3RvcnkuYWRkQWRhcHRlckZhY3RvcnkobmV3IFNlcXVlbmNlckl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5KCkpOworCQlhZGFwdGVyRmFjdG9yeS5hZGRBZGFwdGVyRmFjdG9yeShuZXcgU29sdmVySXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkoKSk7CisJCWFkYXB0ZXJGYWN0b3J5LmFkZEFkYXB0ZXJGYWN0b3J5KG5ldyBSZWZsZWN0aXZlSXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkoKSk7CisKKwkJLy8gQ3JlYXRlIHRoZSBjb21tYW5kIHN0YWNrIHRoYXQgd2lsbCBub3RpZnkgdGhpcyBlZGl0b3IgYXMgY29tbWFuZHMgYXJlIGV4ZWN1dGVkLgorCQkvLworCQlCYXNpY0NvbW1hbmRTdGFjayBjb21tYW5kU3RhY2sgPSBuZXcgQmFzaWNDb21tYW5kU3RhY2soKTsKKworCQkvLyBBZGQgYSBsaXN0ZW5lciB0byBzZXQgdGhlIG1vc3QgcmVjZW50IGNvbW1hbmQncyBhZmZlY3RlZCBvYmplY3RzIHRvIGJlIHRoZSBzZWxlY3Rpb24gb2YgdGhlIHZpZXdlciB3aXRoIGZvY3VzLgorCQkvLworCQljb21tYW5kU3RhY2suYWRkQ29tbWFuZFN0YWNrTGlzdGVuZXIKKwkJCShuZXcgQ29tbWFuZFN0YWNrTGlzdGVuZXIoKSB7CisJCQkJIHB1YmxpYyB2b2lkIGNvbW1hbmRTdGFja0NoYW5nZWQoZmluYWwgRXZlbnRPYmplY3QgZXZlbnQpIHsKKwkJCQkJIGdldENvbnRhaW5lcigpLmdldERpc3BsYXkoKS5hc3luY0V4ZWMKKwkJCQkJCSAobmV3IFJ1bm5hYmxlKCkgeworCQkJCQkJCSAgcHVibGljIHZvaWQgcnVuKCkgeworCQkJCQkJCQkgIGZpcmVQcm9wZXJ0eUNoYW5nZShJRWRpdG9yUGFydC5QUk9QX0RJUlRZKTsKKworCQkJCQkJCQkgIC8vIFRyeSB0byBzZWxlY3QgdGhlIGFmZmVjdGVkIG9iamVjdHMuCisJCQkJCQkJCSAgLy8KKwkJCQkJCQkJICBDb21tYW5kIG1vc3RSZWNlbnRDb21tYW5kID0gKChDb21tYW5kU3RhY2spZXZlbnQuZ2V0U291cmNlKCkpLmdldE1vc3RSZWNlbnRDb21tYW5kKCk7CisJCQkJCQkJCSAgaWYgKG1vc3RSZWNlbnRDb21tYW5kICE9IG51bGwpIHsKKwkJCQkJCQkJCSAgc2V0U2VsZWN0aW9uVG9WaWV3ZXIobW9zdFJlY2VudENvbW1hbmQuZ2V0QWZmZWN0ZWRPYmplY3RzKCkpOworCQkJCQkJCQkgIH0KKwkJCQkJCQkJICBpZiAocHJvcGVydHlTaGVldFBhZ2UgIT0gbnVsbCAmJiAhcHJvcGVydHlTaGVldFBhZ2UuZ2V0Q29udHJvbCgpLmlzRGlzcG9zZWQoKSkgeworCQkJCQkJCQkJICBwcm9wZXJ0eVNoZWV0UGFnZS5yZWZyZXNoKCk7CisJCQkJCQkJCSAgfQorCQkJCQkJCSAgfQorCQkJCQkJICB9KTsKKwkJCQkgfQorCQkJIH0pOworCisJCS8vIENyZWF0ZSB0aGUgZWRpdGluZyBkb21haW4gd2l0aCBhIHNwZWNpYWwgY29tbWFuZCBzdGFjay4KKwkJLy8KKwkJZWRpdGluZ0RvbWFpbiA9IG5ldyBBZGFwdGVyRmFjdG9yeUVkaXRpbmdEb21haW4oYWRhcHRlckZhY3RvcnksIGNvbW1hbmRTdGFjaywgbmV3IEhhc2hNYXA8UmVzb3VyY2UsIEJvb2xlYW4+KCkpOworCX0KKworCS8qKgorCSAqIFRoaXMgaXMgaGVyZSBmb3IgdGhlIGxpc3RlbmVyIHRvIGJlIGFibGUgdG8gY2FsbCBpdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwkJCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIGZpcmVQcm9wZXJ0eUNoYW5nZShpbnQgYWN0aW9uKSB7CisJCXN1cGVyLmZpcmVQcm9wZXJ0eUNoYW5nZShhY3Rpb24pOworCX0KKworCS8qKgorCSAqIFRoaXMgc2V0cyB0aGUgc2VsZWN0aW9uIGludG8gd2hpY2hldmVyIHZpZXdlciBpcyBhY3RpdmUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgc2V0U2VsZWN0aW9uVG9WaWV3ZXIoQ29sbGVjdGlvbjw/PiBjb2xsZWN0aW9uKSB7CisJCWZpbmFsIENvbGxlY3Rpb248Pz4gdGhlU2VsZWN0aW9uID0gY29sbGVjdGlvbjsKKwkJLy8gTWFrZSBzdXJlIGl0J3Mgb2theS4KKwkJLy8KKwkJaWYgKHRoZVNlbGVjdGlvbiAhPSBudWxsICYmICF0aGVTZWxlY3Rpb24uaXNFbXB0eSgpKSB7CisJCQlSdW5uYWJsZSBydW5uYWJsZSA9CisJCQkJbmV3IFJ1bm5hYmxlKCkgeworCQkJCQlwdWJsaWMgdm9pZCBydW4oKSB7CisJCQkJCQkvLyBUcnkgdG8gc2VsZWN0IHRoZSBpdGVtcyBpbiB0aGUgY3VycmVudCBjb250ZW50IHZpZXdlciBvZiB0aGUgZWRpdG9yLgorCQkJCQkJLy8KKwkJCQkJCWlmIChjdXJyZW50Vmlld2VyICE9IG51bGwpIHsKKwkJCQkJCQljdXJyZW50Vmlld2VyLnNldFNlbGVjdGlvbihuZXcgU3RydWN0dXJlZFNlbGVjdGlvbih0aGVTZWxlY3Rpb24udG9BcnJheSgpKSwgdHJ1ZSk7CisJCQkJCQl9CisJCQkJCX0KKwkJCQl9OworCQkJZ2V0U2l0ZSgpLmdldFNoZWxsKCkuZ2V0RGlzcGxheSgpLmFzeW5jRXhlYyhydW5uYWJsZSk7CisJCX0KKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgdGhlIGVkaXRpbmcgZG9tYWluIGFzIHJlcXVpcmVkIGJ5IHRoZSB7QGxpbmsgSUVkaXRpbmdEb21haW5Qcm92aWRlcn0gaW50ZXJmYWNlLgorCSAqIFRoaXMgaXMgaW1wb3J0YW50IGZvciBpbXBsZW1lbnRpbmcgdGhlIHN0YXRpYyBtZXRob2RzIG9mIHtAbGluayBBZGFwdGVyRmFjdG9yeUVkaXRpbmdEb21haW59CisJICogYW5kIGZvciBzdXBwb3J0aW5nIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5hY3Rpb24uQ29tbWFuZEFjdGlvbn0uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVkaXRpbmdEb21haW4gZ2V0RWRpdGluZ0RvbWFpbigpIHsKKwkJcmV0dXJuIGVkaXRpbmdEb21haW47CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIGNsYXNzIFJldmVyc2VBZGFwdGVyRmFjdG9yeUNvbnRlbnRQcm92aWRlciBleHRlbmRzIEFkYXB0ZXJGYWN0b3J5Q29udGVudFByb3ZpZGVyIHsKKwkJLyoqCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlwdWJsaWMgUmV2ZXJzZUFkYXB0ZXJGYWN0b3J5Q29udGVudFByb3ZpZGVyKEFkYXB0ZXJGYWN0b3J5IGFkYXB0ZXJGYWN0b3J5KSB7CisJCQlzdXBlcihhZGFwdGVyRmFjdG9yeSk7CisJCX0KKworCQkvKioKKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUBPdmVycmlkZQorCQlwdWJsaWMgT2JqZWN0IFtdIGdldEVsZW1lbnRzKE9iamVjdCBvYmplY3QpIHsKKwkJCU9iamVjdCBwYXJlbnQgPSBzdXBlci5nZXRQYXJlbnQob2JqZWN0KTsKKwkJCXJldHVybiAocGFyZW50ID09IG51bGwgPyBDb2xsZWN0aW9ucy5FTVBUWV9TRVQgOiBDb2xsZWN0aW9ucy5zaW5nbGV0b24ocGFyZW50KSkudG9BcnJheSgpOworCQl9CisKKwkJLyoqCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlAT3ZlcnJpZGUKKwkJcHVibGljIE9iamVjdCBbXSBnZXRDaGlsZHJlbihPYmplY3Qgb2JqZWN0KSB7CisJCQlPYmplY3QgcGFyZW50ID0gc3VwZXIuZ2V0UGFyZW50KG9iamVjdCk7CisJCQlyZXR1cm4gKHBhcmVudCA9PSBudWxsID8gQ29sbGVjdGlvbnMuRU1QVFlfU0VUIDogQ29sbGVjdGlvbnMuc2luZ2xldG9uKHBhcmVudCkpLnRvQXJyYXkoKTsKKwkJfQorCisJCS8qKgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJQE92ZXJyaWRlCisJCXB1YmxpYyBib29sZWFuIGhhc0NoaWxkcmVuKE9iamVjdCBvYmplY3QpIHsKKwkJCU9iamVjdCBwYXJlbnQgPSBzdXBlci5nZXRQYXJlbnQob2JqZWN0KTsKKwkJCXJldHVybiBwYXJlbnQgIT0gbnVsbDsKKwkJfQorCisJCS8qKgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJQE92ZXJyaWRlCisJCXB1YmxpYyBPYmplY3QgZ2V0UGFyZW50KE9iamVjdCBvYmplY3QpIHsKKwkJCXJldHVybiBudWxsOworCQl9CisJfQorCisJLyoqCisJICogVGhpcyBtYWtlcyBzdXJlIHRoYXQgb25lIGNvbnRlbnQgdmlld2VyLCBlaXRoZXIgZm9yIHRoZSBjdXJyZW50IHBhZ2Ugb3IgdGhlIG91dGxpbmUgdmlldywgaWYgaXQgaGFzIGZvY3VzLAorCSAqIGlzIHRoZSBjdXJyZW50IG9uZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRDdXJyZW50Vmlld2VyKFZpZXdlciB2aWV3ZXIpIHsKKwkJLy8gSWYgaXQgaXMgY2hhbmdpbmcuLi4KKwkJLy8KKwkJaWYgKGN1cnJlbnRWaWV3ZXIgIT0gdmlld2VyKSB7CisJCQlpZiAoc2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyID09IG51bGwpIHsKKwkJCQkvLyBDcmVhdGUgdGhlIGxpc3RlbmVyIG9uIGRlbWFuZC4KKwkJCQkvLworCQkJCXNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lciA9CisJCQkJCW5ldyBJU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyKCkgeworCQkJCQkJLy8gVGhpcyBqdXN0IG5vdGlmaWVzIHRob3NlIHRoaW5ncyB0aGF0IGFyZSBhZmZlY3RlZCBieSB0aGUgc2VjdGlvbi4KKwkJCQkJCS8vCisJCQkJCQlwdWJsaWMgdm9pZCBzZWxlY3Rpb25DaGFuZ2VkKFNlbGVjdGlvbkNoYW5nZWRFdmVudCBzZWxlY3Rpb25DaGFuZ2VkRXZlbnQpIHsKKwkJCQkJCQlzZXRTZWxlY3Rpb24oc2VsZWN0aW9uQ2hhbmdlZEV2ZW50LmdldFNlbGVjdGlvbigpKTsKKwkJCQkJCX0KKwkJCQkJfTsKKwkJCX0KKworCQkJLy8gU3RvcCBsaXN0ZW5pbmcgdG8gdGhlIG9sZCBvbmUuCisJCQkvLworCQkJaWYgKGN1cnJlbnRWaWV3ZXIgIT0gbnVsbCkgeworCQkJCWN1cnJlbnRWaWV3ZXIucmVtb3ZlU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyKHNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcik7CisJCQl9CisKKwkJCS8vIFN0YXJ0IGxpc3RlbmluZyB0byB0aGUgbmV3IG9uZS4KKwkJCS8vCisJCQlpZiAodmlld2VyICE9IG51bGwpIHsKKwkJCQl2aWV3ZXIuYWRkU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyKHNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcik7CisJCQl9CisKKwkJCS8vIFJlbWVtYmVyIGl0LgorCQkJLy8KKwkJCWN1cnJlbnRWaWV3ZXIgPSB2aWV3ZXI7CisKKwkJCS8vIFNldCB0aGUgZWRpdG9ycyBzZWxlY3Rpb24gYmFzZWQgb24gdGhlIGN1cnJlbnQgdmlld2VyJ3Mgc2VsZWN0aW9uLgorCQkJLy8KKwkJCXNldFNlbGVjdGlvbihjdXJyZW50Vmlld2VyID09IG51bGwgPyBTdHJ1Y3R1cmVkU2VsZWN0aW9uLkVNUFRZIDogY3VycmVudFZpZXdlci5nZXRTZWxlY3Rpb24oKSk7CisJCX0KKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgdGhlIHZpZXdlciBhcyByZXF1aXJlZCBieSB0aGUge0BsaW5rIElWaWV3ZXJQcm92aWRlcn0gaW50ZXJmYWNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBWaWV3ZXIgZ2V0Vmlld2VyKCkgeworCQlyZXR1cm4gY3VycmVudFZpZXdlcjsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGNyZWF0ZXMgYSBjb250ZXh0IG1lbnUgZm9yIHRoZSB2aWV3ZXIgYW5kIGFkZHMgYSBsaXN0ZW5lciBhcyB3ZWxsIHJlZ2lzdGVyaW5nIHRoZSBtZW51IGZvciBleHRlbnNpb24uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgY3JlYXRlQ29udGV4dE1lbnVGb3IoU3RydWN0dXJlZFZpZXdlciB2aWV3ZXIpIHsKKwkJTWVudU1hbmFnZXIgY29udGV4dE1lbnUgPSBuZXcgTWVudU1hbmFnZXIoIiNQb3BVcCIpOyAvLyROT04tTkxTLTEkCisJCWNvbnRleHRNZW51LmFkZChuZXcgU2VwYXJhdG9yKCJhZGRpdGlvbnMiKSk7IC8vJE5PTi1OTFMtMSQKKwkJY29udGV4dE1lbnUuc2V0UmVtb3ZlQWxsV2hlblNob3duKHRydWUpOworCQljb250ZXh0TWVudS5hZGRNZW51TGlzdGVuZXIodGhpcyk7CisJCU1lbnUgbWVudT0gY29udGV4dE1lbnUuY3JlYXRlQ29udGV4dE1lbnUodmlld2VyLmdldENvbnRyb2woKSk7CisJCXZpZXdlci5nZXRDb250cm9sKCkuc2V0TWVudShtZW51KTsKKwkJZ2V0U2l0ZSgpLnJlZ2lzdGVyQ29udGV4dE1lbnUoY29udGV4dE1lbnUsIG5ldyBVbndyYXBwaW5nU2VsZWN0aW9uUHJvdmlkZXIodmlld2VyKSk7CisKKwkJaW50IGRuZE9wZXJhdGlvbnMgPSBETkQuRFJPUF9DT1BZIHwgRE5ELkRST1BfTU9WRSB8IERORC5EUk9QX0xJTks7CisJCVRyYW5zZmVyW10gdHJhbnNmZXJzID0gbmV3IFRyYW5zZmVyW10geyBMb2NhbFRyYW5zZmVyLmdldEluc3RhbmNlKCkgfTsKKwkJdmlld2VyLmFkZERyYWdTdXBwb3J0KGRuZE9wZXJhdGlvbnMsIHRyYW5zZmVycywgbmV3IFZpZXdlckRyYWdBZGFwdGVyKHZpZXdlcikpOworCQl2aWV3ZXIuYWRkRHJvcFN1cHBvcnQoZG5kT3BlcmF0aW9ucywgdHJhbnNmZXJzLCBuZXcgRWRpdGluZ0RvbWFpblZpZXdlckRyb3BBZGFwdGVyKGVkaXRpbmdEb21haW4sIHZpZXdlcikpOworCX0KKworCS8qKgorCSAqIFRoaXMgaXMgdGhlIG1ldGhvZCBjYWxsZWQgdG8gbG9hZCBhIHJlc291cmNlIGludG8gdGhlIGVkaXRpbmcgZG9tYWluJ3MgcmVzb3VyY2Ugc2V0IGJhc2VkIG9uIHRoZSBlZGl0b3IncyBpbnB1dC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBjcmVhdGVNb2RlbCgpIHsKKwkJVVJJIHJlc291cmNlVVJJID0gRWRpdFVJVXRpbC5nZXRVUkkoZ2V0RWRpdG9ySW5wdXQoKSk7CisJCUV4Y2VwdGlvbiBleGNlcHRpb24gPSBudWxsOworCQlSZXNvdXJjZSByZXNvdXJjZSA9IG51bGw7CisJCXRyeSB7CisJCQkvLyBMb2FkIHRoZSByZXNvdXJjZSB0aHJvdWdoIHRoZSBlZGl0aW5nIGRvbWFpbi4KKwkJCS8vCisJCQlyZXNvdXJjZSA9IGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKS5nZXRSZXNvdXJjZShyZXNvdXJjZVVSSSwgdHJ1ZSk7CisJCX0KKwkJY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CisJCQlleGNlcHRpb24gPSBlOworCQkJcmVzb3VyY2UgPSBlZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkuZ2V0UmVzb3VyY2UocmVzb3VyY2VVUkksIGZhbHNlKTsKKwkJfQorCisJCURpYWdub3N0aWMgZGlhZ25vc3RpYyA9IGFuYWx5emVSZXNvdXJjZVByb2JsZW1zKHJlc291cmNlLCBleGNlcHRpb24pOworCQlpZiAoZGlhZ25vc3RpYy5nZXRTZXZlcml0eSgpICE9IERpYWdub3N0aWMuT0spIHsKKwkJCXJlc291cmNlVG9EaWFnbm9zdGljTWFwLnB1dChyZXNvdXJjZSwgIGFuYWx5emVSZXNvdXJjZVByb2JsZW1zKHJlc291cmNlLCBleGNlcHRpb24pKTsKKwkJfQorCQllZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkuZUFkYXB0ZXJzKCkuYWRkKHByb2JsZW1JbmRpY2F0aW9uQWRhcHRlcik7CisJfQorCisJLyoqCisJICogUmV0dXJucyBhIGRpYWdub3N0aWMgZGVzY3JpYmluZyB0aGUgZXJyb3JzIGFuZCB3YXJuaW5ncyBsaXN0ZWQgaW4gdGhlIHJlc291cmNlCisJICogYW5kIHRoZSBzcGVjaWZpZWQgZXhjZXB0aW9uIChpZiBhbnkpLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBEaWFnbm9zdGljIGFuYWx5emVSZXNvdXJjZVByb2JsZW1zKFJlc291cmNlIHJlc291cmNlLCBFeGNlcHRpb24gZXhjZXB0aW9uKSB7CisJCWlmICghcmVzb3VyY2UuZ2V0RXJyb3JzKCkuaXNFbXB0eSgpIHx8ICFyZXNvdXJjZS5nZXRXYXJuaW5ncygpLmlzRW1wdHkoKSkgeworCQkJQmFzaWNEaWFnbm9zdGljIGJhc2ljRGlhZ25vc3RpYyA9CisJCQkJbmV3IEJhc2ljRGlhZ25vc3RpYworCQkJCQkoRGlhZ25vc3RpYy5FUlJPUiwKKwkJCQkJICJvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zIiwgLy8kTk9OLU5MUy0xJAorCQkJCQkgMCwKKwkJCQkJIGdldFN0cmluZygiX1VJX0NyZWF0ZU1vZGVsRXJyb3JfbWVzc2FnZSIsIHJlc291cmNlLmdldFVSSSgpKSwgLy8kTk9OLU5MUy0xJAorCQkJCQkgbmV3IE9iamVjdCBbXSB7IGV4Y2VwdGlvbiA9PSBudWxsID8gKE9iamVjdClyZXNvdXJjZSA6IGV4Y2VwdGlvbiB9KTsKKwkJCWJhc2ljRGlhZ25vc3RpYy5tZXJnZShFY29yZVV0aWwuY29tcHV0ZURpYWdub3N0aWMocmVzb3VyY2UsIHRydWUpKTsKKwkJCXJldHVybiBiYXNpY0RpYWdub3N0aWM7CisJCX0KKwkJZWxzZSBpZiAoZXhjZXB0aW9uICE9IG51bGwpIHsKKwkJCXJldHVybgorCQkJCW5ldyBCYXNpY0RpYWdub3N0aWMKKwkJCQkJKERpYWdub3N0aWMuRVJST1IsCisJCQkJCSAib3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucyIsIC8vJE5PTi1OTFMtMSQKKwkJCQkJIDAsCisJCQkJCSBnZXRTdHJpbmcoIl9VSV9DcmVhdGVNb2RlbEVycm9yX21lc3NhZ2UiLCByZXNvdXJjZS5nZXRVUkkoKSksIC8vJE5PTi1OTFMtMSQKKwkJCQkJIG5ldyBPYmplY3RbXSB7IGV4Y2VwdGlvbiB9KTsKKwkJfQorCQllbHNlIHsKKwkJCXJldHVybiBEaWFnbm9zdGljLk9LX0lOU1RBTkNFOworCQl9CisJfQorCisJLyoqCisJICogVGhpcyBpcyB0aGUgbWV0aG9kIHVzZWQgYnkgdGhlIGZyYW1ld29yayB0byBpbnN0YWxsIHlvdXIgb3duIGNvbnRyb2xzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGNyZWF0ZVBhZ2VzKCkgeworCQkvLyBDcmVhdGVzIHRoZSBtb2RlbCBmcm9tIHRoZSBlZGl0b3IgaW5wdXQKKwkJLy8KKwkJY3JlYXRlTW9kZWwoKTsKKworCQkvLyBPbmx5IGNyZWF0ZXMgdGhlIG90aGVyIHBhZ2VzIGlmIHRoZXJlIGlzIHNvbWV0aGluZyB0aGF0IGNhbiBiZSBlZGl0ZWQKKwkJLy8KKwkJaWYgKCFnZXRFZGl0aW5nRG9tYWluKCkuZ2V0UmVzb3VyY2VTZXQoKS5nZXRSZXNvdXJjZXMoKS5pc0VtcHR5KCkpIHsKKwkJCS8vIENyZWF0ZSBhIHBhZ2UgZm9yIHRoZSBzZWxlY3Rpb24gdHJlZSB2aWV3LgorCQkJLy8KKwkJCVRyZWUgdHJlZSA9IG5ldyBUcmVlKGdldENvbnRhaW5lcigpLCBTV1QuTVVMVEkpOworCQkJc2VsZWN0aW9uVmlld2VyID0gbmV3IFRyZWVWaWV3ZXIodHJlZSk7CisJCQlzZXRDdXJyZW50Vmlld2VyKHNlbGVjdGlvblZpZXdlcik7CisKKwkJCXNlbGVjdGlvblZpZXdlci5zZXRDb250ZW50UHJvdmlkZXIobmV3IEFkYXB0ZXJGYWN0b3J5Q29udGVudFByb3ZpZGVyKGFkYXB0ZXJGYWN0b3J5KSk7CisJCQlzZWxlY3Rpb25WaWV3ZXIuc2V0TGFiZWxQcm92aWRlcihuZXcgQWRhcHRlckZhY3RvcnlMYWJlbFByb3ZpZGVyKGFkYXB0ZXJGYWN0b3J5KSk7CisJCQlzZWxlY3Rpb25WaWV3ZXIuc2V0SW5wdXQoZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpKTsKKwkJCXNlbGVjdGlvblZpZXdlci5zZXRTZWxlY3Rpb24obmV3IFN0cnVjdHVyZWRTZWxlY3Rpb24oZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpLmdldFJlc291cmNlcygpLmdldCgwKSksIHRydWUpOworCisJCQluZXcgQWRhcHRlckZhY3RvcnlUcmVlRWRpdG9yKHNlbGVjdGlvblZpZXdlci5nZXRUcmVlKCksIGFkYXB0ZXJGYWN0b3J5KTsKKworCQkJY3JlYXRlQ29udGV4dE1lbnVGb3Ioc2VsZWN0aW9uVmlld2VyKTsKKwkJCWludCBwYWdlSW5kZXggPSBhZGRQYWdlKHRyZWUpOworCQkJc2V0UGFnZVRleHQocGFnZUluZGV4LCBnZXRTdHJpbmcoIl9VSV9TZWxlY3Rpb25QYWdlX2xhYmVsIikpOyAvLyROT04tTkxTLTEkCisKKwkJCWdldFNpdGUoKS5nZXRTaGVsbCgpLmdldERpc3BsYXkoKS5hc3luY0V4ZWMKKwkJCQkobmV3IFJ1bm5hYmxlKCkgeworCQkJCQkgcHVibGljIHZvaWQgcnVuKCkgeworCQkJCQkJIHNldEFjdGl2ZVBhZ2UoMCk7CisJCQkJCSB9CisJCQkJIH0pOworCQl9CisKKwkJLy8gRW5zdXJlcyB0aGF0IHRoaXMgZWRpdG9yIHdpbGwgb25seSBkaXNwbGF5IHRoZSBwYWdlJ3MgdGFiCisJCS8vIGFyZWEgaWYgdGhlcmUgYXJlIG1vcmUgdGhhbiBvbmUgcGFnZQorCQkvLworCQlnZXRDb250YWluZXIoKS5hZGRDb250cm9sTGlzdGVuZXIKKwkJCShuZXcgQ29udHJvbEFkYXB0ZXIoKSB7CisJCQkJYm9vbGVhbiBndWFyZCA9IGZhbHNlOworCQkJCUBPdmVycmlkZQorCQkJCXB1YmxpYyB2b2lkIGNvbnRyb2xSZXNpemVkKENvbnRyb2xFdmVudCBldmVudCkgeworCQkJCQlpZiAoIWd1YXJkKSB7CisJCQkJCQlndWFyZCA9IHRydWU7CisJCQkJCQloaWRlVGFicygpOworCQkJCQkJZ3VhcmQgPSBmYWxzZTsKKwkJCQkJfQorCQkJCX0KKwkJCSB9KTsKKworCQlnZXRTaXRlKCkuZ2V0U2hlbGwoKS5nZXREaXNwbGF5KCkuYXN5bmNFeGVjCisJCQkobmV3IFJ1bm5hYmxlKCkgeworCQkJCSBwdWJsaWMgdm9pZCBydW4oKSB7CisJCQkJCSB1cGRhdGVQcm9ibGVtSW5kaWNhdGlvbigpOworCQkJCSB9CisJCQkgfSk7CisJfQorCisJLyoqCisJICogSWYgdGhlcmUgaXMganVzdCBvbmUgcGFnZSBpbiB0aGUgbXVsdGktcGFnZSBlZGl0b3IgcGFydCwKKwkgKiB0aGlzIGhpZGVzIHRoZSBzaW5nbGUgdGFiIGF0IHRoZSBib3R0b20uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgaGlkZVRhYnMoKSB7CisJCWlmIChnZXRQYWdlQ291bnQoKSA8PSAxKSB7CisJCQlzZXRQYWdlVGV4dCgwLCAiIik7IC8vJE5PTi1OTFMtMSQKKwkJCWlmIChnZXRDb250YWluZXIoKSBpbnN0YW5jZW9mIENUYWJGb2xkZXIpIHsKKwkJCQkoKENUYWJGb2xkZXIpZ2V0Q29udGFpbmVyKCkpLnNldFRhYkhlaWdodCgxKTsKKwkJCQlQb2ludCBwb2ludCA9IGdldENvbnRhaW5lcigpLmdldFNpemUoKTsKKwkJCQlnZXRDb250YWluZXIoKS5zZXRTaXplKHBvaW50LngsIHBvaW50LnkgKyA2KTsKKwkJCX0KKwkJfQorCX0KKworCS8qKgorCSAqIElmIHRoZXJlIGlzIG1vcmUgdGhhbiBvbmUgcGFnZSBpbiB0aGUgbXVsdGktcGFnZSBlZGl0b3IgcGFydCwKKwkgKiB0aGlzIHNob3dzIHRoZSB0YWJzIGF0IHRoZSBib3R0b20uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgc2hvd1RhYnMoKSB7CisJCWlmIChnZXRQYWdlQ291bnQoKSA+IDEpIHsKKwkJCXNldFBhZ2VUZXh0KDAsIGdldFN0cmluZygiX1VJX1NlbGVjdGlvblBhZ2VfbGFiZWwiKSk7IC8vJE5PTi1OTFMtMSQKKwkJCWlmIChnZXRDb250YWluZXIoKSBpbnN0YW5jZW9mIENUYWJGb2xkZXIpIHsKKwkJCQkoKENUYWJGb2xkZXIpZ2V0Q29udGFpbmVyKCkpLnNldFRhYkhlaWdodChTV1QuREVGQVVMVCk7CisJCQkJUG9pbnQgcG9pbnQgPSBnZXRDb250YWluZXIoKS5nZXRTaXplKCk7CisJCQkJZ2V0Q29udGFpbmVyKCkuc2V0U2l6ZShwb2ludC54LCBwb2ludC55IC0gNik7CisJCQl9CisJCX0KKwl9CisKKwkvKioKKwkgKiBUaGlzIGlzIHVzZWQgdG8gdHJhY2sgdGhlIGFjdGl2ZSB2aWV3ZXIuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgcGFnZUNoYW5nZShpbnQgcGFnZUluZGV4KSB7CisJCXN1cGVyLnBhZ2VDaGFuZ2UocGFnZUluZGV4KTsKKworCQlpZiAoY29udGVudE91dGxpbmVQYWdlICE9IG51bGwpIHsKKwkJCWhhbmRsZUNvbnRlbnRPdXRsaW5lU2VsZWN0aW9uKGNvbnRlbnRPdXRsaW5lUGFnZS5nZXRTZWxlY3Rpb24oKSk7CisJCX0KKwl9CisKKwkvKioKKwkgKiBUaGlzIGlzIGhvdyB0aGUgZnJhbWV3b3JrIGRldGVybWluZXMgd2hpY2ggaW50ZXJmYWNlcyB3ZSBpbXBsZW1lbnQuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQFN1cHByZXNzV2FybmluZ3MoInVuY2hlY2tlZCIpCisJQE92ZXJyaWRlCisJcHVibGljIE9iamVjdCBnZXRBZGFwdGVyKENsYXNzIGtleSkgeworCQlpZiAoa2V5LmVxdWFscyhJQ29udGVudE91dGxpbmVQYWdlLmNsYXNzKSkgeworCQkJcmV0dXJuIHNob3dPdXRsaW5lVmlldygpID8gZ2V0Q29udGVudE91dGxpbmVQYWdlKCkgOiBudWxsOworCQl9CisJCWVsc2UgaWYgKGtleS5lcXVhbHMoSVByb3BlcnR5U2hlZXRQYWdlLmNsYXNzKSkgeworCQkJcmV0dXJuIGdldFByb3BlcnR5U2hlZXRQYWdlKCk7CisJCX0KKwkJZWxzZSBpZiAoa2V5LmVxdWFscyhJR290b01hcmtlci5jbGFzcykpIHsKKwkJCXJldHVybiB0aGlzOworCQl9CisJCWVsc2UgeworCQkJcmV0dXJuIHN1cGVyLmdldEFkYXB0ZXIoa2V5KTsKKwkJfQorCX0KKworCS8qKgorCSAqIFRoaXMgYWNjZXNzZXMgYSBjYWNoZWQgdmVyc2lvbiBvZiB0aGUgY29udGVudCBvdXRsaW5lci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgSUNvbnRlbnRPdXRsaW5lUGFnZSBnZXRDb250ZW50T3V0bGluZVBhZ2UoKSB7CisJCWlmIChjb250ZW50T3V0bGluZVBhZ2UgPT0gbnVsbCkgeworCQkJLy8gVGhlIGNvbnRlbnQgb3V0bGluZSBpcyBqdXN0IGEgdHJlZS4KKwkJCS8vCisJCQljbGFzcyBNeUNvbnRlbnRPdXRsaW5lUGFnZSBleHRlbmRzIENvbnRlbnRPdXRsaW5lUGFnZSB7CisJCQkJQE92ZXJyaWRlCisJCQkJcHVibGljIHZvaWQgY3JlYXRlQ29udHJvbChDb21wb3NpdGUgcGFyZW50KSB7CisJCQkJCXN1cGVyLmNyZWF0ZUNvbnRyb2wocGFyZW50KTsKKwkJCQkJY29udGVudE91dGxpbmVWaWV3ZXIgPSBnZXRUcmVlVmlld2VyKCk7CisJCQkJCWNvbnRlbnRPdXRsaW5lVmlld2VyLmFkZFNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcih0aGlzKTsKKworCQkJCQkvLyBTZXQgdXAgdGhlIHRyZWUgdmlld2VyLgorCQkJCQkvLworCQkJCQljb250ZW50T3V0bGluZVZpZXdlci5zZXRDb250ZW50UHJvdmlkZXIobmV3IEFkYXB0ZXJGYWN0b3J5Q29udGVudFByb3ZpZGVyKGFkYXB0ZXJGYWN0b3J5KSk7CisJCQkJCWNvbnRlbnRPdXRsaW5lVmlld2VyLnNldExhYmVsUHJvdmlkZXIobmV3IEFkYXB0ZXJGYWN0b3J5TGFiZWxQcm92aWRlcihhZGFwdGVyRmFjdG9yeSkpOworCQkJCQljb250ZW50T3V0bGluZVZpZXdlci5zZXRJbnB1dChlZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkpOworCisJCQkJCS8vIE1ha2Ugc3VyZSBvdXIgcG9wdXBzIHdvcmsuCisJCQkJCS8vCisJCQkJCWNyZWF0ZUNvbnRleHRNZW51Rm9yKGNvbnRlbnRPdXRsaW5lVmlld2VyKTsKKworCQkJCQlpZiAoIWVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKS5nZXRSZXNvdXJjZXMoKS5pc0VtcHR5KCkpIHsKKwkJCQkJICAvLyBTZWxlY3QgdGhlIHJvb3Qgb2JqZWN0IGluIHRoZSB2aWV3LgorCQkJCQkgIC8vCisJCQkJCSAgY29udGVudE91dGxpbmVWaWV3ZXIuc2V0U2VsZWN0aW9uKG5ldyBTdHJ1Y3R1cmVkU2VsZWN0aW9uKGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKS5nZXRSZXNvdXJjZXMoKS5nZXQoMCkpLCB0cnVlKTsKKwkJCQkJfQorCQkJCX0KKworCQkJCUBPdmVycmlkZQorCQkJCXB1YmxpYyB2b2lkIG1ha2VDb250cmlidXRpb25zKElNZW51TWFuYWdlciBtZW51TWFuYWdlciwgSVRvb2xCYXJNYW5hZ2VyIHRvb2xCYXJNYW5hZ2VyLCBJU3RhdHVzTGluZU1hbmFnZXIgc3RhdHVzTGluZU1hbmFnZXIpIHsKKwkJCQkJc3VwZXIubWFrZUNvbnRyaWJ1dGlvbnMobWVudU1hbmFnZXIsIHRvb2xCYXJNYW5hZ2VyLCBzdGF0dXNMaW5lTWFuYWdlcik7CisJCQkJCWNvbnRlbnRPdXRsaW5lU3RhdHVzTGluZU1hbmFnZXIgPSBzdGF0dXNMaW5lTWFuYWdlcjsKKwkJCQl9CisKKwkJCQlAT3ZlcnJpZGUKKwkJCQlwdWJsaWMgdm9pZCBzZXRBY3Rpb25CYXJzKElBY3Rpb25CYXJzIGFjdGlvbkJhcnMpIHsKKwkJCQkJc3VwZXIuc2V0QWN0aW9uQmFycyhhY3Rpb25CYXJzKTsKKwkJCQkJZ2V0QWN0aW9uQmFyQ29udHJpYnV0b3IoKS5zaGFyZUdsb2JhbEFjdGlvbnModGhpcywgYWN0aW9uQmFycyk7CisJCQkJfQorCQkJfQorCisJCQljb250ZW50T3V0bGluZVBhZ2UgPSBuZXcgTXlDb250ZW50T3V0bGluZVBhZ2UoKTsKKworCQkJLy8gTGlzdGVuIHRvIHNlbGVjdGlvbiBzbyB0aGF0IHdlIGNhbiBoYW5kbGUgaXQgaXMgYSBzcGVjaWFsIHdheS4KKwkJCS8vCisJCQljb250ZW50T3V0bGluZVBhZ2UuYWRkU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyCisJCQkJKG5ldyBJU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyKCkgeworCQkJCQkgLy8gVGhpcyBlbnN1cmVzIHRoYXQgd2UgaGFuZGxlIHNlbGVjdGlvbnMgY29ycmVjdGx5LgorCQkJCQkgLy8KKwkJCQkJIHB1YmxpYyB2b2lkIHNlbGVjdGlvbkNoYW5nZWQoU2VsZWN0aW9uQ2hhbmdlZEV2ZW50IGV2ZW50KSB7CisJCQkJCQkgaGFuZGxlQ29udGVudE91dGxpbmVTZWxlY3Rpb24oZXZlbnQuZ2V0U2VsZWN0aW9uKCkpOworCQkJCQkgfQorCQkJCSB9KTsKKwkJfQorCisJCXJldHVybiBjb250ZW50T3V0bGluZVBhZ2U7CisJfQorCisJLyoqCisJICogVGhpcyBhY2Nlc3NlcyBhIGNhY2hlZCB2ZXJzaW9uIG9mIHRoZSBwcm9wZXJ0eSBzaGVldC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgSVByb3BlcnR5U2hlZXRQYWdlIGdldFByb3BlcnR5U2hlZXRQYWdlKCkgeworCQlpZiAocHJvcGVydHlTaGVldFBhZ2UgPT0gbnVsbCkgeworCQkJcHJvcGVydHlTaGVldFBhZ2UgPQorCQkJCW5ldyBFeHRlbmRlZFByb3BlcnR5U2hlZXRQYWdlKGVkaXRpbmdEb21haW4pIHsKKwkJCQkJQE92ZXJyaWRlCisJCQkJCXB1YmxpYyB2b2lkIHNldFNlbGVjdGlvblRvVmlld2VyKExpc3Q8Pz4gc2VsZWN0aW9uKSB7CisJCQkJCQlFZGdlc0VkaXRvci50aGlzLnNldFNlbGVjdGlvblRvVmlld2VyKHNlbGVjdGlvbik7CisJCQkJCQlFZGdlc0VkaXRvci50aGlzLnNldEZvY3VzKCk7CisJCQkJCX0KKworCQkJCQlAT3ZlcnJpZGUKKwkJCQkJcHVibGljIHZvaWQgc2V0QWN0aW9uQmFycyhJQWN0aW9uQmFycyBhY3Rpb25CYXJzKSB7CisJCQkJCQlzdXBlci5zZXRBY3Rpb25CYXJzKGFjdGlvbkJhcnMpOworCQkJCQkJZ2V0QWN0aW9uQmFyQ29udHJpYnV0b3IoKS5zaGFyZUdsb2JhbEFjdGlvbnModGhpcywgYWN0aW9uQmFycyk7CisJCQkJCX0KKwkJCQl9OworCQkJcHJvcGVydHlTaGVldFBhZ2Uuc2V0UHJvcGVydHlTb3VyY2VQcm92aWRlcihuZXcgQWRhcHRlckZhY3RvcnlDb250ZW50UHJvdmlkZXIoYWRhcHRlckZhY3RvcnkpKTsKKwkJfQorCisJCXJldHVybiBwcm9wZXJ0eVNoZWV0UGFnZTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGRlYWxzIHdpdGggaG93IHdlIHdhbnQgc2VsZWN0aW9uIGluIHRoZSBvdXRsaW5lciB0byBhZmZlY3QgdGhlIG90aGVyIHZpZXdzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIGhhbmRsZUNvbnRlbnRPdXRsaW5lU2VsZWN0aW9uKElTZWxlY3Rpb24gc2VsZWN0aW9uKSB7CisJCWlmIChzZWxlY3Rpb25WaWV3ZXIgIT0gbnVsbCAmJiAhc2VsZWN0aW9uLmlzRW1wdHkoKSAmJiBzZWxlY3Rpb24gaW5zdGFuY2VvZiBJU3RydWN0dXJlZFNlbGVjdGlvbikgeworCQkJSXRlcmF0b3I8Pz4gc2VsZWN0ZWRFbGVtZW50cyA9ICgoSVN0cnVjdHVyZWRTZWxlY3Rpb24pc2VsZWN0aW9uKS5pdGVyYXRvcigpOworCQkJaWYgKHNlbGVjdGVkRWxlbWVudHMuaGFzTmV4dCgpKSB7CisJCQkJLy8gR2V0IHRoZSBmaXJzdCBzZWxlY3RlZCBlbGVtZW50LgorCQkJCS8vCisJCQkJT2JqZWN0IHNlbGVjdGVkRWxlbWVudCA9IHNlbGVjdGVkRWxlbWVudHMubmV4dCgpOworCisJCQkJQXJyYXlMaXN0PE9iamVjdD4gc2VsZWN0aW9uTGlzdCA9IG5ldyBBcnJheUxpc3Q8T2JqZWN0PigpOworCQkJCXNlbGVjdGlvbkxpc3QuYWRkKHNlbGVjdGVkRWxlbWVudCk7CisJCQkJd2hpbGUgKHNlbGVjdGVkRWxlbWVudHMuaGFzTmV4dCgpKSB7CisJCQkJCXNlbGVjdGlvbkxpc3QuYWRkKHNlbGVjdGVkRWxlbWVudHMubmV4dCgpKTsKKwkJCQl9CisKKwkJCQkvLyBTZXQgdGhlIHNlbGVjdGlvbiB0byB0aGUgd2lkZ2V0LgorCQkJCS8vCisJCQkJc2VsZWN0aW9uVmlld2VyLnNldFNlbGVjdGlvbihuZXcgU3RydWN0dXJlZFNlbGVjdGlvbihzZWxlY3Rpb25MaXN0KSk7CisJCQl9CisJCX0KKwl9CisKKwkvKioKKwkgKiBUaGlzIGlzIGZvciBpbXBsZW1lbnRpbmcge0BsaW5rIElFZGl0b3JQYXJ0fSBhbmQgc2ltcGx5IHRlc3RzIHRoZSBjb21tYW5kIHN0YWNrLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBib29sZWFuIGlzRGlydHkoKSB7CisJCXJldHVybiAoKEJhc2ljQ29tbWFuZFN0YWNrKWVkaXRpbmdEb21haW4uZ2V0Q29tbWFuZFN0YWNrKCkpLmlzU2F2ZU5lZWRlZCgpOworCX0KKworCS8qKgorCSAqIFRoaXMgaXMgZm9yIGltcGxlbWVudGluZyB7QGxpbmsgSUVkaXRvclBhcnR9IGFuZCBzaW1wbHkgc2F2ZXMgdGhlIG1vZGVsIGZpbGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgZG9TYXZlKElQcm9ncmVzc01vbml0b3IgcHJvZ3Jlc3NNb25pdG9yKSB7CisJCS8vIFNhdmUgb25seSByZXNvdXJjZXMgdGhhdCBoYXZlIGFjdHVhbGx5IGNoYW5nZWQuCisJCS8vCisJCWZpbmFsIE1hcDxPYmplY3QsIE9iamVjdD4gc2F2ZU9wdGlvbnMgPSBuZXcgSGFzaE1hcDxPYmplY3QsIE9iamVjdD4oKTsKKwkJc2F2ZU9wdGlvbnMucHV0KFJlc291cmNlLk9QVElPTl9TQVZFX09OTFlfSUZfQ0hBTkdFRCwgUmVzb3VyY2UuT1BUSU9OX1NBVkVfT05MWV9JRl9DSEFOR0VEX01FTU9SWV9CVUZGRVIpOworCisJCS8vIERvIHRoZSB3b3JrIHdpdGhpbiBhbiBvcGVyYXRpb24gYmVjYXVzZSB0aGlzIGlzIGEgbG9uZyBydW5uaW5nIGFjdGl2aXR5IHRoYXQgbW9kaWZpZXMgdGhlIHdvcmtiZW5jaC4KKwkJLy8KKwkJV29ya3NwYWNlTW9kaWZ5T3BlcmF0aW9uIG9wZXJhdGlvbiA9CisJCQluZXcgV29ya3NwYWNlTW9kaWZ5T3BlcmF0aW9uKCkgeworCQkJCS8vIFRoaXMgaXMgdGhlIG1ldGhvZCB0aGF0IGdldHMgaW52b2tlZCB3aGVuIHRoZSBvcGVyYXRpb24gcnVucy4KKwkJCQkvLworCQkJCUBPdmVycmlkZQorCQkJCXB1YmxpYyB2b2lkIGV4ZWN1dGUoSVByb2dyZXNzTW9uaXRvciBtb25pdG9yKSB7CisJCQkJCS8vIFNhdmUgdGhlIHJlc291cmNlcyB0byB0aGUgZmlsZSBzeXN0ZW0uCisJCQkJCS8vCisJCQkJCWJvb2xlYW4gZmlyc3QgPSB0cnVlOworCQkJCQlmb3IgKFJlc291cmNlIHJlc291cmNlIDogZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpLmdldFJlc291cmNlcygpKSB7CisJCQkJCQlpZiAoKGZpcnN0IHx8ICFyZXNvdXJjZS5nZXRDb250ZW50cygpLmlzRW1wdHkoKSB8fCBpc1BlcnNpc3RlZChyZXNvdXJjZSkpICYmICFlZGl0aW5nRG9tYWluLmlzUmVhZE9ubHkocmVzb3VyY2UpKSB7CisJCQkJCQkJdHJ5IHsKKwkJCQkJCQkJbG9uZyB0aW1lU3RhbXAgPSByZXNvdXJjZS5nZXRUaW1lU3RhbXAoKTsKKwkJCQkJCQkJcmVzb3VyY2Uuc2F2ZShzYXZlT3B0aW9ucyk7CisJCQkJCQkJCWlmIChyZXNvdXJjZS5nZXRUaW1lU3RhbXAoKSAhPSB0aW1lU3RhbXApIHsKKwkJCQkJCQkJCXNhdmVkUmVzb3VyY2VzLmFkZChyZXNvdXJjZSk7CisJCQkJCQkJCX0KKwkJCQkJCQl9CisJCQkJCQkJY2F0Y2ggKEV4Y2VwdGlvbiBleGNlcHRpb24pIHsKKwkJCQkJCQkJcmVzb3VyY2VUb0RpYWdub3N0aWNNYXAucHV0KHJlc291cmNlLCBhbmFseXplUmVzb3VyY2VQcm9ibGVtcyhyZXNvdXJjZSwgZXhjZXB0aW9uKSk7CisJCQkJCQkJfQorCQkJCQkJCWZpcnN0ID0gZmFsc2U7CisJCQkJCQl9CisJCQkJCX0KKwkJCQl9CisJCQl9OworCisJCXVwZGF0ZVByb2JsZW1JbmRpY2F0aW9uID0gZmFsc2U7CisJCXRyeSB7CisJCQkvLyBUaGlzIHJ1bnMgdGhlIG9wdGlvbnMsIGFuZCBzaG93cyBwcm9ncmVzcy4KKwkJCS8vCisJCQluZXcgUHJvZ3Jlc3NNb25pdG9yRGlhbG9nKGdldFNpdGUoKS5nZXRTaGVsbCgpKS5ydW4odHJ1ZSwgZmFsc2UsIG9wZXJhdGlvbik7CisKKwkJCS8vIFJlZnJlc2ggdGhlIG5lY2Vzc2FyeSBzdGF0ZS4KKwkJCS8vCisJCQkoKEJhc2ljQ29tbWFuZFN0YWNrKWVkaXRpbmdEb21haW4uZ2V0Q29tbWFuZFN0YWNrKCkpLnNhdmVJc0RvbmUoKTsKKwkJCWZpcmVQcm9wZXJ0eUNoYW5nZShJRWRpdG9yUGFydC5QUk9QX0RJUlRZKTsKKwkJfQorCQljYXRjaCAoRXhjZXB0aW9uIGV4Y2VwdGlvbikgeworCQkJLy8gU29tZXRoaW5nIHdlbnQgd3JvbmcgdGhhdCBzaG91bGRuJ3QuCisJCQkvLworCQkJRGVmaW5pdGlvbnNFZGl0UGx1Z2luLklOU1RBTkNFLmxvZyhleGNlcHRpb24pOworCQl9CisJCXVwZGF0ZVByb2JsZW1JbmRpY2F0aW9uID0gdHJ1ZTsKKwkJdXBkYXRlUHJvYmxlbUluZGljYXRpb24oKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgd2hldGhlciBzb21ldGhpbmcgaGFzIGJlZW4gcGVyc2lzdGVkIHRvIHRoZSBVUkkgb2YgdGhlIHNwZWNpZmllZCByZXNvdXJjZS4KKwkgKiBUaGUgaW1wbGVtZW50YXRpb24gdXNlcyB0aGUgVVJJIGNvbnZlcnRlciBmcm9tIHRoZSBlZGl0b3IncyByZXNvdXJjZSBzZXQgdG8gdHJ5IHRvIG9wZW4gYW4gaW5wdXQgc3RyZWFtLiAKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgYm9vbGVhbiBpc1BlcnNpc3RlZChSZXNvdXJjZSByZXNvdXJjZSkgeworCQlib29sZWFuIHJlc3VsdCA9IGZhbHNlOworCQl0cnkgeworCQkJSW5wdXRTdHJlYW0gc3RyZWFtID0gZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpLmdldFVSSUNvbnZlcnRlcigpLmNyZWF0ZUlucHV0U3RyZWFtKHJlc291cmNlLmdldFVSSSgpKTsKKwkJCWlmIChzdHJlYW0gIT0gbnVsbCkgeworCQkJCXJlc3VsdCA9IHRydWU7CisJCQkJc3RyZWFtLmNsb3NlKCk7CisJCQl9CisJCX0KKwkJY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKKwkJCS8vIElnbm9yZQorCQl9CisJCXJldHVybiByZXN1bHQ7CisJfQorCisJLyoqCisJICogVGhpcyBhbHdheXMgcmV0dXJucyB0cnVlIGJlY2F1c2UgaXQgaXMgbm90IGN1cnJlbnRseSBzdXBwb3J0ZWQuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIGJvb2xlYW4gaXNTYXZlQXNBbGxvd2VkKCkgeworCQlyZXR1cm4gdHJ1ZTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFsc28gY2hhbmdlcyB0aGUgZWRpdG9yJ3MgaW5wdXQuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgZG9TYXZlQXMoKSB7CisJCVNhdmVBc0RpYWxvZyBzYXZlQXNEaWFsb2cgPSBuZXcgU2F2ZUFzRGlhbG9nKGdldFNpdGUoKS5nZXRTaGVsbCgpKTsKKwkJc2F2ZUFzRGlhbG9nLm9wZW4oKTsKKwkJSVBhdGggcGF0aCA9IHNhdmVBc0RpYWxvZy5nZXRSZXN1bHQoKTsKKwkJaWYgKHBhdGggIT0gbnVsbCkgeworCQkJSUZpbGUgZmlsZSA9IFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5nZXRSb290KCkuZ2V0RmlsZShwYXRoKTsKKwkJCWlmIChmaWxlICE9IG51bGwpIHsKKwkJCQlkb1NhdmVBcyhVUkkuY3JlYXRlUGxhdGZvcm1SZXNvdXJjZVVSSShmaWxlLmdldEZ1bGxQYXRoKCkudG9TdHJpbmcoKSwgdHJ1ZSksIG5ldyBGaWxlRWRpdG9ySW5wdXQoZmlsZSkpOworCQkJfQorCQl9CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgZG9TYXZlQXMoVVJJIHVyaSwgSUVkaXRvcklucHV0IGVkaXRvcklucHV0KSB7CisJCShlZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkuZ2V0UmVzb3VyY2VzKCkuZ2V0KDApKS5zZXRVUkkodXJpKTsKKwkJc2V0SW5wdXRXaXRoTm90aWZ5KGVkaXRvcklucHV0KTsKKwkJc2V0UGFydE5hbWUoZWRpdG9ySW5wdXQuZ2V0TmFtZSgpKTsKKwkJSVByb2dyZXNzTW9uaXRvciBwcm9ncmVzc01vbml0b3IgPQorCQkJZ2V0QWN0aW9uQmFycygpLmdldFN0YXR1c0xpbmVNYW5hZ2VyKCkgIT0gbnVsbCA/CisJCQkJZ2V0QWN0aW9uQmFycygpLmdldFN0YXR1c0xpbmVNYW5hZ2VyKCkuZ2V0UHJvZ3Jlc3NNb25pdG9yKCkgOgorCQkJCW5ldyBOdWxsUHJvZ3Jlc3NNb25pdG9yKCk7CisJCWRvU2F2ZShwcm9ncmVzc01vbml0b3IpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIGdvdG9NYXJrZXIoSU1hcmtlciBtYXJrZXIpIHsKKwkJdHJ5IHsKKwkJCWlmIChtYXJrZXIuZ2V0VHlwZSgpLmVxdWFscyhFVmFsaWRhdG9yLk1BUktFUikpIHsKKwkJCQlTdHJpbmcgdXJpQXR0cmlidXRlID0gbWFya2VyLmdldEF0dHJpYnV0ZShFVmFsaWRhdG9yLlVSSV9BVFRSSUJVVEUsIG51bGwpOworCQkJCWlmICh1cmlBdHRyaWJ1dGUgIT0gbnVsbCkgeworCQkJCQlVUkkgdXJpID0gVVJJLmNyZWF0ZVVSSSh1cmlBdHRyaWJ1dGUpOworCQkJCQlFT2JqZWN0IGVPYmplY3QgPSBlZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkuZ2V0RU9iamVjdCh1cmksIHRydWUpOworCQkJCQlpZiAoZU9iamVjdCAhPSBudWxsKSB7CisJCQkJCSAgc2V0U2VsZWN0aW9uVG9WaWV3ZXIoQ29sbGVjdGlvbnMuc2luZ2xldG9uKGVkaXRpbmdEb21haW4uZ2V0V3JhcHBlcihlT2JqZWN0KSkpOworCQkJCQl9CisJCQkJfQorCQkJfQorCQl9CisJCWNhdGNoIChDb3JlRXhjZXB0aW9uIGV4Y2VwdGlvbikgeworCQkJRGVmaW5pdGlvbnNFZGl0UGx1Z2luLklOU1RBTkNFLmxvZyhleGNlcHRpb24pOworCQl9CisJfQorCisJLyoqCisJICogVGhpcyBpcyBjYWxsZWQgZHVyaW5nIHN0YXJ0dXAuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgaW5pdChJRWRpdG9yU2l0ZSBzaXRlLCBJRWRpdG9ySW5wdXQgZWRpdG9ySW5wdXQpIHsKKwkJc2V0U2l0ZShzaXRlKTsKKwkJc2V0SW5wdXRXaXRoTm90aWZ5KGVkaXRvcklucHV0KTsKKwkJc2V0UGFydE5hbWUoZWRpdG9ySW5wdXQuZ2V0TmFtZSgpKTsKKwkJc2l0ZS5zZXRTZWxlY3Rpb25Qcm92aWRlcih0aGlzKTsKKwkJc2l0ZS5nZXRQYWdlKCkuYWRkUGFydExpc3RlbmVyKHBhcnRMaXN0ZW5lcik7CisJCVJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5hZGRSZXNvdXJjZUNoYW5nZUxpc3RlbmVyKHJlc291cmNlQ2hhbmdlTGlzdGVuZXIsIElSZXNvdXJjZUNoYW5nZUV2ZW50LlBPU1RfQ0hBTkdFKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBzZXRGb2N1cygpIHsKKwkJZ2V0Q29udHJvbChnZXRBY3RpdmVQYWdlKCkpLnNldEZvY3VzKCk7CisJfQorCisJLyoqCisJICogVGhpcyBpbXBsZW1lbnRzIHtAbGluayBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb25Qcm92aWRlcn0uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgYWRkU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyKElTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIgbGlzdGVuZXIpIHsKKwkJc2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVycy5hZGQobGlzdGVuZXIpOworCX0KKworCS8qKgorCSAqIFRoaXMgaW1wbGVtZW50cyB7QGxpbmsgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uUHJvdmlkZXJ9LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIHJlbW92ZVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcihJU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyIGxpc3RlbmVyKSB7CisJCXNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcnMucmVtb3ZlKGxpc3RlbmVyKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGltcGxlbWVudHMge0BsaW5rIG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvblByb3ZpZGVyfSB0byByZXR1cm4gdGhpcyBlZGl0b3IncyBvdmVyYWxsIHNlbGVjdGlvbi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgSVNlbGVjdGlvbiBnZXRTZWxlY3Rpb24oKSB7CisJCXJldHVybiBlZGl0b3JTZWxlY3Rpb247CisJfQorCisJLyoqCisJICogVGhpcyBpbXBsZW1lbnRzIHtAbGluayBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb25Qcm92aWRlcn0gdG8gc2V0IHRoaXMgZWRpdG9yJ3Mgb3ZlcmFsbCBzZWxlY3Rpb24uCisJICogQ2FsbGluZyB0aGlzIHJlc3VsdCB3aWxsIG5vdGlmeSB0aGUgbGlzdGVuZXJzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIHNldFNlbGVjdGlvbihJU2VsZWN0aW9uIHNlbGVjdGlvbikgeworCQllZGl0b3JTZWxlY3Rpb24gPSBzZWxlY3Rpb247CisKKwkJZm9yIChJU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyIGxpc3RlbmVyIDogc2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVycykgeworCQkJbGlzdGVuZXIuc2VsZWN0aW9uQ2hhbmdlZChuZXcgU2VsZWN0aW9uQ2hhbmdlZEV2ZW50KHRoaXMsIHNlbGVjdGlvbikpOworCQl9CisJCXNldFN0YXR1c0xpbmVNYW5hZ2VyKHNlbGVjdGlvbik7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgc2V0U3RhdHVzTGluZU1hbmFnZXIoSVNlbGVjdGlvbiBzZWxlY3Rpb24pIHsKKwkJSVN0YXR1c0xpbmVNYW5hZ2VyIHN0YXR1c0xpbmVNYW5hZ2VyID0gY3VycmVudFZpZXdlciAhPSBudWxsICYmIGN1cnJlbnRWaWV3ZXIgPT0gY29udGVudE91dGxpbmVWaWV3ZXIgPworCQkJY29udGVudE91dGxpbmVTdGF0dXNMaW5lTWFuYWdlciA6IGdldEFjdGlvbkJhcnMoKS5nZXRTdGF0dXNMaW5lTWFuYWdlcigpOworCisJCWlmIChzdGF0dXNMaW5lTWFuYWdlciAhPSBudWxsKSB7CisJCQlpZiAoc2VsZWN0aW9uIGluc3RhbmNlb2YgSVN0cnVjdHVyZWRTZWxlY3Rpb24pIHsKKwkJCQlDb2xsZWN0aW9uPD8+IGNvbGxlY3Rpb24gPSAoKElTdHJ1Y3R1cmVkU2VsZWN0aW9uKXNlbGVjdGlvbikudG9MaXN0KCk7CisJCQkJc3dpdGNoIChjb2xsZWN0aW9uLnNpemUoKSkgeworCQkJCQljYXNlIDA6IHsKKwkJCQkJCXN0YXR1c0xpbmVNYW5hZ2VyLnNldE1lc3NhZ2UoZ2V0U3RyaW5nKCJfVUlfTm9PYmplY3RTZWxlY3RlZCIpKTsgLy8kTk9OLU5MUy0xJAorCQkJCQkJYnJlYWs7CisJCQkJCX0KKwkJCQkJY2FzZSAxOiB7CisJCQkJCQlTdHJpbmcgdGV4dCA9IG5ldyBBZGFwdGVyRmFjdG9yeUl0ZW1EZWxlZ2F0b3IoYWRhcHRlckZhY3RvcnkpLmdldFRleHQoY29sbGVjdGlvbi5pdGVyYXRvcigpLm5leHQoKSk7CisJCQkJCQlzdGF0dXNMaW5lTWFuYWdlci5zZXRNZXNzYWdlKGdldFN0cmluZygiX1VJX1NpbmdsZU9iamVjdFNlbGVjdGVkIiwgdGV4dCkpOyAvLyROT04tTkxTLTEkCisJCQkJCQlicmVhazsKKwkJCQkJfQorCQkJCQlkZWZhdWx0OiB7CisJCQkJCQlzdGF0dXNMaW5lTWFuYWdlci5zZXRNZXNzYWdlKGdldFN0cmluZygiX1VJX011bHRpT2JqZWN0U2VsZWN0ZWQiLCBJbnRlZ2VyLnRvU3RyaW5nKGNvbGxlY3Rpb24uc2l6ZSgpKSkpOyAvLyROT04tTkxTLTEkCisJCQkJCQlicmVhazsKKwkJCQkJfQorCQkJCX0KKwkJCX0KKwkJCWVsc2UgeworCQkJCXN0YXR1c0xpbmVNYW5hZ2VyLnNldE1lc3NhZ2UoIiIpOyAvLyROT04tTkxTLTEkCisJCQl9CisJCX0KKwl9CisKKwkvKioKKwkgKiBUaGlzIGxvb2tzIHVwIGEgc3RyaW5nIGluIHRoZSBwbHVnaW4ncyBwbHVnaW4ucHJvcGVydGllcyBmaWxlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByaXZhdGUgc3RhdGljIFN0cmluZyBnZXRTdHJpbmcoU3RyaW5nIGtleSkgeworCQlyZXR1cm4gRGVmaW5pdGlvbnNFZGl0UGx1Z2luLklOU1RBTkNFLmdldFN0cmluZyhrZXkpOworCX0KKworCS8qKgorCSAqIFRoaXMgbG9va3MgdXAgYSBzdHJpbmcgaW4gcGx1Z2luLnByb3BlcnRpZXMsIG1ha2luZyBhIHN1YnN0aXR1dGlvbi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcml2YXRlIHN0YXRpYyBTdHJpbmcgZ2V0U3RyaW5nKFN0cmluZyBrZXksIE9iamVjdCBzMSkgeworCQlyZXR1cm4gRGVmaW5pdGlvbnNFZGl0UGx1Z2luLklOU1RBTkNFLmdldFN0cmluZyhrZXksIG5ldyBPYmplY3QgW10geyBzMSB9KTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGltcGxlbWVudHMge0BsaW5rIG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JTWVudUxpc3RlbmVyfSB0byBoZWxwIGZpbGwgdGhlIGNvbnRleHQgbWVudXMgd2l0aCBjb250cmlidXRpb25zIGZyb20gdGhlIEVkaXQgbWVudS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBtZW51QWJvdXRUb1Nob3coSU1lbnVNYW5hZ2VyIG1lbnVNYW5hZ2VyKSB7CisJCSgoSU1lbnVMaXN0ZW5lcilnZXRFZGl0b3JTaXRlKCkuZ2V0QWN0aW9uQmFyQ29udHJpYnV0b3IoKSkubWVudUFib3V0VG9TaG93KG1lbnVNYW5hZ2VyKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRWRpdGluZ0RvbWFpbkFjdGlvbkJhckNvbnRyaWJ1dG9yIGdldEFjdGlvbkJhckNvbnRyaWJ1dG9yKCkgeworCQlyZXR1cm4gKEVkaXRpbmdEb21haW5BY3Rpb25CYXJDb250cmlidXRvcilnZXRFZGl0b3JTaXRlKCkuZ2V0QWN0aW9uQmFyQ29udHJpYnV0b3IoKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgSUFjdGlvbkJhcnMgZ2V0QWN0aW9uQmFycygpIHsKKwkJcmV0dXJuIGdldEFjdGlvbkJhckNvbnRyaWJ1dG9yKCkuZ2V0QWN0aW9uQmFycygpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBBZGFwdGVyRmFjdG9yeSBnZXRBZGFwdGVyRmFjdG9yeSgpIHsKKwkJcmV0dXJuIGFkYXB0ZXJGYWN0b3J5OworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGRpc3Bvc2UoKSB7CisJCXVwZGF0ZVByb2JsZW1JbmRpY2F0aW9uID0gZmFsc2U7CisKKwkJUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLnJlbW92ZVJlc291cmNlQ2hhbmdlTGlzdGVuZXIocmVzb3VyY2VDaGFuZ2VMaXN0ZW5lcik7CisKKwkJZ2V0U2l0ZSgpLmdldFBhZ2UoKS5yZW1vdmVQYXJ0TGlzdGVuZXIocGFydExpc3RlbmVyKTsKKworCQlhZGFwdGVyRmFjdG9yeS5kaXNwb3NlKCk7CisKKwkJaWYgKGdldEFjdGlvbkJhckNvbnRyaWJ1dG9yKCkuZ2V0QWN0aXZlRWRpdG9yKCkgPT0gdGhpcykgeworCQkJZ2V0QWN0aW9uQmFyQ29udHJpYnV0b3IoKS5zZXRBY3RpdmVFZGl0b3IobnVsbCk7CisJCX0KKworCQlpZiAocHJvcGVydHlTaGVldFBhZ2UgIT0gbnVsbCkgeworCQkJcHJvcGVydHlTaGVldFBhZ2UuZGlzcG9zZSgpOworCQl9CisKKwkJaWYgKGNvbnRlbnRPdXRsaW5lUGFnZSAhPSBudWxsKSB7CisJCQljb250ZW50T3V0bGluZVBhZ2UuZGlzcG9zZSgpOworCQl9CisKKwkJc3VwZXIuZGlzcG9zZSgpOworCX0KKworCS8qKgorCSAqIFJldHVybnMgd2hldGhlciB0aGUgb3V0bGluZSB2aWV3IHNob3VsZCBiZSBwcmVzZW50ZWQgdG8gdGhlIHVzZXIuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIGJvb2xlYW4gc2hvd091dGxpbmVWaWV3KCkgeworCQlyZXR1cm4gZmFsc2U7CisJfQorfQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL2VkZ2VzL3Byb3ZpZGVyL0RlZmluaXRpb25zRWRpdFBsdWdpbi5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL2VkZ2VzL3Byb3ZpZGVyL0RlZmluaXRpb25zRWRpdFBsdWdpbi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVhOWQyMmEKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvZWRnZXMvcHJvdmlkZXIvRGVmaW5pdGlvbnNFZGl0UGx1Z2luLmphdmEKQEAgLTAsMCArMSwxMDIgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5lZGdlcy5wcm92aWRlcjsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLkVNRlBsdWdpbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnVpLkVjbGlwc2VVSVBsdWdpbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuUmVzb3VyY2VMb2NhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5wcm92aWRlci5FY29yZUVkaXRQbHVnaW47CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5wcm92aWRlci5Db3JlRWRpdFBsdWdpbjsKKworLyoqCisgKiBUaGlzIGlzIHRoZSBjZW50cmFsIHNpbmdsZXRvbiBmb3IgdGhlIERlZmluaXRpb25zIGVkaXRvciBwbHVnaW4uCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBmaW5hbCBjbGFzcyBEZWZpbml0aW9uc0VkaXRQbHVnaW4gZXh0ZW5kcyBFTUZQbHVnaW4geworCS8qKgorCSAqIEtlZXAgdHJhY2sgb2YgdGhlIHNpbmdsZXRvbi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIERlZmluaXRpb25zRWRpdFBsdWdpbiBJTlNUQU5DRSA9IG5ldyBEZWZpbml0aW9uc0VkaXRQbHVnaW4oKTsKKwkKKwkvKioKKwkgKiBLZWVwIHRyYWNrIG9mIHRoZSBzaW5nbGV0b24uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJpdmF0ZSBzdGF0aWMgSW1wbGVtZW50YXRpb24gcGx1Z2luOworCisJLyoqCisJICogQ3JlYXRlIHRoZSBpbnN0YW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRGVmaW5pdGlvbnNFZGl0UGx1Z2luKCkgeworCQlzdXBlcgorCQkJKG5ldyBSZXNvdXJjZUxvY2F0b3IgW10geworCQkJCUNvcmVFZGl0UGx1Z2luLklOU1RBTkNFLAorCQkJCUVjb3JlRWRpdFBsdWdpbi5JTlNUQU5DRSwKKwkJCX0pOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIHNpbmdsZXRvbiBpbnN0YW5jZSBvZiB0aGUgRWNsaXBzZSBwbHVnaW4uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBzaW5nbGV0b24gaW5zdGFuY2UuCisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBSZXNvdXJjZUxvY2F0b3IgZ2V0UGx1Z2luUmVzb3VyY2VMb2NhdG9yKCkgeworCQlyZXR1cm4gcGx1Z2luOworCX0KKwkKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBzaW5nbGV0b24gaW5zdGFuY2Ugb2YgdGhlIEVjbGlwc2UgcGx1Z2luLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgc2luZ2xldG9uIGluc3RhbmNlLgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgc3RhdGljIEltcGxlbWVudGF0aW9uIGdldFBsdWdpbigpIHsKKwkJcmV0dXJuIHBsdWdpbjsKKwl9CisJCisJLyoqCisJICogVGhlIGFjdHVhbCBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgRWNsaXBzZSA8Yj5QbHVnaW48L2I+LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBzdGF0aWMgY2xhc3MgSW1wbGVtZW50YXRpb24gZXh0ZW5kcyBFY2xpcHNlVUlQbHVnaW4geworCQkvKioKKwkJICogQ3JlYXRlcyBhbiBpbnN0YW5jZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCXB1YmxpYyBJbXBsZW1lbnRhdGlvbigpIHsKKwkJCXN1cGVyKCk7CisJCisJCQkvLyBSZW1lbWJlciB0aGUgc3RhdGljIGluc3RhbmNlLgorCQkJLy8KKwkJCXBsdWdpbiA9IHRoaXM7CisJCX0KKwl9CisKK30KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy9lZGdlcy9wcm92aWRlci9FZGdlc0l0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5LmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvZWRnZXMvcHJvdmlkZXIvRWRnZXNJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFlYzNiYzkKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvZWRnZXMvcHJvdmlkZXIvRWRnZXNJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeS5qYXZhCkBAIC0wLDAgKzEsMzUwIEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuZWRnZXMucHJvdmlkZXI7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LkFkYXB0ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkNoYW5nZU5vdGlmaWVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkNvbXBvc2VhYmxlQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuQ29tcG9zZWRBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JQ2hhbmdlTm90aWZpZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSURpc3Bvc2FibGU7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUVkaXRpbmdEb21haW5JdGVtUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1MYWJlbFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtUHJvcGVydHlTb3VyY2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSU5vdGlmeUNoYW5nZWRMaXN0ZW5lcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JU3RydWN0dXJlZEl0ZW1Db250ZW50UHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVRyZWVJdGVtQ29udGVudFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuZWRnZXMudXRpbC5FZGdlc0FkYXB0ZXJGYWN0b3J5OworCisvKioKKyAqIFRoaXMgaXMgdGhlIGZhY3RvcnkgdGhhdCBpcyB1c2VkIHRvIHByb3ZpZGUgdGhlIGludGVyZmFjZXMgbmVlZGVkIHRvIHN1cHBvcnQgVmlld2Vycy4KKyAqIFRoZSBhZGFwdGVycyBnZW5lcmF0ZWQgYnkgdGhpcyBmYWN0b3J5IGNvbnZlcnQgRU1GIGFkYXB0ZXIgbm90aWZpY2F0aW9ucyBpbnRvIGNhbGxzIHRvIHtAbGluayAjZmlyZU5vdGlmeUNoYW5nZWQgZmlyZU5vdGlmeUNoYW5nZWR9LgorICogVGhlIGFkYXB0ZXJzIGFsc28gc3VwcG9ydCBFY2xpcHNlIHByb3BlcnR5IHNoZWV0cy4KKyAqIE5vdGUgdGhhdCBtb3N0IG9mIHRoZSBhZGFwdGVycyBhcmUgc2hhcmVkIGFtb25nIG11bHRpcGxlIGluc3RhbmNlcy4KKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIEVkZ2VzSXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkgZXh0ZW5kcyBFZGdlc0FkYXB0ZXJGYWN0b3J5IGltcGxlbWVudHMgQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSwgSUNoYW5nZU5vdGlmaWVyLCBJRGlzcG9zYWJsZSB7CisJLyoqCisJICogVGhpcyBrZWVwcyB0cmFjayBvZiB0aGUgcm9vdCBhZGFwdGVyIGZhY3RvcnkgdGhhdCBkZWxlZ2F0ZXMgdG8gdGhpcyBhZGFwdGVyIGZhY3RvcnkuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIENvbXBvc2VkQWRhcHRlckZhY3RvcnkgcGFyZW50QWRhcHRlckZhY3Rvcnk7CisKKwkvKioKKwkgKiBUaGlzIGlzIHVzZWQgdG8gaW1wbGVtZW50IHtAbGluayBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JQ2hhbmdlTm90aWZpZXJ9LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBJQ2hhbmdlTm90aWZpZXIgY2hhbmdlTm90aWZpZXIgPSBuZXcgQ2hhbmdlTm90aWZpZXIoKTsKKworCS8qKgorCSAqIFRoaXMga2VlcHMgdHJhY2sgb2YgYWxsIHRoZSBzdXBwb3J0ZWQgdHlwZXMgY2hlY2tlZCBieSB7QGxpbmsgI2lzRmFjdG9yeUZvclR5cGUgaXNGYWN0b3J5Rm9yVHlwZX0uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIENvbGxlY3Rpb248T2JqZWN0PiBzdXBwb3J0ZWRUeXBlcyA9IG5ldyBBcnJheUxpc3Q8T2JqZWN0PigpOworCisJLyoqCisJICogVGhpcyBjb25zdHJ1Y3RzIGFuIGluc3RhbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFZGdlc0l0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5KCkgeworCQlzdXBwb3J0ZWRUeXBlcy5hZGQoSUVkaXRpbmdEb21haW5JdGVtUHJvdmlkZXIuY2xhc3MpOworCQlzdXBwb3J0ZWRUeXBlcy5hZGQoSVN0cnVjdHVyZWRJdGVtQ29udGVudFByb3ZpZGVyLmNsYXNzKTsKKwkJc3VwcG9ydGVkVHlwZXMuYWRkKElUcmVlSXRlbUNvbnRlbnRQcm92aWRlci5jbGFzcyk7CisJCXN1cHBvcnRlZFR5cGVzLmFkZChJSXRlbUxhYmVsUHJvdmlkZXIuY2xhc3MpOworCQlzdXBwb3J0ZWRUeXBlcy5hZGQoSUl0ZW1Qcm9wZXJ0eVNvdXJjZS5jbGFzcyk7CisJfQorCisJLyoqCisJICogVGhpcyBrZWVwcyB0cmFjayBvZiB0aGUgb25lIGFkYXB0ZXIgdXNlZCBmb3IgYWxsIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmVkZ2VzLk1pZ3JhdGlvbkVkZ2V9IGluc3RhbmNlcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgTWlncmF0aW9uRWRnZUl0ZW1Qcm92aWRlciBtaWdyYXRpb25FZGdlSXRlbVByb3ZpZGVyOworCisJLyoqCisJICogVGhpcyBjcmVhdGVzIGFuIGFkYXB0ZXIgZm9yIGEge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuZWRnZXMuTWlncmF0aW9uRWRnZX0uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlTWlncmF0aW9uRWRnZUFkYXB0ZXIoKSB7CisJCWlmIChtaWdyYXRpb25FZGdlSXRlbVByb3ZpZGVyID09IG51bGwpIHsKKwkJCW1pZ3JhdGlvbkVkZ2VJdGVtUHJvdmlkZXIgPSBuZXcgTWlncmF0aW9uRWRnZUl0ZW1Qcm92aWRlcih0aGlzKTsKKwkJfQorCisJCXJldHVybiBtaWdyYXRpb25FZGdlSXRlbVByb3ZpZGVyOworCX0KKworCS8qKgorCSAqIFRoaXMga2VlcHMgdHJhY2sgb2YgdGhlIG9uZSBhZGFwdGVyIHVzZWQgZm9yIGFsbCB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5lZGdlcy5NaWdyYXRpb25FZGdlTGFiZWx9IGluc3RhbmNlcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgTWlncmF0aW9uRWRnZUxhYmVsSXRlbVByb3ZpZGVyIG1pZ3JhdGlvbkVkZ2VMYWJlbEl0ZW1Qcm92aWRlcjsKKworCS8qKgorCSAqIFRoaXMgY3JlYXRlcyBhbiBhZGFwdGVyIGZvciBhIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmVkZ2VzLk1pZ3JhdGlvbkVkZ2VMYWJlbH0uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlTWlncmF0aW9uRWRnZUxhYmVsQWRhcHRlcigpIHsKKwkJaWYgKG1pZ3JhdGlvbkVkZ2VMYWJlbEl0ZW1Qcm92aWRlciA9PSBudWxsKSB7CisJCQltaWdyYXRpb25FZGdlTGFiZWxJdGVtUHJvdmlkZXIgPSBuZXcgTWlncmF0aW9uRWRnZUxhYmVsSXRlbVByb3ZpZGVyKHRoaXMpOworCQl9CisKKwkJcmV0dXJuIG1pZ3JhdGlvbkVkZ2VMYWJlbEl0ZW1Qcm92aWRlcjsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGtlZXBzIHRyYWNrIG9mIHRoZSBvbmUgYWRhcHRlciB1c2VkIGZvciBhbGwge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuZWRnZXMuTWlncmF0aW9uRWRnZUxhYmVsVmFsdWV9IGluc3RhbmNlcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgTWlncmF0aW9uRWRnZUxhYmVsVmFsdWVJdGVtUHJvdmlkZXIgbWlncmF0aW9uRWRnZUxhYmVsVmFsdWVJdGVtUHJvdmlkZXI7CisKKwkvKioKKwkgKiBUaGlzIGNyZWF0ZXMgYW4gYWRhcHRlciBmb3IgYSB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5lZGdlcy5NaWdyYXRpb25FZGdlTGFiZWxWYWx1ZX0uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlTWlncmF0aW9uRWRnZUxhYmVsVmFsdWVBZGFwdGVyKCkgeworCQlpZiAobWlncmF0aW9uRWRnZUxhYmVsVmFsdWVJdGVtUHJvdmlkZXIgPT0gbnVsbCkgeworCQkJbWlncmF0aW9uRWRnZUxhYmVsVmFsdWVJdGVtUHJvdmlkZXIgPSBuZXcgTWlncmF0aW9uRWRnZUxhYmVsVmFsdWVJdGVtUHJvdmlkZXIodGhpcyk7CisJCX0KKworCQlyZXR1cm4gbWlncmF0aW9uRWRnZUxhYmVsVmFsdWVJdGVtUHJvdmlkZXI7CisJfQorCisJLyoqCisJICogVGhpcyBrZWVwcyB0cmFjayBvZiB0aGUgb25lIGFkYXB0ZXIgdXNlZCBmb3IgYWxsIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmVkZ2VzLk1peGluZ0VkZ2V9IGluc3RhbmNlcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgTWl4aW5nRWRnZUl0ZW1Qcm92aWRlciBtaXhpbmdFZGdlSXRlbVByb3ZpZGVyOworCisJLyoqCisJICogVGhpcyBjcmVhdGVzIGFuIGFkYXB0ZXIgZm9yIGEge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuZWRnZXMuTWl4aW5nRWRnZX0uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlTWl4aW5nRWRnZUFkYXB0ZXIoKSB7CisJCWlmIChtaXhpbmdFZGdlSXRlbVByb3ZpZGVyID09IG51bGwpIHsKKwkJCW1peGluZ0VkZ2VJdGVtUHJvdmlkZXIgPSBuZXcgTWl4aW5nRWRnZUl0ZW1Qcm92aWRlcih0aGlzKTsKKwkJfQorCisJCXJldHVybiBtaXhpbmdFZGdlSXRlbVByb3ZpZGVyOworCX0KKworCS8qKgorCSAqIFRoaXMga2VlcHMgdHJhY2sgb2YgdGhlIG9uZSBhZGFwdGVyIHVzZWQgZm9yIGFsbCB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5lZGdlcy5NaXhpbmdFZGdlTGFiZWx9IGluc3RhbmNlcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgTWl4aW5nRWRnZUxhYmVsSXRlbVByb3ZpZGVyIG1peGluZ0VkZ2VMYWJlbEl0ZW1Qcm92aWRlcjsKKworCS8qKgorCSAqIFRoaXMgY3JlYXRlcyBhbiBhZGFwdGVyIGZvciBhIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmVkZ2VzLk1peGluZ0VkZ2VMYWJlbH0uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlTWl4aW5nRWRnZUxhYmVsQWRhcHRlcigpIHsKKwkJaWYgKG1peGluZ0VkZ2VMYWJlbEl0ZW1Qcm92aWRlciA9PSBudWxsKSB7CisJCQltaXhpbmdFZGdlTGFiZWxJdGVtUHJvdmlkZXIgPSBuZXcgTWl4aW5nRWRnZUxhYmVsSXRlbVByb3ZpZGVyKHRoaXMpOworCQl9CisKKwkJcmV0dXJuIG1peGluZ0VkZ2VMYWJlbEl0ZW1Qcm92aWRlcjsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGtlZXBzIHRyYWNrIG9mIHRoZSBvbmUgYWRhcHRlciB1c2VkIGZvciBhbGwge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuZWRnZXMuTWl4aW5nRWRnZUxhYmVsVmFsdWV9IGluc3RhbmNlcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgTWl4aW5nRWRnZUxhYmVsVmFsdWVJdGVtUHJvdmlkZXIgbWl4aW5nRWRnZUxhYmVsVmFsdWVJdGVtUHJvdmlkZXI7CisKKwkvKioKKwkgKiBUaGlzIGNyZWF0ZXMgYW4gYWRhcHRlciBmb3IgYSB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5lZGdlcy5NaXhpbmdFZGdlTGFiZWxWYWx1ZX0uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlTWl4aW5nRWRnZUxhYmVsVmFsdWVBZGFwdGVyKCkgeworCQlpZiAobWl4aW5nRWRnZUxhYmVsVmFsdWVJdGVtUHJvdmlkZXIgPT0gbnVsbCkgeworCQkJbWl4aW5nRWRnZUxhYmVsVmFsdWVJdGVtUHJvdmlkZXIgPSBuZXcgTWl4aW5nRWRnZUxhYmVsVmFsdWVJdGVtUHJvdmlkZXIodGhpcyk7CisJCX0KKworCQlyZXR1cm4gbWl4aW5nRWRnZUxhYmVsVmFsdWVJdGVtUHJvdmlkZXI7CisJfQorCisJLyoqCisJICogVGhpcyBrZWVwcyB0cmFjayBvZiB0aGUgb25lIGFkYXB0ZXIgdXNlZCBmb3IgYWxsIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmVkZ2VzLlBvcHVsYXRpb25FZGdlfSBpbnN0YW5jZXMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIFBvcHVsYXRpb25FZGdlSXRlbVByb3ZpZGVyIHBvcHVsYXRpb25FZGdlSXRlbVByb3ZpZGVyOworCisJLyoqCisJICogVGhpcyBjcmVhdGVzIGFuIGFkYXB0ZXIgZm9yIGEge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuZWRnZXMuUG9wdWxhdGlvbkVkZ2V9LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZVBvcHVsYXRpb25FZGdlQWRhcHRlcigpIHsKKwkJaWYgKHBvcHVsYXRpb25FZGdlSXRlbVByb3ZpZGVyID09IG51bGwpIHsKKwkJCXBvcHVsYXRpb25FZGdlSXRlbVByb3ZpZGVyID0gbmV3IFBvcHVsYXRpb25FZGdlSXRlbVByb3ZpZGVyKHRoaXMpOworCQl9CisKKwkJcmV0dXJuIHBvcHVsYXRpb25FZGdlSXRlbVByb3ZpZGVyOworCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyB0aGUgcm9vdCBhZGFwdGVyIGZhY3RvcnkgdGhhdCBjb250YWlucyB0aGlzIGZhY3RvcnkuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnkgZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCkgeworCQlyZXR1cm4gcGFyZW50QWRhcHRlckZhY3RvcnkgPT0gbnVsbCA/IHRoaXMgOiBwYXJlbnRBZGFwdGVyRmFjdG9yeS5nZXRSb290QWRhcHRlckZhY3RvcnkoKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHNldHMgdGhlIGNvbXBvc2VkIGFkYXB0ZXIgZmFjdG9yeSB0aGF0IGNvbnRhaW5zIHRoaXMgZmFjdG9yeS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRQYXJlbnRBZGFwdGVyRmFjdG9yeShDb21wb3NlZEFkYXB0ZXJGYWN0b3J5IHBhcmVudEFkYXB0ZXJGYWN0b3J5KSB7CisJCXRoaXMucGFyZW50QWRhcHRlckZhY3RvcnkgPSBwYXJlbnRBZGFwdGVyRmFjdG9yeTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgYm9vbGVhbiBpc0ZhY3RvcnlGb3JUeXBlKE9iamVjdCB0eXBlKSB7CisJCXJldHVybiBzdXBwb3J0ZWRUeXBlcy5jb250YWlucyh0eXBlKSB8fCBzdXBlci5pc0ZhY3RvcnlGb3JUeXBlKHR5cGUpOworCX0KKworCS8qKgorCSAqIFRoaXMgaW1wbGVtZW50YXRpb24gc3Vic3RpdHV0ZXMgdGhlIGZhY3RvcnkgaXRzZWxmIGFzIHRoZSBrZXkgZm9yIHRoZSBhZGFwdGVyLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBBZGFwdGVyIGFkYXB0KE5vdGlmaWVyIG5vdGlmaWVyLCBPYmplY3QgdHlwZSkgeworCQlyZXR1cm4gc3VwZXIuYWRhcHQobm90aWZpZXIsIHRoaXMpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBPYmplY3QgYWRhcHQoT2JqZWN0IG9iamVjdCwgT2JqZWN0IHR5cGUpIHsKKwkJaWYgKGlzRmFjdG9yeUZvclR5cGUodHlwZSkpIHsKKwkJCU9iamVjdCBhZGFwdGVyID0gc3VwZXIuYWRhcHQob2JqZWN0LCB0eXBlKTsKKwkJCWlmICghKHR5cGUgaW5zdGFuY2VvZiBDbGFzczw/PikgfHwgKCgoQ2xhc3M8Pz4pdHlwZSkuaXNJbnN0YW5jZShhZGFwdGVyKSkpIHsKKwkJCQlyZXR1cm4gYWRhcHRlcjsKKwkJCX0KKwkJfQorCisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyBhIGxpc3RlbmVyLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIGFkZExpc3RlbmVyKElOb3RpZnlDaGFuZ2VkTGlzdGVuZXIgbm90aWZ5Q2hhbmdlZExpc3RlbmVyKSB7CisJCWNoYW5nZU5vdGlmaWVyLmFkZExpc3RlbmVyKG5vdGlmeUNoYW5nZWRMaXN0ZW5lcik7CisJfQorCisJLyoqCisJICogVGhpcyByZW1vdmVzIGEgbGlzdGVuZXIuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgcmVtb3ZlTGlzdGVuZXIoSU5vdGlmeUNoYW5nZWRMaXN0ZW5lciBub3RpZnlDaGFuZ2VkTGlzdGVuZXIpIHsKKwkJY2hhbmdlTm90aWZpZXIucmVtb3ZlTGlzdGVuZXIobm90aWZ5Q2hhbmdlZExpc3RlbmVyKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGRlbGVnYXRlcyB0byB7QGxpbmsgI2NoYW5nZU5vdGlmaWVyfSBhbmQgdG8ge0BsaW5rICNwYXJlbnRBZGFwdGVyRmFjdG9yeX0uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgZmlyZU5vdGlmeUNoYW5nZWQoTm90aWZpY2F0aW9uIG5vdGlmaWNhdGlvbikgeworCQljaGFuZ2VOb3RpZmllci5maXJlTm90aWZ5Q2hhbmdlZChub3RpZmljYXRpb24pOworCisJCWlmIChwYXJlbnRBZGFwdGVyRmFjdG9yeSAhPSBudWxsKSB7CisJCQlwYXJlbnRBZGFwdGVyRmFjdG9yeS5maXJlTm90aWZ5Q2hhbmdlZChub3RpZmljYXRpb24pOworCQl9CisJfQorCisJLyoqCisJICogVGhpcyBkaXNwb3NlcyBhbGwgb2YgdGhlIGl0ZW0gcHJvdmlkZXJzIGNyZWF0ZWQgYnkgdGhpcyBmYWN0b3J5LiAKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBkaXNwb3NlKCkgeworCQlpZiAobWlncmF0aW9uRWRnZUl0ZW1Qcm92aWRlciAhPSBudWxsKSBtaWdyYXRpb25FZGdlSXRlbVByb3ZpZGVyLmRpc3Bvc2UoKTsKKwkJaWYgKG1pZ3JhdGlvbkVkZ2VMYWJlbEl0ZW1Qcm92aWRlciAhPSBudWxsKSBtaWdyYXRpb25FZGdlTGFiZWxJdGVtUHJvdmlkZXIuZGlzcG9zZSgpOworCQlpZiAobWlncmF0aW9uRWRnZUxhYmVsVmFsdWVJdGVtUHJvdmlkZXIgIT0gbnVsbCkgbWlncmF0aW9uRWRnZUxhYmVsVmFsdWVJdGVtUHJvdmlkZXIuZGlzcG9zZSgpOworCQlpZiAobWl4aW5nRWRnZUl0ZW1Qcm92aWRlciAhPSBudWxsKSBtaXhpbmdFZGdlSXRlbVByb3ZpZGVyLmRpc3Bvc2UoKTsKKwkJaWYgKG1peGluZ0VkZ2VMYWJlbEl0ZW1Qcm92aWRlciAhPSBudWxsKSBtaXhpbmdFZGdlTGFiZWxJdGVtUHJvdmlkZXIuZGlzcG9zZSgpOworCQlpZiAobWl4aW5nRWRnZUxhYmVsVmFsdWVJdGVtUHJvdmlkZXIgIT0gbnVsbCkgbWl4aW5nRWRnZUxhYmVsVmFsdWVJdGVtUHJvdmlkZXIuZGlzcG9zZSgpOworCQlpZiAocG9wdWxhdGlvbkVkZ2VJdGVtUHJvdmlkZXIgIT0gbnVsbCkgcG9wdWxhdGlvbkVkZ2VJdGVtUHJvdmlkZXIuZGlzcG9zZSgpOworCX0KKworfQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL2VkZ2VzL3Byb3ZpZGVyL01pZ3JhdGlvbkVkZ2VJdGVtUHJvdmlkZXIuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy9lZGdlcy9wcm92aWRlci9NaWdyYXRpb25FZGdlSXRlbVByb3ZpZGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDViN2M0ZAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy9lZGdlcy9wcm92aWRlci9NaWdyYXRpb25FZGdlSXRlbVByb3ZpZGVyLmphdmEKQEAgLTAsMCArMSwxMzAgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5lZGdlcy5wcm92aWRlcjsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOworaW1wb3J0IGphdmEudXRpbC5MaXN0OworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5VUkk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUVkaXRpbmdEb21haW5JdGVtUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1MYWJlbFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtUHJvcGVydHlEZXNjcmlwdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtUHJvcGVydHlTb3VyY2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVN0cnVjdHVyZWRJdGVtQ29udGVudFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklUcmVlSXRlbUNvbnRlbnRQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmVkZ2VzLk1pZ3JhdGlvbkVkZ2U7CisKKy8qKgorICogVGhpcyBpcyB0aGUgaXRlbSBwcm92aWRlciBhZGFwdGVyIGZvciBhIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmVkZ2VzLk1pZ3JhdGlvbkVkZ2V9IG9iamVjdC4KKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIE1pZ3JhdGlvbkVkZ2VJdGVtUHJvdmlkZXIKKwlleHRlbmRzIFBvcHVsYXRpb25FZGdlSXRlbVByb3ZpZGVyCisJaW1wbGVtZW50cworCQlJRWRpdGluZ0RvbWFpbkl0ZW1Qcm92aWRlciwKKwkJSVN0cnVjdHVyZWRJdGVtQ29udGVudFByb3ZpZGVyLAorCQlJVHJlZUl0ZW1Db250ZW50UHJvdmlkZXIsCisJCUlJdGVtTGFiZWxQcm92aWRlciwKKwkJSUl0ZW1Qcm9wZXJ0eVNvdXJjZSB7CisJLyoqCisJICogVGhpcyBjb25zdHJ1Y3RzIGFuIGluc3RhbmNlIGZyb20gYSBmYWN0b3J5IGFuZCBhIG5vdGlmaWVyLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBNaWdyYXRpb25FZGdlSXRlbVByb3ZpZGVyKEFkYXB0ZXJGYWN0b3J5IGFkYXB0ZXJGYWN0b3J5KSB7CisJCXN1cGVyKGFkYXB0ZXJGYWN0b3J5KTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgdGhlIHByb3BlcnR5IGRlc2NyaXB0b3JzIGZvciB0aGUgYWRhcHRlZCBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgTGlzdDxJSXRlbVByb3BlcnR5RGVzY3JpcHRvcj4gZ2V0UHJvcGVydHlEZXNjcmlwdG9ycyhPYmplY3Qgb2JqZWN0KSB7CisJCWlmIChpdGVtUHJvcGVydHlEZXNjcmlwdG9ycyA9PSBudWxsKSB7CisJCQlzdXBlci5nZXRQcm9wZXJ0eURlc2NyaXB0b3JzKG9iamVjdCk7CisKKwkJfQorCQlyZXR1cm4gaXRlbVByb3BlcnR5RGVzY3JpcHRvcnM7CisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIE1pZ3JhdGlvbkVkZ2UuZ2lmLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgT2JqZWN0IGdldEltYWdlKE9iamVjdCBvYmplY3QpIHsKKwkJcmV0dXJuIG92ZXJsYXlJbWFnZShvYmplY3QsIGdldFJlc291cmNlTG9jYXRvcigpLmdldEltYWdlKCJmdWxsL2N1c3RvbTE2L21pZ3JhdGlvbi5wbmciKSk7IC8vJE5PTi1OTFMtMSQKKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgdGhlIGxhYmVsIHRleHQgZm9yIHRoZSBhZGFwdGVkIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgU3RyaW5nIGdldFRleHQoT2JqZWN0IG9iamVjdCkgeworCQlyZXR1cm4gc3VwZXIuZ2V0VGV4dChvYmplY3QpOworCX0KKwkKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgdGhlIGxhYmVsIHRleHQgZm9yIHRoZSBhZGFwdGVkIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBTdHJpbmcgZ2V0VGV4dEdlbihPYmplY3Qgb2JqZWN0KSB7CisJCVVSSSBsYWJlbFZhbHVlID0gKChNaWdyYXRpb25FZGdlKW9iamVjdCkuZ2V0VVJJKCk7CisJCVN0cmluZyBsYWJlbCA9IGxhYmVsVmFsdWUgPT0gbnVsbCA/IG51bGwgOiBsYWJlbFZhbHVlLnRvU3RyaW5nKCk7CisJCXJldHVybiBsYWJlbCA9PSBudWxsIHx8IGxhYmVsLmxlbmd0aCgpID09IDAgPworCQkJZ2V0U3RyaW5nKCJfVUlfTWlncmF0aW9uRWRnZV90eXBlIikgOiAvLyROT04tTkxTLTEkCisJCQlnZXRTdHJpbmcoIl9VSV9NaWdyYXRpb25FZGdlX3R5cGUiKSArICIgIiArIGxhYmVsOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKKwl9CisKKwkvKioKKwkgKiBUaGlzIGhhbmRsZXMgbW9kZWwgbm90aWZpY2F0aW9ucyBieSBjYWxsaW5nIHtAbGluayAjdXBkYXRlQ2hpbGRyZW59IHRvIHVwZGF0ZSBhbnkgY2FjaGVkCisJICogY2hpbGRyZW4gYW5kIGJ5IGNyZWF0aW5nIGEgdmlld2VyIG5vdGlmaWNhdGlvbiwgd2hpY2ggaXQgcGFzc2VzIHRvIHtAbGluayAjZmlyZU5vdGlmeUNoYW5nZWR9LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIG5vdGlmeUNoYW5nZWQoTm90aWZpY2F0aW9uIG5vdGlmaWNhdGlvbikgeworCQl1cGRhdGVDaGlsZHJlbihub3RpZmljYXRpb24pOworCQlzdXBlci5ub3RpZnlDaGFuZ2VkKG5vdGlmaWNhdGlvbik7CisJfQorCisJLyoqCisJICogVGhpcyBhZGRzIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuZWRpdC5jb21tYW5kLkNvbW1hbmRQYXJhbWV0ZXJ9cyBkZXNjcmliaW5nIHRoZSBjaGlsZHJlbgorCSAqIHRoYXQgY2FuIGJlIGNyZWF0ZWQgdW5kZXIgdGhpcyBvYmplY3QuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgY29sbGVjdE5ld0NoaWxkRGVzY3JpcHRvcnMoQ29sbGVjdGlvbjxPYmplY3Q+IG5ld0NoaWxkRGVzY3JpcHRvcnMsIE9iamVjdCBvYmplY3QpIHsKKwkJc3VwZXIuY29sbGVjdE5ld0NoaWxkRGVzY3JpcHRvcnMobmV3Q2hpbGREZXNjcmlwdG9ycywgb2JqZWN0KTsKKwl9CisKK30KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy9lZGdlcy9wcm92aWRlci9NaWdyYXRpb25FZGdlTGFiZWxJdGVtUHJvdmlkZXIuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy9lZGdlcy9wcm92aWRlci9NaWdyYXRpb25FZGdlTGFiZWxJdGVtUHJvdmlkZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kOWNiODdmCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL2VkZ2VzL3Byb3ZpZGVyL01pZ3JhdGlvbkVkZ2VMYWJlbEl0ZW1Qcm92aWRlci5qYXZhCkBAIC0wLDAgKzEsMTY0IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuZWRnZXMucHJvdmlkZXI7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5BZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlJlc291cmNlTG9jYXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuVVJJOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklFZGl0aW5nRG9tYWluSXRlbVByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtTGFiZWxQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbVByb3BlcnR5RGVzY3JpcHRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbVByb3BlcnR5U291cmNlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklTdHJ1Y3R1cmVkSXRlbUNvbnRlbnRQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JVHJlZUl0ZW1Db250ZW50UHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkVkZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkVkZ2VMYWJlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGgucHJvdmlkZXIuRWRnZUxhYmVsSXRlbVByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkuR2VvZ3JhcGhpY05hbWVzOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuZWRnZXMuTWlncmF0aW9uRWRnZUxhYmVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLlBoeXNpY2FsUmVsYXRpb25zaGlwTGFiZWw7CisKKy8qKgorICogVGhpcyBpcyB0aGUgaXRlbSBwcm92aWRlciBhZGFwdGVyIGZvciBhIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmVkZ2VzLk1pZ3JhdGlvbkVkZ2VMYWJlbH0gb2JqZWN0LgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgTWlncmF0aW9uRWRnZUxhYmVsSXRlbVByb3ZpZGVyCisJZXh0ZW5kcyBFZGdlTGFiZWxJdGVtUHJvdmlkZXIKKwlpbXBsZW1lbnRzCisJCUlFZGl0aW5nRG9tYWluSXRlbVByb3ZpZGVyLAorCQlJU3RydWN0dXJlZEl0ZW1Db250ZW50UHJvdmlkZXIsCisJCUlUcmVlSXRlbUNvbnRlbnRQcm92aWRlciwKKwkJSUl0ZW1MYWJlbFByb3ZpZGVyLAorCQlJSXRlbVByb3BlcnR5U291cmNlIHsKKwkvKioKKwkgKiBUaGlzIGNvbnN0cnVjdHMgYW4gaW5zdGFuY2UgZnJvbSBhIGZhY3RvcnkgYW5kIGEgbm90aWZpZXIuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIE1pZ3JhdGlvbkVkZ2VMYWJlbEl0ZW1Qcm92aWRlcihBZGFwdGVyRmFjdG9yeSBhZGFwdGVyRmFjdG9yeSkgeworCQlzdXBlcihhZGFwdGVyRmFjdG9yeSk7CisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIHRoZSBwcm9wZXJ0eSBkZXNjcmlwdG9ycyBmb3IgdGhlIGFkYXB0ZWQgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIExpc3Q8SUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I+IGdldFByb3BlcnR5RGVzY3JpcHRvcnMoT2JqZWN0IG9iamVjdCkgeworCQlpZiAoaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMgPT0gbnVsbCkgeworCQkJc3VwZXIuZ2V0UHJvcGVydHlEZXNjcmlwdG9ycyhvYmplY3QpOworCisJCX0KKwkJcmV0dXJuIGl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzOworCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyBNaWdyYXRpb25FZGdlTGFiZWwuZ2lmLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgT2JqZWN0IGdldEltYWdlKE9iamVjdCBvYmplY3QpIHsKKwkJcmV0dXJuIG92ZXJsYXlJbWFnZShvYmplY3QsIGdldFJlc291cmNlTG9jYXRvcigpLmdldEltYWdlKCJmdWxsL2N1c3RvbTE2L21pZ3JhdGlvbi5wbmciKSk7IC8vJE5PTi1OTFMtMSQKKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgdGhlIGxhYmVsIHRleHQgZm9yIHRoZSBhZGFwdGVkIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBTdHJpbmcgZ2V0VGV4dEdlbihPYmplY3Qgb2JqZWN0KSB7CisJCVVSSSBsYWJlbFZhbHVlID0gKChNaWdyYXRpb25FZGdlTGFiZWwpb2JqZWN0KS5nZXRVUkkoKTsKKwkJU3RyaW5nIGxhYmVsID0gbGFiZWxWYWx1ZSA9PSBudWxsID8gbnVsbCA6IGxhYmVsVmFsdWUudG9TdHJpbmcoKTsKKwkJcmV0dXJuIGxhYmVsID09IG51bGwgfHwgbGFiZWwubGVuZ3RoKCkgPT0gMCA/CisJCQlnZXRTdHJpbmcoIl9VSV9NaWdyYXRpb25FZGdlTGFiZWxfdHlwZSIpIDogLy8kTk9OLU5MUy0xJAorCQkJZ2V0U3RyaW5nKCJfVUlfTWlncmF0aW9uRWRnZUxhYmVsX3R5cGUiKSArICIgIiArIGxhYmVsOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKKwl9CisJCisJLyoqCisJICogVGhpcyByZXR1cm5zIHRoZSBsYWJlbCB0ZXh0IGZvciB0aGUgYWRhcHRlZCBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIFN0cmluZyBnZXRUZXh0KE9iamVjdCBvYmplY3QpIHsKKwkJZmluYWwgVVJJIGxhYmVsVVJJID0gKChNaWdyYXRpb25FZGdlTGFiZWwpIG9iamVjdCkuZ2V0VVJJKCk7CisJCWZpbmFsIFN0cmluZyBsYXN0U2VnbWVudCA9IGxhYmVsVVJJLmxhc3RTZWdtZW50KCk7CisJCWZpbmFsIGludCBpID0gbGFzdFNlZ21lbnQuaW5kZXhPZigiXyIpOworCQlmaW5hbCBTdHJpbmcgZmlyc3RJU09LZXkgPSBsYXN0U2VnbWVudC5zdWJzdHJpbmcoMCwgaSk7CisJCWZpbmFsIFN0cmluZyBzZWNvbmRJU09LZXkgPSBsYXN0U2VnbWVudC5zdWJzdHJpbmcoaSArIDEpOworCisJCWZpbmFsIFN0cmluZyBmaXJzdEdlb05hbWUgPSBHZW9ncmFwaGljTmFtZXMuZ2V0TmFtZShmaXJzdElTT0tleSk7CisJCWZpbmFsIFN0cmluZyBzZWNvbmRHZW9OYW1lID0gR2VvZ3JhcGhpY05hbWVzLmdldE5hbWUoc2Vjb25kSVNPS2V5KTsKKworCQlmaW5hbCBTdHJpbmdCdWlsZGVyIHNiID0gbmV3IFN0cmluZ0J1aWxkZXIoCisJCQkJZmlyc3RHZW9OYW1lLnN0YXJ0c1dpdGgoIiEiKSA/IGZpcnN0SVNPS2V5IDogZmlyc3RHZW9OYW1lKTsKKwkJZmluYWwgRWRnZSBlZGdlID0gKChFZGdlTGFiZWwpIG9iamVjdCkuZ2V0RWRnZSgpOworCQlzYi5hcHBlbmQoZWRnZS5pc0RpcmVjdGVkKCkgPyAiIC0+ICIgOiAiIDwtPiAiKTsKKwkJLy8gRmluZCBCdWdzIGlkZW50aWZpZWQgYXMgZXJyb3IuICBzZWNvbmRHZW9OYW1lIHdhcyB1c2VkIAorCQkvLyBmb3IgYm90aCBjb25kaXRpb25zIG9mZiB0aGUgdGVybmFyeQorCQlzYi5hcHBlbmQoc2Vjb25kR2VvTmFtZS5zdGFydHNXaXRoKCIhIikgPyBzZWNvbmRJU09LZXkKKwkJCQkJCTogc2Vjb25kR2VvTmFtZSk7CisKKwkJcmV0dXJuIHNiLnRvU3RyaW5nKCk7CisJfQorCQorCisJLyoqCisJICogVGhpcyBoYW5kbGVzIG1vZGVsIG5vdGlmaWNhdGlvbnMgYnkgY2FsbGluZyB7QGxpbmsgI3VwZGF0ZUNoaWxkcmVufSB0byB1cGRhdGUgYW55IGNhY2hlZAorCSAqIGNoaWxkcmVuIGFuZCBieSBjcmVhdGluZyBhIHZpZXdlciBub3RpZmljYXRpb24sIHdoaWNoIGl0IHBhc3NlcyB0byB7QGxpbmsgI2ZpcmVOb3RpZnlDaGFuZ2VkfS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBub3RpZnlDaGFuZ2VkKE5vdGlmaWNhdGlvbiBub3RpZmljYXRpb24pIHsKKwkJdXBkYXRlQ2hpbGRyZW4obm90aWZpY2F0aW9uKTsKKwkJc3VwZXIubm90aWZ5Q2hhbmdlZChub3RpZmljYXRpb24pOworCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmVkaXQuY29tbWFuZC5Db21tYW5kUGFyYW1ldGVyfXMgZGVzY3JpYmluZyB0aGUgY2hpbGRyZW4KKwkgKiB0aGF0IGNhbiBiZSBjcmVhdGVkIHVuZGVyIHRoaXMgb2JqZWN0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIGNvbGxlY3ROZXdDaGlsZERlc2NyaXB0b3JzKENvbGxlY3Rpb248T2JqZWN0PiBuZXdDaGlsZERlc2NyaXB0b3JzLCBPYmplY3Qgb2JqZWN0KSB7CisJCXN1cGVyLmNvbGxlY3ROZXdDaGlsZERlc2NyaXB0b3JzKG5ld0NoaWxkRGVzY3JpcHRvcnMsIG9iamVjdCk7CisJfQorCisJLyoqCisJICogUmV0dXJuIHRoZSByZXNvdXJjZSBsb2NhdG9yIGZvciB0aGlzIGl0ZW0gcHJvdmlkZXIncyByZXNvdXJjZXMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIFJlc291cmNlTG9jYXRvciBnZXRSZXNvdXJjZUxvY2F0b3IoKSB7CisJCXJldHVybiBEZWZpbml0aW9uc0VkaXRQbHVnaW4uSU5TVEFOQ0U7CisJfQorCit9CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvZWRnZXMvcHJvdmlkZXIvTWlncmF0aW9uRWRnZUxhYmVsVmFsdWVJdGVtUHJvdmlkZXIuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy9lZGdlcy9wcm92aWRlci9NaWdyYXRpb25FZGdlTGFiZWxWYWx1ZUl0ZW1Qcm92aWRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJiNWExMGMKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvZWRnZXMvcHJvdmlkZXIvTWlncmF0aW9uRWRnZUxhYmVsVmFsdWVJdGVtUHJvdmlkZXIuamF2YQpAQCAtMCwwICsxLDE2MSBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmVkZ2VzLnByb3ZpZGVyOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCitpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5BZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlJlc291cmNlTG9jYXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5Db21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklFZGl0aW5nRG9tYWluSXRlbVByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtTGFiZWxQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbVByb3BlcnR5RGVzY3JpcHRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbVByb3BlcnR5U291cmNlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklTdHJ1Y3R1cmVkSXRlbUNvbnRlbnRQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JVHJlZUl0ZW1Db250ZW50UHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSXRlbVByb3BlcnR5RGVzY3JpcHRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5WaWV3ZXJOb3RpZmljYXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLnByb3ZpZGVyLkxhYmVsVmFsdWVJdGVtUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5lZGdlcy5FZGdlc1BhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5lZGdlcy5NaWdyYXRpb25FZGdlTGFiZWxWYWx1ZTsKKworLyoqCisgKiBUaGlzIGlzIHRoZSBpdGVtIHByb3ZpZGVyIGFkYXB0ZXIgZm9yIGEge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuZWRnZXMuTWlncmF0aW9uRWRnZUxhYmVsVmFsdWV9IG9iamVjdC4KKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIE1pZ3JhdGlvbkVkZ2VMYWJlbFZhbHVlSXRlbVByb3ZpZGVyCisJZXh0ZW5kcyBMYWJlbFZhbHVlSXRlbVByb3ZpZGVyCisJaW1wbGVtZW50cworCQlJRWRpdGluZ0RvbWFpbkl0ZW1Qcm92aWRlciwKKwkJSVN0cnVjdHVyZWRJdGVtQ29udGVudFByb3ZpZGVyLAorCQlJVHJlZUl0ZW1Db250ZW50UHJvdmlkZXIsCisJCUlJdGVtTGFiZWxQcm92aWRlciwKKwkJSUl0ZW1Qcm9wZXJ0eVNvdXJjZSB7CisJLyoqCisJICogVGhpcyBjb25zdHJ1Y3RzIGFuIGluc3RhbmNlIGZyb20gYSBmYWN0b3J5IGFuZCBhIG5vdGlmaWVyLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBNaWdyYXRpb25FZGdlTGFiZWxWYWx1ZUl0ZW1Qcm92aWRlcihBZGFwdGVyRmFjdG9yeSBhZGFwdGVyRmFjdG9yeSkgeworCQlzdXBlcihhZGFwdGVyRmFjdG9yeSk7CisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIHRoZSBwcm9wZXJ0eSBkZXNjcmlwdG9ycyBmb3IgdGhlIGFkYXB0ZWQgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIExpc3Q8SUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I+IGdldFByb3BlcnR5RGVzY3JpcHRvcnMoT2JqZWN0IG9iamVjdCkgeworCQlpZiAoaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMgPT0gbnVsbCkgeworCQkJc3VwZXIuZ2V0UHJvcGVydHlEZXNjcmlwdG9ycyhvYmplY3QpOworCisJCQlhZGRNaWdyYXRpb25SYXRlUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCk7CisJCX0KKwkJcmV0dXJuIGl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzOworCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyBhIHByb3BlcnR5IGRlc2NyaXB0b3IgZm9yIHRoZSBNaWdyYXRpb24gUmF0ZSBmZWF0dXJlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIGFkZE1pZ3JhdGlvblJhdGVQcm9wZXJ0eURlc2NyaXB0b3IoT2JqZWN0IG9iamVjdCkgeworCQlpdGVtUHJvcGVydHlEZXNjcmlwdG9ycy5hZGQKKwkJCShjcmVhdGVJdGVtUHJvcGVydHlEZXNjcmlwdG9yCisJCQkJKCgoQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSlhZGFwdGVyRmFjdG9yeSkuZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCksCisJCQkJIGdldFJlc291cmNlTG9jYXRvcigpLAorCQkJCSBnZXRTdHJpbmcoIl9VSV9NaWdyYXRpb25FZGdlTGFiZWxWYWx1ZV9taWdyYXRpb25SYXRlX2ZlYXR1cmUiKSwgLy8kTk9OLU5MUy0xJAorCQkJCSBnZXRTdHJpbmcoIl9VSV9Qcm9wZXJ0eURlc2NyaXB0b3JfZGVzY3JpcHRpb24iLCAiX1VJX01pZ3JhdGlvbkVkZ2VMYWJlbFZhbHVlX21pZ3JhdGlvblJhdGVfZmVhdHVyZSIsICJfVUlfTWlncmF0aW9uRWRnZUxhYmVsVmFsdWVfdHlwZSIpLCAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQgLy8kTk9OLU5MUy0zJAorCQkJCSBFZGdlc1BhY2thZ2UuTGl0ZXJhbHMuTUlHUkFUSU9OX0VER0VfTEFCRUxfVkFMVUVfX01JR1JBVElPTl9SQVRFLAorCQkJCSB0cnVlLAorCQkJCSBmYWxzZSwKKwkJCQkgZmFsc2UsCisJCQkJIEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IuUkVBTF9WQUxVRV9JTUFHRSwKKwkJCQkgbnVsbCwKKwkJCQkgbnVsbCkpOworCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyB0aGUgbGFiZWwgdGV4dCBmb3IgdGhlIGFkYXB0ZWQgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBTdHJpbmcgZ2V0VGV4dChPYmplY3Qgb2JqZWN0KSB7CisJCU1pZ3JhdGlvbkVkZ2VMYWJlbFZhbHVlIG1pZ3JhdGlvbkVkZ2VMYWJlbFZhbHVlID0gKE1pZ3JhdGlvbkVkZ2VMYWJlbFZhbHVlKW9iamVjdDsKKwkJcmV0dXJuIG1pZ3JhdGlvbkVkZ2VMYWJlbFZhbHVlLmdldE1pZ3JhdGlvblJhdGUoKSsiIjsKKwl9CisJCisJLyoqCisJICogVGhpcyByZXR1cm5zIHRoZSBsYWJlbCB0ZXh0IGZvciB0aGUgYWRhcHRlZCBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgU3RyaW5nIGdldFRleHRHZW4oT2JqZWN0IG9iamVjdCkgeworCQlNaWdyYXRpb25FZGdlTGFiZWxWYWx1ZSBtaWdyYXRpb25FZGdlTGFiZWxWYWx1ZSA9IChNaWdyYXRpb25FZGdlTGFiZWxWYWx1ZSlvYmplY3Q7CisJCXJldHVybiBnZXRTdHJpbmcoIl9VSV9NaWdyYXRpb25FZGdlTGFiZWxWYWx1ZV90eXBlIikgKyAiICIgKyBtaWdyYXRpb25FZGdlTGFiZWxWYWx1ZS5nZXRNaWdyYXRpb25SYXRlKCk7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAorCX0KKworCS8qKgorCSAqIFRoaXMgaGFuZGxlcyBtb2RlbCBub3RpZmljYXRpb25zIGJ5IGNhbGxpbmcge0BsaW5rICN1cGRhdGVDaGlsZHJlbn0gdG8gdXBkYXRlIGFueSBjYWNoZWQKKwkgKiBjaGlsZHJlbiBhbmQgYnkgY3JlYXRpbmcgYSB2aWV3ZXIgbm90aWZpY2F0aW9uLCB3aGljaCBpdCBwYXNzZXMgdG8ge0BsaW5rICNmaXJlTm90aWZ5Q2hhbmdlZH0uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgbm90aWZ5Q2hhbmdlZChOb3RpZmljYXRpb24gbm90aWZpY2F0aW9uKSB7CisJCXVwZGF0ZUNoaWxkcmVuKG5vdGlmaWNhdGlvbik7CisKKwkJc3dpdGNoIChub3RpZmljYXRpb24uZ2V0RmVhdHVyZUlEKE1pZ3JhdGlvbkVkZ2VMYWJlbFZhbHVlLmNsYXNzKSkgeworCQkJY2FzZSBFZGdlc1BhY2thZ2UuTUlHUkFUSU9OX0VER0VfTEFCRUxfVkFMVUVfX01JR1JBVElPTl9SQVRFOgorCQkJCWZpcmVOb3RpZnlDaGFuZ2VkKG5ldyBWaWV3ZXJOb3RpZmljYXRpb24obm90aWZpY2F0aW9uLCBub3RpZmljYXRpb24uZ2V0Tm90aWZpZXIoKSwgZmFsc2UsIHRydWUpKTsKKwkJCQlyZXR1cm47CisJCX0KKwkJc3VwZXIubm90aWZ5Q2hhbmdlZChub3RpZmljYXRpb24pOworCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmVkaXQuY29tbWFuZC5Db21tYW5kUGFyYW1ldGVyfXMgZGVzY3JpYmluZyB0aGUgY2hpbGRyZW4KKwkgKiB0aGF0IGNhbiBiZSBjcmVhdGVkIHVuZGVyIHRoaXMgb2JqZWN0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIGNvbGxlY3ROZXdDaGlsZERlc2NyaXB0b3JzKENvbGxlY3Rpb248T2JqZWN0PiBuZXdDaGlsZERlc2NyaXB0b3JzLCBPYmplY3Qgb2JqZWN0KSB7CisJCXN1cGVyLmNvbGxlY3ROZXdDaGlsZERlc2NyaXB0b3JzKG5ld0NoaWxkRGVzY3JpcHRvcnMsIG9iamVjdCk7CisJfQorCisJLyoqCisJICogUmV0dXJuIHRoZSByZXNvdXJjZSBsb2NhdG9yIGZvciB0aGlzIGl0ZW0gcHJvdmlkZXIncyByZXNvdXJjZXMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIFJlc291cmNlTG9jYXRvciBnZXRSZXNvdXJjZUxvY2F0b3IoKSB7CisJCXJldHVybiBEZWZpbml0aW9uc0VkaXRQbHVnaW4uSU5TVEFOQ0U7CisJfQorCit9CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvZWRnZXMvcHJvdmlkZXIvTWl4aW5nRWRnZUl0ZW1Qcm92aWRlci5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL2VkZ2VzL3Byb3ZpZGVyL01peGluZ0VkZ2VJdGVtUHJvdmlkZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MzVlMmUwCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL2VkZ2VzL3Byb3ZpZGVyL01peGluZ0VkZ2VJdGVtUHJvdmlkZXIuamF2YQpAQCAtMCwwICsxLDExOSBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmVkZ2VzLnByb3ZpZGVyOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOworaW1wb3J0IGphdmEudXRpbC5MaXN0OworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5VUkk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUVkaXRpbmdEb21haW5JdGVtUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1MYWJlbFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtUHJvcGVydHlEZXNjcmlwdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtUHJvcGVydHlTb3VyY2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVN0cnVjdHVyZWRJdGVtQ29udGVudFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklUcmVlSXRlbUNvbnRlbnRQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmVkZ2VzLk1peGluZ0VkZ2U7CisKKy8qKgorICogVGhpcyBpcyB0aGUgaXRlbSBwcm92aWRlciBhZGFwdGVyIGZvciBhIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmVkZ2VzLk1peGluZ0VkZ2V9IG9iamVjdC4KKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIE1peGluZ0VkZ2VJdGVtUHJvdmlkZXIKKwlleHRlbmRzIFBvcHVsYXRpb25FZGdlSXRlbVByb3ZpZGVyCisJaW1wbGVtZW50cworCQlJRWRpdGluZ0RvbWFpbkl0ZW1Qcm92aWRlciwKKwkJSVN0cnVjdHVyZWRJdGVtQ29udGVudFByb3ZpZGVyLAorCQlJVHJlZUl0ZW1Db250ZW50UHJvdmlkZXIsCisJCUlJdGVtTGFiZWxQcm92aWRlciwKKwkJSUl0ZW1Qcm9wZXJ0eVNvdXJjZSB7CisJLyoqCisJICogVGhpcyBjb25zdHJ1Y3RzIGFuIGluc3RhbmNlIGZyb20gYSBmYWN0b3J5IGFuZCBhIG5vdGlmaWVyLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBNaXhpbmdFZGdlSXRlbVByb3ZpZGVyKEFkYXB0ZXJGYWN0b3J5IGFkYXB0ZXJGYWN0b3J5KSB7CisJCXN1cGVyKGFkYXB0ZXJGYWN0b3J5KTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgdGhlIHByb3BlcnR5IGRlc2NyaXB0b3JzIGZvciB0aGUgYWRhcHRlZCBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgTGlzdDxJSXRlbVByb3BlcnR5RGVzY3JpcHRvcj4gZ2V0UHJvcGVydHlEZXNjcmlwdG9ycyhPYmplY3Qgb2JqZWN0KSB7CisJCWlmIChpdGVtUHJvcGVydHlEZXNjcmlwdG9ycyA9PSBudWxsKSB7CisJCQlzdXBlci5nZXRQcm9wZXJ0eURlc2NyaXB0b3JzKG9iamVjdCk7CisKKwkJfQorCQlyZXR1cm4gaXRlbVByb3BlcnR5RGVzY3JpcHRvcnM7CisJfQorCisJCisJLyoqCisJICogVGhpcyByZXR1cm5zIHRoZSBsYWJlbCB0ZXh0IGZvciB0aGUgYWRhcHRlZCBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIFN0cmluZyBnZXRUZXh0KE9iamVjdCBvYmplY3QpIHsKKwkJcmV0dXJuIHN1cGVyLmdldFRleHQob2JqZWN0KTsKKwl9CisJCisJLyoqCisJICogVGhpcyByZXR1cm5zIHRoZSBsYWJlbCB0ZXh0IGZvciB0aGUgYWRhcHRlZCBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgU3RyaW5nIGdldFRleHRHZW4oT2JqZWN0IG9iamVjdCkgeworCQlVUkkgbGFiZWxWYWx1ZSA9ICgoTWl4aW5nRWRnZSlvYmplY3QpLmdldFVSSSgpOworCQlTdHJpbmcgbGFiZWwgPSBsYWJlbFZhbHVlID09IG51bGwgPyBudWxsIDogbGFiZWxWYWx1ZS50b1N0cmluZygpOworCQlyZXR1cm4gbGFiZWwgPT0gbnVsbCB8fCBsYWJlbC5sZW5ndGgoKSA9PSAwID8KKwkJCWdldFN0cmluZygiX1VJX01peGluZ0VkZ2VfdHlwZSIpIDogLy8kTk9OLU5MUy0xJAorCQkJZ2V0U3RyaW5nKCJfVUlfTWl4aW5nRWRnZV90eXBlIikgKyAiICIgKyBsYWJlbDsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCisJfQorCisJLyoqCisJICogVGhpcyBoYW5kbGVzIG1vZGVsIG5vdGlmaWNhdGlvbnMgYnkgY2FsbGluZyB7QGxpbmsgI3VwZGF0ZUNoaWxkcmVufSB0byB1cGRhdGUgYW55IGNhY2hlZAorCSAqIGNoaWxkcmVuIGFuZCBieSBjcmVhdGluZyBhIHZpZXdlciBub3RpZmljYXRpb24sIHdoaWNoIGl0IHBhc3NlcyB0byB7QGxpbmsgI2ZpcmVOb3RpZnlDaGFuZ2VkfS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBub3RpZnlDaGFuZ2VkKE5vdGlmaWNhdGlvbiBub3RpZmljYXRpb24pIHsKKwkJdXBkYXRlQ2hpbGRyZW4obm90aWZpY2F0aW9uKTsKKwkJc3VwZXIubm90aWZ5Q2hhbmdlZChub3RpZmljYXRpb24pOworCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmVkaXQuY29tbWFuZC5Db21tYW5kUGFyYW1ldGVyfXMgZGVzY3JpYmluZyB0aGUgY2hpbGRyZW4KKwkgKiB0aGF0IGNhbiBiZSBjcmVhdGVkIHVuZGVyIHRoaXMgb2JqZWN0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIGNvbGxlY3ROZXdDaGlsZERlc2NyaXB0b3JzKENvbGxlY3Rpb248T2JqZWN0PiBuZXdDaGlsZERlc2NyaXB0b3JzLCBPYmplY3Qgb2JqZWN0KSB7CisJCXN1cGVyLmNvbGxlY3ROZXdDaGlsZERlc2NyaXB0b3JzKG5ld0NoaWxkRGVzY3JpcHRvcnMsIG9iamVjdCk7CisJfQorCit9CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvZWRnZXMvcHJvdmlkZXIvTWl4aW5nRWRnZUxhYmVsSXRlbVByb3ZpZGVyLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvZWRnZXMvcHJvdmlkZXIvTWl4aW5nRWRnZUxhYmVsSXRlbVByb3ZpZGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzgwYTZmYQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy9lZGdlcy9wcm92aWRlci9NaXhpbmdFZGdlTGFiZWxJdGVtUHJvdmlkZXIuamF2YQpAQCAtMCwwICsxLDEyMCBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmVkZ2VzLnByb3ZpZGVyOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOworaW1wb3J0IGphdmEudXRpbC5MaXN0OworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5SZXNvdXJjZUxvY2F0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlVSSTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JRWRpdGluZ0RvbWFpbkl0ZW1Qcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbUxhYmVsUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1Qcm9wZXJ0eVNvdXJjZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JU3RydWN0dXJlZEl0ZW1Db250ZW50UHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVRyZWVJdGVtQ29udGVudFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5wcm92aWRlci5FZGdlTGFiZWxJdGVtUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5lZGdlcy5NaXhpbmdFZGdlTGFiZWw7CisKKy8qKgorICogVGhpcyBpcyB0aGUgaXRlbSBwcm92aWRlciBhZGFwdGVyIGZvciBhIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmVkZ2VzLk1peGluZ0VkZ2VMYWJlbH0gb2JqZWN0LgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgTWl4aW5nRWRnZUxhYmVsSXRlbVByb3ZpZGVyCisJZXh0ZW5kcyBFZGdlTGFiZWxJdGVtUHJvdmlkZXIKKwlpbXBsZW1lbnRzCisJCUlFZGl0aW5nRG9tYWluSXRlbVByb3ZpZGVyLAorCQlJU3RydWN0dXJlZEl0ZW1Db250ZW50UHJvdmlkZXIsCisJCUlUcmVlSXRlbUNvbnRlbnRQcm92aWRlciwKKwkJSUl0ZW1MYWJlbFByb3ZpZGVyLAorCQlJSXRlbVByb3BlcnR5U291cmNlIHsKKwkvKioKKwkgKiBUaGlzIGNvbnN0cnVjdHMgYW4gaW5zdGFuY2UgZnJvbSBhIGZhY3RvcnkgYW5kIGEgbm90aWZpZXIuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIE1peGluZ0VkZ2VMYWJlbEl0ZW1Qcm92aWRlcihBZGFwdGVyRmFjdG9yeSBhZGFwdGVyRmFjdG9yeSkgeworCQlzdXBlcihhZGFwdGVyRmFjdG9yeSk7CisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIHRoZSBwcm9wZXJ0eSBkZXNjcmlwdG9ycyBmb3IgdGhlIGFkYXB0ZWQgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIExpc3Q8SUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I+IGdldFByb3BlcnR5RGVzY3JpcHRvcnMoT2JqZWN0IG9iamVjdCkgeworCQlpZiAoaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMgPT0gbnVsbCkgeworCQkJc3VwZXIuZ2V0UHJvcGVydHlEZXNjcmlwdG9ycyhvYmplY3QpOworCisJCX0KKwkJcmV0dXJuIGl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzOworCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyB0aGUgbGFiZWwgdGV4dCBmb3IgdGhlIGFkYXB0ZWQgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIFN0cmluZyBnZXRUZXh0KE9iamVjdCBvYmplY3QpIHsKKwkJVVJJIGxhYmVsVmFsdWUgPSAoKE1peGluZ0VkZ2VMYWJlbClvYmplY3QpLmdldFVSSSgpOworCQlTdHJpbmcgbGFiZWwgPSBsYWJlbFZhbHVlID09IG51bGwgPyBudWxsIDogbGFiZWxWYWx1ZS50b1N0cmluZygpOworCQlyZXR1cm4gbGFiZWwgPT0gbnVsbCB8fCBsYWJlbC5sZW5ndGgoKSA9PSAwID8KKwkJCWdldFN0cmluZygiX1VJX01peGluZ0VkZ2VMYWJlbF90eXBlIikgOiAvLyROT04tTkxTLTEkCisJCQlnZXRTdHJpbmcoIl9VSV9NaXhpbmdFZGdlTGFiZWxfdHlwZSIpICsgIiAiICsgbGFiZWw7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAorCX0KKworCS8qKgorCSAqIFRoaXMgaGFuZGxlcyBtb2RlbCBub3RpZmljYXRpb25zIGJ5IGNhbGxpbmcge0BsaW5rICN1cGRhdGVDaGlsZHJlbn0gdG8gdXBkYXRlIGFueSBjYWNoZWQKKwkgKiBjaGlsZHJlbiBhbmQgYnkgY3JlYXRpbmcgYSB2aWV3ZXIgbm90aWZpY2F0aW9uLCB3aGljaCBpdCBwYXNzZXMgdG8ge0BsaW5rICNmaXJlTm90aWZ5Q2hhbmdlZH0uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgbm90aWZ5Q2hhbmdlZChOb3RpZmljYXRpb24gbm90aWZpY2F0aW9uKSB7CisJCXVwZGF0ZUNoaWxkcmVuKG5vdGlmaWNhdGlvbik7CisJCXN1cGVyLm5vdGlmeUNoYW5nZWQobm90aWZpY2F0aW9uKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFkZHMge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lZGl0LmNvbW1hbmQuQ29tbWFuZFBhcmFtZXRlcn1zIGRlc2NyaWJpbmcgdGhlIGNoaWxkcmVuCisJICogdGhhdCBjYW4gYmUgY3JlYXRlZCB1bmRlciB0aGlzIG9iamVjdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgdm9pZCBjb2xsZWN0TmV3Q2hpbGREZXNjcmlwdG9ycyhDb2xsZWN0aW9uPE9iamVjdD4gbmV3Q2hpbGREZXNjcmlwdG9ycywgT2JqZWN0IG9iamVjdCkgeworCQlzdXBlci5jb2xsZWN0TmV3Q2hpbGREZXNjcmlwdG9ycyhuZXdDaGlsZERlc2NyaXB0b3JzLCBvYmplY3QpOworCX0KKworCS8qKgorCSAqIFJldHVybiB0aGUgcmVzb3VyY2UgbG9jYXRvciBmb3IgdGhpcyBpdGVtIHByb3ZpZGVyJ3MgcmVzb3VyY2VzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBSZXNvdXJjZUxvY2F0b3IgZ2V0UmVzb3VyY2VMb2NhdG9yKCkgeworCQlyZXR1cm4gRGVmaW5pdGlvbnNFZGl0UGx1Z2luLklOU1RBTkNFOworCX0KKworfQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL2VkZ2VzL3Byb3ZpZGVyL01peGluZ0VkZ2VMYWJlbFZhbHVlSXRlbVByb3ZpZGVyLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvZWRnZXMvcHJvdmlkZXIvTWl4aW5nRWRnZUxhYmVsVmFsdWVJdGVtUHJvdmlkZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NDRiMDY1Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL2VkZ2VzL3Byb3ZpZGVyL01peGluZ0VkZ2VMYWJlbFZhbHVlSXRlbVByb3ZpZGVyLmphdmEKQEAgLTAsMCArMSwxNDkgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5lZGdlcy5wcm92aWRlcjsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LkFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuUmVzb3VyY2VMb2NhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkNvbXBvc2VhYmxlQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUVkaXRpbmdEb21haW5JdGVtUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1MYWJlbFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtUHJvcGVydHlEZXNjcmlwdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtUHJvcGVydHlTb3VyY2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVN0cnVjdHVyZWRJdGVtQ29udGVudFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklUcmVlSXRlbUNvbnRlbnRQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JdGVtUHJvcGVydHlEZXNjcmlwdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLlZpZXdlck5vdGlmaWNhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGgucHJvdmlkZXIuTGFiZWxWYWx1ZUl0ZW1Qcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmVkZ2VzLkVkZ2VzUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmVkZ2VzLk1peGluZ0VkZ2VMYWJlbFZhbHVlOworCisvKioKKyAqIFRoaXMgaXMgdGhlIGl0ZW0gcHJvdmlkZXIgYWRhcHRlciBmb3IgYSB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5lZGdlcy5NaXhpbmdFZGdlTGFiZWxWYWx1ZX0gb2JqZWN0LgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgTWl4aW5nRWRnZUxhYmVsVmFsdWVJdGVtUHJvdmlkZXIKKwlleHRlbmRzIExhYmVsVmFsdWVJdGVtUHJvdmlkZXIKKwlpbXBsZW1lbnRzCisJCUlFZGl0aW5nRG9tYWluSXRlbVByb3ZpZGVyLAorCQlJU3RydWN0dXJlZEl0ZW1Db250ZW50UHJvdmlkZXIsCisJCUlUcmVlSXRlbUNvbnRlbnRQcm92aWRlciwKKwkJSUl0ZW1MYWJlbFByb3ZpZGVyLAorCQlJSXRlbVByb3BlcnR5U291cmNlIHsKKwkvKioKKwkgKiBUaGlzIGNvbnN0cnVjdHMgYW4gaW5zdGFuY2UgZnJvbSBhIGZhY3RvcnkgYW5kIGEgbm90aWZpZXIuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIE1peGluZ0VkZ2VMYWJlbFZhbHVlSXRlbVByb3ZpZGVyKEFkYXB0ZXJGYWN0b3J5IGFkYXB0ZXJGYWN0b3J5KSB7CisJCXN1cGVyKGFkYXB0ZXJGYWN0b3J5KTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgdGhlIHByb3BlcnR5IGRlc2NyaXB0b3JzIGZvciB0aGUgYWRhcHRlZCBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgTGlzdDxJSXRlbVByb3BlcnR5RGVzY3JpcHRvcj4gZ2V0UHJvcGVydHlEZXNjcmlwdG9ycyhPYmplY3Qgb2JqZWN0KSB7CisJCWlmIChpdGVtUHJvcGVydHlEZXNjcmlwdG9ycyA9PSBudWxsKSB7CisJCQlzdXBlci5nZXRQcm9wZXJ0eURlc2NyaXB0b3JzKG9iamVjdCk7CisKKwkJCWFkZE1peGluZ1JhdGVQcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0KTsKKwkJfQorCQlyZXR1cm4gaXRlbVByb3BlcnR5RGVzY3JpcHRvcnM7CisJfQorCisJLyoqCisJICogVGhpcyBhZGRzIGEgcHJvcGVydHkgZGVzY3JpcHRvciBmb3IgdGhlIE1peGluZyBSYXRlIGZlYXR1cmUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgYWRkTWl4aW5nUmF0ZVByb3BlcnR5RGVzY3JpcHRvcihPYmplY3Qgb2JqZWN0KSB7CisJCWl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzLmFkZAorCQkJKGNyZWF0ZUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IKKwkJCQkoKChDb21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5KWFkYXB0ZXJGYWN0b3J5KS5nZXRSb290QWRhcHRlckZhY3RvcnkoKSwKKwkJCQkgZ2V0UmVzb3VyY2VMb2NhdG9yKCksCisJCQkJIGdldFN0cmluZygiX1VJX01peGluZ0VkZ2VMYWJlbFZhbHVlX21peGluZ1JhdGVfZmVhdHVyZSIpLCAvLyROT04tTkxTLTEkCisJCQkJIGdldFN0cmluZygiX1VJX1Byb3BlcnR5RGVzY3JpcHRvcl9kZXNjcmlwdGlvbiIsICJfVUlfTWl4aW5nRWRnZUxhYmVsVmFsdWVfbWl4aW5nUmF0ZV9mZWF0dXJlIiwgIl9VSV9NaXhpbmdFZGdlTGFiZWxWYWx1ZV90eXBlIiksIC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJCAvLyROT04tTkxTLTMkCisJCQkJIEVkZ2VzUGFja2FnZS5MaXRlcmFscy5NSVhJTkdfRURHRV9MQUJFTF9WQUxVRV9fTUlYSU5HX1JBVEUsCisJCQkJIHRydWUsCisJCQkJIGZhbHNlLAorCQkJCSBmYWxzZSwKKwkJCQkgSXRlbVByb3BlcnR5RGVzY3JpcHRvci5SRUFMX1ZBTFVFX0lNQUdFLAorCQkJCSBudWxsLAorCQkJCSBudWxsKSk7CisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIHRoZSBsYWJlbCB0ZXh0IGZvciB0aGUgYWRhcHRlZCBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgU3RyaW5nIGdldFRleHQoT2JqZWN0IG9iamVjdCkgeworCQlNaXhpbmdFZGdlTGFiZWxWYWx1ZSBtaXhpbmdFZGdlTGFiZWxWYWx1ZSA9IChNaXhpbmdFZGdlTGFiZWxWYWx1ZSlvYmplY3Q7CisJCXJldHVybiBnZXRTdHJpbmcoIl9VSV9NaXhpbmdFZGdlTGFiZWxWYWx1ZV90eXBlIikgKyAiICIgKyBtaXhpbmdFZGdlTGFiZWxWYWx1ZS5nZXRNaXhpbmdSYXRlKCk7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAorCX0KKworCS8qKgorCSAqIFRoaXMgaGFuZGxlcyBtb2RlbCBub3RpZmljYXRpb25zIGJ5IGNhbGxpbmcge0BsaW5rICN1cGRhdGVDaGlsZHJlbn0gdG8gdXBkYXRlIGFueSBjYWNoZWQKKwkgKiBjaGlsZHJlbiBhbmQgYnkgY3JlYXRpbmcgYSB2aWV3ZXIgbm90aWZpY2F0aW9uLCB3aGljaCBpdCBwYXNzZXMgdG8ge0BsaW5rICNmaXJlTm90aWZ5Q2hhbmdlZH0uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgbm90aWZ5Q2hhbmdlZChOb3RpZmljYXRpb24gbm90aWZpY2F0aW9uKSB7CisJCXVwZGF0ZUNoaWxkcmVuKG5vdGlmaWNhdGlvbik7CisKKwkJc3dpdGNoIChub3RpZmljYXRpb24uZ2V0RmVhdHVyZUlEKE1peGluZ0VkZ2VMYWJlbFZhbHVlLmNsYXNzKSkgeworCQkJY2FzZSBFZGdlc1BhY2thZ2UuTUlYSU5HX0VER0VfTEFCRUxfVkFMVUVfX01JWElOR19SQVRFOgorCQkJCWZpcmVOb3RpZnlDaGFuZ2VkKG5ldyBWaWV3ZXJOb3RpZmljYXRpb24obm90aWZpY2F0aW9uLCBub3RpZmljYXRpb24uZ2V0Tm90aWZpZXIoKSwgZmFsc2UsIHRydWUpKTsKKwkJCQlyZXR1cm47CisJCX0KKwkJc3VwZXIubm90aWZ5Q2hhbmdlZChub3RpZmljYXRpb24pOworCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmVkaXQuY29tbWFuZC5Db21tYW5kUGFyYW1ldGVyfXMgZGVzY3JpYmluZyB0aGUgY2hpbGRyZW4KKwkgKiB0aGF0IGNhbiBiZSBjcmVhdGVkIHVuZGVyIHRoaXMgb2JqZWN0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIGNvbGxlY3ROZXdDaGlsZERlc2NyaXB0b3JzKENvbGxlY3Rpb248T2JqZWN0PiBuZXdDaGlsZERlc2NyaXB0b3JzLCBPYmplY3Qgb2JqZWN0KSB7CisJCXN1cGVyLmNvbGxlY3ROZXdDaGlsZERlc2NyaXB0b3JzKG5ld0NoaWxkRGVzY3JpcHRvcnMsIG9iamVjdCk7CisJfQorCisJLyoqCisJICogUmV0dXJuIHRoZSByZXNvdXJjZSBsb2NhdG9yIGZvciB0aGlzIGl0ZW0gcHJvdmlkZXIncyByZXNvdXJjZXMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIFJlc291cmNlTG9jYXRvciBnZXRSZXNvdXJjZUxvY2F0b3IoKSB7CisJCXJldHVybiBEZWZpbml0aW9uc0VkaXRQbHVnaW4uSU5TVEFOQ0U7CisJfQorCit9CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvZWRnZXMvcHJvdmlkZXIvUG9wdWxhdGlvbkVkZ2VJdGVtUHJvdmlkZXIuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy9lZGdlcy9wcm92aWRlci9Qb3B1bGF0aW9uRWRnZUl0ZW1Qcm92aWRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg2MzQyMDgKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvZWRnZXMvcHJvdmlkZXIvUG9wdWxhdGlvbkVkZ2VJdGVtUHJvdmlkZXIuamF2YQpAQCAtMCwwICsxLDIwOCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOSwyMDEwIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5lZGdlcy5wcm92aWRlcjsKKworCitpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5BZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlJlc291cmNlTG9jYXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuVVJJOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkNvbXBvc2VhYmxlQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUVkaXRpbmdEb21haW5JdGVtUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1MYWJlbFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtUHJvcGVydHlEZXNjcmlwdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtUHJvcGVydHlTb3VyY2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVN0cnVjdHVyZWRJdGVtQ29udGVudFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklUcmVlSXRlbUNvbnRlbnRQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JdGVtUHJvcGVydHlEZXNjcmlwdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLlZpZXdlck5vdGlmaWNhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguR3JhcGhQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5wcm92aWRlci5FZGdlSXRlbVByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuZWRnZXMuRWRnZXNGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuZWRnZXMuRWRnZXNQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuZWRnZXMuUG9wdWxhdGlvbkVkZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuTGFiZWxzRmFjdG9yeTsKKworLyoqCisgKiBUaGlzIGlzIHRoZSBpdGVtIHByb3ZpZGVyIGFkYXB0ZXIgZm9yIGEge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuZWRnZXMuUG9wdWxhdGlvbkVkZ2V9IG9iamVjdC4KKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIFBvcHVsYXRpb25FZGdlSXRlbVByb3ZpZGVyCisJZXh0ZW5kcyBFZGdlSXRlbVByb3ZpZGVyCisJaW1wbGVtZW50cworCQlJRWRpdGluZ0RvbWFpbkl0ZW1Qcm92aWRlciwKKwkJSVN0cnVjdHVyZWRJdGVtQ29udGVudFByb3ZpZGVyLAorCQlJVHJlZUl0ZW1Db250ZW50UHJvdmlkZXIsCisJCUlJdGVtTGFiZWxQcm92aWRlciwKKwkJSUl0ZW1Qcm9wZXJ0eVNvdXJjZSB7CisJLyoqCisJICogVGhpcyBjb25zdHJ1Y3RzIGFuIGluc3RhbmNlIGZyb20gYSBmYWN0b3J5IGFuZCBhIG5vdGlmaWVyLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBQb3B1bGF0aW9uRWRnZUl0ZW1Qcm92aWRlcihBZGFwdGVyRmFjdG9yeSBhZGFwdGVyRmFjdG9yeSkgeworCQlzdXBlcihhZGFwdGVyRmFjdG9yeSk7CisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIHRoZSBwcm9wZXJ0eSBkZXNjcmlwdG9ycyBmb3IgdGhlIGFkYXB0ZWQgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIExpc3Q8SUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I+IGdldFByb3BlcnR5RGVzY3JpcHRvcnMoT2JqZWN0IG9iamVjdCkgeworCQlpZiAoaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMgPT0gbnVsbCkgeworCQkJc3VwZXIuZ2V0UHJvcGVydHlEZXNjcmlwdG9ycyhvYmplY3QpOworCisJCQlhZGRQb3B1bGF0aW9uSWRlbnRpZmllclByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QpOworCQl9CisJCXJldHVybiBpdGVtUHJvcGVydHlEZXNjcmlwdG9yczsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFkZHMgYSBwcm9wZXJ0eSBkZXNjcmlwdG9yIGZvciB0aGUgUG9wdWxhdGlvbiBJZGVudGlmaWVyIGZlYXR1cmUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgYWRkUG9wdWxhdGlvbklkZW50aWZpZXJQcm9wZXJ0eURlc2NyaXB0b3IoT2JqZWN0IG9iamVjdCkgeworCQlpdGVtUHJvcGVydHlEZXNjcmlwdG9ycy5hZGQKKwkJCShjcmVhdGVJdGVtUHJvcGVydHlEZXNjcmlwdG9yCisJCQkJKCgoQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSlhZGFwdGVyRmFjdG9yeSkuZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCksCisJCQkJIGdldFJlc291cmNlTG9jYXRvcigpLAorCQkJCSBnZXRTdHJpbmcoIl9VSV9Qb3B1bGF0aW9uRWRnZV9wb3B1bGF0aW9uSWRlbnRpZmllcl9mZWF0dXJlIiksIC8vJE5PTi1OTFMtMSQKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfUHJvcGVydHlEZXNjcmlwdG9yX2Rlc2NyaXB0aW9uIiwgIl9VSV9Qb3B1bGF0aW9uRWRnZV9wb3B1bGF0aW9uSWRlbnRpZmllcl9mZWF0dXJlIiwgIl9VSV9Qb3B1bGF0aW9uRWRnZV90eXBlIiksIC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJCAvLyROT04tTkxTLTMkCisJCQkJIEVkZ2VzUGFja2FnZS5MaXRlcmFscy5QT1BVTEFUSU9OX0VER0VfX1BPUFVMQVRJT05fSURFTlRJRklFUiwKKwkJCQkgdHJ1ZSwKKwkJCQkgZmFsc2UsCisJCQkJIGZhbHNlLAorCQkJCSBJdGVtUHJvcGVydHlEZXNjcmlwdG9yLkdFTkVSSUNfVkFMVUVfSU1BR0UsCisJCQkJIG51bGwsCisJCQkJIG51bGwpKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgUG9wdWxhdGlvbkVkZ2UuZ2lmLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBPYmplY3QgZ2V0SW1hZ2UoT2JqZWN0IG9iamVjdCkgeworCQlyZXR1cm4gb3ZlcmxheUltYWdlKG9iamVjdCwgZ2V0UmVzb3VyY2VMb2NhdG9yKCkuZ2V0SW1hZ2UoImZ1bGwvb2JqMTYvUG9wdWxhdGlvbkVkZ2UiKSk7IC8vJE5PTi1OTFMtMSQKKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgdGhlIGxhYmVsIHRleHQgZm9yIHRoZSBhZGFwdGVkIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgU3RyaW5nIGdldFRleHQoT2JqZWN0IG9iamVjdCkgeworCQlyZXR1cm4gc3VwZXIuZ2V0VGV4dChvYmplY3QpOworCX0KKwkKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgdGhlIGxhYmVsIHRleHQgZm9yIHRoZSBhZGFwdGVkIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBTdHJpbmcgZ2V0VGV4dEdlbihPYmplY3Qgb2JqZWN0KSB7CisJCVVSSSBsYWJlbFZhbHVlID0gKChQb3B1bGF0aW9uRWRnZSlvYmplY3QpLmdldFVSSSgpOworCQlTdHJpbmcgbGFiZWwgPSBsYWJlbFZhbHVlID09IG51bGwgPyBudWxsIDogbGFiZWxWYWx1ZS50b1N0cmluZygpOworCQlyZXR1cm4gbGFiZWwgPT0gbnVsbCB8fCBsYWJlbC5sZW5ndGgoKSA9PSAwID8KKwkJCWdldFN0cmluZygiX1VJX1BvcHVsYXRpb25FZGdlX3R5cGUiKSA6IC8vJE5PTi1OTFMtMSQKKwkJCWdldFN0cmluZygiX1VJX1BvcHVsYXRpb25FZGdlX3R5cGUiKSArICIgIiArIGxhYmVsOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKKwl9CisKKwkvKioKKwkgKiBUaGlzIGhhbmRsZXMgbW9kZWwgbm90aWZpY2F0aW9ucyBieSBjYWxsaW5nIHtAbGluayAjdXBkYXRlQ2hpbGRyZW59IHRvIHVwZGF0ZSBhbnkgY2FjaGVkCisJICogY2hpbGRyZW4gYW5kIGJ5IGNyZWF0aW5nIGEgdmlld2VyIG5vdGlmaWNhdGlvbiwgd2hpY2ggaXQgcGFzc2VzIHRvIHtAbGluayAjZmlyZU5vdGlmeUNoYW5nZWR9LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIG5vdGlmeUNoYW5nZWQoTm90aWZpY2F0aW9uIG5vdGlmaWNhdGlvbikgeworCQl1cGRhdGVDaGlsZHJlbihub3RpZmljYXRpb24pOworCisJCXN3aXRjaCAobm90aWZpY2F0aW9uLmdldEZlYXR1cmVJRChQb3B1bGF0aW9uRWRnZS5jbGFzcykpIHsKKwkJCWNhc2UgRWRnZXNQYWNrYWdlLlBPUFVMQVRJT05fRURHRV9fUE9QVUxBVElPTl9JREVOVElGSUVSOgorCQkJCWZpcmVOb3RpZnlDaGFuZ2VkKG5ldyBWaWV3ZXJOb3RpZmljYXRpb24obm90aWZpY2F0aW9uLCBub3RpZmljYXRpb24uZ2V0Tm90aWZpZXIoKSwgZmFsc2UsIHRydWUpKTsKKwkJCQlyZXR1cm47CisJCX0KKwkJc3VwZXIubm90aWZ5Q2hhbmdlZChub3RpZmljYXRpb24pOworCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmVkaXQuY29tbWFuZC5Db21tYW5kUGFyYW1ldGVyfXMgZGVzY3JpYmluZyB0aGUgY2hpbGRyZW4KKwkgKiB0aGF0IGNhbiBiZSBjcmVhdGVkIHVuZGVyIHRoaXMgb2JqZWN0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIGNvbGxlY3ROZXdDaGlsZERlc2NyaXB0b3JzKENvbGxlY3Rpb248T2JqZWN0PiBuZXdDaGlsZERlc2NyaXB0b3JzLCBPYmplY3Qgb2JqZWN0KSB7CisJCXN1cGVyLmNvbGxlY3ROZXdDaGlsZERlc2NyaXB0b3JzKG5ld0NoaWxkRGVzY3JpcHRvcnMsIG9iamVjdCk7CisKKwkJbmV3Q2hpbGREZXNjcmlwdG9ycy5hZGQKKwkJCShjcmVhdGVDaGlsZFBhcmFtZXRlcgorCQkJCShHcmFwaFBhY2thZ2UuTGl0ZXJhbHMuRURHRV9fTEFCRUwsCisJCQkJIEVkZ2VzRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlTWlncmF0aW9uRWRnZUxhYmVsKCkpKTsKKworCQluZXdDaGlsZERlc2NyaXB0b3JzLmFkZAorCQkJKGNyZWF0ZUNoaWxkUGFyYW1ldGVyCisJCQkJKEdyYXBoUGFja2FnZS5MaXRlcmFscy5FREdFX19MQUJFTCwKKwkJCQkgRWRnZXNGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVNaXhpbmdFZGdlTGFiZWwoKSkpOworCisJCW5ld0NoaWxkRGVzY3JpcHRvcnMuYWRkCisJCQkoY3JlYXRlQ2hpbGRQYXJhbWV0ZXIKKwkJCQkoR3JhcGhQYWNrYWdlLkxpdGVyYWxzLkVER0VfX0xBQkVMLAorCQkJCSBMYWJlbHNGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVDb21tb25Cb3JkZXJSZWxhdGlvbnNoaXBMYWJlbCgpKSk7CisKKwkJbmV3Q2hpbGREZXNjcmlwdG9ycy5hZGQKKwkJCShjcmVhdGVDaGlsZFBhcmFtZXRlcgorCQkJCShHcmFwaFBhY2thZ2UuTGl0ZXJhbHMuRURHRV9fTEFCRUwsCisJCQkJIExhYmVsc0ZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZVJlbGF0aXZlUGh5c2ljYWxSZWxhdGlvbnNoaXBMYWJlbCgpKSk7CisKKwkJbmV3Q2hpbGREZXNjcmlwdG9ycy5hZGQKKwkJCShjcmVhdGVDaGlsZFBhcmFtZXRlcgorCQkJCShHcmFwaFBhY2thZ2UuTGl0ZXJhbHMuRURHRV9fTEFCRUwsCisJCQkJIExhYmVsc0ZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZVRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsKCkpKTsKKworCQluZXdDaGlsZERlc2NyaXB0b3JzLmFkZAorCQkJKGNyZWF0ZUNoaWxkUGFyYW1ldGVyCisJCQkJKEdyYXBoUGFja2FnZS5MaXRlcmFscy5FREdFX19MQUJFTCwKKwkJCQkgTGFiZWxzRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlUm9hZFRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsKCkpKTsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm4gdGhlIHJlc291cmNlIGxvY2F0b3IgZm9yIHRoaXMgaXRlbSBwcm92aWRlcidzIHJlc291cmNlcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgUmVzb3VyY2VMb2NhdG9yIGdldFJlc291cmNlTG9jYXRvcigpIHsKKwkJcmV0dXJuIERlZmluaXRpb25zRWRpdFBsdWdpbi5JTlNUQU5DRTsKKwl9CisKK30KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy9lZGdlcy91dGlsL0VkZ2VzQWRhcHRlckZhY3RvcnkuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy9lZGdlcy91dGlsL0VkZ2VzQWRhcHRlckZhY3RvcnkuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZGEyOWE0Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL2VkZ2VzL3V0aWwvRWRnZXNBZGFwdGVyRmFjdG9yeS5qYXZhCkBAIC0wLDAgKzEsMzkzIEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuZWRnZXMudXRpbDsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5BZGFwdGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LmltcGwuQWRhcHRlckZhY3RvcnlJbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uSWRlbnRpZmlhYmxlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uU2FuaXR5Q2hlY2tlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguRWRnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguRWRnZUxhYmVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5MYWJlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguTGFiZWxWYWx1ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuTW9kaWZpYWJsZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmVkZ2VzLio7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5lZGdlcy5FZGdlc1BhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5lZGdlcy5NaWdyYXRpb25FZGdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuZWRnZXMuTWlncmF0aW9uRWRnZUxhYmVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuZWRnZXMuTWlncmF0aW9uRWRnZUxhYmVsVmFsdWU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5lZGdlcy5NaXhpbmdFZGdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuZWRnZXMuTWl4aW5nRWRnZUxhYmVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuZWRnZXMuTWl4aW5nRWRnZUxhYmVsVmFsdWU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5lZGdlcy5Qb3B1bGF0aW9uRWRnZTsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogVGhlIDxiPkFkYXB0ZXIgRmFjdG9yeTwvYj4gZm9yIHRoZSBtb2RlbC4KKyAqIEl0IHByb3ZpZGVzIGFuIGFkYXB0ZXIgPGNvZGU+Y3JlYXRlWFhYPC9jb2RlPiBtZXRob2QgZm9yIGVhY2ggY2xhc3Mgb2YgdGhlIG1vZGVsLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuZWRnZXMuRWRnZXNQYWNrYWdlCisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBFZGdlc0FkYXB0ZXJGYWN0b3J5IGV4dGVuZHMgQWRhcHRlckZhY3RvcnlJbXBsIHsKKwkvKioKKwkgKiBUaGUgY2FjaGVkIG1vZGVsIHBhY2thZ2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHN0YXRpYyBFZGdlc1BhY2thZ2UgbW9kZWxQYWNrYWdlOworCisJLyoqCisJICogQ3JlYXRlcyBhbiBpbnN0YW5jZSBvZiB0aGUgYWRhcHRlciBmYWN0b3J5LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFZGdlc0FkYXB0ZXJGYWN0b3J5KCkgeworCQlpZiAobW9kZWxQYWNrYWdlID09IG51bGwpIHsKKwkJCW1vZGVsUGFja2FnZSA9IEVkZ2VzUGFja2FnZS5lSU5TVEFOQ0U7CisJCX0KKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHdoZXRoZXIgdGhpcyBmYWN0b3J5IGlzIGFwcGxpY2FibGUgZm9yIHRoZSB0eXBlIG9mIHRoZSBvYmplY3QuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgPGNvZGU+dHJ1ZTwvY29kZT4gaWYgdGhlIG9iamVjdCBpcyBlaXRoZXIgdGhlIG1vZGVsJ3MgcGFja2FnZSBvciBpcyBhbiBpbnN0YW5jZSBvYmplY3Qgb2YgdGhlIG1vZGVsLgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gd2hldGhlciB0aGlzIGZhY3RvcnkgaXMgYXBwbGljYWJsZSBmb3IgdGhlIHR5cGUgb2YgdGhlIG9iamVjdC4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIGJvb2xlYW4gaXNGYWN0b3J5Rm9yVHlwZShPYmplY3Qgb2JqZWN0KSB7CisJCWlmIChvYmplY3QgPT0gbW9kZWxQYWNrYWdlKSB7CisJCQlyZXR1cm4gdHJ1ZTsKKwkJfQorCQlpZiAob2JqZWN0IGluc3RhbmNlb2YgRU9iamVjdCkgeworCQkJcmV0dXJuICgoRU9iamVjdClvYmplY3QpLmVDbGFzcygpLmdldEVQYWNrYWdlKCkgPT0gbW9kZWxQYWNrYWdlOworCQl9CisJCXJldHVybiBmYWxzZTsKKwl9CisKKwkvKioKKwkgKiBUaGUgc3dpdGNoIHRoYXQgZGVsZWdhdGVzIHRvIHRoZSA8Y29kZT5jcmVhdGVYWFg8L2NvZGU+IG1ldGhvZHMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIEVkZ2VzU3dpdGNoPEFkYXB0ZXI+IG1vZGVsU3dpdGNoID0KKwkJbmV3IEVkZ2VzU3dpdGNoPEFkYXB0ZXI+KCkgeworCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgQWRhcHRlciBjYXNlTWlncmF0aW9uRWRnZShNaWdyYXRpb25FZGdlIG9iamVjdCkgeworCQkJCXJldHVybiBjcmVhdGVNaWdyYXRpb25FZGdlQWRhcHRlcigpOworCQkJfQorCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgQWRhcHRlciBjYXNlTWlncmF0aW9uRWRnZUxhYmVsKE1pZ3JhdGlvbkVkZ2VMYWJlbCBvYmplY3QpIHsKKwkJCQlyZXR1cm4gY3JlYXRlTWlncmF0aW9uRWRnZUxhYmVsQWRhcHRlcigpOworCQkJfQorCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgQWRhcHRlciBjYXNlTWlncmF0aW9uRWRnZUxhYmVsVmFsdWUoTWlncmF0aW9uRWRnZUxhYmVsVmFsdWUgb2JqZWN0KSB7CisJCQkJcmV0dXJuIGNyZWF0ZU1pZ3JhdGlvbkVkZ2VMYWJlbFZhbHVlQWRhcHRlcigpOworCQkJfQorCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgQWRhcHRlciBjYXNlTWl4aW5nRWRnZShNaXhpbmdFZGdlIG9iamVjdCkgeworCQkJCXJldHVybiBjcmVhdGVNaXhpbmdFZGdlQWRhcHRlcigpOworCQkJfQorCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgQWRhcHRlciBjYXNlTWl4aW5nRWRnZUxhYmVsKE1peGluZ0VkZ2VMYWJlbCBvYmplY3QpIHsKKwkJCQlyZXR1cm4gY3JlYXRlTWl4aW5nRWRnZUxhYmVsQWRhcHRlcigpOworCQkJfQorCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgQWRhcHRlciBjYXNlTWl4aW5nRWRnZUxhYmVsVmFsdWUoTWl4aW5nRWRnZUxhYmVsVmFsdWUgb2JqZWN0KSB7CisJCQkJcmV0dXJuIGNyZWF0ZU1peGluZ0VkZ2VMYWJlbFZhbHVlQWRhcHRlcigpOworCQkJfQorCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgQWRhcHRlciBjYXNlUG9wdWxhdGlvbkVkZ2UoUG9wdWxhdGlvbkVkZ2Ugb2JqZWN0KSB7CisJCQkJcmV0dXJuIGNyZWF0ZVBvcHVsYXRpb25FZGdlQWRhcHRlcigpOworCQkJfQorCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgPFQ+IEFkYXB0ZXIgY2FzZUNvbXBhcmFibGUoQ29tcGFyYWJsZTxUPiBvYmplY3QpIHsKKwkJCQlyZXR1cm4gY3JlYXRlQ29tcGFyYWJsZUFkYXB0ZXIoKTsKKwkJCX0KKwkJCUBPdmVycmlkZQorCQkJcHVibGljIEFkYXB0ZXIgY2FzZUlkZW50aWZpYWJsZShJZGVudGlmaWFibGUgb2JqZWN0KSB7CisJCQkJcmV0dXJuIGNyZWF0ZUlkZW50aWZpYWJsZUFkYXB0ZXIoKTsKKwkJCX0KKwkJCUBPdmVycmlkZQorCQkJcHVibGljIEFkYXB0ZXIgY2FzZU1vZGlmaWFibGUoTW9kaWZpYWJsZSBvYmplY3QpIHsKKwkJCQlyZXR1cm4gY3JlYXRlTW9kaWZpYWJsZUFkYXB0ZXIoKTsKKwkJCX0KKwkJCUBPdmVycmlkZQorCQkJcHVibGljIEFkYXB0ZXIgY2FzZUVkZ2UoRWRnZSBvYmplY3QpIHsKKwkJCQlyZXR1cm4gY3JlYXRlRWRnZUFkYXB0ZXIoKTsKKwkJCX0KKwkJCUBPdmVycmlkZQorCQkJcHVibGljIEFkYXB0ZXIgY2FzZUxhYmVsKExhYmVsIG9iamVjdCkgeworCQkJCXJldHVybiBjcmVhdGVMYWJlbEFkYXB0ZXIoKTsKKwkJCX0KKwkJCUBPdmVycmlkZQorCQkJcHVibGljIEFkYXB0ZXIgY2FzZUVkZ2VMYWJlbChFZGdlTGFiZWwgb2JqZWN0KSB7CisJCQkJcmV0dXJuIGNyZWF0ZUVkZ2VMYWJlbEFkYXB0ZXIoKTsKKwkJCX0KKwkJCUBPdmVycmlkZQorCQkJcHVibGljIEFkYXB0ZXIgY2FzZVNhbml0eUNoZWNrZXIoU2FuaXR5Q2hlY2tlciBvYmplY3QpIHsKKwkJCQlyZXR1cm4gY3JlYXRlU2FuaXR5Q2hlY2tlckFkYXB0ZXIoKTsKKwkJCX0KKwkJCUBPdmVycmlkZQorCQkJcHVibGljIEFkYXB0ZXIgY2FzZUxhYmVsVmFsdWUoTGFiZWxWYWx1ZSBvYmplY3QpIHsKKwkJCQlyZXR1cm4gY3JlYXRlTGFiZWxWYWx1ZUFkYXB0ZXIoKTsKKwkJCX0KKwkJCUBPdmVycmlkZQorCQkJcHVibGljIEFkYXB0ZXIgZGVmYXVsdENhc2UoRU9iamVjdCBvYmplY3QpIHsKKwkJCQlyZXR1cm4gY3JlYXRlRU9iamVjdEFkYXB0ZXIoKTsKKwkJCX0KKwkJfTsKKworCS8qKgorCSAqIENyZWF0ZXMgYW4gYWRhcHRlciBmb3IgdGhlIDxjb2RlPnRhcmdldDwvY29kZT4uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gdGFyZ2V0IHRoZSBvYmplY3QgdG8gYWRhcHQuCisJICogQHJldHVybiB0aGUgYWRhcHRlciBmb3IgdGhlIDxjb2RlPnRhcmdldDwvY29kZT4uCisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZUFkYXB0ZXIoTm90aWZpZXIgdGFyZ2V0KSB7CisJCXJldHVybiBtb2RlbFN3aXRjaC5kb1N3aXRjaCgoRU9iamVjdCl0YXJnZXQpOworCX0KKworCisJLyoqCisJICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmVkZ2VzLk1pZ3JhdGlvbkVkZ2UgPGVtPk1pZ3JhdGlvbiBFZGdlPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsKKwkgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuZWRnZXMuTWlncmF0aW9uRWRnZQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVNaWdyYXRpb25FZGdlQWRhcHRlcigpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmVkZ2VzLk1pZ3JhdGlvbkVkZ2VMYWJlbCA8ZW0+TWlncmF0aW9uIEVkZ2UgTGFiZWw8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOworCSAqIGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZSB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5LgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5lZGdlcy5NaWdyYXRpb25FZGdlTGFiZWwKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlTWlncmF0aW9uRWRnZUxhYmVsQWRhcHRlcigpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmVkZ2VzLk1pZ3JhdGlvbkVkZ2VMYWJlbFZhbHVlIDxlbT5NaWdyYXRpb24gRWRnZSBMYWJlbCBWYWx1ZTwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7CisJICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmVkZ2VzLk1pZ3JhdGlvbkVkZ2VMYWJlbFZhbHVlCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZU1pZ3JhdGlvbkVkZ2VMYWJlbFZhbHVlQWRhcHRlcigpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmVkZ2VzLk1peGluZ0VkZ2UgPGVtPk1peGluZyBFZGdlPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsKKwkgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuZWRnZXMuTWl4aW5nRWRnZQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVNaXhpbmdFZGdlQWRhcHRlcigpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmVkZ2VzLk1peGluZ0VkZ2VMYWJlbCA8ZW0+TWl4aW5nIEVkZ2UgTGFiZWw8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOworCSAqIGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZSB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5LgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5lZGdlcy5NaXhpbmdFZGdlTGFiZWwKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlTWl4aW5nRWRnZUxhYmVsQWRhcHRlcigpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmVkZ2VzLk1peGluZ0VkZ2VMYWJlbFZhbHVlIDxlbT5NaXhpbmcgRWRnZSBMYWJlbCBWYWx1ZTwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7CisJICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmVkZ2VzLk1peGluZ0VkZ2VMYWJlbFZhbHVlCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZU1peGluZ0VkZ2VMYWJlbFZhbHVlQWRhcHRlcigpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmVkZ2VzLlBvcHVsYXRpb25FZGdlIDxlbT5Qb3B1bGF0aW9uIEVkZ2U8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOworCSAqIGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZSB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5LgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5lZGdlcy5Qb3B1bGF0aW9uRWRnZQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVQb3B1bGF0aW9uRWRnZUFkYXB0ZXIoKSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgamF2YS5sYW5nLkNvbXBhcmFibGUgPGVtPkNvbXBhcmFibGU8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOworCSAqIGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZSB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5LgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgorCSAqIEBzZWUgamF2YS5sYW5nLkNvbXBhcmFibGUKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlQ29tcGFyYWJsZUFkYXB0ZXIoKSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5JZGVudGlmaWFibGUgPGVtPklkZW50aWZpYWJsZTwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7CisJICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLklkZW50aWZpYWJsZQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVJZGVudGlmaWFibGVBZGFwdGVyKCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5Nb2RpZmlhYmxlIDxlbT5Nb2RpZmlhYmxlPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsKKwkgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5Nb2RpZmlhYmxlCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZU1vZGlmaWFibGVBZGFwdGVyKCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5FZGdlIDxlbT5FZGdlPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsKKwkgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5FZGdlCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZUVkZ2VBZGFwdGVyKCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5MYWJlbCA8ZW0+TGFiZWw8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOworCSAqIGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZSB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5LgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkxhYmVsCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZUxhYmVsQWRhcHRlcigpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguRWRnZUxhYmVsIDxlbT5FZGdlIExhYmVsPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsKKwkgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5FZGdlTGFiZWwKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlRWRnZUxhYmVsQWRhcHRlcigpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLlNhbml0eUNoZWNrZXIgPGVtPlNhbml0eSBDaGVja2VyPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsKKwkgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uU2FuaXR5Q2hlY2tlcgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVTYW5pdHlDaGVja2VyQWRhcHRlcigpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguTGFiZWxWYWx1ZSA8ZW0+TGFiZWwgVmFsdWU8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOworCSAqIGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZSB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5LgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkxhYmVsVmFsdWUKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlTGFiZWxWYWx1ZUFkYXB0ZXIoKSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgdGhlIGRlZmF1bHQgY2FzZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwuCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZUVPYmplY3RBZGFwdGVyKCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKK30gLy9FZGdlc0FkYXB0ZXJGYWN0b3J5CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvZWRnZXMvdXRpbC9FZGdlc1N3aXRjaC5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL2VkZ2VzL3V0aWwvRWRnZXNTd2l0Y2guamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNzVhY2U2Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL2VkZ2VzL3V0aWwvRWRnZXNTd2l0Y2guamF2YQpAQCAtMCwwICsxLDQyMyBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmVkZ2VzLnV0aWw7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uSWRlbnRpZmlhYmxlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uU2FuaXR5Q2hlY2tlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguRWRnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguRWRnZUxhYmVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5MYWJlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguTGFiZWxWYWx1ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuTW9kaWZpYWJsZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmVkZ2VzLio7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5lZGdlcy5FZGdlc1BhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5lZGdlcy5NaWdyYXRpb25FZGdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuZWRnZXMuTWlncmF0aW9uRWRnZUxhYmVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuZWRnZXMuTWlncmF0aW9uRWRnZUxhYmVsVmFsdWU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5lZGdlcy5NaXhpbmdFZGdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuZWRnZXMuTWl4aW5nRWRnZUxhYmVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuZWRnZXMuTWl4aW5nRWRnZUxhYmVsVmFsdWU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5lZGdlcy5Qb3B1bGF0aW9uRWRnZTsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogVGhlIDxiPlN3aXRjaDwvYj4gZm9yIHRoZSBtb2RlbCdzIGluaGVyaXRhbmNlIGhpZXJhcmNoeS4KKyAqIEl0IHN1cHBvcnRzIHRoZSBjYWxsIHtAbGluayAjZG9Td2l0Y2goRU9iamVjdCkgZG9Td2l0Y2gob2JqZWN0KX0KKyAqIHRvIGludm9rZSB0aGUgPGNvZGU+Y2FzZVhYWDwvY29kZT4gbWV0aG9kIGZvciBlYWNoIGNsYXNzIG9mIHRoZSBtb2RlbCwKKyAqIHN0YXJ0aW5nIHdpdGggdGhlIGFjdHVhbCBjbGFzcyBvZiB0aGUgb2JqZWN0CisgKiBhbmQgcHJvY2VlZGluZyB1cCB0aGUgaW5oZXJpdGFuY2UgaGllcmFyY2h5CisgKiB1bnRpbCBhIG5vbi1udWxsIHJlc3VsdCBpcyByZXR1cm5lZCwKKyAqIHdoaWNoIGlzIHRoZSByZXN1bHQgb2YgdGhlIHN3aXRjaC4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmVkZ2VzLkVkZ2VzUGFja2FnZQorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgRWRnZXNTd2l0Y2g8VDE+IHsKKwkvKioKKwkgKiBUaGUgY2FjaGVkIG1vZGVsIHBhY2thZ2UKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgc3RhdGljIEVkZ2VzUGFja2FnZSBtb2RlbFBhY2thZ2U7CisKKwkvKioKKwkgKiBDcmVhdGVzIGFuIGluc3RhbmNlIG9mIHRoZSBzd2l0Y2guCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVkZ2VzU3dpdGNoKCkgeworCQlpZiAobW9kZWxQYWNrYWdlID09IG51bGwpIHsKKwkJCW1vZGVsUGFja2FnZSA9IEVkZ2VzUGFja2FnZS5lSU5TVEFOQ0U7CisJCX0KKwl9CisKKwkvKioKKwkgKiBDYWxscyA8Y29kZT5jYXNlWFhYPC9jb2RlPiBmb3IgZWFjaCBjbGFzcyBvZiB0aGUgbW9kZWwgdW50aWwgb25lIHJldHVybnMgYSBub24gbnVsbCByZXN1bHQ7IGl0IHlpZWxkcyB0aGF0IHJlc3VsdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIGZpcnN0IG5vbi1udWxsIHJlc3VsdCByZXR1cm5lZCBieSBhIDxjb2RlPmNhc2VYWFg8L2NvZGU+IGNhbGwuCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBUMSBkb1N3aXRjaChFT2JqZWN0IHRoZUVPYmplY3QpIHsKKwkJcmV0dXJuIGRvU3dpdGNoKHRoZUVPYmplY3QuZUNsYXNzKCksIHRoZUVPYmplY3QpOworCX0KKworCS8qKgorCSAqIENhbGxzIDxjb2RlPmNhc2VYWFg8L2NvZGU+IGZvciBlYWNoIGNsYXNzIG9mIHRoZSBtb2RlbCB1bnRpbCBvbmUgcmV0dXJucyBhIG5vbiBudWxsIHJlc3VsdDsgaXQgeWllbGRzIHRoYXQgcmVzdWx0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgZmlyc3Qgbm9uLW51bGwgcmVzdWx0IHJldHVybmVkIGJ5IGEgPGNvZGU+Y2FzZVhYWDwvY29kZT4gY2FsbC4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIFQxIGRvU3dpdGNoKEVDbGFzcyB0aGVFQ2xhc3MsIEVPYmplY3QgdGhlRU9iamVjdCkgeworCQlpZiAodGhlRUNsYXNzLmVDb250YWluZXIoKSA9PSBtb2RlbFBhY2thZ2UpIHsKKwkJCXJldHVybiBkb1N3aXRjaCh0aGVFQ2xhc3MuZ2V0Q2xhc3NpZmllcklEKCksIHRoZUVPYmplY3QpOworCQl9CisJCWVsc2UgeworCQkJTGlzdDxFQ2xhc3M+IGVTdXBlclR5cGVzID0gdGhlRUNsYXNzLmdldEVTdXBlclR5cGVzKCk7CisJCQlyZXR1cm4KKwkJCQllU3VwZXJUeXBlcy5pc0VtcHR5KCkgPworCQkJCQlkZWZhdWx0Q2FzZSh0aGVFT2JqZWN0KSA6CisJCQkJCWRvU3dpdGNoKGVTdXBlclR5cGVzLmdldCgwKSwgdGhlRU9iamVjdCk7CisJCX0KKwl9CisKKwkvKioKKwkgKiBDYWxscyA8Y29kZT5jYXNlWFhYPC9jb2RlPiBmb3IgZWFjaCBjbGFzcyBvZiB0aGUgbW9kZWwgdW50aWwgb25lIHJldHVybnMgYSBub24gbnVsbCByZXN1bHQ7IGl0IHlpZWxkcyB0aGF0IHJlc3VsdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIGZpcnN0IG5vbi1udWxsIHJlc3VsdCByZXR1cm5lZCBieSBhIDxjb2RlPmNhc2VYWFg8L2NvZGU+IGNhbGwuCisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBUMSBkb1N3aXRjaChpbnQgY2xhc3NpZmllcklELCBFT2JqZWN0IHRoZUVPYmplY3QpIHsKKwkJc3dpdGNoIChjbGFzc2lmaWVySUQpIHsKKwkJCWNhc2UgRWRnZXNQYWNrYWdlLk1JR1JBVElPTl9FREdFOiB7CisJCQkJTWlncmF0aW9uRWRnZSBtaWdyYXRpb25FZGdlID0gKE1pZ3JhdGlvbkVkZ2UpdGhlRU9iamVjdDsKKwkJCQlUMSByZXN1bHQgPSBjYXNlTWlncmF0aW9uRWRnZShtaWdyYXRpb25FZGdlKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VQb3B1bGF0aW9uRWRnZShtaWdyYXRpb25FZGdlKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VFZGdlKG1pZ3JhdGlvbkVkZ2UpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZUlkZW50aWZpYWJsZShtaWdyYXRpb25FZGdlKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VNb2RpZmlhYmxlKG1pZ3JhdGlvbkVkZ2UpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZUNvbXBhcmFibGUobWlncmF0aW9uRWRnZSk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBkZWZhdWx0Q2FzZSh0aGVFT2JqZWN0KTsKKwkJCQlyZXR1cm4gcmVzdWx0OworCQkJfQorCQkJY2FzZSBFZGdlc1BhY2thZ2UuTUlHUkFUSU9OX0VER0VfTEFCRUw6IHsKKwkJCQlNaWdyYXRpb25FZGdlTGFiZWwgbWlncmF0aW9uRWRnZUxhYmVsID0gKE1pZ3JhdGlvbkVkZ2VMYWJlbCl0aGVFT2JqZWN0OworCQkJCVQxIHJlc3VsdCA9IGNhc2VNaWdyYXRpb25FZGdlTGFiZWwobWlncmF0aW9uRWRnZUxhYmVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VFZGdlTGFiZWwobWlncmF0aW9uRWRnZUxhYmVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VNb2RpZmlhYmxlKG1pZ3JhdGlvbkVkZ2VMYWJlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlTGFiZWwobWlncmF0aW9uRWRnZUxhYmVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VJZGVudGlmaWFibGUobWlncmF0aW9uRWRnZUxhYmVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VDb21wYXJhYmxlKG1pZ3JhdGlvbkVkZ2VMYWJlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBkZWZhdWx0Q2FzZSh0aGVFT2JqZWN0KTsKKwkJCQlyZXR1cm4gcmVzdWx0OworCQkJfQorCQkJY2FzZSBFZGdlc1BhY2thZ2UuTUlHUkFUSU9OX0VER0VfTEFCRUxfVkFMVUU6IHsKKwkJCQlNaWdyYXRpb25FZGdlTGFiZWxWYWx1ZSBtaWdyYXRpb25FZGdlTGFiZWxWYWx1ZSA9IChNaWdyYXRpb25FZGdlTGFiZWxWYWx1ZSl0aGVFT2JqZWN0OworCQkJCVQxIHJlc3VsdCA9IGNhc2VNaWdyYXRpb25FZGdlTGFiZWxWYWx1ZShtaWdyYXRpb25FZGdlTGFiZWxWYWx1ZSk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlTGFiZWxWYWx1ZShtaWdyYXRpb25FZGdlTGFiZWxWYWx1ZSk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlU2FuaXR5Q2hlY2tlcihtaWdyYXRpb25FZGdlTGFiZWxWYWx1ZSk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBkZWZhdWx0Q2FzZSh0aGVFT2JqZWN0KTsKKwkJCQlyZXR1cm4gcmVzdWx0OworCQkJfQorCQkJY2FzZSBFZGdlc1BhY2thZ2UuTUlYSU5HX0VER0U6IHsKKwkJCQlNaXhpbmdFZGdlIG1peGluZ0VkZ2UgPSAoTWl4aW5nRWRnZSl0aGVFT2JqZWN0OworCQkJCVQxIHJlc3VsdCA9IGNhc2VNaXhpbmdFZGdlKG1peGluZ0VkZ2UpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZVBvcHVsYXRpb25FZGdlKG1peGluZ0VkZ2UpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZUVkZ2UobWl4aW5nRWRnZSk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlSWRlbnRpZmlhYmxlKG1peGluZ0VkZ2UpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZU1vZGlmaWFibGUobWl4aW5nRWRnZSk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlQ29tcGFyYWJsZShtaXhpbmdFZGdlKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGRlZmF1bHRDYXNlKHRoZUVPYmplY3QpOworCQkJCXJldHVybiByZXN1bHQ7CisJCQl9CisJCQljYXNlIEVkZ2VzUGFja2FnZS5NSVhJTkdfRURHRV9MQUJFTDogeworCQkJCU1peGluZ0VkZ2VMYWJlbCBtaXhpbmdFZGdlTGFiZWwgPSAoTWl4aW5nRWRnZUxhYmVsKXRoZUVPYmplY3Q7CisJCQkJVDEgcmVzdWx0ID0gY2FzZU1peGluZ0VkZ2VMYWJlbChtaXhpbmdFZGdlTGFiZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZUVkZ2VMYWJlbChtaXhpbmdFZGdlTGFiZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZU1vZGlmaWFibGUobWl4aW5nRWRnZUxhYmVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VMYWJlbChtaXhpbmdFZGdlTGFiZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZUlkZW50aWZpYWJsZShtaXhpbmdFZGdlTGFiZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZUNvbXBhcmFibGUobWl4aW5nRWRnZUxhYmVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGRlZmF1bHRDYXNlKHRoZUVPYmplY3QpOworCQkJCXJldHVybiByZXN1bHQ7CisJCQl9CisJCQljYXNlIEVkZ2VzUGFja2FnZS5NSVhJTkdfRURHRV9MQUJFTF9WQUxVRTogeworCQkJCU1peGluZ0VkZ2VMYWJlbFZhbHVlIG1peGluZ0VkZ2VMYWJlbFZhbHVlID0gKE1peGluZ0VkZ2VMYWJlbFZhbHVlKXRoZUVPYmplY3Q7CisJCQkJVDEgcmVzdWx0ID0gY2FzZU1peGluZ0VkZ2VMYWJlbFZhbHVlKG1peGluZ0VkZ2VMYWJlbFZhbHVlKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VMYWJlbFZhbHVlKG1peGluZ0VkZ2VMYWJlbFZhbHVlKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VTYW5pdHlDaGVja2VyKG1peGluZ0VkZ2VMYWJlbFZhbHVlKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGRlZmF1bHRDYXNlKHRoZUVPYmplY3QpOworCQkJCXJldHVybiByZXN1bHQ7CisJCQl9CisJCQljYXNlIEVkZ2VzUGFja2FnZS5QT1BVTEFUSU9OX0VER0U6IHsKKwkJCQlQb3B1bGF0aW9uRWRnZSBwb3B1bGF0aW9uRWRnZSA9IChQb3B1bGF0aW9uRWRnZSl0aGVFT2JqZWN0OworCQkJCVQxIHJlc3VsdCA9IGNhc2VQb3B1bGF0aW9uRWRnZShwb3B1bGF0aW9uRWRnZSk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlRWRnZShwb3B1bGF0aW9uRWRnZSk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlSWRlbnRpZmlhYmxlKHBvcHVsYXRpb25FZGdlKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VNb2RpZmlhYmxlKHBvcHVsYXRpb25FZGdlKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VDb21wYXJhYmxlKHBvcHVsYXRpb25FZGdlKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGRlZmF1bHRDYXNlKHRoZUVPYmplY3QpOworCQkJCXJldHVybiByZXN1bHQ7CisJCQl9CisJCQlkZWZhdWx0OiByZXR1cm4gZGVmYXVsdENhc2UodGhlRU9iamVjdCk7CisJCX0KKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5NaWdyYXRpb24gRWRnZTwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOworCSAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgorCSAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPk1pZ3JhdGlvbiBFZGdlPC9lbT4nLgorCSAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVDEgY2FzZU1pZ3JhdGlvbkVkZ2UoTWlncmF0aW9uRWRnZSBvYmplY3QpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+TWlncmF0aW9uIEVkZ2UgTGFiZWw8L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsKKwkgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KKwkgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5NaWdyYXRpb24gRWRnZSBMYWJlbDwvZW0+Jy4KKwkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFQxIGNhc2VNaWdyYXRpb25FZGdlTGFiZWwoTWlncmF0aW9uRWRnZUxhYmVsIG9iamVjdCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5NaWdyYXRpb24gRWRnZSBMYWJlbCBWYWx1ZTwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOworCSAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgorCSAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPk1pZ3JhdGlvbiBFZGdlIExhYmVsIFZhbHVlPC9lbT4nLgorCSAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVDEgY2FzZU1pZ3JhdGlvbkVkZ2VMYWJlbFZhbHVlKE1pZ3JhdGlvbkVkZ2VMYWJlbFZhbHVlIG9iamVjdCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5NaXhpbmcgRWRnZTwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOworCSAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgorCSAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPk1peGluZyBFZGdlPC9lbT4nLgorCSAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVDEgY2FzZU1peGluZ0VkZ2UoTWl4aW5nRWRnZSBvYmplY3QpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+TWl4aW5nIEVkZ2UgTGFiZWw8L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsKKwkgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KKwkgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5NaXhpbmcgRWRnZSBMYWJlbDwvZW0+Jy4KKwkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFQxIGNhc2VNaXhpbmdFZGdlTGFiZWwoTWl4aW5nRWRnZUxhYmVsIG9iamVjdCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5NaXhpbmcgRWRnZSBMYWJlbCBWYWx1ZTwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOworCSAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgorCSAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPk1peGluZyBFZGdlIExhYmVsIFZhbHVlPC9lbT4nLgorCSAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVDEgY2FzZU1peGluZ0VkZ2VMYWJlbFZhbHVlKE1peGluZ0VkZ2VMYWJlbFZhbHVlIG9iamVjdCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5Qb3B1bGF0aW9uIEVkZ2U8L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsKKwkgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KKwkgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5Qb3B1bGF0aW9uIEVkZ2U8L2VtPicuCisJICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBUMSBjYXNlUG9wdWxhdGlvbkVkZ2UoUG9wdWxhdGlvbkVkZ2Ugb2JqZWN0KSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkNvbXBhcmFibGU8L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsKKwkgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KKwkgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5Db21wYXJhYmxlPC9lbT4nLgorCSAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgPFQ+IFQxIGNhc2VDb21wYXJhYmxlKENvbXBhcmFibGU8VD4gb2JqZWN0KSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPklkZW50aWZpYWJsZTwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOworCSAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgorCSAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPklkZW50aWZpYWJsZTwvZW0+Jy4KKwkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFQxIGNhc2VJZGVudGlmaWFibGUoSWRlbnRpZmlhYmxlIG9iamVjdCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5Nb2RpZmlhYmxlPC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7CisJICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCisJICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+TW9kaWZpYWJsZTwvZW0+Jy4KKwkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFQxIGNhc2VNb2RpZmlhYmxlKE1vZGlmaWFibGUgb2JqZWN0KSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkVkZ2U8L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsKKwkgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KKwkgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5FZGdlPC9lbT4nLgorCSAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVDEgY2FzZUVkZ2UoRWRnZSBvYmplY3QpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+TGFiZWw8L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsKKwkgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KKwkgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5MYWJlbDwvZW0+Jy4KKwkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFQxIGNhc2VMYWJlbChMYWJlbCBvYmplY3QpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+RWRnZSBMYWJlbDwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOworCSAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgorCSAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkVkZ2UgTGFiZWw8L2VtPicuCisJICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBUMSBjYXNlRWRnZUxhYmVsKEVkZ2VMYWJlbCBvYmplY3QpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+U2FuaXR5IENoZWNrZXI8L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsKKwkgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KKwkgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5TYW5pdHkgQ2hlY2tlcjwvZW0+Jy4KKwkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFQxIGNhc2VTYW5pdHlDaGVja2VyKFNhbml0eUNoZWNrZXIgb2JqZWN0KSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkxhYmVsIFZhbHVlPC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7CisJICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCisJICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+TGFiZWwgVmFsdWU8L2VtPicuCisJICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBUMSBjYXNlTGFiZWxWYWx1ZShMYWJlbFZhbHVlIG9iamVjdCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5FT2JqZWN0PC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7CisJICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2gsIGJ1dCB0aGlzIGlzIHRoZSBsYXN0IGNhc2UgYW55d2F5LgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgorCSAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkVPYmplY3Q8L2VtPicuCisJICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBUMSBkZWZhdWx0Q2FzZShFT2JqZWN0IG9iamVjdCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKK30gLy9FZGdlc1N3aXRjaApkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL2xhYmVscy9BcmVhTGFiZWwuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy9sYWJlbHMvQXJlYUxhYmVsLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzNkM2UwYQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy9sYWJlbHMvQXJlYUxhYmVsLmphdmEKQEAgLTAsMCArMSw0NSBAQAorLy8gQXJlYUxhYmVsLmphdmEKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHM7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIAorICogQ29weXJpZ2h0IChjKSAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiAKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdCAKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sIAorICogCisgKiBDb250cmlidXRvcnM6IAorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiAKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlVSSTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuU1RFTVVSSTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguU3RhdGljTm9kZUxhYmVsOworCisvKioKKyAqIFRoaXMgaW50ZXJmYWNlIGRlZmluZXMgYSBjbGFzcyBpbiBhbiBFTUYgbW9kZWwgZm9yIEFyZWFMYWJlbC4KKyAqIAorICogQG1vZGVsCisgKi8KK3B1YmxpYyBpbnRlcmZhY2UgQXJlYUxhYmVsIGV4dGVuZHMgU3RhdGljTm9kZUxhYmVsIHsKKworCS8qKgorCSAqIFRoaXMgaXMgdGhlIHNlZ21lbnQgb2YgdGhlIHR5cGUgVVJJIHRoYXQgcHJlZml4ZXMgYWxsIG90aGVyIHNlZ21lbnRzIGluIGEKKwkgKiBhcmVhIGxhYmVsIHR5cGUgVVJJLgorCSAqLworCVN0cmluZyBVUklfVFlQRV9BUkVBX0xBQkVMX1NFR01FTlQgPSBVUklfVFlQRV9MQUJFTF9TRUdNRU5UICsgIi9hcmVhIjsKKworCS8qKgorCSAqIFRoaXMgaXMgdGhlIHR5cGUgVVJJIGZvciBhcmVhIGxhYmVscworCSAqLworCVVSSSBVUklfVFlQRV9BUkVBX0xBQkVMID0gU1RFTVVSSQorCQkJLmNyZWF0ZVR5cGVVUkkoVVJJX1RZUEVfQVJFQV9MQUJFTF9TRUdNRU5UKTsKKworCS8qKgorCSAqIEByZXR1cm4gdGhlIGN1cnJlbnQgYXJlYSB2YWx1ZQorCSAqIEBtb2RlbCB2b2xhdGlsZT0idHJ1ZSIgdHJhbnNpZW50PSJ0cnVlIiBjaGFuZ2VhYmxlPSJmYWxzZSIKKwkgKiAgICAgICAgcmVzb2x2ZVByb3hpZXM9ImZhbHNlIgorCSAqLworCUFyZWFMYWJlbFZhbHVlIGdldEN1cnJlbnRBcmVhVmFsdWUoKTsKKworfSAvLyBBcmVhTGFiZWwKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy9sYWJlbHMvQXJlYUxhYmVsVmFsdWUuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy9sYWJlbHMvQXJlYUxhYmVsVmFsdWUuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZDllYmU2Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL2xhYmVscy9BcmVhTGFiZWxWYWx1ZS5qYXZhCkBAIC0wLDAgKzEsNTkgQEAKKy8vIEFyZWFMYWJlbFZhbHVlLmphdmEKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHM7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIAorICogQ29weXJpZ2h0IChjKSAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiAKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdCAKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sIAorICogCisgKiBDb250cmlidXRvcnM6IAorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiAKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkxhYmVsVmFsdWU7CisKKy8qKgorICogVGhpcyBpbnRlcmZhY2UgZGVmaW5lcyBhIGNsYXNzIGluIGFuIEVNRiBtb2RlbCBmb3IgYSBBcmVhIExhYmVsIFZhbHVlLgorICogCisgKiBAbW9kZWwKKyAqLworcHVibGljIGludGVyZmFjZSBBcmVhTGFiZWxWYWx1ZSBleHRlbmRzIExhYmVsVmFsdWUgeworCisJLyoqCisJICogQHJldHVybiB0aGUgYXJlYSBpbiBzcXVhcmUgS2lsb21ldGVycworCSAqIEBtb2RlbAorCSAqLworCWRvdWJsZSBnZXRBcmVhKCk7CisJCisJLyoqCisJICogQHJldHVybiB0aGUgYXJlYSBpbiBzcXVhcmUgS2lsb21ldGVycworCSAqIEBtb2RlbAorCSAqLworCWRvdWJsZSBnZXRBdmVyYWdlRXh0ZW50KCk7CisKKwkvKioKKwkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5BcmVhTGFiZWxWYWx1ZSNnZXRBdmVyYWdlRXh0ZW50IDxlbT5BdmVyYWdlIEV4dGVudDwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhlIEF2ZXJhZ2UgRXh0ZW50IGlzIGp1c3QgdGhlIHNxdWFyZSByb290IG9mIHRoZSBhcmVhLgorCSAqIEl0IGlzIG5lY2Vzc2FyeSB0byByZXRhaW4gdGhpcyB2YWx1ZSBhcyBpdCBpcyBxdWl0ZSBleHBlbnNlaXZlIHRvIGNvbW11dGUuCisJICogQXZlcmFnZSBleHRlbnQgY2FuIGJlIGNvbXBhcmVkLCBmb3IgZXhhbXBsZSwgdG8gYW4gYXZlcmFnZSBjb21tdXRlIGRpc3RhbmNlLgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPkF2ZXJhZ2UgRXh0ZW50PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiBAc2VlICNnZXRBdmVyYWdlRXh0ZW50KCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJdm9pZCBzZXRBdmVyYWdlRXh0ZW50KGRvdWJsZSB2YWx1ZSk7CisKKwkvKioKKwkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5BcmVhTGFiZWxWYWx1ZSNnZXRBcmVhIDxlbT5BcmVhPC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5BcmVhPC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiBAc2VlICNnZXRBcmVhKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJdm9pZCBzZXRBcmVhKGRvdWJsZSB2YWx1ZSk7CisKK30gLy8gQXJlYUxhYmVsVmFsdWUKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy9sYWJlbHMvQ29tbW9uQm9yZGVyUmVsYXRpb25zaGlwTGFiZWwuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy9sYWJlbHMvQ29tbW9uQm9yZGVyUmVsYXRpb25zaGlwTGFiZWwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kM2E0ZjFmCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL2xhYmVscy9Db21tb25Cb3JkZXJSZWxhdGlvbnNoaXBMYWJlbC5qYXZhCkBAIC0wLDAgKzEsMzEgQEAKKy8vIENvbW1vbkJvcmRlclJlbGF0aW9uc2hpcExhYmVsLmphdmEKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHM7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIAorICogQ29weXJpZ2h0IChjKSAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiAKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdCAKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sIAorICogCisgKiBDb250cmlidXRvcnM6IAorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiAKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioKKyAqIFRoaXMgaW50ZXJmYWNlIGlzIGFuIEVNRiBkZWZpbml0aW9uIG9mIGEgY2xhc3MgdGhhdCByZXByZXNlbnRzIGEgbGFiZWwgZm9yIGFuCisgKiBFZGdlIHRoYXQgcmVwcmVzZW50cyBhIHRoZSByZWxhdGlvbnNoaXAgb2YgdHdvIG5vZGVzIHNoYXJpbmcgYSBjb21tb24gYm9yZGVyCisgKiAKKyAqIEBtb2RlbAorICovCitwdWJsaWMgaW50ZXJmYWNlIENvbW1vbkJvcmRlclJlbGF0aW9uc2hpcExhYmVsIGV4dGVuZHMKKwkJUGh5c2ljYWxSZWxhdGlvbnNoaXBMYWJlbCB7CisKKwkvKioKKwkgKiBUaGlzIGlzIHRoZSBzZWdtZW50IG9mIHRoZSB0eXBlIFVSSSB0aGF0IHByZWZpeGVzIGFsbCBvdGhlciBzZWdtZW50cyBpbiBhCisJICogcmVsYXRpdmUgcGh5c2ljYWwgcmVsYXRpb25zaGlwIGxhYmVsIHR5cGUgVVJJLgorCSAqLworCVN0cmluZyBVUklfVFlQRV9DT01NT05fQk9SREVSX1JFTEFUSU9OU0hJUF9MQUJFTF9TRUdNRU5UID0gVVJJX1RZUEVfUEhZU0lDQUxfUkVMQVRJT05TSElQX0xBQkVMX1NFR01FTlQKKwkJCSsgIi9ib3JkZXIiOworCit9IC8vIENvbW1vbkJvcmRlclJlbGF0aW9uc2hpcExhYmVsCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvbGFiZWxzL0NvbW1vbkJvcmRlclJlbGF0aW9uc2hpcExhYmVsVmFsdWUuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy9sYWJlbHMvQ29tbW9uQm9yZGVyUmVsYXRpb25zaGlwTGFiZWxWYWx1ZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcyNmU1MzQKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvbGFiZWxzL0NvbW1vbkJvcmRlclJlbGF0aW9uc2hpcExhYmVsVmFsdWUuamF2YQpAQCAtMCwwICsxLDQwIEBACisvLyBDb21tb25Cb3JkZXJSZWxhdGlvbnNoaXBMYWJlbFZhbHVlLmphdmEKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHM7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIAorICogQ29weXJpZ2h0IChjKSAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiAKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdCAKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sIAorICogCisgKiBDb250cmlidXRvcnM6IAorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiAKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioKKyAqIFRoaXMgaW50ZXJmYWNlIGRlZmluZXMgYSBjbGFzcyBpbiBhbiBFTUYgbW9kZWwgZm9yIGEgQ29tbW9uIGJvcmRlcgorICogUmVsYXRpb25zaGlwIExhYmVsIFZhbHVlLgorICogCisgKiBAbW9kZWwKKyAqLworcHVibGljIGludGVyZmFjZSBDb21tb25Cb3JkZXJSZWxhdGlvbnNoaXBMYWJlbFZhbHVlIGV4dGVuZHMKKwkJUGh5c2ljYWxSZWxhdGlvbnNoaXBMYWJlbFZhbHVleworCisJLyoqCisJICogQHJldHVybiB0aGUgbGVuZ3RoIG9mIHRoZSBjb21tb24gYm9yZGVyIGluIGtpbG9tZXRlcnMKKwkgKiBAbW9kZWwKKwkgKi8KKwlkb3VibGUgZ2V0Qm9yZGVyTGVuZ3RoKCk7CisJCisJLyoqCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuQ29tbW9uQm9yZGVyUmVsYXRpb25zaGlwTGFiZWxWYWx1ZSNnZXRCb3JkZXJMZW5ndGggPGVtPkJvcmRlciBMZW5ndGg8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPkJvcmRlciBMZW5ndGg8L2VtPicgYXR0cmlidXRlLgorCSAqIEBzZWUgI2dldEJvcmRlckxlbmd0aCgpCisJICogQGdlbmVyYXRlZAorCSAqLworCXZvaWQgc2V0Qm9yZGVyTGVuZ3RoKGRvdWJsZSB2YWx1ZSk7CisKK30gLy8gQ29tbW9uQm9yZGVyUmVsYXRpb25zaGlwTGFiZWxWYWx1ZQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL2xhYmVscy9FYXJ0aFNjaWVuY2VMYWJlbC5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL2xhYmVscy9FYXJ0aFNjaWVuY2VMYWJlbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA1NjVkODAKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvbGFiZWxzL0VhcnRoU2NpZW5jZUxhYmVsLmphdmEKQEAgLTAsMCArMSw2MiBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOSwyMDEwIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHM7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuVVJJOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5TVEVNVVJJOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5TdGF0aWNOb2RlTGFiZWw7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIEEgcmVwcmVzZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPkVhcnRoIFNjaWVuY2UgTGFiZWw8L2I+PC9lbT4nLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKgorICogPHA+CisgKiBUaGUgZm9sbG93aW5nIGZlYXR1cmVzIGFyZSBzdXBwb3J0ZWQ6CisgKiA8dWw+CisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuRWFydGhTY2llbmNlTGFiZWwjZ2V0Q3VycmVudEVhcnRoU2NpZW5jZVZhbHVlIDxlbT5DdXJyZW50IEVhcnRoIFNjaWVuY2UgVmFsdWU8L2VtPn08L2xpPgorICogPC91bD4KKyAqIDwvcD4KKyAqCisgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLkxhYmVsc1BhY2thZ2UjZ2V0RWFydGhTY2llbmNlTGFiZWwoKQorICogQG1vZGVsCisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBpbnRlcmZhY2UgRWFydGhTY2llbmNlTGFiZWwgZXh0ZW5kcyBTdGF0aWNOb2RlTGFiZWwgeworCQorCS8qKgorCSAqIFRoaXMgaXMgdGhlIHNlZ21lbnQgb2YgdGhlIHR5cGUgVVJJIHRoYXQgcHJlZml4ZXMgYWxsIG90aGVyIHNlZ21lbnRzIGluIGEKKwkgKiBlYXJ0aCBzY2llbmNlIGxhYmVsIHR5cGUgVVJJLgorCSAqLworCVN0cmluZyBVUklfVFlQRV9FQVJUSF9TQ0lFTkNFX0xBQkVMX1NFR01FTlQgPSBVUklfVFlQRV9MQUJFTF9TRUdNRU5UICsgIi9lYXJ0aHNjaWVuY2UiOworCisJLyoqCisJICogVGhpcyBpcyB0aGUgdHlwZSBVUkkgZm9yIGFyZWEgbGFiZWxzCisJICovCisJVVJJIFVSSV9UWVBFX0VBUlRIX1NDSUVOQ0VfTEFCRUwgPSBTVEVNVVJJCisJCQkuY3JlYXRlVHlwZVVSSShVUklfVFlQRV9FQVJUSF9TQ0lFTkNFX0xBQkVMX1NFR01FTlQpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+Q3VycmVudCBFYXJ0aCBTY2llbmNlIFZhbHVlPC9iPjwvZW0+JyByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8cD4KKwkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5DdXJyZW50IEVhcnRoIFNjaWVuY2UgVmFsdWU8L2VtPicgcmVmZXJlbmNlIGlzbid0IGNsZWFyLAorCSAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4KKwkgKiA8L3A+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+Q3VycmVudCBFYXJ0aCBTY2llbmNlIFZhbHVlPC9lbT4nIHJlZmVyZW5jZS4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLkxhYmVsc1BhY2thZ2UjZ2V0RWFydGhTY2llbmNlTGFiZWxfQ3VycmVudEVhcnRoU2NpZW5jZVZhbHVlKCkKKwkgKiBAbW9kZWwgcmVzb2x2ZVByb3hpZXM9ImZhbHNlIiB0cmFuc2llbnQ9InRydWUiIGNoYW5nZWFibGU9ImZhbHNlIiB2b2xhdGlsZT0idHJ1ZSIKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRWFydGhTY2llbmNlTGFiZWxWYWx1ZSBnZXRDdXJyZW50RWFydGhTY2llbmNlVmFsdWUoKTsKKworfSAvLyBFYXJ0aFNjaWVuY2VMYWJlbApkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL2xhYmVscy9FYXJ0aFNjaWVuY2VMYWJlbFZhbHVlLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvbGFiZWxzL0VhcnRoU2NpZW5jZUxhYmVsVmFsdWUuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43Y2RlY2QxCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL2xhYmVscy9FYXJ0aFNjaWVuY2VMYWJlbFZhbHVlLmphdmEKQEAgLTAsMCArMSwyNTYgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDksMjAxMCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzOworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLkVMaXN0OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5MYWJlbFZhbHVlOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiBBIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5FYXJ0aCBTY2llbmNlIExhYmVsIFZhbHVlPC9iPjwvZW0+Jy4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICoKKyAqIDxwPgorICogVGhlIGZvbGxvd2luZyBmZWF0dXJlcyBhcmUgc3VwcG9ydGVkOgorICogPHVsPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLkVhcnRoU2NpZW5jZUxhYmVsVmFsdWUjZ2V0RGF0YVR5cGUgPGVtPkRhdGEgVHlwZTwvZW0+fTwvbGk+CisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuRWFydGhTY2llbmNlTGFiZWxWYWx1ZSNnZXRVbml0cyA8ZW0+VW5pdHM8L2VtPn08L2xpPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLkVhcnRoU2NpZW5jZUxhYmVsVmFsdWUjZ2V0TWVhbiA8ZW0+TWVhbjwvZW0+fTwvbGk+CisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuRWFydGhTY2llbmNlTGFiZWxWYWx1ZSNnZXRTZCA8ZW0+U2Q8L2VtPn08L2xpPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLkVhcnRoU2NpZW5jZUxhYmVsVmFsdWUjZ2V0TWluIDxlbT5NaW48L2VtPn08L2xpPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLkVhcnRoU2NpZW5jZUxhYmVsVmFsdWUjZ2V0TWF4IDxlbT5NYXg8L2VtPn08L2xpPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLkVhcnRoU2NpZW5jZUxhYmVsVmFsdWUjZ2V0TWVkaWFuIDxlbT5NZWRpYW48L2VtPn08L2xpPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLkVhcnRoU2NpZW5jZUxhYmVsVmFsdWUjZ2V0U2tld25lc3MgPGVtPlNrZXduZXNzPC9lbT59PC9saT4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5FYXJ0aFNjaWVuY2VMYWJlbFZhbHVlI2dldEt1cnRvc2lzIDxlbT5LdXJ0b3NpczwvZW0+fTwvbGk+CisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuRWFydGhTY2llbmNlTGFiZWxWYWx1ZSNnZXRSbXMgPGVtPlJtczwvZW0+fTwvbGk+CisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuRWFydGhTY2llbmNlTGFiZWxWYWx1ZSNnZXRTYW1wbGVzaXplIDxlbT5TYW1wbGVzaXplPC9lbT59PC9saT4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5FYXJ0aFNjaWVuY2VMYWJlbFZhbHVlI2dldFJhbmdlIDxlbT5SYW5nZTwvZW0+fTwvbGk+CisgKiA8L3VsPgorICogPC9wPgorICoKKyAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuTGFiZWxzUGFja2FnZSNnZXRFYXJ0aFNjaWVuY2VMYWJlbFZhbHVlKCkKKyAqIEBtb2RlbAorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgaW50ZXJmYWNlIEVhcnRoU2NpZW5jZUxhYmVsVmFsdWUgZXh0ZW5kcyBMYWJlbFZhbHVlIHsKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5EYXRhIFR5cGU8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDxwPgorCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPkRhdGEgVHlwZTwvZW0+JyBhdHRyaWJ1dGUgaXNuJ3QgY2xlYXIsCisJICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLgorCSAqIDwvcD4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5EYXRhIFR5cGU8L2VtPicgYXR0cmlidXRlLgorCSAqIEBzZWUgI3NldERhdGFUeXBlKFN0cmluZykKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLkxhYmVsc1BhY2thZ2UjZ2V0RWFydGhTY2llbmNlTGFiZWxWYWx1ZV9EYXRhVHlwZSgpCisJICogQG1vZGVsCisJICogQGdlbmVyYXRlZAorCSAqLworCVN0cmluZyBnZXREYXRhVHlwZSgpOworCisJLyoqCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuRWFydGhTY2llbmNlTGFiZWxWYWx1ZSNnZXREYXRhVHlwZSA8ZW0+RGF0YSBUeXBlPC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5EYXRhIFR5cGU8L2VtPicgYXR0cmlidXRlLgorCSAqIEBzZWUgI2dldERhdGFUeXBlKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJdm9pZCBzZXREYXRhVHlwZShTdHJpbmcgdmFsdWUpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+VW5pdHM8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDxwPgorCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPlVuaXRzPC9lbT4nIGF0dHJpYnV0ZSBpc24ndCBjbGVhciwKKwkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uCisJICogPC9wPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPlVuaXRzPC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiBAc2VlICNzZXRVbml0cyhTdHJpbmcpCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5MYWJlbHNQYWNrYWdlI2dldEVhcnRoU2NpZW5jZUxhYmVsVmFsdWVfVW5pdHMoKQorCSAqIEBtb2RlbAorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlTdHJpbmcgZ2V0VW5pdHMoKTsKKworCS8qKgorCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLkVhcnRoU2NpZW5jZUxhYmVsVmFsdWUjZ2V0VW5pdHMgPGVtPlVuaXRzPC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5Vbml0czwvZW0+JyBhdHRyaWJ1dGUuCisJICogQHNlZSAjZ2V0VW5pdHMoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwl2b2lkIHNldFVuaXRzKFN0cmluZyB2YWx1ZSk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5NZWFuPC9iPjwvZW0+JyBhdHRyaWJ1dGUgbGlzdC4KKwkgKiBUaGUgbGlzdCBjb250ZW50cyBhcmUgb2YgdHlwZSB7QGxpbmsgamF2YS5sYW5nLkRvdWJsZX0uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8cD4KKwkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5NZWFuPC9lbT4nIGF0dHJpYnV0ZSBsaXN0IGlzbid0IGNsZWFyLAorCSAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4KKwkgKiA8L3A+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+TWVhbjwvZW0+JyBhdHRyaWJ1dGUgbGlzdC4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLkxhYmVsc1BhY2thZ2UjZ2V0RWFydGhTY2llbmNlTGFiZWxWYWx1ZV9NZWFuKCkKKwkgKiBAbW9kZWwgdW5pcXVlPSJmYWxzZSIKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUxpc3Q8RG91YmxlPiBnZXRNZWFuKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5TZDwvYj48L2VtPicgYXR0cmlidXRlIGxpc3QuCisJICogVGhlIGxpc3QgY29udGVudHMgYXJlIG9mIHR5cGUge0BsaW5rIGphdmEubGFuZy5Eb3VibGV9LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPHA+CisJICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+U2Q8L2VtPicgYXR0cmlidXRlIGxpc3QgaXNuJ3QgY2xlYXIsCisJICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLgorCSAqIDwvcD4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5TZDwvZW0+JyBhdHRyaWJ1dGUgbGlzdC4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLkxhYmVsc1BhY2thZ2UjZ2V0RWFydGhTY2llbmNlTGFiZWxWYWx1ZV9TZCgpCisJICogQG1vZGVsIHVuaXF1ZT0iZmFsc2UiCisJICogQGdlbmVyYXRlZAorCSAqLworCUVMaXN0PERvdWJsZT4gZ2V0U2QoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPk1pbjwvYj48L2VtPicgYXR0cmlidXRlIGxpc3QuCisJICogVGhlIGxpc3QgY29udGVudHMgYXJlIG9mIHR5cGUge0BsaW5rIGphdmEubGFuZy5Eb3VibGV9LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPHA+CisJICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+TWluPC9lbT4nIGF0dHJpYnV0ZSBsaXN0IGlzbid0IGNsZWFyLAorCSAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4KKwkgKiA8L3A+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+TWluPC9lbT4nIGF0dHJpYnV0ZSBsaXN0LgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuTGFiZWxzUGFja2FnZSNnZXRFYXJ0aFNjaWVuY2VMYWJlbFZhbHVlX01pbigpCisJICogQG1vZGVsIHVuaXF1ZT0iZmFsc2UiCisJICogQGdlbmVyYXRlZAorCSAqLworCUVMaXN0PERvdWJsZT4gZ2V0TWluKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5NYXg8L2I+PC9lbT4nIGF0dHJpYnV0ZSBsaXN0LgorCSAqIFRoZSBsaXN0IGNvbnRlbnRzIGFyZSBvZiB0eXBlIHtAbGluayBqYXZhLmxhbmcuRG91YmxlfS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDxwPgorCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPk1heDwvZW0+JyBhdHRyaWJ1dGUgbGlzdCBpc24ndCBjbGVhciwKKwkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uCisJICogPC9wPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPk1heDwvZW0+JyBhdHRyaWJ1dGUgbGlzdC4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLkxhYmVsc1BhY2thZ2UjZ2V0RWFydGhTY2llbmNlTGFiZWxWYWx1ZV9NYXgoKQorCSAqIEBtb2RlbCB1bmlxdWU9ImZhbHNlIgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFTGlzdDxEb3VibGU+IGdldE1heCgpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+TWVkaWFuPC9iPjwvZW0+JyBhdHRyaWJ1dGUgbGlzdC4KKwkgKiBUaGUgbGlzdCBjb250ZW50cyBhcmUgb2YgdHlwZSB7QGxpbmsgamF2YS5sYW5nLkRvdWJsZX0uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8cD4KKwkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5NZWRpYW48L2VtPicgYXR0cmlidXRlIGxpc3QgaXNuJ3QgY2xlYXIsCisJICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLgorCSAqIDwvcD4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5NZWRpYW48L2VtPicgYXR0cmlidXRlIGxpc3QuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5MYWJlbHNQYWNrYWdlI2dldEVhcnRoU2NpZW5jZUxhYmVsVmFsdWVfTWVkaWFuKCkKKwkgKiBAbW9kZWwgdW5pcXVlPSJmYWxzZSIKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUxpc3Q8RG91YmxlPiBnZXRNZWRpYW4oKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPlNrZXduZXNzPC9iPjwvZW0+JyBhdHRyaWJ1dGUgbGlzdC4KKwkgKiBUaGUgbGlzdCBjb250ZW50cyBhcmUgb2YgdHlwZSB7QGxpbmsgamF2YS5sYW5nLkRvdWJsZX0uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8cD4KKwkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5Ta2V3bmVzczwvZW0+JyBhdHRyaWJ1dGUgbGlzdCBpc24ndCBjbGVhciwKKwkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uCisJICogPC9wPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPlNrZXduZXNzPC9lbT4nIGF0dHJpYnV0ZSBsaXN0LgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuTGFiZWxzUGFja2FnZSNnZXRFYXJ0aFNjaWVuY2VMYWJlbFZhbHVlX1NrZXduZXNzKCkKKwkgKiBAbW9kZWwgdW5pcXVlPSJmYWxzZSIKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUxpc3Q8RG91YmxlPiBnZXRTa2V3bmVzcygpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+S3VydG9zaXM8L2I+PC9lbT4nIGF0dHJpYnV0ZSBsaXN0LgorCSAqIFRoZSBsaXN0IGNvbnRlbnRzIGFyZSBvZiB0eXBlIHtAbGluayBqYXZhLmxhbmcuRG91YmxlfS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDxwPgorCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPkt1cnRvc2lzPC9lbT4nIGF0dHJpYnV0ZSBsaXN0IGlzbid0IGNsZWFyLAorCSAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4KKwkgKiA8L3A+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+S3VydG9zaXM8L2VtPicgYXR0cmlidXRlIGxpc3QuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5MYWJlbHNQYWNrYWdlI2dldEVhcnRoU2NpZW5jZUxhYmVsVmFsdWVfS3VydG9zaXMoKQorCSAqIEBtb2RlbCB1bmlxdWU9ImZhbHNlIgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFTGlzdDxEb3VibGU+IGdldEt1cnRvc2lzKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5SbXM8L2I+PC9lbT4nIGF0dHJpYnV0ZSBsaXN0LgorCSAqIFRoZSBsaXN0IGNvbnRlbnRzIGFyZSBvZiB0eXBlIHtAbGluayBqYXZhLmxhbmcuRG91YmxlfS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDxwPgorCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPlJtczwvZW0+JyBhdHRyaWJ1dGUgbGlzdCBpc24ndCBjbGVhciwKKwkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uCisJICogPC9wPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPlJtczwvZW0+JyBhdHRyaWJ1dGUgbGlzdC4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLkxhYmVsc1BhY2thZ2UjZ2V0RWFydGhTY2llbmNlTGFiZWxWYWx1ZV9SbXMoKQorCSAqIEBtb2RlbCB1bmlxdWU9ImZhbHNlIgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFTGlzdDxEb3VibGU+IGdldFJtcygpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+U2FtcGxlc2l6ZTwvYj48L2VtPicgYXR0cmlidXRlIGxpc3QuCisJICogVGhlIGxpc3QgY29udGVudHMgYXJlIG9mIHR5cGUge0BsaW5rIGphdmEubGFuZy5Eb3VibGV9LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPHA+CisJICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+U2FtcGxlc2l6ZTwvZW0+JyBhdHRyaWJ1dGUgbGlzdCBpc24ndCBjbGVhciwKKwkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uCisJICogPC9wPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPlNhbXBsZXNpemU8L2VtPicgYXR0cmlidXRlIGxpc3QuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5MYWJlbHNQYWNrYWdlI2dldEVhcnRoU2NpZW5jZUxhYmVsVmFsdWVfU2FtcGxlc2l6ZSgpCisJICogQG1vZGVsIHVuaXF1ZT0iZmFsc2UiCisJICogQGdlbmVyYXRlZAorCSAqLworCUVMaXN0PERvdWJsZT4gZ2V0U2FtcGxlc2l6ZSgpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+UmFuZ2U8L2I+PC9lbT4nIGF0dHJpYnV0ZSBsaXN0LgorCSAqIFRoZSBsaXN0IGNvbnRlbnRzIGFyZSBvZiB0eXBlIHtAbGluayBqYXZhLmxhbmcuRG91YmxlfS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDxwPgorCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPlJhbmdlPC9lbT4nIGF0dHJpYnV0ZSBsaXN0IGlzbid0IGNsZWFyLAorCSAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4KKwkgKiA8L3A+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+UmFuZ2U8L2VtPicgYXR0cmlidXRlIGxpc3QuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5MYWJlbHNQYWNrYWdlI2dldEVhcnRoU2NpZW5jZUxhYmVsVmFsdWVfUmFuZ2UoKQorCSAqIEBtb2RlbCB1bmlxdWU9ImZhbHNlIgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFTGlzdDxEb3VibGU+IGdldFJhbmdlKCk7CisKK30gLy8gRWFydGhTY2llbmNlTGFiZWxWYWx1ZQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL2xhYmVscy9MYWJlbHNGYWN0b3J5LmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvbGFiZWxzL0xhYmVsc0ZhY3RvcnkuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jODgwYWFjCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL2xhYmVscy9MYWJlbHNGYWN0b3J5LmphdmEKQEAgLTAsMCArMSwxNzcgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHM7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVGYWN0b3J5OworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiBUaGUgPGI+RmFjdG9yeTwvYj4gZm9yIHRoZSBtb2RlbC4KKyAqIEl0IHByb3ZpZGVzIGEgY3JlYXRlIG1ldGhvZCBmb3IgZWFjaCBub24tYWJzdHJhY3QgY2xhc3Mgb2YgdGhlIG1vZGVsLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLkxhYmVsc1BhY2thZ2UKKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGludGVyZmFjZSBMYWJlbHNGYWN0b3J5IGV4dGVuZHMgRUZhY3RvcnkgeworCS8qKgorCSAqIFRoZSBzaW5nbGV0b24gaW5zdGFuY2Ugb2YgdGhlIGZhY3RvcnkuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJTGFiZWxzRmFjdG9yeSBlSU5TVEFOQ0UgPSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5pbXBsLkxhYmVsc0ZhY3RvcnlJbXBsLmluaXQoKTsKKworCS8qKgorCSAqIFJldHVybnMgYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+QXJlYSBMYWJlbDwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+QXJlYSBMYWJlbDwvZW0+Jy4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQXJlYUxhYmVsIGNyZWF0ZUFyZWFMYWJlbCgpOworCisJLyoqCisJICogUmV0dXJucyBhIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5BcmVhIExhYmVsIFZhbHVlPC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiBhIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5BcmVhIExhYmVsIFZhbHVlPC9lbT4nLgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlBcmVhTGFiZWxWYWx1ZSBjcmVhdGVBcmVhTGFiZWxWYWx1ZSgpOworCisJLyoqCisJICogUmV0dXJucyBhIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5Db21tb24gQm9yZGVyIFJlbGF0aW9uc2hpcCBMYWJlbDwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+Q29tbW9uIEJvcmRlciBSZWxhdGlvbnNoaXAgTGFiZWw8L2VtPicuCisJICogQGdlbmVyYXRlZAorCSAqLworCUNvbW1vbkJvcmRlclJlbGF0aW9uc2hpcExhYmVsIGNyZWF0ZUNvbW1vbkJvcmRlclJlbGF0aW9uc2hpcExhYmVsKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPkNvbW1vbiBCb3JkZXIgUmVsYXRpb25zaGlwIExhYmVsIFZhbHVlPC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiBhIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5Db21tb24gQm9yZGVyIFJlbGF0aW9uc2hpcCBMYWJlbCBWYWx1ZTwvZW0+Jy4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQ29tbW9uQm9yZGVyUmVsYXRpb25zaGlwTGFiZWxWYWx1ZSBjcmVhdGVDb21tb25Cb3JkZXJSZWxhdGlvbnNoaXBMYWJlbFZhbHVlKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPlBvcHVsYXRpb24gTGFiZWw8L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPlBvcHVsYXRpb24gTGFiZWw8L2VtPicuCisJICogQGdlbmVyYXRlZAorCSAqLworCVBvcHVsYXRpb25MYWJlbCBjcmVhdGVQb3B1bGF0aW9uTGFiZWwoKTsKKworCS8qKgorCSAqIFJldHVybnMgYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+UG9wdWxhdGlvbiBMYWJlbCBWYWx1ZTwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+UG9wdWxhdGlvbiBMYWJlbCBWYWx1ZTwvZW0+Jy4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJUG9wdWxhdGlvbkxhYmVsVmFsdWUgY3JlYXRlUG9wdWxhdGlvbkxhYmVsVmFsdWUoKTsKKworCS8qKgorCSAqIFJldHVybnMgYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+UmVsYXRpdmUgUGh5c2ljYWwgUmVsYXRpb25zaGlwIExhYmVsPC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiBhIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5SZWxhdGl2ZSBQaHlzaWNhbCBSZWxhdGlvbnNoaXAgTGFiZWw8L2VtPicuCisJICogQGdlbmVyYXRlZAorCSAqLworCVJlbGF0aXZlUGh5c2ljYWxSZWxhdGlvbnNoaXBMYWJlbCBjcmVhdGVSZWxhdGl2ZVBoeXNpY2FsUmVsYXRpb25zaGlwTGFiZWwoKTsKKworCS8qKgorCSAqIFJldHVybnMgYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+UmVsYXRpdmUgUGh5c2ljYWwgUmVsYXRpb25zaGlwIExhYmVsIFZhbHVlPC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiBhIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5SZWxhdGl2ZSBQaHlzaWNhbCBSZWxhdGlvbnNoaXAgTGFiZWwgVmFsdWU8L2VtPicuCisJICogQGdlbmVyYXRlZAorCSAqLworCVJlbGF0aXZlUGh5c2ljYWxSZWxhdGlvbnNoaXBMYWJlbFZhbHVlIGNyZWF0ZVJlbGF0aXZlUGh5c2ljYWxSZWxhdGlvbnNoaXBMYWJlbFZhbHVlKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPlRyYW5zcG9ydCBSZWxhdGlvbnNoaXAgTGFiZWw8L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPlRyYW5zcG9ydCBSZWxhdGlvbnNoaXAgTGFiZWw8L2VtPicuCisJICogQGdlbmVyYXRlZAorCSAqLworCVRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsIGNyZWF0ZVRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPlRyYW5zcG9ydCBSZWxhdGlvbnNoaXAgTGFiZWwgVmFsdWU8L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPlRyYW5zcG9ydCBSZWxhdGlvbnNoaXAgTGFiZWwgVmFsdWU8L2VtPicuCisJICogQGdlbmVyYXRlZAorCSAqLworCVRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsVmFsdWUgY3JlYXRlVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxWYWx1ZSgpOworCisJLyoqCisJICogUmV0dXJucyBhIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5QaHlzaWNhbCBSZWxhdGlvbnNoaXAgTGFiZWwgVmFsdWU8L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPlBoeXNpY2FsIFJlbGF0aW9uc2hpcCBMYWJlbCBWYWx1ZTwvZW0+Jy4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJUGh5c2ljYWxSZWxhdGlvbnNoaXBMYWJlbFZhbHVlIGNyZWF0ZVBoeXNpY2FsUmVsYXRpb25zaGlwTGFiZWxWYWx1ZSgpOworCisJLyoqCisJICogUmV0dXJucyBhIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5Sb2FkIFRyYW5zcG9ydCBSZWxhdGlvbnNoaXAgTGFiZWw8L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPlJvYWQgVHJhbnNwb3J0IFJlbGF0aW9uc2hpcCBMYWJlbDwvZW0+Jy4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJUm9hZFRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsIGNyZWF0ZVJvYWRUcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbCgpOworCisJLyoqCisJICogUmV0dXJucyBhIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5Sb2FkIFRyYW5zcG9ydCBSZWxhdGlvbnNoaXAgTGFiZWwgVmFsdWU8L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPlJvYWQgVHJhbnNwb3J0IFJlbGF0aW9uc2hpcCBMYWJlbCBWYWx1ZTwvZW0+Jy4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJUm9hZFRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsVmFsdWUgY3JlYXRlUm9hZFRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsVmFsdWUoKTsKKworCS8qKgorCSAqIFJldHVybnMgYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+RWFydGggU2NpZW5jZSBMYWJlbDwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+RWFydGggU2NpZW5jZSBMYWJlbDwvZW0+Jy4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRWFydGhTY2llbmNlTGFiZWwgY3JlYXRlRWFydGhTY2llbmNlTGFiZWwoKTsKKworCS8qKgorCSAqIFJldHVybnMgYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+RWFydGggU2NpZW5jZSBMYWJlbCBWYWx1ZTwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+RWFydGggU2NpZW5jZSBMYWJlbCBWYWx1ZTwvZW0+Jy4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRWFydGhTY2llbmNlTGFiZWxWYWx1ZSBjcmVhdGVFYXJ0aFNjaWVuY2VMYWJlbFZhbHVlKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBwYWNrYWdlIHN1cHBvcnRlZCBieSB0aGlzIGZhY3RvcnkuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBwYWNrYWdlIHN1cHBvcnRlZCBieSB0aGlzIGZhY3RvcnkuCisJICogQGdlbmVyYXRlZAorCSAqLworCUxhYmVsc1BhY2thZ2UgZ2V0TGFiZWxzUGFja2FnZSgpOworCit9IC8vTGFiZWxzRmFjdG9yeQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL2xhYmVscy9MYWJlbHNQYWNrYWdlLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvbGFiZWxzL0xhYmVsc1BhY2thZ2UuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wM2EzYThjCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL2xhYmVscy9MYWJlbHNQYWNrYWdlLmphdmEKQEAgLTAsMCArMSwyNDU3IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQXR0cmlidXRlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVFbnVtOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRVJlZmVyZW5jZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguR3JhcGhQYWNrYWdlOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiBUaGUgPGI+UGFja2FnZTwvYj4gZm9yIHRoZSBtb2RlbC4KKyAqIEl0IGNvbnRhaW5zIGFjY2Vzc29ycyBmb3IgdGhlIG1ldGEgb2JqZWN0cyB0byByZXByZXNlbnQKKyAqIDx1bD4KKyAqICAgPGxpPmVhY2ggY2xhc3MsPC9saT4KKyAqICAgPGxpPmVhY2ggZmVhdHVyZSBvZiBlYWNoIGNsYXNzLDwvbGk+CisgKiAgIDxsaT5lYWNoIGVudW0sPC9saT4KKyAqICAgPGxpPmFuZCBlYWNoIGRhdGEgdHlwZTwvbGk+CisgKiA8L3VsPgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLkxhYmVsc0ZhY3RvcnkKKyAqIEBtb2RlbCBraW5kPSJwYWNrYWdlIgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgaW50ZXJmYWNlIExhYmVsc1BhY2thZ2UgZXh0ZW5kcyBFUGFja2FnZSB7CisJLyoqCisJICogVGhlIHBhY2thZ2UgbmFtZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlTdHJpbmcgZU5BTUUgPSAibGFiZWxzIjsKKworCS8qKgorCSAqIFRoZSBwYWNrYWdlIG5hbWVzcGFjZSBVUkkuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJU3RyaW5nIGVOU19VUkkgPSAiaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL2xhYmVscy5lY29yZSI7CisKKwkvKioKKwkgKiBUaGUgcGFja2FnZSBuYW1lc3BhY2UgbmFtZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlTdHJpbmcgZU5TX1BSRUZJWCA9ICJvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscyI7CisKKwkvKioKKwkgKiBUaGUgc2luZ2xldG9uIGluc3RhbmNlIG9mIHRoZSBwYWNrYWdlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUxhYmVsc1BhY2thZ2UgZUlOU1RBTkNFID0gb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuaW1wbC5MYWJlbHNQYWNrYWdlSW1wbC5pbml0KCk7CisKKwkvKioKKwkgKiBUaGUgbWV0YSBvYmplY3QgaWQgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLmltcGwuQXJlYUxhYmVsSW1wbCA8ZW0+QXJlYSBMYWJlbDwvZW0+fScgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLmltcGwuQXJlYUxhYmVsSW1wbAorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuaW1wbC5MYWJlbHNQYWNrYWdlSW1wbCNnZXRBcmVhTGFiZWwoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlpbnQgQVJFQV9MQUJFTCA9IDA7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VVJJPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgQVJFQV9MQUJFTF9fVVJJID0gR3JhcGhQYWNrYWdlLlNUQVRJQ19OT0RFX0xBQkVMX19VUkk7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VHlwZSBVUkk8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBBUkVBX0xBQkVMX19UWVBFX1VSSSA9IEdyYXBoUGFja2FnZS5TVEFUSUNfTk9ERV9MQUJFTF9fVFlQRV9VUkk7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RHVibGluIENvcmU8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBBUkVBX0xBQkVMX19EVUJMSU5fQ09SRSA9IEdyYXBoUGFja2FnZS5TVEFUSUNfTk9ERV9MQUJFTF9fRFVCTElOX0NPUkU7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VVJJIE9mIElkZW50aWZpYWJsZSBUbyBCZSBMYWJlbGVkPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgQVJFQV9MQUJFTF9fVVJJX09GX0lERU5USUZJQUJMRV9UT19CRV9MQUJFTEVEID0gR3JhcGhQYWNrYWdlLlNUQVRJQ19OT0RFX0xBQkVMX19VUklfT0ZfSURFTlRJRklBQkxFX1RPX0JFX0xBQkVMRUQ7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+Q3VycmVudCBWYWx1ZTwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IEFSRUFfTEFCRUxfX0NVUlJFTlRfVkFMVUUgPSBHcmFwaFBhY2thZ2UuU1RBVElDX05PREVfTEFCRUxfX0NVUlJFTlRfVkFMVUU7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+SWRlbnRpZmlhYmxlPC9iPjwvZW0+JyByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgQVJFQV9MQUJFTF9fSURFTlRJRklBQkxFID0gR3JhcGhQYWNrYWdlLlNUQVRJQ19OT0RFX0xBQkVMX19JREVOVElGSUFCTEU7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+Tm9kZTwvYj48L2VtPicgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IEFSRUFfTEFCRUxfX05PREUgPSBHcmFwaFBhY2thZ2UuU1RBVElDX05PREVfTEFCRUxfX05PREU7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+Q3VycmVudCBBcmVhIFZhbHVlPC9iPjwvZW0+JyByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgQVJFQV9MQUJFTF9fQ1VSUkVOVF9BUkVBX1ZBTFVFID0gR3JhcGhQYWNrYWdlLlNUQVRJQ19OT0RFX0xBQkVMX0ZFQVRVUkVfQ09VTlQgKyAwOworCisJLyoqCisJICogVGhlIG51bWJlciBvZiBzdHJ1Y3R1cmFsIGZlYXR1cmVzIG9mIHRoZSAnPGVtPkFyZWEgTGFiZWw8L2VtPicgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgQVJFQV9MQUJFTF9GRUFUVVJFX0NPVU5UID0gR3JhcGhQYWNrYWdlLlNUQVRJQ19OT0RFX0xBQkVMX0ZFQVRVUkVfQ09VTlQgKyAxOworCisJLyoqCisJICogVGhlIG1ldGEgb2JqZWN0IGlkIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5pbXBsLkFyZWFMYWJlbFZhbHVlSW1wbCA8ZW0+QXJlYSBMYWJlbCBWYWx1ZTwvZW0+fScgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLmltcGwuQXJlYUxhYmVsVmFsdWVJbXBsCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5pbXBsLkxhYmVsc1BhY2thZ2VJbXBsI2dldEFyZWFMYWJlbFZhbHVlKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJaW50IEFSRUFfTEFCRUxfVkFMVUUgPSAxOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkFyZWE8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBBUkVBX0xBQkVMX1ZBTFVFX19BUkVBID0gR3JhcGhQYWNrYWdlLkxBQkVMX1ZBTFVFX0ZFQVRVUkVfQ09VTlQgKyAwOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkF2ZXJhZ2UgRXh0ZW50PC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgQVJFQV9MQUJFTF9WQUxVRV9fQVZFUkFHRV9FWFRFTlQgPSBHcmFwaFBhY2thZ2UuTEFCRUxfVkFMVUVfRkVBVFVSRV9DT1VOVCArIDE7CisKKwkvKioKKwkgKiBUaGUgbnVtYmVyIG9mIHN0cnVjdHVyYWwgZmVhdHVyZXMgb2YgdGhlICc8ZW0+QXJlYSBMYWJlbCBWYWx1ZTwvZW0+JyBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBBUkVBX0xBQkVMX1ZBTFVFX0ZFQVRVUkVfQ09VTlQgPSBHcmFwaFBhY2thZ2UuTEFCRUxfVkFMVUVfRkVBVFVSRV9DT1VOVCArIDI7CisKKwkvKioKKwkgKiBUaGUgbWV0YSBvYmplY3QgaWQgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLmltcGwuUGh5c2ljYWxSZWxhdGlvbnNoaXBMYWJlbEltcGwgPGVtPlBoeXNpY2FsIFJlbGF0aW9uc2hpcCBMYWJlbDwvZW0+fScgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLmltcGwuUGh5c2ljYWxSZWxhdGlvbnNoaXBMYWJlbEltcGwKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLmltcGwuTGFiZWxzUGFja2FnZUltcGwjZ2V0UGh5c2ljYWxSZWxhdGlvbnNoaXBMYWJlbCgpCisJICogQGdlbmVyYXRlZAorCSAqLworCWludCBQSFlTSUNBTF9SRUxBVElPTlNISVBfTEFCRUwgPSA0OworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlVSSTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFBIWVNJQ0FMX1JFTEFUSU9OU0hJUF9MQUJFTF9fVVJJID0gR3JhcGhQYWNrYWdlLlNUQVRJQ19FREdFX0xBQkVMX19VUkk7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VHlwZSBVUkk8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBQSFlTSUNBTF9SRUxBVElPTlNISVBfTEFCRUxfX1RZUEVfVVJJID0gR3JhcGhQYWNrYWdlLlNUQVRJQ19FREdFX0xBQkVMX19UWVBFX1VSSTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5EdWJsaW4gQ29yZTwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFBIWVNJQ0FMX1JFTEFUSU9OU0hJUF9MQUJFTF9fRFVCTElOX0NPUkUgPSBHcmFwaFBhY2thZ2UuU1RBVElDX0VER0VfTEFCRUxfX0RVQkxJTl9DT1JFOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlVSSSBPZiBJZGVudGlmaWFibGUgVG8gQmUgTGFiZWxlZDwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFBIWVNJQ0FMX1JFTEFUSU9OU0hJUF9MQUJFTF9fVVJJX09GX0lERU5USUZJQUJMRV9UT19CRV9MQUJFTEVEID0gR3JhcGhQYWNrYWdlLlNUQVRJQ19FREdFX0xBQkVMX19VUklfT0ZfSURFTlRJRklBQkxFX1RPX0JFX0xBQkVMRUQ7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+Q3VycmVudCBWYWx1ZTwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFBIWVNJQ0FMX1JFTEFUSU9OU0hJUF9MQUJFTF9fQ1VSUkVOVF9WQUxVRSA9IEdyYXBoUGFja2FnZS5TVEFUSUNfRURHRV9MQUJFTF9fQ1VSUkVOVF9WQUxVRTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5JZGVudGlmaWFibGU8L2I+PC9lbT4nIHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBQSFlTSUNBTF9SRUxBVElPTlNISVBfTEFCRUxfX0lERU5USUZJQUJMRSA9IEdyYXBoUGFja2FnZS5TVEFUSUNfRURHRV9MQUJFTF9fSURFTlRJRklBQkxFOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkVkZ2U8L2I+PC9lbT4nIGNvbnRhaW5lciByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgUEhZU0lDQUxfUkVMQVRJT05TSElQX0xBQkVMX19FREdFID0gR3JhcGhQYWNrYWdlLlNUQVRJQ19FREdFX0xBQkVMX19FREdFOworCisJLyoqCisJICogVGhlIG51bWJlciBvZiBzdHJ1Y3R1cmFsIGZlYXR1cmVzIG9mIHRoZSAnPGVtPlBoeXNpY2FsIFJlbGF0aW9uc2hpcCBMYWJlbDwvZW0+JyBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBQSFlTSUNBTF9SRUxBVElPTlNISVBfTEFCRUxfRkVBVFVSRV9DT1VOVCA9IEdyYXBoUGFja2FnZS5TVEFUSUNfRURHRV9MQUJFTF9GRUFUVVJFX0NPVU5UICsgMDsKKworCS8qKgorCSAqIFRoZSBtZXRhIG9iamVjdCBpZCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuaW1wbC5SZWxhdGl2ZVBoeXNpY2FsUmVsYXRpb25zaGlwTGFiZWxJbXBsIDxlbT5SZWxhdGl2ZSBQaHlzaWNhbCBSZWxhdGlvbnNoaXAgTGFiZWw8L2VtPn0nIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5pbXBsLlJlbGF0aXZlUGh5c2ljYWxSZWxhdGlvbnNoaXBMYWJlbEltcGwKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLmltcGwuTGFiZWxzUGFja2FnZUltcGwjZ2V0UmVsYXRpdmVQaHlzaWNhbFJlbGF0aW9uc2hpcExhYmVsKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJaW50IFJFTEFUSVZFX1BIWVNJQ0FMX1JFTEFUSU9OU0hJUF9MQUJFTCA9IDc7CisKKwkvKioKKwkgKiBUaGUgbWV0YSBvYmplY3QgaWQgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLmltcGwuQ29tbW9uQm9yZGVyUmVsYXRpb25zaGlwTGFiZWxJbXBsIDxlbT5Db21tb24gQm9yZGVyIFJlbGF0aW9uc2hpcCBMYWJlbDwvZW0+fScgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLmltcGwuQ29tbW9uQm9yZGVyUmVsYXRpb25zaGlwTGFiZWxJbXBsCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5pbXBsLkxhYmVsc1BhY2thZ2VJbXBsI2dldENvbW1vbkJvcmRlclJlbGF0aW9uc2hpcExhYmVsKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJaW50IENPTU1PTl9CT1JERVJfUkVMQVRJT05TSElQX0xBQkVMID0gMjsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5VUkk8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBDT01NT05fQk9SREVSX1JFTEFUSU9OU0hJUF9MQUJFTF9fVVJJID0gUEhZU0lDQUxfUkVMQVRJT05TSElQX0xBQkVMX19VUkk7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VHlwZSBVUkk8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBDT01NT05fQk9SREVSX1JFTEFUSU9OU0hJUF9MQUJFTF9fVFlQRV9VUkkgPSBQSFlTSUNBTF9SRUxBVElPTlNISVBfTEFCRUxfX1RZUEVfVVJJOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkR1YmxpbiBDb3JlPC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgQ09NTU9OX0JPUkRFUl9SRUxBVElPTlNISVBfTEFCRUxfX0RVQkxJTl9DT1JFID0gUEhZU0lDQUxfUkVMQVRJT05TSElQX0xBQkVMX19EVUJMSU5fQ09SRTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5VUkkgT2YgSWRlbnRpZmlhYmxlIFRvIEJlIExhYmVsZWQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBDT01NT05fQk9SREVSX1JFTEFUSU9OU0hJUF9MQUJFTF9fVVJJX09GX0lERU5USUZJQUJMRV9UT19CRV9MQUJFTEVEID0gUEhZU0lDQUxfUkVMQVRJT05TSElQX0xBQkVMX19VUklfT0ZfSURFTlRJRklBQkxFX1RPX0JFX0xBQkVMRUQ7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+Q3VycmVudCBWYWx1ZTwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IENPTU1PTl9CT1JERVJfUkVMQVRJT05TSElQX0xBQkVMX19DVVJSRU5UX1ZBTFVFID0gUEhZU0lDQUxfUkVMQVRJT05TSElQX0xBQkVMX19DVVJSRU5UX1ZBTFVFOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPklkZW50aWZpYWJsZTwvYj48L2VtPicgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IENPTU1PTl9CT1JERVJfUkVMQVRJT05TSElQX0xBQkVMX19JREVOVElGSUFCTEUgPSBQSFlTSUNBTF9SRUxBVElPTlNISVBfTEFCRUxfX0lERU5USUZJQUJMRTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5FZGdlPC9iPjwvZW0+JyBjb250YWluZXIgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IENPTU1PTl9CT1JERVJfUkVMQVRJT05TSElQX0xBQkVMX19FREdFID0gUEhZU0lDQUxfUkVMQVRJT05TSElQX0xBQkVMX19FREdFOworCisJLyoqCisJICogVGhlIG51bWJlciBvZiBzdHJ1Y3R1cmFsIGZlYXR1cmVzIG9mIHRoZSAnPGVtPkNvbW1vbiBCb3JkZXIgUmVsYXRpb25zaGlwIExhYmVsPC9lbT4nIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IENPTU1PTl9CT1JERVJfUkVMQVRJT05TSElQX0xBQkVMX0ZFQVRVUkVfQ09VTlQgPSBQSFlTSUNBTF9SRUxBVElPTlNISVBfTEFCRUxfRkVBVFVSRV9DT1VOVCArIDA7CisKKwkvKioKKwkgKiBUaGUgbWV0YSBvYmplY3QgaWQgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLmltcGwuUGh5c2ljYWxSZWxhdGlvbnNoaXBMYWJlbFZhbHVlSW1wbCA8ZW0+UGh5c2ljYWwgUmVsYXRpb25zaGlwIExhYmVsIFZhbHVlPC9lbT59JyBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuaW1wbC5QaHlzaWNhbFJlbGF0aW9uc2hpcExhYmVsVmFsdWVJbXBsCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5pbXBsLkxhYmVsc1BhY2thZ2VJbXBsI2dldFBoeXNpY2FsUmVsYXRpb25zaGlwTGFiZWxWYWx1ZSgpCisJICogQGdlbmVyYXRlZAorCSAqLworCWludCBQSFlTSUNBTF9SRUxBVElPTlNISVBfTEFCRUxfVkFMVUUgPSAxMTsKKworCS8qKgorCSAqIFRoZSBudW1iZXIgb2Ygc3RydWN0dXJhbCBmZWF0dXJlcyBvZiB0aGUgJzxlbT5QaHlzaWNhbCBSZWxhdGlvbnNoaXAgTGFiZWwgVmFsdWU8L2VtPicgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgUEhZU0lDQUxfUkVMQVRJT05TSElQX0xBQkVMX1ZBTFVFX0ZFQVRVUkVfQ09VTlQgPSBHcmFwaFBhY2thZ2UuTEFCRUxfVkFMVUVfRkVBVFVSRV9DT1VOVCArIDA7CisKKwkvKioKKwkgKiBUaGUgbWV0YSBvYmplY3QgaWQgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLmltcGwuUmVsYXRpdmVQaHlzaWNhbFJlbGF0aW9uc2hpcExhYmVsVmFsdWVJbXBsIDxlbT5SZWxhdGl2ZSBQaHlzaWNhbCBSZWxhdGlvbnNoaXAgTGFiZWwgVmFsdWU8L2VtPn0nIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5pbXBsLlJlbGF0aXZlUGh5c2ljYWxSZWxhdGlvbnNoaXBMYWJlbFZhbHVlSW1wbAorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuaW1wbC5MYWJlbHNQYWNrYWdlSW1wbCNnZXRSZWxhdGl2ZVBoeXNpY2FsUmVsYXRpb25zaGlwTGFiZWxWYWx1ZSgpCisJICogQGdlbmVyYXRlZAorCSAqLworCWludCBSRUxBVElWRV9QSFlTSUNBTF9SRUxBVElPTlNISVBfTEFCRUxfVkFMVUUgPSA4OworCisJLyoqCisJICogVGhlIG1ldGEgb2JqZWN0IGlkIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5pbXBsLkNvbW1vbkJvcmRlclJlbGF0aW9uc2hpcExhYmVsVmFsdWVJbXBsIDxlbT5Db21tb24gQm9yZGVyIFJlbGF0aW9uc2hpcCBMYWJlbCBWYWx1ZTwvZW0+fScgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLmltcGwuQ29tbW9uQm9yZGVyUmVsYXRpb25zaGlwTGFiZWxWYWx1ZUltcGwKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLmltcGwuTGFiZWxzUGFja2FnZUltcGwjZ2V0Q29tbW9uQm9yZGVyUmVsYXRpb25zaGlwTGFiZWxWYWx1ZSgpCisJICogQGdlbmVyYXRlZAorCSAqLworCWludCBDT01NT05fQk9SREVSX1JFTEFUSU9OU0hJUF9MQUJFTF9WQUxVRSA9IDM7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+Qm9yZGVyIExlbmd0aDwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IENPTU1PTl9CT1JERVJfUkVMQVRJT05TSElQX0xBQkVMX1ZBTFVFX19CT1JERVJfTEVOR1RIID0gUEhZU0lDQUxfUkVMQVRJT05TSElQX0xBQkVMX1ZBTFVFX0ZFQVRVUkVfQ09VTlQgKyAwOworCisJLyoqCisJICogVGhlIG51bWJlciBvZiBzdHJ1Y3R1cmFsIGZlYXR1cmVzIG9mIHRoZSAnPGVtPkNvbW1vbiBCb3JkZXIgUmVsYXRpb25zaGlwIExhYmVsIFZhbHVlPC9lbT4nIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IENPTU1PTl9CT1JERVJfUkVMQVRJT05TSElQX0xBQkVMX1ZBTFVFX0ZFQVRVUkVfQ09VTlQgPSBQSFlTSUNBTF9SRUxBVElPTlNISVBfTEFCRUxfVkFMVUVfRkVBVFVSRV9DT1VOVCArIDE7CisKKwkvKioKKwkgKiBUaGUgbWV0YSBvYmplY3QgaWQgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLmltcGwuUG9wdWxhdGlvbkxhYmVsSW1wbCA8ZW0+UG9wdWxhdGlvbiBMYWJlbDwvZW0+fScgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLmltcGwuUG9wdWxhdGlvbkxhYmVsSW1wbAorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuaW1wbC5MYWJlbHNQYWNrYWdlSW1wbCNnZXRQb3B1bGF0aW9uTGFiZWwoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlpbnQgUE9QVUxBVElPTl9MQUJFTCA9IDU7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VVJJPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgUE9QVUxBVElPTl9MQUJFTF9fVVJJID0gR3JhcGhQYWNrYWdlLlNUQVRJQ19OT0RFX0xBQkVMX19VUkk7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VHlwZSBVUkk8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBQT1BVTEFUSU9OX0xBQkVMX19UWVBFX1VSSSA9IEdyYXBoUGFja2FnZS5TVEFUSUNfTk9ERV9MQUJFTF9fVFlQRV9VUkk7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RHVibGluIENvcmU8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBQT1BVTEFUSU9OX0xBQkVMX19EVUJMSU5fQ09SRSA9IEdyYXBoUGFja2FnZS5TVEFUSUNfTk9ERV9MQUJFTF9fRFVCTElOX0NPUkU7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VVJJIE9mIElkZW50aWZpYWJsZSBUbyBCZSBMYWJlbGVkPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgUE9QVUxBVElPTl9MQUJFTF9fVVJJX09GX0lERU5USUZJQUJMRV9UT19CRV9MQUJFTEVEID0gR3JhcGhQYWNrYWdlLlNUQVRJQ19OT0RFX0xBQkVMX19VUklfT0ZfSURFTlRJRklBQkxFX1RPX0JFX0xBQkVMRUQ7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+Q3VycmVudCBWYWx1ZTwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFBPUFVMQVRJT05fTEFCRUxfX0NVUlJFTlRfVkFMVUUgPSBHcmFwaFBhY2thZ2UuU1RBVElDX05PREVfTEFCRUxfX0NVUlJFTlRfVkFMVUU7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+SWRlbnRpZmlhYmxlPC9iPjwvZW0+JyByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgUE9QVUxBVElPTl9MQUJFTF9fSURFTlRJRklBQkxFID0gR3JhcGhQYWNrYWdlLlNUQVRJQ19OT0RFX0xBQkVMX19JREVOVElGSUFCTEU7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+Tm9kZTwvYj48L2VtPicgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFBPUFVMQVRJT05fTEFCRUxfX05PREUgPSBHcmFwaFBhY2thZ2UuU1RBVElDX05PREVfTEFCRUxfX05PREU7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+UG9wdWxhdGlvbiBJZGVudGlmaWVyPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgUE9QVUxBVElPTl9MQUJFTF9fUE9QVUxBVElPTl9JREVOVElGSUVSID0gR3JhcGhQYWNrYWdlLlNUQVRJQ19OT0RFX0xBQkVMX0ZFQVRVUkVfQ09VTlQgKyAwOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPk5hbWU8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBQT1BVTEFUSU9OX0xBQkVMX19OQU1FID0gR3JhcGhQYWNrYWdlLlNUQVRJQ19OT0RFX0xBQkVMX0ZFQVRVUkVfQ09VTlQgKyAxOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkN1cnJlbnQgUG9wdWxhdGlvbiBWYWx1ZTwvYj48L2VtPicgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFBPUFVMQVRJT05fTEFCRUxfX0NVUlJFTlRfUE9QVUxBVElPTl9WQUxVRSA9IEdyYXBoUGFja2FnZS5TVEFUSUNfTk9ERV9MQUJFTF9GRUFUVVJFX0NPVU5UICsgMjsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5Qb3B1bGF0ZWQgQXJlYTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFBPUFVMQVRJT05fTEFCRUxfX1BPUFVMQVRFRF9BUkVBID0gR3JhcGhQYWNrYWdlLlNUQVRJQ19OT0RFX0xBQkVMX0ZFQVRVUkVfQ09VTlQgKyAzOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlZhbGlkIFllYXI8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBQT1BVTEFUSU9OX0xBQkVMX19WQUxJRF9ZRUFSID0gR3JhcGhQYWNrYWdlLlNUQVRJQ19OT0RFX0xBQkVMX0ZFQVRVUkVfQ09VTlQgKyA0OworCisJLyoqCisJICogVGhlIG51bWJlciBvZiBzdHJ1Y3R1cmFsIGZlYXR1cmVzIG9mIHRoZSAnPGVtPlBvcHVsYXRpb24gTGFiZWw8L2VtPicgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgUE9QVUxBVElPTl9MQUJFTF9GRUFUVVJFX0NPVU5UID0gR3JhcGhQYWNrYWdlLlNUQVRJQ19OT0RFX0xBQkVMX0ZFQVRVUkVfQ09VTlQgKyA1OworCisJLyoqCisJICogVGhlIG1ldGEgb2JqZWN0IGlkIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5pbXBsLlBvcHVsYXRpb25MYWJlbFZhbHVlSW1wbCA8ZW0+UG9wdWxhdGlvbiBMYWJlbCBWYWx1ZTwvZW0+fScgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLmltcGwuUG9wdWxhdGlvbkxhYmVsVmFsdWVJbXBsCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5pbXBsLkxhYmVsc1BhY2thZ2VJbXBsI2dldFBvcHVsYXRpb25MYWJlbFZhbHVlKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJaW50IFBPUFVMQVRJT05fTEFCRUxfVkFMVUUgPSA2OworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkNvdW50PC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgUE9QVUxBVElPTl9MQUJFTF9WQUxVRV9fQ09VTlQgPSBHcmFwaFBhY2thZ2UuTEFCRUxfVkFMVUVfRkVBVFVSRV9DT1VOVCArIDA7CisKKwkvKioKKwkgKiBUaGUgbnVtYmVyIG9mIHN0cnVjdHVyYWwgZmVhdHVyZXMgb2YgdGhlICc8ZW0+UG9wdWxhdGlvbiBMYWJlbCBWYWx1ZTwvZW0+JyBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBQT1BVTEFUSU9OX0xBQkVMX1ZBTFVFX0ZFQVRVUkVfQ09VTlQgPSBHcmFwaFBhY2thZ2UuTEFCRUxfVkFMVUVfRkVBVFVSRV9DT1VOVCArIDE7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VVJJPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgUkVMQVRJVkVfUEhZU0lDQUxfUkVMQVRJT05TSElQX0xBQkVMX19VUkkgPSBQSFlTSUNBTF9SRUxBVElPTlNISVBfTEFCRUxfX1VSSTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5UeXBlIFVSSTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFJFTEFUSVZFX1BIWVNJQ0FMX1JFTEFUSU9OU0hJUF9MQUJFTF9fVFlQRV9VUkkgPSBQSFlTSUNBTF9SRUxBVElPTlNISVBfTEFCRUxfX1RZUEVfVVJJOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkR1YmxpbiBDb3JlPC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgUkVMQVRJVkVfUEhZU0lDQUxfUkVMQVRJT05TSElQX0xBQkVMX19EVUJMSU5fQ09SRSA9IFBIWVNJQ0FMX1JFTEFUSU9OU0hJUF9MQUJFTF9fRFVCTElOX0NPUkU7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VVJJIE9mIElkZW50aWZpYWJsZSBUbyBCZSBMYWJlbGVkPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgUkVMQVRJVkVfUEhZU0lDQUxfUkVMQVRJT05TSElQX0xBQkVMX19VUklfT0ZfSURFTlRJRklBQkxFX1RPX0JFX0xBQkVMRUQgPSBQSFlTSUNBTF9SRUxBVElPTlNISVBfTEFCRUxfX1VSSV9PRl9JREVOVElGSUFCTEVfVE9fQkVfTEFCRUxFRDsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5DdXJyZW50IFZhbHVlPC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgUkVMQVRJVkVfUEhZU0lDQUxfUkVMQVRJT05TSElQX0xBQkVMX19DVVJSRU5UX1ZBTFVFID0gUEhZU0lDQUxfUkVMQVRJT05TSElQX0xBQkVMX19DVVJSRU5UX1ZBTFVFOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPklkZW50aWZpYWJsZTwvYj48L2VtPicgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFJFTEFUSVZFX1BIWVNJQ0FMX1JFTEFUSU9OU0hJUF9MQUJFTF9fSURFTlRJRklBQkxFID0gUEhZU0lDQUxfUkVMQVRJT05TSElQX0xBQkVMX19JREVOVElGSUFCTEU7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RWRnZTwvYj48L2VtPicgY29udGFpbmVyIHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBSRUxBVElWRV9QSFlTSUNBTF9SRUxBVElPTlNISVBfTEFCRUxfX0VER0UgPSBQSFlTSUNBTF9SRUxBVElPTlNISVBfTEFCRUxfX0VER0U7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+Q3VycmVudCBSZWxhdGlvbnNoaXA8L2I+PC9lbT4nIHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBSRUxBVElWRV9QSFlTSUNBTF9SRUxBVElPTlNISVBfTEFCRUxfX0NVUlJFTlRfUkVMQVRJT05TSElQID0gUEhZU0lDQUxfUkVMQVRJT05TSElQX0xBQkVMX0ZFQVRVUkVfQ09VTlQgKyAwOworCisJLyoqCisJICogVGhlIG51bWJlciBvZiBzdHJ1Y3R1cmFsIGZlYXR1cmVzIG9mIHRoZSAnPGVtPlJlbGF0aXZlIFBoeXNpY2FsIFJlbGF0aW9uc2hpcCBMYWJlbDwvZW0+JyBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBSRUxBVElWRV9QSFlTSUNBTF9SRUxBVElPTlNISVBfTEFCRUxfRkVBVFVSRV9DT1VOVCA9IFBIWVNJQ0FMX1JFTEFUSU9OU0hJUF9MQUJFTF9GRUFUVVJFX0NPVU5UICsgMTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5BZGphY2VudDwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFJFTEFUSVZFX1BIWVNJQ0FMX1JFTEFUSU9OU0hJUF9MQUJFTF9WQUxVRV9fQURKQUNFTlQgPSBHcmFwaFBhY2thZ2UuTEFCRUxfVkFMVUVfRkVBVFVSRV9DT1VOVCArIDA7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+UmVsYXRpb25zaGlwPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgUkVMQVRJVkVfUEhZU0lDQUxfUkVMQVRJT05TSElQX0xBQkVMX1ZBTFVFX19SRUxBVElPTlNISVAgPSBHcmFwaFBhY2thZ2UuTEFCRUxfVkFMVUVfRkVBVFVSRV9DT1VOVCArIDE7CisKKwkvKioKKwkgKiBUaGUgbnVtYmVyIG9mIHN0cnVjdHVyYWwgZmVhdHVyZXMgb2YgdGhlICc8ZW0+UmVsYXRpdmUgUGh5c2ljYWwgUmVsYXRpb25zaGlwIExhYmVsIFZhbHVlPC9lbT4nIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFJFTEFUSVZFX1BIWVNJQ0FMX1JFTEFUSU9OU0hJUF9MQUJFTF9WQUxVRV9GRUFUVVJFX0NPVU5UID0gR3JhcGhQYWNrYWdlLkxBQkVMX1ZBTFVFX0ZFQVRVUkVfQ09VTlQgKyAyOworCisJLyoqCisJICogVGhlIG1ldGEgb2JqZWN0IGlkIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5pbXBsLlRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsSW1wbCA8ZW0+VHJhbnNwb3J0IFJlbGF0aW9uc2hpcCBMYWJlbDwvZW0+fScgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLmltcGwuVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxJbXBsCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5pbXBsLkxhYmVsc1BhY2thZ2VJbXBsI2dldFRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJaW50IFRSQU5TUE9SVF9SRUxBVElPTlNISVBfTEFCRUwgPSA5OworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlVSSTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFRSQU5TUE9SVF9SRUxBVElPTlNISVBfTEFCRUxfX1VSSSA9IEdyYXBoUGFja2FnZS5EWU5BTUlDX0VER0VfTEFCRUxfX1VSSTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5UeXBlIFVSSTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFRSQU5TUE9SVF9SRUxBVElPTlNISVBfTEFCRUxfX1RZUEVfVVJJID0gR3JhcGhQYWNrYWdlLkRZTkFNSUNfRURHRV9MQUJFTF9fVFlQRV9VUkk7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RHVibGluIENvcmU8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBUUkFOU1BPUlRfUkVMQVRJT05TSElQX0xBQkVMX19EVUJMSU5fQ09SRSA9IEdyYXBoUGFja2FnZS5EWU5BTUlDX0VER0VfTEFCRUxfX0RVQkxJTl9DT1JFOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlVSSSBPZiBJZGVudGlmaWFibGUgVG8gQmUgTGFiZWxlZDwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFRSQU5TUE9SVF9SRUxBVElPTlNISVBfTEFCRUxfX1VSSV9PRl9JREVOVElGSUFCTEVfVE9fQkVfTEFCRUxFRCA9IEdyYXBoUGFja2FnZS5EWU5BTUlDX0VER0VfTEFCRUxfX1VSSV9PRl9JREVOVElGSUFCTEVfVE9fQkVfTEFCRUxFRDsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5DdXJyZW50IFZhbHVlPC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgVFJBTlNQT1JUX1JFTEFUSU9OU0hJUF9MQUJFTF9fQ1VSUkVOVF9WQUxVRSA9IEdyYXBoUGFja2FnZS5EWU5BTUlDX0VER0VfTEFCRUxfX0NVUlJFTlRfVkFMVUU7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+SWRlbnRpZmlhYmxlPC9iPjwvZW0+JyByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgVFJBTlNQT1JUX1JFTEFUSU9OU0hJUF9MQUJFTF9fSURFTlRJRklBQkxFID0gR3JhcGhQYWNrYWdlLkRZTkFNSUNfRURHRV9MQUJFTF9fSURFTlRJRklBQkxFOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPk5leHQgVmFsdWUgVmFsaWQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBUUkFOU1BPUlRfUkVMQVRJT05TSElQX0xBQkVMX19ORVhUX1ZBTFVFX1ZBTElEID0gR3JhcGhQYWNrYWdlLkRZTkFNSUNfRURHRV9MQUJFTF9fTkVYVF9WQUxVRV9WQUxJRDsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5OZXh0IFZhbHVlPC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgVFJBTlNQT1JUX1JFTEFUSU9OU0hJUF9MQUJFTF9fTkVYVF9WQUxVRSA9IEdyYXBoUGFja2FnZS5EWU5BTUlDX0VER0VfTEFCRUxfX05FWFRfVkFMVUU7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RGVjb3JhdG9yPC9iPjwvZW0+JyByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgVFJBTlNQT1JUX1JFTEFUSU9OU0hJUF9MQUJFTF9fREVDT1JBVE9SID0gR3JhcGhQYWNrYWdlLkRZTkFNSUNfRURHRV9MQUJFTF9fREVDT1JBVE9SOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkVkZ2U8L2I+PC9lbT4nIGNvbnRhaW5lciByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgVFJBTlNQT1JUX1JFTEFUSU9OU0hJUF9MQUJFTF9fRURHRSA9IEdyYXBoUGFja2FnZS5EWU5BTUlDX0VER0VfTEFCRUxfX0VER0U7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VHJhbnNwb3J0IE1vZGU8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBUUkFOU1BPUlRfUkVMQVRJT05TSElQX0xBQkVMX19UUkFOU1BPUlRfTU9ERSA9IEdyYXBoUGFja2FnZS5EWU5BTUlDX0VER0VfTEFCRUxfRkVBVFVSRV9DT1VOVCArIDA7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+UG9wdWxhdGlvbiBJZGVudGlmaWVyPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgVFJBTlNQT1JUX1JFTEFUSU9OU0hJUF9MQUJFTF9fUE9QVUxBVElPTl9JREVOVElGSUVSID0gR3JhcGhQYWNrYWdlLkRZTkFNSUNfRURHRV9MQUJFTF9GRUFUVVJFX0NPVU5UICsgMTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5UcmFuc3BvcnQgSWRlbnRpZmllcjwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFRSQU5TUE9SVF9SRUxBVElPTlNISVBfTEFCRUxfX1RSQU5TUE9SVF9JREVOVElGSUVSID0gR3JhcGhQYWNrYWdlLkRZTkFNSUNfRURHRV9MQUJFTF9GRUFUVVJFX0NPVU5UICsgMjsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5DdXJyZW50IFRyYW5zcG9ydCBSZWxhdGlvbnNoaXAgTGFiZWwgVmFsdWU8L2I+PC9lbT4nIHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBUUkFOU1BPUlRfUkVMQVRJT05TSElQX0xBQkVMX19DVVJSRU5UX1RSQU5TUE9SVF9SRUxBVElPTlNISVBfTEFCRUxfVkFMVUUgPSBHcmFwaFBhY2thZ2UuRFlOQU1JQ19FREdFX0xBQkVMX0ZFQVRVUkVfQ09VTlQgKyAzOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlJhdGUgVGltZSBQZXJpb2Q8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBUUkFOU1BPUlRfUkVMQVRJT05TSElQX0xBQkVMX19SQVRFX1RJTUVfUEVSSU9EID0gR3JhcGhQYWNrYWdlLkRZTkFNSUNfRURHRV9MQUJFTF9GRUFUVVJFX0NPVU5UICsgNDsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5EZXBhcnR1cmUgQ2FwYWNpdHk8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBUUkFOU1BPUlRfUkVMQVRJT05TSElQX0xBQkVMX19ERVBBUlRVUkVfQ0FQQUNJVFkgPSBHcmFwaFBhY2thZ2UuRFlOQU1JQ19FREdFX0xBQkVMX0ZFQVRVUkVfQ09VTlQgKyA1OworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPk1heGltdW0gRGVwYXJ0dXJlIENhcGFjaXR5PC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgVFJBTlNQT1JUX1JFTEFUSU9OU0hJUF9MQUJFTF9fTUFYSU1VTV9ERVBBUlRVUkVfQ0FQQUNJVFkgPSBHcmFwaFBhY2thZ2UuRFlOQU1JQ19FREdFX0xBQkVMX0ZFQVRVUkVfQ09VTlQgKyA2OworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkNhcGFjaXR5PC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgVFJBTlNQT1JUX1JFTEFUSU9OU0hJUF9MQUJFTF9fQ0FQQUNJVFkgPSBHcmFwaFBhY2thZ2UuRFlOQU1JQ19FREdFX0xBQkVMX0ZFQVRVUkVfQ09VTlQgKyA3OworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPk1heGltdW0gQ2FwYWNpdHk8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBUUkFOU1BPUlRfUkVMQVRJT05TSElQX0xBQkVMX19NQVhJTVVNX0NBUEFDSVRZID0gR3JhcGhQYWNrYWdlLkRZTkFNSUNfRURHRV9MQUJFTF9GRUFUVVJFX0NPVU5UICsgODsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5UcmFuc2l0IFRpbWU8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBUUkFOU1BPUlRfUkVMQVRJT05TSElQX0xBQkVMX19UUkFOU0lUX1RJTUUgPSBHcmFwaFBhY2thZ2UuRFlOQU1JQ19FREdFX0xBQkVMX0ZFQVRVUkVfQ09VTlQgKyA5OworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlN0YXJ0IFVwIERlbGF5PC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgVFJBTlNQT1JUX1JFTEFUSU9OU0hJUF9MQUJFTF9fU1RBUlRfVVBfREVMQVkgPSBHcmFwaFBhY2thZ2UuRFlOQU1JQ19FREdFX0xBQkVMX0ZFQVRVUkVfQ09VTlQgKyAxMDsKKworCS8qKgorCSAqIFRoZSBudW1iZXIgb2Ygc3RydWN0dXJhbCBmZWF0dXJlcyBvZiB0aGUgJzxlbT5UcmFuc3BvcnQgUmVsYXRpb25zaGlwIExhYmVsPC9lbT4nIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFRSQU5TUE9SVF9SRUxBVElPTlNISVBfTEFCRUxfRkVBVFVSRV9DT1VOVCA9IEdyYXBoUGFja2FnZS5EWU5BTUlDX0VER0VfTEFCRUxfRkVBVFVSRV9DT1VOVCArIDExOworCisJLyoqCisJICogVGhlIG1ldGEgb2JqZWN0IGlkIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5pbXBsLlRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsVmFsdWVJbXBsIDxlbT5UcmFuc3BvcnQgUmVsYXRpb25zaGlwIExhYmVsIFZhbHVlPC9lbT59JyBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuaW1wbC5UcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbFZhbHVlSW1wbAorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuaW1wbC5MYWJlbHNQYWNrYWdlSW1wbCNnZXRUcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbFZhbHVlKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJaW50IFRSQU5TUE9SVF9SRUxBVElPTlNISVBfTEFCRUxfVkFMVUUgPSAxMDsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5BdmFpbGFibGUgRGVwYXJ0dXJlIENhcGFjaXR5IFByb3BvcnRpb248L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBUUkFOU1BPUlRfUkVMQVRJT05TSElQX0xBQkVMX1ZBTFVFX19BVkFJTEFCTEVfREVQQVJUVVJFX0NBUEFDSVRZX1BST1BPUlRJT04gPSBHcmFwaFBhY2thZ2UuTEFCRUxfVkFMVUVfRkVBVFVSRV9DT1VOVCArIDA7CisKKwkvKioKKwkgKiBUaGUgbnVtYmVyIG9mIHN0cnVjdHVyYWwgZmVhdHVyZXMgb2YgdGhlICc8ZW0+VHJhbnNwb3J0IFJlbGF0aW9uc2hpcCBMYWJlbCBWYWx1ZTwvZW0+JyBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBUUkFOU1BPUlRfUkVMQVRJT05TSElQX0xBQkVMX1ZBTFVFX0ZFQVRVUkVfQ09VTlQgPSBHcmFwaFBhY2thZ2UuTEFCRUxfVkFMVUVfRkVBVFVSRV9DT1VOVCArIDE7CisKKwkvKioKKwkgKiBUaGUgbWV0YSBvYmplY3QgaWQgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLmltcGwuUm9hZFRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsSW1wbCA8ZW0+Um9hZCBUcmFuc3BvcnQgUmVsYXRpb25zaGlwIExhYmVsPC9lbT59JyBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuaW1wbC5Sb2FkVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxJbXBsCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5pbXBsLkxhYmVsc1BhY2thZ2VJbXBsI2dldFJvYWRUcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbCgpCisJICogQGdlbmVyYXRlZAorCSAqLworCWludCBST0FEX1RSQU5TUE9SVF9SRUxBVElPTlNISVBfTEFCRUwgPSAxMjsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5VUkk8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBST0FEX1RSQU5TUE9SVF9SRUxBVElPTlNISVBfTEFCRUxfX1VSSSA9IFBIWVNJQ0FMX1JFTEFUSU9OU0hJUF9MQUJFTF9fVVJJOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlR5cGUgVVJJPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgUk9BRF9UUkFOU1BPUlRfUkVMQVRJT05TSElQX0xBQkVMX19UWVBFX1VSSSA9IFBIWVNJQ0FMX1JFTEFUSU9OU0hJUF9MQUJFTF9fVFlQRV9VUkk7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RHVibGluIENvcmU8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBST0FEX1RSQU5TUE9SVF9SRUxBVElPTlNISVBfTEFCRUxfX0RVQkxJTl9DT1JFID0gUEhZU0lDQUxfUkVMQVRJT05TSElQX0xBQkVMX19EVUJMSU5fQ09SRTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5VUkkgT2YgSWRlbnRpZmlhYmxlIFRvIEJlIExhYmVsZWQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBST0FEX1RSQU5TUE9SVF9SRUxBVElPTlNISVBfTEFCRUxfX1VSSV9PRl9JREVOVElGSUFCTEVfVE9fQkVfTEFCRUxFRCA9IFBIWVNJQ0FMX1JFTEFUSU9OU0hJUF9MQUJFTF9fVVJJX09GX0lERU5USUZJQUJMRV9UT19CRV9MQUJFTEVEOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkN1cnJlbnQgVmFsdWU8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBST0FEX1RSQU5TUE9SVF9SRUxBVElPTlNISVBfTEFCRUxfX0NVUlJFTlRfVkFMVUUgPSBQSFlTSUNBTF9SRUxBVElPTlNISVBfTEFCRUxfX0NVUlJFTlRfVkFMVUU7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+SWRlbnRpZmlhYmxlPC9iPjwvZW0+JyByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgUk9BRF9UUkFOU1BPUlRfUkVMQVRJT05TSElQX0xBQkVMX19JREVOVElGSUFCTEUgPSBQSFlTSUNBTF9SRUxBVElPTlNISVBfTEFCRUxfX0lERU5USUZJQUJMRTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5FZGdlPC9iPjwvZW0+JyBjb250YWluZXIgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFJPQURfVFJBTlNQT1JUX1JFTEFUSU9OU0hJUF9MQUJFTF9fRURHRSA9IFBIWVNJQ0FMX1JFTEFUSU9OU0hJUF9MQUJFTF9fRURHRTsKKworCS8qKgorCSAqIFRoZSBudW1iZXIgb2Ygc3RydWN0dXJhbCBmZWF0dXJlcyBvZiB0aGUgJzxlbT5Sb2FkIFRyYW5zcG9ydCBSZWxhdGlvbnNoaXAgTGFiZWw8L2VtPicgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgUk9BRF9UUkFOU1BPUlRfUkVMQVRJT05TSElQX0xBQkVMX0ZFQVRVUkVfQ09VTlQgPSBQSFlTSUNBTF9SRUxBVElPTlNISVBfTEFCRUxfRkVBVFVSRV9DT1VOVCArIDA7CisKKwkvKioKKwkgKiBUaGUgbWV0YSBvYmplY3QgaWQgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLmltcGwuUm9hZFRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsVmFsdWVJbXBsIDxlbT5Sb2FkIFRyYW5zcG9ydCBSZWxhdGlvbnNoaXAgTGFiZWwgVmFsdWU8L2VtPn0nIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5pbXBsLlJvYWRUcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbFZhbHVlSW1wbAorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuaW1wbC5MYWJlbHNQYWNrYWdlSW1wbCNnZXRSb2FkVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxWYWx1ZSgpCisJICogQGdlbmVyYXRlZAorCSAqLworCWludCBST0FEX1RSQU5TUE9SVF9SRUxBVElPTlNISVBfTEFCRUxfVkFMVUUgPSAxMzsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5Sb2FkIE5hbWU8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBST0FEX1RSQU5TUE9SVF9SRUxBVElPTlNISVBfTEFCRUxfVkFMVUVfX1JPQURfTkFNRSA9IFBIWVNJQ0FMX1JFTEFUSU9OU0hJUF9MQUJFTF9WQUxVRV9GRUFUVVJFX0NPVU5UICsgMDsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5Sb2FkIENsYXNzPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgUk9BRF9UUkFOU1BPUlRfUkVMQVRJT05TSElQX0xBQkVMX1ZBTFVFX19ST0FEX0NMQVNTID0gUEhZU0lDQUxfUkVMQVRJT05TSElQX0xBQkVMX1ZBTFVFX0ZFQVRVUkVfQ09VTlQgKyAxOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPk51bWJlciBDcm9zc2luZ3M8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBST0FEX1RSQU5TUE9SVF9SRUxBVElPTlNISVBfTEFCRUxfVkFMVUVfX05VTUJFUl9DUk9TU0lOR1MgPSBQSFlTSUNBTF9SRUxBVElPTlNISVBfTEFCRUxfVkFMVUVfRkVBVFVSRV9DT1VOVCArIDI7CisKKwkvKioKKwkgKiBUaGUgbnVtYmVyIG9mIHN0cnVjdHVyYWwgZmVhdHVyZXMgb2YgdGhlICc8ZW0+Um9hZCBUcmFuc3BvcnQgUmVsYXRpb25zaGlwIExhYmVsIFZhbHVlPC9lbT4nIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFJPQURfVFJBTlNQT1JUX1JFTEFUSU9OU0hJUF9MQUJFTF9WQUxVRV9GRUFUVVJFX0NPVU5UID0gUEhZU0lDQUxfUkVMQVRJT05TSElQX0xBQkVMX1ZBTFVFX0ZFQVRVUkVfQ09VTlQgKyAzOworCisJLyoqCisJICogVGhlIG1ldGEgb2JqZWN0IGlkIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5pbXBsLkVhcnRoU2NpZW5jZUxhYmVsSW1wbCA8ZW0+RWFydGggU2NpZW5jZSBMYWJlbDwvZW0+fScgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLmltcGwuRWFydGhTY2llbmNlTGFiZWxJbXBsCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5pbXBsLkxhYmVsc1BhY2thZ2VJbXBsI2dldEVhcnRoU2NpZW5jZUxhYmVsKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJaW50IEVBUlRIX1NDSUVOQ0VfTEFCRUwgPSAxNDsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5VUkk8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBFQVJUSF9TQ0lFTkNFX0xBQkVMX19VUkkgPSBHcmFwaFBhY2thZ2UuU1RBVElDX05PREVfTEFCRUxfX1VSSTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5UeXBlIFVSSTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IEVBUlRIX1NDSUVOQ0VfTEFCRUxfX1RZUEVfVVJJID0gR3JhcGhQYWNrYWdlLlNUQVRJQ19OT0RFX0xBQkVMX19UWVBFX1VSSTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5EdWJsaW4gQ29yZTwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IEVBUlRIX1NDSUVOQ0VfTEFCRUxfX0RVQkxJTl9DT1JFID0gR3JhcGhQYWNrYWdlLlNUQVRJQ19OT0RFX0xBQkVMX19EVUJMSU5fQ09SRTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5VUkkgT2YgSWRlbnRpZmlhYmxlIFRvIEJlIExhYmVsZWQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBFQVJUSF9TQ0lFTkNFX0xBQkVMX19VUklfT0ZfSURFTlRJRklBQkxFX1RPX0JFX0xBQkVMRUQgPSBHcmFwaFBhY2thZ2UuU1RBVElDX05PREVfTEFCRUxfX1VSSV9PRl9JREVOVElGSUFCTEVfVE9fQkVfTEFCRUxFRDsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5DdXJyZW50IFZhbHVlPC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgRUFSVEhfU0NJRU5DRV9MQUJFTF9fQ1VSUkVOVF9WQUxVRSA9IEdyYXBoUGFja2FnZS5TVEFUSUNfTk9ERV9MQUJFTF9fQ1VSUkVOVF9WQUxVRTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5JZGVudGlmaWFibGU8L2I+PC9lbT4nIHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBFQVJUSF9TQ0lFTkNFX0xBQkVMX19JREVOVElGSUFCTEUgPSBHcmFwaFBhY2thZ2UuU1RBVElDX05PREVfTEFCRUxfX0lERU5USUZJQUJMRTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5Ob2RlPC9iPjwvZW0+JyByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgRUFSVEhfU0NJRU5DRV9MQUJFTF9fTk9ERSA9IEdyYXBoUGFja2FnZS5TVEFUSUNfTk9ERV9MQUJFTF9fTk9ERTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5DdXJyZW50IEVhcnRoIFNjaWVuY2UgVmFsdWU8L2I+PC9lbT4nIHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBFQVJUSF9TQ0lFTkNFX0xBQkVMX19DVVJSRU5UX0VBUlRIX1NDSUVOQ0VfVkFMVUUgPSBHcmFwaFBhY2thZ2UuU1RBVElDX05PREVfTEFCRUxfRkVBVFVSRV9DT1VOVCArIDA7CisKKwkvKioKKwkgKiBUaGUgbnVtYmVyIG9mIHN0cnVjdHVyYWwgZmVhdHVyZXMgb2YgdGhlICc8ZW0+RWFydGggU2NpZW5jZSBMYWJlbDwvZW0+JyBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBFQVJUSF9TQ0lFTkNFX0xBQkVMX0ZFQVRVUkVfQ09VTlQgPSBHcmFwaFBhY2thZ2UuU1RBVElDX05PREVfTEFCRUxfRkVBVFVSRV9DT1VOVCArIDE7CisKKwkvKioKKwkgKiBUaGUgbWV0YSBvYmplY3QgaWQgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLmltcGwuRWFydGhTY2llbmNlTGFiZWxWYWx1ZUltcGwgPGVtPkVhcnRoIFNjaWVuY2UgTGFiZWwgVmFsdWU8L2VtPn0nIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5pbXBsLkVhcnRoU2NpZW5jZUxhYmVsVmFsdWVJbXBsCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5pbXBsLkxhYmVsc1BhY2thZ2VJbXBsI2dldEVhcnRoU2NpZW5jZUxhYmVsVmFsdWUoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlpbnQgRUFSVEhfU0NJRU5DRV9MQUJFTF9WQUxVRSA9IDE1OworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkRhdGEgVHlwZTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IEVBUlRIX1NDSUVOQ0VfTEFCRUxfVkFMVUVfX0RBVEFfVFlQRSA9IEdyYXBoUGFja2FnZS5MQUJFTF9WQUxVRV9GRUFUVVJFX0NPVU5UICsgMDsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5Vbml0czwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IEVBUlRIX1NDSUVOQ0VfTEFCRUxfVkFMVUVfX1VOSVRTID0gR3JhcGhQYWNrYWdlLkxBQkVMX1ZBTFVFX0ZFQVRVUkVfQ09VTlQgKyAxOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPk1lYW48L2I+PC9lbT4nIGF0dHJpYnV0ZSBsaXN0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IEVBUlRIX1NDSUVOQ0VfTEFCRUxfVkFMVUVfX01FQU4gPSBHcmFwaFBhY2thZ2UuTEFCRUxfVkFMVUVfRkVBVFVSRV9DT1VOVCArIDI7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+U2Q8L2I+PC9lbT4nIGF0dHJpYnV0ZSBsaXN0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IEVBUlRIX1NDSUVOQ0VfTEFCRUxfVkFMVUVfX1NEID0gR3JhcGhQYWNrYWdlLkxBQkVMX1ZBTFVFX0ZFQVRVUkVfQ09VTlQgKyAzOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPk1pbjwvYj48L2VtPicgYXR0cmlidXRlIGxpc3QuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgRUFSVEhfU0NJRU5DRV9MQUJFTF9WQUxVRV9fTUlOID0gR3JhcGhQYWNrYWdlLkxBQkVMX1ZBTFVFX0ZFQVRVUkVfQ09VTlQgKyA0OworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPk1heDwvYj48L2VtPicgYXR0cmlidXRlIGxpc3QuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgRUFSVEhfU0NJRU5DRV9MQUJFTF9WQUxVRV9fTUFYID0gR3JhcGhQYWNrYWdlLkxBQkVMX1ZBTFVFX0ZFQVRVUkVfQ09VTlQgKyA1OworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPk1lZGlhbjwvYj48L2VtPicgYXR0cmlidXRlIGxpc3QuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgRUFSVEhfU0NJRU5DRV9MQUJFTF9WQUxVRV9fTUVESUFOID0gR3JhcGhQYWNrYWdlLkxBQkVMX1ZBTFVFX0ZFQVRVUkVfQ09VTlQgKyA2OworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlNrZXduZXNzPC9iPjwvZW0+JyBhdHRyaWJ1dGUgbGlzdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBFQVJUSF9TQ0lFTkNFX0xBQkVMX1ZBTFVFX19TS0VXTkVTUyA9IEdyYXBoUGFja2FnZS5MQUJFTF9WQUxVRV9GRUFUVVJFX0NPVU5UICsgNzsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5LdXJ0b3NpczwvYj48L2VtPicgYXR0cmlidXRlIGxpc3QuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgRUFSVEhfU0NJRU5DRV9MQUJFTF9WQUxVRV9fS1VSVE9TSVMgPSBHcmFwaFBhY2thZ2UuTEFCRUxfVkFMVUVfRkVBVFVSRV9DT1VOVCArIDg7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+Um1zPC9iPjwvZW0+JyBhdHRyaWJ1dGUgbGlzdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBFQVJUSF9TQ0lFTkNFX0xBQkVMX1ZBTFVFX19STVMgPSBHcmFwaFBhY2thZ2UuTEFCRUxfVkFMVUVfRkVBVFVSRV9DT1VOVCArIDk7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+U2FtcGxlc2l6ZTwvYj48L2VtPicgYXR0cmlidXRlIGxpc3QuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgRUFSVEhfU0NJRU5DRV9MQUJFTF9WQUxVRV9fU0FNUExFU0laRSA9IEdyYXBoUGFja2FnZS5MQUJFTF9WQUxVRV9GRUFUVVJFX0NPVU5UICsgMTA7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+UmFuZ2U8L2I+PC9lbT4nIGF0dHJpYnV0ZSBsaXN0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IEVBUlRIX1NDSUVOQ0VfTEFCRUxfVkFMVUVfX1JBTkdFID0gR3JhcGhQYWNrYWdlLkxBQkVMX1ZBTFVFX0ZFQVRVUkVfQ09VTlQgKyAxMTsKKworCS8qKgorCSAqIFRoZSBudW1iZXIgb2Ygc3RydWN0dXJhbCBmZWF0dXJlcyBvZiB0aGUgJzxlbT5FYXJ0aCBTY2llbmNlIExhYmVsIFZhbHVlPC9lbT4nIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IEVBUlRIX1NDSUVOQ0VfTEFCRUxfVkFMVUVfRkVBVFVSRV9DT1VOVCA9IEdyYXBoUGFja2FnZS5MQUJFTF9WQUxVRV9GRUFUVVJFX0NPVU5UICsgMTI7CisKKwkvKioKKwkgKiBUaGUgbWV0YSBvYmplY3QgaWQgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLlJlbGF0aXZlUGh5c2ljYWxSZWxhdGlvbnNoaXAgPGVtPlJlbGF0aXZlIFBoeXNpY2FsIFJlbGF0aW9uc2hpcDwvZW0+fScgZW51bS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuUmVsYXRpdmVQaHlzaWNhbFJlbGF0aW9uc2hpcAorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuaW1wbC5MYWJlbHNQYWNrYWdlSW1wbCNnZXRSZWxhdGl2ZVBoeXNpY2FsUmVsYXRpb25zaGlwKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJaW50IFJFTEFUSVZFX1BIWVNJQ0FMX1JFTEFUSU9OU0hJUCA9IDE2OworCisJLyoqCisJICogVGhlIG1ldGEgb2JqZWN0IGlkIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5UcmFuc3BvcnRNb2RlIDxlbT5UcmFuc3BvcnQgTW9kZTwvZW0+fScgZW51bS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuVHJhbnNwb3J0TW9kZQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuaW1wbC5MYWJlbHNQYWNrYWdlSW1wbCNnZXRUcmFuc3BvcnRNb2RlKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJaW50IFRSQU5TUE9SVF9NT0RFID0gMTc7CisKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLkFyZWFMYWJlbCA8ZW0+QXJlYSBMYWJlbDwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJzxlbT5BcmVhIExhYmVsPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuQXJlYUxhYmVsCisJICogQGdlbmVyYXRlZAorCSAqLworCUVDbGFzcyBnZXRBcmVhTGFiZWwoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgcmVmZXJlbmNlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuQXJlYUxhYmVsI2dldEN1cnJlbnRBcmVhVmFsdWUgPGVtPkN1cnJlbnQgQXJlYSBWYWx1ZTwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIHJlZmVyZW5jZSAnPGVtPkN1cnJlbnQgQXJlYSBWYWx1ZTwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLkFyZWFMYWJlbCNnZXRDdXJyZW50QXJlYVZhbHVlKCkKKwkgKiBAc2VlICNnZXRBcmVhTGFiZWwoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFUmVmZXJlbmNlIGdldEFyZWFMYWJlbF9DdXJyZW50QXJlYVZhbHVlKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5BcmVhTGFiZWxWYWx1ZSA8ZW0+QXJlYSBMYWJlbCBWYWx1ZTwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJzxlbT5BcmVhIExhYmVsIFZhbHVlPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuQXJlYUxhYmVsVmFsdWUKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUNsYXNzIGdldEFyZWFMYWJlbFZhbHVlKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLkFyZWFMYWJlbFZhbHVlI2dldEFyZWEgPGVtPkFyZWE8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxlbT5BcmVhPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuQXJlYUxhYmVsVmFsdWUjZ2V0QXJlYSgpCisJICogQHNlZSAjZ2V0QXJlYUxhYmVsVmFsdWUoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQXR0cmlidXRlIGdldEFyZWFMYWJlbFZhbHVlX0FyZWEoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuQXJlYUxhYmVsVmFsdWUjZ2V0QXZlcmFnZUV4dGVudCA8ZW0+QXZlcmFnZSBFeHRlbnQ8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxlbT5BdmVyYWdlIEV4dGVudDwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLkFyZWFMYWJlbFZhbHVlI2dldEF2ZXJhZ2VFeHRlbnQoKQorCSAqIEBzZWUgI2dldEFyZWFMYWJlbFZhbHVlKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUF0dHJpYnV0ZSBnZXRBcmVhTGFiZWxWYWx1ZV9BdmVyYWdlRXh0ZW50KCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5Db21tb25Cb3JkZXJSZWxhdGlvbnNoaXBMYWJlbCA8ZW0+Q29tbW9uIEJvcmRlciBSZWxhdGlvbnNoaXAgTGFiZWw8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICc8ZW0+Q29tbW9uIEJvcmRlciBSZWxhdGlvbnNoaXAgTGFiZWw8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5Db21tb25Cb3JkZXJSZWxhdGlvbnNoaXBMYWJlbAorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQ2xhc3MgZ2V0Q29tbW9uQm9yZGVyUmVsYXRpb25zaGlwTGFiZWwoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLkNvbW1vbkJvcmRlclJlbGF0aW9uc2hpcExhYmVsVmFsdWUgPGVtPkNvbW1vbiBCb3JkZXIgUmVsYXRpb25zaGlwIExhYmVsIFZhbHVlPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAnPGVtPkNvbW1vbiBCb3JkZXIgUmVsYXRpb25zaGlwIExhYmVsIFZhbHVlPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuQ29tbW9uQm9yZGVyUmVsYXRpb25zaGlwTGFiZWxWYWx1ZQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQ2xhc3MgZ2V0Q29tbW9uQm9yZGVyUmVsYXRpb25zaGlwTGFiZWxWYWx1ZSgpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5Db21tb25Cb3JkZXJSZWxhdGlvbnNoaXBMYWJlbFZhbHVlI2dldEJvcmRlckxlbmd0aCA8ZW0+Qm9yZGVyIExlbmd0aDwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPGVtPkJvcmRlciBMZW5ndGg8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5Db21tb25Cb3JkZXJSZWxhdGlvbnNoaXBMYWJlbFZhbHVlI2dldEJvcmRlckxlbmd0aCgpCisJICogQHNlZSAjZ2V0Q29tbW9uQm9yZGVyUmVsYXRpb25zaGlwTGFiZWxWYWx1ZSgpCisJICogQGdlbmVyYXRlZAorCSAqLworCUVBdHRyaWJ1dGUgZ2V0Q29tbW9uQm9yZGVyUmVsYXRpb25zaGlwTGFiZWxWYWx1ZV9Cb3JkZXJMZW5ndGgoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLlBoeXNpY2FsUmVsYXRpb25zaGlwTGFiZWwgPGVtPlBoeXNpY2FsIFJlbGF0aW9uc2hpcCBMYWJlbDwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJzxlbT5QaHlzaWNhbCBSZWxhdGlvbnNoaXAgTGFiZWw8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5QaHlzaWNhbFJlbGF0aW9uc2hpcExhYmVsCisJICogQGdlbmVyYXRlZAorCSAqLworCUVDbGFzcyBnZXRQaHlzaWNhbFJlbGF0aW9uc2hpcExhYmVsKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5Qb3B1bGF0aW9uTGFiZWwgPGVtPlBvcHVsYXRpb24gTGFiZWw8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICc8ZW0+UG9wdWxhdGlvbiBMYWJlbDwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLlBvcHVsYXRpb25MYWJlbAorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQ2xhc3MgZ2V0UG9wdWxhdGlvbkxhYmVsKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLlBvcHVsYXRpb25MYWJlbCNnZXRQb3B1bGF0aW9uSWRlbnRpZmllciA8ZW0+UG9wdWxhdGlvbiBJZGVudGlmaWVyPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+UG9wdWxhdGlvbiBJZGVudGlmaWVyPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuUG9wdWxhdGlvbkxhYmVsI2dldFBvcHVsYXRpb25JZGVudGlmaWVyKCkKKwkgKiBAc2VlICNnZXRQb3B1bGF0aW9uTGFiZWwoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQXR0cmlidXRlIGdldFBvcHVsYXRpb25MYWJlbF9Qb3B1bGF0aW9uSWRlbnRpZmllcigpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5Qb3B1bGF0aW9uTGFiZWwjZ2V0TmFtZSA8ZW0+TmFtZTwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPGVtPk5hbWU8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5Qb3B1bGF0aW9uTGFiZWwjZ2V0TmFtZSgpCisJICogQHNlZSAjZ2V0UG9wdWxhdGlvbkxhYmVsKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUF0dHJpYnV0ZSBnZXRQb3B1bGF0aW9uTGFiZWxfTmFtZSgpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSByZWZlcmVuY2UgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5Qb3B1bGF0aW9uTGFiZWwjZ2V0Q3VycmVudFBvcHVsYXRpb25WYWx1ZSA8ZW0+Q3VycmVudCBQb3B1bGF0aW9uIFZhbHVlPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgcmVmZXJlbmNlICc8ZW0+Q3VycmVudCBQb3B1bGF0aW9uIFZhbHVlPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuUG9wdWxhdGlvbkxhYmVsI2dldEN1cnJlbnRQb3B1bGF0aW9uVmFsdWUoKQorCSAqIEBzZWUgI2dldFBvcHVsYXRpb25MYWJlbCgpCisJICogQGdlbmVyYXRlZAorCSAqLworCUVSZWZlcmVuY2UgZ2V0UG9wdWxhdGlvbkxhYmVsX0N1cnJlbnRQb3B1bGF0aW9uVmFsdWUoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuUG9wdWxhdGlvbkxhYmVsI2dldFBvcHVsYXRlZEFyZWEgPGVtPlBvcHVsYXRlZCBBcmVhPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+UG9wdWxhdGVkIEFyZWE8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5Qb3B1bGF0aW9uTGFiZWwjZ2V0UG9wdWxhdGVkQXJlYSgpCisJICogQHNlZSAjZ2V0UG9wdWxhdGlvbkxhYmVsKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUF0dHJpYnV0ZSBnZXRQb3B1bGF0aW9uTGFiZWxfUG9wdWxhdGVkQXJlYSgpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5Qb3B1bGF0aW9uTGFiZWwjZ2V0VmFsaWRZZWFyIDxlbT5WYWxpZCBZZWFyPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+VmFsaWQgWWVhcjwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLlBvcHVsYXRpb25MYWJlbCNnZXRWYWxpZFllYXIoKQorCSAqIEBzZWUgI2dldFBvcHVsYXRpb25MYWJlbCgpCisJICogQGdlbmVyYXRlZAorCSAqLworCUVBdHRyaWJ1dGUgZ2V0UG9wdWxhdGlvbkxhYmVsX1ZhbGlkWWVhcigpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuUG9wdWxhdGlvbkxhYmVsVmFsdWUgPGVtPlBvcHVsYXRpb24gTGFiZWwgVmFsdWU8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICc8ZW0+UG9wdWxhdGlvbiBMYWJlbCBWYWx1ZTwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLlBvcHVsYXRpb25MYWJlbFZhbHVlCisJICogQGdlbmVyYXRlZAorCSAqLworCUVDbGFzcyBnZXRQb3B1bGF0aW9uTGFiZWxWYWx1ZSgpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5Qb3B1bGF0aW9uTGFiZWxWYWx1ZSNnZXRDb3VudCA8ZW0+Q291bnQ8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxlbT5Db3VudDwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLlBvcHVsYXRpb25MYWJlbFZhbHVlI2dldENvdW50KCkKKwkgKiBAc2VlICNnZXRQb3B1bGF0aW9uTGFiZWxWYWx1ZSgpCisJICogQGdlbmVyYXRlZAorCSAqLworCUVBdHRyaWJ1dGUgZ2V0UG9wdWxhdGlvbkxhYmVsVmFsdWVfQ291bnQoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLlJlbGF0aXZlUGh5c2ljYWxSZWxhdGlvbnNoaXBMYWJlbCA8ZW0+UmVsYXRpdmUgUGh5c2ljYWwgUmVsYXRpb25zaGlwIExhYmVsPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAnPGVtPlJlbGF0aXZlIFBoeXNpY2FsIFJlbGF0aW9uc2hpcCBMYWJlbDwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLlJlbGF0aXZlUGh5c2ljYWxSZWxhdGlvbnNoaXBMYWJlbAorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQ2xhc3MgZ2V0UmVsYXRpdmVQaHlzaWNhbFJlbGF0aW9uc2hpcExhYmVsKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIHJlZmVyZW5jZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLlJlbGF0aXZlUGh5c2ljYWxSZWxhdGlvbnNoaXBMYWJlbCNnZXRDdXJyZW50UmVsYXRpb25zaGlwIDxlbT5DdXJyZW50IFJlbGF0aW9uc2hpcDwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIHJlZmVyZW5jZSAnPGVtPkN1cnJlbnQgUmVsYXRpb25zaGlwPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuUmVsYXRpdmVQaHlzaWNhbFJlbGF0aW9uc2hpcExhYmVsI2dldEN1cnJlbnRSZWxhdGlvbnNoaXAoKQorCSAqIEBzZWUgI2dldFJlbGF0aXZlUGh5c2ljYWxSZWxhdGlvbnNoaXBMYWJlbCgpCisJICogQGdlbmVyYXRlZAorCSAqLworCUVSZWZlcmVuY2UgZ2V0UmVsYXRpdmVQaHlzaWNhbFJlbGF0aW9uc2hpcExhYmVsX0N1cnJlbnRSZWxhdGlvbnNoaXAoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLlJlbGF0aXZlUGh5c2ljYWxSZWxhdGlvbnNoaXBMYWJlbFZhbHVlIDxlbT5SZWxhdGl2ZSBQaHlzaWNhbCBSZWxhdGlvbnNoaXAgTGFiZWwgVmFsdWU8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICc8ZW0+UmVsYXRpdmUgUGh5c2ljYWwgUmVsYXRpb25zaGlwIExhYmVsIFZhbHVlPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuUmVsYXRpdmVQaHlzaWNhbFJlbGF0aW9uc2hpcExhYmVsVmFsdWUKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUNsYXNzIGdldFJlbGF0aXZlUGh5c2ljYWxSZWxhdGlvbnNoaXBMYWJlbFZhbHVlKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLlJlbGF0aXZlUGh5c2ljYWxSZWxhdGlvbnNoaXBMYWJlbFZhbHVlI2lzQWRqYWNlbnQgPGVtPkFkamFjZW50PC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+QWRqYWNlbnQ8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5SZWxhdGl2ZVBoeXNpY2FsUmVsYXRpb25zaGlwTGFiZWxWYWx1ZSNpc0FkamFjZW50KCkKKwkgKiBAc2VlICNnZXRSZWxhdGl2ZVBoeXNpY2FsUmVsYXRpb25zaGlwTGFiZWxWYWx1ZSgpCisJICogQGdlbmVyYXRlZAorCSAqLworCUVBdHRyaWJ1dGUgZ2V0UmVsYXRpdmVQaHlzaWNhbFJlbGF0aW9uc2hpcExhYmVsVmFsdWVfQWRqYWNlbnQoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuUmVsYXRpdmVQaHlzaWNhbFJlbGF0aW9uc2hpcExhYmVsVmFsdWUjZ2V0UmVsYXRpb25zaGlwIDxlbT5SZWxhdGlvbnNoaXA8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxlbT5SZWxhdGlvbnNoaXA8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5SZWxhdGl2ZVBoeXNpY2FsUmVsYXRpb25zaGlwTGFiZWxWYWx1ZSNnZXRSZWxhdGlvbnNoaXAoKQorCSAqIEBzZWUgI2dldFJlbGF0aXZlUGh5c2ljYWxSZWxhdGlvbnNoaXBMYWJlbFZhbHVlKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUF0dHJpYnV0ZSBnZXRSZWxhdGl2ZVBoeXNpY2FsUmVsYXRpb25zaGlwTGFiZWxWYWx1ZV9SZWxhdGlvbnNoaXAoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLlRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsIDxlbT5UcmFuc3BvcnQgUmVsYXRpb25zaGlwIExhYmVsPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAnPGVtPlRyYW5zcG9ydCBSZWxhdGlvbnNoaXAgTGFiZWw8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5UcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbAorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQ2xhc3MgZ2V0VHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWwoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWwjZ2V0VHJhbnNwb3J0TW9kZSA8ZW0+VHJhbnNwb3J0IE1vZGU8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxlbT5UcmFuc3BvcnQgTW9kZTwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLlRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsI2dldFRyYW5zcG9ydE1vZGUoKQorCSAqIEBzZWUgI2dldFRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUF0dHJpYnV0ZSBnZXRUcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbF9UcmFuc3BvcnRNb2RlKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLlRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsI2dldFBvcHVsYXRpb25JZGVudGlmaWVyIDxlbT5Qb3B1bGF0aW9uIElkZW50aWZpZXI8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxlbT5Qb3B1bGF0aW9uIElkZW50aWZpZXI8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5UcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbCNnZXRQb3B1bGF0aW9uSWRlbnRpZmllcigpCisJICogQHNlZSAjZ2V0VHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWwoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQXR0cmlidXRlIGdldFRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsX1BvcHVsYXRpb25JZGVudGlmaWVyKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLlRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsI2dldFRyYW5zcG9ydElkZW50aWZpZXIgPGVtPlRyYW5zcG9ydCBJZGVudGlmaWVyPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+VHJhbnNwb3J0IElkZW50aWZpZXI8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5UcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbCNnZXRUcmFuc3BvcnRJZGVudGlmaWVyKCkKKwkgKiBAc2VlICNnZXRUcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbCgpCisJICogQGdlbmVyYXRlZAorCSAqLworCUVBdHRyaWJ1dGUgZ2V0VHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxfVHJhbnNwb3J0SWRlbnRpZmllcigpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSByZWZlcmVuY2UgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5UcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbCNnZXRDdXJyZW50VHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxWYWx1ZSA8ZW0+Q3VycmVudCBUcmFuc3BvcnQgUmVsYXRpb25zaGlwIExhYmVsIFZhbHVlPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgcmVmZXJlbmNlICc8ZW0+Q3VycmVudCBUcmFuc3BvcnQgUmVsYXRpb25zaGlwIExhYmVsIFZhbHVlPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWwjZ2V0Q3VycmVudFRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsVmFsdWUoKQorCSAqIEBzZWUgI2dldFRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRVJlZmVyZW5jZSBnZXRUcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbF9DdXJyZW50VHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxWYWx1ZSgpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5UcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbCNnZXRSYXRlVGltZVBlcmlvZCA8ZW0+UmF0ZSBUaW1lIFBlcmlvZDwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPGVtPlJhdGUgVGltZSBQZXJpb2Q8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5UcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbCNnZXRSYXRlVGltZVBlcmlvZCgpCisJICogQHNlZSAjZ2V0VHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWwoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQXR0cmlidXRlIGdldFRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsX1JhdGVUaW1lUGVyaW9kKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLlRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsI2dldERlcGFydHVyZUNhcGFjaXR5IDxlbT5EZXBhcnR1cmUgQ2FwYWNpdHk8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxlbT5EZXBhcnR1cmUgQ2FwYWNpdHk8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5UcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbCNnZXREZXBhcnR1cmVDYXBhY2l0eSgpCisJICogQHNlZSAjZ2V0VHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWwoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQXR0cmlidXRlIGdldFRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsX0RlcGFydHVyZUNhcGFjaXR5KCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLlRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsI2dldE1heGltdW1EZXBhcnR1cmVDYXBhY2l0eSA8ZW0+TWF4aW11bSBEZXBhcnR1cmUgQ2FwYWNpdHk8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxlbT5NYXhpbXVtIERlcGFydHVyZSBDYXBhY2l0eTwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLlRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsI2dldE1heGltdW1EZXBhcnR1cmVDYXBhY2l0eSgpCisJICogQHNlZSAjZ2V0VHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWwoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQXR0cmlidXRlIGdldFRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsX01heGltdW1EZXBhcnR1cmVDYXBhY2l0eSgpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5UcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbCNnZXRDYXBhY2l0eSA8ZW0+Q2FwYWNpdHk8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxlbT5DYXBhY2l0eTwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLlRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsI2dldENhcGFjaXR5KCkKKwkgKiBAc2VlICNnZXRUcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbCgpCisJICogQGdlbmVyYXRlZAorCSAqLworCUVBdHRyaWJ1dGUgZ2V0VHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxfQ2FwYWNpdHkoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWwjZ2V0TWF4aW11bUNhcGFjaXR5IDxlbT5NYXhpbXVtIENhcGFjaXR5PC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+TWF4aW11bSBDYXBhY2l0eTwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLlRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsI2dldE1heGltdW1DYXBhY2l0eSgpCisJICogQHNlZSAjZ2V0VHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWwoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQXR0cmlidXRlIGdldFRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsX01heGltdW1DYXBhY2l0eSgpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5UcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbCNnZXRUcmFuc2l0VGltZSA8ZW0+VHJhbnNpdCBUaW1lPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+VHJhbnNpdCBUaW1lPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWwjZ2V0VHJhbnNpdFRpbWUoKQorCSAqIEBzZWUgI2dldFRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUF0dHJpYnV0ZSBnZXRUcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbF9UcmFuc2l0VGltZSgpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5UcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbCNnZXRTdGFydFVwRGVsYXkgPGVtPlN0YXJ0IFVwIERlbGF5PC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+U3RhcnQgVXAgRGVsYXk8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5UcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbCNnZXRTdGFydFVwRGVsYXkoKQorCSAqIEBzZWUgI2dldFRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUF0dHJpYnV0ZSBnZXRUcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbF9TdGFydFVwRGVsYXkoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLlRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsVmFsdWUgPGVtPlRyYW5zcG9ydCBSZWxhdGlvbnNoaXAgTGFiZWwgVmFsdWU8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICc8ZW0+VHJhbnNwb3J0IFJlbGF0aW9uc2hpcCBMYWJlbCBWYWx1ZTwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLlRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsVmFsdWUKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUNsYXNzIGdldFRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsVmFsdWUoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxWYWx1ZSNnZXRBdmFpbGFibGVEZXBhcnR1cmVDYXBhY2l0eVByb3BvcnRpb24gPGVtPkF2YWlsYWJsZSBEZXBhcnR1cmUgQ2FwYWNpdHkgUHJvcG9ydGlvbjwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPGVtPkF2YWlsYWJsZSBEZXBhcnR1cmUgQ2FwYWNpdHkgUHJvcG9ydGlvbjwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLlRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsVmFsdWUjZ2V0QXZhaWxhYmxlRGVwYXJ0dXJlQ2FwYWNpdHlQcm9wb3J0aW9uKCkKKwkgKiBAc2VlICNnZXRUcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbFZhbHVlKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUF0dHJpYnV0ZSBnZXRUcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbFZhbHVlX0F2YWlsYWJsZURlcGFydHVyZUNhcGFjaXR5UHJvcG9ydGlvbigpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuUGh5c2ljYWxSZWxhdGlvbnNoaXBMYWJlbFZhbHVlIDxlbT5QaHlzaWNhbCBSZWxhdGlvbnNoaXAgTGFiZWwgVmFsdWU8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICc8ZW0+UGh5c2ljYWwgUmVsYXRpb25zaGlwIExhYmVsIFZhbHVlPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuUGh5c2ljYWxSZWxhdGlvbnNoaXBMYWJlbFZhbHVlCisJICogQGdlbmVyYXRlZAorCSAqLworCUVDbGFzcyBnZXRQaHlzaWNhbFJlbGF0aW9uc2hpcExhYmVsVmFsdWUoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLlJvYWRUcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbCA8ZW0+Um9hZCBUcmFuc3BvcnQgUmVsYXRpb25zaGlwIExhYmVsPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAnPGVtPlJvYWQgVHJhbnNwb3J0IFJlbGF0aW9uc2hpcCBMYWJlbDwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLlJvYWRUcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbAorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQ2xhc3MgZ2V0Um9hZFRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5Sb2FkVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxWYWx1ZSA8ZW0+Um9hZCBUcmFuc3BvcnQgUmVsYXRpb25zaGlwIExhYmVsIFZhbHVlPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAnPGVtPlJvYWQgVHJhbnNwb3J0IFJlbGF0aW9uc2hpcCBMYWJlbCBWYWx1ZTwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLlJvYWRUcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbFZhbHVlCisJICogQGdlbmVyYXRlZAorCSAqLworCUVDbGFzcyBnZXRSb2FkVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxWYWx1ZSgpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5Sb2FkVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxWYWx1ZSNnZXRSb2FkTmFtZSA8ZW0+Um9hZCBOYW1lPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+Um9hZCBOYW1lPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuUm9hZFRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsVmFsdWUjZ2V0Um9hZE5hbWUoKQorCSAqIEBzZWUgI2dldFJvYWRUcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbFZhbHVlKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUF0dHJpYnV0ZSBnZXRSb2FkVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxWYWx1ZV9Sb2FkTmFtZSgpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5Sb2FkVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxWYWx1ZSNnZXRSb2FkQ2xhc3MgPGVtPlJvYWQgQ2xhc3M8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxlbT5Sb2FkIENsYXNzPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuUm9hZFRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsVmFsdWUjZ2V0Um9hZENsYXNzKCkKKwkgKiBAc2VlICNnZXRSb2FkVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxWYWx1ZSgpCisJICogQGdlbmVyYXRlZAorCSAqLworCUVBdHRyaWJ1dGUgZ2V0Um9hZFRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsVmFsdWVfUm9hZENsYXNzKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLlJvYWRUcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbFZhbHVlI2dldE51bWJlckNyb3NzaW5ncyA8ZW0+TnVtYmVyIENyb3NzaW5nczwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPGVtPk51bWJlciBDcm9zc2luZ3M8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5Sb2FkVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxWYWx1ZSNnZXROdW1iZXJDcm9zc2luZ3MoKQorCSAqIEBzZWUgI2dldFJvYWRUcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbFZhbHVlKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUF0dHJpYnV0ZSBnZXRSb2FkVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxWYWx1ZV9OdW1iZXJDcm9zc2luZ3MoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLkVhcnRoU2NpZW5jZUxhYmVsIDxlbT5FYXJ0aCBTY2llbmNlIExhYmVsPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAnPGVtPkVhcnRoIFNjaWVuY2UgTGFiZWw8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5FYXJ0aFNjaWVuY2VMYWJlbAorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQ2xhc3MgZ2V0RWFydGhTY2llbmNlTGFiZWwoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgcmVmZXJlbmNlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuRWFydGhTY2llbmNlTGFiZWwjZ2V0Q3VycmVudEVhcnRoU2NpZW5jZVZhbHVlIDxlbT5DdXJyZW50IEVhcnRoIFNjaWVuY2UgVmFsdWU8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSByZWZlcmVuY2UgJzxlbT5DdXJyZW50IEVhcnRoIFNjaWVuY2UgVmFsdWU8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5FYXJ0aFNjaWVuY2VMYWJlbCNnZXRDdXJyZW50RWFydGhTY2llbmNlVmFsdWUoKQorCSAqIEBzZWUgI2dldEVhcnRoU2NpZW5jZUxhYmVsKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRVJlZmVyZW5jZSBnZXRFYXJ0aFNjaWVuY2VMYWJlbF9DdXJyZW50RWFydGhTY2llbmNlVmFsdWUoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLkVhcnRoU2NpZW5jZUxhYmVsVmFsdWUgPGVtPkVhcnRoIFNjaWVuY2UgTGFiZWwgVmFsdWU8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICc8ZW0+RWFydGggU2NpZW5jZSBMYWJlbCBWYWx1ZTwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLkVhcnRoU2NpZW5jZUxhYmVsVmFsdWUKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUNsYXNzIGdldEVhcnRoU2NpZW5jZUxhYmVsVmFsdWUoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuRWFydGhTY2llbmNlTGFiZWxWYWx1ZSNnZXREYXRhVHlwZSA8ZW0+RGF0YSBUeXBlPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+RGF0YSBUeXBlPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuRWFydGhTY2llbmNlTGFiZWxWYWx1ZSNnZXREYXRhVHlwZSgpCisJICogQHNlZSAjZ2V0RWFydGhTY2llbmNlTGFiZWxWYWx1ZSgpCisJICogQGdlbmVyYXRlZAorCSAqLworCUVBdHRyaWJ1dGUgZ2V0RWFydGhTY2llbmNlTGFiZWxWYWx1ZV9EYXRhVHlwZSgpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5FYXJ0aFNjaWVuY2VMYWJlbFZhbHVlI2dldFVuaXRzIDxlbT5Vbml0czwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPGVtPlVuaXRzPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuRWFydGhTY2llbmNlTGFiZWxWYWx1ZSNnZXRVbml0cygpCisJICogQHNlZSAjZ2V0RWFydGhTY2llbmNlTGFiZWxWYWx1ZSgpCisJICogQGdlbmVyYXRlZAorCSAqLworCUVBdHRyaWJ1dGUgZ2V0RWFydGhTY2llbmNlTGFiZWxWYWx1ZV9Vbml0cygpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgbGlzdCAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLkVhcnRoU2NpZW5jZUxhYmVsVmFsdWUjZ2V0TWVhbiA8ZW0+TWVhbjwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSBsaXN0ICc8ZW0+TWVhbjwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLkVhcnRoU2NpZW5jZUxhYmVsVmFsdWUjZ2V0TWVhbigpCisJICogQHNlZSAjZ2V0RWFydGhTY2llbmNlTGFiZWxWYWx1ZSgpCisJICogQGdlbmVyYXRlZAorCSAqLworCUVBdHRyaWJ1dGUgZ2V0RWFydGhTY2llbmNlTGFiZWxWYWx1ZV9NZWFuKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSBsaXN0ICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuRWFydGhTY2llbmNlTGFiZWxWYWx1ZSNnZXRTZCA8ZW0+U2Q8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgbGlzdCAnPGVtPlNkPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuRWFydGhTY2llbmNlTGFiZWxWYWx1ZSNnZXRTZCgpCisJICogQHNlZSAjZ2V0RWFydGhTY2llbmNlTGFiZWxWYWx1ZSgpCisJICogQGdlbmVyYXRlZAorCSAqLworCUVBdHRyaWJ1dGUgZ2V0RWFydGhTY2llbmNlTGFiZWxWYWx1ZV9TZCgpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgbGlzdCAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLkVhcnRoU2NpZW5jZUxhYmVsVmFsdWUjZ2V0TWluIDxlbT5NaW48L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgbGlzdCAnPGVtPk1pbjwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLkVhcnRoU2NpZW5jZUxhYmVsVmFsdWUjZ2V0TWluKCkKKwkgKiBAc2VlICNnZXRFYXJ0aFNjaWVuY2VMYWJlbFZhbHVlKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUF0dHJpYnV0ZSBnZXRFYXJ0aFNjaWVuY2VMYWJlbFZhbHVlX01pbigpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgbGlzdCAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLkVhcnRoU2NpZW5jZUxhYmVsVmFsdWUjZ2V0TWF4IDxlbT5NYXg8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgbGlzdCAnPGVtPk1heDwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLkVhcnRoU2NpZW5jZUxhYmVsVmFsdWUjZ2V0TWF4KCkKKwkgKiBAc2VlICNnZXRFYXJ0aFNjaWVuY2VMYWJlbFZhbHVlKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUF0dHJpYnV0ZSBnZXRFYXJ0aFNjaWVuY2VMYWJlbFZhbHVlX01heCgpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgbGlzdCAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLkVhcnRoU2NpZW5jZUxhYmVsVmFsdWUjZ2V0TWVkaWFuIDxlbT5NZWRpYW48L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgbGlzdCAnPGVtPk1lZGlhbjwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLkVhcnRoU2NpZW5jZUxhYmVsVmFsdWUjZ2V0TWVkaWFuKCkKKwkgKiBAc2VlICNnZXRFYXJ0aFNjaWVuY2VMYWJlbFZhbHVlKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUF0dHJpYnV0ZSBnZXRFYXJ0aFNjaWVuY2VMYWJlbFZhbHVlX01lZGlhbigpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgbGlzdCAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLkVhcnRoU2NpZW5jZUxhYmVsVmFsdWUjZ2V0U2tld25lc3MgPGVtPlNrZXduZXNzPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlIGxpc3QgJzxlbT5Ta2V3bmVzczwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLkVhcnRoU2NpZW5jZUxhYmVsVmFsdWUjZ2V0U2tld25lc3MoKQorCSAqIEBzZWUgI2dldEVhcnRoU2NpZW5jZUxhYmVsVmFsdWUoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQXR0cmlidXRlIGdldEVhcnRoU2NpZW5jZUxhYmVsVmFsdWVfU2tld25lc3MoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlIGxpc3QgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5FYXJ0aFNjaWVuY2VMYWJlbFZhbHVlI2dldEt1cnRvc2lzIDxlbT5LdXJ0b3NpczwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSBsaXN0ICc8ZW0+S3VydG9zaXM8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5FYXJ0aFNjaWVuY2VMYWJlbFZhbHVlI2dldEt1cnRvc2lzKCkKKwkgKiBAc2VlICNnZXRFYXJ0aFNjaWVuY2VMYWJlbFZhbHVlKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUF0dHJpYnV0ZSBnZXRFYXJ0aFNjaWVuY2VMYWJlbFZhbHVlX0t1cnRvc2lzKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSBsaXN0ICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuRWFydGhTY2llbmNlTGFiZWxWYWx1ZSNnZXRSbXMgPGVtPlJtczwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSBsaXN0ICc8ZW0+Um1zPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuRWFydGhTY2llbmNlTGFiZWxWYWx1ZSNnZXRSbXMoKQorCSAqIEBzZWUgI2dldEVhcnRoU2NpZW5jZUxhYmVsVmFsdWUoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQXR0cmlidXRlIGdldEVhcnRoU2NpZW5jZUxhYmVsVmFsdWVfUm1zKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSBsaXN0ICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuRWFydGhTY2llbmNlTGFiZWxWYWx1ZSNnZXRTYW1wbGVzaXplIDxlbT5TYW1wbGVzaXplPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlIGxpc3QgJzxlbT5TYW1wbGVzaXplPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuRWFydGhTY2llbmNlTGFiZWxWYWx1ZSNnZXRTYW1wbGVzaXplKCkKKwkgKiBAc2VlICNnZXRFYXJ0aFNjaWVuY2VMYWJlbFZhbHVlKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUF0dHJpYnV0ZSBnZXRFYXJ0aFNjaWVuY2VMYWJlbFZhbHVlX1NhbXBsZXNpemUoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlIGxpc3QgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5FYXJ0aFNjaWVuY2VMYWJlbFZhbHVlI2dldFJhbmdlIDxlbT5SYW5nZTwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSBsaXN0ICc8ZW0+UmFuZ2U8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5FYXJ0aFNjaWVuY2VMYWJlbFZhbHVlI2dldFJhbmdlKCkKKwkgKiBAc2VlICNnZXRFYXJ0aFNjaWVuY2VMYWJlbFZhbHVlKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUF0dHJpYnV0ZSBnZXRFYXJ0aFNjaWVuY2VMYWJlbFZhbHVlX1JhbmdlKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgZW51bSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLlJlbGF0aXZlUGh5c2ljYWxSZWxhdGlvbnNoaXAgPGVtPlJlbGF0aXZlIFBoeXNpY2FsIFJlbGF0aW9uc2hpcDwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgZW51bSAnPGVtPlJlbGF0aXZlIFBoeXNpY2FsIFJlbGF0aW9uc2hpcDwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLlJlbGF0aXZlUGh5c2ljYWxSZWxhdGlvbnNoaXAKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUVudW0gZ2V0UmVsYXRpdmVQaHlzaWNhbFJlbGF0aW9uc2hpcCgpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIGVudW0gJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5UcmFuc3BvcnRNb2RlIDxlbT5UcmFuc3BvcnQgTW9kZTwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgZW51bSAnPGVtPlRyYW5zcG9ydCBNb2RlPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuVHJhbnNwb3J0TW9kZQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFRW51bSBnZXRUcmFuc3BvcnRNb2RlKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBmYWN0b3J5IHRoYXQgY3JlYXRlcyB0aGUgaW5zdGFuY2VzIG9mIHRoZSBtb2RlbC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIGZhY3RvcnkgdGhhdCBjcmVhdGVzIHRoZSBpbnN0YW5jZXMgb2YgdGhlIG1vZGVsLgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlMYWJlbHNGYWN0b3J5IGdldExhYmVsc0ZhY3RvcnkoKTsKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogRGVmaW5lcyBsaXRlcmFscyBmb3IgdGhlIG1ldGEgb2JqZWN0cyB0aGF0IHJlcHJlc2VudAorCSAqIDx1bD4KKwkgKiAgIDxsaT5lYWNoIGNsYXNzLDwvbGk+CisJICogICA8bGk+ZWFjaCBmZWF0dXJlIG9mIGVhY2ggY2xhc3MsPC9saT4KKwkgKiAgIDxsaT5lYWNoIGVudW0sPC9saT4KKwkgKiAgIDxsaT5hbmQgZWFjaCBkYXRhIHR5cGU8L2xpPgorCSAqIDwvdWw+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCWludGVyZmFjZSBMaXRlcmFscyAgeworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLmltcGwuQXJlYUxhYmVsSW1wbCA8ZW0+QXJlYSBMYWJlbDwvZW0+fScgY2xhc3MuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLmltcGwuQXJlYUxhYmVsSW1wbAorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLmltcGwuTGFiZWxzUGFja2FnZUltcGwjZ2V0QXJlYUxhYmVsKCkKKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUNsYXNzIEFSRUFfTEFCRUwgPSBlSU5TVEFOQ0UuZ2V0QXJlYUxhYmVsKCk7CisKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5DdXJyZW50IEFyZWEgVmFsdWU8L2I+PC9lbT4nIHJlZmVyZW5jZSBmZWF0dXJlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRVJlZmVyZW5jZSBBUkVBX0xBQkVMX19DVVJSRU5UX0FSRUFfVkFMVUUgPSBlSU5TVEFOQ0UuZ2V0QXJlYUxhYmVsX0N1cnJlbnRBcmVhVmFsdWUoKTsKKworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLmltcGwuQXJlYUxhYmVsVmFsdWVJbXBsIDxlbT5BcmVhIExhYmVsIFZhbHVlPC9lbT59JyBjbGFzcy4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuaW1wbC5BcmVhTGFiZWxWYWx1ZUltcGwKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5pbXBsLkxhYmVsc1BhY2thZ2VJbXBsI2dldEFyZWFMYWJlbFZhbHVlKCkKKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUNsYXNzIEFSRUFfTEFCRUxfVkFMVUUgPSBlSU5TVEFOQ0UuZ2V0QXJlYUxhYmVsVmFsdWUoKTsKKworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPkFyZWE8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUF0dHJpYnV0ZSBBUkVBX0xBQkVMX1ZBTFVFX19BUkVBID0gZUlOU1RBTkNFLmdldEFyZWFMYWJlbFZhbHVlX0FyZWEoKTsKKworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPkF2ZXJhZ2UgRXh0ZW50PC9iPjwvZW0+JyBhdHRyaWJ1dGUgZmVhdHVyZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVBdHRyaWJ1dGUgQVJFQV9MQUJFTF9WQUxVRV9fQVZFUkFHRV9FWFRFTlQgPSBlSU5TVEFOQ0UuZ2V0QXJlYUxhYmVsVmFsdWVfQXZlcmFnZUV4dGVudCgpOworCisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuaW1wbC5Db21tb25Cb3JkZXJSZWxhdGlvbnNoaXBMYWJlbEltcGwgPGVtPkNvbW1vbiBCb3JkZXIgUmVsYXRpb25zaGlwIExhYmVsPC9lbT59JyBjbGFzcy4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuaW1wbC5Db21tb25Cb3JkZXJSZWxhdGlvbnNoaXBMYWJlbEltcGwKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5pbXBsLkxhYmVsc1BhY2thZ2VJbXBsI2dldENvbW1vbkJvcmRlclJlbGF0aW9uc2hpcExhYmVsKCkKKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUNsYXNzIENPTU1PTl9CT1JERVJfUkVMQVRJT05TSElQX0xBQkVMID0gZUlOU1RBTkNFLmdldENvbW1vbkJvcmRlclJlbGF0aW9uc2hpcExhYmVsKCk7CisKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5pbXBsLkNvbW1vbkJvcmRlclJlbGF0aW9uc2hpcExhYmVsVmFsdWVJbXBsIDxlbT5Db21tb24gQm9yZGVyIFJlbGF0aW9uc2hpcCBMYWJlbCBWYWx1ZTwvZW0+fScgY2xhc3MuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLmltcGwuQ29tbW9uQm9yZGVyUmVsYXRpb25zaGlwTGFiZWxWYWx1ZUltcGwKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5pbXBsLkxhYmVsc1BhY2thZ2VJbXBsI2dldENvbW1vbkJvcmRlclJlbGF0aW9uc2hpcExhYmVsVmFsdWUoKQorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQ2xhc3MgQ09NTU9OX0JPUkRFUl9SRUxBVElPTlNISVBfTEFCRUxfVkFMVUUgPSBlSU5TVEFOQ0UuZ2V0Q29tbW9uQm9yZGVyUmVsYXRpb25zaGlwTGFiZWxWYWx1ZSgpOworCisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+Qm9yZGVyIExlbmd0aDwvYj48L2VtPicgYXR0cmlidXRlIGZlYXR1cmUuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQXR0cmlidXRlIENPTU1PTl9CT1JERVJfUkVMQVRJT05TSElQX0xBQkVMX1ZBTFVFX19CT1JERVJfTEVOR1RIID0gZUlOU1RBTkNFLmdldENvbW1vbkJvcmRlclJlbGF0aW9uc2hpcExhYmVsVmFsdWVfQm9yZGVyTGVuZ3RoKCk7CisKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5pbXBsLlBoeXNpY2FsUmVsYXRpb25zaGlwTGFiZWxJbXBsIDxlbT5QaHlzaWNhbCBSZWxhdGlvbnNoaXAgTGFiZWw8L2VtPn0nIGNsYXNzLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5pbXBsLlBoeXNpY2FsUmVsYXRpb25zaGlwTGFiZWxJbXBsCisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuaW1wbC5MYWJlbHNQYWNrYWdlSW1wbCNnZXRQaHlzaWNhbFJlbGF0aW9uc2hpcExhYmVsKCkKKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUNsYXNzIFBIWVNJQ0FMX1JFTEFUSU9OU0hJUF9MQUJFTCA9IGVJTlNUQU5DRS5nZXRQaHlzaWNhbFJlbGF0aW9uc2hpcExhYmVsKCk7CisKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5pbXBsLlBvcHVsYXRpb25MYWJlbEltcGwgPGVtPlBvcHVsYXRpb24gTGFiZWw8L2VtPn0nIGNsYXNzLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5pbXBsLlBvcHVsYXRpb25MYWJlbEltcGwKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5pbXBsLkxhYmVsc1BhY2thZ2VJbXBsI2dldFBvcHVsYXRpb25MYWJlbCgpCisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVDbGFzcyBQT1BVTEFUSU9OX0xBQkVMID0gZUlOU1RBTkNFLmdldFBvcHVsYXRpb25MYWJlbCgpOworCisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+UG9wdWxhdGlvbiBJZGVudGlmaWVyPC9iPjwvZW0+JyBhdHRyaWJ1dGUgZmVhdHVyZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVBdHRyaWJ1dGUgUE9QVUxBVElPTl9MQUJFTF9fUE9QVUxBVElPTl9JREVOVElGSUVSID0gZUlOU1RBTkNFLmdldFBvcHVsYXRpb25MYWJlbF9Qb3B1bGF0aW9uSWRlbnRpZmllcigpOworCisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+TmFtZTwvYj48L2VtPicgYXR0cmlidXRlIGZlYXR1cmUuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQXR0cmlidXRlIFBPUFVMQVRJT05fTEFCRUxfX05BTUUgPSBlSU5TVEFOQ0UuZ2V0UG9wdWxhdGlvbkxhYmVsX05hbWUoKTsKKworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPkN1cnJlbnQgUG9wdWxhdGlvbiBWYWx1ZTwvYj48L2VtPicgcmVmZXJlbmNlIGZlYXR1cmUuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFUmVmZXJlbmNlIFBPUFVMQVRJT05fTEFCRUxfX0NVUlJFTlRfUE9QVUxBVElPTl9WQUxVRSA9IGVJTlNUQU5DRS5nZXRQb3B1bGF0aW9uTGFiZWxfQ3VycmVudFBvcHVsYXRpb25WYWx1ZSgpOworCisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+UG9wdWxhdGVkIEFyZWE8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUF0dHJpYnV0ZSBQT1BVTEFUSU9OX0xBQkVMX19QT1BVTEFURURfQVJFQSA9IGVJTlNUQU5DRS5nZXRQb3B1bGF0aW9uTGFiZWxfUG9wdWxhdGVkQXJlYSgpOworCisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+VmFsaWQgWWVhcjwvYj48L2VtPicgYXR0cmlidXRlIGZlYXR1cmUuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQXR0cmlidXRlIFBPUFVMQVRJT05fTEFCRUxfX1ZBTElEX1lFQVIgPSBlSU5TVEFOQ0UuZ2V0UG9wdWxhdGlvbkxhYmVsX1ZhbGlkWWVhcigpOworCisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuaW1wbC5Qb3B1bGF0aW9uTGFiZWxWYWx1ZUltcGwgPGVtPlBvcHVsYXRpb24gTGFiZWwgVmFsdWU8L2VtPn0nIGNsYXNzLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5pbXBsLlBvcHVsYXRpb25MYWJlbFZhbHVlSW1wbAorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLmltcGwuTGFiZWxzUGFja2FnZUltcGwjZ2V0UG9wdWxhdGlvbkxhYmVsVmFsdWUoKQorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQ2xhc3MgUE9QVUxBVElPTl9MQUJFTF9WQUxVRSA9IGVJTlNUQU5DRS5nZXRQb3B1bGF0aW9uTGFiZWxWYWx1ZSgpOworCisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+Q291bnQ8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUF0dHJpYnV0ZSBQT1BVTEFUSU9OX0xBQkVMX1ZBTFVFX19DT1VOVCA9IGVJTlNUQU5DRS5nZXRQb3B1bGF0aW9uTGFiZWxWYWx1ZV9Db3VudCgpOworCisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuaW1wbC5SZWxhdGl2ZVBoeXNpY2FsUmVsYXRpb25zaGlwTGFiZWxJbXBsIDxlbT5SZWxhdGl2ZSBQaHlzaWNhbCBSZWxhdGlvbnNoaXAgTGFiZWw8L2VtPn0nIGNsYXNzLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5pbXBsLlJlbGF0aXZlUGh5c2ljYWxSZWxhdGlvbnNoaXBMYWJlbEltcGwKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5pbXBsLkxhYmVsc1BhY2thZ2VJbXBsI2dldFJlbGF0aXZlUGh5c2ljYWxSZWxhdGlvbnNoaXBMYWJlbCgpCisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVDbGFzcyBSRUxBVElWRV9QSFlTSUNBTF9SRUxBVElPTlNISVBfTEFCRUwgPSBlSU5TVEFOQ0UuZ2V0UmVsYXRpdmVQaHlzaWNhbFJlbGF0aW9uc2hpcExhYmVsKCk7CisKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5DdXJyZW50IFJlbGF0aW9uc2hpcDwvYj48L2VtPicgcmVmZXJlbmNlIGZlYXR1cmUuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFUmVmZXJlbmNlIFJFTEFUSVZFX1BIWVNJQ0FMX1JFTEFUSU9OU0hJUF9MQUJFTF9fQ1VSUkVOVF9SRUxBVElPTlNISVAgPSBlSU5TVEFOQ0UuZ2V0UmVsYXRpdmVQaHlzaWNhbFJlbGF0aW9uc2hpcExhYmVsX0N1cnJlbnRSZWxhdGlvbnNoaXAoKTsKKworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLmltcGwuUmVsYXRpdmVQaHlzaWNhbFJlbGF0aW9uc2hpcExhYmVsVmFsdWVJbXBsIDxlbT5SZWxhdGl2ZSBQaHlzaWNhbCBSZWxhdGlvbnNoaXAgTGFiZWwgVmFsdWU8L2VtPn0nIGNsYXNzLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5pbXBsLlJlbGF0aXZlUGh5c2ljYWxSZWxhdGlvbnNoaXBMYWJlbFZhbHVlSW1wbAorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLmltcGwuTGFiZWxzUGFja2FnZUltcGwjZ2V0UmVsYXRpdmVQaHlzaWNhbFJlbGF0aW9uc2hpcExhYmVsVmFsdWUoKQorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQ2xhc3MgUkVMQVRJVkVfUEhZU0lDQUxfUkVMQVRJT05TSElQX0xBQkVMX1ZBTFVFID0gZUlOU1RBTkNFLmdldFJlbGF0aXZlUGh5c2ljYWxSZWxhdGlvbnNoaXBMYWJlbFZhbHVlKCk7CisKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5BZGphY2VudDwvYj48L2VtPicgYXR0cmlidXRlIGZlYXR1cmUuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQXR0cmlidXRlIFJFTEFUSVZFX1BIWVNJQ0FMX1JFTEFUSU9OU0hJUF9MQUJFTF9WQUxVRV9fQURKQUNFTlQgPSBlSU5TVEFOQ0UuZ2V0UmVsYXRpdmVQaHlzaWNhbFJlbGF0aW9uc2hpcExhYmVsVmFsdWVfQWRqYWNlbnQoKTsKKworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPlJlbGF0aW9uc2hpcDwvYj48L2VtPicgYXR0cmlidXRlIGZlYXR1cmUuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQXR0cmlidXRlIFJFTEFUSVZFX1BIWVNJQ0FMX1JFTEFUSU9OU0hJUF9MQUJFTF9WQUxVRV9fUkVMQVRJT05TSElQID0gZUlOU1RBTkNFLmdldFJlbGF0aXZlUGh5c2ljYWxSZWxhdGlvbnNoaXBMYWJlbFZhbHVlX1JlbGF0aW9uc2hpcCgpOworCisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuaW1wbC5UcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbEltcGwgPGVtPlRyYW5zcG9ydCBSZWxhdGlvbnNoaXAgTGFiZWw8L2VtPn0nIGNsYXNzLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5pbXBsLlRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsSW1wbAorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLmltcGwuTGFiZWxzUGFja2FnZUltcGwjZ2V0VHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWwoKQorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQ2xhc3MgVFJBTlNQT1JUX1JFTEFUSU9OU0hJUF9MQUJFTCA9IGVJTlNUQU5DRS5nZXRUcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbCgpOworCisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+VHJhbnNwb3J0IE1vZGU8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUF0dHJpYnV0ZSBUUkFOU1BPUlRfUkVMQVRJT05TSElQX0xBQkVMX19UUkFOU1BPUlRfTU9ERSA9IGVJTlNUQU5DRS5nZXRUcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbF9UcmFuc3BvcnRNb2RlKCk7CisKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5Qb3B1bGF0aW9uIElkZW50aWZpZXI8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUF0dHJpYnV0ZSBUUkFOU1BPUlRfUkVMQVRJT05TSElQX0xBQkVMX19QT1BVTEFUSU9OX0lERU5USUZJRVIgPSBlSU5TVEFOQ0UuZ2V0VHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxfUG9wdWxhdGlvbklkZW50aWZpZXIoKTsKKworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPlRyYW5zcG9ydCBJZGVudGlmaWVyPC9iPjwvZW0+JyBhdHRyaWJ1dGUgZmVhdHVyZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVBdHRyaWJ1dGUgVFJBTlNQT1JUX1JFTEFUSU9OU0hJUF9MQUJFTF9fVFJBTlNQT1JUX0lERU5USUZJRVIgPSBlSU5TVEFOQ0UuZ2V0VHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxfVHJhbnNwb3J0SWRlbnRpZmllcigpOworCisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+Q3VycmVudCBUcmFuc3BvcnQgUmVsYXRpb25zaGlwIExhYmVsIFZhbHVlPC9iPjwvZW0+JyByZWZlcmVuY2UgZmVhdHVyZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVSZWZlcmVuY2UgVFJBTlNQT1JUX1JFTEFUSU9OU0hJUF9MQUJFTF9fQ1VSUkVOVF9UUkFOU1BPUlRfUkVMQVRJT05TSElQX0xBQkVMX1ZBTFVFID0gZUlOU1RBTkNFLmdldFRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsX0N1cnJlbnRUcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbFZhbHVlKCk7CisKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5SYXRlIFRpbWUgUGVyaW9kPC9iPjwvZW0+JyBhdHRyaWJ1dGUgZmVhdHVyZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVBdHRyaWJ1dGUgVFJBTlNQT1JUX1JFTEFUSU9OU0hJUF9MQUJFTF9fUkFURV9USU1FX1BFUklPRCA9IGVJTlNUQU5DRS5nZXRUcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbF9SYXRlVGltZVBlcmlvZCgpOworCisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+RGVwYXJ0dXJlIENhcGFjaXR5PC9iPjwvZW0+JyBhdHRyaWJ1dGUgZmVhdHVyZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVBdHRyaWJ1dGUgVFJBTlNQT1JUX1JFTEFUSU9OU0hJUF9MQUJFTF9fREVQQVJUVVJFX0NBUEFDSVRZID0gZUlOU1RBTkNFLmdldFRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsX0RlcGFydHVyZUNhcGFjaXR5KCk7CisKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5NYXhpbXVtIERlcGFydHVyZSBDYXBhY2l0eTwvYj48L2VtPicgYXR0cmlidXRlIGZlYXR1cmUuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQXR0cmlidXRlIFRSQU5TUE9SVF9SRUxBVElPTlNISVBfTEFCRUxfX01BWElNVU1fREVQQVJUVVJFX0NBUEFDSVRZID0gZUlOU1RBTkNFLmdldFRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsX01heGltdW1EZXBhcnR1cmVDYXBhY2l0eSgpOworCisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+Q2FwYWNpdHk8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUF0dHJpYnV0ZSBUUkFOU1BPUlRfUkVMQVRJT05TSElQX0xBQkVMX19DQVBBQ0lUWSA9IGVJTlNUQU5DRS5nZXRUcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbF9DYXBhY2l0eSgpOworCisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+TWF4aW11bSBDYXBhY2l0eTwvYj48L2VtPicgYXR0cmlidXRlIGZlYXR1cmUuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQXR0cmlidXRlIFRSQU5TUE9SVF9SRUxBVElPTlNISVBfTEFCRUxfX01BWElNVU1fQ0FQQUNJVFkgPSBlSU5TVEFOQ0UuZ2V0VHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxfTWF4aW11bUNhcGFjaXR5KCk7CisKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5UcmFuc2l0IFRpbWU8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUF0dHJpYnV0ZSBUUkFOU1BPUlRfUkVMQVRJT05TSElQX0xBQkVMX19UUkFOU0lUX1RJTUUgPSBlSU5TVEFOQ0UuZ2V0VHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxfVHJhbnNpdFRpbWUoKTsKKworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPlN0YXJ0IFVwIERlbGF5PC9iPjwvZW0+JyBhdHRyaWJ1dGUgZmVhdHVyZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVBdHRyaWJ1dGUgVFJBTlNQT1JUX1JFTEFUSU9OU0hJUF9MQUJFTF9fU1RBUlRfVVBfREVMQVkgPSBlSU5TVEFOQ0UuZ2V0VHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxfU3RhcnRVcERlbGF5KCk7CisKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5pbXBsLlRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsVmFsdWVJbXBsIDxlbT5UcmFuc3BvcnQgUmVsYXRpb25zaGlwIExhYmVsIFZhbHVlPC9lbT59JyBjbGFzcy4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuaW1wbC5UcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbFZhbHVlSW1wbAorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLmltcGwuTGFiZWxzUGFja2FnZUltcGwjZ2V0VHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxWYWx1ZSgpCisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVDbGFzcyBUUkFOU1BPUlRfUkVMQVRJT05TSElQX0xBQkVMX1ZBTFVFID0gZUlOU1RBTkNFLmdldFRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsVmFsdWUoKTsKKworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPkF2YWlsYWJsZSBEZXBhcnR1cmUgQ2FwYWNpdHkgUHJvcG9ydGlvbjwvYj48L2VtPicgYXR0cmlidXRlIGZlYXR1cmUuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQXR0cmlidXRlIFRSQU5TUE9SVF9SRUxBVElPTlNISVBfTEFCRUxfVkFMVUVfX0FWQUlMQUJMRV9ERVBBUlRVUkVfQ0FQQUNJVFlfUFJPUE9SVElPTiA9IGVJTlNUQU5DRS5nZXRUcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbFZhbHVlX0F2YWlsYWJsZURlcGFydHVyZUNhcGFjaXR5UHJvcG9ydGlvbigpOworCisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuaW1wbC5QaHlzaWNhbFJlbGF0aW9uc2hpcExhYmVsVmFsdWVJbXBsIDxlbT5QaHlzaWNhbCBSZWxhdGlvbnNoaXAgTGFiZWwgVmFsdWU8L2VtPn0nIGNsYXNzLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5pbXBsLlBoeXNpY2FsUmVsYXRpb25zaGlwTGFiZWxWYWx1ZUltcGwKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5pbXBsLkxhYmVsc1BhY2thZ2VJbXBsI2dldFBoeXNpY2FsUmVsYXRpb25zaGlwTGFiZWxWYWx1ZSgpCisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVDbGFzcyBQSFlTSUNBTF9SRUxBVElPTlNISVBfTEFCRUxfVkFMVUUgPSBlSU5TVEFOQ0UuZ2V0UGh5c2ljYWxSZWxhdGlvbnNoaXBMYWJlbFZhbHVlKCk7CisKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5pbXBsLlJvYWRUcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbEltcGwgPGVtPlJvYWQgVHJhbnNwb3J0IFJlbGF0aW9uc2hpcCBMYWJlbDwvZW0+fScgY2xhc3MuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLmltcGwuUm9hZFRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsSW1wbAorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLmltcGwuTGFiZWxzUGFja2FnZUltcGwjZ2V0Um9hZFRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsKCkKKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUNsYXNzIFJPQURfVFJBTlNQT1JUX1JFTEFUSU9OU0hJUF9MQUJFTCA9IGVJTlNUQU5DRS5nZXRSb2FkVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWwoKTsKKworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLmltcGwuUm9hZFRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsVmFsdWVJbXBsIDxlbT5Sb2FkIFRyYW5zcG9ydCBSZWxhdGlvbnNoaXAgTGFiZWwgVmFsdWU8L2VtPn0nIGNsYXNzLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5pbXBsLlJvYWRUcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbFZhbHVlSW1wbAorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLmltcGwuTGFiZWxzUGFja2FnZUltcGwjZ2V0Um9hZFRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsVmFsdWUoKQorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQ2xhc3MgUk9BRF9UUkFOU1BPUlRfUkVMQVRJT05TSElQX0xBQkVMX1ZBTFVFID0gZUlOU1RBTkNFLmdldFJvYWRUcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbFZhbHVlKCk7CisKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5Sb2FkIE5hbWU8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUF0dHJpYnV0ZSBST0FEX1RSQU5TUE9SVF9SRUxBVElPTlNISVBfTEFCRUxfVkFMVUVfX1JPQURfTkFNRSA9IGVJTlNUQU5DRS5nZXRSb2FkVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxWYWx1ZV9Sb2FkTmFtZSgpOworCisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+Um9hZCBDbGFzczwvYj48L2VtPicgYXR0cmlidXRlIGZlYXR1cmUuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQXR0cmlidXRlIFJPQURfVFJBTlNQT1JUX1JFTEFUSU9OU0hJUF9MQUJFTF9WQUxVRV9fUk9BRF9DTEFTUyA9IGVJTlNUQU5DRS5nZXRSb2FkVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxWYWx1ZV9Sb2FkQ2xhc3MoKTsKKworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPk51bWJlciBDcm9zc2luZ3M8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUF0dHJpYnV0ZSBST0FEX1RSQU5TUE9SVF9SRUxBVElPTlNISVBfTEFCRUxfVkFMVUVfX05VTUJFUl9DUk9TU0lOR1MgPSBlSU5TVEFOQ0UuZ2V0Um9hZFRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsVmFsdWVfTnVtYmVyQ3Jvc3NpbmdzKCk7CisKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5pbXBsLkVhcnRoU2NpZW5jZUxhYmVsSW1wbCA8ZW0+RWFydGggU2NpZW5jZSBMYWJlbDwvZW0+fScgY2xhc3MuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLmltcGwuRWFydGhTY2llbmNlTGFiZWxJbXBsCisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuaW1wbC5MYWJlbHNQYWNrYWdlSW1wbCNnZXRFYXJ0aFNjaWVuY2VMYWJlbCgpCisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVDbGFzcyBFQVJUSF9TQ0lFTkNFX0xBQkVMID0gZUlOU1RBTkNFLmdldEVhcnRoU2NpZW5jZUxhYmVsKCk7CisKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5DdXJyZW50IEVhcnRoIFNjaWVuY2UgVmFsdWU8L2I+PC9lbT4nIHJlZmVyZW5jZSBmZWF0dXJlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRVJlZmVyZW5jZSBFQVJUSF9TQ0lFTkNFX0xBQkVMX19DVVJSRU5UX0VBUlRIX1NDSUVOQ0VfVkFMVUUgPSBlSU5TVEFOQ0UuZ2V0RWFydGhTY2llbmNlTGFiZWxfQ3VycmVudEVhcnRoU2NpZW5jZVZhbHVlKCk7CisKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5pbXBsLkVhcnRoU2NpZW5jZUxhYmVsVmFsdWVJbXBsIDxlbT5FYXJ0aCBTY2llbmNlIExhYmVsIFZhbHVlPC9lbT59JyBjbGFzcy4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuaW1wbC5FYXJ0aFNjaWVuY2VMYWJlbFZhbHVlSW1wbAorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLmltcGwuTGFiZWxzUGFja2FnZUltcGwjZ2V0RWFydGhTY2llbmNlTGFiZWxWYWx1ZSgpCisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVDbGFzcyBFQVJUSF9TQ0lFTkNFX0xBQkVMX1ZBTFVFID0gZUlOU1RBTkNFLmdldEVhcnRoU2NpZW5jZUxhYmVsVmFsdWUoKTsKKworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPkRhdGEgVHlwZTwvYj48L2VtPicgYXR0cmlidXRlIGZlYXR1cmUuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQXR0cmlidXRlIEVBUlRIX1NDSUVOQ0VfTEFCRUxfVkFMVUVfX0RBVEFfVFlQRSA9IGVJTlNUQU5DRS5nZXRFYXJ0aFNjaWVuY2VMYWJlbFZhbHVlX0RhdGFUeXBlKCk7CisKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5Vbml0czwvYj48L2VtPicgYXR0cmlidXRlIGZlYXR1cmUuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQXR0cmlidXRlIEVBUlRIX1NDSUVOQ0VfTEFCRUxfVkFMVUVfX1VOSVRTID0gZUlOU1RBTkNFLmdldEVhcnRoU2NpZW5jZUxhYmVsVmFsdWVfVW5pdHMoKTsKKworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPk1lYW48L2I+PC9lbT4nIGF0dHJpYnV0ZSBsaXN0IGZlYXR1cmUuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQXR0cmlidXRlIEVBUlRIX1NDSUVOQ0VfTEFCRUxfVkFMVUVfX01FQU4gPSBlSU5TVEFOQ0UuZ2V0RWFydGhTY2llbmNlTGFiZWxWYWx1ZV9NZWFuKCk7CisKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5TZDwvYj48L2VtPicgYXR0cmlidXRlIGxpc3QgZmVhdHVyZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVBdHRyaWJ1dGUgRUFSVEhfU0NJRU5DRV9MQUJFTF9WQUxVRV9fU0QgPSBlSU5TVEFOQ0UuZ2V0RWFydGhTY2llbmNlTGFiZWxWYWx1ZV9TZCgpOworCisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+TWluPC9iPjwvZW0+JyBhdHRyaWJ1dGUgbGlzdCBmZWF0dXJlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUF0dHJpYnV0ZSBFQVJUSF9TQ0lFTkNFX0xBQkVMX1ZBTFVFX19NSU4gPSBlSU5TVEFOQ0UuZ2V0RWFydGhTY2llbmNlTGFiZWxWYWx1ZV9NaW4oKTsKKworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPk1heDwvYj48L2VtPicgYXR0cmlidXRlIGxpc3QgZmVhdHVyZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVBdHRyaWJ1dGUgRUFSVEhfU0NJRU5DRV9MQUJFTF9WQUxVRV9fTUFYID0gZUlOU1RBTkNFLmdldEVhcnRoU2NpZW5jZUxhYmVsVmFsdWVfTWF4KCk7CisKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5NZWRpYW48L2I+PC9lbT4nIGF0dHJpYnV0ZSBsaXN0IGZlYXR1cmUuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQXR0cmlidXRlIEVBUlRIX1NDSUVOQ0VfTEFCRUxfVkFMVUVfX01FRElBTiA9IGVJTlNUQU5DRS5nZXRFYXJ0aFNjaWVuY2VMYWJlbFZhbHVlX01lZGlhbigpOworCisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+U2tld25lc3M8L2I+PC9lbT4nIGF0dHJpYnV0ZSBsaXN0IGZlYXR1cmUuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQXR0cmlidXRlIEVBUlRIX1NDSUVOQ0VfTEFCRUxfVkFMVUVfX1NLRVdORVNTID0gZUlOU1RBTkNFLmdldEVhcnRoU2NpZW5jZUxhYmVsVmFsdWVfU2tld25lc3MoKTsKKworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPkt1cnRvc2lzPC9iPjwvZW0+JyBhdHRyaWJ1dGUgbGlzdCBmZWF0dXJlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUF0dHJpYnV0ZSBFQVJUSF9TQ0lFTkNFX0xBQkVMX1ZBTFVFX19LVVJUT1NJUyA9IGVJTlNUQU5DRS5nZXRFYXJ0aFNjaWVuY2VMYWJlbFZhbHVlX0t1cnRvc2lzKCk7CisKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5SbXM8L2I+PC9lbT4nIGF0dHJpYnV0ZSBsaXN0IGZlYXR1cmUuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQXR0cmlidXRlIEVBUlRIX1NDSUVOQ0VfTEFCRUxfVkFMVUVfX1JNUyA9IGVJTlNUQU5DRS5nZXRFYXJ0aFNjaWVuY2VMYWJlbFZhbHVlX1JtcygpOworCisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+U2FtcGxlc2l6ZTwvYj48L2VtPicgYXR0cmlidXRlIGxpc3QgZmVhdHVyZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVBdHRyaWJ1dGUgRUFSVEhfU0NJRU5DRV9MQUJFTF9WQUxVRV9fU0FNUExFU0laRSA9IGVJTlNUQU5DRS5nZXRFYXJ0aFNjaWVuY2VMYWJlbFZhbHVlX1NhbXBsZXNpemUoKTsKKworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPlJhbmdlPC9iPjwvZW0+JyBhdHRyaWJ1dGUgbGlzdCBmZWF0dXJlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUF0dHJpYnV0ZSBFQVJUSF9TQ0lFTkNFX0xBQkVMX1ZBTFVFX19SQU5HRSA9IGVJTlNUQU5DRS5nZXRFYXJ0aFNjaWVuY2VMYWJlbFZhbHVlX1JhbmdlKCk7CisKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5SZWxhdGl2ZVBoeXNpY2FsUmVsYXRpb25zaGlwIDxlbT5SZWxhdGl2ZSBQaHlzaWNhbCBSZWxhdGlvbnNoaXA8L2VtPn0nIGVudW0uCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLlJlbGF0aXZlUGh5c2ljYWxSZWxhdGlvbnNoaXAKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5pbXBsLkxhYmVsc1BhY2thZ2VJbXBsI2dldFJlbGF0aXZlUGh5c2ljYWxSZWxhdGlvbnNoaXAoKQorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFRW51bSBSRUxBVElWRV9QSFlTSUNBTF9SRUxBVElPTlNISVAgPSBlSU5TVEFOQ0UuZ2V0UmVsYXRpdmVQaHlzaWNhbFJlbGF0aW9uc2hpcCgpOworCisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuVHJhbnNwb3J0TW9kZSA8ZW0+VHJhbnNwb3J0IE1vZGU8L2VtPn0nIGVudW0uCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLlRyYW5zcG9ydE1vZGUKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5pbXBsLkxhYmVsc1BhY2thZ2VJbXBsI2dldFRyYW5zcG9ydE1vZGUoKQorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFRW51bSBUUkFOU1BPUlRfTU9ERSA9IGVJTlNUQU5DRS5nZXRUcmFuc3BvcnRNb2RlKCk7CisKKwl9CisKK30gLy9MYWJlbHNQYWNrYWdlCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvbGFiZWxzL1BoeXNpY2FsUmVsYXRpb25zaGlwTGFiZWwuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy9sYWJlbHMvUGh5c2ljYWxSZWxhdGlvbnNoaXBMYWJlbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAwNTAwOTEKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvbGFiZWxzL1BoeXNpY2FsUmVsYXRpb25zaGlwTGFiZWwuamF2YQpAQCAtMCwwICsxLDMzIEBACisvLyBQaHlzaWNhbFJlbGF0aW9uc2hpcExhYmVsLmphdmEKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHM7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLlN0YXRpY0VkZ2VMYWJlbDsKKworLyoqCisgKiBUaGlzIGludGVyZmFjZSBpcyBhbiBFTUYgZGVmaW5pdGlvbiBvZiBhIGNsYXNzIHRoYXQgcmVwcmVzZW50cyBhIGxhYmVsIGZvciBhbgorICogRWRnZSB0aGF0IHJlcHJlc2VudHMgYSBwaHlzaWNhbCByZWxhdGlvbnNoaXAgYmV0d2VlbiB0d28gbm9kZXMuCisgKiAKKyAqIEBtb2RlbCBhYnN0cmFjdD0idHJ1ZSIKKyAqLworcHVibGljIGludGVyZmFjZSBQaHlzaWNhbFJlbGF0aW9uc2hpcExhYmVsIGV4dGVuZHMgU3RhdGljRWRnZUxhYmVsIHsKKworCS8qKgorCSAqIFRoaXMgaXMgdGhlIHNlZ21lbnQgb2YgdGhlIHR5cGUgVVJJIHRoYXQgcHJlZml4ZXMgYWxsIG90aGVyIHNlZ21lbnRzIGluIGEKKwkgKiByZWxhdGl2ZSBwaHlzaWNhbCByZWxhdGlvbnNoaXAgbGFiZWwgdHlwZSBVUkkuCisJICovCisJU3RyaW5nIFVSSV9UWVBFX1BIWVNJQ0FMX1JFTEFUSU9OU0hJUF9MQUJFTF9TRUdNRU5UID0gVVJJX1RZUEVfTEFCRUxfU0VHTUVOVAorCQkJKyAiL3BoeXNpY2FsIjsKKworCS8vIE5vdGhpbmcKK30gLy8gUGh5c2ljYWxSZWxhdGlvbnNoaXBMYWJlbApkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL2xhYmVscy9QaHlzaWNhbFJlbGF0aW9uc2hpcExhYmVsVmFsdWUuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy9sYWJlbHMvUGh5c2ljYWxSZWxhdGlvbnNoaXBMYWJlbFZhbHVlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzFjYjE1MAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy9sYWJlbHMvUGh5c2ljYWxSZWxhdGlvbnNoaXBMYWJlbFZhbHVlLmphdmEKQEAgLTAsMCArMSwyNCBAQAorLy8gUGh5c2ljYWxSZWxhdGlvbnNoaXBMYWJlbFZhbHVlLmphdmEKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHM7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkxhYmVsVmFsdWU7CisKKy8qKgorICogVGhpcyBjbGFzcyByZXByZXNlbnRzIGEgcGh5c2ljYWwgcmVsYXRpb25zaGlwCisgKiAKKyAqIEBtb2RlbAorICovCitwdWJsaWMgaW50ZXJmYWNlIFBoeXNpY2FsUmVsYXRpb25zaGlwTGFiZWxWYWx1ZSBleHRlbmRzIExhYmVsVmFsdWUgeworCS8vIE5vdGhpbmcKK30gLy8gUGh5c2ljYWxSZWxhdGlvbnNoaXBMYWJlbFZhbHVlClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL2xhYmVscy9Qb3B1bGF0aW9uTGFiZWwuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy9sYWJlbHMvUG9wdWxhdGlvbkxhYmVsLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2Q3ZDY5OAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy9sYWJlbHMvUG9wdWxhdGlvbkxhYmVsLmphdmEKQEAgLTAsMCArMSwyMTUgQEAKKy8vIFBvcHVsYXRpb25MYWJlbC5qYXZhCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAKKyAqIENvcHlyaWdodCAoYykgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4gCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIAorICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wIAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQgCisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbCAKKyAqIAorICogQ29udHJpYnV0b3JzOiAKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5VUkk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLlNURU1VUkk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLlN0YXRpY05vZGVMYWJlbDsKKworLyoqCisgKiBUaGlzIGludGVyZmFjZSBkZWZpbmVzIGEgY2xhc3MgaW4gYW4gRU1GIG1vZGVsIGZvciBQb3B1bGF0aW9uTGFiZWwuCisgKiAKKyAqIEBtb2RlbAorICovCitwdWJsaWMgaW50ZXJmYWNlIFBvcHVsYXRpb25MYWJlbCBleHRlbmRzIFN0YXRpY05vZGVMYWJlbCB7CisKKwkvKioKKwkgKiBUaGlzIGlzIHRoZSBzZWdtZW50IG9mIHRoZSB0eXBlIFVSSSB0aGF0IHByZWZpeGVzIGFsbCBvdGhlciBzZWdtZW50cyBpbiBhCisJICogcG9wdWxhdGlvbiBsYWJlbCB0eXBlIFVSSS4KKwkgKi8KKwlTdHJpbmcgVVJJX1RZUEVfUE9QVUxBVElPTl9MQUJFTF9TRUdNRU5UID0gVVJJX1RZUEVfTEFCRUxfU0VHTUVOVAorCQkJKyAiL3BvcHVsYXRpb24iOworCisJLyoqCisJICogVGhpcyBpcyB0aGUgdHlwZSBVUkkgZm9yIHBvcHVsYXRpb24gbGFiZWxzCisJICovCisJVVJJIFVSSV9UWVBFX1BPUFVMQVRJT05fTEFCRUwgPSBTVEVNVVJJCisJCQkuY3JlYXRlVHlwZVVSSShVUklfVFlQRV9QT1BVTEFUSU9OX0xBQkVMX1NFR01FTlQpOworCisJLy8gVGhlc2UgY29uc3RhbnRzIGFyZSBpZGVudGlmaWVycyBvZiB2YXJpb3VzICJidWlsdC1pbiIgcG9wdWxhdGlvbiB0eXBlcworCS8qKgorCSAqIEdlbmVyaWMgaHVtYW4gcG9wdWxhdGlvbi4KKwkgKiAKKwkgKiBAc2VlICNnZXRQb3B1bGF0aW9uSWRlbnRpZmllcigpCisJICovCisJU3RyaW5nIEhVTUFOID0gImh1bWFuIjsKKworCS8qKgorCSAqIEh1bWFuIG1hbGUgcG9wdWxhdGlvbi4KKwkgKiAKKwkgKiBAc2VlICNnZXRQb3B1bGF0aW9uSWRlbnRpZmllcigpCisJICovCisJU3RyaW5nIEhVTUFOX01BTEUgPSAiaHVtYW5fbWFsZSI7CisKKwkvKioKKwkgKiBIdW1hbiBhZHVsdCBtYWxlIHBvcHVsYXRpb24uCisJICogCisJICogQHNlZSAjZ2V0UG9wdWxhdGlvbklkZW50aWZpZXIoKQorCSAqLworCVN0cmluZyBIVU1BTl9NQUxFX0FEVUxUID0gImh1bWFuX21hbGVfYWR1bHQiOworCisJLyoqCisJICogSHVtYW4gY2hpbGQgbWFsZSBwb3B1bGF0aW9uLgorCSAqIAorCSAqIEBzZWUgI2dldFBvcHVsYXRpb25JZGVudGlmaWVyKCkKKwkgKi8KKwlTdHJpbmcgSFVNQU5fTUFMRV9DSElMRCA9ICJodW1hbl9tYWxlX2NoaWxkIjsKKworCS8qKgorCSAqIEh1bWFuIGFkdWx0IGZlbWFsZSBwb3B1bGF0aW9uLgorCSAqIAorCSAqIEBzZWUgI2dldFBvcHVsYXRpb25JZGVudGlmaWVyKCkKKwkgKi8KKwlTdHJpbmcgSFVNQU5fRkVNQUxFX0FEVUxUID0gImh1bWFuX2ZlbWFsZV9hZHVsdCI7CisKKwkvKioKKwkgKiBIdW1hbiBjaGlsZCBmZW1hbGUgcG9wdWxhdGlvbi4KKwkgKiAKKwkgKiBAc2VlICNnZXRQb3B1bGF0aW9uSWRlbnRpZmllcigpCisJICovCisJU3RyaW5nIEhVTUFOX0ZFTUFMRV9DSElMRCA9ICJodW1hbl9mZW1hbGVfY2hpbGQiOworCisJLyoqCisJICogR2VuZXJpYyBiaXJkIHBvcHVsYXRpb24uCisJICogCisJICogQHNlZSAjZ2V0UG9wdWxhdGlvbklkZW50aWZpZXIoKQorCSAqLworCVN0cmluZyBCSVJEID0gImJpcmQiOworCisJLyoqCisJICogRHVjayBwb3B1bGF0aW9uLgorCSAqIAorCSAqIEBzZWUgI2dldFBvcHVsYXRpb25JZGVudGlmaWVyKCkKKwkgKi8KKwlTdHJpbmcgQklSRF9EVUNLID0gImJpcmRfZHVjayI7CisKKwkvKioKKwkgKiBDaGlja2VuIHBvcHVsYXRpb24uCisJICogCisJICogQHNlZSAjZ2V0UG9wdWxhdGlvbklkZW50aWZpZXIoKQorCSAqLworCVN0cmluZyBCSVJEX0NISUNLRU4gPSAiYmlyZF9jaGlja2VuIjsKKworCS8qKgorCSAqIEdlbmVyaWMgc3dpbmUgKHBpZykgcG9wdWxhdGlvbi4KKwkgKiAKKwkgKiBAc2VlICNnZXRQb3B1bGF0aW9uSWRlbnRpZmllcigpCisJICovCisJU3RyaW5nIFNXSU5FID0gInN3aW5lIjsKKworCS8qKgorCSAqIEdlbmVyaWMgbW9zcXVpdG8gcG9wdWxhdGlvbi4KKwkgKiAKKwkgKiBAc2VlICNnZXRQb3B1bGF0aW9uSWRlbnRpZmllcigpCisJICovCisJU3RyaW5nIE1PU1FVSVRPID0gIm1vc3F1aXRvIjsKKworCS8qKgorCSAqIEFub3BoZWxlcyBtb3NxdWl0byBwb3B1bGF0aW9uLgorCSAqIAorCSAqIEBzZWUgI2dldFBvcHVsYXRpb25JZGVudGlmaWVyKCkKKwkgKi8KKwlTdHJpbmcgTU9TUVVJVE9fQU5PUEhFTEVTID0gIm1vc3F1aXRvX2Fub3BoZWxlcyI7CisKKwkvKioKKwkgKiBAcmV0dXJuIGEgc3RyaW5nIHRoYXQgaXMgYSBub24tTkxTJ2QgaWRlbnRpZmllciBvZiB0aGUgcG9wdWxhdGlvbi4gZS5nLgorCSAqICAgICAgICAgImJveXMiLCAiYmlyZHMiCisJICogQG1vZGVsCisJICovCisJU3RyaW5nIGdldFBvcHVsYXRpb25JZGVudGlmaWVyKCk7CisKKwkvKioKKwkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5Qb3B1bGF0aW9uTGFiZWwjZ2V0UG9wdWxhdGlvbklkZW50aWZpZXIgPGVtPlBvcHVsYXRpb24gSWRlbnRpZmllcjwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPlBvcHVsYXRpb24gSWRlbnRpZmllcjwvZW0+JyBhdHRyaWJ1dGUuCisJICogQHNlZSAjZ2V0UG9wdWxhdGlvbklkZW50aWZpZXIoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwl2b2lkIHNldFBvcHVsYXRpb25JZGVudGlmaWVyKFN0cmluZyB2YWx1ZSk7CisKKwkvKioKKwkgKiBAcmV0dXJuIHRoZSBOTFMnZCBuYW1lIG9mIHRoZSBwb3B1bGF0aW9uCisJICogQG1vZGVsCisJICovCisJU3RyaW5nIGdldE5hbWUoKTsKKworCS8qKgorCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLlBvcHVsYXRpb25MYWJlbCNnZXROYW1lIDxlbT5OYW1lPC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+TmFtZTwvZW0+JyBhdHRyaWJ1dGUuCisJICogQHNlZSAjZ2V0TmFtZSgpCisJICogQGdlbmVyYXRlZAorCSAqLworCXZvaWQgc2V0TmFtZShTdHJpbmcgdmFsdWUpOworCisJLyoqCisJICogQHJldHVybiB0aGUgY3VycmVudCBwb3B1bGF0aW9uIHZhbHVlCisJICogQG1vZGVsIHZvbGF0aWxlPSJ0cnVlIiB0cmFuc2llbnQ9InRydWUiIGNoYW5nZWFibGU9ImZhbHNlIgorCSAqICAgICAgICByZXNvbHZlUHJveGllcz0iZmFsc2UiCisJICovCisJUG9wdWxhdGlvbkxhYmVsVmFsdWUgZ2V0Q3VycmVudFBvcHVsYXRpb25WYWx1ZSgpOworCisJLyoqCisJICogVGhpcyB2YWx1ZSBjYW4gYmUgdXNlZCB0byBjb21wdXRlIGEgbW9yZSBhY2N1cmF0ZSBwb3B1bGF0aW9uIGRlbnNpdHkgZm9yCisJICogY2FzZXMgd2hlcmUgdGhlIGFyZWEgb2YgYSBub2RlIG1pZ2h0IGJlIHF1aXRlIGxhcmdlIHdoaWxlIHRoZSBhY3R1YWwKKwkgKiBkaXN0cmlidXRpb24gb2YgcG9wdWxhdGlvbiBtZW1iZXJzIGlzIHF1aXRlIHNtYWxsLiBUaGlzIHdvdWxkIGJlIHRoZSBjYXNlCisJICogZm9yIGluc3RhbmNlIGlmIGEgbm9kZSByZXByZXNlbnRlZCBhIGxhcmdlIGVtcHR5IGFyZWEgd2l0aCBhIGZldyBjaXRpZXMKKwkgKiBhbmQgdG93bnMgKGUuZy4sIFRoZSBTdGF0ZSBvZiBXeW9taW5nIGluIHRoZSBVbml0ZWQgU3RhdGVzKS4gSWYgdGhpcworCSAqIG9wdGlvbmFsIHZhbHVlIHZhbHVlIGlzIHNldCwgdGhlbiBpdCByZXByZXNlbnRzIHRoZSBzbWFsbGVyIGFyZWEgdGhhdCBpcworCSAqIGFjdHVhbGx5IHBvcHVsYXRlZC4gVHlwaWNhbGx5LCB0aGlzIHZhbHVlIHdvdWxkIG5vdCBiZSBzZXQgYW5kIHRoZQorCSAqIHBvcHVsYXRpb24gZGVuc2l0eSB3b3VsZCBiZSBjb21wdXRlZCBieSB1c2luZyB0aGUgYWN0dWFsIGFyZWEgb2YgdGhlCisJICogcmVnaW9uIHRoYXQgdGhpcyBsYWJlbCBsYWJlbHMuCisJICogCisJICogQHJldHVybiB0aGUgYWN0dWFsIGFyZWEgdGhhdCBpcyBwb3B1bGF0ZWQgKHNxdWFyZSBraWxvbWV0ZXJzKS4KKwkgKiBAbW9kZWwgZGVmYXVsdD0iMCIKKwkgKi8KKwlkb3VibGUgZ2V0UG9wdWxhdGVkQXJlYSgpOworCisJLyoqCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuUG9wdWxhdGlvbkxhYmVsI2dldFBvcHVsYXRlZEFyZWEgPGVtPlBvcHVsYXRlZCBBcmVhPC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5Qb3B1bGF0ZWQgQXJlYTwvZW0+JyBhdHRyaWJ1dGUuCisJICogQHNlZSAjZ2V0UG9wdWxhdGVkQXJlYSgpCisJICogQGdlbmVyYXRlZAorCSAqLworCXZvaWQgc2V0UG9wdWxhdGVkQXJlYShkb3VibGUgdmFsdWUpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+VmFsaWQgWWVhcjwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIGlzIDxjb2RlPiIyMDA2IjwvY29kZT4uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8cD4KKwkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5WYWxpZCBZZWFyPC9lbT4nIGF0dHJpYnV0ZSBpc24ndCBjbGVhciwKKwkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uCisJICogPC9wPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPlZhbGlkIFllYXI8L2VtPicgYXR0cmlidXRlLgorCSAqIEBzZWUgI3NldFZhbGlkWWVhcihpbnQpCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5MYWJlbHNQYWNrYWdlI2dldFBvcHVsYXRpb25MYWJlbF9WYWxpZFllYXIoKQorCSAqIEBtb2RlbCBkZWZhdWx0PSIyMDA2IgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlpbnQgZ2V0VmFsaWRZZWFyKCk7CisKKwkvKioKKwkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5Qb3B1bGF0aW9uTGFiZWwjZ2V0VmFsaWRZZWFyIDxlbT5WYWxpZCBZZWFyPC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5WYWxpZCBZZWFyPC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiBAc2VlICNnZXRWYWxpZFllYXIoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwl2b2lkIHNldFZhbGlkWWVhcihpbnQgdmFsdWUpOworCit9IC8vIFBvcHVsYXRpb25MYWJlbApkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL2xhYmVscy9Qb3B1bGF0aW9uTGFiZWxWYWx1ZS5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL2xhYmVscy9Qb3B1bGF0aW9uTGFiZWxWYWx1ZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI0NjAzZDAKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvbGFiZWxzL1BvcHVsYXRpb25MYWJlbFZhbHVlLmphdmEKQEAgLTAsMCArMSwzOSBAQAorLy8gUG9wdWxhdGlvbkxhYmVsVmFsdWUuamF2YQorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVsczsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogCisgKiBDb3B5cmlnaHQgKGMpIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuIAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyAKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0IAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwgCisgKiAKKyAqIENvbnRyaWJ1dG9yczogCisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguTGFiZWxWYWx1ZTsKKworLyoqCisgKiBUaGlzIGludGVyZmFjZSBkZWZpbmVzIGEgY2xhc3MgaW4gYW4gRU1GIG1vZGVsIGZvciBhIFBvcHVsYXRpb24gTGFiZWwgVmFsdWUuCisgKiAKKyAqIEBtb2RlbAorICovCitwdWJsaWMgaW50ZXJmYWNlIFBvcHVsYXRpb25MYWJlbFZhbHVlIGV4dGVuZHMgTGFiZWxWYWx1ZSB7CisKKwkvKioKKwkgKiBAcmV0dXJuIHRoZSBudW1iZXIgb2YgcG9wdWxhdGlvbiBtZW1iZXJzCisJICogQG1vZGVsCisJICovCisJZG91YmxlIGdldENvdW50KCk7CisKKwkvKioKKwkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5Qb3B1bGF0aW9uTGFiZWxWYWx1ZSNnZXRDb3VudCA8ZW0+Q291bnQ8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5Db3VudDwvZW0+JyBhdHRyaWJ1dGUuCisJICogQHNlZSAjZ2V0Q291bnQoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwl2b2lkIHNldENvdW50KGRvdWJsZSB2YWx1ZSk7CisKK30gLy8gUG9wdWxhdGlvbkxhYmVsVmFsdWUKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy9sYWJlbHMvUmVsYXRpdmVQaHlzaWNhbFJlbGF0aW9uc2hpcC5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL2xhYmVscy9SZWxhdGl2ZVBoeXNpY2FsUmVsYXRpb25zaGlwLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGUzNDA4MAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy9sYWJlbHMvUmVsYXRpdmVQaHlzaWNhbFJlbGF0aW9uc2hpcC5qYXZhCkBAIC0wLDAgKzEsMzkxIEBACisvLyBSZWxhdGl2ZVBoeXNpY2FsUmVsYXRpb25zaGlwLmphdmEKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHM7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIAorICogQ29weXJpZ2h0IChjKSAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiAKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdCAKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sIAorICogCisgKiBDb250cmlidXRvcnM6IAorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiAKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgamF2YS51dGlsLkFycmF5czsKK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbnM7CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuRW51bWVyYXRvcjsKKworLyoqCisgKiBUaGlzIGNsYXNzIHJlcHJlc2VudHMgdGhlIGVudW1lcmF0aW9uIG9mIHRoZSBkaWZmZXJlbnQgdHlwZXMgb2YgcmVsYXRpdmUKKyAqIHBoeXNpY2FsIHJlbGF0aW9uc2hpcHMuCisgKiAKKyAqIEBtb2RlbAorICovCitwdWJsaWMgZW51bSBSZWxhdGl2ZVBoeXNpY2FsUmVsYXRpb25zaGlwIGltcGxlbWVudHMgRW51bWVyYXRvcgoreworCS8qKgorCSAqIFRoZSAnPGVtPjxiPlVuc3BlY2lmaWVkPC9iPjwvZW0+JyBsaXRlcmFsIG9iamVjdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI1VOU1BFQ0lGSUVECisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJVU5TUEVDSUZJRURfTElURVJBTCgwLCAiVW5zcGVjaWZpZWQiLCAiVW5zcGVjaWZpZWQiKSwKKwkvKioKKwkgKiBUaGUgJzxlbT48Yj5BYm92ZTwvYj48L2VtPicgbGl0ZXJhbCBvYmplY3QuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNBQk9WRQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCUFCT1ZFX0xJVEVSQUwoMiwgIkFib3ZlIiwgIkFib3ZlIiksCisJLyoqCisJICogVGhlICc8ZW0+PGI+QmVsb3c8L2I+PC9lbT4nIGxpdGVyYWwgb2JqZWN0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjQkVMT1cKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlCRUxPV19MSVRFUkFMKDQsICJCZWxvdyIsICJCZWxvdyIpLAorCS8qKgorCSAqIFRoZSAnPGVtPjxiPlJpZ2h0IE9mPC9iPjwvZW0+JyBsaXRlcmFsIG9iamVjdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI1JJR0hUX09GCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJUklHSFRfT0ZfTElURVJBTCg2LCAiUmlnaHRPZiIsICJSaWdodE9mIiksCisJLyoqCisJICogVGhlICc8ZW0+PGI+TGVmdCBPZjwvYj48L2VtPicgbGl0ZXJhbCBvYmplY3QuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNMRUZUX09GCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJTEVGVF9PRl9MSVRFUkFMKDgsICJMZWZ0T2YiLCAiTGVmdE9mIiksCisJLyoqCisJICogVGhlICc8ZW0+PGI+Tm9ydGggT2Y8L2I+PC9lbT4nIGxpdGVyYWwgb2JqZWN0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjTk9SVEhfT0YKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlOT1JUSF9PRl9MSVRFUkFMKDEwLCAiTm9ydGhPZiIsICJOb3J0aE9mIiksCisJLyoqCisJICogVGhlICc8ZW0+PGI+U291dGggT2Y8L2I+PC9lbT4nIGxpdGVyYWwgb2JqZWN0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjU09VVEhfT0YKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlTT1VUSF9PRl9MSVRFUkFMKDEyLCAiU291dGhPZiIsICJTb3V0aE9mIiksCisJLyoqCisJICogVGhlICc8ZW0+PGI+V2VzdCBPZjwvYj48L2VtPicgbGl0ZXJhbCBvYmplY3QuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNXRVNUX09GCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJV0VTVF9PRl9MSVRFUkFMKDE0LCAiV2VzdE9mIiwgIldlc3RPZiIpLAorCS8qKgorCSAqIFRoZSAnPGVtPjxiPkVhc3QgT2Y8L2I+PC9lbT4nIGxpdGVyYWwgb2JqZWN0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjRUFTVF9PRgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCUVBU1RfT0ZfTElURVJBTCgxNiwgIkVhc3RPZiIsICJFYXN0T2YiKSwKKwkvKioKKwkgKiBUaGUgJzxlbT48Yj5Db250YWluczwvYj48L2VtPicgbGl0ZXJhbCBvYmplY3QuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNDT05UQUlOUworCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCUNPTlRBSU5TX0xJVEVSQUwoMTgsICJDb250YWlucyIsICJDb250YWlucyIpLAorCS8qKgorCSAqIFRoZSAnPGVtPjxiPkNvbnRhaW5lZCBCeTwvYj48L2VtPicgbGl0ZXJhbCBvYmplY3QuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNDT05UQUlORURfQlkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlDT05UQUlORURfQllfTElURVJBTCgyMCwgIkNvbnRhaW5lZEJ5IiwgIkNvbnRhaW5lZEJ5IiksCisJLyoqCisJICogVGhlICc8ZW0+PGI+T3ZlcmxhcHM8L2I+PC9lbT4nIGxpdGVyYWwgb2JqZWN0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjT1ZFUkxBUFMKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlPVkVSTEFQU19MSVRFUkFMKDIyLCAiT3ZlcmxhcHMiLCAiT3ZlcmxhcHMiKSwKKwkvKioKKwkgKiBUaGUgJzxlbT48Yj5PcmJpdHM8L2I+PC9lbT4nIGxpdGVyYWwgb2JqZWN0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjT1JCSVRTCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJT1JCSVRTX0xJVEVSQUwoMjQsICJPcmJpdHMiLCAiT3JiaXRzIik7CisJLyoqCisJICogQG1vZGVsIG5hbWU9IlVuc3BlY2lmaWVkIgorCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFVOU1BFQ0lGSUVEID0gMDsKKworCS8qKgorCSAqIE9uZSB0aGluZyBpcyBhYm92ZSBhbm90aGVyLCBidXQgbm90IHRvdWNoaW5nLgorCSAqIAorCSAqIEBtb2RlbCBuYW1lPSJBYm92ZSIKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIGludCBBQk9WRSA9IDI7CisKKwkvKioKKwkgKiBPbmUgdGhpbmcgaXMgYmVsb3cgYW5vdGhlciwgYnV0IG5vdCB0b3VjaGluZy4KKwkgKiAKKwkgKiBAbW9kZWwgbmFtZT0iQmVsb3ciCisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgQkVMT1cgPSA0OworCisJLyoqCisJICogT25lIHRoaW5nIGlzIHRvIHRoZSByaWdodCBvZiBhbm90aGVyLCBidXQgbm90IHRvdWNoaW5nLgorCSAqIAorCSAqIEBtb2RlbCBuYW1lPSJSaWdodE9mIgorCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFJJR0hUX09GID0gNjsKKworCS8qKgorCSAqIE9uZSB0aGluZyBpcyB0byB0aGUgbGVmdCBvZiBhbm90aGVyLCBidXQgbm90IHRvdWNoaW5nLgorCSAqIAorCSAqIEBtb2RlbCBuYW1lPSJMZWZ0T2YiCisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgTEVGVF9PRiA9IDg7CisKKwkvKioKKwkgKiBPbmUgdGhpbmcgaXMgdG8gdGhlIG5vcnRoIG9mIGFub3RoZXIsIGJ1dCBub3QgdG91Y2hpbmcuCisJICogCisJICogQG1vZGVsIG5hbWU9Ik5vcnRoT2YiCisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgTk9SVEhfT0YgPSAxMDsKKworCS8qKgorCSAqIE9uZSB0aGluZyBpcyB0byB0aGUgc291dGggb2YgYW5vdGhlciwgYnV0IG5vdCB0b3VjaGluZy4KKwkgKiAKKwkgKiBAbW9kZWwgbmFtZT0iU291dGhPZiIKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIGludCBTT1VUSF9PRiA9IDEyOworCisJLyoqCisJICogT25lIHRoaW5nIGlzIHRvIHRoZSB3ZXN0IG9mIGFub3RoZXIsIGJ1dCBub3QgdG91Y2hpbmcuCisJICogCisJICogQG1vZGVsIG5hbWU9Ildlc3RPZiIKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIGludCBXRVNUX09GID0gMTQ7CisKKwkvKioKKwkgKiBAbW9kZWwgbmFtZT0iRWFzdE9mIgorCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEVBU1RfT0YgPSAxNjsKKworCS8qKgorCSAqIE9uZSB0aGluZyBjb21wbGV0ZWx5IGNvbnRhaW5zIGFub3RoZXIuCisJICogCisJICogQG1vZGVsIG5hbWU9IkNvbnRhaW5zIgorCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IENPTlRBSU5TID0gMTg7CisKKwkvKioKKwkgKiBPbmUgdGhpbmcgaXMgY29udGFpbmVkIGJ5IGFub3RoZXIuCisJICogCisJICogQG1vZGVsIG5hbWU9IkNvbnRhaW5lZEJ5IgorCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IENPTlRBSU5FRF9CWSA9IDIwOworCisJLyoqCisJICogT25lIHRoaW5nIG92ZXJsYXBzIGFub3RoZXIuCisJICogCisJICogQG1vZGVsIG5hbWU9Ik92ZXJsYXBzIgorCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IE9WRVJMQVBTID0gMjI7CisKKwkvKioKKwkgKiBPbmUgb3JiaXRzIGFub3RoZXIKKwkgKiAKKwkgKiBAbW9kZWwgbmFtZT0iT3JiaXRzIgorCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IE9SQklUUyA9IDI0OworCisJLyoqCisJICogQW4gYXJyYXkgb2YgYWxsIHRoZSAnPGVtPjxiPlJlbGF0aXZlIFBoeXNpY2FsIFJlbGF0aW9uc2hpcDwvYj48L2VtPicgZW51bWVyYXRvcnMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgUmVsYXRpdmVQaHlzaWNhbFJlbGF0aW9uc2hpcFtdIFZBTFVFU19BUlJBWSA9CisJCW5ldyBSZWxhdGl2ZVBoeXNpY2FsUmVsYXRpb25zaGlwW10geworCQkJVU5TUEVDSUZJRURfTElURVJBTCwKKwkJCUFCT1ZFX0xJVEVSQUwsCisJCQlCRUxPV19MSVRFUkFMLAorCQkJUklHSFRfT0ZfTElURVJBTCwKKwkJCUxFRlRfT0ZfTElURVJBTCwKKwkJCU5PUlRIX09GX0xJVEVSQUwsCisJCQlTT1VUSF9PRl9MSVRFUkFMLAorCQkJV0VTVF9PRl9MSVRFUkFMLAorCQkJRUFTVF9PRl9MSVRFUkFMLAorCQkJQ09OVEFJTlNfTElURVJBTCwKKwkJCUNPTlRBSU5FRF9CWV9MSVRFUkFMLAorCQkJT1ZFUkxBUFNfTElURVJBTCwKKwkJCU9SQklUU19MSVRFUkFMLAorCQl9OworCisJLyoqCisJICogQSBwdWJsaWMgcmVhZC1vbmx5IGxpc3Qgb2YgYWxsIHRoZSAnPGVtPjxiPlJlbGF0aXZlIFBoeXNpY2FsIFJlbGF0aW9uc2hpcDwvYj48L2VtPicgZW51bWVyYXRvcnMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBMaXN0PFJlbGF0aXZlUGh5c2ljYWxSZWxhdGlvbnNoaXA+IFZBTFVFUyA9IENvbGxlY3Rpb25zLnVubW9kaWZpYWJsZUxpc3QoQXJyYXlzLmFzTGlzdChWQUxVRVNfQVJSQVkpKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlICc8ZW0+PGI+UmVsYXRpdmUgUGh5c2ljYWwgUmVsYXRpb25zaGlwPC9iPjwvZW0+JyBsaXRlcmFsIHdpdGggdGhlIHNwZWNpZmllZCBsaXRlcmFsIHZhbHVlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBzdGF0aWMgUmVsYXRpdmVQaHlzaWNhbFJlbGF0aW9uc2hpcCBnZXQoU3RyaW5nIGxpdGVyYWwpIHsKKwkJZm9yIChpbnQgaSA9IDA7IGkgPCBWQUxVRVNfQVJSQVkubGVuZ3RoOyArK2kpIHsKKwkJCVJlbGF0aXZlUGh5c2ljYWxSZWxhdGlvbnNoaXAgcmVzdWx0ID0gVkFMVUVTX0FSUkFZW2ldOworCQkJaWYgKHJlc3VsdC50b1N0cmluZygpLmVxdWFscyhsaXRlcmFsKSkgeworCQkJCXJldHVybiByZXN1bHQ7CisJCQl9CisJCX0KKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgJzxlbT48Yj5SZWxhdGl2ZSBQaHlzaWNhbCBSZWxhdGlvbnNoaXA8L2I+PC9lbT4nIGxpdGVyYWwgd2l0aCB0aGUgc3BlY2lmaWVkIG5hbWUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHN0YXRpYyBSZWxhdGl2ZVBoeXNpY2FsUmVsYXRpb25zaGlwIGdldEJ5TmFtZShTdHJpbmcgbmFtZSkgeworCQlmb3IgKGludCBpID0gMDsgaSA8IFZBTFVFU19BUlJBWS5sZW5ndGg7ICsraSkgeworCQkJUmVsYXRpdmVQaHlzaWNhbFJlbGF0aW9uc2hpcCByZXN1bHQgPSBWQUxVRVNfQVJSQVlbaV07CisJCQlpZiAocmVzdWx0LmdldE5hbWUoKS5lcXVhbHMobmFtZSkpIHsKKwkJCQlyZXR1cm4gcmVzdWx0OworCQkJfQorCQl9CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlICc8ZW0+PGI+UmVsYXRpdmUgUGh5c2ljYWwgUmVsYXRpb25zaGlwPC9iPjwvZW0+JyBsaXRlcmFsIHdpdGggdGhlIHNwZWNpZmllZCBpbnRlZ2VyIHZhbHVlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBzdGF0aWMgUmVsYXRpdmVQaHlzaWNhbFJlbGF0aW9uc2hpcCBnZXQoaW50IHZhbHVlKSB7CisJCXN3aXRjaCAodmFsdWUpIHsKKwkJCWNhc2UgVU5TUEVDSUZJRUQ6IHJldHVybiBVTlNQRUNJRklFRF9MSVRFUkFMOworCQkJY2FzZSBBQk9WRTogcmV0dXJuIEFCT1ZFX0xJVEVSQUw7CisJCQljYXNlIEJFTE9XOiByZXR1cm4gQkVMT1dfTElURVJBTDsKKwkJCWNhc2UgUklHSFRfT0Y6IHJldHVybiBSSUdIVF9PRl9MSVRFUkFMOworCQkJY2FzZSBMRUZUX09GOiByZXR1cm4gTEVGVF9PRl9MSVRFUkFMOworCQkJY2FzZSBOT1JUSF9PRjogcmV0dXJuIE5PUlRIX09GX0xJVEVSQUw7CisJCQljYXNlIFNPVVRIX09GOiByZXR1cm4gU09VVEhfT0ZfTElURVJBTDsKKwkJCWNhc2UgV0VTVF9PRjogcmV0dXJuIFdFU1RfT0ZfTElURVJBTDsKKwkJCWNhc2UgRUFTVF9PRjogcmV0dXJuIEVBU1RfT0ZfTElURVJBTDsKKwkJCWNhc2UgQ09OVEFJTlM6IHJldHVybiBDT05UQUlOU19MSVRFUkFMOworCQkJY2FzZSBDT05UQUlORURfQlk6IHJldHVybiBDT05UQUlORURfQllfTElURVJBTDsKKwkJCWNhc2UgT1ZFUkxBUFM6IHJldHVybiBPVkVSTEFQU19MSVRFUkFMOworCQkJY2FzZSBPUkJJVFM6IHJldHVybiBPUkJJVFNfTElURVJBTDsKKwkJfQorCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcml2YXRlIGZpbmFsIGludCB2YWx1ZTsKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByaXZhdGUgZmluYWwgU3RyaW5nIG5hbWU7CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcml2YXRlIGZpbmFsIFN0cmluZyBsaXRlcmFsOworCisJLyoqCisJICogT25seSB0aGlzIGNsYXNzIGNhbiBjb25zdHJ1Y3QgaW5zdGFuY2VzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByaXZhdGUgUmVsYXRpdmVQaHlzaWNhbFJlbGF0aW9uc2hpcChpbnQgdmFsdWUsIFN0cmluZyBuYW1lLCBTdHJpbmcgbGl0ZXJhbCkgeworCQl0aGlzLnZhbHVlID0gdmFsdWU7CisJCXRoaXMubmFtZSA9IG5hbWU7CisJCXRoaXMubGl0ZXJhbCA9IGxpdGVyYWw7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIGludCBnZXRWYWx1ZSgpIHsKKwkgIHJldHVybiB2YWx1ZTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgU3RyaW5nIGdldE5hbWUoKSB7CisJICByZXR1cm4gbmFtZTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgU3RyaW5nIGdldExpdGVyYWwoKSB7CisJICByZXR1cm4gbGl0ZXJhbDsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBsaXRlcmFsIHZhbHVlIG9mIHRoZSBlbnVtZXJhdG9yLCB3aGljaCBpcyBpdHMgc3RyaW5nIHJlcHJlc2VudGF0aW9uLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKSB7CisJCXJldHVybiBsaXRlcmFsOworCX0KK30KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy9sYWJlbHMvUmVsYXRpdmVQaHlzaWNhbFJlbGF0aW9uc2hpcExhYmVsLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvbGFiZWxzL1JlbGF0aXZlUGh5c2ljYWxSZWxhdGlvbnNoaXBMYWJlbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhmMzg5NTIKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvbGFiZWxzL1JlbGF0aXZlUGh5c2ljYWxSZWxhdGlvbnNoaXBMYWJlbC5qYXZhCkBAIC0wLDAgKzEsMzcgQEAKKy8vIFJlbGF0aXZlUGh5c2ljYWxSZWxhdGlvbnNoaXBMYWJlbC5qYXZhCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqCisgKiBUaGlzIGludGVyZmFjZSBpcyBhbiBFTUYgZGVmaW5pdGlvbiBvZiBhIGNsYXNzIHRoYXQgcmVwcmVzZW50cyBhIGxhYmVsIGZvciBhbgorICogRWRnZSB0aGF0IHJlcHJlc2VudHMgYSByZWxhdHZpZSBwaHlzaWNhbCByZWxhdGlvbnNoaXAgYmV0d2VlbiB0d28gbm9kZXMuCisgKiAKKyAqIEBtb2RlbAorICovCitwdWJsaWMgaW50ZXJmYWNlIFJlbGF0aXZlUGh5c2ljYWxSZWxhdGlvbnNoaXBMYWJlbCBleHRlbmRzCisJCVBoeXNpY2FsUmVsYXRpb25zaGlwTGFiZWwgeworCisJLyoqCisJICogVGhpcyBpcyB0aGUgc2VnbWVudCBvZiB0aGUgdHlwZSBVUkkgdGhhdCBwcmVmaXhlcyBhbGwgb3RoZXIgc2VnbWVudHMgaW4gYQorCSAqIHJlbGF0aXZlIHBoeXNpY2FsIHJlbGF0aW9uc2hpcCBsYWJlbCB0eXBlIFVSSS4KKwkgKi8KKwlTdHJpbmcgVVJJX1RZUEVfUkVMQVRJVkVfUEhZU0lDQUxfUkVMQVRJT05TSElQX0xBQkVMX1NFR01FTlQgPSBVUklfVFlQRV9QSFlTSUNBTF9SRUxBVElPTlNISVBfTEFCRUxfU0VHTUVOVAorCQkJKyAiL3JlbGF0aXZlIjsKKworCS8qKgorCSAqIEBtb2RlbCB2b2xhdGlsZT0idHJ1ZSIgdHJhbnNpZW50PSJ0cnVlIiBjaGFuZ2VhYmxlPSJmYWxzZSIKKwkgKiAgICAgICAgcmVzb2x2ZVByb3hpZXM9ImZhbHNlIgorCSAqLworCVJlbGF0aXZlUGh5c2ljYWxSZWxhdGlvbnNoaXBMYWJlbFZhbHVlIGdldEN1cnJlbnRSZWxhdGlvbnNoaXAoKTsKKworfSAvLyBSZWxhdGl2ZVBoeXNpY2FsUmVsYXRpb25zaGlwTGFiZWwKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy9sYWJlbHMvUmVsYXRpdmVQaHlzaWNhbFJlbGF0aW9uc2hpcExhYmVsVmFsdWUuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy9sYWJlbHMvUmVsYXRpdmVQaHlzaWNhbFJlbGF0aW9uc2hpcExhYmVsVmFsdWUuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZTQzNTk0Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL2xhYmVscy9SZWxhdGl2ZVBoeXNpY2FsUmVsYXRpb25zaGlwTGFiZWxWYWx1ZS5qYXZhCkBAIC0wLDAgKzEsNTcgQEAKKy8vIFJlbGF0aXZlUGh5c2ljYWxSZWxhdGlvbnNoaXBMYWJlbFZhbHVlLmphdmEKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHM7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIAorICogQ29weXJpZ2h0IChjKSAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiAKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdCAKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sIAorICogCisgKiBDb250cmlidXRvcnM6IAorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiAKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkxhYmVsVmFsdWU7CisKKy8qKgorICogVGhpcyBpbnRlcmZhY2UgZGVmaW5lcyBhIGNsYXNzIGluIGFuIEVNRiBtb2RlbCBmb3IgYSBQaHlzaWNhbCBSZWxhdGlvbnNoaXAKKyAqIExhYmVsIFZhbHVlLgorICogCisgKiBAbW9kZWwKKyAqLworcHVibGljIGludGVyZmFjZSBSZWxhdGl2ZVBoeXNpY2FsUmVsYXRpb25zaGlwTGFiZWxWYWx1ZSBleHRlbmRzIExhYmVsVmFsdWUgeworCisJLyoqCisJICogVHJ1ZSBpZiB0aGUgcmVsYXRpb25zaGlwIGludm9sdmVzIHBoeXNpY2FsIGNvbnRhY3QgKGkuZS4gdG91Y2hpbmcpLgorCSAqIEBtb2RlbAorCSAqLworCWJvb2xlYW4gaXNBZGphY2VudCgpOworCQorCS8qKgorCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLlJlbGF0aXZlUGh5c2ljYWxSZWxhdGlvbnNoaXBMYWJlbFZhbHVlI2lzQWRqYWNlbnQgPGVtPkFkamFjZW50PC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5BZGphY2VudDwvZW0+JyBhdHRyaWJ1dGUuCisJICogQHNlZSAjaXNBZGphY2VudCgpCisJICogQGdlbmVyYXRlZAorCSAqLworCXZvaWQgc2V0QWRqYWNlbnQoYm9vbGVhbiB2YWx1ZSk7CisKKwkvKioKKwkgKiBAcmV0dXJuIHRoZSBwaHlzaWNhbCByZWxhdGlvbnNoaXAgYmV0d2VlbiB0d28gdGhpbmdzLgorCSAqIEBtb2RlbAorCSAqLworCVJlbGF0aXZlUGh5c2ljYWxSZWxhdGlvbnNoaXAgZ2V0UmVsYXRpb25zaGlwKCk7CisKKwkvKioKKwkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5SZWxhdGl2ZVBoeXNpY2FsUmVsYXRpb25zaGlwTGFiZWxWYWx1ZSNnZXRSZWxhdGlvbnNoaXAgPGVtPlJlbGF0aW9uc2hpcDwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPlJlbGF0aW9uc2hpcDwvZW0+JyBhdHRyaWJ1dGUuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5SZWxhdGl2ZVBoeXNpY2FsUmVsYXRpb25zaGlwCisJICogQHNlZSAjZ2V0UmVsYXRpb25zaGlwKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJdm9pZCBzZXRSZWxhdGlvbnNoaXAoUmVsYXRpdmVQaHlzaWNhbFJlbGF0aW9uc2hpcCB2YWx1ZSk7CisKK30gLy8gUmVsYXRpdmVQaHlzaWNhbFJlbGF0aW9uc2hpcExhYmVsVmFsdWUKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy9sYWJlbHMvUm9hZFRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvbGFiZWxzL1JvYWRUcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhjYmE1NmYKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvbGFiZWxzL1JvYWRUcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbC5qYXZhCkBAIC0wLDAgKzEsMzEgQEAKKy8vIENvbW1vbkJvcmRlclJlbGF0aW9uc2hpcExhYmVsLmphdmEKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHM7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIAorICogQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiAKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdCAKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sIAorICogCisgKiBDb250cmlidXRvcnM6IAorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiAKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioKKyAqIFRoaXMgaW50ZXJmYWNlIGlzIGFuIEVNRiBkZWZpbml0aW9uIG9mIGEgY2xhc3MgdGhhdCByZXByZXNlbnRzIGEgbGFiZWwgZm9yIGFuCisgKiBFZGdlIHRoYXQgcmVwcmVzZW50cyBhIHRoZSByZWxhdGlvbnNoaXAgb2YgdHdvIG5vZGVzIGNvbm5lY3RlZCBieSBzb21lIHR5cGUgb2Ygcm9hZAorICogCisgKiBAbW9kZWwKKyAqLworcHVibGljIGludGVyZmFjZSBSb2FkVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWwgZXh0ZW5kcworCQlQaHlzaWNhbFJlbGF0aW9uc2hpcExhYmVsIHsKKworCS8qKgorCSAqIFRoaXMgaXMgdGhlIHNlZ21lbnQgb2YgdGhlIHR5cGUgVVJJIHRoYXQgcHJlZml4ZXMgYWxsIG90aGVyIHNlZ21lbnRzIGluIGEKKwkgKiByZWxhdGl2ZSBwaHlzaWNhbCByZWxhdGlvbnNoaXAgbGFiZWwgdHlwZSBVUkkuCisJICovCisJU3RyaW5nIFVSSV9UWVBFX1JPQURfVFJBTlNQT1JUX1JFTEFUSU9OU0hJUF9MQUJFTF9TRUdNRU5UID0gVVJJX1RZUEVfUEhZU0lDQUxfUkVMQVRJT05TSElQX0xBQkVMX1NFR01FTlQKKwkJCSsgIi9yb2FkIjsKKworfSAvLyBDb21tb25Cb3JkZXJSZWxhdGlvbnNoaXBMYWJlbApkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL2xhYmVscy9Sb2FkVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxWYWx1ZS5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL2xhYmVscy9Sb2FkVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxWYWx1ZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcyNDA4ZWYKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvbGFiZWxzL1JvYWRUcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbFZhbHVlLmphdmEKQEAgLTAsMCArMSw3NCBAQAorLy8gQ29tbW9uQm9yZGVyUmVsYXRpb25zaGlwTGFiZWxWYWx1ZS5qYXZhCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAKKyAqIENvcHlyaWdodCAoYykgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4gCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIAorICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wIAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQgCisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbCAKKyAqIAorICogQ29udHJpYnV0b3JzOiAKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqCisgKiBUaGlzIGludGVyZmFjZSBkZWZpbmVzIGEgY2xhc3MgaW4gYW4gRU1GIG1vZGVsIGZvciBSb2FkIFRyYW5zcG9ydAorICogUmVsYXRpb25zaGlwIExhYmVsIFZhbHVlcy4KKyAqIAorICogQG1vZGVsCisgKi8KK3B1YmxpYyBpbnRlcmZhY2UgUm9hZFRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsVmFsdWUgZXh0ZW5kcworCQlQaHlzaWNhbFJlbGF0aW9uc2hpcExhYmVsVmFsdWV7CisKKwkvKioKKwkgKiBAcmV0dXJuIHRoZSBuYW1lIG9mIHRoZSByb2FkCisJICogQG1vZGVsIGRlZmF1bHQ9InJvYWQiCisJICovCisJU3RyaW5nIGdldFJvYWROYW1lKCk7CisJCisJLyoqCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuUm9hZFRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsVmFsdWUjZ2V0Um9hZE5hbWUgPGVtPlJvYWQgTmFtZTwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+Um9hZCBOYW1lPC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiBAc2VlICNnZXRSb2FkTmFtZSgpCisJICogQGdlbmVyYXRlZAorCSAqLworCXZvaWQgc2V0Um9hZE5hbWUoU3RyaW5nIHZhbHVlKTsKKworCS8qKgorCSAqIEByZXR1cm4gdGhlIGNsYXNzIG9mIHRoZSByb2FkIChlLmcuLCBJbnRlcnN0YXRlLCBTdGF0ZSBSb3V0ZSwgZXRjLikKKwkgKiBAbW9kZWwgZGVmYXVsdD0icm91dGUiCisJICovCisJU3RyaW5nIGdldFJvYWRDbGFzcygpOworCQorCS8qKgorCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLlJvYWRUcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbFZhbHVlI2dldFJvYWRDbGFzcyA8ZW0+Um9hZCBDbGFzczwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+Um9hZCBDbGFzczwvZW0+JyBhdHRyaWJ1dGUuCisJICogQHNlZSAjZ2V0Um9hZENsYXNzKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJdm9pZCBzZXRSb2FkQ2xhc3MoU3RyaW5nIHZhbHVlKTsKKworCS8qKgorCSAqIFJvYWRzIG1heSB3YW5kZXIgYmFjayBhbmQgZm9ydGggYWNyb3NzIGEgc2luZ2xlIGJvcmRlci4gVGhpcyBjb3VudHMgdGhlIGNyb3NzaW5ncworCSAqIEByZXR1cm4gdGhlIG51bWJlciBvZiB0aW1lcyBhIHJvYWQgY3Jvc3NlcyBhIGJvcmRlciBiZXR3ZWVuIHR3byBsb2NhdGlvbnMKKwkgKiBAbW9kZWwgZGVmYXVsdD0iMSIKKwkgKi8KKwlpbnQgZ2V0TnVtYmVyQ3Jvc3NpbmdzKCk7CisKKwkvKioKKwkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5Sb2FkVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxWYWx1ZSNnZXROdW1iZXJDcm9zc2luZ3MgPGVtPk51bWJlciBDcm9zc2luZ3M8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPk51bWJlciBDcm9zc2luZ3M8L2VtPicgYXR0cmlidXRlLgorCSAqIEBzZWUgI2dldE51bWJlckNyb3NzaW5ncygpCisJICogQGdlbmVyYXRlZAorCSAqLworCXZvaWQgc2V0TnVtYmVyQ3Jvc3NpbmdzKGludCB2YWx1ZSk7CisJCisKK30gLy8gUm9hZFRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsVmFsdWUKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy9sYWJlbHMvVHJhbnNwb3J0TW9kZS5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL2xhYmVscy9UcmFuc3BvcnRNb2RlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzZjZjUwZQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy9sYWJlbHMvVHJhbnNwb3J0TW9kZS5qYXZhCkBAIC0wLDAgKzEsMjY2IEBACisvLyBUcmFuc3BvcnRNb2RlLmphdmEKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHM7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIAorICogQ29weXJpZ2h0IChjKSAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiAKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdCAKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sIAorICogCisgKiBDb250cmlidXRvcnM6IAorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiAKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgamF2YS51dGlsLkFycmF5czsKK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbnM7CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuRW51bWVyYXRvcjsKKworLyoqCisgKiBUaGlzIGNsYXNzIHJlcHJlc2VudHMgdGhlIGVudW1lcmF0aW9uIG9mIHRoZSBkaWZmZXJlbnQgdHlwZXMgb2YKKyAqIHRyYW5zcG9ydGF0aW9uIG1vZGVzIHRoYXQgY2FuIGJlIHVzZWQgdG8gbW92ZSBwb3B1bGF0aW9uIG1lbWJlcnMgYmV0d2VlbiBvbmUKKyAqIGxvY2F0aW9uIGFuZCBhbm90aGVyLgorICogCisgKiBAbW9kZWwKKyAqLworcHVibGljIGVudW0gVHJhbnNwb3J0TW9kZSBpbXBsZW1lbnRzIEVudW1lcmF0b3IKK3sKKwkvKioKKwkgKiBUaGUgJzxlbT48Yj5VbnNwZWNpZmllZDwvYj48L2VtPicgbGl0ZXJhbCBvYmplY3QuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNVTlNQRUNJRklFRAorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCVVOU1BFQ0lGSUVEX0xJVEVSQUwoMCwgInVuc3BlY2lmaWVkIiwgInVuc3BlY2lmaWVkIiksCisJLyoqCisJICogVGhlICc8ZW0+PGI+QWlyPC9iPjwvZW0+JyBsaXRlcmFsIG9iamVjdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI0FJUgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCUFJUl9MSVRFUkFMKDIsICJhaXIiLCAiYWlyIiksCisJLyoqCisJICogVGhlICc8ZW0+PGI+Um9hZDwvYj48L2VtPicgbGl0ZXJhbCBvYmplY3QuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNST0FECisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJUk9BRF9MSVRFUkFMKDQsICJyb2FkIiwgInJvYWQiKSwKKwkvKioKKwkgKiBUaGUgJzxlbT48Yj5SYWlsPC9iPjwvZW0+JyBsaXRlcmFsIG9iamVjdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI1JBSUwKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlSQUlMX0xJVEVSQUwoNiwgInJhaWwiLCAicmFpbCIpLAorCS8qKgorCSAqIFRoZSAnPGVtPjxiPk1hcmluZTwvYj48L2VtPicgbGl0ZXJhbCBvYmplY3QuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNNQVJJTkUKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlNQVJJTkVfTElURVJBTCg4LCAibWFyaW5lIiwgIm1hcmluZSIpLAorCS8qKgorCSAqIFRoZSAnPGVtPjxiPkZvb3Q8L2I+PC9lbT4nIGxpdGVyYWwgb2JqZWN0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjRk9PVAorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCUZPT1RfTElURVJBTCgxMCwgImZvb3QiLCAiZm9vdCIpOworCS8qKgorCSAqIEBtb2RlbCBuYW1lPSJ1bnNwZWNpZmllZCIKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIGludCBVTlNQRUNJRklFRCA9IDA7CisKKwkvKioKKwkgKiBAbW9kZWwgbmFtZT0iYWlyIgorCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEFJUiA9IDI7CisKKwkvKioKKwkgKiBWZWhpY3VsYXIgdHJhbnNwb3J0CisJICogCisJICogQG1vZGVsIG5hbWU9InJvYWQiCisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgUk9BRCA9IDQ7CisKKwkvKioKKwkgKiBSYWlsIHJvYWQKKwkgKiAKKwkgKiBAbW9kZWwgbmFtZT0icmFpbCIKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIGludCBSQUlMID0gNjsKKworCS8qKgorCSAqIFRyYXZlbCBieSB3YXRlcndheQorCSAqIAorCSAqIEBtb2RlbCBuYW1lPSJtYXJpbmUiCisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgTUFSSU5FID0gODsKKworCS8qKgorCSAqIFNlbGYtcG93ZXJlZCB3YWxraW5nCisJICogCisJICogQG1vZGVsIG5hbWU9ImZvb3QiCisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgRk9PVCA9IDEwOworCisJLyoqCisJICogQW4gYXJyYXkgb2YgYWxsIHRoZSAnPGVtPjxiPlRyYW5zcG9ydCBNb2RlPC9iPjwvZW0+JyBlbnVtZXJhdG9ycy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBUcmFuc3BvcnRNb2RlW10gVkFMVUVTX0FSUkFZID0KKwkJbmV3IFRyYW5zcG9ydE1vZGVbXSB7CisJCQlVTlNQRUNJRklFRF9MSVRFUkFMLAorCQkJQUlSX0xJVEVSQUwsCisJCQlST0FEX0xJVEVSQUwsCisJCQlSQUlMX0xJVEVSQUwsCisJCQlNQVJJTkVfTElURVJBTCwKKwkJCUZPT1RfTElURVJBTCwKKwkJfTsKKworCS8qKgorCSAqIEEgcHVibGljIHJlYWQtb25seSBsaXN0IG9mIGFsbCB0aGUgJzxlbT48Yj5UcmFuc3BvcnQgTW9kZTwvYj48L2VtPicgZW51bWVyYXRvcnMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBMaXN0PFRyYW5zcG9ydE1vZGU+IFZBTFVFUyA9IENvbGxlY3Rpb25zLnVubW9kaWZpYWJsZUxpc3QoQXJyYXlzLmFzTGlzdChWQUxVRVNfQVJSQVkpKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlICc8ZW0+PGI+VHJhbnNwb3J0IE1vZGU8L2I+PC9lbT4nIGxpdGVyYWwgd2l0aCB0aGUgc3BlY2lmaWVkIGxpdGVyYWwgdmFsdWUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHN0YXRpYyBUcmFuc3BvcnRNb2RlIGdldChTdHJpbmcgbGl0ZXJhbCkgeworCQlmb3IgKGludCBpID0gMDsgaSA8IFZBTFVFU19BUlJBWS5sZW5ndGg7ICsraSkgeworCQkJVHJhbnNwb3J0TW9kZSByZXN1bHQgPSBWQUxVRVNfQVJSQVlbaV07CisJCQlpZiAocmVzdWx0LnRvU3RyaW5nKCkuZXF1YWxzKGxpdGVyYWwpKSB7CisJCQkJcmV0dXJuIHJlc3VsdDsKKwkJCX0KKwkJfQorCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSAnPGVtPjxiPlRyYW5zcG9ydCBNb2RlPC9iPjwvZW0+JyBsaXRlcmFsIHdpdGggdGhlIHNwZWNpZmllZCBuYW1lLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBzdGF0aWMgVHJhbnNwb3J0TW9kZSBnZXRCeU5hbWUoU3RyaW5nIG5hbWUpIHsKKwkJZm9yIChpbnQgaSA9IDA7IGkgPCBWQUxVRVNfQVJSQVkubGVuZ3RoOyArK2kpIHsKKwkJCVRyYW5zcG9ydE1vZGUgcmVzdWx0ID0gVkFMVUVTX0FSUkFZW2ldOworCQkJaWYgKHJlc3VsdC5nZXROYW1lKCkuZXF1YWxzKG5hbWUpKSB7CisJCQkJcmV0dXJuIHJlc3VsdDsKKwkJCX0KKwkJfQorCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSAnPGVtPjxiPlRyYW5zcG9ydCBNb2RlPC9iPjwvZW0+JyBsaXRlcmFsIHdpdGggdGhlIHNwZWNpZmllZCBpbnRlZ2VyIHZhbHVlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBzdGF0aWMgVHJhbnNwb3J0TW9kZSBnZXQoaW50IHZhbHVlKSB7CisJCXN3aXRjaCAodmFsdWUpIHsKKwkJCWNhc2UgVU5TUEVDSUZJRUQ6IHJldHVybiBVTlNQRUNJRklFRF9MSVRFUkFMOworCQkJY2FzZSBBSVI6IHJldHVybiBBSVJfTElURVJBTDsKKwkJCWNhc2UgUk9BRDogcmV0dXJuIFJPQURfTElURVJBTDsKKwkJCWNhc2UgUkFJTDogcmV0dXJuIFJBSUxfTElURVJBTDsKKwkJCWNhc2UgTUFSSU5FOiByZXR1cm4gTUFSSU5FX0xJVEVSQUw7CisJCQljYXNlIEZPT1Q6IHJldHVybiBGT09UX0xJVEVSQUw7CisJCX0KKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJpdmF0ZSBmaW5hbCBpbnQgdmFsdWU7CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcml2YXRlIGZpbmFsIFN0cmluZyBuYW1lOworCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJpdmF0ZSBmaW5hbCBTdHJpbmcgbGl0ZXJhbDsKKworCS8qKgorCSAqIE9ubHkgdGhpcyBjbGFzcyBjYW4gY29uc3RydWN0IGluc3RhbmNlcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcml2YXRlIFRyYW5zcG9ydE1vZGUoaW50IHZhbHVlLCBTdHJpbmcgbmFtZSwgU3RyaW5nIGxpdGVyYWwpIHsKKwkJdGhpcy52YWx1ZSA9IHZhbHVlOworCQl0aGlzLm5hbWUgPSBuYW1lOworCQl0aGlzLmxpdGVyYWwgPSBsaXRlcmFsOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBpbnQgZ2V0VmFsdWUoKSB7CisJICByZXR1cm4gdmFsdWU7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFN0cmluZyBnZXROYW1lKCkgeworCSAgcmV0dXJuIG5hbWU7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFN0cmluZyBnZXRMaXRlcmFsKCkgeworCSAgcmV0dXJuIGxpdGVyYWw7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgbGl0ZXJhbCB2YWx1ZSBvZiB0aGUgZW51bWVyYXRvciwgd2hpY2ggaXMgaXRzIHN0cmluZyByZXByZXNlbnRhdGlvbi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkgeworCQlyZXR1cm4gbGl0ZXJhbDsKKwl9Cit9CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvbGFiZWxzL1RyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvbGFiZWxzL1RyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODUwZjIyZQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy9sYWJlbHMvVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWwuamF2YQpAQCAtMCwwICsxLDIyMCBAQAorLy8gVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWwuamF2YQorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVsczsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuRUxpc3Q7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3Q7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkR5bmFtaWNFZGdlTGFiZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLk5vZGU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLlNURU1UaW1lOworCisvKioKKyAqIFRoaXMgaW50ZXJmYWNlIGlzIGFuIEVNRiBkZWZpbml0aW9uIG9mIGEgY2xhc3MgdGhhdCByZXByZXNlbnRzIGEgbGFiZWwgZm9yIGFuCisgKiBFZGdlIHRoYXQgcmVwcmVzZW50cyB0aGUgcGh5c2ljYWwgdHJhbnNwb3J0YXRpb24gb2YgcG9wdWxhdGlvbiBtZW1iZXJzCisgKiBiZXR3ZWVuIHR3byBub2Rlcy4KKyAqIAorICogQG1vZGVsCisgKi8KK3B1YmxpYyBpbnRlcmZhY2UgVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWwgZXh0ZW5kcyBEeW5hbWljRWRnZUxhYmVsIHsKKworCS8qKgorCSAqIEBtb2RlbAorCSAqLworCVRyYW5zcG9ydE1vZGUgZ2V0VHJhbnNwb3J0TW9kZSgpOworCisJLyoqCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWwjZ2V0VHJhbnNwb3J0TW9kZSA8ZW0+VHJhbnNwb3J0IE1vZGU8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5UcmFuc3BvcnQgTW9kZTwvZW0+JyBhdHRyaWJ1dGUuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5UcmFuc3BvcnRNb2RlCisJICogQHNlZSAjZ2V0VHJhbnNwb3J0TW9kZSgpCisJICogQGdlbmVyYXRlZAorCSAqLworCXZvaWQgc2V0VHJhbnNwb3J0TW9kZShUcmFuc3BvcnRNb2RlIHZhbHVlKTsKKworCS8qKgorCSAqIEBtb2RlbAorCSAqLworCVN0cmluZyBnZXRQb3B1bGF0aW9uSWRlbnRpZmllcigpOworCisJLyoqCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWwjZ2V0UG9wdWxhdGlvbklkZW50aWZpZXIgPGVtPlBvcHVsYXRpb24gSWRlbnRpZmllcjwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPlBvcHVsYXRpb24gSWRlbnRpZmllcjwvZW0+JyBhdHRyaWJ1dGUuCisJICogQHNlZSAjZ2V0UG9wdWxhdGlvbklkZW50aWZpZXIoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwl2b2lkIHNldFBvcHVsYXRpb25JZGVudGlmaWVyKFN0cmluZyB2YWx1ZSk7CisKKwkvKioKKwkgKiBAcmV0dXJuIHRoZSBudW1iZXIgb2YgbWlsbGlzZWNvbmRzIGl0IHRha2VzIHRvIHRyYW5zcG9ydCB0aGUgdGhhdCBkZWZpbmVzCisJICogICAgICAgICB0aGUgcmF0ZSBhdCB3aGljaCBwb3B1bGF0aW9uIG1lbWJlcnMgYXJlIHRyYW5zcG9ydGVkLgorCSAqICAgICAgICAgKE1pbGxpc2Vjb25kcykKKwkgKiBAc2VlIFNURU1UaW1lCisJICogQG1vZGVsCisJICovCisJbG9uZyBnZXRSYXRlVGltZVBlcmlvZCgpOworCisJLyoqCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWwjZ2V0UmF0ZVRpbWVQZXJpb2QgPGVtPlJhdGUgVGltZSBQZXJpb2Q8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPlJhdGUgVGltZSBQZXJpb2Q8L2VtPicgYXR0cmlidXRlLgorCSAqIEBzZWUgI2dldFJhdGVUaW1lUGVyaW9kKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJdm9pZCBzZXRSYXRlVGltZVBlcmlvZChsb25nIHZhbHVlKTsKKworCS8qKgorCSAqIEByZXR1cm4gdGhlIGN1cnJlbnQgbnVtYmVyIG9mIHBvcHVsYXRpb24gbWVtYmVycyB0aGF0IGNhbiBkZXBhcnQgZ2l2ZW4KKwkgKiAgICAgICAgIHRoZSBjdXJyZW50bHkgYXZhaWxhYmxlIGRlcGFydHVyZSBjYXBhY2l0eS4KKwkgKiBAc2VlIFRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsVmFsdWUjZ2V0QXZhaWxhYmxlRGVwYXJ0dXJlQ2FwYWNpdHlQcm9wb3J0aW9uKCkKKwkgKiBAc2VlICNnZXRNYXhpbXVtRGVwYXJ0dXJlQ2FwYWNpdHkoKQorCSAqIEBtb2RlbCB2b2xhdGlsZT0idHJ1ZSIgdHJhbnNpZW50PSJ0cnVlIiBjaGFuZ2VhYmxlPSJmYWxzZSIKKwkgKi8KKwlpbnQgZ2V0RGVwYXJ0dXJlQ2FwYWNpdHkoKTsKKworCS8qKgorCSAqIEByZXR1cm4gdGhlIG1heGltdW0gbnVtYmVyIG9mIHBvcHVsYXRpb24gbWVtYmVycyB0aGF0IGNhbiBkZXBhcnQgdXNpbmcKKwkgKiAgICAgICAgIHRoZSB0cmFuc3BvcnRhdGlvbiBtb2RlL2lkZW50aWZpZXIgZWFjaCB0aW1lIHBlcmlvZAorCSAqIEBzZWUgI2dldFRpbWVQZXJpb2QoKQorCSAqIEBzZWUgI2dldE1heGltdW1DYXBhY2l0eSgpCisJICogQHNlZSAjZ2V0U3RhcnRVcERlbGF5KCkKKwkgKiBAbW9kZWwKKwkgKi8KKwlpbnQgZ2V0TWF4aW11bURlcGFydHVyZUNhcGFjaXR5KCk7CisKKwkvKioKKwkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5UcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbCNnZXRNYXhpbXVtRGVwYXJ0dXJlQ2FwYWNpdHkgPGVtPk1heGltdW0gRGVwYXJ0dXJlIENhcGFjaXR5PC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+TWF4aW11bSBEZXBhcnR1cmUgQ2FwYWNpdHk8L2VtPicgYXR0cmlidXRlLgorCSAqIEBzZWUgI2dldE1heGltdW1EZXBhcnR1cmVDYXBhY2l0eSgpCisJICogQGdlbmVyYXRlZAorCSAqLworCXZvaWQgc2V0TWF4aW11bURlcGFydHVyZUNhcGFjaXR5KGludCB2YWx1ZSk7CisKKwkvKioKKwkgKiBAcmV0dXJuIHRoZSBjdXJyZW50IG51bWJlciBvZiBwb3B1bGF0aW9uIG1lbWJlcnMgdGhhdCBjYW4gYmUgaW4gdHJhbnNpdAorCSAqICAgICAgICAgYXQgYW55IG9uZSB0aW1lLgorCSAqIAorCSAqIEBzZWUgVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxWYWx1ZSNnZXRBdmFpbGFibGVEZXBhcnR1cmVDYXBhY2l0eVByb3BvcnRpb24oKQorCSAqIEBzZWUgI2dldE1heGltdW1DYXBhY2l0eSgpCisJICogQG1vZGVsIHZvbGF0aWxlPSJ0cnVlIiB0cmFuc2llbnQ9InRydWUiIGNoYW5nZWFibGU9ImZhbHNlIgorCSAqLworCWludCBnZXRDYXBhY2l0eSgpOworCisJLyoqCisJICogQHJldHVybiB0aGUgdG90YWwgbWF4aW11bSBudW1iZXIgb2YgcG9wdWxhdGlvbiBtZW1iZXJzIHRoYXQgY2FuIGJlIGluCisJICogICAgICAgICB0cmFuc2l0IGF0IGFueSBvbmUgdGltZS4KKwkgKiBAc2VlICNnZXRUaW1lUGVyaW9kKCkKKwkgKiBAc2VlICNnZXRDYXBhY2l0eSgpCisJICogQHNlZSAjZ2V0U3RhcnRVcERlbGF5KCkKKwkgKiBAbW9kZWwKKwkgKi8KKwlpbnQgZ2V0TWF4aW11bUNhcGFjaXR5KCk7CisKKwkvKioKKwkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5UcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbCNnZXRNYXhpbXVtQ2FwYWNpdHkgPGVtPk1heGltdW0gQ2FwYWNpdHk8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5NYXhpbXVtIENhcGFjaXR5PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiBAc2VlICNnZXRNYXhpbXVtQ2FwYWNpdHkoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwl2b2lkIHNldE1heGltdW1DYXBhY2l0eShpbnQgdmFsdWUpOworCisJLyoqCisJICogQHJldHVybiB0aGUgbnVtYmVyIG9mIG1pbGxpc2Vjb25kcyBpdCB0YWtlcyBwb3B1bGF0aW9uIG1lbWJlcnMgdG8gdHJhdmVsCisJICogICAgICAgICBmcm9tIG9uZSA8Y29kZT5Ob2RlPC9jb2RlPiB0byBhbm90aGVyIHVzaW5nIHRoZSB0aGUgdHlwZSBvZgorCSAqICAgICAgICAgdHJhbnNwb3J0YXRpb24gcmVwcmVzZW50ZWQgYnkgdGhlIHJlbGF0aW9uc2hpcC4KKwkgKiBAbW9kZWwgZGVmYXVsdD0wCisJICovCisJbG9uZyBnZXRUcmFuc2l0VGltZSgpOworCisJLyoqCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWwjZ2V0VHJhbnNpdFRpbWUgPGVtPlRyYW5zaXQgVGltZTwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+VHJhbnNpdCBUaW1lPC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiBAc2VlICNnZXRUcmFuc2l0VGltZSgpCisJICogQGdlbmVyYXRlZAorCSAqLworCXZvaWQgc2V0VHJhbnNpdFRpbWUobG9uZyB2YWx1ZSk7CisKKwkvKioKKwkgKiBAcmV0dXJuIHRoZSBudW1iZXIgb2YgbWlsbGlzZWNvbmRzIGl0IHRha2VzIHRoZSB0cmFuc3BvcnRhdGlvbiBjYXBhY2l0eQorCSAqICAgICAgICAgdG8gbGluZWFybHkgaW5jcmVhc2UgZnJvbSB6ZXJvIHRvIG1heGltdW0gY2FwYWNpdHkuIFRoZSBkZXBhcnR1cmUKKwkgKiAgICAgICAgIGNhcGFjaXR5IGFsc28gaW5jcmVhc2VzIGF0IHRoaXMgcmF0ZSBmcm9tIDAgdG8gaXRzIG1heGltdW0uCisJICogQHNlZSAjZ2V0TWF4aW11bUNhcGFjaXR5KCkKKwkgKiBAc2VlICNnZXREZXBhcnR1cmVDYXBhY2l0eSgpCisJICogQG1vZGVsIGRlZmF1bHQ9MAorCSAqLworCWxvbmcgZ2V0U3RhcnRVcERlbGF5KCk7CisKKwkvKioKKwkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5UcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbCNnZXRTdGFydFVwRGVsYXkgPGVtPlN0YXJ0IFVwIERlbGF5PC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+U3RhcnQgVXAgRGVsYXk8L2VtPicgYXR0cmlidXRlLgorCSAqIEBzZWUgI2dldFN0YXJ0VXBEZWxheSgpCisJICogQGdlbmVyYXRlZAorCSAqLworCXZvaWQgc2V0U3RhcnRVcERlbGF5KGxvbmcgdmFsdWUpOworCisJLyoqCisJICogQHJldHVybiBhIFN0cmluZyB0aGF0IGlkZW50aWZpZXJzIHRoZSBzcGVjaWZpYyB0cmFuc3BvcnRhdGlvbiBpbnN0YW5jZS4KKwkgKiAgICAgICAgIEZvciBleGFtcGxlLCB0aGlzIG1pZ2h0IGJlIHRoZSBuYW1lIG9mIGEgcm9hZC4KKwkgKiBAbW9kZWwKKwkgKi8KKwlTdHJpbmcgZ2V0VHJhbnNwb3J0SWRlbnRpZmllcigpOworCisJLyoqCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWwjZ2V0VHJhbnNwb3J0SWRlbnRpZmllciA8ZW0+VHJhbnNwb3J0IElkZW50aWZpZXI8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5UcmFuc3BvcnQgSWRlbnRpZmllcjwvZW0+JyBhdHRyaWJ1dGUuCisJICogQHNlZSAjZ2V0VHJhbnNwb3J0SWRlbnRpZmllcigpCisJICogQGdlbmVyYXRlZAorCSAqLworCXZvaWQgc2V0VHJhbnNwb3J0SWRlbnRpZmllcihTdHJpbmcgdmFsdWUpOworCisJLyoqCisJICogU2VuZCBhIHJlcHJlc2VudGF0aW9uIG9mIHBvcHVsYXRpb24gbWVtYmVycyB0byBiZSAidHJhbnNwb3J0ZWQiIGZyb20gdGhlCisJICogPGNvZGU+Tm9kZTwvY29kZT4gPGNvZGU+aGVyZTwvY29kZT4gdG8gdGhlIG90aGVyIDxjb2RlPk5vZGU8L2NvZGU+CisJICogaW4gdGhlIHJlbGF0aW9uc2hpcC4KKwkgKiAKKwkgKiBAcGFyYW0gaGVyZQorCSAqICAgICAgICAgICAgdGhlIDxjb2RlPk5vZGU8L2NvZGU+IHRoZSBwb3B1bGF0aW9uIG1lbWJlcnMgZGVwYXJ0IGZyb20KKwkgKiBAcGFyYW0gZGVwYXJ0ZWVzCisJICogICAgICAgICAgICB0aGUgcG9wdWxhdGlvbiBtZW1iZXIgcmVwcmVzZW50YXRpb24KKwkgKi8KKwl2b2lkIHNlbmQoZmluYWwgTm9kZSBoZXJlLCBmaW5hbCBFT2JqZWN0IGRlcGFydGVlcyk7CisKKwkvKioKKwkgKiBSZWNlaXZlIHNvbWUgdHJhdmVsZXJzLgorCSAqIAorCSAqIEBwYXJhbSBoZXJlCisJICogICAgICAgICAgICB0aGUgPGNvZGU+Tm9kZTwvY29kZT4gb2YgYXJyaXZhbAorCSAqIEBwYXJhbSBjdXJyZW50VGltZQorCSAqICAgICAgICAgICAgdGhlIGN1cnJlbnQgdGltZSBvZiB0aGUgc2ltdWxhdGlvbgorCSAqIEByZXR1cm4gYWxsIG9mIHRoZSByZXByZXNlbnRhdGlvbnMgb2YgcG9wdWxhdGlvbiBtZW1iZXJzIHdobyBoYXZlCisJICogICAgICAgICB0cmF2ZWxlZCB0byB0aGUgPGNvZGU+Tm9kZTwvY29kZT4gPGNvZGU+aGVyZTwvY29kZT4gYnkgdGhlCisJICogICAgICAgICA8Y29kZT5jdXJyZW50VGltZTwvY29kZT4KKwkgKiBAc2VlIFNURU1UaW1lCisJICovCisJRUxpc3Q8RU9iamVjdD4gcmVjZWl2ZShmaW5hbCBOb2RlIGhlcmUsIGZpbmFsIFNURU1UaW1lIGN1cnJlbnRUaW1lKTsKKworCS8qKgorCSAqIEByZXR1cm4gdGhlIGN1cnJlbnQgdHJhbnNwb3J0IHJlbGF0aW9uc2hpcCB2YWx1ZQorCSAqIEBtb2RlbCB2b2xhdGlsZT0idHJ1ZSIgdHJhbnNpZW50PSJ0cnVlIiBjaGFuZ2VhYmxlPSJmYWxzZSIKKwkgKiAgICAgICAgcmVzb2x2ZVByb3hpZXM9ImZhbHNlIgorCSAqLworCVRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsVmFsdWUgZ2V0Q3VycmVudFRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsVmFsdWUoKTsKK30gLy8gVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWwKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy9sYWJlbHMvVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxWYWx1ZS5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL2xhYmVscy9UcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbFZhbHVlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTdlYTczMgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy9sYWJlbHMvVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxWYWx1ZS5qYXZhCkBAIC0wLDAgKzEsNDcgQEAKKy8vIFRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsVmFsdWUuamF2YQorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVsczsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguTGFiZWxWYWx1ZTsKKworLyoqCisgKiBUaGUgdmFsdWUgb2YgYSB0cmFuc3BvcnRhdGlvbiByZWxhdGlvbnNoaXAgbGFiZWwgaXMgdGhlIGN1cnJlbnQgYXZhaWxhYmxlCisgKiBjYXBhY2l0eSBleHByZXNzZWQgYXMgYSBwcm9wb3J0aW9uIG9mIHRoZSBtYXhpbXVtIGNhcGFjaXR5IG9mIHRoZQorICogdHJhbnNwb3J0YXRpb24gbW9kZS9pZGVudGlmaWVyLiBUeXBpY2FsbHksIHRoaXMgdmFsdWUgd2lsbCBiZSAxLjAgKDEwMCUpLCBidXQKKyAqIGl0IGNvdWxkIGJlIHJlZHVjZWQgYnkgdHJhdmVsIHJlc3RyaWN0aW9ucy4KKyAqIAorICogQHNlZSBUcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbCNnZXRNYXhpbXVtQ2FwYWNpdHkoKQorICogCisgKiBAbW9kZWwKKyAqLworcHVibGljIGludGVyZmFjZSBUcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbFZhbHVlIGV4dGVuZHMgTGFiZWxWYWx1ZSB7CisKKwkvKioKKwkgKiBAcmV0dXJuIHRoZSBwcm9wb3J0aW9uIChpLmUuLCAwLjAtMS4wKSBvZiB0aGUgZGVwYXJ0dXJlIHRyYW5zcG9ydGF0aW9uCisJICogICAgICAgICBjYXBhY2l0eSB0aGF0IGlzIGF2YWlsYWJsZS4KKwkgKiBAc2VlIFRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsI2dldERlcGFydHVyZUNhcGFjaXR5KCkKKwkgKiBAbW9kZWwgZGVmYXVsdD0iMS4wIgorCSAqLworCWRvdWJsZSBnZXRBdmFpbGFibGVEZXBhcnR1cmVDYXBhY2l0eVByb3BvcnRpb24oKTsKKworCS8qKgorCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLlRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsVmFsdWUjZ2V0QXZhaWxhYmxlRGVwYXJ0dXJlQ2FwYWNpdHlQcm9wb3J0aW9uIDxlbT5BdmFpbGFibGUgRGVwYXJ0dXJlIENhcGFjaXR5IFByb3BvcnRpb248L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPkF2YWlsYWJsZSBEZXBhcnR1cmUgQ2FwYWNpdHkgUHJvcG9ydGlvbjwvZW0+JyBhdHRyaWJ1dGUuCisJICogQHNlZSAjZ2V0QXZhaWxhYmxlRGVwYXJ0dXJlQ2FwYWNpdHlQcm9wb3J0aW9uKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJdm9pZCBzZXRBdmFpbGFibGVEZXBhcnR1cmVDYXBhY2l0eVByb3BvcnRpb24oZG91YmxlIHZhbHVlKTsKKworfSAvLyBUcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbFZhbHVlCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvbGFiZWxzL2ltcGwvQXJlYUxhYmVsSW1wbC5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL2xhYmVscy9pbXBsL0FyZWFMYWJlbEltcGwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNmIxMmZjCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL2xhYmVscy9pbXBsL0FyZWFMYWJlbEltcGwuamF2YQpAQCAtMCwwICsxLDExOCBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5pbXBsOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5VUkk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzczsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuU1RFTVVSSTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguaW1wbC5TdGF0aWNOb2RlTGFiZWxJbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLkFyZWFMYWJlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5BcmVhTGFiZWxWYWx1ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5MYWJlbHNGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLkxhYmVsc1BhY2thZ2U7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPkFyZWEgTGFiZWw8L2I+PC9lbT4nLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiA8cD4KKyAqIFRoZSBmb2xsb3dpbmcgZmVhdHVyZXMgYXJlIGltcGxlbWVudGVkOgorICogPHVsPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLmltcGwuQXJlYUxhYmVsSW1wbCNnZXRDdXJyZW50QXJlYVZhbHVlIDxlbT5DdXJyZW50IEFyZWEgVmFsdWU8L2VtPn08L2xpPgorICogPC91bD4KKyAqIDwvcD4KKyAqCisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBBcmVhTGFiZWxJbXBsIGV4dGVuZHMgU3RhdGljTm9kZUxhYmVsSW1wbCBpbXBsZW1lbnRzIEFyZWFMYWJlbCB7CisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogCisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlwcm90ZWN0ZWQgQXJlYUxhYmVsSW1wbCgpIHsKKwkJc3VwZXIoKTsKKwkJc2V0Q3VycmVudFZhbHVlKExhYmVsc0ZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZUFyZWFMYWJlbFZhbHVlKCkpOworCX0gLy8gQXJlYUxhYmVsSW1wbAorCisJLyoqCisJICogQHBhcmFtIGFkbWluTGV2ZWwKKwkgKiBAcGFyYW0gY291bnRyeUNvZGUKKwkgKiBAcGFyYW0gbm9kZUNvZGUKKwkgKiBAcmV0dXJuIHRoZSBVUkkgZm9yIGEgc3BlY2lmaWMgYXJlYSBsYWJlbCBmb3IgYSBnZW9ncmFwaGljIHJlZ2lvbgorCSAqLworCXB1YmxpYyBzdGF0aWMgVVJJIGNyZWF0ZUFyZWFMYWJlbFVSSShmaW5hbCBpbnQgYWRtaW5MZXZlbCwKKwkJCWZpbmFsIFN0cmluZyBjb3VudHJ5Q29kZSwgZmluYWwgU3RyaW5nIG5vZGVDb2RlKSB7CisJCWZpbmFsIFVSSSByZXRWYWx1ZSA9IFNURU1VUkkuY3JlYXRlVVJJKFVSSV9UWVBFX0FSRUFfTEFCRUxfU0VHTUVOVAorCQkJCSsgIi8iICsgY291bnRyeUNvZGUgKyAiLyIgKyBhZG1pbkxldmVsICsgIi8iICsgbm9kZUNvZGUpOworCQlyZXR1cm4gcmV0VmFsdWU7CisJfSAvLyBjcmVhdGVBcmVhTGFiZWxVUkkKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgRUNsYXNzIGVTdGF0aWNDbGFzcygpIHsKKwkJcmV0dXJuIExhYmVsc1BhY2thZ2UuTGl0ZXJhbHMuQVJFQV9MQUJFTDsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEByZXR1cm4KKwkgKiAKKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCXB1YmxpYyBBcmVhTGFiZWxWYWx1ZSBnZXRDdXJyZW50QXJlYVZhbHVlKCkgeworCQlyZXR1cm4gKEFyZWFMYWJlbFZhbHVlKSBnZXRDdXJyZW50VmFsdWUoKTsKKwl9IC8vIGdldEN1cnJlbnRBcmVhVmFsdWUKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogCisJICogQHBhcmFtIGZlYXR1cmVJRAorCSAqIEBwYXJhbSByZXNvbHZlCisJICogQHBhcmFtIGNvcmVUeXBlCisJICogQHJldHVybgorCSAqIAorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgT2JqZWN0IGVHZXQoaW50IGZlYXR1cmVJRCwgYm9vbGVhbiByZXNvbHZlLCBib29sZWFuIGNvcmVUeXBlKSB7CisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7CisJCQljYXNlIExhYmVsc1BhY2thZ2UuQVJFQV9MQUJFTF9fQ1VSUkVOVF9BUkVBX1ZBTFVFOgorCQkJCXJldHVybiBnZXRDdXJyZW50QXJlYVZhbHVlKCk7CisJCX0KKwkJcmV0dXJuIHN1cGVyLmVHZXQoZmVhdHVyZUlELCByZXNvbHZlLCBjb3JlVHlwZSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAcGFyYW0gZmVhdHVyZUlECisJICogQHJldHVybgorCSAqIAorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgYm9vbGVhbiBlSXNTZXQoaW50IGZlYXR1cmVJRCkgeworCQlzd2l0Y2ggKGZlYXR1cmVJRCkgeworCQkJY2FzZSBMYWJlbHNQYWNrYWdlLkFSRUFfTEFCRUxfX0NVUlJFTlRfQVJFQV9WQUxVRToKKwkJCQlyZXR1cm4gZ2V0Q3VycmVudEFyZWFWYWx1ZSgpICE9IG51bGw7CisJCX0KKwkJcmV0dXJuIHN1cGVyLmVJc1NldChmZWF0dXJlSUQpOworCX0KKworfSAvLyBBcmVhTGFiZWxJbXBsCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvbGFiZWxzL2ltcGwvQXJlYUxhYmVsVmFsdWVJbXBsLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvbGFiZWxzL2ltcGwvQXJlYUxhYmVsVmFsdWVJbXBsLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDQ1NzJhMwotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy9sYWJlbHMvaW1wbC9BcmVhTGFiZWxWYWx1ZUltcGwuamF2YQpAQCAtMCwwICsxLDI3MiBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5pbXBsOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5pbXBsLkVOb3RpZmljYXRpb25JbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5pbXBsLkxhYmVsVmFsdWVJbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLkFyZWFMYWJlbFZhbHVlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLkxhYmVsc1BhY2thZ2U7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPkFyZWEgTGFiZWwgVmFsdWU8L2I+PC9lbT4nLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiA8cD4KKyAqIFRoZSBmb2xsb3dpbmcgZmVhdHVyZXMgYXJlIGltcGxlbWVudGVkOgorICogPHVsPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLmltcGwuQXJlYUxhYmVsVmFsdWVJbXBsI2dldEFyZWEgPGVtPkFyZWE8L2VtPn08L2xpPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLmltcGwuQXJlYUxhYmVsVmFsdWVJbXBsI2dldEF2ZXJhZ2VFeHRlbnQgPGVtPkF2ZXJhZ2UgRXh0ZW50PC9lbT59PC9saT4KKyAqIDwvdWw+CisgKiA8L3A+CisgKgorICogQGdlbmVyYXRlZAorICovCitAU3VwcHJlc3NXYXJuaW5ncygiYm94aW5nIikKK3B1YmxpYyBjbGFzcyBBcmVhTGFiZWxWYWx1ZUltcGwgZXh0ZW5kcyBMYWJlbFZhbHVlSW1wbCBpbXBsZW1lbnRzCisJCUFyZWFMYWJlbFZhbHVlIHsKKwkvKioKKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0QXJlYSgpIDxlbT5BcmVhPC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZ2V0QXJlYSgpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBkb3VibGUgQVJFQV9FREVGQVVMVCA9IDAuMDsKKworCS8qKgorCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldEFyZWEoKSA8ZW0+QXJlYTwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI2dldEFyZWEoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBkb3VibGUgYXJlYSA9IEFSRUFfRURFRkFVTFQ7CisKKwkvKioKKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0QXZlcmFnZUV4dGVudCgpIDxlbT5BdmVyYWdlIEV4dGVudDwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZ2V0QXZlcmFnZUV4dGVudCgpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBkb3VibGUgQVZFUkFHRV9FWFRFTlRfRURFRkFVTFQgPSAwLjA7CisKKwkvKioKKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRBdmVyYWdlRXh0ZW50KCkgPGVtPkF2ZXJhZ2UgRXh0ZW50PC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNnZXRBdmVyYWdlRXh0ZW50KCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgZG91YmxlIGF2ZXJhZ2VFeHRlbnQgPSBBVkVSQUdFX0VYVEVOVF9FREVGQVVMVDsKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgQXJlYUxhYmVsVmFsdWVJbXBsKCkgeworCQlzdXBlcigpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgRUNsYXNzIGVTdGF0aWNDbGFzcygpIHsKKwkJcmV0dXJuIExhYmVsc1BhY2thZ2UuTGl0ZXJhbHMuQVJFQV9MQUJFTF9WQUxVRTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEByZXR1cm4KKwkgKiAKKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIGRvdWJsZSBnZXRBcmVhKCkgeworCQlyZXR1cm4gYXJlYTsKKwl9CisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5pbXBsLkxhYmVsVmFsdWVJbXBsI3Jlc2V0KCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCByZXNldCgpIHsKKwkJLy8gV2UgZG9uJ3QgcmVzZXQKKwl9IC8vIHJlc2V0CisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uU2FuaXR5Q2hlY2tlciNzYW5lKCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgYm9vbGVhbiBzYW5lKCkgeworCQlib29sZWFuIHJldFZhbHVlID0gdHJ1ZTsKKworCQkvLyBUaGUgYXJlYSBzaG91bGQgYmUgZ3JlYXRlciB0aGFuIHplcm8KKwkJcmV0VmFsdWUgPSByZXRWYWx1ZSAmJiBnZXRBcmVhKCkgPiAwOworCQkvL2Fzc2VydCByZXRWYWx1ZTsKKworCQlyZXR1cm4gcmV0VmFsdWU7CisJfSAvLyBzYW5lCisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBwYXJhbSBuZXdBcmVhCisJICogCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRBcmVhKGRvdWJsZSBuZXdBcmVhKSB7CisJCWRvdWJsZSBvbGRBcmVhID0gZ2V0QXJlYSgpOworCQlhcmVhID0gbmV3QXJlYTsKKwkJaWYoZ2V0QXJlYSgpID49IDEuMCkgeworCQkJc2V0QXZlcmFnZUV4dGVudChNYXRoLnNxcnQoZ2V0QXJlYSgpKSk7CisJCX0gZWxzZSB7CisJCQlzZXRBdmVyYWdlRXh0ZW50KDEuMCk7CisJCX0KKwkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQorCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgTGFiZWxzUGFja2FnZS5BUkVBX0xBQkVMX1ZBTFVFX19BUkVBLCBvbGRBcmVhLCBnZXRBcmVhKCkpKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgZG91YmxlIGdldEF2ZXJhZ2VFeHRlbnQoKSB7CisJCXJldHVybiBhdmVyYWdlRXh0ZW50OworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIHNldEF2ZXJhZ2VFeHRlbnQoZG91YmxlIG5ld0F2ZXJhZ2VFeHRlbnQpIHsKKwkJZG91YmxlIG9sZEF2ZXJhZ2VFeHRlbnQgPSBhdmVyYWdlRXh0ZW50OworCQlhdmVyYWdlRXh0ZW50ID0gbmV3QXZlcmFnZUV4dGVudDsKKwkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQorCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgTGFiZWxzUGFja2FnZS5BUkVBX0xBQkVMX1ZBTFVFX19BVkVSQUdFX0VYVEVOVCwgb2xkQXZlcmFnZUV4dGVudCwgYXZlcmFnZUV4dGVudCkpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogCisJICogQHBhcmFtIGZlYXR1cmVJRAorCSAqIEBwYXJhbSByZXNvbHZlCisJICogQHBhcmFtIGNvcmVUeXBlCisJICogQHJldHVybgorCSAqIAorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKworCUBPdmVycmlkZQorCXB1YmxpYyBPYmplY3QgZUdldChpbnQgZmVhdHVyZUlELCBib29sZWFuIHJlc29sdmUsIGJvb2xlYW4gY29yZVR5cGUpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJCWNhc2UgTGFiZWxzUGFja2FnZS5BUkVBX0xBQkVMX1ZBTFVFX19BUkVBOgorCQkJCXJldHVybiBnZXRBcmVhKCk7CisJCQljYXNlIExhYmVsc1BhY2thZ2UuQVJFQV9MQUJFTF9WQUxVRV9fQVZFUkFHRV9FWFRFTlQ6CisJCQkJcmV0dXJuIGdldEF2ZXJhZ2VFeHRlbnQoKTsKKwkJfQorCQlyZXR1cm4gc3VwZXIuZUdldChmZWF0dXJlSUQsIHJlc29sdmUsIGNvcmVUeXBlKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBwYXJhbSBmZWF0dXJlSUQKKwkgKiBAcGFyYW0gbmV3VmFsdWUKKwkgKiAKKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgZVNldChpbnQgZmVhdHVyZUlELCBPYmplY3QgbmV3VmFsdWUpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJCWNhc2UgTGFiZWxzUGFja2FnZS5BUkVBX0xBQkVMX1ZBTFVFX19BUkVBOgorCQkJCXNldEFyZWEoKERvdWJsZSluZXdWYWx1ZSk7CisJCQkJcmV0dXJuOworCQkJY2FzZSBMYWJlbHNQYWNrYWdlLkFSRUFfTEFCRUxfVkFMVUVfX0FWRVJBR0VfRVhURU5UOgorCQkJCXNldEF2ZXJhZ2VFeHRlbnQoKERvdWJsZSluZXdWYWx1ZSk7CisJCQkJcmV0dXJuOworCQl9CisJCXN1cGVyLmVTZXQoZmVhdHVyZUlELCBuZXdWYWx1ZSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAcGFyYW0gZmVhdHVyZUlECisJICogCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGVVbnNldChpbnQgZmVhdHVyZUlEKSB7CisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7CisJCQljYXNlIExhYmVsc1BhY2thZ2UuQVJFQV9MQUJFTF9WQUxVRV9fQVJFQToKKwkJCQlzZXRBcmVhKEFSRUFfRURFRkFVTFQpOworCQkJCXJldHVybjsKKwkJCWNhc2UgTGFiZWxzUGFja2FnZS5BUkVBX0xBQkVMX1ZBTFVFX19BVkVSQUdFX0VYVEVOVDoKKwkJCQlzZXRBdmVyYWdlRXh0ZW50KEFWRVJBR0VfRVhURU5UX0VERUZBVUxUKTsKKwkJCQlyZXR1cm47CisJCX0KKwkJc3VwZXIuZVVuc2V0KGZlYXR1cmVJRCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAcGFyYW0gZmVhdHVyZUlECisJICogQHJldHVybgorCSAqIAorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgYm9vbGVhbiBlSXNTZXQoaW50IGZlYXR1cmVJRCkgeworCQlzd2l0Y2ggKGZlYXR1cmVJRCkgeworCQkJY2FzZSBMYWJlbHNQYWNrYWdlLkFSRUFfTEFCRUxfVkFMVUVfX0FSRUE6CisJCQkJcmV0dXJuIGFyZWEgIT0gQVJFQV9FREVGQVVMVDsKKwkJCWNhc2UgTGFiZWxzUGFja2FnZS5BUkVBX0xBQkVMX1ZBTFVFX19BVkVSQUdFX0VYVEVOVDoKKwkJCQlyZXR1cm4gYXZlcmFnZUV4dGVudCAhPSBBVkVSQUdFX0VYVEVOVF9FREVGQVVMVDsKKwkJfQorCQlyZXR1cm4gc3VwZXIuZUlzU2V0KGZlYXR1cmVJRCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAcmV0dXJuCisJICogCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkgeworCQlpZiAoZUlzUHJveHkoKSkKKwkJCXJldHVybiBzdXBlci50b1N0cmluZygpOworCisJCVN0cmluZ0J1ZmZlciByZXN1bHQgPSBuZXcgU3RyaW5nQnVmZmVyKCk7CisJCXJlc3VsdC5hcHBlbmQoZ2V0QXJlYSgpKTsKKwkJcmVzdWx0LmFwcGVuZCgiIGttXjIiKTsKKwkJcmV0dXJuIHJlc3VsdC50b1N0cmluZygpOworCX0KKworfSAvLyBBcmVhTGFiZWxWYWx1ZUltcGwKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy9sYWJlbHMvaW1wbC9Db21tb25Cb3JkZXJSZWxhdGlvbnNoaXBMYWJlbEltcGwuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy9sYWJlbHMvaW1wbC9Db21tb25Cb3JkZXJSZWxhdGlvbnNoaXBMYWJlbEltcGwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZDE4NThhCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL2xhYmVscy9pbXBsL0NvbW1vbkJvcmRlclJlbGF0aW9uc2hpcExhYmVsSW1wbC5qYXZhCkBAIC0wLDAgKzEsMTEwIEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLmltcGw7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5FZGdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5FZGdlTGFiZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLk5vZGU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmltcGwuRWRnZUltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuQ29tbW9uQm9yZGVyUmVsYXRpb25zaGlwTGFiZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuQ29tbW9uQm9yZGVyUmVsYXRpb25zaGlwTGFiZWxWYWx1ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5MYWJlbHNGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLkxhYmVsc1BhY2thZ2U7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPkNvbW1vbiBCb3JkZXIgUmVsYXRpb25zaGlwIExhYmVsPC9iPjwvZW0+Jy4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogPHA+CisgKiA8L3A+CisgKgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgQ29tbW9uQm9yZGVyUmVsYXRpb25zaGlwTGFiZWxJbXBsIGV4dGVuZHMKKwkJUGh5c2ljYWxSZWxhdGlvbnNoaXBMYWJlbEltcGwgaW1wbGVtZW50cyBDb21tb25Cb3JkZXJSZWxhdGlvbnNoaXBMYWJlbCB7CisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogCisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlwcm90ZWN0ZWQgQ29tbW9uQm9yZGVyUmVsYXRpb25zaGlwTGFiZWxJbXBsKCkgeworCQlzdXBlcigpOworCQlzZXRDdXJyZW50VmFsdWUoTGFiZWxzRmFjdG9yeS5lSU5TVEFOQ0UKKwkJCQkuY3JlYXRlQ29tbW9uQm9yZGVyUmVsYXRpb25zaGlwTGFiZWxWYWx1ZSgpKTsKKwl9IC8vIENvbW1vbkJvcmRlclJlbGF0aW9uc2hpcExhYmVsSW1wbAorCisJLyoqCisJICogQ3JlYXRlIGFuIGVkZ2UgYmV0d2VlbiB0d28gbm9kZXMgdGhhdCByZXByZXNlbnRzIHRoZSByZWxhdGlvbnNoaXAgb2YKKwkgKiBzaGFyaW5nIGEgY29tbW9uIGJvcmRlci4KKwkgKiAKKwkgKiBAcGFyYW0gbm9kZUEKKwkgKiAgICAgICAgICAgIHRoZSBmaXJzdCBub2RlCisJICogQHBhcmFtIG5vZGVCCisJICogICAgICAgICAgICB0aGUgc2Vjb25kIG5vZGUKKwkgKiBAcGFyYW0gYm9yZGVyTGVuZ3RoCisJICogICAgICAgICAgICB0aGUgbGVuZ3RoIG9mIHRoZSBib3JkZXIgKGttJ3MpCisJICogQHJldHVybiBhbiBlZGdlIGJldHdlZW4gdGhlIHR3byBub2RlcworCSAqLworCXB1YmxpYyBzdGF0aWMgRWRnZSBjcmVhdGVDb21tb25Cb3JkZXJSZWxhdGlvbnNoaXAoZmluYWwgTm9kZSBub2RlQSwKKwkJCWZpbmFsIE5vZGUgbm9kZUIsIGZpbmFsIGludCBib3JkZXJMZW5ndGgpIHsKKwkJZmluYWwgRWRnZSByZXRWYWx1ZSA9IEVkZ2VJbXBsLmNyZWF0ZUVkZ2Uobm9kZUEsIG5vZGVCKTsKKwkJZmluYWwgQ29tbW9uQm9yZGVyUmVsYXRpb25zaGlwTGFiZWwgbGFiZWwgPSBMYWJlbHNGYWN0b3J5LmVJTlNUQU5DRQorCQkJCS5jcmVhdGVDb21tb25Cb3JkZXJSZWxhdGlvbnNoaXBMYWJlbCgpOworCQlsYWJlbC5zZXRVUklPZklkZW50aWZpYWJsZVRvQmVMYWJlbGVkKHJldFZhbHVlLmdldFVSSSgpKTsKKworCQlmaW5hbCBDb21tb25Cb3JkZXJSZWxhdGlvbnNoaXBMYWJlbFZhbHVlIGxhYmVsVmFsdWUgPSAoQ29tbW9uQm9yZGVyUmVsYXRpb25zaGlwTGFiZWxWYWx1ZSkgbGFiZWwKKwkJCQkuZ2V0Q3VycmVudFZhbHVlKCk7CisJCWxhYmVsVmFsdWUuc2V0Qm9yZGVyTGVuZ3RoKGJvcmRlckxlbmd0aCk7CisKKwkJcmV0VmFsdWUuc2V0TGFiZWwobGFiZWwpOworCisJCXJldHVybiByZXRWYWx1ZTsKKwl9IC8vIGNyZWF0ZUNvbW1vbkJvcmRlclJlbGF0aW9uc2hpcAorCisJLyoqCisJICogQHBhcmFtIG5vZGUKKwkgKiAgICAgICAgICAgIHRoZSBub2RlCisJICogQHJldHVybiB0aGUgRWRnZXMgdGhhdCByZXByZXNlbnQgdGhlIGNvbW1vbiBib3JkZXIgcmVsYXRpb25zaGlwIGJldHdlZW4KKwkgKiAgICAgICAgIHRoZSBub2RlIGFuZCBvdGhlciBub2Rlcy4KKwkgKi8KKwlwdWJsaWMgc3RhdGljIExpc3Q8RWRnZT4gZ2V0Q29tbW9uQm9yZGVyRWRnZXNGcm9tTm9kZShmaW5hbCBOb2RlIG5vZGUpIHsKKwkJZmluYWwgTGlzdDxFZGdlPiByZXRWYWx1ZSA9IG5ldyBBcnJheUxpc3Q8RWRnZT4oKTsKKworCQlpZihub2RlID09IG51bGwgfHwgbm9kZS5nZXRFZGdlcygpID09IG51bGwpIHJldHVybiByZXRWYWx1ZTsKKwkJCisJCWZvciAoSXRlcmF0b3I8RWRnZT4gZWRnZUl0ZXIgPSBub2RlLmdldEVkZ2VzKCkuaXRlcmF0b3IoKTsgZWRnZUl0ZXIuaGFzTmV4dCgpOykgeworCQkJZmluYWwgRWRnZSBlZGdlID0gZWRnZUl0ZXIubmV4dCgpOworCQkJZmluYWwgRWRnZUxhYmVsIGVkZ2VMYWJlbCA9IGVkZ2UuZ2V0TGFiZWwoKTsKKwkJCS8vIElzIHRoZSBsYWJlbCBhIGNvbW1vbiBib3JkZXIgbGFiZWw/CisJCQlpZiAoZWRnZUxhYmVsIGluc3RhbmNlb2YgQ29tbW9uQm9yZGVyUmVsYXRpb25zaGlwTGFiZWwpIHsKKwkJCQkvLyBZZXMKKwkJCQlyZXRWYWx1ZS5hZGQoZWRnZSk7CisJCQl9CisJCX0gLy8gZm9yCisKKwkJcmV0dXJuIHJldFZhbHVlOworCX0gLy8gZ2V0Q29tbW9uQm9yZGVyRWRnZXNGcm9tTm9kZQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCBFQ2xhc3MgZVN0YXRpY0NsYXNzKCkgeworCQlyZXR1cm4gTGFiZWxzUGFja2FnZS5MaXRlcmFscy5DT01NT05fQk9SREVSX1JFTEFUSU9OU0hJUF9MQUJFTDsKKwl9CisKK30gLy8gQ29tbW9uQm9yZGVyUmVsYXRpb25zaGlwTGFiZWxJbXBsCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvbGFiZWxzL2ltcGwvQ29tbW9uQm9yZGVyUmVsYXRpb25zaGlwTGFiZWxWYWx1ZUltcGwuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy9sYWJlbHMvaW1wbC9Db21tb25Cb3JkZXJSZWxhdGlvbnNoaXBMYWJlbFZhbHVlSW1wbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIzNDhlMDMKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvbGFiZWxzL2ltcGwvQ29tbW9uQm9yZGVyUmVsYXRpb25zaGlwTGFiZWxWYWx1ZUltcGwuamF2YQpAQCAtMCwwICsxLDE1OSBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5pbXBsOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5pbXBsLkVOb3RpZmljYXRpb25JbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLkNvbW1vbkJvcmRlclJlbGF0aW9uc2hpcExhYmVsVmFsdWU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuTGFiZWxzUGFja2FnZTsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiBBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+Q29tbW9uIEJvcmRlciBSZWxhdGlvbnNoaXAgTGFiZWwgVmFsdWU8L2I+PC9lbT4nLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiA8cD4KKyAqIFRoZSBmb2xsb3dpbmcgZmVhdHVyZXMgYXJlIGltcGxlbWVudGVkOgorICogPHVsPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLmltcGwuQ29tbW9uQm9yZGVyUmVsYXRpb25zaGlwTGFiZWxWYWx1ZUltcGwjZ2V0Qm9yZGVyTGVuZ3RoIDxlbT5Cb3JkZXIgTGVuZ3RoPC9lbT59PC9saT4KKyAqIDwvdWw+CisgKiA8L3A+CisgKgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgQ29tbW9uQm9yZGVyUmVsYXRpb25zaGlwTGFiZWxWYWx1ZUltcGwgZXh0ZW5kcworCQlQaHlzaWNhbFJlbGF0aW9uc2hpcExhYmVsVmFsdWVJbXBsIGltcGxlbWVudHMKKwkJQ29tbW9uQm9yZGVyUmVsYXRpb25zaGlwTGFiZWxWYWx1ZSB7CisJLyoqCisJICogVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldEJvcmRlckxlbmd0aCgpIDxlbT5Cb3JkZXIgTGVuZ3RoPC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZ2V0Qm9yZGVyTGVuZ3RoKCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIGRvdWJsZSBCT1JERVJfTEVOR1RIX0VERUZBVUxUID0gMC4wOworCisJLyoqCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0Qm9yZGVyTGVuZ3RoKCkgPGVtPkJvcmRlciBMZW5ndGg8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNnZXRCb3JkZXJMZW5ndGgoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBkb3VibGUgYm9yZGVyTGVuZ3RoID0gQk9SREVSX0xFTkdUSF9FREVGQVVMVDsKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgQ29tbW9uQm9yZGVyUmVsYXRpb25zaGlwTGFiZWxWYWx1ZUltcGwoKSB7CisJCXN1cGVyKCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCBFQ2xhc3MgZVN0YXRpY0NsYXNzKCkgeworCQlyZXR1cm4gTGFiZWxzUGFja2FnZS5MaXRlcmFscy5DT01NT05fQk9SREVSX1JFTEFUSU9OU0hJUF9MQUJFTF9WQUxVRTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIGRvdWJsZSBnZXRCb3JkZXJMZW5ndGgoKSB7CisJCXJldHVybiBib3JkZXJMZW5ndGg7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgc2V0Qm9yZGVyTGVuZ3RoKGRvdWJsZSBuZXdCb3JkZXJMZW5ndGgpIHsKKwkJZG91YmxlIG9sZEJvcmRlckxlbmd0aCA9IGJvcmRlckxlbmd0aDsKKwkJYm9yZGVyTGVuZ3RoID0gbmV3Qm9yZGVyTGVuZ3RoOworCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpCisJCQllTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBMYWJlbHNQYWNrYWdlLkNPTU1PTl9CT1JERVJfUkVMQVRJT05TSElQX0xBQkVMX1ZBTFVFX19CT1JERVJfTEVOR1RILCBvbGRCb3JkZXJMZW5ndGgsIGJvcmRlckxlbmd0aCkpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgT2JqZWN0IGVHZXQoaW50IGZlYXR1cmVJRCwgYm9vbGVhbiByZXNvbHZlLCBib29sZWFuIGNvcmVUeXBlKSB7CisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7CisJCQljYXNlIExhYmVsc1BhY2thZ2UuQ09NTU9OX0JPUkRFUl9SRUxBVElPTlNISVBfTEFCRUxfVkFMVUVfX0JPUkRFUl9MRU5HVEg6CisJCQkJcmV0dXJuIGdldEJvcmRlckxlbmd0aCgpOworCQl9CisJCXJldHVybiBzdXBlci5lR2V0KGZlYXR1cmVJRCwgcmVzb2x2ZSwgY29yZVR5cGUpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBlU2V0KGludCBmZWF0dXJlSUQsIE9iamVjdCBuZXdWYWx1ZSkgeworCQlzd2l0Y2ggKGZlYXR1cmVJRCkgeworCQkJY2FzZSBMYWJlbHNQYWNrYWdlLkNPTU1PTl9CT1JERVJfUkVMQVRJT05TSElQX0xBQkVMX1ZBTFVFX19CT1JERVJfTEVOR1RIOgorCQkJCXNldEJvcmRlckxlbmd0aCgoRG91YmxlKW5ld1ZhbHVlKTsKKwkJCQlyZXR1cm47CisJCX0KKwkJc3VwZXIuZVNldChmZWF0dXJlSUQsIG5ld1ZhbHVlKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgZVVuc2V0KGludCBmZWF0dXJlSUQpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJCWNhc2UgTGFiZWxzUGFja2FnZS5DT01NT05fQk9SREVSX1JFTEFUSU9OU0hJUF9MQUJFTF9WQUxVRV9fQk9SREVSX0xFTkdUSDoKKwkJCQlzZXRCb3JkZXJMZW5ndGgoQk9SREVSX0xFTkdUSF9FREVGQVVMVCk7CisJCQkJcmV0dXJuOworCQl9CisJCXN1cGVyLmVVbnNldChmZWF0dXJlSUQpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgYm9vbGVhbiBlSXNTZXQoaW50IGZlYXR1cmVJRCkgeworCQlzd2l0Y2ggKGZlYXR1cmVJRCkgeworCQkJY2FzZSBMYWJlbHNQYWNrYWdlLkNPTU1PTl9CT1JERVJfUkVMQVRJT05TSElQX0xBQkVMX1ZBTFVFX19CT1JERVJfTEVOR1RIOgorCQkJCXJldHVybiBib3JkZXJMZW5ndGggIT0gQk9SREVSX0xFTkdUSF9FREVGQVVMVDsKKwkJfQorCQlyZXR1cm4gc3VwZXIuZUlzU2V0KGZlYXR1cmVJRCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKSB7CisJCWlmIChlSXNQcm94eSgpKSByZXR1cm4gc3VwZXIudG9TdHJpbmcoKTsKKworCQlTdHJpbmdCdWZmZXIgcmVzdWx0ID0gbmV3IFN0cmluZ0J1ZmZlcihzdXBlci50b1N0cmluZygpKTsKKwkJcmVzdWx0LmFwcGVuZCgiIChib3JkZXJMZW5ndGg6ICIpOyAvLyROT04tTkxTLTEkCisJCXJlc3VsdC5hcHBlbmQoYm9yZGVyTGVuZ3RoKTsKKwkJcmVzdWx0LmFwcGVuZCgnKScpOworCQlyZXR1cm4gcmVzdWx0LnRvU3RyaW5nKCk7CisJfQorCit9IC8vIENvbW1vbkJvcmRlclJlbGF0aW9uc2hpcExhYmVsVmFsdWVJbXBsCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvbGFiZWxzL2ltcGwvRWFydGhTY2llbmNlTGFiZWxJbXBsLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvbGFiZWxzL2ltcGwvRWFydGhTY2llbmNlTGFiZWxJbXBsLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWU5MDczYwotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy9sYWJlbHMvaW1wbC9FYXJ0aFNjaWVuY2VMYWJlbEltcGwuamF2YQpAQCAtMCwwICsxLDEwNiBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOSwyMDEwIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuaW1wbDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5VUkk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzczsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuU1RFTVVSSTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguaW1wbC5TdGF0aWNOb2RlTGFiZWxJbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLkVhcnRoU2NpZW5jZUxhYmVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLkVhcnRoU2NpZW5jZUxhYmVsVmFsdWU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuTGFiZWxzRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5MYWJlbHNQYWNrYWdlOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiBBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+RWFydGggU2NpZW5jZSBMYWJlbDwvYj48L2VtPicuCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIDxwPgorICogVGhlIGZvbGxvd2luZyBmZWF0dXJlcyBhcmUgaW1wbGVtZW50ZWQ6CisgKiA8dWw+CisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuaW1wbC5FYXJ0aFNjaWVuY2VMYWJlbEltcGwjZ2V0Q3VycmVudEVhcnRoU2NpZW5jZVZhbHVlIDxlbT5DdXJyZW50IEVhcnRoIFNjaWVuY2UgVmFsdWU8L2VtPn08L2xpPgorICogPC91bD4KKyAqIDwvcD4KKyAqCisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBFYXJ0aFNjaWVuY2VMYWJlbEltcGwgZXh0ZW5kcyBTdGF0aWNOb2RlTGFiZWxJbXBsIGltcGxlbWVudHMgRWFydGhTY2llbmNlTGFiZWwgeworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlwcm90ZWN0ZWQgRWFydGhTY2llbmNlTGFiZWxJbXBsKCkgeworCQlzdXBlcigpOworCQlzZXRDdXJyZW50VmFsdWUoTGFiZWxzRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlRWFydGhTY2llbmNlTGFiZWxWYWx1ZSgpKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgRUNsYXNzIGVTdGF0aWNDbGFzcygpIHsKKwkJcmV0dXJuIExhYmVsc1BhY2thZ2UuTGl0ZXJhbHMuRUFSVEhfU0NJRU5DRV9MQUJFTDsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJcHVibGljIEVhcnRoU2NpZW5jZUxhYmVsVmFsdWUgZ2V0Q3VycmVudEVhcnRoU2NpZW5jZVZhbHVlKCkgeworCQlyZXR1cm4gKEVhcnRoU2NpZW5jZUxhYmVsVmFsdWUpZ2V0Q3VycmVudFZhbHVlKCk7CisJfQorCisJLyoqCisJICogQHBhcmFtIGFkbWluTGV2ZWwKKwkgKiBAcGFyYW0gY291bnRyeUNvZGUKKwkgKiBAcGFyYW0gbm9kZUNvZGUKKwkgKiBAcmV0dXJuIHRoZSBVUkkgZm9yIGEgc3BlY2lmaWMgYXJlYSBsYWJlbCBmb3IgYSBnZW9ncmFwaGljIHJlZ2lvbgorCSAqLworCXB1YmxpYyBzdGF0aWMgVVJJIGNyZWF0ZUVhcnRoU2NpZW5jZUxhYmVsVVJJKGZpbmFsIGludCBhZG1pbkxldmVsLAorCQkJZmluYWwgU3RyaW5nIGNvdW50cnlDb2RlLCBmaW5hbCBTdHJpbmcgbm9kZUNvZGUsIGZpbmFsIFN0cmluZyBkYXRhVHlwZSkgeworCQlmaW5hbCBVUkkgcmV0VmFsdWUgPSBTVEVNVVJJLmNyZWF0ZVVSSShVUklfVFlQRV9FQVJUSF9TQ0lFTkNFX0xBQkVMX1NFR01FTlQKKwkJCQkrICIvIiArIGNvdW50cnlDb2RlICsgIi8iICsgYWRtaW5MZXZlbCArICIvIiArIG5vZGVDb2RlKyIvIitkYXRhVHlwZSk7CisJCXJldHVybiByZXRWYWx1ZTsKKwl9IC8vIGNyZWF0ZUFyZWFMYWJlbFVSSQorCQorCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBPYmplY3QgZUdldChpbnQgZmVhdHVyZUlELCBib29sZWFuIHJlc29sdmUsIGJvb2xlYW4gY29yZVR5cGUpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJCWNhc2UgTGFiZWxzUGFja2FnZS5FQVJUSF9TQ0lFTkNFX0xBQkVMX19DVVJSRU5UX0VBUlRIX1NDSUVOQ0VfVkFMVUU6CisJCQkJcmV0dXJuIGdldEN1cnJlbnRFYXJ0aFNjaWVuY2VWYWx1ZSgpOworCQl9CisJCXJldHVybiBzdXBlci5lR2V0KGZlYXR1cmVJRCwgcmVzb2x2ZSwgY29yZVR5cGUpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBib29sZWFuIGVJc1NldChpbnQgZmVhdHVyZUlEKSB7CisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7CisJCQljYXNlIExhYmVsc1BhY2thZ2UuRUFSVEhfU0NJRU5DRV9MQUJFTF9fQ1VSUkVOVF9FQVJUSF9TQ0lFTkNFX1ZBTFVFOgorCQkJCXJldHVybiBnZXRDdXJyZW50RWFydGhTY2llbmNlVmFsdWUoKSAhPSBudWxsOworCQl9CisJCXJldHVybiBzdXBlci5lSXNTZXQoZmVhdHVyZUlEKTsKKwl9CisKK30gLy9FYXJ0aFNjaWVuY2VMYWJlbEltcGwKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy9sYWJlbHMvaW1wbC9FYXJ0aFNjaWVuY2VMYWJlbFZhbHVlSW1wbC5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL2xhYmVscy9pbXBsL0VhcnRoU2NpZW5jZUxhYmVsVmFsdWVJbXBsLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWMxNmY3OAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy9sYWJlbHMvaW1wbC9FYXJ0aFNjaWVuY2VMYWJlbFZhbHVlSW1wbC5qYXZhCkBAIC0wLDAgKzEsNTg3IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA5LDIwMTAgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5pbXBsOworCitpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLkVMaXN0OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLmltcGwuRU5vdGlmaWNhdGlvbkltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnV0aWwuRURhdGFUeXBlRUxpc3Q7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmltcGwuTGFiZWxWYWx1ZUltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuRWFydGhTY2llbmNlTGFiZWxWYWx1ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5MYWJlbHNQYWNrYWdlOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiBBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+RWFydGggU2NpZW5jZSBMYWJlbCBWYWx1ZTwvYj48L2VtPicuCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIDxwPgorICogVGhlIGZvbGxvd2luZyBmZWF0dXJlcyBhcmUgaW1wbGVtZW50ZWQ6CisgKiA8dWw+CisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuaW1wbC5FYXJ0aFNjaWVuY2VMYWJlbFZhbHVlSW1wbCNnZXREYXRhVHlwZSA8ZW0+RGF0YSBUeXBlPC9lbT59PC9saT4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5pbXBsLkVhcnRoU2NpZW5jZUxhYmVsVmFsdWVJbXBsI2dldFVuaXRzIDxlbT5Vbml0czwvZW0+fTwvbGk+CisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuaW1wbC5FYXJ0aFNjaWVuY2VMYWJlbFZhbHVlSW1wbCNnZXRNZWFuIDxlbT5NZWFuPC9lbT59PC9saT4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5pbXBsLkVhcnRoU2NpZW5jZUxhYmVsVmFsdWVJbXBsI2dldFNkIDxlbT5TZDwvZW0+fTwvbGk+CisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuaW1wbC5FYXJ0aFNjaWVuY2VMYWJlbFZhbHVlSW1wbCNnZXRNaW4gPGVtPk1pbjwvZW0+fTwvbGk+CisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuaW1wbC5FYXJ0aFNjaWVuY2VMYWJlbFZhbHVlSW1wbCNnZXRNYXggPGVtPk1heDwvZW0+fTwvbGk+CisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuaW1wbC5FYXJ0aFNjaWVuY2VMYWJlbFZhbHVlSW1wbCNnZXRNZWRpYW4gPGVtPk1lZGlhbjwvZW0+fTwvbGk+CisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuaW1wbC5FYXJ0aFNjaWVuY2VMYWJlbFZhbHVlSW1wbCNnZXRTa2V3bmVzcyA8ZW0+U2tld25lc3M8L2VtPn08L2xpPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLmltcGwuRWFydGhTY2llbmNlTGFiZWxWYWx1ZUltcGwjZ2V0S3VydG9zaXMgPGVtPkt1cnRvc2lzPC9lbT59PC9saT4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5pbXBsLkVhcnRoU2NpZW5jZUxhYmVsVmFsdWVJbXBsI2dldFJtcyA8ZW0+Um1zPC9lbT59PC9saT4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5pbXBsLkVhcnRoU2NpZW5jZUxhYmVsVmFsdWVJbXBsI2dldFNhbXBsZXNpemUgPGVtPlNhbXBsZXNpemU8L2VtPn08L2xpPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLmltcGwuRWFydGhTY2llbmNlTGFiZWxWYWx1ZUltcGwjZ2V0UmFuZ2UgPGVtPlJhbmdlPC9lbT59PC9saT4KKyAqIDwvdWw+CisgKiA8L3A+CisgKgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgRWFydGhTY2llbmNlTGFiZWxWYWx1ZUltcGwgZXh0ZW5kcyBMYWJlbFZhbHVlSW1wbCBpbXBsZW1lbnRzIEVhcnRoU2NpZW5jZUxhYmVsVmFsdWUgeworCS8qKgorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXREYXRhVHlwZSgpIDxlbT5EYXRhIFR5cGU8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI2dldERhdGFUeXBlKCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIFN0cmluZyBEQVRBX1RZUEVfRURFRkFVTFQgPSBudWxsOworCisJLyoqCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0RGF0YVR5cGUoKSA8ZW0+RGF0YSBUeXBlPC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNnZXREYXRhVHlwZSgpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIFN0cmluZyBkYXRhVHlwZSA9IERBVEFfVFlQRV9FREVGQVVMVDsKKworCS8qKgorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRVbml0cygpIDxlbT5Vbml0czwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZ2V0VW5pdHMoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgU3RyaW5nIFVOSVRTX0VERUZBVUxUID0gbnVsbDsKKworCS8qKgorCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldFVuaXRzKCkgPGVtPlVuaXRzPC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNnZXRVbml0cygpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIFN0cmluZyB1bml0cyA9IFVOSVRTX0VERUZBVUxUOworCisJLyoqCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0TWVhbigpIDxlbT5NZWFuPC9lbT59JyBhdHRyaWJ1dGUgbGlzdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI2dldE1lYW4oKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBFTGlzdDxEb3VibGU+IG1lYW47CisKKwkvKioKKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRTZCgpIDxlbT5TZDwvZW0+fScgYXR0cmlidXRlIGxpc3QuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNnZXRTZCgpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIEVMaXN0PERvdWJsZT4gc2Q7CisKKwkvKioKKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRNaW4oKSA8ZW0+TWluPC9lbT59JyBhdHRyaWJ1dGUgbGlzdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI2dldE1pbigpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIEVMaXN0PERvdWJsZT4gbWluOworCisJLyoqCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0TWF4KCkgPGVtPk1heDwvZW0+fScgYXR0cmlidXRlIGxpc3QuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNnZXRNYXgoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBFTGlzdDxEb3VibGU+IG1heDsKKworCS8qKgorCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldE1lZGlhbigpIDxlbT5NZWRpYW48L2VtPn0nIGF0dHJpYnV0ZSBsaXN0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZ2V0TWVkaWFuKCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgRUxpc3Q8RG91YmxlPiBtZWRpYW47CisKKwkvKioKKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRTa2V3bmVzcygpIDxlbT5Ta2V3bmVzczwvZW0+fScgYXR0cmlidXRlIGxpc3QuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNnZXRTa2V3bmVzcygpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIEVMaXN0PERvdWJsZT4gc2tld25lc3M7CisKKwkvKioKKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRLdXJ0b3NpcygpIDxlbT5LdXJ0b3NpczwvZW0+fScgYXR0cmlidXRlIGxpc3QuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNnZXRLdXJ0b3NpcygpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIEVMaXN0PERvdWJsZT4ga3VydG9zaXM7CisKKwkvKioKKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRSbXMoKSA8ZW0+Um1zPC9lbT59JyBhdHRyaWJ1dGUgbGlzdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI2dldFJtcygpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIEVMaXN0PERvdWJsZT4gcm1zOworCisJLyoqCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0U2FtcGxlc2l6ZSgpIDxlbT5TYW1wbGVzaXplPC9lbT59JyBhdHRyaWJ1dGUgbGlzdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI2dldFNhbXBsZXNpemUoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBFTGlzdDxEb3VibGU+IHNhbXBsZXNpemU7CisKKwkvKioKKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRSYW5nZSgpIDxlbT5SYW5nZTwvZW0+fScgYXR0cmlidXRlIGxpc3QuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNnZXRSYW5nZSgpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIEVMaXN0PERvdWJsZT4gcmFuZ2U7CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgRWFydGhTY2llbmNlTGFiZWxWYWx1ZUltcGwoKSB7CisJCXN1cGVyKCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIEVDbGFzcyBlU3RhdGljQ2xhc3MoKSB7CisJCXJldHVybiBMYWJlbHNQYWNrYWdlLkxpdGVyYWxzLkVBUlRIX1NDSUVOQ0VfTEFCRUxfVkFMVUU7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFN0cmluZyBnZXREYXRhVHlwZSgpIHsKKwkJcmV0dXJuIGRhdGFUeXBlOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIHNldERhdGFUeXBlKFN0cmluZyBuZXdEYXRhVHlwZSkgeworCQlTdHJpbmcgb2xkRGF0YVR5cGUgPSBkYXRhVHlwZTsKKwkJZGF0YVR5cGUgPSBuZXdEYXRhVHlwZTsKKwkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQorCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgTGFiZWxzUGFja2FnZS5FQVJUSF9TQ0lFTkNFX0xBQkVMX1ZBTFVFX19EQVRBX1RZUEUsIG9sZERhdGFUeXBlLCBkYXRhVHlwZSkpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBTdHJpbmcgZ2V0VW5pdHMoKSB7CisJCXJldHVybiB1bml0czsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRVbml0cyhTdHJpbmcgbmV3VW5pdHMpIHsKKwkJU3RyaW5nIG9sZFVuaXRzID0gdW5pdHM7CisJCXVuaXRzID0gbmV3VW5pdHM7CisJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkKKwkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIExhYmVsc1BhY2thZ2UuRUFSVEhfU0NJRU5DRV9MQUJFTF9WQUxVRV9fVU5JVFMsIG9sZFVuaXRzLCB1bml0cykpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFTGlzdDxEb3VibGU+IGdldE1lYW4oKSB7CisJCWlmIChtZWFuID09IG51bGwpIHsKKwkJCW1lYW4gPSBuZXcgRURhdGFUeXBlRUxpc3Q8RG91YmxlPihEb3VibGUuY2xhc3MsIHRoaXMsIExhYmVsc1BhY2thZ2UuRUFSVEhfU0NJRU5DRV9MQUJFTF9WQUxVRV9fTUVBTik7CisJCX0KKwkJcmV0dXJuIG1lYW47CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVMaXN0PERvdWJsZT4gZ2V0U2QoKSB7CisJCWlmIChzZCA9PSBudWxsKSB7CisJCQlzZCA9IG5ldyBFRGF0YVR5cGVFTGlzdDxEb3VibGU+KERvdWJsZS5jbGFzcywgdGhpcywgTGFiZWxzUGFja2FnZS5FQVJUSF9TQ0lFTkNFX0xBQkVMX1ZBTFVFX19TRCk7CisJCX0KKwkJcmV0dXJuIHNkOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFTGlzdDxEb3VibGU+IGdldE1pbigpIHsKKwkJaWYgKG1pbiA9PSBudWxsKSB7CisJCQltaW4gPSBuZXcgRURhdGFUeXBlRUxpc3Q8RG91YmxlPihEb3VibGUuY2xhc3MsIHRoaXMsIExhYmVsc1BhY2thZ2UuRUFSVEhfU0NJRU5DRV9MQUJFTF9WQUxVRV9fTUlOKTsKKwkJfQorCQlyZXR1cm4gbWluOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFTGlzdDxEb3VibGU+IGdldE1heCgpIHsKKwkJaWYgKG1heCA9PSBudWxsKSB7CisJCQltYXggPSBuZXcgRURhdGFUeXBlRUxpc3Q8RG91YmxlPihEb3VibGUuY2xhc3MsIHRoaXMsIExhYmVsc1BhY2thZ2UuRUFSVEhfU0NJRU5DRV9MQUJFTF9WQUxVRV9fTUFYKTsKKwkJfQorCQlyZXR1cm4gbWF4OworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFTGlzdDxEb3VibGU+IGdldE1lZGlhbigpIHsKKwkJaWYgKG1lZGlhbiA9PSBudWxsKSB7CisJCQltZWRpYW4gPSBuZXcgRURhdGFUeXBlRUxpc3Q8RG91YmxlPihEb3VibGUuY2xhc3MsIHRoaXMsIExhYmVsc1BhY2thZ2UuRUFSVEhfU0NJRU5DRV9MQUJFTF9WQUxVRV9fTUVESUFOKTsKKwkJfQorCQlyZXR1cm4gbWVkaWFuOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFTGlzdDxEb3VibGU+IGdldFNrZXduZXNzKCkgeworCQlpZiAoc2tld25lc3MgPT0gbnVsbCkgeworCQkJc2tld25lc3MgPSBuZXcgRURhdGFUeXBlRUxpc3Q8RG91YmxlPihEb3VibGUuY2xhc3MsIHRoaXMsIExhYmVsc1BhY2thZ2UuRUFSVEhfU0NJRU5DRV9MQUJFTF9WQUxVRV9fU0tFV05FU1MpOworCQl9CisJCXJldHVybiBza2V3bmVzczsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUxpc3Q8RG91YmxlPiBnZXRLdXJ0b3NpcygpIHsKKwkJaWYgKGt1cnRvc2lzID09IG51bGwpIHsKKwkJCWt1cnRvc2lzID0gbmV3IEVEYXRhVHlwZUVMaXN0PERvdWJsZT4oRG91YmxlLmNsYXNzLCB0aGlzLCBMYWJlbHNQYWNrYWdlLkVBUlRIX1NDSUVOQ0VfTEFCRUxfVkFMVUVfX0tVUlRPU0lTKTsKKwkJfQorCQlyZXR1cm4ga3VydG9zaXM7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVMaXN0PERvdWJsZT4gZ2V0Um1zKCkgeworCQlpZiAocm1zID09IG51bGwpIHsKKwkJCXJtcyA9IG5ldyBFRGF0YVR5cGVFTGlzdDxEb3VibGU+KERvdWJsZS5jbGFzcywgdGhpcywgTGFiZWxzUGFja2FnZS5FQVJUSF9TQ0lFTkNFX0xBQkVMX1ZBTFVFX19STVMpOworCQl9CisJCXJldHVybiBybXM7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVMaXN0PERvdWJsZT4gZ2V0U2FtcGxlc2l6ZSgpIHsKKwkJaWYgKHNhbXBsZXNpemUgPT0gbnVsbCkgeworCQkJc2FtcGxlc2l6ZSA9IG5ldyBFRGF0YVR5cGVFTGlzdDxEb3VibGU+KERvdWJsZS5jbGFzcywgdGhpcywgTGFiZWxzUGFja2FnZS5FQVJUSF9TQ0lFTkNFX0xBQkVMX1ZBTFVFX19TQU1QTEVTSVpFKTsKKwkJfQorCQlyZXR1cm4gc2FtcGxlc2l6ZTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUxpc3Q8RG91YmxlPiBnZXRSYW5nZSgpIHsKKwkJaWYgKHJhbmdlID09IG51bGwpIHsKKwkJCXJhbmdlID0gbmV3IEVEYXRhVHlwZUVMaXN0PERvdWJsZT4oRG91YmxlLmNsYXNzLCB0aGlzLCBMYWJlbHNQYWNrYWdlLkVBUlRIX1NDSUVOQ0VfTEFCRUxfVkFMVUVfX1JBTkdFKTsKKwkJfQorCQlyZXR1cm4gcmFuZ2U7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIE9iamVjdCBlR2V0KGludCBmZWF0dXJlSUQsIGJvb2xlYW4gcmVzb2x2ZSwgYm9vbGVhbiBjb3JlVHlwZSkgeworCQlzd2l0Y2ggKGZlYXR1cmVJRCkgeworCQkJY2FzZSBMYWJlbHNQYWNrYWdlLkVBUlRIX1NDSUVOQ0VfTEFCRUxfVkFMVUVfX0RBVEFfVFlQRToKKwkJCQlyZXR1cm4gZ2V0RGF0YVR5cGUoKTsKKwkJCWNhc2UgTGFiZWxzUGFja2FnZS5FQVJUSF9TQ0lFTkNFX0xBQkVMX1ZBTFVFX19VTklUUzoKKwkJCQlyZXR1cm4gZ2V0VW5pdHMoKTsKKwkJCWNhc2UgTGFiZWxzUGFja2FnZS5FQVJUSF9TQ0lFTkNFX0xBQkVMX1ZBTFVFX19NRUFOOgorCQkJCXJldHVybiBnZXRNZWFuKCk7CisJCQljYXNlIExhYmVsc1BhY2thZ2UuRUFSVEhfU0NJRU5DRV9MQUJFTF9WQUxVRV9fU0Q6CisJCQkJcmV0dXJuIGdldFNkKCk7CisJCQljYXNlIExhYmVsc1BhY2thZ2UuRUFSVEhfU0NJRU5DRV9MQUJFTF9WQUxVRV9fTUlOOgorCQkJCXJldHVybiBnZXRNaW4oKTsKKwkJCWNhc2UgTGFiZWxzUGFja2FnZS5FQVJUSF9TQ0lFTkNFX0xBQkVMX1ZBTFVFX19NQVg6CisJCQkJcmV0dXJuIGdldE1heCgpOworCQkJY2FzZSBMYWJlbHNQYWNrYWdlLkVBUlRIX1NDSUVOQ0VfTEFCRUxfVkFMVUVfX01FRElBTjoKKwkJCQlyZXR1cm4gZ2V0TWVkaWFuKCk7CisJCQljYXNlIExhYmVsc1BhY2thZ2UuRUFSVEhfU0NJRU5DRV9MQUJFTF9WQUxVRV9fU0tFV05FU1M6CisJCQkJcmV0dXJuIGdldFNrZXduZXNzKCk7CisJCQljYXNlIExhYmVsc1BhY2thZ2UuRUFSVEhfU0NJRU5DRV9MQUJFTF9WQUxVRV9fS1VSVE9TSVM6CisJCQkJcmV0dXJuIGdldEt1cnRvc2lzKCk7CisJCQljYXNlIExhYmVsc1BhY2thZ2UuRUFSVEhfU0NJRU5DRV9MQUJFTF9WQUxVRV9fUk1TOgorCQkJCXJldHVybiBnZXRSbXMoKTsKKwkJCWNhc2UgTGFiZWxzUGFja2FnZS5FQVJUSF9TQ0lFTkNFX0xBQkVMX1ZBTFVFX19TQU1QTEVTSVpFOgorCQkJCXJldHVybiBnZXRTYW1wbGVzaXplKCk7CisJCQljYXNlIExhYmVsc1BhY2thZ2UuRUFSVEhfU0NJRU5DRV9MQUJFTF9WQUxVRV9fUkFOR0U6CisJCQkJcmV0dXJuIGdldFJhbmdlKCk7CisJCX0KKwkJcmV0dXJuIHN1cGVyLmVHZXQoZmVhdHVyZUlELCByZXNvbHZlLCBjb3JlVHlwZSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQFN1cHByZXNzV2FybmluZ3MoInVuY2hlY2tlZCIpCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgZVNldChpbnQgZmVhdHVyZUlELCBPYmplY3QgbmV3VmFsdWUpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJCWNhc2UgTGFiZWxzUGFja2FnZS5FQVJUSF9TQ0lFTkNFX0xBQkVMX1ZBTFVFX19EQVRBX1RZUEU6CisJCQkJc2V0RGF0YVR5cGUoKFN0cmluZyluZXdWYWx1ZSk7CisJCQkJcmV0dXJuOworCQkJY2FzZSBMYWJlbHNQYWNrYWdlLkVBUlRIX1NDSUVOQ0VfTEFCRUxfVkFMVUVfX1VOSVRTOgorCQkJCXNldFVuaXRzKChTdHJpbmcpbmV3VmFsdWUpOworCQkJCXJldHVybjsKKwkJCWNhc2UgTGFiZWxzUGFja2FnZS5FQVJUSF9TQ0lFTkNFX0xBQkVMX1ZBTFVFX19NRUFOOgorCQkJCWdldE1lYW4oKS5jbGVhcigpOworCQkJCWdldE1lYW4oKS5hZGRBbGwoKENvbGxlY3Rpb248PyBleHRlbmRzIERvdWJsZT4pbmV3VmFsdWUpOworCQkJCXJldHVybjsKKwkJCWNhc2UgTGFiZWxzUGFja2FnZS5FQVJUSF9TQ0lFTkNFX0xBQkVMX1ZBTFVFX19TRDoKKwkJCQlnZXRTZCgpLmNsZWFyKCk7CisJCQkJZ2V0U2QoKS5hZGRBbGwoKENvbGxlY3Rpb248PyBleHRlbmRzIERvdWJsZT4pbmV3VmFsdWUpOworCQkJCXJldHVybjsKKwkJCWNhc2UgTGFiZWxzUGFja2FnZS5FQVJUSF9TQ0lFTkNFX0xBQkVMX1ZBTFVFX19NSU46CisJCQkJZ2V0TWluKCkuY2xlYXIoKTsKKwkJCQlnZXRNaW4oKS5hZGRBbGwoKENvbGxlY3Rpb248PyBleHRlbmRzIERvdWJsZT4pbmV3VmFsdWUpOworCQkJCXJldHVybjsKKwkJCWNhc2UgTGFiZWxzUGFja2FnZS5FQVJUSF9TQ0lFTkNFX0xBQkVMX1ZBTFVFX19NQVg6CisJCQkJZ2V0TWF4KCkuY2xlYXIoKTsKKwkJCQlnZXRNYXgoKS5hZGRBbGwoKENvbGxlY3Rpb248PyBleHRlbmRzIERvdWJsZT4pbmV3VmFsdWUpOworCQkJCXJldHVybjsKKwkJCWNhc2UgTGFiZWxzUGFja2FnZS5FQVJUSF9TQ0lFTkNFX0xBQkVMX1ZBTFVFX19NRURJQU46CisJCQkJZ2V0TWVkaWFuKCkuY2xlYXIoKTsKKwkJCQlnZXRNZWRpYW4oKS5hZGRBbGwoKENvbGxlY3Rpb248PyBleHRlbmRzIERvdWJsZT4pbmV3VmFsdWUpOworCQkJCXJldHVybjsKKwkJCWNhc2UgTGFiZWxzUGFja2FnZS5FQVJUSF9TQ0lFTkNFX0xBQkVMX1ZBTFVFX19TS0VXTkVTUzoKKwkJCQlnZXRTa2V3bmVzcygpLmNsZWFyKCk7CisJCQkJZ2V0U2tld25lc3MoKS5hZGRBbGwoKENvbGxlY3Rpb248PyBleHRlbmRzIERvdWJsZT4pbmV3VmFsdWUpOworCQkJCXJldHVybjsKKwkJCWNhc2UgTGFiZWxzUGFja2FnZS5FQVJUSF9TQ0lFTkNFX0xBQkVMX1ZBTFVFX19LVVJUT1NJUzoKKwkJCQlnZXRLdXJ0b3NpcygpLmNsZWFyKCk7CisJCQkJZ2V0S3VydG9zaXMoKS5hZGRBbGwoKENvbGxlY3Rpb248PyBleHRlbmRzIERvdWJsZT4pbmV3VmFsdWUpOworCQkJCXJldHVybjsKKwkJCWNhc2UgTGFiZWxzUGFja2FnZS5FQVJUSF9TQ0lFTkNFX0xBQkVMX1ZBTFVFX19STVM6CisJCQkJZ2V0Um1zKCkuY2xlYXIoKTsKKwkJCQlnZXRSbXMoKS5hZGRBbGwoKENvbGxlY3Rpb248PyBleHRlbmRzIERvdWJsZT4pbmV3VmFsdWUpOworCQkJCXJldHVybjsKKwkJCWNhc2UgTGFiZWxzUGFja2FnZS5FQVJUSF9TQ0lFTkNFX0xBQkVMX1ZBTFVFX19TQU1QTEVTSVpFOgorCQkJCWdldFNhbXBsZXNpemUoKS5jbGVhcigpOworCQkJCWdldFNhbXBsZXNpemUoKS5hZGRBbGwoKENvbGxlY3Rpb248PyBleHRlbmRzIERvdWJsZT4pbmV3VmFsdWUpOworCQkJCXJldHVybjsKKwkJCWNhc2UgTGFiZWxzUGFja2FnZS5FQVJUSF9TQ0lFTkNFX0xBQkVMX1ZBTFVFX19SQU5HRToKKwkJCQlnZXRSYW5nZSgpLmNsZWFyKCk7CisJCQkJZ2V0UmFuZ2UoKS5hZGRBbGwoKENvbGxlY3Rpb248PyBleHRlbmRzIERvdWJsZT4pbmV3VmFsdWUpOworCQkJCXJldHVybjsKKwkJfQorCQlzdXBlci5lU2V0KGZlYXR1cmVJRCwgbmV3VmFsdWUpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGVVbnNldChpbnQgZmVhdHVyZUlEKSB7CisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7CisJCQljYXNlIExhYmVsc1BhY2thZ2UuRUFSVEhfU0NJRU5DRV9MQUJFTF9WQUxVRV9fREFUQV9UWVBFOgorCQkJCXNldERhdGFUeXBlKERBVEFfVFlQRV9FREVGQVVMVCk7CisJCQkJcmV0dXJuOworCQkJY2FzZSBMYWJlbHNQYWNrYWdlLkVBUlRIX1NDSUVOQ0VfTEFCRUxfVkFMVUVfX1VOSVRTOgorCQkJCXNldFVuaXRzKFVOSVRTX0VERUZBVUxUKTsKKwkJCQlyZXR1cm47CisJCQljYXNlIExhYmVsc1BhY2thZ2UuRUFSVEhfU0NJRU5DRV9MQUJFTF9WQUxVRV9fTUVBTjoKKwkJCQlnZXRNZWFuKCkuY2xlYXIoKTsKKwkJCQlyZXR1cm47CisJCQljYXNlIExhYmVsc1BhY2thZ2UuRUFSVEhfU0NJRU5DRV9MQUJFTF9WQUxVRV9fU0Q6CisJCQkJZ2V0U2QoKS5jbGVhcigpOworCQkJCXJldHVybjsKKwkJCWNhc2UgTGFiZWxzUGFja2FnZS5FQVJUSF9TQ0lFTkNFX0xBQkVMX1ZBTFVFX19NSU46CisJCQkJZ2V0TWluKCkuY2xlYXIoKTsKKwkJCQlyZXR1cm47CisJCQljYXNlIExhYmVsc1BhY2thZ2UuRUFSVEhfU0NJRU5DRV9MQUJFTF9WQUxVRV9fTUFYOgorCQkJCWdldE1heCgpLmNsZWFyKCk7CisJCQkJcmV0dXJuOworCQkJY2FzZSBMYWJlbHNQYWNrYWdlLkVBUlRIX1NDSUVOQ0VfTEFCRUxfVkFMVUVfX01FRElBTjoKKwkJCQlnZXRNZWRpYW4oKS5jbGVhcigpOworCQkJCXJldHVybjsKKwkJCWNhc2UgTGFiZWxzUGFja2FnZS5FQVJUSF9TQ0lFTkNFX0xBQkVMX1ZBTFVFX19TS0VXTkVTUzoKKwkJCQlnZXRTa2V3bmVzcygpLmNsZWFyKCk7CisJCQkJcmV0dXJuOworCQkJY2FzZSBMYWJlbHNQYWNrYWdlLkVBUlRIX1NDSUVOQ0VfTEFCRUxfVkFMVUVfX0tVUlRPU0lTOgorCQkJCWdldEt1cnRvc2lzKCkuY2xlYXIoKTsKKwkJCQlyZXR1cm47CisJCQljYXNlIExhYmVsc1BhY2thZ2UuRUFSVEhfU0NJRU5DRV9MQUJFTF9WQUxVRV9fUk1TOgorCQkJCWdldFJtcygpLmNsZWFyKCk7CisJCQkJcmV0dXJuOworCQkJY2FzZSBMYWJlbHNQYWNrYWdlLkVBUlRIX1NDSUVOQ0VfTEFCRUxfVkFMVUVfX1NBTVBMRVNJWkU6CisJCQkJZ2V0U2FtcGxlc2l6ZSgpLmNsZWFyKCk7CisJCQkJcmV0dXJuOworCQkJY2FzZSBMYWJlbHNQYWNrYWdlLkVBUlRIX1NDSUVOQ0VfTEFCRUxfVkFMVUVfX1JBTkdFOgorCQkJCWdldFJhbmdlKCkuY2xlYXIoKTsKKwkJCQlyZXR1cm47CisJCX0KKwkJc3VwZXIuZVVuc2V0KGZlYXR1cmVJRCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIGJvb2xlYW4gZUlzU2V0KGludCBmZWF0dXJlSUQpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJCWNhc2UgTGFiZWxzUGFja2FnZS5FQVJUSF9TQ0lFTkNFX0xBQkVMX1ZBTFVFX19EQVRBX1RZUEU6CisJCQkJcmV0dXJuIERBVEFfVFlQRV9FREVGQVVMVCA9PSBudWxsID8gZGF0YVR5cGUgIT0gbnVsbCA6ICFEQVRBX1RZUEVfRURFRkFVTFQuZXF1YWxzKGRhdGFUeXBlKTsKKwkJCWNhc2UgTGFiZWxzUGFja2FnZS5FQVJUSF9TQ0lFTkNFX0xBQkVMX1ZBTFVFX19VTklUUzoKKwkJCQlyZXR1cm4gVU5JVFNfRURFRkFVTFQgPT0gbnVsbCA/IHVuaXRzICE9IG51bGwgOiAhVU5JVFNfRURFRkFVTFQuZXF1YWxzKHVuaXRzKTsKKwkJCWNhc2UgTGFiZWxzUGFja2FnZS5FQVJUSF9TQ0lFTkNFX0xBQkVMX1ZBTFVFX19NRUFOOgorCQkJCXJldHVybiBtZWFuICE9IG51bGwgJiYgIW1lYW4uaXNFbXB0eSgpOworCQkJY2FzZSBMYWJlbHNQYWNrYWdlLkVBUlRIX1NDSUVOQ0VfTEFCRUxfVkFMVUVfX1NEOgorCQkJCXJldHVybiBzZCAhPSBudWxsICYmICFzZC5pc0VtcHR5KCk7CisJCQljYXNlIExhYmVsc1BhY2thZ2UuRUFSVEhfU0NJRU5DRV9MQUJFTF9WQUxVRV9fTUlOOgorCQkJCXJldHVybiBtaW4gIT0gbnVsbCAmJiAhbWluLmlzRW1wdHkoKTsKKwkJCWNhc2UgTGFiZWxzUGFja2FnZS5FQVJUSF9TQ0lFTkNFX0xBQkVMX1ZBTFVFX19NQVg6CisJCQkJcmV0dXJuIG1heCAhPSBudWxsICYmICFtYXguaXNFbXB0eSgpOworCQkJY2FzZSBMYWJlbHNQYWNrYWdlLkVBUlRIX1NDSUVOQ0VfTEFCRUxfVkFMVUVfX01FRElBTjoKKwkJCQlyZXR1cm4gbWVkaWFuICE9IG51bGwgJiYgIW1lZGlhbi5pc0VtcHR5KCk7CisJCQljYXNlIExhYmVsc1BhY2thZ2UuRUFSVEhfU0NJRU5DRV9MQUJFTF9WQUxVRV9fU0tFV05FU1M6CisJCQkJcmV0dXJuIHNrZXduZXNzICE9IG51bGwgJiYgIXNrZXduZXNzLmlzRW1wdHkoKTsKKwkJCWNhc2UgTGFiZWxzUGFja2FnZS5FQVJUSF9TQ0lFTkNFX0xBQkVMX1ZBTFVFX19LVVJUT1NJUzoKKwkJCQlyZXR1cm4ga3VydG9zaXMgIT0gbnVsbCAmJiAha3VydG9zaXMuaXNFbXB0eSgpOworCQkJY2FzZSBMYWJlbHNQYWNrYWdlLkVBUlRIX1NDSUVOQ0VfTEFCRUxfVkFMVUVfX1JNUzoKKwkJCQlyZXR1cm4gcm1zICE9IG51bGwgJiYgIXJtcy5pc0VtcHR5KCk7CisJCQljYXNlIExhYmVsc1BhY2thZ2UuRUFSVEhfU0NJRU5DRV9MQUJFTF9WQUxVRV9fU0FNUExFU0laRToKKwkJCQlyZXR1cm4gc2FtcGxlc2l6ZSAhPSBudWxsICYmICFzYW1wbGVzaXplLmlzRW1wdHkoKTsKKwkJCWNhc2UgTGFiZWxzUGFja2FnZS5FQVJUSF9TQ0lFTkNFX0xBQkVMX1ZBTFVFX19SQU5HRToKKwkJCQlyZXR1cm4gcmFuZ2UgIT0gbnVsbCAmJiAhcmFuZ2UuaXNFbXB0eSgpOworCQl9CisJCXJldHVybiBzdXBlci5lSXNTZXQoZmVhdHVyZUlEKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkgeworCQlpZiAoZUlzUHJveHkoKSkgcmV0dXJuIHN1cGVyLnRvU3RyaW5nKCk7CisKKwkJU3RyaW5nQnVmZmVyIHJlc3VsdCA9IG5ldyBTdHJpbmdCdWZmZXIoc3VwZXIudG9TdHJpbmcoKSk7CisJCXJlc3VsdC5hcHBlbmQoIiAoZGF0YVR5cGU6ICIpOyAvLyROT04tTkxTLTEkCisJCXJlc3VsdC5hcHBlbmQoZGF0YVR5cGUpOworCQlyZXN1bHQuYXBwZW5kKCIsIHVuaXRzOiAiKTsgLy8kTk9OLU5MUy0xJAorCQlyZXN1bHQuYXBwZW5kKHVuaXRzKTsKKwkJcmVzdWx0LmFwcGVuZCgiLCBtZWFuOiAiKTsgLy8kTk9OLU5MUy0xJAorCQlyZXN1bHQuYXBwZW5kKG1lYW4pOworCQlyZXN1bHQuYXBwZW5kKCIsIHNkOiAiKTsgLy8kTk9OLU5MUy0xJAorCQlyZXN1bHQuYXBwZW5kKHNkKTsKKwkJcmVzdWx0LmFwcGVuZCgiLCBtaW46ICIpOyAvLyROT04tTkxTLTEkCisJCXJlc3VsdC5hcHBlbmQobWluKTsKKwkJcmVzdWx0LmFwcGVuZCgiLCBtYXg6ICIpOyAvLyROT04tTkxTLTEkCisJCXJlc3VsdC5hcHBlbmQobWF4KTsKKwkJcmVzdWx0LmFwcGVuZCgiLCBtZWRpYW46ICIpOyAvLyROT04tTkxTLTEkCisJCXJlc3VsdC5hcHBlbmQobWVkaWFuKTsKKwkJcmVzdWx0LmFwcGVuZCgiLCBza2V3bmVzczogIik7IC8vJE5PTi1OTFMtMSQKKwkJcmVzdWx0LmFwcGVuZChza2V3bmVzcyk7CisJCXJlc3VsdC5hcHBlbmQoIiwga3VydG9zaXM6ICIpOyAvLyROT04tTkxTLTEkCisJCXJlc3VsdC5hcHBlbmQoa3VydG9zaXMpOworCQlyZXN1bHQuYXBwZW5kKCIsIHJtczogIik7IC8vJE5PTi1OTFMtMSQKKwkJcmVzdWx0LmFwcGVuZChybXMpOworCQlyZXN1bHQuYXBwZW5kKCIsIHNhbXBsZXNpemU6ICIpOyAvLyROT04tTkxTLTEkCisJCXJlc3VsdC5hcHBlbmQoc2FtcGxlc2l6ZSk7CisJCXJlc3VsdC5hcHBlbmQoIiwgcmFuZ2U6ICIpOyAvLyROT04tTkxTLTEkCisJCXJlc3VsdC5hcHBlbmQocmFuZ2UpOworCQlyZXN1bHQuYXBwZW5kKCcpJyk7CisJCXJldHVybiByZXN1bHQudG9TdHJpbmcoKTsKKwl9CisKK30gLy9FYXJ0aFNjaWVuY2VMYWJlbFZhbHVlSW1wbApkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL2xhYmVscy9pbXBsL0xhYmVsc0ZhY3RvcnlJbXBsLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvbGFiZWxzL2ltcGwvTGFiZWxzRmFjdG9yeUltcGwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMjA4N2RlCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL2xhYmVscy9pbXBsL0xhYmVsc0ZhY3RvcnlJbXBsLmphdmEKQEAgLTAsMCArMSwzNDkgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuaW1wbDsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FRGF0YVR5cGU7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3Q7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5pbXBsLkVGYWN0b3J5SW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUucGx1Z2luLkVjb3JlUGx1Z2luOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLio7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuQXJlYUxhYmVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLkFyZWFMYWJlbFZhbHVlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLkNvbW1vbkJvcmRlclJlbGF0aW9uc2hpcExhYmVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLkNvbW1vbkJvcmRlclJlbGF0aW9uc2hpcExhYmVsVmFsdWU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuRWFydGhTY2llbmNlTGFiZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuRWFydGhTY2llbmNlTGFiZWxWYWx1ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5MYWJlbHNGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLkxhYmVsc1BhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuUGh5c2ljYWxSZWxhdGlvbnNoaXBMYWJlbFZhbHVlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLlBvcHVsYXRpb25MYWJlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5Qb3B1bGF0aW9uTGFiZWxWYWx1ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5SZWxhdGl2ZVBoeXNpY2FsUmVsYXRpb25zaGlwOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLlJlbGF0aXZlUGh5c2ljYWxSZWxhdGlvbnNoaXBMYWJlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5SZWxhdGl2ZVBoeXNpY2FsUmVsYXRpb25zaGlwTGFiZWxWYWx1ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5Sb2FkVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuUm9hZFRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsVmFsdWU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuVHJhbnNwb3J0TW9kZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5UcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5UcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbFZhbHVlOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiBBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgbW9kZWwgPGI+RmFjdG9yeTwvYj4uCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIExhYmVsc0ZhY3RvcnlJbXBsIGV4dGVuZHMgRUZhY3RvcnlJbXBsIGltcGxlbWVudHMgTGFiZWxzRmFjdG9yeSB7CisJLyoqCisJICogQ3JlYXRlcyB0aGUgZGVmYXVsdCBmYWN0b3J5IGltcGxlbWVudGF0aW9uLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBzdGF0aWMgTGFiZWxzRmFjdG9yeSBpbml0KCkgeworCQl0cnkgeworCQkJTGFiZWxzRmFjdG9yeSB0aGVMYWJlbHNGYWN0b3J5ID0gKExhYmVsc0ZhY3RvcnkpRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RUZhY3RvcnkoImh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy9sYWJlbHMuZWNvcmUiKTsgLy8kTk9OLU5MUy0xJCAKKwkJCWlmICh0aGVMYWJlbHNGYWN0b3J5ICE9IG51bGwpIHsKKwkJCQlyZXR1cm4gdGhlTGFiZWxzRmFjdG9yeTsKKwkJCX0KKwkJfQorCQljYXRjaCAoRXhjZXB0aW9uIGV4Y2VwdGlvbikgeworCQkJRWNvcmVQbHVnaW4uSU5TVEFOQ0UubG9nKGV4Y2VwdGlvbik7CisJCX0KKwkJcmV0dXJuIG5ldyBMYWJlbHNGYWN0b3J5SW1wbCgpOworCX0KKworCS8qKgorCSAqIENyZWF0ZXMgYW4gaW5zdGFuY2Ugb2YgdGhlIGZhY3RvcnkuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIExhYmVsc0ZhY3RvcnlJbXBsKCkgeworCQlzdXBlcigpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBFT2JqZWN0IGNyZWF0ZShFQ2xhc3MgZUNsYXNzKSB7CisJCXN3aXRjaCAoZUNsYXNzLmdldENsYXNzaWZpZXJJRCgpKSB7CisJCQljYXNlIExhYmVsc1BhY2thZ2UuQVJFQV9MQUJFTDogcmV0dXJuIGNyZWF0ZUFyZWFMYWJlbCgpOworCQkJY2FzZSBMYWJlbHNQYWNrYWdlLkFSRUFfTEFCRUxfVkFMVUU6IHJldHVybiBjcmVhdGVBcmVhTGFiZWxWYWx1ZSgpOworCQkJY2FzZSBMYWJlbHNQYWNrYWdlLkNPTU1PTl9CT1JERVJfUkVMQVRJT05TSElQX0xBQkVMOiByZXR1cm4gY3JlYXRlQ29tbW9uQm9yZGVyUmVsYXRpb25zaGlwTGFiZWwoKTsKKwkJCWNhc2UgTGFiZWxzUGFja2FnZS5DT01NT05fQk9SREVSX1JFTEFUSU9OU0hJUF9MQUJFTF9WQUxVRTogcmV0dXJuIGNyZWF0ZUNvbW1vbkJvcmRlclJlbGF0aW9uc2hpcExhYmVsVmFsdWUoKTsKKwkJCWNhc2UgTGFiZWxzUGFja2FnZS5QT1BVTEFUSU9OX0xBQkVMOiByZXR1cm4gY3JlYXRlUG9wdWxhdGlvbkxhYmVsKCk7CisJCQljYXNlIExhYmVsc1BhY2thZ2UuUE9QVUxBVElPTl9MQUJFTF9WQUxVRTogcmV0dXJuIGNyZWF0ZVBvcHVsYXRpb25MYWJlbFZhbHVlKCk7CisJCQljYXNlIExhYmVsc1BhY2thZ2UuUkVMQVRJVkVfUEhZU0lDQUxfUkVMQVRJT05TSElQX0xBQkVMOiByZXR1cm4gY3JlYXRlUmVsYXRpdmVQaHlzaWNhbFJlbGF0aW9uc2hpcExhYmVsKCk7CisJCQljYXNlIExhYmVsc1BhY2thZ2UuUkVMQVRJVkVfUEhZU0lDQUxfUkVMQVRJT05TSElQX0xBQkVMX1ZBTFVFOiByZXR1cm4gY3JlYXRlUmVsYXRpdmVQaHlzaWNhbFJlbGF0aW9uc2hpcExhYmVsVmFsdWUoKTsKKwkJCWNhc2UgTGFiZWxzUGFja2FnZS5UUkFOU1BPUlRfUkVMQVRJT05TSElQX0xBQkVMOiByZXR1cm4gY3JlYXRlVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWwoKTsKKwkJCWNhc2UgTGFiZWxzUGFja2FnZS5UUkFOU1BPUlRfUkVMQVRJT05TSElQX0xBQkVMX1ZBTFVFOiByZXR1cm4gY3JlYXRlVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxWYWx1ZSgpOworCQkJY2FzZSBMYWJlbHNQYWNrYWdlLlBIWVNJQ0FMX1JFTEFUSU9OU0hJUF9MQUJFTF9WQUxVRTogcmV0dXJuIGNyZWF0ZVBoeXNpY2FsUmVsYXRpb25zaGlwTGFiZWxWYWx1ZSgpOworCQkJY2FzZSBMYWJlbHNQYWNrYWdlLlJPQURfVFJBTlNQT1JUX1JFTEFUSU9OU0hJUF9MQUJFTDogcmV0dXJuIGNyZWF0ZVJvYWRUcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbCgpOworCQkJY2FzZSBMYWJlbHNQYWNrYWdlLlJPQURfVFJBTlNQT1JUX1JFTEFUSU9OU0hJUF9MQUJFTF9WQUxVRTogcmV0dXJuIGNyZWF0ZVJvYWRUcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbFZhbHVlKCk7CisJCQljYXNlIExhYmVsc1BhY2thZ2UuRUFSVEhfU0NJRU5DRV9MQUJFTDogcmV0dXJuIGNyZWF0ZUVhcnRoU2NpZW5jZUxhYmVsKCk7CisJCQljYXNlIExhYmVsc1BhY2thZ2UuRUFSVEhfU0NJRU5DRV9MQUJFTF9WQUxVRTogcmV0dXJuIGNyZWF0ZUVhcnRoU2NpZW5jZUxhYmVsVmFsdWUoKTsKKwkJCWRlZmF1bHQ6CisJCQkJdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiVGhlIGNsYXNzICciICsgZUNsYXNzLmdldE5hbWUoKSArICInIGlzIG5vdCBhIHZhbGlkIGNsYXNzaWZpZXIiKTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCisJCX0KKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgT2JqZWN0IGNyZWF0ZUZyb21TdHJpbmcoRURhdGFUeXBlIGVEYXRhVHlwZSwgU3RyaW5nIGluaXRpYWxWYWx1ZSkgeworCQlzd2l0Y2ggKGVEYXRhVHlwZS5nZXRDbGFzc2lmaWVySUQoKSkgeworCQkJY2FzZSBMYWJlbHNQYWNrYWdlLlJFTEFUSVZFX1BIWVNJQ0FMX1JFTEFUSU9OU0hJUDoKKwkJCQlyZXR1cm4gY3JlYXRlUmVsYXRpdmVQaHlzaWNhbFJlbGF0aW9uc2hpcEZyb21TdHJpbmcoZURhdGFUeXBlLCBpbml0aWFsVmFsdWUpOworCQkJY2FzZSBMYWJlbHNQYWNrYWdlLlRSQU5TUE9SVF9NT0RFOgorCQkJCXJldHVybiBjcmVhdGVUcmFuc3BvcnRNb2RlRnJvbVN0cmluZyhlRGF0YVR5cGUsIGluaXRpYWxWYWx1ZSk7CisJCQlkZWZhdWx0OgorCQkJCXRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIlRoZSBkYXRhdHlwZSAnIiArIGVEYXRhVHlwZS5nZXROYW1lKCkgKyAiJyBpcyBub3QgYSB2YWxpZCBjbGFzc2lmaWVyIik7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAorCQl9CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIFN0cmluZyBjb252ZXJ0VG9TdHJpbmcoRURhdGFUeXBlIGVEYXRhVHlwZSwgT2JqZWN0IGluc3RhbmNlVmFsdWUpIHsKKwkJc3dpdGNoIChlRGF0YVR5cGUuZ2V0Q2xhc3NpZmllcklEKCkpIHsKKwkJCWNhc2UgTGFiZWxzUGFja2FnZS5SRUxBVElWRV9QSFlTSUNBTF9SRUxBVElPTlNISVA6CisJCQkJcmV0dXJuIGNvbnZlcnRSZWxhdGl2ZVBoeXNpY2FsUmVsYXRpb25zaGlwVG9TdHJpbmcoZURhdGFUeXBlLCBpbnN0YW5jZVZhbHVlKTsKKwkJCWNhc2UgTGFiZWxzUGFja2FnZS5UUkFOU1BPUlRfTU9ERToKKwkJCQlyZXR1cm4gY29udmVydFRyYW5zcG9ydE1vZGVUb1N0cmluZyhlRGF0YVR5cGUsIGluc3RhbmNlVmFsdWUpOworCQkJZGVmYXVsdDoKKwkJCQl0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJUaGUgZGF0YXR5cGUgJyIgKyBlRGF0YVR5cGUuZ2V0TmFtZSgpICsgIicgaXMgbm90IGEgdmFsaWQgY2xhc3NpZmllciIpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKKwkJfQorCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBBcmVhTGFiZWwgY3JlYXRlQXJlYUxhYmVsKCkgeworCQlBcmVhTGFiZWxJbXBsIGFyZWFMYWJlbCA9IG5ldyBBcmVhTGFiZWxJbXBsKCk7CisJCXJldHVybiBhcmVhTGFiZWw7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEFyZWFMYWJlbFZhbHVlIGNyZWF0ZUFyZWFMYWJlbFZhbHVlKCkgeworCQlBcmVhTGFiZWxWYWx1ZUltcGwgYXJlYUxhYmVsVmFsdWUgPSBuZXcgQXJlYUxhYmVsVmFsdWVJbXBsKCk7CisJCXJldHVybiBhcmVhTGFiZWxWYWx1ZTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQ29tbW9uQm9yZGVyUmVsYXRpb25zaGlwTGFiZWwgY3JlYXRlQ29tbW9uQm9yZGVyUmVsYXRpb25zaGlwTGFiZWwoKSB7CisJCUNvbW1vbkJvcmRlclJlbGF0aW9uc2hpcExhYmVsSW1wbCBjb21tb25Cb3JkZXJSZWxhdGlvbnNoaXBMYWJlbCA9IG5ldyBDb21tb25Cb3JkZXJSZWxhdGlvbnNoaXBMYWJlbEltcGwoKTsKKwkJcmV0dXJuIGNvbW1vbkJvcmRlclJlbGF0aW9uc2hpcExhYmVsOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBDb21tb25Cb3JkZXJSZWxhdGlvbnNoaXBMYWJlbFZhbHVlIGNyZWF0ZUNvbW1vbkJvcmRlclJlbGF0aW9uc2hpcExhYmVsVmFsdWUoKSB7CisJCUNvbW1vbkJvcmRlclJlbGF0aW9uc2hpcExhYmVsVmFsdWVJbXBsIGNvbW1vbkJvcmRlclJlbGF0aW9uc2hpcExhYmVsVmFsdWUgPSBuZXcgQ29tbW9uQm9yZGVyUmVsYXRpb25zaGlwTGFiZWxWYWx1ZUltcGwoKTsKKwkJcmV0dXJuIGNvbW1vbkJvcmRlclJlbGF0aW9uc2hpcExhYmVsVmFsdWU7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFBvcHVsYXRpb25MYWJlbCBjcmVhdGVQb3B1bGF0aW9uTGFiZWwoKSB7CisJCVBvcHVsYXRpb25MYWJlbEltcGwgcG9wdWxhdGlvbkxhYmVsID0gbmV3IFBvcHVsYXRpb25MYWJlbEltcGwoKTsKKwkJcmV0dXJuIHBvcHVsYXRpb25MYWJlbDsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgUG9wdWxhdGlvbkxhYmVsVmFsdWUgY3JlYXRlUG9wdWxhdGlvbkxhYmVsVmFsdWUoKSB7CisJCVBvcHVsYXRpb25MYWJlbFZhbHVlSW1wbCBwb3B1bGF0aW9uTGFiZWxWYWx1ZSA9IG5ldyBQb3B1bGF0aW9uTGFiZWxWYWx1ZUltcGwoKTsKKwkJcmV0dXJuIHBvcHVsYXRpb25MYWJlbFZhbHVlOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBSZWxhdGl2ZVBoeXNpY2FsUmVsYXRpb25zaGlwTGFiZWwgY3JlYXRlUmVsYXRpdmVQaHlzaWNhbFJlbGF0aW9uc2hpcExhYmVsKCkgeworCQlSZWxhdGl2ZVBoeXNpY2FsUmVsYXRpb25zaGlwTGFiZWxJbXBsIHJlbGF0aXZlUGh5c2ljYWxSZWxhdGlvbnNoaXBMYWJlbCA9IG5ldyBSZWxhdGl2ZVBoeXNpY2FsUmVsYXRpb25zaGlwTGFiZWxJbXBsKCk7CisJCXJldHVybiByZWxhdGl2ZVBoeXNpY2FsUmVsYXRpb25zaGlwTGFiZWw7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFJlbGF0aXZlUGh5c2ljYWxSZWxhdGlvbnNoaXBMYWJlbFZhbHVlIGNyZWF0ZVJlbGF0aXZlUGh5c2ljYWxSZWxhdGlvbnNoaXBMYWJlbFZhbHVlKCkgeworCQlSZWxhdGl2ZVBoeXNpY2FsUmVsYXRpb25zaGlwTGFiZWxWYWx1ZUltcGwgcmVsYXRpdmVQaHlzaWNhbFJlbGF0aW9uc2hpcExhYmVsVmFsdWUgPSBuZXcgUmVsYXRpdmVQaHlzaWNhbFJlbGF0aW9uc2hpcExhYmVsVmFsdWVJbXBsKCk7CisJCXJldHVybiByZWxhdGl2ZVBoeXNpY2FsUmVsYXRpb25zaGlwTGFiZWxWYWx1ZTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWwgY3JlYXRlVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWwoKSB7CisJCVRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsSW1wbCB0cmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbCA9IG5ldyBUcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbEltcGwoKTsKKwkJcmV0dXJuIHRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBUcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbFZhbHVlIGNyZWF0ZVRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsVmFsdWUoKSB7CisJCVRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsVmFsdWVJbXBsIHRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsVmFsdWUgPSBuZXcgVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxWYWx1ZUltcGwoKTsKKwkJcmV0dXJuIHRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsVmFsdWU7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFBoeXNpY2FsUmVsYXRpb25zaGlwTGFiZWxWYWx1ZSBjcmVhdGVQaHlzaWNhbFJlbGF0aW9uc2hpcExhYmVsVmFsdWUoKSB7CisJCVBoeXNpY2FsUmVsYXRpb25zaGlwTGFiZWxWYWx1ZUltcGwgcGh5c2ljYWxSZWxhdGlvbnNoaXBMYWJlbFZhbHVlID0gbmV3IFBoeXNpY2FsUmVsYXRpb25zaGlwTGFiZWxWYWx1ZUltcGwoKTsKKwkJcmV0dXJuIHBoeXNpY2FsUmVsYXRpb25zaGlwTGFiZWxWYWx1ZTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgUm9hZFRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsIGNyZWF0ZVJvYWRUcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbCgpIHsKKwkJUm9hZFRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsSW1wbCByb2FkVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWwgPSBuZXcgUm9hZFRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsSW1wbCgpOworCQlyZXR1cm4gcm9hZFRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBSb2FkVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxWYWx1ZSBjcmVhdGVSb2FkVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxWYWx1ZSgpIHsKKwkJUm9hZFRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsVmFsdWVJbXBsIHJvYWRUcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbFZhbHVlID0gbmV3IFJvYWRUcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbFZhbHVlSW1wbCgpOworCQlyZXR1cm4gcm9hZFRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsVmFsdWU7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVhcnRoU2NpZW5jZUxhYmVsIGNyZWF0ZUVhcnRoU2NpZW5jZUxhYmVsKCkgeworCQlFYXJ0aFNjaWVuY2VMYWJlbEltcGwgZWFydGhTY2llbmNlTGFiZWwgPSBuZXcgRWFydGhTY2llbmNlTGFiZWxJbXBsKCk7CisJCXJldHVybiBlYXJ0aFNjaWVuY2VMYWJlbDsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRWFydGhTY2llbmNlTGFiZWxWYWx1ZSBjcmVhdGVFYXJ0aFNjaWVuY2VMYWJlbFZhbHVlKCkgeworCQlFYXJ0aFNjaWVuY2VMYWJlbFZhbHVlSW1wbCBlYXJ0aFNjaWVuY2VMYWJlbFZhbHVlID0gbmV3IEVhcnRoU2NpZW5jZUxhYmVsVmFsdWVJbXBsKCk7CisJCXJldHVybiBlYXJ0aFNjaWVuY2VMYWJlbFZhbHVlOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBSZWxhdGl2ZVBoeXNpY2FsUmVsYXRpb25zaGlwIGNyZWF0ZVJlbGF0aXZlUGh5c2ljYWxSZWxhdGlvbnNoaXBGcm9tU3RyaW5nKEVEYXRhVHlwZSBlRGF0YVR5cGUsIFN0cmluZyBpbml0aWFsVmFsdWUpIHsKKwkJUmVsYXRpdmVQaHlzaWNhbFJlbGF0aW9uc2hpcCByZXN1bHQgPSBSZWxhdGl2ZVBoeXNpY2FsUmVsYXRpb25zaGlwLmdldChpbml0aWFsVmFsdWUpOworCQlpZiAocmVzdWx0ID09IG51bGwpIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIlRoZSB2YWx1ZSAnIiArIGluaXRpYWxWYWx1ZSArICInIGlzIG5vdCBhIHZhbGlkIGVudW1lcmF0b3Igb2YgJyIgKyBlRGF0YVR5cGUuZ2V0TmFtZSgpICsgIiciKTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkIC8vJE5PTi1OTFMtMyQKKwkJcmV0dXJuIHJlc3VsdDsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgU3RyaW5nIGNvbnZlcnRSZWxhdGl2ZVBoeXNpY2FsUmVsYXRpb25zaGlwVG9TdHJpbmcoRURhdGFUeXBlIGVEYXRhVHlwZSwgT2JqZWN0IGluc3RhbmNlVmFsdWUpIHsKKwkJcmV0dXJuIGluc3RhbmNlVmFsdWUgPT0gbnVsbCA/IG51bGwgOiBpbnN0YW5jZVZhbHVlLnRvU3RyaW5nKCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFRyYW5zcG9ydE1vZGUgY3JlYXRlVHJhbnNwb3J0TW9kZUZyb21TdHJpbmcoRURhdGFUeXBlIGVEYXRhVHlwZSwgU3RyaW5nIGluaXRpYWxWYWx1ZSkgeworCQlUcmFuc3BvcnRNb2RlIHJlc3VsdCA9IFRyYW5zcG9ydE1vZGUuZ2V0KGluaXRpYWxWYWx1ZSk7CisJCWlmIChyZXN1bHQgPT0gbnVsbCkgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiVGhlIHZhbHVlICciICsgaW5pdGlhbFZhbHVlICsgIicgaXMgbm90IGEgdmFsaWQgZW51bWVyYXRvciBvZiAnIiArIGVEYXRhVHlwZS5nZXROYW1lKCkgKyAiJyIpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQgLy8kTk9OLU5MUy0zJAorCQlyZXR1cm4gcmVzdWx0OworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBTdHJpbmcgY29udmVydFRyYW5zcG9ydE1vZGVUb1N0cmluZyhFRGF0YVR5cGUgZURhdGFUeXBlLCBPYmplY3QgaW5zdGFuY2VWYWx1ZSkgeworCQlyZXR1cm4gaW5zdGFuY2VWYWx1ZSA9PSBudWxsID8gbnVsbCA6IGluc3RhbmNlVmFsdWUudG9TdHJpbmcoKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgTGFiZWxzUGFja2FnZSBnZXRMYWJlbHNQYWNrYWdlKCkgeworCQlyZXR1cm4gKExhYmVsc1BhY2thZ2UpZ2V0RVBhY2thZ2UoKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBkZXByZWNhdGVkCisJICogQGdlbmVyYXRlZAorCSAqLworCUBEZXByZWNhdGVkCisJcHVibGljIHN0YXRpYyBMYWJlbHNQYWNrYWdlIGdldFBhY2thZ2UoKSB7CisJCXJldHVybiBMYWJlbHNQYWNrYWdlLmVJTlNUQU5DRTsKKwl9CisKK30gLy9MYWJlbHNGYWN0b3J5SW1wbApkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL2xhYmVscy9pbXBsL0xhYmVsc1BhY2thZ2VJbXBsLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvbGFiZWxzL2ltcGwvTGFiZWxzUGFja2FnZUltcGwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNmJjY2Q1Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL2xhYmVscy9pbXBsL0xhYmVsc1BhY2thZ2VJbXBsLmphdmEKQEAgLTAsMCArMSwxMDU3IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLmltcGw7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVBdHRyaWJ1dGU7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzczsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUVudW07CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FUmVmZXJlbmNlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FY29yZVBhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLmltcGwuRVBhY2thZ2VJbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uQ29tbW9uUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguR3JhcGhQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5Nb2RlbFBhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLk1vZGlmaWVyUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2NlbmFyaW8uU2NlbmFyaW9QYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zZXF1ZW5jZXIuU2VxdWVuY2VyUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc29sdmVyLlNvbHZlclBhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5lZGdlcy5FZGdlc1BhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5lZGdlcy5pbXBsLkVkZ2VzUGFja2FnZUltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuQXJlYUxhYmVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLkFyZWFMYWJlbFZhbHVlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLkNvbW1vbkJvcmRlclJlbGF0aW9uc2hpcExhYmVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLkNvbW1vbkJvcmRlclJlbGF0aW9uc2hpcExhYmVsVmFsdWU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuRWFydGhTY2llbmNlTGFiZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuRWFydGhTY2llbmNlTGFiZWxWYWx1ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5MYWJlbHNGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLkxhYmVsc1BhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuUGh5c2ljYWxSZWxhdGlvbnNoaXBMYWJlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5QaHlzaWNhbFJlbGF0aW9uc2hpcExhYmVsVmFsdWU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuUG9wdWxhdGlvbkxhYmVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLlBvcHVsYXRpb25MYWJlbFZhbHVlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLlJlbGF0aXZlUGh5c2ljYWxSZWxhdGlvbnNoaXA7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuUmVsYXRpdmVQaHlzaWNhbFJlbGF0aW9uc2hpcExhYmVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLlJlbGF0aXZlUGh5c2ljYWxSZWxhdGlvbnNoaXBMYWJlbFZhbHVlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLlJvYWRUcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5Sb2FkVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxWYWx1ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5UcmFuc3BvcnRNb2RlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLlRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLlRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsVmFsdWU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5ub2Rlcy5Ob2Rlc1BhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5ub2Rlcy5pbXBsLk5vZGVzUGFja2FnZUltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy50eXBlcy5UeXBlc1BhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy50eXBlcy5pbXBsLlR5cGVzUGFja2FnZUltcGw7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIEFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBtb2RlbCA8Yj5QYWNrYWdlPC9iPi4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgTGFiZWxzUGFja2FnZUltcGwgZXh0ZW5kcyBFUGFja2FnZUltcGwgaW1wbGVtZW50cyBMYWJlbHNQYWNrYWdlIHsKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcml2YXRlIEVDbGFzcyBhcmVhTGFiZWxFQ2xhc3MgPSBudWxsOworCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJpdmF0ZSBFQ2xhc3MgYXJlYUxhYmVsVmFsdWVFQ2xhc3MgPSBudWxsOworCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJpdmF0ZSBFQ2xhc3MgY29tbW9uQm9yZGVyUmVsYXRpb25zaGlwTGFiZWxFQ2xhc3MgPSBudWxsOworCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJpdmF0ZSBFQ2xhc3MgY29tbW9uQm9yZGVyUmVsYXRpb25zaGlwTGFiZWxWYWx1ZUVDbGFzcyA9IG51bGw7CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcml2YXRlIEVDbGFzcyBwaHlzaWNhbFJlbGF0aW9uc2hpcExhYmVsRUNsYXNzID0gbnVsbDsKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByaXZhdGUgRUNsYXNzIHBvcHVsYXRpb25MYWJlbEVDbGFzcyA9IG51bGw7CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcml2YXRlIEVDbGFzcyBwb3B1bGF0aW9uTGFiZWxWYWx1ZUVDbGFzcyA9IG51bGw7CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcml2YXRlIEVDbGFzcyByZWxhdGl2ZVBoeXNpY2FsUmVsYXRpb25zaGlwTGFiZWxFQ2xhc3MgPSBudWxsOworCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJpdmF0ZSBFQ2xhc3MgcmVsYXRpdmVQaHlzaWNhbFJlbGF0aW9uc2hpcExhYmVsVmFsdWVFQ2xhc3MgPSBudWxsOworCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJpdmF0ZSBFQ2xhc3MgdHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxFQ2xhc3MgPSBudWxsOworCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJpdmF0ZSBFQ2xhc3MgdHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxWYWx1ZUVDbGFzcyA9IG51bGw7CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcml2YXRlIEVDbGFzcyBwaHlzaWNhbFJlbGF0aW9uc2hpcExhYmVsVmFsdWVFQ2xhc3MgPSBudWxsOworCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJpdmF0ZSBFQ2xhc3Mgcm9hZFRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsRUNsYXNzID0gbnVsbDsKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByaXZhdGUgRUNsYXNzIHJvYWRUcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbFZhbHVlRUNsYXNzID0gbnVsbDsKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByaXZhdGUgRUNsYXNzIGVhcnRoU2NpZW5jZUxhYmVsRUNsYXNzID0gbnVsbDsKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByaXZhdGUgRUNsYXNzIGVhcnRoU2NpZW5jZUxhYmVsVmFsdWVFQ2xhc3MgPSBudWxsOworCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJpdmF0ZSBFRW51bSByZWxhdGl2ZVBoeXNpY2FsUmVsYXRpb25zaGlwRUVudW0gPSBudWxsOworCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJpdmF0ZSBFRW51bSB0cmFuc3BvcnRNb2RlRUVudW0gPSBudWxsOworCisJLyoqCisJICogQ3JlYXRlcyBhbiBpbnN0YW5jZSBvZiB0aGUgbW9kZWwgPGI+UGFja2FnZTwvYj4sIHJlZ2lzdGVyZWQgd2l0aAorCSAqIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRVBhY2thZ2UuUmVnaXN0cnkgRVBhY2thZ2UuUmVnaXN0cnl9IGJ5IHRoZSBwYWNrYWdlCisJICogcGFja2FnZSBVUkkgdmFsdWUuCisJICogPHA+Tm90ZTogdGhlIGNvcnJlY3Qgd2F5IHRvIGNyZWF0ZSB0aGUgcGFja2FnZSBpcyB2aWEgdGhlIHN0YXRpYworCSAqIGZhY3RvcnkgbWV0aG9kIHtAbGluayAjaW5pdCBpbml0KCl9LCB3aGljaCBhbHNvIHBlcmZvcm1zCisJICogaW5pdGlhbGl6YXRpb24gb2YgdGhlIHBhY2thZ2UsIG9yIHJldHVybnMgdGhlIHJlZ2lzdGVyZWQgcGFja2FnZSwKKwkgKiBpZiBvbmUgYWxyZWFkeSBleGlzdHMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FUGFja2FnZS5SZWdpc3RyeQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuTGFiZWxzUGFja2FnZSNlTlNfVVJJCisJICogQHNlZSAjaW5pdCgpCisJICogQGdlbmVyYXRlZAorCSAqLworCXByaXZhdGUgTGFiZWxzUGFja2FnZUltcGwoKSB7CisJCXN1cGVyKGVOU19VUkksIExhYmVsc0ZhY3RvcnkuZUlOU1RBTkNFKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcml2YXRlIHN0YXRpYyBib29sZWFuIGlzSW5pdGVkID0gZmFsc2U7CisKKwkvKioKKwkgKiBDcmVhdGVzLCByZWdpc3RlcnMsIGFuZCBpbml0aWFsaXplcyB0aGUgPGI+UGFja2FnZTwvYj4gZm9yIHRoaXMgbW9kZWwsIGFuZCBmb3IgYW55IG90aGVycyB1cG9uIHdoaWNoIGl0IGRlcGVuZHMuCisJICogCisJICogPHA+VGhpcyBtZXRob2QgaXMgdXNlZCB0byBpbml0aWFsaXplIHtAbGluayBMYWJlbHNQYWNrYWdlI2VJTlNUQU5DRX0gd2hlbiB0aGF0IGZpZWxkIGlzIGFjY2Vzc2VkLgorCSAqIENsaWVudHMgc2hvdWxkIG5vdCBpbnZva2UgaXQgZGlyZWN0bHkuIEluc3RlYWQsIHRoZXkgc2hvdWxkIHNpbXBseSBhY2Nlc3MgdGhhdCBmaWVsZCB0byBvYnRhaW4gdGhlIHBhY2thZ2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNlTlNfVVJJCisJICogQHNlZSAjY3JlYXRlUGFja2FnZUNvbnRlbnRzKCkKKwkgKiBAc2VlICNpbml0aWFsaXplUGFja2FnZUNvbnRlbnRzKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHN0YXRpYyBMYWJlbHNQYWNrYWdlIGluaXQoKSB7CisJCWlmIChpc0luaXRlZCkgcmV0dXJuIChMYWJlbHNQYWNrYWdlKUVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVQYWNrYWdlKExhYmVsc1BhY2thZ2UuZU5TX1VSSSk7CisKKwkJLy8gT2J0YWluIG9yIGNyZWF0ZSBhbmQgcmVnaXN0ZXIgcGFja2FnZQorCQlMYWJlbHNQYWNrYWdlSW1wbCB0aGVMYWJlbHNQYWNrYWdlID0gKExhYmVsc1BhY2thZ2VJbXBsKShFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXQoZU5TX1VSSSkgaW5zdGFuY2VvZiBMYWJlbHNQYWNrYWdlSW1wbCA/IEVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldChlTlNfVVJJKSA6IG5ldyBMYWJlbHNQYWNrYWdlSW1wbCgpKTsKKworCQlpc0luaXRlZCA9IHRydWU7CisKKwkJLy8gSW5pdGlhbGl6ZSBzaW1wbGUgZGVwZW5kZW5jaWVzCisJCUdyYXBoUGFja2FnZS5lSU5TVEFOQ0UuZUNsYXNzKCk7CisJCUNvbW1vblBhY2thZ2UuZUlOU1RBTkNFLmVDbGFzcygpOworCQlNb2RlbFBhY2thZ2UuZUlOU1RBTkNFLmVDbGFzcygpOworCQlNb2RpZmllclBhY2thZ2UuZUlOU1RBTkNFLmVDbGFzcygpOworCQlTY2VuYXJpb1BhY2thZ2UuZUlOU1RBTkNFLmVDbGFzcygpOworCQlTZXF1ZW5jZXJQYWNrYWdlLmVJTlNUQU5DRS5lQ2xhc3MoKTsKKwkJU29sdmVyUGFja2FnZS5lSU5TVEFOQ0UuZUNsYXNzKCk7CisKKwkJLy8gT2J0YWluIG9yIGNyZWF0ZSBhbmQgcmVnaXN0ZXIgaW50ZXJkZXBlbmRlbmNpZXMKKwkJRWRnZXNQYWNrYWdlSW1wbCB0aGVFZGdlc1BhY2thZ2UgPSAoRWRnZXNQYWNrYWdlSW1wbCkoRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RVBhY2thZ2UoRWRnZXNQYWNrYWdlLmVOU19VUkkpIGluc3RhbmNlb2YgRWRnZXNQYWNrYWdlSW1wbCA/IEVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVQYWNrYWdlKEVkZ2VzUGFja2FnZS5lTlNfVVJJKSA6IEVkZ2VzUGFja2FnZS5lSU5TVEFOQ0UpOworCQlOb2Rlc1BhY2thZ2VJbXBsIHRoZU5vZGVzUGFja2FnZSA9IChOb2Rlc1BhY2thZ2VJbXBsKShFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShOb2Rlc1BhY2thZ2UuZU5TX1VSSSkgaW5zdGFuY2VvZiBOb2Rlc1BhY2thZ2VJbXBsID8gRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RVBhY2thZ2UoTm9kZXNQYWNrYWdlLmVOU19VUkkpIDogTm9kZXNQYWNrYWdlLmVJTlNUQU5DRSk7CisJCVR5cGVzUGFja2FnZUltcGwgdGhlVHlwZXNQYWNrYWdlID0gKFR5cGVzUGFja2FnZUltcGwpKEVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVQYWNrYWdlKFR5cGVzUGFja2FnZS5lTlNfVVJJKSBpbnN0YW5jZW9mIFR5cGVzUGFja2FnZUltcGwgPyBFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShUeXBlc1BhY2thZ2UuZU5TX1VSSSkgOiBUeXBlc1BhY2thZ2UuZUlOU1RBTkNFKTsKKworCQkvLyBDcmVhdGUgcGFja2FnZSBtZXRhLWRhdGEgb2JqZWN0cworCQl0aGVMYWJlbHNQYWNrYWdlLmNyZWF0ZVBhY2thZ2VDb250ZW50cygpOworCQl0aGVFZGdlc1BhY2thZ2UuY3JlYXRlUGFja2FnZUNvbnRlbnRzKCk7CisJCXRoZU5vZGVzUGFja2FnZS5jcmVhdGVQYWNrYWdlQ29udGVudHMoKTsKKwkJdGhlVHlwZXNQYWNrYWdlLmNyZWF0ZVBhY2thZ2VDb250ZW50cygpOworCisJCS8vIEluaXRpYWxpemUgY3JlYXRlZCBtZXRhLWRhdGEKKwkJdGhlTGFiZWxzUGFja2FnZS5pbml0aWFsaXplUGFja2FnZUNvbnRlbnRzKCk7CisJCXRoZUVkZ2VzUGFja2FnZS5pbml0aWFsaXplUGFja2FnZUNvbnRlbnRzKCk7CisJCXRoZU5vZGVzUGFja2FnZS5pbml0aWFsaXplUGFja2FnZUNvbnRlbnRzKCk7CisJCXRoZVR5cGVzUGFja2FnZS5pbml0aWFsaXplUGFja2FnZUNvbnRlbnRzKCk7CisKKwkJLy8gTWFyayBtZXRhLWRhdGEgdG8gaW5kaWNhdGUgaXQgY2FuJ3QgYmUgY2hhbmdlZAorCQl0aGVMYWJlbHNQYWNrYWdlLmZyZWV6ZSgpOworCisgIAorCQkvLyBVcGRhdGUgdGhlIHJlZ2lzdHJ5IGFuZCByZXR1cm4gdGhlIHBhY2thZ2UKKwkJRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UucHV0KExhYmVsc1BhY2thZ2UuZU5TX1VSSSwgdGhlTGFiZWxzUGFja2FnZSk7CisJCXJldHVybiB0aGVMYWJlbHNQYWNrYWdlOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQ2xhc3MgZ2V0QXJlYUxhYmVsKCkgeworCQlyZXR1cm4gYXJlYUxhYmVsRUNsYXNzOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFUmVmZXJlbmNlIGdldEFyZWFMYWJlbF9DdXJyZW50QXJlYVZhbHVlKCkgeworCQlyZXR1cm4gKEVSZWZlcmVuY2UpYXJlYUxhYmVsRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVDbGFzcyBnZXRBcmVhTGFiZWxWYWx1ZSgpIHsKKwkJcmV0dXJuIGFyZWFMYWJlbFZhbHVlRUNsYXNzOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQXR0cmlidXRlIGdldEFyZWFMYWJlbFZhbHVlX0FyZWEoKSB7CisJCXJldHVybiAoRUF0dHJpYnV0ZSlhcmVhTGFiZWxWYWx1ZUVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDApOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQXR0cmlidXRlIGdldEFyZWFMYWJlbFZhbHVlX0F2ZXJhZ2VFeHRlbnQoKSB7CisJCXJldHVybiAoRUF0dHJpYnV0ZSlhcmVhTGFiZWxWYWx1ZUVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDEpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQ2xhc3MgZ2V0Q29tbW9uQm9yZGVyUmVsYXRpb25zaGlwTGFiZWwoKSB7CisJCXJldHVybiBjb21tb25Cb3JkZXJSZWxhdGlvbnNoaXBMYWJlbEVDbGFzczsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUNsYXNzIGdldENvbW1vbkJvcmRlclJlbGF0aW9uc2hpcExhYmVsVmFsdWUoKSB7CisJCXJldHVybiBjb21tb25Cb3JkZXJSZWxhdGlvbnNoaXBMYWJlbFZhbHVlRUNsYXNzOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQXR0cmlidXRlIGdldENvbW1vbkJvcmRlclJlbGF0aW9uc2hpcExhYmVsVmFsdWVfQm9yZGVyTGVuZ3RoKCkgeworCQlyZXR1cm4gKEVBdHRyaWJ1dGUpY29tbW9uQm9yZGVyUmVsYXRpb25zaGlwTGFiZWxWYWx1ZUVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDApOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQ2xhc3MgZ2V0UGh5c2ljYWxSZWxhdGlvbnNoaXBMYWJlbCgpIHsKKwkJcmV0dXJuIHBoeXNpY2FsUmVsYXRpb25zaGlwTGFiZWxFQ2xhc3M7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVDbGFzcyBnZXRQb3B1bGF0aW9uTGFiZWwoKSB7CisJCXJldHVybiBwb3B1bGF0aW9uTGFiZWxFQ2xhc3M7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVBdHRyaWJ1dGUgZ2V0UG9wdWxhdGlvbkxhYmVsX1BvcHVsYXRpb25JZGVudGlmaWVyKCkgeworCQlyZXR1cm4gKEVBdHRyaWJ1dGUpcG9wdWxhdGlvbkxhYmVsRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVBdHRyaWJ1dGUgZ2V0UG9wdWxhdGlvbkxhYmVsX05hbWUoKSB7CisJCXJldHVybiAoRUF0dHJpYnV0ZSlwb3B1bGF0aW9uTGFiZWxFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgxKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRVJlZmVyZW5jZSBnZXRQb3B1bGF0aW9uTGFiZWxfQ3VycmVudFBvcHVsYXRpb25WYWx1ZSgpIHsKKwkJcmV0dXJuIChFUmVmZXJlbmNlKXBvcHVsYXRpb25MYWJlbEVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDIpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQXR0cmlidXRlIGdldFBvcHVsYXRpb25MYWJlbF9Qb3B1bGF0ZWRBcmVhKCkgeworCQlyZXR1cm4gKEVBdHRyaWJ1dGUpcG9wdWxhdGlvbkxhYmVsRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMyk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVBdHRyaWJ1dGUgZ2V0UG9wdWxhdGlvbkxhYmVsX1ZhbGlkWWVhcigpIHsKKwkJcmV0dXJuIChFQXR0cmlidXRlKXBvcHVsYXRpb25MYWJlbEVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDQpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQ2xhc3MgZ2V0UG9wdWxhdGlvbkxhYmVsVmFsdWUoKSB7CisJCXJldHVybiBwb3B1bGF0aW9uTGFiZWxWYWx1ZUVDbGFzczsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUF0dHJpYnV0ZSBnZXRQb3B1bGF0aW9uTGFiZWxWYWx1ZV9Db3VudCgpIHsKKwkJcmV0dXJuIChFQXR0cmlidXRlKXBvcHVsYXRpb25MYWJlbFZhbHVlRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVDbGFzcyBnZXRSZWxhdGl2ZVBoeXNpY2FsUmVsYXRpb25zaGlwTGFiZWwoKSB7CisJCXJldHVybiByZWxhdGl2ZVBoeXNpY2FsUmVsYXRpb25zaGlwTGFiZWxFQ2xhc3M7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVSZWZlcmVuY2UgZ2V0UmVsYXRpdmVQaHlzaWNhbFJlbGF0aW9uc2hpcExhYmVsX0N1cnJlbnRSZWxhdGlvbnNoaXAoKSB7CisJCXJldHVybiAoRVJlZmVyZW5jZSlyZWxhdGl2ZVBoeXNpY2FsUmVsYXRpb25zaGlwTGFiZWxFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgwKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUNsYXNzIGdldFJlbGF0aXZlUGh5c2ljYWxSZWxhdGlvbnNoaXBMYWJlbFZhbHVlKCkgeworCQlyZXR1cm4gcmVsYXRpdmVQaHlzaWNhbFJlbGF0aW9uc2hpcExhYmVsVmFsdWVFQ2xhc3M7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVBdHRyaWJ1dGUgZ2V0UmVsYXRpdmVQaHlzaWNhbFJlbGF0aW9uc2hpcExhYmVsVmFsdWVfQWRqYWNlbnQoKSB7CisJCXJldHVybiAoRUF0dHJpYnV0ZSlyZWxhdGl2ZVBoeXNpY2FsUmVsYXRpb25zaGlwTGFiZWxWYWx1ZUVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDApOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQXR0cmlidXRlIGdldFJlbGF0aXZlUGh5c2ljYWxSZWxhdGlvbnNoaXBMYWJlbFZhbHVlX1JlbGF0aW9uc2hpcCgpIHsKKwkJcmV0dXJuIChFQXR0cmlidXRlKXJlbGF0aXZlUGh5c2ljYWxSZWxhdGlvbnNoaXBMYWJlbFZhbHVlRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVDbGFzcyBnZXRUcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbCgpIHsKKwkJcmV0dXJuIHRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsRUNsYXNzOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQXR0cmlidXRlIGdldFRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsX1RyYW5zcG9ydE1vZGUoKSB7CisJCXJldHVybiAoRUF0dHJpYnV0ZSl0cmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbEVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDApOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQXR0cmlidXRlIGdldFRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsX1BvcHVsYXRpb25JZGVudGlmaWVyKCkgeworCQlyZXR1cm4gKEVBdHRyaWJ1dGUpdHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgxKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUF0dHJpYnV0ZSBnZXRUcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbF9UcmFuc3BvcnRJZGVudGlmaWVyKCkgeworCQlyZXR1cm4gKEVBdHRyaWJ1dGUpdHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgyKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRVJlZmVyZW5jZSBnZXRUcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbF9DdXJyZW50VHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxWYWx1ZSgpIHsKKwkJcmV0dXJuIChFUmVmZXJlbmNlKXRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMyk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVBdHRyaWJ1dGUgZ2V0VHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxfUmF0ZVRpbWVQZXJpb2QoKSB7CisJCXJldHVybiAoRUF0dHJpYnV0ZSl0cmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbEVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDQpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQXR0cmlidXRlIGdldFRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsX0RlcGFydHVyZUNhcGFjaXR5KCkgeworCQlyZXR1cm4gKEVBdHRyaWJ1dGUpdHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCg1KTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUF0dHJpYnV0ZSBnZXRUcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbF9NYXhpbXVtRGVwYXJ0dXJlQ2FwYWNpdHkoKSB7CisJCXJldHVybiAoRUF0dHJpYnV0ZSl0cmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbEVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDYpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQXR0cmlidXRlIGdldFRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsX0NhcGFjaXR5KCkgeworCQlyZXR1cm4gKEVBdHRyaWJ1dGUpdHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCg3KTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUF0dHJpYnV0ZSBnZXRUcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbF9NYXhpbXVtQ2FwYWNpdHkoKSB7CisJCXJldHVybiAoRUF0dHJpYnV0ZSl0cmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbEVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDgpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQXR0cmlidXRlIGdldFRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsX1RyYW5zaXRUaW1lKCkgeworCQlyZXR1cm4gKEVBdHRyaWJ1dGUpdHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCg5KTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUF0dHJpYnV0ZSBnZXRUcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbF9TdGFydFVwRGVsYXkoKSB7CisJCXJldHVybiAoRUF0dHJpYnV0ZSl0cmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbEVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDEwKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUNsYXNzIGdldFRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsVmFsdWUoKSB7CisJCXJldHVybiB0cmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbFZhbHVlRUNsYXNzOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQXR0cmlidXRlIGdldFRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsVmFsdWVfQXZhaWxhYmxlRGVwYXJ0dXJlQ2FwYWNpdHlQcm9wb3J0aW9uKCkgeworCQlyZXR1cm4gKEVBdHRyaWJ1dGUpdHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxWYWx1ZUVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDApOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQ2xhc3MgZ2V0UGh5c2ljYWxSZWxhdGlvbnNoaXBMYWJlbFZhbHVlKCkgeworCQlyZXR1cm4gcGh5c2ljYWxSZWxhdGlvbnNoaXBMYWJlbFZhbHVlRUNsYXNzOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQ2xhc3MgZ2V0Um9hZFRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsKCkgeworCQlyZXR1cm4gcm9hZFRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsRUNsYXNzOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQ2xhc3MgZ2V0Um9hZFRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsVmFsdWUoKSB7CisJCXJldHVybiByb2FkVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxWYWx1ZUVDbGFzczsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUF0dHJpYnV0ZSBnZXRSb2FkVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxWYWx1ZV9Sb2FkTmFtZSgpIHsKKwkJcmV0dXJuIChFQXR0cmlidXRlKXJvYWRUcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbFZhbHVlRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVBdHRyaWJ1dGUgZ2V0Um9hZFRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsVmFsdWVfUm9hZENsYXNzKCkgeworCQlyZXR1cm4gKEVBdHRyaWJ1dGUpcm9hZFRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsVmFsdWVFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgxKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUF0dHJpYnV0ZSBnZXRSb2FkVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxWYWx1ZV9OdW1iZXJDcm9zc2luZ3MoKSB7CisJCXJldHVybiAoRUF0dHJpYnV0ZSlyb2FkVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxWYWx1ZUVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDIpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQ2xhc3MgZ2V0RWFydGhTY2llbmNlTGFiZWwoKSB7CisJCXJldHVybiBlYXJ0aFNjaWVuY2VMYWJlbEVDbGFzczsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRVJlZmVyZW5jZSBnZXRFYXJ0aFNjaWVuY2VMYWJlbF9DdXJyZW50RWFydGhTY2llbmNlVmFsdWUoKSB7CisJCXJldHVybiAoRVJlZmVyZW5jZSllYXJ0aFNjaWVuY2VMYWJlbEVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDApOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQ2xhc3MgZ2V0RWFydGhTY2llbmNlTGFiZWxWYWx1ZSgpIHsKKwkJcmV0dXJuIGVhcnRoU2NpZW5jZUxhYmVsVmFsdWVFQ2xhc3M7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVBdHRyaWJ1dGUgZ2V0RWFydGhTY2llbmNlTGFiZWxWYWx1ZV9EYXRhVHlwZSgpIHsKKwkJcmV0dXJuIChFQXR0cmlidXRlKWVhcnRoU2NpZW5jZUxhYmVsVmFsdWVFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgwKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUF0dHJpYnV0ZSBnZXRFYXJ0aFNjaWVuY2VMYWJlbFZhbHVlX1VuaXRzKCkgeworCQlyZXR1cm4gKEVBdHRyaWJ1dGUpZWFydGhTY2llbmNlTGFiZWxWYWx1ZUVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDEpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQXR0cmlidXRlIGdldEVhcnRoU2NpZW5jZUxhYmVsVmFsdWVfTWVhbigpIHsKKwkJcmV0dXJuIChFQXR0cmlidXRlKWVhcnRoU2NpZW5jZUxhYmVsVmFsdWVFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgyKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUF0dHJpYnV0ZSBnZXRFYXJ0aFNjaWVuY2VMYWJlbFZhbHVlX1NkKCkgeworCQlyZXR1cm4gKEVBdHRyaWJ1dGUpZWFydGhTY2llbmNlTGFiZWxWYWx1ZUVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDMpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQXR0cmlidXRlIGdldEVhcnRoU2NpZW5jZUxhYmVsVmFsdWVfTWluKCkgeworCQlyZXR1cm4gKEVBdHRyaWJ1dGUpZWFydGhTY2llbmNlTGFiZWxWYWx1ZUVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDQpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQXR0cmlidXRlIGdldEVhcnRoU2NpZW5jZUxhYmVsVmFsdWVfTWF4KCkgeworCQlyZXR1cm4gKEVBdHRyaWJ1dGUpZWFydGhTY2llbmNlTGFiZWxWYWx1ZUVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDUpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQXR0cmlidXRlIGdldEVhcnRoU2NpZW5jZUxhYmVsVmFsdWVfTWVkaWFuKCkgeworCQlyZXR1cm4gKEVBdHRyaWJ1dGUpZWFydGhTY2llbmNlTGFiZWxWYWx1ZUVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDYpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQXR0cmlidXRlIGdldEVhcnRoU2NpZW5jZUxhYmVsVmFsdWVfU2tld25lc3MoKSB7CisJCXJldHVybiAoRUF0dHJpYnV0ZSllYXJ0aFNjaWVuY2VMYWJlbFZhbHVlRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoNyk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVBdHRyaWJ1dGUgZ2V0RWFydGhTY2llbmNlTGFiZWxWYWx1ZV9LdXJ0b3NpcygpIHsKKwkJcmV0dXJuIChFQXR0cmlidXRlKWVhcnRoU2NpZW5jZUxhYmVsVmFsdWVFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCg4KTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUF0dHJpYnV0ZSBnZXRFYXJ0aFNjaWVuY2VMYWJlbFZhbHVlX1JtcygpIHsKKwkJcmV0dXJuIChFQXR0cmlidXRlKWVhcnRoU2NpZW5jZUxhYmVsVmFsdWVFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCg5KTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUF0dHJpYnV0ZSBnZXRFYXJ0aFNjaWVuY2VMYWJlbFZhbHVlX1NhbXBsZXNpemUoKSB7CisJCXJldHVybiAoRUF0dHJpYnV0ZSllYXJ0aFNjaWVuY2VMYWJlbFZhbHVlRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMTApOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQXR0cmlidXRlIGdldEVhcnRoU2NpZW5jZUxhYmVsVmFsdWVfUmFuZ2UoKSB7CisJCXJldHVybiAoRUF0dHJpYnV0ZSllYXJ0aFNjaWVuY2VMYWJlbFZhbHVlRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMTEpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFRW51bSBnZXRSZWxhdGl2ZVBoeXNpY2FsUmVsYXRpb25zaGlwKCkgeworCQlyZXR1cm4gcmVsYXRpdmVQaHlzaWNhbFJlbGF0aW9uc2hpcEVFbnVtOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFRW51bSBnZXRUcmFuc3BvcnRNb2RlKCkgeworCQlyZXR1cm4gdHJhbnNwb3J0TW9kZUVFbnVtOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBMYWJlbHNGYWN0b3J5IGdldExhYmVsc0ZhY3RvcnkoKSB7CisJCXJldHVybiAoTGFiZWxzRmFjdG9yeSlnZXRFRmFjdG9yeUluc3RhbmNlKCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJpdmF0ZSBib29sZWFuIGlzQ3JlYXRlZCA9IGZhbHNlOworCisJLyoqCisJICogQ3JlYXRlcyB0aGUgbWV0YS1tb2RlbCBvYmplY3RzIGZvciB0aGUgcGFja2FnZS4gIFRoaXMgbWV0aG9kIGlzCisJICogZ3VhcmRlZCB0byBoYXZlIG5vIGFmZmVjdCBvbiBhbnkgaW52b2NhdGlvbiBidXQgaXRzIGZpcnN0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIGNyZWF0ZVBhY2thZ2VDb250ZW50cygpIHsKKwkJaWYgKGlzQ3JlYXRlZCkgcmV0dXJuOworCQlpc0NyZWF0ZWQgPSB0cnVlOworCisJCS8vIENyZWF0ZSBjbGFzc2VzIGFuZCB0aGVpciBmZWF0dXJlcworCQlhcmVhTGFiZWxFQ2xhc3MgPSBjcmVhdGVFQ2xhc3MoQVJFQV9MQUJFTCk7CisJCWNyZWF0ZUVSZWZlcmVuY2UoYXJlYUxhYmVsRUNsYXNzLCBBUkVBX0xBQkVMX19DVVJSRU5UX0FSRUFfVkFMVUUpOworCisJCWFyZWFMYWJlbFZhbHVlRUNsYXNzID0gY3JlYXRlRUNsYXNzKEFSRUFfTEFCRUxfVkFMVUUpOworCQljcmVhdGVFQXR0cmlidXRlKGFyZWFMYWJlbFZhbHVlRUNsYXNzLCBBUkVBX0xBQkVMX1ZBTFVFX19BUkVBKTsKKwkJY3JlYXRlRUF0dHJpYnV0ZShhcmVhTGFiZWxWYWx1ZUVDbGFzcywgQVJFQV9MQUJFTF9WQUxVRV9fQVZFUkFHRV9FWFRFTlQpOworCisJCWNvbW1vbkJvcmRlclJlbGF0aW9uc2hpcExhYmVsRUNsYXNzID0gY3JlYXRlRUNsYXNzKENPTU1PTl9CT1JERVJfUkVMQVRJT05TSElQX0xBQkVMKTsKKworCQljb21tb25Cb3JkZXJSZWxhdGlvbnNoaXBMYWJlbFZhbHVlRUNsYXNzID0gY3JlYXRlRUNsYXNzKENPTU1PTl9CT1JERVJfUkVMQVRJT05TSElQX0xBQkVMX1ZBTFVFKTsKKwkJY3JlYXRlRUF0dHJpYnV0ZShjb21tb25Cb3JkZXJSZWxhdGlvbnNoaXBMYWJlbFZhbHVlRUNsYXNzLCBDT01NT05fQk9SREVSX1JFTEFUSU9OU0hJUF9MQUJFTF9WQUxVRV9fQk9SREVSX0xFTkdUSCk7CisKKwkJcGh5c2ljYWxSZWxhdGlvbnNoaXBMYWJlbEVDbGFzcyA9IGNyZWF0ZUVDbGFzcyhQSFlTSUNBTF9SRUxBVElPTlNISVBfTEFCRUwpOworCisJCXBvcHVsYXRpb25MYWJlbEVDbGFzcyA9IGNyZWF0ZUVDbGFzcyhQT1BVTEFUSU9OX0xBQkVMKTsKKwkJY3JlYXRlRUF0dHJpYnV0ZShwb3B1bGF0aW9uTGFiZWxFQ2xhc3MsIFBPUFVMQVRJT05fTEFCRUxfX1BPUFVMQVRJT05fSURFTlRJRklFUik7CisJCWNyZWF0ZUVBdHRyaWJ1dGUocG9wdWxhdGlvbkxhYmVsRUNsYXNzLCBQT1BVTEFUSU9OX0xBQkVMX19OQU1FKTsKKwkJY3JlYXRlRVJlZmVyZW5jZShwb3B1bGF0aW9uTGFiZWxFQ2xhc3MsIFBPUFVMQVRJT05fTEFCRUxfX0NVUlJFTlRfUE9QVUxBVElPTl9WQUxVRSk7CisJCWNyZWF0ZUVBdHRyaWJ1dGUocG9wdWxhdGlvbkxhYmVsRUNsYXNzLCBQT1BVTEFUSU9OX0xBQkVMX19QT1BVTEFURURfQVJFQSk7CisJCWNyZWF0ZUVBdHRyaWJ1dGUocG9wdWxhdGlvbkxhYmVsRUNsYXNzLCBQT1BVTEFUSU9OX0xBQkVMX19WQUxJRF9ZRUFSKTsKKworCQlwb3B1bGF0aW9uTGFiZWxWYWx1ZUVDbGFzcyA9IGNyZWF0ZUVDbGFzcyhQT1BVTEFUSU9OX0xBQkVMX1ZBTFVFKTsKKwkJY3JlYXRlRUF0dHJpYnV0ZShwb3B1bGF0aW9uTGFiZWxWYWx1ZUVDbGFzcywgUE9QVUxBVElPTl9MQUJFTF9WQUxVRV9fQ09VTlQpOworCisJCXJlbGF0aXZlUGh5c2ljYWxSZWxhdGlvbnNoaXBMYWJlbEVDbGFzcyA9IGNyZWF0ZUVDbGFzcyhSRUxBVElWRV9QSFlTSUNBTF9SRUxBVElPTlNISVBfTEFCRUwpOworCQljcmVhdGVFUmVmZXJlbmNlKHJlbGF0aXZlUGh5c2ljYWxSZWxhdGlvbnNoaXBMYWJlbEVDbGFzcywgUkVMQVRJVkVfUEhZU0lDQUxfUkVMQVRJT05TSElQX0xBQkVMX19DVVJSRU5UX1JFTEFUSU9OU0hJUCk7CisKKwkJcmVsYXRpdmVQaHlzaWNhbFJlbGF0aW9uc2hpcExhYmVsVmFsdWVFQ2xhc3MgPSBjcmVhdGVFQ2xhc3MoUkVMQVRJVkVfUEhZU0lDQUxfUkVMQVRJT05TSElQX0xBQkVMX1ZBTFVFKTsKKwkJY3JlYXRlRUF0dHJpYnV0ZShyZWxhdGl2ZVBoeXNpY2FsUmVsYXRpb25zaGlwTGFiZWxWYWx1ZUVDbGFzcywgUkVMQVRJVkVfUEhZU0lDQUxfUkVMQVRJT05TSElQX0xBQkVMX1ZBTFVFX19BREpBQ0VOVCk7CisJCWNyZWF0ZUVBdHRyaWJ1dGUocmVsYXRpdmVQaHlzaWNhbFJlbGF0aW9uc2hpcExhYmVsVmFsdWVFQ2xhc3MsIFJFTEFUSVZFX1BIWVNJQ0FMX1JFTEFUSU9OU0hJUF9MQUJFTF9WQUxVRV9fUkVMQVRJT05TSElQKTsKKworCQl0cmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbEVDbGFzcyA9IGNyZWF0ZUVDbGFzcyhUUkFOU1BPUlRfUkVMQVRJT05TSElQX0xBQkVMKTsKKwkJY3JlYXRlRUF0dHJpYnV0ZSh0cmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbEVDbGFzcywgVFJBTlNQT1JUX1JFTEFUSU9OU0hJUF9MQUJFTF9fVFJBTlNQT1JUX01PREUpOworCQljcmVhdGVFQXR0cmlidXRlKHRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsRUNsYXNzLCBUUkFOU1BPUlRfUkVMQVRJT05TSElQX0xBQkVMX19QT1BVTEFUSU9OX0lERU5USUZJRVIpOworCQljcmVhdGVFQXR0cmlidXRlKHRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsRUNsYXNzLCBUUkFOU1BPUlRfUkVMQVRJT05TSElQX0xBQkVMX19UUkFOU1BPUlRfSURFTlRJRklFUik7CisJCWNyZWF0ZUVSZWZlcmVuY2UodHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxFQ2xhc3MsIFRSQU5TUE9SVF9SRUxBVElPTlNISVBfTEFCRUxfX0NVUlJFTlRfVFJBTlNQT1JUX1JFTEFUSU9OU0hJUF9MQUJFTF9WQUxVRSk7CisJCWNyZWF0ZUVBdHRyaWJ1dGUodHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxFQ2xhc3MsIFRSQU5TUE9SVF9SRUxBVElPTlNISVBfTEFCRUxfX1JBVEVfVElNRV9QRVJJT0QpOworCQljcmVhdGVFQXR0cmlidXRlKHRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsRUNsYXNzLCBUUkFOU1BPUlRfUkVMQVRJT05TSElQX0xBQkVMX19ERVBBUlRVUkVfQ0FQQUNJVFkpOworCQljcmVhdGVFQXR0cmlidXRlKHRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsRUNsYXNzLCBUUkFOU1BPUlRfUkVMQVRJT05TSElQX0xBQkVMX19NQVhJTVVNX0RFUEFSVFVSRV9DQVBBQ0lUWSk7CisJCWNyZWF0ZUVBdHRyaWJ1dGUodHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxFQ2xhc3MsIFRSQU5TUE9SVF9SRUxBVElPTlNISVBfTEFCRUxfX0NBUEFDSVRZKTsKKwkJY3JlYXRlRUF0dHJpYnV0ZSh0cmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbEVDbGFzcywgVFJBTlNQT1JUX1JFTEFUSU9OU0hJUF9MQUJFTF9fTUFYSU1VTV9DQVBBQ0lUWSk7CisJCWNyZWF0ZUVBdHRyaWJ1dGUodHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxFQ2xhc3MsIFRSQU5TUE9SVF9SRUxBVElPTlNISVBfTEFCRUxfX1RSQU5TSVRfVElNRSk7CisJCWNyZWF0ZUVBdHRyaWJ1dGUodHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxFQ2xhc3MsIFRSQU5TUE9SVF9SRUxBVElPTlNISVBfTEFCRUxfX1NUQVJUX1VQX0RFTEFZKTsKKworCQl0cmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbFZhbHVlRUNsYXNzID0gY3JlYXRlRUNsYXNzKFRSQU5TUE9SVF9SRUxBVElPTlNISVBfTEFCRUxfVkFMVUUpOworCQljcmVhdGVFQXR0cmlidXRlKHRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsVmFsdWVFQ2xhc3MsIFRSQU5TUE9SVF9SRUxBVElPTlNISVBfTEFCRUxfVkFMVUVfX0FWQUlMQUJMRV9ERVBBUlRVUkVfQ0FQQUNJVFlfUFJPUE9SVElPTik7CisKKwkJcGh5c2ljYWxSZWxhdGlvbnNoaXBMYWJlbFZhbHVlRUNsYXNzID0gY3JlYXRlRUNsYXNzKFBIWVNJQ0FMX1JFTEFUSU9OU0hJUF9MQUJFTF9WQUxVRSk7CisKKwkJcm9hZFRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsRUNsYXNzID0gY3JlYXRlRUNsYXNzKFJPQURfVFJBTlNQT1JUX1JFTEFUSU9OU0hJUF9MQUJFTCk7CisKKwkJcm9hZFRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsVmFsdWVFQ2xhc3MgPSBjcmVhdGVFQ2xhc3MoUk9BRF9UUkFOU1BPUlRfUkVMQVRJT05TSElQX0xBQkVMX1ZBTFVFKTsKKwkJY3JlYXRlRUF0dHJpYnV0ZShyb2FkVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxWYWx1ZUVDbGFzcywgUk9BRF9UUkFOU1BPUlRfUkVMQVRJT05TSElQX0xBQkVMX1ZBTFVFX19ST0FEX05BTUUpOworCQljcmVhdGVFQXR0cmlidXRlKHJvYWRUcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbFZhbHVlRUNsYXNzLCBST0FEX1RSQU5TUE9SVF9SRUxBVElPTlNISVBfTEFCRUxfVkFMVUVfX1JPQURfQ0xBU1MpOworCQljcmVhdGVFQXR0cmlidXRlKHJvYWRUcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbFZhbHVlRUNsYXNzLCBST0FEX1RSQU5TUE9SVF9SRUxBVElPTlNISVBfTEFCRUxfVkFMVUVfX05VTUJFUl9DUk9TU0lOR1MpOworCisJCWVhcnRoU2NpZW5jZUxhYmVsRUNsYXNzID0gY3JlYXRlRUNsYXNzKEVBUlRIX1NDSUVOQ0VfTEFCRUwpOworCQljcmVhdGVFUmVmZXJlbmNlKGVhcnRoU2NpZW5jZUxhYmVsRUNsYXNzLCBFQVJUSF9TQ0lFTkNFX0xBQkVMX19DVVJSRU5UX0VBUlRIX1NDSUVOQ0VfVkFMVUUpOworCisJCWVhcnRoU2NpZW5jZUxhYmVsVmFsdWVFQ2xhc3MgPSBjcmVhdGVFQ2xhc3MoRUFSVEhfU0NJRU5DRV9MQUJFTF9WQUxVRSk7CisJCWNyZWF0ZUVBdHRyaWJ1dGUoZWFydGhTY2llbmNlTGFiZWxWYWx1ZUVDbGFzcywgRUFSVEhfU0NJRU5DRV9MQUJFTF9WQUxVRV9fREFUQV9UWVBFKTsKKwkJY3JlYXRlRUF0dHJpYnV0ZShlYXJ0aFNjaWVuY2VMYWJlbFZhbHVlRUNsYXNzLCBFQVJUSF9TQ0lFTkNFX0xBQkVMX1ZBTFVFX19VTklUUyk7CisJCWNyZWF0ZUVBdHRyaWJ1dGUoZWFydGhTY2llbmNlTGFiZWxWYWx1ZUVDbGFzcywgRUFSVEhfU0NJRU5DRV9MQUJFTF9WQUxVRV9fTUVBTik7CisJCWNyZWF0ZUVBdHRyaWJ1dGUoZWFydGhTY2llbmNlTGFiZWxWYWx1ZUVDbGFzcywgRUFSVEhfU0NJRU5DRV9MQUJFTF9WQUxVRV9fU0QpOworCQljcmVhdGVFQXR0cmlidXRlKGVhcnRoU2NpZW5jZUxhYmVsVmFsdWVFQ2xhc3MsIEVBUlRIX1NDSUVOQ0VfTEFCRUxfVkFMVUVfX01JTik7CisJCWNyZWF0ZUVBdHRyaWJ1dGUoZWFydGhTY2llbmNlTGFiZWxWYWx1ZUVDbGFzcywgRUFSVEhfU0NJRU5DRV9MQUJFTF9WQUxVRV9fTUFYKTsKKwkJY3JlYXRlRUF0dHJpYnV0ZShlYXJ0aFNjaWVuY2VMYWJlbFZhbHVlRUNsYXNzLCBFQVJUSF9TQ0lFTkNFX0xBQkVMX1ZBTFVFX19NRURJQU4pOworCQljcmVhdGVFQXR0cmlidXRlKGVhcnRoU2NpZW5jZUxhYmVsVmFsdWVFQ2xhc3MsIEVBUlRIX1NDSUVOQ0VfTEFCRUxfVkFMVUVfX1NLRVdORVNTKTsKKwkJY3JlYXRlRUF0dHJpYnV0ZShlYXJ0aFNjaWVuY2VMYWJlbFZhbHVlRUNsYXNzLCBFQVJUSF9TQ0lFTkNFX0xBQkVMX1ZBTFVFX19LVVJUT1NJUyk7CisJCWNyZWF0ZUVBdHRyaWJ1dGUoZWFydGhTY2llbmNlTGFiZWxWYWx1ZUVDbGFzcywgRUFSVEhfU0NJRU5DRV9MQUJFTF9WQUxVRV9fUk1TKTsKKwkJY3JlYXRlRUF0dHJpYnV0ZShlYXJ0aFNjaWVuY2VMYWJlbFZhbHVlRUNsYXNzLCBFQVJUSF9TQ0lFTkNFX0xBQkVMX1ZBTFVFX19TQU1QTEVTSVpFKTsKKwkJY3JlYXRlRUF0dHJpYnV0ZShlYXJ0aFNjaWVuY2VMYWJlbFZhbHVlRUNsYXNzLCBFQVJUSF9TQ0lFTkNFX0xBQkVMX1ZBTFVFX19SQU5HRSk7CisKKwkJLy8gQ3JlYXRlIGVudW1zCisJCXJlbGF0aXZlUGh5c2ljYWxSZWxhdGlvbnNoaXBFRW51bSA9IGNyZWF0ZUVFbnVtKFJFTEFUSVZFX1BIWVNJQ0FMX1JFTEFUSU9OU0hJUCk7CisJCXRyYW5zcG9ydE1vZGVFRW51bSA9IGNyZWF0ZUVFbnVtKFRSQU5TUE9SVF9NT0RFKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcml2YXRlIGJvb2xlYW4gaXNJbml0aWFsaXplZCA9IGZhbHNlOworCisJLyoqCisJICogQ29tcGxldGUgdGhlIGluaXRpYWxpemF0aW9uIG9mIHRoZSBwYWNrYWdlIGFuZCBpdHMgbWV0YS1tb2RlbC4gIFRoaXMKKwkgKiBtZXRob2QgaXMgZ3VhcmRlZCB0byBoYXZlIG5vIGFmZmVjdCBvbiBhbnkgaW52b2NhdGlvbiBidXQgaXRzIGZpcnN0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIGluaXRpYWxpemVQYWNrYWdlQ29udGVudHMoKSB7CisJCWlmIChpc0luaXRpYWxpemVkKSByZXR1cm47CisJCWlzSW5pdGlhbGl6ZWQgPSB0cnVlOworCisJCS8vIEluaXRpYWxpemUgcGFja2FnZQorCQlzZXROYW1lKGVOQU1FKTsKKwkJc2V0TnNQcmVmaXgoZU5TX1BSRUZJWCk7CisJCXNldE5zVVJJKGVOU19VUkkpOworCisJCS8vIE9idGFpbiBvdGhlciBkZXBlbmRlbnQgcGFja2FnZXMKKwkJR3JhcGhQYWNrYWdlIHRoZUdyYXBoUGFja2FnZSA9IChHcmFwaFBhY2thZ2UpRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RVBhY2thZ2UoR3JhcGhQYWNrYWdlLmVOU19VUkkpOworCQlFY29yZVBhY2thZ2UgdGhlRWNvcmVQYWNrYWdlID0gKEVjb3JlUGFja2FnZSlFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShFY29yZVBhY2thZ2UuZU5TX1VSSSk7CisKKwkJLy8gQ3JlYXRlIHR5cGUgcGFyYW1ldGVycworCisJCS8vIFNldCBib3VuZHMgZm9yIHR5cGUgcGFyYW1ldGVycworCisJCS8vIEFkZCBzdXBlcnR5cGVzIHRvIGNsYXNzZXMKKwkJYXJlYUxhYmVsRUNsYXNzLmdldEVTdXBlclR5cGVzKCkuYWRkKHRoZUdyYXBoUGFja2FnZS5nZXRTdGF0aWNOb2RlTGFiZWwoKSk7CisJCWFyZWFMYWJlbFZhbHVlRUNsYXNzLmdldEVTdXBlclR5cGVzKCkuYWRkKHRoZUdyYXBoUGFja2FnZS5nZXRMYWJlbFZhbHVlKCkpOworCQljb21tb25Cb3JkZXJSZWxhdGlvbnNoaXBMYWJlbEVDbGFzcy5nZXRFU3VwZXJUeXBlcygpLmFkZCh0aGlzLmdldFBoeXNpY2FsUmVsYXRpb25zaGlwTGFiZWwoKSk7CisJCWNvbW1vbkJvcmRlclJlbGF0aW9uc2hpcExhYmVsVmFsdWVFQ2xhc3MuZ2V0RVN1cGVyVHlwZXMoKS5hZGQodGhpcy5nZXRQaHlzaWNhbFJlbGF0aW9uc2hpcExhYmVsVmFsdWUoKSk7CisJCXBoeXNpY2FsUmVsYXRpb25zaGlwTGFiZWxFQ2xhc3MuZ2V0RVN1cGVyVHlwZXMoKS5hZGQodGhlR3JhcGhQYWNrYWdlLmdldFN0YXRpY0VkZ2VMYWJlbCgpKTsKKwkJcG9wdWxhdGlvbkxhYmVsRUNsYXNzLmdldEVTdXBlclR5cGVzKCkuYWRkKHRoZUdyYXBoUGFja2FnZS5nZXRTdGF0aWNOb2RlTGFiZWwoKSk7CisJCXBvcHVsYXRpb25MYWJlbFZhbHVlRUNsYXNzLmdldEVTdXBlclR5cGVzKCkuYWRkKHRoZUdyYXBoUGFja2FnZS5nZXRMYWJlbFZhbHVlKCkpOworCQlyZWxhdGl2ZVBoeXNpY2FsUmVsYXRpb25zaGlwTGFiZWxFQ2xhc3MuZ2V0RVN1cGVyVHlwZXMoKS5hZGQodGhpcy5nZXRQaHlzaWNhbFJlbGF0aW9uc2hpcExhYmVsKCkpOworCQlyZWxhdGl2ZVBoeXNpY2FsUmVsYXRpb25zaGlwTGFiZWxWYWx1ZUVDbGFzcy5nZXRFU3VwZXJUeXBlcygpLmFkZCh0aGVHcmFwaFBhY2thZ2UuZ2V0TGFiZWxWYWx1ZSgpKTsKKwkJdHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxFQ2xhc3MuZ2V0RVN1cGVyVHlwZXMoKS5hZGQodGhlR3JhcGhQYWNrYWdlLmdldER5bmFtaWNFZGdlTGFiZWwoKSk7CisJCXRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsVmFsdWVFQ2xhc3MuZ2V0RVN1cGVyVHlwZXMoKS5hZGQodGhlR3JhcGhQYWNrYWdlLmdldExhYmVsVmFsdWUoKSk7CisJCXBoeXNpY2FsUmVsYXRpb25zaGlwTGFiZWxWYWx1ZUVDbGFzcy5nZXRFU3VwZXJUeXBlcygpLmFkZCh0aGVHcmFwaFBhY2thZ2UuZ2V0TGFiZWxWYWx1ZSgpKTsKKwkJcm9hZFRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsRUNsYXNzLmdldEVTdXBlclR5cGVzKCkuYWRkKHRoaXMuZ2V0UGh5c2ljYWxSZWxhdGlvbnNoaXBMYWJlbCgpKTsKKwkJcm9hZFRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsVmFsdWVFQ2xhc3MuZ2V0RVN1cGVyVHlwZXMoKS5hZGQodGhpcy5nZXRQaHlzaWNhbFJlbGF0aW9uc2hpcExhYmVsVmFsdWUoKSk7CisJCWVhcnRoU2NpZW5jZUxhYmVsRUNsYXNzLmdldEVTdXBlclR5cGVzKCkuYWRkKHRoZUdyYXBoUGFja2FnZS5nZXRTdGF0aWNOb2RlTGFiZWwoKSk7CisJCWVhcnRoU2NpZW5jZUxhYmVsVmFsdWVFQ2xhc3MuZ2V0RVN1cGVyVHlwZXMoKS5hZGQodGhlR3JhcGhQYWNrYWdlLmdldExhYmVsVmFsdWUoKSk7CisKKwkJLy8gSW5pdGlhbGl6ZSBjbGFzc2VzIGFuZCBmZWF0dXJlczsgYWRkIG9wZXJhdGlvbnMgYW5kIHBhcmFtZXRlcnMKKwkJaW5pdEVDbGFzcyhhcmVhTGFiZWxFQ2xhc3MsIEFyZWFMYWJlbC5jbGFzcywgIkFyZWFMYWJlbCIsICFJU19BQlNUUkFDVCwgIUlTX0lOVEVSRkFDRSwgSVNfR0VORVJBVEVEX0lOU1RBTkNFX0NMQVNTKTsgLy8kTk9OLU5MUy0xJAorCQlpbml0RVJlZmVyZW5jZShnZXRBcmVhTGFiZWxfQ3VycmVudEFyZWFWYWx1ZSgpLCB0aGlzLmdldEFyZWFMYWJlbFZhbHVlKCksIG51bGwsICJjdXJyZW50QXJlYVZhbHVlIiwgbnVsbCwgMCwgMSwgQXJlYUxhYmVsLmNsYXNzLCBJU19UUkFOU0lFTlQsIElTX1ZPTEFUSUxFLCAhSVNfQ0hBTkdFQUJMRSwgIUlTX0NPTVBPU0lURSwgIUlTX1JFU09MVkVfUFJPWElFUywgIUlTX1VOU0VUVEFCTEUsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOyAvLyROT04tTkxTLTEkCisKKwkJaW5pdEVDbGFzcyhhcmVhTGFiZWxWYWx1ZUVDbGFzcywgQXJlYUxhYmVsVmFsdWUuY2xhc3MsICJBcmVhTGFiZWxWYWx1ZSIsICFJU19BQlNUUkFDVCwgIUlTX0lOVEVSRkFDRSwgSVNfR0VORVJBVEVEX0lOU1RBTkNFX0NMQVNTKTsgLy8kTk9OLU5MUy0xJAorCQlpbml0RUF0dHJpYnV0ZShnZXRBcmVhTGFiZWxWYWx1ZV9BcmVhKCksIGVjb3JlUGFja2FnZS5nZXRFRG91YmxlKCksICJhcmVhIiwgbnVsbCwgMCwgMSwgQXJlYUxhYmVsVmFsdWUuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7IC8vJE5PTi1OTFMtMSQKKwkJaW5pdEVBdHRyaWJ1dGUoZ2V0QXJlYUxhYmVsVmFsdWVfQXZlcmFnZUV4dGVudCgpLCBlY29yZVBhY2thZ2UuZ2V0RURvdWJsZSgpLCAiYXZlcmFnZUV4dGVudCIsIG51bGwsIDAsIDEsIEFyZWFMYWJlbFZhbHVlLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOyAvLyROT04tTkxTLTEkCisKKwkJaW5pdEVDbGFzcyhjb21tb25Cb3JkZXJSZWxhdGlvbnNoaXBMYWJlbEVDbGFzcywgQ29tbW9uQm9yZGVyUmVsYXRpb25zaGlwTGFiZWwuY2xhc3MsICJDb21tb25Cb3JkZXJSZWxhdGlvbnNoaXBMYWJlbCIsICFJU19BQlNUUkFDVCwgIUlTX0lOVEVSRkFDRSwgSVNfR0VORVJBVEVEX0lOU1RBTkNFX0NMQVNTKTsgLy8kTk9OLU5MUy0xJAorCisJCWluaXRFQ2xhc3MoY29tbW9uQm9yZGVyUmVsYXRpb25zaGlwTGFiZWxWYWx1ZUVDbGFzcywgQ29tbW9uQm9yZGVyUmVsYXRpb25zaGlwTGFiZWxWYWx1ZS5jbGFzcywgIkNvbW1vbkJvcmRlclJlbGF0aW9uc2hpcExhYmVsVmFsdWUiLCAhSVNfQUJTVFJBQ1QsICFJU19JTlRFUkZBQ0UsIElTX0dFTkVSQVRFRF9JTlNUQU5DRV9DTEFTUyk7IC8vJE5PTi1OTFMtMSQKKwkJaW5pdEVBdHRyaWJ1dGUoZ2V0Q29tbW9uQm9yZGVyUmVsYXRpb25zaGlwTGFiZWxWYWx1ZV9Cb3JkZXJMZW5ndGgoKSwgZWNvcmVQYWNrYWdlLmdldEVEb3VibGUoKSwgImJvcmRlckxlbmd0aCIsIG51bGwsIDAsIDEsIENvbW1vbkJvcmRlclJlbGF0aW9uc2hpcExhYmVsVmFsdWUuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7IC8vJE5PTi1OTFMtMSQKKworCQlpbml0RUNsYXNzKHBoeXNpY2FsUmVsYXRpb25zaGlwTGFiZWxFQ2xhc3MsIFBoeXNpY2FsUmVsYXRpb25zaGlwTGFiZWwuY2xhc3MsICJQaHlzaWNhbFJlbGF0aW9uc2hpcExhYmVsIiwgSVNfQUJTVFJBQ1QsICFJU19JTlRFUkZBQ0UsIElTX0dFTkVSQVRFRF9JTlNUQU5DRV9DTEFTUyk7IC8vJE5PTi1OTFMtMSQKKworCQlpbml0RUNsYXNzKHBvcHVsYXRpb25MYWJlbEVDbGFzcywgUG9wdWxhdGlvbkxhYmVsLmNsYXNzLCAiUG9wdWxhdGlvbkxhYmVsIiwgIUlTX0FCU1RSQUNULCAhSVNfSU5URVJGQUNFLCBJU19HRU5FUkFURURfSU5TVEFOQ0VfQ0xBU1MpOyAvLyROT04tTkxTLTEkCisJCWluaXRFQXR0cmlidXRlKGdldFBvcHVsYXRpb25MYWJlbF9Qb3B1bGF0aW9uSWRlbnRpZmllcigpLCBlY29yZVBhY2thZ2UuZ2V0RVN0cmluZygpLCAicG9wdWxhdGlvbklkZW50aWZpZXIiLCBudWxsLCAwLCAxLCBQb3B1bGF0aW9uTGFiZWwuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7IC8vJE5PTi1OTFMtMSQKKwkJaW5pdEVBdHRyaWJ1dGUoZ2V0UG9wdWxhdGlvbkxhYmVsX05hbWUoKSwgZWNvcmVQYWNrYWdlLmdldEVTdHJpbmcoKSwgIm5hbWUiLCBudWxsLCAwLCAxLCBQb3B1bGF0aW9uTGFiZWwuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7IC8vJE5PTi1OTFMtMSQKKwkJaW5pdEVSZWZlcmVuY2UoZ2V0UG9wdWxhdGlvbkxhYmVsX0N1cnJlbnRQb3B1bGF0aW9uVmFsdWUoKSwgdGhpcy5nZXRQb3B1bGF0aW9uTGFiZWxWYWx1ZSgpLCBudWxsLCAiY3VycmVudFBvcHVsYXRpb25WYWx1ZSIsIG51bGwsIDAsIDEsIFBvcHVsYXRpb25MYWJlbC5jbGFzcywgSVNfVFJBTlNJRU5ULCBJU19WT0xBVElMRSwgIUlTX0NIQU5HRUFCTEUsICFJU19DT01QT1NJVEUsICFJU19SRVNPTFZFX1BST1hJRVMsICFJU19VTlNFVFRBQkxFLCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsgLy8kTk9OLU5MUy0xJAorCQlpbml0RUF0dHJpYnV0ZShnZXRQb3B1bGF0aW9uTGFiZWxfUG9wdWxhdGVkQXJlYSgpLCBlY29yZVBhY2thZ2UuZ2V0RURvdWJsZSgpLCAicG9wdWxhdGVkQXJlYSIsICIwIiwgMCwgMSwgUG9wdWxhdGlvbkxhYmVsLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKKwkJaW5pdEVBdHRyaWJ1dGUoZ2V0UG9wdWxhdGlvbkxhYmVsX1ZhbGlkWWVhcigpLCBlY29yZVBhY2thZ2UuZ2V0RUludCgpLCAidmFsaWRZZWFyIiwgIjIwMDYiLCAwLCAxLCBQb3B1bGF0aW9uTGFiZWwuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAorCisJCWluaXRFQ2xhc3MocG9wdWxhdGlvbkxhYmVsVmFsdWVFQ2xhc3MsIFBvcHVsYXRpb25MYWJlbFZhbHVlLmNsYXNzLCAiUG9wdWxhdGlvbkxhYmVsVmFsdWUiLCAhSVNfQUJTVFJBQ1QsICFJU19JTlRFUkZBQ0UsIElTX0dFTkVSQVRFRF9JTlNUQU5DRV9DTEFTUyk7IC8vJE5PTi1OTFMtMSQKKwkJaW5pdEVBdHRyaWJ1dGUoZ2V0UG9wdWxhdGlvbkxhYmVsVmFsdWVfQ291bnQoKSwgZWNvcmVQYWNrYWdlLmdldEVEb3VibGUoKSwgImNvdW50IiwgbnVsbCwgMCwgMSwgUG9wdWxhdGlvbkxhYmVsVmFsdWUuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7IC8vJE5PTi1OTFMtMSQKKworCQlpbml0RUNsYXNzKHJlbGF0aXZlUGh5c2ljYWxSZWxhdGlvbnNoaXBMYWJlbEVDbGFzcywgUmVsYXRpdmVQaHlzaWNhbFJlbGF0aW9uc2hpcExhYmVsLmNsYXNzLCAiUmVsYXRpdmVQaHlzaWNhbFJlbGF0aW9uc2hpcExhYmVsIiwgIUlTX0FCU1RSQUNULCAhSVNfSU5URVJGQUNFLCBJU19HRU5FUkFURURfSU5TVEFOQ0VfQ0xBU1MpOyAvLyROT04tTkxTLTEkCisJCWluaXRFUmVmZXJlbmNlKGdldFJlbGF0aXZlUGh5c2ljYWxSZWxhdGlvbnNoaXBMYWJlbF9DdXJyZW50UmVsYXRpb25zaGlwKCksIHRoaXMuZ2V0UmVsYXRpdmVQaHlzaWNhbFJlbGF0aW9uc2hpcExhYmVsVmFsdWUoKSwgbnVsbCwgImN1cnJlbnRSZWxhdGlvbnNoaXAiLCBudWxsLCAwLCAxLCBSZWxhdGl2ZVBoeXNpY2FsUmVsYXRpb25zaGlwTGFiZWwuY2xhc3MsIElTX1RSQU5TSUVOVCwgSVNfVk9MQVRJTEUsICFJU19DSEFOR0VBQkxFLCAhSVNfQ09NUE9TSVRFLCAhSVNfUkVTT0xWRV9QUk9YSUVTLCAhSVNfVU5TRVRUQUJMRSwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7IC8vJE5PTi1OTFMtMSQKKworCQlpbml0RUNsYXNzKHJlbGF0aXZlUGh5c2ljYWxSZWxhdGlvbnNoaXBMYWJlbFZhbHVlRUNsYXNzLCBSZWxhdGl2ZVBoeXNpY2FsUmVsYXRpb25zaGlwTGFiZWxWYWx1ZS5jbGFzcywgIlJlbGF0aXZlUGh5c2ljYWxSZWxhdGlvbnNoaXBMYWJlbFZhbHVlIiwgIUlTX0FCU1RSQUNULCAhSVNfSU5URVJGQUNFLCBJU19HRU5FUkFURURfSU5TVEFOQ0VfQ0xBU1MpOyAvLyROT04tTkxTLTEkCisJCWluaXRFQXR0cmlidXRlKGdldFJlbGF0aXZlUGh5c2ljYWxSZWxhdGlvbnNoaXBMYWJlbFZhbHVlX0FkamFjZW50KCksIGVjb3JlUGFja2FnZS5nZXRFQm9vbGVhbigpLCAiYWRqYWNlbnQiLCBudWxsLCAwLCAxLCBSZWxhdGl2ZVBoeXNpY2FsUmVsYXRpb25zaGlwTGFiZWxWYWx1ZS5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsgLy8kTk9OLU5MUy0xJAorCQlpbml0RUF0dHJpYnV0ZShnZXRSZWxhdGl2ZVBoeXNpY2FsUmVsYXRpb25zaGlwTGFiZWxWYWx1ZV9SZWxhdGlvbnNoaXAoKSwgdGhpcy5nZXRSZWxhdGl2ZVBoeXNpY2FsUmVsYXRpb25zaGlwKCksICJyZWxhdGlvbnNoaXAiLCBudWxsLCAwLCAxLCBSZWxhdGl2ZVBoeXNpY2FsUmVsYXRpb25zaGlwTGFiZWxWYWx1ZS5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsgLy8kTk9OLU5MUy0xJAorCisJCWluaXRFQ2xhc3ModHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxFQ2xhc3MsIFRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsLmNsYXNzLCAiVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWwiLCAhSVNfQUJTVFJBQ1QsICFJU19JTlRFUkZBQ0UsIElTX0dFTkVSQVRFRF9JTlNUQU5DRV9DTEFTUyk7IC8vJE5PTi1OTFMtMSQKKwkJaW5pdEVBdHRyaWJ1dGUoZ2V0VHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxfVHJhbnNwb3J0TW9kZSgpLCB0aGlzLmdldFRyYW5zcG9ydE1vZGUoKSwgInRyYW5zcG9ydE1vZGUiLCBudWxsLCAwLCAxLCBUcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbC5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsgLy8kTk9OLU5MUy0xJAorCQlpbml0RUF0dHJpYnV0ZShnZXRUcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbF9Qb3B1bGF0aW9uSWRlbnRpZmllcigpLCBlY29yZVBhY2thZ2UuZ2V0RVN0cmluZygpLCAicG9wdWxhdGlvbklkZW50aWZpZXIiLCBudWxsLCAwLCAxLCBUcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbC5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsgLy8kTk9OLU5MUy0xJAorCQlpbml0RUF0dHJpYnV0ZShnZXRUcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbF9UcmFuc3BvcnRJZGVudGlmaWVyKCksIGVjb3JlUGFja2FnZS5nZXRFU3RyaW5nKCksICJ0cmFuc3BvcnRJZGVudGlmaWVyIiwgbnVsbCwgMCwgMSwgVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWwuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7IC8vJE5PTi1OTFMtMSQKKwkJaW5pdEVSZWZlcmVuY2UoZ2V0VHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxfQ3VycmVudFRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsVmFsdWUoKSwgdGhpcy5nZXRUcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbFZhbHVlKCksIG51bGwsICJjdXJyZW50VHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxWYWx1ZSIsIG51bGwsIDAsIDEsIFRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsLmNsYXNzLCBJU19UUkFOU0lFTlQsIElTX1ZPTEFUSUxFLCAhSVNfQ0hBTkdFQUJMRSwgIUlTX0NPTVBPU0lURSwgIUlTX1JFU09MVkVfUFJPWElFUywgIUlTX1VOU0VUVEFCTEUsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOyAvLyROT04tTkxTLTEkCisJCWluaXRFQXR0cmlidXRlKGdldFRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsX1JhdGVUaW1lUGVyaW9kKCksIGVjb3JlUGFja2FnZS5nZXRFTG9uZygpLCAicmF0ZVRpbWVQZXJpb2QiLCBudWxsLCAwLCAxLCBUcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbC5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsgLy8kTk9OLU5MUy0xJAorCQlpbml0RUF0dHJpYnV0ZShnZXRUcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbF9EZXBhcnR1cmVDYXBhY2l0eSgpLCBlY29yZVBhY2thZ2UuZ2V0RUludCgpLCAiZGVwYXJ0dXJlQ2FwYWNpdHkiLCBudWxsLCAwLCAxLCBUcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbC5jbGFzcywgSVNfVFJBTlNJRU5ULCBJU19WT0xBVElMRSwgIUlTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOyAvLyROT04tTkxTLTEkCisJCWluaXRFQXR0cmlidXRlKGdldFRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsX01heGltdW1EZXBhcnR1cmVDYXBhY2l0eSgpLCBlY29yZVBhY2thZ2UuZ2V0RUludCgpLCAibWF4aW11bURlcGFydHVyZUNhcGFjaXR5IiwgbnVsbCwgMCwgMSwgVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWwuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7IC8vJE5PTi1OTFMtMSQKKwkJaW5pdEVBdHRyaWJ1dGUoZ2V0VHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxfQ2FwYWNpdHkoKSwgZWNvcmVQYWNrYWdlLmdldEVJbnQoKSwgImNhcGFjaXR5IiwgbnVsbCwgMCwgMSwgVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWwuY2xhc3MsIElTX1RSQU5TSUVOVCwgSVNfVk9MQVRJTEUsICFJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsgLy8kTk9OLU5MUy0xJAorCQlpbml0RUF0dHJpYnV0ZShnZXRUcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbF9NYXhpbXVtQ2FwYWNpdHkoKSwgZWNvcmVQYWNrYWdlLmdldEVJbnQoKSwgIm1heGltdW1DYXBhY2l0eSIsIG51bGwsIDAsIDEsIFRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOyAvLyROT04tTkxTLTEkCisJCWluaXRFQXR0cmlidXRlKGdldFRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsX1RyYW5zaXRUaW1lKCksIGVjb3JlUGFja2FnZS5nZXRFTG9uZygpLCAidHJhbnNpdFRpbWUiLCBudWxsLCAwLCAxLCBUcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbC5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsgLy8kTk9OLU5MUy0xJAorCQlpbml0RUF0dHJpYnV0ZShnZXRUcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbF9TdGFydFVwRGVsYXkoKSwgZWNvcmVQYWNrYWdlLmdldEVMb25nKCksICJzdGFydFVwRGVsYXkiLCBudWxsLCAwLCAxLCBUcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbC5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsgLy8kTk9OLU5MUy0xJAorCisJCWluaXRFQ2xhc3ModHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxWYWx1ZUVDbGFzcywgVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxWYWx1ZS5jbGFzcywgIlRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsVmFsdWUiLCAhSVNfQUJTVFJBQ1QsICFJU19JTlRFUkZBQ0UsIElTX0dFTkVSQVRFRF9JTlNUQU5DRV9DTEFTUyk7IC8vJE5PTi1OTFMtMSQKKwkJaW5pdEVBdHRyaWJ1dGUoZ2V0VHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxWYWx1ZV9BdmFpbGFibGVEZXBhcnR1cmVDYXBhY2l0eVByb3BvcnRpb24oKSwgZWNvcmVQYWNrYWdlLmdldEVEb3VibGUoKSwgImF2YWlsYWJsZURlcGFydHVyZUNhcGFjaXR5UHJvcG9ydGlvbiIsICIxLjAiLCAwLCAxLCBUcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbFZhbHVlLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKKworCQlpbml0RUNsYXNzKHBoeXNpY2FsUmVsYXRpb25zaGlwTGFiZWxWYWx1ZUVDbGFzcywgUGh5c2ljYWxSZWxhdGlvbnNoaXBMYWJlbFZhbHVlLmNsYXNzLCAiUGh5c2ljYWxSZWxhdGlvbnNoaXBMYWJlbFZhbHVlIiwgIUlTX0FCU1RSQUNULCAhSVNfSU5URVJGQUNFLCBJU19HRU5FUkFURURfSU5TVEFOQ0VfQ0xBU1MpOyAvLyROT04tTkxTLTEkCisKKwkJaW5pdEVDbGFzcyhyb2FkVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxFQ2xhc3MsIFJvYWRUcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbC5jbGFzcywgIlJvYWRUcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbCIsICFJU19BQlNUUkFDVCwgIUlTX0lOVEVSRkFDRSwgSVNfR0VORVJBVEVEX0lOU1RBTkNFX0NMQVNTKTsgLy8kTk9OLU5MUy0xJAorCisJCWluaXRFQ2xhc3Mocm9hZFRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsVmFsdWVFQ2xhc3MsIFJvYWRUcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbFZhbHVlLmNsYXNzLCAiUm9hZFRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsVmFsdWUiLCAhSVNfQUJTVFJBQ1QsICFJU19JTlRFUkZBQ0UsIElTX0dFTkVSQVRFRF9JTlNUQU5DRV9DTEFTUyk7IC8vJE5PTi1OTFMtMSQKKwkJaW5pdEVBdHRyaWJ1dGUoZ2V0Um9hZFRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsVmFsdWVfUm9hZE5hbWUoKSwgZWNvcmVQYWNrYWdlLmdldEVTdHJpbmcoKSwgInJvYWROYW1lIiwgInJvYWQiLCAwLCAxLCBSb2FkVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxWYWx1ZS5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCisJCWluaXRFQXR0cmlidXRlKGdldFJvYWRUcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbFZhbHVlX1JvYWRDbGFzcygpLCBlY29yZVBhY2thZ2UuZ2V0RVN0cmluZygpLCAicm9hZENsYXNzIiwgInJvdXRlIiwgMCwgMSwgUm9hZFRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsVmFsdWUuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAorCQlpbml0RUF0dHJpYnV0ZShnZXRSb2FkVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxWYWx1ZV9OdW1iZXJDcm9zc2luZ3MoKSwgZWNvcmVQYWNrYWdlLmdldEVJbnQoKSwgIm51bWJlckNyb3NzaW5ncyIsICIxIiwgMCwgMSwgUm9hZFRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsVmFsdWUuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAorCisJCWluaXRFQ2xhc3MoZWFydGhTY2llbmNlTGFiZWxFQ2xhc3MsIEVhcnRoU2NpZW5jZUxhYmVsLmNsYXNzLCAiRWFydGhTY2llbmNlTGFiZWwiLCAhSVNfQUJTVFJBQ1QsICFJU19JTlRFUkZBQ0UsIElTX0dFTkVSQVRFRF9JTlNUQU5DRV9DTEFTUyk7IC8vJE5PTi1OTFMtMSQKKwkJaW5pdEVSZWZlcmVuY2UoZ2V0RWFydGhTY2llbmNlTGFiZWxfQ3VycmVudEVhcnRoU2NpZW5jZVZhbHVlKCksIHRoaXMuZ2V0RWFydGhTY2llbmNlTGFiZWxWYWx1ZSgpLCBudWxsLCAiY3VycmVudEVhcnRoU2NpZW5jZVZhbHVlIiwgbnVsbCwgMCwgMSwgRWFydGhTY2llbmNlTGFiZWwuY2xhc3MsIElTX1RSQU5TSUVOVCwgSVNfVk9MQVRJTEUsICFJU19DSEFOR0VBQkxFLCAhSVNfQ09NUE9TSVRFLCAhSVNfUkVTT0xWRV9QUk9YSUVTLCAhSVNfVU5TRVRUQUJMRSwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7IC8vJE5PTi1OTFMtMSQKKworCQlpbml0RUNsYXNzKGVhcnRoU2NpZW5jZUxhYmVsVmFsdWVFQ2xhc3MsIEVhcnRoU2NpZW5jZUxhYmVsVmFsdWUuY2xhc3MsICJFYXJ0aFNjaWVuY2VMYWJlbFZhbHVlIiwgIUlTX0FCU1RSQUNULCAhSVNfSU5URVJGQUNFLCBJU19HRU5FUkFURURfSU5TVEFOQ0VfQ0xBU1MpOyAvLyROT04tTkxTLTEkCisJCWluaXRFQXR0cmlidXRlKGdldEVhcnRoU2NpZW5jZUxhYmVsVmFsdWVfRGF0YVR5cGUoKSwgdGhlRWNvcmVQYWNrYWdlLmdldEVTdHJpbmcoKSwgImRhdGFUeXBlIiwgbnVsbCwgMCwgMSwgRWFydGhTY2llbmNlTGFiZWxWYWx1ZS5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsgLy8kTk9OLU5MUy0xJAorCQlpbml0RUF0dHJpYnV0ZShnZXRFYXJ0aFNjaWVuY2VMYWJlbFZhbHVlX1VuaXRzKCksIHRoZUVjb3JlUGFja2FnZS5nZXRFU3RyaW5nKCksICJ1bml0cyIsIG51bGwsIDAsIDEsIEVhcnRoU2NpZW5jZUxhYmVsVmFsdWUuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7IC8vJE5PTi1OTFMtMSQKKwkJaW5pdEVBdHRyaWJ1dGUoZ2V0RWFydGhTY2llbmNlTGFiZWxWYWx1ZV9NZWFuKCksIHRoZUVjb3JlUGFja2FnZS5nZXRFRG91YmxlKCksICJtZWFuIiwgbnVsbCwgMCwgLTEsIEVhcnRoU2NpZW5jZUxhYmVsVmFsdWUuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgIUlTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOyAvLyROT04tTkxTLTEkCisJCWluaXRFQXR0cmlidXRlKGdldEVhcnRoU2NpZW5jZUxhYmVsVmFsdWVfU2QoKSwgdGhlRWNvcmVQYWNrYWdlLmdldEVEb3VibGUoKSwgInNkIiwgbnVsbCwgMCwgLTEsIEVhcnRoU2NpZW5jZUxhYmVsVmFsdWUuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgIUlTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOyAvLyROT04tTkxTLTEkCisJCWluaXRFQXR0cmlidXRlKGdldEVhcnRoU2NpZW5jZUxhYmVsVmFsdWVfTWluKCksIHRoZUVjb3JlUGFja2FnZS5nZXRFRG91YmxlKCksICJtaW4iLCBudWxsLCAwLCAtMSwgRWFydGhTY2llbmNlTGFiZWxWYWx1ZS5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCAhSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7IC8vJE5PTi1OTFMtMSQKKwkJaW5pdEVBdHRyaWJ1dGUoZ2V0RWFydGhTY2llbmNlTGFiZWxWYWx1ZV9NYXgoKSwgdGhlRWNvcmVQYWNrYWdlLmdldEVEb3VibGUoKSwgIm1heCIsIG51bGwsIDAsIC0xLCBFYXJ0aFNjaWVuY2VMYWJlbFZhbHVlLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsICFJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsgLy8kTk9OLU5MUy0xJAorCQlpbml0RUF0dHJpYnV0ZShnZXRFYXJ0aFNjaWVuY2VMYWJlbFZhbHVlX01lZGlhbigpLCB0aGVFY29yZVBhY2thZ2UuZ2V0RURvdWJsZSgpLCAibWVkaWFuIiwgbnVsbCwgMCwgLTEsIEVhcnRoU2NpZW5jZUxhYmVsVmFsdWUuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgIUlTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOyAvLyROT04tTkxTLTEkCisJCWluaXRFQXR0cmlidXRlKGdldEVhcnRoU2NpZW5jZUxhYmVsVmFsdWVfU2tld25lc3MoKSwgdGhlRWNvcmVQYWNrYWdlLmdldEVEb3VibGUoKSwgInNrZXduZXNzIiwgbnVsbCwgMCwgLTEsIEVhcnRoU2NpZW5jZUxhYmVsVmFsdWUuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgIUlTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOyAvLyROT04tTkxTLTEkCisJCWluaXRFQXR0cmlidXRlKGdldEVhcnRoU2NpZW5jZUxhYmVsVmFsdWVfS3VydG9zaXMoKSwgdGhlRWNvcmVQYWNrYWdlLmdldEVEb3VibGUoKSwgImt1cnRvc2lzIiwgbnVsbCwgMCwgLTEsIEVhcnRoU2NpZW5jZUxhYmVsVmFsdWUuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgIUlTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOyAvLyROT04tTkxTLTEkCisJCWluaXRFQXR0cmlidXRlKGdldEVhcnRoU2NpZW5jZUxhYmVsVmFsdWVfUm1zKCksIHRoZUVjb3JlUGFja2FnZS5nZXRFRG91YmxlKCksICJybXMiLCBudWxsLCAwLCAtMSwgRWFydGhTY2llbmNlTGFiZWxWYWx1ZS5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCAhSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7IC8vJE5PTi1OTFMtMSQKKwkJaW5pdEVBdHRyaWJ1dGUoZ2V0RWFydGhTY2llbmNlTGFiZWxWYWx1ZV9TYW1wbGVzaXplKCksIHRoZUVjb3JlUGFja2FnZS5nZXRFRG91YmxlKCksICJzYW1wbGVzaXplIiwgbnVsbCwgMCwgLTEsIEVhcnRoU2NpZW5jZUxhYmVsVmFsdWUuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgIUlTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOyAvLyROT04tTkxTLTEkCisJCWluaXRFQXR0cmlidXRlKGdldEVhcnRoU2NpZW5jZUxhYmVsVmFsdWVfUmFuZ2UoKSwgdGhlRWNvcmVQYWNrYWdlLmdldEVEb3VibGUoKSwgInJhbmdlIiwgbnVsbCwgMCwgLTEsIEVhcnRoU2NpZW5jZUxhYmVsVmFsdWUuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgIUlTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOyAvLyROT04tTkxTLTEkCisKKwkJLy8gSW5pdGlhbGl6ZSBlbnVtcyBhbmQgYWRkIGVudW0gbGl0ZXJhbHMKKwkJaW5pdEVFbnVtKHJlbGF0aXZlUGh5c2ljYWxSZWxhdGlvbnNoaXBFRW51bSwgUmVsYXRpdmVQaHlzaWNhbFJlbGF0aW9uc2hpcC5jbGFzcywgIlJlbGF0aXZlUGh5c2ljYWxSZWxhdGlvbnNoaXAiKTsgLy8kTk9OLU5MUy0xJAorCQlhZGRFRW51bUxpdGVyYWwocmVsYXRpdmVQaHlzaWNhbFJlbGF0aW9uc2hpcEVFbnVtLCBSZWxhdGl2ZVBoeXNpY2FsUmVsYXRpb25zaGlwLlVOU1BFQ0lGSUVEX0xJVEVSQUwpOworCQlhZGRFRW51bUxpdGVyYWwocmVsYXRpdmVQaHlzaWNhbFJlbGF0aW9uc2hpcEVFbnVtLCBSZWxhdGl2ZVBoeXNpY2FsUmVsYXRpb25zaGlwLkFCT1ZFX0xJVEVSQUwpOworCQlhZGRFRW51bUxpdGVyYWwocmVsYXRpdmVQaHlzaWNhbFJlbGF0aW9uc2hpcEVFbnVtLCBSZWxhdGl2ZVBoeXNpY2FsUmVsYXRpb25zaGlwLkJFTE9XX0xJVEVSQUwpOworCQlhZGRFRW51bUxpdGVyYWwocmVsYXRpdmVQaHlzaWNhbFJlbGF0aW9uc2hpcEVFbnVtLCBSZWxhdGl2ZVBoeXNpY2FsUmVsYXRpb25zaGlwLlJJR0hUX09GX0xJVEVSQUwpOworCQlhZGRFRW51bUxpdGVyYWwocmVsYXRpdmVQaHlzaWNhbFJlbGF0aW9uc2hpcEVFbnVtLCBSZWxhdGl2ZVBoeXNpY2FsUmVsYXRpb25zaGlwLkxFRlRfT0ZfTElURVJBTCk7CisJCWFkZEVFbnVtTGl0ZXJhbChyZWxhdGl2ZVBoeXNpY2FsUmVsYXRpb25zaGlwRUVudW0sIFJlbGF0aXZlUGh5c2ljYWxSZWxhdGlvbnNoaXAuTk9SVEhfT0ZfTElURVJBTCk7CisJCWFkZEVFbnVtTGl0ZXJhbChyZWxhdGl2ZVBoeXNpY2FsUmVsYXRpb25zaGlwRUVudW0sIFJlbGF0aXZlUGh5c2ljYWxSZWxhdGlvbnNoaXAuU09VVEhfT0ZfTElURVJBTCk7CisJCWFkZEVFbnVtTGl0ZXJhbChyZWxhdGl2ZVBoeXNpY2FsUmVsYXRpb25zaGlwRUVudW0sIFJlbGF0aXZlUGh5c2ljYWxSZWxhdGlvbnNoaXAuV0VTVF9PRl9MSVRFUkFMKTsKKwkJYWRkRUVudW1MaXRlcmFsKHJlbGF0aXZlUGh5c2ljYWxSZWxhdGlvbnNoaXBFRW51bSwgUmVsYXRpdmVQaHlzaWNhbFJlbGF0aW9uc2hpcC5FQVNUX09GX0xJVEVSQUwpOworCQlhZGRFRW51bUxpdGVyYWwocmVsYXRpdmVQaHlzaWNhbFJlbGF0aW9uc2hpcEVFbnVtLCBSZWxhdGl2ZVBoeXNpY2FsUmVsYXRpb25zaGlwLkNPTlRBSU5TX0xJVEVSQUwpOworCQlhZGRFRW51bUxpdGVyYWwocmVsYXRpdmVQaHlzaWNhbFJlbGF0aW9uc2hpcEVFbnVtLCBSZWxhdGl2ZVBoeXNpY2FsUmVsYXRpb25zaGlwLkNPTlRBSU5FRF9CWV9MSVRFUkFMKTsKKwkJYWRkRUVudW1MaXRlcmFsKHJlbGF0aXZlUGh5c2ljYWxSZWxhdGlvbnNoaXBFRW51bSwgUmVsYXRpdmVQaHlzaWNhbFJlbGF0aW9uc2hpcC5PVkVSTEFQU19MSVRFUkFMKTsKKwkJYWRkRUVudW1MaXRlcmFsKHJlbGF0aXZlUGh5c2ljYWxSZWxhdGlvbnNoaXBFRW51bSwgUmVsYXRpdmVQaHlzaWNhbFJlbGF0aW9uc2hpcC5PUkJJVFNfTElURVJBTCk7CisKKwkJaW5pdEVFbnVtKHRyYW5zcG9ydE1vZGVFRW51bSwgVHJhbnNwb3J0TW9kZS5jbGFzcywgIlRyYW5zcG9ydE1vZGUiKTsgLy8kTk9OLU5MUy0xJAorCQlhZGRFRW51bUxpdGVyYWwodHJhbnNwb3J0TW9kZUVFbnVtLCBUcmFuc3BvcnRNb2RlLlVOU1BFQ0lGSUVEX0xJVEVSQUwpOworCQlhZGRFRW51bUxpdGVyYWwodHJhbnNwb3J0TW9kZUVFbnVtLCBUcmFuc3BvcnRNb2RlLkFJUl9MSVRFUkFMKTsKKwkJYWRkRUVudW1MaXRlcmFsKHRyYW5zcG9ydE1vZGVFRW51bSwgVHJhbnNwb3J0TW9kZS5ST0FEX0xJVEVSQUwpOworCQlhZGRFRW51bUxpdGVyYWwodHJhbnNwb3J0TW9kZUVFbnVtLCBUcmFuc3BvcnRNb2RlLlJBSUxfTElURVJBTCk7CisJCWFkZEVFbnVtTGl0ZXJhbCh0cmFuc3BvcnRNb2RlRUVudW0sIFRyYW5zcG9ydE1vZGUuTUFSSU5FX0xJVEVSQUwpOworCQlhZGRFRW51bUxpdGVyYWwodHJhbnNwb3J0TW9kZUVFbnVtLCBUcmFuc3BvcnRNb2RlLkZPT1RfTElURVJBTCk7CisKKwkJLy8gQ3JlYXRlIHJlc291cmNlCisJCWNyZWF0ZVJlc291cmNlKGVOU19VUkkpOworCX0KKworfSAvL0xhYmVsc1BhY2thZ2VJbXBsCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvbGFiZWxzL2ltcGwvUGh5c2ljYWxSZWxhdGlvbnNoaXBMYWJlbEltcGwuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy9sYWJlbHMvaW1wbC9QaHlzaWNhbFJlbGF0aW9uc2hpcExhYmVsSW1wbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRiYzdhMzQKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvbGFiZWxzL2ltcGwvUGh5c2ljYWxSZWxhdGlvbnNoaXBMYWJlbEltcGwuamF2YQpAQCAtMCwwICsxLDUxIEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLmltcGw7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvL2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb247CisvL2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb25DaGFpbjsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmltcGwuU3RhdGljRWRnZUxhYmVsSW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5MYWJlbHNQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLlBoeXNpY2FsUmVsYXRpb25zaGlwTGFiZWw7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIEFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5QaHlzaWNhbCBSZWxhdGlvbnNoaXAgTGFiZWw8L2I+PC9lbT4nLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiA8cD4KKyAqIDwvcD4KKyAqCisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBhYnN0cmFjdCBjbGFzcyBQaHlzaWNhbFJlbGF0aW9uc2hpcExhYmVsSW1wbCBleHRlbmRzIFN0YXRpY0VkZ2VMYWJlbEltcGwgaW1wbGVtZW50cyBQaHlzaWNhbFJlbGF0aW9uc2hpcExhYmVsIHsKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgUGh5c2ljYWxSZWxhdGlvbnNoaXBMYWJlbEltcGwoKSB7CisJCXN1cGVyKCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIEVDbGFzcyBlU3RhdGljQ2xhc3MoKSB7CisJCXJldHVybiBMYWJlbHNQYWNrYWdlLkxpdGVyYWxzLlBIWVNJQ0FMX1JFTEFUSU9OU0hJUF9MQUJFTDsKKwl9CisKK30gLy9QaHlzaWNhbFJlbGF0aW9uc2hpcExhYmVsSW1wbApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy9sYWJlbHMvaW1wbC9QaHlzaWNhbFJlbGF0aW9uc2hpcExhYmVsVmFsdWVJbXBsLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvbGFiZWxzL2ltcGwvUGh5c2ljYWxSZWxhdGlvbnNoaXBMYWJlbFZhbHVlSW1wbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI2NzI2OWIKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvbGFiZWxzL2ltcGwvUGh5c2ljYWxSZWxhdGlvbnNoaXBMYWJlbFZhbHVlSW1wbC5qYXZhCkBAIC0wLDAgKzEsNDggQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuaW1wbDsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5pbXBsLkxhYmVsVmFsdWVJbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLkxhYmVsc1BhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuUGh5c2ljYWxSZWxhdGlvbnNoaXBMYWJlbFZhbHVlOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiBBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+UGh5c2ljYWwgUmVsYXRpb25zaGlwIExhYmVsIFZhbHVlPC9iPjwvZW0+Jy4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogPHA+CisgKiA8L3A+CisgKgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgUGh5c2ljYWxSZWxhdGlvbnNoaXBMYWJlbFZhbHVlSW1wbCBleHRlbmRzIExhYmVsVmFsdWVJbXBsIGltcGxlbWVudHMgUGh5c2ljYWxSZWxhdGlvbnNoaXBMYWJlbFZhbHVlIHsKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgUGh5c2ljYWxSZWxhdGlvbnNoaXBMYWJlbFZhbHVlSW1wbCgpIHsKKwkJc3VwZXIoKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgRUNsYXNzIGVTdGF0aWNDbGFzcygpIHsKKwkJcmV0dXJuIExhYmVsc1BhY2thZ2UuTGl0ZXJhbHMuUEhZU0lDQUxfUkVMQVRJT05TSElQX0xBQkVMX1ZBTFVFOworCX0KKworfSAvL1BoeXNpY2FsUmVsYXRpb25zaGlwTGFiZWxWYWx1ZUltcGwKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvbGFiZWxzL2ltcGwvUG9wdWxhdGlvbkxhYmVsSW1wbC5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL2xhYmVscy9pbXBsL1BvcHVsYXRpb25MYWJlbEltcGwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZmY0OTdmCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL2xhYmVscy9pbXBsL1BvcHVsYXRpb25MYWJlbEltcGwuamF2YQpAQCAtMCwwICsxLDQzMCBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5pbXBsOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuVVJJOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLmltcGwuRU5vdGlmaWNhdGlvbkltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLlNURU1VUkk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLk5vZGU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLk5vZGVMYWJlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguaW1wbC5TdGF0aWNOb2RlTGFiZWxJbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLkxhYmVsc0ZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuTGFiZWxzUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5Qb3B1bGF0aW9uTGFiZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuUG9wdWxhdGlvbkxhYmVsVmFsdWU7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnCisgKiA8ZW0+PGI+UG9wdWxhdGlvbiBMYWJlbDwvYj48L2VtPicuIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogPHA+CisgKiBUaGUgZm9sbG93aW5nIGZlYXR1cmVzIGFyZSBpbXBsZW1lbnRlZDoKKyAqIDx1bD4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5pbXBsLlBvcHVsYXRpb25MYWJlbEltcGwjZ2V0UG9wdWxhdGlvbklkZW50aWZpZXIgPGVtPlBvcHVsYXRpb24gSWRlbnRpZmllcjwvZW0+fTwvbGk+CisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuaW1wbC5Qb3B1bGF0aW9uTGFiZWxJbXBsI2dldE5hbWUgPGVtPk5hbWU8L2VtPn08L2xpPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLmltcGwuUG9wdWxhdGlvbkxhYmVsSW1wbCNnZXRDdXJyZW50UG9wdWxhdGlvblZhbHVlIDxlbT5DdXJyZW50IFBvcHVsYXRpb24gVmFsdWU8L2VtPn08L2xpPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLmltcGwuUG9wdWxhdGlvbkxhYmVsSW1wbCNnZXRQb3B1bGF0ZWRBcmVhIDxlbT5Qb3B1bGF0ZWQgQXJlYTwvZW0+fTwvbGk+CisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuaW1wbC5Qb3B1bGF0aW9uTGFiZWxJbXBsI2dldFZhbGlkWWVhciA8ZW0+VmFsaWQgWWVhcjwvZW0+fTwvbGk+CisgKiA8L3VsPgorICogPC9wPgorICoKKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIFBvcHVsYXRpb25MYWJlbEltcGwgZXh0ZW5kcyBTdGF0aWNOb2RlTGFiZWxJbXBsIGltcGxlbWVudHMKKwkJUG9wdWxhdGlvbkxhYmVsIHsKKwkvKioKKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0UG9wdWxhdGlvbklkZW50aWZpZXIoKSA8ZW0+UG9wdWxhdGlvbiBJZGVudGlmaWVyPC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLQorCSAqIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNnZXRQb3B1bGF0aW9uSWRlbnRpZmllcigpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBTdHJpbmcgUE9QVUxBVElPTl9JREVOVElGSUVSX0VERUZBVUxUID0gbnVsbDsKKworCS8qKgorCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldFBvcHVsYXRpb25JZGVudGlmaWVyKCkgPGVtPlBvcHVsYXRpb24gSWRlbnRpZmllcjwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0KKwkgKiBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZ2V0UG9wdWxhdGlvbklkZW50aWZpZXIoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBTdHJpbmcgcG9wdWxhdGlvbklkZW50aWZpZXIgPSBQT1BVTEFUSU9OX0lERU5USUZJRVJfRURFRkFVTFQ7CisKKwkvKioKKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0TmFtZSgpIDxlbT5OYW1lPC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZ2V0TmFtZSgpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBTdHJpbmcgTkFNRV9FREVGQVVMVCA9IG51bGw7CisKKwkvKioKKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXROYW1lKCkgPGVtPk5hbWU8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNnZXROYW1lKCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgU3RyaW5nIG5hbWUgPSBOQU1FX0VERUZBVUxUOworCisJLyoqCisJICogVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldFBvcHVsYXRlZEFyZWEoKSA8ZW0+UG9wdWxhdGVkIEFyZWE8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tCisJICogZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI2dldFBvcHVsYXRlZEFyZWEoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgZG91YmxlIFBPUFVMQVRFRF9BUkVBX0VERUZBVUxUID0gMC4wOworCisJLyoqCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0UG9wdWxhdGVkQXJlYSgpIDxlbT5Qb3B1bGF0ZWQgQXJlYTwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0KKwkgKiBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZ2V0UG9wdWxhdGVkQXJlYSgpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIGRvdWJsZSBwb3B1bGF0ZWRBcmVhID0gUE9QVUxBVEVEX0FSRUFfRURFRkFVTFQ7CisKKwkvKioKKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0VmFsaWRZZWFyKCkgPGVtPlZhbGlkIFllYXI8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI2dldFZhbGlkWWVhcigpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBpbnQgVkFMSURfWUVBUl9FREVGQVVMVCA9IDIwMDY7CisKKwkvKioKKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRWYWxpZFllYXIoKSA8ZW0+VmFsaWQgWWVhcjwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZ2V0VmFsaWRZZWFyKCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgaW50IHZhbGlkWWVhciA9IFZBTElEX1lFQVJfRURFRkFVTFQ7CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCXByb3RlY3RlZCBQb3B1bGF0aW9uTGFiZWxJbXBsKCkgeworCQlzdXBlcigpOworCQlzZXRUeXBlVVJJKFBvcHVsYXRpb25MYWJlbC5VUklfVFlQRV9QT1BVTEFUSU9OX0xBQkVMKTsKKwkJc2V0UG9wdWxhdGlvbklkZW50aWZpZXIoUG9wdWxhdGlvbkxhYmVsLkhVTUFOKTsKKwkJc2V0Q3VycmVudFZhbHVlKExhYmVsc0ZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZVBvcHVsYXRpb25MYWJlbFZhbHVlKCkpOworCX0gLy8gUG9wdWxhdGlvbkxhYmVsSW1wbAorCisJLyoqCisJICogQHBhcmFtIGFkbWluTGV2ZWwKKwkgKiBAcGFyYW0gY291bnRyeUNvZGUKKwkgKiBAcGFyYW0gcG9wdWxhdGlvbklkZW50aWZpZXIKKwkgKiBAcGFyYW0geWVhcgorCSAqICAgICAgICAgICAgdGhlIHllYXIgZm9yIHdoaWNoIHRoZSBwb3B1bGF0aW9uIGRhdGEgaXMgdmFsaWQKKwkgKiBAcGFyYW0gbm9kZUNvZGUKKwkgKiBAcmV0dXJuIHRoZSBVUkkgZm9yIGEgc3BlY2lmaWMgcG9wdWxhdGlvbiBsYWJlbCBmb3IgYSBnZW9ncmFwaGljIHJlZ2lvbgorCSAqLworCXB1YmxpYyBzdGF0aWMgVVJJIGNyZWF0ZVBvcHVsYXRpb25MYWJlbFVSSShmaW5hbCBpbnQgYWRtaW5MZXZlbCwKKwkJCWZpbmFsIFN0cmluZyBjb3VudHJ5Q29kZSwgZmluYWwgU3RyaW5nIHBvcHVsYXRpb25JZGVudGlmaWVyLAorCQkJZmluYWwgU3RyaW5nIHllYXIsIGZpbmFsIFN0cmluZyBub2RlQ29kZSkgeworCQlmaW5hbCBVUkkgcmV0VmFsdWUgPSBTVEVNVVJJCisJCQkJLmNyZWF0ZVVSSShQb3B1bGF0aW9uTGFiZWwuVVJJX1RZUEVfUE9QVUxBVElPTl9MQUJFTF9TRUdNRU5UCisJCQkJCQkrICIvIiArIGNvdW50cnlDb2RlICsgIi8iICsgYWRtaW5MZXZlbCArICIvIgorCQkJCQkJKyBwb3B1bGF0aW9uSWRlbnRpZmllciArICIvIiArIHllYXIgKyAiLyIgKyBub2RlQ29kZSk7CisJCXJldHVybiByZXRWYWx1ZTsKKwl9IC8vIGNyZWF0ZVBvcHVsYXRpb25MYWJlbFVSSQorCisJLyoqCisJICogCisJICogQHBhcmFtIHBvcHVsYXRpb25JZGVudGlmaWVyCisJICogICAgICAgICAgICB0aGUgaWRlbnRpZmllciBvZiB0aGUgcG9wdWxhdGlvbgorCSAqIEBwYXJhbSBub2RlCisJICogICAgICAgICAgICB0aGUgbm9kZSB3aXRoIHRoZSBsYWJlbAorCSAqIEByZXR1cm4gdGhlIHBvcHVsYXRpb24gbGFiZWwgZm9yIHRoZSBwb3B1bGF0aW9uIG9uIHRoZSBub2RlLCBvciBudWxsIGlmCisJICogICAgICAgICB0aGVyZSBpc24ndCBvbmUuCisJICovCisJcHVibGljIHN0YXRpYyBQb3B1bGF0aW9uTGFiZWwgZ2V0UG9wdWxhdGlvbkxhYmVsKAorCQkJZmluYWwgU3RyaW5nIHBvcHVsYXRpb25JZGVudGlmaWVyLCBmaW5hbCBOb2RlIG5vZGUpIHsKKwkJUG9wdWxhdGlvbkxhYmVsIHJldFZhbHVlID0gbnVsbDsKKworCQlmb3IgKGZpbmFsIEl0ZXJhdG9yPE5vZGVMYWJlbD4gbm9kZUxhYmVsSXRlciA9IG5vZGUuZ2V0TGFiZWxzKCkKKwkJCQkuaXRlcmF0b3IoKTsgbm9kZUxhYmVsSXRlci5oYXNOZXh0KCk7KSB7CisJCQlmaW5hbCBOb2RlTGFiZWwgbm9kZUxhYmVsID0gbm9kZUxhYmVsSXRlci5uZXh0KCk7CisJCQkvLyBJcyB0aGlzIGEgUG9wdWxhdGlvbkxhYmVsPworCQkJaWYgKG5vZGVMYWJlbCBpbnN0YW5jZW9mIFBvcHVsYXRpb25MYWJlbCkgeworCQkJCS8vIFllcworCQkJCWZpbmFsIFBvcHVsYXRpb25MYWJlbCBwb3B1bGF0aW9uTGFiZWwgPSAoUG9wdWxhdGlvbkxhYmVsKSBub2RlTGFiZWw7CisJCQkJLy8gVGhlIGNvcnJlY3QgcG9wdWxhdGlvbj8KKwkJCQlpZiAocG9wdWxhdGlvbkxhYmVsLmdldFBvcHVsYXRpb25JZGVudGlmaWVyKCkuZXF1YWxzSWdub3JlQ2FzZSgKKwkJCQkJCXBvcHVsYXRpb25JZGVudGlmaWVyKSkgeworCQkJCQkvLyBZZXMKKwkJCQkJcmV0VmFsdWUgPSBwb3B1bGF0aW9uTGFiZWw7CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCX0KKwkJfSAvLyBmb3IKKwkJcmV0dXJuIHJldFZhbHVlOworCX0gLy8gZ2V0UG9wdWxhdGlvbkxhYmVsCisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIEVDbGFzcyBlU3RhdGljQ2xhc3MoKSB7CisJCXJldHVybiBMYWJlbHNQYWNrYWdlLkxpdGVyYWxzLlBPUFVMQVRJT05fTEFCRUw7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAcmV0dXJuIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgU3RyaW5nIGdldFBvcHVsYXRpb25JZGVudGlmaWVyKCkgeworCQlyZXR1cm4gcG9wdWxhdGlvbklkZW50aWZpZXI7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAcGFyYW0gbmV3UG9wdWxhdGlvbklkZW50aWZpZXIKKwkgKiAKKwkgKiAgICAgICAgICAgIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRQb3B1bGF0aW9uSWRlbnRpZmllcihTdHJpbmcgbmV3UG9wdWxhdGlvbklkZW50aWZpZXIpIHsKKwkJU3RyaW5nIG9sZFBvcHVsYXRpb25JZGVudGlmaWVyID0gcG9wdWxhdGlvbklkZW50aWZpZXI7CisJCXBvcHVsYXRpb25JZGVudGlmaWVyID0gbmV3UG9wdWxhdGlvbklkZW50aWZpZXI7CisJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkKKwkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIExhYmVsc1BhY2thZ2UuUE9QVUxBVElPTl9MQUJFTF9fUE9QVUxBVElPTl9JREVOVElGSUVSLCBvbGRQb3B1bGF0aW9uSWRlbnRpZmllciwgcG9wdWxhdGlvbklkZW50aWZpZXIpKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEByZXR1cm4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlwdWJsaWMgU3RyaW5nIGdldE5hbWUoKSB7CisJCS8vIElzIGEgbmFtZSBzZXQ/CisJCWlmIChlSXNTZXQoTGFiZWxzUGFja2FnZS5QT1BVTEFUSU9OX0xBQkVMX19OQU1FKSkgeworCQkJcmV0dXJuIG5hbWU7CisJCX0gZWxzZSB7CisJCQlyZXR1cm4gZ2V0UG9wdWxhdGlvbklkZW50aWZpZXIoKTsKKwkJfQorCX0gLy8gZ2V0TmFtZQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAcGFyYW0gbmV3TmFtZQorCSAqIAorCSAqICAgICAgICAgICAgPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIHNldE5hbWUoU3RyaW5nIG5ld05hbWUpIHsKKwkJU3RyaW5nIG9sZE5hbWUgPSBuYW1lOworCQluYW1lID0gbmV3TmFtZTsKKwkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQorCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgTGFiZWxzUGFja2FnZS5QT1BVTEFUSU9OX0xBQkVMX19OQU1FLCBvbGROYW1lLCBuYW1lKSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAcmV0dXJuIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJcHVibGljIFBvcHVsYXRpb25MYWJlbFZhbHVlIGdldEN1cnJlbnRQb3B1bGF0aW9uVmFsdWUoKSB7CisJCXJldHVybiAoUG9wdWxhdGlvbkxhYmVsVmFsdWUpIGdldEN1cnJlbnRWYWx1ZSgpOworCX0gLy8gZ2V0Q3VycmVudFBvcHVsYXRpb25WYWx1ZQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBkb3VibGUgZ2V0UG9wdWxhdGVkQXJlYSgpIHsKKwkJcmV0dXJuIHBvcHVsYXRlZEFyZWE7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIHNldFBvcHVsYXRlZEFyZWEoZG91YmxlIG5ld1BvcHVsYXRlZEFyZWEpIHsKKwkJZG91YmxlIG9sZFBvcHVsYXRlZEFyZWEgPSBwb3B1bGF0ZWRBcmVhOworCQlwb3B1bGF0ZWRBcmVhID0gbmV3UG9wdWxhdGVkQXJlYTsKKwkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQorCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgTGFiZWxzUGFja2FnZS5QT1BVTEFUSU9OX0xBQkVMX19QT1BVTEFURURfQVJFQSwgb2xkUG9wdWxhdGVkQXJlYSwgcG9wdWxhdGVkQXJlYSkpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBpbnQgZ2V0VmFsaWRZZWFyKCkgeworCQlyZXR1cm4gdmFsaWRZZWFyOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIHNldFZhbGlkWWVhcihpbnQgbmV3VmFsaWRZZWFyKSB7CisJCWludCBvbGRWYWxpZFllYXIgPSB2YWxpZFllYXI7CisJCXZhbGlkWWVhciA9IG5ld1ZhbGlkWWVhcjsKKwkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQorCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgTGFiZWxzUGFja2FnZS5QT1BVTEFUSU9OX0xBQkVMX19WQUxJRF9ZRUFSLCBvbGRWYWxpZFllYXIsIHZhbGlkWWVhcikpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogCisJICogQHBhcmFtIGZlYXR1cmVJRAorCSAqIEBwYXJhbSByZXNvbHZlCisJICogQHBhcmFtIGNvcmVUeXBlCisJICogQHJldHVybiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIE9iamVjdCBlR2V0KGludCBmZWF0dXJlSUQsIGJvb2xlYW4gcmVzb2x2ZSwgYm9vbGVhbiBjb3JlVHlwZSkgeworCQlzd2l0Y2ggKGZlYXR1cmVJRCkgeworCQkJY2FzZSBMYWJlbHNQYWNrYWdlLlBPUFVMQVRJT05fTEFCRUxfX1BPUFVMQVRJT05fSURFTlRJRklFUjoKKwkJCQlyZXR1cm4gZ2V0UG9wdWxhdGlvbklkZW50aWZpZXIoKTsKKwkJCWNhc2UgTGFiZWxzUGFja2FnZS5QT1BVTEFUSU9OX0xBQkVMX19OQU1FOgorCQkJCXJldHVybiBnZXROYW1lKCk7CisJCQljYXNlIExhYmVsc1BhY2thZ2UuUE9QVUxBVElPTl9MQUJFTF9fQ1VSUkVOVF9QT1BVTEFUSU9OX1ZBTFVFOgorCQkJCXJldHVybiBnZXRDdXJyZW50UG9wdWxhdGlvblZhbHVlKCk7CisJCQljYXNlIExhYmVsc1BhY2thZ2UuUE9QVUxBVElPTl9MQUJFTF9fUE9QVUxBVEVEX0FSRUE6CisJCQkJcmV0dXJuIGdldFBvcHVsYXRlZEFyZWEoKTsKKwkJCWNhc2UgTGFiZWxzUGFja2FnZS5QT1BVTEFUSU9OX0xBQkVMX19WQUxJRF9ZRUFSOgorCQkJCXJldHVybiBnZXRWYWxpZFllYXIoKTsKKwkJfQorCQlyZXR1cm4gc3VwZXIuZUdldChmZWF0dXJlSUQsIHJlc29sdmUsIGNvcmVUeXBlKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBwYXJhbSBmZWF0dXJlSUQKKwkgKiBAcGFyYW0gbmV3VmFsdWUKKwkgKiAKKwkgKiAgICAgICAgICAgIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBlU2V0KGludCBmZWF0dXJlSUQsIE9iamVjdCBuZXdWYWx1ZSkgeworCQlzd2l0Y2ggKGZlYXR1cmVJRCkgeworCQkJY2FzZSBMYWJlbHNQYWNrYWdlLlBPUFVMQVRJT05fTEFCRUxfX1BPUFVMQVRJT05fSURFTlRJRklFUjoKKwkJCQlzZXRQb3B1bGF0aW9uSWRlbnRpZmllcigoU3RyaW5nKW5ld1ZhbHVlKTsKKwkJCQlyZXR1cm47CisJCQljYXNlIExhYmVsc1BhY2thZ2UuUE9QVUxBVElPTl9MQUJFTF9fTkFNRToKKwkJCQlzZXROYW1lKChTdHJpbmcpbmV3VmFsdWUpOworCQkJCXJldHVybjsKKwkJCWNhc2UgTGFiZWxzUGFja2FnZS5QT1BVTEFUSU9OX0xBQkVMX19QT1BVTEFURURfQVJFQToKKwkJCQlzZXRQb3B1bGF0ZWRBcmVhKChEb3VibGUpbmV3VmFsdWUpOworCQkJCXJldHVybjsKKwkJCWNhc2UgTGFiZWxzUGFja2FnZS5QT1BVTEFUSU9OX0xBQkVMX19WQUxJRF9ZRUFSOgorCQkJCXNldFZhbGlkWWVhcigoSW50ZWdlciluZXdWYWx1ZSk7CisJCQkJcmV0dXJuOworCQl9CisJCXN1cGVyLmVTZXQoZmVhdHVyZUlELCBuZXdWYWx1ZSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAcGFyYW0gZmVhdHVyZUlECisJICogCisJICogICAgICAgICAgICA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgZVVuc2V0KGludCBmZWF0dXJlSUQpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJCWNhc2UgTGFiZWxzUGFja2FnZS5QT1BVTEFUSU9OX0xBQkVMX19QT1BVTEFUSU9OX0lERU5USUZJRVI6CisJCQkJc2V0UG9wdWxhdGlvbklkZW50aWZpZXIoUE9QVUxBVElPTl9JREVOVElGSUVSX0VERUZBVUxUKTsKKwkJCQlyZXR1cm47CisJCQljYXNlIExhYmVsc1BhY2thZ2UuUE9QVUxBVElPTl9MQUJFTF9fTkFNRToKKwkJCQlzZXROYW1lKE5BTUVfRURFRkFVTFQpOworCQkJCXJldHVybjsKKwkJCWNhc2UgTGFiZWxzUGFja2FnZS5QT1BVTEFUSU9OX0xBQkVMX19QT1BVTEFURURfQVJFQToKKwkJCQlzZXRQb3B1bGF0ZWRBcmVhKFBPUFVMQVRFRF9BUkVBX0VERUZBVUxUKTsKKwkJCQlyZXR1cm47CisJCQljYXNlIExhYmVsc1BhY2thZ2UuUE9QVUxBVElPTl9MQUJFTF9fVkFMSURfWUVBUjoKKwkJCQlzZXRWYWxpZFllYXIoVkFMSURfWUVBUl9FREVGQVVMVCk7CisJCQkJcmV0dXJuOworCQl9CisJCXN1cGVyLmVVbnNldChmZWF0dXJlSUQpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogCisJICogQHBhcmFtIGZlYXR1cmVJRAorCSAqIEByZXR1cm4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBib29sZWFuIGVJc1NldChpbnQgZmVhdHVyZUlEKSB7CisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7CisJCQljYXNlIExhYmVsc1BhY2thZ2UuUE9QVUxBVElPTl9MQUJFTF9fUE9QVUxBVElPTl9JREVOVElGSUVSOgorCQkJCXJldHVybiBQT1BVTEFUSU9OX0lERU5USUZJRVJfRURFRkFVTFQgPT0gbnVsbCA/IHBvcHVsYXRpb25JZGVudGlmaWVyICE9IG51bGwgOiAhUE9QVUxBVElPTl9JREVOVElGSUVSX0VERUZBVUxULmVxdWFscyhwb3B1bGF0aW9uSWRlbnRpZmllcik7CisJCQljYXNlIExhYmVsc1BhY2thZ2UuUE9QVUxBVElPTl9MQUJFTF9fTkFNRToKKwkJCQlyZXR1cm4gTkFNRV9FREVGQVVMVCA9PSBudWxsID8gbmFtZSAhPSBudWxsIDogIU5BTUVfRURFRkFVTFQuZXF1YWxzKG5hbWUpOworCQkJY2FzZSBMYWJlbHNQYWNrYWdlLlBPUFVMQVRJT05fTEFCRUxfX0NVUlJFTlRfUE9QVUxBVElPTl9WQUxVRToKKwkJCQlyZXR1cm4gZ2V0Q3VycmVudFBvcHVsYXRpb25WYWx1ZSgpICE9IG51bGw7CisJCQljYXNlIExhYmVsc1BhY2thZ2UuUE9QVUxBVElPTl9MQUJFTF9fUE9QVUxBVEVEX0FSRUE6CisJCQkJcmV0dXJuIHBvcHVsYXRlZEFyZWEgIT0gUE9QVUxBVEVEX0FSRUFfRURFRkFVTFQ7CisJCQljYXNlIExhYmVsc1BhY2thZ2UuUE9QVUxBVElPTl9MQUJFTF9fVkFMSURfWUVBUjoKKwkJCQlyZXR1cm4gdmFsaWRZZWFyICE9IFZBTElEX1lFQVJfRURFRkFVTFQ7CisJCX0KKwkJcmV0dXJuIHN1cGVyLmVJc1NldChmZWF0dXJlSUQpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogCisJICogQHJldHVybiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKSB7CisJCWlmIChlSXNQcm94eSgpKQorCQkJcmV0dXJuIHN1cGVyLnRvU3RyaW5nKCk7CisKKwkJU3RyaW5nQnVmZmVyIHJlc3VsdCA9IG5ldyBTdHJpbmdCdWZmZXIoCisJCQkJZ2V0TmFtZSgpID09IG51bGwgPyBnZXRQb3B1bGF0aW9uSWRlbnRpZmllcigpIDogZ2V0TmFtZSgpKTsKKwkJcmVzdWx0LmFwcGVuZCgiIFsiKTsKKwkJcmVzdWx0LmFwcGVuZChnZXRDdXJyZW50UG9wdWxhdGlvblZhbHVlKCkuZ2V0Q291bnQoKSk7CisJCS8vIFdhcyBhbiBhcmVhIGV4dGVuZCBzcGVjaWZpZWQ/CisJCXJlc3VsdAorCQkJCS5hcHBlbmQoZUlzU2V0KExhYmVsc1BhY2thZ2UuUE9QVUxBVElPTl9MQUJFTF9fUE9QVUxBVEVEX0FSRUEpID8gIi8iCisJCQkJCQkrIERvdWJsZS50b1N0cmluZyhnZXRQb3B1bGF0ZWRBcmVhKCkpICsgImttXjIiCisJCQkJCQk6ICIiKTsKKwkJcmVzdWx0LmFwcGVuZCgiXSIpOworCQlyZXR1cm4gcmVzdWx0LnRvU3RyaW5nKCk7CisJfSAvLyB0b1N0cmluZworfSAvLyBQb3B1bGF0aW9uTGFiZWxJbXBsCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvbGFiZWxzL2ltcGwvUG9wdWxhdGlvbkxhYmVsVmFsdWVJbXBsLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvbGFiZWxzL2ltcGwvUG9wdWxhdGlvbkxhYmVsVmFsdWVJbXBsLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTVkYTFiNAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy9sYWJlbHMvaW1wbC9Qb3B1bGF0aW9uTGFiZWxWYWx1ZUltcGwuamF2YQpAQCAtMCwwICsxLDIxMCBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5pbXBsOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5pbXBsLkVOb3RpZmljYXRpb25JbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5pbXBsLkxhYmVsVmFsdWVJbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLkxhYmVsc1BhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuUG9wdWxhdGlvbkxhYmVsVmFsdWU7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPlBvcHVsYXRpb24gTGFiZWwgVmFsdWU8L2I+PC9lbT4nLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiA8cD4KKyAqIFRoZSBmb2xsb3dpbmcgZmVhdHVyZXMgYXJlIGltcGxlbWVudGVkOgorICogPHVsPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLmltcGwuUG9wdWxhdGlvbkxhYmVsVmFsdWVJbXBsI2dldENvdW50IDxlbT5Db3VudDwvZW0+fTwvbGk+CisgKiA8L3VsPgorICogPC9wPgorICoKKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIFBvcHVsYXRpb25MYWJlbFZhbHVlSW1wbCBleHRlbmRzIExhYmVsVmFsdWVJbXBsIGltcGxlbWVudHMKKwkJUG9wdWxhdGlvbkxhYmVsVmFsdWUgeworCS8qKgorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRDb3VudCgpIDxlbT5Db3VudDwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI2dldENvdW50KCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIGRvdWJsZSBDT1VOVF9FREVGQVVMVCA9IDAuMDsKKworCS8qKgorCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldENvdW50KCkgPGVtPkNvdW50PC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZ2V0Q291bnQoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBkb3VibGUgY291bnQgPSBDT1VOVF9FREVGQVVMVDsKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgUG9wdWxhdGlvbkxhYmVsVmFsdWVJbXBsKCkgeworCQlzdXBlcigpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgRUNsYXNzIGVTdGF0aWNDbGFzcygpIHsKKwkJcmV0dXJuIExhYmVsc1BhY2thZ2UuTGl0ZXJhbHMuUE9QVUxBVElPTl9MQUJFTF9WQUxVRTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEByZXR1cm4KKwkgKiAKKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIGRvdWJsZSBnZXRDb3VudCgpIHsKKwkJcmV0dXJuIGNvdW50OworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRDb3VudChkb3VibGUgbmV3Q291bnQpIHsKKwkJZG91YmxlIG9sZENvdW50ID0gY291bnQ7CisJCWNvdW50ID0gbmV3Q291bnQ7CisJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkKKwkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIExhYmVsc1BhY2thZ2UuUE9QVUxBVElPTl9MQUJFTF9WQUxVRV9fQ09VTlQsIG9sZENvdW50LCBjb3VudCkpOworCX0KKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmltcGwuTGFiZWxWYWx1ZUltcGwjcmVzZXQoKQorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIHJlc2V0KCkgeworCQkvLyBXZSBkb24ndCByZXNldAorCQkvLyBzZXRDb3VudChDT1VOVF9FREVGQVVMVCk7CisJfSAvLyByZXNldAorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAcGFyYW0gZmVhdHVyZUlECisJICogQHBhcmFtIHJlc29sdmUKKwkgKiBAcGFyYW0gY29yZVR5cGUKKwkgKiBAcmV0dXJuCisJICogCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBPYmplY3QgZUdldChpbnQgZmVhdHVyZUlELCBib29sZWFuIHJlc29sdmUsIGJvb2xlYW4gY29yZVR5cGUpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJCWNhc2UgTGFiZWxzUGFja2FnZS5QT1BVTEFUSU9OX0xBQkVMX1ZBTFVFX19DT1VOVDoKKwkJCQlyZXR1cm4gZ2V0Q291bnQoKTsKKwkJfQorCQlyZXR1cm4gc3VwZXIuZUdldChmZWF0dXJlSUQsIHJlc29sdmUsIGNvcmVUeXBlKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBwYXJhbSBmZWF0dXJlSUQKKwkgKiBAcGFyYW0gbmV3VmFsdWUKKwkgKiAKKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgZVNldChpbnQgZmVhdHVyZUlELCBPYmplY3QgbmV3VmFsdWUpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJCWNhc2UgTGFiZWxzUGFja2FnZS5QT1BVTEFUSU9OX0xBQkVMX1ZBTFVFX19DT1VOVDoKKwkJCQlzZXRDb3VudCgoRG91YmxlKW5ld1ZhbHVlKTsKKwkJCQlyZXR1cm47CisJCX0KKwkJc3VwZXIuZVNldChmZWF0dXJlSUQsIG5ld1ZhbHVlKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBwYXJhbSBmZWF0dXJlSUQKKwkgKiAKKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgZVVuc2V0KGludCBmZWF0dXJlSUQpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJCWNhc2UgTGFiZWxzUGFja2FnZS5QT1BVTEFUSU9OX0xBQkVMX1ZBTFVFX19DT1VOVDoKKwkJCQlzZXRDb3VudChDT1VOVF9FREVGQVVMVCk7CisJCQkJcmV0dXJuOworCQl9CisJCXN1cGVyLmVVbnNldChmZWF0dXJlSUQpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogCisJICogQHBhcmFtIGZlYXR1cmVJRAorCSAqIEByZXR1cm4KKwkgKiAKKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIGJvb2xlYW4gZUlzU2V0KGludCBmZWF0dXJlSUQpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJCWNhc2UgTGFiZWxzUGFja2FnZS5QT1BVTEFUSU9OX0xBQkVMX1ZBTFVFX19DT1VOVDoKKwkJCQlyZXR1cm4gY291bnQgIT0gQ09VTlRfRURFRkFVTFQ7CisJCX0KKwkJcmV0dXJuIHN1cGVyLmVJc1NldChmZWF0dXJlSUQpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogCisJICogQHJldHVybgorCSAqIAorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkgeworCQlpZiAoZUlzUHJveHkoKSkgcmV0dXJuIHN1cGVyLnRvU3RyaW5nKCk7CisKKwkJU3RyaW5nQnVmZmVyIHJlc3VsdCA9IG5ldyBTdHJpbmdCdWZmZXIoc3VwZXIudG9TdHJpbmcoKSk7CisJCXJlc3VsdC5hcHBlbmQoIiAoY291bnQ6ICIpOyAvLyROT04tTkxTLTEkCisJCXJlc3VsdC5hcHBlbmQoY291bnQpOworCQlyZXN1bHQuYXBwZW5kKCcpJyk7CisJCXJldHVybiByZXN1bHQudG9TdHJpbmcoKTsKKwl9CisKKwkvKioKKwkgKiBAcmV0dXJuIDxjb2RlPnRydWU8L2NvZGU+IGlmIHRoZSB2YWx1ZSBpcyBzYW5lCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguaW1wbC5MYWJlbEltcGwjc2FuZSgpCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIGJvb2xlYW4gc2FuZSgpIHsKKwkJYm9vbGVhbiByZXRWYWx1ZSA9IHRydWU7CisKKwkJcmV0VmFsdWUgPSByZXRWYWx1ZQorCQkJCSYmICghZUlzU2V0KExhYmVsc1BhY2thZ2UuUE9QVUxBVElPTl9MQUJFTF9WQUxVRV9fQ09VTlQpIHx8IGdldENvdW50KCkgPj0gMCk7CisJCWFzc2VydCByZXRWYWx1ZTsKKworCQlyZXR1cm4gcmV0VmFsdWU7CisJfSAvLyBzYW5lCit9IC8vIFBvcHVsYXRpb25MYWJlbFZhbHVlSW1wbApkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL2xhYmVscy9pbXBsL1JlbGF0aXZlUGh5c2ljYWxSZWxhdGlvbnNoaXBMYWJlbEltcGwuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy9sYWJlbHMvaW1wbC9SZWxhdGl2ZVBoeXNpY2FsUmVsYXRpb25zaGlwTGFiZWxJbXBsLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWQyZDUzMQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy9sYWJlbHMvaW1wbC9SZWxhdGl2ZVBoeXNpY2FsUmVsYXRpb25zaGlwTGFiZWxJbXBsLmphdmEKQEAgLTAsMCArMSw5OCBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5pbXBsOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuTGFiZWxzRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5MYWJlbHNQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLlJlbGF0aXZlUGh5c2ljYWxSZWxhdGlvbnNoaXBMYWJlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5SZWxhdGl2ZVBoeXNpY2FsUmVsYXRpb25zaGlwTGFiZWxWYWx1ZTsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiBBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+UmVsYXRpdmUgUGh5c2ljYWwgUmVsYXRpb25zaGlwIExhYmVsPC9iPjwvZW0+Jy4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogPHA+CisgKiBUaGUgZm9sbG93aW5nIGZlYXR1cmVzIGFyZSBpbXBsZW1lbnRlZDoKKyAqIDx1bD4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5pbXBsLlJlbGF0aXZlUGh5c2ljYWxSZWxhdGlvbnNoaXBMYWJlbEltcGwjZ2V0Q3VycmVudFJlbGF0aW9uc2hpcCA8ZW0+Q3VycmVudCBSZWxhdGlvbnNoaXA8L2VtPn08L2xpPgorICogPC91bD4KKyAqIDwvcD4KKyAqCisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBSZWxhdGl2ZVBoeXNpY2FsUmVsYXRpb25zaGlwTGFiZWxJbXBsIGV4dGVuZHMKKwkJUGh5c2ljYWxSZWxhdGlvbnNoaXBMYWJlbEltcGwgaW1wbGVtZW50cworCQlSZWxhdGl2ZVBoeXNpY2FsUmVsYXRpb25zaGlwTGFiZWwgeworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJcHJvdGVjdGVkIFJlbGF0aXZlUGh5c2ljYWxSZWxhdGlvbnNoaXBMYWJlbEltcGwoKSB7CisJCXN1cGVyKCk7CisJCXNldEN1cnJlbnRWYWx1ZShMYWJlbHNGYWN0b3J5LmVJTlNUQU5DRQorCQkJCS5jcmVhdGVSZWxhdGl2ZVBoeXNpY2FsUmVsYXRpb25zaGlwTGFiZWxWYWx1ZSgpKTsKKwl9IC8vIFJlbGF0aXZlUGh5c2ljYWxSZWxhdGlvbnNoaXBMYWJlbEltcGwKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgRUNsYXNzIGVTdGF0aWNDbGFzcygpIHsKKwkJcmV0dXJuIExhYmVsc1BhY2thZ2UuTGl0ZXJhbHMuUkVMQVRJVkVfUEhZU0lDQUxfUkVMQVRJT05TSElQX0xBQkVMOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJcHVibGljIFJlbGF0aXZlUGh5c2ljYWxSZWxhdGlvbnNoaXBMYWJlbFZhbHVlIGdldEN1cnJlbnRSZWxhdGlvbnNoaXAoKSB7CisJCXJldHVybiAoUmVsYXRpdmVQaHlzaWNhbFJlbGF0aW9uc2hpcExhYmVsVmFsdWUpIGdldEN1cnJlbnRWYWx1ZSgpOworCX0gLy8gZ2V0Q3VycmVudFJlbGF0aW9uc2hpcAorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBPYmplY3QgZUdldChpbnQgZmVhdHVyZUlELCBib29sZWFuIHJlc29sdmUsIGJvb2xlYW4gY29yZVR5cGUpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJCWNhc2UgTGFiZWxzUGFja2FnZS5SRUxBVElWRV9QSFlTSUNBTF9SRUxBVElPTlNISVBfTEFCRUxfX0NVUlJFTlRfUkVMQVRJT05TSElQOgorCQkJCXJldHVybiBnZXRDdXJyZW50UmVsYXRpb25zaGlwKCk7CisJCX0KKwkJcmV0dXJuIHN1cGVyLmVHZXQoZmVhdHVyZUlELCByZXNvbHZlLCBjb3JlVHlwZSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBib29sZWFuIGVJc1NldChpbnQgZmVhdHVyZUlEKSB7CisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7CisJCQljYXNlIExhYmVsc1BhY2thZ2UuUkVMQVRJVkVfUEhZU0lDQUxfUkVMQVRJT05TSElQX0xBQkVMX19DVVJSRU5UX1JFTEFUSU9OU0hJUDoKKwkJCQlyZXR1cm4gZ2V0Q3VycmVudFJlbGF0aW9uc2hpcCgpICE9IG51bGw7CisJCX0KKwkJcmV0dXJuIHN1cGVyLmVJc1NldChmZWF0dXJlSUQpOworCX0KKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmltcGwuTGFiZWxJbXBsI3RvU3RyaW5nKCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkgeworCQlyZXR1cm4gc3VwZXIudG9TdHJpbmcoKTsKKwl9CisKK30gLy8gUmVsYXRpdmVQaHlzaWNhbFJlbGF0aW9uc2hpcExhYmVsSW1wbApkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL2xhYmVscy9pbXBsL1JlbGF0aXZlUGh5c2ljYWxSZWxhdGlvbnNoaXBMYWJlbFZhbHVlSW1wbC5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL2xhYmVscy9pbXBsL1JlbGF0aXZlUGh5c2ljYWxSZWxhdGlvbnNoaXBMYWJlbFZhbHVlSW1wbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFhNzcwOWMKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvbGFiZWxzL2ltcGwvUmVsYXRpdmVQaHlzaWNhbFJlbGF0aW9uc2hpcExhYmVsVmFsdWVJbXBsLmphdmEKQEAgLTAsMCArMSwyMjYgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuaW1wbDsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzczsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuaW1wbC5FTm90aWZpY2F0aW9uSW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguaW1wbC5MYWJlbFZhbHVlSW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5MYWJlbHNQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLlJlbGF0aXZlUGh5c2ljYWxSZWxhdGlvbnNoaXA7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuUmVsYXRpdmVQaHlzaWNhbFJlbGF0aW9uc2hpcExhYmVsVmFsdWU7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPlJlbGF0aXZlIFBoeXNpY2FsIFJlbGF0aW9uc2hpcCBMYWJlbCBWYWx1ZTwvYj48L2VtPicuCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIDxwPgorICogVGhlIGZvbGxvd2luZyBmZWF0dXJlcyBhcmUgaW1wbGVtZW50ZWQ6CisgKiA8dWw+CisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuaW1wbC5SZWxhdGl2ZVBoeXNpY2FsUmVsYXRpb25zaGlwTGFiZWxWYWx1ZUltcGwjaXNBZGphY2VudCA8ZW0+QWRqYWNlbnQ8L2VtPn08L2xpPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLmltcGwuUmVsYXRpdmVQaHlzaWNhbFJlbGF0aW9uc2hpcExhYmVsVmFsdWVJbXBsI2dldFJlbGF0aW9uc2hpcCA8ZW0+UmVsYXRpb25zaGlwPC9lbT59PC9saT4KKyAqIDwvdWw+CisgKiA8L3A+CisgKgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgUmVsYXRpdmVQaHlzaWNhbFJlbGF0aW9uc2hpcExhYmVsVmFsdWVJbXBsIGV4dGVuZHMgTGFiZWxWYWx1ZUltcGwKKwkJaW1wbGVtZW50cyBSZWxhdGl2ZVBoeXNpY2FsUmVsYXRpb25zaGlwTGFiZWxWYWx1ZSB7CisJLyoqCisJICogVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2lzQWRqYWNlbnQoKSA8ZW0+QWRqYWNlbnQ8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNpc0FkamFjZW50KCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIGJvb2xlYW4gQURKQUNFTlRfRURFRkFVTFQgPSBmYWxzZTsKKworCS8qKgorCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2lzQWRqYWNlbnQoKSA8ZW0+QWRqYWNlbnQ8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNpc0FkamFjZW50KCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgYm9vbGVhbiBhZGphY2VudCA9IEFESkFDRU5UX0VERUZBVUxUOworCisJLyoqCisJICogVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldFJlbGF0aW9uc2hpcCgpIDxlbT5SZWxhdGlvbnNoaXA8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNnZXRSZWxhdGlvbnNoaXAoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgUmVsYXRpdmVQaHlzaWNhbFJlbGF0aW9uc2hpcCBSRUxBVElPTlNISVBfRURFRkFVTFQgPSBSZWxhdGl2ZVBoeXNpY2FsUmVsYXRpb25zaGlwLlVOU1BFQ0lGSUVEX0xJVEVSQUw7CisKKwkvKioKKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRSZWxhdGlvbnNoaXAoKSA8ZW0+UmVsYXRpb25zaGlwPC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZ2V0UmVsYXRpb25zaGlwKCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgUmVsYXRpdmVQaHlzaWNhbFJlbGF0aW9uc2hpcCByZWxhdGlvbnNoaXAgPSBSRUxBVElPTlNISVBfRURFRkFVTFQ7CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIFJlbGF0aXZlUGh5c2ljYWxSZWxhdGlvbnNoaXBMYWJlbFZhbHVlSW1wbCgpIHsKKwkJc3VwZXIoKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIEVDbGFzcyBlU3RhdGljQ2xhc3MoKSB7CisJCXJldHVybiBMYWJlbHNQYWNrYWdlLkxpdGVyYWxzLlJFTEFUSVZFX1BIWVNJQ0FMX1JFTEFUSU9OU0hJUF9MQUJFTF9WQUxVRTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIGJvb2xlYW4gaXNBZGphY2VudCgpIHsKKwkJcmV0dXJuIGFkamFjZW50OworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRBZGphY2VudChib29sZWFuIG5ld0FkamFjZW50KSB7CisJCWJvb2xlYW4gb2xkQWRqYWNlbnQgPSBhZGphY2VudDsKKwkJYWRqYWNlbnQgPSBuZXdBZGphY2VudDsKKwkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQorCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgTGFiZWxzUGFja2FnZS5SRUxBVElWRV9QSFlTSUNBTF9SRUxBVElPTlNISVBfTEFCRUxfVkFMVUVfX0FESkFDRU5ULCBvbGRBZGphY2VudCwgYWRqYWNlbnQpKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFJlbGF0aXZlUGh5c2ljYWxSZWxhdGlvbnNoaXAgZ2V0UmVsYXRpb25zaGlwKCkgeworCQlyZXR1cm4gcmVsYXRpb25zaGlwOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRSZWxhdGlvbnNoaXAoUmVsYXRpdmVQaHlzaWNhbFJlbGF0aW9uc2hpcCBuZXdSZWxhdGlvbnNoaXApIHsKKwkJUmVsYXRpdmVQaHlzaWNhbFJlbGF0aW9uc2hpcCBvbGRSZWxhdGlvbnNoaXAgPSByZWxhdGlvbnNoaXA7CisJCXJlbGF0aW9uc2hpcCA9IG5ld1JlbGF0aW9uc2hpcCA9PSBudWxsID8gUkVMQVRJT05TSElQX0VERUZBVUxUIDogbmV3UmVsYXRpb25zaGlwOworCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpCisJCQllTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBMYWJlbHNQYWNrYWdlLlJFTEFUSVZFX1BIWVNJQ0FMX1JFTEFUSU9OU0hJUF9MQUJFTF9WQUxVRV9fUkVMQVRJT05TSElQLCBvbGRSZWxhdGlvbnNoaXAsIHJlbGF0aW9uc2hpcCkpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgT2JqZWN0IGVHZXQoaW50IGZlYXR1cmVJRCwgYm9vbGVhbiByZXNvbHZlLCBib29sZWFuIGNvcmVUeXBlKSB7CisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7CisJCQljYXNlIExhYmVsc1BhY2thZ2UuUkVMQVRJVkVfUEhZU0lDQUxfUkVMQVRJT05TSElQX0xBQkVMX1ZBTFVFX19BREpBQ0VOVDoKKwkJCQlyZXR1cm4gaXNBZGphY2VudCgpOworCQkJY2FzZSBMYWJlbHNQYWNrYWdlLlJFTEFUSVZFX1BIWVNJQ0FMX1JFTEFUSU9OU0hJUF9MQUJFTF9WQUxVRV9fUkVMQVRJT05TSElQOgorCQkJCXJldHVybiBnZXRSZWxhdGlvbnNoaXAoKTsKKwkJfQorCQlyZXR1cm4gc3VwZXIuZUdldChmZWF0dXJlSUQsIHJlc29sdmUsIGNvcmVUeXBlKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgZVNldChpbnQgZmVhdHVyZUlELCBPYmplY3QgbmV3VmFsdWUpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJCWNhc2UgTGFiZWxzUGFja2FnZS5SRUxBVElWRV9QSFlTSUNBTF9SRUxBVElPTlNISVBfTEFCRUxfVkFMVUVfX0FESkFDRU5UOgorCQkJCXNldEFkamFjZW50KChCb29sZWFuKW5ld1ZhbHVlKTsKKwkJCQlyZXR1cm47CisJCQljYXNlIExhYmVsc1BhY2thZ2UuUkVMQVRJVkVfUEhZU0lDQUxfUkVMQVRJT05TSElQX0xBQkVMX1ZBTFVFX19SRUxBVElPTlNISVA6CisJCQkJc2V0UmVsYXRpb25zaGlwKChSZWxhdGl2ZVBoeXNpY2FsUmVsYXRpb25zaGlwKW5ld1ZhbHVlKTsKKwkJCQlyZXR1cm47CisJCX0KKwkJc3VwZXIuZVNldChmZWF0dXJlSUQsIG5ld1ZhbHVlKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgZVVuc2V0KGludCBmZWF0dXJlSUQpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJCWNhc2UgTGFiZWxzUGFja2FnZS5SRUxBVElWRV9QSFlTSUNBTF9SRUxBVElPTlNISVBfTEFCRUxfVkFMVUVfX0FESkFDRU5UOgorCQkJCXNldEFkamFjZW50KEFESkFDRU5UX0VERUZBVUxUKTsKKwkJCQlyZXR1cm47CisJCQljYXNlIExhYmVsc1BhY2thZ2UuUkVMQVRJVkVfUEhZU0lDQUxfUkVMQVRJT05TSElQX0xBQkVMX1ZBTFVFX19SRUxBVElPTlNISVA6CisJCQkJc2V0UmVsYXRpb25zaGlwKFJFTEFUSU9OU0hJUF9FREVGQVVMVCk7CisJCQkJcmV0dXJuOworCQl9CisJCXN1cGVyLmVVbnNldChmZWF0dXJlSUQpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgYm9vbGVhbiBlSXNTZXQoaW50IGZlYXR1cmVJRCkgeworCQlzd2l0Y2ggKGZlYXR1cmVJRCkgeworCQkJY2FzZSBMYWJlbHNQYWNrYWdlLlJFTEFUSVZFX1BIWVNJQ0FMX1JFTEFUSU9OU0hJUF9MQUJFTF9WQUxVRV9fQURKQUNFTlQ6CisJCQkJcmV0dXJuIGFkamFjZW50ICE9IEFESkFDRU5UX0VERUZBVUxUOworCQkJY2FzZSBMYWJlbHNQYWNrYWdlLlJFTEFUSVZFX1BIWVNJQ0FMX1JFTEFUSU9OU0hJUF9MQUJFTF9WQUxVRV9fUkVMQVRJT05TSElQOgorCQkJCXJldHVybiByZWxhdGlvbnNoaXAgIT0gUkVMQVRJT05TSElQX0VERUZBVUxUOworCQl9CisJCXJldHVybiBzdXBlci5lSXNTZXQoZmVhdHVyZUlEKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKSB7CisJCWlmIChlSXNQcm94eSgpKQorCQkJcmV0dXJuIHN1cGVyLnRvU3RyaW5nKCk7CisKKwkJU3RyaW5nQnVmZmVyIHJlc3VsdCA9IG5ldyBTdHJpbmdCdWZmZXIoIiIpOworCQlyZXN1bHQuYXBwZW5kKCJhZGphY2VudDogIik7CisJCXJlc3VsdC5hcHBlbmQoaXNBZGphY2VudCgpKTsKKwkJcmVzdWx0LmFwcGVuZCgiLCByZWxhdGlvbnNoaXA6ICIpOworCQlyZXN1bHQuYXBwZW5kKGdldFJlbGF0aW9uc2hpcCgpKTsKKwkJcmV0dXJuIHJlc3VsdC50b1N0cmluZygpOworCX0gLy8gdG9TdHJpbmcKKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmltcGwuTGFiZWxWYWx1ZUltcGwjcmVzZXQoKQorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIHJlc2V0KCkgeworCQkvLyBOb3RoaW5nIHRvIHJlc2V0LgorCX0KKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5TYW5pdHlDaGVja2VyI3NhbmUoKQorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBib29sZWFuIHNhbmUoKSB7CisJCXJldHVybiB0cnVlOworCX0KKworfSAvLyBSZWxhdGl2ZVBoeXNpY2FsUmVsYXRpb25zaGlwTGFiZWxWYWx1ZUltcGwKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy9sYWJlbHMvaW1wbC9Sb2FkVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxJbXBsLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvbGFiZWxzL2ltcGwvUm9hZFRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsSW1wbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA3MDE4MTIKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvbGFiZWxzL2ltcGwvUm9hZFRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsSW1wbC5qYXZhCkBAIC0wLDAgKzEsMTIxIEBACisKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuaW1wbDsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OworaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkVkZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkVkZ2VMYWJlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguTm9kZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguaW1wbC5FZGdlSW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5MYWJlbHNGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLkxhYmVsc1BhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuUm9hZFRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLlJvYWRUcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbFZhbHVlOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiBBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+Um9hZCBUcmFuc3BvcnQgUmVsYXRpb25zaGlwIExhYmVsPC9iPjwvZW0+Jy4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogPHA+CisgKiA8L3A+CisgKgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgUm9hZFRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsSW1wbCBleHRlbmRzIFBoeXNpY2FsUmVsYXRpb25zaGlwTGFiZWxJbXBsIGltcGxlbWVudHMgUm9hZFRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsIHsKKwkKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJcHJvdGVjdGVkIFJvYWRUcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbEltcGwoKSB7CisJCXN1cGVyKCk7CisJCXNldEN1cnJlbnRWYWx1ZShMYWJlbHNGYWN0b3J5LmVJTlNUQU5DRQorCQkJCS5jcmVhdGVSb2FkVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxWYWx1ZSgpKTsKKwl9CisJCisJLyoqCisJICogQ3JlYXRlIGFuIGVkZ2UgYmV0d2VlbiB0d28gbm9kZXMgdGhhdCByZXByZXNlbnRzIHRoZSByZWxhdGlvbnNoaXAgb2YKKwkgKiBzaGFyaW5nIGEgY29tbW9uIGJvcmRlci4KKwkgKiAKKwkgKiBAcGFyYW0gbm9kZUEKKwkgKiAgICAgICAgICAgIHRoZSBmaXJzdCBub2RlCisJICogQHBhcmFtIG5vZGVCCisJICogICAgICAgICAgICB0aGUgc2Vjb25kIG5vZGUKKwkgKiBAcGFyYW0gcm9hZE5hbWUKKwkgKiAgICAgICAgICAgIHRoZSBuYW1lIG9mIHRoZSByb2Fkd2F5CisJICogQHBhcmFtIHJvYWRDbGFzcyAgICAgICAgICAgCisJICogICAgICAgICAgICB0aGUgY2xhc3Mgb2Ygcm9hZCAoSW50ZXJzdGF0ZSwgcm91dGUsIGV0YykKKwkgKiBAcGFyYW0gbnVtQ3Jvc3NpbmdzCisJICogICAgICAgICAgICB0aGUgbnVtYmVyIG9mIHRpbWVzIHRoZSByb2FkIGNyb3NzZXMgYmV0d2VlbiBub2RlQSBhbmQgbm9kZUIKKwkgKiBAcmV0dXJuIGFuIGVkZ2UgYmV0d2VlbiB0aGUgdHdvIG5vZGVzCisJICovCisJcHVibGljIHN0YXRpYyBFZGdlIGNyZWF0ZVJvYWRUcmFuc3BvcnRSZWxhdGlvbnNoaXAoZmluYWwgTm9kZSBub2RlQSwKKwkJCWZpbmFsIE5vZGUgbm9kZUIsIGZpbmFsIFN0cmluZyByb2FkTmFtZSwgZmluYWwgU3RyaW5nIHJvYWRDbGFzcywgZmluYWwgaW50IG51bUNyb3NzaW5ncykgeworCQlmaW5hbCBFZGdlIHJldFZhbHVlID0gRWRnZUltcGwuY3JlYXRlRWRnZShub2RlQSwgbm9kZUIpOworCQlmaW5hbCBSb2FkVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWwgbGFiZWwgPSBMYWJlbHNGYWN0b3J5LmVJTlNUQU5DRQorCQkJCS5jcmVhdGVSb2FkVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWwoKTsKKwkJbGFiZWwuc2V0VVJJT2ZJZGVudGlmaWFibGVUb0JlTGFiZWxlZChyZXRWYWx1ZS5nZXRVUkkoKSk7CisKKwkJZmluYWwgUm9hZFRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsVmFsdWUgbGFiZWxWYWx1ZSA9IChSb2FkVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxWYWx1ZSkgbGFiZWwKKwkJCQkuZ2V0Q3VycmVudFZhbHVlKCk7CisJCWxhYmVsVmFsdWUuc2V0Um9hZE5hbWUocm9hZE5hbWUpOworCQlsYWJlbFZhbHVlLnNldFJvYWRDbGFzcyhyb2FkQ2xhc3MpOworCQlsYWJlbFZhbHVlLnNldE51bWJlckNyb3NzaW5ncyhudW1Dcm9zc2luZ3MpOworCQlyZXRWYWx1ZS5zZXRMYWJlbChsYWJlbCk7CisKKwkJcmV0dXJuIHJldFZhbHVlOworCX0gLy8gY3JlYXRlQ29tbW9uQm9yZGVyUmVsYXRpb25zaGlwCisJCisJCisJLyoqCisJICogQHBhcmFtIG5vZGUKKwkgKiAgICAgICAgICAgIHRoZSBub2RlCisJICogQHJldHVybiB0aGUgRWRnZXMgdGhhdCByZXByZXNlbnQgdGhlIGNvbW1vbiBib3JkZXIgcmVsYXRpb25zaGlwIGJldHdlZW4KKwkgKiAgICAgICAgIHRoZSBub2RlIGFuZCBvdGhlciBub2Rlcy4KKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCXB1YmxpYyBzdGF0aWMgTGlzdDxFZGdlPiBnZXRSb2FkRWRnZXNGcm9tTm9kZShmaW5hbCBOb2RlIG5vZGUpIHsKKwkJZmluYWwgTGlzdDxFZGdlPiByZXRWYWx1ZSA9IG5ldyBBcnJheUxpc3Q8RWRnZT4oKTsKKworCQlpZihub2RlID09IG51bGwgfHwgbm9kZS5nZXRFZGdlcygpID09IG51bGwpIHJldHVybiByZXRWYWx1ZTsKKwkJCisJCWZvciAoSXRlcmF0b3I8RWRnZT4gZWRnZUl0ZXIgPSBub2RlLmdldEVkZ2VzKCkuaXRlcmF0b3IoKTsgZWRnZUl0ZXIuaGFzTmV4dCgpOykgeworCQkJZmluYWwgRWRnZSBlZGdlID0gZWRnZUl0ZXIubmV4dCgpOworCQkJZmluYWwgRWRnZUxhYmVsIGVkZ2VMYWJlbCA9IGVkZ2UuZ2V0TGFiZWwoKTsKKwkJCS8vIElzIHRoZSBsYWJlbCBhIGNvbW1vbiBib3JkZXIgbGFiZWw/CisJCQlpZiAoZWRnZUxhYmVsIGluc3RhbmNlb2YgUm9hZFRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsKSB7CisJCQkJLy8gWWVzCisJCQkJcmV0VmFsdWUuYWRkKGVkZ2UpOworCQkJfQorCQl9IC8vIGZvcgorCisJCXJldHVybiByZXRWYWx1ZTsKKwl9IC8vIGdldENvbW1vbkJvcmRlckVkZ2VzRnJvbU5vZGUKKwkKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCBFQ2xhc3MgZVN0YXRpY0NsYXNzKCkgeworCQlyZXR1cm4gTGFiZWxzUGFja2FnZS5MaXRlcmFscy5ST0FEX1RSQU5TUE9SVF9SRUxBVElPTlNISVBfTEFCRUw7CisJfQorCit9IC8vUm9hZFRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsSW1wbApkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL2xhYmVscy9pbXBsL1JvYWRUcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbFZhbHVlSW1wbC5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL2xhYmVscy9pbXBsL1JvYWRUcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbFZhbHVlSW1wbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFjYmEwNjYKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvbGFiZWxzL2ltcGwvUm9hZFRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsVmFsdWVJbXBsLmphdmEKQEAgLTAsMCArMSwyNzcgQEAKKworcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5pbXBsOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5pbXBsLkVOb3RpZmljYXRpb25JbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLkxhYmVsc1BhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuUm9hZFRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsVmFsdWU7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIEFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5Sb2FkIFRyYW5zcG9ydCBSZWxhdGlvbnNoaXAgTGFiZWwgVmFsdWU8L2I+PC9lbT4nLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiA8cD4KKyAqIFRoZSBmb2xsb3dpbmcgZmVhdHVyZXMgYXJlIGltcGxlbWVudGVkOgorICogPHVsPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLmltcGwuUm9hZFRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsVmFsdWVJbXBsI2dldFJvYWROYW1lIDxlbT5Sb2FkIE5hbWU8L2VtPn08L2xpPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLmltcGwuUm9hZFRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsVmFsdWVJbXBsI2dldFJvYWRDbGFzcyA8ZW0+Um9hZCBDbGFzczwvZW0+fTwvbGk+CisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuaW1wbC5Sb2FkVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxWYWx1ZUltcGwjZ2V0TnVtYmVyQ3Jvc3NpbmdzIDxlbT5OdW1iZXIgQ3Jvc3NpbmdzPC9lbT59PC9saT4KKyAqIDwvdWw+CisgKiA8L3A+CisgKgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgUm9hZFRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsVmFsdWVJbXBsIGV4dGVuZHMgUGh5c2ljYWxSZWxhdGlvbnNoaXBMYWJlbFZhbHVlSW1wbCBpbXBsZW1lbnRzIFJvYWRUcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbFZhbHVlIHsKKwkvKioKKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0Um9hZE5hbWUoKSA8ZW0+Um9hZCBOYW1lPC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNnZXRSb2FkTmFtZSgpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBTdHJpbmcgUk9BRF9OQU1FX0VERUZBVUxUID0gInJvYWQiOworCisJLyoqCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0Um9hZE5hbWUoKSA8ZW0+Um9hZCBOYW1lPC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNnZXRSb2FkTmFtZSgpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIFN0cmluZyByb2FkTmFtZSA9IFJPQURfTkFNRV9FREVGQVVMVDsKKworCS8qKgorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRSb2FkQ2xhc3MoKSA8ZW0+Um9hZCBDbGFzczwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZ2V0Um9hZENsYXNzKCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIFN0cmluZyBST0FEX0NMQVNTX0VERUZBVUxUID0gInJvdXRlIjsKKworCS8qKgorCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldFJvYWRDbGFzcygpIDxlbT5Sb2FkIENsYXNzPC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNnZXRSb2FkQ2xhc3MoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBTdHJpbmcgcm9hZENsYXNzID0gUk9BRF9DTEFTU19FREVGQVVMVDsKKworCS8qKgorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXROdW1iZXJDcm9zc2luZ3MoKSA8ZW0+TnVtYmVyIENyb3NzaW5nczwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZ2V0TnVtYmVyQ3Jvc3NpbmdzKCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIGludCBOVU1CRVJfQ1JPU1NJTkdTX0VERUZBVUxUID0gMTsKKworCS8qKgorCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldE51bWJlckNyb3NzaW5ncygpIDxlbT5OdW1iZXIgQ3Jvc3NpbmdzPC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNnZXROdW1iZXJDcm9zc2luZ3MoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBpbnQgbnVtYmVyQ3Jvc3NpbmdzID0gTlVNQkVSX0NST1NTSU5HU19FREVGQVVMVDsKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBSb2FkVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxWYWx1ZUltcGwoKSB7CisJCXN1cGVyKCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIEVDbGFzcyBlU3RhdGljQ2xhc3MoKSB7CisJCXJldHVybiBMYWJlbHNQYWNrYWdlLkxpdGVyYWxzLlJPQURfVFJBTlNQT1JUX1JFTEFUSU9OU0hJUF9MQUJFTF9WQUxVRTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgU3RyaW5nIGdldFJvYWROYW1lKCkgeworCQlyZXR1cm4gcm9hZE5hbWU7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgc2V0Um9hZE5hbWUoU3RyaW5nIG5ld1JvYWROYW1lKSB7CisJCVN0cmluZyBvbGRSb2FkTmFtZSA9IHJvYWROYW1lOworCQlyb2FkTmFtZSA9IG5ld1JvYWROYW1lOworCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpCisJCQllTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBMYWJlbHNQYWNrYWdlLlJPQURfVFJBTlNQT1JUX1JFTEFUSU9OU0hJUF9MQUJFTF9WQUxVRV9fUk9BRF9OQU1FLCBvbGRSb2FkTmFtZSwgcm9hZE5hbWUpKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgU3RyaW5nIGdldFJvYWRDbGFzcygpIHsKKwkJcmV0dXJuIHJvYWRDbGFzczsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRSb2FkQ2xhc3MoU3RyaW5nIG5ld1JvYWRDbGFzcykgeworCQlTdHJpbmcgb2xkUm9hZENsYXNzID0gcm9hZENsYXNzOworCQlyb2FkQ2xhc3MgPSBuZXdSb2FkQ2xhc3M7CisJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkKKwkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIExhYmVsc1BhY2thZ2UuUk9BRF9UUkFOU1BPUlRfUkVMQVRJT05TSElQX0xBQkVMX1ZBTFVFX19ST0FEX0NMQVNTLCBvbGRSb2FkQ2xhc3MsIHJvYWRDbGFzcykpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBpbnQgZ2V0TnVtYmVyQ3Jvc3NpbmdzKCkgeworCQlyZXR1cm4gbnVtYmVyQ3Jvc3NpbmdzOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIHNldE51bWJlckNyb3NzaW5ncyhpbnQgbmV3TnVtYmVyQ3Jvc3NpbmdzKSB7CisJCWludCBvbGROdW1iZXJDcm9zc2luZ3MgPSBudW1iZXJDcm9zc2luZ3M7CisJCW51bWJlckNyb3NzaW5ncyA9IG5ld051bWJlckNyb3NzaW5nczsKKwkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQorCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgTGFiZWxzUGFja2FnZS5ST0FEX1RSQU5TUE9SVF9SRUxBVElPTlNISVBfTEFCRUxfVkFMVUVfX05VTUJFUl9DUk9TU0lOR1MsIG9sZE51bWJlckNyb3NzaW5ncywgbnVtYmVyQ3Jvc3NpbmdzKSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIE9iamVjdCBlR2V0KGludCBmZWF0dXJlSUQsIGJvb2xlYW4gcmVzb2x2ZSwgYm9vbGVhbiBjb3JlVHlwZSkgeworCQlzd2l0Y2ggKGZlYXR1cmVJRCkgeworCQkJY2FzZSBMYWJlbHNQYWNrYWdlLlJPQURfVFJBTlNQT1JUX1JFTEFUSU9OU0hJUF9MQUJFTF9WQUxVRV9fUk9BRF9OQU1FOgorCQkJCXJldHVybiBnZXRSb2FkTmFtZSgpOworCQkJY2FzZSBMYWJlbHNQYWNrYWdlLlJPQURfVFJBTlNQT1JUX1JFTEFUSU9OU0hJUF9MQUJFTF9WQUxVRV9fUk9BRF9DTEFTUzoKKwkJCQlyZXR1cm4gZ2V0Um9hZENsYXNzKCk7CisJCQljYXNlIExhYmVsc1BhY2thZ2UuUk9BRF9UUkFOU1BPUlRfUkVMQVRJT05TSElQX0xBQkVMX1ZBTFVFX19OVU1CRVJfQ1JPU1NJTkdTOgorCQkJCXJldHVybiBnZXROdW1iZXJDcm9zc2luZ3MoKTsKKwkJfQorCQlyZXR1cm4gc3VwZXIuZUdldChmZWF0dXJlSUQsIHJlc29sdmUsIGNvcmVUeXBlKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBlU2V0KGludCBmZWF0dXJlSUQsIE9iamVjdCBuZXdWYWx1ZSkgeworCQlzd2l0Y2ggKGZlYXR1cmVJRCkgeworCQkJY2FzZSBMYWJlbHNQYWNrYWdlLlJPQURfVFJBTlNQT1JUX1JFTEFUSU9OU0hJUF9MQUJFTF9WQUxVRV9fUk9BRF9OQU1FOgorCQkJCXNldFJvYWROYW1lKChTdHJpbmcpbmV3VmFsdWUpOworCQkJCXJldHVybjsKKwkJCWNhc2UgTGFiZWxzUGFja2FnZS5ST0FEX1RSQU5TUE9SVF9SRUxBVElPTlNISVBfTEFCRUxfVkFMVUVfX1JPQURfQ0xBU1M6CisJCQkJc2V0Um9hZENsYXNzKChTdHJpbmcpbmV3VmFsdWUpOworCQkJCXJldHVybjsKKwkJCWNhc2UgTGFiZWxzUGFja2FnZS5ST0FEX1RSQU5TUE9SVF9SRUxBVElPTlNISVBfTEFCRUxfVkFMVUVfX05VTUJFUl9DUk9TU0lOR1M6CisJCQkJc2V0TnVtYmVyQ3Jvc3NpbmdzKChJbnRlZ2VyKW5ld1ZhbHVlKTsKKwkJCQlyZXR1cm47CisJCX0KKwkJc3VwZXIuZVNldChmZWF0dXJlSUQsIG5ld1ZhbHVlKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBlVW5zZXQoaW50IGZlYXR1cmVJRCkgeworCQlzd2l0Y2ggKGZlYXR1cmVJRCkgeworCQkJY2FzZSBMYWJlbHNQYWNrYWdlLlJPQURfVFJBTlNQT1JUX1JFTEFUSU9OU0hJUF9MQUJFTF9WQUxVRV9fUk9BRF9OQU1FOgorCQkJCXNldFJvYWROYW1lKFJPQURfTkFNRV9FREVGQVVMVCk7CisJCQkJcmV0dXJuOworCQkJY2FzZSBMYWJlbHNQYWNrYWdlLlJPQURfVFJBTlNQT1JUX1JFTEFUSU9OU0hJUF9MQUJFTF9WQUxVRV9fUk9BRF9DTEFTUzoKKwkJCQlzZXRSb2FkQ2xhc3MoUk9BRF9DTEFTU19FREVGQVVMVCk7CisJCQkJcmV0dXJuOworCQkJY2FzZSBMYWJlbHNQYWNrYWdlLlJPQURfVFJBTlNQT1JUX1JFTEFUSU9OU0hJUF9MQUJFTF9WQUxVRV9fTlVNQkVSX0NST1NTSU5HUzoKKwkJCQlzZXROdW1iZXJDcm9zc2luZ3MoTlVNQkVSX0NST1NTSU5HU19FREVGQVVMVCk7CisJCQkJcmV0dXJuOworCQl9CisJCXN1cGVyLmVVbnNldChmZWF0dXJlSUQpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBib29sZWFuIGVJc1NldChpbnQgZmVhdHVyZUlEKSB7CisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7CisJCQljYXNlIExhYmVsc1BhY2thZ2UuUk9BRF9UUkFOU1BPUlRfUkVMQVRJT05TSElQX0xBQkVMX1ZBTFVFX19ST0FEX05BTUU6CisJCQkJcmV0dXJuIFJPQURfTkFNRV9FREVGQVVMVCA9PSBudWxsID8gcm9hZE5hbWUgIT0gbnVsbCA6ICFST0FEX05BTUVfRURFRkFVTFQuZXF1YWxzKHJvYWROYW1lKTsKKwkJCWNhc2UgTGFiZWxzUGFja2FnZS5ST0FEX1RSQU5TUE9SVF9SRUxBVElPTlNISVBfTEFCRUxfVkFMVUVfX1JPQURfQ0xBU1M6CisJCQkJcmV0dXJuIFJPQURfQ0xBU1NfRURFRkFVTFQgPT0gbnVsbCA/IHJvYWRDbGFzcyAhPSBudWxsIDogIVJPQURfQ0xBU1NfRURFRkFVTFQuZXF1YWxzKHJvYWRDbGFzcyk7CisJCQljYXNlIExhYmVsc1BhY2thZ2UuUk9BRF9UUkFOU1BPUlRfUkVMQVRJT05TSElQX0xBQkVMX1ZBTFVFX19OVU1CRVJfQ1JPU1NJTkdTOgorCQkJCXJldHVybiBudW1iZXJDcm9zc2luZ3MgIT0gTlVNQkVSX0NST1NTSU5HU19FREVGQVVMVDsKKwkJfQorCQlyZXR1cm4gc3VwZXIuZUlzU2V0KGZlYXR1cmVJRCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIFN0cmluZyB0b1N0cmluZygpIHsKKwkJaWYgKGVJc1Byb3h5KCkpIHJldHVybiBzdXBlci50b1N0cmluZygpOworCisJCVN0cmluZ0J1ZmZlciByZXN1bHQgPSBuZXcgU3RyaW5nQnVmZmVyKHN1cGVyLnRvU3RyaW5nKCkpOworCQlyZXN1bHQuYXBwZW5kKCIgKHJvYWROYW1lOiAiKTsgLy8kTk9OLU5MUy0xJAorCQlyZXN1bHQuYXBwZW5kKHJvYWROYW1lKTsKKwkJcmVzdWx0LmFwcGVuZCgiLCByb2FkQ2xhc3M6ICIpOyAvLyROT04tTkxTLTEkCisJCXJlc3VsdC5hcHBlbmQocm9hZENsYXNzKTsKKwkJcmVzdWx0LmFwcGVuZCgiLCBudW1iZXJDcm9zc2luZ3M6ICIpOyAvLyROT04tTkxTLTEkCisJCXJlc3VsdC5hcHBlbmQobnVtYmVyQ3Jvc3NpbmdzKTsKKwkJcmVzdWx0LmFwcGVuZCgnKScpOworCQlyZXR1cm4gcmVzdWx0LnRvU3RyaW5nKCk7CisJfQorCit9IC8vUm9hZFRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsVmFsdWVJbXBsCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvbGFiZWxzL2ltcGwvVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxJbXBsLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvbGFiZWxzL2ltcGwvVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxJbXBsLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2NhOTE0OAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy9sYWJlbHMvaW1wbC9UcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbEltcGwuamF2YQpAQCAtMCwwICsxLDg4OSBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5pbXBsOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7CitpbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOworaW1wb3J0IGphdmEudXRpbC5MaXN0OworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5CYXNpY0VMaXN0OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5FTGlzdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5pbXBsLkVOb3RpZmljYXRpb25JbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5FZGdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5MYWJlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguTm9kZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguaW1wbC5EeW5hbWljRWRnZUxhYmVsSW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguaW1wbC5FZGdlSW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuRWRnZURlY29yYXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuU1RFTVRpbWU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuTGFiZWxzRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5MYWJlbHNQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLlRyYW5zcG9ydE1vZGU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxWYWx1ZTsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiBBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICcKKyAqIDxlbT48Yj5UcmFuc3BvcnQgUmVsYXRpb25zaGlwIExhYmVsPC9iPjwvZW0+Jy4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiA8cD4KKyAqIFRoZSBmb2xsb3dpbmcgZmVhdHVyZXMgYXJlIGltcGxlbWVudGVkOgorICogPHVsPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLmltcGwuVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxJbXBsI2dldFRyYW5zcG9ydE1vZGUgPGVtPlRyYW5zcG9ydCBNb2RlPC9lbT59PC9saT4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5pbXBsLlRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsSW1wbCNnZXRQb3B1bGF0aW9uSWRlbnRpZmllciA8ZW0+UG9wdWxhdGlvbiBJZGVudGlmaWVyPC9lbT59PC9saT4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5pbXBsLlRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsSW1wbCNnZXRUcmFuc3BvcnRJZGVudGlmaWVyIDxlbT5UcmFuc3BvcnQgSWRlbnRpZmllcjwvZW0+fTwvbGk+CisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuaW1wbC5UcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbEltcGwjZ2V0Q3VycmVudFRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsVmFsdWUgPGVtPkN1cnJlbnQgVHJhbnNwb3J0IFJlbGF0aW9uc2hpcCBMYWJlbCBWYWx1ZTwvZW0+fTwvbGk+CisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuaW1wbC5UcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbEltcGwjZ2V0UmF0ZVRpbWVQZXJpb2QgPGVtPlJhdGUgVGltZSBQZXJpb2Q8L2VtPn08L2xpPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLmltcGwuVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxJbXBsI2dldERlcGFydHVyZUNhcGFjaXR5IDxlbT5EZXBhcnR1cmUgQ2FwYWNpdHk8L2VtPn08L2xpPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLmltcGwuVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxJbXBsI2dldE1heGltdW1EZXBhcnR1cmVDYXBhY2l0eSA8ZW0+TWF4aW11bSBEZXBhcnR1cmUgQ2FwYWNpdHk8L2VtPn08L2xpPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLmltcGwuVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxJbXBsI2dldENhcGFjaXR5IDxlbT5DYXBhY2l0eTwvZW0+fTwvbGk+CisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuaW1wbC5UcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbEltcGwjZ2V0TWF4aW11bUNhcGFjaXR5IDxlbT5NYXhpbXVtIENhcGFjaXR5PC9lbT59PC9saT4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5pbXBsLlRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsSW1wbCNnZXRUcmFuc2l0VGltZSA8ZW0+VHJhbnNpdCBUaW1lPC9lbT59PC9saT4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5pbXBsLlRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsSW1wbCNnZXRTdGFydFVwRGVsYXkgPGVtPlN0YXJ0IFVwIERlbGF5PC9lbT59PC9saT4KKyAqIDwvdWw+CisgKiA8L3A+CisgKgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxJbXBsIGV4dGVuZHMgRHluYW1pY0VkZ2VMYWJlbEltcGwKKwkJaW1wbGVtZW50cyBUcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbCB7CisJLyoqCisJICogVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldFRyYW5zcG9ydE1vZGUoKSA8ZW0+VHJhbnNwb3J0IE1vZGU8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tCisJICogZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI2dldFRyYW5zcG9ydE1vZGUoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgVHJhbnNwb3J0TW9kZSBUUkFOU1BPUlRfTU9ERV9FREVGQVVMVCA9IFRyYW5zcG9ydE1vZGUuVU5TUEVDSUZJRURfTElURVJBTDsKKworCS8qKgorCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldFRyYW5zcG9ydE1vZGUoKSA8ZW0+VHJhbnNwb3J0IE1vZGU8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tCisJICogZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI2dldFRyYW5zcG9ydE1vZGUoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBUcmFuc3BvcnRNb2RlIHRyYW5zcG9ydE1vZGUgPSBUUkFOU1BPUlRfTU9ERV9FREVGQVVMVDsKKworCS8qKgorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRQb3B1bGF0aW9uSWRlbnRpZmllcigpIDxlbT5Qb3B1bGF0aW9uIElkZW50aWZpZXI8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tCisJICogZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI2dldFBvcHVsYXRpb25JZGVudGlmaWVyKCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIFN0cmluZyBQT1BVTEFUSU9OX0lERU5USUZJRVJfRURFRkFVTFQgPSBudWxsOworCisJLyoqCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0UG9wdWxhdGlvbklkZW50aWZpZXIoKSA8ZW0+UG9wdWxhdGlvbiBJZGVudGlmaWVyPC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLQorCSAqIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNnZXRQb3B1bGF0aW9uSWRlbnRpZmllcigpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIFN0cmluZyBwb3B1bGF0aW9uSWRlbnRpZmllciA9IFBPUFVMQVRJT05fSURFTlRJRklFUl9FREVGQVVMVDsKKworCS8qKgorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRUcmFuc3BvcnRJZGVudGlmaWVyKCkgPGVtPlRyYW5zcG9ydCBJZGVudGlmaWVyPC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLQorCSAqIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNnZXRUcmFuc3BvcnRJZGVudGlmaWVyKCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIFN0cmluZyBUUkFOU1BPUlRfSURFTlRJRklFUl9FREVGQVVMVCA9IG51bGw7CisKKwkvKioKKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRUcmFuc3BvcnRJZGVudGlmaWVyKCkgPGVtPlRyYW5zcG9ydCBJZGVudGlmaWVyPC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLQorCSAqIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNnZXRUcmFuc3BvcnRJZGVudGlmaWVyKCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgU3RyaW5nIHRyYW5zcG9ydElkZW50aWZpZXIgPSBUUkFOU1BPUlRfSURFTlRJRklFUl9FREVGQVVMVDsKKworCS8qKgorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRSYXRlVGltZVBlcmlvZCgpIDxlbT5SYXRlIFRpbWUgUGVyaW9kPC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLQorCSAqIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNnZXRSYXRlVGltZVBlcmlvZCgpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBsb25nIFJBVEVfVElNRV9QRVJJT0RfRURFRkFVTFQgPSAwTDsKKworCS8qKgorCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldFJhdGVUaW1lUGVyaW9kKCkgPGVtPlJhdGUgVGltZSBQZXJpb2Q8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tCisJICogZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI2dldFJhdGVUaW1lUGVyaW9kKCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgbG9uZyByYXRlVGltZVBlcmlvZCA9IFJBVEVfVElNRV9QRVJJT0RfRURFRkFVTFQ7CisKKwkvKioKKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0RGVwYXJ0dXJlQ2FwYWNpdHkoKSA8ZW0+RGVwYXJ0dXJlIENhcGFjaXR5PC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLQorCSAqIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNnZXREZXBhcnR1cmVDYXBhY2l0eSgpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBpbnQgREVQQVJUVVJFX0NBUEFDSVRZX0VERUZBVUxUID0gMDsKKworCS8qKgorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRNYXhpbXVtRGVwYXJ0dXJlQ2FwYWNpdHkoKSA8ZW0+TWF4aW11bSBEZXBhcnR1cmUgQ2FwYWNpdHk8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI2dldE1heGltdW1EZXBhcnR1cmVDYXBhY2l0eSgpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBpbnQgTUFYSU1VTV9ERVBBUlRVUkVfQ0FQQUNJVFlfRURFRkFVTFQgPSAwOworCisJLyoqCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0TWF4aW11bURlcGFydHVyZUNhcGFjaXR5KCkgPGVtPk1heGltdW0gRGVwYXJ0dXJlIENhcGFjaXR5PC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNnZXRNYXhpbXVtRGVwYXJ0dXJlQ2FwYWNpdHkoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBpbnQgbWF4aW11bURlcGFydHVyZUNhcGFjaXR5ID0gTUFYSU1VTV9ERVBBUlRVUkVfQ0FQQUNJVFlfRURFRkFVTFQ7CisKKwkvKioKKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0Q2FwYWNpdHkoKSA8ZW0+Q2FwYWNpdHk8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNnZXRDYXBhY2l0eSgpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBpbnQgQ0FQQUNJVFlfRURFRkFVTFQgPSAwOworCisJLyoqCisJICogVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldE1heGltdW1DYXBhY2l0eSgpIDxlbT5NYXhpbXVtIENhcGFjaXR5PC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLQorCSAqIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNnZXRNYXhpbXVtQ2FwYWNpdHkoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgaW50IE1BWElNVU1fQ0FQQUNJVFlfRURFRkFVTFQgPSAwOworCisJLyoqCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0TWF4aW11bUNhcGFjaXR5KCkgPGVtPk1heGltdW0gQ2FwYWNpdHk8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tCisJICogZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI2dldE1heGltdW1DYXBhY2l0eSgpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIGludCBtYXhpbXVtQ2FwYWNpdHkgPSBNQVhJTVVNX0NBUEFDSVRZX0VERUZBVUxUOworCisJLyoqCisJICogVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldFRyYW5zaXRUaW1lKCkgPGVtPlRyYW5zaXQgVGltZTwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI2dldFRyYW5zaXRUaW1lKCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIGxvbmcgVFJBTlNJVF9USU1FX0VERUZBVUxUID0gMEw7CisKKwkvKioKKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRUcmFuc2l0VGltZSgpIDxlbT5UcmFuc2l0IFRpbWU8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNnZXRUcmFuc2l0VGltZSgpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIGxvbmcgdHJhbnNpdFRpbWUgPSBUUkFOU0lUX1RJTUVfRURFRkFVTFQ7CisKKwkvKioKKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0U3RhcnRVcERlbGF5KCkgPGVtPlN0YXJ0IFVwIERlbGF5PC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLQorCSAqIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNnZXRTdGFydFVwRGVsYXkoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgbG9uZyBTVEFSVF9VUF9ERUxBWV9FREVGQVVMVCA9IDBMOworCisJLyoqCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0U3RhcnRVcERlbGF5KCkgPGVtPlN0YXJ0IFVwIERlbGF5PC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLQorCSAqIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNnZXRTdGFydFVwRGVsYXkoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBsb25nIHN0YXJ0VXBEZWxheSA9IFNUQVJUX1VQX0RFTEFZX0VERUZBVUxUOworCisJcHJpdmF0ZSBFT2JqZWN0IG5vZGVCQXJyaXZhbHMgPSBudWxsOworCisJcHJpdmF0ZSBFT2JqZWN0IG5vZGVBQXJyaXZhbHMgPSBudWxsOworCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogCisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlwcm90ZWN0ZWQgVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxJbXBsKCkgeworCQlzdXBlcigpOworCQlzZXRDdXJyZW50VmFsdWUoTGFiZWxzRmFjdG9yeS5lSU5TVEFOQ0UKKwkJCQkuY3JlYXRlVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxWYWx1ZSgpKTsKKwkJc2V0TmV4dFZhbHVlKExhYmVsc0ZhY3RvcnkuZUlOU1RBTkNFCisJCQkJLmNyZWF0ZVRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsVmFsdWUoKSk7CisJfSAvLyBUcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbEltcGwKKworCS8qKgorCSAqIENyZWF0ZSBhbiBlZGdlIHRoZSByZXByZXNlbnRzIGEgcmVmbGV4aXZlIHRyYW5zcG9ydGF0aW9uIHJlbGF0aW9uc2hpcAorCSAqIGJldHdlZW4gdHdvIG5vZGVzLgorCSAqIAorCSAqIEBwYXJhbSBub2RlQQorCSAqICAgICAgICAgICAgdGhlIGZpcnN0IG5vZGUKKwkgKiBAcGFyYW0gbm9kZUIKKwkgKiAgICAgICAgICAgIHRoZSBzZWNvbmQgbm9kZQorCSAqIEBwYXJhbSB0cmFuc3BvcnRNb2RlCisJICogICAgICAgICAgICB0aGUgdHJhbnNwb3J0YXRpb24gbW9kZQorCSAqIEBwYXJhbSB0cmFuc3BvcnRJZGVudGlmaWVyCisJICogICAgICAgICAgICB0aGUgaWRlbnRpZmllciBvZiB0aGUgdHJhbnNwb3J0YXRpb24gKGUuZy4sIHJvYWQgbmFtZSkKKwkgKiBAcGFyYW0gcG9wdWxhdGlvbklkZW50aWZpZXIKKwkgKiAgICAgICAgICAgIHRoZSBwb3B1bGF0aW9uIGJlaW5nIHRyYW5zcG9ydGVkCisJICogQHBhcmFtIGVkZ2VEZWNvcmF0b3IKKwkgKiBAcmV0dXJuCisJICovCisJcHVibGljIHN0YXRpYyBFZGdlIGNyZWF0ZVRyYW5zcG9ydFJlbGF0aW9uc2hpcChmaW5hbCBOb2RlIG5vZGVBLAorCQkJZmluYWwgTm9kZSBub2RlQiwgZmluYWwgVHJhbnNwb3J0TW9kZSB0cmFuc3BvcnRNb2RlLAorCQkJZmluYWwgU3RyaW5nIHRyYW5zcG9ydElkZW50aWZpZXIsCisJCQlmaW5hbCBTdHJpbmcgcG9wdWxhdGlvbklkZW50aWZpZXIsIGZpbmFsIGxvbmcgcmF0ZVRpbWVQZXJpb2QsCisJCQlmaW5hbCBpbnQgbWF4aW11bUNhcGFjaXR5LCBFZGdlRGVjb3JhdG9yIGVkZ2VEZWNvcmF0b3IpIHsKKwkJcmV0dXJuIGNyZWF0ZVRyYW5zcG9ydFJlbGF0aW9uc2hpcChub2RlQSwgbm9kZUIsIHRyYW5zcG9ydE1vZGUsCisJCQkJdHJhbnNwb3J0SWRlbnRpZmllciwgcG9wdWxhdGlvbklkZW50aWZpZXIsIHJhdGVUaW1lUGVyaW9kLAorCQkJCW1heGltdW1DYXBhY2l0eSwgZmFsc2UsIGVkZ2VEZWNvcmF0b3IpOworCX0gLy8gY3JlYXRlVHJhbnNwb3J0UmVsYXRpb25zaGlwCisKKwkvKioKKwkgKiBDcmVhdGUgYW4gZWRnZSB0aGUgcmVwcmVzZW50cyBhIHJlZmxleGl2ZSB0cmFuc3BvcnRhdGlvbiByZWxhdGlvbnNoaXAKKwkgKiBiZXR3ZWVuIHR3byBub2Rlcy4KKwkgKiAKKwkgKiBAcGFyYW0gbm9kZUEKKwkgKiAgICAgICAgICAgIHRoZSBmaXJzdCBub2RlCisJICogQHBhcmFtIG5vZGVCCisJICogICAgICAgICAgICB0aGUgc2Vjb25kIG5vZGUKKwkgKiBAcGFyYW0gdHJhbnNwb3J0TW9kZQorCSAqICAgICAgICAgICAgdGhlIHRyYW5zcG9ydGF0aW9uIG1vZGUKKwkgKiBAcGFyYW0gdHJhbnNwb3J0SWRlbnRpZmllcgorCSAqICAgICAgICAgICAgdGhlIGlkZW50aWZpZXIgb2YgdGhlIHRyYW5zcG9ydGF0aW9uIChlLmcuLCByb2FkIG5hbWUpCisJICogQHBhcmFtIHBvcHVsYXRpb25JZGVudGlmaWVyCisJICogICAgICAgICAgICB0aGUgcG9wdWxhdGlvbiBiZWluZyB0cmFuc3BvcnRlZAorCSAqIEBwYXJhbSBlZGdlRGVjb3JhdG9yCisJICogQHJldHVybgorCSAqLworCXB1YmxpYyBzdGF0aWMgRWRnZSBjcmVhdGVUcmFuc3BvcnRSZWxhdGlvbnNoaXAoZmluYWwgTm9kZSBub2RlQSwKKwkJCWZpbmFsIE5vZGUgbm9kZUIsIGZpbmFsIFRyYW5zcG9ydE1vZGUgdHJhbnNwb3J0TW9kZSwKKwkJCWZpbmFsIFN0cmluZyB0cmFuc3BvcnRJZGVudGlmaWVyLAorCQkJZmluYWwgU3RyaW5nIHBvcHVsYXRpb25JZGVudGlmaWVyLCBmaW5hbCBsb25nIHJhdGVUaW1lUGVyaW9kLAorCQkJZmluYWwgaW50IG1heGltdW1DYXBhY2l0eSwgZmluYWwgYm9vbGVhbiBkaXJlY3RlZCwKKwkJCUVkZ2VEZWNvcmF0b3IgZWRnZURlY29yYXRvcikgeworCQlyZXR1cm4gY3JlYXRlVHJhbnNwb3J0UmVsYXRpb25zaGlwKG5vZGVBLCBub2RlQiwgdHJhbnNwb3J0TW9kZSwKKwkJCQl0cmFuc3BvcnRJZGVudGlmaWVyLCBwb3B1bGF0aW9uSWRlbnRpZmllciwgcmF0ZVRpbWVQZXJpb2QsCisJCQkJbWF4aW11bUNhcGFjaXR5LCBtYXhpbXVtQ2FwYWNpdHksIDAsIDAsIGRpcmVjdGVkLCBlZGdlRGVjb3JhdG9yKTsKKwl9IC8vIGNyZWF0ZVRyYW5zcG9ydFJlbGF0aW9uc2hpcAorCisJLyoqCisJICogQ3JlYXRlIGFuIGVkZ2UgdGhlIHJlcHJlc2VudHMgYSByZWZsZXhpdmUgdHJhbnNwb3J0YXRpb24gcmVsYXRpb25zaGlwCisJICogYmV0d2VlbiB0d28gbm9kZXMuCisJICogCisJICogQHBhcmFtIG5vZGVBCisJICogICAgICAgICAgICB0aGUgZmlyc3Qgbm9kZQorCSAqIEBwYXJhbSBub2RlQgorCSAqICAgICAgICAgICAgdGhlIHNlY29uZCBub2RlCisJICogQHBhcmFtIHRyYW5zcG9ydE1vZGUKKwkgKiAgICAgICAgICAgIHRoZSB0cmFuc3BvcnRhdGlvbiBtb2RlCisJICogQHBhcmFtIHRyYW5zcG9ydElkZW50aWZpZXIKKwkgKiAgICAgICAgICAgIHRoZSBpZGVudGlmaWVyIG9mIHRoZSB0cmFuc3BvcnRhdGlvbiAoZS5nLiwgcm9hZCBuYW1lKQorCSAqIEBwYXJhbSBwb3B1bGF0aW9uSWRlbnRpZmllcgorCSAqICAgICAgICAgICAgdGhlIHBvcHVsYXRpb24gYmVpbmcgdHJhbnNwb3J0ZWQKKwkgKiBAcGFyYW0gZWRnZURlY29yYXRvcgorCSAqIEByZXR1cm4KKwkgKi8KKwlwdWJsaWMgc3RhdGljIEVkZ2UgY3JlYXRlVHJhbnNwb3J0UmVsYXRpb25zaGlwKGZpbmFsIE5vZGUgbm9kZUEsCisJCQlmaW5hbCBOb2RlIG5vZGVCLCBmaW5hbCBUcmFuc3BvcnRNb2RlIHRyYW5zcG9ydE1vZGUsCisJCQlmaW5hbCBTdHJpbmcgdHJhbnNwb3J0SWRlbnRpZmllciwKKwkJCWZpbmFsIFN0cmluZyBwb3B1bGF0aW9uSWRlbnRpZmllciwgZmluYWwgbG9uZyByYXRlVGltZVBlcmlvZCwKKwkJCWZpbmFsIGludCBtYXhpbXVtRGVwYXJ0dXJlQ2FwYWNpdHksIGZpbmFsIGludCBtYXhpbXVtQ2FwYWNpdHksCisJCQlmaW5hbCBsb25nIHRyYW5zaXRUaW1lLCBmaW5hbCBsb25nIHN0YXJ0VXBEZWxheSwKKwkJCUVkZ2VEZWNvcmF0b3IgZWRnZURlY29yYXRvcikgeworCQlyZXR1cm4gY3JlYXRlVHJhbnNwb3J0UmVsYXRpb25zaGlwKG5vZGVBLCBub2RlQiwgdHJhbnNwb3J0TW9kZSwKKwkJCQl0cmFuc3BvcnRJZGVudGlmaWVyLCBwb3B1bGF0aW9uSWRlbnRpZmllciwgcmF0ZVRpbWVQZXJpb2QsCisJCQkJbWF4aW11bURlcGFydHVyZUNhcGFjaXR5LCBtYXhpbXVtQ2FwYWNpdHksIHRyYW5zaXRUaW1lLAorCQkJCXN0YXJ0VXBEZWxheSwgZmFsc2UsIGVkZ2VEZWNvcmF0b3IpOworCX0gLy8gY3JlYXRlVHJhbnNwb3J0UmVsYXRpb25zaGlwCisKKwkvKioKKwkgKiBDcmVhdGUgYW4gZWRnZSB0aGUgcmVwcmVzZW50cyBhIHRyYW5zcG9ydGF0aW9uIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHR3bworCSAqIG5vZGVzLgorCSAqIAorCSAqIEBwYXJhbSBub2RlQQorCSAqICAgICAgICAgICAgdGhlIGZpcnN0IG5vZGUKKwkgKiBAcGFyYW0gbm9kZUIKKwkgKiAgICAgICAgICAgIHRoZSBzZWNvbmQgbm9kZQorCSAqIEBwYXJhbSB0cmFuc3BvcnRNb2RlCisJICogICAgICAgICAgICB0aGUgdHJhbnNwb3J0YXRpb24gbW9kZQorCSAqIEBwYXJhbSB0cmFuc3BvcnRJZGVudGlmaWVyCisJICogICAgICAgICAgICB0aGUgaWRlbnRpZmllciBvZiB0aGUgdHJhbnNwb3J0aW9uIChlLmcuLCByb2FkIG5hbWUpCisJICogQHBhcmFtIHBvcHVsYXRpb25JZGVudGlmaWVyCisJICogICAgICAgICAgICB0aGUgcG9wdWxhdGlvbiBiZWluZyB0cmFuc3BvcnRlZAorCSAqIEBwYXJhbSByYXRlVGltZVBlcmlvZAorCSAqICAgICAgICAgICAgdGhlIHVuaXQgb2YgdGltZSB0aGUgcG9wdWxhdGlvbiBjb3VudCBpcyB0cmFuc3BvcnRlZCBpbgorCSAqICAgICAgICAgICAgKG1pbGxpc2Vjb25kcykKKwkgKiBAcGFyYW0gZGlyZWN0ZWQKKwkgKiAgICAgICAgICAgIGlmIHRydWUgdGhlbiB0aGUgcmVsYXRpb25zaGlwIGlzIG9ubHkgZnJvbSBub2RlQSB0byBub2RlQiwgYW5kCisJICogICAgICAgICAgICBub3QgdGhlIG90aGVyIHdheSBhcm91bmQuIFRoaXMgbWVhbnMgdGhpbmdzIG1vdmUgZnJvbSBub2RlQSB0bworCSAqICAgICAgICAgICAgbm9kZUIsIGJ1dCBub3QgaW4gdGhlIG90aGVyIGRpcmVjdGlvbi4KKwkgKiBAcGFyYW0gZWRnZURlY29yYXRvcgorCSAqICAgICAgICAgICAgVE9ETworCSAqIEBwYXJhbSBwb3B1bGF0aW9uQ291bnQKKwkgKiAgICAgICAgICAgIHRoZSBudW1iZXIgb2YgcG9wdWxhdGlvbiBtZW1iZXJzCisJICogQHJldHVybgorCSAqLworCXB1YmxpYyBzdGF0aWMgRWRnZSBjcmVhdGVUcmFuc3BvcnRSZWxhdGlvbnNoaXAoZmluYWwgTm9kZSBub2RlQSwKKwkJCWZpbmFsIE5vZGUgbm9kZUIsIGZpbmFsIFRyYW5zcG9ydE1vZGUgdHJhbnNwb3J0TW9kZSwKKwkJCWZpbmFsIFN0cmluZyB0cmFuc3BvcnRJZGVudGlmaWVyLAorCQkJZmluYWwgU3RyaW5nIHBvcHVsYXRpb25JZGVudGlmaWVyLCBmaW5hbCBsb25nIHJhdGVUaW1lUGVyaW9kLAorCQkJZmluYWwgaW50IG1heGltdW1EZXBhcnR1cmVDYXBhY2l0eSwgZmluYWwgaW50IG1heGltdW1DYXBhY2l0eSwKKwkJCWZpbmFsIGxvbmcgdHJhbnNpdFRpbWUsIGZpbmFsIGxvbmcgc3RhcnRVcERlbGF5LAorCQkJZmluYWwgYm9vbGVhbiBkaXJlY3RlZCwgRWRnZURlY29yYXRvciBlZGdlRGVjb3JhdG9yKSB7CisKKwkJZmluYWwgRWRnZSByZXRWYWx1ZSA9IEVkZ2VJbXBsLmNyZWF0ZUVkZ2Uobm9kZUEsIG5vZGVCLCBkaXJlY3RlZCk7CisKKwkJZmluYWwgVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWwgbGFiZWwgPSBMYWJlbHNGYWN0b3J5LmVJTlNUQU5DRQorCQkJCS5jcmVhdGVUcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbCgpOworCQlsYWJlbC5zZXRVUklPZklkZW50aWZpYWJsZVRvQmVMYWJlbGVkKHJldFZhbHVlLmdldFVSSSgpKTsKKwkJbGFiZWwuc2V0RGVjb3JhdG9yKGVkZ2VEZWNvcmF0b3IpOworCQlsYWJlbC5zZXRQb3B1bGF0aW9uSWRlbnRpZmllcihwb3B1bGF0aW9uSWRlbnRpZmllcik7CisJCWxhYmVsLnNldFRyYW5zcG9ydElkZW50aWZpZXIodHJhbnNwb3J0SWRlbnRpZmllcik7CisJCWxhYmVsLnNldFJhdGVUaW1lUGVyaW9kKHJhdGVUaW1lUGVyaW9kKTsKKwkJbGFiZWwuc2V0TWF4aW11bURlcGFydHVyZUNhcGFjaXR5KG1heGltdW1EZXBhcnR1cmVDYXBhY2l0eSk7CisJCWxhYmVsLnNldE1heGltdW1DYXBhY2l0eShtYXhpbXVtQ2FwYWNpdHkpOworCQlsYWJlbC5zZXRUcmFuc2l0VGltZSh0cmFuc2l0VGltZSk7CisJCWxhYmVsLnNldFN0YXJ0VXBEZWxheShzdGFydFVwRGVsYXkpOworCQlsYWJlbC5zZXRUcmFuc3BvcnRNb2RlKHRyYW5zcG9ydE1vZGUpOworCisJCWZpbmFsIFRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsVmFsdWUgdHJsdiA9IGxhYmVsCisJCQkJLmdldEN1cnJlbnRUcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbFZhbHVlKCk7CisJCXRybHYuc2V0QXZhaWxhYmxlRGVwYXJ0dXJlQ2FwYWNpdHlQcm9wb3J0aW9uKDEuMCk7CisKKwkJcmV0VmFsdWUuc2V0TGFiZWwobGFiZWwpOworCQlyZXR1cm4gcmV0VmFsdWU7CisJfSAvLyBjcmVhdGVUcmFuc3BvcnRSZWxhdGlvbnNoaXAKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgRUNsYXNzIGVTdGF0aWNDbGFzcygpIHsKKwkJcmV0dXJuIExhYmVsc1BhY2thZ2UuTGl0ZXJhbHMuVFJBTlNQT1JUX1JFTEFUSU9OU0hJUF9MQUJFTDsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFRyYW5zcG9ydE1vZGUgZ2V0VHJhbnNwb3J0TW9kZSgpIHsKKwkJcmV0dXJuIHRyYW5zcG9ydE1vZGU7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIHNldFRyYW5zcG9ydE1vZGUoVHJhbnNwb3J0TW9kZSBuZXdUcmFuc3BvcnRNb2RlKSB7CisJCVRyYW5zcG9ydE1vZGUgb2xkVHJhbnNwb3J0TW9kZSA9IHRyYW5zcG9ydE1vZGU7CisJCXRyYW5zcG9ydE1vZGUgPSBuZXdUcmFuc3BvcnRNb2RlID09IG51bGwgPyBUUkFOU1BPUlRfTU9ERV9FREVGQVVMVCA6IG5ld1RyYW5zcG9ydE1vZGU7CisJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkKKwkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIExhYmVsc1BhY2thZ2UuVFJBTlNQT1JUX1JFTEFUSU9OU0hJUF9MQUJFTF9fVFJBTlNQT1JUX01PREUsIG9sZFRyYW5zcG9ydE1vZGUsIHRyYW5zcG9ydE1vZGUpKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFN0cmluZyBnZXRQb3B1bGF0aW9uSWRlbnRpZmllcigpIHsKKwkJcmV0dXJuIHBvcHVsYXRpb25JZGVudGlmaWVyOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRQb3B1bGF0aW9uSWRlbnRpZmllcihTdHJpbmcgbmV3UG9wdWxhdGlvbklkZW50aWZpZXIpIHsKKwkJU3RyaW5nIG9sZFBvcHVsYXRpb25JZGVudGlmaWVyID0gcG9wdWxhdGlvbklkZW50aWZpZXI7CisJCXBvcHVsYXRpb25JZGVudGlmaWVyID0gbmV3UG9wdWxhdGlvbklkZW50aWZpZXI7CisJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkKKwkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIExhYmVsc1BhY2thZ2UuVFJBTlNQT1JUX1JFTEFUSU9OU0hJUF9MQUJFTF9fUE9QVUxBVElPTl9JREVOVElGSUVSLCBvbGRQb3B1bGF0aW9uSWRlbnRpZmllciwgcG9wdWxhdGlvbklkZW50aWZpZXIpKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFN0cmluZyBnZXRUcmFuc3BvcnRJZGVudGlmaWVyKCkgeworCQlyZXR1cm4gdHJhbnNwb3J0SWRlbnRpZmllcjsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgc2V0VHJhbnNwb3J0SWRlbnRpZmllcihTdHJpbmcgbmV3VHJhbnNwb3J0SWRlbnRpZmllcikgeworCQlTdHJpbmcgb2xkVHJhbnNwb3J0SWRlbnRpZmllciA9IHRyYW5zcG9ydElkZW50aWZpZXI7CisJCXRyYW5zcG9ydElkZW50aWZpZXIgPSBuZXdUcmFuc3BvcnRJZGVudGlmaWVyOworCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpCisJCQllTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBMYWJlbHNQYWNrYWdlLlRSQU5TUE9SVF9SRUxBVElPTlNISVBfTEFCRUxfX1RSQU5TUE9SVF9JREVOVElGSUVSLCBvbGRUcmFuc3BvcnRJZGVudGlmaWVyLCB0cmFuc3BvcnRJZGVudGlmaWVyKSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogCisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlwdWJsaWMgVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxWYWx1ZSBnZXRDdXJyZW50VHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxWYWx1ZSgpIHsKKwkJcmV0dXJuIChUcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbFZhbHVlKSBnZXRDdXJyZW50VmFsdWUoKTsKKwl9IC8vIGdldEN1cnJlbnRUcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbFZhbHVlCisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIGxvbmcgZ2V0UmF0ZVRpbWVQZXJpb2QoKSB7CisJCXJldHVybiByYXRlVGltZVBlcmlvZDsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgc2V0UmF0ZVRpbWVQZXJpb2QobG9uZyBuZXdSYXRlVGltZVBlcmlvZCkgeworCQlsb25nIG9sZFJhdGVUaW1lUGVyaW9kID0gcmF0ZVRpbWVQZXJpb2Q7CisJCXJhdGVUaW1lUGVyaW9kID0gbmV3UmF0ZVRpbWVQZXJpb2Q7CisJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkKKwkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIExhYmVsc1BhY2thZ2UuVFJBTlNQT1JUX1JFTEFUSU9OU0hJUF9MQUJFTF9fUkFURV9USU1FX1BFUklPRCwgb2xkUmF0ZVRpbWVQZXJpb2QsIHJhdGVUaW1lUGVyaW9kKSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogCisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlwdWJsaWMgaW50IGdldERlcGFydHVyZUNhcGFjaXR5KCkgeworCQkvLyAkQU5BTFlTSVMtSUdOT1JFCisJCXJldHVybiAoaW50KSAoZ2V0TWF4aW11bURlcGFydHVyZUNhcGFjaXR5KCkgKiBnZXRDdXJyZW50VHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxWYWx1ZSgpCisJCQkJLmdldEF2YWlsYWJsZURlcGFydHVyZUNhcGFjaXR5UHJvcG9ydGlvbigpKTsKKwl9IC8vIGdldERlcGFydHVyZUNhcGFjaXR5CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIGludCBnZXRNYXhpbXVtRGVwYXJ0dXJlQ2FwYWNpdHkoKSB7CisJCXJldHVybiBtYXhpbXVtRGVwYXJ0dXJlQ2FwYWNpdHk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIHNldE1heGltdW1EZXBhcnR1cmVDYXBhY2l0eShpbnQgbmV3TWF4aW11bURlcGFydHVyZUNhcGFjaXR5KSB7CisJCWludCBvbGRNYXhpbXVtRGVwYXJ0dXJlQ2FwYWNpdHkgPSBtYXhpbXVtRGVwYXJ0dXJlQ2FwYWNpdHk7CisJCW1heGltdW1EZXBhcnR1cmVDYXBhY2l0eSA9IG5ld01heGltdW1EZXBhcnR1cmVDYXBhY2l0eTsKKwkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQorCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgTGFiZWxzUGFja2FnZS5UUkFOU1BPUlRfUkVMQVRJT05TSElQX0xBQkVMX19NQVhJTVVNX0RFUEFSVFVSRV9DQVBBQ0lUWSwgb2xkTWF4aW11bURlcGFydHVyZUNhcGFjaXR5LCBtYXhpbXVtRGVwYXJ0dXJlQ2FwYWNpdHkpKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCXB1YmxpYyBpbnQgZ2V0Q2FwYWNpdHkoKSB7CisJCS8vICRBTkFMWVNJUy1JR05PUkUKKwkJcmV0dXJuIChpbnQpIChnZXRNYXhpbXVtQ2FwYWNpdHkoKSAqIGdldEN1cnJlbnRUcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbFZhbHVlKCkKKwkJCQkuZ2V0QXZhaWxhYmxlRGVwYXJ0dXJlQ2FwYWNpdHlQcm9wb3J0aW9uKCkpOworCX0gLy8gZ2V0Q2FwYWNpdHkKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgaW50IGdldE1heGltdW1DYXBhY2l0eSgpIHsKKwkJcmV0dXJuIG1heGltdW1DYXBhY2l0eTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgc2V0TWF4aW11bUNhcGFjaXR5KGludCBuZXdNYXhpbXVtQ2FwYWNpdHkpIHsKKwkJaW50IG9sZE1heGltdW1DYXBhY2l0eSA9IG1heGltdW1DYXBhY2l0eTsKKwkJbWF4aW11bUNhcGFjaXR5ID0gbmV3TWF4aW11bUNhcGFjaXR5OworCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpCisJCQllTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBMYWJlbHNQYWNrYWdlLlRSQU5TUE9SVF9SRUxBVElPTlNISVBfTEFCRUxfX01BWElNVU1fQ0FQQUNJVFksIG9sZE1heGltdW1DYXBhY2l0eSwgbWF4aW11bUNhcGFjaXR5KSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBsb25nIGdldFRyYW5zaXRUaW1lKCkgeworCQlyZXR1cm4gdHJhbnNpdFRpbWU7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIHNldFRyYW5zaXRUaW1lKGxvbmcgbmV3VHJhbnNpdFRpbWUpIHsKKwkJbG9uZyBvbGRUcmFuc2l0VGltZSA9IHRyYW5zaXRUaW1lOworCQl0cmFuc2l0VGltZSA9IG5ld1RyYW5zaXRUaW1lOworCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpCisJCQllTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBMYWJlbHNQYWNrYWdlLlRSQU5TUE9SVF9SRUxBVElPTlNISVBfTEFCRUxfX1RSQU5TSVRfVElNRSwgb2xkVHJhbnNpdFRpbWUsIHRyYW5zaXRUaW1lKSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBsb25nIGdldFN0YXJ0VXBEZWxheSgpIHsKKwkJcmV0dXJuIHN0YXJ0VXBEZWxheTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgc2V0U3RhcnRVcERlbGF5KGxvbmcgbmV3U3RhcnRVcERlbGF5KSB7CisJCWxvbmcgb2xkU3RhcnRVcERlbGF5ID0gc3RhcnRVcERlbGF5OworCQlzdGFydFVwRGVsYXkgPSBuZXdTdGFydFVwRGVsYXk7CisJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkKKwkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIExhYmVsc1BhY2thZ2UuVFJBTlNQT1JUX1JFTEFUSU9OU0hJUF9MQUJFTF9fU1RBUlRfVVBfREVMQVksIG9sZFN0YXJ0VXBEZWxheSwgc3RhcnRVcERlbGF5KSk7CisJfQorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5UcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbCNzZW5kKG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5Ob2RlLAorCSAqICAgICAgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpCisJICovCisJcHVibGljIHZvaWQgc2VuZChOb2RlIGhlcmUsIEVPYmplY3QgZGVwYXJ0ZWVzKSB7CisJCS8vIEFyZSB3ZSBzZW5kaW5nIGZyb20gTm9kZSBBPworCQlpZiAoZ2V0RWRnZSgpLmdldEEoKS5lcXVhbHMoaGVyZSkpIHsKKwkJCS8vIFllcworCQkJbm9kZUJBcnJpdmFscyA9IGRlcGFydGVlczsKKwkJfSBlbHNlIHsKKwkJCS8vIE5vCisJCQkvLyBNdXN0IGJlIE5vZGUgQgorCQkJbm9kZUFBcnJpdmFscyA9IGRlcGFydGVlczsKKwkJfQorCX0gLy8gc2VuZAorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5UcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbCNyZWNlaXZlKG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5Ob2RlLAorCSAqICAgICAgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLlNURU1UaW1lKQorCSAqLworCXB1YmxpYyBFTGlzdDxFT2JqZWN0PiByZWNlaXZlKE5vZGUgaGVyZSwgU1RFTVRpbWUgY3VycmVudFRpbWUpIHsKKwkJZmluYWwgRUxpc3Q8RU9iamVjdD4gcmV0VmFsdWUgPSBuZXcgQmFzaWNFTGlzdDxFT2JqZWN0PigpOworCQkvLyBBcmUgd2UgcmVjZWl2aW5nIGF0IE5vZGUgQT8KKwkJaWYgKGdldEVkZ2UoKS5nZXRBKCkuZXF1YWxzKGhlcmUpKSB7CisJCQkvLyBZZXMKKwkJCS8vIEFueXRoaW5nIHRvIGdldD8KKwkJCWlmIChub2RlQUFycml2YWxzICE9IG51bGwpIHsKKwkJCQkvLyBZZXMKKwkJCQlyZXRWYWx1ZS5hZGQobm9kZUFBcnJpdmFscyk7CisJCQkJbm9kZUFBcnJpdmFscyA9IG51bGw7CisJCQl9CisJCX0gZWxzZSB7CisJCQkvLyBObworCQkJLy8gQW55dGhpbmcgdG8gZ2V0PworCQkJaWYgKG5vZGVCQXJyaXZhbHMgIT0gbnVsbCkgeworCQkJCS8vIFllcworCQkJCXJldFZhbHVlLmFkZChub2RlQkFycml2YWxzKTsKKwkJCQlub2RlQkFycml2YWxzID0gbnVsbDsKKwkJCX0KKwkJfQorCQlyZXR1cm4gcmV0VmFsdWU7CisJfSAvLyByZWNlaXZlCisKKwkvKioKKwkgKiBAcGFyYW0gbm9kZQorCSAqICAgICAgICAgICAgdGhlIG5vZGUKKwkgKiBAcGFyYW0gcG9wdWxhdGlvbklkZW50aWZpZXIKKwkgKiAgICAgICAgICAgIHRoZSBwb3B1bGF0aW9uIGJlaW5nIHRyYW5zcG9ydGVkCisJICogQHJldHVybiB0aGUgRWRnZXMgdGhhdCByZXByZXNlbnQgdGhlIHRyYW5zcG9ydGF0aW9uIG9mIHBvcHVsYXRpb24gbWVtYmVycworCSAqICAgICAgICAgdG8gdGhlIG5vZGUuCisJICovCisJcHVibGljIHN0YXRpYyBMaXN0PEVkZ2U+IGdldFRyYW5zcG9ydEVkZ2VzVG9Ob2RlKGZpbmFsIE5vZGUgbm9kZSwKKwkJCWZpbmFsIFN0cmluZyBwb3B1bGF0aW9uSWRlbnRpZmllcikgeworCQlmaW5hbCBMaXN0PEVkZ2U+IHJldFZhbHVlID0gbmV3IEFycmF5TGlzdDxFZGdlPigpOworCisJCWZvciAoSXRlcmF0b3I8RWRnZT4gZWRnZUl0ZXIgPSBub2RlLmdldEVkZ2VzKCkuaXRlcmF0b3IoKTsgZWRnZUl0ZXIKKwkJCQkuaGFzTmV4dCgpOykgeworCQkJZmluYWwgRWRnZSBlZGdlID0gZWRnZUl0ZXIubmV4dCgpOworCQkJLy8gSXMgdGhlIGVkZ2UgZGlyZWN0ZWQgYXdheSBmcm9tIHVzPworCQkJaWYgKCFlZGdlLmlzRGlyZWN0ZWQoKSB8fCBlZGdlLmlzRGlyZWN0ZWRBdChub2RlKSkgeworCQkJCS8vIE5vCisJCQkJLy8gSXQgY291bGQgYmUgdHJhbnNwb3J0aW5nIHBvcHVsYXRpb24gbWVtYmVycyB0byB0aGUgbm9kZSB0aGVuCisJCQkJZmluYWwgTGFiZWwgZWRnZUxhYmVsID0gZWRnZS5nZXRMYWJlbCgpOworCQkJCS8vIElzIHRoZSBsYWJlbCBhIHRyYW5zcG9ydCBsYWJlbD8KKwkJCQlpZiAoZWRnZUxhYmVsIGluc3RhbmNlb2YgVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWwpIHsKKwkJCQkJLy8gWWVzCisJCQkJCWZpbmFsIFRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsIHRyYW5zcG9ydExhYmVsID0gKFRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsKSBlZGdlTGFiZWw7CisJCQkJCS8vIFNhbWUgcG9wdWxhdGlvbj8KKwkJCQkJaWYgKHRyYW5zcG9ydExhYmVsLmdldFBvcHVsYXRpb25JZGVudGlmaWVyKCkKKwkJCQkJCQkuZXF1YWxzSWdub3JlQ2FzZShwb3B1bGF0aW9uSWRlbnRpZmllcikpIHsKKwkJCQkJCS8vIFllcworCQkJCQkJLy8gSXQncyBhIGtlZXBlcgorCQkJCQkJcmV0VmFsdWUuYWRkKGVkZ2UpOworCQkJCQl9CisJCQkJfQorCQkJfQorCQl9IC8vIGZvcgorCisJCXJldHVybiByZXRWYWx1ZTsKKwl9IC8vIGdldFRyYW5zcG9ydEVkZ2VzVG9Ob2RlCisKKwkvKioKKwkgKiBAcGFyYW0gbm9kZQorCSAqICAgICAgICAgICAgdGhlIG5vZGUKKwkgKiBAcGFyYW0gcG9wdWxhdGlvbklkZW50aWZpZXIKKwkgKiAgICAgICAgICAgIHRoZSBwb3B1bGF0aW9uIGJlaW5nIHRyYW5zcG9ydGVkCisJICogQHJldHVybiB0aGUgRWRnZXMgdGhhdCByZXByZXNlbnQgdGhlIHRyYW5zcG9ydGF0aW9uIG9mIHBvcHVsYXRpb24gbWVtYmVycworCSAqICAgICAgICAgdG8gdGhlIG5vZGUuCisJICovCisJcHVibGljIHN0YXRpYyBMaXN0PEVkZ2U+IGdldFRyYW5zcG9ydEVkZ2VzRnJvbU5vZGUoZmluYWwgTm9kZSBub2RlLAorCQkJZmluYWwgU3RyaW5nIHBvcHVsYXRpb25JZGVudGlmaWVyKSB7CisJCWZpbmFsIExpc3Q8RWRnZT4gcmV0VmFsdWUgPSBuZXcgQXJyYXlMaXN0PEVkZ2U+KCk7CisKKwkJZm9yIChJdGVyYXRvcjxFZGdlPiBlZGdlSXRlciA9IG5vZGUuZ2V0RWRnZXMoKS5pdGVyYXRvcigpOyBlZGdlSXRlcgorCQkJCS5oYXNOZXh0KCk7KSB7CisJCQlmaW5hbCBFZGdlIGVkZ2UgPSBlZGdlSXRlci5uZXh0KCk7CisJCQkvLyBJcyB0aGUgZWRnZSBkaXJlY3RlZCBhd2F5IGZyb20gdXM/CisJCQlpZiAoIWVkZ2UuaXNEaXJlY3RlZCgpIHx8ICFlZGdlLmlzRGlyZWN0ZWRBdChub2RlKSkgeworCQkJCS8vIFllcworCQkJCS8vIEl0IGNvdWxkIGJlIHRyYW5zcG9ydGluZyBwb3B1bGF0aW9uIG1lbWJlcnMgZnJvbSB0aGUgbm9kZQorCQkJCS8vIHRoZW4KKwkJCQlmaW5hbCBMYWJlbCBlZGdlTGFiZWwgPSBlZGdlLmdldExhYmVsKCk7CisJCQkJLy8gSXMgdGhlIGxhYmVsIGEgdHJhbnNwb3J0IGxhYmVsPworCQkJCWlmIChlZGdlTGFiZWwgaW5zdGFuY2VvZiBUcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbCkgeworCQkJCQkvLyBZZXMKKwkJCQkJZmluYWwgVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWwgdHJhbnNwb3J0TGFiZWwgPSAoVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWwpIGVkZ2VMYWJlbDsKKwkJCQkJLy8gU2FtZSBwb3B1bGF0aW9uPworCQkJCQlpZiAodHJhbnNwb3J0TGFiZWwuZ2V0UG9wdWxhdGlvbklkZW50aWZpZXIoKQorCQkJCQkJCS5lcXVhbHNJZ25vcmVDYXNlKHBvcHVsYXRpb25JZGVudGlmaWVyKSkgeworCQkJCQkJLy8gWWVzCisJCQkJCQkvLyBJdCdzIGEga2VlcGVyCisJCQkJCQlyZXRWYWx1ZS5hZGQoZWRnZSk7CisJCQkJCX0KKwkJCQl9CisJCQl9CisJCX0gLy8gZm9yCisKKwkJcmV0dXJuIHJldFZhbHVlOworCX0gLy8gZ2V0VHJhbnNwb3J0RWRnZXNUb05vZGUKKworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIHJlc2V0KCkgeworCQlzdXBlci5yZXNldCgpOworCQlub2RlQUFycml2YWxzID0gbnVsbDsKKwkJbm9kZUJBcnJpdmFscyA9IG51bGw7CisJfSAvLyByZXNldAorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBPYmplY3QgZUdldChpbnQgZmVhdHVyZUlELCBib29sZWFuIHJlc29sdmUsIGJvb2xlYW4gY29yZVR5cGUpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJCWNhc2UgTGFiZWxzUGFja2FnZS5UUkFOU1BPUlRfUkVMQVRJT05TSElQX0xBQkVMX19UUkFOU1BPUlRfTU9ERToKKwkJCQlyZXR1cm4gZ2V0VHJhbnNwb3J0TW9kZSgpOworCQkJY2FzZSBMYWJlbHNQYWNrYWdlLlRSQU5TUE9SVF9SRUxBVElPTlNISVBfTEFCRUxfX1BPUFVMQVRJT05fSURFTlRJRklFUjoKKwkJCQlyZXR1cm4gZ2V0UG9wdWxhdGlvbklkZW50aWZpZXIoKTsKKwkJCWNhc2UgTGFiZWxzUGFja2FnZS5UUkFOU1BPUlRfUkVMQVRJT05TSElQX0xBQkVMX19UUkFOU1BPUlRfSURFTlRJRklFUjoKKwkJCQlyZXR1cm4gZ2V0VHJhbnNwb3J0SWRlbnRpZmllcigpOworCQkJY2FzZSBMYWJlbHNQYWNrYWdlLlRSQU5TUE9SVF9SRUxBVElPTlNISVBfTEFCRUxfX0NVUlJFTlRfVFJBTlNQT1JUX1JFTEFUSU9OU0hJUF9MQUJFTF9WQUxVRToKKwkJCQlyZXR1cm4gZ2V0Q3VycmVudFRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsVmFsdWUoKTsKKwkJCWNhc2UgTGFiZWxzUGFja2FnZS5UUkFOU1BPUlRfUkVMQVRJT05TSElQX0xBQkVMX19SQVRFX1RJTUVfUEVSSU9EOgorCQkJCXJldHVybiBnZXRSYXRlVGltZVBlcmlvZCgpOworCQkJY2FzZSBMYWJlbHNQYWNrYWdlLlRSQU5TUE9SVF9SRUxBVElPTlNISVBfTEFCRUxfX0RFUEFSVFVSRV9DQVBBQ0lUWToKKwkJCQlyZXR1cm4gZ2V0RGVwYXJ0dXJlQ2FwYWNpdHkoKTsKKwkJCWNhc2UgTGFiZWxzUGFja2FnZS5UUkFOU1BPUlRfUkVMQVRJT05TSElQX0xBQkVMX19NQVhJTVVNX0RFUEFSVFVSRV9DQVBBQ0lUWToKKwkJCQlyZXR1cm4gZ2V0TWF4aW11bURlcGFydHVyZUNhcGFjaXR5KCk7CisJCQljYXNlIExhYmVsc1BhY2thZ2UuVFJBTlNQT1JUX1JFTEFUSU9OU0hJUF9MQUJFTF9fQ0FQQUNJVFk6CisJCQkJcmV0dXJuIGdldENhcGFjaXR5KCk7CisJCQljYXNlIExhYmVsc1BhY2thZ2UuVFJBTlNQT1JUX1JFTEFUSU9OU0hJUF9MQUJFTF9fTUFYSU1VTV9DQVBBQ0lUWToKKwkJCQlyZXR1cm4gZ2V0TWF4aW11bUNhcGFjaXR5KCk7CisJCQljYXNlIExhYmVsc1BhY2thZ2UuVFJBTlNQT1JUX1JFTEFUSU9OU0hJUF9MQUJFTF9fVFJBTlNJVF9USU1FOgorCQkJCXJldHVybiBnZXRUcmFuc2l0VGltZSgpOworCQkJY2FzZSBMYWJlbHNQYWNrYWdlLlRSQU5TUE9SVF9SRUxBVElPTlNISVBfTEFCRUxfX1NUQVJUX1VQX0RFTEFZOgorCQkJCXJldHVybiBnZXRTdGFydFVwRGVsYXkoKTsKKwkJfQorCQlyZXR1cm4gc3VwZXIuZUdldChmZWF0dXJlSUQsIHJlc29sdmUsIGNvcmVUeXBlKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgZVNldChpbnQgZmVhdHVyZUlELCBPYmplY3QgbmV3VmFsdWUpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJCWNhc2UgTGFiZWxzUGFja2FnZS5UUkFOU1BPUlRfUkVMQVRJT05TSElQX0xBQkVMX19UUkFOU1BPUlRfTU9ERToKKwkJCQlzZXRUcmFuc3BvcnRNb2RlKChUcmFuc3BvcnRNb2RlKW5ld1ZhbHVlKTsKKwkJCQlyZXR1cm47CisJCQljYXNlIExhYmVsc1BhY2thZ2UuVFJBTlNQT1JUX1JFTEFUSU9OU0hJUF9MQUJFTF9fUE9QVUxBVElPTl9JREVOVElGSUVSOgorCQkJCXNldFBvcHVsYXRpb25JZGVudGlmaWVyKChTdHJpbmcpbmV3VmFsdWUpOworCQkJCXJldHVybjsKKwkJCWNhc2UgTGFiZWxzUGFja2FnZS5UUkFOU1BPUlRfUkVMQVRJT05TSElQX0xBQkVMX19UUkFOU1BPUlRfSURFTlRJRklFUjoKKwkJCQlzZXRUcmFuc3BvcnRJZGVudGlmaWVyKChTdHJpbmcpbmV3VmFsdWUpOworCQkJCXJldHVybjsKKwkJCWNhc2UgTGFiZWxzUGFja2FnZS5UUkFOU1BPUlRfUkVMQVRJT05TSElQX0xBQkVMX19SQVRFX1RJTUVfUEVSSU9EOgorCQkJCXNldFJhdGVUaW1lUGVyaW9kKChMb25nKW5ld1ZhbHVlKTsKKwkJCQlyZXR1cm47CisJCQljYXNlIExhYmVsc1BhY2thZ2UuVFJBTlNQT1JUX1JFTEFUSU9OU0hJUF9MQUJFTF9fTUFYSU1VTV9ERVBBUlRVUkVfQ0FQQUNJVFk6CisJCQkJc2V0TWF4aW11bURlcGFydHVyZUNhcGFjaXR5KChJbnRlZ2VyKW5ld1ZhbHVlKTsKKwkJCQlyZXR1cm47CisJCQljYXNlIExhYmVsc1BhY2thZ2UuVFJBTlNQT1JUX1JFTEFUSU9OU0hJUF9MQUJFTF9fTUFYSU1VTV9DQVBBQ0lUWToKKwkJCQlzZXRNYXhpbXVtQ2FwYWNpdHkoKEludGVnZXIpbmV3VmFsdWUpOworCQkJCXJldHVybjsKKwkJCWNhc2UgTGFiZWxzUGFja2FnZS5UUkFOU1BPUlRfUkVMQVRJT05TSElQX0xBQkVMX19UUkFOU0lUX1RJTUU6CisJCQkJc2V0VHJhbnNpdFRpbWUoKExvbmcpbmV3VmFsdWUpOworCQkJCXJldHVybjsKKwkJCWNhc2UgTGFiZWxzUGFja2FnZS5UUkFOU1BPUlRfUkVMQVRJT05TSElQX0xBQkVMX19TVEFSVF9VUF9ERUxBWToKKwkJCQlzZXRTdGFydFVwRGVsYXkoKExvbmcpbmV3VmFsdWUpOworCQkJCXJldHVybjsKKwkJfQorCQlzdXBlci5lU2V0KGZlYXR1cmVJRCwgbmV3VmFsdWUpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBlVW5zZXQoaW50IGZlYXR1cmVJRCkgeworCQlzd2l0Y2ggKGZlYXR1cmVJRCkgeworCQkJY2FzZSBMYWJlbHNQYWNrYWdlLlRSQU5TUE9SVF9SRUxBVElPTlNISVBfTEFCRUxfX1RSQU5TUE9SVF9NT0RFOgorCQkJCXNldFRyYW5zcG9ydE1vZGUoVFJBTlNQT1JUX01PREVfRURFRkFVTFQpOworCQkJCXJldHVybjsKKwkJCWNhc2UgTGFiZWxzUGFja2FnZS5UUkFOU1BPUlRfUkVMQVRJT05TSElQX0xBQkVMX19QT1BVTEFUSU9OX0lERU5USUZJRVI6CisJCQkJc2V0UG9wdWxhdGlvbklkZW50aWZpZXIoUE9QVUxBVElPTl9JREVOVElGSUVSX0VERUZBVUxUKTsKKwkJCQlyZXR1cm47CisJCQljYXNlIExhYmVsc1BhY2thZ2UuVFJBTlNQT1JUX1JFTEFUSU9OU0hJUF9MQUJFTF9fVFJBTlNQT1JUX0lERU5USUZJRVI6CisJCQkJc2V0VHJhbnNwb3J0SWRlbnRpZmllcihUUkFOU1BPUlRfSURFTlRJRklFUl9FREVGQVVMVCk7CisJCQkJcmV0dXJuOworCQkJY2FzZSBMYWJlbHNQYWNrYWdlLlRSQU5TUE9SVF9SRUxBVElPTlNISVBfTEFCRUxfX1JBVEVfVElNRV9QRVJJT0Q6CisJCQkJc2V0UmF0ZVRpbWVQZXJpb2QoUkFURV9USU1FX1BFUklPRF9FREVGQVVMVCk7CisJCQkJcmV0dXJuOworCQkJY2FzZSBMYWJlbHNQYWNrYWdlLlRSQU5TUE9SVF9SRUxBVElPTlNISVBfTEFCRUxfX01BWElNVU1fREVQQVJUVVJFX0NBUEFDSVRZOgorCQkJCXNldE1heGltdW1EZXBhcnR1cmVDYXBhY2l0eShNQVhJTVVNX0RFUEFSVFVSRV9DQVBBQ0lUWV9FREVGQVVMVCk7CisJCQkJcmV0dXJuOworCQkJY2FzZSBMYWJlbHNQYWNrYWdlLlRSQU5TUE9SVF9SRUxBVElPTlNISVBfTEFCRUxfX01BWElNVU1fQ0FQQUNJVFk6CisJCQkJc2V0TWF4aW11bUNhcGFjaXR5KE1BWElNVU1fQ0FQQUNJVFlfRURFRkFVTFQpOworCQkJCXJldHVybjsKKwkJCWNhc2UgTGFiZWxzUGFja2FnZS5UUkFOU1BPUlRfUkVMQVRJT05TSElQX0xBQkVMX19UUkFOU0lUX1RJTUU6CisJCQkJc2V0VHJhbnNpdFRpbWUoVFJBTlNJVF9USU1FX0VERUZBVUxUKTsKKwkJCQlyZXR1cm47CisJCQljYXNlIExhYmVsc1BhY2thZ2UuVFJBTlNQT1JUX1JFTEFUSU9OU0hJUF9MQUJFTF9fU1RBUlRfVVBfREVMQVk6CisJCQkJc2V0U3RhcnRVcERlbGF5KFNUQVJUX1VQX0RFTEFZX0VERUZBVUxUKTsKKwkJCQlyZXR1cm47CisJCX0KKwkJc3VwZXIuZVVuc2V0KGZlYXR1cmVJRCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBib29sZWFuIGVJc1NldChpbnQgZmVhdHVyZUlEKSB7CisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7CisJCQljYXNlIExhYmVsc1BhY2thZ2UuVFJBTlNQT1JUX1JFTEFUSU9OU0hJUF9MQUJFTF9fVFJBTlNQT1JUX01PREU6CisJCQkJcmV0dXJuIHRyYW5zcG9ydE1vZGUgIT0gVFJBTlNQT1JUX01PREVfRURFRkFVTFQ7CisJCQljYXNlIExhYmVsc1BhY2thZ2UuVFJBTlNQT1JUX1JFTEFUSU9OU0hJUF9MQUJFTF9fUE9QVUxBVElPTl9JREVOVElGSUVSOgorCQkJCXJldHVybiBQT1BVTEFUSU9OX0lERU5USUZJRVJfRURFRkFVTFQgPT0gbnVsbCA/IHBvcHVsYXRpb25JZGVudGlmaWVyICE9IG51bGwgOiAhUE9QVUxBVElPTl9JREVOVElGSUVSX0VERUZBVUxULmVxdWFscyhwb3B1bGF0aW9uSWRlbnRpZmllcik7CisJCQljYXNlIExhYmVsc1BhY2thZ2UuVFJBTlNQT1JUX1JFTEFUSU9OU0hJUF9MQUJFTF9fVFJBTlNQT1JUX0lERU5USUZJRVI6CisJCQkJcmV0dXJuIFRSQU5TUE9SVF9JREVOVElGSUVSX0VERUZBVUxUID09IG51bGwgPyB0cmFuc3BvcnRJZGVudGlmaWVyICE9IG51bGwgOiAhVFJBTlNQT1JUX0lERU5USUZJRVJfRURFRkFVTFQuZXF1YWxzKHRyYW5zcG9ydElkZW50aWZpZXIpOworCQkJY2FzZSBMYWJlbHNQYWNrYWdlLlRSQU5TUE9SVF9SRUxBVElPTlNISVBfTEFCRUxfX0NVUlJFTlRfVFJBTlNQT1JUX1JFTEFUSU9OU0hJUF9MQUJFTF9WQUxVRToKKwkJCQlyZXR1cm4gZ2V0Q3VycmVudFRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsVmFsdWUoKSAhPSBudWxsOworCQkJY2FzZSBMYWJlbHNQYWNrYWdlLlRSQU5TUE9SVF9SRUxBVElPTlNISVBfTEFCRUxfX1JBVEVfVElNRV9QRVJJT0Q6CisJCQkJcmV0dXJuIHJhdGVUaW1lUGVyaW9kICE9IFJBVEVfVElNRV9QRVJJT0RfRURFRkFVTFQ7CisJCQljYXNlIExhYmVsc1BhY2thZ2UuVFJBTlNQT1JUX1JFTEFUSU9OU0hJUF9MQUJFTF9fREVQQVJUVVJFX0NBUEFDSVRZOgorCQkJCXJldHVybiBnZXREZXBhcnR1cmVDYXBhY2l0eSgpICE9IERFUEFSVFVSRV9DQVBBQ0lUWV9FREVGQVVMVDsKKwkJCWNhc2UgTGFiZWxzUGFja2FnZS5UUkFOU1BPUlRfUkVMQVRJT05TSElQX0xBQkVMX19NQVhJTVVNX0RFUEFSVFVSRV9DQVBBQ0lUWToKKwkJCQlyZXR1cm4gbWF4aW11bURlcGFydHVyZUNhcGFjaXR5ICE9IE1BWElNVU1fREVQQVJUVVJFX0NBUEFDSVRZX0VERUZBVUxUOworCQkJY2FzZSBMYWJlbHNQYWNrYWdlLlRSQU5TUE9SVF9SRUxBVElPTlNISVBfTEFCRUxfX0NBUEFDSVRZOgorCQkJCXJldHVybiBnZXRDYXBhY2l0eSgpICE9IENBUEFDSVRZX0VERUZBVUxUOworCQkJY2FzZSBMYWJlbHNQYWNrYWdlLlRSQU5TUE9SVF9SRUxBVElPTlNISVBfTEFCRUxfX01BWElNVU1fQ0FQQUNJVFk6CisJCQkJcmV0dXJuIG1heGltdW1DYXBhY2l0eSAhPSBNQVhJTVVNX0NBUEFDSVRZX0VERUZBVUxUOworCQkJY2FzZSBMYWJlbHNQYWNrYWdlLlRSQU5TUE9SVF9SRUxBVElPTlNISVBfTEFCRUxfX1RSQU5TSVRfVElNRToKKwkJCQlyZXR1cm4gdHJhbnNpdFRpbWUgIT0gVFJBTlNJVF9USU1FX0VERUZBVUxUOworCQkJY2FzZSBMYWJlbHNQYWNrYWdlLlRSQU5TUE9SVF9SRUxBVElPTlNISVBfTEFCRUxfX1NUQVJUX1VQX0RFTEFZOgorCQkJCXJldHVybiBzdGFydFVwRGVsYXkgIT0gU1RBUlRfVVBfREVMQVlfRURFRkFVTFQ7CisJCX0KKwkJcmV0dXJuIHN1cGVyLmVJc1NldChmZWF0dXJlSUQpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIFN0cmluZyB0b1N0cmluZygpIHsKKwkJaWYgKGVJc1Byb3h5KCkpCisJCQlyZXR1cm4gc3VwZXIudG9TdHJpbmcoKTsKKwkJU3RyaW5nQnVmZmVyIHJlc3VsdCA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKKwkJcmVzdWx0LmFwcGVuZChnZXRUcmFuc3BvcnRNb2RlKCkpOworCQlyZXN1bHQuYXBwZW5kKCIsICIpOworCQlyZXN1bHQuYXBwZW5kKGdldFBvcHVsYXRpb25JZGVudGlmaWVyKCkpOworCQlyZXN1bHQuYXBwZW5kKCIsIFwiIik7CisJCXJlc3VsdC5hcHBlbmQoZ2V0VHJhbnNwb3J0SWRlbnRpZmllcigpKTsKKwkJcmVzdWx0LmFwcGVuZCgiXCIgIik7CisJCXJlc3VsdC5hcHBlbmQoZ2V0Q3VycmVudFRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsVmFsdWUoKS50b1N0cmluZygpKTsKKwkJcmV0dXJuIHJlc3VsdC50b1N0cmluZygpOworCX0gLy8gdG9TdHJpbmcKKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmltcGwuRHluYW1pY0xhYmVsSW1wbCNzYW5lKCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgYm9vbGVhbiBzYW5lKCkgeworCQlib29sZWFuIHJldFZhbHVlID0gc3VwZXIuc2FuZSgpOworCisJCXJldFZhbHVlID0gcmV0VmFsdWUgJiYgZ2V0UmF0ZVRpbWVQZXJpb2QoKSA+PSAwOworCQlhc3NlcnQgcmV0VmFsdWU7CisKKwkJcmV0VmFsdWUgPSByZXRWYWx1ZQorCQkJCSYmIGdldEN1cnJlbnRUcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbFZhbHVlKCkuc2FuZSgpOworCisJCXJldHVybiByZXRWYWx1ZTsKKwl9CisKK30gLy8gVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxJbXBsCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvbGFiZWxzL2ltcGwvVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxWYWx1ZUltcGwuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy9sYWJlbHMvaW1wbC9UcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbFZhbHVlSW1wbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIxYTdjNzcKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvbGFiZWxzL2ltcGwvVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxWYWx1ZUltcGwuamF2YQpAQCAtMCwwICsxLDE4NSBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5pbXBsOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5pbXBsLkVOb3RpZmljYXRpb25JbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5pbXBsLkxhYmVsVmFsdWVJbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLkxhYmVsc1BhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxWYWx1ZTsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiBBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+VHJhbnNwb3J0IFJlbGF0aW9uc2hpcCBMYWJlbCBWYWx1ZTwvYj48L2VtPicuCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIDxwPgorICogVGhlIGZvbGxvd2luZyBmZWF0dXJlcyBhcmUgaW1wbGVtZW50ZWQ6CisgKiA8dWw+CisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuaW1wbC5UcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbFZhbHVlSW1wbCNnZXRBdmFpbGFibGVEZXBhcnR1cmVDYXBhY2l0eVByb3BvcnRpb24gPGVtPkF2YWlsYWJsZSBEZXBhcnR1cmUgQ2FwYWNpdHkgUHJvcG9ydGlvbjwvZW0+fTwvbGk+CisgKiA8L3VsPgorICogPC9wPgorICoKKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIFRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsVmFsdWVJbXBsIGV4dGVuZHMgTGFiZWxWYWx1ZUltcGwKKwkJaW1wbGVtZW50cyBUcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbFZhbHVlIHsKKwkvKioKKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0QXZhaWxhYmxlRGVwYXJ0dXJlQ2FwYWNpdHlQcm9wb3J0aW9uKCkgPGVtPkF2YWlsYWJsZSBEZXBhcnR1cmUgQ2FwYWNpdHkgUHJvcG9ydGlvbjwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZ2V0QXZhaWxhYmxlRGVwYXJ0dXJlQ2FwYWNpdHlQcm9wb3J0aW9uKCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIGRvdWJsZSBBVkFJTEFCTEVfREVQQVJUVVJFX0NBUEFDSVRZX1BST1BPUlRJT05fRURFRkFVTFQgPSAxLjA7CisKKwkvKioKKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRBdmFpbGFibGVEZXBhcnR1cmVDYXBhY2l0eVByb3BvcnRpb24oKSA8ZW0+QXZhaWxhYmxlIERlcGFydHVyZSBDYXBhY2l0eSBQcm9wb3J0aW9uPC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNnZXRBdmFpbGFibGVEZXBhcnR1cmVDYXBhY2l0eVByb3BvcnRpb24oKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBkb3VibGUgYXZhaWxhYmxlRGVwYXJ0dXJlQ2FwYWNpdHlQcm9wb3J0aW9uID0gQVZBSUxBQkxFX0RFUEFSVFVSRV9DQVBBQ0lUWV9QUk9QT1JUSU9OX0VERUZBVUxUOworCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBUcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbFZhbHVlSW1wbCgpIHsKKwkJc3VwZXIoKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIEVDbGFzcyBlU3RhdGljQ2xhc3MoKSB7CisJCXJldHVybiBMYWJlbHNQYWNrYWdlLkxpdGVyYWxzLlRSQU5TUE9SVF9SRUxBVElPTlNISVBfTEFCRUxfVkFMVUU7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIGRvdWJsZSBnZXRBdmFpbGFibGVEZXBhcnR1cmVDYXBhY2l0eVByb3BvcnRpb24oKSB7CisJCXJldHVybiBhdmFpbGFibGVEZXBhcnR1cmVDYXBhY2l0eVByb3BvcnRpb247CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgc2V0QXZhaWxhYmxlRGVwYXJ0dXJlQ2FwYWNpdHlQcm9wb3J0aW9uKGRvdWJsZSBuZXdBdmFpbGFibGVEZXBhcnR1cmVDYXBhY2l0eVByb3BvcnRpb24pIHsKKwkJZG91YmxlIG9sZEF2YWlsYWJsZURlcGFydHVyZUNhcGFjaXR5UHJvcG9ydGlvbiA9IGF2YWlsYWJsZURlcGFydHVyZUNhcGFjaXR5UHJvcG9ydGlvbjsKKwkJYXZhaWxhYmxlRGVwYXJ0dXJlQ2FwYWNpdHlQcm9wb3J0aW9uID0gbmV3QXZhaWxhYmxlRGVwYXJ0dXJlQ2FwYWNpdHlQcm9wb3J0aW9uOworCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpCisJCQllTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBMYWJlbHNQYWNrYWdlLlRSQU5TUE9SVF9SRUxBVElPTlNISVBfTEFCRUxfVkFMVUVfX0FWQUlMQUJMRV9ERVBBUlRVUkVfQ0FQQUNJVFlfUFJPUE9SVElPTiwgb2xkQXZhaWxhYmxlRGVwYXJ0dXJlQ2FwYWNpdHlQcm9wb3J0aW9uLCBhdmFpbGFibGVEZXBhcnR1cmVDYXBhY2l0eVByb3BvcnRpb24pKTsKKwl9CisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5pbXBsLkxhYmVsVmFsdWVJbXBsI3Jlc2V0KCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCByZXNldCgpIHsKKwkJLy8gTm90aGluZyB0byBkbworCX0KKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5TYW5pdHlDaGVja2VyI3NhbmUoKQorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBib29sZWFuIHNhbmUoKSB7CisJCWJvb2xlYW4gcmV0VmFsdWUgPSB0cnVlOworCisJCXJldFZhbHVlID0gcmV0VmFsdWUgJiYgZ2V0QXZhaWxhYmxlRGVwYXJ0dXJlQ2FwYWNpdHlQcm9wb3J0aW9uKCkgPj0gMCAmJiBnZXRBdmFpbGFibGVEZXBhcnR1cmVDYXBhY2l0eVByb3BvcnRpb24oKTw9IEFWQUlMQUJMRV9ERVBBUlRVUkVfQ0FQQUNJVFlfUFJPUE9SVElPTl9FREVGQVVMVDsKKwkJYXNzZXJ0IHJldFZhbHVlOworCisJCXJldHVybiByZXRWYWx1ZTsKKwl9IC8vIHNhbmUKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgT2JqZWN0IGVHZXQoaW50IGZlYXR1cmVJRCwgYm9vbGVhbiByZXNvbHZlLCBib29sZWFuIGNvcmVUeXBlKSB7CisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7CisJCQljYXNlIExhYmVsc1BhY2thZ2UuVFJBTlNQT1JUX1JFTEFUSU9OU0hJUF9MQUJFTF9WQUxVRV9fQVZBSUxBQkxFX0RFUEFSVFVSRV9DQVBBQ0lUWV9QUk9QT1JUSU9OOgorCQkJCXJldHVybiBnZXRBdmFpbGFibGVEZXBhcnR1cmVDYXBhY2l0eVByb3BvcnRpb24oKTsKKwkJfQorCQlyZXR1cm4gc3VwZXIuZUdldChmZWF0dXJlSUQsIHJlc29sdmUsIGNvcmVUeXBlKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgZVNldChpbnQgZmVhdHVyZUlELCBPYmplY3QgbmV3VmFsdWUpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJCWNhc2UgTGFiZWxzUGFja2FnZS5UUkFOU1BPUlRfUkVMQVRJT05TSElQX0xBQkVMX1ZBTFVFX19BVkFJTEFCTEVfREVQQVJUVVJFX0NBUEFDSVRZX1BST1BPUlRJT046CisJCQkJc2V0QXZhaWxhYmxlRGVwYXJ0dXJlQ2FwYWNpdHlQcm9wb3J0aW9uKChEb3VibGUpbmV3VmFsdWUpOworCQkJCXJldHVybjsKKwkJfQorCQlzdXBlci5lU2V0KGZlYXR1cmVJRCwgbmV3VmFsdWUpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBlVW5zZXQoaW50IGZlYXR1cmVJRCkgeworCQlzd2l0Y2ggKGZlYXR1cmVJRCkgeworCQkJY2FzZSBMYWJlbHNQYWNrYWdlLlRSQU5TUE9SVF9SRUxBVElPTlNISVBfTEFCRUxfVkFMVUVfX0FWQUlMQUJMRV9ERVBBUlRVUkVfQ0FQQUNJVFlfUFJPUE9SVElPTjoKKwkJCQlzZXRBdmFpbGFibGVEZXBhcnR1cmVDYXBhY2l0eVByb3BvcnRpb24oQVZBSUxBQkxFX0RFUEFSVFVSRV9DQVBBQ0lUWV9QUk9QT1JUSU9OX0VERUZBVUxUKTsKKwkJCQlyZXR1cm47CisJCX0KKwkJc3VwZXIuZVVuc2V0KGZlYXR1cmVJRCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBib29sZWFuIGVJc1NldChpbnQgZmVhdHVyZUlEKSB7CisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7CisJCQljYXNlIExhYmVsc1BhY2thZ2UuVFJBTlNQT1JUX1JFTEFUSU9OU0hJUF9MQUJFTF9WQUxVRV9fQVZBSUxBQkxFX0RFUEFSVFVSRV9DQVBBQ0lUWV9QUk9QT1JUSU9OOgorCQkJCXJldHVybiBhdmFpbGFibGVEZXBhcnR1cmVDYXBhY2l0eVByb3BvcnRpb24gIT0gQVZBSUxBQkxFX0RFUEFSVFVSRV9DQVBBQ0lUWV9QUk9QT1JUSU9OX0VERUZBVUxUOworCQl9CisJCXJldHVybiBzdXBlci5lSXNTZXQoZmVhdHVyZUlEKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKSB7CisJCWlmIChlSXNQcm94eSgpKQorCQkJcmV0dXJuIHN1cGVyLnRvU3RyaW5nKCk7CisKKwkJU3RyaW5nQnVmZmVyIHJlc3VsdCA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKKwkJcmVzdWx0LmFwcGVuZCgiIChhdmFpbGFibGUgcHJvcG9ydGlvbjogIik7CisJCXJlc3VsdC5hcHBlbmQoZ2V0QXZhaWxhYmxlRGVwYXJ0dXJlQ2FwYWNpdHlQcm9wb3J0aW9uKCkpOworCQlyZXN1bHQuYXBwZW5kKCcpJyk7CisJCXJldHVybiByZXN1bHQudG9TdHJpbmcoKTsKKwl9IC8vIHRvU3RyaW5nCisKK30gLy8gVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxWYWx1ZUltcGwKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy9sYWJlbHMvcHJlc2VudGF0aW9uL0xhYmVsc0FjdGlvbkJhckNvbnRyaWJ1dG9yLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvbGFiZWxzL3ByZXNlbnRhdGlvbi9MYWJlbHNBY3Rpb25CYXJDb250cmlidXRvci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY4MWRiNjMKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvbGFiZWxzL3ByZXNlbnRhdGlvbi9MYWJlbHNBY3Rpb25CYXJDb250cmlidXRvci5qYXZhCkBAIC0wLDAgKzEsNDMwIEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLnByZXNlbnRhdGlvbjsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OworaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51aS52aWV3ZXIuSVZpZXdlclByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LmRvbWFpbi5FZGl0aW5nRG9tYWluOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LmRvbWFpbi5JRWRpdGluZ0RvbWFpblByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmFjdGlvbi5Db250cm9sQWN0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmFjdGlvbi5DcmVhdGVDaGlsZEFjdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5hY3Rpb24uQ3JlYXRlU2libGluZ0FjdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5hY3Rpb24uRWRpdGluZ0RvbWFpbkFjdGlvbkJhckNvbnRyaWJ1dG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmFjdGlvbi5Mb2FkUmVzb3VyY2VBY3Rpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkuYWN0aW9uLlZhbGlkYXRlQWN0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5BY3Rpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLkFjdGlvbkNvbnRyaWJ1dGlvbkl0ZW07CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklBY3Rpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklDb250cmlidXRpb25JdGVtOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JQ29udHJpYnV0aW9uTWFuYWdlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSU1lbnVMaXN0ZW5lcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSU1lbnVNYW5hZ2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JVG9vbEJhck1hbmFnZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLk1lbnVNYW5hZ2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5TZXBhcmF0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLlN1YkNvbnRyaWJ1dGlvbkl0ZW07CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb25Qcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTdHJ1Y3R1cmVkU2VsZWN0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuU2VsZWN0aW9uQ2hhbmdlZEV2ZW50OworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuVmlld2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuZWRnZXMucHJvdmlkZXIuRGVmaW5pdGlvbnNFZGl0UGx1Z2luOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklFZGl0b3JQYXJ0OworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLlBhcnRJbml0RXhjZXB0aW9uOworCisvKioKKyAqIFRoaXMgaXMgdGhlIGFjdGlvbiBiYXIgY29udHJpYnV0b3IgZm9yIHRoZSBMYWJlbHMgbW9kZWwgZWRpdG9yLgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgTGFiZWxzQWN0aW9uQmFyQ29udHJpYnV0b3IKKwlleHRlbmRzIEVkaXRpbmdEb21haW5BY3Rpb25CYXJDb250cmlidXRvcgorCWltcGxlbWVudHMgSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lciB7CisJLyoqCisJICogVGhpcyBrZWVwcyB0cmFjayBvZiB0aGUgYWN0aXZlIGVkaXRvci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgSUVkaXRvclBhcnQgYWN0aXZlRWRpdG9yUGFydDsKKworCS8qKgorCSAqIFRoaXMga2VlcHMgdHJhY2sgb2YgdGhlIGN1cnJlbnQgc2VsZWN0aW9uIHByb3ZpZGVyLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBJU2VsZWN0aW9uUHJvdmlkZXIgc2VsZWN0aW9uUHJvdmlkZXI7CisKKwkvKioKKwkgKiBUaGlzIGFjdGlvbiBvcGVucyB0aGUgUHJvcGVydGllcyB2aWV3LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBJQWN0aW9uIHNob3dQcm9wZXJ0aWVzVmlld0FjdGlvbiA9CisJCW5ldyBBY3Rpb24oRGVmaW5pdGlvbnNFZGl0UGx1Z2luLklOU1RBTkNFLmdldFN0cmluZygiX1VJX1Nob3dQcm9wZXJ0aWVzVmlld19tZW51X2l0ZW0iKSkgLy8kTk9OLU5MUy0xJAorCQl7CisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyB2b2lkIHJ1bigpIHsKKwkJCQl0cnkgeworCQkJCQlnZXRQYWdlKCkuc2hvd1ZpZXcoIm9yZy5lY2xpcHNlLnVpLnZpZXdzLlByb3BlcnR5U2hlZXQiKTsgLy8kTk9OLU5MUy0xJAorCQkJCX0KKwkJCQljYXRjaCAoUGFydEluaXRFeGNlcHRpb24gZXhjZXB0aW9uKSB7CisJCQkJCURlZmluaXRpb25zRWRpdFBsdWdpbi5JTlNUQU5DRS5sb2coZXhjZXB0aW9uKTsKKwkJCQl9CisJCQl9CisJCX07CisKKwkvKioKKwkgKiBUaGlzIGFjdGlvbiByZWZyZXNoZXMgdGhlIHZpZXdlciBvZiB0aGUgY3VycmVudCBlZGl0b3IgaWYgdGhlIGVkaXRvcgorCSAqIGltcGxlbWVudHMge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5jb21tb24udWkudmlld2VyLklWaWV3ZXJQcm92aWRlcn0uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIElBY3Rpb24gcmVmcmVzaFZpZXdlckFjdGlvbiA9CisJCW5ldyBBY3Rpb24oRGVmaW5pdGlvbnNFZGl0UGx1Z2luLklOU1RBTkNFLmdldFN0cmluZygiX1VJX1JlZnJlc2hWaWV3ZXJfbWVudV9pdGVtIikpIC8vJE5PTi1OTFMtMSQKKwkJeworCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgYm9vbGVhbiBpc0VuYWJsZWQoKSB7CisJCQkJcmV0dXJuIGFjdGl2ZUVkaXRvclBhcnQgaW5zdGFuY2VvZiBJVmlld2VyUHJvdmlkZXI7CisJCQl9CisKKwkJCUBPdmVycmlkZQorCQkJcHVibGljIHZvaWQgcnVuKCkgeworCQkJCWlmIChhY3RpdmVFZGl0b3JQYXJ0IGluc3RhbmNlb2YgSVZpZXdlclByb3ZpZGVyKSB7CisJCQkJCVZpZXdlciB2aWV3ZXIgPSAoKElWaWV3ZXJQcm92aWRlcilhY3RpdmVFZGl0b3JQYXJ0KS5nZXRWaWV3ZXIoKTsKKwkJCQkJaWYgKHZpZXdlciAhPSBudWxsKSB7CisJCQkJCQl2aWV3ZXIucmVmcmVzaCgpOworCQkJCQl9CisJCQkJfQorCQkJfQorCQl9OworCisJLyoqCisJICogVGhpcyB3aWxsIGNvbnRhaW4gb25lIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5hY3Rpb24uQ3JlYXRlQ2hpbGRBY3Rpb259IGNvcnJlc3BvbmRpbmcgdG8gZWFjaCBkZXNjcmlwdG9yCisJICogZ2VuZXJhdGVkIGZvciB0aGUgY3VycmVudCBzZWxlY3Rpb24gYnkgdGhlIGl0ZW0gcHJvdmlkZXIuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIENvbGxlY3Rpb248SUFjdGlvbj4gY3JlYXRlQ2hpbGRBY3Rpb25zOworCisJLyoqCisJICogVGhpcyBpcyB0aGUgbWVudSBtYW5hZ2VyIGludG8gd2hpY2ggbWVudSBjb250cmlidXRpb24gaXRlbXMgc2hvdWxkIGJlIGFkZGVkIGZvciBDcmVhdGVDaGlsZCBhY3Rpb25zLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBJTWVudU1hbmFnZXIgY3JlYXRlQ2hpbGRNZW51TWFuYWdlcjsKKworCS8qKgorCSAqIFRoaXMgd2lsbCBjb250YWluIG9uZSB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkuYWN0aW9uLkNyZWF0ZVNpYmxpbmdBY3Rpb259IGNvcnJlc3BvbmRpbmcgdG8gZWFjaCBkZXNjcmlwdG9yCisJICogZ2VuZXJhdGVkIGZvciB0aGUgY3VycmVudCBzZWxlY3Rpb24gYnkgdGhlIGl0ZW0gcHJvdmlkZXIuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIENvbGxlY3Rpb248SUFjdGlvbj4gY3JlYXRlU2libGluZ0FjdGlvbnM7CisKKwkvKioKKwkgKiBUaGlzIGlzIHRoZSBtZW51IG1hbmFnZXIgaW50byB3aGljaCBtZW51IGNvbnRyaWJ1dGlvbiBpdGVtcyBzaG91bGQgYmUgYWRkZWQgZm9yIENyZWF0ZVNpYmxpbmcgYWN0aW9ucy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgSU1lbnVNYW5hZ2VyIGNyZWF0ZVNpYmxpbmdNZW51TWFuYWdlcjsKKworCS8qKgorCSAqIFRoaXMgY3JlYXRlcyBhbiBpbnN0YW5jZSBvZiB0aGUgY29udHJpYnV0b3IuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIExhYmVsc0FjdGlvbkJhckNvbnRyaWJ1dG9yKCkgeworCQlzdXBlcihBRERJVElPTlNfTEFTVF9TVFlMRSk7CisJCWxvYWRSZXNvdXJjZUFjdGlvbiA9IG5ldyBMb2FkUmVzb3VyY2VBY3Rpb24oKTsKKwkJdmFsaWRhdGVBY3Rpb24gPSBuZXcgVmFsaWRhdGVBY3Rpb24oKTsKKwkJY29udHJvbEFjdGlvbiA9IG5ldyBDb250cm9sQWN0aW9uKCk7CisJfQorCisJLyoqCisJICogVGhpcyBhZGRzIFNlcGFyYXRvcnMgZm9yIGVkaXRvciBhZGRpdGlvbnMgdG8gdGhlIHRvb2wgYmFyLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGNvbnRyaWJ1dGVUb1Rvb2xCYXIoSVRvb2xCYXJNYW5hZ2VyIHRvb2xCYXJNYW5hZ2VyKSB7CisJCXRvb2xCYXJNYW5hZ2VyLmFkZChuZXcgU2VwYXJhdG9yKCJsYWJlbHMtc2V0dGluZ3MiKSk7IC8vJE5PTi1OTFMtMSQKKwkJdG9vbEJhck1hbmFnZXIuYWRkKG5ldyBTZXBhcmF0b3IoImxhYmVscy1hZGRpdGlvbnMiKSk7IC8vJE5PTi1OTFMtMSQKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFkZHMgdG8gdGhlIG1lbnUgYmFyIGEgbWVudSBhbmQgc29tZSBzZXBhcmF0b3JzIGZvciBlZGl0b3IgYWRkaXRpb25zLAorCSAqIGFzIHdlbGwgYXMgdGhlIHN1Yi1tZW51cyBmb3Igb2JqZWN0IGNyZWF0aW9uIGl0ZW1zLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGNvbnRyaWJ1dGVUb01lbnUoSU1lbnVNYW5hZ2VyIG1lbnVNYW5hZ2VyKSB7CisJCXN1cGVyLmNvbnRyaWJ1dGVUb01lbnUobWVudU1hbmFnZXIpOworCisJCUlNZW51TWFuYWdlciBzdWJtZW51TWFuYWdlciA9IG5ldyBNZW51TWFuYWdlcihEZWZpbml0aW9uc0VkaXRQbHVnaW4uSU5TVEFOQ0UuZ2V0U3RyaW5nKCJfVUlfTGFiZWxzRWRpdG9yX21lbnUiKSwgIm9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzTWVudUlEIik7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAorCQltZW51TWFuYWdlci5pbnNlcnRBZnRlcigiYWRkaXRpb25zIiwgc3VibWVudU1hbmFnZXIpOyAvLyROT04tTkxTLTEkCisJCXN1Ym1lbnVNYW5hZ2VyLmFkZChuZXcgU2VwYXJhdG9yKCJzZXR0aW5ncyIpKTsgLy8kTk9OLU5MUy0xJAorCQlzdWJtZW51TWFuYWdlci5hZGQobmV3IFNlcGFyYXRvcigiYWN0aW9ucyIpKTsgLy8kTk9OLU5MUy0xJAorCQlzdWJtZW51TWFuYWdlci5hZGQobmV3IFNlcGFyYXRvcigiYWRkaXRpb25zIikpOyAvLyROT04tTkxTLTEkCisJCXN1Ym1lbnVNYW5hZ2VyLmFkZChuZXcgU2VwYXJhdG9yKCJhZGRpdGlvbnMtZW5kIikpOyAvLyROT04tTkxTLTEkCisKKwkJLy8gUHJlcGFyZSBmb3IgQ3JlYXRlQ2hpbGQgaXRlbSBhZGRpdGlvbiBvciByZW1vdmFsLgorCQkvLworCQljcmVhdGVDaGlsZE1lbnVNYW5hZ2VyID0gbmV3IE1lbnVNYW5hZ2VyKERlZmluaXRpb25zRWRpdFBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoIl9VSV9DcmVhdGVDaGlsZF9tZW51X2l0ZW0iKSk7IC8vJE5PTi1OTFMtMSQKKwkJc3VibWVudU1hbmFnZXIuaW5zZXJ0QmVmb3JlKCJhZGRpdGlvbnMiLCBjcmVhdGVDaGlsZE1lbnVNYW5hZ2VyKTsgLy8kTk9OLU5MUy0xJAorCisJCS8vIFByZXBhcmUgZm9yIENyZWF0ZVNpYmxpbmcgaXRlbSBhZGRpdGlvbiBvciByZW1vdmFsLgorCQkvLworCQljcmVhdGVTaWJsaW5nTWVudU1hbmFnZXIgPSBuZXcgTWVudU1hbmFnZXIoRGVmaW5pdGlvbnNFZGl0UGx1Z2luLklOU1RBTkNFLmdldFN0cmluZygiX1VJX0NyZWF0ZVNpYmxpbmdfbWVudV9pdGVtIikpOyAvLyROT04tTkxTLTEkCisJCXN1Ym1lbnVNYW5hZ2VyLmluc2VydEJlZm9yZSgiYWRkaXRpb25zIiwgY3JlYXRlU2libGluZ01lbnVNYW5hZ2VyKTsgLy8kTk9OLU5MUy0xJAorCisJCS8vIEZvcmNlIGFuIHVwZGF0ZSBiZWNhdXNlIEVjbGlwc2UgaGlkZXMgZW1wdHkgbWVudXMgbm93LgorCQkvLworCQlzdWJtZW51TWFuYWdlci5hZGRNZW51TGlzdGVuZXIKKwkJCShuZXcgSU1lbnVMaXN0ZW5lcigpIHsKKwkJCQkgcHVibGljIHZvaWQgbWVudUFib3V0VG9TaG93KElNZW51TWFuYWdlciBtZW51TWFuYWdlcikgeworCQkJCQkgbWVudU1hbmFnZXIudXBkYXRlQWxsKHRydWUpOworCQkJCSB9CisJCQkgfSk7CisKKwkJYWRkR2xvYmFsQWN0aW9ucyhzdWJtZW51TWFuYWdlcik7CisJfQorCisJLyoqCisJICogV2hlbiB0aGUgYWN0aXZlIGVkaXRvciBjaGFuZ2VzLCB0aGlzIHJlbWVtYmVycyB0aGUgY2hhbmdlIGFuZCByZWdpc3RlcnMgd2l0aCBpdCBhcyBhIHNlbGVjdGlvbiBwcm92aWRlci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBzZXRBY3RpdmVFZGl0b3IoSUVkaXRvclBhcnQgcGFydCkgeworCQlzdXBlci5zZXRBY3RpdmVFZGl0b3IocGFydCk7CisJCWFjdGl2ZUVkaXRvclBhcnQgPSBwYXJ0OworCisJCS8vIFN3aXRjaCB0byB0aGUgbmV3IHNlbGVjdGlvbiBwcm92aWRlci4KKwkJLy8KKwkJaWYgKHNlbGVjdGlvblByb3ZpZGVyICE9IG51bGwpIHsKKwkJCXNlbGVjdGlvblByb3ZpZGVyLnJlbW92ZVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcih0aGlzKTsKKwkJfQorCQlpZiAocGFydCA9PSBudWxsKSB7CisJCQlzZWxlY3Rpb25Qcm92aWRlciA9IG51bGw7CisJCX0KKwkJZWxzZSB7CisJCQlzZWxlY3Rpb25Qcm92aWRlciA9IHBhcnQuZ2V0U2l0ZSgpLmdldFNlbGVjdGlvblByb3ZpZGVyKCk7CisJCQlzZWxlY3Rpb25Qcm92aWRlci5hZGRTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIodGhpcyk7CisKKwkJCS8vIEZha2UgYSBzZWxlY3Rpb24gY2hhbmdlZCBldmVudCB0byB1cGRhdGUgdGhlIG1lbnVzLgorCQkJLy8KKwkJCWlmIChzZWxlY3Rpb25Qcm92aWRlci5nZXRTZWxlY3Rpb24oKSAhPSBudWxsKSB7CisJCQkJc2VsZWN0aW9uQ2hhbmdlZChuZXcgU2VsZWN0aW9uQ2hhbmdlZEV2ZW50KHNlbGVjdGlvblByb3ZpZGVyLCBzZWxlY3Rpb25Qcm92aWRlci5nZXRTZWxlY3Rpb24oKSkpOworCQkJfQorCQl9CisJfQorCisJLyoqCisJICogVGhpcyBpbXBsZW1lbnRzIHtAbGluayBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXJ9LAorCSAqIGhhbmRsaW5nIHtAbGluayBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlNlbGVjdGlvbkNoYW5nZWRFdmVudH1zIGJ5IHF1ZXJ5aW5nIGZvciB0aGUgY2hpbGRyZW4gYW5kIHNpYmxpbmdzCisJICogdGhhdCBjYW4gYmUgYWRkZWQgdG8gdGhlIHNlbGVjdGVkIG9iamVjdCBhbmQgdXBkYXRpbmcgdGhlIG1lbnVzIGFjY29yZGluZ2x5LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIHNlbGVjdGlvbkNoYW5nZWQoU2VsZWN0aW9uQ2hhbmdlZEV2ZW50IGV2ZW50KSB7CisJCS8vIFJlbW92ZSBhbnkgbWVudSBpdGVtcyBmb3Igb2xkIHNlbGVjdGlvbi4KKwkJLy8KKwkJaWYgKGNyZWF0ZUNoaWxkTWVudU1hbmFnZXIgIT0gbnVsbCkgeworCQkJZGVwb3B1bGF0ZU1hbmFnZXIoY3JlYXRlQ2hpbGRNZW51TWFuYWdlciwgY3JlYXRlQ2hpbGRBY3Rpb25zKTsKKwkJfQorCQlpZiAoY3JlYXRlU2libGluZ01lbnVNYW5hZ2VyICE9IG51bGwpIHsKKwkJCWRlcG9wdWxhdGVNYW5hZ2VyKGNyZWF0ZVNpYmxpbmdNZW51TWFuYWdlciwgY3JlYXRlU2libGluZ0FjdGlvbnMpOworCQl9CisKKwkJLy8gUXVlcnkgdGhlIG5ldyBzZWxlY3Rpb24gZm9yIGFwcHJvcHJpYXRlIG5ldyBjaGlsZC9zaWJsaW5nIGRlc2NyaXB0b3JzCisJCS8vCisJCUNvbGxlY3Rpb248Pz4gbmV3Q2hpbGREZXNjcmlwdG9ycyA9IG51bGw7CisJCUNvbGxlY3Rpb248Pz4gbmV3U2libGluZ0Rlc2NyaXB0b3JzID0gbnVsbDsKKworCQlJU2VsZWN0aW9uIHNlbGVjdGlvbiA9IGV2ZW50LmdldFNlbGVjdGlvbigpOworCQlpZiAoc2VsZWN0aW9uIGluc3RhbmNlb2YgSVN0cnVjdHVyZWRTZWxlY3Rpb24gJiYgKChJU3RydWN0dXJlZFNlbGVjdGlvbilzZWxlY3Rpb24pLnNpemUoKSA9PSAxKSB7CisJCQlPYmplY3Qgb2JqZWN0ID0gKChJU3RydWN0dXJlZFNlbGVjdGlvbilzZWxlY3Rpb24pLmdldEZpcnN0RWxlbWVudCgpOworCisJCQlFZGl0aW5nRG9tYWluIGRvbWFpbiA9ICgoSUVkaXRpbmdEb21haW5Qcm92aWRlcilhY3RpdmVFZGl0b3JQYXJ0KS5nZXRFZGl0aW5nRG9tYWluKCk7CisKKwkJCW5ld0NoaWxkRGVzY3JpcHRvcnMgPSBkb21haW4uZ2V0TmV3Q2hpbGREZXNjcmlwdG9ycyhvYmplY3QsIG51bGwpOworCQkJbmV3U2libGluZ0Rlc2NyaXB0b3JzID0gZG9tYWluLmdldE5ld0NoaWxkRGVzY3JpcHRvcnMobnVsbCwgb2JqZWN0KTsKKwkJfQorCisJCS8vIEdlbmVyYXRlIGFjdGlvbnMgZm9yIHNlbGVjdGlvbjsgcG9wdWxhdGUgYW5kIHJlZHJhdyB0aGUgbWVudXMuCisJCS8vCisJCWNyZWF0ZUNoaWxkQWN0aW9ucyA9IGdlbmVyYXRlQ3JlYXRlQ2hpbGRBY3Rpb25zKG5ld0NoaWxkRGVzY3JpcHRvcnMsIHNlbGVjdGlvbik7CisJCWNyZWF0ZVNpYmxpbmdBY3Rpb25zID0gZ2VuZXJhdGVDcmVhdGVTaWJsaW5nQWN0aW9ucyhuZXdTaWJsaW5nRGVzY3JpcHRvcnMsIHNlbGVjdGlvbik7CisKKwkJaWYgKGNyZWF0ZUNoaWxkTWVudU1hbmFnZXIgIT0gbnVsbCkgeworCQkJcG9wdWxhdGVNYW5hZ2VyKGNyZWF0ZUNoaWxkTWVudU1hbmFnZXIsIGNyZWF0ZUNoaWxkQWN0aW9ucywgbnVsbCk7CisJCQljcmVhdGVDaGlsZE1lbnVNYW5hZ2VyLnVwZGF0ZSh0cnVlKTsKKwkJfQorCQlpZiAoY3JlYXRlU2libGluZ01lbnVNYW5hZ2VyICE9IG51bGwpIHsKKwkJCXBvcHVsYXRlTWFuYWdlcihjcmVhdGVTaWJsaW5nTWVudU1hbmFnZXIsIGNyZWF0ZVNpYmxpbmdBY3Rpb25zLCBudWxsKTsKKwkJCWNyZWF0ZVNpYmxpbmdNZW51TWFuYWdlci51cGRhdGUodHJ1ZSk7CisJCX0KKwl9CisKKwkvKioKKwkgKiBUaGlzIGdlbmVyYXRlcyBhIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5hY3Rpb24uQ3JlYXRlQ2hpbGRBY3Rpb259IGZvciBlYWNoIG9iamVjdCBpbiA8Y29kZT5kZXNjcmlwdG9yczwvY29kZT4sCisJICogYW5kIHJldHVybnMgdGhlIGNvbGxlY3Rpb24gb2YgdGhlc2UgYWN0aW9ucy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgQ29sbGVjdGlvbjxJQWN0aW9uPiBnZW5lcmF0ZUNyZWF0ZUNoaWxkQWN0aW9ucyhDb2xsZWN0aW9uPD8+IGRlc2NyaXB0b3JzLCBJU2VsZWN0aW9uIHNlbGVjdGlvbikgeworCQlDb2xsZWN0aW9uPElBY3Rpb24+IGFjdGlvbnMgPSBuZXcgQXJyYXlMaXN0PElBY3Rpb24+KCk7CisJCWlmIChkZXNjcmlwdG9ycyAhPSBudWxsKSB7CisJCQlmb3IgKE9iamVjdCBkZXNjcmlwdG9yIDogZGVzY3JpcHRvcnMpIHsKKwkJCQlhY3Rpb25zLmFkZChuZXcgQ3JlYXRlQ2hpbGRBY3Rpb24oYWN0aXZlRWRpdG9yUGFydCwgc2VsZWN0aW9uLCBkZXNjcmlwdG9yKSk7CisJCQl9CisJCX0KKwkJcmV0dXJuIGFjdGlvbnM7CisJfQorCisJLyoqCisJICogVGhpcyBnZW5lcmF0ZXMgYSB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkuYWN0aW9uLkNyZWF0ZVNpYmxpbmdBY3Rpb259IGZvciBlYWNoIG9iamVjdCBpbiA8Y29kZT5kZXNjcmlwdG9yczwvY29kZT4sCisJICogYW5kIHJldHVybnMgdGhlIGNvbGxlY3Rpb24gb2YgdGhlc2UgYWN0aW9ucy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgQ29sbGVjdGlvbjxJQWN0aW9uPiBnZW5lcmF0ZUNyZWF0ZVNpYmxpbmdBY3Rpb25zKENvbGxlY3Rpb248Pz4gZGVzY3JpcHRvcnMsIElTZWxlY3Rpb24gc2VsZWN0aW9uKSB7CisJCUNvbGxlY3Rpb248SUFjdGlvbj4gYWN0aW9ucyA9IG5ldyBBcnJheUxpc3Q8SUFjdGlvbj4oKTsKKwkJaWYgKGRlc2NyaXB0b3JzICE9IG51bGwpIHsKKwkJCWZvciAoT2JqZWN0IGRlc2NyaXB0b3IgOiBkZXNjcmlwdG9ycykgeworCQkJCWFjdGlvbnMuYWRkKG5ldyBDcmVhdGVTaWJsaW5nQWN0aW9uKGFjdGl2ZUVkaXRvclBhcnQsIHNlbGVjdGlvbiwgZGVzY3JpcHRvcikpOworCQkJfQorCQl9CisJCXJldHVybiBhY3Rpb25zOworCX0KKworCS8qKgorCSAqIFRoaXMgcG9wdWxhdGVzIHRoZSBzcGVjaWZpZWQgPGNvZGU+bWFuYWdlcjwvY29kZT4gd2l0aCB7QGxpbmsgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLkFjdGlvbkNvbnRyaWJ1dGlvbkl0ZW19cworCSAqIGJhc2VkIG9uIHRoZSB7QGxpbmsgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklBY3Rpb259cyBjb250YWluZWQgaW4gdGhlIDxjb2RlPmFjdGlvbnM8L2NvZGU+IGNvbGxlY3Rpb24sCisJICogYnkgaW5zZXJ0aW5nIHRoZW0gYmVmb3JlIHRoZSBzcGVjaWZpZWQgY29udHJpYnV0aW9uIGl0ZW0gPGNvZGU+Y29udHJpYnV0aW9uSUQ8L2NvZGU+LgorCSAqIElmIDxjb2RlPmNvbnRyaWJ1dGlvbklEPC9jb2RlPiBpcyA8Y29kZT5udWxsPC9jb2RlPiwgdGhleSBhcmUgc2ltcGx5IGFkZGVkLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIHBvcHVsYXRlTWFuYWdlcihJQ29udHJpYnV0aW9uTWFuYWdlciBtYW5hZ2VyLCBDb2xsZWN0aW9uPD8gZXh0ZW5kcyBJQWN0aW9uPiBhY3Rpb25zLCBTdHJpbmcgY29udHJpYnV0aW9uSUQpIHsKKwkJaWYgKGFjdGlvbnMgIT0gbnVsbCkgeworCQkJZm9yIChJQWN0aW9uIGFjdGlvbiA6IGFjdGlvbnMpIHsKKwkJCQlpZiAoY29udHJpYnV0aW9uSUQgIT0gbnVsbCkgeworCQkJCQltYW5hZ2VyLmluc2VydEJlZm9yZShjb250cmlidXRpb25JRCwgYWN0aW9uKTsKKwkJCQl9CisJCQkJZWxzZSB7CisJCQkJCW1hbmFnZXIuYWRkKGFjdGlvbik7CisJCQkJfQorCQkJfQorCQl9CisJfQorCQkKKwkvKioKKwkgKiBUaGlzIHJlbW92ZXMgZnJvbSB0aGUgc3BlY2lmaWVkIDxjb2RlPm1hbmFnZXI8L2NvZGU+IGFsbCB7QGxpbmsgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLkFjdGlvbkNvbnRyaWJ1dGlvbkl0ZW19cworCSAqIGJhc2VkIG9uIHRoZSB7QGxpbmsgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklBY3Rpb259cyBjb250YWluZWQgaW4gdGhlIDxjb2RlPmFjdGlvbnM8L2NvZGU+IGNvbGxlY3Rpb24uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgZGVwb3B1bGF0ZU1hbmFnZXIoSUNvbnRyaWJ1dGlvbk1hbmFnZXIgbWFuYWdlciwgQ29sbGVjdGlvbjw/IGV4dGVuZHMgSUFjdGlvbj4gYWN0aW9ucykgeworCQlpZiAoYWN0aW9ucyAhPSBudWxsKSB7CisJCQlJQ29udHJpYnV0aW9uSXRlbVtdIGl0ZW1zID0gbWFuYWdlci5nZXRJdGVtcygpOworCQkJZm9yIChpbnQgaSA9IDA7IGkgPCBpdGVtcy5sZW5ndGg7IGkrKykgeworCQkJCS8vIExvb2sgaW50byBTdWJDb250cmlidXRpb25JdGVtcworCQkJCS8vCisJCQkJSUNvbnRyaWJ1dGlvbkl0ZW0gY29udHJpYnV0aW9uSXRlbSA9IGl0ZW1zW2ldOworCQkJCXdoaWxlIChjb250cmlidXRpb25JdGVtIGluc3RhbmNlb2YgU3ViQ29udHJpYnV0aW9uSXRlbSkgeworCQkJCQljb250cmlidXRpb25JdGVtID0gKChTdWJDb250cmlidXRpb25JdGVtKWNvbnRyaWJ1dGlvbkl0ZW0pLmdldElubmVySXRlbSgpOworCQkJCX0KKworCQkJCS8vIERlbGV0ZSB0aGUgQWN0aW9uQ29udHJpYnV0aW9uSXRlbXMgd2l0aCBtYXRjaGluZyBhY3Rpb24uCisJCQkJLy8KKwkJCQlpZiAoY29udHJpYnV0aW9uSXRlbSBpbnN0YW5jZW9mIEFjdGlvbkNvbnRyaWJ1dGlvbkl0ZW0pIHsKKwkJCQkJSUFjdGlvbiBhY3Rpb24gPSAoKEFjdGlvbkNvbnRyaWJ1dGlvbkl0ZW0pY29udHJpYnV0aW9uSXRlbSkuZ2V0QWN0aW9uKCk7CisJCQkJCWlmIChhY3Rpb25zLmNvbnRhaW5zKGFjdGlvbikpIHsKKwkJCQkJCW1hbmFnZXIucmVtb3ZlKGNvbnRyaWJ1dGlvbkl0ZW0pOworCQkJCQl9CisJCQkJfQorCQkJfQorCQl9CisJfQorCisJLyoqCisJICogVGhpcyBwb3B1bGF0ZXMgdGhlIHBvcC11cCBtZW51IGJlZm9yZSBpdCBhcHBlYXJzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIG1lbnVBYm91dFRvU2hvdyhJTWVudU1hbmFnZXIgbWVudU1hbmFnZXIpIHsKKwkJc3VwZXIubWVudUFib3V0VG9TaG93KG1lbnVNYW5hZ2VyKTsKKwkJTWVudU1hbmFnZXIgc3VibWVudU1hbmFnZXIgPSBudWxsOworCisJCXN1Ym1lbnVNYW5hZ2VyID0gbmV3IE1lbnVNYW5hZ2VyKERlZmluaXRpb25zRWRpdFBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoIl9VSV9DcmVhdGVDaGlsZF9tZW51X2l0ZW0iKSk7IC8vJE5PTi1OTFMtMSQKKwkJcG9wdWxhdGVNYW5hZ2VyKHN1Ym1lbnVNYW5hZ2VyLCBjcmVhdGVDaGlsZEFjdGlvbnMsIG51bGwpOworCQltZW51TWFuYWdlci5pbnNlcnRCZWZvcmUoImVkaXQiLCBzdWJtZW51TWFuYWdlcik7IC8vJE5PTi1OTFMtMSQKKworCQlzdWJtZW51TWFuYWdlciA9IG5ldyBNZW51TWFuYWdlcihEZWZpbml0aW9uc0VkaXRQbHVnaW4uSU5TVEFOQ0UuZ2V0U3RyaW5nKCJfVUlfQ3JlYXRlU2libGluZ19tZW51X2l0ZW0iKSk7IC8vJE5PTi1OTFMtMSQKKwkJcG9wdWxhdGVNYW5hZ2VyKHN1Ym1lbnVNYW5hZ2VyLCBjcmVhdGVTaWJsaW5nQWN0aW9ucywgbnVsbCk7CisJCW1lbnVNYW5hZ2VyLmluc2VydEJlZm9yZSgiZWRpdCIsIHN1Ym1lbnVNYW5hZ2VyKTsgLy8kTk9OLU5MUy0xJAorCX0KKworCS8qKgorCSAqIFRoaXMgaW5zZXJ0cyBnbG9iYWwgYWN0aW9ucyBiZWZvcmUgdGhlICJhZGRpdGlvbnMtZW5kIiBzZXBhcmF0b3IuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgYWRkR2xvYmFsQWN0aW9ucyhJTWVudU1hbmFnZXIgbWVudU1hbmFnZXIpIHsKKwkJbWVudU1hbmFnZXIuaW5zZXJ0QWZ0ZXIoImFkZGl0aW9ucy1lbmQiLCBuZXcgU2VwYXJhdG9yKCJ1aS1hY3Rpb25zIikpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKKwkJbWVudU1hbmFnZXIuaW5zZXJ0QWZ0ZXIoInVpLWFjdGlvbnMiLCBzaG93UHJvcGVydGllc1ZpZXdBY3Rpb24pOyAvLyROT04tTkxTLTEkCisKKwkJcmVmcmVzaFZpZXdlckFjdGlvbi5zZXRFbmFibGVkKHJlZnJlc2hWaWV3ZXJBY3Rpb24uaXNFbmFibGVkKCkpOwkJCisJCW1lbnVNYW5hZ2VyLmluc2VydEFmdGVyKCJ1aS1hY3Rpb25zIiwgcmVmcmVzaFZpZXdlckFjdGlvbik7IC8vJE5PTi1OTFMtMSQKKworCQlzdXBlci5hZGRHbG9iYWxBY3Rpb25zKG1lbnVNYW5hZ2VyKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGVuc3VyZXMgdGhhdCBhIGRlbGV0ZSBhY3Rpb24gd2lsbCBjbGVhbiB1cCBhbGwgcmVmZXJlbmNlcyB0byBkZWxldGVkIG9iamVjdHMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIGJvb2xlYW4gcmVtb3ZlQWxsUmVmZXJlbmNlc09uRGVsZXRlKCkgeworCQlyZXR1cm4gdHJ1ZTsKKwl9CisKK30KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy9sYWJlbHMvcHJlc2VudGF0aW9uL0xhYmVsc0VkaXRvci5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL2xhYmVscy9wcmVzZW50YXRpb24vTGFiZWxzRWRpdG9yLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjdlZWUzOAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy9sYWJlbHMvcHJlc2VudGF0aW9uL0xhYmVsc0VkaXRvci5qYXZhCkBAIC0wLDAgKzEsMTUwNiBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5wcmVzZW50YXRpb247CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKK2ltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOworaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW07CitpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbnM7CitpbXBvcnQgamF2YS51dGlsLkV2ZW50T2JqZWN0OworaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOworaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKK2ltcG9ydCBqYXZhLnV0aWwuTGlua2VkSGFzaE1hcDsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuTWFwOworCitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUZpbGU7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSU1hcmtlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUmVzb3VyY2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVJlc291cmNlQ2hhbmdlRXZlbnQ7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVJlc291cmNlQ2hhbmdlTGlzdGVuZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVJlc291cmNlRGVsdGE7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVJlc291cmNlRGVsdGFWaXNpdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLlJlc291cmNlc1BsdWdpbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQ29yZUV4Y2VwdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVBhdGg7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQcm9ncmVzc01vbml0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLk51bGxQcm9ncmVzc01vbml0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5jb21tYW5kLkJhc2ljQ29tbWFuZFN0YWNrOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24uY29tbWFuZC5Db21tYW5kOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24uY29tbWFuZC5Db21tYW5kU3RhY2s7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5jb21tYW5kLkNvbW1hbmRTdGFja0xpc3RlbmVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LkFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnVpLk1hcmtlckhlbHBlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnVpLmVkaXRvci5Qcm9ibGVtRWRpdG9yUGFydDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnVpLnZpZXdlci5JVmlld2VyUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLkJhc2ljRGlhZ25vc3RpYzsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuRGlhZ25vc3RpYzsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuVVJJOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FVmFsaWRhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5wcm92aWRlci5FY29yZUl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5yZXNvdXJjZS5SZXNvdXJjZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUucmVzb3VyY2UuUmVzb3VyY2VTZXQ7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnV0aWwuRUNvbnRlbnRBZGFwdGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS51dGlsLkVjb3JlVXRpbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5kb21haW4uQWRhcHRlckZhY3RvcnlFZGl0aW5nRG9tYWluOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LmRvbWFpbi5FZGl0aW5nRG9tYWluOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LmRvbWFpbi5JRWRpdGluZ0RvbWFpblByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkFkYXB0ZXJGYWN0b3J5SXRlbURlbGVnYXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5Db21wb3NlZEFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLlJlZmxlY3RpdmVJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5yZXNvdXJjZS5SZXNvdXJjZUl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmFjdGlvbi5FZGl0aW5nRG9tYWluQWN0aW9uQmFyQ29udHJpYnV0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkuY2VsbGVkaXRvci5BZGFwdGVyRmFjdG9yeVRyZWVFZGl0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkuZG5kLkVkaXRpbmdEb21haW5WaWV3ZXJEcm9wQWRhcHRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5kbmQuTG9jYWxUcmFuc2ZlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5kbmQuVmlld2VyRHJhZ0FkYXB0ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkucHJvdmlkZXIuQWRhcHRlckZhY3RvcnlDb250ZW50UHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkucHJvdmlkZXIuQWRhcHRlckZhY3RvcnlMYWJlbFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLnByb3ZpZGVyLlVud3JhcHBpbmdTZWxlY3Rpb25Qcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS51dGlsLkVkaXRVSU1hcmtlckhlbHBlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS51dGlsLkVkaXRVSVV0aWw7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkudmlldy5FeHRlbmRlZFByb3BlcnR5U2hlZXRQYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JTWVudUxpc3RlbmVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JTWVudU1hbmFnZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklTdGF0dXNMaW5lTWFuYWdlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSVRvb2xCYXJNYW5hZ2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5NZW51TWFuYWdlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uU2VwYXJhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmRpYWxvZ3MuTWVzc2FnZURpYWxvZzsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5kaWFsb2dzLlByb2dyZXNzTW9uaXRvckRpYWxvZzsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvblByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVN0cnVjdHVyZWRTZWxlY3Rpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5TZWxlY3Rpb25DaGFuZ2VkRXZlbnQ7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5TdHJ1Y3R1cmVkU2VsZWN0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuU3RydWN0dXJlZFZpZXdlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlRyZWVWaWV3ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5WaWV3ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5wcm92aWRlci5Db21tb25JdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGgucHJvdmlkZXIuR3JhcGhJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwucHJvdmlkZXIuTW9kZWxJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIucHJvdmlkZXIuTW9kaWZpZXJJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2NlbmFyaW8ucHJvdmlkZXIuU2NlbmFyaW9JdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2VxdWVuY2VyLnByb3ZpZGVyLlNlcXVlbmNlckl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zb2x2ZXIucHJvdmlkZXIuU29sdmVySXRlbVByb3ZpZGVyQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5lZGdlcy5wcm92aWRlci5EZWZpbml0aW9uc0VkaXRQbHVnaW47CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5lZGdlcy5wcm92aWRlci5FZGdlc0l0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLnByb3ZpZGVyLkxhYmVsc0l0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubm9kZXMucHJvdmlkZXIuTm9kZXNJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLnR5cGVzLnByb3ZpZGVyLlR5cGVzSXRlbVByb3ZpZGVyQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LlNXVDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuY3VzdG9tLkNUYWJGb2xkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmRuZC5ETkQ7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmRuZC5UcmFuc2ZlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLkNvbnRyb2xBZGFwdGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuQ29udHJvbEV2ZW50OworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ncmFwaGljcy5Qb2ludDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuTWVudTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5UcmVlOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklBY3Rpb25CYXJzOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklFZGl0b3JJbnB1dDsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5JRWRpdG9yUGFydDsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5JRWRpdG9yU2l0ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5JUGFydExpc3RlbmVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2hQYXJ0OworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLlBhcnRJbml0RXhjZXB0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLmFjdGlvbnMuV29ya3NwYWNlTW9kaWZ5T3BlcmF0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLmRpYWxvZ3MuU2F2ZUFzRGlhbG9nOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLmlkZS5JR290b01hcmtlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5wYXJ0LkZpbGVFZGl0b3JJbnB1dDsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5wYXJ0Lk11bHRpUGFnZUVkaXRvclBhcnQ7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkudmlld3MuY29udGVudG91dGxpbmUuQ29udGVudE91dGxpbmU7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkudmlld3MuY29udGVudG91dGxpbmUuQ29udGVudE91dGxpbmVQYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLnZpZXdzLmNvbnRlbnRvdXRsaW5lLklDb250ZW50T3V0bGluZVBhZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkudmlld3MucHJvcGVydGllcy5JUHJvcGVydHlTaGVldFBhZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkudmlld3MucHJvcGVydGllcy5Qcm9wZXJ0eVNoZWV0OworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLnZpZXdzLnByb3BlcnRpZXMuUHJvcGVydHlTaGVldFBhZ2U7CisKKworLyoqCisgKiBUaGlzIGlzIGFuIGV4YW1wbGUgb2YgYSBMYWJlbHMgbW9kZWwgZWRpdG9yLgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgTGFiZWxzRWRpdG9yCisJZXh0ZW5kcyBNdWx0aVBhZ2VFZGl0b3JQYXJ0CisJaW1wbGVtZW50cyBJRWRpdGluZ0RvbWFpblByb3ZpZGVyLCBJU2VsZWN0aW9uUHJvdmlkZXIsIElNZW51TGlzdGVuZXIsIElWaWV3ZXJQcm92aWRlciwgSUdvdG9NYXJrZXIgeworCS8qKgorCSAqIFRoaXMga2VlcHMgdHJhY2sgb2YgdGhlIGVkaXRpbmcgZG9tYWluIHRoYXQgaXMgdXNlZCB0byB0cmFjayBhbGwgY2hhbmdlcyB0byB0aGUgbW9kZWwuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIEFkYXB0ZXJGYWN0b3J5RWRpdGluZ0RvbWFpbiBlZGl0aW5nRG9tYWluOworCisJLyoqCisJICogVGhpcyBpcyB0aGUgb25lIGFkYXB0ZXIgZmFjdG9yeSB1c2VkIGZvciBwcm92aWRpbmcgdmlld3Mgb2YgdGhlIG1vZGVsLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBDb21wb3NlZEFkYXB0ZXJGYWN0b3J5IGFkYXB0ZXJGYWN0b3J5OworCisJLyoqCisJICogVGhpcyBpcyB0aGUgY29udGVudCBvdXRsaW5lIHBhZ2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIElDb250ZW50T3V0bGluZVBhZ2UgY29udGVudE91dGxpbmVQYWdlOworCisJLyoqCisJICogVGhpcyBpcyBhIGtsdWRnZS4uLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBJU3RhdHVzTGluZU1hbmFnZXIgY29udGVudE91dGxpbmVTdGF0dXNMaW5lTWFuYWdlcjsKKworCS8qKgorCSAqIFRoaXMgaXMgdGhlIGNvbnRlbnQgb3V0bGluZSBwYWdlJ3Mgdmlld2VyLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBUcmVlVmlld2VyIGNvbnRlbnRPdXRsaW5lVmlld2VyOworCisJLyoqCisJICogVGhpcyBpcyB0aGUgcHJvcGVydHkgc2hlZXQgcGFnZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgUHJvcGVydHlTaGVldFBhZ2UgcHJvcGVydHlTaGVldFBhZ2U7CisKKwkvKioKKwkgKiBUaGlzIGlzIHRoZSB2aWV3ZXIgdGhhdCBzaGFkb3dzIHRoZSBzZWxlY3Rpb24gaW4gdGhlIGNvbnRlbnQgb3V0bGluZS4KKwkgKiBUaGUgcGFyZW50IHJlbGF0aW9uIG11c3QgYmUgY29ycmVjdGx5IGRlZmluZWQgZm9yIHRoaXMgdG8gd29yay4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgVHJlZVZpZXdlciBzZWxlY3Rpb25WaWV3ZXI7CisKKwkvKioKKwkgKiBUaGlzIGtlZXBzIHRyYWNrIG9mIHRoZSBhY3RpdmUgY29udGVudCB2aWV3ZXIsIHdoaWNoIG1heSBiZSBlaXRoZXIgb25lIG9mIHRoZSB2aWV3ZXJzIGluIHRoZSBwYWdlcyBvciB0aGUgY29udGVudCBvdXRsaW5lIHZpZXdlci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgVmlld2VyIGN1cnJlbnRWaWV3ZXI7CisKKwkvKioKKwkgKiBUaGlzIGxpc3RlbnMgdG8gd2hpY2ggZXZlciB2aWV3ZXIgaXMgYWN0aXZlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBJU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyIHNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcjsKKworCS8qKgorCSAqIFRoaXMga2VlcHMgdHJhY2sgb2YgYWxsIHRoZSB7QGxpbmsgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyfXMgdGhhdCBhcmUgbGlzdGVuaW5nIHRvIHRoaXMgZWRpdG9yLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBDb2xsZWN0aW9uPElTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXI+IHNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcnMgPSBuZXcgQXJyYXlMaXN0PElTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXI+KCk7CisKKwkvKioKKwkgKiBUaGlzIGtlZXBzIHRyYWNrIG9mIHRoZSBzZWxlY3Rpb24gb2YgdGhlIGVkaXRvciBhcyBhIHdob2xlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBJU2VsZWN0aW9uIGVkaXRvclNlbGVjdGlvbiA9IFN0cnVjdHVyZWRTZWxlY3Rpb24uRU1QVFk7CisKKwkvKioKKwkgKiBUaGUgTWFya2VySGVscGVyIGlzIHJlc3BvbnNpYmxlIGZvciBjcmVhdGluZyB3b3Jrc3BhY2UgcmVzb3VyY2UgbWFya2VycyBwcmVzZW50ZWQKKwkgKiBpbiBFY2xpcHNlJ3MgUHJvYmxlbXMgVmlldy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgTWFya2VySGVscGVyIG1hcmtlckhlbHBlciA9IG5ldyBFZGl0VUlNYXJrZXJIZWxwZXIoKTsKKworCS8qKgorCSAqIFRoaXMgbGlzdGVucyBmb3Igd2hlbiB0aGUgb3V0bGluZSBiZWNvbWVzIGFjdGl2ZQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBJUGFydExpc3RlbmVyIHBhcnRMaXN0ZW5lciA9CisJCW5ldyBJUGFydExpc3RlbmVyKCkgeworCQkJcHVibGljIHZvaWQgcGFydEFjdGl2YXRlZChJV29ya2JlbmNoUGFydCBwKSB7CisJCQkJaWYgKHAgaW5zdGFuY2VvZiBDb250ZW50T3V0bGluZSkgeworCQkJCQlpZiAoKChDb250ZW50T3V0bGluZSlwKS5nZXRDdXJyZW50UGFnZSgpID09IGNvbnRlbnRPdXRsaW5lUGFnZSkgeworCQkJCQkJZ2V0QWN0aW9uQmFyQ29udHJpYnV0b3IoKS5zZXRBY3RpdmVFZGl0b3IoTGFiZWxzRWRpdG9yLnRoaXMpOworCisJCQkJCQlzZXRDdXJyZW50Vmlld2VyKGNvbnRlbnRPdXRsaW5lVmlld2VyKTsKKwkJCQkJfQorCQkJCX0KKwkJCQllbHNlIGlmIChwIGluc3RhbmNlb2YgUHJvcGVydHlTaGVldCkgeworCQkJCQlpZiAoKChQcm9wZXJ0eVNoZWV0KXApLmdldEN1cnJlbnRQYWdlKCkgPT0gcHJvcGVydHlTaGVldFBhZ2UpIHsKKwkJCQkJCWdldEFjdGlvbkJhckNvbnRyaWJ1dG9yKCkuc2V0QWN0aXZlRWRpdG9yKExhYmVsc0VkaXRvci50aGlzKTsKKwkJCQkJCWhhbmRsZUFjdGl2YXRlKCk7CisJCQkJCX0KKwkJCQl9CisJCQkJZWxzZSBpZiAocCA9PSBMYWJlbHNFZGl0b3IudGhpcykgeworCQkJCQloYW5kbGVBY3RpdmF0ZSgpOworCQkJCX0KKwkJCX0KKwkJCXB1YmxpYyB2b2lkIHBhcnRCcm91Z2h0VG9Ub3AoSVdvcmtiZW5jaFBhcnQgcCkgeworCQkJCS8vIElnbm9yZS4KKwkJCX0KKwkJCXB1YmxpYyB2b2lkIHBhcnRDbG9zZWQoSVdvcmtiZW5jaFBhcnQgcCkgeworCQkJCS8vIElnbm9yZS4KKwkJCX0KKwkJCXB1YmxpYyB2b2lkIHBhcnREZWFjdGl2YXRlZChJV29ya2JlbmNoUGFydCBwKSB7CisJCQkJLy8gSWdub3JlLgorCQkJfQorCQkJcHVibGljIHZvaWQgcGFydE9wZW5lZChJV29ya2JlbmNoUGFydCBwKSB7CisJCQkJLy8gSWdub3JlLgorCQkJfQorCQl9OworCisJLyoqCisJICogUmVzb3VyY2VzIHRoYXQgaGF2ZSBiZWVuIHJlbW92ZWQgc2luY2UgbGFzdCBhY3RpdmF0aW9uLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBDb2xsZWN0aW9uPFJlc291cmNlPiByZW1vdmVkUmVzb3VyY2VzID0gbmV3IEFycmF5TGlzdDxSZXNvdXJjZT4oKTsKKworCS8qKgorCSAqIFJlc291cmNlcyB0aGF0IGhhdmUgYmVlbiBjaGFuZ2VkIHNpbmNlIGxhc3QgYWN0aXZhdGlvbi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgQ29sbGVjdGlvbjxSZXNvdXJjZT4gY2hhbmdlZFJlc291cmNlcyA9IG5ldyBBcnJheUxpc3Q8UmVzb3VyY2U+KCk7CisKKwkvKioKKwkgKiBSZXNvdXJjZXMgdGhhdCBoYXZlIGJlZW4gc2F2ZWQuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIENvbGxlY3Rpb248UmVzb3VyY2U+IHNhdmVkUmVzb3VyY2VzID0gbmV3IEFycmF5TGlzdDxSZXNvdXJjZT4oKTsKKworCS8qKgorCSAqIE1hcCB0byBzdG9yZSB0aGUgZGlhZ25vc3RpYyBhc3NvY2lhdGVkIHdpdGggYSByZXNvdXJjZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgTWFwPFJlc291cmNlLCBEaWFnbm9zdGljPiByZXNvdXJjZVRvRGlhZ25vc3RpY01hcCA9IG5ldyBMaW5rZWRIYXNoTWFwPFJlc291cmNlLCBEaWFnbm9zdGljPigpOworCisJLyoqCisJICogQ29udHJvbHMgd2hldGhlciB0aGUgcHJvYmxlbSBpbmRpY2F0aW9uIHNob3VsZCBiZSB1cGRhdGVkLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBib29sZWFuIHVwZGF0ZVByb2JsZW1JbmRpY2F0aW9uID0gdHJ1ZTsKKworCS8qKgorCSAqIEFkYXB0ZXIgdXNlZCB0byB1cGRhdGUgdGhlIHByb2JsZW0gaW5kaWNhdGlvbiB3aGVuIHJlc291cmNlcyBhcmUgZGVtYW5kZWQgbG9hZGVkLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBFQ29udGVudEFkYXB0ZXIgcHJvYmxlbUluZGljYXRpb25BZGFwdGVyID0gCisJCW5ldyBFQ29udGVudEFkYXB0ZXIoKSB7CisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyB2b2lkIG5vdGlmeUNoYW5nZWQoTm90aWZpY2F0aW9uIG5vdGlmaWNhdGlvbikgeworCQkJCWlmIChub3RpZmljYXRpb24uZ2V0Tm90aWZpZXIoKSBpbnN0YW5jZW9mIFJlc291cmNlKSB7CisJCQkJCXN3aXRjaCAobm90aWZpY2F0aW9uLmdldEZlYXR1cmVJRChSZXNvdXJjZS5jbGFzcykpIHsKKwkJCQkJCWNhc2UgUmVzb3VyY2UuUkVTT1VSQ0VfX0lTX0xPQURFRDoKKwkJCQkJCWNhc2UgUmVzb3VyY2UuUkVTT1VSQ0VfX0VSUk9SUzoKKwkJCQkJCWNhc2UgUmVzb3VyY2UuUkVTT1VSQ0VfX1dBUk5JTkdTOiB7CisJCQkJCQkJUmVzb3VyY2UgcmVzb3VyY2UgPSAoUmVzb3VyY2Upbm90aWZpY2F0aW9uLmdldE5vdGlmaWVyKCk7CisJCQkJCQkJRGlhZ25vc3RpYyBkaWFnbm9zdGljID0gYW5hbHl6ZVJlc291cmNlUHJvYmxlbXMocmVzb3VyY2UsIG51bGwpOworCQkJCQkJCWlmIChkaWFnbm9zdGljLmdldFNldmVyaXR5KCkgIT0gRGlhZ25vc3RpYy5PSykgeworCQkJCQkJCQlyZXNvdXJjZVRvRGlhZ25vc3RpY01hcC5wdXQocmVzb3VyY2UsIGRpYWdub3N0aWMpOworCQkJCQkJCX0KKwkJCQkJCQllbHNlIHsKKwkJCQkJCQkJcmVzb3VyY2VUb0RpYWdub3N0aWNNYXAucmVtb3ZlKHJlc291cmNlKTsKKwkJCQkJCQl9CisKKwkJCQkJCQlpZiAodXBkYXRlUHJvYmxlbUluZGljYXRpb24pIHsKKwkJCQkJCQkJZ2V0U2l0ZSgpLmdldFNoZWxsKCkuZ2V0RGlzcGxheSgpLmFzeW5jRXhlYworCQkJCQkJCQkJKG5ldyBSdW5uYWJsZSgpIHsKKwkJCQkJCQkJCQkgcHVibGljIHZvaWQgcnVuKCkgeworCQkJCQkJCQkJCQkgdXBkYXRlUHJvYmxlbUluZGljYXRpb24oKTsKKwkJCQkJCQkJCQkgfQorCQkJCQkJCQkJIH0pOworCQkJCQkJCX0KKwkJCQkJCQlicmVhazsKKwkJCQkJCX0KKwkJCQkJfQorCQkJCX0KKwkJCQllbHNlIHsKKwkJCQkJc3VwZXIubm90aWZ5Q2hhbmdlZChub3RpZmljYXRpb24pOworCQkJCX0KKwkJCX0KKworCQkJQE92ZXJyaWRlCisJCQlwcm90ZWN0ZWQgdm9pZCBzZXRUYXJnZXQoUmVzb3VyY2UgdGFyZ2V0KSB7CisJCQkJYmFzaWNTZXRUYXJnZXQodGFyZ2V0KTsKKwkJCX0KKworCQkJQE92ZXJyaWRlCisJCQlwcm90ZWN0ZWQgdm9pZCB1bnNldFRhcmdldChSZXNvdXJjZSB0YXJnZXQpIHsKKwkJCQliYXNpY1Vuc2V0VGFyZ2V0KHRhcmdldCk7CisJCQl9CisJCX07CisKKwkvKioKKwkgKiBUaGlzIGxpc3RlbnMgZm9yIHdvcmtzcGFjZSBjaGFuZ2VzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBJUmVzb3VyY2VDaGFuZ2VMaXN0ZW5lciByZXNvdXJjZUNoYW5nZUxpc3RlbmVyID0KKwkJbmV3IElSZXNvdXJjZUNoYW5nZUxpc3RlbmVyKCkgeworCQkJcHVibGljIHZvaWQgcmVzb3VyY2VDaGFuZ2VkKElSZXNvdXJjZUNoYW5nZUV2ZW50IGV2ZW50KSB7CisJCQkJSVJlc291cmNlRGVsdGEgZGVsdGEgPSBldmVudC5nZXREZWx0YSgpOworCQkJCXRyeSB7CisJCQkJCWNsYXNzIFJlc291cmNlRGVsdGFWaXNpdG9yIGltcGxlbWVudHMgSVJlc291cmNlRGVsdGFWaXNpdG9yIHsKKwkJCQkJCXByb3RlY3RlZCBSZXNvdXJjZVNldCByZXNvdXJjZVNldCA9IGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKTsKKwkJCQkJCXByb3RlY3RlZCBDb2xsZWN0aW9uPFJlc291cmNlPiBjaGFuZ2VkUmVzb3VyY2VzID0gbmV3IEFycmF5TGlzdDxSZXNvdXJjZT4oKTsKKwkJCQkJCXByb3RlY3RlZCBDb2xsZWN0aW9uPFJlc291cmNlPiByZW1vdmVkUmVzb3VyY2VzID0gbmV3IEFycmF5TGlzdDxSZXNvdXJjZT4oKTsKKworCQkJCQkJcHVibGljIGJvb2xlYW4gdmlzaXQoSVJlc291cmNlRGVsdGEgZGVsdGEpIHsKKwkJCQkJCQlpZiAoZGVsdGEuZ2V0UmVzb3VyY2UoKS5nZXRUeXBlKCkgPT0gSVJlc291cmNlLkZJTEUpIHsKKwkJCQkJCQkJaWYgKGRlbHRhLmdldEtpbmQoKSA9PSBJUmVzb3VyY2VEZWx0YS5SRU1PVkVEIHx8CisJCQkJCQkJCSAgICBkZWx0YS5nZXRLaW5kKCkgPT0gSVJlc291cmNlRGVsdGEuQ0hBTkdFRCAmJiBkZWx0YS5nZXRGbGFncygpICE9IElSZXNvdXJjZURlbHRhLk1BUktFUlMpIHsKKwkJCQkJCQkJCVJlc291cmNlIHJlc291cmNlID0gcmVzb3VyY2VTZXQuZ2V0UmVzb3VyY2UoVVJJLmNyZWF0ZVBsYXRmb3JtUmVzb3VyY2VVUkkoZGVsdGEuZ2V0RnVsbFBhdGgoKS50b1N0cmluZygpLCB0cnVlKSwgZmFsc2UpOworCQkJCQkJCQkJaWYgKHJlc291cmNlICE9IG51bGwpIHsKKwkJCQkJCQkJCQlpZiAoZGVsdGEuZ2V0S2luZCgpID09IElSZXNvdXJjZURlbHRhLlJFTU9WRUQpIHsKKwkJCQkJCQkJCQkJcmVtb3ZlZFJlc291cmNlcy5hZGQocmVzb3VyY2UpOworCQkJCQkJCQkJCX0KKwkJCQkJCQkJCQllbHNlIGlmICghc2F2ZWRSZXNvdXJjZXMucmVtb3ZlKHJlc291cmNlKSkgeworCQkJCQkJCQkJCQljaGFuZ2VkUmVzb3VyY2VzLmFkZChyZXNvdXJjZSk7CisJCQkJCQkJCQkJfQorCQkJCQkJCQkJfQorCQkJCQkJCQl9CisJCQkJCQkJfQorCisJCQkJCQkJcmV0dXJuIHRydWU7CisJCQkJCQl9CisKKwkJCQkJCXB1YmxpYyBDb2xsZWN0aW9uPFJlc291cmNlPiBnZXRDaGFuZ2VkUmVzb3VyY2VzKCkgeworCQkJCQkJCXJldHVybiBjaGFuZ2VkUmVzb3VyY2VzOworCQkJCQkJfQorCisJCQkJCQlwdWJsaWMgQ29sbGVjdGlvbjxSZXNvdXJjZT4gZ2V0UmVtb3ZlZFJlc291cmNlcygpIHsKKwkJCQkJCQlyZXR1cm4gcmVtb3ZlZFJlc291cmNlczsKKwkJCQkJCX0KKwkJCQkJfQorCisJCQkJCWZpbmFsIFJlc291cmNlRGVsdGFWaXNpdG9yIHZpc2l0b3IgPSBuZXcgUmVzb3VyY2VEZWx0YVZpc2l0b3IoKTsKKwkJCQkJZGVsdGEuYWNjZXB0KHZpc2l0b3IpOworCisJCQkJCWlmICghdmlzaXRvci5nZXRSZW1vdmVkUmVzb3VyY2VzKCkuaXNFbXB0eSgpKSB7CisJCQkJCQlnZXRTaXRlKCkuZ2V0U2hlbGwoKS5nZXREaXNwbGF5KCkuYXN5bmNFeGVjCisJCQkJCQkJKG5ldyBSdW5uYWJsZSgpIHsKKwkJCQkJCQkJIHB1YmxpYyB2b2lkIHJ1bigpIHsKKwkJCQkJCQkJCSByZW1vdmVkUmVzb3VyY2VzLmFkZEFsbCh2aXNpdG9yLmdldFJlbW92ZWRSZXNvdXJjZXMoKSk7CisJCQkJCQkJCQkgaWYgKCFpc0RpcnR5KCkpIHsKKwkJCQkJCQkJCQkgZ2V0U2l0ZSgpLmdldFBhZ2UoKS5jbG9zZUVkaXRvcihMYWJlbHNFZGl0b3IudGhpcywgZmFsc2UpOworCQkJCQkJCQkJIH0KKwkJCQkJCQkJIH0KKwkJCQkJCQkgfSk7CisJCQkJCX0KKworCQkJCQlpZiAoIXZpc2l0b3IuZ2V0Q2hhbmdlZFJlc291cmNlcygpLmlzRW1wdHkoKSkgeworCQkJCQkJZ2V0U2l0ZSgpLmdldFNoZWxsKCkuZ2V0RGlzcGxheSgpLmFzeW5jRXhlYworCQkJCQkJCShuZXcgUnVubmFibGUoKSB7CisJCQkJCQkJCSBwdWJsaWMgdm9pZCBydW4oKSB7CisJCQkJCQkJCQkgY2hhbmdlZFJlc291cmNlcy5hZGRBbGwodmlzaXRvci5nZXRDaGFuZ2VkUmVzb3VyY2VzKCkpOworCQkJCQkJCQkJIGlmIChnZXRTaXRlKCkuZ2V0UGFnZSgpLmdldEFjdGl2ZUVkaXRvcigpID09IExhYmVsc0VkaXRvci50aGlzKSB7CisJCQkJCQkJCQkJIGhhbmRsZUFjdGl2YXRlKCk7CisJCQkJCQkJCQkgfQorCQkJCQkJCQkgfQorCQkJCQkJCSB9KTsKKwkJCQkJfQorCQkJCX0KKwkJCQljYXRjaCAoQ29yZUV4Y2VwdGlvbiBleGNlcHRpb24pIHsKKwkJCQkJRGVmaW5pdGlvbnNFZGl0UGx1Z2luLklOU1RBTkNFLmxvZyhleGNlcHRpb24pOworCQkJCX0KKwkJCX0KKwkJfTsKKworCS8qKgorCSAqIEhhbmRsZXMgYWN0aXZhdGlvbiBvZiB0aGUgZWRpdG9yIG9yIGl0J3MgYXNzb2NpYXRlZCB2aWV3cy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBoYW5kbGVBY3RpdmF0ZSgpIHsKKwkJLy8gUmVjb21wdXRlIHRoZSByZWFkIG9ubHkgc3RhdGUuCisJCS8vCisJCWlmIChlZGl0aW5nRG9tYWluLmdldFJlc291cmNlVG9SZWFkT25seU1hcCgpICE9IG51bGwpIHsKKwkJICBlZGl0aW5nRG9tYWluLmdldFJlc291cmNlVG9SZWFkT25seU1hcCgpLmNsZWFyKCk7CisKKwkJICAvLyBSZWZyZXNoIGFueSBhY3Rpb25zIHRoYXQgbWF5IGJlY29tZSBlbmFibGVkIG9yIGRpc2FibGVkLgorCQkgIC8vCisJCSAgc2V0U2VsZWN0aW9uKGdldFNlbGVjdGlvbigpKTsKKwkJfQorCisJCWlmICghcmVtb3ZlZFJlc291cmNlcy5pc0VtcHR5KCkpIHsKKwkJCWlmIChoYW5kbGVEaXJ0eUNvbmZsaWN0KCkpIHsKKwkJCQlnZXRTaXRlKCkuZ2V0UGFnZSgpLmNsb3NlRWRpdG9yKExhYmVsc0VkaXRvci50aGlzLCBmYWxzZSk7CisJCQl9CisJCQllbHNlIHsKKwkJCQlyZW1vdmVkUmVzb3VyY2VzLmNsZWFyKCk7CisJCQkJY2hhbmdlZFJlc291cmNlcy5jbGVhcigpOworCQkJCXNhdmVkUmVzb3VyY2VzLmNsZWFyKCk7CisJCQl9CisJCX0KKwkJZWxzZSBpZiAoIWNoYW5nZWRSZXNvdXJjZXMuaXNFbXB0eSgpKSB7CisJCQljaGFuZ2VkUmVzb3VyY2VzLnJlbW92ZUFsbChzYXZlZFJlc291cmNlcyk7CisJCQloYW5kbGVDaGFuZ2VkUmVzb3VyY2VzKCk7CisJCQljaGFuZ2VkUmVzb3VyY2VzLmNsZWFyKCk7CisJCQlzYXZlZFJlc291cmNlcy5jbGVhcigpOworCQl9CisJfQorCisJLyoqCisJICogSGFuZGxlcyB3aGF0IHRvIGRvIHdpdGggY2hhbmdlZCByZXNvdXJjZXMgb24gYWN0aXZhdGlvbi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBoYW5kbGVDaGFuZ2VkUmVzb3VyY2VzKCkgeworCQlpZiAoIWNoYW5nZWRSZXNvdXJjZXMuaXNFbXB0eSgpICYmICghaXNEaXJ0eSgpIHx8IGhhbmRsZURpcnR5Q29uZmxpY3QoKSkpIHsKKwkJCWlmIChpc0RpcnR5KCkpIHsKKwkJCQljaGFuZ2VkUmVzb3VyY2VzLmFkZEFsbChlZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkuZ2V0UmVzb3VyY2VzKCkpOworCQkJfQorCQkJZWRpdGluZ0RvbWFpbi5nZXRDb21tYW5kU3RhY2soKS5mbHVzaCgpOworCisJCQl1cGRhdGVQcm9ibGVtSW5kaWNhdGlvbiA9IGZhbHNlOworCQkJZm9yIChSZXNvdXJjZSByZXNvdXJjZSA6IGNoYW5nZWRSZXNvdXJjZXMpIHsKKwkJCQlpZiAocmVzb3VyY2UuaXNMb2FkZWQoKSkgeworCQkJCQlyZXNvdXJjZS51bmxvYWQoKTsKKwkJCQkJdHJ5IHsKKwkJCQkJCXJlc291cmNlLmxvYWQoQ29sbGVjdGlvbnMuRU1QVFlfTUFQKTsKKwkJCQkJfQorCQkJCQljYXRjaCAoSU9FeGNlcHRpb24gZXhjZXB0aW9uKSB7CisJCQkJCQlpZiAoIXJlc291cmNlVG9EaWFnbm9zdGljTWFwLmNvbnRhaW5zS2V5KHJlc291cmNlKSkgeworCQkJCQkJCXJlc291cmNlVG9EaWFnbm9zdGljTWFwLnB1dChyZXNvdXJjZSwgYW5hbHl6ZVJlc291cmNlUHJvYmxlbXMocmVzb3VyY2UsIGV4Y2VwdGlvbikpOworCQkJCQkJfQorCQkJCQl9CisJCQkJfQorCQkJfQorCisJCQlpZiAoQWRhcHRlckZhY3RvcnlFZGl0aW5nRG9tYWluLmlzU3RhbGUoZWRpdG9yU2VsZWN0aW9uKSkgeworCQkJCXNldFNlbGVjdGlvbihTdHJ1Y3R1cmVkU2VsZWN0aW9uLkVNUFRZKTsKKwkJCX0KKworCQkJdXBkYXRlUHJvYmxlbUluZGljYXRpb24gPSB0cnVlOworCQkJdXBkYXRlUHJvYmxlbUluZGljYXRpb24oKTsKKwkJfQorCX0KKyAgCisJLyoqCisJICogVXBkYXRlcyB0aGUgcHJvYmxlbXMgaW5kaWNhdGlvbiB3aXRoIHRoZSBpbmZvcm1hdGlvbiBkZXNjcmliZWQgaW4gdGhlIHNwZWNpZmllZCBkaWFnbm9zdGljLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIHVwZGF0ZVByb2JsZW1JbmRpY2F0aW9uKCkgeworCQlpZiAodXBkYXRlUHJvYmxlbUluZGljYXRpb24pIHsKKwkJCUJhc2ljRGlhZ25vc3RpYyBkaWFnbm9zdGljID0KKwkJCQluZXcgQmFzaWNEaWFnbm9zdGljCisJCQkJCShEaWFnbm9zdGljLk9LLAorCQkJCQkgIm9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMiLCAvLyROT04tTkxTLTEkCisJCQkJCSAwLAorCQkJCQkgbnVsbCwKKwkJCQkJIG5ldyBPYmplY3QgW10geyBlZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkgfSk7CisJCQlmb3IgKERpYWdub3N0aWMgY2hpbGREaWFnbm9zdGljIDogcmVzb3VyY2VUb0RpYWdub3N0aWNNYXAudmFsdWVzKCkpIHsKKwkJCQlpZiAoY2hpbGREaWFnbm9zdGljLmdldFNldmVyaXR5KCkgIT0gRGlhZ25vc3RpYy5PSykgeworCQkJCQlkaWFnbm9zdGljLmFkZChjaGlsZERpYWdub3N0aWMpOworCQkJCX0KKwkJCX0KKworCQkJaW50IGxhc3RFZGl0b3JQYWdlID0gZ2V0UGFnZUNvdW50KCkgLSAxOworCQkJaWYgKGxhc3RFZGl0b3JQYWdlID49IDAgJiYgZ2V0RWRpdG9yKGxhc3RFZGl0b3JQYWdlKSBpbnN0YW5jZW9mIFByb2JsZW1FZGl0b3JQYXJ0KSB7CisJCQkJKChQcm9ibGVtRWRpdG9yUGFydClnZXRFZGl0b3IobGFzdEVkaXRvclBhZ2UpKS5zZXREaWFnbm9zdGljKGRpYWdub3N0aWMpOworCQkJCWlmIChkaWFnbm9zdGljLmdldFNldmVyaXR5KCkgIT0gRGlhZ25vc3RpYy5PSykgeworCQkJCQlzZXRBY3RpdmVQYWdlKGxhc3RFZGl0b3JQYWdlKTsKKwkJCQl9CisJCQl9CisJCQllbHNlIGlmIChkaWFnbm9zdGljLmdldFNldmVyaXR5KCkgIT0gRGlhZ25vc3RpYy5PSykgeworCQkJCVByb2JsZW1FZGl0b3JQYXJ0IHByb2JsZW1FZGl0b3JQYXJ0ID0gbmV3IFByb2JsZW1FZGl0b3JQYXJ0KCk7CisJCQkJcHJvYmxlbUVkaXRvclBhcnQuc2V0RGlhZ25vc3RpYyhkaWFnbm9zdGljKTsKKwkJCQlwcm9ibGVtRWRpdG9yUGFydC5zZXRNYXJrZXJIZWxwZXIobWFya2VySGVscGVyKTsKKwkJCQl0cnkgeworCQkJCQlhZGRQYWdlKCsrbGFzdEVkaXRvclBhZ2UsIHByb2JsZW1FZGl0b3JQYXJ0LCBnZXRFZGl0b3JJbnB1dCgpKTsKKwkJCQkJc2V0UGFnZVRleHQobGFzdEVkaXRvclBhZ2UsIHByb2JsZW1FZGl0b3JQYXJ0LmdldFBhcnROYW1lKCkpOworCQkJCQlzZXRBY3RpdmVQYWdlKGxhc3RFZGl0b3JQYWdlKTsKKwkJCQkJc2hvd1RhYnMoKTsKKwkJCQl9CisJCQkJY2F0Y2ggKFBhcnRJbml0RXhjZXB0aW9uIGV4Y2VwdGlvbikgeworCQkJCQlEZWZpbml0aW9uc0VkaXRQbHVnaW4uSU5TVEFOQ0UubG9nKGV4Y2VwdGlvbik7CisJCQkJfQorCQkJfQorCisJCQlpZiAobWFya2VySGVscGVyLmhhc01hcmtlcnMoZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpKSkgeworCQkJCW1hcmtlckhlbHBlci5kZWxldGVNYXJrZXJzKGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKSk7CisJCQkJaWYgKGRpYWdub3N0aWMuZ2V0U2V2ZXJpdHkoKSAhPSBEaWFnbm9zdGljLk9LKSB7CisJCQkJCXRyeSB7CisJCQkJCQltYXJrZXJIZWxwZXIuY3JlYXRlTWFya2VycyhkaWFnbm9zdGljKTsKKwkJCQkJfQorCQkJCQljYXRjaCAoQ29yZUV4Y2VwdGlvbiBleGNlcHRpb24pIHsKKwkJCQkJCURlZmluaXRpb25zRWRpdFBsdWdpbi5JTlNUQU5DRS5sb2coZXhjZXB0aW9uKTsKKwkJCQkJfQorCQkJCX0KKwkJCX0KKwkJfQorCX0KKworCS8qKgorCSAqIFNob3dzIGEgZGlhbG9nIHRoYXQgYXNrcyBpZiBjb25mbGljdGluZyBjaGFuZ2VzIHNob3VsZCBiZSBkaXNjYXJkZWQuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIGJvb2xlYW4gaGFuZGxlRGlydHlDb25mbGljdCgpIHsKKwkJcmV0dXJuCisJCQlNZXNzYWdlRGlhbG9nLm9wZW5RdWVzdGlvbgorCQkJCShnZXRTaXRlKCkuZ2V0U2hlbGwoKSwKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfRmlsZUNvbmZsaWN0X2xhYmVsIiksIC8vJE5PTi1OTFMtMSQKKwkJCQkgZ2V0U3RyaW5nKCJfV0FSTl9GaWxlQ29uZmxpY3QiKSk7IC8vJE5PTi1OTFMtMSQKKwl9CisKKwkvKioKKwkgKiBUaGlzIGNyZWF0ZXMgYSBtb2RlbCBlZGl0b3IuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIExhYmVsc0VkaXRvcigpIHsKKwkJc3VwZXIoKTsKKwkJaW5pdGlhbGl6ZUVkaXRpbmdEb21haW4oKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHNldHMgdXAgdGhlIGVkaXRpbmcgZG9tYWluIGZvciB0aGUgbW9kZWwgZWRpdG9yLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIGluaXRpYWxpemVFZGl0aW5nRG9tYWluKCkgeworCQkvLyBDcmVhdGUgYW4gYWRhcHRlciBmYWN0b3J5IHRoYXQgeWllbGRzIGl0ZW0gcHJvdmlkZXJzLgorCQkvLworCQlhZGFwdGVyRmFjdG9yeSA9IG5ldyBDb21wb3NlZEFkYXB0ZXJGYWN0b3J5KENvbXBvc2VkQWRhcHRlckZhY3RvcnkuRGVzY3JpcHRvci5SZWdpc3RyeS5JTlNUQU5DRSk7CisKKwkJYWRhcHRlckZhY3RvcnkuYWRkQWRhcHRlckZhY3RvcnkobmV3IFJlc291cmNlSXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkoKSk7CisJCWFkYXB0ZXJGYWN0b3J5LmFkZEFkYXB0ZXJGYWN0b3J5KG5ldyBFZGdlc0l0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5KCkpOworCQlhZGFwdGVyRmFjdG9yeS5hZGRBZGFwdGVyRmFjdG9yeShuZXcgTGFiZWxzSXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkoKSk7CisJCWFkYXB0ZXJGYWN0b3J5LmFkZEFkYXB0ZXJGYWN0b3J5KG5ldyBOb2Rlc0l0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5KCkpOworCQlhZGFwdGVyRmFjdG9yeS5hZGRBZGFwdGVyRmFjdG9yeShuZXcgVHlwZXNJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSgpKTsKKwkJYWRhcHRlckZhY3RvcnkuYWRkQWRhcHRlckZhY3RvcnkobmV3IEdyYXBoSXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkoKSk7CisJCWFkYXB0ZXJGYWN0b3J5LmFkZEFkYXB0ZXJGYWN0b3J5KG5ldyBDb21tb25JdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSgpKTsKKwkJYWRhcHRlckZhY3RvcnkuYWRkQWRhcHRlckZhY3RvcnkobmV3IE1vZGVsSXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkoKSk7CisJCWFkYXB0ZXJGYWN0b3J5LmFkZEFkYXB0ZXJGYWN0b3J5KG5ldyBFY29yZUl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5KCkpOworCQlhZGFwdGVyRmFjdG9yeS5hZGRBZGFwdGVyRmFjdG9yeShuZXcgTW9kaWZpZXJJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSgpKTsKKwkJYWRhcHRlckZhY3RvcnkuYWRkQWRhcHRlckZhY3RvcnkobmV3IFNjZW5hcmlvSXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkoKSk7CisJCWFkYXB0ZXJGYWN0b3J5LmFkZEFkYXB0ZXJGYWN0b3J5KG5ldyBTZXF1ZW5jZXJJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSgpKTsKKwkJYWRhcHRlckZhY3RvcnkuYWRkQWRhcHRlckZhY3RvcnkobmV3IFNvbHZlckl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5KCkpOworCQlhZGFwdGVyRmFjdG9yeS5hZGRBZGFwdGVyRmFjdG9yeShuZXcgUmVmbGVjdGl2ZUl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5KCkpOworCisJCS8vIENyZWF0ZSB0aGUgY29tbWFuZCBzdGFjayB0aGF0IHdpbGwgbm90aWZ5IHRoaXMgZWRpdG9yIGFzIGNvbW1hbmRzIGFyZSBleGVjdXRlZC4KKwkJLy8KKwkJQmFzaWNDb21tYW5kU3RhY2sgY29tbWFuZFN0YWNrID0gbmV3IEJhc2ljQ29tbWFuZFN0YWNrKCk7CisKKwkJLy8gQWRkIGEgbGlzdGVuZXIgdG8gc2V0IHRoZSBtb3N0IHJlY2VudCBjb21tYW5kJ3MgYWZmZWN0ZWQgb2JqZWN0cyB0byBiZSB0aGUgc2VsZWN0aW9uIG9mIHRoZSB2aWV3ZXIgd2l0aCBmb2N1cy4KKwkJLy8KKwkJY29tbWFuZFN0YWNrLmFkZENvbW1hbmRTdGFja0xpc3RlbmVyCisJCQkobmV3IENvbW1hbmRTdGFja0xpc3RlbmVyKCkgeworCQkJCSBwdWJsaWMgdm9pZCBjb21tYW5kU3RhY2tDaGFuZ2VkKGZpbmFsIEV2ZW50T2JqZWN0IGV2ZW50KSB7CisJCQkJCSBnZXRDb250YWluZXIoKS5nZXREaXNwbGF5KCkuYXN5bmNFeGVjCisJCQkJCQkgKG5ldyBSdW5uYWJsZSgpIHsKKwkJCQkJCQkgIHB1YmxpYyB2b2lkIHJ1bigpIHsKKwkJCQkJCQkJICBmaXJlUHJvcGVydHlDaGFuZ2UoSUVkaXRvclBhcnQuUFJPUF9ESVJUWSk7CisKKwkJCQkJCQkJICAvLyBUcnkgdG8gc2VsZWN0IHRoZSBhZmZlY3RlZCBvYmplY3RzLgorCQkJCQkJCQkgIC8vCisJCQkJCQkJCSAgQ29tbWFuZCBtb3N0UmVjZW50Q29tbWFuZCA9ICgoQ29tbWFuZFN0YWNrKWV2ZW50LmdldFNvdXJjZSgpKS5nZXRNb3N0UmVjZW50Q29tbWFuZCgpOworCQkJCQkJCQkgIGlmIChtb3N0UmVjZW50Q29tbWFuZCAhPSBudWxsKSB7CisJCQkJCQkJCQkgIHNldFNlbGVjdGlvblRvVmlld2VyKG1vc3RSZWNlbnRDb21tYW5kLmdldEFmZmVjdGVkT2JqZWN0cygpKTsKKwkJCQkJCQkJICB9CisJCQkJCQkJCSAgaWYgKHByb3BlcnR5U2hlZXRQYWdlICE9IG51bGwgJiYgIXByb3BlcnR5U2hlZXRQYWdlLmdldENvbnRyb2woKS5pc0Rpc3Bvc2VkKCkpIHsKKwkJCQkJCQkJCSAgcHJvcGVydHlTaGVldFBhZ2UucmVmcmVzaCgpOworCQkJCQkJCQkgIH0KKwkJCQkJCQkgIH0KKwkJCQkJCSAgfSk7CisJCQkJIH0KKwkJCSB9KTsKKworCQkvLyBDcmVhdGUgdGhlIGVkaXRpbmcgZG9tYWluIHdpdGggYSBzcGVjaWFsIGNvbW1hbmQgc3RhY2suCisJCS8vCisJCWVkaXRpbmdEb21haW4gPSBuZXcgQWRhcHRlckZhY3RvcnlFZGl0aW5nRG9tYWluKGFkYXB0ZXJGYWN0b3J5LCBjb21tYW5kU3RhY2ssIG5ldyBIYXNoTWFwPFJlc291cmNlLCBCb29sZWFuPigpKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGlzIGhlcmUgZm9yIHRoZSBsaXN0ZW5lciB0byBiZSBhYmxlIHRvIGNhbGwgaXQuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgZmlyZVByb3BlcnR5Q2hhbmdlKGludCBhY3Rpb24pIHsKKwkJc3VwZXIuZmlyZVByb3BlcnR5Q2hhbmdlKGFjdGlvbik7CisJfQorCisJLyoqCisJICogVGhpcyBzZXRzIHRoZSBzZWxlY3Rpb24gaW50byB3aGljaGV2ZXIgdmlld2VyIGlzIGFjdGl2ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRTZWxlY3Rpb25Ub1ZpZXdlcihDb2xsZWN0aW9uPD8+IGNvbGxlY3Rpb24pIHsKKwkJZmluYWwgQ29sbGVjdGlvbjw/PiB0aGVTZWxlY3Rpb24gPSBjb2xsZWN0aW9uOworCQkvLyBNYWtlIHN1cmUgaXQncyBva2F5LgorCQkvLworCQlpZiAodGhlU2VsZWN0aW9uICE9IG51bGwgJiYgIXRoZVNlbGVjdGlvbi5pc0VtcHR5KCkpIHsKKwkJCVJ1bm5hYmxlIHJ1bm5hYmxlID0KKwkJCQluZXcgUnVubmFibGUoKSB7CisJCQkJCXB1YmxpYyB2b2lkIHJ1bigpIHsKKwkJCQkJCS8vIFRyeSB0byBzZWxlY3QgdGhlIGl0ZW1zIGluIHRoZSBjdXJyZW50IGNvbnRlbnQgdmlld2VyIG9mIHRoZSBlZGl0b3IuCisJCQkJCQkvLworCQkJCQkJaWYgKGN1cnJlbnRWaWV3ZXIgIT0gbnVsbCkgeworCQkJCQkJCWN1cnJlbnRWaWV3ZXIuc2V0U2VsZWN0aW9uKG5ldyBTdHJ1Y3R1cmVkU2VsZWN0aW9uKHRoZVNlbGVjdGlvbi50b0FycmF5KCkpLCB0cnVlKTsKKwkJCQkJCX0KKwkJCQkJfQorCQkJCX07CisJCQlnZXRTaXRlKCkuZ2V0U2hlbGwoKS5nZXREaXNwbGF5KCkuYXN5bmNFeGVjKHJ1bm5hYmxlKTsKKwkJfQorCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyB0aGUgZWRpdGluZyBkb21haW4gYXMgcmVxdWlyZWQgYnkgdGhlIHtAbGluayBJRWRpdGluZ0RvbWFpblByb3ZpZGVyfSBpbnRlcmZhY2UuCisJICogVGhpcyBpcyBpbXBvcnRhbnQgZm9yIGltcGxlbWVudGluZyB0aGUgc3RhdGljIG1ldGhvZHMgb2Yge0BsaW5rIEFkYXB0ZXJGYWN0b3J5RWRpdGluZ0RvbWFpbn0KKwkgKiBhbmQgZm9yIHN1cHBvcnRpbmcge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmFjdGlvbi5Db21tYW5kQWN0aW9ufS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRWRpdGluZ0RvbWFpbiBnZXRFZGl0aW5nRG9tYWluKCkgeworCQlyZXR1cm4gZWRpdGluZ0RvbWFpbjsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgY2xhc3MgUmV2ZXJzZUFkYXB0ZXJGYWN0b3J5Q29udGVudFByb3ZpZGVyIGV4dGVuZHMgQWRhcHRlckZhY3RvcnlDb250ZW50UHJvdmlkZXIgeworCQlwdWJsaWMgUmV2ZXJzZUFkYXB0ZXJGYWN0b3J5Q29udGVudFByb3ZpZGVyKEFkYXB0ZXJGYWN0b3J5IGFkYXB0ZXJGYWN0b3J5KSB7CisJCQlzdXBlcihhZGFwdGVyRmFjdG9yeSk7CisJCX0KKworCQlAT3ZlcnJpZGUKKwkJcHVibGljIE9iamVjdCBbXSBnZXRFbGVtZW50cyhPYmplY3Qgb2JqZWN0KSB7CisJCQlPYmplY3QgcGFyZW50ID0gc3VwZXIuZ2V0UGFyZW50KG9iamVjdCk7CisJCQlyZXR1cm4gKHBhcmVudCA9PSBudWxsID8gQ29sbGVjdGlvbnMuRU1QVFlfU0VUIDogQ29sbGVjdGlvbnMuc2luZ2xldG9uKHBhcmVudCkpLnRvQXJyYXkoKTsKKwkJfQorCisJCUBPdmVycmlkZQorCQlwdWJsaWMgT2JqZWN0IFtdIGdldENoaWxkcmVuKE9iamVjdCBvYmplY3QpIHsKKwkJCU9iamVjdCBwYXJlbnQgPSBzdXBlci5nZXRQYXJlbnQob2JqZWN0KTsKKwkJCXJldHVybiAocGFyZW50ID09IG51bGwgPyBDb2xsZWN0aW9ucy5FTVBUWV9TRVQgOiBDb2xsZWN0aW9ucy5zaW5nbGV0b24ocGFyZW50KSkudG9BcnJheSgpOworCQl9CisKKwkJQE92ZXJyaWRlCisJCXB1YmxpYyBib29sZWFuIGhhc0NoaWxkcmVuKE9iamVjdCBvYmplY3QpIHsKKwkJCU9iamVjdCBwYXJlbnQgPSBzdXBlci5nZXRQYXJlbnQob2JqZWN0KTsKKwkJCXJldHVybiBwYXJlbnQgIT0gbnVsbDsKKwkJfQorCisJCUBPdmVycmlkZQorCQlwdWJsaWMgT2JqZWN0IGdldFBhcmVudChPYmplY3Qgb2JqZWN0KSB7CisJCQlyZXR1cm4gbnVsbDsKKwkJfQorCX0KKworCS8qKgorCSAqIFRoaXMgbWFrZXMgc3VyZSB0aGF0IG9uZSBjb250ZW50IHZpZXdlciwgZWl0aGVyIGZvciB0aGUgY3VycmVudCBwYWdlIG9yIHRoZSBvdXRsaW5lIHZpZXcsIGlmIGl0IGhhcyBmb2N1cywKKwkgKiBpcyB0aGUgY3VycmVudCBvbmUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgc2V0Q3VycmVudFZpZXdlcihWaWV3ZXIgdmlld2VyKSB7CisJCS8vIElmIGl0IGlzIGNoYW5naW5nLi4uCisJCS8vCisJCWlmIChjdXJyZW50Vmlld2VyICE9IHZpZXdlcikgeworCQkJaWYgKHNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lciA9PSBudWxsKSB7CisJCQkJLy8gQ3JlYXRlIHRoZSBsaXN0ZW5lciBvbiBkZW1hbmQuCisJCQkJLy8KKwkJCQlzZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIgPQorCQkJCQluZXcgSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcigpIHsKKwkJCQkJCS8vIFRoaXMganVzdCBub3RpZmllcyB0aG9zZSB0aGluZ3MgdGhhdCBhcmUgYWZmZWN0ZWQgYnkgdGhlIHNlY3Rpb24uCisJCQkJCQkvLworCQkJCQkJcHVibGljIHZvaWQgc2VsZWN0aW9uQ2hhbmdlZChTZWxlY3Rpb25DaGFuZ2VkRXZlbnQgc2VsZWN0aW9uQ2hhbmdlZEV2ZW50KSB7CisJCQkJCQkJc2V0U2VsZWN0aW9uKHNlbGVjdGlvbkNoYW5nZWRFdmVudC5nZXRTZWxlY3Rpb24oKSk7CisJCQkJCQl9CisJCQkJCX07CisJCQl9CisKKwkJCS8vIFN0b3AgbGlzdGVuaW5nIHRvIHRoZSBvbGQgb25lLgorCQkJLy8KKwkJCWlmIChjdXJyZW50Vmlld2VyICE9IG51bGwpIHsKKwkJCQljdXJyZW50Vmlld2VyLnJlbW92ZVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcihzZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIpOworCQkJfQorCisJCQkvLyBTdGFydCBsaXN0ZW5pbmcgdG8gdGhlIG5ldyBvbmUuCisJCQkvLworCQkJaWYgKHZpZXdlciAhPSBudWxsKSB7CisJCQkJdmlld2VyLmFkZFNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcihzZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIpOworCQkJfQorCisJCQkvLyBSZW1lbWJlciBpdC4KKwkJCS8vCisJCQljdXJyZW50Vmlld2VyID0gdmlld2VyOworCisJCQkvLyBTZXQgdGhlIGVkaXRvcnMgc2VsZWN0aW9uIGJhc2VkIG9uIHRoZSBjdXJyZW50IHZpZXdlcidzIHNlbGVjdGlvbi4KKwkJCS8vCisJCQlzZXRTZWxlY3Rpb24oY3VycmVudFZpZXdlciA9PSBudWxsID8gU3RydWN0dXJlZFNlbGVjdGlvbi5FTVBUWSA6IGN1cnJlbnRWaWV3ZXIuZ2V0U2VsZWN0aW9uKCkpOworCQl9CisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIHRoZSB2aWV3ZXIgYXMgcmVxdWlyZWQgYnkgdGhlIHtAbGluayBJVmlld2VyUHJvdmlkZXJ9IGludGVyZmFjZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVmlld2VyIGdldFZpZXdlcigpIHsKKwkJcmV0dXJuIGN1cnJlbnRWaWV3ZXI7CisJfQorCisJLyoqCisJICogVGhpcyBjcmVhdGVzIGEgY29udGV4dCBtZW51IGZvciB0aGUgdmlld2VyIGFuZCBhZGRzIGEgbGlzdGVuZXIgYXMgd2VsbCByZWdpc3RlcmluZyB0aGUgbWVudSBmb3IgZXh0ZW5zaW9uLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIGNyZWF0ZUNvbnRleHRNZW51Rm9yKFN0cnVjdHVyZWRWaWV3ZXIgdmlld2VyKSB7CisJCU1lbnVNYW5hZ2VyIGNvbnRleHRNZW51ID0gbmV3IE1lbnVNYW5hZ2VyKCIjUG9wVXAiKTsgLy8kTk9OLU5MUy0xJAorCQljb250ZXh0TWVudS5hZGQobmV3IFNlcGFyYXRvcigiYWRkaXRpb25zIikpOyAvLyROT04tTkxTLTEkCisJCWNvbnRleHRNZW51LnNldFJlbW92ZUFsbFdoZW5TaG93bih0cnVlKTsKKwkJY29udGV4dE1lbnUuYWRkTWVudUxpc3RlbmVyKHRoaXMpOworCQlNZW51IG1lbnU9IGNvbnRleHRNZW51LmNyZWF0ZUNvbnRleHRNZW51KHZpZXdlci5nZXRDb250cm9sKCkpOworCQl2aWV3ZXIuZ2V0Q29udHJvbCgpLnNldE1lbnUobWVudSk7CisJCWdldFNpdGUoKS5yZWdpc3RlckNvbnRleHRNZW51KGNvbnRleHRNZW51LCBuZXcgVW53cmFwcGluZ1NlbGVjdGlvblByb3ZpZGVyKHZpZXdlcikpOworCisJCWludCBkbmRPcGVyYXRpb25zID0gRE5ELkRST1BfQ09QWSB8IERORC5EUk9QX01PVkUgfCBETkQuRFJPUF9MSU5LOworCQlUcmFuc2ZlcltdIHRyYW5zZmVycyA9IG5ldyBUcmFuc2ZlcltdIHsgTG9jYWxUcmFuc2Zlci5nZXRJbnN0YW5jZSgpIH07CisJCXZpZXdlci5hZGREcmFnU3VwcG9ydChkbmRPcGVyYXRpb25zLCB0cmFuc2ZlcnMsIG5ldyBWaWV3ZXJEcmFnQWRhcHRlcih2aWV3ZXIpKTsKKwkJdmlld2VyLmFkZERyb3BTdXBwb3J0KGRuZE9wZXJhdGlvbnMsIHRyYW5zZmVycywgbmV3IEVkaXRpbmdEb21haW5WaWV3ZXJEcm9wQWRhcHRlcihlZGl0aW5nRG9tYWluLCB2aWV3ZXIpKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGlzIHRoZSBtZXRob2QgY2FsbGVkIHRvIGxvYWQgYSByZXNvdXJjZSBpbnRvIHRoZSBlZGl0aW5nIGRvbWFpbidzIHJlc291cmNlIHNldCBiYXNlZCBvbiB0aGUgZWRpdG9yJ3MgaW5wdXQuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgY3JlYXRlTW9kZWwoKSB7CisJCVVSSSByZXNvdXJjZVVSSSA9IEVkaXRVSVV0aWwuZ2V0VVJJKGdldEVkaXRvcklucHV0KCkpOworCQlFeGNlcHRpb24gZXhjZXB0aW9uID0gbnVsbDsKKwkJUmVzb3VyY2UgcmVzb3VyY2UgPSBudWxsOworCQl0cnkgeworCQkJLy8gTG9hZCB0aGUgcmVzb3VyY2UgdGhyb3VnaCB0aGUgZWRpdGluZyBkb21haW4uCisJCQkvLworCQkJcmVzb3VyY2UgPSBlZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkuZ2V0UmVzb3VyY2UocmVzb3VyY2VVUkksIHRydWUpOworCQl9CisJCWNhdGNoIChFeGNlcHRpb24gZSkgeworCQkJZXhjZXB0aW9uID0gZTsKKwkJCXJlc291cmNlID0gZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpLmdldFJlc291cmNlKHJlc291cmNlVVJJLCBmYWxzZSk7CisJCX0KKworCQlEaWFnbm9zdGljIGRpYWdub3N0aWMgPSBhbmFseXplUmVzb3VyY2VQcm9ibGVtcyhyZXNvdXJjZSwgZXhjZXB0aW9uKTsKKwkJaWYgKGRpYWdub3N0aWMuZ2V0U2V2ZXJpdHkoKSAhPSBEaWFnbm9zdGljLk9LKSB7CisJCQlyZXNvdXJjZVRvRGlhZ25vc3RpY01hcC5wdXQocmVzb3VyY2UsICBhbmFseXplUmVzb3VyY2VQcm9ibGVtcyhyZXNvdXJjZSwgZXhjZXB0aW9uKSk7CisJCX0KKwkJZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpLmVBZGFwdGVycygpLmFkZChwcm9ibGVtSW5kaWNhdGlvbkFkYXB0ZXIpOworCX0KKworCS8qKgorCSAqIFJldHVybnMgYSBkaWFnbm9zdGljIGRlc2NyaWJpbmcgdGhlIGVycm9ycyBhbmQgd2FybmluZ3MgbGlzdGVkIGluIHRoZSByZXNvdXJjZQorCSAqIGFuZCB0aGUgc3BlY2lmaWVkIGV4Y2VwdGlvbiAoaWYgYW55KS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRGlhZ25vc3RpYyBhbmFseXplUmVzb3VyY2VQcm9ibGVtcyhSZXNvdXJjZSByZXNvdXJjZSwgRXhjZXB0aW9uIGV4Y2VwdGlvbikgeworCQlpZiAoIXJlc291cmNlLmdldEVycm9ycygpLmlzRW1wdHkoKSB8fCAhcmVzb3VyY2UuZ2V0V2FybmluZ3MoKS5pc0VtcHR5KCkpIHsKKwkJCUJhc2ljRGlhZ25vc3RpYyBiYXNpY0RpYWdub3N0aWMgPQorCQkJCW5ldyBCYXNpY0RpYWdub3N0aWMKKwkJCQkJKERpYWdub3N0aWMuRVJST1IsCisJCQkJCSAib3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucyIsIC8vJE5PTi1OTFMtMSQKKwkJCQkJIDAsCisJCQkJCSBnZXRTdHJpbmcoIl9VSV9DcmVhdGVNb2RlbEVycm9yX21lc3NhZ2UiLCByZXNvdXJjZS5nZXRVUkkoKSksIC8vJE5PTi1OTFMtMSQKKwkJCQkJIG5ldyBPYmplY3QgW10geyBleGNlcHRpb24gPT0gbnVsbCA/IChPYmplY3QpcmVzb3VyY2UgOiBleGNlcHRpb24gfSk7CisJCQliYXNpY0RpYWdub3N0aWMubWVyZ2UoRWNvcmVVdGlsLmNvbXB1dGVEaWFnbm9zdGljKHJlc291cmNlLCB0cnVlKSk7CisJCQlyZXR1cm4gYmFzaWNEaWFnbm9zdGljOworCQl9CisJCWVsc2UgaWYgKGV4Y2VwdGlvbiAhPSBudWxsKSB7CisJCQlyZXR1cm4KKwkJCQluZXcgQmFzaWNEaWFnbm9zdGljCisJCQkJCShEaWFnbm9zdGljLkVSUk9SLAorCQkJCQkgIm9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMiLCAvLyROT04tTkxTLTEkCisJCQkJCSAwLAorCQkJCQkgZ2V0U3RyaW5nKCJfVUlfQ3JlYXRlTW9kZWxFcnJvcl9tZXNzYWdlIiwgcmVzb3VyY2UuZ2V0VVJJKCkpLCAvLyROT04tTkxTLTEkCisJCQkJCSBuZXcgT2JqZWN0W10geyBleGNlcHRpb24gfSk7CisJCX0KKwkJZWxzZSB7CisJCQlyZXR1cm4gRGlhZ25vc3RpYy5PS19JTlNUQU5DRTsKKwkJfQorCX0KKworCS8qKgorCSAqIFRoaXMgaXMgdGhlIG1ldGhvZCB1c2VkIGJ5IHRoZSBmcmFtZXdvcmsgdG8gaW5zdGFsbCB5b3VyIG93biBjb250cm9scy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBjcmVhdGVQYWdlcygpIHsKKwkJLy8gQ3JlYXRlcyB0aGUgbW9kZWwgZnJvbSB0aGUgZWRpdG9yIGlucHV0CisJCS8vCisJCWNyZWF0ZU1vZGVsKCk7CisKKwkJLy8gT25seSBjcmVhdGVzIHRoZSBvdGhlciBwYWdlcyBpZiB0aGVyZSBpcyBzb21ldGhpbmcgdGhhdCBjYW4gYmUgZWRpdGVkCisJCS8vCisJCWlmICghZ2V0RWRpdGluZ0RvbWFpbigpLmdldFJlc291cmNlU2V0KCkuZ2V0UmVzb3VyY2VzKCkuaXNFbXB0eSgpKSB7CisJCQkvLyBDcmVhdGUgYSBwYWdlIGZvciB0aGUgc2VsZWN0aW9uIHRyZWUgdmlldy4KKwkJCS8vCisJCQlUcmVlIHRyZWUgPSBuZXcgVHJlZShnZXRDb250YWluZXIoKSwgU1dULk1VTFRJKTsKKwkJCXNlbGVjdGlvblZpZXdlciA9IG5ldyBUcmVlVmlld2VyKHRyZWUpOworCQkJc2V0Q3VycmVudFZpZXdlcihzZWxlY3Rpb25WaWV3ZXIpOworCisJCQlzZWxlY3Rpb25WaWV3ZXIuc2V0Q29udGVudFByb3ZpZGVyKG5ldyBBZGFwdGVyRmFjdG9yeUNvbnRlbnRQcm92aWRlcihhZGFwdGVyRmFjdG9yeSkpOworCQkJc2VsZWN0aW9uVmlld2VyLnNldExhYmVsUHJvdmlkZXIobmV3IEFkYXB0ZXJGYWN0b3J5TGFiZWxQcm92aWRlcihhZGFwdGVyRmFjdG9yeSkpOworCQkJc2VsZWN0aW9uVmlld2VyLnNldElucHV0KGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKSk7CisJCQlzZWxlY3Rpb25WaWV3ZXIuc2V0U2VsZWN0aW9uKG5ldyBTdHJ1Y3R1cmVkU2VsZWN0aW9uKGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKS5nZXRSZXNvdXJjZXMoKS5nZXQoMCkpLCB0cnVlKTsKKworCQkJbmV3IEFkYXB0ZXJGYWN0b3J5VHJlZUVkaXRvcihzZWxlY3Rpb25WaWV3ZXIuZ2V0VHJlZSgpLCBhZGFwdGVyRmFjdG9yeSk7CisKKwkJCWNyZWF0ZUNvbnRleHRNZW51Rm9yKHNlbGVjdGlvblZpZXdlcik7CisJCQlpbnQgcGFnZUluZGV4ID0gYWRkUGFnZSh0cmVlKTsKKwkJCXNldFBhZ2VUZXh0KHBhZ2VJbmRleCwgZ2V0U3RyaW5nKCJfVUlfU2VsZWN0aW9uUGFnZV9sYWJlbCIpKTsgLy8kTk9OLU5MUy0xJAorCisJCQlnZXRTaXRlKCkuZ2V0U2hlbGwoKS5nZXREaXNwbGF5KCkuYXN5bmNFeGVjCisJCQkJKG5ldyBSdW5uYWJsZSgpIHsKKwkJCQkJIHB1YmxpYyB2b2lkIHJ1bigpIHsKKwkJCQkJCSBzZXRBY3RpdmVQYWdlKDApOworCQkJCQkgfQorCQkJCSB9KTsKKwkJfQorCisJCS8vIEVuc3VyZXMgdGhhdCB0aGlzIGVkaXRvciB3aWxsIG9ubHkgZGlzcGxheSB0aGUgcGFnZSdzIHRhYgorCQkvLyBhcmVhIGlmIHRoZXJlIGFyZSBtb3JlIHRoYW4gb25lIHBhZ2UKKwkJLy8KKwkJZ2V0Q29udGFpbmVyKCkuYWRkQ29udHJvbExpc3RlbmVyCisJCQkobmV3IENvbnRyb2xBZGFwdGVyKCkgeworCQkJCWJvb2xlYW4gZ3VhcmQgPSBmYWxzZTsKKwkJCQlAT3ZlcnJpZGUKKwkJCQlwdWJsaWMgdm9pZCBjb250cm9sUmVzaXplZChDb250cm9sRXZlbnQgZXZlbnQpIHsKKwkJCQkJaWYgKCFndWFyZCkgeworCQkJCQkJZ3VhcmQgPSB0cnVlOworCQkJCQkJaGlkZVRhYnMoKTsKKwkJCQkJCWd1YXJkID0gZmFsc2U7CisJCQkJCX0KKwkJCQl9CisJCQkgfSk7CisKKwkJZ2V0U2l0ZSgpLmdldFNoZWxsKCkuZ2V0RGlzcGxheSgpLmFzeW5jRXhlYworCQkJKG5ldyBSdW5uYWJsZSgpIHsKKwkJCQkgcHVibGljIHZvaWQgcnVuKCkgeworCQkJCQkgdXBkYXRlUHJvYmxlbUluZGljYXRpb24oKTsKKwkJCQkgfQorCQkJIH0pOworCX0KKworCS8qKgorCSAqIElmIHRoZXJlIGlzIGp1c3Qgb25lIHBhZ2UgaW4gdGhlIG11bHRpLXBhZ2UgZWRpdG9yIHBhcnQsCisJICogdGhpcyBoaWRlcyB0aGUgc2luZ2xlIHRhYiBhdCB0aGUgYm90dG9tLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIGhpZGVUYWJzKCkgeworCQlpZiAoZ2V0UGFnZUNvdW50KCkgPD0gMSkgeworCQkJc2V0UGFnZVRleHQoMCwgIiIpOyAvLyROT04tTkxTLTEkCisJCQlpZiAoZ2V0Q29udGFpbmVyKCkgaW5zdGFuY2VvZiBDVGFiRm9sZGVyKSB7CisJCQkJKChDVGFiRm9sZGVyKWdldENvbnRhaW5lcigpKS5zZXRUYWJIZWlnaHQoMSk7CisJCQkJUG9pbnQgcG9pbnQgPSBnZXRDb250YWluZXIoKS5nZXRTaXplKCk7CisJCQkJZ2V0Q29udGFpbmVyKCkuc2V0U2l6ZShwb2ludC54LCBwb2ludC55ICsgNik7CisJCQl9CisJCX0KKwl9CisKKwkvKioKKwkgKiBJZiB0aGVyZSBpcyBtb3JlIHRoYW4gb25lIHBhZ2UgaW4gdGhlIG11bHRpLXBhZ2UgZWRpdG9yIHBhcnQsCisJICogdGhpcyBzaG93cyB0aGUgdGFicyBhdCB0aGUgYm90dG9tLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIHNob3dUYWJzKCkgeworCQlpZiAoZ2V0UGFnZUNvdW50KCkgPiAxKSB7CisJCQlzZXRQYWdlVGV4dCgwLCBnZXRTdHJpbmcoIl9VSV9TZWxlY3Rpb25QYWdlX2xhYmVsIikpOyAvLyROT04tTkxTLTEkCisJCQlpZiAoZ2V0Q29udGFpbmVyKCkgaW5zdGFuY2VvZiBDVGFiRm9sZGVyKSB7CisJCQkJKChDVGFiRm9sZGVyKWdldENvbnRhaW5lcigpKS5zZXRUYWJIZWlnaHQoU1dULkRFRkFVTFQpOworCQkJCVBvaW50IHBvaW50ID0gZ2V0Q29udGFpbmVyKCkuZ2V0U2l6ZSgpOworCQkJCWdldENvbnRhaW5lcigpLnNldFNpemUocG9pbnQueCwgcG9pbnQueSAtIDYpOworCQkJfQorCQl9CisJfQorCisJLyoqCisJICogVGhpcyBpcyB1c2VkIHRvIHRyYWNrIHRoZSBhY3RpdmUgdmlld2VyLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIHBhZ2VDaGFuZ2UoaW50IHBhZ2VJbmRleCkgeworCQlzdXBlci5wYWdlQ2hhbmdlKHBhZ2VJbmRleCk7CisKKwkJaWYgKGNvbnRlbnRPdXRsaW5lUGFnZSAhPSBudWxsKSB7CisJCQloYW5kbGVDb250ZW50T3V0bGluZVNlbGVjdGlvbihjb250ZW50T3V0bGluZVBhZ2UuZ2V0U2VsZWN0aW9uKCkpOworCQl9CisJfQorCisJLyoqCisJICogVGhpcyBpcyBob3cgdGhlIGZyYW1ld29yayBkZXRlcm1pbmVzIHdoaWNoIGludGVyZmFjZXMgd2UgaW1wbGVtZW50LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBTdXBwcmVzc1dhcm5pbmdzKCJ1bmNoZWNrZWQiKQorCQlAT3ZlcnJpZGUKKwlwdWJsaWMgT2JqZWN0IGdldEFkYXB0ZXIoQ2xhc3Mga2V5KSB7CisJCWlmIChrZXkuZXF1YWxzKElDb250ZW50T3V0bGluZVBhZ2UuY2xhc3MpKSB7CisJCQlyZXR1cm4gc2hvd091dGxpbmVWaWV3KCkgPyBnZXRDb250ZW50T3V0bGluZVBhZ2UoKSA6IG51bGw7CisJCX0KKwkJZWxzZSBpZiAoa2V5LmVxdWFscyhJUHJvcGVydHlTaGVldFBhZ2UuY2xhc3MpKSB7CisJCQlyZXR1cm4gZ2V0UHJvcGVydHlTaGVldFBhZ2UoKTsKKwkJfQorCQllbHNlIGlmIChrZXkuZXF1YWxzKElHb3RvTWFya2VyLmNsYXNzKSkgeworCQkJcmV0dXJuIHRoaXM7CisJCX0KKwkJZWxzZSB7CisJCQlyZXR1cm4gc3VwZXIuZ2V0QWRhcHRlcihrZXkpOworCQl9CisJfQorCisJLyoqCisJICogVGhpcyBhY2Nlc3NlcyBhIGNhY2hlZCB2ZXJzaW9uIG9mIHRoZSBjb250ZW50IG91dGxpbmVyLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBJQ29udGVudE91dGxpbmVQYWdlIGdldENvbnRlbnRPdXRsaW5lUGFnZSgpIHsKKwkJaWYgKGNvbnRlbnRPdXRsaW5lUGFnZSA9PSBudWxsKSB7CisJCQkvLyBUaGUgY29udGVudCBvdXRsaW5lIGlzIGp1c3QgYSB0cmVlLgorCQkJLy8KKwkJCWNsYXNzIE15Q29udGVudE91dGxpbmVQYWdlIGV4dGVuZHMgQ29udGVudE91dGxpbmVQYWdlIHsKKwkJCQlAT3ZlcnJpZGUKKwkJCQlwdWJsaWMgdm9pZCBjcmVhdGVDb250cm9sKENvbXBvc2l0ZSBwYXJlbnQpIHsKKwkJCQkJc3VwZXIuY3JlYXRlQ29udHJvbChwYXJlbnQpOworCQkJCQljb250ZW50T3V0bGluZVZpZXdlciA9IGdldFRyZWVWaWV3ZXIoKTsKKwkJCQkJY29udGVudE91dGxpbmVWaWV3ZXIuYWRkU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyKHRoaXMpOworCisJCQkJCS8vIFNldCB1cCB0aGUgdHJlZSB2aWV3ZXIuCisJCQkJCS8vCisJCQkJCWNvbnRlbnRPdXRsaW5lVmlld2VyLnNldENvbnRlbnRQcm92aWRlcihuZXcgQWRhcHRlckZhY3RvcnlDb250ZW50UHJvdmlkZXIoYWRhcHRlckZhY3RvcnkpKTsKKwkJCQkJY29udGVudE91dGxpbmVWaWV3ZXIuc2V0TGFiZWxQcm92aWRlcihuZXcgQWRhcHRlckZhY3RvcnlMYWJlbFByb3ZpZGVyKGFkYXB0ZXJGYWN0b3J5KSk7CisJCQkJCWNvbnRlbnRPdXRsaW5lVmlld2VyLnNldElucHV0KGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKSk7CisKKwkJCQkJLy8gTWFrZSBzdXJlIG91ciBwb3B1cHMgd29yay4KKwkJCQkJLy8KKwkJCQkJY3JlYXRlQ29udGV4dE1lbnVGb3IoY29udGVudE91dGxpbmVWaWV3ZXIpOworCisJCQkJCWlmICghZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpLmdldFJlc291cmNlcygpLmlzRW1wdHkoKSkgeworCQkJCQkgIC8vIFNlbGVjdCB0aGUgcm9vdCBvYmplY3QgaW4gdGhlIHZpZXcuCisJCQkJCSAgLy8KKwkJCQkJICBjb250ZW50T3V0bGluZVZpZXdlci5zZXRTZWxlY3Rpb24obmV3IFN0cnVjdHVyZWRTZWxlY3Rpb24oZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpLmdldFJlc291cmNlcygpLmdldCgwKSksIHRydWUpOworCQkJCQl9CisJCQkJfQorCisJCQkJQE92ZXJyaWRlCisJCQkJcHVibGljIHZvaWQgbWFrZUNvbnRyaWJ1dGlvbnMoSU1lbnVNYW5hZ2VyIG1lbnVNYW5hZ2VyLCBJVG9vbEJhck1hbmFnZXIgdG9vbEJhck1hbmFnZXIsIElTdGF0dXNMaW5lTWFuYWdlciBzdGF0dXNMaW5lTWFuYWdlcikgeworCQkJCQlzdXBlci5tYWtlQ29udHJpYnV0aW9ucyhtZW51TWFuYWdlciwgdG9vbEJhck1hbmFnZXIsIHN0YXR1c0xpbmVNYW5hZ2VyKTsKKwkJCQkJY29udGVudE91dGxpbmVTdGF0dXNMaW5lTWFuYWdlciA9IHN0YXR1c0xpbmVNYW5hZ2VyOworCQkJCX0KKworCQkJCUBPdmVycmlkZQorCQkJCXB1YmxpYyB2b2lkIHNldEFjdGlvbkJhcnMoSUFjdGlvbkJhcnMgYWN0aW9uQmFycykgeworCQkJCQlzdXBlci5zZXRBY3Rpb25CYXJzKGFjdGlvbkJhcnMpOworCQkJCQlnZXRBY3Rpb25CYXJDb250cmlidXRvcigpLnNoYXJlR2xvYmFsQWN0aW9ucyh0aGlzLCBhY3Rpb25CYXJzKTsKKwkJCQl9CisJCQl9CisKKwkJCWNvbnRlbnRPdXRsaW5lUGFnZSA9IG5ldyBNeUNvbnRlbnRPdXRsaW5lUGFnZSgpOworCisJCQkvLyBMaXN0ZW4gdG8gc2VsZWN0aW9uIHNvIHRoYXQgd2UgY2FuIGhhbmRsZSBpdCBpcyBhIHNwZWNpYWwgd2F5LgorCQkJLy8KKwkJCWNvbnRlbnRPdXRsaW5lUGFnZS5hZGRTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIKKwkJCQkobmV3IElTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIoKSB7CisJCQkJCSAvLyBUaGlzIGVuc3VyZXMgdGhhdCB3ZSBoYW5kbGUgc2VsZWN0aW9ucyBjb3JyZWN0bHkuCisJCQkJCSAvLworCQkJCQkgcHVibGljIHZvaWQgc2VsZWN0aW9uQ2hhbmdlZChTZWxlY3Rpb25DaGFuZ2VkRXZlbnQgZXZlbnQpIHsKKwkJCQkJCSBoYW5kbGVDb250ZW50T3V0bGluZVNlbGVjdGlvbihldmVudC5nZXRTZWxlY3Rpb24oKSk7CisJCQkJCSB9CisJCQkJIH0pOworCQl9CisKKwkJcmV0dXJuIGNvbnRlbnRPdXRsaW5lUGFnZTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFjY2Vzc2VzIGEgY2FjaGVkIHZlcnNpb24gb2YgdGhlIHByb3BlcnR5IHNoZWV0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBJUHJvcGVydHlTaGVldFBhZ2UgZ2V0UHJvcGVydHlTaGVldFBhZ2UoKSB7CisJCWlmIChwcm9wZXJ0eVNoZWV0UGFnZSA9PSBudWxsKSB7CisJCQlwcm9wZXJ0eVNoZWV0UGFnZSA9CisJCQkJbmV3IEV4dGVuZGVkUHJvcGVydHlTaGVldFBhZ2UoZWRpdGluZ0RvbWFpbikgeworCQkJCQlAT3ZlcnJpZGUKKwkJCQkJcHVibGljIHZvaWQgc2V0U2VsZWN0aW9uVG9WaWV3ZXIoTGlzdDw/PiBzZWxlY3Rpb24pIHsKKwkJCQkJCUxhYmVsc0VkaXRvci50aGlzLnNldFNlbGVjdGlvblRvVmlld2VyKHNlbGVjdGlvbik7CisJCQkJCQlMYWJlbHNFZGl0b3IudGhpcy5zZXRGb2N1cygpOworCQkJCQl9CisKKwkJCQkJQE92ZXJyaWRlCisJCQkJCXB1YmxpYyB2b2lkIHNldEFjdGlvbkJhcnMoSUFjdGlvbkJhcnMgYWN0aW9uQmFycykgeworCQkJCQkJc3VwZXIuc2V0QWN0aW9uQmFycyhhY3Rpb25CYXJzKTsKKwkJCQkJCWdldEFjdGlvbkJhckNvbnRyaWJ1dG9yKCkuc2hhcmVHbG9iYWxBY3Rpb25zKHRoaXMsIGFjdGlvbkJhcnMpOworCQkJCQl9CisJCQkJfTsKKwkJCXByb3BlcnR5U2hlZXRQYWdlLnNldFByb3BlcnR5U291cmNlUHJvdmlkZXIobmV3IEFkYXB0ZXJGYWN0b3J5Q29udGVudFByb3ZpZGVyKGFkYXB0ZXJGYWN0b3J5KSk7CisJCX0KKworCQlyZXR1cm4gcHJvcGVydHlTaGVldFBhZ2U7CisJfQorCisJLyoqCisJICogVGhpcyBkZWFscyB3aXRoIGhvdyB3ZSB3YW50IHNlbGVjdGlvbiBpbiB0aGUgb3V0bGluZXIgdG8gYWZmZWN0IHRoZSBvdGhlciB2aWV3cy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBoYW5kbGVDb250ZW50T3V0bGluZVNlbGVjdGlvbihJU2VsZWN0aW9uIHNlbGVjdGlvbikgeworCQlpZiAoc2VsZWN0aW9uVmlld2VyICE9IG51bGwgJiYgIXNlbGVjdGlvbi5pc0VtcHR5KCkgJiYgc2VsZWN0aW9uIGluc3RhbmNlb2YgSVN0cnVjdHVyZWRTZWxlY3Rpb24pIHsKKwkJCUl0ZXJhdG9yPD8+IHNlbGVjdGVkRWxlbWVudHMgPSAoKElTdHJ1Y3R1cmVkU2VsZWN0aW9uKXNlbGVjdGlvbikuaXRlcmF0b3IoKTsKKwkJCWlmIChzZWxlY3RlZEVsZW1lbnRzLmhhc05leHQoKSkgeworCQkJCS8vIEdldCB0aGUgZmlyc3Qgc2VsZWN0ZWQgZWxlbWVudC4KKwkJCQkvLworCQkJCU9iamVjdCBzZWxlY3RlZEVsZW1lbnQgPSBzZWxlY3RlZEVsZW1lbnRzLm5leHQoKTsKKworCQkJCUFycmF5TGlzdDxPYmplY3Q+IHNlbGVjdGlvbkxpc3QgPSBuZXcgQXJyYXlMaXN0PE9iamVjdD4oKTsKKwkJCQlzZWxlY3Rpb25MaXN0LmFkZChzZWxlY3RlZEVsZW1lbnQpOworCQkJCXdoaWxlIChzZWxlY3RlZEVsZW1lbnRzLmhhc05leHQoKSkgeworCQkJCQlzZWxlY3Rpb25MaXN0LmFkZChzZWxlY3RlZEVsZW1lbnRzLm5leHQoKSk7CisJCQkJfQorCisJCQkJLy8gU2V0IHRoZSBzZWxlY3Rpb24gdG8gdGhlIHdpZGdldC4KKwkJCQkvLworCQkJCXNlbGVjdGlvblZpZXdlci5zZXRTZWxlY3Rpb24obmV3IFN0cnVjdHVyZWRTZWxlY3Rpb24oc2VsZWN0aW9uTGlzdCkpOworCQkJfQorCQl9CisJfQorCisJLyoqCisJICogVGhpcyBpcyBmb3IgaW1wbGVtZW50aW5nIHtAbGluayBJRWRpdG9yUGFydH0gYW5kIHNpbXBseSB0ZXN0cyB0aGUgY29tbWFuZCBzdGFjay4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgYm9vbGVhbiBpc0RpcnR5KCkgeworCQlyZXR1cm4gKChCYXNpY0NvbW1hbmRTdGFjayllZGl0aW5nRG9tYWluLmdldENvbW1hbmRTdGFjaygpKS5pc1NhdmVOZWVkZWQoKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGlzIGZvciBpbXBsZW1lbnRpbmcge0BsaW5rIElFZGl0b3JQYXJ0fSBhbmQgc2ltcGx5IHNhdmVzIHRoZSBtb2RlbCBmaWxlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGRvU2F2ZShJUHJvZ3Jlc3NNb25pdG9yIHByb2dyZXNzTW9uaXRvcikgeworCQkvLyBTYXZlIG9ubHkgcmVzb3VyY2VzIHRoYXQgaGF2ZSBhY3R1YWxseSBjaGFuZ2VkLgorCQkvLworCQlmaW5hbCBNYXA8T2JqZWN0LCBPYmplY3Q+IHNhdmVPcHRpb25zID0gbmV3IEhhc2hNYXA8T2JqZWN0LCBPYmplY3Q+KCk7CisJCXNhdmVPcHRpb25zLnB1dChSZXNvdXJjZS5PUFRJT05fU0FWRV9PTkxZX0lGX0NIQU5HRUQsIFJlc291cmNlLk9QVElPTl9TQVZFX09OTFlfSUZfQ0hBTkdFRF9NRU1PUllfQlVGRkVSKTsKKworCQkvLyBEbyB0aGUgd29yayB3aXRoaW4gYW4gb3BlcmF0aW9uIGJlY2F1c2UgdGhpcyBpcyBhIGxvbmcgcnVubmluZyBhY3Rpdml0eSB0aGF0IG1vZGlmaWVzIHRoZSB3b3JrYmVuY2guCisJCS8vCisJCVdvcmtzcGFjZU1vZGlmeU9wZXJhdGlvbiBvcGVyYXRpb24gPQorCQkJbmV3IFdvcmtzcGFjZU1vZGlmeU9wZXJhdGlvbigpIHsKKwkJCQkvLyBUaGlzIGlzIHRoZSBtZXRob2QgdGhhdCBnZXRzIGludm9rZWQgd2hlbiB0aGUgb3BlcmF0aW9uIHJ1bnMuCisJCQkJLy8KKwkJCQlAT3ZlcnJpZGUKKwkJCQlwdWJsaWMgdm9pZCBleGVjdXRlKElQcm9ncmVzc01vbml0b3IgbW9uaXRvcikgeworCQkJCQkvLyBTYXZlIHRoZSByZXNvdXJjZXMgdG8gdGhlIGZpbGUgc3lzdGVtLgorCQkJCQkvLworCQkJCQlib29sZWFuIGZpcnN0ID0gdHJ1ZTsKKwkJCQkJZm9yIChSZXNvdXJjZSByZXNvdXJjZSA6IGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKS5nZXRSZXNvdXJjZXMoKSkgeworCQkJCQkJaWYgKChmaXJzdCB8fCAhcmVzb3VyY2UuZ2V0Q29udGVudHMoKS5pc0VtcHR5KCkgfHwgaXNQZXJzaXN0ZWQocmVzb3VyY2UpKSAmJiAhZWRpdGluZ0RvbWFpbi5pc1JlYWRPbmx5KHJlc291cmNlKSkgeworCQkJCQkJCXRyeSB7CisJCQkJCQkJCWxvbmcgdGltZVN0YW1wID0gcmVzb3VyY2UuZ2V0VGltZVN0YW1wKCk7CisJCQkJCQkJCXJlc291cmNlLnNhdmUoc2F2ZU9wdGlvbnMpOworCQkJCQkJCQlpZiAocmVzb3VyY2UuZ2V0VGltZVN0YW1wKCkgIT0gdGltZVN0YW1wKSB7CisJCQkJCQkJCQlzYXZlZFJlc291cmNlcy5hZGQocmVzb3VyY2UpOworCQkJCQkJCQl9CisJCQkJCQkJfQorCQkJCQkJCWNhdGNoIChFeGNlcHRpb24gZXhjZXB0aW9uKSB7CisJCQkJCQkJCXJlc291cmNlVG9EaWFnbm9zdGljTWFwLnB1dChyZXNvdXJjZSwgYW5hbHl6ZVJlc291cmNlUHJvYmxlbXMocmVzb3VyY2UsIGV4Y2VwdGlvbikpOworCQkJCQkJCX0KKwkJCQkJCQlmaXJzdCA9IGZhbHNlOworCQkJCQkJfQorCQkJCQl9CisJCQkJfQorCQkJfTsKKworCQl1cGRhdGVQcm9ibGVtSW5kaWNhdGlvbiA9IGZhbHNlOworCQl0cnkgeworCQkJLy8gVGhpcyBydW5zIHRoZSBvcHRpb25zLCBhbmQgc2hvd3MgcHJvZ3Jlc3MuCisJCQkvLworCQkJbmV3IFByb2dyZXNzTW9uaXRvckRpYWxvZyhnZXRTaXRlKCkuZ2V0U2hlbGwoKSkucnVuKHRydWUsIGZhbHNlLCBvcGVyYXRpb24pOworCisJCQkvLyBSZWZyZXNoIHRoZSBuZWNlc3Nhcnkgc3RhdGUuCisJCQkvLworCQkJKChCYXNpY0NvbW1hbmRTdGFjayllZGl0aW5nRG9tYWluLmdldENvbW1hbmRTdGFjaygpKS5zYXZlSXNEb25lKCk7CisJCQlmaXJlUHJvcGVydHlDaGFuZ2UoSUVkaXRvclBhcnQuUFJPUF9ESVJUWSk7CisJCX0KKwkJY2F0Y2ggKEV4Y2VwdGlvbiBleGNlcHRpb24pIHsKKwkJCS8vIFNvbWV0aGluZyB3ZW50IHdyb25nIHRoYXQgc2hvdWxkbid0LgorCQkJLy8KKwkJCURlZmluaXRpb25zRWRpdFBsdWdpbi5JTlNUQU5DRS5sb2coZXhjZXB0aW9uKTsKKwkJfQorCQl1cGRhdGVQcm9ibGVtSW5kaWNhdGlvbiA9IHRydWU7CisJCXVwZGF0ZVByb2JsZW1JbmRpY2F0aW9uKCk7CisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIHdoZXRoZXIgc29tZXRoaW5nIGhhcyBiZWVuIHBlcnNpc3RlZCB0byB0aGUgVVJJIG9mIHRoZSBzcGVjaWZpZWQgcmVzb3VyY2UuCisJICogVGhlIGltcGxlbWVudGF0aW9uIHVzZXMgdGhlIFVSSSBjb252ZXJ0ZXIgZnJvbSB0aGUgZWRpdG9yJ3MgcmVzb3VyY2Ugc2V0IHRvIHRyeSB0byBvcGVuIGFuIGlucHV0IHN0cmVhbS4gCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIGJvb2xlYW4gaXNQZXJzaXN0ZWQoUmVzb3VyY2UgcmVzb3VyY2UpIHsKKwkJYm9vbGVhbiByZXN1bHQgPSBmYWxzZTsKKwkJdHJ5IHsKKwkJCUlucHV0U3RyZWFtIHN0cmVhbSA9IGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKS5nZXRVUklDb252ZXJ0ZXIoKS5jcmVhdGVJbnB1dFN0cmVhbShyZXNvdXJjZS5nZXRVUkkoKSk7CisJCQlpZiAoc3RyZWFtICE9IG51bGwpIHsKKwkJCQlyZXN1bHQgPSB0cnVlOworCQkJCXN0cmVhbS5jbG9zZSgpOworCQkJfQorCQl9CisJCWNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7CisJCQkvLyBJZ25vcmUKKwkJfQorCQlyZXR1cm4gcmVzdWx0OworCX0KKworCS8qKgorCSAqIFRoaXMgYWx3YXlzIHJldHVybnMgdHJ1ZSBiZWNhdXNlIGl0IGlzIG5vdCBjdXJyZW50bHkgc3VwcG9ydGVkLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBib29sZWFuIGlzU2F2ZUFzQWxsb3dlZCgpIHsKKwkJcmV0dXJuIHRydWU7CisJfQorCisJLyoqCisJICogVGhpcyBhbHNvIGNoYW5nZXMgdGhlIGVkaXRvcidzIGlucHV0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGRvU2F2ZUFzKCkgeworCQlTYXZlQXNEaWFsb2cgc2F2ZUFzRGlhbG9nID0gbmV3IFNhdmVBc0RpYWxvZyhnZXRTaXRlKCkuZ2V0U2hlbGwoKSk7CisJCXNhdmVBc0RpYWxvZy5vcGVuKCk7CisJCUlQYXRoIHBhdGggPSBzYXZlQXNEaWFsb2cuZ2V0UmVzdWx0KCk7CisJCWlmIChwYXRoICE9IG51bGwpIHsKKwkJCUlGaWxlIGZpbGUgPSBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuZ2V0Um9vdCgpLmdldEZpbGUocGF0aCk7CisJCQlpZiAoZmlsZSAhPSBudWxsKSB7CisJCQkJZG9TYXZlQXMoVVJJLmNyZWF0ZVBsYXRmb3JtUmVzb3VyY2VVUkkoZmlsZS5nZXRGdWxsUGF0aCgpLnRvU3RyaW5nKCksIHRydWUpLCBuZXcgRmlsZUVkaXRvcklucHV0KGZpbGUpKTsKKwkJCX0KKwkJfQorCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIGRvU2F2ZUFzKFVSSSB1cmksIElFZGl0b3JJbnB1dCBlZGl0b3JJbnB1dCkgeworCQkoZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpLmdldFJlc291cmNlcygpLmdldCgwKSkuc2V0VVJJKHVyaSk7CisJCXNldElucHV0V2l0aE5vdGlmeShlZGl0b3JJbnB1dCk7CisJCXNldFBhcnROYW1lKGVkaXRvcklucHV0LmdldE5hbWUoKSk7CisJCUlQcm9ncmVzc01vbml0b3IgcHJvZ3Jlc3NNb25pdG9yID0KKwkJCWdldEFjdGlvbkJhcnMoKS5nZXRTdGF0dXNMaW5lTWFuYWdlcigpICE9IG51bGwgPworCQkJCWdldEFjdGlvbkJhcnMoKS5nZXRTdGF0dXNMaW5lTWFuYWdlcigpLmdldFByb2dyZXNzTW9uaXRvcigpIDoKKwkJCQluZXcgTnVsbFByb2dyZXNzTW9uaXRvcigpOworCQlkb1NhdmUocHJvZ3Jlc3NNb25pdG9yKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBnb3RvTWFya2VyKElNYXJrZXIgbWFya2VyKSB7CisJCXRyeSB7CisJCQlpZiAobWFya2VyLmdldFR5cGUoKS5lcXVhbHMoRVZhbGlkYXRvci5NQVJLRVIpKSB7CisJCQkJU3RyaW5nIHVyaUF0dHJpYnV0ZSA9IG1hcmtlci5nZXRBdHRyaWJ1dGUoRVZhbGlkYXRvci5VUklfQVRUUklCVVRFLCBudWxsKTsKKwkJCQlpZiAodXJpQXR0cmlidXRlICE9IG51bGwpIHsKKwkJCQkJVVJJIHVyaSA9IFVSSS5jcmVhdGVVUkkodXJpQXR0cmlidXRlKTsKKwkJCQkJRU9iamVjdCBlT2JqZWN0ID0gZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpLmdldEVPYmplY3QodXJpLCB0cnVlKTsKKwkJCQkJaWYgKGVPYmplY3QgIT0gbnVsbCkgeworCQkJCQkgIHNldFNlbGVjdGlvblRvVmlld2VyKENvbGxlY3Rpb25zLnNpbmdsZXRvbihlZGl0aW5nRG9tYWluLmdldFdyYXBwZXIoZU9iamVjdCkpKTsKKwkJCQkJfQorCQkJCX0KKwkJCX0KKwkJfQorCQljYXRjaCAoQ29yZUV4Y2VwdGlvbiBleGNlcHRpb24pIHsKKwkJCURlZmluaXRpb25zRWRpdFBsdWdpbi5JTlNUQU5DRS5sb2coZXhjZXB0aW9uKTsKKwkJfQorCX0KKworCS8qKgorCSAqIFRoaXMgaXMgY2FsbGVkIGR1cmluZyBzdGFydHVwLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGluaXQoSUVkaXRvclNpdGUgc2l0ZSwgSUVkaXRvcklucHV0IGVkaXRvcklucHV0KSB7CisJCXNldFNpdGUoc2l0ZSk7CisJCXNldElucHV0V2l0aE5vdGlmeShlZGl0b3JJbnB1dCk7CisJCXNldFBhcnROYW1lKGVkaXRvcklucHV0LmdldE5hbWUoKSk7CisJCXNpdGUuc2V0U2VsZWN0aW9uUHJvdmlkZXIodGhpcyk7CisJCXNpdGUuZ2V0UGFnZSgpLmFkZFBhcnRMaXN0ZW5lcihwYXJ0TGlzdGVuZXIpOworCQlSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuYWRkUmVzb3VyY2VDaGFuZ2VMaXN0ZW5lcihyZXNvdXJjZUNoYW5nZUxpc3RlbmVyLCBJUmVzb3VyY2VDaGFuZ2VFdmVudC5QT1NUX0NIQU5HRSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgc2V0Rm9jdXMoKSB7CisJCWdldENvbnRyb2woZ2V0QWN0aXZlUGFnZSgpKS5zZXRGb2N1cygpOworCX0KKworCS8qKgorCSAqIFRoaXMgaW1wbGVtZW50cyB7QGxpbmsgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uUHJvdmlkZXJ9LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIGFkZFNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcihJU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyIGxpc3RlbmVyKSB7CisJCXNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcnMuYWRkKGxpc3RlbmVyKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGltcGxlbWVudHMge0BsaW5rIG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvblByb3ZpZGVyfS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCByZW1vdmVTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIoSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lciBsaXN0ZW5lcikgeworCQlzZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXJzLnJlbW92ZShsaXN0ZW5lcik7CisJfQorCisJLyoqCisJICogVGhpcyBpbXBsZW1lbnRzIHtAbGluayBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb25Qcm92aWRlcn0gdG8gcmV0dXJuIHRoaXMgZWRpdG9yJ3Mgb3ZlcmFsbCBzZWxlY3Rpb24uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIElTZWxlY3Rpb24gZ2V0U2VsZWN0aW9uKCkgeworCQlyZXR1cm4gZWRpdG9yU2VsZWN0aW9uOworCX0KKworCS8qKgorCSAqIFRoaXMgaW1wbGVtZW50cyB7QGxpbmsgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uUHJvdmlkZXJ9IHRvIHNldCB0aGlzIGVkaXRvcidzIG92ZXJhbGwgc2VsZWN0aW9uLgorCSAqIENhbGxpbmcgdGhpcyByZXN1bHQgd2lsbCBub3RpZnkgdGhlIGxpc3RlbmVycy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRTZWxlY3Rpb24oSVNlbGVjdGlvbiBzZWxlY3Rpb24pIHsKKwkJZWRpdG9yU2VsZWN0aW9uID0gc2VsZWN0aW9uOworCisJCWZvciAoSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lciBsaXN0ZW5lciA6IHNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcnMpIHsKKwkJCWxpc3RlbmVyLnNlbGVjdGlvbkNoYW5nZWQobmV3IFNlbGVjdGlvbkNoYW5nZWRFdmVudCh0aGlzLCBzZWxlY3Rpb24pKTsKKwkJfQorCQlzZXRTdGF0dXNMaW5lTWFuYWdlcihzZWxlY3Rpb24pOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIHNldFN0YXR1c0xpbmVNYW5hZ2VyKElTZWxlY3Rpb24gc2VsZWN0aW9uKSB7CisJCUlTdGF0dXNMaW5lTWFuYWdlciBzdGF0dXNMaW5lTWFuYWdlciA9IGN1cnJlbnRWaWV3ZXIgIT0gbnVsbCAmJiBjdXJyZW50Vmlld2VyID09IGNvbnRlbnRPdXRsaW5lVmlld2VyID8KKwkJCWNvbnRlbnRPdXRsaW5lU3RhdHVzTGluZU1hbmFnZXIgOiBnZXRBY3Rpb25CYXJzKCkuZ2V0U3RhdHVzTGluZU1hbmFnZXIoKTsKKworCQlpZiAoc3RhdHVzTGluZU1hbmFnZXIgIT0gbnVsbCkgeworCQkJaWYgKHNlbGVjdGlvbiBpbnN0YW5jZW9mIElTdHJ1Y3R1cmVkU2VsZWN0aW9uKSB7CisJCQkJQ29sbGVjdGlvbjw/PiBjb2xsZWN0aW9uID0gKChJU3RydWN0dXJlZFNlbGVjdGlvbilzZWxlY3Rpb24pLnRvTGlzdCgpOworCQkJCXN3aXRjaCAoY29sbGVjdGlvbi5zaXplKCkpIHsKKwkJCQkJY2FzZSAwOiB7CisJCQkJCQlzdGF0dXNMaW5lTWFuYWdlci5zZXRNZXNzYWdlKGdldFN0cmluZygiX1VJX05vT2JqZWN0U2VsZWN0ZWQiKSk7IC8vJE5PTi1OTFMtMSQKKwkJCQkJCWJyZWFrOworCQkJCQl9CisJCQkJCWNhc2UgMTogeworCQkJCQkJU3RyaW5nIHRleHQgPSBuZXcgQWRhcHRlckZhY3RvcnlJdGVtRGVsZWdhdG9yKGFkYXB0ZXJGYWN0b3J5KS5nZXRUZXh0KGNvbGxlY3Rpb24uaXRlcmF0b3IoKS5uZXh0KCkpOworCQkJCQkJc3RhdHVzTGluZU1hbmFnZXIuc2V0TWVzc2FnZShnZXRTdHJpbmcoIl9VSV9TaW5nbGVPYmplY3RTZWxlY3RlZCIsIHRleHQpKTsgLy8kTk9OLU5MUy0xJAorCQkJCQkJYnJlYWs7CisJCQkJCX0KKwkJCQkJZGVmYXVsdDogeworCQkJCQkJc3RhdHVzTGluZU1hbmFnZXIuc2V0TWVzc2FnZShnZXRTdHJpbmcoIl9VSV9NdWx0aU9iamVjdFNlbGVjdGVkIiwgSW50ZWdlci50b1N0cmluZyhjb2xsZWN0aW9uLnNpemUoKSkpKTsgLy8kTk9OLU5MUy0xJAorCQkJCQkJYnJlYWs7CisJCQkJCX0KKwkJCQl9CisJCQl9CisJCQllbHNlIHsKKwkJCQlzdGF0dXNMaW5lTWFuYWdlci5zZXRNZXNzYWdlKCIiKTsgLy8kTk9OLU5MUy0xJAorCQkJfQorCQl9CisJfQorCisJLyoqCisJICogVGhpcyBsb29rcyB1cCBhIHN0cmluZyBpbiB0aGUgcGx1Z2luJ3MgcGx1Z2luLnByb3BlcnRpZXMgZmlsZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcml2YXRlIHN0YXRpYyBTdHJpbmcgZ2V0U3RyaW5nKFN0cmluZyBrZXkpIHsKKwkJcmV0dXJuIERlZmluaXRpb25zRWRpdFBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoa2V5KTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGxvb2tzIHVwIGEgc3RyaW5nIGluIHBsdWdpbi5wcm9wZXJ0aWVzLCBtYWtpbmcgYSBzdWJzdGl0dXRpb24uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIGdldFN0cmluZyhTdHJpbmcga2V5LCBPYmplY3QgczEpIHsKKwkJcmV0dXJuIERlZmluaXRpb25zRWRpdFBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoa2V5LCBuZXcgT2JqZWN0IFtdIHsgczEgfSk7CisJfQorCisJLyoqCisJICogVGhpcyBpbXBsZW1lbnRzIHtAbGluayBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSU1lbnVMaXN0ZW5lcn0gdG8gaGVscCBmaWxsIHRoZSBjb250ZXh0IG1lbnVzIHdpdGggY29udHJpYnV0aW9ucyBmcm9tIHRoZSBFZGl0IG1lbnUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgbWVudUFib3V0VG9TaG93KElNZW51TWFuYWdlciBtZW51TWFuYWdlcikgeworCQkoKElNZW51TGlzdGVuZXIpZ2V0RWRpdG9yU2l0ZSgpLmdldEFjdGlvbkJhckNvbnRyaWJ1dG9yKCkpLm1lbnVBYm91dFRvU2hvdyhtZW51TWFuYWdlcik7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVkaXRpbmdEb21haW5BY3Rpb25CYXJDb250cmlidXRvciBnZXRBY3Rpb25CYXJDb250cmlidXRvcigpIHsKKwkJcmV0dXJuIChFZGl0aW5nRG9tYWluQWN0aW9uQmFyQ29udHJpYnV0b3IpZ2V0RWRpdG9yU2l0ZSgpLmdldEFjdGlvbkJhckNvbnRyaWJ1dG9yKCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIElBY3Rpb25CYXJzIGdldEFjdGlvbkJhcnMoKSB7CisJCXJldHVybiBnZXRBY3Rpb25CYXJDb250cmlidXRvcigpLmdldEFjdGlvbkJhcnMoKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQWRhcHRlckZhY3RvcnkgZ2V0QWRhcHRlckZhY3RvcnkoKSB7CisJCXJldHVybiBhZGFwdGVyRmFjdG9yeTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBkaXNwb3NlKCkgeworCQl1cGRhdGVQcm9ibGVtSW5kaWNhdGlvbiA9IGZhbHNlOworCisJCVJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5yZW1vdmVSZXNvdXJjZUNoYW5nZUxpc3RlbmVyKHJlc291cmNlQ2hhbmdlTGlzdGVuZXIpOworCisJCWdldFNpdGUoKS5nZXRQYWdlKCkucmVtb3ZlUGFydExpc3RlbmVyKHBhcnRMaXN0ZW5lcik7CisKKwkJYWRhcHRlckZhY3RvcnkuZGlzcG9zZSgpOworCisJCWlmIChnZXRBY3Rpb25CYXJDb250cmlidXRvcigpLmdldEFjdGl2ZUVkaXRvcigpID09IHRoaXMpIHsKKwkJCWdldEFjdGlvbkJhckNvbnRyaWJ1dG9yKCkuc2V0QWN0aXZlRWRpdG9yKG51bGwpOworCQl9CisKKwkJaWYgKHByb3BlcnR5U2hlZXRQYWdlICE9IG51bGwpIHsKKwkJCXByb3BlcnR5U2hlZXRQYWdlLmRpc3Bvc2UoKTsKKwkJfQorCisJCWlmIChjb250ZW50T3V0bGluZVBhZ2UgIT0gbnVsbCkgeworCQkJY29udGVudE91dGxpbmVQYWdlLmRpc3Bvc2UoKTsKKwkJfQorCisJCXN1cGVyLmRpc3Bvc2UoKTsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHdoZXRoZXIgdGhlIG91dGxpbmUgdmlldyBzaG91bGQgYmUgcHJlc2VudGVkIHRvIHRoZSB1c2VyLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBib29sZWFuIHNob3dPdXRsaW5lVmlldygpIHsKKwkJcmV0dXJuIGZhbHNlOworCX0KK30KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy9sYWJlbHMvcHJvdmlkZXIvQXJlYUxhYmVsSXRlbVByb3ZpZGVyLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvbGFiZWxzL3Byb3ZpZGVyL0FyZWFMYWJlbEl0ZW1Qcm92aWRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAxNzJhOGMKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvbGFiZWxzL3Byb3ZpZGVyL0FyZWFMYWJlbEl0ZW1Qcm92aWRlci5qYXZhCkBAIC0wLDAgKzEsMTg5IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLnByb3ZpZGVyOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOworaW1wb3J0IGphdmEudXRpbC5MaXN0OworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5SZXNvdXJjZUxvY2F0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlVSSTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5Db21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkNvbXBvc2VkQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUVkaXRpbmdEb21haW5JdGVtUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1MYWJlbFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtUHJvcGVydHlEZXNjcmlwdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtUHJvcGVydHlTb3VyY2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVN0cnVjdHVyZWRJdGVtQ29udGVudFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklUcmVlSXRlbUNvbnRlbnRQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGgucHJvdmlkZXIuU3RhdGljTm9kZUxhYmVsSXRlbVByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuZWRnZXMucHJvdmlkZXIuRGVmaW5pdGlvbnNFZGl0UGx1Z2luOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkuR2VvZ3JhcGhpY05hbWVzOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLkFyZWFMYWJlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5MYWJlbHNQYWNrYWdlOworCisvKioKKyAqIFRoaXMgaXMgdGhlIGl0ZW0gcHJvdmlkZXIgYWRhcHRlciBmb3IgYQorICoge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLkFyZWFMYWJlbH0gb2JqZWN0LiA8IS0tCisgKiBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiAKKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIEFyZWFMYWJlbEl0ZW1Qcm92aWRlciBleHRlbmRzIFN0YXRpY05vZGVMYWJlbEl0ZW1Qcm92aWRlcgorCQlpbXBsZW1lbnRzIElFZGl0aW5nRG9tYWluSXRlbVByb3ZpZGVyLCBJU3RydWN0dXJlZEl0ZW1Db250ZW50UHJvdmlkZXIsCisJCUlUcmVlSXRlbUNvbnRlbnRQcm92aWRlciwgSUl0ZW1MYWJlbFByb3ZpZGVyLCBJSXRlbVByb3BlcnR5U291cmNlIHsKKwkvKioKKwkgKiBUaGlzIGNvbnN0cnVjdHMgYW4gaW5zdGFuY2UgZnJvbSBhIGZhY3RvcnkgYW5kIGEgbm90aWZpZXIuIDwhLS0KKwkgKiBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAcGFyYW0gYWRhcHRlckZhY3RvcnkKKwkgKiAKKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEFyZWFMYWJlbEl0ZW1Qcm92aWRlcihBZGFwdGVyRmFjdG9yeSBhZGFwdGVyRmFjdG9yeSkgeworCQlzdXBlcihhZGFwdGVyRmFjdG9yeSk7CisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIHRoZSBwcm9wZXJ0eSBkZXNjcmlwdG9ycyBmb3IgdGhlIGFkYXB0ZWQgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAcGFyYW0gb2JqZWN0CisJICogQHJldHVybgorCSAqIAorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgTGlzdDxJSXRlbVByb3BlcnR5RGVzY3JpcHRvcj4gZ2V0UHJvcGVydHlEZXNjcmlwdG9ycyhPYmplY3Qgb2JqZWN0KSB7CisJCWlmIChpdGVtUHJvcGVydHlEZXNjcmlwdG9ycyA9PSBudWxsKSB7CisJCQlzdXBlci5nZXRQcm9wZXJ0eURlc2NyaXB0b3JzKG9iamVjdCk7CisKKwkJCWFkZEN1cnJlbnRBcmVhVmFsdWVQcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0KTsKKwkJfQorCQlyZXR1cm4gaXRlbVByb3BlcnR5RGVzY3JpcHRvcnM7CisJfQorCisJLyoqCisJICogVGhpcyBhZGRzIGEgcHJvcGVydHkgZGVzY3JpcHRvciBmb3IgdGhlIEN1cnJlbnQgQXJlYSBWYWx1ZSBmZWF0dXJlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIGFkZEN1cnJlbnRBcmVhVmFsdWVQcm9wZXJ0eURlc2NyaXB0b3IoT2JqZWN0IG9iamVjdCkgeworCQlpdGVtUHJvcGVydHlEZXNjcmlwdG9ycy5hZGQKKwkJCShjcmVhdGVJdGVtUHJvcGVydHlEZXNjcmlwdG9yCisJCQkJKCgoQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSlhZGFwdGVyRmFjdG9yeSkuZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCksCisJCQkJIGdldFJlc291cmNlTG9jYXRvcigpLAorCQkJCSBnZXRTdHJpbmcoIl9VSV9BcmVhTGFiZWxfY3VycmVudEFyZWFWYWx1ZV9mZWF0dXJlIiksIC8vJE5PTi1OTFMtMSQKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfUHJvcGVydHlEZXNjcmlwdG9yX2Rlc2NyaXB0aW9uIiwgIl9VSV9BcmVhTGFiZWxfY3VycmVudEFyZWFWYWx1ZV9mZWF0dXJlIiwgIl9VSV9BcmVhTGFiZWxfdHlwZSIpLCAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQgLy8kTk9OLU5MUy0zJAorCQkJCSBMYWJlbHNQYWNrYWdlLkxpdGVyYWxzLkFSRUFfTEFCRUxfX0NVUlJFTlRfQVJFQV9WQUxVRSwKKwkJCQkgZmFsc2UsCisJCQkJIGZhbHNlLAorCQkJCSBmYWxzZSwKKwkJCQkgbnVsbCwKKwkJCQkgbnVsbCwKKwkJCQkgbnVsbCkpOworCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyB0aGUgbGFiZWwgdGV4dCBmb3IgdGhlIGFkYXB0ZWQgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAcGFyYW0gb2JqZWN0CisJICogQHJldHVybgorCSAqIAorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIFN0cmluZyBnZXRUZXh0KE9iamVjdCBvYmplY3QpIHsKKwkJZmluYWwgQ29tcG9zZWRBZGFwdGVyRmFjdG9yeSBpdGVtUHJvdmlkZXJGYWN0b3J5ID0gbmV3IENvbXBvc2VkQWRhcHRlckZhY3RvcnkoCisJCQkJQ29tcG9zZWRBZGFwdGVyRmFjdG9yeS5EZXNjcmlwdG9yLlJlZ2lzdHJ5LklOU1RBTkNFKTsKKwkJZmluYWwgQXJlYUxhYmVsIGFyZWFMYWJlbCA9IChBcmVhTGFiZWwpIG9iamVjdDsKKwkJZmluYWwgSUl0ZW1MYWJlbFByb3ZpZGVyIGFsdmlwID0gKEFyZWFMYWJlbFZhbHVlSXRlbVByb3ZpZGVyKSBpdGVtUHJvdmlkZXJGYWN0b3J5CisJCQkJLmFkYXB0KGFyZWFMYWJlbC5nZXRDdXJyZW50QXJlYVZhbHVlKCksCisJCQkJCQlJSXRlbUxhYmVsUHJvdmlkZXIuY2xhc3MpOworCisJCWZpbmFsIFN0cmluZyBnZW9OYW1lID0gR2VvZ3JhcGhpY05hbWVzLmdldE5hbWUoYXJlYUxhYmVsLmdldFVSSSgpKTsKKwkJZmluYWwgU3RyaW5nQnVpbGRlciBzYiA9IG5ldyBTdHJpbmdCdWlsZGVyKAorCQkJCWdlb05hbWUuc3RhcnRzV2l0aCgiISIpID8gZ2V0VGV4dEdlbihvYmplY3QpIDogZ2VvTmFtZSk7CisJCXNiLmFwcGVuZCgiICgiKTsKKwkJc2IuYXBwZW5kKGFsdmlwLmdldFRleHQoYXJlYUxhYmVsLmdldEN1cnJlbnRBcmVhVmFsdWUoKSkpOworCQlzYi5hcHBlbmQoIikiKTsKKwkJcmV0dXJuIHNiLnRvU3RyaW5nKCk7CisJfSAvLyBnZXRUZXh0CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgdGhlIGxhYmVsIHRleHQgZm9yIHRoZSBhZGFwdGVkIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogCisJICogQHBhcmFtIG9iamVjdAorCSAqIEByZXR1cm4KKwkgKiAKKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIFN0cmluZyBnZXRUZXh0R2VuKE9iamVjdCBvYmplY3QpIHsKKwkJVVJJIGxhYmVsVmFsdWUgPSAoKEFyZWFMYWJlbClvYmplY3QpLmdldFVSSSgpOworCQlTdHJpbmcgbGFiZWwgPSBsYWJlbFZhbHVlID09IG51bGwgPyBudWxsIDogbGFiZWxWYWx1ZS50b1N0cmluZygpOworCQlyZXR1cm4gbGFiZWwgPT0gbnVsbCB8fCBsYWJlbC5sZW5ndGgoKSA9PSAwID8KKwkJCWdldFN0cmluZygiX1VJX0FyZWFMYWJlbF90eXBlIikgOiAvLyROT04tTkxTLTEkCisJCQlnZXRTdHJpbmcoIl9VSV9BcmVhTGFiZWxfdHlwZSIpICsgIiAiICsgbGFiZWw7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAorCX0KKwkKKwkvKioKKwkgKiBUaGlzIGhhbmRsZXMgbW9kZWwgbm90aWZpY2F0aW9ucyBieSBjYWxsaW5nIHtAbGluayAjdXBkYXRlQ2hpbGRyZW59IHRvIHVwZGF0ZSBhbnkgY2FjaGVkCisJICogY2hpbGRyZW4gYW5kIGJ5IGNyZWF0aW5nIGEgdmlld2VyIG5vdGlmaWNhdGlvbiwgd2hpY2ggaXQgcGFzc2VzIHRvIHtAbGluayAjZmlyZU5vdGlmeUNoYW5nZWR9LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogCisJICogQHBhcmFtIG5vdGlmaWNhdGlvbgorCSAqIAorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBub3RpZnlDaGFuZ2VkKE5vdGlmaWNhdGlvbiBub3RpZmljYXRpb24pIHsKKwkJdXBkYXRlQ2hpbGRyZW4obm90aWZpY2F0aW9uKTsKKwkJc3VwZXIubm90aWZ5Q2hhbmdlZChub3RpZmljYXRpb24pOworCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmVkaXQuY29tbWFuZC5Db21tYW5kUGFyYW1ldGVyfXMgZGVzY3JpYmluZyB0aGUgY2hpbGRyZW4KKwkgKiB0aGF0IGNhbiBiZSBjcmVhdGVkIHVuZGVyIHRoaXMgb2JqZWN0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MKKwkgKiAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIGNvbGxlY3ROZXdDaGlsZERlc2NyaXB0b3JzKENvbGxlY3Rpb248T2JqZWN0PiBuZXdDaGlsZERlc2NyaXB0b3JzLCBPYmplY3Qgb2JqZWN0KSB7CisJCXN1cGVyLmNvbGxlY3ROZXdDaGlsZERlc2NyaXB0b3JzKG5ld0NoaWxkRGVzY3JpcHRvcnMsIG9iamVjdCk7CisJfQorCisJLyoqCisJICogUmV0dXJuIHRoZSByZXNvdXJjZSBsb2NhdG9yIGZvciB0aGlzIGl0ZW0gcHJvdmlkZXIncyByZXNvdXJjZXMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAcmV0dXJuCisJICogCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBSZXNvdXJjZUxvY2F0b3IgZ2V0UmVzb3VyY2VMb2NhdG9yKCkgeworCQlyZXR1cm4gRGVmaW5pdGlvbnNFZGl0UGx1Z2luLklOU1RBTkNFOworCX0KKworfQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL2xhYmVscy9wcm92aWRlci9BcmVhTGFiZWxWYWx1ZUl0ZW1Qcm92aWRlci5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL2xhYmVscy9wcm92aWRlci9BcmVhTGFiZWxWYWx1ZUl0ZW1Qcm92aWRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI2YTFlNDQKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvbGFiZWxzL3Byb3ZpZGVyL0FyZWFMYWJlbFZhbHVlSXRlbVByb3ZpZGVyLmphdmEKQEAgLTAsMCArMSwyMjMgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMucHJvdmlkZXI7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgamF2YS50ZXh0Lk51bWJlckZvcm1hdDsKK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LkFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuUmVzb3VyY2VMb2NhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkNvbXBvc2VhYmxlQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUVkaXRpbmdEb21haW5JdGVtUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1MYWJlbFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtUHJvcGVydHlEZXNjcmlwdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtUHJvcGVydHlTb3VyY2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVN0cnVjdHVyZWRJdGVtQ29udGVudFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklUcmVlSXRlbUNvbnRlbnRQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JdGVtUHJvcGVydHlEZXNjcmlwdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLlZpZXdlck5vdGlmaWNhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGgucHJvdmlkZXIuTGFiZWxWYWx1ZUl0ZW1Qcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmVkZ2VzLnByb3ZpZGVyLkRlZmluaXRpb25zRWRpdFBsdWdpbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5BcmVhTGFiZWxWYWx1ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5MYWJlbHNQYWNrYWdlOworCisvKioKKyAqIFRoaXMgaXMgdGhlIGl0ZW0gcHJvdmlkZXIgYWRhcHRlciBmb3IgYQorICoge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLkFyZWFMYWJlbFZhbHVlfSBvYmplY3QuIDwhLS0KKyAqIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIAorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgQXJlYUxhYmVsVmFsdWVJdGVtUHJvdmlkZXIgZXh0ZW5kcyBMYWJlbFZhbHVlSXRlbVByb3ZpZGVyCisJCWltcGxlbWVudHMgSUVkaXRpbmdEb21haW5JdGVtUHJvdmlkZXIsIElTdHJ1Y3R1cmVkSXRlbUNvbnRlbnRQcm92aWRlciwKKwkJSVRyZWVJdGVtQ29udGVudFByb3ZpZGVyLCBJSXRlbUxhYmVsUHJvdmlkZXIsIElJdGVtUHJvcGVydHlTb3VyY2UgeworCisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IE5VTUJFUl9PRl9GQUNUSU9OQUxfRElHSVRTID0gMjsKKwlwcml2YXRlIHN0YXRpYyBOdW1iZXJGb3JtYXQgZm9ybWF0dGVyOworCisJLyoqCisJICogVGhpcyBjb25zdHJ1Y3RzIGFuIGluc3RhbmNlIGZyb20gYSBmYWN0b3J5IGFuZCBhIG5vdGlmaWVyLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogCisJICogQHBhcmFtIGFkYXB0ZXJGYWN0b3J5CisJICogCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBBcmVhTGFiZWxWYWx1ZUl0ZW1Qcm92aWRlcihBZGFwdGVyRmFjdG9yeSBhZGFwdGVyRmFjdG9yeSkgeworCQlzdXBlcihhZGFwdGVyRmFjdG9yeSk7CisJfQorCQorCS8qCisJICogQHJldHVybiBhIG51bWJlciBmb3JtYXR0ZXIKKwkgKi8KKwlzdGF0aWMgTnVtYmVyRm9ybWF0IGdldEZvcm1hdHRlcigpIHsKKwkJLy8gSXMgdGhlcmUgYWxyZWFkeSBhIGZvcm1hdHRlcj8KKwkJaWYgKGZvcm1hdHRlciA9PSBudWxsKSB7CisJCQkvLyBObworCQkJZm9ybWF0dGVyID0gTnVtYmVyRm9ybWF0LmdldE51bWJlckluc3RhbmNlKCk7CisJCQlmb3JtYXR0ZXIuc2V0TWF4aW11bUZyYWN0aW9uRGlnaXRzKE5VTUJFUl9PRl9GQUNUSU9OQUxfRElHSVRTKTsKKwkJCWZvcm1hdHRlci5zZXRNaW5pbXVtRnJhY3Rpb25EaWdpdHMoTlVNQkVSX09GX0ZBQ1RJT05BTF9ESUdJVFMpOworCQl9CisJCXJldHVybiBmb3JtYXR0ZXI7CisJfSAvLyBnZXRGb3JtYXR0ZXIKKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyB0aGUgcHJvcGVydHkgZGVzY3JpcHRvcnMgZm9yIHRoZSBhZGFwdGVkIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogCisJICogQHBhcmFtIG9iamVjdAorCSAqIEByZXR1cm4KKwkgKiAKKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIExpc3Q8SUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I+IGdldFByb3BlcnR5RGVzY3JpcHRvcnMoT2JqZWN0IG9iamVjdCkgeworCQlpZiAoaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMgPT0gbnVsbCkgeworCQkJc3VwZXIuZ2V0UHJvcGVydHlEZXNjcmlwdG9ycyhvYmplY3QpOworCisJCQlhZGRBcmVhUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCk7CisJCQlhZGRBdmVyYWdlRXh0ZW50UHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCk7CisJCX0KKwkJcmV0dXJuIGl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzOworCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyBhIHByb3BlcnR5IGRlc2NyaXB0b3IgZm9yIHRoZSBBcmVhIGZlYXR1cmUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYworCSAqIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgYWRkQXJlYVByb3BlcnR5RGVzY3JpcHRvcihPYmplY3Qgb2JqZWN0KSB7CisJCWl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzLmFkZAorCQkJKGNyZWF0ZUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IKKwkJCQkoKChDb21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5KWFkYXB0ZXJGYWN0b3J5KS5nZXRSb290QWRhcHRlckZhY3RvcnkoKSwKKwkJCQkgZ2V0UmVzb3VyY2VMb2NhdG9yKCksCisJCQkJIGdldFN0cmluZygiX1VJX0FyZWFMYWJlbFZhbHVlX2FyZWFfZmVhdHVyZSIpLCAvLyROT04tTkxTLTEkCisJCQkJIGdldFN0cmluZygiX1VJX1Byb3BlcnR5RGVzY3JpcHRvcl9kZXNjcmlwdGlvbiIsICJfVUlfQXJlYUxhYmVsVmFsdWVfYXJlYV9mZWF0dXJlIiwgIl9VSV9BcmVhTGFiZWxWYWx1ZV90eXBlIiksIC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJCAvLyROT04tTkxTLTMkCisJCQkJIExhYmVsc1BhY2thZ2UuTGl0ZXJhbHMuQVJFQV9MQUJFTF9WQUxVRV9fQVJFQSwKKwkJCQkgdHJ1ZSwKKwkJCQkgZmFsc2UsCisJCQkJIGZhbHNlLAorCQkJCSBJdGVtUHJvcGVydHlEZXNjcmlwdG9yLlJFQUxfVkFMVUVfSU1BR0UsCisJCQkJIG51bGwsCisJCQkJIG51bGwpKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFkZHMgYSBwcm9wZXJ0eSBkZXNjcmlwdG9yIGZvciB0aGUgQXZlcmFnZSBFeHRlbnQgZmVhdHVyZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBhZGRBdmVyYWdlRXh0ZW50UHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdCBvYmplY3QpIHsKKwkJaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMuYWRkCisJCQkoY3JlYXRlSXRlbVByb3BlcnR5RGVzY3JpcHRvcgorCQkJCSgoKENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnkpYWRhcHRlckZhY3RvcnkpLmdldFJvb3RBZGFwdGVyRmFjdG9yeSgpLAorCQkJCSBnZXRSZXNvdXJjZUxvY2F0b3IoKSwKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfQXJlYUxhYmVsVmFsdWVfYXZlcmFnZUV4dGVudF9mZWF0dXJlIiksIC8vJE5PTi1OTFMtMSQKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfUHJvcGVydHlEZXNjcmlwdG9yX2Rlc2NyaXB0aW9uIiwgIl9VSV9BcmVhTGFiZWxWYWx1ZV9hdmVyYWdlRXh0ZW50X2ZlYXR1cmUiLCAiX1VJX0FyZWFMYWJlbFZhbHVlX3R5cGUiKSwgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkIC8vJE5PTi1OTFMtMyQKKwkJCQkgTGFiZWxzUGFja2FnZS5MaXRlcmFscy5BUkVBX0xBQkVMX1ZBTFVFX19BVkVSQUdFX0VYVEVOVCwKKwkJCQkgdHJ1ZSwKKwkJCQkgZmFsc2UsCisJCQkJIGZhbHNlLAorCQkJCSBJdGVtUHJvcGVydHlEZXNjcmlwdG9yLlJFQUxfVkFMVUVfSU1BR0UsCisJCQkJIG51bGwsCisJCQkJIG51bGwpKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgdGhlIGxhYmVsIHRleHQgZm9yIHRoZSBhZGFwdGVkIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogCisJICogQHBhcmFtIG9iamVjdAorCSAqIEByZXR1cm4KKwkgKiAKKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBTdHJpbmcgZ2V0VGV4dChPYmplY3Qgb2JqZWN0KSB7CisJCWZpbmFsIFN0cmluZ0J1aWxkZXIgc2IgPSBuZXcgU3RyaW5nQnVpbGRlcihnZXRGb3JtYXR0ZXIoKS5mb3JtYXQoKChBcmVhTGFiZWxWYWx1ZSlvYmplY3QpLmdldEFyZWEoKSkpOworCQlzYi5hcHBlbmQoIiBrbV4yIik7CisJCXJldHVybiBzYi50b1N0cmluZygpOworCX0gLy8gZ2V0VGV4dAorCisJLyoqCisJICogVGhpcyByZXR1cm5zIHRoZSBsYWJlbCB0ZXh0IGZvciB0aGUgYWRhcHRlZCBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBwYXJhbSBvYmplY3QKKwkgKiBAcmV0dXJuCisJICogCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworLy8JQE92ZXJyaWRlCisJcHVibGljIFN0cmluZyBnZXRUZXh0R2VuKE9iamVjdCBvYmplY3QpIHsKKwkJQXJlYUxhYmVsVmFsdWUgYXJlYUxhYmVsVmFsdWUgPSAoQXJlYUxhYmVsVmFsdWUpb2JqZWN0OworCQlyZXR1cm4gZ2V0U3RyaW5nKCJfVUlfQXJlYUxhYmVsVmFsdWVfdHlwZSIpICsgIiAiICsgYXJlYUxhYmVsVmFsdWUuZ2V0QXJlYSgpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKKwl9CisJCisJLyoqCisJICogVGhpcyBoYW5kbGVzIG1vZGVsIG5vdGlmaWNhdGlvbnMgYnkgY2FsbGluZyB7QGxpbmsgI3VwZGF0ZUNoaWxkcmVufSB0byB1cGRhdGUgYW55IGNhY2hlZAorCSAqIGNoaWxkcmVuIGFuZCBieSBjcmVhdGluZyBhIHZpZXdlciBub3RpZmljYXRpb24sIHdoaWNoIGl0IHBhc3NlcyB0byB7QGxpbmsgI2ZpcmVOb3RpZnlDaGFuZ2VkfS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBwYXJhbSBub3RpZmljYXRpb24KKwkgKiAKKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgbm90aWZ5Q2hhbmdlZChOb3RpZmljYXRpb24gbm90aWZpY2F0aW9uKSB7CisJCXVwZGF0ZUNoaWxkcmVuKG5vdGlmaWNhdGlvbik7CisKKwkJc3dpdGNoIChub3RpZmljYXRpb24uZ2V0RmVhdHVyZUlEKEFyZWFMYWJlbFZhbHVlLmNsYXNzKSkgeworCQkJY2FzZSBMYWJlbHNQYWNrYWdlLkFSRUFfTEFCRUxfVkFMVUVfX0FSRUE6CisJCQljYXNlIExhYmVsc1BhY2thZ2UuQVJFQV9MQUJFTF9WQUxVRV9fQVZFUkFHRV9FWFRFTlQ6CisJCQkJZmlyZU5vdGlmeUNoYW5nZWQobmV3IFZpZXdlck5vdGlmaWNhdGlvbihub3RpZmljYXRpb24sIG5vdGlmaWNhdGlvbi5nZXROb3RpZmllcigpLCBmYWxzZSwgdHJ1ZSkpOworCQkJCXJldHVybjsKKwkJfQorCQlzdXBlci5ub3RpZnlDaGFuZ2VkKG5vdGlmaWNhdGlvbik7CisJfQorCisJLyoqCisJICogVGhpcyBhZGRzIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuZWRpdC5jb21tYW5kLkNvbW1hbmRQYXJhbWV0ZXJ9cyBkZXNjcmliaW5nIHRoZSBjaGlsZHJlbgorCSAqIHRoYXQgY2FuIGJlIGNyZWF0ZWQgdW5kZXIgdGhpcyBvYmplY3QuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYworCSAqIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgY29sbGVjdE5ld0NoaWxkRGVzY3JpcHRvcnMoQ29sbGVjdGlvbjxPYmplY3Q+IG5ld0NoaWxkRGVzY3JpcHRvcnMsIE9iamVjdCBvYmplY3QpIHsKKwkJc3VwZXIuY29sbGVjdE5ld0NoaWxkRGVzY3JpcHRvcnMobmV3Q2hpbGREZXNjcmlwdG9ycywgb2JqZWN0KTsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm4gdGhlIHJlc291cmNlIGxvY2F0b3IgZm9yIHRoaXMgaXRlbSBwcm92aWRlcidzIHJlc291cmNlcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEByZXR1cm4KKwkgKiAKKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIFJlc291cmNlTG9jYXRvciBnZXRSZXNvdXJjZUxvY2F0b3IoKSB7CisJCXJldHVybiBEZWZpbml0aW9uc0VkaXRQbHVnaW4uSU5TVEFOQ0U7CisJfQorCit9CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvbGFiZWxzL3Byb3ZpZGVyL0NvbW1vbkJvcmRlclJlbGF0aW9uc2hpcExhYmVsSXRlbVByb3ZpZGVyLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvbGFiZWxzL3Byb3ZpZGVyL0NvbW1vbkJvcmRlclJlbGF0aW9uc2hpcExhYmVsSXRlbVByb3ZpZGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjM1ZjBmMQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy9sYWJlbHMvcHJvdmlkZXIvQ29tbW9uQm9yZGVyUmVsYXRpb25zaGlwTGFiZWxJdGVtUHJvdmlkZXIuamF2YQpAQCAtMCwwICsxLDEzNyBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5wcm92aWRlcjsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LkFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuVVJJOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklFZGl0aW5nRG9tYWluSXRlbVByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtTGFiZWxQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbVByb3BlcnR5RGVzY3JpcHRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbVByb3BlcnR5U291cmNlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklTdHJ1Y3R1cmVkSXRlbUNvbnRlbnRQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JVHJlZUl0ZW1Db250ZW50UHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkVkZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkVkZ2VMYWJlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5Lkdlb2dyYXBoaWNOYW1lczsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5Db21tb25Cb3JkZXJSZWxhdGlvbnNoaXBMYWJlbDsKKworLyoqCisgKiBUaGlzIGlzIHRoZSBpdGVtIHByb3ZpZGVyIGFkYXB0ZXIgZm9yIGEge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLkNvbW1vbkJvcmRlclJlbGF0aW9uc2hpcExhYmVsfSBvYmplY3QuCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIENvbW1vbkJvcmRlclJlbGF0aW9uc2hpcExhYmVsSXRlbVByb3ZpZGVyIGV4dGVuZHMKKwkJUGh5c2ljYWxSZWxhdGlvbnNoaXBMYWJlbEl0ZW1Qcm92aWRlciBpbXBsZW1lbnRzCisJCUlFZGl0aW5nRG9tYWluSXRlbVByb3ZpZGVyLCBJU3RydWN0dXJlZEl0ZW1Db250ZW50UHJvdmlkZXIsCisJCUlUcmVlSXRlbUNvbnRlbnRQcm92aWRlciwgSUl0ZW1MYWJlbFByb3ZpZGVyLCBJSXRlbVByb3BlcnR5U291cmNlIHsKKwkvKioKKwkgKiBUaGlzIGNvbnN0cnVjdHMgYW4gaW5zdGFuY2UgZnJvbSBhIGZhY3RvcnkgYW5kIGEgbm90aWZpZXIuIDwhLS0KKwkgKiBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBDb21tb25Cb3JkZXJSZWxhdGlvbnNoaXBMYWJlbEl0ZW1Qcm92aWRlcigKKwkJCUFkYXB0ZXJGYWN0b3J5IGFkYXB0ZXJGYWN0b3J5KSB7CisJCXN1cGVyKGFkYXB0ZXJGYWN0b3J5KTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgdGhlIHByb3BlcnR5IGRlc2NyaXB0b3JzIGZvciB0aGUgYWRhcHRlZCBjbGFzcy4gPCEtLQorCSAqIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIExpc3Q8SUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I+IGdldFByb3BlcnR5RGVzY3JpcHRvcnMoT2JqZWN0IG9iamVjdCkgeworCQlpZiAoaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMgPT0gbnVsbCkgeworCQkJc3VwZXIuZ2V0UHJvcGVydHlEZXNjcmlwdG9ycyhvYmplY3QpOworCisJCX0KKwkJcmV0dXJuIGl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzOworCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyB0aGUgbGFiZWwgdGV4dCBmb3IgdGhlIGFkYXB0ZWQgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYworCSAqIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBTdHJpbmcgZ2V0VGV4dChPYmplY3Qgb2JqZWN0KSB7CisJCWZpbmFsIFVSSSBsYWJlbFVSSSA9ICgoQ29tbW9uQm9yZGVyUmVsYXRpb25zaGlwTGFiZWwpb2JqZWN0KS5nZXRVUkkoKTsKKwkJZmluYWwgU3RyaW5nIGxhc3RTZWdtZW50ID0gbGFiZWxVUkkubGFzdFNlZ21lbnQoKS50b1N0cmluZygpOworCQlmaW5hbCBpbnQgaSA9IGxhc3RTZWdtZW50LmluZGV4T2YoIl8iKTsKKwkJZmluYWwgU3RyaW5nIGZpcnN0SVNPS2V5ID0gbGFzdFNlZ21lbnQuc3Vic3RyaW5nKDAsIGkpOworCQlmaW5hbCBTdHJpbmcgc2Vjb25kSVNPS2V5ID0gbGFzdFNlZ21lbnQuc3Vic3RyaW5nKGkrMSk7CisJCQorCQlmaW5hbCBTdHJpbmcgZmlyc3RHZW9OYW1lID0gR2VvZ3JhcGhpY05hbWVzLmdldE5hbWUoZmlyc3RJU09LZXkpOworCQlmaW5hbCBTdHJpbmcgc2Vjb25kR2VvTmFtZSA9IEdlb2dyYXBoaWNOYW1lcy5nZXROYW1lKHNlY29uZElTT0tleSk7CisJCQorCQlmaW5hbCBTdHJpbmdCdWlsZGVyIHNiID0gbmV3IFN0cmluZ0J1aWxkZXIoCisJCQkJZmlyc3RHZW9OYW1lLnN0YXJ0c1dpdGgoIiEiKSA/IGZpcnN0SVNPS2V5IDogZmlyc3RHZW9OYW1lKTsKKwkJZmluYWwgRWRnZSBlZGdlID0gKChFZGdlTGFiZWwpIG9iamVjdCkuZ2V0RWRnZSgpOworCQlzYi5hcHBlbmQoZWRnZS5pc0RpcmVjdGVkKCkgPyAiIC0+ICIgOiAiIDwtPiAiKTsKKwkJCisJCS8vIEZpbmQgQnVncyBpZGVudGlmaWVkIGFuIGVycm9yLiAgc2Vjb25kR2VvTmFtZSB3YXMgdXNlZCAKKwkJLy8gZm9yIGJvdGggY29uZGl0aW9ucyBvZmYgdGhlIHRlcm5hcnkKKwkJc2IuYXBwZW5kKHNlY29uZEdlb05hbWUuc3RhcnRzV2l0aCgiISIpID8gc2Vjb25kSVNPS2V5CisJCQkJCQk6IHNlY29uZEdlb05hbWUpOworCisJCXJldHVybiBzYi50b1N0cmluZygpOworCX0gLy8gZ2V0VGV4dAorCisJLyoqCisJICogVGhpcyByZXR1cm5zIHRoZSBsYWJlbCB0ZXh0IGZvciB0aGUgYWRhcHRlZCBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jCisJICogLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwkvL0BPdmVycmlkZQorCUBPdmVycmlkZQorCXB1YmxpYyBTdHJpbmcgZ2V0VGV4dEdlbihPYmplY3Qgb2JqZWN0KSB7CisJCVVSSSBsYWJlbFZhbHVlID0gKChDb21tb25Cb3JkZXJSZWxhdGlvbnNoaXBMYWJlbClvYmplY3QpLmdldFVSSSgpOworCQlTdHJpbmcgbGFiZWwgPSBsYWJlbFZhbHVlID09IG51bGwgPyBudWxsIDogbGFiZWxWYWx1ZS50b1N0cmluZygpOworCQlyZXR1cm4gbGFiZWwgPT0gbnVsbCB8fCBsYWJlbC5sZW5ndGgoKSA9PSAwID8KKwkJCWdldFN0cmluZygiX1VJX0NvbW1vbkJvcmRlclJlbGF0aW9uc2hpcExhYmVsX3R5cGUiKSA6IC8vJE5PTi1OTFMtMSQKKwkJCWdldFN0cmluZygiX1VJX0NvbW1vbkJvcmRlclJlbGF0aW9uc2hpcExhYmVsX3R5cGUiKSArICIgIiArIGxhYmVsOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKKwl9CisJCisJLyoqCisJICogVGhpcyBoYW5kbGVzIG1vZGVsIG5vdGlmaWNhdGlvbnMgYnkgY2FsbGluZyB7QGxpbmsgI3VwZGF0ZUNoaWxkcmVufSB0byB1cGRhdGUgYW55IGNhY2hlZAorCSAqIGNoaWxkcmVuIGFuZCBieSBjcmVhdGluZyBhIHZpZXdlciBub3RpZmljYXRpb24sIHdoaWNoIGl0IHBhc3NlcyB0byB7QGxpbmsgI2ZpcmVOb3RpZnlDaGFuZ2VkfS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tCisJICogZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBub3RpZnlDaGFuZ2VkKE5vdGlmaWNhdGlvbiBub3RpZmljYXRpb24pIHsKKwkJdXBkYXRlQ2hpbGRyZW4obm90aWZpY2F0aW9uKTsKKwkJc3VwZXIubm90aWZ5Q2hhbmdlZChub3RpZmljYXRpb24pOworCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmVkaXQuY29tbWFuZC5Db21tYW5kUGFyYW1ldGVyfXMgZGVzY3JpYmluZyB0aGUgY2hpbGRyZW4KKwkgKiB0aGF0IGNhbiBiZSBjcmVhdGVkIHVuZGVyIHRoaXMgb2JqZWN0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MKKwkgKiAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIGNvbGxlY3ROZXdDaGlsZERlc2NyaXB0b3JzKENvbGxlY3Rpb248T2JqZWN0PiBuZXdDaGlsZERlc2NyaXB0b3JzLCBPYmplY3Qgb2JqZWN0KSB7CisJCXN1cGVyLmNvbGxlY3ROZXdDaGlsZERlc2NyaXB0b3JzKG5ld0NoaWxkRGVzY3JpcHRvcnMsIG9iamVjdCk7CisJfQorCit9CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvbGFiZWxzL3Byb3ZpZGVyL0NvbW1vbkJvcmRlclJlbGF0aW9uc2hpcExhYmVsVmFsdWVJdGVtUHJvdmlkZXIuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy9sYWJlbHMvcHJvdmlkZXIvQ29tbW9uQm9yZGVyUmVsYXRpb25zaGlwTGFiZWxWYWx1ZUl0ZW1Qcm92aWRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEzZDI4NWMKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvbGFiZWxzL3Byb3ZpZGVyL0NvbW1vbkJvcmRlclJlbGF0aW9uc2hpcExhYmVsVmFsdWVJdGVtUHJvdmlkZXIuamF2YQpAQCAtMCwwICsxLDE0NCBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5wcm92aWRlcjsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LkFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5Db21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklFZGl0aW5nRG9tYWluSXRlbVByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtTGFiZWxQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbVByb3BlcnR5RGVzY3JpcHRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbVByb3BlcnR5U291cmNlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklTdHJ1Y3R1cmVkSXRlbUNvbnRlbnRQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JVHJlZUl0ZW1Db250ZW50UHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSXRlbVByb3BlcnR5RGVzY3JpcHRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5WaWV3ZXJOb3RpZmljYXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuQ29tbW9uQm9yZGVyUmVsYXRpb25zaGlwTGFiZWxWYWx1ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5MYWJlbHNQYWNrYWdlOworCisvKioKKyAqIFRoaXMgaXMgdGhlIGl0ZW0gcHJvdmlkZXIgYWRhcHRlciBmb3IgYSB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuQ29tbW9uQm9yZGVyUmVsYXRpb25zaGlwTGFiZWxWYWx1ZX0gb2JqZWN0LgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBDb21tb25Cb3JkZXJSZWxhdGlvbnNoaXBMYWJlbFZhbHVlSXRlbVByb3ZpZGVyIGV4dGVuZHMKKwkJUGh5c2ljYWxSZWxhdGlvbnNoaXBMYWJlbFZhbHVlSXRlbVByb3ZpZGVyIGltcGxlbWVudHMKKwkJSUVkaXRpbmdEb21haW5JdGVtUHJvdmlkZXIsIElTdHJ1Y3R1cmVkSXRlbUNvbnRlbnRQcm92aWRlciwKKwkJSVRyZWVJdGVtQ29udGVudFByb3ZpZGVyLCBJSXRlbUxhYmVsUHJvdmlkZXIsIElJdGVtUHJvcGVydHlTb3VyY2UgeworCS8qKgorCSAqIFRoaXMgY29uc3RydWN0cyBhbiBpbnN0YW5jZSBmcm9tIGEgZmFjdG9yeSBhbmQgYSBub3RpZmllci4gPCEtLQorCSAqIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIENvbW1vbkJvcmRlclJlbGF0aW9uc2hpcExhYmVsVmFsdWVJdGVtUHJvdmlkZXIoCisJCQlBZGFwdGVyRmFjdG9yeSBhZGFwdGVyRmFjdG9yeSkgeworCQlzdXBlcihhZGFwdGVyRmFjdG9yeSk7CisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIHRoZSBwcm9wZXJ0eSBkZXNjcmlwdG9ycyBmb3IgdGhlIGFkYXB0ZWQgY2xhc3MuIDwhLS0KKwkgKiBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogCisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBMaXN0PElJdGVtUHJvcGVydHlEZXNjcmlwdG9yPiBnZXRQcm9wZXJ0eURlc2NyaXB0b3JzKE9iamVjdCBvYmplY3QpIHsKKwkJaWYgKGl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzID09IG51bGwpIHsKKwkJCXN1cGVyLmdldFByb3BlcnR5RGVzY3JpcHRvcnMob2JqZWN0KTsKKworCQkJYWRkQm9yZGVyTGVuZ3RoUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCk7CisJCX0KKwkJcmV0dXJuIGl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzOworCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyBhIHByb3BlcnR5IGRlc2NyaXB0b3IgZm9yIHRoZSBCb3JkZXIgTGVuZ3RoIGZlYXR1cmUuIDwhLS0KKwkgKiBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogCisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIGFkZEJvcmRlckxlbmd0aFByb3BlcnR5RGVzY3JpcHRvcihPYmplY3Qgb2JqZWN0KSB7CisJCWl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzLmFkZAorCQkJKGNyZWF0ZUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IKKwkJCQkoKChDb21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5KWFkYXB0ZXJGYWN0b3J5KS5nZXRSb290QWRhcHRlckZhY3RvcnkoKSwKKwkJCQkgZ2V0UmVzb3VyY2VMb2NhdG9yKCksCisJCQkJIGdldFN0cmluZygiX1VJX0NvbW1vbkJvcmRlclJlbGF0aW9uc2hpcExhYmVsVmFsdWVfYm9yZGVyTGVuZ3RoX2ZlYXR1cmUiKSwgLy8kTk9OLU5MUy0xJAorCQkJCSBnZXRTdHJpbmcoIl9VSV9Qcm9wZXJ0eURlc2NyaXB0b3JfZGVzY3JpcHRpb24iLCAiX1VJX0NvbW1vbkJvcmRlclJlbGF0aW9uc2hpcExhYmVsVmFsdWVfYm9yZGVyTGVuZ3RoX2ZlYXR1cmUiLCAiX1VJX0NvbW1vbkJvcmRlclJlbGF0aW9uc2hpcExhYmVsVmFsdWVfdHlwZSIpLCAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQgLy8kTk9OLU5MUy0zJAorCQkJCSBMYWJlbHNQYWNrYWdlLkxpdGVyYWxzLkNPTU1PTl9CT1JERVJfUkVMQVRJT05TSElQX0xBQkVMX1ZBTFVFX19CT1JERVJfTEVOR1RILAorCQkJCSB0cnVlLAorCQkJCSBmYWxzZSwKKwkJCQkgZmFsc2UsCisJCQkJIEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IuUkVBTF9WQUxVRV9JTUFHRSwKKwkJCQkgbnVsbCwKKwkJCQkgbnVsbCkpOworCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyB0aGUgbGFiZWwgdGV4dCBmb3IgdGhlIGFkYXB0ZWQgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYworCSAqIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBTdHJpbmcgZ2V0VGV4dChPYmplY3Qgb2JqZWN0KSB7CisJCUNvbW1vbkJvcmRlclJlbGF0aW9uc2hpcExhYmVsVmFsdWUgY29tbW9uQm9yZGVyUmVsYXRpb25zaGlwTGFiZWxWYWx1ZSA9IChDb21tb25Cb3JkZXJSZWxhdGlvbnNoaXBMYWJlbFZhbHVlKW9iamVjdDsKKwkJcmV0dXJuIGNvbW1vbkJvcmRlclJlbGF0aW9uc2hpcExhYmVsVmFsdWUuZ2V0Qm9yZGVyTGVuZ3RoKCkgKyAiIGttIjsgLy8kTk9OLU5MUy0xJCAKKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgdGhlIGxhYmVsIHRleHQgZm9yIHRoZSBhZGFwdGVkIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MKKwkgKiAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCS8vQE92ZXJyaWRlCisJcHVibGljIFN0cmluZyBnZXRUZXh0R2VuKE9iamVjdCBvYmplY3QpIHsKKwkJQ29tbW9uQm9yZGVyUmVsYXRpb25zaGlwTGFiZWxWYWx1ZSBjb21tb25Cb3JkZXJSZWxhdGlvbnNoaXBMYWJlbFZhbHVlID0gKENvbW1vbkJvcmRlclJlbGF0aW9uc2hpcExhYmVsVmFsdWUpb2JqZWN0OworCQlyZXR1cm4gZ2V0U3RyaW5nKCJfVUlfQ29tbW9uQm9yZGVyUmVsYXRpb25zaGlwTGFiZWxWYWx1ZV90eXBlIikgKyAiICIgKyBjb21tb25Cb3JkZXJSZWxhdGlvbnNoaXBMYWJlbFZhbHVlLmdldEJvcmRlckxlbmd0aCgpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKKwl9CisJCisJLyoqCisJICogVGhpcyBoYW5kbGVzIG1vZGVsIG5vdGlmaWNhdGlvbnMgYnkgY2FsbGluZyB7QGxpbmsgI3VwZGF0ZUNoaWxkcmVufSB0byB1cGRhdGUgYW55IGNhY2hlZAorCSAqIGNoaWxkcmVuIGFuZCBieSBjcmVhdGluZyBhIHZpZXdlciBub3RpZmljYXRpb24sIHdoaWNoIGl0IHBhc3NlcyB0byB7QGxpbmsgI2ZpcmVOb3RpZnlDaGFuZ2VkfS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tCisJICogZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBub3RpZnlDaGFuZ2VkKE5vdGlmaWNhdGlvbiBub3RpZmljYXRpb24pIHsKKwkJdXBkYXRlQ2hpbGRyZW4obm90aWZpY2F0aW9uKTsKKworCQlzd2l0Y2ggKG5vdGlmaWNhdGlvbi5nZXRGZWF0dXJlSUQoQ29tbW9uQm9yZGVyUmVsYXRpb25zaGlwTGFiZWxWYWx1ZS5jbGFzcykpIHsKKwkJCWNhc2UgTGFiZWxzUGFja2FnZS5DT01NT05fQk9SREVSX1JFTEFUSU9OU0hJUF9MQUJFTF9WQUxVRV9fQk9SREVSX0xFTkdUSDoKKwkJCQlmaXJlTm90aWZ5Q2hhbmdlZChuZXcgVmlld2VyTm90aWZpY2F0aW9uKG5vdGlmaWNhdGlvbiwgbm90aWZpY2F0aW9uLmdldE5vdGlmaWVyKCksIGZhbHNlLCB0cnVlKSk7CisJCQkJcmV0dXJuOworCQl9CisJCXN1cGVyLm5vdGlmeUNoYW5nZWQobm90aWZpY2F0aW9uKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFkZHMge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lZGl0LmNvbW1hbmQuQ29tbWFuZFBhcmFtZXRlcn1zIGRlc2NyaWJpbmcgdGhlIGNoaWxkcmVuCisJICogdGhhdCBjYW4gYmUgY3JlYXRlZCB1bmRlciB0aGlzIG9iamVjdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jCisJICogLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgdm9pZCBjb2xsZWN0TmV3Q2hpbGREZXNjcmlwdG9ycyhDb2xsZWN0aW9uPE9iamVjdD4gbmV3Q2hpbGREZXNjcmlwdG9ycywgT2JqZWN0IG9iamVjdCkgeworCQlzdXBlci5jb2xsZWN0TmV3Q2hpbGREZXNjcmlwdG9ycyhuZXdDaGlsZERlc2NyaXB0b3JzLCBvYmplY3QpOworCX0KKworfQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL2xhYmVscy9wcm92aWRlci9EZWZpbml0aW9uc0VkaXRQbHVnaW4uamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy9sYWJlbHMvcHJvdmlkZXIvRGVmaW5pdGlvbnNFZGl0UGx1Z2luLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTE4OTgyMAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy9sYWJlbHMvcHJvdmlkZXIvRGVmaW5pdGlvbnNFZGl0UGx1Z2luLmphdmEKQEAgLTAsMCArMSwxMDcgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMucHJvdmlkZXI7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5FTUZQbHVnaW47CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51aS5FY2xpcHNlVUlQbHVnaW47CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlJlc291cmNlTG9jYXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLnByb3ZpZGVyLkNvcmVFZGl0UGx1Z2luOworCisvKioKKyAqIFRoaXMgaXMgdGhlIGNlbnRyYWwgc2luZ2xldG9uIGZvciB0aGUgRGVmaW5pdGlvbnMgZWRpdG9yIHBsdWdpbi4KKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGZpbmFsIGNsYXNzIERlZmluaXRpb25zRWRpdFBsdWdpbiBleHRlbmRzIEVNRlBsdWdpbiB7CisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgY29weXJpZ2h0ID0gIiI7CisKKwkvKioKKwkgKiBLZWVwIHRyYWNrIG9mIHRoZSBzaW5nbGV0b24uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBEZWZpbml0aW9uc0VkaXRQbHVnaW4gSU5TVEFOQ0UgPSBuZXcgRGVmaW5pdGlvbnNFZGl0UGx1Z2luKCk7CisKKwkvKioKKwkgKiBLZWVwIHRyYWNrIG9mIHRoZSBzaW5nbGV0b24uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJc3RhdGljIEltcGxlbWVudGF0aW9uIHBsdWdpbjsKKworCS8qKgorCSAqIENyZWF0ZSB0aGUgaW5zdGFuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIERlZmluaXRpb25zRWRpdFBsdWdpbigpIHsKKwkJc3VwZXIKKwkJCShuZXcgUmVzb3VyY2VMb2NhdG9yIFtdIHsKKwkJCQlDb3JlRWRpdFBsdWdpbi5JTlNUQU5DRSwKKwkJCX0pOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIHNpbmdsZXRvbiBpbnN0YW5jZSBvZiB0aGUgRWNsaXBzZSBwbHVnaW4uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBzaW5nbGV0b24gaW5zdGFuY2UuCisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBSZXNvdXJjZUxvY2F0b3IgZ2V0UGx1Z2luUmVzb3VyY2VMb2NhdG9yKCkgeworCQlyZXR1cm4gcGx1Z2luOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIHNpbmdsZXRvbiBpbnN0YW5jZSBvZiB0aGUgRWNsaXBzZSBwbHVnaW4uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBzaW5nbGV0b24gaW5zdGFuY2UuCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBzdGF0aWMgSW1wbGVtZW50YXRpb24gZ2V0UGx1Z2luKCkgeworCQlyZXR1cm4gcGx1Z2luOworCX0KKworCS8qKgorCSAqIFRoZSBhY3R1YWwgaW1wbGVtZW50YXRpb24gb2YgdGhlIEVjbGlwc2UgPGI+UGx1Z2luPC9iPi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGNsYXNzIEltcGxlbWVudGF0aW9uIGV4dGVuZHMgRWNsaXBzZVVJUGx1Z2luIHsKKwkJLyoqCisJCSAqIENyZWF0ZXMgYW4gaW5zdGFuY2UuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlwdWJsaWMgSW1wbGVtZW50YXRpb24oKSB7CisJCQlzdXBlcigpOworCQorCQkJLy8gUmVtZW1iZXIgdGhlIHN0YXRpYyBpbnN0YW5jZS4KKwkJCS8vCisJCQlwbHVnaW4gPSB0aGlzOworCQl9CisJfQorCit9CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvbGFiZWxzL3Byb3ZpZGVyL0VhcnRoU2NpZW5jZUxhYmVsSXRlbVByb3ZpZGVyLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvbGFiZWxzL3Byb3ZpZGVyL0VhcnRoU2NpZW5jZUxhYmVsSXRlbVByb3ZpZGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjZmN2M0MwotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy9sYWJlbHMvcHJvdmlkZXIvRWFydGhTY2llbmNlTGFiZWxJdGVtUHJvdmlkZXIuamF2YQpAQCAtMCwwICsxLDE1NyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOSwyMDEwIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMucHJvdmlkZXI7CisKKworaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOworaW1wb3J0IGphdmEudXRpbC5MaXN0OworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5SZXNvdXJjZUxvY2F0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlVSSTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5Db21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklFZGl0aW5nRG9tYWluSXRlbVByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtTGFiZWxQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbVByb3BlcnR5RGVzY3JpcHRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbVByb3BlcnR5U291cmNlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklTdHJ1Y3R1cmVkSXRlbUNvbnRlbnRQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JVHJlZUl0ZW1Db250ZW50UHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLnByb3ZpZGVyLlN0YXRpY05vZGVMYWJlbEl0ZW1Qcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmVkZ2VzLnByb3ZpZGVyLkRlZmluaXRpb25zRWRpdFBsdWdpbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5FYXJ0aFNjaWVuY2VMYWJlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5MYWJlbHNQYWNrYWdlOworCisvKioKKyAqIFRoaXMgaXMgdGhlIGl0ZW0gcHJvdmlkZXIgYWRhcHRlciBmb3IgYSB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuRWFydGhTY2llbmNlTGFiZWx9IG9iamVjdC4KKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIEVhcnRoU2NpZW5jZUxhYmVsSXRlbVByb3ZpZGVyCisJZXh0ZW5kcyBTdGF0aWNOb2RlTGFiZWxJdGVtUHJvdmlkZXIKKwlpbXBsZW1lbnRzCisJCUlFZGl0aW5nRG9tYWluSXRlbVByb3ZpZGVyLAorCQlJU3RydWN0dXJlZEl0ZW1Db250ZW50UHJvdmlkZXIsCisJCUlUcmVlSXRlbUNvbnRlbnRQcm92aWRlciwKKwkJSUl0ZW1MYWJlbFByb3ZpZGVyLAorCQlJSXRlbVByb3BlcnR5U291cmNlIHsKKwkvKioKKwkgKiBUaGlzIGNvbnN0cnVjdHMgYW4gaW5zdGFuY2UgZnJvbSBhIGZhY3RvcnkgYW5kIGEgbm90aWZpZXIuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVhcnRoU2NpZW5jZUxhYmVsSXRlbVByb3ZpZGVyKEFkYXB0ZXJGYWN0b3J5IGFkYXB0ZXJGYWN0b3J5KSB7CisJCXN1cGVyKGFkYXB0ZXJGYWN0b3J5KTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgdGhlIHByb3BlcnR5IGRlc2NyaXB0b3JzIGZvciB0aGUgYWRhcHRlZCBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgTGlzdDxJSXRlbVByb3BlcnR5RGVzY3JpcHRvcj4gZ2V0UHJvcGVydHlEZXNjcmlwdG9ycyhPYmplY3Qgb2JqZWN0KSB7CisJCWlmIChpdGVtUHJvcGVydHlEZXNjcmlwdG9ycyA9PSBudWxsKSB7CisJCQlzdXBlci5nZXRQcm9wZXJ0eURlc2NyaXB0b3JzKG9iamVjdCk7CisKKwkJCWFkZEN1cnJlbnRFYXJ0aFNjaWVuY2VWYWx1ZVByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QpOworCQl9CisJCXJldHVybiBpdGVtUHJvcGVydHlEZXNjcmlwdG9yczsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFkZHMgYSBwcm9wZXJ0eSBkZXNjcmlwdG9yIGZvciB0aGUgQ3VycmVudCBFYXJ0aCBTY2llbmNlIFZhbHVlIGZlYXR1cmUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgYWRkQ3VycmVudEVhcnRoU2NpZW5jZVZhbHVlUHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdCBvYmplY3QpIHsKKwkJaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMuYWRkCisJCQkoY3JlYXRlSXRlbVByb3BlcnR5RGVzY3JpcHRvcgorCQkJCSgoKENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnkpYWRhcHRlckZhY3RvcnkpLmdldFJvb3RBZGFwdGVyRmFjdG9yeSgpLAorCQkJCSBnZXRSZXNvdXJjZUxvY2F0b3IoKSwKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfRWFydGhTY2llbmNlTGFiZWxfY3VycmVudEVhcnRoU2NpZW5jZVZhbHVlX2ZlYXR1cmUiKSwgLy8kTk9OLU5MUy0xJAorCQkJCSBnZXRTdHJpbmcoIl9VSV9Qcm9wZXJ0eURlc2NyaXB0b3JfZGVzY3JpcHRpb24iLCAiX1VJX0VhcnRoU2NpZW5jZUxhYmVsX2N1cnJlbnRFYXJ0aFNjaWVuY2VWYWx1ZV9mZWF0dXJlIiwgIl9VSV9FYXJ0aFNjaWVuY2VMYWJlbF90eXBlIiksIC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJCAvLyROT04tTkxTLTMkCisJCQkJIExhYmVsc1BhY2thZ2UuTGl0ZXJhbHMuRUFSVEhfU0NJRU5DRV9MQUJFTF9fQ1VSUkVOVF9FQVJUSF9TQ0lFTkNFX1ZBTFVFLAorCQkJCSBmYWxzZSwKKwkJCQkgZmFsc2UsCisJCQkJIGZhbHNlLAorCQkJCSBudWxsLAorCQkJCSBudWxsLAorCQkJCSBudWxsKSk7CisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIEVhcnRoU2NpZW5jZUxhYmVsLmdpZi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgT2JqZWN0IGdldEltYWdlKE9iamVjdCBvYmplY3QpIHsKKwkJcmV0dXJuIG92ZXJsYXlJbWFnZShvYmplY3QsIGdldFJlc291cmNlTG9jYXRvcigpLmdldEltYWdlKCJmdWxsL29iajE2L0VhcnRoU2NpZW5jZUxhYmVsIikpOyAvLyROT04tTkxTLTEkCisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIHRoZSBsYWJlbCB0ZXh0IGZvciB0aGUgYWRhcHRlZCBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgU3RyaW5nIGdldFRleHQoT2JqZWN0IG9iamVjdCkgeworCQlVUkkgbGFiZWxWYWx1ZSA9ICgoRWFydGhTY2llbmNlTGFiZWwpb2JqZWN0KS5nZXRVUkkoKTsKKwkJU3RyaW5nIGxhYmVsID0gbGFiZWxWYWx1ZSA9PSBudWxsID8gbnVsbCA6IGxhYmVsVmFsdWUudG9TdHJpbmcoKTsKKwkJcmV0dXJuIGxhYmVsID09IG51bGwgfHwgbGFiZWwubGVuZ3RoKCkgPT0gMCA/CisJCQlnZXRTdHJpbmcoIl9VSV9FYXJ0aFNjaWVuY2VMYWJlbF90eXBlIikgOiAvLyROT04tTkxTLTEkCisJCQlnZXRTdHJpbmcoIl9VSV9FYXJ0aFNjaWVuY2VMYWJlbF90eXBlIikgKyAiICIgKyBsYWJlbDsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCisJfQorCisJLyoqCisJICogVGhpcyBoYW5kbGVzIG1vZGVsIG5vdGlmaWNhdGlvbnMgYnkgY2FsbGluZyB7QGxpbmsgI3VwZGF0ZUNoaWxkcmVufSB0byB1cGRhdGUgYW55IGNhY2hlZAorCSAqIGNoaWxkcmVuIGFuZCBieSBjcmVhdGluZyBhIHZpZXdlciBub3RpZmljYXRpb24sIHdoaWNoIGl0IHBhc3NlcyB0byB7QGxpbmsgI2ZpcmVOb3RpZnlDaGFuZ2VkfS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBub3RpZnlDaGFuZ2VkKE5vdGlmaWNhdGlvbiBub3RpZmljYXRpb24pIHsKKwkJdXBkYXRlQ2hpbGRyZW4obm90aWZpY2F0aW9uKTsKKwkJc3VwZXIubm90aWZ5Q2hhbmdlZChub3RpZmljYXRpb24pOworCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmVkaXQuY29tbWFuZC5Db21tYW5kUGFyYW1ldGVyfXMgZGVzY3JpYmluZyB0aGUgY2hpbGRyZW4KKwkgKiB0aGF0IGNhbiBiZSBjcmVhdGVkIHVuZGVyIHRoaXMgb2JqZWN0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIGNvbGxlY3ROZXdDaGlsZERlc2NyaXB0b3JzKENvbGxlY3Rpb248T2JqZWN0PiBuZXdDaGlsZERlc2NyaXB0b3JzLCBPYmplY3Qgb2JqZWN0KSB7CisJCXN1cGVyLmNvbGxlY3ROZXdDaGlsZERlc2NyaXB0b3JzKG5ld0NoaWxkRGVzY3JpcHRvcnMsIG9iamVjdCk7CisJfQorCisJLyoqCisJICogUmV0dXJuIHRoZSByZXNvdXJjZSBsb2NhdG9yIGZvciB0aGlzIGl0ZW0gcHJvdmlkZXIncyByZXNvdXJjZXMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIFJlc291cmNlTG9jYXRvciBnZXRSZXNvdXJjZUxvY2F0b3IoKSB7CisJCXJldHVybiBEZWZpbml0aW9uc0VkaXRQbHVnaW4uSU5TVEFOQ0U7CisJfQorCit9CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvbGFiZWxzL3Byb3ZpZGVyL0VhcnRoU2NpZW5jZUxhYmVsVmFsdWVJdGVtUHJvdmlkZXIuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy9sYWJlbHMvcHJvdmlkZXIvRWFydGhTY2llbmNlTGFiZWxWYWx1ZUl0ZW1Qcm92aWRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI0NWZhMGEKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvbGFiZWxzL3Byb3ZpZGVyL0VhcnRoU2NpZW5jZUxhYmVsVmFsdWVJdGVtUHJvdmlkZXIuamF2YQpAQCAtMCwwICsxLDQyNyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOSwyMDEwIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMucHJvdmlkZXI7CisKKworaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOworaW1wb3J0IGphdmEudXRpbC5MaXN0OworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5SZXNvdXJjZUxvY2F0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JRWRpdGluZ0RvbWFpbkl0ZW1Qcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbUxhYmVsUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1Qcm9wZXJ0eVNvdXJjZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JU3RydWN0dXJlZEl0ZW1Db250ZW50UHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVRyZWVJdGVtQ29udGVudFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuVmlld2VyTm90aWZpY2F0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5wcm92aWRlci5MYWJlbFZhbHVlSXRlbVByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuZWRnZXMucHJvdmlkZXIuRGVmaW5pdGlvbnNFZGl0UGx1Z2luOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLkVhcnRoU2NpZW5jZUxhYmVsVmFsdWU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuTGFiZWxzUGFja2FnZTsKKworLyoqCisgKiBUaGlzIGlzIHRoZSBpdGVtIHByb3ZpZGVyIGFkYXB0ZXIgZm9yIGEge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLkVhcnRoU2NpZW5jZUxhYmVsVmFsdWV9IG9iamVjdC4KKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIEVhcnRoU2NpZW5jZUxhYmVsVmFsdWVJdGVtUHJvdmlkZXIKKwlleHRlbmRzIExhYmVsVmFsdWVJdGVtUHJvdmlkZXIKKwlpbXBsZW1lbnRzCisJCUlFZGl0aW5nRG9tYWluSXRlbVByb3ZpZGVyLAorCQlJU3RydWN0dXJlZEl0ZW1Db250ZW50UHJvdmlkZXIsCisJCUlUcmVlSXRlbUNvbnRlbnRQcm92aWRlciwKKwkJSUl0ZW1MYWJlbFByb3ZpZGVyLAorCQlJSXRlbVByb3BlcnR5U291cmNlIHsKKwkvKioKKwkgKiBUaGlzIGNvbnN0cnVjdHMgYW4gaW5zdGFuY2UgZnJvbSBhIGZhY3RvcnkgYW5kIGEgbm90aWZpZXIuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVhcnRoU2NpZW5jZUxhYmVsVmFsdWVJdGVtUHJvdmlkZXIoQWRhcHRlckZhY3RvcnkgYWRhcHRlckZhY3RvcnkpIHsKKwkJc3VwZXIoYWRhcHRlckZhY3RvcnkpOworCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyB0aGUgcHJvcGVydHkgZGVzY3JpcHRvcnMgZm9yIHRoZSBhZGFwdGVkIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBMaXN0PElJdGVtUHJvcGVydHlEZXNjcmlwdG9yPiBnZXRQcm9wZXJ0eURlc2NyaXB0b3JzKE9iamVjdCBvYmplY3QpIHsKKwkJaWYgKGl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzID09IG51bGwpIHsKKwkJCXN1cGVyLmdldFByb3BlcnR5RGVzY3JpcHRvcnMob2JqZWN0KTsKKworCQkJYWRkRGF0YVR5cGVQcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0KTsKKwkJCWFkZFVuaXRzUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCk7CisJCQlhZGRNZWFuUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCk7CisJCQlhZGRTZFByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QpOworCQkJYWRkTWluUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCk7CisJCQlhZGRNYXhQcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0KTsKKwkJCWFkZE1lZGlhblByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QpOworCQkJYWRkU2tld25lc3NQcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0KTsKKwkJCWFkZEt1cnRvc2lzUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCk7CisJCQlhZGRSbXNQcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0KTsKKwkJCWFkZFNhbXBsZXNpemVQcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0KTsKKwkJCWFkZFJhbmdlUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCk7CisJCX0KKwkJcmV0dXJuIGl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzOworCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyBhIHByb3BlcnR5IGRlc2NyaXB0b3IgZm9yIHRoZSBEYXRhIFR5cGUgZmVhdHVyZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBhZGREYXRhVHlwZVByb3BlcnR5RGVzY3JpcHRvcihPYmplY3Qgb2JqZWN0KSB7CisJCWl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzLmFkZAorCQkJKGNyZWF0ZUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IKKwkJCQkoKChDb21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5KWFkYXB0ZXJGYWN0b3J5KS5nZXRSb290QWRhcHRlckZhY3RvcnkoKSwKKwkJCQkgZ2V0UmVzb3VyY2VMb2NhdG9yKCksCisJCQkJIGdldFN0cmluZygiX1VJX0VhcnRoU2NpZW5jZUxhYmVsVmFsdWVfZGF0YVR5cGVfZmVhdHVyZSIpLCAvLyROT04tTkxTLTEkCisJCQkJIGdldFN0cmluZygiX1VJX1Byb3BlcnR5RGVzY3JpcHRvcl9kZXNjcmlwdGlvbiIsICJfVUlfRWFydGhTY2llbmNlTGFiZWxWYWx1ZV9kYXRhVHlwZV9mZWF0dXJlIiwgIl9VSV9FYXJ0aFNjaWVuY2VMYWJlbFZhbHVlX3R5cGUiKSwgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkIC8vJE5PTi1OTFMtMyQKKwkJCQkgTGFiZWxzUGFja2FnZS5MaXRlcmFscy5FQVJUSF9TQ0lFTkNFX0xBQkVMX1ZBTFVFX19EQVRBX1RZUEUsCisJCQkJIHRydWUsCisJCQkJIGZhbHNlLAorCQkJCSBmYWxzZSwKKwkJCQkgSXRlbVByb3BlcnR5RGVzY3JpcHRvci5HRU5FUklDX1ZBTFVFX0lNQUdFLAorCQkJCSBudWxsLAorCQkJCSBudWxsKSk7CisJfQorCisJLyoqCisJICogVGhpcyBhZGRzIGEgcHJvcGVydHkgZGVzY3JpcHRvciBmb3IgdGhlIFVuaXRzIGZlYXR1cmUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgYWRkVW5pdHNQcm9wZXJ0eURlc2NyaXB0b3IoT2JqZWN0IG9iamVjdCkgeworCQlpdGVtUHJvcGVydHlEZXNjcmlwdG9ycy5hZGQKKwkJCShjcmVhdGVJdGVtUHJvcGVydHlEZXNjcmlwdG9yCisJCQkJKCgoQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSlhZGFwdGVyRmFjdG9yeSkuZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCksCisJCQkJIGdldFJlc291cmNlTG9jYXRvcigpLAorCQkJCSBnZXRTdHJpbmcoIl9VSV9FYXJ0aFNjaWVuY2VMYWJlbFZhbHVlX3VuaXRzX2ZlYXR1cmUiKSwgLy8kTk9OLU5MUy0xJAorCQkJCSBnZXRTdHJpbmcoIl9VSV9Qcm9wZXJ0eURlc2NyaXB0b3JfZGVzY3JpcHRpb24iLCAiX1VJX0VhcnRoU2NpZW5jZUxhYmVsVmFsdWVfdW5pdHNfZmVhdHVyZSIsICJfVUlfRWFydGhTY2llbmNlTGFiZWxWYWx1ZV90eXBlIiksIC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJCAvLyROT04tTkxTLTMkCisJCQkJIExhYmVsc1BhY2thZ2UuTGl0ZXJhbHMuRUFSVEhfU0NJRU5DRV9MQUJFTF9WQUxVRV9fVU5JVFMsCisJCQkJIHRydWUsCisJCQkJIGZhbHNlLAorCQkJCSBmYWxzZSwKKwkJCQkgSXRlbVByb3BlcnR5RGVzY3JpcHRvci5HRU5FUklDX1ZBTFVFX0lNQUdFLAorCQkJCSBudWxsLAorCQkJCSBudWxsKSk7CisJfQorCisJLyoqCisJICogVGhpcyBhZGRzIGEgcHJvcGVydHkgZGVzY3JpcHRvciBmb3IgdGhlIE1lYW4gZmVhdHVyZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBhZGRNZWFuUHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdCBvYmplY3QpIHsKKwkJaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMuYWRkCisJCQkoY3JlYXRlSXRlbVByb3BlcnR5RGVzY3JpcHRvcgorCQkJCSgoKENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnkpYWRhcHRlckZhY3RvcnkpLmdldFJvb3RBZGFwdGVyRmFjdG9yeSgpLAorCQkJCSBnZXRSZXNvdXJjZUxvY2F0b3IoKSwKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfRWFydGhTY2llbmNlTGFiZWxWYWx1ZV9tZWFuX2ZlYXR1cmUiKSwgLy8kTk9OLU5MUy0xJAorCQkJCSBnZXRTdHJpbmcoIl9VSV9Qcm9wZXJ0eURlc2NyaXB0b3JfZGVzY3JpcHRpb24iLCAiX1VJX0VhcnRoU2NpZW5jZUxhYmVsVmFsdWVfbWVhbl9mZWF0dXJlIiwgIl9VSV9FYXJ0aFNjaWVuY2VMYWJlbFZhbHVlX3R5cGUiKSwgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkIC8vJE5PTi1OTFMtMyQKKwkJCQkgTGFiZWxzUGFja2FnZS5MaXRlcmFscy5FQVJUSF9TQ0lFTkNFX0xBQkVMX1ZBTFVFX19NRUFOLAorCQkJCSB0cnVlLAorCQkJCSBmYWxzZSwKKwkJCQkgZmFsc2UsCisJCQkJIEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IuUkVBTF9WQUxVRV9JTUFHRSwKKwkJCQkgbnVsbCwKKwkJCQkgbnVsbCkpOworCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyBhIHByb3BlcnR5IGRlc2NyaXB0b3IgZm9yIHRoZSBTZCBmZWF0dXJlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIGFkZFNkUHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdCBvYmplY3QpIHsKKwkJaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMuYWRkCisJCQkoY3JlYXRlSXRlbVByb3BlcnR5RGVzY3JpcHRvcgorCQkJCSgoKENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnkpYWRhcHRlckZhY3RvcnkpLmdldFJvb3RBZGFwdGVyRmFjdG9yeSgpLAorCQkJCSBnZXRSZXNvdXJjZUxvY2F0b3IoKSwKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfRWFydGhTY2llbmNlTGFiZWxWYWx1ZV9zZF9mZWF0dXJlIiksIC8vJE5PTi1OTFMtMSQKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfUHJvcGVydHlEZXNjcmlwdG9yX2Rlc2NyaXB0aW9uIiwgIl9VSV9FYXJ0aFNjaWVuY2VMYWJlbFZhbHVlX3NkX2ZlYXR1cmUiLCAiX1VJX0VhcnRoU2NpZW5jZUxhYmVsVmFsdWVfdHlwZSIpLCAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQgLy8kTk9OLU5MUy0zJAorCQkJCSBMYWJlbHNQYWNrYWdlLkxpdGVyYWxzLkVBUlRIX1NDSUVOQ0VfTEFCRUxfVkFMVUVfX1NELAorCQkJCSB0cnVlLAorCQkJCSBmYWxzZSwKKwkJCQkgZmFsc2UsCisJCQkJIEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IuUkVBTF9WQUxVRV9JTUFHRSwKKwkJCQkgbnVsbCwKKwkJCQkgbnVsbCkpOworCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyBhIHByb3BlcnR5IGRlc2NyaXB0b3IgZm9yIHRoZSBNaW4gZmVhdHVyZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBhZGRNaW5Qcm9wZXJ0eURlc2NyaXB0b3IoT2JqZWN0IG9iamVjdCkgeworCQlpdGVtUHJvcGVydHlEZXNjcmlwdG9ycy5hZGQKKwkJCShjcmVhdGVJdGVtUHJvcGVydHlEZXNjcmlwdG9yCisJCQkJKCgoQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSlhZGFwdGVyRmFjdG9yeSkuZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCksCisJCQkJIGdldFJlc291cmNlTG9jYXRvcigpLAorCQkJCSBnZXRTdHJpbmcoIl9VSV9FYXJ0aFNjaWVuY2VMYWJlbFZhbHVlX21pbl9mZWF0dXJlIiksIC8vJE5PTi1OTFMtMSQKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfUHJvcGVydHlEZXNjcmlwdG9yX2Rlc2NyaXB0aW9uIiwgIl9VSV9FYXJ0aFNjaWVuY2VMYWJlbFZhbHVlX21pbl9mZWF0dXJlIiwgIl9VSV9FYXJ0aFNjaWVuY2VMYWJlbFZhbHVlX3R5cGUiKSwgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkIC8vJE5PTi1OTFMtMyQKKwkJCQkgTGFiZWxzUGFja2FnZS5MaXRlcmFscy5FQVJUSF9TQ0lFTkNFX0xBQkVMX1ZBTFVFX19NSU4sCisJCQkJIHRydWUsCisJCQkJIGZhbHNlLAorCQkJCSBmYWxzZSwKKwkJCQkgSXRlbVByb3BlcnR5RGVzY3JpcHRvci5SRUFMX1ZBTFVFX0lNQUdFLAorCQkJCSBudWxsLAorCQkJCSBudWxsKSk7CisJfQorCisJLyoqCisJICogVGhpcyBhZGRzIGEgcHJvcGVydHkgZGVzY3JpcHRvciBmb3IgdGhlIE1heCBmZWF0dXJlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIGFkZE1heFByb3BlcnR5RGVzY3JpcHRvcihPYmplY3Qgb2JqZWN0KSB7CisJCWl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzLmFkZAorCQkJKGNyZWF0ZUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IKKwkJCQkoKChDb21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5KWFkYXB0ZXJGYWN0b3J5KS5nZXRSb290QWRhcHRlckZhY3RvcnkoKSwKKwkJCQkgZ2V0UmVzb3VyY2VMb2NhdG9yKCksCisJCQkJIGdldFN0cmluZygiX1VJX0VhcnRoU2NpZW5jZUxhYmVsVmFsdWVfbWF4X2ZlYXR1cmUiKSwgLy8kTk9OLU5MUy0xJAorCQkJCSBnZXRTdHJpbmcoIl9VSV9Qcm9wZXJ0eURlc2NyaXB0b3JfZGVzY3JpcHRpb24iLCAiX1VJX0VhcnRoU2NpZW5jZUxhYmVsVmFsdWVfbWF4X2ZlYXR1cmUiLCAiX1VJX0VhcnRoU2NpZW5jZUxhYmVsVmFsdWVfdHlwZSIpLCAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQgLy8kTk9OLU5MUy0zJAorCQkJCSBMYWJlbHNQYWNrYWdlLkxpdGVyYWxzLkVBUlRIX1NDSUVOQ0VfTEFCRUxfVkFMVUVfX01BWCwKKwkJCQkgdHJ1ZSwKKwkJCQkgZmFsc2UsCisJCQkJIGZhbHNlLAorCQkJCSBJdGVtUHJvcGVydHlEZXNjcmlwdG9yLlJFQUxfVkFMVUVfSU1BR0UsCisJCQkJIG51bGwsCisJCQkJIG51bGwpKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFkZHMgYSBwcm9wZXJ0eSBkZXNjcmlwdG9yIGZvciB0aGUgTWVkaWFuIGZlYXR1cmUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgYWRkTWVkaWFuUHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdCBvYmplY3QpIHsKKwkJaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMuYWRkCisJCQkoY3JlYXRlSXRlbVByb3BlcnR5RGVzY3JpcHRvcgorCQkJCSgoKENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnkpYWRhcHRlckZhY3RvcnkpLmdldFJvb3RBZGFwdGVyRmFjdG9yeSgpLAorCQkJCSBnZXRSZXNvdXJjZUxvY2F0b3IoKSwKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfRWFydGhTY2llbmNlTGFiZWxWYWx1ZV9tZWRpYW5fZmVhdHVyZSIpLCAvLyROT04tTkxTLTEkCisJCQkJIGdldFN0cmluZygiX1VJX1Byb3BlcnR5RGVzY3JpcHRvcl9kZXNjcmlwdGlvbiIsICJfVUlfRWFydGhTY2llbmNlTGFiZWxWYWx1ZV9tZWRpYW5fZmVhdHVyZSIsICJfVUlfRWFydGhTY2llbmNlTGFiZWxWYWx1ZV90eXBlIiksIC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJCAvLyROT04tTkxTLTMkCisJCQkJIExhYmVsc1BhY2thZ2UuTGl0ZXJhbHMuRUFSVEhfU0NJRU5DRV9MQUJFTF9WQUxVRV9fTUVESUFOLAorCQkJCSB0cnVlLAorCQkJCSBmYWxzZSwKKwkJCQkgZmFsc2UsCisJCQkJIEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IuUkVBTF9WQUxVRV9JTUFHRSwKKwkJCQkgbnVsbCwKKwkJCQkgbnVsbCkpOworCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyBhIHByb3BlcnR5IGRlc2NyaXB0b3IgZm9yIHRoZSBTa2V3bmVzcyBmZWF0dXJlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIGFkZFNrZXduZXNzUHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdCBvYmplY3QpIHsKKwkJaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMuYWRkCisJCQkoY3JlYXRlSXRlbVByb3BlcnR5RGVzY3JpcHRvcgorCQkJCSgoKENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnkpYWRhcHRlckZhY3RvcnkpLmdldFJvb3RBZGFwdGVyRmFjdG9yeSgpLAorCQkJCSBnZXRSZXNvdXJjZUxvY2F0b3IoKSwKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfRWFydGhTY2llbmNlTGFiZWxWYWx1ZV9za2V3bmVzc19mZWF0dXJlIiksIC8vJE5PTi1OTFMtMSQKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfUHJvcGVydHlEZXNjcmlwdG9yX2Rlc2NyaXB0aW9uIiwgIl9VSV9FYXJ0aFNjaWVuY2VMYWJlbFZhbHVlX3NrZXduZXNzX2ZlYXR1cmUiLCAiX1VJX0VhcnRoU2NpZW5jZUxhYmVsVmFsdWVfdHlwZSIpLCAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQgLy8kTk9OLU5MUy0zJAorCQkJCSBMYWJlbHNQYWNrYWdlLkxpdGVyYWxzLkVBUlRIX1NDSUVOQ0VfTEFCRUxfVkFMVUVfX1NLRVdORVNTLAorCQkJCSB0cnVlLAorCQkJCSBmYWxzZSwKKwkJCQkgZmFsc2UsCisJCQkJIEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IuUkVBTF9WQUxVRV9JTUFHRSwKKwkJCQkgbnVsbCwKKwkJCQkgbnVsbCkpOworCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyBhIHByb3BlcnR5IGRlc2NyaXB0b3IgZm9yIHRoZSBLdXJ0b3NpcyBmZWF0dXJlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIGFkZEt1cnRvc2lzUHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdCBvYmplY3QpIHsKKwkJaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMuYWRkCisJCQkoY3JlYXRlSXRlbVByb3BlcnR5RGVzY3JpcHRvcgorCQkJCSgoKENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnkpYWRhcHRlckZhY3RvcnkpLmdldFJvb3RBZGFwdGVyRmFjdG9yeSgpLAorCQkJCSBnZXRSZXNvdXJjZUxvY2F0b3IoKSwKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfRWFydGhTY2llbmNlTGFiZWxWYWx1ZV9rdXJ0b3Npc19mZWF0dXJlIiksIC8vJE5PTi1OTFMtMSQKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfUHJvcGVydHlEZXNjcmlwdG9yX2Rlc2NyaXB0aW9uIiwgIl9VSV9FYXJ0aFNjaWVuY2VMYWJlbFZhbHVlX2t1cnRvc2lzX2ZlYXR1cmUiLCAiX1VJX0VhcnRoU2NpZW5jZUxhYmVsVmFsdWVfdHlwZSIpLCAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQgLy8kTk9OLU5MUy0zJAorCQkJCSBMYWJlbHNQYWNrYWdlLkxpdGVyYWxzLkVBUlRIX1NDSUVOQ0VfTEFCRUxfVkFMVUVfX0tVUlRPU0lTLAorCQkJCSB0cnVlLAorCQkJCSBmYWxzZSwKKwkJCQkgZmFsc2UsCisJCQkJIEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IuUkVBTF9WQUxVRV9JTUFHRSwKKwkJCQkgbnVsbCwKKwkJCQkgbnVsbCkpOworCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyBhIHByb3BlcnR5IGRlc2NyaXB0b3IgZm9yIHRoZSBSbXMgZmVhdHVyZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBhZGRSbXNQcm9wZXJ0eURlc2NyaXB0b3IoT2JqZWN0IG9iamVjdCkgeworCQlpdGVtUHJvcGVydHlEZXNjcmlwdG9ycy5hZGQKKwkJCShjcmVhdGVJdGVtUHJvcGVydHlEZXNjcmlwdG9yCisJCQkJKCgoQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSlhZGFwdGVyRmFjdG9yeSkuZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCksCisJCQkJIGdldFJlc291cmNlTG9jYXRvcigpLAorCQkJCSBnZXRTdHJpbmcoIl9VSV9FYXJ0aFNjaWVuY2VMYWJlbFZhbHVlX3Jtc19mZWF0dXJlIiksIC8vJE5PTi1OTFMtMSQKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfUHJvcGVydHlEZXNjcmlwdG9yX2Rlc2NyaXB0aW9uIiwgIl9VSV9FYXJ0aFNjaWVuY2VMYWJlbFZhbHVlX3Jtc19mZWF0dXJlIiwgIl9VSV9FYXJ0aFNjaWVuY2VMYWJlbFZhbHVlX3R5cGUiKSwgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkIC8vJE5PTi1OTFMtMyQKKwkJCQkgTGFiZWxzUGFja2FnZS5MaXRlcmFscy5FQVJUSF9TQ0lFTkNFX0xBQkVMX1ZBTFVFX19STVMsCisJCQkJIHRydWUsCisJCQkJIGZhbHNlLAorCQkJCSBmYWxzZSwKKwkJCQkgSXRlbVByb3BlcnR5RGVzY3JpcHRvci5SRUFMX1ZBTFVFX0lNQUdFLAorCQkJCSBudWxsLAorCQkJCSBudWxsKSk7CisJfQorCisJLyoqCisJICogVGhpcyBhZGRzIGEgcHJvcGVydHkgZGVzY3JpcHRvciBmb3IgdGhlIFNhbXBsZXNpemUgZmVhdHVyZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBhZGRTYW1wbGVzaXplUHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdCBvYmplY3QpIHsKKwkJaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMuYWRkCisJCQkoY3JlYXRlSXRlbVByb3BlcnR5RGVzY3JpcHRvcgorCQkJCSgoKENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnkpYWRhcHRlckZhY3RvcnkpLmdldFJvb3RBZGFwdGVyRmFjdG9yeSgpLAorCQkJCSBnZXRSZXNvdXJjZUxvY2F0b3IoKSwKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfRWFydGhTY2llbmNlTGFiZWxWYWx1ZV9zYW1wbGVzaXplX2ZlYXR1cmUiKSwgLy8kTk9OLU5MUy0xJAorCQkJCSBnZXRTdHJpbmcoIl9VSV9Qcm9wZXJ0eURlc2NyaXB0b3JfZGVzY3JpcHRpb24iLCAiX1VJX0VhcnRoU2NpZW5jZUxhYmVsVmFsdWVfc2FtcGxlc2l6ZV9mZWF0dXJlIiwgIl9VSV9FYXJ0aFNjaWVuY2VMYWJlbFZhbHVlX3R5cGUiKSwgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkIC8vJE5PTi1OTFMtMyQKKwkJCQkgTGFiZWxzUGFja2FnZS5MaXRlcmFscy5FQVJUSF9TQ0lFTkNFX0xBQkVMX1ZBTFVFX19TQU1QTEVTSVpFLAorCQkJCSB0cnVlLAorCQkJCSBmYWxzZSwKKwkJCQkgZmFsc2UsCisJCQkJIEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IuUkVBTF9WQUxVRV9JTUFHRSwKKwkJCQkgbnVsbCwKKwkJCQkgbnVsbCkpOworCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyBhIHByb3BlcnR5IGRlc2NyaXB0b3IgZm9yIHRoZSBSYW5nZSBmZWF0dXJlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIGFkZFJhbmdlUHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdCBvYmplY3QpIHsKKwkJaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMuYWRkCisJCQkoY3JlYXRlSXRlbVByb3BlcnR5RGVzY3JpcHRvcgorCQkJCSgoKENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnkpYWRhcHRlckZhY3RvcnkpLmdldFJvb3RBZGFwdGVyRmFjdG9yeSgpLAorCQkJCSBnZXRSZXNvdXJjZUxvY2F0b3IoKSwKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfRWFydGhTY2llbmNlTGFiZWxWYWx1ZV9yYW5nZV9mZWF0dXJlIiksIC8vJE5PTi1OTFMtMSQKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfUHJvcGVydHlEZXNjcmlwdG9yX2Rlc2NyaXB0aW9uIiwgIl9VSV9FYXJ0aFNjaWVuY2VMYWJlbFZhbHVlX3JhbmdlX2ZlYXR1cmUiLCAiX1VJX0VhcnRoU2NpZW5jZUxhYmVsVmFsdWVfdHlwZSIpLCAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQgLy8kTk9OLU5MUy0zJAorCQkJCSBMYWJlbHNQYWNrYWdlLkxpdGVyYWxzLkVBUlRIX1NDSUVOQ0VfTEFCRUxfVkFMVUVfX1JBTkdFLAorCQkJCSB0cnVlLAorCQkJCSBmYWxzZSwKKwkJCQkgZmFsc2UsCisJCQkJIEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IuUkVBTF9WQUxVRV9JTUFHRSwKKwkJCQkgbnVsbCwKKwkJCQkgbnVsbCkpOworCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyBFYXJ0aFNjaWVuY2VMYWJlbFZhbHVlLmdpZi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgT2JqZWN0IGdldEltYWdlKE9iamVjdCBvYmplY3QpIHsKKwkJcmV0dXJuIG92ZXJsYXlJbWFnZShvYmplY3QsIGdldFJlc291cmNlTG9jYXRvcigpLmdldEltYWdlKCJmdWxsL29iajE2L0VhcnRoU2NpZW5jZUxhYmVsVmFsdWUiKSk7IC8vJE5PTi1OTFMtMSQKKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgdGhlIGxhYmVsIHRleHQgZm9yIHRoZSBhZGFwdGVkIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBTdHJpbmcgZ2V0VGV4dChPYmplY3Qgb2JqZWN0KSB7CisJCVN0cmluZyBsYWJlbCA9ICgoRWFydGhTY2llbmNlTGFiZWxWYWx1ZSlvYmplY3QpLmdldERhdGFUeXBlKCk7CisJCXJldHVybiBsYWJlbCA9PSBudWxsIHx8IGxhYmVsLmxlbmd0aCgpID09IDAgPworCQkJZ2V0U3RyaW5nKCJfVUlfRWFydGhTY2llbmNlTGFiZWxWYWx1ZV90eXBlIikgOiAvLyROT04tTkxTLTEkCisJCQlnZXRTdHJpbmcoIl9VSV9FYXJ0aFNjaWVuY2VMYWJlbFZhbHVlX3R5cGUiKSArICIgIiArIGxhYmVsOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKKwl9CisKKwkvKioKKwkgKiBUaGlzIGhhbmRsZXMgbW9kZWwgbm90aWZpY2F0aW9ucyBieSBjYWxsaW5nIHtAbGluayAjdXBkYXRlQ2hpbGRyZW59IHRvIHVwZGF0ZSBhbnkgY2FjaGVkCisJICogY2hpbGRyZW4gYW5kIGJ5IGNyZWF0aW5nIGEgdmlld2VyIG5vdGlmaWNhdGlvbiwgd2hpY2ggaXQgcGFzc2VzIHRvIHtAbGluayAjZmlyZU5vdGlmeUNoYW5nZWR9LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIG5vdGlmeUNoYW5nZWQoTm90aWZpY2F0aW9uIG5vdGlmaWNhdGlvbikgeworCQl1cGRhdGVDaGlsZHJlbihub3RpZmljYXRpb24pOworCisJCXN3aXRjaCAobm90aWZpY2F0aW9uLmdldEZlYXR1cmVJRChFYXJ0aFNjaWVuY2VMYWJlbFZhbHVlLmNsYXNzKSkgeworCQkJY2FzZSBMYWJlbHNQYWNrYWdlLkVBUlRIX1NDSUVOQ0VfTEFCRUxfVkFMVUVfX0RBVEFfVFlQRToKKwkJCWNhc2UgTGFiZWxzUGFja2FnZS5FQVJUSF9TQ0lFTkNFX0xBQkVMX1ZBTFVFX19VTklUUzoKKwkJCWNhc2UgTGFiZWxzUGFja2FnZS5FQVJUSF9TQ0lFTkNFX0xBQkVMX1ZBTFVFX19NRUFOOgorCQkJY2FzZSBMYWJlbHNQYWNrYWdlLkVBUlRIX1NDSUVOQ0VfTEFCRUxfVkFMVUVfX1NEOgorCQkJY2FzZSBMYWJlbHNQYWNrYWdlLkVBUlRIX1NDSUVOQ0VfTEFCRUxfVkFMVUVfX01JTjoKKwkJCWNhc2UgTGFiZWxzUGFja2FnZS5FQVJUSF9TQ0lFTkNFX0xBQkVMX1ZBTFVFX19NQVg6CisJCQljYXNlIExhYmVsc1BhY2thZ2UuRUFSVEhfU0NJRU5DRV9MQUJFTF9WQUxVRV9fTUVESUFOOgorCQkJY2FzZSBMYWJlbHNQYWNrYWdlLkVBUlRIX1NDSUVOQ0VfTEFCRUxfVkFMVUVfX1NLRVdORVNTOgorCQkJY2FzZSBMYWJlbHNQYWNrYWdlLkVBUlRIX1NDSUVOQ0VfTEFCRUxfVkFMVUVfX0tVUlRPU0lTOgorCQkJY2FzZSBMYWJlbHNQYWNrYWdlLkVBUlRIX1NDSUVOQ0VfTEFCRUxfVkFMVUVfX1JNUzoKKwkJCWNhc2UgTGFiZWxzUGFja2FnZS5FQVJUSF9TQ0lFTkNFX0xBQkVMX1ZBTFVFX19TQU1QTEVTSVpFOgorCQkJY2FzZSBMYWJlbHNQYWNrYWdlLkVBUlRIX1NDSUVOQ0VfTEFCRUxfVkFMVUVfX1JBTkdFOgorCQkJCWZpcmVOb3RpZnlDaGFuZ2VkKG5ldyBWaWV3ZXJOb3RpZmljYXRpb24obm90aWZpY2F0aW9uLCBub3RpZmljYXRpb24uZ2V0Tm90aWZpZXIoKSwgZmFsc2UsIHRydWUpKTsKKwkJCQlyZXR1cm47CisJCX0KKwkJc3VwZXIubm90aWZ5Q2hhbmdlZChub3RpZmljYXRpb24pOworCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmVkaXQuY29tbWFuZC5Db21tYW5kUGFyYW1ldGVyfXMgZGVzY3JpYmluZyB0aGUgY2hpbGRyZW4KKwkgKiB0aGF0IGNhbiBiZSBjcmVhdGVkIHVuZGVyIHRoaXMgb2JqZWN0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIGNvbGxlY3ROZXdDaGlsZERlc2NyaXB0b3JzKENvbGxlY3Rpb248T2JqZWN0PiBuZXdDaGlsZERlc2NyaXB0b3JzLCBPYmplY3Qgb2JqZWN0KSB7CisJCXN1cGVyLmNvbGxlY3ROZXdDaGlsZERlc2NyaXB0b3JzKG5ld0NoaWxkRGVzY3JpcHRvcnMsIG9iamVjdCk7CisJfQorCisJLyoqCisJICogUmV0dXJuIHRoZSByZXNvdXJjZSBsb2NhdG9yIGZvciB0aGlzIGl0ZW0gcHJvdmlkZXIncyByZXNvdXJjZXMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIFJlc291cmNlTG9jYXRvciBnZXRSZXNvdXJjZUxvY2F0b3IoKSB7CisJCXJldHVybiBEZWZpbml0aW9uc0VkaXRQbHVnaW4uSU5TVEFOQ0U7CisJfQorCit9CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvbGFiZWxzL3Byb3ZpZGVyL0xhYmVsc0l0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5LmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvbGFiZWxzL3Byb3ZpZGVyL0xhYmVsc0l0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDczZWUwNgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy9sYWJlbHMvcHJvdmlkZXIvTGFiZWxzSXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkuamF2YQpAQCAtMCwwICsxLDU3NiBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5wcm92aWRlcjsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OworaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuQWRhcHRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuQ2hhbmdlTm90aWZpZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5Db21wb3NlZEFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklDaGFuZ2VOb3RpZmllcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JRGlzcG9zYWJsZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JRWRpdGluZ0RvbWFpbkl0ZW1Qcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbUxhYmVsUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1Qcm9wZXJ0eVNvdXJjZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JTm90aWZ5Q2hhbmdlZExpc3RlbmVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklTdHJ1Y3R1cmVkSXRlbUNvbnRlbnRQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JVHJlZUl0ZW1Db250ZW50UHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMudXRpbC5MYWJlbHNBZGFwdGVyRmFjdG9yeTsKKworLyoqCisgKiBUaGlzIGlzIHRoZSBmYWN0b3J5IHRoYXQgaXMgdXNlZCB0byBwcm92aWRlIHRoZSBpbnRlcmZhY2VzIG5lZWRlZCB0byBzdXBwb3J0IFZpZXdlcnMuCisgKiBUaGUgYWRhcHRlcnMgZ2VuZXJhdGVkIGJ5IHRoaXMgZmFjdG9yeSBjb252ZXJ0IEVNRiBhZGFwdGVyIG5vdGlmaWNhdGlvbnMgaW50byBjYWxscyB0byB7QGxpbmsgI2ZpcmVOb3RpZnlDaGFuZ2VkIGZpcmVOb3RpZnlDaGFuZ2VkfS4KKyAqIFRoZSBhZGFwdGVycyBhbHNvIHN1cHBvcnQgRWNsaXBzZSBwcm9wZXJ0eSBzaGVldHMuCisgKiBOb3RlIHRoYXQgbW9zdCBvZiB0aGUgYWRhcHRlcnMgYXJlIHNoYXJlZCBhbW9uZyBtdWx0aXBsZSBpbnN0YW5jZXMuCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tCisgKiBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBMYWJlbHNJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSBleHRlbmRzIExhYmVsc0FkYXB0ZXJGYWN0b3J5CisJCWltcGxlbWVudHMgQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSwgSUNoYW5nZU5vdGlmaWVyLCBJRGlzcG9zYWJsZSB7CisJLyoqCisJICogVGhpcyBrZWVwcyB0cmFjayBvZiB0aGUgcm9vdCBhZGFwdGVyIGZhY3RvcnkgdGhhdCBkZWxlZ2F0ZXMgdG8gdGhpcyBhZGFwdGVyIGZhY3RvcnkuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBDb21wb3NlZEFkYXB0ZXJGYWN0b3J5IHBhcmVudEFkYXB0ZXJGYWN0b3J5OworCisJLyoqCisJICogVGhpcyBpcyB1c2VkIHRvIGltcGxlbWVudAorCSAqIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JQ2hhbmdlTm90aWZpZXJ9LiA8IS0tCisJICogYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgSUNoYW5nZU5vdGlmaWVyIGNoYW5nZU5vdGlmaWVyID0gbmV3IENoYW5nZU5vdGlmaWVyKCk7CisKKwkvKioKKwkgKiBUaGlzIGtlZXBzIHRyYWNrIG9mIGFsbCB0aGUgc3VwcG9ydGVkIHR5cGVzIGNoZWNrZWQgYnkge0BsaW5rICNpc0ZhY3RvcnlGb3JUeXBlIGlzRmFjdG9yeUZvclR5cGV9LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0KKwkgKiBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBDb2xsZWN0aW9uPE9iamVjdD4gc3VwcG9ydGVkVHlwZXMgPSBuZXcgQXJyYXlMaXN0PE9iamVjdD4oKTsKKworCS8qKgorCSAqIFRoaXMgY29uc3RydWN0cyBhbiBpbnN0YW5jZS4gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MKKwkgKiAtLT4KKwkgKiAKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIExhYmVsc0l0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5KCkgeworCQlzdXBwb3J0ZWRUeXBlcy5hZGQoSUVkaXRpbmdEb21haW5JdGVtUHJvdmlkZXIuY2xhc3MpOworCQlzdXBwb3J0ZWRUeXBlcy5hZGQoSVN0cnVjdHVyZWRJdGVtQ29udGVudFByb3ZpZGVyLmNsYXNzKTsKKwkJc3VwcG9ydGVkVHlwZXMuYWRkKElUcmVlSXRlbUNvbnRlbnRQcm92aWRlci5jbGFzcyk7CisJCXN1cHBvcnRlZFR5cGVzLmFkZChJSXRlbUxhYmVsUHJvdmlkZXIuY2xhc3MpOworCQlzdXBwb3J0ZWRUeXBlcy5hZGQoSUl0ZW1Qcm9wZXJ0eVNvdXJjZS5jbGFzcyk7CisJfQorCisJLyoqCisJICogVGhpcyBrZWVwcyB0cmFjayBvZiB0aGUgb25lIGFkYXB0ZXIgdXNlZCBmb3IgYWxsIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5Qb3B1bGF0aW9uTGFiZWx9IGluc3RhbmNlcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIFBvcHVsYXRpb25MYWJlbEl0ZW1Qcm92aWRlciBwb3B1bGF0aW9uTGFiZWxJdGVtUHJvdmlkZXI7CisKKwkvKioKKwkgKiBUaGlzIGNyZWF0ZXMgYW4gYWRhcHRlciBmb3IgYQorCSAqIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5Qb3B1bGF0aW9uTGFiZWx9LiA8IS0tCisJICogYmVnaW4tdXNlci1kb2MgLS0+CisJICogCisJICogQHJldHVybgorCSAqIAorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVQb3B1bGF0aW9uTGFiZWxBZGFwdGVyKCkgeworCQlpZiAocG9wdWxhdGlvbkxhYmVsSXRlbVByb3ZpZGVyID09IG51bGwpIHsKKwkJCXBvcHVsYXRpb25MYWJlbEl0ZW1Qcm92aWRlciA9IG5ldyBQb3B1bGF0aW9uTGFiZWxJdGVtUHJvdmlkZXIodGhpcyk7CisJCX0KKworCQlyZXR1cm4gcG9wdWxhdGlvbkxhYmVsSXRlbVByb3ZpZGVyOworCX0KKworCS8qKgorCSAqIFRoaXMga2VlcHMgdHJhY2sgb2YgdGhlIG9uZSBhZGFwdGVyIHVzZWQgZm9yIGFsbCB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuUG9wdWxhdGlvbkxhYmVsVmFsdWV9IGluc3RhbmNlcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIFBvcHVsYXRpb25MYWJlbFZhbHVlSXRlbVByb3ZpZGVyIHBvcHVsYXRpb25MYWJlbFZhbHVlSXRlbVByb3ZpZGVyOworCisJLyoqCisJICogVGhpcyBjcmVhdGVzIGFuIGFkYXB0ZXIgZm9yIGEge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLlBvcHVsYXRpb25MYWJlbFZhbHVlfS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEByZXR1cm4KKwkgKiAKKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlUG9wdWxhdGlvbkxhYmVsVmFsdWVBZGFwdGVyKCkgeworCQlpZiAocG9wdWxhdGlvbkxhYmVsVmFsdWVJdGVtUHJvdmlkZXIgPT0gbnVsbCkgeworCQkJcG9wdWxhdGlvbkxhYmVsVmFsdWVJdGVtUHJvdmlkZXIgPSBuZXcgUG9wdWxhdGlvbkxhYmVsVmFsdWVJdGVtUHJvdmlkZXIodGhpcyk7CisJCX0KKworCQlyZXR1cm4gcG9wdWxhdGlvbkxhYmVsVmFsdWVJdGVtUHJvdmlkZXI7CisJfQorCisJLyoqCisJICogVGhpcyBrZWVwcyB0cmFjayBvZiB0aGUgb25lIGFkYXB0ZXIgdXNlZCBmb3IgYWxsCisJICoge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLkFyZWFMYWJlbH0gaW5zdGFuY2VzLiA8IS0tCisJICogYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgQXJlYUxhYmVsSXRlbVByb3ZpZGVyIGFyZWFMYWJlbEl0ZW1Qcm92aWRlcjsKKworCS8qKgorCSAqIFRoaXMgY3JlYXRlcyBhbiBhZGFwdGVyIGZvciBhCisJICoge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLkFyZWFMYWJlbH0uIDwhLS0KKwkgKiBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAcmV0dXJuCisJICogCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZUFyZWFMYWJlbEFkYXB0ZXIoKSB7CisJCWlmIChhcmVhTGFiZWxJdGVtUHJvdmlkZXIgPT0gbnVsbCkgeworCQkJYXJlYUxhYmVsSXRlbVByb3ZpZGVyID0gbmV3IEFyZWFMYWJlbEl0ZW1Qcm92aWRlcih0aGlzKTsKKwkJfQorCisJCXJldHVybiBhcmVhTGFiZWxJdGVtUHJvdmlkZXI7CisJfQorCisJLyoqCisJICogVGhpcyBrZWVwcyB0cmFjayBvZiB0aGUgb25lIGFkYXB0ZXIgdXNlZCBmb3IgYWxsIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5BcmVhTGFiZWxWYWx1ZX0gaW5zdGFuY2VzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgQXJlYUxhYmVsVmFsdWVJdGVtUHJvdmlkZXIgYXJlYUxhYmVsVmFsdWVJdGVtUHJvdmlkZXI7CisKKwkvKioKKwkgKiBUaGlzIGNyZWF0ZXMgYW4gYWRhcHRlciBmb3IgYQorCSAqIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5BcmVhTGFiZWxWYWx1ZX0uIDwhLS0KKwkgKiBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAcmV0dXJuCisJICogCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZUFyZWFMYWJlbFZhbHVlQWRhcHRlcigpIHsKKwkJaWYgKGFyZWFMYWJlbFZhbHVlSXRlbVByb3ZpZGVyID09IG51bGwpIHsKKwkJCWFyZWFMYWJlbFZhbHVlSXRlbVByb3ZpZGVyID0gbmV3IEFyZWFMYWJlbFZhbHVlSXRlbVByb3ZpZGVyKHRoaXMpOworCQl9CisKKwkJcmV0dXJuIGFyZWFMYWJlbFZhbHVlSXRlbVByb3ZpZGVyOworCX0KKworCS8qKgorCSAqIFRoaXMga2VlcHMgdHJhY2sgb2YgdGhlIG9uZSBhZGFwdGVyIHVzZWQgZm9yIGFsbCB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuUmVsYXRpdmVQaHlzaWNhbFJlbGF0aW9uc2hpcExhYmVsfSBpbnN0YW5jZXMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBSZWxhdGl2ZVBoeXNpY2FsUmVsYXRpb25zaGlwTGFiZWxJdGVtUHJvdmlkZXIgcmVsYXRpdmVQaHlzaWNhbFJlbGF0aW9uc2hpcExhYmVsSXRlbVByb3ZpZGVyOworCisJLyoqCisJICogVGhpcyBjcmVhdGVzIGFuIGFkYXB0ZXIgZm9yIGEge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLlJlbGF0aXZlUGh5c2ljYWxSZWxhdGlvbnNoaXBMYWJlbH0uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZVJlbGF0aXZlUGh5c2ljYWxSZWxhdGlvbnNoaXBMYWJlbEFkYXB0ZXIoKSB7CisJCWlmIChyZWxhdGl2ZVBoeXNpY2FsUmVsYXRpb25zaGlwTGFiZWxJdGVtUHJvdmlkZXIgPT0gbnVsbCkgeworCQkJcmVsYXRpdmVQaHlzaWNhbFJlbGF0aW9uc2hpcExhYmVsSXRlbVByb3ZpZGVyID0gbmV3IFJlbGF0aXZlUGh5c2ljYWxSZWxhdGlvbnNoaXBMYWJlbEl0ZW1Qcm92aWRlcih0aGlzKTsKKwkJfQorCisJCXJldHVybiByZWxhdGl2ZVBoeXNpY2FsUmVsYXRpb25zaGlwTGFiZWxJdGVtUHJvdmlkZXI7CisJfQorCisJLyoqCisJICogVGhpcyBrZWVwcyB0cmFjayBvZiB0aGUgb25lIGFkYXB0ZXIgdXNlZCBmb3IgYWxsIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5SZWxhdGl2ZVBoeXNpY2FsUmVsYXRpb25zaGlwTGFiZWxWYWx1ZX0gaW5zdGFuY2VzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgUmVsYXRpdmVQaHlzaWNhbFJlbGF0aW9uc2hpcExhYmVsVmFsdWVJdGVtUHJvdmlkZXIgcmVsYXRpdmVQaHlzaWNhbFJlbGF0aW9uc2hpcExhYmVsVmFsdWVJdGVtUHJvdmlkZXI7CisKKwkvKioKKwkgKiBUaGlzIGNyZWF0ZXMgYW4gYWRhcHRlciBmb3IgYSB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuUmVsYXRpdmVQaHlzaWNhbFJlbGF0aW9uc2hpcExhYmVsVmFsdWV9LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVSZWxhdGl2ZVBoeXNpY2FsUmVsYXRpb25zaGlwTGFiZWxWYWx1ZUFkYXB0ZXIoKSB7CisJCWlmIChyZWxhdGl2ZVBoeXNpY2FsUmVsYXRpb25zaGlwTGFiZWxWYWx1ZUl0ZW1Qcm92aWRlciA9PSBudWxsKSB7CisJCQlyZWxhdGl2ZVBoeXNpY2FsUmVsYXRpb25zaGlwTGFiZWxWYWx1ZUl0ZW1Qcm92aWRlciA9IG5ldyBSZWxhdGl2ZVBoeXNpY2FsUmVsYXRpb25zaGlwTGFiZWxWYWx1ZUl0ZW1Qcm92aWRlcih0aGlzKTsKKwkJfQorCisJCXJldHVybiByZWxhdGl2ZVBoeXNpY2FsUmVsYXRpb25zaGlwTGFiZWxWYWx1ZUl0ZW1Qcm92aWRlcjsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGtlZXBzIHRyYWNrIG9mIHRoZSBvbmUgYWRhcHRlciB1c2VkIGZvciBhbGwge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLkNvbW1vbkJvcmRlclJlbGF0aW9uc2hpcExhYmVsfSBpbnN0YW5jZXMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBDb21tb25Cb3JkZXJSZWxhdGlvbnNoaXBMYWJlbEl0ZW1Qcm92aWRlciBjb21tb25Cb3JkZXJSZWxhdGlvbnNoaXBMYWJlbEl0ZW1Qcm92aWRlcjsKKworCS8qKgorCSAqIFRoaXMgY3JlYXRlcyBhbiBhZGFwdGVyIGZvciBhIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5Db21tb25Cb3JkZXJSZWxhdGlvbnNoaXBMYWJlbH0uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZUNvbW1vbkJvcmRlclJlbGF0aW9uc2hpcExhYmVsQWRhcHRlcigpIHsKKwkJaWYgKGNvbW1vbkJvcmRlclJlbGF0aW9uc2hpcExhYmVsSXRlbVByb3ZpZGVyID09IG51bGwpIHsKKwkJCWNvbW1vbkJvcmRlclJlbGF0aW9uc2hpcExhYmVsSXRlbVByb3ZpZGVyID0gbmV3IENvbW1vbkJvcmRlclJlbGF0aW9uc2hpcExhYmVsSXRlbVByb3ZpZGVyKHRoaXMpOworCQl9CisKKwkJcmV0dXJuIGNvbW1vbkJvcmRlclJlbGF0aW9uc2hpcExhYmVsSXRlbVByb3ZpZGVyOworCX0KKworCS8qKgorCSAqIFRoaXMga2VlcHMgdHJhY2sgb2YgdGhlIG9uZSBhZGFwdGVyIHVzZWQgZm9yIGFsbCB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuQ29tbW9uQm9yZGVyUmVsYXRpb25zaGlwTGFiZWxWYWx1ZX0gaW5zdGFuY2VzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgQ29tbW9uQm9yZGVyUmVsYXRpb25zaGlwTGFiZWxWYWx1ZUl0ZW1Qcm92aWRlciBjb21tb25Cb3JkZXJSZWxhdGlvbnNoaXBMYWJlbFZhbHVlSXRlbVByb3ZpZGVyOworCisJLyoqCisJICogVGhpcyBjcmVhdGVzIGFuIGFkYXB0ZXIgZm9yIGEge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLkNvbW1vbkJvcmRlclJlbGF0aW9uc2hpcExhYmVsVmFsdWV9LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVDb21tb25Cb3JkZXJSZWxhdGlvbnNoaXBMYWJlbFZhbHVlQWRhcHRlcigpIHsKKwkJaWYgKGNvbW1vbkJvcmRlclJlbGF0aW9uc2hpcExhYmVsVmFsdWVJdGVtUHJvdmlkZXIgPT0gbnVsbCkgeworCQkJY29tbW9uQm9yZGVyUmVsYXRpb25zaGlwTGFiZWxWYWx1ZUl0ZW1Qcm92aWRlciA9IG5ldyBDb21tb25Cb3JkZXJSZWxhdGlvbnNoaXBMYWJlbFZhbHVlSXRlbVByb3ZpZGVyKHRoaXMpOworCQl9CisKKwkJcmV0dXJuIGNvbW1vbkJvcmRlclJlbGF0aW9uc2hpcExhYmVsVmFsdWVJdGVtUHJvdmlkZXI7CisJfQorCisJLyoqCisJICogVGhpcyBrZWVwcyB0cmFjayBvZiB0aGUgb25lIGFkYXB0ZXIgdXNlZCBmb3IgYWxsIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5UcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbH0gaW5zdGFuY2VzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxJdGVtUHJvdmlkZXIgdHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxJdGVtUHJvdmlkZXI7CisKKwkvKioKKwkgKiBUaGlzIGNyZWF0ZXMgYW4gYWRhcHRlciBmb3IgYSB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWx9LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVUcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbEFkYXB0ZXIoKSB7CisJCWlmICh0cmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbEl0ZW1Qcm92aWRlciA9PSBudWxsKSB7CisJCQl0cmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbEl0ZW1Qcm92aWRlciA9IG5ldyBUcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbEl0ZW1Qcm92aWRlcih0aGlzKTsKKwkJfQorCisJCXJldHVybiB0cmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbEl0ZW1Qcm92aWRlcjsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGtlZXBzIHRyYWNrIG9mIHRoZSBvbmUgYWRhcHRlciB1c2VkIGZvciBhbGwge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLlRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsVmFsdWV9IGluc3RhbmNlcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIFRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsVmFsdWVJdGVtUHJvdmlkZXIgdHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxWYWx1ZUl0ZW1Qcm92aWRlcjsKKworCS8qKgorCSAqIFRoaXMgY3JlYXRlcyBhbiBhZGFwdGVyIGZvciBhIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5UcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbFZhbHVlfS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxWYWx1ZUFkYXB0ZXIoKSB7CisJCWlmICh0cmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbFZhbHVlSXRlbVByb3ZpZGVyID09IG51bGwpIHsKKwkJCXRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsVmFsdWVJdGVtUHJvdmlkZXIgPSBuZXcgVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxWYWx1ZUl0ZW1Qcm92aWRlcih0aGlzKTsKKwkJfQorCisJCXJldHVybiB0cmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbFZhbHVlSXRlbVByb3ZpZGVyOworCX0KKworCS8qKgorCSAqIFRoaXMga2VlcHMgdHJhY2sgb2YgdGhlIG9uZSBhZGFwdGVyIHVzZWQgZm9yIGFsbCB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuUGh5c2ljYWxSZWxhdGlvbnNoaXBMYWJlbFZhbHVlfSBpbnN0YW5jZXMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIFBoeXNpY2FsUmVsYXRpb25zaGlwTGFiZWxWYWx1ZUl0ZW1Qcm92aWRlciBwaHlzaWNhbFJlbGF0aW9uc2hpcExhYmVsVmFsdWVJdGVtUHJvdmlkZXI7CisKKwkvKioKKwkgKiBUaGlzIGNyZWF0ZXMgYW4gYWRhcHRlciBmb3IgYSB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuUGh5c2ljYWxSZWxhdGlvbnNoaXBMYWJlbFZhbHVlfS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVQaHlzaWNhbFJlbGF0aW9uc2hpcExhYmVsVmFsdWVBZGFwdGVyKCkgeworCQlpZiAocGh5c2ljYWxSZWxhdGlvbnNoaXBMYWJlbFZhbHVlSXRlbVByb3ZpZGVyID09IG51bGwpIHsKKwkJCXBoeXNpY2FsUmVsYXRpb25zaGlwTGFiZWxWYWx1ZUl0ZW1Qcm92aWRlciA9IG5ldyBQaHlzaWNhbFJlbGF0aW9uc2hpcExhYmVsVmFsdWVJdGVtUHJvdmlkZXIodGhpcyk7CisJCX0KKworCQlyZXR1cm4gcGh5c2ljYWxSZWxhdGlvbnNoaXBMYWJlbFZhbHVlSXRlbVByb3ZpZGVyOworCX0KKworCS8qKgorCSAqIFRoaXMga2VlcHMgdHJhY2sgb2YgdGhlIG9uZSBhZGFwdGVyIHVzZWQgZm9yIGFsbCB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuUm9hZFRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsfSBpbnN0YW5jZXMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIFJvYWRUcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbEl0ZW1Qcm92aWRlciByb2FkVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxJdGVtUHJvdmlkZXI7CisKKwkvKioKKwkgKiBUaGlzIGNyZWF0ZXMgYW4gYWRhcHRlciBmb3IgYSB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuUm9hZFRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsfS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVSb2FkVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxBZGFwdGVyKCkgeworCQlpZiAocm9hZFRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsSXRlbVByb3ZpZGVyID09IG51bGwpIHsKKwkJCXJvYWRUcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbEl0ZW1Qcm92aWRlciA9IG5ldyBSb2FkVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxJdGVtUHJvdmlkZXIodGhpcyk7CisJCX0KKworCQlyZXR1cm4gcm9hZFRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsSXRlbVByb3ZpZGVyOworCX0KKworCS8qKgorCSAqIFRoaXMga2VlcHMgdHJhY2sgb2YgdGhlIG9uZSBhZGFwdGVyIHVzZWQgZm9yIGFsbCB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuUm9hZFRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsVmFsdWV9IGluc3RhbmNlcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgUm9hZFRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsVmFsdWVJdGVtUHJvdmlkZXIgcm9hZFRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsVmFsdWVJdGVtUHJvdmlkZXI7CisKKwkvKioKKwkgKiBUaGlzIGNyZWF0ZXMgYW4gYWRhcHRlciBmb3IgYSB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuUm9hZFRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsVmFsdWV9LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZVJvYWRUcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbFZhbHVlQWRhcHRlcigpIHsKKwkJaWYgKHJvYWRUcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbFZhbHVlSXRlbVByb3ZpZGVyID09IG51bGwpIHsKKwkJCXJvYWRUcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbFZhbHVlSXRlbVByb3ZpZGVyID0gbmV3IFJvYWRUcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbFZhbHVlSXRlbVByb3ZpZGVyKHRoaXMpOworCQl9CisKKwkJcmV0dXJuIHJvYWRUcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbFZhbHVlSXRlbVByb3ZpZGVyOworCX0KKworCS8qKgorCSAqIFRoaXMga2VlcHMgdHJhY2sgb2YgdGhlIG9uZSBhZGFwdGVyIHVzZWQgZm9yIGFsbCB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuRWFydGhTY2llbmNlTGFiZWx9IGluc3RhbmNlcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgRWFydGhTY2llbmNlTGFiZWxJdGVtUHJvdmlkZXIgZWFydGhTY2llbmNlTGFiZWxJdGVtUHJvdmlkZXI7CisKKwkvKioKKwkgKiBUaGlzIGNyZWF0ZXMgYW4gYWRhcHRlciBmb3IgYSB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuRWFydGhTY2llbmNlTGFiZWx9LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZUVhcnRoU2NpZW5jZUxhYmVsQWRhcHRlcigpIHsKKwkJaWYgKGVhcnRoU2NpZW5jZUxhYmVsSXRlbVByb3ZpZGVyID09IG51bGwpIHsKKwkJCWVhcnRoU2NpZW5jZUxhYmVsSXRlbVByb3ZpZGVyID0gbmV3IEVhcnRoU2NpZW5jZUxhYmVsSXRlbVByb3ZpZGVyKHRoaXMpOworCQl9CisKKwkJcmV0dXJuIGVhcnRoU2NpZW5jZUxhYmVsSXRlbVByb3ZpZGVyOworCX0KKworCS8qKgorCSAqIFRoaXMga2VlcHMgdHJhY2sgb2YgdGhlIG9uZSBhZGFwdGVyIHVzZWQgZm9yIGFsbCB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuRWFydGhTY2llbmNlTGFiZWxWYWx1ZX0gaW5zdGFuY2VzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBFYXJ0aFNjaWVuY2VMYWJlbFZhbHVlSXRlbVByb3ZpZGVyIGVhcnRoU2NpZW5jZUxhYmVsVmFsdWVJdGVtUHJvdmlkZXI7CisKKwkvKioKKwkgKiBUaGlzIGNyZWF0ZXMgYW4gYWRhcHRlciBmb3IgYSB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuRWFydGhTY2llbmNlTGFiZWxWYWx1ZX0uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlRWFydGhTY2llbmNlTGFiZWxWYWx1ZUFkYXB0ZXIoKSB7CisJCWlmIChlYXJ0aFNjaWVuY2VMYWJlbFZhbHVlSXRlbVByb3ZpZGVyID09IG51bGwpIHsKKwkJCWVhcnRoU2NpZW5jZUxhYmVsVmFsdWVJdGVtUHJvdmlkZXIgPSBuZXcgRWFydGhTY2llbmNlTGFiZWxWYWx1ZUl0ZW1Qcm92aWRlcih0aGlzKTsKKwkJfQorCisJCXJldHVybiBlYXJ0aFNjaWVuY2VMYWJlbFZhbHVlSXRlbVByb3ZpZGVyOworCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyB0aGUgcm9vdCBhZGFwdGVyIGZhY3RvcnkgdGhhdCBjb250YWlucyB0aGlzIGZhY3RvcnkuIDwhLS0KKwkgKiBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAcmV0dXJuCisJICogCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBDb21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5IGdldFJvb3RBZGFwdGVyRmFjdG9yeSgpIHsKKwkJcmV0dXJuIHBhcmVudEFkYXB0ZXJGYWN0b3J5ID09IG51bGwgPyB0aGlzIDogcGFyZW50QWRhcHRlckZhY3RvcnkuZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCk7CisJfQorCisJLyoqCisJICogVGhpcyBzZXRzIHRoZSBjb21wb3NlZCBhZGFwdGVyIGZhY3RvcnkgdGhhdCBjb250YWlucyB0aGlzIGZhY3RvcnkuIDwhLS0KKwkgKiBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAcGFyYW0gcGFyZW50QWRhcHRlckZhY3RvcnkKKwkgKiAKKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgc2V0UGFyZW50QWRhcHRlckZhY3RvcnkoCisJCQlDb21wb3NlZEFkYXB0ZXJGYWN0b3J5IHBhcmVudEFkYXB0ZXJGYWN0b3J5KSB7CisJCXRoaXMucGFyZW50QWRhcHRlckZhY3RvcnkgPSBwYXJlbnRBZGFwdGVyRmFjdG9yeTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBwYXJhbSB0eXBlCisJICogCisJICogQHJldHVybgorCSAqIAorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgYm9vbGVhbiBpc0ZhY3RvcnlGb3JUeXBlKE9iamVjdCB0eXBlKSB7CisJCXJldHVybiBzdXBwb3J0ZWRUeXBlcy5jb250YWlucyh0eXBlKSB8fCBzdXBlci5pc0ZhY3RvcnlGb3JUeXBlKHR5cGUpOworCX0KKworCS8qKgorCSAqIFRoaXMgaW1wbGVtZW50YXRpb24gc3Vic3RpdHV0ZXMgdGhlIGZhY3RvcnkgaXRzZWxmIGFzIHRoZSBrZXkgZm9yIHRoZSBhZGFwdGVyLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogCisJICogQHBhcmFtIG5vdGlmaWVyCisJICogQHBhcmFtIHR5cGUKKwkgKiAKKwkgKiBAcmV0dXJuCisJICogCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBBZGFwdGVyIGFkYXB0KE5vdGlmaWVyIG5vdGlmaWVyLCBPYmplY3QgdHlwZSkgeworCQlyZXR1cm4gc3VwZXIuYWRhcHQobm90aWZpZXIsIHRoaXMpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogCisJICogQHBhcmFtIG9iamVjdAorCSAqIEBwYXJhbSB0eXBlCisJICogQHJldHVybgorCSAqIAorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgT2JqZWN0IGFkYXB0KE9iamVjdCBvYmplY3QsIE9iamVjdCB0eXBlKSB7CisJCWlmIChpc0ZhY3RvcnlGb3JUeXBlKHR5cGUpKSB7CisJCQlPYmplY3QgYWRhcHRlciA9IHN1cGVyLmFkYXB0KG9iamVjdCwgdHlwZSk7CisJCQlpZiAoISh0eXBlIGluc3RhbmNlb2YgQ2xhc3M8Pz4pIHx8ICgoKENsYXNzPD8+KXR5cGUpLmlzSW5zdGFuY2UoYWRhcHRlcikpKSB7CisJCQkJcmV0dXJuIGFkYXB0ZXI7CisJCQl9CisJCX0KKworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFkZHMgYSBsaXN0ZW5lci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBwYXJhbSBub3RpZnlDaGFuZ2VkTGlzdGVuZXIKKwkgKiAKKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgYWRkTGlzdGVuZXIoSU5vdGlmeUNoYW5nZWRMaXN0ZW5lciBub3RpZnlDaGFuZ2VkTGlzdGVuZXIpIHsKKwkJY2hhbmdlTm90aWZpZXIuYWRkTGlzdGVuZXIobm90aWZ5Q2hhbmdlZExpc3RlbmVyKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHJlbW92ZXMgYSBsaXN0ZW5lci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBwYXJhbSBub3RpZnlDaGFuZ2VkTGlzdGVuZXIKKwkgKiAKKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgcmVtb3ZlTGlzdGVuZXIoSU5vdGlmeUNoYW5nZWRMaXN0ZW5lciBub3RpZnlDaGFuZ2VkTGlzdGVuZXIpIHsKKwkJY2hhbmdlTm90aWZpZXIucmVtb3ZlTGlzdGVuZXIobm90aWZ5Q2hhbmdlZExpc3RlbmVyKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGRlbGVnYXRlcyB0byB7QGxpbmsgI2NoYW5nZU5vdGlmaWVyfSBhbmQgdG8ge0BsaW5rICNwYXJlbnRBZGFwdGVyRmFjdG9yeX0uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAcGFyYW0gbm90aWZpY2F0aW9uCisJICogCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIGZpcmVOb3RpZnlDaGFuZ2VkKE5vdGlmaWNhdGlvbiBub3RpZmljYXRpb24pIHsKKwkJY2hhbmdlTm90aWZpZXIuZmlyZU5vdGlmeUNoYW5nZWQobm90aWZpY2F0aW9uKTsKKworCQlpZiAocGFyZW50QWRhcHRlckZhY3RvcnkgIT0gbnVsbCkgeworCQkJcGFyZW50QWRhcHRlckZhY3RvcnkuZmlyZU5vdGlmeUNoYW5nZWQobm90aWZpY2F0aW9uKTsKKwkJfQorCX0KKworCS8qKgorCSAqIFRoaXMgZGlzcG9zZXMgYWxsIG9mIHRoZSBpdGVtIHByb3ZpZGVycyBjcmVhdGVkIGJ5IHRoaXMgZmFjdG9yeS4gPCEtLQorCSAqIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgZGlzcG9zZSgpIHsKKwkJaWYgKGFyZWFMYWJlbEl0ZW1Qcm92aWRlciAhPSBudWxsKSBhcmVhTGFiZWxJdGVtUHJvdmlkZXIuZGlzcG9zZSgpOworCQlpZiAoYXJlYUxhYmVsVmFsdWVJdGVtUHJvdmlkZXIgIT0gbnVsbCkgYXJlYUxhYmVsVmFsdWVJdGVtUHJvdmlkZXIuZGlzcG9zZSgpOworCQlpZiAoY29tbW9uQm9yZGVyUmVsYXRpb25zaGlwTGFiZWxJdGVtUHJvdmlkZXIgIT0gbnVsbCkgY29tbW9uQm9yZGVyUmVsYXRpb25zaGlwTGFiZWxJdGVtUHJvdmlkZXIuZGlzcG9zZSgpOworCQlpZiAoY29tbW9uQm9yZGVyUmVsYXRpb25zaGlwTGFiZWxWYWx1ZUl0ZW1Qcm92aWRlciAhPSBudWxsKSBjb21tb25Cb3JkZXJSZWxhdGlvbnNoaXBMYWJlbFZhbHVlSXRlbVByb3ZpZGVyLmRpc3Bvc2UoKTsKKwkJaWYgKHBvcHVsYXRpb25MYWJlbEl0ZW1Qcm92aWRlciAhPSBudWxsKSBwb3B1bGF0aW9uTGFiZWxJdGVtUHJvdmlkZXIuZGlzcG9zZSgpOworCQlpZiAocG9wdWxhdGlvbkxhYmVsVmFsdWVJdGVtUHJvdmlkZXIgIT0gbnVsbCkgcG9wdWxhdGlvbkxhYmVsVmFsdWVJdGVtUHJvdmlkZXIuZGlzcG9zZSgpOworCQlpZiAocmVsYXRpdmVQaHlzaWNhbFJlbGF0aW9uc2hpcExhYmVsSXRlbVByb3ZpZGVyICE9IG51bGwpIHJlbGF0aXZlUGh5c2ljYWxSZWxhdGlvbnNoaXBMYWJlbEl0ZW1Qcm92aWRlci5kaXNwb3NlKCk7CisJCWlmIChyZWxhdGl2ZVBoeXNpY2FsUmVsYXRpb25zaGlwTGFiZWxWYWx1ZUl0ZW1Qcm92aWRlciAhPSBudWxsKSByZWxhdGl2ZVBoeXNpY2FsUmVsYXRpb25zaGlwTGFiZWxWYWx1ZUl0ZW1Qcm92aWRlci5kaXNwb3NlKCk7CisJCWlmICh0cmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbEl0ZW1Qcm92aWRlciAhPSBudWxsKSB0cmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbEl0ZW1Qcm92aWRlci5kaXNwb3NlKCk7CisJCWlmICh0cmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbFZhbHVlSXRlbVByb3ZpZGVyICE9IG51bGwpIHRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsVmFsdWVJdGVtUHJvdmlkZXIuZGlzcG9zZSgpOworCQlpZiAocGh5c2ljYWxSZWxhdGlvbnNoaXBMYWJlbFZhbHVlSXRlbVByb3ZpZGVyICE9IG51bGwpIHBoeXNpY2FsUmVsYXRpb25zaGlwTGFiZWxWYWx1ZUl0ZW1Qcm92aWRlci5kaXNwb3NlKCk7CisJCWlmIChyb2FkVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxJdGVtUHJvdmlkZXIgIT0gbnVsbCkgcm9hZFRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsSXRlbVByb3ZpZGVyLmRpc3Bvc2UoKTsKKwkJaWYgKHJvYWRUcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbFZhbHVlSXRlbVByb3ZpZGVyICE9IG51bGwpIHJvYWRUcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbFZhbHVlSXRlbVByb3ZpZGVyLmRpc3Bvc2UoKTsKKwkJaWYgKGVhcnRoU2NpZW5jZUxhYmVsSXRlbVByb3ZpZGVyICE9IG51bGwpIGVhcnRoU2NpZW5jZUxhYmVsSXRlbVByb3ZpZGVyLmRpc3Bvc2UoKTsKKwkJaWYgKGVhcnRoU2NpZW5jZUxhYmVsVmFsdWVJdGVtUHJvdmlkZXIgIT0gbnVsbCkgZWFydGhTY2llbmNlTGFiZWxWYWx1ZUl0ZW1Qcm92aWRlci5kaXNwb3NlKCk7CisJfQorCit9CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvbGFiZWxzL3Byb3ZpZGVyL1BoeXNpY2FsUmVsYXRpb25zaGlwTGFiZWxJdGVtUHJvdmlkZXIuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy9sYWJlbHMvcHJvdmlkZXIvUGh5c2ljYWxSZWxhdGlvbnNoaXBMYWJlbEl0ZW1Qcm92aWRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgxMGY3ZTUKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvbGFiZWxzL3Byb3ZpZGVyL1BoeXNpY2FsUmVsYXRpb25zaGlwTGFiZWxJdGVtUHJvdmlkZXIuamF2YQpAQCAtMCwwICsxLDE0OCBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5wcm92aWRlcjsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LkFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuUmVzb3VyY2VMb2NhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5VUkk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUVkaXRpbmdEb21haW5JdGVtUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1MYWJlbFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtUHJvcGVydHlEZXNjcmlwdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtUHJvcGVydHlTb3VyY2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVN0cnVjdHVyZWRJdGVtQ29udGVudFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklUcmVlSXRlbUNvbnRlbnRQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguRWRnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguRWRnZUxhYmVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5wcm92aWRlci5TdGF0aWNFZGdlTGFiZWxJdGVtUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5lZGdlcy5wcm92aWRlci5EZWZpbml0aW9uc0VkaXRQbHVnaW47CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS5HZW9ncmFwaGljTmFtZXM7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuUGh5c2ljYWxSZWxhdGlvbnNoaXBMYWJlbDsKKworLyoqCisgKiBUaGlzIGlzIHRoZSBpdGVtIHByb3ZpZGVyIGFkYXB0ZXIgZm9yIGEge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLlBoeXNpY2FsUmVsYXRpb25zaGlwTGFiZWx9IG9iamVjdC4KKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgUGh5c2ljYWxSZWxhdGlvbnNoaXBMYWJlbEl0ZW1Qcm92aWRlciBleHRlbmRzIFN0YXRpY0VkZ2VMYWJlbEl0ZW1Qcm92aWRlcgorCQlpbXBsZW1lbnRzIElFZGl0aW5nRG9tYWluSXRlbVByb3ZpZGVyLCBJU3RydWN0dXJlZEl0ZW1Db250ZW50UHJvdmlkZXIsCisJCUlUcmVlSXRlbUNvbnRlbnRQcm92aWRlciwgSUl0ZW1MYWJlbFByb3ZpZGVyLCBJSXRlbVByb3BlcnR5U291cmNlIHsKKwkvKioKKwkgKiBUaGlzIGNvbnN0cnVjdHMgYW4gaW5zdGFuY2UgZnJvbSBhIGZhY3RvcnkgYW5kIGEgbm90aWZpZXIuIDwhLS0KKwkgKiBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBQaHlzaWNhbFJlbGF0aW9uc2hpcExhYmVsSXRlbVByb3ZpZGVyKEFkYXB0ZXJGYWN0b3J5IGFkYXB0ZXJGYWN0b3J5KSB7CisJCXN1cGVyKGFkYXB0ZXJGYWN0b3J5KTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgdGhlIHByb3BlcnR5IGRlc2NyaXB0b3JzIGZvciB0aGUgYWRhcHRlZCBjbGFzcy4gPCEtLQorCSAqIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIExpc3Q8SUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I+IGdldFByb3BlcnR5RGVzY3JpcHRvcnMoT2JqZWN0IG9iamVjdCkgeworCQlpZiAoaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMgPT0gbnVsbCkgeworCQkJc3VwZXIuZ2V0UHJvcGVydHlEZXNjcmlwdG9ycyhvYmplY3QpOworCisJCX0KKwkJcmV0dXJuIGl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzOworCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyB0aGUgbGFiZWwgdGV4dCBmb3IgdGhlIGFkYXB0ZWQgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYworCSAqIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBTdHJpbmcgZ2V0VGV4dChPYmplY3Qgb2JqZWN0KSB7CisJCWZpbmFsIFVSSSBsYWJlbFVSSSA9ICgoUGh5c2ljYWxSZWxhdGlvbnNoaXBMYWJlbCkgb2JqZWN0KS5nZXRVUkkoKTsKKwkJZmluYWwgU3RyaW5nIGxhc3RTZWdtZW50ID0gbGFiZWxVUkkKKwkJCQkuc2VnbWVudChsYWJlbFVSSS5zZWdtZW50Q291bnQoKSAtIDIpLnRvU3RyaW5nKCk7CisJCWZpbmFsIGludCBpID0gbGFzdFNlZ21lbnQuaW5kZXhPZigiXyIpOworCQlmaW5hbCBTdHJpbmcgZmlyc3RJU09LZXkgPSBsYXN0U2VnbWVudC5zdWJzdHJpbmcoMCwgaSk7CisJCWZpbmFsIFN0cmluZyBzZWNvbmRJU09LZXkgPSBsYXN0U2VnbWVudC5zdWJzdHJpbmcoaSArIDEpOworCisJCWZpbmFsIFN0cmluZyBmaXJzdEdlb05hbWUgPSBHZW9ncmFwaGljTmFtZXMuZ2V0TmFtZShmaXJzdElTT0tleSk7CisJCWZpbmFsIFN0cmluZyBzZWNvbmRHZW9OYW1lID0gR2VvZ3JhcGhpY05hbWVzLmdldE5hbWUoc2Vjb25kSVNPS2V5KTsKKworCQlmaW5hbCBTdHJpbmdCdWlsZGVyIHNiID0gbmV3IFN0cmluZ0J1aWxkZXIoCisJCQkJZmlyc3RHZW9OYW1lLnN0YXJ0c1dpdGgoIiEiKSA/IGZpcnN0SVNPS2V5IDogZmlyc3RHZW9OYW1lKTsKKwkJZmluYWwgRWRnZSBlZGdlID0gKChFZGdlTGFiZWwpIG9iamVjdCkuZ2V0RWRnZSgpOworCQlzYi5hcHBlbmQoZWRnZS5pc0RpcmVjdGVkKCkgPyAiIC0+ICIgOiAiIDwtPiAiKTsKKwkJLy8gRmluZCBCdWdzIGlkZW50aWZpZWQgYXMgZXJyb3IuICBzZWNvbmRHZW9OYW1lIHdhcyB1c2VkIAorCQkvLyBmb3IgYm90aCBjb25kaXRpb25zIG9mZiB0aGUgdGVybmFyeQorCQlzYi5hcHBlbmQoc2Vjb25kR2VvTmFtZS5zdGFydHNXaXRoKCIhIikgPyBzZWNvbmRJU09LZXkKKwkJCQkJCTogc2Vjb25kR2VvTmFtZSk7CisKKwkJcmV0dXJuIHNiLnRvU3RyaW5nKCk7CisJfSAvLyBnZXRUZXh0CisJCisJLyoqCisJICogVGhpcyByZXR1cm5zIHRoZSBsYWJlbCB0ZXh0IGZvciB0aGUgYWRhcHRlZCBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jCisJICogLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgU3RyaW5nIGdldFRleHRHZW4oT2JqZWN0IG9iamVjdCkgeworCQlVUkkgbGFiZWxWYWx1ZSA9ICgoUGh5c2ljYWxSZWxhdGlvbnNoaXBMYWJlbClvYmplY3QpLmdldFVSSSgpOworCQlTdHJpbmcgbGFiZWwgPSBsYWJlbFZhbHVlID09IG51bGwgPyBudWxsIDogbGFiZWxWYWx1ZS50b1N0cmluZygpOworCQlyZXR1cm4gbGFiZWwgPT0gbnVsbCB8fCBsYWJlbC5sZW5ndGgoKSA9PSAwID8KKwkJCWdldFN0cmluZygiX1VJX1BoeXNpY2FsUmVsYXRpb25zaGlwTGFiZWxfdHlwZSIpIDogLy8kTk9OLU5MUy0xJAorCQkJZ2V0U3RyaW5nKCJfVUlfUGh5c2ljYWxSZWxhdGlvbnNoaXBMYWJlbF90eXBlIikgKyAiICIgKyBsYWJlbDsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCisJfQorCQorCS8qKgorCSAqIFRoaXMgaGFuZGxlcyBtb2RlbCBub3RpZmljYXRpb25zIGJ5IGNhbGxpbmcge0BsaW5rICN1cGRhdGVDaGlsZHJlbn0gdG8gdXBkYXRlIGFueSBjYWNoZWQKKwkgKiBjaGlsZHJlbiBhbmQgYnkgY3JlYXRpbmcgYSB2aWV3ZXIgbm90aWZpY2F0aW9uLCB3aGljaCBpdCBwYXNzZXMgdG8ge0BsaW5rICNmaXJlTm90aWZ5Q2hhbmdlZH0uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLQorCSAqIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgbm90aWZ5Q2hhbmdlZChOb3RpZmljYXRpb24gbm90aWZpY2F0aW9uKSB7CisJCXVwZGF0ZUNoaWxkcmVuKG5vdGlmaWNhdGlvbik7CisJCXN1cGVyLm5vdGlmeUNoYW5nZWQobm90aWZpY2F0aW9uKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFkZHMge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lZGl0LmNvbW1hbmQuQ29tbWFuZFBhcmFtZXRlcn1zIGRlc2NyaWJpbmcgdGhlIGNoaWxkcmVuCisJICogdGhhdCBjYW4gYmUgY3JlYXRlZCB1bmRlciB0aGlzIG9iamVjdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jCisJICogLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgdm9pZCBjb2xsZWN0TmV3Q2hpbGREZXNjcmlwdG9ycyhDb2xsZWN0aW9uPE9iamVjdD4gbmV3Q2hpbGREZXNjcmlwdG9ycywgT2JqZWN0IG9iamVjdCkgeworCQlzdXBlci5jb2xsZWN0TmV3Q2hpbGREZXNjcmlwdG9ycyhuZXdDaGlsZERlc2NyaXB0b3JzLCBvYmplY3QpOworCX0KKworCS8qKgorCSAqIFJldHVybiB0aGUgcmVzb3VyY2UgbG9jYXRvciBmb3IgdGhpcyBpdGVtIHByb3ZpZGVyJ3MgcmVzb3VyY2VzLiA8IS0tCisJICogYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgUmVzb3VyY2VMb2NhdG9yIGdldFJlc291cmNlTG9jYXRvcigpIHsKKwkJcmV0dXJuIERlZmluaXRpb25zRWRpdFBsdWdpbi5JTlNUQU5DRTsKKwl9CisKK30KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy9sYWJlbHMvcHJvdmlkZXIvUGh5c2ljYWxSZWxhdGlvbnNoaXBMYWJlbFZhbHVlSXRlbVByb3ZpZGVyLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvbGFiZWxzL3Byb3ZpZGVyL1BoeXNpY2FsUmVsYXRpb25zaGlwTGFiZWxWYWx1ZUl0ZW1Qcm92aWRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc1M2Y4ZmEKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvbGFiZWxzL3Byb3ZpZGVyL1BoeXNpY2FsUmVsYXRpb25zaGlwTGFiZWxWYWx1ZUl0ZW1Qcm92aWRlci5qYXZhCkBAIC0wLDAgKzEsMTE2IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLnByb3ZpZGVyOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCitpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5BZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlJlc291cmNlTG9jYXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JRWRpdGluZ0RvbWFpbkl0ZW1Qcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbUxhYmVsUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1Qcm9wZXJ0eVNvdXJjZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JU3RydWN0dXJlZEl0ZW1Db250ZW50UHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVRyZWVJdGVtQ29udGVudFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5wcm92aWRlci5MYWJlbFZhbHVlSXRlbVByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuZWRnZXMucHJvdmlkZXIuRGVmaW5pdGlvbnNFZGl0UGx1Z2luOworCisvKioKKyAqIFRoaXMgaXMgdGhlIGl0ZW0gcHJvdmlkZXIgYWRhcHRlciBmb3IgYSB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuUGh5c2ljYWxSZWxhdGlvbnNoaXBMYWJlbFZhbHVlfSBvYmplY3QuCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBQaHlzaWNhbFJlbGF0aW9uc2hpcExhYmVsVmFsdWVJdGVtUHJvdmlkZXIKKwlleHRlbmRzIExhYmVsVmFsdWVJdGVtUHJvdmlkZXIKKwlpbXBsZW1lbnRzCQorCQlJRWRpdGluZ0RvbWFpbkl0ZW1Qcm92aWRlciwJCisJCUlTdHJ1Y3R1cmVkSXRlbUNvbnRlbnRQcm92aWRlciwJCisJCUlUcmVlSXRlbUNvbnRlbnRQcm92aWRlciwJCisJCUlJdGVtTGFiZWxQcm92aWRlciwJCisJCUlJdGVtUHJvcGVydHlTb3VyY2UgeworCS8qKgorCSAqIFRoaXMgY29uc3RydWN0cyBhbiBpbnN0YW5jZSBmcm9tIGEgZmFjdG9yeSBhbmQgYSBub3RpZmllci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgUGh5c2ljYWxSZWxhdGlvbnNoaXBMYWJlbFZhbHVlSXRlbVByb3ZpZGVyKEFkYXB0ZXJGYWN0b3J5IGFkYXB0ZXJGYWN0b3J5KSB7CisJCXN1cGVyKGFkYXB0ZXJGYWN0b3J5KTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgdGhlIHByb3BlcnR5IGRlc2NyaXB0b3JzIGZvciB0aGUgYWRhcHRlZCBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgTGlzdDxJSXRlbVByb3BlcnR5RGVzY3JpcHRvcj4gZ2V0UHJvcGVydHlEZXNjcmlwdG9ycyhPYmplY3Qgb2JqZWN0KSB7CisJCWlmIChpdGVtUHJvcGVydHlEZXNjcmlwdG9ycyA9PSBudWxsKSB7CisJCQlzdXBlci5nZXRQcm9wZXJ0eURlc2NyaXB0b3JzKG9iamVjdCk7CisKKwkJfQorCQlyZXR1cm4gaXRlbVByb3BlcnR5RGVzY3JpcHRvcnM7CisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIHRoZSBsYWJlbCB0ZXh0IGZvciB0aGUgYWRhcHRlZCBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgU3RyaW5nIGdldFRleHQoT2JqZWN0IG9iamVjdCkgeworCQlyZXR1cm4gZ2V0U3RyaW5nKCJfVUlfUGh5c2ljYWxSZWxhdGlvbnNoaXBMYWJlbFZhbHVlX3R5cGUiKTsgLy8kTk9OLU5MUy0xJAorCX0KKworCS8qKgorCSAqIFRoaXMgaGFuZGxlcyBtb2RlbCBub3RpZmljYXRpb25zIGJ5IGNhbGxpbmcge0BsaW5rICN1cGRhdGVDaGlsZHJlbn0gdG8gdXBkYXRlIGFueSBjYWNoZWQKKwkgKiBjaGlsZHJlbiBhbmQgYnkgY3JlYXRpbmcgYSB2aWV3ZXIgbm90aWZpY2F0aW9uLCB3aGljaCBpdCBwYXNzZXMgdG8ge0BsaW5rICNmaXJlTm90aWZ5Q2hhbmdlZH0uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgbm90aWZ5Q2hhbmdlZChOb3RpZmljYXRpb24gbm90aWZpY2F0aW9uKSB7CisJCXVwZGF0ZUNoaWxkcmVuKG5vdGlmaWNhdGlvbik7CisJCXN1cGVyLm5vdGlmeUNoYW5nZWQobm90aWZpY2F0aW9uKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFkZHMge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lZGl0LmNvbW1hbmQuQ29tbWFuZFBhcmFtZXRlcn1zIGRlc2NyaWJpbmcgdGhlIGNoaWxkcmVuCisJICogdGhhdCBjYW4gYmUgY3JlYXRlZCB1bmRlciB0aGlzIG9iamVjdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgdm9pZCBjb2xsZWN0TmV3Q2hpbGREZXNjcmlwdG9ycyhDb2xsZWN0aW9uPE9iamVjdD4gbmV3Q2hpbGREZXNjcmlwdG9ycywgT2JqZWN0IG9iamVjdCkgeworCQlzdXBlci5jb2xsZWN0TmV3Q2hpbGREZXNjcmlwdG9ycyhuZXdDaGlsZERlc2NyaXB0b3JzLCBvYmplY3QpOworCX0KKworCS8qKgorCSAqIFJldHVybiB0aGUgcmVzb3VyY2UgbG9jYXRvciBmb3IgdGhpcyBpdGVtIHByb3ZpZGVyJ3MgcmVzb3VyY2VzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBSZXNvdXJjZUxvY2F0b3IgZ2V0UmVzb3VyY2VMb2NhdG9yKCkgeworCQlyZXR1cm4gRGVmaW5pdGlvbnNFZGl0UGx1Z2luLklOU1RBTkNFOworCX0KKworfQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL2xhYmVscy9wcm92aWRlci9Qb3B1bGF0aW9uTGFiZWxJdGVtUHJvdmlkZXIuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy9sYWJlbHMvcHJvdmlkZXIvUG9wdWxhdGlvbkxhYmVsSXRlbVByb3ZpZGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2Y2NjRjOAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy9sYWJlbHMvcHJvdmlkZXIvUG9wdWxhdGlvbkxhYmVsSXRlbVByb3ZpZGVyLmphdmEKQEAgLTAsMCArMSwyODcgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMucHJvdmlkZXI7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5BZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlJlc291cmNlTG9jYXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5Db21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklFZGl0aW5nRG9tYWluSXRlbVByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtTGFiZWxQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbVByb3BlcnR5RGVzY3JpcHRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbVByb3BlcnR5U291cmNlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklTdHJ1Y3R1cmVkSXRlbUNvbnRlbnRQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JVHJlZUl0ZW1Db250ZW50UHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSXRlbVByb3BlcnR5RGVzY3JpcHRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5WaWV3ZXJOb3RpZmljYXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLnByb3ZpZGVyLlN0YXRpY05vZGVMYWJlbEl0ZW1Qcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmVkZ2VzLnByb3ZpZGVyLkRlZmluaXRpb25zRWRpdFBsdWdpbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5Lkdlb2dyYXBoaWNOYW1lczsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5MYWJlbHNQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLlBvcHVsYXRpb25MYWJlbDsKKworLyoqCisgKiBUaGlzIGlzIHRoZSBpdGVtIHByb3ZpZGVyIGFkYXB0ZXIgZm9yIGEKKyAqIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5Qb3B1bGF0aW9uTGFiZWx9IG9iamVjdC4gPCEtLQorICogYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogCisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBQb3B1bGF0aW9uTGFiZWxJdGVtUHJvdmlkZXIgZXh0ZW5kcyBTdGF0aWNOb2RlTGFiZWxJdGVtUHJvdmlkZXIKKwkJaW1wbGVtZW50cyBJRWRpdGluZ0RvbWFpbkl0ZW1Qcm92aWRlciwgSVN0cnVjdHVyZWRJdGVtQ29udGVudFByb3ZpZGVyLAorCQlJVHJlZUl0ZW1Db250ZW50UHJvdmlkZXIsIElJdGVtTGFiZWxQcm92aWRlciwgSUl0ZW1Qcm9wZXJ0eVNvdXJjZSB7CisJLyoqCisJICogVGhpcyBjb25zdHJ1Y3RzIGFuIGluc3RhbmNlIGZyb20gYSBmYWN0b3J5IGFuZCBhIG5vdGlmaWVyLiA8IS0tCisJICogYmVnaW4tdXNlci1kb2MgLS0+CisJICogCisJICogQHBhcmFtIGFkYXB0ZXJGYWN0b3J5CisJICogCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBQb3B1bGF0aW9uTGFiZWxJdGVtUHJvdmlkZXIoQWRhcHRlckZhY3RvcnkgYWRhcHRlckZhY3RvcnkpIHsKKwkJc3VwZXIoYWRhcHRlckZhY3RvcnkpOworCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyB0aGUgcHJvcGVydHkgZGVzY3JpcHRvcnMgZm9yIHRoZSBhZGFwdGVkIGNsYXNzLiA8IS0tCisJICogYmVnaW4tdXNlci1kb2MgLS0+CisJICogCisJICogQHBhcmFtIG9iamVjdAorCSAqIEByZXR1cm4KKwkgKiAKKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIExpc3Q8SUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I+IGdldFByb3BlcnR5RGVzY3JpcHRvcnMoT2JqZWN0IG9iamVjdCkgeworCQlpZiAoaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMgPT0gbnVsbCkgeworCQkJc3VwZXIuZ2V0UHJvcGVydHlEZXNjcmlwdG9ycyhvYmplY3QpOworCisJCQlhZGRQb3B1bGF0aW9uSWRlbnRpZmllclByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QpOworCQkJYWRkTmFtZVByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QpOworCQkJYWRkQ3VycmVudFBvcHVsYXRpb25WYWx1ZVByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QpOworCQkJYWRkUG9wdWxhdGVkQXJlYVByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QpOworCQkJYWRkVmFsaWRZZWFyUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCk7CisJCX0KKwkJcmV0dXJuIGl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzOworCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyBhIHByb3BlcnR5IGRlc2NyaXB0b3IgZm9yIHRoZSBQb3B1bGF0aW9uIElkZW50aWZpZXIgZmVhdHVyZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgYWRkUG9wdWxhdGlvbklkZW50aWZpZXJQcm9wZXJ0eURlc2NyaXB0b3IoT2JqZWN0IG9iamVjdCkgeworCQlpdGVtUHJvcGVydHlEZXNjcmlwdG9ycy5hZGQKKwkJCShjcmVhdGVJdGVtUHJvcGVydHlEZXNjcmlwdG9yCisJCQkJKCgoQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSlhZGFwdGVyRmFjdG9yeSkuZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCksCisJCQkJIGdldFJlc291cmNlTG9jYXRvcigpLAorCQkJCSBnZXRTdHJpbmcoIl9VSV9Qb3B1bGF0aW9uTGFiZWxfcG9wdWxhdGlvbklkZW50aWZpZXJfZmVhdHVyZSIpLCAvLyROT04tTkxTLTEkCisJCQkJIGdldFN0cmluZygiX1VJX1Byb3BlcnR5RGVzY3JpcHRvcl9kZXNjcmlwdGlvbiIsICJfVUlfUG9wdWxhdGlvbkxhYmVsX3BvcHVsYXRpb25JZGVudGlmaWVyX2ZlYXR1cmUiLCAiX1VJX1BvcHVsYXRpb25MYWJlbF90eXBlIiksIC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJCAvLyROT04tTkxTLTMkCisJCQkJIExhYmVsc1BhY2thZ2UuTGl0ZXJhbHMuUE9QVUxBVElPTl9MQUJFTF9fUE9QVUxBVElPTl9JREVOVElGSUVSLAorCQkJCSB0cnVlLAorCQkJCSBmYWxzZSwKKwkJCQkgZmFsc2UsCisJCQkJIEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IuR0VORVJJQ19WQUxVRV9JTUFHRSwKKwkJCQkgbnVsbCwKKwkJCQkgbnVsbCkpOworCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyBhIHByb3BlcnR5IGRlc2NyaXB0b3IgZm9yIHRoZSBOYW1lIGZlYXR1cmUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYworCSAqIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgYWRkTmFtZVByb3BlcnR5RGVzY3JpcHRvcihPYmplY3Qgb2JqZWN0KSB7CisJCWl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzLmFkZAorCQkJKGNyZWF0ZUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IKKwkJCQkoKChDb21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5KWFkYXB0ZXJGYWN0b3J5KS5nZXRSb290QWRhcHRlckZhY3RvcnkoKSwKKwkJCQkgZ2V0UmVzb3VyY2VMb2NhdG9yKCksCisJCQkJIGdldFN0cmluZygiX1VJX1BvcHVsYXRpb25MYWJlbF9uYW1lX2ZlYXR1cmUiKSwgLy8kTk9OLU5MUy0xJAorCQkJCSBnZXRTdHJpbmcoIl9VSV9Qcm9wZXJ0eURlc2NyaXB0b3JfZGVzY3JpcHRpb24iLCAiX1VJX1BvcHVsYXRpb25MYWJlbF9uYW1lX2ZlYXR1cmUiLCAiX1VJX1BvcHVsYXRpb25MYWJlbF90eXBlIiksIC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJCAvLyROT04tTkxTLTMkCisJCQkJIExhYmVsc1BhY2thZ2UuTGl0ZXJhbHMuUE9QVUxBVElPTl9MQUJFTF9fTkFNRSwKKwkJCQkgdHJ1ZSwKKwkJCQkgZmFsc2UsCisJCQkJIGZhbHNlLAorCQkJCSBJdGVtUHJvcGVydHlEZXNjcmlwdG9yLkdFTkVSSUNfVkFMVUVfSU1BR0UsCisJCQkJIG51bGwsCisJCQkJIG51bGwpKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFkZHMgYSBwcm9wZXJ0eSBkZXNjcmlwdG9yIGZvciB0aGUgQ3VycmVudCBQb3B1bGF0aW9uIFZhbHVlIGZlYXR1cmUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIGFkZEN1cnJlbnRQb3B1bGF0aW9uVmFsdWVQcm9wZXJ0eURlc2NyaXB0b3IoT2JqZWN0IG9iamVjdCkgeworCQlpdGVtUHJvcGVydHlEZXNjcmlwdG9ycy5hZGQKKwkJCShjcmVhdGVJdGVtUHJvcGVydHlEZXNjcmlwdG9yCisJCQkJKCgoQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSlhZGFwdGVyRmFjdG9yeSkuZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCksCisJCQkJIGdldFJlc291cmNlTG9jYXRvcigpLAorCQkJCSBnZXRTdHJpbmcoIl9VSV9Qb3B1bGF0aW9uTGFiZWxfY3VycmVudFBvcHVsYXRpb25WYWx1ZV9mZWF0dXJlIiksIC8vJE5PTi1OTFMtMSQKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfUHJvcGVydHlEZXNjcmlwdG9yX2Rlc2NyaXB0aW9uIiwgIl9VSV9Qb3B1bGF0aW9uTGFiZWxfY3VycmVudFBvcHVsYXRpb25WYWx1ZV9mZWF0dXJlIiwgIl9VSV9Qb3B1bGF0aW9uTGFiZWxfdHlwZSIpLCAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQgLy8kTk9OLU5MUy0zJAorCQkJCSBMYWJlbHNQYWNrYWdlLkxpdGVyYWxzLlBPUFVMQVRJT05fTEFCRUxfX0NVUlJFTlRfUE9QVUxBVElPTl9WQUxVRSwKKwkJCQkgZmFsc2UsCisJCQkJIGZhbHNlLAorCQkJCSBmYWxzZSwKKwkJCQkgbnVsbCwKKwkJCQkgbnVsbCwKKwkJCQkgbnVsbCkpOworCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyBhIHByb3BlcnR5IGRlc2NyaXB0b3IgZm9yIHRoZSBQb3B1bGF0ZWQgQXJlYSBmZWF0dXJlLiA8IS0tCisJICogYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBhZGRQb3B1bGF0ZWRBcmVhUHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdCBvYmplY3QpIHsKKwkJaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMuYWRkCisJCQkoY3JlYXRlSXRlbVByb3BlcnR5RGVzY3JpcHRvcgorCQkJCSgoKENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnkpYWRhcHRlckZhY3RvcnkpLmdldFJvb3RBZGFwdGVyRmFjdG9yeSgpLAorCQkJCSBnZXRSZXNvdXJjZUxvY2F0b3IoKSwKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfUG9wdWxhdGlvbkxhYmVsX3BvcHVsYXRlZEFyZWFfZmVhdHVyZSIpLCAvLyROT04tTkxTLTEkCisJCQkJIGdldFN0cmluZygiX1VJX1Byb3BlcnR5RGVzY3JpcHRvcl9kZXNjcmlwdGlvbiIsICJfVUlfUG9wdWxhdGlvbkxhYmVsX3BvcHVsYXRlZEFyZWFfZmVhdHVyZSIsICJfVUlfUG9wdWxhdGlvbkxhYmVsX3R5cGUiKSwgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkIC8vJE5PTi1OTFMtMyQKKwkJCQkgTGFiZWxzUGFja2FnZS5MaXRlcmFscy5QT1BVTEFUSU9OX0xBQkVMX19QT1BVTEFURURfQVJFQSwKKwkJCQkgdHJ1ZSwKKwkJCQkgZmFsc2UsCisJCQkJIGZhbHNlLAorCQkJCSBJdGVtUHJvcGVydHlEZXNjcmlwdG9yLlJFQUxfVkFMVUVfSU1BR0UsCisJCQkJIG51bGwsCisJCQkJIG51bGwpKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFkZHMgYSBwcm9wZXJ0eSBkZXNjcmlwdG9yIGZvciB0aGUgVmFsaWQgWWVhciBmZWF0dXJlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIGFkZFZhbGlkWWVhclByb3BlcnR5RGVzY3JpcHRvcihPYmplY3Qgb2JqZWN0KSB7CisJCWl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzLmFkZAorCQkJKGNyZWF0ZUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IKKwkJCQkoKChDb21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5KWFkYXB0ZXJGYWN0b3J5KS5nZXRSb290QWRhcHRlckZhY3RvcnkoKSwKKwkJCQkgZ2V0UmVzb3VyY2VMb2NhdG9yKCksCisJCQkJIGdldFN0cmluZygiX1VJX1BvcHVsYXRpb25MYWJlbF92YWxpZFllYXJfZmVhdHVyZSIpLCAvLyROT04tTkxTLTEkCisJCQkJIGdldFN0cmluZygiX1VJX1Byb3BlcnR5RGVzY3JpcHRvcl9kZXNjcmlwdGlvbiIsICJfVUlfUG9wdWxhdGlvbkxhYmVsX3ZhbGlkWWVhcl9mZWF0dXJlIiwgIl9VSV9Qb3B1bGF0aW9uTGFiZWxfdHlwZSIpLCAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQgLy8kTk9OLU5MUy0zJAorCQkJCSBMYWJlbHNQYWNrYWdlLkxpdGVyYWxzLlBPUFVMQVRJT05fTEFCRUxfX1ZBTElEX1lFQVIsCisJCQkJIHRydWUsCisJCQkJIGZhbHNlLAorCQkJCSBmYWxzZSwKKwkJCQkgSXRlbVByb3BlcnR5RGVzY3JpcHRvci5JTlRFR1JBTF9WQUxVRV9JTUFHRSwKKwkJCQkgbnVsbCwKKwkJCQkgbnVsbCkpOworCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyB0aGUgbGFiZWwgdGV4dCBmb3IgdGhlIGFkYXB0ZWQgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYworCSAqIC0tPgorCSAqIAorCSAqIEBwYXJhbSBvYmplY3QKKwkgKiBAcmV0dXJuCisJICogCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgU3RyaW5nIGdldFRleHQoT2JqZWN0IG9iamVjdCkgeworCQlmaW5hbCBTdHJpbmdCdWlsZGVyIHNiID0gbmV3IFN0cmluZ0J1aWxkZXIoKTsKKwkJZmluYWwgUG9wdWxhdGlvbkxhYmVsIHBvcHVsYXRpb25MYWJlbCA9IChQb3B1bGF0aW9uTGFiZWwpIG9iamVjdDsKKworCQlzYi5hcHBlbmQoR2VvZ3JhcGhpY05hbWVzLmdldE5hbWUocG9wdWxhdGlvbkxhYmVsCisJCQkJLmdldFVSSU9mSWRlbnRpZmlhYmxlVG9CZUxhYmVsZWQoKSkpOworCQlzYi5hcHBlbmQoIiwgXCIiKTsKKwkJc2IuYXBwZW5kKHBvcHVsYXRpb25MYWJlbC5nZXRQb3B1bGF0aW9uSWRlbnRpZmllcigpKTsKKwkJc2IuYXBwZW5kKCJcIiBwb3B1bGF0aW9uOiAiKTsKKwkJc2IuYXBwZW5kKChpbnQpIHBvcHVsYXRpb25MYWJlbC5nZXRDdXJyZW50UG9wdWxhdGlvblZhbHVlKCkuZ2V0Q291bnQoKSk7CisJCXNiLmFwcGVuZChwb3B1bGF0aW9uTGFiZWwuZ2V0UG9wdWxhdGVkQXJlYSgpID09IDAuMCA/ICIiIDogKCIgKCIKKwkJCQkrIHBvcHVsYXRpb25MYWJlbC5nZXRQb3B1bGF0ZWRBcmVhKCkgKyAiIGttXjIpIikpOworCisJCXJldHVybiBzYi50b1N0cmluZygpOworCX0gLy8gZ2V0VGV4dAorCisJLyoqCisJICogVGhpcyByZXR1cm5zIHRoZSBsYWJlbCB0ZXh0IGZvciB0aGUgYWRhcHRlZCBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBwYXJhbSBvYmplY3QKKwkgKiBAcmV0dXJuCisJICogCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBTdHJpbmcgZ2V0VGV4dEdlbihPYmplY3Qgb2JqZWN0KSB7CisJCVN0cmluZyBsYWJlbCA9ICgoUG9wdWxhdGlvbkxhYmVsKW9iamVjdCkuZ2V0TmFtZSgpOworCQlyZXR1cm4gbGFiZWwgPT0gbnVsbCB8fCBsYWJlbC5sZW5ndGgoKSA9PSAwID8KKwkJCWdldFN0cmluZygiX1VJX1BvcHVsYXRpb25MYWJlbF90eXBlIikgOiAvLyROT04tTkxTLTEkCisJCQlnZXRTdHJpbmcoIl9VSV9Qb3B1bGF0aW9uTGFiZWxfdHlwZSIpICsgIiAiICsgbGFiZWw7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAorCX0KKwkKKwkvKioKKwkgKiBUaGlzIGhhbmRsZXMgbW9kZWwgbm90aWZpY2F0aW9ucyBieSBjYWxsaW5nIHtAbGluayAjdXBkYXRlQ2hpbGRyZW59IHRvIHVwZGF0ZSBhbnkgY2FjaGVkCisJICogY2hpbGRyZW4gYW5kIGJ5IGNyZWF0aW5nIGEgdmlld2VyIG5vdGlmaWNhdGlvbiwgd2hpY2ggaXQgcGFzc2VzIHRvIHtAbGluayAjZmlyZU5vdGlmeUNoYW5nZWR9LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogCisJICogQHBhcmFtIG5vdGlmaWNhdGlvbgorCSAqIAorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBub3RpZnlDaGFuZ2VkKE5vdGlmaWNhdGlvbiBub3RpZmljYXRpb24pIHsKKwkJdXBkYXRlQ2hpbGRyZW4obm90aWZpY2F0aW9uKTsKKworCQlzd2l0Y2ggKG5vdGlmaWNhdGlvbi5nZXRGZWF0dXJlSUQoUG9wdWxhdGlvbkxhYmVsLmNsYXNzKSkgeworCQkJY2FzZSBMYWJlbHNQYWNrYWdlLlBPUFVMQVRJT05fTEFCRUxfX1BPUFVMQVRJT05fSURFTlRJRklFUjoKKwkJCWNhc2UgTGFiZWxzUGFja2FnZS5QT1BVTEFUSU9OX0xBQkVMX19OQU1FOgorCQkJY2FzZSBMYWJlbHNQYWNrYWdlLlBPUFVMQVRJT05fTEFCRUxfX1BPUFVMQVRFRF9BUkVBOgorCQkJY2FzZSBMYWJlbHNQYWNrYWdlLlBPUFVMQVRJT05fTEFCRUxfX1ZBTElEX1lFQVI6CisJCQkJZmlyZU5vdGlmeUNoYW5nZWQobmV3IFZpZXdlck5vdGlmaWNhdGlvbihub3RpZmljYXRpb24sIG5vdGlmaWNhdGlvbi5nZXROb3RpZmllcigpLCBmYWxzZSwgdHJ1ZSkpOworCQkJCXJldHVybjsKKwkJfQorCQlzdXBlci5ub3RpZnlDaGFuZ2VkKG5vdGlmaWNhdGlvbik7CisJfQorCisJLyoqCisJICogVGhpcyBhZGRzIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuZWRpdC5jb21tYW5kLkNvbW1hbmRQYXJhbWV0ZXJ9cyBkZXNjcmliaW5nIHRoZSBjaGlsZHJlbgorCSAqIHRoYXQgY2FuIGJlIGNyZWF0ZWQgdW5kZXIgdGhpcyBvYmplY3QuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYworCSAqIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgY29sbGVjdE5ld0NoaWxkRGVzY3JpcHRvcnMoQ29sbGVjdGlvbjxPYmplY3Q+IG5ld0NoaWxkRGVzY3JpcHRvcnMsIE9iamVjdCBvYmplY3QpIHsKKwkJc3VwZXIuY29sbGVjdE5ld0NoaWxkRGVzY3JpcHRvcnMobmV3Q2hpbGREZXNjcmlwdG9ycywgb2JqZWN0KTsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm4gdGhlIHJlc291cmNlIGxvY2F0b3IgZm9yIHRoaXMgaXRlbSBwcm92aWRlcidzIHJlc291cmNlcy4gPCEtLQorCSAqIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEByZXR1cm4KKwkgKiAKKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIFJlc291cmNlTG9jYXRvciBnZXRSZXNvdXJjZUxvY2F0b3IoKSB7CisJCXJldHVybiBEZWZpbml0aW9uc0VkaXRQbHVnaW4uSU5TVEFOQ0U7CisJfQorCit9CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvbGFiZWxzL3Byb3ZpZGVyL1BvcHVsYXRpb25MYWJlbFZhbHVlSXRlbVByb3ZpZGVyLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvbGFiZWxzL3Byb3ZpZGVyL1BvcHVsYXRpb25MYWJlbFZhbHVlSXRlbVByb3ZpZGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTc1NjczNAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy9sYWJlbHMvcHJvdmlkZXIvUG9wdWxhdGlvbkxhYmVsVmFsdWVJdGVtUHJvdmlkZXIuamF2YQpAQCAtMCwwICsxLDE4MCBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5wcm92aWRlcjsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LkFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuUmVzb3VyY2VMb2NhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkNvbXBvc2VhYmxlQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUVkaXRpbmdEb21haW5JdGVtUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1MYWJlbFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtUHJvcGVydHlEZXNjcmlwdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtUHJvcGVydHlTb3VyY2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVN0cnVjdHVyZWRJdGVtQ29udGVudFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklUcmVlSXRlbUNvbnRlbnRQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JdGVtUHJvcGVydHlEZXNjcmlwdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLlZpZXdlck5vdGlmaWNhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGgucHJvdmlkZXIuTGFiZWxWYWx1ZUl0ZW1Qcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmVkZ2VzLnByb3ZpZGVyLkRlZmluaXRpb25zRWRpdFBsdWdpbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5MYWJlbHNQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLlBvcHVsYXRpb25MYWJlbFZhbHVlOworCisvKioKKyAqIFRoaXMgaXMgdGhlIGl0ZW0gcHJvdmlkZXIgYWRhcHRlciBmb3IgYSB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuUG9wdWxhdGlvbkxhYmVsVmFsdWV9IG9iamVjdC4KKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgUG9wdWxhdGlvbkxhYmVsVmFsdWVJdGVtUHJvdmlkZXIgZXh0ZW5kcyBMYWJlbFZhbHVlSXRlbVByb3ZpZGVyCisJCWltcGxlbWVudHMgSUVkaXRpbmdEb21haW5JdGVtUHJvdmlkZXIsIElTdHJ1Y3R1cmVkSXRlbUNvbnRlbnRQcm92aWRlciwKKwkJSVRyZWVJdGVtQ29udGVudFByb3ZpZGVyLCBJSXRlbUxhYmVsUHJvdmlkZXIsIElJdGVtUHJvcGVydHlTb3VyY2UgeworCS8qKgorCSAqIFRoaXMgY29uc3RydWN0cyBhbiBpbnN0YW5jZSBmcm9tIGEgZmFjdG9yeSBhbmQgYSBub3RpZmllci4gPCEtLQorCSAqIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBwYXJhbSBhZGFwdGVyRmFjdG9yeQorCSAqIAorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgUG9wdWxhdGlvbkxhYmVsVmFsdWVJdGVtUHJvdmlkZXIoQWRhcHRlckZhY3RvcnkgYWRhcHRlckZhY3RvcnkpIHsKKwkJc3VwZXIoYWRhcHRlckZhY3RvcnkpOworCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyB0aGUgcHJvcGVydHkgZGVzY3JpcHRvcnMgZm9yIHRoZSBhZGFwdGVkIGNsYXNzLiA8IS0tCisJICogYmVnaW4tdXNlci1kb2MgLS0+CisJICogCisJICogQHBhcmFtIG9iamVjdAorCSAqIEByZXR1cm4KKwkgKiAKKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIExpc3Q8SUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I+IGdldFByb3BlcnR5RGVzY3JpcHRvcnMoT2JqZWN0IG9iamVjdCkgeworCQlpZiAoaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMgPT0gbnVsbCkgeworCQkJc3VwZXIuZ2V0UHJvcGVydHlEZXNjcmlwdG9ycyhvYmplY3QpOworCisJCQlhZGRDb3VudFByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QpOworCQl9CisJCXJldHVybiBpdGVtUHJvcGVydHlEZXNjcmlwdG9yczsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFkZHMgYSBwcm9wZXJ0eSBkZXNjcmlwdG9yIGZvciB0aGUgQ291bnQgZmVhdHVyZS4gPCEtLQorCSAqIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgYWRkQ291bnRQcm9wZXJ0eURlc2NyaXB0b3IoT2JqZWN0IG9iamVjdCkgeworCQlpdGVtUHJvcGVydHlEZXNjcmlwdG9ycy5hZGQKKwkJCShjcmVhdGVJdGVtUHJvcGVydHlEZXNjcmlwdG9yCisJCQkJKCgoQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSlhZGFwdGVyRmFjdG9yeSkuZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCksCisJCQkJIGdldFJlc291cmNlTG9jYXRvcigpLAorCQkJCSBnZXRTdHJpbmcoIl9VSV9Qb3B1bGF0aW9uTGFiZWxWYWx1ZV9jb3VudF9mZWF0dXJlIiksIC8vJE5PTi1OTFMtMSQKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfUHJvcGVydHlEZXNjcmlwdG9yX2Rlc2NyaXB0aW9uIiwgIl9VSV9Qb3B1bGF0aW9uTGFiZWxWYWx1ZV9jb3VudF9mZWF0dXJlIiwgIl9VSV9Qb3B1bGF0aW9uTGFiZWxWYWx1ZV90eXBlIiksIC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJCAvLyROT04tTkxTLTMkCisJCQkJIExhYmVsc1BhY2thZ2UuTGl0ZXJhbHMuUE9QVUxBVElPTl9MQUJFTF9WQUxVRV9fQ09VTlQsCisJCQkJIHRydWUsCisJCQkJIGZhbHNlLAorCQkJCSBmYWxzZSwKKwkJCQkgSXRlbVByb3BlcnR5RGVzY3JpcHRvci5SRUFMX1ZBTFVFX0lNQUdFLAorCQkJCSBudWxsLAorCQkJCSBudWxsKSk7CisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIHRoZSBsYWJlbCB0ZXh0IGZvciB0aGUgYWRhcHRlZCBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jCisJICogLS0+CisJICogCisJICogQHBhcmFtIG9iamVjdAorCSAqIEByZXR1cm4KKwkgKiAKKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBTdHJpbmcgZ2V0VGV4dChPYmplY3Qgb2JqZWN0KSB7CisJCVBvcHVsYXRpb25MYWJlbFZhbHVlIHBvcHVsYXRpb25MYWJlbFZhbHVlID0gKFBvcHVsYXRpb25MYWJlbFZhbHVlKSBvYmplY3Q7CisJCXJldHVybiBJbnRlZ2VyLnRvU3RyaW5nKChpbnQpIHBvcHVsYXRpb25MYWJlbFZhbHVlLmdldENvdW50KCkpOworCX0gLy8gZ2V0VGV4dAorCisJLyoqCisJICogVGhpcyByZXR1cm5zIHRoZSBsYWJlbCB0ZXh0IGZvciB0aGUgYWRhcHRlZCBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jCisJICogLS0+CisJICogCisJICogQHBhcmFtIG9iamVjdAorCSAqIEByZXR1cm4KKwkgKiAKKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJLy9AT3ZlcnJpZGUKKwlwdWJsaWMgU3RyaW5nIGdldFRleHRHZW4oT2JqZWN0IG9iamVjdCkgeworCQlQb3B1bGF0aW9uTGFiZWxWYWx1ZSBwb3B1bGF0aW9uTGFiZWxWYWx1ZSA9IChQb3B1bGF0aW9uTGFiZWxWYWx1ZSlvYmplY3Q7CisJCXJldHVybiBnZXRTdHJpbmcoIl9VSV9Qb3B1bGF0aW9uTGFiZWxWYWx1ZV90eXBlIikgKyAiICIgKyBwb3B1bGF0aW9uTGFiZWxWYWx1ZS5nZXRDb3VudCgpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKKwl9CisKKwkKKwkvKioKKwkgKiBUaGlzIGhhbmRsZXMgbW9kZWwgbm90aWZpY2F0aW9ucyBieSBjYWxsaW5nIHtAbGluayAjdXBkYXRlQ2hpbGRyZW59IHRvIHVwZGF0ZSBhbnkgY2FjaGVkCisJICogY2hpbGRyZW4gYW5kIGJ5IGNyZWF0aW5nIGEgdmlld2VyIG5vdGlmaWNhdGlvbiwgd2hpY2ggaXQgcGFzc2VzIHRvIHtAbGluayAjZmlyZU5vdGlmeUNoYW5nZWR9LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogCisJICogQHBhcmFtIG5vdGlmaWNhdGlvbgorCSAqIAorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBub3RpZnlDaGFuZ2VkKE5vdGlmaWNhdGlvbiBub3RpZmljYXRpb24pIHsKKwkJdXBkYXRlQ2hpbGRyZW4obm90aWZpY2F0aW9uKTsKKworCQlzd2l0Y2ggKG5vdGlmaWNhdGlvbi5nZXRGZWF0dXJlSUQoUG9wdWxhdGlvbkxhYmVsVmFsdWUuY2xhc3MpKSB7CisJCQljYXNlIExhYmVsc1BhY2thZ2UuUE9QVUxBVElPTl9MQUJFTF9WQUxVRV9fQ09VTlQ6CisJCQkJZmlyZU5vdGlmeUNoYW5nZWQobmV3IFZpZXdlck5vdGlmaWNhdGlvbihub3RpZmljYXRpb24sIG5vdGlmaWNhdGlvbi5nZXROb3RpZmllcigpLCBmYWxzZSwgdHJ1ZSkpOworCQkJCXJldHVybjsKKwkJfQorCQlzdXBlci5ub3RpZnlDaGFuZ2VkKG5vdGlmaWNhdGlvbik7CisJfQorCisJLyoqCisJICogVGhpcyBhZGRzIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuZWRpdC5jb21tYW5kLkNvbW1hbmRQYXJhbWV0ZXJ9cyBkZXNjcmliaW5nIHRoZSBjaGlsZHJlbgorCSAqIHRoYXQgY2FuIGJlIGNyZWF0ZWQgdW5kZXIgdGhpcyBvYmplY3QuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYworCSAqIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgY29sbGVjdE5ld0NoaWxkRGVzY3JpcHRvcnMoQ29sbGVjdGlvbjxPYmplY3Q+IG5ld0NoaWxkRGVzY3JpcHRvcnMsIE9iamVjdCBvYmplY3QpIHsKKwkJc3VwZXIuY29sbGVjdE5ld0NoaWxkRGVzY3JpcHRvcnMobmV3Q2hpbGREZXNjcmlwdG9ycywgb2JqZWN0KTsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm4gdGhlIHJlc291cmNlIGxvY2F0b3IgZm9yIHRoaXMgaXRlbSBwcm92aWRlcidzIHJlc291cmNlcy4gPCEtLQorCSAqIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEByZXR1cm4KKwkgKiAKKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIFJlc291cmNlTG9jYXRvciBnZXRSZXNvdXJjZUxvY2F0b3IoKSB7CisJCXJldHVybiBEZWZpbml0aW9uc0VkaXRQbHVnaW4uSU5TVEFOQ0U7CisJfQorCit9CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvbGFiZWxzL3Byb3ZpZGVyL1JlbGF0aXZlUGh5c2ljYWxSZWxhdGlvbnNoaXBMYWJlbEl0ZW1Qcm92aWRlci5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL2xhYmVscy9wcm92aWRlci9SZWxhdGl2ZVBoeXNpY2FsUmVsYXRpb25zaGlwTGFiZWxJdGVtUHJvdmlkZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MTFmMjZhCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL2xhYmVscy9wcm92aWRlci9SZWxhdGl2ZVBoeXNpY2FsUmVsYXRpb25zaGlwTGFiZWxJdGVtUHJvdmlkZXIuamF2YQpAQCAtMCwwICsxLDE0NSBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5wcm92aWRlcjsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOworaW1wb3J0IGphdmEudXRpbC5MaXN0OworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5VUkk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JRWRpdGluZ0RvbWFpbkl0ZW1Qcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbUxhYmVsUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1Qcm9wZXJ0eVNvdXJjZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JU3RydWN0dXJlZEl0ZW1Db250ZW50UHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVRyZWVJdGVtQ29udGVudFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLkxhYmVsc1BhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuUmVsYXRpdmVQaHlzaWNhbFJlbGF0aW9uc2hpcExhYmVsOworCisvKioKKyAqIFRoaXMgaXMgdGhlIGl0ZW0gcHJvdmlkZXIgYWRhcHRlciBmb3IgYSB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuUmVsYXRpdmVQaHlzaWNhbFJlbGF0aW9uc2hpcExhYmVsfSBvYmplY3QuCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBSZWxhdGl2ZVBoeXNpY2FsUmVsYXRpb25zaGlwTGFiZWxJdGVtUHJvdmlkZXIKKwlleHRlbmRzIFBoeXNpY2FsUmVsYXRpb25zaGlwTGFiZWxJdGVtUHJvdmlkZXIKKwlpbXBsZW1lbnRzCQorCQlJRWRpdGluZ0RvbWFpbkl0ZW1Qcm92aWRlciwJCisJCUlTdHJ1Y3R1cmVkSXRlbUNvbnRlbnRQcm92aWRlciwJCisJCUlUcmVlSXRlbUNvbnRlbnRQcm92aWRlciwJCisJCUlJdGVtTGFiZWxQcm92aWRlciwJCisJCUlJdGVtUHJvcGVydHlTb3VyY2UgeworCS8qKgorCSAqIFRoaXMgY29uc3RydWN0cyBhbiBpbnN0YW5jZSBmcm9tIGEgZmFjdG9yeSBhbmQgYSBub3RpZmllci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgUmVsYXRpdmVQaHlzaWNhbFJlbGF0aW9uc2hpcExhYmVsSXRlbVByb3ZpZGVyKEFkYXB0ZXJGYWN0b3J5IGFkYXB0ZXJGYWN0b3J5KSB7CisJCXN1cGVyKGFkYXB0ZXJGYWN0b3J5KTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgdGhlIHByb3BlcnR5IGRlc2NyaXB0b3JzIGZvciB0aGUgYWRhcHRlZCBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgTGlzdDxJSXRlbVByb3BlcnR5RGVzY3JpcHRvcj4gZ2V0UHJvcGVydHlEZXNjcmlwdG9ycyhPYmplY3Qgb2JqZWN0KSB7CisJCWlmIChpdGVtUHJvcGVydHlEZXNjcmlwdG9ycyA9PSBudWxsKSB7CisJCQlzdXBlci5nZXRQcm9wZXJ0eURlc2NyaXB0b3JzKG9iamVjdCk7CisKKwkJCWFkZEN1cnJlbnRSZWxhdGlvbnNoaXBQcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0KTsKKwkJfQorCQlyZXR1cm4gaXRlbVByb3BlcnR5RGVzY3JpcHRvcnM7CisJfQorCisJLyoqCisJICogVGhpcyBhZGRzIGEgcHJvcGVydHkgZGVzY3JpcHRvciBmb3IgdGhlIEN1cnJlbnQgUmVsYXRpb25zaGlwIGZlYXR1cmUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgYWRkQ3VycmVudFJlbGF0aW9uc2hpcFByb3BlcnR5RGVzY3JpcHRvcihPYmplY3Qgb2JqZWN0KSB7CisJCWl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzLmFkZAorCQkJKGNyZWF0ZUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IKKwkJCQkoKChDb21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5KWFkYXB0ZXJGYWN0b3J5KS5nZXRSb290QWRhcHRlckZhY3RvcnkoKSwKKwkJCQkgZ2V0UmVzb3VyY2VMb2NhdG9yKCksCisJCQkJIGdldFN0cmluZygiX1VJX1JlbGF0aXZlUGh5c2ljYWxSZWxhdGlvbnNoaXBMYWJlbF9jdXJyZW50UmVsYXRpb25zaGlwX2ZlYXR1cmUiKSwgLy8kTk9OLU5MUy0xJAorCQkJCSBnZXRTdHJpbmcoIl9VSV9Qcm9wZXJ0eURlc2NyaXB0b3JfZGVzY3JpcHRpb24iLCAiX1VJX1JlbGF0aXZlUGh5c2ljYWxSZWxhdGlvbnNoaXBMYWJlbF9jdXJyZW50UmVsYXRpb25zaGlwX2ZlYXR1cmUiLCAiX1VJX1JlbGF0aXZlUGh5c2ljYWxSZWxhdGlvbnNoaXBMYWJlbF90eXBlIiksIC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJCAvLyROT04tTkxTLTMkCisJCQkJIExhYmVsc1BhY2thZ2UuTGl0ZXJhbHMuUkVMQVRJVkVfUEhZU0lDQUxfUkVMQVRJT05TSElQX0xBQkVMX19DVVJSRU5UX1JFTEFUSU9OU0hJUCwKKwkJCQkgZmFsc2UsCisJCQkJIGZhbHNlLAorCQkJCSBmYWxzZSwKKwkJCQkgbnVsbCwKKwkJCQkgbnVsbCwKKwkJCQkgbnVsbCkpOworCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyB0aGUgbGFiZWwgdGV4dCBmb3IgdGhlIGFkYXB0ZWQgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBTdHJpbmcgZ2V0VGV4dChPYmplY3Qgb2JqZWN0KSB7CisJCXJldHVybiBzdXBlci5nZXRUZXh0KG9iamVjdCk7CisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIHRoZSBsYWJlbCB0ZXh0IGZvciB0aGUgYWRhcHRlZCBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgU3RyaW5nIGdldFRleHRHZW4oT2JqZWN0IG9iamVjdCkgeworCQlVUkkgbGFiZWxWYWx1ZSA9ICgoUmVsYXRpdmVQaHlzaWNhbFJlbGF0aW9uc2hpcExhYmVsKW9iamVjdCkuZ2V0VVJJKCk7CisJCVN0cmluZyBsYWJlbCA9IGxhYmVsVmFsdWUgPT0gbnVsbCA/IG51bGwgOiBsYWJlbFZhbHVlLnRvU3RyaW5nKCk7CisJCXJldHVybiBsYWJlbCA9PSBudWxsIHx8IGxhYmVsLmxlbmd0aCgpID09IDAgPworCQkJZ2V0U3RyaW5nKCJfVUlfUmVsYXRpdmVQaHlzaWNhbFJlbGF0aW9uc2hpcExhYmVsX3R5cGUiKSA6IC8vJE5PTi1OTFMtMSQKKwkJCWdldFN0cmluZygiX1VJX1JlbGF0aXZlUGh5c2ljYWxSZWxhdGlvbnNoaXBMYWJlbF90eXBlIikgKyAiICIgKyBsYWJlbDsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCisJfQorCisJCisJLyoqCisJICogVGhpcyBoYW5kbGVzIG1vZGVsIG5vdGlmaWNhdGlvbnMgYnkgY2FsbGluZyB7QGxpbmsgI3VwZGF0ZUNoaWxkcmVufSB0byB1cGRhdGUgYW55IGNhY2hlZAorCSAqIGNoaWxkcmVuIGFuZCBieSBjcmVhdGluZyBhIHZpZXdlciBub3RpZmljYXRpb24sIHdoaWNoIGl0IHBhc3NlcyB0byB7QGxpbmsgI2ZpcmVOb3RpZnlDaGFuZ2VkfS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBub3RpZnlDaGFuZ2VkKE5vdGlmaWNhdGlvbiBub3RpZmljYXRpb24pIHsKKwkJdXBkYXRlQ2hpbGRyZW4obm90aWZpY2F0aW9uKTsKKwkJc3VwZXIubm90aWZ5Q2hhbmdlZChub3RpZmljYXRpb24pOworCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmVkaXQuY29tbWFuZC5Db21tYW5kUGFyYW1ldGVyfXMgZGVzY3JpYmluZyB0aGUgY2hpbGRyZW4KKwkgKiB0aGF0IGNhbiBiZSBjcmVhdGVkIHVuZGVyIHRoaXMgb2JqZWN0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIGNvbGxlY3ROZXdDaGlsZERlc2NyaXB0b3JzKENvbGxlY3Rpb248T2JqZWN0PiBuZXdDaGlsZERlc2NyaXB0b3JzLCBPYmplY3Qgb2JqZWN0KSB7CisJCXN1cGVyLmNvbGxlY3ROZXdDaGlsZERlc2NyaXB0b3JzKG5ld0NoaWxkRGVzY3JpcHRvcnMsIG9iamVjdCk7CisJfQorCit9CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvbGFiZWxzL3Byb3ZpZGVyL1JlbGF0aXZlUGh5c2ljYWxSZWxhdGlvbnNoaXBMYWJlbFZhbHVlSXRlbVByb3ZpZGVyLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvbGFiZWxzL3Byb3ZpZGVyL1JlbGF0aXZlUGh5c2ljYWxSZWxhdGlvbnNoaXBMYWJlbFZhbHVlSXRlbVByb3ZpZGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2RhNWI0ZAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy9sYWJlbHMvcHJvdmlkZXIvUmVsYXRpdmVQaHlzaWNhbFJlbGF0aW9uc2hpcExhYmVsVmFsdWVJdGVtUHJvdmlkZXIuamF2YQpAQCAtMCwwICsxLDE5MiBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5wcm92aWRlcjsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOworaW1wb3J0IGphdmEudXRpbC5MaXN0OworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5SZXNvdXJjZUxvY2F0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JRWRpdGluZ0RvbWFpbkl0ZW1Qcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbUxhYmVsUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1Qcm9wZXJ0eVNvdXJjZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JU3RydWN0dXJlZEl0ZW1Db250ZW50UHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVRyZWVJdGVtQ29udGVudFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuVmlld2VyTm90aWZpY2F0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5wcm92aWRlci5MYWJlbFZhbHVlSXRlbVByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuZWRnZXMucHJvdmlkZXIuRGVmaW5pdGlvbnNFZGl0UGx1Z2luOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLkxhYmVsc1BhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuUmVsYXRpdmVQaHlzaWNhbFJlbGF0aW9uc2hpcDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5SZWxhdGl2ZVBoeXNpY2FsUmVsYXRpb25zaGlwTGFiZWxWYWx1ZTsKKworLyoqCisgKiBUaGlzIGlzIHRoZSBpdGVtIHByb3ZpZGVyIGFkYXB0ZXIgZm9yIGEge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLlJlbGF0aXZlUGh5c2ljYWxSZWxhdGlvbnNoaXBMYWJlbFZhbHVlfSBvYmplY3QuCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBSZWxhdGl2ZVBoeXNpY2FsUmVsYXRpb25zaGlwTGFiZWxWYWx1ZUl0ZW1Qcm92aWRlcgorCWV4dGVuZHMgTGFiZWxWYWx1ZUl0ZW1Qcm92aWRlcgorCWltcGxlbWVudHMJCisJCUlFZGl0aW5nRG9tYWluSXRlbVByb3ZpZGVyLAkKKwkJSVN0cnVjdHVyZWRJdGVtQ29udGVudFByb3ZpZGVyLAkKKwkJSVRyZWVJdGVtQ29udGVudFByb3ZpZGVyLAkKKwkJSUl0ZW1MYWJlbFByb3ZpZGVyLAkKKwkJSUl0ZW1Qcm9wZXJ0eVNvdXJjZSB7CisJLyoqCisJICogVGhpcyBjb25zdHJ1Y3RzIGFuIGluc3RhbmNlIGZyb20gYSBmYWN0b3J5IGFuZCBhIG5vdGlmaWVyLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBSZWxhdGl2ZVBoeXNpY2FsUmVsYXRpb25zaGlwTGFiZWxWYWx1ZUl0ZW1Qcm92aWRlcihBZGFwdGVyRmFjdG9yeSBhZGFwdGVyRmFjdG9yeSkgeworCQlzdXBlcihhZGFwdGVyRmFjdG9yeSk7CisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIHRoZSBwcm9wZXJ0eSBkZXNjcmlwdG9ycyBmb3IgdGhlIGFkYXB0ZWQgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIExpc3Q8SUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I+IGdldFByb3BlcnR5RGVzY3JpcHRvcnMoT2JqZWN0IG9iamVjdCkgeworCQlpZiAoaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMgPT0gbnVsbCkgeworCQkJc3VwZXIuZ2V0UHJvcGVydHlEZXNjcmlwdG9ycyhvYmplY3QpOworCisJCQlhZGRBZGphY2VudFByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QpOworCQkJYWRkUmVsYXRpb25zaGlwUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCk7CisJCX0KKwkJcmV0dXJuIGl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzOworCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyBhIHByb3BlcnR5IGRlc2NyaXB0b3IgZm9yIHRoZSBBZGphY2VudCBmZWF0dXJlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIGFkZEFkamFjZW50UHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdCBvYmplY3QpIHsKKwkJaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMuYWRkCisJCQkoY3JlYXRlSXRlbVByb3BlcnR5RGVzY3JpcHRvcgorCQkJCSgoKENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnkpYWRhcHRlckZhY3RvcnkpLmdldFJvb3RBZGFwdGVyRmFjdG9yeSgpLAorCQkJCSBnZXRSZXNvdXJjZUxvY2F0b3IoKSwKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfUmVsYXRpdmVQaHlzaWNhbFJlbGF0aW9uc2hpcExhYmVsVmFsdWVfYWRqYWNlbnRfZmVhdHVyZSIpLCAvLyROT04tTkxTLTEkCisJCQkJIGdldFN0cmluZygiX1VJX1Byb3BlcnR5RGVzY3JpcHRvcl9kZXNjcmlwdGlvbiIsICJfVUlfUmVsYXRpdmVQaHlzaWNhbFJlbGF0aW9uc2hpcExhYmVsVmFsdWVfYWRqYWNlbnRfZmVhdHVyZSIsICJfVUlfUmVsYXRpdmVQaHlzaWNhbFJlbGF0aW9uc2hpcExhYmVsVmFsdWVfdHlwZSIpLCAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQgLy8kTk9OLU5MUy0zJAorCQkJCSBMYWJlbHNQYWNrYWdlLkxpdGVyYWxzLlJFTEFUSVZFX1BIWVNJQ0FMX1JFTEFUSU9OU0hJUF9MQUJFTF9WQUxVRV9fQURKQUNFTlQsCisJCQkJIHRydWUsCisJCQkJIGZhbHNlLAorCQkJCSBmYWxzZSwKKwkJCQkgSXRlbVByb3BlcnR5RGVzY3JpcHRvci5CT09MRUFOX1ZBTFVFX0lNQUdFLAorCQkJCSBudWxsLAorCQkJCSBudWxsKSk7CisJfQorCisJLyoqCisJICogVGhpcyBhZGRzIGEgcHJvcGVydHkgZGVzY3JpcHRvciBmb3IgdGhlIFJlbGF0aW9uc2hpcCBmZWF0dXJlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIGFkZFJlbGF0aW9uc2hpcFByb3BlcnR5RGVzY3JpcHRvcihPYmplY3Qgb2JqZWN0KSB7CisJCWl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzLmFkZAorCQkJKGNyZWF0ZUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IKKwkJCQkoKChDb21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5KWFkYXB0ZXJGYWN0b3J5KS5nZXRSb290QWRhcHRlckZhY3RvcnkoKSwKKwkJCQkgZ2V0UmVzb3VyY2VMb2NhdG9yKCksCisJCQkJIGdldFN0cmluZygiX1VJX1JlbGF0aXZlUGh5c2ljYWxSZWxhdGlvbnNoaXBMYWJlbFZhbHVlX3JlbGF0aW9uc2hpcF9mZWF0dXJlIiksIC8vJE5PTi1OTFMtMSQKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfUHJvcGVydHlEZXNjcmlwdG9yX2Rlc2NyaXB0aW9uIiwgIl9VSV9SZWxhdGl2ZVBoeXNpY2FsUmVsYXRpb25zaGlwTGFiZWxWYWx1ZV9yZWxhdGlvbnNoaXBfZmVhdHVyZSIsICJfVUlfUmVsYXRpdmVQaHlzaWNhbFJlbGF0aW9uc2hpcExhYmVsVmFsdWVfdHlwZSIpLCAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQgLy8kTk9OLU5MUy0zJAorCQkJCSBMYWJlbHNQYWNrYWdlLkxpdGVyYWxzLlJFTEFUSVZFX1BIWVNJQ0FMX1JFTEFUSU9OU0hJUF9MQUJFTF9WQUxVRV9fUkVMQVRJT05TSElQLAorCQkJCSB0cnVlLAorCQkJCSBmYWxzZSwKKwkJCQkgZmFsc2UsCisJCQkJIEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IuR0VORVJJQ19WQUxVRV9JTUFHRSwKKwkJCQkgbnVsbCwKKwkJCQkgbnVsbCkpOworCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyB0aGUgbGFiZWwgdGV4dCBmb3IgdGhlIGFkYXB0ZWQgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBTdHJpbmcgZ2V0VGV4dChPYmplY3Qgb2JqZWN0KSB7CisJCWZpbmFsIFN0cmluZ0J1aWxkZXIgc2IgPSBuZXcgU3RyaW5nQnVpbGRlcigpOworCQlmaW5hbCBSZWxhdGl2ZVBoeXNpY2FsUmVsYXRpb25zaGlwTGFiZWxWYWx1ZSBycHJsdiA9IChSZWxhdGl2ZVBoeXNpY2FsUmVsYXRpb25zaGlwTGFiZWxWYWx1ZSlvYmplY3Q7CisJCWZpbmFsIFJlbGF0aXZlUGh5c2ljYWxSZWxhdGlvbnNoaXAgcmVsYXRpb25zaGlwID0gcnBybHYuZ2V0UmVsYXRpb25zaGlwKCk7CisJCXNiLmFwcGVuZChyZWxhdGlvbnNoaXAuZ2V0TGl0ZXJhbCgpKTsKKwkJc2IuYXBwZW5kKHJwcmx2LmlzQWRqYWNlbnQoKSA/ICIvQWRqYWNlbnQiIDogIi9Ob3QgQWRqYWNlbnQiKTsKKwkJcmV0dXJuIHNiLnRvU3RyaW5nKCk7CisJfSAvLyBnZXRUZXh0CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgdGhlIGxhYmVsIHRleHQgZm9yIHRoZSBhZGFwdGVkIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCS8vQE92ZXJyaWRlCisJcHVibGljIFN0cmluZyBnZXRUZXh0R2VuKE9iamVjdCBvYmplY3QpIHsKKwkJUmVsYXRpdmVQaHlzaWNhbFJlbGF0aW9uc2hpcExhYmVsVmFsdWUgcmVsYXRpdmVQaHlzaWNhbFJlbGF0aW9uc2hpcExhYmVsVmFsdWUgPSAoUmVsYXRpdmVQaHlzaWNhbFJlbGF0aW9uc2hpcExhYmVsVmFsdWUpb2JqZWN0OworCQlyZXR1cm4gZ2V0U3RyaW5nKCJfVUlfUmVsYXRpdmVQaHlzaWNhbFJlbGF0aW9uc2hpcExhYmVsVmFsdWVfdHlwZSIpICsgIiAiICsgcmVsYXRpdmVQaHlzaWNhbFJlbGF0aW9uc2hpcExhYmVsVmFsdWUuaXNBZGphY2VudCgpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKKwl9CisJCisJLyoqCisJICogVGhpcyBoYW5kbGVzIG1vZGVsIG5vdGlmaWNhdGlvbnMgYnkgY2FsbGluZyB7QGxpbmsgI3VwZGF0ZUNoaWxkcmVufSB0byB1cGRhdGUgYW55IGNhY2hlZAorCSAqIGNoaWxkcmVuIGFuZCBieSBjcmVhdGluZyBhIHZpZXdlciBub3RpZmljYXRpb24sIHdoaWNoIGl0IHBhc3NlcyB0byB7QGxpbmsgI2ZpcmVOb3RpZnlDaGFuZ2VkfS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBub3RpZnlDaGFuZ2VkKE5vdGlmaWNhdGlvbiBub3RpZmljYXRpb24pIHsKKwkJdXBkYXRlQ2hpbGRyZW4obm90aWZpY2F0aW9uKTsKKworCQlzd2l0Y2ggKG5vdGlmaWNhdGlvbi5nZXRGZWF0dXJlSUQoUmVsYXRpdmVQaHlzaWNhbFJlbGF0aW9uc2hpcExhYmVsVmFsdWUuY2xhc3MpKSB7CisJCQljYXNlIExhYmVsc1BhY2thZ2UuUkVMQVRJVkVfUEhZU0lDQUxfUkVMQVRJT05TSElQX0xBQkVMX1ZBTFVFX19BREpBQ0VOVDoKKwkJCWNhc2UgTGFiZWxzUGFja2FnZS5SRUxBVElWRV9QSFlTSUNBTF9SRUxBVElPTlNISVBfTEFCRUxfVkFMVUVfX1JFTEFUSU9OU0hJUDoKKwkJCQlmaXJlTm90aWZ5Q2hhbmdlZChuZXcgVmlld2VyTm90aWZpY2F0aW9uKG5vdGlmaWNhdGlvbiwgbm90aWZpY2F0aW9uLmdldE5vdGlmaWVyKCksIGZhbHNlLCB0cnVlKSk7CisJCQkJcmV0dXJuOworCQl9CisJCXN1cGVyLm5vdGlmeUNoYW5nZWQobm90aWZpY2F0aW9uKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFkZHMge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lZGl0LmNvbW1hbmQuQ29tbWFuZFBhcmFtZXRlcn1zIGRlc2NyaWJpbmcgdGhlIGNoaWxkcmVuCisJICogdGhhdCBjYW4gYmUgY3JlYXRlZCB1bmRlciB0aGlzIG9iamVjdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgdm9pZCBjb2xsZWN0TmV3Q2hpbGREZXNjcmlwdG9ycyhDb2xsZWN0aW9uPE9iamVjdD4gbmV3Q2hpbGREZXNjcmlwdG9ycywgT2JqZWN0IG9iamVjdCkgeworCQlzdXBlci5jb2xsZWN0TmV3Q2hpbGREZXNjcmlwdG9ycyhuZXdDaGlsZERlc2NyaXB0b3JzLCBvYmplY3QpOworCX0KKworCS8qKgorCSAqIFJldHVybiB0aGUgcmVzb3VyY2UgbG9jYXRvciBmb3IgdGhpcyBpdGVtIHByb3ZpZGVyJ3MgcmVzb3VyY2VzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBSZXNvdXJjZUxvY2F0b3IgZ2V0UmVzb3VyY2VMb2NhdG9yKCkgeworCQlyZXR1cm4gRGVmaW5pdGlvbnNFZGl0UGx1Z2luLklOU1RBTkNFOworCX0KKworfQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL2xhYmVscy9wcm92aWRlci9Sb2FkVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxJdGVtUHJvdmlkZXIuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy9sYWJlbHMvcHJvdmlkZXIvUm9hZFRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsSXRlbVByb3ZpZGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDg3MWU1YgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy9sYWJlbHMvcHJvdmlkZXIvUm9hZFRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsSXRlbVByb3ZpZGVyLmphdmEKQEAgLTAsMCArMSwxNTEgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMucHJvdmlkZXI7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5BZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlVSSTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JRWRpdGluZ0RvbWFpbkl0ZW1Qcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbUxhYmVsUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1Qcm9wZXJ0eVNvdXJjZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JU3RydWN0dXJlZEl0ZW1Db250ZW50UHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVRyZWVJdGVtQ29udGVudFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5FZGdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5FZGdlTGFiZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS5HZW9ncmFwaGljTmFtZXM7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuUm9hZFRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsOworCisvKioKKyAqIFRoaXMgaXMgdGhlIGl0ZW0gcHJvdmlkZXIgYWRhcHRlciBmb3IgYSB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuUm9hZFRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsfSBvYmplY3QuCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBSb2FkVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxJdGVtUHJvdmlkZXIKKwlleHRlbmRzIFBoeXNpY2FsUmVsYXRpb25zaGlwTGFiZWxJdGVtUHJvdmlkZXIKKwlpbXBsZW1lbnRzCQorCQlJRWRpdGluZ0RvbWFpbkl0ZW1Qcm92aWRlciwJCisJCUlTdHJ1Y3R1cmVkSXRlbUNvbnRlbnRQcm92aWRlciwJCisJCUlUcmVlSXRlbUNvbnRlbnRQcm92aWRlciwJCisJCUlJdGVtTGFiZWxQcm92aWRlciwJCisJCUlJdGVtUHJvcGVydHlTb3VyY2UgeworCS8qKgorCSAqIFRoaXMgY29uc3RydWN0cyBhbiBpbnN0YW5jZSBmcm9tIGEgZmFjdG9yeSBhbmQgYSBub3RpZmllci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgUm9hZFRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsSXRlbVByb3ZpZGVyKEFkYXB0ZXJGYWN0b3J5IGFkYXB0ZXJGYWN0b3J5KSB7CisJCXN1cGVyKGFkYXB0ZXJGYWN0b3J5KTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgdGhlIHByb3BlcnR5IGRlc2NyaXB0b3JzIGZvciB0aGUgYWRhcHRlZCBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgTGlzdDxJSXRlbVByb3BlcnR5RGVzY3JpcHRvcj4gZ2V0UHJvcGVydHlEZXNjcmlwdG9ycyhPYmplY3Qgb2JqZWN0KSB7CisJCWlmIChpdGVtUHJvcGVydHlEZXNjcmlwdG9ycyA9PSBudWxsKSB7CisJCQlzdXBlci5nZXRQcm9wZXJ0eURlc2NyaXB0b3JzKG9iamVjdCk7CisKKwkJfQorCQlyZXR1cm4gaXRlbVByb3BlcnR5RGVzY3JpcHRvcnM7CisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIFJvYWRUcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbC5naWYuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBPYmplY3QgZ2V0SW1hZ2UoT2JqZWN0IG9iamVjdCkgeworCQlyZXR1cm4gb3ZlcmxheUltYWdlKG9iamVjdCwgZ2V0UmVzb3VyY2VMb2NhdG9yKCkuZ2V0SW1hZ2UoImZ1bGwvY3VzdG9tMTYvcm9hZC5wbmciKSk7IC8vJE5PTi1OTFMtMSQKKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgdGhlIGxhYmVsIHRleHQgZm9yIHRoZSBhZGFwdGVkIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MKKwkgKiAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgU3RyaW5nIGdldFRleHQoT2JqZWN0IG9iamVjdCkgeworCQlmaW5hbCBVUkkgbGFiZWxVUkkgPSAoKFJvYWRUcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbClvYmplY3QpLmdldFVSSSgpOworCQlmaW5hbCBTdHJpbmcgbGFzdFNlZ21lbnQgPSBsYWJlbFVSSS5sYXN0U2VnbWVudCgpLnRvU3RyaW5nKCk7CisJCWZpbmFsIGludCBpID0gbGFzdFNlZ21lbnQuaW5kZXhPZigiXyIpOworCQlmaW5hbCBTdHJpbmcgZmlyc3RJU09LZXkgPSBsYXN0U2VnbWVudC5zdWJzdHJpbmcoMCwgaSk7CisJCWZpbmFsIFN0cmluZyBzZWNvbmRJU09LZXkgPSBsYXN0U2VnbWVudC5zdWJzdHJpbmcoaSsxKTsKKwkJCisJCWZpbmFsIFN0cmluZyBmaXJzdEdlb05hbWUgPSBHZW9ncmFwaGljTmFtZXMuZ2V0TmFtZShmaXJzdElTT0tleSk7CisJCWZpbmFsIFN0cmluZyBzZWNvbmRHZW9OYW1lID0gR2VvZ3JhcGhpY05hbWVzLmdldE5hbWUoc2Vjb25kSVNPS2V5KTsKKwkJCisJCWZpbmFsIFN0cmluZ0J1aWxkZXIgc2IgPSBuZXcgU3RyaW5nQnVpbGRlcigKKwkJCQlmaXJzdEdlb05hbWUuc3RhcnRzV2l0aCgiISIpID8gZmlyc3RJU09LZXkgOiBmaXJzdEdlb05hbWUpOworCQlmaW5hbCBFZGdlIGVkZ2UgPSAoKEVkZ2VMYWJlbCkgb2JqZWN0KS5nZXRFZGdlKCk7CisJCXNiLmFwcGVuZChlZGdlLmlzRGlyZWN0ZWQoKSA/ICIgLT4gIiA6ICIgPC0+ICIpOworCQkvLyBGaW5kIEJ1Z3MgaWRlbnRpZmllZCBhbiBlcnJvci4gIHNlY29uZEdlb05hbWUgd2FzIHVzZWQgCisJCS8vIGZvciBib3RoIGNvbmRpdGlvbnMgb2YgdGhlIHRlcm5hcnkKKwkJc2IuYXBwZW5kKHNlY29uZEdlb05hbWUuc3RhcnRzV2l0aCgiISIpID8gc2Vjb25kSVNPS2V5CisJCQkJCQk6IHNlY29uZEdlb05hbWUpOworCisJCXJldHVybiBzYi50b1N0cmluZygpOworCX0gLy8gZ2V0VGV4dAorCisJCisJLyoqCisJICogVGhpcyByZXR1cm5zIHRoZSBsYWJlbCB0ZXh0IGZvciB0aGUgYWRhcHRlZCBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgU3RyaW5nIGdldFRleHRHZW4oT2JqZWN0IG9iamVjdCkgeworCQlVUkkgbGFiZWxWYWx1ZSA9ICgoUm9hZFRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsKW9iamVjdCkuZ2V0VVJJKCk7CisJCVN0cmluZyBsYWJlbCA9IGxhYmVsVmFsdWUgPT0gbnVsbCA/IG51bGwgOiBsYWJlbFZhbHVlLnRvU3RyaW5nKCk7CisJCXJldHVybiBsYWJlbCA9PSBudWxsIHx8IGxhYmVsLmxlbmd0aCgpID09IDAgPworCQkJZ2V0U3RyaW5nKCJfVUlfUm9hZFRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsX3R5cGUiKSA6IC8vJE5PTi1OTFMtMSQKKwkJCWdldFN0cmluZygiX1VJX1JvYWRUcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbF90eXBlIikgKyAiICIgKyBsYWJlbDsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCisJfQorCisJLyoqCisJICogVGhpcyBoYW5kbGVzIG1vZGVsIG5vdGlmaWNhdGlvbnMgYnkgY2FsbGluZyB7QGxpbmsgI3VwZGF0ZUNoaWxkcmVufSB0byB1cGRhdGUgYW55IGNhY2hlZAorCSAqIGNoaWxkcmVuIGFuZCBieSBjcmVhdGluZyBhIHZpZXdlciBub3RpZmljYXRpb24sIHdoaWNoIGl0IHBhc3NlcyB0byB7QGxpbmsgI2ZpcmVOb3RpZnlDaGFuZ2VkfS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBub3RpZnlDaGFuZ2VkKE5vdGlmaWNhdGlvbiBub3RpZmljYXRpb24pIHsKKwkJdXBkYXRlQ2hpbGRyZW4obm90aWZpY2F0aW9uKTsKKwkJc3VwZXIubm90aWZ5Q2hhbmdlZChub3RpZmljYXRpb24pOworCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmVkaXQuY29tbWFuZC5Db21tYW5kUGFyYW1ldGVyfXMgZGVzY3JpYmluZyB0aGUgY2hpbGRyZW4KKwkgKiB0aGF0IGNhbiBiZSBjcmVhdGVkIHVuZGVyIHRoaXMgb2JqZWN0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIGNvbGxlY3ROZXdDaGlsZERlc2NyaXB0b3JzKENvbGxlY3Rpb248T2JqZWN0PiBuZXdDaGlsZERlc2NyaXB0b3JzLCBPYmplY3Qgb2JqZWN0KSB7CisJCXN1cGVyLmNvbGxlY3ROZXdDaGlsZERlc2NyaXB0b3JzKG5ld0NoaWxkRGVzY3JpcHRvcnMsIG9iamVjdCk7CisJfQorCit9CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvbGFiZWxzL3Byb3ZpZGVyL1JvYWRUcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbFZhbHVlSXRlbVByb3ZpZGVyLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvbGFiZWxzL3Byb3ZpZGVyL1JvYWRUcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbFZhbHVlSXRlbVByb3ZpZGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmMyMTVmMAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy9sYWJlbHMvcHJvdmlkZXIvUm9hZFRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsVmFsdWVJdGVtUHJvdmlkZXIuamF2YQpAQCAtMCwwICsxLDIwNSBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5wcm92aWRlcjsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LkFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5Db21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklFZGl0aW5nRG9tYWluSXRlbVByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtTGFiZWxQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbVByb3BlcnR5RGVzY3JpcHRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbVByb3BlcnR5U291cmNlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklTdHJ1Y3R1cmVkSXRlbUNvbnRlbnRQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JVHJlZUl0ZW1Db250ZW50UHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSXRlbVByb3BlcnR5RGVzY3JpcHRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5WaWV3ZXJOb3RpZmljYXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuTGFiZWxzUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5Sb2FkVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxWYWx1ZTsKKworLyoqCisgKiBUaGlzIGlzIHRoZSBpdGVtIHByb3ZpZGVyIGFkYXB0ZXIgZm9yIGEge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLlJvYWRUcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbFZhbHVlfSBvYmplY3QuCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBSb2FkVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxWYWx1ZUl0ZW1Qcm92aWRlcgorCWV4dGVuZHMgUGh5c2ljYWxSZWxhdGlvbnNoaXBMYWJlbFZhbHVlSXRlbVByb3ZpZGVyCisJaW1wbGVtZW50cwkKKwkJSUVkaXRpbmdEb21haW5JdGVtUHJvdmlkZXIsCQorCQlJU3RydWN0dXJlZEl0ZW1Db250ZW50UHJvdmlkZXIsCQorCQlJVHJlZUl0ZW1Db250ZW50UHJvdmlkZXIsCQorCQlJSXRlbUxhYmVsUHJvdmlkZXIsCQorCQlJSXRlbVByb3BlcnR5U291cmNlIHsKKwkvKioKKwkgKiBUaGlzIGNvbnN0cnVjdHMgYW4gaW5zdGFuY2UgZnJvbSBhIGZhY3RvcnkgYW5kIGEgbm90aWZpZXIuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFJvYWRUcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbFZhbHVlSXRlbVByb3ZpZGVyKEFkYXB0ZXJGYWN0b3J5IGFkYXB0ZXJGYWN0b3J5KSB7CisJCXN1cGVyKGFkYXB0ZXJGYWN0b3J5KTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgdGhlIHByb3BlcnR5IGRlc2NyaXB0b3JzIGZvciB0aGUgYWRhcHRlZCBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgTGlzdDxJSXRlbVByb3BlcnR5RGVzY3JpcHRvcj4gZ2V0UHJvcGVydHlEZXNjcmlwdG9ycyhPYmplY3Qgb2JqZWN0KSB7CisJCWlmIChpdGVtUHJvcGVydHlEZXNjcmlwdG9ycyA9PSBudWxsKSB7CisJCQlzdXBlci5nZXRQcm9wZXJ0eURlc2NyaXB0b3JzKG9iamVjdCk7CisKKwkJCWFkZFJvYWROYW1lUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCk7CisJCQlhZGRSb2FkQ2xhc3NQcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0KTsKKwkJCWFkZE51bWJlckNyb3NzaW5nc1Byb3BlcnR5RGVzY3JpcHRvcihvYmplY3QpOworCQl9CisJCXJldHVybiBpdGVtUHJvcGVydHlEZXNjcmlwdG9yczsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFkZHMgYSBwcm9wZXJ0eSBkZXNjcmlwdG9yIGZvciB0aGUgUm9hZCBOYW1lIGZlYXR1cmUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgYWRkUm9hZE5hbWVQcm9wZXJ0eURlc2NyaXB0b3IoT2JqZWN0IG9iamVjdCkgeworCQlpdGVtUHJvcGVydHlEZXNjcmlwdG9ycy5hZGQKKwkJCShjcmVhdGVJdGVtUHJvcGVydHlEZXNjcmlwdG9yCisJCQkJKCgoQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSlhZGFwdGVyRmFjdG9yeSkuZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCksCisJCQkJIGdldFJlc291cmNlTG9jYXRvcigpLAorCQkJCSBnZXRTdHJpbmcoIl9VSV9Sb2FkVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxWYWx1ZV9yb2FkTmFtZV9mZWF0dXJlIiksIC8vJE5PTi1OTFMtMSQKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfUHJvcGVydHlEZXNjcmlwdG9yX2Rlc2NyaXB0aW9uIiwgIl9VSV9Sb2FkVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxWYWx1ZV9yb2FkTmFtZV9mZWF0dXJlIiwgIl9VSV9Sb2FkVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxWYWx1ZV90eXBlIiksIC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJCAvLyROT04tTkxTLTMkCisJCQkJIExhYmVsc1BhY2thZ2UuTGl0ZXJhbHMuUk9BRF9UUkFOU1BPUlRfUkVMQVRJT05TSElQX0xBQkVMX1ZBTFVFX19ST0FEX05BTUUsCisJCQkJIHRydWUsCisJCQkJIGZhbHNlLAorCQkJCSBmYWxzZSwKKwkJCQkgSXRlbVByb3BlcnR5RGVzY3JpcHRvci5HRU5FUklDX1ZBTFVFX0lNQUdFLAorCQkJCSBudWxsLAorCQkJCSBudWxsKSk7CisJfQorCisJLyoqCisJICogVGhpcyBhZGRzIGEgcHJvcGVydHkgZGVzY3JpcHRvciBmb3IgdGhlIFJvYWQgQ2xhc3MgZmVhdHVyZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBhZGRSb2FkQ2xhc3NQcm9wZXJ0eURlc2NyaXB0b3IoT2JqZWN0IG9iamVjdCkgeworCQlpdGVtUHJvcGVydHlEZXNjcmlwdG9ycy5hZGQKKwkJCShjcmVhdGVJdGVtUHJvcGVydHlEZXNjcmlwdG9yCisJCQkJKCgoQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSlhZGFwdGVyRmFjdG9yeSkuZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCksCisJCQkJIGdldFJlc291cmNlTG9jYXRvcigpLAorCQkJCSBnZXRTdHJpbmcoIl9VSV9Sb2FkVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxWYWx1ZV9yb2FkQ2xhc3NfZmVhdHVyZSIpLCAvLyROT04tTkxTLTEkCisJCQkJIGdldFN0cmluZygiX1VJX1Byb3BlcnR5RGVzY3JpcHRvcl9kZXNjcmlwdGlvbiIsICJfVUlfUm9hZFRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsVmFsdWVfcm9hZENsYXNzX2ZlYXR1cmUiLCAiX1VJX1JvYWRUcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbFZhbHVlX3R5cGUiKSwgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkIC8vJE5PTi1OTFMtMyQKKwkJCQkgTGFiZWxzUGFja2FnZS5MaXRlcmFscy5ST0FEX1RSQU5TUE9SVF9SRUxBVElPTlNISVBfTEFCRUxfVkFMVUVfX1JPQURfQ0xBU1MsCisJCQkJIHRydWUsCisJCQkJIGZhbHNlLAorCQkJCSBmYWxzZSwKKwkJCQkgSXRlbVByb3BlcnR5RGVzY3JpcHRvci5HRU5FUklDX1ZBTFVFX0lNQUdFLAorCQkJCSBudWxsLAorCQkJCSBudWxsKSk7CisJfQorCisJLyoqCisJICogVGhpcyBhZGRzIGEgcHJvcGVydHkgZGVzY3JpcHRvciBmb3IgdGhlIE51bWJlciBDcm9zc2luZ3MgZmVhdHVyZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBhZGROdW1iZXJDcm9zc2luZ3NQcm9wZXJ0eURlc2NyaXB0b3IoT2JqZWN0IG9iamVjdCkgeworCQlpdGVtUHJvcGVydHlEZXNjcmlwdG9ycy5hZGQKKwkJCShjcmVhdGVJdGVtUHJvcGVydHlEZXNjcmlwdG9yCisJCQkJKCgoQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSlhZGFwdGVyRmFjdG9yeSkuZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCksCisJCQkJIGdldFJlc291cmNlTG9jYXRvcigpLAorCQkJCSBnZXRTdHJpbmcoIl9VSV9Sb2FkVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxWYWx1ZV9udW1iZXJDcm9zc2luZ3NfZmVhdHVyZSIpLCAvLyROT04tTkxTLTEkCisJCQkJIGdldFN0cmluZygiX1VJX1Byb3BlcnR5RGVzY3JpcHRvcl9kZXNjcmlwdGlvbiIsICJfVUlfUm9hZFRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsVmFsdWVfbnVtYmVyQ3Jvc3NpbmdzX2ZlYXR1cmUiLCAiX1VJX1JvYWRUcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbFZhbHVlX3R5cGUiKSwgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkIC8vJE5PTi1OTFMtMyQKKwkJCQkgTGFiZWxzUGFja2FnZS5MaXRlcmFscy5ST0FEX1RSQU5TUE9SVF9SRUxBVElPTlNISVBfTEFCRUxfVkFMVUVfX05VTUJFUl9DUk9TU0lOR1MsCisJCQkJIHRydWUsCisJCQkJIGZhbHNlLAorCQkJCSBmYWxzZSwKKwkJCQkgSXRlbVByb3BlcnR5RGVzY3JpcHRvci5JTlRFR1JBTF9WQUxVRV9JTUFHRSwKKwkJCQkgbnVsbCwKKwkJCQkgbnVsbCkpOworCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyB0aGUgbGFiZWwgdGV4dCBmb3IgdGhlIGFkYXB0ZWQgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBTdHJpbmcgZ2V0VGV4dChPYmplY3Qgb2JqZWN0KSB7CisJCWZpbmFsIFN0cmluZ0J1aWxkZXIgc2IgPSBuZXcgU3RyaW5nQnVpbGRlcigpOworCQlmaW5hbCBSb2FkVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxWYWx1ZSBsYWJlbFZhbHVlID0gKFJvYWRUcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbFZhbHVlKW9iamVjdDsKKwkJc2IuYXBwZW5kKGxhYmVsVmFsdWUuZ2V0Um9hZENsYXNzKCkpOworCQlzYi5hcHBlbmQoIjogXCIiKTsKKwkJc2IuYXBwZW5kKGxhYmVsVmFsdWUuZ2V0Um9hZE5hbWUoKSk7CisJCXNiLmFwcGVuZCgiXCIsIENyb3NzaW5nczogIik7CisJCXNiLmFwcGVuZChsYWJlbFZhbHVlLmdldE51bWJlckNyb3NzaW5ncygpKTsKKwkJCisJCXJldHVybiBzYi50b1N0cmluZygpOworCX0gLy8gZ2V0VGV4dAorCisJLyoqCisJICogVGhpcyByZXR1cm5zIHRoZSBsYWJlbCB0ZXh0IGZvciB0aGUgYWRhcHRlZCBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwkvL0BPdmVycmlkZQorCXB1YmxpYyBTdHJpbmcgZ2V0VGV4dEdlbihPYmplY3Qgb2JqZWN0KSB7CisJCVN0cmluZyBsYWJlbCA9ICgoUm9hZFRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsVmFsdWUpb2JqZWN0KS5nZXRSb2FkTmFtZSgpOworCQlyZXR1cm4gbGFiZWwgPT0gbnVsbCB8fCBsYWJlbC5sZW5ndGgoKSA9PSAwID8KKwkJCWdldFN0cmluZygiX1VJX1JvYWRUcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbFZhbHVlX3R5cGUiKSA6IC8vJE5PTi1OTFMtMSQKKwkJCWdldFN0cmluZygiX1VJX1JvYWRUcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbFZhbHVlX3R5cGUiKSArICIgIiArIGxhYmVsOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKKwl9CisJCisJLyoqCisJICogVGhpcyBoYW5kbGVzIG1vZGVsIG5vdGlmaWNhdGlvbnMgYnkgY2FsbGluZyB7QGxpbmsgI3VwZGF0ZUNoaWxkcmVufSB0byB1cGRhdGUgYW55IGNhY2hlZAorCSAqIGNoaWxkcmVuIGFuZCBieSBjcmVhdGluZyBhIHZpZXdlciBub3RpZmljYXRpb24sIHdoaWNoIGl0IHBhc3NlcyB0byB7QGxpbmsgI2ZpcmVOb3RpZnlDaGFuZ2VkfS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBub3RpZnlDaGFuZ2VkKE5vdGlmaWNhdGlvbiBub3RpZmljYXRpb24pIHsKKwkJdXBkYXRlQ2hpbGRyZW4obm90aWZpY2F0aW9uKTsKKworCQlzd2l0Y2ggKG5vdGlmaWNhdGlvbi5nZXRGZWF0dXJlSUQoUm9hZFRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsVmFsdWUuY2xhc3MpKSB7CisJCQljYXNlIExhYmVsc1BhY2thZ2UuUk9BRF9UUkFOU1BPUlRfUkVMQVRJT05TSElQX0xBQkVMX1ZBTFVFX19ST0FEX05BTUU6CisJCQljYXNlIExhYmVsc1BhY2thZ2UuUk9BRF9UUkFOU1BPUlRfUkVMQVRJT05TSElQX0xBQkVMX1ZBTFVFX19ST0FEX0NMQVNTOgorCQkJY2FzZSBMYWJlbHNQYWNrYWdlLlJPQURfVFJBTlNQT1JUX1JFTEFUSU9OU0hJUF9MQUJFTF9WQUxVRV9fTlVNQkVSX0NST1NTSU5HUzoKKwkJCQlmaXJlTm90aWZ5Q2hhbmdlZChuZXcgVmlld2VyTm90aWZpY2F0aW9uKG5vdGlmaWNhdGlvbiwgbm90aWZpY2F0aW9uLmdldE5vdGlmaWVyKCksIGZhbHNlLCB0cnVlKSk7CisJCQkJcmV0dXJuOworCQl9CisJCXN1cGVyLm5vdGlmeUNoYW5nZWQobm90aWZpY2F0aW9uKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFkZHMge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lZGl0LmNvbW1hbmQuQ29tbWFuZFBhcmFtZXRlcn1zIGRlc2NyaWJpbmcgdGhlIGNoaWxkcmVuCisJICogdGhhdCBjYW4gYmUgY3JlYXRlZCB1bmRlciB0aGlzIG9iamVjdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgdm9pZCBjb2xsZWN0TmV3Q2hpbGREZXNjcmlwdG9ycyhDb2xsZWN0aW9uPE9iamVjdD4gbmV3Q2hpbGREZXNjcmlwdG9ycywgT2JqZWN0IG9iamVjdCkgeworCQlzdXBlci5jb2xsZWN0TmV3Q2hpbGREZXNjcmlwdG9ycyhuZXdDaGlsZERlc2NyaXB0b3JzLCBvYmplY3QpOworCX0KKworfQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL2xhYmVscy9wcm92aWRlci9UcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbEl0ZW1Qcm92aWRlci5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL2xhYmVscy9wcm92aWRlci9UcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbEl0ZW1Qcm92aWRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjExM2YyYWYKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvbGFiZWxzL3Byb3ZpZGVyL1RyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsSXRlbVByb3ZpZGVyLmphdmEKQEAgLTAsMCArMSw0MjEgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMucHJvdmlkZXI7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5BZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlJlc291cmNlTG9jYXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuVVJJOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkNvbXBvc2VhYmxlQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUVkaXRpbmdEb21haW5JdGVtUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1MYWJlbFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtUHJvcGVydHlEZXNjcmlwdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtUHJvcGVydHlTb3VyY2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVN0cnVjdHVyZWRJdGVtQ29udGVudFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklUcmVlSXRlbUNvbnRlbnRQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JdGVtUHJvcGVydHlEZXNjcmlwdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLlZpZXdlck5vdGlmaWNhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguRWRnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguRWRnZUxhYmVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5wcm92aWRlci5EeW5hbWljRWRnZUxhYmVsSXRlbVByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuZWRnZXMucHJvdmlkZXIuRGVmaW5pdGlvbnNFZGl0UGx1Z2luOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkuR2VvZ3JhcGhpY05hbWVzOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLkxhYmVsc1BhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWw7CisKKy8qKgorICogVGhpcyBpcyB0aGUgaXRlbSBwcm92aWRlciBhZGFwdGVyIGZvciBhIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5UcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbH0gb2JqZWN0LgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBUcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbEl0ZW1Qcm92aWRlciBleHRlbmRzIER5bmFtaWNFZGdlTGFiZWxJdGVtUHJvdmlkZXIKKwkJaW1wbGVtZW50cyBJRWRpdGluZ0RvbWFpbkl0ZW1Qcm92aWRlciwgSVN0cnVjdHVyZWRJdGVtQ29udGVudFByb3ZpZGVyLAorCQlJVHJlZUl0ZW1Db250ZW50UHJvdmlkZXIsIElJdGVtTGFiZWxQcm92aWRlciwgSUl0ZW1Qcm9wZXJ0eVNvdXJjZSB7CisJLyoqCisJICogVGhpcyBjb25zdHJ1Y3RzIGFuIGluc3RhbmNlIGZyb20gYSBmYWN0b3J5IGFuZCBhIG5vdGlmaWVyLiA8IS0tCisJICogYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxJdGVtUHJvdmlkZXIoQWRhcHRlckZhY3RvcnkgYWRhcHRlckZhY3RvcnkpIHsKKwkJc3VwZXIoYWRhcHRlckZhY3RvcnkpOworCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyB0aGUgcHJvcGVydHkgZGVzY3JpcHRvcnMgZm9yIHRoZSBhZGFwdGVkIGNsYXNzLiA8IS0tCisJICogYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgTGlzdDxJSXRlbVByb3BlcnR5RGVzY3JpcHRvcj4gZ2V0UHJvcGVydHlEZXNjcmlwdG9ycyhPYmplY3Qgb2JqZWN0KSB7CisJCWlmIChpdGVtUHJvcGVydHlEZXNjcmlwdG9ycyA9PSBudWxsKSB7CisJCQlzdXBlci5nZXRQcm9wZXJ0eURlc2NyaXB0b3JzKG9iamVjdCk7CisKKwkJCWFkZFRyYW5zcG9ydE1vZGVQcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0KTsKKwkJCWFkZFBvcHVsYXRpb25JZGVudGlmaWVyUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCk7CisJCQlhZGRUcmFuc3BvcnRJZGVudGlmaWVyUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCk7CisJCQlhZGRDdXJyZW50VHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxWYWx1ZVByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QpOworCQkJYWRkUmF0ZVRpbWVQZXJpb2RQcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0KTsKKwkJCWFkZERlcGFydHVyZUNhcGFjaXR5UHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCk7CisJCQlhZGRNYXhpbXVtRGVwYXJ0dXJlQ2FwYWNpdHlQcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0KTsKKwkJCWFkZENhcGFjaXR5UHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCk7CisJCQlhZGRNYXhpbXVtQ2FwYWNpdHlQcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0KTsKKwkJCWFkZFRyYW5zaXRUaW1lUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCk7CisJCQlhZGRTdGFydFVwRGVsYXlQcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0KTsKKwkJfQorCQlyZXR1cm4gaXRlbVByb3BlcnR5RGVzY3JpcHRvcnM7CisJfQorCisJLyoqCisJICogVGhpcyBhZGRzIGEgcHJvcGVydHkgZGVzY3JpcHRvciBmb3IgdGhlIFRyYW5zcG9ydCBNb2RlIGZlYXR1cmUuIDwhLS0KKwkgKiBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogCisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIGFkZFRyYW5zcG9ydE1vZGVQcm9wZXJ0eURlc2NyaXB0b3IoT2JqZWN0IG9iamVjdCkgeworCQlpdGVtUHJvcGVydHlEZXNjcmlwdG9ycy5hZGQKKwkJCShjcmVhdGVJdGVtUHJvcGVydHlEZXNjcmlwdG9yCisJCQkJKCgoQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSlhZGFwdGVyRmFjdG9yeSkuZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCksCisJCQkJIGdldFJlc291cmNlTG9jYXRvcigpLAorCQkJCSBnZXRTdHJpbmcoIl9VSV9UcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbF90cmFuc3BvcnRNb2RlX2ZlYXR1cmUiKSwgLy8kTk9OLU5MUy0xJAorCQkJCSBnZXRTdHJpbmcoIl9VSV9Qcm9wZXJ0eURlc2NyaXB0b3JfZGVzY3JpcHRpb24iLCAiX1VJX1RyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsX3RyYW5zcG9ydE1vZGVfZmVhdHVyZSIsICJfVUlfVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxfdHlwZSIpLCAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQgLy8kTk9OLU5MUy0zJAorCQkJCSBMYWJlbHNQYWNrYWdlLkxpdGVyYWxzLlRSQU5TUE9SVF9SRUxBVElPTlNISVBfTEFCRUxfX1RSQU5TUE9SVF9NT0RFLAorCQkJCSB0cnVlLAorCQkJCSBmYWxzZSwKKwkJCQkgZmFsc2UsCisJCQkJIEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IuR0VORVJJQ19WQUxVRV9JTUFHRSwKKwkJCQkgbnVsbCwKKwkJCQkgbnVsbCkpOworCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyBhIHByb3BlcnR5IGRlc2NyaXB0b3IgZm9yIHRoZSBQb3B1bGF0aW9uIElkZW50aWZpZXIgZmVhdHVyZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgYWRkUG9wdWxhdGlvbklkZW50aWZpZXJQcm9wZXJ0eURlc2NyaXB0b3IoT2JqZWN0IG9iamVjdCkgeworCQlpdGVtUHJvcGVydHlEZXNjcmlwdG9ycy5hZGQKKwkJCShjcmVhdGVJdGVtUHJvcGVydHlEZXNjcmlwdG9yCisJCQkJKCgoQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSlhZGFwdGVyRmFjdG9yeSkuZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCksCisJCQkJIGdldFJlc291cmNlTG9jYXRvcigpLAorCQkJCSBnZXRTdHJpbmcoIl9VSV9UcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbF9wb3B1bGF0aW9uSWRlbnRpZmllcl9mZWF0dXJlIiksIC8vJE5PTi1OTFMtMSQKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfUHJvcGVydHlEZXNjcmlwdG9yX2Rlc2NyaXB0aW9uIiwgIl9VSV9UcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbF9wb3B1bGF0aW9uSWRlbnRpZmllcl9mZWF0dXJlIiwgIl9VSV9UcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbF90eXBlIiksIC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJCAvLyROT04tTkxTLTMkCisJCQkJIExhYmVsc1BhY2thZ2UuTGl0ZXJhbHMuVFJBTlNQT1JUX1JFTEFUSU9OU0hJUF9MQUJFTF9fUE9QVUxBVElPTl9JREVOVElGSUVSLAorCQkJCSB0cnVlLAorCQkJCSBmYWxzZSwKKwkJCQkgZmFsc2UsCisJCQkJIEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IuR0VORVJJQ19WQUxVRV9JTUFHRSwKKwkJCQkgbnVsbCwKKwkJCQkgbnVsbCkpOworCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyBhIHByb3BlcnR5IGRlc2NyaXB0b3IgZm9yIHRoZSBUcmFuc3BvcnQgSWRlbnRpZmllciBmZWF0dXJlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBhZGRUcmFuc3BvcnRJZGVudGlmaWVyUHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdCBvYmplY3QpIHsKKwkJaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMuYWRkCisJCQkoY3JlYXRlSXRlbVByb3BlcnR5RGVzY3JpcHRvcgorCQkJCSgoKENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnkpYWRhcHRlckZhY3RvcnkpLmdldFJvb3RBZGFwdGVyRmFjdG9yeSgpLAorCQkJCSBnZXRSZXNvdXJjZUxvY2F0b3IoKSwKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxfdHJhbnNwb3J0SWRlbnRpZmllcl9mZWF0dXJlIiksIC8vJE5PTi1OTFMtMSQKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfUHJvcGVydHlEZXNjcmlwdG9yX2Rlc2NyaXB0aW9uIiwgIl9VSV9UcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbF90cmFuc3BvcnRJZGVudGlmaWVyX2ZlYXR1cmUiLCAiX1VJX1RyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsX3R5cGUiKSwgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkIC8vJE5PTi1OTFMtMyQKKwkJCQkgTGFiZWxzUGFja2FnZS5MaXRlcmFscy5UUkFOU1BPUlRfUkVMQVRJT05TSElQX0xBQkVMX19UUkFOU1BPUlRfSURFTlRJRklFUiwKKwkJCQkgdHJ1ZSwKKwkJCQkgZmFsc2UsCisJCQkJIGZhbHNlLAorCQkJCSBJdGVtUHJvcGVydHlEZXNjcmlwdG9yLkdFTkVSSUNfVkFMVUVfSU1BR0UsCisJCQkJIG51bGwsCisJCQkJIG51bGwpKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFkZHMgYSBwcm9wZXJ0eSBkZXNjcmlwdG9yIGZvciB0aGUgQ3VycmVudCBUcmFuc3BvcnQgUmVsYXRpb25zaGlwIExhYmVsIFZhbHVlIGZlYXR1cmUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIGFkZEN1cnJlbnRUcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbFZhbHVlUHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdCBvYmplY3QpIHsKKwkJaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMuYWRkCisJCQkoY3JlYXRlSXRlbVByb3BlcnR5RGVzY3JpcHRvcgorCQkJCSgoKENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnkpYWRhcHRlckZhY3RvcnkpLmdldFJvb3RBZGFwdGVyRmFjdG9yeSgpLAorCQkJCSBnZXRSZXNvdXJjZUxvY2F0b3IoKSwKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxfY3VycmVudFRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsVmFsdWVfZmVhdHVyZSIpLCAvLyROT04tTkxTLTEkCisJCQkJIGdldFN0cmluZygiX1VJX1Byb3BlcnR5RGVzY3JpcHRvcl9kZXNjcmlwdGlvbiIsICJfVUlfVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxfY3VycmVudFRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsVmFsdWVfZmVhdHVyZSIsICJfVUlfVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxfdHlwZSIpLCAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQgLy8kTk9OLU5MUy0zJAorCQkJCSBMYWJlbHNQYWNrYWdlLkxpdGVyYWxzLlRSQU5TUE9SVF9SRUxBVElPTlNISVBfTEFCRUxfX0NVUlJFTlRfVFJBTlNQT1JUX1JFTEFUSU9OU0hJUF9MQUJFTF9WQUxVRSwKKwkJCQkgZmFsc2UsCisJCQkJIGZhbHNlLAorCQkJCSBmYWxzZSwKKwkJCQkgbnVsbCwKKwkJCQkgbnVsbCwKKwkJCQkgbnVsbCkpOworCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyBhIHByb3BlcnR5IGRlc2NyaXB0b3IgZm9yIHRoZSBSYXRlIFRpbWUgUGVyaW9kIGZlYXR1cmUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgYWRkUmF0ZVRpbWVQZXJpb2RQcm9wZXJ0eURlc2NyaXB0b3IoT2JqZWN0IG9iamVjdCkgeworCQlpdGVtUHJvcGVydHlEZXNjcmlwdG9ycy5hZGQKKwkJCShjcmVhdGVJdGVtUHJvcGVydHlEZXNjcmlwdG9yCisJCQkJKCgoQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSlhZGFwdGVyRmFjdG9yeSkuZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCksCisJCQkJIGdldFJlc291cmNlTG9jYXRvcigpLAorCQkJCSBnZXRTdHJpbmcoIl9VSV9UcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbF9yYXRlVGltZVBlcmlvZF9mZWF0dXJlIiksIC8vJE5PTi1OTFMtMSQKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfUHJvcGVydHlEZXNjcmlwdG9yX2Rlc2NyaXB0aW9uIiwgIl9VSV9UcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbF9yYXRlVGltZVBlcmlvZF9mZWF0dXJlIiwgIl9VSV9UcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbF90eXBlIiksIC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJCAvLyROT04tTkxTLTMkCisJCQkJIExhYmVsc1BhY2thZ2UuTGl0ZXJhbHMuVFJBTlNQT1JUX1JFTEFUSU9OU0hJUF9MQUJFTF9fUkFURV9USU1FX1BFUklPRCwKKwkJCQkgdHJ1ZSwKKwkJCQkgZmFsc2UsCisJCQkJIGZhbHNlLAorCQkJCSBJdGVtUHJvcGVydHlEZXNjcmlwdG9yLklOVEVHUkFMX1ZBTFVFX0lNQUdFLAorCQkJCSBudWxsLAorCQkJCSBudWxsKSk7CisJfQorCisJLyoqCisJICogVGhpcyBhZGRzIGEgcHJvcGVydHkgZGVzY3JpcHRvciBmb3IgdGhlIERlcGFydHVyZSBDYXBhY2l0eSBmZWF0dXJlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIGFkZERlcGFydHVyZUNhcGFjaXR5UHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdCBvYmplY3QpIHsKKwkJaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMuYWRkCisJCQkoY3JlYXRlSXRlbVByb3BlcnR5RGVzY3JpcHRvcgorCQkJCSgoKENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnkpYWRhcHRlckZhY3RvcnkpLmdldFJvb3RBZGFwdGVyRmFjdG9yeSgpLAorCQkJCSBnZXRSZXNvdXJjZUxvY2F0b3IoKSwKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxfZGVwYXJ0dXJlQ2FwYWNpdHlfZmVhdHVyZSIpLCAvLyROT04tTkxTLTEkCisJCQkJIGdldFN0cmluZygiX1VJX1Byb3BlcnR5RGVzY3JpcHRvcl9kZXNjcmlwdGlvbiIsICJfVUlfVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxfZGVwYXJ0dXJlQ2FwYWNpdHlfZmVhdHVyZSIsICJfVUlfVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxfdHlwZSIpLCAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQgLy8kTk9OLU5MUy0zJAorCQkJCSBMYWJlbHNQYWNrYWdlLkxpdGVyYWxzLlRSQU5TUE9SVF9SRUxBVElPTlNISVBfTEFCRUxfX0RFUEFSVFVSRV9DQVBBQ0lUWSwKKwkJCQkgZmFsc2UsCisJCQkJIGZhbHNlLAorCQkJCSBmYWxzZSwKKwkJCQkgSXRlbVByb3BlcnR5RGVzY3JpcHRvci5JTlRFR1JBTF9WQUxVRV9JTUFHRSwKKwkJCQkgbnVsbCwKKwkJCQkgbnVsbCkpOworCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyBhIHByb3BlcnR5IGRlc2NyaXB0b3IgZm9yIHRoZSBNYXhpbXVtIERlcGFydHVyZSBDYXBhY2l0eSBmZWF0dXJlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIGFkZE1heGltdW1EZXBhcnR1cmVDYXBhY2l0eVByb3BlcnR5RGVzY3JpcHRvcihPYmplY3Qgb2JqZWN0KSB7CisJCWl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzLmFkZAorCQkJKGNyZWF0ZUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IKKwkJCQkoKChDb21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5KWFkYXB0ZXJGYWN0b3J5KS5nZXRSb290QWRhcHRlckZhY3RvcnkoKSwKKwkJCQkgZ2V0UmVzb3VyY2VMb2NhdG9yKCksCisJCQkJIGdldFN0cmluZygiX1VJX1RyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsX21heGltdW1EZXBhcnR1cmVDYXBhY2l0eV9mZWF0dXJlIiksIC8vJE5PTi1OTFMtMSQKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfUHJvcGVydHlEZXNjcmlwdG9yX2Rlc2NyaXB0aW9uIiwgIl9VSV9UcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbF9tYXhpbXVtRGVwYXJ0dXJlQ2FwYWNpdHlfZmVhdHVyZSIsICJfVUlfVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxfdHlwZSIpLCAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQgLy8kTk9OLU5MUy0zJAorCQkJCSBMYWJlbHNQYWNrYWdlLkxpdGVyYWxzLlRSQU5TUE9SVF9SRUxBVElPTlNISVBfTEFCRUxfX01BWElNVU1fREVQQVJUVVJFX0NBUEFDSVRZLAorCQkJCSB0cnVlLAorCQkJCSBmYWxzZSwKKwkJCQkgZmFsc2UsCisJCQkJIEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IuSU5URUdSQUxfVkFMVUVfSU1BR0UsCisJCQkJIG51bGwsCisJCQkJIG51bGwpKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFkZHMgYSBwcm9wZXJ0eSBkZXNjcmlwdG9yIGZvciB0aGUgQ2FwYWNpdHkgZmVhdHVyZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBhZGRDYXBhY2l0eVByb3BlcnR5RGVzY3JpcHRvcihPYmplY3Qgb2JqZWN0KSB7CisJCWl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzLmFkZAorCQkJKGNyZWF0ZUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IKKwkJCQkoKChDb21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5KWFkYXB0ZXJGYWN0b3J5KS5nZXRSb290QWRhcHRlckZhY3RvcnkoKSwKKwkJCQkgZ2V0UmVzb3VyY2VMb2NhdG9yKCksCisJCQkJIGdldFN0cmluZygiX1VJX1RyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsX2NhcGFjaXR5X2ZlYXR1cmUiKSwgLy8kTk9OLU5MUy0xJAorCQkJCSBnZXRTdHJpbmcoIl9VSV9Qcm9wZXJ0eURlc2NyaXB0b3JfZGVzY3JpcHRpb24iLCAiX1VJX1RyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsX2NhcGFjaXR5X2ZlYXR1cmUiLCAiX1VJX1RyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsX3R5cGUiKSwgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkIC8vJE5PTi1OTFMtMyQKKwkJCQkgTGFiZWxzUGFja2FnZS5MaXRlcmFscy5UUkFOU1BPUlRfUkVMQVRJT05TSElQX0xBQkVMX19DQVBBQ0lUWSwKKwkJCQkgZmFsc2UsCisJCQkJIGZhbHNlLAorCQkJCSBmYWxzZSwKKwkJCQkgSXRlbVByb3BlcnR5RGVzY3JpcHRvci5JTlRFR1JBTF9WQUxVRV9JTUFHRSwKKwkJCQkgbnVsbCwKKwkJCQkgbnVsbCkpOworCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyBhIHByb3BlcnR5IGRlc2NyaXB0b3IgZm9yIHRoZSBNYXhpbXVtIENhcGFjaXR5IGZlYXR1cmUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgYWRkTWF4aW11bUNhcGFjaXR5UHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdCBvYmplY3QpIHsKKwkJaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMuYWRkCisJCQkoY3JlYXRlSXRlbVByb3BlcnR5RGVzY3JpcHRvcgorCQkJCSgoKENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnkpYWRhcHRlckZhY3RvcnkpLmdldFJvb3RBZGFwdGVyRmFjdG9yeSgpLAorCQkJCSBnZXRSZXNvdXJjZUxvY2F0b3IoKSwKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxfbWF4aW11bUNhcGFjaXR5X2ZlYXR1cmUiKSwgLy8kTk9OLU5MUy0xJAorCQkJCSBnZXRTdHJpbmcoIl9VSV9Qcm9wZXJ0eURlc2NyaXB0b3JfZGVzY3JpcHRpb24iLCAiX1VJX1RyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsX21heGltdW1DYXBhY2l0eV9mZWF0dXJlIiwgIl9VSV9UcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbF90eXBlIiksIC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJCAvLyROT04tTkxTLTMkCisJCQkJIExhYmVsc1BhY2thZ2UuTGl0ZXJhbHMuVFJBTlNQT1JUX1JFTEFUSU9OU0hJUF9MQUJFTF9fTUFYSU1VTV9DQVBBQ0lUWSwKKwkJCQkgdHJ1ZSwKKwkJCQkgZmFsc2UsCisJCQkJIGZhbHNlLAorCQkJCSBJdGVtUHJvcGVydHlEZXNjcmlwdG9yLklOVEVHUkFMX1ZBTFVFX0lNQUdFLAorCQkJCSBudWxsLAorCQkJCSBudWxsKSk7CisJfQorCisJLyoqCisJICogVGhpcyBhZGRzIGEgcHJvcGVydHkgZGVzY3JpcHRvciBmb3IgdGhlIFRyYW5zaXQgVGltZSBmZWF0dXJlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIGFkZFRyYW5zaXRUaW1lUHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdCBvYmplY3QpIHsKKwkJaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMuYWRkCisJCQkoY3JlYXRlSXRlbVByb3BlcnR5RGVzY3JpcHRvcgorCQkJCSgoKENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnkpYWRhcHRlckZhY3RvcnkpLmdldFJvb3RBZGFwdGVyRmFjdG9yeSgpLAorCQkJCSBnZXRSZXNvdXJjZUxvY2F0b3IoKSwKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxfdHJhbnNpdFRpbWVfZmVhdHVyZSIpLCAvLyROT04tTkxTLTEkCisJCQkJIGdldFN0cmluZygiX1VJX1Byb3BlcnR5RGVzY3JpcHRvcl9kZXNjcmlwdGlvbiIsICJfVUlfVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxfdHJhbnNpdFRpbWVfZmVhdHVyZSIsICJfVUlfVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxfdHlwZSIpLCAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQgLy8kTk9OLU5MUy0zJAorCQkJCSBMYWJlbHNQYWNrYWdlLkxpdGVyYWxzLlRSQU5TUE9SVF9SRUxBVElPTlNISVBfTEFCRUxfX1RSQU5TSVRfVElNRSwKKwkJCQkgdHJ1ZSwKKwkJCQkgZmFsc2UsCisJCQkJIGZhbHNlLAorCQkJCSBJdGVtUHJvcGVydHlEZXNjcmlwdG9yLklOVEVHUkFMX1ZBTFVFX0lNQUdFLAorCQkJCSBudWxsLAorCQkJCSBudWxsKSk7CisJfQorCisJLyoqCisJICogVGhpcyBhZGRzIGEgcHJvcGVydHkgZGVzY3JpcHRvciBmb3IgdGhlIFN0YXJ0IFVwIERlbGF5IGZlYXR1cmUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgYWRkU3RhcnRVcERlbGF5UHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdCBvYmplY3QpIHsKKwkJaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMuYWRkCisJCQkoY3JlYXRlSXRlbVByb3BlcnR5RGVzY3JpcHRvcgorCQkJCSgoKENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnkpYWRhcHRlckZhY3RvcnkpLmdldFJvb3RBZGFwdGVyRmFjdG9yeSgpLAorCQkJCSBnZXRSZXNvdXJjZUxvY2F0b3IoKSwKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxfc3RhcnRVcERlbGF5X2ZlYXR1cmUiKSwgLy8kTk9OLU5MUy0xJAorCQkJCSBnZXRTdHJpbmcoIl9VSV9Qcm9wZXJ0eURlc2NyaXB0b3JfZGVzY3JpcHRpb24iLCAiX1VJX1RyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsX3N0YXJ0VXBEZWxheV9mZWF0dXJlIiwgIl9VSV9UcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbF90eXBlIiksIC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJCAvLyROT04tTkxTLTMkCisJCQkJIExhYmVsc1BhY2thZ2UuTGl0ZXJhbHMuVFJBTlNQT1JUX1JFTEFUSU9OU0hJUF9MQUJFTF9fU1RBUlRfVVBfREVMQVksCisJCQkJIHRydWUsCisJCQkJIGZhbHNlLAorCQkJCSBmYWxzZSwKKwkJCQkgSXRlbVByb3BlcnR5RGVzY3JpcHRvci5JTlRFR1JBTF9WQUxVRV9JTUFHRSwKKwkJCQkgbnVsbCwKKwkJCQkgbnVsbCkpOworCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyB0aGUgbGFiZWwgdGV4dCBmb3IgdGhlIGFkYXB0ZWQgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYworCSAqIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBTdHJpbmcgZ2V0VGV4dChPYmplY3Qgb2JqZWN0KSB7CisJCWZpbmFsIFVSSSBsYWJlbFVSSSA9ICgoVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWwpb2JqZWN0KS5nZXRVUkkoKTsKKwkJZmluYWwgU3RyaW5nIGxhc3RTZWdtZW50ID0gbGFiZWxVUkkubGFzdFNlZ21lbnQoKS50b1N0cmluZygpOworCQlmaW5hbCBpbnQgaSA9IGxhc3RTZWdtZW50LmluZGV4T2YoIl8iKTsKKwkJZmluYWwgU3RyaW5nIGZpcnN0SVNPS2V5ID0gbGFzdFNlZ21lbnQuc3Vic3RyaW5nKDAsIGkpOworCQlmaW5hbCBTdHJpbmcgc2Vjb25kSVNPS2V5ID0gbGFzdFNlZ21lbnQuc3Vic3RyaW5nKGkrMSk7CisJCQorCQlmaW5hbCBTdHJpbmcgZmlyc3RHZW9OYW1lID0gR2VvZ3JhcGhpY05hbWVzLmdldE5hbWUoZmlyc3RJU09LZXkpOworCQlmaW5hbCBTdHJpbmcgc2Vjb25kR2VvTmFtZSA9IEdlb2dyYXBoaWNOYW1lcy5nZXROYW1lKHNlY29uZElTT0tleSk7CisJCQorCQlmaW5hbCBTdHJpbmdCdWlsZGVyIHNiID0gbmV3IFN0cmluZ0J1aWxkZXIoCisJCQkJZmlyc3RHZW9OYW1lLnN0YXJ0c1dpdGgoIiEiKSA/IGZpcnN0SVNPS2V5IDogZmlyc3RHZW9OYW1lKTsKKwkJZmluYWwgRWRnZSBlZGdlID0gKChFZGdlTGFiZWwpIG9iamVjdCkuZ2V0RWRnZSgpOworCQlzYi5hcHBlbmQoZWRnZS5pc0RpcmVjdGVkKCkgPyAiIC0+ICIgOiAiIDwtPiAiKTsKKwkJLy8gRmluZCBCdWdzIGlkZW50aWZpZWQgYW4gZXJyb3IuICBzZWNvbmRHZW9OYW1lIHdhcyB1c2VkIAorCQkvLyBmb3IgYm90aCBjb25kaXRpb25zIG9mIHRoZSB0ZXJuYXJ5CisJCXNiLmFwcGVuZChzZWNvbmRHZW9OYW1lLnN0YXJ0c1dpdGgoIiEiKSA/IHNlY29uZElTT0tleQorCQkJCQkJOiBzZWNvbmRHZW9OYW1lKTsKKworCQlyZXR1cm4gc2IudG9TdHJpbmcoKTsKKwl9IC8vIGdldFRleHQKKworCisJLyoqCisJICogVGhpcyByZXR1cm5zIHRoZSBsYWJlbCB0ZXh0IGZvciB0aGUgYWRhcHRlZCBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBwYXJhbSBvYmplY3QKKwkgKiBAcmV0dXJuCisJICogCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBTdHJpbmcgZ2V0VGV4dEdlbihPYmplY3Qgb2JqZWN0KSB7CisJCVVSSSBsYWJlbFZhbHVlID0gKChUcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbClvYmplY3QpLmdldFVSSSgpOworCQlTdHJpbmcgbGFiZWwgPSBsYWJlbFZhbHVlID09IG51bGwgPyBudWxsIDogbGFiZWxWYWx1ZS50b1N0cmluZygpOworCQlyZXR1cm4gbGFiZWwgPT0gbnVsbCB8fCBsYWJlbC5sZW5ndGgoKSA9PSAwID8KKwkJCWdldFN0cmluZygiX1VJX1RyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsX3R5cGUiKSA6IC8vJE5PTi1OTFMtMSQKKwkJCWdldFN0cmluZygiX1VJX1RyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsX3R5cGUiKSArICIgIiArIGxhYmVsOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKKwl9CisJCisJLyoqCisJICogVGhpcyBoYW5kbGVzIG1vZGVsIG5vdGlmaWNhdGlvbnMgYnkgY2FsbGluZyB7QGxpbmsgI3VwZGF0ZUNoaWxkcmVufSB0byB1cGRhdGUgYW55IGNhY2hlZAorCSAqIGNoaWxkcmVuIGFuZCBieSBjcmVhdGluZyBhIHZpZXdlciBub3RpZmljYXRpb24sIHdoaWNoIGl0IHBhc3NlcyB0byB7QGxpbmsgI2ZpcmVOb3RpZnlDaGFuZ2VkfS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tCisJICogZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBub3RpZnlDaGFuZ2VkKE5vdGlmaWNhdGlvbiBub3RpZmljYXRpb24pIHsKKwkJdXBkYXRlQ2hpbGRyZW4obm90aWZpY2F0aW9uKTsKKworCQlzd2l0Y2ggKG5vdGlmaWNhdGlvbi5nZXRGZWF0dXJlSUQoVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWwuY2xhc3MpKSB7CisJCQljYXNlIExhYmVsc1BhY2thZ2UuVFJBTlNQT1JUX1JFTEFUSU9OU0hJUF9MQUJFTF9fVFJBTlNQT1JUX01PREU6CisJCQljYXNlIExhYmVsc1BhY2thZ2UuVFJBTlNQT1JUX1JFTEFUSU9OU0hJUF9MQUJFTF9fUE9QVUxBVElPTl9JREVOVElGSUVSOgorCQkJY2FzZSBMYWJlbHNQYWNrYWdlLlRSQU5TUE9SVF9SRUxBVElPTlNISVBfTEFCRUxfX1RSQU5TUE9SVF9JREVOVElGSUVSOgorCQkJY2FzZSBMYWJlbHNQYWNrYWdlLlRSQU5TUE9SVF9SRUxBVElPTlNISVBfTEFCRUxfX1JBVEVfVElNRV9QRVJJT0Q6CisJCQljYXNlIExhYmVsc1BhY2thZ2UuVFJBTlNQT1JUX1JFTEFUSU9OU0hJUF9MQUJFTF9fREVQQVJUVVJFX0NBUEFDSVRZOgorCQkJY2FzZSBMYWJlbHNQYWNrYWdlLlRSQU5TUE9SVF9SRUxBVElPTlNISVBfTEFCRUxfX01BWElNVU1fREVQQVJUVVJFX0NBUEFDSVRZOgorCQkJY2FzZSBMYWJlbHNQYWNrYWdlLlRSQU5TUE9SVF9SRUxBVElPTlNISVBfTEFCRUxfX0NBUEFDSVRZOgorCQkJY2FzZSBMYWJlbHNQYWNrYWdlLlRSQU5TUE9SVF9SRUxBVElPTlNISVBfTEFCRUxfX01BWElNVU1fQ0FQQUNJVFk6CisJCQljYXNlIExhYmVsc1BhY2thZ2UuVFJBTlNQT1JUX1JFTEFUSU9OU0hJUF9MQUJFTF9fVFJBTlNJVF9USU1FOgorCQkJY2FzZSBMYWJlbHNQYWNrYWdlLlRSQU5TUE9SVF9SRUxBVElPTlNISVBfTEFCRUxfX1NUQVJUX1VQX0RFTEFZOgorCQkJCWZpcmVOb3RpZnlDaGFuZ2VkKG5ldyBWaWV3ZXJOb3RpZmljYXRpb24obm90aWZpY2F0aW9uLCBub3RpZmljYXRpb24uZ2V0Tm90aWZpZXIoKSwgZmFsc2UsIHRydWUpKTsKKwkJCQlyZXR1cm47CisJCX0KKwkJc3VwZXIubm90aWZ5Q2hhbmdlZChub3RpZmljYXRpb24pOworCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmVkaXQuY29tbWFuZC5Db21tYW5kUGFyYW1ldGVyfXMgZGVzY3JpYmluZyB0aGUgY2hpbGRyZW4KKwkgKiB0aGF0IGNhbiBiZSBjcmVhdGVkIHVuZGVyIHRoaXMgb2JqZWN0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MKKwkgKiAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIGNvbGxlY3ROZXdDaGlsZERlc2NyaXB0b3JzKENvbGxlY3Rpb248T2JqZWN0PiBuZXdDaGlsZERlc2NyaXB0b3JzLCBPYmplY3Qgb2JqZWN0KSB7CisJCXN1cGVyLmNvbGxlY3ROZXdDaGlsZERlc2NyaXB0b3JzKG5ld0NoaWxkRGVzY3JpcHRvcnMsIG9iamVjdCk7CisJfQorCisJLyoqCisJICogUmV0dXJuIHRoZSByZXNvdXJjZSBsb2NhdG9yIGZvciB0aGlzIGl0ZW0gcHJvdmlkZXIncyByZXNvdXJjZXMuIDwhLS0KKwkgKiBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogCisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBSZXNvdXJjZUxvY2F0b3IgZ2V0UmVzb3VyY2VMb2NhdG9yKCkgeworCQlyZXR1cm4gRGVmaW5pdGlvbnNFZGl0UGx1Z2luLklOU1RBTkNFOworCX0KKworfQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL2xhYmVscy9wcm92aWRlci9UcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbFZhbHVlSXRlbVByb3ZpZGVyLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvbGFiZWxzL3Byb3ZpZGVyL1RyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsVmFsdWVJdGVtUHJvdmlkZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YzdmODU3Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL2xhYmVscy9wcm92aWRlci9UcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbFZhbHVlSXRlbVByb3ZpZGVyLmphdmEKQEAgLTAsMCArMSwxNDYgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMucHJvdmlkZXI7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5BZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlJlc291cmNlTG9jYXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5Db21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklFZGl0aW5nRG9tYWluSXRlbVByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtTGFiZWxQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbVByb3BlcnR5RGVzY3JpcHRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbVByb3BlcnR5U291cmNlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklTdHJ1Y3R1cmVkSXRlbUNvbnRlbnRQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JVHJlZUl0ZW1Db250ZW50UHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSXRlbVByb3BlcnR5RGVzY3JpcHRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5WaWV3ZXJOb3RpZmljYXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLnByb3ZpZGVyLkxhYmVsVmFsdWVJdGVtUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5lZGdlcy5wcm92aWRlci5EZWZpbml0aW9uc0VkaXRQbHVnaW47CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuTGFiZWxzUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5UcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbFZhbHVlOworCisvKioKKyAqIFRoaXMgaXMgdGhlIGl0ZW0gcHJvdmlkZXIgYWRhcHRlciBmb3IgYSB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxWYWx1ZX0gb2JqZWN0LgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBUcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbFZhbHVlSXRlbVByb3ZpZGVyIGV4dGVuZHMKKwkJTGFiZWxWYWx1ZUl0ZW1Qcm92aWRlciBpbXBsZW1lbnRzIElFZGl0aW5nRG9tYWluSXRlbVByb3ZpZGVyLAorCQlJU3RydWN0dXJlZEl0ZW1Db250ZW50UHJvdmlkZXIsIElUcmVlSXRlbUNvbnRlbnRQcm92aWRlciwKKwkJSUl0ZW1MYWJlbFByb3ZpZGVyLCBJSXRlbVByb3BlcnR5U291cmNlIHsKKwkvKioKKwkgKiBUaGlzIGNvbnN0cnVjdHMgYW4gaW5zdGFuY2UgZnJvbSBhIGZhY3RvcnkgYW5kIGEgbm90aWZpZXIuIDwhLS0KKwkgKiBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBUcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbFZhbHVlSXRlbVByb3ZpZGVyKAorCQkJQWRhcHRlckZhY3RvcnkgYWRhcHRlckZhY3RvcnkpIHsKKwkJc3VwZXIoYWRhcHRlckZhY3RvcnkpOworCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyB0aGUgcHJvcGVydHkgZGVzY3JpcHRvcnMgZm9yIHRoZSBhZGFwdGVkIGNsYXNzLiA8IS0tCisJICogYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgTGlzdDxJSXRlbVByb3BlcnR5RGVzY3JpcHRvcj4gZ2V0UHJvcGVydHlEZXNjcmlwdG9ycyhPYmplY3Qgb2JqZWN0KSB7CisJCWlmIChpdGVtUHJvcGVydHlEZXNjcmlwdG9ycyA9PSBudWxsKSB7CisJCQlzdXBlci5nZXRQcm9wZXJ0eURlc2NyaXB0b3JzKG9iamVjdCk7CisKKwkJCWFkZEF2YWlsYWJsZURlcGFydHVyZUNhcGFjaXR5UHJvcG9ydGlvblByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QpOworCQl9CisJCXJldHVybiBpdGVtUHJvcGVydHlEZXNjcmlwdG9yczsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFkZHMgYSBwcm9wZXJ0eSBkZXNjcmlwdG9yIGZvciB0aGUgQXZhaWxhYmxlIERlcGFydHVyZSBDYXBhY2l0eSBQcm9wb3J0aW9uIGZlYXR1cmUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgYWRkQXZhaWxhYmxlRGVwYXJ0dXJlQ2FwYWNpdHlQcm9wb3J0aW9uUHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdCBvYmplY3QpIHsKKwkJaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMuYWRkCisJCQkoY3JlYXRlSXRlbVByb3BlcnR5RGVzY3JpcHRvcgorCQkJCSgoKENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnkpYWRhcHRlckZhY3RvcnkpLmdldFJvb3RBZGFwdGVyRmFjdG9yeSgpLAorCQkJCSBnZXRSZXNvdXJjZUxvY2F0b3IoKSwKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxWYWx1ZV9hdmFpbGFibGVEZXBhcnR1cmVDYXBhY2l0eVByb3BvcnRpb25fZmVhdHVyZSIpLCAvLyROT04tTkxTLTEkCisJCQkJIGdldFN0cmluZygiX1VJX1Byb3BlcnR5RGVzY3JpcHRvcl9kZXNjcmlwdGlvbiIsICJfVUlfVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxWYWx1ZV9hdmFpbGFibGVEZXBhcnR1cmVDYXBhY2l0eVByb3BvcnRpb25fZmVhdHVyZSIsICJfVUlfVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxWYWx1ZV90eXBlIiksIC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJCAvLyROT04tTkxTLTMkCisJCQkJIExhYmVsc1BhY2thZ2UuTGl0ZXJhbHMuVFJBTlNQT1JUX1JFTEFUSU9OU0hJUF9MQUJFTF9WQUxVRV9fQVZBSUxBQkxFX0RFUEFSVFVSRV9DQVBBQ0lUWV9QUk9QT1JUSU9OLAorCQkJCSB0cnVlLAorCQkJCSBmYWxzZSwKKwkJCQkgZmFsc2UsCisJCQkJIEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IuUkVBTF9WQUxVRV9JTUFHRSwKKwkJCQkgbnVsbCwKKwkJCQkgbnVsbCkpOworCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyB0aGUgbGFiZWwgdGV4dCBmb3IgdGhlIGFkYXB0ZWQgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYworCSAqIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIFN0cmluZyBnZXRUZXh0KE9iamVjdCBvYmplY3QpIHsKKwkJVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxWYWx1ZSB0cmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbFZhbHVlID0gKFRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsVmFsdWUpb2JqZWN0OworCQlyZXR1cm4gZ2V0U3RyaW5nKCJfVUlfVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxWYWx1ZV90eXBlIikgKyAiICIgKyB0cmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbFZhbHVlLmdldEF2YWlsYWJsZURlcGFydHVyZUNhcGFjaXR5UHJvcG9ydGlvbigpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKKwl9CisKKwkvKioKKwkgKiBUaGlzIGhhbmRsZXMgbW9kZWwgbm90aWZpY2F0aW9ucyBieSBjYWxsaW5nIHtAbGluayAjdXBkYXRlQ2hpbGRyZW59IHRvIHVwZGF0ZSBhbnkgY2FjaGVkCisJICogY2hpbGRyZW4gYW5kIGJ5IGNyZWF0aW5nIGEgdmlld2VyIG5vdGlmaWNhdGlvbiwgd2hpY2ggaXQgcGFzc2VzIHRvIHtAbGluayAjZmlyZU5vdGlmeUNoYW5nZWR9LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0KKwkgKiBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIG5vdGlmeUNoYW5nZWQoTm90aWZpY2F0aW9uIG5vdGlmaWNhdGlvbikgeworCQl1cGRhdGVDaGlsZHJlbihub3RpZmljYXRpb24pOworCisJCXN3aXRjaCAobm90aWZpY2F0aW9uLmdldEZlYXR1cmVJRChUcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbFZhbHVlLmNsYXNzKSkgeworCQkJY2FzZSBMYWJlbHNQYWNrYWdlLlRSQU5TUE9SVF9SRUxBVElPTlNISVBfTEFCRUxfVkFMVUVfX0FWQUlMQUJMRV9ERVBBUlRVUkVfQ0FQQUNJVFlfUFJPUE9SVElPTjoKKwkJCQlmaXJlTm90aWZ5Q2hhbmdlZChuZXcgVmlld2VyTm90aWZpY2F0aW9uKG5vdGlmaWNhdGlvbiwgbm90aWZpY2F0aW9uLmdldE5vdGlmaWVyKCksIGZhbHNlLCB0cnVlKSk7CisJCQkJcmV0dXJuOworCQl9CisJCXN1cGVyLm5vdGlmeUNoYW5nZWQobm90aWZpY2F0aW9uKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFkZHMge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lZGl0LmNvbW1hbmQuQ29tbWFuZFBhcmFtZXRlcn1zIGRlc2NyaWJpbmcgdGhlIGNoaWxkcmVuCisJICogdGhhdCBjYW4gYmUgY3JlYXRlZCB1bmRlciB0aGlzIG9iamVjdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jCisJICogLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgdm9pZCBjb2xsZWN0TmV3Q2hpbGREZXNjcmlwdG9ycyhDb2xsZWN0aW9uPE9iamVjdD4gbmV3Q2hpbGREZXNjcmlwdG9ycywgT2JqZWN0IG9iamVjdCkgeworCQlzdXBlci5jb2xsZWN0TmV3Q2hpbGREZXNjcmlwdG9ycyhuZXdDaGlsZERlc2NyaXB0b3JzLCBvYmplY3QpOworCX0KKworCS8qKgorCSAqIFJldHVybiB0aGUgcmVzb3VyY2UgbG9jYXRvciBmb3IgdGhpcyBpdGVtIHByb3ZpZGVyJ3MgcmVzb3VyY2VzLiA8IS0tCisJICogYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgUmVzb3VyY2VMb2NhdG9yIGdldFJlc291cmNlTG9jYXRvcigpIHsKKwkJcmV0dXJuIERlZmluaXRpb25zRWRpdFBsdWdpbi5JTlNUQU5DRTsKKwl9CisKK30KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy9sYWJlbHMvdXRpbC9MYWJlbHNBZGFwdGVyRmFjdG9yeS5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL2xhYmVscy91dGlsL0xhYmVsc0FkYXB0ZXJGYWN0b3J5LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzJkZjA0NAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy9sYWJlbHMvdXRpbC9MYWJlbHNBZGFwdGVyRmFjdG9yeS5qYXZhCkBAIC0wLDAgKzEsNjQ2IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLnV0aWw7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuQWRhcHRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmllcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5pbXBsLkFkYXB0ZXJGYWN0b3J5SW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLklkZW50aWZpYWJsZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLlNhbml0eUNoZWNrZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkR5bmFtaWNFZGdlTGFiZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkR5bmFtaWNMYWJlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguRWRnZUxhYmVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5MYWJlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguTGFiZWxWYWx1ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguTm9kZUxhYmVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5TdGF0aWNFZGdlTGFiZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLlN0YXRpY0xhYmVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5TdGF0aWNOb2RlTGFiZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLk1vZGlmaWFibGU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuKjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5BcmVhTGFiZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuQXJlYUxhYmVsVmFsdWU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuQ29tbW9uQm9yZGVyUmVsYXRpb25zaGlwTGFiZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuQ29tbW9uQm9yZGVyUmVsYXRpb25zaGlwTGFiZWxWYWx1ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5FYXJ0aFNjaWVuY2VMYWJlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5FYXJ0aFNjaWVuY2VMYWJlbFZhbHVlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLkxhYmVsc1BhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuUGh5c2ljYWxSZWxhdGlvbnNoaXBMYWJlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5QaHlzaWNhbFJlbGF0aW9uc2hpcExhYmVsVmFsdWU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuUG9wdWxhdGlvbkxhYmVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLlBvcHVsYXRpb25MYWJlbFZhbHVlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLlJlbGF0aXZlUGh5c2ljYWxSZWxhdGlvbnNoaXBMYWJlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5SZWxhdGl2ZVBoeXNpY2FsUmVsYXRpb25zaGlwTGFiZWxWYWx1ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5Sb2FkVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuUm9hZFRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsVmFsdWU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxWYWx1ZTsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiBUaGUgPGI+QWRhcHRlciBGYWN0b3J5PC9iPiBmb3IgdGhlIG1vZGVsLiBJdAorICogcHJvdmlkZXMgYW4gYWRhcHRlciA8Y29kZT5jcmVhdGVYWFg8L2NvZGU+IG1ldGhvZCBmb3IgZWFjaCBjbGFzcyBvZiB0aGUKKyAqIG1vZGVsLiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuTGFiZWxzUGFja2FnZQorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgTGFiZWxzQWRhcHRlckZhY3RvcnkgZXh0ZW5kcyBBZGFwdGVyRmFjdG9yeUltcGwgeworCS8qKgorCSAqIFRoZSBjYWNoZWQgbW9kZWwgcGFja2FnZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHN0YXRpYyBMYWJlbHNQYWNrYWdlIG1vZGVsUGFja2FnZTsKKworCS8qKgorCSAqIENyZWF0ZXMgYW4gaW5zdGFuY2Ugb2YgdGhlIGFkYXB0ZXIgZmFjdG9yeS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tCisJICogZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgTGFiZWxzQWRhcHRlckZhY3RvcnkoKSB7CisJCWlmIChtb2RlbFBhY2thZ2UgPT0gbnVsbCkgeworCQkJbW9kZWxQYWNrYWdlID0gTGFiZWxzUGFja2FnZS5lSU5TVEFOQ0U7CisJCX0KKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHdoZXRoZXIgdGhpcyBmYWN0b3J5IGlzIGFwcGxpY2FibGUgZm9yIHRoZSB0eXBlIG9mIHRoZSBvYmplY3QuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIDxjb2RlPnRydWU8L2NvZGU+CisJICogaWYgdGhlIG9iamVjdCBpcyBlaXRoZXIgdGhlIG1vZGVsJ3MgcGFja2FnZSBvciBpcyBhbiBpbnN0YW5jZSBvYmplY3Qgb2YKKwkgKiB0aGUgbW9kZWwuCisJICogCisJICogQHBhcmFtIG9iamVjdAorCSAqIAorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gd2hldGhlciB0aGlzIGZhY3RvcnkgaXMgYXBwbGljYWJsZSBmb3IgdGhlIHR5cGUgb2YgdGhlIG9iamVjdC4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIGJvb2xlYW4gaXNGYWN0b3J5Rm9yVHlwZShPYmplY3Qgb2JqZWN0KSB7CisJCWlmIChvYmplY3QgPT0gbW9kZWxQYWNrYWdlKSB7CisJCQlyZXR1cm4gdHJ1ZTsKKwkJfQorCQlpZiAob2JqZWN0IGluc3RhbmNlb2YgRU9iamVjdCkgeworCQkJcmV0dXJuICgoRU9iamVjdClvYmplY3QpLmVDbGFzcygpLmdldEVQYWNrYWdlKCkgPT0gbW9kZWxQYWNrYWdlOworCQl9CisJCXJldHVybiBmYWxzZTsKKwl9CisKKwkvKioKKwkgKiBUaGUgc3dpdGNoIHRoZSBkZWxlZ2F0ZXMgdG8gdGhlIDxjb2RlPmNyZWF0ZVhYWDwvY29kZT4gbWV0aG9kcy4gPCEtLQorCSAqIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIExhYmVsc1N3aXRjaDxBZGFwdGVyPiBtb2RlbFN3aXRjaCA9CisJCW5ldyBMYWJlbHNTd2l0Y2g8QWRhcHRlcj4oKSB7CisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyBBZGFwdGVyIGNhc2VBcmVhTGFiZWwoQXJlYUxhYmVsIG9iamVjdCkgeworCQkJCXJldHVybiBjcmVhdGVBcmVhTGFiZWxBZGFwdGVyKCk7CisJCQl9CisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyBBZGFwdGVyIGNhc2VBcmVhTGFiZWxWYWx1ZShBcmVhTGFiZWxWYWx1ZSBvYmplY3QpIHsKKwkJCQlyZXR1cm4gY3JlYXRlQXJlYUxhYmVsVmFsdWVBZGFwdGVyKCk7CisJCQl9CisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyBBZGFwdGVyIGNhc2VDb21tb25Cb3JkZXJSZWxhdGlvbnNoaXBMYWJlbChDb21tb25Cb3JkZXJSZWxhdGlvbnNoaXBMYWJlbCBvYmplY3QpIHsKKwkJCQlyZXR1cm4gY3JlYXRlQ29tbW9uQm9yZGVyUmVsYXRpb25zaGlwTGFiZWxBZGFwdGVyKCk7CisJCQl9CisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyBBZGFwdGVyIGNhc2VDb21tb25Cb3JkZXJSZWxhdGlvbnNoaXBMYWJlbFZhbHVlKENvbW1vbkJvcmRlclJlbGF0aW9uc2hpcExhYmVsVmFsdWUgb2JqZWN0KSB7CisJCQkJcmV0dXJuIGNyZWF0ZUNvbW1vbkJvcmRlclJlbGF0aW9uc2hpcExhYmVsVmFsdWVBZGFwdGVyKCk7CisJCQl9CisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyBBZGFwdGVyIGNhc2VQaHlzaWNhbFJlbGF0aW9uc2hpcExhYmVsKFBoeXNpY2FsUmVsYXRpb25zaGlwTGFiZWwgb2JqZWN0KSB7CisJCQkJcmV0dXJuIGNyZWF0ZVBoeXNpY2FsUmVsYXRpb25zaGlwTGFiZWxBZGFwdGVyKCk7CisJCQl9CisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyBBZGFwdGVyIGNhc2VQb3B1bGF0aW9uTGFiZWwoUG9wdWxhdGlvbkxhYmVsIG9iamVjdCkgeworCQkJCXJldHVybiBjcmVhdGVQb3B1bGF0aW9uTGFiZWxBZGFwdGVyKCk7CisJCQl9CisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyBBZGFwdGVyIGNhc2VQb3B1bGF0aW9uTGFiZWxWYWx1ZShQb3B1bGF0aW9uTGFiZWxWYWx1ZSBvYmplY3QpIHsKKwkJCQlyZXR1cm4gY3JlYXRlUG9wdWxhdGlvbkxhYmVsVmFsdWVBZGFwdGVyKCk7CisJCQl9CisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyBBZGFwdGVyIGNhc2VSZWxhdGl2ZVBoeXNpY2FsUmVsYXRpb25zaGlwTGFiZWwoUmVsYXRpdmVQaHlzaWNhbFJlbGF0aW9uc2hpcExhYmVsIG9iamVjdCkgeworCQkJCXJldHVybiBjcmVhdGVSZWxhdGl2ZVBoeXNpY2FsUmVsYXRpb25zaGlwTGFiZWxBZGFwdGVyKCk7CisJCQl9CisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyBBZGFwdGVyIGNhc2VSZWxhdGl2ZVBoeXNpY2FsUmVsYXRpb25zaGlwTGFiZWxWYWx1ZShSZWxhdGl2ZVBoeXNpY2FsUmVsYXRpb25zaGlwTGFiZWxWYWx1ZSBvYmplY3QpIHsKKwkJCQlyZXR1cm4gY3JlYXRlUmVsYXRpdmVQaHlzaWNhbFJlbGF0aW9uc2hpcExhYmVsVmFsdWVBZGFwdGVyKCk7CisJCQl9CisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyBBZGFwdGVyIGNhc2VUcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbChUcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbCBvYmplY3QpIHsKKwkJCQlyZXR1cm4gY3JlYXRlVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxBZGFwdGVyKCk7CisJCQl9CisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyBBZGFwdGVyIGNhc2VUcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbFZhbHVlKFRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsVmFsdWUgb2JqZWN0KSB7CisJCQkJcmV0dXJuIGNyZWF0ZVRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsVmFsdWVBZGFwdGVyKCk7CisJCQl9CisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyBBZGFwdGVyIGNhc2VQaHlzaWNhbFJlbGF0aW9uc2hpcExhYmVsVmFsdWUoUGh5c2ljYWxSZWxhdGlvbnNoaXBMYWJlbFZhbHVlIG9iamVjdCkgeworCQkJCXJldHVybiBjcmVhdGVQaHlzaWNhbFJlbGF0aW9uc2hpcExhYmVsVmFsdWVBZGFwdGVyKCk7CisJCQl9CisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyBBZGFwdGVyIGNhc2VSb2FkVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWwoUm9hZFRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsIG9iamVjdCkgeworCQkJCXJldHVybiBjcmVhdGVSb2FkVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxBZGFwdGVyKCk7CisJCQl9CisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyBBZGFwdGVyIGNhc2VSb2FkVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxWYWx1ZShSb2FkVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxWYWx1ZSBvYmplY3QpIHsKKwkJCQlyZXR1cm4gY3JlYXRlUm9hZFRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsVmFsdWVBZGFwdGVyKCk7CisJCQl9CisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyBBZGFwdGVyIGNhc2VFYXJ0aFNjaWVuY2VMYWJlbChFYXJ0aFNjaWVuY2VMYWJlbCBvYmplY3QpIHsKKwkJCQlyZXR1cm4gY3JlYXRlRWFydGhTY2llbmNlTGFiZWxBZGFwdGVyKCk7CisJCQl9CisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyBBZGFwdGVyIGNhc2VFYXJ0aFNjaWVuY2VMYWJlbFZhbHVlKEVhcnRoU2NpZW5jZUxhYmVsVmFsdWUgb2JqZWN0KSB7CisJCQkJcmV0dXJuIGNyZWF0ZUVhcnRoU2NpZW5jZUxhYmVsVmFsdWVBZGFwdGVyKCk7CisJCQl9CisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyA8VD4gQWRhcHRlciBjYXNlQ29tcGFyYWJsZShDb21wYXJhYmxlPFQ+IG9iamVjdCkgeworCQkJCXJldHVybiBjcmVhdGVDb21wYXJhYmxlQWRhcHRlcigpOworCQkJfQorCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgQWRhcHRlciBjYXNlSWRlbnRpZmlhYmxlKElkZW50aWZpYWJsZSBvYmplY3QpIHsKKwkJCQlyZXR1cm4gY3JlYXRlSWRlbnRpZmlhYmxlQWRhcHRlcigpOworCQkJfQorCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgQWRhcHRlciBjYXNlTGFiZWwoTGFiZWwgb2JqZWN0KSB7CisJCQkJcmV0dXJuIGNyZWF0ZUxhYmVsQWRhcHRlcigpOworCQkJfQorCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgQWRhcHRlciBjYXNlTm9kZUxhYmVsKE5vZGVMYWJlbCBvYmplY3QpIHsKKwkJCQlyZXR1cm4gY3JlYXRlTm9kZUxhYmVsQWRhcHRlcigpOworCQkJfQorCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgQWRhcHRlciBjYXNlTW9kaWZpYWJsZShNb2RpZmlhYmxlIG9iamVjdCkgeworCQkJCXJldHVybiBjcmVhdGVNb2RpZmlhYmxlQWRhcHRlcigpOworCQkJfQorCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgQWRhcHRlciBjYXNlU3RhdGljTGFiZWwoU3RhdGljTGFiZWwgb2JqZWN0KSB7CisJCQkJcmV0dXJuIGNyZWF0ZVN0YXRpY0xhYmVsQWRhcHRlcigpOworCQkJfQorCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgQWRhcHRlciBjYXNlU3RhdGljTm9kZUxhYmVsKFN0YXRpY05vZGVMYWJlbCBvYmplY3QpIHsKKwkJCQlyZXR1cm4gY3JlYXRlU3RhdGljTm9kZUxhYmVsQWRhcHRlcigpOworCQkJfQorCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgQWRhcHRlciBjYXNlU2FuaXR5Q2hlY2tlcihTYW5pdHlDaGVja2VyIG9iamVjdCkgeworCQkJCXJldHVybiBjcmVhdGVTYW5pdHlDaGVja2VyQWRhcHRlcigpOworCQkJfQorCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgQWRhcHRlciBjYXNlTGFiZWxWYWx1ZShMYWJlbFZhbHVlIG9iamVjdCkgeworCQkJCXJldHVybiBjcmVhdGVMYWJlbFZhbHVlQWRhcHRlcigpOworCQkJfQorCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgQWRhcHRlciBjYXNlRWRnZUxhYmVsKEVkZ2VMYWJlbCBvYmplY3QpIHsKKwkJCQlyZXR1cm4gY3JlYXRlRWRnZUxhYmVsQWRhcHRlcigpOworCQkJfQorCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgQWRhcHRlciBjYXNlU3RhdGljRWRnZUxhYmVsKFN0YXRpY0VkZ2VMYWJlbCBvYmplY3QpIHsKKwkJCQlyZXR1cm4gY3JlYXRlU3RhdGljRWRnZUxhYmVsQWRhcHRlcigpOworCQkJfQorCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgQWRhcHRlciBjYXNlRHluYW1pY0xhYmVsKER5bmFtaWNMYWJlbCBvYmplY3QpIHsKKwkJCQlyZXR1cm4gY3JlYXRlRHluYW1pY0xhYmVsQWRhcHRlcigpOworCQkJfQorCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgQWRhcHRlciBjYXNlRHluYW1pY0VkZ2VMYWJlbChEeW5hbWljRWRnZUxhYmVsIG9iamVjdCkgeworCQkJCXJldHVybiBjcmVhdGVEeW5hbWljRWRnZUxhYmVsQWRhcHRlcigpOworCQkJfQorCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgQWRhcHRlciBkZWZhdWx0Q2FzZShFT2JqZWN0IG9iamVjdCkgeworCQkJCXJldHVybiBjcmVhdGVFT2JqZWN0QWRhcHRlcigpOworCQkJfQorCQl9OworCisJLyoqCisJICogQ3JlYXRlcyBhbiBhZGFwdGVyIGZvciB0aGUgPGNvZGU+dGFyZ2V0PC9jb2RlPi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jCisJICogLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSB0YXJnZXQgdGhlIG9iamVjdCB0byBhZGFwdC4KKwkgKiBAcmV0dXJuIHRoZSBhZGFwdGVyIGZvciB0aGUgPGNvZGU+dGFyZ2V0PC9jb2RlPi4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlQWRhcHRlcihOb3RpZmllciB0YXJnZXQpIHsKKwkJcmV0dXJuIG1vZGVsU3dpdGNoLmRvU3dpdGNoKChFT2JqZWN0KXRhcmdldCk7CisJfQorCisKKwkvKioKKwkgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLlBvcHVsYXRpb25MYWJlbCA8ZW0+UG9wdWxhdGlvbiBMYWJlbDwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0CisJICogd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7IGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZQorCSAqIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuUG9wdWxhdGlvbkxhYmVsCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZVBvcHVsYXRpb25MYWJlbEFkYXB0ZXIoKSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuUG9wdWxhdGlvbkxhYmVsVmFsdWUgPGVtPlBvcHVsYXRpb24gTGFiZWwgVmFsdWU8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdAorCSAqIHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOyBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2UKKwkgKiB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5LiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLlBvcHVsYXRpb25MYWJlbFZhbHVlCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZVBvcHVsYXRpb25MYWJlbFZhbHVlQWRhcHRlcigpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5BcmVhTGFiZWwgPGVtPkFyZWEgTGFiZWw8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdAorCSAqIHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOyBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2UKKwkgKiB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5LiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLkFyZWFMYWJlbAorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVBcmVhTGFiZWxBZGFwdGVyKCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLkFyZWFMYWJlbFZhbHVlIDxlbT5BcmVhIExhYmVsIFZhbHVlPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQKKwkgKiB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsgaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlCisJICogd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5BcmVhTGFiZWxWYWx1ZQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVBcmVhTGFiZWxWYWx1ZUFkYXB0ZXIoKSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuUGh5c2ljYWxSZWxhdGlvbnNoaXBMYWJlbCA8ZW0+UGh5c2ljYWwgUmVsYXRpb25zaGlwIExhYmVsPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQKKwkgKiB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsgaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlCisJICogd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5QaHlzaWNhbFJlbGF0aW9uc2hpcExhYmVsCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZVBoeXNpY2FsUmVsYXRpb25zaGlwTGFiZWxBZGFwdGVyKCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLlJlbGF0aXZlUGh5c2ljYWxSZWxhdGlvbnNoaXBMYWJlbCA8ZW0+UmVsYXRpdmUgUGh5c2ljYWwgUmVsYXRpb25zaGlwIExhYmVsPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQKKwkgKiB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsgaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlCisJICogd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5SZWxhdGl2ZVBoeXNpY2FsUmVsYXRpb25zaGlwTGFiZWwKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlUmVsYXRpdmVQaHlzaWNhbFJlbGF0aW9uc2hpcExhYmVsQWRhcHRlcigpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5SZWxhdGl2ZVBoeXNpY2FsUmVsYXRpb25zaGlwTGFiZWxWYWx1ZSA8ZW0+UmVsYXRpdmUgUGh5c2ljYWwgUmVsYXRpb25zaGlwIExhYmVsIFZhbHVlPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQKKwkgKiB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsgaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlCisJICogd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5SZWxhdGl2ZVBoeXNpY2FsUmVsYXRpb25zaGlwTGFiZWxWYWx1ZQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVSZWxhdGl2ZVBoeXNpY2FsUmVsYXRpb25zaGlwTGFiZWxWYWx1ZUFkYXB0ZXIoKSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuQ29tbW9uQm9yZGVyUmVsYXRpb25zaGlwTGFiZWwgPGVtPkNvbW1vbiBCb3JkZXIgUmVsYXRpb25zaGlwIExhYmVsPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQKKwkgKiB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsgaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlCisJICogd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5Db21tb25Cb3JkZXJSZWxhdGlvbnNoaXBMYWJlbAorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVDb21tb25Cb3JkZXJSZWxhdGlvbnNoaXBMYWJlbEFkYXB0ZXIoKSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuQ29tbW9uQm9yZGVyUmVsYXRpb25zaGlwTGFiZWxWYWx1ZSA8ZW0+Q29tbW9uIEJvcmRlciBSZWxhdGlvbnNoaXAgTGFiZWwgVmFsdWU8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdAorCSAqIHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOyBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2UKKwkgKiB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5LiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLkNvbW1vbkJvcmRlclJlbGF0aW9uc2hpcExhYmVsVmFsdWUKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlQ29tbW9uQm9yZGVyUmVsYXRpb25zaGlwTGFiZWxWYWx1ZUFkYXB0ZXIoKSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWwgPGVtPlRyYW5zcG9ydCBSZWxhdGlvbnNoaXAgTGFiZWw8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOworCSAqIGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZSB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5LgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWwKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxBZGFwdGVyKCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLlRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsVmFsdWUgPGVtPlRyYW5zcG9ydCBSZWxhdGlvbnNoaXAgTGFiZWwgVmFsdWU8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOworCSAqIGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZSB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5LgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxWYWx1ZQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVUcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbFZhbHVlQWRhcHRlcigpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5QaHlzaWNhbFJlbGF0aW9uc2hpcExhYmVsVmFsdWUgPGVtPlBoeXNpY2FsIFJlbGF0aW9uc2hpcCBMYWJlbCBWYWx1ZTwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7CisJICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5QaHlzaWNhbFJlbGF0aW9uc2hpcExhYmVsVmFsdWUKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlUGh5c2ljYWxSZWxhdGlvbnNoaXBMYWJlbFZhbHVlQWRhcHRlcigpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5Sb2FkVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWwgPGVtPlJvYWQgVHJhbnNwb3J0IFJlbGF0aW9uc2hpcCBMYWJlbDwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7CisJICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5Sb2FkVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWwKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlUm9hZFRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsQWRhcHRlcigpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5Sb2FkVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxWYWx1ZSA8ZW0+Um9hZCBUcmFuc3BvcnQgUmVsYXRpb25zaGlwIExhYmVsIFZhbHVlPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsKKwkgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLlJvYWRUcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbFZhbHVlCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZVJvYWRUcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbFZhbHVlQWRhcHRlcigpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5FYXJ0aFNjaWVuY2VMYWJlbCA8ZW0+RWFydGggU2NpZW5jZSBMYWJlbDwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7CisJICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5FYXJ0aFNjaWVuY2VMYWJlbAorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVFYXJ0aFNjaWVuY2VMYWJlbEFkYXB0ZXIoKSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuRWFydGhTY2llbmNlTGFiZWxWYWx1ZSA8ZW0+RWFydGggU2NpZW5jZSBMYWJlbCBWYWx1ZTwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7CisJICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5FYXJ0aFNjaWVuY2VMYWJlbFZhbHVlCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZUVhcnRoU2NpZW5jZUxhYmVsVmFsdWVBZGFwdGVyKCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIGphdmEubGFuZy5Db21wYXJhYmxlIDxlbT5Db21wYXJhYmxlPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsKKwkgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KKwkgKiBAc2VlIGphdmEubGFuZy5Db21wYXJhYmxlCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZUNvbXBhcmFibGVBZGFwdGVyKCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uSWRlbnRpZmlhYmxlIDxlbT5JZGVudGlmaWFibGU8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdAorCSAqIHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOyBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2UKKwkgKiB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5LiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uSWRlbnRpZmlhYmxlCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZUlkZW50aWZpYWJsZUFkYXB0ZXIoKSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkxhYmVsIDxlbT5MYWJlbDwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0CisJICogd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7IGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZQorCSAqIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkxhYmVsCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZUxhYmVsQWRhcHRlcigpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguTm9kZUxhYmVsIDxlbT5Ob2RlIExhYmVsPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQKKwkgKiB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsgaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlCisJICogd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguTm9kZUxhYmVsCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZU5vZGVMYWJlbEFkYXB0ZXIoKSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLlN0YXRpY0xhYmVsIDxlbT5TdGF0aWMgTGFiZWw8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOworCSAqIGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZSB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5LgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLlN0YXRpY0xhYmVsCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZVN0YXRpY0xhYmVsQWRhcHRlcigpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuTW9kaWZpYWJsZSA8ZW0+TW9kaWZpYWJsZTwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7CisJICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuTW9kaWZpYWJsZQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVNb2RpZmlhYmxlQWRhcHRlcigpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguU3RhdGljTm9kZUxhYmVsIDxlbT5TdGF0aWMgTm9kZSBMYWJlbDwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0CisJICogd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7IGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZQorCSAqIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLlN0YXRpY05vZGVMYWJlbAorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVTdGF0aWNOb2RlTGFiZWxBZGFwdGVyKCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uU2FuaXR5Q2hlY2tlciA8ZW0+U2FuaXR5IENoZWNrZXI8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOworCSAqIGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZSB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5LgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5TYW5pdHlDaGVja2VyCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZVNhbml0eUNoZWNrZXJBZGFwdGVyKCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5MYWJlbFZhbHVlIDxlbT5MYWJlbCBWYWx1ZTwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0CisJICogd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7IGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZQorCSAqIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkxhYmVsVmFsdWUKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlTGFiZWxWYWx1ZUFkYXB0ZXIoKSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkVkZ2VMYWJlbCA8ZW0+RWRnZSBMYWJlbDwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7CisJICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguRWRnZUxhYmVsCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZUVkZ2VMYWJlbEFkYXB0ZXIoKSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLlN0YXRpY0VkZ2VMYWJlbCA8ZW0+U3RhdGljIEVkZ2UgTGFiZWw8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOworCSAqIGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZSB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5LgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLlN0YXRpY0VkZ2VMYWJlbAorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVTdGF0aWNFZGdlTGFiZWxBZGFwdGVyKCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5EeW5hbWljTGFiZWwgPGVtPkR5bmFtaWMgTGFiZWw8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOworCSAqIGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZSB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5LgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkR5bmFtaWNMYWJlbAorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVEeW5hbWljTGFiZWxBZGFwdGVyKCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5EeW5hbWljRWRnZUxhYmVsIDxlbT5EeW5hbWljIEVkZ2UgTGFiZWw8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOworCSAqIGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZSB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5LgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkR5bmFtaWNFZGdlTGFiZWwKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlRHluYW1pY0VkZ2VMYWJlbEFkYXB0ZXIoKSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgdGhlIGRlZmF1bHQgY2FzZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiBUaGlzCisJICogZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwuIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVFT2JqZWN0QWRhcHRlcigpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCit9IC8vIExhYmVsc0FkYXB0ZXJGYWN0b3J5CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvbGFiZWxzL3V0aWwvTGFiZWxzU3dpdGNoLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvbGFiZWxzL3V0aWwvTGFiZWxzU3dpdGNoLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWE0NGFkOQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy9sYWJlbHMvdXRpbC9MYWJlbHNTd2l0Y2guamF2YQpAQCAtMCwwICsxLDcyMSBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy51dGlsOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGphdmEudXRpbC5MaXN0OworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzczsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRVBhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5JZGVudGlmaWFibGU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5TYW5pdHlDaGVja2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5EeW5hbWljRWRnZUxhYmVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5EeW5hbWljTGFiZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkVkZ2VMYWJlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguTGFiZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkxhYmVsVmFsdWU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLk5vZGVMYWJlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguU3RhdGljRWRnZUxhYmVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5TdGF0aWNMYWJlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguU3RhdGljTm9kZUxhYmVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5Nb2RpZmlhYmxlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLio7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuQXJlYUxhYmVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLkFyZWFMYWJlbFZhbHVlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLkNvbW1vbkJvcmRlclJlbGF0aW9uc2hpcExhYmVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLkNvbW1vbkJvcmRlclJlbGF0aW9uc2hpcExhYmVsVmFsdWU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuRWFydGhTY2llbmNlTGFiZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuRWFydGhTY2llbmNlTGFiZWxWYWx1ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5MYWJlbHNQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLlBoeXNpY2FsUmVsYXRpb25zaGlwTGFiZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuUGh5c2ljYWxSZWxhdGlvbnNoaXBMYWJlbFZhbHVlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLlBvcHVsYXRpb25MYWJlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5Qb3B1bGF0aW9uTGFiZWxWYWx1ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5SZWxhdGl2ZVBoeXNpY2FsUmVsYXRpb25zaGlwTGFiZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuUmVsYXRpdmVQaHlzaWNhbFJlbGF0aW9uc2hpcExhYmVsVmFsdWU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuUm9hZFRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLlJvYWRUcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbFZhbHVlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLlRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLlRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsVmFsdWU7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gVGhlIDxiPlN3aXRjaDwvYj4gZm9yIHRoZSBtb2RlbCdzIGluaGVyaXRhbmNlCisgKiBoaWVyYXJjaHkuIEl0IHN1cHBvcnRzIHRoZSBjYWxsIHtAbGluayAjZG9Td2l0Y2goRU9iamVjdCkgZG9Td2l0Y2gob2JqZWN0KX0KKyAqIHRvIGludm9rZSB0aGUgPGNvZGU+Y2FzZVhYWDwvY29kZT4gbWV0aG9kIGZvciBlYWNoIGNsYXNzIG9mIHRoZSBtb2RlbCwKKyAqIHN0YXJ0aW5nIHdpdGggdGhlIGFjdHVhbCBjbGFzcyBvZiB0aGUgb2JqZWN0IGFuZCBwcm9jZWVkaW5nIHVwIHRoZQorICogaW5oZXJpdGFuY2UgaGllcmFyY2h5IHVudGlsIGEgbm9uLW51bGwgcmVzdWx0IGlzIHJldHVybmVkLCB3aGljaCBpcyB0aGUKKyAqIHJlc3VsdCBvZiB0aGUgc3dpdGNoLiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuTGFiZWxzUGFja2FnZQorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgTGFiZWxzU3dpdGNoPFQxPiB7CisJLyoqCisJICogVGhlIGNhY2hlZCBtb2RlbCBwYWNrYWdlCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBzdGF0aWMgTGFiZWxzUGFja2FnZSBtb2RlbFBhY2thZ2U7CisKKwkvKioKKwkgKiBDcmVhdGVzIGFuIGluc3RhbmNlIG9mIHRoZSBzd2l0Y2guCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLQorCSAqIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIExhYmVsc1N3aXRjaCgpIHsKKwkJaWYgKG1vZGVsUGFja2FnZSA9PSBudWxsKSB7CisJCQltb2RlbFBhY2thZ2UgPSBMYWJlbHNQYWNrYWdlLmVJTlNUQU5DRTsKKwkJfQorCX0KKworCS8qKgorCSAqIENhbGxzIDxjb2RlPmNhc2VYWFg8L2NvZGU+IGZvciBlYWNoIGNsYXNzIG9mIHRoZSBtb2RlbCB1bnRpbCBvbmUgcmV0dXJucyBhIG5vbiBudWxsIHJlc3VsdDsgaXQgeWllbGRzIHRoYXQgcmVzdWx0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgZmlyc3Qgbm9uLW51bGwgcmVzdWx0IHJldHVybmVkIGJ5IGEgPGNvZGU+Y2FzZVhYWDwvY29kZT4gY2FsbC4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFQxIGRvU3dpdGNoKEVPYmplY3QgdGhlRU9iamVjdCkgeworCQlyZXR1cm4gZG9Td2l0Y2godGhlRU9iamVjdC5lQ2xhc3MoKSwgdGhlRU9iamVjdCk7CisJfQorCisJLyoqCisJICogQ2FsbHMgPGNvZGU+Y2FzZVhYWDwvY29kZT4gZm9yIGVhY2ggY2xhc3Mgb2YgdGhlIG1vZGVsIHVudGlsIG9uZSByZXR1cm5zIGEgbm9uIG51bGwgcmVzdWx0OyBpdCB5aWVsZHMgdGhhdCByZXN1bHQuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBmaXJzdCBub24tbnVsbCByZXN1bHQgcmV0dXJuZWQgYnkgYSA8Y29kZT5jYXNlWFhYPC9jb2RlPiBjYWxsLgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgVDEgZG9Td2l0Y2goRUNsYXNzIHRoZUVDbGFzcywgRU9iamVjdCB0aGVFT2JqZWN0KSB7CisJCWlmICh0aGVFQ2xhc3MuZUNvbnRhaW5lcigpID09IG1vZGVsUGFja2FnZSkgeworCQkJcmV0dXJuIGRvU3dpdGNoKHRoZUVDbGFzcy5nZXRDbGFzc2lmaWVySUQoKSwgdGhlRU9iamVjdCk7CisJCX0KKwkJZWxzZSB7CisJCQlMaXN0PEVDbGFzcz4gZVN1cGVyVHlwZXMgPSB0aGVFQ2xhc3MuZ2V0RVN1cGVyVHlwZXMoKTsKKwkJCXJldHVybgorCQkJCWVTdXBlclR5cGVzLmlzRW1wdHkoKSA/CisJCQkJCWRlZmF1bHRDYXNlKHRoZUVPYmplY3QpIDoKKwkJCQkJZG9Td2l0Y2goZVN1cGVyVHlwZXMuZ2V0KDApLCB0aGVFT2JqZWN0KTsKKwkJfQorCX0KKworCS8qKgorCSAqIENhbGxzIDxjb2RlPmNhc2VYWFg8L2NvZGU+IGZvciBlYWNoIGNsYXNzIG9mIHRoZSBtb2RlbCB1bnRpbCBvbmUgcmV0dXJucyBhIG5vbiBudWxsIHJlc3VsdDsgaXQgeWllbGRzIHRoYXQgcmVzdWx0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgZmlyc3Qgbm9uLW51bGwgcmVzdWx0IHJldHVybmVkIGJ5IGEgPGNvZGU+Y2FzZVhYWDwvY29kZT4gY2FsbC4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIFQxIGRvU3dpdGNoKGludCBjbGFzc2lmaWVySUQsIEVPYmplY3QgdGhlRU9iamVjdCkgeworCQlzd2l0Y2ggKGNsYXNzaWZpZXJJRCkgeworCQkJY2FzZSBMYWJlbHNQYWNrYWdlLkFSRUFfTEFCRUw6IHsKKwkJCQlBcmVhTGFiZWwgYXJlYUxhYmVsID0gKEFyZWFMYWJlbCl0aGVFT2JqZWN0OworCQkJCVQxIHJlc3VsdCA9IGNhc2VBcmVhTGFiZWwoYXJlYUxhYmVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VTdGF0aWNOb2RlTGFiZWwoYXJlYUxhYmVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VOb2RlTGFiZWwoYXJlYUxhYmVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VTdGF0aWNMYWJlbChhcmVhTGFiZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZUxhYmVsKGFyZWFMYWJlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlTW9kaWZpYWJsZShhcmVhTGFiZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZUlkZW50aWZpYWJsZShhcmVhTGFiZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZUNvbXBhcmFibGUoYXJlYUxhYmVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGRlZmF1bHRDYXNlKHRoZUVPYmplY3QpOworCQkJCXJldHVybiByZXN1bHQ7CisJCQl9CisJCQljYXNlIExhYmVsc1BhY2thZ2UuQVJFQV9MQUJFTF9WQUxVRTogeworCQkJCUFyZWFMYWJlbFZhbHVlIGFyZWFMYWJlbFZhbHVlID0gKEFyZWFMYWJlbFZhbHVlKXRoZUVPYmplY3Q7CisJCQkJVDEgcmVzdWx0ID0gY2FzZUFyZWFMYWJlbFZhbHVlKGFyZWFMYWJlbFZhbHVlKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VMYWJlbFZhbHVlKGFyZWFMYWJlbFZhbHVlKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VTYW5pdHlDaGVja2VyKGFyZWFMYWJlbFZhbHVlKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGRlZmF1bHRDYXNlKHRoZUVPYmplY3QpOworCQkJCXJldHVybiByZXN1bHQ7CisJCQl9CisJCQljYXNlIExhYmVsc1BhY2thZ2UuQ09NTU9OX0JPUkRFUl9SRUxBVElPTlNISVBfTEFCRUw6IHsKKwkJCQlDb21tb25Cb3JkZXJSZWxhdGlvbnNoaXBMYWJlbCBjb21tb25Cb3JkZXJSZWxhdGlvbnNoaXBMYWJlbCA9IChDb21tb25Cb3JkZXJSZWxhdGlvbnNoaXBMYWJlbCl0aGVFT2JqZWN0OworCQkJCVQxIHJlc3VsdCA9IGNhc2VDb21tb25Cb3JkZXJSZWxhdGlvbnNoaXBMYWJlbChjb21tb25Cb3JkZXJSZWxhdGlvbnNoaXBMYWJlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlUGh5c2ljYWxSZWxhdGlvbnNoaXBMYWJlbChjb21tb25Cb3JkZXJSZWxhdGlvbnNoaXBMYWJlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlU3RhdGljRWRnZUxhYmVsKGNvbW1vbkJvcmRlclJlbGF0aW9uc2hpcExhYmVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VFZGdlTGFiZWwoY29tbW9uQm9yZGVyUmVsYXRpb25zaGlwTGFiZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZVN0YXRpY0xhYmVsKGNvbW1vbkJvcmRlclJlbGF0aW9uc2hpcExhYmVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VMYWJlbChjb21tb25Cb3JkZXJSZWxhdGlvbnNoaXBMYWJlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlTW9kaWZpYWJsZShjb21tb25Cb3JkZXJSZWxhdGlvbnNoaXBMYWJlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlSWRlbnRpZmlhYmxlKGNvbW1vbkJvcmRlclJlbGF0aW9uc2hpcExhYmVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VDb21wYXJhYmxlKGNvbW1vbkJvcmRlclJlbGF0aW9uc2hpcExhYmVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGRlZmF1bHRDYXNlKHRoZUVPYmplY3QpOworCQkJCXJldHVybiByZXN1bHQ7CisJCQl9CisJCQljYXNlIExhYmVsc1BhY2thZ2UuQ09NTU9OX0JPUkRFUl9SRUxBVElPTlNISVBfTEFCRUxfVkFMVUU6IHsKKwkJCQlDb21tb25Cb3JkZXJSZWxhdGlvbnNoaXBMYWJlbFZhbHVlIGNvbW1vbkJvcmRlclJlbGF0aW9uc2hpcExhYmVsVmFsdWUgPSAoQ29tbW9uQm9yZGVyUmVsYXRpb25zaGlwTGFiZWxWYWx1ZSl0aGVFT2JqZWN0OworCQkJCVQxIHJlc3VsdCA9IGNhc2VDb21tb25Cb3JkZXJSZWxhdGlvbnNoaXBMYWJlbFZhbHVlKGNvbW1vbkJvcmRlclJlbGF0aW9uc2hpcExhYmVsVmFsdWUpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZVBoeXNpY2FsUmVsYXRpb25zaGlwTGFiZWxWYWx1ZShjb21tb25Cb3JkZXJSZWxhdGlvbnNoaXBMYWJlbFZhbHVlKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VMYWJlbFZhbHVlKGNvbW1vbkJvcmRlclJlbGF0aW9uc2hpcExhYmVsVmFsdWUpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZVNhbml0eUNoZWNrZXIoY29tbW9uQm9yZGVyUmVsYXRpb25zaGlwTGFiZWxWYWx1ZSk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBkZWZhdWx0Q2FzZSh0aGVFT2JqZWN0KTsKKwkJCQlyZXR1cm4gcmVzdWx0OworCQkJfQorCQkJY2FzZSBMYWJlbHNQYWNrYWdlLlBIWVNJQ0FMX1JFTEFUSU9OU0hJUF9MQUJFTDogeworCQkJCVBoeXNpY2FsUmVsYXRpb25zaGlwTGFiZWwgcGh5c2ljYWxSZWxhdGlvbnNoaXBMYWJlbCA9IChQaHlzaWNhbFJlbGF0aW9uc2hpcExhYmVsKXRoZUVPYmplY3Q7CisJCQkJVDEgcmVzdWx0ID0gY2FzZVBoeXNpY2FsUmVsYXRpb25zaGlwTGFiZWwocGh5c2ljYWxSZWxhdGlvbnNoaXBMYWJlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlU3RhdGljRWRnZUxhYmVsKHBoeXNpY2FsUmVsYXRpb25zaGlwTGFiZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZUVkZ2VMYWJlbChwaHlzaWNhbFJlbGF0aW9uc2hpcExhYmVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VTdGF0aWNMYWJlbChwaHlzaWNhbFJlbGF0aW9uc2hpcExhYmVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VMYWJlbChwaHlzaWNhbFJlbGF0aW9uc2hpcExhYmVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VNb2RpZmlhYmxlKHBoeXNpY2FsUmVsYXRpb25zaGlwTGFiZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZUlkZW50aWZpYWJsZShwaHlzaWNhbFJlbGF0aW9uc2hpcExhYmVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VDb21wYXJhYmxlKHBoeXNpY2FsUmVsYXRpb25zaGlwTGFiZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gZGVmYXVsdENhc2UodGhlRU9iamVjdCk7CisJCQkJcmV0dXJuIHJlc3VsdDsKKwkJCX0KKwkJCWNhc2UgTGFiZWxzUGFja2FnZS5QT1BVTEFUSU9OX0xBQkVMOiB7CisJCQkJUG9wdWxhdGlvbkxhYmVsIHBvcHVsYXRpb25MYWJlbCA9IChQb3B1bGF0aW9uTGFiZWwpdGhlRU9iamVjdDsKKwkJCQlUMSByZXN1bHQgPSBjYXNlUG9wdWxhdGlvbkxhYmVsKHBvcHVsYXRpb25MYWJlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlU3RhdGljTm9kZUxhYmVsKHBvcHVsYXRpb25MYWJlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlTm9kZUxhYmVsKHBvcHVsYXRpb25MYWJlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlU3RhdGljTGFiZWwocG9wdWxhdGlvbkxhYmVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VMYWJlbChwb3B1bGF0aW9uTGFiZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZU1vZGlmaWFibGUocG9wdWxhdGlvbkxhYmVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VJZGVudGlmaWFibGUocG9wdWxhdGlvbkxhYmVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VDb21wYXJhYmxlKHBvcHVsYXRpb25MYWJlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBkZWZhdWx0Q2FzZSh0aGVFT2JqZWN0KTsKKwkJCQlyZXR1cm4gcmVzdWx0OworCQkJfQorCQkJY2FzZSBMYWJlbHNQYWNrYWdlLlBPUFVMQVRJT05fTEFCRUxfVkFMVUU6IHsKKwkJCQlQb3B1bGF0aW9uTGFiZWxWYWx1ZSBwb3B1bGF0aW9uTGFiZWxWYWx1ZSA9IChQb3B1bGF0aW9uTGFiZWxWYWx1ZSl0aGVFT2JqZWN0OworCQkJCVQxIHJlc3VsdCA9IGNhc2VQb3B1bGF0aW9uTGFiZWxWYWx1ZShwb3B1bGF0aW9uTGFiZWxWYWx1ZSk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlTGFiZWxWYWx1ZShwb3B1bGF0aW9uTGFiZWxWYWx1ZSk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlU2FuaXR5Q2hlY2tlcihwb3B1bGF0aW9uTGFiZWxWYWx1ZSk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBkZWZhdWx0Q2FzZSh0aGVFT2JqZWN0KTsKKwkJCQlyZXR1cm4gcmVzdWx0OworCQkJfQorCQkJY2FzZSBMYWJlbHNQYWNrYWdlLlJFTEFUSVZFX1BIWVNJQ0FMX1JFTEFUSU9OU0hJUF9MQUJFTDogeworCQkJCVJlbGF0aXZlUGh5c2ljYWxSZWxhdGlvbnNoaXBMYWJlbCByZWxhdGl2ZVBoeXNpY2FsUmVsYXRpb25zaGlwTGFiZWwgPSAoUmVsYXRpdmVQaHlzaWNhbFJlbGF0aW9uc2hpcExhYmVsKXRoZUVPYmplY3Q7CisJCQkJVDEgcmVzdWx0ID0gY2FzZVJlbGF0aXZlUGh5c2ljYWxSZWxhdGlvbnNoaXBMYWJlbChyZWxhdGl2ZVBoeXNpY2FsUmVsYXRpb25zaGlwTGFiZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZVBoeXNpY2FsUmVsYXRpb25zaGlwTGFiZWwocmVsYXRpdmVQaHlzaWNhbFJlbGF0aW9uc2hpcExhYmVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VTdGF0aWNFZGdlTGFiZWwocmVsYXRpdmVQaHlzaWNhbFJlbGF0aW9uc2hpcExhYmVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VFZGdlTGFiZWwocmVsYXRpdmVQaHlzaWNhbFJlbGF0aW9uc2hpcExhYmVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VTdGF0aWNMYWJlbChyZWxhdGl2ZVBoeXNpY2FsUmVsYXRpb25zaGlwTGFiZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZUxhYmVsKHJlbGF0aXZlUGh5c2ljYWxSZWxhdGlvbnNoaXBMYWJlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlTW9kaWZpYWJsZShyZWxhdGl2ZVBoeXNpY2FsUmVsYXRpb25zaGlwTGFiZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZUlkZW50aWZpYWJsZShyZWxhdGl2ZVBoeXNpY2FsUmVsYXRpb25zaGlwTGFiZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZUNvbXBhcmFibGUocmVsYXRpdmVQaHlzaWNhbFJlbGF0aW9uc2hpcExhYmVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGRlZmF1bHRDYXNlKHRoZUVPYmplY3QpOworCQkJCXJldHVybiByZXN1bHQ7CisJCQl9CisJCQljYXNlIExhYmVsc1BhY2thZ2UuUkVMQVRJVkVfUEhZU0lDQUxfUkVMQVRJT05TSElQX0xBQkVMX1ZBTFVFOiB7CisJCQkJUmVsYXRpdmVQaHlzaWNhbFJlbGF0aW9uc2hpcExhYmVsVmFsdWUgcmVsYXRpdmVQaHlzaWNhbFJlbGF0aW9uc2hpcExhYmVsVmFsdWUgPSAoUmVsYXRpdmVQaHlzaWNhbFJlbGF0aW9uc2hpcExhYmVsVmFsdWUpdGhlRU9iamVjdDsKKwkJCQlUMSByZXN1bHQgPSBjYXNlUmVsYXRpdmVQaHlzaWNhbFJlbGF0aW9uc2hpcExhYmVsVmFsdWUocmVsYXRpdmVQaHlzaWNhbFJlbGF0aW9uc2hpcExhYmVsVmFsdWUpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZUxhYmVsVmFsdWUocmVsYXRpdmVQaHlzaWNhbFJlbGF0aW9uc2hpcExhYmVsVmFsdWUpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZVNhbml0eUNoZWNrZXIocmVsYXRpdmVQaHlzaWNhbFJlbGF0aW9uc2hpcExhYmVsVmFsdWUpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gZGVmYXVsdENhc2UodGhlRU9iamVjdCk7CisJCQkJcmV0dXJuIHJlc3VsdDsKKwkJCX0KKwkJCWNhc2UgTGFiZWxzUGFja2FnZS5UUkFOU1BPUlRfUkVMQVRJT05TSElQX0xBQkVMOiB7CisJCQkJVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWwgdHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWwgPSAoVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWwpdGhlRU9iamVjdDsKKwkJCQlUMSByZXN1bHQgPSBjYXNlVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWwodHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZUR5bmFtaWNFZGdlTGFiZWwodHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZUR5bmFtaWNMYWJlbCh0cmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlRWRnZUxhYmVsKHRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VMYWJlbCh0cmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlSWRlbnRpZmlhYmxlKHRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VDb21wYXJhYmxlKHRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGRlZmF1bHRDYXNlKHRoZUVPYmplY3QpOworCQkJCXJldHVybiByZXN1bHQ7CisJCQl9CisJCQljYXNlIExhYmVsc1BhY2thZ2UuVFJBTlNQT1JUX1JFTEFUSU9OU0hJUF9MQUJFTF9WQUxVRTogeworCQkJCVRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsVmFsdWUgdHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxWYWx1ZSA9IChUcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbFZhbHVlKXRoZUVPYmplY3Q7CisJCQkJVDEgcmVzdWx0ID0gY2FzZVRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsVmFsdWUodHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxWYWx1ZSk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlTGFiZWxWYWx1ZSh0cmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbFZhbHVlKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VTYW5pdHlDaGVja2VyKHRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsVmFsdWUpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gZGVmYXVsdENhc2UodGhlRU9iamVjdCk7CisJCQkJcmV0dXJuIHJlc3VsdDsKKwkJCX0KKwkJCWNhc2UgTGFiZWxzUGFja2FnZS5QSFlTSUNBTF9SRUxBVElPTlNISVBfTEFCRUxfVkFMVUU6IHsKKwkJCQlQaHlzaWNhbFJlbGF0aW9uc2hpcExhYmVsVmFsdWUgcGh5c2ljYWxSZWxhdGlvbnNoaXBMYWJlbFZhbHVlID0gKFBoeXNpY2FsUmVsYXRpb25zaGlwTGFiZWxWYWx1ZSl0aGVFT2JqZWN0OworCQkJCVQxIHJlc3VsdCA9IGNhc2VQaHlzaWNhbFJlbGF0aW9uc2hpcExhYmVsVmFsdWUocGh5c2ljYWxSZWxhdGlvbnNoaXBMYWJlbFZhbHVlKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VMYWJlbFZhbHVlKHBoeXNpY2FsUmVsYXRpb25zaGlwTGFiZWxWYWx1ZSk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlU2FuaXR5Q2hlY2tlcihwaHlzaWNhbFJlbGF0aW9uc2hpcExhYmVsVmFsdWUpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gZGVmYXVsdENhc2UodGhlRU9iamVjdCk7CisJCQkJcmV0dXJuIHJlc3VsdDsKKwkJCX0KKwkJCWNhc2UgTGFiZWxzUGFja2FnZS5ST0FEX1RSQU5TUE9SVF9SRUxBVElPTlNISVBfTEFCRUw6IHsKKwkJCQlSb2FkVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWwgcm9hZFRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsID0gKFJvYWRUcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbCl0aGVFT2JqZWN0OworCQkJCVQxIHJlc3VsdCA9IGNhc2VSb2FkVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWwocm9hZFRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VQaHlzaWNhbFJlbGF0aW9uc2hpcExhYmVsKHJvYWRUcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlU3RhdGljRWRnZUxhYmVsKHJvYWRUcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlRWRnZUxhYmVsKHJvYWRUcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlU3RhdGljTGFiZWwocm9hZFRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VMYWJlbChyb2FkVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZU1vZGlmaWFibGUocm9hZFRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VJZGVudGlmaWFibGUocm9hZFRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VDb21wYXJhYmxlKHJvYWRUcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBkZWZhdWx0Q2FzZSh0aGVFT2JqZWN0KTsKKwkJCQlyZXR1cm4gcmVzdWx0OworCQkJfQorCQkJY2FzZSBMYWJlbHNQYWNrYWdlLlJPQURfVFJBTlNQT1JUX1JFTEFUSU9OU0hJUF9MQUJFTF9WQUxVRTogeworCQkJCVJvYWRUcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbFZhbHVlIHJvYWRUcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbFZhbHVlID0gKFJvYWRUcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbFZhbHVlKXRoZUVPYmplY3Q7CisJCQkJVDEgcmVzdWx0ID0gY2FzZVJvYWRUcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbFZhbHVlKHJvYWRUcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbFZhbHVlKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VQaHlzaWNhbFJlbGF0aW9uc2hpcExhYmVsVmFsdWUocm9hZFRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsVmFsdWUpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZUxhYmVsVmFsdWUocm9hZFRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsVmFsdWUpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZVNhbml0eUNoZWNrZXIocm9hZFRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsVmFsdWUpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gZGVmYXVsdENhc2UodGhlRU9iamVjdCk7CisJCQkJcmV0dXJuIHJlc3VsdDsKKwkJCX0KKwkJCWNhc2UgTGFiZWxzUGFja2FnZS5FQVJUSF9TQ0lFTkNFX0xBQkVMOiB7CisJCQkJRWFydGhTY2llbmNlTGFiZWwgZWFydGhTY2llbmNlTGFiZWwgPSAoRWFydGhTY2llbmNlTGFiZWwpdGhlRU9iamVjdDsKKwkJCQlUMSByZXN1bHQgPSBjYXNlRWFydGhTY2llbmNlTGFiZWwoZWFydGhTY2llbmNlTGFiZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZVN0YXRpY05vZGVMYWJlbChlYXJ0aFNjaWVuY2VMYWJlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlTm9kZUxhYmVsKGVhcnRoU2NpZW5jZUxhYmVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VTdGF0aWNMYWJlbChlYXJ0aFNjaWVuY2VMYWJlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlTGFiZWwoZWFydGhTY2llbmNlTGFiZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZU1vZGlmaWFibGUoZWFydGhTY2llbmNlTGFiZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZUlkZW50aWZpYWJsZShlYXJ0aFNjaWVuY2VMYWJlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlQ29tcGFyYWJsZShlYXJ0aFNjaWVuY2VMYWJlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBkZWZhdWx0Q2FzZSh0aGVFT2JqZWN0KTsKKwkJCQlyZXR1cm4gcmVzdWx0OworCQkJfQorCQkJY2FzZSBMYWJlbHNQYWNrYWdlLkVBUlRIX1NDSUVOQ0VfTEFCRUxfVkFMVUU6IHsKKwkJCQlFYXJ0aFNjaWVuY2VMYWJlbFZhbHVlIGVhcnRoU2NpZW5jZUxhYmVsVmFsdWUgPSAoRWFydGhTY2llbmNlTGFiZWxWYWx1ZSl0aGVFT2JqZWN0OworCQkJCVQxIHJlc3VsdCA9IGNhc2VFYXJ0aFNjaWVuY2VMYWJlbFZhbHVlKGVhcnRoU2NpZW5jZUxhYmVsVmFsdWUpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZUxhYmVsVmFsdWUoZWFydGhTY2llbmNlTGFiZWxWYWx1ZSk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlU2FuaXR5Q2hlY2tlcihlYXJ0aFNjaWVuY2VMYWJlbFZhbHVlKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGRlZmF1bHRDYXNlKHRoZUVPYmplY3QpOworCQkJCXJldHVybiByZXN1bHQ7CisJCQl9CisJCQlkZWZhdWx0OiByZXR1cm4gZGVmYXVsdENhc2UodGhlRU9iamVjdCk7CisJCX0KKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5Qb3B1bGF0aW9uIExhYmVsPC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOyByZXR1cm5pbmcgYQorCSAqIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KKwkgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5Qb3B1bGF0aW9uIExhYmVsPC9lbT4nLgorCSAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVDEgY2FzZVBvcHVsYXRpb25MYWJlbChQb3B1bGF0aW9uTGFiZWwgb2JqZWN0KSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPlBvcHVsYXRpb24gTGFiZWwgVmFsdWU8L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7IHJldHVybmluZyBhCisJICogbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgorCSAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPlBvcHVsYXRpb24gTGFiZWwgVmFsdWU8L2VtPicuCisJICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBUMSBjYXNlUG9wdWxhdGlvbkxhYmVsVmFsdWUoUG9wdWxhdGlvbkxhYmVsVmFsdWUgb2JqZWN0KSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkFyZWEgTGFiZWw8L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7IHJldHVybmluZyBhCisJICogbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgorCSAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkFyZWEgTGFiZWw8L2VtPicuCisJICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBUMSBjYXNlQXJlYUxhYmVsKEFyZWFMYWJlbCBvYmplY3QpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+QXJlYSBMYWJlbCBWYWx1ZTwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsgcmV0dXJuaW5nIGEKKwkgKiBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCisJICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+QXJlYSBMYWJlbCBWYWx1ZTwvZW0+Jy4KKwkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFQxIGNhc2VBcmVhTGFiZWxWYWx1ZShBcmVhTGFiZWxWYWx1ZSBvYmplY3QpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+UGh5c2ljYWwgUmVsYXRpb25zaGlwIExhYmVsPC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOyByZXR1cm5pbmcgYQorCSAqIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KKwkgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5QaHlzaWNhbCBSZWxhdGlvbnNoaXAgTGFiZWw8L2VtPicuCisJICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBUMSBjYXNlUGh5c2ljYWxSZWxhdGlvbnNoaXBMYWJlbChQaHlzaWNhbFJlbGF0aW9uc2hpcExhYmVsIG9iamVjdCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5SZWxhdGl2ZSBQaHlzaWNhbCBSZWxhdGlvbnNoaXAgTGFiZWw8L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7IHJldHVybmluZyBhCisJICogbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgorCSAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPlJlbGF0aXZlIFBoeXNpY2FsIFJlbGF0aW9uc2hpcCBMYWJlbDwvZW0+Jy4KKwkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFQxIGNhc2VSZWxhdGl2ZVBoeXNpY2FsUmVsYXRpb25zaGlwTGFiZWwoCisJCQlSZWxhdGl2ZVBoeXNpY2FsUmVsYXRpb25zaGlwTGFiZWwgb2JqZWN0KSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPlJlbGF0aXZlIFBoeXNpY2FsIFJlbGF0aW9uc2hpcCBMYWJlbCBWYWx1ZTwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsgcmV0dXJuaW5nIGEKKwkgKiBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCisJICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+UmVsYXRpdmUgUGh5c2ljYWwgUmVsYXRpb25zaGlwIExhYmVsIFZhbHVlPC9lbT4nLgorCSAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVDEgY2FzZVJlbGF0aXZlUGh5c2ljYWxSZWxhdGlvbnNoaXBMYWJlbFZhbHVlKAorCQkJUmVsYXRpdmVQaHlzaWNhbFJlbGF0aW9uc2hpcExhYmVsVmFsdWUgb2JqZWN0KSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkNvbW1vbiBCb3JkZXIgUmVsYXRpb25zaGlwIExhYmVsPC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOyByZXR1cm5pbmcgYQorCSAqIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KKwkgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5Db21tb24gQm9yZGVyIFJlbGF0aW9uc2hpcCBMYWJlbDwvZW0+Jy4KKwkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFQxIGNhc2VDb21tb25Cb3JkZXJSZWxhdGlvbnNoaXBMYWJlbCgKKwkJCUNvbW1vbkJvcmRlclJlbGF0aW9uc2hpcExhYmVsIG9iamVjdCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5Db21tb24gQm9yZGVyIFJlbGF0aW9uc2hpcCBMYWJlbCBWYWx1ZTwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsgcmV0dXJuaW5nIGEKKwkgKiBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCisJICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+Q29tbW9uIEJvcmRlciBSZWxhdGlvbnNoaXAgTGFiZWwgVmFsdWU8L2VtPicuCisJICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBUMSBjYXNlQ29tbW9uQm9yZGVyUmVsYXRpb25zaGlwTGFiZWxWYWx1ZSgKKwkJCUNvbW1vbkJvcmRlclJlbGF0aW9uc2hpcExhYmVsVmFsdWUgb2JqZWN0KSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPlRyYW5zcG9ydCBSZWxhdGlvbnNoaXAgTGFiZWw8L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsKKwkgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KKwkgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5UcmFuc3BvcnQgUmVsYXRpb25zaGlwIExhYmVsPC9lbT4nLgorCSAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVDEgY2FzZVRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsKFRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsIG9iamVjdCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5UcmFuc3BvcnQgUmVsYXRpb25zaGlwIExhYmVsIFZhbHVlPC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7CisJICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCisJICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+VHJhbnNwb3J0IFJlbGF0aW9uc2hpcCBMYWJlbCBWYWx1ZTwvZW0+Jy4KKwkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFQxIGNhc2VUcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbFZhbHVlKFRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsVmFsdWUgb2JqZWN0KSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPlBoeXNpY2FsIFJlbGF0aW9uc2hpcCBMYWJlbCBWYWx1ZTwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOworCSAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgorCSAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPlBoeXNpY2FsIFJlbGF0aW9uc2hpcCBMYWJlbCBWYWx1ZTwvZW0+Jy4KKwkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFQxIGNhc2VQaHlzaWNhbFJlbGF0aW9uc2hpcExhYmVsVmFsdWUoUGh5c2ljYWxSZWxhdGlvbnNoaXBMYWJlbFZhbHVlIG9iamVjdCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5Sb2FkIFRyYW5zcG9ydCBSZWxhdGlvbnNoaXAgTGFiZWw8L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsKKwkgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KKwkgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5Sb2FkIFRyYW5zcG9ydCBSZWxhdGlvbnNoaXAgTGFiZWw8L2VtPicuCisJICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBUMSBjYXNlUm9hZFRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsKFJvYWRUcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbCBvYmplY3QpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+Um9hZCBUcmFuc3BvcnQgUmVsYXRpb25zaGlwIExhYmVsIFZhbHVlPC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7CisJICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCisJICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+Um9hZCBUcmFuc3BvcnQgUmVsYXRpb25zaGlwIExhYmVsIFZhbHVlPC9lbT4nLgorCSAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVDEgY2FzZVJvYWRUcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbFZhbHVlKFJvYWRUcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbFZhbHVlIG9iamVjdCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5FYXJ0aCBTY2llbmNlIExhYmVsPC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7CisJICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCisJICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+RWFydGggU2NpZW5jZSBMYWJlbDwvZW0+Jy4KKwkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFQxIGNhc2VFYXJ0aFNjaWVuY2VMYWJlbChFYXJ0aFNjaWVuY2VMYWJlbCBvYmplY3QpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+RWFydGggU2NpZW5jZSBMYWJlbCBWYWx1ZTwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOworCSAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgorCSAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkVhcnRoIFNjaWVuY2UgTGFiZWwgVmFsdWU8L2VtPicuCisJICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBUMSBjYXNlRWFydGhTY2llbmNlTGFiZWxWYWx1ZShFYXJ0aFNjaWVuY2VMYWJlbFZhbHVlIG9iamVjdCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5Db21wYXJhYmxlPC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7CisJICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCisJICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+Q29tcGFyYWJsZTwvZW0+Jy4KKwkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIDxUPiBUMSBjYXNlQ29tcGFyYWJsZShDb21wYXJhYmxlPFQ+IG9iamVjdCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5JZGVudGlmaWFibGU8L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7IHJldHVybmluZyBhCisJICogbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgorCSAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPklkZW50aWZpYWJsZTwvZW0+Jy4KKwkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFQxIGNhc2VJZGVudGlmaWFibGUoSWRlbnRpZmlhYmxlIG9iamVjdCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5MYWJlbDwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsgcmV0dXJuaW5nIGEKKwkgKiBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCisJICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+TGFiZWw8L2VtPicuCisJICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBUMSBjYXNlTGFiZWwoTGFiZWwgb2JqZWN0KSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPk5vZGUgTGFiZWw8L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7IHJldHVybmluZyBhCisJICogbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgorCSAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPk5vZGUgTGFiZWw8L2VtPicuCisJICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBUMSBjYXNlTm9kZUxhYmVsKE5vZGVMYWJlbCBvYmplY3QpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+U3RhdGljIExhYmVsPC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7CisJICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCisJICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+U3RhdGljIExhYmVsPC9lbT4nLgorCSAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVDEgY2FzZVN0YXRpY0xhYmVsKFN0YXRpY0xhYmVsIG9iamVjdCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5Nb2RpZmlhYmxlPC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7CisJICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCisJICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+TW9kaWZpYWJsZTwvZW0+Jy4KKwkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFQxIGNhc2VNb2RpZmlhYmxlKE1vZGlmaWFibGUgb2JqZWN0KSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPlN0YXRpYyBOb2RlIExhYmVsPC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOyByZXR1cm5pbmcgYQorCSAqIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KKwkgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5TdGF0aWMgTm9kZSBMYWJlbDwvZW0+Jy4KKwkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFQxIGNhc2VTdGF0aWNOb2RlTGFiZWwoU3RhdGljTm9kZUxhYmVsIG9iamVjdCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5TYW5pdHkgQ2hlY2tlcjwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOworCSAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgorCSAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPlNhbml0eSBDaGVja2VyPC9lbT4nLgorCSAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVDEgY2FzZVNhbml0eUNoZWNrZXIoU2FuaXR5Q2hlY2tlciBvYmplY3QpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+TGFiZWwgVmFsdWU8L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7IHJldHVybmluZyBhCisJICogbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgorCSAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkxhYmVsIFZhbHVlPC9lbT4nLgorCSAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVDEgY2FzZUxhYmVsVmFsdWUoTGFiZWxWYWx1ZSBvYmplY3QpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+RWRnZSBMYWJlbDwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOworCSAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgorCSAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkVkZ2UgTGFiZWw8L2VtPicuCisJICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBUMSBjYXNlRWRnZUxhYmVsKEVkZ2VMYWJlbCBvYmplY3QpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+U3RhdGljIEVkZ2UgTGFiZWw8L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsKKwkgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KKwkgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5TdGF0aWMgRWRnZSBMYWJlbDwvZW0+Jy4KKwkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFQxIGNhc2VTdGF0aWNFZGdlTGFiZWwoU3RhdGljRWRnZUxhYmVsIG9iamVjdCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5EeW5hbWljIExhYmVsPC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7CisJICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCisJICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+RHluYW1pYyBMYWJlbDwvZW0+Jy4KKwkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFQxIGNhc2VEeW5hbWljTGFiZWwoRHluYW1pY0xhYmVsIG9iamVjdCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5EeW5hbWljIEVkZ2UgTGFiZWw8L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsKKwkgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KKwkgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5EeW5hbWljIEVkZ2UgTGFiZWw8L2VtPicuCisJICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBUMSBjYXNlRHluYW1pY0VkZ2VMYWJlbChEeW5hbWljRWRnZUxhYmVsIG9iamVjdCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5FT2JqZWN0PC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOyByZXR1cm5pbmcgYQorCSAqIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLCBidXQgdGhpcyBpcyB0aGUgbGFzdCBjYXNlCisJICogYW55d2F5LiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KKwkgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5FT2JqZWN0PC9lbT4nLgorCSAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVDEgZGVmYXVsdENhc2UoRU9iamVjdCBvYmplY3QpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCit9IC8vIExhYmVsc1N3aXRjaApkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL2xhdHRpY2UvR3JhcGhMYXR0aWNlR2VuZXJhdG9ySW50ZXJmYWNlLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvbGF0dGljZS9HcmFwaExhdHRpY2VHZW5lcmF0b3JJbnRlcmZhY2UuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMGExYmZmCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL2xhdHRpY2UvR3JhcGhMYXR0aWNlR2VuZXJhdG9ySW50ZXJmYWNlLmphdmEKQEAgLTAsMCArMSw2NSBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhdHRpY2U7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguR3JhcGg7CisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAxMCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworCitwdWJsaWMgaW50ZXJmYWNlIEdyYXBoTGF0dGljZUdlbmVyYXRvckludGVyZmFjZSB7CisJCisJLyoqCisJICogQnkgY29udmVudGlvbiBhbGwgTGF0dGljZXMgd2lsbCB1c2UgVVJJJ3MgdGhhdCBiZWdpbiB3aXRoCisJICogIkxBVF8iLgorCSAqIFRoZSB0eXBlIG9mIGxhdHRpY2Ugd2lsbCB0aGVuIGJlIGFwcGVuZGVkLiBGb3IgZXhhbXBsZSBhIFNxdWFyZSBMYXR0aWNlCisJICogd2lsbCBoYXZlIGEgVVJJIHRoYXQgYmVnaW5zCisJICogIkxBVF9TUVJfIgorCSAqIGFuZCBhIFRyaWFuZ2xlIExhdHRpY2Ugd2lsbCBoYXZlIG5vZGVzIHdpdGggVVJJCisJICogIkxBVF9UUkkiLgorCSAqIFRoZSBzZXBhcmF0b3IgY2hhcmFjdGVyIGlzICJfIiBpbnN0ZWFkIG9mICItIiBhcyB1c2VkIGluIGdlbyBVUkkncyBiZWNhdXNlCisJICogYWxsIG5vZGVzIGluIGFueSBsYXR0aWNlIGFyZSBsZXZlbCAwIG5vZGVzICh0aGVyZSBpcyBubyBjb250YWlubWVudCByZWxhdGlvbnNoaXAgcmVnYXJkbGVzcworCSAqIG9mIGxhdHRpY2Ugc2l6ZSkuCisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgVVJJX1BSRUZJWD0iTEFUXyI7CisJCisJLyoqIAorCSAqIExhdHRpY2UgdHlwZQorCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFNRUl9MQVRUSUNFX1RZUEU9IlNxdWFyZSBMYXR0aWNlIjsKKwkKKwkvKiogCisJICogTGF0dGljZSB0eXBlCisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgR0xPQkVfTEFUVElDRV9UWVBFPSJQbGF0ZSBDYXJyZWUiOworCQorCQorCS8qKiAKKwkgKiBMYXR0aWNlIHR5cGUKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBUUklfTEFUVElDRV9UWVBFPSJUcmlhbmdsZSBMYXR0aWNlIjsKKwkKKwkvKioKKwkgKgorCSAqIHJldHVybnMgYSBzcXVhcmUgbGF0dGljZSBvZiBzcGVjaWZpZWQgc2l6ZSBhcyBhIGdyYXBoCisJICoKKwkgKiBAcGFyYW0geFNpemUKKwkgKiBAcGFyYW0geVNpemUKKwkgKiBAcGFyYW0gYXJlYQorCSAqIEBwYXJhbSBhZGROZWFyZXN0TmVpZ2hib3JzCisJICogQHBhcmFtIGFkZE5leHROZWFyZXN0TmVpZ2hib3JzCisJICogQHBhcmFtIHBlcmlvZGljQm91bmRhcmllcworCSAqIEByZXR1cm4KKwkgKi8KKwlwdWJsaWMgYWJzdHJhY3QgR3JhcGggZ2V0R3JhcGgoaW50IHhTaXplLCBpbnQgeVNpemUsIGRvdWJsZSBhcmVhLCBib29sZWFuIGFkZE5lYXJlc3ROZWlnaGJvcnMsIGJvb2xlYW4gYWRkTmV4dE5lYXJlc3ROZWlnaGJvcnMsIGJvb2xlYW4gcGVyaW9kaWNCb3VuZGFyaWVzKTsKKworfQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL2xhdHRpY2UvaW1wbC9HcmFwaExhdHRpY2VHZW5lcmF0b3IuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy9sYXR0aWNlL2ltcGwvR3JhcGhMYXR0aWNlR2VuZXJhdG9yLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjU2NmE2ZgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy9sYXR0aWNlL2ltcGwvR3JhcGhMYXR0aWNlR2VuZXJhdG9yLmphdmEKQEAgLTAsMCArMSwyMzEgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYXR0aWNlLmltcGw7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuVVJJOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5TVEVNVVJJOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uRHVibGluQ29yZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguRWRnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguR3JhcGg7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLk5vZGU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuQ29tbW9uQm9yZGVyUmVsYXRpb25zaGlwTGFiZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuTGFiZWxzRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5Qb3B1bGF0aW9uTGFiZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuaW1wbC5Db21tb25Cb3JkZXJSZWxhdGlvbnNoaXBMYWJlbEltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYXR0aWNlLkdyYXBoTGF0dGljZUdlbmVyYXRvckludGVyZmFjZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLm5vZGVzLk5vZGVzRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLm5vZGVzLlJlZ2lvbjsKKworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTAgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitwdWJsaWMgYWJzdHJhY3QgY2xhc3MgR3JhcGhMYXR0aWNlR2VuZXJhdG9yIGltcGxlbWVudHMgR3JhcGhMYXR0aWNlR2VuZXJhdG9ySW50ZXJmYWNlIHsKKworCS8qKgorCSAqIEBwYXJhbSB4CisJICogICAgICAgICAgICB0aGUgeCBjb29yZCBvZiB0aGUgbm9kZSBpbiB0aGUgbGF0dGljZQorCSAqIEBwYXJhbSB5CisJICogICAgICAgICAgICB0aGUgeSBjb29yZCBvZiB0aGUgbm9kZSBpbiB0aGUgbGF0dGljZQorCSAqIEByZXR1cm4gYSBub2RlCisJICovCisJcHVibGljIHN0YXRpYyBSZWdpb24gY3JlYXRlUmVnaW9uTm9kZShTdHJpbmcgdXJpUHJlZml4LCBpbnQgeCwgaW50IHksIEdyYXBoIGdyYXBoKSB7CisJCWZpbmFsIFJlZ2lvbiBub2RlID0gTm9kZXNGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVSZWdpb24oKTsKKwkJZmluYWwgRHVibGluQ29yZSBkYyA9IG5vZGUuZ2V0RHVibGluQ29yZSgpOworCQlkYy5zZXRUaXRsZShjcmVhdGVOb2RlVGl0bGUoeCwgeSkpOworCQlub2RlLnNldFVSSShjcmVhdGVSZWdpb25Ob2RlVVJJKHVyaVByZWZpeCwgeCwgeSwgZ3JhcGgpKTsKKwkJcmV0dXJuIG5vZGU7CisJfSAvLyBjcmVhdGVSZWdpb25Ob2RlCisJCisKKwkvKioKKwkgKiAKKwkgKiBAcGFyYW0gdXJpUHJlZml4CisJICogQHBhcmFtIGxhdAorCSAqIEBwYXJhbSBsbmcKKwkgKiBAcGFyYW0gZ3JhcGgKKwkgKiBAcmV0dXJuIG5vZGUKKwkgKi8KKwlwdWJsaWMgc3RhdGljIFJlZ2lvbiBjcmVhdGVSZWdpb25Ob2RlKFN0cmluZyB1cmlQcmVmaXgsIFN0cmluZyBsYXQsIFN0cmluZyBsbmcsIEdyYXBoIGdyYXBoKSB7CisJCWZpbmFsIFJlZ2lvbiBub2RlID0gTm9kZXNGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVSZWdpb24oKTsKKwkJZmluYWwgRHVibGluQ29yZSBkYyA9IG5vZGUuZ2V0RHVibGluQ29yZSgpOworCQlkYy5zZXRUaXRsZShjcmVhdGVOb2RlVGl0bGUobGF0LCBsbmcpKTsKKwkJbm9kZS5zZXRVUkkoY3JlYXRlUmVnaW9uTm9kZVVSSSh1cmlQcmVmaXgsIGxhdCwgbG5nLCBncmFwaCkpOworCQlyZXR1cm4gbm9kZTsKKwl9IC8vIGNyZWF0ZVJlZ2lvbk5vZGUKKwkKKwkKKwkKKwkvKioKKwkgKiBAcGFyYW0geAorCSAqICAgICAgICAgICAgdGhlIGxhdCBvZiB0aGUgbm9kZSBpbiB0aGUgbGF0dGljZQorCSAqIEBwYXJhbSB5CisJICogICAgICAgICAgICB0aGUgbG5nIG9mIHRoZSBub2RlIGluIHRoZSBsYXR0aWNlCisJICogQHJldHVybiBhIHRpdGxlIGZvciBhIG5vZGUKKwkgKi8KKwlwdWJsaWMgc3RhdGljIFN0cmluZyBjcmVhdGVOb2RlVGl0bGUoZG91YmxlIHgsIGRvdWJsZSB5KSB7CisJCWZpbmFsIFN0cmluZ0J1aWxkZXIgc2IgPSBuZXcgU3RyaW5nQnVpbGRlcigiTm9kZVsiKTsKKwkJc2IuYXBwZW5kKERvdWJsZS50b1N0cmluZyh4KSk7CisJCXNiLmFwcGVuZCgiLCAiKTsKKwkJc2IuYXBwZW5kKERvdWJsZS50b1N0cmluZyh5KSk7CisJCXNiLmFwcGVuZCgiXSIpOworCQlyZXR1cm4gc2IudG9TdHJpbmcoKTsKKwl9IC8vIGNyZWF0ZU5vZGVUaXRsZQorCQorCS8qKgorCSAqIEBwYXJhbSB4CisJICogICAgICAgICAgICB0aGUgbGF0IG9mIHRoZSBub2RlIGFzIGEgc3RyaW5nLiBBbGxvd3MgTi9TIGluZGljYXRvcgorCSAqIEBwYXJhbSB5CisJICogICAgICAgICAgICB0aGUgbG5nIG9mIHRoZSBub2RlIGFzIGEgc3RyaW5nLiBBbGxvd3MgTi9TIGluZGljYXRvcgorCSAqIEByZXR1cm4gYSB0aXRsZSBmb3IgYSBub2RlCisJICovCisJcHVibGljIHN0YXRpYyBTdHJpbmcgY3JlYXRlTm9kZVRpdGxlKFN0cmluZyB4LCBTdHJpbmcgeSkgeworCQlmaW5hbCBTdHJpbmdCdWlsZGVyIHNiID0gbmV3IFN0cmluZ0J1aWxkZXIoIk5vZGVbIik7CisJCXNiLmFwcGVuZCh4KTsKKwkJc2IuYXBwZW5kKCIsICIpOworCQlzYi5hcHBlbmQoeSk7CisJCXNiLmFwcGVuZCgiXSIpOworCQlyZXR1cm4gc2IudG9TdHJpbmcoKTsKKwl9IC8vIGNyZWF0ZU5vZGVUaXRsZQorCQorCQorCS8qKgorCSAqIEBwYXJhbSB4CisJICogICAgICAgICAgICB0aGUgeCBvZiB0aGUgcmVnaW9uIGluIHRoZSBsYXR0aWNlCisJICogQHBhcmFtIHkKKwkgKiAgICAgICAgICAgIHRoZSB5IG9mIHRoZSByZWdpb24gaW4gdGhlIGxhdHRpY2UKKwkgKiBAcmV0dXJuIGEgVVJJIGZvciB0aGUgcmVnaW9uIG5vZGUKKwkgKi8KKwlwdWJsaWMgc3RhdGljIFVSSSBjcmVhdGVSZWdpb25Ob2RlVVJJKFN0cmluZyB1cmlQcmVmaXgsIGludCB4LCBpbnQgeSwgR3JhcGggZ3JhcGgpIHsKKwkJU3RyaW5nIG5vZGVVcmlTdWZmaXggPSB1cmlQcmVmaXgreCsiXyIreTsKKwkJU3RyaW5nIG5vZGVVcmlTdHJpbmcgPSBOb2RlLlVSSV9UWVBFX05PREVfU0VHTUVOVCArICIvIgorCQkJCQkJCQkrIGdyYXBoLmdldFVSSSgpLmxhc3RTZWdtZW50KCkrIi8iCisJCQkJCQkJCSsgbm9kZVVyaVN1ZmZpeDsKKwkJCisgICAgICAgIFVSSSB1cmkgPSBTVEVNVVJJLmNyZWF0ZVVSSShub2RlVXJpU3RyaW5nKTsKKwkJcmV0dXJuIHVyaTsKKwl9IC8vIGNyZWF0ZVJlZ2lvbk5vZGVVUkkKKwkKKwkvKioKKwkgKiBAcGFyYW0geAorCSAqICAgICAgICAgICAgdGhlIHggb2YgdGhlIHJlZ2lvbiBub2RlIGFzIGEgc3RyaW5nLiBBbGxvd3MgTi9TIGluZGljYXRvcgorCSAqIEBwYXJhbSB5CisJICogICAgICAgICAgICB0aGUgeSBvZiB0aGUgcmVnaW9uIG5vZGUgYXMgYSBzdHJpbmcuIEFsbG93cyBOL1MgaW5kaWNhdG9yCisJICogQHJldHVybiBhIFVSSSBmb3IgdGhlIHJlZ2lvbiBub2RlCisJICovCisJcHVibGljIHN0YXRpYyBVUkkgY3JlYXRlUmVnaW9uTm9kZVVSSShTdHJpbmcgdXJpUHJlZml4LCBTdHJpbmcgeCwgU3RyaW5nIHksIEdyYXBoIGdyYXBoKSB7CisJCVN0cmluZyBub2RlVXJpU3VmZml4ID0gdXJpUHJlZml4K3grIl8iK3k7CisJCVN0cmluZyBub2RlVXJpU3RyaW5nID0gTm9kZS5VUklfVFlQRV9OT0RFX1NFR01FTlQgKyAiLyIKKwkJCQkJCQkJKyBncmFwaC5nZXRVUkkoKS5sYXN0U2VnbWVudCgpKyIvIgorCQkJCQkJCQkrIG5vZGVVcmlTdWZmaXg7CisJCQorICAgICAgICBVUkkgdXJpID0gU1RFTVVSSS5jcmVhdGVVUkkobm9kZVVyaVN0cmluZyk7CisJCXJldHVybiB1cmk7CisJfSAvLyBjcmVhdGVSZWdpb25Ob2RlVVJJCisJCisJCisJLyoqCisJICogQHBhcmFtIHgKKwkgKiAgICAgICAgICAgIHRoZSB4IG9mIHRoZSByZWdpb24gaW4gdGhlIGxhdHRpY2UKKwkgKiBAcGFyYW0geQorCSAqICAgICAgICAgICAgdGhlIHkgb2YgdGhlIHJlZ2lvbiBpbiB0aGUgbGF0dGljZQorCSAqIEByZXR1cm4gYSBVUkkgZm9yIHRoZSByZWdpb24gbm9kZQorCSAqLworCXByaXZhdGUgc3RhdGljIFVSSSBjcmVhdGVFZGdlTGFiZWxVUkkoTm9kZSBub2RlQSwgTm9kZSBub2RlQikgeworCQlVUkkgdXJpQSA9IG5vZGVBLmdldFVSSSgpOworCQlVUkkgdXJpQiA9IG5vZGVCLmdldFVSSSgpOworCQlTdHJpbmcgc0EgPSB1cmlBLmxhc3RTZWdtZW50KCk7CisJCVN0cmluZyBzQiA9IHVyaUIubGFzdFNlZ21lbnQoKTsKKwkJLy8gQ29tbW9uQm9yZGVyUmVsYXRpb25zaGlwTGFiZWxJdGVtUHJvdmlkZXIKKwkJLy8gdXNlcyBfIGFzIGEgc3BlY2lhbCBjaGFyYWN0ZXIgdG8gc2VwYXJhdGUgdGhlIHR3byBub2RlcworCQkvLyBzbyB3ZSBuZWVkIHRvIHJlcGxhY2UgaXQuCisJCXNBPXNBLnJlcGxhY2UoJ18nLCcuJyk7CisJCXNCPXNCLnJlcGxhY2UoJ18nLCcuJyk7CisJCVN0cmluZyB1cmlTdHJpbmcgPSBzQSsiXyIrc0I7CisgICAgICAgIFVSSSB1cmkgPSBTVEVNVVJJLmNyZWF0ZVVSSSh1cmlTdHJpbmcpOworCQlyZXR1cm4gdXJpOworCX0gLy8gY3JlYXRlUmVnaW9uTm9kZVVSSQorCQorCQorCisJLyoqCisJICogCisJICogQHBhcmFtIGdyYXBoCisJICogQHBhcmFtIG5vZGVBCisJICogQHBhcmFtIG5vZGVCCisJICogQHBhcmFtIGJvcmRlckxlbmd0aAorCSAqLworCXB1YmxpYyBzdGF0aWMgdm9pZCBjcmVhdGVFZGdlKGZpbmFsIEdyYXBoIGdyYXBoLCBmaW5hbCBOb2RlIG5vZGVBLAorCQkJZmluYWwgTm9kZSBub2RlQiwgaW50IGJvcmRlckxlbmd0aCkgeworCQkvL2ZpbmFsIExpc3Q8RWRnZT4gZWRnZUxpc3QgPSBuZXcgQXJyYXlMaXN0PEVkZ2U+KCk7CisJCSAKKwkJLy8gY3JlYXRlIHRoZSBlZGdlCisJCWZpbmFsIEVkZ2UgZWRnZSA9IENvbW1vbkJvcmRlclJlbGF0aW9uc2hpcExhYmVsSW1wbC5jcmVhdGVDb21tb25Cb3JkZXJSZWxhdGlvbnNoaXAobm9kZUEsIG5vZGVCLAorCQkJCWJvcmRlckxlbmd0aCk7CisJCQorCQlVUkkgZWRnZVVSSSA9IGVkZ2UuZ2V0VVJJKCk7CisJCS8vIHRoZSBhdXRvZ2VuZXJhdGVkIGVkZ2UgdXJpIGlzIG5vdCBjb3JyZWN0LiBOZWVkIHRvIHJlcGxhY2UgaXQKKwkJU3RyaW5nIHNFZGdlID0gZWRnZVVSSS50b1N0cmluZygpOworCQlpbnQgbGFzdCA9IHNFZGdlLmxhc3RJbmRleE9mKCIvIik7CisJCVN0cmluZyBzRWRnZTEgPSBzRWRnZS5zdWJzdHJpbmcoMCxsYXN0KTsKKwkJU3RyaW5nIHNFZGdlMiA9IHNFZGdlLnN1YnN0cmluZyhsYXN0LHNFZGdlLmxlbmd0aCgpKTsKKwkJc0VkZ2UgPSBzRWRnZTErIi9yZWxhdGlvbnNoaXAvY29tbW9uYm9yZGVyIitzRWRnZTI7CisJCVVSSSBuZXdVUkkgPSBVUkkuY3JlYXRlVVJJKHNFZGdlKTsKKwkJZWRnZS5zZXRVUkkobmV3VVJJKTsKKwkJCisJCS8vIG5vdyB3ZSBuZWVkIHRvIHNldCB0aGUgdXJpIGZvciB0aGUgbGFiZWwKKwkJQ29tbW9uQm9yZGVyUmVsYXRpb25zaGlwTGFiZWwgbGFiZWwgPSAoQ29tbW9uQm9yZGVyUmVsYXRpb25zaGlwTGFiZWwpZWRnZS5nZXRMYWJlbCgpOworCQlsYWJlbC5zZXRVUkkoY3JlYXRlRWRnZUxhYmVsVVJJKG5vZGVBLCBub2RlQikpOworCQkvL1VSSSBsYWJlbFVSSSA9IGxhYmVsLmdldFVSSSgpOworCQkKKwkJZmluYWwgRHVibGluQ29yZSBkYyA9IGVkZ2UuZ2V0RHVibGluQ29yZSgpOworCQlkYy5zZXRUaXRsZShjcmVhdGVFZGdlVGl0bGUobm9kZUEsIG5vZGVCKSk7CisJCQorCQlncmFwaC5wdXRFZGdlKGVkZ2UpOworCX0gLy8gY3JlYXRlRWRnZUxpc3QKKwkKKwkvKioKKwkgKiBAcGFyYW0geAorCSAqICAgICAgICAgICAgdGhlIHggb2YgdGhlIG5vZGUgaW4gdGhlIGxhdHRpY2UKKwkgKiBAcGFyYW0geQorCSAqICAgICAgICAgICAgdGhlIHkgb2YgdGhlIG5vZGUgaW4gdGhlIGxhdHRpY2UKKwkgKiBAcmV0dXJuIGEgdGl0bGUgZm9yIGEgbm9kZQorCSAqLworCXB1YmxpYyBzdGF0aWMgU3RyaW5nIGNyZWF0ZUVkZ2VUaXRsZShOb2RlIG5vZGVBLCBOb2RlIG5vZGVCKSB7CisJCVN0cmluZyBuQSA9IG5vZGVBLmdldER1YmxpbkNvcmUoKS5nZXRUaXRsZSgpOworCQlTdHJpbmcgbkIgPSBub2RlQi5nZXREdWJsaW5Db3JlKCkuZ2V0VGl0bGUoKTsKKwkJZmluYWwgU3RyaW5nQnVpbGRlciBzYiA9IG5ldyBTdHJpbmdCdWlsZGVyKCJFZGdlWygiKTsKKwkJc2IuYXBwZW5kKG5BKTsKKwkJc2IuYXBwZW5kKCIpPC0tPigiKTsKKwkJc2IuYXBwZW5kKG5CKTsKKwkJc2IuYXBwZW5kKCIpXSIpOworCQlyZXR1cm4gc2IudG9TdHJpbmcoKTsKKwl9IC8vIGNyZWF0ZUVkZ2VUaXRsZQorCQorCS8qKgorCSAqIEBwYXJhbSBwb3B1bGF0aW9uQ291bnQKKwkgKiAgICAgICAgICAgIG51bWJlciBvZiAoRGVmYXVsdDogaHVtYW4pIHBvcHVsYXRpb24gbWVtYmVycyBhdCB0aGUgbm9kZQorCSAqIEBwYXJhbSBub2RlCisJICogICAgICAgICAgICB0aGUgbm9kZQorCSAqIEByZXR1cm4gYSBwb3B1bGF0aW9uIGxhYmVsCisJICovCisJcHVibGljIHN0YXRpYyBQb3B1bGF0aW9uTGFiZWwgY3JlYXRlUG9wdWxhdGlvbkxhYmVsKAorCQkJZmluYWwgU3RyaW5nIHBvcHVsYXRpb25JZGVudGlmaWVyLCBmaW5hbCBkb3VibGUgcG9wdWxhdGlvbkNvdW50LAorCQkJZmluYWwgTm9kZSBub2RlKSB7CisJCWZpbmFsIFBvcHVsYXRpb25MYWJlbCByZXRWYWx1ZSA9IExhYmVsc0ZhY3RvcnkuZUlOU1RBTkNFCisJCQkJLmNyZWF0ZVBvcHVsYXRpb25MYWJlbCgpOworCQlyZXRWYWx1ZS5zZXRQb3B1bGF0aW9uSWRlbnRpZmllcihwb3B1bGF0aW9uSWRlbnRpZmllcik7CisJCXJldFZhbHVlLmdldEN1cnJlbnRQb3B1bGF0aW9uVmFsdWUoKS5zZXRDb3VudChwb3B1bGF0aW9uQ291bnQpOworCQlub2RlLmdldExhYmVscygpLmFkZChyZXRWYWx1ZSk7CisJCXJldHVybiByZXRWYWx1ZTsKKwl9Ly8gY3JlYXRlIFBvcHVsYXRpb25MYWJlbAorCQorCQorfSAvL0dyYXBoTGF0dGljZUdlbmVyYXRvcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL2xhdHRpY2UvaW1wbC9MYXR0aWNlR2VuZXJhdG9yVXRpbGl0eUltcGwuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy9sYXR0aWNlL2ltcGwvTGF0dGljZUdlbmVyYXRvclV0aWxpdHlJbXBsLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTczMzIzYgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy9sYXR0aWNlL2ltcGwvTGF0dGljZUdlbmVyYXRvclV0aWxpdHlJbXBsLmphdmEKQEAgLTAsMCArMSw2MDUgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYXR0aWNlLmltcGw7CisKK2ltcG9ydCBqYXZhLnRleHQuU2ltcGxlRGF0ZUZvcm1hdDsKK2ltcG9ydCBqYXZhLnV0aWwuQ2FsZW5kYXI7CitpbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLkVNYXA7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlVSSTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuU1RFTVVSSTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLkR1YmxpbkNvcmU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkVkZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkdyYXBoOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5HcmFwaEZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkxhYmVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5Ob2RlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuQWN0aXZhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuYWRhcHRlcnMuc3BhdGlhbC5nZW8uSW5saW5lTGF0TG9uZ0RhdGFQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmFkYXB0ZXJzLnNwYXRpYWwuZ2VvLkxhdExvbmc7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5hZGFwdGVycy5zcGF0aWFsLmdlby5MYXRMb25nLlNlZ21lbnRCdWlsZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuYWRhcHRlcnMuc3BhdGlhbC5nZW8uTGF0TG9uZ1Byb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuYWRhcHRlcnMuc3BhdGlhbC5nZW8uTGF0TG9uZ1Byb3ZpZGVyQWRhcHRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmFkYXB0ZXJzLnNwYXRpYWwuZ2VvLkxhdExvbmdQcm92aWRlckFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLkFyZWFMYWJlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5MYWJlbHNGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubm9kZXMuUmVnaW9uOworCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAxMCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworcHVibGljIGNsYXNzIExhdHRpY2VHZW5lcmF0b3JVdGlsaXR5SW1wbCBleHRlbmRzIEdyYXBoTGF0dGljZUdlbmVyYXRvciB7CisJCisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFVSSV9TUVJfUFJFRklYID0gVVJJX1BSRUZJWCsiU1FSXyI7CisJCisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFVSSV9HTEJMX1BSRUZJWCA9IFVSSV9QUkVGSVgrIkdMQl8iOworCQorCS8qKiAKKwkgKiBtdXN0IHNwZWNpZnkgdGhlIGxhdHRpY2UgdHlwZQorCSAqLworCXB1YmxpYyBTdHJpbmcgTEFUVElDRV9UWVBFPVNRUl9MQVRUSUNFX1RZUEU7CisJCisJLy8gdGVzdGluZworCS8vc3RhdGljIGRvdWJsZVtdW11bXSBsdGxnOworCQorCXB1YmxpYyBzdGF0aWMgZmluYWwgZG91YmxlIERFR1JFRVNfVE9fUkFESUFOUyA9IE1hdGguUEkvMTgwLjA7CisJCisJCisJLyoqCisJICogCisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgREVGQVVMVF9QT1BVTEFUSU9OX05BTUU9Imh1bWFuIjsKKwkKKwkvKioKKwkgKiAKKwkgKi8KKwlwdWJsaWMgc3RhdGljIFN0cmluZyBQT1BVTEFUSU9OX05BTUU9REVGQVVMVF9QT1BVTEFUSU9OX05BTUU7CisJCisJLyoqCisJICogCisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBkb3VibGUgREVGQVVMVF9QT1BVTEFUSU9OX0NPVU5UID0gMS4wOworCQorCXB1YmxpYyBMYXR0aWNlR2VuZXJhdG9yVXRpbGl0eUltcGwoU3RyaW5nIHR5cGUpIHsKKwkJTEFUVElDRV9UWVBFID0gdHlwZTsKKwl9CisJCisJLyoqCisJICogS2lsb21ldGVycyBwZXIgZGVncmVlIGxhdGl0dWRlLgorCSAqLworCQorCXB1YmxpYyBzdGF0aWMgZmluYWwgZG91YmxlIEtNX1BFUl9ERUdfTEFUID0gNDAwMDguNjI5IC8gMzYwLjA7CisJCisJLyoqCisJICogS2lsb21ldGVycyBwZXIgZGVncmVlIGxhdGl0dWRlLgorCSAqLworCQorCXB1YmxpYyBzdGF0aWMgZmluYWwgZG91YmxlIEtNX1BFUl9ERUdfTE9OID0gNDAwMDguNjI5IC8gMzYwLjA7CisKKwkKKwkvKioKKwkgKgorCSAqIHJldHVybnMgYSBzcXVhcmUgbGF0dGljZSBvZiBzcGVjaWZpZWQgc2l6ZSBhcyBhIGdyYXBoCisJICoKKwkgKiBAcGFyYW0geFNpemUKKwkgKiBAcGFyYW0geVNpemUKKwkgKiBAcGFyYW0gYXJlYQorCSAqIEBwYXJhbSBhZGROZWFyZXN0TmVpZ2hib3JzCisJICogQHBhcmFtIGFkZE5leHROZWFyZXN0TmVpZ2hib3JzCisJICogQHBhcmFtIHBlcmlvZGljQm91bmRhcmllcworCSAqIEByZXR1cm4KKwkgKi8KKwlwdWJsaWMgR3JhcGggZ2V0R3JhcGgoaW50IHhTaXplLCBpbnQgeVNpemUsIGRvdWJsZSBhcmVhLCBib29sZWFuIGFkZE5lYXJlc3ROZWlnaGJvcnMsIGJvb2xlYW4gYWRkTmV4dE5lYXJlc3ROZWlnaGJvcnMsIGJvb2xlYW4gcGVyaW9kaWNCb3VuZGFyaWVzKSB7CisJCWZpbmFsIEdyYXBoIGdyYXBoID0gR3JhcGhGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVHcmFwaCgpOworCQlmaW5hbCBEdWJsaW5Db3JlIGRjID0gZ3JhcGguZ2V0RHVibGluQ29yZSgpOworCQlkYy5wb3B1bGF0ZSgpOworCQlkYy5zZXRUaXRsZShMQVRUSUNFX1RZUEUpOworCQlkYy5zZXRTb3VyY2UodGhpcy5nZXRDbGFzcygpLmdldFNpbXBsZU5hbWUoKSk7CisJCUNhbGVuZGFyIGMgPSBDYWxlbmRhci5nZXRJbnN0YW5jZSgpOworICAgICAgICBTaW1wbGVEYXRlRm9ybWF0IGZvcm1hdHRlciA9IG5ldyBTaW1wbGVEYXRlRm9ybWF0KCJFIHl5eXkuTU0uZGQgJ2F0JyBoaDptbTpzcyBhIHp6eiIpOworICAgICAgICBTdHJpbmcgdmFsaWQgPSBmb3JtYXR0ZXIuZm9ybWF0KGMuZ2V0VGltZSgpKTsKKyAgICAgICAJZGMuc2V0VmFsaWQodmFsaWQpOworCQkJCQkJCisJCQlmaW5hbCBOb2RlIG5vZGVIb2xkZXJbXVtdID0gbmV3IE5vZGVbeFNpemVdW3lTaXplXTsKKworCQkJLy8gQ3JlYXRlIHRoZSBub2RlcyBhbmQgcHV0IHRoZW0gaW50byB0aGUgZ3JhcGgKKwkJCWZvciAoaW50IHggPSAwOyB4IDwgeFNpemU7IHgrKykgeworCQkJCWZvciAoaW50IHkgPSAwOyB5IDwgeVNpemU7IHkrKykgeworCQkJCQlmaW5hbCBSZWdpb24gcmVnaW9uTm9kZSA9IGNyZWF0ZVJlZ2lvbk5vZGUoVVJJX1NRUl9QUkVGSVgsIHgsIHksIGdyYXBoKTsKKwkJCQkJCisJCQkJCS8vIG9uIGEgc3F1YXJlIGxhdHRpY2UgYWxsIG5vZGVzIGhhdmUgYXJlYT0xLjAKKwkJCQkJZmluYWwgQXJlYUxhYmVsIGFyZWFMYWJlbCA9IExhYmVsc0ZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZUFyZWFMYWJlbCgpOworCQkJCQlhcmVhTGFiZWwuZ2V0Q3VycmVudEFyZWFWYWx1ZSgpLnNldEFyZWEoYXJlYSk7CisJCQkJCWFyZWFMYWJlbC5zZXRVUkkoU1RFTVVSSS5jcmVhdGVVUkkoTGFiZWwuVVJJX1RZUEVfTEFCRUxfU0VHTUVOVCArICIvIisgU1RFTVVSSS5nZW5lcmF0ZVVuaXF1ZVBhcnQoKSkpOworCQkJCQlyZWdpb25Ob2RlLmdldExhYmVscygpLmFkZChhcmVhTGFiZWwpOworCQkJCQkJCQkJCQorCQkJCQkKKwkJCQkJbm9kZUhvbGRlclt4XVt5XSA9IHJlZ2lvbk5vZGU7CisJCQkJCWdyYXBoLnB1dE5vZGUocmVnaW9uTm9kZSk7CisJCQkJfSAvLyBmb3IgZWFjaCB5CisJCQl9IC8vIGZvciBlYWNoIHgKKworCQkJCisJCQkvLyB0aGUgZWdkZSBjcmVhdGlvbiByZXF1aXJlZCBhIGNvbW1vbiBib3JkZXIgbGVuZ3RoLgorCQkJLy8gcmlnaHQgbm93IHRoaXMgaXMgYW4gaW50IHNvIHNldCB0aGUgbWluaW11bSBhdCAxCisJCQkvLyB0aGlzIGlzIE5PVCBhY3R1YWxseSB1c2VkIGluIGFueSBjYWxjdWxhdGlvbgorCQkJLy8gVE9ETyBjb21tb25Cb3JkZXJMZW5ndGggc2hvdWxkIGJlIG9mIHR5cGUgZG91YmxlCisJCQlkb3VibGUgYm9yZGVyTGVuZ3RoID0gTWF0aC5zcXJ0KGFyZWEpOworCQkJaWYoYm9yZGVyTGVuZ3RoIDwgMS4wICkgYm9yZGVyTGVuZ3RoID0gMS4wOworCQkJaW50IGNvbW1vbkJvcmRlckxlbmd0aCA9IChpbnQpIGJvcmRlckxlbmd0aDsKKwkJCQorIAkJCS8vIElmIHdlIGFyZSBpbmNsdWRpbmcgTmVhcmVzdCBOZWlnaGJvcnMgKE5OKQorCQkJaWYoYWRkTmVhcmVzdE5laWdoYm9ycykgeworCQkJCS8vQWRkIHRoZSBlZGdlcworCQkJCWZvciAoaW50IHggPSAwOyB4IDwgeFNpemU7IHgrKykgeworCQkJCQlmb3IgKGludCB5ID0gMDsgeSA8IHlTaXplOyB5KyspIHsKKwkJCQkJCWlmKCh5LTEpPj0wKSB7CisJCQkJCQkJY3JlYXRlRWRnZShncmFwaCxub2RlSG9sZGVyW3hdW3kgLSAxXSxub2RlSG9sZGVyW3hdW3ldLCBjb21tb25Cb3JkZXJMZW5ndGgpOworCQkJCQkJfSBlbHNlIHsKKwkJCQkJCQlpZihwZXJpb2RpY0JvdW5kYXJpZXMpIHsKKwkJCQkJCQkJY3JlYXRlRWRnZShncmFwaCxub2RlSG9sZGVyW3hdW3lTaXplIC0gMV0sbm9kZUhvbGRlclt4XVt5XSwgY29tbW9uQm9yZGVyTGVuZ3RoKTsKKwkJCQkJCQl9CisJCQkJCQl9CisJCQkJCQkKKwkJCQkJCWlmKCh4LTEpPj0wKSB7CisJCQkJCQkJY3JlYXRlRWRnZShncmFwaCxub2RlSG9sZGVyW3ggLSAxXVt5XSxub2RlSG9sZGVyW3hdW3ldLCBjb21tb25Cb3JkZXJMZW5ndGgpOworCQkJCQkJfWVsc2UgeworCQkJCQkJCWlmKHBlcmlvZGljQm91bmRhcmllcykgeworCQkJCQkJCQljcmVhdGVFZGdlKGdyYXBoLG5vZGVIb2xkZXJbeFNpemUgLSAxXVt5XSxub2RlSG9sZGVyW3hdW3ldLCBjb21tb25Cb3JkZXJMZW5ndGgpOworCQkJCQkJCX0KKwkJCQkJCX0KKwkJCQkJCQorCQkJCQl9IC8vIGZvciBlYWNoIHkKKwkJCQl9IC8vIGZvciBlYWNoIHgKKwkJCX0vLyBOTiBlZGdlcworCisJCQkvLyBJZiB3ZSBhcmUgaW5jbHVkaW5nIE5FWFQgTmVhcmVzdCBOZWlnaGJvcnMgKE5OTikKKwkJCWlmKGFkZE5leHROZWFyZXN0TmVpZ2hib3JzKSB7CisJCQkJZm9yIChpbnQgeCA9IDA7IHggPCB4U2l6ZTsgeCsrKSB7CisJCQkJCWZvciAoaW50IHkgPSAwOyB5IDwgeVNpemU7IHkrKykgeworCQkJCQkJLy8gdXBwcGVyIHJpZ2h0PworCQkJCQkJaWYoICgoeCsxKTx4U2l6ZSkgJiYgKCh5KzEpPHlTaXplKSApIHsKKwkJCQkJCQljcmVhdGVFZGdlKGdyYXBoLG5vZGVIb2xkZXJbeF1beV0sbm9kZUhvbGRlclt4KzFdW3krMV0sIGNvbW1vbkJvcmRlckxlbmd0aCk7CisJCQkJCQl9IGVsc2UgeworCQkJCQkJCQlpZihwZXJpb2RpY0JvdW5kYXJpZXMpIHsKKwkJCQkJCQkJCWludCB4MiA9IHgrMTsKKwkJCQkJCQkJCWludCB5MiA9IHkrMTsKKwkJCQkJCQkJCWlmKHgyPj14U2l6ZSkgeDI9MDsKKwkJCQkJCQkJCWlmKHkyPj15U2l6ZSkgeTI9MDsKKwkJCQkJCQkJCWNyZWF0ZUVkZ2UoZ3JhcGgsbm9kZUhvbGRlclt4XVt5XSxub2RlSG9sZGVyW3gyXVt5Ml0sIGNvbW1vbkJvcmRlckxlbmd0aCk7CisJCQkJCQkJCX0KKwkJCQkJCX0vLyB1cHBlciByaWdodAorCQkJCQkJCQorCQkJCQkJLy8gbG93ZXIgcmlnaHQKKwkJCQkJCWlmKCAoKHgrMSk8eFNpemUpICYmICgoeS0xKT49MCkgKSB7CisJCQkJCQkJY3JlYXRlRWRnZShncmFwaCxub2RlSG9sZGVyW3hdW3ldLG5vZGVIb2xkZXJbeCsxXVt5LTFdLCBjb21tb25Cb3JkZXJMZW5ndGgpOworCQkJCQkJfSBlbHNlIHsKKwkJCQkJCQlpZihwZXJpb2RpY0JvdW5kYXJpZXMpIHsKKwkJCQkJCQkJaW50IHgyID0geCsxOworCQkJCQkJCQlpbnQgeTIgPSB5LTE7CisJCQkJCQkJCWlmKHgyPj14U2l6ZSkgeDI9MDsKKwkJCQkJCQkJaWYoeTIgPD0gLTEpIHkyPXlTaXplLTE7CisJCQkJCQkJCWNyZWF0ZUVkZ2UoZ3JhcGgsbm9kZUhvbGRlclt4XVt5XSxub2RlSG9sZGVyW3gyXVt5Ml0sIGNvbW1vbkJvcmRlckxlbmd0aCk7CisJCQkJCQkJfQorCQkJCQkJfQorCQkJCQkJCisJCQkJCX0gLy8gZm9yIGVhY2ggeQorCQkJCX0gLy8gZm9yIGVhY2ggeAorCQkJCQorCQkJfS8vIE5OTiBlZGdlcworCisJCQkvLyBBZGQgdGhlIHNwYXRpYWwgcG9seWdvbnMgdG8gdGhlIHNwYXRpYWwgYXR0cmlidXRlIG9mIGVhY2ggbm9kZSdzCisJCQkvLyBkdWJsaW4gY29yZSBpbnN0YW5jZSBhbmQgZm9yIGVhY2ggZWRnZS4gVGhlIHZhbHVlIGZvciB0aGUgbm9kZXMgd2lsbAorCQkJLy8gYmUgYSByZWN0YW5ndWxhciBhcmVhIGV4cHJlc3NlZCBhcyBhIHNldCBvZiBsYXQvbG9uZyBwb2ludHMgdGhhdAorCQkJLy8gbGF5b3V0IGEgcG9seWdvbi4gVGhlIHBvc2l0aW9uIG9mIHRoZSBwb2x5Z29uIHdpbGwgYXQgcG9zaXRpb24gdGhhdAorCQkJLy8gbWF0Y2hlcyB0aGUgcG9zaXRpb24gKHgsIHkpIG9mIHRoZSBub2RlIGluIHRoZSBsYXR0aWNlLgorCQkJYWRkU3BhdGlhbFNwZWNpZmljYXRpb25zKG5vZGVIb2xkZXIsIHhTaXplLCB5U2l6ZSwgYXJlYSk7CisKKwkJCWFzc2VydCBncmFwaC5zYW5lKCk7CisKKwkJCXJldHVybiBncmFwaDsKKwkJfQorCQkKKwkKKwkKKwkKKwkKKwkKKwkKKwkJCisKKwkvKioKKwkgKiBBZGQgdGhlIHNwYXRpYWwgc3BlY2lmaWNhdGlvbiB0byB0aGUgc3BhdGlhbCBhdHRyaWJ1dGUgb2YgZWFjaCBub2RlJ3MKKwkgKiBkdWJsaW4gY29yZSBpbnN0YW5jZS4gVGhlIHZhbHVlIHdpbGwgYmUgYSByZXRhbmd1bGFyIGFyZWEgZXhwcmVzc2VkIGFzIGEKKwkgKiBzZXQgb2YgbGF0L2xvbmcgcG9pbnRzIHRoYXQgbGF5b3V0IGEgcG9seWdvbi4gVGhlIHBvc2l0aW9uIG9mIHRoZSBwb2x5Z29uCisJICogd2lsbCBhdCBwb3NpdGlvbiB0aGF0IG1hdGNoZXMgdGhlIHBvc2l0aW9uICh4LCB5KSBvZiB0aGUgbm9kZSBpbgorCSAqIHRoZSBsYXR0aWNlLiBOb2RlIGF0IHBvc2l0aW9uIFswXVswXSB3aWxsIGJlIGluIHRoZSB1cHBlciBsZWZ0IHdoaWxlIHRoZQorCSAqIG5vZGUgYXQgcG9zaXRvbiBbbnVteHNdW251bXlzXSB3aWxsIGJlIGluIHRoZSBsb3dlciByaWdodCBvZiB0aGUKKwkgKiByZWN0YW5ndWxhciBhcmVhLgorCSAqIAorCSAqIEBwYXJhbSBub2RlSG9sZGVyCisJICogQHBhcmFtIHhTaXplCisJICogQHBhcmFtIHlTaXplCisJICogQHBhcmFtIGFyZWEKKwkgKi8KKwlwcml2YXRlIHN0YXRpYyB2b2lkIGFkZFNwYXRpYWxTcGVjaWZpY2F0aW9ucyhmaW5hbCBOb2RlW11bXSBub2RlSG9sZGVyLCBpbnQgeFNpemUsIGludCB5U2l6ZSwgZG91YmxlIGFyZWEpIHsKKworCQkvLyBGaXJzdCBydW4gdGhyb3VnaCBhbGwgb2YgdGhlIG5vZGVzIGNyZWF0aW5nIGEgcG9seWdvbiBmb3IgdGhlaXIKKwkJLy8gYm9yZGVyIGFuZCBhZGRpbmcgdGhlIGRhdGEgYXMgYW4gaW5saW5lIHZhbHVlIGluIHRoZSBzcGF0aWFsCisJCS8vIGF0dHJpYnV0ZSBvZiB0aGUgbm9kZSdzIGR1YmxpbiBjb3JlLgorCQkvLyBzY2FsZSBpcyB0aGUgc2NhbGUgZmFjdG9yIChhbmQgdHdpY2UgdGhlIHN0ZXAgc2l6ZSkgZm9yIHRoZSBsYXR0aWNlCisJCWRvdWJsZSBzY2FsZSA9IE1hdGguc3FydChhcmVhKTsKKwkJZm9yIChpbnQgeCA9IDA7IHggPCB4U2l6ZTsgeCsrKSB7CisJCQlmb3IgKGludCB5ID0gMDsgeSA8IHlTaXplOyB5KyspIHsKKwkJCQlmaW5hbCBOb2RlIG5vZGUgPSBub2RlSG9sZGVyW3hdW3ldOworCQkJCWZpbmFsIExhdExvbmcgbm9kZVNlZ21lbnRzID0gY3JlYXRlTm9kZVBvbHlnb24oeCx5LHNjYWxlKTsKKwkJCQlmaW5hbCBTdHJpbmcgc3BhdGlhbFVSSVN0cmluZyA9IElubGluZUxhdExvbmdEYXRhUHJvdmlkZXIKKwkJCQkJCS5jcmVhdGVTcGF0aWFsSW5saW5lVVJJU3RyaW5nKG5vZGVTZWdtZW50cyk7CisJCQkJbm9kZS5nZXREdWJsaW5Db3JlKCkuc2V0U3BhdGlhbChzcGF0aWFsVVJJU3RyaW5nKTsKKwkJCQkKKwkJCX0gLy8gZm9yIGVhY2ggeQorCQl9IC8vIGZvciBlYWNoIHgKKwl9IC8vIGFkZFNwYXRpYWxTcGVjaWZpY2F0aW9ucworCQorCS8qKgorCSAqIEFkZCB0aGUgc3BhdGlhbCBzcGVjaWZpY2F0aW9uIHRvIHRoZSBzcGF0aWFsIGF0dHJpYnV0ZSBvZiBlYWNoIG5vZGUncworCSAqIGR1YmxpbiBjb3JlIGluc3RhbmNlLiBUaGUgdmFsdWUgd2lsbCBiZSBhIHJldGFuZ3VsYXIgYXJlYSBleHByZXNzZWQgYXMgYQorCSAqIHNldCBvZiBsYXQvbG9uZyBwb2ludHMgdGhhdCBsYXlvdXQgYSBwb2x5Z29uLiBUaGUgcG9zaXRpb24gb2YgdGhlIHBvbHlnb24KKwkgKiB3aWxsIGF0IHBvc2l0aW9uIHRoYXQgbWF0Y2hlcyB0aGUgcG9zaXRpb24gKHgsIHkpIG9mIHRoZSBub2RlIGluCisJICogdGhlIGxhdHRpY2UuIE5vZGUgYXQgcG9zaXRpb24gWzBdWzBdIHdpbGwgYmUgaW4gdGhlIHVwcGVyIGxlZnQgd2hpbGUgdGhlCisJICogbm9kZSBhdCBwb3NpdG9uIFtudW14c11bbnVteXNdIHdpbGwgYmUgaW4gdGhlIGxvd2VyIHJpZ2h0IG9mIHRoZQorCSAqIHJlY3Rhbmd1bGFyIGFyZWEuCisJICogCisJICogQHBhcmFtIG5vZGVIb2xkZXIKKwkgKiBAcGFyYW0geFNpemUKKwkgKiBAcGFyYW0geVNpemUKKwkgKiBAcGFyYW0gYXJlYQorCSAqLworCXByaXZhdGUgc3RhdGljIHZvaWQgYWRkU3BhdGlhbFNwZWNpZmljYXRpb25zKGZpbmFsIE5vZGVbXVtdIG5vZGVIb2xkZXIsIGludCBhbmd1bGFyU3RlcCwgaW50IGxhdFNpemUsIGludCBsbmdTaXplKSB7CisKKwkJLy8gRmlyc3QgcnVuIHRocm91Z2ggYWxsIG9mIHRoZSBub2RlcyBjcmVhdGluZyBhIHBvbHlnb24gZm9yIHRoZWlyCisJCS8vIGJvcmRlciBhbmQgYWRkaW5nIHRoZSBkYXRhIGFzIGFuIGlubGluZSB2YWx1ZSBpbiB0aGUgc3BhdGlhbAorCQkvLyBhdHRyaWJ1dGUgb2YgdGhlIG5vZGUncyBkdWJsaW4gY29yZS4KKwkJLy8gdXNlIGVxdWktYW5ndWxhciBzdGVwcworCQlpbnQgb2Zmc2V0ID0gYW5ndWxhclN0ZXAvMjsKKwkJaW50IGxhdCA9IC05MDsKKwkJaW50IGxuZyA9IC0xODA7CisJCWZvciAoaW50IHggPSAwOyB4IDwgbGF0U2l6ZTsgeCsrKSB7CisJCQlmb3IgKGludCB5ID0gMDsgeSA8IGxuZ1NpemU7IHkrKykgeworCQkJCWZpbmFsIE5vZGUgbm9kZSA9IG5vZGVIb2xkZXJbeF1beV07CisJCQkJZmluYWwgTGF0TG9uZyBub2RlU2VnbWVudHMgPSBjcmVhdGVQbGF0ZUNhcnJlZVBvbHlnb24obGF0K29mZnNldCxsbmcrb2Zmc2V0LGFuZ3VsYXJTdGVwKTsKKwkJCQlmaW5hbCBTdHJpbmcgc3BhdGlhbFVSSVN0cmluZyA9IElubGluZUxhdExvbmdEYXRhUHJvdmlkZXIKKwkJCQkJCS5jcmVhdGVTcGF0aWFsSW5saW5lVVJJU3RyaW5nKG5vZGVTZWdtZW50cyk7CisJCQkJbm9kZS5nZXREdWJsaW5Db3JlKCkuc2V0U3BhdGlhbChzcGF0aWFsVVJJU3RyaW5nKTsKKwkJCQlsbmcrPSBhbmd1bGFyU3RlcDsKKwkJCX0gLy8gZm9yIGVhY2ggbG5nCisJCQlsYXQrPSBhbmd1bGFyU3RlcDsKKwkJCWxuZyA9IC0xODA7Ly8gcmVzZXQKKwkJfSAvLyBmb3IgZWFjaCBsYXQKKwkJCisJfSAvLyBhZGRTcGF0aWFsU3BlY2lmaWNhdGlvbnMKKwkKKwkKKwkKKworCisJCisJLyoqCisJICogCisJICogQHBhcmFtIHhpIGEgY291bnRlciBpbiB4CisJICogQHBhcmFtIHlpIGEgY291bnRlciBpbiB5CisJICogQHBhcmFtIHNjYWxlIGlzIHRoZSBzY2FsZSBmYWN0b3IgKGFuZCB0d2ljZSB0aGUgc3RlcCBzaXplKSBmb3IgdGhlIGxhdHRpY2UKKwkgKiBAcmV0dXJuCisJICovCisJcHJpdmF0ZSBzdGF0aWMgTGF0TG9uZyBjcmVhdGVOb2RlUG9seWdvbihmaW5hbCBkb3VibGUgeGksIGRvdWJsZSB5aSwgZG91YmxlIHNjYWxlKSB7CisJCWZpbmFsIExhdExvbmcgcmV0VmFsdWUgPSBuZXcgTGF0TG9uZygpOworCQkKKwkJZmluYWwgU2VnbWVudEJ1aWxkZXIgc2IgPSBuZXcgU2VnbWVudEJ1aWxkZXIoKTsKKwkJZG91YmxlIHggPSB4aSpzY2FsZS9LTV9QRVJfREVHX0xPTjsgLy8gY29udmVydCB0byBsb24KKwkJZG91YmxlIHkgPSB5aSpzY2FsZS9LTV9QRVJfREVHX0xBVDsgLy8gY29udmVydCB0byBsYXQKKwkJZG91YmxlIHhzdGVwID0gc2NhbGUvKDIuMCpLTV9QRVJfREVHX0xPTik7CisJCWRvdWJsZSB5c3RlcCA9IHNjYWxlLygyLjAqS01fUEVSX0RFR19MQVQpOworCQkKKwkJLy8gV2UganVzdCBtYWtlIGEgc3F1YXJlLi4uCisJCXNiLmFkZCh4LXhzdGVwLCB5K3lzdGVwKTsKKwkJc2IuYWRkKHgreHN0ZXAsIHkreXN0ZXApOworCQlzYi5hZGQoeCt4c3RlcCwgeS15c3RlcCk7CisJCXNiLmFkZCh4LXhzdGVwLCB5LXlzdGVwKTsKKwkJcmV0VmFsdWUuYWRkKHNiLnRvU2VnbWVudCgpKTsKKworCQlyZXR1cm4gcmV0VmFsdWU7CisJfSAvLyBjcmVhdGVOb2RlUG9seWdvbgorCQorCisJLyoqCisJICogQWxtb3N0IHRoZSBzYW1lIGFzIGNyZWF0ZU5vZGVQb2x5Z29uCisJICogdGhpcyBjb2RlIGhhbmRsZXMgdGhlIG5vcnRoIGFuZCBzb3V0aCBwb2xlcyBpbiBhIHNwZWNpYWwgd2F5CisJICogQHBhcmFtIGxhdAorCSAqIEBwYXJhbSBsbmcKKwkgKiBAcGFyYW0gc2NhbGUgaXMgdGhlIHNjYWxlIGZhY3RvciAoYW5kIHR3aWNlIHRoZSBzdGVwIHNpemUpIGZvciB0aGUgbGF0dGljZQorCSAqIEByZXR1cm4KKwkgKi8KKwlwcml2YXRlIHN0YXRpYyBMYXRMb25nIGNyZWF0ZVBsYXRlQ2FycmVlUG9seWdvbihmaW5hbCBkb3VibGUgbGF0LCBkb3VibGUgbG5nLCBkb3VibGUgc2NhbGUpIHsKKwkJZmluYWwgTGF0TG9uZyByZXRWYWx1ZSA9IG5ldyBMYXRMb25nKCk7CisJCQorCQlmaW5hbCBTZWdtZW50QnVpbGRlciBzYiA9IG5ldyBTZWdtZW50QnVpbGRlcigpOworCQlkb3VibGUgeCA9IGxhdDsKKwkJZG91YmxlIHkgPSBsbmc7CisJCWRvdWJsZSBzdGVwID0gc2NhbGUvMi4wOworCQlkb3VibGUgeG1pbiA9IHgtc3RlcDsKKwkJZG91YmxlIHhtYXggPSB4K3N0ZXA7CisJCWRvdWJsZSB5bWluID0geS1zdGVwOworCQlkb3VibGUgeW1heCA9IHkrc3RlcDsKKwkJaWYoeG1pbiA8IC05MCkgeG1pbiA9IC05MDsKKwkJaWYoeG1heCA+IDkwKSB4bWF4ID0gOTA7CisJCQorCQkvLyBXZSBqdXN0IG1ha2UgYSBzcXVhcmUuLi5pbiBsYXQgbG9uZyBzcGFjZQorCQlzYi5hZGQoeG1pbiwgeW1heCk7CisJCXNiLmFkZCh4bWF4LCB5bWF4KTsKKwkJc2IuYWRkKHhtYXgsIHltaW4pOworCQlzYi5hZGQoeG1pbiwgeW1pbik7CisJCXJldFZhbHVlLmFkZChzYi50b1NlZ21lbnQoKSk7CisKKwkJcmV0dXJuIHJldFZhbHVlOworCX0gLy8gY3JlYXRlTm9kZVBvbHlnb24KKwkKKwkKKwkKKwkKKy8vCS8qKgorLy8JICogRm9yIHRlc3RpbmcKKy8vCSAqIEBwYXJhbSBhcmdzCisvLwkgKi8KKy8vCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKKy8vCQlMYXR0aWNlR2VuZXJhdG9yVXRpbGl0eUltcGwgc2xnaSA9IG5ldyBMYXR0aWNlR2VuZXJhdG9yVXRpbGl0eUltcGwoU1FSX0xBVFRJQ0VfVFlQRSk7CisvLwkJLy9HcmFwaCBnID0gc2xnaS5nZXRHcmFwaCgxMCwgMTAsIDEsIHRydWUsIGZhbHNlLCB0cnVlKTsKKy8vCQlHcmFwaCBnID0gc2xnaS5nZXRQbGF0ZUNhcmVlR3JhcGgoMTAsIDEwMC4wLCB0cnVlLCBmYWxzZSwgdHJ1ZSk7CisvLwkJQWN0aXZhdG9yLmxvZ0luZm9ybWF0aW9uKCJncmFwaCBidWlsdCAuLm5vdyBzYXZlIGl0Iik7CisvLwkJCisvLwkJU3RyaW5nIGdyYXBoVXJpU3RyaW5nID0gInBsYXRmb3JtOi9yZXNvdXJjZS9wbGF5L2dyYXBocy90ZXN0aW5nTGF0dGljZUdyYXBoLmdyYXBoIjsKKy8vCQlnLnNldFVSSShVUkkuY3JlYXRlVVJJKGdyYXBoVXJpU3RyaW5nKSk7CisvLwkJVVJJIG91dHB1dFVSSSA9IFVSSS5jcmVhdGVGaWxlVVJJKCIvVXNlcnMvamhrYXVmL0RvY3VtZW50cy9ydW50aW1lLXN0ZW1NYWNPUy5wcm9kdWN0L3BsYXkvZ3JhcGhzL3NxckxhdHRpY2VHcmFwaC5ncmFwaCIpOworLy8JCQorLy8JCXRyeSB7CisvLwkJCVV0aWxpdHkuc2VyaWFsaXplSWRlbnRpZmlhYmxlKGcsIG91dHB1dFVSSSk7CisvLwkJfSBjYXRjaChFeGNlcHRpb24gZSkgeworLy8JCQllLnByaW50U3RhY2tUcmFjZSgpOworLy8JCX0KKy8vCQkKKy8vCQkKKy8vCQlBY3RpdmF0b3IubG9nSW5mb3JtYXRpb24oImRvbmUiKTsKKy8vCisvLwl9CisKKwkvKioKKwkgKiAKKwkgKiBAcGFyYW0gYW5ndWxhclN0ZXAKKwkgKiBAcGFyYW0gZWFydGhSYWRpdXMKKwkgKiBAcGFyYW0gdXNlTmVhcmVzdE5laWdoYm9ycworCSAqIEBwYXJhbSB1c2VOZXh0TmVhcmVzdE5laWdoYm9ycworCSAqIEBwYXJhbSBwZXJpb2RpY0JvdW5kYXJpZXMKKwkgKiBAcmV0dXJuCisJICovCisJcHVibGljIEdyYXBoIGdldFBsYXRlQ2FyZWVHcmFwaChpbnQgYW5ndWxhclN0ZXAsIGRvdWJsZSBlYXJ0aFJhZGl1cywKKwkJCWJvb2xlYW4gYWRkTmVhcmVzdE5laWdoYm9ycywgYm9vbGVhbiBhZGROZXh0TmVhcmVzdE5laWdoYm9ycywKKwkJCWJvb2xlYW4gcGVyaW9kaWNCb3VuZGFyaWVzKSB7CisJCQorCQlmaW5hbCBHcmFwaCBncmFwaCA9IEdyYXBoRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlR3JhcGgoKTsKKwkJZmluYWwgRHVibGluQ29yZSBkYyA9IGdyYXBoLmdldER1YmxpbkNvcmUoKTsKKwkJZGMucG9wdWxhdGUoKTsKKwkJZGMuc2V0VGl0bGUoTEFUVElDRV9UWVBFKTsKKwkJZGMuc2V0U291cmNlKHRoaXMuZ2V0Q2xhc3MoKS5nZXRTaW1wbGVOYW1lKCkpOworCQlDYWxlbmRhciBjID0gQ2FsZW5kYXIuZ2V0SW5zdGFuY2UoKTsKKyAgICAgICAgU2ltcGxlRGF0ZUZvcm1hdCBmb3JtYXR0ZXIgPSBuZXcgU2ltcGxlRGF0ZUZvcm1hdCgiRSB5eXl5Lk1NLmRkICdhdCcgaGg6bW06c3MgYSB6enoiKTsKKyAgICAgICAgU3RyaW5nIHZhbGlkID0gZm9ybWF0dGVyLmZvcm1hdChjLmdldFRpbWUoKSk7CisgICAgICAgCWRjLnNldFZhbGlkKHZhbGlkKTsKKwkJCQkJCQorICAgICAgIAlpbnQgbGF0U2l6ZSA9ICAoMTgwL2FuZ3VsYXJTdGVwKTsKKyAgICAJaW50IGxuZ1NpemUgPSAgKDM2MC9hbmd1bGFyU3RlcCk7CisJCQlmaW5hbCBOb2RlIG5vZGVIb2xkZXJbXVtdID0gbmV3IE5vZGVbbGF0U2l6ZV1bbG5nU2l6ZV07CisJCQkKKwkJCS8vbHRsZyA9IG5ldyBkb3VibGVbbGF0U2l6ZV1bbG5nU2l6ZV1bMl07CisJCQkKKwkJCS8vIENyZWF0ZSB0aGUgbm9kZXMgYW5kIHB1dCB0aGVtIGludG8gdGhlIGdyYXBoCisJCQkvLyB3ZSBvZmZzZXQgdGhlIGNlbnRlcnMgc28gdGhlIGxpbmVzIG9mIGxvbmcvbGF0IGFyZSByaWdodAorCQkJLy8gdGhlcmUgaXMgbm8gbm9kZSBhdCBlaXRoZXIgcG9sZSwganVzdCBzZWdtZW50cyB3cmFwcGluZyBhcm91bmQKKwkJCWludCBvZmZzZXQgPSBhbmd1bGFyU3RlcC8yOworCQkJaW50IGxhdCA9IC05MDsKKwkJCWludCBsbmcgPSAtMTgwOworCQkJCisJCQkvLyBmb3IgdGVzdGluZworCQkJZG91YmxlIHRvdGFsU3BoZXJlU3VyZmFjZUFyZWEgPSAwLjA7CisJCQkKKwkJCWZvciAoaW50IHggPSAwOyB4IDwgbGF0U2l6ZTsgeCsrKSB7CisJCQkJZm9yIChpbnQgeSA9IDA7IHkgPCBsbmdTaXplOyB5KyspIHsKKwkJCQkJCisJCQkJCVN0cmluZyBsYXRTVFIgPSAiIjsKKwkJCQkJU3RyaW5nIGxuZ1NUUiA9ICIiOworCQkJCQlpZigobGF0K29mZnNldCk+PTAuMCkgeworCQkJCQkJbGF0U1RSICs9IChsYXQrb2Zmc2V0KSsiTiI7CisJCQkJCX0gZWxzZSB7CisJCQkJCQlsYXRTVFIgKz0gTWF0aC5hYnMobGF0K29mZnNldCkrIlMiOworCQkJCQl9CisJCQkJCWlmKChsbmcrb2Zmc2V0KT49MC4wKSB7CisJCQkJCQlsbmdTVFIgKz0gKGxuZytvZmZzZXQpKyJFIjsKKwkJCQkJfSBlbHNlIHsKKwkJCQkJCWxuZ1NUUiArPSBNYXRoLmFicyhsbmcrb2Zmc2V0KSsiVyI7CisJCQkJCX0KKwkJCQkJCQorCQkJCQlmaW5hbCBSZWdpb24gcmVnaW9uTm9kZSA9IGNyZWF0ZVJlZ2lvbk5vZGUoVVJJX0dMQkxfUFJFRklYLCBsYXRTVFIsIGxuZ1NUUiwgZ3JhcGgpOworCQkJCQkKKwkJCQkJLy8gdGVzdAorCQkJCQkvL2x0bGdbeF1beV1bMF0gPSBsYXQrb2Zmc2V0OworCQkJCQkvL2x0bGdbeF1beV1bMV0gPSBsbmcrb2Zmc2V0OworCQkJCQkKKwkJCQkJCisJCQkJCWZpbmFsIEFyZWFMYWJlbCBhcmVhTGFiZWwgPSBMYWJlbHNGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVBcmVhTGFiZWwoKTsKKwkJCQkJZG91YmxlIGFyZWEgPSBnZXRBcmVhT25TcGhlcmUobGF0K29mZnNldCxsbmcrb2Zmc2V0LGFuZ3VsYXJTdGVwLGVhcnRoUmFkaXVzKTsKKwkJCQkJdG90YWxTcGhlcmVTdXJmYWNlQXJlYSs9IGFyZWE7CisJCQkJCWFyZWFMYWJlbC5nZXRDdXJyZW50QXJlYVZhbHVlKCkuc2V0QXJlYShhcmVhKTsKKwkJCQkJcmVnaW9uTm9kZS5nZXRMYWJlbHMoKS5hZGQoYXJlYUxhYmVsKTsKKwkJCQorCQkJCQlub2RlSG9sZGVyW3hdW3ldID0gcmVnaW9uTm9kZTsKKwkJCQkJZ3JhcGgucHV0Tm9kZShyZWdpb25Ob2RlKTsKKwkJCQkJCisJCQkJCWxuZys9IGFuZ3VsYXJTdGVwOworCQkJCQkKKwkJCQl9IC8vIGZvciBlYWNoIGxuZworCQkJCQorCQkJCWxhdCs9IGFuZ3VsYXJTdGVwOworCQkJCWxuZyA9IC0xODA7Ly8gcmVzZXQKKwkJCX0gLy8gZm9yIGVhY2ggbGF0CisJCQkKKwkJCS8vIHRlc3RpbmcKKwkJCS8vQWN0aXZhdG9yLmxvZ0luZm9ybWF0aW9uKCJHb3QgdG90YWwgQVJFQSA9ICIrdG90YWxTcGhlcmVTdXJmYWNlQXJlYSsiICBlYXJ0aCBzaG91bGQgYmUgNTEwMDcyMDAwIGttMiIpOworCQkJCisJCQkvLyBBZGQgdGhlIHNwYXRpYWwgcG9seWdvbnMgdG8gdGhlIHNwYXRpYWwgYXR0cmlidXRlIG9mIGVhY2ggbm9kZSdzCisJCQkvLyBkdWJsaW4gY29yZSBpbnN0YW5jZSBhbmQgZm9yIGVhY2ggZWRnZS4gVGhlIHZhbHVlIGZvciB0aGUgbm9kZXMgd2lsbAorCQkJLy8gYmUgYSByZWN0YW5ndWxhciBhcmVhIGV4cHJlc3NlZCBhcyBhIHNldCBvZiBsYXQvbG9uZyBwb2ludHMgdGhhdAorCQkJLy8gbGF5b3V0IGEgcG9seWdvbi4gVGhlIHBvc2l0aW9uIG9mIHRoZSBwb2x5Z29uIHdpbGwgYXQgcG9zaXRpb24gdGhhdAorCQkJLy8gbWF0Y2hlcyB0aGUgcG9zaXRpb24gKHgsIHkpIG9mIHRoZSBub2RlIGluIHRoZSBsYXR0aWNlLgorCQkJYWRkU3BhdGlhbFNwZWNpZmljYXRpb25zKG5vZGVIb2xkZXIsIGFuZ3VsYXJTdGVwLCBsYXRTaXplLCBsbmdTaXplKTsKKwkJCQorCisgCQkJLy8gSWYgd2UgYXJlIGluY2x1ZGluZyBOZWFyZXN0IE5laWdoYm9ycyAoTk4pCisJCQlpZihhZGROZWFyZXN0TmVpZ2hib3JzKSB7CisJCQkJLy9BZGQgdGhlIGVkZ2VzCisJCQkJZm9yIChpbnQgeCA9IDA7IHggPCBsYXRTaXplOyB4KyspIHsKKwkJCQkJZm9yIChpbnQgeSA9IDA7IHkgPCBsbmdTaXplOyB5KyspIHsKKwkJCQkJCWlmKCh5LTEpPj0wKSB7CisJCQkJCQkJY3JlYXRlRWRnZShncmFwaCxub2RlSG9sZGVyW3hdW3kgLSAxXSxub2RlSG9sZGVyW3hdW3ldLCBhbmd1bGFyU3RlcCk7CisJCQkJCQl9IGVsc2UgeworCQkJCQkJCWlmKHBlcmlvZGljQm91bmRhcmllcykgeworCQkJCQkJCQljcmVhdGVFZGdlKGdyYXBoLG5vZGVIb2xkZXJbeF1bbG5nU2l6ZSAtIDFdLG5vZGVIb2xkZXJbeF1beV0sIGFuZ3VsYXJTdGVwKTsKKwkJCQkJCQl9CisJCQkJCQl9CisJCQkJCQkKKwkJCQkJCWlmKCh4LTEpPj0wKSB7CisJCQkJCQkJY3JlYXRlRWRnZShncmFwaCxub2RlSG9sZGVyW3ggLSAxXVt5XSxub2RlSG9sZGVyW3hdW3ldLCBhbmd1bGFyU3RlcCk7CisJCQkJCQl9CisJCQkJCQkvLyB3ZSBkb24ndCB3cmFwIGluIGxhdGl0dWRlICh4KSBhcyBub3J0aCBwb2xlIGlzIG5vdCBjb25uZWN0ZWQgdG8gc291dGgKKwkJCQkJCQorCQkJCQl9IC8vIGZvciBlYWNoIHkKKwkJCQl9IC8vIGZvciBlYWNoIHgKKwkJCX0vLyBOTiBlZGdlcworCisJCQkvLyBJZiB3ZSBhcmUgaW5jbHVkaW5nIE5FWFQgTmVhcmVzdCBOZWlnaGJvcnMgKE5OTikKKwkJCS8vIFRPRE8gbm8gbmV4dCBuZWFyZXN0IG5laWdoYm9ycyBmb3Igbm93CisvLwkJCWlmKGFkZE5leHROZWFyZXN0TmVpZ2hib3JzKSB7CisvLwkJCQlmb3IgKGludCB4ID0gMDsgeCA8IHhTaXplOyB4KyspIHsKKy8vCQkJCQlmb3IgKGludCB5ID0gMDsgeSA8IHlTaXplOyB5KyspIHsKKy8vCQkJCQkJLy8gdXBwcGVyIHJpZ2h0PworLy8JCQkJCQlpZiggKCh4KzEpPHhTaXplKSAmJiAoKHkrMSk8eVNpemUpICkgeworLy8JCQkJCQkJY3JlYXRlRWRnZShncmFwaCxub2RlSG9sZGVyW3hdW3ldLG5vZGVIb2xkZXJbeCsxXVt5KzFdLCBjb21tb25Cb3JkZXJMZW5ndGgpOworLy8JCQkJCQl9IGVsc2UgeworLy8JCQkJCQkJCWlmKHBlcmlvZGljQm91bmRhcmllcykgeworLy8JCQkJCQkJCQlpbnQgeDIgPSB4KzE7CisvLwkJCQkJCQkJCWludCB5MiA9IHkrMTsKKy8vCQkJCQkJCQkJaWYoeDI+PXhTaXplKSB4Mj0wOworLy8JCQkJCQkJCQlpZih5Mj49eVNpemUpIHkyPTA7CisvLwkJCQkJCQkJCWNyZWF0ZUVkZ2UoZ3JhcGgsbm9kZUhvbGRlclt4XVt5XSxub2RlSG9sZGVyW3gyXVt5Ml0sIGNvbW1vbkJvcmRlckxlbmd0aCk7CisvLwkJCQkJCQkJfQorLy8JCQkJCQl9Ly8gdXBwZXIgcmlnaHQKKy8vCQkJCQkJCQorLy8JCQkJCQkvLyBsb3dlciByaWdodAorLy8JCQkJCQlpZiggKCh4KzEpPHhTaXplKSAmJiAoKHktMSk+PTApICkgeworLy8JCQkJCQkJY3JlYXRlRWRnZShncmFwaCxub2RlSG9sZGVyW3hdW3ldLG5vZGVIb2xkZXJbeCsxXVt5LTFdLCBjb21tb25Cb3JkZXJMZW5ndGgpOworLy8JCQkJCQl9IGVsc2UgeworLy8JCQkJCQkJaWYocGVyaW9kaWNCb3VuZGFyaWVzKSB7CisvLwkJCQkJCQkJaW50IHgyID0geCsxOworLy8JCQkJCQkJCWludCB5MiA9IHktMTsKKy8vCQkJCQkJCQlpZih4Mj49eFNpemUpIHgyPTA7CisvLwkJCQkJCQkJaWYoeTIgPD0gLTEpIHkyPXlTaXplLTE7CisvLwkJCQkJCQkJY3JlYXRlRWRnZShncmFwaCxub2RlSG9sZGVyW3hdW3ldLG5vZGVIb2xkZXJbeDJdW3kyXSwgY29tbW9uQm9yZGVyTGVuZ3RoKTsKKy8vCQkJCQkJCX0KKy8vCQkJCQkJfQorLy8JCQkJCQkKKy8vCQkJCQl9IC8vIGZvciBlYWNoIHkKKy8vCQkJCX0gLy8gZm9yIGVhY2ggeAorLy8JCQkJCisvLwkJCX0vLyBOTk4gZWRnZXMKKworCQkJYXNzZXJ0IGdyYXBoLnNhbmUoKTsKKworCQkJLy90ZXN0Q29tbW9uQm9yZGVyRWRnZXMoZ3JhcGgsIDEwLjApOworCQkJCisJCQlyZXR1cm4gZ3JhcGg7CisJfQorCQorCS8qKgorCSAqIGFyZWEgZWxlbWVudCBvbiBzcGhlcmUgaXMKKwkgKiBkQSA9IChSXjIpIHNpbih0aGV0YSkgZCh0aGV0YSkgZChwaGkpCisJICogb3IKKwkgKiBkQSA9IChSXjIpIHNpbihsbmcpZChsbmcpZChwaGkpIGFsbCBpbiByYWRpYW5zCisJICogaW50ZWdyYXRpbmcgdGhpcyB0aGUgYXJlYSBpcworCSAqIEEgPSAoUl4yKVtjb3MobWF4TGF0KS1jb3MobWluTGF0KV1bbWF4TG5nIC0gbWluTG5nXQorCSAqIFIgaXMgY29uc3RhbnQgYXMgaXMgW21heExuZy1taW5MbmddCisJICogQHBhcmFtIGNlbnRlckxhdAorCSAqIEBwYXJhbSBjZW50ZXJMbmcKKwkgKiBAcGFyYW0gYW5ndWxhclN0ZXAKKwkgKiBAcGFyYW0gZWFydGhSYWRpdXMKKwkgKiBAcmV0dXJuCisJICovCisJcHVibGljIGRvdWJsZSBnZXRBcmVhT25TcGhlcmUoZG91YmxlIGNlbnRlckxhdCwgZG91YmxlIGNlbnRlckxuZywgZG91YmxlIGFuZ3VsYXJTaXplLCBkb3VibGUgcmFkaXVzKXsKKwkJZG91YmxlIHN0ZXAgPSBhbmd1bGFyU2l6ZS8yLjA7CisJCWRvdWJsZSBtaW5MYXQgPSAoOTAuMCtjZW50ZXJMYXQgLSBzdGVwKSpERUdSRUVTX1RPX1JBRElBTlM7IC8vIDAgdG8gcGkKKwkJZG91YmxlIG1heExhdCA9ICg5MC4wK2NlbnRlckxhdCArIHN0ZXApKkRFR1JFRVNfVE9fUkFESUFOUzsgLy8gMCB0byBwaQorCQlkb3VibGUgbWluTG5nID0gKGNlbnRlckxuZyAtIHN0ZXApKkRFR1JFRVNfVE9fUkFESUFOUzsKKwkJZG91YmxlIG1heExuZyA9IChjZW50ZXJMbmcgKyBzdGVwKSpERUdSRUVTX1RPX1JBRElBTlM7CisJCQorCQlmaW5hbCBkb3VibGUgZExuZyA9IE1hdGguYWJzKG1heExuZyAtIG1pbkxuZyk7CisJCWZpbmFsIGRvdWJsZSByMiA9ICByYWRpdXMqcmFkaXVzOworCQlmaW5hbCBkb3VibGUgbGF0VGVybSA9IE1hdGguY29zKG1heExhdCktTWF0aC5jb3MobWluTGF0KTsKKwkJZmluYWwgZG91YmxlIGFyZWEgPSByMipkTG5nKihNYXRoLmFicyhsYXRUZXJtKSk7CisJCQorCQlyZXR1cm4gYXJlYTsKKwl9CisJCisJLyoqCisJICogdGVzdCB0aGF0IHRoZSBjb21tb24gYm9yZGVyIGVkZ2VzIGFyZSBzYW5lCisJICogbGVuZ3RoIHNob3VsZCBiZSA8PSBzcXJ0KDIpIG1heCBsYXRpY2UgY29uc3QuCisJICogQHBhcmFtIGcKKwkgKiBAcGFyYW0gbWF4TGF0dGljZUNvbnN0YW50CisJICovCisJcHVibGljIGJvb2xlYW4gdGVzdENvbW1vbkJvcmRlckVkZ2VzKEdyYXBoIGcsIGRvdWJsZSBtYXhMYXR0aWNlQ29uc3RhbnQpIHsKKwkJCWRvdWJsZSBkbWF4ID0gMS4wMSpNYXRoLnNxcnQoMi4wKSptYXhMYXR0aWNlQ29uc3RhbnQ7CisJCQlFTWFwPFVSSSxFZGdlPiBlZGdlTWFwID0gZy5nZXRFZGdlcygpOworCQkJSXRlcmF0b3I8VVJJPiBpdGVyID0gZWRnZU1hcC5rZXlTZXQoKS5pdGVyYXRvcigpOworCQkJd2hpbGUoaXRlci5oYXNOZXh0KCkpIHsKKwkJCQlVUkkga2V5ID0gaXRlci5uZXh0KCk7CisJCQkJRWRnZSBlID0gZWRnZU1hcC5nZXQoa2V5KTsKKwkJCQlOb2RlIG5BID0gZS5nZXRBKCk7CisJCQkJTm9kZSBuQiA9IGUuZ2V0QigpOworCQkJCQorCQkJCWZpbmFsIExhdExvbmdQcm92aWRlckFkYXB0ZXIgbGF0TG9uZ1Byb3ZpZGVyQSA9IChMYXRMb25nUHJvdmlkZXJBZGFwdGVyKSBMYXRMb25nUHJvdmlkZXJBZGFwdGVyRmFjdG9yeS5JTlNUQU5DRS5hZGFwdChuQSwgTGF0TG9uZ1Byb3ZpZGVyLmNsYXNzKTsKKwkJCQlsYXRMb25nUHJvdmlkZXJBLnNldFRhcmdldChuQSk7CisJCQkJZG91YmxlW10gYUMgPSBsYXRMb25nUHJvdmlkZXJBLmdldENlbnRlcigpOworCQkJCQorCQkJCWZpbmFsIExhdExvbmdQcm92aWRlckFkYXB0ZXIgbGF0TG9uZ1Byb3ZpZGVyQiA9IChMYXRMb25nUHJvdmlkZXJBZGFwdGVyKSBMYXRMb25nUHJvdmlkZXJBZGFwdGVyRmFjdG9yeS5JTlNUQU5DRS5hZGFwdChuQiwgTGF0TG9uZ1Byb3ZpZGVyLmNsYXNzKTsKKwkJCQlsYXRMb25nUHJvdmlkZXJCLnNldFRhcmdldChuQik7CisJCQkJZG91YmxlW10gYkMgPSBsYXRMb25nUHJvdmlkZXJCLmdldENlbnRlcigpOworCQkJCWRvdWJsZSByMiA9ICgoYUNbMF0tYkNbMF0pKihhQ1swXS1iQ1swXSkpICsgKChhQ1sxXS1iQ1sxXSkqKGFDWzFdLWJDWzFdKSk7CisJCQkJZG91YmxlIGRpc3QgPSBNYXRoLnNxcnQocjIpOworCQkJCisJCQkJaWYoZGlzdCA+IGRtYXgpIHsKKwkJCQkJLy8gb25lIGVycm9yIGlzIGVub3VnaCB0byBmYWlsCisJCQkJCUFjdGl2YXRvci5sb2dJbmZvcm1hdGlvbigiRXJyb3IgLSBmb3VuZCBib25kIGxlbmd0aCAiK2Rpc3QrICIgeGEseWE9ICIrYUNbMF0rIiwiK2FDWzFdKyAiPT0iK2JDWzBdKyIsIitiQ1sxXSk7CisJCQkJCXJldHVybiBmYWxzZTsKKwkJCQl9CisJCQl9CisJCQlyZXR1cm4gdHJ1ZTsKKwl9CisKKworCQorfS8vIFNxckxhdHRpY2VHZW5lcmF0b3JJbXBsCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvbWVzc2FnZXMucHJvcGVydGllcyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy9tZXNzYWdlcy5wcm9wZXJ0aWVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY3MjAxNGQKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvbWVzc2FnZXMucHJvcGVydGllcwpAQCAtMCwwICsxLDE2IEBACisjIG1lc3NhZ2VzLnByb3BlcnRpZXMKKyMKKyMvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIyAqIENvcHlyaWdodCAoYykgMjAxIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorIyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyMgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyMgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorIyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisjICoKKyMgKiBDb250cmlidXRvcnM6CisjICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorIyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjIFN0cmluZ3MgZm9yIE5MUworCitkZWZpbml0aW9ucy5kZWZhdWx0X3BvcHVsYXRpb24gPSBodW1hbgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL21lc3NhZ2VzX2RlLnByb3BlcnRpZXMgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvbWVzc2FnZXNfZGUucHJvcGVydGllcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYWRkODJiCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL21lc3NhZ2VzX2RlLnByb3BlcnRpZXMKQEAgLTAsMCArMSwxNiBAQAorIyBtZXNzYWdlcy5wcm9wZXJ0aWVzCisjCisjLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyMgKiBDb3B5cmlnaHQgKGMpIDIwMSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyMgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisjICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisjICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyMgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorIyAqCisjICogQ29udHJpYnV0b3JzOgorIyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworIyBTdHJpbmdzIGZvciBOTFMKKworZGVmaW5pdGlvbnMuZGVmYXVsdF9wb3B1bGF0aW9uPU1lbnNjaApkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL21lc3NhZ2VzX2tyLnByb3BlcnRpZXMgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvbWVzc2FnZXNfa3IucHJvcGVydGllcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNzVjODk0Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL21lc3NhZ2VzX2tyLnByb3BlcnRpZXMKQEAgLTAsMCArMSwxNiBAQAorIyBtZXNzYWdlcy5wcm9wZXJ0aWVzCisjCisjLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyMgKiBDb3B5cmlnaHQgKGMpIDIwMSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyMgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisjICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisjICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyMgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorIyAqCisjICogQ29udHJpYnV0b3JzOgorIyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworIyBTdHJpbmdzIGZvciBOTFMKKworZGVmaW5pdGlvbnMuZGVmYXVsdF9wb3B1bGF0aW9uPVx1YzBhY1x1Yjc4Y1x1Yzc1OApkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL21lc3NhZ2VzX3poLnByb3BlcnRpZXMgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvbWVzc2FnZXNfemgucHJvcGVydGllcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMWU3ZDI4Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL21lc3NhZ2VzX3poLnByb3BlcnRpZXMKQEAgLTAsMCArMSwxNiBAQAorIyBtZXNzYWdlcy5wcm9wZXJ0aWVzCisjCisjLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyMgKiBDb3B5cmlnaHQgKGMpIDIwMSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyMgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisjICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisjICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyMgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorIyAqCisjICogQ29udHJpYnV0b3JzOgorIyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworIyBTdHJpbmdzIGZvciBOTFMKKworZGVmaW5pdGlvbnMuZGVmYXVsdF9wb3B1bGF0aW9uPVx1NGViYVx1N2M3YgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL25vZGVzL0dlb2dyYXBoaWNGZWF0dXJlLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvbm9kZXMvR2VvZ3JhcGhpY0ZlYXR1cmUuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NWY4NjQwCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL25vZGVzL0dlb2dyYXBoaWNGZWF0dXJlLmphdmEKQEAgLTAsMCArMSwzMiBAQAorLy8gR2VvZ3JhcGhpY0ZlYXR1cmUuamF2YQorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLm5vZGVzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAKKyAqIENvcHlyaWdodCAoYykgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4gCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIAorICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wIAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQgCisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbCAKKyAqIAorICogQ29udHJpYnV0b3JzOiAKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLy9pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3Q7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLk5vZGU7CisKKy8qKgorICogVGhpcyBpbnRlcmZhY2UgZGVmaW5lcyBhIGNsYXNzIGluIGFuIEVNRiBtb2RlbCBmb3IgYSBHZW9ncmFwaGljIEZlYXR1cmUgbm9kZS4KKyAqIAorICogQG1vZGVsIGFic3RyYWN0PSJ0cnVlIgorICovCitwdWJsaWMgaW50ZXJmYWNlIEdlb2dyYXBoaWNGZWF0dXJlIGV4dGVuZHMgTm9kZSB7CisKKwkvKioKKwkgKiBUaGlzIGlzIHRoZSBzZWdtZW50IG9mIHRoZSB0eXBlIFVSSSB0aGF0IHByZWZpeGVzIGFsbCBvdGhlciBzZWdtZW50cyBpbiBhCisJICogZ2VvZ3JhcGhpYyBmZWF0dXJlIG5vZGUgdHlwZSBVUkkuCisJICovCisJU3RyaW5nIFVSSV9UWVBFX0dFT0dSQVBISUNfRkVBVFVSRV9OT0RFX1NFR01FTlQgPSBVUklfVFlQRV9OT0RFX1NFR01FTlQKKwkJCSsgIi9nZW8iOworCit9IC8vIEdlb2dyYXBoaWNGZWF0dXJlCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvbm9kZXMvTm9kZXNGYWN0b3J5LmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvbm9kZXMvTm9kZXNGYWN0b3J5LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTllNWQzMAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy9ub2Rlcy9Ob2Rlc0ZhY3RvcnkuamF2YQpAQCAtMCwwICsxLDUxIEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubm9kZXM7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVGYWN0b3J5OworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiBUaGUgPGI+RmFjdG9yeTwvYj4gZm9yIHRoZSBtb2RlbC4KKyAqIEl0IHByb3ZpZGVzIGEgY3JlYXRlIG1ldGhvZCBmb3IgZWFjaCBub24tYWJzdHJhY3QgY2xhc3Mgb2YgdGhlIG1vZGVsLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubm9kZXMuTm9kZXNQYWNrYWdlCisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBpbnRlcmZhY2UgTm9kZXNGYWN0b3J5IGV4dGVuZHMgRUZhY3RvcnkgeworCS8qKgorCSAqIFRoZSBzaW5nbGV0b24gaW5zdGFuY2Ugb2YgdGhlIGZhY3RvcnkuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJTm9kZXNGYWN0b3J5IGVJTlNUQU5DRSA9IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubm9kZXMuaW1wbC5Ob2Rlc0ZhY3RvcnlJbXBsLmluaXQoKTsKKworCS8qKgorCSAqIFJldHVybnMgYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+UmVnaW9uPC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiBhIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5SZWdpb248L2VtPicuCisJICogQGdlbmVyYXRlZAorCSAqLworCVJlZ2lvbiBjcmVhdGVSZWdpb24oKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIHBhY2thZ2Ugc3VwcG9ydGVkIGJ5IHRoaXMgZmFjdG9yeS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIHBhY2thZ2Ugc3VwcG9ydGVkIGJ5IHRoaXMgZmFjdG9yeS4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJTm9kZXNQYWNrYWdlIGdldE5vZGVzUGFja2FnZSgpOworCit9IC8vTm9kZXNGYWN0b3J5CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvbm9kZXMvTm9kZXNQYWNrYWdlLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvbm9kZXMvTm9kZXNQYWNrYWdlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTY0Mjc0OQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy9ub2Rlcy9Ob2Rlc1BhY2thZ2UuamF2YQpAQCAtMCwwICsxLDI5OSBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLm5vZGVzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5HcmFwaFBhY2thZ2U7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIFRoZSA8Yj5QYWNrYWdlPC9iPiBmb3IgdGhlIG1vZGVsLgorICogSXQgY29udGFpbnMgYWNjZXNzb3JzIGZvciB0aGUgbWV0YSBvYmplY3RzIHRvIHJlcHJlc2VudAorICogPHVsPgorICogICA8bGk+ZWFjaCBjbGFzcyw8L2xpPgorICogICA8bGk+ZWFjaCBmZWF0dXJlIG9mIGVhY2ggY2xhc3MsPC9saT4KKyAqICAgPGxpPmVhY2ggZW51bSw8L2xpPgorICogICA8bGk+YW5kIGVhY2ggZGF0YSB0eXBlPC9saT4KKyAqIDwvdWw+CisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5ub2Rlcy5Ob2Rlc0ZhY3RvcnkKKyAqIEBtb2RlbCBraW5kPSJwYWNrYWdlIgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgaW50ZXJmYWNlIE5vZGVzUGFja2FnZSBleHRlbmRzIEVQYWNrYWdlIHsKKwkvKioKKwkgKiBUaGUgcGFja2FnZSBuYW1lLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCVN0cmluZyBlTkFNRSA9ICJub2RlcyI7CisKKwkvKioKKwkgKiBUaGUgcGFja2FnZSBuYW1lc3BhY2UgVVJJLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCVN0cmluZyBlTlNfVVJJID0gImh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy9ub2Rlcy5lY29yZSI7CisKKwkvKioKKwkgKiBUaGUgcGFja2FnZSBuYW1lc3BhY2UgbmFtZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlTdHJpbmcgZU5TX1BSRUZJWCA9ICJvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLm5vZGVzIjsKKworCS8qKgorCSAqIFRoZSBzaW5nbGV0b24gaW5zdGFuY2Ugb2YgdGhlIHBhY2thZ2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJTm9kZXNQYWNrYWdlIGVJTlNUQU5DRSA9IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubm9kZXMuaW1wbC5Ob2Rlc1BhY2thZ2VJbXBsLmluaXQoKTsKKworCS8qKgorCSAqIFRoZSBtZXRhIG9iamVjdCBpZCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLk5vZGUgPGVtPk5vZGU8L2VtPn0nIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguTm9kZQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5ub2Rlcy5pbXBsLk5vZGVzUGFja2FnZUltcGwjZ2V0Tm9kZSgpCisJICogQGdlbmVyYXRlZAorCSAqLworCWludCBOT0RFID0gMjsKKworCS8qKgorCSAqIFRoZSBtZXRhIG9iamVjdCBpZCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5ub2Rlcy5pbXBsLkdlb2dyYXBoaWNGZWF0dXJlSW1wbCA8ZW0+R2VvZ3JhcGhpYyBGZWF0dXJlPC9lbT59JyBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5ub2Rlcy5pbXBsLkdlb2dyYXBoaWNGZWF0dXJlSW1wbAorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5ub2Rlcy5pbXBsLk5vZGVzUGFja2FnZUltcGwjZ2V0R2VvZ3JhcGhpY0ZlYXR1cmUoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlpbnQgR0VPR1JBUEhJQ19GRUFUVVJFID0gMDsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5VUkk8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBHRU9HUkFQSElDX0ZFQVRVUkVfX1VSSSA9IEdyYXBoUGFja2FnZS5OT0RFX19VUkk7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VHlwZSBVUkk8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBHRU9HUkFQSElDX0ZFQVRVUkVfX1RZUEVfVVJJID0gR3JhcGhQYWNrYWdlLk5PREVfX1RZUEVfVVJJOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkR1YmxpbiBDb3JlPC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgR0VPR1JBUEhJQ19GRUFUVVJFX19EVUJMSU5fQ09SRSA9IEdyYXBoUGFja2FnZS5OT0RFX19EVUJMSU5fQ09SRTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5FZGdlczwvYj48L2VtPicgcmVmZXJlbmNlIGxpc3QuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgR0VPR1JBUEhJQ19GRUFUVVJFX19FREdFUyA9IEdyYXBoUGFja2FnZS5OT0RFX19FREdFUzsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5MYWJlbHM8L2I+PC9lbT4nIHJlZmVyZW5jZSBsaXN0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IEdFT0dSQVBISUNfRkVBVFVSRV9fTEFCRUxTID0gR3JhcGhQYWNrYWdlLk5PREVfX0xBQkVMUzsKKworCS8qKgorCSAqIFRoZSBudW1iZXIgb2Ygc3RydWN0dXJhbCBmZWF0dXJlcyBvZiB0aGUgJzxlbT5HZW9ncmFwaGljIEZlYXR1cmU8L2VtPicgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgR0VPR1JBUEhJQ19GRUFUVVJFX0ZFQVRVUkVfQ09VTlQgPSBHcmFwaFBhY2thZ2UuTk9ERV9GRUFUVVJFX0NPVU5UICsgMDsKKworCS8qKgorCSAqIFRoZSBtZXRhIG9iamVjdCBpZCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5ub2Rlcy5pbXBsLlJlZ2lvbkltcGwgPGVtPlJlZ2lvbjwvZW0+fScgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubm9kZXMuaW1wbC5SZWdpb25JbXBsCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLm5vZGVzLmltcGwuTm9kZXNQYWNrYWdlSW1wbCNnZXRSZWdpb24oKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlpbnQgUkVHSU9OID0gMTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5VUkk8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBSRUdJT05fX1VSSSA9IEdFT0dSQVBISUNfRkVBVFVSRV9fVVJJOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlR5cGUgVVJJPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgUkVHSU9OX19UWVBFX1VSSSA9IEdFT0dSQVBISUNfRkVBVFVSRV9fVFlQRV9VUkk7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RHVibGluIENvcmU8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBSRUdJT05fX0RVQkxJTl9DT1JFID0gR0VPR1JBUEhJQ19GRUFUVVJFX19EVUJMSU5fQ09SRTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5FZGdlczwvYj48L2VtPicgcmVmZXJlbmNlIGxpc3QuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgUkVHSU9OX19FREdFUyA9IEdFT0dSQVBISUNfRkVBVFVSRV9fRURHRVM7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+TGFiZWxzPC9iPjwvZW0+JyByZWZlcmVuY2UgbGlzdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBSRUdJT05fX0xBQkVMUyA9IEdFT0dSQVBISUNfRkVBVFVSRV9fTEFCRUxTOworCisJLyoqCisJICogVGhlIG51bWJlciBvZiBzdHJ1Y3R1cmFsIGZlYXR1cmVzIG9mIHRoZSAnPGVtPlJlZ2lvbjwvZW0+JyBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBSRUdJT05fRkVBVFVSRV9DT1VOVCA9IEdFT0dSQVBISUNfRkVBVFVSRV9GRUFUVVJFX0NPVU5UICsgMDsKKworCisJLyoqCisJICogVGhlIG51bWJlciBvZiBzdHJ1Y3R1cmFsIGZlYXR1cmVzIG9mIHRoZSAnPGVtPk5vZGU8L2VtPicgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgTk9ERV9GRUFUVVJFX0NPVU5UID0gMDsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubm9kZXMuR2VvZ3JhcGhpY0ZlYXR1cmUgPGVtPkdlb2dyYXBoaWMgRmVhdHVyZTwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJzxlbT5HZW9ncmFwaGljIEZlYXR1cmU8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLm5vZGVzLkdlb2dyYXBoaWNGZWF0dXJlCisJICogQGdlbmVyYXRlZAorCSAqLworCUVDbGFzcyBnZXRHZW9ncmFwaGljRmVhdHVyZSgpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5ub2Rlcy5SZWdpb24gPGVtPlJlZ2lvbjwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJzxlbT5SZWdpb248L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLm5vZGVzLlJlZ2lvbgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQ2xhc3MgZ2V0UmVnaW9uKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguTm9kZSA8ZW0+Tm9kZTwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJzxlbT5Ob2RlPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLk5vZGUKKwkgKiBAbW9kZWwgaW5zdGFuY2VDbGFzcz0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLk5vZGUiCisJICogQGdlbmVyYXRlZAorCSAqLworCUVDbGFzcyBnZXROb2RlKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBmYWN0b3J5IHRoYXQgY3JlYXRlcyB0aGUgaW5zdGFuY2VzIG9mIHRoZSBtb2RlbC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIGZhY3RvcnkgdGhhdCBjcmVhdGVzIHRoZSBpbnN0YW5jZXMgb2YgdGhlIG1vZGVsLgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlOb2Rlc0ZhY3RvcnkgZ2V0Tm9kZXNGYWN0b3J5KCk7CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIERlZmluZXMgbGl0ZXJhbHMgZm9yIHRoZSBtZXRhIG9iamVjdHMgdGhhdCByZXByZXNlbnQKKwkgKiA8dWw+CisJICogICA8bGk+ZWFjaCBjbGFzcyw8L2xpPgorCSAqICAgPGxpPmVhY2ggZmVhdHVyZSBvZiBlYWNoIGNsYXNzLDwvbGk+CisJICogICA8bGk+ZWFjaCBlbnVtLDwvbGk+CisJICogICA8bGk+YW5kIGVhY2ggZGF0YSB0eXBlPC9saT4KKwkgKiA8L3VsPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlpbnRlcmZhY2UgTGl0ZXJhbHMgIHsKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLm5vZGVzLmltcGwuR2VvZ3JhcGhpY0ZlYXR1cmVJbXBsIDxlbT5HZW9ncmFwaGljIEZlYXR1cmU8L2VtPn0nIGNsYXNzLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLm5vZGVzLmltcGwuR2VvZ3JhcGhpY0ZlYXR1cmVJbXBsCisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5ub2Rlcy5pbXBsLk5vZGVzUGFja2FnZUltcGwjZ2V0R2VvZ3JhcGhpY0ZlYXR1cmUoKQorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQ2xhc3MgR0VPR1JBUEhJQ19GRUFUVVJFID0gZUlOU1RBTkNFLmdldEdlb2dyYXBoaWNGZWF0dXJlKCk7CisKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLm5vZGVzLmltcGwuUmVnaW9uSW1wbCA8ZW0+UmVnaW9uPC9lbT59JyBjbGFzcy4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5ub2Rlcy5pbXBsLlJlZ2lvbkltcGwKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLm5vZGVzLmltcGwuTm9kZXNQYWNrYWdlSW1wbCNnZXRSZWdpb24oKQorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQ2xhc3MgUkVHSU9OID0gZUlOU1RBTkNFLmdldFJlZ2lvbigpOworCisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLk5vZGUgPGVtPk5vZGU8L2VtPn0nIGNsYXNzLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguTm9kZQorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubm9kZXMuaW1wbC5Ob2Rlc1BhY2thZ2VJbXBsI2dldE5vZGUoKQorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQ2xhc3MgTk9ERSA9IGVJTlNUQU5DRS5nZXROb2RlKCk7CisKKwl9CisKK30gLy9Ob2Rlc1BhY2thZ2UKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy9ub2Rlcy9SZWdpb24uamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy9ub2Rlcy9SZWdpb24uamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42OTJjZDZkCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL25vZGVzL1JlZ2lvbi5qYXZhCkBAIC0wLDAgKzEsMzEgQEAKKy8vIFJlZ2lvbi5qYXZhCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubm9kZXM7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIAorICogQ29weXJpZ2h0IChjKSAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiAKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdCAKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sIAorICogCisgKiBDb250cmlidXRvcnM6IAorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiAKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioKKyAqIFRoaXMgaW50ZXJmYWNlIGRlZmluZXMgYSBjbGFzcyBpbiBhbiBFTUYgbW9kZWwgZm9yIGEgUmVnaW9uIG5vZGUuCisgKiAKKyAqIEBtb2RlbAorICovCitwdWJsaWMgaW50ZXJmYWNlIFJlZ2lvbiBleHRlbmRzIEdlb2dyYXBoaWNGZWF0dXJlIHsKKworCS8qKgorCSAqIFRoaXMgaXMgdGhlIHNlZ21lbnQgb2YgdGhlIHR5cGUgVVJJIHRoYXQgcHJlZml4ZXMgYWxsIG90aGVyIHNlZ21lbnRzIGluIGEKKwkgKiBnZW9ncmFwaGljIGZlYXR1cmUgbm9kZSB0eXBlIFVSSS4KKwkgKi8KKwlTdHJpbmcgVVJJX1RZUEVfUkVHSU9OX05PREVfU0VHTUVOVCA9IFVSSV9UWVBFX0dFT0dSQVBISUNfRkVBVFVSRV9OT0RFX1NFR01FTlQKKwkJCSsgIi9yZWdpb24iOworCisJU3RyaW5nIERVQkxJTl9DT1JFX1NVQkpFQ1QgPSAicmVnaW9uIjsKKwkKK30gLy8gUmVnaW9uCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvbm9kZXMvaW1wbC9HZW9ncmFwaGljRmVhdHVyZUltcGwuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy9ub2Rlcy9pbXBsL0dlb2dyYXBoaWNGZWF0dXJlSW1wbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg5ZjdlY2IKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvbm9kZXMvaW1wbC9HZW9ncmFwaGljRmVhdHVyZUltcGwuamF2YQpAQCAtMCwwICsxLDQ4IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubm9kZXMuaW1wbDsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5pbXBsLk5vZGVJbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubm9kZXMuR2VvZ3JhcGhpY0ZlYXR1cmU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5ub2Rlcy5Ob2Rlc1BhY2thZ2U7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIEFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5HZW9ncmFwaGljIEZlYXR1cmU8L2I+PC9lbT4nLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiA8cD4KKyAqIDwvcD4KKyAqCisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBhYnN0cmFjdCBjbGFzcyBHZW9ncmFwaGljRmVhdHVyZUltcGwgZXh0ZW5kcyBOb2RlSW1wbCAgaW1wbGVtZW50cyBHZW9ncmFwaGljRmVhdHVyZSB7CisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIEdlb2dyYXBoaWNGZWF0dXJlSW1wbCgpIHsKKwkJc3VwZXIoKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgRUNsYXNzIGVTdGF0aWNDbGFzcygpIHsKKwkJcmV0dXJuIE5vZGVzUGFja2FnZS5MaXRlcmFscy5HRU9HUkFQSElDX0ZFQVRVUkU7CisJfQorCit9IC8vR2VvZ3JhcGhpY0ZlYXR1cmVJbXBsClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL25vZGVzL2ltcGwvTm9kZXNGYWN0b3J5SW1wbC5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL25vZGVzL2ltcGwvTm9kZXNGYWN0b3J5SW1wbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVhNmIwNjMKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvbm9kZXMvaW1wbC9Ob2Rlc0ZhY3RvcnlJbXBsLmphdmEKQEAgLTAsMCArMSwxMDQgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5ub2Rlcy5pbXBsOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3Q7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5pbXBsLkVGYWN0b3J5SW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUucGx1Z2luLkVjb3JlUGx1Z2luOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubm9kZXMuKjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLm5vZGVzLk5vZGVzRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLm5vZGVzLk5vZGVzUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLm5vZGVzLlJlZ2lvbjsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIG1vZGVsIDxiPkZhY3Rvcnk8L2I+LgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBOb2Rlc0ZhY3RvcnlJbXBsIGV4dGVuZHMgRUZhY3RvcnlJbXBsIGltcGxlbWVudHMgTm9kZXNGYWN0b3J5IHsKKwkvKioKKwkgKiBDcmVhdGVzIHRoZSBkZWZhdWx0IGZhY3RvcnkgaW1wbGVtZW50YXRpb24uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHN0YXRpYyBOb2Rlc0ZhY3RvcnkgaW5pdCgpIHsKKwkJdHJ5IHsKKwkJCU5vZGVzRmFjdG9yeSB0aGVOb2Rlc0ZhY3RvcnkgPSAoTm9kZXNGYWN0b3J5KUVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVGYWN0b3J5KCJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvbm9kZXMuZWNvcmUiKTsgLy8kTk9OLU5MUy0xJCAKKwkJCWlmICh0aGVOb2Rlc0ZhY3RvcnkgIT0gbnVsbCkgeworCQkJCXJldHVybiB0aGVOb2Rlc0ZhY3Rvcnk7CisJCQl9CisJCX0KKwkJY2F0Y2ggKEV4Y2VwdGlvbiBleGNlcHRpb24pIHsKKwkJCUVjb3JlUGx1Z2luLklOU1RBTkNFLmxvZyhleGNlcHRpb24pOworCQl9CisJCXJldHVybiBuZXcgTm9kZXNGYWN0b3J5SW1wbCgpOworCX0KKworCS8qKgorCSAqIENyZWF0ZXMgYW4gaW5zdGFuY2Ugb2YgdGhlIGZhY3RvcnkuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIE5vZGVzRmFjdG9yeUltcGwoKSB7CisJCXN1cGVyKCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIEVPYmplY3QgY3JlYXRlKEVDbGFzcyBlQ2xhc3MpIHsKKwkJc3dpdGNoIChlQ2xhc3MuZ2V0Q2xhc3NpZmllcklEKCkpIHsKKwkJCWNhc2UgTm9kZXNQYWNrYWdlLlJFR0lPTjogcmV0dXJuIGNyZWF0ZVJlZ2lvbigpOworCQkJZGVmYXVsdDoKKwkJCQl0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJUaGUgY2xhc3MgJyIgKyBlQ2xhc3MuZ2V0TmFtZSgpICsgIicgaXMgbm90IGEgdmFsaWQgY2xhc3NpZmllciIpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKKwkJfQorCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBSZWdpb24gY3JlYXRlUmVnaW9uKCkgeworCQlSZWdpb25JbXBsIHJlZ2lvbiA9IG5ldyBSZWdpb25JbXBsKCk7CisJCXJldHVybiByZWdpb247CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIE5vZGVzUGFja2FnZSBnZXROb2Rlc1BhY2thZ2UoKSB7CisJCXJldHVybiAoTm9kZXNQYWNrYWdlKWdldEVQYWNrYWdlKCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZGVwcmVjYXRlZAorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlARGVwcmVjYXRlZAorCXB1YmxpYyBzdGF0aWMgTm9kZXNQYWNrYWdlIGdldFBhY2thZ2UoKSB7CisJCXJldHVybiBOb2Rlc1BhY2thZ2UuZUlOU1RBTkNFOworCX0KKworfSAvL05vZGVzRmFjdG9yeUltcGwKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy9ub2Rlcy9pbXBsL05vZGVzUGFja2FnZUltcGwuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy9ub2Rlcy9pbXBsL05vZGVzUGFja2FnZUltcGwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZjBlMGQ1Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL25vZGVzL2ltcGwvTm9kZXNQYWNrYWdlSW1wbC5qYXZhCkBAIC0wLDAgKzEsMjUyIEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubm9kZXMuaW1wbDsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuaW1wbC5FUGFja2FnZUltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5Db21tb25QYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5HcmFwaFBhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLk5vZGU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLk1vZGVsUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuTW9kaWZpZXJQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zY2VuYXJpby5TY2VuYXJpb1BhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNlcXVlbmNlci5TZXF1ZW5jZXJQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zb2x2ZXIuU29sdmVyUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmVkZ2VzLkVkZ2VzUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmVkZ2VzLmltcGwuRWRnZXNQYWNrYWdlSW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5MYWJlbHNQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLmltcGwuTGFiZWxzUGFja2FnZUltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5ub2Rlcy5HZW9ncmFwaGljRmVhdHVyZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLm5vZGVzLk5vZGVzRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLm5vZGVzLk5vZGVzUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLm5vZGVzLlJlZ2lvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLnR5cGVzLlR5cGVzUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLnR5cGVzLmltcGwuVHlwZXNQYWNrYWdlSW1wbDsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIG1vZGVsIDxiPlBhY2thZ2U8L2I+LgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBOb2Rlc1BhY2thZ2VJbXBsIGV4dGVuZHMgRVBhY2thZ2VJbXBsIGltcGxlbWVudHMgTm9kZXNQYWNrYWdlIHsKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcml2YXRlIEVDbGFzcyBnZW9ncmFwaGljRmVhdHVyZUVDbGFzcyA9IG51bGw7CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcml2YXRlIEVDbGFzcyByZWdpb25FQ2xhc3MgPSBudWxsOworCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJpdmF0ZSBFQ2xhc3Mgbm9kZUVDbGFzcyA9IG51bGw7CisKKwkvKioKKwkgKiBDcmVhdGVzIGFuIGluc3RhbmNlIG9mIHRoZSBtb2RlbCA8Yj5QYWNrYWdlPC9iPiwgcmVnaXN0ZXJlZCB3aXRoCisJICoge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FUGFja2FnZS5SZWdpc3RyeSBFUGFja2FnZS5SZWdpc3RyeX0gYnkgdGhlIHBhY2thZ2UKKwkgKiBwYWNrYWdlIFVSSSB2YWx1ZS4KKwkgKiA8cD5Ob3RlOiB0aGUgY29ycmVjdCB3YXkgdG8gY3JlYXRlIHRoZSBwYWNrYWdlIGlzIHZpYSB0aGUgc3RhdGljCisJICogZmFjdG9yeSBtZXRob2Qge0BsaW5rICNpbml0IGluaXQoKX0sIHdoaWNoIGFsc28gcGVyZm9ybXMKKwkgKiBpbml0aWFsaXphdGlvbiBvZiB0aGUgcGFja2FnZSwgb3IgcmV0dXJucyB0aGUgcmVnaXN0ZXJlZCBwYWNrYWdlLAorCSAqIGlmIG9uZSBhbHJlYWR5IGV4aXN0cy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVQYWNrYWdlLlJlZ2lzdHJ5CisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLm5vZGVzLk5vZGVzUGFja2FnZSNlTlNfVVJJCisJICogQHNlZSAjaW5pdCgpCisJICogQGdlbmVyYXRlZAorCSAqLworCXByaXZhdGUgTm9kZXNQYWNrYWdlSW1wbCgpIHsKKwkJc3VwZXIoZU5TX1VSSSwgTm9kZXNGYWN0b3J5LmVJTlNUQU5DRSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJpdmF0ZSBzdGF0aWMgYm9vbGVhbiBpc0luaXRlZCA9IGZhbHNlOworCisJLyoqCisJICogQ3JlYXRlcywgcmVnaXN0ZXJzLCBhbmQgaW5pdGlhbGl6ZXMgdGhlIDxiPlBhY2thZ2U8L2I+IGZvciB0aGlzIG1vZGVsLCBhbmQgZm9yIGFueSBvdGhlcnMgdXBvbiB3aGljaCBpdCBkZXBlbmRzLgorCSAqIAorCSAqIDxwPlRoaXMgbWV0aG9kIGlzIHVzZWQgdG8gaW5pdGlhbGl6ZSB7QGxpbmsgTm9kZXNQYWNrYWdlI2VJTlNUQU5DRX0gd2hlbiB0aGF0IGZpZWxkIGlzIGFjY2Vzc2VkLgorCSAqIENsaWVudHMgc2hvdWxkIG5vdCBpbnZva2UgaXQgZGlyZWN0bHkuIEluc3RlYWQsIHRoZXkgc2hvdWxkIHNpbXBseSBhY2Nlc3MgdGhhdCBmaWVsZCB0byBvYnRhaW4gdGhlIHBhY2thZ2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNlTlNfVVJJCisJICogQHNlZSAjY3JlYXRlUGFja2FnZUNvbnRlbnRzKCkKKwkgKiBAc2VlICNpbml0aWFsaXplUGFja2FnZUNvbnRlbnRzKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHN0YXRpYyBOb2Rlc1BhY2thZ2UgaW5pdCgpIHsKKwkJaWYgKGlzSW5pdGVkKSByZXR1cm4gKE5vZGVzUGFja2FnZSlFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShOb2Rlc1BhY2thZ2UuZU5TX1VSSSk7CisKKwkJLy8gT2J0YWluIG9yIGNyZWF0ZSBhbmQgcmVnaXN0ZXIgcGFja2FnZQorCQlOb2Rlc1BhY2thZ2VJbXBsIHRoZU5vZGVzUGFja2FnZSA9IChOb2Rlc1BhY2thZ2VJbXBsKShFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXQoZU5TX1VSSSkgaW5zdGFuY2VvZiBOb2Rlc1BhY2thZ2VJbXBsID8gRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0KGVOU19VUkkpIDogbmV3IE5vZGVzUGFja2FnZUltcGwoKSk7CisKKwkJaXNJbml0ZWQgPSB0cnVlOworCisJCS8vIEluaXRpYWxpemUgc2ltcGxlIGRlcGVuZGVuY2llcworCQlHcmFwaFBhY2thZ2UuZUlOU1RBTkNFLmVDbGFzcygpOworCQlDb21tb25QYWNrYWdlLmVJTlNUQU5DRS5lQ2xhc3MoKTsKKwkJTW9kZWxQYWNrYWdlLmVJTlNUQU5DRS5lQ2xhc3MoKTsKKwkJTW9kaWZpZXJQYWNrYWdlLmVJTlNUQU5DRS5lQ2xhc3MoKTsKKwkJU2NlbmFyaW9QYWNrYWdlLmVJTlNUQU5DRS5lQ2xhc3MoKTsKKwkJU2VxdWVuY2VyUGFja2FnZS5lSU5TVEFOQ0UuZUNsYXNzKCk7CisJCVNvbHZlclBhY2thZ2UuZUlOU1RBTkNFLmVDbGFzcygpOworCisJCS8vIE9idGFpbiBvciBjcmVhdGUgYW5kIHJlZ2lzdGVyIGludGVyZGVwZW5kZW5jaWVzCisJCUVkZ2VzUGFja2FnZUltcGwgdGhlRWRnZXNQYWNrYWdlID0gKEVkZ2VzUGFja2FnZUltcGwpKEVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVQYWNrYWdlKEVkZ2VzUGFja2FnZS5lTlNfVVJJKSBpbnN0YW5jZW9mIEVkZ2VzUGFja2FnZUltcGwgPyBFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShFZGdlc1BhY2thZ2UuZU5TX1VSSSkgOiBFZGdlc1BhY2thZ2UuZUlOU1RBTkNFKTsKKwkJTGFiZWxzUGFja2FnZUltcGwgdGhlTGFiZWxzUGFja2FnZSA9IChMYWJlbHNQYWNrYWdlSW1wbCkoRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RVBhY2thZ2UoTGFiZWxzUGFja2FnZS5lTlNfVVJJKSBpbnN0YW5jZW9mIExhYmVsc1BhY2thZ2VJbXBsID8gRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RVBhY2thZ2UoTGFiZWxzUGFja2FnZS5lTlNfVVJJKSA6IExhYmVsc1BhY2thZ2UuZUlOU1RBTkNFKTsKKwkJVHlwZXNQYWNrYWdlSW1wbCB0aGVUeXBlc1BhY2thZ2UgPSAoVHlwZXNQYWNrYWdlSW1wbCkoRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RVBhY2thZ2UoVHlwZXNQYWNrYWdlLmVOU19VUkkpIGluc3RhbmNlb2YgVHlwZXNQYWNrYWdlSW1wbCA/IEVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVQYWNrYWdlKFR5cGVzUGFja2FnZS5lTlNfVVJJKSA6IFR5cGVzUGFja2FnZS5lSU5TVEFOQ0UpOworCisJCS8vIENyZWF0ZSBwYWNrYWdlIG1ldGEtZGF0YSBvYmplY3RzCisJCXRoZU5vZGVzUGFja2FnZS5jcmVhdGVQYWNrYWdlQ29udGVudHMoKTsKKwkJdGhlRWRnZXNQYWNrYWdlLmNyZWF0ZVBhY2thZ2VDb250ZW50cygpOworCQl0aGVMYWJlbHNQYWNrYWdlLmNyZWF0ZVBhY2thZ2VDb250ZW50cygpOworCQl0aGVUeXBlc1BhY2thZ2UuY3JlYXRlUGFja2FnZUNvbnRlbnRzKCk7CisKKwkJLy8gSW5pdGlhbGl6ZSBjcmVhdGVkIG1ldGEtZGF0YQorCQl0aGVOb2Rlc1BhY2thZ2UuaW5pdGlhbGl6ZVBhY2thZ2VDb250ZW50cygpOworCQl0aGVFZGdlc1BhY2thZ2UuaW5pdGlhbGl6ZVBhY2thZ2VDb250ZW50cygpOworCQl0aGVMYWJlbHNQYWNrYWdlLmluaXRpYWxpemVQYWNrYWdlQ29udGVudHMoKTsKKwkJdGhlVHlwZXNQYWNrYWdlLmluaXRpYWxpemVQYWNrYWdlQ29udGVudHMoKTsKKworCQkvLyBNYXJrIG1ldGEtZGF0YSB0byBpbmRpY2F0ZSBpdCBjYW4ndCBiZSBjaGFuZ2VkCisJCXRoZU5vZGVzUGFja2FnZS5mcmVlemUoKTsKKworICAKKwkJLy8gVXBkYXRlIHRoZSByZWdpc3RyeSBhbmQgcmV0dXJuIHRoZSBwYWNrYWdlCisJCUVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLnB1dChOb2Rlc1BhY2thZ2UuZU5TX1VSSSwgdGhlTm9kZXNQYWNrYWdlKTsKKwkJcmV0dXJuIHRoZU5vZGVzUGFja2FnZTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUNsYXNzIGdldEdlb2dyYXBoaWNGZWF0dXJlKCkgeworCQlyZXR1cm4gZ2VvZ3JhcGhpY0ZlYXR1cmVFQ2xhc3M7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVDbGFzcyBnZXRSZWdpb24oKSB7CisJCXJldHVybiByZWdpb25FQ2xhc3M7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVDbGFzcyBnZXROb2RlKCkgeworCQlyZXR1cm4gbm9kZUVDbGFzczsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgTm9kZXNGYWN0b3J5IGdldE5vZGVzRmFjdG9yeSgpIHsKKwkJcmV0dXJuIChOb2Rlc0ZhY3RvcnkpZ2V0RUZhY3RvcnlJbnN0YW5jZSgpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByaXZhdGUgYm9vbGVhbiBpc0NyZWF0ZWQgPSBmYWxzZTsKKworCS8qKgorCSAqIENyZWF0ZXMgdGhlIG1ldGEtbW9kZWwgb2JqZWN0cyBmb3IgdGhlIHBhY2thZ2UuICBUaGlzIG1ldGhvZCBpcworCSAqIGd1YXJkZWQgdG8gaGF2ZSBubyBhZmZlY3Qgb24gYW55IGludm9jYXRpb24gYnV0IGl0cyBmaXJzdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBjcmVhdGVQYWNrYWdlQ29udGVudHMoKSB7CisJCWlmIChpc0NyZWF0ZWQpIHJldHVybjsKKwkJaXNDcmVhdGVkID0gdHJ1ZTsKKworCQkvLyBDcmVhdGUgY2xhc3NlcyBhbmQgdGhlaXIgZmVhdHVyZXMKKwkJZ2VvZ3JhcGhpY0ZlYXR1cmVFQ2xhc3MgPSBjcmVhdGVFQ2xhc3MoR0VPR1JBUEhJQ19GRUFUVVJFKTsKKworCQlyZWdpb25FQ2xhc3MgPSBjcmVhdGVFQ2xhc3MoUkVHSU9OKTsKKworCQlub2RlRUNsYXNzID0gY3JlYXRlRUNsYXNzKE5PREUpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByaXZhdGUgYm9vbGVhbiBpc0luaXRpYWxpemVkID0gZmFsc2U7CisKKwkvKioKKwkgKiBDb21wbGV0ZSB0aGUgaW5pdGlhbGl6YXRpb24gb2YgdGhlIHBhY2thZ2UgYW5kIGl0cyBtZXRhLW1vZGVsLiAgVGhpcworCSAqIG1ldGhvZCBpcyBndWFyZGVkIHRvIGhhdmUgbm8gYWZmZWN0IG9uIGFueSBpbnZvY2F0aW9uIGJ1dCBpdHMgZmlyc3QuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgaW5pdGlhbGl6ZVBhY2thZ2VDb250ZW50cygpIHsKKwkJaWYgKGlzSW5pdGlhbGl6ZWQpIHJldHVybjsKKwkJaXNJbml0aWFsaXplZCA9IHRydWU7CisKKwkJLy8gSW5pdGlhbGl6ZSBwYWNrYWdlCisJCXNldE5hbWUoZU5BTUUpOworCQlzZXROc1ByZWZpeChlTlNfUFJFRklYKTsKKwkJc2V0TnNVUkkoZU5TX1VSSSk7CisKKwkJLy8gT2J0YWluIG90aGVyIGRlcGVuZGVudCBwYWNrYWdlcworCQlHcmFwaFBhY2thZ2UgdGhlR3JhcGhQYWNrYWdlID0gKEdyYXBoUGFja2FnZSlFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShHcmFwaFBhY2thZ2UuZU5TX1VSSSk7CisKKwkJLy8gQ3JlYXRlIHR5cGUgcGFyYW1ldGVycworCisJCS8vIFNldCBib3VuZHMgZm9yIHR5cGUgcGFyYW1ldGVycworCisJCS8vIEFkZCBzdXBlcnR5cGVzIHRvIGNsYXNzZXMKKwkJZ2VvZ3JhcGhpY0ZlYXR1cmVFQ2xhc3MuZ2V0RVN1cGVyVHlwZXMoKS5hZGQodGhlR3JhcGhQYWNrYWdlLmdldE5vZGUoKSk7CisJCXJlZ2lvbkVDbGFzcy5nZXRFU3VwZXJUeXBlcygpLmFkZCh0aGlzLmdldEdlb2dyYXBoaWNGZWF0dXJlKCkpOworCisJCS8vIEluaXRpYWxpemUgY2xhc3NlcyBhbmQgZmVhdHVyZXM7IGFkZCBvcGVyYXRpb25zIGFuZCBwYXJhbWV0ZXJzCisJCWluaXRFQ2xhc3MoZ2VvZ3JhcGhpY0ZlYXR1cmVFQ2xhc3MsIEdlb2dyYXBoaWNGZWF0dXJlLmNsYXNzLCAiR2VvZ3JhcGhpY0ZlYXR1cmUiLCBJU19BQlNUUkFDVCwgIUlTX0lOVEVSRkFDRSwgSVNfR0VORVJBVEVEX0lOU1RBTkNFX0NMQVNTKTsgLy8kTk9OLU5MUy0xJAorCisJCWluaXRFQ2xhc3MocmVnaW9uRUNsYXNzLCBSZWdpb24uY2xhc3MsICJSZWdpb24iLCAhSVNfQUJTVFJBQ1QsICFJU19JTlRFUkZBQ0UsIElTX0dFTkVSQVRFRF9JTlNUQU5DRV9DTEFTUyk7IC8vJE5PTi1OTFMtMSQKKworCQlpbml0RUNsYXNzKG5vZGVFQ2xhc3MsIE5vZGUuY2xhc3MsICJOb2RlIiwgSVNfQUJTVFJBQ1QsIElTX0lOVEVSRkFDRSwgIUlTX0dFTkVSQVRFRF9JTlNUQU5DRV9DTEFTUyk7IC8vJE5PTi1OTFMtMSQKKworCQkvLyBDcmVhdGUgcmVzb3VyY2UKKwkJY3JlYXRlUmVzb3VyY2UoZU5TX1VSSSk7CisJfQorCit9IC8vTm9kZXNQYWNrYWdlSW1wbApkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL25vZGVzL2ltcGwvUmVnaW9uSW1wbC5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL25vZGVzL2ltcGwvUmVnaW9uSW1wbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIxYjY2YTUKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvbm9kZXMvaW1wbC9SZWdpb25JbXBsLmphdmEKQEAgLTAsMCArMSw3NCBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLm5vZGVzLmltcGw7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlVSSTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5TVEVNVVJJOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubm9kZXMuTm9kZXNQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubm9kZXMuUmVnaW9uOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IEFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5SZWdpb248L2I+PC9lbT4nLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiA8cD4KKyAqIDwvcD4KKyAqCisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBSZWdpb25JbXBsIGV4dGVuZHMgR2VvZ3JhcGhpY0ZlYXR1cmVJbXBsIGltcGxlbWVudHMgUmVnaW9uIHsKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIFJlZ2lvbkltcGwoKSB7CisJCXN1cGVyKCk7CisJfQorCisJLyoqCisJICogQHBhcmFtIG5vZGVDb2RlCisJICogICAgICAgICAgICB0aGUgY29kZSBmb3IgdGhlIHJlZ2lvbgorCSAqIEByZXR1cm4gdGhlIFVSSSBmb3IgYSBzcGVjaWZpYyByZWdpb24gbm9kZQorCSAqLworCXB1YmxpYyBzdGF0aWMgVVJJIGNyZWF0ZVJlZ2lvbk5vZGVVUkkoU3RyaW5nIG5vZGVDb2RlKSB7CisJCWZpbmFsIFVSSSByZXRWYWx1ZSA9IFNURU1VUkkuY3JlYXRlVVJJKFVSSV9UWVBFX1JFR0lPTl9OT0RFX1NFR01FTlQKKwkJCQkrICIvIiArIG5vZGVDb2RlKTsKKwkJcmV0dXJuIHJldFZhbHVlOworCX0gLy8gY3JlYXRlUmVnaW9uTm9kZVVSSQorCisvLwkvKioKKy8vCSAqIEBwYXJhbSBhZG1pbkxldmVsCisvLwkgKiAgICAgICAgICAgIHRoZSBhZG1pbmlzdHJhdGlvbiBsZXZlbCBvZiB0aGUgcmVnaW9uCisvLwkgKiBAcGFyYW0gY291bnRyeUNvZGUKKy8vCSAqICAgICAgICAgICAgdGhlIElTTy0zMTY2LTEgY29kZSBmb3IgdGhlIGNvdW50cnkgY29udGFpbmluZyB0aGUgcmVnaW9uCisvLwkgKiBAcGFyYW0gbm9kZUNvZGUKKy8vCSAqICAgICAgICAgICAgdGhlIGNvZGUgZm9yIHRoZSByZWdpb24KKy8vCSAqIEByZXR1cm4gdGhlIFVSSSBmb3IgYSBzcGVjaWZpYyByZWdpb24gbm9kZQorLy8JICovCisvLwlwdWJsaWMgc3RhdGljIFVSSSBjcmVhdGVSZWdpb25Ob2RlVVJJKGludCBhZG1pbkxldmVsLAorLy8JCQlmaW5hbCBTdHJpbmcgY291bnRyeUNvZGUsIFN0cmluZyBub2RlQ29kZSkgeworLy8JCWZpbmFsIFVSSSByZXRWYWx1ZSA9IFNURU1VUkkuY3JlYXRlVVJJKFVSSV9UWVBFX1JFR0lPTl9OT0RFX1NFR01FTlQKKy8vCQkJCSsgIi8iICsgY291bnRyeUNvZGUgKyAiLyIgKyBhZG1pbkxldmVsICsgIi8iICsgbm9kZUNvZGUpOworLy8JCXJldHVybiByZXRWYWx1ZTsKKy8vCX0gLy8gY3JlYXRlUmVnaW9uTm9kZVVSSQorCisJCisJCQkJCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgRUNsYXNzIGVTdGF0aWNDbGFzcygpIHsKKwkJcmV0dXJuIE5vZGVzUGFja2FnZS5MaXRlcmFscy5SRUdJT047CisJfQorCit9IC8vIFJlZ2lvbkltcGwKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy9ub2Rlcy9wcmVzZW50YXRpb24vTm9kZXNBY3Rpb25CYXJDb250cmlidXRvci5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL25vZGVzL3ByZXNlbnRhdGlvbi9Ob2Rlc0FjdGlvbkJhckNvbnRyaWJ1dG9yLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTBjZGNhYgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy9ub2Rlcy9wcmVzZW50YXRpb24vTm9kZXNBY3Rpb25CYXJDb250cmlidXRvci5qYXZhCkBAIC0wLDAgKzEsNDMwIEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubm9kZXMucHJlc2VudGF0aW9uOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7CitpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnVpLnZpZXdlci5JVmlld2VyUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQuZG9tYWluLkVkaXRpbmdEb21haW47CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQuZG9tYWluLklFZGl0aW5nRG9tYWluUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkuYWN0aW9uLkNvbnRyb2xBY3Rpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkuYWN0aW9uLkNyZWF0ZUNoaWxkQWN0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmFjdGlvbi5DcmVhdGVTaWJsaW5nQWN0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmFjdGlvbi5FZGl0aW5nRG9tYWluQWN0aW9uQmFyQ29udHJpYnV0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkuYWN0aW9uLkxvYWRSZXNvdXJjZUFjdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5hY3Rpb24uVmFsaWRhdGVBY3Rpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLkFjdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uQWN0aW9uQ29udHJpYnV0aW9uSXRlbTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSUFjdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSUNvbnRyaWJ1dGlvbkl0ZW07CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklDb250cmlidXRpb25NYW5hZ2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JTWVudUxpc3RlbmVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JTWVudU1hbmFnZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklUb29sQmFyTWFuYWdlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uTWVudU1hbmFnZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLlNlcGFyYXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uU3ViQ29udHJpYnV0aW9uSXRlbTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvblByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVN0cnVjdHVyZWRTZWxlY3Rpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5TZWxlY3Rpb25DaGFuZ2VkRXZlbnQ7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5WaWV3ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5lZGdlcy5wcm92aWRlci5EZWZpbml0aW9uc0VkaXRQbHVnaW47CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuSUVkaXRvclBhcnQ7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuUGFydEluaXRFeGNlcHRpb247CisKKy8qKgorICogVGhpcyBpcyB0aGUgYWN0aW9uIGJhciBjb250cmlidXRvciBmb3IgdGhlIE5vZGVzIG1vZGVsIGVkaXRvci4KKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIE5vZGVzQWN0aW9uQmFyQ29udHJpYnV0b3IKKwlleHRlbmRzIEVkaXRpbmdEb21haW5BY3Rpb25CYXJDb250cmlidXRvcgorCWltcGxlbWVudHMgSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lciB7CisJLyoqCisJICogVGhpcyBrZWVwcyB0cmFjayBvZiB0aGUgYWN0aXZlIGVkaXRvci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgSUVkaXRvclBhcnQgYWN0aXZlRWRpdG9yUGFydDsKKworCS8qKgorCSAqIFRoaXMga2VlcHMgdHJhY2sgb2YgdGhlIGN1cnJlbnQgc2VsZWN0aW9uIHByb3ZpZGVyLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBJU2VsZWN0aW9uUHJvdmlkZXIgc2VsZWN0aW9uUHJvdmlkZXI7CisKKwkvKioKKwkgKiBUaGlzIGFjdGlvbiBvcGVucyB0aGUgUHJvcGVydGllcyB2aWV3LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBJQWN0aW9uIHNob3dQcm9wZXJ0aWVzVmlld0FjdGlvbiA9CisJCW5ldyBBY3Rpb24oRGVmaW5pdGlvbnNFZGl0UGx1Z2luLklOU1RBTkNFLmdldFN0cmluZygiX1VJX1Nob3dQcm9wZXJ0aWVzVmlld19tZW51X2l0ZW0iKSkgLy8kTk9OLU5MUy0xJAorCQl7CisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyB2b2lkIHJ1bigpIHsKKwkJCQl0cnkgeworCQkJCQlnZXRQYWdlKCkuc2hvd1ZpZXcoIm9yZy5lY2xpcHNlLnVpLnZpZXdzLlByb3BlcnR5U2hlZXQiKTsgLy8kTk9OLU5MUy0xJAorCQkJCX0KKwkJCQljYXRjaCAoUGFydEluaXRFeGNlcHRpb24gZXhjZXB0aW9uKSB7CisJCQkJCURlZmluaXRpb25zRWRpdFBsdWdpbi5JTlNUQU5DRS5sb2coZXhjZXB0aW9uKTsKKwkJCQl9CisJCQl9CisJCX07CisKKwkvKioKKwkgKiBUaGlzIGFjdGlvbiByZWZyZXNoZXMgdGhlIHZpZXdlciBvZiB0aGUgY3VycmVudCBlZGl0b3IgaWYgdGhlIGVkaXRvcgorCSAqIGltcGxlbWVudHMge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5jb21tb24udWkudmlld2VyLklWaWV3ZXJQcm92aWRlcn0uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIElBY3Rpb24gcmVmcmVzaFZpZXdlckFjdGlvbiA9CisJCW5ldyBBY3Rpb24oRGVmaW5pdGlvbnNFZGl0UGx1Z2luLklOU1RBTkNFLmdldFN0cmluZygiX1VJX1JlZnJlc2hWaWV3ZXJfbWVudV9pdGVtIikpIC8vJE5PTi1OTFMtMSQKKwkJeworCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgYm9vbGVhbiBpc0VuYWJsZWQoKSB7CisJCQkJcmV0dXJuIGFjdGl2ZUVkaXRvclBhcnQgaW5zdGFuY2VvZiBJVmlld2VyUHJvdmlkZXI7CisJCQl9CisKKwkJCUBPdmVycmlkZQorCQkJcHVibGljIHZvaWQgcnVuKCkgeworCQkJCWlmIChhY3RpdmVFZGl0b3JQYXJ0IGluc3RhbmNlb2YgSVZpZXdlclByb3ZpZGVyKSB7CisJCQkJCVZpZXdlciB2aWV3ZXIgPSAoKElWaWV3ZXJQcm92aWRlcilhY3RpdmVFZGl0b3JQYXJ0KS5nZXRWaWV3ZXIoKTsKKwkJCQkJaWYgKHZpZXdlciAhPSBudWxsKSB7CisJCQkJCQl2aWV3ZXIucmVmcmVzaCgpOworCQkJCQl9CisJCQkJfQorCQkJfQorCQl9OworCisJLyoqCisJICogVGhpcyB3aWxsIGNvbnRhaW4gb25lIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5hY3Rpb24uQ3JlYXRlQ2hpbGRBY3Rpb259IGNvcnJlc3BvbmRpbmcgdG8gZWFjaCBkZXNjcmlwdG9yCisJICogZ2VuZXJhdGVkIGZvciB0aGUgY3VycmVudCBzZWxlY3Rpb24gYnkgdGhlIGl0ZW0gcHJvdmlkZXIuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIENvbGxlY3Rpb248SUFjdGlvbj4gY3JlYXRlQ2hpbGRBY3Rpb25zOworCisJLyoqCisJICogVGhpcyBpcyB0aGUgbWVudSBtYW5hZ2VyIGludG8gd2hpY2ggbWVudSBjb250cmlidXRpb24gaXRlbXMgc2hvdWxkIGJlIGFkZGVkIGZvciBDcmVhdGVDaGlsZCBhY3Rpb25zLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBJTWVudU1hbmFnZXIgY3JlYXRlQ2hpbGRNZW51TWFuYWdlcjsKKworCS8qKgorCSAqIFRoaXMgd2lsbCBjb250YWluIG9uZSB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkuYWN0aW9uLkNyZWF0ZVNpYmxpbmdBY3Rpb259IGNvcnJlc3BvbmRpbmcgdG8gZWFjaCBkZXNjcmlwdG9yCisJICogZ2VuZXJhdGVkIGZvciB0aGUgY3VycmVudCBzZWxlY3Rpb24gYnkgdGhlIGl0ZW0gcHJvdmlkZXIuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIENvbGxlY3Rpb248SUFjdGlvbj4gY3JlYXRlU2libGluZ0FjdGlvbnM7CisKKwkvKioKKwkgKiBUaGlzIGlzIHRoZSBtZW51IG1hbmFnZXIgaW50byB3aGljaCBtZW51IGNvbnRyaWJ1dGlvbiBpdGVtcyBzaG91bGQgYmUgYWRkZWQgZm9yIENyZWF0ZVNpYmxpbmcgYWN0aW9ucy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgSU1lbnVNYW5hZ2VyIGNyZWF0ZVNpYmxpbmdNZW51TWFuYWdlcjsKKworCS8qKgorCSAqIFRoaXMgY3JlYXRlcyBhbiBpbnN0YW5jZSBvZiB0aGUgY29udHJpYnV0b3IuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIE5vZGVzQWN0aW9uQmFyQ29udHJpYnV0b3IoKSB7CisJCXN1cGVyKEFERElUSU9OU19MQVNUX1NUWUxFKTsKKwkJbG9hZFJlc291cmNlQWN0aW9uID0gbmV3IExvYWRSZXNvdXJjZUFjdGlvbigpOworCQl2YWxpZGF0ZUFjdGlvbiA9IG5ldyBWYWxpZGF0ZUFjdGlvbigpOworCQljb250cm9sQWN0aW9uID0gbmV3IENvbnRyb2xBY3Rpb24oKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFkZHMgU2VwYXJhdG9ycyBmb3IgZWRpdG9yIGFkZGl0aW9ucyB0byB0aGUgdG9vbCBiYXIuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgY29udHJpYnV0ZVRvVG9vbEJhcihJVG9vbEJhck1hbmFnZXIgdG9vbEJhck1hbmFnZXIpIHsKKwkJdG9vbEJhck1hbmFnZXIuYWRkKG5ldyBTZXBhcmF0b3IoIm5vZGVzLXNldHRpbmdzIikpOyAvLyROT04tTkxTLTEkCisJCXRvb2xCYXJNYW5hZ2VyLmFkZChuZXcgU2VwYXJhdG9yKCJub2Rlcy1hZGRpdGlvbnMiKSk7IC8vJE5PTi1OTFMtMSQKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFkZHMgdG8gdGhlIG1lbnUgYmFyIGEgbWVudSBhbmQgc29tZSBzZXBhcmF0b3JzIGZvciBlZGl0b3IgYWRkaXRpb25zLAorCSAqIGFzIHdlbGwgYXMgdGhlIHN1Yi1tZW51cyBmb3Igb2JqZWN0IGNyZWF0aW9uIGl0ZW1zLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGNvbnRyaWJ1dGVUb01lbnUoSU1lbnVNYW5hZ2VyIG1lbnVNYW5hZ2VyKSB7CisJCXN1cGVyLmNvbnRyaWJ1dGVUb01lbnUobWVudU1hbmFnZXIpOworCisJCUlNZW51TWFuYWdlciBzdWJtZW51TWFuYWdlciA9IG5ldyBNZW51TWFuYWdlcihEZWZpbml0aW9uc0VkaXRQbHVnaW4uSU5TVEFOQ0UuZ2V0U3RyaW5nKCJfVUlfTm9kZXNFZGl0b3JfbWVudSIpLCAib3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5ub2Rlc01lbnVJRCIpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKKwkJbWVudU1hbmFnZXIuaW5zZXJ0QWZ0ZXIoImFkZGl0aW9ucyIsIHN1Ym1lbnVNYW5hZ2VyKTsgLy8kTk9OLU5MUy0xJAorCQlzdWJtZW51TWFuYWdlci5hZGQobmV3IFNlcGFyYXRvcigic2V0dGluZ3MiKSk7IC8vJE5PTi1OTFMtMSQKKwkJc3VibWVudU1hbmFnZXIuYWRkKG5ldyBTZXBhcmF0b3IoImFjdGlvbnMiKSk7IC8vJE5PTi1OTFMtMSQKKwkJc3VibWVudU1hbmFnZXIuYWRkKG5ldyBTZXBhcmF0b3IoImFkZGl0aW9ucyIpKTsgLy8kTk9OLU5MUy0xJAorCQlzdWJtZW51TWFuYWdlci5hZGQobmV3IFNlcGFyYXRvcigiYWRkaXRpb25zLWVuZCIpKTsgLy8kTk9OLU5MUy0xJAorCisJCS8vIFByZXBhcmUgZm9yIENyZWF0ZUNoaWxkIGl0ZW0gYWRkaXRpb24gb3IgcmVtb3ZhbC4KKwkJLy8KKwkJY3JlYXRlQ2hpbGRNZW51TWFuYWdlciA9IG5ldyBNZW51TWFuYWdlcihEZWZpbml0aW9uc0VkaXRQbHVnaW4uSU5TVEFOQ0UuZ2V0U3RyaW5nKCJfVUlfQ3JlYXRlQ2hpbGRfbWVudV9pdGVtIikpOyAvLyROT04tTkxTLTEkCisJCXN1Ym1lbnVNYW5hZ2VyLmluc2VydEJlZm9yZSgiYWRkaXRpb25zIiwgY3JlYXRlQ2hpbGRNZW51TWFuYWdlcik7IC8vJE5PTi1OTFMtMSQKKworCQkvLyBQcmVwYXJlIGZvciBDcmVhdGVTaWJsaW5nIGl0ZW0gYWRkaXRpb24gb3IgcmVtb3ZhbC4KKwkJLy8KKwkJY3JlYXRlU2libGluZ01lbnVNYW5hZ2VyID0gbmV3IE1lbnVNYW5hZ2VyKERlZmluaXRpb25zRWRpdFBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoIl9VSV9DcmVhdGVTaWJsaW5nX21lbnVfaXRlbSIpKTsgLy8kTk9OLU5MUy0xJAorCQlzdWJtZW51TWFuYWdlci5pbnNlcnRCZWZvcmUoImFkZGl0aW9ucyIsIGNyZWF0ZVNpYmxpbmdNZW51TWFuYWdlcik7IC8vJE5PTi1OTFMtMSQKKworCQkvLyBGb3JjZSBhbiB1cGRhdGUgYmVjYXVzZSBFY2xpcHNlIGhpZGVzIGVtcHR5IG1lbnVzIG5vdy4KKwkJLy8KKwkJc3VibWVudU1hbmFnZXIuYWRkTWVudUxpc3RlbmVyCisJCQkobmV3IElNZW51TGlzdGVuZXIoKSB7CisJCQkJIHB1YmxpYyB2b2lkIG1lbnVBYm91dFRvU2hvdyhJTWVudU1hbmFnZXIgbWVudU1hbmFnZXIpIHsKKwkJCQkJIG1lbnVNYW5hZ2VyLnVwZGF0ZUFsbCh0cnVlKTsKKwkJCQkgfQorCQkJIH0pOworCisJCWFkZEdsb2JhbEFjdGlvbnMoc3VibWVudU1hbmFnZXIpOworCX0KKworCS8qKgorCSAqIFdoZW4gdGhlIGFjdGl2ZSBlZGl0b3IgY2hhbmdlcywgdGhpcyByZW1lbWJlcnMgdGhlIGNoYW5nZSBhbmQgcmVnaXN0ZXJzIHdpdGggaXQgYXMgYSBzZWxlY3Rpb24gcHJvdmlkZXIuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgc2V0QWN0aXZlRWRpdG9yKElFZGl0b3JQYXJ0IHBhcnQpIHsKKwkJc3VwZXIuc2V0QWN0aXZlRWRpdG9yKHBhcnQpOworCQlhY3RpdmVFZGl0b3JQYXJ0ID0gcGFydDsKKworCQkvLyBTd2l0Y2ggdG8gdGhlIG5ldyBzZWxlY3Rpb24gcHJvdmlkZXIuCisJCS8vCisJCWlmIChzZWxlY3Rpb25Qcm92aWRlciAhPSBudWxsKSB7CisJCQlzZWxlY3Rpb25Qcm92aWRlci5yZW1vdmVTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIodGhpcyk7CisJCX0KKwkJaWYgKHBhcnQgPT0gbnVsbCkgeworCQkJc2VsZWN0aW9uUHJvdmlkZXIgPSBudWxsOworCQl9CisJCWVsc2UgeworCQkJc2VsZWN0aW9uUHJvdmlkZXIgPSBwYXJ0LmdldFNpdGUoKS5nZXRTZWxlY3Rpb25Qcm92aWRlcigpOworCQkJc2VsZWN0aW9uUHJvdmlkZXIuYWRkU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyKHRoaXMpOworCisJCQkvLyBGYWtlIGEgc2VsZWN0aW9uIGNoYW5nZWQgZXZlbnQgdG8gdXBkYXRlIHRoZSBtZW51cy4KKwkJCS8vCisJCQlpZiAoc2VsZWN0aW9uUHJvdmlkZXIuZ2V0U2VsZWN0aW9uKCkgIT0gbnVsbCkgeworCQkJCXNlbGVjdGlvbkNoYW5nZWQobmV3IFNlbGVjdGlvbkNoYW5nZWRFdmVudChzZWxlY3Rpb25Qcm92aWRlciwgc2VsZWN0aW9uUHJvdmlkZXIuZ2V0U2VsZWN0aW9uKCkpKTsKKwkJCX0KKwkJfQorCX0KKworCS8qKgorCSAqIFRoaXMgaW1wbGVtZW50cyB7QGxpbmsgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyfSwKKwkgKiBoYW5kbGluZyB7QGxpbmsgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5TZWxlY3Rpb25DaGFuZ2VkRXZlbnR9cyBieSBxdWVyeWluZyBmb3IgdGhlIGNoaWxkcmVuIGFuZCBzaWJsaW5ncworCSAqIHRoYXQgY2FuIGJlIGFkZGVkIHRvIHRoZSBzZWxlY3RlZCBvYmplY3QgYW5kIHVwZGF0aW5nIHRoZSBtZW51cyBhY2NvcmRpbmdseS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZWxlY3Rpb25DaGFuZ2VkKFNlbGVjdGlvbkNoYW5nZWRFdmVudCBldmVudCkgeworCQkvLyBSZW1vdmUgYW55IG1lbnUgaXRlbXMgZm9yIG9sZCBzZWxlY3Rpb24uCisJCS8vCisJCWlmIChjcmVhdGVDaGlsZE1lbnVNYW5hZ2VyICE9IG51bGwpIHsKKwkJCWRlcG9wdWxhdGVNYW5hZ2VyKGNyZWF0ZUNoaWxkTWVudU1hbmFnZXIsIGNyZWF0ZUNoaWxkQWN0aW9ucyk7CisJCX0KKwkJaWYgKGNyZWF0ZVNpYmxpbmdNZW51TWFuYWdlciAhPSBudWxsKSB7CisJCQlkZXBvcHVsYXRlTWFuYWdlcihjcmVhdGVTaWJsaW5nTWVudU1hbmFnZXIsIGNyZWF0ZVNpYmxpbmdBY3Rpb25zKTsKKwkJfQorCisJCS8vIFF1ZXJ5IHRoZSBuZXcgc2VsZWN0aW9uIGZvciBhcHByb3ByaWF0ZSBuZXcgY2hpbGQvc2libGluZyBkZXNjcmlwdG9ycworCQkvLworCQlDb2xsZWN0aW9uPD8+IG5ld0NoaWxkRGVzY3JpcHRvcnMgPSBudWxsOworCQlDb2xsZWN0aW9uPD8+IG5ld1NpYmxpbmdEZXNjcmlwdG9ycyA9IG51bGw7CisKKwkJSVNlbGVjdGlvbiBzZWxlY3Rpb24gPSBldmVudC5nZXRTZWxlY3Rpb24oKTsKKwkJaWYgKHNlbGVjdGlvbiBpbnN0YW5jZW9mIElTdHJ1Y3R1cmVkU2VsZWN0aW9uICYmICgoSVN0cnVjdHVyZWRTZWxlY3Rpb24pc2VsZWN0aW9uKS5zaXplKCkgPT0gMSkgeworCQkJT2JqZWN0IG9iamVjdCA9ICgoSVN0cnVjdHVyZWRTZWxlY3Rpb24pc2VsZWN0aW9uKS5nZXRGaXJzdEVsZW1lbnQoKTsKKworCQkJRWRpdGluZ0RvbWFpbiBkb21haW4gPSAoKElFZGl0aW5nRG9tYWluUHJvdmlkZXIpYWN0aXZlRWRpdG9yUGFydCkuZ2V0RWRpdGluZ0RvbWFpbigpOworCisJCQluZXdDaGlsZERlc2NyaXB0b3JzID0gZG9tYWluLmdldE5ld0NoaWxkRGVzY3JpcHRvcnMob2JqZWN0LCBudWxsKTsKKwkJCW5ld1NpYmxpbmdEZXNjcmlwdG9ycyA9IGRvbWFpbi5nZXROZXdDaGlsZERlc2NyaXB0b3JzKG51bGwsIG9iamVjdCk7CisJCX0KKworCQkvLyBHZW5lcmF0ZSBhY3Rpb25zIGZvciBzZWxlY3Rpb247IHBvcHVsYXRlIGFuZCByZWRyYXcgdGhlIG1lbnVzLgorCQkvLworCQljcmVhdGVDaGlsZEFjdGlvbnMgPSBnZW5lcmF0ZUNyZWF0ZUNoaWxkQWN0aW9ucyhuZXdDaGlsZERlc2NyaXB0b3JzLCBzZWxlY3Rpb24pOworCQljcmVhdGVTaWJsaW5nQWN0aW9ucyA9IGdlbmVyYXRlQ3JlYXRlU2libGluZ0FjdGlvbnMobmV3U2libGluZ0Rlc2NyaXB0b3JzLCBzZWxlY3Rpb24pOworCisJCWlmIChjcmVhdGVDaGlsZE1lbnVNYW5hZ2VyICE9IG51bGwpIHsKKwkJCXBvcHVsYXRlTWFuYWdlcihjcmVhdGVDaGlsZE1lbnVNYW5hZ2VyLCBjcmVhdGVDaGlsZEFjdGlvbnMsIG51bGwpOworCQkJY3JlYXRlQ2hpbGRNZW51TWFuYWdlci51cGRhdGUodHJ1ZSk7CisJCX0KKwkJaWYgKGNyZWF0ZVNpYmxpbmdNZW51TWFuYWdlciAhPSBudWxsKSB7CisJCQlwb3B1bGF0ZU1hbmFnZXIoY3JlYXRlU2libGluZ01lbnVNYW5hZ2VyLCBjcmVhdGVTaWJsaW5nQWN0aW9ucywgbnVsbCk7CisJCQljcmVhdGVTaWJsaW5nTWVudU1hbmFnZXIudXBkYXRlKHRydWUpOworCQl9CisJfQorCisJLyoqCisJICogVGhpcyBnZW5lcmF0ZXMgYSB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkuYWN0aW9uLkNyZWF0ZUNoaWxkQWN0aW9ufSBmb3IgZWFjaCBvYmplY3QgaW4gPGNvZGU+ZGVzY3JpcHRvcnM8L2NvZGU+LAorCSAqIGFuZCByZXR1cm5zIHRoZSBjb2xsZWN0aW9uIG9mIHRoZXNlIGFjdGlvbnMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIENvbGxlY3Rpb248SUFjdGlvbj4gZ2VuZXJhdGVDcmVhdGVDaGlsZEFjdGlvbnMoQ29sbGVjdGlvbjw/PiBkZXNjcmlwdG9ycywgSVNlbGVjdGlvbiBzZWxlY3Rpb24pIHsKKwkJQ29sbGVjdGlvbjxJQWN0aW9uPiBhY3Rpb25zID0gbmV3IEFycmF5TGlzdDxJQWN0aW9uPigpOworCQlpZiAoZGVzY3JpcHRvcnMgIT0gbnVsbCkgeworCQkJZm9yIChPYmplY3QgZGVzY3JpcHRvciA6IGRlc2NyaXB0b3JzKSB7CisJCQkJYWN0aW9ucy5hZGQobmV3IENyZWF0ZUNoaWxkQWN0aW9uKGFjdGl2ZUVkaXRvclBhcnQsIHNlbGVjdGlvbiwgZGVzY3JpcHRvcikpOworCQkJfQorCQl9CisJCXJldHVybiBhY3Rpb25zOworCX0KKworCS8qKgorCSAqIFRoaXMgZ2VuZXJhdGVzIGEge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmFjdGlvbi5DcmVhdGVTaWJsaW5nQWN0aW9ufSBmb3IgZWFjaCBvYmplY3QgaW4gPGNvZGU+ZGVzY3JpcHRvcnM8L2NvZGU+LAorCSAqIGFuZCByZXR1cm5zIHRoZSBjb2xsZWN0aW9uIG9mIHRoZXNlIGFjdGlvbnMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIENvbGxlY3Rpb248SUFjdGlvbj4gZ2VuZXJhdGVDcmVhdGVTaWJsaW5nQWN0aW9ucyhDb2xsZWN0aW9uPD8+IGRlc2NyaXB0b3JzLCBJU2VsZWN0aW9uIHNlbGVjdGlvbikgeworCQlDb2xsZWN0aW9uPElBY3Rpb24+IGFjdGlvbnMgPSBuZXcgQXJyYXlMaXN0PElBY3Rpb24+KCk7CisJCWlmIChkZXNjcmlwdG9ycyAhPSBudWxsKSB7CisJCQlmb3IgKE9iamVjdCBkZXNjcmlwdG9yIDogZGVzY3JpcHRvcnMpIHsKKwkJCQlhY3Rpb25zLmFkZChuZXcgQ3JlYXRlU2libGluZ0FjdGlvbihhY3RpdmVFZGl0b3JQYXJ0LCBzZWxlY3Rpb24sIGRlc2NyaXB0b3IpKTsKKwkJCX0KKwkJfQorCQlyZXR1cm4gYWN0aW9uczsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHBvcHVsYXRlcyB0aGUgc3BlY2lmaWVkIDxjb2RlPm1hbmFnZXI8L2NvZGU+IHdpdGgge0BsaW5rIG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5BY3Rpb25Db250cmlidXRpb25JdGVtfXMKKwkgKiBiYXNlZCBvbiB0aGUge0BsaW5rIG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JQWN0aW9ufXMgY29udGFpbmVkIGluIHRoZSA8Y29kZT5hY3Rpb25zPC9jb2RlPiBjb2xsZWN0aW9uLAorCSAqIGJ5IGluc2VydGluZyB0aGVtIGJlZm9yZSB0aGUgc3BlY2lmaWVkIGNvbnRyaWJ1dGlvbiBpdGVtIDxjb2RlPmNvbnRyaWJ1dGlvbklEPC9jb2RlPi4KKwkgKiBJZiA8Y29kZT5jb250cmlidXRpb25JRDwvY29kZT4gaXMgPGNvZGU+bnVsbDwvY29kZT4sIHRoZXkgYXJlIHNpbXBseSBhZGRlZC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBwb3B1bGF0ZU1hbmFnZXIoSUNvbnRyaWJ1dGlvbk1hbmFnZXIgbWFuYWdlciwgQ29sbGVjdGlvbjw/IGV4dGVuZHMgSUFjdGlvbj4gYWN0aW9ucywgU3RyaW5nIGNvbnRyaWJ1dGlvbklEKSB7CisJCWlmIChhY3Rpb25zICE9IG51bGwpIHsKKwkJCWZvciAoSUFjdGlvbiBhY3Rpb24gOiBhY3Rpb25zKSB7CisJCQkJaWYgKGNvbnRyaWJ1dGlvbklEICE9IG51bGwpIHsKKwkJCQkJbWFuYWdlci5pbnNlcnRCZWZvcmUoY29udHJpYnV0aW9uSUQsIGFjdGlvbik7CisJCQkJfQorCQkJCWVsc2UgeworCQkJCQltYW5hZ2VyLmFkZChhY3Rpb24pOworCQkJCX0KKwkJCX0KKwkJfQorCX0KKwkJCisJLyoqCisJICogVGhpcyByZW1vdmVzIGZyb20gdGhlIHNwZWNpZmllZCA8Y29kZT5tYW5hZ2VyPC9jb2RlPiBhbGwge0BsaW5rIG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5BY3Rpb25Db250cmlidXRpb25JdGVtfXMKKwkgKiBiYXNlZCBvbiB0aGUge0BsaW5rIG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JQWN0aW9ufXMgY29udGFpbmVkIGluIHRoZSA8Y29kZT5hY3Rpb25zPC9jb2RlPiBjb2xsZWN0aW9uLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIGRlcG9wdWxhdGVNYW5hZ2VyKElDb250cmlidXRpb25NYW5hZ2VyIG1hbmFnZXIsIENvbGxlY3Rpb248PyBleHRlbmRzIElBY3Rpb24+IGFjdGlvbnMpIHsKKwkJaWYgKGFjdGlvbnMgIT0gbnVsbCkgeworCQkJSUNvbnRyaWJ1dGlvbkl0ZW1bXSBpdGVtcyA9IG1hbmFnZXIuZ2V0SXRlbXMoKTsKKwkJCWZvciAoaW50IGkgPSAwOyBpIDwgaXRlbXMubGVuZ3RoOyBpKyspIHsKKwkJCQkvLyBMb29rIGludG8gU3ViQ29udHJpYnV0aW9uSXRlbXMKKwkJCQkvLworCQkJCUlDb250cmlidXRpb25JdGVtIGNvbnRyaWJ1dGlvbkl0ZW0gPSBpdGVtc1tpXTsKKwkJCQl3aGlsZSAoY29udHJpYnV0aW9uSXRlbSBpbnN0YW5jZW9mIFN1YkNvbnRyaWJ1dGlvbkl0ZW0pIHsKKwkJCQkJY29udHJpYnV0aW9uSXRlbSA9ICgoU3ViQ29udHJpYnV0aW9uSXRlbSljb250cmlidXRpb25JdGVtKS5nZXRJbm5lckl0ZW0oKTsKKwkJCQl9CisKKwkJCQkvLyBEZWxldGUgdGhlIEFjdGlvbkNvbnRyaWJ1dGlvbkl0ZW1zIHdpdGggbWF0Y2hpbmcgYWN0aW9uLgorCQkJCS8vCisJCQkJaWYgKGNvbnRyaWJ1dGlvbkl0ZW0gaW5zdGFuY2VvZiBBY3Rpb25Db250cmlidXRpb25JdGVtKSB7CisJCQkJCUlBY3Rpb24gYWN0aW9uID0gKChBY3Rpb25Db250cmlidXRpb25JdGVtKWNvbnRyaWJ1dGlvbkl0ZW0pLmdldEFjdGlvbigpOworCQkJCQlpZiAoYWN0aW9ucy5jb250YWlucyhhY3Rpb24pKSB7CisJCQkJCQltYW5hZ2VyLnJlbW92ZShjb250cmlidXRpb25JdGVtKTsKKwkJCQkJfQorCQkJCX0KKwkJCX0KKwkJfQorCX0KKworCS8qKgorCSAqIFRoaXMgcG9wdWxhdGVzIHRoZSBwb3AtdXAgbWVudSBiZWZvcmUgaXQgYXBwZWFycy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBtZW51QWJvdXRUb1Nob3coSU1lbnVNYW5hZ2VyIG1lbnVNYW5hZ2VyKSB7CisJCXN1cGVyLm1lbnVBYm91dFRvU2hvdyhtZW51TWFuYWdlcik7CisJCU1lbnVNYW5hZ2VyIHN1Ym1lbnVNYW5hZ2VyID0gbnVsbDsKKworCQlzdWJtZW51TWFuYWdlciA9IG5ldyBNZW51TWFuYWdlcihEZWZpbml0aW9uc0VkaXRQbHVnaW4uSU5TVEFOQ0UuZ2V0U3RyaW5nKCJfVUlfQ3JlYXRlQ2hpbGRfbWVudV9pdGVtIikpOyAvLyROT04tTkxTLTEkCisJCXBvcHVsYXRlTWFuYWdlcihzdWJtZW51TWFuYWdlciwgY3JlYXRlQ2hpbGRBY3Rpb25zLCBudWxsKTsKKwkJbWVudU1hbmFnZXIuaW5zZXJ0QmVmb3JlKCJlZGl0Iiwgc3VibWVudU1hbmFnZXIpOyAvLyROT04tTkxTLTEkCisKKwkJc3VibWVudU1hbmFnZXIgPSBuZXcgTWVudU1hbmFnZXIoRGVmaW5pdGlvbnNFZGl0UGx1Z2luLklOU1RBTkNFLmdldFN0cmluZygiX1VJX0NyZWF0ZVNpYmxpbmdfbWVudV9pdGVtIikpOyAvLyROT04tTkxTLTEkCisJCXBvcHVsYXRlTWFuYWdlcihzdWJtZW51TWFuYWdlciwgY3JlYXRlU2libGluZ0FjdGlvbnMsIG51bGwpOworCQltZW51TWFuYWdlci5pbnNlcnRCZWZvcmUoImVkaXQiLCBzdWJtZW51TWFuYWdlcik7IC8vJE5PTi1OTFMtMSQKKwl9CisKKwkvKioKKwkgKiBUaGlzIGluc2VydHMgZ2xvYmFsIGFjdGlvbnMgYmVmb3JlIHRoZSAiYWRkaXRpb25zLWVuZCIgc2VwYXJhdG9yLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIGFkZEdsb2JhbEFjdGlvbnMoSU1lbnVNYW5hZ2VyIG1lbnVNYW5hZ2VyKSB7CisJCW1lbnVNYW5hZ2VyLmluc2VydEFmdGVyKCJhZGRpdGlvbnMtZW5kIiwgbmV3IFNlcGFyYXRvcigidWktYWN0aW9ucyIpKTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCisJCW1lbnVNYW5hZ2VyLmluc2VydEFmdGVyKCJ1aS1hY3Rpb25zIiwgc2hvd1Byb3BlcnRpZXNWaWV3QWN0aW9uKTsgLy8kTk9OLU5MUy0xJAorCisJCXJlZnJlc2hWaWV3ZXJBY3Rpb24uc2V0RW5hYmxlZChyZWZyZXNoVmlld2VyQWN0aW9uLmlzRW5hYmxlZCgpKTsJCQorCQltZW51TWFuYWdlci5pbnNlcnRBZnRlcigidWktYWN0aW9ucyIsIHJlZnJlc2hWaWV3ZXJBY3Rpb24pOyAvLyROT04tTkxTLTEkCisKKwkJc3VwZXIuYWRkR2xvYmFsQWN0aW9ucyhtZW51TWFuYWdlcik7CisJfQorCisJLyoqCisJICogVGhpcyBlbnN1cmVzIHRoYXQgYSBkZWxldGUgYWN0aW9uIHdpbGwgY2xlYW4gdXAgYWxsIHJlZmVyZW5jZXMgdG8gZGVsZXRlZCBvYmplY3RzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCBib29sZWFuIHJlbW92ZUFsbFJlZmVyZW5jZXNPbkRlbGV0ZSgpIHsKKwkJcmV0dXJuIHRydWU7CisJfQorCit9CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvbm9kZXMvcHJlc2VudGF0aW9uL05vZGVzRWRpdG9yLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvbm9kZXMvcHJlc2VudGF0aW9uL05vZGVzRWRpdG9yLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmRiMjIzMgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy9ub2Rlcy9wcmVzZW50YXRpb24vTm9kZXNFZGl0b3IuamF2YQpAQCAtMCwwICsxLDE1MDYgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5ub2Rlcy5wcmVzZW50YXRpb247CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKK2ltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOworaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW07CitpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbnM7CitpbXBvcnQgamF2YS51dGlsLkV2ZW50T2JqZWN0OworaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOworaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKK2ltcG9ydCBqYXZhLnV0aWwuTGlua2VkSGFzaE1hcDsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuTWFwOworCitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUZpbGU7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSU1hcmtlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUmVzb3VyY2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVJlc291cmNlQ2hhbmdlRXZlbnQ7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVJlc291cmNlQ2hhbmdlTGlzdGVuZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVJlc291cmNlRGVsdGE7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVJlc291cmNlRGVsdGFWaXNpdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLlJlc291cmNlc1BsdWdpbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQ29yZUV4Y2VwdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVBhdGg7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQcm9ncmVzc01vbml0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLk51bGxQcm9ncmVzc01vbml0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5jb21tYW5kLkJhc2ljQ29tbWFuZFN0YWNrOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24uY29tbWFuZC5Db21tYW5kOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24uY29tbWFuZC5Db21tYW5kU3RhY2s7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5jb21tYW5kLkNvbW1hbmRTdGFja0xpc3RlbmVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LkFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnVpLk1hcmtlckhlbHBlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnVpLmVkaXRvci5Qcm9ibGVtRWRpdG9yUGFydDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnVpLnZpZXdlci5JVmlld2VyUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLkJhc2ljRGlhZ25vc3RpYzsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuRGlhZ25vc3RpYzsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuVVJJOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FVmFsaWRhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5wcm92aWRlci5FY29yZUl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5yZXNvdXJjZS5SZXNvdXJjZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUucmVzb3VyY2UuUmVzb3VyY2VTZXQ7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnV0aWwuRUNvbnRlbnRBZGFwdGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS51dGlsLkVjb3JlVXRpbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5kb21haW4uQWRhcHRlckZhY3RvcnlFZGl0aW5nRG9tYWluOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LmRvbWFpbi5FZGl0aW5nRG9tYWluOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LmRvbWFpbi5JRWRpdGluZ0RvbWFpblByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkFkYXB0ZXJGYWN0b3J5SXRlbURlbGVnYXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5Db21wb3NlZEFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLlJlZmxlY3RpdmVJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5yZXNvdXJjZS5SZXNvdXJjZUl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmFjdGlvbi5FZGl0aW5nRG9tYWluQWN0aW9uQmFyQ29udHJpYnV0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkuY2VsbGVkaXRvci5BZGFwdGVyRmFjdG9yeVRyZWVFZGl0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkuZG5kLkVkaXRpbmdEb21haW5WaWV3ZXJEcm9wQWRhcHRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5kbmQuTG9jYWxUcmFuc2ZlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5kbmQuVmlld2VyRHJhZ0FkYXB0ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkucHJvdmlkZXIuQWRhcHRlckZhY3RvcnlDb250ZW50UHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkucHJvdmlkZXIuQWRhcHRlckZhY3RvcnlMYWJlbFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLnByb3ZpZGVyLlVud3JhcHBpbmdTZWxlY3Rpb25Qcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS51dGlsLkVkaXRVSU1hcmtlckhlbHBlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS51dGlsLkVkaXRVSVV0aWw7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkudmlldy5FeHRlbmRlZFByb3BlcnR5U2hlZXRQYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JTWVudUxpc3RlbmVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JTWVudU1hbmFnZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklTdGF0dXNMaW5lTWFuYWdlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSVRvb2xCYXJNYW5hZ2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5NZW51TWFuYWdlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uU2VwYXJhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmRpYWxvZ3MuTWVzc2FnZURpYWxvZzsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5kaWFsb2dzLlByb2dyZXNzTW9uaXRvckRpYWxvZzsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvblByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVN0cnVjdHVyZWRTZWxlY3Rpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5TZWxlY3Rpb25DaGFuZ2VkRXZlbnQ7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5TdHJ1Y3R1cmVkU2VsZWN0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuU3RydWN0dXJlZFZpZXdlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlRyZWVWaWV3ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5WaWV3ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5wcm92aWRlci5Db21tb25JdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGgucHJvdmlkZXIuR3JhcGhJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwucHJvdmlkZXIuTW9kZWxJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIucHJvdmlkZXIuTW9kaWZpZXJJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2NlbmFyaW8ucHJvdmlkZXIuU2NlbmFyaW9JdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2VxdWVuY2VyLnByb3ZpZGVyLlNlcXVlbmNlckl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zb2x2ZXIucHJvdmlkZXIuU29sdmVySXRlbVByb3ZpZGVyQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5lZGdlcy5wcm92aWRlci5EZWZpbml0aW9uc0VkaXRQbHVnaW47CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5lZGdlcy5wcm92aWRlci5FZGdlc0l0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLnByb3ZpZGVyLkxhYmVsc0l0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubm9kZXMucHJvdmlkZXIuTm9kZXNJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLnR5cGVzLnByb3ZpZGVyLlR5cGVzSXRlbVByb3ZpZGVyQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LlNXVDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuY3VzdG9tLkNUYWJGb2xkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmRuZC5ETkQ7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmRuZC5UcmFuc2ZlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLkNvbnRyb2xBZGFwdGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuQ29udHJvbEV2ZW50OworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ncmFwaGljcy5Qb2ludDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuTWVudTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5UcmVlOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklBY3Rpb25CYXJzOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklFZGl0b3JJbnB1dDsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5JRWRpdG9yUGFydDsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5JRWRpdG9yU2l0ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5JUGFydExpc3RlbmVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2hQYXJ0OworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLlBhcnRJbml0RXhjZXB0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLmFjdGlvbnMuV29ya3NwYWNlTW9kaWZ5T3BlcmF0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLmRpYWxvZ3MuU2F2ZUFzRGlhbG9nOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLmlkZS5JR290b01hcmtlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5wYXJ0LkZpbGVFZGl0b3JJbnB1dDsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5wYXJ0Lk11bHRpUGFnZUVkaXRvclBhcnQ7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkudmlld3MuY29udGVudG91dGxpbmUuQ29udGVudE91dGxpbmU7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkudmlld3MuY29udGVudG91dGxpbmUuQ29udGVudE91dGxpbmVQYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLnZpZXdzLmNvbnRlbnRvdXRsaW5lLklDb250ZW50T3V0bGluZVBhZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkudmlld3MucHJvcGVydGllcy5JUHJvcGVydHlTaGVldFBhZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkudmlld3MucHJvcGVydGllcy5Qcm9wZXJ0eVNoZWV0OworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLnZpZXdzLnByb3BlcnRpZXMuUHJvcGVydHlTaGVldFBhZ2U7CisKKworLyoqCisgKiBUaGlzIGlzIGFuIGV4YW1wbGUgb2YgYSBOb2RlcyBtb2RlbCBlZGl0b3IuCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBOb2Rlc0VkaXRvcgorCWV4dGVuZHMgTXVsdGlQYWdlRWRpdG9yUGFydAorCWltcGxlbWVudHMgSUVkaXRpbmdEb21haW5Qcm92aWRlciwgSVNlbGVjdGlvblByb3ZpZGVyLCBJTWVudUxpc3RlbmVyLCBJVmlld2VyUHJvdmlkZXIsIElHb3RvTWFya2VyIHsKKwkvKioKKwkgKiBUaGlzIGtlZXBzIHRyYWNrIG9mIHRoZSBlZGl0aW5nIGRvbWFpbiB0aGF0IGlzIHVzZWQgdG8gdHJhY2sgYWxsIGNoYW5nZXMgdG8gdGhlIG1vZGVsLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBBZGFwdGVyRmFjdG9yeUVkaXRpbmdEb21haW4gZWRpdGluZ0RvbWFpbjsKKworCS8qKgorCSAqIFRoaXMgaXMgdGhlIG9uZSBhZGFwdGVyIGZhY3RvcnkgdXNlZCBmb3IgcHJvdmlkaW5nIHZpZXdzIG9mIHRoZSBtb2RlbC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgQ29tcG9zZWRBZGFwdGVyRmFjdG9yeSBhZGFwdGVyRmFjdG9yeTsKKworCS8qKgorCSAqIFRoaXMgaXMgdGhlIGNvbnRlbnQgb3V0bGluZSBwYWdlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBJQ29udGVudE91dGxpbmVQYWdlIGNvbnRlbnRPdXRsaW5lUGFnZTsKKworCS8qKgorCSAqIFRoaXMgaXMgYSBrbHVkZ2UuLi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgSVN0YXR1c0xpbmVNYW5hZ2VyIGNvbnRlbnRPdXRsaW5lU3RhdHVzTGluZU1hbmFnZXI7CisKKwkvKioKKwkgKiBUaGlzIGlzIHRoZSBjb250ZW50IG91dGxpbmUgcGFnZSdzIHZpZXdlci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgVHJlZVZpZXdlciBjb250ZW50T3V0bGluZVZpZXdlcjsKKworCS8qKgorCSAqIFRoaXMgaXMgdGhlIHByb3BlcnR5IHNoZWV0IHBhZ2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIFByb3BlcnR5U2hlZXRQYWdlIHByb3BlcnR5U2hlZXRQYWdlOworCisJLyoqCisJICogVGhpcyBpcyB0aGUgdmlld2VyIHRoYXQgc2hhZG93cyB0aGUgc2VsZWN0aW9uIGluIHRoZSBjb250ZW50IG91dGxpbmUuCisJICogVGhlIHBhcmVudCByZWxhdGlvbiBtdXN0IGJlIGNvcnJlY3RseSBkZWZpbmVkIGZvciB0aGlzIHRvIHdvcmsuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIFRyZWVWaWV3ZXIgc2VsZWN0aW9uVmlld2VyOworCisJLyoqCisJICogVGhpcyBrZWVwcyB0cmFjayBvZiB0aGUgYWN0aXZlIGNvbnRlbnQgdmlld2VyLCB3aGljaCBtYXkgYmUgZWl0aGVyIG9uZSBvZiB0aGUgdmlld2VycyBpbiB0aGUgcGFnZXMgb3IgdGhlIGNvbnRlbnQgb3V0bGluZSB2aWV3ZXIuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIFZpZXdlciBjdXJyZW50Vmlld2VyOworCisJLyoqCisJICogVGhpcyBsaXN0ZW5zIHRvIHdoaWNoIGV2ZXIgdmlld2VyIGlzIGFjdGl2ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lciBzZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXI7CisKKwkvKioKKwkgKiBUaGlzIGtlZXBzIHRyYWNrIG9mIGFsbCB0aGUge0BsaW5rIG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcn1zIHRoYXQgYXJlIGxpc3RlbmluZyB0byB0aGlzIGVkaXRvci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgQ29sbGVjdGlvbjxJU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyPiBzZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXJzID0gbmV3IEFycmF5TGlzdDxJU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyPigpOworCisJLyoqCisJICogVGhpcyBrZWVwcyB0cmFjayBvZiB0aGUgc2VsZWN0aW9uIG9mIHRoZSBlZGl0b3IgYXMgYSB3aG9sZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgSVNlbGVjdGlvbiBlZGl0b3JTZWxlY3Rpb24gPSBTdHJ1Y3R1cmVkU2VsZWN0aW9uLkVNUFRZOworCisJLyoqCisJICogVGhlIE1hcmtlckhlbHBlciBpcyByZXNwb25zaWJsZSBmb3IgY3JlYXRpbmcgd29ya3NwYWNlIHJlc291cmNlIG1hcmtlcnMgcHJlc2VudGVkCisJICogaW4gRWNsaXBzZSdzIFByb2JsZW1zIFZpZXcuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIE1hcmtlckhlbHBlciBtYXJrZXJIZWxwZXIgPSBuZXcgRWRpdFVJTWFya2VySGVscGVyKCk7CisKKwkvKioKKwkgKiBUaGlzIGxpc3RlbnMgZm9yIHdoZW4gdGhlIG91dGxpbmUgYmVjb21lcyBhY3RpdmUKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgSVBhcnRMaXN0ZW5lciBwYXJ0TGlzdGVuZXIgPQorCQluZXcgSVBhcnRMaXN0ZW5lcigpIHsKKwkJCXB1YmxpYyB2b2lkIHBhcnRBY3RpdmF0ZWQoSVdvcmtiZW5jaFBhcnQgcCkgeworCQkJCWlmIChwIGluc3RhbmNlb2YgQ29udGVudE91dGxpbmUpIHsKKwkJCQkJaWYgKCgoQ29udGVudE91dGxpbmUpcCkuZ2V0Q3VycmVudFBhZ2UoKSA9PSBjb250ZW50T3V0bGluZVBhZ2UpIHsKKwkJCQkJCWdldEFjdGlvbkJhckNvbnRyaWJ1dG9yKCkuc2V0QWN0aXZlRWRpdG9yKE5vZGVzRWRpdG9yLnRoaXMpOworCisJCQkJCQlzZXRDdXJyZW50Vmlld2VyKGNvbnRlbnRPdXRsaW5lVmlld2VyKTsKKwkJCQkJfQorCQkJCX0KKwkJCQllbHNlIGlmIChwIGluc3RhbmNlb2YgUHJvcGVydHlTaGVldCkgeworCQkJCQlpZiAoKChQcm9wZXJ0eVNoZWV0KXApLmdldEN1cnJlbnRQYWdlKCkgPT0gcHJvcGVydHlTaGVldFBhZ2UpIHsKKwkJCQkJCWdldEFjdGlvbkJhckNvbnRyaWJ1dG9yKCkuc2V0QWN0aXZlRWRpdG9yKE5vZGVzRWRpdG9yLnRoaXMpOworCQkJCQkJaGFuZGxlQWN0aXZhdGUoKTsKKwkJCQkJfQorCQkJCX0KKwkJCQllbHNlIGlmIChwID09IE5vZGVzRWRpdG9yLnRoaXMpIHsKKwkJCQkJaGFuZGxlQWN0aXZhdGUoKTsKKwkJCQl9CisJCQl9CisJCQlwdWJsaWMgdm9pZCBwYXJ0QnJvdWdodFRvVG9wKElXb3JrYmVuY2hQYXJ0IHApIHsKKwkJCQkvLyBJZ25vcmUuCisJCQl9CisJCQlwdWJsaWMgdm9pZCBwYXJ0Q2xvc2VkKElXb3JrYmVuY2hQYXJ0IHApIHsKKwkJCQkvLyBJZ25vcmUuCisJCQl9CisJCQlwdWJsaWMgdm9pZCBwYXJ0RGVhY3RpdmF0ZWQoSVdvcmtiZW5jaFBhcnQgcCkgeworCQkJCS8vIElnbm9yZS4KKwkJCX0KKwkJCXB1YmxpYyB2b2lkIHBhcnRPcGVuZWQoSVdvcmtiZW5jaFBhcnQgcCkgeworCQkJCS8vIElnbm9yZS4KKwkJCX0KKwkJfTsKKworCS8qKgorCSAqIFJlc291cmNlcyB0aGF0IGhhdmUgYmVlbiByZW1vdmVkIHNpbmNlIGxhc3QgYWN0aXZhdGlvbi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgQ29sbGVjdGlvbjxSZXNvdXJjZT4gcmVtb3ZlZFJlc291cmNlcyA9IG5ldyBBcnJheUxpc3Q8UmVzb3VyY2U+KCk7CisKKwkvKioKKwkgKiBSZXNvdXJjZXMgdGhhdCBoYXZlIGJlZW4gY2hhbmdlZCBzaW5jZSBsYXN0IGFjdGl2YXRpb24uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIENvbGxlY3Rpb248UmVzb3VyY2U+IGNoYW5nZWRSZXNvdXJjZXMgPSBuZXcgQXJyYXlMaXN0PFJlc291cmNlPigpOworCisJLyoqCisJICogUmVzb3VyY2VzIHRoYXQgaGF2ZSBiZWVuIHNhdmVkLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBDb2xsZWN0aW9uPFJlc291cmNlPiBzYXZlZFJlc291cmNlcyA9IG5ldyBBcnJheUxpc3Q8UmVzb3VyY2U+KCk7CisKKwkvKioKKwkgKiBNYXAgdG8gc3RvcmUgdGhlIGRpYWdub3N0aWMgYXNzb2NpYXRlZCB3aXRoIGEgcmVzb3VyY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIE1hcDxSZXNvdXJjZSwgRGlhZ25vc3RpYz4gcmVzb3VyY2VUb0RpYWdub3N0aWNNYXAgPSBuZXcgTGlua2VkSGFzaE1hcDxSZXNvdXJjZSwgRGlhZ25vc3RpYz4oKTsKKworCS8qKgorCSAqIENvbnRyb2xzIHdoZXRoZXIgdGhlIHByb2JsZW0gaW5kaWNhdGlvbiBzaG91bGQgYmUgdXBkYXRlZC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgYm9vbGVhbiB1cGRhdGVQcm9ibGVtSW5kaWNhdGlvbiA9IHRydWU7CisKKwkvKioKKwkgKiBBZGFwdGVyIHVzZWQgdG8gdXBkYXRlIHRoZSBwcm9ibGVtIGluZGljYXRpb24gd2hlbiByZXNvdXJjZXMgYXJlIGRlbWFuZGVkIGxvYWRlZC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgRUNvbnRlbnRBZGFwdGVyIHByb2JsZW1JbmRpY2F0aW9uQWRhcHRlciA9IAorCQluZXcgRUNvbnRlbnRBZGFwdGVyKCkgeworCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgdm9pZCBub3RpZnlDaGFuZ2VkKE5vdGlmaWNhdGlvbiBub3RpZmljYXRpb24pIHsKKwkJCQlpZiAobm90aWZpY2F0aW9uLmdldE5vdGlmaWVyKCkgaW5zdGFuY2VvZiBSZXNvdXJjZSkgeworCQkJCQlzd2l0Y2ggKG5vdGlmaWNhdGlvbi5nZXRGZWF0dXJlSUQoUmVzb3VyY2UuY2xhc3MpKSB7CisJCQkJCQljYXNlIFJlc291cmNlLlJFU09VUkNFX19JU19MT0FERUQ6CisJCQkJCQljYXNlIFJlc291cmNlLlJFU09VUkNFX19FUlJPUlM6CisJCQkJCQljYXNlIFJlc291cmNlLlJFU09VUkNFX19XQVJOSU5HUzogeworCQkJCQkJCVJlc291cmNlIHJlc291cmNlID0gKFJlc291cmNlKW5vdGlmaWNhdGlvbi5nZXROb3RpZmllcigpOworCQkJCQkJCURpYWdub3N0aWMgZGlhZ25vc3RpYyA9IGFuYWx5emVSZXNvdXJjZVByb2JsZW1zKHJlc291cmNlLCBudWxsKTsKKwkJCQkJCQlpZiAoZGlhZ25vc3RpYy5nZXRTZXZlcml0eSgpICE9IERpYWdub3N0aWMuT0spIHsKKwkJCQkJCQkJcmVzb3VyY2VUb0RpYWdub3N0aWNNYXAucHV0KHJlc291cmNlLCBkaWFnbm9zdGljKTsKKwkJCQkJCQl9CisJCQkJCQkJZWxzZSB7CisJCQkJCQkJCXJlc291cmNlVG9EaWFnbm9zdGljTWFwLnJlbW92ZShyZXNvdXJjZSk7CisJCQkJCQkJfQorCisJCQkJCQkJaWYgKHVwZGF0ZVByb2JsZW1JbmRpY2F0aW9uKSB7CisJCQkJCQkJCWdldFNpdGUoKS5nZXRTaGVsbCgpLmdldERpc3BsYXkoKS5hc3luY0V4ZWMKKwkJCQkJCQkJCShuZXcgUnVubmFibGUoKSB7CisJCQkJCQkJCQkJIHB1YmxpYyB2b2lkIHJ1bigpIHsKKwkJCQkJCQkJCQkJIHVwZGF0ZVByb2JsZW1JbmRpY2F0aW9uKCk7CisJCQkJCQkJCQkJIH0KKwkJCQkJCQkJCSB9KTsKKwkJCQkJCQl9CisJCQkJCQkJYnJlYWs7CisJCQkJCQl9CisJCQkJCX0KKwkJCQl9CisJCQkJZWxzZSB7CisJCQkJCXN1cGVyLm5vdGlmeUNoYW5nZWQobm90aWZpY2F0aW9uKTsKKwkJCQl9CisJCQl9CisKKwkJCUBPdmVycmlkZQorCQkJcHJvdGVjdGVkIHZvaWQgc2V0VGFyZ2V0KFJlc291cmNlIHRhcmdldCkgeworCQkJCWJhc2ljU2V0VGFyZ2V0KHRhcmdldCk7CisJCQl9CisKKwkJCUBPdmVycmlkZQorCQkJcHJvdGVjdGVkIHZvaWQgdW5zZXRUYXJnZXQoUmVzb3VyY2UgdGFyZ2V0KSB7CisJCQkJYmFzaWNVbnNldFRhcmdldCh0YXJnZXQpOworCQkJfQorCQl9OworCisJLyoqCisJICogVGhpcyBsaXN0ZW5zIGZvciB3b3Jrc3BhY2UgY2hhbmdlcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgSVJlc291cmNlQ2hhbmdlTGlzdGVuZXIgcmVzb3VyY2VDaGFuZ2VMaXN0ZW5lciA9CisJCW5ldyBJUmVzb3VyY2VDaGFuZ2VMaXN0ZW5lcigpIHsKKwkJCXB1YmxpYyB2b2lkIHJlc291cmNlQ2hhbmdlZChJUmVzb3VyY2VDaGFuZ2VFdmVudCBldmVudCkgeworCQkJCUlSZXNvdXJjZURlbHRhIGRlbHRhID0gZXZlbnQuZ2V0RGVsdGEoKTsKKwkJCQl0cnkgeworCQkJCQljbGFzcyBSZXNvdXJjZURlbHRhVmlzaXRvciBpbXBsZW1lbnRzIElSZXNvdXJjZURlbHRhVmlzaXRvciB7CisJCQkJCQlwcm90ZWN0ZWQgUmVzb3VyY2VTZXQgcmVzb3VyY2VTZXQgPSBlZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCk7CisJCQkJCQlwcm90ZWN0ZWQgQ29sbGVjdGlvbjxSZXNvdXJjZT4gY2hhbmdlZFJlc291cmNlcyA9IG5ldyBBcnJheUxpc3Q8UmVzb3VyY2U+KCk7CisJCQkJCQlwcm90ZWN0ZWQgQ29sbGVjdGlvbjxSZXNvdXJjZT4gcmVtb3ZlZFJlc291cmNlcyA9IG5ldyBBcnJheUxpc3Q8UmVzb3VyY2U+KCk7CisKKwkJCQkJCXB1YmxpYyBib29sZWFuIHZpc2l0KElSZXNvdXJjZURlbHRhIGRlbHRhKSB7CisJCQkJCQkJaWYgKGRlbHRhLmdldFJlc291cmNlKCkuZ2V0VHlwZSgpID09IElSZXNvdXJjZS5GSUxFKSB7CisJCQkJCQkJCWlmIChkZWx0YS5nZXRLaW5kKCkgPT0gSVJlc291cmNlRGVsdGEuUkVNT1ZFRCB8fAorCQkJCQkJCQkgICAgZGVsdGEuZ2V0S2luZCgpID09IElSZXNvdXJjZURlbHRhLkNIQU5HRUQgJiYgZGVsdGEuZ2V0RmxhZ3MoKSAhPSBJUmVzb3VyY2VEZWx0YS5NQVJLRVJTKSB7CisJCQkJCQkJCQlSZXNvdXJjZSByZXNvdXJjZSA9IHJlc291cmNlU2V0LmdldFJlc291cmNlKFVSSS5jcmVhdGVQbGF0Zm9ybVJlc291cmNlVVJJKGRlbHRhLmdldEZ1bGxQYXRoKCkudG9TdHJpbmcoKSwgdHJ1ZSksIGZhbHNlKTsKKwkJCQkJCQkJCWlmIChyZXNvdXJjZSAhPSBudWxsKSB7CisJCQkJCQkJCQkJaWYgKGRlbHRhLmdldEtpbmQoKSA9PSBJUmVzb3VyY2VEZWx0YS5SRU1PVkVEKSB7CisJCQkJCQkJCQkJCXJlbW92ZWRSZXNvdXJjZXMuYWRkKHJlc291cmNlKTsKKwkJCQkJCQkJCQl9CisJCQkJCQkJCQkJZWxzZSBpZiAoIXNhdmVkUmVzb3VyY2VzLnJlbW92ZShyZXNvdXJjZSkpIHsKKwkJCQkJCQkJCQkJY2hhbmdlZFJlc291cmNlcy5hZGQocmVzb3VyY2UpOworCQkJCQkJCQkJCX0KKwkJCQkJCQkJCX0KKwkJCQkJCQkJfQorCQkJCQkJCX0KKworCQkJCQkJCXJldHVybiB0cnVlOworCQkJCQkJfQorCisJCQkJCQlwdWJsaWMgQ29sbGVjdGlvbjxSZXNvdXJjZT4gZ2V0Q2hhbmdlZFJlc291cmNlcygpIHsKKwkJCQkJCQlyZXR1cm4gY2hhbmdlZFJlc291cmNlczsKKwkJCQkJCX0KKworCQkJCQkJcHVibGljIENvbGxlY3Rpb248UmVzb3VyY2U+IGdldFJlbW92ZWRSZXNvdXJjZXMoKSB7CisJCQkJCQkJcmV0dXJuIHJlbW92ZWRSZXNvdXJjZXM7CisJCQkJCQl9CisJCQkJCX0KKworCQkJCQlmaW5hbCBSZXNvdXJjZURlbHRhVmlzaXRvciB2aXNpdG9yID0gbmV3IFJlc291cmNlRGVsdGFWaXNpdG9yKCk7CisJCQkJCWRlbHRhLmFjY2VwdCh2aXNpdG9yKTsKKworCQkJCQlpZiAoIXZpc2l0b3IuZ2V0UmVtb3ZlZFJlc291cmNlcygpLmlzRW1wdHkoKSkgeworCQkJCQkJZ2V0U2l0ZSgpLmdldFNoZWxsKCkuZ2V0RGlzcGxheSgpLmFzeW5jRXhlYworCQkJCQkJCShuZXcgUnVubmFibGUoKSB7CisJCQkJCQkJCSBwdWJsaWMgdm9pZCBydW4oKSB7CisJCQkJCQkJCQkgcmVtb3ZlZFJlc291cmNlcy5hZGRBbGwodmlzaXRvci5nZXRSZW1vdmVkUmVzb3VyY2VzKCkpOworCQkJCQkJCQkJIGlmICghaXNEaXJ0eSgpKSB7CisJCQkJCQkJCQkJIGdldFNpdGUoKS5nZXRQYWdlKCkuY2xvc2VFZGl0b3IoTm9kZXNFZGl0b3IudGhpcywgZmFsc2UpOworCQkJCQkJCQkJIH0KKwkJCQkJCQkJIH0KKwkJCQkJCQkgfSk7CisJCQkJCX0KKworCQkJCQlpZiAoIXZpc2l0b3IuZ2V0Q2hhbmdlZFJlc291cmNlcygpLmlzRW1wdHkoKSkgeworCQkJCQkJZ2V0U2l0ZSgpLmdldFNoZWxsKCkuZ2V0RGlzcGxheSgpLmFzeW5jRXhlYworCQkJCQkJCShuZXcgUnVubmFibGUoKSB7CisJCQkJCQkJCSBwdWJsaWMgdm9pZCBydW4oKSB7CisJCQkJCQkJCQkgY2hhbmdlZFJlc291cmNlcy5hZGRBbGwodmlzaXRvci5nZXRDaGFuZ2VkUmVzb3VyY2VzKCkpOworCQkJCQkJCQkJIGlmIChnZXRTaXRlKCkuZ2V0UGFnZSgpLmdldEFjdGl2ZUVkaXRvcigpID09IE5vZGVzRWRpdG9yLnRoaXMpIHsKKwkJCQkJCQkJCQkgaGFuZGxlQWN0aXZhdGUoKTsKKwkJCQkJCQkJCSB9CisJCQkJCQkJCSB9CisJCQkJCQkJIH0pOworCQkJCQl9CisJCQkJfQorCQkJCWNhdGNoIChDb3JlRXhjZXB0aW9uIGV4Y2VwdGlvbikgeworCQkJCQlEZWZpbml0aW9uc0VkaXRQbHVnaW4uSU5TVEFOQ0UubG9nKGV4Y2VwdGlvbik7CisJCQkJfQorCQkJfQorCQl9OworCisJLyoqCisJICogSGFuZGxlcyBhY3RpdmF0aW9uIG9mIHRoZSBlZGl0b3Igb3IgaXQncyBhc3NvY2lhdGVkIHZpZXdzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIGhhbmRsZUFjdGl2YXRlKCkgeworCQkvLyBSZWNvbXB1dGUgdGhlIHJlYWQgb25seSBzdGF0ZS4KKwkJLy8KKwkJaWYgKGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VUb1JlYWRPbmx5TWFwKCkgIT0gbnVsbCkgeworCQkgIGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VUb1JlYWRPbmx5TWFwKCkuY2xlYXIoKTsKKworCQkgIC8vIFJlZnJlc2ggYW55IGFjdGlvbnMgdGhhdCBtYXkgYmVjb21lIGVuYWJsZWQgb3IgZGlzYWJsZWQuCisJCSAgLy8KKwkJICBzZXRTZWxlY3Rpb24oZ2V0U2VsZWN0aW9uKCkpOworCQl9CisKKwkJaWYgKCFyZW1vdmVkUmVzb3VyY2VzLmlzRW1wdHkoKSkgeworCQkJaWYgKGhhbmRsZURpcnR5Q29uZmxpY3QoKSkgeworCQkJCWdldFNpdGUoKS5nZXRQYWdlKCkuY2xvc2VFZGl0b3IoTm9kZXNFZGl0b3IudGhpcywgZmFsc2UpOworCQkJfQorCQkJZWxzZSB7CisJCQkJcmVtb3ZlZFJlc291cmNlcy5jbGVhcigpOworCQkJCWNoYW5nZWRSZXNvdXJjZXMuY2xlYXIoKTsKKwkJCQlzYXZlZFJlc291cmNlcy5jbGVhcigpOworCQkJfQorCQl9CisJCWVsc2UgaWYgKCFjaGFuZ2VkUmVzb3VyY2VzLmlzRW1wdHkoKSkgeworCQkJY2hhbmdlZFJlc291cmNlcy5yZW1vdmVBbGwoc2F2ZWRSZXNvdXJjZXMpOworCQkJaGFuZGxlQ2hhbmdlZFJlc291cmNlcygpOworCQkJY2hhbmdlZFJlc291cmNlcy5jbGVhcigpOworCQkJc2F2ZWRSZXNvdXJjZXMuY2xlYXIoKTsKKwkJfQorCX0KKworCS8qKgorCSAqIEhhbmRsZXMgd2hhdCB0byBkbyB3aXRoIGNoYW5nZWQgcmVzb3VyY2VzIG9uIGFjdGl2YXRpb24uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgaGFuZGxlQ2hhbmdlZFJlc291cmNlcygpIHsKKwkJaWYgKCFjaGFuZ2VkUmVzb3VyY2VzLmlzRW1wdHkoKSAmJiAoIWlzRGlydHkoKSB8fCBoYW5kbGVEaXJ0eUNvbmZsaWN0KCkpKSB7CisJCQlpZiAoaXNEaXJ0eSgpKSB7CisJCQkJY2hhbmdlZFJlc291cmNlcy5hZGRBbGwoZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpLmdldFJlc291cmNlcygpKTsKKwkJCX0KKwkJCWVkaXRpbmdEb21haW4uZ2V0Q29tbWFuZFN0YWNrKCkuZmx1c2goKTsKKworCQkJdXBkYXRlUHJvYmxlbUluZGljYXRpb24gPSBmYWxzZTsKKwkJCWZvciAoUmVzb3VyY2UgcmVzb3VyY2UgOiBjaGFuZ2VkUmVzb3VyY2VzKSB7CisJCQkJaWYgKHJlc291cmNlLmlzTG9hZGVkKCkpIHsKKwkJCQkJcmVzb3VyY2UudW5sb2FkKCk7CisJCQkJCXRyeSB7CisJCQkJCQlyZXNvdXJjZS5sb2FkKENvbGxlY3Rpb25zLkVNUFRZX01BUCk7CisJCQkJCX0KKwkJCQkJY2F0Y2ggKElPRXhjZXB0aW9uIGV4Y2VwdGlvbikgeworCQkJCQkJaWYgKCFyZXNvdXJjZVRvRGlhZ25vc3RpY01hcC5jb250YWluc0tleShyZXNvdXJjZSkpIHsKKwkJCQkJCQlyZXNvdXJjZVRvRGlhZ25vc3RpY01hcC5wdXQocmVzb3VyY2UsIGFuYWx5emVSZXNvdXJjZVByb2JsZW1zKHJlc291cmNlLCBleGNlcHRpb24pKTsKKwkJCQkJCX0KKwkJCQkJfQorCQkJCX0KKwkJCX0KKworCQkJaWYgKEFkYXB0ZXJGYWN0b3J5RWRpdGluZ0RvbWFpbi5pc1N0YWxlKGVkaXRvclNlbGVjdGlvbikpIHsKKwkJCQlzZXRTZWxlY3Rpb24oU3RydWN0dXJlZFNlbGVjdGlvbi5FTVBUWSk7CisJCQl9CisKKwkJCXVwZGF0ZVByb2JsZW1JbmRpY2F0aW9uID0gdHJ1ZTsKKwkJCXVwZGF0ZVByb2JsZW1JbmRpY2F0aW9uKCk7CisJCX0KKwl9CisgIAorCS8qKgorCSAqIFVwZGF0ZXMgdGhlIHByb2JsZW1zIGluZGljYXRpb24gd2l0aCB0aGUgaW5mb3JtYXRpb24gZGVzY3JpYmVkIGluIHRoZSBzcGVjaWZpZWQgZGlhZ25vc3RpYy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCB1cGRhdGVQcm9ibGVtSW5kaWNhdGlvbigpIHsKKwkJaWYgKHVwZGF0ZVByb2JsZW1JbmRpY2F0aW9uKSB7CisJCQlCYXNpY0RpYWdub3N0aWMgZGlhZ25vc3RpYyA9CisJCQkJbmV3IEJhc2ljRGlhZ25vc3RpYworCQkJCQkoRGlhZ25vc3RpYy5PSywKKwkJCQkJICJvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zIiwgLy8kTk9OLU5MUy0xJAorCQkJCQkgMCwKKwkJCQkJIG51bGwsCisJCQkJCSBuZXcgT2JqZWN0IFtdIHsgZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpIH0pOworCQkJZm9yIChEaWFnbm9zdGljIGNoaWxkRGlhZ25vc3RpYyA6IHJlc291cmNlVG9EaWFnbm9zdGljTWFwLnZhbHVlcygpKSB7CisJCQkJaWYgKGNoaWxkRGlhZ25vc3RpYy5nZXRTZXZlcml0eSgpICE9IERpYWdub3N0aWMuT0spIHsKKwkJCQkJZGlhZ25vc3RpYy5hZGQoY2hpbGREaWFnbm9zdGljKTsKKwkJCQl9CisJCQl9CisKKwkJCWludCBsYXN0RWRpdG9yUGFnZSA9IGdldFBhZ2VDb3VudCgpIC0gMTsKKwkJCWlmIChsYXN0RWRpdG9yUGFnZSA+PSAwICYmIGdldEVkaXRvcihsYXN0RWRpdG9yUGFnZSkgaW5zdGFuY2VvZiBQcm9ibGVtRWRpdG9yUGFydCkgeworCQkJCSgoUHJvYmxlbUVkaXRvclBhcnQpZ2V0RWRpdG9yKGxhc3RFZGl0b3JQYWdlKSkuc2V0RGlhZ25vc3RpYyhkaWFnbm9zdGljKTsKKwkJCQlpZiAoZGlhZ25vc3RpYy5nZXRTZXZlcml0eSgpICE9IERpYWdub3N0aWMuT0spIHsKKwkJCQkJc2V0QWN0aXZlUGFnZShsYXN0RWRpdG9yUGFnZSk7CisJCQkJfQorCQkJfQorCQkJZWxzZSBpZiAoZGlhZ25vc3RpYy5nZXRTZXZlcml0eSgpICE9IERpYWdub3N0aWMuT0spIHsKKwkJCQlQcm9ibGVtRWRpdG9yUGFydCBwcm9ibGVtRWRpdG9yUGFydCA9IG5ldyBQcm9ibGVtRWRpdG9yUGFydCgpOworCQkJCXByb2JsZW1FZGl0b3JQYXJ0LnNldERpYWdub3N0aWMoZGlhZ25vc3RpYyk7CisJCQkJcHJvYmxlbUVkaXRvclBhcnQuc2V0TWFya2VySGVscGVyKG1hcmtlckhlbHBlcik7CisJCQkJdHJ5IHsKKwkJCQkJYWRkUGFnZSgrK2xhc3RFZGl0b3JQYWdlLCBwcm9ibGVtRWRpdG9yUGFydCwgZ2V0RWRpdG9ySW5wdXQoKSk7CisJCQkJCXNldFBhZ2VUZXh0KGxhc3RFZGl0b3JQYWdlLCBwcm9ibGVtRWRpdG9yUGFydC5nZXRQYXJ0TmFtZSgpKTsKKwkJCQkJc2V0QWN0aXZlUGFnZShsYXN0RWRpdG9yUGFnZSk7CisJCQkJCXNob3dUYWJzKCk7CisJCQkJfQorCQkJCWNhdGNoIChQYXJ0SW5pdEV4Y2VwdGlvbiBleGNlcHRpb24pIHsKKwkJCQkJRGVmaW5pdGlvbnNFZGl0UGx1Z2luLklOU1RBTkNFLmxvZyhleGNlcHRpb24pOworCQkJCX0KKwkJCX0KKworCQkJaWYgKG1hcmtlckhlbHBlci5oYXNNYXJrZXJzKGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKSkpIHsKKwkJCQltYXJrZXJIZWxwZXIuZGVsZXRlTWFya2VycyhlZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkpOworCQkJCWlmIChkaWFnbm9zdGljLmdldFNldmVyaXR5KCkgIT0gRGlhZ25vc3RpYy5PSykgeworCQkJCQl0cnkgeworCQkJCQkJbWFya2VySGVscGVyLmNyZWF0ZU1hcmtlcnMoZGlhZ25vc3RpYyk7CisJCQkJCX0KKwkJCQkJY2F0Y2ggKENvcmVFeGNlcHRpb24gZXhjZXB0aW9uKSB7CisJCQkJCQlEZWZpbml0aW9uc0VkaXRQbHVnaW4uSU5TVEFOQ0UubG9nKGV4Y2VwdGlvbik7CisJCQkJCX0KKwkJCQl9CisJCQl9CisJCX0KKwl9CisKKwkvKioKKwkgKiBTaG93cyBhIGRpYWxvZyB0aGF0IGFza3MgaWYgY29uZmxpY3RpbmcgY2hhbmdlcyBzaG91bGQgYmUgZGlzY2FyZGVkLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBib29sZWFuIGhhbmRsZURpcnR5Q29uZmxpY3QoKSB7CisJCXJldHVybgorCQkJTWVzc2FnZURpYWxvZy5vcGVuUXVlc3Rpb24KKwkJCQkoZ2V0U2l0ZSgpLmdldFNoZWxsKCksCisJCQkJIGdldFN0cmluZygiX1VJX0ZpbGVDb25mbGljdF9sYWJlbCIpLCAvLyROT04tTkxTLTEkCisJCQkJIGdldFN0cmluZygiX1dBUk5fRmlsZUNvbmZsaWN0IikpOyAvLyROT04tTkxTLTEkCisJfQorCisJLyoqCisJICogVGhpcyBjcmVhdGVzIGEgbW9kZWwgZWRpdG9yLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBOb2Rlc0VkaXRvcigpIHsKKwkJc3VwZXIoKTsKKwkJaW5pdGlhbGl6ZUVkaXRpbmdEb21haW4oKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHNldHMgdXAgdGhlIGVkaXRpbmcgZG9tYWluIGZvciB0aGUgbW9kZWwgZWRpdG9yLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIGluaXRpYWxpemVFZGl0aW5nRG9tYWluKCkgeworCQkvLyBDcmVhdGUgYW4gYWRhcHRlciBmYWN0b3J5IHRoYXQgeWllbGRzIGl0ZW0gcHJvdmlkZXJzLgorCQkvLworCQlhZGFwdGVyRmFjdG9yeSA9IG5ldyBDb21wb3NlZEFkYXB0ZXJGYWN0b3J5KENvbXBvc2VkQWRhcHRlckZhY3RvcnkuRGVzY3JpcHRvci5SZWdpc3RyeS5JTlNUQU5DRSk7CisKKwkJYWRhcHRlckZhY3RvcnkuYWRkQWRhcHRlckZhY3RvcnkobmV3IFJlc291cmNlSXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkoKSk7CisJCWFkYXB0ZXJGYWN0b3J5LmFkZEFkYXB0ZXJGYWN0b3J5KG5ldyBFZGdlc0l0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5KCkpOworCQlhZGFwdGVyRmFjdG9yeS5hZGRBZGFwdGVyRmFjdG9yeShuZXcgTGFiZWxzSXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkoKSk7CisJCWFkYXB0ZXJGYWN0b3J5LmFkZEFkYXB0ZXJGYWN0b3J5KG5ldyBOb2Rlc0l0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5KCkpOworCQlhZGFwdGVyRmFjdG9yeS5hZGRBZGFwdGVyRmFjdG9yeShuZXcgVHlwZXNJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSgpKTsKKwkJYWRhcHRlckZhY3RvcnkuYWRkQWRhcHRlckZhY3RvcnkobmV3IEdyYXBoSXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkoKSk7CisJCWFkYXB0ZXJGYWN0b3J5LmFkZEFkYXB0ZXJGYWN0b3J5KG5ldyBDb21tb25JdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSgpKTsKKwkJYWRhcHRlckZhY3RvcnkuYWRkQWRhcHRlckZhY3RvcnkobmV3IE1vZGVsSXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkoKSk7CisJCWFkYXB0ZXJGYWN0b3J5LmFkZEFkYXB0ZXJGYWN0b3J5KG5ldyBFY29yZUl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5KCkpOworCQlhZGFwdGVyRmFjdG9yeS5hZGRBZGFwdGVyRmFjdG9yeShuZXcgTW9kaWZpZXJJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSgpKTsKKwkJYWRhcHRlckZhY3RvcnkuYWRkQWRhcHRlckZhY3RvcnkobmV3IFNjZW5hcmlvSXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkoKSk7CisJCWFkYXB0ZXJGYWN0b3J5LmFkZEFkYXB0ZXJGYWN0b3J5KG5ldyBTZXF1ZW5jZXJJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSgpKTsKKwkJYWRhcHRlckZhY3RvcnkuYWRkQWRhcHRlckZhY3RvcnkobmV3IFNvbHZlckl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5KCkpOworCQlhZGFwdGVyRmFjdG9yeS5hZGRBZGFwdGVyRmFjdG9yeShuZXcgUmVmbGVjdGl2ZUl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5KCkpOworCisJCS8vIENyZWF0ZSB0aGUgY29tbWFuZCBzdGFjayB0aGF0IHdpbGwgbm90aWZ5IHRoaXMgZWRpdG9yIGFzIGNvbW1hbmRzIGFyZSBleGVjdXRlZC4KKwkJLy8KKwkJQmFzaWNDb21tYW5kU3RhY2sgY29tbWFuZFN0YWNrID0gbmV3IEJhc2ljQ29tbWFuZFN0YWNrKCk7CisKKwkJLy8gQWRkIGEgbGlzdGVuZXIgdG8gc2V0IHRoZSBtb3N0IHJlY2VudCBjb21tYW5kJ3MgYWZmZWN0ZWQgb2JqZWN0cyB0byBiZSB0aGUgc2VsZWN0aW9uIG9mIHRoZSB2aWV3ZXIgd2l0aCBmb2N1cy4KKwkJLy8KKwkJY29tbWFuZFN0YWNrLmFkZENvbW1hbmRTdGFja0xpc3RlbmVyCisJCQkobmV3IENvbW1hbmRTdGFja0xpc3RlbmVyKCkgeworCQkJCSBwdWJsaWMgdm9pZCBjb21tYW5kU3RhY2tDaGFuZ2VkKGZpbmFsIEV2ZW50T2JqZWN0IGV2ZW50KSB7CisJCQkJCSBnZXRDb250YWluZXIoKS5nZXREaXNwbGF5KCkuYXN5bmNFeGVjCisJCQkJCQkgKG5ldyBSdW5uYWJsZSgpIHsKKwkJCQkJCQkgIHB1YmxpYyB2b2lkIHJ1bigpIHsKKwkJCQkJCQkJICBmaXJlUHJvcGVydHlDaGFuZ2UoSUVkaXRvclBhcnQuUFJPUF9ESVJUWSk7CisKKwkJCQkJCQkJICAvLyBUcnkgdG8gc2VsZWN0IHRoZSBhZmZlY3RlZCBvYmplY3RzLgorCQkJCQkJCQkgIC8vCisJCQkJCQkJCSAgQ29tbWFuZCBtb3N0UmVjZW50Q29tbWFuZCA9ICgoQ29tbWFuZFN0YWNrKWV2ZW50LmdldFNvdXJjZSgpKS5nZXRNb3N0UmVjZW50Q29tbWFuZCgpOworCQkJCQkJCQkgIGlmIChtb3N0UmVjZW50Q29tbWFuZCAhPSBudWxsKSB7CisJCQkJCQkJCQkgIHNldFNlbGVjdGlvblRvVmlld2VyKG1vc3RSZWNlbnRDb21tYW5kLmdldEFmZmVjdGVkT2JqZWN0cygpKTsKKwkJCQkJCQkJICB9CisJCQkJCQkJCSAgaWYgKHByb3BlcnR5U2hlZXRQYWdlICE9IG51bGwgJiYgIXByb3BlcnR5U2hlZXRQYWdlLmdldENvbnRyb2woKS5pc0Rpc3Bvc2VkKCkpIHsKKwkJCQkJCQkJCSAgcHJvcGVydHlTaGVldFBhZ2UucmVmcmVzaCgpOworCQkJCQkJCQkgIH0KKwkJCQkJCQkgIH0KKwkJCQkJCSAgfSk7CisJCQkJIH0KKwkJCSB9KTsKKworCQkvLyBDcmVhdGUgdGhlIGVkaXRpbmcgZG9tYWluIHdpdGggYSBzcGVjaWFsIGNvbW1hbmQgc3RhY2suCisJCS8vCisJCWVkaXRpbmdEb21haW4gPSBuZXcgQWRhcHRlckZhY3RvcnlFZGl0aW5nRG9tYWluKGFkYXB0ZXJGYWN0b3J5LCBjb21tYW5kU3RhY2ssIG5ldyBIYXNoTWFwPFJlc291cmNlLCBCb29sZWFuPigpKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGlzIGhlcmUgZm9yIHRoZSBsaXN0ZW5lciB0byBiZSBhYmxlIHRvIGNhbGwgaXQuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgZmlyZVByb3BlcnR5Q2hhbmdlKGludCBhY3Rpb24pIHsKKwkJc3VwZXIuZmlyZVByb3BlcnR5Q2hhbmdlKGFjdGlvbik7CisJfQorCisJLyoqCisJICogVGhpcyBzZXRzIHRoZSBzZWxlY3Rpb24gaW50byB3aGljaGV2ZXIgdmlld2VyIGlzIGFjdGl2ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRTZWxlY3Rpb25Ub1ZpZXdlcihDb2xsZWN0aW9uPD8+IGNvbGxlY3Rpb24pIHsKKwkJZmluYWwgQ29sbGVjdGlvbjw/PiB0aGVTZWxlY3Rpb24gPSBjb2xsZWN0aW9uOworCQkvLyBNYWtlIHN1cmUgaXQncyBva2F5LgorCQkvLworCQlpZiAodGhlU2VsZWN0aW9uICE9IG51bGwgJiYgIXRoZVNlbGVjdGlvbi5pc0VtcHR5KCkpIHsKKwkJCVJ1bm5hYmxlIHJ1bm5hYmxlID0KKwkJCQluZXcgUnVubmFibGUoKSB7CisJCQkJCXB1YmxpYyB2b2lkIHJ1bigpIHsKKwkJCQkJCS8vIFRyeSB0byBzZWxlY3QgdGhlIGl0ZW1zIGluIHRoZSBjdXJyZW50IGNvbnRlbnQgdmlld2VyIG9mIHRoZSBlZGl0b3IuCisJCQkJCQkvLworCQkJCQkJaWYgKGN1cnJlbnRWaWV3ZXIgIT0gbnVsbCkgeworCQkJCQkJCWN1cnJlbnRWaWV3ZXIuc2V0U2VsZWN0aW9uKG5ldyBTdHJ1Y3R1cmVkU2VsZWN0aW9uKHRoZVNlbGVjdGlvbi50b0FycmF5KCkpLCB0cnVlKTsKKwkJCQkJCX0KKwkJCQkJfQorCQkJCX07CisJCQlnZXRTaXRlKCkuZ2V0U2hlbGwoKS5nZXREaXNwbGF5KCkuYXN5bmNFeGVjKHJ1bm5hYmxlKTsKKwkJfQorCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyB0aGUgZWRpdGluZyBkb21haW4gYXMgcmVxdWlyZWQgYnkgdGhlIHtAbGluayBJRWRpdGluZ0RvbWFpblByb3ZpZGVyfSBpbnRlcmZhY2UuCisJICogVGhpcyBpcyBpbXBvcnRhbnQgZm9yIGltcGxlbWVudGluZyB0aGUgc3RhdGljIG1ldGhvZHMgb2Yge0BsaW5rIEFkYXB0ZXJGYWN0b3J5RWRpdGluZ0RvbWFpbn0KKwkgKiBhbmQgZm9yIHN1cHBvcnRpbmcge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmFjdGlvbi5Db21tYW5kQWN0aW9ufS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRWRpdGluZ0RvbWFpbiBnZXRFZGl0aW5nRG9tYWluKCkgeworCQlyZXR1cm4gZWRpdGluZ0RvbWFpbjsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgY2xhc3MgUmV2ZXJzZUFkYXB0ZXJGYWN0b3J5Q29udGVudFByb3ZpZGVyIGV4dGVuZHMgQWRhcHRlckZhY3RvcnlDb250ZW50UHJvdmlkZXIgeworCQlwdWJsaWMgUmV2ZXJzZUFkYXB0ZXJGYWN0b3J5Q29udGVudFByb3ZpZGVyKEFkYXB0ZXJGYWN0b3J5IGFkYXB0ZXJGYWN0b3J5KSB7CisJCQlzdXBlcihhZGFwdGVyRmFjdG9yeSk7CisJCX0KKworCQlAT3ZlcnJpZGUKKwkJcHVibGljIE9iamVjdCBbXSBnZXRFbGVtZW50cyhPYmplY3Qgb2JqZWN0KSB7CisJCQlPYmplY3QgcGFyZW50ID0gc3VwZXIuZ2V0UGFyZW50KG9iamVjdCk7CisJCQlyZXR1cm4gKHBhcmVudCA9PSBudWxsID8gQ29sbGVjdGlvbnMuRU1QVFlfU0VUIDogQ29sbGVjdGlvbnMuc2luZ2xldG9uKHBhcmVudCkpLnRvQXJyYXkoKTsKKwkJfQorCisJCUBPdmVycmlkZQorCQlwdWJsaWMgT2JqZWN0IFtdIGdldENoaWxkcmVuKE9iamVjdCBvYmplY3QpIHsKKwkJCU9iamVjdCBwYXJlbnQgPSBzdXBlci5nZXRQYXJlbnQob2JqZWN0KTsKKwkJCXJldHVybiAocGFyZW50ID09IG51bGwgPyBDb2xsZWN0aW9ucy5FTVBUWV9TRVQgOiBDb2xsZWN0aW9ucy5zaW5nbGV0b24ocGFyZW50KSkudG9BcnJheSgpOworCQl9CisKKwkJQE92ZXJyaWRlCisJCXB1YmxpYyBib29sZWFuIGhhc0NoaWxkcmVuKE9iamVjdCBvYmplY3QpIHsKKwkJCU9iamVjdCBwYXJlbnQgPSBzdXBlci5nZXRQYXJlbnQob2JqZWN0KTsKKwkJCXJldHVybiBwYXJlbnQgIT0gbnVsbDsKKwkJfQorCisJCUBPdmVycmlkZQorCQlwdWJsaWMgT2JqZWN0IGdldFBhcmVudChPYmplY3Qgb2JqZWN0KSB7CisJCQlyZXR1cm4gbnVsbDsKKwkJfQorCX0KKworCS8qKgorCSAqIFRoaXMgbWFrZXMgc3VyZSB0aGF0IG9uZSBjb250ZW50IHZpZXdlciwgZWl0aGVyIGZvciB0aGUgY3VycmVudCBwYWdlIG9yIHRoZSBvdXRsaW5lIHZpZXcsIGlmIGl0IGhhcyBmb2N1cywKKwkgKiBpcyB0aGUgY3VycmVudCBvbmUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgc2V0Q3VycmVudFZpZXdlcihWaWV3ZXIgdmlld2VyKSB7CisJCS8vIElmIGl0IGlzIGNoYW5naW5nLi4uCisJCS8vCisJCWlmIChjdXJyZW50Vmlld2VyICE9IHZpZXdlcikgeworCQkJaWYgKHNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lciA9PSBudWxsKSB7CisJCQkJLy8gQ3JlYXRlIHRoZSBsaXN0ZW5lciBvbiBkZW1hbmQuCisJCQkJLy8KKwkJCQlzZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIgPQorCQkJCQluZXcgSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcigpIHsKKwkJCQkJCS8vIFRoaXMganVzdCBub3RpZmllcyB0aG9zZSB0aGluZ3MgdGhhdCBhcmUgYWZmZWN0ZWQgYnkgdGhlIHNlY3Rpb24uCisJCQkJCQkvLworCQkJCQkJcHVibGljIHZvaWQgc2VsZWN0aW9uQ2hhbmdlZChTZWxlY3Rpb25DaGFuZ2VkRXZlbnQgc2VsZWN0aW9uQ2hhbmdlZEV2ZW50KSB7CisJCQkJCQkJc2V0U2VsZWN0aW9uKHNlbGVjdGlvbkNoYW5nZWRFdmVudC5nZXRTZWxlY3Rpb24oKSk7CisJCQkJCQl9CisJCQkJCX07CisJCQl9CisKKwkJCS8vIFN0b3AgbGlzdGVuaW5nIHRvIHRoZSBvbGQgb25lLgorCQkJLy8KKwkJCWlmIChjdXJyZW50Vmlld2VyICE9IG51bGwpIHsKKwkJCQljdXJyZW50Vmlld2VyLnJlbW92ZVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcihzZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIpOworCQkJfQorCisJCQkvLyBTdGFydCBsaXN0ZW5pbmcgdG8gdGhlIG5ldyBvbmUuCisJCQkvLworCQkJaWYgKHZpZXdlciAhPSBudWxsKSB7CisJCQkJdmlld2VyLmFkZFNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcihzZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIpOworCQkJfQorCisJCQkvLyBSZW1lbWJlciBpdC4KKwkJCS8vCisJCQljdXJyZW50Vmlld2VyID0gdmlld2VyOworCisJCQkvLyBTZXQgdGhlIGVkaXRvcnMgc2VsZWN0aW9uIGJhc2VkIG9uIHRoZSBjdXJyZW50IHZpZXdlcidzIHNlbGVjdGlvbi4KKwkJCS8vCisJCQlzZXRTZWxlY3Rpb24oY3VycmVudFZpZXdlciA9PSBudWxsID8gU3RydWN0dXJlZFNlbGVjdGlvbi5FTVBUWSA6IGN1cnJlbnRWaWV3ZXIuZ2V0U2VsZWN0aW9uKCkpOworCQl9CisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIHRoZSB2aWV3ZXIgYXMgcmVxdWlyZWQgYnkgdGhlIHtAbGluayBJVmlld2VyUHJvdmlkZXJ9IGludGVyZmFjZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVmlld2VyIGdldFZpZXdlcigpIHsKKwkJcmV0dXJuIGN1cnJlbnRWaWV3ZXI7CisJfQorCisJLyoqCisJICogVGhpcyBjcmVhdGVzIGEgY29udGV4dCBtZW51IGZvciB0aGUgdmlld2VyIGFuZCBhZGRzIGEgbGlzdGVuZXIgYXMgd2VsbCByZWdpc3RlcmluZyB0aGUgbWVudSBmb3IgZXh0ZW5zaW9uLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIGNyZWF0ZUNvbnRleHRNZW51Rm9yKFN0cnVjdHVyZWRWaWV3ZXIgdmlld2VyKSB7CisJCU1lbnVNYW5hZ2VyIGNvbnRleHRNZW51ID0gbmV3IE1lbnVNYW5hZ2VyKCIjUG9wVXAiKTsgLy8kTk9OLU5MUy0xJAorCQljb250ZXh0TWVudS5hZGQobmV3IFNlcGFyYXRvcigiYWRkaXRpb25zIikpOyAvLyROT04tTkxTLTEkCisJCWNvbnRleHRNZW51LnNldFJlbW92ZUFsbFdoZW5TaG93bih0cnVlKTsKKwkJY29udGV4dE1lbnUuYWRkTWVudUxpc3RlbmVyKHRoaXMpOworCQlNZW51IG1lbnU9IGNvbnRleHRNZW51LmNyZWF0ZUNvbnRleHRNZW51KHZpZXdlci5nZXRDb250cm9sKCkpOworCQl2aWV3ZXIuZ2V0Q29udHJvbCgpLnNldE1lbnUobWVudSk7CisJCWdldFNpdGUoKS5yZWdpc3RlckNvbnRleHRNZW51KGNvbnRleHRNZW51LCBuZXcgVW53cmFwcGluZ1NlbGVjdGlvblByb3ZpZGVyKHZpZXdlcikpOworCisJCWludCBkbmRPcGVyYXRpb25zID0gRE5ELkRST1BfQ09QWSB8IERORC5EUk9QX01PVkUgfCBETkQuRFJPUF9MSU5LOworCQlUcmFuc2ZlcltdIHRyYW5zZmVycyA9IG5ldyBUcmFuc2ZlcltdIHsgTG9jYWxUcmFuc2Zlci5nZXRJbnN0YW5jZSgpIH07CisJCXZpZXdlci5hZGREcmFnU3VwcG9ydChkbmRPcGVyYXRpb25zLCB0cmFuc2ZlcnMsIG5ldyBWaWV3ZXJEcmFnQWRhcHRlcih2aWV3ZXIpKTsKKwkJdmlld2VyLmFkZERyb3BTdXBwb3J0KGRuZE9wZXJhdGlvbnMsIHRyYW5zZmVycywgbmV3IEVkaXRpbmdEb21haW5WaWV3ZXJEcm9wQWRhcHRlcihlZGl0aW5nRG9tYWluLCB2aWV3ZXIpKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGlzIHRoZSBtZXRob2QgY2FsbGVkIHRvIGxvYWQgYSByZXNvdXJjZSBpbnRvIHRoZSBlZGl0aW5nIGRvbWFpbidzIHJlc291cmNlIHNldCBiYXNlZCBvbiB0aGUgZWRpdG9yJ3MgaW5wdXQuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgY3JlYXRlTW9kZWwoKSB7CisJCVVSSSByZXNvdXJjZVVSSSA9IEVkaXRVSVV0aWwuZ2V0VVJJKGdldEVkaXRvcklucHV0KCkpOworCQlFeGNlcHRpb24gZXhjZXB0aW9uID0gbnVsbDsKKwkJUmVzb3VyY2UgcmVzb3VyY2UgPSBudWxsOworCQl0cnkgeworCQkJLy8gTG9hZCB0aGUgcmVzb3VyY2UgdGhyb3VnaCB0aGUgZWRpdGluZyBkb21haW4uCisJCQkvLworCQkJcmVzb3VyY2UgPSBlZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkuZ2V0UmVzb3VyY2UocmVzb3VyY2VVUkksIHRydWUpOworCQl9CisJCWNhdGNoIChFeGNlcHRpb24gZSkgeworCQkJZXhjZXB0aW9uID0gZTsKKwkJCXJlc291cmNlID0gZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpLmdldFJlc291cmNlKHJlc291cmNlVVJJLCBmYWxzZSk7CisJCX0KKworCQlEaWFnbm9zdGljIGRpYWdub3N0aWMgPSBhbmFseXplUmVzb3VyY2VQcm9ibGVtcyhyZXNvdXJjZSwgZXhjZXB0aW9uKTsKKwkJaWYgKGRpYWdub3N0aWMuZ2V0U2V2ZXJpdHkoKSAhPSBEaWFnbm9zdGljLk9LKSB7CisJCQlyZXNvdXJjZVRvRGlhZ25vc3RpY01hcC5wdXQocmVzb3VyY2UsICBhbmFseXplUmVzb3VyY2VQcm9ibGVtcyhyZXNvdXJjZSwgZXhjZXB0aW9uKSk7CisJCX0KKwkJZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpLmVBZGFwdGVycygpLmFkZChwcm9ibGVtSW5kaWNhdGlvbkFkYXB0ZXIpOworCX0KKworCS8qKgorCSAqIFJldHVybnMgYSBkaWFnbm9zdGljIGRlc2NyaWJpbmcgdGhlIGVycm9ycyBhbmQgd2FybmluZ3MgbGlzdGVkIGluIHRoZSByZXNvdXJjZQorCSAqIGFuZCB0aGUgc3BlY2lmaWVkIGV4Y2VwdGlvbiAoaWYgYW55KS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRGlhZ25vc3RpYyBhbmFseXplUmVzb3VyY2VQcm9ibGVtcyhSZXNvdXJjZSByZXNvdXJjZSwgRXhjZXB0aW9uIGV4Y2VwdGlvbikgeworCQlpZiAoIXJlc291cmNlLmdldEVycm9ycygpLmlzRW1wdHkoKSB8fCAhcmVzb3VyY2UuZ2V0V2FybmluZ3MoKS5pc0VtcHR5KCkpIHsKKwkJCUJhc2ljRGlhZ25vc3RpYyBiYXNpY0RpYWdub3N0aWMgPQorCQkJCW5ldyBCYXNpY0RpYWdub3N0aWMKKwkJCQkJKERpYWdub3N0aWMuRVJST1IsCisJCQkJCSAib3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucyIsIC8vJE5PTi1OTFMtMSQKKwkJCQkJIDAsCisJCQkJCSBnZXRTdHJpbmcoIl9VSV9DcmVhdGVNb2RlbEVycm9yX21lc3NhZ2UiLCByZXNvdXJjZS5nZXRVUkkoKSksIC8vJE5PTi1OTFMtMSQKKwkJCQkJIG5ldyBPYmplY3QgW10geyBleGNlcHRpb24gPT0gbnVsbCA/IChPYmplY3QpcmVzb3VyY2UgOiBleGNlcHRpb24gfSk7CisJCQliYXNpY0RpYWdub3N0aWMubWVyZ2UoRWNvcmVVdGlsLmNvbXB1dGVEaWFnbm9zdGljKHJlc291cmNlLCB0cnVlKSk7CisJCQlyZXR1cm4gYmFzaWNEaWFnbm9zdGljOworCQl9CisJCWVsc2UgaWYgKGV4Y2VwdGlvbiAhPSBudWxsKSB7CisJCQlyZXR1cm4KKwkJCQluZXcgQmFzaWNEaWFnbm9zdGljCisJCQkJCShEaWFnbm9zdGljLkVSUk9SLAorCQkJCQkgIm9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMiLCAvLyROT04tTkxTLTEkCisJCQkJCSAwLAorCQkJCQkgZ2V0U3RyaW5nKCJfVUlfQ3JlYXRlTW9kZWxFcnJvcl9tZXNzYWdlIiwgcmVzb3VyY2UuZ2V0VVJJKCkpLCAvLyROT04tTkxTLTEkCisJCQkJCSBuZXcgT2JqZWN0W10geyBleGNlcHRpb24gfSk7CisJCX0KKwkJZWxzZSB7CisJCQlyZXR1cm4gRGlhZ25vc3RpYy5PS19JTlNUQU5DRTsKKwkJfQorCX0KKworCS8qKgorCSAqIFRoaXMgaXMgdGhlIG1ldGhvZCB1c2VkIGJ5IHRoZSBmcmFtZXdvcmsgdG8gaW5zdGFsbCB5b3VyIG93biBjb250cm9scy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBjcmVhdGVQYWdlcygpIHsKKwkJLy8gQ3JlYXRlcyB0aGUgbW9kZWwgZnJvbSB0aGUgZWRpdG9yIGlucHV0CisJCS8vCisJCWNyZWF0ZU1vZGVsKCk7CisKKwkJLy8gT25seSBjcmVhdGVzIHRoZSBvdGhlciBwYWdlcyBpZiB0aGVyZSBpcyBzb21ldGhpbmcgdGhhdCBjYW4gYmUgZWRpdGVkCisJCS8vCisJCWlmICghZ2V0RWRpdGluZ0RvbWFpbigpLmdldFJlc291cmNlU2V0KCkuZ2V0UmVzb3VyY2VzKCkuaXNFbXB0eSgpKSB7CisJCQkvLyBDcmVhdGUgYSBwYWdlIGZvciB0aGUgc2VsZWN0aW9uIHRyZWUgdmlldy4KKwkJCS8vCisJCQlUcmVlIHRyZWUgPSBuZXcgVHJlZShnZXRDb250YWluZXIoKSwgU1dULk1VTFRJKTsKKwkJCXNlbGVjdGlvblZpZXdlciA9IG5ldyBUcmVlVmlld2VyKHRyZWUpOworCQkJc2V0Q3VycmVudFZpZXdlcihzZWxlY3Rpb25WaWV3ZXIpOworCisJCQlzZWxlY3Rpb25WaWV3ZXIuc2V0Q29udGVudFByb3ZpZGVyKG5ldyBBZGFwdGVyRmFjdG9yeUNvbnRlbnRQcm92aWRlcihhZGFwdGVyRmFjdG9yeSkpOworCQkJc2VsZWN0aW9uVmlld2VyLnNldExhYmVsUHJvdmlkZXIobmV3IEFkYXB0ZXJGYWN0b3J5TGFiZWxQcm92aWRlcihhZGFwdGVyRmFjdG9yeSkpOworCQkJc2VsZWN0aW9uVmlld2VyLnNldElucHV0KGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKSk7CisJCQlzZWxlY3Rpb25WaWV3ZXIuc2V0U2VsZWN0aW9uKG5ldyBTdHJ1Y3R1cmVkU2VsZWN0aW9uKGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKS5nZXRSZXNvdXJjZXMoKS5nZXQoMCkpLCB0cnVlKTsKKworCQkJbmV3IEFkYXB0ZXJGYWN0b3J5VHJlZUVkaXRvcihzZWxlY3Rpb25WaWV3ZXIuZ2V0VHJlZSgpLCBhZGFwdGVyRmFjdG9yeSk7CisKKwkJCWNyZWF0ZUNvbnRleHRNZW51Rm9yKHNlbGVjdGlvblZpZXdlcik7CisJCQlpbnQgcGFnZUluZGV4ID0gYWRkUGFnZSh0cmVlKTsKKwkJCXNldFBhZ2VUZXh0KHBhZ2VJbmRleCwgZ2V0U3RyaW5nKCJfVUlfU2VsZWN0aW9uUGFnZV9sYWJlbCIpKTsgLy8kTk9OLU5MUy0xJAorCisJCQlnZXRTaXRlKCkuZ2V0U2hlbGwoKS5nZXREaXNwbGF5KCkuYXN5bmNFeGVjCisJCQkJKG5ldyBSdW5uYWJsZSgpIHsKKwkJCQkJIHB1YmxpYyB2b2lkIHJ1bigpIHsKKwkJCQkJCSBzZXRBY3RpdmVQYWdlKDApOworCQkJCQkgfQorCQkJCSB9KTsKKwkJfQorCisJCS8vIEVuc3VyZXMgdGhhdCB0aGlzIGVkaXRvciB3aWxsIG9ubHkgZGlzcGxheSB0aGUgcGFnZSdzIHRhYgorCQkvLyBhcmVhIGlmIHRoZXJlIGFyZSBtb3JlIHRoYW4gb25lIHBhZ2UKKwkJLy8KKwkJZ2V0Q29udGFpbmVyKCkuYWRkQ29udHJvbExpc3RlbmVyCisJCQkobmV3IENvbnRyb2xBZGFwdGVyKCkgeworCQkJCWJvb2xlYW4gZ3VhcmQgPSBmYWxzZTsKKwkJCQlAT3ZlcnJpZGUKKwkJCQlwdWJsaWMgdm9pZCBjb250cm9sUmVzaXplZChDb250cm9sRXZlbnQgZXZlbnQpIHsKKwkJCQkJaWYgKCFndWFyZCkgeworCQkJCQkJZ3VhcmQgPSB0cnVlOworCQkJCQkJaGlkZVRhYnMoKTsKKwkJCQkJCWd1YXJkID0gZmFsc2U7CisJCQkJCX0KKwkJCQl9CisJCQkgfSk7CisKKwkJZ2V0U2l0ZSgpLmdldFNoZWxsKCkuZ2V0RGlzcGxheSgpLmFzeW5jRXhlYworCQkJKG5ldyBSdW5uYWJsZSgpIHsKKwkJCQkgcHVibGljIHZvaWQgcnVuKCkgeworCQkJCQkgdXBkYXRlUHJvYmxlbUluZGljYXRpb24oKTsKKwkJCQkgfQorCQkJIH0pOworCX0KKworCS8qKgorCSAqIElmIHRoZXJlIGlzIGp1c3Qgb25lIHBhZ2UgaW4gdGhlIG11bHRpLXBhZ2UgZWRpdG9yIHBhcnQsCisJICogdGhpcyBoaWRlcyB0aGUgc2luZ2xlIHRhYiBhdCB0aGUgYm90dG9tLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIGhpZGVUYWJzKCkgeworCQlpZiAoZ2V0UGFnZUNvdW50KCkgPD0gMSkgeworCQkJc2V0UGFnZVRleHQoMCwgIiIpOyAvLyROT04tTkxTLTEkCisJCQlpZiAoZ2V0Q29udGFpbmVyKCkgaW5zdGFuY2VvZiBDVGFiRm9sZGVyKSB7CisJCQkJKChDVGFiRm9sZGVyKWdldENvbnRhaW5lcigpKS5zZXRUYWJIZWlnaHQoMSk7CisJCQkJUG9pbnQgcG9pbnQgPSBnZXRDb250YWluZXIoKS5nZXRTaXplKCk7CisJCQkJZ2V0Q29udGFpbmVyKCkuc2V0U2l6ZShwb2ludC54LCBwb2ludC55ICsgNik7CisJCQl9CisJCX0KKwl9CisKKwkvKioKKwkgKiBJZiB0aGVyZSBpcyBtb3JlIHRoYW4gb25lIHBhZ2UgaW4gdGhlIG11bHRpLXBhZ2UgZWRpdG9yIHBhcnQsCisJICogdGhpcyBzaG93cyB0aGUgdGFicyBhdCB0aGUgYm90dG9tLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIHNob3dUYWJzKCkgeworCQlpZiAoZ2V0UGFnZUNvdW50KCkgPiAxKSB7CisJCQlzZXRQYWdlVGV4dCgwLCBnZXRTdHJpbmcoIl9VSV9TZWxlY3Rpb25QYWdlX2xhYmVsIikpOyAvLyROT04tTkxTLTEkCisJCQlpZiAoZ2V0Q29udGFpbmVyKCkgaW5zdGFuY2VvZiBDVGFiRm9sZGVyKSB7CisJCQkJKChDVGFiRm9sZGVyKWdldENvbnRhaW5lcigpKS5zZXRUYWJIZWlnaHQoU1dULkRFRkFVTFQpOworCQkJCVBvaW50IHBvaW50ID0gZ2V0Q29udGFpbmVyKCkuZ2V0U2l6ZSgpOworCQkJCWdldENvbnRhaW5lcigpLnNldFNpemUocG9pbnQueCwgcG9pbnQueSAtIDYpOworCQkJfQorCQl9CisJfQorCisJLyoqCisJICogVGhpcyBpcyB1c2VkIHRvIHRyYWNrIHRoZSBhY3RpdmUgdmlld2VyLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIHBhZ2VDaGFuZ2UoaW50IHBhZ2VJbmRleCkgeworCQlzdXBlci5wYWdlQ2hhbmdlKHBhZ2VJbmRleCk7CisKKwkJaWYgKGNvbnRlbnRPdXRsaW5lUGFnZSAhPSBudWxsKSB7CisJCQloYW5kbGVDb250ZW50T3V0bGluZVNlbGVjdGlvbihjb250ZW50T3V0bGluZVBhZ2UuZ2V0U2VsZWN0aW9uKCkpOworCQl9CisJfQorCisJLyoqCisJICogVGhpcyBpcyBob3cgdGhlIGZyYW1ld29yayBkZXRlcm1pbmVzIHdoaWNoIGludGVyZmFjZXMgd2UgaW1wbGVtZW50LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBTdXBwcmVzc1dhcm5pbmdzKCJ1bmNoZWNrZWQiKQorCQlAT3ZlcnJpZGUKKwlwdWJsaWMgT2JqZWN0IGdldEFkYXB0ZXIoQ2xhc3Mga2V5KSB7CisJCWlmIChrZXkuZXF1YWxzKElDb250ZW50T3V0bGluZVBhZ2UuY2xhc3MpKSB7CisJCQlyZXR1cm4gc2hvd091dGxpbmVWaWV3KCkgPyBnZXRDb250ZW50T3V0bGluZVBhZ2UoKSA6IG51bGw7CisJCX0KKwkJZWxzZSBpZiAoa2V5LmVxdWFscyhJUHJvcGVydHlTaGVldFBhZ2UuY2xhc3MpKSB7CisJCQlyZXR1cm4gZ2V0UHJvcGVydHlTaGVldFBhZ2UoKTsKKwkJfQorCQllbHNlIGlmIChrZXkuZXF1YWxzKElHb3RvTWFya2VyLmNsYXNzKSkgeworCQkJcmV0dXJuIHRoaXM7CisJCX0KKwkJZWxzZSB7CisJCQlyZXR1cm4gc3VwZXIuZ2V0QWRhcHRlcihrZXkpOworCQl9CisJfQorCisJLyoqCisJICogVGhpcyBhY2Nlc3NlcyBhIGNhY2hlZCB2ZXJzaW9uIG9mIHRoZSBjb250ZW50IG91dGxpbmVyLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBJQ29udGVudE91dGxpbmVQYWdlIGdldENvbnRlbnRPdXRsaW5lUGFnZSgpIHsKKwkJaWYgKGNvbnRlbnRPdXRsaW5lUGFnZSA9PSBudWxsKSB7CisJCQkvLyBUaGUgY29udGVudCBvdXRsaW5lIGlzIGp1c3QgYSB0cmVlLgorCQkJLy8KKwkJCWNsYXNzIE15Q29udGVudE91dGxpbmVQYWdlIGV4dGVuZHMgQ29udGVudE91dGxpbmVQYWdlIHsKKwkJCQlAT3ZlcnJpZGUKKwkJCQlwdWJsaWMgdm9pZCBjcmVhdGVDb250cm9sKENvbXBvc2l0ZSBwYXJlbnQpIHsKKwkJCQkJc3VwZXIuY3JlYXRlQ29udHJvbChwYXJlbnQpOworCQkJCQljb250ZW50T3V0bGluZVZpZXdlciA9IGdldFRyZWVWaWV3ZXIoKTsKKwkJCQkJY29udGVudE91dGxpbmVWaWV3ZXIuYWRkU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyKHRoaXMpOworCisJCQkJCS8vIFNldCB1cCB0aGUgdHJlZSB2aWV3ZXIuCisJCQkJCS8vCisJCQkJCWNvbnRlbnRPdXRsaW5lVmlld2VyLnNldENvbnRlbnRQcm92aWRlcihuZXcgQWRhcHRlckZhY3RvcnlDb250ZW50UHJvdmlkZXIoYWRhcHRlckZhY3RvcnkpKTsKKwkJCQkJY29udGVudE91dGxpbmVWaWV3ZXIuc2V0TGFiZWxQcm92aWRlcihuZXcgQWRhcHRlckZhY3RvcnlMYWJlbFByb3ZpZGVyKGFkYXB0ZXJGYWN0b3J5KSk7CisJCQkJCWNvbnRlbnRPdXRsaW5lVmlld2VyLnNldElucHV0KGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKSk7CisKKwkJCQkJLy8gTWFrZSBzdXJlIG91ciBwb3B1cHMgd29yay4KKwkJCQkJLy8KKwkJCQkJY3JlYXRlQ29udGV4dE1lbnVGb3IoY29udGVudE91dGxpbmVWaWV3ZXIpOworCisJCQkJCWlmICghZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpLmdldFJlc291cmNlcygpLmlzRW1wdHkoKSkgeworCQkJCQkgIC8vIFNlbGVjdCB0aGUgcm9vdCBvYmplY3QgaW4gdGhlIHZpZXcuCisJCQkJCSAgLy8KKwkJCQkJICBjb250ZW50T3V0bGluZVZpZXdlci5zZXRTZWxlY3Rpb24obmV3IFN0cnVjdHVyZWRTZWxlY3Rpb24oZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpLmdldFJlc291cmNlcygpLmdldCgwKSksIHRydWUpOworCQkJCQl9CisJCQkJfQorCisJCQkJQE92ZXJyaWRlCisJCQkJcHVibGljIHZvaWQgbWFrZUNvbnRyaWJ1dGlvbnMoSU1lbnVNYW5hZ2VyIG1lbnVNYW5hZ2VyLCBJVG9vbEJhck1hbmFnZXIgdG9vbEJhck1hbmFnZXIsIElTdGF0dXNMaW5lTWFuYWdlciBzdGF0dXNMaW5lTWFuYWdlcikgeworCQkJCQlzdXBlci5tYWtlQ29udHJpYnV0aW9ucyhtZW51TWFuYWdlciwgdG9vbEJhck1hbmFnZXIsIHN0YXR1c0xpbmVNYW5hZ2VyKTsKKwkJCQkJY29udGVudE91dGxpbmVTdGF0dXNMaW5lTWFuYWdlciA9IHN0YXR1c0xpbmVNYW5hZ2VyOworCQkJCX0KKworCQkJCUBPdmVycmlkZQorCQkJCXB1YmxpYyB2b2lkIHNldEFjdGlvbkJhcnMoSUFjdGlvbkJhcnMgYWN0aW9uQmFycykgeworCQkJCQlzdXBlci5zZXRBY3Rpb25CYXJzKGFjdGlvbkJhcnMpOworCQkJCQlnZXRBY3Rpb25CYXJDb250cmlidXRvcigpLnNoYXJlR2xvYmFsQWN0aW9ucyh0aGlzLCBhY3Rpb25CYXJzKTsKKwkJCQl9CisJCQl9CisKKwkJCWNvbnRlbnRPdXRsaW5lUGFnZSA9IG5ldyBNeUNvbnRlbnRPdXRsaW5lUGFnZSgpOworCisJCQkvLyBMaXN0ZW4gdG8gc2VsZWN0aW9uIHNvIHRoYXQgd2UgY2FuIGhhbmRsZSBpdCBpcyBhIHNwZWNpYWwgd2F5LgorCQkJLy8KKwkJCWNvbnRlbnRPdXRsaW5lUGFnZS5hZGRTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIKKwkJCQkobmV3IElTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIoKSB7CisJCQkJCSAvLyBUaGlzIGVuc3VyZXMgdGhhdCB3ZSBoYW5kbGUgc2VsZWN0aW9ucyBjb3JyZWN0bHkuCisJCQkJCSAvLworCQkJCQkgcHVibGljIHZvaWQgc2VsZWN0aW9uQ2hhbmdlZChTZWxlY3Rpb25DaGFuZ2VkRXZlbnQgZXZlbnQpIHsKKwkJCQkJCSBoYW5kbGVDb250ZW50T3V0bGluZVNlbGVjdGlvbihldmVudC5nZXRTZWxlY3Rpb24oKSk7CisJCQkJCSB9CisJCQkJIH0pOworCQl9CisKKwkJcmV0dXJuIGNvbnRlbnRPdXRsaW5lUGFnZTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFjY2Vzc2VzIGEgY2FjaGVkIHZlcnNpb24gb2YgdGhlIHByb3BlcnR5IHNoZWV0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBJUHJvcGVydHlTaGVldFBhZ2UgZ2V0UHJvcGVydHlTaGVldFBhZ2UoKSB7CisJCWlmIChwcm9wZXJ0eVNoZWV0UGFnZSA9PSBudWxsKSB7CisJCQlwcm9wZXJ0eVNoZWV0UGFnZSA9CisJCQkJbmV3IEV4dGVuZGVkUHJvcGVydHlTaGVldFBhZ2UoZWRpdGluZ0RvbWFpbikgeworCQkJCQlAT3ZlcnJpZGUKKwkJCQkJcHVibGljIHZvaWQgc2V0U2VsZWN0aW9uVG9WaWV3ZXIoTGlzdDw/PiBzZWxlY3Rpb24pIHsKKwkJCQkJCU5vZGVzRWRpdG9yLnRoaXMuc2V0U2VsZWN0aW9uVG9WaWV3ZXIoc2VsZWN0aW9uKTsKKwkJCQkJCU5vZGVzRWRpdG9yLnRoaXMuc2V0Rm9jdXMoKTsKKwkJCQkJfQorCisJCQkJCUBPdmVycmlkZQorCQkJCQlwdWJsaWMgdm9pZCBzZXRBY3Rpb25CYXJzKElBY3Rpb25CYXJzIGFjdGlvbkJhcnMpIHsKKwkJCQkJCXN1cGVyLnNldEFjdGlvbkJhcnMoYWN0aW9uQmFycyk7CisJCQkJCQlnZXRBY3Rpb25CYXJDb250cmlidXRvcigpLnNoYXJlR2xvYmFsQWN0aW9ucyh0aGlzLCBhY3Rpb25CYXJzKTsKKwkJCQkJfQorCQkJCX07CisJCQlwcm9wZXJ0eVNoZWV0UGFnZS5zZXRQcm9wZXJ0eVNvdXJjZVByb3ZpZGVyKG5ldyBBZGFwdGVyRmFjdG9yeUNvbnRlbnRQcm92aWRlcihhZGFwdGVyRmFjdG9yeSkpOworCQl9CisKKwkJcmV0dXJuIHByb3BlcnR5U2hlZXRQYWdlOworCX0KKworCS8qKgorCSAqIFRoaXMgZGVhbHMgd2l0aCBob3cgd2Ugd2FudCBzZWxlY3Rpb24gaW4gdGhlIG91dGxpbmVyIHRvIGFmZmVjdCB0aGUgb3RoZXIgdmlld3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgaGFuZGxlQ29udGVudE91dGxpbmVTZWxlY3Rpb24oSVNlbGVjdGlvbiBzZWxlY3Rpb24pIHsKKwkJaWYgKHNlbGVjdGlvblZpZXdlciAhPSBudWxsICYmICFzZWxlY3Rpb24uaXNFbXB0eSgpICYmIHNlbGVjdGlvbiBpbnN0YW5jZW9mIElTdHJ1Y3R1cmVkU2VsZWN0aW9uKSB7CisJCQlJdGVyYXRvcjw/PiBzZWxlY3RlZEVsZW1lbnRzID0gKChJU3RydWN0dXJlZFNlbGVjdGlvbilzZWxlY3Rpb24pLml0ZXJhdG9yKCk7CisJCQlpZiAoc2VsZWN0ZWRFbGVtZW50cy5oYXNOZXh0KCkpIHsKKwkJCQkvLyBHZXQgdGhlIGZpcnN0IHNlbGVjdGVkIGVsZW1lbnQuCisJCQkJLy8KKwkJCQlPYmplY3Qgc2VsZWN0ZWRFbGVtZW50ID0gc2VsZWN0ZWRFbGVtZW50cy5uZXh0KCk7CisKKwkJCQlBcnJheUxpc3Q8T2JqZWN0PiBzZWxlY3Rpb25MaXN0ID0gbmV3IEFycmF5TGlzdDxPYmplY3Q+KCk7CisJCQkJc2VsZWN0aW9uTGlzdC5hZGQoc2VsZWN0ZWRFbGVtZW50KTsKKwkJCQl3aGlsZSAoc2VsZWN0ZWRFbGVtZW50cy5oYXNOZXh0KCkpIHsKKwkJCQkJc2VsZWN0aW9uTGlzdC5hZGQoc2VsZWN0ZWRFbGVtZW50cy5uZXh0KCkpOworCQkJCX0KKworCQkJCS8vIFNldCB0aGUgc2VsZWN0aW9uIHRvIHRoZSB3aWRnZXQuCisJCQkJLy8KKwkJCQlzZWxlY3Rpb25WaWV3ZXIuc2V0U2VsZWN0aW9uKG5ldyBTdHJ1Y3R1cmVkU2VsZWN0aW9uKHNlbGVjdGlvbkxpc3QpKTsKKwkJCX0KKwkJfQorCX0KKworCS8qKgorCSAqIFRoaXMgaXMgZm9yIGltcGxlbWVudGluZyB7QGxpbmsgSUVkaXRvclBhcnR9IGFuZCBzaW1wbHkgdGVzdHMgdGhlIGNvbW1hbmQgc3RhY2suCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIGJvb2xlYW4gaXNEaXJ0eSgpIHsKKwkJcmV0dXJuICgoQmFzaWNDb21tYW5kU3RhY2spZWRpdGluZ0RvbWFpbi5nZXRDb21tYW5kU3RhY2soKSkuaXNTYXZlTmVlZGVkKCk7CisJfQorCisJLyoqCisJICogVGhpcyBpcyBmb3IgaW1wbGVtZW50aW5nIHtAbGluayBJRWRpdG9yUGFydH0gYW5kIHNpbXBseSBzYXZlcyB0aGUgbW9kZWwgZmlsZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBkb1NhdmUoSVByb2dyZXNzTW9uaXRvciBwcm9ncmVzc01vbml0b3IpIHsKKwkJLy8gU2F2ZSBvbmx5IHJlc291cmNlcyB0aGF0IGhhdmUgYWN0dWFsbHkgY2hhbmdlZC4KKwkJLy8KKwkJZmluYWwgTWFwPE9iamVjdCwgT2JqZWN0PiBzYXZlT3B0aW9ucyA9IG5ldyBIYXNoTWFwPE9iamVjdCwgT2JqZWN0PigpOworCQlzYXZlT3B0aW9ucy5wdXQoUmVzb3VyY2UuT1BUSU9OX1NBVkVfT05MWV9JRl9DSEFOR0VELCBSZXNvdXJjZS5PUFRJT05fU0FWRV9PTkxZX0lGX0NIQU5HRURfTUVNT1JZX0JVRkZFUik7CisKKwkJLy8gRG8gdGhlIHdvcmsgd2l0aGluIGFuIG9wZXJhdGlvbiBiZWNhdXNlIHRoaXMgaXMgYSBsb25nIHJ1bm5pbmcgYWN0aXZpdHkgdGhhdCBtb2RpZmllcyB0aGUgd29ya2JlbmNoLgorCQkvLworCQlXb3Jrc3BhY2VNb2RpZnlPcGVyYXRpb24gb3BlcmF0aW9uID0KKwkJCW5ldyBXb3Jrc3BhY2VNb2RpZnlPcGVyYXRpb24oKSB7CisJCQkJLy8gVGhpcyBpcyB0aGUgbWV0aG9kIHRoYXQgZ2V0cyBpbnZva2VkIHdoZW4gdGhlIG9wZXJhdGlvbiBydW5zLgorCQkJCS8vCisJCQkJQE92ZXJyaWRlCisJCQkJcHVibGljIHZvaWQgZXhlY3V0ZShJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IpIHsKKwkJCQkJLy8gU2F2ZSB0aGUgcmVzb3VyY2VzIHRvIHRoZSBmaWxlIHN5c3RlbS4KKwkJCQkJLy8KKwkJCQkJYm9vbGVhbiBmaXJzdCA9IHRydWU7CisJCQkJCWZvciAoUmVzb3VyY2UgcmVzb3VyY2UgOiBlZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkuZ2V0UmVzb3VyY2VzKCkpIHsKKwkJCQkJCWlmICgoZmlyc3QgfHwgIXJlc291cmNlLmdldENvbnRlbnRzKCkuaXNFbXB0eSgpIHx8IGlzUGVyc2lzdGVkKHJlc291cmNlKSkgJiYgIWVkaXRpbmdEb21haW4uaXNSZWFkT25seShyZXNvdXJjZSkpIHsKKwkJCQkJCQl0cnkgeworCQkJCQkJCQlsb25nIHRpbWVTdGFtcCA9IHJlc291cmNlLmdldFRpbWVTdGFtcCgpOworCQkJCQkJCQlyZXNvdXJjZS5zYXZlKHNhdmVPcHRpb25zKTsKKwkJCQkJCQkJaWYgKHJlc291cmNlLmdldFRpbWVTdGFtcCgpICE9IHRpbWVTdGFtcCkgeworCQkJCQkJCQkJc2F2ZWRSZXNvdXJjZXMuYWRkKHJlc291cmNlKTsKKwkJCQkJCQkJfQorCQkJCQkJCX0KKwkJCQkJCQljYXRjaCAoRXhjZXB0aW9uIGV4Y2VwdGlvbikgeworCQkJCQkJCQlyZXNvdXJjZVRvRGlhZ25vc3RpY01hcC5wdXQocmVzb3VyY2UsIGFuYWx5emVSZXNvdXJjZVByb2JsZW1zKHJlc291cmNlLCBleGNlcHRpb24pKTsKKwkJCQkJCQl9CisJCQkJCQkJZmlyc3QgPSBmYWxzZTsKKwkJCQkJCX0KKwkJCQkJfQorCQkJCX0KKwkJCX07CisKKwkJdXBkYXRlUHJvYmxlbUluZGljYXRpb24gPSBmYWxzZTsKKwkJdHJ5IHsKKwkJCS8vIFRoaXMgcnVucyB0aGUgb3B0aW9ucywgYW5kIHNob3dzIHByb2dyZXNzLgorCQkJLy8KKwkJCW5ldyBQcm9ncmVzc01vbml0b3JEaWFsb2coZ2V0U2l0ZSgpLmdldFNoZWxsKCkpLnJ1bih0cnVlLCBmYWxzZSwgb3BlcmF0aW9uKTsKKworCQkJLy8gUmVmcmVzaCB0aGUgbmVjZXNzYXJ5IHN0YXRlLgorCQkJLy8KKwkJCSgoQmFzaWNDb21tYW5kU3RhY2spZWRpdGluZ0RvbWFpbi5nZXRDb21tYW5kU3RhY2soKSkuc2F2ZUlzRG9uZSgpOworCQkJZmlyZVByb3BlcnR5Q2hhbmdlKElFZGl0b3JQYXJ0LlBST1BfRElSVFkpOworCQl9CisJCWNhdGNoIChFeGNlcHRpb24gZXhjZXB0aW9uKSB7CisJCQkvLyBTb21ldGhpbmcgd2VudCB3cm9uZyB0aGF0IHNob3VsZG4ndC4KKwkJCS8vCisJCQlEZWZpbml0aW9uc0VkaXRQbHVnaW4uSU5TVEFOQ0UubG9nKGV4Y2VwdGlvbik7CisJCX0KKwkJdXBkYXRlUHJvYmxlbUluZGljYXRpb24gPSB0cnVlOworCQl1cGRhdGVQcm9ibGVtSW5kaWNhdGlvbigpOworCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyB3aGV0aGVyIHNvbWV0aGluZyBoYXMgYmVlbiBwZXJzaXN0ZWQgdG8gdGhlIFVSSSBvZiB0aGUgc3BlY2lmaWVkIHJlc291cmNlLgorCSAqIFRoZSBpbXBsZW1lbnRhdGlvbiB1c2VzIHRoZSBVUkkgY29udmVydGVyIGZyb20gdGhlIGVkaXRvcidzIHJlc291cmNlIHNldCB0byB0cnkgdG8gb3BlbiBhbiBpbnB1dCBzdHJlYW0uIAorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBib29sZWFuIGlzUGVyc2lzdGVkKFJlc291cmNlIHJlc291cmNlKSB7CisJCWJvb2xlYW4gcmVzdWx0ID0gZmFsc2U7CisJCXRyeSB7CisJCQlJbnB1dFN0cmVhbSBzdHJlYW0gPSBlZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkuZ2V0VVJJQ29udmVydGVyKCkuY3JlYXRlSW5wdXRTdHJlYW0ocmVzb3VyY2UuZ2V0VVJJKCkpOworCQkJaWYgKHN0cmVhbSAhPSBudWxsKSB7CisJCQkJcmVzdWx0ID0gdHJ1ZTsKKwkJCQlzdHJlYW0uY2xvc2UoKTsKKwkJCX0KKwkJfQorCQljYXRjaCAoSU9FeGNlcHRpb24gZSkgeworCQkJLy8gSWdub3JlCisJCX0KKwkJcmV0dXJuIHJlc3VsdDsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFsd2F5cyByZXR1cm5zIHRydWUgYmVjYXVzZSBpdCBpcyBub3QgY3VycmVudGx5IHN1cHBvcnRlZC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgYm9vbGVhbiBpc1NhdmVBc0FsbG93ZWQoKSB7CisJCXJldHVybiB0cnVlOworCX0KKworCS8qKgorCSAqIFRoaXMgYWxzbyBjaGFuZ2VzIHRoZSBlZGl0b3IncyBpbnB1dC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBkb1NhdmVBcygpIHsKKwkJU2F2ZUFzRGlhbG9nIHNhdmVBc0RpYWxvZyA9IG5ldyBTYXZlQXNEaWFsb2coZ2V0U2l0ZSgpLmdldFNoZWxsKCkpOworCQlzYXZlQXNEaWFsb2cub3BlbigpOworCQlJUGF0aCBwYXRoID0gc2F2ZUFzRGlhbG9nLmdldFJlc3VsdCgpOworCQlpZiAocGF0aCAhPSBudWxsKSB7CisJCQlJRmlsZSBmaWxlID0gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmdldFJvb3QoKS5nZXRGaWxlKHBhdGgpOworCQkJaWYgKGZpbGUgIT0gbnVsbCkgeworCQkJCWRvU2F2ZUFzKFVSSS5jcmVhdGVQbGF0Zm9ybVJlc291cmNlVVJJKGZpbGUuZ2V0RnVsbFBhdGgoKS50b1N0cmluZygpLCB0cnVlKSwgbmV3IEZpbGVFZGl0b3JJbnB1dChmaWxlKSk7CisJCQl9CisJCX0KKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBkb1NhdmVBcyhVUkkgdXJpLCBJRWRpdG9ySW5wdXQgZWRpdG9ySW5wdXQpIHsKKwkJKGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKS5nZXRSZXNvdXJjZXMoKS5nZXQoMCkpLnNldFVSSSh1cmkpOworCQlzZXRJbnB1dFdpdGhOb3RpZnkoZWRpdG9ySW5wdXQpOworCQlzZXRQYXJ0TmFtZShlZGl0b3JJbnB1dC5nZXROYW1lKCkpOworCQlJUHJvZ3Jlc3NNb25pdG9yIHByb2dyZXNzTW9uaXRvciA9CisJCQlnZXRBY3Rpb25CYXJzKCkuZ2V0U3RhdHVzTGluZU1hbmFnZXIoKSAhPSBudWxsID8KKwkJCQlnZXRBY3Rpb25CYXJzKCkuZ2V0U3RhdHVzTGluZU1hbmFnZXIoKS5nZXRQcm9ncmVzc01vbml0b3IoKSA6CisJCQkJbmV3IE51bGxQcm9ncmVzc01vbml0b3IoKTsKKwkJZG9TYXZlKHByb2dyZXNzTW9uaXRvcik7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgZ290b01hcmtlcihJTWFya2VyIG1hcmtlcikgeworCQl0cnkgeworCQkJaWYgKG1hcmtlci5nZXRUeXBlKCkuZXF1YWxzKEVWYWxpZGF0b3IuTUFSS0VSKSkgeworCQkJCVN0cmluZyB1cmlBdHRyaWJ1dGUgPSBtYXJrZXIuZ2V0QXR0cmlidXRlKEVWYWxpZGF0b3IuVVJJX0FUVFJJQlVURSwgbnVsbCk7CisJCQkJaWYgKHVyaUF0dHJpYnV0ZSAhPSBudWxsKSB7CisJCQkJCVVSSSB1cmkgPSBVUkkuY3JlYXRlVVJJKHVyaUF0dHJpYnV0ZSk7CisJCQkJCUVPYmplY3QgZU9iamVjdCA9IGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKS5nZXRFT2JqZWN0KHVyaSwgdHJ1ZSk7CisJCQkJCWlmIChlT2JqZWN0ICE9IG51bGwpIHsKKwkJCQkJICBzZXRTZWxlY3Rpb25Ub1ZpZXdlcihDb2xsZWN0aW9ucy5zaW5nbGV0b24oZWRpdGluZ0RvbWFpbi5nZXRXcmFwcGVyKGVPYmplY3QpKSk7CisJCQkJCX0KKwkJCQl9CisJCQl9CisJCX0KKwkJY2F0Y2ggKENvcmVFeGNlcHRpb24gZXhjZXB0aW9uKSB7CisJCQlEZWZpbml0aW9uc0VkaXRQbHVnaW4uSU5TVEFOQ0UubG9nKGV4Y2VwdGlvbik7CisJCX0KKwl9CisKKwkvKioKKwkgKiBUaGlzIGlzIGNhbGxlZCBkdXJpbmcgc3RhcnR1cC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBpbml0KElFZGl0b3JTaXRlIHNpdGUsIElFZGl0b3JJbnB1dCBlZGl0b3JJbnB1dCkgeworCQlzZXRTaXRlKHNpdGUpOworCQlzZXRJbnB1dFdpdGhOb3RpZnkoZWRpdG9ySW5wdXQpOworCQlzZXRQYXJ0TmFtZShlZGl0b3JJbnB1dC5nZXROYW1lKCkpOworCQlzaXRlLnNldFNlbGVjdGlvblByb3ZpZGVyKHRoaXMpOworCQlzaXRlLmdldFBhZ2UoKS5hZGRQYXJ0TGlzdGVuZXIocGFydExpc3RlbmVyKTsKKwkJUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmFkZFJlc291cmNlQ2hhbmdlTGlzdGVuZXIocmVzb3VyY2VDaGFuZ2VMaXN0ZW5lciwgSVJlc291cmNlQ2hhbmdlRXZlbnQuUE9TVF9DSEFOR0UpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIHNldEZvY3VzKCkgeworCQlnZXRDb250cm9sKGdldEFjdGl2ZVBhZ2UoKSkuc2V0Rm9jdXMoKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGltcGxlbWVudHMge0BsaW5rIG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvblByb3ZpZGVyfS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBhZGRTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIoSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lciBsaXN0ZW5lcikgeworCQlzZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXJzLmFkZChsaXN0ZW5lcik7CisJfQorCisJLyoqCisJICogVGhpcyBpbXBsZW1lbnRzIHtAbGluayBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb25Qcm92aWRlcn0uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgcmVtb3ZlU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyKElTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIgbGlzdGVuZXIpIHsKKwkJc2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVycy5yZW1vdmUobGlzdGVuZXIpOworCX0KKworCS8qKgorCSAqIFRoaXMgaW1wbGVtZW50cyB7QGxpbmsgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uUHJvdmlkZXJ9IHRvIHJldHVybiB0aGlzIGVkaXRvcidzIG92ZXJhbGwgc2VsZWN0aW9uLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBJU2VsZWN0aW9uIGdldFNlbGVjdGlvbigpIHsKKwkJcmV0dXJuIGVkaXRvclNlbGVjdGlvbjsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGltcGxlbWVudHMge0BsaW5rIG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvblByb3ZpZGVyfSB0byBzZXQgdGhpcyBlZGl0b3IncyBvdmVyYWxsIHNlbGVjdGlvbi4KKwkgKiBDYWxsaW5nIHRoaXMgcmVzdWx0IHdpbGwgbm90aWZ5IHRoZSBsaXN0ZW5lcnMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgc2V0U2VsZWN0aW9uKElTZWxlY3Rpb24gc2VsZWN0aW9uKSB7CisJCWVkaXRvclNlbGVjdGlvbiA9IHNlbGVjdGlvbjsKKworCQlmb3IgKElTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIgbGlzdGVuZXIgOiBzZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXJzKSB7CisJCQlsaXN0ZW5lci5zZWxlY3Rpb25DaGFuZ2VkKG5ldyBTZWxlY3Rpb25DaGFuZ2VkRXZlbnQodGhpcywgc2VsZWN0aW9uKSk7CisJCX0KKwkJc2V0U3RhdHVzTGluZU1hbmFnZXIoc2VsZWN0aW9uKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRTdGF0dXNMaW5lTWFuYWdlcihJU2VsZWN0aW9uIHNlbGVjdGlvbikgeworCQlJU3RhdHVzTGluZU1hbmFnZXIgc3RhdHVzTGluZU1hbmFnZXIgPSBjdXJyZW50Vmlld2VyICE9IG51bGwgJiYgY3VycmVudFZpZXdlciA9PSBjb250ZW50T3V0bGluZVZpZXdlciA/CisJCQljb250ZW50T3V0bGluZVN0YXR1c0xpbmVNYW5hZ2VyIDogZ2V0QWN0aW9uQmFycygpLmdldFN0YXR1c0xpbmVNYW5hZ2VyKCk7CisKKwkJaWYgKHN0YXR1c0xpbmVNYW5hZ2VyICE9IG51bGwpIHsKKwkJCWlmIChzZWxlY3Rpb24gaW5zdGFuY2VvZiBJU3RydWN0dXJlZFNlbGVjdGlvbikgeworCQkJCUNvbGxlY3Rpb248Pz4gY29sbGVjdGlvbiA9ICgoSVN0cnVjdHVyZWRTZWxlY3Rpb24pc2VsZWN0aW9uKS50b0xpc3QoKTsKKwkJCQlzd2l0Y2ggKGNvbGxlY3Rpb24uc2l6ZSgpKSB7CisJCQkJCWNhc2UgMDogeworCQkJCQkJc3RhdHVzTGluZU1hbmFnZXIuc2V0TWVzc2FnZShnZXRTdHJpbmcoIl9VSV9Ob09iamVjdFNlbGVjdGVkIikpOyAvLyROT04tTkxTLTEkCisJCQkJCQlicmVhazsKKwkJCQkJfQorCQkJCQljYXNlIDE6IHsKKwkJCQkJCVN0cmluZyB0ZXh0ID0gbmV3IEFkYXB0ZXJGYWN0b3J5SXRlbURlbGVnYXRvcihhZGFwdGVyRmFjdG9yeSkuZ2V0VGV4dChjb2xsZWN0aW9uLml0ZXJhdG9yKCkubmV4dCgpKTsKKwkJCQkJCXN0YXR1c0xpbmVNYW5hZ2VyLnNldE1lc3NhZ2UoZ2V0U3RyaW5nKCJfVUlfU2luZ2xlT2JqZWN0U2VsZWN0ZWQiLCB0ZXh0KSk7IC8vJE5PTi1OTFMtMSQKKwkJCQkJCWJyZWFrOworCQkJCQl9CisJCQkJCWRlZmF1bHQ6IHsKKwkJCQkJCXN0YXR1c0xpbmVNYW5hZ2VyLnNldE1lc3NhZ2UoZ2V0U3RyaW5nKCJfVUlfTXVsdGlPYmplY3RTZWxlY3RlZCIsIEludGVnZXIudG9TdHJpbmcoY29sbGVjdGlvbi5zaXplKCkpKSk7IC8vJE5PTi1OTFMtMSQKKwkJCQkJCWJyZWFrOworCQkJCQl9CisJCQkJfQorCQkJfQorCQkJZWxzZSB7CisJCQkJc3RhdHVzTGluZU1hbmFnZXIuc2V0TWVzc2FnZSgiIik7IC8vJE5PTi1OTFMtMSQKKwkJCX0KKwkJfQorCX0KKworCS8qKgorCSAqIFRoaXMgbG9va3MgdXAgYSBzdHJpbmcgaW4gdGhlIHBsdWdpbidzIHBsdWdpbi5wcm9wZXJ0aWVzIGZpbGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIGdldFN0cmluZyhTdHJpbmcga2V5KSB7CisJCXJldHVybiBEZWZpbml0aW9uc0VkaXRQbHVnaW4uSU5TVEFOQ0UuZ2V0U3RyaW5nKGtleSk7CisJfQorCisJLyoqCisJICogVGhpcyBsb29rcyB1cCBhIHN0cmluZyBpbiBwbHVnaW4ucHJvcGVydGllcywgbWFraW5nIGEgc3Vic3RpdHV0aW9uLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByaXZhdGUgc3RhdGljIFN0cmluZyBnZXRTdHJpbmcoU3RyaW5nIGtleSwgT2JqZWN0IHMxKSB7CisJCXJldHVybiBEZWZpbml0aW9uc0VkaXRQbHVnaW4uSU5TVEFOQ0UuZ2V0U3RyaW5nKGtleSwgbmV3IE9iamVjdCBbXSB7IHMxIH0pOworCX0KKworCS8qKgorCSAqIFRoaXMgaW1wbGVtZW50cyB7QGxpbmsgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklNZW51TGlzdGVuZXJ9IHRvIGhlbHAgZmlsbCB0aGUgY29udGV4dCBtZW51cyB3aXRoIGNvbnRyaWJ1dGlvbnMgZnJvbSB0aGUgRWRpdCBtZW51LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIG1lbnVBYm91dFRvU2hvdyhJTWVudU1hbmFnZXIgbWVudU1hbmFnZXIpIHsKKwkJKChJTWVudUxpc3RlbmVyKWdldEVkaXRvclNpdGUoKS5nZXRBY3Rpb25CYXJDb250cmlidXRvcigpKS5tZW51QWJvdXRUb1Nob3cobWVudU1hbmFnZXIpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFZGl0aW5nRG9tYWluQWN0aW9uQmFyQ29udHJpYnV0b3IgZ2V0QWN0aW9uQmFyQ29udHJpYnV0b3IoKSB7CisJCXJldHVybiAoRWRpdGluZ0RvbWFpbkFjdGlvbkJhckNvbnRyaWJ1dG9yKWdldEVkaXRvclNpdGUoKS5nZXRBY3Rpb25CYXJDb250cmlidXRvcigpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBJQWN0aW9uQmFycyBnZXRBY3Rpb25CYXJzKCkgeworCQlyZXR1cm4gZ2V0QWN0aW9uQmFyQ29udHJpYnV0b3IoKS5nZXRBY3Rpb25CYXJzKCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEFkYXB0ZXJGYWN0b3J5IGdldEFkYXB0ZXJGYWN0b3J5KCkgeworCQlyZXR1cm4gYWRhcHRlckZhY3Rvcnk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgZGlzcG9zZSgpIHsKKwkJdXBkYXRlUHJvYmxlbUluZGljYXRpb24gPSBmYWxzZTsKKworCQlSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkucmVtb3ZlUmVzb3VyY2VDaGFuZ2VMaXN0ZW5lcihyZXNvdXJjZUNoYW5nZUxpc3RlbmVyKTsKKworCQlnZXRTaXRlKCkuZ2V0UGFnZSgpLnJlbW92ZVBhcnRMaXN0ZW5lcihwYXJ0TGlzdGVuZXIpOworCisJCWFkYXB0ZXJGYWN0b3J5LmRpc3Bvc2UoKTsKKworCQlpZiAoZ2V0QWN0aW9uQmFyQ29udHJpYnV0b3IoKS5nZXRBY3RpdmVFZGl0b3IoKSA9PSB0aGlzKSB7CisJCQlnZXRBY3Rpb25CYXJDb250cmlidXRvcigpLnNldEFjdGl2ZUVkaXRvcihudWxsKTsKKwkJfQorCisJCWlmIChwcm9wZXJ0eVNoZWV0UGFnZSAhPSBudWxsKSB7CisJCQlwcm9wZXJ0eVNoZWV0UGFnZS5kaXNwb3NlKCk7CisJCX0KKworCQlpZiAoY29udGVudE91dGxpbmVQYWdlICE9IG51bGwpIHsKKwkJCWNvbnRlbnRPdXRsaW5lUGFnZS5kaXNwb3NlKCk7CisJCX0KKworCQlzdXBlci5kaXNwb3NlKCk7CisJfQorCisJLyoqCisJICogUmV0dXJucyB3aGV0aGVyIHRoZSBvdXRsaW5lIHZpZXcgc2hvdWxkIGJlIHByZXNlbnRlZCB0byB0aGUgdXNlci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgYm9vbGVhbiBzaG93T3V0bGluZVZpZXcoKSB7CisJCXJldHVybiBmYWxzZTsKKwl9Cit9CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvbm9kZXMvcHJvdmlkZXIvR2VvZ3JhcGhpY0ZlYXR1cmVJdGVtUHJvdmlkZXIuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy9ub2Rlcy9wcm92aWRlci9HZW9ncmFwaGljRmVhdHVyZUl0ZW1Qcm92aWRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI4OTFkNWEKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvbm9kZXMvcHJvdmlkZXIvR2VvZ3JhcGhpY0ZlYXR1cmVJdGVtUHJvdmlkZXIuamF2YQpAQCAtMCwwICsxLDEyMSBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLm5vZGVzLnByb3ZpZGVyOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOworaW1wb3J0IGphdmEudXRpbC5MaXN0OworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5SZXNvdXJjZUxvY2F0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlVSSTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JRWRpdGluZ0RvbWFpbkl0ZW1Qcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbUxhYmVsUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1Qcm9wZXJ0eVNvdXJjZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JU3RydWN0dXJlZEl0ZW1Db250ZW50UHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVRyZWVJdGVtQ29udGVudFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5wcm92aWRlci5Ob2RlSXRlbVByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuZWRnZXMucHJvdmlkZXIuRGVmaW5pdGlvbnNFZGl0UGx1Z2luOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubm9kZXMuR2VvZ3JhcGhpY0ZlYXR1cmU7CisKKy8qKgorICogVGhpcyBpcyB0aGUgaXRlbSBwcm92aWRlciBhZGFwdGVyIGZvciBhIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLm5vZGVzLkdlb2dyYXBoaWNGZWF0dXJlfSBvYmplY3QuCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBHZW9ncmFwaGljRmVhdHVyZUl0ZW1Qcm92aWRlcgorCWV4dGVuZHMgTm9kZUl0ZW1Qcm92aWRlcgorCWltcGxlbWVudHMJCisJCUlFZGl0aW5nRG9tYWluSXRlbVByb3ZpZGVyLAkKKwkJSVN0cnVjdHVyZWRJdGVtQ29udGVudFByb3ZpZGVyLAkKKwkJSVRyZWVJdGVtQ29udGVudFByb3ZpZGVyLAkKKwkJSUl0ZW1MYWJlbFByb3ZpZGVyLAkKKwkJSUl0ZW1Qcm9wZXJ0eVNvdXJjZSB7CisJLyoqCisJICogVGhpcyBjb25zdHJ1Y3RzIGFuIGluc3RhbmNlIGZyb20gYSBmYWN0b3J5IGFuZCBhIG5vdGlmaWVyLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBHZW9ncmFwaGljRmVhdHVyZUl0ZW1Qcm92aWRlcihBZGFwdGVyRmFjdG9yeSBhZGFwdGVyRmFjdG9yeSkgeworCQlzdXBlcihhZGFwdGVyRmFjdG9yeSk7CisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIHRoZSBwcm9wZXJ0eSBkZXNjcmlwdG9ycyBmb3IgdGhlIGFkYXB0ZWQgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIExpc3Q8SUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I+IGdldFByb3BlcnR5RGVzY3JpcHRvcnMoT2JqZWN0IG9iamVjdCkgeworCQlpZiAoaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMgPT0gbnVsbCkgeworCQkJc3VwZXIuZ2V0UHJvcGVydHlEZXNjcmlwdG9ycyhvYmplY3QpOworCisJCX0KKwkJcmV0dXJuIGl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzOworCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyB0aGUgbGFiZWwgdGV4dCBmb3IgdGhlIGFkYXB0ZWQgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIFN0cmluZyBnZXRUZXh0KE9iamVjdCBvYmplY3QpIHsKKwkJVVJJIGxhYmVsVmFsdWUgPSAoKEdlb2dyYXBoaWNGZWF0dXJlKW9iamVjdCkuZ2V0VVJJKCk7CisJCVN0cmluZyBsYWJlbCA9IGxhYmVsVmFsdWUgPT0gbnVsbCA/IG51bGwgOiBsYWJlbFZhbHVlLnRvU3RyaW5nKCk7CisJCXJldHVybiBsYWJlbCA9PSBudWxsIHx8IGxhYmVsLmxlbmd0aCgpID09IDAgPworCQkJZ2V0U3RyaW5nKCJfVUlfR2VvZ3JhcGhpY0ZlYXR1cmVfdHlwZSIpIDogLy8kTk9OLU5MUy0xJAorCQkJZ2V0U3RyaW5nKCJfVUlfR2VvZ3JhcGhpY0ZlYXR1cmVfdHlwZSIpICsgIiAiICsgbGFiZWw7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAorCX0KKworCS8qKgorCSAqIFRoaXMgaGFuZGxlcyBtb2RlbCBub3RpZmljYXRpb25zIGJ5IGNhbGxpbmcge0BsaW5rICN1cGRhdGVDaGlsZHJlbn0gdG8gdXBkYXRlIGFueSBjYWNoZWQKKwkgKiBjaGlsZHJlbiBhbmQgYnkgY3JlYXRpbmcgYSB2aWV3ZXIgbm90aWZpY2F0aW9uLCB3aGljaCBpdCBwYXNzZXMgdG8ge0BsaW5rICNmaXJlTm90aWZ5Q2hhbmdlZH0uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgbm90aWZ5Q2hhbmdlZChOb3RpZmljYXRpb24gbm90aWZpY2F0aW9uKSB7CisJCXVwZGF0ZUNoaWxkcmVuKG5vdGlmaWNhdGlvbik7CisJCXN1cGVyLm5vdGlmeUNoYW5nZWQobm90aWZpY2F0aW9uKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFkZHMge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lZGl0LmNvbW1hbmQuQ29tbWFuZFBhcmFtZXRlcn1zIGRlc2NyaWJpbmcgdGhlIGNoaWxkcmVuCisJICogdGhhdCBjYW4gYmUgY3JlYXRlZCB1bmRlciB0aGlzIG9iamVjdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgdm9pZCBjb2xsZWN0TmV3Q2hpbGREZXNjcmlwdG9ycyhDb2xsZWN0aW9uPE9iamVjdD4gbmV3Q2hpbGREZXNjcmlwdG9ycywgT2JqZWN0IG9iamVjdCkgeworCQlzdXBlci5jb2xsZWN0TmV3Q2hpbGREZXNjcmlwdG9ycyhuZXdDaGlsZERlc2NyaXB0b3JzLCBvYmplY3QpOworCX0KKworCS8qKgorCSAqIFJldHVybiB0aGUgcmVzb3VyY2UgbG9jYXRvciBmb3IgdGhpcyBpdGVtIHByb3ZpZGVyJ3MgcmVzb3VyY2VzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBSZXNvdXJjZUxvY2F0b3IgZ2V0UmVzb3VyY2VMb2NhdG9yKCkgeworCQlyZXR1cm4gRGVmaW5pdGlvbnNFZGl0UGx1Z2luLklOU1RBTkNFOworCX0KKworfQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL25vZGVzL3Byb3ZpZGVyL05vZGVzSXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy9ub2Rlcy9wcm92aWRlci9Ob2Rlc0l0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGZiNmE2NwotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy9ub2Rlcy9wcm92aWRlci9Ob2Rlc0l0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5LmphdmEKQEAgLTAsMCArMSwyMDYgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5ub2Rlcy5wcm92aWRlcjsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OworaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuQWRhcHRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuQ2hhbmdlTm90aWZpZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5Db21wb3NlZEFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklDaGFuZ2VOb3RpZmllcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JRGlzcG9zYWJsZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JRWRpdGluZ0RvbWFpbkl0ZW1Qcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbUxhYmVsUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1Qcm9wZXJ0eVNvdXJjZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JTm90aWZ5Q2hhbmdlZExpc3RlbmVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklTdHJ1Y3R1cmVkSXRlbUNvbnRlbnRQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JVHJlZUl0ZW1Db250ZW50UHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5ub2Rlcy51dGlsLk5vZGVzQWRhcHRlckZhY3Rvcnk7CisKKy8qKgorICogVGhpcyBpcyB0aGUgZmFjdG9yeSB0aGF0IGlzIHVzZWQgdG8gcHJvdmlkZSB0aGUgaW50ZXJmYWNlcyBuZWVkZWQgdG8gc3VwcG9ydCBWaWV3ZXJzLgorICogVGhlIGFkYXB0ZXJzIGdlbmVyYXRlZCBieSB0aGlzIGZhY3RvcnkgY29udmVydCBFTUYgYWRhcHRlciBub3RpZmljYXRpb25zIGludG8gY2FsbHMgdG8ge0BsaW5rICNmaXJlTm90aWZ5Q2hhbmdlZCBmaXJlTm90aWZ5Q2hhbmdlZH0uCisgKiBUaGUgYWRhcHRlcnMgYWxzbyBzdXBwb3J0IEVjbGlwc2UgcHJvcGVydHkgc2hlZXRzLgorICogTm90ZSB0aGF0IG1vc3Qgb2YgdGhlIGFkYXB0ZXJzIGFyZSBzaGFyZWQgYW1vbmcgbXVsdGlwbGUgaW5zdGFuY2VzLgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgTm9kZXNJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSBleHRlbmRzIE5vZGVzQWRhcHRlckZhY3RvcnkgaW1wbGVtZW50cyBDb21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5LCBJQ2hhbmdlTm90aWZpZXIsIElEaXNwb3NhYmxlIHsKKwkvKioKKwkgKiBUaGlzIGtlZXBzIHRyYWNrIG9mIHRoZSByb290IGFkYXB0ZXIgZmFjdG9yeSB0aGF0IGRlbGVnYXRlcyB0byB0aGlzIGFkYXB0ZXIgZmFjdG9yeS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgQ29tcG9zZWRBZGFwdGVyRmFjdG9yeSBwYXJlbnRBZGFwdGVyRmFjdG9yeTsKKworCS8qKgorCSAqIFRoaXMgaXMgdXNlZCB0byBpbXBsZW1lbnQge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklDaGFuZ2VOb3RpZmllcn0uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIElDaGFuZ2VOb3RpZmllciBjaGFuZ2VOb3RpZmllciA9IG5ldyBDaGFuZ2VOb3RpZmllcigpOworCisJLyoqCisJICogVGhpcyBrZWVwcyB0cmFjayBvZiBhbGwgdGhlIHN1cHBvcnRlZCB0eXBlcyBjaGVja2VkIGJ5IHtAbGluayAjaXNGYWN0b3J5Rm9yVHlwZSBpc0ZhY3RvcnlGb3JUeXBlfS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgQ29sbGVjdGlvbjxPYmplY3Q+IHN1cHBvcnRlZFR5cGVzID0gbmV3IEFycmF5TGlzdDxPYmplY3Q+KCk7CisKKwkvKioKKwkgKiBUaGlzIGNvbnN0cnVjdHMgYW4gaW5zdGFuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIE5vZGVzSXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkoKSB7CisJCXN1cHBvcnRlZFR5cGVzLmFkZChJRWRpdGluZ0RvbWFpbkl0ZW1Qcm92aWRlci5jbGFzcyk7CisJCXN1cHBvcnRlZFR5cGVzLmFkZChJU3RydWN0dXJlZEl0ZW1Db250ZW50UHJvdmlkZXIuY2xhc3MpOworCQlzdXBwb3J0ZWRUeXBlcy5hZGQoSVRyZWVJdGVtQ29udGVudFByb3ZpZGVyLmNsYXNzKTsKKwkJc3VwcG9ydGVkVHlwZXMuYWRkKElJdGVtTGFiZWxQcm92aWRlci5jbGFzcyk7CisJCXN1cHBvcnRlZFR5cGVzLmFkZChJSXRlbVByb3BlcnR5U291cmNlLmNsYXNzKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGtlZXBzIHRyYWNrIG9mIHRoZSBvbmUgYWRhcHRlciB1c2VkIGZvciBhbGwge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubm9kZXMuUmVnaW9ufSBpbnN0YW5jZXMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIFJlZ2lvbkl0ZW1Qcm92aWRlciByZWdpb25JdGVtUHJvdmlkZXI7CisKKwkvKioKKwkgKiBUaGlzIGNyZWF0ZXMgYW4gYWRhcHRlciBmb3IgYSB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5ub2Rlcy5SZWdpb259LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZVJlZ2lvbkFkYXB0ZXIoKSB7CisJCWlmIChyZWdpb25JdGVtUHJvdmlkZXIgPT0gbnVsbCkgeworCQkJcmVnaW9uSXRlbVByb3ZpZGVyID0gbmV3IFJlZ2lvbkl0ZW1Qcm92aWRlcih0aGlzKTsKKwkJfQorCisJCXJldHVybiByZWdpb25JdGVtUHJvdmlkZXI7CisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIHRoZSByb290IGFkYXB0ZXIgZmFjdG9yeSB0aGF0IGNvbnRhaW5zIHRoaXMgZmFjdG9yeS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSBnZXRSb290QWRhcHRlckZhY3RvcnkoKSB7CisJCXJldHVybiBwYXJlbnRBZGFwdGVyRmFjdG9yeSA9PSBudWxsID8gdGhpcyA6IHBhcmVudEFkYXB0ZXJGYWN0b3J5LmdldFJvb3RBZGFwdGVyRmFjdG9yeSgpOworCX0KKworCS8qKgorCSAqIFRoaXMgc2V0cyB0aGUgY29tcG9zZWQgYWRhcHRlciBmYWN0b3J5IHRoYXQgY29udGFpbnMgdGhpcyBmYWN0b3J5LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIHNldFBhcmVudEFkYXB0ZXJGYWN0b3J5KENvbXBvc2VkQWRhcHRlckZhY3RvcnkgcGFyZW50QWRhcHRlckZhY3RvcnkpIHsKKwkJdGhpcy5wYXJlbnRBZGFwdGVyRmFjdG9yeSA9IHBhcmVudEFkYXB0ZXJGYWN0b3J5OworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBib29sZWFuIGlzRmFjdG9yeUZvclR5cGUoT2JqZWN0IHR5cGUpIHsKKwkJcmV0dXJuIHN1cHBvcnRlZFR5cGVzLmNvbnRhaW5zKHR5cGUpIHx8IHN1cGVyLmlzRmFjdG9yeUZvclR5cGUodHlwZSk7CisJfQorCisJLyoqCisJICogVGhpcyBpbXBsZW1lbnRhdGlvbiBzdWJzdGl0dXRlcyB0aGUgZmFjdG9yeSBpdHNlbGYgYXMgdGhlIGtleSBmb3IgdGhlIGFkYXB0ZXIuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIEFkYXB0ZXIgYWRhcHQoTm90aWZpZXIgbm90aWZpZXIsIE9iamVjdCB0eXBlKSB7CisJCXJldHVybiBzdXBlci5hZGFwdChub3RpZmllciwgdGhpcyk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIE9iamVjdCBhZGFwdChPYmplY3Qgb2JqZWN0LCBPYmplY3QgdHlwZSkgeworCQlpZiAoaXNGYWN0b3J5Rm9yVHlwZSh0eXBlKSkgeworCQkJT2JqZWN0IGFkYXB0ZXIgPSBzdXBlci5hZGFwdChvYmplY3QsIHR5cGUpOworCQkJaWYgKCEodHlwZSBpbnN0YW5jZW9mIENsYXNzPD8+KSB8fCAoKChDbGFzczw/Pil0eXBlKS5pc0luc3RhbmNlKGFkYXB0ZXIpKSkgeworCQkJCXJldHVybiBhZGFwdGVyOworCQkJfQorCQl9CisKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogVGhpcyBhZGRzIGEgbGlzdGVuZXIuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgYWRkTGlzdGVuZXIoSU5vdGlmeUNoYW5nZWRMaXN0ZW5lciBub3RpZnlDaGFuZ2VkTGlzdGVuZXIpIHsKKwkJY2hhbmdlTm90aWZpZXIuYWRkTGlzdGVuZXIobm90aWZ5Q2hhbmdlZExpc3RlbmVyKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHJlbW92ZXMgYSBsaXN0ZW5lci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCByZW1vdmVMaXN0ZW5lcihJTm90aWZ5Q2hhbmdlZExpc3RlbmVyIG5vdGlmeUNoYW5nZWRMaXN0ZW5lcikgeworCQljaGFuZ2VOb3RpZmllci5yZW1vdmVMaXN0ZW5lcihub3RpZnlDaGFuZ2VkTGlzdGVuZXIpOworCX0KKworCS8qKgorCSAqIFRoaXMgZGVsZWdhdGVzIHRvIHtAbGluayAjY2hhbmdlTm90aWZpZXJ9IGFuZCB0byB7QGxpbmsgI3BhcmVudEFkYXB0ZXJGYWN0b3J5fS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBmaXJlTm90aWZ5Q2hhbmdlZChOb3RpZmljYXRpb24gbm90aWZpY2F0aW9uKSB7CisJCWNoYW5nZU5vdGlmaWVyLmZpcmVOb3RpZnlDaGFuZ2VkKG5vdGlmaWNhdGlvbik7CisKKwkJaWYgKHBhcmVudEFkYXB0ZXJGYWN0b3J5ICE9IG51bGwpIHsKKwkJCXBhcmVudEFkYXB0ZXJGYWN0b3J5LmZpcmVOb3RpZnlDaGFuZ2VkKG5vdGlmaWNhdGlvbik7CisJCX0KKwl9CisKKwkvKioKKwkgKiBUaGlzIGRpc3Bvc2VzIGFsbCBvZiB0aGUgaXRlbSBwcm92aWRlcnMgY3JlYXRlZCBieSB0aGlzIGZhY3RvcnkuIAorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIGRpc3Bvc2UoKSB7CisJCWlmIChyZWdpb25JdGVtUHJvdmlkZXIgIT0gbnVsbCkgcmVnaW9uSXRlbVByb3ZpZGVyLmRpc3Bvc2UoKTsKKwl9CisKK30KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy9ub2Rlcy9wcm92aWRlci9SZWdpb25JdGVtUHJvdmlkZXIuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy9ub2Rlcy9wcm92aWRlci9SZWdpb25JdGVtUHJvdmlkZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMmY3ZjM1Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL25vZGVzL3Byb3ZpZGVyL1JlZ2lvbkl0ZW1Qcm92aWRlci5qYXZhCkBAIC0wLDAgKzEsMTM3IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubm9kZXMucHJvdmlkZXI7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LkFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuVVJJOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklFZGl0aW5nRG9tYWluSXRlbVByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtTGFiZWxQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbVByb3BlcnR5RGVzY3JpcHRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbVByb3BlcnR5U291cmNlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklTdHJ1Y3R1cmVkSXRlbUNvbnRlbnRQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JVHJlZUl0ZW1Db250ZW50UHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS5HZW9ncmFwaGljTmFtZXM7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5ub2Rlcy5SZWdpb247CisKKy8qKgorICogVGhpcyBpcyB0aGUgaXRlbSBwcm92aWRlciBhZGFwdGVyIGZvciBhIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLm5vZGVzLlJlZ2lvbn0gb2JqZWN0LgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgUmVnaW9uSXRlbVByb3ZpZGVyCisJZXh0ZW5kcyBHZW9ncmFwaGljRmVhdHVyZUl0ZW1Qcm92aWRlcgorCWltcGxlbWVudHMJCisJCUlFZGl0aW5nRG9tYWluSXRlbVByb3ZpZGVyLAkKKwkJSVN0cnVjdHVyZWRJdGVtQ29udGVudFByb3ZpZGVyLAkKKwkJSVRyZWVJdGVtQ29udGVudFByb3ZpZGVyLAkKKwkJSUl0ZW1MYWJlbFByb3ZpZGVyLAkKKwkJSUl0ZW1Qcm9wZXJ0eVNvdXJjZSB7CisJLyoqCisJICogVGhpcyBjb25zdHJ1Y3RzIGFuIGluc3RhbmNlIGZyb20gYSBmYWN0b3J5IGFuZCBhIG5vdGlmaWVyLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBSZWdpb25JdGVtUHJvdmlkZXIoQWRhcHRlckZhY3RvcnkgYWRhcHRlckZhY3RvcnkpIHsKKwkJc3VwZXIoYWRhcHRlckZhY3RvcnkpOworCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyB0aGUgcHJvcGVydHkgZGVzY3JpcHRvcnMgZm9yIHRoZSBhZGFwdGVkIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBMaXN0PElJdGVtUHJvcGVydHlEZXNjcmlwdG9yPiBnZXRQcm9wZXJ0eURlc2NyaXB0b3JzKE9iamVjdCBvYmplY3QpIHsKKwkJaWYgKGl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzID09IG51bGwpIHsKKwkJCXN1cGVyLmdldFByb3BlcnR5RGVzY3JpcHRvcnMob2JqZWN0KTsKKworCQl9CisJCXJldHVybiBpdGVtUHJvcGVydHlEZXNjcmlwdG9yczsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgdGhlIGxhYmVsIHRleHQgZm9yIHRoZSBhZGFwdGVkIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgU3RyaW5nIGdldFRleHQoT2JqZWN0IG9iamVjdCkgeworCQlmaW5hbCBSZWdpb24gcmVnaW9uID0gKFJlZ2lvbilvYmplY3Q7CisJCQorCQlmaW5hbCBVUkkgcmVnaW9uVVJJID0gcmVnaW9uLmdldFVSSSgpOworCQlmaW5hbCBTdHJpbmcgbGFzdFNlZ21lbnQgPSByZWdpb25VUkkubGFzdFNlZ21lbnQoKTsKKwkJZmluYWwgU3RyaW5nIGlzb0tleSA9IGxhc3RTZWdtZW50LnRvU3RyaW5nKCk7CisKKwkJZmluYWwgU3RyaW5nIGdlb05hbWUgPSBHZW9ncmFwaGljTmFtZXMuZ2V0TmFtZShpc29LZXkpOworCQlpZiAoZ2VvTmFtZS5zdGFydHNXaXRoKCIhIikpIHsKKwkJCS8vIFllcworCQkJcmV0dXJuIGdldFRleHRHZW4ob2JqZWN0KTsKKwkJfSAvLyBpZiAKKwkJZWxzZSB7CisJCQlyZXR1cm4gZ2VvTmFtZTsKKwkJfQorCX0gLy8gZ2V0VGV4dAorCisJLyoqCisJICogVGhpcyByZXR1cm5zIHRoZSBsYWJlbCB0ZXh0IGZvciB0aGUgYWRhcHRlZCBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBwYXJhbSBvYmplY3QKKwkgKiBAcmV0dXJuCisJICogCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBTdHJpbmcgZ2V0VGV4dEdlbihPYmplY3Qgb2JqZWN0KSB7CisJCVVSSSBsYWJlbFZhbHVlID0gKChSZWdpb24pb2JqZWN0KS5nZXRVUkkoKTsKKwkJU3RyaW5nIGxhYmVsID0gbGFiZWxWYWx1ZSA9PSBudWxsID8gbnVsbCA6IGxhYmVsVmFsdWUudG9TdHJpbmcoKTsKKwkJcmV0dXJuIGxhYmVsID09IG51bGwgfHwgbGFiZWwubGVuZ3RoKCkgPT0gMCA/CisJCQlnZXRTdHJpbmcoIl9VSV9SZWdpb25fdHlwZSIpIDogLy8kTk9OLU5MUy0xJAorCQkJZ2V0U3RyaW5nKCJfVUlfUmVnaW9uX3R5cGUiKSArICIgIiArIGxhYmVsOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKKwl9CisJCisJLyoqCisJICogVGhpcyBoYW5kbGVzIG1vZGVsIG5vdGlmaWNhdGlvbnMgYnkgY2FsbGluZyB7QGxpbmsgI3VwZGF0ZUNoaWxkcmVufSB0byB1cGRhdGUgYW55IGNhY2hlZAorCSAqIGNoaWxkcmVuIGFuZCBieSBjcmVhdGluZyBhIHZpZXdlciBub3RpZmljYXRpb24sIHdoaWNoIGl0IHBhc3NlcyB0byB7QGxpbmsgI2ZpcmVOb3RpZnlDaGFuZ2VkfS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBub3RpZnlDaGFuZ2VkKE5vdGlmaWNhdGlvbiBub3RpZmljYXRpb24pIHsKKwkJdXBkYXRlQ2hpbGRyZW4obm90aWZpY2F0aW9uKTsKKwkJc3VwZXIubm90aWZ5Q2hhbmdlZChub3RpZmljYXRpb24pOworCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmVkaXQuY29tbWFuZC5Db21tYW5kUGFyYW1ldGVyfXMgZGVzY3JpYmluZyB0aGUgY2hpbGRyZW4KKwkgKiB0aGF0IGNhbiBiZSBjcmVhdGVkIHVuZGVyIHRoaXMgb2JqZWN0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIGNvbGxlY3ROZXdDaGlsZERlc2NyaXB0b3JzKENvbGxlY3Rpb248T2JqZWN0PiBuZXdDaGlsZERlc2NyaXB0b3JzLCBPYmplY3Qgb2JqZWN0KSB7CisJCXN1cGVyLmNvbGxlY3ROZXdDaGlsZERlc2NyaXB0b3JzKG5ld0NoaWxkRGVzY3JpcHRvcnMsIG9iamVjdCk7CisJfQorCit9CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvbm9kZXMvdXRpbC9Ob2Rlc0FkYXB0ZXJGYWN0b3J5LmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvbm9kZXMvdXRpbC9Ob2Rlc0FkYXB0ZXJGYWN0b3J5LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjM1NGU4MgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy9ub2Rlcy91dGlsL05vZGVzQWRhcHRlckZhY3RvcnkuamF2YQpAQCAtMCwwICsxLDIyMiBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLm5vZGVzLnV0aWw7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5BZGFwdGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LmltcGwuQWRhcHRlckZhY3RvcnlJbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uSWRlbnRpZmlhYmxlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5Ob2RlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubm9kZXMuKjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLm5vZGVzLkdlb2dyYXBoaWNGZWF0dXJlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubm9kZXMuTm9kZXNQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubm9kZXMuUmVnaW9uOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiBUaGUgPGI+QWRhcHRlciBGYWN0b3J5PC9iPiBmb3IgdGhlIG1vZGVsLgorICogSXQgcHJvdmlkZXMgYW4gYWRhcHRlciA8Y29kZT5jcmVhdGVYWFg8L2NvZGU+IG1ldGhvZCBmb3IgZWFjaCBjbGFzcyBvZiB0aGUgbW9kZWwuCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5ub2Rlcy5Ob2Rlc1BhY2thZ2UKKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIE5vZGVzQWRhcHRlckZhY3RvcnkgZXh0ZW5kcyBBZGFwdGVyRmFjdG9yeUltcGwgeworCS8qKgorCSAqIFRoZSBjYWNoZWQgbW9kZWwgcGFja2FnZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgc3RhdGljIE5vZGVzUGFja2FnZSBtb2RlbFBhY2thZ2U7CisKKwkvKioKKwkgKiBDcmVhdGVzIGFuIGluc3RhbmNlIG9mIHRoZSBhZGFwdGVyIGZhY3RvcnkuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIE5vZGVzQWRhcHRlckZhY3RvcnkoKSB7CisJCWlmIChtb2RlbFBhY2thZ2UgPT0gbnVsbCkgeworCQkJbW9kZWxQYWNrYWdlID0gTm9kZXNQYWNrYWdlLmVJTlNUQU5DRTsKKwkJfQorCX0KKworCS8qKgorCSAqIFJldHVybnMgd2hldGhlciB0aGlzIGZhY3RvcnkgaXMgYXBwbGljYWJsZSBmb3IgdGhlIHR5cGUgb2YgdGhlIG9iamVjdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyA8Y29kZT50cnVlPC9jb2RlPiBpZiB0aGUgb2JqZWN0IGlzIGVpdGhlciB0aGUgbW9kZWwncyBwYWNrYWdlIG9yIGlzIGFuIGluc3RhbmNlIG9iamVjdCBvZiB0aGUgbW9kZWwuCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB3aGV0aGVyIHRoaXMgZmFjdG9yeSBpcyBhcHBsaWNhYmxlIGZvciB0aGUgdHlwZSBvZiB0aGUgb2JqZWN0LgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgYm9vbGVhbiBpc0ZhY3RvcnlGb3JUeXBlKE9iamVjdCBvYmplY3QpIHsKKwkJaWYgKG9iamVjdCA9PSBtb2RlbFBhY2thZ2UpIHsKKwkJCXJldHVybiB0cnVlOworCQl9CisJCWlmIChvYmplY3QgaW5zdGFuY2VvZiBFT2JqZWN0KSB7CisJCQlyZXR1cm4gKChFT2JqZWN0KW9iamVjdCkuZUNsYXNzKCkuZ2V0RVBhY2thZ2UoKSA9PSBtb2RlbFBhY2thZ2U7CisJCX0KKwkJcmV0dXJuIGZhbHNlOworCX0KKworCS8qKgorCSAqIFRoZSBzd2l0Y2ggdGhhdCBkZWxlZ2F0ZXMgdG8gdGhlIDxjb2RlPmNyZWF0ZVhYWDwvY29kZT4gbWV0aG9kcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgTm9kZXNTd2l0Y2g8QWRhcHRlcj4gbW9kZWxTd2l0Y2ggPQorCQluZXcgTm9kZXNTd2l0Y2g8QWRhcHRlcj4oKSB7CisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyBBZGFwdGVyIGNhc2VHZW9ncmFwaGljRmVhdHVyZShHZW9ncmFwaGljRmVhdHVyZSBvYmplY3QpIHsKKwkJCQlyZXR1cm4gY3JlYXRlR2VvZ3JhcGhpY0ZlYXR1cmVBZGFwdGVyKCk7CisJCQl9CisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyBBZGFwdGVyIGNhc2VSZWdpb24oUmVnaW9uIG9iamVjdCkgeworCQkJCXJldHVybiBjcmVhdGVSZWdpb25BZGFwdGVyKCk7CisJCQl9CisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyBBZGFwdGVyIGNhc2VOb2RlKE5vZGUgb2JqZWN0KSB7CisJCQkJcmV0dXJuIGNyZWF0ZU5vZGVBZGFwdGVyKCk7CisJCQl9CisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyA8VD4gQWRhcHRlciBjYXNlQ29tcGFyYWJsZShDb21wYXJhYmxlPFQ+IG9iamVjdCkgeworCQkJCXJldHVybiBjcmVhdGVDb21wYXJhYmxlQWRhcHRlcigpOworCQkJfQorCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgQWRhcHRlciBjYXNlSWRlbnRpZmlhYmxlKElkZW50aWZpYWJsZSBvYmplY3QpIHsKKwkJCQlyZXR1cm4gY3JlYXRlSWRlbnRpZmlhYmxlQWRhcHRlcigpOworCQkJfQorCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgQWRhcHRlciBjYXNlR3JhcGhfTm9kZShOb2RlIG9iamVjdCkgeworCQkJCXJldHVybiBjcmVhdGVHcmFwaF9Ob2RlQWRhcHRlcigpOworCQkJfQorCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgQWRhcHRlciBkZWZhdWx0Q2FzZShFT2JqZWN0IG9iamVjdCkgeworCQkJCXJldHVybiBjcmVhdGVFT2JqZWN0QWRhcHRlcigpOworCQkJfQorCQl9OworCisJLyoqCisJICogQ3JlYXRlcyBhbiBhZGFwdGVyIGZvciB0aGUgPGNvZGU+dGFyZ2V0PC9jb2RlPi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSB0YXJnZXQgdGhlIG9iamVjdCB0byBhZGFwdC4KKwkgKiBAcmV0dXJuIHRoZSBhZGFwdGVyIGZvciB0aGUgPGNvZGU+dGFyZ2V0PC9jb2RlPi4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlQWRhcHRlcihOb3RpZmllciB0YXJnZXQpIHsKKwkJcmV0dXJuIG1vZGVsU3dpdGNoLmRvU3dpdGNoKChFT2JqZWN0KXRhcmdldCk7CisJfQorCisKKwkvKioKKwkgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubm9kZXMuR2VvZ3JhcGhpY0ZlYXR1cmUgPGVtPkdlb2dyYXBoaWMgRmVhdHVyZTwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7CisJICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLm5vZGVzLkdlb2dyYXBoaWNGZWF0dXJlCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZUdlb2dyYXBoaWNGZWF0dXJlQWRhcHRlcigpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLm5vZGVzLlJlZ2lvbiA8ZW0+UmVnaW9uPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsKKwkgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubm9kZXMuUmVnaW9uCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZVJlZ2lvbkFkYXB0ZXIoKSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLk5vZGUgPGVtPk5vZGU8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOworCSAqIGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZSB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5LgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLk5vZGUKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlTm9kZUFkYXB0ZXIoKSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgamF2YS5sYW5nLkNvbXBhcmFibGUgPGVtPkNvbXBhcmFibGU8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOworCSAqIGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZSB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5LgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgorCSAqIEBzZWUgamF2YS5sYW5nLkNvbXBhcmFibGUKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlQ29tcGFyYWJsZUFkYXB0ZXIoKSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5JZGVudGlmaWFibGUgPGVtPklkZW50aWZpYWJsZTwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7CisJICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLklkZW50aWZpYWJsZQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVJZGVudGlmaWFibGVBZGFwdGVyKCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5Ob2RlIDxlbT5Ob2RlPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsKKwkgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5Ob2RlCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZUdyYXBoX05vZGVBZGFwdGVyKCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIHRoZSBkZWZhdWx0IGNhc2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsLgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVFT2JqZWN0QWRhcHRlcigpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCit9IC8vTm9kZXNBZGFwdGVyRmFjdG9yeQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL25vZGVzL3V0aWwvTm9kZXNTd2l0Y2guamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy9ub2Rlcy91dGlsL05vZGVzU3dpdGNoLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDliMGEwNQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy9ub2Rlcy91dGlsL05vZGVzU3dpdGNoLmphdmEKQEAgLTAsMCArMSwyMjcgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5ub2Rlcy51dGlsOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGphdmEudXRpbC5MaXN0OworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzczsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLklkZW50aWZpYWJsZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguTm9kZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLm5vZGVzLio7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5ub2Rlcy5HZW9ncmFwaGljRmVhdHVyZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLm5vZGVzLk5vZGVzUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLm5vZGVzLlJlZ2lvbjsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogVGhlIDxiPlN3aXRjaDwvYj4gZm9yIHRoZSBtb2RlbCdzIGluaGVyaXRhbmNlIGhpZXJhcmNoeS4KKyAqIEl0IHN1cHBvcnRzIHRoZSBjYWxsIHtAbGluayAjZG9Td2l0Y2goRU9iamVjdCkgZG9Td2l0Y2gob2JqZWN0KX0KKyAqIHRvIGludm9rZSB0aGUgPGNvZGU+Y2FzZVhYWDwvY29kZT4gbWV0aG9kIGZvciBlYWNoIGNsYXNzIG9mIHRoZSBtb2RlbCwKKyAqIHN0YXJ0aW5nIHdpdGggdGhlIGFjdHVhbCBjbGFzcyBvZiB0aGUgb2JqZWN0CisgKiBhbmQgcHJvY2VlZGluZyB1cCB0aGUgaW5oZXJpdGFuY2UgaGllcmFyY2h5CisgKiB1bnRpbCBhIG5vbi1udWxsIHJlc3VsdCBpcyByZXR1cm5lZCwKKyAqIHdoaWNoIGlzIHRoZSByZXN1bHQgb2YgdGhlIHN3aXRjaC4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLm5vZGVzLk5vZGVzUGFja2FnZQorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgTm9kZXNTd2l0Y2g8VDE+IHsKKwkvKioKKwkgKiBUaGUgY2FjaGVkIG1vZGVsIHBhY2thZ2UKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgc3RhdGljIE5vZGVzUGFja2FnZSBtb2RlbFBhY2thZ2U7CisKKwkvKioKKwkgKiBDcmVhdGVzIGFuIGluc3RhbmNlIG9mIHRoZSBzd2l0Y2guCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIE5vZGVzU3dpdGNoKCkgeworCQlpZiAobW9kZWxQYWNrYWdlID09IG51bGwpIHsKKwkJCW1vZGVsUGFja2FnZSA9IE5vZGVzUGFja2FnZS5lSU5TVEFOQ0U7CisJCX0KKwl9CisKKwkvKioKKwkgKiBDYWxscyA8Y29kZT5jYXNlWFhYPC9jb2RlPiBmb3IgZWFjaCBjbGFzcyBvZiB0aGUgbW9kZWwgdW50aWwgb25lIHJldHVybnMgYSBub24gbnVsbCByZXN1bHQ7IGl0IHlpZWxkcyB0aGF0IHJlc3VsdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIGZpcnN0IG5vbi1udWxsIHJlc3VsdCByZXR1cm5lZCBieSBhIDxjb2RlPmNhc2VYWFg8L2NvZGU+IGNhbGwuCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBUMSBkb1N3aXRjaChFT2JqZWN0IHRoZUVPYmplY3QpIHsKKwkJcmV0dXJuIGRvU3dpdGNoKHRoZUVPYmplY3QuZUNsYXNzKCksIHRoZUVPYmplY3QpOworCX0KKworCS8qKgorCSAqIENhbGxzIDxjb2RlPmNhc2VYWFg8L2NvZGU+IGZvciBlYWNoIGNsYXNzIG9mIHRoZSBtb2RlbCB1bnRpbCBvbmUgcmV0dXJucyBhIG5vbiBudWxsIHJlc3VsdDsgaXQgeWllbGRzIHRoYXQgcmVzdWx0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgZmlyc3Qgbm9uLW51bGwgcmVzdWx0IHJldHVybmVkIGJ5IGEgPGNvZGU+Y2FzZVhYWDwvY29kZT4gY2FsbC4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIFQxIGRvU3dpdGNoKEVDbGFzcyB0aGVFQ2xhc3MsIEVPYmplY3QgdGhlRU9iamVjdCkgeworCQlpZiAodGhlRUNsYXNzLmVDb250YWluZXIoKSA9PSBtb2RlbFBhY2thZ2UpIHsKKwkJCXJldHVybiBkb1N3aXRjaCh0aGVFQ2xhc3MuZ2V0Q2xhc3NpZmllcklEKCksIHRoZUVPYmplY3QpOworCQl9CisJCWVsc2UgeworCQkJTGlzdDxFQ2xhc3M+IGVTdXBlclR5cGVzID0gdGhlRUNsYXNzLmdldEVTdXBlclR5cGVzKCk7CisJCQlyZXR1cm4KKwkJCQllU3VwZXJUeXBlcy5pc0VtcHR5KCkgPworCQkJCQlkZWZhdWx0Q2FzZSh0aGVFT2JqZWN0KSA6CisJCQkJCWRvU3dpdGNoKGVTdXBlclR5cGVzLmdldCgwKSwgdGhlRU9iamVjdCk7CisJCX0KKwl9CisKKwkvKioKKwkgKiBDYWxscyA8Y29kZT5jYXNlWFhYPC9jb2RlPiBmb3IgZWFjaCBjbGFzcyBvZiB0aGUgbW9kZWwgdW50aWwgb25lIHJldHVybnMgYSBub24gbnVsbCByZXN1bHQ7IGl0IHlpZWxkcyB0aGF0IHJlc3VsdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIGZpcnN0IG5vbi1udWxsIHJlc3VsdCByZXR1cm5lZCBieSBhIDxjb2RlPmNhc2VYWFg8L2NvZGU+IGNhbGwuCisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBUMSBkb1N3aXRjaChpbnQgY2xhc3NpZmllcklELCBFT2JqZWN0IHRoZUVPYmplY3QpIHsKKwkJc3dpdGNoIChjbGFzc2lmaWVySUQpIHsKKwkJCWNhc2UgTm9kZXNQYWNrYWdlLkdFT0dSQVBISUNfRkVBVFVSRTogeworCQkJCUdlb2dyYXBoaWNGZWF0dXJlIGdlb2dyYXBoaWNGZWF0dXJlID0gKEdlb2dyYXBoaWNGZWF0dXJlKXRoZUVPYmplY3Q7CisJCQkJVDEgcmVzdWx0ID0gY2FzZUdlb2dyYXBoaWNGZWF0dXJlKGdlb2dyYXBoaWNGZWF0dXJlKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VHcmFwaF9Ob2RlKGdlb2dyYXBoaWNGZWF0dXJlKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VJZGVudGlmaWFibGUoZ2VvZ3JhcGhpY0ZlYXR1cmUpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZUNvbXBhcmFibGUoZ2VvZ3JhcGhpY0ZlYXR1cmUpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gZGVmYXVsdENhc2UodGhlRU9iamVjdCk7CisJCQkJcmV0dXJuIHJlc3VsdDsKKwkJCX0KKwkJCWNhc2UgTm9kZXNQYWNrYWdlLlJFR0lPTjogeworCQkJCVJlZ2lvbiByZWdpb24gPSAoUmVnaW9uKXRoZUVPYmplY3Q7CisJCQkJVDEgcmVzdWx0ID0gY2FzZVJlZ2lvbihyZWdpb24pOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZUdlb2dyYXBoaWNGZWF0dXJlKHJlZ2lvbik7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlR3JhcGhfTm9kZShyZWdpb24pOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZUlkZW50aWZpYWJsZShyZWdpb24pOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZUNvbXBhcmFibGUocmVnaW9uKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGRlZmF1bHRDYXNlKHRoZUVPYmplY3QpOworCQkJCXJldHVybiByZXN1bHQ7CisJCQl9CisJCQlkZWZhdWx0OiByZXR1cm4gZGVmYXVsdENhc2UodGhlRU9iamVjdCk7CisJCX0KKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5HZW9ncmFwaGljIEZlYXR1cmU8L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsKKwkgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KKwkgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5HZW9ncmFwaGljIEZlYXR1cmU8L2VtPicuCisJICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBUMSBjYXNlR2VvZ3JhcGhpY0ZlYXR1cmUoR2VvZ3JhcGhpY0ZlYXR1cmUgb2JqZWN0KSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPlJlZ2lvbjwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOworCSAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgorCSAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPlJlZ2lvbjwvZW0+Jy4KKwkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFQxIGNhc2VSZWdpb24oUmVnaW9uIG9iamVjdCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5Ob2RlPC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7CisJICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCisJICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+Tm9kZTwvZW0+Jy4KKwkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFQxIGNhc2VOb2RlKE5vZGUgb2JqZWN0KSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkNvbXBhcmFibGU8L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsKKwkgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KKwkgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5Db21wYXJhYmxlPC9lbT4nLgorCSAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgPFQ+IFQxIGNhc2VDb21wYXJhYmxlKENvbXBhcmFibGU8VD4gb2JqZWN0KSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPklkZW50aWZpYWJsZTwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOworCSAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgorCSAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPklkZW50aWZpYWJsZTwvZW0+Jy4KKwkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFQxIGNhc2VJZGVudGlmaWFibGUoSWRlbnRpZmlhYmxlIG9iamVjdCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5Ob2RlPC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7CisJICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCisJICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+Tm9kZTwvZW0+Jy4KKwkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFQxIGNhc2VHcmFwaF9Ob2RlKE5vZGUgb2JqZWN0KSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkVPYmplY3Q8L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsKKwkgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaCwgYnV0IHRoaXMgaXMgdGhlIGxhc3QgY2FzZSBhbnl3YXkuCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCisJICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+RU9iamVjdDwvZW0+Jy4KKwkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFQxIGRlZmF1bHRDYXNlKEVPYmplY3Qgb2JqZWN0KSB7CisJCXJldHVybiBudWxsOworCX0KKworfSAvL05vZGVzU3dpdGNoCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvdHlwZXMvQ2F0ZWdvcml6ZWRUeXBlLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvdHlwZXMvQ2F0ZWdvcml6ZWRUeXBlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTU1YzViYgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy90eXBlcy9DYXRlZ29yaXplZFR5cGUuamF2YQpAQCAtMCwwICsxLDI5IEBACisvLyBDYXRlZ29yaXplZFR5cGUuamF2YQorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLnR5cGVzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA5IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5EZWNvcmF0b3I7CisKKy8qKgorICogQSA8Y29kZT5DYXRhZ29yaXplZFR5cGU8L2NvZGU+IGlzIGEgbWFya2VyIGludGVyZmFjZSBmb3IgdGhlIHR5cGVzIG9mCisgKiBwcm9wZXJ0aWVzIHNwZWNpZmllZCBmb3Ige0BsaW5rIERlY29yYXRvcn1zLiBUaGUgaW50ZW50IGlzIHRoYXQgcGFydGljdWxhcgorICogcHJvcGVydGllcyBjYW4gYmUgIm1hcmtlZCIgYXMgaGF2aW5nIGEgImNhdGVnb3J5IiBieSB0aGUgdHlwZSBvZiB0aGUKKyAqIHByb3BlcnR5LiBUaGlzIHdpbGwgZmFjaWxpdGF0ZSB0aGluZ3MgbGlrZSBncm91cGluZyBwcm9wZXJ0aWVzIGluIHRoZSBzYW1lCisgKiBjYXRlZ29yeSB0b2dldGhlciBpbiBhIHVzZXIgaW50ZXJmYWNlLgorICogCisgKiBAbW9kZWwgaW50ZXJmYWNlPSJ0cnVlIgorICovCitwdWJsaWMgaW50ZXJmYWNlIENhdGVnb3JpemVkVHlwZSBleHRlbmRzIEVPYmplY3QgeworCS8vIE5vdGhpbmcKK30gLy8gQ2F0ZWdvcml6ZWRUeXBlCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvdHlwZXMvUmF0ZS5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL3R5cGVzL1JhdGUuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MjM2MDhkCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL3R5cGVzL1JhdGUuamF2YQpAQCAtMCwwICsxLDM4IEBACisvLyBSYXRlLmphdmEKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy50eXBlczsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0OworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA5IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqCisgKiBBIDxjb2RlPlJhdGU8L2NvZGU+IGlzIGEgdHlwZSB0aGF0IHNwZWNpZmllcyBhIHJhdGUgb2YgY2hhbmdlIG9mIG9uZSB1bml0IG9mCisgKiBtZWFzdXJlIHdpdGggcmVzcGVjdCB0byBhbm90aGVyIHVuaXQgb2YgbWVhc3VyZS4KKyAqIAorICogQG1vZGVsIGFic3RyYWN0PSJ0cnVlIgorICovCitwdWJsaWMgaW50ZXJmYWNlIFJhdGUgZXh0ZW5kcyBFT2JqZWN0IHsKKwkvKioKKwkgKiBAbW9kZWwKKwkgKi8KKwlkb3VibGUgZ2V0UmF0ZSgpOworCisJLyoqCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy50eXBlcy5SYXRlI2dldFJhdGUgPGVtPlJhdGU8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPlJhdGU8L2VtPicgYXR0cmlidXRlLgorCSAqIEBzZWUgI2dldFJhdGUoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwl2b2lkIHNldFJhdGUoZG91YmxlIHZhbHVlKTsKK30gLy8gUmF0ZQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL3R5cGVzL1R5cGVzRmFjdG9yeS5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL3R5cGVzL1R5cGVzRmFjdG9yeS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjExZGQ2ODUKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvdHlwZXMvVHlwZXNGYWN0b3J5LmphdmEKQEAgLTAsMCArMSw0MiBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLnR5cGVzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA5IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FRmFjdG9yeTsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogVGhlIDxiPkZhY3Rvcnk8L2I+IGZvciB0aGUgbW9kZWwuCisgKiBJdCBwcm92aWRlcyBhIGNyZWF0ZSBtZXRob2QgZm9yIGVhY2ggbm9uLWFic3RyYWN0IGNsYXNzIG9mIHRoZSBtb2RlbC4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLnR5cGVzLlR5cGVzUGFja2FnZQorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgaW50ZXJmYWNlIFR5cGVzRmFjdG9yeSBleHRlbmRzIEVGYWN0b3J5IHsKKwkvKioKKwkgKiBUaGUgc2luZ2xldG9uIGluc3RhbmNlIG9mIHRoZSBmYWN0b3J5LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCVR5cGVzRmFjdG9yeSBlSU5TVEFOQ0UgPSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLnR5cGVzLmltcGwuVHlwZXNGYWN0b3J5SW1wbC5pbml0KCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBwYWNrYWdlIHN1cHBvcnRlZCBieSB0aGlzIGZhY3RvcnkuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBwYWNrYWdlIHN1cHBvcnRlZCBieSB0aGlzIGZhY3RvcnkuCisJICogQGdlbmVyYXRlZAorCSAqLworCVR5cGVzUGFja2FnZSBnZXRUeXBlc1BhY2thZ2UoKTsKKworfSAvL1R5cGVzRmFjdG9yeQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL3R5cGVzL1R5cGVzUGFja2FnZS5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL3R5cGVzL1R5cGVzUGFja2FnZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQzYjg3YmUKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvdHlwZXMvVHlwZXNQYWNrYWdlLmphdmEKQEAgLTAsMCArMSwxOTcgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy50eXBlczsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUF0dHJpYnV0ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FUGFja2FnZTsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogVGhlIDxiPlBhY2thZ2U8L2I+IGZvciB0aGUgbW9kZWwuCisgKiBJdCBjb250YWlucyBhY2Nlc3NvcnMgZm9yIHRoZSBtZXRhIG9iamVjdHMgdG8gcmVwcmVzZW50CisgKiA8dWw+CisgKiAgIDxsaT5lYWNoIGNsYXNzLDwvbGk+CisgKiAgIDxsaT5lYWNoIGZlYXR1cmUgb2YgZWFjaCBjbGFzcyw8L2xpPgorICogICA8bGk+ZWFjaCBlbnVtLDwvbGk+CisgKiAgIDxsaT5hbmQgZWFjaCBkYXRhIHR5cGU8L2xpPgorICogPC91bD4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLnR5cGVzLlR5cGVzRmFjdG9yeQorICogQG1vZGVsIGtpbmQ9InBhY2thZ2UiCisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBpbnRlcmZhY2UgVHlwZXNQYWNrYWdlIGV4dGVuZHMgRVBhY2thZ2UgeworCS8qKgorCSAqIFRoZSBwYWNrYWdlIG5hbWUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJU3RyaW5nIGVOQU1FID0gInR5cGVzIjsgLy8kTk9OLU5MUy0xJAorCisJLyoqCisJICogVGhlIHBhY2thZ2UgbmFtZXNwYWNlIFVSSS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlTdHJpbmcgZU5TX1VSSSA9ICJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvdHlwZXMuZWNvcmUiOyAvLyROT04tTkxTLTEkCisKKwkvKioKKwkgKiBUaGUgcGFja2FnZSBuYW1lc3BhY2UgbmFtZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlTdHJpbmcgZU5TX1BSRUZJWCA9ICJvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLnR5cGVzIjsgLy8kTk9OLU5MUy0xJAorCisJLyoqCisJICogVGhlIHNpbmdsZXRvbiBpbnN0YW5jZSBvZiB0aGUgcGFja2FnZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlUeXBlc1BhY2thZ2UgZUlOU1RBTkNFID0gb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy50eXBlcy5pbXBsLlR5cGVzUGFja2FnZUltcGwuaW5pdCgpOworCisJLyoqCisJICogVGhlIG1ldGEgb2JqZWN0IGlkIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLnR5cGVzLkNhdGVnb3JpemVkVHlwZSA8ZW0+Q2F0ZWdvcml6ZWQgVHlwZTwvZW0+fScgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMudHlwZXMuQ2F0ZWdvcml6ZWRUeXBlCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLnR5cGVzLmltcGwuVHlwZXNQYWNrYWdlSW1wbCNnZXRDYXRlZ29yaXplZFR5cGUoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlpbnQgQ0FURUdPUklaRURfVFlQRSA9IDA7CisKKwkvKioKKwkgKiBUaGUgbnVtYmVyIG9mIHN0cnVjdHVyYWwgZmVhdHVyZXMgb2YgdGhlICc8ZW0+Q2F0ZWdvcml6ZWQgVHlwZTwvZW0+JyBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBDQVRFR09SSVpFRF9UWVBFX0ZFQVRVUkVfQ09VTlQgPSAwOworCisJLyoqCisJICogVGhlIG1ldGEgb2JqZWN0IGlkIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLnR5cGVzLmltcGwuUmF0ZUltcGwgPGVtPlJhdGU8L2VtPn0nIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLnR5cGVzLmltcGwuUmF0ZUltcGwKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMudHlwZXMuaW1wbC5UeXBlc1BhY2thZ2VJbXBsI2dldFJhdGUoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlpbnQgUkFURSA9IDE7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+UmF0ZTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFJBVEVfX1JBVEUgPSAwOworCisJLyoqCisJICogVGhlIG51bWJlciBvZiBzdHJ1Y3R1cmFsIGZlYXR1cmVzIG9mIHRoZSAnPGVtPlJhdGU8L2VtPicgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgUkFURV9GRUFUVVJFX0NPVU5UID0gMTsKKworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy50eXBlcy5DYXRlZ29yaXplZFR5cGUgPGVtPkNhdGVnb3JpemVkIFR5cGU8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICc8ZW0+Q2F0ZWdvcml6ZWQgVHlwZTwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMudHlwZXMuQ2F0ZWdvcml6ZWRUeXBlCisJICogQGdlbmVyYXRlZAorCSAqLworCUVDbGFzcyBnZXRDYXRlZ29yaXplZFR5cGUoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMudHlwZXMuUmF0ZSA8ZW0+UmF0ZTwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJzxlbT5SYXRlPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy50eXBlcy5SYXRlCisJICogQGdlbmVyYXRlZAorCSAqLworCUVDbGFzcyBnZXRSYXRlKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMudHlwZXMuUmF0ZSNnZXRSYXRlIDxlbT5SYXRlPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+UmF0ZTwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMudHlwZXMuUmF0ZSNnZXRSYXRlKCkKKwkgKiBAc2VlICNnZXRSYXRlKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUF0dHJpYnV0ZSBnZXRSYXRlX1JhdGUoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIGZhY3RvcnkgdGhhdCBjcmVhdGVzIHRoZSBpbnN0YW5jZXMgb2YgdGhlIG1vZGVsLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgZmFjdG9yeSB0aGF0IGNyZWF0ZXMgdGhlIGluc3RhbmNlcyBvZiB0aGUgbW9kZWwuCisJICogQGdlbmVyYXRlZAorCSAqLworCVR5cGVzRmFjdG9yeSBnZXRUeXBlc0ZhY3RvcnkoKTsKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogRGVmaW5lcyBsaXRlcmFscyBmb3IgdGhlIG1ldGEgb2JqZWN0cyB0aGF0IHJlcHJlc2VudAorCSAqIDx1bD4KKwkgKiAgIDxsaT5lYWNoIGNsYXNzLDwvbGk+CisJICogICA8bGk+ZWFjaCBmZWF0dXJlIG9mIGVhY2ggY2xhc3MsPC9saT4KKwkgKiAgIDxsaT5lYWNoIGVudW0sPC9saT4KKwkgKiAgIDxsaT5hbmQgZWFjaCBkYXRhIHR5cGU8L2xpPgorCSAqIDwvdWw+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCWludGVyZmFjZSBMaXRlcmFscyB7CisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy50eXBlcy5DYXRlZ29yaXplZFR5cGUgPGVtPkNhdGVnb3JpemVkIFR5cGU8L2VtPn0nIGNsYXNzLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLnR5cGVzLkNhdGVnb3JpemVkVHlwZQorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMudHlwZXMuaW1wbC5UeXBlc1BhY2thZ2VJbXBsI2dldENhdGVnb3JpemVkVHlwZSgpCisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVDbGFzcyBDQVRFR09SSVpFRF9UWVBFID0gZUlOU1RBTkNFLmdldENhdGVnb3JpemVkVHlwZSgpOworCisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy50eXBlcy5pbXBsLlJhdGVJbXBsIDxlbT5SYXRlPC9lbT59JyBjbGFzcy4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy50eXBlcy5pbXBsLlJhdGVJbXBsCisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy50eXBlcy5pbXBsLlR5cGVzUGFja2FnZUltcGwjZ2V0UmF0ZSgpCisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVDbGFzcyBSQVRFID0gZUlOU1RBTkNFLmdldFJhdGUoKTsKKworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPlJhdGU8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUF0dHJpYnV0ZSBSQVRFX19SQVRFID0gZUlOU1RBTkNFLmdldFJhdGVfUmF0ZSgpOworCisJfQorCit9IC8vVHlwZXNQYWNrYWdlCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvdHlwZXMvaW1wbC9SYXRlSW1wbC5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL3R5cGVzL2ltcGwvUmF0ZUltcGwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNjI3MjRlCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL3R5cGVzL2ltcGwvUmF0ZUltcGwuamF2YQpAQCAtMCwwICsxLDE2OSBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLnR5cGVzLmltcGw7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDkgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLmltcGwuRU5vdGlmaWNhdGlvbkltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLmltcGwuRU9iamVjdEltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy50eXBlcy5SYXRlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMudHlwZXMuVHlwZXNQYWNrYWdlOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiBBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+UmF0ZTwvYj48L2VtPicuCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIDxwPgorICogVGhlIGZvbGxvd2luZyBmZWF0dXJlcyBhcmUgaW1wbGVtZW50ZWQ6CisgKiA8dWw+CisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy50eXBlcy5pbXBsLlJhdGVJbXBsI2dldFJhdGUgPGVtPlJhdGU8L2VtPn08L2xpPgorICogPC91bD4KKyAqIDwvcD4KKyAqCisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBhYnN0cmFjdCBjbGFzcyBSYXRlSW1wbCBleHRlbmRzIEVPYmplY3RJbXBsIGltcGxlbWVudHMgUmF0ZSB7CisJLyoqCisJICogVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldFJhdGUoKSA8ZW0+UmF0ZTwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZ2V0UmF0ZSgpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBkb3VibGUgUkFURV9FREVGQVVMVCA9IDAuMDsKKworCS8qKgorCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldFJhdGUoKSA8ZW0+UmF0ZTwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZ2V0UmF0ZSgpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIGRvdWJsZSByYXRlID0gUkFURV9FREVGQVVMVDsKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBSYXRlSW1wbCgpIHsKKwkJc3VwZXIoKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgRUNsYXNzIGVTdGF0aWNDbGFzcygpIHsKKwkJcmV0dXJuIFR5cGVzUGFja2FnZS5MaXRlcmFscy5SQVRFOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBkb3VibGUgZ2V0UmF0ZSgpIHsKKwkJcmV0dXJuIHJhdGU7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgc2V0UmF0ZShkb3VibGUgbmV3UmF0ZSkgeworCQlkb3VibGUgb2xkUmF0ZSA9IHJhdGU7CisJCXJhdGUgPSBuZXdSYXRlOworCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpCisJCQllTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBUeXBlc1BhY2thZ2UuUkFURV9fUkFURSwgb2xkUmF0ZSwgcmF0ZSkpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBPYmplY3QgZUdldChpbnQgZmVhdHVyZUlELCBib29sZWFuIHJlc29sdmUsIGJvb2xlYW4gY29yZVR5cGUpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJCWNhc2UgVHlwZXNQYWNrYWdlLlJBVEVfX1JBVEU6CisJCQkJcmV0dXJuIGdldFJhdGUoKTsKKwkJfQorCQlyZXR1cm4gc3VwZXIuZUdldChmZWF0dXJlSUQsIHJlc29sdmUsIGNvcmVUeXBlKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBlU2V0KGludCBmZWF0dXJlSUQsIE9iamVjdCBuZXdWYWx1ZSkgeworCQlzd2l0Y2ggKGZlYXR1cmVJRCkgeworCQkJY2FzZSBUeXBlc1BhY2thZ2UuUkFURV9fUkFURToKKwkJCQlzZXRSYXRlKChEb3VibGUpbmV3VmFsdWUpOworCQkJCXJldHVybjsKKwkJfQorCQlzdXBlci5lU2V0KGZlYXR1cmVJRCwgbmV3VmFsdWUpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGVVbnNldChpbnQgZmVhdHVyZUlEKSB7CisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7CisJCQljYXNlIFR5cGVzUGFja2FnZS5SQVRFX19SQVRFOgorCQkJCXNldFJhdGUoUkFURV9FREVGQVVMVCk7CisJCQkJcmV0dXJuOworCQl9CisJCXN1cGVyLmVVbnNldChmZWF0dXJlSUQpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBib29sZWFuIGVJc1NldChpbnQgZmVhdHVyZUlEKSB7CisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7CisJCQljYXNlIFR5cGVzUGFja2FnZS5SQVRFX19SQVRFOgorCQkJCXJldHVybiByYXRlICE9IFJBVEVfRURFRkFVTFQ7CisJCX0KKwkJcmV0dXJuIHN1cGVyLmVJc1NldChmZWF0dXJlSUQpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKSB7CisJCWlmIChlSXNQcm94eSgpKSByZXR1cm4gc3VwZXIudG9TdHJpbmcoKTsKKworCQlTdHJpbmdCdWZmZXIgcmVzdWx0ID0gbmV3IFN0cmluZ0J1ZmZlcihzdXBlci50b1N0cmluZygpKTsKKwkJcmVzdWx0LmFwcGVuZCgiIChyYXRlOiAiKTsgLy8kTk9OLU5MUy0xJAorCQlyZXN1bHQuYXBwZW5kKHJhdGUpOworCQlyZXN1bHQuYXBwZW5kKCcpJyk7CisJCXJldHVybiByZXN1bHQudG9TdHJpbmcoKTsKKwl9CisKK30gLy9SYXRlSW1wbApkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL3R5cGVzL2ltcGwvVHlwZXNGYWN0b3J5SW1wbC5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL3R5cGVzL2ltcGwvVHlwZXNGYWN0b3J5SW1wbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhlYmJlZDQKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvdHlwZXMvaW1wbC9UeXBlc0ZhY3RvcnlJbXBsLmphdmEKQEAgLTAsMCArMSw5MiBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLnR5cGVzLmltcGw7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDkgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzczsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRVBhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLmltcGwuRUZhY3RvcnlJbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5wbHVnaW4uRWNvcmVQbHVnaW47CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy50eXBlcy4qOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMudHlwZXMuVHlwZXNGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMudHlwZXMuVHlwZXNQYWNrYWdlOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiBBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgbW9kZWwgPGI+RmFjdG9yeTwvYj4uCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIFR5cGVzRmFjdG9yeUltcGwgZXh0ZW5kcyBFRmFjdG9yeUltcGwgaW1wbGVtZW50cyBUeXBlc0ZhY3RvcnkgeworCS8qKgorCSAqIENyZWF0ZXMgdGhlIGRlZmF1bHQgZmFjdG9yeSBpbXBsZW1lbnRhdGlvbi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgc3RhdGljIFR5cGVzRmFjdG9yeSBpbml0KCkgeworCQl0cnkgeworCQkJVHlwZXNGYWN0b3J5IHRoZVR5cGVzRmFjdG9yeSA9IChUeXBlc0ZhY3RvcnkpRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RUZhY3RvcnkoImh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy90eXBlcy5lY29yZSIpOyAvLyROT04tTkxTLTEkIAorCQkJaWYgKHRoZVR5cGVzRmFjdG9yeSAhPSBudWxsKSB7CisJCQkJcmV0dXJuIHRoZVR5cGVzRmFjdG9yeTsKKwkJCX0KKwkJfQorCQljYXRjaCAoRXhjZXB0aW9uIGV4Y2VwdGlvbikgeworCQkJRWNvcmVQbHVnaW4uSU5TVEFOQ0UubG9nKGV4Y2VwdGlvbik7CisJCX0KKwkJcmV0dXJuIG5ldyBUeXBlc0ZhY3RvcnlJbXBsKCk7CisJfQorCisJLyoqCisJICogQ3JlYXRlcyBhbiBpbnN0YW5jZSBvZiB0aGUgZmFjdG9yeS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVHlwZXNGYWN0b3J5SW1wbCgpIHsKKwkJc3VwZXIoKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgRU9iamVjdCBjcmVhdGUoRUNsYXNzIGVDbGFzcykgeworCQlzd2l0Y2ggKGVDbGFzcy5nZXRDbGFzc2lmaWVySUQoKSkgeworCQkJZGVmYXVsdDoKKwkJCQl0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJUaGUgY2xhc3MgJyIgKyBlQ2xhc3MuZ2V0TmFtZSgpICsgIicgaXMgbm90IGEgdmFsaWQgY2xhc3NpZmllciIpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKKwkJfQorCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBUeXBlc1BhY2thZ2UgZ2V0VHlwZXNQYWNrYWdlKCkgeworCQlyZXR1cm4gKFR5cGVzUGFja2FnZSlnZXRFUGFja2FnZSgpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGRlcHJlY2F0ZWQKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQERlcHJlY2F0ZWQKKwlwdWJsaWMgc3RhdGljIFR5cGVzUGFja2FnZSBnZXRQYWNrYWdlKCkgeworCQlyZXR1cm4gVHlwZXNQYWNrYWdlLmVJTlNUQU5DRTsKKwl9CisKK30gLy9UeXBlc0ZhY3RvcnlJbXBsCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvdHlwZXMvaW1wbC9UeXBlc1BhY2thZ2VJbXBsLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvdHlwZXMvaW1wbC9UeXBlc1BhY2thZ2VJbXBsLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjZhOGVlMgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy90eXBlcy9pbXBsL1R5cGVzUGFja2FnZUltcGwuamF2YQpAQCAtMCwwICsxLDIzOCBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLnR5cGVzLmltcGw7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDkgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVBdHRyaWJ1dGU7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzczsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRVBhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLmltcGwuRVBhY2thZ2VJbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uQ29tbW9uUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguR3JhcGhQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5Nb2RlbFBhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLk1vZGlmaWVyUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2NlbmFyaW8uU2NlbmFyaW9QYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zZXF1ZW5jZXIuU2VxdWVuY2VyUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc29sdmVyLlNvbHZlclBhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5lZGdlcy5FZGdlc1BhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5lZGdlcy5pbXBsLkVkZ2VzUGFja2FnZUltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuTGFiZWxzUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5pbXBsLkxhYmVsc1BhY2thZ2VJbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubm9kZXMuTm9kZXNQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubm9kZXMuaW1wbC5Ob2Rlc1BhY2thZ2VJbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMudHlwZXMuQ2F0ZWdvcml6ZWRUeXBlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMudHlwZXMuUmF0ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLnR5cGVzLlR5cGVzRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLnR5cGVzLlR5cGVzUGFja2FnZTsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIG1vZGVsIDxiPlBhY2thZ2U8L2I+LgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBUeXBlc1BhY2thZ2VJbXBsIGV4dGVuZHMgRVBhY2thZ2VJbXBsIGltcGxlbWVudHMgVHlwZXNQYWNrYWdlIHsKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcml2YXRlIEVDbGFzcyBjYXRlZ29yaXplZFR5cGVFQ2xhc3MgPSBudWxsOworCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJpdmF0ZSBFQ2xhc3MgcmF0ZUVDbGFzcyA9IG51bGw7CisKKwkvKioKKwkgKiBDcmVhdGVzIGFuIGluc3RhbmNlIG9mIHRoZSBtb2RlbCA8Yj5QYWNrYWdlPC9iPiwgcmVnaXN0ZXJlZCB3aXRoCisJICoge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FUGFja2FnZS5SZWdpc3RyeSBFUGFja2FnZS5SZWdpc3RyeX0gYnkgdGhlIHBhY2thZ2UKKwkgKiBwYWNrYWdlIFVSSSB2YWx1ZS4KKwkgKiA8cD5Ob3RlOiB0aGUgY29ycmVjdCB3YXkgdG8gY3JlYXRlIHRoZSBwYWNrYWdlIGlzIHZpYSB0aGUgc3RhdGljCisJICogZmFjdG9yeSBtZXRob2Qge0BsaW5rICNpbml0IGluaXQoKX0sIHdoaWNoIGFsc28gcGVyZm9ybXMKKwkgKiBpbml0aWFsaXphdGlvbiBvZiB0aGUgcGFja2FnZSwgb3IgcmV0dXJucyB0aGUgcmVnaXN0ZXJlZCBwYWNrYWdlLAorCSAqIGlmIG9uZSBhbHJlYWR5IGV4aXN0cy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVQYWNrYWdlLlJlZ2lzdHJ5CisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLnR5cGVzLlR5cGVzUGFja2FnZSNlTlNfVVJJCisJICogQHNlZSAjaW5pdCgpCisJICogQGdlbmVyYXRlZAorCSAqLworCXByaXZhdGUgVHlwZXNQYWNrYWdlSW1wbCgpIHsKKwkJc3VwZXIoZU5TX1VSSSwgVHlwZXNGYWN0b3J5LmVJTlNUQU5DRSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJpdmF0ZSBzdGF0aWMgYm9vbGVhbiBpc0luaXRlZCA9IGZhbHNlOworCisJLyoqCisJICogQ3JlYXRlcywgcmVnaXN0ZXJzLCBhbmQgaW5pdGlhbGl6ZXMgdGhlIDxiPlBhY2thZ2U8L2I+IGZvciB0aGlzIG1vZGVsLCBhbmQgZm9yIGFueSBvdGhlcnMgdXBvbiB3aGljaCBpdCBkZXBlbmRzLgorCSAqIAorCSAqIDxwPlRoaXMgbWV0aG9kIGlzIHVzZWQgdG8gaW5pdGlhbGl6ZSB7QGxpbmsgVHlwZXNQYWNrYWdlI2VJTlNUQU5DRX0gd2hlbiB0aGF0IGZpZWxkIGlzIGFjY2Vzc2VkLgorCSAqIENsaWVudHMgc2hvdWxkIG5vdCBpbnZva2UgaXQgZGlyZWN0bHkuIEluc3RlYWQsIHRoZXkgc2hvdWxkIHNpbXBseSBhY2Nlc3MgdGhhdCBmaWVsZCB0byBvYnRhaW4gdGhlIHBhY2thZ2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNlTlNfVVJJCisJICogQHNlZSAjY3JlYXRlUGFja2FnZUNvbnRlbnRzKCkKKwkgKiBAc2VlICNpbml0aWFsaXplUGFja2FnZUNvbnRlbnRzKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHN0YXRpYyBUeXBlc1BhY2thZ2UgaW5pdCgpIHsKKwkJaWYgKGlzSW5pdGVkKSByZXR1cm4gKFR5cGVzUGFja2FnZSlFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShUeXBlc1BhY2thZ2UuZU5TX1VSSSk7CisKKwkJLy8gT2J0YWluIG9yIGNyZWF0ZSBhbmQgcmVnaXN0ZXIgcGFja2FnZQorCQlUeXBlc1BhY2thZ2VJbXBsIHRoZVR5cGVzUGFja2FnZSA9IChUeXBlc1BhY2thZ2VJbXBsKShFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXQoZU5TX1VSSSkgaW5zdGFuY2VvZiBUeXBlc1BhY2thZ2VJbXBsID8gRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0KGVOU19VUkkpIDogbmV3IFR5cGVzUGFja2FnZUltcGwoKSk7CisKKwkJaXNJbml0ZWQgPSB0cnVlOworCisJCS8vIEluaXRpYWxpemUgc2ltcGxlIGRlcGVuZGVuY2llcworCQlHcmFwaFBhY2thZ2UuZUlOU1RBTkNFLmVDbGFzcygpOworCQlDb21tb25QYWNrYWdlLmVJTlNUQU5DRS5lQ2xhc3MoKTsKKwkJTW9kZWxQYWNrYWdlLmVJTlNUQU5DRS5lQ2xhc3MoKTsKKwkJTW9kaWZpZXJQYWNrYWdlLmVJTlNUQU5DRS5lQ2xhc3MoKTsKKwkJU2NlbmFyaW9QYWNrYWdlLmVJTlNUQU5DRS5lQ2xhc3MoKTsKKwkJU2VxdWVuY2VyUGFja2FnZS5lSU5TVEFOQ0UuZUNsYXNzKCk7CisJCVNvbHZlclBhY2thZ2UuZUlOU1RBTkNFLmVDbGFzcygpOworCisJCS8vIE9idGFpbiBvciBjcmVhdGUgYW5kIHJlZ2lzdGVyIGludGVyZGVwZW5kZW5jaWVzCisJCUVkZ2VzUGFja2FnZUltcGwgdGhlRWRnZXNQYWNrYWdlID0gKEVkZ2VzUGFja2FnZUltcGwpKEVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVQYWNrYWdlKEVkZ2VzUGFja2FnZS5lTlNfVVJJKSBpbnN0YW5jZW9mIEVkZ2VzUGFja2FnZUltcGwgPyBFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShFZGdlc1BhY2thZ2UuZU5TX1VSSSkgOiBFZGdlc1BhY2thZ2UuZUlOU1RBTkNFKTsKKwkJTGFiZWxzUGFja2FnZUltcGwgdGhlTGFiZWxzUGFja2FnZSA9IChMYWJlbHNQYWNrYWdlSW1wbCkoRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RVBhY2thZ2UoTGFiZWxzUGFja2FnZS5lTlNfVVJJKSBpbnN0YW5jZW9mIExhYmVsc1BhY2thZ2VJbXBsID8gRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RVBhY2thZ2UoTGFiZWxzUGFja2FnZS5lTlNfVVJJKSA6IExhYmVsc1BhY2thZ2UuZUlOU1RBTkNFKTsKKwkJTm9kZXNQYWNrYWdlSW1wbCB0aGVOb2Rlc1BhY2thZ2UgPSAoTm9kZXNQYWNrYWdlSW1wbCkoRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RVBhY2thZ2UoTm9kZXNQYWNrYWdlLmVOU19VUkkpIGluc3RhbmNlb2YgTm9kZXNQYWNrYWdlSW1wbCA/IEVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVQYWNrYWdlKE5vZGVzUGFja2FnZS5lTlNfVVJJKSA6IE5vZGVzUGFja2FnZS5lSU5TVEFOQ0UpOworCisJCS8vIENyZWF0ZSBwYWNrYWdlIG1ldGEtZGF0YSBvYmplY3RzCisJCXRoZVR5cGVzUGFja2FnZS5jcmVhdGVQYWNrYWdlQ29udGVudHMoKTsKKwkJdGhlRWRnZXNQYWNrYWdlLmNyZWF0ZVBhY2thZ2VDb250ZW50cygpOworCQl0aGVMYWJlbHNQYWNrYWdlLmNyZWF0ZVBhY2thZ2VDb250ZW50cygpOworCQl0aGVOb2Rlc1BhY2thZ2UuY3JlYXRlUGFja2FnZUNvbnRlbnRzKCk7CisKKwkJLy8gSW5pdGlhbGl6ZSBjcmVhdGVkIG1ldGEtZGF0YQorCQl0aGVUeXBlc1BhY2thZ2UuaW5pdGlhbGl6ZVBhY2thZ2VDb250ZW50cygpOworCQl0aGVFZGdlc1BhY2thZ2UuaW5pdGlhbGl6ZVBhY2thZ2VDb250ZW50cygpOworCQl0aGVMYWJlbHNQYWNrYWdlLmluaXRpYWxpemVQYWNrYWdlQ29udGVudHMoKTsKKwkJdGhlTm9kZXNQYWNrYWdlLmluaXRpYWxpemVQYWNrYWdlQ29udGVudHMoKTsKKworCQkvLyBNYXJrIG1ldGEtZGF0YSB0byBpbmRpY2F0ZSBpdCBjYW4ndCBiZSBjaGFuZ2VkCisJCXRoZVR5cGVzUGFja2FnZS5mcmVlemUoKTsKKworICAKKwkJLy8gVXBkYXRlIHRoZSByZWdpc3RyeSBhbmQgcmV0dXJuIHRoZSBwYWNrYWdlCisJCUVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLnB1dChUeXBlc1BhY2thZ2UuZU5TX1VSSSwgdGhlVHlwZXNQYWNrYWdlKTsKKwkJcmV0dXJuIHRoZVR5cGVzUGFja2FnZTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUNsYXNzIGdldENhdGVnb3JpemVkVHlwZSgpIHsKKwkJcmV0dXJuIGNhdGVnb3JpemVkVHlwZUVDbGFzczsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUNsYXNzIGdldFJhdGUoKSB7CisJCXJldHVybiByYXRlRUNsYXNzOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQXR0cmlidXRlIGdldFJhdGVfUmF0ZSgpIHsKKwkJcmV0dXJuIChFQXR0cmlidXRlKXJhdGVFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgwKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVHlwZXNGYWN0b3J5IGdldFR5cGVzRmFjdG9yeSgpIHsKKwkJcmV0dXJuIChUeXBlc0ZhY3RvcnkpZ2V0RUZhY3RvcnlJbnN0YW5jZSgpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByaXZhdGUgYm9vbGVhbiBpc0NyZWF0ZWQgPSBmYWxzZTsKKworCS8qKgorCSAqIENyZWF0ZXMgdGhlIG1ldGEtbW9kZWwgb2JqZWN0cyBmb3IgdGhlIHBhY2thZ2UuICBUaGlzIG1ldGhvZCBpcworCSAqIGd1YXJkZWQgdG8gaGF2ZSBubyBhZmZlY3Qgb24gYW55IGludm9jYXRpb24gYnV0IGl0cyBmaXJzdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBjcmVhdGVQYWNrYWdlQ29udGVudHMoKSB7CisJCWlmIChpc0NyZWF0ZWQpIHJldHVybjsKKwkJaXNDcmVhdGVkID0gdHJ1ZTsKKworCQkvLyBDcmVhdGUgY2xhc3NlcyBhbmQgdGhlaXIgZmVhdHVyZXMKKwkJY2F0ZWdvcml6ZWRUeXBlRUNsYXNzID0gY3JlYXRlRUNsYXNzKENBVEVHT1JJWkVEX1RZUEUpOworCisJCXJhdGVFQ2xhc3MgPSBjcmVhdGVFQ2xhc3MoUkFURSk7CisJCWNyZWF0ZUVBdHRyaWJ1dGUocmF0ZUVDbGFzcywgUkFURV9fUkFURSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJpdmF0ZSBib29sZWFuIGlzSW5pdGlhbGl6ZWQgPSBmYWxzZTsKKworCS8qKgorCSAqIENvbXBsZXRlIHRoZSBpbml0aWFsaXphdGlvbiBvZiB0aGUgcGFja2FnZSBhbmQgaXRzIG1ldGEtbW9kZWwuICBUaGlzCisJICogbWV0aG9kIGlzIGd1YXJkZWQgdG8gaGF2ZSBubyBhZmZlY3Qgb24gYW55IGludm9jYXRpb24gYnV0IGl0cyBmaXJzdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBpbml0aWFsaXplUGFja2FnZUNvbnRlbnRzKCkgeworCQlpZiAoaXNJbml0aWFsaXplZCkgcmV0dXJuOworCQlpc0luaXRpYWxpemVkID0gdHJ1ZTsKKworCQkvLyBJbml0aWFsaXplIHBhY2thZ2UKKwkJc2V0TmFtZShlTkFNRSk7CisJCXNldE5zUHJlZml4KGVOU19QUkVGSVgpOworCQlzZXROc1VSSShlTlNfVVJJKTsKKworCQkvLyBDcmVhdGUgdHlwZSBwYXJhbWV0ZXJzCisKKwkJLy8gU2V0IGJvdW5kcyBmb3IgdHlwZSBwYXJhbWV0ZXJzCisKKwkJLy8gQWRkIHN1cGVydHlwZXMgdG8gY2xhc3NlcworCisJCS8vIEluaXRpYWxpemUgY2xhc3NlcyBhbmQgZmVhdHVyZXM7IGFkZCBvcGVyYXRpb25zIGFuZCBwYXJhbWV0ZXJzCisJCWluaXRFQ2xhc3MoY2F0ZWdvcml6ZWRUeXBlRUNsYXNzLCBDYXRlZ29yaXplZFR5cGUuY2xhc3MsICJDYXRlZ29yaXplZFR5cGUiLCBJU19BQlNUUkFDVCwgSVNfSU5URVJGQUNFLCBJU19HRU5FUkFURURfSU5TVEFOQ0VfQ0xBU1MpOyAvLyROT04tTkxTLTEkCisKKwkJaW5pdEVDbGFzcyhyYXRlRUNsYXNzLCBSYXRlLmNsYXNzLCAiUmF0ZSIsIElTX0FCU1RSQUNULCAhSVNfSU5URVJGQUNFLCBJU19HRU5FUkFURURfSU5TVEFOQ0VfQ0xBU1MpOyAvLyROT04tTkxTLTEkCisJCWluaXRFQXR0cmlidXRlKGdldFJhdGVfUmF0ZSgpLCBlY29yZVBhY2thZ2UuZ2V0RURvdWJsZSgpLCAicmF0ZSIsIG51bGwsIDAsIDEsIFJhdGUuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7IC8vJE5PTi1OTFMtMSQKKworCQkvLyBDcmVhdGUgcmVzb3VyY2UKKwkJY3JlYXRlUmVzb3VyY2UoZU5TX1VSSSk7CisJfQorCit9IC8vVHlwZXNQYWNrYWdlSW1wbApkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL3R5cGVzL3Byb3ZpZGVyL1JhdGVJdGVtUHJvdmlkZXIuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy90eXBlcy9wcm92aWRlci9SYXRlSXRlbVByb3ZpZGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODc5YjQxMgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy90eXBlcy9wcm92aWRlci9SYXRlSXRlbVByb3ZpZGVyLmphdmEKQEAgLTAsMCArMSwxNTEgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy50eXBlcy5wcm92aWRlcjsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOworaW1wb3J0IGphdmEudXRpbC5MaXN0OworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5SZXNvdXJjZUxvY2F0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JRWRpdGluZ0RvbWFpbkl0ZW1Qcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbUxhYmVsUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1Qcm9wZXJ0eVNvdXJjZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JU3RydWN0dXJlZEl0ZW1Db250ZW50UHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVRyZWVJdGVtQ29udGVudFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSXRlbVByb3ZpZGVyQWRhcHRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5WaWV3ZXJOb3RpZmljYXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5lZGdlcy5wcm92aWRlci5EZWZpbml0aW9uc0VkaXRQbHVnaW47CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy50eXBlcy5SYXRlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMudHlwZXMuVHlwZXNQYWNrYWdlOworCisvKioKKyAqIFRoaXMgaXMgdGhlIGl0ZW0gcHJvdmlkZXIgYWRhcHRlciBmb3IgYSB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy50eXBlcy5SYXRlfSBvYmplY3QuCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBSYXRlSXRlbVByb3ZpZGVyCisJZXh0ZW5kcyBJdGVtUHJvdmlkZXJBZGFwdGVyCisJaW1wbGVtZW50cworCQlJRWRpdGluZ0RvbWFpbkl0ZW1Qcm92aWRlciwKKwkJSVN0cnVjdHVyZWRJdGVtQ29udGVudFByb3ZpZGVyLAorCQlJVHJlZUl0ZW1Db250ZW50UHJvdmlkZXIsCisJCUlJdGVtTGFiZWxQcm92aWRlciwKKwkJSUl0ZW1Qcm9wZXJ0eVNvdXJjZSB7CisJLyoqCisJICogVGhpcyBjb25zdHJ1Y3RzIGFuIGluc3RhbmNlIGZyb20gYSBmYWN0b3J5IGFuZCBhIG5vdGlmaWVyLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBSYXRlSXRlbVByb3ZpZGVyKEFkYXB0ZXJGYWN0b3J5IGFkYXB0ZXJGYWN0b3J5KSB7CisJCXN1cGVyKGFkYXB0ZXJGYWN0b3J5KTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgdGhlIHByb3BlcnR5IGRlc2NyaXB0b3JzIGZvciB0aGUgYWRhcHRlZCBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgTGlzdDxJSXRlbVByb3BlcnR5RGVzY3JpcHRvcj4gZ2V0UHJvcGVydHlEZXNjcmlwdG9ycyhPYmplY3Qgb2JqZWN0KSB7CisJCWlmIChpdGVtUHJvcGVydHlEZXNjcmlwdG9ycyA9PSBudWxsKSB7CisJCQlzdXBlci5nZXRQcm9wZXJ0eURlc2NyaXB0b3JzKG9iamVjdCk7CisKKwkJCWFkZFJhdGVQcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0KTsKKwkJfQorCQlyZXR1cm4gaXRlbVByb3BlcnR5RGVzY3JpcHRvcnM7CisJfQorCisJLyoqCisJICogVGhpcyBhZGRzIGEgcHJvcGVydHkgZGVzY3JpcHRvciBmb3IgdGhlIFJhdGUgZmVhdHVyZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBhZGRSYXRlUHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdCBvYmplY3QpIHsKKwkJaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMuYWRkCisJCQkoY3JlYXRlSXRlbVByb3BlcnR5RGVzY3JpcHRvcgorCQkJCSgoKENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnkpYWRhcHRlckZhY3RvcnkpLmdldFJvb3RBZGFwdGVyRmFjdG9yeSgpLAorCQkJCSBnZXRSZXNvdXJjZUxvY2F0b3IoKSwKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfUmF0ZV9yYXRlX2ZlYXR1cmUiKSwgLy8kTk9OLU5MUy0xJAorCQkJCSBnZXRTdHJpbmcoIl9VSV9Qcm9wZXJ0eURlc2NyaXB0b3JfZGVzY3JpcHRpb24iLCAiX1VJX1JhdGVfcmF0ZV9mZWF0dXJlIiwgIl9VSV9SYXRlX3R5cGUiKSwgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkIC8vJE5PTi1OTFMtMyQKKwkJCQkgVHlwZXNQYWNrYWdlLkxpdGVyYWxzLlJBVEVfX1JBVEUsCisJCQkJIHRydWUsCisJCQkJIGZhbHNlLAorCQkJCSBmYWxzZSwKKwkJCQkgSXRlbVByb3BlcnR5RGVzY3JpcHRvci5SRUFMX1ZBTFVFX0lNQUdFLAorCQkJCSBudWxsLAorCQkJCSBudWxsKSk7CisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIHRoZSBsYWJlbCB0ZXh0IGZvciB0aGUgYWRhcHRlZCBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgU3RyaW5nIGdldFRleHQoT2JqZWN0IG9iamVjdCkgeworCQlSYXRlIHJhdGUgPSAoUmF0ZSlvYmplY3Q7CisJCXJldHVybiBnZXRTdHJpbmcoIl9VSV9SYXRlX3R5cGUiKSArICIgIiArIHJhdGUuZ2V0UmF0ZSgpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKKwl9CisKKwkvKioKKwkgKiBUaGlzIGhhbmRsZXMgbW9kZWwgbm90aWZpY2F0aW9ucyBieSBjYWxsaW5nIHtAbGluayAjdXBkYXRlQ2hpbGRyZW59IHRvIHVwZGF0ZSBhbnkgY2FjaGVkCisJICogY2hpbGRyZW4gYW5kIGJ5IGNyZWF0aW5nIGEgdmlld2VyIG5vdGlmaWNhdGlvbiwgd2hpY2ggaXQgcGFzc2VzIHRvIHtAbGluayAjZmlyZU5vdGlmeUNoYW5nZWR9LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIG5vdGlmeUNoYW5nZWQoTm90aWZpY2F0aW9uIG5vdGlmaWNhdGlvbikgeworCQl1cGRhdGVDaGlsZHJlbihub3RpZmljYXRpb24pOworCisJCXN3aXRjaCAobm90aWZpY2F0aW9uLmdldEZlYXR1cmVJRChSYXRlLmNsYXNzKSkgeworCQkJY2FzZSBUeXBlc1BhY2thZ2UuUkFURV9fUkFURToKKwkJCQlmaXJlTm90aWZ5Q2hhbmdlZChuZXcgVmlld2VyTm90aWZpY2F0aW9uKG5vdGlmaWNhdGlvbiwgbm90aWZpY2F0aW9uLmdldE5vdGlmaWVyKCksIGZhbHNlLCB0cnVlKSk7CisJCQkJcmV0dXJuOworCQl9CisJCXN1cGVyLm5vdGlmeUNoYW5nZWQobm90aWZpY2F0aW9uKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFkZHMge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lZGl0LmNvbW1hbmQuQ29tbWFuZFBhcmFtZXRlcn1zIGRlc2NyaWJpbmcgdGhlIGNoaWxkcmVuCisJICogdGhhdCBjYW4gYmUgY3JlYXRlZCB1bmRlciB0aGlzIG9iamVjdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgdm9pZCBjb2xsZWN0TmV3Q2hpbGREZXNjcmlwdG9ycyhDb2xsZWN0aW9uPE9iamVjdD4gbmV3Q2hpbGREZXNjcmlwdG9ycywgT2JqZWN0IG9iamVjdCkgeworCQlzdXBlci5jb2xsZWN0TmV3Q2hpbGREZXNjcmlwdG9ycyhuZXdDaGlsZERlc2NyaXB0b3JzLCBvYmplY3QpOworCX0KKworCS8qKgorCSAqIFJldHVybiB0aGUgcmVzb3VyY2UgbG9jYXRvciBmb3IgdGhpcyBpdGVtIHByb3ZpZGVyJ3MgcmVzb3VyY2VzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBSZXNvdXJjZUxvY2F0b3IgZ2V0UmVzb3VyY2VMb2NhdG9yKCkgeworCQlyZXR1cm4gRGVmaW5pdGlvbnNFZGl0UGx1Z2luLklOU1RBTkNFOworCX0KKworfQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL3R5cGVzL3Byb3ZpZGVyL1R5cGVzSXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy90eXBlcy9wcm92aWRlci9UeXBlc0l0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWU2OWQyNAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy90eXBlcy9wcm92aWRlci9UeXBlc0l0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5LmphdmEKQEAgLTAsMCArMSwxODIgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy50eXBlcy5wcm92aWRlcjsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OworaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuQWRhcHRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuQ2hhbmdlTm90aWZpZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5Db21wb3NlZEFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklDaGFuZ2VOb3RpZmllcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JRGlzcG9zYWJsZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JRWRpdGluZ0RvbWFpbkl0ZW1Qcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbUxhYmVsUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1Qcm9wZXJ0eVNvdXJjZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JTm90aWZ5Q2hhbmdlZExpc3RlbmVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklTdHJ1Y3R1cmVkSXRlbUNvbnRlbnRQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JVHJlZUl0ZW1Db250ZW50UHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy50eXBlcy51dGlsLlR5cGVzQWRhcHRlckZhY3Rvcnk7CisKKy8qKgorICogVGhpcyBpcyB0aGUgZmFjdG9yeSB0aGF0IGlzIHVzZWQgdG8gcHJvdmlkZSB0aGUgaW50ZXJmYWNlcyBuZWVkZWQgdG8gc3VwcG9ydCBWaWV3ZXJzLgorICogVGhlIGFkYXB0ZXJzIGdlbmVyYXRlZCBieSB0aGlzIGZhY3RvcnkgY29udmVydCBFTUYgYWRhcHRlciBub3RpZmljYXRpb25zIGludG8gY2FsbHMgdG8ge0BsaW5rICNmaXJlTm90aWZ5Q2hhbmdlZCBmaXJlTm90aWZ5Q2hhbmdlZH0uCisgKiBUaGUgYWRhcHRlcnMgYWxzbyBzdXBwb3J0IEVjbGlwc2UgcHJvcGVydHkgc2hlZXRzLgorICogTm90ZSB0aGF0IG1vc3Qgb2YgdGhlIGFkYXB0ZXJzIGFyZSBzaGFyZWQgYW1vbmcgbXVsdGlwbGUgaW5zdGFuY2VzLgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgVHlwZXNJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSBleHRlbmRzIFR5cGVzQWRhcHRlckZhY3RvcnkgaW1wbGVtZW50cyBDb21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5LCBJQ2hhbmdlTm90aWZpZXIsIElEaXNwb3NhYmxlIHsKKwkvKioKKwkgKiBUaGlzIGtlZXBzIHRyYWNrIG9mIHRoZSByb290IGFkYXB0ZXIgZmFjdG9yeSB0aGF0IGRlbGVnYXRlcyB0byB0aGlzIGFkYXB0ZXIgZmFjdG9yeS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgQ29tcG9zZWRBZGFwdGVyRmFjdG9yeSBwYXJlbnRBZGFwdGVyRmFjdG9yeTsKKworCS8qKgorCSAqIFRoaXMgaXMgdXNlZCB0byBpbXBsZW1lbnQge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklDaGFuZ2VOb3RpZmllcn0uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIElDaGFuZ2VOb3RpZmllciBjaGFuZ2VOb3RpZmllciA9IG5ldyBDaGFuZ2VOb3RpZmllcigpOworCisJLyoqCisJICogVGhpcyBrZWVwcyB0cmFjayBvZiBhbGwgdGhlIHN1cHBvcnRlZCB0eXBlcyBjaGVja2VkIGJ5IHtAbGluayAjaXNGYWN0b3J5Rm9yVHlwZSBpc0ZhY3RvcnlGb3JUeXBlfS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgQ29sbGVjdGlvbjxPYmplY3Q+IHN1cHBvcnRlZFR5cGVzID0gbmV3IEFycmF5TGlzdDxPYmplY3Q+KCk7CisKKwkvKioKKwkgKiBUaGlzIGNvbnN0cnVjdHMgYW4gaW5zdGFuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFR5cGVzSXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkoKSB7CisJCXN1cHBvcnRlZFR5cGVzLmFkZChJRWRpdGluZ0RvbWFpbkl0ZW1Qcm92aWRlci5jbGFzcyk7CisJCXN1cHBvcnRlZFR5cGVzLmFkZChJU3RydWN0dXJlZEl0ZW1Db250ZW50UHJvdmlkZXIuY2xhc3MpOworCQlzdXBwb3J0ZWRUeXBlcy5hZGQoSVRyZWVJdGVtQ29udGVudFByb3ZpZGVyLmNsYXNzKTsKKwkJc3VwcG9ydGVkVHlwZXMuYWRkKElJdGVtTGFiZWxQcm92aWRlci5jbGFzcyk7CisJCXN1cHBvcnRlZFR5cGVzLmFkZChJSXRlbVByb3BlcnR5U291cmNlLmNsYXNzKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgdGhlIHJvb3QgYWRhcHRlciBmYWN0b3J5IHRoYXQgY29udGFpbnMgdGhpcyBmYWN0b3J5LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBDb21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5IGdldFJvb3RBZGFwdGVyRmFjdG9yeSgpIHsKKwkJcmV0dXJuIHBhcmVudEFkYXB0ZXJGYWN0b3J5ID09IG51bGwgPyB0aGlzIDogcGFyZW50QWRhcHRlckZhY3RvcnkuZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCk7CisJfQorCisJLyoqCisJICogVGhpcyBzZXRzIHRoZSBjb21wb3NlZCBhZGFwdGVyIGZhY3RvcnkgdGhhdCBjb250YWlucyB0aGlzIGZhY3RvcnkuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgc2V0UGFyZW50QWRhcHRlckZhY3RvcnkoQ29tcG9zZWRBZGFwdGVyRmFjdG9yeSBwYXJlbnRBZGFwdGVyRmFjdG9yeSkgeworCQl0aGlzLnBhcmVudEFkYXB0ZXJGYWN0b3J5ID0gcGFyZW50QWRhcHRlckZhY3Rvcnk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIGJvb2xlYW4gaXNGYWN0b3J5Rm9yVHlwZShPYmplY3QgdHlwZSkgeworCQlyZXR1cm4gc3VwcG9ydGVkVHlwZXMuY29udGFpbnModHlwZSkgfHwgc3VwZXIuaXNGYWN0b3J5Rm9yVHlwZSh0eXBlKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGltcGxlbWVudGF0aW9uIHN1YnN0aXR1dGVzIHRoZSBmYWN0b3J5IGl0c2VsZiBhcyB0aGUga2V5IGZvciB0aGUgYWRhcHRlci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgQWRhcHRlciBhZGFwdChOb3RpZmllciBub3RpZmllciwgT2JqZWN0IHR5cGUpIHsKKwkJcmV0dXJuIHN1cGVyLmFkYXB0KG5vdGlmaWVyLCB0aGlzKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgT2JqZWN0IGFkYXB0KE9iamVjdCBvYmplY3QsIE9iamVjdCB0eXBlKSB7CisJCWlmIChpc0ZhY3RvcnlGb3JUeXBlKHR5cGUpKSB7CisJCQlPYmplY3QgYWRhcHRlciA9IHN1cGVyLmFkYXB0KG9iamVjdCwgdHlwZSk7CisJCQlpZiAoISh0eXBlIGluc3RhbmNlb2YgQ2xhc3M8Pz4pIHx8ICgoKENsYXNzPD8+KXR5cGUpLmlzSW5zdGFuY2UoYWRhcHRlcikpKSB7CisJCQkJcmV0dXJuIGFkYXB0ZXI7CisJCQl9CisJCX0KKworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFkZHMgYSBsaXN0ZW5lci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBhZGRMaXN0ZW5lcihJTm90aWZ5Q2hhbmdlZExpc3RlbmVyIG5vdGlmeUNoYW5nZWRMaXN0ZW5lcikgeworCQljaGFuZ2VOb3RpZmllci5hZGRMaXN0ZW5lcihub3RpZnlDaGFuZ2VkTGlzdGVuZXIpOworCX0KKworCS8qKgorCSAqIFRoaXMgcmVtb3ZlcyBhIGxpc3RlbmVyLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIHJlbW92ZUxpc3RlbmVyKElOb3RpZnlDaGFuZ2VkTGlzdGVuZXIgbm90aWZ5Q2hhbmdlZExpc3RlbmVyKSB7CisJCWNoYW5nZU5vdGlmaWVyLnJlbW92ZUxpc3RlbmVyKG5vdGlmeUNoYW5nZWRMaXN0ZW5lcik7CisJfQorCisJLyoqCisJICogVGhpcyBkZWxlZ2F0ZXMgdG8ge0BsaW5rICNjaGFuZ2VOb3RpZmllcn0gYW5kIHRvIHtAbGluayAjcGFyZW50QWRhcHRlckZhY3Rvcnl9LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIGZpcmVOb3RpZnlDaGFuZ2VkKE5vdGlmaWNhdGlvbiBub3RpZmljYXRpb24pIHsKKwkJY2hhbmdlTm90aWZpZXIuZmlyZU5vdGlmeUNoYW5nZWQobm90aWZpY2F0aW9uKTsKKworCQlpZiAocGFyZW50QWRhcHRlckZhY3RvcnkgIT0gbnVsbCkgeworCQkJcGFyZW50QWRhcHRlckZhY3RvcnkuZmlyZU5vdGlmeUNoYW5nZWQobm90aWZpY2F0aW9uKTsKKwkJfQorCX0KKworCS8qKgorCSAqIFRoaXMgZGlzcG9zZXMgYWxsIG9mIHRoZSBpdGVtIHByb3ZpZGVycyBjcmVhdGVkIGJ5IHRoaXMgZmFjdG9yeS4gCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgZGlzcG9zZSgpIHsKKwl9CisKK30KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy90eXBlcy91dGlsL1R5cGVzQWRhcHRlckZhY3RvcnkuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy90eXBlcy91dGlsL1R5cGVzQWRhcHRlckZhY3RvcnkuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mOTIxYWM4Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL3R5cGVzL3V0aWwvVHlwZXNBZGFwdGVyRmFjdG9yeS5qYXZhCkBAIC0wLDAgKzEsMTQ3IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMudHlwZXMudXRpbDsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5BZGFwdGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LmltcGwuQWRhcHRlckZhY3RvcnlJbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMudHlwZXMuKjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLnR5cGVzLkNhdGVnb3JpemVkVHlwZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLnR5cGVzLlJhdGU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy50eXBlcy5UeXBlc1BhY2thZ2U7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIFRoZSA8Yj5BZGFwdGVyIEZhY3Rvcnk8L2I+IGZvciB0aGUgbW9kZWwuCisgKiBJdCBwcm92aWRlcyBhbiBhZGFwdGVyIDxjb2RlPmNyZWF0ZVhYWDwvY29kZT4gbWV0aG9kIGZvciBlYWNoIGNsYXNzIG9mIHRoZSBtb2RlbC4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLnR5cGVzLlR5cGVzUGFja2FnZQorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgVHlwZXNBZGFwdGVyRmFjdG9yeSBleHRlbmRzIEFkYXB0ZXJGYWN0b3J5SW1wbCB7CisJLyoqCisJICogVGhlIGNhY2hlZCBtb2RlbCBwYWNrYWdlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBzdGF0aWMgVHlwZXNQYWNrYWdlIG1vZGVsUGFja2FnZTsKKworCS8qKgorCSAqIENyZWF0ZXMgYW4gaW5zdGFuY2Ugb2YgdGhlIGFkYXB0ZXIgZmFjdG9yeS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVHlwZXNBZGFwdGVyRmFjdG9yeSgpIHsKKwkJaWYgKG1vZGVsUGFja2FnZSA9PSBudWxsKSB7CisJCQltb2RlbFBhY2thZ2UgPSBUeXBlc1BhY2thZ2UuZUlOU1RBTkNFOworCQl9CisJfQorCisJLyoqCisJICogUmV0dXJucyB3aGV0aGVyIHRoaXMgZmFjdG9yeSBpcyBhcHBsaWNhYmxlIGZvciB0aGUgdHlwZSBvZiB0aGUgb2JqZWN0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIDxjb2RlPnRydWU8L2NvZGU+IGlmIHRoZSBvYmplY3QgaXMgZWl0aGVyIHRoZSBtb2RlbCdzIHBhY2thZ2Ugb3IgaXMgYW4gaW5zdGFuY2Ugb2JqZWN0IG9mIHRoZSBtb2RlbC4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHdoZXRoZXIgdGhpcyBmYWN0b3J5IGlzIGFwcGxpY2FibGUgZm9yIHRoZSB0eXBlIG9mIHRoZSBvYmplY3QuCisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBib29sZWFuIGlzRmFjdG9yeUZvclR5cGUoT2JqZWN0IG9iamVjdCkgeworCQlpZiAob2JqZWN0ID09IG1vZGVsUGFja2FnZSkgeworCQkJcmV0dXJuIHRydWU7CisJCX0KKwkJaWYgKG9iamVjdCBpbnN0YW5jZW9mIEVPYmplY3QpIHsKKwkJCXJldHVybiAoKEVPYmplY3Qpb2JqZWN0KS5lQ2xhc3MoKS5nZXRFUGFja2FnZSgpID09IG1vZGVsUGFja2FnZTsKKwkJfQorCQlyZXR1cm4gZmFsc2U7CisJfQorCisJLyoqCisJICogVGhlIHN3aXRjaCB0aGF0IGRlbGVnYXRlcyB0byB0aGUgPGNvZGU+Y3JlYXRlWFhYPC9jb2RlPiBtZXRob2RzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBUeXBlc1N3aXRjaDxBZGFwdGVyPiBtb2RlbFN3aXRjaCA9CisJCW5ldyBUeXBlc1N3aXRjaDxBZGFwdGVyPigpIHsKKwkJCUBPdmVycmlkZQorCQkJcHVibGljIEFkYXB0ZXIgY2FzZUNhdGVnb3JpemVkVHlwZShDYXRlZ29yaXplZFR5cGUgb2JqZWN0KSB7CisJCQkJcmV0dXJuIGNyZWF0ZUNhdGVnb3JpemVkVHlwZUFkYXB0ZXIoKTsKKwkJCX0KKwkJCUBPdmVycmlkZQorCQkJcHVibGljIEFkYXB0ZXIgY2FzZVJhdGUoUmF0ZSBvYmplY3QpIHsKKwkJCQlyZXR1cm4gY3JlYXRlUmF0ZUFkYXB0ZXIoKTsKKwkJCX0KKwkJCUBPdmVycmlkZQorCQkJcHVibGljIEFkYXB0ZXIgZGVmYXVsdENhc2UoRU9iamVjdCBvYmplY3QpIHsKKwkJCQlyZXR1cm4gY3JlYXRlRU9iamVjdEFkYXB0ZXIoKTsKKwkJCX0KKwkJfTsKKworCS8qKgorCSAqIENyZWF0ZXMgYW4gYWRhcHRlciBmb3IgdGhlIDxjb2RlPnRhcmdldDwvY29kZT4uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gdGFyZ2V0IHRoZSBvYmplY3QgdG8gYWRhcHQuCisJICogQHJldHVybiB0aGUgYWRhcHRlciBmb3IgdGhlIDxjb2RlPnRhcmdldDwvY29kZT4uCisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZUFkYXB0ZXIoTm90aWZpZXIgdGFyZ2V0KSB7CisJCXJldHVybiBtb2RlbFN3aXRjaC5kb1N3aXRjaCgoRU9iamVjdCl0YXJnZXQpOworCX0KKworCisJLyoqCisJICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLnR5cGVzLkNhdGVnb3JpemVkVHlwZSA8ZW0+Q2F0ZWdvcml6ZWQgVHlwZTwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7CisJICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLnR5cGVzLkNhdGVnb3JpemVkVHlwZQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVDYXRlZ29yaXplZFR5cGVBZGFwdGVyKCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMudHlwZXMuUmF0ZSA8ZW0+UmF0ZTwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7CisJICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLnR5cGVzLlJhdGUKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlUmF0ZUFkYXB0ZXIoKSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgdGhlIGRlZmF1bHQgY2FzZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwuCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZUVPYmplY3RBZGFwdGVyKCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKK30gLy9UeXBlc0FkYXB0ZXJGYWN0b3J5CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvdHlwZXMvdXRpbC9UeXBlc1N3aXRjaC5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL3R5cGVzL3V0aWwvVHlwZXNTd2l0Y2guamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNjMxNTM2Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL3R5cGVzL3V0aWwvVHlwZXNTd2l0Y2guamF2YQpAQCAtMCwwICsxLDE1OCBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLnR5cGVzLnV0aWw7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDkgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMudHlwZXMuKjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLnR5cGVzLkNhdGVnb3JpemVkVHlwZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLnR5cGVzLlJhdGU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy50eXBlcy5UeXBlc1BhY2thZ2U7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIFRoZSA8Yj5Td2l0Y2g8L2I+IGZvciB0aGUgbW9kZWwncyBpbmhlcml0YW5jZSBoaWVyYXJjaHkuCisgKiBJdCBzdXBwb3J0cyB0aGUgY2FsbCB7QGxpbmsgI2RvU3dpdGNoKEVPYmplY3QpIGRvU3dpdGNoKG9iamVjdCl9CisgKiB0byBpbnZva2UgdGhlIDxjb2RlPmNhc2VYWFg8L2NvZGU+IG1ldGhvZCBmb3IgZWFjaCBjbGFzcyBvZiB0aGUgbW9kZWwsCisgKiBzdGFydGluZyB3aXRoIHRoZSBhY3R1YWwgY2xhc3Mgb2YgdGhlIG9iamVjdAorICogYW5kIHByb2NlZWRpbmcgdXAgdGhlIGluaGVyaXRhbmNlIGhpZXJhcmNoeQorICogdW50aWwgYSBub24tbnVsbCByZXN1bHQgaXMgcmV0dXJuZWQsCisgKiB3aGljaCBpcyB0aGUgcmVzdWx0IG9mIHRoZSBzd2l0Y2guCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy50eXBlcy5UeXBlc1BhY2thZ2UKKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIFR5cGVzU3dpdGNoPFQ+IHsKKwkvKioKKwkgKiBUaGUgY2FjaGVkIG1vZGVsIHBhY2thZ2UKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgc3RhdGljIFR5cGVzUGFja2FnZSBtb2RlbFBhY2thZ2U7CisKKwkvKioKKwkgKiBDcmVhdGVzIGFuIGluc3RhbmNlIG9mIHRoZSBzd2l0Y2guCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFR5cGVzU3dpdGNoKCkgeworCQlpZiAobW9kZWxQYWNrYWdlID09IG51bGwpIHsKKwkJCW1vZGVsUGFja2FnZSA9IFR5cGVzUGFja2FnZS5lSU5TVEFOQ0U7CisJCX0KKwl9CisKKwkvKioKKwkgKiBDYWxscyA8Y29kZT5jYXNlWFhYPC9jb2RlPiBmb3IgZWFjaCBjbGFzcyBvZiB0aGUgbW9kZWwgdW50aWwgb25lIHJldHVybnMgYSBub24gbnVsbCByZXN1bHQ7IGl0IHlpZWxkcyB0aGF0IHJlc3VsdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIGZpcnN0IG5vbi1udWxsIHJlc3VsdCByZXR1cm5lZCBieSBhIDxjb2RlPmNhc2VYWFg8L2NvZGU+IGNhbGwuCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBUIGRvU3dpdGNoKEVPYmplY3QgdGhlRU9iamVjdCkgeworCQlyZXR1cm4gZG9Td2l0Y2godGhlRU9iamVjdC5lQ2xhc3MoKSwgdGhlRU9iamVjdCk7CisJfQorCisJLyoqCisJICogQ2FsbHMgPGNvZGU+Y2FzZVhYWDwvY29kZT4gZm9yIGVhY2ggY2xhc3Mgb2YgdGhlIG1vZGVsIHVudGlsIG9uZSByZXR1cm5zIGEgbm9uIG51bGwgcmVzdWx0OyBpdCB5aWVsZHMgdGhhdCByZXN1bHQuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBmaXJzdCBub24tbnVsbCByZXN1bHQgcmV0dXJuZWQgYnkgYSA8Y29kZT5jYXNlWFhYPC9jb2RlPiBjYWxsLgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgVCBkb1N3aXRjaChFQ2xhc3MgdGhlRUNsYXNzLCBFT2JqZWN0IHRoZUVPYmplY3QpIHsKKwkJaWYgKHRoZUVDbGFzcy5lQ29udGFpbmVyKCkgPT0gbW9kZWxQYWNrYWdlKSB7CisJCQlyZXR1cm4gZG9Td2l0Y2godGhlRUNsYXNzLmdldENsYXNzaWZpZXJJRCgpLCB0aGVFT2JqZWN0KTsKKwkJfQorCQllbHNlIHsKKwkJCUxpc3Q8RUNsYXNzPiBlU3VwZXJUeXBlcyA9IHRoZUVDbGFzcy5nZXRFU3VwZXJUeXBlcygpOworCQkJcmV0dXJuCisJCQkJZVN1cGVyVHlwZXMuaXNFbXB0eSgpID8KKwkJCQkJZGVmYXVsdENhc2UodGhlRU9iamVjdCkgOgorCQkJCQlkb1N3aXRjaChlU3VwZXJUeXBlcy5nZXQoMCksIHRoZUVPYmplY3QpOworCQl9CisJfQorCisJLyoqCisJICogQ2FsbHMgPGNvZGU+Y2FzZVhYWDwvY29kZT4gZm9yIGVhY2ggY2xhc3Mgb2YgdGhlIG1vZGVsIHVudGlsIG9uZSByZXR1cm5zIGEgbm9uIG51bGwgcmVzdWx0OyBpdCB5aWVsZHMgdGhhdCByZXN1bHQuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBmaXJzdCBub24tbnVsbCByZXN1bHQgcmV0dXJuZWQgYnkgYSA8Y29kZT5jYXNlWFhYPC9jb2RlPiBjYWxsLgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgVCBkb1N3aXRjaChpbnQgY2xhc3NpZmllcklELCBFT2JqZWN0IHRoZUVPYmplY3QpIHsKKwkJc3dpdGNoIChjbGFzc2lmaWVySUQpIHsKKwkJCWNhc2UgVHlwZXNQYWNrYWdlLkNBVEVHT1JJWkVEX1RZUEU6IHsKKwkJCQlDYXRlZ29yaXplZFR5cGUgY2F0ZWdvcml6ZWRUeXBlID0gKENhdGVnb3JpemVkVHlwZSl0aGVFT2JqZWN0OworCQkJCVQgcmVzdWx0ID0gY2FzZUNhdGVnb3JpemVkVHlwZShjYXRlZ29yaXplZFR5cGUpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gZGVmYXVsdENhc2UodGhlRU9iamVjdCk7CisJCQkJcmV0dXJuIHJlc3VsdDsKKwkJCX0KKwkJCWNhc2UgVHlwZXNQYWNrYWdlLlJBVEU6IHsKKwkJCQlSYXRlIHJhdGUgPSAoUmF0ZSl0aGVFT2JqZWN0OworCQkJCVQgcmVzdWx0ID0gY2FzZVJhdGUocmF0ZSk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBkZWZhdWx0Q2FzZSh0aGVFT2JqZWN0KTsKKwkJCQlyZXR1cm4gcmVzdWx0OworCQkJfQorCQkJZGVmYXVsdDogcmV0dXJuIGRlZmF1bHRDYXNlKHRoZUVPYmplY3QpOworCQl9CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+Q2F0ZWdvcml6ZWQgVHlwZTwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOworCSAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgorCSAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkNhdGVnb3JpemVkIFR5cGU8L2VtPicuCisJICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBUIGNhc2VDYXRlZ29yaXplZFR5cGUoQ2F0ZWdvcml6ZWRUeXBlIG9iamVjdCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5SYXRlPC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7CisJICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCisJICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+UmF0ZTwvZW0+Jy4KKwkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFQgY2FzZVJhdGUoUmF0ZSBvYmplY3QpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+RU9iamVjdDwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOworCSAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLCBidXQgdGhpcyBpcyB0aGUgbGFzdCBjYXNlIGFueXdheS4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KKwkgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5FT2JqZWN0PC9lbT4nLgorCSAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVCBkZWZhdWx0Q2FzZShFT2JqZWN0IG9iamVjdCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKK30gLy9UeXBlc1N3aXRjaApkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmdyYXBoZ2VuZXJhdG9ycy8uY2xhc3NwYXRoIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmdyYXBoZ2VuZXJhdG9ycy8uY2xhc3NwYXRoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMwNGU4NjEKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhnZW5lcmF0b3JzLy5jbGFzc3BhdGgKQEAgLTAsMCArMSw3IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPGNsYXNzcGF0aD4KKwk8Y2xhc3NwYXRoZW50cnkga2luZD0ic3JjIiBwYXRoPSJzcmMiLz4KKwk8Y2xhc3NwYXRoZW50cnkga2luZD0iY29uIiBwYXRoPSJvcmcuZWNsaXBzZS5qZHQubGF1bmNoaW5nLkpSRV9DT05UQUlORVIvb3JnLmVjbGlwc2UuamR0LmludGVybmFsLmRlYnVnLnVpLmxhdW5jaGVyLlN0YW5kYXJkVk1UeXBlL0oyU0UtMS41Ii8+CisJPGNsYXNzcGF0aGVudHJ5IGtpbmQ9ImNvbiIgcGF0aD0ib3JnLmVjbGlwc2UucGRlLmNvcmUucmVxdWlyZWRQbHVnaW5zIi8+CisJPGNsYXNzcGF0aGVudHJ5IGtpbmQ9Im91dHB1dCIgcGF0aD0iYmluIi8+Cis8L2NsYXNzcGF0aD4KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaGdlbmVyYXRvcnMvLnByb2plY3QgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhnZW5lcmF0b3JzLy5wcm9qZWN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFjYTdjYjcKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhnZW5lcmF0b3JzLy5wcm9qZWN0CkBAIC0wLDAgKzEsMjggQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8cHJvamVjdERlc2NyaXB0aW9uPgorCTxuYW1lPm9yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhnZW5lcmF0b3JzPC9uYW1lPgorCTxjb21tZW50PjwvY29tbWVudD4KKwk8cHJvamVjdHM+CisJPC9wcm9qZWN0cz4KKwk8YnVpbGRTcGVjPgorCQk8YnVpbGRDb21tYW5kPgorCQkJPG5hbWU+b3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YWJ1aWxkZXI8L25hbWU+CisJCQk8YXJndW1lbnRzPgorCQkJPC9hcmd1bWVudHM+CisJCTwvYnVpbGRDb21tYW5kPgorCQk8YnVpbGRDb21tYW5kPgorCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLk1hbmlmZXN0QnVpbGRlcjwvbmFtZT4KKwkJCTxhcmd1bWVudHM+CisJCQk8L2FyZ3VtZW50cz4KKwkJPC9idWlsZENvbW1hbmQ+CisJCTxidWlsZENvbW1hbmQ+CisJCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuU2NoZW1hQnVpbGRlcjwvbmFtZT4KKwkJCTxhcmd1bWVudHM+CisJCQk8L2FyZ3VtZW50cz4KKwkJPC9idWlsZENvbW1hbmQ+CisJPC9idWlsZFNwZWM+CisJPG5hdHVyZXM+CisJCTxuYXR1cmU+b3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YW5hdHVyZTwvbmF0dXJlPgorCQk8bmF0dXJlPm9yZy5lY2xpcHNlLnBkZS5QbHVnaW5OYXR1cmU8L25hdHVyZT4KKwk8L25hdHVyZXM+Cis8L3Byb2plY3REZXNjcmlwdGlvbj4KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaGdlbmVyYXRvcnMvTUVUQS1JTkYvTUFOSUZFU1QuTUYgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhnZW5lcmF0b3JzL01FVEEtSU5GL01BTklGRVNULk1GCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI4MDRjZGEKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhnZW5lcmF0b3JzL01FVEEtSU5GL01BTklGRVNULk1GCkBAIC0wLDAgKzEsMjEgQEAKK01hbmlmZXN0LVZlcnNpb246IDEuMAorQnVuZGxlLU1hbmlmZXN0VmVyc2lvbjogMgorQnVuZGxlLU5hbWU6ICVwbHVnaW5OYW1lCitCdW5kbGUtU3ltYm9saWNOYW1lOiBvcmcuZWNsaXBzZS5zdGVtLmdyYXBoZ2VuZXJhdG9ycztzaW5nbGV0b246PXRydWUKK0J1bmRsZS1WZXJzaW9uOiAxLjIuMQorQnVuZGxlLUNsYXNzUGF0aDogLgorQnVuZGxlLUFjdGl2YXRvcjogb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaGdlbmVyYXRvcnMucHJvdmlkZXIuR3JhcGhnZW5lcmF0b3JFZGl0UGx1Z2luJEltcGxlbWVudGF0aW9uCitCdW5kbGUtVmVuZG9yOiAlcHJvdmlkZXJOYW1lCitCdW5kbGUtTG9jYWxpemF0aW9uOiBwbHVnaW4KK0J1bmRsZS1SZXF1aXJlZEV4ZWN1dGlvbkVudmlyb25tZW50OiBKMlNFLTEuNQorRXhwb3J0LVBhY2thZ2U6IG9yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhnZW5lcmF0b3JzLAorIG9yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhnZW5lcmF0b3JzLmltcGwsCisgb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaGdlbmVyYXRvcnMucHJvdmlkZXIsCisgb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaGdlbmVyYXRvcnMudXRpbAorUmVxdWlyZS1CdW5kbGU6IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZSwKKyBvcmcuZWNsaXBzZS5lbWYuZWNvcmU7dmlzaWJpbGl0eTo9cmVleHBvcnQsCisgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlO3Zpc2liaWxpdHk6PXJlZXhwb3J0LAorIG9yZy5lY2xpcHNlLmVtZi5lZGl0O3Zpc2liaWxpdHk6PXJlZXhwb3J0LAorIG9yZy5lY2xpcHNlLmVtZi5lY29yZS5lZGl0O3Zpc2liaWxpdHk6PXJlZXhwb3J0LAorIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMKK0J1bmRsZS1BY3RpdmF0aW9uUG9saWN5OiBsYXp5CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhnZW5lcmF0b3JzL2J1aWxkLnByb3BlcnRpZXMgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhnZW5lcmF0b3JzL2J1aWxkLnByb3BlcnRpZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2MyMDA0ZAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaGdlbmVyYXRvcnMvYnVpbGQucHJvcGVydGllcwpAQCAtMCwwICsxLDE3IEBACisKKyMgPGNvcHlyaWdodD4KKyMgPC9jb3B5cmlnaHQ+CisjCisjICRJZCQKKworYmluLmluY2x1ZGVzID0gLixcCisgICAgICAgICAgICAgICBpY29ucy8sXAorICAgICAgICAgICAgICAgTUVUQS1JTkYvLFwKKyAgICAgICAgICAgICAgIHBsdWdpbi54bWwsXAorICAgICAgICAgICAgICAgcGx1Z2luLnByb3BlcnRpZXMsXAorICAgICAgICAgICAgICAgcGx1Z2luX3poLnByb3BlcnRpZXMsXAorICAgICAgICAgICAgICAgcGx1Z2luX2tyLnByb3BlcnRpZXMsXAorICAgICAgICAgICAgICAgcGx1Z2luX2RlLnByb3BlcnRpZXMKK2phcnMuY29tcGlsZS5vcmRlciA9IC4KK3NvdXJjZS4uID0gc3JjLworb3V0cHV0Li4gPSBiaW4vCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhnZW5lcmF0b3JzL2ljb25zL2Z1bGwvb2JqMTYvR3JhcGhHZW5lcmF0b3IuZ2lmIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmdyYXBoZ2VuZXJhdG9ycy9pY29ucy9mdWxsL29iajE2L0dyYXBoR2VuZXJhdG9yLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYjc0MTRlCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmdyYXBoZ2VuZXJhdG9ycy9pY29ucy9mdWxsL29iajE2L0dyYXBoR2VuZXJhdG9yLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhnZW5lcmF0b3JzL2ljb25zL2Z1bGwvb2JqMTYvTWlncmF0aW9uRWRnZUdyYXBoR2VuZXJhdG9yLmdpZiBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaGdlbmVyYXRvcnMvaWNvbnMvZnVsbC9vYmoxNi9NaWdyYXRpb25FZGdlR3JhcGhHZW5lcmF0b3IuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdiN2M0MjgKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhnZW5lcmF0b3JzL2ljb25zL2Z1bGwvb2JqMTYvTWlncmF0aW9uRWRnZUdyYXBoR2VuZXJhdG9yLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhnZW5lcmF0b3JzL2ljb25zL2Z1bGwvb2JqMTYvUGFqZWtOZXRHcmFwaEdlbmVyYXRvci5naWYgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhnZW5lcmF0b3JzL2ljb25zL2Z1bGwvb2JqMTYvUGFqZWtOZXRHcmFwaEdlbmVyYXRvci5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTM0NTUxYgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaGdlbmVyYXRvcnMvaWNvbnMvZnVsbC9vYmoxNi9QYWpla05ldEdyYXBoR2VuZXJhdG9yLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhnZW5lcmF0b3JzL2ljb25zL2Z1bGwvb2JqMTYvUGxhdGVDYXJyZWVHbG9iZUdyYXBoR2VuZXJhdG9yLmdpZiBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaGdlbmVyYXRvcnMvaWNvbnMvZnVsbC9vYmoxNi9QbGF0ZUNhcnJlZUdsb2JlR3JhcGhHZW5lcmF0b3IuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEwZDIyMjkKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhnZW5lcmF0b3JzL2ljb25zL2Z1bGwvb2JqMTYvUGxhdGVDYXJyZWVHbG9iZUdyYXBoR2VuZXJhdG9yLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhnZW5lcmF0b3JzL2ljb25zL2Z1bGwvb2JqMTYvU3F1YXJlTGF0dGljZUdyYXBoR2VuZXJhdG9yLmdpZiBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaGdlbmVyYXRvcnMvaWNvbnMvZnVsbC9vYmoxNi9TcXVhcmVMYXR0aWNlR3JhcGhHZW5lcmF0b3IuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjczOWViYmYKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhnZW5lcmF0b3JzL2ljb25zL2Z1bGwvb2JqMTYvU3F1YXJlTGF0dGljZUdyYXBoR2VuZXJhdG9yLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhnZW5lcmF0b3JzL21vZGVsL2dyYXBoZ2VuZXJhdG9yLmdlbm1vZGVsIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmdyYXBoZ2VuZXJhdG9ycy9tb2RlbC9ncmFwaGdlbmVyYXRvci5nZW5tb2RlbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZTM1NzQwCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmdyYXBoZ2VuZXJhdG9ycy9tb2RlbC9ncmFwaGdlbmVyYXRvci5nZW5tb2RlbApAQCAtMCwwICsxLDQwIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPGdlbm1vZGVsOkdlbk1vZGVsIHhtaTp2ZXJzaW9uPSIyLjAiCisgICAgeG1sbnM6eG1pPSJodHRwOi8vd3d3Lm9tZy5vcmcvWE1JIiB4bWxuczplY29yZT0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9lbWYvMjAwMi9FY29yZSIKKyAgICB4bWxuczpnZW5tb2RlbD0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9lbWYvMjAwMi9HZW5Nb2RlbCIgbW9kZWxEaXJlY3Rvcnk9Ii9vcmcuZWNsaXBzZS5zdGVtLmdyYXBoZ2VuZXJhdG9ycy9zcmMiCisgICAgZWRpdERpcmVjdG9yeT0iL29yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhnZW5lcmF0b3JzL3NyYyIgZWRpdG9yRGlyZWN0b3J5PSIvb3JnLmVjbGlwc2Uuc3RlbS51aS5ncmFwaGdlbmVyYXRvcnMvc3JjIgorICAgIG1vZGVsUGx1Z2luSUQ9Im9yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhnZW5lcmF0b3JzIiBtb2RlbE5hbWU9IkdyYXBoZ2VuZXJhdG9yIiBlZGl0b3JQbHVnaW5DbGFzcz0ib3JnLmVjbGlwc2Uuc3RlbS51aS5ncmFwaGdlbmVyYXRvcnMucHJlc2VudGF0aW9uLkdyYXBoZ2VuZXJhdG9yRWRpdG9yUGx1Z2luIgorICAgIHRlc3RzRGlyZWN0b3J5PSIvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5ncmFwaGdlbmVyYXRvcnMvc3JjIiB0ZXN0U3VpdGVDbGFzcz0ib3JnLmVjbGlwc2Uuc3RlbS50ZXN0LmdyYXBoZ2VuZXJhdG9ycy50ZXN0cy5HcmFwaGdlbmVyYXRvckFsbFRlc3RzIgorICAgIGltcG9ydGVySUQ9Im9yZy5lY2xpcHNlLmVtZi5pbXBvcnRlci5lY29yZSIgY29tcGxpYW5jZUxldmVsPSI1LjAiIGNvcHlyaWdodEZpZWxkcz0iZmFsc2UiCisgICAgZWRpdG9yUGx1Z2luSUQ9Im9yZy5lY2xpcHNlLnN0ZW0udWkuZ3JhcGhnZW5lcmF0b3JzIiB1c2VkR2VuUGFja2FnZXM9Ii4uLy4uL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9tb2RlbC9jb3JlLmdlbm1vZGVsIy8vY29tbW9uIHBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2UuZW1mLmVjb3JlL21vZGVsL0Vjb3JlLmdlbm1vZGVsIy8vZWNvcmUgLi4vLi4vb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL21vZGVsL2NvcmUuZ2VubW9kZWwjLy9ncmFwaCAuLi8uLi9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvbW9kZWwvY29yZS5nZW5tb2RlbCMvL21vZGVsIC4uLy4uL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9tb2RlbC9jb3JlLmdlbm1vZGVsIy8vbW9kaWZpZXIgLi4vLi4vb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL21vZGVsL2NvcmUuZ2VubW9kZWwjLy9zY2VuYXJpbyAuLi8uLi9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvbW9kZWwvY29yZS5nZW5tb2RlbCMvL3NlcXVlbmNlciAuLi8uLi9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvbW9kZWwvY29yZS5nZW5tb2RlbCMvL3NvbHZlciI+CisgIDxmb3JlaWduTW9kZWw+Z3JhcGhnZW5lcmF0b3JzLmVjb3JlPC9mb3JlaWduTW9kZWw+CisgIDxnZW5QYWNrYWdlcyBwcmVmaXg9IkdyYXBoZ2VuZXJhdG9ycyIgYmFzZVBhY2thZ2U9Im9yZy5lY2xpcHNlLnN0ZW0iIGRpc3Bvc2FibGVQcm92aWRlckZhY3Rvcnk9InRydWUiCisgICAgICBlY29yZVBhY2thZ2U9ImdyYXBoZ2VuZXJhdG9ycy5lY29yZSMvIj4KKyAgICA8Z2VuQ2xhc3NlcyBlY29yZUNsYXNzPSJncmFwaGdlbmVyYXRvcnMuZWNvcmUjLy9HcmFwaEdlbmVyYXRvciI+CisgICAgICA8Z2VuT3BlcmF0aW9ucyBlY29yZU9wZXJhdGlvbj0iZ3JhcGhnZW5lcmF0b3JzLmVjb3JlIy8vR3JhcGhHZW5lcmF0b3IvZ2V0R3JhcGgiLz4KKyAgICA8L2dlbkNsYXNzZXM+CisgICAgPGdlbkNsYXNzZXMgaW1hZ2U9ImZhbHNlIiBlY29yZUNsYXNzPSJncmFwaGdlbmVyYXRvcnMuZWNvcmUjLy9MYXR0aWNlR3JhcGhHZW5lcmF0b3IiPgorICAgICAgPGdlbkZlYXR1cmVzIGNyZWF0ZUNoaWxkPSJmYWxzZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFQXR0cmlidXRlIGdyYXBoZ2VuZXJhdG9ycy5lY29yZSMvL0xhdHRpY2VHcmFwaEdlbmVyYXRvci91c2VOZWFyZXN0TmVpZ2hib3JzIi8+CisgICAgICA8Z2VuRmVhdHVyZXMgY3JlYXRlQ2hpbGQ9ImZhbHNlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVBdHRyaWJ1dGUgZ3JhcGhnZW5lcmF0b3JzLmVjb3JlIy8vTGF0dGljZUdyYXBoR2VuZXJhdG9yL3VzZU5leHROZWFyZXN0TmVpZ2hib3JzIi8+CisgICAgICA8Z2VuRmVhdHVyZXMgY3JlYXRlQ2hpbGQ9ImZhbHNlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVBdHRyaWJ1dGUgZ3JhcGhnZW5lcmF0b3JzLmVjb3JlIy8vTGF0dGljZUdyYXBoR2VuZXJhdG9yL3BlcmlvZGljQm91bmRhcmllcyIvPgorICAgIDwvZ2VuQ2xhc3Nlcz4KKyAgICA8Z2VuQ2xhc3NlcyBlY29yZUNsYXNzPSJncmFwaGdlbmVyYXRvcnMuZWNvcmUjLy9TcXVhcmVMYXR0aWNlR3JhcGhHZW5lcmF0b3IiPgorICAgICAgPGdlbkZlYXR1cmVzIGNyZWF0ZUNoaWxkPSJmYWxzZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFQXR0cmlidXRlIGdyYXBoZ2VuZXJhdG9ycy5lY29yZSMvL1NxdWFyZUxhdHRpY2VHcmFwaEdlbmVyYXRvci94U2l6ZSIvPgorICAgICAgPGdlbkZlYXR1cmVzIGNyZWF0ZUNoaWxkPSJmYWxzZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFQXR0cmlidXRlIGdyYXBoZ2VuZXJhdG9ycy5lY29yZSMvL1NxdWFyZUxhdHRpY2VHcmFwaEdlbmVyYXRvci95U2l6ZSIvPgorICAgICAgPGdlbkZlYXR1cmVzIGNyZWF0ZUNoaWxkPSJmYWxzZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFQXR0cmlidXRlIGdyYXBoZ2VuZXJhdG9ycy5lY29yZSMvL1NxdWFyZUxhdHRpY2VHcmFwaEdlbmVyYXRvci9hcmVhIi8+CisgICAgPC9nZW5DbGFzc2VzPgorICAgIDxnZW5DbGFzc2VzIGVjb3JlQ2xhc3M9ImdyYXBoZ2VuZXJhdG9ycy5lY29yZSMvL01pZ3JhdGlvbkVkZ2VHcmFwaEdlbmVyYXRvciI+CisgICAgICA8Z2VuRmVhdHVyZXMgY3JlYXRlQ2hpbGQ9ImZhbHNlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVBdHRyaWJ1dGUgZ3JhcGhnZW5lcmF0b3JzLmVjb3JlIy8vTWlncmF0aW9uRWRnZUdyYXBoR2VuZXJhdG9yL2xvY2F0aW9uIi8+CisgICAgICA8Z2VuRmVhdHVyZXMgY3JlYXRlQ2hpbGQ9ImZhbHNlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVBdHRyaWJ1dGUgZ3JhcGhnZW5lcmF0b3JzLmVjb3JlIy8vTWlncmF0aW9uRWRnZUdyYXBoR2VuZXJhdG9yL21pZ3JhdGlvblJhdGUiLz4KKyAgICAgIDxnZW5GZWF0dXJlcyBjcmVhdGVDaGlsZD0iZmFsc2UiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RUF0dHJpYnV0ZSBncmFwaGdlbmVyYXRvcnMuZWNvcmUjLy9NaWdyYXRpb25FZGdlR3JhcGhHZW5lcmF0b3IvcG9wdWxhdGlvbiIvPgorICAgIDwvZ2VuQ2xhc3Nlcz4KKyAgICA8Z2VuQ2xhc3NlcyBlY29yZUNsYXNzPSJncmFwaGdlbmVyYXRvcnMuZWNvcmUjLy9QbGF0ZUNhcnJlZUdsb2JlR3JhcGhHZW5lcmF0b3IiPgorICAgICAgPGdlbkZlYXR1cmVzIGNyZWF0ZUNoaWxkPSJmYWxzZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFQXR0cmlidXRlIGdyYXBoZ2VuZXJhdG9ycy5lY29yZSMvL1BsYXRlQ2FycmVlR2xvYmVHcmFwaEdlbmVyYXRvci9hbmd1bGFyU3RlcCIvPgorICAgICAgPGdlbkZlYXR1cmVzIGNyZWF0ZUNoaWxkPSJmYWxzZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFQXR0cmlidXRlIGdyYXBoZ2VuZXJhdG9ycy5lY29yZSMvL1BsYXRlQ2FycmVlR2xvYmVHcmFwaEdlbmVyYXRvci9yYWRpdXMiLz4KKyAgICA8L2dlbkNsYXNzZXM+CisgICAgPGdlbkNsYXNzZXMgZWNvcmVDbGFzcz0iZ3JhcGhnZW5lcmF0b3JzLmVjb3JlIy8vUGFqZWtOZXRHcmFwaEdlbmVyYXRvciI+CisgICAgICA8Z2VuRmVhdHVyZXMgY3JlYXRlQ2hpbGQ9ImZhbHNlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVBdHRyaWJ1dGUgZ3JhcGhnZW5lcmF0b3JzLmVjb3JlIy8vUGFqZWtOZXRHcmFwaEdlbmVyYXRvci9kYXRhRmlsZV9uZXQiLz4KKyAgICAgIDxnZW5GZWF0dXJlcyBjcmVhdGVDaGlsZD0iZmFsc2UiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RUF0dHJpYnV0ZSBncmFwaGdlbmVyYXRvcnMuZWNvcmUjLy9QYWpla05ldEdyYXBoR2VuZXJhdG9yL2FyZWEiLz4KKyAgICA8L2dlbkNsYXNzZXM+CisgIDwvZ2VuUGFja2FnZXM+Cis8L2dlbm1vZGVsOkdlbk1vZGVsPgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmdyYXBoZ2VuZXJhdG9ycy9tb2RlbC9ncmFwaGdlbmVyYXRvcnMuZWNvcmUgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhnZW5lcmF0b3JzL21vZGVsL2dyYXBoZ2VuZXJhdG9ycy5lY29yZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNThmNGE1Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmdyYXBoZ2VuZXJhdG9ycy9tb2RlbC9ncmFwaGdlbmVyYXRvcnMuZWNvcmUKQEAgLTAsMCArMSw1NCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxlY29yZTpFUGFja2FnZSB4bWk6dmVyc2lvbj0iMi4wIgorICAgIHhtbG5zOnhtaT0iaHR0cDovL3d3dy5vbWcub3JnL1hNSSIgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIKKyAgICB4bWxuczplY29yZT0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9lbWYvMjAwMi9FY29yZSIgbmFtZT0iZ3JhcGhnZW5lcmF0b3JzIgorICAgIG5zVVJJPSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vZ3JhcGhnZW5lcmF0b3JzL2dyYXBoZ2VuZXJhdG9ycy5lY29yZSIgbnNQcmVmaXg9Im9yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhnZW5lcmF0b3JzIj4KKyAgPGVDbGFzc2lmaWVycyB4c2k6dHlwZT0iZWNvcmU6RUNsYXNzIiBuYW1lPSJHcmFwaEdlbmVyYXRvciIgYWJzdHJhY3Q9InRydWUiIGVTdXBlclR5cGVzPSIuLi8uLi9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvbW9kZWwvY29tbW9uLmVjb3JlIy8vSWRlbnRpZmlhYmxlIj4KKyAgICA8ZU9wZXJhdGlvbnMgbmFtZT0iZ2V0R3JhcGgiIGVUeXBlPSJlY29yZTpFQ2xhc3MgLi4vLi4vb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL21vZGVsL2dyYXBoLmVjb3JlIy8vR3JhcGgiLz4KKyAgPC9lQ2xhc3NpZmllcnM+CisgIDxlQ2xhc3NpZmllcnMgeHNpOnR5cGU9ImVjb3JlOkVDbGFzcyIgbmFtZT0iTGF0dGljZUdyYXBoR2VuZXJhdG9yIiBhYnN0cmFjdD0idHJ1ZSIKKyAgICAgIGVTdXBlclR5cGVzPSIjLy9HcmFwaEdlbmVyYXRvciI+CisgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVBdHRyaWJ1dGUiIG5hbWU9InVzZU5lYXJlc3ROZWlnaGJvcnMiIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgcGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5lbWYuZWNvcmUvbW9kZWwvRWNvcmUuZWNvcmUjLy9FQm9vbGVhbiIKKyAgICAgICAgZGVmYXVsdFZhbHVlTGl0ZXJhbD0idHJ1ZSIvPgorICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJ1c2VOZXh0TmVhcmVzdE5laWdoYm9ycyIKKyAgICAgICAgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLmVtZi5lY29yZS9tb2RlbC9FY29yZS5lY29yZSMvL0VCb29sZWFuIgorICAgICAgICBkZWZhdWx0VmFsdWVMaXRlcmFsPSJmYWxzZSIvPgorICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJwZXJpb2RpY0JvdW5kYXJpZXMiIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgcGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5lbWYuZWNvcmUvbW9kZWwvRWNvcmUuZWNvcmUjLy9FQm9vbGVhbiIKKyAgICAgICAgZGVmYXVsdFZhbHVlTGl0ZXJhbD0idHJ1ZSIvPgorICA8L2VDbGFzc2lmaWVycz4KKyAgPGVDbGFzc2lmaWVycyB4c2k6dHlwZT0iZWNvcmU6RUNsYXNzIiBuYW1lPSJTcXVhcmVMYXR0aWNlR3JhcGhHZW5lcmF0b3IiIGVTdXBlclR5cGVzPSIjLy9MYXR0aWNlR3JhcGhHZW5lcmF0b3IiPgorICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJ4U2l6ZSIgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLmVtZi5lY29yZS9tb2RlbC9FY29yZS5lY29yZSMvL0VJbnQiCisgICAgICAgIGRlZmF1bHRWYWx1ZUxpdGVyYWw9IjEwIi8+CisgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVBdHRyaWJ1dGUiIG5hbWU9InlTaXplIiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIHBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2UuZW1mLmVjb3JlL21vZGVsL0Vjb3JlLmVjb3JlIy8vRUludCIKKyAgICAgICAgZGVmYXVsdFZhbHVlTGl0ZXJhbD0iMTAiLz4KKyAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0iYXJlYSIgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLmVtZi5lY29yZS9tb2RlbC9FY29yZS5lY29yZSMvL0VEb3VibGUiCisgICAgICAgIGRlZmF1bHRWYWx1ZUxpdGVyYWw9IjIwMjUiLz4KKyAgPC9lQ2xhc3NpZmllcnM+CisgIDxlQ2xhc3NpZmllcnMgeHNpOnR5cGU9ImVjb3JlOkVDbGFzcyIgbmFtZT0iTWlncmF0aW9uRWRnZUdyYXBoR2VuZXJhdG9yIiBlU3VwZXJUeXBlcz0iIy8vR3JhcGhHZW5lcmF0b3IiPgorICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJsb2NhdGlvbiIgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSAuLi8uLi9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvbW9kZWwvY29tbW9uLmVjb3JlIy8vVVJJIi8+CisgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVBdHRyaWJ1dGUiIG5hbWU9Im1pZ3JhdGlvblJhdGUiIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgcGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5lbWYuZWNvcmUvbW9kZWwvRWNvcmUuZWNvcmUjLy9FRG91YmxlIgorICAgICAgICBkZWZhdWx0VmFsdWVMaXRlcmFsPSIwLjEiLz4KKyAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0icG9wdWxhdGlvbiIgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLmVtZi5lY29yZS9tb2RlbC9FY29yZS5lY29yZSMvL0VTdHJpbmciCisgICAgICAgIGRlZmF1bHRWYWx1ZUxpdGVyYWw9Imh1bWFuIi8+CisgIDwvZUNsYXNzaWZpZXJzPgorICA8ZUNsYXNzaWZpZXJzIHhzaTp0eXBlPSJlY29yZTpFQ2xhc3MiIG5hbWU9IlBsYXRlQ2FycmVlR2xvYmVHcmFwaEdlbmVyYXRvciIgZVN1cGVyVHlwZXM9IiMvL0xhdHRpY2VHcmFwaEdlbmVyYXRvciI+CisgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVBdHRyaWJ1dGUiIG5hbWU9ImFuZ3VsYXJTdGVwIiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIHBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2UuZW1mLmVjb3JlL21vZGVsL0Vjb3JlLmVjb3JlIy8vRUludCIKKyAgICAgICAgZGVmYXVsdFZhbHVlTGl0ZXJhbD0iMTAiLz4KKyAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0icmFkaXVzIiBsb3dlckJvdW5kPSIxIgorICAgICAgICBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIHBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2UuZW1mLmVjb3JlL21vZGVsL0Vjb3JlLmVjb3JlIy8vRURvdWJsZSIKKyAgICAgICAgZGVmYXVsdFZhbHVlTGl0ZXJhbD0iNjM3MS4wIi8+CisgIDwvZUNsYXNzaWZpZXJzPgorICA8ZUNsYXNzaWZpZXJzIHhzaTp0eXBlPSJlY29yZTpFQ2xhc3MiIG5hbWU9IlBhamVrTmV0R3JhcGhHZW5lcmF0b3IiIGVTdXBlclR5cGVzPSIjLy9HcmFwaEdlbmVyYXRvciI+CisgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVBdHRyaWJ1dGUiIG5hbWU9ImRhdGFGaWxlX25ldCIgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLmVtZi5lY29yZS9tb2RlbC9FY29yZS5lY29yZSMvL0VTdHJpbmciCisgICAgICAgIGRlZmF1bHRWYWx1ZUxpdGVyYWw9IiIvPgorICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJhcmVhIiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIHBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2UuZW1mLmVjb3JlL21vZGVsL0Vjb3JlLmVjb3JlIy8vRURvdWJsZSIKKyAgICAgICAgZGVmYXVsdFZhbHVlTGl0ZXJhbD0iMTAwIi8+CisgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVBdHRyaWJ1dGUiIG5hbWU9ImNvbnRhaW5lciIgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSAuLi8uLi9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvbW9kZWwvY29tbW9uLmVjb3JlIy8vVVJJIgorICAgICAgICBkZWZhdWx0VmFsdWVMaXRlcmFsPSIiLz4KKyAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0ic2NhbGluZ0ZhY3RvciIgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLmVtZi5lY29yZS9tb2RlbC9FY29yZS5lY29yZSMvL0VEb3VibGUiCisgICAgICAgIGRlZmF1bHRWYWx1ZUxpdGVyYWw9IjEwMCIvPgorICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJmaXQiIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgcGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5lbWYuZWNvcmUvbW9kZWwvRWNvcmUuZWNvcmUjLy9FQm9vbGVhbiIKKyAgICAgICAgZGVmYXVsdFZhbHVlTGl0ZXJhbD0iIi8+CisgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVBdHRyaWJ1dGUiIG5hbWU9ImVuZm9yY2VDb250YWlubWVudCIgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLmVtZi5lY29yZS9tb2RlbC9FY29yZS5lY29yZSMvL0VCb29sZWFuIi8+CisgIDwvZUNsYXNzaWZpZXJzPgorPC9lY29yZTpFUGFja2FnZT4KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaGdlbmVyYXRvcnMvcGx1Z2luLnByb3BlcnRpZXMgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhnZW5lcmF0b3JzL3BsdWdpbi5wcm9wZXJ0aWVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZlYTZjYjEKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhnZW5lcmF0b3JzL3BsdWdpbi5wcm9wZXJ0aWVzCkBAIC0wLDAgKzEsNjcgQEAKKworIyA8Y29weXJpZ2h0PgorIyA8L2NvcHlyaWdodD4KKyMKKyMgJElkJAorCitwbHVnaW5OYW1lID0gR3JhcGhnZW5lcmF0b3IgTW9kZWwKK3Byb3ZpZGVyTmFtZSA9IEVjbGlwc2Uub3JnCisKK2RjX2NyZWF0b3Jfc3RlbXRlYW0gPSBTVEVNIHRlYW0KK2RjX2NyZWF0b3JfYmZyID0gYi5mLnIuCitkY19TT1VSQ0UgPSBodHRwOi8vd2lraS5lY2xpcHNlLm9yZy9DcmVhdGluZ19hX25ld19HcmFwaCAgIChhbmQgcmVmZXJlbmNlcyB0aGVyZS1pbikKK2RjX2lkZW50aWVyID0gU1RFTSBkaXNlYXNlIG1vZGVsCitkY19wdWJsaXNoZXIgPSBUaGUgRWNsaXBzZSBGb3VuZGF0aW9uCitkY19saWNlbnNlID0gRWNsaXBzZSBQdWJsaWMgTGljZW5zZSAoRVBMKQorZGNfZGVzY19TUV9MYXR0aWNlID0gU3F1YXJlIExhdHRpY2UgR3JhcGggR2VuZXJhdG9yCitkY190aXRsZV9TUV9MYXR0aWNlID0gU3F1YXJlIExhdHRpY2UgR2VuZXJhdG9yCitkY19kZXNjX1BDX0xhdHRpY2UgPSBQbGF0ZSBDYXJyZWUgR3JhcGggR2VuZXJhdG9yCitkY190aXRsZV9QQ19MYXR0aWNlID0gUGxhdGUgQ2FycmVlIEdlbmVyYXRvcgorZGNfZGVzY19NRV9MYXR0aWNlID0gTWlncmF0aW9uIEVkZ2UgR3JhcGggR2VuZXJhdG9yCitkY190aXRsZV9NRV9MYXR0aWNlID0gTWlncmF0aW9uIEVkZ2UgR2VuZXJhdG9yCitkY19kZXNjX1BKX0xhdHRpY2UgPSBQYWplayBOZXQgR3JhcGggR2VuZXJhdG9yCitkY190aXRsZV9QSl9MYXR0aWNlID0gUGFqZWsgTmV0IEdlbmVyYXRvcgorCisKK19VSV9DcmVhdGVDaGlsZF90ZXh0ID0gezB9CitfVUlfQ3JlYXRlQ2hpbGRfdGV4dDIgPSB7MX0gezB9CitfVUlfQ3JlYXRlQ2hpbGRfdGV4dDMgPSB7MX0KK19VSV9DcmVhdGVDaGlsZF90b29sdGlwID0gQ3JlYXRlIE5ldyB7MH0gVW5kZXIgezF9IEZlYXR1cmUKK19VSV9DcmVhdGVDaGlsZF9kZXNjcmlwdGlvbiA9IENyZWF0ZSBhIG5ldyBjaGlsZCBvZiB0eXBlIHswfSBmb3IgdGhlIHsxfSBmZWF0dXJlIG9mIHRoZSBzZWxlY3RlZCB7Mn0uCitfVUlfQ3JlYXRlU2libGluZ19kZXNjcmlwdGlvbiA9IENyZWF0ZSBhIG5ldyBzaWJsaW5nIG9mIHR5cGUgezB9IGZvciB0aGUgc2VsZWN0ZWQgezJ9LCB1bmRlciB0aGUgezF9IGZlYXR1cmUgb2YgdGhlaXIgcGFyZW50LgorX1VJX1Byb3BlcnR5RGVzY3JpcHRvcl9kZXNjcmlwdGlvbiA9IFRoZSB7MH0gb2YgdGhlIHsxfQorX1VJX0dyYXBoR2VuZXJhdG9yX3R5cGUgPSBHcmFwaCBHZW5lcmF0b3IKK19VSV9MYXR0aWNlR3JhcGhHZW5lcmF0b3JfdHlwZSA9IExhdHRpY2UgR3JhcGggR2VuZXJhdG9yCitfVUlfU3F1YXJlTGF0dGljZUdyYXBoR2VuZXJhdG9yX3R5cGUgPSBTcXVhcmUgTGF0dGljZSBHcmFwaCBHZW5lcmF0b3IKK19VSV9Vbmtub3duX3R5cGUgPSBPYmplY3QKK19VSV9Vbmtub3duX2RhdGF0eXBlPSBWYWx1ZQorX1VJX0xhdHRpY2VHcmFwaEdlbmVyYXRvcl94U2l6ZV9mZWF0dXJlID0gWFNpemUKK19VSV9MYXR0aWNlR3JhcGhHZW5lcmF0b3JfeVNpemVfZmVhdHVyZSA9IFlTaXplCitfVUlfTGF0dGljZUdyYXBoR2VuZXJhdG9yX3VzZU5lYXJlc3ROZWlnaGJvcnNfZmVhdHVyZSA9IFVzZSBOZWFyZXN0IE5laWdoYm9ycworX1VJX0xhdHRpY2VHcmFwaEdlbmVyYXRvcl91c2VOZXh0TmVhcmVzdE5laWdoYm9yc19mZWF0dXJlID0gVXNlIE5leHQgTmVhcmVzdCBOZWlnaGJvcnMKK19VSV9MYXR0aWNlR3JhcGhHZW5lcmF0b3JfcGVyaW9kaWNCb3VuZGFyaWVzX2ZlYXR1cmUgPSBQZXJpb2RpYyBCb3VuZGFyaWVzCitfVUlfVW5rbm93bl9mZWF0dXJlID0gVW5zcGVjaWZpZWQKK19VSV9TcXVhcmVMYXR0aWNlR3JhcGhHZW5lcmF0b3JfYXJlYV9mZWF0dXJlID0gQXJlYQorX1VJX01pZ3JhdGlvbkVkZ2VHcmFwaEdlbmVyYXRvcl90eXBlID0gTWlncmF0aW9uIEVkZ2UgR3JhcGggR2VuZXJhdG9yCitfVUlfTWlncmF0aW9uRWRnZUdyYXBoR2VuZXJhdG9yX2xvY2F0aW9uX2ZlYXR1cmUgPSBMb2NhdGlvbgorX1VJX01pZ3JhdGlvbkVkZ2VHcmFwaEdlbmVyYXRvcl9taWdyYXRpb25SYXRlX2ZlYXR1cmUgPSBNaWdyYXRpb24gUmF0ZQorX1VJX01pZ3JhdGlvbkVkZ2VHcmFwaEdlbmVyYXRvcl9wb3B1bGF0aW9uX2ZlYXR1cmUgPSBQb3B1bGF0aW9uCitfVUlfUGxhdGVDYXJyZWVHbG9iZUdyYXBoR2VuZXJhdG9yX3R5cGUgPSBQbGF0ZSBDYXJyZWUgR2xvYmUgR3JhcGggR2VuZXJhdG9yCitfVUlfUGxhdGVDYXJyZWVHbG9iZUdyYXBoR2VuZXJhdG9yX2FuZ3VsYXJTdGVwX2ZlYXR1cmUgPSBBbmd1bGFyIFN0ZXAKK19VSV9QbGF0ZUNhcnJlZUdsb2JlR3JhcGhHZW5lcmF0b3JfdXNlTmVhcmVzdE5laWdoYm9yc19mZWF0dXJlID0gVXNlIE5lYXJlc3QgTmVpZ2hib3JzCitfVUlfUGxhdGVDYXJyZWVHbG9iZUdyYXBoR2VuZXJhdG9yX3VzZU5leHROZWFyZXN0TmVpZ2hib3JzX2ZlYXR1cmUgPSBVc2UgTmV4dCBOZWFyZXN0IE5laWdoYm9ycworX1VJX1NxdWFyZUxhdHRpY2VHcmFwaEdlbmVyYXRvcl94U2l6ZV9mZWF0dXJlID0gWFNpemUKK19VSV9TcXVhcmVMYXR0aWNlR3JhcGhHZW5lcmF0b3JfeVNpemVfZmVhdHVyZSA9IFlTaXplCitfVUlfUGxhdGVDYXJyZWVHbG9iZUdyYXBoR2VuZXJhdG9yX2FyZWFfZmVhdHVyZSA9IEFyZWEKK19VSV9MYXR0aWNlR3JhcGhHZW5lcmF0b3JfYXJlYV9mZWF0dXJlID0gQXJlYQorX1VJX1BsYXRlQ2FycmVlR2xvYmVHcmFwaEdlbmVyYXRvcl9yYWRpdXNfZmVhdHVyZSA9IFJhZGl1cworX1VJX1BhamVrTmV0R3JhcGhHZW5lcmF0b3JfdHlwZSA9IFBhamVrIE5ldCBHcmFwaCBHZW5lcmF0b3IKK19VSV9QYWpla05ldEdyYXBoR2VuZXJhdG9yX2RhdGFGaWxlX25ldF9mZWF0dXJlID0gRGF0YSBGaWxlIG5ldAorX1VJX1BhamVrTmV0R3JhcGhHZW5lcmF0b3JfYXJlYV9mZWF0dXJlID0gQXJlYQorX1VJX1BhamVrTmV0R3JhcGhHZW5lcmF0b3JfY29udGFpbmVyX2ZlYXR1cmUgPSBDb250YWluZXIKK19VSV9QYWpla05ldEdyYXBoR2VuZXJhdG9yX3NjYWxpbmdmYWN0b3JfZmVhdHVyZSA9IFNjYWxpbmdmYWN0b3IKK19VSV9QYWpla05ldEdyYXBoR2VuZXJhdG9yX2lzR0lTX2ZlYXR1cmUgPSBJcyBHSVMKK19VSV9QYWpla05ldEdyYXBoR2VuZXJhdG9yX0dJU19mZWF0dXJlID0gR0lTCitfVUlfUGFqZWtOZXRHcmFwaEdlbmVyYXRvcl9maXRfZmVhdHVyZSA9IEZpdAorX1VJX1BhamVrTmV0R3JhcGhHZW5lcmF0b3JfZW5mb3JjZUNvbnRhaW5tZW50X2ZlYXR1cmUgPSBFbmZvcmNlIENvbnRhaW5tZW50CitfVUlfUGFqZWtOZXRHcmFwaEdlbmVyYXRvcl9zY2FsaW5nRmFjdG9yX2ZlYXR1cmUgPSBTY2FsaW5nIEZhY3RvcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmdyYXBoZ2VuZXJhdG9ycy9wbHVnaW4ueG1sIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmdyYXBoZ2VuZXJhdG9ycy9wbHVnaW4ueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU2MmU1NmMKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhnZW5lcmF0b3JzL3BsdWdpbi54bWwKQEAgLTAsMCArMSw4MiBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzw/ZWNsaXBzZSB2ZXJzaW9uPSIzLjQiPz4KKzxwbHVnaW4+CisJICA8ZXh0ZW5zaW9uLXBvaW50IGlkPSJncmFwaGdlbmVyYXRvciIgbmFtZT0iJUVQX0Rpc2Vhc2VfTW9kZWwiIHNjaGVtYT0ic2NoZW1hL2dyYXBoZ2VuZXJhdG9yLmV4c2QiLz4KKyAKKyAgIDxleHRlbnNpb24gcG9pbnQ9Im9yZy5lY2xpcHNlLmVtZi5lZGl0Lml0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3JpZXMiPgorICAgIDxmYWN0b3J5IAorICAgICAgIHVyaSA9ICJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vZ3JhcGhnZW5lcmF0b3JzL2dyYXBoZ2VuZXJhdG9ycy5lY29yZSIgCisgICAgICAgY2xhc3MgPSAib3JnLmVjbGlwc2Uuc3RlbS5ncmFwaGdlbmVyYXRvcnMucHJvdmlkZXIuR3JhcGhnZW5lcmF0b3JzSXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkiIAorICAgICAgIHN1cHBvcnRlZFR5cGVzID0gCisgICAgICAgICAib3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUVkaXRpbmdEb21haW5JdGVtUHJvdmlkZXIKKyAgICAgICAgICBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JU3RydWN0dXJlZEl0ZW1Db250ZW50UHJvdmlkZXIKKyAgICAgICAgICBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JVHJlZUl0ZW1Db250ZW50UHJvdmlkZXIKKyAgICAgICAgICBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbUxhYmVsUHJvdmlkZXIKKyAgICAgICAgICBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbVByb3BlcnR5U291cmNlIiAvPgorICA8L2V4dGVuc2lvbj4KKyAKKyAJIDxleHRlbnNpb24KKyAgICAgICAgcG9pbnQ9Im9yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhnZW5lcmF0b3JzLmdyYXBoZ2VuZXJhdG9yIj4KKyAgICAgPGNsYXNzZGVmCisgICAgICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS5zdGVtLmdyYXBoZ2VuZXJhdG9ycy5pbXBsLlNxdWFyZUxhdHRpY2VHcmFwaEdlbmVyYXRvckltcGwiPgorICAgICA8L2NsYXNzZGVmPgorICAgICA8ZHVibGluX2NvcmUKKyAgICAgICAgICAgY3JlYXRvcj0iJWRjX2NyZWF0b3Jfc3RlbXRlYW0iCisgICAgICAgICAgIGlkZW50aWZpZXI9IiVkY19pZGVudGllciIKKyAgICAgICAgICAgbGljZW5zZT0iJWRjX2xpY2Vuc2UiCisgICAgICAgICAgIHB1Ymxpc2hlcj0iJWRjX3B1Ymxpc2hlciIKKyAgICAgICAgICAgc291cmNlPSIlZGNfU09VUkNFIgorICAgICAgICAgICBkZXNjcmlwdGlvbj0iJWRjX2Rlc2NfU1FfTGF0dGljZSIKKyAgICAgICAgICAgdGl0bGU9IiVkY19kZXNjX1NRX0xhdHRpY2UiPgorICAgICA8L2R1Ymxpbl9jb3JlPgorICA8L2V4dGVuc2lvbj4KKyAgCisgIDxleHRlbnNpb24KKyAgICAgICAgcG9pbnQ9Im9yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhnZW5lcmF0b3JzLmdyYXBoZ2VuZXJhdG9yIj4KKyAgICAgPGNsYXNzZGVmCisgICAgICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS5zdGVtLmdyYXBoZ2VuZXJhdG9ycy5pbXBsLlBsYXRlQ2FycmVlR2xvYmVHcmFwaEdlbmVyYXRvckltcGwiPgorICAgICA8L2NsYXNzZGVmPgorICAgICA8ZHVibGluX2NvcmUKKyAgICAgICAgICAgY3JlYXRvcj0iJWRjX2NyZWF0b3Jfc3RlbXRlYW0iCisgICAgICAgICAgIGlkZW50aWZpZXI9IiVkY19pZGVudGllciIKKyAgICAgICAgICAgbGljZW5zZT0iJWRjX2xpY2Vuc2UiCisgICAgICAgICAgIHB1Ymxpc2hlcj0iJWRjX3B1Ymxpc2hlciIKKyAgICAgICAgICAgc291cmNlPSIlZGNfU09VUkNFIgorICAgICAgICAgICBkZXNjcmlwdGlvbj0iJWRjX2Rlc2NfUENfTGF0dGljZSIKKyAgICAgICAgICAgdGl0bGU9IiVkY19kZXNjX1BDX0xhdHRpY2UiPgorICAgICA8L2R1Ymxpbl9jb3JlPgorICA8L2V4dGVuc2lvbj4KKyAgCisgIDxleHRlbnNpb24KKyAgICAgICAgcG9pbnQ9Im9yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhnZW5lcmF0b3JzLmdyYXBoZ2VuZXJhdG9yIj4KKyAgICAgPGNsYXNzZGVmCisgICAgICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS5zdGVtLmdyYXBoZ2VuZXJhdG9ycy5pbXBsLk1pZ3JhdGlvbkVkZ2VHcmFwaEdlbmVyYXRvckltcGwiPgorICAgICA8L2NsYXNzZGVmPgorICAgICA8ZHVibGluX2NvcmUKKyAgICAgICAgICAgY3JlYXRvcj0iJWRjX2NyZWF0b3JfZWRsdW5kIgorICAgICAgICAgICBpZGVudGlmaWVyPSIlZGNfaWRlbnRpZXIiCisgICAgICAgICAgIGxpY2Vuc2U9IiVkY19saWNlbnNlIgorICAgICAgICAgICBwdWJsaXNoZXI9IiVkY19wdWJsaXNoZXIiCisgICAgICAgICAgIHNvdXJjZT0iJWRjX1NPVVJDRSIKKyAgICAgICAgICAgZGVzY3JpcHRpb249IiVkY19kZXNjX01FX0xhdHRpY2UiCisgICAgICAgICAgIHRpdGxlPSIlZGNfZGVzY19NRV9MYXR0aWNlIj4KKyAgICAgPC9kdWJsaW5fY29yZT4KKyAgPC9leHRlbnNpb24+CisgIAorICA8ZXh0ZW5zaW9uCisgICAgcG9pbnQ9Im9yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhnZW5lcmF0b3JzLmdyYXBoZ2VuZXJhdG9yIj4KKyAgICA8Y2xhc3NkZWYKKyAgICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhnZW5lcmF0b3JzLmltcGwuUGFqZWtOZXRHcmFwaEdlbmVyYXRvckltcGwiPgorICAgIDwvY2xhc3NkZWY+CisgICAgPGR1Ymxpbl9jb3JlCisgICAgICAgICAgICBjcmVhdG9yPSIlZGNfY3JlYXRvcl9iZnIiCisgICAgICAgICAgIGlkZW50aWZpZXI9IiVkY19pZGVudGllciIKKyAgICAgICAgICAgbGljZW5zZT0iJWRjX2xpY2Vuc2UiCisgICAgICAgICAgIHB1Ymxpc2hlcj0iJWRjX3B1Ymxpc2hlciIKKyAgICAgICAgICAgc291cmNlPSIlZGNfU09VUkNFIgorICAgICAgICAgICBkZXNjcmlwdGlvbj0iJWRjX2Rlc2NfUEpfTGF0dGljZSIKKyAgICAgICAgICAgdGl0bGU9IiVkY19kZXNjX1BKX0xhdHRpY2UiPgorICAgIDwvZHVibGluX2NvcmU+CisgIDwvZXh0ZW5zaW9uPgorCis8L3BsdWdpbj4KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaGdlbmVyYXRvcnMvcGx1Z2luX2RlLnByb3BlcnRpZXMgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhnZW5lcmF0b3JzL3BsdWdpbl9kZS5wcm9wZXJ0aWVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgwY2M5ZDQKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhnZW5lcmF0b3JzL3BsdWdpbl9kZS5wcm9wZXJ0aWVzCkBAIC0wLDAgKzEsNjcgQEAKKworIyA8Y29weXJpZ2h0PgorIyA8L2NvcHlyaWdodD4KKyMKKyMgJElkJAorCitwbHVnaW5OYW1lPUdyYXBoZ2VuZXJhdG9yIE1vZGVsbAorcHJvdmlkZXJOYW1lPUVjbGlwc2Uub3JnCisKK2RjX2NyZWF0b3Jfc3RlbXRlYW09U1RFTSBUZWFtCitkY19jcmVhdG9yX2Jmcj1iLmYuci4KK2RjX1NPVVJDRT1odHRwOi8vd2lraS5lY2xpcHNlLm9yZy9DcmVhdGluZ19hX25ld19HcmFwaCAodW5kIFJlZmVyZW56ZW4gZ2lidCBlcy1pbikKK2RjX2lkZW50aWVyPVNURU0gS3JhbmtoZWl0c21vZGVsbAorZGNfcHVibGlzaGVyPURpZSBFY2xpcHNlIEZvdW5kYXRpb24KK2RjX2xpY2Vuc2U9RWNsaXBzZSBQdWJsaWMgTGljZW5zZSAoRVBMKQorZGNfZGVzY19TUV9MYXR0aWNlPVF1YWRyYXQtR2l0dGVyLUdyYXBoLUdlbmVyYXRvcgorZGNfdGl0bGVfU1FfTGF0dGljZT1RdWFkcmF0LUdpdHRlci1HZW5lcmF0b3IKK2RjX2Rlc2NfUENfTGF0dGljZT1QbGF0ZSBDYXJyZWUgR3JhcGggR2VuZXJhdG9yCitkY190aXRsZV9QQ19MYXR0aWNlPVBsYXRlIENhcnJlZSBHZW5lcmF0b3IKK2RjX2Rlc2NfTUVfTGF0dGljZT1NaWdyYXRpb25za2FudGVuZ3JhcGgtR2VuZXJhdG9yCitkY190aXRsZV9NRV9MYXR0aWNlPU1pZ3JhdGlvbnNrYW50ZW5nZW5lcmF0b3IKK2RjX2Rlc2NfUEpfTGF0dGljZT1QYWplayBOZXR6IEdyYXBoIEdlbmVyYXRvcgorZGNfdGl0bGVfUEpfTGF0dGljZT1QYWplayBOZXR6IEdlbmVyYXRvcgorCisKK19VSV9DcmVhdGVDaGlsZF90ZXh0PXswfQorX1VJX0NyZWF0ZUNoaWxkX3RleHQyPXsxfSB7MH0KK19VSV9DcmVhdGVDaGlsZF90ZXh0Mz17MX0KK19VSV9DcmVhdGVDaGlsZF90b29sdGlwPU5ldWVzIHswfSB1bnRlciB7MX0gRmVhdHVyZSBlcnN0ZWxsZW4KK19VSV9DcmVhdGVDaGlsZF9kZXNjcmlwdGlvbj1OZXVlcyBLaW5kIHZvbSBUeXAgezB9IGZcdTAwZmNyIGRhcyB7MX0gTWVya21hbCBkZXIgYXVzZ2V3XHUwMGU0aGx0ZW4gezJ9IGVyc3RlbGxlbgorX1VJX0NyZWF0ZVNpYmxpbmdfZGVzY3JpcHRpb249TmV1ZXMgR2VzY2h3aXN0ZXJ0ZWlsIHZvbSBUeXAgezB9IGZcdTAwZmNyIGRlbiBhdXNnZXdcdTAwZTRobHRlbiB7Mn0gdW50ZXIgZGVtIHsxfSBNZXJrbWFsIGRlcyBFbHRlcm50ZWlsIGVyc3RlbGxlbgorX1VJX1Byb3BlcnR5RGVzY3JpcHRvcl9kZXNjcmlwdGlvbj17MH0gdm9uIHsxfQorX1VJX0dyYXBoR2VuZXJhdG9yX3R5cGU9R3JhcGggR2VuZXJhdG9yCitfVUlfTGF0dGljZUdyYXBoR2VuZXJhdG9yX3R5cGU9R2l0dGVyIEdyYXBoIEdlbmVyYXRvcgorX1VJX1NxdWFyZUxhdHRpY2VHcmFwaEdlbmVyYXRvcl90eXBlPVF1YWRyYXQtR2l0dGVyLUdyYXBoLUdlbmVyYXRvcgorX1VJX1Vua25vd25fdHlwZT1PYmpla3QKK19VSV9Vbmtub3duX2RhdGF0eXBlPVdlcnQKK19VSV9MYXR0aWNlR3JhcGhHZW5lcmF0b3JfeFNpemVfZmVhdHVyZT1YLUdyXHUwMGY2XHUwMGRmZQorX1VJX0xhdHRpY2VHcmFwaEdlbmVyYXRvcl95U2l6ZV9mZWF0dXJlPVktR3JcdTAwZjZcdTAwZGZlCitfVUlfTGF0dGljZUdyYXBoR2VuZXJhdG9yX3VzZU5lYXJlc3ROZWlnaGJvcnNfZmVhdHVyZT1OXHUwMGU0Y2hzdGUgTmFjaGJhcm4gYmVudXR6ZW4KK19VSV9MYXR0aWNlR3JhcGhHZW5lcmF0b3JfdXNlTmV4dE5lYXJlc3ROZWlnaGJvcnNfZmVhdHVyZT1OXHUwMGU0Y2hzdGUgblx1MDBlNGNoc3RlIE5hY2hiYXJuIGJlbnV0emVuCitfVUlfTGF0dGljZUdyYXBoR2VuZXJhdG9yX3BlcmlvZGljQm91bmRhcmllc19mZWF0dXJlPVBlcmlvZGlzY2hlIEdyZW56ZW4KK19VSV9Vbmtub3duX2ZlYXR1cmU9TmljaHQgc3BlemlmaXppZXJ0CitfVUlfU3F1YXJlTGF0dGljZUdyYXBoR2VuZXJhdG9yX2FyZWFfZmVhdHVyZT1GbFx1MDBlNGNoZQorX1VJX01pZ3JhdGlvbkVkZ2VHcmFwaEdlbmVyYXRvcl90eXBlPU1pZ3JhdGlvbnNrYW50ZW5ncmFwaC1HZW5lcmF0b3IKK19VSV9NaWdyYXRpb25FZGdlR3JhcGhHZW5lcmF0b3JfbG9jYXRpb25fZmVhdHVyZT1PcnQKK19VSV9NaWdyYXRpb25FZGdlR3JhcGhHZW5lcmF0b3JfbWlncmF0aW9uUmF0ZV9mZWF0dXJlPU1pZ3JhdGlvbnNyYXRlCitfVUlfTWlncmF0aW9uRWRnZUdyYXBoR2VuZXJhdG9yX3BvcHVsYXRpb25fZmVhdHVyZT1CZXZcdTAwZjZsa2VydW5nCitfVUlfUGxhdGVDYXJyZWVHbG9iZUdyYXBoR2VuZXJhdG9yX3R5cGU9UGxhdGUgQ2FycmVlIFdlbHQgR3JhcGggR2VuZXJhdG9yCitfVUlfUGxhdGVDYXJyZWVHbG9iZUdyYXBoR2VuZXJhdG9yX2FuZ3VsYXJTdGVwX2ZlYXR1cmU9V2lua2Vsc2Nocml0dAorX1VJX1BsYXRlQ2FycmVlR2xvYmVHcmFwaEdlbmVyYXRvcl91c2VOZWFyZXN0TmVpZ2hib3JzX2ZlYXR1cmU9Tlx1MDBlNGNoc3RlIE5hY2hiYXJuIGJlbnV0emVuCitfVUlfUGxhdGVDYXJyZWVHbG9iZUdyYXBoR2VuZXJhdG9yX3VzZU5leHROZWFyZXN0TmVpZ2hib3JzX2ZlYXR1cmU9Tlx1MDBlNGNoc3RlIG5cdTAwZTRjaHN0ZSBOYWNoYmFybiBiZW51dHplbgorX1VJX1NxdWFyZUxhdHRpY2VHcmFwaEdlbmVyYXRvcl94U2l6ZV9mZWF0dXJlPVgtR3JcdTAwZjZcdTAwZGZlCitfVUlfU3F1YXJlTGF0dGljZUdyYXBoR2VuZXJhdG9yX3lTaXplX2ZlYXR1cmU9WS1Hclx1MDBmNlx1MDBkZmUKK19VSV9QbGF0ZUNhcnJlZUdsb2JlR3JhcGhHZW5lcmF0b3JfYXJlYV9mZWF0dXJlPUZsXHUwMGU0Y2hlCitfVUlfTGF0dGljZUdyYXBoR2VuZXJhdG9yX2FyZWFfZmVhdHVyZT1GbFx1MDBlNGNoZQorX1VJX1BsYXRlQ2FycmVlR2xvYmVHcmFwaEdlbmVyYXRvcl9yYWRpdXNfZmVhdHVyZT1SYWRpdXMKK19VSV9QYWpla05ldEdyYXBoR2VuZXJhdG9yX3R5cGU9UGFqZWsgTmV0eiBHcmFwaCBHZW5lcmF0b3IKK19VSV9QYWpla05ldEdyYXBoR2VuZXJhdG9yX2RhdGFGaWxlX25ldF9mZWF0dXJlPURhdGVuZmlsZSBuZXQKK19VSV9QYWpla05ldEdyYXBoR2VuZXJhdG9yX2FyZWFfZmVhdHVyZT1GbFx1MDBlNGNoZQorX1VJX1BhamVrTmV0R3JhcGhHZW5lcmF0b3JfY29udGFpbmVyX2ZlYXR1cmU9QmVoXHUwMGU0bHRlcm4KK19VSV9QYWpla05ldEdyYXBoR2VuZXJhdG9yX3NjYWxpbmdmYWN0b3JfZmVhdHVyZT1Ta2FsaWVydW5nc2Zha3RvcgorX1VJX1BhamVrTmV0R3JhcGhHZW5lcmF0b3JfaXNHSVNfZmVhdHVyZT1Jc3QgR0lTCitfVUlfUGFqZWtOZXRHcmFwaEdlbmVyYXRvcl9HSVNfZmVhdHVyZT1HSVMKK19VSV9QYWpla05ldEdyYXBoR2VuZXJhdG9yX2ZpdF9mZWF0dXJlPUFucGFzc2VuCitfVUlfUGFqZWtOZXRHcmFwaEdlbmVyYXRvcl9lbmZvcmNlQ29udGFpbm1lbnRfZmVhdHVyZT1Db250YWlubWVudCBFcnp3aW5nZW4KK19VSV9QYWpla05ldEdyYXBoR2VuZXJhdG9yX3NjYWxpbmdGYWN0b3JfZmVhdHVyZT1Ta2FsaWVydW5nc2Zha3RvcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmdyYXBoZ2VuZXJhdG9ycy9wbHVnaW5fa3IucHJvcGVydGllcyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaGdlbmVyYXRvcnMvcGx1Z2luX2tyLnByb3BlcnRpZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmMyZTcwMgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaGdlbmVyYXRvcnMvcGx1Z2luX2tyLnByb3BlcnRpZXMKQEAgLTAsMCArMSw2NyBAQAorCisjIDxjb3B5cmlnaHQ+CisjIDwvY29weXJpZ2h0PgorIworIyAkSWQkCisKK3BsdWdpbk5hbWU9XHVhZGY4XHViNzk4XHVkNTA0XHVjMGRkXHVjMTMxXHVhZTMwIFx1YmFhOFx1YjM3OAorcHJvdmlkZXJOYW1lPUVjbGlwc2Uub3JnCisKK2RjX2NyZWF0b3Jfc3RlbXRlYW09U1RFTSBcdWQzMDAKK2RjX2NyZWF0b3JfYmZyPWIuZi5yLgorZGNfU09VUkNFPWh0dHA6Ly93aWtpLmVjbGlwc2Uub3JnL0NyZWF0aW5nX2FfbmV3X0dyYXBoIChcdWFkZjhcdWI5YWNcdWFjZTAgXHVjYzM4XHVhY2UwIFx1YmIzOFx1ZDVjY1x1YzVkMFx1YzExYykKK2RjX2lkZW50aWVyPVNURU0gXHVjOWM4XHViY2QxIFx1YmFhOFx1YjM3OAorZGNfcHVibGlzaGVyPVx1Yzc3NFx1ZDA3NFx1YjliZFx1YzJhNCBcdWM3YWNcdWIyZTgKK2RjX2xpY2Vuc2U9XHVjNzc0XHVkMDc0XHViOWJkXHVjMmE0IFx1YWNmNVx1YzZhOSBcdWMwYWNcdWM2YTkgXHVkNWM4XHVhYzAwXHVjMTFjIChFUEwpCitkY19kZXNjX1NRX0xhdHRpY2U9XHVjMGFjXHVhYzAxXHVkNjE1IFx1YWNhOVx1Yzc5MCBcdWFkZjhcdWI3OThcdWQ1MDQgXHVjMGRkXHVjMTMxXHVhZTMwCitkY190aXRsZV9TUV9MYXR0aWNlPVx1YzBhY1x1YWMwMVx1ZDYxNSBcdWFjYTlcdWM3OTAgXHVjMGRkXHVjMTMxXHVhZTMwCitkY19kZXNjX1BDX0xhdHRpY2U9UGxhdGUgQ2FycmVlIFx1YWRmOFx1Yjc5OFx1ZDUwNCBcdWMwZGRcdWMxMzFcdWFlMzAKK2RjX3RpdGxlX1BDX0xhdHRpY2U9UGxhdGUgQ2FycmVlIFx1YzBkZFx1YzEzMVx1YWUzMAorZGNfZGVzY19NRV9MYXR0aWNlPVx1Yzc3NFx1YjNkOSBcdWFjMDBcdWM3YTVcdWM3OTBcdWI5YWMgXHVjMGRkXHVjMTMxXHVhZTMwIFx1YWRmOFx1Yjc5OFx1ZDUwNAorZGNfdGl0bGVfTUVfTGF0dGljZT1cdWM3NzRcdWIzZDkgXHVhYzAwXHVjN2E1XHVjNzkwXHViOWFjIFx1YzBkZFx1YzEzMVx1YWUzMAorZGNfZGVzY19QSl9MYXR0aWNlPVBhamVrIFx1YjEyNFx1ZDJiOCBcdWFkZjhcdWI3OThcdWQ1MDQgXHVjMGRkXHVjMTMxXHVhZTMwCitkY190aXRsZV9QSl9MYXR0aWNlPVBhamVrIFx1YjEyNFx1ZDJiOCBcdWJjMWNcdWMwZGRcdWFlMzAKKworCitfVUlfQ3JlYXRlQ2hpbGRfdGV4dD17MH0KK19VSV9DcmVhdGVDaGlsZF90ZXh0Mj17MX0gezB9CitfVUlfQ3JlYXRlQ2hpbGRfdGV4dDM9ezF9CitfVUlfQ3JlYXRlQ2hpbGRfdG9vbHRpcD17MX0gXHVhZTMwXHViMmE1IFx1ZDU1OFx1YzVkMCBcdWMwYzggezB9IFx1YjljY1x1YjRlNFx1YWUzMAorX1VJX0NyZWF0ZUNoaWxkX2Rlc2NyaXB0aW9uPVx1YzEyMFx1ZDBkZFx1ZDU1YyB7Mn1cdWM3NTggezF9IFx1YWUzMFx1YjJhNVx1YzVkMCBcdWIzMDBcdWQ1NWMgXHVkNjE1XHVjMmRkIHswfVx1Yzc1OCBcdWMwYzhcdWI4NWNcdWM2YjQgQ2hpbGRcdWI5N2MgXHViOWNjXHViNGVkXHViMmM4XHViMmU0LgorX1VJX0NyZWF0ZVNpYmxpbmdfZGVzY3JpcHRpb249XHViZDgwXHViYWE4XHVjNzU4IFx1YzEyMFx1ZDBkZFx1YjQxYyB7Mn1cdWM1ZDBcdWMxMWMgezF9IFx1YWUzMFx1YjJhNVx1YzVkMCBcdWIzMDBcdWQ1NWMgXHVkNjE1XHVjMmRkIHswfVx1Yzc1OCBcdWMwYzhcdWI4NWNcdWM2YjQgXHVkNjE1XHVjODFjXHViOTdjIFx1YjljY1x1YjRlZFx1YjJjOFx1YjJlNC4KK19VSV9Qcm9wZXJ0eURlc2NyaXB0b3JfZGVzY3JpcHRpb249ezF9IFx1YzkxMSB7MH0KK19VSV9HcmFwaEdlbmVyYXRvcl90eXBlPVx1YWRmOFx1Yjc5OFx1ZDUwNCBcdWMwZGRcdWMxMzFcdWFlMzAKK19VSV9MYXR0aWNlR3JhcGhHZW5lcmF0b3JfdHlwZT1cdWFjYTlcdWM3OTAgXHVhZGY4XHViNzk4XHVkNTA0IFx1YzBkZFx1YzEzMVx1YWUzMAorX1VJX1NxdWFyZUxhdHRpY2VHcmFwaEdlbmVyYXRvcl90eXBlPVx1YzBhY1x1YWMwMVx1ZDYxNSBcdWFjYTlcdWM3OTAgXHVhZGY4XHViNzk4XHVkNTA0IFx1YzBkZFx1YzEzMVx1YWUzMAorX1VJX1Vua25vd25fdHlwZT1cdWFjMWNcdWNjYjQKK19VSV9Vbmtub3duX2RhdGF0eXBlPVx1YWMxMgorX1VJX0xhdHRpY2VHcmFwaEdlbmVyYXRvcl94U2l6ZV9mZWF0dXJlPVhcdWQwNmNcdWFlMzAKK19VSV9MYXR0aWNlR3JhcGhHZW5lcmF0b3JfeVNpemVfZmVhdHVyZT1ZXHVkMDZjXHVhZTMwCitfVUlfTGF0dGljZUdyYXBoR2VuZXJhdG9yX3VzZU5lYXJlc3ROZWlnaGJvcnNfZmVhdHVyZT1cdWFjMDBcdWM3YTUgXHVhYzAwXHVhZTRjXHVjNmI0IFx1Yzc3NFx1YzZjMyBcdWMwYWNcdWM2YTkKK19VSV9MYXR0aWNlR3JhcGhHZW5lcmF0b3JfdXNlTmV4dE5lYXJlc3ROZWlnaGJvcnNfZmVhdHVyZT1cdWIyZTRcdWM3NGNcdWM3M2NcdWI4NWMgXHVhYzAwXHVjN2E1IFx1YWMwMFx1YWU0Y1x1YzZiNCBcdWM3NzRcdWM2YzMgXHVjMGFjXHVjNmE5CitfVUlfTGF0dGljZUdyYXBoR2VuZXJhdG9yX3BlcmlvZGljQm91bmRhcmllc19mZWF0dXJlPVx1YzJkY1x1YWMwNCBcdWIyZThcdWM3MDQgXHVhY2JkXHVhY2M0CitfVUlfVW5rbm93bl9mZWF0dXJlPVx1YzljMFx1YzgxNVx1YjQxOFx1YzljMCBcdWM1NGFcdWM3NGMKK19VSV9TcXVhcmVMYXR0aWNlR3JhcGhHZW5lcmF0b3JfYXJlYV9mZWF0dXJlPVx1YzljMFx1YzVlZAorX1VJX01pZ3JhdGlvbkVkZ2VHcmFwaEdlbmVyYXRvcl90eXBlPVx1Yzc3NFx1YjNkOSBcdWFjMDBcdWM3YTVcdWM3OTBcdWI5YWMgXHVjMGRkXHVjMTMxXHVhZTMwIFx1YWRmOFx1Yjc5OFx1ZDUwNAorX1VJX01pZ3JhdGlvbkVkZ2VHcmFwaEdlbmVyYXRvcl9sb2NhdGlvbl9mZWF0dXJlPVx1YzcwNFx1Y2U1OAorX1VJX01pZ3JhdGlvbkVkZ2VHcmFwaEdlbmVyYXRvcl9taWdyYXRpb25SYXRlX2ZlYXR1cmU9XHVjNzc0XHViM2Q5XHVjNzI4CitfVUlfTWlncmF0aW9uRWRnZUdyYXBoR2VuZXJhdG9yX3BvcHVsYXRpb25fZmVhdHVyZT1cdWM3NzhcdWFkNmMKK19VSV9QbGF0ZUNhcnJlZUdsb2JlR3JhcGhHZW5lcmF0b3JfdHlwZT1QbGF0ZSBDYXJyZWUgXHVhZTAwXHViODVjXHViZTBjIFx1YWRmOFx1Yjc5OFx1ZDUwNCBcdWMwZGRcdWMxMzFcdWFlMzAKK19VSV9QbGF0ZUNhcnJlZUdsb2JlR3JhcGhHZW5lcmF0b3JfYW5ndWxhclN0ZXBfZmVhdHVyZT1cdWFjMDFcdWIzYzQgXHViMmU4XHVhY2M0CitfVUlfUGxhdGVDYXJyZWVHbG9iZUdyYXBoR2VuZXJhdG9yX3VzZU5lYXJlc3ROZWlnaGJvcnNfZmVhdHVyZT1cdWFjMDBcdWM3YTUgXHVhYzAwXHVhZTRjXHVjNmI0IFx1Yzc3NFx1YzZjMyBcdWMwYWNcdWM2YTkKK19VSV9QbGF0ZUNhcnJlZUdsb2JlR3JhcGhHZW5lcmF0b3JfdXNlTmV4dE5lYXJlc3ROZWlnaGJvcnNfZmVhdHVyZT1cdWIyZTRcdWM3NGNcdWM3M2NcdWI4NWMgXHVhYzAwXHVjN2E1IFx1YWMwMFx1YWU0Y1x1YzZiNCBcdWM3NzRcdWM2YzMgXHVjMGFjXHVjNmE5CitfVUlfU3F1YXJlTGF0dGljZUdyYXBoR2VuZXJhdG9yX3hTaXplX2ZlYXR1cmU9WFx1ZDA2Y1x1YWUzMAorX1VJX1NxdWFyZUxhdHRpY2VHcmFwaEdlbmVyYXRvcl95U2l6ZV9mZWF0dXJlPVlcdWQwNmNcdWFlMzAKK19VSV9QbGF0ZUNhcnJlZUdsb2JlR3JhcGhHZW5lcmF0b3JfYXJlYV9mZWF0dXJlPVx1YzljMFx1YzVlZAorX1VJX0xhdHRpY2VHcmFwaEdlbmVyYXRvcl9hcmVhX2ZlYXR1cmU9XHVjOWMwXHVjNWVkCitfVUlfUGxhdGVDYXJyZWVHbG9iZUdyYXBoR2VuZXJhdG9yX3JhZGl1c19mZWF0dXJlPVx1YmMxOFx1YzljMFx1Yjk4NAorX1VJX1BhamVrTmV0R3JhcGhHZW5lcmF0b3JfdHlwZT1QYWplayBcdWIxMjRcdWQyYjggXHVhZGY4XHViNzk4XHVkNTA0IFx1YzBkZFx1YzEzMVx1YWUzMAorX1VJX1BhamVrTmV0R3JhcGhHZW5lcmF0b3JfZGF0YUZpbGVfbmV0X2ZlYXR1cmU9XHViMzcwXHVjNzc0XHVkMTMwIFx1ZDMwY1x1Yzc3YyBuZXQKK19VSV9QYWpla05ldEdyYXBoR2VuZXJhdG9yX2FyZWFfZmVhdHVyZT1cdWM5YzBcdWM1ZWQKK19VSV9QYWpla05ldEdyYXBoR2VuZXJhdG9yX2NvbnRhaW5lcl9mZWF0dXJlPVx1Y2VlOFx1ZDE0Y1x1Yzc3NFx1YjEwOAorX1VJX1BhamVrTmV0R3JhcGhHZW5lcmF0b3Jfc2NhbGluZ2ZhY3Rvcl9mZWF0dXJlPVx1ZDY1NVx1YzdhNVx1YzEzMVx1YzY5NFx1YzE4YworX1VJX1BhamVrTmV0R3JhcGhHZW5lcmF0b3JfaXNHSVNfZmVhdHVyZT1HSVNcdWIyOTQKK19VSV9QYWpla05ldEdyYXBoR2VuZXJhdG9yX0dJU19mZWF0dXJlPUdJUworX1VJX1BhamVrTmV0R3JhcGhHZW5lcmF0b3JfZml0X2ZlYXR1cmU9XHViOWRlXHVjZDk0XHVhZTMwCitfVUlfUGFqZWtOZXRHcmFwaEdlbmVyYXRvcl9lbmZvcmNlQ29udGFpbm1lbnRfZmVhdHVyZT1cdWJkMDlcdWMxYzRcdWI5N2MgXHVjMmRjXHVkNTg5CitfVUlfUGFqZWtOZXRHcmFwaEdlbmVyYXRvcl9zY2FsaW5nRmFjdG9yX2ZlYXR1cmU9XHVkNjU1XHVjN2E1XHVjMTMxIFx1YzY5NFx1YzE4YwpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmdyYXBoZ2VuZXJhdG9ycy9wbHVnaW5femgucHJvcGVydGllcyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaGdlbmVyYXRvcnMvcGx1Z2luX3poLnByb3BlcnRpZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTEzNzlmOQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaGdlbmVyYXRvcnMvcGx1Z2luX3poLnByb3BlcnRpZXMKQEAgLTAsMCArMSw2NyBAQAorCisjIDxjb3B5cmlnaHQ+CisjIDwvY29weXJpZ2h0PgorIworIyAkSWQkCisKK3BsdWdpbk5hbWU9XHU1NmZlXHU3NTFmXHU2MjEwXHU1NjY4XHU2YTIxXHU1NzhiCitwcm92aWRlck5hbWU9RWNsaXBzZS5vcmcKKworZGNfY3JlYXRvcl9zdGVtdGVhbT1TVEVNXHU1NmUyXHU5NjFmCitkY19jcmVhdG9yX2Jmcj1cdTVmYjdcdTU2ZmRcdTk4Y2VcdTk2NjlcdTRmMzBcdThiYTFcdTgwNTRcdTkwYTZcdTY3M2FcdTY3ODQKK2RjX1NPVVJDRT1odHRwOi8vd2lraS5lY2xpcHNlLm9yZy9DcmVhdGluZ19hX25ld19HcmFwaFx1ZmYwOFx1NTQ4Y1x1NTNjMlx1ODAwM1x1OGQ0NFx1NjU5OVx1NGUyZFx1ZmYwOQorZGNfaWRlbnRpZXI9U1RFTVx1NzViZVx1NzVjNVx1NmEyMVx1NTc4YgorZGNfcHVibGlzaGVyPUVjbGlwc2VcdTU3ZmFcdTkxZDFcdTRmMWEKK2RjX2xpY2Vuc2U9RWNsaXBzZVx1NTE2Y1x1NTE3MVx1OGJiOFx1NTNlZlx1ZmYwOEVQTFx1ZmYwOQorZGNfZGVzY19TUV9MYXR0aWNlPVx1NjViOVx1NWY2Mlx1NjgzY1x1NWI1MFx1NTZmZVx1NzUxZlx1NjIxMFx1NTY2OAorZGNfdGl0bGVfU1FfTGF0dGljZT1cdTY1YjlcdTVmNjJcdTY4M2NcdTViNTBcdTU2ZmVcdTc1MWZcdTYyMTBcdTU2NjgKK2RjX2Rlc2NfUENfTGF0dGljZT1cdTdiNDlcdThkZGRcdTU2ZmVcdTVmNjJcdTc1MWZcdTYyMTBcdTU2NjgKK2RjX3RpdGxlX1BDX0xhdHRpY2U9XHU3YjQ5XHU3N2U5XHU3NTFmXHU2MjEwXHU1NjY4CitkY19kZXNjX01FX0xhdHRpY2U9XHU4ZmMxXHU3OWZiXHU4ZmI5XHU3ZjE4XHU1NmZlXHU1ZjYyXHU3NTFmXHU2MjEwXHU1NjY4CitkY190aXRsZV9NRV9MYXR0aWNlPVx1OGZjMVx1NzlmYlx1OGZiOVx1N2YxOFx1NzUxZlx1NjIxMFx1NTY2OAorZGNfZGVzY19QSl9MYXR0aWNlPVBhamVrXHU3ZjUxXHU3ZWRjXHU1NmZlXHU1ZjYyXHU3NTFmXHU2MjEwXHU1NjY4CitkY190aXRsZV9QSl9MYXR0aWNlPVBhamVrXHU3ZjUxXHU3ZWRjXHU3NTFmXHU2MjEwCisKKworX1VJX0NyZWF0ZUNoaWxkX3RleHQ9ezB9CitfVUlfQ3JlYXRlQ2hpbGRfdGV4dDI9ezF9IHswfQorX1VJX0NyZWF0ZUNoaWxkX3RleHQzPXsxfQorX1VJX0NyZWF0ZUNoaWxkX3Rvb2x0aXA9XHU1MjFiXHU1ZWZhXHU1NzI4ezF9IHswfVx1NjViMFx1NTI5Zlx1ODBmZAorX1VJX0NyZWF0ZUNoaWxkX2Rlc2NyaXB0aW9uPVx1NGUzYVx1OTAwOVx1NWI5YVx1NzY4NHsyfVx1NzY4NHsxfVx1NzI3OVx1NjAyN1x1Njc2NVx1NTIxYlx1NWVmYVx1NGUwMFx1NGUyYVx1NjViMFx1NzY4NHswfVx1NWI1MFx1N2M3YgorX1VJX0NyZWF0ZVNpYmxpbmdfZGVzY3JpcHRpb249XHU1NzI4ezF9XHU3Njg0XHU3MjM2XHU5NmM2XHU0ZTJkXHU0ZTNhXHU5MDA5XHU1YjlhXHU3Njg0ezJ9XHU2NzY1XHU1MjFiXHU1ZWZhXHU0ZTAwXHU0ZTJhezB9XHU3YzdiXHU1NzhiXHU3Njg0XHU2NWIwXHU3Njg0XHU1MTQ0XHU1ZjFmXHU3YzdiCitfVUlfUHJvcGVydHlEZXNjcmlwdG9yX2Rlc2NyaXB0aW9uPXswfVx1NGVjZVx1NWM1ZXsxfQorX1VJX0dyYXBoR2VuZXJhdG9yX3R5cGU9XHU1NmZlXHU3NTFmXHU2MjEwXHU1NjY4CitfVUlfTGF0dGljZUdyYXBoR2VuZXJhdG9yX3R5cGU9XHU2ODNjXHU1YjUwXHU1NmZlXHU1ZjYyXHU3NTFmXHU2MjEwXHU1NjY4CitfVUlfU3F1YXJlTGF0dGljZUdyYXBoR2VuZXJhdG9yX3R5cGU9XHU2NWI5XHU1ZjYyXHU2ODNjXHU1YjUwXHU1NmZlXHU3NTFmXHU2MjEwXHU1NjY4CitfVUlfVW5rbm93bl90eXBlPVx1NWJmOVx1OGM2MQorX1VJX1Vua25vd25fZGF0YXR5cGU9XHU0ZWY3XHU1MDNjCitfVUlfTGF0dGljZUdyYXBoR2VuZXJhdG9yX3hTaXplX2ZlYXR1cmU9WFx1NzY4NFx1NTkyN1x1NWMwZgorX1VJX0xhdHRpY2VHcmFwaEdlbmVyYXRvcl95U2l6ZV9mZWF0dXJlPVlcdTc2ODRcdTU5MjdcdTVjMGYKK19VSV9MYXR0aWNlR3JhcGhHZW5lcmF0b3JfdXNlTmVhcmVzdE5laWdoYm9yc19mZWF0dXJlPVx1NGY3Zlx1NzUyOFx1NjcwMFx1OGZkMVx1NzY4NFx1OTBiYlx1NWM0NQorX1VJX0xhdHRpY2VHcmFwaEdlbmVyYXRvcl91c2VOZXh0TmVhcmVzdE5laWdoYm9yc19mZWF0dXJlPVx1NGY3Zlx1NzUyOFx1NGUwYlx1NGUwMFx1NGUyYVx1NjcwMFx1OGZkMVx1NzY4NFx1OTBiYlx1NWM0NQorX1VJX0xhdHRpY2VHcmFwaEdlbmVyYXRvcl9wZXJpb2RpY0JvdW5kYXJpZXNfZmVhdHVyZT1cdTU0NjhcdTY3MWZcdThmYjlcdTc1NGMKK19VSV9Vbmtub3duX2ZlYXR1cmU9XHU2NzJhXHU2MzA3XHU1YjlhCitfVUlfU3F1YXJlTGF0dGljZUdyYXBoR2VuZXJhdG9yX2FyZWFfZmVhdHVyZT1cdTk3NjJcdTc5ZWYKK19VSV9NaWdyYXRpb25FZGdlR3JhcGhHZW5lcmF0b3JfdHlwZT1cdThmYzFcdTc5ZmJcdThmYjlcdTdmMThcdTU2ZmVcdTVmNjJcdTc1MWZcdTYyMTBcdTU2NjgKK19VSV9NaWdyYXRpb25FZGdlR3JhcGhHZW5lcmF0b3JfbG9jYXRpb25fZmVhdHVyZT1cdTU3MzBcdTcwYjkKK19VSV9NaWdyYXRpb25FZGdlR3JhcGhHZW5lcmF0b3JfbWlncmF0aW9uUmF0ZV9mZWF0dXJlPVx1OGZjMVx1NzlmYlx1NzM4NworX1VJX01pZ3JhdGlvbkVkZ2VHcmFwaEdlbmVyYXRvcl9wb3B1bGF0aW9uX2ZlYXR1cmU9XHU3OWNkXHU3ZmE0CitfVUlfUGxhdGVDYXJyZWVHbG9iZUdyYXBoR2VuZXJhdG9yX3R5cGU9XHU3YjQ5XHU4ZGRkXHU1NzMwXHU3NDAzXHU1NmZlXHU1ZjYyXHU3NTFmXHU2MjEwXHU1NjY4CitfVUlfUGxhdGVDYXJyZWVHbG9iZUdyYXBoR2VuZXJhdG9yX2FuZ3VsYXJTdGVwX2ZlYXR1cmU9XHU4OWQyXHU2YjY1XHU5NTdmCitfVUlfUGxhdGVDYXJyZWVHbG9iZUdyYXBoR2VuZXJhdG9yX3VzZU5lYXJlc3ROZWlnaGJvcnNfZmVhdHVyZT1cdTRmN2ZcdTc1MjhcdTY3MDBcdThmZDFcdTc2ODRcdTkwYmJcdTVjNDUKK19VSV9QbGF0ZUNhcnJlZUdsb2JlR3JhcGhHZW5lcmF0b3JfdXNlTmV4dE5lYXJlc3ROZWlnaGJvcnNfZmVhdHVyZT1cdTRmN2ZcdTc1MjhcdTRlMGJcdTRlMDBcdTRlMmFcdTY3MDBcdThmZDFcdTc2ODRcdTkwYmJcdTVjNDUKK19VSV9TcXVhcmVMYXR0aWNlR3JhcGhHZW5lcmF0b3JfeFNpemVfZmVhdHVyZT1YXHU3Njg0XHU1OTI3XHU1YzBmCitfVUlfU3F1YXJlTGF0dGljZUdyYXBoR2VuZXJhdG9yX3lTaXplX2ZlYXR1cmU9WVx1NzY4NFx1NTkyN1x1NWMwZgorX1VJX1BsYXRlQ2FycmVlR2xvYmVHcmFwaEdlbmVyYXRvcl9hcmVhX2ZlYXR1cmU9XHU5NzYyXHU3OWVmCitfVUlfTGF0dGljZUdyYXBoR2VuZXJhdG9yX2FyZWFfZmVhdHVyZT1cdTk3NjJcdTc5ZWYKK19VSV9QbGF0ZUNhcnJlZUdsb2JlR3JhcGhHZW5lcmF0b3JfcmFkaXVzX2ZlYXR1cmU9XHU1MzRhXHU1Zjg0CitfVUlfUGFqZWtOZXRHcmFwaEdlbmVyYXRvcl90eXBlPVBhamVrXHU3ZjUxXHU3ZWRjXHU1NmZlXHU1ZjYyXHU3NTFmXHU2MjEwXHU1NjY4CitfVUlfUGFqZWtOZXRHcmFwaEdlbmVyYXRvcl9kYXRhRmlsZV9uZXRfZmVhdHVyZT1cdTY1NzBcdTYzNmVcdTY1ODdcdTRlZjZcdTdmNTFcdTdlZGMKK19VSV9QYWpla05ldEdyYXBoR2VuZXJhdG9yX2FyZWFfZmVhdHVyZT1cdTk3NjJcdTc5ZWYKK19VSV9QYWpla05ldEdyYXBoR2VuZXJhdG9yX2NvbnRhaW5lcl9mZWF0dXJlPVx1NWJiOVx1NTY2OAorX1VJX1BhamVrTmV0R3JhcGhHZW5lcmF0b3Jfc2NhbGluZ2ZhY3Rvcl9mZWF0dXJlPVx1N2YyOVx1NjUzZVx1NTZlMFx1NWI1MAorX1VJX1BhamVrTmV0R3JhcGhHZW5lcmF0b3JfaXNHSVNfZmVhdHVyZT1cdTY2MmZcdTU3MzBcdTc0MDZcdTRmZTFcdTYwNmZcdTdjZmJcdTdlZGYKK19VSV9QYWpla05ldEdyYXBoR2VuZXJhdG9yX0dJU19mZWF0dXJlPVx1NTczMFx1NzQwNlx1NGZlMVx1NjA2Zlx1N2NmYlx1N2VkZgorX1VJX1BhamVrTmV0R3JhcGhHZW5lcmF0b3JfZml0X2ZlYXR1cmU9XHU5MDAyXHU1NDA4CitfVUlfUGFqZWtOZXRHcmFwaEdlbmVyYXRvcl9lbmZvcmNlQ29udGFpbm1lbnRfZmVhdHVyZT1cdTVmM2FcdTUyMzZcdTkwNGZcdTUyMzYKK19VSV9QYWpla05ldEdyYXBoR2VuZXJhdG9yX3NjYWxpbmdGYWN0b3JfZmVhdHVyZT1cdTdmMjlcdTY1M2VcdTU2ZTBcdTViNTAKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaGdlbmVyYXRvcnMvc2NoZW1hL2dyYXBoZ2VuZXJhdG9yLmV4c2QgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhnZW5lcmF0b3JzL3NjaGVtYS9ncmFwaGdlbmVyYXRvci5leHNkCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc3YjNjYTAKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhnZW5lcmF0b3JzL3NjaGVtYS9ncmFwaGdlbmVyYXRvci5leHNkCkBAIC0wLDAgKzEsMTA1IEBACis8P3htbCB2ZXJzaW9uPScxLjAnIGVuY29kaW5nPSdVVEYtOCc/PgorPCEtLSBTY2hlbWEgZmlsZSB3cml0dGVuIGJ5IFBERSAtLT4KKzxzY2hlbWEgdGFyZ2V0TmFtZXNwYWNlPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSI+Cis8YW5ub3RhdGlvbj4KKyAgICAgIDxhcHBpbmZvPgorICAgICAgICAgPG1ldGEuc2NoZW1hIHBsdWdpbj0ib3JnLmVjbGlwc2Uuc3RlbS5ncmFwaGdlbmVyYXRvcnMiIGlkPSJncmFwaGdlbmVyYXRvciIgbmFtZT0iU1RFTSBHcmFwaCBHZW5lcmF0b3IiLz4KKyAgICAgIDwvYXBwaW5mbz4KKyAgICAgIDxkb2N1bWVudGF0aW9uPgorICAgICAgICAgVGhpcyBleHRlbnNpb24gcG9pbnQgaXMgdXNlZCB0byBjcmVhdGUgbmV3IHdheXMgb2YgaW1wb3J0aW5nIGdyYXBocyBpbnRvIFNURU0KKyAgICAgIDwvZG9jdW1lbnRhdGlvbj4KKyAgIDwvYW5ub3RhdGlvbj4KKworICAgPGluY2x1ZGUgc2NoZW1hTG9jYXRpb249InNjaGVtYTovL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zY2hlbWEvZHVibGluX2NvcmUuZXhzZCIvPgorCisgICA8ZWxlbWVudCBuYW1lPSJleHRlbnNpb24iPgorICAgICAgPGFubm90YXRpb24+CisgICAgICAgICA8YXBwaW5mbz4KKyAgICAgICAgICAgIDxtZXRhLmVsZW1lbnQgLz4KKyAgICAgICAgIDwvYXBwaW5mbz4KKyAgICAgIDwvYW5ub3RhdGlvbj4KKyAgICAgIDxjb21wbGV4VHlwZT4KKyAgICAgICAgIDxzZXF1ZW5jZT4KKyAgICAgICAgICAgIDxlbGVtZW50IHJlZj0iY2xhc3NkZWYiLz4KKyAgICAgICAgICAgIDxlbGVtZW50IHJlZj0iZHVibGluX2NvcmUiLz4KKyAgICAgICAgIDwvc2VxdWVuY2U+CisgICAgICAgICA8YXR0cmlidXRlIG5hbWU9InBvaW50IiB0eXBlPSJzdHJpbmciIHVzZT0icmVxdWlyZWQiPgorICAgICAgICAgICAgPGFubm90YXRpb24+CisgICAgICAgICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KKyAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgorICAgICAgICAgICAgPC9hbm5vdGF0aW9uPgorICAgICAgICAgPC9hdHRyaWJ1dGU+CisgICAgICAgICA8YXR0cmlidXRlIG5hbWU9ImlkIiB0eXBlPSJzdHJpbmciPgorICAgICAgICAgICAgPGFubm90YXRpb24+CisgICAgICAgICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KKyAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgorICAgICAgICAgICAgPC9hbm5vdGF0aW9uPgorICAgICAgICAgPC9hdHRyaWJ1dGU+CisgICAgICAgICA8YXR0cmlidXRlIG5hbWU9Im5hbWUiIHR5cGU9InN0cmluZyI+CisgICAgICAgICAgICA8YW5ub3RhdGlvbj4KKyAgICAgICAgICAgICAgIDxkb2N1bWVudGF0aW9uPgorICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICA8L2RvY3VtZW50YXRpb24+CisgICAgICAgICAgICAgICA8YXBwaW5mbz4KKyAgICAgICAgICAgICAgICAgIDxtZXRhLmF0dHJpYnV0ZSB0cmFuc2xhdGFibGU9InRydWUiLz4KKyAgICAgICAgICAgICAgIDwvYXBwaW5mbz4KKyAgICAgICAgICAgIDwvYW5ub3RhdGlvbj4KKyAgICAgICAgIDwvYXR0cmlidXRlPgorICAgICAgPC9jb21wbGV4VHlwZT4KKyAgIDwvZWxlbWVudD4KKworICAgPGVsZW1lbnQgbmFtZT0iY2xhc3NkZWYiPgorICAgICAgPGNvbXBsZXhUeXBlPgorICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJjbGFzcyIgdHlwZT0ic3RyaW5nIiB1c2U9InJlcXVpcmVkIj4KKyAgICAgICAgICAgIDxhbm5vdGF0aW9uPgorICAgICAgICAgICAgICAgPGRvY3VtZW50YXRpb24+CisgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgIDwvZG9jdW1lbnRhdGlvbj4KKyAgICAgICAgICAgICAgIDxhcHBpbmZvPgorICAgICAgICAgICAgICAgICAgPG1ldGEuYXR0cmlidXRlIGtpbmQ9ImphdmEiIGJhc2VkT249Im9yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhnZW5lcmF0b3JzLmltcGwuR3JhcGhHZW5lcmF0b3JJbXBsOm9yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhnZW5lcmF0b3JzLkdyYXBoR2VuZXJhdG9yIi8+CisgICAgICAgICAgICAgICA8L2FwcGluZm8+CisgICAgICAgICAgICA8L2Fubm90YXRpb24+CisgICAgICAgICA8L2F0dHJpYnV0ZT4KKyAgICAgIDwvY29tcGxleFR5cGU+CisgICA8L2VsZW1lbnQ+CisKKyAgIDxhbm5vdGF0aW9uPgorICAgICAgPGFwcGluZm8+CisgICAgICAgICA8bWV0YS5zZWN0aW9uIHR5cGU9InNpbmNlIi8+CisgICAgICA8L2FwcGluZm8+CisgICAgICA8ZG9jdW1lbnRhdGlvbj4KKyAgICAgICAgIDEuMDEKKyAgICAgIDwvZG9jdW1lbnRhdGlvbj4KKyAgIDwvYW5ub3RhdGlvbj4KKworICAgPGFubm90YXRpb24+CisgICAgICA8YXBwaW5mbz4KKyAgICAgICAgIDxtZXRhLnNlY3Rpb24gdHlwZT0iZXhhbXBsZXMiLz4KKyAgICAgIDwvYXBwaW5mbz4KKyAgICAgIDxkb2N1bWVudGF0aW9uPgorICAgICAgICAgVGhpcyBleHRlbnNpb24gcG9pbnQgaXMgdXNlZCB0byBjcmVhdGUgbmV3IHdheXMgb2YgaW1wb3J0aW5nIGdyYXBocyBpbnRvIFNURU0KKyAgICAgIDwvZG9jdW1lbnRhdGlvbj4KKyAgIDwvYW5ub3RhdGlvbj4KKworICAgPGFubm90YXRpb24+CisgICAgICA8YXBwaW5mbz4KKyAgICAgICAgIDxtZXRhLnNlY3Rpb24gdHlwZT0iYXBpSW5mbyIvPgorICAgICAgPC9hcHBpbmZvPgorICAgICAgPGRvY3VtZW50YXRpb24+CisgICAgICAgICBbRW50ZXIgQVBJIGluZm9ybWF0aW9uIGhlcmUuXQorICAgICAgPC9kb2N1bWVudGF0aW9uPgorICAgPC9hbm5vdGF0aW9uPgorCisgICA8YW5ub3RhdGlvbj4KKyAgICAgIDxhcHBpbmZvPgorICAgICAgICAgPG1ldGEuc2VjdGlvbiB0eXBlPSJpbXBsZW1lbnRhdGlvbiIvPgorICAgICAgPC9hcHBpbmZvPgorICAgICAgPGRvY3VtZW50YXRpb24+CisgICAgICAgICBbRW50ZXIgaW5mb3JtYXRpb24gYWJvdXQgc3VwcGxpZWQgaW1wbGVtZW50YXRpb24gb2YgdGhpcyBleHRlbnNpb24gcG9pbnQuXQorICAgICAgPC9kb2N1bWVudGF0aW9uPgorICAgPC9hbm5vdGF0aW9uPgorCisKKzwvc2NoZW1hPgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmdyYXBoZ2VuZXJhdG9ycy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9ncmFwaGdlbmVyYXRvcnMvQWN0aXZhdG9yLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhnZW5lcmF0b3JzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2dyYXBoZ2VuZXJhdG9ycy9BY3RpdmF0b3IuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMzFhYjM5Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmdyYXBoZ2VuZXJhdG9ycy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9ncmFwaGdlbmVyYXRvcnMvQWN0aXZhdG9yLmphdmEKQEAgLTAsMCArMSwxODcgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaGdlbmVyYXRvcnM7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklDb25maWd1cmF0aW9uRWxlbWVudDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSUV4dGVuc2lvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSUV4dGVuc2lvblBvaW50OworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JRXh0ZW5zaW9uUmVnaXN0cnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBsYXRmb3JtOworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TdGF0dXM7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVTdHJ1Y3R1cmFsRmVhdHVyZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuQ29uc3RhbnRzOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uRHVibGluQ29yZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5wbHVnaW4uQWJzdHJhY3RVSVBsdWdpbjsKKworLyoqCisgKiBUaGUgYWN0aXZhdG9yIGNsYXNzIGNvbnRyb2xzIHRoZSBwbHVnLWluIGxpZmUgY3ljbGUKKyAqLworcHVibGljIGNsYXNzIEFjdGl2YXRvciBleHRlbmRzIEFic3RyYWN0VUlQbHVnaW4geworCisJLyoqCisJICogVGhlIHBsdWctaW4gSUQKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBQTFVHSU5fSUQgPSBDb25zdGFudHMuSURfUk9PVCArICIuZ3JhcGhnZW5lcmF0b3JzIjsKKwkKKwlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBDTEFTU19GSUVMRCA9ICJjbGFzcyI7CisJCisKKwkvLyBUaGUgc2hhcmVkIGluc3RhbmNlCisJcHJpdmF0ZSBzdGF0aWMgQWN0aXZhdG9yIHBsdWdpbjsKKworCS8qKgorCSAqIFRoZSBjb25zdHJ1Y3RvcgorCSAqLworCXB1YmxpYyBBY3RpdmF0b3IoKSB7CisJCXBsdWdpbiA9IHRoaXM7CisJfQorCisJCisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBzaGFyZWQgaW5zdGFuY2UKKwkgKiAKKwkgKiBAcmV0dXJuIHRoZSBzaGFyZWQgaW5zdGFuY2UKKwkgKi8KKwlwdWJsaWMgc3RhdGljIEFjdGl2YXRvciBnZXREZWZhdWx0KCkgeworCQlyZXR1cm4gcGx1Z2luOworCX0KKworCQorCS8qKgorCSAqCisJICogQHBhcmFtIGRpc2Vhc2VNb2RlbAorCSAqIEByZXR1cm4KKwkgKi8KKwlwdWJsaWMgc3RhdGljIER1YmxpbkNvcmUgZ2V0UGx1Z2luRHVibGluQ29yZShHcmFwaEdlbmVyYXRvciBncmFwaEdlbmVyYXRvciApIHsKKwkJU3RyaW5nIGdyYXBoR2VuZXJhdG9yQ2xhc3MgPSBncmFwaEdlbmVyYXRvci5nZXRDbGFzcygpLmdldE5hbWUoKTsKKwkJCisJCUR1YmxpbkNvcmUgZGMgPSBudWxsOworCQlmaW5hbCBJRXh0ZW5zaW9uUmVnaXN0cnkgcmVnaXN0cnkgPSBQbGF0Zm9ybS5nZXRFeHRlbnNpb25SZWdpc3RyeSgpOworCQkKKyAgICAgICAgSUV4dGVuc2lvblBvaW50W10gZXh0ZW5zaW9uUG9pbnRzID0gcmVnaXN0cnkuZ2V0RXh0ZW5zaW9uUG9pbnRzKFBMVUdJTl9JRCk7CisgICAgICAgIGZvcihpbnQgayA9IDA7IGsgPCBleHRlbnNpb25Qb2ludHMubGVuZ3RoOyBrKyspeworICAgICAgICAJCisgICAgICAgIAkgSUV4dGVuc2lvblBvaW50IGV4dGVuc2lvblBvaW50ID0gZXh0ZW5zaW9uUG9pbnRzW2tdOworICAgICAgICAJIElFeHRlbnNpb25bXSBleHRlbnNpb25zID0gZXh0ZW5zaW9uUG9pbnQuZ2V0RXh0ZW5zaW9ucygpOworICAgICAgICAJIC8vIEZvciBlYWNoIGV4dGVuc2lvbiAuLi4KKyAgICAJICAgICBmb3IgKGludCBpID0gMDsgaSA8IGV4dGVuc2lvbnMubGVuZ3RoOyBpKyspIHsgCisgICAgCSAgICAgICAgIElFeHRlbnNpb24gZXh0ZW5zaW9uID0gZXh0ZW5zaW9uc1tpXTsKKyAgICAJICAgICAgICAgSUNvbmZpZ3VyYXRpb25FbGVtZW50W10gZWxlbWVudHMgPSBleHRlbnNpb24uZ2V0Q29uZmlndXJhdGlvbkVsZW1lbnRzKCk7CisgICAgCSAgICAgICAgICAgIAorICAgIAkgICAgICAgICAvLyBGb3IgZWFjaCBtZW1iZXIgb2YgdGhlIGV4dGVuc2lvbiAuLi4KKyAgICAJICAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCBlbGVtZW50cy5sZW5ndGg7IGorKykgeworICAgIAkgICAgICAgICAgICAgICAgSUNvbmZpZ3VyYXRpb25FbGVtZW50IGVsZW1lbnQgPSBlbGVtZW50c1tqXTsKKyAgICAJICAgICAgICAgICAgIAorICAgIAkgICAgICAgICAgICAgICAgU3RyaW5nW10ga2V5cyA9IGVsZW1lbnQuZ2V0QXR0cmlidXRlTmFtZXMoKTsKKyAgICAJICAgICAgICAgICAgICAgIGZvciAoaW50IG0gPSAwOyBtIDwga2V5cy5sZW5ndGg7IG0gKyspIHsKKyAgICAJICAgICAgICAgICAgICAgIAlTdHJpbmcgdmFsdWUgPSBlbGVtZW50LmdldEF0dHJpYnV0ZShrZXlzW21dKTsKKyAgICAJICAgICAgICAgICAgICAgIAkKKyAgICAJICAgICAgICAgICAgICAgIAlpZigoa2V5c1ttXS5lcXVhbHNJZ25vcmVDYXNlKENMQVNTX0ZJRUxEKSYmKHZhbHVlLmVxdWFsc0lnbm9yZUNhc2UoZ3JhcGhHZW5lcmF0b3JDbGFzcykpKSl7CisgICAgCSAgICAgICAgICAgICAgICAJCWRjID0gZ3JhcGhHZW5lcmF0b3IuZ2V0RHVibGluQ29yZSgpOworICAgIAkgICAgICAgICAgICAgICAgCX0gZWxzZSB7CisgICAgCSAgICAgICAgICAgICAgICAJCWlmKGRjICE9IG51bGwpIHsJCisgICAgCSAgICAgICAgICAgICAgICAJCQlFU3RydWN0dXJhbEZlYXR1cmUgZmVhdHVyZSA9IGRjLmdldEZlYXR1cmUoa2V5c1ttXSk7CisgICAgCSAgICAgICAgICAgICAgICAJCQlpZigoZmVhdHVyZSAhPSBudWxsKSYmKHZhbHVlIT1udWxsKSkgeworICAgIAkgICAgICAgICAgICAgICAgCQkJCQlkYy5lU2V0KGZlYXR1cmUsIHZhbHVlKTsKKyAgICAJICAgICAgICAgICAgICAgIAkJCX0vLyBpZiBmZWF0dXJlL3ZhbHVlIG5vdCBudWxsCisgICAgCSAgICAgICAgICAgICAgICAJCX0vLyBpZiBkYyBub3QgbnVsbAorICAgIAkgICAgICAgICAgICAgICAgCX0vLyBpZi9lbHNlCisgICAgCSAgICAgICAgICAgICAgICB9ICAvL2ZvciBtIG5hbWUvdmFsdWUgcGFpcnMKKyAgICAgICAgICAgICAgICB9Ly8gZm9yIGogZWxlbWVudHMKKyAgICAJICAgICAgICAvLyBvbmNlIGl0J3Mgc2V0IHdlIGFyZSBkb25lCisgICAgCSAgICAgICAgaWYoZGMgIT0gbnVsbCkgcmV0dXJuIGRjOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIAorCQlyZXR1cm4gbnVsbDsKKwl9CisJLyoqCisJICogTG9nIGFuIGVycm9yIHRvIHRoZSBJTG9nIGZvciB0aGlzIHBsdWdpbgorCSAqIAorCSAqIEBwYXJhbSBtZXNzYWdlCisJICogICAgICAgICAgICB0aGUgbG9jYWxpemVkIGVycm9yIG1lc3NhZ2UgdGV4dAorCSAqIEBwYXJhbSBleGNlcHRpb24KKwkgKiAgICAgICAgICAgIHRoZSBhc3NvY2lhdGVkIGV4Y2VwdGlvbiwgb3IgbnVsbAorCSAqLworCXB1YmxpYyBzdGF0aWMgdm9pZCBsb2dFcnJvcihTdHJpbmcgbWVzc2FnZSwgVGhyb3dhYmxlIGV4Y2VwdGlvbikgeworCQkvLyBSdW5uaW5nIGFzIGEgcGx1Z2luPworCQlpZiAocGx1Z2luICE9IG51bGwpIHsKKwkJCS8vIFllcworCQkJcGx1Z2luLmdldExvZygpLmxvZygKKwkJCQkJbmV3IFN0YXR1cyhJU3RhdHVzLkVSUk9SLCBwbHVnaW4uZ2V0QnVuZGxlKCkKKwkJCQkJCQkuZ2V0U3ltYm9saWNOYW1lKCksIDAsIG1lc3NhZ2UsIGV4Y2VwdGlvbikpOworCQl9IGVsc2UgeworCQkJU3lzdGVtLmVyci5wcmludGxuKG1lc3NhZ2UpOworCQkJLy8gRXhjZXB0aW9uPworCQkJaWYgKGV4Y2VwdGlvbiAhPSBudWxsKSB7CisJCQkJLy8gWWVzCisJCQkJU3lzdGVtLmVyci5wcmludGxuKGV4Y2VwdGlvbi5nZXRNZXNzYWdlKCkpOworCQkJCWV4Y2VwdGlvbi5wcmludFN0YWNrVHJhY2UoU3lzdGVtLmVycik7CisJCQl9CisJCX0KKworCX0gLy8gbG9nRXJyb3IKKworCS8qKgorCSAqIExvZyBpbmZvcm1hdGlvbiB0byB0aGUgSUxvZyBmb3IgdGhpcyBwbHVnaW4KKwkgKiAKKwkgKiBAcGFyYW0gbWVzc2FnZQorCSAqICAgICAgICAgICAgdGhlIGxvY2FsaXplZCBpbmZvcm1hdGlvbiBtZXNzYWdlIHRleHQKKwkgKiBAcGFyYW0gZXhjZXB0aW9uCisJICogICAgICAgICAgICB0aGUgYXNzb2NpYXRlZCBleGNlcHRpb24sIG9yIG51bGwKKwkgKi8KKwlwdWJsaWMgc3RhdGljIHZvaWQgbG9nSW5mb3JtYXRpb24oU3RyaW5nIG1lc3NhZ2UsIFRocm93YWJsZSBleGNlcHRpb24pIHsKKwkJLy8gRG8gd2UgaGF2ZSBhIHBsdWdpbj8KKwkJaWYgKHBsdWdpbiAhPSBudWxsKSB7CisJCQkvLyBZZXMKKwkJCXBsdWdpbi5nZXRMb2coKS5sb2coCisJCQkJCW5ldyBTdGF0dXMoSVN0YXR1cy5JTkZPLCBwbHVnaW4uZ2V0QnVuZGxlKCkuZ2V0U3ltYm9saWNOYW1lKCksCisJCQkJCQkJMCwgbWVzc2FnZSwgZXhjZXB0aW9uKSk7CisJCX0KKwkJZWxzZSB7CisJCQkvLyBObworCQkJU3lzdGVtLm91dC5wcmludGxuKG1lc3NhZ2UpOworCQkJLy8gRXhjZXB0aW9uPworCQkJaWYgKGV4Y2VwdGlvbiAhPSBudWxsKSB7CisJCQkJLy8gWWVzCisJCQkJU3lzdGVtLm91dC5wcmludGxuKGV4Y2VwdGlvbi5nZXRNZXNzYWdlKCkpOworCQkJfSAvLyBpZiAKKwkJfQorCX0gLy8gbG9nSW5mb3JtYXRpb24KKwkKKwkKKwkvKioKKwkgKiBMb2cgaW5mb3JtYXRpb24gdG8gdGhlIElMb2cgZm9yIHRoaXMgcGx1Z2luCisJICogVGhlIG1ldGhvZCBpcyBvdmVybG9hZGVkIHRvIGFsbG93IGZvciBsb2dJbmZvcm1hdGlvbiB3aXRob3V0IGFuIGVycm9yIAorCSAqIG1ldGhvZCBzZXRzIHRoZSBlcnJvciB0byBudWxsLiBUaGlzIHNob3VsZCBiZSB1c2VkIGluc3RlYWQgb2YgU3lzdGVtLm91dC5wcmludGxuCisJICogdGhyb3VnaG91dCB0aGUgY29kZS4KKwkgKiBAcGFyYW0gbWVzc2FnZQorCSAqICAgICAgICAgICAgdGhlIGxvY2FsaXplZCBpbmZvcm1hdGlvbiBtZXNzYWdlIHRleHQKKwkgKgorCSAqLworCXB1YmxpYyBzdGF0aWMgdm9pZCBsb2dJbmZvcm1hdGlvbihTdHJpbmcgbWVzc2FnZSkgeworCQkvLyBEbyB3ZSBoYXZlIGEgcGx1Z2luPworCQlpZiAocGx1Z2luICE9IG51bGwpIHsKKwkJCS8vIFllcworCQkJcGx1Z2luLmdldExvZygpLmxvZygKKwkJCQkJbmV3IFN0YXR1cyhJU3RhdHVzLklORk8sIHBsdWdpbi5nZXRCdW5kbGUoKS5nZXRTeW1ib2xpY05hbWUoKSwKKwkJCQkJCQkwLCBtZXNzYWdlLCBudWxsKSk7CisJCX0KKwkJZWxzZSB7CisJCQkvLyBObworCQkJU3lzdGVtLm91dC5wcmludGxuKG1lc3NhZ2UpOworCQl9CisJfSAvLyBsb2dJbmZvcm1hdGlvbgorCQorfSAvLyBBY3RpdmF0b3IKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaGdlbmVyYXRvcnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZ3JhcGhnZW5lcmF0b3JzL0NvbnN0YW50cy5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmdyYXBoZ2VuZXJhdG9ycy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9ncmFwaGdlbmVyYXRvcnMvQ29uc3RhbnRzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODQ1ODk5MAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaGdlbmVyYXRvcnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZ3JhcGhnZW5lcmF0b3JzL0NvbnN0YW50cy5qYXZhCkBAIC0wLDAgKzEsMjMgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDksMjAxMCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhnZW5lcmF0b3JzOworCisKK3B1YmxpYyBpbnRlcmZhY2UgQ29uc3RhbnRzIHsKKwkvKioKKwkgKiBUaGlzIGlzIHRoZSBleHRlbnNpb24gcG9pbnQgaWQgZm9yIHRoZSAiZ3JhcGggZ2VuZXJhdG9yIiBleHRlbnNpb24gcG9pbnQuIAorCSAqIHtAdmFsdWV9CisJICovCisJU3RyaW5nIElEX0dSQVBIX0dFTkVSQVRPUl9FWFRFTlNJT05fUE9JTlQgPSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuQ29uc3RhbnRzLklEX1JPT1QKKwkrICIuZ3JhcGhnZW5lcmF0b3JzLmdyYXBoZ2VuZXJhdG9yIjsKKworCVN0cmluZyBHUkFQSF9HRU5FUkFUT1JfRUxFTUVOVCA9ICJjbGFzc2RlZiI7Cit9CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhnZW5lcmF0b3JzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2dyYXBoZ2VuZXJhdG9ycy9HcmFwaEdlbmVyYXRvci5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmdyYXBoZ2VuZXJhdG9ycy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9ncmFwaGdlbmVyYXRvcnMvR3JhcGhHZW5lcmF0b3IuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MmVjY2FjCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmdyYXBoZ2VuZXJhdG9ycy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9ncmFwaGdlbmVyYXRvcnMvR3JhcGhHZW5lcmF0b3IuamF2YQpAQCAtMCwwICsxLDM1IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA5LDIwMTAgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmdyYXBoZ2VuZXJhdG9yczsKKworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uSWRlbnRpZmlhYmxlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5HcmFwaDsKKworLyoqCisKKyogVGhpcyBpbnRlcmZhY2UgaXMgYW4gRU1GIE1vZGVsLgorCisqCisKKyogQG1vZGVsCisKKyovCitwdWJsaWMgaW50ZXJmYWNlIEdyYXBoR2VuZXJhdG9yIGV4dGVuZHMgSWRlbnRpZmlhYmxlIHsKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQG1vZGVsIGtpbmQ9Im9wZXJhdGlvbiIKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJR3JhcGggZ2V0R3JhcGgoKTsKKworfQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmdyYXBoZ2VuZXJhdG9ycy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9ncmFwaGdlbmVyYXRvcnMvR3JhcGhnZW5lcmF0b3JzRmFjdG9yeS5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmdyYXBoZ2VuZXJhdG9ycy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9ncmFwaGdlbmVyYXRvcnMvR3JhcGhnZW5lcmF0b3JzRmFjdG9yeS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg5M2Q3YzQKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhnZW5lcmF0b3JzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2dyYXBoZ2VuZXJhdG9ycy9HcmFwaGdlbmVyYXRvcnNGYWN0b3J5LmphdmEKQEAgLTAsMCArMSw3NyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOSwyMDEwIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaGdlbmVyYXRvcnM7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUZhY3Rvcnk7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIFRoZSA8Yj5GYWN0b3J5PC9iPiBmb3IgdGhlIG1vZGVsLgorICogSXQgcHJvdmlkZXMgYSBjcmVhdGUgbWV0aG9kIGZvciBlYWNoIG5vbi1hYnN0cmFjdCBjbGFzcyBvZiB0aGUgbW9kZWwuCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaGdlbmVyYXRvcnMuR3JhcGhnZW5lcmF0b3JzUGFja2FnZQorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgaW50ZXJmYWNlIEdyYXBoZ2VuZXJhdG9yc0ZhY3RvcnkgZXh0ZW5kcyBFRmFjdG9yeSB7CisJLyoqCisJICogVGhlIHNpbmdsZXRvbiBpbnN0YW5jZSBvZiB0aGUgZmFjdG9yeS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlHcmFwaGdlbmVyYXRvcnNGYWN0b3J5IGVJTlNUQU5DRSA9IG9yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhnZW5lcmF0b3JzLmltcGwuR3JhcGhnZW5lcmF0b3JzRmFjdG9yeUltcGwuaW5pdCgpOworCisJLyoqCisJICogUmV0dXJucyBhIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5TcXVhcmUgTGF0dGljZSBHcmFwaCBHZW5lcmF0b3I8L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPlNxdWFyZSBMYXR0aWNlIEdyYXBoIEdlbmVyYXRvcjwvZW0+Jy4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJU3F1YXJlTGF0dGljZUdyYXBoR2VuZXJhdG9yIGNyZWF0ZVNxdWFyZUxhdHRpY2VHcmFwaEdlbmVyYXRvcigpOworCisJLyoqCisJICogUmV0dXJucyBhIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5NaWdyYXRpb24gRWRnZSBHcmFwaCBHZW5lcmF0b3I8L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPk1pZ3JhdGlvbiBFZGdlIEdyYXBoIEdlbmVyYXRvcjwvZW0+Jy4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJTWlncmF0aW9uRWRnZUdyYXBoR2VuZXJhdG9yIGNyZWF0ZU1pZ3JhdGlvbkVkZ2VHcmFwaEdlbmVyYXRvcigpOworCisJLyoqCisJICogUmV0dXJucyBhIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5QbGF0ZSBDYXJyZWUgR2xvYmUgR3JhcGggR2VuZXJhdG9yPC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiBhIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5QbGF0ZSBDYXJyZWUgR2xvYmUgR3JhcGggR2VuZXJhdG9yPC9lbT4nLgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlQbGF0ZUNhcnJlZUdsb2JlR3JhcGhHZW5lcmF0b3IgY3JlYXRlUGxhdGVDYXJyZWVHbG9iZUdyYXBoR2VuZXJhdG9yKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPlBhamVrIE5ldCBHcmFwaCBHZW5lcmF0b3I8L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPlBhamVrIE5ldCBHcmFwaCBHZW5lcmF0b3I8L2VtPicuCisJICogQGdlbmVyYXRlZAorCSAqLworCVBhamVrTmV0R3JhcGhHZW5lcmF0b3IgY3JlYXRlUGFqZWtOZXRHcmFwaEdlbmVyYXRvcigpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgcGFja2FnZSBzdXBwb3J0ZWQgYnkgdGhpcyBmYWN0b3J5LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgcGFja2FnZSBzdXBwb3J0ZWQgYnkgdGhpcyBmYWN0b3J5LgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlHcmFwaGdlbmVyYXRvcnNQYWNrYWdlIGdldEdyYXBoZ2VuZXJhdG9yc1BhY2thZ2UoKTsKKworfSAvL0dyYXBoZ2VuZXJhdG9yc0ZhY3RvcnkKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaGdlbmVyYXRvcnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZ3JhcGhnZW5lcmF0b3JzL0dyYXBoZ2VuZXJhdG9yc1BhY2thZ2UuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaGdlbmVyYXRvcnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZ3JhcGhnZW5lcmF0b3JzL0dyYXBoZ2VuZXJhdG9yc1BhY2thZ2UuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMzkzNGY2Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmdyYXBoZ2VuZXJhdG9ycy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9ncmFwaGdlbmVyYXRvcnMvR3JhcGhnZW5lcmF0b3JzUGFja2FnZS5qYXZhCkBAIC0wLDAgKzEsMTAyMCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOSwyMDEwIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaGdlbmVyYXRvcnM7CisKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQXR0cmlidXRlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uQ29tbW9uUGFja2FnZTsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogVGhlIDxiPlBhY2thZ2U8L2I+IGZvciB0aGUgbW9kZWwuCisgKiBJdCBjb250YWlucyBhY2Nlc3NvcnMgZm9yIHRoZSBtZXRhIG9iamVjdHMgdG8gcmVwcmVzZW50CisgKiA8dWw+CisgKiAgIDxsaT5lYWNoIGNsYXNzLDwvbGk+CisgKiAgIDxsaT5lYWNoIGZlYXR1cmUgb2YgZWFjaCBjbGFzcyw8L2xpPgorICogICA8bGk+ZWFjaCBlbnVtLDwvbGk+CisgKiAgIDxsaT5hbmQgZWFjaCBkYXRhIHR5cGU8L2xpPgorICogPC91bD4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmdyYXBoZ2VuZXJhdG9ycy5HcmFwaGdlbmVyYXRvcnNGYWN0b3J5CisgKiBAbW9kZWwga2luZD0icGFja2FnZSIKKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGludGVyZmFjZSBHcmFwaGdlbmVyYXRvcnNQYWNrYWdlIGV4dGVuZHMgRVBhY2thZ2UgeworCS8qKgorCSAqIFRoZSBwYWNrYWdlIG5hbWUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJU3RyaW5nIGVOQU1FID0gImdyYXBoZ2VuZXJhdG9ycyI7CisKKwkvKioKKwkgKiBUaGUgcGFja2FnZSBuYW1lc3BhY2UgVVJJLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCVN0cmluZyBlTlNfVVJJID0gImh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9ncmFwaGdlbmVyYXRvcnMvZ3JhcGhnZW5lcmF0b3JzLmVjb3JlIjsKKworCS8qKgorCSAqIFRoZSBwYWNrYWdlIG5hbWVzcGFjZSBuYW1lLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCVN0cmluZyBlTlNfUFJFRklYID0gIm9yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhnZW5lcmF0b3JzIjsKKworCS8qKgorCSAqIFRoZSBzaW5nbGV0b24gaW5zdGFuY2Ugb2YgdGhlIHBhY2thZ2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJR3JhcGhnZW5lcmF0b3JzUGFja2FnZSBlSU5TVEFOQ0UgPSBvcmcuZWNsaXBzZS5zdGVtLmdyYXBoZ2VuZXJhdG9ycy5pbXBsLkdyYXBoZ2VuZXJhdG9yc1BhY2thZ2VJbXBsLmluaXQoKTsKKworCS8qKgorCSAqIFRoZSBtZXRhIG9iamVjdCBpZCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaGdlbmVyYXRvcnMuaW1wbC5HcmFwaEdlbmVyYXRvckltcGwgPGVtPkdyYXBoIEdlbmVyYXRvcjwvZW0+fScgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhnZW5lcmF0b3JzLmltcGwuR3JhcGhHZW5lcmF0b3JJbXBsCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmdyYXBoZ2VuZXJhdG9ycy5pbXBsLkdyYXBoZ2VuZXJhdG9yc1BhY2thZ2VJbXBsI2dldEdyYXBoR2VuZXJhdG9yKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJaW50IEdSQVBIX0dFTkVSQVRPUiA9IDA7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VVJJPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgR1JBUEhfR0VORVJBVE9SX19VUkkgPSBDb21tb25QYWNrYWdlLklERU5USUZJQUJMRV9fVVJJOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlR5cGUgVVJJPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgR1JBUEhfR0VORVJBVE9SX19UWVBFX1VSSSA9IENvbW1vblBhY2thZ2UuSURFTlRJRklBQkxFX19UWVBFX1VSSTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5EdWJsaW4gQ29yZTwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IEdSQVBIX0dFTkVSQVRPUl9fRFVCTElOX0NPUkUgPSBDb21tb25QYWNrYWdlLklERU5USUZJQUJMRV9fRFVCTElOX0NPUkU7CisKKwkvKioKKwkgKiBUaGUgbnVtYmVyIG9mIHN0cnVjdHVyYWwgZmVhdHVyZXMgb2YgdGhlICc8ZW0+R3JhcGggR2VuZXJhdG9yPC9lbT4nIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IEdSQVBIX0dFTkVSQVRPUl9GRUFUVVJFX0NPVU5UID0gQ29tbW9uUGFja2FnZS5JREVOVElGSUFCTEVfRkVBVFVSRV9DT1VOVCArIDA7CisKKwkvKioKKwkgKiBUaGUgbWV0YSBvYmplY3QgaWQgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhnZW5lcmF0b3JzLmltcGwuTGF0dGljZUdyYXBoR2VuZXJhdG9ySW1wbCA8ZW0+TGF0dGljZSBHcmFwaCBHZW5lcmF0b3I8L2VtPn0nIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmdyYXBoZ2VuZXJhdG9ycy5pbXBsLkxhdHRpY2VHcmFwaEdlbmVyYXRvckltcGwKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhnZW5lcmF0b3JzLmltcGwuR3JhcGhnZW5lcmF0b3JzUGFja2FnZUltcGwjZ2V0TGF0dGljZUdyYXBoR2VuZXJhdG9yKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJaW50IExBVFRJQ0VfR1JBUEhfR0VORVJBVE9SID0gMTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5VUkk8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBMQVRUSUNFX0dSQVBIX0dFTkVSQVRPUl9fVVJJID0gR1JBUEhfR0VORVJBVE9SX19VUkk7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VHlwZSBVUkk8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBMQVRUSUNFX0dSQVBIX0dFTkVSQVRPUl9fVFlQRV9VUkkgPSBHUkFQSF9HRU5FUkFUT1JfX1RZUEVfVVJJOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkR1YmxpbiBDb3JlPC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgTEFUVElDRV9HUkFQSF9HRU5FUkFUT1JfX0RVQkxJTl9DT1JFID0gR1JBUEhfR0VORVJBVE9SX19EVUJMSU5fQ09SRTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5Vc2UgTmVhcmVzdCBOZWlnaGJvcnM8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBMQVRUSUNFX0dSQVBIX0dFTkVSQVRPUl9fVVNFX05FQVJFU1RfTkVJR0hCT1JTID0gR1JBUEhfR0VORVJBVE9SX0ZFQVRVUkVfQ09VTlQgKyAwOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlVzZSBOZXh0IE5lYXJlc3QgTmVpZ2hib3JzPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgTEFUVElDRV9HUkFQSF9HRU5FUkFUT1JfX1VTRV9ORVhUX05FQVJFU1RfTkVJR0hCT1JTID0gR1JBUEhfR0VORVJBVE9SX0ZFQVRVUkVfQ09VTlQgKyAxOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlBlcmlvZGljIEJvdW5kYXJpZXM8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBMQVRUSUNFX0dSQVBIX0dFTkVSQVRPUl9fUEVSSU9ESUNfQk9VTkRBUklFUyA9IEdSQVBIX0dFTkVSQVRPUl9GRUFUVVJFX0NPVU5UICsgMjsKKworCS8qKgorCSAqIFRoZSBudW1iZXIgb2Ygc3RydWN0dXJhbCBmZWF0dXJlcyBvZiB0aGUgJzxlbT5MYXR0aWNlIEdyYXBoIEdlbmVyYXRvcjwvZW0+JyBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBMQVRUSUNFX0dSQVBIX0dFTkVSQVRPUl9GRUFUVVJFX0NPVU5UID0gR1JBUEhfR0VORVJBVE9SX0ZFQVRVUkVfQ09VTlQgKyAzOworCisJLyoqCisJICogVGhlIG1ldGEgb2JqZWN0IGlkIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmdyYXBoZ2VuZXJhdG9ycy5pbXBsLlNxdWFyZUxhdHRpY2VHcmFwaEdlbmVyYXRvckltcGwgPGVtPlNxdWFyZSBMYXR0aWNlIEdyYXBoIEdlbmVyYXRvcjwvZW0+fScgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhnZW5lcmF0b3JzLmltcGwuU3F1YXJlTGF0dGljZUdyYXBoR2VuZXJhdG9ySW1wbAorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaGdlbmVyYXRvcnMuaW1wbC5HcmFwaGdlbmVyYXRvcnNQYWNrYWdlSW1wbCNnZXRTcXVhcmVMYXR0aWNlR3JhcGhHZW5lcmF0b3IoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlpbnQgU1FVQVJFX0xBVFRJQ0VfR1JBUEhfR0VORVJBVE9SID0gMjsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5VUkk8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTUVVBUkVfTEFUVElDRV9HUkFQSF9HRU5FUkFUT1JfX1VSSSA9IExBVFRJQ0VfR1JBUEhfR0VORVJBVE9SX19VUkk7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VHlwZSBVUkk8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTUVVBUkVfTEFUVElDRV9HUkFQSF9HRU5FUkFUT1JfX1RZUEVfVVJJID0gTEFUVElDRV9HUkFQSF9HRU5FUkFUT1JfX1RZUEVfVVJJOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkR1YmxpbiBDb3JlPC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU1FVQVJFX0xBVFRJQ0VfR1JBUEhfR0VORVJBVE9SX19EVUJMSU5fQ09SRSA9IExBVFRJQ0VfR1JBUEhfR0VORVJBVE9SX19EVUJMSU5fQ09SRTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5Vc2UgTmVhcmVzdCBOZWlnaGJvcnM8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTUVVBUkVfTEFUVElDRV9HUkFQSF9HRU5FUkFUT1JfX1VTRV9ORUFSRVNUX05FSUdIQk9SUyA9IExBVFRJQ0VfR1JBUEhfR0VORVJBVE9SX19VU0VfTkVBUkVTVF9ORUlHSEJPUlM7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VXNlIE5leHQgTmVhcmVzdCBOZWlnaGJvcnM8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTUVVBUkVfTEFUVElDRV9HUkFQSF9HRU5FUkFUT1JfX1VTRV9ORVhUX05FQVJFU1RfTkVJR0hCT1JTID0gTEFUVElDRV9HUkFQSF9HRU5FUkFUT1JfX1VTRV9ORVhUX05FQVJFU1RfTkVJR0hCT1JTOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlBlcmlvZGljIEJvdW5kYXJpZXM8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTUVVBUkVfTEFUVElDRV9HUkFQSF9HRU5FUkFUT1JfX1BFUklPRElDX0JPVU5EQVJJRVMgPSBMQVRUSUNFX0dSQVBIX0dFTkVSQVRPUl9fUEVSSU9ESUNfQk9VTkRBUklFUzsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5YU2l6ZTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNRVUFSRV9MQVRUSUNFX0dSQVBIX0dFTkVSQVRPUl9fWFNJWkUgPSBMQVRUSUNFX0dSQVBIX0dFTkVSQVRPUl9GRUFUVVJFX0NPVU5UICsgMDsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5ZU2l6ZTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNRVUFSRV9MQVRUSUNFX0dSQVBIX0dFTkVSQVRPUl9fWVNJWkUgPSBMQVRUSUNFX0dSQVBIX0dFTkVSQVRPUl9GRUFUVVJFX0NPVU5UICsgMTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5BcmVhPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU1FVQVJFX0xBVFRJQ0VfR1JBUEhfR0VORVJBVE9SX19BUkVBID0gTEFUVElDRV9HUkFQSF9HRU5FUkFUT1JfRkVBVFVSRV9DT1VOVCArIDI7CisKKwkvKioKKwkgKiBUaGUgbnVtYmVyIG9mIHN0cnVjdHVyYWwgZmVhdHVyZXMgb2YgdGhlICc8ZW0+U3F1YXJlIExhdHRpY2UgR3JhcGggR2VuZXJhdG9yPC9lbT4nIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNRVUFSRV9MQVRUSUNFX0dSQVBIX0dFTkVSQVRPUl9GRUFUVVJFX0NPVU5UID0gTEFUVElDRV9HUkFQSF9HRU5FUkFUT1JfRkVBVFVSRV9DT1VOVCArIDM7CisKKwkvKioKKwkgKiBUaGUgbWV0YSBvYmplY3QgaWQgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhnZW5lcmF0b3JzLmltcGwuTWlncmF0aW9uRWRnZUdyYXBoR2VuZXJhdG9ySW1wbCA8ZW0+TWlncmF0aW9uIEVkZ2UgR3JhcGggR2VuZXJhdG9yPC9lbT59JyBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaGdlbmVyYXRvcnMuaW1wbC5NaWdyYXRpb25FZGdlR3JhcGhHZW5lcmF0b3JJbXBsCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmdyYXBoZ2VuZXJhdG9ycy5pbXBsLkdyYXBoZ2VuZXJhdG9yc1BhY2thZ2VJbXBsI2dldE1pZ3JhdGlvbkVkZ2VHcmFwaEdlbmVyYXRvcigpCisJICogQGdlbmVyYXRlZAorCSAqLworCWludCBNSUdSQVRJT05fRURHRV9HUkFQSF9HRU5FUkFUT1IgPSAzOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlVSSTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IE1JR1JBVElPTl9FREdFX0dSQVBIX0dFTkVSQVRPUl9fVVJJID0gR1JBUEhfR0VORVJBVE9SX19VUkk7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VHlwZSBVUkk8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBNSUdSQVRJT05fRURHRV9HUkFQSF9HRU5FUkFUT1JfX1RZUEVfVVJJID0gR1JBUEhfR0VORVJBVE9SX19UWVBFX1VSSTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5EdWJsaW4gQ29yZTwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IE1JR1JBVElPTl9FREdFX0dSQVBIX0dFTkVSQVRPUl9fRFVCTElOX0NPUkUgPSBHUkFQSF9HRU5FUkFUT1JfX0RVQkxJTl9DT1JFOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkxvY2F0aW9uPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgTUlHUkFUSU9OX0VER0VfR1JBUEhfR0VORVJBVE9SX19MT0NBVElPTiA9IEdSQVBIX0dFTkVSQVRPUl9GRUFUVVJFX0NPVU5UICsgMDsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5NaWdyYXRpb24gUmF0ZTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IE1JR1JBVElPTl9FREdFX0dSQVBIX0dFTkVSQVRPUl9fTUlHUkFUSU9OX1JBVEUgPSBHUkFQSF9HRU5FUkFUT1JfRkVBVFVSRV9DT1VOVCArIDE7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+UG9wdWxhdGlvbjwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IE1JR1JBVElPTl9FREdFX0dSQVBIX0dFTkVSQVRPUl9fUE9QVUxBVElPTiA9IEdSQVBIX0dFTkVSQVRPUl9GRUFUVVJFX0NPVU5UICsgMjsKKworCS8qKgorCSAqIFRoZSBudW1iZXIgb2Ygc3RydWN0dXJhbCBmZWF0dXJlcyBvZiB0aGUgJzxlbT5NaWdyYXRpb24gRWRnZSBHcmFwaCBHZW5lcmF0b3I8L2VtPicgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgTUlHUkFUSU9OX0VER0VfR1JBUEhfR0VORVJBVE9SX0ZFQVRVUkVfQ09VTlQgPSBHUkFQSF9HRU5FUkFUT1JfRkVBVFVSRV9DT1VOVCArIDM7CisKKworCS8qKgorCSAqIFRoZSBtZXRhIG9iamVjdCBpZCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaGdlbmVyYXRvcnMuaW1wbC5QbGF0ZUNhcnJlZUdsb2JlR3JhcGhHZW5lcmF0b3JJbXBsIDxlbT5QbGF0ZSBDYXJyZWUgR2xvYmUgR3JhcGggR2VuZXJhdG9yPC9lbT59JyBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaGdlbmVyYXRvcnMuaW1wbC5QbGF0ZUNhcnJlZUdsb2JlR3JhcGhHZW5lcmF0b3JJbXBsCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmdyYXBoZ2VuZXJhdG9ycy5pbXBsLkdyYXBoZ2VuZXJhdG9yc1BhY2thZ2VJbXBsI2dldFBsYXRlQ2FycmVlR2xvYmVHcmFwaEdlbmVyYXRvcigpCisJICogQGdlbmVyYXRlZAorCSAqLworCWludCBQTEFURV9DQVJSRUVfR0xPQkVfR1JBUEhfR0VORVJBVE9SID0gNDsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5VUkk8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBQTEFURV9DQVJSRUVfR0xPQkVfR1JBUEhfR0VORVJBVE9SX19VUkkgPSBMQVRUSUNFX0dSQVBIX0dFTkVSQVRPUl9fVVJJOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlR5cGUgVVJJPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgUExBVEVfQ0FSUkVFX0dMT0JFX0dSQVBIX0dFTkVSQVRPUl9fVFlQRV9VUkkgPSBMQVRUSUNFX0dSQVBIX0dFTkVSQVRPUl9fVFlQRV9VUkk7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RHVibGluIENvcmU8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBQTEFURV9DQVJSRUVfR0xPQkVfR1JBUEhfR0VORVJBVE9SX19EVUJMSU5fQ09SRSA9IExBVFRJQ0VfR1JBUEhfR0VORVJBVE9SX19EVUJMSU5fQ09SRTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5Vc2UgTmVhcmVzdCBOZWlnaGJvcnM8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBQTEFURV9DQVJSRUVfR0xPQkVfR1JBUEhfR0VORVJBVE9SX19VU0VfTkVBUkVTVF9ORUlHSEJPUlMgPSBMQVRUSUNFX0dSQVBIX0dFTkVSQVRPUl9fVVNFX05FQVJFU1RfTkVJR0hCT1JTOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlVzZSBOZXh0IE5lYXJlc3QgTmVpZ2hib3JzPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgUExBVEVfQ0FSUkVFX0dMT0JFX0dSQVBIX0dFTkVSQVRPUl9fVVNFX05FWFRfTkVBUkVTVF9ORUlHSEJPUlMgPSBMQVRUSUNFX0dSQVBIX0dFTkVSQVRPUl9fVVNFX05FWFRfTkVBUkVTVF9ORUlHSEJPUlM7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+UGVyaW9kaWMgQm91bmRhcmllczwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFBMQVRFX0NBUlJFRV9HTE9CRV9HUkFQSF9HRU5FUkFUT1JfX1BFUklPRElDX0JPVU5EQVJJRVMgPSBMQVRUSUNFX0dSQVBIX0dFTkVSQVRPUl9fUEVSSU9ESUNfQk9VTkRBUklFUzsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5Bbmd1bGFyIFN0ZXA8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBQTEFURV9DQVJSRUVfR0xPQkVfR1JBUEhfR0VORVJBVE9SX19BTkdVTEFSX1NURVAgPSBMQVRUSUNFX0dSQVBIX0dFTkVSQVRPUl9GRUFUVVJFX0NPVU5UICsgMDsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5SYWRpdXM8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBQTEFURV9DQVJSRUVfR0xPQkVfR1JBUEhfR0VORVJBVE9SX19SQURJVVMgPSBMQVRUSUNFX0dSQVBIX0dFTkVSQVRPUl9GRUFUVVJFX0NPVU5UICsgMTsKKworCS8qKgorCSAqIFRoZSBudW1iZXIgb2Ygc3RydWN0dXJhbCBmZWF0dXJlcyBvZiB0aGUgJzxlbT5QbGF0ZSBDYXJyZWUgR2xvYmUgR3JhcGggR2VuZXJhdG9yPC9lbT4nIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFBMQVRFX0NBUlJFRV9HTE9CRV9HUkFQSF9HRU5FUkFUT1JfRkVBVFVSRV9DT1VOVCA9IExBVFRJQ0VfR1JBUEhfR0VORVJBVE9SX0ZFQVRVUkVfQ09VTlQgKyAyOworCisKKwkvKioKKwkgKiBUaGUgbWV0YSBvYmplY3QgaWQgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhnZW5lcmF0b3JzLmltcGwuUGFqZWtOZXRHcmFwaEdlbmVyYXRvckltcGwgPGVtPlBhamVrIE5ldCBHcmFwaCBHZW5lcmF0b3I8L2VtPn0nIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmdyYXBoZ2VuZXJhdG9ycy5pbXBsLlBhamVrTmV0R3JhcGhHZW5lcmF0b3JJbXBsCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmdyYXBoZ2VuZXJhdG9ycy5pbXBsLkdyYXBoZ2VuZXJhdG9yc1BhY2thZ2VJbXBsI2dldFBhamVrTmV0R3JhcGhHZW5lcmF0b3IoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlpbnQgUEFKRUtfTkVUX0dSQVBIX0dFTkVSQVRPUiA9IDU7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VVJJPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgUEFKRUtfTkVUX0dSQVBIX0dFTkVSQVRPUl9fVVJJID0gR1JBUEhfR0VORVJBVE9SX19VUkk7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VHlwZSBVUkk8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBQQUpFS19ORVRfR1JBUEhfR0VORVJBVE9SX19UWVBFX1VSSSA9IEdSQVBIX0dFTkVSQVRPUl9fVFlQRV9VUkk7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RHVibGluIENvcmU8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBQQUpFS19ORVRfR1JBUEhfR0VORVJBVE9SX19EVUJMSU5fQ09SRSA9IEdSQVBIX0dFTkVSQVRPUl9fRFVCTElOX0NPUkU7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RGF0YSBGaWxlIG5ldDwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFBBSkVLX05FVF9HUkFQSF9HRU5FUkFUT1JfX0RBVEFfRklMRV9ORVQgPSBHUkFQSF9HRU5FUkFUT1JfRkVBVFVSRV9DT1VOVCArIDA7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+QXJlYTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFBBSkVLX05FVF9HUkFQSF9HRU5FUkFUT1JfX0FSRUEgPSBHUkFQSF9HRU5FUkFUT1JfRkVBVFVSRV9DT1VOVCArIDE7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+Q29udGFpbmVyPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgUEFKRUtfTkVUX0dSQVBIX0dFTkVSQVRPUl9fQ09OVEFJTkVSID0gR1JBUEhfR0VORVJBVE9SX0ZFQVRVUkVfQ09VTlQgKyAyOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlNjYWxpbmcgRmFjdG9yPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgUEFKRUtfTkVUX0dSQVBIX0dFTkVSQVRPUl9fU0NBTElOR19GQUNUT1IgPSBHUkFQSF9HRU5FUkFUT1JfRkVBVFVSRV9DT1VOVCArIDM7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+Rml0PC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgUEFKRUtfTkVUX0dSQVBIX0dFTkVSQVRPUl9fRklUID0gR1JBUEhfR0VORVJBVE9SX0ZFQVRVUkVfQ09VTlQgKyA0OworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkVuZm9yY2UgQ29udGFpbm1lbnQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBQQUpFS19ORVRfR1JBUEhfR0VORVJBVE9SX19FTkZPUkNFX0NPTlRBSU5NRU5UID0gR1JBUEhfR0VORVJBVE9SX0ZFQVRVUkVfQ09VTlQgKyA1OworCisJLyoqCisJICogVGhlIG51bWJlciBvZiBzdHJ1Y3R1cmFsIGZlYXR1cmVzIG9mIHRoZSAnPGVtPlBhamVrIE5ldCBHcmFwaCBHZW5lcmF0b3I8L2VtPicgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgUEFKRUtfTkVUX0dSQVBIX0dFTkVSQVRPUl9GRUFUVVJFX0NPVU5UID0gR1JBUEhfR0VORVJBVE9SX0ZFQVRVUkVfQ09VTlQgKyA2OworCisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmdyYXBoZ2VuZXJhdG9ycy5HcmFwaEdlbmVyYXRvciA8ZW0+R3JhcGggR2VuZXJhdG9yPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAnPGVtPkdyYXBoIEdlbmVyYXRvcjwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhnZW5lcmF0b3JzLkdyYXBoR2VuZXJhdG9yCisJICogQGdlbmVyYXRlZAorCSAqLworCUVDbGFzcyBnZXRHcmFwaEdlbmVyYXRvcigpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaGdlbmVyYXRvcnMuTGF0dGljZUdyYXBoR2VuZXJhdG9yIDxlbT5MYXR0aWNlIEdyYXBoIEdlbmVyYXRvcjwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJzxlbT5MYXR0aWNlIEdyYXBoIEdlbmVyYXRvcjwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhnZW5lcmF0b3JzLkxhdHRpY2VHcmFwaEdlbmVyYXRvcgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQ2xhc3MgZ2V0TGF0dGljZUdyYXBoR2VuZXJhdG9yKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhnZW5lcmF0b3JzLkxhdHRpY2VHcmFwaEdlbmVyYXRvciNpc1VzZU5lYXJlc3ROZWlnaGJvcnMgPGVtPlVzZSBOZWFyZXN0IE5laWdoYm9yczwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPGVtPlVzZSBOZWFyZXN0IE5laWdoYm9yczwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhnZW5lcmF0b3JzLkxhdHRpY2VHcmFwaEdlbmVyYXRvciNpc1VzZU5lYXJlc3ROZWlnaGJvcnMoKQorCSAqIEBzZWUgI2dldExhdHRpY2VHcmFwaEdlbmVyYXRvcigpCisJICogQGdlbmVyYXRlZAorCSAqLworCUVBdHRyaWJ1dGUgZ2V0TGF0dGljZUdyYXBoR2VuZXJhdG9yX1VzZU5lYXJlc3ROZWlnaGJvcnMoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaGdlbmVyYXRvcnMuTGF0dGljZUdyYXBoR2VuZXJhdG9yI2lzVXNlTmV4dE5lYXJlc3ROZWlnaGJvcnMgPGVtPlVzZSBOZXh0IE5lYXJlc3QgTmVpZ2hib3JzPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+VXNlIE5leHQgTmVhcmVzdCBOZWlnaGJvcnM8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmdyYXBoZ2VuZXJhdG9ycy5MYXR0aWNlR3JhcGhHZW5lcmF0b3IjaXNVc2VOZXh0TmVhcmVzdE5laWdoYm9ycygpCisJICogQHNlZSAjZ2V0TGF0dGljZUdyYXBoR2VuZXJhdG9yKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUF0dHJpYnV0ZSBnZXRMYXR0aWNlR3JhcGhHZW5lcmF0b3JfVXNlTmV4dE5lYXJlc3ROZWlnaGJvcnMoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaGdlbmVyYXRvcnMuTGF0dGljZUdyYXBoR2VuZXJhdG9yI2lzUGVyaW9kaWNCb3VuZGFyaWVzIDxlbT5QZXJpb2RpYyBCb3VuZGFyaWVzPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+UGVyaW9kaWMgQm91bmRhcmllczwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhnZW5lcmF0b3JzLkxhdHRpY2VHcmFwaEdlbmVyYXRvciNpc1BlcmlvZGljQm91bmRhcmllcygpCisJICogQHNlZSAjZ2V0TGF0dGljZUdyYXBoR2VuZXJhdG9yKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUF0dHJpYnV0ZSBnZXRMYXR0aWNlR3JhcGhHZW5lcmF0b3JfUGVyaW9kaWNCb3VuZGFyaWVzKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmdyYXBoZ2VuZXJhdG9ycy5TcXVhcmVMYXR0aWNlR3JhcGhHZW5lcmF0b3IgPGVtPlNxdWFyZSBMYXR0aWNlIEdyYXBoIEdlbmVyYXRvcjwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJzxlbT5TcXVhcmUgTGF0dGljZSBHcmFwaCBHZW5lcmF0b3I8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmdyYXBoZ2VuZXJhdG9ycy5TcXVhcmVMYXR0aWNlR3JhcGhHZW5lcmF0b3IKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUNsYXNzIGdldFNxdWFyZUxhdHRpY2VHcmFwaEdlbmVyYXRvcigpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmdyYXBoZ2VuZXJhdG9ycy5TcXVhcmVMYXR0aWNlR3JhcGhHZW5lcmF0b3IjZ2V0WFNpemUgPGVtPlhTaXplPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+WFNpemU8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmdyYXBoZ2VuZXJhdG9ycy5TcXVhcmVMYXR0aWNlR3JhcGhHZW5lcmF0b3IjZ2V0WFNpemUoKQorCSAqIEBzZWUgI2dldFNxdWFyZUxhdHRpY2VHcmFwaEdlbmVyYXRvcigpCisJICogQGdlbmVyYXRlZAorCSAqLworCUVBdHRyaWJ1dGUgZ2V0U3F1YXJlTGF0dGljZUdyYXBoR2VuZXJhdG9yX1hTaXplKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhnZW5lcmF0b3JzLlNxdWFyZUxhdHRpY2VHcmFwaEdlbmVyYXRvciNnZXRZU2l6ZSA8ZW0+WVNpemU8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxlbT5ZU2l6ZTwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhnZW5lcmF0b3JzLlNxdWFyZUxhdHRpY2VHcmFwaEdlbmVyYXRvciNnZXRZU2l6ZSgpCisJICogQHNlZSAjZ2V0U3F1YXJlTGF0dGljZUdyYXBoR2VuZXJhdG9yKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUF0dHJpYnV0ZSBnZXRTcXVhcmVMYXR0aWNlR3JhcGhHZW5lcmF0b3JfWVNpemUoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaGdlbmVyYXRvcnMuU3F1YXJlTGF0dGljZUdyYXBoR2VuZXJhdG9yI2dldEFyZWEgPGVtPkFyZWE8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxlbT5BcmVhPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaGdlbmVyYXRvcnMuU3F1YXJlTGF0dGljZUdyYXBoR2VuZXJhdG9yI2dldEFyZWEoKQorCSAqIEBzZWUgI2dldFNxdWFyZUxhdHRpY2VHcmFwaEdlbmVyYXRvcigpCisJICogQGdlbmVyYXRlZAorCSAqLworCUVBdHRyaWJ1dGUgZ2V0U3F1YXJlTGF0dGljZUdyYXBoR2VuZXJhdG9yX0FyZWEoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhnZW5lcmF0b3JzLk1pZ3JhdGlvbkVkZ2VHcmFwaEdlbmVyYXRvciA8ZW0+TWlncmF0aW9uIEVkZ2UgR3JhcGggR2VuZXJhdG9yPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAnPGVtPk1pZ3JhdGlvbiBFZGdlIEdyYXBoIEdlbmVyYXRvcjwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhnZW5lcmF0b3JzLk1pZ3JhdGlvbkVkZ2VHcmFwaEdlbmVyYXRvcgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQ2xhc3MgZ2V0TWlncmF0aW9uRWRnZUdyYXBoR2VuZXJhdG9yKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhnZW5lcmF0b3JzLk1pZ3JhdGlvbkVkZ2VHcmFwaEdlbmVyYXRvciNnZXRMb2NhdGlvbiA8ZW0+TG9jYXRpb248L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxlbT5Mb2NhdGlvbjwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhnZW5lcmF0b3JzLk1pZ3JhdGlvbkVkZ2VHcmFwaEdlbmVyYXRvciNnZXRMb2NhdGlvbigpCisJICogQHNlZSAjZ2V0TWlncmF0aW9uRWRnZUdyYXBoR2VuZXJhdG9yKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUF0dHJpYnV0ZSBnZXRNaWdyYXRpb25FZGdlR3JhcGhHZW5lcmF0b3JfTG9jYXRpb24oKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaGdlbmVyYXRvcnMuTWlncmF0aW9uRWRnZUdyYXBoR2VuZXJhdG9yI2dldE1pZ3JhdGlvblJhdGUgPGVtPk1pZ3JhdGlvbiBSYXRlPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+TWlncmF0aW9uIFJhdGU8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmdyYXBoZ2VuZXJhdG9ycy5NaWdyYXRpb25FZGdlR3JhcGhHZW5lcmF0b3IjZ2V0TWlncmF0aW9uUmF0ZSgpCisJICogQHNlZSAjZ2V0TWlncmF0aW9uRWRnZUdyYXBoR2VuZXJhdG9yKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUF0dHJpYnV0ZSBnZXRNaWdyYXRpb25FZGdlR3JhcGhHZW5lcmF0b3JfTWlncmF0aW9uUmF0ZSgpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmdyYXBoZ2VuZXJhdG9ycy5NaWdyYXRpb25FZGdlR3JhcGhHZW5lcmF0b3IjZ2V0UG9wdWxhdGlvbiA8ZW0+UG9wdWxhdGlvbjwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPGVtPlBvcHVsYXRpb248L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmdyYXBoZ2VuZXJhdG9ycy5NaWdyYXRpb25FZGdlR3JhcGhHZW5lcmF0b3IjZ2V0UG9wdWxhdGlvbigpCisJICogQHNlZSAjZ2V0TWlncmF0aW9uRWRnZUdyYXBoR2VuZXJhdG9yKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUF0dHJpYnV0ZSBnZXRNaWdyYXRpb25FZGdlR3JhcGhHZW5lcmF0b3JfUG9wdWxhdGlvbigpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaGdlbmVyYXRvcnMuUGxhdGVDYXJyZWVHbG9iZUdyYXBoR2VuZXJhdG9yIDxlbT5QbGF0ZSBDYXJyZWUgR2xvYmUgR3JhcGggR2VuZXJhdG9yPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAnPGVtPlBsYXRlIENhcnJlZSBHbG9iZSBHcmFwaCBHZW5lcmF0b3I8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmdyYXBoZ2VuZXJhdG9ycy5QbGF0ZUNhcnJlZUdsb2JlR3JhcGhHZW5lcmF0b3IKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUNsYXNzIGdldFBsYXRlQ2FycmVlR2xvYmVHcmFwaEdlbmVyYXRvcigpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmdyYXBoZ2VuZXJhdG9ycy5QbGF0ZUNhcnJlZUdsb2JlR3JhcGhHZW5lcmF0b3IjZ2V0QW5ndWxhclN0ZXAgPGVtPkFuZ3VsYXIgU3RlcDwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPGVtPkFuZ3VsYXIgU3RlcDwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhnZW5lcmF0b3JzLlBsYXRlQ2FycmVlR2xvYmVHcmFwaEdlbmVyYXRvciNnZXRBbmd1bGFyU3RlcCgpCisJICogQHNlZSAjZ2V0UGxhdGVDYXJyZWVHbG9iZUdyYXBoR2VuZXJhdG9yKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUF0dHJpYnV0ZSBnZXRQbGF0ZUNhcnJlZUdsb2JlR3JhcGhHZW5lcmF0b3JfQW5ndWxhclN0ZXAoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaGdlbmVyYXRvcnMuUGxhdGVDYXJyZWVHbG9iZUdyYXBoR2VuZXJhdG9yI2dldFJhZGl1cyA8ZW0+UmFkaXVzPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+UmFkaXVzPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaGdlbmVyYXRvcnMuUGxhdGVDYXJyZWVHbG9iZUdyYXBoR2VuZXJhdG9yI2dldFJhZGl1cygpCisJICogQHNlZSAjZ2V0UGxhdGVDYXJyZWVHbG9iZUdyYXBoR2VuZXJhdG9yKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUF0dHJpYnV0ZSBnZXRQbGF0ZUNhcnJlZUdsb2JlR3JhcGhHZW5lcmF0b3JfUmFkaXVzKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmdyYXBoZ2VuZXJhdG9ycy5QYWpla05ldEdyYXBoR2VuZXJhdG9yIDxlbT5QYWplayBOZXQgR3JhcGggR2VuZXJhdG9yPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAnPGVtPlBhamVrIE5ldCBHcmFwaCBHZW5lcmF0b3I8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmdyYXBoZ2VuZXJhdG9ycy5QYWpla05ldEdyYXBoR2VuZXJhdG9yCisJICogQGdlbmVyYXRlZAorCSAqLworCUVDbGFzcyBnZXRQYWpla05ldEdyYXBoR2VuZXJhdG9yKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhnZW5lcmF0b3JzLlBhamVrTmV0R3JhcGhHZW5lcmF0b3IjZ2V0RGF0YUZpbGVfbmV0IDxlbT5EYXRhIEZpbGUgbmV0PC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+RGF0YSBGaWxlIG5ldDwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhnZW5lcmF0b3JzLlBhamVrTmV0R3JhcGhHZW5lcmF0b3IjZ2V0RGF0YUZpbGVfbmV0KCkKKwkgKiBAc2VlICNnZXRQYWpla05ldEdyYXBoR2VuZXJhdG9yKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUF0dHJpYnV0ZSBnZXRQYWpla05ldEdyYXBoR2VuZXJhdG9yX0RhdGFGaWxlX25ldCgpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmdyYXBoZ2VuZXJhdG9ycy5QYWpla05ldEdyYXBoR2VuZXJhdG9yI2dldEFyZWEgPGVtPkFyZWE8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxlbT5BcmVhPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaGdlbmVyYXRvcnMuUGFqZWtOZXRHcmFwaEdlbmVyYXRvciNnZXRBcmVhKCkKKwkgKiBAc2VlICNnZXRQYWpla05ldEdyYXBoR2VuZXJhdG9yKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUF0dHJpYnV0ZSBnZXRQYWpla05ldEdyYXBoR2VuZXJhdG9yX0FyZWEoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaGdlbmVyYXRvcnMuUGFqZWtOZXRHcmFwaEdlbmVyYXRvciNnZXRDb250YWluZXIgPGVtPkNvbnRhaW5lcjwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPGVtPkNvbnRhaW5lcjwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhnZW5lcmF0b3JzLlBhamVrTmV0R3JhcGhHZW5lcmF0b3IjZ2V0Q29udGFpbmVyKCkKKwkgKiBAc2VlICNnZXRQYWpla05ldEdyYXBoR2VuZXJhdG9yKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUF0dHJpYnV0ZSBnZXRQYWpla05ldEdyYXBoR2VuZXJhdG9yX0NvbnRhaW5lcigpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmdyYXBoZ2VuZXJhdG9ycy5QYWpla05ldEdyYXBoR2VuZXJhdG9yI2dldFNjYWxpbmdGYWN0b3IgPGVtPlNjYWxpbmcgRmFjdG9yPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+U2NhbGluZyBGYWN0b3I8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmdyYXBoZ2VuZXJhdG9ycy5QYWpla05ldEdyYXBoR2VuZXJhdG9yI2dldFNjYWxpbmdGYWN0b3IoKQorCSAqIEBzZWUgI2dldFBhamVrTmV0R3JhcGhHZW5lcmF0b3IoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQXR0cmlidXRlIGdldFBhamVrTmV0R3JhcGhHZW5lcmF0b3JfU2NhbGluZ0ZhY3RvcigpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmdyYXBoZ2VuZXJhdG9ycy5QYWpla05ldEdyYXBoR2VuZXJhdG9yI2lzRml0IDxlbT5GaXQ8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxlbT5GaXQ8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmdyYXBoZ2VuZXJhdG9ycy5QYWpla05ldEdyYXBoR2VuZXJhdG9yI2lzRml0KCkKKwkgKiBAc2VlICNnZXRQYWpla05ldEdyYXBoR2VuZXJhdG9yKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUF0dHJpYnV0ZSBnZXRQYWpla05ldEdyYXBoR2VuZXJhdG9yX0ZpdCgpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmdyYXBoZ2VuZXJhdG9ycy5QYWpla05ldEdyYXBoR2VuZXJhdG9yI2lzRW5mb3JjZUNvbnRhaW5tZW50IDxlbT5FbmZvcmNlIENvbnRhaW5tZW50PC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+RW5mb3JjZSBDb250YWlubWVudDwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhnZW5lcmF0b3JzLlBhamVrTmV0R3JhcGhHZW5lcmF0b3IjaXNFbmZvcmNlQ29udGFpbm1lbnQoKQorCSAqIEBzZWUgI2dldFBhamVrTmV0R3JhcGhHZW5lcmF0b3IoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQXR0cmlidXRlIGdldFBhamVrTmV0R3JhcGhHZW5lcmF0b3JfRW5mb3JjZUNvbnRhaW5tZW50KCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBmYWN0b3J5IHRoYXQgY3JlYXRlcyB0aGUgaW5zdGFuY2VzIG9mIHRoZSBtb2RlbC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIGZhY3RvcnkgdGhhdCBjcmVhdGVzIHRoZSBpbnN0YW5jZXMgb2YgdGhlIG1vZGVsLgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlHcmFwaGdlbmVyYXRvcnNGYWN0b3J5IGdldEdyYXBoZ2VuZXJhdG9yc0ZhY3RvcnkoKTsKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogRGVmaW5lcyBsaXRlcmFscyBmb3IgdGhlIG1ldGEgb2JqZWN0cyB0aGF0IHJlcHJlc2VudAorCSAqIDx1bD4KKwkgKiAgIDxsaT5lYWNoIGNsYXNzLDwvbGk+CisJICogICA8bGk+ZWFjaCBmZWF0dXJlIG9mIGVhY2ggY2xhc3MsPC9saT4KKwkgKiAgIDxsaT5lYWNoIGVudW0sPC9saT4KKwkgKiAgIDxsaT5hbmQgZWFjaCBkYXRhIHR5cGU8L2xpPgorCSAqIDwvdWw+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCWludGVyZmFjZSBMaXRlcmFscyB7CisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaGdlbmVyYXRvcnMuaW1wbC5HcmFwaEdlbmVyYXRvckltcGwgPGVtPkdyYXBoIEdlbmVyYXRvcjwvZW0+fScgY2xhc3MuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhnZW5lcmF0b3JzLmltcGwuR3JhcGhHZW5lcmF0b3JJbXBsCisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaGdlbmVyYXRvcnMuaW1wbC5HcmFwaGdlbmVyYXRvcnNQYWNrYWdlSW1wbCNnZXRHcmFwaEdlbmVyYXRvcigpCisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVDbGFzcyBHUkFQSF9HRU5FUkFUT1IgPSBlSU5TVEFOQ0UuZ2V0R3JhcGhHZW5lcmF0b3IoKTsKKworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhnZW5lcmF0b3JzLmltcGwuTGF0dGljZUdyYXBoR2VuZXJhdG9ySW1wbCA8ZW0+TGF0dGljZSBHcmFwaCBHZW5lcmF0b3I8L2VtPn0nIGNsYXNzLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmdyYXBoZ2VuZXJhdG9ycy5pbXBsLkxhdHRpY2VHcmFwaEdlbmVyYXRvckltcGwKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmdyYXBoZ2VuZXJhdG9ycy5pbXBsLkdyYXBoZ2VuZXJhdG9yc1BhY2thZ2VJbXBsI2dldExhdHRpY2VHcmFwaEdlbmVyYXRvcigpCisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVDbGFzcyBMQVRUSUNFX0dSQVBIX0dFTkVSQVRPUiA9IGVJTlNUQU5DRS5nZXRMYXR0aWNlR3JhcGhHZW5lcmF0b3IoKTsKKworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPlVzZSBOZWFyZXN0IE5laWdoYm9yczwvYj48L2VtPicgYXR0cmlidXRlIGZlYXR1cmUuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQXR0cmlidXRlIExBVFRJQ0VfR1JBUEhfR0VORVJBVE9SX19VU0VfTkVBUkVTVF9ORUlHSEJPUlMgPSBlSU5TVEFOQ0UuZ2V0TGF0dGljZUdyYXBoR2VuZXJhdG9yX1VzZU5lYXJlc3ROZWlnaGJvcnMoKTsKKworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPlVzZSBOZXh0IE5lYXJlc3QgTmVpZ2hib3JzPC9iPjwvZW0+JyBhdHRyaWJ1dGUgZmVhdHVyZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVBdHRyaWJ1dGUgTEFUVElDRV9HUkFQSF9HRU5FUkFUT1JfX1VTRV9ORVhUX05FQVJFU1RfTkVJR0hCT1JTID0gZUlOU1RBTkNFLmdldExhdHRpY2VHcmFwaEdlbmVyYXRvcl9Vc2VOZXh0TmVhcmVzdE5laWdoYm9ycygpOworCisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+UGVyaW9kaWMgQm91bmRhcmllczwvYj48L2VtPicgYXR0cmlidXRlIGZlYXR1cmUuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQXR0cmlidXRlIExBVFRJQ0VfR1JBUEhfR0VORVJBVE9SX19QRVJJT0RJQ19CT1VOREFSSUVTID0gZUlOU1RBTkNFLmdldExhdHRpY2VHcmFwaEdlbmVyYXRvcl9QZXJpb2RpY0JvdW5kYXJpZXMoKTsKKworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhnZW5lcmF0b3JzLmltcGwuU3F1YXJlTGF0dGljZUdyYXBoR2VuZXJhdG9ySW1wbCA8ZW0+U3F1YXJlIExhdHRpY2UgR3JhcGggR2VuZXJhdG9yPC9lbT59JyBjbGFzcy4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaGdlbmVyYXRvcnMuaW1wbC5TcXVhcmVMYXR0aWNlR3JhcGhHZW5lcmF0b3JJbXBsCisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaGdlbmVyYXRvcnMuaW1wbC5HcmFwaGdlbmVyYXRvcnNQYWNrYWdlSW1wbCNnZXRTcXVhcmVMYXR0aWNlR3JhcGhHZW5lcmF0b3IoKQorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQ2xhc3MgU1FVQVJFX0xBVFRJQ0VfR1JBUEhfR0VORVJBVE9SID0gZUlOU1RBTkNFLmdldFNxdWFyZUxhdHRpY2VHcmFwaEdlbmVyYXRvcigpOworCisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+WFNpemU8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUF0dHJpYnV0ZSBTUVVBUkVfTEFUVElDRV9HUkFQSF9HRU5FUkFUT1JfX1hTSVpFID0gZUlOU1RBTkNFLmdldFNxdWFyZUxhdHRpY2VHcmFwaEdlbmVyYXRvcl9YU2l6ZSgpOworCisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+WVNpemU8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUF0dHJpYnV0ZSBTUVVBUkVfTEFUVElDRV9HUkFQSF9HRU5FUkFUT1JfX1lTSVpFID0gZUlOU1RBTkNFLmdldFNxdWFyZUxhdHRpY2VHcmFwaEdlbmVyYXRvcl9ZU2l6ZSgpOworCisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+QXJlYTwvYj48L2VtPicgYXR0cmlidXRlIGZlYXR1cmUuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQXR0cmlidXRlIFNRVUFSRV9MQVRUSUNFX0dSQVBIX0dFTkVSQVRPUl9fQVJFQSA9IGVJTlNUQU5DRS5nZXRTcXVhcmVMYXR0aWNlR3JhcGhHZW5lcmF0b3JfQXJlYSgpOworCisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaGdlbmVyYXRvcnMuaW1wbC5NaWdyYXRpb25FZGdlR3JhcGhHZW5lcmF0b3JJbXBsIDxlbT5NaWdyYXRpb24gRWRnZSBHcmFwaCBHZW5lcmF0b3I8L2VtPn0nIGNsYXNzLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmdyYXBoZ2VuZXJhdG9ycy5pbXBsLk1pZ3JhdGlvbkVkZ2VHcmFwaEdlbmVyYXRvckltcGwKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmdyYXBoZ2VuZXJhdG9ycy5pbXBsLkdyYXBoZ2VuZXJhdG9yc1BhY2thZ2VJbXBsI2dldE1pZ3JhdGlvbkVkZ2VHcmFwaEdlbmVyYXRvcigpCisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVDbGFzcyBNSUdSQVRJT05fRURHRV9HUkFQSF9HRU5FUkFUT1IgPSBlSU5TVEFOQ0UuZ2V0TWlncmF0aW9uRWRnZUdyYXBoR2VuZXJhdG9yKCk7CisKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5Mb2NhdGlvbjwvYj48L2VtPicgYXR0cmlidXRlIGZlYXR1cmUuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQXR0cmlidXRlIE1JR1JBVElPTl9FREdFX0dSQVBIX0dFTkVSQVRPUl9fTE9DQVRJT04gPSBlSU5TVEFOQ0UuZ2V0TWlncmF0aW9uRWRnZUdyYXBoR2VuZXJhdG9yX0xvY2F0aW9uKCk7CisKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5NaWdyYXRpb24gUmF0ZTwvYj48L2VtPicgYXR0cmlidXRlIGZlYXR1cmUuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQXR0cmlidXRlIE1JR1JBVElPTl9FREdFX0dSQVBIX0dFTkVSQVRPUl9fTUlHUkFUSU9OX1JBVEUgPSBlSU5TVEFOQ0UuZ2V0TWlncmF0aW9uRWRnZUdyYXBoR2VuZXJhdG9yX01pZ3JhdGlvblJhdGUoKTsKKworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPlBvcHVsYXRpb248L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUF0dHJpYnV0ZSBNSUdSQVRJT05fRURHRV9HUkFQSF9HRU5FUkFUT1JfX1BPUFVMQVRJT04gPSBlSU5TVEFOQ0UuZ2V0TWlncmF0aW9uRWRnZUdyYXBoR2VuZXJhdG9yX1BvcHVsYXRpb24oKTsKKworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhnZW5lcmF0b3JzLmltcGwuUGxhdGVDYXJyZWVHbG9iZUdyYXBoR2VuZXJhdG9ySW1wbCA8ZW0+UGxhdGUgQ2FycmVlIEdsb2JlIEdyYXBoIEdlbmVyYXRvcjwvZW0+fScgY2xhc3MuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhnZW5lcmF0b3JzLmltcGwuUGxhdGVDYXJyZWVHbG9iZUdyYXBoR2VuZXJhdG9ySW1wbAorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhnZW5lcmF0b3JzLmltcGwuR3JhcGhnZW5lcmF0b3JzUGFja2FnZUltcGwjZ2V0UGxhdGVDYXJyZWVHbG9iZUdyYXBoR2VuZXJhdG9yKCkKKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUNsYXNzIFBMQVRFX0NBUlJFRV9HTE9CRV9HUkFQSF9HRU5FUkFUT1IgPSBlSU5TVEFOQ0UuZ2V0UGxhdGVDYXJyZWVHbG9iZUdyYXBoR2VuZXJhdG9yKCk7CisKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5Bbmd1bGFyIFN0ZXA8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUF0dHJpYnV0ZSBQTEFURV9DQVJSRUVfR0xPQkVfR1JBUEhfR0VORVJBVE9SX19BTkdVTEFSX1NURVAgPSBlSU5TVEFOQ0UuZ2V0UGxhdGVDYXJyZWVHbG9iZUdyYXBoR2VuZXJhdG9yX0FuZ3VsYXJTdGVwKCk7CisKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5SYWRpdXM8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUF0dHJpYnV0ZSBQTEFURV9DQVJSRUVfR0xPQkVfR1JBUEhfR0VORVJBVE9SX19SQURJVVMgPSBlSU5TVEFOQ0UuZ2V0UGxhdGVDYXJyZWVHbG9iZUdyYXBoR2VuZXJhdG9yX1JhZGl1cygpOworCisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaGdlbmVyYXRvcnMuaW1wbC5QYWpla05ldEdyYXBoR2VuZXJhdG9ySW1wbCA8ZW0+UGFqZWsgTmV0IEdyYXBoIEdlbmVyYXRvcjwvZW0+fScgY2xhc3MuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhnZW5lcmF0b3JzLmltcGwuUGFqZWtOZXRHcmFwaEdlbmVyYXRvckltcGwKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmdyYXBoZ2VuZXJhdG9ycy5pbXBsLkdyYXBoZ2VuZXJhdG9yc1BhY2thZ2VJbXBsI2dldFBhamVrTmV0R3JhcGhHZW5lcmF0b3IoKQorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQ2xhc3MgUEFKRUtfTkVUX0dSQVBIX0dFTkVSQVRPUiA9IGVJTlNUQU5DRS5nZXRQYWpla05ldEdyYXBoR2VuZXJhdG9yKCk7CisKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5EYXRhIEZpbGUgbmV0PC9iPjwvZW0+JyBhdHRyaWJ1dGUgZmVhdHVyZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVBdHRyaWJ1dGUgUEFKRUtfTkVUX0dSQVBIX0dFTkVSQVRPUl9fREFUQV9GSUxFX05FVCA9IGVJTlNUQU5DRS5nZXRQYWpla05ldEdyYXBoR2VuZXJhdG9yX0RhdGFGaWxlX25ldCgpOworCisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+QXJlYTwvYj48L2VtPicgYXR0cmlidXRlIGZlYXR1cmUuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQXR0cmlidXRlIFBBSkVLX05FVF9HUkFQSF9HRU5FUkFUT1JfX0FSRUEgPSBlSU5TVEFOQ0UuZ2V0UGFqZWtOZXRHcmFwaEdlbmVyYXRvcl9BcmVhKCk7CisKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5Db250YWluZXI8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUF0dHJpYnV0ZSBQQUpFS19ORVRfR1JBUEhfR0VORVJBVE9SX19DT05UQUlORVIgPSBlSU5TVEFOQ0UuZ2V0UGFqZWtOZXRHcmFwaEdlbmVyYXRvcl9Db250YWluZXIoKTsKKworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPlNjYWxpbmcgRmFjdG9yPC9iPjwvZW0+JyBhdHRyaWJ1dGUgZmVhdHVyZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVBdHRyaWJ1dGUgUEFKRUtfTkVUX0dSQVBIX0dFTkVSQVRPUl9fU0NBTElOR19GQUNUT1IgPSBlSU5TVEFOQ0UuZ2V0UGFqZWtOZXRHcmFwaEdlbmVyYXRvcl9TY2FsaW5nRmFjdG9yKCk7CisKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5GaXQ8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUF0dHJpYnV0ZSBQQUpFS19ORVRfR1JBUEhfR0VORVJBVE9SX19GSVQgPSBlSU5TVEFOQ0UuZ2V0UGFqZWtOZXRHcmFwaEdlbmVyYXRvcl9GaXQoKTsKKworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPkVuZm9yY2UgQ29udGFpbm1lbnQ8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUF0dHJpYnV0ZSBQQUpFS19ORVRfR1JBUEhfR0VORVJBVE9SX19FTkZPUkNFX0NPTlRBSU5NRU5UID0gZUlOU1RBTkNFLmdldFBhamVrTmV0R3JhcGhHZW5lcmF0b3JfRW5mb3JjZUNvbnRhaW5tZW50KCk7CisKKwl9CisKK30gLy9HcmFwaGdlbmVyYXRvcnNQYWNrYWdlClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmdyYXBoZ2VuZXJhdG9ycy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9ncmFwaGdlbmVyYXRvcnMvTGF0dGljZUdyYXBoR2VuZXJhdG9yLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhnZW5lcmF0b3JzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2dyYXBoZ2VuZXJhdG9ycy9MYXR0aWNlR3JhcGhHZW5lcmF0b3IuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NWQ5MmZlCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmdyYXBoZ2VuZXJhdG9ycy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9ncmFwaGdlbmVyYXRvcnMvTGF0dGljZUdyYXBoR2VuZXJhdG9yLmphdmEKQEAgLTAsMCArMSwxMTQgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDksMjAxMCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhnZW5lcmF0b3JzOworCisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIEEgcmVwcmVzZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPkxhdHRpY2UgR3JhcGggR2VuZXJhdG9yPC9iPjwvZW0+Jy4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICoKKyAqIDxwPgorICogVGhlIGZvbGxvd2luZyBmZWF0dXJlcyBhcmUgc3VwcG9ydGVkOgorICogPHVsPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhnZW5lcmF0b3JzLkxhdHRpY2VHcmFwaEdlbmVyYXRvciNpc1VzZU5lYXJlc3ROZWlnaGJvcnMgPGVtPlVzZSBOZWFyZXN0IE5laWdoYm9yczwvZW0+fTwvbGk+CisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaGdlbmVyYXRvcnMuTGF0dGljZUdyYXBoR2VuZXJhdG9yI2lzVXNlTmV4dE5lYXJlc3ROZWlnaGJvcnMgPGVtPlVzZSBOZXh0IE5lYXJlc3QgTmVpZ2hib3JzPC9lbT59PC9saT4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmdyYXBoZ2VuZXJhdG9ycy5MYXR0aWNlR3JhcGhHZW5lcmF0b3IjaXNQZXJpb2RpY0JvdW5kYXJpZXMgPGVtPlBlcmlvZGljIEJvdW5kYXJpZXM8L2VtPn08L2xpPgorICogPC91bD4KKyAqIDwvcD4KKyAqCisgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhnZW5lcmF0b3JzLkdyYXBoZ2VuZXJhdG9yc1BhY2thZ2UjZ2V0TGF0dGljZUdyYXBoR2VuZXJhdG9yKCkKKyAqIEBtb2RlbCBhYnN0cmFjdD0idHJ1ZSIKKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGludGVyZmFjZSBMYXR0aWNlR3JhcGhHZW5lcmF0b3IgZXh0ZW5kcyBHcmFwaEdlbmVyYXRvciB7CisJLyoqCisJICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+VXNlIE5lYXJlc3QgTmVpZ2hib3JzPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogVGhlIGRlZmF1bHQgdmFsdWUgaXMgPGNvZGU+InRydWUiPC9jb2RlPi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDxwPgorCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPlVzZSBOZWFyZXN0IE5laWdoYm9yczwvZW0+JyBhdHRyaWJ1dGUgaXNuJ3QgY2xlYXIsCisJICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLgorCSAqIDwvcD4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5Vc2UgTmVhcmVzdCBOZWlnaGJvcnM8L2VtPicgYXR0cmlidXRlLgorCSAqIEBzZWUgI3NldFVzZU5lYXJlc3ROZWlnaGJvcnMoYm9vbGVhbikKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhnZW5lcmF0b3JzLkdyYXBoZ2VuZXJhdG9yc1BhY2thZ2UjZ2V0TGF0dGljZUdyYXBoR2VuZXJhdG9yX1VzZU5lYXJlc3ROZWlnaGJvcnMoKQorCSAqIEBtb2RlbCBkZWZhdWx0PSJ0cnVlIgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlib29sZWFuIGlzVXNlTmVhcmVzdE5laWdoYm9ycygpOworCisJLyoqCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaGdlbmVyYXRvcnMuTGF0dGljZUdyYXBoR2VuZXJhdG9yI2lzVXNlTmVhcmVzdE5laWdoYm9ycyA8ZW0+VXNlIE5lYXJlc3QgTmVpZ2hib3JzPC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5Vc2UgTmVhcmVzdCBOZWlnaGJvcnM8L2VtPicgYXR0cmlidXRlLgorCSAqIEBzZWUgI2lzVXNlTmVhcmVzdE5laWdoYm9ycygpCisJICogQGdlbmVyYXRlZAorCSAqLworCXZvaWQgc2V0VXNlTmVhcmVzdE5laWdoYm9ycyhib29sZWFuIHZhbHVlKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPlVzZSBOZXh0IE5lYXJlc3QgTmVpZ2hib3JzPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogVGhlIGRlZmF1bHQgdmFsdWUgaXMgPGNvZGU+ImZhbHNlIjwvY29kZT4uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8cD4KKwkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5Vc2UgTmV4dCBOZWFyZXN0IE5laWdoYm9yczwvZW0+JyBhdHRyaWJ1dGUgaXNuJ3QgY2xlYXIsCisJICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLgorCSAqIDwvcD4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5Vc2UgTmV4dCBOZWFyZXN0IE5laWdoYm9yczwvZW0+JyBhdHRyaWJ1dGUuCisJICogQHNlZSAjc2V0VXNlTmV4dE5lYXJlc3ROZWlnaGJvcnMoYm9vbGVhbikKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhnZW5lcmF0b3JzLkdyYXBoZ2VuZXJhdG9yc1BhY2thZ2UjZ2V0TGF0dGljZUdyYXBoR2VuZXJhdG9yX1VzZU5leHROZWFyZXN0TmVpZ2hib3JzKCkKKwkgKiBAbW9kZWwgZGVmYXVsdD0iZmFsc2UiCisJICogQGdlbmVyYXRlZAorCSAqLworCWJvb2xlYW4gaXNVc2VOZXh0TmVhcmVzdE5laWdoYm9ycygpOworCisJLyoqCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaGdlbmVyYXRvcnMuTGF0dGljZUdyYXBoR2VuZXJhdG9yI2lzVXNlTmV4dE5lYXJlc3ROZWlnaGJvcnMgPGVtPlVzZSBOZXh0IE5lYXJlc3QgTmVpZ2hib3JzPC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5Vc2UgTmV4dCBOZWFyZXN0IE5laWdoYm9yczwvZW0+JyBhdHRyaWJ1dGUuCisJICogQHNlZSAjaXNVc2VOZXh0TmVhcmVzdE5laWdoYm9ycygpCisJICogQGdlbmVyYXRlZAorCSAqLworCXZvaWQgc2V0VXNlTmV4dE5lYXJlc3ROZWlnaGJvcnMoYm9vbGVhbiB2YWx1ZSk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5QZXJpb2RpYyBCb3VuZGFyaWVzPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogVGhlIGRlZmF1bHQgdmFsdWUgaXMgPGNvZGU+InRydWUiPC9jb2RlPi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDxwPgorCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPlBlcmlvZGljIEJvdW5kYXJpZXM8L2VtPicgYXR0cmlidXRlIGlzbid0IGNsZWFyLAorCSAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4KKwkgKiA8L3A+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+UGVyaW9kaWMgQm91bmRhcmllczwvZW0+JyBhdHRyaWJ1dGUuCisJICogQHNlZSAjc2V0UGVyaW9kaWNCb3VuZGFyaWVzKGJvb2xlYW4pCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmdyYXBoZ2VuZXJhdG9ycy5HcmFwaGdlbmVyYXRvcnNQYWNrYWdlI2dldExhdHRpY2VHcmFwaEdlbmVyYXRvcl9QZXJpb2RpY0JvdW5kYXJpZXMoKQorCSAqIEBtb2RlbCBkZWZhdWx0PSJ0cnVlIgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlib29sZWFuIGlzUGVyaW9kaWNCb3VuZGFyaWVzKCk7CisKKwkvKioKKwkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmdyYXBoZ2VuZXJhdG9ycy5MYXR0aWNlR3JhcGhHZW5lcmF0b3IjaXNQZXJpb2RpY0JvdW5kYXJpZXMgPGVtPlBlcmlvZGljIEJvdW5kYXJpZXM8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPlBlcmlvZGljIEJvdW5kYXJpZXM8L2VtPicgYXR0cmlidXRlLgorCSAqIEBzZWUgI2lzUGVyaW9kaWNCb3VuZGFyaWVzKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJdm9pZCBzZXRQZXJpb2RpY0JvdW5kYXJpZXMoYm9vbGVhbiB2YWx1ZSk7CisKK30gLy8gTGF0dGljZUdyYXBoR2VuZXJhdG9yCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhnZW5lcmF0b3JzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2dyYXBoZ2VuZXJhdG9ycy9NaWdyYXRpb25FZGdlR3JhcGhHZW5lcmF0b3IuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaGdlbmVyYXRvcnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZ3JhcGhnZW5lcmF0b3JzL01pZ3JhdGlvbkVkZ2VHcmFwaEdlbmVyYXRvci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFiYmE1MWEKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhnZW5lcmF0b3JzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2dyYXBoZ2VuZXJhdG9ycy9NaWdyYXRpb25FZGdlR3JhcGhHZW5lcmF0b3IuamF2YQpAQCAtMCwwICsxLDEyNCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOSwyMDEwIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaGdlbmVyYXRvcnM7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuVVJJOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiBBIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5NaWdyYXRpb24gRWRnZSBHcmFwaCBHZW5lcmF0b3I8L2I+PC9lbT4nLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKgorICogPHA+CisgKiBUaGUgZm9sbG93aW5nIGZlYXR1cmVzIGFyZSBzdXBwb3J0ZWQ6CisgKiA8dWw+CisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaGdlbmVyYXRvcnMuTWlncmF0aW9uRWRnZUdyYXBoR2VuZXJhdG9yI2dldExvY2F0aW9uIDxlbT5Mb2NhdGlvbjwvZW0+fTwvbGk+CisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaGdlbmVyYXRvcnMuTWlncmF0aW9uRWRnZUdyYXBoR2VuZXJhdG9yI2dldE1pZ3JhdGlvblJhdGUgPGVtPk1pZ3JhdGlvbiBSYXRlPC9lbT59PC9saT4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmdyYXBoZ2VuZXJhdG9ycy5NaWdyYXRpb25FZGdlR3JhcGhHZW5lcmF0b3IjZ2V0UG9wdWxhdGlvbiA8ZW0+UG9wdWxhdGlvbjwvZW0+fTwvbGk+CisgKiA8L3VsPgorICogPC9wPgorICoKKyAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaGdlbmVyYXRvcnMuR3JhcGhnZW5lcmF0b3JzUGFja2FnZSNnZXRNaWdyYXRpb25FZGdlR3JhcGhHZW5lcmF0b3IoKQorICogQG1vZGVsCisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBpbnRlcmZhY2UgTWlncmF0aW9uRWRnZUdyYXBoR2VuZXJhdG9yIGV4dGVuZHMgR3JhcGhHZW5lcmF0b3IgeworCQorCS8qKiAKKwkgKiBNaWdyYXRpb24gRWRnZSBUeXBlCisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgTUlHUkFUSU9OX0VER0VfVFlQRT0iTWlncmF0aW9uIEVkZ2VzIjsKKwkKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5Mb2NhdGlvbjwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPHA+CisJICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+TG9jYXRpb248L2VtPicgYXR0cmlidXRlIGlzbid0IGNsZWFyLAorCSAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4KKwkgKiA8L3A+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+TG9jYXRpb248L2VtPicgYXR0cmlidXRlLgorCSAqIEBzZWUgI3NldExvY2F0aW9uKFVSSSkKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhnZW5lcmF0b3JzLkdyYXBoZ2VuZXJhdG9yc1BhY2thZ2UjZ2V0TWlncmF0aW9uRWRnZUdyYXBoR2VuZXJhdG9yX0xvY2F0aW9uKCkKKwkgKiBAbW9kZWwgZGF0YVR5cGU9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uVVJJIgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlVUkkgZ2V0TG9jYXRpb24oKTsKKworCS8qKgorCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhnZW5lcmF0b3JzLk1pZ3JhdGlvbkVkZ2VHcmFwaEdlbmVyYXRvciNnZXRMb2NhdGlvbiA8ZW0+TG9jYXRpb248L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPkxvY2F0aW9uPC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiBAc2VlICNnZXRMb2NhdGlvbigpCisJICogQGdlbmVyYXRlZAorCSAqLworCXZvaWQgc2V0TG9jYXRpb24oVVJJIHZhbHVlKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPk1pZ3JhdGlvbiBSYXRlPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogVGhlIGRlZmF1bHQgdmFsdWUgaXMgPGNvZGU+IjAuMSI8L2NvZGU+LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPHA+CisJICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+TWlncmF0aW9uIFJhdGU8L2VtPicgYXR0cmlidXRlIGlzbid0IGNsZWFyLAorCSAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4KKwkgKiA8L3A+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+TWlncmF0aW9uIFJhdGU8L2VtPicgYXR0cmlidXRlLgorCSAqIEBzZWUgI3NldE1pZ3JhdGlvblJhdGUoZG91YmxlKQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaGdlbmVyYXRvcnMuR3JhcGhnZW5lcmF0b3JzUGFja2FnZSNnZXRNaWdyYXRpb25FZGdlR3JhcGhHZW5lcmF0b3JfTWlncmF0aW9uUmF0ZSgpCisJICogQG1vZGVsIGRlZmF1bHQ9IjAuMSIKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJZG91YmxlIGdldE1pZ3JhdGlvblJhdGUoKTsKKworCS8qKgorCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhnZW5lcmF0b3JzLk1pZ3JhdGlvbkVkZ2VHcmFwaEdlbmVyYXRvciNnZXRNaWdyYXRpb25SYXRlIDxlbT5NaWdyYXRpb24gUmF0ZTwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+TWlncmF0aW9uIFJhdGU8L2VtPicgYXR0cmlidXRlLgorCSAqIEBzZWUgI2dldE1pZ3JhdGlvblJhdGUoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwl2b2lkIHNldE1pZ3JhdGlvblJhdGUoZG91YmxlIHZhbHVlKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPlBvcHVsYXRpb248L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyA8Y29kZT4iaHVtYW4iPC9jb2RlPi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDxwPgorCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPlBvcHVsYXRpb248L2VtPicgYXR0cmlidXRlIGlzbid0IGNsZWFyLAorCSAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4KKwkgKiA8L3A+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+UG9wdWxhdGlvbjwvZW0+JyBhdHRyaWJ1dGUuCisJICogQHNlZSAjc2V0UG9wdWxhdGlvbihTdHJpbmcpCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmdyYXBoZ2VuZXJhdG9ycy5HcmFwaGdlbmVyYXRvcnNQYWNrYWdlI2dldE1pZ3JhdGlvbkVkZ2VHcmFwaEdlbmVyYXRvcl9Qb3B1bGF0aW9uKCkKKwkgKiBAbW9kZWwgZGVmYXVsdD0iaHVtYW4iCisJICogQGdlbmVyYXRlZAorCSAqLworCVN0cmluZyBnZXRQb3B1bGF0aW9uKCk7CisKKwkvKioKKwkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmdyYXBoZ2VuZXJhdG9ycy5NaWdyYXRpb25FZGdlR3JhcGhHZW5lcmF0b3IjZ2V0UG9wdWxhdGlvbiA8ZW0+UG9wdWxhdGlvbjwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+UG9wdWxhdGlvbjwvZW0+JyBhdHRyaWJ1dGUuCisJICogQHNlZSAjZ2V0UG9wdWxhdGlvbigpCisJICogQGdlbmVyYXRlZAorCSAqLworCXZvaWQgc2V0UG9wdWxhdGlvbihTdHJpbmcgdmFsdWUpOworCisJcHVibGljIElQcm9qZWN0IGdldFByb2plY3QoKTsKKwlwdWJsaWMgdm9pZCBzZXRQcm9qZWN0KElQcm9qZWN0IHApOworCQorfSAvLyBNaWdyYXRpb25FZGdlR3JhcGhHZW5lcmF0b3IKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaGdlbmVyYXRvcnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZ3JhcGhnZW5lcmF0b3JzL1BhamVrTmV0R3JhcGhHZW5lcmF0b3IuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaGdlbmVyYXRvcnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZ3JhcGhnZW5lcmF0b3JzL1BhamVrTmV0R3JhcGhHZW5lcmF0b3IuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMDE5NmIwCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmdyYXBoZ2VuZXJhdG9ycy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9ncmFwaGdlbmVyYXRvcnMvUGFqZWtOZXRHcmFwaEdlbmVyYXRvci5qYXZhCkBAIC0wLDAgKzEsMjA3IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhnZW5lcmF0b3JzOw0KKw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdDsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlVSSTsNCisNCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyogQ29weXJpZ2h0IChjKSAyMDEwIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLg0KKyogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscw0KKyogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wDQorKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdA0KKyogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwNCisqDQorKiBDb250cmlidXRvcnM6IEFybWluIFdlaXNlciwgTWF0dGhpYXMgRmlsdGVyDQorKiBCdW5kZXNpbnN0aXR1dCBmw7xyIFJpc2lrb2Jld2VydHVuZw0KKyogRkcgNDMgLSBFcGlkZW1pb2xvZ2llIHVuZCBab29ub3Nlbg0KKyogRGllZGVyc2RvcmZlciBXZWcgMSwgMTIyNzcgQmVybGluDQorKiANCisqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbg0KKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQorDQorLyoqDQorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisgKiBBIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5QYWplayBOZXQgR3JhcGggR2VuZXJhdG9yPC9iPjwvZW0+Jy4NCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisgKg0KKyAqIDxwPg0KKyAqIFRoZSBmb2xsb3dpbmcgZmVhdHVyZXMgYXJlIHN1cHBvcnRlZDoNCisgKiA8dWw+DQorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhnZW5lcmF0b3JzLlBhamVrTmV0R3JhcGhHZW5lcmF0b3IjZ2V0RGF0YUZpbGVfbmV0IDxlbT5EYXRhIEZpbGUgbmV0PC9lbT59PC9saT4NCisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaGdlbmVyYXRvcnMuUGFqZWtOZXRHcmFwaEdlbmVyYXRvciNnZXRBcmVhIDxlbT5BcmVhPC9lbT59PC9saT4NCisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaGdlbmVyYXRvcnMuUGFqZWtOZXRHcmFwaEdlbmVyYXRvciNnZXRDb250YWluZXIgPGVtPkNvbnRhaW5lcjwvZW0+fTwvbGk+DQorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhnZW5lcmF0b3JzLlBhamVrTmV0R3JhcGhHZW5lcmF0b3IjZ2V0U2NhbGluZ0ZhY3RvciA8ZW0+U2NhbGluZyBGYWN0b3I8L2VtPn08L2xpPg0KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmdyYXBoZ2VuZXJhdG9ycy5QYWpla05ldEdyYXBoR2VuZXJhdG9yI2lzRml0IDxlbT5GaXQ8L2VtPn08L2xpPg0KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmdyYXBoZ2VuZXJhdG9ycy5QYWpla05ldEdyYXBoR2VuZXJhdG9yI2lzRW5mb3JjZUNvbnRhaW5tZW50IDxlbT5FbmZvcmNlIENvbnRhaW5tZW50PC9lbT59PC9saT4NCisgKiA8L3VsPg0KKyAqIDwvcD4NCisgKg0KKyAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaGdlbmVyYXRvcnMuR3JhcGhnZW5lcmF0b3JzUGFja2FnZSNnZXRQYWpla05ldEdyYXBoR2VuZXJhdG9yKCkNCisgKiBAbW9kZWwNCisgKiBAZ2VuZXJhdGVkDQorICovDQorcHVibGljIGludGVyZmFjZSBQYWpla05ldEdyYXBoR2VuZXJhdG9yIGV4dGVuZHMgR3JhcGhHZW5lcmF0b3Igew0KKwkvKioNCisJICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+RGF0YSBGaWxlIG5ldDwvYj48L2VtPicgYXR0cmlidXRlLg0KKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyA8Y29kZT4iIjwvY29kZT4uDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDxwPg0KKwkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5EYXRhIEZpbGUgbmV0PC9lbT4nIGF0dHJpYnV0ZSBpc24ndCBjbGVhciwNCisJICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLg0KKwkgKiA8L3A+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5EYXRhIEZpbGUgbmV0PC9lbT4nIGF0dHJpYnV0ZS4NCisJICogQHNlZSAjc2V0RGF0YUZpbGVfbmV0KFN0cmluZykNCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmdyYXBoZ2VuZXJhdG9ycy5HcmFwaGdlbmVyYXRvcnNQYWNrYWdlI2dldFBhamVrTmV0R3JhcGhHZW5lcmF0b3JfRGF0YUZpbGVfbmV0KCkNCisJICogQG1vZGVsIGRlZmF1bHQ9IiINCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJU3RyaW5nIGdldERhdGFGaWxlX25ldCgpOw0KKw0KKwkvKioNCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaGdlbmVyYXRvcnMuUGFqZWtOZXRHcmFwaEdlbmVyYXRvciNnZXREYXRhRmlsZV9uZXQgPGVtPkRhdGEgRmlsZSBuZXQ8L2VtPn0nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPkRhdGEgRmlsZSBuZXQ8L2VtPicgYXR0cmlidXRlLg0KKwkgKiBAc2VlICNnZXREYXRhRmlsZV9uZXQoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwl2b2lkIHNldERhdGFGaWxlX25ldChTdHJpbmcgdmFsdWUpOw0KKw0KKwkvKioNCisJICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+QXJlYTwvYj48L2VtPicgYXR0cmlidXRlLg0KKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyA8Y29kZT4iMTAwIjwvY29kZT4uDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDxwPg0KKwkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5BcmVhPC9lbT4nIGF0dHJpYnV0ZSBpc24ndCBjbGVhciwNCisJICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLg0KKwkgKiA8L3A+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5BcmVhPC9lbT4nIGF0dHJpYnV0ZS4NCisJICogQHNlZSAjc2V0QXJlYShkb3VibGUpDQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaGdlbmVyYXRvcnMuR3JhcGhnZW5lcmF0b3JzUGFja2FnZSNnZXRQYWpla05ldEdyYXBoR2VuZXJhdG9yX0FyZWEoKQ0KKwkgKiBAbW9kZWwgZGVmYXVsdD0iMTAwIg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlkb3VibGUgZ2V0QXJlYSgpOw0KKw0KKwkvKioNCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaGdlbmVyYXRvcnMuUGFqZWtOZXRHcmFwaEdlbmVyYXRvciNnZXRBcmVhIDxlbT5BcmVhPC9lbT59JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5BcmVhPC9lbT4nIGF0dHJpYnV0ZS4NCisJICogQHNlZSAjZ2V0QXJlYSgpDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXZvaWQgc2V0QXJlYShkb3VibGUgdmFsdWUpOw0KKw0KKwkvKioNCisJICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+Q29udGFpbmVyPC9iPjwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIGlzIDxjb2RlPiIiPC9jb2RlPi4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPHA+DQorCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPkNvbnRhaW5lcjwvZW0+JyBhdHRyaWJ1dGUgaXNuJ3QgY2xlYXIsDQorCSAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4NCisJICogPC9wPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+Q29udGFpbmVyPC9lbT4nIGF0dHJpYnV0ZS4NCisJICogQHNlZSAjc2V0Q29udGFpbmVyKFVSSSkNCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmdyYXBoZ2VuZXJhdG9ycy5HcmFwaGdlbmVyYXRvcnNQYWNrYWdlI2dldFBhamVrTmV0R3JhcGhHZW5lcmF0b3JfQ29udGFpbmVyKCkNCisJICogQG1vZGVsIGRlZmF1bHQ9IiIgZGF0YVR5cGU9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uVVJJIg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlVUkkgZ2V0Q29udGFpbmVyKCk7DQorDQorCS8qKg0KKwkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmdyYXBoZ2VuZXJhdG9ycy5QYWpla05ldEdyYXBoR2VuZXJhdG9yI2dldENvbnRhaW5lciA8ZW0+Q29udGFpbmVyPC9lbT59JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5Db250YWluZXI8L2VtPicgYXR0cmlidXRlLg0KKwkgKiBAc2VlICNnZXRDb250YWluZXIoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwl2b2lkIHNldENvbnRhaW5lcihVUkkgdmFsdWUpOw0KKw0KKwkvKioNCisJICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+U2NhbGluZyBGYWN0b3I8L2I+PC9lbT4nIGF0dHJpYnV0ZS4NCisJICogVGhlIGRlZmF1bHQgdmFsdWUgaXMgPGNvZGU+IjEwMCI8L2NvZGU+Lg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8cD4NCisJICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+U2NhbGluZyBGYWN0b3I8L2VtPicgYXR0cmlidXRlIGlzbid0IGNsZWFyLA0KKwkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uDQorCSAqIDwvcD4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPlNjYWxpbmcgRmFjdG9yPC9lbT4nIGF0dHJpYnV0ZS4NCisJICogQHNlZSAjc2V0U2NhbGluZ0ZhY3Rvcihkb3VibGUpDQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaGdlbmVyYXRvcnMuR3JhcGhnZW5lcmF0b3JzUGFja2FnZSNnZXRQYWpla05ldEdyYXBoR2VuZXJhdG9yX1NjYWxpbmdGYWN0b3IoKQ0KKwkgKiBAbW9kZWwgZGVmYXVsdD0iMTAwIg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlkb3VibGUgZ2V0U2NhbGluZ0ZhY3RvcigpOw0KKw0KKwkvKioNCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaGdlbmVyYXRvcnMuUGFqZWtOZXRHcmFwaEdlbmVyYXRvciNnZXRTY2FsaW5nRmFjdG9yIDxlbT5TY2FsaW5nIEZhY3RvcjwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+U2NhbGluZyBGYWN0b3I8L2VtPicgYXR0cmlidXRlLg0KKwkgKiBAc2VlICNnZXRTY2FsaW5nRmFjdG9yKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJdm9pZCBzZXRTY2FsaW5nRmFjdG9yKGRvdWJsZSB2YWx1ZSk7DQorDQorCS8qKg0KKwkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5GaXQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4NCisJICogVGhlIGRlZmF1bHQgdmFsdWUgaXMgPGNvZGU+IiI8L2NvZGU+Lg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8cD4NCisJICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+Rml0PC9lbT4nIGF0dHJpYnV0ZSBpc24ndCBjbGVhciwNCisJICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLg0KKwkgKiA8L3A+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5GaXQ8L2VtPicgYXR0cmlidXRlLg0KKwkgKiBAc2VlICNzZXRGaXQoYm9vbGVhbikNCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmdyYXBoZ2VuZXJhdG9ycy5HcmFwaGdlbmVyYXRvcnNQYWNrYWdlI2dldFBhamVrTmV0R3JhcGhHZW5lcmF0b3JfRml0KCkNCisJICogQG1vZGVsIGRlZmF1bHQ9IiINCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJYm9vbGVhbiBpc0ZpdCgpOw0KKw0KKwkvKioNCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaGdlbmVyYXRvcnMuUGFqZWtOZXRHcmFwaEdlbmVyYXRvciNpc0ZpdCA8ZW0+Rml0PC9lbT59JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5GaXQ8L2VtPicgYXR0cmlidXRlLg0KKwkgKiBAc2VlICNpc0ZpdCgpDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXZvaWQgc2V0Rml0KGJvb2xlYW4gdmFsdWUpOw0KKw0KKwkvKioNCisJICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+RW5mb3JjZSBDb250YWlubWVudDwvYj48L2VtPicgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8cD4NCisJICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+RW5mb3JjZSBDb250YWlubWVudDwvZW0+JyBhdHRyaWJ1dGUgaXNuJ3QgY2xlYXIsDQorCSAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4NCisJICogPC9wPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+RW5mb3JjZSBDb250YWlubWVudDwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIEBzZWUgI3NldEVuZm9yY2VDb250YWlubWVudChib29sZWFuKQ0KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhnZW5lcmF0b3JzLkdyYXBoZ2VuZXJhdG9yc1BhY2thZ2UjZ2V0UGFqZWtOZXRHcmFwaEdlbmVyYXRvcl9FbmZvcmNlQ29udGFpbm1lbnQoKQ0KKwkgKiBAbW9kZWwNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJYm9vbGVhbiBpc0VuZm9yY2VDb250YWlubWVudCgpOw0KKw0KKwkvKioNCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaGdlbmVyYXRvcnMuUGFqZWtOZXRHcmFwaEdlbmVyYXRvciNpc0VuZm9yY2VDb250YWlubWVudCA8ZW0+RW5mb3JjZSBDb250YWlubWVudDwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+RW5mb3JjZSBDb250YWlubWVudDwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIEBzZWUgI2lzRW5mb3JjZUNvbnRhaW5tZW50KCkNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJdm9pZCBzZXRFbmZvcmNlQ29udGFpbm1lbnQoYm9vbGVhbiB2YWx1ZSk7DQorDQorCXB1YmxpYyBJUHJvamVjdCBnZXRQcm9qZWN0KCk7DQorCXB1YmxpYyB2b2lkIHNldFByb2plY3QoSVByb2plY3QgcCk7DQorDQorfSAvLyBQYWpla05ldEdyYXBoR2VuZXJhdG9yDQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmdyYXBoZ2VuZXJhdG9ycy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9ncmFwaGdlbmVyYXRvcnMvUGxhdGVDYXJyZWVHbG9iZUdyYXBoR2VuZXJhdG9yLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhnZW5lcmF0b3JzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2dyYXBoZ2VuZXJhdG9ycy9QbGF0ZUNhcnJlZUdsb2JlR3JhcGhHZW5lcmF0b3IuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MTY2OWYyCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmdyYXBoZ2VuZXJhdG9ycy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9ncmFwaGdlbmVyYXRvcnMvUGxhdGVDYXJyZWVHbG9iZUdyYXBoR2VuZXJhdG9yLmphdmEKQEAgLTAsMCArMSw4NiBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOSwyMDEwIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaGdlbmVyYXRvcnM7CisKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogQSByZXByZXNlbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+UGxhdGUgQ2FycmVlIEdsb2JlIEdyYXBoIEdlbmVyYXRvcjwvYj48L2VtPicuCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqCisgKiA8cD4KKyAqIFRoZSBmb2xsb3dpbmcgZmVhdHVyZXMgYXJlIHN1cHBvcnRlZDoKKyAqIDx1bD4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmdyYXBoZ2VuZXJhdG9ycy5QbGF0ZUNhcnJlZUdsb2JlR3JhcGhHZW5lcmF0b3IjZ2V0QW5ndWxhclN0ZXAgPGVtPkFuZ3VsYXIgU3RlcDwvZW0+fTwvbGk+CisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaGdlbmVyYXRvcnMuUGxhdGVDYXJyZWVHbG9iZUdyYXBoR2VuZXJhdG9yI2dldFJhZGl1cyA8ZW0+UmFkaXVzPC9lbT59PC9saT4KKyAqIDwvdWw+CisgKiA8L3A+CisgKgorICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmdyYXBoZ2VuZXJhdG9ycy5HcmFwaGdlbmVyYXRvcnNQYWNrYWdlI2dldFBsYXRlQ2FycmVlR2xvYmVHcmFwaEdlbmVyYXRvcigpCisgKiBAbW9kZWwKKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGludGVyZmFjZSBQbGF0ZUNhcnJlZUdsb2JlR3JhcGhHZW5lcmF0b3IgZXh0ZW5kcyBMYXR0aWNlR3JhcGhHZW5lcmF0b3IgeworCS8qKgorCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPkFuZ3VsYXIgU3RlcDwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIGlzIDxjb2RlPiIxMCI8L2NvZGU+LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPHA+CisJICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+QW5ndWxhciBTdGVwPC9lbT4nIGF0dHJpYnV0ZSBpc24ndCBjbGVhciwKKwkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uCisJICogPC9wPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPkFuZ3VsYXIgU3RlcDwvZW0+JyBhdHRyaWJ1dGUuCisJICogQHNlZSAjc2V0QW5ndWxhclN0ZXAoaW50KQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaGdlbmVyYXRvcnMuR3JhcGhnZW5lcmF0b3JzUGFja2FnZSNnZXRQbGF0ZUNhcnJlZUdsb2JlR3JhcGhHZW5lcmF0b3JfQW5ndWxhclN0ZXAoKQorCSAqIEBtb2RlbCBkZWZhdWx0PSIxMCIKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJaW50IGdldEFuZ3VsYXJTdGVwKCk7CisKKwkvKioKKwkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmdyYXBoZ2VuZXJhdG9ycy5QbGF0ZUNhcnJlZUdsb2JlR3JhcGhHZW5lcmF0b3IjZ2V0QW5ndWxhclN0ZXAgPGVtPkFuZ3VsYXIgU3RlcDwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+QW5ndWxhciBTdGVwPC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiBAc2VlICNnZXRBbmd1bGFyU3RlcCgpCisJICogQGdlbmVyYXRlZAorCSAqLworCXZvaWQgc2V0QW5ndWxhclN0ZXAoaW50IHZhbHVlKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPlJhZGl1czwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIGlzIDxjb2RlPiI2MzcxLjAiPC9jb2RlPi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDxwPgorCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPlJhZGl1czwvZW0+JyBhdHRyaWJ1dGUgaXNuJ3QgY2xlYXIsCisJICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLgorCSAqIDwvcD4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5SYWRpdXM8L2VtPicgYXR0cmlidXRlLgorCSAqIEBzZWUgI3NldFJhZGl1cyhkb3VibGUpCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmdyYXBoZ2VuZXJhdG9ycy5HcmFwaGdlbmVyYXRvcnNQYWNrYWdlI2dldFBsYXRlQ2FycmVlR2xvYmVHcmFwaEdlbmVyYXRvcl9SYWRpdXMoKQorCSAqIEBtb2RlbCBkZWZhdWx0PSI2MzcxLjAiIHJlcXVpcmVkPSJ0cnVlIgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlkb3VibGUgZ2V0UmFkaXVzKCk7CisKKwkvKioKKwkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmdyYXBoZ2VuZXJhdG9ycy5QbGF0ZUNhcnJlZUdsb2JlR3JhcGhHZW5lcmF0b3IjZ2V0UmFkaXVzIDxlbT5SYWRpdXM8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPlJhZGl1czwvZW0+JyBhdHRyaWJ1dGUuCisJICogQHNlZSAjZ2V0UmFkaXVzKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJdm9pZCBzZXRSYWRpdXMoZG91YmxlIHZhbHVlKTsKKworfSAvLyBQbGF0ZUNhcnJlZUdsb2JlR3JhcGhHZW5lcmF0b3IKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaGdlbmVyYXRvcnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZ3JhcGhnZW5lcmF0b3JzL1NxdWFyZUxhdHRpY2VHcmFwaEdlbmVyYXRvci5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmdyYXBoZ2VuZXJhdG9ycy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9ncmFwaGdlbmVyYXRvcnMvU3F1YXJlTGF0dGljZUdyYXBoR2VuZXJhdG9yLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjhiYzJjOQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaGdlbmVyYXRvcnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZ3JhcGhnZW5lcmF0b3JzL1NxdWFyZUxhdHRpY2VHcmFwaEdlbmVyYXRvci5qYXZhCkBAIC0wLDAgKzEsMTE0IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA5LDIwMTAgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmdyYXBoZ2VuZXJhdG9yczsKKworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiBBIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5TcXVhcmUgTGF0dGljZSBHcmFwaCBHZW5lcmF0b3I8L2I+PC9lbT4nLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKgorICogPHA+CisgKiBUaGUgZm9sbG93aW5nIGZlYXR1cmVzIGFyZSBzdXBwb3J0ZWQ6CisgKiA8dWw+CisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaGdlbmVyYXRvcnMuU3F1YXJlTGF0dGljZUdyYXBoR2VuZXJhdG9yI2dldFhTaXplIDxlbT5YU2l6ZTwvZW0+fTwvbGk+CisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaGdlbmVyYXRvcnMuU3F1YXJlTGF0dGljZUdyYXBoR2VuZXJhdG9yI2dldFlTaXplIDxlbT5ZU2l6ZTwvZW0+fTwvbGk+CisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaGdlbmVyYXRvcnMuU3F1YXJlTGF0dGljZUdyYXBoR2VuZXJhdG9yI2dldEFyZWEgPGVtPkFyZWE8L2VtPn08L2xpPgorICogPC91bD4KKyAqIDwvcD4KKyAqCisgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhnZW5lcmF0b3JzLkdyYXBoZ2VuZXJhdG9yc1BhY2thZ2UjZ2V0U3F1YXJlTGF0dGljZUdyYXBoR2VuZXJhdG9yKCkKKyAqIEBtb2RlbAorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgaW50ZXJmYWNlIFNxdWFyZUxhdHRpY2VHcmFwaEdlbmVyYXRvciBleHRlbmRzIExhdHRpY2VHcmFwaEdlbmVyYXRvciB7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5YU2l6ZTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIGlzIDxjb2RlPiIxMCI8L2NvZGU+LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPHA+CisJICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+WFNpemU8L2VtPicgYXR0cmlidXRlIGlzbid0IGNsZWFyLAorCSAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4KKwkgKiA8L3A+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+WFNpemU8L2VtPicgYXR0cmlidXRlLgorCSAqIEBzZWUgI3NldFhTaXplKGludCkKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhnZW5lcmF0b3JzLkdyYXBoZ2VuZXJhdG9yc1BhY2thZ2UjZ2V0U3F1YXJlTGF0dGljZUdyYXBoR2VuZXJhdG9yX1hTaXplKCkKKwkgKiBAbW9kZWwgZGVmYXVsdD0iMTAiCisJICogQGdlbmVyYXRlZAorCSAqLworCWludCBnZXRYU2l6ZSgpOworCisJLyoqCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaGdlbmVyYXRvcnMuU3F1YXJlTGF0dGljZUdyYXBoR2VuZXJhdG9yI2dldFhTaXplIDxlbT5YU2l6ZTwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+WFNpemU8L2VtPicgYXR0cmlidXRlLgorCSAqIEBzZWUgI2dldFhTaXplKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJdm9pZCBzZXRYU2l6ZShpbnQgdmFsdWUpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+WVNpemU8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyA8Y29kZT4iMTAiPC9jb2RlPi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDxwPgorCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPllTaXplPC9lbT4nIGF0dHJpYnV0ZSBpc24ndCBjbGVhciwKKwkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uCisJICogPC9wPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPllTaXplPC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiBAc2VlICNzZXRZU2l6ZShpbnQpCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmdyYXBoZ2VuZXJhdG9ycy5HcmFwaGdlbmVyYXRvcnNQYWNrYWdlI2dldFNxdWFyZUxhdHRpY2VHcmFwaEdlbmVyYXRvcl9ZU2l6ZSgpCisJICogQG1vZGVsIGRlZmF1bHQ9IjEwIgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlpbnQgZ2V0WVNpemUoKTsKKworCS8qKgorCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhnZW5lcmF0b3JzLlNxdWFyZUxhdHRpY2VHcmFwaEdlbmVyYXRvciNnZXRZU2l6ZSA8ZW0+WVNpemU8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPllTaXplPC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiBAc2VlICNnZXRZU2l6ZSgpCisJICogQGdlbmVyYXRlZAorCSAqLworCXZvaWQgc2V0WVNpemUoaW50IHZhbHVlKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPkFyZWE8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyA8Y29kZT4iMjAyNSI8L2NvZGU+LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPHA+CisJICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+QXJlYTwvZW0+JyBhdHRyaWJ1dGUgaXNuJ3QgY2xlYXIsCisJICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLgorCSAqIDwvcD4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5BcmVhPC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiBAc2VlICNzZXRBcmVhKGRvdWJsZSkKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhnZW5lcmF0b3JzLkdyYXBoZ2VuZXJhdG9yc1BhY2thZ2UjZ2V0U3F1YXJlTGF0dGljZUdyYXBoR2VuZXJhdG9yX0FyZWEoKQorCSAqIEBtb2RlbCBkZWZhdWx0PSIyMDI1IgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlkb3VibGUgZ2V0QXJlYSgpOworCisJLyoqCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaGdlbmVyYXRvcnMuU3F1YXJlTGF0dGljZUdyYXBoR2VuZXJhdG9yI2dldEFyZWEgPGVtPkFyZWE8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPkFyZWE8L2VtPicgYXR0cmlidXRlLgorCSAqIEBzZWUgI2dldEFyZWEoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwl2b2lkIHNldEFyZWEoZG91YmxlIHZhbHVlKTsKK30gLy8gU3F1YXJlTGF0dGljZUdyYXBoR2VuZXJhdG9yCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhnZW5lcmF0b3JzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2dyYXBoZ2VuZXJhdG9ycy9pbXBsL0dyYXBoR2VuZXJhdG9ySW1wbC5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmdyYXBoZ2VuZXJhdG9ycy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9ncmFwaGdlbmVyYXRvcnMvaW1wbC9HcmFwaEdlbmVyYXRvckltcGwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZDQyODNjCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmdyYXBoZ2VuZXJhdG9ycy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9ncmFwaGdlbmVyYXRvcnMvaW1wbC9HcmFwaEdlbmVyYXRvckltcGwuamF2YQpAQCAtMCwwICsxLDU5IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA5LDIwMTAgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmdyYXBoZ2VuZXJhdG9ycy5pbXBsOworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzczsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLmltcGwuSWRlbnRpZmlhYmxlSW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguR3JhcGg7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaGdlbmVyYXRvcnMuR3JhcGhHZW5lcmF0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaGdlbmVyYXRvcnMuR3JhcGhnZW5lcmF0b3JzUGFja2FnZTsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPkdyYXBoIEdlbmVyYXRvcjwvYj48L2VtPicuCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIDxwPgorICogPC9wPgorICoKKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGFic3RyYWN0IGNsYXNzIEdyYXBoR2VuZXJhdG9ySW1wbCBleHRlbmRzIElkZW50aWZpYWJsZUltcGwgaW1wbGVtZW50cyBHcmFwaEdlbmVyYXRvciB7CisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIEdyYXBoR2VuZXJhdG9ySW1wbCgpIHsKKwkJc3VwZXIoKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgRUNsYXNzIGVTdGF0aWNDbGFzcygpIHsKKwkJcmV0dXJuIEdyYXBoZ2VuZXJhdG9yc1BhY2thZ2UuTGl0ZXJhbHMuR1JBUEhfR0VORVJBVE9SOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBHcmFwaCBnZXRHcmFwaCgpIHsKKwkJLy8gVE9ETzogaW1wbGVtZW50IHRoaXMgbWV0aG9kCisJCS8vIEVuc3VyZSB0aGF0IHlvdSByZW1vdmUgQGdlbmVyYXRlZCBvciBtYXJrIGl0IEBnZW5lcmF0ZWQgTk9UCisJCXRocm93IG5ldyBVbnN1cHBvcnRlZE9wZXJhdGlvbkV4Y2VwdGlvbigpOworCX0KKworfSAvL0dyYXBoR2VuZXJhdG9ySW1wbApkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmdyYXBoZ2VuZXJhdG9ycy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9ncmFwaGdlbmVyYXRvcnMvaW1wbC9HcmFwaGdlbmVyYXRvcnNGYWN0b3J5SW1wbC5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmdyYXBoZ2VuZXJhdG9ycy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9ncmFwaGdlbmVyYXRvcnMvaW1wbC9HcmFwaGdlbmVyYXRvcnNGYWN0b3J5SW1wbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYwYTRmY2UKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhnZW5lcmF0b3JzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2dyYXBoZ2VuZXJhdG9ycy9pbXBsL0dyYXBoZ2VuZXJhdG9yc0ZhY3RvcnlJbXBsLmphdmEKQEAgLTAsMCArMSwxMzggQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDksMjAxMCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhnZW5lcmF0b3JzLmltcGw7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuaW1wbC5FRmFjdG9yeUltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnBsdWdpbi5FY29yZVBsdWdpbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmdyYXBoZ2VuZXJhdG9ycy5HcmFwaGdlbmVyYXRvcnNGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhnZW5lcmF0b3JzLkdyYXBoZ2VuZXJhdG9yc1BhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaGdlbmVyYXRvcnMuTWlncmF0aW9uRWRnZUdyYXBoR2VuZXJhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhnZW5lcmF0b3JzLlBhamVrTmV0R3JhcGhHZW5lcmF0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaGdlbmVyYXRvcnMuUGxhdGVDYXJyZWVHbG9iZUdyYXBoR2VuZXJhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhnZW5lcmF0b3JzLlNxdWFyZUxhdHRpY2VHcmFwaEdlbmVyYXRvcjsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIG1vZGVsIDxiPkZhY3Rvcnk8L2I+LgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBHcmFwaGdlbmVyYXRvcnNGYWN0b3J5SW1wbCBleHRlbmRzIEVGYWN0b3J5SW1wbCBpbXBsZW1lbnRzIEdyYXBoZ2VuZXJhdG9yc0ZhY3RvcnkgeworCS8qKgorCSAqIENyZWF0ZXMgdGhlIGRlZmF1bHQgZmFjdG9yeSBpbXBsZW1lbnRhdGlvbi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgc3RhdGljIEdyYXBoZ2VuZXJhdG9yc0ZhY3RvcnkgaW5pdCgpIHsKKwkJdHJ5IHsKKwkJCUdyYXBoZ2VuZXJhdG9yc0ZhY3RvcnkgdGhlR3JhcGhnZW5lcmF0b3JzRmFjdG9yeSA9IChHcmFwaGdlbmVyYXRvcnNGYWN0b3J5KUVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVGYWN0b3J5KCJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vZ3JhcGhnZW5lcmF0b3JzL2dyYXBoZ2VuZXJhdG9ycy5lY29yZSIpOyAKKwkJCWlmICh0aGVHcmFwaGdlbmVyYXRvcnNGYWN0b3J5ICE9IG51bGwpIHsKKwkJCQlyZXR1cm4gdGhlR3JhcGhnZW5lcmF0b3JzRmFjdG9yeTsKKwkJCX0KKwkJfQorCQljYXRjaCAoRXhjZXB0aW9uIGV4Y2VwdGlvbikgeworCQkJRWNvcmVQbHVnaW4uSU5TVEFOQ0UubG9nKGV4Y2VwdGlvbik7CisJCX0KKwkJcmV0dXJuIG5ldyBHcmFwaGdlbmVyYXRvcnNGYWN0b3J5SW1wbCgpOworCX0KKworCS8qKgorCSAqIENyZWF0ZXMgYW4gaW5zdGFuY2Ugb2YgdGhlIGZhY3RvcnkuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEdyYXBoZ2VuZXJhdG9yc0ZhY3RvcnlJbXBsKCkgeworCQlzdXBlcigpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBFT2JqZWN0IGNyZWF0ZShFQ2xhc3MgZUNsYXNzKSB7CisJCXN3aXRjaCAoZUNsYXNzLmdldENsYXNzaWZpZXJJRCgpKSB7CisJCQljYXNlIEdyYXBoZ2VuZXJhdG9yc1BhY2thZ2UuU1FVQVJFX0xBVFRJQ0VfR1JBUEhfR0VORVJBVE9SOiByZXR1cm4gY3JlYXRlU3F1YXJlTGF0dGljZUdyYXBoR2VuZXJhdG9yKCk7CisJCQljYXNlIEdyYXBoZ2VuZXJhdG9yc1BhY2thZ2UuTUlHUkFUSU9OX0VER0VfR1JBUEhfR0VORVJBVE9SOiByZXR1cm4gY3JlYXRlTWlncmF0aW9uRWRnZUdyYXBoR2VuZXJhdG9yKCk7CisJCQljYXNlIEdyYXBoZ2VuZXJhdG9yc1BhY2thZ2UuUExBVEVfQ0FSUkVFX0dMT0JFX0dSQVBIX0dFTkVSQVRPUjogcmV0dXJuIGNyZWF0ZVBsYXRlQ2FycmVlR2xvYmVHcmFwaEdlbmVyYXRvcigpOworCQkJY2FzZSBHcmFwaGdlbmVyYXRvcnNQYWNrYWdlLlBBSkVLX05FVF9HUkFQSF9HRU5FUkFUT1I6IHJldHVybiBjcmVhdGVQYWpla05ldEdyYXBoR2VuZXJhdG9yKCk7CisJCQlkZWZhdWx0OgorCQkJCXRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIlRoZSBjbGFzcyAnIiArIGVDbGFzcy5nZXROYW1lKCkgKyAiJyBpcyBub3QgYSB2YWxpZCBjbGFzc2lmaWVyIik7CisJCX0KKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgU3F1YXJlTGF0dGljZUdyYXBoR2VuZXJhdG9yIGNyZWF0ZVNxdWFyZUxhdHRpY2VHcmFwaEdlbmVyYXRvcigpIHsKKwkJU3F1YXJlTGF0dGljZUdyYXBoR2VuZXJhdG9ySW1wbCBzcXVhcmVMYXR0aWNlR3JhcGhHZW5lcmF0b3IgPSBuZXcgU3F1YXJlTGF0dGljZUdyYXBoR2VuZXJhdG9ySW1wbCgpOworCQlyZXR1cm4gc3F1YXJlTGF0dGljZUdyYXBoR2VuZXJhdG9yOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBNaWdyYXRpb25FZGdlR3JhcGhHZW5lcmF0b3IgY3JlYXRlTWlncmF0aW9uRWRnZUdyYXBoR2VuZXJhdG9yKCkgeworCQlNaWdyYXRpb25FZGdlR3JhcGhHZW5lcmF0b3JJbXBsIG1pZ3JhdGlvbkVkZ2VHcmFwaEdlbmVyYXRvciA9IG5ldyBNaWdyYXRpb25FZGdlR3JhcGhHZW5lcmF0b3JJbXBsKCk7CisJCXJldHVybiBtaWdyYXRpb25FZGdlR3JhcGhHZW5lcmF0b3I7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFBsYXRlQ2FycmVlR2xvYmVHcmFwaEdlbmVyYXRvciBjcmVhdGVQbGF0ZUNhcnJlZUdsb2JlR3JhcGhHZW5lcmF0b3IoKSB7CisJCVBsYXRlQ2FycmVlR2xvYmVHcmFwaEdlbmVyYXRvckltcGwgcGxhdGVDYXJyZWVHbG9iZUdyYXBoR2VuZXJhdG9yID0gbmV3IFBsYXRlQ2FycmVlR2xvYmVHcmFwaEdlbmVyYXRvckltcGwoKTsKKwkJcmV0dXJuIHBsYXRlQ2FycmVlR2xvYmVHcmFwaEdlbmVyYXRvcjsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgUGFqZWtOZXRHcmFwaEdlbmVyYXRvciBjcmVhdGVQYWpla05ldEdyYXBoR2VuZXJhdG9yKCkgeworCQlQYWpla05ldEdyYXBoR2VuZXJhdG9ySW1wbCBwYWpla05ldEdyYXBoR2VuZXJhdG9yID0gbmV3IFBhamVrTmV0R3JhcGhHZW5lcmF0b3JJbXBsKCk7CisJCXJldHVybiBwYWpla05ldEdyYXBoR2VuZXJhdG9yOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBHcmFwaGdlbmVyYXRvcnNQYWNrYWdlIGdldEdyYXBoZ2VuZXJhdG9yc1BhY2thZ2UoKSB7CisJCXJldHVybiAoR3JhcGhnZW5lcmF0b3JzUGFja2FnZSlnZXRFUGFja2FnZSgpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGRlcHJlY2F0ZWQKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQERlcHJlY2F0ZWQKKwlwdWJsaWMgc3RhdGljIEdyYXBoZ2VuZXJhdG9yc1BhY2thZ2UgZ2V0UGFja2FnZSgpIHsKKwkJcmV0dXJuIEdyYXBoZ2VuZXJhdG9yc1BhY2thZ2UuZUlOU1RBTkNFOworCX0KKworfSAvL0dyYXBoZ2VuZXJhdG9yc0ZhY3RvcnlJbXBsCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhnZW5lcmF0b3JzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2dyYXBoZ2VuZXJhdG9ycy9pbXBsL0dyYXBoZ2VuZXJhdG9yc1BhY2thZ2VJbXBsLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhnZW5lcmF0b3JzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2dyYXBoZ2VuZXJhdG9ycy9pbXBsL0dyYXBoZ2VuZXJhdG9yc1BhY2thZ2VJbXBsLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWQxNmE5YwotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaGdlbmVyYXRvcnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZ3JhcGhnZW5lcmF0b3JzL2ltcGwvR3JhcGhnZW5lcmF0b3JzUGFja2FnZUltcGwuamF2YQpAQCAtMCwwICsxLDQ5NCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOSwyMDEwIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaGdlbmVyYXRvcnMuaW1wbDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQXR0cmlidXRlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FY29yZVBhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLmltcGwuRVBhY2thZ2VJbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uQ29tbW9uUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguR3JhcGhQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5Nb2RlbFBhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLk1vZGlmaWVyUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2NlbmFyaW8uU2NlbmFyaW9QYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zZXF1ZW5jZXIuU2VxdWVuY2VyUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc29sdmVyLlNvbHZlclBhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaGdlbmVyYXRvcnMuR3JhcGhHZW5lcmF0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaGdlbmVyYXRvcnMuR3JhcGhnZW5lcmF0b3JzRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmdyYXBoZ2VuZXJhdG9ycy5HcmFwaGdlbmVyYXRvcnNQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhnZW5lcmF0b3JzLkxhdHRpY2VHcmFwaEdlbmVyYXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmdyYXBoZ2VuZXJhdG9ycy5NaWdyYXRpb25FZGdlR3JhcGhHZW5lcmF0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaGdlbmVyYXRvcnMuUGFqZWtOZXRHcmFwaEdlbmVyYXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmdyYXBoZ2VuZXJhdG9ycy5QbGF0ZUNhcnJlZUdsb2JlR3JhcGhHZW5lcmF0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaGdlbmVyYXRvcnMuU3F1YXJlTGF0dGljZUdyYXBoR2VuZXJhdG9yOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiBBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgbW9kZWwgPGI+UGFja2FnZTwvYj4uCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIEdyYXBoZ2VuZXJhdG9yc1BhY2thZ2VJbXBsIGV4dGVuZHMgRVBhY2thZ2VJbXBsIGltcGxlbWVudHMgR3JhcGhnZW5lcmF0b3JzUGFja2FnZSB7CisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJpdmF0ZSBFQ2xhc3MgZ3JhcGhHZW5lcmF0b3JFQ2xhc3MgPSBudWxsOworCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJpdmF0ZSBFQ2xhc3MgbGF0dGljZUdyYXBoR2VuZXJhdG9yRUNsYXNzID0gbnVsbDsKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByaXZhdGUgRUNsYXNzIHNxdWFyZUxhdHRpY2VHcmFwaEdlbmVyYXRvckVDbGFzcyA9IG51bGw7CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcml2YXRlIEVDbGFzcyBtaWdyYXRpb25FZGdlR3JhcGhHZW5lcmF0b3JFQ2xhc3MgPSBudWxsOworCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJpdmF0ZSBFQ2xhc3MgcGxhdGVDYXJyZWVHbG9iZUdyYXBoR2VuZXJhdG9yRUNsYXNzID0gbnVsbDsKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByaXZhdGUgRUNsYXNzIHBhamVrTmV0R3JhcGhHZW5lcmF0b3JFQ2xhc3MgPSBudWxsOworCisJLyoqCisJICogQ3JlYXRlcyBhbiBpbnN0YW5jZSBvZiB0aGUgbW9kZWwgPGI+UGFja2FnZTwvYj4sIHJlZ2lzdGVyZWQgd2l0aAorCSAqIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRVBhY2thZ2UuUmVnaXN0cnkgRVBhY2thZ2UuUmVnaXN0cnl9IGJ5IHRoZSBwYWNrYWdlCisJICogcGFja2FnZSBVUkkgdmFsdWUuCisJICogPHA+Tm90ZTogdGhlIGNvcnJlY3Qgd2F5IHRvIGNyZWF0ZSB0aGUgcGFja2FnZSBpcyB2aWEgdGhlIHN0YXRpYworCSAqIGZhY3RvcnkgbWV0aG9kIHtAbGluayAjaW5pdCBpbml0KCl9LCB3aGljaCBhbHNvIHBlcmZvcm1zCisJICogaW5pdGlhbGl6YXRpb24gb2YgdGhlIHBhY2thZ2UsIG9yIHJldHVybnMgdGhlIHJlZ2lzdGVyZWQgcGFja2FnZSwKKwkgKiBpZiBvbmUgYWxyZWFkeSBleGlzdHMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FUGFja2FnZS5SZWdpc3RyeQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaGdlbmVyYXRvcnMuR3JhcGhnZW5lcmF0b3JzUGFja2FnZSNlTlNfVVJJCisJICogQHNlZSAjaW5pdCgpCisJICogQGdlbmVyYXRlZAorCSAqLworCXByaXZhdGUgR3JhcGhnZW5lcmF0b3JzUGFja2FnZUltcGwoKSB7CisJCXN1cGVyKGVOU19VUkksIEdyYXBoZ2VuZXJhdG9yc0ZhY3RvcnkuZUlOU1RBTkNFKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcml2YXRlIHN0YXRpYyBib29sZWFuIGlzSW5pdGVkID0gZmFsc2U7CisKKwkvKioKKwkgKiBDcmVhdGVzLCByZWdpc3RlcnMsIGFuZCBpbml0aWFsaXplcyB0aGUgPGI+UGFja2FnZTwvYj4gZm9yIHRoaXMgbW9kZWwsIGFuZCBmb3IgYW55IG90aGVycyB1cG9uIHdoaWNoIGl0IGRlcGVuZHMuCisJICogCisJICogPHA+VGhpcyBtZXRob2QgaXMgdXNlZCB0byBpbml0aWFsaXplIHtAbGluayBHcmFwaGdlbmVyYXRvcnNQYWNrYWdlI2VJTlNUQU5DRX0gd2hlbiB0aGF0IGZpZWxkIGlzIGFjY2Vzc2VkLgorCSAqIENsaWVudHMgc2hvdWxkIG5vdCBpbnZva2UgaXQgZGlyZWN0bHkuIEluc3RlYWQsIHRoZXkgc2hvdWxkIHNpbXBseSBhY2Nlc3MgdGhhdCBmaWVsZCB0byBvYnRhaW4gdGhlIHBhY2thZ2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNlTlNfVVJJCisJICogQHNlZSAjY3JlYXRlUGFja2FnZUNvbnRlbnRzKCkKKwkgKiBAc2VlICNpbml0aWFsaXplUGFja2FnZUNvbnRlbnRzKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHN0YXRpYyBHcmFwaGdlbmVyYXRvcnNQYWNrYWdlIGluaXQoKSB7CisJCWlmIChpc0luaXRlZCkgcmV0dXJuIChHcmFwaGdlbmVyYXRvcnNQYWNrYWdlKUVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVQYWNrYWdlKEdyYXBoZ2VuZXJhdG9yc1BhY2thZ2UuZU5TX1VSSSk7CisKKwkJLy8gT2J0YWluIG9yIGNyZWF0ZSBhbmQgcmVnaXN0ZXIgcGFja2FnZQorCQlHcmFwaGdlbmVyYXRvcnNQYWNrYWdlSW1wbCB0aGVHcmFwaGdlbmVyYXRvcnNQYWNrYWdlID0gKEdyYXBoZ2VuZXJhdG9yc1BhY2thZ2VJbXBsKShFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXQoZU5TX1VSSSkgaW5zdGFuY2VvZiBHcmFwaGdlbmVyYXRvcnNQYWNrYWdlSW1wbCA/IEVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldChlTlNfVVJJKSA6IG5ldyBHcmFwaGdlbmVyYXRvcnNQYWNrYWdlSW1wbCgpKTsKKworCQlpc0luaXRlZCA9IHRydWU7CisKKwkJLy8gSW5pdGlhbGl6ZSBzaW1wbGUgZGVwZW5kZW5jaWVzCisJCUNvbW1vblBhY2thZ2UuZUlOU1RBTkNFLmVDbGFzcygpOworCQlHcmFwaFBhY2thZ2UuZUlOU1RBTkNFLmVDbGFzcygpOworCQlNb2RlbFBhY2thZ2UuZUlOU1RBTkNFLmVDbGFzcygpOworCQlNb2RpZmllclBhY2thZ2UuZUlOU1RBTkNFLmVDbGFzcygpOworCQlTY2VuYXJpb1BhY2thZ2UuZUlOU1RBTkNFLmVDbGFzcygpOworCQlTZXF1ZW5jZXJQYWNrYWdlLmVJTlNUQU5DRS5lQ2xhc3MoKTsKKwkJU29sdmVyUGFja2FnZS5lSU5TVEFOQ0UuZUNsYXNzKCk7CisKKwkJLy8gQ3JlYXRlIHBhY2thZ2UgbWV0YS1kYXRhIG9iamVjdHMKKwkJdGhlR3JhcGhnZW5lcmF0b3JzUGFja2FnZS5jcmVhdGVQYWNrYWdlQ29udGVudHMoKTsKKworCQkvLyBJbml0aWFsaXplIGNyZWF0ZWQgbWV0YS1kYXRhCisJCXRoZUdyYXBoZ2VuZXJhdG9yc1BhY2thZ2UuaW5pdGlhbGl6ZVBhY2thZ2VDb250ZW50cygpOworCisJCS8vIE1hcmsgbWV0YS1kYXRhIHRvIGluZGljYXRlIGl0IGNhbid0IGJlIGNoYW5nZWQKKwkJdGhlR3JhcGhnZW5lcmF0b3JzUGFja2FnZS5mcmVlemUoKTsKKworICAKKwkJLy8gVXBkYXRlIHRoZSByZWdpc3RyeSBhbmQgcmV0dXJuIHRoZSBwYWNrYWdlCisJCUVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLnB1dChHcmFwaGdlbmVyYXRvcnNQYWNrYWdlLmVOU19VUkksIHRoZUdyYXBoZ2VuZXJhdG9yc1BhY2thZ2UpOworCQlyZXR1cm4gdGhlR3JhcGhnZW5lcmF0b3JzUGFja2FnZTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUNsYXNzIGdldEdyYXBoR2VuZXJhdG9yKCkgeworCQlyZXR1cm4gZ3JhcGhHZW5lcmF0b3JFQ2xhc3M7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVDbGFzcyBnZXRMYXR0aWNlR3JhcGhHZW5lcmF0b3IoKSB7CisJCXJldHVybiBsYXR0aWNlR3JhcGhHZW5lcmF0b3JFQ2xhc3M7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVBdHRyaWJ1dGUgZ2V0TGF0dGljZUdyYXBoR2VuZXJhdG9yX1VzZU5lYXJlc3ROZWlnaGJvcnMoKSB7CisJCXJldHVybiAoRUF0dHJpYnV0ZSlsYXR0aWNlR3JhcGhHZW5lcmF0b3JFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgwKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUF0dHJpYnV0ZSBnZXRMYXR0aWNlR3JhcGhHZW5lcmF0b3JfVXNlTmV4dE5lYXJlc3ROZWlnaGJvcnMoKSB7CisJCXJldHVybiAoRUF0dHJpYnV0ZSlsYXR0aWNlR3JhcGhHZW5lcmF0b3JFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgxKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUF0dHJpYnV0ZSBnZXRMYXR0aWNlR3JhcGhHZW5lcmF0b3JfUGVyaW9kaWNCb3VuZGFyaWVzKCkgeworCQlyZXR1cm4gKEVBdHRyaWJ1dGUpbGF0dGljZUdyYXBoR2VuZXJhdG9yRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMik7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVDbGFzcyBnZXRTcXVhcmVMYXR0aWNlR3JhcGhHZW5lcmF0b3IoKSB7CisJCXJldHVybiBzcXVhcmVMYXR0aWNlR3JhcGhHZW5lcmF0b3JFQ2xhc3M7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVBdHRyaWJ1dGUgZ2V0U3F1YXJlTGF0dGljZUdyYXBoR2VuZXJhdG9yX1hTaXplKCkgeworCQlyZXR1cm4gKEVBdHRyaWJ1dGUpc3F1YXJlTGF0dGljZUdyYXBoR2VuZXJhdG9yRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVBdHRyaWJ1dGUgZ2V0U3F1YXJlTGF0dGljZUdyYXBoR2VuZXJhdG9yX1lTaXplKCkgeworCQlyZXR1cm4gKEVBdHRyaWJ1dGUpc3F1YXJlTGF0dGljZUdyYXBoR2VuZXJhdG9yRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVBdHRyaWJ1dGUgZ2V0U3F1YXJlTGF0dGljZUdyYXBoR2VuZXJhdG9yX0FyZWEoKSB7CisJCXJldHVybiAoRUF0dHJpYnV0ZSlzcXVhcmVMYXR0aWNlR3JhcGhHZW5lcmF0b3JFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgyKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUNsYXNzIGdldE1pZ3JhdGlvbkVkZ2VHcmFwaEdlbmVyYXRvcigpIHsKKwkJcmV0dXJuIG1pZ3JhdGlvbkVkZ2VHcmFwaEdlbmVyYXRvckVDbGFzczsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUF0dHJpYnV0ZSBnZXRNaWdyYXRpb25FZGdlR3JhcGhHZW5lcmF0b3JfTG9jYXRpb24oKSB7CisJCXJldHVybiAoRUF0dHJpYnV0ZSltaWdyYXRpb25FZGdlR3JhcGhHZW5lcmF0b3JFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgwKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUF0dHJpYnV0ZSBnZXRNaWdyYXRpb25FZGdlR3JhcGhHZW5lcmF0b3JfTWlncmF0aW9uUmF0ZSgpIHsKKwkJcmV0dXJuIChFQXR0cmlidXRlKW1pZ3JhdGlvbkVkZ2VHcmFwaEdlbmVyYXRvckVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDEpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQXR0cmlidXRlIGdldE1pZ3JhdGlvbkVkZ2VHcmFwaEdlbmVyYXRvcl9Qb3B1bGF0aW9uKCkgeworCQlyZXR1cm4gKEVBdHRyaWJ1dGUpbWlncmF0aW9uRWRnZUdyYXBoR2VuZXJhdG9yRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMik7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVDbGFzcyBnZXRQbGF0ZUNhcnJlZUdsb2JlR3JhcGhHZW5lcmF0b3IoKSB7CisJCXJldHVybiBwbGF0ZUNhcnJlZUdsb2JlR3JhcGhHZW5lcmF0b3JFQ2xhc3M7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVBdHRyaWJ1dGUgZ2V0UGxhdGVDYXJyZWVHbG9iZUdyYXBoR2VuZXJhdG9yX0FuZ3VsYXJTdGVwKCkgeworCQlyZXR1cm4gKEVBdHRyaWJ1dGUpcGxhdGVDYXJyZWVHbG9iZUdyYXBoR2VuZXJhdG9yRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVBdHRyaWJ1dGUgZ2V0UGxhdGVDYXJyZWVHbG9iZUdyYXBoR2VuZXJhdG9yX1JhZGl1cygpIHsKKwkJcmV0dXJuIChFQXR0cmlidXRlKXBsYXRlQ2FycmVlR2xvYmVHcmFwaEdlbmVyYXRvckVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDEpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQ2xhc3MgZ2V0UGFqZWtOZXRHcmFwaEdlbmVyYXRvcigpIHsKKwkJcmV0dXJuIHBhamVrTmV0R3JhcGhHZW5lcmF0b3JFQ2xhc3M7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVBdHRyaWJ1dGUgZ2V0UGFqZWtOZXRHcmFwaEdlbmVyYXRvcl9EYXRhRmlsZV9uZXQoKSB7CisJCXJldHVybiAoRUF0dHJpYnV0ZSlwYWpla05ldEdyYXBoR2VuZXJhdG9yRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVBdHRyaWJ1dGUgZ2V0UGFqZWtOZXRHcmFwaEdlbmVyYXRvcl9BcmVhKCkgeworCQlyZXR1cm4gKEVBdHRyaWJ1dGUpcGFqZWtOZXRHcmFwaEdlbmVyYXRvckVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDEpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQXR0cmlidXRlIGdldFBhamVrTmV0R3JhcGhHZW5lcmF0b3JfQ29udGFpbmVyKCkgeworCQlyZXR1cm4gKEVBdHRyaWJ1dGUpcGFqZWtOZXRHcmFwaEdlbmVyYXRvckVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDIpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQXR0cmlidXRlIGdldFBhamVrTmV0R3JhcGhHZW5lcmF0b3JfU2NhbGluZ0ZhY3RvcigpIHsKKwkJcmV0dXJuIChFQXR0cmlidXRlKXBhamVrTmV0R3JhcGhHZW5lcmF0b3JFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgzKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUF0dHJpYnV0ZSBnZXRQYWpla05ldEdyYXBoR2VuZXJhdG9yX0ZpdCgpIHsKKwkJcmV0dXJuIChFQXR0cmlidXRlKXBhamVrTmV0R3JhcGhHZW5lcmF0b3JFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCg0KTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUF0dHJpYnV0ZSBnZXRQYWpla05ldEdyYXBoR2VuZXJhdG9yX0VuZm9yY2VDb250YWlubWVudCgpIHsKKwkJcmV0dXJuIChFQXR0cmlidXRlKXBhamVrTmV0R3JhcGhHZW5lcmF0b3JFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCg1KTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgR3JhcGhnZW5lcmF0b3JzRmFjdG9yeSBnZXRHcmFwaGdlbmVyYXRvcnNGYWN0b3J5KCkgeworCQlyZXR1cm4gKEdyYXBoZ2VuZXJhdG9yc0ZhY3RvcnkpZ2V0RUZhY3RvcnlJbnN0YW5jZSgpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByaXZhdGUgYm9vbGVhbiBpc0NyZWF0ZWQgPSBmYWxzZTsKKworCS8qKgorCSAqIENyZWF0ZXMgdGhlIG1ldGEtbW9kZWwgb2JqZWN0cyBmb3IgdGhlIHBhY2thZ2UuICBUaGlzIG1ldGhvZCBpcworCSAqIGd1YXJkZWQgdG8gaGF2ZSBubyBhZmZlY3Qgb24gYW55IGludm9jYXRpb24gYnV0IGl0cyBmaXJzdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBjcmVhdGVQYWNrYWdlQ29udGVudHMoKSB7CisJCWlmIChpc0NyZWF0ZWQpIHJldHVybjsKKwkJaXNDcmVhdGVkID0gdHJ1ZTsKKworCQkvLyBDcmVhdGUgY2xhc3NlcyBhbmQgdGhlaXIgZmVhdHVyZXMKKwkJZ3JhcGhHZW5lcmF0b3JFQ2xhc3MgPSBjcmVhdGVFQ2xhc3MoR1JBUEhfR0VORVJBVE9SKTsKKworCQlsYXR0aWNlR3JhcGhHZW5lcmF0b3JFQ2xhc3MgPSBjcmVhdGVFQ2xhc3MoTEFUVElDRV9HUkFQSF9HRU5FUkFUT1IpOworCQljcmVhdGVFQXR0cmlidXRlKGxhdHRpY2VHcmFwaEdlbmVyYXRvckVDbGFzcywgTEFUVElDRV9HUkFQSF9HRU5FUkFUT1JfX1VTRV9ORUFSRVNUX05FSUdIQk9SUyk7CisJCWNyZWF0ZUVBdHRyaWJ1dGUobGF0dGljZUdyYXBoR2VuZXJhdG9yRUNsYXNzLCBMQVRUSUNFX0dSQVBIX0dFTkVSQVRPUl9fVVNFX05FWFRfTkVBUkVTVF9ORUlHSEJPUlMpOworCQljcmVhdGVFQXR0cmlidXRlKGxhdHRpY2VHcmFwaEdlbmVyYXRvckVDbGFzcywgTEFUVElDRV9HUkFQSF9HRU5FUkFUT1JfX1BFUklPRElDX0JPVU5EQVJJRVMpOworCisJCXNxdWFyZUxhdHRpY2VHcmFwaEdlbmVyYXRvckVDbGFzcyA9IGNyZWF0ZUVDbGFzcyhTUVVBUkVfTEFUVElDRV9HUkFQSF9HRU5FUkFUT1IpOworCQljcmVhdGVFQXR0cmlidXRlKHNxdWFyZUxhdHRpY2VHcmFwaEdlbmVyYXRvckVDbGFzcywgU1FVQVJFX0xBVFRJQ0VfR1JBUEhfR0VORVJBVE9SX19YU0laRSk7CisJCWNyZWF0ZUVBdHRyaWJ1dGUoc3F1YXJlTGF0dGljZUdyYXBoR2VuZXJhdG9yRUNsYXNzLCBTUVVBUkVfTEFUVElDRV9HUkFQSF9HRU5FUkFUT1JfX1lTSVpFKTsKKwkJY3JlYXRlRUF0dHJpYnV0ZShzcXVhcmVMYXR0aWNlR3JhcGhHZW5lcmF0b3JFQ2xhc3MsIFNRVUFSRV9MQVRUSUNFX0dSQVBIX0dFTkVSQVRPUl9fQVJFQSk7CisKKwkJbWlncmF0aW9uRWRnZUdyYXBoR2VuZXJhdG9yRUNsYXNzID0gY3JlYXRlRUNsYXNzKE1JR1JBVElPTl9FREdFX0dSQVBIX0dFTkVSQVRPUik7CisJCWNyZWF0ZUVBdHRyaWJ1dGUobWlncmF0aW9uRWRnZUdyYXBoR2VuZXJhdG9yRUNsYXNzLCBNSUdSQVRJT05fRURHRV9HUkFQSF9HRU5FUkFUT1JfX0xPQ0FUSU9OKTsKKwkJY3JlYXRlRUF0dHJpYnV0ZShtaWdyYXRpb25FZGdlR3JhcGhHZW5lcmF0b3JFQ2xhc3MsIE1JR1JBVElPTl9FREdFX0dSQVBIX0dFTkVSQVRPUl9fTUlHUkFUSU9OX1JBVEUpOworCQljcmVhdGVFQXR0cmlidXRlKG1pZ3JhdGlvbkVkZ2VHcmFwaEdlbmVyYXRvckVDbGFzcywgTUlHUkFUSU9OX0VER0VfR1JBUEhfR0VORVJBVE9SX19QT1BVTEFUSU9OKTsKKworCQlwbGF0ZUNhcnJlZUdsb2JlR3JhcGhHZW5lcmF0b3JFQ2xhc3MgPSBjcmVhdGVFQ2xhc3MoUExBVEVfQ0FSUkVFX0dMT0JFX0dSQVBIX0dFTkVSQVRPUik7CisJCWNyZWF0ZUVBdHRyaWJ1dGUocGxhdGVDYXJyZWVHbG9iZUdyYXBoR2VuZXJhdG9yRUNsYXNzLCBQTEFURV9DQVJSRUVfR0xPQkVfR1JBUEhfR0VORVJBVE9SX19BTkdVTEFSX1NURVApOworCQljcmVhdGVFQXR0cmlidXRlKHBsYXRlQ2FycmVlR2xvYmVHcmFwaEdlbmVyYXRvckVDbGFzcywgUExBVEVfQ0FSUkVFX0dMT0JFX0dSQVBIX0dFTkVSQVRPUl9fUkFESVVTKTsKKworCQlwYWpla05ldEdyYXBoR2VuZXJhdG9yRUNsYXNzID0gY3JlYXRlRUNsYXNzKFBBSkVLX05FVF9HUkFQSF9HRU5FUkFUT1IpOworCQljcmVhdGVFQXR0cmlidXRlKHBhamVrTmV0R3JhcGhHZW5lcmF0b3JFQ2xhc3MsIFBBSkVLX05FVF9HUkFQSF9HRU5FUkFUT1JfX0RBVEFfRklMRV9ORVQpOworCQljcmVhdGVFQXR0cmlidXRlKHBhamVrTmV0R3JhcGhHZW5lcmF0b3JFQ2xhc3MsIFBBSkVLX05FVF9HUkFQSF9HRU5FUkFUT1JfX0FSRUEpOworCQljcmVhdGVFQXR0cmlidXRlKHBhamVrTmV0R3JhcGhHZW5lcmF0b3JFQ2xhc3MsIFBBSkVLX05FVF9HUkFQSF9HRU5FUkFUT1JfX0NPTlRBSU5FUik7CisJCWNyZWF0ZUVBdHRyaWJ1dGUocGFqZWtOZXRHcmFwaEdlbmVyYXRvckVDbGFzcywgUEFKRUtfTkVUX0dSQVBIX0dFTkVSQVRPUl9fU0NBTElOR19GQUNUT1IpOworCQljcmVhdGVFQXR0cmlidXRlKHBhamVrTmV0R3JhcGhHZW5lcmF0b3JFQ2xhc3MsIFBBSkVLX05FVF9HUkFQSF9HRU5FUkFUT1JfX0ZJVCk7CisJCWNyZWF0ZUVBdHRyaWJ1dGUocGFqZWtOZXRHcmFwaEdlbmVyYXRvckVDbGFzcywgUEFKRUtfTkVUX0dSQVBIX0dFTkVSQVRPUl9fRU5GT1JDRV9DT05UQUlOTUVOVCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJpdmF0ZSBib29sZWFuIGlzSW5pdGlhbGl6ZWQgPSBmYWxzZTsKKworCS8qKgorCSAqIENvbXBsZXRlIHRoZSBpbml0aWFsaXphdGlvbiBvZiB0aGUgcGFja2FnZSBhbmQgaXRzIG1ldGEtbW9kZWwuICBUaGlzCisJICogbWV0aG9kIGlzIGd1YXJkZWQgdG8gaGF2ZSBubyBhZmZlY3Qgb24gYW55IGludm9jYXRpb24gYnV0IGl0cyBmaXJzdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBpbml0aWFsaXplUGFja2FnZUNvbnRlbnRzKCkgeworCQlpZiAoaXNJbml0aWFsaXplZCkgcmV0dXJuOworCQlpc0luaXRpYWxpemVkID0gdHJ1ZTsKKworCQkvLyBJbml0aWFsaXplIHBhY2thZ2UKKwkJc2V0TmFtZShlTkFNRSk7CisJCXNldE5zUHJlZml4KGVOU19QUkVGSVgpOworCQlzZXROc1VSSShlTlNfVVJJKTsKKworCQkvLyBPYnRhaW4gb3RoZXIgZGVwZW5kZW50IHBhY2thZ2VzCisJCUNvbW1vblBhY2thZ2UgdGhlQ29tbW9uUGFja2FnZSA9IChDb21tb25QYWNrYWdlKUVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVQYWNrYWdlKENvbW1vblBhY2thZ2UuZU5TX1VSSSk7CisJCUdyYXBoUGFja2FnZSB0aGVHcmFwaFBhY2thZ2UgPSAoR3JhcGhQYWNrYWdlKUVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVQYWNrYWdlKEdyYXBoUGFja2FnZS5lTlNfVVJJKTsKKwkJRWNvcmVQYWNrYWdlIHRoZUVjb3JlUGFja2FnZSA9IChFY29yZVBhY2thZ2UpRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RVBhY2thZ2UoRWNvcmVQYWNrYWdlLmVOU19VUkkpOworCisJCS8vIENyZWF0ZSB0eXBlIHBhcmFtZXRlcnMKKworCQkvLyBTZXQgYm91bmRzIGZvciB0eXBlIHBhcmFtZXRlcnMKKworCQkvLyBBZGQgc3VwZXJ0eXBlcyB0byBjbGFzc2VzCisJCWdyYXBoR2VuZXJhdG9yRUNsYXNzLmdldEVTdXBlclR5cGVzKCkuYWRkKHRoZUNvbW1vblBhY2thZ2UuZ2V0SWRlbnRpZmlhYmxlKCkpOworCQlsYXR0aWNlR3JhcGhHZW5lcmF0b3JFQ2xhc3MuZ2V0RVN1cGVyVHlwZXMoKS5hZGQodGhpcy5nZXRHcmFwaEdlbmVyYXRvcigpKTsKKwkJc3F1YXJlTGF0dGljZUdyYXBoR2VuZXJhdG9yRUNsYXNzLmdldEVTdXBlclR5cGVzKCkuYWRkKHRoaXMuZ2V0TGF0dGljZUdyYXBoR2VuZXJhdG9yKCkpOworCQltaWdyYXRpb25FZGdlR3JhcGhHZW5lcmF0b3JFQ2xhc3MuZ2V0RVN1cGVyVHlwZXMoKS5hZGQodGhpcy5nZXRHcmFwaEdlbmVyYXRvcigpKTsKKwkJcGxhdGVDYXJyZWVHbG9iZUdyYXBoR2VuZXJhdG9yRUNsYXNzLmdldEVTdXBlclR5cGVzKCkuYWRkKHRoaXMuZ2V0TGF0dGljZUdyYXBoR2VuZXJhdG9yKCkpOworCQlwYWpla05ldEdyYXBoR2VuZXJhdG9yRUNsYXNzLmdldEVTdXBlclR5cGVzKCkuYWRkKHRoaXMuZ2V0R3JhcGhHZW5lcmF0b3IoKSk7CisKKwkJLy8gSW5pdGlhbGl6ZSBjbGFzc2VzIGFuZCBmZWF0dXJlczsgYWRkIG9wZXJhdGlvbnMgYW5kIHBhcmFtZXRlcnMKKwkJaW5pdEVDbGFzcyhncmFwaEdlbmVyYXRvckVDbGFzcywgR3JhcGhHZW5lcmF0b3IuY2xhc3MsICJHcmFwaEdlbmVyYXRvciIsIElTX0FCU1RSQUNULCAhSVNfSU5URVJGQUNFLCBJU19HRU5FUkFURURfSU5TVEFOQ0VfQ0xBU1MpOworCisJCWFkZEVPcGVyYXRpb24oZ3JhcGhHZW5lcmF0b3JFQ2xhc3MsIHRoZUdyYXBoUGFja2FnZS5nZXRHcmFwaCgpLCAiZ2V0R3JhcGgiLCAwLCAxLCBJU19VTklRVUUsIElTX09SREVSRUQpOworCisJCWluaXRFQ2xhc3MobGF0dGljZUdyYXBoR2VuZXJhdG9yRUNsYXNzLCBMYXR0aWNlR3JhcGhHZW5lcmF0b3IuY2xhc3MsICJMYXR0aWNlR3JhcGhHZW5lcmF0b3IiLCBJU19BQlNUUkFDVCwgIUlTX0lOVEVSRkFDRSwgSVNfR0VORVJBVEVEX0lOU1RBTkNFX0NMQVNTKTsKKwkJaW5pdEVBdHRyaWJ1dGUoZ2V0TGF0dGljZUdyYXBoR2VuZXJhdG9yX1VzZU5lYXJlc3ROZWlnaGJvcnMoKSwgdGhlRWNvcmVQYWNrYWdlLmdldEVCb29sZWFuKCksICJ1c2VOZWFyZXN0TmVpZ2hib3JzIiwgInRydWUiLCAwLCAxLCBMYXR0aWNlR3JhcGhHZW5lcmF0b3IuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7CisJCWluaXRFQXR0cmlidXRlKGdldExhdHRpY2VHcmFwaEdlbmVyYXRvcl9Vc2VOZXh0TmVhcmVzdE5laWdoYm9ycygpLCB0aGVFY29yZVBhY2thZ2UuZ2V0RUJvb2xlYW4oKSwgInVzZU5leHROZWFyZXN0TmVpZ2hib3JzIiwgImZhbHNlIiwgMCwgMSwgTGF0dGljZUdyYXBoR2VuZXJhdG9yLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOworCQlpbml0RUF0dHJpYnV0ZShnZXRMYXR0aWNlR3JhcGhHZW5lcmF0b3JfUGVyaW9kaWNCb3VuZGFyaWVzKCksIHRoZUVjb3JlUGFja2FnZS5nZXRFQm9vbGVhbigpLCAicGVyaW9kaWNCb3VuZGFyaWVzIiwgInRydWUiLCAwLCAxLCBMYXR0aWNlR3JhcGhHZW5lcmF0b3IuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7CisKKwkJaW5pdEVDbGFzcyhzcXVhcmVMYXR0aWNlR3JhcGhHZW5lcmF0b3JFQ2xhc3MsIFNxdWFyZUxhdHRpY2VHcmFwaEdlbmVyYXRvci5jbGFzcywgIlNxdWFyZUxhdHRpY2VHcmFwaEdlbmVyYXRvciIsICFJU19BQlNUUkFDVCwgIUlTX0lOVEVSRkFDRSwgSVNfR0VORVJBVEVEX0lOU1RBTkNFX0NMQVNTKTsKKwkJaW5pdEVBdHRyaWJ1dGUoZ2V0U3F1YXJlTGF0dGljZUdyYXBoR2VuZXJhdG9yX1hTaXplKCksIHRoZUVjb3JlUGFja2FnZS5nZXRFSW50KCksICJ4U2l6ZSIsICIxMCIsIDAsIDEsIFNxdWFyZUxhdHRpY2VHcmFwaEdlbmVyYXRvci5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsKKwkJaW5pdEVBdHRyaWJ1dGUoZ2V0U3F1YXJlTGF0dGljZUdyYXBoR2VuZXJhdG9yX1lTaXplKCksIHRoZUVjb3JlUGFja2FnZS5nZXRFSW50KCksICJ5U2l6ZSIsICIxMCIsIDAsIDEsIFNxdWFyZUxhdHRpY2VHcmFwaEdlbmVyYXRvci5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsKKwkJaW5pdEVBdHRyaWJ1dGUoZ2V0U3F1YXJlTGF0dGljZUdyYXBoR2VuZXJhdG9yX0FyZWEoKSwgdGhlRWNvcmVQYWNrYWdlLmdldEVEb3VibGUoKSwgImFyZWEiLCAiMjAyNSIsIDAsIDEsIFNxdWFyZUxhdHRpY2VHcmFwaEdlbmVyYXRvci5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsKKworCQlpbml0RUNsYXNzKG1pZ3JhdGlvbkVkZ2VHcmFwaEdlbmVyYXRvckVDbGFzcywgTWlncmF0aW9uRWRnZUdyYXBoR2VuZXJhdG9yLmNsYXNzLCAiTWlncmF0aW9uRWRnZUdyYXBoR2VuZXJhdG9yIiwgIUlTX0FCU1RSQUNULCAhSVNfSU5URVJGQUNFLCBJU19HRU5FUkFURURfSU5TVEFOQ0VfQ0xBU1MpOworCQlpbml0RUF0dHJpYnV0ZShnZXRNaWdyYXRpb25FZGdlR3JhcGhHZW5lcmF0b3JfTG9jYXRpb24oKSwgdGhlQ29tbW9uUGFja2FnZS5nZXRVUkkoKSwgImxvY2F0aW9uIiwgbnVsbCwgMCwgMSwgTWlncmF0aW9uRWRnZUdyYXBoR2VuZXJhdG9yLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOworCQlpbml0RUF0dHJpYnV0ZShnZXRNaWdyYXRpb25FZGdlR3JhcGhHZW5lcmF0b3JfTWlncmF0aW9uUmF0ZSgpLCB0aGVFY29yZVBhY2thZ2UuZ2V0RURvdWJsZSgpLCAibWlncmF0aW9uUmF0ZSIsICIwLjEiLCAwLCAxLCBNaWdyYXRpb25FZGdlR3JhcGhHZW5lcmF0b3IuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7CisJCWluaXRFQXR0cmlidXRlKGdldE1pZ3JhdGlvbkVkZ2VHcmFwaEdlbmVyYXRvcl9Qb3B1bGF0aW9uKCksIHRoZUVjb3JlUGFja2FnZS5nZXRFU3RyaW5nKCksICJwb3B1bGF0aW9uIiwgImh1bWFuIiwgMCwgMSwgTWlncmF0aW9uRWRnZUdyYXBoR2VuZXJhdG9yLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOworCisJCWluaXRFQ2xhc3MocGxhdGVDYXJyZWVHbG9iZUdyYXBoR2VuZXJhdG9yRUNsYXNzLCBQbGF0ZUNhcnJlZUdsb2JlR3JhcGhHZW5lcmF0b3IuY2xhc3MsICJQbGF0ZUNhcnJlZUdsb2JlR3JhcGhHZW5lcmF0b3IiLCAhSVNfQUJTVFJBQ1QsICFJU19JTlRFUkZBQ0UsIElTX0dFTkVSQVRFRF9JTlNUQU5DRV9DTEFTUyk7CisJCWluaXRFQXR0cmlidXRlKGdldFBsYXRlQ2FycmVlR2xvYmVHcmFwaEdlbmVyYXRvcl9Bbmd1bGFyU3RlcCgpLCB0aGVFY29yZVBhY2thZ2UuZ2V0RUludCgpLCAiYW5ndWxhclN0ZXAiLCAiMTAiLCAwLCAxLCBQbGF0ZUNhcnJlZUdsb2JlR3JhcGhHZW5lcmF0b3IuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7CisJCWluaXRFQXR0cmlidXRlKGdldFBsYXRlQ2FycmVlR2xvYmVHcmFwaEdlbmVyYXRvcl9SYWRpdXMoKSwgdGhlRWNvcmVQYWNrYWdlLmdldEVEb3VibGUoKSwgInJhZGl1cyIsICI2MzcxLjAiLCAxLCAxLCBQbGF0ZUNhcnJlZUdsb2JlR3JhcGhHZW5lcmF0b3IuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7CisKKwkJaW5pdEVDbGFzcyhwYWpla05ldEdyYXBoR2VuZXJhdG9yRUNsYXNzLCBQYWpla05ldEdyYXBoR2VuZXJhdG9yLmNsYXNzLCAiUGFqZWtOZXRHcmFwaEdlbmVyYXRvciIsICFJU19BQlNUUkFDVCwgIUlTX0lOVEVSRkFDRSwgSVNfR0VORVJBVEVEX0lOU1RBTkNFX0NMQVNTKTsKKwkJaW5pdEVBdHRyaWJ1dGUoZ2V0UGFqZWtOZXRHcmFwaEdlbmVyYXRvcl9EYXRhRmlsZV9uZXQoKSwgdGhlRWNvcmVQYWNrYWdlLmdldEVTdHJpbmcoKSwgImRhdGFGaWxlX25ldCIsICIiLCAwLCAxLCBQYWpla05ldEdyYXBoR2VuZXJhdG9yLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOworCQlpbml0RUF0dHJpYnV0ZShnZXRQYWpla05ldEdyYXBoR2VuZXJhdG9yX0FyZWEoKSwgdGhlRWNvcmVQYWNrYWdlLmdldEVEb3VibGUoKSwgImFyZWEiLCAiMTAwIiwgMCwgMSwgUGFqZWtOZXRHcmFwaEdlbmVyYXRvci5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsKKwkJaW5pdEVBdHRyaWJ1dGUoZ2V0UGFqZWtOZXRHcmFwaEdlbmVyYXRvcl9Db250YWluZXIoKSwgdGhlQ29tbW9uUGFja2FnZS5nZXRVUkkoKSwgImNvbnRhaW5lciIsICIiLCAwLCAxLCBQYWpla05ldEdyYXBoR2VuZXJhdG9yLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOworCQlpbml0RUF0dHJpYnV0ZShnZXRQYWpla05ldEdyYXBoR2VuZXJhdG9yX1NjYWxpbmdGYWN0b3IoKSwgdGhlRWNvcmVQYWNrYWdlLmdldEVEb3VibGUoKSwgInNjYWxpbmdGYWN0b3IiLCAiMTAwIiwgMCwgMSwgUGFqZWtOZXRHcmFwaEdlbmVyYXRvci5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsKKwkJaW5pdEVBdHRyaWJ1dGUoZ2V0UGFqZWtOZXRHcmFwaEdlbmVyYXRvcl9GaXQoKSwgdGhlRWNvcmVQYWNrYWdlLmdldEVCb29sZWFuKCksICJmaXQiLCAiIiwgMCwgMSwgUGFqZWtOZXRHcmFwaEdlbmVyYXRvci5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsKKwkJaW5pdEVBdHRyaWJ1dGUoZ2V0UGFqZWtOZXRHcmFwaEdlbmVyYXRvcl9FbmZvcmNlQ29udGFpbm1lbnQoKSwgdGhlRWNvcmVQYWNrYWdlLmdldEVCb29sZWFuKCksICJlbmZvcmNlQ29udGFpbm1lbnQiLCBudWxsLCAwLCAxLCBQYWpla05ldEdyYXBoR2VuZXJhdG9yLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOworCisJCS8vIENyZWF0ZSByZXNvdXJjZQorCQljcmVhdGVSZXNvdXJjZShlTlNfVVJJKTsKKwl9CisKK30gLy9HcmFwaGdlbmVyYXRvcnNQYWNrYWdlSW1wbApkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmdyYXBoZ2VuZXJhdG9ycy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9ncmFwaGdlbmVyYXRvcnMvaW1wbC9MYXR0aWNlR3JhcGhHZW5lcmF0b3JJbXBsLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhnZW5lcmF0b3JzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2dyYXBoZ2VuZXJhdG9ycy9pbXBsL0xhdHRpY2VHcmFwaEdlbmVyYXRvckltcGwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNDcxNThiCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmdyYXBoZ2VuZXJhdG9ycy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9ncmFwaGdlbmVyYXRvcnMvaW1wbC9MYXR0aWNlR3JhcGhHZW5lcmF0b3JJbXBsLmphdmEKQEAgLTAsMCArMSwyNzUgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDksMjAxMCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhnZW5lcmF0b3JzLmltcGw7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzczsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuaW1wbC5FTm90aWZpY2F0aW9uSW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmdyYXBoZ2VuZXJhdG9ycy5HcmFwaGdlbmVyYXRvcnNQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhnZW5lcmF0b3JzLkxhdHRpY2VHcmFwaEdlbmVyYXRvcjsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPkxhdHRpY2UgR3JhcGggR2VuZXJhdG9yPC9iPjwvZW0+Jy4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogPHA+CisgKiBUaGUgZm9sbG93aW5nIGZlYXR1cmVzIGFyZSBpbXBsZW1lbnRlZDoKKyAqIDx1bD4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmdyYXBoZ2VuZXJhdG9ycy5pbXBsLkxhdHRpY2VHcmFwaEdlbmVyYXRvckltcGwjaXNVc2VOZWFyZXN0TmVpZ2hib3JzIDxlbT5Vc2UgTmVhcmVzdCBOZWlnaGJvcnM8L2VtPn08L2xpPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhnZW5lcmF0b3JzLmltcGwuTGF0dGljZUdyYXBoR2VuZXJhdG9ySW1wbCNpc1VzZU5leHROZWFyZXN0TmVpZ2hib3JzIDxlbT5Vc2UgTmV4dCBOZWFyZXN0IE5laWdoYm9yczwvZW0+fTwvbGk+CisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaGdlbmVyYXRvcnMuaW1wbC5MYXR0aWNlR3JhcGhHZW5lcmF0b3JJbXBsI2lzUGVyaW9kaWNCb3VuZGFyaWVzIDxlbT5QZXJpb2RpYyBCb3VuZGFyaWVzPC9lbT59PC9saT4KKyAqIDwvdWw+CisgKiA8L3A+CisgKgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgYWJzdHJhY3QgY2xhc3MgTGF0dGljZUdyYXBoR2VuZXJhdG9ySW1wbCBleHRlbmRzIEdyYXBoR2VuZXJhdG9ySW1wbCBpbXBsZW1lbnRzIExhdHRpY2VHcmFwaEdlbmVyYXRvciB7CisJLyoqCisJICogVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2lzVXNlTmVhcmVzdE5laWdoYm9ycygpIDxlbT5Vc2UgTmVhcmVzdCBOZWlnaGJvcnM8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI2lzVXNlTmVhcmVzdE5laWdoYm9ycygpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBib29sZWFuIFVTRV9ORUFSRVNUX05FSUdIQk9SU19FREVGQVVMVCA9IHRydWU7CisKKwkvKioKKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNpc1VzZU5lYXJlc3ROZWlnaGJvcnMoKSA8ZW0+VXNlIE5lYXJlc3QgTmVpZ2hib3JzPC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNpc1VzZU5lYXJlc3ROZWlnaGJvcnMoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBib29sZWFuIHVzZU5lYXJlc3ROZWlnaGJvcnMgPSBVU0VfTkVBUkVTVF9ORUlHSEJPUlNfRURFRkFVTFQ7CisKKwkvKioKKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjaXNVc2VOZXh0TmVhcmVzdE5laWdoYm9ycygpIDxlbT5Vc2UgTmV4dCBOZWFyZXN0IE5laWdoYm9yczwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjaXNVc2VOZXh0TmVhcmVzdE5laWdoYm9ycygpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBib29sZWFuIFVTRV9ORVhUX05FQVJFU1RfTkVJR0hCT1JTX0VERUZBVUxUID0gZmFsc2U7CisKKwkvKioKKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNpc1VzZU5leHROZWFyZXN0TmVpZ2hib3JzKCkgPGVtPlVzZSBOZXh0IE5lYXJlc3QgTmVpZ2hib3JzPC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNpc1VzZU5leHROZWFyZXN0TmVpZ2hib3JzKCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgYm9vbGVhbiB1c2VOZXh0TmVhcmVzdE5laWdoYm9ycyA9IFVTRV9ORVhUX05FQVJFU1RfTkVJR0hCT1JTX0VERUZBVUxUOworCisJLyoqCisJICogVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2lzUGVyaW9kaWNCb3VuZGFyaWVzKCkgPGVtPlBlcmlvZGljIEJvdW5kYXJpZXM8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI2lzUGVyaW9kaWNCb3VuZGFyaWVzKCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIGJvb2xlYW4gUEVSSU9ESUNfQk9VTkRBUklFU19FREVGQVVMVCA9IHRydWU7CisKKwkvKioKKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNpc1BlcmlvZGljQm91bmRhcmllcygpIDxlbT5QZXJpb2RpYyBCb3VuZGFyaWVzPC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNpc1BlcmlvZGljQm91bmRhcmllcygpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIGJvb2xlYW4gcGVyaW9kaWNCb3VuZGFyaWVzID0gUEVSSU9ESUNfQk9VTkRBUklFU19FREVGQVVMVDsKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBMYXR0aWNlR3JhcGhHZW5lcmF0b3JJbXBsKCkgeworCQlzdXBlcigpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCBFQ2xhc3MgZVN0YXRpY0NsYXNzKCkgeworCQlyZXR1cm4gR3JhcGhnZW5lcmF0b3JzUGFja2FnZS5MaXRlcmFscy5MQVRUSUNFX0dSQVBIX0dFTkVSQVRPUjsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgYm9vbGVhbiBpc1VzZU5lYXJlc3ROZWlnaGJvcnMoKSB7CisJCXJldHVybiB1c2VOZWFyZXN0TmVpZ2hib3JzOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIHNldFVzZU5lYXJlc3ROZWlnaGJvcnMoYm9vbGVhbiBuZXdVc2VOZWFyZXN0TmVpZ2hib3JzKSB7CisJCWJvb2xlYW4gb2xkVXNlTmVhcmVzdE5laWdoYm9ycyA9IHVzZU5lYXJlc3ROZWlnaGJvcnM7CisJCXVzZU5lYXJlc3ROZWlnaGJvcnMgPSBuZXdVc2VOZWFyZXN0TmVpZ2hib3JzOworCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpCisJCQllTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBHcmFwaGdlbmVyYXRvcnNQYWNrYWdlLkxBVFRJQ0VfR1JBUEhfR0VORVJBVE9SX19VU0VfTkVBUkVTVF9ORUlHSEJPUlMsIG9sZFVzZU5lYXJlc3ROZWlnaGJvcnMsIHVzZU5lYXJlc3ROZWlnaGJvcnMpKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgYm9vbGVhbiBpc1VzZU5leHROZWFyZXN0TmVpZ2hib3JzKCkgeworCQlyZXR1cm4gdXNlTmV4dE5lYXJlc3ROZWlnaGJvcnM7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgc2V0VXNlTmV4dE5lYXJlc3ROZWlnaGJvcnMoYm9vbGVhbiBuZXdVc2VOZXh0TmVhcmVzdE5laWdoYm9ycykgeworCQlib29sZWFuIG9sZFVzZU5leHROZWFyZXN0TmVpZ2hib3JzID0gdXNlTmV4dE5lYXJlc3ROZWlnaGJvcnM7CisJCXVzZU5leHROZWFyZXN0TmVpZ2hib3JzID0gbmV3VXNlTmV4dE5lYXJlc3ROZWlnaGJvcnM7CisJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkKKwkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIEdyYXBoZ2VuZXJhdG9yc1BhY2thZ2UuTEFUVElDRV9HUkFQSF9HRU5FUkFUT1JfX1VTRV9ORVhUX05FQVJFU1RfTkVJR0hCT1JTLCBvbGRVc2VOZXh0TmVhcmVzdE5laWdoYm9ycywgdXNlTmV4dE5lYXJlc3ROZWlnaGJvcnMpKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgYm9vbGVhbiBpc1BlcmlvZGljQm91bmRhcmllcygpIHsKKwkJcmV0dXJuIHBlcmlvZGljQm91bmRhcmllczsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRQZXJpb2RpY0JvdW5kYXJpZXMoYm9vbGVhbiBuZXdQZXJpb2RpY0JvdW5kYXJpZXMpIHsKKwkJYm9vbGVhbiBvbGRQZXJpb2RpY0JvdW5kYXJpZXMgPSBwZXJpb2RpY0JvdW5kYXJpZXM7CisJCXBlcmlvZGljQm91bmRhcmllcyA9IG5ld1BlcmlvZGljQm91bmRhcmllczsKKwkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQorCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgR3JhcGhnZW5lcmF0b3JzUGFja2FnZS5MQVRUSUNFX0dSQVBIX0dFTkVSQVRPUl9fUEVSSU9ESUNfQk9VTkRBUklFUywgb2xkUGVyaW9kaWNCb3VuZGFyaWVzLCBwZXJpb2RpY0JvdW5kYXJpZXMpKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgT2JqZWN0IGVHZXQoaW50IGZlYXR1cmVJRCwgYm9vbGVhbiByZXNvbHZlLCBib29sZWFuIGNvcmVUeXBlKSB7CisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7CisJCQljYXNlIEdyYXBoZ2VuZXJhdG9yc1BhY2thZ2UuTEFUVElDRV9HUkFQSF9HRU5FUkFUT1JfX1VTRV9ORUFSRVNUX05FSUdIQk9SUzoKKwkJCQlyZXR1cm4gaXNVc2VOZWFyZXN0TmVpZ2hib3JzKCk7CisJCQljYXNlIEdyYXBoZ2VuZXJhdG9yc1BhY2thZ2UuTEFUVElDRV9HUkFQSF9HRU5FUkFUT1JfX1VTRV9ORVhUX05FQVJFU1RfTkVJR0hCT1JTOgorCQkJCXJldHVybiBpc1VzZU5leHROZWFyZXN0TmVpZ2hib3JzKCk7CisJCQljYXNlIEdyYXBoZ2VuZXJhdG9yc1BhY2thZ2UuTEFUVElDRV9HUkFQSF9HRU5FUkFUT1JfX1BFUklPRElDX0JPVU5EQVJJRVM6CisJCQkJcmV0dXJuIGlzUGVyaW9kaWNCb3VuZGFyaWVzKCk7CisJCX0KKwkJcmV0dXJuIHN1cGVyLmVHZXQoZmVhdHVyZUlELCByZXNvbHZlLCBjb3JlVHlwZSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgZVNldChpbnQgZmVhdHVyZUlELCBPYmplY3QgbmV3VmFsdWUpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJCWNhc2UgR3JhcGhnZW5lcmF0b3JzUGFja2FnZS5MQVRUSUNFX0dSQVBIX0dFTkVSQVRPUl9fVVNFX05FQVJFU1RfTkVJR0hCT1JTOgorCQkJCXNldFVzZU5lYXJlc3ROZWlnaGJvcnMoKEJvb2xlYW4pbmV3VmFsdWUpOworCQkJCXJldHVybjsKKwkJCWNhc2UgR3JhcGhnZW5lcmF0b3JzUGFja2FnZS5MQVRUSUNFX0dSQVBIX0dFTkVSQVRPUl9fVVNFX05FWFRfTkVBUkVTVF9ORUlHSEJPUlM6CisJCQkJc2V0VXNlTmV4dE5lYXJlc3ROZWlnaGJvcnMoKEJvb2xlYW4pbmV3VmFsdWUpOworCQkJCXJldHVybjsKKwkJCWNhc2UgR3JhcGhnZW5lcmF0b3JzUGFja2FnZS5MQVRUSUNFX0dSQVBIX0dFTkVSQVRPUl9fUEVSSU9ESUNfQk9VTkRBUklFUzoKKwkJCQlzZXRQZXJpb2RpY0JvdW5kYXJpZXMoKEJvb2xlYW4pbmV3VmFsdWUpOworCQkJCXJldHVybjsKKwkJfQorCQlzdXBlci5lU2V0KGZlYXR1cmVJRCwgbmV3VmFsdWUpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGVVbnNldChpbnQgZmVhdHVyZUlEKSB7CisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7CisJCQljYXNlIEdyYXBoZ2VuZXJhdG9yc1BhY2thZ2UuTEFUVElDRV9HUkFQSF9HRU5FUkFUT1JfX1VTRV9ORUFSRVNUX05FSUdIQk9SUzoKKwkJCQlzZXRVc2VOZWFyZXN0TmVpZ2hib3JzKFVTRV9ORUFSRVNUX05FSUdIQk9SU19FREVGQVVMVCk7CisJCQkJcmV0dXJuOworCQkJY2FzZSBHcmFwaGdlbmVyYXRvcnNQYWNrYWdlLkxBVFRJQ0VfR1JBUEhfR0VORVJBVE9SX19VU0VfTkVYVF9ORUFSRVNUX05FSUdIQk9SUzoKKwkJCQlzZXRVc2VOZXh0TmVhcmVzdE5laWdoYm9ycyhVU0VfTkVYVF9ORUFSRVNUX05FSUdIQk9SU19FREVGQVVMVCk7CisJCQkJcmV0dXJuOworCQkJY2FzZSBHcmFwaGdlbmVyYXRvcnNQYWNrYWdlLkxBVFRJQ0VfR1JBUEhfR0VORVJBVE9SX19QRVJJT0RJQ19CT1VOREFSSUVTOgorCQkJCXNldFBlcmlvZGljQm91bmRhcmllcyhQRVJJT0RJQ19CT1VOREFSSUVTX0VERUZBVUxUKTsKKwkJCQlyZXR1cm47CisJCX0KKwkJc3VwZXIuZVVuc2V0KGZlYXR1cmVJRCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIGJvb2xlYW4gZUlzU2V0KGludCBmZWF0dXJlSUQpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJCWNhc2UgR3JhcGhnZW5lcmF0b3JzUGFja2FnZS5MQVRUSUNFX0dSQVBIX0dFTkVSQVRPUl9fVVNFX05FQVJFU1RfTkVJR0hCT1JTOgorCQkJCXJldHVybiB1c2VOZWFyZXN0TmVpZ2hib3JzICE9IFVTRV9ORUFSRVNUX05FSUdIQk9SU19FREVGQVVMVDsKKwkJCWNhc2UgR3JhcGhnZW5lcmF0b3JzUGFja2FnZS5MQVRUSUNFX0dSQVBIX0dFTkVSQVRPUl9fVVNFX05FWFRfTkVBUkVTVF9ORUlHSEJPUlM6CisJCQkJcmV0dXJuIHVzZU5leHROZWFyZXN0TmVpZ2hib3JzICE9IFVTRV9ORVhUX05FQVJFU1RfTkVJR0hCT1JTX0VERUZBVUxUOworCQkJY2FzZSBHcmFwaGdlbmVyYXRvcnNQYWNrYWdlLkxBVFRJQ0VfR1JBUEhfR0VORVJBVE9SX19QRVJJT0RJQ19CT1VOREFSSUVTOgorCQkJCXJldHVybiBwZXJpb2RpY0JvdW5kYXJpZXMgIT0gUEVSSU9ESUNfQk9VTkRBUklFU19FREVGQVVMVDsKKwkJfQorCQlyZXR1cm4gc3VwZXIuZUlzU2V0KGZlYXR1cmVJRCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIFN0cmluZyB0b1N0cmluZygpIHsKKwkJaWYgKGVJc1Byb3h5KCkpIHJldHVybiBzdXBlci50b1N0cmluZygpOworCisJCVN0cmluZ0J1ZmZlciByZXN1bHQgPSBuZXcgU3RyaW5nQnVmZmVyKHN1cGVyLnRvU3RyaW5nKCkpOworCQlyZXN1bHQuYXBwZW5kKCIgKHVzZU5lYXJlc3ROZWlnaGJvcnM6ICIpOworCQlyZXN1bHQuYXBwZW5kKHVzZU5lYXJlc3ROZWlnaGJvcnMpOworCQlyZXN1bHQuYXBwZW5kKCIsIHVzZU5leHROZWFyZXN0TmVpZ2hib3JzOiAiKTsKKwkJcmVzdWx0LmFwcGVuZCh1c2VOZXh0TmVhcmVzdE5laWdoYm9ycyk7CisJCXJlc3VsdC5hcHBlbmQoIiwgcGVyaW9kaWNCb3VuZGFyaWVzOiAiKTsKKwkJcmVzdWx0LmFwcGVuZChwZXJpb2RpY0JvdW5kYXJpZXMpOworCQlyZXN1bHQuYXBwZW5kKCcpJyk7CisJCXJldHVybiByZXN1bHQudG9TdHJpbmcoKTsKKwl9CisKK30gLy9MYXR0aWNlR3JhcGhHZW5lcmF0b3JJbXBsCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhnZW5lcmF0b3JzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2dyYXBoZ2VuZXJhdG9ycy9pbXBsL01pZ3JhdGlvbkVkZ2VHcmFwaEdlbmVyYXRvckltcGwuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaGdlbmVyYXRvcnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZ3JhcGhnZW5lcmF0b3JzL2ltcGwvTWlncmF0aW9uRWRnZUdyYXBoR2VuZXJhdG9ySW1wbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRjMmIwNWIKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhnZW5lcmF0b3JzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2dyYXBoZ2VuZXJhdG9ycy9pbXBsL01pZ3JhdGlvbkVkZ2VHcmFwaEdlbmVyYXRvckltcGwuamF2YQpAQCAtMCwwICsxLDQ0NiBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOSwyMDEwIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaGdlbmVyYXRvcnMuaW1wbDsKKworaW1wb3J0IGphdmEudGV4dC5TaW1wbGVEYXRlRm9ybWF0OworaW1wb3J0IGphdmEudXRpbC5DYWxlbmRhcjsKK2ltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7CitpbXBvcnQgamF2YS51dGlsLlNldDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuVVJJOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLmltcGwuRU5vdGlmaWNhdGlvbkltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLlNURU1VUkk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLlV0aWxpdHk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5EdWJsaW5Db3JlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5FZGdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5HcmFwaDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguR3JhcGhGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuTG9jYXRpb25VdGlsaXR5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuZWRnZXMuRWRnZXNGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuZWRnZXMuTWlncmF0aW9uRWRnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmVkZ2VzLk1pZ3JhdGlvbkVkZ2VMYWJlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmVkZ2VzLk1pZ3JhdGlvbkVkZ2VMYWJlbFZhbHVlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuZWRnZXMuaW1wbC5FZGdlc0ZhY3RvcnlJbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhnZW5lcmF0b3JzLkdyYXBoZ2VuZXJhdG9yc1BhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaGdlbmVyYXRvcnMuTWlncmF0aW9uRWRnZUdyYXBoR2VuZXJhdG9yOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiBBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+TWlncmF0aW9uIEVkZ2UgR3JhcGggR2VuZXJhdG9yPC9iPjwvZW0+Jy4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogPHA+CisgKiBUaGUgZm9sbG93aW5nIGZlYXR1cmVzIGFyZSBpbXBsZW1lbnRlZDoKKyAqIDx1bD4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmdyYXBoZ2VuZXJhdG9ycy5pbXBsLk1pZ3JhdGlvbkVkZ2VHcmFwaEdlbmVyYXRvckltcGwjZ2V0TG9jYXRpb24gPGVtPkxvY2F0aW9uPC9lbT59PC9saT4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmdyYXBoZ2VuZXJhdG9ycy5pbXBsLk1pZ3JhdGlvbkVkZ2VHcmFwaEdlbmVyYXRvckltcGwjZ2V0TWlncmF0aW9uUmF0ZSA8ZW0+TWlncmF0aW9uIFJhdGU8L2VtPn08L2xpPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhnZW5lcmF0b3JzLmltcGwuTWlncmF0aW9uRWRnZUdyYXBoR2VuZXJhdG9ySW1wbCNnZXRQb3B1bGF0aW9uIDxlbT5Qb3B1bGF0aW9uPC9lbT59PC9saT4KKyAqIDwvdWw+CisgKiA8L3A+CisgKgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgTWlncmF0aW9uRWRnZUdyYXBoR2VuZXJhdG9ySW1wbCBleHRlbmRzIEdyYXBoR2VuZXJhdG9ySW1wbCBpbXBsZW1lbnRzIE1pZ3JhdGlvbkVkZ2VHcmFwaEdlbmVyYXRvciB7CisJLyoqCisJICogVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldExvY2F0aW9uKCkgPGVtPkxvY2F0aW9uPC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNnZXRMb2NhdGlvbigpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBVUkkgTE9DQVRJT05fRURFRkFVTFQgPSBudWxsOworCisJLyoqCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0TG9jYXRpb24oKSA8ZW0+TG9jYXRpb248L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI2dldExvY2F0aW9uKCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgVVJJIGxvY2F0aW9uID0gTE9DQVRJT05fRURFRkFVTFQ7CisKKwkvKioKKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0TWlncmF0aW9uUmF0ZSgpIDxlbT5NaWdyYXRpb24gUmF0ZTwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZ2V0TWlncmF0aW9uUmF0ZSgpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBkb3VibGUgTUlHUkFUSU9OX1JBVEVfRURFRkFVTFQgPSAwLjE7CisKKwkvKioKKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRNaWdyYXRpb25SYXRlKCkgPGVtPk1pZ3JhdGlvbiBSYXRlPC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNnZXRNaWdyYXRpb25SYXRlKCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgZG91YmxlIG1pZ3JhdGlvblJhdGUgPSBNSUdSQVRJT05fUkFURV9FREVGQVVMVDsKKworCS8qKgorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRQb3B1bGF0aW9uKCkgPGVtPlBvcHVsYXRpb248L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI2dldFBvcHVsYXRpb24oKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgU3RyaW5nIFBPUFVMQVRJT05fRURFRkFVTFQgPSAiaHVtYW4iOworCisJLyoqCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0UG9wdWxhdGlvbigpIDxlbT5Qb3B1bGF0aW9uPC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNnZXRQb3B1bGF0aW9uKCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgU3RyaW5nIHBvcHVsYXRpb24gPSBQT1BVTEFUSU9OX0VERUZBVUxUOworCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCXB1YmxpYyBNaWdyYXRpb25FZGdlR3JhcGhHZW5lcmF0b3JJbXBsKCkgeworCQlzdXBlcigpOworCX0KKworCS8qKgorCSAqIEdlbmVyYXRlIG1pZ3JhdGlvbiBlZGdlcyAKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgR3JhcGggZ2V0R3JhcGgoKSB7CisJCWZpbmFsIEdyYXBoIGdyYXBoID0gR3JhcGhGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVHcmFwaCgpOworCQlmaW5hbCBEdWJsaW5Db3JlIGRjID0gZ3JhcGguZ2V0RHVibGluQ29yZSgpOworCQlkYy5wb3B1bGF0ZSgpOworCQlkYy5zZXRUaXRsZShNSUdSQVRJT05fRURHRV9UWVBFKTsKKwkJZGMuc2V0U291cmNlKHRoaXMuZ2V0Q2xhc3MoKS5nZXRTaW1wbGVOYW1lKCkpOworCQlDYWxlbmRhciBjID0gQ2FsZW5kYXIuZ2V0SW5zdGFuY2UoKTsKKyAgICAgICAgU2ltcGxlRGF0ZUZvcm1hdCBmb3JtYXR0ZXIgPSBuZXcgU2ltcGxlRGF0ZUZvcm1hdCgiRSB5eXl5Lk1NLmRkICdhdCcgaGg6bW06c3MgYSB6enoiKTsKKyAgICAgICAgU3RyaW5nIHZhbGlkID0gZm9ybWF0dGVyLmZvcm1hdChjLmdldFRpbWUoKSk7CisgICAgICAgCWRjLnNldFZhbGlkKHZhbGlkKTsKKyAgICAgICAJLy8gVE9ETyBmb3Igbm93LCBqdXN0IGZvciB0ZXN0aW5nCisgICAgICAgCS8vIGdldHMgQUxMIGNvbW1vbiBib3JkZXIgZWRnZXMKKyAgICAgICAJU2V0PEVkZ2U+IGNvbW1vbkJvcmRlckVkZ2VzID0gTG9jYXRpb25VdGlsaXR5LmdldENvbW1vbkJvcmRlckVkZ2VzKHByb2plY3QsIHRoaXMuZ2V0TG9jYXRpb24oKSk7CisJCQorCQlJdGVyYXRvcjxFZGdlPiBpdGVyID0gY29tbW9uQm9yZGVyRWRnZXMuaXRlcmF0b3IoKTsKKwkJd2hpbGUoKGl0ZXIhPW51bGwpJiYoaXRlci5oYXNOZXh0KCkpKXsKKyAgICAgICAJIAkJRWRnZSBlID0gaXRlci5uZXh0KCk7CisJCQkJaW50IHNvdXJjZUxldmVsID0gVXRpbGl0eS5rZXlMZXZlbChlLmdldE5vZGVBVVJJKCkubGFzdFNlZ21lbnQoKSk7CisJCQkJaW50IHRhcmdldExldmVsID0gVXRpbGl0eS5rZXlMZXZlbChlLmdldE5vZGVCVVJJKCkubGFzdFNlZ21lbnQoKSk7CisJCQkJVVJJIHNvdXJjZVVSSSA9IGUuZ2V0Tm9kZUFVUkkoKTsKKwkJCQlVUkkgdGFyZ2V0VVJJID0gZS5nZXROb2RlQlVSSSgpOworCQkJCQorCQkJCUVkZ2VzRmFjdG9yeSBlZiA9IEVkZ2VzRmFjdG9yeUltcGwuaW5pdCgpOworCQkJCU1pZ3JhdGlvbkVkZ2UgbUVkZ2UxID0gZWYuY3JlYXRlTWlncmF0aW9uRWRnZSgpOworCQkJCU1pZ3JhdGlvbkVkZ2UgbUVkZ2UyID0gZWYuY3JlYXRlTWlncmF0aW9uRWRnZSgpOworCQkJCQorCQkJCS8vIFRoZSBVUkkgb2YgdGhlIGVkZ2UgMSAKKwkJCQlVUkkgZWRnZVVSSTEgPSBtRWRnZTEuZ2V0VVJJKCk7CisJCQkJLy8gdGhlIGF1dG9nZW5lcmF0ZWQgZWRnZSB1cmkgaXMgbm90IGNvcnJlY3QuIE5lZWQgdG8gcmVwbGFjZSBpdAorCQkJCVN0cmluZyBzMSA9IGVkZ2VVUkkxLnRvU3RyaW5nKCk7CisJCQkJaW50IGxhc3QgPSBzMS5sYXN0SW5kZXhPZigiLyIpOworCQkJCVN0cmluZyBzRWRnZTEgPSBzMS5zdWJzdHJpbmcoMCxsYXN0KTsKKwkJCQlTdHJpbmcgc0VkZ2UyID0gczEuc3Vic3RyaW5nKGxhc3QsczEubGVuZ3RoKCkpOworCQkJCXMxID0gc0VkZ2UxKyIvcmVsYXRpb25zaGlwL21pZ3JhdGlvbiIrc0VkZ2UyOworCQkJCVVSSSBuZXdVUkkgPSBVUkkuY3JlYXRlVVJJKHMxKTsKKwkJCQltRWRnZTEuc2V0VVJJKG5ld1VSSSk7CisJCQkJCisJCQkJCisJCQkJLy8gVGhlIFVSSSBvZiB0aGUgZWRnZSAyCisJCQkJVVJJIGVkZ2VVUkkyID0gbUVkZ2UyLmdldFVSSSgpOworCQkJCS8vIHRoZSBhdXRvZ2VuZXJhdGVkIGVkZ2UgdXJpIGlzIG5vdCBjb3JyZWN0LiBOZWVkIHRvIHJlcGxhY2UgaXQKKwkJCQlTdHJpbmcgczIgPSBlZGdlVVJJMi50b1N0cmluZygpOworCQkJCWludCBsYXN0MiA9IHMyLmxhc3RJbmRleE9mKCIvIik7CisJCQkJc0VkZ2UxID0gczIuc3Vic3RyaW5nKDAsbGFzdDIpOworCQkJCXNFZGdlMiA9IHMyLnN1YnN0cmluZyhsYXN0LHMyLmxlbmd0aCgpKTsKKwkJCQlzMiA9IHNFZGdlMSsiL3JlbGF0aW9uc2hpcC9taWdyYXRpb24iK3NFZGdlMjsKKwkJCQlVUkkgbmV3VVJJMiA9IFVSSS5jcmVhdGVVUkkoczIpOworCQkJCW1FZGdlMi5zZXRVUkkobmV3VVJJMik7CisJCQkJCisJCQkJLy8gQUREIFRoZSBVUklzIG9mIHRoZSBub2RlcyBjb25uZWN0ZWQgYnkgdGhlc2UgdHdvIGRpcmVjdGVkIGVkZ2VzCisJCQkJLy8gQSA9PiBCCisJCQkJbUVkZ2UxLnNldE5vZGVBVVJJKHNvdXJjZVVSSSk7CisJCQkJbUVkZ2UxLnNldE5vZGVCVVJJKHRhcmdldFVSSSk7CisJCQkJLy8gQiA9PiBBCisJCQkJbUVkZ2UyLnNldE5vZGVCVVJJKHNvdXJjZVVSSSk7CisJCQkJbUVkZ2UyLnNldE5vZGVBVVJJKHRhcmdldFVSSSk7CisJCQkJCQkJCQkJCisJCQkJLy8gbm93IHdlIG5lZWQgdG8gc2V0IHRoZSB1cmkgZm9yIHRoZSBsYWJlbAorCQkJCU1pZ3JhdGlvbkVkZ2VMYWJlbCBsYWJlbDEgPSBtRWRnZTEuZ2V0TGFiZWwoKTsKKwkJCQlNaWdyYXRpb25FZGdlTGFiZWwgbGFiZWwyID0gbUVkZ2UyLmdldExhYmVsKCk7CisJCQkJCisJCQkJLy9TeXN0ZW0ub3V0LnByaW50bG4oIkJFRk9SRTogbUVkZ2VMYWJlbDEgVVJJIHdhcyAiK2xhYmVsMS5nZXRVUkkoKS50b1N0cmluZygpKTsKKwkJCQkvL1N5c3RlbS5vdXQucHJpbnRsbigiQkVGT1JFOiBtRWRnZUxhYmVsMiBVUkkgd2FzICIrbGFiZWwyLmdldFVSSSgpLnRvU3RyaW5nKCkpOworCQkJCQorCQkJCWxhYmVsMS5zZXRVUkkoY3JlYXRlRWRnZUxhYmVsVVJJKHNvdXJjZVVSSSwgdGFyZ2V0VVJJKSk7CisJCQkJbGFiZWwyLnNldFVSSShjcmVhdGVFZGdlTGFiZWxVUkkodGFyZ2V0VVJJLCBzb3VyY2VVUkkpKTsKKwkJCQkKKwkJCQlNaWdyYXRpb25FZGdlTGFiZWxWYWx1ZSBtZWx2MSA9IGxhYmVsMS5nZXRDdXJyZW50VmFsdWUoKTsKKwkJCQltZWx2MS5zZXRNaWdyYXRpb25SYXRlKHRoaXMuZ2V0TWlncmF0aW9uUmF0ZSgpKTsKKwkJCQlNaWdyYXRpb25FZGdlTGFiZWxWYWx1ZSBtZWx2MiA9IGxhYmVsMi5nZXRDdXJyZW50VmFsdWUoKTsKKwkJCQltZWx2Mi5zZXRNaWdyYXRpb25SYXRlKHRoaXMuZ2V0TWlncmF0aW9uUmF0ZSgpKTsKKwkJCQkKKwkJCQlmaW5hbCBEdWJsaW5Db3JlIGRjMSA9IG1FZGdlMS5nZXREdWJsaW5Db3JlKCk7CisJCQkJZGMxLnNldFRpdGxlKGNyZWF0ZUVkZ2VUaXRsZShzb3VyY2VVUkksIHRhcmdldFVSSSkpOworCQkJCQorCQkJCWZpbmFsIER1YmxpbkNvcmUgZGMyID0gbUVkZ2UyLmdldER1YmxpbkNvcmUoKTsKKwkJCQlkYzIuc2V0VGl0bGUoY3JlYXRlRWRnZVRpdGxlKHRhcmdldFVSSSwgc291cmNlVVJJKSk7CisJCQkJCisJCQkJbUVkZ2UxLnNldFBvcHVsYXRpb25JZGVudGlmaWVyKHRoaXMuZ2V0UG9wdWxhdGlvbigpKTsKKwkJCQltRWRnZTIuc2V0UG9wdWxhdGlvbklkZW50aWZpZXIodGhpcy5nZXRQb3B1bGF0aW9uKCkpOworCQkJCQorCQkJCWdyYXBoLnB1dEVkZ2UobUVkZ2UxKTsKKwkJCQlncmFwaC5wdXRFZGdlKG1FZGdlMik7CisJCX0KKworCQlhc3NlcnQgZ3JhcGguc2FuZSgpOworCisJCXJldHVybiBncmFwaDsKKwkJfS8vIGdldEdyYXBoCisJCisJLyoqCisJICogSVByb2plY3QgdG8gY3JlYXRlIGVkZ2VzIGluCisJICovCisJcHJpdmF0ZSBJUHJvamVjdCBwcm9qZWN0OworCXB1YmxpYyBJUHJvamVjdCBnZXRQcm9qZWN0KCkgeworCQlyZXR1cm4gcHJvamVjdDsgCisJfQorCXB1YmxpYyB2b2lkIHNldFByb2plY3QoSVByb2plY3QgcCkgeworCQl0aGlzLnByb2plY3QgPSBwOworCX0KKwkKKwkvKioKKwkgKiAKKwkgKiBAcGFyYW0gdXJpQQorCSAqIEBwYXJhbSB1cmlCCisJICogQHJldHVybgorCSAqLworCXByaXZhdGUgc3RhdGljIFVSSSBjcmVhdGVFZGdlTGFiZWxVUkkoVVJJIHVyaUEsIFVSSSB1cmlCKSB7CisJCQorCQkvL1N5c3RlbS5vdXQucHJpbnRsbigiY3JlYXRlRWRnZUxhYmVsVVJJKCkgOiBpbml0aWFsbHksIHVyaUEgPSAiK3VyaUEudG9TdHJpbmcoKSk7CisJCS8vU3lzdGVtLm91dC5wcmludGxuKCJjcmVhdGVFZGdlTGFiZWxVUkkoKSA6IGluaXRpYWxseSwgdXJpQiA9ICIrdXJpQi50b1N0cmluZygpKTsKKwkJCisJCVN0cmluZyBzQSA9IHVyaUEubGFzdFNlZ21lbnQoKTsKKwkJU3RyaW5nIHNCID0gdXJpQi5sYXN0U2VnbWVudCgpOworCQkKKwkJLy8gVE9ETyBpcyB0aGlzIHN0aWxsIHRydWU/PworCQkvLyBNaWdyYXRpb25FZGdlTGFiZWxJdGVtUHJvdmlkZXIKKwkJLy8gdXNlcyBfIGFzIGEgc3BlY2lhbCBjaGFyYWN0ZXIgdG8gc2VwYXJhdGUgdGhlIHR3byBub2RlcworCQkvLyBzbyB3ZSBuZWVkIHRvIHJlcGxhY2UgaXQuCisJCXNBPXNBLnJlcGxhY2UoJ18nLCcuJyk7CisJCXNCPXNCLnJlcGxhY2UoJ18nLCcuJyk7CisJCVN0cmluZyB1cmlTdHJpbmcgPSBzQSsiXyIrc0I7CisJCQorCQkvL1N5c3RlbS5vdXQucHJpbnRsbigiY3JlYXRlRWRnZUxhYmVsVVJJKCkgOiBGSU5BTExZLCB1cmkgPSAiK3VyaVN0cmluZyk7CisJCQorICAgICAgICBVUkkgdXJpID0gU1RFTVVSSS5jcmVhdGVVUkkodXJpU3RyaW5nKTsKKwkJcmV0dXJuIHVyaTsKKwl9IC8vIGNyZWF0ZVJlZ2lvbk5vZGVVUkkKKwkKKwkvKioKKwkgKiBAcGFyYW0geAorCSAqICAgICAgICAgICAgdGhlIHggb2YgdGhlIG5vZGUgaW4gdGhlIGxhdHRpY2UKKwkgKiBAcGFyYW0geQorCSAqICAgICAgICAgICAgdGhlIHkgb2YgdGhlIG5vZGUgaW4gdGhlIGxhdHRpY2UKKwkgKiBAcmV0dXJuIGEgdGl0bGUgZm9yIGEgbm9kZQorCSAqLworCXB1YmxpYyBzdGF0aWMgU3RyaW5nIGNyZWF0ZUVkZ2VUaXRsZShVUkkgdXJpQSwgVVJJIHVyaUIpIHsKKwkJU3RyaW5nIHNBID0gdXJpQS5sYXN0U2VnbWVudCgpOworCQlTdHJpbmcgc0IgPSB1cmlCLmxhc3RTZWdtZW50KCk7CisJCWZpbmFsIFN0cmluZ0J1aWxkZXIgc2IgPSBuZXcgU3RyaW5nQnVpbGRlcigiTWlncmF0aW9uRWRnZVsoIik7CisJCXNiLmFwcGVuZChzQSk7CisJCXNiLmFwcGVuZCgiKTwtLT4oIik7CisJCXNiLmFwcGVuZChzQik7CisJCXNiLmFwcGVuZCgiKV0iKTsKKwkJCisJCXJldHVybiBzYi50b1N0cmluZygpOworCX0gLy8gY3JlYXRlRWRnZVRpdGxlCisJCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIEVDbGFzcyBlU3RhdGljQ2xhc3MoKSB7CisJCXJldHVybiBHcmFwaGdlbmVyYXRvcnNQYWNrYWdlLkxpdGVyYWxzLk1JR1JBVElPTl9FREdFX0dSQVBIX0dFTkVSQVRPUjsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVVJJIGdldExvY2F0aW9uKCkgeworCQlyZXR1cm4gbG9jYXRpb247CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgc2V0TG9jYXRpb24oVVJJIG5ld0xvY2F0aW9uKSB7CisJCVVSSSBvbGRMb2NhdGlvbiA9IGxvY2F0aW9uOworCQlsb2NhdGlvbiA9IG5ld0xvY2F0aW9uOworCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpCisJCQllTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBHcmFwaGdlbmVyYXRvcnNQYWNrYWdlLk1JR1JBVElPTl9FREdFX0dSQVBIX0dFTkVSQVRPUl9fTE9DQVRJT04sIG9sZExvY2F0aW9uLCBsb2NhdGlvbikpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBkb3VibGUgZ2V0TWlncmF0aW9uUmF0ZSgpIHsKKwkJcmV0dXJuIG1pZ3JhdGlvblJhdGU7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgc2V0TWlncmF0aW9uUmF0ZShkb3VibGUgbmV3TWlncmF0aW9uUmF0ZSkgeworCQlkb3VibGUgb2xkTWlncmF0aW9uUmF0ZSA9IG1pZ3JhdGlvblJhdGU7CisJCW1pZ3JhdGlvblJhdGUgPSBuZXdNaWdyYXRpb25SYXRlOworCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpCisJCQllTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBHcmFwaGdlbmVyYXRvcnNQYWNrYWdlLk1JR1JBVElPTl9FREdFX0dSQVBIX0dFTkVSQVRPUl9fTUlHUkFUSU9OX1JBVEUsIG9sZE1pZ3JhdGlvblJhdGUsIG1pZ3JhdGlvblJhdGUpKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgU3RyaW5nIGdldFBvcHVsYXRpb24oKSB7CisJCXJldHVybiBwb3B1bGF0aW9uOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIHNldFBvcHVsYXRpb24oU3RyaW5nIG5ld1BvcHVsYXRpb24pIHsKKwkJU3RyaW5nIG9sZFBvcHVsYXRpb24gPSBwb3B1bGF0aW9uOworCQlwb3B1bGF0aW9uID0gbmV3UG9wdWxhdGlvbjsKKwkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQorCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgR3JhcGhnZW5lcmF0b3JzUGFja2FnZS5NSUdSQVRJT05fRURHRV9HUkFQSF9HRU5FUkFUT1JfX1BPUFVMQVRJT04sIG9sZFBvcHVsYXRpb24sIHBvcHVsYXRpb24pKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgT2JqZWN0IGVHZXQoaW50IGZlYXR1cmVJRCwgYm9vbGVhbiByZXNvbHZlLCBib29sZWFuIGNvcmVUeXBlKSB7CisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7CisJCQljYXNlIEdyYXBoZ2VuZXJhdG9yc1BhY2thZ2UuTUlHUkFUSU9OX0VER0VfR1JBUEhfR0VORVJBVE9SX19MT0NBVElPTjoKKwkJCQlyZXR1cm4gZ2V0TG9jYXRpb24oKTsKKwkJCWNhc2UgR3JhcGhnZW5lcmF0b3JzUGFja2FnZS5NSUdSQVRJT05fRURHRV9HUkFQSF9HRU5FUkFUT1JfX01JR1JBVElPTl9SQVRFOgorCQkJCXJldHVybiBnZXRNaWdyYXRpb25SYXRlKCk7CisJCQljYXNlIEdyYXBoZ2VuZXJhdG9yc1BhY2thZ2UuTUlHUkFUSU9OX0VER0VfR1JBUEhfR0VORVJBVE9SX19QT1BVTEFUSU9OOgorCQkJCXJldHVybiBnZXRQb3B1bGF0aW9uKCk7CisJCX0KKwkJcmV0dXJuIHN1cGVyLmVHZXQoZmVhdHVyZUlELCByZXNvbHZlLCBjb3JlVHlwZSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgZVNldChpbnQgZmVhdHVyZUlELCBPYmplY3QgbmV3VmFsdWUpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJCWNhc2UgR3JhcGhnZW5lcmF0b3JzUGFja2FnZS5NSUdSQVRJT05fRURHRV9HUkFQSF9HRU5FUkFUT1JfX0xPQ0FUSU9OOgorCQkJCXNldExvY2F0aW9uKChVUkkpbmV3VmFsdWUpOworCQkJCXJldHVybjsKKwkJCWNhc2UgR3JhcGhnZW5lcmF0b3JzUGFja2FnZS5NSUdSQVRJT05fRURHRV9HUkFQSF9HRU5FUkFUT1JfX01JR1JBVElPTl9SQVRFOgorCQkJCXNldE1pZ3JhdGlvblJhdGUoKERvdWJsZSluZXdWYWx1ZSk7CisJCQkJcmV0dXJuOworCQkJY2FzZSBHcmFwaGdlbmVyYXRvcnNQYWNrYWdlLk1JR1JBVElPTl9FREdFX0dSQVBIX0dFTkVSQVRPUl9fUE9QVUxBVElPTjoKKwkJCQlzZXRQb3B1bGF0aW9uKChTdHJpbmcpbmV3VmFsdWUpOworCQkJCXJldHVybjsKKwkJfQorCQlzdXBlci5lU2V0KGZlYXR1cmVJRCwgbmV3VmFsdWUpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGVVbnNldChpbnQgZmVhdHVyZUlEKSB7CisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7CisJCQljYXNlIEdyYXBoZ2VuZXJhdG9yc1BhY2thZ2UuTUlHUkFUSU9OX0VER0VfR1JBUEhfR0VORVJBVE9SX19MT0NBVElPTjoKKwkJCQlzZXRMb2NhdGlvbihMT0NBVElPTl9FREVGQVVMVCk7CisJCQkJcmV0dXJuOworCQkJY2FzZSBHcmFwaGdlbmVyYXRvcnNQYWNrYWdlLk1JR1JBVElPTl9FREdFX0dSQVBIX0dFTkVSQVRPUl9fTUlHUkFUSU9OX1JBVEU6CisJCQkJc2V0TWlncmF0aW9uUmF0ZShNSUdSQVRJT05fUkFURV9FREVGQVVMVCk7CisJCQkJcmV0dXJuOworCQkJY2FzZSBHcmFwaGdlbmVyYXRvcnNQYWNrYWdlLk1JR1JBVElPTl9FREdFX0dSQVBIX0dFTkVSQVRPUl9fUE9QVUxBVElPTjoKKwkJCQlzZXRQb3B1bGF0aW9uKFBPUFVMQVRJT05fRURFRkFVTFQpOworCQkJCXJldHVybjsKKwkJfQorCQlzdXBlci5lVW5zZXQoZmVhdHVyZUlEKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgYm9vbGVhbiBlSXNTZXQoaW50IGZlYXR1cmVJRCkgeworCQlzd2l0Y2ggKGZlYXR1cmVJRCkgeworCQkJY2FzZSBHcmFwaGdlbmVyYXRvcnNQYWNrYWdlLk1JR1JBVElPTl9FREdFX0dSQVBIX0dFTkVSQVRPUl9fTE9DQVRJT046CisJCQkJcmV0dXJuIExPQ0FUSU9OX0VERUZBVUxUID09IG51bGwgPyBsb2NhdGlvbiAhPSBudWxsIDogIUxPQ0FUSU9OX0VERUZBVUxULmVxdWFscyhsb2NhdGlvbik7CisJCQljYXNlIEdyYXBoZ2VuZXJhdG9yc1BhY2thZ2UuTUlHUkFUSU9OX0VER0VfR1JBUEhfR0VORVJBVE9SX19NSUdSQVRJT05fUkFURToKKwkJCQlyZXR1cm4gbWlncmF0aW9uUmF0ZSAhPSBNSUdSQVRJT05fUkFURV9FREVGQVVMVDsKKwkJCWNhc2UgR3JhcGhnZW5lcmF0b3JzUGFja2FnZS5NSUdSQVRJT05fRURHRV9HUkFQSF9HRU5FUkFUT1JfX1BPUFVMQVRJT046CisJCQkJcmV0dXJuIFBPUFVMQVRJT05fRURFRkFVTFQgPT0gbnVsbCA/IHBvcHVsYXRpb24gIT0gbnVsbCA6ICFQT1BVTEFUSU9OX0VERUZBVUxULmVxdWFscyhwb3B1bGF0aW9uKTsKKwkJfQorCQlyZXR1cm4gc3VwZXIuZUlzU2V0KGZlYXR1cmVJRCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIFN0cmluZyB0b1N0cmluZygpIHsKKwkJaWYgKGVJc1Byb3h5KCkpIHJldHVybiBzdXBlci50b1N0cmluZygpOworCisJCVN0cmluZ0J1ZmZlciByZXN1bHQgPSBuZXcgU3RyaW5nQnVmZmVyKHN1cGVyLnRvU3RyaW5nKCkpOworCQlyZXN1bHQuYXBwZW5kKCIgKGxvY2F0aW9uOiAiKTsKKwkJcmVzdWx0LmFwcGVuZChsb2NhdGlvbik7CisJCXJlc3VsdC5hcHBlbmQoIiwgbWlncmF0aW9uUmF0ZTogIik7CisJCXJlc3VsdC5hcHBlbmQobWlncmF0aW9uUmF0ZSk7CisJCXJlc3VsdC5hcHBlbmQoIiwgcG9wdWxhdGlvbjogIik7CisJCXJlc3VsdC5hcHBlbmQocG9wdWxhdGlvbik7CisJCXJlc3VsdC5hcHBlbmQoJyknKTsKKwkJcmV0dXJuIHJlc3VsdC50b1N0cmluZygpOworCX0KKworfSAvL01pZ3JhdGlvbkVkZ2VHcmFwaEdlbmVyYXRvckltcGwKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaGdlbmVyYXRvcnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZ3JhcGhnZW5lcmF0b3JzL2ltcGwvUGFqZWtOZXRHcmFwaEdlbmVyYXRvckltcGwuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaGdlbmVyYXRvcnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZ3JhcGhnZW5lcmF0b3JzL2ltcGwvUGFqZWtOZXRHcmFwaEdlbmVyYXRvckltcGwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNDNkOTMzCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmdyYXBoZ2VuZXJhdG9ycy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9ncmFwaGdlbmVyYXRvcnMvaW1wbC9QYWpla05ldEdyYXBoR2VuZXJhdG9ySW1wbC5qYXZhCkBAIC0wLDAgKzEsMTg1NSBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmdyYXBoZ2VuZXJhdG9ycy5pbXBsOw0KKw0KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorKiBDb3B5cmlnaHQgKGMpIDIwMTAgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuDQorKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzDQorKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjANCisqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0DQorKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbA0KKyogDQorKiBDb250cmlidXRvcnM6IEFybWluIFdlaXNlciwgTWF0dGhpYXMgRmlsdGVyDQorKiBCdW5kZXNpbnN0aXR1dCBmw7xyIFJpc2lrb2Jld2VydHVuZw0KKyogRkcgNDMgLSBFcGlkZW1pb2xvZ2llIHVuZCBab29ub3Nlbg0KKyogRGllZGVyc2RvcmZlciBXZWcgMSwgMTIyNzcgQmVybGluDQorKg0KKyogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uDQorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCisNCitpbXBvcnQgamF2YS5hd3QuQ29sb3I7DQoraW1wb3J0IGphdmEuYXd0LlBvbHlnb247DQoraW1wb3J0IGphdmEuYXd0LlJlY3RhbmdsZTsNCitpbXBvcnQgamF2YS5pby5GaWxlOw0KK2ltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOw0KK2ltcG9ydCBqYXZhLmlvLlN0cmVhbVRva2VuaXplcjsNCitpbXBvcnQgamF2YS5pby5TdHJpbmdSZWFkZXI7DQoraW1wb3J0IGphdmEudGV4dC5TaW1wbGVEYXRlRm9ybWF0Ow0KK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0Ow0KK2ltcG9ydCBqYXZhLnV0aWwuQ2FsZW5kYXI7DQoraW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOw0KK2ltcG9ydCBqYXZhLnV0aWwuSGFzaFNldDsNCitpbXBvcnQgamF2YS51dGlsLkxpbmtlZEhhc2hNYXA7DQoraW1wb3J0IGphdmEudXRpbC5MaXN0Ow0KK2ltcG9ydCBqYXZhLnV0aWwuTWFwOw0KK2ltcG9ydCBqYXZhLnV0aWwuU2Nhbm5lcjsNCitpbXBvcnQgamF2YS51dGlsLlNldDsNCisNCitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUNvbnRhaW5lcjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3Q7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklSZXNvdXJjZTsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuVVJJOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuaW1wbC5FTm90aWZpY2F0aW9uSW1wbDsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5Db21tb25GYWN0b3J5Ow0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLkNvbW1vblBhY2thZ2U7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5TVEVNVVJJOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuVXRpbGl0eTsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5EdWJsaW5Db3JlOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLklkZW50aWZpYWJsZTsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkVkZ2U7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5HcmFwaDsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkdyYXBoRmFjdG9yeTsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLk5vZGU7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5Ob2RlTGFiZWw7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5pbXBsLkVkZ2VJbXBsOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuTW9kZWw7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuQWN0aXZhdG9yOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmFkYXB0ZXJzLnNwYXRpYWwuZ2VvLklubGluZUxhdExvbmdEYXRhUHJvdmlkZXI7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuYWRhcHRlcnMuc3BhdGlhbC5nZW8uTGF0TG9uZzsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5hZGFwdGVycy5zcGF0aWFsLmdlby5MYXRMb25nLlNlZ21lbnQ7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuYWRhcHRlcnMuc3BhdGlhbC5nZW8uTGF0TG9uZy5TZWdtZW50QnVpbGRlcjsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5hZGFwdGVycy5zcGF0aWFsLmdlby5MYXRMb25nUHJvdmlkZXI7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuYWRhcHRlcnMuc3BhdGlhbC5nZW8uTGF0TG9uZ1Byb3ZpZGVyQWRhcHRlckZhY3Rvcnk7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuZWRnZXMuRWRnZXNGYWN0b3J5Ow0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmVkZ2VzLk1pZ3JhdGlvbkVkZ2U7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuZWRnZXMuTWlncmF0aW9uRWRnZUxhYmVsOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmVkZ2VzLk1pZ3JhdGlvbkVkZ2VMYWJlbFZhbHVlOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmVkZ2VzLmltcGwuRWRnZXNGYWN0b3J5SW1wbDsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuQXJlYUxhYmVsOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5Db21tb25Cb3JkZXJSZWxhdGlvbnNoaXBMYWJlbDsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuTGFiZWxzRmFjdG9yeTsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuUG9wdWxhdGlvbkxhYmVsOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5Qb3B1bGF0aW9uTGFiZWxWYWx1ZTsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuUmVsYXRpdmVQaHlzaWNhbFJlbGF0aW9uc2hpcDsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuUmVsYXRpdmVQaHlzaWNhbFJlbGF0aW9uc2hpcExhYmVsOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5SZWxhdGl2ZVBoeXNpY2FsUmVsYXRpb25zaGlwTGFiZWxWYWx1ZTsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuaW1wbC5Db21tb25Cb3JkZXJSZWxhdGlvbnNoaXBMYWJlbEltcGw7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLmltcGwuUG9wdWxhdGlvbkxhYmVsSW1wbDsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5ub2Rlcy5Ob2Rlc0ZhY3Rvcnk7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubm9kZXMuUmVnaW9uOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmdyYXBoZ2VuZXJhdG9ycy5HcmFwaGdlbmVyYXRvcnNQYWNrYWdlOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmdyYXBoZ2VuZXJhdG9ycy5QYWpla05ldEdyYXBoR2VuZXJhdG9yOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZ3JhcGhpY3MuUG9pbnQ7DQorDQorDQorDQorLyoqDQorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisgKiBBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+UGFqZWsgTmV0IEdyYXBoIEdlbmVyYXRvcjwvYj48L2VtPicuDQorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorICogPHA+DQorICogVGhlIGZvbGxvd2luZyBmZWF0dXJlcyBhcmUgaW1wbGVtZW50ZWQ6DQorICogPHVsPg0KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmdyYXBoZ2VuZXJhdG9ycy5pbXBsLlBhamVrTmV0R3JhcGhHZW5lcmF0b3JJbXBsI2dldERhdGFGaWxlX25ldCA8ZW0+RGF0YSBGaWxlIG5ldDwvZW0+fTwvbGk+DQorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhnZW5lcmF0b3JzLmltcGwuUGFqZWtOZXRHcmFwaEdlbmVyYXRvckltcGwjZ2V0QXJlYSA8ZW0+QXJlYTwvZW0+fTwvbGk+DQorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhnZW5lcmF0b3JzLmltcGwuUGFqZWtOZXRHcmFwaEdlbmVyYXRvckltcGwjZ2V0Q29udGFpbmVyIDxlbT5Db250YWluZXI8L2VtPn08L2xpPg0KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmdyYXBoZ2VuZXJhdG9ycy5pbXBsLlBhamVrTmV0R3JhcGhHZW5lcmF0b3JJbXBsI2dldFNjYWxpbmdGYWN0b3IgPGVtPlNjYWxpbmcgRmFjdG9yPC9lbT59PC9saT4NCisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaGdlbmVyYXRvcnMuaW1wbC5QYWpla05ldEdyYXBoR2VuZXJhdG9ySW1wbCNpc0ZpdCA8ZW0+Rml0PC9lbT59PC9saT4NCisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaGdlbmVyYXRvcnMuaW1wbC5QYWpla05ldEdyYXBoR2VuZXJhdG9ySW1wbCNpc0VuZm9yY2VDb250YWlubWVudCA8ZW0+RW5mb3JjZSBDb250YWlubWVudDwvZW0+fTwvbGk+DQorICogPC91bD4NCisgKiA8L3A+DQorICoNCisgKiBAZ2VuZXJhdGVkDQorICovDQorcHVibGljIGNsYXNzIFBhamVrTmV0R3JhcGhHZW5lcmF0b3JJbXBsIGV4dGVuZHMgR3JhcGhHZW5lcmF0b3JJbXBsIGltcGxlbWVudHMgUGFqZWtOZXRHcmFwaEdlbmVyYXRvciB7DQorCS8qKg0KKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0RGF0YUZpbGVfbmV0KCkgPGVtPkRhdGEgRmlsZSBuZXQ8L2VtPn0nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBzZWUgI2dldERhdGFGaWxlX25ldCgpDQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgU3RyaW5nIERBVEFfRklMRV9ORVRfRURFRkFVTFQgPSAiIjsNCisNCisJLyoqDQorCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldERhdGFGaWxlX25ldCgpIDxlbT5EYXRhIEZpbGUgbmV0PC9lbT59JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAc2VlICNnZXREYXRhRmlsZV9uZXQoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqIEBvcmRlcmVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgU3RyaW5nIGRhdGFGaWxlX25ldCA9IERBVEFfRklMRV9ORVRfRURFRkFVTFQ7DQorDQorCS8qKg0KKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0QXJlYSgpIDxlbT5BcmVhPC9lbT59JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAc2VlICNnZXRBcmVhKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBkb3VibGUgQVJFQV9FREVGQVVMVCA9IDEwMC4wOw0KKw0KKwkvKioNCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0QXJlYSgpIDxlbT5BcmVhPC9lbT59JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAc2VlICNnZXRBcmVhKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJcHJvdGVjdGVkIGRvdWJsZSBhcmVhID0gQVJFQV9FREVGQVVMVDsNCisNCisJLyoqDQorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRDb250YWluZXIoKSA8ZW0+Q29udGFpbmVyPC9lbT59JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAc2VlICNnZXRDb250YWluZXIoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqIEBvcmRlcmVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIFVSSSBDT05UQUlORVJfRURFRkFVTFQgPSAoVVJJKUNvbW1vbkZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZUZyb21TdHJpbmcoQ29tbW9uUGFja2FnZS5lSU5TVEFOQ0UuZ2V0VVJJKCksICIiKTsNCisNCisJLyoqDQorCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldENvbnRhaW5lcigpIDxlbT5Db250YWluZXI8L2VtPn0nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBzZWUgI2dldENvbnRhaW5lcigpDQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCXByb3RlY3RlZCBVUkkgY29udGFpbmVyID0gQ09OVEFJTkVSX0VERUZBVUxUOw0KKw0KKwkvKioNCisJICogVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldFNjYWxpbmdGYWN0b3IoKSA8ZW0+U2NhbGluZyBGYWN0b3I8L2VtPn0nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBzZWUgI2dldFNjYWxpbmdGYWN0b3IoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqIEBvcmRlcmVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIGRvdWJsZSBTQ0FMSU5HX0ZBQ1RPUl9FREVGQVVMVCA9IDEwMC4wOw0KKw0KKwkvKioNCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0U2NhbGluZ0ZhY3RvcigpIDxlbT5TY2FsaW5nIEZhY3RvcjwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHNlZSAjZ2V0U2NhbGluZ0ZhY3RvcigpDQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCXByb3RlY3RlZCBkb3VibGUgc2NhbGluZ0ZhY3RvciA9IFNDQUxJTkdfRkFDVE9SX0VERUZBVUxUOw0KKw0KKwlwcml2YXRlIElQcm9qZWN0IHByb2plY3Q7DQorCXN0YXRpYyBkb3VibGUgUkVTQ0FMRSA9IDEwMDAwMC4wOw0KKwkvKioNCisJICogVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2lzRml0KCkgPGVtPkZpdDwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHNlZSAjaXNGaXQoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqIEBvcmRlcmVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIGJvb2xlYW4gRklUX0VERUZBVUxUID0gZmFsc2U7DQorDQorCS8qKg0KKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNpc0ZpdCgpIDxlbT5GaXQ8L2VtPn0nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBzZWUgI2lzRml0KCkNCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJcHJvdGVjdGVkIGJvb2xlYW4gZml0ID0gRklUX0VERUZBVUxUOw0KKw0KKwkvKioNCisJICogVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2lzRW5mb3JjZUNvbnRhaW5tZW50KCkgPGVtPkVuZm9yY2UgQ29udGFpbm1lbnQ8L2VtPn0nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBzZWUgI2lzRW5mb3JjZUNvbnRhaW5tZW50KCkNCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBib29sZWFuIEVORk9SQ0VfQ09OVEFJTk1FTlRfRURFRkFVTFQgPSBmYWxzZTsNCisNCisJLyoqDQorCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2lzRW5mb3JjZUNvbnRhaW5tZW50KCkgPGVtPkVuZm9yY2UgQ29udGFpbm1lbnQ8L2VtPn0nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBzZWUgI2lzRW5mb3JjZUNvbnRhaW5tZW50KCkNCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJcHJvdGVjdGVkIGJvb2xlYW4gZW5mb3JjZUNvbnRhaW5tZW50ID0gRU5GT1JDRV9DT05UQUlOTUVOVF9FREVGQVVMVDsNCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkIE5PVA0KKwkgKi8NCisJcHVibGljIFBhamVrTmV0R3JhcGhHZW5lcmF0b3JJbXBsKCkgew0KKwkJc3VwZXIoKTsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCUBPdmVycmlkZQ0KKwlwcm90ZWN0ZWQgRUNsYXNzIGVTdGF0aWNDbGFzcygpIHsNCisJCXJldHVybiBHcmFwaGdlbmVyYXRvcnNQYWNrYWdlLkxpdGVyYWxzLlBBSkVLX05FVF9HUkFQSF9HRU5FUkFUT1I7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgU3RyaW5nIGdldERhdGFGaWxlX25ldCgpIHsNCisJCXJldHVybiBkYXRhRmlsZV9uZXQ7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgdm9pZCBzZXREYXRhRmlsZV9uZXQoU3RyaW5nIG5ld0RhdGFGaWxlX25ldCkgew0KKwkJU3RyaW5nIG9sZERhdGFGaWxlX25ldCA9IGRhdGFGaWxlX25ldDsNCisJCWRhdGFGaWxlX25ldCA9IG5ld0RhdGFGaWxlX25ldDsNCisJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkNCisJCQllTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBHcmFwaGdlbmVyYXRvcnNQYWNrYWdlLlBBSkVLX05FVF9HUkFQSF9HRU5FUkFUT1JfX0RBVEFfRklMRV9ORVQsIG9sZERhdGFGaWxlX25ldCwgZGF0YUZpbGVfbmV0KSk7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgZG91YmxlIGdldEFyZWEoKSB7DQorCQlyZXR1cm4gYXJlYTsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyB2b2lkIHNldEFyZWEoZG91YmxlIG5ld0FyZWEpIHsNCisJCWRvdWJsZSBvbGRBcmVhID0gYXJlYTsNCisJCWFyZWEgPSBuZXdBcmVhOw0KKwkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQ0KKwkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIEdyYXBoZ2VuZXJhdG9yc1BhY2thZ2UuUEFKRUtfTkVUX0dSQVBIX0dFTkVSQVRPUl9fQVJFQSwgb2xkQXJlYSwgYXJlYSkpOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIFVSSSBnZXRDb250YWluZXIoKSB7DQorCQlyZXR1cm4gY29udGFpbmVyOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIHZvaWQgc2V0Q29udGFpbmVyKFVSSSBuZXdDb250YWluZXIpIHsNCisJCVVSSSBvbGRDb250YWluZXIgPSBjb250YWluZXI7DQorCQljb250YWluZXIgPSBuZXdDb250YWluZXI7DQorCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpDQorCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgR3JhcGhnZW5lcmF0b3JzUGFja2FnZS5QQUpFS19ORVRfR1JBUEhfR0VORVJBVE9SX19DT05UQUlORVIsIG9sZENvbnRhaW5lciwgY29udGFpbmVyKSk7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgZG91YmxlIGdldFNjYWxpbmdGYWN0b3IoKSB7DQorCQlyZXR1cm4gc2NhbGluZ0ZhY3RvcjsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyB2b2lkIHNldFNjYWxpbmdGYWN0b3IoZG91YmxlIG5ld1NjYWxpbmdGYWN0b3IpIHsNCisJCWRvdWJsZSBvbGRTY2FsaW5nRmFjdG9yID0gc2NhbGluZ0ZhY3RvcjsNCisJCXNjYWxpbmdGYWN0b3IgPSBuZXdTY2FsaW5nRmFjdG9yOw0KKwkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQ0KKwkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIEdyYXBoZ2VuZXJhdG9yc1BhY2thZ2UuUEFKRUtfTkVUX0dSQVBIX0dFTkVSQVRPUl9fU0NBTElOR19GQUNUT1IsIG9sZFNjYWxpbmdGYWN0b3IsIHNjYWxpbmdGYWN0b3IpKTsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBib29sZWFuIGlzRml0KCkgew0KKwkJcmV0dXJuIGZpdDsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyB2b2lkIHNldEZpdChib29sZWFuIG5ld0ZpdCkgew0KKwkJYm9vbGVhbiBvbGRGaXQgPSBmaXQ7DQorCQlmaXQgPSBuZXdGaXQ7DQorCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpDQorCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgR3JhcGhnZW5lcmF0b3JzUGFja2FnZS5QQUpFS19ORVRfR1JBUEhfR0VORVJBVE9SX19GSVQsIG9sZEZpdCwgZml0KSk7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgYm9vbGVhbiBpc0VuZm9yY2VDb250YWlubWVudCgpIHsNCisJCXJldHVybiBlbmZvcmNlQ29udGFpbm1lbnQ7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgdm9pZCBzZXRFbmZvcmNlQ29udGFpbm1lbnQoYm9vbGVhbiBuZXdFbmZvcmNlQ29udGFpbm1lbnQpIHsNCisJCWJvb2xlYW4gb2xkRW5mb3JjZUNvbnRhaW5tZW50ID0gZW5mb3JjZUNvbnRhaW5tZW50Ow0KKwkJZW5mb3JjZUNvbnRhaW5tZW50ID0gbmV3RW5mb3JjZUNvbnRhaW5tZW50Ow0KKwkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQ0KKwkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIEdyYXBoZ2VuZXJhdG9yc1BhY2thZ2UuUEFKRUtfTkVUX0dSQVBIX0dFTkVSQVRPUl9fRU5GT1JDRV9DT05UQUlOTUVOVCwgb2xkRW5mb3JjZUNvbnRhaW5tZW50LCBlbmZvcmNlQ29udGFpbm1lbnQpKTsNCisJfQ0KKw0KKwlwdWJsaWMgSVByb2plY3QgZ2V0UHJvamVjdCgpIHsNCisJCXJldHVybiBwcm9qZWN0OyANCisJfQ0KKw0KKwlwdWJsaWMgdm9pZCBzZXRQcm9qZWN0KElQcm9qZWN0IHApIHsNCisJCXRoaXMucHJvamVjdCA9IHA7DQorCX0NCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlAT3ZlcnJpZGUNCisJcHVibGljIE9iamVjdCBlR2V0KGludCBmZWF0dXJlSUQsIGJvb2xlYW4gcmVzb2x2ZSwgYm9vbGVhbiBjb3JlVHlwZSkgew0KKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsNCisJCQljYXNlIEdyYXBoZ2VuZXJhdG9yc1BhY2thZ2UuUEFKRUtfTkVUX0dSQVBIX0dFTkVSQVRPUl9fREFUQV9GSUxFX05FVDoNCisJCQkJcmV0dXJuIGdldERhdGFGaWxlX25ldCgpOw0KKwkJCWNhc2UgR3JhcGhnZW5lcmF0b3JzUGFja2FnZS5QQUpFS19ORVRfR1JBUEhfR0VORVJBVE9SX19BUkVBOg0KKwkJCQlyZXR1cm4gZ2V0QXJlYSgpOw0KKwkJCWNhc2UgR3JhcGhnZW5lcmF0b3JzUGFja2FnZS5QQUpFS19ORVRfR1JBUEhfR0VORVJBVE9SX19DT05UQUlORVI6DQorCQkJCXJldHVybiBnZXRDb250YWluZXIoKTsNCisJCQljYXNlIEdyYXBoZ2VuZXJhdG9yc1BhY2thZ2UuUEFKRUtfTkVUX0dSQVBIX0dFTkVSQVRPUl9fU0NBTElOR19GQUNUT1I6DQorCQkJCXJldHVybiBnZXRTY2FsaW5nRmFjdG9yKCk7DQorCQkJY2FzZSBHcmFwaGdlbmVyYXRvcnNQYWNrYWdlLlBBSkVLX05FVF9HUkFQSF9HRU5FUkFUT1JfX0ZJVDoNCisJCQkJcmV0dXJuIGlzRml0KCk7DQorCQkJY2FzZSBHcmFwaGdlbmVyYXRvcnNQYWNrYWdlLlBBSkVLX05FVF9HUkFQSF9HRU5FUkFUT1JfX0VORk9SQ0VfQ09OVEFJTk1FTlQ6DQorCQkJCXJldHVybiBpc0VuZm9yY2VDb250YWlubWVudCgpOw0KKwkJfQ0KKwkJcmV0dXJuIHN1cGVyLmVHZXQoZmVhdHVyZUlELCByZXNvbHZlLCBjb3JlVHlwZSk7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlAT3ZlcnJpZGUNCisJcHVibGljIHZvaWQgZVNldChpbnQgZmVhdHVyZUlELCBPYmplY3QgbmV3VmFsdWUpIHsNCisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7DQorCQkJY2FzZSBHcmFwaGdlbmVyYXRvcnNQYWNrYWdlLlBBSkVLX05FVF9HUkFQSF9HRU5FUkFUT1JfX0RBVEFfRklMRV9ORVQ6DQorCQkJCXNldERhdGFGaWxlX25ldCgoU3RyaW5nKW5ld1ZhbHVlKTsNCisJCQkJcmV0dXJuOw0KKwkJCWNhc2UgR3JhcGhnZW5lcmF0b3JzUGFja2FnZS5QQUpFS19ORVRfR1JBUEhfR0VORVJBVE9SX19BUkVBOg0KKwkJCQlzZXRBcmVhKChEb3VibGUpbmV3VmFsdWUpOw0KKwkJCQlyZXR1cm47DQorCQkJY2FzZSBHcmFwaGdlbmVyYXRvcnNQYWNrYWdlLlBBSkVLX05FVF9HUkFQSF9HRU5FUkFUT1JfX0NPTlRBSU5FUjoNCisJCQkJc2V0Q29udGFpbmVyKChVUkkpbmV3VmFsdWUpOw0KKwkJCQlyZXR1cm47DQorCQkJY2FzZSBHcmFwaGdlbmVyYXRvcnNQYWNrYWdlLlBBSkVLX05FVF9HUkFQSF9HRU5FUkFUT1JfX1NDQUxJTkdfRkFDVE9SOg0KKwkJCQlzZXRTY2FsaW5nRmFjdG9yKChEb3VibGUpbmV3VmFsdWUpOw0KKwkJCQlyZXR1cm47DQorCQkJY2FzZSBHcmFwaGdlbmVyYXRvcnNQYWNrYWdlLlBBSkVLX05FVF9HUkFQSF9HRU5FUkFUT1JfX0ZJVDoNCisJCQkJc2V0Rml0KChCb29sZWFuKW5ld1ZhbHVlKTsNCisJCQkJcmV0dXJuOw0KKwkJCWNhc2UgR3JhcGhnZW5lcmF0b3JzUGFja2FnZS5QQUpFS19ORVRfR1JBUEhfR0VORVJBVE9SX19FTkZPUkNFX0NPTlRBSU5NRU5UOg0KKwkJCQlzZXRFbmZvcmNlQ29udGFpbm1lbnQoKEJvb2xlYW4pbmV3VmFsdWUpOw0KKwkJCQlyZXR1cm47DQorCQl9DQorCQlzdXBlci5lU2V0KGZlYXR1cmVJRCwgbmV3VmFsdWUpOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJQE92ZXJyaWRlDQorCXB1YmxpYyB2b2lkIGVVbnNldChpbnQgZmVhdHVyZUlEKSB7DQorCQlzd2l0Y2ggKGZlYXR1cmVJRCkgew0KKwkJCWNhc2UgR3JhcGhnZW5lcmF0b3JzUGFja2FnZS5QQUpFS19ORVRfR1JBUEhfR0VORVJBVE9SX19EQVRBX0ZJTEVfTkVUOg0KKwkJCQlzZXREYXRhRmlsZV9uZXQoREFUQV9GSUxFX05FVF9FREVGQVVMVCk7DQorCQkJCXJldHVybjsNCisJCQljYXNlIEdyYXBoZ2VuZXJhdG9yc1BhY2thZ2UuUEFKRUtfTkVUX0dSQVBIX0dFTkVSQVRPUl9fQVJFQToNCisJCQkJc2V0QXJlYShBUkVBX0VERUZBVUxUKTsNCisJCQkJcmV0dXJuOw0KKwkJCWNhc2UgR3JhcGhnZW5lcmF0b3JzUGFja2FnZS5QQUpFS19ORVRfR1JBUEhfR0VORVJBVE9SX19DT05UQUlORVI6DQorCQkJCXNldENvbnRhaW5lcihDT05UQUlORVJfRURFRkFVTFQpOw0KKwkJCQlyZXR1cm47DQorCQkJY2FzZSBHcmFwaGdlbmVyYXRvcnNQYWNrYWdlLlBBSkVLX05FVF9HUkFQSF9HRU5FUkFUT1JfX1NDQUxJTkdfRkFDVE9SOg0KKwkJCQlzZXRTY2FsaW5nRmFjdG9yKFNDQUxJTkdfRkFDVE9SX0VERUZBVUxUKTsNCisJCQkJcmV0dXJuOw0KKwkJCWNhc2UgR3JhcGhnZW5lcmF0b3JzUGFja2FnZS5QQUpFS19ORVRfR1JBUEhfR0VORVJBVE9SX19GSVQ6DQorCQkJCXNldEZpdChGSVRfRURFRkFVTFQpOw0KKwkJCQlyZXR1cm47DQorCQkJY2FzZSBHcmFwaGdlbmVyYXRvcnNQYWNrYWdlLlBBSkVLX05FVF9HUkFQSF9HRU5FUkFUT1JfX0VORk9SQ0VfQ09OVEFJTk1FTlQ6DQorCQkJCXNldEVuZm9yY2VDb250YWlubWVudChFTkZPUkNFX0NPTlRBSU5NRU5UX0VERUZBVUxUKTsNCisJCQkJcmV0dXJuOw0KKwkJfQ0KKwkJc3VwZXIuZVVuc2V0KGZlYXR1cmVJRCk7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlAT3ZlcnJpZGUNCisJcHVibGljIGJvb2xlYW4gZUlzU2V0KGludCBmZWF0dXJlSUQpIHsNCisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7DQorCQkJY2FzZSBHcmFwaGdlbmVyYXRvcnNQYWNrYWdlLlBBSkVLX05FVF9HUkFQSF9HRU5FUkFUT1JfX0RBVEFfRklMRV9ORVQ6DQorCQkJCXJldHVybiBEQVRBX0ZJTEVfTkVUX0VERUZBVUxUID09IG51bGwgPyBkYXRhRmlsZV9uZXQgIT0gbnVsbCA6ICFEQVRBX0ZJTEVfTkVUX0VERUZBVUxULmVxdWFscyhkYXRhRmlsZV9uZXQpOw0KKwkJCWNhc2UgR3JhcGhnZW5lcmF0b3JzUGFja2FnZS5QQUpFS19ORVRfR1JBUEhfR0VORVJBVE9SX19BUkVBOg0KKwkJCQlyZXR1cm4gYXJlYSAhPSBBUkVBX0VERUZBVUxUOw0KKwkJCWNhc2UgR3JhcGhnZW5lcmF0b3JzUGFja2FnZS5QQUpFS19ORVRfR1JBUEhfR0VORVJBVE9SX19DT05UQUlORVI6DQorCQkJCXJldHVybiBDT05UQUlORVJfRURFRkFVTFQgPT0gbnVsbCA/IGNvbnRhaW5lciAhPSBudWxsIDogIUNPTlRBSU5FUl9FREVGQVVMVC5lcXVhbHMoY29udGFpbmVyKTsNCisJCQljYXNlIEdyYXBoZ2VuZXJhdG9yc1BhY2thZ2UuUEFKRUtfTkVUX0dSQVBIX0dFTkVSQVRPUl9fU0NBTElOR19GQUNUT1I6DQorCQkJCXJldHVybiBzY2FsaW5nRmFjdG9yICE9IFNDQUxJTkdfRkFDVE9SX0VERUZBVUxUOw0KKwkJCWNhc2UgR3JhcGhnZW5lcmF0b3JzUGFja2FnZS5QQUpFS19ORVRfR1JBUEhfR0VORVJBVE9SX19GSVQ6DQorCQkJCXJldHVybiBmaXQgIT0gRklUX0VERUZBVUxUOw0KKwkJCWNhc2UgR3JhcGhnZW5lcmF0b3JzUGFja2FnZS5QQUpFS19ORVRfR1JBUEhfR0VORVJBVE9SX19FTkZPUkNFX0NPTlRBSU5NRU5UOg0KKwkJCQlyZXR1cm4gZW5mb3JjZUNvbnRhaW5tZW50ICE9IEVORk9SQ0VfQ09OVEFJTk1FTlRfRURFRkFVTFQ7DQorCQl9DQorCQlyZXR1cm4gc3VwZXIuZUlzU2V0KGZlYXR1cmVJRCk7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlAT3ZlcnJpZGUNCisJcHVibGljIFN0cmluZyB0b1N0cmluZygpIHsNCisJCWlmIChlSXNQcm94eSgpKSByZXR1cm4gc3VwZXIudG9TdHJpbmcoKTsNCisNCisJCVN0cmluZ0J1ZmZlciByZXN1bHQgPSBuZXcgU3RyaW5nQnVmZmVyKHN1cGVyLnRvU3RyaW5nKCkpOw0KKwkJcmVzdWx0LmFwcGVuZCgiIChkYXRhRmlsZV9uZXQ6ICIpOw0KKwkJcmVzdWx0LmFwcGVuZChkYXRhRmlsZV9uZXQpOw0KKwkJcmVzdWx0LmFwcGVuZCgiLCBhcmVhOiAiKTsNCisJCXJlc3VsdC5hcHBlbmQoYXJlYSk7DQorCQlyZXN1bHQuYXBwZW5kKCIsIGNvbnRhaW5lcjogIik7DQorCQlyZXN1bHQuYXBwZW5kKGNvbnRhaW5lcik7DQorCQlyZXN1bHQuYXBwZW5kKCIsIHNjYWxpbmdGYWN0b3I6ICIpOw0KKwkJcmVzdWx0LmFwcGVuZChzY2FsaW5nRmFjdG9yKTsNCisJCXJlc3VsdC5hcHBlbmQoIiwgZml0OiAiKTsNCisJCXJlc3VsdC5hcHBlbmQoZml0KTsNCisJCXJlc3VsdC5hcHBlbmQoIiwgZW5mb3JjZUNvbnRhaW5tZW50OiAiKTsNCisJCXJlc3VsdC5hcHBlbmQoZW5mb3JjZUNvbnRhaW5tZW50KTsNCisJCXJlc3VsdC5hcHBlbmQoJyknKTsNCisJCXJldHVybiByZXN1bHQudG9TdHJpbmcoKTsNCisJfQ0KKw0KKwkvKioNCisJICogSW1wb3J0IFBhamVrTmV0cyBpbnRvIEdyYXBocw0KKwkgKiBmb3IgUGFqZWsgZm9ybWF0IHNlZTogaHR0cDovL3ZsYWRvLmZtZi51bmktbGouc2kvcHViL25ldHdvcmtzL3BhamVrL2RvYy9wYWpla21hbi5wZGYNCisJICogDQorCSAqIHdlIHVzZSBjb21wYXRpYmxlIGRlZmluaXRpb25zIG9mIHRoZSBwYWplayBmb3JtYXQgb25seSwgd2hpY2ggaXM6DQorCSAqIFZlcnRpY2VzOiB2ZXJ0ZXhOdW1iZXIgbGFiZWwgeCB5IC0gdGhlIGZpcnN0IDQgcGFyYW1ldGVycyBhcmUgbWFuZGF0b3J5DQorCSAqIEFyY3M6IHYxIHYyIHZhbHVlIC0gYWxsIHRocmVlIHBhcmFtZXRlcnMgYXJlIG1hbmRhdG9yeQ0KKwkgKiANCisJICogRGF0YSBGaWxlOiBQYWplayBmaWxlIHRvIGltcG9ydA0KKwkgKiBBcmVhOiBEZWZhdWx0IEFyZWEgb2YgZWFjaCBub2RlIGlmIHVuZGVmaW5lZA0KKwkgKiANCisJICovDQorCQ0KKwlAT3ZlcnJpZGUJCQ0KKwlwdWJsaWMgR3JhcGggZ2V0R3JhcGgoKSB7DQorCQlHcmFwaCBnID0gbnVsbDsNCisgICAgICAgIEZpbGUgZmlsZSA9IG5ldyBGaWxlKGdldERhdGFGaWxlX25ldCgpKTsNCisgICAgICAgIGlmIChmaWxlICE9IG51bGwgJiYgIWZpbGUuaXNEaXJlY3RvcnkoKSAmJiBmaWxlLmV4aXN0cygpKSBnID0gZ2V0R3JhcGgoZmlsZSk7CQ0KKyAgICAgICAgZWxzZSBBY3RpdmF0b3IubG9nRXJyb3IoIlBhamVrIGltcG9ydGluZzogRmlsZSBjYW5ub3QgYmUgZm91bmQiLCBudWxsKTsNCisJCXJldHVybiBnOw0KKwl9DQorDQorCXByaXZhdGUgR3JhcGggZ2V0R3JhcGgoRmlsZSBwYWpla05FVEZpbGVVUkkpIHsNCisgICAgICAgCWZpbmFsIEdyYXBoIGdyYXBoID0gR3JhcGhGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVHcmFwaCgpOw0KKwkJZmluYWwgRHVibGluQ29yZSBkYyA9IGdyYXBoLmdldER1YmxpbkNvcmUoKTsNCisJCWRjLnBvcHVsYXRlKCk7DQorCQlkYy5zZXRUaXRsZSgiUGFqZWsgSW1wb3J0Iik7DQorCQlkYy5zZXRTb3VyY2UodGhpcy5nZXRDbGFzcygpLmdldFNpbXBsZU5hbWUoKSk7DQorCQlDYWxlbmRhciBjID0gQ2FsZW5kYXIuZ2V0SW5zdGFuY2UoKTsNCisgICAgICAgIFNpbXBsZURhdGVGb3JtYXQgZm9ybWF0dGVyID0gbmV3IFNpbXBsZURhdGVGb3JtYXQoIkUgeXl5eS5NTS5kZCAnYXQnIGhoOm1tOnNzIGEgenp6Iik7DQorICAgICAgICBTdHJpbmcgdmFsaWQgPSBmb3JtYXR0ZXIuZm9ybWF0KGMuZ2V0VGltZSgpKTsNCisgICAgICAgCWRjLnNldFZhbGlkKHZhbGlkKTsNCisgICAgICAgCQ0KKyAgICAgICAJTGlzdDxMaW5rZWRIYXNoTWFwPFN0cmluZywgRG91YmxlPj4gdlBvcHVsYXRpb25MaXN0Tm9kZXMgPSBuZXcgQXJyYXlMaXN0PExpbmtlZEhhc2hNYXA8U3RyaW5nLCBEb3VibGU+PigpOw0KKwkJTGlzdDxFZGdlQ29udGFpbmVyPiBlZGdlQ29udGFpbmVyTGlzdCA9IG5ldyBBcnJheUxpc3Q8RWRnZUNvbnRhaW5lcj4oKTsNCisgICAgICAgCQ0KKyAgICAgICAJTm9kZSBub2RlSG9sZGVyW10gPSBuZXcgTm9kZVswXTsNCisNCisJCVNjYW5uZXIgaW5wdXQ7DQorCQl0cnkgew0KKwkJCWlucHV0ID0gbmV3IFNjYW5uZXIocGFqZWtORVRGaWxlVVJJKTsNCisNCisJCQlib29sZWFuIGRvTm9kZXMgPSBmYWxzZSwgZG9FZGdlcyA9IGZhbHNlOw0KKwkJCWludCBudW1Ob2RlcyA9IDA7DQorCQkJU3RyaW5nIG5vZGVOYW1lW10gPSBuZXcgU3RyaW5nWzBdOw0KKwkJCQ0KKwkJCQ0KKwkJCXdoaWxlKGlucHV0Lmhhc05leHQoKSkgew0KKwkJCSAgICBTdHJpbmcgbmV4dExpbmUgPSBpbnB1dC5uZXh0TGluZSgpOw0KKwkJCSAgICBTdHJlYW1Ub2tlbml6ZXIgdG9rID0gbmV3IFN0cmVhbVRva2VuaXplcihuZXcgU3RyaW5nUmVhZGVyKG5leHRMaW5lLnRyaW0oKSkpOw0KKwkJCSAgICB0b2sucGFyc2VOdW1iZXJzKCk7DQorCQkJICAgIHRvay53b3JkQ2hhcnMoJ18nLCdfJyk7IC8vIG90aGVyd2lzZSBzX3NpemUgd291bGRuJ3QgYmUgZGV0ZWN0ZWQNCisJCSAgICAJaW50IHR0eXBlID0gZ2V0TmV4dFRva2VuKHRvayk7DQorCQkgICAgCWlmICh0dHlwZSA9PSBTdHJlYW1Ub2tlbml6ZXIuVFRfV09SRCkgew0KKwkJICAgIAkJLy8gZS5nLiBWZXJ0aWNlcyAgICAgMjYNCisJCSAgICAJCWlmICh0b2suc3ZhbC5lcXVhbHNJZ25vcmVDYXNlKCJ2ZXJ0aWNlcyIpKSB7DQorCQkJCSAgICAJZG9Ob2RlcyA9IHRydWU7DQorCQkJCSAgICAJZG9FZGdlcyA9IGZhbHNlOw0KKwkJCQkgICAgCXR0eXBlID0gZ2V0TmV4dFRva2VuKHRvayk7DQorCQkJCSAgICAJaWYgKHR0eXBlID09IFN0cmVhbVRva2VuaXplci5UVF9OVU1CRVIpIHsNCisJCQkJICAgIAkJbnVtTm9kZXMgPSAoaW50KSB0b2subnZhbDsNCisJCQkJICAgIAkJbm9kZUhvbGRlciA9IG5ldyBOb2RlW251bU5vZGVzXTsNCisJCQkJICAgIAkJbm9kZU5hbWUgPSBuZXcgU3RyaW5nW251bU5vZGVzXTsNCisJCQkJCSAgICAJbnVtTm9kZXMgPSAwOwkJICAgIAkJCQ0KKwkJCQkgICAgCX0NCisJCQkJICAgIAllbHNlIHsNCisJCQkJICAgIAkJQWN0aXZhdG9yLmxvZ0Vycm9yKCJQYWplayBpbXBvcnRpbmcgIiArIHBhamVrTkVURmlsZVVSSS5nZXROYW1lKCkgKyAiOiB2ZXJ0aWNlcyBrZXl3b3JkIHdpdGhvdXQgdmFsaWQgbnVtYmVyIG9mIG5vZGVzLi4uIE5vdCBwcm9jZXNzYWJsZSEiLCBudWxsKTsNCisJCQkJCSAgICAJaW5wdXQuY2xvc2UoKTsNCisJCQkJCSAgICAJcmV0dXJuIG51bGw7DQorCQkJCSAgICAJfQ0KKwkJICAgIAkJfQ0KKwkJICAgIAkJZWxzZSBpZiAodG9rLnN2YWwuZXF1YWxzSWdub3JlQ2FzZSgiYXJjcyIpIHx8IHRvay5zdmFsLmVxdWFsc0lnbm9yZUNhc2UoImFyY3NsaXN0IikgfHwgdG9rLnN2YWwuZXF1YWxzSWdub3JlQ2FzZSgiZWRnZXMiKSkgew0KKwkJCQkgICAgCWRvTm9kZXMgPSBmYWxzZTsNCisJCQkJICAgIAlkb0VkZ2VzID0gdHJ1ZTsNCisJCSAgICAJCX0NCisJCSAgICAJCWVsc2Ugew0KKwkJICAgIAkJCWRvTm9kZXMgPSBmYWxzZTsNCisJCSAgICAJCQlkb0VkZ2VzID0gZmFsc2U7DQorCQkgICAgCQl9DQorCQkJICAgIH0NCisJCQkgICAgZWxzZSBpZiAoZG9Ob2RlcyAmJiB0dHlwZSA9PSBTdHJlYW1Ub2tlbml6ZXIuVFRfTlVNQkVSKSB7IC8vIE5vZGVzID0gVmVydGljZXMNCisJCQkgICAgCS8vIGRlZmF1bHQgdmFsdWVzDQorCQkJICAgIAlkb3VibGUgeCA9IDAsIHkgPSAwLCB6ID0gMDsNCisJCQkgICAgCVN0cmluZyBzaGFwZSA9ICJib3giOw0KKwkJCSAgICAJZG91YmxlIG5vZGVBcmVhID0gMDsNCisJCQkgICAgCUNvbG9yIHNoYXBlQ29sb3IgPSBudWxsOw0KKwkJCSAgICAJTGlua2VkSGFzaE1hcDxTdHJpbmcsIERvdWJsZT4gdlBvcHVsYXRpb24gPSBuZXcgTGlua2VkSGFzaE1hcDxTdHJpbmcsIERvdWJsZT4oKTsNCisNCisJCSAgICAJCVN0cmluZyBwb3B1bGF0aW9uSWRlbnRpZmllciA9ICIiOw0KKwkJCSAgICAJU3RyaW5nIHBhcmFtZXRlcjsNCisJCQkgICAgCQ0KKwkJCSAgICAJLy8gdmVydGV4L25vZGUgbnVtYmVyDQorCQkJICAgIAlpZiAodG9rLm52YWwgIT0gbnVtTm9kZXMrMSkgew0KKwkJCSAgICAJCUFjdGl2YXRvci5sb2dFcnJvcigiUGFqZWsgaW1wb3J0aW5nOiAiICsgcGFqZWtORVRGaWxlVVJJLmdldE5hbWUoKSArICI6IHVzdWFsbHkgc3VjY2Vzc2l2ZSBudW1iZXJpbmcgb2YgdmVydGljZXMvbm9kZXMuLi4gUGxlYXNlIGNoZWNrISBFeGl0aW5nISIsIG51bGwpOw0KKwkJCQkgICAgCWlucHV0LmNsb3NlKCk7DQorCQkJICAgIAkJcmV0dXJuIG51bGw7DQorCQkJICAgIAl9DQorCQkJICAgIAllbHNlIHsNCisJCQkgICAgCQlub2RlTmFtZVtudW1Ob2Rlc10gPSAiIisoaW50KXRvay5udmFsOw0KKwkJCSAgICAJfQ0KKwkJCSAgICAJDQorCQkJICAgIAkvLyBsYWJlbA0KKwkJCSAgICAJdHR5cGUgPSBnZXROZXh0VG9rZW4odG9rKTsgDQorCQkJICAgIAlpZiAodHR5cGUgPT0gU3RyZWFtVG9rZW5pemVyLlRUX1dPUkQgfHwgdHR5cGUgPT0gJyInKSBub2RlTmFtZVtudW1Ob2Rlc10gPSB0b2suc3ZhbDsNCisJCQkgICAgCWVsc2UgaWYgKHR0eXBlID09IFN0cmVhbVRva2VuaXplci5UVF9OVU1CRVIpIHsNCisJCQkgICAgCQlub2RlTmFtZVtudW1Ob2Rlc10gPSAiIisoaW50KXRvay5udmFsOw0KKwkJCSAgICAJfQ0KKwkJCSAgICAJZWxzZSB7DQorCQkJICAgIAkJQWN0aXZhdG9yLmxvZ0Vycm9yKCJQYWplayBpbXBvcnRpbmc6ICIgKyBwYWpla05FVEZpbGVVUkkuZ2V0TmFtZSgpICsgIjogYSBsYWJlbCBmb3IgdGhlIG5vZGUvdmVydGV4IGlzIG9ibGlnYXRvcnkuLi4gRXhpdGluZyEiLCBudWxsKTsNCisJCQkJICAgIAlpbnB1dC5jbG9zZSgpOw0KKwkJCSAgICAJCXJldHVybiBudWxsOw0KKwkJCSAgICAJfQ0KKwkJCSAgICAJDQorCQkJICAgIAkvLyBjb29yZGluYXRlcyBvZiB2ZXJ0ZXgvbm9kZSwgYXQgbGVhc3QgeCBhbmQgeSwgeiBpcyBub3QgdXNlZCBhdCB0aGUgbW9tZW50DQorCQkJICAgIAl0dHlwZSA9IGdldE5leHRUb2tlbih0b2spOw0KKwkJCSAgICAJaWYgKHR0eXBlID09IFN0cmVhbVRva2VuaXplci5UVF9OVU1CRVIpCXsNCisJCQkgICAgCQl4ID0gdG9rLm52YWw7DQorCQkJICAgIAl9DQorCQkJICAgIAkvKg0KKwkJCSAgICAJZWxzZSB7DQorCQkJICAgIAkJQWN0aXZhdG9yLmxvZ0Vycm9yKCJQYWplayBpbXBvcnRpbmc6ICIgKyBwYWpla05FVEZpbGVVUkkuZ2V0TmFtZSgpICsgIjogY29vcmRpbmF0ZXMgZm9yIHRoZSBub2RlL3ZlcnRleCBhcmUgbmVjZXNzYXJ5Li4uIEV4aXRpbmchIiwgbnVsbCk7DQorCQkJICAgIAkJaW5wdXQuY2xvc2UoKTsNCisJCQkgICAgCQlyZXR1cm4gbnVsbDsNCisJCQkgICAgCX0gCSANCisqLyAgCQ0KKwkJCSAgICAJdHR5cGUgPSBnZXROZXh0VG9rZW4odG9rKTsNCisJCQkgICAgCWlmICh0dHlwZSA9PSBTdHJlYW1Ub2tlbml6ZXIuVFRfTlVNQkVSKQl7DQorCQkJICAgIAkJeSA9IHRvay5udmFsOw0KKwkJCSAgICAJfQ0KKw0KKwkJCSAgICAJdHR5cGUgPSBnZXROZXh0VG9rZW4odG9rKTsNCisJCQkgICAgCWlmICh0dHlwZSA9PSBTdHJlYW1Ub2tlbml6ZXIuVFRfTlVNQkVSKQl7DQorCQkJICAgIAkJeiA9IHRvay5udmFsOw0KKwkJCSAgICAJfQ0KKwkJCSAgICAJZWxzZSB7DQorCQkJICAgIAkJdG9rLnB1c2hCYWNrKCk7DQorCQkJICAgIAl9DQorDQorCQkJICAgIAkvLyBzaGFwZQ0KKwkJICAgIAkJdHR5cGUgPSBnZXROZXh0VG9rZW4odG9rKTsNCisJCQkgICAgCWlmICh0dHlwZSA9PSBTdHJlYW1Ub2tlbml6ZXIuVFRfV09SRCkgew0KKwkJCSAgICAJCXBhcmFtZXRlciA9IHRvay5zdmFsLnRvTG93ZXJDYXNlKCk7DQorCQkJICAgIAkJaWYgKHBhcmFtZXRlci5lcXVhbHMoImVsbGlwc2UiKSB8fCBwYXJhbWV0ZXIuZXF1YWxzKCJib3giKSB8fCBwYXJhbWV0ZXIuZXF1YWxzKCJkaWFtb25kIikgfHwgcGFyYW1ldGVyLmVxdWFscygidHJpYW5nbGUiKSB8fCBwYXJhbWV0ZXIuZXF1YWxzKCJjcm9zcyIpIHx8IHBhcmFtZXRlci5lcXVhbHMoImVtcHR5IikpIHsNCisJCQkgICAgCQkJc2hhcGUgPSBwYXJhbWV0ZXI7DQorCQkJICAgIAkJfQ0KKwkJCSAgICAJCWVsc2Ugew0KKwkJCSAgICAJCQl0b2sucHVzaEJhY2soKTsNCisJCQkgICAgCQl9DQorCQkJICAgIAl9DQorDQorCQkJCQkvKiBvdGhlciBpbnRlcmVzdGluZyBwYXJhbWV0ZXJzOg0KKwkJCQkJLSBzX3NpemUgLSBkZWZhdWx0IHNpemUNCisJCQkJCS0gYmMgLSBib3VuZGFyeSBjb2xvciBvZiB2ZXJ0ZXgNCisJCQkJCSovDQorCQkgICAgCQl3aGlsZSh0dHlwZSAhPSBTdHJlYW1Ub2tlbml6ZXIuVFRfRU9GKSB7DQorCQkgICAgCQkJdHR5cGUgPSBnZXROZXh0VG9rZW4odG9rKTsNCisJCSAgICAJCQlpZiAodHR5cGUgPT0gU3RyZWFtVG9rZW5pemVyLlRUX1dPUkQpIHsNCisJCSAgICAJCQkJcGFyYW1ldGVyID0gdG9rLnN2YWwudG9Mb3dlckNhc2UoKTsNCisJCSAgICAJCQkJaWYgKHBhcmFtZXRlci5lcXVhbHMoInNfc2l6ZSIpKSB7DQorCQkgICAgCQkJCQl0dHlwZSA9IGdldE5leHRUb2tlbih0b2spOw0KKwkJICAgIAkJCQkJaWYgKHR0eXBlID09IFN0cmVhbVRva2VuaXplci5UVF9OVU1CRVIpIHsNCisJCSAgICAJCQkJCQlub2RlQXJlYSA9IHRvay5udmFsOw0KKwkJICAgIAkJCQkJfQ0KKwkJICAgIAkJCSAgICAJZWxzZSB7DQorCQkgICAgCQkJICAgIAkJQWN0aXZhdG9yLmxvZ0Vycm9yKCJQYWplayBpbXBvcnRpbmc6ICIgKyBwYWpla05FVEZpbGVVUkkuZ2V0TmFtZSgpICsgIjogc2l6ZSBvZiBub2RlIGhhcyB3cm9uZyBmb3JtYXQuLi4gRXhpdGluZyEiLCBudWxsKTsNCisJCSAgICAJCQkgICAgCQlpbnB1dC5jbG9zZSgpOw0KKwkJICAgIAkJCSAgICAJCXJldHVybiBudWxsOw0KKwkJICAgIAkJCSAgICAJfSANCisJCSAgICAJCQkJfQ0KKwkJICAgIAkJCQllbHNlIGlmIChwYXJhbWV0ZXIuZXF1YWxzKCJiYyIpKSB7DQorCQkgICAgCQkJCQl0dHlwZSA9IGdldE5leHRUb2tlbih0b2spOw0KKwkJICAgIAkJCQkJaWYgKHR0eXBlID09IFN0cmVhbVRva2VuaXplci5UVF9XT1JEKSB7DQorCQkgICAgCQkJCQkJc2hhcGVDb2xvciA9IGdldENvbG9yKHRvay5zdmFsKTsNCisJCSAgICAJCQkJCX0NCisJCSAgICAJCQkgICAgCWVsc2Ugew0KKwkJICAgIAkJCSAgICAJCUFjdGl2YXRvci5sb2dFcnJvcigiUGFqZWsgaW1wb3J0aW5nOiAiICsgcGFqZWtORVRGaWxlVVJJLmdldE5hbWUoKSArICI6IHNoYXBlQ29sb3IgdmFsdWUgaGFzIHdyb25nIGZvcm1hdC4uLiBFeGl0aW5nISIsIG51bGwpOw0KKwkJICAgIAkJCSAgICAJCWlucHV0LmNsb3NlKCk7DQorCQkgICAgCQkJICAgIAkJcmV0dXJuIG51bGw7DQorCQkgICAgCQkJICAgIAl9IA0KKwkJICAgIAkJCQl9DQorCQkgICAgCQkJCWVsc2UgaWYgKHBhcmFtZXRlci5lcXVhbHMoInBvcGNvdW50IikpIHsNCisJCSAgICAJCQkJCXR0eXBlID0gZ2V0TmV4dFRva2VuKHRvayk7DQorCQkgICAgCQkJCQlpZiAodHR5cGUgPT0gU3RyZWFtVG9rZW5pemVyLlRUX05VTUJFUikgew0KKwkJICAgIAkJCQkJCS8vcG9wdWxhdGlvbkNvdW50ID0gdG9rLm52YWw7DQorCQkgICAgCQkJCQkJdlBvcHVsYXRpb24ucHV0KHBvcHVsYXRpb25JZGVudGlmaWVyLCB0b2subnZhbCk7DQorCQkgICAgCQkJCQl9DQorCQkgICAgCQkJICAgIAllbHNlIHsNCisJCSAgICAJCQkgICAgCQlBY3RpdmF0b3IubG9nRXJyb3IoIlBhamVrIGltcG9ydGluZzogIiArIHBhamVrTkVURmlsZVVSSS5nZXROYW1lKCkgKyAiOiBwb3BDb3VudCB2YWx1ZSBoYXMgd3JvbmcgZm9ybWF0Li4uIEV4aXRpbmchIiwgbnVsbCk7DQorCQkgICAgCQkJICAgIAkJaW5wdXQuY2xvc2UoKTsNCisJCSAgICAJCQkgICAgCQlyZXR1cm4gbnVsbDsNCisJCSAgICAJCQkgICAgCX0gDQorCQkgICAgCQkJCX0NCisJCSAgICAJCQkJZWxzZSBpZiAocGFyYW1ldGVyLmVxdWFscygicG9waWQiKSkgew0KKwkJICAgIAkJCQkJdHR5cGUgPSBnZXROZXh0VG9rZW4odG9rKTsNCisJCSAgICAJCQkJCWlmICh0dHlwZSA9PSBTdHJlYW1Ub2tlbml6ZXIuVFRfV09SRCkgew0KKwkJICAgIAkJCQkJCXBvcHVsYXRpb25JZGVudGlmaWVyID0gdG9rLnN2YWw7DQorCQkgICAgCQkJCQl9DQorCQkgICAgCQkJICAgIAllbHNlIHsNCisJCSAgICAJCQkgICAgCQlBY3RpdmF0b3IubG9nRXJyb3IoIlBhamVrIGltcG9ydGluZzogIiArIHBhamVrTkVURmlsZVVSSS5nZXROYW1lKCkgKyAiOiBwb3BDb3VudCB2YWx1ZSBoYXMgd3JvbmcgZm9ybWF0Li4uIEV4aXRpbmchIiwgbnVsbCk7DQorCQkgICAgCQkJICAgIAkJaW5wdXQuY2xvc2UoKTsNCisJCSAgICAJCQkgICAgCQlyZXR1cm4gbnVsbDsNCisJCSAgICAJCQkgICAgCX0gDQorCQkgICAgCQkJCX0NCisJCSAgICAJCQkJZWxzZSB7DQorCQkgICAgCQkJCQl0dHlwZSA9IGdldE5leHRUb2tlbih0b2spOw0KKwkJICAgIAkJCQl9DQorCQkgICAgCQkJfQ0KKwkJICAgIAkJfQ0KKwkJCQkJDQorCQkJICAgIAkvLyBUaGF0cyBpdC4gQXQgdGhlIG1vbWVudCB3ZSBhcmUgbm90IGludGVyZXN0ZWQgaW4gbW9yZSBwYXJhbWV0ZXJzLCBtYXliZSBsYXRlci4uLg0KKwkJCSAgICAJDQorCQkgICAgCQkvLyBzY2FsZSB4LHkseiBieSBzY2FsaW5nIGZhY3RvciANCisJCSAgICAJCXggKj0gdGhpcy5nZXRTY2FsaW5nRmFjdG9yKCk7DQorCQkgICAgCQl5ICo9IHRoaXMuZ2V0U2NhbGluZ0ZhY3RvcigpOw0KKwkJICAgIAkJeiAqPSB0aGlzLmdldFNjYWxpbmdGYWN0b3IoKTsNCisJCSAgICAJCQ0KKwkJICAgIAkJLy8gQ3JlYXRpbmcgbm9kZToNCisNCisJCSAgICAJCWZpbmFsIFJlZ2lvbiByZWdpb25Ob2RlID0gY3JlYXRlUmVnaW9uTm9kZSgiUEFKTkVUOyIgKyBub2RlTmFtZVtudW1Ob2Rlc10gKyAiOyIsIHgsIHksIGdyYXBoKTsNCisJCQkgICAgCWRvdWJsZSBhcmVhID0gKG5vZGVBcmVhID4gMCA/IG5vZGVBcmVhKnRoaXMuZ2V0U2NhbGluZ0ZhY3RvcigpKnRoaXMuZ2V0U2NhbGluZ0ZhY3RvcigpIDogZ2V0QXJlYSgpKTsgCQkJCQ0KKwkJCSAgICAJZmluYWwgQXJlYUxhYmVsIGFyZWFMYWJlbCA9IExhYmVsc0ZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZUFyZWFMYWJlbCgpOw0KKwkJCQkJYXJlYUxhYmVsLmdldEN1cnJlbnRBcmVhVmFsdWUoKS5zZXRBcmVhKGFyZWEpOw0KKwkJCQkJcmVnaW9uTm9kZS5nZXRMYWJlbHMoKS5hZGQoYXJlYUxhYmVsKTsNCisJCQkJCQkJCQkJDQorCQkJCQlmaW5hbCBMYXRMb25nIG5vZGVTZWdtZW50cyA9IGNyZWF0ZU5vZGVQb2x5Z29uKHgseSxhcmVhLHNoYXBlKTsNCisJCQkJCWZpbmFsIFN0cmluZyBzcGF0aWFsVVJJU3RyaW5nID0gSW5saW5lTGF0TG9uZ0RhdGFQcm92aWRlci5jcmVhdGVTcGF0aWFsSW5saW5lVVJJU3RyaW5nKG5vZGVTZWdtZW50cyk7DQorCQkJCQlyZWdpb25Ob2RlLmdldER1YmxpbkNvcmUoKS5zZXRTcGF0aWFsKHNwYXRpYWxVUklTdHJpbmcpOw0KKwkJCQkJDQorCQkJCQlub2RlSG9sZGVyW251bU5vZGVzXSA9IHJlZ2lvbk5vZGU7CQkJCQkJCSAgICAJCQkJCQkJCQkJDQorCQkJICAgIAludW1Ob2RlcysrOw0KKwkJCSAgICAJDQorCQkJICAgIAkvL3ZQb3ANCisJCQkgICAgCXZQb3B1bGF0aW9uTGlzdE5vZGVzLmFkZCh2UG9wdWxhdGlvbik7CQkgICAgCQ0KKwkJCSAgICB9DQorDQorCQkgICAgCS8vRWRnZXMNCisJCQkgICAgZWxzZSBpZiAoZG9FZGdlcyAmJiB0dHlwZSA9PSBTdHJlYW1Ub2tlbml6ZXIuVFRfTlVNQkVSKSB7IC8vIEVkZ2VzID0gQXJjcw0KKwkJCSAgICAJaW50IGEsIGIgPSAwOw0KKwkJCSAgICAJaW50IGJvcmRlckxlbmd0aCA9IDA7DQorDQorCQkgICAgCQlkb3VibGVbXSBtaWdyYXRpb25SYXRlcyA9IG5ldyBkb3VibGVbMl07DQorCQkgICAgCQltaWdyYXRpb25SYXRlc1swXSA9IDA7IG1pZ3JhdGlvblJhdGVzWzFdID0gMDsNCisJCSAgICAJCVN0cmluZyBwb3B1bGF0aW9uSWRlbnRpZmllciA9ICIiOw0KKwkJCSAgICAJTGlua2VkSGFzaE1hcDxTdHJpbmcsIGRvdWJsZVtdPiB2UG9wdWxhdGlvbiA9IG5ldyBMaW5rZWRIYXNoTWFwPFN0cmluZywgZG91YmxlW10+KCk7DQorCQkgICAgCQlDb2xvciBlZGdlQ29sb3IgPSBudWxsOw0KKwkJCSAgICAJDQorCQkJICAgIAkvLyBpbml0aWFsIHZlcnRleCBudW1iZXINCisJCQkgICAgCWEgPSAoaW50KSB0b2subnZhbDsNCisJCQkgICAgCQ0KKwkJCSAgICAJLy8gdGVybWluYWwgdmVydGV4IG51bWJlcg0KKwkJCSAgICAJdHR5cGUgPSBnZXROZXh0VG9rZW4odG9rKTsNCisJCQkgICAgCWlmICh0dHlwZSA9PSBTdHJlYW1Ub2tlbml6ZXIuVFRfTlVNQkVSKQliID0gKGludCkgdG9rLm52YWw7DQorCQkJICAgIAllbHNlIHsNCisJCQkgICAgCQlBY3RpdmF0b3IubG9nRXJyb3IoIlBhamVrIGltcG9ydGluZzogIiArIHBhamVrTkVURmlsZVVSSS5nZXROYW1lKCkgKyAiOiB3cm9uZyBhcmNzIGZvcm1hdC4gQ2Fubm90IGlkZW50aWZ5IHRlcm1pbmFsIG5vZGUgd2l0aCBpbml0aWFsIG5vZGUgIiArIGEgKyAiIC4uLiBFeGl0aW5nISIsIG51bGwpOw0KKwkJCSAgICAJCWlucHV0LmNsb3NlKCk7DQorCQkJICAgIAkJcmV0dXJuIG51bGw7DQorCQkJICAgIAl9DQorCQkJICAgIAkNCisJCQkgICAgCS8vIHZhbHVlIG9mIGFyYyBmcm9tIGEgdG8gYiwgd2UgaW50ZXJwcmV0IGl0IGFzIGJvcmRlckxlbmd0aCwgdXN1YWxseSBpbiBQYWplayBmb3JtYXQgaXQgaXMgdGhpY2tuZXNzIG9mIGFyYw0KKwkJCSAgICAJdHR5cGUgPSBnZXROZXh0VG9rZW4odG9rKTsNCisJCQkgICAgCWlmICh0dHlwZSA9PSBTdHJlYW1Ub2tlbml6ZXIuVFRfTlVNQkVSKQl7DQorCQkJICAgIAkJYm9yZGVyTGVuZ3RoID0gKGludCkgdG9rLm52YWw7DQorCQkJICAgIAl9DQorCQkJICAgIAllbHNlIGlmICh0dHlwZSA9PSBTdHJlYW1Ub2tlbml6ZXIuVFRfRU9GKSB7DQorCQkJICAgIAkJLy8gYm9yZGVyTGVuZ3RoIGlzIG5vdCBkZWZpbmVkIDsgbm8gcHJvYmxlbSBmb3IgTWlncmF0aW9uRWRnZXMNCisJCQkgICAgCX0NCisJCQkgICAgCWVsc2Ugew0KKwkJCSAgICAJCXRvay5wdXNoQmFjaygpOw0KKwkJCSAgICAJCS8qDQorCQkJICAgIAkJQWN0aXZhdG9yLmxvZ0Vycm9yKCJQYWplayBpbXBvcnRpbmc6ICIgKyBwYWpla05FVEZpbGVVUkkuZ2V0TmFtZSgpICsgIjogd3JvbmcgYXJjcyBmb3JtYXQuIENhbm5vdCBpZGVudGlmeSB2YWx1ZSBvZiBhcmMgYmV0d2VlbiBub2RlICIgKyBhICsgIiBhbmQgbm9kZSAiICsgYiArICIgLi4uIEV4aXRpbmchIiwgbnVsbCk7DQorCQkJICAgIAkJaW5wdXQuY2xvc2UoKTsNCisJCQkgICAgCQlyZXR1cm4gbnVsbDsNCisJCQkgICAgCQkqLw0KKwkJCSAgICAJfQkJCSAgICAJDQorCQkJICAgIAlpZiAoYm9yZGVyTGVuZ3RoIDwgMCkgYm9yZGVyTGVuZ3RoICo9IC0xOw0KKw0KKwkJICAgIAkJd2hpbGUodHR5cGUgIT0gU3RyZWFtVG9rZW5pemVyLlRUX0VPRikgew0KKwkJICAgIAkJCXR0eXBlID0gZ2V0TmV4dFRva2VuKHRvayk7DQorCQkgICAgCQkJaWYgKHR0eXBlID09IFN0cmVhbVRva2VuaXplci5UVF9XT1JEKSB7DQorCQkgICAgCQkJCVN0cmluZyBwYXJhbWV0ZXIgPSB0b2suc3ZhbC50b0xvd2VyQ2FzZSgpOw0KKwkJICAgIAkJCQlpZiAocGFyYW1ldGVyLmVxdWFscygiYyIpKSB7DQorCQkgICAgCQkJCQl0dHlwZSA9IGdldE5leHRUb2tlbih0b2spOw0KKwkJICAgIAkJCQkJaWYgKHR0eXBlID09IFN0cmVhbVRva2VuaXplci5UVF9XT1JEKSB7DQorCQkgICAgCQkJCQkJZWRnZUNvbG9yID0gZ2V0Q29sb3IodG9rLnN2YWwpOw0KKwkJICAgIAkJCQkJfQ0KKwkJICAgIAkJCSAgICAJZWxzZSB7DQorCQkgICAgCQkJICAgIAkJQWN0aXZhdG9yLmxvZ0Vycm9yKCJQYWplayBpbXBvcnRpbmc6ICIgKyBwYWpla05FVEZpbGVVUkkuZ2V0TmFtZSgpICsgIjogY29sb3Igb2YgZWRnZSBoYXMgd3JvbmcgZm9ybWF0Li4uIEV4aXRpbmchIiwgbnVsbCk7DQorCQkgICAgCQkJICAgIAkJaW5wdXQuY2xvc2UoKTsNCisJCSAgICAJCQkgICAgCQlyZXR1cm4gbnVsbDsNCisJCSAgICAJCQkgICAgCX0gDQorCQkgICAgCQkJCX0NCisJCSAgICAJCQkJZWxzZSBpZiAocGFyYW1ldGVyLmVxdWFscygicmF0ZWFiIikpIHsNCisJCSAgICAJCQkJCXR0eXBlID0gZ2V0TmV4dFRva2VuKHRvayk7DQorCQkgICAgCQkJCQlpZiAodHR5cGUgPT0gU3RyZWFtVG9rZW5pemVyLlRUX05VTUJFUikgew0KKwkJICAgIAkJCQkJCS8vbWlncmF0aW9uUmF0ZUFCID0gdG9rLm52YWw7DQorCQkgICAgCQkJCQkJbWlncmF0aW9uUmF0ZXNbMF0gPSB0b2subnZhbDsNCisJCSAgICAJCQkJCQl2UG9wdWxhdGlvbi5wdXQocG9wdWxhdGlvbklkZW50aWZpZXIsIG1pZ3JhdGlvblJhdGVzKTsNCisJCSAgICAJCQkJCX0NCisJCSAgICAJCQkgICAgCWVsc2Ugew0KKwkJICAgIAkJCSAgICAJCUFjdGl2YXRvci5sb2dFcnJvcigiUGFqZWsgaW1wb3J0aW5nOiAiICsgcGFqZWtORVRGaWxlVVJJLmdldE5hbWUoKSArICI6IG1pZ3JhdGlvbiByYXRlIEFCIG9mIGVkZ2UgaGFzIHdyb25nIGZvcm1hdC4uLiBFeGl0aW5nISIsIG51bGwpOw0KKwkJICAgIAkJCSAgICAJCWlucHV0LmNsb3NlKCk7DQorCQkgICAgCQkJICAgIAkJcmV0dXJuIG51bGw7DQorCQkgICAgCQkJICAgIAl9IA0KKwkJICAgIAkJCQl9DQorCQkgICAgCQkJCWVsc2UgaWYgKHBhcmFtZXRlci5lcXVhbHMoInJhdGViYSIpKSB7DQorCQkgICAgCQkJCQl0dHlwZSA9IGdldE5leHRUb2tlbih0b2spOw0KKwkJICAgIAkJCQkJaWYgKHR0eXBlID09IFN0cmVhbVRva2VuaXplci5UVF9OVU1CRVIpIHsNCisJCSAgICAJCQkJCQkvL21pZ3JhdGlvblJhdGVCQSA9IHRvay5udmFsOw0KKwkJICAgIAkJCQkJCW1pZ3JhdGlvblJhdGVzWzFdID0gdG9rLm52YWw7DQorCQkgICAgCQkJCQkJdlBvcHVsYXRpb24ucHV0KHBvcHVsYXRpb25JZGVudGlmaWVyLCBtaWdyYXRpb25SYXRlcyk7DQorCQkgICAgCQkJCQl9DQorCQkgICAgCQkJICAgIAllbHNlIHsNCisJCSAgICAJCQkgICAgCQlBY3RpdmF0b3IubG9nRXJyb3IoIlBhamVrIGltcG9ydGluZzogIiArIHBhamVrTkVURmlsZVVSSS5nZXROYW1lKCkgKyAiOiBtaWdyYXRpb24gcmF0ZSBCQSBvZiBlZGdlIGhhcyB3cm9uZyBmb3JtYXQuLi4gRXhpdGluZyEiLCBudWxsKTsNCisJCSAgICAJCQkgICAgCQlpbnB1dC5jbG9zZSgpOw0KKwkJICAgIAkJCSAgICAJCXJldHVybiBudWxsOw0KKwkJICAgIAkJCSAgICAJfSANCisJCSAgICAJCQkJfQ0KKwkJICAgIAkJCQllbHNlIGlmIChwYXJhbWV0ZXIuZXF1YWxzKCJwb3BpZCIpKSB7DQorCQkgICAgCQkJCQl0dHlwZSA9IGdldE5leHRUb2tlbih0b2spOw0KKwkJICAgIAkJCQkJaWYgKHR0eXBlID09IFN0cmVhbVRva2VuaXplci5UVF9XT1JEKSB7DQorCQkgICAgCQkJCQkJcG9wdWxhdGlvbklkZW50aWZpZXIgPSB0b2suc3ZhbDsNCisJCSAgICAJCQkJCX0NCisJCSAgICAJCQkgICAgCWVsc2Ugew0KKwkJICAgIAkJCSAgICAJCUFjdGl2YXRvci5sb2dFcnJvcigiUGFqZWsgaW1wb3J0aW5nOiAiICsgcGFqZWtORVRGaWxlVVJJLmdldE5hbWUoKSArICI6IHBvcHVsYXRpb24gaWRlbnRpZmllciBvZiBlZGdlIGhhcyB3cm9uZyBmb3JtYXQuLi4gRXhpdGluZyEiLCBudWxsKTsNCisJCSAgICAJCQkgICAgCQlpbnB1dC5jbG9zZSgpOw0KKwkJICAgIAkJCSAgICAJCXJldHVybiBudWxsOw0KKwkJICAgIAkJCSAgICAJfSANCisJCSAgICAJCQkJfQ0KKwkJICAgIAkJCX0NCisJCSAgICAJCX0NCisJCSAgICAJCS8vdlBvcA0KKwkJICAgIAkJZWRnZUNvbnRhaW5lckxpc3QuYWRkKG5ldyBFZGdlQ29udGFpbmVyKGEsYixib3JkZXJMZW5ndGgsdlBvcHVsYXRpb24pKTsNCisJCSAgICAJCQ0KKwkJCSAgICAJCQkJICAgIAkNCisJCQkgICAgfQ0KKwkJCSAgICBlbHNlIHsNCisJCQkgICAgCUFjdGl2YXRvci5sb2dFcnJvcigiUGFqZWsgaW1wb3J0aW5nOiAiICsgcGFqZWtORVRGaWxlVVJJLmdldE5hbWUoKSArICI6IHZlcnkgc3BlY2lhbCBQYWplayBmb3JtYXQ/IT8gTm90IHByb2Nlc3NhYmxlISIsIG51bGwpOw0KKwkJCSAgICAJaW5wdXQuY2xvc2UoKTsNCisJCQkgICAgCXJldHVybiBudWxsOw0KKwkJCSAgICB9DQorCQkgICAgCQ0KKwkJCX0gLy9pbnB1dCBoYXMgbmV4dA0KKw0KKwkJCWlucHV0LmNsb3NlKCk7CQkNCisJCX0NCisJCWNhdGNoIChFeGNlcHRpb24gZSkgew0KKwkJCWUucHJpbnRTdGFja1RyYWNlKCk7DQorCQl9DQorCQkNCisJCXByb2Nlc3NOb2RlcyhncmFwaCwgbm9kZUhvbGRlcik7DQorCQkNCisJCS8vbm9kZXMNCisJCWZvciAoaW50IGk9MDsgaTxub2RlSG9sZGVyLmxlbmd0aDsgaSsrKQ0KKwkJewkvL1N5c3RlbS5lcnIucHJpbnRsbigibm9kZSAiICsgaSArICI6IFVSSTogIisgbm9kZUhvbGRlcltpXS5nZXRVUkkoKSk7DQorCQkJTWFwPFN0cmluZywgRG91YmxlPiB2UG9wdWxhdGlvbiA9IHZQb3B1bGF0aW9uTGlzdE5vZGVzLmdldChpKTsNCisJCQlpZiAodlBvcHVsYXRpb25MaXN0Tm9kZXMuZ2V0KGkpICE9IG51bGwpDQorCQkJCS8vU3lzdGVtLmVyci5wcmludGxuKCJ2UG9wIG5vZGUgc2l6ZTogIiArIHZQb3B1bGF0aW9uTGlzdE5vZGVzLmdldChpKS5zaXplKCkpOw0KKwkJCWZvciAoTWFwLkVudHJ5PFN0cmluZywgRG91YmxlPiBlbnRyeSA6IHZQb3B1bGF0aW9uLmVudHJ5U2V0KCkpIHsNCisJICAgIAkJU3RyaW5nIHBvcHVsYXRpb25JRCA9IGVudHJ5LmdldEtleSgpOw0KKwkgICAgCQlpZiAocG9wdWxhdGlvbklELmxlbmd0aCgpID4gMCkgew0KKwkgICAgCQkJZG91YmxlIHBvcHVsYXRpb25Db3VudCA9IGVudHJ5LmdldFZhbHVlKCk7DQorCQkJCQkvLyBDcmVhdGUgYSBuZXcgcG9wdWxhdGlvbiBsYWJlbA0KKwkJCQkJUG9wdWxhdGlvbkxhYmVsIG5ld0xhYmVsID0gTGFiZWxzRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlUG9wdWxhdGlvbkxhYmVsKCk7DQorCQkJCQluZXdMYWJlbC5zZXRQb3B1bGF0aW9uSWRlbnRpZmllcihwb3B1bGF0aW9uSUQpOw0KKwkJCQkJbmV3TGFiZWwuc2V0VVJJT2ZJZGVudGlmaWFibGVUb0JlTGFiZWxlZChub2RlSG9sZGVyW2ldLmdldFVSSSgpKTsNCisJCQkJCW5ld0xhYmVsLnNldE5vZGUobm9kZUhvbGRlcltpXSk7DQorCQkJCQlVUkkgbmV3VVJJID0gY3JlYXRlUG9wdWxhdGlvbkxhYmVsVVJJKG5vZGVIb2xkZXJbaV0sIHBvcHVsYXRpb25JRCk7DQorCQkJCQkvL2dyYXBoLmdldE5vZGVMYWJlbHMoKS5wdXQobmV3VVJJLCBuZXdMYWJlbCk7DQorCQkJCQlpbml0aWFsaXplTGFiZWwobmV3TGFiZWwsIHBvcHVsYXRpb25JRCwgcG9wdWxhdGlvbkNvdW50KTsJCQkJCQkJICAgIAkJCQ0KKwkgICAgCQl9DQorCSAgICAJfQ0KKwkJCWdyYXBoLnB1dE5vZGUobm9kZUhvbGRlcltpXSk7DQorCQl9DQorCQkNCisJCS8vZWRnZXMNCisJCWZvciAoRWRnZUNvbnRhaW5lciBlZGdlQ29udGFpbmVyIDogZWRnZUNvbnRhaW5lckxpc3QpDQorCQl7DQorCQkJaW50IGEgPSBlZGdlQ29udGFpbmVyLmE7DQorCQkJaW50IGIgPSBlZGdlQ29udGFpbmVyLmI7DQorCQkJaW50IGJvcmRlckxlbmd0aCA9IGVkZ2VDb250YWluZXIuYm9yZGVyTGVuZ3RoOw0KKwkJCUxpbmtlZEhhc2hNYXA8U3RyaW5nLCBkb3VibGVbXT4gdlBvcHVsYXRpb24gPSBlZGdlQ29udGFpbmVyLnZQb3B1bGF0aW9uOw0KKwkJCQ0KKwkJCWlmICh2UG9wdWxhdGlvbi5zaXplKCkgPT0gMCkgew0KKwkJICAgIAljcmVhdGVDb21tb25Cb3JkZXJFZGdlKGdyYXBoLG5vZGVIb2xkZXJbYS0xXSxub2RlSG9sZGVyW2ItMV0sIGJvcmRlckxlbmd0aCk7CQkgICAgCQkJDQorCQkJfQ0KKwkJCWVsc2Ugew0KKwkJICAgIAlmb3IgKE1hcC5FbnRyeTxTdHJpbmcsIGRvdWJsZVtdPiBlbnRyeSA6IHZQb3B1bGF0aW9uLmVudHJ5U2V0KCkpIHsNCisJCSAgICAJCVN0cmluZyBwb3B1bGF0aW9uSUQgPSBlbnRyeS5nZXRLZXkoKTsNCisJCSAgICAJCWlmIChwb3B1bGF0aW9uSUQubGVuZ3RoKCkgPiAwKSB7DQorCQkJICAgIAkJZG91YmxlW10gbWlncmF0aW9uUmF0ZXMgPSBlbnRyeS5nZXRWYWx1ZSgpOw0KKwkJCSAgICAJCWNyZWF0ZU1pZ3JhdGlvbkVkZ2UoZ3JhcGgsbm9kZUhvbGRlclthLTFdLG5vZGVIb2xkZXJbYi0xXSwgZW50cnkuZ2V0S2V5KCksIG1pZ3JhdGlvblJhdGVzWzBdLCBtaWdyYXRpb25SYXRlc1sxXSk7DQorCQkgICAgCQl9DQorCQkgICAgCX0NCisJCQl9DQorCQl9DQorCQkNCisJCQ0KKwkJYXNzZXJ0IGdyYXBoLnNhbmUoKTsNCisJCXJldHVybiBncmFwaDsNCisJfQ0KKw0KKwkNCisvLyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCQ0KKwlwcml2YXRlIHZvaWQgcHJvY2Vzc05vZGVzKEdyYXBoIGdyYXBoLCBOb2RlW10gbm9kZUhvbGRlcikNCisJew0KKwkJaWYgKHRoaXMuZ2V0Q29udGFpbmVyKCkgIT0gbnVsbCkgewkJCQ0KKwkJCVVSSSBjb250YWluZXJVUkkgPSB0aGlzLmdldENvbnRhaW5lcigpOw0KKwkJCS8vYnVnLi4gcmVtb3ZlZC4gDQorCQkJaWYgKGNvbnRhaW5lclVSSS50b1N0cmluZygpLmxhc3RJbmRleE9mKCJzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS8iKSAhPSANCisJCQkJY29udGFpbmVyVVJJLnRvU3RyaW5nKCkuaW5kZXhPZigic3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vIikpIA0KKwkJCXsgY29udGFpbmVyVVJJID0gVVJJLmNyZWF0ZVVSSShjb250YWluZXJVUkkudG9TdHJpbmcoKS5zdWJzdHJpbmcoMjQpKTsgfQ0KKwkJCQ0KKwkJCQkNCisJCQkNCisNCisJCQkNCisJCQkNCisJCQkvL3NwYXRpYWwgaW5mb3JtYXRpb24gb2YgY29udGFpbmluZyBub2RlDQorCQkJU2V0PExhdExvbmc+IHNwYXRpYWxzTGlzdCA9IGdldFNwYXRpYWxzKHByb2plY3QsIGNvbnRhaW5lclVSSSk7CQkNCisJCQkNCisJCQkNCisJCQkNCisJCQkNCisJCQkvLyBGaXQ9dHJ1ZTogb25seSBjcmVhdGUgY29udGFpbm1lbnQgZWRnZXMgaWYgcGFqZWsgbm9kZSBpcyB3aXRoaW4gYSBjb250YWlubWVudCBhcmVhDQorCQkJaWYgKHRoaXMuaXNGaXQoKSA9PSB0cnVlKQ0KKwkJCXsNCisJCQkJDQorCQkJCS8vZml0IGdyYXBoIGludG8gYXJlYSAJCQkJDQorCQkJCWZpdFBhamVrSW50b0NvbnRhaW5pbmdOb2RlKG5vZGVIb2xkZXIsIHNwYXRpYWxzTGlzdCk7DQorCQkJCQ0KKwkJCQkvL25vdyBhbGwgbm9kZXMgb2YgdGhlIGdyYXBoIGFyZSBjb250YWluZWQgd2l0aCBpbiB0aGUgY29udGFpbmluZyBhcmVhDQorCQkJCWZvciAoaW50IGk9MDsgaTxub2RlSG9sZGVyLmxlbmd0aDsgaSsrKQ0KKwkJCQl7ICAgc2V0Q29udGFpbmVkTm9kZVVSSShjb250YWluZXJVUkksbm9kZUhvbGRlcltpXSk7DQorCQkJCSAgICBjcmVhdGVDb250YWlubWVudEVkZ2UoZ3JhcGgsIGNvbnRhaW5lclVSSSwgbm9kZUhvbGRlcltpXSk7DQorCQkJCX0NCisJCQkJDQorCQkJfQ0KKwkJCQ0KKwkJCQ0KKwkJCWVsc2UgeyAvL0ZpdD1mYWxzZSwgDQorCQkJCSAgIC8vY29udGFpbm1lbnQgZWRnZXMgd2lsbCBiZSBzZXQgaWYgcGFqZWsgbm9kZSBsaWVzIGluIGNvbnRhaW5pbmcgYXJlYQ0KKwkJCQ0KKwkJCQlpZiAoaXNFbmZvcmNlQ29udGFpbm1lbnQoKSkNCisJCQkJew0KKwkJCQkJZm9yIChpbnQgaT0wOyBpPG5vZGVIb2xkZXIubGVuZ3RoOyBpKyspDQorCQkJCQl7ICANCisJCQkJCQlzZXRDb250YWluZWROb2RlVVJJKGNvbnRhaW5lclVSSSxub2RlSG9sZGVyW2ldKTsNCisJCQkJCSAgICBjcmVhdGVDb250YWlubWVudEVkZ2UoZ3JhcGgsIGNvbnRhaW5lclVSSSwgbm9kZUhvbGRlcltpXSk7DQorCQkJCQl9DQorCQkJCX0NCisJCQkJZWxzZQ0KKwkJCQl7DQorCQkJCQlib29sZWFuW10gbm9kZV9maXQgPSBuZXcgYm9vbGVhbltub2RlSG9sZGVyLmxlbmd0aF07DQorCQkJCQlqYXZhLnV0aWwuQXJyYXlzLmZpbGwobm9kZV9maXQsdHJ1ZSk7IA0KKwkJCQkJaW50IG5vZGVjbnQ9MDsNCisJCQkJCWZvciAoaW50IGk9MDsgaTxub2RlSG9sZGVyLmxlbmd0aDsgaSsrKSAvL3BhamVrIG5vZGVzDQorCQkJCQl7DQorCQkJCQkJTGF0TG9uZ1Byb3ZpZGVyIGxhdExvbmdQcm92aWRlciA9IChMYXRMb25nUHJvdmlkZXIpIExhdExvbmdQcm92aWRlckFkYXB0ZXJGYWN0b3J5LklOU1RBTkNFDQorCQkJCQkJLmFkYXB0TmV3KG5vZGVIb2xkZXJbaV0sIExhdExvbmdQcm92aWRlci5jbGFzcyk7DQorCQkJCQkJLy9wYWpla1NwYXRpYWxzTGlzdC5hZGQobGF0TG9uZ1Byb3ZpZGVyLmdldExhdExvbmcoKSk7DQorCQkJCQkJTGF0TG9uZyBwYWpla1NwYXRpYWwgPSBsYXRMb25nUHJvdmlkZXIuZ2V0TGF0TG9uZygpOw0KKwkJCQkJICAgIGZvciAoU2VnbWVudCBwYWpla1N1YnNwYXRpYWwgOiBwYWpla1NwYXRpYWwuZ2V0U2VnbWVudHMoKSkNCisJCQkJCSAgICB7IC8vIHNpemUgb2Ygb25lIHVzdWFsbHkgYXMgb25lIHBhamVrIG5vZGUgaGFzIG9ubHkgb25lIHNoYXBlDQorCQkJCQkgICAgICANCisJCQkJCSAgICAgIC8vc2hhcGVfZml0OiBzdG9yZXMgd2hldGhlciBzZWdtZW50IGNvb3JkaW5hdGVzIGFyZSB3aXRoaW4gY29udGFpbmluZyBwb2x5Z29uIG9yIG5vdA0KKwkJCQkJICAgICAgYm9vbGVhbltdIHNoYXBlX2ZpdCA9IG5ldyBib29sZWFuW3BhamVrU3Vic3BhdGlhbC5zaXplKCldOw0KKwkJCQkJICAgICAgamF2YS51dGlsLkFycmF5cy5maWxsKHNoYXBlX2ZpdCxmYWxzZSk7IC8vYW55d2F5DQorCQkJCQkgICAgICBmb3IgKExhdExvbmcgc3BhdGlhbHMgOiBzcGF0aWFsc0xpc3QpDQorCQkJCQkgICAgICB7IAkJCQkgICAgCSAgDQorCQkJCQkgICAgCUxpc3Q8U2VnbWVudD4gc3Vic3BhdGlhbHMgPSBzcGF0aWFscy5nZXRTZWdtZW50cygpOyAgCQkJCQkNCisJCQkJCSAgICAJZm9yIChTZWdtZW50IHN1YnNwYXRpYWwgOiBzdWJzcGF0aWFscykJew0KKwkJCQkJICAgIAkgIGZvciAoaW50IHo9MDsgeiA8IHBhamVrU3Vic3BhdGlhbC5zaXplKCk7IHorKykgew0KKwkJCQkJCQkJaWYoY29udGFpbnNQb2ludChwYWpla1N1YnNwYXRpYWwubGF0aXR1ZGUoeikscGFqZWtTdWJzcGF0aWFsLmxvbmdpdHVkZSh6KSxzdWJzcGF0aWFsKSkgDQorCQkJCQkJCQl7ICAgLy9pZiBvbmUgcG9pbnQgb2YgdGhlIHBhamVrIG5vZGUgKGJveCwgZWxsaXBzZSkgaXMgd2l0aGluIG9uZSBvZiBjb250YWluaW5nIG5vZGUgYXJlYXMsIHNldCB0cnVlDQorCQkJCQkJCQkJc2hhcGVfZml0W3pdID0gdHJ1ZTsJCQkJCQkNCisJCQkJCQkJCX0JCQkJCQkJCQ0KKwkJCQkJCQkgIH0gLy8gdGVzdDogY29vcmRpbmF0ZXMgb2YgcGFqZWsgbm9kZXMgaW4gY29udGFpbmluZyBhcmVhPw0KKwkJCQkJCQkgIA0KKwkJCQkJICAgIAl9IC8vIGRpZmZlcmVudCBsb2NhdGlvbnMgKGdtbDpwb3MpIG9mIGNvbnRhaW5pbmcgbm9kZSAoaXNsYW5kcy4uKQ0KKwkJCSAgICAJICAgICAgfSAvLyBjb250YWluaW5nIG5vZGUocykgDQorCQkJCQkgICAgICANCisJCQkJCSAgICAgIGZvciAoaW50IHNoYXBlZml0aWR4ID0gMDsgc2hhcGVmaXRpZHggPCBzaGFwZV9maXQubGVuZ3RoOyBzaGFwZWZpdGlkeCsrKSANCisJCQkJCQkgICAgaWYgKHNoYXBlX2ZpdFtzaGFwZWZpdGlkeF0gPT0gZmFsc2UpIG5vZGVfZml0W25vZGVjbnRdPWZhbHNlOw0KKwkJCQkJICAgIH0gLy8gUGFqZWsgc2VnbWVudChzKSANCisJCQkJCSAgDQorCQkJCQkgICAgLy93aGVuIGEgc2VnbWVudCBjb29yZGluYXRlcyBvZiB0aGUgcGFqZWsgbm9kZSBkaWQgbm90IGZpdCBpbnRvIHRoZSBjb29yZGluYXRlIHBvbHlnb24NCisJCQkJCSAgICAvL29mIGNvbnRhaW51bmcgbm9kZSwgdGhpcyBub2RlIHdpbGwgbm90IGdldCBhIGNvbnRhaW5tZW50IGVkZ2UNCisJCQkJCSAgICBpZiAobm9kZV9maXRbbm9kZWNudF09PXRydWUpIA0KKwkJCQkgICAgCXsJDQorCQkJCSAgICAJCXNldENvbnRhaW5lZE5vZGVVUkkoY29udGFpbmVyVVJJLG5vZGVIb2xkZXJbbm9kZWNudF0pOw0KKwkJCQkgICAgCQljcmVhdGVDb250YWlubWVudEVkZ2UoZ3JhcGgsIGNvbnRhaW5lclVSSSwgbm9kZUhvbGRlcltub2RlY250XSk7DQorCQkJCSAgICAJfQkJCQkJICAgIA0KKwkJCQkJICAgIG5vZGVjbnQrKzsJCQkgDQorCQkJCQl9IC8vIFBhamVrIG5vZGVzIChQYWpla1NwYXRpYWxzTGlzdCkNCisJCQkJfSAvL2VuZCBpZi1lbHNlIChjb250YWlubWVudCkgCQ0KKwkJCX0gLy8gaWYtZWxzZSAoZml0KQkJCQkJCQ0KKwkJfQ0KKwkJDQorCX0NCisJDQorCXByaXZhdGUgdm9pZCBzZXRDb250YWluZWROb2RlVVJJKFVSSSBjb250YWluZXJVUkksIE5vZGUgbm9kZSkNCisJewkNCisJCVVSSSBub2RlVVJJID0gbm9kZS5nZXRVUkkoKS50cmltRnJhZ21lbnQoKTsNCisJCVN0cmluZyBiYXNlPSBub2RlVVJJLnRvU3RyaW5nKCkuc3Vic3RyaW5nKDAsIG5vZGVVUkkudG9TdHJpbmcoKS5sYXN0SW5kZXhPZigiLyIpKzEpOw0KKwkJbm9kZS5zZXRVUkkoVVJJLmNyZWF0ZVVSSShiYXNlICsgY29udGFpbmVyVVJJLmxhc3RTZWdtZW50KCkrIi0iK25vZGVVUkkubGFzdFNlZ21lbnQoKSkpOw0KKwl9DQorCQ0KKwlwcml2YXRlIGludCBnZXROZXh0VG9rZW4oU3RyZWFtVG9rZW5pemVyIHRvaykgdGhyb3dzIElPRXhjZXB0aW9uIHsNCisJCWludCB0dHlwZSA9IDA7IA0KKwkJd2hpbGUoKHR0eXBlID0gdG9rLm5leHRUb2tlbigpKSAhPSBTdHJlYW1Ub2tlbml6ZXIuVFRfV09SRCAmJiB0dHlwZSAhPSBTdHJlYW1Ub2tlbml6ZXIuVFRfTlVNQkVSICYmIHR0eXBlICE9IFN0cmVhbVRva2VuaXplci5UVF9FT0YgJiYgdHR5cGUgIT0gJyInKSB7DQorCQkJOw0KKwkJfQ0KKwkJcmV0dXJuIHR0eXBlOw0KKwl9CQkNCisJcHJpdmF0ZSBDb2xvciBnZXRDb2xvcihTdHJpbmcgc3RyQ29sb3IpIHsNCisJCVN0cmluZyBjID0gc3RyQ29sb3IudG9Mb3dlckNhc2UoKTsNCisJCWlmIChjLmVxdWFscygiYmxhY2siKSkgcmV0dXJuIENvbG9yLkJMQUNLOw0KKwkJZWxzZSBpZiAoYy5lcXVhbHMoImJsdWUiKSkgcmV0dXJuIENvbG9yLkJMVUU7DQorCQllbHNlIGlmIChjLmVxdWFscygiY3lhbiIpKSByZXR1cm4gQ29sb3IuQ1lBTjsNCisJCWVsc2UgaWYgKGMuZXF1YWxzKCJncmF5IikpIHJldHVybiBDb2xvci5HUkFZOw0KKwkJZWxzZSBpZiAoYy5lcXVhbHMoImdyZWVuIikpIHJldHVybiBDb2xvci5HUkVFTjsNCisJCWVsc2UgaWYgKGMuZXF1YWxzKCJtYWdlbnRhIikpIHJldHVybiBDb2xvci5NQUdFTlRBOw0KKwkJZWxzZSBpZiAoYy5lcXVhbHMoIm9yYW5nZSIpKSByZXR1cm4gQ29sb3IuT1JBTkdFOw0KKwkJZWxzZSBpZiAoYy5lcXVhbHMoInBpbmsiKSkgcmV0dXJuIENvbG9yLlBJTks7DQorCQllbHNlIGlmIChjLmVxdWFscygicmVkIikpIHJldHVybiBDb2xvci5SRUQ7DQorCQllbHNlIGlmIChjLmVxdWFscygid2hpdGUiKSkgcmV0dXJuIENvbG9yLldISVRFOw0KKwkJZWxzZSBpZiAoYy5lcXVhbHMoInllbGxvdyIpKSByZXR1cm4gQ29sb3IuWUVMTE9XOw0KKwkJZWxzZSByZXR1cm4gQ29sb3IuQkxBQ0s7DQorCX0NCisJDQorCQ0KKw0KKw0KKwkNCisJLyoqDQorCSAqIA0KKwkgKiBAcGFyYW0geA0KKwkgKiBAcGFyYW0geQ0KKwkgKiBAcGFyYW0gYXJlYQ0KKwkgKiBAcmV0dXJuDQorCSAqLw0KKwlwcml2YXRlIExhdExvbmcgY3JlYXRlTm9kZVBvbHlnb24oZmluYWwgZG91YmxlIHgsIGRvdWJsZSB5LCBkb3VibGUgYXJlYSwgU3RyaW5nIHNoYXBlKSB7DQorCQlmaW5hbCBMYXRMb25nIHJldFZhbHVlID0gbmV3IExhdExvbmcoKTsNCisJCQ0KKwkJZmluYWwgU2VnbWVudEJ1aWxkZXIgc2IgPSBuZXcgU2VnbWVudEJ1aWxkZXIoKTsNCisJCS8vIGVsbGlwc2UgYm94IGRpYW1vbmQgdHJpYW5nbGUgY3Jvc3MgZW1wdHkNCisJCWlmIChzaGFwZS50b0xvd2VyQ2FzZSgpLmVxdWFscygidHJpYW5nbGUiKSkgew0KKwkJCWRvdWJsZSBhcmVheDIgPSBNYXRoLnNxcnQoNCAqIGFyZWEgLyBNYXRoLnNxcnQoMykpIC8gMjsNCisJCQlkb3VibGUgYXJlYXkgPSBhcmVheDIgLyBNYXRoLnNxcnQoMyk7DQorCQkJc2IuYWRkKHgtYXJlYXgyLCB5LWFyZWF5KTsNCisJCQlzYi5hZGQoeCthcmVheDIsIHktYXJlYXkpOw0KKwkJCXNiLmFkZCh4LCB5KzIqYXJlYXkpOw0KKwkJCXNiLmFkZCh4LWFyZWF4MiwgeS1hcmVheSk7DQorCQl9DQorCQllbHNlIGlmIChzaGFwZS50b0xvd2VyQ2FzZSgpLmVxdWFscygiY3Jvc3MiKSkgew0KKwkJCWRvdWJsZSBhcmVhMiA9IE1hdGguc3FydCgyICogYXJlYSAvIE1hdGguc3FydCgzKSkgLyAyOw0KKwkJCXNiLmFkZCh4K2FyZWEyLCB5K2FyZWEyKTsNCisJCQlzYi5hZGQoeC1hcmVhMiwgeS1hcmVhMik7DQorCQkJc2IuYWRkKHgtYXJlYTIsIHkrYXJlYTIpOw0KKwkJCXNiLmFkZCh4K2FyZWEyLCB5LWFyZWEyKTsNCisJCQlzYi5hZGQoeCthcmVhMiwgeSthcmVhMik7DQorCQl9DQorCQllbHNlIGlmIChzaGFwZS50b0xvd2VyQ2FzZSgpLmVxdWFscygiZWxsaXBzZSIpKSB7IC8vIGNpcmNsZQ0KKwkJCWRvdWJsZSByID0gTWF0aC5zcXJ0KGFyZWEgLyBNYXRoLlBJKTsNCisJCQlpbnQgbnVtU2VncyA9IDIwOw0KKwkJCWZvciAoaW50IGk9MDtpPD1udW1TZWdzO2krKykgew0KKwkJCQlzYi5hZGQoeCArIHIgKiBNYXRoLmNvcygyKk1hdGguUEkqaS9udW1TZWdzKSwgeSArIHIgKiBNYXRoLnNpbigyKk1hdGguUEkqaS9udW1TZWdzKSk7DQorCQkJfQ0KKwkJfSANCisJCWVsc2UgeyAvLyBib3gsZGlhbW9uZCxlbXB0eSxkZWZhdWx0DQorCQkJZG91YmxlIGFyZWEyID0gTWF0aC5zcXJ0KGFyZWEpIC8gMjsNCisJCQkvLyBXZSBqdXN0IG1ha2UgYSBzcXVhcmUuLi4NCisJCQlzYi5hZGQoeC1hcmVhMiwgeS1hcmVhMik7DQorCQkJc2IuYWRkKHgtYXJlYTIsIHkrYXJlYTIpOw0KKwkJCXNiLmFkZCh4K2FyZWEyLCB5K2FyZWEyKTsNCisJCQlzYi5hZGQoeCthcmVhMiwgeS1hcmVhMik7DQorCQkJc2IuYWRkKHgtYXJlYTIsIHktYXJlYTIpOw0KKwkJfQ0KKwkJcmV0VmFsdWUuYWRkKHNiLnRvU2VnbWVudCgpKTsNCisNCisJCXJldHVybiByZXRWYWx1ZTsNCisJfSAvLyBjcmVhdGVOb2RlUG9seWdvbg0KKw0KKw0KKwkvKioNCisJICogQHBhcmFtIHgNCisJICogICAgICAgICAgICB0aGUgeCBjb29yZCBvZiB0aGUgbm9kZSBpbiB0aGUgbGF0dGljZQ0KKwkgKiBAcGFyYW0geQ0KKwkgKiAgICAgICAgICAgIHRoZSB5IGNvb3JkIG9mIHRoZSBub2RlIGluIHRoZSBsYXR0aWNlDQorCSAqIEByZXR1cm4gYSBub2RlDQorCSAqLw0KKwlwcml2YXRlIFJlZ2lvbiBjcmVhdGVSZWdpb25Ob2RlKFN0cmluZyB1cmlQcmVmaXgsIGRvdWJsZSB4LCBkb3VibGUgeSwgR3JhcGggZ3JhcGgpIHsNCisJCWZpbmFsIFJlZ2lvbiBub2RlID0gTm9kZXNGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVSZWdpb24oKTsNCisJCWZpbmFsIER1YmxpbkNvcmUgZGMgPSBub2RlLmdldER1YmxpbkNvcmUoKTsNCisJCWRjLnNldFRpdGxlKGNyZWF0ZU5vZGVUaXRsZSh4LCB5KSk7DQorCQlub2RlLnNldFVSSShjcmVhdGVSZWdpb25Ob2RlVVJJKHVyaVByZWZpeCwgeCwgeSwgZ3JhcGgpKTsNCisJCXJldHVybiBub2RlOw0KKwl9IC8vIGNyZWF0ZVJlZ2lvbk5vZGUNCisJDQorCQ0KKwkvKioNCisJICogQHBhcmFtIHgNCisJICogICAgICAgICAgICB0aGUgeCBvZiB0aGUgbm9kZSBpbiB0aGUgbGF0dGljZQ0KKwkgKiBAcGFyYW0geQ0KKwkgKiAgICAgICAgICAgIHRoZSB5IG9mIHRoZSBub2RlIGluIHRoZSBsYXR0aWNlDQorCSAqIEByZXR1cm4gYSB0aXRsZSBmb3IgYSBub2RlDQorCSAqLw0KKwlwcml2YXRlIFN0cmluZyBjcmVhdGVOb2RlVGl0bGUoZG91YmxlIHgsIGRvdWJsZSB5KSB7DQorCQkNCisJCWZpbmFsIFN0cmluZ0J1aWxkZXIgc2IgPSBuZXcgU3RyaW5nQnVpbGRlcigiTm9kZVsiKTsNCisJCXNiLmFwcGVuZChTdHJpbmcudmFsdWVPZigoKGxvbmcpKHgqMTAwKSkvMTAwKSk7DQorCQlzYi5hcHBlbmQoIiwgIik7DQorCQlzYi5hcHBlbmQoU3RyaW5nLnZhbHVlT2YoKChsb25nKSh5KjEwMCkpLzEwMCkpOw0KKwkJc2IuYXBwZW5kKCJdIik7DQorCQlyZXR1cm4gc2IudG9TdHJpbmcoKTsNCisJfSAvLyBjcmVhdGVOb2RlVGl0bGUNCisJDQorCQ0KKwkvKioNCisJICogQHBhcmFtIHgNCisJICogICAgICAgICAgICB0aGUgeCBvZiB0aGUgcmVnaW9uIGluIHRoZSBsYXR0aWNlDQorCSAqIEBwYXJhbSB5DQorCSAqICAgICAgICAgICAgdGhlIHkgb2YgdGhlIHJlZ2lvbiBpbiB0aGUgbGF0dGljZQ0KKwkgKiBAcmV0dXJuIGEgVVJJIGZvciB0aGUgcmVnaW9uIG5vZGUNCisJICovDQorCXByaXZhdGUgVVJJIGNyZWF0ZVJlZ2lvbk5vZGVVUkkoU3RyaW5nIHVyaVByZWZpeCwgZG91YmxlIHgsIGRvdWJsZSB5LCBHcmFwaCBncmFwaCkgew0KKwkJU3RyaW5nIG5vZGVVcmlTdWZmaXggPSAJdXJpUHJlZml4Kw0KKwkJCQkJCQkJU3RyaW5nLnZhbHVlT2YoKChsb25nKSh4KjEwMCkpLzEwMCkNCisJCQkJCQkJCSsNCisJCQkJCQkJCSI7Ig0KKwkJCQkJCQkJKw0KKwkJCQkJCQkJU3RyaW5nLnZhbHVlT2YoKChsb25nKSh5KjEwMCkpLzEwMCk7DQorCQkNCisJCVN0cmluZyBub2RlVXJpU3RyaW5nID0gTm9kZS5VUklfVFlQRV9OT0RFX1NFR01FTlQgKyAiLyINCisJCQkJCQkJCSsgZ3JhcGguZ2V0VVJJKCkubGFzdFNlZ21lbnQoKSsiLyINCisJCQkJCQkJCSsgbm9kZVVyaVN1ZmZpeDsNCisJCQ0KKyAgICAgICAgVVJJIHVyaSA9IFNURU1VUkkuY3JlYXRlVVJJKG5vZGVVcmlTdHJpbmcpOw0KKwkJcmV0dXJuIHVyaTsNCisJfSAvLyBjcmVhdGVSZWdpb25Ob2RlVVJJDQorCQ0KKwkNCisJLyoqDQorCSAqIA0KKwkgKiBAcGFyYW0gZ3JhcGgNCisJICogQHBhcmFtIG5vZGVBDQorCSAqIEBwYXJhbSBub2RlQg0KKwkgKiBAcGFyYW0gYm9yZGVyTGVuZ3RoDQorCSAqLw0KKwlwcml2YXRlIHZvaWQgY3JlYXRlQ29tbW9uQm9yZGVyRWRnZShmaW5hbCBHcmFwaCBncmFwaCwgZmluYWwgTm9kZSBub2RlQSwgZmluYWwgTm9kZSBub2RlQiwgaW50IGJvcmRlckxlbmd0aCkgew0KKw0KKwkJLy8gY3JlYXRlIHRoZSBlZGdlDQorCQlmaW5hbCBFZGdlIGVkZ2UgPSBDb21tb25Cb3JkZXJSZWxhdGlvbnNoaXBMYWJlbEltcGwuY3JlYXRlQ29tbW9uQm9yZGVyUmVsYXRpb25zaGlwKG5vZGVBLCBub2RlQiwgYm9yZGVyTGVuZ3RoKTsNCisJCQ0KKwkJVVJJIGVkZ2VVUkkgPSBlZGdlLmdldFVSSSgpOw0KKwkJLy8gdGhlIGF1dG9nZW5lcmF0ZWQgZWRnZSB1cmkgaXMgbm90IGNvcnJlY3QuIE5lZWQgdG8gcmVwbGFjZSBpdA0KKwkJU3RyaW5nIHNFZGdlID0gZWRnZVVSSS50b1N0cmluZygpOw0KKwkJaW50IGxhc3QgPSBzRWRnZS5sYXN0SW5kZXhPZigiLyIpOw0KKwkJU3RyaW5nIHNFZGdlMSA9IHNFZGdlLnN1YnN0cmluZygwLGxhc3QpOw0KKwkJU3RyaW5nIHNFZGdlMiA9IHNFZGdlLnN1YnN0cmluZyhsYXN0LHNFZGdlLmxlbmd0aCgpKTsNCisJCXNFZGdlID0gc0VkZ2UxKyIvcmVsYXRpb25zaGlwL2NvbW1vbmJvcmRlciIrc0VkZ2UyOw0KKwkJVVJJIG5ld1VSSSA9IFVSSS5jcmVhdGVVUkkoc0VkZ2UpOw0KKwkJZWRnZS5zZXRVUkkobmV3VVJJKTsNCisJCQ0KKwkJLy8gbm93IHdlIG5lZWQgdG8gc2V0IHRoZSB1cmkgZm9yIHRoZSBsYWJlbA0KKwkJQ29tbW9uQm9yZGVyUmVsYXRpb25zaGlwTGFiZWwgbGFiZWwgPSAoQ29tbW9uQm9yZGVyUmVsYXRpb25zaGlwTGFiZWwpZWRnZS5nZXRMYWJlbCgpOw0KKwkJbGFiZWwuc2V0VVJJKGNyZWF0ZUVkZ2VMYWJlbFVSSShub2RlQS5nZXRVUkkoKSwgbm9kZUIuZ2V0VVJJKCkpKTsNCisNCisJCWZpbmFsIER1YmxpbkNvcmUgZGMgPSBlZGdlLmdldER1YmxpbkNvcmUoKTsNCisJCWRjLnNldFRpdGxlKGNyZWF0ZUVkZ2VUaXRsZShub2RlQSwgbm9kZUIpKTsNCisJCQ0KKwkJZ3JhcGgucHV0RWRnZShlZGdlKTsNCisJfSAvLyBjcmVhdGVDb21tb25Cb3JkZXJFZGdlDQorCQ0KKwkvKioNCisJICogQHBhcmFtIHgNCisJICogICAgICAgICAgICB0aGUgeCBvZiB0aGUgbm9kZSBpbiB0aGUgbGF0dGljZQ0KKwkgKiBAcGFyYW0geQ0KKwkgKiAgICAgICAgICAgIHRoZSB5IG9mIHRoZSBub2RlIGluIHRoZSBsYXR0aWNlDQorCSAqIEByZXR1cm4gYSB0aXRsZSBmb3IgYSBub2RlDQorCSAqLw0KKwlwcml2YXRlIFN0cmluZyBjcmVhdGVFZGdlVGl0bGUoTm9kZSBub2RlQSwgTm9kZSBub2RlQikgew0KKwkJU3RyaW5nIG5BID0gbm9kZUEuZ2V0RHVibGluQ29yZSgpLmdldFRpdGxlKCk7DQorCQlTdHJpbmcgbkIgPSBub2RlQi5nZXREdWJsaW5Db3JlKCkuZ2V0VGl0bGUoKTsNCisJCWZpbmFsIFN0cmluZ0J1aWxkZXIgc2IgPSBuZXcgU3RyaW5nQnVpbGRlcigiRWRnZVsoIik7DQorCQlzYi5hcHBlbmQobkEpOw0KKwkJc2IuYXBwZW5kKCIpPC0tPigiKTsNCisJCXNiLmFwcGVuZChuQik7DQorCQlzYi5hcHBlbmQoIildIik7DQorCQlyZXR1cm4gc2IudG9TdHJpbmcoKTsNCisJfSAvLyBjcmVhdGVFZGdlVGl0bGUNCisNCisJLyoqDQorCSAqIA0KKwkgKiBAcGFyYW0gdXJpQQ0KKwkgKiBAcGFyYW0gdXJpQg0KKwkgKiBAcmV0dXJuDQorCSAqLw0KKwlwcml2YXRlIHN0YXRpYyBVUkkgY3JlYXRlRWRnZUxhYmVsVVJJKFVSSSB1cmlBLCBVUkkgdXJpQikgew0KKwkJU3RyaW5nIHNBID0gdXJpQS5sYXN0U2VnbWVudCgpOw0KKwkJU3RyaW5nIHNCID0gdXJpQi5sYXN0U2VnbWVudCgpOw0KKwkJDQorCQkvLyBNaWdyYXRpb25FZGdlTGFiZWxJdGVtUHJvdmlkZXINCisJCS8vIHVzZXMgXyBhcyBhIHNwZWNpYWwgY2hhcmFjdGVyIHRvIHNlcGFyYXRlIHRoZSB0d28gbm9kZXMNCisJCS8vIHNvIHdlIG5lZWQgdG8gcmVwbGFjZSBpdC4NCisJCXNBPXNBLnJlcGxhY2UoJ18nLCcuJyk7DQorCQlzQj1zQi5yZXBsYWNlKCdfJywnLicpOw0KKwkJU3RyaW5nIHVyaVN0cmluZyA9IHNBKyJfIitzQjsNCisJCQ0KKwkJLy9TeXN0ZW0ub3V0LnByaW50bG4oImNyZWF0ZUVkZ2VMYWJlbFVSSSgpIDogRklOQUxMWSwgdXJpID0gIit1cmlTdHJpbmcpOw0KKwkJDQorICAgICAgICBVUkkgdXJpID0gU1RFTVVSSS5jcmVhdGVVUkkodXJpU3RyaW5nKTsNCisJCXJldHVybiB1cmk7DQorCX0gLy8gY3JlYXRlRWRnZUxhYmVsVVJJDQorCQ0KKwkNCisNCisJDQorCQ0KKwlwcml2YXRlIHZvaWQgY3JlYXRlTWlncmF0aW9uRWRnZShmaW5hbCBHcmFwaCBncmFwaCwgZmluYWwgTm9kZSBub2RlQSwgZmluYWwgTm9kZSBub2RlQiwgU3RyaW5nIHBvcHVsYXRpb25JZGVudGlmaWVyLCBkb3VibGUgbWlncmF0aW9uUmF0ZUFCLCBkb3VibGUgbWlncmF0aW9uUmF0ZUJBKSB7DQorCQlVUkkgc291cmNlVVJJID0gbm9kZUEuZ2V0VVJJKCk7DQorCQlVUkkgdGFyZ2V0VVJJID0gbm9kZUIuZ2V0VVJJKCk7DQorCQkNCisJCUVkZ2VzRmFjdG9yeSBlZiA9IEVkZ2VzRmFjdG9yeUltcGwuaW5pdCgpOw0KKwkJTWlncmF0aW9uRWRnZSBtRWRnZTEgPSBlZi5jcmVhdGVNaWdyYXRpb25FZGdlKCk7DQorCQlNaWdyYXRpb25FZGdlIG1FZGdlMiA9IGVmLmNyZWF0ZU1pZ3JhdGlvbkVkZ2UoKTsNCisJCQ0KKwkJLy8gVGhlIFVSSSBvZiB0aGUgZWRnZSAxIA0KKwkJVVJJIGVkZ2VVUkkxID0gbUVkZ2UxLmdldFVSSSgpOw0KKwkJLy8gdGhlIGF1dG9nZW5lcmF0ZWQgZWRnZSB1cmkgaXMgbm90IGNvcnJlY3QuIE5lZWQgdG8gcmVwbGFjZSBpdA0KKwkJU3RyaW5nIHMxID0gZWRnZVVSSTEudG9TdHJpbmcoKTsNCisJCWludCBsYXN0ID0gczEubGFzdEluZGV4T2YoIi8iKTsNCisJCVN0cmluZyBzRWRnZTEgPSBzMS5zdWJzdHJpbmcoMCxsYXN0KTsNCisJCVN0cmluZyBzRWRnZTIgPSBzMS5zdWJzdHJpbmcobGFzdCxzMS5sZW5ndGgoKSk7DQorCQlzMSA9IHNFZGdlMSsiL3JlbGF0aW9uc2hpcC9taWdyYXRpb24iK3NFZGdlMjsNCisJCVVSSSBuZXdVUkkgPSBVUkkuY3JlYXRlVVJJKHMxKTsNCisJCW1FZGdlMS5zZXRVUkkobmV3VVJJKTsNCisJCQ0KKwkJDQorCQkvLyBUaGUgVVJJIG9mIHRoZSBlZGdlIDINCisJCVVSSSBlZGdlVVJJMiA9IG1FZGdlMi5nZXRVUkkoKTsNCisJCS8vIHRoZSBhdXRvZ2VuZXJhdGVkIGVkZ2UgdXJpIGlzIG5vdCBjb3JyZWN0LiBOZWVkIHRvIHJlcGxhY2UgaXQNCisJCVN0cmluZyBzMiA9IGVkZ2VVUkkyLnRvU3RyaW5nKCk7DQorCQlpbnQgbGFzdDIgPSBzMi5sYXN0SW5kZXhPZigiLyIpOw0KKwkJc0VkZ2UxID0gczIuc3Vic3RyaW5nKDAsbGFzdDIpOw0KKwkJc0VkZ2UyID0gczIuc3Vic3RyaW5nKGxhc3QsczIubGVuZ3RoKCkpOw0KKwkJczIgPSBzRWRnZTErIi9yZWxhdGlvbnNoaXAvbWlncmF0aW9uIitzRWRnZTI7DQorCQlVUkkgbmV3VVJJMiA9IFVSSS5jcmVhdGVVUkkoczIpOw0KKwkJbUVkZ2UyLnNldFVSSShuZXdVUkkyKTsNCisJCQ0KKwkJLy8gQUREIFRoZSBVUklzIG9mIHRoZSBub2RlcyBjb25uZWN0ZWQgYnkgdGhlc2UgdHdvIGRpcmVjdGVkIGVkZ2VzDQorCQkvLyBBID0+IEINCisJCW1FZGdlMS5zZXROb2RlQVVSSShzb3VyY2VVUkkpOw0KKwkJbUVkZ2UxLnNldE5vZGVCVVJJKHRhcmdldFVSSSk7DQorCQkvLyBCID0+IEENCisJCW1FZGdlMi5zZXROb2RlQlVSSShzb3VyY2VVUkkpOw0KKwkJbUVkZ2UyLnNldE5vZGVBVVJJKHRhcmdldFVSSSk7DQorCQkJCQkJCQkNCisJCS8vIG5vdyB3ZSBuZWVkIHRvIHNldCB0aGUgdXJpIGZvciB0aGUgbGFiZWwNCisJCU1pZ3JhdGlvbkVkZ2VMYWJlbCBsYWJlbDEgPSBtRWRnZTEuZ2V0TGFiZWwoKTsNCisJCU1pZ3JhdGlvbkVkZ2VMYWJlbCBsYWJlbDIgPSBtRWRnZTIuZ2V0TGFiZWwoKTsNCisJCQ0KKwkJLy9TeXN0ZW0ub3V0LnByaW50bG4oIkJFRk9SRTogbUVkZ2VMYWJlbDEgVVJJIHdhcyAiK2xhYmVsMS5nZXRVUkkoKS50b1N0cmluZygpKTsNCisJCS8vU3lzdGVtLm91dC5wcmludGxuKCJCRUZPUkU6IG1FZGdlTGFiZWwyIFVSSSB3YXMgIitsYWJlbDIuZ2V0VVJJKCkudG9TdHJpbmcoKSk7DQorCQkNCisJCWxhYmVsMS5zZXRVUkkoY3JlYXRlRWRnZUxhYmVsVVJJKHNvdXJjZVVSSSwgdGFyZ2V0VVJJKSk7DQorCQlsYWJlbDIuc2V0VVJJKGNyZWF0ZUVkZ2VMYWJlbFVSSSh0YXJnZXRVUkksIHNvdXJjZVVSSSkpOw0KKwkJDQorCQlNaWdyYXRpb25FZGdlTGFiZWxWYWx1ZSBtZWx2MSA9IGxhYmVsMS5nZXRDdXJyZW50VmFsdWUoKTsNCisJCW1lbHYxLnNldE1pZ3JhdGlvblJhdGUobWlncmF0aW9uUmF0ZUFCKTsNCisJCU1pZ3JhdGlvbkVkZ2VMYWJlbFZhbHVlIG1lbHYyID0gbGFiZWwyLmdldEN1cnJlbnRWYWx1ZSgpOw0KKwkJbWVsdjIuc2V0TWlncmF0aW9uUmF0ZShtaWdyYXRpb25SYXRlQkEpOw0KKwkJDQorCQlmaW5hbCBEdWJsaW5Db3JlIGRjMSA9IG1FZGdlMS5nZXREdWJsaW5Db3JlKCk7DQorCQlkYzEuc2V0VGl0bGUoY3JlYXRlTWlncmF0aW9uRWRnZVRpdGxlKHNvdXJjZVVSSSwgdGFyZ2V0VVJJKSk7DQorCQkNCisJCWZpbmFsIER1YmxpbkNvcmUgZGMyID0gbUVkZ2UyLmdldER1YmxpbkNvcmUoKTsNCisJCWRjMi5zZXRUaXRsZShjcmVhdGVNaWdyYXRpb25FZGdlVGl0bGUodGFyZ2V0VVJJLCBzb3VyY2VVUkkpKTsNCisJCQ0KKwkJbUVkZ2UxLnNldFBvcHVsYXRpb25JZGVudGlmaWVyKHBvcHVsYXRpb25JZGVudGlmaWVyKTsNCisJCW1FZGdlMi5zZXRQb3B1bGF0aW9uSWRlbnRpZmllcihwb3B1bGF0aW9uSWRlbnRpZmllcik7DQorCQkNCisJCWdyYXBoLnB1dEVkZ2UobUVkZ2UxKTsNCisJCWdyYXBoLnB1dEVkZ2UobUVkZ2UyKTsJCQ0KKwl9DQorCQ0KKwkNCisJLyoqDQorCSAqIEBwYXJhbSB4DQorCSAqICAgICAgICAgICAgdGhlIHggb2YgdGhlIG5vZGUgaW4gdGhlIGxhdHRpY2UNCisJICogQHBhcmFtIHkNCisJICogICAgICAgICAgICB0aGUgeSBvZiB0aGUgbm9kZSBpbiB0aGUgbGF0dGljZQ0KKwkgKiBAcmV0dXJuIGEgdGl0bGUgZm9yIGEgbm9kZQ0KKwkgKi8NCisJcHVibGljIHN0YXRpYyBTdHJpbmcgY3JlYXRlTWlncmF0aW9uRWRnZVRpdGxlKFVSSSB1cmlBLCBVUkkgdXJpQikgew0KKwkJU3RyaW5nIHNBID0gdXJpQS5sYXN0U2VnbWVudCgpOw0KKwkJU3RyaW5nIHNCID0gdXJpQi5sYXN0U2VnbWVudCgpOw0KKwkJZmluYWwgU3RyaW5nQnVpbGRlciBzYiA9IG5ldyBTdHJpbmdCdWlsZGVyKCJNaWdyYXRpb25FZGdlWygiKTsNCisJCXNiLmFwcGVuZChzQSk7DQorCQlzYi5hcHBlbmQoIik8LS0+KCIpOw0KKwkJc2IuYXBwZW5kKHNCKTsNCisJCXNiLmFwcGVuZCgiKV0iKTsNCisJCQ0KKwkJcmV0dXJuIHNiLnRvU3RyaW5nKCk7DQorCX0gLy8gY3JlYXRlRWRnZVRpdGxlDQorDQorDQorCXByaXZhdGUgVVJJIGNyZWF0ZVBvcHVsYXRpb25MYWJlbFVSSShOb2RlIG4sIFN0cmluZyBwb3B1bGF0aW9uKSB7DQorCQlpbnQgYWRtaW5MZXZlbCA9IFV0aWxpdHkua2V5TGV2ZWwobi5nZXRVUkkoKS5sYXN0U2VnbWVudCgpKTsNCisJCVN0cmluZyBjb3VudHJ5Q29kZSA9IGdldENvdW50cnlDb2RlKG4pOw0KKwkJQ2FsZW5kYXIgY2FsID0gQ2FsZW5kYXIuZ2V0SW5zdGFuY2UoKTsNCisJCWludCB5ZWFyID0gY2FsLmdldChDYWxlbmRhci5ZRUFSKTsNCisJCVN0cmluZyBjb2RlID0gbi5nZXRVUkkoKS5sYXN0U2VnbWVudCgpOw0KKwkJDQorCQlyZXR1cm4gUG9wdWxhdGlvbkxhYmVsSW1wbC5jcmVhdGVQb3B1bGF0aW9uTGFiZWxVUkkoYWRtaW5MZXZlbCwgY291bnRyeUNvZGUsIHBvcHVsYXRpb24sIHllYXIrIiIsIGNvZGUpOw0KKwl9DQorCQ0KKwlwcml2YXRlIFN0cmluZyBnZXRDb3VudHJ5Q29kZShOb2RlIG4pIHsNCisJCWlmKFV0aWxpdHkua2V5TGV2ZWwobi5nZXRVUkkoKS5sYXN0U2VnbWVudCgpKSA9PSAwKSByZXR1cm4gbi5nZXRVUkkoKS5sYXN0U2VnbWVudCgpOw0KKwkJZWxzZSBmb3IoRWRnZSBlOm4uZ2V0RWRnZXMoKSkgDQorCQkJaWYoVXRpbGl0eS5rZXlMZXZlbChlLmdldEEoKS5nZXRVUkkoKS5sYXN0U2VnbWVudCgpKSA8IFV0aWxpdHkua2V5TGV2ZWwobi5nZXRVUkkoKS5sYXN0U2VnbWVudCgpKSkNCisJCQlyZXR1cm4gZ2V0Q291bnRyeUNvZGUoZS5nZXRBKCkpOw0KKwkJDQorCQlyZXR1cm4gIlpaWiI7IC8vIE5vdCBmb3VuZCwgYnV0IFpaWiBpcyB0aGUgcGFyZW50IG9mIGV2ZXJ5dGhpbmcNCisJfQ0KKwkNCisJDQorCXByaXZhdGUgdm9pZCBpbml0aWFsaXplTGFiZWwoUG9wdWxhdGlvbkxhYmVsIGxhYiwgU3RyaW5nIHBvcHVsYXRpb25JZGVudGlmaWVyLCBkb3VibGUgcG9wdWxhdGlvbkNvdW50KSB7DQorCQkgUG9wdWxhdGlvbkxhYmVsVmFsdWUgcGx2ID0gbGFiLmdldEN1cnJlbnRQb3B1bGF0aW9uVmFsdWUoKTsNCisJCSBwbHYuc2V0Q291bnQocG9wdWxhdGlvbkNvdW50KTsNCisJCQ0KKwkJLy8gU2V0IHRoZSB2YWxpZCB5ZWFyIHRvIHRoZSBzdGFydCB5ZWFyIG9mIHRoZSBzZXF1ZW5jZXIJCQ0KKwkJQ2FsZW5kYXIgY2FsID0gQ2FsZW5kYXIuZ2V0SW5zdGFuY2UoKTsNCisJCWludCB5ZWFyID0gY2FsLmdldChDYWxlbmRhci5ZRUFSKTsNCisJCWxhYi5zZXRWYWxpZFllYXIoeWVhcik7DQorCQkNCisJfQ0KKwkNCisJDQorDQorCQ0KKwlwcml2YXRlIHZvaWQgY3JlYXRlQ29udGFpbm1lbnRFZGdlKGZpbmFsIEdyYXBoIGdyYXBoLCBmaW5hbCBVUkkgVVJJQSwgZmluYWwgTm9kZSBub2RlQiApIHsNCisJCQ0KKwkJZmluYWwgRWRnZSBjRWRnZSA9IEVkZ2VJbXBsLmNyZWF0ZUVkZ2UoVVJJQSwgbm9kZUIuZ2V0VVJJKCkpOw0KKwkJDQorCQlmaW5hbCBSZWxhdGl2ZVBoeXNpY2FsUmVsYXRpb25zaGlwTGFiZWwgY29udGFpbkxhYmVsID0gTGFiZWxzRmFjdG9yeS5lSU5TVEFOQ0UNCisJCQkJLmNyZWF0ZVJlbGF0aXZlUGh5c2ljYWxSZWxhdGlvbnNoaXBMYWJlbCgpOw0KKw0KKwkJY29udGFpbkxhYmVsLnNldFVSSU9mSWRlbnRpZmlhYmxlVG9CZUxhYmVsZWQoY0VkZ2UuZ2V0VVJJKCkpOw0KKwkJY29udGFpbkxhYmVsLmdldEN1cnJlbnRSZWxhdGlvbnNoaXAoKS5zZXRSZWxhdGlvbnNoaXAoDQorCQkJCVJlbGF0aXZlUGh5c2ljYWxSZWxhdGlvbnNoaXAuQ09OVEFJTlNfTElURVJBTCk7DQorDQorCQlmaW5hbCBSZWxhdGl2ZVBoeXNpY2FsUmVsYXRpb25zaGlwTGFiZWxWYWx1ZSBjdXJyZW50VmFsdWUgPSBMYWJlbHNGYWN0b3J5LmVJTlNUQU5DRQ0KKwkJCQkuY3JlYXRlUmVsYXRpdmVQaHlzaWNhbFJlbGF0aW9uc2hpcExhYmVsVmFsdWUoKTsNCisJCWN1cnJlbnRWYWx1ZS5zZXRBZGphY2VudChmYWxzZSk7DQorCQljdXJyZW50VmFsdWUNCisJCQkJLnNldFJlbGF0aW9uc2hpcChSZWxhdGl2ZVBoeXNpY2FsUmVsYXRpb25zaGlwLkNPTlRBSU5TX0xJVEVSQUwpOw0KKwkJY29udGFpbkxhYmVsLnNldEN1cnJlbnRWYWx1ZShjdXJyZW50VmFsdWUpOw0KKwkJDQorCQljRWRnZS5zZXREaXJlY3RlZCh0cnVlKTsNCisJCQ0KKwkJU3RyaW5nIG5vZGVBVVJJZnVsbCA9IFVSSUEudG9TdHJpbmcoKTsNCisJCWludCBsYXN0QSA9IG5vZGVBVVJJZnVsbC5sYXN0SW5kZXhPZigiLyIpKzE7DQorCQlTdHJpbmcgbm9kZUFVUkkgPSBub2RlQVVSSWZ1bGwuc3Vic3RyaW5nKGxhc3RBLG5vZGVBVVJJZnVsbC5sZW5ndGgoKSk7DQorCQkNCisJCVN0cmluZyBub2RlQlVSSWZ1bGwgPSBub2RlQi5nZXRVUkkoKS50b1N0cmluZygpOw0KKwkJaW50IGxhc3RCID0gbm9kZUJVUklmdWxsLmxhc3RJbmRleE9mKCIvIikrMTsNCisJCVN0cmluZyBub2RlQlVSSSA9IG5vZGVCVVJJZnVsbC5zdWJzdHJpbmcobGFzdEIsbm9kZUJVUklmdWxsLmxlbmd0aCgpKTsNCisJCQ0KKwkJLy8gY3JlYXRlIHRoZSB1cmk7DQorCQlmaW5hbCBTdHJpbmdCdWlsZGVyIHNiID0gbmV3IFN0cmluZ0J1aWxkZXIoDQorCQkJCSJlZGdlL3JlbGF0aW9uc2hpcC9yZWxhdGl2ZXBoeXNpY2FsLyIpOyAvLyROT04tTkxTLTEkDQorCQlzYi5hcHBlbmQobm9kZUFVUkkpOw0KKwkJc2IuYXBwZW5kKCJfIik7IC8vJE5PTi1OTFMtMSQNCisJCXNiLmFwcGVuZChub2RlQlVSSSk7DQorCQlzYi5hcHBlbmQoIi8iKTsgLy8kTk9OLU5MUy0xJA0KKwkJc2IuYXBwZW5kKFJlbGF0aXZlUGh5c2ljYWxSZWxhdGlvbnNoaXAuQ09OVEFJTlNfTElURVJBTC50b1N0cmluZygpDQorCQkJCS50b0xvd2VyQ2FzZSgpKTsNCisJCQ0KKwkNCisJCWNFZGdlLnNldFVSSShTVEVNVVJJLmNyZWF0ZVVSSShzYi50b1N0cmluZygpKSk7DQorCQljb250YWluTGFiZWwuc2V0VVJJKFNURU1VUkkuY3JlYXRlVVJJKHNiLnRvU3RyaW5nKCkpKTsNCisJCWNFZGdlLnNldExhYmVsKGNvbnRhaW5MYWJlbCk7DQorCQljb250YWluTGFiZWwuc2V0VVJJT2ZJZGVudGlmaWFibGVUb0JlTGFiZWxlZChjRWRnZS5nZXRVUkkoKSk7DQorCQkNCisJCWNFZGdlLmdldER1YmxpbkNvcmUoKS5zZXRUaXRsZShub2RlQi5nZXRVUkkoKS5sYXN0U2VnbWVudCgpKTsNCisJICAgIA0KKw0KKwkJZ3JhcGgucHV0RWRnZShjRWRnZSk7DQorCX0gLy8gY3JlYXRlQ29udGFpbm1lbnRFZGdlIA0KKwkNCisNCisNCisNCisNCisJcHVibGljIGJvb2xlYW4gY29udGFpbnNQb2ludChkb3VibGUgeCwgZG91YmxlIHksIFNlZ21lbnQgZGF0YXBvaW50cykgew0KKwkJaW50IGksIGo7DQorCQlib29sZWFuIGlzSW5zaWRlID0gZmFsc2U7DQorCQlkb3VibGVbXSBwb2ludHMgPSBuZXcgZG91YmxlWzIqZGF0YXBvaW50cy5zaXplKCldOw0KKwkNCisJCWZvciAoaW50IGsgPSAwLCBwb2ludHNJbmRleCA9IDA7IGsgPCBkYXRhcG9pbnRzLnNpemUoKTsgaysrLCBwb2ludHNJbmRleCs9Mikgew0KKwkJIHBvaW50c1twb2ludHNJbmRleF0gPSBkYXRhcG9pbnRzLmxhdGl0dWRlKGspOw0KKwkJIHBvaW50c1twb2ludHNJbmRleCsxXSA9IGRhdGFwb2ludHMubG9uZ2l0dWRlKGspOw0KKwkJfQ0KKwkJDQorCQlpbnQgbnVtT2ZQb2ludHMgPSBwb2ludHMubGVuZ3RoLzI7DQorCSAgICANCisJCWZvciAoaSA9IDAsIGogPSAobnVtT2ZQb2ludHMtMSkqMjsgaSA8IHBvaW50cy5sZW5ndGgtMTsgKSB7DQorCQkJaWYgKCgoKHBvaW50c1tpKzFdPD15KSAmJiAoeTxwb2ludHNbaisxXSkpIHx8DQorCQkJCSgocG9pbnRzW2orMV08PXkpICYmICh5PHBvaW50c1tpKzFdKSkpICYmDQorCQkJCSh4IDwgKHBvaW50c1tqXSAtICBwb2ludHNbaV0pICogKHkgLSBwb2ludHNbaSsxXSkgLyAocG9pbnRzW2orMV0gLSBwb2ludHNbaSsxXSkgKyBwb2ludHNbaV0pKSB7DQorCQkJCWlzSW5zaWRlID0gIWlzSW5zaWRlOw0KKwkJCX0NCisJCQlqID0gaTsNCisJCQlpICs9IDI7CQkJDQorCQl9DQorCQlyZXR1cm4gaXNJbnNpZGU7DQorfQ0KKw0KKw0KKw0KKwlwdWJsaWMgc3RhdGljIFNldDxMYXRMb25nPiBnZXRTcGF0aWFscyhJUHJvamVjdCBwcm9qZWN0LCBVUkkgbG9jYXRpb24pIHsNCisJCS8vVQ0KKwkJTWFwPFN0cmluZyxMYXRMb25nPiBsYXRMb25ncyA9IG5ldyBIYXNoTWFwPFN0cmluZyxMYXRMb25nPigpOw0KKwkJaWYgKHByb2plY3QgIT0gbnVsbCkNCisJCXsNCisNCisJCQlJQ29udGFpbmVyIG1vZGVsRm9sZGVyID0gcHJvamVjdC5nZXRGb2xkZXIoIm1vZGVscyIpOwkNCisJCQlJUmVzb3VyY2VbXSBtb2RlbHMgPSBudWxsOw0KKwkJCXRyeSB7DQorCQkJCW1vZGVscyA9IG1vZGVsRm9sZGVyLm1lbWJlcnMoKTsNCisJCQl9IGNhdGNoKEV4Y2VwdGlvbiBlKSB7DQorCQkJCWUucHJpbnRTdGFja1RyYWNlKCk7DQorCQkJfQ0KKwkJCWlmIChtb2RlbHMgIT0gbnVsbCkgew0KKwkJCQlmb3IoSVJlc291cmNlIHI6bW9kZWxzKSB7DQorCQkJCQkvLyBpZ25vcmUgc3lzdGVtIGZpbGVzDQorCQkJCQlpZihyLmdldE5hbWUoKS5zdGFydHNXaXRoKCIuIikpIGNvbnRpbnVlOw0KKwkJCQkJDQorCQkJCQl0cnkgew0KKwkJCQkJCVVSSSB1cmkgPSBVUkkuY3JlYXRlVVJJKHIuZ2V0TG9jYXRpb25VUkkoKS50b1N0cmluZygpKTsNCisJCQkJCQlJZGVudGlmaWFibGUgaWQgPSBVdGlsaXR5LmdldElkZW50aWZpYWJsZSh1cmkpOwkJCQkNCisJCQkJCQlHcmFwaCBnID0gKChNb2RlbClpZCkuZ2V0Q2Fub25pY2FsR3JhcGgoU1RFTVVSSS5jcmVhdGVVUkkoIiIpLCBudWxsLCBudWxsKTsNCisJCQkJCQlpZihpZCBpbnN0YW5jZW9mIE1vZGVsKSBsYXRMb25ncy5wdXRBbGwoZ2V0R3JhcGhTcGF0aWFscyhnLCBsb2NhdGlvbikpOw0KKwkJCQkJCQkNCisJCQkJCX0gY2F0Y2goRXhjZXB0aW9uIGUpIHsNCisJCQkJCQkvLyBTa2lwIGJhZCBmaWxlDQorCQkJCQl9DQorCQkJCX0NCisJCQl9DQorCQkNCisJCQ0KKwkJCUlDb250YWluZXIgZ3JhcGhzRm9sZGVyID0gcHJvamVjdC5nZXRGb2xkZXIoImdyYXBocyIpOw0KKwkJCUlSZXNvdXJjZVtdIGdyYXBocyA9IG51bGw7DQorCQkJdHJ5IHsNCisJCQkJZ3JhcGhzID0gZ3JhcGhzRm9sZGVyLm1lbWJlcnMoKTsNCisJCQl9IGNhdGNoKEV4Y2VwdGlvbiBlKSB7DQorCQkJCWUucHJpbnRTdGFja1RyYWNlKCk7DQorCQkJfQ0KKwkJCWlmIChncmFwaHMgIT0gbnVsbCkgew0KKwkJCQlmb3IoSVJlc291cmNlIHI6Z3JhcGhzKSB7DQorCQkJCQkvLyBpZ25vcmUgc3lzdGVtIGZpbGVzDQorCQkJCQlpZihyLmdldE5hbWUoKS5zdGFydHNXaXRoKCIuIikpIGNvbnRpbnVlOw0KKwkJCQkJDQorCQkJCQl0cnkgew0KKwkJCQkJCVVSSSB1cmkgPSBVUkkuY3JlYXRlVVJJKHIuZ2V0TG9jYXRpb25VUkkoKS50b1N0cmluZygpKTsNCisJCQkJCQlJZGVudGlmaWFibGUgaWQgPSBVdGlsaXR5LmdldElkZW50aWZpYWJsZSh1cmkpOw0KKwkJCQkJCWlmKGlkIGluc3RhbmNlb2YgR3JhcGgpIGxhdExvbmdzLnB1dEFsbChnZXRHcmFwaFNwYXRpYWxzKChHcmFwaClpZCwgbG9jYXRpb24pKTsNCisJCQkJCQkJDQorCQkJCQl9IGNhdGNoKEV4Y2VwdGlvbiBlKSB7DQorCQkJCQkJLy8gU2tpcCBiYWQgZmlsZQ0KKwkJCQkJfQ0KKwkJCQl9DQorCQkJfQ0KKwkJfQ0KKwkJU2V0PExhdExvbmc+IHJldFZhbCA9IG5ldyBIYXNoU2V0PExhdExvbmc+KCk7ICANCisJCXJldFZhbC5hZGRBbGwobGF0TG9uZ3MudmFsdWVzKCkpOw0KKwkJcmV0dXJuIHJldFZhbDsNCisJfQ0KKw0KKw0KKw0KKw0KKw0KKw0KK3ByaXZhdGUgc3RhdGljIE1hcDxTdHJpbmcsTGF0TG9uZz4gZ2V0R3JhcGhTcGF0aWFscyhHcmFwaCBnLCBVUkkgbG9jYXRpb24pIHsNCisJDQorCU1hcDxTdHJpbmcsTGF0TG9uZz4gbGF0bG9uZ3MgPSBuZXcgSGFzaE1hcDxTdHJpbmcsTGF0TG9uZz4oKTsNCisJZm9yKE5vZGUgbjogZy5nZXROb2RlcygpLnZhbHVlcygpKSB7DQorCQlVUkkgdXJpS2V5ID0gbi5nZXRVUkkoKTsgDQorCQkNCisJCS8vZ2V0IHNwYXRpYWwgaW5mb3JtYXRpb24gb2YgY29udGFpbmluZyBub2RlDQorCQlpZihsb2NhdGlvbiAhPSBudWxsICYmICFsb2NhdGlvbi50b1N0cmluZygpLnRyaW0oKS5lcXVhbHMoIiIpKQ0KKwkJew0KKwkJCS8vVE9ETyBtYWtlIGNoZWNrIGZvciBlbnRpcmUgVVJJIGluc3RlYWQgb2YgbGFzdCBzZWdtZW50PyAod2hlbiBidWcgd2l0aCB3cm9uZyBnZXRDb250YWluZXIgVVJJIGlzIGZpeGVkKQ0KKwkJCS8vaWYgKHVyaUtleS5sYXN0U2VnbWVudCgpLmVxdWFscyhsb2NhdGlvbi5sYXN0U2VnbWVudCgpKSkNCisJCQlpZiAodXJpS2V5LnRvU3RyaW5nKCkuZXF1YWxzKGxvY2F0aW9uLnRvU3RyaW5nKCkpKQ0KKwkJCXsJCQkgIA0KKwkJCSAgLy9VUkkgc3BhdGlhbFVSSSA9IFVSSS5jcmVhdGVVUkkobi5nZXREdWJsaW5Db3JlKCkuZ2V0U3BhdGlhbCgpLnJlcGxhY2UoInN0ZW1zcGF0aWFsOiIsIiIpKTsJCQkgIA0KKwkJCSAgZmluYWwgTGF0TG9uZ1Byb3ZpZGVyIGxhdExvbmdQcm92aWRlciA9IChMYXRMb25nUHJvdmlkZXIpIExhdExvbmdQcm92aWRlckFkYXB0ZXJGYWN0b3J5LklOU1RBTkNFDQorCQkJCS5hZGFwdChuLCBMYXRMb25nUHJvdmlkZXIuY2xhc3MpOw0KKwkJCSAgZmluYWwgTGF0TG9uZyByZXN1bHQgPSBsYXRMb25nUHJvdmlkZXIuZ2V0TGF0TG9uZygpOwkJCSAgDQorCQkJICBsYXRsb25ncy5wdXQodXJpS2V5LnRvU3RyaW5nKCksIHJlc3VsdCk7DQorCQkJfQ0KKwkJfQkJCQkJDQorCQ0KKwl9CQ0KKwkNCisNCisJDQorCXJldHVybiBsYXRsb25nczsNCit9Ly9nZXRHcmFwaFNwYXRpYWxzIA0KKw0KKw0KKw0KKw0KKw0KK3ByaXZhdGUgc3RhdGljIHZvaWQgZml0UGFqZWtJbnRvQ29udGFpbmluZ05vZGUoTm9kZVtdIG5vZGVIb2xkZXIsIFNldDxMYXRMb25nPiBzcGF0aWFsc0xpc3QgKSANCit7DQorLy8gbm90IG9wdGltYWwsIGFzIGlzIHRha2VzIGxhcmdlc3QgYXJlYSBhbmQgZml0cyBpbnRvIHRoaXMuDQorLy8gcHJvYmxlbSBpbiBjYXNlIG9mIGlzbGFuZCBjb3VudHJpZXMsIA0KKy8vIHdoZXJlIGRpZmZlcmVudCBwYWplayBub2RlcyBtaWdodCBiZSBvbiBkaWZmZXJlbnQgaXNsYW5kcw0KKwkvL3NwYXRpYWwgaW5mb3JtYXRpb24gb2YgcGFqZWsgZ3JhcGggbm9kZXMNCisJU2V0PExhdExvbmc+IHBhamVrU3BhdGlhbHNMaXN0ID0gbmV3IEhhc2hTZXQ8TGF0TG9uZz4oKTsJCQkNCisJZm9yIChpbnQgbm9kZWlkeD0wOyBub2RlaWR4PG5vZGVIb2xkZXIubGVuZ3RoOyBub2RlaWR4KyspDQorCXsNCisJCUxhdExvbmdQcm92aWRlciBsYXRMb25nUHJvdmlkZXIgPSAoTGF0TG9uZ1Byb3ZpZGVyKSBMYXRMb25nUHJvdmlkZXJBZGFwdGVyRmFjdG9yeS5JTlNUQU5DRQ0KKwkJLmFkYXB0TmV3KG5vZGVIb2xkZXJbbm9kZWlkeF0sIExhdExvbmdQcm92aWRlci5jbGFzcyk7DQorCQlwYWpla1NwYXRpYWxzTGlzdC5hZGQobGF0TG9uZ1Byb3ZpZGVyLmdldExhdExvbmcoKSk7DQorCX0NCisJDQorCQ0KKwlpZiAoIChzcGF0aWFsc0xpc3Quc2l6ZSgpID09IDApIHx8IHBhamVrU3BhdGlhbHNMaXN0LnNpemUoKSA9PSAwKSAvLyB8fCAoZ3JhcGg9PW51bGwpICkNCisJCXJldHVybjsNCisJDQorCWRvdWJsZSBsYXJnZXN0QXJlYSA9IC0xLjA7DQorCVBvbHlnb24gcGFqZWtOb2RlUG9seSwgcGFqZWtQb2x5LCBuZXdDb250YWluaW5nUG9seT1udWxsOw0KKw0KKwkNCisJLy9nZXQgbGFyZ2VzdCBhcmVhIG9mIHRoZSBjb250YWluaW5nIGFyZWEgbm9kZSBhbmQgaXRzIGNlbnRlcg0KKwlmb3IgKExhdExvbmcgc3BhdGlhbHMgOiBzcGF0aWFsc0xpc3QpDQorICAgIHsNCisgIAlMaXN0PFNlZ21lbnQ+IHN1YnNwYXRpYWxzID0gc3BhdGlhbHMuZ2V0U2VnbWVudHMoKTsgIA0KKwkJZm9yIChTZWdtZW50IHN1YnNwYXRpYWwgOiBzdWJzcGF0aWFscykJDQorCQl7DQorCQkJUG9seWdvbiBwb2x5ID0gZ2V0UG9seWdvbihzdWJzcGF0aWFsKTsNCisJCQlkb3VibGUgYXJlYSA9IE1hdGguYWJzKGdldEFyZWEocG9seSkpOw0KKwkJCWlmKGFyZWEgPj0gbGFyZ2VzdEFyZWEpIHsNCisJCQkJbGFyZ2VzdEFyZWEgPSBhcmVhOw0KKwkJCQkvL2FscmVhZHkgcmVzY2FsZWQ6DQorCQkJCW5ld0NvbnRhaW5pbmdQb2x5ID0gbmV3IFBvbHlnb24ocG9seS54cG9pbnRzLCBwb2x5Lnlwb2ludHMsIHBvbHkubnBvaW50cyk7CQkJCQ0KKwkJCX0NCisJCQkNCisJCX0NCisgICAgfQ0KKwlQb2ludCBjb250YWluaW5nQ2VudGVyID0gZ2V0SW50ZXJpb3JDZW50cm9pZChuZXdDb250YWluaW5nUG9seSk7CQ0KKwkNCisJDQorDQorCQ0KKwkvL2dldCBjZW50ZXIgb2YgZW50aXJlIHBhamVrIHBvbHlnb24NCisJU2VnbWVudEJ1aWxkZXIgc2IgPSBuZXcgU2VnbWVudEJ1aWxkZXIoKTsNCisJDQorCWRvdWJsZSBtYXhMYXQ9RG91YmxlLk5FR0FUSVZFX0lORklOSVRZLCANCisJICAgbWF4TG9uZz1Eb3VibGUuTkVHQVRJVkVfSU5GSU5JVFksDQorCSAgIG1pbkxhdD1Eb3VibGUuTUFYX1ZBTFVFLA0KKwkgICBtaW5Mb25nPURvdWJsZS5NQVhfVkFMVUU7DQorCWZvciAoTGF0TG9uZyBwYWpla1NwYXRpYWwgOiBwYWpla1NwYXRpYWxzTGlzdCkgLy9ub2Rlcw0KKwl7CQ0KKwkJZm9yIChTZWdtZW50IHBhamVrU3Vic3BhY2lhbCA6IHBhamVrU3BhdGlhbC5nZXRTZWdtZW50cygpKQkvL3VzdWFsbHkgc2l6ZSAxDQorCQl7IC8vdGhpcyBtYWRlIHByb2JsZW1zIHdpdGggUG9seWdvbiBmdW5jdGlvbnMsIG5vdyBvbGQgZmFzaGlvbmVkIHdheQ0KKwkJICANCisJCQlmb3IgKGludCB6PTA7IHogPCBwYWpla1N1YnNwYWNpYWwuc2l6ZSgpOyB6KyspIHsNCisJCQltaW5MYXQgPSAocGFqZWtTdWJzcGFjaWFsLmxhdGl0dWRlKHopIDwgbWluTGF0KT8gIHBhamVrU3Vic3BhY2lhbC5sYXRpdHVkZSh6KSA6IG1pbkxhdCA7DQorCQkJbWF4TGF0ID0gKHBhamVrU3Vic3BhY2lhbC5sYXRpdHVkZSh6KSA+IG1heExhdCk/ICBwYWpla1N1YnNwYWNpYWwubGF0aXR1ZGUoeikgOiBtYXhMYXQgOw0KKwkJCW1pbkxvbmcgPSAocGFqZWtTdWJzcGFjaWFsLmxvbmdpdHVkZSh6KSA8IG1pbkxvbmcpID8gcGFqZWtTdWJzcGFjaWFsLmxvbmdpdHVkZSh6KSA6bWluTG9uZyA7DQorCQkJbWF4TG9uZyA9IChwYWpla1N1YnNwYWNpYWwubG9uZ2l0dWRlKHopID4gbWF4TG9uZykgPyBwYWpla1N1YnNwYWNpYWwubG9uZ2l0dWRlKHopIDptYXhMb25nIDsNCisJCQl9DQorCQl9DQorCX0NCisJc2IuYWRkKG1pbkxhdCxtaW5Mb25nKTsNCisJc2IuYWRkKG1pbkxhdCsobWF4TGF0LW1pbkxhdCksbWluTG9uZyk7DQorCXNiLmFkZChtaW5MYXQsbWluTG9uZysobWF4TG9uZy1taW5Mb25nKSk7DQorCXNiLmFkZChtaW5MYXQrKG1heExhdC1taW5MYXQpLG1pbkxvbmcpOw0KKwlzYi5hZGQobWluTGF0KyhtYXhMYXQtbWluTGF0KSwgbWluTG9uZysobWF4TG9uZy1taW5Mb25nKSApOw0KKwlzYi5hZGQobWluTGF0LG1pbkxvbmcpOw0KKwkNCisgICAgcGFqZWtQb2x5ID0gZ2V0UG9seWdvbihzYi50b1NlZ21lbnQoKSk7ICAgDQorCVBvaW50IHBhamVrQ2VudGVyID0gZ2V0SW50ZXJpb3JDZW50cm9pZChwYWpla1BvbHkpOwkJCQ0KKw0KKw0KKwkvL2dldCBtaW5pbWFsIGRpc3RhbmNlIGJldHdlZW4gY2VudGVyIG9mIGNvbnRhaW5pbmcgYXJlYSBhbmQgYm9yZGVyDQorCWRvdWJsZSBtaW5EaXN0ID0gRG91YmxlLk1BWF9WQUxVRTsNCisJDQorCWZvciAoaW50IGk9MDsgaTxuZXdDb250YWluaW5nUG9seS5ucG9pbnRzOyBpKyspDQorCXsJDQorCQlkb3VibGUgZGlzdCA9IE1hdGguc3FydCgNCisJCQkJICBNYXRoLnBvdyhuZXdDb250YWluaW5nUG9seS54cG9pbnRzW2ldIC0gIGNvbnRhaW5pbmdDZW50ZXIueCwgMi4wKQ0KKwkJCQkgICsNCisJCQkgICAgICBNYXRoLnBvdyhuZXdDb250YWluaW5nUG9seS55cG9pbnRzW2ldIC0gIGNvbnRhaW5pbmdDZW50ZXIueSwgMi4wKQ0KKwkJCSAgICAgICk7DQorCQlpZiAoZGlzdCA8IG1pbkRpc3QpIG1pbkRpc3QgPSBkaXN0Ow0KKwl9DQorCQ0KKwkvL2dldCBtYXhpbWFsIGRpc3RhbmNlIGJldHdlZW4gY2VudGVyIG9mIHBhamVrIHBvbHlnb24gYW5kIGJvcmRlcg0KKwlkb3VibGUgbWF4RGlzdCA9IERvdWJsZS5ORUdBVElWRV9JTkZJTklUWTsNCisJZm9yIChMYXRMb25nIHBhamVrU3BhdGlhbCA6IHBhamVrU3BhdGlhbHNMaXN0KSAvL25vZGVzDQorCXsNCisJCWZvciAoU2VnbWVudCBwYWpla1N1YnNwYXRpYWwgOiBwYWpla1NwYXRpYWwuZ2V0U2VnbWVudHMoKSkJLy91c3VhbGx5IHNpemUgMQ0KKwkJew0KKwkJCXBhamVrTm9kZVBvbHkgPSBnZXRQb2x5Z29uKHBhamVrU3Vic3BhdGlhbCk7DQorCQkJZm9yIChpbnQgaT0wOyBpPHBhamVrTm9kZVBvbHkubnBvaW50czsgaSsrKQ0KKwkJCXsNCisJCQkgIGRvdWJsZSBkaXN0ID0gTWF0aC5zcXJ0KA0KKwkJCQlNYXRoLnBvdyhwYWpla05vZGVQb2x5Lnhwb2ludHNbaV0gLSAgcGFqZWtDZW50ZXIueCwgMi4wKQ0KKwkJCQkrDQorCQkJCU1hdGgucG93KHBhamVrTm9kZVBvbHkueXBvaW50c1tpXSAtICBwYWpla0NlbnRlci55LCAyLjApDQorCQkJCSk7DQorCQkJICBpZiAoZGlzdCA+IG1heERpc3QpIG1heERpc3QgPSBkaXN0Ow0KKwkJCX0NCisJCQkNCisJCX0NCisJfQkNCisJLy9UT0RPOiBleGFnZXJyYXRlZCwganVzdCB0byBtYWtlIHN1cmUgaXQgZml0cw0KKwltYXhEaXN0ICs9IE1hdGguc3FydCggTWF0aC5wb3cocGFqZWtQb2x5LmdldEJvdW5kcygpLmdldFdpZHRoKCkvMiwgMikgKyBNYXRoLnBvdyhwYWpla1BvbHkuZ2V0Qm91bmRzKCkuZ2V0SGVpZ2h0KCkvMiwgMikpOyANCisJDQorCS8qU3lzdGVtLmVyci5wcmludGxuKCJDb250YWluaW5nIENlbnRlcjogIiArY29udGFpbmluZ0NlbnRlciApOw0KKwlTeXN0ZW0uZXJyLnByaW50bG4oIkNvbnRhaW5pbmcgQ2VudGVyOiAiICtwYWpla0NlbnRlcik7DQorCVN5c3RlbS5lcnIucHJpbnRsbigibWF4RGlzdDogIiArIG1heERpc3QpOw0KKwlTeXN0ZW0uZXJyLnByaW50bG4oIm1pbkRpc3Q6ICIgKyBtaW5EaXN0KTsNCisJKi8NCisJDQorCS8vdHJhbnNmb3JtDQorCUxhdExvbmcgdHJhbnNmb3JtZWROb2RlcyA9IG5ldyBMYXRMb25nKCk7DQorCQ0KKwlkb3VibGUgZmFjdG9yID0gbWF4RGlzdCAvIG1pbkRpc3Q7DQorCWRvdWJsZSB4dHJhbnMgPSAocGFqZWtDZW50ZXIueCAvIGZhY3RvcikgLSBjb250YWluaW5nQ2VudGVyLng7IA0KKwlkb3VibGUgeXRyYW5zID0gKHBhamVrQ2VudGVyLnkgLyBmYWN0b3IpIC0gY29udGFpbmluZ0NlbnRlci55Ow0KKw0KKwlmb3IgKE5vZGUgbjogbm9kZUhvbGRlcikNCisJew0KKwkJTGF0TG9uZ1Byb3ZpZGVyIGxhdExvbmdQcm92aWRlciA9IChMYXRMb25nUHJvdmlkZXIpIExhdExvbmdQcm92aWRlckFkYXB0ZXJGYWN0b3J5LklOU1RBTkNFDQorCQkuYWRhcHROZXcobiwgTGF0TG9uZ1Byb3ZpZGVyLmNsYXNzKTsNCisJCUxhdExvbmcgcGFqZWtTcGFjaWFsID0gbGF0TG9uZ1Byb3ZpZGVyLmdldExhdExvbmcoKTsNCisJCQ0KKwkJZm9yIChTZWdtZW50IHNlZ21lbnQgOiBwYWpla1NwYWNpYWwuZ2V0U2VnbWVudHMoKSkJLy91c3VhbGx5IHNpemUgMQ0KKwkJewkJCQ0KKwkJCXBhamVrTm9kZVBvbHkgPSBnZXRQb2x5Z29uKHNlZ21lbnQpOw0KKwkJCXNiID0gbmV3IFNlZ21lbnRCdWlsZGVyKCk7DQorCQkJDQorCQkJZm9yIChpbnQgaT0wOyBpPCBzZWdtZW50LnNpemUoKTsgaSsrKQ0KKwkJCXsJCSANCisJCQkgIGRvdWJsZSB4bmV3ID0gKHNlZ21lbnQubGF0aXR1ZGUoaSkgLyBmYWN0b3IpIC0geHRyYW5zL1JFU0NBTEU7DQorCQkJICBkb3VibGUgeW5ldyA9IChzZWdtZW50LmxvbmdpdHVkZShpKSAvIGZhY3RvcikgLSB5dHJhbnMvUkVTQ0FMRTsNCisJCQkgIHNiLmFkZCh4bmV3LCB5bmV3KTsJCQkgIA0KKwkJCX0NCisJCQl0cmFuc2Zvcm1lZE5vZGVzID0gbmV3IExhdExvbmcoKTsNCisJCQl0cmFuc2Zvcm1lZE5vZGVzLmFkZChzYi50b1NlZ21lbnQoKSk7DQorCQkJDQorCQkJDQorCQkJLy9UT0RPIGhlcmUsIHRoZSBpbmxpbmUgc3RyaW5nIGN1dHMgb2ZmIGFmdGVyIHR3byBkaWdpdHMuLiBncmFwaGljcy9zcGF0aWFscyBhcmUgc2NyYW1ibGVkDQorCQkJbi5nZXREdWJsaW5Db3JlKCkuDQorCSAgIAkgICAgc2V0U3BhdGlhbChJbmxpbmVMYXRMb25nRGF0YVByb3ZpZGVyLmNyZWF0ZVNwYXRpYWxJbmxpbmVVUklTdHJpbmcodHJhbnNmb3JtZWROb2RlcykpOw0KKwkJCQ0KKwkJCWZvciAoTm9kZUxhYmVsIGxhYmVsIDogbi5nZXRMYWJlbHMoKSkNCisJCQl7DQorCQkJCWlmIChsYWJlbCBpbnN0YW5jZW9mIEFyZWFMYWJlbCkNCisJCQkJewkNCisJCQkJCWRvdWJsZSBhcmVhID0gKChBcmVhTGFiZWwpbGFiZWwpLmdldEN1cnJlbnRBcmVhVmFsdWUoKS5nZXRBcmVhKCk7DQorCQkJCQlhcmVhIC89IE1hdGgucG93KGZhY3RvciwgMik7DQorCQkJCQlhcmVhID0gKChsb25nKShhcmVhKjEwMDAwMCkpOwkJCQ0KKwkJCQkJYXJlYSAvPSAxMDAwMDA7DQorCQkJCQkoKEFyZWFMYWJlbClsYWJlbCkuZ2V0Q3VycmVudEFyZWFWYWx1ZSgpLnNldEFyZWEoYXJlYSk7DQorCQkJCX0NCisJCQl9DQorCQl9CQkNCisJfSAvL2VuZCBub2RlcyB0cmFuc2Zvcm0JCQ0KK30gLy9lbmQgb2YgZml0UGFqZWtJbnRvQ29udGFpbmluZ05vZGUNCisNCisNCisNCitwcml2YXRlIHN0YXRpYyBQb2x5Z29uIGdldFBvbHlnb24oU2VnbWVudCBzZWdtZW50KQ0KK3sNCisJaW50IHNpemUgPSBzZWdtZW50LnNpemUoKTsNCisJIGludFtdIGx0ID0gbmV3IGludFtzaXplXTsNCisJIGludFtdIGxnID0gbmV3IGludFtzaXplXTsNCisJIGZvciAoaW50IGkgPSAwOyBpIDwgc2l6ZTsgaSArKykgew0KKwkJIAkNCisJIAlpZiAoKHNlZ21lbnQubGF0aXR1ZGUoaSkqUkVTQ0FMRSA+IEludGVnZXIuTUFYX1ZBTFVFKSB8fCANCisJIAkJKHNlZ21lbnQubGF0aXR1ZGUoaSkqUkVTQ0FMRSA+IEludGVnZXIuTUFYX1ZBTFVFKSkNCisJIAkJQWN0aXZhdG9yLmxvZ0Vycm9yKCJDb29yZGluYXRlIHJhbmdlIHRvbyBsYXJnZS4uLiBFeGl0aW5nISIsIG51bGwpOw0KKwkJDQorCSAJbHRbaV0gPSAoaW50KSAoc2VnbWVudC5sYXRpdHVkZShpKSpSRVNDQUxFICApOw0KKwkJbGdbaV0gPSAoaW50KSAoc2VnbWVudC5sb25naXR1ZGUoaSkqUkVTQ0FMRSApOw0KKwkgfQ0KKwkNCisJIA0KKwkgIC8vIGNoZWNrIGlmIGl0IGlzIGEgcG9seWdvbiwgcmVwYWlyIGlmIG5lY2Vzc2FyeQ0KKwkgIGlmKCEoc2l6ZSA+IDIgJiYgbHRbMF0gPT0gbHRbc2l6ZS0xXSAmJiBsZ1swXSA9PSBsZ1tzaXplIC0gMV0NCisJCSApKSANCisJICB7DQorCQkgIGlmIChzaXplID4gMikgeyANCisJCQkgIHNpemUrKzsNCisJCQkgIGludFtdIGx0X25ldyA9IG5ldyBpbnRbc2l6ZV07DQorCQkJICBpbnRbXSBsZ19uZXcgPSBuZXcgaW50W3NpemVdOw0KKwkJCSAgZm9yIChpbnQgaT0wOyBpPHNpemUtMTsgaSsrKQ0KKwkJCSAgew0KKwkJCQkgIGx0X25ld1tpXSA9IGx0W2ldOw0KKwkJCQkgIGxnX25ld1tpXSA9IGxnW2ldOw0KKwkJCSAgfQ0KKwkJCSAgbHRfbmV3W3NpemUtMV0gPSBsdFswXTsNCisJCQkgIGxnX25ld1tzaXplLTFdID0gbGdbMF07DQorCQkJICBpZihzaXplID4gMiAmJiBsdF9uZXdbMF0gPT0gbHRfbmV3W3NpemUtMV0gJiYgbGdfbmV3WzBdID09IGxnX25ld1tzaXplIC0gMV0pDQorCQkJCSByZXR1cm4gbmV3IFBvbHlnb24obHRfbmV3LCBsZ19uZXcsIHNpemUpOw0KKwkJICB9DQorCQkgIGVsc2UgDQorCQkgIHsJICANCisJCQkgIEFjdGl2YXRvci5sb2dFcnJvcigiUmV0dXJuZWQgbnVsbCBQb2x5Z29uIHBvaW50ZXIiLCBudWxsKTsNCisJCQkgIHJldHVybiBudWxsOw0KKwkJICB9DQorCSAgfQ0KKwkgDQorCSByZXR1cm4gbmV3IFBvbHlnb24obHQsIGxnLCBzaXplKTsNCisJIA0KK30NCisNCisNCitwdWJsaWMgc3RhdGljIGRvdWJsZSBnZXRBcmVhKFBvbHlnb24gcCkgew0KKwlkb3VibGUgYXJlYSA9IDA7DQorCWludFtdIHggPSBwLnhwb2ludHM7DQorCWludFtdIHkgPSBwLnlwb2ludHM7DQorCQ0KKw0KKwlmb3IgKGludCBpID0gMDsgaSA8IHgubGVuZ3RoLTE7IGkgKyspIHsNCisJCWFyZWEgKz0gKCgoZG91YmxlKXhbaV0qKGRvdWJsZSl5W2krMV0pIC0gKChkb3VibGUpeFtpKzFdKihkb3VibGUpeVtpXSkpOw0KKwl9DQorCWFyZWEgLz0gMi4wOw0KKwlyZXR1cm4gYXJlYT4wP2FyZWE6LWFyZWE7DQorfQ0KKw0KKw0KK3B1YmxpYyBzdGF0aWMgUG9pbnQgZ2V0SW50ZXJpb3JDZW50cm9pZChQb2x5Z29uIHApIHsNCisJZG91YmxlIG1heFJhbmdlID0gLTEuMDsNCisJZG91YmxlIGN4ID0gMDsNCisJZG91YmxlIGN5ID0gMDsNCisJUmVjdGFuZ2xlIHIgPSBwLmdldEJvdW5kcygpOw0KKwlmaW5hbCBkb3VibGUgU1RFUCA9IDEwMC4wOw0KKwkNCisJZG91YmxlIGRlbHRheCA9IE1hdGguYWJzKChkb3VibGUpIHIud2lkdGgpOw0KKwlkb3VibGUgZGVsdGF5ID0gTWF0aC5hYnMoKGRvdWJsZSkgci5oZWlnaHQpOw0KKwkNCisJZGVsdGF4IC89IFNURVA7DQorCWRlbHRheSAvPSBTVEVQOw0KKwkNCisJZG91YmxlIHggPSByLmdldE1pblgoKTsNCisJZG91YmxlIHkgPSByLmdldE1pblkoKTsNCisNCisJZm9yIChpbnQgaSA9IDA7IGkgPD0gKGludCkgU1RFUDsgaSArKykgew0KKwkJeSA9IHIuZ2V0TWluWSgpOw0KKwkJZm9yKGludCBqID0gMDsgaiA8PSAoaW50KVNURVA7IGogKyspIHsNCisJCQlpZihwLmNvbnRhaW5zKHgsIHkpKSB7DQorCQkJCWRvdWJsZSByYW5nZSA9IGdldFNxcmRFZGdlUmFuZ2UoeCx5LHApOw0KKwkJCQkNCisJCQkJaWYgKHJhbmdlID49IG1heFJhbmdlKSB7DQorCQkJCQltYXhSYW5nZSA9IHJhbmdlOw0KKwkJCQkJY3ggPSB4Ow0KKwkJCQkJY3kgPSB5Ow0KKwkJCQkJDQorCQkJCX0NCisJCQl9DQorCQkJeSArPSBkZWx0YXk7DQorCQl9DQorCQl4ICs9IGRlbHRheDsNCisJfQ0KKwkNCisJeCA9IGN4LWRlbHRheDsNCisJeSA9IGN5LWRlbHRheTsNCisJDQorCWRvdWJsZSB5MCA9IHk7DQorCWRlbHRheCAvPSBTVEVQOw0KKwlkZWx0YXkgLz0gU1RFUDsNCisJZm9yIChpbnQgaSA9IDA7IGkgPD0gKGludCkoMi4wKiBTVEVQKTsgaSArKykgew0KKwkJeSA9IHkwOw0KKwkJZm9yKGludCBqID0gMDsgaiA8PSAoaW50KSgyLjAqU1RFUCk7IGogKyspIHsNCisJCQlpZihwLmNvbnRhaW5zKHgsIHkpKSB7DQorCQkJCWRvdWJsZSByYW5nZSA9IGdldFNxcmRFZGdlUmFuZ2UoeCx5LHApOw0KKwkJCQkNCisJCQkJaWYgKHJhbmdlID49IG1heFJhbmdlKSB7DQorCQkJCQltYXhSYW5nZSA9IHJhbmdlOw0KKwkJCQkJY3ggPSB4Ow0KKwkJCQkJY3kgPSB5Ow0KKwkJCQkJDQorCQkJCX0NCisJCQl9DQorCQkJeSArPSBkZWx0YXk7DQorCQl9DQorCQl4ICs9IGRlbHRheDsNCisJfQ0KKwkNCisJaW50IGl4ID0gKGludClNYXRoLnJvdW5kKGN4KTsNCisJaW50IGl5ID0gKGludClNYXRoLnJvdW5kKGN5KTsNCisJUG9pbnQgY2VudGVyID0gbmV3IFBvaW50KGl4LGl5KTsNCisJDQorCXJldHVybiBjZW50ZXI7DQorfS8vIGVuZCBvZiBnZXQgaW5uZXIgY2VudHJvaWQNCisNCisNCitwdWJsaWMgc3RhdGljIGRvdWJsZSBnZXRTcXJkRWRnZVJhbmdlKGRvdWJsZSBxeCwgZG91YmxlIHF5LCBQb2x5Z29uIHApIHsNCisJZG91YmxlIHJhbmdlID0gRG91YmxlLk1BWF9WQUxVRTsNCisJaW50W10gaXggPSBwLnhwb2ludHM7DQorCWludFtdIGl5ID0gcC55cG9pbnRzOw0KKwkJCQ0KKwlmb3IgKGludCBpPTA7aTxpeC5sZW5ndGg7aSsrKSB7DQorCQlkb3VibGUgeCA9IGl4W2ldOw0KKwkJZG91YmxlIHkgPSBpeVtpXTsNCisJCWRvdWJsZSBkeCA9IHF4LXg7DQorCQlkb3VibGUgZHkgPSBxeS15Ow0KKwkJZG91YmxlIHIgPSAoZHgqZHgpICsgKGR5KmR5KTsNCisJCWlmIChyIDw9IHJhbmdlKSByYW5nZSA9IHI7DQorCX0NCisJcmV0dXJuIHJhbmdlOw0KKwkNCit9DQorDQorcHVibGljIGNsYXNzIEVkZ2VDb250YWluZXINCit7DQorCWludCBhOw0KKwlpbnQgYjsNCisJaW50IGJvcmRlckxlbmd0aDsNCisJTGlua2VkSGFzaE1hcDxTdHJpbmcsIGRvdWJsZVtdPiB2UG9wdWxhdGlvbjsNCisJDQorCXB1YmxpYyBFZGdlQ29udGFpbmVyKGludCBhLCBpbnQgYiwgaW50IGJvcmRlckxlbmd0aCwgTGlua2VkSGFzaE1hcDxTdHJpbmcsIGRvdWJsZVtdPiB2UG9wdWxhdGlvbikNCisJew0KKwkJdGhpcy5hID0gYTsNCisJCXRoaXMuYiA9IGI7DQorCQl0aGlzLmJvcmRlckxlbmd0aCA9IGJvcmRlckxlbmd0aDsNCisJCXRoaXMudlBvcHVsYXRpb24gPSB2UG9wdWxhdGlvbjsNCisJfQ0KKwkNCisJDQorfQ0KKw0KK30gLy9QYWpla05ldEdyYXBoR2VuZXJhdG9ySW1wbCANCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhnZW5lcmF0b3JzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2dyYXBoZ2VuZXJhdG9ycy9pbXBsL1BsYXRlQ2FycmVlR2xvYmVHcmFwaEdlbmVyYXRvckltcGwuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaGdlbmVyYXRvcnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZ3JhcGhnZW5lcmF0b3JzL2ltcGwvUGxhdGVDYXJyZWVHbG9iZUdyYXBoR2VuZXJhdG9ySW1wbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ2NDk0MjIKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhnZW5lcmF0b3JzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2dyYXBoZ2VuZXJhdG9ycy9pbXBsL1BsYXRlQ2FycmVlR2xvYmVHcmFwaEdlbmVyYXRvckltcGwuamF2YQpAQCAtMCwwICsxLDIzNyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOSwyMDEwIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaGdlbmVyYXRvcnMuaW1wbDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5pbXBsLkVOb3RpZmljYXRpb25JbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5HcmFwaDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhdHRpY2UuR3JhcGhMYXR0aWNlR2VuZXJhdG9ySW50ZXJmYWNlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGF0dGljZS5pbXBsLkxhdHRpY2VHZW5lcmF0b3JVdGlsaXR5SW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmdyYXBoZ2VuZXJhdG9ycy5HcmFwaGdlbmVyYXRvcnNQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhnZW5lcmF0b3JzLlBsYXRlQ2FycmVlR2xvYmVHcmFwaEdlbmVyYXRvcjsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPlBsYXRlIENhcnJlZSBHbG9iZSBHcmFwaCBHZW5lcmF0b3I8L2I+PC9lbT4nLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiA8cD4KKyAqIFRoZSBmb2xsb3dpbmcgZmVhdHVyZXMgYXJlIGltcGxlbWVudGVkOgorICogPHVsPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhnZW5lcmF0b3JzLmltcGwuUGxhdGVDYXJyZWVHbG9iZUdyYXBoR2VuZXJhdG9ySW1wbCNnZXRBbmd1bGFyU3RlcCA8ZW0+QW5ndWxhciBTdGVwPC9lbT59PC9saT4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmdyYXBoZ2VuZXJhdG9ycy5pbXBsLlBsYXRlQ2FycmVlR2xvYmVHcmFwaEdlbmVyYXRvckltcGwjZ2V0UmFkaXVzIDxlbT5SYWRpdXM8L2VtPn08L2xpPgorICogPC91bD4KKyAqIDwvcD4KKyAqCisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBQbGF0ZUNhcnJlZUdsb2JlR3JhcGhHZW5lcmF0b3JJbXBsIGV4dGVuZHMgTGF0dGljZUdyYXBoR2VuZXJhdG9ySW1wbCBpbXBsZW1lbnRzIFBsYXRlQ2FycmVlR2xvYmVHcmFwaEdlbmVyYXRvciB7CisJLyoqCisJICogVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldEFuZ3VsYXJTdGVwKCkgPGVtPkFuZ3VsYXIgU3RlcDwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZ2V0QW5ndWxhclN0ZXAoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgaW50IEFOR1VMQVJfU1RFUF9FREVGQVVMVCA9IDEwOworCisJLyoqCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0QW5ndWxhclN0ZXAoKSA8ZW0+QW5ndWxhciBTdGVwPC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNnZXRBbmd1bGFyU3RlcCgpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIGludCBhbmd1bGFyU3RlcCA9IEFOR1VMQVJfU1RFUF9FREVGQVVMVDsKKworCS8qKgorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRSYWRpdXMoKSA8ZW0+UmFkaXVzPC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNnZXRSYWRpdXMoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgZG91YmxlIFJBRElVU19FREVGQVVMVCA9IDYzNzEuMDsKKworCS8qKgorCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldFJhZGl1cygpIDxlbT5SYWRpdXM8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI2dldFJhZGl1cygpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIGRvdWJsZSByYWRpdXMgPSBSQURJVVNfRURFRkFVTFQ7CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJcHVibGljIFBsYXRlQ2FycmVlR2xvYmVHcmFwaEdlbmVyYXRvckltcGwoKSB7CisJCXN1cGVyKCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIEVDbGFzcyBlU3RhdGljQ2xhc3MoKSB7CisJCXJldHVybiBHcmFwaGdlbmVyYXRvcnNQYWNrYWdlLkxpdGVyYWxzLlBMQVRFX0NBUlJFRV9HTE9CRV9HUkFQSF9HRU5FUkFUT1I7CisJfQorCisJLyoqCisJICogQHNlZSBMYXR0aWNlR2VuZXJhdG9yVXRpbGl0eUltcGwKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgR3JhcGggZ2V0R3JhcGgoKSB7CisJCUxhdHRpY2VHZW5lcmF0b3JVdGlsaXR5SW1wbCBzbGdpID0gbmV3IExhdHRpY2VHZW5lcmF0b3JVdGlsaXR5SW1wbChHcmFwaExhdHRpY2VHZW5lcmF0b3JJbnRlcmZhY2UuR0xPQkVfTEFUVElDRV9UWVBFKTsKKwkJR3JhcGggZyA9IHNsZ2kuZ2V0UGxhdGVDYXJlZUdyYXBoKHRoaXMuZ2V0QW5ndWxhclN0ZXAoKSwgdGhpcy5nZXRSYWRpdXMoKSwgdGhpcy5pc1VzZU5lYXJlc3ROZWlnaGJvcnMoKSwgdGhpcy5pc1VzZU5leHROZWFyZXN0TmVpZ2hib3JzKCksIHRoaXMuaXNQZXJpb2RpY0JvdW5kYXJpZXMoKSk7CisJCQorCQlyZXR1cm4gZzsKKwkJCisKKwl9CisJCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIGludCBnZXRBbmd1bGFyU3RlcCgpIHsKKwkJcmV0dXJuIGFuZ3VsYXJTdGVwOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIHNldEFuZ3VsYXJTdGVwKGludCBuZXdBbmd1bGFyU3RlcCkgeworCQlpbnQgb2xkQW5ndWxhclN0ZXAgPSBhbmd1bGFyU3RlcDsKKwkJYW5ndWxhclN0ZXAgPSBuZXdBbmd1bGFyU3RlcDsKKwkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQorCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgR3JhcGhnZW5lcmF0b3JzUGFja2FnZS5QTEFURV9DQVJSRUVfR0xPQkVfR1JBUEhfR0VORVJBVE9SX19BTkdVTEFSX1NURVAsIG9sZEFuZ3VsYXJTdGVwLCBhbmd1bGFyU3RlcCkpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBkb3VibGUgZ2V0UmFkaXVzKCkgeworCQlyZXR1cm4gcmFkaXVzOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIHNldFJhZGl1cyhkb3VibGUgbmV3UmFkaXVzKSB7CisJCWRvdWJsZSBvbGRSYWRpdXMgPSByYWRpdXM7CisJCXJhZGl1cyA9IG5ld1JhZGl1czsKKwkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQorCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgR3JhcGhnZW5lcmF0b3JzUGFja2FnZS5QTEFURV9DQVJSRUVfR0xPQkVfR1JBUEhfR0VORVJBVE9SX19SQURJVVMsIG9sZFJhZGl1cywgcmFkaXVzKSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIE9iamVjdCBlR2V0KGludCBmZWF0dXJlSUQsIGJvb2xlYW4gcmVzb2x2ZSwgYm9vbGVhbiBjb3JlVHlwZSkgeworCQlzd2l0Y2ggKGZlYXR1cmVJRCkgeworCQkJY2FzZSBHcmFwaGdlbmVyYXRvcnNQYWNrYWdlLlBMQVRFX0NBUlJFRV9HTE9CRV9HUkFQSF9HRU5FUkFUT1JfX0FOR1VMQVJfU1RFUDoKKwkJCQlyZXR1cm4gZ2V0QW5ndWxhclN0ZXAoKTsKKwkJCWNhc2UgR3JhcGhnZW5lcmF0b3JzUGFja2FnZS5QTEFURV9DQVJSRUVfR0xPQkVfR1JBUEhfR0VORVJBVE9SX19SQURJVVM6CisJCQkJcmV0dXJuIGdldFJhZGl1cygpOworCQl9CisJCXJldHVybiBzdXBlci5lR2V0KGZlYXR1cmVJRCwgcmVzb2x2ZSwgY29yZVR5cGUpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGVTZXQoaW50IGZlYXR1cmVJRCwgT2JqZWN0IG5ld1ZhbHVlKSB7CisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7CisJCQljYXNlIEdyYXBoZ2VuZXJhdG9yc1BhY2thZ2UuUExBVEVfQ0FSUkVFX0dMT0JFX0dSQVBIX0dFTkVSQVRPUl9fQU5HVUxBUl9TVEVQOgorCQkJCXNldEFuZ3VsYXJTdGVwKChJbnRlZ2VyKW5ld1ZhbHVlKTsKKwkJCQlyZXR1cm47CisJCQljYXNlIEdyYXBoZ2VuZXJhdG9yc1BhY2thZ2UuUExBVEVfQ0FSUkVFX0dMT0JFX0dSQVBIX0dFTkVSQVRPUl9fUkFESVVTOgorCQkJCXNldFJhZGl1cygoRG91YmxlKW5ld1ZhbHVlKTsKKwkJCQlyZXR1cm47CisJCX0KKwkJc3VwZXIuZVNldChmZWF0dXJlSUQsIG5ld1ZhbHVlKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBlVW5zZXQoaW50IGZlYXR1cmVJRCkgeworCQlzd2l0Y2ggKGZlYXR1cmVJRCkgeworCQkJY2FzZSBHcmFwaGdlbmVyYXRvcnNQYWNrYWdlLlBMQVRFX0NBUlJFRV9HTE9CRV9HUkFQSF9HRU5FUkFUT1JfX0FOR1VMQVJfU1RFUDoKKwkJCQlzZXRBbmd1bGFyU3RlcChBTkdVTEFSX1NURVBfRURFRkFVTFQpOworCQkJCXJldHVybjsKKwkJCWNhc2UgR3JhcGhnZW5lcmF0b3JzUGFja2FnZS5QTEFURV9DQVJSRUVfR0xPQkVfR1JBUEhfR0VORVJBVE9SX19SQURJVVM6CisJCQkJc2V0UmFkaXVzKFJBRElVU19FREVGQVVMVCk7CisJCQkJcmV0dXJuOworCQl9CisJCXN1cGVyLmVVbnNldChmZWF0dXJlSUQpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBib29sZWFuIGVJc1NldChpbnQgZmVhdHVyZUlEKSB7CisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7CisJCQljYXNlIEdyYXBoZ2VuZXJhdG9yc1BhY2thZ2UuUExBVEVfQ0FSUkVFX0dMT0JFX0dSQVBIX0dFTkVSQVRPUl9fQU5HVUxBUl9TVEVQOgorCQkJCXJldHVybiBhbmd1bGFyU3RlcCAhPSBBTkdVTEFSX1NURVBfRURFRkFVTFQ7CisJCQljYXNlIEdyYXBoZ2VuZXJhdG9yc1BhY2thZ2UuUExBVEVfQ0FSUkVFX0dMT0JFX0dSQVBIX0dFTkVSQVRPUl9fUkFESVVTOgorCQkJCXJldHVybiByYWRpdXMgIT0gUkFESVVTX0VERUZBVUxUOworCQl9CisJCXJldHVybiBzdXBlci5lSXNTZXQoZmVhdHVyZUlEKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkgeworCQlpZiAoZUlzUHJveHkoKSkgcmV0dXJuIHN1cGVyLnRvU3RyaW5nKCk7CisKKwkJU3RyaW5nQnVmZmVyIHJlc3VsdCA9IG5ldyBTdHJpbmdCdWZmZXIoc3VwZXIudG9TdHJpbmcoKSk7CisJCXJlc3VsdC5hcHBlbmQoIiAoYW5ndWxhclN0ZXA6ICIpOworCQlyZXN1bHQuYXBwZW5kKGFuZ3VsYXJTdGVwKTsKKwkJcmVzdWx0LmFwcGVuZCgiLCByYWRpdXM6ICIpOworCQlyZXN1bHQuYXBwZW5kKHJhZGl1cyk7CisJCXJlc3VsdC5hcHBlbmQoJyknKTsKKwkJcmV0dXJuIHJlc3VsdC50b1N0cmluZygpOworCX0KKworfSAvL1BsYXRlQ2FycmVlR2xvYmVHcmFwaEdlbmVyYXRvckltcGwKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaGdlbmVyYXRvcnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZ3JhcGhnZW5lcmF0b3JzL2ltcGwvU3F1YXJlTGF0dGljZUdyYXBoR2VuZXJhdG9ySW1wbC5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmdyYXBoZ2VuZXJhdG9ycy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9ncmFwaGdlbmVyYXRvcnMvaW1wbC9TcXVhcmVMYXR0aWNlR3JhcGhHZW5lcmF0b3JJbXBsLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzcwYjc2YQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaGdlbmVyYXRvcnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZ3JhcGhnZW5lcmF0b3JzL2ltcGwvU3F1YXJlTGF0dGljZUdyYXBoR2VuZXJhdG9ySW1wbC5qYXZhCkBAIC0wLDAgKzEsMjg0IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA5LDIwMTAgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmdyYXBoZ2VuZXJhdG9ycy5pbXBsOworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLmltcGwuRU5vdGlmaWNhdGlvbkltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkdyYXBoOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGF0dGljZS5HcmFwaExhdHRpY2VHZW5lcmF0b3JJbnRlcmZhY2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYXR0aWNlLmltcGwuTGF0dGljZUdlbmVyYXRvclV0aWxpdHlJbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhnZW5lcmF0b3JzLkdyYXBoZ2VuZXJhdG9yc1BhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaGdlbmVyYXRvcnMuU3F1YXJlTGF0dGljZUdyYXBoR2VuZXJhdG9yOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiBBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+U3F1YXJlIExhdHRpY2UgR3JhcGggR2VuZXJhdG9yPC9iPjwvZW0+Jy4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogPHA+CisgKiBUaGUgZm9sbG93aW5nIGZlYXR1cmVzIGFyZSBpbXBsZW1lbnRlZDoKKyAqIDx1bD4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmdyYXBoZ2VuZXJhdG9ycy5pbXBsLlNxdWFyZUxhdHRpY2VHcmFwaEdlbmVyYXRvckltcGwjZ2V0WFNpemUgPGVtPlhTaXplPC9lbT59PC9saT4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmdyYXBoZ2VuZXJhdG9ycy5pbXBsLlNxdWFyZUxhdHRpY2VHcmFwaEdlbmVyYXRvckltcGwjZ2V0WVNpemUgPGVtPllTaXplPC9lbT59PC9saT4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmdyYXBoZ2VuZXJhdG9ycy5pbXBsLlNxdWFyZUxhdHRpY2VHcmFwaEdlbmVyYXRvckltcGwjZ2V0QXJlYSA8ZW0+QXJlYTwvZW0+fTwvbGk+CisgKiA8L3VsPgorICogPC9wPgorICoKKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIFNxdWFyZUxhdHRpY2VHcmFwaEdlbmVyYXRvckltcGwgZXh0ZW5kcyBMYXR0aWNlR3JhcGhHZW5lcmF0b3JJbXBsIGltcGxlbWVudHMgU3F1YXJlTGF0dGljZUdyYXBoR2VuZXJhdG9yIHsKKwkvKioKKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0WFNpemUoKSA8ZW0+WFNpemU8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI2dldFhTaXplKCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIGludCBYU0laRV9FREVGQVVMVCA9IDEwOworCS8qKgorCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldFhTaXplKCkgPGVtPlhTaXplPC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNnZXRYU2l6ZSgpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIGludCB4U2l6ZSA9IFhTSVpFX0VERUZBVUxUOworCS8qKgorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRZU2l6ZSgpIDxlbT5ZU2l6ZTwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZ2V0WVNpemUoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgaW50IFlTSVpFX0VERUZBVUxUID0gMTA7CisJLyoqCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0WVNpemUoKSA8ZW0+WVNpemU8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI2dldFlTaXplKCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgaW50IHlTaXplID0gWVNJWkVfRURFRkFVTFQ7CisKKwkvKioKKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0QXJlYSgpIDxlbT5BcmVhPC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNnZXRBcmVhKCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIGRvdWJsZSBBUkVBX0VERUZBVUxUID0gMjAyNS4wOworCS8qKgorCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldEFyZWEoKSA8ZW0+QXJlYTwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZ2V0QXJlYSgpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIGRvdWJsZSBhcmVhID0gQVJFQV9FREVGQVVMVDsKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlwdWJsaWMgU3F1YXJlTGF0dGljZUdyYXBoR2VuZXJhdG9ySW1wbCgpIHsKKwkJc3VwZXIoKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgRUNsYXNzIGVTdGF0aWNDbGFzcygpIHsKKwkJcmV0dXJuIEdyYXBoZ2VuZXJhdG9yc1BhY2thZ2UuTGl0ZXJhbHMuU1FVQVJFX0xBVFRJQ0VfR1JBUEhfR0VORVJBVE9SOworCX0KKwkKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgaW50IGdldFhTaXplKCkgeworCQlyZXR1cm4geFNpemU7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgc2V0WFNpemUoaW50IG5ld1hTaXplKSB7CisJCWludCBvbGRYU2l6ZSA9IHhTaXplOworCQl4U2l6ZSA9IG5ld1hTaXplOworCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpCisJCQllTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBHcmFwaGdlbmVyYXRvcnNQYWNrYWdlLlNRVUFSRV9MQVRUSUNFX0dSQVBIX0dFTkVSQVRPUl9fWFNJWkUsIG9sZFhTaXplLCB4U2l6ZSkpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBpbnQgZ2V0WVNpemUoKSB7CisJCXJldHVybiB5U2l6ZTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRZU2l6ZShpbnQgbmV3WVNpemUpIHsKKwkJaW50IG9sZFlTaXplID0geVNpemU7CisJCXlTaXplID0gbmV3WVNpemU7CisJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkKKwkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIEdyYXBoZ2VuZXJhdG9yc1BhY2thZ2UuU1FVQVJFX0xBVFRJQ0VfR1JBUEhfR0VORVJBVE9SX19ZU0laRSwgb2xkWVNpemUsIHlTaXplKSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIGRvdWJsZSBnZXRBcmVhKCkgeworCQlyZXR1cm4gYXJlYTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRBcmVhKGRvdWJsZSBuZXdBcmVhKSB7CisJCWRvdWJsZSBvbGRBcmVhID0gYXJlYTsKKwkJYXJlYSA9IG5ld0FyZWE7CisJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkKKwkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIEdyYXBoZ2VuZXJhdG9yc1BhY2thZ2UuU1FVQVJFX0xBVFRJQ0VfR1JBUEhfR0VORVJBVE9SX19BUkVBLCBvbGRBcmVhLCBhcmVhKSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIE9iamVjdCBlR2V0KGludCBmZWF0dXJlSUQsIGJvb2xlYW4gcmVzb2x2ZSwgYm9vbGVhbiBjb3JlVHlwZSkgeworCQlzd2l0Y2ggKGZlYXR1cmVJRCkgeworCQkJY2FzZSBHcmFwaGdlbmVyYXRvcnNQYWNrYWdlLlNRVUFSRV9MQVRUSUNFX0dSQVBIX0dFTkVSQVRPUl9fWFNJWkU6CisJCQkJcmV0dXJuIGdldFhTaXplKCk7CisJCQljYXNlIEdyYXBoZ2VuZXJhdG9yc1BhY2thZ2UuU1FVQVJFX0xBVFRJQ0VfR1JBUEhfR0VORVJBVE9SX19ZU0laRToKKwkJCQlyZXR1cm4gZ2V0WVNpemUoKTsKKwkJCWNhc2UgR3JhcGhnZW5lcmF0b3JzUGFja2FnZS5TUVVBUkVfTEFUVElDRV9HUkFQSF9HRU5FUkFUT1JfX0FSRUE6CisJCQkJcmV0dXJuIGdldEFyZWEoKTsKKwkJfQorCQlyZXR1cm4gc3VwZXIuZUdldChmZWF0dXJlSUQsIHJlc29sdmUsIGNvcmVUeXBlKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBlU2V0KGludCBmZWF0dXJlSUQsIE9iamVjdCBuZXdWYWx1ZSkgeworCQlzd2l0Y2ggKGZlYXR1cmVJRCkgeworCQkJY2FzZSBHcmFwaGdlbmVyYXRvcnNQYWNrYWdlLlNRVUFSRV9MQVRUSUNFX0dSQVBIX0dFTkVSQVRPUl9fWFNJWkU6CisJCQkJc2V0WFNpemUoKEludGVnZXIpbmV3VmFsdWUpOworCQkJCXJldHVybjsKKwkJCWNhc2UgR3JhcGhnZW5lcmF0b3JzUGFja2FnZS5TUVVBUkVfTEFUVElDRV9HUkFQSF9HRU5FUkFUT1JfX1lTSVpFOgorCQkJCXNldFlTaXplKChJbnRlZ2VyKW5ld1ZhbHVlKTsKKwkJCQlyZXR1cm47CisJCQljYXNlIEdyYXBoZ2VuZXJhdG9yc1BhY2thZ2UuU1FVQVJFX0xBVFRJQ0VfR1JBUEhfR0VORVJBVE9SX19BUkVBOgorCQkJCXNldEFyZWEoKERvdWJsZSluZXdWYWx1ZSk7CisJCQkJcmV0dXJuOworCQl9CisJCXN1cGVyLmVTZXQoZmVhdHVyZUlELCBuZXdWYWx1ZSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgZVVuc2V0KGludCBmZWF0dXJlSUQpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJCWNhc2UgR3JhcGhnZW5lcmF0b3JzUGFja2FnZS5TUVVBUkVfTEFUVElDRV9HUkFQSF9HRU5FUkFUT1JfX1hTSVpFOgorCQkJCXNldFhTaXplKFhTSVpFX0VERUZBVUxUKTsKKwkJCQlyZXR1cm47CisJCQljYXNlIEdyYXBoZ2VuZXJhdG9yc1BhY2thZ2UuU1FVQVJFX0xBVFRJQ0VfR1JBUEhfR0VORVJBVE9SX19ZU0laRToKKwkJCQlzZXRZU2l6ZShZU0laRV9FREVGQVVMVCk7CisJCQkJcmV0dXJuOworCQkJY2FzZSBHcmFwaGdlbmVyYXRvcnNQYWNrYWdlLlNRVUFSRV9MQVRUSUNFX0dSQVBIX0dFTkVSQVRPUl9fQVJFQToKKwkJCQlzZXRBcmVhKEFSRUFfRURFRkFVTFQpOworCQkJCXJldHVybjsKKwkJfQorCQlzdXBlci5lVW5zZXQoZmVhdHVyZUlEKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgYm9vbGVhbiBlSXNTZXQoaW50IGZlYXR1cmVJRCkgeworCQlzd2l0Y2ggKGZlYXR1cmVJRCkgeworCQkJY2FzZSBHcmFwaGdlbmVyYXRvcnNQYWNrYWdlLlNRVUFSRV9MQVRUSUNFX0dSQVBIX0dFTkVSQVRPUl9fWFNJWkU6CisJCQkJcmV0dXJuIHhTaXplICE9IFhTSVpFX0VERUZBVUxUOworCQkJY2FzZSBHcmFwaGdlbmVyYXRvcnNQYWNrYWdlLlNRVUFSRV9MQVRUSUNFX0dSQVBIX0dFTkVSQVRPUl9fWVNJWkU6CisJCQkJcmV0dXJuIHlTaXplICE9IFlTSVpFX0VERUZBVUxUOworCQkJY2FzZSBHcmFwaGdlbmVyYXRvcnNQYWNrYWdlLlNRVUFSRV9MQVRUSUNFX0dSQVBIX0dFTkVSQVRPUl9fQVJFQToKKwkJCQlyZXR1cm4gYXJlYSAhPSBBUkVBX0VERUZBVUxUOworCQl9CisJCXJldHVybiBzdXBlci5lSXNTZXQoZmVhdHVyZUlEKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkgeworCQlpZiAoZUlzUHJveHkoKSkgcmV0dXJuIHN1cGVyLnRvU3RyaW5nKCk7CisKKwkJU3RyaW5nQnVmZmVyIHJlc3VsdCA9IG5ldyBTdHJpbmdCdWZmZXIoc3VwZXIudG9TdHJpbmcoKSk7CisJCXJlc3VsdC5hcHBlbmQoIiAoeFNpemU6ICIpOworCQlyZXN1bHQuYXBwZW5kKHhTaXplKTsKKwkJcmVzdWx0LmFwcGVuZCgiLCB5U2l6ZTogIik7CisJCXJlc3VsdC5hcHBlbmQoeVNpemUpOworCQlyZXN1bHQuYXBwZW5kKCIsIGFyZWE6ICIpOworCQlyZXN1bHQuYXBwZW5kKGFyZWEpOworCQlyZXN1bHQuYXBwZW5kKCcpJyk7CisJCXJldHVybiByZXN1bHQudG9TdHJpbmcoKTsKKwl9CisKKwkvKioKKwkgKiBAc2VlIExhdHRpY2VHZW5lcmF0b3JVdGlsaXR5SW1wbAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBHcmFwaCBnZXRHcmFwaCgpIHsKKwkJTGF0dGljZUdlbmVyYXRvclV0aWxpdHlJbXBsIHNsZ2kgPSBuZXcgTGF0dGljZUdlbmVyYXRvclV0aWxpdHlJbXBsKEdyYXBoTGF0dGljZUdlbmVyYXRvckludGVyZmFjZS5TUVJfTEFUVElDRV9UWVBFKTsKKwkJLy8gR2V0IHRoZSBncmFwaAorCQlHcmFwaCBnID0gc2xnaS5nZXRHcmFwaCh0aGlzLmdldFhTaXplKCksIHRoaXMuZ2V0WVNpemUoKSwgdGhpcy5nZXRBcmVhKCksIHRoaXMuaXNVc2VOZWFyZXN0TmVpZ2hib3JzKCksIHRoaXMuaXNVc2VOZXh0TmVhcmVzdE5laWdoYm9ycygpLCB0aGlzLmlzUGVyaW9kaWNCb3VuZGFyaWVzKCkpOworCQlyZXR1cm4gZzsKKwl9Cit9IC8vU3F1YXJlTGF0dGljZUdyYXBoR2VuZXJhdG9ySW1wbApkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmdyYXBoZ2VuZXJhdG9ycy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9ncmFwaGdlbmVyYXRvcnMvcHJvdmlkZXIvR3JhcGhHZW5lcmF0b3JJdGVtUHJvdmlkZXIuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaGdlbmVyYXRvcnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZ3JhcGhnZW5lcmF0b3JzL3Byb3ZpZGVyL0dyYXBoR2VuZXJhdG9ySXRlbVByb3ZpZGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2Q4YTQ4ZQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaGdlbmVyYXRvcnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZ3JhcGhnZW5lcmF0b3JzL3Byb3ZpZGVyL0dyYXBoR2VuZXJhdG9ySXRlbVByb3ZpZGVyLmphdmEKQEAgLTAsMCArMSwxMzEgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDksMjAxMCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhnZW5lcmF0b3JzLnByb3ZpZGVyOworCisKK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LkFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuUmVzb3VyY2VMb2NhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5VUkk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUVkaXRpbmdEb21haW5JdGVtUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1MYWJlbFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtUHJvcGVydHlEZXNjcmlwdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtUHJvcGVydHlTb3VyY2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVN0cnVjdHVyZWRJdGVtQ29udGVudFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklUcmVlSXRlbUNvbnRlbnRQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLnByb3ZpZGVyLklkZW50aWZpYWJsZUl0ZW1Qcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmdyYXBoZ2VuZXJhdG9ycy5HcmFwaEdlbmVyYXRvcjsKKworLyoqCisgKiBUaGlzIGlzIHRoZSBpdGVtIHByb3ZpZGVyIGFkYXB0ZXIgZm9yIGEge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhnZW5lcmF0b3JzLkdyYXBoR2VuZXJhdG9yfSBvYmplY3QuCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBHcmFwaEdlbmVyYXRvckl0ZW1Qcm92aWRlcgorCWV4dGVuZHMgSWRlbnRpZmlhYmxlSXRlbVByb3ZpZGVyCisJaW1wbGVtZW50cworCQlJRWRpdGluZ0RvbWFpbkl0ZW1Qcm92aWRlciwKKwkJSVN0cnVjdHVyZWRJdGVtQ29udGVudFByb3ZpZGVyLAorCQlJVHJlZUl0ZW1Db250ZW50UHJvdmlkZXIsCisJCUlJdGVtTGFiZWxQcm92aWRlciwKKwkJSUl0ZW1Qcm9wZXJ0eVNvdXJjZSB7CisJLyoqCisJICogVGhpcyBjb25zdHJ1Y3RzIGFuIGluc3RhbmNlIGZyb20gYSBmYWN0b3J5IGFuZCBhIG5vdGlmaWVyLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBHcmFwaEdlbmVyYXRvckl0ZW1Qcm92aWRlcihBZGFwdGVyRmFjdG9yeSBhZGFwdGVyRmFjdG9yeSkgeworCQlzdXBlcihhZGFwdGVyRmFjdG9yeSk7CisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIHRoZSBwcm9wZXJ0eSBkZXNjcmlwdG9ycyBmb3IgdGhlIGFkYXB0ZWQgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIExpc3Q8SUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I+IGdldFByb3BlcnR5RGVzY3JpcHRvcnMoT2JqZWN0IG9iamVjdCkgeworCQlpZiAoaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMgPT0gbnVsbCkgeworCQkJc3VwZXIuZ2V0UHJvcGVydHlEZXNjcmlwdG9ycyhvYmplY3QpOworCisJCX0KKwkJcmV0dXJuIGl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzOworCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyBHcmFwaEdlbmVyYXRvci5naWYuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIE9iamVjdCBnZXRJbWFnZShPYmplY3Qgb2JqZWN0KSB7CisJCXJldHVybiBvdmVybGF5SW1hZ2Uob2JqZWN0LCBnZXRSZXNvdXJjZUxvY2F0b3IoKS5nZXRJbWFnZSgiZnVsbC9vYmoxNi9HcmFwaEdlbmVyYXRvciIpKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgdGhlIGxhYmVsIHRleHQgZm9yIHRoZSBhZGFwdGVkIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBTdHJpbmcgZ2V0VGV4dChPYmplY3Qgb2JqZWN0KSB7CisJCVVSSSBsYWJlbFZhbHVlID0gKChHcmFwaEdlbmVyYXRvcilvYmplY3QpLmdldFVSSSgpOworCQlTdHJpbmcgbGFiZWwgPSBsYWJlbFZhbHVlID09IG51bGwgPyBudWxsIDogbGFiZWxWYWx1ZS50b1N0cmluZygpOworCQlyZXR1cm4gbGFiZWwgPT0gbnVsbCB8fCBsYWJlbC5sZW5ndGgoKSA9PSAwID8KKwkJCWdldFN0cmluZygiX1VJX0dyYXBoR2VuZXJhdG9yX3R5cGUiKSA6CisJCQlnZXRTdHJpbmcoIl9VSV9HcmFwaEdlbmVyYXRvcl90eXBlIikgKyAiICIgKyBsYWJlbDsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGhhbmRsZXMgbW9kZWwgbm90aWZpY2F0aW9ucyBieSBjYWxsaW5nIHtAbGluayAjdXBkYXRlQ2hpbGRyZW59IHRvIHVwZGF0ZSBhbnkgY2FjaGVkCisJICogY2hpbGRyZW4gYW5kIGJ5IGNyZWF0aW5nIGEgdmlld2VyIG5vdGlmaWNhdGlvbiwgd2hpY2ggaXQgcGFzc2VzIHRvIHtAbGluayAjZmlyZU5vdGlmeUNoYW5nZWR9LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIG5vdGlmeUNoYW5nZWQoTm90aWZpY2F0aW9uIG5vdGlmaWNhdGlvbikgeworCQl1cGRhdGVDaGlsZHJlbihub3RpZmljYXRpb24pOworCQlzdXBlci5ub3RpZnlDaGFuZ2VkKG5vdGlmaWNhdGlvbik7CisJfQorCisJLyoqCisJICogVGhpcyBhZGRzIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuZWRpdC5jb21tYW5kLkNvbW1hbmRQYXJhbWV0ZXJ9cyBkZXNjcmliaW5nIHRoZSBjaGlsZHJlbgorCSAqIHRoYXQgY2FuIGJlIGNyZWF0ZWQgdW5kZXIgdGhpcyBvYmplY3QuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgY29sbGVjdE5ld0NoaWxkRGVzY3JpcHRvcnMoQ29sbGVjdGlvbjxPYmplY3Q+IG5ld0NoaWxkRGVzY3JpcHRvcnMsIE9iamVjdCBvYmplY3QpIHsKKwkJc3VwZXIuY29sbGVjdE5ld0NoaWxkRGVzY3JpcHRvcnMobmV3Q2hpbGREZXNjcmlwdG9ycywgb2JqZWN0KTsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm4gdGhlIHJlc291cmNlIGxvY2F0b3IgZm9yIHRoaXMgaXRlbSBwcm92aWRlcidzIHJlc291cmNlcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgUmVzb3VyY2VMb2NhdG9yIGdldFJlc291cmNlTG9jYXRvcigpIHsKKwkJcmV0dXJuIEdyYXBoZ2VuZXJhdG9yRWRpdFBsdWdpbi5JTlNUQU5DRTsKKwl9CisKK30KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaGdlbmVyYXRvcnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZ3JhcGhnZW5lcmF0b3JzL3Byb3ZpZGVyL0dyYXBoZ2VuZXJhdG9yRWRpdFBsdWdpbi5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmdyYXBoZ2VuZXJhdG9ycy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9ncmFwaGdlbmVyYXRvcnMvcHJvdmlkZXIvR3JhcGhnZW5lcmF0b3JFZGl0UGx1Z2luLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjY5ZTkxYQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaGdlbmVyYXRvcnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZ3JhcGhnZW5lcmF0b3JzL3Byb3ZpZGVyL0dyYXBoZ2VuZXJhdG9yRWRpdFBsdWdpbi5qYXZhCkBAIC0wLDAgKzEsMTAwIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA5LDIwMTAgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmdyYXBoZ2VuZXJhdG9ycy5wcm92aWRlcjsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24uRU1GUGx1Z2luOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5SZXNvdXJjZUxvY2F0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnByb3ZpZGVyLkVjb3JlRWRpdFBsdWdpbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLnByb3ZpZGVyLkNvcmVFZGl0UGx1Z2luOworCisvKioKKyAqIFRoaXMgaXMgdGhlIGNlbnRyYWwgc2luZ2xldG9uIGZvciB0aGUgR3JhcGhnZW5lcmF0b3IgZWRpdCBwbHVnaW4uCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBmaW5hbCBjbGFzcyBHcmFwaGdlbmVyYXRvckVkaXRQbHVnaW4gZXh0ZW5kcyBFTUZQbHVnaW4geworCS8qKgorCSAqIEtlZXAgdHJhY2sgb2YgdGhlIHNpbmdsZXRvbi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIEdyYXBoZ2VuZXJhdG9yRWRpdFBsdWdpbiBJTlNUQU5DRSA9IG5ldyBHcmFwaGdlbmVyYXRvckVkaXRQbHVnaW4oKTsKKworCS8qKgorCSAqIEtlZXAgdHJhY2sgb2YgdGhlIHNpbmdsZXRvbi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcml2YXRlIHN0YXRpYyBJbXBsZW1lbnRhdGlvbiBwbHVnaW47CisKKwkvKioKKwkgKiBDcmVhdGUgdGhlIGluc3RhbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBHcmFwaGdlbmVyYXRvckVkaXRQbHVnaW4oKSB7CisJCXN1cGVyCisJCSAgKG5ldyBSZXNvdXJjZUxvY2F0b3IgW10geworCQkgICAgIENvcmVFZGl0UGx1Z2luLklOU1RBTkNFLAorCQkgICAgIEVjb3JlRWRpdFBsdWdpbi5JTlNUQU5DRSwKKwkJICAgfSk7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgc2luZ2xldG9uIGluc3RhbmNlIG9mIHRoZSBFY2xpcHNlIHBsdWdpbi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIHNpbmdsZXRvbiBpbnN0YW5jZS4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIFJlc291cmNlTG9jYXRvciBnZXRQbHVnaW5SZXNvdXJjZUxvY2F0b3IoKSB7CisJCXJldHVybiBwbHVnaW47CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgc2luZ2xldG9uIGluc3RhbmNlIG9mIHRoZSBFY2xpcHNlIHBsdWdpbi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIHNpbmdsZXRvbiBpbnN0YW5jZS4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHN0YXRpYyBJbXBsZW1lbnRhdGlvbiBnZXRQbHVnaW4oKSB7CisJCXJldHVybiBwbHVnaW47CisJfQorCisJLyoqCisJICogVGhlIGFjdHVhbCBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgRWNsaXBzZSA8Yj5QbHVnaW48L2I+LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBzdGF0aWMgY2xhc3MgSW1wbGVtZW50YXRpb24gZXh0ZW5kcyBFY2xpcHNlUGx1Z2luIHsKKwkJLyoqCisJCSAqIENyZWF0ZXMgYW4gaW5zdGFuY2UuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlwdWJsaWMgSW1wbGVtZW50YXRpb24oKSB7CisJCQlzdXBlcigpOworCisJCQkvLyBSZW1lbWJlciB0aGUgc3RhdGljIGluc3RhbmNlLgorCQkJLy8KKwkJCXBsdWdpbiA9IHRoaXM7CisJCX0KKwl9CisKK30KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaGdlbmVyYXRvcnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZ3JhcGhnZW5lcmF0b3JzL3Byb3ZpZGVyL0dyYXBoZ2VuZXJhdG9yc0l0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5LmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhnZW5lcmF0b3JzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2dyYXBoZ2VuZXJhdG9ycy9wcm92aWRlci9HcmFwaGdlbmVyYXRvcnNJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAyYjAwMWMKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhnZW5lcmF0b3JzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2dyYXBoZ2VuZXJhdG9ycy9wcm92aWRlci9HcmFwaGdlbmVyYXRvcnNJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeS5qYXZhCkBAIC0wLDAgKzEsMjc3IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA5LDIwMTAgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmdyYXBoZ2VuZXJhdG9ycy5wcm92aWRlcjsKKworaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7CitpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5BZGFwdGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmllcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5DaGFuZ2VOb3RpZmllcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5Db21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkNvbXBvc2VkQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUNoYW5nZU5vdGlmaWVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklEaXNwb3NhYmxlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklFZGl0aW5nRG9tYWluSXRlbVByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtTGFiZWxQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbVByb3BlcnR5U291cmNlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklOb3RpZnlDaGFuZ2VkTGlzdGVuZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVN0cnVjdHVyZWRJdGVtQ29udGVudFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklUcmVlSXRlbUNvbnRlbnRQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmdyYXBoZ2VuZXJhdG9ycy51dGlsLkdyYXBoZ2VuZXJhdG9yc0FkYXB0ZXJGYWN0b3J5OworCisvKioKKyAqIFRoaXMgaXMgdGhlIGZhY3RvcnkgdGhhdCBpcyB1c2VkIHRvIHByb3ZpZGUgdGhlIGludGVyZmFjZXMgbmVlZGVkIHRvIHN1cHBvcnQgVmlld2Vycy4KKyAqIFRoZSBhZGFwdGVycyBnZW5lcmF0ZWQgYnkgdGhpcyBmYWN0b3J5IGNvbnZlcnQgRU1GIGFkYXB0ZXIgbm90aWZpY2F0aW9ucyBpbnRvIGNhbGxzIHRvIHtAbGluayAjZmlyZU5vdGlmeUNoYW5nZWQgZmlyZU5vdGlmeUNoYW5nZWR9LgorICogVGhlIGFkYXB0ZXJzIGFsc28gc3VwcG9ydCBFY2xpcHNlIHByb3BlcnR5IHNoZWV0cy4KKyAqIE5vdGUgdGhhdCBtb3N0IG9mIHRoZSBhZGFwdGVycyBhcmUgc2hhcmVkIGFtb25nIG11bHRpcGxlIGluc3RhbmNlcy4KKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIEdyYXBoZ2VuZXJhdG9yc0l0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5IGV4dGVuZHMgR3JhcGhnZW5lcmF0b3JzQWRhcHRlckZhY3RvcnkgaW1wbGVtZW50cyBDb21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5LCBJQ2hhbmdlTm90aWZpZXIsIElEaXNwb3NhYmxlIHsKKwkvKioKKwkgKiBUaGlzIGtlZXBzIHRyYWNrIG9mIHRoZSByb290IGFkYXB0ZXIgZmFjdG9yeSB0aGF0IGRlbGVnYXRlcyB0byB0aGlzIGFkYXB0ZXIgZmFjdG9yeS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgQ29tcG9zZWRBZGFwdGVyRmFjdG9yeSBwYXJlbnRBZGFwdGVyRmFjdG9yeTsKKworCS8qKgorCSAqIFRoaXMgaXMgdXNlZCB0byBpbXBsZW1lbnQge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklDaGFuZ2VOb3RpZmllcn0uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIElDaGFuZ2VOb3RpZmllciBjaGFuZ2VOb3RpZmllciA9IG5ldyBDaGFuZ2VOb3RpZmllcigpOworCisJLyoqCisJICogVGhpcyBrZWVwcyB0cmFjayBvZiBhbGwgdGhlIHN1cHBvcnRlZCB0eXBlcyBjaGVja2VkIGJ5IHtAbGluayAjaXNGYWN0b3J5Rm9yVHlwZSBpc0ZhY3RvcnlGb3JUeXBlfS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgQ29sbGVjdGlvbjxPYmplY3Q+IHN1cHBvcnRlZFR5cGVzID0gbmV3IEFycmF5TGlzdDxPYmplY3Q+KCk7CisKKwkvKioKKwkgKiBUaGlzIGNvbnN0cnVjdHMgYW4gaW5zdGFuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEdyYXBoZ2VuZXJhdG9yc0l0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5KCkgeworCQlzdXBwb3J0ZWRUeXBlcy5hZGQoSUVkaXRpbmdEb21haW5JdGVtUHJvdmlkZXIuY2xhc3MpOworCQlzdXBwb3J0ZWRUeXBlcy5hZGQoSVN0cnVjdHVyZWRJdGVtQ29udGVudFByb3ZpZGVyLmNsYXNzKTsKKwkJc3VwcG9ydGVkVHlwZXMuYWRkKElUcmVlSXRlbUNvbnRlbnRQcm92aWRlci5jbGFzcyk7CisJCXN1cHBvcnRlZFR5cGVzLmFkZChJSXRlbUxhYmVsUHJvdmlkZXIuY2xhc3MpOworCQlzdXBwb3J0ZWRUeXBlcy5hZGQoSUl0ZW1Qcm9wZXJ0eVNvdXJjZS5jbGFzcyk7CisJfQorCisJLyoqCisJICogVGhpcyBrZWVwcyB0cmFjayBvZiB0aGUgb25lIGFkYXB0ZXIgdXNlZCBmb3IgYWxsIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmdyYXBoZ2VuZXJhdG9ycy5TcXVhcmVMYXR0aWNlR3JhcGhHZW5lcmF0b3J9IGluc3RhbmNlcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgU3F1YXJlTGF0dGljZUdyYXBoR2VuZXJhdG9ySXRlbVByb3ZpZGVyIHNxdWFyZUxhdHRpY2VHcmFwaEdlbmVyYXRvckl0ZW1Qcm92aWRlcjsKKworCS8qKgorCSAqIFRoaXMgY3JlYXRlcyBhbiBhZGFwdGVyIGZvciBhIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmdyYXBoZ2VuZXJhdG9ycy5TcXVhcmVMYXR0aWNlR3JhcGhHZW5lcmF0b3J9LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZVNxdWFyZUxhdHRpY2VHcmFwaEdlbmVyYXRvckFkYXB0ZXIoKSB7CisJCWlmIChzcXVhcmVMYXR0aWNlR3JhcGhHZW5lcmF0b3JJdGVtUHJvdmlkZXIgPT0gbnVsbCkgeworCQkJc3F1YXJlTGF0dGljZUdyYXBoR2VuZXJhdG9ySXRlbVByb3ZpZGVyID0gbmV3IFNxdWFyZUxhdHRpY2VHcmFwaEdlbmVyYXRvckl0ZW1Qcm92aWRlcih0aGlzKTsKKwkJfQorCisJCXJldHVybiBzcXVhcmVMYXR0aWNlR3JhcGhHZW5lcmF0b3JJdGVtUHJvdmlkZXI7CisJfQorCisJLyoqCisJICogVGhpcyBrZWVwcyB0cmFjayBvZiB0aGUgb25lIGFkYXB0ZXIgdXNlZCBmb3IgYWxsIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmdyYXBoZ2VuZXJhdG9ycy5NaWdyYXRpb25FZGdlR3JhcGhHZW5lcmF0b3J9IGluc3RhbmNlcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgTWlncmF0aW9uRWRnZUdyYXBoR2VuZXJhdG9ySXRlbVByb3ZpZGVyIG1pZ3JhdGlvbkVkZ2VHcmFwaEdlbmVyYXRvckl0ZW1Qcm92aWRlcjsKKworCS8qKgorCSAqIFRoaXMgY3JlYXRlcyBhbiBhZGFwdGVyIGZvciBhIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmdyYXBoZ2VuZXJhdG9ycy5NaWdyYXRpb25FZGdlR3JhcGhHZW5lcmF0b3J9LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZU1pZ3JhdGlvbkVkZ2VHcmFwaEdlbmVyYXRvckFkYXB0ZXIoKSB7CisJCWlmIChtaWdyYXRpb25FZGdlR3JhcGhHZW5lcmF0b3JJdGVtUHJvdmlkZXIgPT0gbnVsbCkgeworCQkJbWlncmF0aW9uRWRnZUdyYXBoR2VuZXJhdG9ySXRlbVByb3ZpZGVyID0gbmV3IE1pZ3JhdGlvbkVkZ2VHcmFwaEdlbmVyYXRvckl0ZW1Qcm92aWRlcih0aGlzKTsKKwkJfQorCisJCXJldHVybiBtaWdyYXRpb25FZGdlR3JhcGhHZW5lcmF0b3JJdGVtUHJvdmlkZXI7CisJfQorCisJLyoqCisJICogVGhpcyBrZWVwcyB0cmFjayBvZiB0aGUgb25lIGFkYXB0ZXIgdXNlZCBmb3IgYWxsIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmdyYXBoZ2VuZXJhdG9ycy5QbGF0ZUNhcnJlZUdsb2JlR3JhcGhHZW5lcmF0b3J9IGluc3RhbmNlcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgUGxhdGVDYXJyZWVHbG9iZUdyYXBoR2VuZXJhdG9ySXRlbVByb3ZpZGVyIHBsYXRlQ2FycmVlR2xvYmVHcmFwaEdlbmVyYXRvckl0ZW1Qcm92aWRlcjsKKworCS8qKgorCSAqIFRoaXMgY3JlYXRlcyBhbiBhZGFwdGVyIGZvciBhIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmdyYXBoZ2VuZXJhdG9ycy5QbGF0ZUNhcnJlZUdsb2JlR3JhcGhHZW5lcmF0b3J9LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZVBsYXRlQ2FycmVlR2xvYmVHcmFwaEdlbmVyYXRvckFkYXB0ZXIoKSB7CisJCWlmIChwbGF0ZUNhcnJlZUdsb2JlR3JhcGhHZW5lcmF0b3JJdGVtUHJvdmlkZXIgPT0gbnVsbCkgeworCQkJcGxhdGVDYXJyZWVHbG9iZUdyYXBoR2VuZXJhdG9ySXRlbVByb3ZpZGVyID0gbmV3IFBsYXRlQ2FycmVlR2xvYmVHcmFwaEdlbmVyYXRvckl0ZW1Qcm92aWRlcih0aGlzKTsKKwkJfQorCisJCXJldHVybiBwbGF0ZUNhcnJlZUdsb2JlR3JhcGhHZW5lcmF0b3JJdGVtUHJvdmlkZXI7CisJfQorCisJLyoqCisJICogVGhpcyBrZWVwcyB0cmFjayBvZiB0aGUgb25lIGFkYXB0ZXIgdXNlZCBmb3IgYWxsIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmdyYXBoZ2VuZXJhdG9ycy5QYWpla05ldEdyYXBoR2VuZXJhdG9yfSBpbnN0YW5jZXMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIFBhamVrTmV0R3JhcGhHZW5lcmF0b3JJdGVtUHJvdmlkZXIgcGFqZWtOZXRHcmFwaEdlbmVyYXRvckl0ZW1Qcm92aWRlcjsKKworCS8qKgorCSAqIFRoaXMgY3JlYXRlcyBhbiBhZGFwdGVyIGZvciBhIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmdyYXBoZ2VuZXJhdG9ycy5QYWpla05ldEdyYXBoR2VuZXJhdG9yfS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVQYWpla05ldEdyYXBoR2VuZXJhdG9yQWRhcHRlcigpIHsKKwkJaWYgKHBhamVrTmV0R3JhcGhHZW5lcmF0b3JJdGVtUHJvdmlkZXIgPT0gbnVsbCkgeworCQkJcGFqZWtOZXRHcmFwaEdlbmVyYXRvckl0ZW1Qcm92aWRlciA9IG5ldyBQYWpla05ldEdyYXBoR2VuZXJhdG9ySXRlbVByb3ZpZGVyKHRoaXMpOworCQl9CisKKwkJcmV0dXJuIHBhamVrTmV0R3JhcGhHZW5lcmF0b3JJdGVtUHJvdmlkZXI7CisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIHRoZSByb290IGFkYXB0ZXIgZmFjdG9yeSB0aGF0IGNvbnRhaW5zIHRoaXMgZmFjdG9yeS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSBnZXRSb290QWRhcHRlckZhY3RvcnkoKSB7CisJCXJldHVybiBwYXJlbnRBZGFwdGVyRmFjdG9yeSA9PSBudWxsID8gdGhpcyA6IHBhcmVudEFkYXB0ZXJGYWN0b3J5LmdldFJvb3RBZGFwdGVyRmFjdG9yeSgpOworCX0KKworCS8qKgorCSAqIFRoaXMgc2V0cyB0aGUgY29tcG9zZWQgYWRhcHRlciBmYWN0b3J5IHRoYXQgY29udGFpbnMgdGhpcyBmYWN0b3J5LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIHNldFBhcmVudEFkYXB0ZXJGYWN0b3J5KENvbXBvc2VkQWRhcHRlckZhY3RvcnkgcGFyZW50QWRhcHRlckZhY3RvcnkpIHsKKwkJdGhpcy5wYXJlbnRBZGFwdGVyRmFjdG9yeSA9IHBhcmVudEFkYXB0ZXJGYWN0b3J5OworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBib29sZWFuIGlzRmFjdG9yeUZvclR5cGUoT2JqZWN0IHR5cGUpIHsKKwkJcmV0dXJuIHN1cHBvcnRlZFR5cGVzLmNvbnRhaW5zKHR5cGUpIHx8IHN1cGVyLmlzRmFjdG9yeUZvclR5cGUodHlwZSk7CisJfQorCisJLyoqCisJICogVGhpcyBpbXBsZW1lbnRhdGlvbiBzdWJzdGl0dXRlcyB0aGUgZmFjdG9yeSBpdHNlbGYgYXMgdGhlIGtleSBmb3IgdGhlIGFkYXB0ZXIuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIEFkYXB0ZXIgYWRhcHQoTm90aWZpZXIgbm90aWZpZXIsIE9iamVjdCB0eXBlKSB7CisJCXJldHVybiBzdXBlci5hZGFwdChub3RpZmllciwgdGhpcyk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIE9iamVjdCBhZGFwdChPYmplY3Qgb2JqZWN0LCBPYmplY3QgdHlwZSkgeworCQlpZiAoaXNGYWN0b3J5Rm9yVHlwZSh0eXBlKSkgeworCQkJT2JqZWN0IGFkYXB0ZXIgPSBzdXBlci5hZGFwdChvYmplY3QsIHR5cGUpOworCQkJaWYgKCEodHlwZSBpbnN0YW5jZW9mIENsYXNzPD8+KSB8fCAoKChDbGFzczw/Pil0eXBlKS5pc0luc3RhbmNlKGFkYXB0ZXIpKSkgeworCQkJCXJldHVybiBhZGFwdGVyOworCQkJfQorCQl9CisKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogVGhpcyBhZGRzIGEgbGlzdGVuZXIuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgYWRkTGlzdGVuZXIoSU5vdGlmeUNoYW5nZWRMaXN0ZW5lciBub3RpZnlDaGFuZ2VkTGlzdGVuZXIpIHsKKwkJY2hhbmdlTm90aWZpZXIuYWRkTGlzdGVuZXIobm90aWZ5Q2hhbmdlZExpc3RlbmVyKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHJlbW92ZXMgYSBsaXN0ZW5lci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCByZW1vdmVMaXN0ZW5lcihJTm90aWZ5Q2hhbmdlZExpc3RlbmVyIG5vdGlmeUNoYW5nZWRMaXN0ZW5lcikgeworCQljaGFuZ2VOb3RpZmllci5yZW1vdmVMaXN0ZW5lcihub3RpZnlDaGFuZ2VkTGlzdGVuZXIpOworCX0KKworCS8qKgorCSAqIFRoaXMgZGVsZWdhdGVzIHRvIHtAbGluayAjY2hhbmdlTm90aWZpZXJ9IGFuZCB0byB7QGxpbmsgI3BhcmVudEFkYXB0ZXJGYWN0b3J5fS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBmaXJlTm90aWZ5Q2hhbmdlZChOb3RpZmljYXRpb24gbm90aWZpY2F0aW9uKSB7CisJCWNoYW5nZU5vdGlmaWVyLmZpcmVOb3RpZnlDaGFuZ2VkKG5vdGlmaWNhdGlvbik7CisKKwkJaWYgKHBhcmVudEFkYXB0ZXJGYWN0b3J5ICE9IG51bGwpIHsKKwkJCXBhcmVudEFkYXB0ZXJGYWN0b3J5LmZpcmVOb3RpZnlDaGFuZ2VkKG5vdGlmaWNhdGlvbik7CisJCX0KKwl9CisKKwkvKioKKwkgKiBUaGlzIGRpc3Bvc2VzIGFsbCBvZiB0aGUgaXRlbSBwcm92aWRlcnMgY3JlYXRlZCBieSB0aGlzIGZhY3RvcnkuIAorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIGRpc3Bvc2UoKSB7CisJCWlmIChzcXVhcmVMYXR0aWNlR3JhcGhHZW5lcmF0b3JJdGVtUHJvdmlkZXIgIT0gbnVsbCkgc3F1YXJlTGF0dGljZUdyYXBoR2VuZXJhdG9ySXRlbVByb3ZpZGVyLmRpc3Bvc2UoKTsKKwkJaWYgKG1pZ3JhdGlvbkVkZ2VHcmFwaEdlbmVyYXRvckl0ZW1Qcm92aWRlciAhPSBudWxsKSBtaWdyYXRpb25FZGdlR3JhcGhHZW5lcmF0b3JJdGVtUHJvdmlkZXIuZGlzcG9zZSgpOworCQlpZiAocGxhdGVDYXJyZWVHbG9iZUdyYXBoR2VuZXJhdG9ySXRlbVByb3ZpZGVyICE9IG51bGwpIHBsYXRlQ2FycmVlR2xvYmVHcmFwaEdlbmVyYXRvckl0ZW1Qcm92aWRlci5kaXNwb3NlKCk7CisJCWlmIChwYWpla05ldEdyYXBoR2VuZXJhdG9ySXRlbVByb3ZpZGVyICE9IG51bGwpIHBhamVrTmV0R3JhcGhHZW5lcmF0b3JJdGVtUHJvdmlkZXIuZGlzcG9zZSgpOworCX0KKworfQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmdyYXBoZ2VuZXJhdG9ycy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9ncmFwaGdlbmVyYXRvcnMvcHJvdmlkZXIvTGF0dGljZUdyYXBoR2VuZXJhdG9ySXRlbVByb3ZpZGVyLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhnZW5lcmF0b3JzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2dyYXBoZ2VuZXJhdG9ycy9wcm92aWRlci9MYXR0aWNlR3JhcGhHZW5lcmF0b3JJdGVtUHJvdmlkZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40M2M3Mzg3Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmdyYXBoZ2VuZXJhdG9ycy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9ncmFwaGdlbmVyYXRvcnMvcHJvdmlkZXIvTGF0dGljZUdyYXBoR2VuZXJhdG9ySXRlbVByb3ZpZGVyLmphdmEKQEAgLTAsMCArMSwxODggQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDksMjAxMCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhnZW5lcmF0b3JzLnByb3ZpZGVyOworCisKK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LkFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuVVJJOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkNvbXBvc2VhYmxlQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUVkaXRpbmdEb21haW5JdGVtUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1MYWJlbFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtUHJvcGVydHlEZXNjcmlwdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtUHJvcGVydHlTb3VyY2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVN0cnVjdHVyZWRJdGVtQ29udGVudFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklUcmVlSXRlbUNvbnRlbnRQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JdGVtUHJvcGVydHlEZXNjcmlwdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLlZpZXdlck5vdGlmaWNhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmdyYXBoZ2VuZXJhdG9ycy5HcmFwaGdlbmVyYXRvcnNQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhnZW5lcmF0b3JzLkxhdHRpY2VHcmFwaEdlbmVyYXRvcjsKKworLyoqCisgKiBUaGlzIGlzIHRoZSBpdGVtIHByb3ZpZGVyIGFkYXB0ZXIgZm9yIGEge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhnZW5lcmF0b3JzLkxhdHRpY2VHcmFwaEdlbmVyYXRvcn0gb2JqZWN0LgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgTGF0dGljZUdyYXBoR2VuZXJhdG9ySXRlbVByb3ZpZGVyCisJZXh0ZW5kcyBHcmFwaEdlbmVyYXRvckl0ZW1Qcm92aWRlcgorCWltcGxlbWVudHMKKwkJSUVkaXRpbmdEb21haW5JdGVtUHJvdmlkZXIsCisJCUlTdHJ1Y3R1cmVkSXRlbUNvbnRlbnRQcm92aWRlciwKKwkJSVRyZWVJdGVtQ29udGVudFByb3ZpZGVyLAorCQlJSXRlbUxhYmVsUHJvdmlkZXIsCisJCUlJdGVtUHJvcGVydHlTb3VyY2UgeworCS8qKgorCSAqIFRoaXMgY29uc3RydWN0cyBhbiBpbnN0YW5jZSBmcm9tIGEgZmFjdG9yeSBhbmQgYSBub3RpZmllci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgTGF0dGljZUdyYXBoR2VuZXJhdG9ySXRlbVByb3ZpZGVyKEFkYXB0ZXJGYWN0b3J5IGFkYXB0ZXJGYWN0b3J5KSB7CisJCXN1cGVyKGFkYXB0ZXJGYWN0b3J5KTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgdGhlIHByb3BlcnR5IGRlc2NyaXB0b3JzIGZvciB0aGUgYWRhcHRlZCBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgTGlzdDxJSXRlbVByb3BlcnR5RGVzY3JpcHRvcj4gZ2V0UHJvcGVydHlEZXNjcmlwdG9ycyhPYmplY3Qgb2JqZWN0KSB7CisJCWlmIChpdGVtUHJvcGVydHlEZXNjcmlwdG9ycyA9PSBudWxsKSB7CisJCQlzdXBlci5nZXRQcm9wZXJ0eURlc2NyaXB0b3JzKG9iamVjdCk7CisKKwkJCWFkZFVzZU5lYXJlc3ROZWlnaGJvcnNQcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0KTsKKwkJCWFkZFVzZU5leHROZWFyZXN0TmVpZ2hib3JzUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCk7CisJCQlhZGRQZXJpb2RpY0JvdW5kYXJpZXNQcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0KTsKKwkJfQorCQlyZXR1cm4gaXRlbVByb3BlcnR5RGVzY3JpcHRvcnM7CisJfQorCisJLyoqCisJICogVGhpcyBhZGRzIGEgcHJvcGVydHkgZGVzY3JpcHRvciBmb3IgdGhlIFVzZSBOZWFyZXN0IE5laWdoYm9ycyBmZWF0dXJlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIGFkZFVzZU5lYXJlc3ROZWlnaGJvcnNQcm9wZXJ0eURlc2NyaXB0b3IoT2JqZWN0IG9iamVjdCkgeworCQlpdGVtUHJvcGVydHlEZXNjcmlwdG9ycy5hZGQKKwkJCShjcmVhdGVJdGVtUHJvcGVydHlEZXNjcmlwdG9yCisJCQkJKCgoQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSlhZGFwdGVyRmFjdG9yeSkuZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCksCisJCQkJIGdldFJlc291cmNlTG9jYXRvcigpLAorCQkJCSBnZXRTdHJpbmcoIl9VSV9MYXR0aWNlR3JhcGhHZW5lcmF0b3JfdXNlTmVhcmVzdE5laWdoYm9yc19mZWF0dXJlIiksCisJCQkJIGdldFN0cmluZygiX1VJX1Byb3BlcnR5RGVzY3JpcHRvcl9kZXNjcmlwdGlvbiIsICJfVUlfTGF0dGljZUdyYXBoR2VuZXJhdG9yX3VzZU5lYXJlc3ROZWlnaGJvcnNfZmVhdHVyZSIsICJfVUlfTGF0dGljZUdyYXBoR2VuZXJhdG9yX3R5cGUiKSwKKwkJCQkgR3JhcGhnZW5lcmF0b3JzUGFja2FnZS5MaXRlcmFscy5MQVRUSUNFX0dSQVBIX0dFTkVSQVRPUl9fVVNFX05FQVJFU1RfTkVJR0hCT1JTLAorCQkJCSB0cnVlLAorCQkJCSBmYWxzZSwKKwkJCQkgZmFsc2UsCisJCQkJIEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IuQk9PTEVBTl9WQUxVRV9JTUFHRSwKKwkJCQkgbnVsbCwKKwkJCQkgbnVsbCkpOworCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyBhIHByb3BlcnR5IGRlc2NyaXB0b3IgZm9yIHRoZSBVc2UgTmV4dCBOZWFyZXN0IE5laWdoYm9ycyBmZWF0dXJlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIGFkZFVzZU5leHROZWFyZXN0TmVpZ2hib3JzUHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdCBvYmplY3QpIHsKKwkJaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMuYWRkCisJCQkoY3JlYXRlSXRlbVByb3BlcnR5RGVzY3JpcHRvcgorCQkJCSgoKENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnkpYWRhcHRlckZhY3RvcnkpLmdldFJvb3RBZGFwdGVyRmFjdG9yeSgpLAorCQkJCSBnZXRSZXNvdXJjZUxvY2F0b3IoKSwKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfTGF0dGljZUdyYXBoR2VuZXJhdG9yX3VzZU5leHROZWFyZXN0TmVpZ2hib3JzX2ZlYXR1cmUiKSwKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfUHJvcGVydHlEZXNjcmlwdG9yX2Rlc2NyaXB0aW9uIiwgIl9VSV9MYXR0aWNlR3JhcGhHZW5lcmF0b3JfdXNlTmV4dE5lYXJlc3ROZWlnaGJvcnNfZmVhdHVyZSIsICJfVUlfTGF0dGljZUdyYXBoR2VuZXJhdG9yX3R5cGUiKSwKKwkJCQkgR3JhcGhnZW5lcmF0b3JzUGFja2FnZS5MaXRlcmFscy5MQVRUSUNFX0dSQVBIX0dFTkVSQVRPUl9fVVNFX05FWFRfTkVBUkVTVF9ORUlHSEJPUlMsCisJCQkJIHRydWUsCisJCQkJIGZhbHNlLAorCQkJCSBmYWxzZSwKKwkJCQkgSXRlbVByb3BlcnR5RGVzY3JpcHRvci5CT09MRUFOX1ZBTFVFX0lNQUdFLAorCQkJCSBudWxsLAorCQkJCSBudWxsKSk7CisJfQorCisJLyoqCisJICogVGhpcyBhZGRzIGEgcHJvcGVydHkgZGVzY3JpcHRvciBmb3IgdGhlIFBlcmlvZGljIEJvdW5kYXJpZXMgZmVhdHVyZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBhZGRQZXJpb2RpY0JvdW5kYXJpZXNQcm9wZXJ0eURlc2NyaXB0b3IoT2JqZWN0IG9iamVjdCkgeworCQlpdGVtUHJvcGVydHlEZXNjcmlwdG9ycy5hZGQKKwkJCShjcmVhdGVJdGVtUHJvcGVydHlEZXNjcmlwdG9yCisJCQkJKCgoQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSlhZGFwdGVyRmFjdG9yeSkuZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCksCisJCQkJIGdldFJlc291cmNlTG9jYXRvcigpLAorCQkJCSBnZXRTdHJpbmcoIl9VSV9MYXR0aWNlR3JhcGhHZW5lcmF0b3JfcGVyaW9kaWNCb3VuZGFyaWVzX2ZlYXR1cmUiKSwKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfUHJvcGVydHlEZXNjcmlwdG9yX2Rlc2NyaXB0aW9uIiwgIl9VSV9MYXR0aWNlR3JhcGhHZW5lcmF0b3JfcGVyaW9kaWNCb3VuZGFyaWVzX2ZlYXR1cmUiLCAiX1VJX0xhdHRpY2VHcmFwaEdlbmVyYXRvcl90eXBlIiksCisJCQkJIEdyYXBoZ2VuZXJhdG9yc1BhY2thZ2UuTGl0ZXJhbHMuTEFUVElDRV9HUkFQSF9HRU5FUkFUT1JfX1BFUklPRElDX0JPVU5EQVJJRVMsCisJCQkJIHRydWUsCisJCQkJIGZhbHNlLAorCQkJCSBmYWxzZSwKKwkJCQkgSXRlbVByb3BlcnR5RGVzY3JpcHRvci5CT09MRUFOX1ZBTFVFX0lNQUdFLAorCQkJCSBudWxsLAorCQkJCSBudWxsKSk7CisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIHRoZSBsYWJlbCB0ZXh0IGZvciB0aGUgYWRhcHRlZCBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgU3RyaW5nIGdldFRleHQoT2JqZWN0IG9iamVjdCkgeworCQlVUkkgbGFiZWxWYWx1ZSA9ICgoTGF0dGljZUdyYXBoR2VuZXJhdG9yKW9iamVjdCkuZ2V0VVJJKCk7CisJCVN0cmluZyBsYWJlbCA9IGxhYmVsVmFsdWUgPT0gbnVsbCA/IG51bGwgOiBsYWJlbFZhbHVlLnRvU3RyaW5nKCk7CisJCXJldHVybiBsYWJlbCA9PSBudWxsIHx8IGxhYmVsLmxlbmd0aCgpID09IDAgPworCQkJZ2V0U3RyaW5nKCJfVUlfTGF0dGljZUdyYXBoR2VuZXJhdG9yX3R5cGUiKSA6CisJCQlnZXRTdHJpbmcoIl9VSV9MYXR0aWNlR3JhcGhHZW5lcmF0b3JfdHlwZSIpICsgIiAiICsgbGFiZWw7CisJfQorCisJLyoqCisJICogVGhpcyBoYW5kbGVzIG1vZGVsIG5vdGlmaWNhdGlvbnMgYnkgY2FsbGluZyB7QGxpbmsgI3VwZGF0ZUNoaWxkcmVufSB0byB1cGRhdGUgYW55IGNhY2hlZAorCSAqIGNoaWxkcmVuIGFuZCBieSBjcmVhdGluZyBhIHZpZXdlciBub3RpZmljYXRpb24sIHdoaWNoIGl0IHBhc3NlcyB0byB7QGxpbmsgI2ZpcmVOb3RpZnlDaGFuZ2VkfS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBub3RpZnlDaGFuZ2VkKE5vdGlmaWNhdGlvbiBub3RpZmljYXRpb24pIHsKKwkJdXBkYXRlQ2hpbGRyZW4obm90aWZpY2F0aW9uKTsKKworCQlzd2l0Y2ggKG5vdGlmaWNhdGlvbi5nZXRGZWF0dXJlSUQoTGF0dGljZUdyYXBoR2VuZXJhdG9yLmNsYXNzKSkgeworCQkJY2FzZSBHcmFwaGdlbmVyYXRvcnNQYWNrYWdlLkxBVFRJQ0VfR1JBUEhfR0VORVJBVE9SX19VU0VfTkVBUkVTVF9ORUlHSEJPUlM6CisJCQljYXNlIEdyYXBoZ2VuZXJhdG9yc1BhY2thZ2UuTEFUVElDRV9HUkFQSF9HRU5FUkFUT1JfX1VTRV9ORVhUX05FQVJFU1RfTkVJR0hCT1JTOgorCQkJY2FzZSBHcmFwaGdlbmVyYXRvcnNQYWNrYWdlLkxBVFRJQ0VfR1JBUEhfR0VORVJBVE9SX19QRVJJT0RJQ19CT1VOREFSSUVTOgorCQkJCWZpcmVOb3RpZnlDaGFuZ2VkKG5ldyBWaWV3ZXJOb3RpZmljYXRpb24obm90aWZpY2F0aW9uLCBub3RpZmljYXRpb24uZ2V0Tm90aWZpZXIoKSwgZmFsc2UsIHRydWUpKTsKKwkJCQlyZXR1cm47CisJCX0KKwkJc3VwZXIubm90aWZ5Q2hhbmdlZChub3RpZmljYXRpb24pOworCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmVkaXQuY29tbWFuZC5Db21tYW5kUGFyYW1ldGVyfXMgZGVzY3JpYmluZyB0aGUgY2hpbGRyZW4KKwkgKiB0aGF0IGNhbiBiZSBjcmVhdGVkIHVuZGVyIHRoaXMgb2JqZWN0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIGNvbGxlY3ROZXdDaGlsZERlc2NyaXB0b3JzKENvbGxlY3Rpb248T2JqZWN0PiBuZXdDaGlsZERlc2NyaXB0b3JzLCBPYmplY3Qgb2JqZWN0KSB7CisJCXN1cGVyLmNvbGxlY3ROZXdDaGlsZERlc2NyaXB0b3JzKG5ld0NoaWxkRGVzY3JpcHRvcnMsIG9iamVjdCk7CisJfQorCit9CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhnZW5lcmF0b3JzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2dyYXBoZ2VuZXJhdG9ycy9wcm92aWRlci9NaWdyYXRpb25FZGdlR3JhcGhHZW5lcmF0b3JJdGVtUHJvdmlkZXIuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaGdlbmVyYXRvcnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZ3JhcGhnZW5lcmF0b3JzL3Byb3ZpZGVyL01pZ3JhdGlvbkVkZ2VHcmFwaEdlbmVyYXRvckl0ZW1Qcm92aWRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE5YjhhMWQKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhnZW5lcmF0b3JzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2dyYXBoZ2VuZXJhdG9ycy9wcm92aWRlci9NaWdyYXRpb25FZGdlR3JhcGhHZW5lcmF0b3JJdGVtUHJvdmlkZXIuamF2YQpAQCAtMCwwICsxLDE5OSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOSwyMDEwIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaGdlbmVyYXRvcnMucHJvdmlkZXI7CisKKworaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOworaW1wb3J0IGphdmEudXRpbC5MaXN0OworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5VUkk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JRWRpdGluZ0RvbWFpbkl0ZW1Qcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbUxhYmVsUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1Qcm9wZXJ0eVNvdXJjZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JU3RydWN0dXJlZEl0ZW1Db250ZW50UHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVRyZWVJdGVtQ29udGVudFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuVmlld2VyTm90aWZpY2F0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhnZW5lcmF0b3JzLkdyYXBoZ2VuZXJhdG9yc1BhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaGdlbmVyYXRvcnMuTWlncmF0aW9uRWRnZUdyYXBoR2VuZXJhdG9yOworCisvKioKKyAqIFRoaXMgaXMgdGhlIGl0ZW0gcHJvdmlkZXIgYWRhcHRlciBmb3IgYSB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaGdlbmVyYXRvcnMuTWlncmF0aW9uRWRnZUdyYXBoR2VuZXJhdG9yfSBvYmplY3QuCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBNaWdyYXRpb25FZGdlR3JhcGhHZW5lcmF0b3JJdGVtUHJvdmlkZXIKKwlleHRlbmRzIEdyYXBoR2VuZXJhdG9ySXRlbVByb3ZpZGVyCisJaW1wbGVtZW50cworCQlJRWRpdGluZ0RvbWFpbkl0ZW1Qcm92aWRlciwKKwkJSVN0cnVjdHVyZWRJdGVtQ29udGVudFByb3ZpZGVyLAorCQlJVHJlZUl0ZW1Db250ZW50UHJvdmlkZXIsCisJCUlJdGVtTGFiZWxQcm92aWRlciwKKwkJSUl0ZW1Qcm9wZXJ0eVNvdXJjZSB7CisJLyoqCisJICogVGhpcyBjb25zdHJ1Y3RzIGFuIGluc3RhbmNlIGZyb20gYSBmYWN0b3J5IGFuZCBhIG5vdGlmaWVyLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBNaWdyYXRpb25FZGdlR3JhcGhHZW5lcmF0b3JJdGVtUHJvdmlkZXIoQWRhcHRlckZhY3RvcnkgYWRhcHRlckZhY3RvcnkpIHsKKwkJc3VwZXIoYWRhcHRlckZhY3RvcnkpOworCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyB0aGUgcHJvcGVydHkgZGVzY3JpcHRvcnMgZm9yIHRoZSBhZGFwdGVkIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBMaXN0PElJdGVtUHJvcGVydHlEZXNjcmlwdG9yPiBnZXRQcm9wZXJ0eURlc2NyaXB0b3JzKE9iamVjdCBvYmplY3QpIHsKKwkJaWYgKGl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzID09IG51bGwpIHsKKwkJCXN1cGVyLmdldFByb3BlcnR5RGVzY3JpcHRvcnMob2JqZWN0KTsKKworCQkJYWRkTG9jYXRpb25Qcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0KTsKKwkJCWFkZE1pZ3JhdGlvblJhdGVQcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0KTsKKwkJCWFkZFBvcHVsYXRpb25Qcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0KTsKKwkJfQorCQlyZXR1cm4gaXRlbVByb3BlcnR5RGVzY3JpcHRvcnM7CisJfQorCisJLyoqCisJICogVGhpcyBhZGRzIGEgcHJvcGVydHkgZGVzY3JpcHRvciBmb3IgdGhlIExvY2F0aW9uIGZlYXR1cmUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgYWRkTG9jYXRpb25Qcm9wZXJ0eURlc2NyaXB0b3IoT2JqZWN0IG9iamVjdCkgeworCQlpdGVtUHJvcGVydHlEZXNjcmlwdG9ycy5hZGQKKwkJCShjcmVhdGVJdGVtUHJvcGVydHlEZXNjcmlwdG9yCisJCQkJKCgoQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSlhZGFwdGVyRmFjdG9yeSkuZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCksCisJCQkJIGdldFJlc291cmNlTG9jYXRvcigpLAorCQkJCSBnZXRTdHJpbmcoIl9VSV9NaWdyYXRpb25FZGdlR3JhcGhHZW5lcmF0b3JfbG9jYXRpb25fZmVhdHVyZSIpLAorCQkJCSBnZXRTdHJpbmcoIl9VSV9Qcm9wZXJ0eURlc2NyaXB0b3JfZGVzY3JpcHRpb24iLCAiX1VJX01pZ3JhdGlvbkVkZ2VHcmFwaEdlbmVyYXRvcl9sb2NhdGlvbl9mZWF0dXJlIiwgIl9VSV9NaWdyYXRpb25FZGdlR3JhcGhHZW5lcmF0b3JfdHlwZSIpLAorCQkJCSBHcmFwaGdlbmVyYXRvcnNQYWNrYWdlLkxpdGVyYWxzLk1JR1JBVElPTl9FREdFX0dSQVBIX0dFTkVSQVRPUl9fTE9DQVRJT04sCisJCQkJIHRydWUsCisJCQkJIGZhbHNlLAorCQkJCSBmYWxzZSwKKwkJCQkgSXRlbVByb3BlcnR5RGVzY3JpcHRvci5HRU5FUklDX1ZBTFVFX0lNQUdFLAorCQkJCSBudWxsLAorCQkJCSBudWxsKSk7CisJfQorCisJLyoqCisJICogVGhpcyBhZGRzIGEgcHJvcGVydHkgZGVzY3JpcHRvciBmb3IgdGhlIE1pZ3JhdGlvbiBSYXRlIGZlYXR1cmUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgYWRkTWlncmF0aW9uUmF0ZVByb3BlcnR5RGVzY3JpcHRvcihPYmplY3Qgb2JqZWN0KSB7CisJCWl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzLmFkZAorCQkJKGNyZWF0ZUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IKKwkJCQkoKChDb21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5KWFkYXB0ZXJGYWN0b3J5KS5nZXRSb290QWRhcHRlckZhY3RvcnkoKSwKKwkJCQkgZ2V0UmVzb3VyY2VMb2NhdG9yKCksCisJCQkJIGdldFN0cmluZygiX1VJX01pZ3JhdGlvbkVkZ2VHcmFwaEdlbmVyYXRvcl9taWdyYXRpb25SYXRlX2ZlYXR1cmUiKSwKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfUHJvcGVydHlEZXNjcmlwdG9yX2Rlc2NyaXB0aW9uIiwgIl9VSV9NaWdyYXRpb25FZGdlR3JhcGhHZW5lcmF0b3JfbWlncmF0aW9uUmF0ZV9mZWF0dXJlIiwgIl9VSV9NaWdyYXRpb25FZGdlR3JhcGhHZW5lcmF0b3JfdHlwZSIpLAorCQkJCSBHcmFwaGdlbmVyYXRvcnNQYWNrYWdlLkxpdGVyYWxzLk1JR1JBVElPTl9FREdFX0dSQVBIX0dFTkVSQVRPUl9fTUlHUkFUSU9OX1JBVEUsCisJCQkJIHRydWUsCisJCQkJIGZhbHNlLAorCQkJCSBmYWxzZSwKKwkJCQkgSXRlbVByb3BlcnR5RGVzY3JpcHRvci5SRUFMX1ZBTFVFX0lNQUdFLAorCQkJCSBudWxsLAorCQkJCSBudWxsKSk7CisJfQorCisJLyoqCisJICogVGhpcyBhZGRzIGEgcHJvcGVydHkgZGVzY3JpcHRvciBmb3IgdGhlIFBvcHVsYXRpb24gZmVhdHVyZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBhZGRQb3B1bGF0aW9uUHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdCBvYmplY3QpIHsKKwkJaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMuYWRkCisJCQkoY3JlYXRlSXRlbVByb3BlcnR5RGVzY3JpcHRvcgorCQkJCSgoKENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnkpYWRhcHRlckZhY3RvcnkpLmdldFJvb3RBZGFwdGVyRmFjdG9yeSgpLAorCQkJCSBnZXRSZXNvdXJjZUxvY2F0b3IoKSwKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfTWlncmF0aW9uRWRnZUdyYXBoR2VuZXJhdG9yX3BvcHVsYXRpb25fZmVhdHVyZSIpLAorCQkJCSBnZXRTdHJpbmcoIl9VSV9Qcm9wZXJ0eURlc2NyaXB0b3JfZGVzY3JpcHRpb24iLCAiX1VJX01pZ3JhdGlvbkVkZ2VHcmFwaEdlbmVyYXRvcl9wb3B1bGF0aW9uX2ZlYXR1cmUiLCAiX1VJX01pZ3JhdGlvbkVkZ2VHcmFwaEdlbmVyYXRvcl90eXBlIiksCisJCQkJIEdyYXBoZ2VuZXJhdG9yc1BhY2thZ2UuTGl0ZXJhbHMuTUlHUkFUSU9OX0VER0VfR1JBUEhfR0VORVJBVE9SX19QT1BVTEFUSU9OLAorCQkJCSB0cnVlLAorCQkJCSBmYWxzZSwKKwkJCQkgZmFsc2UsCisJCQkJIEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IuR0VORVJJQ19WQUxVRV9JTUFHRSwKKwkJCQkgbnVsbCwKKwkJCQkgbnVsbCkpOworCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyBNaWdyYXRpb25FZGdlR3JhcGhHZW5lcmF0b3IuZ2lmLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBPYmplY3QgZ2V0SW1hZ2UoT2JqZWN0IG9iamVjdCkgeworCQlyZXR1cm4gb3ZlcmxheUltYWdlKG9iamVjdCwgZ2V0UmVzb3VyY2VMb2NhdG9yKCkuZ2V0SW1hZ2UoImZ1bGwvb2JqMTYvTWlncmF0aW9uRWRnZUdyYXBoR2VuZXJhdG9yIikpOworCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyB0aGUgbGFiZWwgdGV4dCBmb3IgdGhlIGFkYXB0ZWQgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIFN0cmluZyBnZXRUZXh0KE9iamVjdCBvYmplY3QpIHsKKwkJVVJJIGxhYmVsVmFsdWUgPSAoKE1pZ3JhdGlvbkVkZ2VHcmFwaEdlbmVyYXRvcilvYmplY3QpLmdldFVSSSgpOworCQlTdHJpbmcgbGFiZWwgPSBsYWJlbFZhbHVlID09IG51bGwgPyBudWxsIDogbGFiZWxWYWx1ZS50b1N0cmluZygpOworCQlyZXR1cm4gbGFiZWwgPT0gbnVsbCB8fCBsYWJlbC5sZW5ndGgoKSA9PSAwID8KKwkJCWdldFN0cmluZygiX1VJX01pZ3JhdGlvbkVkZ2VHcmFwaEdlbmVyYXRvcl90eXBlIikgOgorCQkJZ2V0U3RyaW5nKCJfVUlfTWlncmF0aW9uRWRnZUdyYXBoR2VuZXJhdG9yX3R5cGUiKSArICIgIiArIGxhYmVsOworCX0KKworCS8qKgorCSAqIFRoaXMgaGFuZGxlcyBtb2RlbCBub3RpZmljYXRpb25zIGJ5IGNhbGxpbmcge0BsaW5rICN1cGRhdGVDaGlsZHJlbn0gdG8gdXBkYXRlIGFueSBjYWNoZWQKKwkgKiBjaGlsZHJlbiBhbmQgYnkgY3JlYXRpbmcgYSB2aWV3ZXIgbm90aWZpY2F0aW9uLCB3aGljaCBpdCBwYXNzZXMgdG8ge0BsaW5rICNmaXJlTm90aWZ5Q2hhbmdlZH0uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgbm90aWZ5Q2hhbmdlZChOb3RpZmljYXRpb24gbm90aWZpY2F0aW9uKSB7CisJCXVwZGF0ZUNoaWxkcmVuKG5vdGlmaWNhdGlvbik7CisKKwkJc3dpdGNoIChub3RpZmljYXRpb24uZ2V0RmVhdHVyZUlEKE1pZ3JhdGlvbkVkZ2VHcmFwaEdlbmVyYXRvci5jbGFzcykpIHsKKwkJCWNhc2UgR3JhcGhnZW5lcmF0b3JzUGFja2FnZS5NSUdSQVRJT05fRURHRV9HUkFQSF9HRU5FUkFUT1JfX0xPQ0FUSU9OOgorCQkJY2FzZSBHcmFwaGdlbmVyYXRvcnNQYWNrYWdlLk1JR1JBVElPTl9FREdFX0dSQVBIX0dFTkVSQVRPUl9fTUlHUkFUSU9OX1JBVEU6CisJCQljYXNlIEdyYXBoZ2VuZXJhdG9yc1BhY2thZ2UuTUlHUkFUSU9OX0VER0VfR1JBUEhfR0VORVJBVE9SX19QT1BVTEFUSU9OOgorCQkJCWZpcmVOb3RpZnlDaGFuZ2VkKG5ldyBWaWV3ZXJOb3RpZmljYXRpb24obm90aWZpY2F0aW9uLCBub3RpZmljYXRpb24uZ2V0Tm90aWZpZXIoKSwgZmFsc2UsIHRydWUpKTsKKwkJCQlyZXR1cm47CisJCX0KKwkJc3VwZXIubm90aWZ5Q2hhbmdlZChub3RpZmljYXRpb24pOworCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmVkaXQuY29tbWFuZC5Db21tYW5kUGFyYW1ldGVyfXMgZGVzY3JpYmluZyB0aGUgY2hpbGRyZW4KKwkgKiB0aGF0IGNhbiBiZSBjcmVhdGVkIHVuZGVyIHRoaXMgb2JqZWN0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIGNvbGxlY3ROZXdDaGlsZERlc2NyaXB0b3JzKENvbGxlY3Rpb248T2JqZWN0PiBuZXdDaGlsZERlc2NyaXB0b3JzLCBPYmplY3Qgb2JqZWN0KSB7CisJCXN1cGVyLmNvbGxlY3ROZXdDaGlsZERlc2NyaXB0b3JzKG5ld0NoaWxkRGVzY3JpcHRvcnMsIG9iamVjdCk7CisJfQorCit9CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhnZW5lcmF0b3JzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2dyYXBoZ2VuZXJhdG9ycy9wcm92aWRlci9QYWpla05ldEdyYXBoR2VuZXJhdG9ySXRlbVByb3ZpZGVyLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhnZW5lcmF0b3JzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2dyYXBoZ2VuZXJhdG9ycy9wcm92aWRlci9QYWpla05ldEdyYXBoR2VuZXJhdG9ySXRlbVByb3ZpZGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTc2MTMyZAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaGdlbmVyYXRvcnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZ3JhcGhnZW5lcmF0b3JzL3Byb3ZpZGVyL1BhamVrTmV0R3JhcGhHZW5lcmF0b3JJdGVtUHJvdmlkZXIuamF2YQpAQCAtMCwwICsxLDI3NSBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmdyYXBoZ2VuZXJhdG9ycy5wcm92aWRlcjsNCisNCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyogQ29weXJpZ2h0IChjKSAyMDEwIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLg0KKyogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscw0KKyogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wDQorKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdA0KKyogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwNCisqDQorKiBDb250cmlidXRvcnM6IEFybWluIFdlaXNlciwgTWF0dGhpYXMgRmlsdGVyDQorKiBCdW5kZXNpbnN0aXR1dCBmw7xyIFJpc2lrb2Jld2VydHVuZw0KKyogRkcgNDMgLSBFcGlkZW1pb2xvZ2llIHVuZCBab29ub3Nlbg0KKyogRGllZGVyc2RvcmZlciBXZWcgMSwgMTIyNzcgQmVybGluDQorKiANCisqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbg0KKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQorDQoraW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOw0KK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsNCisNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuQWRhcHRlckZhY3Rvcnk7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlVSSTsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeTsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUVkaXRpbmdEb21haW5JdGVtUHJvdmlkZXI7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtTGFiZWxQcm92aWRlcjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtUHJvcGVydHlTb3VyY2U7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklTdHJ1Y3R1cmVkSXRlbUNvbnRlbnRQcm92aWRlcjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVRyZWVJdGVtQ29udGVudFByb3ZpZGVyOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JdGVtUHJvcGVydHlEZXNjcmlwdG9yOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5WaWV3ZXJOb3RpZmljYXRpb247DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhnZW5lcmF0b3JzLkdyYXBoZ2VuZXJhdG9yc1BhY2thZ2U7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhnZW5lcmF0b3JzLlBhamVrTmV0R3JhcGhHZW5lcmF0b3I7DQorDQorLyoqDQorICogVGhpcyBpcyB0aGUgaXRlbSBwcm92aWRlciBhZGFwdGVyIGZvciBhIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmdyYXBoZ2VuZXJhdG9ycy5QYWpla05ldEdyYXBoR2VuZXJhdG9yfSBvYmplY3QuDQorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisgKiBAZ2VuZXJhdGVkDQorICovDQorcHVibGljIGNsYXNzIFBhamVrTmV0R3JhcGhHZW5lcmF0b3JJdGVtUHJvdmlkZXINCisJZXh0ZW5kcyBHcmFwaEdlbmVyYXRvckl0ZW1Qcm92aWRlcg0KKwlpbXBsZW1lbnRzDQorCQlJRWRpdGluZ0RvbWFpbkl0ZW1Qcm92aWRlciwNCisJCUlTdHJ1Y3R1cmVkSXRlbUNvbnRlbnRQcm92aWRlciwNCisJCUlUcmVlSXRlbUNvbnRlbnRQcm92aWRlciwNCisJCUlJdGVtTGFiZWxQcm92aWRlciwNCisJCUlJdGVtUHJvcGVydHlTb3VyY2Ugew0KKwkvKioNCisJICogVGhpcyBjb25zdHJ1Y3RzIGFuIGluc3RhbmNlIGZyb20gYSBmYWN0b3J5IGFuZCBhIG5vdGlmaWVyLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIFBhamVrTmV0R3JhcGhHZW5lcmF0b3JJdGVtUHJvdmlkZXIoQWRhcHRlckZhY3RvcnkgYWRhcHRlckZhY3RvcnkpIHsNCisJCXN1cGVyKGFkYXB0ZXJGYWN0b3J5KTsNCisJfQ0KKw0KKwkvKioNCisJICogVGhpcyByZXR1cm5zIHRoZSBwcm9wZXJ0eSBkZXNjcmlwdG9ycyBmb3IgdGhlIGFkYXB0ZWQgY2xhc3MuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlAT3ZlcnJpZGUNCisJcHVibGljIExpc3Q8SUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I+IGdldFByb3BlcnR5RGVzY3JpcHRvcnMoT2JqZWN0IG9iamVjdCkgew0KKwkJaWYgKGl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzID09IG51bGwpIHsNCisJCQlzdXBlci5nZXRQcm9wZXJ0eURlc2NyaXB0b3JzKG9iamVjdCk7DQorDQorCQkJYWRkRGF0YUZpbGVfbmV0UHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCk7DQorCQkJYWRkQXJlYVByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QpOw0KKwkJCWFkZENvbnRhaW5lclByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QpOw0KKwkJCWFkZFNjYWxpbmdGYWN0b3JQcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0KTsNCisJCQlhZGRGaXRQcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0KTsNCisJCQlhZGRFbmZvcmNlQ29udGFpbm1lbnRQcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0KTsNCisJCX0NCisJCXJldHVybiBpdGVtUHJvcGVydHlEZXNjcmlwdG9yczsNCisJfQ0KKw0KKwkvKioNCisJICogVGhpcyBhZGRzIGEgcHJvcGVydHkgZGVzY3JpcHRvciBmb3IgdGhlIERhdGEgRmlsZSBuZXQgZmVhdHVyZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCB2b2lkIGFkZERhdGFGaWxlX25ldFByb3BlcnR5RGVzY3JpcHRvcihPYmplY3Qgb2JqZWN0KSB7DQorCQlpdGVtUHJvcGVydHlEZXNjcmlwdG9ycy5hZGQNCisJCQkoY3JlYXRlSXRlbVByb3BlcnR5RGVzY3JpcHRvcg0KKwkJCQkoKChDb21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5KWFkYXB0ZXJGYWN0b3J5KS5nZXRSb290QWRhcHRlckZhY3RvcnkoKSwNCisJCQkJIGdldFJlc291cmNlTG9jYXRvcigpLA0KKwkJCQkgZ2V0U3RyaW5nKCJfVUlfUGFqZWtOZXRHcmFwaEdlbmVyYXRvcl9kYXRhRmlsZV9uZXRfZmVhdHVyZSIpLA0KKwkJCQkgZ2V0U3RyaW5nKCJfVUlfUHJvcGVydHlEZXNjcmlwdG9yX2Rlc2NyaXB0aW9uIiwgIl9VSV9QYWpla05ldEdyYXBoR2VuZXJhdG9yX2RhdGFGaWxlX25ldF9mZWF0dXJlIiwgIl9VSV9QYWpla05ldEdyYXBoR2VuZXJhdG9yX3R5cGUiKSwNCisJCQkJIEdyYXBoZ2VuZXJhdG9yc1BhY2thZ2UuTGl0ZXJhbHMuUEFKRUtfTkVUX0dSQVBIX0dFTkVSQVRPUl9fREFUQV9GSUxFX05FVCwNCisJCQkJIHRydWUsDQorCQkJCSBmYWxzZSwNCisJCQkJIGZhbHNlLA0KKwkJCQkgSXRlbVByb3BlcnR5RGVzY3JpcHRvci5HRU5FUklDX1ZBTFVFX0lNQUdFLA0KKwkJCQkgbnVsbCwNCisJCQkJIG51bGwpKTsNCisJfQ0KKw0KKwkvKioNCisJICogVGhpcyBhZGRzIGEgcHJvcGVydHkgZGVzY3JpcHRvciBmb3IgdGhlIEFyZWEgZmVhdHVyZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCB2b2lkIGFkZEFyZWFQcm9wZXJ0eURlc2NyaXB0b3IoT2JqZWN0IG9iamVjdCkgew0KKwkJaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMuYWRkDQorCQkJKGNyZWF0ZUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3INCisJCQkJKCgoQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSlhZGFwdGVyRmFjdG9yeSkuZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCksDQorCQkJCSBnZXRSZXNvdXJjZUxvY2F0b3IoKSwNCisJCQkJIGdldFN0cmluZygiX1VJX1BhamVrTmV0R3JhcGhHZW5lcmF0b3JfYXJlYV9mZWF0dXJlIiksDQorCQkJCSBnZXRTdHJpbmcoIl9VSV9Qcm9wZXJ0eURlc2NyaXB0b3JfZGVzY3JpcHRpb24iLCAiX1VJX1BhamVrTmV0R3JhcGhHZW5lcmF0b3JfYXJlYV9mZWF0dXJlIiwgIl9VSV9QYWpla05ldEdyYXBoR2VuZXJhdG9yX3R5cGUiKSwNCisJCQkJIEdyYXBoZ2VuZXJhdG9yc1BhY2thZ2UuTGl0ZXJhbHMuUEFKRUtfTkVUX0dSQVBIX0dFTkVSQVRPUl9fQVJFQSwNCisJCQkJIHRydWUsDQorCQkJCSBmYWxzZSwNCisJCQkJIGZhbHNlLA0KKwkJCQkgSXRlbVByb3BlcnR5RGVzY3JpcHRvci5SRUFMX1ZBTFVFX0lNQUdFLA0KKwkJCQkgbnVsbCwNCisJCQkJIG51bGwpKTsNCisJfQ0KKw0KKwkvKioNCisJICogVGhpcyBhZGRzIGEgcHJvcGVydHkgZGVzY3JpcHRvciBmb3IgdGhlIENvbnRhaW5lciBmZWF0dXJlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIHZvaWQgYWRkQ29udGFpbmVyUHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdCBvYmplY3QpIHsNCisJCWl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzLmFkZA0KKwkJCShjcmVhdGVJdGVtUHJvcGVydHlEZXNjcmlwdG9yDQorCQkJCSgoKENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnkpYWRhcHRlckZhY3RvcnkpLmdldFJvb3RBZGFwdGVyRmFjdG9yeSgpLA0KKwkJCQkgZ2V0UmVzb3VyY2VMb2NhdG9yKCksDQorCQkJCSBnZXRTdHJpbmcoIl9VSV9QYWpla05ldEdyYXBoR2VuZXJhdG9yX2NvbnRhaW5lcl9mZWF0dXJlIiksDQorCQkJCSBnZXRTdHJpbmcoIl9VSV9Qcm9wZXJ0eURlc2NyaXB0b3JfZGVzY3JpcHRpb24iLCAiX1VJX1BhamVrTmV0R3JhcGhHZW5lcmF0b3JfY29udGFpbmVyX2ZlYXR1cmUiLCAiX1VJX1BhamVrTmV0R3JhcGhHZW5lcmF0b3JfdHlwZSIpLA0KKwkJCQkgR3JhcGhnZW5lcmF0b3JzUGFja2FnZS5MaXRlcmFscy5QQUpFS19ORVRfR1JBUEhfR0VORVJBVE9SX19DT05UQUlORVIsDQorCQkJCSB0cnVlLA0KKwkJCQkgZmFsc2UsDQorCQkJCSBmYWxzZSwNCisJCQkJIEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IuR0VORVJJQ19WQUxVRV9JTUFHRSwNCisJCQkJIG51bGwsDQorCQkJCSBudWxsKSk7DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgYWRkcyBhIHByb3BlcnR5IGRlc2NyaXB0b3IgZm9yIHRoZSBTY2FsaW5nIEZhY3RvciBmZWF0dXJlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIHZvaWQgYWRkU2NhbGluZ0ZhY3RvclByb3BlcnR5RGVzY3JpcHRvcihPYmplY3Qgb2JqZWN0KSB7DQorCQlpdGVtUHJvcGVydHlEZXNjcmlwdG9ycy5hZGQNCisJCQkoY3JlYXRlSXRlbVByb3BlcnR5RGVzY3JpcHRvcg0KKwkJCQkoKChDb21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5KWFkYXB0ZXJGYWN0b3J5KS5nZXRSb290QWRhcHRlckZhY3RvcnkoKSwNCisJCQkJIGdldFJlc291cmNlTG9jYXRvcigpLA0KKwkJCQkgZ2V0U3RyaW5nKCJfVUlfUGFqZWtOZXRHcmFwaEdlbmVyYXRvcl9zY2FsaW5nRmFjdG9yX2ZlYXR1cmUiKSwNCisJCQkJIGdldFN0cmluZygiX1VJX1Byb3BlcnR5RGVzY3JpcHRvcl9kZXNjcmlwdGlvbiIsICJfVUlfUGFqZWtOZXRHcmFwaEdlbmVyYXRvcl9zY2FsaW5nRmFjdG9yX2ZlYXR1cmUiLCAiX1VJX1BhamVrTmV0R3JhcGhHZW5lcmF0b3JfdHlwZSIpLA0KKwkJCQkgR3JhcGhnZW5lcmF0b3JzUGFja2FnZS5MaXRlcmFscy5QQUpFS19ORVRfR1JBUEhfR0VORVJBVE9SX19TQ0FMSU5HX0ZBQ1RPUiwNCisJCQkJIHRydWUsDQorCQkJCSBmYWxzZSwNCisJCQkJIGZhbHNlLA0KKwkJCQkgSXRlbVByb3BlcnR5RGVzY3JpcHRvci5SRUFMX1ZBTFVFX0lNQUdFLA0KKwkJCQkgbnVsbCwNCisJCQkJIG51bGwpKTsNCisJfQ0KKw0KKwkvKioNCisJICogVGhpcyBhZGRzIGEgcHJvcGVydHkgZGVzY3JpcHRvciBmb3IgdGhlIEZpdCBmZWF0dXJlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIHZvaWQgYWRkRml0UHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdCBvYmplY3QpIHsNCisJCWl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzLmFkZA0KKwkJCShjcmVhdGVJdGVtUHJvcGVydHlEZXNjcmlwdG9yDQorCQkJCSgoKENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnkpYWRhcHRlckZhY3RvcnkpLmdldFJvb3RBZGFwdGVyRmFjdG9yeSgpLA0KKwkJCQkgZ2V0UmVzb3VyY2VMb2NhdG9yKCksDQorCQkJCSBnZXRTdHJpbmcoIl9VSV9QYWpla05ldEdyYXBoR2VuZXJhdG9yX2ZpdF9mZWF0dXJlIiksDQorCQkJCSBnZXRTdHJpbmcoIl9VSV9Qcm9wZXJ0eURlc2NyaXB0b3JfZGVzY3JpcHRpb24iLCAiX1VJX1BhamVrTmV0R3JhcGhHZW5lcmF0b3JfZml0X2ZlYXR1cmUiLCAiX1VJX1BhamVrTmV0R3JhcGhHZW5lcmF0b3JfdHlwZSIpLA0KKwkJCQkgR3JhcGhnZW5lcmF0b3JzUGFja2FnZS5MaXRlcmFscy5QQUpFS19ORVRfR1JBUEhfR0VORVJBVE9SX19GSVQsDQorCQkJCSB0cnVlLA0KKwkJCQkgZmFsc2UsDQorCQkJCSBmYWxzZSwNCisJCQkJIEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IuQk9PTEVBTl9WQUxVRV9JTUFHRSwNCisJCQkJIG51bGwsDQorCQkJCSBudWxsKSk7DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgYWRkcyBhIHByb3BlcnR5IGRlc2NyaXB0b3IgZm9yIHRoZSBFbmZvcmNlIENvbnRhaW5tZW50IGZlYXR1cmUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgdm9pZCBhZGRFbmZvcmNlQ29udGFpbm1lbnRQcm9wZXJ0eURlc2NyaXB0b3IoT2JqZWN0IG9iamVjdCkgew0KKwkJaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMuYWRkDQorCQkJKGNyZWF0ZUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3INCisJCQkJKCgoQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSlhZGFwdGVyRmFjdG9yeSkuZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCksDQorCQkJCSBnZXRSZXNvdXJjZUxvY2F0b3IoKSwNCisJCQkJIGdldFN0cmluZygiX1VJX1BhamVrTmV0R3JhcGhHZW5lcmF0b3JfZW5mb3JjZUNvbnRhaW5tZW50X2ZlYXR1cmUiKSwNCisJCQkJIGdldFN0cmluZygiX1VJX1Byb3BlcnR5RGVzY3JpcHRvcl9kZXNjcmlwdGlvbiIsICJfVUlfUGFqZWtOZXRHcmFwaEdlbmVyYXRvcl9lbmZvcmNlQ29udGFpbm1lbnRfZmVhdHVyZSIsICJfVUlfUGFqZWtOZXRHcmFwaEdlbmVyYXRvcl90eXBlIiksDQorCQkJCSBHcmFwaGdlbmVyYXRvcnNQYWNrYWdlLkxpdGVyYWxzLlBBSkVLX05FVF9HUkFQSF9HRU5FUkFUT1JfX0VORk9SQ0VfQ09OVEFJTk1FTlQsDQorCQkJCSB0cnVlLA0KKwkJCQkgZmFsc2UsDQorCQkJCSBmYWxzZSwNCisJCQkJIEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IuQk9PTEVBTl9WQUxVRV9JTUFHRSwNCisJCQkJIG51bGwsDQorCQkJCSBudWxsKSk7DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgcmV0dXJucyBQYWpla05ldEdyYXBoR2VuZXJhdG9yLmdpZi4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCUBPdmVycmlkZQ0KKwlwdWJsaWMgT2JqZWN0IGdldEltYWdlKE9iamVjdCBvYmplY3QpIHsNCisJCXJldHVybiBvdmVybGF5SW1hZ2Uob2JqZWN0LCBnZXRSZXNvdXJjZUxvY2F0b3IoKS5nZXRJbWFnZSgiZnVsbC9vYmoxNi9QYWpla05ldEdyYXBoR2VuZXJhdG9yIikpOw0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIHJldHVybnMgdGhlIGxhYmVsIHRleHQgZm9yIHRoZSBhZGFwdGVkIGNsYXNzLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJQE92ZXJyaWRlDQorCXB1YmxpYyBTdHJpbmcgZ2V0VGV4dChPYmplY3Qgb2JqZWN0KSB7DQorCQlVUkkgbGFiZWxWYWx1ZSA9ICgoUGFqZWtOZXRHcmFwaEdlbmVyYXRvcilvYmplY3QpLmdldFVSSSgpOw0KKwkJU3RyaW5nIGxhYmVsID0gbGFiZWxWYWx1ZSA9PSBudWxsID8gbnVsbCA6IGxhYmVsVmFsdWUudG9TdHJpbmcoKTsNCisJCXJldHVybiBsYWJlbCA9PSBudWxsIHx8IGxhYmVsLmxlbmd0aCgpID09IDAgPw0KKwkJCWdldFN0cmluZygiX1VJX1BhamVrTmV0R3JhcGhHZW5lcmF0b3JfdHlwZSIpIDoNCisJCQlnZXRTdHJpbmcoIl9VSV9QYWpla05ldEdyYXBoR2VuZXJhdG9yX3R5cGUiKSArICIgIiArIGxhYmVsOw0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIGhhbmRsZXMgbW9kZWwgbm90aWZpY2F0aW9ucyBieSBjYWxsaW5nIHtAbGluayAjdXBkYXRlQ2hpbGRyZW59IHRvIHVwZGF0ZSBhbnkgY2FjaGVkDQorCSAqIGNoaWxkcmVuIGFuZCBieSBjcmVhdGluZyBhIHZpZXdlciBub3RpZmljYXRpb24sIHdoaWNoIGl0IHBhc3NlcyB0byB7QGxpbmsgI2ZpcmVOb3RpZnlDaGFuZ2VkfS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCUBPdmVycmlkZQ0KKwlwdWJsaWMgdm9pZCBub3RpZnlDaGFuZ2VkKE5vdGlmaWNhdGlvbiBub3RpZmljYXRpb24pIHsNCisJCXVwZGF0ZUNoaWxkcmVuKG5vdGlmaWNhdGlvbik7DQorDQorCQlzd2l0Y2ggKG5vdGlmaWNhdGlvbi5nZXRGZWF0dXJlSUQoUGFqZWtOZXRHcmFwaEdlbmVyYXRvci5jbGFzcykpIHsNCisJCQljYXNlIEdyYXBoZ2VuZXJhdG9yc1BhY2thZ2UuUEFKRUtfTkVUX0dSQVBIX0dFTkVSQVRPUl9fREFUQV9GSUxFX05FVDoNCisJCQljYXNlIEdyYXBoZ2VuZXJhdG9yc1BhY2thZ2UuUEFKRUtfTkVUX0dSQVBIX0dFTkVSQVRPUl9fQVJFQToNCisJCQljYXNlIEdyYXBoZ2VuZXJhdG9yc1BhY2thZ2UuUEFKRUtfTkVUX0dSQVBIX0dFTkVSQVRPUl9fQ09OVEFJTkVSOg0KKwkJCWNhc2UgR3JhcGhnZW5lcmF0b3JzUGFja2FnZS5QQUpFS19ORVRfR1JBUEhfR0VORVJBVE9SX19TQ0FMSU5HX0ZBQ1RPUjoNCisJCQljYXNlIEdyYXBoZ2VuZXJhdG9yc1BhY2thZ2UuUEFKRUtfTkVUX0dSQVBIX0dFTkVSQVRPUl9fRklUOg0KKwkJCWNhc2UgR3JhcGhnZW5lcmF0b3JzUGFja2FnZS5QQUpFS19ORVRfR1JBUEhfR0VORVJBVE9SX19FTkZPUkNFX0NPTlRBSU5NRU5UOg0KKwkJCQlmaXJlTm90aWZ5Q2hhbmdlZChuZXcgVmlld2VyTm90aWZpY2F0aW9uKG5vdGlmaWNhdGlvbiwgbm90aWZpY2F0aW9uLmdldE5vdGlmaWVyKCksIGZhbHNlLCB0cnVlKSk7DQorCQkJCXJldHVybjsNCisJCX0NCisJCXN1cGVyLm5vdGlmeUNoYW5nZWQobm90aWZpY2F0aW9uKTsNCisJfQ0KKw0KKwkvKioNCisJICogVGhpcyBhZGRzIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuZWRpdC5jb21tYW5kLkNvbW1hbmRQYXJhbWV0ZXJ9cyBkZXNjcmliaW5nIHRoZSBjaGlsZHJlbg0KKwkgKiB0aGF0IGNhbiBiZSBjcmVhdGVkIHVuZGVyIHRoaXMgb2JqZWN0Lg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJQE92ZXJyaWRlDQorCXByb3RlY3RlZCB2b2lkIGNvbGxlY3ROZXdDaGlsZERlc2NyaXB0b3JzKENvbGxlY3Rpb248T2JqZWN0PiBuZXdDaGlsZERlc2NyaXB0b3JzLCBPYmplY3Qgb2JqZWN0KSB7DQorCQlzdXBlci5jb2xsZWN0TmV3Q2hpbGREZXNjcmlwdG9ycyhuZXdDaGlsZERlc2NyaXB0b3JzLCBvYmplY3QpOw0KKwl9DQorDQorfQ0KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaGdlbmVyYXRvcnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZ3JhcGhnZW5lcmF0b3JzL3Byb3ZpZGVyL1BsYXRlQ2FycmVlR2xvYmVHcmFwaEdlbmVyYXRvckl0ZW1Qcm92aWRlci5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmdyYXBoZ2VuZXJhdG9ycy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9ncmFwaGdlbmVyYXRvcnMvcHJvdmlkZXIvUGxhdGVDYXJyZWVHbG9iZUdyYXBoR2VuZXJhdG9ySXRlbVByb3ZpZGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTY2MTU2YgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaGdlbmVyYXRvcnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZ3JhcGhnZW5lcmF0b3JzL3Byb3ZpZGVyL1BsYXRlQ2FycmVlR2xvYmVHcmFwaEdlbmVyYXRvckl0ZW1Qcm92aWRlci5qYXZhCkBAIC0wLDAgKzEsMTc1IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA5LDIwMTAgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmdyYXBoZ2VuZXJhdG9ycy5wcm92aWRlcjsKKworCitpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5BZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlVSSTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5Db21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklFZGl0aW5nRG9tYWluSXRlbVByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtTGFiZWxQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbVByb3BlcnR5RGVzY3JpcHRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbVByb3BlcnR5U291cmNlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklTdHJ1Y3R1cmVkSXRlbUNvbnRlbnRQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JVHJlZUl0ZW1Db250ZW50UHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSXRlbVByb3BlcnR5RGVzY3JpcHRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5WaWV3ZXJOb3RpZmljYXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaGdlbmVyYXRvcnMuR3JhcGhnZW5lcmF0b3JzUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmdyYXBoZ2VuZXJhdG9ycy5QbGF0ZUNhcnJlZUdsb2JlR3JhcGhHZW5lcmF0b3I7CisKKy8qKgorICogVGhpcyBpcyB0aGUgaXRlbSBwcm92aWRlciBhZGFwdGVyIGZvciBhIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmdyYXBoZ2VuZXJhdG9ycy5QbGF0ZUNhcnJlZUdsb2JlR3JhcGhHZW5lcmF0b3J9IG9iamVjdC4KKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIFBsYXRlQ2FycmVlR2xvYmVHcmFwaEdlbmVyYXRvckl0ZW1Qcm92aWRlcgorCWV4dGVuZHMgTGF0dGljZUdyYXBoR2VuZXJhdG9ySXRlbVByb3ZpZGVyCisJaW1wbGVtZW50cworCQlJRWRpdGluZ0RvbWFpbkl0ZW1Qcm92aWRlciwKKwkJSVN0cnVjdHVyZWRJdGVtQ29udGVudFByb3ZpZGVyLAorCQlJVHJlZUl0ZW1Db250ZW50UHJvdmlkZXIsCisJCUlJdGVtTGFiZWxQcm92aWRlciwKKwkJSUl0ZW1Qcm9wZXJ0eVNvdXJjZSB7CisJLyoqCisJICogVGhpcyBjb25zdHJ1Y3RzIGFuIGluc3RhbmNlIGZyb20gYSBmYWN0b3J5IGFuZCBhIG5vdGlmaWVyLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBQbGF0ZUNhcnJlZUdsb2JlR3JhcGhHZW5lcmF0b3JJdGVtUHJvdmlkZXIoQWRhcHRlckZhY3RvcnkgYWRhcHRlckZhY3RvcnkpIHsKKwkJc3VwZXIoYWRhcHRlckZhY3RvcnkpOworCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyB0aGUgcHJvcGVydHkgZGVzY3JpcHRvcnMgZm9yIHRoZSBhZGFwdGVkIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBMaXN0PElJdGVtUHJvcGVydHlEZXNjcmlwdG9yPiBnZXRQcm9wZXJ0eURlc2NyaXB0b3JzKE9iamVjdCBvYmplY3QpIHsKKwkJaWYgKGl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzID09IG51bGwpIHsKKwkJCXN1cGVyLmdldFByb3BlcnR5RGVzY3JpcHRvcnMob2JqZWN0KTsKKworCQkJYWRkQW5ndWxhclN0ZXBQcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0KTsKKwkJCWFkZFJhZGl1c1Byb3BlcnR5RGVzY3JpcHRvcihvYmplY3QpOworCQl9CisJCXJldHVybiBpdGVtUHJvcGVydHlEZXNjcmlwdG9yczsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFkZHMgYSBwcm9wZXJ0eSBkZXNjcmlwdG9yIGZvciB0aGUgQW5ndWxhciBTdGVwIGZlYXR1cmUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgYWRkQW5ndWxhclN0ZXBQcm9wZXJ0eURlc2NyaXB0b3IoT2JqZWN0IG9iamVjdCkgeworCQlpdGVtUHJvcGVydHlEZXNjcmlwdG9ycy5hZGQKKwkJCShjcmVhdGVJdGVtUHJvcGVydHlEZXNjcmlwdG9yCisJCQkJKCgoQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSlhZGFwdGVyRmFjdG9yeSkuZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCksCisJCQkJIGdldFJlc291cmNlTG9jYXRvcigpLAorCQkJCSBnZXRTdHJpbmcoIl9VSV9QbGF0ZUNhcnJlZUdsb2JlR3JhcGhHZW5lcmF0b3JfYW5ndWxhclN0ZXBfZmVhdHVyZSIpLAorCQkJCSBnZXRTdHJpbmcoIl9VSV9Qcm9wZXJ0eURlc2NyaXB0b3JfZGVzY3JpcHRpb24iLCAiX1VJX1BsYXRlQ2FycmVlR2xvYmVHcmFwaEdlbmVyYXRvcl9hbmd1bGFyU3RlcF9mZWF0dXJlIiwgIl9VSV9QbGF0ZUNhcnJlZUdsb2JlR3JhcGhHZW5lcmF0b3JfdHlwZSIpLAorCQkJCSBHcmFwaGdlbmVyYXRvcnNQYWNrYWdlLkxpdGVyYWxzLlBMQVRFX0NBUlJFRV9HTE9CRV9HUkFQSF9HRU5FUkFUT1JfX0FOR1VMQVJfU1RFUCwKKwkJCQkgdHJ1ZSwKKwkJCQkgZmFsc2UsCisJCQkJIGZhbHNlLAorCQkJCSBJdGVtUHJvcGVydHlEZXNjcmlwdG9yLklOVEVHUkFMX1ZBTFVFX0lNQUdFLAorCQkJCSBudWxsLAorCQkJCSBudWxsKSk7CisJfQorCisJLyoqCisJICogVGhpcyBhZGRzIGEgcHJvcGVydHkgZGVzY3JpcHRvciBmb3IgdGhlIFJhZGl1cyBmZWF0dXJlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIGFkZFJhZGl1c1Byb3BlcnR5RGVzY3JpcHRvcihPYmplY3Qgb2JqZWN0KSB7CisJCWl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzLmFkZAorCQkJKGNyZWF0ZUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IKKwkJCQkoKChDb21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5KWFkYXB0ZXJGYWN0b3J5KS5nZXRSb290QWRhcHRlckZhY3RvcnkoKSwKKwkJCQkgZ2V0UmVzb3VyY2VMb2NhdG9yKCksCisJCQkJIGdldFN0cmluZygiX1VJX1BsYXRlQ2FycmVlR2xvYmVHcmFwaEdlbmVyYXRvcl9yYWRpdXNfZmVhdHVyZSIpLAorCQkJCSBnZXRTdHJpbmcoIl9VSV9Qcm9wZXJ0eURlc2NyaXB0b3JfZGVzY3JpcHRpb24iLCAiX1VJX1BsYXRlQ2FycmVlR2xvYmVHcmFwaEdlbmVyYXRvcl9yYWRpdXNfZmVhdHVyZSIsICJfVUlfUGxhdGVDYXJyZWVHbG9iZUdyYXBoR2VuZXJhdG9yX3R5cGUiKSwKKwkJCQkgR3JhcGhnZW5lcmF0b3JzUGFja2FnZS5MaXRlcmFscy5QTEFURV9DQVJSRUVfR0xPQkVfR1JBUEhfR0VORVJBVE9SX19SQURJVVMsCisJCQkJIHRydWUsCisJCQkJIGZhbHNlLAorCQkJCSBmYWxzZSwKKwkJCQkgSXRlbVByb3BlcnR5RGVzY3JpcHRvci5SRUFMX1ZBTFVFX0lNQUdFLAorCQkJCSBudWxsLAorCQkJCSBudWxsKSk7CisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIFBsYXRlQ2FycmVlR2xvYmVHcmFwaEdlbmVyYXRvci5naWYuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIE9iamVjdCBnZXRJbWFnZShPYmplY3Qgb2JqZWN0KSB7CisJCXJldHVybiBvdmVybGF5SW1hZ2Uob2JqZWN0LCBnZXRSZXNvdXJjZUxvY2F0b3IoKS5nZXRJbWFnZSgiZnVsbC9vYmoxNi9QbGF0ZUNhcnJlZUdsb2JlR3JhcGhHZW5lcmF0b3IiKSk7CisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIHRoZSBsYWJlbCB0ZXh0IGZvciB0aGUgYWRhcHRlZCBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgU3RyaW5nIGdldFRleHQoT2JqZWN0IG9iamVjdCkgeworCQlVUkkgbGFiZWxWYWx1ZSA9ICgoUGxhdGVDYXJyZWVHbG9iZUdyYXBoR2VuZXJhdG9yKW9iamVjdCkuZ2V0VVJJKCk7CisJCVN0cmluZyBsYWJlbCA9IGxhYmVsVmFsdWUgPT0gbnVsbCA/IG51bGwgOiBsYWJlbFZhbHVlLnRvU3RyaW5nKCk7CisJCXJldHVybiBsYWJlbCA9PSBudWxsIHx8IGxhYmVsLmxlbmd0aCgpID09IDAgPworCQkJZ2V0U3RyaW5nKCJfVUlfUGxhdGVDYXJyZWVHbG9iZUdyYXBoR2VuZXJhdG9yX3R5cGUiKSA6CisJCQlnZXRTdHJpbmcoIl9VSV9QbGF0ZUNhcnJlZUdsb2JlR3JhcGhHZW5lcmF0b3JfdHlwZSIpICsgIiAiICsgbGFiZWw7CisJfQorCisJLyoqCisJICogVGhpcyBoYW5kbGVzIG1vZGVsIG5vdGlmaWNhdGlvbnMgYnkgY2FsbGluZyB7QGxpbmsgI3VwZGF0ZUNoaWxkcmVufSB0byB1cGRhdGUgYW55IGNhY2hlZAorCSAqIGNoaWxkcmVuIGFuZCBieSBjcmVhdGluZyBhIHZpZXdlciBub3RpZmljYXRpb24sIHdoaWNoIGl0IHBhc3NlcyB0byB7QGxpbmsgI2ZpcmVOb3RpZnlDaGFuZ2VkfS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBub3RpZnlDaGFuZ2VkKE5vdGlmaWNhdGlvbiBub3RpZmljYXRpb24pIHsKKwkJdXBkYXRlQ2hpbGRyZW4obm90aWZpY2F0aW9uKTsKKworCQlzd2l0Y2ggKG5vdGlmaWNhdGlvbi5nZXRGZWF0dXJlSUQoUGxhdGVDYXJyZWVHbG9iZUdyYXBoR2VuZXJhdG9yLmNsYXNzKSkgeworCQkJY2FzZSBHcmFwaGdlbmVyYXRvcnNQYWNrYWdlLlBMQVRFX0NBUlJFRV9HTE9CRV9HUkFQSF9HRU5FUkFUT1JfX0FOR1VMQVJfU1RFUDoKKwkJCWNhc2UgR3JhcGhnZW5lcmF0b3JzUGFja2FnZS5QTEFURV9DQVJSRUVfR0xPQkVfR1JBUEhfR0VORVJBVE9SX19SQURJVVM6CisJCQkJZmlyZU5vdGlmeUNoYW5nZWQobmV3IFZpZXdlck5vdGlmaWNhdGlvbihub3RpZmljYXRpb24sIG5vdGlmaWNhdGlvbi5nZXROb3RpZmllcigpLCBmYWxzZSwgdHJ1ZSkpOworCQkJCXJldHVybjsKKwkJfQorCQlzdXBlci5ub3RpZnlDaGFuZ2VkKG5vdGlmaWNhdGlvbik7CisJfQorCisJLyoqCisJICogVGhpcyBhZGRzIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuZWRpdC5jb21tYW5kLkNvbW1hbmRQYXJhbWV0ZXJ9cyBkZXNjcmliaW5nIHRoZSBjaGlsZHJlbgorCSAqIHRoYXQgY2FuIGJlIGNyZWF0ZWQgdW5kZXIgdGhpcyBvYmplY3QuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgY29sbGVjdE5ld0NoaWxkRGVzY3JpcHRvcnMoQ29sbGVjdGlvbjxPYmplY3Q+IG5ld0NoaWxkRGVzY3JpcHRvcnMsIE9iamVjdCBvYmplY3QpIHsKKwkJc3VwZXIuY29sbGVjdE5ld0NoaWxkRGVzY3JpcHRvcnMobmV3Q2hpbGREZXNjcmlwdG9ycywgb2JqZWN0KTsKKwl9CisKK30KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaGdlbmVyYXRvcnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZ3JhcGhnZW5lcmF0b3JzL3Byb3ZpZGVyL1NxdWFyZUxhdHRpY2VHcmFwaEdlbmVyYXRvckl0ZW1Qcm92aWRlci5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmdyYXBoZ2VuZXJhdG9ycy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9ncmFwaGdlbmVyYXRvcnMvcHJvdmlkZXIvU3F1YXJlTGF0dGljZUdyYXBoR2VuZXJhdG9ySXRlbVByb3ZpZGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzMwZDY4YwotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaGdlbmVyYXRvcnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZ3JhcGhnZW5lcmF0b3JzL3Byb3ZpZGVyL1NxdWFyZUxhdHRpY2VHcmFwaEdlbmVyYXRvckl0ZW1Qcm92aWRlci5qYXZhCkBAIC0wLDAgKzEsMTk5IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA5LDIwMTAgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmdyYXBoZ2VuZXJhdG9ycy5wcm92aWRlcjsKKworCitpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5BZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlVSSTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5Db21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklFZGl0aW5nRG9tYWluSXRlbVByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtTGFiZWxQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbVByb3BlcnR5RGVzY3JpcHRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbVByb3BlcnR5U291cmNlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklTdHJ1Y3R1cmVkSXRlbUNvbnRlbnRQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JVHJlZUl0ZW1Db250ZW50UHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSXRlbVByb3BlcnR5RGVzY3JpcHRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5WaWV3ZXJOb3RpZmljYXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaGdlbmVyYXRvcnMuR3JhcGhnZW5lcmF0b3JzUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmdyYXBoZ2VuZXJhdG9ycy5TcXVhcmVMYXR0aWNlR3JhcGhHZW5lcmF0b3I7CisKKy8qKgorICogVGhpcyBpcyB0aGUgaXRlbSBwcm92aWRlciBhZGFwdGVyIGZvciBhIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmdyYXBoZ2VuZXJhdG9ycy5TcXVhcmVMYXR0aWNlR3JhcGhHZW5lcmF0b3J9IG9iamVjdC4KKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIFNxdWFyZUxhdHRpY2VHcmFwaEdlbmVyYXRvckl0ZW1Qcm92aWRlcgorCWV4dGVuZHMgTGF0dGljZUdyYXBoR2VuZXJhdG9ySXRlbVByb3ZpZGVyCisJaW1wbGVtZW50cworCQlJRWRpdGluZ0RvbWFpbkl0ZW1Qcm92aWRlciwKKwkJSVN0cnVjdHVyZWRJdGVtQ29udGVudFByb3ZpZGVyLAorCQlJVHJlZUl0ZW1Db250ZW50UHJvdmlkZXIsCisJCUlJdGVtTGFiZWxQcm92aWRlciwKKwkJSUl0ZW1Qcm9wZXJ0eVNvdXJjZSB7CisJLyoqCisJICogVGhpcyBjb25zdHJ1Y3RzIGFuIGluc3RhbmNlIGZyb20gYSBmYWN0b3J5IGFuZCBhIG5vdGlmaWVyLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBTcXVhcmVMYXR0aWNlR3JhcGhHZW5lcmF0b3JJdGVtUHJvdmlkZXIoQWRhcHRlckZhY3RvcnkgYWRhcHRlckZhY3RvcnkpIHsKKwkJc3VwZXIoYWRhcHRlckZhY3RvcnkpOworCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyB0aGUgcHJvcGVydHkgZGVzY3JpcHRvcnMgZm9yIHRoZSBhZGFwdGVkIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBMaXN0PElJdGVtUHJvcGVydHlEZXNjcmlwdG9yPiBnZXRQcm9wZXJ0eURlc2NyaXB0b3JzKE9iamVjdCBvYmplY3QpIHsKKwkJaWYgKGl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzID09IG51bGwpIHsKKwkJCXN1cGVyLmdldFByb3BlcnR5RGVzY3JpcHRvcnMob2JqZWN0KTsKKworCQkJYWRkWFNpemVQcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0KTsKKwkJCWFkZFlTaXplUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCk7CisJCQlhZGRBcmVhUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCk7CisJCX0KKwkJcmV0dXJuIGl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzOworCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyBhIHByb3BlcnR5IGRlc2NyaXB0b3IgZm9yIHRoZSBYU2l6ZSBmZWF0dXJlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIGFkZFhTaXplUHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdCBvYmplY3QpIHsKKwkJaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMuYWRkCisJCQkoY3JlYXRlSXRlbVByb3BlcnR5RGVzY3JpcHRvcgorCQkJCSgoKENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnkpYWRhcHRlckZhY3RvcnkpLmdldFJvb3RBZGFwdGVyRmFjdG9yeSgpLAorCQkJCSBnZXRSZXNvdXJjZUxvY2F0b3IoKSwKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfU3F1YXJlTGF0dGljZUdyYXBoR2VuZXJhdG9yX3hTaXplX2ZlYXR1cmUiKSwKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfUHJvcGVydHlEZXNjcmlwdG9yX2Rlc2NyaXB0aW9uIiwgIl9VSV9TcXVhcmVMYXR0aWNlR3JhcGhHZW5lcmF0b3JfeFNpemVfZmVhdHVyZSIsICJfVUlfU3F1YXJlTGF0dGljZUdyYXBoR2VuZXJhdG9yX3R5cGUiKSwKKwkJCQkgR3JhcGhnZW5lcmF0b3JzUGFja2FnZS5MaXRlcmFscy5TUVVBUkVfTEFUVElDRV9HUkFQSF9HRU5FUkFUT1JfX1hTSVpFLAorCQkJCSB0cnVlLAorCQkJCSBmYWxzZSwKKwkJCQkgZmFsc2UsCisJCQkJIEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IuSU5URUdSQUxfVkFMVUVfSU1BR0UsCisJCQkJIG51bGwsCisJCQkJIG51bGwpKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFkZHMgYSBwcm9wZXJ0eSBkZXNjcmlwdG9yIGZvciB0aGUgWVNpemUgZmVhdHVyZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBhZGRZU2l6ZVByb3BlcnR5RGVzY3JpcHRvcihPYmplY3Qgb2JqZWN0KSB7CisJCWl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzLmFkZAorCQkJKGNyZWF0ZUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IKKwkJCQkoKChDb21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5KWFkYXB0ZXJGYWN0b3J5KS5nZXRSb290QWRhcHRlckZhY3RvcnkoKSwKKwkJCQkgZ2V0UmVzb3VyY2VMb2NhdG9yKCksCisJCQkJIGdldFN0cmluZygiX1VJX1NxdWFyZUxhdHRpY2VHcmFwaEdlbmVyYXRvcl95U2l6ZV9mZWF0dXJlIiksCisJCQkJIGdldFN0cmluZygiX1VJX1Byb3BlcnR5RGVzY3JpcHRvcl9kZXNjcmlwdGlvbiIsICJfVUlfU3F1YXJlTGF0dGljZUdyYXBoR2VuZXJhdG9yX3lTaXplX2ZlYXR1cmUiLCAiX1VJX1NxdWFyZUxhdHRpY2VHcmFwaEdlbmVyYXRvcl90eXBlIiksCisJCQkJIEdyYXBoZ2VuZXJhdG9yc1BhY2thZ2UuTGl0ZXJhbHMuU1FVQVJFX0xBVFRJQ0VfR1JBUEhfR0VORVJBVE9SX19ZU0laRSwKKwkJCQkgdHJ1ZSwKKwkJCQkgZmFsc2UsCisJCQkJIGZhbHNlLAorCQkJCSBJdGVtUHJvcGVydHlEZXNjcmlwdG9yLklOVEVHUkFMX1ZBTFVFX0lNQUdFLAorCQkJCSBudWxsLAorCQkJCSBudWxsKSk7CisJfQorCisJLyoqCisJICogVGhpcyBhZGRzIGEgcHJvcGVydHkgZGVzY3JpcHRvciBmb3IgdGhlIEFyZWEgZmVhdHVyZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBhZGRBcmVhUHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdCBvYmplY3QpIHsKKwkJaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMuYWRkCisJCQkoY3JlYXRlSXRlbVByb3BlcnR5RGVzY3JpcHRvcgorCQkJCSgoKENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnkpYWRhcHRlckZhY3RvcnkpLmdldFJvb3RBZGFwdGVyRmFjdG9yeSgpLAorCQkJCSBnZXRSZXNvdXJjZUxvY2F0b3IoKSwKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfU3F1YXJlTGF0dGljZUdyYXBoR2VuZXJhdG9yX2FyZWFfZmVhdHVyZSIpLAorCQkJCSBnZXRTdHJpbmcoIl9VSV9Qcm9wZXJ0eURlc2NyaXB0b3JfZGVzY3JpcHRpb24iLCAiX1VJX1NxdWFyZUxhdHRpY2VHcmFwaEdlbmVyYXRvcl9hcmVhX2ZlYXR1cmUiLCAiX1VJX1NxdWFyZUxhdHRpY2VHcmFwaEdlbmVyYXRvcl90eXBlIiksCisJCQkJIEdyYXBoZ2VuZXJhdG9yc1BhY2thZ2UuTGl0ZXJhbHMuU1FVQVJFX0xBVFRJQ0VfR1JBUEhfR0VORVJBVE9SX19BUkVBLAorCQkJCSB0cnVlLAorCQkJCSBmYWxzZSwKKwkJCQkgZmFsc2UsCisJCQkJIEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IuUkVBTF9WQUxVRV9JTUFHRSwKKwkJCQkgbnVsbCwKKwkJCQkgbnVsbCkpOworCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyBTcXVhcmVMYXR0aWNlR3JhcGhHZW5lcmF0b3IuZ2lmLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBPYmplY3QgZ2V0SW1hZ2UoT2JqZWN0IG9iamVjdCkgeworCQlyZXR1cm4gb3ZlcmxheUltYWdlKG9iamVjdCwgZ2V0UmVzb3VyY2VMb2NhdG9yKCkuZ2V0SW1hZ2UoImZ1bGwvb2JqMTYvU3F1YXJlTGF0dGljZUdyYXBoR2VuZXJhdG9yIikpOworCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyB0aGUgbGFiZWwgdGV4dCBmb3IgdGhlIGFkYXB0ZWQgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIFN0cmluZyBnZXRUZXh0KE9iamVjdCBvYmplY3QpIHsKKwkJVVJJIGxhYmVsVmFsdWUgPSAoKFNxdWFyZUxhdHRpY2VHcmFwaEdlbmVyYXRvcilvYmplY3QpLmdldFVSSSgpOworCQlTdHJpbmcgbGFiZWwgPSBsYWJlbFZhbHVlID09IG51bGwgPyBudWxsIDogbGFiZWxWYWx1ZS50b1N0cmluZygpOworCQlyZXR1cm4gbGFiZWwgPT0gbnVsbCB8fCBsYWJlbC5sZW5ndGgoKSA9PSAwID8KKwkJCWdldFN0cmluZygiX1VJX1NxdWFyZUxhdHRpY2VHcmFwaEdlbmVyYXRvcl90eXBlIikgOgorCQkJZ2V0U3RyaW5nKCJfVUlfU3F1YXJlTGF0dGljZUdyYXBoR2VuZXJhdG9yX3R5cGUiKSArICIgIiArIGxhYmVsOworCX0KKworCS8qKgorCSAqIFRoaXMgaGFuZGxlcyBtb2RlbCBub3RpZmljYXRpb25zIGJ5IGNhbGxpbmcge0BsaW5rICN1cGRhdGVDaGlsZHJlbn0gdG8gdXBkYXRlIGFueSBjYWNoZWQKKwkgKiBjaGlsZHJlbiBhbmQgYnkgY3JlYXRpbmcgYSB2aWV3ZXIgbm90aWZpY2F0aW9uLCB3aGljaCBpdCBwYXNzZXMgdG8ge0BsaW5rICNmaXJlTm90aWZ5Q2hhbmdlZH0uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgbm90aWZ5Q2hhbmdlZChOb3RpZmljYXRpb24gbm90aWZpY2F0aW9uKSB7CisJCXVwZGF0ZUNoaWxkcmVuKG5vdGlmaWNhdGlvbik7CisKKwkJc3dpdGNoIChub3RpZmljYXRpb24uZ2V0RmVhdHVyZUlEKFNxdWFyZUxhdHRpY2VHcmFwaEdlbmVyYXRvci5jbGFzcykpIHsKKwkJCWNhc2UgR3JhcGhnZW5lcmF0b3JzUGFja2FnZS5TUVVBUkVfTEFUVElDRV9HUkFQSF9HRU5FUkFUT1JfX1hTSVpFOgorCQkJY2FzZSBHcmFwaGdlbmVyYXRvcnNQYWNrYWdlLlNRVUFSRV9MQVRUSUNFX0dSQVBIX0dFTkVSQVRPUl9fWVNJWkU6CisJCQljYXNlIEdyYXBoZ2VuZXJhdG9yc1BhY2thZ2UuU1FVQVJFX0xBVFRJQ0VfR1JBUEhfR0VORVJBVE9SX19BUkVBOgorCQkJCWZpcmVOb3RpZnlDaGFuZ2VkKG5ldyBWaWV3ZXJOb3RpZmljYXRpb24obm90aWZpY2F0aW9uLCBub3RpZmljYXRpb24uZ2V0Tm90aWZpZXIoKSwgZmFsc2UsIHRydWUpKTsKKwkJCQlyZXR1cm47CisJCX0KKwkJc3VwZXIubm90aWZ5Q2hhbmdlZChub3RpZmljYXRpb24pOworCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmVkaXQuY29tbWFuZC5Db21tYW5kUGFyYW1ldGVyfXMgZGVzY3JpYmluZyB0aGUgY2hpbGRyZW4KKwkgKiB0aGF0IGNhbiBiZSBjcmVhdGVkIHVuZGVyIHRoaXMgb2JqZWN0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIGNvbGxlY3ROZXdDaGlsZERlc2NyaXB0b3JzKENvbGxlY3Rpb248T2JqZWN0PiBuZXdDaGlsZERlc2NyaXB0b3JzLCBPYmplY3Qgb2JqZWN0KSB7CisJCXN1cGVyLmNvbGxlY3ROZXdDaGlsZERlc2NyaXB0b3JzKG5ld0NoaWxkRGVzY3JpcHRvcnMsIG9iamVjdCk7CisJfQorCit9CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhnZW5lcmF0b3JzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2dyYXBoZ2VuZXJhdG9ycy91dGlsL0dyYXBoZ2VuZXJhdG9yc0FkYXB0ZXJGYWN0b3J5LmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhnZW5lcmF0b3JzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2dyYXBoZ2VuZXJhdG9ycy91dGlsL0dyYXBoZ2VuZXJhdG9yc0FkYXB0ZXJGYWN0b3J5LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjc2NmM5MAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaGdlbmVyYXRvcnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZ3JhcGhnZW5lcmF0b3JzL3V0aWwvR3JhcGhnZW5lcmF0b3JzQWRhcHRlckZhY3RvcnkuamF2YQpAQCAtMCwwICsxLDI1OCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOSwyMDEwIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaGdlbmVyYXRvcnMudXRpbDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LkFkYXB0ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuaW1wbC5BZGFwdGVyRmFjdG9yeUltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3Q7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5JZGVudGlmaWFibGU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaGdlbmVyYXRvcnMuR3JhcGhHZW5lcmF0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaGdlbmVyYXRvcnMuR3JhcGhnZW5lcmF0b3JzUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmdyYXBoZ2VuZXJhdG9ycy5MYXR0aWNlR3JhcGhHZW5lcmF0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaGdlbmVyYXRvcnMuTWlncmF0aW9uRWRnZUdyYXBoR2VuZXJhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhnZW5lcmF0b3JzLlBhamVrTmV0R3JhcGhHZW5lcmF0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaGdlbmVyYXRvcnMuUGxhdGVDYXJyZWVHbG9iZUdyYXBoR2VuZXJhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhnZW5lcmF0b3JzLlNxdWFyZUxhdHRpY2VHcmFwaEdlbmVyYXRvcjsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogVGhlIDxiPkFkYXB0ZXIgRmFjdG9yeTwvYj4gZm9yIHRoZSBtb2RlbC4KKyAqIEl0IHByb3ZpZGVzIGFuIGFkYXB0ZXIgPGNvZGU+Y3JlYXRlWFhYPC9jb2RlPiBtZXRob2QgZm9yIGVhY2ggY2xhc3Mgb2YgdGhlIG1vZGVsLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhnZW5lcmF0b3JzLkdyYXBoZ2VuZXJhdG9yc1BhY2thZ2UKKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIEdyYXBoZ2VuZXJhdG9yc0FkYXB0ZXJGYWN0b3J5IGV4dGVuZHMgQWRhcHRlckZhY3RvcnlJbXBsIHsKKwkvKioKKwkgKiBUaGUgY2FjaGVkIG1vZGVsIHBhY2thZ2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHN0YXRpYyBHcmFwaGdlbmVyYXRvcnNQYWNrYWdlIG1vZGVsUGFja2FnZTsKKworCS8qKgorCSAqIENyZWF0ZXMgYW4gaW5zdGFuY2Ugb2YgdGhlIGFkYXB0ZXIgZmFjdG9yeS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgR3JhcGhnZW5lcmF0b3JzQWRhcHRlckZhY3RvcnkoKSB7CisJCWlmIChtb2RlbFBhY2thZ2UgPT0gbnVsbCkgeworCQkJbW9kZWxQYWNrYWdlID0gR3JhcGhnZW5lcmF0b3JzUGFja2FnZS5lSU5TVEFOQ0U7CisJCX0KKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHdoZXRoZXIgdGhpcyBmYWN0b3J5IGlzIGFwcGxpY2FibGUgZm9yIHRoZSB0eXBlIG9mIHRoZSBvYmplY3QuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgPGNvZGU+dHJ1ZTwvY29kZT4gaWYgdGhlIG9iamVjdCBpcyBlaXRoZXIgdGhlIG1vZGVsJ3MgcGFja2FnZSBvciBpcyBhbiBpbnN0YW5jZSBvYmplY3Qgb2YgdGhlIG1vZGVsLgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gd2hldGhlciB0aGlzIGZhY3RvcnkgaXMgYXBwbGljYWJsZSBmb3IgdGhlIHR5cGUgb2YgdGhlIG9iamVjdC4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIGJvb2xlYW4gaXNGYWN0b3J5Rm9yVHlwZShPYmplY3Qgb2JqZWN0KSB7CisJCWlmIChvYmplY3QgPT0gbW9kZWxQYWNrYWdlKSB7CisJCQlyZXR1cm4gdHJ1ZTsKKwkJfQorCQlpZiAob2JqZWN0IGluc3RhbmNlb2YgRU9iamVjdCkgeworCQkJcmV0dXJuICgoRU9iamVjdClvYmplY3QpLmVDbGFzcygpLmdldEVQYWNrYWdlKCkgPT0gbW9kZWxQYWNrYWdlOworCQl9CisJCXJldHVybiBmYWxzZTsKKwl9CisKKwkvKioKKwkgKiBUaGUgc3dpdGNoIHRoYXQgZGVsZWdhdGVzIHRvIHRoZSA8Y29kZT5jcmVhdGVYWFg8L2NvZGU+IG1ldGhvZHMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIEdyYXBoZ2VuZXJhdG9yc1N3aXRjaDxBZGFwdGVyPiBtb2RlbFN3aXRjaCA9CisJCW5ldyBHcmFwaGdlbmVyYXRvcnNTd2l0Y2g8QWRhcHRlcj4oKSB7CisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyBBZGFwdGVyIGNhc2VHcmFwaEdlbmVyYXRvcihHcmFwaEdlbmVyYXRvciBvYmplY3QpIHsKKwkJCQlyZXR1cm4gY3JlYXRlR3JhcGhHZW5lcmF0b3JBZGFwdGVyKCk7CisJCQl9CisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyBBZGFwdGVyIGNhc2VMYXR0aWNlR3JhcGhHZW5lcmF0b3IoTGF0dGljZUdyYXBoR2VuZXJhdG9yIG9iamVjdCkgeworCQkJCXJldHVybiBjcmVhdGVMYXR0aWNlR3JhcGhHZW5lcmF0b3JBZGFwdGVyKCk7CisJCQl9CisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyBBZGFwdGVyIGNhc2VTcXVhcmVMYXR0aWNlR3JhcGhHZW5lcmF0b3IoU3F1YXJlTGF0dGljZUdyYXBoR2VuZXJhdG9yIG9iamVjdCkgeworCQkJCXJldHVybiBjcmVhdGVTcXVhcmVMYXR0aWNlR3JhcGhHZW5lcmF0b3JBZGFwdGVyKCk7CisJCQl9CisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyBBZGFwdGVyIGNhc2VNaWdyYXRpb25FZGdlR3JhcGhHZW5lcmF0b3IoTWlncmF0aW9uRWRnZUdyYXBoR2VuZXJhdG9yIG9iamVjdCkgeworCQkJCXJldHVybiBjcmVhdGVNaWdyYXRpb25FZGdlR3JhcGhHZW5lcmF0b3JBZGFwdGVyKCk7CisJCQl9CisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyBBZGFwdGVyIGNhc2VQbGF0ZUNhcnJlZUdsb2JlR3JhcGhHZW5lcmF0b3IoUGxhdGVDYXJyZWVHbG9iZUdyYXBoR2VuZXJhdG9yIG9iamVjdCkgeworCQkJCXJldHVybiBjcmVhdGVQbGF0ZUNhcnJlZUdsb2JlR3JhcGhHZW5lcmF0b3JBZGFwdGVyKCk7CisJCQl9CisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyBBZGFwdGVyIGNhc2VQYWpla05ldEdyYXBoR2VuZXJhdG9yKFBhamVrTmV0R3JhcGhHZW5lcmF0b3Igb2JqZWN0KSB7CisJCQkJcmV0dXJuIGNyZWF0ZVBhamVrTmV0R3JhcGhHZW5lcmF0b3JBZGFwdGVyKCk7CisJCQl9CisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyA8VD4gQWRhcHRlciBjYXNlQ29tcGFyYWJsZShDb21wYXJhYmxlPFQ+IG9iamVjdCkgeworCQkJCXJldHVybiBjcmVhdGVDb21wYXJhYmxlQWRhcHRlcigpOworCQkJfQorCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgQWRhcHRlciBjYXNlSWRlbnRpZmlhYmxlKElkZW50aWZpYWJsZSBvYmplY3QpIHsKKwkJCQlyZXR1cm4gY3JlYXRlSWRlbnRpZmlhYmxlQWRhcHRlcigpOworCQkJfQorCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgQWRhcHRlciBkZWZhdWx0Q2FzZShFT2JqZWN0IG9iamVjdCkgeworCQkJCXJldHVybiBjcmVhdGVFT2JqZWN0QWRhcHRlcigpOworCQkJfQorCQl9OworCisJLyoqCisJICogQ3JlYXRlcyBhbiBhZGFwdGVyIGZvciB0aGUgPGNvZGU+dGFyZ2V0PC9jb2RlPi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSB0YXJnZXQgdGhlIG9iamVjdCB0byBhZGFwdC4KKwkgKiBAcmV0dXJuIHRoZSBhZGFwdGVyIGZvciB0aGUgPGNvZGU+dGFyZ2V0PC9jb2RlPi4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlQWRhcHRlcihOb3RpZmllciB0YXJnZXQpIHsKKwkJcmV0dXJuIG1vZGVsU3dpdGNoLmRvU3dpdGNoKChFT2JqZWN0KXRhcmdldCk7CisJfQorCisKKwkvKioKKwkgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhnZW5lcmF0b3JzLkdyYXBoR2VuZXJhdG9yIDxlbT5HcmFwaCBHZW5lcmF0b3I8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOworCSAqIGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZSB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5LgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaGdlbmVyYXRvcnMuR3JhcGhHZW5lcmF0b3IKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlR3JhcGhHZW5lcmF0b3JBZGFwdGVyKCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhnZW5lcmF0b3JzLkxhdHRpY2VHcmFwaEdlbmVyYXRvciA8ZW0+TGF0dGljZSBHcmFwaCBHZW5lcmF0b3I8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOworCSAqIGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZSB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5LgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaGdlbmVyYXRvcnMuTGF0dGljZUdyYXBoR2VuZXJhdG9yCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZUxhdHRpY2VHcmFwaEdlbmVyYXRvckFkYXB0ZXIoKSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaGdlbmVyYXRvcnMuU3F1YXJlTGF0dGljZUdyYXBoR2VuZXJhdG9yIDxlbT5TcXVhcmUgTGF0dGljZSBHcmFwaCBHZW5lcmF0b3I8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOworCSAqIGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZSB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5LgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaGdlbmVyYXRvcnMuU3F1YXJlTGF0dGljZUdyYXBoR2VuZXJhdG9yCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZVNxdWFyZUxhdHRpY2VHcmFwaEdlbmVyYXRvckFkYXB0ZXIoKSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaGdlbmVyYXRvcnMuTWlncmF0aW9uRWRnZUdyYXBoR2VuZXJhdG9yIDxlbT5NaWdyYXRpb24gRWRnZSBHcmFwaCBHZW5lcmF0b3I8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOworCSAqIGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZSB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5LgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaGdlbmVyYXRvcnMuTWlncmF0aW9uRWRnZUdyYXBoR2VuZXJhdG9yCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZU1pZ3JhdGlvbkVkZ2VHcmFwaEdlbmVyYXRvckFkYXB0ZXIoKSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaGdlbmVyYXRvcnMuUGxhdGVDYXJyZWVHbG9iZUdyYXBoR2VuZXJhdG9yIDxlbT5QbGF0ZSBDYXJyZWUgR2xvYmUgR3JhcGggR2VuZXJhdG9yPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsKKwkgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhnZW5lcmF0b3JzLlBsYXRlQ2FycmVlR2xvYmVHcmFwaEdlbmVyYXRvcgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVQbGF0ZUNhcnJlZUdsb2JlR3JhcGhHZW5lcmF0b3JBZGFwdGVyKCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhnZW5lcmF0b3JzLlBhamVrTmV0R3JhcGhHZW5lcmF0b3IgPGVtPlBhamVrIE5ldCBHcmFwaCBHZW5lcmF0b3I8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOworCSAqIGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZSB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5LgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaGdlbmVyYXRvcnMuUGFqZWtOZXRHcmFwaEdlbmVyYXRvcgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVQYWpla05ldEdyYXBoR2VuZXJhdG9yQWRhcHRlcigpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBqYXZhLmxhbmcuQ29tcGFyYWJsZSA8ZW0+Q29tcGFyYWJsZTwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7CisJICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCisJICogQHNlZSBqYXZhLmxhbmcuQ29tcGFyYWJsZQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVDb21wYXJhYmxlQWRhcHRlcigpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLklkZW50aWZpYWJsZSA8ZW0+SWRlbnRpZmlhYmxlPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsKKwkgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uSWRlbnRpZmlhYmxlCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZUlkZW50aWZpYWJsZUFkYXB0ZXIoKSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgdGhlIGRlZmF1bHQgY2FzZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwuCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZUVPYmplY3RBZGFwdGVyKCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKK30gLy9HcmFwaGdlbmVyYXRvcnNBZGFwdGVyRmFjdG9yeQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmdyYXBoZ2VuZXJhdG9ycy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9ncmFwaGdlbmVyYXRvcnMvdXRpbC9HcmFwaGdlbmVyYXRvcnNTd2l0Y2guamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaGdlbmVyYXRvcnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZ3JhcGhnZW5lcmF0b3JzL3V0aWwvR3JhcGhnZW5lcmF0b3JzU3dpdGNoLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTg4NDVlMwotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaGdlbmVyYXRvcnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZ3JhcGhnZW5lcmF0b3JzL3V0aWwvR3JhcGhnZW5lcmF0b3JzU3dpdGNoLmphdmEKQEAgLTAsMCArMSwyOTQgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDksMjAxMCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhnZW5lcmF0b3JzLnV0aWw7CisKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3Q7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5JZGVudGlmaWFibGU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaGdlbmVyYXRvcnMuR3JhcGhHZW5lcmF0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaGdlbmVyYXRvcnMuR3JhcGhnZW5lcmF0b3JzUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmdyYXBoZ2VuZXJhdG9ycy5MYXR0aWNlR3JhcGhHZW5lcmF0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaGdlbmVyYXRvcnMuTWlncmF0aW9uRWRnZUdyYXBoR2VuZXJhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhnZW5lcmF0b3JzLlBhamVrTmV0R3JhcGhHZW5lcmF0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaGdlbmVyYXRvcnMuUGxhdGVDYXJyZWVHbG9iZUdyYXBoR2VuZXJhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhnZW5lcmF0b3JzLlNxdWFyZUxhdHRpY2VHcmFwaEdlbmVyYXRvcjsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogVGhlIDxiPlN3aXRjaDwvYj4gZm9yIHRoZSBtb2RlbCdzIGluaGVyaXRhbmNlIGhpZXJhcmNoeS4KKyAqIEl0IHN1cHBvcnRzIHRoZSBjYWxsIHtAbGluayAjZG9Td2l0Y2goRU9iamVjdCkgZG9Td2l0Y2gob2JqZWN0KX0KKyAqIHRvIGludm9rZSB0aGUgPGNvZGU+Y2FzZVhYWDwvY29kZT4gbWV0aG9kIGZvciBlYWNoIGNsYXNzIG9mIHRoZSBtb2RlbCwKKyAqIHN0YXJ0aW5nIHdpdGggdGhlIGFjdHVhbCBjbGFzcyBvZiB0aGUgb2JqZWN0CisgKiBhbmQgcHJvY2VlZGluZyB1cCB0aGUgaW5oZXJpdGFuY2UgaGllcmFyY2h5CisgKiB1bnRpbCBhIG5vbi1udWxsIHJlc3VsdCBpcyByZXR1cm5lZCwKKyAqIHdoaWNoIGlzIHRoZSByZXN1bHQgb2YgdGhlIHN3aXRjaC4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmdyYXBoZ2VuZXJhdG9ycy5HcmFwaGdlbmVyYXRvcnNQYWNrYWdlCisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBHcmFwaGdlbmVyYXRvcnNTd2l0Y2g8VDE+IHsKKwkvKioKKwkgKiBUaGUgY2FjaGVkIG1vZGVsIHBhY2thZ2UKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgc3RhdGljIEdyYXBoZ2VuZXJhdG9yc1BhY2thZ2UgbW9kZWxQYWNrYWdlOworCisJLyoqCisJICogQ3JlYXRlcyBhbiBpbnN0YW5jZSBvZiB0aGUgc3dpdGNoLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBHcmFwaGdlbmVyYXRvcnNTd2l0Y2goKSB7CisJCWlmIChtb2RlbFBhY2thZ2UgPT0gbnVsbCkgeworCQkJbW9kZWxQYWNrYWdlID0gR3JhcGhnZW5lcmF0b3JzUGFja2FnZS5lSU5TVEFOQ0U7CisJCX0KKwl9CisKKwkvKioKKwkgKiBDYWxscyA8Y29kZT5jYXNlWFhYPC9jb2RlPiBmb3IgZWFjaCBjbGFzcyBvZiB0aGUgbW9kZWwgdW50aWwgb25lIHJldHVybnMgYSBub24gbnVsbCByZXN1bHQ7IGl0IHlpZWxkcyB0aGF0IHJlc3VsdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIGZpcnN0IG5vbi1udWxsIHJlc3VsdCByZXR1cm5lZCBieSBhIDxjb2RlPmNhc2VYWFg8L2NvZGU+IGNhbGwuCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBUMSBkb1N3aXRjaChFT2JqZWN0IHRoZUVPYmplY3QpIHsKKwkJcmV0dXJuIGRvU3dpdGNoKHRoZUVPYmplY3QuZUNsYXNzKCksIHRoZUVPYmplY3QpOworCX0KKworCS8qKgorCSAqIENhbGxzIDxjb2RlPmNhc2VYWFg8L2NvZGU+IGZvciBlYWNoIGNsYXNzIG9mIHRoZSBtb2RlbCB1bnRpbCBvbmUgcmV0dXJucyBhIG5vbiBudWxsIHJlc3VsdDsgaXQgeWllbGRzIHRoYXQgcmVzdWx0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgZmlyc3Qgbm9uLW51bGwgcmVzdWx0IHJldHVybmVkIGJ5IGEgPGNvZGU+Y2FzZVhYWDwvY29kZT4gY2FsbC4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIFQxIGRvU3dpdGNoKEVDbGFzcyB0aGVFQ2xhc3MsIEVPYmplY3QgdGhlRU9iamVjdCkgeworCQlpZiAodGhlRUNsYXNzLmVDb250YWluZXIoKSA9PSBtb2RlbFBhY2thZ2UpIHsKKwkJCXJldHVybiBkb1N3aXRjaCh0aGVFQ2xhc3MuZ2V0Q2xhc3NpZmllcklEKCksIHRoZUVPYmplY3QpOworCQl9CisJCWVsc2UgeworCQkJTGlzdDxFQ2xhc3M+IGVTdXBlclR5cGVzID0gdGhlRUNsYXNzLmdldEVTdXBlclR5cGVzKCk7CisJCQlyZXR1cm4KKwkJCQllU3VwZXJUeXBlcy5pc0VtcHR5KCkgPworCQkJCQlkZWZhdWx0Q2FzZSh0aGVFT2JqZWN0KSA6CisJCQkJCWRvU3dpdGNoKGVTdXBlclR5cGVzLmdldCgwKSwgdGhlRU9iamVjdCk7CisJCX0KKwl9CisKKwkvKioKKwkgKiBDYWxscyA8Y29kZT5jYXNlWFhYPC9jb2RlPiBmb3IgZWFjaCBjbGFzcyBvZiB0aGUgbW9kZWwgdW50aWwgb25lIHJldHVybnMgYSBub24gbnVsbCByZXN1bHQ7IGl0IHlpZWxkcyB0aGF0IHJlc3VsdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIGZpcnN0IG5vbi1udWxsIHJlc3VsdCByZXR1cm5lZCBieSBhIDxjb2RlPmNhc2VYWFg8L2NvZGU+IGNhbGwuCisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBUMSBkb1N3aXRjaChpbnQgY2xhc3NpZmllcklELCBFT2JqZWN0IHRoZUVPYmplY3QpIHsKKwkJc3dpdGNoIChjbGFzc2lmaWVySUQpIHsKKwkJCWNhc2UgR3JhcGhnZW5lcmF0b3JzUGFja2FnZS5HUkFQSF9HRU5FUkFUT1I6IHsKKwkJCQlHcmFwaEdlbmVyYXRvciBncmFwaEdlbmVyYXRvciA9IChHcmFwaEdlbmVyYXRvcil0aGVFT2JqZWN0OworCQkJCVQxIHJlc3VsdCA9IGNhc2VHcmFwaEdlbmVyYXRvcihncmFwaEdlbmVyYXRvcik7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlSWRlbnRpZmlhYmxlKGdyYXBoR2VuZXJhdG9yKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VDb21wYXJhYmxlKGdyYXBoR2VuZXJhdG9yKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGRlZmF1bHRDYXNlKHRoZUVPYmplY3QpOworCQkJCXJldHVybiByZXN1bHQ7CisJCQl9CisJCQljYXNlIEdyYXBoZ2VuZXJhdG9yc1BhY2thZ2UuTEFUVElDRV9HUkFQSF9HRU5FUkFUT1I6IHsKKwkJCQlMYXR0aWNlR3JhcGhHZW5lcmF0b3IgbGF0dGljZUdyYXBoR2VuZXJhdG9yID0gKExhdHRpY2VHcmFwaEdlbmVyYXRvcil0aGVFT2JqZWN0OworCQkJCVQxIHJlc3VsdCA9IGNhc2VMYXR0aWNlR3JhcGhHZW5lcmF0b3IobGF0dGljZUdyYXBoR2VuZXJhdG9yKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VHcmFwaEdlbmVyYXRvcihsYXR0aWNlR3JhcGhHZW5lcmF0b3IpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZUlkZW50aWZpYWJsZShsYXR0aWNlR3JhcGhHZW5lcmF0b3IpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZUNvbXBhcmFibGUobGF0dGljZUdyYXBoR2VuZXJhdG9yKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGRlZmF1bHRDYXNlKHRoZUVPYmplY3QpOworCQkJCXJldHVybiByZXN1bHQ7CisJCQl9CisJCQljYXNlIEdyYXBoZ2VuZXJhdG9yc1BhY2thZ2UuU1FVQVJFX0xBVFRJQ0VfR1JBUEhfR0VORVJBVE9SOiB7CisJCQkJU3F1YXJlTGF0dGljZUdyYXBoR2VuZXJhdG9yIHNxdWFyZUxhdHRpY2VHcmFwaEdlbmVyYXRvciA9IChTcXVhcmVMYXR0aWNlR3JhcGhHZW5lcmF0b3IpdGhlRU9iamVjdDsKKwkJCQlUMSByZXN1bHQgPSBjYXNlU3F1YXJlTGF0dGljZUdyYXBoR2VuZXJhdG9yKHNxdWFyZUxhdHRpY2VHcmFwaEdlbmVyYXRvcik7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlTGF0dGljZUdyYXBoR2VuZXJhdG9yKHNxdWFyZUxhdHRpY2VHcmFwaEdlbmVyYXRvcik7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlR3JhcGhHZW5lcmF0b3Ioc3F1YXJlTGF0dGljZUdyYXBoR2VuZXJhdG9yKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VJZGVudGlmaWFibGUoc3F1YXJlTGF0dGljZUdyYXBoR2VuZXJhdG9yKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VDb21wYXJhYmxlKHNxdWFyZUxhdHRpY2VHcmFwaEdlbmVyYXRvcik7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBkZWZhdWx0Q2FzZSh0aGVFT2JqZWN0KTsKKwkJCQlyZXR1cm4gcmVzdWx0OworCQkJfQorCQkJY2FzZSBHcmFwaGdlbmVyYXRvcnNQYWNrYWdlLk1JR1JBVElPTl9FREdFX0dSQVBIX0dFTkVSQVRPUjogeworCQkJCU1pZ3JhdGlvbkVkZ2VHcmFwaEdlbmVyYXRvciBtaWdyYXRpb25FZGdlR3JhcGhHZW5lcmF0b3IgPSAoTWlncmF0aW9uRWRnZUdyYXBoR2VuZXJhdG9yKXRoZUVPYmplY3Q7CisJCQkJVDEgcmVzdWx0ID0gY2FzZU1pZ3JhdGlvbkVkZ2VHcmFwaEdlbmVyYXRvcihtaWdyYXRpb25FZGdlR3JhcGhHZW5lcmF0b3IpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZUdyYXBoR2VuZXJhdG9yKG1pZ3JhdGlvbkVkZ2VHcmFwaEdlbmVyYXRvcik7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlSWRlbnRpZmlhYmxlKG1pZ3JhdGlvbkVkZ2VHcmFwaEdlbmVyYXRvcik7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlQ29tcGFyYWJsZShtaWdyYXRpb25FZGdlR3JhcGhHZW5lcmF0b3IpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gZGVmYXVsdENhc2UodGhlRU9iamVjdCk7CisJCQkJcmV0dXJuIHJlc3VsdDsKKwkJCX0KKwkJCWNhc2UgR3JhcGhnZW5lcmF0b3JzUGFja2FnZS5QTEFURV9DQVJSRUVfR0xPQkVfR1JBUEhfR0VORVJBVE9SOiB7CisJCQkJUGxhdGVDYXJyZWVHbG9iZUdyYXBoR2VuZXJhdG9yIHBsYXRlQ2FycmVlR2xvYmVHcmFwaEdlbmVyYXRvciA9IChQbGF0ZUNhcnJlZUdsb2JlR3JhcGhHZW5lcmF0b3IpdGhlRU9iamVjdDsKKwkJCQlUMSByZXN1bHQgPSBjYXNlUGxhdGVDYXJyZWVHbG9iZUdyYXBoR2VuZXJhdG9yKHBsYXRlQ2FycmVlR2xvYmVHcmFwaEdlbmVyYXRvcik7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlTGF0dGljZUdyYXBoR2VuZXJhdG9yKHBsYXRlQ2FycmVlR2xvYmVHcmFwaEdlbmVyYXRvcik7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlR3JhcGhHZW5lcmF0b3IocGxhdGVDYXJyZWVHbG9iZUdyYXBoR2VuZXJhdG9yKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VJZGVudGlmaWFibGUocGxhdGVDYXJyZWVHbG9iZUdyYXBoR2VuZXJhdG9yKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VDb21wYXJhYmxlKHBsYXRlQ2FycmVlR2xvYmVHcmFwaEdlbmVyYXRvcik7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBkZWZhdWx0Q2FzZSh0aGVFT2JqZWN0KTsKKwkJCQlyZXR1cm4gcmVzdWx0OworCQkJfQorCQkJY2FzZSBHcmFwaGdlbmVyYXRvcnNQYWNrYWdlLlBBSkVLX05FVF9HUkFQSF9HRU5FUkFUT1I6IHsKKwkJCQlQYWpla05ldEdyYXBoR2VuZXJhdG9yIHBhamVrTmV0R3JhcGhHZW5lcmF0b3IgPSAoUGFqZWtOZXRHcmFwaEdlbmVyYXRvcil0aGVFT2JqZWN0OworCQkJCVQxIHJlc3VsdCA9IGNhc2VQYWpla05ldEdyYXBoR2VuZXJhdG9yKHBhamVrTmV0R3JhcGhHZW5lcmF0b3IpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZUdyYXBoR2VuZXJhdG9yKHBhamVrTmV0R3JhcGhHZW5lcmF0b3IpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZUlkZW50aWZpYWJsZShwYWpla05ldEdyYXBoR2VuZXJhdG9yKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VDb21wYXJhYmxlKHBhamVrTmV0R3JhcGhHZW5lcmF0b3IpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gZGVmYXVsdENhc2UodGhlRU9iamVjdCk7CisJCQkJcmV0dXJuIHJlc3VsdDsKKwkJCX0KKwkJCWRlZmF1bHQ6IHJldHVybiBkZWZhdWx0Q2FzZSh0aGVFT2JqZWN0KTsKKwkJfQorCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkdyYXBoIEdlbmVyYXRvcjwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOworCSAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgorCSAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkdyYXBoIEdlbmVyYXRvcjwvZW0+Jy4KKwkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFQxIGNhc2VHcmFwaEdlbmVyYXRvcihHcmFwaEdlbmVyYXRvciBvYmplY3QpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+TGF0dGljZSBHcmFwaCBHZW5lcmF0b3I8L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsKKwkgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KKwkgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5MYXR0aWNlIEdyYXBoIEdlbmVyYXRvcjwvZW0+Jy4KKwkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFQxIGNhc2VMYXR0aWNlR3JhcGhHZW5lcmF0b3IoTGF0dGljZUdyYXBoR2VuZXJhdG9yIG9iamVjdCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5TcXVhcmUgTGF0dGljZSBHcmFwaCBHZW5lcmF0b3I8L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsKKwkgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KKwkgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5TcXVhcmUgTGF0dGljZSBHcmFwaCBHZW5lcmF0b3I8L2VtPicuCisJICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBUMSBjYXNlU3F1YXJlTGF0dGljZUdyYXBoR2VuZXJhdG9yKFNxdWFyZUxhdHRpY2VHcmFwaEdlbmVyYXRvciBvYmplY3QpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+TWlncmF0aW9uIEVkZ2UgR3JhcGggR2VuZXJhdG9yPC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7CisJICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCisJICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+TWlncmF0aW9uIEVkZ2UgR3JhcGggR2VuZXJhdG9yPC9lbT4nLgorCSAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVDEgY2FzZU1pZ3JhdGlvbkVkZ2VHcmFwaEdlbmVyYXRvcihNaWdyYXRpb25FZGdlR3JhcGhHZW5lcmF0b3Igb2JqZWN0KSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPlBsYXRlIENhcnJlZSBHbG9iZSBHcmFwaCBHZW5lcmF0b3I8L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsKKwkgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KKwkgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5QbGF0ZSBDYXJyZWUgR2xvYmUgR3JhcGggR2VuZXJhdG9yPC9lbT4nLgorCSAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVDEgY2FzZVBsYXRlQ2FycmVlR2xvYmVHcmFwaEdlbmVyYXRvcihQbGF0ZUNhcnJlZUdsb2JlR3JhcGhHZW5lcmF0b3Igb2JqZWN0KSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPlBhamVrIE5ldCBHcmFwaCBHZW5lcmF0b3I8L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsKKwkgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KKwkgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5QYWplayBOZXQgR3JhcGggR2VuZXJhdG9yPC9lbT4nLgorCSAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVDEgY2FzZVBhamVrTmV0R3JhcGhHZW5lcmF0b3IoUGFqZWtOZXRHcmFwaEdlbmVyYXRvciBvYmplY3QpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+Q29tcGFyYWJsZTwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOworCSAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgorCSAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkNvbXBhcmFibGU8L2VtPicuCisJICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyA8VD4gVDEgY2FzZUNvbXBhcmFibGUoQ29tcGFyYWJsZTxUPiBvYmplY3QpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+SWRlbnRpZmlhYmxlPC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7CisJICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCisJICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+SWRlbnRpZmlhYmxlPC9lbT4nLgorCSAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVDEgY2FzZUlkZW50aWZpYWJsZShJZGVudGlmaWFibGUgb2JqZWN0KSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkVPYmplY3Q8L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsKKwkgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaCwgYnV0IHRoaXMgaXMgdGhlIGxhc3QgY2FzZSBhbnl3YXkuCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCisJICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+RU9iamVjdDwvZW0+Jy4KKwkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFQxIGRlZmF1bHRDYXNlKEVPYmplY3Qgb2JqZWN0KSB7CisJCXJldHVybiBudWxsOworCX0KKworfSAvL0dyYXBoZ2VuZXJhdG9yc1N3aXRjaApkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmpvYnMubmwxLy5jbGFzc3BhdGggYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uam9icy5ubDEvLmNsYXNzcGF0aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMDRlODYxCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmpvYnMubmwxLy5jbGFzc3BhdGgKQEAgLTAsMCArMSw3IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPGNsYXNzcGF0aD4KKwk8Y2xhc3NwYXRoZW50cnkga2luZD0ic3JjIiBwYXRoPSJzcmMiLz4KKwk8Y2xhc3NwYXRoZW50cnkga2luZD0iY29uIiBwYXRoPSJvcmcuZWNsaXBzZS5qZHQubGF1bmNoaW5nLkpSRV9DT05UQUlORVIvb3JnLmVjbGlwc2UuamR0LmludGVybmFsLmRlYnVnLnVpLmxhdW5jaGVyLlN0YW5kYXJkVk1UeXBlL0oyU0UtMS41Ii8+CisJPGNsYXNzcGF0aGVudHJ5IGtpbmQ9ImNvbiIgcGF0aD0ib3JnLmVjbGlwc2UucGRlLmNvcmUucmVxdWlyZWRQbHVnaW5zIi8+CisJPGNsYXNzcGF0aGVudHJ5IGtpbmQ9Im91dHB1dCIgcGF0aD0iYmluIi8+Cis8L2NsYXNzcGF0aD4KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5qb2JzLm5sMS8ucHJvamVjdCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5qb2JzLm5sMS8ucHJvamVjdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNjg3NmMzCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmpvYnMubmwxLy5wcm9qZWN0CkBAIC0wLDAgKzEsMjggQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8cHJvamVjdERlc2NyaXB0aW9uPgorCTxuYW1lPm9yZy5lY2xpcHNlLnN0ZW0uam9icy5ubDE8L25hbWU+CisJPGNvbW1lbnQ+PC9jb21tZW50PgorCTxwcm9qZWN0cz4KKwk8L3Byb2plY3RzPgorCTxidWlsZFNwZWM+CisJCTxidWlsZENvbW1hbmQ+CisJCQk8bmFtZT5vcmcuZWNsaXBzZS5qZHQuY29yZS5qYXZhYnVpbGRlcjwvbmFtZT4KKwkJCTxhcmd1bWVudHM+CisJCQk8L2FyZ3VtZW50cz4KKwkJPC9idWlsZENvbW1hbmQ+CisJCTxidWlsZENvbW1hbmQ+CisJCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuTWFuaWZlc3RCdWlsZGVyPC9uYW1lPgorCQkJPGFyZ3VtZW50cz4KKwkJCTwvYXJndW1lbnRzPgorCQk8L2J1aWxkQ29tbWFuZD4KKwkJPGJ1aWxkQ29tbWFuZD4KKwkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5TY2hlbWFCdWlsZGVyPC9uYW1lPgorCQkJPGFyZ3VtZW50cz4KKwkJCTwvYXJndW1lbnRzPgorCQk8L2J1aWxkQ29tbWFuZD4KKwk8L2J1aWxkU3BlYz4KKwk8bmF0dXJlcz4KKwkJPG5hdHVyZT5vcmcuZWNsaXBzZS5wZGUuUGx1Z2luTmF0dXJlPC9uYXR1cmU+CisJCTxuYXR1cmU+b3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YW5hdHVyZTwvbmF0dXJlPgorCTwvbmF0dXJlcz4KKzwvcHJvamVjdERlc2NyaXB0aW9uPgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmpvYnMubmwxLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5qb2JzLm5sMS8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmIzNTYwZAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5qb2JzLm5sMS8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMKQEAgLTAsMCArMSw3IEBACisjTW9uIEphbiAyMSAxMjo0MzoxNCBFU1QgMjAwOAorZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvZGVnZW4udGFyZ2V0UGxhdGZvcm09MS41CitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb21wbGlhbmNlPTEuNQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5hc3NlcnRJZGVudGlmaWVyPWVycm9yCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmVudW1JZGVudGlmaWVyPWVycm9yCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5zb3VyY2U9MS41CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uam9icy5ubDEvTUVUQS1JTkYvTUFOSUZFU1QuTUYgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uam9icy5ubDEvTUVUQS1JTkYvTUFOSUZFU1QuTUYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDMxOTZhOQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5qb2JzLm5sMS9NRVRBLUlORi9NQU5JRkVTVC5NRgpAQCAtMCwwICsxLDExIEBACitNYW5pZmVzdC1WZXJzaW9uOiAxLjAKK0J1bmRsZS1NYW5pZmVzdFZlcnNpb246IDIKK0J1bmRsZS1OYW1lOiAlcGx1Z2luTmFtZQorQnVuZGxlLVN5bWJvbGljTmFtZTogb3JnLmVjbGlwc2Uuc3RlbS5qb2JzLm5sMQorQnVuZGxlLVZlcnNpb246IDEuMi4xCitCdW5kbGUtVmVuZG9yOiAlcHJvdmlkZXJOYW1lCitGcmFnbWVudC1Ib3N0OiBvcmcuZWNsaXBzZS5zdGVtLmpvYnMKK0J1bmRsZS1Mb2NhbGl6YXRpb246IHBsdWdpbgorQnVuZGxlLUNsYXNzUGF0aDogYmluLywKKyAuCitCdW5kbGUtUmVxdWlyZWRFeGVjdXRpb25FbnZpcm9ubWVudDogSjJTRS0xLjUKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5qb2JzLm5sMS9idWlsZC5wcm9wZXJ0aWVzIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmpvYnMubmwxL2J1aWxkLnByb3BlcnRpZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2IyMzQ0ZQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5qb2JzLm5sMS9idWlsZC5wcm9wZXJ0aWVzCkBAIC0wLDAgKzEsMTEgQEAKK3NvdXJjZS4uID0gc3JjLworb3V0cHV0Li4gPSBiaW4vCitiaW4uaW5jbHVkZXMgPSBNRVRBLUlORi8sXAorICAgICAgICAgICAgICAgLixcCisgICAgICAgICAgICAgICBiaW4vLFwKKyAgICAgICAgICAgICAgIHBsdWdpbi5wcm9wZXJ0aWVzLFwKKyAgICAgICAgICAgICAgIG5vdGljZS5odG1sLFwKKyAgICAgICAgICAgICAgIGVwbC12MTAuaHRtbCxcCisgICAgICAgICAgICAgICBwbHVnaW5fZGUucHJvcGVydGllcyxcCisgICAgICAgICAgICAgICBwbHVnaW5fa3IucHJvcGVydGllcyxcCisgICAgICAgICAgICAgICBwbHVnaW5femgucHJvcGVydGllcwpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmpvYnMubmwxL2VwbC12MTAuaHRtbCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5qb2JzLm5sMS9lcGwtdjEwLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWQ0YjE5NgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5qb2JzLm5sMS9lcGwtdjEwLmh0bWwKQEAgLTAsMCArMSwzMjggQEAKKzxodG1sIHhtbG5zOm89InVybjpzY2hlbWFzLW1pY3Jvc29mdC1jb206b2ZmaWNlOm9mZmljZSIKK3htbG5zOnc9InVybjpzY2hlbWFzLW1pY3Jvc29mdC1jb206b2ZmaWNlOndvcmQiCit4bWxucz0iaHR0cDovL3d3dy53My5vcmcvVFIvUkVDLWh0bWw0MCI+CisKKzxoZWFkPgorPG1ldGEgaHR0cC1lcXVpdj1Db250ZW50LVR5cGUgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PXdpbmRvd3MtMTI1MiI+Cis8bWV0YSBuYW1lPVByb2dJZCBjb250ZW50PVdvcmQuRG9jdW1lbnQ+Cis8bWV0YSBuYW1lPUdlbmVyYXRvciBjb250ZW50PSJNaWNyb3NvZnQgV29yZCA5Ij4KKzxtZXRhIG5hbWU9T3JpZ2luYXRvciBjb250ZW50PSJNaWNyb3NvZnQgV29yZCA5Ij4KKzxsaW5rIHJlbD1GaWxlLUxpc3QKK2hyZWY9Ii4vRWNsaXBzZSUyMEVQTCUyMDIwMDNfMTFfMTAlMjBGaW5hbF9maWxlcy9maWxlbGlzdC54bWwiPgorPHRpdGxlPkVjbGlwc2UgUHVibGljIExpY2Vuc2UgLSBWZXJzaW9uIDEuMDwvdGl0bGU+Cis8IS0tW2lmIGd0ZSBtc28gOV0+PHhtbD4KKyA8bzpEb2N1bWVudFByb3BlcnRpZXM+CisgIDxvOlJldmlzaW9uPjI8L286UmV2aXNpb24+CisgIDxvOlRvdGFsVGltZT4zPC9vOlRvdGFsVGltZT4KKyAgPG86Q3JlYXRlZD4yMDA0LTAzLTA1VDIzOjAzOjAwWjwvbzpDcmVhdGVkPgorICA8bzpMYXN0U2F2ZWQ+MjAwNC0wMy0wNVQyMzowMzowMFo8L286TGFzdFNhdmVkPgorICA8bzpQYWdlcz40PC9vOlBhZ2VzPgorICA8bzpXb3Jkcz4xNjI2PC9vOldvcmRzPgorICA8bzpDaGFyYWN0ZXJzPjkyNzA8L286Q2hhcmFjdGVycz4KKyAgIDxvOkxpbmVzPjc3PC9vOkxpbmVzPgorICA8bzpQYXJhZ3JhcGhzPjE4PC9vOlBhcmFncmFwaHM+CisgIDxvOkNoYXJhY3RlcnNXaXRoU3BhY2VzPjExMzg0PC9vOkNoYXJhY3RlcnNXaXRoU3BhY2VzPgorICA8bzpWZXJzaW9uPjkuNDQwMjwvbzpWZXJzaW9uPgorIDwvbzpEb2N1bWVudFByb3BlcnRpZXM+Cis8L3htbD48IVtlbmRpZl0tLT48IS0tW2lmIGd0ZSBtc28gOV0+PHhtbD4KKyA8dzpXb3JkRG9jdW1lbnQ+CisgIDx3OlRyYWNrUmV2aXNpb25zLz4KKyA8L3c6V29yZERvY3VtZW50PgorPC94bWw+PCFbZW5kaWZdLS0+Cis8c3R5bGU+Cis8IS0tCisgLyogRm9udCBEZWZpbml0aW9ucyAqLworQGZvbnQtZmFjZQorCXtmb250LWZhbWlseTpUYWhvbWE7CisJcGFub3NlLTE6MiAxMSA2IDQgMyA1IDQgNCAyIDQ7CisJbXNvLWZvbnQtY2hhcnNldDowOworCW1zby1nZW5lcmljLWZvbnQtZmFtaWx5OnN3aXNzOworCW1zby1mb250LXBpdGNoOnZhcmlhYmxlOworCW1zby1mb250LXNpZ25hdHVyZTo1NTM2Nzk0OTUgLTIxNDc0ODM2NDggOCAwIDY2MDQ3IDA7fQorIC8qIFN0eWxlIERlZmluaXRpb25zICovCitwLk1zb05vcm1hbCwgbGkuTXNvTm9ybWFsLCBkaXYuTXNvTm9ybWFsCisJe21zby1zdHlsZS1wYXJlbnQ6IiI7CisJbWFyZ2luOjBpbjsKKwltYXJnaW4tYm90dG9tOi4wMDAxcHQ7CisJbXNvLXBhZ2luYXRpb246d2lkb3ctb3JwaGFuOworCWZvbnQtc2l6ZToxMi4wcHQ7CisJZm9udC1mYW1pbHk6IlRpbWVzIE5ldyBSb21hbiI7CisJbXNvLWZhcmVhc3QtZm9udC1mYW1pbHk6IlRpbWVzIE5ldyBSb21hbiI7fQorcAorCXttYXJnaW4tcmlnaHQ6MGluOworCW1zby1tYXJnaW4tdG9wLWFsdDphdXRvOworCW1zby1tYXJnaW4tYm90dG9tLWFsdDphdXRvOworCW1hcmdpbi1sZWZ0OjBpbjsKKwltc28tcGFnaW5hdGlvbjp3aWRvdy1vcnBoYW47CisJZm9udC1zaXplOjEyLjBwdDsKKwlmb250LWZhbWlseToiVGltZXMgTmV3IFJvbWFuIjsKKwltc28tZmFyZWFzdC1mb250LWZhbWlseToiVGltZXMgTmV3IFJvbWFuIjt9CitwLkJhbGxvb25UZXh0LCBsaS5CYWxsb29uVGV4dCwgZGl2LkJhbGxvb25UZXh0CisJe21zby1zdHlsZS1uYW1lOiJCYWxsb29uIFRleHQiOworCW1hcmdpbjowaW47CisJbWFyZ2luLWJvdHRvbTouMDAwMXB0OworCW1zby1wYWdpbmF0aW9uOndpZG93LW9ycGhhbjsKKwlmb250LXNpemU6OC4wcHQ7CisJZm9udC1mYW1pbHk6VGFob21hOworCW1zby1mYXJlYXN0LWZvbnQtZmFtaWx5OiJUaW1lcyBOZXcgUm9tYW4iO30KK0BwYWdlIFNlY3Rpb24xCisJe3NpemU6OC41aW4gMTEuMGluOworCW1hcmdpbjoxLjBpbiAxLjI1aW4gMS4waW4gMS4yNWluOworCW1zby1oZWFkZXItbWFyZ2luOi41aW47CisJbXNvLWZvb3Rlci1tYXJnaW46LjVpbjsKKwltc28tcGFwZXItc291cmNlOjA7fQorZGl2LlNlY3Rpb24xCisJe3BhZ2U6U2VjdGlvbjE7fQorLS0+Cis8L3N0eWxlPgorPC9oZWFkPgorCis8Ym9keSBsYW5nPUVOLVVTIHN0eWxlPSd0YWItaW50ZXJ2YWw6LjVpbic+CisKKzxkaXYgY2xhc3M9U2VjdGlvbjE+CisKKzxwIGFsaWduPWNlbnRlciBzdHlsZT0ndGV4dC1hbGlnbjpjZW50ZXInPjxiPkVjbGlwc2UgUHVibGljIExpY2Vuc2UgLSB2IDEuMDwvYj4KKzwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPlRIRSBBQ0NPTVBBTllJTkcgUFJPR1JBTSBJUyBQUk9WSURFRCBVTkRFUgorVEhFIFRFUk1TIE9GIFRISVMgRUNMSVBTRSBQVUJMSUMgTElDRU5TRSAoJnF1b3Q7QUdSRUVNRU5UJnF1b3Q7KS4gQU5ZIFVTRSwKK1JFUFJPRFVDVElPTiBPUiBESVNUUklCVVRJT04gT0YgVEhFIFBST0dSQU0gQ09OU1RJVFVURVMgUkVDSVBJRU5UJ1MgQUNDRVBUQU5DRQorT0YgVEhJUyBBR1JFRU1FTlQuPC9zcGFuPiA8L3A+CisKKzxwPjxiPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4xLiBERUZJTklUSU9OUzwvc3Bhbj48L2I+IDwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPiZxdW90O0NvbnRyaWJ1dGlvbiZxdW90OyBtZWFuczo8L3NwYW4+IDwvcD4KKworPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YSkKK2luIHRoZSBjYXNlIG9mIHRoZSBpbml0aWFsIENvbnRyaWJ1dG9yLCB0aGUgaW5pdGlhbCBjb2RlIGFuZCBkb2N1bWVudGF0aW9uCitkaXN0cmlidXRlZCB1bmRlciB0aGlzIEFncmVlbWVudCwgYW5kPGJyIGNsZWFyPWxlZnQ+CitiKSBpbiB0aGUgY2FzZSBvZiBlYWNoIHN1YnNlcXVlbnQgQ29udHJpYnV0b3I6PC9zcGFuPjwvcD4KKworPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+aSkKK2NoYW5nZXMgdG8gdGhlIFByb2dyYW0sIGFuZDwvc3Bhbj48L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmlpKQorYWRkaXRpb25zIHRvIHRoZSBQcm9ncmFtOzwvc3Bhbj48L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPndoZXJlCitzdWNoIGNoYW5nZXMgYW5kL29yIGFkZGl0aW9ucyB0byB0aGUgUHJvZ3JhbSBvcmlnaW5hdGUgZnJvbSBhbmQgYXJlIGRpc3RyaWJ1dGVkCitieSB0aGF0IHBhcnRpY3VsYXIgQ29udHJpYnV0b3IuIEEgQ29udHJpYnV0aW9uICdvcmlnaW5hdGVzJyBmcm9tIGEgQ29udHJpYnV0b3IKK2lmIGl0IHdhcyBhZGRlZCB0byB0aGUgUHJvZ3JhbSBieSBzdWNoIENvbnRyaWJ1dG9yIGl0c2VsZiBvciBhbnlvbmUgYWN0aW5nIG9uCitzdWNoIENvbnRyaWJ1dG9yJ3MgYmVoYWxmLiBDb250cmlidXRpb25zIGRvIG5vdCBpbmNsdWRlIGFkZGl0aW9ucyB0byB0aGUKK1Byb2dyYW0gd2hpY2g6IChpKSBhcmUgc2VwYXJhdGUgbW9kdWxlcyBvZiBzb2Z0d2FyZSBkaXN0cmlidXRlZCBpbiBjb25qdW5jdGlvbgord2l0aCB0aGUgUHJvZ3JhbSB1bmRlciB0aGVpciBvd24gbGljZW5zZSBhZ3JlZW1lbnQsIGFuZCAoaWkpIGFyZSBub3QgZGVyaXZhdGl2ZQord29ya3Mgb2YgdGhlIFByb2dyYW0uIDwvc3Bhbj48L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4mcXVvdDtDb250cmlidXRvciZxdW90OyBtZWFucyBhbnkgcGVyc29uIG9yCitlbnRpdHkgdGhhdCBkaXN0cmlidXRlcyB0aGUgUHJvZ3JhbS48L3NwYW4+IDwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPiZxdW90O0xpY2Vuc2VkIFBhdGVudHMgJnF1b3Q7IG1lYW4gcGF0ZW50CitjbGFpbXMgbGljZW5zYWJsZSBieSBhIENvbnRyaWJ1dG9yIHdoaWNoIGFyZSBuZWNlc3NhcmlseSBpbmZyaW5nZWQgYnkgdGhlIHVzZQorb3Igc2FsZSBvZiBpdHMgQ29udHJpYnV0aW9uIGFsb25lIG9yIHdoZW4gY29tYmluZWQgd2l0aCB0aGUgUHJvZ3JhbS4gPC9zcGFuPjwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPiZxdW90O1Byb2dyYW0mcXVvdDsgbWVhbnMgdGhlIENvbnRyaWJ1dGlvbnMKK2Rpc3RyaWJ1dGVkIGluIGFjY29yZGFuY2Ugd2l0aCB0aGlzIEFncmVlbWVudC48L3NwYW4+IDwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPiZxdW90O1JlY2lwaWVudCZxdW90OyBtZWFucyBhbnlvbmUgd2hvCityZWNlaXZlcyB0aGUgUHJvZ3JhbSB1bmRlciB0aGlzIEFncmVlbWVudCwgaW5jbHVkaW5nIGFsbCBDb250cmlidXRvcnMuPC9zcGFuPiA8L3A+CisKKzxwPjxiPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4yLiBHUkFOVCBPRiBSSUdIVFM8L3NwYW4+PC9iPiA8L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmEpCitTdWJqZWN0IHRvIHRoZSB0ZXJtcyBvZiB0aGlzIEFncmVlbWVudCwgZWFjaCBDb250cmlidXRvciBoZXJlYnkgZ3JhbnRzIFJlY2lwaWVudAorYSBub24tZXhjbHVzaXZlLCB3b3JsZHdpZGUsIHJveWFsdHktZnJlZSBjb3B5cmlnaHQgbGljZW5zZSB0bzxzcGFuCitzdHlsZT0nY29sb3I6cmVkJz4gPC9zcGFuPnJlcHJvZHVjZSwgcHJlcGFyZSBkZXJpdmF0aXZlIHdvcmtzIG9mLCBwdWJsaWNseQorZGlzcGxheSwgcHVibGljbHkgcGVyZm9ybSwgZGlzdHJpYnV0ZSBhbmQgc3VibGljZW5zZSB0aGUgQ29udHJpYnV0aW9uIG9mIHN1Y2gKK0NvbnRyaWJ1dG9yLCBpZiBhbnksIGFuZCBzdWNoIGRlcml2YXRpdmUgd29ya3MsIGluIHNvdXJjZSBjb2RlIGFuZCBvYmplY3QgY29kZQorZm9ybS48L3NwYW4+PC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5iKQorU3ViamVjdCB0byB0aGUgdGVybXMgb2YgdGhpcyBBZ3JlZW1lbnQsIGVhY2ggQ29udHJpYnV0b3IgaGVyZWJ5IGdyYW50cworUmVjaXBpZW50IGEgbm9uLWV4Y2x1c2l2ZSwgd29ybGR3aWRlLDxzcGFuIHN0eWxlPSdjb2xvcjpncmVlbic+IDwvc3Bhbj5yb3lhbHR5LWZyZWUKK3BhdGVudCBsaWNlbnNlIHVuZGVyIExpY2Vuc2VkIFBhdGVudHMgdG8gbWFrZSwgdXNlLCBzZWxsLCBvZmZlciB0byBzZWxsLCBpbXBvcnQKK2FuZCBvdGhlcndpc2UgdHJhbnNmZXIgdGhlIENvbnRyaWJ1dGlvbiBvZiBzdWNoIENvbnRyaWJ1dG9yLCBpZiBhbnksIGluIHNvdXJjZQorY29kZSBhbmQgb2JqZWN0IGNvZGUgZm9ybS4gVGhpcyBwYXRlbnQgbGljZW5zZSBzaGFsbCBhcHBseSB0byB0aGUgY29tYmluYXRpb24KK29mIHRoZSBDb250cmlidXRpb24gYW5kIHRoZSBQcm9ncmFtIGlmLCBhdCB0aGUgdGltZSB0aGUgQ29udHJpYnV0aW9uIGlzIGFkZGVkCitieSB0aGUgQ29udHJpYnV0b3IsIHN1Y2ggYWRkaXRpb24gb2YgdGhlIENvbnRyaWJ1dGlvbiBjYXVzZXMgc3VjaCBjb21iaW5hdGlvbgordG8gYmUgY292ZXJlZCBieSB0aGUgTGljZW5zZWQgUGF0ZW50cy4gVGhlIHBhdGVudCBsaWNlbnNlIHNoYWxsIG5vdCBhcHBseSB0bworYW55IG90aGVyIGNvbWJpbmF0aW9ucyB3aGljaCBpbmNsdWRlIHRoZSBDb250cmlidXRpb24uIE5vIGhhcmR3YXJlIHBlciBzZSBpcworbGljZW5zZWQgaGVyZXVuZGVyLiA8L3NwYW4+PC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5jKQorUmVjaXBpZW50IHVuZGVyc3RhbmRzIHRoYXQgYWx0aG91Z2ggZWFjaCBDb250cmlidXRvciBncmFudHMgdGhlIGxpY2Vuc2VzIHRvIGl0cworQ29udHJpYnV0aW9ucyBzZXQgZm9ydGggaGVyZWluLCBubyBhc3N1cmFuY2VzIGFyZSBwcm92aWRlZCBieSBhbnkgQ29udHJpYnV0b3IKK3RoYXQgdGhlIFByb2dyYW0gZG9lcyBub3QgaW5mcmluZ2UgdGhlIHBhdGVudCBvciBvdGhlciBpbnRlbGxlY3R1YWwgcHJvcGVydHkKK3JpZ2h0cyBvZiBhbnkgb3RoZXIgZW50aXR5LiBFYWNoIENvbnRyaWJ1dG9yIGRpc2NsYWltcyBhbnkgbGlhYmlsaXR5IHRvIFJlY2lwaWVudAorZm9yIGNsYWltcyBicm91Z2h0IGJ5IGFueSBvdGhlciBlbnRpdHkgYmFzZWQgb24gaW5mcmluZ2VtZW50IG9mIGludGVsbGVjdHVhbAorcHJvcGVydHkgcmlnaHRzIG9yIG90aGVyd2lzZS4gQXMgYSBjb25kaXRpb24gdG8gZXhlcmNpc2luZyB0aGUgcmlnaHRzIGFuZAorbGljZW5zZXMgZ3JhbnRlZCBoZXJldW5kZXIsIGVhY2ggUmVjaXBpZW50IGhlcmVieSBhc3N1bWVzIHNvbGUgcmVzcG9uc2liaWxpdHkKK3RvIHNlY3VyZSBhbnkgb3RoZXIgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBuZWVkZWQsIGlmIGFueS4gRm9yIGV4YW1wbGUsCitpZiBhIHRoaXJkIHBhcnR5IHBhdGVudCBsaWNlbnNlIGlzIHJlcXVpcmVkIHRvIGFsbG93IFJlY2lwaWVudCB0byBkaXN0cmlidXRlCit0aGUgUHJvZ3JhbSwgaXQgaXMgUmVjaXBpZW50J3MgcmVzcG9uc2liaWxpdHkgdG8gYWNxdWlyZSB0aGF0IGxpY2Vuc2UgYmVmb3JlCitkaXN0cmlidXRpbmcgdGhlIFByb2dyYW0uPC9zcGFuPjwvcD4KKworPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+ZCkKK0VhY2ggQ29udHJpYnV0b3IgcmVwcmVzZW50cyB0aGF0IHRvIGl0cyBrbm93bGVkZ2UgaXQgaGFzIHN1ZmZpY2llbnQgY29weXJpZ2h0CityaWdodHMgaW4gaXRzIENvbnRyaWJ1dGlvbiwgaWYgYW55LCB0byBncmFudCB0aGUgY29weXJpZ2h0IGxpY2Vuc2Ugc2V0IGZvcnRoIGluCit0aGlzIEFncmVlbWVudC4gPC9zcGFuPjwvcD4KKworPHA+PGI+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPjMuIFJFUVVJUkVNRU5UUzwvc3Bhbj48L2I+IDwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkEgQ29udHJpYnV0b3IgbWF5IGNob29zZSB0byBkaXN0cmlidXRlIHRoZQorUHJvZ3JhbSBpbiBvYmplY3QgY29kZSBmb3JtIHVuZGVyIGl0cyBvd24gbGljZW5zZSBhZ3JlZW1lbnQsIHByb3ZpZGVkIHRoYXQ6PC9zcGFuPgorPC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5hKQoraXQgY29tcGxpZXMgd2l0aCB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhpcyBBZ3JlZW1lbnQ7IGFuZDwvc3Bhbj48L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmIpCitpdHMgbGljZW5zZSBhZ3JlZW1lbnQ6PC9zcGFuPjwvcD4KKworPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+aSkKK2VmZmVjdGl2ZWx5IGRpc2NsYWltcyBvbiBiZWhhbGYgb2YgYWxsIENvbnRyaWJ1dG9ycyBhbGwgd2FycmFudGllcyBhbmQKK2NvbmRpdGlvbnMsIGV4cHJlc3MgYW5kIGltcGxpZWQsIGluY2x1ZGluZyB3YXJyYW50aWVzIG9yIGNvbmRpdGlvbnMgb2YgdGl0bGUKK2FuZCBub24taW5mcmluZ2VtZW50LCBhbmQgaW1wbGllZCB3YXJyYW50aWVzIG9yIGNvbmRpdGlvbnMgb2YgbWVyY2hhbnRhYmlsaXR5CithbmQgZml0bmVzcyBmb3IgYSBwYXJ0aWN1bGFyIHB1cnBvc2U7IDwvc3Bhbj48L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmlpKQorZWZmZWN0aXZlbHkgZXhjbHVkZXMgb24gYmVoYWxmIG9mIGFsbCBDb250cmlidXRvcnMgYWxsIGxpYWJpbGl0eSBmb3IgZGFtYWdlcywKK2luY2x1ZGluZyBkaXJlY3QsIGluZGlyZWN0LCBzcGVjaWFsLCBpbmNpZGVudGFsIGFuZCBjb25zZXF1ZW50aWFsIGRhbWFnZXMsIHN1Y2gKK2FzIGxvc3QgcHJvZml0czsgPC9zcGFuPjwvcD4KKworPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+aWlpKQorc3RhdGVzIHRoYXQgYW55IHByb3Zpc2lvbnMgd2hpY2ggZGlmZmVyIGZyb20gdGhpcyBBZ3JlZW1lbnQgYXJlIG9mZmVyZWQgYnkgdGhhdAorQ29udHJpYnV0b3IgYWxvbmUgYW5kIG5vdCBieSBhbnkgb3RoZXIgcGFydHk7IGFuZDwvc3Bhbj48L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPml2KQorc3RhdGVzIHRoYXQgc291cmNlIGNvZGUgZm9yIHRoZSBQcm9ncmFtIGlzIGF2YWlsYWJsZSBmcm9tIHN1Y2ggQ29udHJpYnV0b3IsIGFuZAoraW5mb3JtcyBsaWNlbnNlZXMgaG93IHRvIG9idGFpbiBpdCBpbiBhIHJlYXNvbmFibGUgbWFubmVyIG9uIG9yIHRocm91Z2ggYQorbWVkaXVtIGN1c3RvbWFyaWx5IHVzZWQgZm9yIHNvZnR3YXJlIGV4Y2hhbmdlLjxzcGFuIHN0eWxlPSdjb2xvcjpibHVlJz4gPC9zcGFuPjwvc3Bhbj48L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5XaGVuIHRoZSBQcm9ncmFtIGlzIG1hZGUgYXZhaWxhYmxlIGluIHNvdXJjZQorY29kZSBmb3JtOjwvc3Bhbj4gPC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5hKQoraXQgbXVzdCBiZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGlzIEFncmVlbWVudDsgYW5kIDwvc3Bhbj48L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmIpIGEKK2NvcHkgb2YgdGhpcyBBZ3JlZW1lbnQgbXVzdCBiZSBpbmNsdWRlZCB3aXRoIGVhY2ggY29weSBvZiB0aGUgUHJvZ3JhbS4gPC9zcGFuPjwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkNvbnRyaWJ1dG9ycyBtYXkgbm90IHJlbW92ZSBvciBhbHRlciBhbnkKK2NvcHlyaWdodCBub3RpY2VzIGNvbnRhaW5lZCB3aXRoaW4gdGhlIFByb2dyYW0uIDwvc3Bhbj48L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5FYWNoIENvbnRyaWJ1dG9yIG11c3QgaWRlbnRpZnkgaXRzZWxmIGFzIHRoZQorb3JpZ2luYXRvciBvZiBpdHMgQ29udHJpYnV0aW9uLCBpZiBhbnksIGluIGEgbWFubmVyIHRoYXQgcmVhc29uYWJseSBhbGxvd3MKK3N1YnNlcXVlbnQgUmVjaXBpZW50cyB0byBpZGVudGlmeSB0aGUgb3JpZ2luYXRvciBvZiB0aGUgQ29udHJpYnV0aW9uLiA8L3NwYW4+PC9wPgorCis8cD48Yj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+NC4gQ09NTUVSQ0lBTCBESVNUUklCVVRJT048L3NwYW4+PC9iPiA8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5Db21tZXJjaWFsIGRpc3RyaWJ1dG9ycyBvZiBzb2Z0d2FyZSBtYXkKK2FjY2VwdCBjZXJ0YWluIHJlc3BvbnNpYmlsaXRpZXMgd2l0aCByZXNwZWN0IHRvIGVuZCB1c2VycywgYnVzaW5lc3MgcGFydG5lcnMKK2FuZCB0aGUgbGlrZS4gV2hpbGUgdGhpcyBsaWNlbnNlIGlzIGludGVuZGVkIHRvIGZhY2lsaXRhdGUgdGhlIGNvbW1lcmNpYWwgdXNlCitvZiB0aGUgUHJvZ3JhbSwgdGhlIENvbnRyaWJ1dG9yIHdobyBpbmNsdWRlcyB0aGUgUHJvZ3JhbSBpbiBhIGNvbW1lcmNpYWwKK3Byb2R1Y3Qgb2ZmZXJpbmcgc2hvdWxkIGRvIHNvIGluIGEgbWFubmVyIHdoaWNoIGRvZXMgbm90IGNyZWF0ZSBwb3RlbnRpYWwKK2xpYWJpbGl0eSBmb3Igb3RoZXIgQ29udHJpYnV0b3JzLiBUaGVyZWZvcmUsIGlmIGEgQ29udHJpYnV0b3IgaW5jbHVkZXMgdGhlCitQcm9ncmFtIGluIGEgY29tbWVyY2lhbCBwcm9kdWN0IG9mZmVyaW5nLCBzdWNoIENvbnRyaWJ1dG9yICgmcXVvdDtDb21tZXJjaWFsCitDb250cmlidXRvciZxdW90OykgaGVyZWJ5IGFncmVlcyB0byBkZWZlbmQgYW5kIGluZGVtbmlmeSBldmVyeSBvdGhlcgorQ29udHJpYnV0b3IgKCZxdW90O0luZGVtbmlmaWVkIENvbnRyaWJ1dG9yJnF1b3Q7KSBhZ2FpbnN0IGFueSBsb3NzZXMsIGRhbWFnZXMgYW5kCitjb3N0cyAoY29sbGVjdGl2ZWx5ICZxdW90O0xvc3NlcyZxdW90OykgYXJpc2luZyBmcm9tIGNsYWltcywgbGF3c3VpdHMgYW5kIG90aGVyCitsZWdhbCBhY3Rpb25zIGJyb3VnaHQgYnkgYSB0aGlyZCBwYXJ0eSBhZ2FpbnN0IHRoZSBJbmRlbW5pZmllZCBDb250cmlidXRvciB0bwordGhlIGV4dGVudCBjYXVzZWQgYnkgdGhlIGFjdHMgb3Igb21pc3Npb25zIG9mIHN1Y2ggQ29tbWVyY2lhbCBDb250cmlidXRvciBpbgorY29ubmVjdGlvbiB3aXRoIGl0cyBkaXN0cmlidXRpb24gb2YgdGhlIFByb2dyYW0gaW4gYSBjb21tZXJjaWFsIHByb2R1Y3QKK29mZmVyaW5nLiBUaGUgb2JsaWdhdGlvbnMgaW4gdGhpcyBzZWN0aW9uIGRvIG5vdCBhcHBseSB0byBhbnkgY2xhaW1zIG9yIExvc3NlcworcmVsYXRpbmcgdG8gYW55IGFjdHVhbCBvciBhbGxlZ2VkIGludGVsbGVjdHVhbCBwcm9wZXJ0eSBpbmZyaW5nZW1lbnQuIEluIG9yZGVyCit0byBxdWFsaWZ5LCBhbiBJbmRlbW5pZmllZCBDb250cmlidXRvciBtdXN0OiBhKSBwcm9tcHRseSBub3RpZnkgdGhlIENvbW1lcmNpYWwKK0NvbnRyaWJ1dG9yIGluIHdyaXRpbmcgb2Ygc3VjaCBjbGFpbSwgYW5kIGIpIGFsbG93IHRoZSBDb21tZXJjaWFsIENvbnRyaWJ1dG9yCit0byBjb250cm9sLCBhbmQgY29vcGVyYXRlIHdpdGggdGhlIENvbW1lcmNpYWwgQ29udHJpYnV0b3IgaW4sIHRoZSBkZWZlbnNlIGFuZAorYW55IHJlbGF0ZWQgc2V0dGxlbWVudCBuZWdvdGlhdGlvbnMuIFRoZSBJbmRlbW5pZmllZCBDb250cmlidXRvciBtYXkgcGFydGljaXBhdGUKK2luIGFueSBzdWNoIGNsYWltIGF0IGl0cyBvd24gZXhwZW5zZS48L3NwYW4+IDwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkZvciBleGFtcGxlLCBhIENvbnRyaWJ1dG9yIG1pZ2h0IGluY2x1ZGUgdGhlCitQcm9ncmFtIGluIGEgY29tbWVyY2lhbCBwcm9kdWN0IG9mZmVyaW5nLCBQcm9kdWN0IFguIFRoYXQgQ29udHJpYnV0b3IgaXMgdGhlbiBhCitDb21tZXJjaWFsIENvbnRyaWJ1dG9yLiBJZiB0aGF0IENvbW1lcmNpYWwgQ29udHJpYnV0b3IgdGhlbiBtYWtlcyBwZXJmb3JtYW5jZQorY2xhaW1zLCBvciBvZmZlcnMgd2FycmFudGllcyByZWxhdGVkIHRvIFByb2R1Y3QgWCwgdGhvc2UgcGVyZm9ybWFuY2UgY2xhaW1zIGFuZAord2FycmFudGllcyBhcmUgc3VjaCBDb21tZXJjaWFsIENvbnRyaWJ1dG9yJ3MgcmVzcG9uc2liaWxpdHkgYWxvbmUuIFVuZGVyIHRoaXMKK3NlY3Rpb24sIHRoZSBDb21tZXJjaWFsIENvbnRyaWJ1dG9yIHdvdWxkIGhhdmUgdG8gZGVmZW5kIGNsYWltcyBhZ2FpbnN0IHRoZQorb3RoZXIgQ29udHJpYnV0b3JzIHJlbGF0ZWQgdG8gdGhvc2UgcGVyZm9ybWFuY2UgY2xhaW1zIGFuZCB3YXJyYW50aWVzLCBhbmQgaWYgYQorY291cnQgcmVxdWlyZXMgYW55IG90aGVyIENvbnRyaWJ1dG9yIHRvIHBheSBhbnkgZGFtYWdlcyBhcyBhIHJlc3VsdCwgdGhlCitDb21tZXJjaWFsIENvbnRyaWJ1dG9yIG11c3QgcGF5IHRob3NlIGRhbWFnZXMuPC9zcGFuPiA8L3A+CisKKzxwPjxiPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz41LiBOTyBXQVJSQU5UWTwvc3Bhbj48L2I+IDwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkVYQ0VQVCBBUyBFWFBSRVNTTFkgU0VUIEZPUlRIIElOIFRISVMKK0FHUkVFTUVOVCwgVEhFIFBST0dSQU0gSVMgUFJPVklERUQgT04gQU4gJnF1b3Q7QVMgSVMmcXVvdDsgQkFTSVMsIFdJVEhPVVQKK1dBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgRUlUSEVSIEVYUFJFU1MgT1IgSU1QTElFRCBJTkNMVURJTkcsCitXSVRIT1VUIExJTUlUQVRJT04sIEFOWSBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgVElUTEUsIE5PTi1JTkZSSU5HRU1FTlQsCitNRVJDSEFOVEFCSUxJVFkgT1IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIEVhY2ggUmVjaXBpZW50IGlzIHNvbGVseQorcmVzcG9uc2libGUgZm9yIGRldGVybWluaW5nIHRoZSBhcHByb3ByaWF0ZW5lc3Mgb2YgdXNpbmcgYW5kIGRpc3RyaWJ1dGluZyB0aGUKK1Byb2dyYW0gYW5kIGFzc3VtZXMgYWxsIHJpc2tzIGFzc29jaWF0ZWQgd2l0aCBpdHMgZXhlcmNpc2Ugb2YgcmlnaHRzIHVuZGVyIHRoaXMKK0FncmVlbWVudCAsIGluY2x1ZGluZyBidXQgbm90IGxpbWl0ZWQgdG8gdGhlIHJpc2tzIGFuZCBjb3N0cyBvZiBwcm9ncmFtIGVycm9ycywKK2NvbXBsaWFuY2Ugd2l0aCBhcHBsaWNhYmxlIGxhd3MsIGRhbWFnZSB0byBvciBsb3NzIG9mIGRhdGEsIHByb2dyYW1zIG9yCitlcXVpcG1lbnQsIGFuZCB1bmF2YWlsYWJpbGl0eSBvciBpbnRlcnJ1cHRpb24gb2Ygb3BlcmF0aW9ucy4gPC9zcGFuPjwvcD4KKworPHA+PGI+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPjYuIERJU0NMQUlNRVIgT0YgTElBQklMSVRZPC9zcGFuPjwvYj4gPC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+RVhDRVBUIEFTIEVYUFJFU1NMWSBTRVQgRk9SVEggSU4gVEhJUworQUdSRUVNRU5ULCBORUlUSEVSIFJFQ0lQSUVOVCBOT1IgQU5ZIENPTlRSSUJVVE9SUyBTSEFMTCBIQVZFIEFOWSBMSUFCSUxJVFkgRk9SCitBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyhJTkNMVURJTkcgV0lUSE9VVCBMSU1JVEFUSU9OIExPU1QgUFJPRklUUyksIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCitPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORworTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPUiBESVNUUklCVVRJT04gT0YKK1RIRSBQUk9HUkFNIE9SIFRIRSBFWEVSQ0lTRSBPRiBBTlkgUklHSFRTIEdSQU5URUQgSEVSRVVOREVSLCBFVkVOIElGIEFEVklTRUQgT0YKK1RIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRVMuPC9zcGFuPiA8L3A+CisKKzxwPjxiPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz43LiBHRU5FUkFMPC9zcGFuPjwvYj4gPC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+SWYgYW55IHByb3Zpc2lvbiBvZiB0aGlzIEFncmVlbWVudCBpcyBpbnZhbGlkCitvciB1bmVuZm9yY2VhYmxlIHVuZGVyIGFwcGxpY2FibGUgbGF3LCBpdCBzaGFsbCBub3QgYWZmZWN0IHRoZSB2YWxpZGl0eSBvcgorZW5mb3JjZWFiaWxpdHkgb2YgdGhlIHJlbWFpbmRlciBvZiB0aGUgdGVybXMgb2YgdGhpcyBBZ3JlZW1lbnQsIGFuZCB3aXRob3V0CitmdXJ0aGVyIGFjdGlvbiBieSB0aGUgcGFydGllcyBoZXJldG8sIHN1Y2ggcHJvdmlzaW9uIHNoYWxsIGJlIHJlZm9ybWVkIHRvIHRoZQorbWluaW11bSBleHRlbnQgbmVjZXNzYXJ5IHRvIG1ha2Ugc3VjaCBwcm92aXNpb24gdmFsaWQgYW5kIGVuZm9yY2VhYmxlLjwvc3Bhbj4gPC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+SWYgUmVjaXBpZW50IGluc3RpdHV0ZXMgcGF0ZW50IGxpdGlnYXRpb24KK2FnYWluc3QgYW55IGVudGl0eSAoaW5jbHVkaW5nIGEgY3Jvc3MtY2xhaW0gb3IgY291bnRlcmNsYWltIGluIGEgbGF3c3VpdCkKK2FsbGVnaW5nIHRoYXQgdGhlIFByb2dyYW0gaXRzZWxmIChleGNsdWRpbmcgY29tYmluYXRpb25zIG9mIHRoZSBQcm9ncmFtIHdpdGgKK290aGVyIHNvZnR3YXJlIG9yIGhhcmR3YXJlKSBpbmZyaW5nZXMgc3VjaCBSZWNpcGllbnQncyBwYXRlbnQocyksIHRoZW4gc3VjaAorUmVjaXBpZW50J3MgcmlnaHRzIGdyYW50ZWQgdW5kZXIgU2VjdGlvbiAyKGIpIHNoYWxsIHRlcm1pbmF0ZSBhcyBvZiB0aGUgZGF0ZQorc3VjaCBsaXRpZ2F0aW9uIGlzIGZpbGVkLiA8L3NwYW4+PC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+QWxsIFJlY2lwaWVudCdzIHJpZ2h0cyB1bmRlciB0aGlzIEFncmVlbWVudAorc2hhbGwgdGVybWluYXRlIGlmIGl0IGZhaWxzIHRvIGNvbXBseSB3aXRoIGFueSBvZiB0aGUgbWF0ZXJpYWwgdGVybXMgb3IKK2NvbmRpdGlvbnMgb2YgdGhpcyBBZ3JlZW1lbnQgYW5kIGRvZXMgbm90IGN1cmUgc3VjaCBmYWlsdXJlIGluIGEgcmVhc29uYWJsZQorcGVyaW9kIG9mIHRpbWUgYWZ0ZXIgYmVjb21pbmcgYXdhcmUgb2Ygc3VjaCBub25jb21wbGlhbmNlLiBJZiBhbGwgUmVjaXBpZW50J3MKK3JpZ2h0cyB1bmRlciB0aGlzIEFncmVlbWVudCB0ZXJtaW5hdGUsIFJlY2lwaWVudCBhZ3JlZXMgdG8gY2Vhc2UgdXNlIGFuZAorZGlzdHJpYnV0aW9uIG9mIHRoZSBQcm9ncmFtIGFzIHNvb24gYXMgcmVhc29uYWJseSBwcmFjdGljYWJsZS4gSG93ZXZlciwKK1JlY2lwaWVudCdzIG9ibGlnYXRpb25zIHVuZGVyIHRoaXMgQWdyZWVtZW50IGFuZCBhbnkgbGljZW5zZXMgZ3JhbnRlZCBieQorUmVjaXBpZW50IHJlbGF0aW5nIHRvIHRoZSBQcm9ncmFtIHNoYWxsIGNvbnRpbnVlIGFuZCBzdXJ2aXZlLiA8L3NwYW4+PC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+RXZlcnlvbmUgaXMgcGVybWl0dGVkIHRvIGNvcHkgYW5kIGRpc3RyaWJ1dGUKK2NvcGllcyBvZiB0aGlzIEFncmVlbWVudCwgYnV0IGluIG9yZGVyIHRvIGF2b2lkIGluY29uc2lzdGVuY3kgdGhlIEFncmVlbWVudCBpcworY29weXJpZ2h0ZWQgYW5kIG1heSBvbmx5IGJlIG1vZGlmaWVkIGluIHRoZSBmb2xsb3dpbmcgbWFubmVyLiBUaGUgQWdyZWVtZW50CitTdGV3YXJkIHJlc2VydmVzIHRoZSByaWdodCB0byBwdWJsaXNoIG5ldyB2ZXJzaW9ucyAoaW5jbHVkaW5nIHJldmlzaW9ucykgb2YKK3RoaXMgQWdyZWVtZW50IGZyb20gdGltZSB0byB0aW1lLiBObyBvbmUgb3RoZXIgdGhhbiB0aGUgQWdyZWVtZW50IFN0ZXdhcmQgaGFzCit0aGUgcmlnaHQgdG8gbW9kaWZ5IHRoaXMgQWdyZWVtZW50LiBUaGUgRWNsaXBzZSBGb3VuZGF0aW9uIGlzIHRoZSBpbml0aWFsCitBZ3JlZW1lbnQgU3Rld2FyZC4gVGhlIEVjbGlwc2UgRm91bmRhdGlvbiBtYXkgYXNzaWduIHRoZSByZXNwb25zaWJpbGl0eSB0bworc2VydmUgYXMgdGhlIEFncmVlbWVudCBTdGV3YXJkIHRvIGEgc3VpdGFibGUgc2VwYXJhdGUgZW50aXR5LiBFYWNoIG5ldyB2ZXJzaW9uCitvZiB0aGUgQWdyZWVtZW50IHdpbGwgYmUgZ2l2ZW4gYSBkaXN0aW5ndWlzaGluZyB2ZXJzaW9uIG51bWJlci4gVGhlIFByb2dyYW0KKyhpbmNsdWRpbmcgQ29udHJpYnV0aW9ucykgbWF5IGFsd2F5cyBiZSBkaXN0cmlidXRlZCBzdWJqZWN0IHRvIHRoZSB2ZXJzaW9uIG9mCit0aGUgQWdyZWVtZW50IHVuZGVyIHdoaWNoIGl0IHdhcyByZWNlaXZlZC4gSW4gYWRkaXRpb24sIGFmdGVyIGEgbmV3IHZlcnNpb24gb2YKK3RoZSBBZ3JlZW1lbnQgaXMgcHVibGlzaGVkLCBDb250cmlidXRvciBtYXkgZWxlY3QgdG8gZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbQorKGluY2x1ZGluZyBpdHMgQ29udHJpYnV0aW9ucykgdW5kZXIgdGhlIG5ldyB2ZXJzaW9uLiBFeGNlcHQgYXMgZXhwcmVzc2x5IHN0YXRlZAoraW4gU2VjdGlvbnMgMihhKSBhbmQgMihiKSBhYm92ZSwgUmVjaXBpZW50IHJlY2VpdmVzIG5vIHJpZ2h0cyBvciBsaWNlbnNlcyB0bwordGhlIGludGVsbGVjdHVhbCBwcm9wZXJ0eSBvZiBhbnkgQ29udHJpYnV0b3IgdW5kZXIgdGhpcyBBZ3JlZW1lbnQsIHdoZXRoZXIKK2V4cHJlc3NseSwgYnkgaW1wbGljYXRpb24sIGVzdG9wcGVsIG9yIG90aGVyd2lzZS4gQWxsIHJpZ2h0cyBpbiB0aGUgUHJvZ3JhbSBub3QKK2V4cHJlc3NseSBncmFudGVkIHVuZGVyIHRoaXMgQWdyZWVtZW50IGFyZSByZXNlcnZlZC48L3NwYW4+IDwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPlRoaXMgQWdyZWVtZW50IGlzIGdvdmVybmVkIGJ5IHRoZSBsYXdzIG9mIHRoZQorU3RhdGUgb2YgTmV3IFlvcmsgYW5kIHRoZSBpbnRlbGxlY3R1YWwgcHJvcGVydHkgbGF3cyBvZiB0aGUgVW5pdGVkIFN0YXRlcyBvZgorQW1lcmljYS4gTm8gcGFydHkgdG8gdGhpcyBBZ3JlZW1lbnQgd2lsbCBicmluZyBhIGxlZ2FsIGFjdGlvbiB1bmRlciB0aGlzCitBZ3JlZW1lbnQgbW9yZSB0aGFuIG9uZSB5ZWFyIGFmdGVyIHRoZSBjYXVzZSBvZiBhY3Rpb24gYXJvc2UuIEVhY2ggcGFydHkgd2FpdmVzCitpdHMgcmlnaHRzIHRvIGEganVyeSB0cmlhbCBpbiBhbnkgcmVzdWx0aW5nIGxpdGlnYXRpb24uPC9zcGFuPiA8L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbD48IVtpZiAhc3VwcG9ydEVtcHR5UGFyYXNdPiZuYnNwOzwhW2VuZGlmXT48bzpwPjwvbzpwPjwvcD4KKworPC9kaXY+CisKKzwvYm9keT4KKworPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5qb2JzLm5sMS9ub3RpY2UuaHRtbCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5qb2JzLm5sMS9ub3RpY2UuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNmFmOTY2Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmpvYnMubmwxL25vdGljZS5odG1sCkBAIC0wLDAgKzEsNzkgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAvL0VOIj4KKzxodG1sPgorPGhlYWQ+Cis8bWV0YSBodHRwLWVxdWl2PUNvbnRlbnQtVHlwZSBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9aXNvLTg4NTktMSI+Cis8dGl0bGU+RWNsaXBzZS5vcmcgU29mdHdhcmUgVXNlciBBZ3JlZW1lbnQ8L3RpdGxlPgorPC9oZWFkPgorCis8Ym9keSBsYW5nPSJFTi1VUyIgbGluaz1ibHVlIHZsaW5rPXB1cnBsZT4KKzxoMj5FY2xpcHNlIEZvdW5kYXRpb24gU29mdHdhcmUgVXNlciBBZ3JlZW1lbnQ8L2gyPgorPHA+TWFyY2ggMTcsIDIwMDU8L3A+CisKKzxoMz5Vc2FnZSBPZiBDb250ZW50PC9oMz4KKworPHA+VEhFIEVDTElQU0UgRk9VTkRBVElPTiBNQUtFUyBBVkFJTEFCTEUgU09GVFdBUkUsIERPQ1VNRU5UQVRJT04sIElORk9STUFUSU9OIEFORC9PUiBPVEhFUiBNQVRFUklBTFMgRk9SIE9QRU4gU09VUkNFIFBST0pFQ1RTCisgICAoQ09MTEVDVElWRUxZICZxdW90O0NPTlRFTlQmcXVvdDspLiAgVVNFIE9GIFRIRSBDT05URU5UIElTIEdPVkVSTkVEIEJZIFRIRSBURVJNUyBBTkQgQ09ORElUSU9OUyBPRiBUSElTIEFHUkVFTUVOVCBBTkQvT1IgVEhFIFRFUk1TIEFORAorICAgQ09ORElUSU9OUyBPRiBMSUNFTlNFIEFHUkVFTUVOVFMgT1IgTk9USUNFUyBJTkRJQ0FURUQgT1IgUkVGRVJFTkNFRCBCRUxPVy4gIEJZIFVTSU5HIFRIRSBDT05URU5ULCBZT1UgQUdSRUUgVEhBVCBZT1VSIFVTRQorICAgT0YgVEhFIENPTlRFTlQgSVMgR09WRVJORUQgQlkgVEhJUyBBR1JFRU1FTlQgQU5EL09SIFRIRSBURVJNUyBBTkQgQ09ORElUSU9OUyBPRiBBTlkgQVBQTElDQUJMRSBMSUNFTlNFIEFHUkVFTUVOVFMgT1IKKyAgIE5PVElDRVMgSU5ESUNBVEVEIE9SIFJFRkVSRU5DRUQgQkVMT1cuICBJRiBZT1UgRE8gTk9UIEFHUkVFIFRPIFRIRSBURVJNUyBBTkQgQ09ORElUSU9OUyBPRiBUSElTIEFHUkVFTUVOVCBBTkQgVEhFIFRFUk1TIEFORAorICAgQ09ORElUSU9OUyBPRiBBTlkgQVBQTElDQUJMRSBMSUNFTlNFIEFHUkVFTUVOVFMgT1IgTk9USUNFUyBJTkRJQ0FURUQgT1IgUkVGRVJFTkNFRCBCRUxPVywgVEhFTiBZT1UgTUFZIE5PVCBVU0UgVEhFIENPTlRFTlQuPC9wPgorICAgCis8aDM+QXBwbGljYWJsZSBMaWNlbnNlczwvaDM+ICAgCisgICAKKzxwPlVubGVzcyBvdGhlcndpc2UgaW5kaWNhdGVkLCBhbGwgQ29udGVudCBtYWRlIGF2YWlsYWJsZSBieSB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uIGlzIHByb3ZpZGVkIHRvIHlvdSB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjAKKyAgICgmcXVvdDtFUEwmcXVvdDspLiAgQSBjb3B5IG9mIHRoZSBFUEwgaXMgcHJvdmlkZWQgd2l0aCB0aGlzIENvbnRlbnQgYW5kIGlzIGFsc28gYXZhaWxhYmxlIGF0IDxhIGhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sIj5odHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbDwvYT4uCisgICBGb3IgcHVycG9zZXMgb2YgdGhlIEVQTCwgJnF1b3Q7UHJvZ3JhbSZxdW90OyB3aWxsIG1lYW4gdGhlIENvbnRlbnQuPC9wPgorCis8cD5Db250ZW50IGluY2x1ZGVzLCBidXQgaXMgbm90IGxpbWl0ZWQgdG8sIHNvdXJjZSBjb2RlLCBvYmplY3QgY29kZSwgZG9jdW1lbnRhdGlvbiBhbmQgb3RoZXIgZmlsZXMgbWFpbnRhaW5lZCBpbiB0aGUgRWNsaXBzZS5vcmcgQ1ZTIHJlcG9zaXRvcnkgKCZxdW90O1JlcG9zaXRvcnkmcXVvdDspIGluIENWUworICAgbW9kdWxlcyAoJnF1b3Q7TW9kdWxlcyZxdW90OykgYW5kIG1hZGUgYXZhaWxhYmxlIGFzIGRvd25sb2FkYWJsZSBhcmNoaXZlcyAoJnF1b3Q7RG93bmxvYWRzJnF1b3Q7KS48L3A+CisgICAKKzx1bD4KKwk8bGk+Q29udGVudCBtYXkgYmUgc3RydWN0dXJlZCBhbmQgcGFja2FnZWQgaW50byBtb2R1bGVzIHRvIGZhY2lsaXRhdGUgZGVsaXZlcmluZywgZXh0ZW5kaW5nLCBhbmQgdXBncmFkaW5nIHRoZSBDb250ZW50LiAgVHlwaWNhbCBtb2R1bGVzIG1heSBpbmNsdWRlIHBsdWctaW5zICgmcXVvdDtQbHVnLWlucyZxdW90OyksIHBsdWctaW4gZnJhZ21lbnRzICgmcXVvdDtGcmFnbWVudHMmcXVvdDspLCBhbmQgZmVhdHVyZXMgKCZxdW90O0ZlYXR1cmVzJnF1b3Q7KS48L2xpPgorCTxsaT5FYWNoIFBsdWctaW4gb3IgRnJhZ21lbnQgbWF5IGJlIHBhY2thZ2VkIGFzIGEgc3ViLWRpcmVjdG9yeSBvciBKQVIgKEphdmEmdHJhZGU7IEFSY2hpdmUpIGluIGEgZGlyZWN0b3J5IG5hbWVkICZxdW90O3BsdWdpbnMmcXVvdDsuPC9saT4KKwk8bGk+QSBGZWF0dXJlIGlzIGEgYnVuZGxlIG9mIG9uZSBvciBtb3JlIFBsdWctaW5zIGFuZC9vciBGcmFnbWVudHMgYW5kIGFzc29jaWF0ZWQgbWF0ZXJpYWwuICBFYWNoIEZlYXR1cmUgbWF5IGJlIHBhY2thZ2VkIGFzIGEgc3ViLWRpcmVjdG9yeSBpbiBhIGRpcmVjdG9yeSBuYW1lZCAmcXVvdDtmZWF0dXJlcyZxdW90Oy4gIFdpdGhpbiBhIEZlYXR1cmUsIGZpbGVzIG5hbWVkICZxdW90O2ZlYXR1cmUueG1sJnF1b3Q7IG1heSBjb250YWluIGEgbGlzdCBvZiB0aGUgbmFtZXMgYW5kIHZlcnNpb24gbnVtYmVycyBvZiB0aGUgUGx1Zy1pbnMKKyAgICAgIGFuZC9vciBGcmFnbWVudHMgYXNzb2NpYXRlZCB3aXRoIHRoYXQgRmVhdHVyZS48L2xpPgorCTxsaT5GZWF0dXJlcyBtYXkgYWxzbyBpbmNsdWRlIG90aGVyIEZlYXR1cmVzICgmcXVvdDtJbmNsdWRlZCBGZWF0dXJlcyZxdW90OykuIFdpdGhpbiBhIEZlYXR1cmUsIGZpbGVzIG5hbWVkICZxdW90O2ZlYXR1cmUueG1sJnF1b3Q7IG1heSBjb250YWluIGEgbGlzdCBvZiB0aGUgbmFtZXMgYW5kIHZlcnNpb24gbnVtYmVycyBvZiBJbmNsdWRlZCBGZWF0dXJlcy48L2xpPgorPC91bD4gICAKKyAKKzxwPlRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBnb3Zlcm5pbmcgUGx1Zy1pbnMgYW5kIEZyYWdtZW50cyBzaG91bGQgYmUgY29udGFpbmVkIGluIGZpbGVzIG5hbWVkICZxdW90O2Fib3V0Lmh0bWwmcXVvdDsgKCZxdW90O0Fib3V0cyZxdW90OykuIFRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBnb3Zlcm5pbmcgRmVhdHVyZXMgYW5kCitJbmNsdWRlZCBGZWF0dXJlcyBzaG91bGQgYmUgY29udGFpbmVkIGluIGZpbGVzIG5hbWVkICZxdW90O2xpY2Vuc2UuaHRtbCZxdW90OyAoJnF1b3Q7RmVhdHVyZSBMaWNlbnNlcyZxdW90OykuICBBYm91dHMgYW5kIEZlYXR1cmUgTGljZW5zZXMgbWF5IGJlIGxvY2F0ZWQgaW4gYW55IGRpcmVjdG9yeSBvZiBhIERvd25sb2FkIG9yIE1vZHVsZQoraW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG8gdGhlIGZvbGxvd2luZyBsb2NhdGlvbnM6PC9wPgorCis8dWw+CisJPGxpPlRoZSB0b3AtbGV2ZWwgKHJvb3QpIGRpcmVjdG9yeTwvbGk+CisJPGxpPlBsdWctaW4gYW5kIEZyYWdtZW50IGRpcmVjdG9yaWVzPC9saT4KKwk8bGk+SW5zaWRlIFBsdWctaW5zIGFuZCBGcmFnbWVudHMgcGFja2FnZWQgYXMgSkFSczwvbGk+CisJPGxpPlN1Yi1kaXJlY3RvcmllcyBvZiB0aGUgZGlyZWN0b3J5IG5hbWVkICZxdW90O3NyYyZxdW90OyBvZiBjZXJ0YWluIFBsdWctaW5zPC9saT4KKwk8bGk+RmVhdHVyZSBkaXJlY3RvcmllczwvbGk+Cis8L3VsPgorCQkKKzxwPk5vdGU6IGlmIGEgRmVhdHVyZSBtYWRlIGF2YWlsYWJsZSBieSB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uIGlzIGluc3RhbGxlZCB1c2luZyB0aGUgRWNsaXBzZSBVcGRhdGUgTWFuYWdlciwgeW91IG11c3QgYWdyZWUgdG8gYSBsaWNlbnNlICgmcXVvdDtGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlJnF1b3Q7KSBkdXJpbmcgdGhlCitpbnN0YWxsYXRpb24gcHJvY2Vzcy4gIElmIHRoZSBGZWF0dXJlIGNvbnRhaW5zIEluY2x1ZGVkIEZlYXR1cmVzLCB0aGUgRmVhdHVyZSBVcGRhdGUgTGljZW5zZSBzaG91bGQgZWl0aGVyIHByb3ZpZGUgeW91IHdpdGggdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIGdvdmVybmluZyB0aGUgSW5jbHVkZWQgRmVhdHVyZXMgb3IKK2luZm9ybSB5b3Ugd2hlcmUgeW91IGNhbiBsb2NhdGUgdGhlbS4gIEZlYXR1cmUgVXBkYXRlIExpY2Vuc2VzIG1heSBiZSBmb3VuZCBpbiB0aGUgJnF1b3Q7bGljZW5zZSZxdW90OyBwcm9wZXJ0eSBvZiBmaWxlcyBuYW1lZCAmcXVvdDtmZWF0dXJlLnByb3BlcnRpZXMmcXVvdDsgZm91bmQgd2l0aGluIGEgRmVhdHVyZS4KK1N1Y2ggQWJvdXRzLCBGZWF0dXJlIExpY2Vuc2VzLCBhbmQgRmVhdHVyZSBVcGRhdGUgTGljZW5zZXMgY29udGFpbiB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgKG9yIHJlZmVyZW5jZXMgdG8gc3VjaCB0ZXJtcyBhbmQgY29uZGl0aW9ucykgdGhhdCBnb3Zlcm4geW91ciB1c2Ugb2YgdGhlIGFzc29jaWF0ZWQgQ29udGVudCBpbgordGhhdCBkaXJlY3RvcnkuPC9wPgorCis8cD5USEUgQUJPVVRTLCBGRUFUVVJFIExJQ0VOU0VTLCBBTkQgRkVBVFVSRSBVUERBVEUgTElDRU5TRVMgTUFZIFJFRkVSIFRPIFRIRSBFUEwgT1IgT1RIRVIgTElDRU5TRSBBR1JFRU1FTlRTLCBOT1RJQ0VTIE9SIFRFUk1TIEFORCBDT05ESVRJT05TLiAgU09NRSBPRiBUSEVTRQorT1RIRVIgTElDRU5TRSBBR1JFRU1FTlRTIE1BWSBJTkNMVURFIChCVVQgQVJFIE5PVCBMSU1JVEVEIFRPKTo8L3A+CisKKzx1bD4KKwk8bGk+Q29tbW9uIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4wIChhdmFpbGFibGUgYXQgPGEgaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9jcGwtdjEwLmh0bWwiPmh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvY3BsLXYxMC5odG1sPC9hPik8L2xpPgorCTxsaT5BcGFjaGUgU29mdHdhcmUgTGljZW5zZSAxLjEgKGF2YWlsYWJsZSBhdCA8YSBocmVmPSJodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRSI+aHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0U8L2E+KTwvbGk+CisJPGxpPkFwYWNoZSBTb2Z0d2FyZSBMaWNlbnNlIDIuMCAoYXZhaWxhYmxlIGF0IDxhIGhyZWY9Imh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMCI+aHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wPC9hPik8L2xpPgorCTxsaT5JQk0gUHVibGljIExpY2Vuc2UgMS4wIChhdmFpbGFibGUgYXQgPGEgaHJlZj0iaHR0cDovL29zcy5zb2Z0d2FyZS5pYm0uY29tL2RldmVsb3BlcndvcmtzL29wZW5zb3VyY2UvbGljZW5zZTEwLmh0bWwiPmh0dHA6Ly9vc3Muc29mdHdhcmUuaWJtLmNvbS9kZXZlbG9wZXJ3b3Jrcy9vcGVuc291cmNlL2xpY2Vuc2UxMC5odG1sPC9hPik8L2xpPgkKKwk8bGk+TWV0cm8gTGluayBQdWJsaWMgTGljZW5zZSAxLjAwIChhdmFpbGFibGUgYXQgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuZ3JvdXAub3JnL29wZW5tb3RpZi9zdXBwb3J0ZXJzL21ldHJvbGluay9saWNlbnNlLmh0bWwiPmh0dHA6Ly93d3cub3Blbmdyb3VwLm9yZy9vcGVubW90aWYvc3VwcG9ydGVycy9tZXRyb2xpbmsvbGljZW5zZS5odG1sPC9hPik8L2xpPgorCTxsaT5Nb3ppbGxhIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4xIChhdmFpbGFibGUgYXQgPGEgaHJlZj0iaHR0cDovL3d3dy5tb3ppbGxhLm9yZy9NUEwvTVBMLTEuMS5odG1sIj5odHRwOi8vd3d3Lm1vemlsbGEub3JnL01QTC9NUEwtMS4xLmh0bWw8L2E+KTwvbGk+Cis8L3VsPgorCis8cD5JVCBJUyBZT1VSIE9CTElHQVRJT04gVE8gUkVBRCBBTkQgQUNDRVBUIEFMTCBTVUNIIFRFUk1TIEFORCBDT05ESVRJT05TIFBSSU9SIFRPIFVTRSBPRiBUSEUgQ09OVEVOVC4gIElmIG5vIEFib3V0LCBGZWF0dXJlIExpY2Vuc2UsIG9yIEZlYXR1cmUgVXBkYXRlIExpY2Vuc2UgaXMgcHJvdmlkZWQsIHBsZWFzZQorY29udGFjdCB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uIHRvIGRldGVybWluZSB3aGF0IHRlcm1zIGFuZCBjb25kaXRpb25zIGdvdmVybiB0aGF0IHBhcnRpY3VsYXIgQ29udGVudC48L3A+CisKKzxoMz5DcnlwdG9ncmFwaHk8L2gzPgorCis8cD5Db250ZW50IG1heSBjb250YWluIGVuY3J5cHRpb24gc29mdHdhcmUuIFRoZSBjb3VudHJ5IGluIHdoaWNoIHlvdSBhcmUgY3VycmVudGx5IG1heSBoYXZlIHJlc3RyaWN0aW9ucyBvbiB0aGUgaW1wb3J0LCBwb3NzZXNzaW9uLCBhbmQgdXNlLCBhbmQvb3IgcmUtZXhwb3J0IHRvCisgICBhbm90aGVyIGNvdW50cnksIG9mIGVuY3J5cHRpb24gc29mdHdhcmUuIEJFRk9SRSB1c2luZyBhbnkgZW5jcnlwdGlvbiBzb2Z0d2FyZSwgcGxlYXNlIGNoZWNrIHRoZSBjb3VudHJ5J3MgbGF3cywgcmVndWxhdGlvbnMgYW5kIHBvbGljaWVzIGNvbmNlcm5pbmcgdGhlIGltcG9ydCwKKyAgIHBvc3Nlc3Npb24sIG9yIHVzZSwgYW5kIHJlLWV4cG9ydCBvZiBlbmNyeXB0aW9uIHNvZnR3YXJlLCB0byBzZWUgaWYgdGhpcyBpcyBwZXJtaXR0ZWQuPC9wPgorICAgCis8c21hbGw+SmF2YSBhbmQgYWxsIEphdmEtYmFzZWQgdHJhZGVtYXJrcyBhcmUgdHJhZGVtYXJrcyBvZiBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuIGluIHRoZSBVbml0ZWQgU3RhdGVzLCBvdGhlciBjb3VudHJpZXMsIG9yIGJvdGguPC9zbWFsbD4gICAKKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5qb2JzLm5sMS9wbHVnaW4ucHJvcGVydGllcyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5qb2JzLm5sMS9wbHVnaW4ucHJvcGVydGllcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44OTE2Y2Q3Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmpvYnMubmwxL3BsdWdpbi5wcm9wZXJ0aWVzCkBAIC0wLDAgKzEsMjcgQEAKKyMvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIyAqIENvcHlyaWdodCAoYykgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyMgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisjICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisjICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyMgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorIyAqCisjICogQ29udHJpYnV0b3JzOgorIyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisjIFRvIGNvZGUgZGV2ZWxvcGVyOgorIyAgIERvIE5PVCBjaGFuZ2UgdGhlIHByb3BlcnRpZXMgYmV0d2VlbiB0aGlzIGxpbmUgYW5kIHRoZQorIyAgICIlJSUgRU5EIE9GIFRSQU5TTEFURUQgUFJPUEVSVElFUyAlJSUiIGxpbmUuCisjICAgTWFrZSBhIG5ldyBwcm9wZXJ0eSBuYW1lLCBhcHBlbmQgdG8gdGhlIGVuZCBvZiB0aGUgZmlsZSBhbmQgY2hhbmdlCisjICAgdGhlIGNvZGUgdG8gdXNlIHRoZSBuZXcgcHJvcGVydHkuCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyMgJSUlIEVORCBPRiBUUkFOU0xBVEVEIFBST1BFUlRJRVMgJSUlCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK3BsdWdpbk5hbWUgPSBTVEVNIEpvYnMgTmwxIEZyYWdtZW50Citwcm92aWRlck5hbWUgPSBFY2xpcHNlLm9yZworCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uam9icy5ubDEvcGx1Z2luX2RlLnByb3BlcnRpZXMgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uam9icy5ubDEvcGx1Z2luX2RlLnByb3BlcnRpZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjE2YTE2MQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5qb2JzLm5sMS9wbHVnaW5fZGUucHJvcGVydGllcwpAQCAtMCwwICsxLDI3IEBACisjLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyMgKiBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisjICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworIyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorIyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisjICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyMgKgorIyAqIENvbnRyaWJ1dG9yczoKKyMgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisjICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorIyBUbyBjb2RlIGRldmVsb3BlcjoKKyMgICBEbyBOT1QgY2hhbmdlIHRoZSBwcm9wZXJ0aWVzIGJldHdlZW4gdGhpcyBsaW5lIGFuZCB0aGUKKyMgICAiJSUlIEVORCBPRiBUUkFOU0xBVEVEIFBST1BFUlRJRVMgJSUlIiBsaW5lLgorIyAgIE1ha2UgYSBuZXcgcHJvcGVydHkgbmFtZSwgYXBwZW5kIHRvIHRoZSBlbmQgb2YgdGhlIGZpbGUgYW5kIGNoYW5nZQorIyAgIHRoZSBjb2RlIHRvIHVzZSB0aGUgbmV3IHByb3BlcnR5LgorIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisjICUlJSBFTkQgT0YgVFJBTlNMQVRFRCBQUk9QRVJUSUVTICUlJQorIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitwbHVnaW5OYW1lPVNURU0gQXVmZ2FiZW4gTkwxIEZyYWdtZW50Citwcm92aWRlck5hbWU9RWNsaXBzZS5vcmcKKwpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmpvYnMubmwxL3BsdWdpbl9rci5wcm9wZXJ0aWVzIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmpvYnMubmwxL3BsdWdpbl9rci5wcm9wZXJ0aWVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjExOWY0YzgKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uam9icy5ubDEvcGx1Z2luX2tyLnByb3BlcnRpZXMKQEAgLTAsMCArMSwyNyBAQAorIy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjICogQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorIyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyMgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyMgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorIyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisjICoKKyMgKiBDb250cmlidXRvcnM6CisjICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorIyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyMgVG8gY29kZSBkZXZlbG9wZXI6CisjICAgRG8gTk9UIGNoYW5nZSB0aGUgcHJvcGVydGllcyBiZXR3ZWVuIHRoaXMgbGluZSBhbmQgdGhlCisjICAgIiUlJSBFTkQgT0YgVFJBTlNMQVRFRCBQUk9QRVJUSUVTICUlJSIgbGluZS4KKyMgICBNYWtlIGEgbmV3IHByb3BlcnR5IG5hbWUsIGFwcGVuZCB0byB0aGUgZW5kIG9mIHRoZSBmaWxlIGFuZCBjaGFuZ2UKKyMgICB0aGUgY29kZSB0byB1c2UgdGhlIG5ldyBwcm9wZXJ0eS4KKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorIyAlJSUgRU5EIE9GIFRSQU5TTEFURUQgUFJPUEVSVElFUyAlJSUKKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworcGx1Z2luTmFtZT1TVEVNIFx1Yzc5MVx1YzVjNSBObDEgXHVjODcwXHVhYzAxCitwcm92aWRlck5hbWU9RWNsaXBzZS5vcmcKKwpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmpvYnMubmwxL3BsdWdpbl96aC5wcm9wZXJ0aWVzIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmpvYnMubmwxL3BsdWdpbl96aC5wcm9wZXJ0aWVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhkNWRiMGQKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uam9icy5ubDEvcGx1Z2luX3poLnByb3BlcnRpZXMKQEAgLTAsMCArMSwyNyBAQAorIy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjICogQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorIyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyMgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyMgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorIyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisjICoKKyMgKiBDb250cmlidXRvcnM6CisjICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorIyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyMgVG8gY29kZSBkZXZlbG9wZXI6CisjICAgRG8gTk9UIGNoYW5nZSB0aGUgcHJvcGVydGllcyBiZXR3ZWVuIHRoaXMgbGluZSBhbmQgdGhlCisjICAgIiUlJSBFTkQgT0YgVFJBTlNMQVRFRCBQUk9QRVJUSUVTICUlJSIgbGluZS4KKyMgICBNYWtlIGEgbmV3IHByb3BlcnR5IG5hbWUsIGFwcGVuZCB0byB0aGUgZW5kIG9mIHRoZSBmaWxlIGFuZCBjaGFuZ2UKKyMgICB0aGUgY29kZSB0byB1c2UgdGhlIG5ldyBwcm9wZXJ0eS4KKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorIyAlJSUgRU5EIE9GIFRSQU5TTEFURUQgUFJPUEVSVElFUyAlJSUKKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworcGx1Z2luTmFtZT1TVEVNXHU0ZjVjXHU0ZTFhTkwxXHU3MjQ3XHU2YmI1Citwcm92aWRlck5hbWU9RWNsaXBzZS5vcmcKKwpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmpvYnMubmwxL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2pvYnMvc2ltdWxhdGlvbi9tZXNzYWdlc19lbl9VU19DQS5wcm9wZXJ0aWVzIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmpvYnMubmwxL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2pvYnMvc2ltdWxhdGlvbi9tZXNzYWdlc19lbl9VU19DQS5wcm9wZXJ0aWVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNkNGY4OTkKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uam9icy5ubDEvc3JjL29yZy9lY2xpcHNlL3N0ZW0vam9icy9zaW11bGF0aW9uL21lc3NhZ2VzX2VuX1VTX0NBLnByb3BlcnRpZXMKQEAgLTAsMCArMSwxOSBAQAorIyBtZXNzYWdlc19lbl9VU19DQS5wcm9wZXJ0aWVzCisjIENhbGlmb3JuaWFuCisjIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorIyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyMgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyMgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorIyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisjICoKKyMgKiBDb250cmlidXRvcnM6CisjICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorIyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjIFNpbXVsYXRpb25NYW5hZ2VyCitTaW1NZ3IuRGVzZXJpYWxpemF0aW9uX0Vycm9yPVByb2JsZW0gcmVhZGluZyBpbiBhIHNlcmlhbGl6ZWQgU2NlbmFyaW8gZnJvbSBVUkkgXCJ7MH1cIgorU2ltTWdyLlN0YXJ0X1NpbT1TdGFydGluZyBzaW11bGF0aW9uCisKKyMgU2ltdWxhdGlvbgorU2ltLlRpbWVfRXJyb3I9VGltZSB0byBzdG9wIGJlZm9yZSBzdGFydGluZy4gIEN1cnJlbnQgdGltZSBpczogezB9LCBTdG9wcGluZyB0aW1lIGlzOiB7MX0KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5qb2JzLm5sMS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9qb2JzL3NpbXVsYXRpb24vbWVzc2FnZXNfZXMucHJvcGVydGllcyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5qb2JzLm5sMS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9qb2JzL3NpbXVsYXRpb24vbWVzc2FnZXNfZXMucHJvcGVydGllcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yODhmMTIzCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmpvYnMubmwxL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2pvYnMvc2ltdWxhdGlvbi9tZXNzYWdlc19lcy5wcm9wZXJ0aWVzCkBAIC0wLDAgKzEsMTkgQEAKKyMgbWVzc2FnZXNfZXMucHJvcGVydGllcworIyBTcGFuaXNoCisjIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorIyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyMgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyMgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorIyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisjICoKKyMgKiBDb250cmlidXRvcnM6CisjICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorIyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjIFNpbXVsYXRpb25NYW5hZ2VyCitTaW1NZ3IuRGVzZXJpYWxpemF0aW9uX0Vycm9yPVByb2JsZW0gcmVhZGluZyBpbiBhIHNlcmlhbGl6ZWQgU2NlbmFyaW8gZnJvbSBVUkkgXCJ7MH1cIgorU2ltTWdyLlN0YXJ0X1NpbT1TdGFydGluZyBzaW11bGF0aW9uCisKKyMgU2ltdWxhdGlvbgorU2ltLlRpbWVfRXJyb3I9VGltZSB0byBzdG9wIGJlZm9yZSBzdGFydGluZy4gIEN1cnJlbnQgdGltZSBpczogezB9LCBTdG9wcGluZyB0aW1lIGlzOiB7MX0KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5qb2JzLm5sMS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9qb2JzL3NpbXVsYXRpb24vbWVzc2FnZXNfaGUucHJvcGVydGllcyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5qb2JzLm5sMS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9qb2JzL3NpbXVsYXRpb24vbWVzc2FnZXNfaGUucHJvcGVydGllcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZmFiY2ZjCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmpvYnMubmwxL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2pvYnMvc2ltdWxhdGlvbi9tZXNzYWdlc19oZS5wcm9wZXJ0aWVzCkBAIC0wLDAgKzEsMTkgQEAKKyMgbWVzc2FnZXMucHJvcGVydGllcworIyBIZWJyZXcKKyMgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyMgKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisjICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworIyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorIyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisjICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyMgKgorIyAqIENvbnRyaWJ1dG9yczoKKyMgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisjICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyMgU2ltdWxhdGlvbk1hbmFnZXIKK1NpbU1nci5EZXNlcmlhbGl6YXRpb25fRXJyb3I9UHJvYmxlbSByZWFkaW5nIGluIGEgc2VyaWFsaXplZCBTY2VuYXJpbyBmcm9tIFVSSSBcInswfVwiCitTaW1NZ3IuU3RhcnRfU2ltPVN0YXJ0aW5nIHNpbXVsYXRpb24KKworIyBTaW11bGF0aW9uCitTaW0uVGltZV9FcnJvcj1UaW1lIHRvIHN0b3AgYmVmb3JlIHN0YXJ0aW5nLiAgQ3VycmVudCB0aW1lIGlzOiB7MH0sIFN0b3BwaW5nIHRpbWUgaXM6IHsxfQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmpvYnMubmwxL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2pvYnMvc2ltdWxhdGlvbi9tZXNzYWdlc190YS5wcm9wZXJ0aWVzIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmpvYnMubmwxL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2pvYnMvc2ltdWxhdGlvbi9tZXNzYWdlc190YS5wcm9wZXJ0aWVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM0Yjc3OTcKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uam9icy5ubDEvc3JjL29yZy9lY2xpcHNlL3N0ZW0vam9icy9zaW11bGF0aW9uL21lc3NhZ2VzX3RhLnByb3BlcnRpZXMKQEAgLTAsMCArMSwxOSBAQAorIyBtZXNzYWdlcy5wcm9wZXJ0aWVzCisjIFRhbWlsCisjIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorIyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyMgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyMgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorIyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisjICoKKyMgKiBDb250cmlidXRvcnM6CisjICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorIyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjIFNpbXVsYXRpb25NYW5hZ2VyCitTaW1NZ3IuRGVzZXJpYWxpemF0aW9uX0Vycm9yPVByb2JsZW0gcmVhZGluZyBpbiBhIHNlcmlhbGl6ZWQgU2NlbmFyaW8gZnJvbSBVUkkgXCJ7MH1cIgorU2ltTWdyLlN0YXJ0X1NpbT1TdGFydGluZyBzaW11bGF0aW9uCisKKyMgU2ltdWxhdGlvbgorU2ltLlRpbWVfRXJyb3I9VGltZSB0byBzdG9wIGJlZm9yZSBzdGFydGluZy4gIEN1cnJlbnQgdGltZSBpczogezB9LCBTdG9wcGluZyB0aW1lIGlzOiB7MX0KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5qb2JzLm5sMS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9qb2JzL3NpbXVsYXRpb24vbWVzc2FnZXNfemgucHJvcGVydGllcyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5qb2JzLm5sMS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9qb2JzL3NpbXVsYXRpb24vbWVzc2FnZXNfemgucHJvcGVydGllcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MjA1YzViCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmpvYnMubmwxL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2pvYnMvc2ltdWxhdGlvbi9tZXNzYWdlc196aC5wcm9wZXJ0aWVzCkBAIC0wLDAgKzEsMTkgQEAKKyMgbWVzc2FnZXMucHJvcGVydGllcworIyBDaGluZXNlCisjIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorIyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyMgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyMgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorIyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisjICoKKyMgKiBDb250cmlidXRvcnM6CisjICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorIyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjIFNpbXVsYXRpb25NYW5hZ2VyCitTaW1NZ3IuRGVzZXJpYWxpemF0aW9uX0Vycm9yPVByb2JsZW0gcmVhZGluZyBpbiBhIHNlcmlhbGl6ZWQgU2NlbmFyaW8gZnJvbSBVUkkgXCJ7MH1cIgorU2ltTWdyLlN0YXJ0X1NpbT1TdGFydGluZyBzaW11bGF0aW9uCisKKyMgU2ltdWxhdGlvbgorU2ltLlRpbWVfRXJyb3I9VGltZSB0byBzdG9wIGJlZm9yZSBzdGFydGluZy4gIEN1cnJlbnQgdGltZSBpczogezB9LCBTdG9wcGluZyB0aW1lIGlzOiB7MX0KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5qb2JzLy5jbGFzc3BhdGggYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uam9icy8uY2xhc3NwYXRoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMwNGU4NjEKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uam9icy8uY2xhc3NwYXRoCkBAIC0wLDAgKzEsNyBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxjbGFzc3BhdGg+CisJPGNsYXNzcGF0aGVudHJ5IGtpbmQ9InNyYyIgcGF0aD0ic3JjIi8+CisJPGNsYXNzcGF0aGVudHJ5IGtpbmQ9ImNvbiIgcGF0aD0ib3JnLmVjbGlwc2UuamR0LmxhdW5jaGluZy5KUkVfQ09OVEFJTkVSL29yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC5kZWJ1Zy51aS5sYXVuY2hlci5TdGFuZGFyZFZNVHlwZS9KMlNFLTEuNSIvPgorCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJjb24iIHBhdGg9Im9yZy5lY2xpcHNlLnBkZS5jb3JlLnJlcXVpcmVkUGx1Z2lucyIvPgorCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJvdXRwdXQiIHBhdGg9ImJpbiIvPgorPC9jbGFzc3BhdGg+CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uam9icy8ucHJvamVjdCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5qb2JzLy5wcm9qZWN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM0MzlkNzIKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uam9icy8ucHJvamVjdApAQCAtMCwwICsxLDI4IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPHByb2plY3REZXNjcmlwdGlvbj4KKwk8bmFtZT5vcmcuZWNsaXBzZS5zdGVtLmpvYnM8L25hbWU+CisJPGNvbW1lbnQ+PC9jb21tZW50PgorCTxwcm9qZWN0cz4KKwk8L3Byb2plY3RzPgorCTxidWlsZFNwZWM+CisJCTxidWlsZENvbW1hbmQ+CisJCQk8bmFtZT5vcmcuZWNsaXBzZS5qZHQuY29yZS5qYXZhYnVpbGRlcjwvbmFtZT4KKwkJCTxhcmd1bWVudHM+CisJCQk8L2FyZ3VtZW50cz4KKwkJPC9idWlsZENvbW1hbmQ+CisJCTxidWlsZENvbW1hbmQ+CisJCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuTWFuaWZlc3RCdWlsZGVyPC9uYW1lPgorCQkJPGFyZ3VtZW50cz4KKwkJCTwvYXJndW1lbnRzPgorCQk8L2J1aWxkQ29tbWFuZD4KKwkJPGJ1aWxkQ29tbWFuZD4KKwkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5TY2hlbWFCdWlsZGVyPC9uYW1lPgorCQkJPGFyZ3VtZW50cz4KKwkJCTwvYXJndW1lbnRzPgorCQk8L2J1aWxkQ29tbWFuZD4KKwk8L2J1aWxkU3BlYz4KKwk8bmF0dXJlcz4KKwkJPG5hdHVyZT5vcmcuZWNsaXBzZS5wZGUuUGx1Z2luTmF0dXJlPC9uYXR1cmU+CisJCTxuYXR1cmU+b3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YW5hdHVyZTwvbmF0dXJlPgorCTwvbmF0dXJlcz4KKzwvcHJvamVjdERlc2NyaXB0aW9uPgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmpvYnMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLnByZWZzIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmpvYnMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLnByZWZzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhiODY4NzkKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uam9icy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMucHJlZnMKQEAgLTAsMCArMSwzIEBACisjRnJpIE5vdiAxNyAxNzo0NzowMyBFU1QgMjAwNgorZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKK2VuY29kaW5nLy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9qb2JzL3NpbXVsYXRpb24vbWVzc2FnZXMucHJvcGVydGllcz04ODU5XzEKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5qb2JzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5qb2JzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xOTNhNDYwCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmpvYnMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzCkBAIC0wLDAgKzEsNzAgQEAKKyNUdWUgU2VwIDAxIDE2OjU3OjA3IEVEVCAyMDA5CitlY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29kZWdlbi50YXJnZXRQbGF0Zm9ybT0xLjUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvbXBsaWFuY2U9MS41CitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5kb2MuY29tbWVudC5zdXBwb3J0PWRpc2FibGVkCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmFubm90YXRpb25TdXBlckludGVyZmFjZT13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmFzc2VydElkZW50aWZpZXI9ZXJyb3IKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uYXV0b2JveGluZz13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRlcHJlY2F0aW9uPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZGVwcmVjYXRpb25JbkRlcHJlY2F0ZWRDb2RlPWRpc2FibGVkCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRlcHJlY2F0aW9uV2hlbk92ZXJyaWRpbmdEZXByZWNhdGVkTWV0aG9kPWRpc2FibGVkCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRpc2NvdXJhZ2VkUmVmZXJlbmNlPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZW1wdHlTdGF0ZW1lbnQ9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5lbnVtSWRlbnRpZmllcj1lcnJvcgorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5mYWxsdGhyb3VnaENhc2U9aWdub3JlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZpZWxkSGlkaW5nPWlnbm9yZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5maW5hbFBhcmFtZXRlckJvdW5kPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZmluYWxseUJsb2NrTm90Q29tcGxldGluZ05vcm1hbGx5PXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZm9yYmlkZGVuUmVmZXJlbmNlPWVycm9yCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmhpZGRlbkNhdGNoQmxvY2s9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbmNvbXBhdGlibGVOb25Jbmhlcml0ZWRJbnRlcmZhY2VNZXRob2Q9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbmNvbXBsZXRlRW51bVN3aXRjaD1pZ25vcmUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW5kaXJlY3RTdGF0aWNBY2Nlc3M9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbnZhbGlkSmF2YWRvYz13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmludmFsaWRKYXZhZG9jVGFncz1lbmFibGVkCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmludmFsaWRKYXZhZG9jVGFnc0RlcHJlY2F0ZWRSZWY9ZW5hYmxlZAorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbnZhbGlkSmF2YWRvY1RhZ3NOb3RWaXNpYmxlUmVmPWVuYWJsZWQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW52YWxpZEphdmFkb2NUYWdzVmlzaWJpbGl0eT1wdWJsaWMKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubG9jYWxWYXJpYWJsZUhpZGluZz1pZ25vcmUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWV0aG9kV2l0aENvbnN0cnVjdG9yTmFtZT13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdEZXByZWNhdGVkQW5ub3RhdGlvbj13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdKYXZhZG9jQ29tbWVudHM9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nSmF2YWRvY0NvbW1lbnRzT3ZlcnJpZGluZz1lbmFibGVkCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdKYXZhZG9jQ29tbWVudHNWaXNpYmlsaXR5PXB1YmxpYworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nSmF2YWRvY1RhZ0Rlc2NyaXB0aW9uPXJldHVybl90YWcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0phdmFkb2NUYWdzPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0phdmFkb2NUYWdzT3ZlcnJpZGluZz1lbmFibGVkCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdKYXZhZG9jVGFnc1Zpc2liaWxpdHk9cHVibGljCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdPdmVycmlkZUFubm90YXRpb249aWdub3JlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdTZXJpYWxWZXJzaW9uPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubm9FZmZlY3RBc3NpZ25tZW50PXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubm9JbXBsaWNpdFN0cmluZ0NvbnZlcnNpb249d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5ub25FeHRlcm5hbGl6ZWRTdHJpbmdMaXRlcmFsPWlnbm9yZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5udWxsUmVmZXJlbmNlPWlnbm9yZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5vdmVycmlkaW5nUGFja2FnZURlZmF1bHRNZXRob2Q9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5wYXJhbWV0ZXJBc3NpZ25tZW50PWlnbm9yZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5wb3NzaWJsZUFjY2lkZW50YWxCb29sZWFuQXNzaWdubWVudD13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnJhd1R5cGVSZWZlcmVuY2U9aWdub3JlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnNwZWNpYWxQYXJhbWV0ZXJIaWRpbmdGaWVsZD1kaXNhYmxlZAorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5zdGF0aWNBY2Nlc3NSZWNlaXZlcj13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnN1cHByZXNzV2FybmluZ3M9ZW5hYmxlZAorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5zeW50aGV0aWNBY2Nlc3NFbXVsYXRpb249d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS50eXBlUGFyYW1ldGVySGlkaW5nPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5jaGVja2VkVHlwZU9wZXJhdGlvbj13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVuZG9jdW1lbnRlZEVtcHR5QmxvY2s9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bmhhbmRsZWRXYXJuaW5nVG9rZW49d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bm5lY2Vzc2FyeUVsc2U9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bm5lY2Vzc2FyeVR5cGVDaGVjaz13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVucXVhbGlmaWVkRmllbGRBY2Nlc3M9aWdub3JlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZERlY2xhcmVkVGhyb3duRXhjZXB0aW9uPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkRGVjbGFyZWRUaHJvd25FeGNlcHRpb25XaGVuT3ZlcnJpZGluZz1lbmFibGVkCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZEltcG9ydD13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZExhYmVsPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkTG9jYWw9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRQYXJhbWV0ZXI9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRQYXJhbWV0ZXJXaGVuSW1wbGVtZW50aW5nQWJzdHJhY3Q9ZW5hYmxlZAorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRQYXJhbWV0ZXJXaGVuT3ZlcnJpZGluZ0NvbmNyZXRlPWVuYWJsZWQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkUHJpdmF0ZU1lbWJlcj13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnZhcmFyZ3NBcmd1bWVudE5lZWRDYXN0PXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnNvdXJjZT0xLjUKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5qb2JzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQudWkucHJlZnMgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uam9icy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LnVpLnByZWZzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZkNTc4YjMKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uam9icy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LnVpLnByZWZzCkBAIC0wLDAgKzEsNTAgQEAKKyNXZWQgU2VwIDEyIDIyOjE0OjUwIEVEVCAyMDA3CitjbGVhbnVwLmFkZF9kZWZhdWx0X3NlcmlhbF92ZXJzaW9uX2lkPXRydWUKK2NsZWFudXAuYWRkX2dlbmVyYXRlZF9zZXJpYWxfdmVyc2lvbl9pZD1mYWxzZQorY2xlYW51cC5hZGRfbWlzc2luZ19hbm5vdGF0aW9ucz10cnVlCitjbGVhbnVwLmFkZF9taXNzaW5nX2RlcHJlY2F0ZWRfYW5ub3RhdGlvbnM9dHJ1ZQorY2xlYW51cC5hZGRfbWlzc2luZ19ubHNfdGFncz1mYWxzZQorY2xlYW51cC5hZGRfbWlzc2luZ19vdmVycmlkZV9hbm5vdGF0aW9ucz10cnVlCitjbGVhbnVwLmFkZF9zZXJpYWxfdmVyc2lvbl9pZD1mYWxzZQorY2xlYW51cC5hbHdheXNfdXNlX2Jsb2Nrcz10cnVlCitjbGVhbnVwLmFsd2F5c191c2VfcGFyZW50aGVzZXNfaW5fZXhwcmVzc2lvbnM9dHJ1ZQorY2xlYW51cC5hbHdheXNfdXNlX3RoaXNfZm9yX25vbl9zdGF0aWNfZmllbGRfYWNjZXNzPWZhbHNlCitjbGVhbnVwLmFsd2F5c191c2VfdGhpc19mb3Jfbm9uX3N0YXRpY19tZXRob2RfYWNjZXNzPWZhbHNlCitjbGVhbnVwLmNvbnZlcnRfdG9fZW5oYW5jZWRfZm9yX2xvb3A9dHJ1ZQorY2xlYW51cC5mb3JtYXRfc291cmNlX2NvZGU9dHJ1ZQorY2xlYW51cC5tYWtlX2xvY2FsX3ZhcmlhYmxlX2ZpbmFsPXRydWUKK2NsZWFudXAubWFrZV9wYXJhbWV0ZXJzX2ZpbmFsPXRydWUKK2NsZWFudXAubWFrZV9wcml2YXRlX2ZpZWxkc19maW5hbD10cnVlCitjbGVhbnVwLm1ha2VfdmFyaWFibGVfZGVjbGFyYXRpb25zX2ZpbmFsPXRydWUKK2NsZWFudXAubmV2ZXJfdXNlX2Jsb2Nrcz1mYWxzZQorY2xlYW51cC5uZXZlcl91c2VfcGFyZW50aGVzZXNfaW5fZXhwcmVzc2lvbnM9ZmFsc2UKK2NsZWFudXAub3JnYW5pemVfaW1wb3J0cz10cnVlCitjbGVhbnVwLnF1YWxpZnlfc3RhdGljX2ZpZWxkX2FjY2Vzc2VzX3dpdGhfZGVjbGFyaW5nX2NsYXNzPWZhbHNlCitjbGVhbnVwLnF1YWxpZnlfc3RhdGljX21lbWJlcl9hY2Nlc3Nlc190aHJvdWdoX2luc3RhbmNlc193aXRoX2RlY2xhcmluZ19jbGFzcz10cnVlCitjbGVhbnVwLnF1YWxpZnlfc3RhdGljX21lbWJlcl9hY2Nlc3Nlc190aHJvdWdoX3N1YnR5cGVzX3dpdGhfZGVjbGFyaW5nX2NsYXNzPXRydWUKK2NsZWFudXAucXVhbGlmeV9zdGF0aWNfbWVtYmVyX2FjY2Vzc2VzX3dpdGhfZGVjbGFyaW5nX2NsYXNzPXRydWUKK2NsZWFudXAucXVhbGlmeV9zdGF0aWNfbWV0aG9kX2FjY2Vzc2VzX3dpdGhfZGVjbGFyaW5nX2NsYXNzPWZhbHNlCitjbGVhbnVwLnJlbW92ZV9wcml2YXRlX2NvbnN0cnVjdG9ycz10cnVlCitjbGVhbnVwLnJlbW92ZV90cmFpbGluZ193aGl0ZXNwYWNlcz10cnVlCitjbGVhbnVwLnJlbW92ZV90cmFpbGluZ193aGl0ZXNwYWNlc19hbGw9dHJ1ZQorY2xlYW51cC5yZW1vdmVfdHJhaWxpbmdfd2hpdGVzcGFjZXNfaWdub3JlX2VtcHR5PWZhbHNlCitjbGVhbnVwLnJlbW92ZV91bm5lY2Vzc2FyeV9jYXN0cz10cnVlCitjbGVhbnVwLnJlbW92ZV91bm5lY2Vzc2FyeV9ubHNfdGFncz10cnVlCitjbGVhbnVwLnJlbW92ZV91bnVzZWRfaW1wb3J0cz10cnVlCitjbGVhbnVwLnJlbW92ZV91bnVzZWRfbG9jYWxfdmFyaWFibGVzPXRydWUKK2NsZWFudXAucmVtb3ZlX3VudXNlZF9wcml2YXRlX2ZpZWxkcz10cnVlCitjbGVhbnVwLnJlbW92ZV91bnVzZWRfcHJpdmF0ZV9tZW1iZXJzPXRydWUKK2NsZWFudXAucmVtb3ZlX3VudXNlZF9wcml2YXRlX21ldGhvZHM9dHJ1ZQorY2xlYW51cC5yZW1vdmVfdW51c2VkX3ByaXZhdGVfdHlwZXM9dHJ1ZQorY2xlYW51cC5zb3J0X21lbWJlcnM9ZmFsc2UKK2NsZWFudXAuc29ydF9tZW1iZXJzX2FsbD1mYWxzZQorY2xlYW51cC51c2VfYmxvY2tzPXRydWUKK2NsZWFudXAudXNlX2Jsb2Nrc19vbmx5X2Zvcl9yZXR1cm5fYW5kX3Rocm93PWZhbHNlCitjbGVhbnVwLnVzZV9wYXJlbnRoZXNlc19pbl9leHByZXNzaW9ucz1mYWxzZQorY2xlYW51cC51c2VfdGhpc19mb3Jfbm9uX3N0YXRpY19maWVsZF9hY2Nlc3M9ZmFsc2UKK2NsZWFudXAudXNlX3RoaXNfZm9yX25vbl9zdGF0aWNfZmllbGRfYWNjZXNzX29ubHlfaWZfbmVjZXNzYXJ5PXRydWUKK2NsZWFudXAudXNlX3RoaXNfZm9yX25vbl9zdGF0aWNfbWV0aG9kX2FjY2Vzcz1mYWxzZQorY2xlYW51cC51c2VfdGhpc19mb3Jfbm9uX3N0YXRpY19tZXRob2RfYWNjZXNzX29ubHlfaWZfbmVjZXNzYXJ5PXRydWUKK2NsZWFudXBfcHJvZmlsZT1fY2xlYW51cAorY2xlYW51cF9zZXR0aW5nc192ZXJzaW9uPTIKK2VjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uam9icy9NRVRBLUlORi9NQU5JRkVTVC5NRiBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5qb2JzL01FVEEtSU5GL01BTklGRVNULk1GCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc0MzVkMDMKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uam9icy9NRVRBLUlORi9NQU5JRkVTVC5NRgpAQCAtMCwwICsxLDIxIEBACitNYW5pZmVzdC1WZXJzaW9uOiAxLjAKK0J1bmRsZS1NYW5pZmVzdFZlcnNpb246IDIKK0J1bmRsZS1OYW1lOiAlcGx1Z2luTmFtZQorQnVuZGxlLVN5bWJvbGljTmFtZTogb3JnLmVjbGlwc2Uuc3RlbS5qb2JzO3NpbmdsZXRvbjo9dHJ1ZQorQnVuZGxlLVZlcnNpb246IDEuMi4xCitCdW5kbGUtQWN0aXZhdG9yOiBvcmcuZWNsaXBzZS5zdGVtLmpvYnMuQWN0aXZhdG9yCitCdW5kbGUtVmVuZG9yOiAlcHJvdmlkZXJOYW1lCitCdW5kbGUtTG9jYWxpemF0aW9uOiBwbHVnaW4KK1JlcXVpcmUtQnVuZGxlOiBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWU7dmlzaWJpbGl0eTo9cmVleHBvcnQsCisgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlO3Zpc2liaWxpdHk6PXJlZXhwb3J0LAorIG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzCitCdW5kbGUtQWN0aXZhdGlvblBvbGljeTogbGF6eQorRXhwb3J0LVBhY2thZ2U6IG9yZy5lY2xpcHNlLnN0ZW0uam9icywKKyBvcmcuZWNsaXBzZS5zdGVtLmpvYnMuYWRhcHRlcnMuZXhlY3V0YWJsZSwKKyBvcmcuZWNsaXBzZS5zdGVtLmpvYnMuYWRhcHRlcnMuZXhlY3V0YWJsZS5lbWYsCisgb3JnLmVjbGlwc2Uuc3RlbS5qb2JzLmFkYXB0ZXJzLmlkZW50aWZpYWJsZSwKKyBvcmcuZWNsaXBzZS5zdGVtLmpvYnMuYmF0Y2gsCisgb3JnLmVjbGlwc2Uuc3RlbS5qb2JzLmV4ZWN1dGlvbiwKKyBvcmcuZWNsaXBzZS5zdGVtLmpvYnMucHJlZmVyZW5jZXMsCisgb3JnLmVjbGlwc2Uuc3RlbS5qb2JzLnNpbXVsYXRpb24KK0J1bmRsZS1SZXF1aXJlZEV4ZWN1dGlvbkVudmlyb25tZW50OiBKMlNFLTEuNQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmpvYnMvYnVpbGQucHJvcGVydGllcyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5qb2JzL2J1aWxkLnByb3BlcnRpZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODZjYmNiMQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5qb2JzL2J1aWxkLnByb3BlcnRpZXMKQEAgLTAsMCArMSwxMiBAQAorc291cmNlLi4gPSBzcmMvCitvdXRwdXQuLiA9IGJpbi8KK2Jpbi5pbmNsdWRlcyA9IE1FVEEtSU5GLyxcCisgICAgICAgICAgICAgICAuLFwKKyAgICAgICAgICAgICAgIHBsdWdpbi54bWwsXAorICAgICAgICAgICAgICAgYmluLyxcCisgICAgICAgICAgICAgICBwbHVnaW4ucHJvcGVydGllcyxcCisgICAgICAgICAgICAgICBub3RpY2UuaHRtbCxcCisgICAgICAgICAgICAgICBlcGwtdjEwLmh0bWwsXAorICAgICAgICAgICAgICAgcGx1Z2luX3poLnByb3BlcnRpZXMsXAorICAgICAgICAgICAgICAgcGx1Z2luX2tyLnByb3BlcnRpZXMsXAorICAgICAgICAgICAgICAgcGx1Z2luX2RlLnByb3BlcnRpZXMKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5qb2JzL2VwbC12MTAuaHRtbCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5qb2JzL2VwbC12MTAuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZDRiMTk2Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmpvYnMvZXBsLXYxMC5odG1sCkBAIC0wLDAgKzEsMzI4IEBACis8aHRtbCB4bWxuczpvPSJ1cm46c2NoZW1hcy1taWNyb3NvZnQtY29tOm9mZmljZTpvZmZpY2UiCit4bWxuczp3PSJ1cm46c2NoZW1hcy1taWNyb3NvZnQtY29tOm9mZmljZTp3b3JkIgoreG1sbnM9Imh0dHA6Ly93d3cudzMub3JnL1RSL1JFQy1odG1sNDAiPgorCis8aGVhZD4KKzxtZXRhIGh0dHAtZXF1aXY9Q29udGVudC1UeXBlIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD13aW5kb3dzLTEyNTIiPgorPG1ldGEgbmFtZT1Qcm9nSWQgY29udGVudD1Xb3JkLkRvY3VtZW50PgorPG1ldGEgbmFtZT1HZW5lcmF0b3IgY29udGVudD0iTWljcm9zb2Z0IFdvcmQgOSI+Cis8bWV0YSBuYW1lPU9yaWdpbmF0b3IgY29udGVudD0iTWljcm9zb2Z0IFdvcmQgOSI+Cis8bGluayByZWw9RmlsZS1MaXN0CitocmVmPSIuL0VjbGlwc2UlMjBFUEwlMjAyMDAzXzExXzEwJTIwRmluYWxfZmlsZXMvZmlsZWxpc3QueG1sIj4KKzx0aXRsZT5FY2xpcHNlIFB1YmxpYyBMaWNlbnNlIC0gVmVyc2lvbiAxLjA8L3RpdGxlPgorPCEtLVtpZiBndGUgbXNvIDldPjx4bWw+CisgPG86RG9jdW1lbnRQcm9wZXJ0aWVzPgorICA8bzpSZXZpc2lvbj4yPC9vOlJldmlzaW9uPgorICA8bzpUb3RhbFRpbWU+MzwvbzpUb3RhbFRpbWU+CisgIDxvOkNyZWF0ZWQ+MjAwNC0wMy0wNVQyMzowMzowMFo8L286Q3JlYXRlZD4KKyAgPG86TGFzdFNhdmVkPjIwMDQtMDMtMDVUMjM6MDM6MDBaPC9vOkxhc3RTYXZlZD4KKyAgPG86UGFnZXM+NDwvbzpQYWdlcz4KKyAgPG86V29yZHM+MTYyNjwvbzpXb3Jkcz4KKyAgPG86Q2hhcmFjdGVycz45MjcwPC9vOkNoYXJhY3RlcnM+CisgICA8bzpMaW5lcz43NzwvbzpMaW5lcz4KKyAgPG86UGFyYWdyYXBocz4xODwvbzpQYXJhZ3JhcGhzPgorICA8bzpDaGFyYWN0ZXJzV2l0aFNwYWNlcz4xMTM4NDwvbzpDaGFyYWN0ZXJzV2l0aFNwYWNlcz4KKyAgPG86VmVyc2lvbj45LjQ0MDI8L286VmVyc2lvbj4KKyA8L286RG9jdW1lbnRQcm9wZXJ0aWVzPgorPC94bWw+PCFbZW5kaWZdLS0+PCEtLVtpZiBndGUgbXNvIDldPjx4bWw+CisgPHc6V29yZERvY3VtZW50PgorICA8dzpUcmFja1JldmlzaW9ucy8+CisgPC93OldvcmREb2N1bWVudD4KKzwveG1sPjwhW2VuZGlmXS0tPgorPHN0eWxlPgorPCEtLQorIC8qIEZvbnQgRGVmaW5pdGlvbnMgKi8KK0Bmb250LWZhY2UKKwl7Zm9udC1mYW1pbHk6VGFob21hOworCXBhbm9zZS0xOjIgMTEgNiA0IDMgNSA0IDQgMiA0OworCW1zby1mb250LWNoYXJzZXQ6MDsKKwltc28tZ2VuZXJpYy1mb250LWZhbWlseTpzd2lzczsKKwltc28tZm9udC1waXRjaDp2YXJpYWJsZTsKKwltc28tZm9udC1zaWduYXR1cmU6NTUzNjc5NDk1IC0yMTQ3NDgzNjQ4IDggMCA2NjA0NyAwO30KKyAvKiBTdHlsZSBEZWZpbml0aW9ucyAqLworcC5Nc29Ob3JtYWwsIGxpLk1zb05vcm1hbCwgZGl2Lk1zb05vcm1hbAorCXttc28tc3R5bGUtcGFyZW50OiIiOworCW1hcmdpbjowaW47CisJbWFyZ2luLWJvdHRvbTouMDAwMXB0OworCW1zby1wYWdpbmF0aW9uOndpZG93LW9ycGhhbjsKKwlmb250LXNpemU6MTIuMHB0OworCWZvbnQtZmFtaWx5OiJUaW1lcyBOZXcgUm9tYW4iOworCW1zby1mYXJlYXN0LWZvbnQtZmFtaWx5OiJUaW1lcyBOZXcgUm9tYW4iO30KK3AKKwl7bWFyZ2luLXJpZ2h0OjBpbjsKKwltc28tbWFyZ2luLXRvcC1hbHQ6YXV0bzsKKwltc28tbWFyZ2luLWJvdHRvbS1hbHQ6YXV0bzsKKwltYXJnaW4tbGVmdDowaW47CisJbXNvLXBhZ2luYXRpb246d2lkb3ctb3JwaGFuOworCWZvbnQtc2l6ZToxMi4wcHQ7CisJZm9udC1mYW1pbHk6IlRpbWVzIE5ldyBSb21hbiI7CisJbXNvLWZhcmVhc3QtZm9udC1mYW1pbHk6IlRpbWVzIE5ldyBSb21hbiI7fQorcC5CYWxsb29uVGV4dCwgbGkuQmFsbG9vblRleHQsIGRpdi5CYWxsb29uVGV4dAorCXttc28tc3R5bGUtbmFtZToiQmFsbG9vbiBUZXh0IjsKKwltYXJnaW46MGluOworCW1hcmdpbi1ib3R0b206LjAwMDFwdDsKKwltc28tcGFnaW5hdGlvbjp3aWRvdy1vcnBoYW47CisJZm9udC1zaXplOjguMHB0OworCWZvbnQtZmFtaWx5OlRhaG9tYTsKKwltc28tZmFyZWFzdC1mb250LWZhbWlseToiVGltZXMgTmV3IFJvbWFuIjt9CitAcGFnZSBTZWN0aW9uMQorCXtzaXplOjguNWluIDExLjBpbjsKKwltYXJnaW46MS4waW4gMS4yNWluIDEuMGluIDEuMjVpbjsKKwltc28taGVhZGVyLW1hcmdpbjouNWluOworCW1zby1mb290ZXItbWFyZ2luOi41aW47CisJbXNvLXBhcGVyLXNvdXJjZTowO30KK2Rpdi5TZWN0aW9uMQorCXtwYWdlOlNlY3Rpb24xO30KKy0tPgorPC9zdHlsZT4KKzwvaGVhZD4KKworPGJvZHkgbGFuZz1FTi1VUyBzdHlsZT0ndGFiLWludGVydmFsOi41aW4nPgorCis8ZGl2IGNsYXNzPVNlY3Rpb24xPgorCis8cCBhbGlnbj1jZW50ZXIgc3R5bGU9J3RleHQtYWxpZ246Y2VudGVyJz48Yj5FY2xpcHNlIFB1YmxpYyBMaWNlbnNlIC0gdiAxLjA8L2I+Cis8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5USEUgQUNDT01QQU5ZSU5HIFBST0dSQU0gSVMgUFJPVklERUQgVU5ERVIKK1RIRSBURVJNUyBPRiBUSElTIEVDTElQU0UgUFVCTElDIExJQ0VOU0UgKCZxdW90O0FHUkVFTUVOVCZxdW90OykuIEFOWSBVU0UsCitSRVBST0RVQ1RJT04gT1IgRElTVFJJQlVUSU9OIE9GIFRIRSBQUk9HUkFNIENPTlNUSVRVVEVTIFJFQ0lQSUVOVCdTIEFDQ0VQVEFOQ0UKK09GIFRISVMgQUdSRUVNRU5ULjwvc3Bhbj4gPC9wPgorCis8cD48Yj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+MS4gREVGSU5JVElPTlM8L3NwYW4+PC9iPiA8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4mcXVvdDtDb250cmlidXRpb24mcXVvdDsgbWVhbnM6PC9zcGFuPiA8L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmEpCitpbiB0aGUgY2FzZSBvZiB0aGUgaW5pdGlhbCBDb250cmlidXRvciwgdGhlIGluaXRpYWwgY29kZSBhbmQgZG9jdW1lbnRhdGlvbgorZGlzdHJpYnV0ZWQgdW5kZXIgdGhpcyBBZ3JlZW1lbnQsIGFuZDxiciBjbGVhcj1sZWZ0PgorYikgaW4gdGhlIGNhc2Ugb2YgZWFjaCBzdWJzZXF1ZW50IENvbnRyaWJ1dG9yOjwvc3Bhbj48L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmkpCitjaGFuZ2VzIHRvIHRoZSBQcm9ncmFtLCBhbmQ8L3NwYW4+PC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5paSkKK2FkZGl0aW9ucyB0byB0aGUgUHJvZ3JhbTs8L3NwYW4+PC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz53aGVyZQorc3VjaCBjaGFuZ2VzIGFuZC9vciBhZGRpdGlvbnMgdG8gdGhlIFByb2dyYW0gb3JpZ2luYXRlIGZyb20gYW5kIGFyZSBkaXN0cmlidXRlZAorYnkgdGhhdCBwYXJ0aWN1bGFyIENvbnRyaWJ1dG9yLiBBIENvbnRyaWJ1dGlvbiAnb3JpZ2luYXRlcycgZnJvbSBhIENvbnRyaWJ1dG9yCitpZiBpdCB3YXMgYWRkZWQgdG8gdGhlIFByb2dyYW0gYnkgc3VjaCBDb250cmlidXRvciBpdHNlbGYgb3IgYW55b25lIGFjdGluZyBvbgorc3VjaCBDb250cmlidXRvcidzIGJlaGFsZi4gQ29udHJpYnV0aW9ucyBkbyBub3QgaW5jbHVkZSBhZGRpdGlvbnMgdG8gdGhlCitQcm9ncmFtIHdoaWNoOiAoaSkgYXJlIHNlcGFyYXRlIG1vZHVsZXMgb2Ygc29mdHdhcmUgZGlzdHJpYnV0ZWQgaW4gY29uanVuY3Rpb24KK3dpdGggdGhlIFByb2dyYW0gdW5kZXIgdGhlaXIgb3duIGxpY2Vuc2UgYWdyZWVtZW50LCBhbmQgKGlpKSBhcmUgbm90IGRlcml2YXRpdmUKK3dvcmtzIG9mIHRoZSBQcm9ncmFtLiA8L3NwYW4+PC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+JnF1b3Q7Q29udHJpYnV0b3ImcXVvdDsgbWVhbnMgYW55IHBlcnNvbiBvcgorZW50aXR5IHRoYXQgZGlzdHJpYnV0ZXMgdGhlIFByb2dyYW0uPC9zcGFuPiA8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4mcXVvdDtMaWNlbnNlZCBQYXRlbnRzICZxdW90OyBtZWFuIHBhdGVudAorY2xhaW1zIGxpY2Vuc2FibGUgYnkgYSBDb250cmlidXRvciB3aGljaCBhcmUgbmVjZXNzYXJpbHkgaW5mcmluZ2VkIGJ5IHRoZSB1c2UKK29yIHNhbGUgb2YgaXRzIENvbnRyaWJ1dGlvbiBhbG9uZSBvciB3aGVuIGNvbWJpbmVkIHdpdGggdGhlIFByb2dyYW0uIDwvc3Bhbj48L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4mcXVvdDtQcm9ncmFtJnF1b3Q7IG1lYW5zIHRoZSBDb250cmlidXRpb25zCitkaXN0cmlidXRlZCBpbiBhY2NvcmRhbmNlIHdpdGggdGhpcyBBZ3JlZW1lbnQuPC9zcGFuPiA8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4mcXVvdDtSZWNpcGllbnQmcXVvdDsgbWVhbnMgYW55b25lIHdobworcmVjZWl2ZXMgdGhlIFByb2dyYW0gdW5kZXIgdGhpcyBBZ3JlZW1lbnQsIGluY2x1ZGluZyBhbGwgQ29udHJpYnV0b3JzLjwvc3Bhbj4gPC9wPgorCis8cD48Yj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+Mi4gR1JBTlQgT0YgUklHSFRTPC9zcGFuPjwvYj4gPC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5hKQorU3ViamVjdCB0byB0aGUgdGVybXMgb2YgdGhpcyBBZ3JlZW1lbnQsIGVhY2ggQ29udHJpYnV0b3IgaGVyZWJ5IGdyYW50cyBSZWNpcGllbnQKK2Egbm9uLWV4Y2x1c2l2ZSwgd29ybGR3aWRlLCByb3lhbHR5LWZyZWUgY29weXJpZ2h0IGxpY2Vuc2UgdG88c3Bhbgorc3R5bGU9J2NvbG9yOnJlZCc+IDwvc3Bhbj5yZXByb2R1Y2UsIHByZXBhcmUgZGVyaXZhdGl2ZSB3b3JrcyBvZiwgcHVibGljbHkKK2Rpc3BsYXksIHB1YmxpY2x5IHBlcmZvcm0sIGRpc3RyaWJ1dGUgYW5kIHN1YmxpY2Vuc2UgdGhlIENvbnRyaWJ1dGlvbiBvZiBzdWNoCitDb250cmlidXRvciwgaWYgYW55LCBhbmQgc3VjaCBkZXJpdmF0aXZlIHdvcmtzLCBpbiBzb3VyY2UgY29kZSBhbmQgb2JqZWN0IGNvZGUKK2Zvcm0uPC9zcGFuPjwvcD4KKworPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YikKK1N1YmplY3QgdG8gdGhlIHRlcm1zIG9mIHRoaXMgQWdyZWVtZW50LCBlYWNoIENvbnRyaWJ1dG9yIGhlcmVieSBncmFudHMKK1JlY2lwaWVudCBhIG5vbi1leGNsdXNpdmUsIHdvcmxkd2lkZSw8c3BhbiBzdHlsZT0nY29sb3I6Z3JlZW4nPiA8L3NwYW4+cm95YWx0eS1mcmVlCitwYXRlbnQgbGljZW5zZSB1bmRlciBMaWNlbnNlZCBQYXRlbnRzIHRvIG1ha2UsIHVzZSwgc2VsbCwgb2ZmZXIgdG8gc2VsbCwgaW1wb3J0CithbmQgb3RoZXJ3aXNlIHRyYW5zZmVyIHRoZSBDb250cmlidXRpb24gb2Ygc3VjaCBDb250cmlidXRvciwgaWYgYW55LCBpbiBzb3VyY2UKK2NvZGUgYW5kIG9iamVjdCBjb2RlIGZvcm0uIFRoaXMgcGF0ZW50IGxpY2Vuc2Ugc2hhbGwgYXBwbHkgdG8gdGhlIGNvbWJpbmF0aW9uCitvZiB0aGUgQ29udHJpYnV0aW9uIGFuZCB0aGUgUHJvZ3JhbSBpZiwgYXQgdGhlIHRpbWUgdGhlIENvbnRyaWJ1dGlvbiBpcyBhZGRlZAorYnkgdGhlIENvbnRyaWJ1dG9yLCBzdWNoIGFkZGl0aW9uIG9mIHRoZSBDb250cmlidXRpb24gY2F1c2VzIHN1Y2ggY29tYmluYXRpb24KK3RvIGJlIGNvdmVyZWQgYnkgdGhlIExpY2Vuc2VkIFBhdGVudHMuIFRoZSBwYXRlbnQgbGljZW5zZSBzaGFsbCBub3QgYXBwbHkgdG8KK2FueSBvdGhlciBjb21iaW5hdGlvbnMgd2hpY2ggaW5jbHVkZSB0aGUgQ29udHJpYnV0aW9uLiBObyBoYXJkd2FyZSBwZXIgc2UgaXMKK2xpY2Vuc2VkIGhlcmV1bmRlci4gPC9zcGFuPjwvcD4KKworPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YykKK1JlY2lwaWVudCB1bmRlcnN0YW5kcyB0aGF0IGFsdGhvdWdoIGVhY2ggQ29udHJpYnV0b3IgZ3JhbnRzIHRoZSBsaWNlbnNlcyB0byBpdHMKK0NvbnRyaWJ1dGlvbnMgc2V0IGZvcnRoIGhlcmVpbiwgbm8gYXNzdXJhbmNlcyBhcmUgcHJvdmlkZWQgYnkgYW55IENvbnRyaWJ1dG9yCit0aGF0IHRoZSBQcm9ncmFtIGRvZXMgbm90IGluZnJpbmdlIHRoZSBwYXRlbnQgb3Igb3RoZXIgaW50ZWxsZWN0dWFsIHByb3BlcnR5CityaWdodHMgb2YgYW55IG90aGVyIGVudGl0eS4gRWFjaCBDb250cmlidXRvciBkaXNjbGFpbXMgYW55IGxpYWJpbGl0eSB0byBSZWNpcGllbnQKK2ZvciBjbGFpbXMgYnJvdWdodCBieSBhbnkgb3RoZXIgZW50aXR5IGJhc2VkIG9uIGluZnJpbmdlbWVudCBvZiBpbnRlbGxlY3R1YWwKK3Byb3BlcnR5IHJpZ2h0cyBvciBvdGhlcndpc2UuIEFzIGEgY29uZGl0aW9uIHRvIGV4ZXJjaXNpbmcgdGhlIHJpZ2h0cyBhbmQKK2xpY2Vuc2VzIGdyYW50ZWQgaGVyZXVuZGVyLCBlYWNoIFJlY2lwaWVudCBoZXJlYnkgYXNzdW1lcyBzb2xlIHJlc3BvbnNpYmlsaXR5Cit0byBzZWN1cmUgYW55IG90aGVyIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgbmVlZGVkLCBpZiBhbnkuIEZvciBleGFtcGxlLAoraWYgYSB0aGlyZCBwYXJ0eSBwYXRlbnQgbGljZW5zZSBpcyByZXF1aXJlZCB0byBhbGxvdyBSZWNpcGllbnQgdG8gZGlzdHJpYnV0ZQordGhlIFByb2dyYW0sIGl0IGlzIFJlY2lwaWVudCdzIHJlc3BvbnNpYmlsaXR5IHRvIGFjcXVpcmUgdGhhdCBsaWNlbnNlIGJlZm9yZQorZGlzdHJpYnV0aW5nIHRoZSBQcm9ncmFtLjwvc3Bhbj48L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmQpCitFYWNoIENvbnRyaWJ1dG9yIHJlcHJlc2VudHMgdGhhdCB0byBpdHMga25vd2xlZGdlIGl0IGhhcyBzdWZmaWNpZW50IGNvcHlyaWdodAorcmlnaHRzIGluIGl0cyBDb250cmlidXRpb24sIGlmIGFueSwgdG8gZ3JhbnQgdGhlIGNvcHlyaWdodCBsaWNlbnNlIHNldCBmb3J0aCBpbgordGhpcyBBZ3JlZW1lbnQuIDwvc3Bhbj48L3A+CisKKzxwPjxiPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4zLiBSRVFVSVJFTUVOVFM8L3NwYW4+PC9iPiA8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5BIENvbnRyaWJ1dG9yIG1heSBjaG9vc2UgdG8gZGlzdHJpYnV0ZSB0aGUKK1Byb2dyYW0gaW4gb2JqZWN0IGNvZGUgZm9ybSB1bmRlciBpdHMgb3duIGxpY2Vuc2UgYWdyZWVtZW50LCBwcm92aWRlZCB0aGF0Ojwvc3Bhbj4KKzwvcD4KKworPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YSkKK2l0IGNvbXBsaWVzIHdpdGggdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoaXMgQWdyZWVtZW50OyBhbmQ8L3NwYW4+PC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5iKQoraXRzIGxpY2Vuc2UgYWdyZWVtZW50Ojwvc3Bhbj48L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmkpCitlZmZlY3RpdmVseSBkaXNjbGFpbXMgb24gYmVoYWxmIG9mIGFsbCBDb250cmlidXRvcnMgYWxsIHdhcnJhbnRpZXMgYW5kCitjb25kaXRpb25zLCBleHByZXNzIGFuZCBpbXBsaWVkLCBpbmNsdWRpbmcgd2FycmFudGllcyBvciBjb25kaXRpb25zIG9mIHRpdGxlCithbmQgbm9uLWluZnJpbmdlbWVudCwgYW5kIGltcGxpZWQgd2FycmFudGllcyBvciBjb25kaXRpb25zIG9mIG1lcmNoYW50YWJpbGl0eQorYW5kIGZpdG5lc3MgZm9yIGEgcGFydGljdWxhciBwdXJwb3NlOyA8L3NwYW4+PC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5paSkKK2VmZmVjdGl2ZWx5IGV4Y2x1ZGVzIG9uIGJlaGFsZiBvZiBhbGwgQ29udHJpYnV0b3JzIGFsbCBsaWFiaWxpdHkgZm9yIGRhbWFnZXMsCitpbmNsdWRpbmcgZGlyZWN0LCBpbmRpcmVjdCwgc3BlY2lhbCwgaW5jaWRlbnRhbCBhbmQgY29uc2VxdWVudGlhbCBkYW1hZ2VzLCBzdWNoCithcyBsb3N0IHByb2ZpdHM7IDwvc3Bhbj48L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmlpaSkKK3N0YXRlcyB0aGF0IGFueSBwcm92aXNpb25zIHdoaWNoIGRpZmZlciBmcm9tIHRoaXMgQWdyZWVtZW50IGFyZSBvZmZlcmVkIGJ5IHRoYXQKK0NvbnRyaWJ1dG9yIGFsb25lIGFuZCBub3QgYnkgYW55IG90aGVyIHBhcnR5OyBhbmQ8L3NwYW4+PC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5pdikKK3N0YXRlcyB0aGF0IHNvdXJjZSBjb2RlIGZvciB0aGUgUHJvZ3JhbSBpcyBhdmFpbGFibGUgZnJvbSBzdWNoIENvbnRyaWJ1dG9yLCBhbmQKK2luZm9ybXMgbGljZW5zZWVzIGhvdyB0byBvYnRhaW4gaXQgaW4gYSByZWFzb25hYmxlIG1hbm5lciBvbiBvciB0aHJvdWdoIGEKK21lZGl1bSBjdXN0b21hcmlseSB1c2VkIGZvciBzb2Z0d2FyZSBleGNoYW5nZS48c3BhbiBzdHlsZT0nY29sb3I6Ymx1ZSc+IDwvc3Bhbj48L3NwYW4+PC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+V2hlbiB0aGUgUHJvZ3JhbSBpcyBtYWRlIGF2YWlsYWJsZSBpbiBzb3VyY2UKK2NvZGUgZm9ybTo8L3NwYW4+IDwvcD4KKworPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YSkKK2l0IG11c3QgYmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhpcyBBZ3JlZW1lbnQ7IGFuZCA8L3NwYW4+PC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5iKSBhCitjb3B5IG9mIHRoaXMgQWdyZWVtZW50IG11c3QgYmUgaW5jbHVkZWQgd2l0aCBlYWNoIGNvcHkgb2YgdGhlIFByb2dyYW0uIDwvc3Bhbj48L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5Db250cmlidXRvcnMgbWF5IG5vdCByZW1vdmUgb3IgYWx0ZXIgYW55Citjb3B5cmlnaHQgbm90aWNlcyBjb250YWluZWQgd2l0aGluIHRoZSBQcm9ncmFtLiA8L3NwYW4+PC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+RWFjaCBDb250cmlidXRvciBtdXN0IGlkZW50aWZ5IGl0c2VsZiBhcyB0aGUKK29yaWdpbmF0b3Igb2YgaXRzIENvbnRyaWJ1dGlvbiwgaWYgYW55LCBpbiBhIG1hbm5lciB0aGF0IHJlYXNvbmFibHkgYWxsb3dzCitzdWJzZXF1ZW50IFJlY2lwaWVudHMgdG8gaWRlbnRpZnkgdGhlIG9yaWdpbmF0b3Igb2YgdGhlIENvbnRyaWJ1dGlvbi4gPC9zcGFuPjwvcD4KKworPHA+PGI+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPjQuIENPTU1FUkNJQUwgRElTVFJJQlVUSU9OPC9zcGFuPjwvYj4gPC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+Q29tbWVyY2lhbCBkaXN0cmlidXRvcnMgb2Ygc29mdHdhcmUgbWF5CithY2NlcHQgY2VydGFpbiByZXNwb25zaWJpbGl0aWVzIHdpdGggcmVzcGVjdCB0byBlbmQgdXNlcnMsIGJ1c2luZXNzIHBhcnRuZXJzCithbmQgdGhlIGxpa2UuIFdoaWxlIHRoaXMgbGljZW5zZSBpcyBpbnRlbmRlZCB0byBmYWNpbGl0YXRlIHRoZSBjb21tZXJjaWFsIHVzZQorb2YgdGhlIFByb2dyYW0sIHRoZSBDb250cmlidXRvciB3aG8gaW5jbHVkZXMgdGhlIFByb2dyYW0gaW4gYSBjb21tZXJjaWFsCitwcm9kdWN0IG9mZmVyaW5nIHNob3VsZCBkbyBzbyBpbiBhIG1hbm5lciB3aGljaCBkb2VzIG5vdCBjcmVhdGUgcG90ZW50aWFsCitsaWFiaWxpdHkgZm9yIG90aGVyIENvbnRyaWJ1dG9ycy4gVGhlcmVmb3JlLCBpZiBhIENvbnRyaWJ1dG9yIGluY2x1ZGVzIHRoZQorUHJvZ3JhbSBpbiBhIGNvbW1lcmNpYWwgcHJvZHVjdCBvZmZlcmluZywgc3VjaCBDb250cmlidXRvciAoJnF1b3Q7Q29tbWVyY2lhbAorQ29udHJpYnV0b3ImcXVvdDspIGhlcmVieSBhZ3JlZXMgdG8gZGVmZW5kIGFuZCBpbmRlbW5pZnkgZXZlcnkgb3RoZXIKK0NvbnRyaWJ1dG9yICgmcXVvdDtJbmRlbW5pZmllZCBDb250cmlidXRvciZxdW90OykgYWdhaW5zdCBhbnkgbG9zc2VzLCBkYW1hZ2VzIGFuZAorY29zdHMgKGNvbGxlY3RpdmVseSAmcXVvdDtMb3NzZXMmcXVvdDspIGFyaXNpbmcgZnJvbSBjbGFpbXMsIGxhd3N1aXRzIGFuZCBvdGhlcgorbGVnYWwgYWN0aW9ucyBicm91Z2h0IGJ5IGEgdGhpcmQgcGFydHkgYWdhaW5zdCB0aGUgSW5kZW1uaWZpZWQgQ29udHJpYnV0b3IgdG8KK3RoZSBleHRlbnQgY2F1c2VkIGJ5IHRoZSBhY3RzIG9yIG9taXNzaW9ucyBvZiBzdWNoIENvbW1lcmNpYWwgQ29udHJpYnV0b3IgaW4KK2Nvbm5lY3Rpb24gd2l0aCBpdHMgZGlzdHJpYnV0aW9uIG9mIHRoZSBQcm9ncmFtIGluIGEgY29tbWVyY2lhbCBwcm9kdWN0CitvZmZlcmluZy4gVGhlIG9ibGlnYXRpb25zIGluIHRoaXMgc2VjdGlvbiBkbyBub3QgYXBwbHkgdG8gYW55IGNsYWltcyBvciBMb3NzZXMKK3JlbGF0aW5nIHRvIGFueSBhY3R1YWwgb3IgYWxsZWdlZCBpbnRlbGxlY3R1YWwgcHJvcGVydHkgaW5mcmluZ2VtZW50LiBJbiBvcmRlcgordG8gcXVhbGlmeSwgYW4gSW5kZW1uaWZpZWQgQ29udHJpYnV0b3IgbXVzdDogYSkgcHJvbXB0bHkgbm90aWZ5IHRoZSBDb21tZXJjaWFsCitDb250cmlidXRvciBpbiB3cml0aW5nIG9mIHN1Y2ggY2xhaW0sIGFuZCBiKSBhbGxvdyB0aGUgQ29tbWVyY2lhbCBDb250cmlidXRvcgordG8gY29udHJvbCwgYW5kIGNvb3BlcmF0ZSB3aXRoIHRoZSBDb21tZXJjaWFsIENvbnRyaWJ1dG9yIGluLCB0aGUgZGVmZW5zZSBhbmQKK2FueSByZWxhdGVkIHNldHRsZW1lbnQgbmVnb3RpYXRpb25zLiBUaGUgSW5kZW1uaWZpZWQgQ29udHJpYnV0b3IgbWF5IHBhcnRpY2lwYXRlCitpbiBhbnkgc3VjaCBjbGFpbSBhdCBpdHMgb3duIGV4cGVuc2UuPC9zcGFuPiA8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5Gb3IgZXhhbXBsZSwgYSBDb250cmlidXRvciBtaWdodCBpbmNsdWRlIHRoZQorUHJvZ3JhbSBpbiBhIGNvbW1lcmNpYWwgcHJvZHVjdCBvZmZlcmluZywgUHJvZHVjdCBYLiBUaGF0IENvbnRyaWJ1dG9yIGlzIHRoZW4gYQorQ29tbWVyY2lhbCBDb250cmlidXRvci4gSWYgdGhhdCBDb21tZXJjaWFsIENvbnRyaWJ1dG9yIHRoZW4gbWFrZXMgcGVyZm9ybWFuY2UKK2NsYWltcywgb3Igb2ZmZXJzIHdhcnJhbnRpZXMgcmVsYXRlZCB0byBQcm9kdWN0IFgsIHRob3NlIHBlcmZvcm1hbmNlIGNsYWltcyBhbmQKK3dhcnJhbnRpZXMgYXJlIHN1Y2ggQ29tbWVyY2lhbCBDb250cmlidXRvcidzIHJlc3BvbnNpYmlsaXR5IGFsb25lLiBVbmRlciB0aGlzCitzZWN0aW9uLCB0aGUgQ29tbWVyY2lhbCBDb250cmlidXRvciB3b3VsZCBoYXZlIHRvIGRlZmVuZCBjbGFpbXMgYWdhaW5zdCB0aGUKK290aGVyIENvbnRyaWJ1dG9ycyByZWxhdGVkIHRvIHRob3NlIHBlcmZvcm1hbmNlIGNsYWltcyBhbmQgd2FycmFudGllcywgYW5kIGlmIGEKK2NvdXJ0IHJlcXVpcmVzIGFueSBvdGhlciBDb250cmlidXRvciB0byBwYXkgYW55IGRhbWFnZXMgYXMgYSByZXN1bHQsIHRoZQorQ29tbWVyY2lhbCBDb250cmlidXRvciBtdXN0IHBheSB0aG9zZSBkYW1hZ2VzLjwvc3Bhbj4gPC9wPgorCis8cD48Yj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+NS4gTk8gV0FSUkFOVFk8L3NwYW4+PC9iPiA8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5FWENFUFQgQVMgRVhQUkVTU0xZIFNFVCBGT1JUSCBJTiBUSElTCitBR1JFRU1FTlQsIFRIRSBQUk9HUkFNIElTIFBST1ZJREVEIE9OIEFOICZxdW90O0FTIElTJnF1b3Q7IEJBU0lTLCBXSVRIT1VUCitXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIEVJVEhFUiBFWFBSRVNTIE9SIElNUExJRUQgSU5DTFVESU5HLAorV0lUSE9VVCBMSU1JVEFUSU9OLCBBTlkgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIFRJVExFLCBOT04tSU5GUklOR0VNRU5ULAorTUVSQ0hBTlRBQklMSVRZIE9SIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBFYWNoIFJlY2lwaWVudCBpcyBzb2xlbHkKK3Jlc3BvbnNpYmxlIGZvciBkZXRlcm1pbmluZyB0aGUgYXBwcm9wcmlhdGVuZXNzIG9mIHVzaW5nIGFuZCBkaXN0cmlidXRpbmcgdGhlCitQcm9ncmFtIGFuZCBhc3N1bWVzIGFsbCByaXNrcyBhc3NvY2lhdGVkIHdpdGggaXRzIGV4ZXJjaXNlIG9mIHJpZ2h0cyB1bmRlciB0aGlzCitBZ3JlZW1lbnQgLCBpbmNsdWRpbmcgYnV0IG5vdCBsaW1pdGVkIHRvIHRoZSByaXNrcyBhbmQgY29zdHMgb2YgcHJvZ3JhbSBlcnJvcnMsCitjb21wbGlhbmNlIHdpdGggYXBwbGljYWJsZSBsYXdzLCBkYW1hZ2UgdG8gb3IgbG9zcyBvZiBkYXRhLCBwcm9ncmFtcyBvcgorZXF1aXBtZW50LCBhbmQgdW5hdmFpbGFiaWxpdHkgb3IgaW50ZXJydXB0aW9uIG9mIG9wZXJhdGlvbnMuIDwvc3Bhbj48L3A+CisKKzxwPjxiPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz42LiBESVNDTEFJTUVSIE9GIExJQUJJTElUWTwvc3Bhbj48L2I+IDwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkVYQ0VQVCBBUyBFWFBSRVNTTFkgU0VUIEZPUlRIIElOIFRISVMKK0FHUkVFTUVOVCwgTkVJVEhFUiBSRUNJUElFTlQgTk9SIEFOWSBDT05UUklCVVRPUlMgU0hBTEwgSEFWRSBBTlkgTElBQklMSVRZIEZPUgorQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisoSU5DTFVESU5HIFdJVEhPVVQgTElNSVRBVElPTiBMT1NUIFBST0ZJVFMpLCBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcKK05FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT1IgRElTVFJJQlVUSU9OIE9GCitUSEUgUFJPR1JBTSBPUiBUSEUgRVhFUkNJU0UgT0YgQU5ZIFJJR0hUUyBHUkFOVEVEIEhFUkVVTkRFUiwgRVZFTiBJRiBBRFZJU0VEIE9GCitUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLjwvc3Bhbj4gPC9wPgorCis8cD48Yj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+Ny4gR0VORVJBTDwvc3Bhbj48L2I+IDwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPklmIGFueSBwcm92aXNpb24gb2YgdGhpcyBBZ3JlZW1lbnQgaXMgaW52YWxpZAorb3IgdW5lbmZvcmNlYWJsZSB1bmRlciBhcHBsaWNhYmxlIGxhdywgaXQgc2hhbGwgbm90IGFmZmVjdCB0aGUgdmFsaWRpdHkgb3IKK2VuZm9yY2VhYmlsaXR5IG9mIHRoZSByZW1haW5kZXIgb2YgdGhlIHRlcm1zIG9mIHRoaXMgQWdyZWVtZW50LCBhbmQgd2l0aG91dAorZnVydGhlciBhY3Rpb24gYnkgdGhlIHBhcnRpZXMgaGVyZXRvLCBzdWNoIHByb3Zpc2lvbiBzaGFsbCBiZSByZWZvcm1lZCB0byB0aGUKK21pbmltdW0gZXh0ZW50IG5lY2Vzc2FyeSB0byBtYWtlIHN1Y2ggcHJvdmlzaW9uIHZhbGlkIGFuZCBlbmZvcmNlYWJsZS48L3NwYW4+IDwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPklmIFJlY2lwaWVudCBpbnN0aXR1dGVzIHBhdGVudCBsaXRpZ2F0aW9uCithZ2FpbnN0IGFueSBlbnRpdHkgKGluY2x1ZGluZyBhIGNyb3NzLWNsYWltIG9yIGNvdW50ZXJjbGFpbSBpbiBhIGxhd3N1aXQpCithbGxlZ2luZyB0aGF0IHRoZSBQcm9ncmFtIGl0c2VsZiAoZXhjbHVkaW5nIGNvbWJpbmF0aW9ucyBvZiB0aGUgUHJvZ3JhbSB3aXRoCitvdGhlciBzb2Z0d2FyZSBvciBoYXJkd2FyZSkgaW5mcmluZ2VzIHN1Y2ggUmVjaXBpZW50J3MgcGF0ZW50KHMpLCB0aGVuIHN1Y2gKK1JlY2lwaWVudCdzIHJpZ2h0cyBncmFudGVkIHVuZGVyIFNlY3Rpb24gMihiKSBzaGFsbCB0ZXJtaW5hdGUgYXMgb2YgdGhlIGRhdGUKK3N1Y2ggbGl0aWdhdGlvbiBpcyBmaWxlZC4gPC9zcGFuPjwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkFsbCBSZWNpcGllbnQncyByaWdodHMgdW5kZXIgdGhpcyBBZ3JlZW1lbnQKK3NoYWxsIHRlcm1pbmF0ZSBpZiBpdCBmYWlscyB0byBjb21wbHkgd2l0aCBhbnkgb2YgdGhlIG1hdGVyaWFsIHRlcm1zIG9yCitjb25kaXRpb25zIG9mIHRoaXMgQWdyZWVtZW50IGFuZCBkb2VzIG5vdCBjdXJlIHN1Y2ggZmFpbHVyZSBpbiBhIHJlYXNvbmFibGUKK3BlcmlvZCBvZiB0aW1lIGFmdGVyIGJlY29taW5nIGF3YXJlIG9mIHN1Y2ggbm9uY29tcGxpYW5jZS4gSWYgYWxsIFJlY2lwaWVudCdzCityaWdodHMgdW5kZXIgdGhpcyBBZ3JlZW1lbnQgdGVybWluYXRlLCBSZWNpcGllbnQgYWdyZWVzIHRvIGNlYXNlIHVzZSBhbmQKK2Rpc3RyaWJ1dGlvbiBvZiB0aGUgUHJvZ3JhbSBhcyBzb29uIGFzIHJlYXNvbmFibHkgcHJhY3RpY2FibGUuIEhvd2V2ZXIsCitSZWNpcGllbnQncyBvYmxpZ2F0aW9ucyB1bmRlciB0aGlzIEFncmVlbWVudCBhbmQgYW55IGxpY2Vuc2VzIGdyYW50ZWQgYnkKK1JlY2lwaWVudCByZWxhdGluZyB0byB0aGUgUHJvZ3JhbSBzaGFsbCBjb250aW51ZSBhbmQgc3Vydml2ZS4gPC9zcGFuPjwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkV2ZXJ5b25lIGlzIHBlcm1pdHRlZCB0byBjb3B5IGFuZCBkaXN0cmlidXRlCitjb3BpZXMgb2YgdGhpcyBBZ3JlZW1lbnQsIGJ1dCBpbiBvcmRlciB0byBhdm9pZCBpbmNvbnNpc3RlbmN5IHRoZSBBZ3JlZW1lbnQgaXMKK2NvcHlyaWdodGVkIGFuZCBtYXkgb25seSBiZSBtb2RpZmllZCBpbiB0aGUgZm9sbG93aW5nIG1hbm5lci4gVGhlIEFncmVlbWVudAorU3Rld2FyZCByZXNlcnZlcyB0aGUgcmlnaHQgdG8gcHVibGlzaCBuZXcgdmVyc2lvbnMgKGluY2x1ZGluZyByZXZpc2lvbnMpIG9mCit0aGlzIEFncmVlbWVudCBmcm9tIHRpbWUgdG8gdGltZS4gTm8gb25lIG90aGVyIHRoYW4gdGhlIEFncmVlbWVudCBTdGV3YXJkIGhhcwordGhlIHJpZ2h0IHRvIG1vZGlmeSB0aGlzIEFncmVlbWVudC4gVGhlIEVjbGlwc2UgRm91bmRhdGlvbiBpcyB0aGUgaW5pdGlhbAorQWdyZWVtZW50IFN0ZXdhcmQuIFRoZSBFY2xpcHNlIEZvdW5kYXRpb24gbWF5IGFzc2lnbiB0aGUgcmVzcG9uc2liaWxpdHkgdG8KK3NlcnZlIGFzIHRoZSBBZ3JlZW1lbnQgU3Rld2FyZCB0byBhIHN1aXRhYmxlIHNlcGFyYXRlIGVudGl0eS4gRWFjaCBuZXcgdmVyc2lvbgorb2YgdGhlIEFncmVlbWVudCB3aWxsIGJlIGdpdmVuIGEgZGlzdGluZ3Vpc2hpbmcgdmVyc2lvbiBudW1iZXIuIFRoZSBQcm9ncmFtCisoaW5jbHVkaW5nIENvbnRyaWJ1dGlvbnMpIG1heSBhbHdheXMgYmUgZGlzdHJpYnV0ZWQgc3ViamVjdCB0byB0aGUgdmVyc2lvbiBvZgordGhlIEFncmVlbWVudCB1bmRlciB3aGljaCBpdCB3YXMgcmVjZWl2ZWQuIEluIGFkZGl0aW9uLCBhZnRlciBhIG5ldyB2ZXJzaW9uIG9mCit0aGUgQWdyZWVtZW50IGlzIHB1Ymxpc2hlZCwgQ29udHJpYnV0b3IgbWF5IGVsZWN0IHRvIGRpc3RyaWJ1dGUgdGhlIFByb2dyYW0KKyhpbmNsdWRpbmcgaXRzIENvbnRyaWJ1dGlvbnMpIHVuZGVyIHRoZSBuZXcgdmVyc2lvbi4gRXhjZXB0IGFzIGV4cHJlc3NseSBzdGF0ZWQKK2luIFNlY3Rpb25zIDIoYSkgYW5kIDIoYikgYWJvdmUsIFJlY2lwaWVudCByZWNlaXZlcyBubyByaWdodHMgb3IgbGljZW5zZXMgdG8KK3RoZSBpbnRlbGxlY3R1YWwgcHJvcGVydHkgb2YgYW55IENvbnRyaWJ1dG9yIHVuZGVyIHRoaXMgQWdyZWVtZW50LCB3aGV0aGVyCitleHByZXNzbHksIGJ5IGltcGxpY2F0aW9uLCBlc3RvcHBlbCBvciBvdGhlcndpc2UuIEFsbCByaWdodHMgaW4gdGhlIFByb2dyYW0gbm90CitleHByZXNzbHkgZ3JhbnRlZCB1bmRlciB0aGlzIEFncmVlbWVudCBhcmUgcmVzZXJ2ZWQuPC9zcGFuPiA8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5UaGlzIEFncmVlbWVudCBpcyBnb3Zlcm5lZCBieSB0aGUgbGF3cyBvZiB0aGUKK1N0YXRlIG9mIE5ldyBZb3JrIGFuZCB0aGUgaW50ZWxsZWN0dWFsIHByb3BlcnR5IGxhd3Mgb2YgdGhlIFVuaXRlZCBTdGF0ZXMgb2YKK0FtZXJpY2EuIE5vIHBhcnR5IHRvIHRoaXMgQWdyZWVtZW50IHdpbGwgYnJpbmcgYSBsZWdhbCBhY3Rpb24gdW5kZXIgdGhpcworQWdyZWVtZW50IG1vcmUgdGhhbiBvbmUgeWVhciBhZnRlciB0aGUgY2F1c2Ugb2YgYWN0aW9uIGFyb3NlLiBFYWNoIHBhcnR5IHdhaXZlcworaXRzIHJpZ2h0cyB0byBhIGp1cnkgdHJpYWwgaW4gYW55IHJlc3VsdGluZyBsaXRpZ2F0aW9uLjwvc3Bhbj4gPC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWw+PCFbaWYgIXN1cHBvcnRFbXB0eVBhcmFzXT4mbmJzcDs8IVtlbmRpZl0+PG86cD48L286cD48L3A+CisKKzwvZGl2PgorCis8L2JvZHk+CisKKzwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uam9icy9ub3RpY2UuaHRtbCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5qb2JzL25vdGljZS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM2YWY5NjYKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uam9icy9ub3RpY2UuaHRtbApAQCAtMCwwICsxLDc5IEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wLy9FTiI+Cis8aHRtbD4KKzxoZWFkPgorPG1ldGEgaHR0cC1lcXVpdj1Db250ZW50LVR5cGUgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PWlzby04ODU5LTEiPgorPHRpdGxlPkVjbGlwc2Uub3JnIFNvZnR3YXJlIFVzZXIgQWdyZWVtZW50PC90aXRsZT4KKzwvaGVhZD4KKworPGJvZHkgbGFuZz0iRU4tVVMiIGxpbms9Ymx1ZSB2bGluaz1wdXJwbGU+Cis8aDI+RWNsaXBzZSBGb3VuZGF0aW9uIFNvZnR3YXJlIFVzZXIgQWdyZWVtZW50PC9oMj4KKzxwPk1hcmNoIDE3LCAyMDA1PC9wPgorCis8aDM+VXNhZ2UgT2YgQ29udGVudDwvaDM+CisKKzxwPlRIRSBFQ0xJUFNFIEZPVU5EQVRJT04gTUFLRVMgQVZBSUxBQkxFIFNPRlRXQVJFLCBET0NVTUVOVEFUSU9OLCBJTkZPUk1BVElPTiBBTkQvT1IgT1RIRVIgTUFURVJJQUxTIEZPUiBPUEVOIFNPVVJDRSBQUk9KRUNUUworICAgKENPTExFQ1RJVkVMWSAmcXVvdDtDT05URU5UJnF1b3Q7KS4gIFVTRSBPRiBUSEUgQ09OVEVOVCBJUyBHT1ZFUk5FRCBCWSBUSEUgVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgVEhJUyBBR1JFRU1FTlQgQU5EL09SIFRIRSBURVJNUyBBTkQKKyAgIENPTkRJVElPTlMgT0YgTElDRU5TRSBBR1JFRU1FTlRTIE9SIE5PVElDRVMgSU5ESUNBVEVEIE9SIFJFRkVSRU5DRUQgQkVMT1cuICBCWSBVU0lORyBUSEUgQ09OVEVOVCwgWU9VIEFHUkVFIFRIQVQgWU9VUiBVU0UKKyAgIE9GIFRIRSBDT05URU5UIElTIEdPVkVSTkVEIEJZIFRISVMgQUdSRUVNRU5UIEFORC9PUiBUSEUgVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgQU5ZIEFQUExJQ0FCTEUgTElDRU5TRSBBR1JFRU1FTlRTIE9SCisgICBOT1RJQ0VTIElORElDQVRFRCBPUiBSRUZFUkVOQ0VEIEJFTE9XLiAgSUYgWU9VIERPIE5PVCBBR1JFRSBUTyBUSEUgVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgVEhJUyBBR1JFRU1FTlQgQU5EIFRIRSBURVJNUyBBTkQKKyAgIENPTkRJVElPTlMgT0YgQU5ZIEFQUExJQ0FCTEUgTElDRU5TRSBBR1JFRU1FTlRTIE9SIE5PVElDRVMgSU5ESUNBVEVEIE9SIFJFRkVSRU5DRUQgQkVMT1csIFRIRU4gWU9VIE1BWSBOT1QgVVNFIFRIRSBDT05URU5ULjwvcD4KKyAgIAorPGgzPkFwcGxpY2FibGUgTGljZW5zZXM8L2gzPiAgIAorICAgCis8cD5Vbmxlc3Mgb3RoZXJ3aXNlIGluZGljYXRlZCwgYWxsIENvbnRlbnQgbWFkZSBhdmFpbGFibGUgYnkgdGhlIEVjbGlwc2UgRm91bmRhdGlvbiBpcyBwcm92aWRlZCB0byB5b3UgdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4wCisgICAoJnF1b3Q7RVBMJnF1b3Q7KS4gIEEgY29weSBvZiB0aGUgRVBMIGlzIHByb3ZpZGVkIHdpdGggdGhpcyBDb250ZW50IGFuZCBpcyBhbHNvIGF2YWlsYWJsZSBhdCA8YSBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbCI+aHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWw8L2E+LgorICAgRm9yIHB1cnBvc2VzIG9mIHRoZSBFUEwsICZxdW90O1Byb2dyYW0mcXVvdDsgd2lsbCBtZWFuIHRoZSBDb250ZW50LjwvcD4KKworPHA+Q29udGVudCBpbmNsdWRlcywgYnV0IGlzIG5vdCBsaW1pdGVkIHRvLCBzb3VyY2UgY29kZSwgb2JqZWN0IGNvZGUsIGRvY3VtZW50YXRpb24gYW5kIG90aGVyIGZpbGVzIG1haW50YWluZWQgaW4gdGhlIEVjbGlwc2Uub3JnIENWUyByZXBvc2l0b3J5ICgmcXVvdDtSZXBvc2l0b3J5JnF1b3Q7KSBpbiBDVlMKKyAgIG1vZHVsZXMgKCZxdW90O01vZHVsZXMmcXVvdDspIGFuZCBtYWRlIGF2YWlsYWJsZSBhcyBkb3dubG9hZGFibGUgYXJjaGl2ZXMgKCZxdW90O0Rvd25sb2FkcyZxdW90OykuPC9wPgorICAgCis8dWw+CisJPGxpPkNvbnRlbnQgbWF5IGJlIHN0cnVjdHVyZWQgYW5kIHBhY2thZ2VkIGludG8gbW9kdWxlcyB0byBmYWNpbGl0YXRlIGRlbGl2ZXJpbmcsIGV4dGVuZGluZywgYW5kIHVwZ3JhZGluZyB0aGUgQ29udGVudC4gIFR5cGljYWwgbW9kdWxlcyBtYXkgaW5jbHVkZSBwbHVnLWlucyAoJnF1b3Q7UGx1Zy1pbnMmcXVvdDspLCBwbHVnLWluIGZyYWdtZW50cyAoJnF1b3Q7RnJhZ21lbnRzJnF1b3Q7KSwgYW5kIGZlYXR1cmVzICgmcXVvdDtGZWF0dXJlcyZxdW90OykuPC9saT4KKwk8bGk+RWFjaCBQbHVnLWluIG9yIEZyYWdtZW50IG1heSBiZSBwYWNrYWdlZCBhcyBhIHN1Yi1kaXJlY3Rvcnkgb3IgSkFSIChKYXZhJnRyYWRlOyBBUmNoaXZlKSBpbiBhIGRpcmVjdG9yeSBuYW1lZCAmcXVvdDtwbHVnaW5zJnF1b3Q7LjwvbGk+CisJPGxpPkEgRmVhdHVyZSBpcyBhIGJ1bmRsZSBvZiBvbmUgb3IgbW9yZSBQbHVnLWlucyBhbmQvb3IgRnJhZ21lbnRzIGFuZCBhc3NvY2lhdGVkIG1hdGVyaWFsLiAgRWFjaCBGZWF0dXJlIG1heSBiZSBwYWNrYWdlZCBhcyBhIHN1Yi1kaXJlY3RvcnkgaW4gYSBkaXJlY3RvcnkgbmFtZWQgJnF1b3Q7ZmVhdHVyZXMmcXVvdDsuICBXaXRoaW4gYSBGZWF0dXJlLCBmaWxlcyBuYW1lZCAmcXVvdDtmZWF0dXJlLnhtbCZxdW90OyBtYXkgY29udGFpbiBhIGxpc3Qgb2YgdGhlIG5hbWVzIGFuZCB2ZXJzaW9uIG51bWJlcnMgb2YgdGhlIFBsdWctaW5zCisgICAgICBhbmQvb3IgRnJhZ21lbnRzIGFzc29jaWF0ZWQgd2l0aCB0aGF0IEZlYXR1cmUuPC9saT4KKwk8bGk+RmVhdHVyZXMgbWF5IGFsc28gaW5jbHVkZSBvdGhlciBGZWF0dXJlcyAoJnF1b3Q7SW5jbHVkZWQgRmVhdHVyZXMmcXVvdDspLiBXaXRoaW4gYSBGZWF0dXJlLCBmaWxlcyBuYW1lZCAmcXVvdDtmZWF0dXJlLnhtbCZxdW90OyBtYXkgY29udGFpbiBhIGxpc3Qgb2YgdGhlIG5hbWVzIGFuZCB2ZXJzaW9uIG51bWJlcnMgb2YgSW5jbHVkZWQgRmVhdHVyZXMuPC9saT4KKzwvdWw+ICAgCisgCis8cD5UaGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgZ292ZXJuaW5nIFBsdWctaW5zIGFuZCBGcmFnbWVudHMgc2hvdWxkIGJlIGNvbnRhaW5lZCBpbiBmaWxlcyBuYW1lZCAmcXVvdDthYm91dC5odG1sJnF1b3Q7ICgmcXVvdDtBYm91dHMmcXVvdDspLiBUaGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgZ292ZXJuaW5nIEZlYXR1cmVzIGFuZAorSW5jbHVkZWQgRmVhdHVyZXMgc2hvdWxkIGJlIGNvbnRhaW5lZCBpbiBmaWxlcyBuYW1lZCAmcXVvdDtsaWNlbnNlLmh0bWwmcXVvdDsgKCZxdW90O0ZlYXR1cmUgTGljZW5zZXMmcXVvdDspLiAgQWJvdXRzIGFuZCBGZWF0dXJlIExpY2Vuc2VzIG1heSBiZSBsb2NhdGVkIGluIGFueSBkaXJlY3Rvcnkgb2YgYSBEb3dubG9hZCBvciBNb2R1bGUKK2luY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvIHRoZSBmb2xsb3dpbmcgbG9jYXRpb25zOjwvcD4KKworPHVsPgorCTxsaT5UaGUgdG9wLWxldmVsIChyb290KSBkaXJlY3Rvcnk8L2xpPgorCTxsaT5QbHVnLWluIGFuZCBGcmFnbWVudCBkaXJlY3RvcmllczwvbGk+CisJPGxpPkluc2lkZSBQbHVnLWlucyBhbmQgRnJhZ21lbnRzIHBhY2thZ2VkIGFzIEpBUnM8L2xpPgorCTxsaT5TdWItZGlyZWN0b3JpZXMgb2YgdGhlIGRpcmVjdG9yeSBuYW1lZCAmcXVvdDtzcmMmcXVvdDsgb2YgY2VydGFpbiBQbHVnLWluczwvbGk+CisJPGxpPkZlYXR1cmUgZGlyZWN0b3JpZXM8L2xpPgorPC91bD4KKwkJCis8cD5Ob3RlOiBpZiBhIEZlYXR1cmUgbWFkZSBhdmFpbGFibGUgYnkgdGhlIEVjbGlwc2UgRm91bmRhdGlvbiBpcyBpbnN0YWxsZWQgdXNpbmcgdGhlIEVjbGlwc2UgVXBkYXRlIE1hbmFnZXIsIHlvdSBtdXN0IGFncmVlIHRvIGEgbGljZW5zZSAoJnF1b3Q7RmVhdHVyZSBVcGRhdGUgTGljZW5zZSZxdW90OykgZHVyaW5nIHRoZQoraW5zdGFsbGF0aW9uIHByb2Nlc3MuICBJZiB0aGUgRmVhdHVyZSBjb250YWlucyBJbmNsdWRlZCBGZWF0dXJlcywgdGhlIEZlYXR1cmUgVXBkYXRlIExpY2Vuc2Ugc2hvdWxkIGVpdGhlciBwcm92aWRlIHlvdSB3aXRoIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBnb3Zlcm5pbmcgdGhlIEluY2x1ZGVkIEZlYXR1cmVzIG9yCitpbmZvcm0geW91IHdoZXJlIHlvdSBjYW4gbG9jYXRlIHRoZW0uICBGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlcyBtYXkgYmUgZm91bmQgaW4gdGhlICZxdW90O2xpY2Vuc2UmcXVvdDsgcHJvcGVydHkgb2YgZmlsZXMgbmFtZWQgJnF1b3Q7ZmVhdHVyZS5wcm9wZXJ0aWVzJnF1b3Q7IGZvdW5kIHdpdGhpbiBhIEZlYXR1cmUuCitTdWNoIEFib3V0cywgRmVhdHVyZSBMaWNlbnNlcywgYW5kIEZlYXR1cmUgVXBkYXRlIExpY2Vuc2VzIGNvbnRhaW4gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIChvciByZWZlcmVuY2VzIHRvIHN1Y2ggdGVybXMgYW5kIGNvbmRpdGlvbnMpIHRoYXQgZ292ZXJuIHlvdXIgdXNlIG9mIHRoZSBhc3NvY2lhdGVkIENvbnRlbnQgaW4KK3RoYXQgZGlyZWN0b3J5LjwvcD4KKworPHA+VEhFIEFCT1VUUywgRkVBVFVSRSBMSUNFTlNFUywgQU5EIEZFQVRVUkUgVVBEQVRFIExJQ0VOU0VTIE1BWSBSRUZFUiBUTyBUSEUgRVBMIE9SIE9USEVSIExJQ0VOU0UgQUdSRUVNRU5UUywgTk9USUNFUyBPUiBURVJNUyBBTkQgQ09ORElUSU9OUy4gIFNPTUUgT0YgVEhFU0UKK09USEVSIExJQ0VOU0UgQUdSRUVNRU5UUyBNQVkgSU5DTFVERSAoQlVUIEFSRSBOT1QgTElNSVRFRCBUTyk6PC9wPgorCis8dWw+CisJPGxpPkNvbW1vbiBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMCAoYXZhaWxhYmxlIGF0IDxhIGhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvY3BsLXYxMC5odG1sIj5odHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2NwbC12MTAuaHRtbDwvYT4pPC9saT4KKwk8bGk+QXBhY2hlIFNvZnR3YXJlIExpY2Vuc2UgMS4xIChhdmFpbGFibGUgYXQgPGEgaHJlZj0iaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UiPmh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFPC9hPik8L2xpPgorCTxsaT5BcGFjaGUgU29mdHdhcmUgTGljZW5zZSAyLjAgKGF2YWlsYWJsZSBhdCA8YSBocmVmPSJodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAiPmh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMDwvYT4pPC9saT4KKwk8bGk+SUJNIFB1YmxpYyBMaWNlbnNlIDEuMCAoYXZhaWxhYmxlIGF0IDxhIGhyZWY9Imh0dHA6Ly9vc3Muc29mdHdhcmUuaWJtLmNvbS9kZXZlbG9wZXJ3b3Jrcy9vcGVuc291cmNlL2xpY2Vuc2UxMC5odG1sIj5odHRwOi8vb3NzLnNvZnR3YXJlLmlibS5jb20vZGV2ZWxvcGVyd29ya3Mvb3BlbnNvdXJjZS9saWNlbnNlMTAuaHRtbDwvYT4pPC9saT4JCisJPGxpPk1ldHJvIExpbmsgUHVibGljIExpY2Vuc2UgMS4wMCAoYXZhaWxhYmxlIGF0IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbmdyb3VwLm9yZy9vcGVubW90aWYvc3VwcG9ydGVycy9tZXRyb2xpbmsvbGljZW5zZS5odG1sIj5odHRwOi8vd3d3Lm9wZW5ncm91cC5vcmcvb3Blbm1vdGlmL3N1cHBvcnRlcnMvbWV0cm9saW5rL2xpY2Vuc2UuaHRtbDwvYT4pPC9saT4KKwk8bGk+TW96aWxsYSBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMSAoYXZhaWxhYmxlIGF0IDxhIGhyZWY9Imh0dHA6Ly93d3cubW96aWxsYS5vcmcvTVBML01QTC0xLjEuaHRtbCI+aHR0cDovL3d3dy5tb3ppbGxhLm9yZy9NUEwvTVBMLTEuMS5odG1sPC9hPik8L2xpPgorPC91bD4KKworPHA+SVQgSVMgWU9VUiBPQkxJR0FUSU9OIFRPIFJFQUQgQU5EIEFDQ0VQVCBBTEwgU1VDSCBURVJNUyBBTkQgQ09ORElUSU9OUyBQUklPUiBUTyBVU0UgT0YgVEhFIENPTlRFTlQuICBJZiBubyBBYm91dCwgRmVhdHVyZSBMaWNlbnNlLCBvciBGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlIGlzIHByb3ZpZGVkLCBwbGVhc2UKK2NvbnRhY3QgdGhlIEVjbGlwc2UgRm91bmRhdGlvbiB0byBkZXRlcm1pbmUgd2hhdCB0ZXJtcyBhbmQgY29uZGl0aW9ucyBnb3Zlcm4gdGhhdCBwYXJ0aWN1bGFyIENvbnRlbnQuPC9wPgorCis8aDM+Q3J5cHRvZ3JhcGh5PC9oMz4KKworPHA+Q29udGVudCBtYXkgY29udGFpbiBlbmNyeXB0aW9uIHNvZnR3YXJlLiBUaGUgY291bnRyeSBpbiB3aGljaCB5b3UgYXJlIGN1cnJlbnRseSBtYXkgaGF2ZSByZXN0cmljdGlvbnMgb24gdGhlIGltcG9ydCwgcG9zc2Vzc2lvbiwgYW5kIHVzZSwgYW5kL29yIHJlLWV4cG9ydCB0bworICAgYW5vdGhlciBjb3VudHJ5LCBvZiBlbmNyeXB0aW9uIHNvZnR3YXJlLiBCRUZPUkUgdXNpbmcgYW55IGVuY3J5cHRpb24gc29mdHdhcmUsIHBsZWFzZSBjaGVjayB0aGUgY291bnRyeSdzIGxhd3MsIHJlZ3VsYXRpb25zIGFuZCBwb2xpY2llcyBjb25jZXJuaW5nIHRoZSBpbXBvcnQsCisgICBwb3NzZXNzaW9uLCBvciB1c2UsIGFuZCByZS1leHBvcnQgb2YgZW5jcnlwdGlvbiBzb2Z0d2FyZSwgdG8gc2VlIGlmIHRoaXMgaXMgcGVybWl0dGVkLjwvcD4KKyAgIAorPHNtYWxsPkphdmEgYW5kIGFsbCBKYXZhLWJhc2VkIHRyYWRlbWFya3MgYXJlIHRyYWRlbWFya3Mgb2YgU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiBpbiB0aGUgVW5pdGVkIFN0YXRlcywgb3RoZXIgY291bnRyaWVzLCBvciBib3RoLjwvc21hbGw+ICAgCis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uam9icy9wbHVnaW4ucHJvcGVydGllcyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5qb2JzL3BsdWdpbi5wcm9wZXJ0aWVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI1YTQ2ODMKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uam9icy9wbHVnaW4ucHJvcGVydGllcwpAQCAtMCwwICsxLDE1IEBACisjLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyMgKiBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisjICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworIyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorIyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisjICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyMgKgorIyAqIENvbnRyaWJ1dG9yczoKKyMgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisjICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3BsdWdpbk5hbWU9IFNURU0gSm9iIGFuZCBTaW11bGF0aW9uIE1hbmFnZXIKK3Byb3ZpZGVyTmFtZSA9IEVjbGlwc2Uub3JnCisKK19VSV9TaW1NZ210UFBhZ2UgPSBTaW11bGF0aW9uIE1hbmFnZW1lbnQKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uam9icy9wbHVnaW4ueG1sIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmpvYnMvcGx1Z2luLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMTc4NzliCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmpvYnMvcGx1Z2luLnhtbApAQCAtMCwwICsxLDk4IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPD9lY2xpcHNlIHZlcnNpb249IjMuMiI/PgorPHBsdWdpbj4KKyAgIDxleHRlbnNpb24KKyAgICAgICAgIHBvaW50PSJvcmcuZWNsaXBzZS51aS5wcmVmZXJlbmNlUGFnZXMiPgorICAgICAgPHBhZ2UKKyAgICAgICAgICAgIGNhdGVnb3J5PSJvcmcuZWNsaXBzZS5zdGVtLnVpLnByZWZlcmVuY2VzLlNURU1QcmVmZXJlbmNlUGFnZSIKKyAgICAgICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS5zdGVtLmpvYnMucHJlZmVyZW5jZXMuU2ltdWxhdGlvbk1hbmFnZW1lbnRQcmVmZXJlbmNlUGFnZSIKKyAgICAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5zdGVtLmpvYnMucHJlZmVyZW5jZXMuU2ltdWxhdGlvbk1hbmFnZW1lbnRQcmVmZXJlbmNlUGFnZSIKKyAgICAgICAgICAgIG5hbWU9IiVfVUlfU2ltTWdtdFBQYWdlIi8+CisgICA8L2V4dGVuc2lvbj4KKyAgIDxleHRlbnNpb24KKyAgICAgICAgIHBvaW50PSJvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUucHJlZmVyZW5jZXMiPgorICAgICAgPGluaXRpYWxpemVyIGNsYXNzPSJvcmcuZWNsaXBzZS5zdGVtLmpvYnMucHJlZmVyZW5jZXMuUHJlZmVyZW5jZUluaXRpYWxpemVyIi8+CisgICAgICA8aW5pdGlhbGl6ZXIgY2xhc3M9Im9yZy5lY2xpcHNlLnN0ZW0uam9icy5wcmVmZXJlbmNlcy5QcmVmZXJlbmNlSW5pdGlhbGl6ZXIiLz4KKyAgIDwvZXh0ZW5zaW9uPgorIDxleHRlbnNpb24KKyAgICAgICAgcG9pbnQ9Im9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5hZGFwdGVycyI+CisgICAgICAgICAgPGZhY3RvcnkgCisgICAgICAgICAgICBjbGFzcz0ib3JnLmVjbGlwc2Uuc3RlbS5qb2JzLmFkYXB0ZXJzLmV4ZWN1dGFibGUuQ29uZmlndXJhdGlvbkVsZW1lbnRFeGVjdXRhYmxlQWRhcHRlckZhY3RvcnkiIAorICAgICAgICAgICAgYWRhcHRhYmxlVHlwZT0ib3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklDb25maWd1cmF0aW9uRWxlbWVudCI+CisgICAgICAgICAgICA8YWRhcHRlciB0eXBlPSJvcmcuZWNsaXBzZS5zdGVtLmpvYnMuZXhlY3V0aW9uLklFeGVjdXRhYmxlIi8+CisgICAgICAgICA8L2ZhY3Rvcnk+CisgICAgICAgICAgPGZhY3RvcnkgCisgICAgICAgICAgICBjbGFzcz0ib3JnLmVjbGlwc2Uuc3RlbS5qb2JzLmFkYXB0ZXJzLmV4ZWN1dGFibGUuSWRlbnRpZmlhYmxlRXhlY3V0YWJsZUFkYXB0ZXJGYWN0b3J5IiAKKyAgICAgICAgICAgIGFkYXB0YWJsZVR5cGU9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5FeHBlcmltZW50Ij4KKyAgICAgICAgICAgIDxhZGFwdGVyIHR5cGU9Im9yZy5lY2xpcHNlLnN0ZW0uam9icy5leGVjdXRpb24uSUV4ZWN1dGFibGUiLz4KKyAgICAgICAgIDwvZmFjdG9yeT4KKyAgICAgICAgICA8ZmFjdG9yeQorICAgICAgICAgICAgICAgIGFkYXB0YWJsZVR5cGU9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5leHBlcmltZW50LmltcGwuRXhwZXJpbWVudEltcGwiCisgICAgICAgICAgICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLnN0ZW0uam9icy5hZGFwdGVycy5leGVjdXRhYmxlLklkZW50aWZpYWJsZUV4ZWN1dGFibGVBZGFwdGVyRmFjdG9yeSI+CisgICAgICAgICAgICAgPGFkYXB0ZXIKKyAgICAgICAgICAgICAgICAgICB0eXBlPSJvcmcuZWNsaXBzZS5zdGVtLmpvYnMuZXhlY3V0aW9uLklFeGVjdXRhYmxlIj4KKyAgICAgICAgICAgICA8L2FkYXB0ZXI+CisgICAgICAgICAgPC9mYWN0b3J5PgorICAgICAgICAgIDxmYWN0b3J5IAorICAgICAgICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLnN0ZW0uam9icy5hZGFwdGVycy5leGVjdXRhYmxlLklkZW50aWZpYWJsZUV4ZWN1dGFibGVBZGFwdGVyRmFjdG9yeSIgCisgICAgICAgICAgICBhZGFwdGFibGVUeXBlPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuU2NlbmFyaW8iPgorICAgICAgICAgICAgPGFkYXB0ZXIgdHlwZT0ib3JnLmVjbGlwc2Uuc3RlbS5qb2JzLmV4ZWN1dGlvbi5JRXhlY3V0YWJsZSIvPgorICAgICAgICAgPC9mYWN0b3J5PgorICAgICAgICAgIDxmYWN0b3J5CisgICAgICAgICAgICAgICAgYWRhcHRhYmxlVHlwZT0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNjZW5hcmlvLmltcGwuU2NlbmFyaW9JbXBsIgorICAgICAgICAgICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS5zdGVtLmpvYnMuYWRhcHRlcnMuZXhlY3V0YWJsZS5JZGVudGlmaWFibGVFeGVjdXRhYmxlQWRhcHRlckZhY3RvcnkiPgorICAgICAgICAgICAgIDxhZGFwdGVyCisgICAgICAgICAgICAgICAgICAgdHlwZT0ib3JnLmVjbGlwc2Uuc3RlbS5qb2JzLmV4ZWN1dGlvbi5JRXhlY3V0YWJsZSI+CisgICAgICAgICAgICAgPC9hZGFwdGVyPgorICAgICAgICAgIDwvZmFjdG9yeT4KKyAgICAgICAgICA8ZmFjdG9yeQorICAgICAgICAgICAgICAgIGFkYXB0YWJsZVR5cGU9Im9yZy5lY2xpcHNlLnN0ZW0uam9icy5zaW11bGF0aW9uLklTaW11bGF0aW9uIgorICAgICAgICAgICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS5zdGVtLmpvYnMuYWRhcHRlcnMuZXhlY3V0YWJsZS5TaW11bGF0aW9uRXhlY3V0YWJsZUFkYXB0ZXJGYWN0b3J5Ij4KKyAgICAgICAgICAgICA8YWRhcHRlcgorICAgICAgICAgICAgICAgICAgIHR5cGU9Im9yZy5lY2xpcHNlLnN0ZW0uam9icy5leGVjdXRpb24uSUV4ZWN1dGFibGUiPgorICAgICAgICAgICAgIDwvYWRhcHRlcj4KKyAgICAgICAgICA8L2ZhY3Rvcnk+CisgICAgICAgICAgIDxmYWN0b3J5IAorICAgICAgICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLnN0ZW0uam9icy5hZGFwdGVycy5leGVjdXRhYmxlLlNpbXVsYXRpb25FeGVjdXRhYmxlQWRhcHRlckZhY3RvcnkiIAorICAgICAgICAgICAgYWRhcHRhYmxlVHlwZT0ib3JnLmVjbGlwc2Uuc3RlbS5qb2JzLnNpbXVsYXRpb24uU2ltdWxhdGlvbiI+CisgICAgICAgICAgICA8YWRhcHRlciB0eXBlPSJvcmcuZWNsaXBzZS5zdGVtLmpvYnMuZXhlY3V0aW9uLklFeGVjdXRhYmxlIi8+CisgICAgICAgICA8L2ZhY3Rvcnk+CisgICAgICAgICAgPGZhY3RvcnkgCisgICAgICAgICAgICBjbGFzcz0ib3JnLmVjbGlwc2Uuc3RlbS5qb2JzLmFkYXB0ZXJzLmV4ZWN1dGFibGUuQmF0Y2hFeGVjdXRpb25BZGFwdGVyRmFjdG9yeSIgCisgICAgICAgICAgICBhZGFwdGFibGVUeXBlPSJvcmcuZWNsaXBzZS5zdGVtLmpvYnMuYmF0Y2guQmF0Y2giPgorICAgICAgICAgICAgPGFkYXB0ZXIgdHlwZT0ib3JnLmVjbGlwc2Uuc3RlbS5qb2JzLmV4ZWN1dGlvbi5JRXhlY3V0YWJsZSIvPgorICAgICAgICAgPC9mYWN0b3J5PgorICAgICAgICAgIDxmYWN0b3J5CisgICAgICAgICAgICAgICAgYWRhcHRhYmxlVHlwZT0ib3JnLmVjbGlwc2Uuc3RlbS5qb2JzLmJhdGNoLklCYXRjaCIKKyAgICAgICAgICAgICAgICBjbGFzcz0ib3JnLmVjbGlwc2Uuc3RlbS5qb2JzLmFkYXB0ZXJzLmV4ZWN1dGFibGUuQmF0Y2hFeGVjdXRpb25BZGFwdGVyRmFjdG9yeSI+CisgICAgICAgICAgICAgPGFkYXB0ZXIKKyAgICAgICAgICAgICAgICAgICB0eXBlPSJvcmcuZWNsaXBzZS5zdGVtLmpvYnMuZXhlY3V0aW9uLklFeGVjdXRhYmxlIj4KKyAgICAgICAgICAgICA8L2FkYXB0ZXI+CisgICAgICAgICAgPC9mYWN0b3J5PgorICA8L2V4dGVuc2lvbj4KKyA8ZXh0ZW5zaW9uCisgICAgICAgcG9pbnQ9Im9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5hZGFwdGVycyI+CisgICAgPGZhY3RvcnkKKyAgICAgICAgICBhZGFwdGFibGVUeXBlPSJvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSUNvbmZpZ3VyYXRpb25FbGVtZW50IgorICAgICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS5zdGVtLmpvYnMuYWRhcHRlcnMuaWRlbnRpZmlhYmxlLkNvbmZpZ3VyYXRpb25FbGVtZW50SWRlbnRpZmlhYmxlQWRhcHRlckZhY3RvcnkiPgorICAgICAgIDxhZGFwdGVyCisgICAgICAgICAgICAgdHlwZT0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5JZGVudGlmaWFibGUiPgorICAgICAgIDwvYWRhcHRlcj4KKyAgICA8L2ZhY3Rvcnk+CisgICAgPGZhY3RvcnkKKyAgICAgICAgICBhZGFwdGFibGVUeXBlPSJvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JRmlsZSIKKyAgICAgICAgICBjbGFzcz0ib3JnLmVjbGlwc2Uuc3RlbS5qb2JzLmFkYXB0ZXJzLmlkZW50aWZpYWJsZS5GaWxlSWRlbnRpZmlhYmxlQWRhcHRlckZhY3RvcnkiPgorICAgICAgIDxhZGFwdGVyCisgICAgICAgICAgICAgdHlwZT0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5JZGVudGlmaWFibGUiPgorICAgICAgIDwvYWRhcHRlcj4KKyAgICA8L2ZhY3Rvcnk+Cis8IS0tICAgIDxmYWN0b3J5CisgICAgICAgICAgYWRhcHRhYmxlVHlwZT0ib3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlVSSSIKKyAgICAgICAgICBjbGFzcz0ib3JnLmVjbGlwc2Uuc3RlbS5qb2JzLmFkYXB0ZXJzLmlkZW50aWZpYWJsZS5VUklJZGVudGlmaWFibGVBZGFwdGVyRmFjdG9yeSI+CisgICAgICAgPGFkYXB0ZXIKKyAgICAgICAgICAgICB0eXBlPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLklkZW50aWZpYWJsZSI+CisgICAgICAgPC9hZGFwdGVyPgorICAgIDwvZmFjdG9yeT4KKy0tPgorIDwvZXh0ZW5zaW9uPgorPC9wbHVnaW4+CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uam9icy9wbHVnaW5fZGUucHJvcGVydGllcyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5qb2JzL3BsdWdpbl9kZS5wcm9wZXJ0aWVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU2M2M1MDIKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uam9icy9wbHVnaW5fZGUucHJvcGVydGllcwpAQCAtMCwwICsxLDE1IEBACisjLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyMgKiBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisjICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworIyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorIyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisjICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyMgKgorIyAqIENvbnRyaWJ1dG9yczoKKyMgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisjICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3BsdWdpbk5hbWU9U1RFTSBBdWZnYWJlbi0gdW5kIFNpbXVsYXRpb25zbWFuYWdlcgorcHJvdmlkZXJOYW1lPUVjbGlwc2Uub3JnCisKK19VSV9TaW1NZ210UFBhZ2U9U2ltdWxhdGlvbiBNYW5hZ2VtZW50CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uam9icy9wbHVnaW5fa3IucHJvcGVydGllcyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5qb2JzL3BsdWdpbl9rci5wcm9wZXJ0aWVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQyNjE0MGQKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uam9icy9wbHVnaW5fa3IucHJvcGVydGllcwpAQCAtMCwwICsxLDE1IEBACisjLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyMgKiBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisjICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworIyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorIyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisjICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyMgKgorIyAqIENvbnRyaWJ1dG9yczoKKyMgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisjICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3BsdWdpbk5hbWU9U1RFTSBcdWM3OTFcdWM1YzUgXHViYzBmIFx1YzJkY1x1YmJhY1x1YjgwOFx1Yzc3NFx1YzE1OCBcdWFkMDBcdWI5YWNcdWM3OTAKK3Byb3ZpZGVyTmFtZT1FY2xpcHNlLm9yZworCitfVUlfU2ltTWdtdFBQYWdlPVx1YzJkY1x1YmJhY1x1YjgwOFx1Yzc3NFx1YzE1OCBcdWFkMDBcdWI5YWMKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5qb2JzL3BsdWdpbl96aC5wcm9wZXJ0aWVzIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmpvYnMvcGx1Z2luX3poLnByb3BlcnRpZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTM1ZDlmZQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5qb2JzL3BsdWdpbl96aC5wcm9wZXJ0aWVzCkBAIC0wLDAgKzEsMTUgQEAKKyMvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIyAqIENvcHlyaWdodCAoYykgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyMgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisjICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisjICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyMgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorIyAqCisjICogQ29udHJpYnV0b3JzOgorIyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworcGx1Z2luTmFtZT1TVEVNXHU0ZjVjXHU0ZTFhXHU1NDhjXHU2YTIxXHU2MmRmXHU3YmExXHU3NDA2Citwcm92aWRlck5hbWU9RWNsaXBzZS5vcmcKKworX1VJX1NpbU1nbXRQUGFnZT1cdTRlZmZcdTc3MWZcdTdiYTFcdTc0MDYKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5qb2JzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2pvYnMvQWN0aXZhdG9yLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uam9icy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9qb2JzL0FjdGl2YXRvci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNiYzdkOTUKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uam9icy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9qb2JzL0FjdGl2YXRvci5qYXZhCkBAIC0wLDAgKzEsOTcgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5qb2JzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA2LCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TdGF0dXM7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5qb2JzLmFkYXB0ZXJzLmV4ZWN1dGFibGUuZW1mLkV4cGVyaW1lbnRFeGVjdXRhYmxlQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5qb2JzLmFkYXB0ZXJzLmV4ZWN1dGFibGUuZW1mLlNjZW5hcmlvRXhlY3V0YWJsZUFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLnBsdWdpbi5BYnN0cmFjdFVJUGx1Z2luOworaW1wb3J0IG9yZy5vc2dpLmZyYW1ld29yay5CdW5kbGVDb250ZXh0OworCisvKioKKyAqIFRoZSBhY3RpdmF0b3IgY2xhc3MgY29udHJvbHMgdGhlIHBsdWctaW4gbGlmZSBjeWNsZQorICovCitwdWJsaWMgY2xhc3MgQWN0aXZhdG9yIGV4dGVuZHMgQWJzdHJhY3RVSVBsdWdpbiB7CisKKwkvKioKKwkgKiBUaGUgcGx1Zy1pbiBJRAorCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFBMVUdJTl9JRCA9ICJvcmcuZWNsaXBzZS5zdGVtLmpvYnMiOyAvLyROT04tTkxTLTEkCisKKwkvLyBUaGUgc2hhcmVkIGluc3RhbmNlCisJcHJpdmF0ZSBzdGF0aWMgQWN0aXZhdG9yIHBsdWdpbjsKKworCS8qKgorCSAqIFRoZSBjb25zdHJ1Y3RvcgorCSAqLworCXB1YmxpYyBBY3RpdmF0b3IoKSB7CisJCXBsdWdpbiA9IHRoaXM7CisJfQorCisJLyoqCisJICogQHBhcmFtIGNvbnRleHQKKwkgKiBAdGhyb3dzIEV4Y2VwdGlvbgorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIHN0YXJ0KEJ1bmRsZUNvbnRleHQgY29udGV4dCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCXN1cGVyLnN0YXJ0KGNvbnRleHQpOworCQluZXcgU2NlbmFyaW9FeGVjdXRhYmxlQWRhcHRlckZhY3RvcnkoKTsKKwkJbmV3IEV4cGVyaW1lbnRFeGVjdXRhYmxlQWRhcHRlckZhY3RvcnkoKTsKKwl9IC8vIHN0YXJ0CisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QbHVnaW4jc3RvcChvcmcub3NnaS5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBzdG9wKEJ1bmRsZUNvbnRleHQgY29udGV4dCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCXBsdWdpbiA9IG51bGw7CisJCXN1cGVyLnN0b3AoY29udGV4dCk7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgc2hhcmVkIGluc3RhbmNlCisJICogCisJICogQHJldHVybiB0aGUgc2hhcmVkIGluc3RhbmNlCisJICovCisJcHVibGljIHN0YXRpYyBBY3RpdmF0b3IgZ2V0RGVmYXVsdCgpIHsKKwkJcmV0dXJuIHBsdWdpbjsKKwl9CisKKwkvKioKKwkgKiBMb2cgYW4gZXJyb3IgdG8gdGhlIElMb2cgZm9yIHRoaXMgcGx1Z2luCisJICogCisJICogQHBhcmFtIG1lc3NhZ2UKKwkgKiAgICAgICAgICAgIHRoZSBsb2NhbGl6ZWQgZXJyb3IgbWVzc2FnZSB0ZXh0CisJICogQHBhcmFtIGV4Y2VwdGlvbgorCSAqICAgICAgICAgICAgdGhlIGFzc29jaWF0ZWQgZXhjZXB0aW9uLCBvciBudWxsCisJICovCisJcHVibGljIHN0YXRpYyB2b2lkIGxvZ0Vycm9yKFN0cmluZyBtZXNzYWdlLCBUaHJvd2FibGUgZXhjZXB0aW9uKSB7CisJCXBsdWdpbi5nZXRMb2coKS5sb2coCisJCQkJbmV3IFN0YXR1cyhJU3RhdHVzLkVSUk9SLCBwbHVnaW4uZ2V0QnVuZGxlKCkuZ2V0U3ltYm9saWNOYW1lKCksCisJCQkJCQkwLCBtZXNzYWdlLCBleGNlcHRpb24pKTsKKwl9IC8vIGxvZ0Vycm9yCisKKwkvKioKKwkgKiBMb2cgaW5mb3JtYXRpb24gdG8gdGhlIElMb2cgZm9yIHRoaXMgcGx1Z2luCisJICogCisJICogQHBhcmFtIG1lc3NhZ2UKKwkgKiAgICAgICAgICAgIHRoZSBsb2NhbGl6ZWQgaW5mb3JtYXRpb24gbWVzc2FnZSB0ZXh0CisJICogQHBhcmFtIGV4Y2VwdGlvbgorCSAqICAgICAgICAgICAgdGhlIGFzc29jaWF0ZWQgZXhjZXB0aW9uLCBvciBudWxsCisJICovCisJcHVibGljIHN0YXRpYyB2b2lkIGxvZ0luZm9ybWF0aW9uKFN0cmluZyBtZXNzYWdlLCBUaHJvd2FibGUgZXhjZXB0aW9uKSB7CisJCXBsdWdpbi5nZXRMb2coKS5sb2coCisJCQkJbmV3IFN0YXR1cyhJU3RhdHVzLklORk8sIHBsdWdpbi5nZXRCdW5kbGUoKS5nZXRTeW1ib2xpY05hbWUoKSwKKwkJCQkJCTAsIG1lc3NhZ2UsIGV4Y2VwdGlvbikpOworCX0gLy8gbG9nSW5mb3JtYXRpb24KK30gLy8gQWN0aXZhdG9yCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uam9icy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9qb2JzL0Rpc3BsYXlTYWZlRXhlY3V0b3IuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5qb2JzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2pvYnMvRGlzcGxheVNhZmVFeGVjdXRvci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJhYTMxMmQKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uam9icy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9qb2JzL0Rpc3BsYXlTYWZlRXhlY3V0b3IuamF2YQpAQCAtMCwwICsxLDE5MCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAxMSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5qb2JzOworCitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQcm9ncmVzc01vbml0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlN0YXR1czsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuam9icy5Kb2I7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuRGlzcGxheTsKKworLyoqCisgKiBQcm92aWRlcyBtZXRob2RzIHRvIHNhZmVseSBnZXQgdGhlIFNXVCBEaXNwbGF5IAorICogaW5zdGFuY2UgYW5kIGludm9rZSBVSSBzeW5jaHJvbm91cy9hc3luY2hyb25vdXMgdGFza3MKKyAqIGFnYWluc3QgdGhlIGRpc3BsYXkuICBJZiBkaXNwbGF5IGlzIG51bGwgLSBmb3IgZXhhbXBsZSwgd2hlbiAKKyAqIHJ1bm5pbmcgaW4gYSBzeXN0ZW0gd2hlcmUgdGhlcmUgaXMgbm8gc3VwcG9ydGVkIHdpbmRvd2luZyBzeXN0ZW0sCisgKiBzdWNoIGFzIGhlYWRsZXNzIC0gdGhlbiB1c2VzIGFuIGFsdGVybmF0aXZlIG1ldGhvZCBmb3Igc3luY2hyb25vdXMgCisgKiBhbmQgYXN5bmNocm9ub3VzIGV4ZWN1dGlvbi4KKyAqIAorICovCitwdWJsaWMgY2xhc3MgRGlzcGxheVNhZmVFeGVjdXRvciAKK3sKKwlwcml2YXRlIHN0YXRpYyBEaXNwbGF5IGRpc3BsYXkgPSBudWxsOworCXByaXZhdGUgc3RhdGljIGJvb2xlYW4gZGlzcGxheUluaXQgPSBmYWxzZTsKKwkKKwkvKioKKwkgKiBJZiB0aGUgY3VycmVudCBkaXNwbGF5IGhhcyBhbHJlYWR5IGJlZW4gY2FjaGVkLCAKKwkgKiByZW1vdmVzIGFuZCBkaXNwb3NlcyB0aGUgZGlzcGxheSBhbmQgZm9yY2VzIHRoZSAKKwkgKiBzeXN0ZW0gdG8gdXNlIHRoZSBub24tVUkgZXhlY3V0b3JzLgorCSAqLworCXB1YmxpYyBzeW5jaHJvbml6ZWQgc3RhdGljIHZvaWQgZm9yY2VIZWFkbGVzcygpCisJeworCQlpZiAoZGlzcGxheSAhPSBudWxsKSB7CisJCQl0cnkgeworCQkJCWRpc3BsYXkuZGlzcG9zZSgpOworCQkJfSBjYXRjaCAoVGhyb3dhYmxlIHQpIHsKKwkJCQkvLyBjYXRjaCBlcnJvcnMvZXhjZXB0aW9ucyBhbmQgaWdub3JlCisJCQl9CisJCX0KKwkJZGlzcGxheSA9IG51bGw7CisJCWRpc3BsYXlJbml0ID0gdHJ1ZTsKKwl9CisJCisJLyoqCisJICogU2FmZWx5IGdldHMgdGhlIGRlZmF1bHQgRGlzcGxheSBmb3IgdGhpcyBTV1QgaW5zdGFuY2UsIAorCSAqIGNhdGNoaW5nIGFsbCBleGNlcHRpb25zL2Vycm9ycyB0aHJvd24gYW5kIGNoZWNraW5nIGZvciAKKwkgKiBkaXNwb3NhbC4gIEZvciBhIGN1cnJlbnRseSB2YWxpZCBkZWZhdWx0IGRpc3BsYXkgdGhhdCBoYXMKKwkgKiBub3QgYmVlbiBkaXNwb3NlZCwgcmV0dXJucyB0aGUgaW5zdGFuY2Ugb2YgdGhlIGRlZmF1bHQgZGlzcGxheS4KKwkgKiBPdGhlcndpc2UsIHJldHVybnMgbnVsbDsKKwkgKiAKKwkgKiBAcmV0dXJuIFRoZSBkZWZhdWx0IFNXVCBEaXNwbGF5IG9yIG51bGwgaWYgbm8gdmFsaWQgZGlzcGxheSBleGlzdHMKKwkgKi8KKwlwdWJsaWMgc3RhdGljIERpc3BsYXkgc2FmZUdldERlZmF1bHREaXNwbGF5KCkKKwl7CisJCXJldHVybiBzYWZlR2V0RGVmYXVsdERpc3BsYXkoZmFsc2UpOworCX0KKwkKKwkvKioKKwkgKiBTYW1lIGFzIHtAbGluayBEaXNwbGF5U2FmZUV4ZWN1dG9yI3NhZmVHZXREZWZhdWx0RGlzcGxheSgpfSBleGNlcHRzIAorCSAqIHJlaW5pdGlhbGl6ZXMgdGhlIHN0b3JlZCBpbnN0YW5jZS4gIENhbiBiZSB1c2VkIGlmIHRoZSBkZWZhdWx0IGRpc3BsYXkKKwkgKiBjaGFuZ2VzIChpcyB0aGF0IHBvc3NpYmxlPykgb3IgYSBkaXNwbGF5IGlzIGRpc3Bvc2VkICYgcmVjcmVhdGVkLgorCSAqIAorCSAqIEBwYXJhbSByZWluaXQgV2hldGhlciB0byB1cGRhdGUgdGhlIHN0b3JlZCBzdGF0aWMgaW5zdGFuY2UKKwkgKiBAcmV0dXJuIFRoZSBkZWZhdWx0IFNXVCBEaXNwbGF5IG9yIG51bGwgaWYgbm8gdmFsaWQgZGlzcGxheSBleGlzdHMKKwkgKi8KKwlwdWJsaWMgc3luY2hyb25pemVkIHN0YXRpYyBEaXNwbGF5IHNhZmVHZXREZWZhdWx0RGlzcGxheShib29sZWFuIHJlaW5pdCkKKwl7CisJCWlmIChyZWluaXQgfHwgKGRpc3BsYXkgPT0gbnVsbCAmJiAhZGlzcGxheUluaXQpKSB7CisJCQl0cnkgeworCQkJCWRpc3BsYXkgPSBEaXNwbGF5LmdldERlZmF1bHQoKTsKKwkJCX0gY2F0Y2ggKFRocm93YWJsZSB0KSB7CisJCQkJLy8gY2F0Y2ggZXhjZXB0aW9uLCBpZ25vcmUKKwkJCX0KKwkJCQorCQkJZGlzcGxheUluaXQgPSB0cnVlOworCQl9CisJCisJCWlmIChkaXNwbGF5ICE9IG51bGwgJiYgZGlzcGxheS5pc0Rpc3Bvc2VkKCkpIHsKKwkJCWRpc3BsYXkgPSBudWxsOworCQl9CisJCQorCQlyZXR1cm4gZGlzcGxheTsKKwl9CisJCisJCisJLyoqCisJICogUnVucyBhIFVJIHN5bmNocm9ub3VzIHRhc2sgKHJ1bm5hYmxlKSBpbiB0aGUgZGVmYXVsdCBEaXNwbGF5IFVJIHRocmVhZCBvciwKKwkgKiBpZiBubyB2YWxpZCBkaXNwbGF5IGV4aXN0cywgcnVucyBhcyBzeW5jaHJvbm91cyB0YXNrIGFnYWluc3QgdGhlCisJICogY3VycmVudCB0aHJlYWQuCisJICogCisJICogQHNlZSB7QGxpbmsgRGlzcGxheSNzeW5jRXhlYyhSdW5uYWJsZSl9CisJICogQHBhcmFtIHJ1bm5hYmxlIFJ1bm5hYmxlIGluc3RhbmNlIHRvIGludm9rZSBzeW5jaHJvbm91c2x5CisJICovCisJcHVibGljIHN0YXRpYyB2b2lkIGV4ZWN1dGVTeW5jKGZpbmFsIFJ1bm5hYmxlIHJ1bm5hYmxlKQorCXsKKwkJZXhlY3V0ZVN5bmMocnVubmFibGUsIGZhbHNlKTsKKwl9CisJCisJLyoqCisJICogUnVucyBhIFVJIHN5bmNocm9ub3VzIHRhc2sgKHJ1bm5hYmxlKSBpbiB0aGUgZGVmYXVsdCBEaXNwbGF5IFVJIHRocmVhZCBvciwKKwkgKiBpZiBubyB2YWxpZCBkaXNwbGF5IGV4aXN0cywgcnVucyBhcyBzeW5jaHJvbm91cyB0YXNrIGFnYWluc3QgdGhlCisJICogY3VycmVudCB0aHJlYWQuIElmIHVzZUhlYWRsZXNzIGlzIHRydWUsIHRhc2sgaXMgcnVuIGluIGEgaGVhZGxlc3Mtc2FmZQorCSAqIHdheSBpbiB0aGUgY3VycmVudCB0aHJlYWQuCisJICogCisJICogQHNlZSB7QGxpbmsgRGlzcGxheSNzeW5jRXhlYyhSdW5uYWJsZSl9CisJICogQHBhcmFtIHJ1bm5hYmxlIFJ1bm5hYmxlIGluc3RhbmNlIHRvIGludm9rZSBzeW5jaHJvbm91c2x5CisJICogQHBhcmFtIGhlYWRsZXNzU2FmZSBSdW5zIHRoZSB0YXNrIGluIGEgaGVhZGxlc3Mtc2FmZSBtb2RlIChkb2VzIG5vdCB1c2UgVUkgVGhyZWFkKQorCSAqLworCXB1YmxpYyBzdGF0aWMgdm9pZCBleGVjdXRlU3luYyhmaW5hbCBSdW5uYWJsZSBydW5uYWJsZSwgZmluYWwgYm9vbGVhbiBoZWFkbGVzc1NhZmUpCisJeworCQlpZiAocnVubmFibGUgPT0gbnVsbCkgeworCQkJcmV0dXJuOworCQl9CisJCQorCQlEaXNwbGF5IGQgPSBudWxsOworCQlpZiAoIWhlYWRsZXNzU2FmZSkgeworCQkJZCA9IHNhZmVHZXREZWZhdWx0RGlzcGxheSgpOworCQl9CisJCQorCQkKKwkJaWYgKGQgIT0gbnVsbCkgeworCQkJZC5zeW5jRXhlYyhydW5uYWJsZSk7CisJCX0gZWxzZSB7CisJCQl0cnkgeworCQkJCXJ1bm5hYmxlLnJ1bigpOworCQkJfSBjYXRjaCAoVGhyb3dhYmxlIHQpIHsKKwkJCQkvLyBub3RoaW5nCisJCQl9CisJCX0KKwl9CisJCisJCisJCisJLyoqCisJICogUnVucyBhIFVJIGFzeW5jaHJvbm91cyB0YXNrIChydW5uYWJsZSkgaW4gdGhlIGRlZmF1bHQgRGlzcGxheSBVSSB0aHJlYWQgb3IsCisJICogaWYgbm8gdmFsaWQgZGlzcGxheSBleGlzdHMsIHJ1bnMgYXMgYW4gYXN5bmNocm9ub3VzIEVjbGlwc2Ugam9iLgorCSAqIAorCSAqIEBzZWUge0BsaW5rIERpc3BsYXkjYXN5bmNFeGVjKFJ1bm5hYmxlKX0KKwkgKiBAc2VlIHtAbGluayBKb2J9CisJICogQHBhcmFtIHJ1bm5hYmxlIFJ1bm5hYmxlIGluc3RhbmNlIHRvIGludm9rZSBzeW5jaHJvbm91c2x5CisJICovCisJcHVibGljIHN0YXRpYyB2b2lkIGV4ZWN1dGVBc3luYyhmaW5hbCBSdW5uYWJsZSBydW5uYWJsZSkKKwl7CisJCWV4ZWN1dGVBc3luYyhydW5uYWJsZSwgZmFsc2UpOworCX0KKwkKKwkKKwkvKioKKwkgKiBSdW5zIGEgVUkgYXN5bmNocm9ub3VzIHRhc2sgKHJ1bm5hYmxlKSBpbiB0aGUgZGVmYXVsdCBEaXNwbGF5IFVJIHRocmVhZCBvciwKKwkgKiBpZiBubyB2YWxpZCBkaXNwbGF5IGV4aXN0cywgcnVucyBhcyBhbiBhc3luY2hyb25vdXMgRWNsaXBzZSBqb2IuICBTZWNvbmQgCisJICogcGFyYW1ldGVyIGhlYWRsZXNzU2FmZSBmb3JjZXMgaW50byBoZWFkbGVzcyBtb2RlIChkb2VzIG5vdCB1c2UgVUkgdGhyZWFkKS4KKwkgKiAKKwkgKiBAc2VlIHtAbGluayBEaXNwbGF5I2FzeW5jRXhlYyhSdW5uYWJsZSl9CisJICogQHNlZSB7QGxpbmsgSm9ifQorCSAqIEBwYXJhbSBydW5uYWJsZSBSdW5uYWJsZSBpbnN0YW5jZSB0byBpbnZva2Ugc3luY2hyb25vdXNseQorCSAqIEBwYXJhbSBoZWFkbGVzc1NhZmUgUnVucyB0aGUgdGFzayBpbiBhIGhlYWRsZXNzLXNhZmUgbW9kZSAoZG9lcyBub3QgdXNlIFVJIFRocmVhZCkKKwkgKi8KKwlwdWJsaWMgc3RhdGljIHZvaWQgZXhlY3V0ZUFzeW5jKGZpbmFsIFJ1bm5hYmxlIHJ1bm5hYmxlLCBmaW5hbCBib29sZWFuIGhlYWRsZXNzU2FmZSkKKwl7CisJCWlmIChydW5uYWJsZSA9PSBudWxsKSB7CisJCQlyZXR1cm47CisJCX0KKwkJCisJCURpc3BsYXkgZCA9IG51bGw7CisJCWlmICghaGVhZGxlc3NTYWZlKSB7CisJCQlkID0gc2FmZUdldERlZmF1bHREaXNwbGF5KCk7CisJCX0KKwkJCisJCWlmIChkICE9IG51bGwpIHsKKwkJCWQuYXN5bmNFeGVjKHJ1bm5hYmxlKTsKKwkJfSBlbHNlIHsKKwkJCW5ldyBKb2IocnVubmFibGUudG9TdHJpbmcoKSkgewkJCisJCQkJQFN1cHByZXNzV2FybmluZ3MoInVudXNlZCIpCisJCQkJcHJvdGVjdGVkIElTdGF0dXMgcnVuKElQcm9ncmVzc01vbml0b3IgbW9uaXRvcikgeworCQkJCQlydW5uYWJsZS5ydW4oKTsKKwkJCQkJcmV0dXJuIFN0YXR1cy5PS19TVEFUVVM7CisJCQkJfQorCQkJfS5zY2hlZHVsZSgpOworCQl9CisJfQorCQorfQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmpvYnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vam9icy9hZGFwdGVycy9leGVjdXRhYmxlL0JhdGNoRXhlY3V0YWJsZUFkYXB0ZXJGYWN0b3J5LmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uam9icy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9qb2JzL2FkYXB0ZXJzL2V4ZWN1dGFibGUvQmF0Y2hFeGVjdXRhYmxlQWRhcHRlckZhY3RvcnkuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mODY0MDQ3Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmpvYnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vam9icy9hZGFwdGVycy9leGVjdXRhYmxlL0JhdGNoRXhlY3V0YWJsZUFkYXB0ZXJGYWN0b3J5LmphdmEKQEAgLTAsMCArMSw0MCBAQAorLy8gQmF0Y2hFeGVjdXRhYmxlQWRhcHRlckZhY3RvcnkuamF2YQorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmpvYnMuYWRhcHRlcnMuZXhlY3V0YWJsZTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmpvYnMuYmF0Y2guSUJhdGNoOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uam9icy5leGVjdXRpb24uSUV4ZWN1dGFibGU7CisKKy8qKgorICogVGhpcyBjbGFzcyBpcyBhbiB7QGxpbmsgRXhlY3V0YWJsZUFkYXB0ZXJGYWN0b3J5fSB0aGF0IGFkYXB0cyB7QGxpbmsgSUJhdGNofXMKKyAqIHRvIHtAbGluayBJRXhlY3V0YWJsZX1zLgorICovCitwdWJsaWMgY2xhc3MgQmF0Y2hFeGVjdXRhYmxlQWRhcHRlckZhY3RvcnkgZXh0ZW5kcyBFeGVjdXRhYmxlQWRhcHRlckZhY3RvcnkgeworCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSUFkYXB0ZXJGYWN0b3J5I2dldEFkYXB0ZXIoamF2YS5sYW5nLk9iamVjdCwKKwkgKiAgICAgIGphdmEubGFuZy5DbGFzcykKKwkgKi8KKwlwdWJsaWMgT2JqZWN0IGdldEFkYXB0ZXIoZmluYWwgT2JqZWN0IGFkYXB0YWJsZU9iamVjdCwKKwkJCWZpbmFsIENsYXNzIGFkYXB0ZXJUeXBlKSB7CisJCUlCYXRjaCByZXRWYWx1ZSA9IG51bGw7CisJCS8vIEEgQmF0Y2g/CisJCWlmIChhZGFwdGFibGVPYmplY3QgaW5zdGFuY2VvZiBJQmF0Y2gKKwkJCQkmJiBhZGFwdGVyVHlwZS5lcXVhbHMoSUV4ZWN1dGFibGUuY2xhc3MpKSB7CisJCQkvLyBZZXMKKwkJCXJldFZhbHVlID0gKElCYXRjaCkgYWRhcHRhYmxlT2JqZWN0OworCQl9IC8vIGlmCisJCXJldHVybiByZXRWYWx1ZTsKKwl9IC8vIGdldEFkYXB0ZXIKKworfSAvLyBCYXRjaEV4ZWN1dGFibGVBZGFwdGVyRmFjdG9yeQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmpvYnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vam9icy9hZGFwdGVycy9leGVjdXRhYmxlL0NvbmZpZ3VyYXRpb25FbGVtZW50RXhlY3V0YWJsZUFkYXB0ZXJGYWN0b3J5LmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uam9icy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9qb2JzL2FkYXB0ZXJzL2V4ZWN1dGFibGUvQ29uZmlndXJhdGlvbkVsZW1lbnRFeGVjdXRhYmxlQWRhcHRlckZhY3RvcnkuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMWE1YTUwCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmpvYnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vam9icy9hZGFwdGVycy9leGVjdXRhYmxlL0NvbmZpZ3VyYXRpb25FbGVtZW50RXhlY3V0YWJsZUFkYXB0ZXJGYWN0b3J5LmphdmEKQEAgLTAsMCArMSw0NSBAQAorLy8gQ29uZmlndXJhdGlvbkVsZW1lbnRFeGVjdXRhYmxlQWRhcHRlckZhY3RvcnkuamF2YQorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmpvYnMuYWRhcHRlcnMuZXhlY3V0YWJsZTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSUNvbmZpZ3VyYXRpb25FbGVtZW50OworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QbGF0Zm9ybTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLklkZW50aWZpYWJsZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmpvYnMuZXhlY3V0aW9uLklFeGVjdXRhYmxlOworCisvKioKKyAqIFRoaXMgY2xhc3MgaXMgYW4ge0BsaW5rIEV4ZWN1dGFibGVBZGFwdGVyRmFjdG9yeX0gdGhhdCBhZGFwdHMKKyAqIHtAbGluayBJQ29uZmlndXJhdGlvbkVsZW1lbnR9cyB0byB7QGxpbmsgSUV4ZWN1dGFibGV9cy4KKyAqLworcHVibGljIGNsYXNzIENvbmZpZ3VyYXRpb25FbGVtZW50RXhlY3V0YWJsZUFkYXB0ZXJGYWN0b3J5IGV4dGVuZHMKKwkJRXhlY3V0YWJsZUFkYXB0ZXJGYWN0b3J5IHsKKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklBZGFwdGVyRmFjdG9yeSNnZXRBZGFwdGVyKGphdmEubGFuZy5PYmplY3QsCisJICogICAgICBqYXZhLmxhbmcuQ2xhc3MpCisJICovCisJcHVibGljIE9iamVjdCBnZXRBZGFwdGVyKGZpbmFsIE9iamVjdCBhZGFwdGFibGVPYmplY3QsCisJCQlmaW5hbCBDbGFzcyBhZGFwdGVyVHlwZSkgeworCQlJRXhlY3V0YWJsZSByZXRWYWx1ZSA9IG51bGw7CisJCS8vIEEgSUNvbmZpZ3VyYXRpb25FbGVtZW50PworCQlpZiAoYWRhcHRhYmxlT2JqZWN0IGluc3RhbmNlb2YgSUNvbmZpZ3VyYXRpb25FbGVtZW50CisJCQkJJiYgYWRhcHRlclR5cGUuZXF1YWxzKElFeGVjdXRhYmxlLmNsYXNzKSkgeworCQkJLy8gWWVzCisJCQlyZXRWYWx1ZSA9IChJRXhlY3V0YWJsZSkgUGxhdGZvcm0uZ2V0QWRhcHRlck1hbmFnZXIoKS5nZXRBZGFwdGVyKAorCQkJCQlQbGF0Zm9ybS5nZXRBZGFwdGVyTWFuYWdlcigpLmdldEFkYXB0ZXIoYWRhcHRhYmxlT2JqZWN0LAorCQkJCQkJCUlkZW50aWZpYWJsZS5jbGFzcyksIElFeGVjdXRhYmxlLmNsYXNzKTsKKwkJfSAvLyBpZgorCQlyZXR1cm4gcmV0VmFsdWU7CisJfSAvLyBnZXRBZGFwdGVyCisKK30gLy8gQ29uZmlndXJhdGlvbkVsZW1lbnRFeGVjdXRhYmxlQWRhcHRlckZhY3RvcnkKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5qb2JzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2pvYnMvYWRhcHRlcnMvZXhlY3V0YWJsZS9FeGVjdXRhYmxlQWRhcHRlckZhY3RvcnkuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5qb2JzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2pvYnMvYWRhcHRlcnMvZXhlY3V0YWJsZS9FeGVjdXRhYmxlQWRhcHRlckZhY3RvcnkuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNWJmNDdkCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmpvYnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vam9icy9hZGFwdGVycy9leGVjdXRhYmxlL0V4ZWN1dGFibGVBZGFwdGVyRmFjdG9yeS5qYXZhCkBAIC0wLDAgKzEsMzEgQEAKKy8vIEV4ZWN1dGFibGVBZGFwdGVyRmFjdG9yeS5qYXZhCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uam9icy5hZGFwdGVycy5leGVjdXRhYmxlOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5qb2JzLmV4ZWN1dGlvbi5JRXhlY3V0YWJsZTsKKworLyoqCisgKiBUaGlzIGNsYXNzIGlzIGFuIHtAbGluayBJQWRhcHRlckZhY3Rvcnl9IHRoYXQgaXMgZXh0ZW5kZWQgYnkgY2xhc3NlcyB0aGF0CisgKiBhZGFwdCB7QGxpbmsgT2JqZWN0fXMgdG8ge0BsaW5rIElFeGVjdXRhYmxlfXMuCisgKi8KK2Fic3RyYWN0IHB1YmxpYyBjbGFzcyBFeGVjdXRhYmxlQWRhcHRlckZhY3RvcnkgaW1wbGVtZW50cyBJQWRhcHRlckZhY3RvcnkgeworCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSUFkYXB0ZXJGYWN0b3J5I2dldEFkYXB0ZXJMaXN0KCkKKwkgKi8KKwlwdWJsaWMgQ2xhc3NbXSBnZXRBZGFwdGVyTGlzdCgpIHsKKwkJcmV0dXJuIG5ldyBDbGFzc1tdIHsgSUV4ZWN1dGFibGUuY2xhc3MgfTsKKwl9CisKK30gLy8gRXhlY3V0YWJsZUFkYXB0ZXJGYWN0b3J5CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uam9icy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9qb2JzL2FkYXB0ZXJzL2V4ZWN1dGFibGUvRmlsZUV4ZWN1dGFibGVBZGFwdGVyRmFjdG9yeS5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmpvYnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vam9icy9hZGFwdGVycy9leGVjdXRhYmxlL0ZpbGVFeGVjdXRhYmxlQWRhcHRlckZhY3RvcnkuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMGZkZmI3Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmpvYnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vam9icy9hZGFwdGVycy9leGVjdXRhYmxlL0ZpbGVFeGVjdXRhYmxlQWRhcHRlckZhY3RvcnkuamF2YQpAQCAtMCwwICsxLDQzIEBACisvLyBGaWxlRXhlY3V0YWJsZUFkYXB0ZXJGYWN0b3J5LmphdmEKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5qb2JzLmFkYXB0ZXJzLmV4ZWN1dGFibGU7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUZpbGU7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBsYXRmb3JtOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uSWRlbnRpZmlhYmxlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uam9icy5leGVjdXRpb24uSUV4ZWN1dGFibGU7CisKKy8qKgorICogVGhpcyBjbGFzcyBpcyBhbiB7QGxpbmsgRXhlY3V0YWJsZUFkYXB0ZXJGYWN0b3J5fSB0aGF0IGFkYXB0cyB7QGxpbmsgSUZpbGV9cworICogdG8ge0BsaW5rIElFeGVjdXRhYmxlfXMuCisgKi8KK3B1YmxpYyBjbGFzcyBGaWxlRXhlY3V0YWJsZUFkYXB0ZXJGYWN0b3J5IGV4dGVuZHMgRXhlY3V0YWJsZUFkYXB0ZXJGYWN0b3J5IHsKKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklBZGFwdGVyRmFjdG9yeSNnZXRBZGFwdGVyKGphdmEubGFuZy5PYmplY3QsCisJICogICAgICBqYXZhLmxhbmcuQ2xhc3MpCisJICovCisJcHVibGljIE9iamVjdCBnZXRBZGFwdGVyKGZpbmFsIE9iamVjdCBhZGFwdGFibGVPYmplY3QsCisJCQlmaW5hbCBDbGFzcyBhZGFwdGVyVHlwZSkgeworCQlJRXhlY3V0YWJsZSByZXRWYWx1ZSA9IG51bGw7CisJCS8vIEEgRmlsZT8KKwkJaWYgKGFkYXB0YWJsZU9iamVjdCBpbnN0YW5jZW9mIElGaWxlCisJCQkJJiYgYWRhcHRlclR5cGUuZXF1YWxzKElFeGVjdXRhYmxlLmNsYXNzKSkgeworCQkJLy8gWWVzCisJCQlyZXRWYWx1ZSA9IChJRXhlY3V0YWJsZSkgUGxhdGZvcm0uZ2V0QWRhcHRlck1hbmFnZXIoKS5nZXRBZGFwdGVyKAorCQkJCQlQbGF0Zm9ybS5nZXRBZGFwdGVyTWFuYWdlcigpLmdldEFkYXB0ZXIoYWRhcHRhYmxlT2JqZWN0LAorCQkJCQkJCUlkZW50aWZpYWJsZS5jbGFzcyksIElFeGVjdXRhYmxlLmNsYXNzKTsKKwkJfSAvLyBpZgorCQlyZXR1cm4gcmV0VmFsdWU7CisJfSAvLyBnZXRBZGFwdGVyCit9IC8vIEZpbGVFeGVjdXRhYmxlQWRhcHRlckZhY3RvcnkKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5qb2JzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2pvYnMvYWRhcHRlcnMvZXhlY3V0YWJsZS9JZGVudGlmaWFibGVFeGVjdXRhYmxlQWRhcHRlckZhY3RvcnkuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5qb2JzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2pvYnMvYWRhcHRlcnMvZXhlY3V0YWJsZS9JZGVudGlmaWFibGVFeGVjdXRhYmxlQWRhcHRlckZhY3RvcnkuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZWM4ZjYzCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmpvYnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vam9icy9hZGFwdGVycy9leGVjdXRhYmxlL0lkZW50aWZpYWJsZUV4ZWN1dGFibGVBZGFwdGVyRmFjdG9yeS5qYXZhCkBAIC0wLDAgKzEsNTIgQEAKKy8vIElkZW50aWZpYWJsZUV4ZWN1dGFibGVBZGFwdGVyRmFjdG9yeS5qYXZhCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uam9icy5hZGFwdGVycy5leGVjdXRhYmxlOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uSWRlbnRpZmlhYmxlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uam9icy5leGVjdXRpb24uSUV4ZWN1dGFibGU7CisKKy8qKgorICogVGhpcyBjbGFzcyBpcyBhbiB7QGxpbmsgRXhlY3V0YWJsZUFkYXB0ZXJGYWN0b3J5fSB0aGF0IGFkYXB0cworICoge0BsaW5rIElkZW50aWZpYWJsZX1zIHRvIHtAbGluayBJRXhlY3V0YWJsZX1zLgorICogPHA+CisgKiBUaGlzIGNsYXNzIHNlcnZlcyBhcyBhICJicmlkZ2UiIGJldHdlZW4gdGhlIEVjbGlwc2Uge0BsaW5rIElBZGFwdGVyTWFuYWdlcn0KKyAqIGFuZAorICoge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uam9icy5hZGFwdGVycy5leGVjdXRhYmxlLmVtZi5FeGVjdXRhYmxlQWRhcHRlckZhY3Rvcnl9CisgKiB3aGljaCBpcyB0aGUgRU1GIHtAbGluayBBZGFwdGVyfSBpbXBsZW1lbnRhdGlvbiB0aGF0IGFkYXB0cworICoge0BsaW5rIElkZW50aWZpYWJsZX1zIHRvIHtAbGluayBJRXhlY3V0YWJsZX1zLgorICogCisgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uam9icy5hZGFwdGVycy5leGVjdXRhYmxlLmVtZi5FeGVjdXRhYmxlQWRhcHRlcgorICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmpvYnMuYWRhcHRlcnMuZXhlY3V0YWJsZS5lbWYuU2NlbmFyaW9FeGVjdXRhYmxlQWRhcHRlckZhY3RvcnkKKyAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5qb2JzLmFkYXB0ZXJzLmV4ZWN1dGFibGUuZW1mLkV4cGVyaW1lbnRFeGVjdXRhYmxlQWRhcHRlckZhY3RvcnkKKyAqLworcHVibGljIGNsYXNzIElkZW50aWZpYWJsZUV4ZWN1dGFibGVBZGFwdGVyRmFjdG9yeSBleHRlbmRzCisJCUV4ZWN1dGFibGVBZGFwdGVyRmFjdG9yeSB7CisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JQWRhcHRlckZhY3RvcnkjZ2V0QWRhcHRlcihqYXZhLmxhbmcuT2JqZWN0LAorCSAqICAgICAgamF2YS5sYW5nLkNsYXNzKQorCSAqLworCXB1YmxpYyBPYmplY3QgZ2V0QWRhcHRlcihmaW5hbCBPYmplY3QgYWRhcHRhYmxlT2JqZWN0LAorCQkJZmluYWwgQ2xhc3MgYWRhcHRlclR5cGUpIHsKKwkJSUV4ZWN1dGFibGUgcmV0VmFsdWUgPSBudWxsOworCQkvLyBJdCBpdCB3aGF0IHdlJ3JlIGxvb2tpbmcgZm9yPworCQlpZiAoYWRhcHRhYmxlT2JqZWN0IGluc3RhbmNlb2YgSWRlbnRpZmlhYmxlCisJCQkJJiYgYWRhcHRlclR5cGUuZXF1YWxzKElFeGVjdXRhYmxlLmNsYXNzKSkgeworCQkJLy8gWWVzCisJCQlyZXRWYWx1ZSA9IChJRXhlY3V0YWJsZSkgb3JnLmVjbGlwc2Uuc3RlbS5qb2JzLmFkYXB0ZXJzLmV4ZWN1dGFibGUuZW1mLkV4ZWN1dGFibGVBZGFwdGVyRmFjdG9yeS5JTlNUQU5DRQorCQkJCQkuYWRhcHQoYWRhcHRhYmxlT2JqZWN0LCBJRXhlY3V0YWJsZS5jbGFzcyk7CisJCX0gLy8gaWYKKwkJcmV0dXJuIHJldFZhbHVlOworCX0gLy8gZ2V0QWRhcHRlcgorCit9IC8vIElkZW50aWZpYWJsZUV4ZWN1dGFibGVBZGFwdGVyRmFjdG9yeQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmpvYnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vam9icy9hZGFwdGVycy9leGVjdXRhYmxlL1NpbXVsYXRpb25FeGVjdXRhYmxlQWRhcHRlckZhY3RvcnkuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5qb2JzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2pvYnMvYWRhcHRlcnMvZXhlY3V0YWJsZS9TaW11bGF0aW9uRXhlY3V0YWJsZUFkYXB0ZXJGYWN0b3J5LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmY2NDYxNgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5qb2JzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2pvYnMvYWRhcHRlcnMvZXhlY3V0YWJsZS9TaW11bGF0aW9uRXhlY3V0YWJsZUFkYXB0ZXJGYWN0b3J5LmphdmEKQEAgLTAsMCArMSw0MSBAQAorLy8gU2ltdWxhdGlvbkV4ZWN1dGFibGVBZGFwdGVyRmFjdG9yeS5qYXZhCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uam9icy5hZGFwdGVycy5leGVjdXRhYmxlOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uam9icy5leGVjdXRpb24uSUV4ZWN1dGFibGU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5qb2JzLnNpbXVsYXRpb24uSVNpbXVsYXRpb247CisKKy8qKgorICogVGhpcyBjbGFzcyBpcyBhbiB7QGxpbmsgRXhlY3V0YWJsZUFkYXB0ZXJGYWN0b3J5fSB0aGF0IGFkYXB0cworICoge0BsaW5rIElTaW11bGF0aW9ufXMgdG8ge0BsaW5rIElFeGVjdXRhYmxlfXMuCisgKi8KK3B1YmxpYyBjbGFzcyBTaW11bGF0aW9uRXhlY3V0YWJsZUFkYXB0ZXJGYWN0b3J5IGV4dGVuZHMKKwkJRXhlY3V0YWJsZUFkYXB0ZXJGYWN0b3J5IHsKKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklBZGFwdGVyRmFjdG9yeSNnZXRBZGFwdGVyKGphdmEubGFuZy5PYmplY3QsCisJICogICAgICBqYXZhLmxhbmcuQ2xhc3MpCisJICovCisJcHVibGljIE9iamVjdCBnZXRBZGFwdGVyKGZpbmFsIE9iamVjdCBhZGFwdGFibGVPYmplY3QsCisJCQlmaW5hbCBDbGFzcyBhZGFwdGVyVHlwZSkgeworCQlJU2ltdWxhdGlvbiByZXRWYWx1ZSA9IG51bGw7CisJCS8vIEEgU2ltdWxhdGlvbj8KKwkJaWYgKGFkYXB0YWJsZU9iamVjdCBpbnN0YW5jZW9mIElTaW11bGF0aW9uCisJCQkJJiYgYWRhcHRlclR5cGUuZXF1YWxzKElFeGVjdXRhYmxlLmNsYXNzKSkgeworCQkJLy8gWWVzCisJCQlyZXRWYWx1ZSA9IChJU2ltdWxhdGlvbikgYWRhcHRhYmxlT2JqZWN0OworCQl9IC8vIGlmCisJCXJldHVybiByZXRWYWx1ZTsKKwl9IC8vIGdldEFkYXB0ZXIKKworfSAvLyBTaW11bGF0aW9uRXhlY3V0YWJsZUFkYXB0ZXJGYWN0b3J5CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uam9icy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9qb2JzL2FkYXB0ZXJzL2V4ZWN1dGFibGUvZW1mL0V4ZWN1dGFibGVBZGFwdGVyLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uam9icy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9qb2JzL2FkYXB0ZXJzL2V4ZWN1dGFibGUvZW1mL0V4ZWN1dGFibGVBZGFwdGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDllNDJjNgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5qb2JzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2pvYnMvYWRhcHRlcnMvZXhlY3V0YWJsZS9lbWYvRXhlY3V0YWJsZUFkYXB0ZXIuamF2YQpAQCAtMCwwICsxLDEzNSBAQAorLy8gRXhlY3V0YWJsZUFkYXB0ZXIuamF2YQorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmpvYnMuYWRhcHRlcnMuZXhlY3V0YWJsZS5lbWY7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgamF2YS51dGlsLkRhdGU7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuaW1wbC5BZGFwdGVySW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmpvYnMuQWN0aXZhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uam9icy5leGVjdXRpb24uSUV4ZWN1dGFibGU7CisKKy8qKgorICogVGhpcyBjbGFzcyBpcyBleHRlbmRlZCBieSBjbGFzc2VzIHRoYXQgYWRhcHQge0BsaW5rIE9iamVjdH1zIHRvCisgKiB7QGxpbmsgSUV4ZWN1dGFibGV9cy4KKyAqLworYWJzdHJhY3QgcHVibGljIGNsYXNzIEV4ZWN1dGFibGVBZGFwdGVyIGV4dGVuZHMgQWRhcHRlckltcGwgaW1wbGVtZW50cworCQlJRXhlY3V0YWJsZSB7CisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uam9icy5leGVjdXRpb24uSUV4ZWN1dGFibGUjZ2V0U2VxdWVuY2VOdW1iZXIoKQorCSAqLworCXB1YmxpYyBpbnQgZ2V0U2VxdWVuY2VOdW1iZXIoKSB7CisJCXJldHVybiAoKElFeGVjdXRhYmxlKSBnZXRUYXJnZXQoKSkuZ2V0U2VxdWVuY2VOdW1iZXIoKTsKKwl9IC8vIGdldFNlcXVlbmNlTnVtYmVyCisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uam9icy5leGVjdXRpb24uSUV4ZWN1dGFibGUjZ2V0TmFtZSgpCisJICovCisJcHVibGljIFN0cmluZyBnZXROYW1lKCkgeworCQlyZXR1cm4gKChJRXhlY3V0YWJsZSkgZ2V0VGFyZ2V0KCkpLmdldE5hbWUoKTsKKwl9IC8vIGdldE5hbWUKKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5qb2JzLmV4ZWN1dGlvbi5JRXhlY3V0YWJsZSNnZXROYW1lV2l0aFNlcXVlbmNlTnVtYmVyKCkKKwkgKi8KKwlwdWJsaWMgU3RyaW5nIGdldE5hbWVXaXRoU2VxdWVuY2VOdW1iZXIoKSB7CisJCXJldHVybiAoKElFeGVjdXRhYmxlKSBnZXRUYXJnZXQoKSkuZ2V0TmFtZVdpdGhTZXF1ZW5jZU51bWJlcigpOworCX0gLy8gZ2V0TmFtZVdpdGhTZXF1ZW5jZU51bWJlcgorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmpvYnMuZXhlY3V0aW9uLklFeGVjdXRhYmxlI2dldENyZWF0aW9uVGltZSgpCisJICovCisJcHVibGljIERhdGUgZ2V0Q3JlYXRpb25UaW1lKCkgeworCQlyZXR1cm4gKChJRXhlY3V0YWJsZSkgZ2V0VGFyZ2V0KCkpLmdldENyZWF0aW9uVGltZSgpOworCX0KKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5qb2JzLmV4ZWN1dGlvbi5JRXhlY3V0YWJsZSNnZXRVbmlxdWVJRFN0cmluZygpCisJICovCisJcHVibGljIFN0cmluZyBnZXRVbmlxdWVJRFN0cmluZygpIHsKKwkJcmV0dXJuICgoSUV4ZWN1dGFibGUpIGdldFRhcmdldCgpKS5nZXRVbmlxdWVJRFN0cmluZygpOworCX0KKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5qb2JzLmV4ZWN1dGlvbi5JRXhlY3V0YWJsZSNydW4oKQorCSAqLworCXB1YmxpYyB2b2lkIHJ1bigpIHsKKwkJbG9nVW5pbXBsZW1lbnRlZEVycm9yKCJydW4iKTsKKwl9CisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uam9icy5hZGFwdGVycy5leGVjdXRhYmxlLmVtZi5FeGVjdXRhYmxlQWRhcHRlciNwYXVzZSgpCisJICovCisJcHVibGljIHZvaWQgcGF1c2UoKSB7CisJCWxvZ1VuaW1wbGVtZW50ZWRFcnJvcigicGF1c2UiKTsKKwl9CisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uam9icy5leGVjdXRpb24uSUV4ZWN1dGFibGUjc3RlcCgpCisJICovCisJcHVibGljIHZvaWQgc3RlcCgpIHsKKwkJbG9nVW5pbXBsZW1lbnRlZEVycm9yKCJzdGVwIik7CisJfQorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmpvYnMuYWRhcHRlcnMuZXhlY3V0YWJsZS5lbWYuRXhlY3V0YWJsZUFkYXB0ZXIjcmVzZXQoKQorCSAqLworCXB1YmxpYyB2b2lkIHJlc2V0KCkgeworCQlsb2dVbmltcGxlbWVudGVkRXJyb3IoInJlc2V0Iik7CisJfQorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmpvYnMuYWRhcHRlcnMuZXhlY3V0YWJsZS5lbWYuRXhlY3V0YWJsZUFkYXB0ZXIjc3RvcCgpCisJICovCisJcHVibGljIHZvaWQgc3RvcCgpIHsKKwkJbG9nVW5pbXBsZW1lbnRlZEVycm9yKCJzdG9wIik7CisJfQorCisJcHJpdmF0ZSB2b2lkIGxvZ1VuaW1wbGVtZW50ZWRFcnJvcihmaW5hbCBTdHJpbmcgYWN0aW9uKSB7CisJCUFjdGl2YXRvcgorCQkJCS5sb2dFcnJvcigiSW50ZXJuYWwgZXJyb3I6ICIgKyBhY3Rpb24gKyAiIHVuaW1wbGVtZW50ZWQiLCBudWxsKTsKKwl9CisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uam9icy5leGVjdXRpb24uSUV4ZWN1dGFibGUjaXNSdW5uaW5nKCkKKwkgKi8KKwlwdWJsaWMgYm9vbGVhbiBpc1J1bm5pbmcoKSB7CisJCXJldHVybiBmYWxzZTsKKwl9CisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uam9icy5leGVjdXRpb24uSUV4ZWN1dGFibGUjaXNTdG9wcGFibGUoKQorCSAqLworCXB1YmxpYyBib29sZWFuIGlzU3RvcHBhYmxlKCkgeworCQlyZXR1cm4gZmFsc2U7CisJfQorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5BZGFwdGVyI2lzQWRhcHRlckZvclR5cGUoamF2YS5sYW5nLk9iamVjdCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgYm9vbGVhbiBpc0FkYXB0ZXJGb3JUeXBlKGZpbmFsIE9iamVjdCB0eXBlKSB7CisJCXJldHVybiB0eXBlID09IElFeGVjdXRhYmxlLmNsYXNzOworCX0KKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuQWRhcHRlciNub3RpZnlDaGFuZ2VkKG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbikKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBub3RpZnlDaGFuZ2VkKAorCQkJQFN1cHByZXNzV2FybmluZ3MoInVudXNlZCIpIGZpbmFsIE5vdGlmaWNhdGlvbiBub3RpZmljYXRpb24pIHsKKwkJLy8gTm90aGluZworCX0KKworfSAvLyBFeGVjdXRhYmxlQWRhcHRlcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmpvYnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vam9icy9hZGFwdGVycy9leGVjdXRhYmxlL2VtZi9FeGVjdXRhYmxlQWRhcHRlckZhY3RvcnkuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5qb2JzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2pvYnMvYWRhcHRlcnMvZXhlY3V0YWJsZS9lbWYvRXhlY3V0YWJsZUFkYXB0ZXJGYWN0b3J5LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDBmOWI0MAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5qb2JzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2pvYnMvYWRhcHRlcnMvZXhlY3V0YWJsZS9lbWYvRXhlY3V0YWJsZUFkYXB0ZXJGYWN0b3J5LmphdmEKQEAgLTAsMCArMSw3MCBAQAorLy8gRXhlY3V0YWJsZUFkYXB0ZXJGYWN0b3J5LmphdmEKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5qb2JzLmFkYXB0ZXJzLmV4ZWN1dGFibGUuZW1mOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkNvbXBvc2VkQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5qb2JzLmV4ZWN1dGlvbi5JRXhlY3V0YWJsZTsKKworLyoqCisgKiBUaGlzIGludGVyZmFjZSBpcyBpbXBsZW1lbnRlZCBieSBjbGFzc2VzIHRoYXQgY3JlYXRlIGFkYXB0ZXJzIHRoYXQgYWRhcHQKKyAqIHtAbGluayAgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3R9cyB0byB7QGxpbmsgSUV4ZWN1dGFibGV9cy4KKyAqLworcHVibGljIGludGVyZmFjZSBFeGVjdXRhYmxlQWRhcHRlckZhY3RvcnkgeworCisJLyoqCisJICogVGhpcyBpcyB0aGUgc2luZ2xldG9uIGluc3RhbmNlIG9mIHRoZSBmYWN0b3J5IHRoYXQgY3JlYXRlcworCSAqIHtAbGluayBFeGVjdXRhYmxlQWRhcHRlcn0gaW5zdGFuY2VzLgorCSAqIDxwPgorCSAqIAorCSAqIEJhc2ljYWxseSwgaWYgeW91IGNyZWF0ZSBhbiBFTUYgbW9kZWwgYW5kIGRlZmluZSBhCisJICoge0BsaW5rIEV4ZWN1dGFibGVBZGFwdGVyRmFjdG9yeX0gZm9yIGl0IHNvIHRoYXQgdGhlIGNsYXNzZXMgaW4gdGhhdCBtb2RlbAorCSAqIGNhbiBiZSBhZGFwdGVkLCB5b3UgbmVlZCB0byBob29rIHRoYXQgZmFjdG9yeSBpbnRvIHRoaXMgb25lIHNvIHRoYXQgbGF0ZXIKKwkgKiB3aGVuIGFuIGF0dGVtcHQgaXMgbWFkZSB0byBhZGFwdCBhIGNsYXNzIGZyb20gdGhhdCBtb2RlbCBpcyBtYWRlIHRoZQorCSAqIGFzc29jaWF0ZWQgZmFjdG9yeSB3aWxsIGJlIGZvdW5kLiBZb3UgY2FuIGRvIHRoYXQgYnkgYWRkaW5nIHRoZSBsaW5lOgorCSAqIDxjb2RlPgorCSAqIEV4ZWN1dGFibGVBZGFwdGVyRmFjdG9yeS5JTlNUQU5DRS5hZGRBZGFwdGVyRmFjdG9yeSh0aGlzKTsKKwkgKiA8L2NvZGU+CisJICogdG8gdGhlIGRlZmF1bHQgY29uc3RydWN0b3Igb2YgdGhlIG5ldyBmYWN0b3J5IGFmdGVyIHRoZSBzdXBlciBjYWxsLgorCSAqIFlvdSdyZSBub3QgZG9uZSBob3dldmVyLCB5b3UgYWxzbyBoYXZlIHRvICJmb3JjZSIgYW4gaW5zdGFuY2Ugb2YgdGhlCisJICogY2xhc3MgdG8gYmUgY3JlYXRlZCBzbyB0aGF0IHRoZSBjb25zdHJ1Y3RvciBpcyBydW4uIFRoaXMgaXMgdHlwaWNhbGx5CisJICogYWNoaWV2ZWQgYnkgYWxsb2NhdGluZyBhbiBpbnN0YW5jZSBpbiB0aGUgbWV0aG9kCisJICoge0BsaW5rIEFjdGl2YXRvciNzdGFydChvcmcub3NnaS5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dCl9b2YgdGhlIHBsdWctaW4KKwkgKiB0aGF0IGRlZmluZXMgdGhlIGZhY3RvcnkuCisJICovCisJRXhlY3V0YWJsZUFkYXB0ZXJGYWN0b3J5SW1wbCBJTlNUQU5DRSA9IG5ldyBFeGVjdXRhYmxlQWRhcHRlckZhY3RvcnlJbXBsKCk7CisKKwkvKioKKwkgKiBUaGlzIGNsYXNzIGlzIGV4dGVuZGVkIGJ5IGNsYXNzZXMgdGhhdCB3cmFwIHtAbGluayBFT2JqZWN0fXMgYW5kCisJICoge0BsaW5rIE9iamVjdH1zIHRvIGJlIHtAbGluayBJRXhlY3V0YWJsZX1zCisJICogPHA+CisJICogVGhpcyBpbnN0YW5jZSBpcyBhIHtAbGluayBDb21wb3NlZEFkYXB0ZXJGYWN0b3J5fSB3aGljaCBtZWFucyB0aGF0IGl0CisJICogY29sbGVjdHMgdG9nZXRoZXIgb3RoZXIge0BsaW5rIENvbXBvc2VhYmxlQWRhcHRlckZhY3Rvcnl9IGFkYXB0ZXIKKwkgKiBmYWN0b3JpZXMuIEVhY2ggY2xhc3MgdGhhdCBpbXBsZW1lbnRzIHtAbGluayBFeGVjdXRhYmxlQWRhcHRlckZhY3Rvcnl9CisJICogbmVlZHMgdG8gYWRkIGl0c2VsZiB0byB0aGlzIGluc3RhbmNlIHdpdGggYSBjYWxsIHRvCisJICoge0BsaW5rIENvbXBvc2VkQWRhcHRlckZhY3RvcnkjYWRkQWRhcHRlckZhY3Rvcnkob3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuQWRhcHRlckZhY3RvcnkpfS4KKwkgKiBUaGlzIHdpbGwgdGhlbiBhbGxvdyBhZGFwdGVycyBjcmVhdGVkIGJ5IHRoYXQgZmFjdG9yeSB0byBiZSBmb3VuZCB3aGVuCisJICogYWRhcHRpbmcgY2xhc3MgaW5zdGFuY2VzIGhhbmRsZWQgYnkgdGhlIG5ldyBmYWN0b3J5LgorCSAqLworCWNsYXNzIEV4ZWN1dGFibGVBZGFwdGVyRmFjdG9yeUltcGwgZXh0ZW5kcyBDb21wb3NlZEFkYXB0ZXJGYWN0b3J5IGltcGxlbWVudHMKKwkJCUV4ZWN1dGFibGVBZGFwdGVyRmFjdG9yeSB7CisKKwkJLyoqCisJCSAqIEBzZWUgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuQ29tcG9zZWRBZGFwdGVyRmFjdG9yeSNpc0ZhY3RvcnlGb3JUeXBlKGphdmEubGFuZy5PYmplY3QpCisJCSAqLworCQlAT3ZlcnJpZGUKKwkJcHVibGljIGJvb2xlYW4gaXNGYWN0b3J5Rm9yVHlwZShmaW5hbCBPYmplY3QgdHlwZSkgeworCQkJcmV0dXJuIHR5cGUgPT0gSUV4ZWN1dGFibGUuY2xhc3M7CisJCX0gLy8gaXNGYWN0b3J5Rm9yVHlwZQorCisJfSAvLyBFeGVjdXRhYmxlQWRhcHRlckZhY3RvcnlJbXBsCit9IC8vIEV4ZWN1dGFibGVBZGFwdGVyRmFjdG9yeQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmpvYnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vam9icy9hZGFwdGVycy9leGVjdXRhYmxlL2VtZi9FeHBlcmltZW50RXhlY3V0YWJsZUFkYXB0ZXJGYWN0b3J5LmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uam9icy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9qb2JzL2FkYXB0ZXJzL2V4ZWN1dGFibGUvZW1mL0V4cGVyaW1lbnRFeGVjdXRhYmxlQWRhcHRlckZhY3RvcnkuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zOTk2ZjU4Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmpvYnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vam9icy9hZGFwdGVycy9leGVjdXRhYmxlL2VtZi9FeHBlcmltZW50RXhlY3V0YWJsZUFkYXB0ZXJGYWN0b3J5LmphdmEKQEAgLTAsMCArMSw3NyBAQAorLy8gRXhwZXJpbWVudEV4ZWN1dGFibGVBZGFwdGVyRmFjdG9yeS5qYXZhCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uam9icy5hZGFwdGVycy5leGVjdXRhYmxlLmVtZjsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5BZGFwdGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5leHBlcmltZW50LkV4cGVyaW1lbnQ7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmV4cGVyaW1lbnQudXRpbC5FeHBlcmltZW50QWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5qb2JzLmJhdGNoLkJhdGNoTWFuYWdlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmpvYnMuZXhlY3V0aW9uLklFeGVjdXRhYmxlOworCisvKioKKyAqIFRoaXMgY2xhc3MgaXMgYW4ge0BsaW5rIEV4ZWN1dGFibGVBZGFwdGVyRmFjdG9yeX0gdGhhdCBjcmVhdGVzIGFkYXB0ZXJzIHRoYXQKKyAqIGFkYXB0IHtAbGluayBFeHBlcmltZW50fXMgdG8ge0BsaW5rIElFeGVjdXRhYmxlfXMuCisgKi8KK3B1YmxpYyBjbGFzcyBFeHBlcmltZW50RXhlY3V0YWJsZUFkYXB0ZXJGYWN0b3J5IGV4dGVuZHMKKwkJRXhwZXJpbWVudEFkYXB0ZXJGYWN0b3J5IGltcGxlbWVudHMgRXhlY3V0YWJsZUFkYXB0ZXJGYWN0b3J5IHsKKworCS8qKgorCSAqIERlZmF1bHQgQ29uc3RydWN0b3IKKwkgKi8KKwlwdWJsaWMgRXhwZXJpbWVudEV4ZWN1dGFibGVBZGFwdGVyRmFjdG9yeSgpIHsKKwkJc3VwZXIoKTsKKwkJRXhlY3V0YWJsZUFkYXB0ZXJGYWN0b3J5LklOU1RBTkNFLmFkZEFkYXB0ZXJGYWN0b3J5KHRoaXMpOworCX0KKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmV4cGVyaW1lbnQudXRpbC5FeHBlcmltZW50QWRhcHRlckZhY3RvcnkjY3JlYXRlRXhwZXJpbWVudEFkYXB0ZXIoKQorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZUV4cGVyaW1lbnRBZGFwdGVyKCkgeworCQlyZXR1cm4gbmV3IEV4cGVyaW1lbnRFeGVjdXRhYmxlQWRhcHRlcigpOworCX0KKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNjZW5hcmlvLnV0aWwuU2NlbmFyaW9BZGFwdGVyRmFjdG9yeSNpc0ZhY3RvcnlGb3JUeXBlKGphdmEubGFuZy5PYmplY3QpCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIGJvb2xlYW4gaXNGYWN0b3J5Rm9yVHlwZShmaW5hbCBPYmplY3QgdHlwZSkgeworCQlyZXR1cm4gdHlwZSA9PSBJRXhlY3V0YWJsZS5jbGFzcyB8fCBzdXBlci5pc0ZhY3RvcnlGb3JUeXBlKHR5cGUpOworCX0KKworCS8qKgorCSAqIFRoaXMgY2xhc3MgYWRhcHRzIGFuIHtAbGluayBFeHBlcmltZW50fSB0byBhbiB7QGxpbmsgSUV4ZWN1dGFibGV9LgorCSAqLworCXByb3RlY3RlZCBzdGF0aWMgY2xhc3MgRXhwZXJpbWVudEV4ZWN1dGFibGVBZGFwdGVyIGV4dGVuZHMKKwkJCUV4ZWN1dGFibGVBZGFwdGVyIGltcGxlbWVudHMgQWRhcHRlciB7CisKKwkJLyoqCisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5qb2JzLmFkYXB0ZXJzLmV4ZWN1dGFibGUuZW1mLkV4ZWN1dGFibGVBZGFwdGVyI3J1bigpCisJCSAqLworCQlAT3ZlcnJpZGUKKwkJcHVibGljIHZvaWQgcnVuKCkgeworCQkJQmF0Y2hNYW5hZ2VyLklOU1RBTkNFLmNyZWF0ZUFuZFJ1bkJhdGNoKChFeHBlcmltZW50KSBnZXRUYXJnZXQoKSk7CisJCX0KKworCQkvKioKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmpvYnMuYWRhcHRlcnMuZXhlY3V0YWJsZS5lbWYuRXhlY3V0YWJsZUFkYXB0ZXIjc3RlcCgpCisJCSAqLworCQlAT3ZlcnJpZGUKKwkJcHVibGljIHZvaWQgc3RlcCgpIHsKKwkJCXN1cGVyLnN0ZXAoKTsKKwkJCS8vIFRPRE8gaW1wbGVtZW50IEV4cGVyaW1lbnRFeGVjdXRhYmxlQWRhcHRlci5zdGVwKCkKKwkJCS8vIEJhdGNoTWFuYWdlci5JTlNUQU5DRS5jcmVhdGVBbmRTdGVwQmF0Y2goKEV4cGVyaW1lbnQpCisJCQkvLyBnZXRUYXJnZXQoKSk7CisJCX0KKwl9IC8vIEV4cGVyaW1lbnRFeGVjdXRhYmxlQWRhcHRlcgorfSAvLyBFeHBlcmltZW50RXhlY3V0YWJsZUFkYXB0ZXJGYWN0b3J5CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uam9icy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9qb2JzL2FkYXB0ZXJzL2V4ZWN1dGFibGUvZW1mL1NjZW5hcmlvRXhlY3V0YWJsZUFkYXB0ZXJGYWN0b3J5LmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uam9icy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9qb2JzL2FkYXB0ZXJzL2V4ZWN1dGFibGUvZW1mL1NjZW5hcmlvRXhlY3V0YWJsZUFkYXB0ZXJGYWN0b3J5LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWI1Yjg1YgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5qb2JzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2pvYnMvYWRhcHRlcnMvZXhlY3V0YWJsZS9lbWYvU2NlbmFyaW9FeGVjdXRhYmxlQWRhcHRlckZhY3RvcnkuamF2YQpAQCAtMCwwICsxLDc2IEBACisvLyBTY2VuYXJpb0V4ZWN1dGFibGVBZGFwdGVyRmFjdG9yeS5qYXZhCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uam9icy5hZGFwdGVycy5leGVjdXRhYmxlLmVtZjsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5BZGFwdGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zY2VuYXJpby5TY2VuYXJpbzsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2NlbmFyaW8udXRpbC5TY2VuYXJpb0FkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uam9icy5leGVjdXRpb24uSUV4ZWN1dGFibGU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5qb2JzLnNpbXVsYXRpb24uU2ltdWxhdGlvbk1hbmFnZXI7CisKKy8qKgorICogVGhpcyBjbGFzcyBpcyBhbiB7QGxpbmsgRXhlY3V0YWJsZUFkYXB0ZXJGYWN0b3J5fSB0aGF0IGNyZWF0ZXMgYWRhcHRlcnMgdGhhdAorICogYWRhcHQge0BsaW5rIFNjZW5hcmlvfXMgdG8ge0BsaW5rIElFeGVjdXRhYmxlfXMuCisgKi8KK3B1YmxpYyBjbGFzcyBTY2VuYXJpb0V4ZWN1dGFibGVBZGFwdGVyRmFjdG9yeSBleHRlbmRzIFNjZW5hcmlvQWRhcHRlckZhY3RvcnkKKwkJaW1wbGVtZW50cyBFeGVjdXRhYmxlQWRhcHRlckZhY3RvcnkgeworCisJLyoqCisJICogRGVmYXVsdCBDb25zdHJ1Y3RvcgorCSAqLworCXB1YmxpYyBTY2VuYXJpb0V4ZWN1dGFibGVBZGFwdGVyRmFjdG9yeSgpIHsKKwkJc3VwZXIoKTsKKwkJRXhlY3V0YWJsZUFkYXB0ZXJGYWN0b3J5LklOU1RBTkNFLmFkZEFkYXB0ZXJGYWN0b3J5KHRoaXMpOworCX0KKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNjZW5hcmlvLnV0aWwuU2NlbmFyaW9BZGFwdGVyRmFjdG9yeSNjcmVhdGVTY2VuYXJpb0FkYXB0ZXIoKQorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZVNjZW5hcmlvQWRhcHRlcigpIHsKKwkJcmV0dXJuIG5ldyBTY2VuYXJpb0V4ZWN1dGFibGVBZGFwdGVyKCk7CisJfSAvLyBjcmVhdGVTY2VuYXJpb0FkYXB0ZXIKKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNjZW5hcmlvLnV0aWwuU2NlbmFyaW9BZGFwdGVyRmFjdG9yeSNpc0ZhY3RvcnlGb3JUeXBlKGphdmEubGFuZy5PYmplY3QpCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIGJvb2xlYW4gaXNGYWN0b3J5Rm9yVHlwZShmaW5hbCBPYmplY3QgdHlwZSkgeworCQlyZXR1cm4gdHlwZSA9PSBJRXhlY3V0YWJsZS5jbGFzcyB8fCBzdXBlci5pc0ZhY3RvcnlGb3JUeXBlKHR5cGUpOworCX0KKworCS8qKgorCSAqIFRoaXMgY2xhc3MgYWRhcHRzIGEge0BsaW5rIFNjZW5hcmlvfSB0byBhbiB7QGxpbmsgSUV4ZWN1dGFibGV9LgorCSAqLworCXByb3RlY3RlZCBzdGF0aWMgY2xhc3MgU2NlbmFyaW9FeGVjdXRhYmxlQWRhcHRlciBleHRlbmRzIEV4ZWN1dGFibGVBZGFwdGVyIHsKKworCQkvKioKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmpvYnMuYWRhcHRlcnMuZXhlY3V0YWJsZS5lbWYuRXhlY3V0YWJsZUFkYXB0ZXIjcnVuKCkKKwkJICovCisJCUBPdmVycmlkZQorCQlwdWJsaWMgdm9pZCBydW4oKSB7CisJCQlTaW11bGF0aW9uTWFuYWdlci5nZXRNYW5hZ2VyKCkuY3JlYXRlQW5kUnVuU2ltdWxhdGlvbigKKwkJCQkJKFNjZW5hcmlvKSBnZXRUYXJnZXQoKSk7CisJCX0KKworCQkvKioKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmpvYnMuYWRhcHRlcnMuZXhlY3V0YWJsZS5lbWYuRXhlY3V0YWJsZUFkYXB0ZXIjc3RlcCgpCisJCSAqLworCQlAT3ZlcnJpZGUKKwkJcHVibGljIHZvaWQgc3RlcCgpIHsKKwkJCVNpbXVsYXRpb25NYW5hZ2VyLmdldE1hbmFnZXIoKS5jcmVhdGVBbmRTdGVwU2ltdWxhdGlvbigKKwkJCQkJKFNjZW5hcmlvKSBnZXRUYXJnZXQoKSk7CisJCX0KKwl9IC8vIFNjZW5hcmlvRXhlY3V0YWJsZUFkYXB0ZXIKKworfSAvLyBTY2VuYXJpb0V4ZWN1dGFibGVBZGFwdGVyRmFjdG9yeQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmpvYnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vam9icy9hZGFwdGVycy9pZGVudGlmaWFibGUvQ29uZmlndXJhdGlvbkVsZW1lbnRJZGVudGlmaWFibGVBZGFwdGVyRmFjdG9yeS5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmpvYnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vam9icy9hZGFwdGVycy9pZGVudGlmaWFibGUvQ29uZmlndXJhdGlvbkVsZW1lbnRJZGVudGlmaWFibGVBZGFwdGVyRmFjdG9yeS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg5MWY4MmQKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uam9icy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9qb2JzL2FkYXB0ZXJzL2lkZW50aWZpYWJsZS9Db25maWd1cmF0aW9uRWxlbWVudElkZW50aWZpYWJsZUFkYXB0ZXJGYWN0b3J5LmphdmEKQEAgLTAsMCArMSw0NiBAQAorLy8gQ29uZmlndXJhdGlvbkVsZW1lbnRJZGVudGlmaWFibGVBZGFwdGVyRmFjdG9yeS5qYXZhCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uam9icy5hZGFwdGVycy5pZGVudGlmaWFibGU7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklDb25maWd1cmF0aW9uRWxlbWVudDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGxhdGZvcm07CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlVSSTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLkR1YmxpbkNvcmU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5JZGVudGlmaWFibGU7CisKKy8qKgorICogVGhpcyBjbGFzcyBpcyBhbiB7QGxpbmsgSUFkYXB0ZXJGYWN0b3J5fSB0aGF0IGFkYXB0cworICoge0BsaW5rIElDb25maWd1cmF0aW9uRWxlbWVudH1zIHRvIHtAbGluayBJZGVudGlmaWFibGV9cy4KKyAqLworcHVibGljIGNsYXNzIENvbmZpZ3VyYXRpb25FbGVtZW50SWRlbnRpZmlhYmxlQWRhcHRlckZhY3RvcnkgZXh0ZW5kcworCQlJZGVudGlmaWFibGVBZGFwdGVyRmFjdG9yeSB7CisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JQWRhcHRlckZhY3RvcnkjZ2V0QWRhcHRlcihqYXZhLmxhbmcuT2JqZWN0LAorCSAqICAgICAgamF2YS5sYW5nLkNsYXNzKQorCSAqLworCXB1YmxpYyBPYmplY3QgZ2V0QWRhcHRlcihmaW5hbCBPYmplY3QgYWRhcHRhYmxlT2JqZWN0LAorCQkJZmluYWwgQ2xhc3MgYWRhcHRlclR5cGUpIHsKKwkJSWRlbnRpZmlhYmxlIHJldFZhbHVlID0gbnVsbDsKKwkJaWYgKGFkYXB0YWJsZU9iamVjdCBpbnN0YW5jZW9mIElDb25maWd1cmF0aW9uRWxlbWVudAorCQkJCSYmIGFkYXB0ZXJUeXBlLmVxdWFscyhJZGVudGlmaWFibGUuY2xhc3MpKSB7CisJCQkvLyBZZXMKKwkJCXJldFZhbHVlID0gKElkZW50aWZpYWJsZSkgUGxhdGZvcm0uZ2V0QWRhcHRlck1hbmFnZXIoKS5nZXRBZGFwdGVyKAorCQkJCQlVUkkuY3JlYXRlVVJJKCgoSUNvbmZpZ3VyYXRpb25FbGVtZW50KSBhZGFwdGFibGVPYmplY3QpCisJCQkJCQkJLmdldEF0dHJpYnV0ZShEdWJsaW5Db3JlLklERU5USUZJRVIpKSwKKwkJCQkJSWRlbnRpZmlhYmxlLmNsYXNzKTsKKwkJfSAvLyBpZgorCisJCXJldHVybiByZXRWYWx1ZTsKKwl9IC8vIGdldEFkYXB0ZXIKK30gLy8gQ29uZmlndXJhdGlvbkVsZW1lbnRJZGVudGlmaWFibGVBZGFwdGVyRmFjdG9yeQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmpvYnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vam9icy9hZGFwdGVycy9pZGVudGlmaWFibGUvRmlsZUlkZW50aWZpYWJsZUFkYXB0ZXJGYWN0b3J5LmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uam9icy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9qb2JzL2FkYXB0ZXJzL2lkZW50aWZpYWJsZS9GaWxlSWRlbnRpZmlhYmxlQWRhcHRlckZhY3RvcnkuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YzgwYmE1Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmpvYnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vam9icy9hZGFwdGVycy9pZGVudGlmaWFibGUvRmlsZUlkZW50aWZpYWJsZUFkYXB0ZXJGYWN0b3J5LmphdmEKQEAgLTAsMCArMSw0MyBAQAorLy8gRmlsZUlkZW50aWZpYWJsZUFkYXB0ZXJGYWN0b3J5LmphdmEKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5qb2JzLmFkYXB0ZXJzLmlkZW50aWZpYWJsZTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JRmlsZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGxhdGZvcm07CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlVSSTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLklkZW50aWZpYWJsZTsKKworLyoqCisgKiBUaGlzIGNsYXNzIGlzIGFuIHtAbGluayBJQWRhcHRlckZhY3Rvcnl9IHRoYXQgYWRhcHRzIHtAbGluayBJRmlsZX1zIHRvCisgKiB7QGxpbmsgSWRlbnRpZmlhYmxlfXMuCisgKi8KK3B1YmxpYyBjbGFzcyBGaWxlSWRlbnRpZmlhYmxlQWRhcHRlckZhY3RvcnkgZXh0ZW5kcyBJZGVudGlmaWFibGVBZGFwdGVyRmFjdG9yeSB7CisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JQWRhcHRlckZhY3RvcnkjZ2V0QWRhcHRlcihqYXZhLmxhbmcuT2JqZWN0LAorCSAqICAgICAgamF2YS5sYW5nLkNsYXNzKQorCSAqLworCXB1YmxpYyBPYmplY3QgZ2V0QWRhcHRlcihmaW5hbCBPYmplY3QgYWRhcHRhYmxlT2JqZWN0LAorCQkJZmluYWwgQ2xhc3MgYWRhcHRlclR5cGUpIHsKKwkJSWRlbnRpZmlhYmxlIHJldFZhbHVlID0gbnVsbDsKKwkJaWYgKGFkYXB0YWJsZU9iamVjdCBpbnN0YW5jZW9mIElGaWxlCisJCQkJJiYgYWRhcHRlclR5cGUuZXF1YWxzKElkZW50aWZpYWJsZS5jbGFzcykpIHsKKwkJCS8vIFllcworCQkJcmV0VmFsdWUgPSAoSWRlbnRpZmlhYmxlKSBQbGF0Zm9ybS5nZXRBZGFwdGVyTWFuYWdlcigpLmdldEFkYXB0ZXIoCisJCQkJCVVSSS5jcmVhdGVGaWxlVVJJKCgoSUZpbGUpIGFkYXB0YWJsZU9iamVjdCkuZ2V0TG9jYXRpb24oKQorCQkJCQkJCS50b1N0cmluZygpKSwgSWRlbnRpZmlhYmxlLmNsYXNzKTsKKwkJfSAvLyBpZgorCQlyZXR1cm4gcmV0VmFsdWU7CisJfSAvLyBnZXRBZGFwdGVyCisKK30gLy8gRmlsZUlkZW50aWZpYWJsZUFkYXB0ZXJGYWN0b3J5CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uam9icy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9qb2JzL2FkYXB0ZXJzL2lkZW50aWZpYWJsZS9JZGVudGlmaWFibGVBZGFwdGVyRmFjdG9yeS5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmpvYnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vam9icy9hZGFwdGVycy9pZGVudGlmaWFibGUvSWRlbnRpZmlhYmxlQWRhcHRlckZhY3RvcnkuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NjlhODQ2Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmpvYnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vam9icy9hZGFwdGVycy9pZGVudGlmaWFibGUvSWRlbnRpZmlhYmxlQWRhcHRlckZhY3RvcnkuamF2YQpAQCAtMCwwICsxLDMxIEBACisvLyBJZGVudGlmaWFibGVBZGFwdGVyRmFjdG9yeS5qYXZhCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uam9icy5hZGFwdGVycy5pZGVudGlmaWFibGU7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLklkZW50aWZpYWJsZTsKKworLyoqCisgKiBUaGlzIGNsYXNzIGlzIGFuIHtAbGluayBJQWRhcHRlckZhY3Rvcnl9IHRoYXQgYWRhcHRzIHtAbGluayBPYmplY3R9cyB0bworICoge0BsaW5rIElkZW50aWZpYWJsZX1zLgorICovCithYnN0cmFjdCBwdWJsaWMgY2xhc3MgSWRlbnRpZmlhYmxlQWRhcHRlckZhY3RvcnkgaW1wbGVtZW50cyBJQWRhcHRlckZhY3RvcnkgeworCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSUFkYXB0ZXJGYWN0b3J5I2dldEFkYXB0ZXJMaXN0KCkKKwkgKi8KKwlwdWJsaWMgQ2xhc3NbXSBnZXRBZGFwdGVyTGlzdCgpIHsKKwkJcmV0dXJuIG5ldyBDbGFzc1tdIHsgSWRlbnRpZmlhYmxlLmNsYXNzIH07CisJfQorCit9IC8vIElkZW50aWZpYWJsZUFkYXB0ZXJGYWN0b3J5CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uam9icy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9qb2JzL2FkYXB0ZXJzL2lkZW50aWZpYWJsZS9VUklJZGVudGlmaWFibGVBZGFwdGVyRmFjdG9yeS5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmpvYnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vam9icy9hZGFwdGVycy9pZGVudGlmaWFibGUvVVJJSWRlbnRpZmlhYmxlQWRhcHRlckZhY3RvcnkuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MGJhMGQ2Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmpvYnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vam9icy9hZGFwdGVycy9pZGVudGlmaWFibGUvVVJJSWRlbnRpZmlhYmxlQWRhcHRlckZhY3RvcnkuamF2YQpAQCAtMCwwICsxLDU0IEBACisvLyBVUklJZGVudGlmaWFibGVBZGFwdGVyRmFjdG9yeS5qYXZhCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uam9icy5hZGFwdGVycy5pZGVudGlmaWFibGU7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlVSSTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUucmVzb3VyY2UuUmVzb3VyY2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnJlc291cmNlLlJlc291cmNlU2V0OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5yZXNvdXJjZS5pbXBsLlJlc291cmNlU2V0SW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLklkZW50aWZpYWJsZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmpvYnMuQWN0aXZhdG9yOworCisvKioKKyAqIFRoaXMgY2xhc3MgaXMgYW4ge0BsaW5rIElBZGFwdGVyRmFjdG9yeX0gdGhhdCBhZGFwdHMKKyAqIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuVVJJfXMgdG8ge0BsaW5rIElkZW50aWZpYWJsZX1zLgorICovCitwdWJsaWMgY2xhc3MgVVJJSWRlbnRpZmlhYmxlQWRhcHRlckZhY3RvcnkgZXh0ZW5kcyBJZGVudGlmaWFibGVBZGFwdGVyRmFjdG9yeSB7CisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JQWRhcHRlckZhY3RvcnkjZ2V0QWRhcHRlcihqYXZhLmxhbmcuT2JqZWN0LAorCSAqICAgICAgamF2YS5sYW5nLkNsYXNzKQorCSAqLworCXB1YmxpYyBPYmplY3QgZ2V0QWRhcHRlcihmaW5hbCBPYmplY3QgYWRhcHRhYmxlT2JqZWN0LAorCQkJZmluYWwgQ2xhc3MgYWRhcHRlclR5cGUpIHsKKwkJSWRlbnRpZmlhYmxlIHJldFZhbHVlID0gbnVsbDsKKwkJaWYgKGFkYXB0YWJsZU9iamVjdCBpbnN0YW5jZW9mIFVSSQorCQkJCSYmIGFkYXB0ZXJUeXBlLmVxdWFscyhJZGVudGlmaWFibGUuY2xhc3MpKSB7CisJCQkvLyBZZXMKKwkJCWZpbmFsIFVSSSBpZGVudGlmYWJsZVVSSSA9IChVUkkpIGFkYXB0YWJsZU9iamVjdDsKKwkJCXRyeSB7CisJCQkJZmluYWwgUmVzb3VyY2VTZXQgcmVzb3VyY2VTZXQgPSBuZXcgUmVzb3VyY2VTZXRJbXBsKCk7CisJCQkJZmluYWwgUmVzb3VyY2UgcmVzb3VyY2UgPSByZXNvdXJjZVNldC5nZXRSZXNvdXJjZSgKKwkJCQkJCWlkZW50aWZhYmxlVVJJLCB0cnVlKTsKKwkJCQlyZXRWYWx1ZSA9IChJZGVudGlmaWFibGUpIHJlc291cmNlLmdldENvbnRlbnRzKCkuZ2V0KDApOworCQkJfSBjYXRjaCAoZmluYWwgRXhjZXB0aW9uIGUpIHsKKwkJCQlBY3RpdmF0b3IubG9nRXJyb3IoIlRoZSByZXNvdXJjZSBcIiIKKwkJCQkJCSsgaWRlbnRpZmFibGVVUkkudG9TdHJpbmcoKQorCQkJCQkJKyAiXCIgd2FzIG5vdCBmb3VuZCBvciB3YXMgb2YgdGhlIHdyb25nIGZvcm1hdCIsIGUpOworCQkJCXJldFZhbHVlID0gbnVsbDsKKwkJCX0KKwkJfSAvLyBpZiBVUkkKKwkJcmV0dXJuIHJldFZhbHVlOworCX0KKworfSAvLyBVUklJZGVudGlmaWFibGVBZGFwdGVyRmFjdG9yeQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmpvYnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vam9icy9iYXRjaC9CYXRjaC5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmpvYnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vam9icy9iYXRjaC9CYXRjaC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE5N2ZkM2IKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uam9icy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9qb2JzL2JhdGNoL0JhdGNoLmphdmEKQEAgLTAsMCArMSw1NTAgQEAKKy8vIEJhdGNoLmphdmEKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5qb2JzLmJhdGNoOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGphdmEudGV4dC5NZXNzYWdlRm9ybWF0OworaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CitpbXBvcnQgamF2YS51dGlsLmNvbmN1cnJlbnQuQ29weU9uV3JpdGVBcnJheUxpc3Q7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVByb2dyZXNzTW9uaXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU3RhdHVzOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmRpYWxvZ3MuRXJyb3JEaWFsb2c7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmV4cGVyaW1lbnQuRXhwZXJpbWVudDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmpvYnMuQWN0aXZhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uam9icy5EaXNwbGF5U2FmZUV4ZWN1dG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uam9icy5leGVjdXRpb24uRXhlY3V0YWJsZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmpvYnMuc2ltdWxhdGlvbi5JU2ltdWxhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmpvYnMuc2ltdWxhdGlvbi5JU2ltdWxhdGlvbkxpc3RlbmVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uam9icy5zaW11bGF0aW9uLlNpbXVsYXRpb25FdmVudDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmpvYnMuc2ltdWxhdGlvbi5TaW11bGF0aW9uTWFuYWdlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmpvYnMuc2ltdWxhdGlvbi5TaW11bGF0aW9uU3RhdGU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuRGlzcGxheTsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5JV29ya2JlbmNoV2luZG93OworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLlBsYXRmb3JtVUk7CisKKy8qKgorICogVGhpcyBjbGFzcyBpcyB0aGUgcnVudGltZSBoYW5kbGUgZm9yIHRoZSBleGVjdXRpb24gb2YgYW4ge0BsaW5rIEV4cGVyaW1lbnR9LgorICogRWFjaCB7QGxpbmsgRXhwZXJpbWVudH0gaGFzIGEge0BsaW5rIFNjZW5hcmlvfSBhbmQgYSBjb2xsZWN0aW9uIG9mCisgKiB7QGxpbmsgTW9kaWZpZXJ9cy4gVGhlIHtAbGluayBTY2VuYXJpb30gZm9ybXMgdGhlIGJhc2lzIGZvciB0aGUgY3JlYXRpb24gb2YgYQorICogc2V0IG9mIGRlcml2ZWQge0BsaW5rIFNjZW5hcmlvfXMgdGhhdCBhcmUgY3JlYXRlZCBieSB0aGUgYXBwbGljYXRpb24gb2YgdGhlCisgKiB7QGxpbmsgRXhwZXJpbWVudH0ncyB7QGxpbmsgTW9kaWZpZXJ9cy4gRWFjaCBvZiB0aGUgZGVyaXZlZCB7QGxpbmsgU2NlbmFyaW99cworICogaXMgZXhlY3V0ZWQgYXMgYSB7QGxpbmsgU2ltdWxhdGlvbn0uIEEge0BsaW5rIEJhdGNofSBtYWludGFpbnMgdGhlIGxpbmsKKyAqIGJldHdlZW4gYW4ge0BsaW5rIEV4cGVyaW1lbnR9IGFuZCB0aGUgcmVzdWx0aW5nIHtAbGluayBTaW11bGF0aW9ufXMuCisgKiA8cD4KKyAqIEVhY2gge0BsaW5rIEJhdGNofSBoYXMgYSB1bmlxdWUgc2VxdWVuY2UgbnVtYmVyIGFuZCBpdHMge0BsaW5rIFNpbXVsYXRpb259cworICogY2FuIGJlIHJ1biBzZXF1ZW50aWFsbHkgb3IgaW4gcGFyYWxsZWwgYW5kIGluIHRoZSAiZm9yZWdyb3VuZCIgKGkuZS4sIGFwcGVhcgorICogaW4gdGhlIEdVSSkgb3IgaW4gdGhlICJiYWNrZ3JvdW5kIiAoaS5lLiwgbm90IGFwcGVhciBpbiB0aGUgR1VJKS4KKyAqLworcHVibGljIGNsYXNzIEJhdGNoIGV4dGVuZHMgRXhlY3V0YWJsZSBpbXBsZW1lbnRzIElCYXRjaCwgSVNpbXVsYXRpb25MaXN0ZW5lciB7CisKKwkvKioKKwkgKiBUaGUgY3VycmVudCBzdGF0ZSBvZiB0aGUge0BsaW5rIEJhdGNofQorCSAqLworCXByaXZhdGUgQmF0Y2hTdGF0ZSBiYXRjaFN0YXRlID0gQmF0Y2hTdGF0ZS5QQVVTRUQ7CisKKwkvKioKKwkgKiBUaGUge0BsaW5rIEV4cGVyaW1lbnR9IHRoYXQgaXMgYmVpbmcgZXhlY3V0ZWQgYnkgdGhlIHtAbGluayBCYXRjaH0uCisJICovCisJcHJpdmF0ZSBFeHBlcmltZW50IGV4cGVyaW1lbnQgPSBudWxsOworCisJLyoqCisJICogVGhlIFNldCBvZiB7QGxpbmsgSVNpbXVsYXRpb259cyB0aGF0IGFyZSBhY3RpdmVseSBydW5uaW5nIGFzIHBhcnQgb2YgdGhlCisJICoge0BsaW5rIEJhdGNofTsKKwkgKi8KKwlwcml2YXRlIGZpbmFsIExpc3Q8SVNpbXVsYXRpb24+IGFjdGl2ZVNpbXVsYXRpb25zID0gbmV3IEFycmF5TGlzdDxJU2ltdWxhdGlvbj4oKTsKKworCS8vIFRPRE8gdGhlc2UgbmVlZCB0byBiZSBpbml0aWFsaXplZCBmcm9tIHByZWZlcmVuY2VzCisJLy8gSWYgdGhpcyBpcyBldmVyIGZhbHNlLCB5b3UgbmVlZCB0byByZS1pbXBsZW1lbnQgcnVuKElQcm9ncmVzc01vbml0b3IpIHRvCisJLy8gaGFuZGxlIHBhcmFsbGVsIFNpbXVsYXRpb25zCisJcHJpdmF0ZSBib29sZWFuIHJ1bm5pbmdTaW11bGF0aW9uc1NlcXVlbnRpYWxseSA9IHRydWU7CisKKwlwcml2YXRlIGJvb2xlYW4gcnVubmluZ0luQmFja2dyb3VuZCA9IGZhbHNlOworCisJLyoqCisJICogVGhpcyBmbGFnIGluZGljYXRlcyB3aGV0aGVyIHRoZSB7QGxpbmsgQmF0Y2h9IHNob3VsZCBjb250aW51ZSBleGVjdXRpbmcKKwkgKiBvciBub3QuIElmIGl0IGJlY29tZXMgPGNvZGU+ZmFsc2U8L2NvZGU+LCB0aGVuIHRoZSB7QGxpbmsgQmF0Y2h9IHdpbGwKKwkgKiBraWxsIGFsbCBvZiBpdHMge0BsaW5rIElTaW11bGF0aW9ufXMuCisJICovCisJcHJpdmF0ZSBib29sZWFuIGtlZXBSdW5uaW5nID0gdHJ1ZTsKKworCS8qKgorCSAqIFRoZSBjb2xsZWN0aW9uIG9mIHtAbGluayBJQmF0Y2hMaXN0ZW5lcn0gd2FpdGluZyB0byBiZSB0b2xkIGFib3V0CisJICoge0BsaW5rIEJhdGNoRXZlbnR9J3MKKwkgKi8KKwlwcml2YXRlIGZpbmFsIExpc3Q8SUJhdGNoTGlzdGVuZXI+IGxpc3RlbmVycyA9IG5ldyBDb3B5T25Xcml0ZUFycmF5TGlzdDxJQmF0Y2hMaXN0ZW5lcj4oKTsKKworCS8qKgorCSAqIFRoZSBjb2xsZWN0aW9uIG9mIHtAbGluayBJQmF0Y2hMaXN0ZW5lclN5bmN9IHdhaXRpbmcgdG8gYmUgdG9sZCBhYm91dAorCSAqIHtAbGluayBCYXRjaEV2ZW50fSdzCisJICovCisJcHJpdmF0ZSBmaW5hbCBMaXN0PElCYXRjaExpc3RlbmVyU3luYz4gbGlzdGVuZXJzU3luYyA9IG5ldyBDb3B5T25Xcml0ZUFycmF5TGlzdDxJQmF0Y2hMaXN0ZW5lclN5bmM+KCk7CisKKwlwcml2YXRlIElQcm9ncmVzc01vbml0b3IgbW9uaXRvcjsKKworCXByaXZhdGUgYm9vbGVhbiBjYW5jZWxSZXF1ZXN0ZWQ7CisKKwkvKioKKwkgKiBDb25zdHJ1Y3RvcgorCSAqIAorCSAqIEBwYXJhbSBleHBlcmltZW50CisJICogICAgICAgICAgICB0aGUge0BsaW5rIEV4cGVyaW1lbnR9IHRoYXQgZm9ybXMgdGhlIGJhc2lzIG9mIHRoaXMKKwkgKiAgICAgICAgICAgIHtAbGluayBCYXRjaH0KKwkgKiAKKwkgKiBAcGFyYW0gc2VxdWVuY2VOdW1iZXIKKwkgKiAgICAgICAgICAgIHRoZSB1bmlxdWUgc2VxdWVuY2UgbnVtYmVyIG9mIHRoaXMge0BsaW5rIEJhdGNofS4gVGhpcyBpcworCSAqICAgICAgICAgICAgdHlwaWNhbGx5IHByb3ZpZGVkIGJ5IHRoZSB7QGxpbmsgQmF0Y2hNYW5hZ2VyfS4KKwkgKi8KKwlCYXRjaChmaW5hbCBFeHBlcmltZW50IGV4cGVyaW1lbnQsIGZpbmFsIGludCBzZXF1ZW5jZU51bWJlcikgeworCQlzdXBlcigiQmF0Y2g6ICIgKyBzZXF1ZW5jZU51bWJlciwgc2VxdWVuY2VOdW1iZXIpOworCQl0aGlzLmV4cGVyaW1lbnQgPSBleHBlcmltZW50OworCX0gLy8gQmF0Y2gKKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLmpvYnMuSm9iI3J1bihvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVByb2dyZXNzTW9uaXRvcikKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgSVN0YXR1cyBydW4oZmluYWwgSVByb2dyZXNzTW9uaXRvciBtb25pdG9yKSB7CisJCUlTdGF0dXMgcmV0VmFsdWUgPSBTdGF0dXMuT0tfU1RBVFVTOworCQl0aGlzLm1vbml0b3IgPSBtb25pdG9yOworCQl0cnkgeworCQkJc2V0QmF0Y2hTdGF0ZShCYXRjaFN0YXRlLlJVTk5JTkcpOworCQkJbW9uaXRvci5iZWdpblRhc2soIkJhdGNoOiAiICsgZ2V0U2VxdWVuY2VOdW1iZXIoKSwgZ2V0VG90YWxXb3JrKCkpOworCisJCQkvLyBJbml0aWFsaXplIHRoZSBzY2VuYXJpbyB0aGF0IGlzIHBhcnQgb2YgdGhlIGV4cGVyaW1lbnQKKwkJCWdldEV4cGVyaW1lbnQoKS5pbml0U2NlbmFyaW8oKTsKKwkJCQorCQkJLy8gSXRlcmF0ZSB0aHJvdWdoIGVhY2ggb2YgdGhlIFNpbXVsYXRpb25zIHRvIHJ1biBhbmQgYmVnaW4gdGhlaXIKKwkJCS8vIGV4ZWN1dGlvbi4KKwkJCWZvciAoSVNpbXVsYXRpb24gc2ltdWxhdGlvbiA9IGdldE5leHRTaW11bGF0aW9uVG9SdW4oKTsga2VlcFJ1bm5pbmcKKwkJCQkJJiYgc2ltdWxhdGlvbiAhPSBudWxsOyBzaW11bGF0aW9uID0gZ2V0TmV4dFNpbXVsYXRpb25Ub1J1bigpKSB7CisJCQkJc2V0QmF0Y2hTdGF0ZShCYXRjaFN0YXRlLlJVTk5JTkcpOworCisJCQkJc3RhcnRTaW11bGF0aW9uUnVubmluZyhzaW11bGF0aW9uKTsKKworCQkJCS8vIEFyZSB3ZSBydW5uaW5nIHRoZSBzaW11bGF0aW9ucyBzZXF1ZW50aWFsbHk/CisJCQkJaWYgKGlzUnVubmluZ1NpbXVsYXRpb25zU2VxdWVudGlhbGx5KCkpIHsKKwkJCQkJLy8gWWVzCisJCQkJCS8vIFRoZW4gd2Ugb25seSBzdGFydCBvbmUgaGVyZSBhbmQgdGhlbiBoYW5kbGUgdGhlIHJlc3QgaW4KKwkJCQkJLy8gc2ltdWxhdGlvbkNoYW5nZWQoKQorCQkJCQlicmVhazsKKwkJCQl9IC8vIGlmCisJCQkJLy8gQ2FuY2VsZWQ/CisJCQkJaWYgKG1vbml0b3IuaXNDYW5jZWxlZCgpKSB7CisJCQkJCS8vIFllcworCQkJCQljYW5jZWxSZXF1ZXN0ZWQgPSB0cnVlOworCQkJCQlzdG9wQWxsU2ltdWxhdGlvbnMoKTsKKwkJCQkJcmV0VmFsdWUgPSBTdGF0dXMuQ0FOQ0VMX1NUQVRVUzsKKwkJCQl9CisJCQl9IC8vIGZvciBlYWNoIFNpbXVsYXRpb24KKworCQkJLy8gSWYgd2UncmUgcnVubmluZyB0aGUgU2ltdWxhdGlvbnMgaW4gcGFyYWxsZWwgdGhlbiB3ZSBuZWVkIHRvCisJCQkvLyBwYXVzZSBoZXJlIGFuZCB3YWl0IGZvciB0aGVtIGFsbCB0byBlbmQuCisJCX0gY2F0Y2ggKGZpbmFsIEV4Y2VwdGlvbiBlKSB7CisJCQloYW5kbGVFeGNlcHRpb24oZSk7CisJCQlrZWVwUnVubmluZyA9IGZhbHNlOworCisJCQkvLyBBcmUgdGhlcmUgYW55IFNpbXVsYXRpb25zIHJ1bm5pbmc/CisJCQlpZiAoYWN0aXZlU2ltdWxhdGlvbnMuc2l6ZSgpID4gMCkgeworCQkJCS8vIFllcworCQkJCS8vIFN0b3AnZW0KKwkJCQljYW5jZWxSZXF1ZXN0ZWQgPSB0cnVlOworCQkJCXN0b3BBbGxTaW11bGF0aW9ucygpOworCQkJfSAvLyBpZgorCQkJbW9uaXRvci5kb25lKCk7CisJCQlzZXRCYXRjaFN0YXRlKEJhdGNoU3RhdGUuU1RPUFBFRCk7CisJCX0gLy8gY2F0Y2ggRXhjZXB0aW9uCisKKwkJcmV0dXJuIHJldFZhbHVlOworCX0gLy8gcnVuCisKKwkvKioKKwkgKiBEbyB0aGUgcHJvY2Vzc2luZyByZXF1aXJlZCB0byBoYW5kbGUgYSB7QGxpbmsgUnVudGltZUV4Y2VwdGlvbn0KKwkgKiAKKwkgKiBAcGFyYW0gZQorCSAqICAgICAgICAgICAgdGhlIHtAbGluayBFeGNlcHRpb259IHRoYXQgd2FzIGNhdWdodCBpbiB0aGUge0BsaW5rICNydW4oKX0KKwkgKiAgICAgICAgICAgIG1ldGhvZC4KKwkgKi8KKwlwcml2YXRlIHZvaWQgaGFuZGxlRXhjZXB0aW9uKGZpbmFsIEV4Y2VwdGlvbiBlKSB7CisKKwkJLy8gV2UgY2FuIGdldCBhIFJ1bnRpbWUgZXhjZXB0aW9uIGlmIHRoZSB1c2VyIHRyaWVzIHRvIHJ1biBhbiBFeHBlcmltZW50CisJCS8vIHRoYXQgZG9lc24ndCBoYXZlIGEgU2NlbmFyaW8uIE9yLCB3ZSBjYW4gZ2V0IG9uZSBiZWNhdXNlIG9mIHNvbWUgcmVhbAorCQkvLyBpbnRlcm5hbCBlcnJvci4KKworCQlTdHJpbmcgdGVtcEVycm9yTWVzc2FnZSA9ICIiOworCQlib29sZWFuIGxvZ0l0ID0gZmFsc2U7CisKKwkJLy8gQ291bGQgd2UgYmUgbWlzc2luZyBhIFNjZW5hcmlvIG9yIHNvbWV0aGluZyBpbiB0aGUgU2NlbmFyaW8/CisJCWlmIChlIGluc3RhbmNlb2YgTnVsbFBvaW50ZXJFeGNlcHRpb24pIHsKKwkJCS8vIFllcworCQkJLy8gRG9lcyB0aGUgRXhwZXJpbWVudCBoYXZlIGEgU2NlbmFyaW8/CisJCQlpZiAoZXhwZXJpbWVudC5nZXRTY2VuYXJpbygpID09IG51bGwpIHsKKwkJCQkvLyBObworCQkJCXRlbXBFcnJvck1lc3NhZ2UgPSBNZXNzYWdlRm9ybWF0LmZvcm1hdChNZXNzYWdlcworCQkJCQkJLmdldFN0cmluZygiRXhwLk1pc3NpbmdTY2VuYXJpbyIpLAorCQkJCQkJbmV3IE9iamVjdFtdIHsgZ2V0TmFtZSgpIH0pOworCQkJfSAvLyBpZiBtaXNzaW5nIGEgc2VxdWVuY2VyCisJCQllbHNlIHsKKwkJCQkvLyBZZXMKKwkJCQkvLyBEb2VzIHRoZSBTY2VuYXJpbyBoYXZlIGEgU2VxdWVuY2VyPworCQkJCWlmIChleHBlcmltZW50LmdldFNjZW5hcmlvKCkuZ2V0U2VxdWVuY2VyKCkgPT0gbnVsbCkgeworCQkJCQkvLyBObworCQkJCQl0ZW1wRXJyb3JNZXNzYWdlID0gTWVzc2FnZUZvcm1hdC5mb3JtYXQoTWVzc2FnZXMKKwkJCQkJCQkuZ2V0U3RyaW5nKCJFeHAuTWlzc2luZ1NlcSIpLAorCQkJCQkJCW5ldyBPYmplY3RbXSB7IGdldE5hbWUoKSB9KTsKKwkJCQl9IC8vIGlmIG1pc3NpbmcgYSBzZXF1ZW5jZXIKKwkJCQkvLyBIb3cgYWJvdXQgYSBtb2RlbD8KKwkJCQllbHNlIGlmIChleHBlcmltZW50LmdldFNjZW5hcmlvKCkuZ2V0TW9kZWwoKSA9PSBudWxsKSB7CisJCQkJCS8vIE5vCisJCQkJCXRlbXBFcnJvck1lc3NhZ2UgPSBNZXNzYWdlRm9ybWF0LmZvcm1hdChNZXNzYWdlcworCQkJCQkJCS5nZXRTdHJpbmcoIkV4cC5NaXNzaW5nTW9kZWwiKSwKKwkJCQkJCQluZXcgT2JqZWN0W10geyBnZXROYW1lKCkgfSk7CisJCQkJfSAvLyBpZiBtaXNzaW5nIG1vZGVsCisJCQkJZWxzZSB7CisJCQkJCS8vIFllcworCQkJCQkvLyBKdXN0IHNvbWUgb3RoZXIgTlBFCisJCQkJCWxvZ0l0ID0gdHJ1ZTsKKwkJCQkJdGVtcEVycm9yTWVzc2FnZSA9IE1lc3NhZ2VGb3JtYXQuZm9ybWF0KE1lc3NhZ2VzCisJCQkJCQkJLmdldFN0cmluZygiRXhwLklFcnIiKSwgbmV3IE9iamVjdFtdIHsgZ2V0TmFtZSgpIH0pOworCQkJCX0gLy8gZWxzZQorCQkJfSAvLyBlbHNlIGhhcyBhIFNjZW5hcmlvCisKKwkJfSAvLyBpZiBOdWxsUG9pbnRlckV4Y2VwdGlvbgorCQllbHNlIHsKKwkJCS8vIE5vCisJCQlsb2dJdCA9IHRydWU7CisJCQl0ZW1wRXJyb3JNZXNzYWdlID0gTWVzc2FnZUZvcm1hdC5mb3JtYXQoTWVzc2FnZXMKKwkJCQkJLmdldFN0cmluZygiRXhwLklFcnIiKSwgbmV3IE9iamVjdFtdIHsgZ2V0TmFtZSgpIH0pOworCQl9IC8vIGVsc2UKKworCQlmaW5hbCBTdHJpbmcgZXJyb3JNZXNzYWdlID0gdGVtcEVycm9yTWVzc2FnZTsKKworCQkvLyBMb2cgaXQ/CisJCWlmIChsb2dJdCkgeworCQkJLy8gWWVzCisJCQlBY3RpdmF0b3IubG9nRXJyb3IoZXJyb3JNZXNzYWdlLCBlKTsKKwkJfSAvLyBpZgorCisJCXRyeSB7CisJCQlEaXNwbGF5IGQgPSBEaXNwbGF5U2FmZUV4ZWN1dG9yLnNhZmVHZXREZWZhdWx0RGlzcGxheSgpOworCQkJaWYgKGQgIT0gbnVsbCkgeworCQkJCWQuc3luY0V4ZWMobmV3IFJ1bm5hYmxlKCkgeworCQkJCQlwdWJsaWMgdm9pZCBydW4oKSB7CisJCQkJCQlmaW5hbCBJV29ya2JlbmNoV2luZG93IHdpbmRvdyA9IFBsYXRmb3JtVUkuZ2V0V29ya2JlbmNoKCkKKwkJCQkJCQkJLmdldEFjdGl2ZVdvcmtiZW5jaFdpbmRvdygpOworCQkJCQkJZmluYWwgSVN0YXR1cyB3YXJuaW5nID0gbmV3IFN0YXR1cyhJU3RhdHVzLldBUk5JTkcsCisJCQkJCQkJCUFjdGl2YXRvci5QTFVHSU5fSUQsIDEsIGVycm9yTWVzc2FnZSwgbnVsbCk7CisJCQkJCQlFcnJvckRpYWxvZy5vcGVuRXJyb3Iod2luZG93LmdldFNoZWxsKCksIG51bGwsIG51bGwsCisJCQkJCQkJCXdhcm5pbmcpOworCQkJCQl9IC8vIHJ1bgorCQkJCX0pOworCQkJfQorCQl9IGNhdGNoIChmaW5hbCBFcnJvciBuY2RmZSkgeworCQkJLy8gSWYgd2UgZ2V0IHRoaXMgZXhjZXB0aW9uLCBpdCBpcyBiZWNhdXNlIHdlJ3JlIG5vdCBydW5uaW5nIGluCisJCQkvLyBlY2xpcHNlLgorCQl9IC8vIGNhdGNoCisKKwl9IC8vIGhhbmRsZUV4Y2VwdGlvbgorCisJLyoqCisJICogSXRlcmF0ZSB0aHJvdWdoIGFsbCBvZiB0aGUgYWN0aXZlIHtAbGluayBTaW11bGF0aW9ufXMgYW5kIHN0b3AvY2FuY2VsCisJICogdGhlbS4KKwkgKi8KKwlwcml2YXRlIHZvaWQgc3RvcEFsbFNpbXVsYXRpb25zKCkgeworCQlmb3IgKGZpbmFsIElTaW11bGF0aW9uIHNpbXVsYXRpb24gOiBhY3RpdmVTaW11bGF0aW9ucykgeworCQkJc2ltdWxhdGlvbi5zdG9wKCk7CisJCQlzaW11bGF0aW9uLmNhbmNlbCgpOworCQl9IC8vIGZvciBlYWNoIElTaW11bGF0aW9uCisJfSAvLyBzdG9wQWxsU2ltdWxhdGlvbnMKKworCS8qKgorCSAqIEBwYXJhbSBzaW11bGF0aW9uCisJICogICAgICAgICAgICBhIHtAbGluayBTaW11bGF0aW9ufSB0aGF0IGlzIHRvIGJlIHN0YXJ0ZWQuCisJICovCisJcHJpdmF0ZSB2b2lkIHN0YXJ0U2ltdWxhdGlvblJ1bm5pbmcoZmluYWwgSVNpbXVsYXRpb24gc2ltdWxhdGlvbikgeworCQlhY3RpdmVTaW11bGF0aW9ucy5hZGQoc2ltdWxhdGlvbik7CisJCXNpbXVsYXRpb24uYWRkU2ltdWxhdGlvbkxpc3RlbmVyKHRoaXMpOworCQlzaW11bGF0aW9uLnJ1bigpOworCX0gLy8gc3RhcnRTaW11bGF0aW9uUnVubmluZworCisJLyoqCisJICogQHJldHVybiB0aGUgdmFsdWUgdG8gYmUgcGFzc2VkIHRvIHRoZSB7QGxpbmsgQmF0Y2h9J3MKKwkgKiAgICAgICAgIHtAbGluayBJUHJvZ3Jlc3NNb25pdG9yfSB3aGVuIGJlZ2lubmluZyB0aGUgdGFzay4gVGhpcyB2YWx1ZQorCSAqICAgICAgICAgY291bGQgYmUge0BsaW5rIElQcm9ncmVzc01vbml0b3IjVU5LTk9XTn0gaWYgdGhlIG51bWJlciBvZgorCSAqICAgICAgICAge0BsaW5rIElTaW11bGF0aW9ufXMgdG8gYmUgcnVuIGlzIG5vdCBrbm93biBiZWZvcmUgaGFuZC4KKwkgKiAgICAgICAgIE90aGVyd2lzZSwgaXQgc2hvdWxkIGJlIHRoZSBudW1iZXIgb2Yge0BsaW5rIElTaW11bGF0aW9ufSdzIHRoYXQKKwkgKiAgICAgICAgIHdpbGwgYmUgcmV0dXJuZWQgYnkge0BsaW5rICNnZXROZXh0U2ltdWxhdGlvblRvUnVuKCl9LgorCSAqLworCXByb3RlY3RlZCBpbnQgZ2V0VG90YWxXb3JrKCkgeworCQlyZXR1cm4gMTsKKwl9CisKKwkvKioKKwkgKiBAcmV0dXJuIHRoZSBuZXh0IHtAbGluayBJU2ltdWxhdGlvbn0gdG8gcnVuIGFzIHBhcnQgb2YgdGhlIHtAbGluayBCYXRjaH0sCisJICogICAgICAgICBvciA8Y29kZT5udWxsPC9jb2RlPiwgaWYgdGhlcmUgYXJlIG5vIG1vcmUuCisJICovCisJcHJvdGVjdGVkIElTaW11bGF0aW9uIGdldE5leHRTaW11bGF0aW9uVG9SdW4oKSB7CisJCUlTaW11bGF0aW9uIHJldFZhbHVlID0gbnVsbDsKKwkJLy8gSXMgdGhlIGV4cGVyaW1lbnQgY29tcGxldGU/CisJCWlmICghZXhwZXJpbWVudC5pc0NvbXBsZXRlKCkpIHsKKwkJCS8vIE5vCisJCQlyZXRWYWx1ZSA9IFNpbXVsYXRpb25NYW5hZ2VyLmdldE1hbmFnZXIoKS5jcmVhdGVTaW11bGF0aW9uKAorCQkJCQlleHBlcmltZW50LnVwZGF0ZVNjZW5hcmlvKCksIG51bGwpOworCQl9CisKKwkJcmV0dXJuIHJldFZhbHVlOworCX0gLy8gZ2V0TmV4dFNpbXVsYXRpb25Ub1J1bgorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmpvYnMuYmF0Y2guSUJhdGNoI3J1bigpCisJICovCisJcHVibGljIHZvaWQgcnVuKCkgeworCQlzY2hlZHVsZSgpOworCX0gLy8gcnVuCisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uam9icy5leGVjdXRpb24uSUV4ZWN1dGFibGUjcGF1c2UoKQorCSAqLworCXB1YmxpYyB2b2lkIHBhdXNlKCkgeworCQkvLyBUT0RPIGltcGxlbWVudCBCYXRjaC5wYXVzZSgpCisJCXRocm93IG5ldyBVbnN1cHBvcnRlZE9wZXJhdGlvbkV4Y2VwdGlvbigpOworCX0KKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5qb2JzLmV4ZWN1dGlvbi5JRXhlY3V0YWJsZSNzdGVwKCkKKwkgKi8KKwlwdWJsaWMgdm9pZCBzdGVwKCkgeworCQkvLyBUT0RPIGltcGxlbWVudCBCYXRjaC5zdGVwKCkKKwkJdGhyb3cgbmV3IFVuc3VwcG9ydGVkT3BlcmF0aW9uRXhjZXB0aW9uKCk7CisJfQorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmpvYnMuZXhlY3V0aW9uLklFeGVjdXRhYmxlI3Jlc2V0KCkKKwkgKi8KKwlwdWJsaWMgdm9pZCByZXNldCgpIHsKKwkJLy8gVE9ETyBpbXBsZW1lbnQgQmF0Y2gucmVzZXQoKQorCQl0aHJvdyBuZXcgVW5zdXBwb3J0ZWRPcGVyYXRpb25FeGNlcHRpb24oKTsKKwl9CisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uam9icy5iYXRjaC5JQmF0Y2gjc3RvcCgpCisJICovCisJcHVibGljIHZvaWQgc3RvcCgpIHsKKwkJa2VlcFJ1bm5pbmcgPSBmYWxzZTsKKwl9IC8vIHN0b3AKKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5qb2JzLmV4ZWN1dGlvbi5JRXhlY3V0YWJsZSNpc1J1bm5pbmcoKQorCSAqLworCXB1YmxpYyBib29sZWFuIGlzUnVubmluZygpIHsKKwkJcmV0dXJuICFiYXRjaFN0YXRlLmVxdWFscyhCYXRjaFN0YXRlLlBBVVNFRCk7CisJfQorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmpvYnMuc2ltdWxhdGlvbi5JU2ltdWxhdGlvbkxpc3RlbmVyI3NpbXVsYXRpb25DaGFuZ2VkKG9yZy5lY2xpcHNlLnN0ZW0uam9icy5zaW11bGF0aW9uLlNpbXVsYXRpb25FdmVudCkKKwkgKi8KKwlwdWJsaWMgdm9pZCBzaW11bGF0aW9uQ2hhbmdlZChmaW5hbCBTaW11bGF0aW9uRXZlbnQgZXZlbnQpIHsKKworCQkvLyBGb3IgdGhlIGNhc2Ugd2hlbiB3ZSdyZSBydW5uaW5nIHtAbGluayBTaW11bGF0aW9ufXMgc2VxdWVudGlhbGx5LAorCQkvLyB0aGlzIG1ldGhvZCBjb250YWlucyBtb3N0IG9mIHRoZSBjb250cm9sIGxvZ2ljIGZvciB0aGUgZXhlY3V0aW9uIG9mCisJCS8vIHRoZSB7QGxpbmsgQmF0Y2h9LiBCYXNpY2FsbHksIGFzIGVhY2ggb2YgdGhlIHtAbGluayBCYXRjaH0ncworCQkvLyB7QGxpbmsgU2ltdWxhdGlvbn1zIGNoYW5nZXMgc3RhdGUsIHRoaXMgbWV0aG9kIGlzIGNhbGxlZC4gSW4gaXQgd2UKKwkJLy8gY2hlY2sgdG8gc2VlIGlmIHRoZSB7QGxpbmsgQmF0Y2h9IGhhcyBiZWVuIGNhbmNlbGVkLCBvciBoYXMgYmVlbgorCQkvLyByZXF1ZXN0ZWQgdG8gc3RvcC4KKworCQkvLyBEaWQgdGhlIFNpbXVsYXRpb24gY29tcGxldGU/CisJCWlmIChldmVudC5nZXRTaW11bGF0aW9uU3RhdGUoKSA9PSBTaW11bGF0aW9uU3RhdGUuQ09NUExFVEVEX1NFUVVFTkNFKSB7CisJCQkvLyBZZXMKKworCQkJbW9uaXRvci53b3JrZWQoMSk7CisJCQlldmVudC5nZXRTaW11bGF0aW9uKCkuc3RvcCgpOworLy8JCQlldmVudC5nZXRTaW11bGF0aW9uKCkuc3RlcCgpOworCisJCQkvLyBBcmUgd2Ugd2FpdGluZyBmb3IgU2ltdWxhdGlvbnMgdG8gZW5kPworCQkJaWYgKGtlZXBSdW5uaW5nKSB7CisJCQkJLy8gTm8KKwkJCQkvLyBTaG91bGQgd2UgdHJ5IHRvIHN0YXJ0IGFub3RoZXIgb25lPworCQkJCWlmICghbW9uaXRvci5pc0NhbmNlbGVkKCkgJiYgcnVubmluZ1NpbXVsYXRpb25zU2VxdWVudGlhbGx5KSB7CisJCQkJCS8vIFllcworCQkJCQlmaW5hbCBJU2ltdWxhdGlvbiBzaW11bGF0aW9uID0gZ2V0TmV4dFNpbXVsYXRpb25Ub1J1bigpOworCQkJCQkvLyBJcyB0aGVyZSBhbm90aGVyIHNpbXVsYXRpb24gdG8gcnVuPworCQkJCQlpZiAoc2ltdWxhdGlvbiAhPSBudWxsKSB7CisJCQkJCQkvLyBZZXMKKwkJCQkJCXN0YXJ0U2ltdWxhdGlvblJ1bm5pbmcoc2ltdWxhdGlvbik7CisJCQkJCX0gLy8gaWYKKwkJCQkJLy8gSGF2ZSBhbGwgdGhlIFNpbXVsYXRpb25zIGVuZGVkPworCQkJCQllbHNlIGlmIChhY3RpdmVTaW11bGF0aW9ucy5zaXplKCkgPT0gMCkgeworCQkJCQkJLy8gWWVzCisJCQkJCQltb25pdG9yLmRvbmUoKTsKKwkJCQkJCXNldEJhdGNoU3RhdGUoQmF0Y2hTdGF0ZS5TVE9QUEVEKTsKKwkJCQkJfSAvLyBlbHNlIGFsbCB0aGUgU2ltdWxhdGlvbnMgZW5kZWQKKwkJCQl9IC8vIGlmCisJCQl9IC8vIGlmIHdhaXRpbmcgZm9yIFNpbXVsYXRpb25zIHRvIGVuZAorCQkJZWxzZSB7CisJCQkJLy8gWWVzCisJCQkJLy8gSGF2ZSBhbGwgdGhlIFNpbXVsYXRpb25zIGVuZGVkPworCQkJCWlmIChhY3RpdmVTaW11bGF0aW9ucy5zaXplKCkgPT0gMCkgeworCQkJCQkvLyBZZXMKKwkJCQkJbW9uaXRvci5kb25lKCk7CisJCQkJCXNldEJhdGNoU3RhdGUoQmF0Y2hTdGF0ZS5TVE9QUEVEKTsKKwkJCQl9IC8vIGlmCisJCQl9IC8vIGVsc2Ugd2FpdGluZyBmb3IgU2ltdWxhdGlvbnMgdG8gZW5kCisJCX0gLy8gaWYgYSBzaW11bGF0aW9uIGNvbXBsZXRlZCBjeWNsZQorCQllbHNlIGlmIChldmVudC5nZXRTaW11bGF0aW9uU3RhdGUoKSA9PSBTaW11bGF0aW9uU3RhdGUuU1RPUFBFRCkgeworCQkJYWN0aXZlU2ltdWxhdGlvbnMucmVtb3ZlKGV2ZW50LmdldFNpbXVsYXRpb24oKSk7CisJCQlldmVudC5nZXRTaW11bGF0aW9uKCkucmVtb3ZlU2ltdWxhdGlvbkxpc3RlbmVyKHRoaXMpOworCQkJaWYgKGFjdGl2ZVNpbXVsYXRpb25zLnNpemUoKSA9PSAwKSB7CisJCQkJLy8gWWVzCisJCQkJbW9uaXRvci5kb25lKCk7CisJCQkJc2V0QmF0Y2hTdGF0ZShCYXRjaFN0YXRlLlNUT1BQRUQpOworCQkJfSAvLyBlbHNlIGFsbCB0aGUgU2ltdWxhdGlvbnMgZW5kZWQKKwkJfSAvLyBpZiBzdG9wcGVkCisKKwkJLy8gU2hvdWxkIHdlIGNhbmNlbCBhbGwgdGhlIFNpbXVsYXRpb25zPworCQlpZiAoIWNhbmNlbFJlcXVlc3RlZCAmJiBtb25pdG9yLmlzQ2FuY2VsZWQoKSkgeworCQkJLy8gWWVzCisJCQlrZWVwUnVubmluZyA9IGZhbHNlOworCQkJY2FuY2VsUmVxdWVzdGVkID0gdHJ1ZTsKKwkJCXN0b3BBbGxTaW11bGF0aW9ucygpOworCQl9IC8vIGlmIGNhbmNlbGVkCisKKwkJLy8gSGF2ZSB3ZSBiZWVuIGFza2VkIHRvIHN0b3A/CisJCWlmICgha2VlcFJ1bm5pbmcgJiYgIWNhbmNlbFJlcXVlc3RlZCkgeworCQkJLy8gWWVzCisJCQljYW5jZWxSZXF1ZXN0ZWQgPSB0cnVlOworCQkJc3RvcEFsbFNpbXVsYXRpb25zKCk7CisJCX0gLy8gaWYKKwl9Ly8gc2ltdWxhdGlvbkNoYW5nZWQKKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5qb2JzLmJhdGNoLklCYXRjaCNnZXRFeHBlcmltZW50KCkKKwkgKi8KKwlwdWJsaWMgRXhwZXJpbWVudCBnZXRFeHBlcmltZW50KCkgeworCQlyZXR1cm4gZXhwZXJpbWVudDsKKwl9IC8vIGdldEV4cGVyaW1lbnQKKworCS8qKgorCSAqIEByZXR1cm4gdGhlIGN1cnJlbnQgc3RhdGUgb2YgdGhlIHtAbGluayBCYXRjaH0KKwkgKi8KKwlwdWJsaWMgZmluYWwgQmF0Y2hTdGF0ZSBnZXRCYXRjaFN0YXRlKCkgeworCQlyZXR1cm4gYmF0Y2hTdGF0ZTsKKwl9CisKKwkvKioKKwkgKiBAcGFyYW0gYmF0Y2hTdGF0ZQorCSAqICAgICAgICAgICAgdGhlIG5ldyBzdGF0ZSBvZiB0aGUge0BsaW5rIEJhdGNofQorCSAqLworCXByaXZhdGUgdm9pZCBzZXRCYXRjaFN0YXRlKGZpbmFsIEJhdGNoU3RhdGUgYmF0Y2hTdGF0ZSkgeworCQkvLyBJcyB0aGUgc3RhdGUgY2hhbmdpbmc/CisJCWlmIChnZXRCYXRjaFN0YXRlKCkgIT0gYmF0Y2hTdGF0ZSkgeworCQkJLy8gWWVzCisJCQl0aGlzLmJhdGNoU3RhdGUgPSBiYXRjaFN0YXRlOworCQkJZmlyZUJhdGNoQ2hhbmdlZChiYXRjaFN0YXRlKTsKKwkJfSAvLyBpZgorCisJfSAvLyBzZXRCYXRjaFN0YXRlCisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uam9icy5iYXRjaC5JQmF0Y2gjaXNSdW5uaW5nU2ltdWxhdGlvbnNTZXF1ZW50aWFsbHkoKQorCSAqLworCXB1YmxpYyBmaW5hbCBib29sZWFuIGlzUnVubmluZ1NpbXVsYXRpb25zU2VxdWVudGlhbGx5KCkgeworCQlyZXR1cm4gcnVubmluZ1NpbXVsYXRpb25zU2VxdWVudGlhbGx5OworCX0KKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5qb2JzLmJhdGNoLklCYXRjaCNzZXRSdW5uaW5nU2ltdWxhdGlvbnNTZXF1ZW50aWFsbHkoYm9vbGVhbikKKwkgKi8KKwlwdWJsaWMgZmluYWwgdm9pZCBzZXRSdW5uaW5nU2ltdWxhdGlvbnNTZXF1ZW50aWFsbHkoCisJCQlmaW5hbCBib29sZWFuIHJ1bm5pbmdTaW11bGF0aW9uc1NlcXVlbnRpYWxseSkgeworCQl0aGlzLnJ1bm5pbmdTaW11bGF0aW9uc1NlcXVlbnRpYWxseSA9IHJ1bm5pbmdTaW11bGF0aW9uc1NlcXVlbnRpYWxseTsKKwl9CisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uam9icy5iYXRjaC5JQmF0Y2gjaXNSdW5uaW5nSW5CYWNrZ3JvdW5kKCkKKwkgKi8KKwlwdWJsaWMgZmluYWwgYm9vbGVhbiBpc1J1bm5pbmdJbkJhY2tncm91bmQoKSB7CisJCXJldHVybiBydW5uaW5nSW5CYWNrZ3JvdW5kOworCX0KKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5qb2JzLmJhdGNoLklCYXRjaCNzZXRSdW5uaW5nSW5CYWNrZ3JvdW5kKGJvb2xlYW4pCisJICovCisJcHVibGljIGZpbmFsIHZvaWQgc2V0UnVubmluZ0luQmFja2dyb3VuZChmaW5hbCBib29sZWFuIHJ1bm5pbmdJbkJhY2tncm91bmQpIHsKKwkJdGhpcy5ydW5uaW5nSW5CYWNrZ3JvdW5kID0gcnVubmluZ0luQmFja2dyb3VuZDsKKwl9CisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uam9icy5iYXRjaC5JQmF0Y2gjYWRkQmF0Y2hMaXN0ZW5lcihvcmcuZWNsaXBzZS5zdGVtLmpvYnMuYmF0Y2guSUJhdGNoTGlzdGVuZXIpCisJICovCisJZmluYWwgcHVibGljIHZvaWQgYWRkQmF0Y2hMaXN0ZW5lcihmaW5hbCBJQmF0Y2hMaXN0ZW5lciBsaXN0ZW5lcikgeworCQlpZiAoIWxpc3RlbmVycy5jb250YWlucyhsaXN0ZW5lcikpIHsKKwkJCWxpc3RlbmVycy5hZGQobGlzdGVuZXIpOworCQl9CisJfQorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmpvYnMuYmF0Y2guSUJhdGNoI3JlbW92ZUJhdGNoTGlzdGVuZXIob3JnLmVjbGlwc2Uuc3RlbS5qb2JzLmJhdGNoLklCYXRjaExpc3RlbmVyKQorCSAqLworCWZpbmFsIHB1YmxpYyB2b2lkIHJlbW92ZUJhdGNoTGlzdGVuZXIoZmluYWwgSUJhdGNoTGlzdGVuZXIgbGlzdGVuZXIpIHsKKwkJbGlzdGVuZXJzLnJlbW92ZShsaXN0ZW5lcik7CisJfQorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmpvYnMuYmF0Y2guSUJhdGNoI2FkZEJhdGNoTGlzdGVuZXJTeW5jKG9yZy5lY2xpcHNlLnN0ZW0uam9icy5iYXRjaC5JQmF0Y2hMaXN0ZW5lclN5bmMpCisJICovCisJcHVibGljIHZvaWQgYWRkQmF0Y2hMaXN0ZW5lclN5bmMoSUJhdGNoTGlzdGVuZXJTeW5jIGxpc3RlbmVyKSB7CisJCWlmICghbGlzdGVuZXJzU3luYy5jb250YWlucyhsaXN0ZW5lcikpIHsKKwkJCWxpc3RlbmVyc1N5bmMuYWRkKGxpc3RlbmVyKTsKKwkJfQorCX0gLy8gYWRkQmF0Y2hMaXN0ZW5lclN5bmMKKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5qb2JzLmJhdGNoLklCYXRjaCNyZW1vdmVCYXRjaExpc3RlbmVyU3luYyhvcmcuZWNsaXBzZS5zdGVtLmpvYnMuYmF0Y2guSUJhdGNoTGlzdGVuZXJTeW5jKQorCSAqLworCXB1YmxpYyB2b2lkIHJlbW92ZUJhdGNoTGlzdGVuZXJTeW5jKElCYXRjaExpc3RlbmVyU3luYyBsaXN0ZW5lcikgeworCQlsaXN0ZW5lcnNTeW5jLnJlbW92ZShsaXN0ZW5lcik7CisJfSAvLyByZW1vdmVCYXRjaExpc3RlbmVyU3luYworCisJLyoqCisJICogVGVsbCB0aGUgbGlzdGVuZXJzIGFib3V0IHRoZSBjaGFuZ2UgaW4gdGhlIHtAbGluayBCYXRjaH0ncyBzdGF0ZQorCSAqIAorCSAqIEBwYXJhbSBiYXRjaFN0YXRlCisJICogICAgICAgICAgICB0aGUgbmV3IHN0YXRlIG9mIHRoZSB7QGxpbmsgQmF0Y2h9CisJICovCisJcHJpdmF0ZSB2b2lkIGZpcmVCYXRjaENoYW5nZWQoZmluYWwgQmF0Y2hTdGF0ZSBiYXRjaFN0YXRlKSB7CisJCWZpbmFsIEJhdGNoRXZlbnQgZXZlbnQgPSBuZXcgQmF0Y2hFdmVudCh0aGlzLCBiYXRjaFN0YXRlKTsKKwkJZm9yIChmaW5hbCBJQmF0Y2hMaXN0ZW5lciBsaXN0ZW5lciA6IGxpc3RlbmVycykgeworCQkJbGlzdGVuZXIuYmF0Y2hDaGFuZ2VkKGV2ZW50KTsKKwkJfSAvLyBmb3IKKworCQlmb3IgKGZpbmFsIElCYXRjaExpc3RlbmVyU3luYyBsaXN0ZW5lciA6IGxpc3RlbmVyc1N5bmMpIHsKKwkJCWxpc3RlbmVyLmJhdGNoQ2hhbmdlZFN5bmMoZXZlbnQpOworCQl9IC8vIGZvcgorCX0gLy8gZmlyZUJhdGNoQ2hhbmdlZAorCisJLyoqCisJICogQHNlZSBqYXZhLmxhbmcuT2JqZWN0I3RvU3RyaW5nKCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkgeworCQlmaW5hbCBTdHJpbmdCdWlsZGVyIHNiID0gbmV3IFN0cmluZ0J1aWxkZXIoIlsiKTsKKwkJc2IuYXBwZW5kKGdldFNlcXVlbmNlTnVtYmVyKCkpOworCQlzYi5hcHBlbmQoIl0gIik7CisJCXNiLmFwcGVuZChpc1J1bm5pbmdTaW11bGF0aW9uc1NlcXVlbnRpYWxseSgpID8gIlMvIiA6ICJQLyIpOworCQlzYi5hcHBlbmQoaXNSdW5uaW5nSW5CYWNrZ3JvdW5kKCkgPyAiQiAiIDogIkYgIik7CisJCXNiLmFwcGVuZChnZXRCYXRjaFN0YXRlKCkudG9TdHJpbmcoKSk7CisJCXJldHVybiBzYi50b1N0cmluZygpOworCX0gLy8gdG9TdHJpbmcKKworfSAvLyBCYXRjaApkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmpvYnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vam9icy9iYXRjaC9CYXRjaEV2ZW50LmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uam9icy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9qb2JzL2JhdGNoL0JhdGNoRXZlbnQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NmM2YTYxCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmpvYnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vam9icy9iYXRjaC9CYXRjaEV2ZW50LmphdmEKQEAgLTAsMCArMSw2MSBAQAorLy8gQmF0Y2hFdmVudC5qYXZhCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uam9icy5iYXRjaDsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqYXZhLnV0aWwuRXZlbnRPYmplY3Q7CisKKy8qKgorICogVGhpcyBjbGFzcyByZXByZXNlbnRzIHRoZSBvY2N1cnJlbmNlIG9mIGFuIGV2ZW50IGluIGEge0BsaW5rIEJhdGNofS4KKyAqLworcHVibGljIGNsYXNzIEJhdGNoRXZlbnQgZXh0ZW5kcyBFdmVudE9iamVjdCB7CisKKwkvKioKKwkgKiBEZWZhdWx0IHNlcmlhbCBpZAorCSAqLworCXByaXZhdGUgc3RhdGljIGZpbmFsIGxvbmcgc2VyaWFsVmVyc2lvblVJRCA9IDFMOworCXByaXZhdGUgQmF0Y2hTdGF0ZSBiYXRjaFN0YXRlOworCisJLyoqCisJICogQHBhcmFtIGJhdGNoU3RhdGUKKwkgKiAgICAgICAgICAgIHRoZSBuZXcgc3RhdGUgb2YgYSB7QGxpbmsgSUJhdGNofS4KKwkgKiBAcGFyYW0gYmF0Y2gKKwkgKiAgICAgICAgICAgIHRoZSBzb3VyY2Ugb2YgdGhlIGV2ZW50LgorCSAqLworCXB1YmxpYyBCYXRjaEV2ZW50KGZpbmFsIElCYXRjaCBiYXRjaCwgZmluYWwgQmF0Y2hTdGF0ZSBiYXRjaFN0YXRlKSB7CisJCXN1cGVyKGJhdGNoKTsKKwkJdGhpcy5iYXRjaFN0YXRlID0gYmF0Y2hTdGF0ZTsKKwl9CisKKwkvKioKKwkgKiBAcmV0dXJuIHRoZSBiYXRjaFN0YXRlCisJICovCisJcHVibGljIGZpbmFsIEJhdGNoU3RhdGUgZ2V0QmF0Y2hTdGF0ZSgpIHsKKwkJcmV0dXJuIGJhdGNoU3RhdGU7CisJfQorCisJLyoqCisJICogQHJldHVybiB0aGUge0BsaW5rIElCYXRjaH0gdGhhdCBpcyB0aGUgc291cmNlIG9mIHRoZSBldmVudC4KKwkgKi8KKwlwdWJsaWMgZmluYWwgSUJhdGNoIGdldEJhdGNoKCkgeworCQlyZXR1cm4gKElCYXRjaCkgZ2V0U291cmNlKCk7CisJfQorCisJLyoqCisJICogQHNlZSBqYXZhLnV0aWwuRXZlbnRPYmplY3QjdG9TdHJpbmcoKQorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKSB7CisJCXJldHVybiBiYXRjaFN0YXRlLnRvU3RyaW5nKCk7CisJfQorCit9IC8vIEJhdGNoRXZlbnQKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5qb2JzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2pvYnMvYmF0Y2gvQmF0Y2hNYW5hZ2VyLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uam9icy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9qb2JzL2JhdGNoL0JhdGNoTWFuYWdlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ1ZDM4MWQKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uam9icy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9qb2JzL2JhdGNoL0JhdGNoTWFuYWdlci5qYXZhCkBAIC0wLDAgKzEsNjc5IEBACisvLyBCYXRjaE1hbmFnZXIuamF2YQorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmpvYnMuYmF0Y2g7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgamF2YS50ZXh0Lk1lc3NhZ2VGb3JtYXQ7CitpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuRGF0ZTsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuY29uY3VycmVudC5Db3B5T25Xcml0ZUFycmF5TGlzdDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JQ29uZmlndXJhdGlvbkVsZW1lbnQ7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQcm9ncmVzc01vbml0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlN0YXR1czsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuam9icy5Kb2I7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlVSSTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUucmVzb3VyY2UuUmVzb3VyY2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnJlc291cmNlLlJlc291cmNlU2V0OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5yZXNvdXJjZS5pbXBsLlJlc291cmNlU2V0SW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLkR1YmxpbkNvcmU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmV4cGVyaW1lbnQuRXhwZXJpbWVudDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmpvYnMuQWN0aXZhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uam9icy5EaXNwbGF5U2FmZUV4ZWN1dG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uam9icy5leGVjdXRpb24uRXhlY3V0YWJsZU1hbmFnZXI7CisKKy8qKgorICogVGhpcyBjbGFzcyBpbXBsZW1lbnRzIGEgY2VudHJhbGl6ZWQgbWFuYWdlciBmb3IgcnVubmluZyB7QGxpbmsgRXhwZXJpbWVudH1zCisgKiBpbiAiYmF0Y2ggbW9kZSIuIFRoZSBpZGVhIG9mIGJhdGNoIG1vZGUgaXMgdGhhdCBhIHtAbGluayBTY2VuYXJpb30gcmVmZXJlbmNlZAorICogYnkgYW4ge0BsaW5rIEV4cGVyaW1lbnR9IGNhbiBiZSB1c2VkIGFzIGEgYmFzZSBmcm9tIHdoaWNoIGEgY29sbGVjdGlvbiBvZgorICogb3RoZXIge0BsaW5rIFNjZW5hcmlvfXMgY2FuIGJlIGRlcml2ZWQuIFRoZXNlIGRlcml2ZWQge0BsaW5rIFNjZW5hcmlvfXMKKyAqIGRpZmZlciBmcm9tIHRoZSBiYXNlIGluIHNvbWUgKHVzdWFsbHkpIG1pbm9yIHZhcmlhdGlvbiBvZiBvbmUgb3IgbW9yZSBvZiB0aGUKKyAqIGJhc2UncyBjb25maWd1cmF0aW9uIHBhcmFtZXRlcnMuCisgKiA8cD4KKyAqIFRoZSBtYW5hZ2VyIGNvbnRyb2xzIHRoZSBjcmVhdGlvbiBvZiB0aGUgZGVyaXZlZCB7QGxpbmsgU2NlbmFyaW99cyBmcm9tCisgKiBzcGVjaWZpY2F0aW9ucyBwcm92aWRlZCBieSBhIHVzZXIsIGFuZCB0aGVuLCB0aGVpciBzdWJzZXF1ZW50IGV4ZWN1dGlvbiBhcworICoge0BsaW5rIFNpbXVsYXRpb259cy4KKyAqIAorICogQHNlZSBCYXRjaAorICogQHNlZSBFeHBlcmltZW50CisgKiBAc2VlIE1vZGlmaWVyCisgKi8KK3B1YmxpYyBjbGFzcyBCYXRjaE1hbmFnZXIgZXh0ZW5kcyBFeGVjdXRhYmxlTWFuYWdlciBpbXBsZW1lbnRzIElCYXRjaExpc3RlbmVyIHsKKworCS8qKgorCSAqIFRoZSBzaW5nbGV0b24gaW5zdGFuY2Ugb2YgdGhlIHtAbGluayBCYXRjaE1hbmFnZXJ9LgorCSAqLworCXB1YmxpYyBzdGF0aWMgQmF0Y2hNYW5hZ2VyIElOU1RBTkNFID0gbmV3IEJhdGNoTWFuYWdlcigpOworCisJLyoqCisJICogVGhpcyBpcyB0aGUgc2VxdWVuY2UgbnVtYmVyIGFzc2lnbmVkIHRvIGVhY2ggc3VjY2Vzc2l2ZSB7QGxpbmsgQmF0Y2h9CisJICogaW5zdGFuY2UgdGhlIG1hbmFnZXIgY3JlYXRlcy4KKwkgKi8KKwlzdGF0aWMgcHJpdmF0ZSBpbnQgc2VxdWVuY2VOdW1iZXIgPSAwOworCisJLyoqCisJICogQ29uc3RhbnQgZW1wdHkgYXJyYXkgb2Yge0BsaW5rIEJhdGNofXMuCisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBJQmF0Y2hbXSBOT05FID0gbmV3IEJhdGNoW10ge307CisKKwkvKioKKwkgKiBUaGUgY29sbGVjdGlvbiBvZiB7QGxpbmsgSUJhdGNoTWFuYWdlckxpc3RlbmVyfSdzIHdhaXRpbmcgdG8gYmUgdG9sZAorCSAqIGFib3V0IHtAbGluayBCYXRjaE1hbmFnZXJFdmVudH0ncworCSAqLworCXByaXZhdGUgZmluYWwgTGlzdDxJQmF0Y2hNYW5hZ2VyTGlzdGVuZXI+IGxpc3RlbmVycyA9IG5ldyBDb3B5T25Xcml0ZUFycmF5TGlzdDxJQmF0Y2hNYW5hZ2VyTGlzdGVuZXI+KCk7CisKKwkvKioKKwkgKiBUaGUgY29sbGVjdGlvbiBvZiB7QGxpbmsgSUJhdGNoTWFuYWdlckxpc3RlbmVyU3luY30ncyB3YWl0aW5nIHRvIGJlIHRvbGQKKwkgKiBhYm91dCB7QGxpbmsgQmF0Y2hNYW5hZ2VyRXZlbnR9J3MKKwkgKi8KKwlwcml2YXRlIGZpbmFsIExpc3Q8SUJhdGNoTWFuYWdlckxpc3RlbmVyU3luYz4gbGlzdGVuZXJzU3luYyA9IG5ldyBDb3B5T25Xcml0ZUFycmF5TGlzdDxJQmF0Y2hNYW5hZ2VyTGlzdGVuZXJTeW5jPigpOworCisJLyoqCisJICogVGhlIHtAbGluayBTZXR9IG9mIHtAbGluayBCYXRjaH1zIGJlaW5nIG1hbmFnZWQuCisJICovCisJcHJpdmF0ZSBmaW5hbCBMaXN0PElCYXRjaD4gYmF0Y2hlcyA9IG5ldyBBcnJheUxpc3Q8SUJhdGNoPigpOworCisJLyoqCisJICogUHJpdmF0ZSBjb25zdHJ1Y3RvciBzbyB0aGF0IGluc3RhbmNlcyBvZiB0aGUge0BsaW5rIEJhdGNoTWFuYWdlcn0gY2Fubm90CisJICogYmUgY3JlYXRlZCBleHRlcm5hbGx5LgorCSAqLworCXByaXZhdGUgQmF0Y2hNYW5hZ2VyKCkgeworCQkvLyBub3RoaW5nCisJfSAvLyBCYXRjaE1hbmFnZXIKKworCS8qKgorCSAqIEByZXR1cm4gdGhlIG5leHQge0BsaW5rIEJhdGNofSBzZXF1ZW5jZSBudW1iZXIgYW5kIGluY3JlbWVudCB0aGUgdmFsdWUuCisJICovCisJc3luY2hyb25pemVkIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBnZXRBbmRJbmNyZW1lbnRCYXRjaFNlcXVlbmNlTnVtYmVyKCkgeworCQlyZXR1cm4gc2VxdWVuY2VOdW1iZXIrKzsKKwl9IC8vIGdldEFuZEluY3JlbWVudEJhdGNoU2VxdWVuY2VOdW1iZXIKKworCS8qKgorCSAqIEByZXR1cm4gdGhlIHtAbGluayBMaXN0fSBvZiB7QGxpbmsgQmF0Y2h9cyBiZWluZyBtYW5hZ2VkLgorCSAqLworCXB1YmxpYyBMaXN0PElCYXRjaD4gZ2V0QWN0aXZlQmF0Y2hlcygpIHsKKwkJcmV0dXJuIGJhdGNoZXM7CisJfSAvLyBnZXRBY3RpdmVCYXRjaGVzCisKKwkvKioKKwkgKiBBZGQgYSBuZXcge0BsaW5rIEJhdGNofSB0byB0aGUgbWFuYWdlcidzIGNvbGxlY3Rpb24gYW5kIG5vdGlmeSBhbnkKKwkgKiBsaXN0ZW5lcnMgb2YgdGhlIGFkZGl0aW9uLgorCSAqLworCXByaXZhdGUgdm9pZCBhZGRBY3RpdmVCYXRjaChmaW5hbCBJQmF0Y2ggYmF0Y2gpIHsKKwkJYmF0Y2hlcy5hZGQoYmF0Y2gpOworCQliYXRjaC5hZGRCYXRjaExpc3RlbmVyKHRoaXMpOworCQlmaXJlQmF0Y2hNYW5hZ2VyQ2hhbmdlZChuZXcgSUJhdGNoW10geyBiYXRjaCB9LCBOT05FKTsKKwl9IC8vIGFkZEFjdGl2ZUJhdGNoCisKKwkvKioKKwkgKiBSZW1vdmUgYW4ge0BsaW5rIElCYXRjaH0gZnJvbSB0aGUgY29sbGVjdGlvbiBvZiBhY3RpdmUge0BsaW5rIElCYXRjaH1zLgorCSAqIAorCSAqIEBwYXJhbSBzaW11bGF0aW9uCisJICogICAgICAgICAgICB0aGUge0BsaW5rIElCYXRjaH0gdG8gcmVtb3ZlCisJICovCisJcHJpdmF0ZSBmaW5hbCB2b2lkIHJlbW92ZUFjdGl2ZUJhdGNoKGZpbmFsIElCYXRjaCBiYXRjaCkgeworCQliYXRjaGVzLnJlbW92ZShiYXRjaCk7CisJCS8vIFdlJ3JlIG5vIGxvbmdlciBhIGxpc3RlbmVyCisJCWJhdGNoLnJlbW92ZUJhdGNoTGlzdGVuZXIodGhpcyk7CisJCWZpcmVCYXRjaE1hbmFnZXJDaGFuZ2VkKE5PTkUsIG5ldyBJQmF0Y2hbXSB7IGJhdGNoIH0pOworCX0gLy8gcmVtb3ZlQWN0aXZlQmF0Y2gKKworCS8qKgorCSAqIENyZWF0ZSBhIHtAbGluayBJQmF0Y2h9IHRoYXQncyByZWFkeSB0byBydW4KKwkgKiAKKwkgKiBAcGFyYW0gZXhwZXJpbWVudAorCSAqICAgICAgICAgICAgdGhlIHtAbGluayBFeHBlcmltZW50fSB0aGF0IGlzIHRoZSBiYXNpcyBmb3IgdGhlIHtAbGluayBCYXRjaH0KKwkgKiBAcmV0dXJuIGFuIHtAbGluayBJQmF0Y2h9IGZyb20gdGhlIHtAbGluayBFeHBlcmltZW50fQorCSAqLworCXB1YmxpYyBJQmF0Y2ggY3JlYXRlQmF0Y2goZmluYWwgRXhwZXJpbWVudCBleHBlcmltZW50KSB7CisJCWZpbmFsIEJhdGNoIGJhdGNoID0gbmV3IEJhdGNoKGV4cGVyaW1lbnQsCisJCQkJZ2V0QW5kSW5jcmVtZW50QmF0Y2hTZXF1ZW5jZU51bWJlcigpKTsKKwkJYmF0Y2guc2V0UHJpb3JpdHkoSm9iLkxPTkcpOworCQlmaW5hbCBJQmF0Y2ggcmV0VmFsdWUgPSBuZXcgQmF0Y2hBZGFwdGVyKGJhdGNoKTsKKwkJYWRkQWN0aXZlQmF0Y2gocmV0VmFsdWUpOworCQlyZXR1cm4gcmV0VmFsdWU7CisJfSAvLyBjcmVhdGVCYXRjaAorCisJLyoqCisJICogQHBhcmFtIGNvbmZpZ3VyYXRpb25FbGVtZW50CisJICogQHBhcmFtIG1vbml0b3IKKwkgKiBAcmV0dXJuCisJICovCisJcHJvdGVjdGVkIElCYXRjaCBjcmVhdGVCYXRjaCgKKwkJCWZpbmFsIElDb25maWd1cmF0aW9uRWxlbWVudCBjb25maWd1cmF0aW9uRWxlbWVudCwKKwkJCWZpbmFsIElQcm9ncmVzc01vbml0b3IgbW9uaXRvcikgeworCQlJQmF0Y2ggcmV0VmFsdWUgPSBudWxsOworCisJCWZpbmFsIFN0cmluZyBleHBlcmltZW50VVJJU3RyaW5nID0gY29uZmlndXJhdGlvbkVsZW1lbnQKKwkJCQkuZ2V0QXR0cmlidXRlKER1YmxpbkNvcmUuSURFTlRJRklFUik7CisJCXRyeSB7CisJCQlyZXRWYWx1ZSA9IGNyZWF0ZUJhdGNoKFVSSS5jcmVhdGVVUkkoZXhwZXJpbWVudFVSSVN0cmluZyksIG1vbml0b3IpOworCQl9IGNhdGNoIChmaW5hbCBFeGNlcHRpb24gZSkgeworCQkJQWN0aXZhdG9yCisJCQkJCS5sb2dFcnJvcigKKwkJCQkJCQlNZXNzYWdlRm9ybWF0CisJCQkJCQkJCQkuZm9ybWF0KAorCQkJCQkJCQkJCQlNZXNzYWdlcworCQkJCQkJCQkJCQkJCS5nZXRTdHJpbmcoIkJhdGNoTWdyLkRlc2VyaWFsaXphdGlvbl9FcnJvciIpLCBleHBlcmltZW50VVJJU3RyaW5nKSwgZSk7IC8vJE5PTi1OTFMtMSQKKwkJCXJldFZhbHVlID0gbnVsbDsKKwkJfQorCQlyZXR1cm4gcmV0VmFsdWU7CisJfSAvLyBjcmVhdGVCYXRjaAorCisJLyoqCisJICogQHBhcmFtIGV4cGVyaW1lbnRVUkkKKwkgKiAgICAgICAgICAgIHRoZSB7QGxpbmsgVVJJfSBvZiBhIHNlcmlhbGl6ZWQge0BsaW5rIEV4cGVyaW1lbnR9CisJICogQHBhcmFtIG1vbml0b3IKKwkgKiAgICAgICAgICAgIGEge0BsaW5rIFByb2dyZXNzTW9uaXRvcn0KKwkgKiBAcmV0dXJuIGFuIHtAbGluayBJQmF0Y2h9IGRlc2VyaWFsaXplZCBmcm9tIHRoZSBzb3VyY2UgaWRlbnRpZmllZCBieSB0aGUKKwkgKiAgICAgICAgIGV4cGVyaW1lbnRVUkksIG9yIDxjb2RlPm51bGw8L2NvZGU+IGlmIHRoZXJlIHdhcyBhIHByb2JsZW0uCisJICovCisJcHJpdmF0ZSBJQmF0Y2ggY3JlYXRlQmF0Y2goZmluYWwgVVJJIGV4cGVyaW1lbnRVUkksCisJCQlmaW5hbCBJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IpIHsKKwkJSUJhdGNoIHJldFZhbHVlID0gbnVsbDsKKwkJdHJ5IHsKKwkJCWZpbmFsIFJlc291cmNlU2V0IHJlc291cmNlU2V0ID0gbmV3IFJlc291cmNlU2V0SW1wbCgpOworCQkJZmluYWwgUmVzb3VyY2UgcmVzb3VyY2UgPSByZXNvdXJjZVNldC5nZXRSZXNvdXJjZShleHBlcmltZW50VVJJLAorCQkJCQl0cnVlKTsKKwkJCW1vbml0b3Iuc3ViVGFzaygiUmVhZGluZyBFeHBlcmltZW50IGZyb20gZmlsZSIpOworCQkJcmVzb3VyY2UubG9hZChudWxsKTsKKwkJCW1vbml0b3Iuc3ViVGFzaygiQ3JlYXRpbmcgQmF0Y2ggZnJvbSBFeHBlcmltZW50Iik7CisJCQlyZXRWYWx1ZSA9IGNyZWF0ZUJhdGNoKChFeHBlcmltZW50KSByZXNvdXJjZS5nZXRDb250ZW50cygpLmdldCgwKSk7CisJCX0gY2F0Y2ggKGZpbmFsIEV4Y2VwdGlvbiBlKSB7CisJCQlBY3RpdmF0b3IKKwkJCQkJLmxvZ0Vycm9yKAorCQkJCQkJCU1lc3NhZ2VGb3JtYXQKKwkJCQkJCQkJCS5mb3JtYXQoCisJCQkJCQkJCQkJCU1lc3NhZ2VzCisJCQkJCQkJCQkJCQkJLmdldFN0cmluZygiQmF0Y2hNZ3IuRGVzZXJpYWxpemF0aW9uX0Vycm9yIiksIGV4cGVyaW1lbnRVUkkudG9TdHJpbmcoKSksIGUpOyAvLyROT04tTkxTLTEkCisJCQlyZXRWYWx1ZSA9IG51bGw7CisJCX0KKwkJcmV0dXJuIHJldFZhbHVlOworCX0gLy8gY3JlYXRlQmF0Y2gKKworCS8qKgorCSAqIENyZWF0ZSBhIHtAbGluayBJQmF0Y2h9IGZyb20gYW4ge0BsaW5rIEV4cGVyaW1lbnR9IGluc3RhbmNlIGFuZCB0aGVuCisJICogc3RhcnQgaXQgcnVubmluZy4KKwkgKiAKKwkgKiBAcGFyYW0gZXhwZXJpbWVudAorCSAqICAgICAgICAgICAgdGhlIHtAbGluayBFeHBlcmltZW50fSB0byBiZSBydW4KKwkgKi8KKwlwdWJsaWMgdm9pZCBjcmVhdGVBbmRSdW5CYXRjaChmaW5hbCBFeHBlcmltZW50IGV4cGVyaW1lbnQpIHsKKwkJbmV3IEpvYihNZXNzYWdlcy5nZXRTdHJpbmcoIkJhdGNoTWdyLlN0YXJ0QmF0Y2giKSkgeworCQkJQE92ZXJyaWRlCisJCQlwcm90ZWN0ZWQgSVN0YXR1cyBydW4oZmluYWwgSVByb2dyZXNzTW9uaXRvciBtb25pdG9yKSB7CisJCQkJdHJ5IHsKKwkJCQkJZmluYWwgSUJhdGNoIGJhdGNoID0gY3JlYXRlQmF0Y2goZXhwZXJpbWVudCk7CisJCQkJCW1vbml0b3Iuc3ViVGFzayhNZXNzYWdlcy5nZXRTdHJpbmcoIkJhdGNoTWdyLlJ1biIpKTsKKwkJCQkJYmF0Y2gucnVuKCk7CisJCQkJfSBjYXRjaCAoZmluYWwgRXhjZXB0aW9uIGUpIHsKKwkJCQkJLy8gVGhlIGVycm9yIHdhcyBsb2dnZWQgaW4gY3JlYXRlQmF0Y2gKKwkJCQkJbW9uaXRvci5kb25lKCk7CisJCQkJfSAvLyBjYXRjaCBFeGNlcHRpb24KKwkJCQlyZXR1cm4gU3RhdHVzLk9LX1NUQVRVUzsKKwkJCX0gLy8gcnVuCisJCX0uc2NoZWR1bGUoKTsKKwl9IC8vIGNyZWF0ZUFuZFJ1bkJhdGNoCisKKwkvKioKKwkgKiBAcGFyYW0gY29uZmlndXJhdGlvbkVsZW1lbnQKKwkgKiAgICAgICAgICAgIGEge0BsaW5rIElDb25maWd1cmF0aW9uRWxlbWVudH0gdGhhdCBzcGVjaWZpZXMgdGhlIGRldGFpbHMgYW5kCisJICogICAgICAgICAgICBzZXJpYWxpemVkIGxvY2F0aW9uIG9mIGFuIHtAbGluayBFeHBlcmltZW50fSB0byBzaW11bGF0ZS4KKwkgKi8KKwlwdWJsaWMgdm9pZCBjcmVhdGVBbmRSdW5CYXRjaCgKKwkJCWZpbmFsIElDb25maWd1cmF0aW9uRWxlbWVudCBjb25maWd1cmF0aW9uRWxlbWVudCkgeworCQluZXcgSm9iKE1lc3NhZ2VzLmdldFN0cmluZygiQmF0Y2hNZ3IuU3RhcnRCYXRjaCIpKSB7IC8vJE5PTi1OTFMtMSQKKwkJCUBPdmVycmlkZQorCQkJcHJvdGVjdGVkIElTdGF0dXMgcnVuKGZpbmFsIElQcm9ncmVzc01vbml0b3IgbW9uaXRvcikgeworCQkJCW1vbml0b3IuYmVnaW5UYXNrKE1lc3NhZ2VzLmdldFN0cmluZygiQmF0Y2hNZ3IuQ3J0U2ltIiksCisJCQkJCQlJUHJvZ3Jlc3NNb25pdG9yLlVOS05PV04pOworCQkJCXRyeSB7CisJCQkJCWZpbmFsIElCYXRjaCBiYXRjaCA9IGNyZWF0ZUJhdGNoKGNvbmZpZ3VyYXRpb25FbGVtZW50LAorCQkJCQkJCW1vbml0b3IpOworCQkJCQltb25pdG9yLnN1YlRhc2soTWVzc2FnZXMuZ2V0U3RyaW5nKCJCYXRjaE1nci5SdW4iKSk7CisJCQkJCWJhdGNoLnJ1bigpOworCQkJCX0gLy8gdHJ5CisJCQkJY2F0Y2ggKGZpbmFsIE51bGxQb2ludGVyRXhjZXB0aW9uIGUpIHsKKwkJCQkJLy8gVGhlIGVycm9yIHdhcyBsb2dnZWQgaW4gY3JlYXRlQmF0Y2gKKwkJCQkJbW9uaXRvci5kb25lKCk7CisJCQkJfQorCQkJCW1vbml0b3IuZG9uZSgpOworCQkJCXJldHVybiBTdGF0dXMuT0tfU1RBVFVTOworCQkJfSAvLyBydW4KKwkJfS5zY2hlZHVsZSgpOworCX0gLy8gY3JlYXRlQW5kUnVuQmF0Y2gKKworCS8qKgorCSAqIEByZXR1cm4gdGhlIGN1cnJlbnQgYmF0Y2ggc2VxdWVuY2UgbnVtYmVyCisJICovCisJcHVibGljIGZpbmFsIGludCBnZXRTZXF1ZW5jZU51bWJlcigpIHsKKwkJcmV0dXJuIHNlcXVlbmNlTnVtYmVyOworCX0gLy8gZ2V0U2VxdWVuY2VOdW1iZXIKKworCS8qKgorCSAqIEBwYXJhbSBsaXN0ZW5lcgorCSAqICAgICAgICAgICAgYSBsaXN0ZW5lciB3YW50aW5nIHRvIGJlIHRvbGQgYWJvdXQgY2hhbmdlcyB0byB0aGUgbWFuYWdlci4KKwkgKi8KKwlwdWJsaWMgdm9pZCBhZGRCYXRjaE1hbmFnZXJMaXN0ZW5lcihmaW5hbCBJQmF0Y2hNYW5hZ2VyTGlzdGVuZXIgbGlzdGVuZXIpIHsKKwkJaWYgKCFsaXN0ZW5lcnMuY29udGFpbnMobGlzdGVuZXIpKSB7CisJCQlsaXN0ZW5lcnMuYWRkKGxpc3RlbmVyKTsKKwkJfQorCX0gLy8gYWRkQmF0Y2hNYW5hZ2VyTGlzdGVuZXIKKworCS8qKgorCSAqIEBwYXJhbSBsaXN0ZW5lclN5bmMKKwkgKiAgICAgICAgICAgIGEgbGlzdGVuZXIgd2FudGluZyB0byBiZSB0b2xkIGFib3V0IGNoYW5nZXMgdG8gdGhlIG1hbmFnZXIuCisJICovCisJcHVibGljIHZvaWQgYWRkQmF0Y2hNYW5hZ2VyTGlzdGVuZXJTeW5jKAorCQkJZmluYWwgSUJhdGNoTWFuYWdlckxpc3RlbmVyU3luYyBsaXN0ZW5lclN5bmMpIHsKKwkJaWYgKCFsaXN0ZW5lcnNTeW5jLmNvbnRhaW5zKGxpc3RlbmVyU3luYykpIHsKKwkJCWxpc3RlbmVyc1N5bmMuYWRkKGxpc3RlbmVyU3luYyk7CisJCX0KKwl9IC8vIGFkZEJhdGNoTWFuYWdlckxpc3RlbmVyU3luYworCisJLyoqCisJICogQHBhcmFtIGxpc3RlbmVyCisJICogICAgICAgICAgICBhIGxpc3RlbmVyIE5PVCB3YW50aW5nIHRvIGJlIHRvbGQgYWJvdXQgY2hhbmdlcyB0byB0aGUKKwkgKiAgICAgICAgICAgIG1hbmFnZXIuCisJICovCisJcHVibGljIHZvaWQgcmVtb3ZlTGlzdGVuZXIoZmluYWwgSUJhdGNoTWFuYWdlckxpc3RlbmVyIGxpc3RlbmVyKSB7CisJCWxpc3RlbmVycy5yZW1vdmUobGlzdGVuZXIpOworCX0gLy8gcmVtb3ZlTGlzdGVuZXIKKworCS8qKgorCSAqIEBwYXJhbSBsaXN0ZW5lclN5bmMKKwkgKiAgICAgICAgICAgIGEgbGlzdGVuZXIgTk9UIHdhbnRpbmcgdG8gYmUgdG9sZCBhYm91dCBjaGFuZ2VzIHRvIHRoZQorCSAqICAgICAgICAgICAgbWFuYWdlci4KKwkgKi8KKwlwdWJsaWMgdm9pZCByZW1vdmVMaXN0ZW5lclN5bmMoZmluYWwgSUJhdGNoTWFuYWdlckxpc3RlbmVyU3luYyBsaXN0ZW5lclN5bmMpIHsKKwkJbGlzdGVuZXJzU3luYy5yZW1vdmUobGlzdGVuZXJTeW5jKTsKKwl9IC8vIHJlbW92ZUxpc3RlbmVyU3luYworCisJLyoqCisJICogVGVsbCB0aGUgbGlzdGVuZXJzIGFib3V0IHRoZSBjaGFuZ2UuCisJICogCisJICogQHBhcmFtIGJhdGNoZXNBZGRlZAorCSAqICAgICAgICAgICAgdGhlIHtAbGluayBCYXRjaH1zIGFkZGVkCisJICogQHBhcmFtIGJhdGNoZXNSZW1vdmVkCisJICogICAgICAgICAgICB0aGUge0BsaW5rIEJhdGNofXMgcmVtb3ZlZAorCSAqLworCXByaXZhdGUgdm9pZCBmaXJlQmF0Y2hNYW5hZ2VyQ2hhbmdlZChmaW5hbCBJQmF0Y2hbXSBiYXRjaGVzQWRkZWQsCisJCQlmaW5hbCBJQmF0Y2hbXSBiYXRjaGVzUmVtb3ZlZCkgeworCQlmaW5hbCBCYXRjaE1hbmFnZXJFdmVudCBldmVudCA9IG5ldyBCYXRjaE1hbmFnZXJFdmVudCh0aGlzLAorCQkJCWJhdGNoZXNBZGRlZCwgYmF0Y2hlc1JlbW92ZWQpOworCisJCS8vIEluZm9ybSB0aGUgYXN5bmNocm9ub3VzIGxpc3RlbmVycworCQlmb3IgKGZpbmFsIElCYXRjaE1hbmFnZXJMaXN0ZW5lciBsaXN0ZW5lciA6IGxpc3RlbmVycykgeworCQkJRGlzcGxheVNhZmVFeGVjdXRvci5leGVjdXRlQXN5bmMobmV3IFJ1bm5hYmxlKCkgeworCQkJCXB1YmxpYyB2b2lkIHJ1bigpIHsKKwkJCQkJbGlzdGVuZXIuYmF0Y2hlc0NoYW5nZWQoZXZlbnQpOworCQkJCX0KKwkJCX0pOworCQl9IC8vIGZvcgorCisJCS8vIE5vdyBpbmZvcm0gdGhlIHN5bmNocm9uaXplZCBsaXN0ZW5lcnMKKwkJZm9yIChmaW5hbCBJQmF0Y2hNYW5hZ2VyTGlzdGVuZXJTeW5jIGxpc3RlbmVyU3luYyA6IGxpc3RlbmVyc1N5bmMpIHsKKwkJCURpc3BsYXlTYWZlRXhlY3V0b3IuZXhlY3V0ZVN5bmMobmV3IFJ1bm5hYmxlKCkgeworCQkJCXB1YmxpYyB2b2lkIHJ1bigpIHsKKwkJCQkJbGlzdGVuZXJTeW5jLmJhdGNoZXNDaGFuZ2VkU3luYyhldmVudCk7CisJCQkJfQorCQkJfSk7CisJCX0gLy8gZm9yCisKKwl9IC8vIGZpcmVCYXRjaE1hbmFnZXJDaGFuZ2VkCisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uam9icy5iYXRjaC5JQmF0Y2hMaXN0ZW5lciNiYXRjaENoYW5nZWQob3JnLmVjbGlwc2Uuc3RlbS5qb2JzLmJhdGNoLkJhdGNoRXZlbnQpCisJICovCisJcHVibGljIHZvaWQgYmF0Y2hDaGFuZ2VkKGZpbmFsIEJhdGNoRXZlbnQgZXZlbnQpIHsKKwkJLy8gSGFzIGEgYmF0Y2ggc3RvcHBlZD8KKwkJaWYgKGV2ZW50LmdldEJhdGNoU3RhdGUoKS5lcXVhbHMoQmF0Y2hTdGF0ZS5TVE9QUEVEKSkgeworCQkJLy8gWWVzCisJCQlyZW1vdmVBY3RpdmVCYXRjaChldmVudC5nZXRCYXRjaCgpKTsKKwkJfQorCX0gLy8gYmF0Y2hDaGFuZ2VkCisKKwkvKioKKwkgKiBAc2VlIGphdmEubGFuZy5PYmplY3QjdG9TdHJpbmcoKQorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKSB7CisJCWZpbmFsIFN0cmluZ0J1aWxkZXIgc2IgPSBuZXcgU3RyaW5nQnVpbGRlcigpOworCQlmb3IgKGZpbmFsIElCYXRjaCBiYXRjaCA6IGJhdGNoZXMpIHsKKwkJCXNiLmFwcGVuZChiYXRjaC50b1N0cmluZygpKTsKKwkJCXNiLmFwcGVuZCgiXG4iKTsKKwkJfSAvLyBmb3IgZWFjaCBCYXRjaAorCQlyZXR1cm4gc2IudG9TdHJpbmcoKTsKKwl9IC8vIHRvU3RyaW5nCisKKwkvKioKKwkgKiBEaXNjYXJkIHRoZSBjdXJyZW50IHtAbGluayBCYXRjaE1hbmFnZXJ9IGFuZCByZXBsYWNlIGl0IHdpdGggYSBuZXdseQorCSAqIGFsbG9jYXRlZCBvbmUuIFRoaXMgbWV0aG9kIGlzIHByaW1hcmlseSBpbnRlbmRlZCB0byBiZSB1c2VkIGJ5IEpVbml0IHRlc3QKKwkgKiBjYXNlcyB0aGF0IG5lZWQgYSB7QGxpbmsgQmF0Y2hNYW5hZ2VyfSB3aXRoIGEga25vd24gaW5pdGlhbCBzdGF0ZS4KKwkgKi8KKwlwdWJsaWMgc3RhdGljIHZvaWQgcmVzZXRCYXRjaE1hbmFnZXIoKSB7CisJCUlOU1RBTkNFID0gbmV3IEJhdGNoTWFuYWdlcigpOworCX0gLy8gcmVzZXRCYXRjaE1hbmFnZXIKKworCS8qKgorCSAqIFRoaXMgY2xhc3MgYWRhcHRzIGEge0BsaW5rIEJhdGNofSBpbnN0YW5jZSB0aGF0IHJ1bnMgYXMgYW4gYXN5bmNocm9ub3VzCisJICogRWNsaXBzZSB7QGxpbmsgSm9ifSB0byBiZSBhbiB7QGxpbmsgSUJhdGNofSBpbnN0YW5jZS4gVGhlIGFkYXB0ZXIgbWFuYWdlcworCSAqIHRocmVhZCBzYWZldHkgaXNzdWVzIHNvIHRoYXQgdGhlIFVJIHRocmVhZCBjYW4gYWNjZXNzIHRoZSB7QGxpbmsgSUJhdGNofQorCSAqIGluc3RhbmNlIGRpcmVjdGx5LgorCSAqLworCXByb3RlY3RlZCBzdGF0aWMgY2xhc3MgQmF0Y2hBZGFwdGVyIGltcGxlbWVudHMgSUJhdGNoLCBJQmF0Y2hMaXN0ZW5lciwKKwkJCUlCYXRjaExpc3RlbmVyU3luYyB7CisKKwkJLyoqCisJCSAqIFRoZSBjb2xsZWN0aW9uIG9mIHtAbGluayBJQmF0Y2hMaXN0ZW5lcn0ncyB3YWl0aW5nIHRvIGJlIHRvbGQgYWJvdXQKKwkJICoge0BsaW5rIEJhdGNoRXZlbnR9cy4KKwkJICovCisJCXByaXZhdGUgZmluYWwgTGlzdDxJQmF0Y2hMaXN0ZW5lcj4gbGlzdGVuZXJzID0gbmV3IENvcHlPbldyaXRlQXJyYXlMaXN0PElCYXRjaExpc3RlbmVyPigpOworCisJCS8qKgorCQkgKiBUaGUgY29sbGVjdGlvbiBvZiB7QGxpbmsgSUJhdGNoTGlzdGVuZXJTeW5jfSdzIHdhaXRpbmcgdG8gYmUgdG9sZAorCQkgKiBhYm91dCB7QGxpbmsgQmF0Y2hFdmVudH1zLgorCQkgKi8KKwkJcHJpdmF0ZSBmaW5hbCBMaXN0PElCYXRjaExpc3RlbmVyU3luYz4gbGlzdGVuZXJzU3luYyA9IG5ldyBDb3B5T25Xcml0ZUFycmF5TGlzdDxJQmF0Y2hMaXN0ZW5lclN5bmM+KCk7CisKKwkJLyoqCisJCSAqIFRoZSB7QGxpbmsgQmF0Y2h9IGluc3RhbmNlIHRvIGFkYXB0LiBUaGlzIHdpbGwgYmUgYW4gaW5zdGFuY2Ugb2YKKwkJICoge0BsaW5rIEJhdGNofSB3aGljaCBpcyBhbHNvIGFuIGVjbGlwc2Uge0BsaW5rIEpvYn0gYW5kIHJ1bnMKKwkJICogYXN5bmNocm9ub3VzbHkgZnJvbSB0aGUgVUkgdGhyZWFkIG9mIGVjbGlwc2UuIFRoaXMgYWRhcHRlciByZWdpc3RlcnMKKwkJICogYXMgYSBsaXN0ZW5lciBvZiBhZGFwdGVkIHtAbGluayBCYXRjaH0gYW5kIHNhZmVseSBwYXNzZXMKKwkJICoge0BsaW5rIEJhdGNoRXZlbnR9J3Mgb24gdG8gbGlzdGVuZXJzIGluIHRoZSBVSSBvciBvdGhlciB0aHJlYWRzLgorCQkgKi8KKwkJcHJpdmF0ZSBmaW5hbCBJQmF0Y2ggYmF0Y2g7CisKKwkJLyoqCisJCSAqIENvbnN0cnVjdG9yCisJCSAqIAorCQkgKiBAcGFyYW0gYmF0Y2gKKwkJICogICAgICAgICAgICB0aGUge0BsaW5rIEJhdGNofSB0byBhZGFwdAorCQkgKi8KKwkJcHJvdGVjdGVkIEJhdGNoQWRhcHRlcihmaW5hbCBJQmF0Y2ggYmF0Y2gpIHsKKwkJCXRoaXMuYmF0Y2ggPSBiYXRjaDsKKwkJCWJhdGNoLmFkZEJhdGNoTGlzdGVuZXIodGhpcyk7CisJCQliYXRjaC5hZGRCYXRjaExpc3RlbmVyU3luYyh0aGlzKTsKKwkJfSAvLyBCYXRjaEFkYXB0ZXIKKworCQkvKioKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmpvYnMuYmF0Y2guSUJhdGNoI2dldE5hbWUoKQorCQkgKi8KKwkJcHVibGljIFN0cmluZyBnZXROYW1lKCkgeworCQkJcmV0dXJuIGJhdGNoLmdldE5hbWUoKTsKKwkJfQorCisJCS8qKgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uam9icy5iYXRjaC5JQmF0Y2gjZ2V0TmFtZVdpdGhTZXF1ZW5jZU51bWJlcigpCisJCSAqLworCQlwdWJsaWMgU3RyaW5nIGdldE5hbWVXaXRoU2VxdWVuY2VOdW1iZXIoKSB7CisJCQlyZXR1cm4gYmF0Y2guZ2V0TmFtZVdpdGhTZXF1ZW5jZU51bWJlcigpOworCQl9CisKKwkJLyoqCisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5qb2JzLmJhdGNoLklCYXRjaCNnZXRFeHBlcmltZW50KCkKKwkJICovCisJCXB1YmxpYyBFeHBlcmltZW50IGdldEV4cGVyaW1lbnQoKSB7CisJCQlyZXR1cm4gYmF0Y2guZ2V0RXhwZXJpbWVudCgpOworCQl9CisKKwkJLyoqCisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5qb2JzLmV4ZWN1dGlvbi5JRXhlY3V0YWJsZSNnZXRDcmVhdGlvblRpbWUoKQorCQkgKi8KKwkJcHVibGljIERhdGUgZ2V0Q3JlYXRpb25UaW1lKCkgeworCQkJcmV0dXJuIGJhdGNoLmdldENyZWF0aW9uVGltZSgpOworCQl9CisKKwkJLyoqCisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5qb2JzLmV4ZWN1dGlvbi5JRXhlY3V0YWJsZSNnZXRVbmlxdWVJRFN0cmluZygpCisJCSAqLworCQlwdWJsaWMgU3RyaW5nIGdldFVuaXF1ZUlEU3RyaW5nKCkgeworCQkJcmV0dXJuIGJhdGNoLmdldFVuaXF1ZUlEU3RyaW5nKCk7CisJCX0KKworCQkvKioKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmpvYnMuYmF0Y2guSUJhdGNoI2dldEJhdGNoU3RhdGUoKQorCQkgKi8KKwkJcHVibGljIEJhdGNoU3RhdGUgZ2V0QmF0Y2hTdGF0ZSgpIHsKKwkJCXJldHVybiBiYXRjaC5nZXRCYXRjaFN0YXRlKCk7CisJCX0KKworCQkvKioKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmpvYnMuYmF0Y2guSUJhdGNoI2dldFNlcXVlbmNlTnVtYmVyKCkKKwkJICovCisJCXB1YmxpYyBpbnQgZ2V0U2VxdWVuY2VOdW1iZXIoKSB7CisJCQlyZXR1cm4gYmF0Y2guZ2V0U2VxdWVuY2VOdW1iZXIoKTsKKwkJfQorCisJCS8qKgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uam9icy5iYXRjaC5JQmF0Y2gjaXNSdW5uaW5nSW5CYWNrZ3JvdW5kKCkKKwkJICovCisJCXB1YmxpYyBib29sZWFuIGlzUnVubmluZ0luQmFja2dyb3VuZCgpIHsKKwkJCXJldHVybiBiYXRjaC5pc1J1bm5pbmdJbkJhY2tncm91bmQoKTsKKwkJfQorCisJCS8qKgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uam9icy5iYXRjaC5JQmF0Y2gjaXNSdW5uaW5nU2ltdWxhdGlvbnNTZXF1ZW50aWFsbHkoKQorCQkgKi8KKwkJcHVibGljIGJvb2xlYW4gaXNSdW5uaW5nU2ltdWxhdGlvbnNTZXF1ZW50aWFsbHkoKSB7CisJCQlyZXR1cm4gYmF0Y2guaXNSdW5uaW5nU2ltdWxhdGlvbnNTZXF1ZW50aWFsbHkoKTsKKwkJfQorCisJCS8qKgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uam9icy5iYXRjaC5JQmF0Y2gjc2V0UnVubmluZ0luQmFja2dyb3VuZChib29sZWFuKQorCQkgKi8KKwkJcHVibGljIHZvaWQgc2V0UnVubmluZ0luQmFja2dyb3VuZChmaW5hbCBib29sZWFuIHJ1bm5pbmdJbkJhY2tncm91bmQpIHsKKwkJCWJhdGNoLnNldFJ1bm5pbmdJbkJhY2tncm91bmQocnVubmluZ0luQmFja2dyb3VuZCk7CisJCX0KKworCQkvKioKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmpvYnMuYmF0Y2guSUJhdGNoI3NldFJ1bm5pbmdTaW11bGF0aW9uc1NlcXVlbnRpYWxseShib29sZWFuKQorCQkgKi8KKwkJcHVibGljIHZvaWQgc2V0UnVubmluZ1NpbXVsYXRpb25zU2VxdWVudGlhbGx5KAorCQkJCWZpbmFsIGJvb2xlYW4gcnVubmluZ1NpbXVsYXRpb25zU2VxdWVudGlhbGx5KSB7CisJCQliYXRjaAorCQkJCQkuc2V0UnVubmluZ1NpbXVsYXRpb25zU2VxdWVudGlhbGx5KHJ1bm5pbmdTaW11bGF0aW9uc1NlcXVlbnRpYWxseSk7CisJCX0KKworCQkvKioKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmpvYnMuYmF0Y2guSUJhdGNoI3J1bigpCisJCSAqLworCQlwdWJsaWMgdm9pZCBydW4oKSB7CisJCQliYXRjaC5ydW4oKTsKKwkJfQorCisJCS8qKgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uam9icy5leGVjdXRpb24uSUV4ZWN1dGFibGUjcGF1c2UoKQorCQkgKi8KKwkJcHVibGljIHZvaWQgcGF1c2UoKSB7CisJCQliYXRjaC5wYXVzZSgpOworCQl9CisKKwkJLyoqCisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5qb2JzLmV4ZWN1dGlvbi5JRXhlY3V0YWJsZSNzdGVwKCkKKwkJICovCisJCXB1YmxpYyB2b2lkIHN0ZXAoKSB7CisJCQliYXRjaC5zdGVwKCk7CisJCX0KKworCQkvKioKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmpvYnMuZXhlY3V0aW9uLklFeGVjdXRhYmxlI3Jlc2V0KCkKKwkJICovCisJCXB1YmxpYyB2b2lkIHJlc2V0KCkgeworCQkJYmF0Y2gucmVzZXQoKTsKKwkJfQorCisJCS8qKgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uam9icy5iYXRjaC5JQmF0Y2gjc3RvcCgpCisJCSAqLworCQlwdWJsaWMgdm9pZCBzdG9wKCkgeworCQkJYmF0Y2guc3RvcCgpOworCQl9CisKKwkJLyoqCisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5qb2JzLmV4ZWN1dGlvbi5JRXhlY3V0YWJsZSNpc1J1bm5pbmcoKQorCQkgKi8KKwkJcHVibGljIGJvb2xlYW4gaXNSdW5uaW5nKCkgeworCQkJcmV0dXJuIGJhdGNoLmlzUnVubmluZygpOworCQl9CisKKwkJLyoqCisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5qb2JzLmV4ZWN1dGlvbi5JRXhlY3V0YWJsZSNpc1N0b3BwYWJsZSgpCisJCSAqLworCQlwdWJsaWMgYm9vbGVhbiBpc1N0b3BwYWJsZSgpIHsKKwkJCXJldHVybiBiYXRjaC5pc1N0b3BwYWJsZSgpOworCQl9CisKKwkJLyoqCisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5qb2JzLmJhdGNoLklCYXRjaCNjYW5jZWwoKQorCQkgKi8KKwkJcHVibGljIGJvb2xlYW4gY2FuY2VsKCkgeworCQkJcmV0dXJuIGJhdGNoLmNhbmNlbCgpOworCQl9CisKKwkJLyoqCisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5qb2JzLmJhdGNoLklCYXRjaCNhZGRCYXRjaExpc3RlbmVyKG9yZy5lY2xpcHNlLnN0ZW0uam9icy5iYXRjaC5JQmF0Y2hMaXN0ZW5lcikKKwkJICovCisJCXB1YmxpYyB2b2lkIGFkZEJhdGNoTGlzdGVuZXIoZmluYWwgSUJhdGNoTGlzdGVuZXIgbGlzdGVuZXIpIHsKKwkJCWlmICghbGlzdGVuZXJzLmNvbnRhaW5zKGxpc3RlbmVyKSkgeworCQkJCWxpc3RlbmVycy5hZGQobGlzdGVuZXIpOworCQkJfQorCQl9IC8vIGFkZEJhdGNoTGlzdGVuZXIKKworCQkvKioKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmpvYnMuYmF0Y2guSUJhdGNoI3JlbW92ZUJhdGNoTGlzdGVuZXIob3JnLmVjbGlwc2Uuc3RlbS5qb2JzLmJhdGNoLklCYXRjaExpc3RlbmVyKQorCQkgKi8KKwkJcHVibGljIHZvaWQgcmVtb3ZlQmF0Y2hMaXN0ZW5lcihmaW5hbCBJQmF0Y2hMaXN0ZW5lciBsaXN0ZW5lcikgeworCQkJbGlzdGVuZXJzLnJlbW92ZShsaXN0ZW5lcik7CisJCX0gLy8gcmVtb3ZlQmF0Y2hMaXN0ZW5lcgorCisJCS8qKgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uam9icy5iYXRjaC5JQmF0Y2gjYWRkQmF0Y2hMaXN0ZW5lclN5bmMob3JnLmVjbGlwc2Uuc3RlbS5qb2JzLmJhdGNoLklCYXRjaExpc3RlbmVyU3luYykKKwkJICovCisJCXB1YmxpYyB2b2lkIGFkZEJhdGNoTGlzdGVuZXJTeW5jKGZpbmFsIElCYXRjaExpc3RlbmVyU3luYyBsaXN0ZW5lcikgeworCQkJaWYgKCFsaXN0ZW5lcnNTeW5jLmNvbnRhaW5zKGxpc3RlbmVyKSkgeworCQkJCWxpc3RlbmVyc1N5bmMuYWRkKGxpc3RlbmVyKTsKKwkJCX0KKwkJfSAvLyBhZGRCYXRjaExpc3RlbmVyU3luYworCisJCS8qKgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uam9icy5iYXRjaC5JQmF0Y2gjcmVtb3ZlQmF0Y2hMaXN0ZW5lclN5bmMob3JnLmVjbGlwc2Uuc3RlbS5qb2JzLmJhdGNoLklCYXRjaExpc3RlbmVyU3luYykKKwkJICovCisJCXB1YmxpYyB2b2lkIHJlbW92ZUJhdGNoTGlzdGVuZXJTeW5jKGZpbmFsIElCYXRjaExpc3RlbmVyU3luYyBsaXN0ZW5lcikgeworCQkJbGlzdGVuZXJzU3luYy5yZW1vdmUobGlzdGVuZXIpOworCQl9IC8vIHJlbW92ZUJhdGNoTGlzdGVuZXJTeW5jCisKKwkJLyoqCisJCSAqIFRlbGwgdGhlIGxpc3RlbmVycyBhYm91dCB0aGUgY2hhbmdlIGluIHRoZSB7QGxpbmsgQmF0Y2h9J3Mgc3RhdGUKKwkJICogCisJCSAqIEBwYXJhbSBiYXRjaFN0YXRlCisJCSAqICAgICAgICAgICAgdGhlIG5ldyBzdGF0ZSBvZiB0aGUge0BsaW5rIEJhdGNofQorCQkgKi8KKwkJcHJvdGVjdGVkIHZvaWQgZmlyZUJhdGNoQ2hhbmdlZChmaW5hbCBCYXRjaFN0YXRlIGJhdGNoU3RhdGUpIHsKKwkJCWZpbmFsIEJhdGNoRXZlbnQgZXZlbnQgPSBuZXcgQmF0Y2hFdmVudCh0aGlzLCBiYXRjaFN0YXRlKTsKKwkJCWZvciAoZmluYWwgSUJhdGNoTGlzdGVuZXIgbGlzdGVuZXIgOiBsaXN0ZW5lcnMpIHsKKwkJCQlEaXNwbGF5U2FmZUV4ZWN1dG9yLmV4ZWN1dGVBc3luYyhuZXcgUnVubmFibGUoKSB7CisJCQkJCXB1YmxpYyB2b2lkIHJ1bigpIHsKKworCQkJCQkJbGlzdGVuZXIuYmF0Y2hDaGFuZ2VkKGV2ZW50KTsKKwkJCQkJfQorCQkJCX0pOworCQkJfSAvLyBmb3IKKwkJfSAvLyBmaXJlQmF0Y2hNYW5hZ2VyQ2hhbmdlZAorCisJCS8qKgorCQkgKiBUZWxsIHRoZSBsaXN0ZW5lcnMgYWJvdXQgdGhlIGNoYW5nZSBpbiB0aGUge0BsaW5rIEJhdGNofSdzIHN0YXRlCisJCSAqIAorCQkgKiBAcGFyYW0gYmF0Y2hTdGF0ZQorCQkgKiAgICAgICAgICAgIHRoZSBuZXcgc3RhdGUgb2YgdGhlIHtAbGluayBCYXRjaH0KKwkJICovCisJCXByb3RlY3RlZCB2b2lkIGZpcmVCYXRjaENoYW5nZWRTeW5jKGZpbmFsIEJhdGNoU3RhdGUgYmF0Y2hTdGF0ZSkgeworCQkJZmluYWwgQmF0Y2hFdmVudCBldmVudCA9IG5ldyBCYXRjaEV2ZW50KHRoaXMsIGJhdGNoU3RhdGUpOworCQkJZm9yIChmaW5hbCBJQmF0Y2hMaXN0ZW5lclN5bmMgbGlzdGVuZXIgOiBsaXN0ZW5lcnNTeW5jKSB7CisJCQkJRGlzcGxheVNhZmVFeGVjdXRvci5leGVjdXRlU3luYyhuZXcgUnVubmFibGUoKSB7CisJCQkJCXB1YmxpYyB2b2lkIHJ1bigpIHsKKwkJCQkJCWxpc3RlbmVyLmJhdGNoQ2hhbmdlZFN5bmMoZXZlbnQpOworCQkJCQl9CisJCQkJfSk7CisJCQl9IC8vIGZvcgorCQl9IC8vIGZpcmVCYXRjaENoYW5nZWRTeW5jCisKKwkJLyoqCisJCSAqIFRoaXMgaXMgd2hlcmUgdGhlIGFkYXB0ZWQge0BsaW5rIEJhdGNofSB0ZWxscyB1cyBvZiBpdHMgc3RhdGUgY2hhbmdlcworCQkgKiBhbmQgd2UgbmVlZCB0byBhZGFwdCB0aGVtIHRvIHRoZSBVSSB0aHJlYWQuCisJCSAqIAorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uam9icy5iYXRjaC5JQmF0Y2hMaXN0ZW5lciNiYXRjaENoYW5nZWQob3JnLmVjbGlwc2Uuc3RlbS5qb2JzLmJhdGNoLkJhdGNoRXZlbnQpCisJCSAqLworCQlwdWJsaWMgdm9pZCBiYXRjaENoYW5nZWQoZmluYWwgQmF0Y2hFdmVudCBldmVudCkgeworCQkJZmlyZUJhdGNoQ2hhbmdlZChldmVudC5nZXRCYXRjaFN0YXRlKCkpOworCQkJCisJCQkKKy8vCQkJdHJ5IHsKKy8vCQkJCWlmICghRGlzcGxheS5nZXREZWZhdWx0KCkuaXNEaXNwb3NlZCgpKSB7CisvLwkJCQkJLy8gWWVzCisvLwkJCQkJRGlzcGxheS5nZXREZWZhdWx0KCkuYXN5bmNFeGVjKG5ldyBSdW5uYWJsZSgpIHsKKy8vCQkJCQkJcHVibGljIHZvaWQgcnVuKCkgeworLy8JCQkJCQkJZmlyZUJhdGNoQ2hhbmdlZChldmVudC5nZXRCYXRjaFN0YXRlKCkpOworLy8JCQkJCQl9CisvLwkJCQkJfSk7CisvLwkJCQl9IC8vIGlmCisvLwkJCX0gLy8gdHJ5CisvLwkJCWNhdGNoIChmaW5hbCBOdWxsUG9pbnRlckV4Y2VwdGlvbiBlKSB7CisvLwkJCQkvLyBOb3RoaW5nIHRvIGRvLCBzaHV0dGluZyBkb3duLi4uCisvLwkJCX0gLy8gY2F0Y2ggTnVsbFBvaW50ZXJFeGNlcHRpb24KKy8vCQkJY2F0Y2ggKGZpbmFsIEVycm9yIG5jZGZlKSB7CisvLwkJCQkvLyBJZiB3ZSBnZXQgdGhpcyBleGNlcHRpb24sIGl0IGlzIGJlY2F1c2Ugd2UncmUgbm90IHJ1bm5pbmcgaW4KKy8vCQkJCS8vIGVjbGlwc2UuIEp1c3QgZmlyZSB0aGUgZXZlbnQuCisvLwkJCQlmaXJlQmF0Y2hDaGFuZ2VkKGV2ZW50LmdldEJhdGNoU3RhdGUoKSk7CisvLwkJCX0gLy8gY2F0Y2gKKworCQl9IC8vIGJhdGNoQ2hhbmdlZAorCisJCS8qKgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uam9icy5iYXRjaC5JQmF0Y2hMaXN0ZW5lclN5bmMjYmF0Y2hDaGFuZ2VkU3luYyhvcmcuZWNsaXBzZS5zdGVtLmpvYnMuYmF0Y2guQmF0Y2hFdmVudCkKKwkJICovCisJCXB1YmxpYyB2b2lkIGJhdGNoQ2hhbmdlZFN5bmMoZmluYWwgQmF0Y2hFdmVudCBldmVudCkgeworCQkJZmlyZUJhdGNoQ2hhbmdlZFN5bmMoZXZlbnQuZ2V0QmF0Y2hTdGF0ZSgpKTsJCQkKKwkJCQorLy8JCQl0cnkgeworLy8JCQkJaWYgKCFEaXNwbGF5LmdldERlZmF1bHQoKS5pc0Rpc3Bvc2VkKCkpIHsKKy8vCQkJCQkvLyBZZXMKKy8vCQkJCQlEaXNwbGF5LmdldERlZmF1bHQoKS5hc3luY0V4ZWMobmV3IFJ1bm5hYmxlKCkgeworLy8JCQkJCQlwdWJsaWMgdm9pZCBydW4oKSB7CisvLwkJCQkJCQlmaXJlQmF0Y2hDaGFuZ2VkU3luYyhldmVudC5nZXRCYXRjaFN0YXRlKCkpOworLy8JCQkJCQl9CisvLwkJCQkJfSk7CisvLwkJCQl9IC8vIGlmCisvLwkJCX0gLy8gdHJ5CisvLwkJCWNhdGNoIChmaW5hbCBOdWxsUG9pbnRlckV4Y2VwdGlvbiBlKSB7CisvLwkJCQkvLyBOb3RoaW5nIHRvIGRvLCBzaHV0dGluZyBkb3duLi4uCisvLwkJCX0gLy8gY2F0Y2ggTnVsbFBvaW50ZXJFeGNlcHRpb24KKy8vCQkJY2F0Y2ggKGZpbmFsIEVycm9yIG5jZGZlKSB7CisvLwkJCQkvLyBJZiB3ZSBnZXQgdGhpcyBleGNlcHRpb24sIGl0IGlzIGJlY2F1c2Ugd2UncmUgbm90IHJ1bm5pbmcgaW4KKy8vCQkJCS8vIGVjbGlwc2UuIEp1c3QgZmlyZSB0aGUgZXZlbnQuCisvLwkJCQlmaXJlQmF0Y2hDaGFuZ2VkKGV2ZW50LmdldEJhdGNoU3RhdGUoKSk7CisvLwkJCX0gLy8gY2F0Y2gKKworCQl9IC8vIGJhdGNoQ2hhbmdlZFN5bmMKKworCQkvKioKKwkJICogQHNlZSBqYXZhLmxhbmcuT2JqZWN0I3RvU3RyaW5nKCkKKwkJICovCisJCUBPdmVycmlkZQorCQlwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkgeworCQkJcmV0dXJuIGJhdGNoLnRvU3RyaW5nKCk7CisJCX0gLy8gdG9TdHJpbmcKKwl9IC8vIEJhdGNoQWRhcHRlcgorfSAvLyBCYXRjaE1hbmFnZXIKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5qb2JzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2pvYnMvYmF0Y2gvQmF0Y2hNYW5hZ2VyRXZlbnQuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5qb2JzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2pvYnMvYmF0Y2gvQmF0Y2hNYW5hZ2VyRXZlbnQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NmYwM2ZhCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmpvYnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vam9icy9iYXRjaC9CYXRjaE1hbmFnZXJFdmVudC5qYXZhCkBAIC0wLDAgKzEsNjMgQEAKKy8vIEJhdGNoTWFuYWdlckV2ZW50LmphdmEKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5qb2JzLmJhdGNoOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGphdmEudXRpbC5FdmVudE9iamVjdDsKKworLyoqCisgKiBUaGlzIGNsYXNzIHJlcHJlc2VudHMgYW4gZXZlbnQgdGhhdCBoYXMgb2NjdXJyZWQgaW4gdGhlIG9wZXJhdGlvbiBvZiB0aGUKKyAqIHtAbGluayBCYXRjaE1hbmFnZXJ9LgorICovCitwdWJsaWMgY2xhc3MgQmF0Y2hNYW5hZ2VyRXZlbnQgZXh0ZW5kcyBFdmVudE9iamVjdCB7CisKKwkvKioKKwkgKiBEZWZhdWx0IHNlcmlhbCBpZC4KKwkgKi8KKwl0cmFuc2llbnQgc3RhdGljIGZpbmFsIGxvbmcgc2VyaWFsVmVyc2lvblVJRCA9IDFMOworCisJdHJhbnNpZW50IElCYXRjaFtdIGJhdGNoZXNBZGRlZCA9IG51bGw7CisKKwl0cmFuc2llbnQgSUJhdGNoW10gYmF0Y2hlc1JlbW92ZWQgPSBudWxsOworCisJLyoqCisJICogQHBhcmFtIGJhdGNoTWFuYWdlcgorCSAqICAgICAgICAgICAgdGhlIHtAbGluayBCYXRjaE1hbmFnZXJ9IHRoYXQgY3JlYXRlZCB0aGUgZXZlbnQuCisJICogQHBhcmFtIGJhdGNoc1JlbW92ZWQKKwkgKiAgICAgICAgICAgIHRoZSB7QGxpbmsgQmF0Y2h9cyByZW1vdmVkIGZyb20gbWFuYWdlbWVudCBieSB0aGUKKwkgKiAgICAgICAgICAgIHtAbGluayBCYXRjaE1hbmFnZXJ9LgorCSAqIEBwYXJhbSBiYXRjaHNBZGRlZAorCSAqICAgICAgICAgICAgdGhlIHtAbGluayBCYXRjaH1zIGFkZGVkIHRvIHRoZSBtYW5hZ2VtZW50IG9mIHRoZQorCSAqICAgICAgICAgICAge0BsaW5rIEJhdGNoTWFuYWdlcn0uCisJICovCisJcHVibGljIEJhdGNoTWFuYWdlckV2ZW50KGZpbmFsIEJhdGNoTWFuYWdlciBiYXRjaE1hbmFnZXIsCisJCQlmaW5hbCBJQmF0Y2hbXSBiYXRjaHNBZGRlZCwgZmluYWwgSUJhdGNoW10gYmF0Y2hzUmVtb3ZlZCkgeworCQlzdXBlcihiYXRjaE1hbmFnZXIpOworCQl0aGlzLmJhdGNoZXNBZGRlZCA9IGJhdGNoc0FkZGVkLmNsb25lKCk7CisJCXRoaXMuYmF0Y2hlc1JlbW92ZWQgPSBiYXRjaHNSZW1vdmVkLmNsb25lKCk7CisJfSAvLyBCYXRjaE1hbmFnZXJFdmVudAorCisJLyoqCisJICogQHJldHVybiB0aGUgYmF0Y2hlc0FkZGVkCisJICovCisJcHVibGljIGZpbmFsIElCYXRjaFtdIGdldEJhdGNoZXNBZGRlZCgpIHsKKwkJcmV0dXJuIGJhdGNoZXNBZGRlZDsKKwl9CisKKwkvKioKKwkgKiBAcmV0dXJuIHRoZSBiYXRjaGVzUmVtb3ZlZAorCSAqLworCXB1YmxpYyBmaW5hbCBJQmF0Y2hbXSBnZXRCYXRjaGVzUmVtb3ZlZCgpIHsKKwkJcmV0dXJuIGJhdGNoZXNSZW1vdmVkOworCX0KKworfSAvLyBCYXRjaE1hbmFnZXJFdmVudApkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmpvYnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vam9icy9iYXRjaC9CYXRjaFN0YXRlLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uam9icy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9qb2JzL2JhdGNoL0JhdGNoU3RhdGUuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YjZkNDQ4Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmpvYnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vam9icy9iYXRjaC9CYXRjaFN0YXRlLmphdmEKQEAgLTAsMCArMSw0NiBAQAorLy8gQmF0Y2hTdGF0ZS5qYXZhCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uam9icy5iYXRjaDsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworLyoqCisgKiBUaGlzIGVudW1lcmF0aW9uIGRlZmluZXMgdGhlIHN0YXRlcyB0aGF0IGEge0BsaW5rIEJhdGNofSBjYW4gYmUgaW4uCisgKiAKKyAqIEBzZWUgU2ltdWxhdGlvblN0YXRlCisgKi8KK3B1YmxpYyBlbnVtIEJhdGNoU3RhdGUgeworCS8qKgorCSAqIFdoZW4gdGhlIHtAbGluayBCYXRjaH0gaGFzIGJlZW4gc2NoZWR1bGVkIGZvciBleGVjdXRpb24gYW5kIGlzIHJ1bm5pbmcuCisJICogVGhpcyBpcyB0aGUgaW5pdGlhbCBzdGF0ZSBvZiBhbGwgbmV3bHkgY3JlYXRlZCB7QGxpbmsgQmF0Y2h9cy4KKwkgKiA8cD4KKwkgKiBUaGUgbmV4dCBzdGF0ZSBpczoge0BsaW5rICNQQVVTRUR9CisJICovCisJUlVOTklORywKKworCS8qKgorCSAqIFdoZW4gYWxsIG9mIHRoZSB7QGxpbmsgU2ltdWxhdGlvbn1zIGluIGEge0BsaW5rIEJhdGNofSBhcmUgbm90IHNjaGVkdWxlZAorCSAqIGZvciBleGVjdXRpb24uCisJICogPHA+CisJICogVGhlIG5leHQgc3RhdGVzIGFyZSB7QGxpbmsgI1JVTk5JTkd9LCB7QGxpbmsgI1NUT1BQRUR9CisJICogCisJICogQHNlZSAjUlVOTklORworCSAqIEBzZWUgI1NUT1BQRUQKKwkgKi8KKwlQQVVTRUQsCisKKwkvKioKKwkgKiBUaGUgc2ltdWxhdGlvbiBpcyBiZWluZyByZW1vdmVkIGZyb20gdGhlIHtAbGluayBTaW11bGF0aW9uTWFuYWdlcn0gYW5kIGl0cyBzdGF0ZQorCSAqIGluZm9ybWF0aW9uIGRlc3Ryb3llZC4KKwkgKi8KKwlTVE9QUEVECit9IC8vIEJhdGNoU3RhdGUKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5qb2JzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2pvYnMvYmF0Y2gvSUJhdGNoLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uam9icy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9qb2JzL2JhdGNoL0lCYXRjaC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkwNjM2NTUKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uam9icy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9qb2JzL2JhdGNoL0lCYXRjaC5qYXZhCkBAIC0wLDAgKzEsMTE5IEBACisvLyBJQmF0Y2guamF2YQorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmpvYnMuYmF0Y2g7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmV4cGVyaW1lbnQuRXhwZXJpbWVudDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmpvYnMuZXhlY3V0aW9uLklFeGVjdXRhYmxlOworCisvKioKKyAqIFRoaXMgaW50ZXJmYWNlIGlzIGltcGxlbWVudGVkIGJ5IGNsYXNzZXMgdGhhdCByZXByZXNlbnQge0BsaW5rIEJhdGNofQorICogc2ltdWxhdGlvbnMuCisgKiAKKyAqIEBzZWUgQmF0Y2hNYW5hZ2VyCisgKi8KK3B1YmxpYyBpbnRlcmZhY2UgSUJhdGNoIGV4dGVuZHMgSUV4ZWN1dGFibGUgeworCisJLyoqCisJICogQHJldHVybiB0aGUgY3VycmVudCBzdGF0ZSBvZiB0aGUge0BsaW5rIElCYXRjaH0KKwkgKi8KKwlCYXRjaFN0YXRlIGdldEJhdGNoU3RhdGUoKTsKKworCS8qKgorCSAqIEByZXR1cm4gPGNvZGU+dHJ1ZTwvY29kZT4gaWYgdGhlIGRlcml2ZWQgc2ltdWxhdGlvbnMgYXJlIHRvIGJlIHJ1bgorCSAqICAgICAgICAgc2VxdWVudGlhbGx5LCA8Y29kZT5mYWxzZTwvY29kZT4sIG90aGVyd2lzZS4KKwkgKi8KKwlib29sZWFuIGlzUnVubmluZ1NpbXVsYXRpb25zU2VxdWVudGlhbGx5KCk7CisKKwkvKioKKwkgKiBAcGFyYW0gcnVubmluZ1NpbXVsYXRpb25zU2VxdWVudGlhbGx5CisJICogICAgICAgICAgICB0aGUgdmFsdWUgb2YgdGhlIGZsYWcgY29udHJvbGxpbmcgdGhlIGNob2ljZSBvZiBzZXF1ZW50aWFsIG9yCisJICogICAgICAgICAgICBwYXJhbGxlbCBleGVjdXRpb24gb2YgdGhlIGRlcml2ZWQge0BsaW5rIFNpbXVsYXRpb259cy4KKwkgKiAgICAgICAgICAgIDxjb2RlPnRydWU8L2NvZGU+IGlmIHRoZSBkZXJpdmVkIHtAbGluayBTaW11bGF0aW9ufXMgYXJlIHRvIGJlCisJICogICAgICAgICAgICBydW4gc2VxdWVudGlhbGx5LCA8Y29kZT5mYWxzZTwvY29kZT4sIG90aGVyd2lzZS4KKwkgKi8KKwl2b2lkIHNldFJ1bm5pbmdTaW11bGF0aW9uc1NlcXVlbnRpYWxseSgKKwkJCWJvb2xlYW4gcnVubmluZ1NpbXVsYXRpb25zU2VxdWVudGlhbGx5KTsKKworCS8qKgorCSAqIEByZXR1cm4gPGNvZGU+dHJ1ZTwvY29kZT4sIGlmIHRoZSBkZXJpdmVkIHtAbGluayBTaW11bGF0aW9ufXMgd2lsbCBiZSBydW4KKwkgKiAgICAgICAgIGluIHRoZSBiYWNrZ3JvdW5kIChpLmUuLCBubyBHVUkpLCA8Y29kZT5mYWxzZTwvY29kZT4sIG90aGVyd2lzZS4KKwkgKi8KKwlib29sZWFuIGlzUnVubmluZ0luQmFja2dyb3VuZCgpOworCisJLyoqCisJICogQHBhcmFtIHJ1bm5pbmdJbkJhY2tncm91bmQKKwkgKiAgICAgICAgICAgIHRoZSB2YWx1ZSBvZiB0aGUgZmxhZyBjb250cm9sbGluZyB0aGUgY2hvaWNlIG9mIGJhY2tncm91bmQgb3IKKwkgKiAgICAgICAgICAgIGZvcmVncm91bmQgZXhlY3V0aW9uIG9mIHRoZSBkZXJpdmVkIHtAbGluayBTaW11bGF0aW9ufXMuCisJICogICAgICAgICAgICA8Y29kZT50cnVlPC9jb2RlPiBpZiB0aGUgZGVyaXZlZCB7QGxpbmsgU2ltdWxhdGlvbn1zIGFyZSB0byBiZQorCSAqICAgICAgICAgICAgcnVuIGluIHRoZSBiYWNrZ3JvdW5kLCA8Y29kZT5mYWxzZTwvY29kZT4sIGlmIGluIHRoZQorCSAqICAgICAgICAgICAgZm9yZWdyb3VuZC4KKwkgKi8KKwl2b2lkIHNldFJ1bm5pbmdJbkJhY2tncm91bmQoYm9vbGVhbiBydW5uaW5nSW5CYWNrZ3JvdW5kKTsKKworCS8qKgorCSAqIFN0YXJ0IHJ1bm5pbmcgdGhlIHtAbGluayBJQmF0Y2h9LgorCSAqLworCXZvaWQgcnVuKCk7CisKKwkvKioKKwkgKiBTdG9wIHRoZSB7QGxpbmsgSUJhdGNofSBhbmQgYWxsIG9mIHRoZSBkZXJpdmVkIHtAbGluayBJU2ltdWxhdGlvbn1zLgorCSAqLworCXZvaWQgc3RvcCgpOworCisJLyoqCisJICogQHJldHVybiA8Y29kZT50cnVlPC9jb2RlPiBpZiB0aGUgZXhlY3V0aW9uIG9mIHRoZSB7QGxpbmsgSUJhdGNofSBoYXMgYmVlbgorCSAqICAgICAgICAgY2FuY2VsZWQuCisJICovCisJYm9vbGVhbiBjYW5jZWwoKTsKKworCS8qKgorCSAqIEFkZCBhIGxpc3RlbmVyIHRvIHRoZSB7QGxpbmsgSUJhdGNofS4KKwkgKiAKKwkgKiBAcGFyYW0gbGlzdGVuZXIKKwkgKiAgICAgICAgICAgIGFuIHtAbGluayBJQmF0Y2hMaXN0ZW5lcn0gd2hvIHdhbnRzIHRvIGJlIGtlcHQgaW5mb3JtZWQgb2YgdGhlCisJICogICAgICAgICAgICBzdGF0ZSBvZiB0aGUge0BsaW5rIElCYXRjaH0uCisJICovCisJdm9pZCBhZGRCYXRjaExpc3RlbmVyKGZpbmFsIElCYXRjaExpc3RlbmVyIGxpc3RlbmVyKTsKKworCS8qKgorCSAqIFJlbW92ZSBhIGxpc3RlbmVyIGZyb20gdGhlIHtAbGluayBJQmF0Y2h9LgorCSAqIAorCSAqIEBwYXJhbSBsaXN0ZW5lcgorCSAqICAgICAgICAgICAgdGhlIGxpc3RlbmVyIHRvIHJlbW92ZS4KKwkgKi8KKwl2b2lkIHJlbW92ZUJhdGNoTGlzdGVuZXIoZmluYWwgSUJhdGNoTGlzdGVuZXIgbGlzdGVuZXIpOworCisJLyoqCisJICogQWRkIGEgbGlzdGVuZXIgdG8gdGhlIHtAbGluayBJQmF0Y2h9LgorCSAqIAorCSAqIEBwYXJhbSBsaXN0ZW5lcgorCSAqICAgICAgICAgICAgYW4ge0BsaW5rIElCYXRjaExpc3RlbmVyfSB3aG8gd2FudHMgdG8gYmUga2VwdCBpbmZvcm1lZCBvZiB0aGUKKwkgKiAgICAgICAgICAgIHN0YXRlIG9mIHRoZSB7QGxpbmsgSUJhdGNofS4KKwkgKi8KKwl2b2lkIGFkZEJhdGNoTGlzdGVuZXJTeW5jKGZpbmFsIElCYXRjaExpc3RlbmVyU3luYyBsaXN0ZW5lcik7CisKKwkvKioKKwkgKiBSZW1vdmUgYSBsaXN0ZW5lciBmcm9tIHRoZSB7QGxpbmsgSUJhdGNofS4KKwkgKiAKKwkgKiBAcGFyYW0gbGlzdGVuZXIKKwkgKiAgICAgICAgICAgIHRoZSBsaXN0ZW5lciB0byByZW1vdmUuCisJICovCisJdm9pZCByZW1vdmVCYXRjaExpc3RlbmVyU3luYyhmaW5hbCBJQmF0Y2hMaXN0ZW5lclN5bmMgbGlzdGVuZXIpOworCisJLyoqCisJICogQHJldHVybiB0aGUge0BsaW5rIEV4cGVyaW1lbnR9IHRoYXQgaXMgdXNlZCB0byBjcmVhdGVkIHRoZQorCSAqICAgICAgICAge0BsaW5rIFNpbXVsYXRpb259cy4KKwkgKi8KKwlFeHBlcmltZW50IGdldEV4cGVyaW1lbnQoKTsKKworfSAvLyBJQmF0Y2gKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5qb2JzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2pvYnMvYmF0Y2gvSUJhdGNoTGlzdGVuZXIuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5qb2JzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2pvYnMvYmF0Y2gvSUJhdGNoTGlzdGVuZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZTVmMGFjCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmpvYnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vam9icy9iYXRjaC9JQmF0Y2hMaXN0ZW5lci5qYXZhCkBAIC0wLDAgKzEsMzMgQEAKKy8vIElCYXRjaExpc3RlbmVyLmphdmEKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5qb2JzLmJhdGNoOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uam9icy5leGVjdXRpb24uSUV4ZWN1dGFibGVMaXN0ZW5lcjsKKworCisvKioKKyAqIFRoaXMgaW50ZXJmYWNlIGlzIGltcGxlbWVudGVkIGJ5IGNsYXNzZXMgdGhhdCB3YW50IHRvIGxpc3RlbiB0byBldmVudHMKKyAqIGdlbmVyYXRlZCBieSBhIHtAbGluayBJQmF0Y2h9LgorICogCisgKiBAc2VlIElCYXRjaAorICovCitwdWJsaWMgaW50ZXJmYWNlIElCYXRjaExpc3RlbmVyIGV4dGVuZHMgSUV4ZWN1dGFibGVMaXN0ZW5lciB7CisKKwkvKioKKwkgKiBAcGFyYW0gZXZlbnQKKwkgKiAgICAgICAgICAgIHRoZSB7QGxpbmsgQmF0Y2hFdmVudH0gdGhlIHNwZWNpZmllcyB3aGF0IGNoYW5nZWQgaW4gdGhlCisJICogICAgICAgICAgICB7QGxpbmsgSUJhdGNofS4KKwkgKi8KKwl2b2lkIGJhdGNoQ2hhbmdlZChCYXRjaEV2ZW50IGV2ZW50KTsKKworfSAvLyBJQmF0Y2hMaXN0ZW5lcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmpvYnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vam9icy9iYXRjaC9JQmF0Y2hMaXN0ZW5lclN5bmMuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5qb2JzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2pvYnMvYmF0Y2gvSUJhdGNoTGlzdGVuZXJTeW5jLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjNjY2ZhOQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5qb2JzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2pvYnMvYmF0Y2gvSUJhdGNoTGlzdGVuZXJTeW5jLmphdmEKQEAgLTAsMCArMSwzNCBAQAorLy8gSUJhdGNoTGlzdGVuZXIuamF2YQorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmpvYnMuYmF0Y2g7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5qb2JzLmV4ZWN1dGlvbi5JRXhlY3V0YWJsZUxpc3RlbmVyU3luYzsKKworLyoqCisgKiBUaGlzIGludGVyZmFjZSBpcyBpbXBsZW1lbnRlZCBieSBjbGFzc2VzIHRoYXQgd2FudCB0byBsaXN0ZW4gdG8gZXZlbnRzCisgKiBnZW5lcmF0ZWQgYnkgYSB7QGxpbmsgSUJhdGNofS4gVGhlIHRocmVhZCBydW5uaW5nIHRoZSB7QGxpbmsgQmF0Y2h9IHdpbGwgd2FpdAorICogdW50aWwgdGhlIHtAbGluayAjYmF0Y2hDaGFuZ2VkU3luYyhCYXRjaEV2ZW50KX0gbWV0aG9kIHJldHVybnMgYmVmb3JlIGl0CisgKiBjb250aW51ZXMgZXhlY3V0aW9uLgorICogCisgKiBAc2VlIElCYXRjaAorICovCitwdWJsaWMgaW50ZXJmYWNlIElCYXRjaExpc3RlbmVyU3luYyBleHRlbmRzIElFeGVjdXRhYmxlTGlzdGVuZXJTeW5jIHsKKworCS8qKgorCSAqIEBwYXJhbSBldmVudAorCSAqICAgICAgICAgICAgdGhlIHtAbGluayBCYXRjaEV2ZW50fSB0aGUgc3BlY2lmaWVzIHdoYXQgY2hhbmdlZCBpbiB0aGUKKwkgKiAgICAgICAgICAgIHtAbGluayBJQmF0Y2h9LgorCSAqLworCXZvaWQgYmF0Y2hDaGFuZ2VkU3luYyhCYXRjaEV2ZW50IGV2ZW50KTsKKworfSAvLyBJQmF0Y2hMaXN0ZW5lclN5bmMKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5qb2JzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2pvYnMvYmF0Y2gvSUJhdGNoTWFuYWdlckxpc3RlbmVyLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uam9icy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9qb2JzL2JhdGNoL0lCYXRjaE1hbmFnZXJMaXN0ZW5lci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg3YzVmZjQKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uam9icy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9qb2JzL2JhdGNoL0lCYXRjaE1hbmFnZXJMaXN0ZW5lci5qYXZhCkBAIC0wLDAgKzEsMzEgQEAKKy8vIElCYXRjaE1hbmFnZXJMaXN0ZW5lci5qYXZhCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uam9icy5iYXRjaDsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmpvYnMuZXhlY3V0aW9uLklFeGVjdXRhYmxlTWFuYWdlckxpc3RlbmVyOworCisvKioKKyAqIFRoaXMgaW50ZXJmYWNlIGlzIGltcGxlbWVudGVkIGJ5IGNsYXNzZXMgdGhhdCBsaXN0ZW4gZm9yCisgKiB7QGxpbmsgQmF0Y2hNYW5hZ2VyRXZlbnR9cy4KKyAqIAorICogQHNlZSBCYXRjaE1hbmFnZXIKKyAqIEBzZWUgQmF0Y2gKKyAqLworcHVibGljIGludGVyZmFjZSBJQmF0Y2hNYW5hZ2VyTGlzdGVuZXIgZXh0ZW5kcyBJRXhlY3V0YWJsZU1hbmFnZXJMaXN0ZW5lciB7CisKKwkvKioKKwkgKiBAcGFyYW0gZXZlbnQKKwkgKi8KKwl2b2lkIGJhdGNoZXNDaGFuZ2VkKEJhdGNoTWFuYWdlckV2ZW50IGV2ZW50KTsKKworfSAvLyBJQmF0Y2hNYW5hZ2VyTGlzdGVuZXIKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uam9icy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9qb2JzL2JhdGNoL0lCYXRjaE1hbmFnZXJMaXN0ZW5lclN5bmMuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5qb2JzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2pvYnMvYmF0Y2gvSUJhdGNoTWFuYWdlckxpc3RlbmVyU3luYy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZkOTE4ZTAKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uam9icy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9qb2JzL2JhdGNoL0lCYXRjaE1hbmFnZXJMaXN0ZW5lclN5bmMuamF2YQpAQCAtMCwwICsxLDMzIEBACisvLyBJQmF0Y2hNYW5hZ2VyTGlzdGVuZXIuamF2YQorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmpvYnMuYmF0Y2g7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5qb2JzLmV4ZWN1dGlvbi5JRXhlY3V0YWJsZU1hbmFnZXJMaXN0ZW5lclN5bmM7CisKKy8qKgorICogVGhpcyBpbnRlcmZhY2UgaXMgaW1wbGVtZW50ZWQgYnkgY2xhc3NlcyB0aGF0IGxpc3RlbiBmb3IKKyAqIHtAbGluayBCYXRjaE1hbmFnZXJFdmVudH1zLiBUaGUgdGhyZWFkIHJ1bm5pbmcgdGhlIHtAbGluayBCYXRjaE1hbmFnZXJ9IHdpbGwKKyAqIHdhaXQgdW50aWwgdGhlIHtAbGluayAjYmF0Y2hlc0NoYW5nZWRTeW5jKEJhdGNoTWFuYWdlckV2ZW50KX0gbWV0aG9kIHJldHVybnMKKyAqIGJlZm9yZSBpdCBjb250aW51ZXMgZXhlY3V0aW9uLgorICogCisgKiBAc2VlIElCYXRjaE1hbmFnZXJMaXN0ZW5lcgorICovCitwdWJsaWMgaW50ZXJmYWNlIElCYXRjaE1hbmFnZXJMaXN0ZW5lclN5bmMgZXh0ZW5kcworCQlJRXhlY3V0YWJsZU1hbmFnZXJMaXN0ZW5lclN5bmMgeworCisJLyoqCisJICogQHBhcmFtIGV2ZW50CisJICovCisJdm9pZCBiYXRjaGVzQ2hhbmdlZFN5bmMoQmF0Y2hNYW5hZ2VyRXZlbnQgZXZlbnQpOworCit9IC8vIElCYXRjaE1hbmFnZXJMaXN0ZW5lclN5bmMKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uam9icy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9qb2JzL2JhdGNoL01lc3NhZ2VzLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uam9icy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9qb2JzL2JhdGNoL01lc3NhZ2VzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzE3YTU1ZAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5qb2JzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2pvYnMvYmF0Y2gvTWVzc2FnZXMuamF2YQpAQCAtMCwwICsxLDQxIEBACisvLyBNZXNzYWdlcy5qYXZhCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uam9icy5iYXRjaDsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqYXZhLnV0aWwuTWlzc2luZ1Jlc291cmNlRXhjZXB0aW9uOworaW1wb3J0IGphdmEudXRpbC5SZXNvdXJjZUJ1bmRsZTsKKworLyoqCisgKiBUaGlzIGNsYXNzIHJlcHJlc2VudHMKKyAqLworcHVibGljIGNsYXNzIE1lc3NhZ2VzIHsKKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgQlVORExFX05BTUUgPSAib3JnLmVjbGlwc2Uuc3RlbS5qb2JzLmJhdGNoLm1lc3NhZ2VzIjsgLy8kTk9OLU5MUy0xJAorCXByaXZhdGUgc3RhdGljIGZpbmFsIFJlc291cmNlQnVuZGxlIFJFU09VUkNFX0JVTkRMRSA9IFJlc291cmNlQnVuZGxlCisJCQkuZ2V0QnVuZGxlKEJVTkRMRV9OQU1FKTsKKworCXByaXZhdGUgTWVzc2FnZXMoKSB7CisJCS8vIE5vdGhpbmcKKwl9CisKKwkvKioKKwkgKiBAcGFyYW0ga2V5CisJICogQHJldHVybiB0aGUgc3RyaW5nIHRoYXQgbWF0Y2hlcyB0aGUga2V5CisJICovCisJcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0U3RyaW5nKFN0cmluZyBrZXkpIHsKKwkJdHJ5IHsKKwkJCXJldHVybiBSRVNPVVJDRV9CVU5ETEUuZ2V0U3RyaW5nKGtleSk7CisJCX0gY2F0Y2ggKE1pc3NpbmdSZXNvdXJjZUV4Y2VwdGlvbiBlKSB7CisJCQlyZXR1cm4gJyEnICsga2V5ICsgJyEnOworCQl9CisJfQorfSAvLyBNZXNzYWdlcwpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmpvYnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vam9icy9iYXRjaC9tZXNzYWdlcy5wcm9wZXJ0aWVzIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmpvYnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vam9icy9iYXRjaC9tZXNzYWdlcy5wcm9wZXJ0aWVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRjMmU0ODEKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uam9icy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9qb2JzL2JhdGNoL21lc3NhZ2VzLnByb3BlcnRpZXMKQEAgLTAsMCArMSwyNSBAQAorIyBtZXNzYWdlcy5wcm9wZXJ0aWVzCisjCisjIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjICogQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorIyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyMgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyMgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorIyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisjICoKKyMgKiBDb250cmlidXRvcnM6CisjICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorIyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjIEJhdGNoTWFuYWdlcgorQmF0Y2hNZ3IuRGVzZXJpYWxpemF0aW9uX0Vycm9yID0gUHJvYmxlbSByZWFkaW5nIGluIGEgc2VyaWFsaXplZCBFeHBlcmltZW50IGZyb20gVVJJIFwiezB9XCIKK0JhdGNoTWdyLlN0YXJ0QmF0Y2ggPSBTdGFydGluZyBiYXRjaAorQmF0Y2hNZ3IuQ3J0U2ltID0gQ3JlYXRpbmcgYmF0Y2gKK0JhdGNoTWdyLlJ1biA9IFJ1bm5pbmcgYmF0Y2gKKworCisjIEV4cGVyaW1lbnQKK0V4cC5JRXJyID0gQW4gaW50ZXJuYWwgZXJyb3Igb2NjdXJyZWQgcnVubmluZyBFeHBlcmltZW50ICJ7MH0iLgorRXhwLk1pc3NpbmdTY2VuYXJpbyA9IFRoZSBFeHBlcmltZW50ICJ7MH0iIGNhbm5vdCBydW4gYmVjYXVzZSBpdCBkb2VzIG5vdCBoYXZlIGEgYmFzZSBTY2VuYXJpby4KK0V4cC5NaXNzaW5nU2VxID0gVGhlIEV4cGVyaW1lbnQgInswfSIgY2Fubm90IHJ1biBiZWNhdXNlIGl0cyBiYXNlIFNjZW5hcmlvIGRvZXMgbm90IGhhdmUgYSBTZXF1ZW5jZXIuCitFeHAuTWlzc2luZ01vZGVsPSBUaGUgRXhwZXJpbWVudCAiezB9IiBjYW5ub3QgcnVuIGJlY2F1c2UgaXRzIGJhc2UgU2NlbmFyaW8gZG9lcyBub3QgaGF2ZSBhIE1vZGVsLgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5qb2JzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2pvYnMvYmF0Y2gvbWVzc2FnZXNfZGUucHJvcGVydGllcyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5qb2JzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2pvYnMvYmF0Y2gvbWVzc2FnZXNfZGUucHJvcGVydGllcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NTg4MWQ4Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmpvYnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vam9icy9iYXRjaC9tZXNzYWdlc19kZS5wcm9wZXJ0aWVzCkBAIC0wLDAgKzEsMjUgQEAKKyMgbWVzc2FnZXMucHJvcGVydGllcworIworIyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIyAqIENvcHlyaWdodCAoYykgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyMgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisjICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisjICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyMgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorIyAqCisjICogQ29udHJpYnV0b3JzOgorIyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworIyBCYXRjaE1hbmFnZXIKK0JhdGNoTWdyLkRlc2VyaWFsaXphdGlvbl9FcnJvcj1Qcm9ibGVtIGJlaW0gTGVzZW4gaW4gZWluZW0gc2VyaWFsaXNpZXJ0ZW4gRXhwZXJpbWVudCB2b24gVVJJIFwgInswfSBcIgorQmF0Y2hNZ3IuU3RhcnRCYXRjaD1CYXRjaCB3aXJkIGdlc3RhcnRldAorQmF0Y2hNZ3IuQ3J0U2ltPUJhdGNoIHdpcmQgZXJzdGVsbHQKK0JhdGNoTWdyLlJ1bj1MYXVmZW5kZSBCYXRjaAorCisKKyMgRXhwZXJpbWVudAorRXhwLklFcnI9RWluIGludGVybmVyIEZlaGxlciBhdWZnZXRyZXRlbiBsYXVmZW5kZW4gRXhwZXJpbWVudCAiezB9Ii4KK0V4cC5NaXNzaW5nU2NlbmFyaW89RGFzIEV4cGVyaW1lbnQgInswfSIga2FubiBuaWNodCBhdXNnZWZcdTAwZmNocnQgd2VyZGVuLCB3ZWlsIGVzIFx1MDBmY2JlciBrZWluIEJhc2lzLVN6ZW5hcmlvIHZlcmZcdTAwZmNndC4KK0V4cC5NaXNzaW5nU2VxPURhcyBFeHBlcmltZW50ICJ7MH0iIGthbm4gbmljaHQgYXVzZ2VmXHUwMGZjaHJ0IHdlcmRlbiwgd2VpbCBkYXMgQmFzaXMtU3plbmFyaW8ga2VpbmVuIFNlcXVlbnplciBiZXNpdHp0LgorRXhwLk1pc3NpbmdNb2RlbD1EYXMgRXhwZXJpbWVudCAiezB9IiBrYW5uIG5pY2h0IGF1c2dlZlx1MDBmY2hydCB3ZXJkZW4sIHdlaWwgZGFzIEJhc2lzLVN6ZW5hcmlvIGtlaW4gTW9kZWwgYmVzaXR6dC4KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5qb2JzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2pvYnMvYmF0Y2gvbWVzc2FnZXNfa3IucHJvcGVydGllcyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5qb2JzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2pvYnMvYmF0Y2gvbWVzc2FnZXNfa3IucHJvcGVydGllcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iOGMwMzRhCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmpvYnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vam9icy9iYXRjaC9tZXNzYWdlc19rci5wcm9wZXJ0aWVzCkBAIC0wLDAgKzEsMjUgQEAKKyMgbWVzc2FnZXMucHJvcGVydGllcworIworIyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIyAqIENvcHlyaWdodCAoYykgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyMgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisjICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisjICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyMgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorIyAqCisjICogQ29udHJpYnV0b3JzOgorIyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworIyBCYXRjaE1hbmFnZXIKK0JhdGNoTWdyLkRlc2VyaWFsaXphdGlvbl9FcnJvcj1VUklcdWM1ZDBcdWMxMWMgXHVjNWYwXHVjMThkIFx1YzJlNFx1ZDVkOCBcdWM3N2RcdWIyOTQgXHVjOTExIFx1YmIzOFx1YzgxYyBcdWJjMWNcdWMwZGQgXCAiezB9IFwiCitCYXRjaE1nci5TdGFydEJhdGNoPVx1YmMzMFx1Y2U1OCBcdWM3OTFcdWM1YzUgXHVjMmRjXHVjNzkxCitCYXRjaE1nci5DcnRTaW09XHViYzMwXHVjZTU4IFx1YjljY1x1YjRlNFx1YWUzMAorQmF0Y2hNZ3IuUnVuPVx1YmMzMFx1Y2U1OCBcdWMyZTRcdWQ1ODkgXHVjOTExCisKKworIyBFeHBlcmltZW50CitFeHAuSUVycj0iezB9IiBcdWMyZTRcdWQ1ZDggXHVjMmU0XHVkNTg5IFx1YzkxMSBcdWIwYjRcdWJkODAgXHVjNjI0XHViOTU4XHVhYzAwIFx1YmMxY1x1YzBkZFx1ZDU4OFx1Yzc0Yy4KK0V4cC5NaXNzaW5nU2NlbmFyaW89XHVhZTMwXHViY2Y4IFx1YzJkY1x1YjA5OFx1YjlhY1x1YzYyNFx1YWMwMCBcdWM1YzZcdWFlMzAgXHViNTRjXHViYjM4XHVjNWQwIFx1YzJlNFx1ZDVkOCAiezB9Ilx1Yzc0MCBcdWMyZTRcdWQ1ODlcdWQ1NjAgXHVjMjE4IFx1YzVjNlx1Yzc0YworRXhwLk1pc3NpbmdTZXE9XHVhZTMwXHViY2Y4IFx1YzJkY1x1YjA5OFx1YjlhY1x1YzYyNCBcdWMyZGNcdWQwMDBcdWMxMWNcdWFjMDAgXHVjNWM2XHVhZTMwIFx1YjU0Y1x1YmIzOFx1YzVkMCBcdWMyZTRcdWQ1ZDgiezB9Ilx1Yzc0MCBcdWMyZTRcdWQ1ODlcdWQ1NjAgXHVjMjE4IFx1YzVjNlx1Yzc0YworRXhwLk1pc3NpbmdNb2RlbD1cdWFlMzBcdWJjZjggXHVjMmRjXHViMDk4XHViOWFjXHVjNjI0IFx1YmFhOFx1YjM3OFx1Yzc3NCBcdWM1YzZcdWFlMzAgXHViNTRjXHViYjM4XHVjNWQwIFx1YzJlNFx1ZDVkOCAiezB9Ilx1Yzc0MCBcdWMyZTRcdWQ1ODlcdWQ1NjAgXHVjMjE4IFx1YzVjNlx1Yzc0YwpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmpvYnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vam9icy9iYXRjaC9tZXNzYWdlc196aC5wcm9wZXJ0aWVzIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmpvYnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vam9icy9iYXRjaC9tZXNzYWdlc196aC5wcm9wZXJ0aWVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUxMzlmZDMKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uam9icy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9qb2JzL2JhdGNoL21lc3NhZ2VzX3poLnByb3BlcnRpZXMKQEAgLTAsMCArMSwyNSBAQAorIyBtZXNzYWdlcy5wcm9wZXJ0aWVzCisjCisjIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjICogQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorIyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyMgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyMgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorIyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisjICoKKyMgKiBDb250cmlidXRvcnM6CisjICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorIyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjIEJhdGNoTWFuYWdlcgorQmF0Y2hNZ3IuRGVzZXJpYWxpemF0aW9uX0Vycm9yPVx1NTcyOFx1NGUwMFx1NGUyYVx1NWU4Zlx1NTIxN1x1NTMxNlx1NzY4NFx1NWI5ZVx1OWE4Y1x1NGUyZFx1NGVjZVVSSSBcXHUyMDFjezB9IFxcdTIwMWRcdThiZmJcdTUzZDZcdTk1ZWVcdTk4OTgKK0JhdGNoTWdyLlN0YXJ0QmF0Y2g9XHU1ZjAwXHU1OWNiXHU2Mjc5XHU1OTA0XHU3NDA2CitCYXRjaE1nci5DcnRTaW09XHU1MjFiXHU1ZWZhXHU0ZTAwXHU2Mjc5CitCYXRjaE1nci5SdW49XHU4ZmQwXHU4ODRjXHU2Mjc5XHU1OTA0XHU3NDA2CisKKworIyBFeHBlcmltZW50CitFeHAuSUVycj1cdTVmNTNcdThmZDBcdTg4NGNcdTViOWVcdTlhOGMiezB9Ilx1NTNkMVx1NzUxZlx1NzY4NFx1NTE4NVx1OTBlOFx1OTUxOVx1OGJlZgorRXhwLk1pc3NpbmdTY2VuYXJpbz1cdThiZTVcdTViOWVcdTlhOGNcdTIwMWN7MH1cdTIwMWRcdTY1ZTBcdTZjZDVcdThmZDBcdTg4NGNcdWZmMGNcdTU2ZTBcdTRlM2FcdTViODNcdTZjYTFcdTY3MDlcdTRlMDBcdTRlMmFcdTU3ZmFcdTY3MmNcdTY1YjlcdTY4NDhcdTMwMDIKK0V4cC5NaXNzaW5nU2VxPVx1NWI5ZVx1OWE4Y1x1MjAxY3swfVx1MjAxZFx1NjVlMFx1NmNkNVx1OGZkMFx1ODg0Y1x1ZmYwY1x1NTZlMFx1NGUzYVx1NWI4M1x1NzY4NFx1NTdmYVx1Nzg0MFx1NjViOVx1Njg0OFx1NmNhMVx1NjcwOVx1NGUwMFx1NGUyYVx1NWU4Zlx1NTIxN1x1NTNkMVx1NzUxZlx1NTY2OFx1MzAwMgorRXhwLk1pc3NpbmdNb2RlbD1cdThiZTVcdTViOWVcdTlhOGNcdTIwMWN7MH1cdTIwMWRcdTY1ZTBcdTZjZDVcdThmZDBcdTg4NGNcdWZmMGNcdTU2ZTBcdTRlM2FcdTViODNcdTc2ODRcdTU3ZmFcdTc4NDBcdTY1YjlcdTY4NDhcdTZjYTFcdTY3MDlcdTRlMDBcdTRlMmFcdTZhMjFcdTU3OGJcdTMwMDIKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5qb2JzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2pvYnMvZXhlY3V0aW9uL0V4ZWN1dGFibGUuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5qb2JzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2pvYnMvZXhlY3V0aW9uL0V4ZWN1dGFibGUuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMmJjZTg4Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmpvYnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vam9icy9leGVjdXRpb24vRXhlY3V0YWJsZS5qYXZhCkBAIC0wLDAgKzEsMTA4IEBACisvLyBFeGVjdXRhYmxlLmphdmEKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5qb2JzLmV4ZWN1dGlvbjsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqYXZhLnV0aWwuQ2FsZW5kYXI7CitpbXBvcnQgamF2YS51dGlsLkRhdGU7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuam9icy5Kb2I7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlVSSTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLmltcGwuRHVibGluQ29yZUltcGw7CisKKy8qKgorICogVGhpcyBjbGFzcyBpcyBhbiAiYWRhcHRlciIgY2xhc3MgZm9yIHRoZSBpbnRlcmZhY2Uge0BsaW5rIElFeGVjdXRhYmxlfS4gSXQKKyAqIGltcGxlbWVudHMgY29tbW9uIGZlYXR1cmVzIG9mIHRoYXQgaW50ZXJmYWNlIGZvciBleHRlbmRpbmcgc3ViY2xhc3Nlcy4KKyAqLworYWJzdHJhY3QgcHVibGljIGNsYXNzIEV4ZWN1dGFibGUgZXh0ZW5kcyBKb2IgaW1wbGVtZW50cyBJRXhlY3V0YWJsZSB7CisKKwkvKioKKwkgKiBUaGUge0BsaW5rIEV4ZWN1dGFibGV9J3Mgc2VxdWVuY2UgbnVtYmVyLiBUaGlzIHZhbHVlIGlzIHR5cGljYWxseQorCSAqIGFzc2lnbmVkIGJ5IHRoZSB7QGxpbmsgRXhlY3V0YWJsZU1hbmFnZXJ9IHdoZW4gaXQgZmlyc3QgY3JlYXRlcyBhCisJICoge0BsaW5rIEV4ZWN1dGFibGV9LgorCSAqLworCXByaXZhdGUgaW50IHNlcXVlbmNlTnVtYmVyID0gMDsKKworCS8qKgorCSAqIFRoZSB0aW1lICh3YWxsIGNsb2NrKSB3aGVuIHRoaXMge0BsaW5rIEV4ZWN1dGFibGV9IHdhcyBjcmVhdGVkLgorCSAqLworCXByaXZhdGUgZmluYWwgRGF0ZSBjcmVhdGlvblRpbWU7CisKKwkvKioKKwkgKiBAcGFyYW0gbmFtZQorCSAqICAgICAgICAgICAgdGhlIG5hbWUgb2YgdGhlIHtAbGluayBFeGVjdXRhYmxlfQorCSAqIEBwYXJhbSBzZXF1ZW5jZU51bWJlcgorCSAqICAgICAgICAgICAgdGhlIHVuaXF1ZSBzZXF1ZW5jZSBudW1iZXIgb2YgdGhlIHtAbGluayBFeGVjdXRhYmxlfQorCSAqLworCXB1YmxpYyBFeGVjdXRhYmxlKGZpbmFsIFN0cmluZyBuYW1lLCBmaW5hbCBpbnQgc2VxdWVuY2VOdW1iZXIpIHsKKwkJc3VwZXIobmFtZSk7CisJCXRoaXMuc2VxdWVuY2VOdW1iZXIgPSBzZXF1ZW5jZU51bWJlcjsKKwkJdGhpcy5jcmVhdGlvblRpbWUgPSBDYWxlbmRhci5nZXRJbnN0YW5jZSgpLmdldFRpbWUoKTsKKwl9IC8vIEV4ZWN1dGFibGUKKworCS8qKgorCSAqIEByZXR1cm4gdGhlIHVuaXF1ZSBzZXF1ZW5jZSBudW1iZXIgb2YgdGhlIHtAbGluayBFeGVjdXRhYmxlfQorCSAqLworCXB1YmxpYyBpbnQgZ2V0U2VxdWVuY2VOdW1iZXIoKSB7CisJCXJldHVybiBzZXF1ZW5jZU51bWJlcjsKKwl9IC8vIGdldFNlcXVlbmNlTnVtYmVyCisKKwkvKioKKwkgKiBAcGFyYW0gc2VxdWVuY2VOdW1iZXIKKwkgKiAgICAgICAgICAgIHRoZSB1bmlxdWUgc2VxdWVuY2UgbnVtYmVyIG9mIHRoZSB7QGxpbmsgRXhlY3V0YWJsZX0KKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRTZXF1ZW5jZU51bWJlcihmaW5hbCBpbnQgc2VxdWVuY2VOdW1iZXIpIHsKKwkJdGhpcy5zZXF1ZW5jZU51bWJlciA9IHNlcXVlbmNlTnVtYmVyOworCX0gLy8gc2V0U2VxdWVuY2VOdW1iZXIKKworCS8qKgorCSAqIEByZXR1cm4gdGhlIG5hbWUgb2YgdGhlIEV4ZWN1dGFibGUgd2l0aCBpdHMgc2VxdWVuY2UgbnVtYmVyIGFzIGEgcHJlZml4CisJICogICAgICAgICAoZS5nLiwgIlsyXSBGb29CYXIiKS4KKwkgKiBAc2VlICNnZXRTZXF1ZW5jZU51bWJlcigpCisJICogQHNlZSAjZ2V0TmFtZSgpCisJICovCisJcHVibGljIFN0cmluZyBnZXROYW1lV2l0aFNlcXVlbmNlTnVtYmVyKCkgeworCQlmaW5hbCBTdHJpbmdCdWlsZGVyIHJldFZhbHVlID0gbmV3IFN0cmluZ0J1aWxkZXIoIlsiKTsKKwkJcmV0VmFsdWUuYXBwZW5kKGdldFNlcXVlbmNlTnVtYmVyKCkpOworCQlyZXRWYWx1ZS5hcHBlbmQoIl0gIik7CisJCXJldFZhbHVlLmFwcGVuZChnZXROYW1lKCkpOworCQlyZXR1cm4gcmV0VmFsdWUudG9TdHJpbmcoKTsKKwl9IC8vIGdldE5hbWVXaXRoU2VxdWVuY2VOdW1iZXIKKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5qb2JzLmV4ZWN1dGlvbi5JRXhlY3V0YWJsZSNnZXRDcmVhdGlvblRpbWUoKQorCSAqLworCXB1YmxpYyBEYXRlIGdldENyZWF0aW9uVGltZSgpIHsKKwkJcmV0dXJuIGNyZWF0aW9uVGltZTsKKwl9IC8vIGdldENyZWF0aW9uVGltZQorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmpvYnMuZXhlY3V0aW9uLklFeGVjdXRhYmxlI2dldFVuaXF1ZUlEU3RyaW5nKCkKKwkgKi8KKwlwdWJsaWMgU3RyaW5nIGdldFVuaXF1ZUlEU3RyaW5nKCkgeworCQlmaW5hbCBTdHJpbmdCdWlsZGVyIHNiID0gbmV3IFN0cmluZ0J1aWxkZXIoVVJJLmVuY29kZVNlZ21lbnQoZ2V0TmFtZSgpLAorCQkJCWZhbHNlKS5yZXBsYWNlKCIlIiwgIi0iKSk7CisJCXNiLmFwcGVuZCgiLSIpOworCQlzYi5hcHBlbmQoZ2V0U2VxdWVuY2VOdW1iZXIoKSk7CisJCXNiLmFwcGVuZCgiLSIpOworCQlzYi5hcHBlbmQoRHVibGluQ29yZUltcGwuY3JlYXRlSVNPODYwMURhdGVTdHJpbmcoZ2V0Q3JlYXRpb25UaW1lKCkpKTsKKwkJcmV0dXJuIHNiLnRvU3RyaW5nKCk7CisJfSAvLyBnZXRVbmlxdWVJRFN0cmluZworCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmpvYnMuZXhlY3V0aW9uLklFeGVjdXRhYmxlI2lzU3RvcHBhYmxlKCkKKwkgKi8KKwlwdWJsaWMgYm9vbGVhbiBpc1N0b3BwYWJsZSgpIHsKKwkJcmV0dXJuIHRydWU7CisJfQorCit9IC8vIEV4ZWN1dGFibGUKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5qb2JzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2pvYnMvZXhlY3V0aW9uL0V4ZWN1dGFibGVNYW5hZ2VyLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uam9icy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9qb2JzL2V4ZWN1dGlvbi9FeGVjdXRhYmxlTWFuYWdlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU1NWE5OTMKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uam9icy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9qb2JzL2V4ZWN1dGlvbi9FeGVjdXRhYmxlTWFuYWdlci5qYXZhCkBAIC0wLDAgKzEsMjEgQEAKKy8vIEV4ZWN1dGFibGVNYW5hZ2VyLmphdmEKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5qb2JzLmV4ZWN1dGlvbjsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKgorICogVGhpcyBjbGFzcyBpcyBleHRlbmRlZCBieSBjbGFzc2VzIHRoZSBtYW5hZ2UgdGhlIGxpZmUtY3ljbGUgb2YKKyAqIHtAbGluayBJRXhlY3V0YWJsZX1zLgorICovCitwdWJsaWMgYWJzdHJhY3QgY2xhc3MgRXhlY3V0YWJsZU1hbmFnZXIgeworCS8vIE5vdGhpbmcKK30gLy8gRXhlY3V0YWJsZU1hbmFnZXIKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5qb2JzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2pvYnMvZXhlY3V0aW9uL0V4ZWN1dGFibGVTdGF0ZS5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmpvYnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vam9icy9leGVjdXRpb24vRXhlY3V0YWJsZVN0YXRlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDAxOGFhOAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5qb2JzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2pvYnMvZXhlY3V0aW9uL0V4ZWN1dGFibGVTdGF0ZS5qYXZhCkBAIC0wLDAgKzEsMjEgQEAKKy8vIEV4ZWN1dGFibGVTdGF0ZS5qYXZhCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uam9icy5leGVjdXRpb247CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioKKyAqIFRoaXMgZW51bWVyYXRpb24gcmVwcmVzZW50cyB0aGUgZGlmZmVyZW50IHN0YXRlcyBhbiB7QGxpbmsgRXhlY3V0YWJsZX0gY2FuIGJlCisgKiBpbi4KKyAqLworcHVibGljIGVudW0gRXhlY3V0YWJsZVN0YXRlIHsKKwkvLyBOb3RoaW5nCit9IC8vIEV4ZWN1dGFibGVTdGF0ZQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmpvYnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vam9icy9leGVjdXRpb24vSUV4ZWN1dGFibGUuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5qb2JzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2pvYnMvZXhlY3V0aW9uL0lFeGVjdXRhYmxlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWM4ZTBmMQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5qb2JzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2pvYnMvZXhlY3V0aW9uL0lFeGVjdXRhYmxlLmphdmEKQEAgLTAsMCArMSw5MiBAQAorLy8gSUV4ZWN1dGFibGUuamF2YQorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmpvYnMuZXhlY3V0aW9uOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGphdmEudXRpbC5EYXRlOworCisvKioKKyAqIFRoaXMgaW50ZXJmYWNlIGlzIGltcGxlbWVudGVkIGJ5IGNsYXNzZXMgdGhhdCBjYW4gYXJlIGV4ZWN1dGFibGUuCisgKi8KK3B1YmxpYyBpbnRlcmZhY2UgSUV4ZWN1dGFibGUgeworCisJLyoqCisJICogVGhlIHVuaXRzIG9mIHdvcmsgKDEwMCkgdGhhdCByZXByZXNlbnRzIGNvbXBsZXRlIGV4ZWN1dGlvbi4KKwkgKi8KKwlpbnQgVE9UQUxfV09SSyA9IDEwMDsKKworCS8qKgorCSAqIEByZXR1cm4gdGhlIHVuaXF1ZSBzZXF1ZW5jZSBudW1iZXIgb2YgdGhlIHtAbGluayBJRXhlY3V0YWJsZX0uCisJICogQHNlZSAjZ2V0TmFtZVdpdGhTZXF1ZW5jZU51bWJlcigpCisJICovCisJaW50IGdldFNlcXVlbmNlTnVtYmVyKCk7CisKKwkvKioKKwkgKiBAcmV0dXJuIHRoZSBuYW1lIG9mIHRoZSB7QGxpbmsgSUV4ZWN1dGFibGV9LgorCSAqLworCVN0cmluZyBnZXROYW1lKCk7CisKKwkvKioKKwkgKiBAcmV0dXJuIGEge0BsaW5rIFN0cmluZ30gdGhhdCBjb250YWlucyB0aGUgc2VxdWVuY2UgbnVtYmVyIG9mIHRoZQorCSAqICAgICAgICAge0BsaW5rIElFeGVjdXRhYmxlfSBhbmQgaXQncyBuYW1lLgorCSAqIEBzZWUgI2dldE5hbWUoKQorCSAqLworCVN0cmluZyBnZXROYW1lV2l0aFNlcXVlbmNlTnVtYmVyKCk7CisKKwkvKioKKwkgKiBAcmV0dXJuIGEge0BsaW5rIFN0cmluZ30gd2l0aG91dCBzcGFjZXMgdGhhdCBpcyB1bmlxdWUgdG8gdGhpcworCSAqICAgICAgICAge0BsaW5rIEV4ZWN1dGFibGV9IGluc3RhbmNlLgorCSAqLworCVN0cmluZyBnZXRVbmlxdWVJRFN0cmluZygpOworCisJLyoqCisJICogQHJldHVybiB0aGUgdGltZSAod2FsbCBjbG9jaykgdGhhdCB0aGUge0BsaW5rIEV4ZWN1dGFibGV9IHdhcyBjcmVhdGVkLgorCSAqLworCURhdGUgZ2V0Q3JlYXRpb25UaW1lKCk7CisKKwkvKioKKwkgKiBTdGFydCBydW5uaW5nIHRoZSB7QGxpbmsgSUV4ZWN1dGFibGV9LgorCSAqLworCXZvaWQgcnVuKCk7CisKKwkvKioKKwkgKiBQYXVzZSB0aGUge0BsaW5rIElFeGVjdXRhYmxlfS4KKwkgKi8KKwl2b2lkIHBhdXNlKCk7CisKKwkvKioKKwkgKiBSZXNldCB0aGUge0BsaW5rIElFeGVjdXRhYmxlfS4KKwkgKi8KKwl2b2lkIHJlc2V0KCk7CisKKwkvKioKKwkgKiBTdGVwIHRoZSB7QGxpbmsgSUV4ZWN1dGFibGV9IG9uZSBzdGVwL2N5Y2xlIGlmIGl0IGhhc24ndCBhbHJlYWR5IGVuZGVkLgorCSAqLworCXZvaWQgc3RlcCgpOworCisJLyoqCisJICogU3RvcCB0aGUge0BsaW5rIElFeGVjdXRhYmxlfS4KKwkgKi8KKwl2b2lkIHN0b3AoKTsKKworCS8qKgorCSAqIEByZXR1cm4gPGNvZGU+dHJ1ZTwvY29kZT4gaWYgdGhlIHtAbGluayBJRXhlY3V0YWJsZX0gaXMgcnVubmluZy4KKwkgKi8KKwlib29sZWFuIGlzUnVubmluZygpOworCisJLyoqCisJICogQHJldHVybiA8Y29kZT50cnVlPC9jb2RlPiBpZiB0aGUge0BsaW5rIElFeGVjdXRhYmxlfSBjYW4gYmUgc3RvcHBlZC4KKwkgKiAgICAgICAgIFRoaXMgaXMgb25seSA8Y29kZT50cnVlPC9jb2RlPiBmb3Ige0BsaW5rIElFeGVjdXRhYmxlfXMgZm9yCisJICogICAgICAgICB3aGljaCB7QGxpbmsgI2lzUnVubmluZygpfSBjYW4gYmUgPGNvZGU+dHJ1ZTwvY29kZT4uCisJICovCisJYm9vbGVhbiBpc1N0b3BwYWJsZSgpOworfSAvLyBJRXhlY3V0YWJsZQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmpvYnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vam9icy9leGVjdXRpb24vSUV4ZWN1dGFibGVMaXN0ZW5lci5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmpvYnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vam9icy9leGVjdXRpb24vSUV4ZWN1dGFibGVMaXN0ZW5lci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJjZDIyYTIKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uam9icy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9qb2JzL2V4ZWN1dGlvbi9JRXhlY3V0YWJsZUxpc3RlbmVyLmphdmEKQEAgLTAsMCArMSwyMSBAQAorLy8gSUV4ZWN1dGFibGVMaXN0ZW5lci5qYXZhCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uam9icy5leGVjdXRpb247CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioKKyAqIFRoaXMgaW50ZXJmYWNlIGlzIGV4dGVuZGVkIGJ5IGNsYXNzZXMgdGhhdCB3aXNoIHRvIGJlIGluZm9ybWVkIG9mIGNoYW5nZXMgdG8KKyAqIHRoZSBzdGF0ZSBvZiBhbiB7QGxpbmsgRXhlY3V0YWJsZX1zLgorICovCitwdWJsaWMgaW50ZXJmYWNlIElFeGVjdXRhYmxlTGlzdGVuZXIgeworCS8vIEJhdGNoU3RhdGUgYW5kIFNpbXVsYXRpb24gc3RhdGUgc2hvdWxkIGJlIG1lcmdlZCBpbnRvIHRoaXMgZW51bSBhbmQgcmVtb3ZlZC4KK30gLy8gSUV4ZWN1dGFibGVMaXN0ZW5lcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmpvYnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vam9icy9leGVjdXRpb24vSUV4ZWN1dGFibGVMaXN0ZW5lclN5bmMuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5qb2JzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2pvYnMvZXhlY3V0aW9uL0lFeGVjdXRhYmxlTGlzdGVuZXJTeW5jLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTRmODgyZgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5qb2JzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2pvYnMvZXhlY3V0aW9uL0lFeGVjdXRhYmxlTGlzdGVuZXJTeW5jLmphdmEKQEAgLTAsMCArMSwyMiBAQAorLy8gSUV4ZWN1dGFibGVMaXN0ZW5lci5qYXZhCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uam9icy5leGVjdXRpb247CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioKKyAqIFRoaXMgaW50ZXJmYWNlIGlzIGV4dGVuZGVkIGJ5IGNsYXNzZXMgdGhhdCB3aXNoIHRvIGJlIGluZm9ybWVkIG9mIGNoYW5nZXMgdG8KKyAqIHRoZSBzdGF0ZSBvZiBhbiB7QGxpbmsgRXhlY3V0YWJsZX1zLiBXaGVyZSB0aGUge0BsaW5rIEV4ZWN1dGFibGV9IGlzCisgKiBzdXNwZW5kZWQgd2hpbGUgdGhlIGxpc3RlbmVyIHJlY2VpdmVzIHRoZSBtZXNzYWdlLgorICovCitwdWJsaWMgaW50ZXJmYWNlIElFeGVjdXRhYmxlTGlzdGVuZXJTeW5jIHsKKwkvLyBOb3RoaW5nCit9IC8vIElFeGVjdXRhYmxlTGlzdGVuZXJTeW5jCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uam9icy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9qb2JzL2V4ZWN1dGlvbi9JRXhlY3V0YWJsZU1hbmFnZXJMaXN0ZW5lci5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmpvYnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vam9icy9leGVjdXRpb24vSUV4ZWN1dGFibGVNYW5hZ2VyTGlzdGVuZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42OTgxMzk5Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmpvYnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vam9icy9leGVjdXRpb24vSUV4ZWN1dGFibGVNYW5hZ2VyTGlzdGVuZXIuamF2YQpAQCAtMCwwICsxLDIxIEBACisvLyBJRXhlY3V0YWJsZU1hbmFnZXJMaXN0ZW5lci5qYXZhCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uam9icy5leGVjdXRpb247CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioKKyAqIFRoaXMgaW50ZXJmYWNlIGlzIGV4dGVuZGVkIGJ5IGNsYXNzZXMgdGhhdCB3aXNoIHRvIGJlIGluZm9ybWVkIG9mIGNoYW5nZXMgdG8KKyAqIHRoZSBzdGF0ZSBvZiBhbiB7QGxpbmsgRXhlY3V0YWJsZU1hbmFnZXJ9cy4KKyAqLworcHVibGljIGludGVyZmFjZSBJRXhlY3V0YWJsZU1hbmFnZXJMaXN0ZW5lciB7CisJLy8gTm90aGluZworfSAvLyBJRXhlY3V0YWJsZU1hbmFnZXJMaXN0ZW5lcgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5qb2JzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2pvYnMvZXhlY3V0aW9uL0lFeGVjdXRhYmxlTWFuYWdlckxpc3RlbmVyU3luYy5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmpvYnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vam9icy9leGVjdXRpb24vSUV4ZWN1dGFibGVNYW5hZ2VyTGlzdGVuZXJTeW5jLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2RkMGU3ZgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5qb2JzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2pvYnMvZXhlY3V0aW9uL0lFeGVjdXRhYmxlTWFuYWdlckxpc3RlbmVyU3luYy5qYXZhCkBAIC0wLDAgKzEsMjMgQEAKKy8vIElFeGVjdXRhYmxlTWFuYWdlckxpc3RlbmVyU3luYy5qYXZhCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uam9icy5leGVjdXRpb247CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioKKyAqIFRoaXMgaW50ZXJmYWNlIGlzIGV4dGVuZGVkIGJ5IGNsYXNzZXMgdGhhdCB3aXNoIHRvIGJlIGluZm9ybWVkIG9mIGNoYW5nZXMgdG8KKyAqIHRoZSBzdGF0ZSBvZiBhbiB7QGxpbmsgRXhlY3V0YWJsZU1hbmFnZXJ9cy4gV2hlcmUgdGhlCisgKiB7QGxpbmsgRXhlY3V0YWJsZU1hbmFnZXJ9IGlzIHN1c3BlbmRlZCB3aGlsZSB0aGUgbGlzdGVuZXIgcmVjZWl2ZXMgdGhlCisgKiBtZXNzYWdlLgorICovCitwdWJsaWMgaW50ZXJmYWNlIElFeGVjdXRhYmxlTWFuYWdlckxpc3RlbmVyU3luYyB7CisJLy8gTm90aGluZworfSAvLyBJRXhlY3V0YWJsZU1hbmFnZXJMaXN0ZW5lclN5bmMKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uam9icy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9qb2JzL3ByZWZlcmVuY2VzL01lc3NhZ2VzLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uam9icy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9qb2JzL3ByZWZlcmVuY2VzL01lc3NhZ2VzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWRiYjU3NwotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5qb2JzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2pvYnMvcHJlZmVyZW5jZXMvTWVzc2FnZXMuamF2YQpAQCAtMCwwICsxLDQyIEBACisvLyBNZXNzYWdlcy5qYXZhCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uam9icy5wcmVmZXJlbmNlczsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqYXZhLnV0aWwuTWlzc2luZ1Jlc291cmNlRXhjZXB0aW9uOworaW1wb3J0IGphdmEudXRpbC5SZXNvdXJjZUJ1bmRsZTsKKworLyoqCisgKiBUaGlzIGNsYXNzIHJldHJpZXZlcyBtZXNzYWdlcyBmb3IgU1RFTSBzaW11bGF0aW9uIG1hbmFnZW1lbnQgcHJlZmVyZW5jZXMuCisgKi8KK3B1YmxpYyBjbGFzcyBNZXNzYWdlcyB7CisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEJVTkRMRV9OQU1FID0gIm9yZy5lY2xpcHNlLnN0ZW0uam9icy5wcmVmZXJlbmNlcy5tZXNzYWdlcyI7IC8vJE5PTi1OTFMtMSQKKworCXByaXZhdGUgc3RhdGljIGZpbmFsIFJlc291cmNlQnVuZGxlIFJFU09VUkNFX0JVTkRMRSA9IFJlc291cmNlQnVuZGxlCisJCQkuZ2V0QnVuZGxlKEJVTkRMRV9OQU1FKTsKKworCXByaXZhdGUgTWVzc2FnZXMoKSB7CisJCS8vIE5vdGhpbmcKKwl9CisKKwkvKioKKwkgKiBAcGFyYW0ga2V5CisJICogQHJldHVybiB0aGUgc3RyaW5nIG1hdGNoaW5nIHRoZSBrZXkKKwkgKi8KKwlwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRTdHJpbmcoU3RyaW5nIGtleSkgeworCQl0cnkgeworCQkJcmV0dXJuIFJFU09VUkNFX0JVTkRMRS5nZXRTdHJpbmcoa2V5KTsKKwkJfSBjYXRjaCAoTWlzc2luZ1Jlc291cmNlRXhjZXB0aW9uIGUpIHsKKwkJCXJldHVybiAnIScgKyBrZXkgKyAnISc7CisJCX0KKwl9Cit9IC8vIE1lc3NhZ2VzCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uam9icy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9qb2JzL3ByZWZlcmVuY2VzL1ByZWZlcmVuY2VDb25zdGFudHMuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5qb2JzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2pvYnMvcHJlZmVyZW5jZXMvUHJlZmVyZW5jZUNvbnN0YW50cy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI2N2QyNjkKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uam9icy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9qb2JzL3ByZWZlcmVuY2VzL1ByZWZlcmVuY2VDb25zdGFudHMuamF2YQpAQCAtMCwwICsxLDYwIEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uam9icy5wcmVmZXJlbmNlczsKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqCisgKiBDb25zdGFudCBkZWZpbml0aW9ucyBmb3IgcGx1Zy1pbiBwcmVmZXJlbmNlcworICovCitwdWJsaWMgY2xhc3MgUHJlZmVyZW5jZUNvbnN0YW50cyB7CisKKwkvKioKKwkgKiBUaGUgcHJlZmVyZW5jZSBmb3IgcGF1c2luZyBhZnRlciBlYWNoIHNpbXVsYXRpb24gY3ljbGUKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBTSU1VTEFUSU9OX1NMRUVQX0JPT0xFQU4gPSAiY3ljbGVQYXVzZSI7IC8vJE5PTi1OTFMtMSQKKworCS8qKgorCSAqIFRoaXMgaXMgdGhlIHByZWZlcmVuY2UgdGhhdCBzcGVjaWZpZXMgdGhlIG51bWJlciBvZiBzZWNvbmRzIHRvIHBhdXNlIHRoZQorCSAqIHNpbXVsYXRpb24gYXQgdGhlIGVuZCBvZiBlYWNoIGN5Y2xlLgorCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFNJTVVMQVRJT05fU0xFRVBfTUlMTElTRUNPTkRTX0lOVEVHRVIgPSAiY3ljbGVQYXVzZU1pbGxpU2Vjb25kcyI7IC8vJE5PTi1OTFMtMSQKKworCS8qKgorCSAqIFRoaXMgaXMgdGhlIHByZWZlcmVuY2UgdGhhdCBzcGVjaWZpZXMgdGhhdCB3aGVuIHRoZSBjYW5vbmljYWwgZ3JhcGggaXMKKwkgKiBjcmVhdGVkIGF0IHRoZSBiZWdpbm5pbmcgb2YgYSA8Y29kZT5TaW11bGF0aW9uPC9jb2RlPiB0aGF0IGVhY2gKKwkgKiB1bnJlc29sdmVkIDxjb2RlPklkZW50aWZpYWJsZTwvY29kZT4gc2hvdWxkIGJlIHJlcG9ydGVkIGluIHRoZSBlcnJvcgorCSAqIGxvZy4KKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBSRVBPUlRfRUFDSF9VTlJFU09MVkVEX0lERU5USUZJQUJMRV9CT09MRUFOID0gInJlcG9ydEVhY2hVbnJlc29sdmVkSWRlbnRpZmlhYmxlIjsgLy8kTk9OLU5MUy0xJAorCisJLyoqCisJICogVGhpcyBpcyB0aGUgcHJlZmVyZW5jZSB0byByZXBvcnQgZGFuZ2xpbmcgYWlyIHRyYW5zcG9ydCBlZGdlcworCSAqLworCisJcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUkVQT1JUX0RBTkdMSU5HX0FJUl9UUkFOUE9SVF9FREdFU19CT09MRUFOID0gInJlcG9ydERhbmdsaW5nQWlyVHJhbnNwb3J0RWRnZXMiOworCQorCS8qKgorCSAqIFRoaXMgaXMgdGhlIHByZWZlcmVuY2UgdGhhdCBzcGVjaWZpZXMgdGhhdCB3aGVuIHRoZSBjYW5vbmljYWwgZ3JhcGggaXMKKwkgKiBjcmVhdGVkIGF0IHRoZSBiZWdpbm5pbmcgb2YgYSA8Y29kZT5TaW11bGF0aW9uPC9jb2RlPiB0aGF0IGlmIHRoZXJlIGFyZQorCSAqIHVucmVzb2x2ZWQgPGNvZGU+SWRlbnRpZmlhYmxlPC9jb2RlPnMgdGhlbiB0aGUgbnVtYmVyIHNob3VsZCBiZQorCSAqIHJlcG9ydGVkIGluIHRoZSBlcnJvciBsb2cuCisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUkVQT1JUX05VTUJFUl9PRl9VTlJFU09MVkVEX0lERU5USUZJQUJMRVNfQk9PTEVBTiA9ICJyZXBvcnROdW1iZXJPZlVucmVzb2x2ZWRJZGVudGlmaWFibGUiOyAvLyROT04tTkxTLTEkCisJCisJLyoqCisJICogVGhpcyBpcyB0aGUgcHJlZmVyZW5jZSBlbmFibGVzIG9yIGRpc2FibGVzIHRoZSB1c2Ugb2YgY2FjaGluZyBpbiBTVEVNLgorCSAqIENhY2hpbmcgc3lzdGVtIGNhbiBjYWNoZSBpbml0aWFsaXplZCB7QGxpbmsgU2NlbmFyaW99cyB0byBzYXZlIHRoZSB0aW1lCisJICogaXQgdGFrZXMgdG8gaW5pdGlhbGl6ZSB0aGUge0BsaW5rIFNjZW5hcmlvfSB3aGVuIHJ1bm5pbmcgdGhlIHNhbWUgc2NlbmFyaW8KKwkgKiBtb3JlIHRoYW4gb25jZS4gCisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgVVNFX1NDRU5BUklPU19DQUNISU5HX0JPT0xFQU4gPSAidXNlU2NlbmFyaW9zQ2FjaGluZyI7IC8vJE5PTi1OTFMtMSQKK30gLy8gUHJlZmVyZW5jZUNvbnN0YW50cwpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmpvYnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vam9icy9wcmVmZXJlbmNlcy9QcmVmZXJlbmNlSW5pdGlhbGl6ZXIuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5qb2JzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2pvYnMvcHJlZmVyZW5jZXMvUHJlZmVyZW5jZUluaXRpYWxpemVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTM3YTBhZgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5qb2JzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2pvYnMvcHJlZmVyZW5jZXMvUHJlZmVyZW5jZUluaXRpYWxpemVyLmphdmEKQEAgLTAsMCArMSw1NSBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmpvYnMucHJlZmVyZW5jZXM7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLnByZWZlcmVuY2VzLkFic3RyYWN0UHJlZmVyZW5jZUluaXRpYWxpemVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnByZWZlcmVuY2UuSVByZWZlcmVuY2VTdG9yZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmpvYnMuQWN0aXZhdG9yOworCisvKioKKyAqIENsYXNzIHVzZWQgdG8gaW5pdGlhbGl6ZSBkZWZhdWx0IHByZWZlcmVuY2UgdmFsdWVzLgorICovCitwdWJsaWMgY2xhc3MgUHJlZmVyZW5jZUluaXRpYWxpemVyIGV4dGVuZHMgQWJzdHJhY3RQcmVmZXJlbmNlSW5pdGlhbGl6ZXIgeworCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUucHJlZmVyZW5jZXMuQWJzdHJhY3RQcmVmZXJlbmNlSW5pdGlhbGl6ZXIjaW5pdGlhbGl6ZURlZmF1bHRQcmVmZXJlbmNlcygpCisJICovCisJcHVibGljIHZvaWQgaW5pdGlhbGl6ZURlZmF1bHRQcmVmZXJlbmNlcygpIHsKKwkJSVByZWZlcmVuY2VTdG9yZSBzdG9yZSA9IEFjdGl2YXRvci5nZXREZWZhdWx0KCkuZ2V0UHJlZmVyZW5jZVN0b3JlKCk7CisJCXN0b3JlLnNldERlZmF1bHQoUHJlZmVyZW5jZUNvbnN0YW50cy5TSU1VTEFUSU9OX1NMRUVQX0JPT0xFQU4sCisJCQkJU2ltdWxhdGlvbk1hbmFnZW1lbnRQcmVmZXJlbmNlUGFnZS5ERUZBVUxUX1NJTVVMQVRJT05fU0xFRVApOworCQlzdG9yZQorCQkJCS5zZXREZWZhdWx0KAorCQkJCQkJUHJlZmVyZW5jZUNvbnN0YW50cy5TSU1VTEFUSU9OX1NMRUVQX01JTExJU0VDT05EU19JTlRFR0VSLAorCQkJCQkJU2ltdWxhdGlvbk1hbmFnZW1lbnRQcmVmZXJlbmNlUGFnZS5ERUZBVUxUX1NJTVVMQVRJT05fU0xFRVBfTUlMTElTRUNPTkRTKTsKKwkJc3RvcmUKKwkJCQkuc2V0RGVmYXVsdCgKKwkJCQkJCVByZWZlcmVuY2VDb25zdGFudHMuUkVQT1JUX0VBQ0hfVU5SRVNPTFZFRF9JREVOVElGSUFCTEVfQk9PTEVBTiwKKwkJCQkJCVNpbXVsYXRpb25NYW5hZ2VtZW50UHJlZmVyZW5jZVBhZ2UuREVGQVVMVF9TSU1VTEFUSU9OX1JFUE9SVF9FQUNIX1VOUkVTT0xWRURfSURFTlRJRklBQkxFKTsKKworCQlzdG9yZQorCQkuc2V0RGVmYXVsdCgKKwkJCQlQcmVmZXJlbmNlQ29uc3RhbnRzLlJFUE9SVF9EQU5HTElOR19BSVJfVFJBTlBPUlRfRURHRVNfQk9PTEVBTiwKKwkJCQlTaW11bGF0aW9uTWFuYWdlbWVudFByZWZlcmVuY2VQYWdlLkRFRkFVTFRfU0lNVUxBVElPTl9SRVBPUlRfREFOR0xJTkdfQUlSX1RSQU5QT1JUX0VER0VTKTsKKworCQlzdG9yZQorCQkJCS5zZXREZWZhdWx0KAorCQkJCQkJUHJlZmVyZW5jZUNvbnN0YW50cy5SRVBPUlRfTlVNQkVSX09GX1VOUkVTT0xWRURfSURFTlRJRklBQkxFU19CT09MRUFOLAorCQkJCQkJU2ltdWxhdGlvbk1hbmFnZW1lbnRQcmVmZXJlbmNlUGFnZS5ERUZBVUxUX1NJTVVMQVRJT05fUkVQT1JUX05VTUJFUl9VTlJFU09MVkVEX0lERU5USUZJQUJMRSk7CisJCXN0b3JlCisJCQkJLnNldERlZmF1bHQoCisJCQkJCQlQcmVmZXJlbmNlQ29uc3RhbnRzLlVTRV9TQ0VOQVJJT1NfQ0FDSElOR19CT09MRUFOLAorCQkJCQkJU2ltdWxhdGlvbk1hbmFnZW1lbnRQcmVmZXJlbmNlUGFnZS5ERUZBVUxUX1VTRV9TQ0VOQVJJT1NfQ0FDSElORyk7CisKKwl9IC8vIGluaXRpYWxpemVEZWZhdWx0UHJlZmVyZW5jZXMKKworfSAvLyBQcmVmZXJlbmNlSW5pdGlhbGl6ZXIKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5qb2JzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2pvYnMvcHJlZmVyZW5jZXMvU2ltdWxhdGlvbk1hbmFnZW1lbnRQcmVmZXJlbmNlUGFnZS5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmpvYnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vam9icy9wcmVmZXJlbmNlcy9TaW11bGF0aW9uTWFuYWdlbWVudFByZWZlcmVuY2VQYWdlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGJlNmMxMwotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5qb2JzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2pvYnMvcHJlZmVyZW5jZXMvU2ltdWxhdGlvbk1hbmFnZW1lbnRQcmVmZXJlbmNlUGFnZS5qYXZhCkBAIC0wLDAgKzEsMTU0IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uam9icy5wcmVmZXJlbmNlczsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5wcmVmZXJlbmNlLkJvb2xlYW5GaWVsZEVkaXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5wcmVmZXJlbmNlLkZpZWxkRWRpdG9yUHJlZmVyZW5jZVBhZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UucHJlZmVyZW5jZS5JbnRlZ2VyRmllbGRFZGl0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5qb2JzLkFjdGl2YXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5JV29ya2JlbmNoOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2hQcmVmZXJlbmNlUGFnZTsKKworLyoqCisgKiBUaGlzIGNsYXNzIHJlcHJlc2VudHMgYSBwcmVmZXJlbmNlIHBhZ2UgdGhhdCBpcyBjb250cmlidXRlZCB0byB0aGUKKyAqIFByZWZlcmVuY2VzIGRpYWxvZy4gQnkgc3ViLWNsYXNzaW5nIDxzYW1wPkZpZWxkRWRpdG9yUHJlZmVyZW5jZVBhZ2U8L3NhbXA+LAorICogd2UgY2FuIHVzZSB0aGUgZmllbGQgc3VwcG9ydCBidWlsdCBpbnRvIEpGYWNlIHRoYXQgYWxsb3dzIHVzIHRvIGNyZWF0ZSBhIHBhZ2UKKyAqIHRoYXQgaXMgc21hbGwgYW5kIGtub3dzIGhvdyB0byBzYXZlLCByZXN0b3JlIGFuZCBhcHBseSBpdHNlbGYuCisgKiA8cD4KKyAqIFRoaXMgcGFnZSBpcyB1c2VkIHRvIG1vZGlmeSBwcmVmZXJlbmNlcyBvbmx5LiBUaGV5IGFyZSBzdG9yZWQgaW4gdGhlCisgKiBwcmVmZXJlbmNlIHN0b3JlIHRoYXQgYmVsb25ncyB0byB0aGUgbWFpbiBwbHVnLWluIGNsYXNzLiBUaGF0IHdheSwKKyAqIHByZWZlcmVuY2VzIGNhbiBiZSBhY2Nlc3NlZCBkaXJlY3RseSB2aWEgdGhlIHByZWZlcmVuY2Ugc3RvcmUuCisgKi8KKworcHVibGljIGNsYXNzIFNpbXVsYXRpb25NYW5hZ2VtZW50UHJlZmVyZW5jZVBhZ2UgZXh0ZW5kcworCQlGaWVsZEVkaXRvclByZWZlcmVuY2VQYWdlIGltcGxlbWVudHMgSVdvcmtiZW5jaFByZWZlcmVuY2VQYWdlIHsKKworCS8qKgorCSAqIFRoZSBtaW5pbXVtIG51bWJlciBvZiBtaWxsaXNlY29uZHMgdGhhdCBjYW4gYmUgc3BlY2lmaWVkIHRvIHBhdXNlIGVhY2gKKwkgKiBzaW11bGF0aW9uIGN5Y2xlCisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgTUlOX1NJTVVMQVRJT05fU0xFRVBfTUlMTElTRUNPTkRTID0gMDsKKworCS8qKgorCSAqIFRoZSBtYXhpbXVtIG51bWJlciBvZiBtaWxsaXNlY29uZHMgdGhhdCBjYW4gYmUgc3BlY2lmaWVkIHRvIHBhdXNlIGVhY2gKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIGludCBNQVhfU0lNVUxBVElPTl9TTEVFUF9NSUxMSVNFQ09ORFMgPSAzNjAwMDAwOworCisJLyoqCisJICogVGhlIG1heGltdW0gbnVtYmVyIG9mIGRpZ2l0cyBhbGxvd2VkIGluIGN5Y2xlIHBhdXNlIG1pbGxpc2Vjb25kcworCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IE1BWF9TSU1VTEFUSU9OX1NMRUVQX1NFQ09ORFNfTlVNX0RJR0lUUyA9IEludGVnZXIKKwkJCS50b1N0cmluZyhNQVhfU0lNVUxBVElPTl9TTEVFUF9NSUxMSVNFQ09ORFMpLmxlbmd0aCgpOworCisJLyoqCisJICogVGhlIGRlZmF1bHQgdmFsdWUgZm9yIHRoZSBzaW11bGF0aW9uIHNsZWVwIHByZWZlcmVuY2UuCisJICogCisJICogQHNlZSAjREVGQVVMVF9TSU1VTEFUSU9OX1NMRUVQCisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBib29sZWFuIERFRkFVTFRfU0lNVUxBVElPTl9TTEVFUCA9IHRydWU7CisKKwkvKioKKwkgKiBUaGlzIGlzIHRoZSBkZWZhdWx0IHZhbHVlIGZvciB0aGUgbnVtYmVyIG9mIHNlY29uZHMgdG8gcGF1c2UgdGhlCisJICogc2ltdWxhdGlvbiBvbiBlYWNoIGN5Y2xlLgorCSAqIAorCSAqIEBzZWUgI0RFRkFVTFRfU0lNVUxBVElPTl9TTEVFUAorCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IERFRkFVTFRfU0lNVUxBVElPTl9TTEVFUF9NSUxMSVNFQ09ORFMgPSAxMDAwOworCisJLyoqCisJICogVGhpcyBpcyB0aGUgZGVmYXVsdCB2YWx1ZSBmb3IgcmVwb3J0aW5nIGFsbCB1bnJlc29sdmVkCisJICogPGNvZGU+SWRlbnRpZmlhYmxlczwvY29kZT4uIFZhbHVlOiA8Y29kZT5mYWxzZTwvY29kZT4KKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIGJvb2xlYW4gREVGQVVMVF9TSU1VTEFUSU9OX1JFUE9SVF9FQUNIX1VOUkVTT0xWRURfSURFTlRJRklBQkxFID0gZmFsc2U7CisKKwkvKioKKwkgKiBUaGlzIGlzIHRoZSBkZWZhdWx0IHZhbHVlIGZvciByZXBvcnRpbmcgYWxsIHVucmVzb2x2ZWQKKwkgKiBBaXIgdHJhbnNwb3J0IGVkZ2VzIFZhbHVlOiA8Y29kZT5mYWxzZTwvY29kZT4KKwkgKi8KKworCXB1YmxpYyBzdGF0aWMgZmluYWwgYm9vbGVhbiBERUZBVUxUX1NJTVVMQVRJT05fUkVQT1JUX0RBTkdMSU5HX0FJUl9UUkFOUE9SVF9FREdFUyA9IGZhbHNlOworCQorCS8qKgorCSAqIFRoaXMgaXMgdGhlIGRlZmF1bHQgdmFsdWUgZm9yIHJlcG9ydGluZyB0aGUgbnVtYmVyIG9mIHVucmVzb2x2ZWQKKwkgKiA8Y29kZT5JZGVudGlmaWFibGVzPC9jb2RlPi4gVmFsdWU6IDxjb2RlPnRydWU8L2NvZGU+CisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBib29sZWFuIERFRkFVTFRfU0lNVUxBVElPTl9SRVBPUlRfTlVNQkVSX1VOUkVTT0xWRURfSURFTlRJRklBQkxFID0gZmFsc2U7CisJCisJLyoqCisJICogVGhpcyBpcyB0aGUgZGVmYXVsdCB2YWx1ZSBmb3IgY2FjaGluZy4gVmFsdWU6IDxjb2RlPnRydWU8L2NvZGU+CisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBib29sZWFuIERFRkFVTFRfVVNFX1NDRU5BUklPU19DQUNISU5HID0gdHJ1ZTsKKworCS8qKgorCSAqIENvbnN0cnVjdG9yCisJICovCisJcHVibGljIFNpbXVsYXRpb25NYW5hZ2VtZW50UHJlZmVyZW5jZVBhZ2UoKSB7CisJCXN1cGVyKEdSSUQpOworCQlzZXRQcmVmZXJlbmNlU3RvcmUoQWN0aXZhdG9yLmdldERlZmF1bHQoKS5nZXRQcmVmZXJlbmNlU3RvcmUoKSk7CisJCXNldERlc2NyaXB0aW9uKE1lc3NhZ2VzLmdldFN0cmluZygiU01QUGFnZVRJVExFIikpOyAvLyROT04tTkxTLTEkCisJfQorCisJLyoqCisJICogQ3JlYXRlcyB0aGUgZmllbGQgZWRpdG9ycy4gRmllbGQgZWRpdG9ycyBhcmUgYWJzdHJhY3Rpb25zIG9mIHRoZSBjb21tb24KKwkgKiBHVUkgYmxvY2tzIG5lZWRlZCB0byBtYW5pcHVsYXRlIHZhcmlvdXMgdHlwZXMgb2YgcHJlZmVyZW5jZXMuIEVhY2ggZmllbGQKKwkgKiBlZGl0b3Iga25vd3MgaG93IHRvIHNhdmUgYW5kIHJlc3RvcmUgaXRzZWxmLgorCSAqLworCXB1YmxpYyB2b2lkIGNyZWF0ZUZpZWxkRWRpdG9ycygpIHsKKworCQlmaW5hbCBCb29sZWFuRmllbGRFZGl0b3IgY3ljbGVQYXVzZUZpZWxkRWRpdG9yID0gbmV3IEJvb2xlYW5GaWVsZEVkaXRvcigKKwkJCQlQcmVmZXJlbmNlQ29uc3RhbnRzLlNJTVVMQVRJT05fU0xFRVBfQk9PTEVBTiwKKwkJCQlNZXNzYWdlcy5nZXRTdHJpbmcoIlNNUFBhZ2VQYXVzZSIpLCBnZXRGaWVsZEVkaXRvclBhcmVudCgpKTsgLy8kTk9OLU5MUy0xJAorCisJCWZpbmFsIEludGVnZXJGaWVsZEVkaXRvciBjeWNsZVBhdXNlU2Vjb25kc0ZpZWxkRWRpdG9yID0gbmV3IEludGVnZXJGaWVsZEVkaXRvcigKKwkJCQlQcmVmZXJlbmNlQ29uc3RhbnRzLlNJTVVMQVRJT05fU0xFRVBfTUlMTElTRUNPTkRTX0lOVEVHRVIsCisJCQkJTWVzc2FnZXMuZ2V0U3RyaW5nKCJTTVBQYWdlTVNUb1BhdXNlIiksIGdldEZpZWxkRWRpdG9yUGFyZW50KCkpOyAvLyROT04tTkxTLTEkCisJCWN5Y2xlUGF1c2VTZWNvbmRzRmllbGRFZGl0b3Iuc2V0VmFsaWRSYW5nZSgKKwkJCQlNSU5fU0lNVUxBVElPTl9TTEVFUF9NSUxMSVNFQ09ORFMsIE1BWF9TSU1VTEFUSU9OX1NMRUVQX01JTExJU0VDT05EUyk7CisJCWN5Y2xlUGF1c2VTZWNvbmRzRmllbGRFZGl0b3IKKwkJCQkuc2V0VGV4dExpbWl0KE1BWF9TSU1VTEFUSU9OX1NMRUVQX1NFQ09ORFNfTlVNX0RJR0lUUyk7CisJCWN5Y2xlUGF1c2VTZWNvbmRzRmllbGRFZGl0b3Iuc2V0RXJyb3JNZXNzYWdlKE1lc3NhZ2VzLmdldFN0cmluZygiU01QUGFnZTAiKSAvLyROT04tTkxTLTEkCisJCQkJKyBNSU5fU0lNVUxBVElPTl9TTEVFUF9NSUxMSVNFQ09ORFMgKyBNZXNzYWdlcy5nZXRTdHJpbmcoIlNNUFBhZ2VUTyIpIC8vJE5PTi1OTFMtMSQKKwkJCQkrIE1BWF9TSU1VTEFUSU9OX1NMRUVQX01JTExJU0VDT05EUyArIE1lc3NhZ2VzLmdldFN0cmluZygiU01QUGFnZVNFQ09ORFMiKSk7IC8vJE5PTi1OTFMtMSQKKworCQlmaW5hbCBCb29sZWFuRmllbGRFZGl0b3IgcmVwb3J0RWFjaFVucmVzb2x2ZWRJZGVudGlmaWFibGVGaWVsZEVkaXRvciA9IG5ldyBCb29sZWFuRmllbGRFZGl0b3IoCisJCQkJUHJlZmVyZW5jZUNvbnN0YW50cy5SRVBPUlRfRUFDSF9VTlJFU09MVkVEX0lERU5USUZJQUJMRV9CT09MRUFOLAorCQkJCU1lc3NhZ2VzLmdldFN0cmluZygiU01QUGFnZVJlcG9ydFVucmVzb2x2ZWQiKSwgZ2V0RmllbGRFZGl0b3JQYXJlbnQoKSk7IC8vJE5PTi1OTFMtMSQKKworCQlmaW5hbCBCb29sZWFuRmllbGRFZGl0b3IgcmVwb3J0RGFuZ2xpbmdBaXJUcmFuc3BvcnRFZGdlc0ZpZWxkRWRpdG9yID0gbmV3IEJvb2xlYW5GaWVsZEVkaXRvcigKKwkJCQlQcmVmZXJlbmNlQ29uc3RhbnRzLlJFUE9SVF9EQU5HTElOR19BSVJfVFJBTlBPUlRfRURHRVNfQk9PTEVBTiwKKwkJCQlNZXNzYWdlcy5nZXRTdHJpbmcoIlNNUFBhZ2VSZXBvcnRBaXJUcmFuc3BvcnQiKSwgZ2V0RmllbGRFZGl0b3JQYXJlbnQoKSk7IC8vJE5PTi1OTFMtMSQKKworCQlmaW5hbCBCb29sZWFuRmllbGRFZGl0b3IgcmVwb3J0TnVtYmVyT2ZVbnJlc29sdmVkSWRlbnRpZmlhYmxlc0ZpZWxkRWRpdG9yID0gbmV3IEJvb2xlYW5GaWVsZEVkaXRvcigKKwkJCQlQcmVmZXJlbmNlQ29uc3RhbnRzLlJFUE9SVF9OVU1CRVJfT0ZfVU5SRVNPTFZFRF9JREVOVElGSUFCTEVTX0JPT0xFQU4sCisJCQkJTWVzc2FnZXMuZ2V0U3RyaW5nKCJTTVBQYWdlUmVwb3J0TnVtVW5yZXNvbHZlZCIpLCBnZXRGaWVsZEVkaXRvclBhcmVudCgpKTsgLy8kTk9OLU5MUy0xJAorCQkKKwkJZmluYWwgQm9vbGVhbkZpZWxkRWRpdG9yIHVzZVNjZW5hcmlvc0NhY2hpbmcgPSBuZXcgQm9vbGVhbkZpZWxkRWRpdG9yKAorCQkJCVByZWZlcmVuY2VDb25zdGFudHMuVVNFX1NDRU5BUklPU19DQUNISU5HX0JPT0xFQU4sCisJCQkJTWVzc2FnZXMuZ2V0U3RyaW5nKCJTTVBQYWdlQ2FjaGVTY2VuYXJpb3MiKSwgZ2V0RmllbGRFZGl0b3JQYXJlbnQoKSk7IC8vJE5PTi1OTFMtMSQKKwkJCisJCWFkZEZpZWxkKGN5Y2xlUGF1c2VGaWVsZEVkaXRvcik7CisJCWFkZEZpZWxkKGN5Y2xlUGF1c2VTZWNvbmRzRmllbGRFZGl0b3IpOworCQlhZGRGaWVsZChyZXBvcnRFYWNoVW5yZXNvbHZlZElkZW50aWZpYWJsZUZpZWxkRWRpdG9yKTsKKwkJYWRkRmllbGQocmVwb3J0RGFuZ2xpbmdBaXJUcmFuc3BvcnRFZGdlc0ZpZWxkRWRpdG9yKTsKKwkJYWRkRmllbGQocmVwb3J0TnVtYmVyT2ZVbnJlc29sdmVkSWRlbnRpZmlhYmxlc0ZpZWxkRWRpdG9yKTsKKwkJYWRkRmllbGQodXNlU2NlbmFyaW9zQ2FjaGluZyk7CisJfSAvLyBjcmVhdGVGaWVsZEVkaXRvcnMKKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaFByZWZlcmVuY2VQYWdlI2luaXQob3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaCkKKwkgKi8KKwlwdWJsaWMgdm9pZCBpbml0KEBTdXBwcmVzc1dhcm5pbmdzKCJ1bnVzZWQiKS8vJE5PTi1OTFMtMSQKKwkJCUlXb3JrYmVuY2ggd29ya2JlbmNoKSB7CisJCS8vIE5vdGhpbmcKKwl9CisKK30gLy8gU2ltdWxhdGlvbk1hbmFnZW1lbnRQcmVmZXJlbmNlUGFnZQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmpvYnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vam9icy9wcmVmZXJlbmNlcy9tZXNzYWdlcy5wcm9wZXJ0aWVzIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmpvYnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vam9icy9wcmVmZXJlbmNlcy9tZXNzYWdlcy5wcm9wZXJ0aWVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdhNGFiNDEKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uam9icy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9qb2JzL3ByZWZlcmVuY2VzL21lc3NhZ2VzLnByb3BlcnRpZXMKQEAgLTAsMCArMSwyMiBAQAorIyBQcmVmZXJlbmNlTWVzc2FnZXMucHJvcGVydGllcworIworIyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIyAqIENvcHlyaWdodCAoYykgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyMgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisjICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisjICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyMgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorIyAqCisjICogQ29udHJpYnV0b3JzOgorIyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK1NNUFBhZ2UwPUVycm9yOiBWYWxpZCByYW5nZSBpczogCitTTVBQYWdlQ2FjaGVTY2VuYXJpb3M9JlVzZSBzY2VuYXJpb3MgY2FjaGluZworU01QUGFnZU1TVG9QYXVzZT0mTWlsbGlTZWNvbmRzIHRvIHBhdXNlIGVhY2ggY3ljbGUKK1NNUFBhZ2VQYXVzZT0mUGF1c2Ugc2ltdWxhdGlvbiBhZnRlciBlYWNoIGN5Y2xlCitTTVBQYWdlUmVwb3J0TnVtVW5yZXNvbHZlZD0mUmVwb3J0IHRoZSBudW1iZXIgb2YgdW5yZXNvbHZlZCBsaW5rcworU01QUGFnZVJlcG9ydFVucmVzb2x2ZWQ9JlJlcG9ydCBhbGwgdW5yZXNvbHZlZCBsaW5rcworU01QUGFnZVJlcG9ydEFpclRyYW5zcG9ydD0mUmVwb3J0IHVucmVzb2x2ZWQgYWlyIHRyYW5zcG9ydCBsaW5rcworU01QUGFnZVNFQ09ORFM9XCBzZWNvbmRzCitTTVBQYWdlVElUTEU9U2ltdWxhdGlvbiBNYW5hZ2VtZW50IFByZWZlcmVuY2VzCitTTVBQYWdlVE89XCB0byAKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5qb2JzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2pvYnMvcHJlZmVyZW5jZXMvbWVzc2FnZXNfZGUucHJvcGVydGllcyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5qb2JzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2pvYnMvcHJlZmVyZW5jZXMvbWVzc2FnZXNfZGUucHJvcGVydGllcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZDgxOTVjCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmpvYnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vam9icy9wcmVmZXJlbmNlcy9tZXNzYWdlc19kZS5wcm9wZXJ0aWVzCkBAIC0wLDAgKzEsMjIgQEAKKyMgUHJlZmVyZW5jZU1lc3NhZ2VzLnByb3BlcnRpZXMKKyMKKyMgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyMgKiBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisjICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworIyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorIyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisjICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyMgKgorIyAqIENvbnRyaWJ1dG9yczoKKyMgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisjICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitTTVBQYWdlMD1GZWhsZXI6IERlciBnXHUwMGZjbHRpZ2UgQmVyZWljaCBpc3Q6CitTTVBQYWdlQ2FjaGVTY2VuYXJpb3M9JlVzZSBzY2VuYXJpb3MgY2FjaGluZworU01QUGFnZU1TVG9QYXVzZT0mTWlsbGlTZWNvbmRzIHRvIHBhdXNlIGVhY2ggY3ljbGUKK1NNUFBhZ2VQYXVzZT0mUGF1c2Ugc2ltdWxhdGlvbiBhZnRlciBlYWNoIGN5Y2xlCitTTVBQYWdlUmVwb3J0TnVtVW5yZXNvbHZlZD0mUmVwb3J0IHRoZSBudW1iZXIgb2YgdW5yZXNvbHZlZCBsaW5rcworU01QUGFnZVJlcG9ydFVucmVzb2x2ZWQ9JlJlcG9ydCBhbGwgdW5yZXNvbHZlZCBsaW5rcworU01QUGFnZVJlcG9ydEFpclRyYW5zcG9ydD0mUmVwb3J0IHVucmVzb2x2ZWQgYWlyIHRyYW5zcG9ydCBsaW5rcworU01QUGFnZVNFQ09ORFM9XCBTZWt1bmRlbgorU01QUGFnZVRJVExFPVNpbXVsYXRpb24gTWFuYWdlbWVudCBQcmVmZXJlbmNlcworU01QUGFnZVRPPVwgTmFjaApkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmpvYnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vam9icy9wcmVmZXJlbmNlcy9tZXNzYWdlc19rci5wcm9wZXJ0aWVzIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmpvYnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vam9icy9wcmVmZXJlbmNlcy9tZXNzYWdlc19rci5wcm9wZXJ0aWVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ0ZTI2MzkKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uam9icy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9qb2JzL3ByZWZlcmVuY2VzL21lc3NhZ2VzX2tyLnByb3BlcnRpZXMKQEAgLTAsMCArMSwyMiBAQAorIyBQcmVmZXJlbmNlTWVzc2FnZXMucHJvcGVydGllcworIworIyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIyAqIENvcHlyaWdodCAoYykgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyMgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisjICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisjICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyMgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorIyAqCisjICogQ29udHJpYnV0b3JzOgorIyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK1NNUFBhZ2UwPVx1YzYyNFx1Yjk1OCA6IFx1YzcyMFx1ZDZhOCBcdWJjOTRcdWM3MDRcdWFjMDAgOgorU01QUGFnZUNhY2hlU2NlbmFyaW9zPSZVc2Ugc2NlbmFyaW9zIGNhY2hpbmcKK1NNUFBhZ2VNU1RvUGF1c2U9Jk1pbGxpU2Vjb25kcyB0byBwYXVzZSBlYWNoIGN5Y2xlCitTTVBQYWdlUGF1c2U9JlBhdXNlIHNpbXVsYXRpb24gYWZ0ZXIgZWFjaCBjeWNsZQorU01QUGFnZVJlcG9ydE51bVVucmVzb2x2ZWQ9JlJlcG9ydCB0aGUgbnVtYmVyIG9mIHVucmVzb2x2ZWQgbGlua3MKK1NNUFBhZ2VSZXBvcnRVbnJlc29sdmVkPSZSZXBvcnQgYWxsIHVucmVzb2x2ZWQgbGlua3MKK1NNUFBhZ2VSZXBvcnRBaXJUcmFuc3BvcnQ9JlJlcG9ydCB1bnJlc29sdmVkIGFpciB0cmFuc3BvcnQgbGlua3MKK1NNUFBhZ2VTRUNPTkRTPVwgXHVjZDA4CitTTVBQYWdlVElUTEU9XHVjMmRjXHViYmFjXHViODA4XHVjNzc0XHVjMTU4IFx1YWQwMFx1YjlhYyBcdWQ2NThcdWFjYmQgXHVjMTI0XHVjODE1CitTTVBQYWdlVE89XFx1Yjg1YwpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmpvYnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vam9icy9wcmVmZXJlbmNlcy9tZXNzYWdlc196aC5wcm9wZXJ0aWVzIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmpvYnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vam9icy9wcmVmZXJlbmNlcy9tZXNzYWdlc196aC5wcm9wZXJ0aWVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUyMmFjM2IKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uam9icy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9qb2JzL3ByZWZlcmVuY2VzL21lc3NhZ2VzX3poLnByb3BlcnRpZXMKQEAgLTAsMCArMSwyMiBAQAorIyBQcmVmZXJlbmNlTWVzc2FnZXMucHJvcGVydGllcworIworIyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIyAqIENvcHlyaWdodCAoYykgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyMgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisjICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisjICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyMgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorIyAqCisjICogQ29udHJpYnV0b3JzOgorIyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK1NNUFBhZ2UwPVx1OTUxOVx1OGJlZlx1ZmYxYVx1NjcwOVx1NjU0OFx1ODMwM1x1NTZmNFx1NjYyZlx1ZmYxYQorU01QUGFnZUNhY2hlU2NlbmFyaW9zPSZVc2Ugc2NlbmFyaW9zIGNhY2hpbmcKK1NNUFBhZ2VNU1RvUGF1c2U9Jk1pbGxpU2Vjb25kcyB0byBwYXVzZSBlYWNoIGN5Y2xlCitTTVBQYWdlUGF1c2U9JlBhdXNlIHNpbXVsYXRpb24gYWZ0ZXIgZWFjaCBjeWNsZQorU01QUGFnZVJlcG9ydE51bVVucmVzb2x2ZWQ9JlJlcG9ydCB0aGUgbnVtYmVyIG9mIHVucmVzb2x2ZWQgbGlua3MKK1NNUFBhZ2VSZXBvcnRVbnJlc29sdmVkPSZSZXBvcnQgYWxsIHVucmVzb2x2ZWQgbGlua3MKK1NNUFBhZ2VSZXBvcnRBaXJUcmFuc3BvcnQ9JlJlcG9ydCB1bnJlc29sdmVkIGFpciB0cmFuc3BvcnQgbGlua3MKK1NNUFBhZ2VTRUNPTkRTPVxcdTc5ZDIKK1NNUFBhZ2VUSVRMRT1cdTRlZmZcdTc3MWZcdTdiYTFcdTc0MDZcdTUwNGZcdTU5N2QKK1NNUFBhZ2VUTz1cXHU1MjMwCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uam9icy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9qb2JzL3NpbXVsYXRpb24vSVNpbXVsYXRpb24uamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5qb2JzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2pvYnMvc2ltdWxhdGlvbi9JU2ltdWxhdGlvbi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcyMGJhZDgKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uam9icy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9qb2JzL3NpbXVsYXRpb24vSVNpbXVsYXRpb24uamF2YQpAQCAtMCwwICsxLDExNSBAQAorLy8gSVNpbXVsYXRpb24uamF2YQorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmpvYnMuc2ltdWxhdGlvbjsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNiwgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2NlbmFyaW8uU2NlbmFyaW87CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5qb2JzLmV4ZWN1dGlvbi5JRXhlY3V0YWJsZTsKKworLyoqCisgKiBUaGlzIGludGVyZmFjZSBpcyBpbXBsZW1lbnRlZCBieSBjbGFzc2VzIHRoYXQgcmVwcmVzZW50IHtAbGluayBTaW11bGF0aW9ufXMKKyAqIG9mIHtAbGluayBTY2VuYXJpb31zLgorICovCitwdWJsaWMgaW50ZXJmYWNlIElTaW11bGF0aW9uIGV4dGVuZHMgSUV4ZWN1dGFibGUgeworCisJLyoqCisJICogQHBhcmFtIHNlcXVlbmNlTnVtYmVyCisJICogICAgICAgICAgICBUaGUgc2VxdWVuY2UgbnVtYmVyIG9mIHRoZSB7QGxpbmsgU2ltdWxhdGlvbn0KKwkgKi8KKwl2b2lkIHNldFNlcXVlbmNlTnVtYmVyKGludCBzZXF1ZW5jZU51bWJlcik7CisKKwkvKioKKwkgKiBAcmV0dXJuIHRoZSBzdGF0ZSBvZiB0aGUge0BsaW5rIFNpbXVsYXRpb259CisJICovCisJU2ltdWxhdGlvblN0YXRlIGdldFNpbXVsYXRpb25TdGF0ZSgpOworCisJLyoqCisJICogU3RhcnQgcnVubmluZyB0aGUge0BsaW5rIFNpbXVsYXRpb259LgorCSAqLworCXZvaWQgcnVuKCk7CisKKwkvKioKKwkgKiBQYXVzZSB0aGUge0BsaW5rIFNpbXVsYXRpb259CisJICovCisJdm9pZCBwYXVzZSgpOworCisJLyoqCisJICogUmVzZXQgdGhlIHtAbGluayBTaW11bGF0aW9ufS4KKwkgKi8KKwl2b2lkIHJlc2V0KCk7CisKKwkvKioKKwkgKiBTdGVwIHRoZSB7QGxpbmsgU2ltdWxhdGlvbn0gb25lIHN0ZXAvY3ljbGUgaWYgaXQgaGFzbid0IGFscmVhZHkgZW5kZWQKKwkgKi8KKwl2b2lkIHN0ZXAoKTsKKworCS8qKgorCSAqIFN0b3AgdGhlIHtAbGluayBTaW11bGF0aW9ufQorCSAqLworCXZvaWQgc3RvcCgpOworCisJLyoqCisJICogV2FpdCBmb3IgZXhlY3V0aW9uIHRvIGNvbXBsZXRlLgorCSAqIAorCSAqIEB0aHJvd3MgSW50ZXJydXB0ZWRFeGNlcHRpb24KKwkgKiAgICAgICAgICAgICBpZiB0aGUgam9iIGlzIGludGVycnVwdGVkCisJICovCisJdm9pZCBqb2luKCkgdGhyb3dzIEludGVycnVwdGVkRXhjZXB0aW9uOworCisJLyoqCisJICogQHJldHVybiA8Y29kZT50cnVlPC9jb2RlPiBpZiBleGVjdXRpb24gaGFzIGJlZW4gY2FuY2VsZWQuCisJICovCisJYm9vbGVhbiBjYW5jZWwoKTsKKworCS8qKgorCSAqIEByZXR1cm4gdGhlIHtAbGluayBTY2VuYXJpb30gYmVpbmcgc2ltdWxhdGVkCisJICovCisJU2NlbmFyaW8gZ2V0U2NlbmFyaW8oKTsKKworCS8qKgorCSAqIEFkZCBhIHtAbGluayBJU2ltdWxhdGlvbkxpc3RlbmVyfSB0byB0aG9zZSB0aGF0IHdpbGwgYmUgbm90aWZpZWQgb2YKKwkgKiBjaGFuZ2VzLgorCSAqIAorCSAqIEBwYXJhbSBzaW11bGF0aW9uTGlzdGVuZXIKKwkgKi8KKwl2b2lkIGFkZFNpbXVsYXRpb25MaXN0ZW5lcihJU2ltdWxhdGlvbkxpc3RlbmVyIHNpbXVsYXRpb25MaXN0ZW5lcik7CisKKwl2b2lkIGFkZFNpbXVsYXRpb25MaXN0ZW5lcihJU2ltdWxhdGlvbkxpc3RlbmVyIHNpbXVsYXRpb25MaXN0ZW5lciwgYm9vbGVhbiBoZWFkbGVzc1NhZmUpOworCQorCQorCS8qKgorCSAqIFJlbW92ZSB7QGxpbmsgSVNpbXVsYXRpb25MaXN0ZW5lcn0gdG8gdGhvc2UgdGhhdCB3aWxsIGJlIG5vdGlmaWVkIG9mCisJICogY2hhbmdlcy4KKwkgKiAKKwkgKiBAcGFyYW0gc2ltdWxhdGlvbkxpc3RlbmVyCisJICovCisJdm9pZCByZW1vdmVTaW11bGF0aW9uTGlzdGVuZXIoSVNpbXVsYXRpb25MaXN0ZW5lciBzaW11bGF0aW9uTGlzdGVuZXIpOworCisJLyoqCisJICogQWRkIGEge0BsaW5rIElTaW11bGF0aW9uTGlzdGVuZXJ9IHRvIHRob3NlIHRoYXQgd2lsbCBiZSBub3RpZmllZCBvZgorCSAqIGNoYW5nZXMuCisJICogCisJICogQHBhcmFtIHNpbXVsYXRpb25MaXN0ZW5lcgorCSAqLworCXZvaWQgYWRkU2ltdWxhdGlvbkxpc3RlbmVyU3luYyhJU2ltdWxhdGlvbkxpc3RlbmVyU3luYyBzaW11bGF0aW9uTGlzdGVuZXIpOworCQorCXZvaWQgYWRkU2ltdWxhdGlvbkxpc3RlbmVyU3luYyhJU2ltdWxhdGlvbkxpc3RlbmVyU3luYyBzaW11bGF0aW9uTGlzdGVuZXIsIGJvb2xlYW4gaGVhZGxlc3NTYWZlKTsKKworCS8qKgorCSAqIFJlbW92ZSB7QGxpbmsgSVNpbXVsYXRpb25MaXN0ZW5lcn0gdG8gdGhvc2UgdGhhdCB3aWxsIGJlIG5vdGlmaWVkIG9mCisJICogY2hhbmdlcy4KKwkgKiAKKwkgKiBAcGFyYW0gc2ltdWxhdGlvbkxpc3RlbmVyCisJICovCisJdm9pZCByZW1vdmVTaW11bGF0aW9uTGlzdGVuZXJTeW5jKElTaW11bGF0aW9uTGlzdGVuZXJTeW5jIHNpbXVsYXRpb25MaXN0ZW5lcik7CisKK30gLy8gSVNpbXVsYXRpb24KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5qb2JzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2pvYnMvc2ltdWxhdGlvbi9JU2ltdWxhdGlvbkxpc3RlbmVyLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uam9icy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9qb2JzL3NpbXVsYXRpb24vSVNpbXVsYXRpb25MaXN0ZW5lci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFlZjcwMzIKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uam9icy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9qb2JzL3NpbXVsYXRpb24vSVNpbXVsYXRpb25MaXN0ZW5lci5qYXZhCkBAIC0wLDAgKzEsMzAgQEAKKy8vIElTaW11bGF0aW9uTGlzdGVuZXIuamF2YQorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmpvYnMuc2ltdWxhdGlvbjsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNiwgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmpvYnMuZXhlY3V0aW9uLklFeGVjdXRhYmxlTGlzdGVuZXI7CisKKy8qKgorICogVGhpcyBpbnRlcmZhY2UgaXMgaW1wbGVtZW50ZWQgYnkgY2xhc3NlcyB0aGF0IHdhbnQgdG8gbGlzdGVuIHRvIGV2ZW50cworICogZ2VuZXJhdGVkIGJ5IGEge0BsaW5rIFNpbXVsYXRpb259LgorICogCisgKiBAc2VlIElTaW11bGF0aW9uCisgKi8KK3B1YmxpYyBpbnRlcmZhY2UgSVNpbXVsYXRpb25MaXN0ZW5lciBleHRlbmRzIElFeGVjdXRhYmxlTGlzdGVuZXIgeworCS8qKgorCSAqIEBwYXJhbSBldmVudAorCSAqICAgICAgICAgICAgdGhlIGV2ZW50IHRoYXQgcmVjb3JkcyB3aGF0IGhhcHBlbmVkIHRvIHRoZSB7QGxpbmsgU2ltdWxhdGlvbn0KKwkgKiAgICAgICAgICAgIC4KKwkgKi8KKwl2b2lkIHNpbXVsYXRpb25DaGFuZ2VkKFNpbXVsYXRpb25FdmVudCBldmVudCk7Cit9IC8vIElTaW11bGF0aW9uTGlzdGVuZXIKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5qb2JzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2pvYnMvc2ltdWxhdGlvbi9JU2ltdWxhdGlvbkxpc3RlbmVyU3luYy5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmpvYnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vam9icy9zaW11bGF0aW9uL0lTaW11bGF0aW9uTGlzdGVuZXJTeW5jLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDQxMjQyZQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5qb2JzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2pvYnMvc2ltdWxhdGlvbi9JU2ltdWxhdGlvbkxpc3RlbmVyU3luYy5qYXZhCkBAIC0wLDAgKzEsMzEgQEAKKy8vIElTaW11bGF0aW9uTGlzdGVuZXIuamF2YQorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmpvYnMuc2ltdWxhdGlvbjsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNiwgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmpvYnMuZXhlY3V0aW9uLklFeGVjdXRhYmxlTGlzdGVuZXJTeW5jOworCisvKioKKyAqIFRoaXMgaW50ZXJmYWNlIGlzIGltcGxlbWVudGVkIGJ5IGNsYXNzZXMgdGhhdCB3YW50IHRvIGxpc3RlbiB0byBldmVudHMKKyAqIGdlbmVyYXRlZCBieSBhIHtAbGluayBTaW11bGF0aW9ufS4gVGhlIHRocmVhZCBydW5uaW5nIHRoZSB7QGxpbmsgU2ltdWxhdGlvbn0KKyAqIHdpbGwgd2FpdCB1bnRpbCB0aGUge0BsaW5rICNzaW11bGF0aW9uQ2hhbmdlZFN5bmMoU2ltdWxhdGlvbkV2ZW50KX0gbWV0aG9kCisgKiByZXR1cm5zIGJlZm9yZSBpdCBjb250aW51ZXMgZXhlY3V0aW9uLgorICogCisgKiBAc2VlIElTaW11bGF0aW9uCisgKi8KK3B1YmxpYyBpbnRlcmZhY2UgSVNpbXVsYXRpb25MaXN0ZW5lclN5bmMgZXh0ZW5kcyBJRXhlY3V0YWJsZUxpc3RlbmVyU3luYyB7CisJLyoqCisJICogQHBhcmFtIGV2ZW50CisJICogICAgICAgICAgICB0aGUgZXZlbnQgdGhhdCByZWNvcmRzIHdoYXQgaGFwcGVuZWQgdG8gdGhlIHtAbGluayBTaW11bGF0aW9ufS4KKwkgKi8KKwl2b2lkIHNpbXVsYXRpb25DaGFuZ2VkU3luYyhTaW11bGF0aW9uRXZlbnQgZXZlbnQpOworfSAvLyBJU2ltdWxhdGlvbkxpc3RlbmVyU3luYwpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmpvYnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vam9icy9zaW11bGF0aW9uL0lTaW11bGF0aW9uTWFuYWdlckxpc3RlbmVyLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uam9icy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9qb2JzL3NpbXVsYXRpb24vSVNpbXVsYXRpb25NYW5hZ2VyTGlzdGVuZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MDdiNzJiCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmpvYnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vam9icy9zaW11bGF0aW9uL0lTaW11bGF0aW9uTWFuYWdlckxpc3RlbmVyLmphdmEKQEAgLTAsMCArMSwzMSBAQAorLy8gSVNpbXVsYXRpb25NYW5hZ2VyTGlzdGVuZXIuamF2YQorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmpvYnMuc2ltdWxhdGlvbjsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNiwgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmpvYnMuZXhlY3V0aW9uLklFeGVjdXRhYmxlTWFuYWdlckxpc3RlbmVyOworCisvKioKKyAqIFRoaXMgaW50ZXJmYWNlIGlzIGltcGxlbWVudGVkIGJ5IGNsYXNzZXMgdGhhdCB3YW50IHRvIGJlIGluZm9ybWVkIG9mIGV2ZW50cworICogZ2VuZXJhdGVkIGJ5IGEge0BsaW5rIFNpbXVsYXRpb25NYW5hZ2VyfS4KKyAqIAorICogQHNlZSBTaW11bGF0aW9uTWFuYWdlcgorICogQHNlZSBTaW11bGF0aW9uCisgKi8KK3B1YmxpYyBpbnRlcmZhY2UgSVNpbXVsYXRpb25NYW5hZ2VyTGlzdGVuZXIgZXh0ZW5kcyBJRXhlY3V0YWJsZU1hbmFnZXJMaXN0ZW5lciB7CisJLyoqCisJICogQHBhcmFtIGV2ZW50CisJICogICAgICAgICAgICB0aGUgZXZlbnQgdGhhdCByZWNvcmRzIHdoYXQgaGFwcGVuZWQgdG8gdGhlIG1hbmFnZXIuCisJICovCisJdm9pZCBzaW11bGF0aW9uc0NoYW5nZWQoU2ltdWxhdGlvbk1hbmFnZXJFdmVudCBldmVudCk7CisKK30gLy8gSVNpbXVsYXRpb25NYW5hZ2VyTGlzdGVuZXIKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5qb2JzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2pvYnMvc2ltdWxhdGlvbi9JU2ltdWxhdGlvbk1hbmFnZXJMaXN0ZW5lclN5bmMuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5qb2JzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2pvYnMvc2ltdWxhdGlvbi9JU2ltdWxhdGlvbk1hbmFnZXJMaXN0ZW5lclN5bmMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YjFmNmEwCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmpvYnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vam9icy9zaW11bGF0aW9uL0lTaW11bGF0aW9uTWFuYWdlckxpc3RlbmVyU3luYy5qYXZhCkBAIC0wLDAgKzEsMzQgQEAKKy8vIElTaW11bGF0aW9uTWFuYWdlckxpc3RlbmVyLmphdmEKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5qb2JzLnNpbXVsYXRpb247CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5qb2JzLmV4ZWN1dGlvbi5JRXhlY3V0YWJsZU1hbmFnZXJMaXN0ZW5lclN5bmM7CisKKy8qKgorICogVGhpcyBpbnRlcmZhY2UgaXMgaW1wbGVtZW50ZWQgYnkgY2xhc3NlcyB0aGF0IHdhbnQgdG8gYmUgaW5mb3JtZWQgb2YgZXZlbnRzCisgKiBnZW5lcmF0ZWQgYnkgYSB7QGxpbmsgU2ltdWxhdGlvbk1hbmFnZXJ9LiBUaGUgdGhyZWFkIHJ1bm5pbmcgdGhlCisgKiB7QGxpbmsgU2ltdWxhdGlvbk1hbmFnZXJ9IHdpbGwgd2FpdCB1bnRpbCB0aGUKKyAqIHtAbGluayAjc2ltdWxhdGlvbnNDaGFuZ2VkU3luYyhTaW11bGF0aW9uTWFuYWdlckV2ZW50KX0gbWV0aG9kIHJldHVybnMgYmVmb3JlCisgKiBpdCBjb250aW51ZXMgZXhlY3V0aW9uLgorICogCisgKiBAc2VlIFNpbXVsYXRpb25NYW5hZ2VyCisgKiBAc2VlIFNpbXVsYXRpb24KKyAqLworcHVibGljIGludGVyZmFjZSBJU2ltdWxhdGlvbk1hbmFnZXJMaXN0ZW5lclN5bmMgZXh0ZW5kcworCQlJRXhlY3V0YWJsZU1hbmFnZXJMaXN0ZW5lclN5bmMgeworCS8qKgorCSAqIEBwYXJhbSBldmVudAorCSAqICAgICAgICAgICAgdGhlIGV2ZW50IHRoYXQgcmVjb3JkcyB3aGF0IGhhcHBlbmVkIHRvIHRoZSBtYW5hZ2VyLgorCSAqLworCXZvaWQgc2ltdWxhdGlvbnNDaGFuZ2VkU3luYyhTaW11bGF0aW9uTWFuYWdlckV2ZW50IGV2ZW50KTsKK30gLy8gSVNpbXVsYXRpb25NYW5hZ2VyTGlzdGVuZXJTeW5jCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uam9icy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9qb2JzL3NpbXVsYXRpb24vTWVzc2FnZXMuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5qb2JzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2pvYnMvc2ltdWxhdGlvbi9NZXNzYWdlcy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg3NTIzNzQKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uam9icy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9qb2JzL3NpbXVsYXRpb24vTWVzc2FnZXMuamF2YQpAQCAtMCwwICsxLDQyIEBACisvLyBNZXNzYWdlcy5qYXZhCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uam9icy5zaW11bGF0aW9uOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGphdmEudXRpbC5NaXNzaW5nUmVzb3VyY2VFeGNlcHRpb247CitpbXBvcnQgamF2YS51dGlsLlJlc291cmNlQnVuZGxlOworCisvKioKKyAqIFRoaXMgY2xhc3MgcmVwcmVzZW50cworICovCitwdWJsaWMgY2xhc3MgTWVzc2FnZXMgeworCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBCVU5ETEVfTkFNRSA9ICJvcmcuZWNsaXBzZS5zdGVtLmpvYnMuc2ltdWxhdGlvbi5tZXNzYWdlcyI7IC8vJE5PTi1OTFMtMSQKKworCXByaXZhdGUgc3RhdGljIGZpbmFsIFJlc291cmNlQnVuZGxlIFJFU09VUkNFX0JVTkRMRSA9IFJlc291cmNlQnVuZGxlCisJCQkuZ2V0QnVuZGxlKEJVTkRMRV9OQU1FKTsKKworCXByaXZhdGUgTWVzc2FnZXMoKSB7CisJCS8vIE5vdGhpbmcKKwl9CisKKwkvKioKKwkgKiBAcGFyYW0ga2V5CisJICogQHJldHVybiB0aGUgc3RyaW5nIHRoYXQgbWF0Y2hlcyB0aGUga2V5CisJICovCisJcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0U3RyaW5nKFN0cmluZyBrZXkpIHsKKwkJdHJ5IHsKKwkJCXJldHVybiBSRVNPVVJDRV9CVU5ETEUuZ2V0U3RyaW5nKGtleSk7CisJCX0gY2F0Y2ggKE1pc3NpbmdSZXNvdXJjZUV4Y2VwdGlvbiBlKSB7CisJCQlyZXR1cm4gJyEnICsga2V5ICsgJyEnOworCQl9CisJfQorfSAvLyBNZXNzYWdlcwpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmpvYnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vam9icy9zaW11bGF0aW9uL1NpbXVsYXRpb24uamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5qb2JzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2pvYnMvc2ltdWxhdGlvbi9TaW11bGF0aW9uLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTliYzJiMwotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5qb2JzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2pvYnMvc2ltdWxhdGlvbi9TaW11bGF0aW9uLmphdmEKQEAgLTAsMCArMSw3MzAgQEAKKy8vIFNpbXVsYXRpb24uamF2YQ0KK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5qb2JzLnNpbXVsYXRpb247DQorDQorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuDQorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscw0KKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMA0KKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0DQorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwNCisgKg0KKyAqIENvbnRyaWJ1dG9yczoNCisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uDQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQorDQoraW1wb3J0IGphdmEudGV4dC5NZXNzYWdlRm9ybWF0Ow0KK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0Ow0KK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsNCitpbXBvcnQgamF2YS51dGlsLmNvbmN1cnJlbnQuQ29weU9uV3JpdGVBcnJheUxpc3Q7DQorDQoraW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JQ29uZmlndXJhdGlvbkVsZW1lbnQ7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JRXh0ZW5zaW9uUmVnaXN0cnk7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUHJvZ3Jlc3NNb25pdG9yOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsNCitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBsYXRmb3JtOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUHJlZmVyZW5jZXM7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QcmVmZXJlbmNlcy5JUHJvcGVydHlDaGFuZ2VMaXN0ZW5lcjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlByZWZlcmVuY2VzLlByb3BlcnR5Q2hhbmdlRXZlbnQ7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TdGF0dXM7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LkFkYXB0ZXI7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmRpYWxvZ3MuRXJyb3JEaWFsb2c7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5Db25zdGFudHM7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5Db3JlUGx1Z2luOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguR3JhcGhQYXJ0aXRpb25lcjsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLlNURU1UaW1lOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2NlbmFyaW8uU2NlbmFyaW87DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zY2VuYXJpby5pbXBsLlNjZW5hcmlvSW1wbDsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNjZW5hcmlvLnByb3ZpZGVyLlNjZW5hcmlvSXRlbVByb3ZpZGVyQWRhcHRlckZhY3Rvcnk7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zZXF1ZW5jZXIuU2VxdWVuY2VyOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc29sdmVyLlNvbHZlcjsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5qb2JzLkFjdGl2YXRvcjsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5qb2JzLkRpc3BsYXlTYWZlRXhlY3V0b3I7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uam9icy5leGVjdXRpb24uRXhlY3V0YWJsZTsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5qb2JzLnByZWZlcmVuY2VzLlByZWZlcmVuY2VDb25zdGFudHM7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uam9icy5wcmVmZXJlbmNlcy5TaW11bGF0aW9uTWFuYWdlbWVudFByZWZlcmVuY2VQYWdlOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5EaXNwbGF5Ow0KK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5JV29ya2JlbmNoV2luZG93Ow0KK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5QbGF0Zm9ybVVJOw0KKw0KKy8qKg0KKyAqIFRoaXMgY2xhc3MgaW1wbGVtZW50cyB0aGUgbWFpbiBzaW11bGF0aW9uIGxvZ2ljIG9mIHRoZSBTVEVNIHN5c3RlbS4gSXQgcnVucw0KKyAqIGluIHRoZSBiYWNrZ3JvdW5kIGFzIGEgc2VwYXJhdGUge0BsaW5rIEpvYn0gaW4gZWNsaXBzZS4NCisgKi8NCitwdWJsaWMgY2xhc3MgU2ltdWxhdGlvbiBleHRlbmRzIEV4ZWN1dGFibGUgaW1wbGVtZW50cyBJU2ltdWxhdGlvbiwgSVByb3BlcnR5Q2hhbmdlTGlzdGVuZXIgew0KKwkvKioNCisJICogVGhlIGNvbGxlY3Rpb24gb2Yge0BsaW5rIElTaW11bGF0aW9uTGlzdGVuZXJ9J3Mgd2FpdGluZyB0byBiZSB0b2xkIGFib3V0DQorCSAqIHtAbGluayBTaW11bGF0aW9ufSdzIGV2ZW50cy4NCisJICovDQorCS8vIEkgdGhpbmsgdGhpcyBzaG91bGQgcmVhbGx5IGJlIGEge0BsaW5rIENvcHlPbldyaXRlQXJyYXlMaXN0fSBsaWtlIHtAbGluaw0KKwkvLyAjbGlzdGVuZXJzU3luY30NCisJcHJpdmF0ZSBmaW5hbCBMaXN0PElTaW11bGF0aW9uTGlzdGVuZXI+IGxpc3RlbmVycyA9IG5ldyBDb3B5T25Xcml0ZUFycmF5TGlzdDxJU2ltdWxhdGlvbkxpc3RlbmVyPigpOw0KKwkvKioNCisJICogVGhlIGNvbGxlY3Rpb24gb2Yge0BsaW5rIElCYXRjaE1hbmFnZXJMaXN0ZW5lclN5bmN9J3Mgd2FpdGluZyB0byBiZSB0b2xkDQorCSAqIGFib3V0IHtAbGluayBCYXRjaE1hbmFnZXJFdmVudH0ncw0KKwkgKi8NCisJcHJpdmF0ZSBmaW5hbCBMaXN0PElTaW11bGF0aW9uTGlzdGVuZXJTeW5jPiBsaXN0ZW5lcnNTeW5jID0gbmV3IENvcHlPbldyaXRlQXJyYXlMaXN0PElTaW11bGF0aW9uTGlzdGVuZXJTeW5jPigpOw0KKw0KKwkNCisJcHJpdmF0ZSBmaW5hbCBMaXN0PElTaW11bGF0aW9uTGlzdGVuZXI+IGxpc3RlbmVyc0hlYWRsZXNzID0gbmV3IENvcHlPbldyaXRlQXJyYXlMaXN0PElTaW11bGF0aW9uTGlzdGVuZXI+KCk7DQorDQorCXByaXZhdGUgZmluYWwgTGlzdDxJU2ltdWxhdGlvbkxpc3RlbmVyU3luYz4gbGlzdGVuZXJzU3luY0hlYWRsZXNzID0gbmV3IENvcHlPbldyaXRlQXJyYXlMaXN0PElTaW11bGF0aW9uTGlzdGVuZXJTeW5jPigpOw0KKw0KKwkNCisJDQorCQ0KKwkvKioNCisJICogSWYgPGNvZGU+dHJ1ZTwvY29kZT4gdGhlbiB0aGUge0BsaW5rIFNpbXVsYXRpb259IHdpbGwgc2xlZXAgZm9yIGENCisJICogc3BlY2lmaWVkIHRpbWUgcGVyaW9kIGF0IHRoZSBlbmQgb2YgZWFjaCBzaW11bGF0aW9uIGN5Y2xlLg0KKwkgKi8NCisJcHVibGljIGJvb2xlYW4gc2ltdWxhdGlvblNsZWVwID0gU2ltdWxhdGlvbk1hbmFnZW1lbnRQcmVmZXJlbmNlUGFnZS5ERUZBVUxUX1NJTVVMQVRJT05fU0xFRVA7DQorDQorCS8qKg0KKwkgKiBJZiB7QGxpbmsgc2ltdWxhdGlvblNsZWVwfSBpcyA8Y29kZT50cnVlPC9jb2RlPiwgdGhlbiB0aGlzIGlzIHRoZSBudW1iZXINCisJICogb2YgbWlsbGlzZWNvbmRzIGF0IHRoZSBlbmQgb2YgZWFjaCBjeWNsZSB0aGF0IHRoZSB7QGxpbmsgU2ltdWxhdGlvbn0NCisJICogc2hvdWxkIHNsZWVwLg0KKwkgKi8NCisJcHJpdmF0ZSBpbnQgc2xlZXBNaWxsaXNlY29uZHMgPSBTaW11bGF0aW9uTWFuYWdlbWVudFByZWZlcmVuY2VQYWdlLk1JTl9TSU1VTEFUSU9OX1NMRUVQX01JTExJU0VDT05EUzsNCisNCisJLyoqDQorCSAqIFRoZSBjdXJyZW50IHN0YXRlIG9mIHRoZSB7QGxpbmsgU2ltdWxhdGlvbn0uDQorCSAqLw0KKwlwcml2YXRlIFNpbXVsYXRpb25TdGF0ZSBzaW11bGF0aW9uU3RhdGU7DQorDQorCS8qKg0KKwkgKiBUaGlzIGlzIHRoZSB7QGxpbmsgU2NlbmFyaW99IGJlaW5nIHNpbXVsYXRlZC4gSXQgY29udGFpbnMgYWxsIG9mIHRoZQ0KKwkgKiB7QGxpbmsgU2ltdWxhdGlvblN0YXRlfSBpbmZvcm1hdGlvbi4NCisJICovDQorCXByaXZhdGUgU2NlbmFyaW8gc2NlbmFyaW8gPSBudWxsOw0KKw0KKwlwcml2YXRlIEFkYXB0ZXIgYWRhcHRlciA9IG51bGw7IA0KKw0KKwlwcml2YXRlIEdyYXBoUGFydGl0aW9uZXIgcGFydGl0aW9uZXI7DQorCQ0KKwkvKioNCisJICogVGhpcyBmbGFnIGNvbnRyb2xzIHRoZSBleGVjdXRpb24gb2YgdGhlIHtAbGluayBTaW11bGF0aW9ufS4gSWYgaXQgaXMNCisJICogPGNvZGU+ZmFsc2U8L2NvZGU+IHRoZSB7QGxpbmsgU2ltdWxhdGlvbn0gc3RvcHMgcnVubmluZyAoc2xlZXBzKSBvbiB0aGUNCisJICogbmV4dCBjeWNsZS4NCisJICogDQorCSAqIEBzZWUgI3BhdXNlKCkNCisJICovDQorCXByaXZhdGUgYm9vbGVhbiBrZWVwUnVubmluZyA9IHRydWU7DQorDQorCS8qKg0KKwkgKiBUaGlzIGZsYWcgY29udHJvbHMgdGhlIHN0YXRlIG9mIHRoZSB7QGxpbmsgU2ltdWxhdGlvbn0uIElmDQorCSAqIDxjb2RlPnRydWU8L2NvZGU+IHRoZW4gdGhlIHtAbGluayBTaW11bGF0aW9ufSBpcyBzdG9wcGVkIGlmIGl0IGlzIHJ1bm5pbmcNCisJICogYW5kIHRoZSB7QGxpbmsgU2NlbmFyaW99IGlzIHJlc2V0IHRvIGl0cyBpbml0aWFsIHN0YXRlLiBUaGUNCisJICoge0BsaW5rIFNpbXVsYXRpb259IGRvZXMgTk9UIHJlc3VtZSBydW5uaW5nIGFmdGVyIHRoZSByZXNldC4NCisJICogDQorCSAqIEBzZWUgI3Jlc2V0U2ltdWxhdGlvbigpDQorCSAqLw0KKwlwcml2YXRlIGJvb2xlYW4gcmVzZXQgPSBmYWxzZTsNCisNCisJLyoqDQorCSAqIFRoaXMgZmxhZyBpbmRpY2F0ZXMgdGhhdCB0aGUge0BsaW5rIFNpbXVsYXRpb259IHNob3VsZCBjb21wbGV0ZSBhIHNpbmdsZQ0KKwkgKiBzdGVwIChjeWNsZSkgYW5kIHRoZW4gcGF1c2UuDQorCSAqLw0KKwlwcml2YXRlIGJvb2xlYW4gc3RlcHBpbmcgPSBmYWxzZTsNCisNCisJLyoqDQorCSAqIElmIDxjb2RlPnRydWU8L2NvZGU+IHRoZW4gdGhlIHtAbGluayBTaW11bGF0aW9ufSBpcyBzdG9wcGluZw0KKwkgKi8NCisJcHJpdmF0ZSBib29sZWFuIHN0b3BwaW5nID0gZmFsc2U7DQorDQorCVNjZW5hcmlvSXRlbVByb3ZpZGVyQWRhcHRlckZhY3Rvcnkgc2NlbmFyaW9JdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSA9IG5ldyBTY2VuYXJpb0l0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5KCk7DQorCS8qKg0KKwkgKiBDb25zdHJ1Y3Rvcg0KKwkgKiANCisJICogQHBhcmFtIHRpdGxlDQorCSAqICAgICAgICAgICAgdGhlIHRpdGxlIG9mIHRoZSB7QGxpbmsgU2ltdWxhdGlvbn0uDQorCSAqIEBwYXJhbSBzZXF1ZW5jZU51bWJlcg0KKwkgKiAgICAgICAgICAgIHRoZSBzZXF1ZW5jZSBudW1iZXIgb2YgdGhlIHtAbGluayBTaW11bGF0aW9ufQ0KKwkgKi8NCisJcHVibGljIFNpbXVsYXRpb24oZmluYWwgU3RyaW5nIHRpdGxlLCBmaW5hbCBpbnQgc2VxdWVuY2VOdW1iZXIpIHsNCisJCXN1cGVyKHRpdGxlID09IG51bGwgPyAiIiA6IHRpdGxlLCBzZXF1ZW5jZU51bWJlcik7IC8vJE5PTi1OTFMtMSQNCisJCXNpbXVsYXRpb25TdGF0ZSA9IFNpbXVsYXRpb25TdGF0ZS5QQVVTRUQ7DQorCX0gLy8gU2ltdWxhdGlvbg0KKw0KKwkvKioNCisJICogQ29uc3RydWN0b3INCisJICogDQorCSAqIEBwYXJhbSBzY2VuYXJpbw0KKwkgKiAgICAgICAgICAgIHRoZSB7QGxpbmsgU2NlbmFyaW99IHRvIHNpbXVsYXRlDQorCSAqIEBwYXJhbSBzZXF1ZW5jZU51bWJlcg0KKwkgKiAgICAgICAgICAgIHRoZSBzZXF1ZW5jZSBudW1iZXIgb2YgdGhlIHtAbGluayBTaW11bGF0aW9ufQ0KKwkgKi8NCisJcHVibGljIFNpbXVsYXRpb24oZmluYWwgU2NlbmFyaW8gc2NlbmFyaW8sIGZpbmFsIGludCBzZXF1ZW5jZU51bWJlciwgR3JhcGhQYXJ0aXRpb25lciBwKSB7DQorCQl0aGlzKHNjZW5hcmlvLnByb2R1Y2VUaXRsZSgpLCBzZXF1ZW5jZU51bWJlcik7DQorCQl0aGlzLnNjZW5hcmlvID0gc2NlbmFyaW87DQorCQl0aGlzLnBhcnRpdGlvbmVyID0gcDsNCisJCXNldFByZWZlcmVuY2VzKCk7DQorDQorCQlBY3RpdmF0b3IuZ2V0RGVmYXVsdCgpLmdldFBsdWdpblByZWZlcmVuY2VzKCkuYWRkUHJvcGVydHlDaGFuZ2VMaXN0ZW5lcih0aGlzKTsNCisJfSAvLyBTaW11bGF0aW9uDQorDQorCS8qKg0KKwkgKiBTZXQgdGhlIHByZWZlcmVuY2VzLg0KKwkgKiANCisJICogQHNlZSAjc2ltdWxhdGlvblNsZWVwDQorCSAqIEBzZWUgI3NsZWVwTWlsbGlzZWNvbmRzDQorCSAqLw0KKwlwcm90ZWN0ZWQgdm9pZCBzZXRQcmVmZXJlbmNlcygpIHsNCisJCWZpbmFsIFByZWZlcmVuY2VzIHByZWZlcmVuY2VzID0gQWN0aXZhdG9yLmdldERlZmF1bHQoKQ0KKwkJLmdldFBsdWdpblByZWZlcmVuY2VzKCk7DQorCQlzaW11bGF0aW9uU2xlZXAgPSBwcmVmZXJlbmNlcw0KKwkJLmdldEJvb2xlYW4oUHJlZmVyZW5jZUNvbnN0YW50cy5TSU1VTEFUSU9OX1NMRUVQX0JPT0xFQU4pOw0KKwkJc2xlZXBNaWxsaXNlY29uZHMgPSBwcmVmZXJlbmNlcw0KKwkJLmdldEludChQcmVmZXJlbmNlQ29uc3RhbnRzLlNJTVVMQVRJT05fU0xFRVBfTUlMTElTRUNPTkRTX0lOVEVHRVIpOw0KKwkJU2NlbmFyaW9JbXBsLnJlcG9ydEVhY2hVbnJlc29sdmVkSWRlbnRpZmlhYmxlID0gcHJlZmVyZW5jZXMNCisJCS5nZXRCb29sZWFuKFByZWZlcmVuY2VDb25zdGFudHMuUkVQT1JUX0VBQ0hfVU5SRVNPTFZFRF9JREVOVElGSUFCTEVfQk9PTEVBTik7DQorCQlTY2VuYXJpb0ltcGwucmVwb3J0RGFuZ2xpbmdBaXJUcmFuc3BvcnRFZGdlcyA9IHByZWZlcmVuY2VzDQorCQkuZ2V0Qm9vbGVhbihQcmVmZXJlbmNlQ29uc3RhbnRzLlJFUE9SVF9EQU5HTElOR19BSVJfVFJBTlBPUlRfRURHRVNfQk9PTEVBTik7DQorDQorCQlTY2VuYXJpb0ltcGwucmVwb3J0TnVtYmVyb2ZVbnJlc29sdmVkSWRlbnRpZmlhYmxlcyA9IHByZWZlcmVuY2VzDQorCQkuZ2V0Qm9vbGVhbihQcmVmZXJlbmNlQ29uc3RhbnRzLlJFUE9SVF9OVU1CRVJfT0ZfVU5SRVNPTFZFRF9JREVOVElGSUFCTEVTX0JPT0xFQU4pOw0KKw0KKwl9IC8vIHNldFBlcmZlcmVuY2VzDQorDQorCS8qKg0KKwkgKiBAcmV0dXJuIHRoZSBzdGF0ZSBvZiB0aGUge0BsaW5rIFNpbXVsYXRpb259DQorCSAqLw0KKwlwdWJsaWMgZmluYWwgU2ltdWxhdGlvblN0YXRlIGdldFNpbXVsYXRpb25TdGF0ZSgpIHsNCisJCXJldHVybiBzaW11bGF0aW9uU3RhdGU7DQorCX0gLy8gZ2V0U2ltdWxhdGlvblN0YXRlDQorDQorCS8qKg0KKwkgKiBAcGFyYW0gc2ltdWxhdGlvblN0YXRlDQorCSAqICAgICAgICAgICAgdGhlIHtAbGluayBTaW11bGF0aW9uU3RhdGV9IHRvIHNldA0KKwkgKi8NCisJcHJpdmF0ZSBmaW5hbCB2b2lkIHNldFNpbXVsYXRpb25TdGF0ZShmaW5hbCBTaW11bGF0aW9uU3RhdGUgc2ltdWxhdGlvblN0YXRlKSB7DQorCQl0aGlzLnNpbXVsYXRpb25TdGF0ZSA9IHNpbXVsYXRpb25TdGF0ZTsNCisJCWZpcmVTaW11bGF0aW9uQ2hhbmdlZChzaW11bGF0aW9uU3RhdGUpOw0KKwl9IC8vIHNldFNpbXVsYXRpb25TdGF0ZQ0KKw0KKwkvKioNCisJICogQHNlZSBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuam9icy5Kb2IjcnVuKG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUHJvZ3Jlc3NNb25pdG9yKQ0KKwkgKi8NCisJQE92ZXJyaWRlDQorCXByb3RlY3RlZCBJU3RhdHVzIHJ1bihmaW5hbCBJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IpIHsNCisJCUlTdGF0dXMgcmV0VmFsdWUgPSBTdGF0dXMuT0tfU1RBVFVTOw0KKw0KKwkJdHJ5IHsNCisJCQlzZXRTaW11bGF0aW9uU3RhdGUoU2ltdWxhdGlvblN0YXRlLlJVTk5JTkcpOw0KKw0KKwkJCWtlZXBSdW5uaW5nID0gdHJ1ZTsNCisNCisJCQkvLyBEaWQgd2UgZ2V0IGEgcmVxdWVzdCB0byByZXNldD8NCisJCQlpZiAocmVzZXQpIHsNCisJCQkJLy8gWWVzDQorCQkJCXNjZW5hcmlvLnJlc2V0KCk7DQorCQkJCXJlc2V0ID0gZmFsc2U7DQorCQkJfQ0KKw0KKwkJCWFzc2VydCBzY2VuYXJpby5zYW5lKCk7DQorDQorCQkJbW9uaXRvci5iZWdpblRhc2soc2NlbmFyaW8ucHJvZHVjZVRpdGxlKCksIFRPVEFMX1dPUkspOw0KKwkJCWZpbmFsIFNlcXVlbmNlciBzZXF1ZW5jZXIgPSBzY2VuYXJpby5nZXRTZXF1ZW5jZXIoKTsNCisNCisJCQkvLyBGaWd1cmUgb3V0IGhvdyBtdWNoIHdvcmsgaGFzIGJlZW4gcGVyZm9ybWVkIGZvciB0aGlzIHNjZW5hcmlvDQorCQkJLy8gYWxyZWFkeS4NCisJCQkvLyAkQU5BTFlTSVMtSUdOT1JFDQorCQkJbW9uaXRvci53b3JrZWQoKGludCkgc2VxdWVuY2VyLmdldFdvcmtDb21wbGV0ZSgpKTsNCisJCQlmaW5hbCBTaW11bGF0aW9uIHNlbGYgPSB0aGlzOw0KKy8qCQkJYWRhcHRlciA9IG5ldyBBZGFwdGVySW1wbCgpIHsNCisJCQkJQE92ZXJyaWRlDQorCQkJCXB1YmxpYyB2b2lkIG5vdGlmeUNoYW5nZWQoTm90aWZpY2F0aW9uIG1zZykNCisJCQkJew0KKwkJCQkJU2NlbmFyaW8gc2NlbmFyaW8gPSAoU2NlbmFyaW8pbXNnLmdldE5vdGlmaWVyKCk7DQorCQkJCQlzd2l0Y2gobXNnLmdldEZlYXR1cmVJRChTY2VuYXJpby5jbGFzcykpIHsNCisJCQkJCWNhc2UgU2NlbmFyaW9QYWNrYWdlLlNDRU5BUklPX19QUk9HUkVTUzoNCisJCQkJCQlTaW11bGF0aW9uRXZlbnQgZXZlbnQgPSBuZXcgU2ltdWxhdGlvbkV2ZW50KHNlbGYsIFNpbXVsYXRpb25TdGF0ZS5SVU5OSU5HLCBzY2VuYXJpby5nZXRQcm9ncmVzcygpKTsNCisJCQkJCQlzZWxmLmZpcmVTaW11bGF0aW9uQ2hhbmdlZEV2ZW50KGV2ZW50KTsNCisJCQkJCQlicmVhazsNCisJCQkJCX0NCisNCisJCQkJfQ0KKwkJCX07IA0KKwkJCQ0KKwkJCXNjZW5hcmlvLmVBZGFwdGVycygpLmFkZChhZGFwdGVyKTsNCisJCQkqLw0KKw0KKwkJCS8vU2NlbmFyaW9JdGVtUHJvdmlkZXIgc2lwID0gKFNjZW5hcmlvSXRlbVByb3ZpZGVyKXNjZW5hcmlvSXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkuYWRhcHQodGhpcywgU2NlbmFyaW9JdGVtUHJvdmlkZXIuY2xhc3MpOw0KKw0KKwkJCS8vc2NlbmFyaW9JdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeS5hZGRMaXN0ZW5lcih0aGlzKTsgLy8gdWdoDQorDQorCQkJLy8gRG9lcyB0aGUgc2VxdWVuY2VyIHNheSB3ZSd2ZSBmaW5pc2hlZCBiZWZvcmUgd2UndmUgc3RhcnRlZD8NCisJCQlpZiAoIXNlcXVlbmNlci5pc1RpbWVUb1N0b3AoKSkgew0KKwkJCQkvLyBObw0KKwkJCQl3aGlsZSAoa2VlcFJ1bm5pbmcgJiYgIXJlc2V0KSB7DQorCQkJCQlmaW5hbCBTVEVNVGltZSBjdXJyZW50VGltZSA9IHNlcXVlbmNlci5nZXRDdXJyZW50VGltZSgpOw0KKwkJCQkJbW9uaXRvci5zdWJUYXNrKGN1cnJlbnRUaW1lLnRvU3RyaW5nKCkpOw0KKw0KKwkJCQkJLy8gQXR0ZW1wdCBvbmUgc3RlcCAoY3ljbGUpIGluIHRoZSBzaW11bGF0aW9uDQorCQkJCQl0cnkgew0KKwkJCQkJCWlmKHNjZW5hcmlvLmdldENhbm9uaWNhbEdyYXBoKCkgPT0gbnVsbCkNCisJCQkJCQkJc2NlbmFyaW8uaW5pdGlhbGl6ZSgpOw0KKw0KKwkJCQkJCWlmKHNjZW5hcmlvLmdldFNvbHZlcigpID09IG51bGwpIHsNCisJCQkJCQkJU29sdmVyIFtdIHNvbHZlcnMgPSB0aGlzLmdldFNvbHZlcnMoKTsNCisJCQkJCQkJLy8gVXNlIHRoZSBkZWZhdWx0IGZpbml0ZSBkaWZmZXJlbmNlIHdoZW4gbm90IGF2YWlsYWJsZQ0KKwkJCQkJCQlmb3IoU29sdmVyIHM6c29sdmVycykNCisJCQkJCQkJCWlmKHMuZ2V0Q2xhc3MoKS5nZXROYW1lKCkuZXF1YWxzKCJvcmcuZWNsaXBzZS5zdGVtLnNvbHZlcnMuZmQuaW1wbC5GaW5pdGVEaWZmZXJlbmNlSW1wbCIpKQ0KKwkJCQkJCQkJe3NjZW5hcmlvLnNldFNvbHZlcihzKTticmVhazt9DQorDQorCQkJCQkJfQ0KKwkJCQkJCS8vIE1ha2Ugc3VyZSB0aGUgZGVjb3JhdG9ycyBhcmUgc2V0IG9uIHRoZSBzb2x2ZXINCisJCQkJCQlzY2VuYXJpby5nZXRTb2x2ZXIoKS5zZXREZWNvcmF0b3JzKHNjZW5hcmlvLmdldENhbm9uaWNhbEdyYXBoKCkuZ2V0RGVjb3JhdG9ycygpKTsNCisNCisJCQkJCQlpZighc2NlbmFyaW8uZ2V0U29sdmVyKCkuaXNJbml0aWFsaXplZCgpKSB7DQorCQkJCQkJCXNjZW5hcmlvLmdldFNvbHZlcigpLmluaXRpYWxpemUoc2NlbmFyaW8uZ2V0U2VxdWVuY2VyKCkuZ2V0TmV4dFRpbWUoKSwgcGFydGl0aW9uZXIpOw0KKwkJCQkJCQlzZXRTaW11bGF0aW9uU3RhdGUoU2ltdWxhdGlvblN0YXRlLkNPTVBMRVRFRF9DWUNMRSk7IC8vIFNvIHRoYXQgbG9nIGlzIHdyaXR0ZW4gd2l0aCBpbml0aWFsIHZhbHVlcw0KKwkJCQkJCX0NCisNCisJCQkJCQlib29sZWFuIHN1Y2Nlc3MgPSBzY2VuYXJpby5zdGVwKCk7DQorCQkJCQkJaWYoIXN1Y2Nlc3MpIHtrZWVwUnVubmluZyA9IGZhbHNlO3JldFZhbHVlID0gU3RhdHVzLkNBTkNFTF9TVEFUVVM7fQ0KKwkJCQkJCWFzc2VydCBzY2VuYXJpby5zYW5lKCk7DQorDQorCQkJCQkJLy8gVG8gc2xlZXAsIHBlciBjaGFuY2UgdG8gZHJlYW0/DQorCQkJCQkJaWYgKHNpbXVsYXRpb25TbGVlcCkgew0KKwkJCQkJCQkvLyBZZXMNCisJCQkJCQkJVGhyZWFkLnNsZWVwKHNsZWVwTWlsbGlzZWNvbmRzKTsNCisJCQkJCQl9DQorDQorCQkJCQkJbW9uaXRvci53b3JrZWQoc2VxdWVuY2VyLmdldFdvcmtJbmNyZW1lbnQoKSk7DQorDQorCQkJCQkJLy8gV2Ugc3RvcCB3aGVuIHRoZSBzZXF1ZW5jZXIgdGVsbHMgdXMgaXQgaXMgdGltZQ0KKwkJCQkJCWlmIChzZXF1ZW5jZXIuaXNUaW1lVG9TdG9wKCkpIHsNCisJCQkJCQkJa2VlcFJ1bm5pbmcgPSBmYWxzZTsNCisJCQkJCQkJcmV0VmFsdWUgPSBTdGF0dXMuT0tfU1RBVFVTOw0KKwkJCQkJCX0NCisJCQkJCQkvLyBPciwgaWYgdGhpbmdzIGFyZSBjYW5jZWxlZA0KKwkJCQkJCWVsc2UgaWYgKG1vbml0b3IuaXNDYW5jZWxlZCgpKSB7DQorCQkJCQkJCWtlZXBSdW5uaW5nID0gZmFsc2U7DQorCQkJCQkJCXJldFZhbHVlID0gU3RhdHVzLkNBTkNFTF9TVEFUVVM7DQorCQkJCQkJfQ0KKwkJCQkJCS8vIE9yLCBpZiB3ZSdyZSBzdGVwcGluZw0KKwkJCQkJCWVsc2UgaWYgKHN0ZXBwaW5nKSB7DQorCQkJCQkJCWtlZXBSdW5uaW5nID0gZmFsc2U7DQorCQkJCQkJfQ0KKw0KKwkJCQkJfSBjYXRjaCAoZmluYWwgRXhjZXB0aW9uIGUpIHsNCisJCQkJCQkvLyBQcm9ibGVtLiBXZSdyZSBvdXQgb2YgaGVyZS4NCisJCQkJCQloYW5kbGVFeGNlcHRpb24oc2NlbmFyaW8sIGdldE5hbWUoKSwgdHJ1ZSwgZSk7DQorCQkJCQkJa2VlcFJ1bm5pbmcgPSBmYWxzZTsNCisJCQkJCQlzdG9wcGluZyA9IHRydWU7DQorCQkJCQkJcmV0VmFsdWUgPSBTdGF0dXMuQ0FOQ0VMX1NUQVRVUzsNCisJCQkJCX0NCisJCQkJCXNldFNpbXVsYXRpb25TdGF0ZShTaW11bGF0aW9uU3RhdGUuQ09NUExFVEVEX0NZQ0xFKTsNCisJCQkJfSAvLyB3aGlsZSBrZWVwUnVubmluZw0KKw0KKwkJCQkvLyBXYXMgaXQgdGltZSB0byBzdG9wPw0KKwkJCQlpZiAoc2VxdWVuY2VyLmlzVGltZVRvU3RvcCgpICYmIHJldFZhbHVlID09IFN0YXR1cy5PS19TVEFUVVMpIHsNCisJCQkJCS8vIFllcw0KKwkJCQkJc2V0U2ltdWxhdGlvblN0YXRlKFNpbXVsYXRpb25TdGF0ZS5DT01QTEVURURfU0VRVUVOQ0UpOw0KKwkJCQl9DQorCQkJfSAvLyBpZiBOT1QgdGltZSB0byBzdG9wIGJlZm9yZSB3ZSBzdGFydA0KKwkJCWVsc2Ugew0KKwkJCQkvLyBZZXMNCisJCQkJLy8gVGhlIHNlcXVlbmNlciBzYXlzIHdlJ3ZlIGZpbmlzaGVkIGJlZm9yZSB3ZSBzdGFydGVkDQorCQkJCUFjdGl2YXRvci5sb2dJbmZvcm1hdGlvbihNZXNzYWdlRm9ybWF0LmZvcm1hdChNZXNzYWdlcw0KKwkJCQkJCS5nZXRTdHJpbmcoIlNpbS5UaW1lX0Vycm9yIiksIHNlcXVlbmNlcg0KKwkJCQkJCS5nZXRDdXJyZW50VGltZSgpLnRvU3RyaW5nKCksIHNlcXVlbmNlci5nZXRFbmRUaW1lKCkNCisJCQkJCQkudG9TdHJpbmcoKSksIG51bGwpOw0KKwkJCX0gLy8gZWxzZQ0KKw0KKwkJCS8vIERpZCB3ZSBnZXQgYSByZXF1ZXN0IHRvIHJlc2V0Pw0KKwkJCWlmIChyZXNldCkgew0KKwkJCQkvLyBZZXMNCisJCQkJc2NlbmFyaW8ucmVzZXQoKTsNCisJCQkJcmVzZXQgPSBmYWxzZTsNCisJCQkJc2V0U2ltdWxhdGlvblN0YXRlKFNpbXVsYXRpb25TdGF0ZS5SRVNFVCk7DQorCQkJfQ0KKw0KKwkJCW1vbml0b3IuZG9uZSgpOw0KKw0KKwkJfSBjYXRjaCAoZmluYWwgUnVudGltZUV4Y2VwdGlvbiBlKSB7DQorCQkJaGFuZGxlRXhjZXB0aW9uKHNjZW5hcmlvLCBnZXROYW1lKCksIHRydWUsIGUpOw0KKwkJCXN0b3BwaW5nID0gdHJ1ZTsNCisJCX0gLy8gY2F0Y2ggUnVudGltZUV4Y2VwdGlvbg0KKw0KKwkJLy8gQXJlIHdlIHN0b3BwaW5nIG9yIGp1c3QgcGF1c2luZz8NCisJCXNldFNpbXVsYXRpb25TdGF0ZShzdG9wcGluZyA/IFNpbXVsYXRpb25TdGF0ZS5TVE9QUEVEDQorCQkJCTogU2ltdWxhdGlvblN0YXRlLlBBVVNFRCk7DQorDQorCQlyZXR1cm4gcmV0VmFsdWU7DQorDQorCX0gLy8gcnVuDQorDQorCS8qKg0KKwkgKiBEbyB0aGUgcHJvY2Vzc2luZyByZXF1aXJlZCB0byBoYW5kbGUgYSB7QGxpbmsgRXhjZXB0aW9ufQ0KKwkgKiANCisJICogQHBhcmFtIHNjZW5hcmlvDQorCSAqICAgICAgICAgICAgdGhlIHtAbGluayBTY2VuYXJpb30gdGhhdCBjYXVzZWQgdGhlIHtAbGluayBFeGNlcHRpb259DQorCSAqIEBwYXJhbSBuYW1lDQorCSAqICAgICAgICAgICAgdGhlIG5hbWUgdG8gdXNlIGluIGVycm9yIG1lc3NhZ2VzIHRoYXQgaWRlbnRpZmllcyB0aGUgc291cmNlDQorCSAqICAgICAgICAgICAgb2YgdGhlIHtAbGluayBTY2VuYXJpb30NCisJICogQHBhcmFtIHByb21wdFVzZXINCisJICogICAgICAgICAgICBpZiA8Y29kZT50cnVlPC9jb2RlPiB0aGVuIHByZXNlbnQgdGhlIHVzZXIgd2l0aCBhIGRpYWxvZyBib3gNCisJICogICAgICAgICAgICBleHBsYWluaW5nIHRoZSBtZXNzYWdlLg0KKwkgKiBAcGFyYW0gZQ0KKwkgKiAgICAgICAgICAgIHRoZSB7QGxpbmsgRXhjZXB0aW9ufQ0KKwkgKi8NCisJc3RhdGljIHB1YmxpYyB2b2lkIGhhbmRsZUV4Y2VwdGlvbihmaW5hbCBTY2VuYXJpbyBzY2VuYXJpbywNCisJCQlmaW5hbCBTdHJpbmcgbmFtZSwgZmluYWwgYm9vbGVhbiBwcm9tcHRVc2VyLCBmaW5hbCBFeGNlcHRpb24gZSkgew0KKw0KKwkJLy8gV2UgY2FuIGdldCBhIGV4Y2VwdGlvbiBpZiB0aGUgdXNlciB0cmllcyB0byBydW4gYSBTY2VuYXJpbw0KKwkJLy8gdGhhdCBkb2Vzbid0IGhhdmUgYSBTZXF1ZW5jZXIgb3IgTW9kZWwgc3BlY2lmaWVkLiBPciwgd2UgY2FuIGdldCBvbmUNCisJCS8vIGJlY2F1c2Ugb2Ygc29tZSBvdGhlciBpbnRlcm5hbCBlcnJvci4NCisNCisJCVN0cmluZyB0ZW1wRXJyb3JNZXNzYWdlID0gIiI7DQorDQorCQlib29sZWFuIGxvZ0l0ID0gZmFsc2U7DQorDQorCQkvLyBQb3RlbnRpYWwgbWlzc2luZyBTZXF1ZW5jZXIgb3IgTW9kZWw/DQorCQlpZiAoZSBpbnN0YW5jZW9mIE51bGxQb2ludGVyRXhjZXB0aW9uKSB7DQorCQkJLy8gWWVzDQorCQkJLy8gRG9lcyB0aGUgU2NlbmFyaW8gaGF2ZSBhIFNlcXVlbmNlcj8NCisJCQlpZiAoc2NlbmFyaW8uZ2V0U2VxdWVuY2VyKCkgPT0gbnVsbCkgew0KKwkJCQkvLyBObw0KKwkJCQl0ZW1wRXJyb3JNZXNzYWdlID0gTWVzc2FnZUZvcm1hdC5mb3JtYXQoTWVzc2FnZXMNCisJCQkJCQkuZ2V0U3RyaW5nKCJTaW0uTWlzc2luZ1NlcSIpLCBuZXcgT2JqZWN0W10geyBuYW1lIH0pOw0KKwkJCX0gLy8gaWYgbWlzc2luZyBhIHNlcXVlbmNlcg0KKwkJCS8vIEhvdyBhYm91dCBhIG1vZGVsPw0KKwkJCWVsc2UgaWYgKHNjZW5hcmlvLmdldE1vZGVsKCkgPT0gbnVsbCkgew0KKwkJCQkvLyBObw0KKwkJCQl0ZW1wRXJyb3JNZXNzYWdlID0gTWVzc2FnZUZvcm1hdC5mb3JtYXQoTWVzc2FnZXMNCisJCQkJCQkuZ2V0U3RyaW5nKCJTaW0uTWlzc2luZ01vZGVsIiksIG5ldyBPYmplY3RbXSB7IG5hbWUgfSk7DQorCQkJfSAvLyBpZiBtaXNzaW5nIG1vZGVsDQorCQkJZWxzZSB7DQorCQkJCS8vIE5vDQorCQkJCS8vIEp1c3Qgc29tZSBvdGhlciBOUEUNCisJCQkJbG9nSXQgPSB0cnVlOw0KKwkJCQl0ZW1wRXJyb3JNZXNzYWdlID0gTWVzc2FnZUZvcm1hdC5mb3JtYXQoTWVzc2FnZXMNCisJCQkJCQkuZ2V0U3RyaW5nKCJTaW0uSUVyciIpLCBuZXcgT2JqZWN0W10geyBuYW1lIH0pOw0KKwkJCX0gLy8gZWxzZQ0KKwkJfSAvLyBpZiBOdWxsUG9pbnRlckV4Y2VwdGlvbg0KKwkJZWxzZSB7DQorCQkJLy8gTm8NCisJCQlsb2dJdCA9IHRydWU7DQorCQkJdGVtcEVycm9yTWVzc2FnZSA9IE1lc3NhZ2VGb3JtYXQuZm9ybWF0KE1lc3NhZ2VzDQorCQkJCQkuZ2V0U3RyaW5nKCJTaW0uSUVyciIpLCBuZXcgT2JqZWN0W10geyBuYW1lIH0pOw0KKwkJfSAvLyBlbHNlDQorDQorCQlmaW5hbCBTdHJpbmcgZXJyb3JNZXNzYWdlID0gdGVtcEVycm9yTWVzc2FnZTsNCisNCisJCS8vIExvZyBpdD8NCisJCWlmIChsb2dJdCB8fCAhcHJvbXB0VXNlcikgew0KKwkJCS8vIFllcw0KKwkJCUFjdGl2YXRvci5sb2dFcnJvcihlcnJvck1lc3NhZ2UsIGUpOw0KKwkJfSAvLyBpZg0KKw0KKwkJLy8gUHJvbXB0IHRoZSB1c2VyPw0KKwkJaWYgKHByb21wdFVzZXIpIHsNCisJCQkvLyBZZXMNCisJCQl0cnkgew0KKwkJCQlEaXNwbGF5IGQgPSBEaXNwbGF5U2FmZUV4ZWN1dG9yLnNhZmVHZXREZWZhdWx0RGlzcGxheSgpOw0KKwkJCQlpZiAoZCAhPSBudWxsKSB7DQorCQkJCQlkLnN5bmNFeGVjKG5ldyBSdW5uYWJsZSgpIHsNCisJCQkJCQlwdWJsaWMgdm9pZCBydW4oKSB7DQorCQkJCQkJCXRyeSB7DQorCQkJCQkJCQlmaW5hbCBJV29ya2JlbmNoV2luZG93IHdpbmRvdyA9IFBsYXRmb3JtVUkNCisJCQkJCQkJCS5nZXRXb3JrYmVuY2goKS5nZXRBY3RpdmVXb3JrYmVuY2hXaW5kb3coKTsNCisJCQkJCQkJCWZpbmFsIElTdGF0dXMgd2FybmluZyA9IG5ldyBTdGF0dXMoSVN0YXR1cy5XQVJOSU5HLA0KKwkJCQkJCQkJCQlBY3RpdmF0b3IuUExVR0lOX0lELCAxLCBlcnJvck1lc3NhZ2UsIG51bGwpOw0KKwkJCQkJCQkJRXJyb3JEaWFsb2cub3BlbkVycm9yKHdpbmRvdy5nZXRTaGVsbCgpLCBudWxsLCBudWxsLA0KKwkJCQkJCQkJCQl3YXJuaW5nKTsNCisJCQkJCQkJfSBjYXRjaChFeGNlcHRpb24gZSkgew0KKwkJCQkJCQkJLy8gSWYgd2UgZ2V0IHRoaXMgZXhjZXB0aW9uLCBpdCBpcyBiZWNhdXNlIHdlJ3JlIG5vdCBydW5uaW5nIGluDQorCQkJCQkJCQkvLyBlY2xpcHNlLg0KKwkJCQkJCQl9DQorCQkJCQkJfSAvLyBydW4NCisJCQkJCX0pOw0KKwkJCQl9DQorCQkJfSBjYXRjaCAoZmluYWwgRXJyb3IgbmNkZmUpIHsNCisJCQkJLy8gRW1wdHkNCisJCQl9IC8vIGNhdGNoDQorCQl9IC8vIGlmDQorCX0gLy8gaGFuZGxlUnVudGltZUV4Y2VwdGlvbg0KKw0KKwkvKioNCisJICogU3RhcnQgcnVubmluZyB0aGUge0BsaW5rIFNpbXVsYXRpb259Lg0KKwkgKi8NCisJcHVibGljIGZpbmFsIHZvaWQgcnVuKCkgew0KKwkJc3RlcHBpbmcgPSBmYWxzZTsNCisJCXNjaGVkdWxlKCk7DQorCX0gLy8gcnVuDQorDQorCS8qKg0KKwkgKiBQYXVzZSB0aGUge0BsaW5rIFNpbXVsYXRpb259DQorCSAqLw0KKwlwdWJsaWMgZmluYWwgdm9pZCBwYXVzZSgpIHsNCisJCWtlZXBSdW5uaW5nID0gZmFsc2U7DQorCX0gLy8gcGF1c2UNCisNCisJLyoqDQorCSAqIFJlc2V0IHRoZSB7QGxpbmsgU2ltdWxhdGlvbn0uDQorCSAqLw0KKwlwdWJsaWMgZmluYWwgdm9pZCByZXNldCgpIHsNCisJCXJlc2V0ID0gdHJ1ZTsNCisJCXN0ZXBwaW5nID0gZmFsc2U7DQorCQkvLyBJcyB0aGUgc2ltdWxhdGlvbiBjdXJyZW50bHkgcGF1c2VkPw0KKwkJaWYgKGdldFNpbXVsYXRpb25TdGF0ZSgpLmVxdWFscyhTaW11bGF0aW9uU3RhdGUuUEFVU0VEKSkgew0KKwkJCS8vIFllcw0KKwkJCXNjZW5hcmlvLnJlc2V0KCk7DQorCQkJcmVzZXQgPSBmYWxzZTsNCisJCQlzZXRTaW11bGF0aW9uU3RhdGUoU2ltdWxhdGlvblN0YXRlLlJFU0VUKTsNCisJCQlzZXRTaW11bGF0aW9uU3RhdGUoU2ltdWxhdGlvblN0YXRlLlBBVVNFRCk7DQorCQl9IC8vIGlmDQorCX0gLy8gcmVzZXQNCisNCisJLyoqDQorCSAqIFN0ZXAgdGhlIHtAbGluayBTaW11bGF0aW9ufSBvbmUgc3RlcC9jeWNsZSBpZiBpdCBoYXNuJ3QgYWxyZWFkeSBlbmRlZA0KKwkgKi8NCisJcHVibGljIGZpbmFsIHZvaWQgc3RlcCgpIHsNCisJCXN0ZXBwaW5nID0gdHJ1ZTsNCisJCXNjaGVkdWxlKCk7DQorCX0gLy8gc3RlcFNpbXVsYXRpb24NCisNCisJLyoqDQorCSAqIFN0b3AgdGhlIHtAbGluayBTaW11bGF0aW9ufS4NCisJICovDQorCXB1YmxpYyBmaW5hbCB2b2lkIHN0b3AoKSB7DQorCQlzdG9wcGluZyA9IHRydWU7DQorCQlrZWVwUnVubmluZyA9IGZhbHNlOw0KKwkJLy8gV2UgbmVlZCB0byBzZXQgb3VyIHN0YXRlIGhlcmUsIHdoaWNoIHdpbGwgbm90aWZ5IG91ciBsaXN0ZW5lcnMsDQorCQkvLyBiZWNhdXNlIHdlIG1heSBub3QgYmUgc2NoZWR1bGVkIGFuZCBzbyB0aGUgcnVuKElQcm9ncmVzc01vbml0b3IpDQorCQkvLyBtZXRob2QgbWF5IG5vdCBiZSBleGVjdXRpbmcgYW5kIHNvIHdvdWxkIG5vdCBzZXQgdGhlIHN0YXRlIHRvIFNUT1BQRUQNCisJCS8vIChhbmQgdGh1cyBub3RpZnkgbGlzdGVuZXJzKQ0KKwkJc2V0U2ltdWxhdGlvblN0YXRlKFNpbXVsYXRpb25TdGF0ZS5TVE9QUEVEKTsNCisJfSAvLyBzdGVwU2ltdWxhdGlvbg0KKw0KKwkvKioNCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmpvYnMuZXhlY3V0aW9uLklFeGVjdXRhYmxlI2lzUnVubmluZygpDQorCSAqLw0KKwlwdWJsaWMgYm9vbGVhbiBpc1J1bm5pbmcoKSB7DQorCQlyZXR1cm4gIXNpbXVsYXRpb25TdGF0ZS5lcXVhbHMoU2ltdWxhdGlvblN0YXRlLlBBVVNFRCk7DQorCX0NCisNCisJLyoqDQorCSAqIEByZXR1cm4gdGhlIHtAbGluayBTY2VuYXJpb30NCisJICovDQorCXB1YmxpYyBmaW5hbCBTY2VuYXJpbyBnZXRTY2VuYXJpbygpIHsNCisJCXJldHVybiB0aGlzLnNjZW5hcmlvOw0KKwl9DQorDQorCS8qKg0KKwkgKiBAcGFyYW0gc2NlbmFyaW8NCisJICogICAgICAgICAgICB0aGUge0BsaW5rIFNjZW5hcmlvfSB0byBzZXQNCisJICovDQorCXByb3RlY3RlZCBmaW5hbCB2b2lkIHNldFNjZW5hcmlvKGZpbmFsIFNjZW5hcmlvIHNjZW5hcmlvKSB7DQorCQl0aGlzLnNjZW5hcmlvID0gc2NlbmFyaW87DQorCX0NCisNCisJLyoqDQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5qb2JzLnNpbXVsYXRpb24uSVNpbXVsYXRpb24jYWRkU2ltdWxhdGlvbkxpc3RlbmVyKG9yZy5lY2xpcHNlLnN0ZW0uam9icy5zaW11bGF0aW9uLklTaW11bGF0aW9uTGlzdGVuZXIpDQorCSAqLw0KKwlwdWJsaWMgdm9pZCBhZGRTaW11bGF0aW9uTGlzdGVuZXIoZmluYWwgSVNpbXVsYXRpb25MaXN0ZW5lciBsaXN0ZW5lcikgew0KKwkJYWRkU2ltdWxhdGlvbkxpc3RlbmVyKGxpc3RlbmVyLCBmYWxzZSk7DQorCX0gLy8gYWRkU2ltdWxhdGlvbkxpc3RlbmVyDQorDQorCXB1YmxpYyB2b2lkIGFkZFNpbXVsYXRpb25MaXN0ZW5lcihmaW5hbCBJU2ltdWxhdGlvbkxpc3RlbmVyIGxpc3RlbmVyLCBmaW5hbCBib29sZWFuIGhlYWRsZXNzU2FmZSkgew0KKwkJaWYgKGhlYWRsZXNzU2FmZSkgew0KKwkJCWlmICghbGlzdGVuZXJzSGVhZGxlc3MuY29udGFpbnMobGlzdGVuZXIpKSB7DQorCQkJCWxpc3RlbmVyc0hlYWRsZXNzLmFkZChsaXN0ZW5lcik7DQorCQkJfQ0KKwkJCQ0KKwkJfSBlbHNlIHsNCisJCQlpZiAoIWxpc3RlbmVycy5jb250YWlucyhsaXN0ZW5lcikpIHsNCisJCQkJbGlzdGVuZXJzLmFkZChsaXN0ZW5lcik7DQorCQkJfQ0KKwkJfQ0KKwl9DQorDQorCXB1YmxpYyB2b2lkIGFkZFNpbXVsYXRpb25MaXN0ZW5lclN5bmMoZmluYWwgSVNpbXVsYXRpb25MaXN0ZW5lclN5bmMgbGlzdGVuZXIsIGZpbmFsIGJvb2xlYW4gaGVhZGxlc3NTYWZlKSB7DQorCQlpZiAoaGVhZGxlc3NTYWZlKSB7DQorCQkJaWYgKCFsaXN0ZW5lcnNTeW5jSGVhZGxlc3MuY29udGFpbnMobGlzdGVuZXIpKSB7DQorCQkJCWxpc3RlbmVyc1N5bmNIZWFkbGVzcy5hZGQobGlzdGVuZXIpOw0KKwkJCX0NCisJCQkNCisJCX0gZWxzZSB7DQorCQkJaWYgKCFsaXN0ZW5lcnNTeW5jLmNvbnRhaW5zKGxpc3RlbmVyKSkgew0KKwkJCQlsaXN0ZW5lcnNTeW5jLmFkZChsaXN0ZW5lcik7DQorCQkJfQ0KKwkJfQ0KKwkJDQorCX0NCisJDQorCQ0KKwkvKioNCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmpvYnMuc2ltdWxhdGlvbi5JU2ltdWxhdGlvbiNhZGRTaW11bGF0aW9uTGlzdGVuZXJTeW5jKG9yZy5lY2xpcHNlLnN0ZW0uam9icy5zaW11bGF0aW9uLklTaW11bGF0aW9uTGlzdGVuZXJTeW5jKQ0KKwkgKi8NCisJcHVibGljIHZvaWQgYWRkU2ltdWxhdGlvbkxpc3RlbmVyU3luYyhmaW5hbCBJU2ltdWxhdGlvbkxpc3RlbmVyU3luYyBsaXN0ZW5lcikgew0KKwkJYWRkU2ltdWxhdGlvbkxpc3RlbmVyU3luYyhsaXN0ZW5lciwgZmFsc2UpOw0KKwl9IC8vIGFkZFNpbXVsYXRpb25MaXN0ZW5lclN5bmMNCisNCisJLyoqDQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5qb2JzLnNpbXVsYXRpb24uSVNpbXVsYXRpb24jcmVtb3ZlU2ltdWxhdGlvbkxpc3RlbmVyKG9yZy5lY2xpcHNlLnN0ZW0uam9icy5zaW11bGF0aW9uLklTaW11bGF0aW9uTGlzdGVuZXIpDQorCSAqLw0KKwlwdWJsaWMgdm9pZCByZW1vdmVTaW11bGF0aW9uTGlzdGVuZXIoZmluYWwgSVNpbXVsYXRpb25MaXN0ZW5lciBsaXN0ZW5lcikgew0KKwkJbGlzdGVuZXJzLnJlbW92ZShsaXN0ZW5lcik7DQorCQlsaXN0ZW5lcnNIZWFkbGVzcy5yZW1vdmUobGlzdGVuZXIpOw0KKwl9IC8vIHJlbW92ZVNpbXVsYXRpb25MaXN0ZW5lcg0KKw0KKwkvKioNCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmpvYnMuc2ltdWxhdGlvbi5JU2ltdWxhdGlvbiNyZW1vdmVTaW11bGF0aW9uTGlzdGVuZXJTeW5jKG9yZy5lY2xpcHNlLnN0ZW0uam9icy5zaW11bGF0aW9uLklTaW11bGF0aW9uTGlzdGVuZXJTeW5jKQ0KKwkgKi8NCisJcHVibGljIHZvaWQgcmVtb3ZlU2ltdWxhdGlvbkxpc3RlbmVyU3luYygNCisJCQlmaW5hbCBJU2ltdWxhdGlvbkxpc3RlbmVyU3luYyBsaXN0ZW5lcikgew0KKwkJbGlzdGVuZXJzU3luYy5yZW1vdmUobGlzdGVuZXIpOw0KKwkJbGlzdGVuZXJzU3luY0hlYWRsZXNzLnJlbW92ZShsaXN0ZW5lcik7DQorCX0gLy8gcmVtb3ZlU2ltdWxhdGlvbkxpc3RlbmVyU3luYw0KKw0KKwkvKioNCisJICogVGVsbCB0aGUgbGlzdGVuZXJzIGFib3V0IHRoZSBjaGFuZ2UgaW4gdGhlIHtAbGluayBTaW11bGF0aW9ufSdzIHN0YXRlDQorCSAqIA0KKwkgKiBAcGFyYW0gc2ltdWxhdGlvblN0YXRlDQorCSAqICAgICAgICAgICAgdGhlIG5ldyB7QGxpbmsgU2ltdWxhdGlvblN0YXRlfSBvZiB0aGUge0BsaW5rIFNpbXVsYXRpb259DQorCSAqLw0KKwlwcml2YXRlIHZvaWQgZmlyZVNpbXVsYXRpb25DaGFuZ2VkKGZpbmFsIFNpbXVsYXRpb25TdGF0ZSBzaW11bGF0aW9uU3RhdGUpIHsNCisJCWZpbmFsIFNpbXVsYXRpb25FdmVudCBldmVudCA9IG5ldyBTaW11bGF0aW9uRXZlbnQodGhpcywgc2ltdWxhdGlvblN0YXRlKTsNCisJCWZpcmVTaW11bGF0aW9uQ2hhbmdlZEV2ZW50KGV2ZW50KTsNCisJfSAvLyBmaXJlU2ltdWxhdGlvbk1hbmFnZXJDaGFuZ2VkDQorDQorCS8qKg0KKwkgKiBUZWxsIHRoZSBsaXN0ZW5lcnMgYWJvdXQgdGhlIGNoYW5nZSBpbiB0aGUge0BsaW5rIFNpbXVsYXRpb259J3Mgc3RhdGUNCisJICogDQorCSAqIEBwYXJhbSBzaW11bGF0aW9uU3RhdGUNCisJICogICAgICAgICAgICB0aGUgbmV3IHtAbGluayBTaW11bGF0aW9uU3RhdGV9IG9mIHRoZSB7QGxpbmsgU2ltdWxhdGlvbn0NCisJICovDQorCXZvaWQgZmlyZVNpbXVsYXRpb25DaGFuZ2VkRXZlbnQoZmluYWwgU2ltdWxhdGlvbkV2ZW50IGV2ZW50KSANCisJew0KKwkJZm9yIChmaW5hbCBJU2ltdWxhdGlvbkxpc3RlbmVyIGxpc3RlbmVyIDogbGlzdGVuZXJzKSB7DQorCQkJZXhlY3V0ZUFzeW5jRXZlbnQobGlzdGVuZXIsIGV2ZW50LCBmYWxzZSk7DQorCQl9IC8vIGZvcg0KKwkJDQorCQlmb3IgKGZpbmFsIElTaW11bGF0aW9uTGlzdGVuZXIgbGlzdGVuZXIgOiBsaXN0ZW5lcnNIZWFkbGVzcykgew0KKwkJCWV4ZWN1dGVBc3luY0V2ZW50KGxpc3RlbmVyLCBldmVudCwgdHJ1ZSk7DQorCQl9IC8vIGZvcg0KKwkJDQorCQlmb3IgKGZpbmFsIElTaW11bGF0aW9uTGlzdGVuZXJTeW5jIGxpc3RlbmVyIDogbGlzdGVuZXJzU3luYykgew0KKwkJCWV4ZWN1dGVTeW5jRXZlbnQobGlzdGVuZXIsIGV2ZW50LCBmYWxzZSk7DQorCQl9IC8vIGZvcg0KKwkJDQorCQlmb3IgKGZpbmFsIElTaW11bGF0aW9uTGlzdGVuZXJTeW5jIGxpc3RlbmVyIDogbGlzdGVuZXJzU3luY0hlYWRsZXNzKSB7DQorCQkJZXhlY3V0ZVN5bmNFdmVudChsaXN0ZW5lciwgZXZlbnQsIHRydWUpOw0KKwkJfSAvLyBmb3INCisNCisNCisJfSAvLyBmaXJlU2ltdWxhdGlvbk1hbmFnZXJDaGFuZ2VkDQorCQ0KKwkNCisJLyoqDQorCSAqIEBwYXJhbSBsaXN0ZW5lcg0KKwkgKiBAcGFyYW0gZXZlbnQNCisJICogQHBhcmFtIGhlYWRsZXNzU2FmZQ0KKwkgKi8NCisJcHJpdmF0ZSB2b2lkIGV4ZWN1dGVBc3luY0V2ZW50KGZpbmFsIElTaW11bGF0aW9uTGlzdGVuZXIgbGlzdGVuZXIsIGZpbmFsIFNpbXVsYXRpb25FdmVudCBldmVudCwgZmluYWwgYm9vbGVhbiBoZWFkbGVzc1NhZmUpDQorCXsNCisJCURpc3BsYXlTYWZlRXhlY3V0b3IuZXhlY3V0ZUFzeW5jKG5ldyBSdW5uYWJsZSgpIHsNCisJCQlwdWJsaWMgdm9pZCBydW4oKQ0KKwkJCXsNCisJCQkJbGlzdGVuZXIuc2ltdWxhdGlvbkNoYW5nZWQoZXZlbnQpOw0KKwkJCX0NCisJCX0sIGhlYWRsZXNzU2FmZSk7DQorCX0NCisJDQorCS8qKg0KKwkgKiBAcGFyYW0gbGlzdGVuZXINCisJICogQHBhcmFtIGV2ZW50DQorCSAqIEBwYXJhbSBoZWFkbGVzc1NhZmUNCisJICovDQorCXByaXZhdGUgdm9pZCBleGVjdXRlU3luY0V2ZW50KGZpbmFsIElTaW11bGF0aW9uTGlzdGVuZXJTeW5jIGxpc3RlbmVyLCBmaW5hbCBTaW11bGF0aW9uRXZlbnQgZXZlbnQsIGZpbmFsIGJvb2xlYW4gaGVhZGxlc3NTYWZlKQ0KKwl7DQorCQlEaXNwbGF5U2FmZUV4ZWN1dG9yLmV4ZWN1dGVTeW5jKG5ldyBSdW5uYWJsZSgpIHsNCisJCQlwdWJsaWMgdm9pZCBydW4oKQ0KKwkJCXsNCisJCQkJbGlzdGVuZXIuc2ltdWxhdGlvbkNoYW5nZWRTeW5jKGV2ZW50KTsNCisJCQl9DQorCQl9LCBoZWFkbGVzc1NhZmUpOw0KKwl9DQorCQ0KKwkNCisNCisJLyoqDQorCSAqIEBzZWUgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlByZWZlcmVuY2VzLklQcm9wZXJ0eUNoYW5nZUxpc3RlbmVyI3Byb3BlcnR5Q2hhbmdlKG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QcmVmZXJlbmNlcy5Qcm9wZXJ0eUNoYW5nZUV2ZW50KQ0KKwkgKi8NCisJcHVibGljIHZvaWQgcHJvcGVydHlDaGFuZ2UoQFN1cHByZXNzV2FybmluZ3MoInVudXNlZCIpIGZpbmFsIFByb3BlcnR5Q2hhbmdlRXZlbnQgZXZlbnQpIHsNCisJCXNldFByZWZlcmVuY2VzKCk7DQorCX0gLy8gcHJvcGVydHlDaGFuZ2UNCisNCisJLyoqDQorCSAqIEByZXR1cm4gdGhlIHRpdGxlIG9mIHRoZSB7QGxpbmsgU2NlbmFyaW99DQorCSAqLw0KKwlAT3ZlcnJpZGUNCisJcHVibGljIFN0cmluZyB0b1N0cmluZygpIHsNCisJCXJldHVybiBzY2VuYXJpby5wcm9kdWNlVGl0bGUoKTsNCisJfQ0KKw0KKwkvKioNCisJICogaW50ZXJydXB0UmVxdWVzdGVkLiBSZXR1cm4gdHJ1ZSBpZiB0aGlzIGxpc3RlbmVyIHJlcXVlc3RzIA0KKwkgKiB0aGF0IGEgZGVjb3JhdG9yIHN0b3BzIHVwZGF0aW5nIGxhYmVscw0KKwkgKiANCisJICogQHJldHVybiBib29sZWFuIFRydWUgaWYgc3RvcA0KKwkgKi8NCisNCisJcHVibGljIGJvb2xlYW4gaW50ZXJydXB0UmVxdWVzdGVkKCkgew0KKwkJcmV0dXJuICghdGhpcy5rZWVwUnVubmluZyAmJiBzdG9wcGluZyk7DQorCX0NCisNCisJcHVibGljIHZvaWQgZGVzdHJveSgpIHsNCisJCUxpc3Q8SVNpbXVsYXRpb25MaXN0ZW5lcj4gdGVtcExpc3QgPSBuZXcgQXJyYXlMaXN0PElTaW11bGF0aW9uTGlzdGVuZXI+KCk7DQorCQl0ZW1wTGlzdC5hZGRBbGwobGlzdGVuZXJzKTsNCisJCWZvciAoSVNpbXVsYXRpb25MaXN0ZW5lciBsaXN0ZW5lcjp0ZW1wTGlzdCkgew0KKwkJCXRoaXMucmVtb3ZlU2ltdWxhdGlvbkxpc3RlbmVyKGxpc3RlbmVyKTsNCisJCX0NCisJCWxpc3RlbmVycy5jbGVhcigpOw0KKwkJTGlzdDxJU2ltdWxhdGlvbkxpc3RlbmVyU3luYz4gdGVtcExpc3RTeW5jID0gbmV3IEFycmF5TGlzdDxJU2ltdWxhdGlvbkxpc3RlbmVyU3luYz4oKTsNCisJCXRlbXBMaXN0U3luYy5hZGRBbGwobGlzdGVuZXJzU3luYyk7DQorCQlmb3IgKElTaW11bGF0aW9uTGlzdGVuZXJTeW5jIGxpc3RlbmVyOnRlbXBMaXN0U3luYykgew0KKwkJCXRoaXMucmVtb3ZlU2ltdWxhdGlvbkxpc3RlbmVyU3luYyhsaXN0ZW5lcik7DQorCQl9DQorCQlsaXN0ZW5lcnNTeW5jLmNsZWFyKCk7DQorCQl0ZW1wTGlzdC5jbGVhcigpOw0KKwkJdGVtcExpc3RTeW5jLmNsZWFyKCk7DQorDQorCQlzY2VuYXJpby5lQWRhcHRlcnMoKS5yZW1vdmUoYWRhcHRlcik7DQorDQorCQlBY3RpdmF0b3IuZ2V0RGVmYXVsdCgpLmdldFBsdWdpblByZWZlcmVuY2VzKCkucmVtb3ZlUHJvcGVydHlDaGFuZ2VMaXN0ZW5lcih0aGlzKTsNCisJfQ0KKw0KKwlwcml2YXRlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zb2x2ZXIuU29sdmVyIFtdIGdldFNvbHZlcnMoKSB7DQorCQlTb2x2ZXIgW10gc29sdmVyczsNCisJCWZpbmFsIElFeHRlbnNpb25SZWdpc3RyeSByZWdpc3RyeSA9IFBsYXRmb3JtLmdldEV4dGVuc2lvblJlZ2lzdHJ5KCk7DQorCQlmaW5hbCBJQ29uZmlndXJhdGlvbkVsZW1lbnRbXSBzb2x2ZXJDb25maWdFbGVtZW50cyA9IHJlZ2lzdHJ5DQorCQkuZ2V0Q29uZmlndXJhdGlvbkVsZW1lbnRzRm9yKG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5Db25zdGFudHMuSURfU09MVkVSX0VYVEVOU0lPTl9QT0lOVCk7DQorDQorCQlmaW5hbCBMaXN0PFNvbHZlcj4gdGVtcCA9IG5ldyBBcnJheUxpc3Q8U29sdmVyPigpOw0KKw0KKwkJLy9zb2x2ZXJzID0gbmV3IFNvbHZlcltzb2x2ZXJDb25maWdFbGVtZW50cy5sZW5ndGhdOw0KKw0KKwkJZm9yIChpbnQgaSA9IDA7IGkgPCBzb2x2ZXJDb25maWdFbGVtZW50cy5sZW5ndGg7IGkrKykgew0KKwkJCWZpbmFsIElDb25maWd1cmF0aW9uRWxlbWVudCBlbGVtZW50ID0gc29sdmVyQ29uZmlnRWxlbWVudHNbaV07DQorCQkJLy8gRG9lcyB0aGUgZWxlbWVudCBzcGVjaWZ5IHRoZSBjbGFzcyBvZiB0aGUgZGlzZWFzZSBtb2RlbD8NCisJCQlpZiAoZWxlbWVudC5nZXROYW1lKCkuZXF1YWxzKENvbnN0YW50cy5TT0xWRVJfRUxFTUVOVCkpIHsNCisJCQkJLy8gWWVzDQorCQkJCXRyeSB7DQorCQkJCQl0ZW1wLmFkZCgoU29sdmVyKSBlbGVtZW50DQorCQkJCQkJCS5jcmVhdGVFeGVjdXRhYmxlRXh0ZW5zaW9uKCJjbGFzcyIpKTsgLy8kTk9OLU5MUy0xJA0KKwkJCQl9IGNhdGNoIChmaW5hbCBFeGNlcHRpb24gZSkgew0KKwkJCQkJQ29yZVBsdWdpbi5sb2dFcnJvcigNCisJCQkJCQkJIkNhbid0IGNyZWF0ZSBzb2x2ZXIiLCBlKTsgLy8kTk9OLU5MUy0xJA0KKwkJCQl9DQorCQkJfSAvLyBpZg0KKwkJfSAvLyBmb3IgZWFjaCBjb25maWd1cmF0aW9uIGVsZW1lbnQNCisNCisJCXNvbHZlcnMgPSB0ZW1wLnRvQXJyYXkobmV3IFNvbHZlcltdIHt9KTsNCisNCisJCXJldHVybiBzb2x2ZXJzOw0KKwl9DQorDQorDQorfSAvLyBTaW11bGF0aW9uDQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmpvYnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vam9icy9zaW11bGF0aW9uL1NpbXVsYXRpb25DYWNoaW5nLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uam9icy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9qb2JzL3NpbXVsYXRpb24vU2ltdWxhdGlvbkNhY2hpbmcuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZjhmZmYzCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmpvYnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vam9icy9zaW11bGF0aW9uL1NpbXVsYXRpb25DYWNoaW5nLmphdmEKQEAgLTAsMCArMSwxMDAgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5qb2JzLnNpbXVsYXRpb247CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgamF2YS51dGlsLk1hcDsKK2ltcG9ydCBqYXZhLnV0aWwuV2Vha0hhc2hNYXA7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUHJlZmVyZW5jZXM7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlByZWZlcmVuY2VzLklQcm9wZXJ0eUNoYW5nZUxpc3RlbmVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QcmVmZXJlbmNlcy5Qcm9wZXJ0eUNoYW5nZUV2ZW50OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5VUkk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNjZW5hcmlvLlNjZW5hcmlvOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uam9icy5BY3RpdmF0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5qb2JzLnByZWZlcmVuY2VzLlByZWZlcmVuY2VDb25zdGFudHM7CisKKy8qKgorICogVGhpcyBjbGFzcyBpbXBsZW1lbnRzIGNhY2hpbmcgb2Yge0BsaW5rIFNjZW5hcmlvfXMuCisgKiAKKyAqIFRPRE8gV2h5IGlzbid0IHRoaXMgY2FsbGVkIFNjZW5hcmlvQ2FjaGluZz8KKyAqLworcHVibGljIGNsYXNzIFNpbXVsYXRpb25DYWNoaW5nIHsKKworCS8qKgorCSAqIFNpbmdsZXRvbiBpbnN0YW5jZSBvZiBjYWNoaW5nIG1hbmFnZXIKKwkgKi8KKwlwdWJsaWMgZmluYWwgc3RhdGljIFNpbXVsYXRpb25DYWNoaW5nIElOU1RBTkNFID0gbmV3IFNpbXVsYXRpb25DYWNoaW5nKCk7CisKKwkvKioKKwkgKiBDYWNoaW5nIHVzZXMgYSB7QGxpbmsgV2Vha0hhc2hNYXB9IG9iamVjdCB0byBzdG9yZSBTY2VuYXJpb3MuIEluIHRoZQorCSAqIGZ1dHVyZSB0aGlzIGNhbiBiZSByZXBsYWNlZCB3aXRoIGEgc21hcnRlciBjYWNoaW5nIG1lY2hhbmlzbS4KKwkgKi8KKwlwcml2YXRlIGZpbmFsIE1hcDxVUkksIFNjZW5hcmlvPiBjYWNoZWRTY2VuYXJpb3MgPSBuZXcgV2Vha0hhc2hNYXA8VVJJLCBTY2VuYXJpbz4oKTsKKworCXByaXZhdGUgYm9vbGVhbiB0b1VzZUNhY2hpbmcgPSBmYWxzZTsKKworCS8qKgorCSAqIFByaXZhdGUgY29uc3RydWN0b3IgYXMgdGhpcyBpcyBhIFNpbmdsZXRvbiBvYmplY3QuCisJICovCisJcHJpdmF0ZSBTaW11bGF0aW9uQ2FjaGluZygpIHsKKwkJc2V0UHJlZmVyZW5jZXMoKTsKKworCQlBY3RpdmF0b3IuZ2V0RGVmYXVsdCgpLmdldFBsdWdpblByZWZlcmVuY2VzKCkKKwkJCQkuYWRkUHJvcGVydHlDaGFuZ2VMaXN0ZW5lcihuZXcgSVByb3BlcnR5Q2hhbmdlTGlzdGVuZXIoKSB7CisJCQkJCXB1YmxpYyB2b2lkIHByb3BlcnR5Q2hhbmdlKAorCQkJCQkJCUBTdXBwcmVzc1dhcm5pbmdzKCJ1bnVzZWQiKSBmaW5hbCBQcm9wZXJ0eUNoYW5nZUV2ZW50IGV2ZW50KSB7CisJCQkJCQlzZXRQcmVmZXJlbmNlcygpOworCQkJCQl9IC8vIHByb3BlcnR5Q2hhbmdlCisJCQkJfSAvLyBJUHJvcGVydHlDaGFuZ2VMaXN0ZW5lcgorCQkJCSk7CisJfQorCisJLyoqCisJICogQHBhcmFtIHNjZW5hcmlvVVJJCisJICogQHJldHVybiA8Y29kZT50cnVlPC9jb2RlPiBpZiB0aGUge0BsaW5rIFNjZW5hcmlvfSBpcyBpbiB0aGUgY2FjaGUKKwkgKi8KKwlwdWJsaWMgYm9vbGVhbiBpc1NjZW5hcmlvSW5DYWNoZShVUkkgc2NlbmFyaW9VUkkpIHsKKwkJcmV0dXJuIGNhY2hlZFNjZW5hcmlvcy5jb250YWluc0tleShzY2VuYXJpb1VSSSk7CisJfQorCisJLyoqCisJICogQHBhcmFtIHNjZW5hcmlvVVJJCisJICogQHJldHVybiB0aGUge0BsaW5rIFNjZW5hcmlvfSBpZGVudGlmaWVkIGJ5IHRoZSB7QGxpbmsgVVJJfSBmcm9tIHRoZQorCSAqICAgICAgICAgY2FjaGUsIG9yIDxjb2RlPm51bGw8L2NvZGU+IGlmIG5vdCBmb3VuZC4KKwkgKi8KKwlwdWJsaWMgU2NlbmFyaW8gZ2V0Q2FjaGVkU2NlbmFyaW8oVVJJIHNjZW5hcmlvVVJJKSB7CisJCXJldHVybiBjYWNoZWRTY2VuYXJpb3MuZ2V0KHNjZW5hcmlvVVJJKTsKKwl9CisKKwkvKioKKwkgKiBAcGFyYW0gc2NlbmFyaW8KKwkgKi8KKwlwdWJsaWMgdm9pZCBhZGRTY2VuYXJpb1RvQ2FjaGUoU2NlbmFyaW8gc2NlbmFyaW8pIHsKKwkJaWYgKHNjZW5hcmlvLmdldFVSSSgpID09IG51bGwpCisJCQlyZXR1cm47CisJCWNhY2hlZFNjZW5hcmlvcy5wdXQoc2NlbmFyaW8uZ2V0VVJJKCksIHNjZW5hcmlvKTsKKwl9CisKKwkvKioKKwkgKiBAcmV0dXJuIDxjb2RlPnRydWU8L2NvZGU+IGlmIGNhY2hpbmcgaXMgZW5hYmxlZC4KKwkgKi8KKwlwdWJsaWMgYm9vbGVhbiB0b1VzZUNhY2hpbmcoKSB7CisJCXJldHVybiB0b1VzZUNhY2hpbmc7CisJfQorCisJcHJvdGVjdGVkIHZvaWQgc2V0UHJlZmVyZW5jZXMoKSB7CisJCWZpbmFsIFByZWZlcmVuY2VzIHByZWZlcmVuY2VzID0gQWN0aXZhdG9yLmdldERlZmF1bHQoKQorCQkJCS5nZXRQbHVnaW5QcmVmZXJlbmNlcygpOworCQl0b1VzZUNhY2hpbmcgPSBwcmVmZXJlbmNlcworCQkJCS5nZXRCb29sZWFuKFByZWZlcmVuY2VDb25zdGFudHMuVVNFX1NDRU5BUklPU19DQUNISU5HX0JPT0xFQU4pOworCX0gLy8gc2V0UGVyZmVyZW5jZXMKK30KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5qb2JzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2pvYnMvc2ltdWxhdGlvbi9TaW11bGF0aW9uRXZlbnQuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5qb2JzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2pvYnMvc2ltdWxhdGlvbi9TaW11bGF0aW9uRXZlbnQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZDNkOGEwCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmpvYnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vam9icy9zaW11bGF0aW9uL1NpbXVsYXRpb25FdmVudC5qYXZhCkBAIC0wLDAgKzEsOTEgQEAKKy8vIFNpbXVsYXRpb25FdmVudC5qYXZhCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uam9icy5zaW11bGF0aW9uOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGphdmEudXRpbC5FdmVudE9iamVjdDsKKworCisvKioKKyAqIFRoaXMgY2xhc3MgcmVwcmVzZW50cyBhbiBldmVudCB0aGF0IGhhcyBvY2N1cnJlZCBpbiB0aGUgb3BlcmF0aW9uIG9mIHRoZQorICogU2ltdWxhdGlvbgorICovCitwdWJsaWMgY2xhc3MgU2ltdWxhdGlvbkV2ZW50IGV4dGVuZHMgRXZlbnRPYmplY3QgeworCisJcHJpdmF0ZSBTaW11bGF0aW9uU3RhdGUgc2ltdWxhdGlvblN0YXRlOworCXByaXZhdGUgZG91YmxlIGl0ZXJhdGlvblByb2dyZXNzID0gMC4wOworCQorCS8qKgorCSAqIEBwYXJhbSBzb3VyY2UKKwkgKiAgICAgICAgICAgIHRoZSBTaW11bGF0aW9uIHRoZSBnZW5lcmF0ZWQgdGhlIGV2ZW50CisJICogQHBhcmFtIHNpbXVsYXRpb25TdGF0ZQorCSAqICAgICAgICAgICAgdGhlIG5ldyBzdGF0ZSBvZiB0aGUgc2ltdWxhdGlvbgorCSAqLworCXB1YmxpYyBTaW11bGF0aW9uRXZlbnQoSVNpbXVsYXRpb24gc291cmNlLAorCQkJZmluYWwgU2ltdWxhdGlvblN0YXRlIHNpbXVsYXRpb25TdGF0ZSkgeworCQlzdXBlcihzb3VyY2UpOworCQl0aGlzLnNpbXVsYXRpb25TdGF0ZSA9IHNpbXVsYXRpb25TdGF0ZTsKKwkJdGhpcy5pdGVyYXRpb25Qcm9ncmVzcyA9IDAuMDsKKwl9IC8vIFNpbXVsYXRpb25FdmVudAorCisJLyoqCisJICogQHBhcmFtIHNvdXJjZQorCSAqICAgICAgICAgICAgdGhlIFNpbXVsYXRpb24gdGhlIGdlbmVyYXRlZCB0aGUgZXZlbnQKKwkgKiBAcGFyYW0gc2ltdWxhdGlvblN0YXRlCisJICogICAgICAgICAgICB0aGUgbmV3IHN0YXRlIG9mIHRoZSBzaW11bGF0aW9uCisJICogQHBhcmFtIGlwcm9ncmVzcyBJdGVyYXRpb24gcHJvZ3Jlc3MKKwkgKi8KKwlwdWJsaWMgU2ltdWxhdGlvbkV2ZW50KElTaW11bGF0aW9uIHNvdXJjZSwKKwkJCWZpbmFsIFNpbXVsYXRpb25TdGF0ZSBzaW11bGF0aW9uU3RhdGUsIAorCQkJZG91YmxlIGlwcm9ncmVzcykgeworCQlzdXBlcihzb3VyY2UpOworCQl0aGlzLnNpbXVsYXRpb25TdGF0ZSA9IHNpbXVsYXRpb25TdGF0ZTsKKwkJdGhpcy5pdGVyYXRpb25Qcm9ncmVzcyA9IGlwcm9ncmVzczsKKwl9IC8vIFNpbXVsYXRpb25FdmVudAorCQorCS8qKgorCSAqIEdlbmVyYXRlZCBzZXJpYWxpemF0aW9uIElECisJICovCisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgbG9uZyBzZXJpYWxWZXJzaW9uVUlEID0gNzUxMjg2ODk1NTg0MTk2MjMzMUw7CisKKwkvKioKKwkgKiBAcmV0dXJuIHRoZSBuZXcgc3RhdGUgb2YgdGhlIHNpbXVsYXRpb24KKwkgKi8KKwlwdWJsaWMgZmluYWwgU2ltdWxhdGlvblN0YXRlIGdldFNpbXVsYXRpb25TdGF0ZSgpIHsKKwkJcmV0dXJuIHNpbXVsYXRpb25TdGF0ZTsKKwl9CisKKwkvKioKKwkgKiBAcmV0dXJuIHRoZSBzaW11bGF0aW9uIHRoYXQgaXMgdGhlIHNvdXJjZSBvZiB0aGUgZXZlbnQKKwkgKi8KKwlwdWJsaWMgSVNpbXVsYXRpb24gZ2V0U2ltdWxhdGlvbigpIHsKKwkJcmV0dXJuIChJU2ltdWxhdGlvbikgZ2V0U291cmNlKCk7CisJfQorCisJLyoqCisJICogQHJldHVybiBkb3VibGUgVGhlIHByb2dyZXNzIG9mIHRoZSBjdXJyZW50IGl0ZXJhdGlvbiAoMC0xKQorCSAqLworCXB1YmxpYyBkb3VibGUgZ2V0SXRlcmF0aW9uUHJvZ3Jlc3MoKSB7CisJCXJldHVybiBpdGVyYXRpb25Qcm9ncmVzczsKKwl9CisJCisJLyoqCisJICogQHNlZSBqYXZhLnV0aWwuRXZlbnRPYmplY3QjdG9TdHJpbmcoKQorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKSB7CisJCXJldHVybiBzaW11bGF0aW9uU3RhdGUudG9TdHJpbmcoKTsKKwl9CisJCisJCisKK30gLy8gU2ltdWxhdGlvbkV2ZW50CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uam9icy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9qb2JzL3NpbXVsYXRpb24vU2ltdWxhdGlvbk1hbmFnZXIuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5qb2JzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2pvYnMvc2ltdWxhdGlvbi9TaW11bGF0aW9uTWFuYWdlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ3NmE2OWEKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uam9icy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9qb2JzL3NpbXVsYXRpb24vU2ltdWxhdGlvbk1hbmFnZXIuamF2YQpAQCAtMCwwICsxLDkxOSBAQAorLy8gU2ltdWxhdGlvbk1hbmFnZXIuamF2YQorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmpvYnMuc2ltdWxhdGlvbjsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNiwgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqYXZhLnRleHQuTWVzc2FnZUZvcm1hdDsKK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OworaW1wb3J0IGphdmEudXRpbC5MaXN0OworaW1wb3J0IGphdmEudXRpbC5jb25jdXJyZW50LkNvcHlPbldyaXRlQXJyYXlMaXN0OworCitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklDb25maWd1cmF0aW9uRWxlbWVudDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVByb2dyZXNzTW9uaXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUHJlZmVyZW5jZXM7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlN0YXR1czsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuam9icy5Kb2I7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlVSSTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUucmVzb3VyY2UuUmVzb3VyY2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnhtaS5pbXBsLlhNSVJlc291cmNlRmFjdG9yeUltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLlV0aWxpdHk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5EdWJsaW5Db3JlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5HcmFwaDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguR3JhcGhGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5HcmFwaFBhcnRpdGlvbmVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zY2VuYXJpby5TY2VuYXJpbzsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2NlbmFyaW8uU2NlbmFyaW9QYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uam9icy5BY3RpdmF0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5qb2JzLkRpc3BsYXlTYWZlRXhlY3V0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5qb2JzLmV4ZWN1dGlvbi5FeGVjdXRhYmxlTWFuYWdlcjsKKworLyoqCisgKiBUaGlzIGNsYXNzIG1hbmFnZXMgdGhlIGxpZmUtY3ljbGUgb2YgYWN0aXZlIHtAbGluayBTaW11bGF0aW9ufXMuIFRoZXJlIGlzIGEKKyAqIHNpbmdsZXRvbiBpbnN0YW5jZSBvZiB0aGUgbWFuYWdlciB0aGF0IGlzIHJlZmVyZW5jZWQgYnkgb3RoZXIgcGFydHMgb2YgdGhlCisgKiBzeXN0ZW0gdG8gbWFuYWdlIHtAbGluayBTaW11bGF0aW9ufS4gSXQgY3JlYXRlcyB7QGxpbmsgU2ltdWxhdGlvbn0gaW5zdGFuY2VzCisgKiBmcm9tIHtAbGluayBTY2VuYXJpb30gaW5zdGFuY2VzIGFuZCBjYW4gb2J0YWluIHtAbGluayBTY2VuYXJpb30gaW5zdGFuY2VzCisgKiBmcm9tIGZpbGUgVVJJJ3Mgb3IgZnJvbSB7QGxpbmsgSUNvbmZpZ3VyYXRpb25FbGVtZW50fSdzLiBJdCBtYWludGFpbnMgYQorICogY29sbGVjdGlvbiBvZiBhbGwgb2YgdGhlIGFjdGl2ZSB7QGxpbmsgU2ltdWxhdGlvbn1zIGluIHRoZSBzeXN0ZW0gYW5kCisgKiBnZW5lcmF0ZXMge0BsaW5rIFNpbXVsYXRpb25FdmVudH0ncyB3aGVuZXZlciBhIHtAbGluayBTaW11bGF0aW9ufSBpcyBhZGRlZCB0bworICogdGhhdCBjb2xsZWN0aW9uIG9yIHJlbW92ZWQuCisgKiA8cD4KKyAqIFRoZSB7QGxpbmsgU2ltdWxhdGlvbk1hbmFnZXJ9IG1haW50YWlucyBhIHNlcXVlbmNlIG51bWJlciBhbmQgYXNzaWducworICogc3VjY2Vzc2l2ZSB2YWx1ZXMgb2YgdGhhdCBudW1iZXIgdG8gdGhlIHtAbGluayBTaW11bGF0aW9ufSBpbnN0YW5jZXMgaXQKKyAqIGNyZWF0ZXMuCisgKi8KK3B1YmxpYyBjbGFzcyBTaW11bGF0aW9uTWFuYWdlciBleHRlbmRzIEV4ZWN1dGFibGVNYW5hZ2VyIGltcGxlbWVudHMKKwkJSVNpbXVsYXRpb25MaXN0ZW5lciB7CisKKwkvKioKKwkgKiBTaW5nbGV0b24gaW5zdGFuY2Ugb2YgdGhlIG1hbmFnZXIKKwkgKi8KKwlwcml2YXRlIHN0YXRpYyB2b2xhdGlsZSBTaW11bGF0aW9uTWFuYWdlciBJTlNUQU5DRSA9IG51bGw7CisKKwkvKioKKwkgKiBUaGlzIGlzIHRoZSBzZXF1ZW5jZSBudW1iZXIgYXNzaWduZWQgdG8gZWFjaCBzdWNjZXNzaXZlCisJICoge0BsaW5rIFNpbXVsYXRpb259IGluc3RhbmNlIHRoZSBtYW5hZ2VyIGNyZWF0ZXMuCisJICovCisJcHJpdmF0ZSBzdGF0aWMgaW50IHNlcXVlbmNlTnVtYmVyID0gMDsKKworCS8qKgorCSAqIFRoZSBjb2xsZWN0aW9uIG9mIHtAbGluayBJU2ltdWxhdGlvbk1hbmFnZXJMaXN0ZW5lcn0ncyB3YWl0aW5nIHRvIGJlIHRvbGQKKwkgKiBhYm91dCB7QGxpbmsgU2ltdWxhdGlvbk1hbmFnZXJFdmVudH1zCisJICovCisJcHJpdmF0ZSBmaW5hbCBMaXN0PElTaW11bGF0aW9uTWFuYWdlckxpc3RlbmVyPiBsaXN0ZW5lcnMgPSBuZXcgQ29weU9uV3JpdGVBcnJheUxpc3Q8SVNpbXVsYXRpb25NYW5hZ2VyTGlzdGVuZXI+KCk7CisKKwkvKioKKwkgKiBUaGUgY29sbGVjdGlvbiBvZiB7QGxpbmsgSVNpbXVsYXRpb25NYW5hZ2VyTGlzdGVuZXJTeW5jfSdzIHdhaXRpbmcgdG8gYmUKKwkgKiB0b2xkIGFib3V0IHtAbGluayBTaW11bGF0aW9uTWFuYWdlckV2ZW50fXMKKwkgKi8KKwlwcml2YXRlIGZpbmFsIExpc3Q8SVNpbXVsYXRpb25NYW5hZ2VyTGlzdGVuZXJTeW5jPiBsaXN0ZW5lcnNTeW5jID0gbmV3IENvcHlPbldyaXRlQXJyYXlMaXN0PElTaW11bGF0aW9uTWFuYWdlckxpc3RlbmVyU3luYz4oKTsKKworCS8qKgorCSAqIENvbnN0YW50IGVtcHR5IGFycmF5LgorCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgSVNpbXVsYXRpb25bXSBOT05FID0gbmV3IFNpbXVsYXRpb25bXSB7fTsKKworCS8qKgorCSAqIFRoaXMgaXMgdGhlIGNvbGxlY3Rpb24gb2YgYWN0aXZlIHtAbGluayBTaW11bGF0aW9ufSBqb2JzCisJICovCisJcHJpdmF0ZSBMaXN0PElTaW11bGF0aW9uPiBhY3RpdmVTaW11bGF0aW9ucyA9IG51bGw7CisKKwkvKioKKwkgKiBUaGUgZ3JhcGggcGFydGl0aW9uZXIgdXNlZCB0byBkaXZpZGUgdXAgdGhlIGdyYXBoIGFtb25nZSB3b3JrZXIgdGhyZWFkcyBhbmQgbm9kZXMgCisJICovCisJCisJcHJpdmF0ZSBHcmFwaFBhcnRpdGlvbmVyIHBhcnRpdGlvbmVyOworCQorCS8qKgorCSAqIENvbnN0cnVjdG9yCisJICovCisJcHJpdmF0ZSBTaW11bGF0aW9uTWFuYWdlcigpIHsKKwkJYWN0aXZlU2ltdWxhdGlvbnMgPSBuZXcgQXJyYXlMaXN0PElTaW11bGF0aW9uPigpOworCisJCVJlc291cmNlLkZhY3RvcnkuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RXh0ZW5zaW9uVG9GYWN0b3J5TWFwKCkucHV0KAorCQkJCVNjZW5hcmlvUGFja2FnZS5lTkFNRSwgbmV3IFhNSVJlc291cmNlRmFjdG9yeUltcGwoKSk7CisJCQorCQkvLyBPdmVycmlkZSB1c2luZyBzZXRHcmFwaFBhcnRpdGlvbmVyIGlmIG5lZWRlZAorCQlwYXJ0aXRpb25lciA9IEdyYXBoRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlU2ltcGxlR3JhcGhQYXJ0aXRpb25lcigpOworCX0gLy8gU2ltdWxhdGlvbk1hbmFnZXIKKworCS8qKgorCSAqIEByZXR1cm4gdGhlIHNpbmdsZXRvbiBpbnN0YW5jZSBvZiB0aGUgbW9kZWwKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIFNpbXVsYXRpb25NYW5hZ2VyIGdldE1hbmFnZXIoKSB7CisJCWlmIChJTlNUQU5DRSA9PSBudWxsKSB7CisJCQlzeW5jaHJvbml6ZWQgKFNpbXVsYXRpb25NYW5hZ2VyLmNsYXNzKSB7CisJCQkJaWYgKElOU1RBTkNFID09IG51bGwpIHsKKwkJCQkJSU5TVEFOQ0UgPSBuZXcgU2ltdWxhdGlvbk1hbmFnZXIoKTsKKwkJCQl9CisJCQl9CisJCX0KKwkJcmV0dXJuIElOU1RBTkNFOworCX0gLy8gZ2V0TW9kZWwKKworCS8qKgorCSAqIFJldHVybiB0aGUgbmV4dCBzaW11bGF0aW9uIHNlcXVlbmNlIG51bWJlciBhbmQgaW5jcmVtZW50IHRoZSB2YWx1ZS4KKwkgKiAKKwkgKiBAcmV0dXJuIHRoZSBuZXh0IHNpbXVsYXRpb24gc2VxdWVuY2UgbnVtYmVyCisJICovCisJc3luY2hyb25pemVkIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBnZXRBbmRJbmNyZW1lbnRTaW11bGF0aW9uU2VxdWVuY2VOdW1iZXIoKSB7CisJCXJldHVybiBzZXF1ZW5jZU51bWJlcisrOworCX0gLy8gZ2V0QW5kSW5jcmVtZW50U2ltdWxhdGlvblNlcXVlbmNlTnVtYmVyCisKKwkvKioKKwkgKiBUaGlzIGlzIHVzZWQgZm9yIHRlc3RpbmcgcHVycG9zZXMgdG8gcmVzZXQgdGhlIHN0YXRlIG9mIHRoZSBtb2RlbC4KKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIHZvaWQgcmVzZXRTaW11bGF0aW9uTWFuYWdlcigpIHsKKwkJSU5TVEFOQ0UgPSBudWxsOworCQlzZXF1ZW5jZU51bWJlciA9IDA7CisJfSAvLyByZXNldFNpbXVsYXRpb25NYW5hZ2VyCisKKwkvKioKKwkgKiBAcmV0dXJuIHRoZSBhY3RpdmUge0BsaW5rIFNpbXVsYXRpb259cworCSAqLworCXB1YmxpYyBmaW5hbCBMaXN0PElTaW11bGF0aW9uPiBnZXRBY3RpdmVTaW11bGF0aW9ucygpIHsKKwkJcmV0dXJuIGFjdGl2ZVNpbXVsYXRpb25zOworCX0gLy8gZ2V0QWN0aXZlU2ltdWxhdGlvbnMKKworCS8qKgorCSAqIHNldEdyYXBoUGFydGl0aW9uZXIKKwkgKiAKKwkgKiBAcGFyYW0gcCBUaGUgcGFydGl0aW9uZXIKKwkgKi8KKwkKKwlwdWJsaWMgdm9pZCBzZXRHcmFwaFBhcnRpdGlvbmVyKEdyYXBoUGFydGl0aW9uZXIgcCkgeworCQl0aGlzLnBhcnRpdGlvbmVyID0gcDsKKwl9CisJCisJLyoqCisJICogZ2V0R3JhcGhQYXJ0aXRpb25lcgorCSAqIAorCSAqIEByZXR1cm4gVGhlIGdyYXBoIHBhcnRpdGlvbmVyCisJICovCisJCisJcHVibGljIEdyYXBoUGFydGl0aW9uZXIgZ2V0R3JhcGhQYXJ0aXRpb25lcigpIHsKKwkJcmV0dXJuIHRoaXMucGFydGl0aW9uZXI7CisJfQorCQorCS8qKgorCSAqIEFkZCBhIHtAbGluayBTaW11bGF0aW9ufSB0byB0aGUgY29sbGVjdGlvbiBvZiBhY3RpdmUge0BsaW5rIFNpbXVsYXRpb259cy4KKwkgKiAKKwkgKiBAcGFyYW0gc2ltdWxhdGlvbgorCSAqICAgICAgICAgICAgdGhlIHtAbGluayBJU2ltdWxhdGlvbn0gdG8gYWRkCisJICovCisJcHJpdmF0ZSBmaW5hbCB2b2lkIGFkZEFjdGl2ZVNpbXVsYXRpb24oZmluYWwgSVNpbXVsYXRpb24gc2ltdWxhdGlvbikgeworCQlhY3RpdmVTaW11bGF0aW9ucy5hZGQoc2ltdWxhdGlvbik7CisJCXNpbXVsYXRpb24uYWRkU2ltdWxhdGlvbkxpc3RlbmVyKHRoaXMpOworCQlmaXJlU2ltdWxhdGlvbk1hbmFnZXJDaGFuZ2VkKG5ldyBJU2ltdWxhdGlvbltdIHsgc2ltdWxhdGlvbiB9LCBOT05FKTsKKwl9IC8vIGFkZEFjdGl2ZVNpbXVsYXRpb24KKworCS8qKgorCSAqIFJlbW92ZSBhbiB7QGxpbmsgSVNpbXVsYXRpb259IGZyb20gdGhlIGNvbGxlY3Rpb24gb2YgYWN0aXZlCisJICoge0BsaW5rIElTaW11bGF0aW9ufXMuCisJICogCisJICogQHBhcmFtIHNpbXVsYXRpb24KKwkgKiAgICAgICAgICAgIHRoZSB7QGxpbmsgSVNpbXVsYXRpb259IHRvIHJlbW92ZQorCSAqLworCXByaXZhdGUgZmluYWwgdm9pZCByZW1vdmVBY3RpdmVTaW11bGF0aW9uKGZpbmFsIElTaW11bGF0aW9uIHNpbXVsYXRpb24pIHsKKwkJYWN0aXZlU2ltdWxhdGlvbnMucmVtb3ZlKHNpbXVsYXRpb24pOworCQkvLyBXZSdyZSBubyBsb25nZXIgYSBsaXN0ZW5lcgorCQlzaW11bGF0aW9uLnJlbW92ZVNpbXVsYXRpb25MaXN0ZW5lcih0aGlzKTsKKwkJZmlyZVNpbXVsYXRpb25NYW5hZ2VyQ2hhbmdlZChOT05FLCBuZXcgSVNpbXVsYXRpb25bXSB7IHNpbXVsYXRpb24gfSk7CisJfSAvLyByZW1vdmVBY3RpdmVTaW11bGF0aW9uCisKKwkvKioKKwkgKiBDcmVhdGUgYSB7QGxpbmsgSVNpbXVsYXRpb259IHRoYXQncyByZWFkeSB0byBydW4uCisJICogCisJICogQHBhcmFtIGNvbmZpZ3VyYXRpb25FbGVtZW50CisJICogICAgICAgICAgICBhIHtAbGluayBJQ29uZmlndXJhdGlvbkVsZW1lbnR9IHRoYXQgc3BlY2lmaWVzIHRoZSBkZXRhaWxzIG9mCisJICogICAgICAgICAgICBhIHNlcmlhbGl6ZWQge0BsaW5rIFNjZW5hcmlvfSB0aGF0IGlzIGluIGEgcGx1Zy1pbgorCSAqIEBwYXJhbSBtb25pdG9yCisJICogICAgICAgICAgICBhIHByb2dyZXNzIG1vbml0b3IKKwkgKiBAcmV0dXJuIGFuIHtAbGluayBJU2ltdWxhdGlvbn0gY29uc3RydWN0ZWQgZnJvbSB0aGUKKwkgKiAgICAgICAgIHtAbGluayBJQ29uZmlndXJhdGlvbkVsZW1lbnR9LCBvciBudWxsIGlmIHRoZXJlIHdhcyBhIHByb2JsZW0uCisJICogCisJICogQERlcHJlY2F0ZWQKKwkgKi8KKwlwdWJsaWMgSVNpbXVsYXRpb24gY3JlYXRlU2ltdWxhdGlvbigKKwkJCWZpbmFsIElDb25maWd1cmF0aW9uRWxlbWVudCBjb25maWd1cmF0aW9uRWxlbWVudCwKKwkJCWZpbmFsIElQcm9ncmVzc01vbml0b3IgbW9uaXRvcikgeworCQlJU2ltdWxhdGlvbiByZXRWYWx1ZSA9IG51bGw7CisKKwkJZmluYWwgU3RyaW5nIHNjZW5hcmlvVVJJU3RyaW5nID0gY29uZmlndXJhdGlvbkVsZW1lbnQKKwkJCQkuZ2V0QXR0cmlidXRlKER1YmxpbkNvcmUuSURFTlRJRklFUik7CisKKwkJdHJ5IHsKKwkJCXJldFZhbHVlID0gY3JlYXRlU2ltdWxhdGlvbihVUkkuY3JlYXRlVVJJKHNjZW5hcmlvVVJJU3RyaW5nKSwKKwkJCQkJbW9uaXRvcik7CisJCX0gY2F0Y2ggKGZpbmFsIEV4Y2VwdGlvbiBlKSB7CisJCQlBY3RpdmF0b3IKKwkJCQkJLmxvZ0Vycm9yKAorCQkJCQkJCU1lc3NhZ2VGb3JtYXQKKwkJCQkJCQkJCS5mb3JtYXQoCisJCQkJCQkJCQkJCU1lc3NhZ2VzCisJCQkJCQkJCQkJCQkJLmdldFN0cmluZygiU2ltTWdyLkRlc2VyaWFsaXphdGlvbl9FcnJvciIpLCBzY2VuYXJpb1VSSVN0cmluZyksIGUpOyAvLyROT04tTkxTLTEkCisJCQlyZXRWYWx1ZSA9IG51bGw7CisJCX0KKwkJcmV0dXJuIHJldFZhbHVlOworCX0gLy8gY3JlYXRlU2ltdWxhdGlvbgorCisJLyoqCisJICogQ3JlYXRlIGFuIHtAbGluayBJU2ltdWxhdGlvbn0gdGhhdCdzIHJlYWR5IHRvIHJ1bi4KKwkgKiAKKwkgKiBAcGFyYW0gc2NlbmFyaW9VUkkKKwkgKiAgICAgICAgICAgIHRoZSBVUkkgb2YgYSBzZXJpYWxpemVkIHtAbGluayBTY2VuYXJpb30KKwkgKiBAcGFyYW0gbW9uaXRvcgorCSAqICAgICAgICAgICAgYSBwcm9ncmVzcyBtb25pdG9yCisJICogQHJldHVybiBhbiB7QGxpbmsgSVNpbXVsYXRpb259IGNvbnN0cnVjdGVkIGZyb20gdGhlIFVSSSwgb3IKKwkgKiAgICAgICAgIDxjb2RlPm51bGw8L2NvZGU+IGlmIHRoZXJlIHdhcyBhIHByb2JsZW0uCisJICogICAgICAgICAKKwkgKiBARGVwcmVjYXRlZAorCSAqLworCXB1YmxpYyBJU2ltdWxhdGlvbiBjcmVhdGVTaW11bGF0aW9uKGZpbmFsIFVSSSBzY2VuYXJpb1VSSSwKKwkJCWZpbmFsIElQcm9ncmVzc01vbml0b3IgbW9uaXRvcikgeworCQlJU2ltdWxhdGlvbiByZXRWYWx1ZSA9IG51bGw7CisKKwkJCXRyeSB7CisJCQkJCisJCQkJCS8vIFJlYWQgc2NlbmFyaW8KKwkJCQltb25pdG9yLnN1YlRhc2soIlJlYWRpbmcgU2NlbmFyaW8gZnJvbSBmaWxlIik7CisJCQkJU2NlbmFyaW8gc2ltdWxhdGlvblNjZW5hcmlvID0gKFNjZW5hcmlvKVV0aWxpdHkuZ2V0SWRlbnRpZmlhYmxlKHNjZW5hcmlvVVJJKTsKKwkJCQkKKwkJCQltb25pdG9yLnN1YlRhc2soIkNyZWF0aW5nIFNpbXVsYXRpb24gZnJvbSBTY2VuYXJpbyIpOworCQkJCXJldFZhbHVlID0gY3JlYXRlU2ltdWxhdGlvbihzaW11bGF0aW9uU2NlbmFyaW8sIG1vbml0b3IpOworCQkJfSBjYXRjaCAoZmluYWwgRXhjZXB0aW9uIGUpIHsKKwkJCQlBY3RpdmF0b3IKKwkJCQkJCS5sb2dFcnJvcigKKwkJCQkJCQkJTWVzc2FnZUZvcm1hdAorCQkJCQkJCQkJCS5mb3JtYXQoCisJCQkJCQkJCQkJCQlNZXNzYWdlcworCQkJCQkJCQkJCQkJCQkuZ2V0U3RyaW5nKCJTaW1NZ3IuRGVzZXJpYWxpemF0aW9uX0Vycm9yIiksIHNjZW5hcmlvVVJJLnRvU3RyaW5nKCkpLCBlKTsgLy8kTk9OLU5MUy0xJAorCQkJcmV0VmFsdWUgPSBudWxsOworCQl9CisJCXJldHVybiByZXRWYWx1ZTsKKwl9IC8vIGNyZWF0ZVNpbXVsYXRpb24KKworCS8qKgorCSAqIENyZWF0ZSBhIHtAbGluayBJU2ltdWxhdGlvbn0gZnJvbSBhIHtAbGluayBTY2VuYXJpb30gaW5zdGFuY2UuCisJICogCisJICogQHBhcmFtIHNjZW5hcmlvCisJICogICAgICAgICAgICB0aGUge0BsaW5rIFNjZW5hcmlvfSB0byBzaW11bGF0ZQorCSAqIEBwYXJhbSBtb25pdG9yIAorCSAqIAkJCSAgUHJvZ3Jlc3MgbW9uaXRvcgorCSAqIEByZXR1cm4gYSB7QGxpbmsgSVNpbXVsYXRpb259IHRoYXQncyByZWFkeSB0byBydW4uCisJICovCisJcHVibGljIElTaW11bGF0aW9uIGNyZWF0ZVNpbXVsYXRpb24oZmluYWwgU2NlbmFyaW8gc2NlbmFyaW8sIGZpbmFsIElQcm9ncmVzc01vbml0b3IgbW9uaXRvcikgeworCQlJU2ltdWxhdGlvbiByZXRWYWx1ZSA9IG51bGw7CisJCXRyeSB7CisJCQlmaW5hbCBQcmVmZXJlbmNlcyBwcmVmZXJlbmNlcyA9IAorCQkJCW9yZy5lY2xpcHNlLnN0ZW0uam9icy5BY3RpdmF0b3IuZ2V0RGVmYXVsdCgpCisJCQkJCS5nZXRQbHVnaW5QcmVmZXJlbmNlcygpOworCQkJLy9ib29sZWFuIHVzZUNhY2hlID0gcHJlZmVyZW5jZXMKKwkJCS8vCQkuZ2V0Qm9vbGVhbihQcmVmZXJlbmNlQ29uc3RhbnRzLlVTRV9TQ0VOQVJJT1NfQ0FDSElOR19CT09MRUFOKTsKKworCQkJU2NlbmFyaW8gc2ltdWxhdGlvblNjZW5hcmlvID0gbnVsbDsKKwkJCQorLyoJU0VEIENvbW1lbnRlZCBvdXQgNy84LzEwLCBjYWNoaW5nIGRvZXNuJ3Qgd29yawkJCisgICAgIGlmICh1c2VDYWNoZSkgeworCQkJCWlmIChTaW11bGF0aW9uQ2FjaGluZy5JTlNUQU5DRS5pc1NjZW5hcmlvSW5DYWNoZShzY2VuYXJpby5nZXRVUkkoKSkpIHsKKwkJCQkJc2ltdWxhdGlvblNjZW5hcmlvID0gU2ltdWxhdGlvbkNhY2hpbmcuSU5TVEFOQ0UuZ2V0Q2FjaGVkU2NlbmFyaW8oc2NlbmFyaW8uZ2V0VVJJKCkpOworCQkJCQlib29sZWFuIHJ1bm5pbmcgPSBmYWxzZTsKKwkJCQkJZm9yKElTaW11bGF0aW9uIHNpbSA6IGdldEFjdGl2ZVNpbXVsYXRpb25zKCkpIHsKKwkJCQkJCWlmKHNpbS5nZXRTY2VuYXJpbygpLmVxdWFscyhzaW11bGF0aW9uU2NlbmFyaW8pKSB7CisJCQkJCQkJLy8gVGhlIHNjZW5hcmlvIGlzIGFscmVhZHkgcnVubmluZy4gQ29weSB0aGUgd2hvbGUgc2NlbmFyaW8gYmVmb3JlIHJlc2V0dGluZworCQkJCQkJCVNjZW5hcmlvIG5ld1NpbXVsYXRpb24gPSBudWxsOworCQkJCQkJCW5ld1NpbXVsYXRpb24gPSAoU2NlbmFyaW8pRWNvcmVVdGlsLmNvcHkoc2ltdWxhdGlvblNjZW5hcmlvKTsKKwkJCQkJCQlpZihzaW11bGF0aW9uU2NlbmFyaW8uZ2V0TW9kZWwoKSAhPSBudWxsKSBuZXdTaW11bGF0aW9uLnNldE1vZGVsKChNb2RlbClFY29yZVV0aWwuY29weShzaW11bGF0aW9uU2NlbmFyaW8uZ2V0TW9kZWwoKSkpOworCQkJCQkJCWlmKHNpbXVsYXRpb25TY2VuYXJpby5nZXRTZXF1ZW5jZXIoKSAhPSBudWxsKSBuZXdTaW11bGF0aW9uLnNldFNlcXVlbmNlcigoU2VxdWVuY2VyKUVjb3JlVXRpbC5jb3B5KHNpbXVsYXRpb25TY2VuYXJpby5nZXRTZXF1ZW5jZXIoKSkpOworCQkJCQkJCXJ1bm5pbmcgPSB0cnVlOworCQkJCQkJCWJyZWFrOworCQkJCQkJfQorCQkJCQl9CisJCQkJCWlmKCFydW5uaW5nKXNpbXVsYXRpb25TY2VuYXJpby5yZXNldCgpOyAvLyBzYWZlIHNpbmNlIGNhbm9uaWNhbCBncmFwaCBpcyBzZXQgCisJCQkJfQorCQkJCWVsc2UgeworCQkJCQkvLyBSZWFkIHNjZW5hcmlvCisJCQkJCS8vIEFkZCB0byBjYWNoZQorCQkJCQlTaW11bGF0aW9uQ2FjaGluZy5JTlNUQU5DRS5hZGRTY2VuYXJpb1RvQ2FjaGUoc2NlbmFyaW8pOworCQkJCX0KKwkJCQkKKwkJCX0KKyovCisJCQkKKwkJCWZpbmFsIFNpbXVsYXRpb24gc2ltdWxhdGlvbiA9IG5ldyBTaW11bGF0aW9uKHNjZW5hcmlvLAorCQkJCQlnZXRBbmRJbmNyZW1lbnRTaW11bGF0aW9uU2VxdWVuY2VOdW1iZXIoKSwgcGFydGl0aW9uZXIpOworCQkJCisJCQlpZihzY2VuYXJpby5nZXRDYW5vbmljYWxHcmFwaCgpID09IG51bGwpIAorCQkJCXNjZW5hcmlvLmluaXRpYWxpemUoKTsgLy8gbmVlZGVkIGZvciBwcmVmZXJlbmNlcyAuLi4KKwkJCWVsc2Ugc2NlbmFyaW8ucmVzZXQoKTsKKwkKKwkJCXNpbXVsYXRpb24uc2V0UHJpb3JpdHkoSm9iLkxPTkcpOworCQkJCisJCQkvLyBNQUQgMjAtSnVuZS0yMDExCisJCQkvLyBTaW11bGF0aW9uIEFQSSBoYXMgZGlzcGxheS1zYWZlIG9wdGlvbi4gIFNpbXVsYXRpb24gQWRhcHRlciAKKwkJCS8vIHJlbW92ZWQKKwkJCXJldFZhbHVlID0gc2ltdWxhdGlvbjsgLy9uZXcgU2ltdWxhdGlvbkFkYXB0ZXIoc2ltdWxhdGlvbik7CisKKwkJCWFkZEFjdGl2ZVNpbXVsYXRpb24ocmV0VmFsdWUpOworCQl9IGNhdGNoIChmaW5hbCBSdW50aW1lRXhjZXB0aW9uIGUpIHsKKwkJCS8vIFdlIGNvdWxkIGdldCBhbiBleGNlcHRpb24gaGVyZSBpZiB0aGUgU2NlbmFyaW8gZG9lc24ndCBoYXZlCisJCQkvLyBhIFNlcXVlbmNlciBvciBNb2RlbCB3aGljaCB3b3VsZCBjYXVzZSBwcm9ibGVtcyB3aGVuIHRyeWluZyB0bworCQkJLy8gaW5pdGlhbGl6ZQorCQkJU2ltdWxhdGlvbi5oYW5kbGVFeGNlcHRpb24oc2NlbmFyaW8sIHNjZW5hcmlvLmdldER1YmxpbkNvcmUoKQorCQkJCQkuZ2V0VGl0bGUoKSwgdHJ1ZSwgZSk7CisJCQlyZXRWYWx1ZSA9IG51bGw7CisJCX0KKwkJcmV0dXJuIHJldFZhbHVlOworCX0gLy8gY3JlYXRlU2ltdWxhdGlvbgorCisJLyoqCisJICogQ3JlYXRlIGEge0BsaW5rIElTaW11bGF0aW9ufSBmcm9tIGEge0BsaW5rIElDb25maWd1cmF0aW9uRWxlbWVudH0gYW5kCisJICogdGhlbiBzdGFydCBpdCBydW5uaW5nLgorCSAqIAorCSAqIEBwYXJhbSBjb25maWd1cmF0aW9uRWxlbWVudAorCSAqICAgICAgICAgICAgYSB7QGxpbmsgSUNvbmZpZ3VyYXRpb25FbGVtZW50fSB0aGF0IHNwZWNpZmllcyB0aGUgZGV0YWlscyBvZgorCSAqICAgICAgICAgICAgYSBzZXJpYWxpemVkIHtAbGluayBTY2VuYXJpb30gdGhhdCBpcyBpbiBhIHBsdWctaW4KKwkgKiAKKwkgKkBEZXByZWNhdGVkCisJICovCisJcHVibGljIHZvaWQgY3JlYXRlQW5kUnVuU2ltdWxhdGlvbigKKwkJCWZpbmFsIElDb25maWd1cmF0aW9uRWxlbWVudCBjb25maWd1cmF0aW9uRWxlbWVudCkgeworCQluZXcgSm9iKE1lc3NhZ2VzLmdldFN0cmluZygiU2ltTWdyLlN0YXJ0X1NpbSIpKSB7IC8vJE5PTi1OTFMtMSQKKwkJCUBPdmVycmlkZQorCQkJcHJvdGVjdGVkIElTdGF0dXMgcnVuKGZpbmFsIElQcm9ncmVzc01vbml0b3IgbW9uaXRvcikgeworCQkJCW1vbml0b3IuYmVnaW5UYXNrKE1lc3NhZ2VzLmdldFN0cmluZygiU2ltTWdyLkNydFNpbSIpLAorCQkJCQkJSVByb2dyZXNzTW9uaXRvci5VTktOT1dOKTsKKwkJCQl0cnkgeworCQkJCQlmaW5hbCBJU2ltdWxhdGlvbiBzaW11bGF0aW9uID0gY3JlYXRlU2ltdWxhdGlvbigKKwkJCQkJCQljb25maWd1cmF0aW9uRWxlbWVudCwgbW9uaXRvcik7CisJCQkJCW1vbml0b3Iuc3ViVGFzayhNZXNzYWdlcy5nZXRTdHJpbmcoIlNpbU1nci5SdW4iKSk7CisJCQkJCXNpbXVsYXRpb24ucnVuKCk7CisJCQkJfSAvLyB0cnkKKwkJCQljYXRjaCAoZmluYWwgTnVsbFBvaW50ZXJFeGNlcHRpb24gZSkgeworCQkJCQkvLyBUaGUgZXJyb3Igd2FzIGxvZ2dlZCBpbiBjcmVhdGVTaW11bGF0aW9uCisJCQkJCW1vbml0b3IuZG9uZSgpOworCQkJCX0KKwkJCQltb25pdG9yLmRvbmUoKTsKKwkJCQlyZXR1cm4gU3RhdHVzLk9LX1NUQVRVUzsKKwkJCX0gLy8gcnVuCisJCX0uc2NoZWR1bGUoKTsKKwl9IC8vIGNyZWF0ZUFuZFJ1blNpbXVsYXRpb24KKworCS8qKgorCSAqIENyZWF0ZSBhIHtAbGluayBJU2ltdWxhdGlvbn0gZnJvbSBhIHtAbGluayBTY2VuYXJpb30gaW5zdGFuY2UgYW5kIHRoZW4KKwkgKiBzdGFydCBpdCBydW5uaW5nLgorCSAqIAorCSAqIEBwYXJhbSBzY2VuYXJpbworCSAqICAgICAgICAgICAgdGhlIHtAbGluayBTY2VuYXJpb30gdG8gYmUgc2ltdWxhdGVkCisJICovCisJcHVibGljIHZvaWQgY3JlYXRlQW5kUnVuU2ltdWxhdGlvbihmaW5hbCBTY2VuYXJpbyBzY2VuYXJpbykgeworCQluZXcgSm9iKE1lc3NhZ2VzLmdldFN0cmluZygiU2ltTWdyLlN0YXJ0X1NpbSIpKSB7CisJCQlAT3ZlcnJpZGUKKwkJCXByb3RlY3RlZCBJU3RhdHVzIHJ1bihmaW5hbCBJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IpIHsKKwkJCQl0cnkgeworCQkJCQlmaW5hbCBJU2ltdWxhdGlvbiBzaW11bGF0aW9uID0gY3JlYXRlU2ltdWxhdGlvbihzY2VuYXJpbywgbW9uaXRvcik7CisJCQkJCW1vbml0b3Iuc3ViVGFzayhNZXNzYWdlcy5nZXRTdHJpbmcoIlNpbU1nci5SdW4iKSk7CisJCQkJCXNpbXVsYXRpb24ucnVuKCk7CisJCQkJfSBjYXRjaCAoZmluYWwgRXhjZXB0aW9uIGUpIHsKKwkJCQkJLy8gVGhlIGVycm9yIHdhcyBsb2dnZWQgaW4gY3JlYXRlU2ltdWxhdGlvbgorCQkJCQltb25pdG9yLmRvbmUoKTsKKwkJCQl9IC8vIGNhdGNoIEV4Y2VwdGlvbgorCQkJCXJldHVybiBTdGF0dXMuT0tfU1RBVFVTOworCQkJfSAvLyBydW4KKwkJfS5zY2hlZHVsZSgpOworCX0gLy8gY3JlYXRlQW5kUnVuU2ltdWxhdGlvbgorCisJCisJLyoqCisJICogQ3JlYXRlIGFuIHtAbGluayBJU2ltdWxhdGlvbn0gZnJvbSBhIHtAbGluayBJQ29uZmlndXJhdGlvbkVsZW1lbnR9IGFuZAorCSAqIHRoZW4gc3RhcnQgaXQgcnVubmluZy4KKwkgKiAKKwkgKiBAcGFyYW0gY29uZmlndXJhdGlvbkVsZW1lbnQKKwkgKiAgICAgICAgICAgIGFuIHtAbGluayBJQ29uZmlndXJhdGlvbkVsZW1lbnR9IHRoYXQgc3BlY2lmaWVzIHRoZSBkZXRhaWxzIG9mCisJICogICAgICAgICAgICBhIHNlcmlhbGl6ZWQge0BsaW5rIFNjZW5hcmlvfSB0aGF0IGlzIGluIGEgcGx1Zy1pbgorCSAqIAorCSAqIEBEZXByZWNhdGVkCisJICovCisJcHVibGljIHZvaWQgY3JlYXRlQW5kU3RlcFNpbXVsYXRpb24oCisJCQlmaW5hbCBJQ29uZmlndXJhdGlvbkVsZW1lbnQgY29uZmlndXJhdGlvbkVsZW1lbnQpIHsKKwkJbmV3IEpvYihNZXNzYWdlcy5nZXRTdHJpbmcoIlNpbU1nci5TdGFydF9TaW0iKSkgeyAvLyROT04tTkxTLTEkCisJCQlAT3ZlcnJpZGUKKwkJCXByb3RlY3RlZCBJU3RhdHVzIHJ1bihmaW5hbCBJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IpIHsKKwkJCQl0cnkgeworCQkJCQlmaW5hbCBJU2ltdWxhdGlvbiBzaW11bGF0aW9uID0gY3JlYXRlU2ltdWxhdGlvbigKKwkJCQkJCQljb25maWd1cmF0aW9uRWxlbWVudCwgbW9uaXRvcik7CisJCQkJCW1vbml0b3Iuc3ViVGFzayhNZXNzYWdlcy5nZXRTdHJpbmcoIlNpbU1nci5SdW4iKSk7CisJCQkJCXNpbXVsYXRpb24uc3RlcCgpOworCQkJCX0gLy8gdHJ5CisJCQkJY2F0Y2ggKGZpbmFsIE51bGxQb2ludGVyRXhjZXB0aW9uIGUpIHsKKwkJCQkJLy8gVGhlIGVycm9yIHdhcyBsb2dnZWQgaW4gY3JlYXRlU2ltdWxhdGlvbgorCQkJCQltb25pdG9yLmRvbmUoKTsKKwkJCQl9CisJCQkJcmV0dXJuIFN0YXR1cy5PS19TVEFUVVM7CisJCQl9IC8vIHJ1bgorCQl9LnNjaGVkdWxlKCk7CisJfSAvLyBjcmVhdGVBbmRTdGVwU2ltdWxhdGlvbgorCQorCS8qKgorCSAqIENyZWF0ZSBhbiB7QGxpbmsgSVNpbXVsYXRpb259IGZyb20gYSB7QGxpbmsgU2NlbmFyaW99IGluc3RhbmNlIGFuZCB0aGVuCisJICogc3RhcnQgaXQgcnVubmluZy4KKwkgKiAKKwkgKiBAcGFyYW0gc2NlbmFyaW8KKwkgKiAgICAgICAgICAgIHRoZSB7QGxpbmsgU2NlbmFyaW99IHRvIGJlIHNpbXVsYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIGNyZWF0ZUFuZFN0ZXBTaW11bGF0aW9uKGZpbmFsIFNjZW5hcmlvIHNjZW5hcmlvKSB7CisJCW5ldyBKb2IoTWVzc2FnZXMuZ2V0U3RyaW5nKCJTaW1NZ3IuU3RhcnRfU2ltIikpIHsgLy8kTk9OLU5MUy0xJAorCQkJQE92ZXJyaWRlCisJCQlwcm90ZWN0ZWQgSVN0YXR1cyBydW4oZmluYWwgSVByb2dyZXNzTW9uaXRvciBtb25pdG9yKSB7CisJCQkJdHJ5IHsKKwkJCQkJZmluYWwgSVNpbXVsYXRpb24gc2ltdWxhdGlvbiA9IGNyZWF0ZVNpbXVsYXRpb24oc2NlbmFyaW8sIG1vbml0b3IpOworCQkJCQltb25pdG9yLnN1YlRhc2soTWVzc2FnZXMuZ2V0U3RyaW5nKCJTaW1NZ3IuUnVuIikpOworCQkJCQlzaW11bGF0aW9uLnN0ZXAoKTsKKwkJCQl9IC8vIHRyeQorCQkJCWNhdGNoIChmaW5hbCBOdWxsUG9pbnRlckV4Y2VwdGlvbiBlKSB7CisJCQkJCS8vIFRoZSBlcnJvciB3YXMgbG9nZ2VkIGluIGNyZWF0ZVNpbXVsYXRpb24KKwkJCQkJbW9uaXRvci5kb25lKCk7CisJCQkJfQorCQkJCXJldHVybiBTdGF0dXMuT0tfU1RBVFVTOworCQkJfSAvLyBydW4KKwkJfS5zY2hlZHVsZSgpOworCX0gLy8gY3JlYXRlQW5kU3RlcFNpbXVsYXRpb24KKworCQorCS8qKgorCSAqIEdpdmVuIGEge0BsaW5rIEdyYXBofSBmaW5kIHRoZSB7QGxpbmsgSVNpbXVsYXRpb259IHRoYXQgY3JlYXRlZCBpdC4KKwkgKiAKKwkgKiBAcGFyYW0gZ3JhcGgKKwkgKiAgICAgICAgICAgIGFuIGluc3RhbmNlIG9mIGEge0BsaW5rIEdyYXBofQorCSAqIEByZXR1cm4gdGhlIHtAbGluayBJU2ltdWxhdGlvbn0gaW5zdGFuY2UgdGhhdCBjcmVhdGVkIHRoZSB7QGxpbmsgR3JhcGh9LAorCSAqICAgICAgICAgPGNvZGU+bnVsbDwvY29kZT4sIGlmIG5vIG1hdGNoIGNvdWxkIGJlIGZvdW5kLgorCSAqLworCXB1YmxpYyBJU2ltdWxhdGlvbiBtYXBHcmFwaFRvU2ltdWxhdGlvbihmaW5hbCBHcmFwaCBncmFwaCkgeworCQlJU2ltdWxhdGlvbiByZXRWYWx1ZSA9IG51bGw7CisJCWZvciAoZmluYWwgSVNpbXVsYXRpb24gc2ltdWxhdGlvbiA6IGFjdGl2ZVNpbXVsYXRpb25zKSB7CisJCQlmaW5hbCBHcmFwaCBzaW11bGF0aW9uR3JhcGggPSBzaW11bGF0aW9uLmdldFNjZW5hcmlvKCkKKwkJCQkJLmdldENhbm9uaWNhbEdyYXBoKCk7CisJCQkvLyBJcyB0aGlzIHRoZSBvbmUgd2UncmUgbG9va2luZyBmb3I/CisJCQlpZiAoZ3JhcGggPT0gc2ltdWxhdGlvbkdyYXBoKSB7CisJCQkJLy8gWWVzCisJCQkJcmV0VmFsdWUgPSBzaW11bGF0aW9uOworCQkJCWJyZWFrOworCQkJfSAvLyBpZgorCQl9IC8vIGZvciBlYWNoIElTaW11bGF0aW9uCisJCXJldHVybiByZXRWYWx1ZTsKKwl9IC8vIG1hcEdyYXBoVG9TaW11bGF0aW9uCisKKwkvKioKKwkgKiBAcGFyYW0gbGlzdGVuZXIKKwkgKiAgICAgICAgICAgIGEgbGlzdGVuZXIgd2FudGluZyB0byBiZSB0b2xkIGFib3V0IGNoYW5nZXMgdG8gdGhlIG1hbmFnZXIuCisJICovCisJcHVibGljIHZvaWQgYWRkU2ltdWxhdGlvbk1hbmFnZXJMaXN0ZW5lcigKKwkJCWZpbmFsIElTaW11bGF0aW9uTWFuYWdlckxpc3RlbmVyIGxpc3RlbmVyKSB7CisJCWlmICghbGlzdGVuZXJzLmNvbnRhaW5zKGxpc3RlbmVyKSkgeworCQkJbGlzdGVuZXJzLmFkZChsaXN0ZW5lcik7CisJCX0KKwl9IC8vIGFkZFNpbXVsYXRpb25NYW5hZ2VyTGlzdGVuZXIKKworCS8qKgorCSAqIEBwYXJhbSBsaXN0ZW5lcgorCSAqICAgICAgICAgICAgYSBsaXN0ZW5lciB3YW50aW5nIHRvIGJlIHRvbGQgYWJvdXQgY2hhbmdlcyB0byB0aGUgbWFuYWdlci4KKwkgKi8KKwlwdWJsaWMgdm9pZCBhZGRTaW11bGF0aW9uTWFuYWdlckxpc3RlbmVyU3luYygKKwkJCWZpbmFsIElTaW11bGF0aW9uTWFuYWdlckxpc3RlbmVyU3luYyBsaXN0ZW5lcikgeworCQlpZiAoIWxpc3RlbmVyc1N5bmMuY29udGFpbnMobGlzdGVuZXIpKSB7CisJCQlsaXN0ZW5lcnNTeW5jLmFkZChsaXN0ZW5lcik7CisJCX0KKwl9IC8vIGFkZFNpbXVsYXRpb25NYW5hZ2VyTGlzdGVuZXJTeW5jCisKKwkvKioKKwkgKiBAcGFyYW0gbGlzdGVuZXIKKwkgKiAgICAgICAgICAgIGEgbGlzdGVuZXIgd2FudGluZyBOT1QgdG8gYmUgdG9sZCBhYm91dCBjaGFuZ2VzIHRvIHRoZQorCSAqICAgICAgICAgICAgbWFuYWdlci4KKwkgKi8KKwlwdWJsaWMgdm9pZCByZW1vdmVMaXN0ZW5lcihmaW5hbCBJU2ltdWxhdGlvbk1hbmFnZXJMaXN0ZW5lciBsaXN0ZW5lcikgeworCQlsaXN0ZW5lcnMucmVtb3ZlKGxpc3RlbmVyKTsKKwl9IC8vIHJlbW92ZUxpc3RlbmVyCisKKwkvKioKKwkgKiBAcGFyYW0gbGlzdGVuZXIKKwkgKiAgICAgICAgICAgIGEgbGlzdGVuZXIgTk9UIHdhbnRpbmcgdG8gYmUgdG9sZCBhYm91dCBjaGFuZ2VzIHRvIHRoZQorCSAqICAgICAgICAgICAgbWFuYWdlci4KKwkgKi8KKwlwdWJsaWMgdm9pZCByZW1vdmVMaXN0ZW5lclN5bmMoZmluYWwgSVNpbXVsYXRpb25NYW5hZ2VyTGlzdGVuZXJTeW5jIGxpc3RlbmVyKSB7CisJCWxpc3RlbmVyc1N5bmMucmVtb3ZlKGxpc3RlbmVyKTsKKwl9IC8vIHJlbW92ZUxpc3RlbmVyCisKKwkvKioKKwkgKiBUZWxsIHRoZSBsaXN0ZW5lcnMgYWJvdXQgdGhlIGNoYW5nZS4KKwkgKiAKKwkgKiBAcGFyYW0gc2ltdWxhdGlvbnNBZGRlZAorCSAqICAgICAgICAgICAgdGhlIHtAbGluayBJU2ltdWxhdGlvbn1zIGFkZGVkCisJICogQHBhcmFtIHNpbXVsYXRpb25zUmVtb3ZlZAorCSAqICAgICAgICAgICAgdGhlIHtAbGluayBJU2ltdWxhdGlvbn1zIHJlbW92ZWQKKwkgKi8KKwlwcml2YXRlIHZvaWQgZmlyZVNpbXVsYXRpb25NYW5hZ2VyQ2hhbmdlZCgKKwkJCWZpbmFsIElTaW11bGF0aW9uW10gc2ltdWxhdGlvbnNBZGRlZCwKKwkJCWZpbmFsIElTaW11bGF0aW9uW10gc2ltdWxhdGlvbnNSZW1vdmVkKSB7CisJCWZpbmFsIFNpbXVsYXRpb25NYW5hZ2VyRXZlbnQgZXZlbnQgPSBuZXcgU2ltdWxhdGlvbk1hbmFnZXJFdmVudCh0aGlzLAorCQkJCXNpbXVsYXRpb25zQWRkZWQsIHNpbXVsYXRpb25zUmVtb3ZlZCk7CisKKwkJZm9yIChmaW5hbCBJU2ltdWxhdGlvbk1hbmFnZXJMaXN0ZW5lciBsaXN0ZW5lciA6IGxpc3RlbmVycykgeworCQkJCisJCQlEaXNwbGF5U2FmZUV4ZWN1dG9yLmV4ZWN1dGVBc3luYyhuZXcgUnVubmFibGUoKSB7CisJCQkJcHVibGljIHZvaWQgcnVuKCkgeworCQkJCQlsaXN0ZW5lci5zaW11bGF0aW9uc0NoYW5nZWQoZXZlbnQpOworCQkJCX0KKwkJCX0pOworCQkJCisJCQkvLyBNQUQgMy8yMi8yMDExIFJlbW92aW5nIHRvIHRlc3Qgb3V0IG5ldyAic2FmZSIgZXhlY3V0aW9uIGhhbmRsZXIKKy8vCQkJdHJ5IHsKKy8vCQkJCURpc3BsYXkuZ2V0RGVmYXVsdCgpLmFzeW5jRXhlYyhuZXcgUnVubmFibGUoKSB7CisvLwkJCQkJcHVibGljIHZvaWQgcnVuKCkgeworLy8JCQkJCQlsaXN0ZW5lci5zaW11bGF0aW9uc0NoYW5nZWQoZXZlbnQpOworLy8JCQkJCX0KKy8vCQkJCX0pOworLy8JCQl9IGNhdGNoIChmaW5hbCBFcnJvciBuY2RmZSkgeworLy8JCQkJLy8gSWYgd2UgZ2V0IHRoaXMgZXhjZXB0aW9uLCBpdCBpcyBiZWNhdXNlIHdlJ3JlIG5vdCBydW5uaW5nIGluCisvLwkJCQkvLyBlY2xpcHNlLiBKdXN0IGZpcmUgdGhlIGV2ZW50LgorLy8JCQkJbGlzdGVuZXIuc2ltdWxhdGlvbnNDaGFuZ2VkKGV2ZW50KTsKKy8vCQkJfSAvLyBjYXRjaAorCQl9IC8vIGZvcgorCisJCWZvciAoZmluYWwgSVNpbXVsYXRpb25NYW5hZ2VyTGlzdGVuZXJTeW5jIGxpc3RlbmVyIDogbGlzdGVuZXJzU3luYykgeworCQkJRGlzcGxheVNhZmVFeGVjdXRvci5leGVjdXRlU3luYyhuZXcgUnVubmFibGUoKSB7CisJCQkJcHVibGljIHZvaWQgcnVuKCkgeworCQkJCQlsaXN0ZW5lci5zaW11bGF0aW9uc0NoYW5nZWRTeW5jKGV2ZW50KTsKKwkJCQl9CisJCQl9KTsKKworCQkJLy8gTUFEIDMvMjIvMjAxMSBSZW1vdmluZyB0byB0ZXN0IG91dCBuZXcgInNhZmUiIGV4ZWN1dGlvbiBoYW5kbGVyCisvLwkJCXRyeSB7CisvLwkJCQlEaXNwbGF5LmdldERlZmF1bHQoKS5zeW5jRXhlYyhuZXcgUnVubmFibGUoKSB7CisvLwkJCQkJcHVibGljIHZvaWQgcnVuKCkgeworLy8JCQkJCQlsaXN0ZW5lci5zaW11bGF0aW9uc0NoYW5nZWRTeW5jKGV2ZW50KTsKKy8vCQkJCQl9CisvLwkJCQl9KTsKKy8vCQkJfSBjYXRjaCAoZmluYWwgRXJyb3IgbmNkZmUpIHsKKy8vCQkJCS8vIElmIHdlIGdldCB0aGlzIGV4Y2VwdGlvbiwgaXQgaXMgYmVjYXVzZSB3ZSdyZSBub3QgcnVubmluZyBpbgorLy8JCQkJLy8gZWNsaXBzZS4gSnVzdCBmaXJlIHRoZSBldmVudC4KKy8vCQkJCWxpc3RlbmVyLnNpbXVsYXRpb25zQ2hhbmdlZFN5bmMoZXZlbnQpOworLy8JCQl9IC8vIGNhdGNoCisJCX0gLy8gZm9yCisJfSAvLyBmaXJlU2ltdWxhdGlvbk1hbmFnZXJDaGFuZ2VkCisKKwkvKioKKwkgKiBUaGlzIGlzIHdoZXJlIHRoZSBtYW5hZ2VyIGhlYXJzIGFib3V0IGNoYW5nZXMgaW4gdGhlIHtAbGluayBJU2ltdWxhdGlvbn1zCisJICogaXQgaXMgbWFuYWdpbmcuIEl0IGlzIHJlYWxseSBvbmx5IGludGVyZXN0ZWQgaW4gdGhvc2UgdGhhdCAic3RvcCIgc28gaXQKKwkgKiBjYW4gcmVtb3ZlIHRoZW0gZnJvbSBpdHMgY29sbGVjdGlvbiBvZiBhY3RpdmUge0BsaW5rIElTaW11bGF0aW9ufXMuCisJICogCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmpvYnMuc2ltdWxhdGlvbi5JU2ltdWxhdGlvbkxpc3RlbmVyI3NpbXVsYXRpb25DaGFuZ2VkKG9yZy5lY2xpcHNlLnN0ZW0uam9icy5zaW11bGF0aW9uLlNpbXVsYXRpb25FdmVudCkKKwkgKi8KKwlwdWJsaWMgdm9pZCBzaW11bGF0aW9uQ2hhbmdlZChmaW5hbCBTaW11bGF0aW9uRXZlbnQgZXZlbnQpIHsKKwkJLy8gSGFzIGEgc2ltdWxhdGlvbiBzdG9wcGVkPworCQlpZiAoZXZlbnQuZ2V0U2ltdWxhdGlvblN0YXRlKCkuZXF1YWxzKFNpbXVsYXRpb25TdGF0ZS5TVE9QUEVEKSkgeworCQkJLy8gWWVzCisvLwkJCWlmIChldmVudC5nZXRTaW11bGF0aW9uKCkgaW5zdGFuY2VvZiBTaW11bGF0aW9uQWRhcHRlcikgeworLy8JCQkJU2ltdWxhdGlvbkFkYXB0ZXIgc3RvcHBlZFNpbXVsYXRpb25BZGFwdGVyID0gKFNpbXVsYXRpb25BZGFwdGVyKWV2ZW50LmdldFNpbXVsYXRpb24oKTsKKy8vCQkJCVNpbXVsYXRpb24gc3RvcHBlZFNpbXVsYXRpb24gPSAoU2ltdWxhdGlvbilzdG9wcGVkU2ltdWxhdGlvbkFkYXB0ZXIuZ2V0U2ltdWxhdGlvbigpOworLy8JCQkJQWN0aXZhdG9yLmdldERlZmF1bHQoKS5nZXRQbHVnaW5QcmVmZXJlbmNlcygpLnJlbW92ZVByb3BlcnR5Q2hhbmdlTGlzdGVuZXIoc3RvcHBlZFNpbXVsYXRpb24pOworLy8JCQl9CisJCQlyZW1vdmVBY3RpdmVTaW11bGF0aW9uKGV2ZW50LmdldFNpbXVsYXRpb24oKSk7CisJCX0KKwl9IC8vIHNpbXVsYXRpb25DaGFuZ2VkCisKKwkKKy8vCU1BRCAyMC1KdW5lLTIwMTEKKy8vICBOZXcgQVBJIGFkZGVkIHRvIGVuYWJsZSAiZGlzcGxheSBzYWZlIiBzaW11bGF0aW9ucyBieSBkZWZhdWx0IHdpdGhvdXQgdGhlIG5lZWQgZm9yCisvLwl0aGUgc2ltdWxhdGlvbiBhZGFwdGVyLiAgVGh1cyByZW1vdmluZyB0aGUgc2ltdWxhdGlvbiBhZGFwdGVyLgorCQorLy8JLyoqCisvLwkgKiBUaGlzIGNsYXNzIGFkYXB0cyBhIHtAbGluayBTaW11bGF0aW9ufSBpbnN0YW5jZSB0aGF0IHJ1bnMgYXMgYW4KKy8vCSAqIGFzeW5jaHJvbm91cyBFY2xpcHNlIHtAbGluayBKb2J9IHRvIGJlIGFuIHtAbGluayBJU2ltdWxhdGlvbn0gaW5zdGFuY2UuCisvLwkgKiBUaGUgYWRhcHRlciBtYW5hZ2VzIHRocmVhZCBzYWZldHkgaXNzdWVzIHNvIHRoYXQgdGhlIFVJIHRocmVhZCBjYW4gYWNjZXNzCisvLwkgKiB0aGUge0BsaW5rIElTaW11bGF0aW9ufSBpbnN0YW5jZSBkaXJlY3RseS4KKy8vCSAqLworLy8JcHVibGljIHN0YXRpYyBjbGFzcyBTaW11bGF0aW9uQWRhcHRlciBpbXBsZW1lbnRzIElTaW11bGF0aW9uLAorLy8JCQlJU2ltdWxhdGlvbkxpc3RlbmVyLCBJU2ltdWxhdGlvbkxpc3RlbmVyU3luYyB7CisvLworLy8JCS8qKgorLy8JCSAqIFRoZSBjb2xsZWN0aW9uIG9mIHtAbGluayBJU2ltdWxhdGlvbkxpc3RlbmVyfSdzIHdhaXRpbmcgdG8gYmUgdG9sZAorLy8JCSAqIGFib3V0IHtAbGluayBTaW11bGF0aW9uRXZlbnR9cy4KKy8vCQkgKi8KKy8vCQlwcml2YXRlIGZpbmFsIExpc3Q8SVNpbXVsYXRpb25MaXN0ZW5lcj4gbGlzdGVuZXJzID0gbmV3IENvcHlPbldyaXRlQXJyYXlMaXN0PElTaW11bGF0aW9uTGlzdGVuZXI+KCk7CisvLworLy8JCS8qKgorLy8JCSAqIFRoZSBjb2xsZWN0aW9uIG9mIHtAbGluayBJU2ltdWxhdGlvbkxpc3RlbmVyU3luY30ncyB3YWl0aW5nIHRvIGJlCisvLwkJICogdG9sZCBhYm91dCB7QGxpbmsgU2ltdWxhdGlvbkV2ZW50fXMuCisvLwkJICovCisvLwkJcHJpdmF0ZSBmaW5hbCBMaXN0PElTaW11bGF0aW9uTGlzdGVuZXJTeW5jPiBsaXN0ZW5lcnNTeW5jID0gbmV3IENvcHlPbldyaXRlQXJyYXlMaXN0PElTaW11bGF0aW9uTGlzdGVuZXJTeW5jPigpOworLy8KKy8vCQkvKioKKy8vCQkgKiBUaGUge0BsaW5rIFNpbXVsYXRpb259IGluc3RhbmNlIHRvIGFkYXB0LiBUaGlzIHdpbGwgYmUgYW4gaW5zdGFuY2Ugb2YKKy8vCQkgKiB7QGxpbmsgU2ltdWxhdGlvbn0gd2hpY2ggaXMgYWxzbyBhbiBlY2xpcHNlIHtAbGluayBKb2J9IGFuZCBydW5zCisvLwkJICogYXN5bmNocm9ub3VzbHkgZnJvbSB0aGUgVUkgdGhyZWFkIG9mIGVjbGlwc2UuIFRoaXMgYWRhcHRlciByZWdpc3RlcnMKKy8vCQkgKiBhcyBhIGxpc3RlbmVyIG9mIGFkYXB0ZWQge0BsaW5rIFNpbXVsYXRpb259IGFuZCBzYWZlbHkgcGFzc2VzCisvLwkJICoge0BsaW5rIFNpbXVsYXRpb25FdmVudH0ncyBvbiB0byBsaXN0ZW5lcnMgaW4gdGhlIFVJIG9yIG90aGVyIHRocmVhZHMuCisvLwkJICovCisvLwkJcHJpdmF0ZSBmaW5hbCBJU2ltdWxhdGlvbiBzaW11bGF0aW9uOworLy8KKy8vCQkvKioKKy8vCQkgKiBDb25zdHJ1Y3RvcgorLy8JCSAqIAorLy8JCSAqIEBwYXJhbSBzaW11bGF0aW9uCisvLwkJICogICAgICAgICAgICB0aGUge0BsaW5rIFNpbXVsYXRpb259IHRvIGFkYXB0CisvLwkJICovCisvLwkJcHJvdGVjdGVkIFNpbXVsYXRpb25BZGFwdGVyKGZpbmFsIElTaW11bGF0aW9uIHNpbXVsYXRpb24pIHsKKy8vCQkJdGhpcy5zaW11bGF0aW9uID0gc2ltdWxhdGlvbjsKKy8vCQkJc2ltdWxhdGlvbi5hZGRTaW11bGF0aW9uTGlzdGVuZXIodGhpcyk7CisvLwkJCXNpbXVsYXRpb24uYWRkU2ltdWxhdGlvbkxpc3RlbmVyU3luYyh0aGlzKTsKKy8vCQl9IC8vIFNpbXVsYXRpb25BZGFwdGVyCisvLworLy8JCS8qKgorLy8JCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5qb2JzLnNpbXVsYXRpb24uSVNpbXVsYXRpb24jZ2V0TmFtZSgpCisvLwkJICovCisvLwkJcHVibGljIFN0cmluZyBnZXROYW1lKCkgeworLy8JCQlyZXR1cm4gc2ltdWxhdGlvbi5nZXROYW1lKCk7CisvLwkJfQorLy8KKy8vCQkvKioKKy8vCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uam9icy5zaW11bGF0aW9uLklTaW11bGF0aW9uI2dldE5hbWVXaXRoU2VxdWVuY2VOdW1iZXIoKQorLy8JCSAqLworLy8JCXB1YmxpYyBTdHJpbmcgZ2V0TmFtZVdpdGhTZXF1ZW5jZU51bWJlcigpIHsKKy8vCQkJcmV0dXJuIHNpbXVsYXRpb24uZ2V0TmFtZVdpdGhTZXF1ZW5jZU51bWJlcigpOworLy8JCX0KKy8vCisvLwkJLyoqCisvLwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmpvYnMuZXhlY3V0aW9uLklFeGVjdXRhYmxlI2dldENyZWF0aW9uVGltZSgpCisvLwkJICovCisvLwkJcHVibGljIERhdGUgZ2V0Q3JlYXRpb25UaW1lKCkgeworLy8JCQlyZXR1cm4gc2ltdWxhdGlvbi5nZXRDcmVhdGlvblRpbWUoKTsKKy8vCQl9CisvLworLy8JCS8qKgorLy8JCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5qb2JzLmV4ZWN1dGlvbi5JRXhlY3V0YWJsZSNnZXRVbmlxdWVJRFN0cmluZygpCisvLwkJICovCisvLwkJcHVibGljIFN0cmluZyBnZXRVbmlxdWVJRFN0cmluZygpIHsKKy8vCQkJcmV0dXJuIHNpbXVsYXRpb24uZ2V0VW5pcXVlSURTdHJpbmcoKTsKKy8vCQl9CisvLworLy8JCS8qKgorLy8JCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5qb2JzLnNpbXVsYXRpb24uSVNpbXVsYXRpb24jZ2V0U2NlbmFyaW8oKQorLy8JCSAqLworLy8JCXB1YmxpYyBTY2VuYXJpbyBnZXRTY2VuYXJpbygpIHsKKy8vCQkJcmV0dXJuIHNpbXVsYXRpb24uZ2V0U2NlbmFyaW8oKTsKKy8vCQl9CisvLworLy8JCS8qKgorLy8JCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5qb2JzLnNpbXVsYXRpb24uSVNpbXVsYXRpb24jZ2V0U2ltdWxhdGlvblN0YXRlKCkKKy8vCQkgKi8KKy8vCQlwdWJsaWMgU2ltdWxhdGlvblN0YXRlIGdldFNpbXVsYXRpb25TdGF0ZSgpIHsKKy8vCQkJcmV0dXJuIHNpbXVsYXRpb24uZ2V0U2ltdWxhdGlvblN0YXRlKCk7CisvLwkJfQorLy8KKy8vCQkvKioKKy8vCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uam9icy5zaW11bGF0aW9uLklTaW11bGF0aW9uI2dldFNlcXVlbmNlTnVtYmVyKCkKKy8vCQkgKi8KKy8vCQlwdWJsaWMgaW50IGdldFNlcXVlbmNlTnVtYmVyKCkgeworLy8JCQlyZXR1cm4gc2ltdWxhdGlvbi5nZXRTZXF1ZW5jZU51bWJlcigpOworLy8JCX0KKy8vCisvLwkJLyoqCisvLwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmpvYnMuc2ltdWxhdGlvbi5JU2ltdWxhdGlvbiNzZXRTZXF1ZW5jZU51bWJlcihpbnQpCisvLwkJICovCisvLwkJcHVibGljIHZvaWQgc2V0U2VxdWVuY2VOdW1iZXIoZmluYWwgaW50IHNlcXVlbmNlTnVtYmVyKSB7CisvLwkJCXNpbXVsYXRpb24uc2V0U2VxdWVuY2VOdW1iZXIoc2VxdWVuY2VOdW1iZXIpOworLy8JCX0gLy8gc2V0U2VxdWVuY2VOdW1iZXIKKy8vCisvLwkJLyoqCisvLwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmpvYnMuc2ltdWxhdGlvbi5JU2ltdWxhdGlvbiNwYXVzZSgpCisvLwkJICovCisvLwkJcHVibGljIHZvaWQgcGF1c2UoKSB7CisvLwkJCXNpbXVsYXRpb24ucGF1c2UoKTsKKy8vCQl9CisvLworLy8JCS8qKgorLy8JCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5qb2JzLnNpbXVsYXRpb24uSVNpbXVsYXRpb24jcmVzZXQoKQorLy8JCSAqLworLy8JCXB1YmxpYyB2b2lkIHJlc2V0KCkgeworLy8JCQlzaW11bGF0aW9uLnJlc2V0KCk7CisvLwkJfQorLy8KKy8vCQkvKioKKy8vCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uam9icy5zaW11bGF0aW9uLklTaW11bGF0aW9uI3J1bigpCisvLwkJICovCisvLwkJcHVibGljIHZvaWQgcnVuKCkgeworLy8JCQlzaW11bGF0aW9uLnJ1bigpOworLy8JCX0KKy8vCisvLwkJLyoqCisvLwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmpvYnMuc2ltdWxhdGlvbi5JU2ltdWxhdGlvbiNzdGVwKCkKKy8vCQkgKi8KKy8vCQlwdWJsaWMgdm9pZCBzdGVwKCkgeworLy8JCQlzaW11bGF0aW9uLnN0ZXAoKTsKKy8vCQl9CisvLworLy8JCS8qKgorLy8JCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5qb2JzLnNpbXVsYXRpb24uSVNpbXVsYXRpb24jc3RvcCgpCisvLwkJICovCisvLwkJcHVibGljIHZvaWQgc3RvcCgpIHsKKy8vCQkJc2ltdWxhdGlvbi5zdG9wKCk7CisvLwkJfQorLy8KKy8vCQkvKioKKy8vCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uam9icy5leGVjdXRpb24uSUV4ZWN1dGFibGUjaXNSdW5uaW5nKCkKKy8vCQkgKi8KKy8vCQlwdWJsaWMgYm9vbGVhbiBpc1J1bm5pbmcoKSB7CisvLwkJCXJldHVybiBzaW11bGF0aW9uLmlzUnVubmluZygpOworLy8JCX0KKy8vCisvLwkJLyoqCisvLwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmpvYnMuZXhlY3V0aW9uLklFeGVjdXRhYmxlI2lzU3RvcHBhYmxlKCkKKy8vCQkgKi8KKy8vCQlwdWJsaWMgYm9vbGVhbiBpc1N0b3BwYWJsZSgpIHsKKy8vCQkJcmV0dXJuIHNpbXVsYXRpb24uaXNTdG9wcGFibGUoKTsKKy8vCQl9CisvLworLy8JCS8qKgorLy8JCSAqIEB0aHJvd3MgSW50ZXJydXB0ZWRFeGNlcHRpb24KKy8vCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uam9icy5zaW11bGF0aW9uLklTaW11bGF0aW9uI2pvaW4oKQorLy8JCSAqLworLy8JCXB1YmxpYyB2b2lkIGpvaW4oKSB0aHJvd3MgSW50ZXJydXB0ZWRFeGNlcHRpb24geworLy8JCQlzaW11bGF0aW9uLmpvaW4oKTsKKy8vCQl9CisvLworLy8JCS8qKgorLy8JCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5qb2JzLnNpbXVsYXRpb24uSVNpbXVsYXRpb24jY2FuY2VsKCkKKy8vCQkgKi8KKy8vCQlwdWJsaWMgYm9vbGVhbiBjYW5jZWwoKSB7CisvLwkJCXJldHVybiBzaW11bGF0aW9uLmNhbmNlbCgpOworLy8JCX0KKy8vCisvLwkJLyoqCisvLwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmpvYnMuc2ltdWxhdGlvbi5JU2ltdWxhdGlvbiNhZGRTaW11bGF0aW9uTGlzdGVuZXIob3JnLmVjbGlwc2Uuc3RlbS5qb2JzLnNpbXVsYXRpb24uSVNpbXVsYXRpb25MaXN0ZW5lcikKKy8vCQkgKi8KKy8vCQlwdWJsaWMgdm9pZCBhZGRTaW11bGF0aW9uTGlzdGVuZXIoZmluYWwgSVNpbXVsYXRpb25MaXN0ZW5lciBsaXN0ZW5lcikgeworLy8JCQlpZiAoIWxpc3RlbmVycy5jb250YWlucyhsaXN0ZW5lcikpIHsKKy8vCQkJCWxpc3RlbmVycy5hZGQobGlzdGVuZXIpOworLy8JCQl9CisvLwkJfSAvLyBhZGRTaW11bGF0aW9uTGlzdGVuZXIKKy8vCisvLwkJLyoqCisvLwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmpvYnMuc2ltdWxhdGlvbi5JU2ltdWxhdGlvbiNyZW1vdmVTaW11bGF0aW9uTGlzdGVuZXIob3JnLmVjbGlwc2Uuc3RlbS5qb2JzLnNpbXVsYXRpb24uSVNpbXVsYXRpb25MaXN0ZW5lcikKKy8vCQkgKi8KKy8vCQlwdWJsaWMgdm9pZCByZW1vdmVTaW11bGF0aW9uTGlzdGVuZXIoZmluYWwgSVNpbXVsYXRpb25MaXN0ZW5lciBsaXN0ZW5lcikgeworLy8JCQlsaXN0ZW5lcnMucmVtb3ZlKGxpc3RlbmVyKTsKKy8vCQl9IC8vIHJlbW92ZVNpbXVsYXRpb25MaXN0ZW5lcgorLy8KKy8vCQkvKioKKy8vCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uam9icy5zaW11bGF0aW9uLklTaW11bGF0aW9uI2FkZFNpbXVsYXRpb25MaXN0ZW5lclN5bmMob3JnLmVjbGlwc2Uuc3RlbS5qb2JzLnNpbXVsYXRpb24uSVNpbXVsYXRpb25MaXN0ZW5lclN5bmMpCisvLwkJICovCisvLwkJcHVibGljIHZvaWQgYWRkU2ltdWxhdGlvbkxpc3RlbmVyU3luYygKKy8vCQkJCWZpbmFsIElTaW11bGF0aW9uTGlzdGVuZXJTeW5jIGxpc3RlbmVyKSB7CisvLwkJCWlmICghbGlzdGVuZXJzU3luYy5jb250YWlucyhsaXN0ZW5lcikpIHsKKy8vCQkJCWxpc3RlbmVyc1N5bmMuYWRkKGxpc3RlbmVyKTsKKy8vCQkJfQorLy8JCX0KKy8vCisvLwkJLyoqCisvLwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmpvYnMuc2ltdWxhdGlvbi5JU2ltdWxhdGlvbiNyZW1vdmVTaW11bGF0aW9uTGlzdGVuZXJTeW5jKG9yZy5lY2xpcHNlLnN0ZW0uam9icy5zaW11bGF0aW9uLklTaW11bGF0aW9uTGlzdGVuZXJTeW5jKQorLy8JCSAqLworLy8JCXB1YmxpYyB2b2lkIHJlbW92ZVNpbXVsYXRpb25MaXN0ZW5lclN5bmMoCisvLwkJCQlmaW5hbCBJU2ltdWxhdGlvbkxpc3RlbmVyU3luYyBsaXN0ZW5lcikgeworLy8JCQlsaXN0ZW5lcnNTeW5jLnJlbW92ZShsaXN0ZW5lcik7CisvLwkJfQorLy8KKy8vCQkvKioKKy8vCQkgKiBUZWxsIHRoZSBsaXN0ZW5lcnMgYWJvdXQgdGhlIGNoYW5nZSBpbiB0aGUge0BsaW5rIFNpbXVsYXRpb259cyBzdGF0ZQorLy8JCSAqIAorLy8JCSAqIEBwYXJhbSBzaW11bGF0aW9uU3RhdGUKKy8vCQkgKiAgICAgICAgICAgIHRoZSBuZXcgc3RhdGUgb2YgdGhlIHtAbGluayBTaW11bGF0aW9ufQorLy8JCSAqLworLy8JCXByb3RlY3RlZCB2b2lkIGZpcmVTaW11bGF0aW9uQ2hhbmdlZCgKKy8vCQkJCWZpbmFsIFNpbXVsYXRpb25FdmVudCBldmVudCkgeworLy8JCQlmaW5hbCBTaW11bGF0aW9uRXZlbnQgZXYgPSBuZXcgU2ltdWxhdGlvbkV2ZW50KHRoaXMsCisvLwkJCQkJZXZlbnQuZ2V0U2ltdWxhdGlvblN0YXRlKCksIGV2ZW50LmdldEl0ZXJhdGlvblByb2dyZXNzKCkpOworLy8JCQlmb3IgKGZpbmFsIElTaW11bGF0aW9uTGlzdGVuZXIgbGlzdGVuZXIgOiBsaXN0ZW5lcnMpIHsKKy8vCQkJCURpc3BsYXlTYWZlRXhlY3V0b3IuZXhlY3V0ZUFzeW5jKG5ldyBSdW5uYWJsZSgpIHsKKy8vCQkJCQlwdWJsaWMgdm9pZCBydW4oKQorLy8JCQkJCXsKKy8vCQkJCQkJbGlzdGVuZXIuc2ltdWxhdGlvbkNoYW5nZWQoZXYpOworLy8JCQkJCX0KKy8vCQkJCX0pOworLy8KKy8vCQkJfSAvLyBmb3IKKy8vCQl9IC8vIGZpcmVTaW11bGF0aW9uTWFuYWdlckNoYW5nZWQKKy8vCisvLwkJLyoqCisvLwkJICogVGVsbCB0aGUgbGlzdGVuZXJzIGFib3V0IHRoZSBjaGFuZ2UgaW4gdGhlIHtAbGluayBTaW11bGF0aW9ufXMgc3RhdGUKKy8vCQkgKiAKKy8vCQkgKiBAcGFyYW0gc2ltdWxhdGlvblN0YXRlCisvLwkJICogICAgICAgICAgICB0aGUgbmV3IHN0YXRlIG9mIHRoZSB7QGxpbmsgU2ltdWxhdGlvbn0KKy8vCQkgKi8KKy8vCQlwcm90ZWN0ZWQgdm9pZCBmaXJlU2ltdWxhdGlvbkNoYW5nZWRTeW5jKAorLy8JCQkJZmluYWwgU2ltdWxhdGlvbkV2ZW50IGV2ZW50KSB7CisvLwkJCWZpbmFsIFNpbXVsYXRpb25FdmVudCBldiA9IG5ldyBTaW11bGF0aW9uRXZlbnQodGhpcywKKy8vCQkJCQlldmVudC5nZXRTaW11bGF0aW9uU3RhdGUoKSwgZXZlbnQuZ2V0SXRlcmF0aW9uUHJvZ3Jlc3MoKSk7CisvLwkJCWZvciAoZmluYWwgSVNpbXVsYXRpb25MaXN0ZW5lclN5bmMgbGlzdGVuZXIgOiBsaXN0ZW5lcnNTeW5jKSB7CisvLwkJCQlEaXNwbGF5U2FmZUV4ZWN1dG9yLmV4ZWN1dGVTeW5jKG5ldyBSdW5uYWJsZSgpIHsKKy8vCQkJCQlwdWJsaWMgdm9pZCBydW4oKQorLy8JCQkJCXsKKy8vCQkJCQkJbGlzdGVuZXIuc2ltdWxhdGlvbkNoYW5nZWRTeW5jKGV2KTsKKy8vCQkJCQl9CisvLwkJCQl9KTsKKy8vCQkJfSAvLyBmb3IKKy8vCQl9IC8vIGZpcmVTaW11bGF0aW9uQ2hhbmdlZFN5bmMKKy8vCisvLwkJLyoqCisvLwkJICogQHNlZSBqYXZhLmxhbmcuT2JqZWN0I3RvU3RyaW5nKCkKKy8vCQkgKi8KKy8vCQlAT3ZlcnJpZGUKKy8vCQlwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkgeworLy8JCQlyZXR1cm4gc2ltdWxhdGlvbi50b1N0cmluZygpOworLy8JCX0gLy8gdG9TdHJpbmcKKy8vCisvLwkJLyoqCisvLwkJICogVGhpcyBpcyB3aGVyZSB0aGUgYWRhcHRlZCB7QGxpbmsgU2ltdWxhdGlvbn0gdGVsbHMgdXMgb2YgaXRzIHN0YXRlCisvLwkJICogY2hhbmdlcyBhbmQgd2UgbmVlZCB0byBhZGFwdCB0aGVtIHRvIHRoZSBVSSB0aHJlYWQuCisvLwkJICogCisvLwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmpvYnMuc2ltdWxhdGlvbi5JU2ltdWxhdGlvbkxpc3RlbmVyI3NpbXVsYXRpb25DaGFuZ2VkKG9yZy5lY2xpcHNlLnN0ZW0uam9icy5zaW11bGF0aW9uLlNpbXVsYXRpb25FdmVudCkKKy8vCQkgKi8KKy8vCQlwdWJsaWMgdm9pZCBzaW11bGF0aW9uQ2hhbmdlZChmaW5hbCBTaW11bGF0aW9uRXZlbnQgZXZlbnQpIHsKKy8vCQkJZmlyZVNpbXVsYXRpb25DaGFuZ2VkKGV2ZW50KTsKKy8vCQkJCisvLy8vCQkJdHJ5IHsKKy8vLy8JCQkJaWYgKCFEaXNwbGF5LmdldERlZmF1bHQoKS5pc0Rpc3Bvc2VkKCkpIHsKKy8vLy8JCQkJCS8vIFllcworLy8vLwkJCQkJRGlzcGxheS5nZXREZWZhdWx0KCkuYXN5bmNFeGVjKG5ldyBSdW5uYWJsZSgpIHsKKy8vLy8JCQkJCQlwdWJsaWMgdm9pZCBydW4oKSB7CisvLy8vCQkJCQkJCWZpcmVTaW11bGF0aW9uQ2hhbmdlZChldmVudCk7CisvLy8vCQkJCQkJfQorLy8vLwkJCQkJfSk7CisvLy8vCQkJCX0gLy8gaWYKKy8vLy8JCQl9IC8vIHRyeQorLy8vLwkJCWNhdGNoIChmaW5hbCBOdWxsUG9pbnRlckV4Y2VwdGlvbiBlKSB7CisvLy8vCQkJCS8vIE5vdGhpbmcgdG8gZG8sIHNodXR0aW5nIGRvd24uLi4KKy8vLy8JCQl9IC8vIGNhdGNoIE51bGxQb2ludGVyRXhjZXB0aW9uCisvLy8vCQkJY2F0Y2ggKGZpbmFsIEVycm9yIG5jZGZlKSB7CisvLy8vCQkJCS8vIElmIHdlIGdldCB0aGlzIGV4Y2VwdGlvbiwgaXQgaXMgYmVjYXVzZSB3ZSdyZSBub3QgcnVubmluZyBpbgorLy8vLwkJCQkvLyBlY2xpcHNlLiBKdXN0IGZpcmUgdGhlIGV2ZW50LgorLy8vLwkJCQlmaXJlU2ltdWxhdGlvbkNoYW5nZWQoZXZlbnQpOworLy8vLwkJCX0gLy8gY2F0Y2gKKy8vCisvLwkJfSAvLyBzaW11bGF0aW9uQ2hhbmdlZAorLy8KKy8vCQkvKioKKy8vCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uam9icy5zaW11bGF0aW9uLklTaW11bGF0aW9uTGlzdGVuZXJTeW5jI3NpbXVsYXRpb25DaGFuZ2VkU3luYyhvcmcuZWNsaXBzZS5zdGVtLmpvYnMuc2ltdWxhdGlvbi5TaW11bGF0aW9uRXZlbnQpCisvLwkJICovCisvLwkJcHVibGljIHZvaWQgc2ltdWxhdGlvbkNoYW5nZWRTeW5jKGZpbmFsIFNpbXVsYXRpb25FdmVudCBldmVudCkgeworLy8JCQlmaXJlU2ltdWxhdGlvbkNoYW5nZWRTeW5jKGV2ZW50KTsKKy8vCQkJCisvLy8vCQkJdHJ5IHsKKy8vLy8JCQkJaWYgKCFEaXNwbGF5LmdldERlZmF1bHQoKS5pc0Rpc3Bvc2VkKCkpIHsKKy8vLy8JCQkJCS8vIFllcworLy8vLwkJCQkJRGlzcGxheS5nZXREZWZhdWx0KCkuc3luY0V4ZWMobmV3IFJ1bm5hYmxlKCkgeworLy8vLwkJCQkJCXB1YmxpYyB2b2lkIHJ1bigpIHsKKy8vLy8JCQkJCQkJZmlyZVNpbXVsYXRpb25DaGFuZ2VkU3luYyhldmVudCk7CisvLy8vCQkJCQkJfQorLy8vLwkJCQkJfSk7CisvLy8vCQkJCX0gLy8gaWYKKy8vLy8JCQl9IC8vIHRyeQorLy8vLwkJCWNhdGNoIChmaW5hbCBOdWxsUG9pbnRlckV4Y2VwdGlvbiBlKSB7CisvLy8vCQkJCWUucHJpbnRTdGFja1RyYWNlKCk7CisvLy8vCQkJfSAvLyBjYXRjaCBOdWxsUG9pbnRlckV4Y2VwdGlvbgorLy8vLwkJCWNhdGNoIChmaW5hbCBFcnJvciBuY2RmZSkgeworLy8vLwkJCQkvLyBJZiB3ZSBnZXQgdGhpcyBleGNlcHRpb24sIGl0IGlzIGJlY2F1c2Ugd2UncmUgbm90IHJ1bm5pbmcgaW4KKy8vLy8JCQkJLy8gZWNsaXBzZS4gSnVzdCBmaXJlIHRoZSBldmVudC4KKy8vLy8JCQkJZmlyZVNpbXVsYXRpb25DaGFuZ2VkU3luYyhldmVudCk7CisvLy8vCQkJfSAvLyBjYXRjaAorLy8JCX0gLy8gc2ltdWxhdGlvbkNoYW5nZWRTeW5jCisvLworLy8JCS8qKgorLy8JCSAqIEByZXR1cm4gdGhlIHNpbXVsYXRpb24KKy8vCQkgKi8KKy8vCQlwdWJsaWMgSVNpbXVsYXRpb24gZ2V0U2ltdWxhdGlvbigpIHsKKy8vCQkJcmV0dXJuIHNpbXVsYXRpb247CisvLwkJfQorLy8KKy8vCQlwdWJsaWMgdm9pZCBhZGRTaW11bGF0aW9uTGlzdGVuZXIoCisvLwkJCQlJU2ltdWxhdGlvbkxpc3RlbmVyIHNpbXVsYXRpb25MaXN0ZW5lciwgYm9vbGVhbiBoZWFkbGVzc1NhZmUpIHsKKy8vCQkJLy8gVE9ETyBBdXRvLWdlbmVyYXRlZCBtZXRob2Qgc3R1YgorLy8JCQkKKy8vCQl9CisvLworLy8JCXB1YmxpYyB2b2lkIGFkZFNpbXVsYXRpb25MaXN0ZW5lclN5bmMoCisvLwkJCQlJU2ltdWxhdGlvbkxpc3RlbmVyU3luYyBzaW11bGF0aW9uTGlzdGVuZXIsIGJvb2xlYW4gaGVhZGxlc3NTYWZlKSB7CisvLwkJCS8vIFRPRE8gQXV0by1nZW5lcmF0ZWQgbWV0aG9kIHN0dWIKKy8vCQkJCisvLwkJfQorLy8KKy8vCX0gLy8gU2ltdWxhdGlvbkFkYXB0ZXIKK30gLy8gU2ltdWxhdGlvbk1hbmFnZXIKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5qb2JzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2pvYnMvc2ltdWxhdGlvbi9TaW11bGF0aW9uTWFuYWdlckV2ZW50LmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uam9icy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9qb2JzL3NpbXVsYXRpb24vU2ltdWxhdGlvbk1hbmFnZXJFdmVudC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQyM2ZlM2QKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uam9icy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9qb2JzL3NpbXVsYXRpb24vU2ltdWxhdGlvbk1hbmFnZXJFdmVudC5qYXZhCkBAIC0wLDAgKzEsOTkgQEAKKy8vIFNpbXVsYXRpb25NYW5hZ2VyRXZlbnQuamF2YQorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmpvYnMuc2ltdWxhdGlvbjsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqYXZhLnV0aWwuRXZlbnRPYmplY3Q7CisKKy8qKgorICogVGhpcyBjbGFzcyByZXByZXNlbnRzIGFuIGV2ZW50IHRoYXQgaGFzIG9jY3VycmVkIGluIHRoZSBvcGVyYXRpb24gb2YgdGhlCisgKiBTaW11bGF0aW9uTWFuYWdlcgorICogCisgKiBAc2VlIFNpbXVsYXRpb25NYW5hZ2VyCisgKiBAc2VlIElTaW11bGF0aW9uTWFuYWdlckxpc3RlbmVyCisgKi8KK3B1YmxpYyBjbGFzcyBTaW11bGF0aW9uTWFuYWdlckV2ZW50IGV4dGVuZHMgRXZlbnRPYmplY3QgeworCisJLyoqCisJICogR2VuZXJhdGVkIHNlcmlhbGl6YXRpb24gSUQKKwkgKi8KKwl0cmFuc2llbnQgcHJpdmF0ZSBzdGF0aWMgZmluYWwgbG9uZyBzZXJpYWxWZXJzaW9uVUlEID0gNjUzMzY4Mjg0MjU0NzIzNTgwOUw7CisKKwkvKioKKwkgKiBUaGlzIGlzIGEgY29sbGVjdGlvbiBvZiB0aGUgU2ltdWxhdGlvbnMgYWRkZWQgdG8gdGhlIG1hbmFnZXIuCisJICovCisJdHJhbnNpZW50IHByaXZhdGUgZmluYWwgSVNpbXVsYXRpb25bXSBzaW11bGF0aW9uc0FkZGVkOworCisJLyoqCisJICogVGhpcyBpcyBhIGNvbGxlY3Rpb24gb2YgdGhlIFNpbXVsYXRpb25zIHJlbW92ZWQgZnJvbSB0aGUKKwkgKiBTaW11bGF0aW9uTWFuYWdlci4KKwkgKi8KKwl0cmFuc2llbnQgcHJpdmF0ZSBmaW5hbCBJU2ltdWxhdGlvbltdIHNpbXVsYXRpb25zUmVtb3ZlZDsKKworCS8qKgorCSAqIEBwYXJhbSBzb3VyY2UKKwkgKiAgICAgICAgICAgIHRoZSBzb3VyY2Ugb2YgdGhlIGV2ZW50CisJICogQHBhcmFtIHNpbXVsYXRpb25zQWRkZWQKKwkgKiAgICAgICAgICAgIHRoZSBjb2xsZWN0aW9uIG9mIFNpbXVsYXRpb25zIGFkZGVkIHRvIHRoZSBtYW5hZ2VyCisJICogQHBhcmFtIHNpbXVsYXRpb25zUmVtb3ZlZAorCSAqICAgICAgICAgICAgdGhlIGNvbGxlY3Rpb24gb2YgU2ltdWxhdGlvbnMgcmVtb3ZlZCBmcm9tIHRoZSBtYW5hZ2VyCisJICovCisJcHVibGljIFNpbXVsYXRpb25NYW5hZ2VyRXZlbnQoU2ltdWxhdGlvbk1hbmFnZXIgc291cmNlLAorCQkJSVNpbXVsYXRpb25bXSBzaW11bGF0aW9uc0FkZGVkLCBJU2ltdWxhdGlvbltdIHNpbXVsYXRpb25zUmVtb3ZlZCkgeworCQlzdXBlcihzb3VyY2UpOworCQl0aGlzLnNpbXVsYXRpb25zQWRkZWQgPSBzaW11bGF0aW9uc0FkZGVkLmNsb25lKCk7CisJCXRoaXMuc2ltdWxhdGlvbnNSZW1vdmVkID0gc2ltdWxhdGlvbnNSZW1vdmVkLmNsb25lKCk7CisJfSAvLyBTaW11bGF0aW9uTWFuYWdlckV2ZW50CisKKwkvKioKKwkgKiBAcmV0dXJuIHRoZSBzaW11bGF0aW9uc0FkZGVkCisJICovCisJcHVibGljIGZpbmFsIElTaW11bGF0aW9uW10gZ2V0U2ltdWxhdGlvbnNBZGRlZCgpIHsKKwkJcmV0dXJuIHNpbXVsYXRpb25zQWRkZWQuY2xvbmUoKTsKKwl9CisKKwkvKioKKwkgKiBAcmV0dXJuIHRoZSBzaW11bGF0aW9uc1JlbW92ZWQKKwkgKi8KKwlwdWJsaWMgZmluYWwgSVNpbXVsYXRpb25bXSBnZXRTaW11bGF0aW9uc1JlbW92ZWQoKSB7CisJCXJldHVybiBzaW11bGF0aW9uc1JlbW92ZWQuY2xvbmUoKTsKKwl9CisKKwkvKioKKwkgKiBAc2VlIGphdmEudXRpbC5FdmVudE9iamVjdCN0b1N0cmluZygpCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIFN0cmluZyB0b1N0cmluZygpIHsKKwkJZmluYWwgU3RyaW5nQnVpbGRlciBzYiA9IG5ldyBTdHJpbmdCdWlsZGVyKCJBZGRlZDpbIik7IC8vJE5PTi1OTFMtMSQKKwkJZm9yIChpbnQgaSA9IDA7IGkgPCBzaW11bGF0aW9uc0FkZGVkLmxlbmd0aDsgaSsrKSB7CisJCQlzYi5hcHBlbmQoIlwiIik7IC8vJE5PTi1OTFMtMSQKKwkJCXNiLmFwcGVuZChzaW11bGF0aW9uc0FkZGVkW2ldLnRvU3RyaW5nKCkpOworCQkJc2IuYXBwZW5kKCJcIiIpOyAvLyROT04tTkxTLTEkCisJCQlpZiAoaSArIDEgPCBzaW11bGF0aW9uc0FkZGVkLmxlbmd0aCkgeworCQkJCXNiLmFwcGVuZCgiLCAiKTsgLy8kTk9OLU5MUy0xJAorCQkJfQorCQl9CisJCXNiLmFwcGVuZCgiXSwgUmVtb3ZlZDpbIik7IC8vJE5PTi1OTFMtMSQKKwkJZm9yIChpbnQgaSA9IDA7IGkgPCBzaW11bGF0aW9uc1JlbW92ZWQubGVuZ3RoOyBpKyspIHsKKwkJCXNiLmFwcGVuZCgiXCIiKTsgLy8kTk9OLU5MUy0xJAorCQkJc2IuYXBwZW5kKHNpbXVsYXRpb25zUmVtb3ZlZFtpXS50b1N0cmluZygpKTsKKwkJCXNiLmFwcGVuZCgiXCIiKTsgLy8kTk9OLU5MUy0xJAorCQkJaWYgKGkgKyAxIDwgc2ltdWxhdGlvbnNSZW1vdmVkLmxlbmd0aCkgeworCQkJCXNiLmFwcGVuZCgiLCAiKTsgLy8kTk9OLU5MUy0xJAorCQkJfQorCQl9CisJCXNiLmFwcGVuZCgiXSIpOyAvLyROT04tTkxTLTEkCisKKwkJcmV0dXJuIHNiLnRvU3RyaW5nKCk7CisJfSAvLyB0b1N0cmluZworCit9IC8vIFNpbXVsYXRpb25NYW5hZ2VyRXZlbnQKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5qb2JzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2pvYnMvc2ltdWxhdGlvbi9TaW11bGF0aW9uU3RhdGUuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5qb2JzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2pvYnMvc2ltdWxhdGlvbi9TaW11bGF0aW9uU3RhdGUuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZTBlMzk3Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmpvYnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vam9icy9zaW11bGF0aW9uL1NpbXVsYXRpb25TdGF0ZS5qYXZhCkBAIC0wLDAgKzEsOTMgQEAKKy8vIFNpbXVsYXRpb25TdGF0ZS5qYXZhCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uam9icy5zaW11bGF0aW9uOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCisvKioKKyAqIFRoaXMgZW51bWVyYXRpb24gZGVmaW5lcyB0aGUgc3RhdGVzIHRoYXQgYSBTaW11bGF0aW9uIGNhbiBiZSBpbi4KKyAqIAorICogQHNlZSBTaW11bGF0aW9uRXZlbnQKKyAqIEBzZWUgSVNpbXVsYXRpb25MaXN0ZW5lcgorICogQHNlZSBJU2ltdWxhdGlvbgorICovCitwdWJsaWMgZW51bSBTaW11bGF0aW9uU3RhdGUgeworCS8qKgorCSAqIFdoZW4gdGhlIHNpbXVsYXRpb24gaGFzIGJlZW4gc2NoZWR1bGVkIGZvciBleGVjdXRpb24gYW5kIGlzIHJ1bm5pbmcuIFRoaXMKKwkgKiBpcyB0aGUgaW5pdGlhbCBzdGF0ZSBvZiBhbGwgbmV3bHkgY3JlYXRlZCBTaW11bGF0aW9ucy4KKwkgKiA8cD4KKwkgKiBUaGUgbmV4dCBzdGF0ZSBpcyB7QGxpbmsgI0NPTVBMRVRFRF9DWUNMRX0uCisJICogCisJICogQHNlZSAjQ09NUExFVEVEX0NZQ0xFCisJICovCisJUlVOTklORywKKworCS8qKgorCSAqIFdoZW4gdGhlIHNpbXVsYXRpb24gaGFzIGNvbXBsZXRlZCBvbmUgY3ljbGUgb2YgYSBzaW11bGF0aW9uIHNlcXVlbmNlLgorCSAqIDxwPgorCSAqIFRoZSBuZXh0IHN0YXRlcyBhcmUge0BsaW5rICNDT01QTEVURURfQ1lDTEV9LAorCSAqIHtAbGluayAjQ09NUExFVEVEX1NFUVVFTkNFfSwge0BsaW5rICNQQVVTRUR9LCB7QGxpbmsgI1JFU0VUfSwKKwkgKiB7QGxpbmsgI1NUT1BQRUR9LgorCSAqIAorCSAqIEBzZWUgI0NPTVBMRVRFRF9DWUNMRQorCSAqIEBzZWUgI0NPTVBMRVRFRF9TRVFVRU5DRQorCSAqIEBzZWUgI1BBVVNFRAorCSAqIEBzZWUgI1JFU0VUCisJICogQHNlZSAjU1RPUFBFRAorCSAqLworCUNPTVBMRVRFRF9DWUNMRSwKKworCS8qKgorCSAqIFdoZW4gdGhlIHNpbXVsYXRpb24gaGFzIGNvbXBsZXRlZCBhbGwgb2YgdGhlIHNlcXVlbmNlcyBpbiB0aGUgc2ltdWxhdGlvbi4KKwkgKiA8cD4KKwkgKiBUaGUgbmV4dCBzdGF0ZXMgYXJlIHtAbGluayAjQ09NUExFVEVEX0NZQ0xFfSwge0BsaW5rICNQQVVTRUR9LAorCSAqIHtAbGluayAjUkVTRVR9LCB7QGxpbmsgI1NUT1BQRUR9LgorCSAqIAorCSAqIEBzZWUgI1BBVVNFRAorCSAqIEBzZWUgI1JFU0VUCisJICogQHNlZSAjU1RPUFBFRAorCSAqLworCUNPTVBMRVRFRF9TRVFVRU5DRSwKKwkvKioKKwkgKiBXaGVuIHRoZSBzaW11bGF0aW9uIGlzIG5vdCBzY2hlZHVsZWQgZm9yIGV4ZWN1dGlvbiwgYnV0IGl0IHN0aWxsIHJldGFpbnMKKwkgKiBpdHMgc2NlbmFyaW8gd2hpY2ggbWFpbnRhaW5zIGl0cyBzdGF0ZSBpbmZvcm1hdGlvbi4gVGhlIFNpbXVsYXRpb24gY2FuIGJlCisJICogc2NoZWR1bGVkIGFnYWluIGZvciBleGVjdXRpb24uCisJICogPHA+CisJICogVGhlIG5leHQgc3RhdGVzIGFyZSB7QGxpbmsgI1JVTk5JTkd9LCB7QGxpbmsgI1JFU0VUfSwge0BsaW5rICNTVE9QUEVEfQorCSAqIAorCSAqIEBzZWUgI1JVTk5JTkcKKwkgKiBAc2VlICNSRVNFVAorCSAqIEBzZWUgI1NUT1BQRUQKKwkgKi8KKwlQQVVTRUQsCisKKwkvKioKKwkgKiBUaGUgU2ltdWxhdGlvbidzIFNjZW5hcmlvIGlzIGJlaW5nIHJlc2V0IHRvIGl0cyBpbml0aWFsIHN0YXRlLiBUaGUKKwkgKiBTaW11bGF0aW9uIGNhbiBiZSBzY2hlZHVsZWQgZm9yIGV4ZWN1dGlvbi4KKwkgKiA8cD4KKwkgKiBUaGUgbmV4dCBzdGF0ZXMgYXJlIHtAbGluayAjUEFVU0VEfSwge0BsaW5rICNTVE9QUEVEfQorCSAqIAorCSAqIEBzZWUgI1BBVVNFRAorCSAqIEBzZWUgI1NUT1BQRUQKKwkgKiAKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zY2VuYXJpby5TY2VuYXJpbyNyZXNldCgpCisJICovCisJUkVTRVQsCisKKwkvKioKKwkgKiBUaGUgc2ltdWxhdGlvbiBpcyBiZWluZyByZW1vdmVkIGZyb20gdGhlIHNpbXVsYXRpb24gbWFuYWdlciBhbmQgaXRzIHN0YXRlCisJICogaW5mb3JtYXRpb24gZGVzdHJveWVkLgorCSAqIAorCSAqIEBzZWUgU2ltdWxhdGlvbk1hbmFnZXIKKwkgKi8KKwlTVE9QUEVECit9IC8vIFNpbXVsYXRpb25TdGF0ZQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmpvYnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vam9icy9zaW11bGF0aW9uL21lc3NhZ2VzLnByb3BlcnRpZXMgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uam9icy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9qb2JzL3NpbXVsYXRpb24vbWVzc2FnZXMucHJvcGVydGllcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MGQyY2E4Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmpvYnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vam9icy9zaW11bGF0aW9uL21lc3NhZ2VzLnByb3BlcnRpZXMKQEAgLTAsMCArMSwyNCBAQAorIyBtZXNzYWdlcy5wcm9wZXJ0aWVzCisjCisjIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorIyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyMgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyMgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorIyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisjICoKKyMgKiBDb250cmlidXRvcnM6CisjICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorIyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjIFNpbXVsYXRpb25NYW5hZ2VyCitTaW1NZ3IuRGVzZXJpYWxpemF0aW9uX0Vycm9yPVByb2JsZW0gcmVhZGluZyBpbiBhIHNlcmlhbGl6ZWQgU2NlbmFyaW8gZnJvbSBVUkkgXCJ7MH1cIgorU2ltTWdyLlN0YXJ0X1NpbT1TdGFydGluZyBzaW11bGF0aW9uCitTaW1NZ3IuQ3J0U2ltID0gQ3JlYXRpbmcgU2ltdWxhdGlvbgorU2ltTWdyLlJ1biA9IFJ1bm5pbmcgU2ltdWxhdGlvbgorCisjIFNpbXVsYXRpb24KK1NpbS5UaW1lX0Vycm9yPVRpbWUgdG8gc3RvcCBiZWZvcmUgc3RhcnRpbmcuICBDdXJyZW50IHRpbWUgaXM6IHswfSwgU3RvcHBpbmcgdGltZSBpczogezF9CitTaW0uSUVyciA9IEFuIGludGVybmFsIGVycm9yIG9jY3VycmVkIHJ1bm5pbmcgInswfSIuCitTaW0uTWlzc2luZ1NlcSA9IFRoZSBTY2VuYXJpbyAiezB9IiBjYW5ub3QgcnVuIGJlY2F1c2UgaXQgZG9lcyBub3QgaGF2ZSBhIFNlcXVlbmNlci4KK1NpbS5NaXNzaW5nTW9kZWwgPSBUaGUgU2NlbmFyaW8gInswfSIgY2Fubm90IHJ1biBiZWNhdXNlIGl0IGRvZXMgbm90IGhhdmUgYSBNb2RlbC4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uam9icy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9qb2JzL3NpbXVsYXRpb24vbWVzc2FnZXNfZGUucHJvcGVydGllcyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5qb2JzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2pvYnMvc2ltdWxhdGlvbi9tZXNzYWdlc19kZS5wcm9wZXJ0aWVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZkMjcyM2YKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uam9icy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9qb2JzL3NpbXVsYXRpb24vbWVzc2FnZXNfZGUucHJvcGVydGllcwpAQCAtMCwwICsxLDI0IEBACisjIG1lc3NhZ2VzLnByb3BlcnRpZXMKKyMKKyMgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyMgKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisjICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworIyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorIyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisjICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyMgKgorIyAqIENvbnRyaWJ1dG9yczoKKyMgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisjICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyMgU2ltdWxhdGlvbk1hbmFnZXIKK1NpbU1nci5EZXNlcmlhbGl6YXRpb25fRXJyb3I9UHJvYmxlbSBiZWltIExlc2VuIGluIGVpbmVtIHNlcmlhbGlzaWVydGVuIFN6ZW5hcmlvIHZvbiBVUkkgXCAiezB9IFwiCitTaW1NZ3IuU3RhcnRfU2ltPVNpbXVsYXRpb24gd2lyZCBnZXN0YXJ0ZXQKK1NpbU1nci5DcnRTaW09U2ltdWxhdGlvbiB3aXJkIGVyc3RlbGx0CitTaW1NZ3IuUnVuPUxhdWZlbmRlIFNpbXVsYXRpb24KKworIyBTaW11bGF0aW9uCitTaW0uVGltZV9FcnJvcj1UaW1lIHZvciBkZW0gU3RhcnQgenUgc3RvcHBlbi4gQWt0dWVsbGUgVWhyemVpdDogezB9LCBOYWNobGF1ZnplaXQgaXN0OiB7MX0KK1NpbS5JRXJyPUVpbiBpbnRlcm5lciBGZWhsZXIgYXVmZ2V0cmV0ZW4gcnVubmluZyAiezB9Ii4KK1NpbS5NaXNzaW5nU2VxPURhcyBTemVuYXJpbyAiezB9IiBrYW5uIG5pY2h0IGF1c2dlZlx1MDBmY2hydCB3ZXJkZW4sIHdlaWwgZXMga2VpbmVuIFNlcXVlbmNlciBiZXNpdHp0LgorU2ltLk1pc3NpbmdNb2RlbD1EYXMgU3plbmFyaW8gInswfSIga2FubiBuaWNodCBhdXNnZWZcdTAwZmNocnQgd2VyZGVuLCB3ZWlsIGVzIGtlaW4gTW9kZWxsIGJlc2l0enQuCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uam9icy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9qb2JzL3NpbXVsYXRpb24vbWVzc2FnZXNfa3IucHJvcGVydGllcyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5qb2JzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2pvYnMvc2ltdWxhdGlvbi9tZXNzYWdlc19rci5wcm9wZXJ0aWVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM1MjNmMzAKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uam9icy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9qb2JzL3NpbXVsYXRpb24vbWVzc2FnZXNfa3IucHJvcGVydGllcwpAQCAtMCwwICsxLDI0IEBACisjIG1lc3NhZ2VzLnByb3BlcnRpZXMKKyMKKyMgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyMgKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisjICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworIyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorIyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisjICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyMgKgorIyAqIENvbnRyaWJ1dG9yczoKKyMgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisjICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyMgU2ltdWxhdGlvbk1hbmFnZXIKK1NpbU1nci5EZXNlcmlhbGl6YXRpb25fRXJyb3I9VVJJXHVjNWQwXHVjMTFjIFx1YzVmMFx1YzE4ZCBcdWMyZGNcdWIwOThcdWI5YWNcdWM2MjQgXHVjNzdkXHViMjk0IFx1YzkxMSBcdWJiMzhcdWM4MWMgXHViYzFjXHVjMGRkIFwgInswfSBcIgorU2ltTWdyLlN0YXJ0X1NpbT1cdWMyZGNcdWJiYWNcdWI4MDhcdWM3NzRcdWMxNTggXHVjMmRjXHVjNzkxCitTaW1NZ3IuQ3J0U2ltPVx1YzJkY1x1YmJhY1x1YjgwOFx1Yzc3NFx1YzE1OCBcdWI5Y2NcdWI0ZTRcdWFlMzAKK1NpbU1nci5SdW49XHVjMmRjXHViYmFjXHViODA4XHVjNzc0XHVjMTU4IFx1YzJlNFx1ZDU4OSBcdWM5MTEKKworIyBTaW11bGF0aW9uCitTaW0uVGltZV9FcnJvcj1cdWMyZGNcdWM3OTFcdWQ1NThcdWFlMzAgXHVjODA0XHVjNWQwIFx1YzkxMVx1YjJlOCBcdWMyZGNcdWFjMDQuIFx1ZDYwNFx1YzdhYyBcdWMyZGNcdWFjMDRcdWM3NDA6IHswfSwgXHVjOTExXHVjOWMwIFx1YzJkY1x1YWMwNFx1Yzc0MDogezF9CitTaW0uSUVycj0iezB9Ilx1YzJlNFx1ZDU4OSBcdWM5MTEgXHViMGI0XHViZDgwIFx1YzYyNFx1Yjk1OCBcdWJjMWNcdWMwZGQKK1NpbS5NaXNzaW5nU2VxPVx1YzJkY1x1ZDAwMFx1YzExY1x1YWMwMCBcdWM1YzZcdWFlMzAgXHViNTRjXHViYjM4XHVjNWQwIFx1YzJkY1x1YjA5OFx1YjlhY1x1YzYyNCAiezB9Ilx1Yjk3YyBcdWMyZTRcdWQ1ODlcdWQ1NjAgXHVjMjE4IFx1YzVjNlx1Yzc0Yy4KK1NpbS5NaXNzaW5nTW9kZWw9XHViYWE4XHViMzc4XHVjNzc0IFx1YzVjNlx1YWUzMCBcdWI1NGNcdWJiMzhcdWM1ZDAgXHVjMmRjXHViMDk4XHViOWFjXHVjNjI0ICJ7MH0iXHVjNzQ0IFx1YzJlNFx1ZDU4OVx1ZDU2MCBcdWMyMTggXHVjNWM2XHVjNzRjLgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmpvYnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vam9icy9zaW11bGF0aW9uL21lc3NhZ2VzX3poLnByb3BlcnRpZXMgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uam9icy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9qb2JzL3NpbXVsYXRpb24vbWVzc2FnZXNfemgucHJvcGVydGllcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMjExODVhCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmpvYnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vam9icy9zaW11bGF0aW9uL21lc3NhZ2VzX3poLnByb3BlcnRpZXMKQEAgLTAsMCArMSwyNCBAQAorIyBtZXNzYWdlcy5wcm9wZXJ0aWVzCisjCisjIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorIyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyMgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyMgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorIyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisjICoKKyMgKiBDb250cmlidXRvcnM6CisjICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorIyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjIFNpbXVsYXRpb25NYW5hZ2VyCitTaW1NZ3IuRGVzZXJpYWxpemF0aW9uX0Vycm9yPVx1NTcyOFx1NGUwMFx1NGUyYVx1NWU4Zlx1NTIxN1x1NTMxNlx1NzY4NFx1NjViOVx1Njg0OFx1NGVjZVVSSSBcXHUyMDFjezB9IFxcdTIwMWRcdThiZmJcdTUzZDZcdTk1ZWVcdTk4OTgKK1NpbU1nci5TdGFydF9TaW09XHU1ZjAwXHU1OWNiXHU2YTIxXHU2MmRmCitTaW1NZ3IuQ3J0U2ltPVx1NTIxYlx1NWVmYVx1NmEyMVx1NjJkZgorU2ltTWdyLlJ1bj1cdThmZDBcdTg4NGNcdTRlZmZcdTc3MWYKKworIyBTaW11bGF0aW9uCitTaW0uVGltZV9FcnJvcj1cdTY1ZjZcdTk1ZjRcdTUwNWNcdTZiNjJcdWZmMGNcdTcxMzZcdTU0MGVcdTUxOGRcdTU0MmZcdTUyYThcdTMwMDJcdTVmNTNcdTUyNGRcdTY1ZjZcdTk1ZjRcdTRlM2FcdWZmMWF7MH1cdWZmMGNcdTUwNWNcdTZiNjJcdTY1ZjZcdTk1ZjRcdTRlM2FcdWZmMWF7MX0KK1NpbS5JRXJyPVx1NWY1M1x1OGZkMFx1ODg0YyJ7MH0iXHU1M2QxXHU3NTFmXHU3Njg0XHU1MTg1XHU5MGU4XHU5NTE5XHU4YmVmCitTaW0uTWlzc2luZ1NlcT1cdThiZTVcdTY1YjlcdTY4NDhcdTIwMWN7MH1cdTIwMWRcdTY1ZTBcdTZjZDVcdThmZDBcdTg4NGNcdWZmMGNcdTU2ZTBcdTRlM2FcdTViODNcdTZjYTFcdTY3MDlcdTRlMDBcdTRlMmFcdTVlOGZcdTUyMTdcdTU2NjhcdTMwMDIKK1NpbS5NaXNzaW5nTW9kZWw9XHU4YmU1XHU2NWI5XHU2ODQ4XHUyMDFjezB9XHUyMDFkXHU2NWUwXHU2Y2Q1XHU4ZmQwXHU4ODRjXHVmZjBjXHU1NmUwXHU0ZTNhXHU1YjgzXHU2Y2ExXHU2NzA5XHU0ZTAwXHU0ZTJhXHU2YTIxXHU1NzhiXHUzMDAyCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy5jc3YvLmNsYXNzcGF0aCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzLmNzdi8uY2xhc3NwYXRoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEyMWU1MjcKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy5jc3YvLmNsYXNzcGF0aApAQCAtMCwwICsxLDcgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8Y2xhc3NwYXRoPgorCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJzcmMiIHBhdGg9InNyYyIvPgorCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJjb24iIHBhdGg9Im9yZy5lY2xpcHNlLmpkdC5sYXVuY2hpbmcuSlJFX0NPTlRBSU5FUi9vcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwuZGVidWcudWkubGF1bmNoZXIuU3RhbmRhcmRWTVR5cGUvSmF2YVNFLTEuNiIvPgorCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJjb24iIHBhdGg9Im9yZy5lY2xpcHNlLnBkZS5jb3JlLnJlcXVpcmVkUGx1Z2lucyIvPgorCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJvdXRwdXQiIHBhdGg9ImJpbiIvPgorPC9jbGFzc3BhdGg+CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy5jc3YvLnByb2plY3QgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy5jc3YvLnByb2plY3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmM5OGNhMQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzLmNzdi8ucHJvamVjdApAQCAtMCwwICsxLDI4IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPHByb2plY3REZXNjcmlwdGlvbj4KKwk8bmFtZT5vcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMuY3N2PC9uYW1lPgorCTxjb21tZW50PjwvY29tbWVudD4KKwk8cHJvamVjdHM+CisJPC9wcm9qZWN0cz4KKwk8YnVpbGRTcGVjPgorCQk8YnVpbGRDb21tYW5kPgorCQkJPG5hbWU+b3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YWJ1aWxkZXI8L25hbWU+CisJCQk8YXJndW1lbnRzPgorCQkJPC9hcmd1bWVudHM+CisJCTwvYnVpbGRDb21tYW5kPgorCQk8YnVpbGRDb21tYW5kPgorCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLk1hbmlmZXN0QnVpbGRlcjwvbmFtZT4KKwkJCTxhcmd1bWVudHM+CisJCQk8L2FyZ3VtZW50cz4KKwkJPC9idWlsZENvbW1hbmQ+CisJCTxidWlsZENvbW1hbmQ+CisJCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuU2NoZW1hQnVpbGRlcjwvbmFtZT4KKwkJCTxhcmd1bWVudHM+CisJCQk8L2FyZ3VtZW50cz4KKwkJPC9idWlsZENvbW1hbmQ+CisJPC9idWlsZFNwZWM+CisJPG5hdHVyZXM+CisJCTxuYXR1cmU+b3JnLmVjbGlwc2UucGRlLlBsdWdpbk5hdHVyZTwvbmF0dXJlPgorCQk8bmF0dXJlPm9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFuYXR1cmU8L25hdHVyZT4KKwk8L25hdHVyZXM+Cis8L3Byb2plY3REZXNjcmlwdGlvbj4KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzLmNzdi8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy5jc3YvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRkNGY3M2UKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy5jc3YvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzCkBAIC0wLDAgKzEsOCBAQAorI01vbiBKdW4gMjcgMDg6NTc6NDMgUERUIDIwMTEKK2VjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb2RlZ2VuLmlubGluZUpzckJ5dGVjb2RlPWVuYWJsZWQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvZGVnZW4udGFyZ2V0UGxhdGZvcm09MS42CitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb21wbGlhbmNlPTEuNgorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5hc3NlcnRJZGVudGlmaWVyPWVycm9yCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmVudW1JZGVudGlmaWVyPWVycm9yCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5zb3VyY2U9MS42CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy5jc3YvTUVUQS1JTkYvTUFOSUZFU1QuTUYgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy5jc3YvTUVUQS1JTkYvTUFOSUZFU1QuTUYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWFhZDZjOQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzLmNzdi9NRVRBLUlORi9NQU5JRkVTVC5NRgpAQCAtMCwwICsxLDMxIEBACitNYW5pZmVzdC1WZXJzaW9uOiAxLjAKK0J1bmRsZS1NYW5pZmVzdFZlcnNpb246IDIKK0J1bmRsZS1OYW1lOiAlcGx1Z2luTmFtZQorQnVuZGxlLVN5bWJvbGljTmFtZTogb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzLmNzdjtzaW5nbGV0b246PXRydWUKK0J1bmRsZS1WZXJzaW9uOiAxLjAuMC5xdWFsaWZpZXIKK0J1bmRsZS1DbGFzc1BhdGg6IC4KK0J1bmRsZS1BY3RpdmF0b3I6IG9yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy5jc3YucHJvdmlkZXIuQ1NWTG9nZ2VyRWRpdFBsdWdpbiRJbXBsZW1lbnRhdGlvbgorQnVuZGxlLVZlbmRvcjogJXByb3ZpZGVyTmFtZQorQnVuZGxlLUxvY2FsaXphdGlvbjogcGx1Z2luCitCdW5kbGUtUmVxdWlyZWRFeGVjdXRpb25FbnZpcm9ubWVudDogSjJTRS0xLjUKK1JlcXVpcmUtQnVuZGxlOiBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUsCisgb3JnLmVjbGlwc2Uuc3RlbS5qb2JzLAorIG9yZy5lY2xpcHNlLnN0ZW0udWksCisgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucywgCisgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLCAKKyBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMsIAorIG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzO3Zpc2liaWxpdHk6PXJlZXhwb3J0LAorIG9yZy5lY2xpcHNlLmVtZi5lY29yZTt2aXNpYmlsaXR5Oj1yZWV4cG9ydCwKKyBvcmcuZWNsaXBzZS5zdGVtLmNvcmU7dmlzaWJpbGl0eTo9cmVleHBvcnQsCisgb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzO3Zpc2liaWxpdHk6PXJlZXhwb3J0LAorIG9yZy5lY2xpcHNlLmVtZi5lZGl0O3Zpc2liaWxpdHk6PXJlZXhwb3J0LAorIG9yZy5lY2xpcHNlLmVtZi5lY29yZS5lZGl0O3Zpc2liaWxpdHk6PXJlZXhwb3J0LAorIG9yZy5lY2xpcHNlLmVtZi5lY29yZS54bWk7dmlzaWJpbGl0eTo9cmVleHBvcnQsCisgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWk7dmlzaWJpbGl0eTo9cmVleHBvcnQsCisgb3JnLmVjbGlwc2UudWkuaWRlO3Zpc2liaWxpdHk6PXJlZXhwb3J0CitCdW5kbGUtQWN0aXZhdGlvblBvbGljeTogbGF6eQorRXhwb3J0LVBhY2thZ2U6IG9yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy5jc3YsCisgb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzLmNzdi5pbXBsLAorIG9yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy5jc3YucHJlc2VudGF0aW9uLAorIG9yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy5jc3YucHJvdmlkZXIsCisgb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzLmNzdi51dGlsCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy5jc3YvYnVpbGQucHJvcGVydGllcyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzLmNzdi9idWlsZC5wcm9wZXJ0aWVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEwYzg3YTAKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy5jc3YvYnVpbGQucHJvcGVydGllcwpAQCAtMCwwICsxLDE0IEBACisKKyMgPGNvcHlyaWdodD4KKyMgPC9jb3B5cmlnaHQ+CisjCisjICRJZCQKKworYmluLmluY2x1ZGVzID0gLixcCisgICAgICAgICAgICAgICBpY29ucy8sXAorICAgICAgICAgICAgICAgTUVUQS1JTkYvLFwKKyAgICAgICAgICAgICAgIHBsdWdpbi54bWwsXAorICAgICAgICAgICAgICAgcGx1Z2luLnByb3BlcnRpZXMKK2phcnMuY29tcGlsZS5vcmRlciA9IC4KK3NvdXJjZS4uID0gc3JjLworb3V0cHV0Li4gPSBiaW4KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzLmNzdi9pY29ucy9mdWxsL29iajE2L0NTVkxvZ2dlci5naWYgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy5jc3YvaWNvbnMvZnVsbC9vYmoxNi9DU1ZMb2dnZXIuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM2NzNhNTIKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy5jc3YvaWNvbnMvZnVsbC9vYmoxNi9DU1ZMb2dnZXIuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzLmNzdi9pY29ucy9mdWxsL29iajE2L0NTVk1vZGVsRmlsZS5naWYgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy5jc3YvaWNvbnMvZnVsbC9vYmoxNi9DU1ZNb2RlbEZpbGUuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI3YzFjZTUKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy5jc3YvaWNvbnMvZnVsbC9vYmoxNi9DU1ZNb2RlbEZpbGUuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzLmNzdi9pY29ucy9mdWxsL3dpemJhbi9OZXdDU1YuZ2lmIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMuY3N2L2ljb25zL2Z1bGwvd2l6YmFuL05ld0NTVi5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODRkMTcwZAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzLmNzdi9pY29ucy9mdWxsL3dpemJhbi9OZXdDU1YuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzLmNzdi9tb2RlbHMvQ1NWTG9nZ2VyLmVjb3JlIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMuY3N2L21vZGVscy9DU1ZMb2dnZXIuZWNvcmUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjIyYTBlMQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzLmNzdi9tb2RlbHMvQ1NWTG9nZ2VyLmVjb3JlCkBAIC0wLDAgKzEsMTcgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8ZWNvcmU6RVBhY2thZ2UgeG1pOnZlcnNpb249IjIuMCIKKyAgICB4bWxuczp4bWk9Imh0dHA6Ly93d3cub21nLm9yZy9YTUkiIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiCisgICAgeG1sbnM6ZWNvcmU9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDIvRWNvcmUiIG5hbWU9ImNzdiIKKyAgICBuc1VSST0iaHR0cDovL29yZy9lY2xpcHNlL3N0ZW0vbG9nZ2Vycy9jc3YiIG5zUHJlZml4PSJvcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMuY3N2Lm1vZGVsIj4KKyAgPGVDbGFzc2lmaWVycyB4c2k6dHlwZT0iZWNvcmU6RUNsYXNzIiBuYW1lPSJDU1ZMb2dnZXIiIGVTdXBlclR5cGVzPSIuLi8uLi9vcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMvbW9kZWxzL1NpbXVsYXRpb25Mb2dnZXIuZWNvcmUjLy9TeW5jaHJvbm91c0xvZ2dlciI+CisgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVBdHRyaWJ1dGUiIG5hbWU9InVzZURlZmF1bHRMb2dEaXJlY3RvcnkiCisgICAgICAgIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9lbWYvMjAwMi9FY29yZSMvL0VCb29sZWFuIiBkZWZhdWx0VmFsdWVMaXRlcmFsPSJ0cnVlIi8+CisgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVBdHRyaWJ1dGUiIG5hbWU9ImxvZ0RpcmVjdG9yeSIgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2VtZi8yMDAyL0Vjb3JlIy8vRVN0cmluZyIvPgorICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJkZWxpbWV0ZXIiIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9lbWYvMjAwMi9FY29yZSMvL0VTdHJpbmciCisgICAgICAgIGRlZmF1bHRWYWx1ZUxpdGVyYWw9IiwiLz4KKyAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0ibG9nUnVuUGFyYW1ldGVycyIgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2VtZi8yMDAyL0Vjb3JlIy8vRUJvb2xlYW4iCisgICAgICAgIGRlZmF1bHRWYWx1ZUxpdGVyYWw9InRydWUiLz4KKyAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0iYnVmZmVyU2l6ZSIgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2VtZi8yMDAyL0Vjb3JlIy8vRUludCIKKyAgICAgICAgZGVmYXVsdFZhbHVlTGl0ZXJhbD0iMTAyNCIvPgorICA8L2VDbGFzc2lmaWVycz4KKzwvZWNvcmU6RVBhY2thZ2U+CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy5jc3YvbW9kZWxzL0NTVkxvZ2dlci5nZW5tb2RlbCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzLmNzdi9tb2RlbHMvQ1NWTG9nZ2VyLmdlbm1vZGVsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA1MDM5MzQKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy5jc3YvbW9kZWxzL0NTVkxvZ2dlci5nZW5tb2RlbApAQCAtMCwwICsxLDIyIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPGdlbm1vZGVsOkdlbk1vZGVsIHhtaTp2ZXJzaW9uPSIyLjAiCisgICAgeG1sbnM6eG1pPSJodHRwOi8vd3d3Lm9tZy5vcmcvWE1JIiB4bWxuczplY29yZT0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9lbWYvMjAwMi9FY29yZSIKKyAgICB4bWxuczpnZW5tb2RlbD0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9lbWYvMjAwMi9HZW5Nb2RlbCIgbW9kZWxEaXJlY3Rvcnk9Ii9vcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMuY3N2L3NyYyIKKyAgICBlZGl0RGlyZWN0b3J5PSIvb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzLmNzdi9zcmMiIGVkaXRvckRpcmVjdG9yeT0iL29yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy5jc3Yvc3JjIgorICAgIG1vZGVsUGx1Z2luSUQ9Im9yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy5jc3YiIG1vZGVsTmFtZT0iQ1NWTG9nZ2VyIiBlZGl0UGx1Z2luQ2xhc3M9Im9yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy5jc3YubW9kZWwucHJvdmlkZXIuQ1NWTG9nZ2VyRWRpdFBsdWdpbiIKKyAgICBlZGl0b3JQbHVnaW5DbGFzcz0ib3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzLmNzdi5tb2RlbC5wcmVzZW50YXRpb24uQ1NWTG9nZ2VyRWRpdG9yUGx1Z2luIgorICAgIHRlc3RTdWl0ZUNsYXNzPSJvcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMuY3N2LnRlc3RzLkNTVkxvZ2dlckFsbFRlc3RzIiBpbXBvcnRlcklEPSJvcmcuZWNsaXBzZS5lbWYuaW1wb3J0ZXIuZWNvcmUiCisgICAgY29tcGxpYW5jZUxldmVsPSI1LjAiIGVkaXRQbHVnaW5JRD0ib3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzLmNzdiIgZWRpdG9yUGx1Z2luSUQ9Im9yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy5jc3YiCisgICAgcnVudGltZVZlcnNpb249IjIuNiIgdXNlZEdlblBhY2thZ2VzPSIuLi8uLi9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvbW9kZWwvY29yZS5nZW5tb2RlbCMvL2NvbW1vbiAuLi8uLi9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvbW9kZWwvY29yZS5nZW5tb2RlbCMvL2dyYXBoIC4uLy4uL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9tb2RlbC9jb3JlLmdlbm1vZGVsIy8vbW9kZWwgLi4vLi4vb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL21vZGVsL2NvcmUuZ2VubW9kZWwjLy9tb2RpZmllciAuLi8uLi9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvbW9kZWwvY29yZS5nZW5tb2RlbCMvL3NjZW5hcmlvIC4uLy4uL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9tb2RlbC9jb3JlLmdlbm1vZGVsIy8vc2VxdWVuY2VyIC4uLy4uL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9tb2RlbC9jb3JlLmdlbm1vZGVsIy8vc29sdmVyIC4uLy4uL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9tb2RlbC9jb3JlLmdlbm1vZGVsIy8vbG9nZ2VyIHBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2UuZW1mLmVjb3JlL21vZGVsL0Vjb3JlLmdlbm1vZGVsIy8vZWNvcmUgLi4vLi4vb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzL21vZGVscy9TaW11bGF0aW9uTG9nZ2VyLmdlbm1vZGVsIy8vbG9nZ2VycyI+CisgIDxmb3JlaWduTW9kZWw+Q1NWTG9nZ2VyLmVjb3JlPC9mb3JlaWduTW9kZWw+CisgIDxnZW5QYWNrYWdlcyBwcmVmaXg9IkNTViIgYmFzZVBhY2thZ2U9Im9yZy5lY2xpcHNlLnN0ZW0ubG9nZ2VycyIgZGlzcG9zYWJsZVByb3ZpZGVyRmFjdG9yeT0idHJ1ZSIKKyAgICAgIGVjb3JlUGFja2FnZT0iQ1NWTG9nZ2VyLmVjb3JlIy8iPgorICAgIDxnZW5DbGFzc2VzIGVjb3JlQ2xhc3M9IkNTVkxvZ2dlci5lY29yZSMvL0NTVkxvZ2dlciI+CisgICAgICA8Z2VuRmVhdHVyZXMgY3JlYXRlQ2hpbGQ9ImZhbHNlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVBdHRyaWJ1dGUgQ1NWTG9nZ2VyLmVjb3JlIy8vQ1NWTG9nZ2VyL3VzZURlZmF1bHRMb2dEaXJlY3RvcnkiLz4KKyAgICAgIDxnZW5GZWF0dXJlcyBjcmVhdGVDaGlsZD0iZmFsc2UiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RUF0dHJpYnV0ZSBDU1ZMb2dnZXIuZWNvcmUjLy9DU1ZMb2dnZXIvbG9nRGlyZWN0b3J5Ii8+CisgICAgICA8Z2VuRmVhdHVyZXMgY3JlYXRlQ2hpbGQ9ImZhbHNlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVBdHRyaWJ1dGUgQ1NWTG9nZ2VyLmVjb3JlIy8vQ1NWTG9nZ2VyL2RlbGltZXRlciIvPgorICAgICAgPGdlbkZlYXR1cmVzIGNyZWF0ZUNoaWxkPSJmYWxzZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFQXR0cmlidXRlIENTVkxvZ2dlci5lY29yZSMvL0NTVkxvZ2dlci9sb2dSdW5QYXJhbWV0ZXJzIi8+CisgICAgICA8Z2VuRmVhdHVyZXMgY3JlYXRlQ2hpbGQ9ImZhbHNlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVBdHRyaWJ1dGUgQ1NWTG9nZ2VyLmVjb3JlIy8vQ1NWTG9nZ2VyL2J1ZmZlclNpemUiLz4KKyAgICA8L2dlbkNsYXNzZXM+CisgIDwvZ2VuUGFja2FnZXM+Cis8L2dlbm1vZGVsOkdlbk1vZGVsPgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMuY3N2L3BsdWdpbi5wcm9wZXJ0aWVzIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMuY3N2L3BsdWdpbi5wcm9wZXJ0aWVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAyOWFhYmIKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy5jc3YvcGx1Z2luLnByb3BlcnRpZXMKQEAgLTAsMCArMSw2NSBAQAorCisjIDxjb3B5cmlnaHQ+CisjIDwvY29weXJpZ2h0PgorIworIyAkSWQkCisKK3BsdWdpbk5hbWUgPSBTVEVNIENTViBMb2dnZXIKK3Byb3ZpZGVyTmFtZSA9IEVjbGlwc2Uub3JnCisKK2RjX2lkZW50aWZpZXI9b3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzLmNzdi5kdWJsaW5fY29yZQorZGNfcHVibGlzaGVyID0gVGhlIEVjbGlwc2UgRm91bmRhdGlvbgorZGNfbGljZW5zZSA9IEVjbGlwc2UgUHVibGljIExpY2Vuc2UgKEVQTCkKK2RjX3RpdGxlID0gQ1NWIEZpbGUgTG9nZ2VyCitkY19kZXNjciA9IFNURU0gbG9nZ2VyIGZvciB3cml0aW5nIHRoZSByZXN1bHRzIG9mIGEgc2ltdWxhdGlvbiB0byBhbiBlbnRyeS1kZWxpbWl0ZWQgdGV4dCBmaWxlCisKKworX1VJX0NyZWF0ZUNoaWxkX3RleHQgPSB7MH0KK19VSV9DcmVhdGVDaGlsZF90ZXh0MiA9IHsxfSB7MH0KK19VSV9DcmVhdGVDaGlsZF90ZXh0MyA9IHsxfQorX1VJX0NyZWF0ZUNoaWxkX3Rvb2x0aXAgPSBDcmVhdGUgTmV3IHswfSBVbmRlciB7MX0gRmVhdHVyZQorX1VJX0NyZWF0ZUNoaWxkX2Rlc2NyaXB0aW9uID0gQ3JlYXRlIGEgbmV3IGNoaWxkIG9mIHR5cGUgezB9IGZvciB0aGUgezF9IGZlYXR1cmUgb2YgdGhlIHNlbGVjdGVkIHsyfS4KK19VSV9DcmVhdGVTaWJsaW5nX2Rlc2NyaXB0aW9uID0gQ3JlYXRlIGEgbmV3IHNpYmxpbmcgb2YgdHlwZSB7MH0gZm9yIHRoZSBzZWxlY3RlZCB7Mn0sIHVuZGVyIHRoZSB7MX0gZmVhdHVyZSBvZiB0aGVpciBwYXJlbnQuCitfVUlfUHJvcGVydHlEZXNjcmlwdG9yX2Rlc2NyaXB0aW9uID0gVGhlIHswfSBvZiB0aGUgezF9CitfVUlfQ1NWTG9nZ2VyX3R5cGUgPSBMb2dnZXIKK19VSV9Vbmtub3duX3R5cGUgPSBPYmplY3QKK19VSV9Vbmtub3duX2RhdGF0eXBlPSBWYWx1ZQorX1VJX0NTVkxvZ2dlcl91c2VEZWZhdWx0TG9nRGlyZWN0b3J5X2ZlYXR1cmUgPSBVc2UgRGVmYXVsdCBMb2cgRGlyZWN0b3J5CitfVUlfQ1NWTG9nZ2VyX2xvZ0RpcmVjdG9yeV9mZWF0dXJlID0gTG9nIERpcmVjdG9yeQorX1VJX0NTVkxvZ2dlcl9kZWxpbWV0ZXJfZmVhdHVyZSA9IERlbGltZXRlcgorX1VJX1Vua25vd25fZmVhdHVyZSA9IFVuc3BlY2lmaWVkCitfVUlfQ1NWRWRpdG9yX21lbnUgPSAmQ1NWIEVkaXRvcgorX1VJX0NyZWF0ZUNoaWxkX21lbnVfaXRlbSA9ICZOZXcgQ2hpbGQKK19VSV9DcmVhdGVTaWJsaW5nX21lbnVfaXRlbSA9IE4mZXcgU2libGluZworX1VJX1Nob3dQcm9wZXJ0aWVzVmlld19tZW51X2l0ZW0gPSBTaG93ICZQcm9wZXJ0aWVzIFZpZXcKK19VSV9SZWZyZXNoVmlld2VyX21lbnVfaXRlbSA9ICZSZWZyZXNoCitfVUlfU2VsZWN0aW9uUGFnZV9sYWJlbCA9IFNlbGVjdGlvbgorX1VJX1BhcmVudFBhZ2VfbGFiZWwgPSBQYXJlbnQKK19VSV9MaXN0UGFnZV9sYWJlbCA9IExpc3QKK19VSV9UcmVlUGFnZV9sYWJlbCA9IFRyZWUKK19VSV9UYWJsZVBhZ2VfbGFiZWwgPSBUYWJsZQorX1VJX1RyZWVXaXRoQ29sdW1uc1BhZ2VfbGFiZWwgPSBUcmVlIHdpdGggQ29sdW1ucworX1VJX09iamVjdENvbHVtbl9sYWJlbCA9IE9iamVjdAorX1VJX1NlbGZDb2x1bW5fbGFiZWwgPSBTZWxmCitfVUlfTm9PYmplY3RTZWxlY3RlZCA9IFNlbGVjdGVkIE5vdGhpbmcKK19VSV9TaW5nbGVPYmplY3RTZWxlY3RlZCA9IFNlbGVjdGVkIE9iamVjdDogezB9CitfVUlfTXVsdGlPYmplY3RTZWxlY3RlZCA9IFNlbGVjdGVkIHswfSBPYmplY3RzCitfVUlfT3BlbkVkaXRvckVycm9yX2xhYmVsID0gT3BlbiBFZGl0b3IKK19VSV9XaXphcmRfY2F0ZWdvcnkgPSBFeGFtcGxlIEVNRiBNb2RlbCBDcmVhdGlvbiBXaXphcmRzCitfVUlfQ3JlYXRlTW9kZWxFcnJvcl9tZXNzYWdlID0gUHJvYmxlbXMgZW5jb3VudGVyZWQgaW4gZmlsZSAiezB9IgorX1VJX0NTVk1vZGVsV2l6YXJkX2xhYmVsID0gQ1NWIE1vZGVsCitfVUlfQ1NWTW9kZWxXaXphcmRfZGVzY3JpcHRpb24gPSBDcmVhdGUgYSBuZXcgQ1NWIG1vZGVsCitfVUlfQ1NWRWRpdG9yX2xhYmVsID0gQ1NWIE1vZGVsIEVkaXRvcgorX1VJX0NTVkVkaXRvckZpbGVuYW1lRGVmYXVsdEJhc2UgPSBNeQorX1VJX0NTVkVkaXRvckZpbGVuYW1lRXh0ZW5zaW9ucyA9IGNzdgorX1VJX1dpemFyZF9sYWJlbCA9IE5ldworX1dBUk5fRmlsZW5hbWVFeHRlbnNpb24gPSBUaGUgZmlsZSBuYW1lIG11c3QgZW5kIGluICcnLnswfScnCitfV0FSTl9GaWxlbmFtZUV4dGVuc2lvbnMgPSBUaGUgZmlsZSBuYW1lIG11c3QgaGF2ZSBvbmUgb2YgdGhlIGZvbGxvd2luZyBleHRlbnNpb25zOiB7MH0KK19VSV9Nb2RlbE9iamVjdCA9ICZNb2RlbCBPYmplY3QKK19VSV9YTUxFbmNvZGluZyA9ICZYTUwgRW5jb2RpbmcKK19VSV9YTUxFbmNvZGluZ0Nob2ljZXMgPSBVVEYtOCBBU0NJSSBVVEYtMTYgVVRGLTE2QkUgVVRGLTE2TEUgSVNPLTg4NTktMQorX1VJX1dpemFyZF9pbml0aWFsX29iamVjdF9kZXNjcmlwdGlvbiA9IFNlbGVjdCBhIG1vZGVsIG9iamVjdCB0byBjcmVhdGUKK19VSV9GaWxlQ29uZmxpY3RfbGFiZWwgPSBGaWxlIENvbmZsaWN0CitfV0FSTl9GaWxlQ29uZmxpY3QgPSBUaGVyZSBhcmUgdW5zYXZlZCBjaGFuZ2VzIHRoYXQgY29uZmxpY3Qgd2l0aCBjaGFuZ2VzIG1hZGUgb3V0c2lkZSB0aGUgZWRpdG9yLiAgRG8geW91IHdpc2ggdG8gZGlzY2FyZCB0aGlzIGVkaXRvcidzIGNoYW5nZXM/CitfVUlfQ1NWTG9nZ2VyX2xvZ1J1blBhcmFtZXRlcnNfZmVhdHVyZSA9IExvZyBSdW4gUGFyYW1ldGVycworX1VJX0NTVkxvZ2dlcl9idWZmZXJTaXplX2ZlYXR1cmUgPSBCdWZmZXIgU2l6ZQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMuY3N2L3BsdWdpbi54bWwgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy5jc3YvcGx1Z2luLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MjFiOTRkCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMuY3N2L3BsdWdpbi54bWwKQEAgLTAsMCArMSw3OSBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzw/ZWNsaXBzZSB2ZXJzaW9uPSIzLjAiPz4KKworPCEtLQorIDxjb3B5cmlnaHQ+CisgPC9jb3B5cmlnaHQ+CisKKyAkSWQkCistLT4KKworPHBsdWdpbj4KKworCisgICA8ZXh0ZW5zaW9uCisgICAgICAgICBwb2ludD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmxvZ2dlciI+CisgICAgICA8Y2xhc3NkZWYKKyAgICAgICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMuY3N2LmltcGwuQ1NWTG9nZ2VySW1wbCI+CisgICAgICA8L2NsYXNzZGVmPgorICAgICAgIDxkdWJsaW5fY29yZQorICAgICAgICAgICAgY2F0ZWdvcnlfaWQ9Ii8iCisgICAgICAgICAgICBkZXNjcmlwdGlvbj0iJWRjX2Rlc2NyIgorICAgICAgICAgICAgaWRlbnRpZmllcj0iJWRjX2lkZW50aWZpZXIiCisgICAgICAgICAgICBsaWNlbnNlPSIlZGNfbGljZW5zZSIKKyAgICAgICAgICAgIHB1Ymxpc2hlcj0iJWRjX3B1Ymxpc2hlciIKKyAgICAgICAgICAgIHRpdGxlPSIlZGNfdGl0bGUiPgorICAgICAgPC9kdWJsaW5fY29yZT4gICAgIAorCisgICA8L2V4dGVuc2lvbj4KKworCisgICA8ZXh0ZW5zaW9uIHBvaW50PSJvcmcuZWNsaXBzZS5lbWYuZWRpdC5pdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yaWVzIj4KKyAgICAgIDxmYWN0b3J5CisgICAgICAgICAgICB1cmk9Imh0dHA6Ly9vcmcvZWNsaXBzZS9zdGVtL2xvZ2dlcnMvY3N2IgorICAgICAgICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy5jc3YucHJvdmlkZXIuQ1NWSXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkiCisgICAgICAgICAgICBzdXBwb3J0ZWRUeXBlcz0KKyAgICAgICAgICAgICAgIm9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklFZGl0aW5nRG9tYWluSXRlbVByb3ZpZGVyCisgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JU3RydWN0dXJlZEl0ZW1Db250ZW50UHJvdmlkZXIKKyAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklUcmVlSXRlbUNvbnRlbnRQcm92aWRlcgorICAgICAgICAgICAgICAgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1MYWJlbFByb3ZpZGVyCisgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbVByb3BlcnR5U291cmNlIi8+CisgICA8L2V4dGVuc2lvbj4KKworICAgPGV4dGVuc2lvbiBwb2ludD0ib3JnLmVjbGlwc2UuZW1mLmVjb3JlLmdlbmVyYXRlZF9wYWNrYWdlIj4KKyAgICAgIDxwYWNrYWdlCisgICAgICAgICAgICB1cmk9Imh0dHA6Ly9vcmcvZWNsaXBzZS9zdGVtL2xvZ2dlcnMvY3N2IgorICAgICAgICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy5jc3YuQ1NWUGFja2FnZSIKKyAgICAgICAgICAgIGdlbk1vZGVsPSJtb2RlbHMvQ1NWTG9nZ2VyLmdlbm1vZGVsIi8+CisgICA8L2V4dGVuc2lvbj4KKworPCEtLQorICAgPGV4dGVuc2lvbiBwb2ludD0ib3JnLmVjbGlwc2UudWkubmV3V2l6YXJkcyI+CisgICAgICA8Y2F0ZWdvcnkKKyAgICAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5lbWYuZWNvcmUuV2l6YXJkLmNhdGVnb3J5LklEIgorICAgICAgICAgICAgbmFtZT0iJV9VSV9XaXphcmRfY2F0ZWdvcnkiLz4KKyAgICAgIDx3aXphcmQKKyAgICAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMuY3N2LnByZXNlbnRhdGlvbi5DU1ZNb2RlbFdpemFyZElEIgorICAgICAgICAgICAgbmFtZT0iJV9VSV9DU1ZNb2RlbFdpemFyZF9sYWJlbCIKKyAgICAgICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMuY3N2LnByZXNlbnRhdGlvbi5DU1ZNb2RlbFdpemFyZCIKKyAgICAgICAgICAgIGNhdGVnb3J5PSJvcmcuZWNsaXBzZS5lbWYuZWNvcmUuV2l6YXJkLmNhdGVnb3J5LklEIgorICAgICAgICAgICAgaWNvbj0iaWNvbnMvZnVsbC9vYmoxNi9DU1ZNb2RlbEZpbGUuZ2lmIj4KKyAgICAgICAgIDxkZXNjcmlwdGlvbj4lX1VJX0NTVk1vZGVsV2l6YXJkX2Rlc2NyaXB0aW9uPC9kZXNjcmlwdGlvbj4KKyAgICAgICAgIDxzZWxlY3Rpb24gY2xhc3M9Im9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklSZXNvdXJjZSIvPgorICAgICAgPC93aXphcmQ+CisgICA8L2V4dGVuc2lvbj4KKworICAgPGV4dGVuc2lvbiBwb2ludD0ib3JnLmVjbGlwc2UudWkuZWRpdG9ycyI+CisgICAgICA8ZWRpdG9yCisgICAgICAgICAgICBpZD0ib3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzLmNzdi5wcmVzZW50YXRpb24uQ1NWRWRpdG9ySUQiCisgICAgICAgICAgICBuYW1lPSIlX1VJX0NTVkVkaXRvcl9sYWJlbCIKKyAgICAgICAgICAgIGljb249Imljb25zL2Z1bGwvb2JqMTYvQ1NWTW9kZWxGaWxlLmdpZiIKKyAgICAgICAgICAgIGV4dGVuc2lvbnM9ImNzdiIKKyAgICAgICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMuY3N2LnByZXNlbnRhdGlvbi5DU1ZFZGl0b3IiCisgICAgICAgICAgICBjb250cmlidXRvckNsYXNzPSJvcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMuY3N2LnByZXNlbnRhdGlvbi5DU1ZBY3Rpb25CYXJDb250cmlidXRvciI+CisgICAgICA8L2VkaXRvcj4KKyAgIDwvZXh0ZW5zaW9uPgorLS0+CisKKworPC9wbHVnaW4+CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy5jc3Yvc3JjL29yZy9lY2xpcHNlL3N0ZW0vbG9nZ2Vycy9jc3YvQWN0aXZhdG9yLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy5jc3Yvc3JjL29yZy9lY2xpcHNlL3N0ZW0vbG9nZ2Vycy9jc3YvQWN0aXZhdG9yLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWQwOGRkNAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzLmNzdi9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9sb2dnZXJzL2Nzdi9BY3RpdmF0b3IuamF2YQpAQCAtMCwwICsxLDExMCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNiwgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzLmNzdjsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QbHVnaW47CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlN0YXR1czsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMuY3N2LnByb3ZpZGVyLkNTVkxvZ2dlckVkaXRQbHVnaW47CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzLm1hbmFnZXIuU2ltdWxhdGlvbkxvZ2dlck1hbmFnZXI7CitpbXBvcnQgb3JnLm9zZ2kuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHQ7CisKKy8qKgorICogVGhlIGFjdGl2YXRvciBjbGFzcyBjb250cm9scyB0aGUgcGx1Zy1pbiBsaWZlIGN5Y2xlCisgKi8KK3B1YmxpYyBjbGFzcyBBY3RpdmF0b3IgZXh0ZW5kcyBQbHVnaW4geworCisJLyoqCisJICogVGhlIHBsdWctaW4gSUQKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBQTFVHSU5fSUQgPSAib3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzLmNzdiI7IC8vJE5PTi1OTFMtMSQKKworCS8vIFRoZSBzaGFyZWQgaW5zdGFuY2UKKwlwcml2YXRlIHN0YXRpYyBBY3RpdmF0b3IgcGx1Z2luOworCisJLyoqCisJICogVGhlIGNvbnN0cnVjdG9yCisJICovCisJcHVibGljIEFjdGl2YXRvcigpIHsKKwkJcGx1Z2luID0gdGhpczsKKwl9CisKKwkvKioKKwkgKiBAcGFyYW0gY29udGV4dAorCSAqIEB0aHJvd3MgRXhjZXB0aW9uCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgc3RhcnQoQnVuZGxlQ29udGV4dCBjb250ZXh0KSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJc3VwZXIuc3RhcnQoY29udGV4dCk7CisJfSAvLyBzdGFydAorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGx1Z2luI3N0b3Aob3JnLm9zZ2kuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHQpCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgc3RvcChCdW5kbGVDb250ZXh0IGNvbnRleHQpIHRocm93cyBFeGNlcHRpb24geworCQlwbHVnaW4gPSBudWxsOworCQlzdXBlci5zdG9wKGNvbnRleHQpOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIHNoYXJlZCBpbnN0YW5jZQorCSAqIAorCSAqIEByZXR1cm4gdGhlIHNoYXJlZCBpbnN0YW5jZQorCSAqLworCXB1YmxpYyBzdGF0aWMgQWN0aXZhdG9yIGdldERlZmF1bHQoKSB7CisJCXJldHVybiBwbHVnaW47CisJfQorCisJLyoqCisJICogTG9nIGFuIGVycm9yIHRvIHRoZSBJTG9nIGZvciB0aGlzIHBsdWdpbgorCSAqIAorCSAqIEBwYXJhbSBtZXNzYWdlCisJICogICAgICAgICAgICB0aGUgbG9jYWxpemVkIGVycm9yIG1lc3NhZ2UgdGV4dAorCSAqIEBwYXJhbSBleGNlcHRpb24KKwkgKiAgICAgICAgICAgIHRoZSBhc3NvY2lhdGVkIGV4Y2VwdGlvbiwgb3IgbnVsbAorCSAqLworCXB1YmxpYyBzdGF0aWMgdm9pZCBsb2dFcnJvcihTdHJpbmcgbWVzc2FnZSwgVGhyb3dhYmxlIGV4Y2VwdGlvbikgeworCQlDU1ZMb2dnZXJFZGl0UGx1Z2luLmdldFBsdWdpbigpLmdldExvZygpLmxvZygKKwkJCQluZXcgU3RhdHVzKElTdGF0dXMuRVJST1IsIENTVkxvZ2dlckVkaXRQbHVnaW4uZ2V0UGx1Z2luKCkuZ2V0QnVuZGxlKCkuZ2V0U3ltYm9saWNOYW1lKCksCisJCQkJCQkwLCBtZXNzYWdlLCBleGNlcHRpb24pKTsKKwl9IC8vIGxvZ0Vycm9yCisKKwkvKioKKwkgKiBMb2cgaW5mb3JtYXRpb24gdG8gdGhlIElMb2cgZm9yIHRoaXMgcGx1Z2luCisJICogCisJICogQHBhcmFtIG1lc3NhZ2UKKwkgKiAgICAgICAgICAgIHRoZSBsb2NhbGl6ZWQgaW5mb3JtYXRpb24gbWVzc2FnZSB0ZXh0CisJICogQHBhcmFtIGV4Y2VwdGlvbgorCSAqICAgICAgICAgICAgdGhlIGFzc29jaWF0ZWQgZXhjZXB0aW9uLCBvciBudWxsCisJICovCisJcHVibGljIHN0YXRpYyB2b2lkIGxvZ0luZm9ybWF0aW9uKFN0cmluZyBtZXNzYWdlLCBUaHJvd2FibGUgZXhjZXB0aW9uKSB7CisJCUNTVkxvZ2dlckVkaXRQbHVnaW4uZ2V0UGx1Z2luKCkuZ2V0TG9nKCkubG9nKAorCQkJCW5ldyBTdGF0dXMoSVN0YXR1cy5JTkZPLCBDU1ZMb2dnZXJFZGl0UGx1Z2luLmdldFBsdWdpbigpLmdldEJ1bmRsZSgpLmdldFN5bWJvbGljTmFtZSgpLAorCQkJCQkJMCwgbWVzc2FnZSwgZXhjZXB0aW9uKSk7CisJfSAvLyBsb2dJbmZvcm1hdGlvbgorCQorCQorCS8qKgorCSAqIExvZyBpbmZvcm1hdGlvbiB0byB0aGUgSUxvZyBmb3IgdGhpcyBwbHVnaW4KKwkgKiAKKwkgKiBAcGFyYW0gbWVzc2FnZQorCSAqICAgICAgICAgICAgdGhlIGxvY2FsaXplZCBpbmZvcm1hdGlvbiBtZXNzYWdlIHRleHQKKwkgKiBAcGFyYW0gZXhjZXB0aW9uCisJICogICAgICAgICAgICB0aGUgYXNzb2NpYXRlZCBleGNlcHRpb24sIG9yIG51bGwKKwkgKi8KKwlwdWJsaWMgc3RhdGljIHZvaWQgbG9nV2FybmluZyhTdHJpbmcgbWVzc2FnZSwgVGhyb3dhYmxlIGV4Y2VwdGlvbikgeworCQlDU1ZMb2dnZXJFZGl0UGx1Z2luLmdldFBsdWdpbigpLmdldExvZygpLmxvZygKKwkJCQluZXcgU3RhdHVzKElTdGF0dXMuV0FSTklORywgQ1NWTG9nZ2VyRWRpdFBsdWdpbi5nZXRQbHVnaW4oKS5nZXRCdW5kbGUoKS5nZXRTeW1ib2xpY05hbWUoKSwKKwkJCQkJCTAsIG1lc3NhZ2UsIGV4Y2VwdGlvbikpOworCX0gLy8gbG9nSW5mb3JtYXRpb24KK30gLy8gQWN0aXZhdG9yCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy5jc3Yvc3JjL29yZy9lY2xpcHNlL3N0ZW0vbG9nZ2Vycy9jc3YvQ1NWRmFjdG9yeS5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMuY3N2L3NyYy9vcmcvZWNsaXBzZS9zdGVtL2xvZ2dlcnMvY3N2L0NTVkZhY3RvcnkuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YTFlMmI2Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMuY3N2L3NyYy9vcmcvZWNsaXBzZS9zdGVtL2xvZ2dlcnMvY3N2L0NTVkZhY3RvcnkuamF2YQpAQCAtMCwwICsxLDQ2IEBACisvKioKKyAqIDxjb3B5cmlnaHQ+CisgKiA8L2NvcHlyaWdodD4KKyAqCisgKiAkSWQkCisgKi8KK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzLmNzdjsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FRmFjdG9yeTsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogVGhlIDxiPkZhY3Rvcnk8L2I+IGZvciB0aGUgbW9kZWwuCisgKiBJdCBwcm92aWRlcyBhIGNyZWF0ZSBtZXRob2QgZm9yIGVhY2ggbm9uLWFic3RyYWN0IGNsYXNzIG9mIHRoZSBtb2RlbC4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMuY3N2LkNTVlBhY2thZ2UKKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGludGVyZmFjZSBDU1ZGYWN0b3J5IGV4dGVuZHMgRUZhY3RvcnkgeworCS8qKgorCSAqIFRoZSBzaW5nbGV0b24gaW5zdGFuY2Ugb2YgdGhlIGZhY3RvcnkuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQ1NWRmFjdG9yeSBlSU5TVEFOQ0UgPSBvcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMuY3N2LmltcGwuQ1NWRmFjdG9yeUltcGwuaW5pdCgpOworCisJLyoqCisJICogUmV0dXJucyBhIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5Mb2dnZXI8L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPkxvZ2dlcjwvZW0+Jy4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQ1NWTG9nZ2VyIGNyZWF0ZUNTVkxvZ2dlcigpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgcGFja2FnZSBzdXBwb3J0ZWQgYnkgdGhpcyBmYWN0b3J5LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgcGFja2FnZSBzdXBwb3J0ZWQgYnkgdGhpcyBmYWN0b3J5LgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlDU1ZQYWNrYWdlIGdldENTVlBhY2thZ2UoKTsKKworfSAvL0NTVkZhY3RvcnkKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzLmNzdi9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9sb2dnZXJzL2Nzdi9DU1ZMb2dnZXIuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzLmNzdi9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9sb2dnZXJzL2Nzdi9DU1ZMb2dnZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iOWE1OGY4Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMuY3N2L3NyYy9vcmcvZWNsaXBzZS9zdGVtL2xvZ2dlcnMvY3N2L0NTVkxvZ2dlci5qYXZhCkBAIC0wLDAgKzEsMTY2IEBACisvKioKKyAqIDxjb3B5cmlnaHQ+CisgKiA8L2NvcHlyaWdodD4KKyAqCisgKiAkSWQkCisgKi8KK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzLmNzdjsKKworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy5TeW5jaHJvbm91c0xvZ2dlcjsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogQSByZXByZXNlbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+TG9nZ2VyPC9iPjwvZW0+Jy4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICoKKyAqIDxwPgorICogVGhlIGZvbGxvd2luZyBmZWF0dXJlcyBhcmUgc3VwcG9ydGVkOgorICogPHVsPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy5jc3YuQ1NWTG9nZ2VyI2lzVXNlRGVmYXVsdExvZ0RpcmVjdG9yeSA8ZW0+VXNlIERlZmF1bHQgTG9nIERpcmVjdG9yeTwvZW0+fTwvbGk+CisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzLmNzdi5DU1ZMb2dnZXIjZ2V0TG9nRGlyZWN0b3J5IDxlbT5Mb2cgRGlyZWN0b3J5PC9lbT59PC9saT4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMuY3N2LkNTVkxvZ2dlciNnZXREZWxpbWV0ZXIgPGVtPkRlbGltZXRlcjwvZW0+fTwvbGk+CisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzLmNzdi5DU1ZMb2dnZXIjaXNMb2dSdW5QYXJhbWV0ZXJzIDxlbT5Mb2cgUnVuIFBhcmFtZXRlcnM8L2VtPn08L2xpPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy5jc3YuQ1NWTG9nZ2VyI2dldEJ1ZmZlclNpemUgPGVtPkJ1ZmZlciBTaXplPC9lbT59PC9saT4KKyAqIDwvdWw+CisgKiA8L3A+CisgKgorICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMuY3N2LkNTVlBhY2thZ2UjZ2V0Q1NWTG9nZ2VyKCkKKyAqIEBtb2RlbAorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgaW50ZXJmYWNlIENTVkxvZ2dlciBleHRlbmRzIFN5bmNocm9ub3VzTG9nZ2VyIHsKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5Vc2UgRGVmYXVsdCBMb2cgRGlyZWN0b3J5PC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogVGhlIGRlZmF1bHQgdmFsdWUgaXMgPGNvZGU+InRydWUiPC9jb2RlPi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDxwPgorCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPlVzZSBEZWZhdWx0IExvZyBEaXJlY3Rvcnk8L2VtPicgYXR0cmlidXRlIGlzbid0IGNsZWFyLAorCSAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4KKwkgKiA8L3A+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+VXNlIERlZmF1bHQgTG9nIERpcmVjdG9yeTwvZW0+JyBhdHRyaWJ1dGUuCisJICogQHNlZSAjc2V0VXNlRGVmYXVsdExvZ0RpcmVjdG9yeShib29sZWFuKQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzLmNzdi5DU1ZQYWNrYWdlI2dldENTVkxvZ2dlcl9Vc2VEZWZhdWx0TG9nRGlyZWN0b3J5KCkKKwkgKiBAbW9kZWwgZGVmYXVsdD0idHJ1ZSIKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJYm9vbGVhbiBpc1VzZURlZmF1bHRMb2dEaXJlY3RvcnkoKTsKKworCS8qKgorCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy5jc3YuQ1NWTG9nZ2VyI2lzVXNlRGVmYXVsdExvZ0RpcmVjdG9yeSA8ZW0+VXNlIERlZmF1bHQgTG9nIERpcmVjdG9yeTwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+VXNlIERlZmF1bHQgTG9nIERpcmVjdG9yeTwvZW0+JyBhdHRyaWJ1dGUuCisJICogQHNlZSAjaXNVc2VEZWZhdWx0TG9nRGlyZWN0b3J5KCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJdm9pZCBzZXRVc2VEZWZhdWx0TG9nRGlyZWN0b3J5KGJvb2xlYW4gdmFsdWUpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+TG9nIERpcmVjdG9yeTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPHA+CisJICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+TG9nIERpcmVjdG9yeTwvZW0+JyBhdHRyaWJ1dGUgaXNuJ3QgY2xlYXIsCisJICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLgorCSAqIDwvcD4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5Mb2cgRGlyZWN0b3J5PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiBAc2VlICNzZXRMb2dEaXJlY3RvcnkoU3RyaW5nKQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzLmNzdi5DU1ZQYWNrYWdlI2dldENTVkxvZ2dlcl9Mb2dEaXJlY3RvcnkoKQorCSAqIEBtb2RlbAorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlTdHJpbmcgZ2V0TG9nRGlyZWN0b3J5KCk7CisKKwkvKioKKwkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMuY3N2LkNTVkxvZ2dlciNnZXRMb2dEaXJlY3RvcnkgPGVtPkxvZyBEaXJlY3Rvcnk8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPkxvZyBEaXJlY3Rvcnk8L2VtPicgYXR0cmlidXRlLgorCSAqIEBzZWUgI2dldExvZ0RpcmVjdG9yeSgpCisJICogQGdlbmVyYXRlZAorCSAqLworCXZvaWQgc2V0TG9nRGlyZWN0b3J5KFN0cmluZyB2YWx1ZSk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5EZWxpbWV0ZXI8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyA8Y29kZT4iLCI8L2NvZGU+LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPHA+CisJICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+RGVsaW1ldGVyPC9lbT4nIGF0dHJpYnV0ZSBpc24ndCBjbGVhciwKKwkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uCisJICogPC9wPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPkRlbGltZXRlcjwvZW0+JyBhdHRyaWJ1dGUuCisJICogQHNlZSAjc2V0RGVsaW1ldGVyKFN0cmluZykKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy5jc3YuQ1NWUGFja2FnZSNnZXRDU1ZMb2dnZXJfRGVsaW1ldGVyKCkKKwkgKiBAbW9kZWwgZGVmYXVsdD0iLCIKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJU3RyaW5nIGdldERlbGltZXRlcigpOworCisJLyoqCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzLmNzdi5DU1ZMb2dnZXIjZ2V0RGVsaW1ldGVyIDxlbT5EZWxpbWV0ZXI8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPkRlbGltZXRlcjwvZW0+JyBhdHRyaWJ1dGUuCisJICogQHNlZSAjZ2V0RGVsaW1ldGVyKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJdm9pZCBzZXREZWxpbWV0ZXIoU3RyaW5nIHZhbHVlKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPkxvZyBSdW4gUGFyYW1ldGVyczwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIGlzIDxjb2RlPiJ0cnVlIjwvY29kZT4uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8cD4KKwkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5Mb2cgUnVuIFBhcmFtZXRlcnM8L2VtPicgYXR0cmlidXRlIGlzbid0IGNsZWFyLAorCSAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4KKwkgKiA8L3A+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+TG9nIFJ1biBQYXJhbWV0ZXJzPC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiBAc2VlICNzZXRMb2dSdW5QYXJhbWV0ZXJzKGJvb2xlYW4pCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMuY3N2LkNTVlBhY2thZ2UjZ2V0Q1NWTG9nZ2VyX0xvZ1J1blBhcmFtZXRlcnMoKQorCSAqIEBtb2RlbCBkZWZhdWx0PSJ0cnVlIgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlib29sZWFuIGlzTG9nUnVuUGFyYW1ldGVycygpOworCisJLyoqCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzLmNzdi5DU1ZMb2dnZXIjaXNMb2dSdW5QYXJhbWV0ZXJzIDxlbT5Mb2cgUnVuIFBhcmFtZXRlcnM8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPkxvZyBSdW4gUGFyYW1ldGVyczwvZW0+JyBhdHRyaWJ1dGUuCisJICogQHNlZSAjaXNMb2dSdW5QYXJhbWV0ZXJzKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJdm9pZCBzZXRMb2dSdW5QYXJhbWV0ZXJzKGJvb2xlYW4gdmFsdWUpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+QnVmZmVyIFNpemU8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyA8Y29kZT4iMTAyNCI8L2NvZGU+LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPHA+CisJICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+QnVmZmVyIFNpemU8L2VtPicgYXR0cmlidXRlIGlzbid0IGNsZWFyLAorCSAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4KKwkgKiA8L3A+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+QnVmZmVyIFNpemU8L2VtPicgYXR0cmlidXRlLgorCSAqIEBzZWUgI3NldEJ1ZmZlclNpemUoaW50KQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzLmNzdi5DU1ZQYWNrYWdlI2dldENTVkxvZ2dlcl9CdWZmZXJTaXplKCkKKwkgKiBAbW9kZWwgZGVmYXVsdD0iMTAyNCIKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJaW50IGdldEJ1ZmZlclNpemUoKTsKKworCS8qKgorCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy5jc3YuQ1NWTG9nZ2VyI2dldEJ1ZmZlclNpemUgPGVtPkJ1ZmZlciBTaXplPC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5CdWZmZXIgU2l6ZTwvZW0+JyBhdHRyaWJ1dGUuCisJICogQHNlZSAjZ2V0QnVmZmVyU2l6ZSgpCisJICogQGdlbmVyYXRlZAorCSAqLworCXZvaWQgc2V0QnVmZmVyU2l6ZShpbnQgdmFsdWUpOworCit9IC8vIENTVkxvZ2dlcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMuY3N2L3NyYy9vcmcvZWNsaXBzZS9zdGVtL2xvZ2dlcnMvY3N2L0NTVlBhY2thZ2UuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzLmNzdi9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9sb2dnZXJzL2Nzdi9DU1ZQYWNrYWdlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2M2NmY5NgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzLmNzdi9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9sb2dnZXJzL2Nzdi9DU1ZQYWNrYWdlLmphdmEKQEAgLTAsMCArMSwzMDMgQEAKKy8qKgorICogPGNvcHlyaWdodD4KKyAqIDwvY29weXJpZ2h0PgorICoKKyAqICRJZCQKKyAqLworcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMuY3N2OworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVBdHRyaWJ1dGU7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzczsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRVBhY2thZ2U7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMuU2ltdWxhdGlvbkxvZ2dlclBhY2thZ2U7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIFRoZSA8Yj5QYWNrYWdlPC9iPiBmb3IgdGhlIG1vZGVsLgorICogSXQgY29udGFpbnMgYWNjZXNzb3JzIGZvciB0aGUgbWV0YSBvYmplY3RzIHRvIHJlcHJlc2VudAorICogPHVsPgorICogICA8bGk+ZWFjaCBjbGFzcyw8L2xpPgorICogICA8bGk+ZWFjaCBmZWF0dXJlIG9mIGVhY2ggY2xhc3MsPC9saT4KKyAqICAgPGxpPmVhY2ggZW51bSw8L2xpPgorICogICA8bGk+YW5kIGVhY2ggZGF0YSB0eXBlPC9saT4KKyAqIDwvdWw+CisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzLmNzdi5DU1ZGYWN0b3J5CisgKiBAbW9kZWwga2luZD0icGFja2FnZSIKKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGludGVyZmFjZSBDU1ZQYWNrYWdlIGV4dGVuZHMgRVBhY2thZ2UgeworCS8qKgorCSAqIFRoZSBwYWNrYWdlIG5hbWUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJU3RyaW5nIGVOQU1FID0gImNzdiI7CisKKwkvKioKKwkgKiBUaGUgcGFja2FnZSBuYW1lc3BhY2UgVVJJLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCVN0cmluZyBlTlNfVVJJID0gImh0dHA6Ly9vcmcvZWNsaXBzZS9zdGVtL2xvZ2dlcnMvY3N2IjsKKworCS8qKgorCSAqIFRoZSBwYWNrYWdlIG5hbWVzcGFjZSBuYW1lLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCVN0cmluZyBlTlNfUFJFRklYID0gIm9yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy5jc3YiOworCisJLyoqCisJICogVGhlIHNpbmdsZXRvbiBpbnN0YW5jZSBvZiB0aGUgcGFja2FnZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlDU1ZQYWNrYWdlIGVJTlNUQU5DRSA9IG9yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy5jc3YuaW1wbC5DU1ZQYWNrYWdlSW1wbC5pbml0KCk7CisKKwkvKioKKwkgKiBUaGUgbWV0YSBvYmplY3QgaWQgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy5jc3YuaW1wbC5DU1ZMb2dnZXJJbXBsIDxlbT5Mb2dnZXI8L2VtPn0nIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMuY3N2LmltcGwuQ1NWTG9nZ2VySW1wbAorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzLmNzdi5pbXBsLkNTVlBhY2thZ2VJbXBsI2dldENTVkxvZ2dlcigpCisJICogQGdlbmVyYXRlZAorCSAqLworCWludCBDU1ZfTE9HR0VSID0gMDsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5VUkk8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBDU1ZfTE9HR0VSX19VUkkgPSBTaW11bGF0aW9uTG9nZ2VyUGFja2FnZS5TWU5DSFJPTk9VU19MT0dHRVJfX1VSSTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5UeXBlIFVSSTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IENTVl9MT0dHRVJfX1RZUEVfVVJJID0gU2ltdWxhdGlvbkxvZ2dlclBhY2thZ2UuU1lOQ0hST05PVVNfTE9HR0VSX19UWVBFX1VSSTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5EdWJsaW4gQ29yZTwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IENTVl9MT0dHRVJfX0RVQkxJTl9DT1JFID0gU2ltdWxhdGlvbkxvZ2dlclBhY2thZ2UuU1lOQ0hST05PVVNfTE9HR0VSX19EVUJMSU5fQ09SRTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5FbmFibGVkPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgQ1NWX0xPR0dFUl9fRU5BQkxFRCA9IFNpbXVsYXRpb25Mb2dnZXJQYWNrYWdlLlNZTkNIUk9OT1VTX0xPR0dFUl9fRU5BQkxFRDsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5Vc2UgRGVmYXVsdCBMb2cgRGlyZWN0b3J5PC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgQ1NWX0xPR0dFUl9fVVNFX0RFRkFVTFRfTE9HX0RJUkVDVE9SWSA9IFNpbXVsYXRpb25Mb2dnZXJQYWNrYWdlLlNZTkNIUk9OT1VTX0xPR0dFUl9GRUFUVVJFX0NPVU5UICsgMDsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5Mb2cgRGlyZWN0b3J5PC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgQ1NWX0xPR0dFUl9fTE9HX0RJUkVDVE9SWSA9IFNpbXVsYXRpb25Mb2dnZXJQYWNrYWdlLlNZTkNIUk9OT1VTX0xPR0dFUl9GRUFUVVJFX0NPVU5UICsgMTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5EZWxpbWV0ZXI8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBDU1ZfTE9HR0VSX19ERUxJTUVURVIgPSBTaW11bGF0aW9uTG9nZ2VyUGFja2FnZS5TWU5DSFJPTk9VU19MT0dHRVJfRkVBVFVSRV9DT1VOVCArIDI7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+TG9nIFJ1biBQYXJhbWV0ZXJzPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgQ1NWX0xPR0dFUl9fTE9HX1JVTl9QQVJBTUVURVJTID0gU2ltdWxhdGlvbkxvZ2dlclBhY2thZ2UuU1lOQ0hST05PVVNfTE9HR0VSX0ZFQVRVUkVfQ09VTlQgKyAzOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkJ1ZmZlciBTaXplPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgQ1NWX0xPR0dFUl9fQlVGRkVSX1NJWkUgPSBTaW11bGF0aW9uTG9nZ2VyUGFja2FnZS5TWU5DSFJPTk9VU19MT0dHRVJfRkVBVFVSRV9DT1VOVCArIDQ7CisKKwkvKioKKwkgKiBUaGUgbnVtYmVyIG9mIHN0cnVjdHVyYWwgZmVhdHVyZXMgb2YgdGhlICc8ZW0+TG9nZ2VyPC9lbT4nIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IENTVl9MT0dHRVJfRkVBVFVSRV9DT1VOVCA9IFNpbXVsYXRpb25Mb2dnZXJQYWNrYWdlLlNZTkNIUk9OT1VTX0xPR0dFUl9GRUFUVVJFX0NPVU5UICsgNTsKKworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzLmNzdi5DU1ZMb2dnZXIgPGVtPkxvZ2dlcjwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJzxlbT5Mb2dnZXI8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMuY3N2LkNTVkxvZ2dlcgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQ2xhc3MgZ2V0Q1NWTG9nZ2VyKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy5jc3YuQ1NWTG9nZ2VyI2lzVXNlRGVmYXVsdExvZ0RpcmVjdG9yeSA8ZW0+VXNlIERlZmF1bHQgTG9nIERpcmVjdG9yeTwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPGVtPlVzZSBEZWZhdWx0IExvZyBEaXJlY3Rvcnk8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMuY3N2LkNTVkxvZ2dlciNpc1VzZURlZmF1bHRMb2dEaXJlY3RvcnkoKQorCSAqIEBzZWUgI2dldENTVkxvZ2dlcigpCisJICogQGdlbmVyYXRlZAorCSAqLworCUVBdHRyaWJ1dGUgZ2V0Q1NWTG9nZ2VyX1VzZURlZmF1bHRMb2dEaXJlY3RvcnkoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzLmNzdi5DU1ZMb2dnZXIjZ2V0TG9nRGlyZWN0b3J5IDxlbT5Mb2cgRGlyZWN0b3J5PC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+TG9nIERpcmVjdG9yeTwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy5jc3YuQ1NWTG9nZ2VyI2dldExvZ0RpcmVjdG9yeSgpCisJICogQHNlZSAjZ2V0Q1NWTG9nZ2VyKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUF0dHJpYnV0ZSBnZXRDU1ZMb2dnZXJfTG9nRGlyZWN0b3J5KCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy5jc3YuQ1NWTG9nZ2VyI2dldERlbGltZXRlciA8ZW0+RGVsaW1ldGVyPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+RGVsaW1ldGVyPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzLmNzdi5DU1ZMb2dnZXIjZ2V0RGVsaW1ldGVyKCkKKwkgKiBAc2VlICNnZXRDU1ZMb2dnZXIoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQXR0cmlidXRlIGdldENTVkxvZ2dlcl9EZWxpbWV0ZXIoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzLmNzdi5DU1ZMb2dnZXIjaXNMb2dSdW5QYXJhbWV0ZXJzIDxlbT5Mb2cgUnVuIFBhcmFtZXRlcnM8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxlbT5Mb2cgUnVuIFBhcmFtZXRlcnM8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMuY3N2LkNTVkxvZ2dlciNpc0xvZ1J1blBhcmFtZXRlcnMoKQorCSAqIEBzZWUgI2dldENTVkxvZ2dlcigpCisJICogQGdlbmVyYXRlZAorCSAqLworCUVBdHRyaWJ1dGUgZ2V0Q1NWTG9nZ2VyX0xvZ1J1blBhcmFtZXRlcnMoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzLmNzdi5DU1ZMb2dnZXIjZ2V0QnVmZmVyU2l6ZSA8ZW0+QnVmZmVyIFNpemU8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxlbT5CdWZmZXIgU2l6ZTwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy5jc3YuQ1NWTG9nZ2VyI2dldEJ1ZmZlclNpemUoKQorCSAqIEBzZWUgI2dldENTVkxvZ2dlcigpCisJICogQGdlbmVyYXRlZAorCSAqLworCUVBdHRyaWJ1dGUgZ2V0Q1NWTG9nZ2VyX0J1ZmZlclNpemUoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIGZhY3RvcnkgdGhhdCBjcmVhdGVzIHRoZSBpbnN0YW5jZXMgb2YgdGhlIG1vZGVsLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgZmFjdG9yeSB0aGF0IGNyZWF0ZXMgdGhlIGluc3RhbmNlcyBvZiB0aGUgbW9kZWwuCisJICogQGdlbmVyYXRlZAorCSAqLworCUNTVkZhY3RvcnkgZ2V0Q1NWRmFjdG9yeSgpOworCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBEZWZpbmVzIGxpdGVyYWxzIGZvciB0aGUgbWV0YSBvYmplY3RzIHRoYXQgcmVwcmVzZW50CisJICogPHVsPgorCSAqICAgPGxpPmVhY2ggY2xhc3MsPC9saT4KKwkgKiAgIDxsaT5lYWNoIGZlYXR1cmUgb2YgZWFjaCBjbGFzcyw8L2xpPgorCSAqICAgPGxpPmVhY2ggZW51bSw8L2xpPgorCSAqICAgPGxpPmFuZCBlYWNoIGRhdGEgdHlwZTwvbGk+CisJICogPC91bD4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJaW50ZXJmYWNlIExpdGVyYWxzIHsKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMuY3N2LmltcGwuQ1NWTG9nZ2VySW1wbCA8ZW0+TG9nZ2VyPC9lbT59JyBjbGFzcy4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzLmNzdi5pbXBsLkNTVkxvZ2dlckltcGwKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMuY3N2LmltcGwuQ1NWUGFja2FnZUltcGwjZ2V0Q1NWTG9nZ2VyKCkKKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUNsYXNzIENTVl9MT0dHRVIgPSBlSU5TVEFOQ0UuZ2V0Q1NWTG9nZ2VyKCk7CisKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5Vc2UgRGVmYXVsdCBMb2cgRGlyZWN0b3J5PC9iPjwvZW0+JyBhdHRyaWJ1dGUgZmVhdHVyZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVBdHRyaWJ1dGUgQ1NWX0xPR0dFUl9fVVNFX0RFRkFVTFRfTE9HX0RJUkVDVE9SWSA9IGVJTlNUQU5DRS5nZXRDU1ZMb2dnZXJfVXNlRGVmYXVsdExvZ0RpcmVjdG9yeSgpOworCisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+TG9nIERpcmVjdG9yeTwvYj48L2VtPicgYXR0cmlidXRlIGZlYXR1cmUuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQXR0cmlidXRlIENTVl9MT0dHRVJfX0xPR19ESVJFQ1RPUlkgPSBlSU5TVEFOQ0UuZ2V0Q1NWTG9nZ2VyX0xvZ0RpcmVjdG9yeSgpOworCisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+RGVsaW1ldGVyPC9iPjwvZW0+JyBhdHRyaWJ1dGUgZmVhdHVyZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVBdHRyaWJ1dGUgQ1NWX0xPR0dFUl9fREVMSU1FVEVSID0gZUlOU1RBTkNFLmdldENTVkxvZ2dlcl9EZWxpbWV0ZXIoKTsKKworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPkxvZyBSdW4gUGFyYW1ldGVyczwvYj48L2VtPicgYXR0cmlidXRlIGZlYXR1cmUuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQXR0cmlidXRlIENTVl9MT0dHRVJfX0xPR19SVU5fUEFSQU1FVEVSUyA9IGVJTlNUQU5DRS5nZXRDU1ZMb2dnZXJfTG9nUnVuUGFyYW1ldGVycygpOworCisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+QnVmZmVyIFNpemU8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUF0dHJpYnV0ZSBDU1ZfTE9HR0VSX19CVUZGRVJfU0laRSA9IGVJTlNUQU5DRS5nZXRDU1ZMb2dnZXJfQnVmZmVyU2l6ZSgpOworCisJfQorCit9IC8vQ1NWUGFja2FnZQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMuY3N2L3NyYy9vcmcvZWNsaXBzZS9zdGVtL2xvZ2dlcnMvY3N2L2ltcGwvQ1NWRmFjdG9yeUltcGwuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzLmNzdi9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9sb2dnZXJzL2Nzdi9pbXBsL0NTVkZhY3RvcnlJbXBsLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzgxOTZkNwotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzLmNzdi9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9sb2dnZXJzL2Nzdi9pbXBsL0NTVkZhY3RvcnlJbXBsLmphdmEKQEAgLTAsMCArMSw5OSBAQAorLyoqCisgKiA8Y29weXJpZ2h0PgorICogPC9jb3B5cmlnaHQ+CisgKgorICogJElkJAorICovCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy5jc3YuaW1wbDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3Q7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVQYWNrYWdlOworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLmltcGwuRUZhY3RvcnlJbXBsOworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnBsdWdpbi5FY29yZVBsdWdpbjsKKworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy5jc3YuKjsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIG1vZGVsIDxiPkZhY3Rvcnk8L2I+LgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBDU1ZGYWN0b3J5SW1wbCBleHRlbmRzIEVGYWN0b3J5SW1wbCBpbXBsZW1lbnRzIENTVkZhY3RvcnkgeworCS8qKgorCSAqIENyZWF0ZXMgdGhlIGRlZmF1bHQgZmFjdG9yeSBpbXBsZW1lbnRhdGlvbi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgc3RhdGljIENTVkZhY3RvcnkgaW5pdCgpIHsKKwkJdHJ5IHsKKwkJCUNTVkZhY3RvcnkgdGhlQ1NWRmFjdG9yeSA9IChDU1ZGYWN0b3J5KUVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVGYWN0b3J5KCJodHRwOi8vb3JnL2VjbGlwc2Uvc3RlbS9sb2dnZXJzL2NzdiIpOyAKKwkJCWlmICh0aGVDU1ZGYWN0b3J5ICE9IG51bGwpIHsKKwkJCQlyZXR1cm4gdGhlQ1NWRmFjdG9yeTsKKwkJCX0KKwkJfQorCQljYXRjaCAoRXhjZXB0aW9uIGV4Y2VwdGlvbikgeworCQkJRWNvcmVQbHVnaW4uSU5TVEFOQ0UubG9nKGV4Y2VwdGlvbik7CisJCX0KKwkJcmV0dXJuIG5ldyBDU1ZGYWN0b3J5SW1wbCgpOworCX0KKworCS8qKgorCSAqIENyZWF0ZXMgYW4gaW5zdGFuY2Ugb2YgdGhlIGZhY3RvcnkuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIENTVkZhY3RvcnlJbXBsKCkgeworCQlzdXBlcigpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBFT2JqZWN0IGNyZWF0ZShFQ2xhc3MgZUNsYXNzKSB7CisJCXN3aXRjaCAoZUNsYXNzLmdldENsYXNzaWZpZXJJRCgpKSB7CisJCQljYXNlIENTVlBhY2thZ2UuQ1NWX0xPR0dFUjogcmV0dXJuIGNyZWF0ZUNTVkxvZ2dlcigpOworCQkJZGVmYXVsdDoKKwkJCQl0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJUaGUgY2xhc3MgJyIgKyBlQ2xhc3MuZ2V0TmFtZSgpICsgIicgaXMgbm90IGEgdmFsaWQgY2xhc3NpZmllciIpOworCQl9CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIENTVkxvZ2dlciBjcmVhdGVDU1ZMb2dnZXIoKSB7CisJCUNTVkxvZ2dlckltcGwgY3N2TG9nZ2VyID0gbmV3IENTVkxvZ2dlckltcGwoKTsKKwkJcmV0dXJuIGNzdkxvZ2dlcjsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQ1NWUGFja2FnZSBnZXRDU1ZQYWNrYWdlKCkgeworCQlyZXR1cm4gKENTVlBhY2thZ2UpZ2V0RVBhY2thZ2UoKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBkZXByZWNhdGVkCisJICogQGdlbmVyYXRlZAorCSAqLworCUBEZXByZWNhdGVkCisJcHVibGljIHN0YXRpYyBDU1ZQYWNrYWdlIGdldFBhY2thZ2UoKSB7CisJCXJldHVybiBDU1ZQYWNrYWdlLmVJTlNUQU5DRTsKKwl9CisKK30gLy9DU1ZGYWN0b3J5SW1wbApkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMuY3N2L3NyYy9vcmcvZWNsaXBzZS9zdGVtL2xvZ2dlcnMvY3N2L2ltcGwvQ1NWTG9nZ2VySW1wbC5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMuY3N2L3NyYy9vcmcvZWNsaXBzZS9zdGVtL2xvZ2dlcnMvY3N2L2ltcGwvQ1NWTG9nZ2VySW1wbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQwZjEwZmIKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy5jc3Yvc3JjL29yZy9lY2xpcHNlL3N0ZW0vbG9nZ2Vycy9jc3YvaW1wbC9DU1ZMb2dnZXJJbXBsLmphdmEKQEAgLTAsMCArMSw0MTggQEAKKy8qKgorICogPGNvcHlyaWdodD4KKyAqIDwvY29weXJpZ2h0PgorICoKKyAqICRJZCQKKyAqLworcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMuY3N2LmltcGw7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb247CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLmltcGwuRU5vdGlmaWNhdGlvbkltcGw7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmpvYnMuc2ltdWxhdGlvbi5JU2ltdWxhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmpvYnMuc2ltdWxhdGlvbi5TaW11bGF0aW9uRXZlbnQ7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzLkxPR0dFUl9FVkVOVFM7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzLmNzdi5DU1ZMb2dnZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzLmNzdi5DU1ZQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy5jc3YubG9nZ2VyLkRlbGltZXRlZEZpbGVTaW11bGF0aW9uTG9nZ2VyOworCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzLmltcGwuU2ltdWxhdGlvbkxvZ2dlckltcGw7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIEFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5Mb2dnZXI8L2I+PC9lbT4nLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiA8cD4KKyAqIFRoZSBmb2xsb3dpbmcgZmVhdHVyZXMgYXJlIGltcGxlbWVudGVkOgorICogPHVsPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy5jc3YuaW1wbC5DU1ZMb2dnZXJJbXBsI2lzVXNlRGVmYXVsdExvZ0RpcmVjdG9yeSA8ZW0+VXNlIERlZmF1bHQgTG9nIERpcmVjdG9yeTwvZW0+fTwvbGk+CisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzLmNzdi5pbXBsLkNTVkxvZ2dlckltcGwjZ2V0TG9nRGlyZWN0b3J5IDxlbT5Mb2cgRGlyZWN0b3J5PC9lbT59PC9saT4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMuY3N2LmltcGwuQ1NWTG9nZ2VySW1wbCNnZXREZWxpbWV0ZXIgPGVtPkRlbGltZXRlcjwvZW0+fTwvbGk+CisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzLmNzdi5pbXBsLkNTVkxvZ2dlckltcGwjaXNMb2dSdW5QYXJhbWV0ZXJzIDxlbT5Mb2cgUnVuIFBhcmFtZXRlcnM8L2VtPn08L2xpPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy5jc3YuaW1wbC5DU1ZMb2dnZXJJbXBsI2dldEJ1ZmZlclNpemUgPGVtPkJ1ZmZlciBTaXplPC9lbT59PC9saT4KKyAqIDwvdWw+CisgKiA8L3A+CisgKgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgQ1NWTG9nZ2VySW1wbCBleHRlbmRzIFNpbXVsYXRpb25Mb2dnZXJJbXBsIGltcGxlbWVudHMgQ1NWTG9nZ2VyIHsKKwkvKioKKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjaXNVc2VEZWZhdWx0TG9nRGlyZWN0b3J5KCkgPGVtPlVzZSBEZWZhdWx0IExvZyBEaXJlY3Rvcnk8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI2lzVXNlRGVmYXVsdExvZ0RpcmVjdG9yeSgpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBib29sZWFuIFVTRV9ERUZBVUxUX0xPR19ESVJFQ1RPUllfRURFRkFVTFQgPSB0cnVlOworCisJLyoqCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjaXNVc2VEZWZhdWx0TG9nRGlyZWN0b3J5KCkgPGVtPlVzZSBEZWZhdWx0IExvZyBEaXJlY3Rvcnk8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI2lzVXNlRGVmYXVsdExvZ0RpcmVjdG9yeSgpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIGJvb2xlYW4gdXNlRGVmYXVsdExvZ0RpcmVjdG9yeSA9IFVTRV9ERUZBVUxUX0xPR19ESVJFQ1RPUllfRURFRkFVTFQ7CisKKwkvKioKKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0TG9nRGlyZWN0b3J5KCkgPGVtPkxvZyBEaXJlY3Rvcnk8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI2dldExvZ0RpcmVjdG9yeSgpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBTdHJpbmcgTE9HX0RJUkVDVE9SWV9FREVGQVVMVCA9IG51bGw7CisKKwkvKioKKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRMb2dEaXJlY3RvcnkoKSA8ZW0+TG9nIERpcmVjdG9yeTwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZ2V0TG9nRGlyZWN0b3J5KCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgU3RyaW5nIGxvZ0RpcmVjdG9yeSA9IExPR19ESVJFQ1RPUllfRURFRkFVTFQ7CisKKwkvKioKKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0RGVsaW1ldGVyKCkgPGVtPkRlbGltZXRlcjwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZ2V0RGVsaW1ldGVyKCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIFN0cmluZyBERUxJTUVURVJfRURFRkFVTFQgPSAiLCI7CisKKwkvKioKKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXREZWxpbWV0ZXIoKSA8ZW0+RGVsaW1ldGVyPC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNnZXREZWxpbWV0ZXIoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBTdHJpbmcgZGVsaW1ldGVyID0gREVMSU1FVEVSX0VERUZBVUxUOworCisJLyoqCisJICogVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2lzTG9nUnVuUGFyYW1ldGVycygpIDxlbT5Mb2cgUnVuIFBhcmFtZXRlcnM8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI2lzTG9nUnVuUGFyYW1ldGVycygpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBib29sZWFuIExPR19SVU5fUEFSQU1FVEVSU19FREVGQVVMVCA9IHRydWU7CisKKwkvKioKKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNpc0xvZ1J1blBhcmFtZXRlcnMoKSA8ZW0+TG9nIFJ1biBQYXJhbWV0ZXJzPC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNpc0xvZ1J1blBhcmFtZXRlcnMoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBib29sZWFuIGxvZ1J1blBhcmFtZXRlcnMgPSBMT0dfUlVOX1BBUkFNRVRFUlNfRURFRkFVTFQ7CisKKwkvKioKKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0QnVmZmVyU2l6ZSgpIDxlbT5CdWZmZXIgU2l6ZTwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZ2V0QnVmZmVyU2l6ZSgpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBpbnQgQlVGRkVSX1NJWkVfRURFRkFVTFQgPSAxMDI0OworCisJLyoqCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0QnVmZmVyU2l6ZSgpIDxlbT5CdWZmZXIgU2l6ZTwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZ2V0QnVmZmVyU2l6ZSgpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIGludCBidWZmZXJTaXplID0gQlVGRkVSX1NJWkVfRURFRkFVTFQ7CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQ1NWTG9nZ2VySW1wbCgpIHsKKwkJc3VwZXIoKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgRUNsYXNzIGVTdGF0aWNDbGFzcygpIHsKKwkJcmV0dXJuIENTVlBhY2thZ2UuTGl0ZXJhbHMuQ1NWX0xPR0dFUjsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgYm9vbGVhbiBpc1VzZURlZmF1bHRMb2dEaXJlY3RvcnkoKSB7CisJCXJldHVybiB1c2VEZWZhdWx0TG9nRGlyZWN0b3J5OworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIHNldFVzZURlZmF1bHRMb2dEaXJlY3RvcnkoYm9vbGVhbiBuZXdVc2VEZWZhdWx0TG9nRGlyZWN0b3J5KSB7CisJCWJvb2xlYW4gb2xkVXNlRGVmYXVsdExvZ0RpcmVjdG9yeSA9IHVzZURlZmF1bHRMb2dEaXJlY3Rvcnk7CisJCXVzZURlZmF1bHRMb2dEaXJlY3RvcnkgPSBuZXdVc2VEZWZhdWx0TG9nRGlyZWN0b3J5OworCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpCisJCQllTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBDU1ZQYWNrYWdlLkNTVl9MT0dHRVJfX1VTRV9ERUZBVUxUX0xPR19ESVJFQ1RPUlksIG9sZFVzZURlZmF1bHRMb2dEaXJlY3RvcnksIHVzZURlZmF1bHRMb2dEaXJlY3RvcnkpKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgU3RyaW5nIGdldExvZ0RpcmVjdG9yeSgpIHsKKwkJcmV0dXJuIGxvZ0RpcmVjdG9yeTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRMb2dEaXJlY3RvcnkoU3RyaW5nIG5ld0xvZ0RpcmVjdG9yeSkgeworCQlTdHJpbmcgb2xkTG9nRGlyZWN0b3J5ID0gbG9nRGlyZWN0b3J5OworCQlsb2dEaXJlY3RvcnkgPSBuZXdMb2dEaXJlY3Rvcnk7CisJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkKKwkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIENTVlBhY2thZ2UuQ1NWX0xPR0dFUl9fTE9HX0RJUkVDVE9SWSwgb2xkTG9nRGlyZWN0b3J5LCBsb2dEaXJlY3RvcnkpKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgU3RyaW5nIGdldERlbGltZXRlcigpIHsKKwkJcmV0dXJuIGRlbGltZXRlcjsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXREZWxpbWV0ZXIoU3RyaW5nIG5ld0RlbGltZXRlcikgeworCQlTdHJpbmcgb2xkRGVsaW1ldGVyID0gZGVsaW1ldGVyOworCQlkZWxpbWV0ZXIgPSBuZXdEZWxpbWV0ZXI7CisJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkKKwkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIENTVlBhY2thZ2UuQ1NWX0xPR0dFUl9fREVMSU1FVEVSLCBvbGREZWxpbWV0ZXIsIGRlbGltZXRlcikpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBib29sZWFuIGlzTG9nUnVuUGFyYW1ldGVycygpIHsKKwkJcmV0dXJuIGxvZ1J1blBhcmFtZXRlcnM7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgc2V0TG9nUnVuUGFyYW1ldGVycyhib29sZWFuIG5ld0xvZ1J1blBhcmFtZXRlcnMpIHsKKwkJYm9vbGVhbiBvbGRMb2dSdW5QYXJhbWV0ZXJzID0gbG9nUnVuUGFyYW1ldGVyczsKKwkJbG9nUnVuUGFyYW1ldGVycyA9IG5ld0xvZ1J1blBhcmFtZXRlcnM7CisJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkKKwkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIENTVlBhY2thZ2UuQ1NWX0xPR0dFUl9fTE9HX1JVTl9QQVJBTUVURVJTLCBvbGRMb2dSdW5QYXJhbWV0ZXJzLCBsb2dSdW5QYXJhbWV0ZXJzKSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIGludCBnZXRCdWZmZXJTaXplKCkgeworCQlyZXR1cm4gYnVmZmVyU2l6ZTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRCdWZmZXJTaXplKGludCBuZXdCdWZmZXJTaXplKSB7CisJCWludCBvbGRCdWZmZXJTaXplID0gYnVmZmVyU2l6ZTsKKwkJYnVmZmVyU2l6ZSA9IG5ld0J1ZmZlclNpemU7CisJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkKKwkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIENTVlBhY2thZ2UuQ1NWX0xPR0dFUl9fQlVGRkVSX1NJWkUsIG9sZEJ1ZmZlclNpemUsIGJ1ZmZlclNpemUpKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgT2JqZWN0IGVHZXQoaW50IGZlYXR1cmVJRCwgYm9vbGVhbiByZXNvbHZlLCBib29sZWFuIGNvcmVUeXBlKSB7CisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7CisJCQljYXNlIENTVlBhY2thZ2UuQ1NWX0xPR0dFUl9fVVNFX0RFRkFVTFRfTE9HX0RJUkVDVE9SWToKKwkJCQlyZXR1cm4gaXNVc2VEZWZhdWx0TG9nRGlyZWN0b3J5KCk7CisJCQljYXNlIENTVlBhY2thZ2UuQ1NWX0xPR0dFUl9fTE9HX0RJUkVDVE9SWToKKwkJCQlyZXR1cm4gZ2V0TG9nRGlyZWN0b3J5KCk7CisJCQljYXNlIENTVlBhY2thZ2UuQ1NWX0xPR0dFUl9fREVMSU1FVEVSOgorCQkJCXJldHVybiBnZXREZWxpbWV0ZXIoKTsKKwkJCWNhc2UgQ1NWUGFja2FnZS5DU1ZfTE9HR0VSX19MT0dfUlVOX1BBUkFNRVRFUlM6CisJCQkJcmV0dXJuIGlzTG9nUnVuUGFyYW1ldGVycygpOworCQkJY2FzZSBDU1ZQYWNrYWdlLkNTVl9MT0dHRVJfX0JVRkZFUl9TSVpFOgorCQkJCXJldHVybiBnZXRCdWZmZXJTaXplKCk7CisJCX0KKwkJcmV0dXJuIHN1cGVyLmVHZXQoZmVhdHVyZUlELCByZXNvbHZlLCBjb3JlVHlwZSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgZVNldChpbnQgZmVhdHVyZUlELCBPYmplY3QgbmV3VmFsdWUpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJCWNhc2UgQ1NWUGFja2FnZS5DU1ZfTE9HR0VSX19VU0VfREVGQVVMVF9MT0dfRElSRUNUT1JZOgorCQkJCXNldFVzZURlZmF1bHRMb2dEaXJlY3RvcnkoKEJvb2xlYW4pbmV3VmFsdWUpOworCQkJCXJldHVybjsKKwkJCWNhc2UgQ1NWUGFja2FnZS5DU1ZfTE9HR0VSX19MT0dfRElSRUNUT1JZOgorCQkJCXNldExvZ0RpcmVjdG9yeSgoU3RyaW5nKW5ld1ZhbHVlKTsKKwkJCQlyZXR1cm47CisJCQljYXNlIENTVlBhY2thZ2UuQ1NWX0xPR0dFUl9fREVMSU1FVEVSOgorCQkJCXNldERlbGltZXRlcigoU3RyaW5nKW5ld1ZhbHVlKTsKKwkJCQlyZXR1cm47CisJCQljYXNlIENTVlBhY2thZ2UuQ1NWX0xPR0dFUl9fTE9HX1JVTl9QQVJBTUVURVJTOgorCQkJCXNldExvZ1J1blBhcmFtZXRlcnMoKEJvb2xlYW4pbmV3VmFsdWUpOworCQkJCXJldHVybjsKKwkJCWNhc2UgQ1NWUGFja2FnZS5DU1ZfTE9HR0VSX19CVUZGRVJfU0laRToKKwkJCQlzZXRCdWZmZXJTaXplKChJbnRlZ2VyKW5ld1ZhbHVlKTsKKwkJCQlyZXR1cm47CisJCX0KKwkJc3VwZXIuZVNldChmZWF0dXJlSUQsIG5ld1ZhbHVlKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBlVW5zZXQoaW50IGZlYXR1cmVJRCkgeworCQlzd2l0Y2ggKGZlYXR1cmVJRCkgeworCQkJY2FzZSBDU1ZQYWNrYWdlLkNTVl9MT0dHRVJfX1VTRV9ERUZBVUxUX0xPR19ESVJFQ1RPUlk6CisJCQkJc2V0VXNlRGVmYXVsdExvZ0RpcmVjdG9yeShVU0VfREVGQVVMVF9MT0dfRElSRUNUT1JZX0VERUZBVUxUKTsKKwkJCQlyZXR1cm47CisJCQljYXNlIENTVlBhY2thZ2UuQ1NWX0xPR0dFUl9fTE9HX0RJUkVDVE9SWToKKwkJCQlzZXRMb2dEaXJlY3RvcnkoTE9HX0RJUkVDVE9SWV9FREVGQVVMVCk7CisJCQkJcmV0dXJuOworCQkJY2FzZSBDU1ZQYWNrYWdlLkNTVl9MT0dHRVJfX0RFTElNRVRFUjoKKwkJCQlzZXREZWxpbWV0ZXIoREVMSU1FVEVSX0VERUZBVUxUKTsKKwkJCQlyZXR1cm47CisJCQljYXNlIENTVlBhY2thZ2UuQ1NWX0xPR0dFUl9fTE9HX1JVTl9QQVJBTUVURVJTOgorCQkJCXNldExvZ1J1blBhcmFtZXRlcnMoTE9HX1JVTl9QQVJBTUVURVJTX0VERUZBVUxUKTsKKwkJCQlyZXR1cm47CisJCQljYXNlIENTVlBhY2thZ2UuQ1NWX0xPR0dFUl9fQlVGRkVSX1NJWkU6CisJCQkJc2V0QnVmZmVyU2l6ZShCVUZGRVJfU0laRV9FREVGQVVMVCk7CisJCQkJcmV0dXJuOworCQl9CisJCXN1cGVyLmVVbnNldChmZWF0dXJlSUQpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBib29sZWFuIGVJc1NldChpbnQgZmVhdHVyZUlEKSB7CisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7CisJCQljYXNlIENTVlBhY2thZ2UuQ1NWX0xPR0dFUl9fVVNFX0RFRkFVTFRfTE9HX0RJUkVDVE9SWToKKwkJCQlyZXR1cm4gdXNlRGVmYXVsdExvZ0RpcmVjdG9yeSAhPSBVU0VfREVGQVVMVF9MT0dfRElSRUNUT1JZX0VERUZBVUxUOworCQkJY2FzZSBDU1ZQYWNrYWdlLkNTVl9MT0dHRVJfX0xPR19ESVJFQ1RPUlk6CisJCQkJcmV0dXJuIExPR19ESVJFQ1RPUllfRURFRkFVTFQgPT0gbnVsbCA/IGxvZ0RpcmVjdG9yeSAhPSBudWxsIDogIUxPR19ESVJFQ1RPUllfRURFRkFVTFQuZXF1YWxzKGxvZ0RpcmVjdG9yeSk7CisJCQljYXNlIENTVlBhY2thZ2UuQ1NWX0xPR0dFUl9fREVMSU1FVEVSOgorCQkJCXJldHVybiBERUxJTUVURVJfRURFRkFVTFQgPT0gbnVsbCA/IGRlbGltZXRlciAhPSBudWxsIDogIURFTElNRVRFUl9FREVGQVVMVC5lcXVhbHMoZGVsaW1ldGVyKTsKKwkJCWNhc2UgQ1NWUGFja2FnZS5DU1ZfTE9HR0VSX19MT0dfUlVOX1BBUkFNRVRFUlM6CisJCQkJcmV0dXJuIGxvZ1J1blBhcmFtZXRlcnMgIT0gTE9HX1JVTl9QQVJBTUVURVJTX0VERUZBVUxUOworCQkJY2FzZSBDU1ZQYWNrYWdlLkNTVl9MT0dHRVJfX0JVRkZFUl9TSVpFOgorCQkJCXJldHVybiBidWZmZXJTaXplICE9IEJVRkZFUl9TSVpFX0VERUZBVUxUOworCQl9CisJCXJldHVybiBzdXBlci5lSXNTZXQoZmVhdHVyZUlEKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkgeworCQlpZiAoZUlzUHJveHkoKSkgcmV0dXJuIHN1cGVyLnRvU3RyaW5nKCk7CisKKwkJU3RyaW5nQnVmZmVyIHJlc3VsdCA9IG5ldyBTdHJpbmdCdWZmZXIoc3VwZXIudG9TdHJpbmcoKSk7CisJCXJlc3VsdC5hcHBlbmQoIiAodXNlRGVmYXVsdExvZ0RpcmVjdG9yeTogIik7CisJCXJlc3VsdC5hcHBlbmQodXNlRGVmYXVsdExvZ0RpcmVjdG9yeSk7CisJCXJlc3VsdC5hcHBlbmQoIiwgbG9nRGlyZWN0b3J5OiAiKTsKKwkJcmVzdWx0LmFwcGVuZChsb2dEaXJlY3RvcnkpOworCQlyZXN1bHQuYXBwZW5kKCIsIGRlbGltZXRlcjogIik7CisJCXJlc3VsdC5hcHBlbmQoZGVsaW1ldGVyKTsKKwkJcmVzdWx0LmFwcGVuZCgiLCBsb2dSdW5QYXJhbWV0ZXJzOiAiKTsKKwkJcmVzdWx0LmFwcGVuZChsb2dSdW5QYXJhbWV0ZXJzKTsKKwkJcmVzdWx0LmFwcGVuZCgiLCBidWZmZXJTaXplOiAiKTsKKwkJcmVzdWx0LmFwcGVuZChidWZmZXJTaXplKTsKKwkJcmVzdWx0LmFwcGVuZCgnKScpOworCQlyZXR1cm4gcmVzdWx0LnRvU3RyaW5nKCk7CisJfQorCisJCisJcHJpdmF0ZSBEZWxpbWV0ZWRGaWxlU2ltdWxhdGlvbkxvZ2dlciBsb2dnZXI7CisJCisKKwkvKiAobm9uLUphdmFkb2MpCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMuaW1wbC5TaW11bGF0aW9uTG9nZ2VySW1wbCNzaW11bGF0aW9uRXZlbnQob3JnLmVjbGlwc2Uuc3RlbS5qb2JzLnNpbXVsYXRpb24uU2ltdWxhdGlvbkV2ZW50KQorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJcHVibGljIHZvaWQgc2ltdWxhdGlvbkV2ZW50KFNpbXVsYXRpb25FdmVudCBldmVudCkgCisJeworCQlpZiAobG9nZ2VyICE9IG51bGwpIHsKKwkJCWxvZ2dlci5sb2coZXZlbnQpOworCQl9CisJfQorCQorCS8qIChub24tSmF2YWRvYykKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy5pbXBsLlNpbXVsYXRpb25Mb2dnZXJJbXBsI2xvZ2dlckV2ZW50KG9yZy5lY2xpcHNlLnN0ZW0uam9icy5zaW11bGF0aW9uLklTaW11bGF0aW9uLCBvcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMuTE9HR0VSX0VWRU5UUykKKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCXB1YmxpYyB2b2lkIGxvZ2dlckV2ZW50KElTaW11bGF0aW9uIHNpbXVsYXRpb24sIExPR0dFUl9FVkVOVFMgZXZlbnQpIAorCXsKKwkJaWYgKGV2ZW50LmVxdWFscyhMT0dHRVJfRVZFTlRTLkxPR0dFUl9TVEFSVEVEKSkgeworCQkJbG9nZ2VyID0gbmV3IERlbGltZXRlZEZpbGVTaW11bGF0aW9uTG9nZ2VyKHRoaXMsIHNpbXVsYXRpb24pOworCQkJbG9nZ2VyLnN0YXJ0KCk7CisJCX0gZWxzZSBpZiAoZXZlbnQuZXF1YWxzKExPR0dFUl9FVkVOVFMuTE9HR0VSX1NUT1BQRUQpKSB7CisJCQlsb2dnZXIuc3RvcCgpOworCQkJbG9nZ2VyID0gbnVsbDsKKwkJfQorCX0KKworfSAvL0NTVkxvZ2dlckltcGwKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzLmNzdi9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9sb2dnZXJzL2Nzdi9pbXBsL0NTVlBhY2thZ2VJbXBsLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy5jc3Yvc3JjL29yZy9lY2xpcHNlL3N0ZW0vbG9nZ2Vycy9jc3YvaW1wbC9DU1ZQYWNrYWdlSW1wbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQzNDVkNWQKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy5jc3Yvc3JjL29yZy9lY2xpcHNlL3N0ZW0vbG9nZ2Vycy9jc3YvaW1wbC9DU1ZQYWNrYWdlSW1wbC5qYXZhCkBAIC0wLDAgKzEsMjM0IEBACisvKioKKyAqIDxjb3B5cmlnaHQ+CisgKiA8L2NvcHlyaWdodD4KKyAqCisgKiAkSWQkCisgKi8KK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzLmNzdi5pbXBsOworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVBdHRyaWJ1dGU7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzczsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRVBhY2thZ2U7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuaW1wbC5FUGFja2FnZUltcGw7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMuU2ltdWxhdGlvbkxvZ2dlclBhY2thZ2U7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMuY3N2LkNTVkZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzLmNzdi5DU1ZMb2dnZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzLmNzdi5DU1ZQYWNrYWdlOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiBBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgbW9kZWwgPGI+UGFja2FnZTwvYj4uCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIENTVlBhY2thZ2VJbXBsIGV4dGVuZHMgRVBhY2thZ2VJbXBsIGltcGxlbWVudHMgQ1NWUGFja2FnZSB7CisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJpdmF0ZSBFQ2xhc3MgY3N2TG9nZ2VyRUNsYXNzID0gbnVsbDsKKworCS8qKgorCSAqIENyZWF0ZXMgYW4gaW5zdGFuY2Ugb2YgdGhlIG1vZGVsIDxiPlBhY2thZ2U8L2I+LCByZWdpc3RlcmVkIHdpdGgKKwkgKiB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVQYWNrYWdlLlJlZ2lzdHJ5IEVQYWNrYWdlLlJlZ2lzdHJ5fSBieSB0aGUgcGFja2FnZQorCSAqIHBhY2thZ2UgVVJJIHZhbHVlLgorCSAqIDxwPk5vdGU6IHRoZSBjb3JyZWN0IHdheSB0byBjcmVhdGUgdGhlIHBhY2thZ2UgaXMgdmlhIHRoZSBzdGF0aWMKKwkgKiBmYWN0b3J5IG1ldGhvZCB7QGxpbmsgI2luaXQgaW5pdCgpfSwgd2hpY2ggYWxzbyBwZXJmb3JtcworCSAqIGluaXRpYWxpemF0aW9uIG9mIHRoZSBwYWNrYWdlLCBvciByZXR1cm5zIHRoZSByZWdpc3RlcmVkIHBhY2thZ2UsCisJICogaWYgb25lIGFscmVhZHkgZXhpc3RzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRVBhY2thZ2UuUmVnaXN0cnkKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy5jc3YuQ1NWUGFja2FnZSNlTlNfVVJJCisJICogQHNlZSAjaW5pdCgpCisJICogQGdlbmVyYXRlZAorCSAqLworCXByaXZhdGUgQ1NWUGFja2FnZUltcGwoKSB7CisJCXN1cGVyKGVOU19VUkksIENTVkZhY3RvcnkuZUlOU1RBTkNFKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcml2YXRlIHN0YXRpYyBib29sZWFuIGlzSW5pdGVkID0gZmFsc2U7CisKKwkvKioKKwkgKiBDcmVhdGVzLCByZWdpc3RlcnMsIGFuZCBpbml0aWFsaXplcyB0aGUgPGI+UGFja2FnZTwvYj4gZm9yIHRoaXMgbW9kZWwsIGFuZCBmb3IgYW55IG90aGVycyB1cG9uIHdoaWNoIGl0IGRlcGVuZHMuCisJICogCisJICogPHA+VGhpcyBtZXRob2QgaXMgdXNlZCB0byBpbml0aWFsaXplIHtAbGluayBDU1ZQYWNrYWdlI2VJTlNUQU5DRX0gd2hlbiB0aGF0IGZpZWxkIGlzIGFjY2Vzc2VkLgorCSAqIENsaWVudHMgc2hvdWxkIG5vdCBpbnZva2UgaXQgZGlyZWN0bHkuIEluc3RlYWQsIHRoZXkgc2hvdWxkIHNpbXBseSBhY2Nlc3MgdGhhdCBmaWVsZCB0byBvYnRhaW4gdGhlIHBhY2thZ2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNlTlNfVVJJCisJICogQHNlZSAjY3JlYXRlUGFja2FnZUNvbnRlbnRzKCkKKwkgKiBAc2VlICNpbml0aWFsaXplUGFja2FnZUNvbnRlbnRzKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHN0YXRpYyBDU1ZQYWNrYWdlIGluaXQoKSB7CisJCWlmIChpc0luaXRlZCkgcmV0dXJuIChDU1ZQYWNrYWdlKUVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVQYWNrYWdlKENTVlBhY2thZ2UuZU5TX1VSSSk7CisKKwkJLy8gT2J0YWluIG9yIGNyZWF0ZSBhbmQgcmVnaXN0ZXIgcGFja2FnZQorCQlDU1ZQYWNrYWdlSW1wbCB0aGVDU1ZQYWNrYWdlID0gKENTVlBhY2thZ2VJbXBsKShFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXQoZU5TX1VSSSkgaW5zdGFuY2VvZiBDU1ZQYWNrYWdlSW1wbCA/IEVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldChlTlNfVVJJKSA6IG5ldyBDU1ZQYWNrYWdlSW1wbCgpKTsKKworCQlpc0luaXRlZCA9IHRydWU7CisKKwkJLy8gSW5pdGlhbGl6ZSBzaW1wbGUgZGVwZW5kZW5jaWVzCisJCVNpbXVsYXRpb25Mb2dnZXJQYWNrYWdlLmVJTlNUQU5DRS5lQ2xhc3MoKTsKKworCQkvLyBDcmVhdGUgcGFja2FnZSBtZXRhLWRhdGEgb2JqZWN0cworCQl0aGVDU1ZQYWNrYWdlLmNyZWF0ZVBhY2thZ2VDb250ZW50cygpOworCisJCS8vIEluaXRpYWxpemUgY3JlYXRlZCBtZXRhLWRhdGEKKwkJdGhlQ1NWUGFja2FnZS5pbml0aWFsaXplUGFja2FnZUNvbnRlbnRzKCk7CisKKwkJLy8gTWFyayBtZXRhLWRhdGEgdG8gaW5kaWNhdGUgaXQgY2FuJ3QgYmUgY2hhbmdlZAorCQl0aGVDU1ZQYWNrYWdlLmZyZWV6ZSgpOworCisgIAorCQkvLyBVcGRhdGUgdGhlIHJlZ2lzdHJ5IGFuZCByZXR1cm4gdGhlIHBhY2thZ2UKKwkJRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UucHV0KENTVlBhY2thZ2UuZU5TX1VSSSwgdGhlQ1NWUGFja2FnZSk7CisJCXJldHVybiB0aGVDU1ZQYWNrYWdlOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQ2xhc3MgZ2V0Q1NWTG9nZ2VyKCkgeworCQlyZXR1cm4gY3N2TG9nZ2VyRUNsYXNzOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQXR0cmlidXRlIGdldENTVkxvZ2dlcl9Vc2VEZWZhdWx0TG9nRGlyZWN0b3J5KCkgeworCQlyZXR1cm4gKEVBdHRyaWJ1dGUpY3N2TG9nZ2VyRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVBdHRyaWJ1dGUgZ2V0Q1NWTG9nZ2VyX0xvZ0RpcmVjdG9yeSgpIHsKKwkJcmV0dXJuIChFQXR0cmlidXRlKWNzdkxvZ2dlckVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDEpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQXR0cmlidXRlIGdldENTVkxvZ2dlcl9EZWxpbWV0ZXIoKSB7CisJCXJldHVybiAoRUF0dHJpYnV0ZSljc3ZMb2dnZXJFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgyKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUF0dHJpYnV0ZSBnZXRDU1ZMb2dnZXJfTG9nUnVuUGFyYW1ldGVycygpIHsKKwkJcmV0dXJuIChFQXR0cmlidXRlKWNzdkxvZ2dlckVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDMpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQXR0cmlidXRlIGdldENTVkxvZ2dlcl9CdWZmZXJTaXplKCkgeworCQlyZXR1cm4gKEVBdHRyaWJ1dGUpY3N2TG9nZ2VyRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoNCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIENTVkZhY3RvcnkgZ2V0Q1NWRmFjdG9yeSgpIHsKKwkJcmV0dXJuIChDU1ZGYWN0b3J5KWdldEVGYWN0b3J5SW5zdGFuY2UoKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcml2YXRlIGJvb2xlYW4gaXNDcmVhdGVkID0gZmFsc2U7CisKKwkvKioKKwkgKiBDcmVhdGVzIHRoZSBtZXRhLW1vZGVsIG9iamVjdHMgZm9yIHRoZSBwYWNrYWdlLiAgVGhpcyBtZXRob2QgaXMKKwkgKiBndWFyZGVkIHRvIGhhdmUgbm8gYWZmZWN0IG9uIGFueSBpbnZvY2F0aW9uIGJ1dCBpdHMgZmlyc3QuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgY3JlYXRlUGFja2FnZUNvbnRlbnRzKCkgeworCQlpZiAoaXNDcmVhdGVkKSByZXR1cm47CisJCWlzQ3JlYXRlZCA9IHRydWU7CisKKwkJLy8gQ3JlYXRlIGNsYXNzZXMgYW5kIHRoZWlyIGZlYXR1cmVzCisJCWNzdkxvZ2dlckVDbGFzcyA9IGNyZWF0ZUVDbGFzcyhDU1ZfTE9HR0VSKTsKKwkJY3JlYXRlRUF0dHJpYnV0ZShjc3ZMb2dnZXJFQ2xhc3MsIENTVl9MT0dHRVJfX1VTRV9ERUZBVUxUX0xPR19ESVJFQ1RPUlkpOworCQljcmVhdGVFQXR0cmlidXRlKGNzdkxvZ2dlckVDbGFzcywgQ1NWX0xPR0dFUl9fTE9HX0RJUkVDVE9SWSk7CisJCWNyZWF0ZUVBdHRyaWJ1dGUoY3N2TG9nZ2VyRUNsYXNzLCBDU1ZfTE9HR0VSX19ERUxJTUVURVIpOworCQljcmVhdGVFQXR0cmlidXRlKGNzdkxvZ2dlckVDbGFzcywgQ1NWX0xPR0dFUl9fTE9HX1JVTl9QQVJBTUVURVJTKTsKKwkJY3JlYXRlRUF0dHJpYnV0ZShjc3ZMb2dnZXJFQ2xhc3MsIENTVl9MT0dHRVJfX0JVRkZFUl9TSVpFKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcml2YXRlIGJvb2xlYW4gaXNJbml0aWFsaXplZCA9IGZhbHNlOworCisJLyoqCisJICogQ29tcGxldGUgdGhlIGluaXRpYWxpemF0aW9uIG9mIHRoZSBwYWNrYWdlIGFuZCBpdHMgbWV0YS1tb2RlbC4gIFRoaXMKKwkgKiBtZXRob2QgaXMgZ3VhcmRlZCB0byBoYXZlIG5vIGFmZmVjdCBvbiBhbnkgaW52b2NhdGlvbiBidXQgaXRzIGZpcnN0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIGluaXRpYWxpemVQYWNrYWdlQ29udGVudHMoKSB7CisJCWlmIChpc0luaXRpYWxpemVkKSByZXR1cm47CisJCWlzSW5pdGlhbGl6ZWQgPSB0cnVlOworCisJCS8vIEluaXRpYWxpemUgcGFja2FnZQorCQlzZXROYW1lKGVOQU1FKTsKKwkJc2V0TnNQcmVmaXgoZU5TX1BSRUZJWCk7CisJCXNldE5zVVJJKGVOU19VUkkpOworCisJCS8vIE9idGFpbiBvdGhlciBkZXBlbmRlbnQgcGFja2FnZXMKKwkJU2ltdWxhdGlvbkxvZ2dlclBhY2thZ2UgdGhlU2ltdWxhdGlvbkxvZ2dlclBhY2thZ2UgPSAoU2ltdWxhdGlvbkxvZ2dlclBhY2thZ2UpRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RVBhY2thZ2UoU2ltdWxhdGlvbkxvZ2dlclBhY2thZ2UuZU5TX1VSSSk7CisKKwkJLy8gQ3JlYXRlIHR5cGUgcGFyYW1ldGVycworCisJCS8vIFNldCBib3VuZHMgZm9yIHR5cGUgcGFyYW1ldGVycworCisJCS8vIEFkZCBzdXBlcnR5cGVzIHRvIGNsYXNzZXMKKwkJY3N2TG9nZ2VyRUNsYXNzLmdldEVTdXBlclR5cGVzKCkuYWRkKHRoZVNpbXVsYXRpb25Mb2dnZXJQYWNrYWdlLmdldFN5bmNocm9ub3VzTG9nZ2VyKCkpOworCisJCS8vIEluaXRpYWxpemUgY2xhc3NlcyBhbmQgZmVhdHVyZXM7IGFkZCBvcGVyYXRpb25zIGFuZCBwYXJhbWV0ZXJzCisJCWluaXRFQ2xhc3MoY3N2TG9nZ2VyRUNsYXNzLCBDU1ZMb2dnZXIuY2xhc3MsICJDU1ZMb2dnZXIiLCAhSVNfQUJTVFJBQ1QsICFJU19JTlRFUkZBQ0UsIElTX0dFTkVSQVRFRF9JTlNUQU5DRV9DTEFTUyk7CisJCWluaXRFQXR0cmlidXRlKGdldENTVkxvZ2dlcl9Vc2VEZWZhdWx0TG9nRGlyZWN0b3J5KCksIGVjb3JlUGFja2FnZS5nZXRFQm9vbGVhbigpLCAidXNlRGVmYXVsdExvZ0RpcmVjdG9yeSIsICJ0cnVlIiwgMCwgMSwgQ1NWTG9nZ2VyLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOworCQlpbml0RUF0dHJpYnV0ZShnZXRDU1ZMb2dnZXJfTG9nRGlyZWN0b3J5KCksIGVjb3JlUGFja2FnZS5nZXRFU3RyaW5nKCksICJsb2dEaXJlY3RvcnkiLCBudWxsLCAwLCAxLCBDU1ZMb2dnZXIuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7CisJCWluaXRFQXR0cmlidXRlKGdldENTVkxvZ2dlcl9EZWxpbWV0ZXIoKSwgZWNvcmVQYWNrYWdlLmdldEVTdHJpbmcoKSwgImRlbGltZXRlciIsICIsIiwgMCwgMSwgQ1NWTG9nZ2VyLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOworCQlpbml0RUF0dHJpYnV0ZShnZXRDU1ZMb2dnZXJfTG9nUnVuUGFyYW1ldGVycygpLCBlY29yZVBhY2thZ2UuZ2V0RUJvb2xlYW4oKSwgImxvZ1J1blBhcmFtZXRlcnMiLCAidHJ1ZSIsIDAsIDEsIENTVkxvZ2dlci5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsKKwkJaW5pdEVBdHRyaWJ1dGUoZ2V0Q1NWTG9nZ2VyX0J1ZmZlclNpemUoKSwgZWNvcmVQYWNrYWdlLmdldEVJbnQoKSwgImJ1ZmZlclNpemUiLCAiMTAyNCIsIDAsIDEsIENTVkxvZ2dlci5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsKKworCQkvLyBDcmVhdGUgcmVzb3VyY2UKKwkJY3JlYXRlUmVzb3VyY2UoZU5TX1VSSSk7CisJfQorCit9IC8vQ1NWUGFja2FnZUltcGwKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzLmNzdi9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9sb2dnZXJzL2Nzdi9sb2dnZXIvQ29uc3RhbnRzLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy5jc3Yvc3JjL29yZy9lY2xpcHNlL3N0ZW0vbG9nZ2Vycy9jc3YvbG9nZ2VyL0NvbnN0YW50cy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFmMmQ5MWIKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy5jc3Yvc3JjL29yZy9lY2xpcHNlL3N0ZW0vbG9nZ2Vycy9jc3YvbG9nZ2VyL0NvbnN0YW50cy5qYXZhCkBAIC0wLDAgKzEsNTQgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTEgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMuY3N2LmxvZ2dlcjsKKworaW1wb3J0IGphdmEuaW8uRmlsZTsKK2ltcG9ydCBqYXZhLnRleHQuU2ltcGxlRGF0ZUZvcm1hdDsKK2ltcG9ydCBqYXZhLnV0aWwuTG9jYWxlOworCisvKioKKyAqIEZpeGVkIHZhbHVlcyBmb3IgdXNlIGluIHRoZSBDU1YgTG9nZ2VyIHByb2plY3QKKyAqCisgKi8KK3B1YmxpYyBpbnRlcmZhY2UgQ29uc3RhbnRzIAoreworCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFNZU1RFTV9QQVRIX1NFUEFSQVRPUiA9IEZpbGUuc2VwYXJhdG9yOworCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFNDRU5BUklPU19VUkxfUFJFRklYID0gInBsYXRmb3JtOi9yZXNvdXJjZS8iOworCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEJVSUxEX0lOX1NDRU5BUklPU19QUk9KRUNUX0ZPTERFUiA9ICJCdWlsdEluU2NlbmFyaW9zIjsKKwlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBSRUNPUkRFRF9TSU1VTEFUSU9OU19GT0xERVIgPSAiUmVjb3JkZWRTaW11bGF0aW9ucyI7CisJcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgRU1QVFlfU1RSSU5HID0gIiI7CisJcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmdbXSBFWENMVURFRF9ERUNPUkFUT1JfREVGQVVMVFMgPSBuZXcgU3RyaW5nW10geworCSJvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuQWdncmVnYXRpbmdTSURpc2Vhc2VNb2RlbCJ9OworCisJcHVibGljIHN0YXRpYyBmaW5hbCBTaW1wbGVEYXRlRm9ybWF0IExPR19EQVRFX0ZPUk1BVFRFUiAKKwk9IG5ldyBTaW1wbGVEYXRlRm9ybWF0KCJFRUUgZCBNTU0geXl5eSIsIExvY2FsZS5nZXREZWZhdWx0KCkpOworCQorCS8qKgorCSAqIENTViBIZWFkZXIgTGFiZWwgZm9yIHRpbWUgY29sdW1uCisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgVElNRV9MQUJFTCA9ICJ0aW1lIjsKKworCS8qKgorCSAqIENTViBIZWFkZXIgTGFiZWwgZm9yIGl0ZXJhdGlvbiBjb2x1bW4KKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBJVEVSQVRJT05fTEFCRUwgPSAiaXRlcmF0aW9uIjsKKwkKKwlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBSVU5fUEFSQU1FVEVSX0ZJTEVfTkFNRSA9ICJydW5wYXJhbWV0ZXJzLmNzdiI7CisJCisJcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgTE9HX0ZJTEVfU1VGRklYID0gImNzdiI7CisKKwlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZ1tdIEVYQ0xVREVEX05PREVfREVGQVVMVFMgPSBuZXcgU3RyaW5nW10geyJub2RlL3RyYW5zcG9ydC9waXBlIn07CisKKworCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIExPQ0FUSU9OX0lEX1BSRUZJWCA9ICIvbm9kZS9nZW8vcmVnaW9uLyI7CisJCisJCit9CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy5jc3Yvc3JjL29yZy9lY2xpcHNlL3N0ZW0vbG9nZ2Vycy9jc3YvbG9nZ2VyL0RlbGltZXRlZEZpbGVEZWNvcmF0b3JMb2dnZXIuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzLmNzdi9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9sb2dnZXJzL2Nzdi9sb2dnZXIvRGVsaW1ldGVkRmlsZURlY29yYXRvckxvZ2dlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU2Y2M0MWYKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy5jc3Yvc3JjL29yZy9lY2xpcHNlL3N0ZW0vbG9nZ2Vycy9jc3YvbG9nZ2VyL0RlbGltZXRlZEZpbGVEZWNvcmF0b3JMb2dnZXIuamF2YQpAQCAtMCwwICsxLDY1OSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNiwgMjAwNywgMjAwOCwgMjAxMSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy5jc3YubG9nZ2VyOworCitpbXBvcnQgamF2YS5pby5GaWxlOworaW1wb3J0IGphdmEuaW8uRmlsZVdyaXRlcjsKK2ltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOworaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7CitpbXBvcnQgamF2YS51dGlsLkFycmF5czsKK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbnM7CitpbXBvcnQgamF2YS51dGlsLkNvbXBhcmF0b3I7CitpbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7CitpbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOworaW1wb3J0IGphdmEudXRpbC5MaXN0OworaW1wb3J0IGphdmEudXRpbC5NYXA7CitpbXBvcnQgamF2YS51dGlsLk1hcC5FbnRyeTsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FU3RydWN0dXJhbEZlYXR1cmU7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuQ29tcG9zZWRBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbVByb3BlcnR5RGVzY3JpcHRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbVByb3BlcnR5U291cmNlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uYWRhcHRlcnMudGltZS5UaW1lUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5hZGFwdGVycy50aW1lLlRpbWVQcm92aWRlckFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uQ29tbW9uUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguRHluYW1pY0xhYmVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5JbnRlZ3JhdGlvbkxhYmVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5JbnRlZ3JhdGlvbkxhYmVsVmFsdWU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLk5vZGU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLk5vZGVMYWJlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuRGVjb3JhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5JbnRlZ3JhdGlvbkRlY29yYXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuU1RFTVRpbWU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5hZGFwdGVycy5yZWxhdGl2ZXZhbHVlLlJlbGF0aXZlVmFsdWVQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmFkYXB0ZXJzLnJlbGF0aXZldmFsdWUuUmVsYXRpdmVWYWx1ZVByb3ZpZGVyQWRhcHRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmFkYXB0ZXJzLnJlbGF0aXZldmFsdWUuUmVsYXRpdmVWYWx1ZVByb3ZpZGVyQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLkRpc2Vhc2VNb2RlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuRGlzZWFzZU1vZGVsTGFiZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzLmNzdi5BY3RpdmF0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzLmNzdi5DU1ZMb2dnZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLkRlbW9ncmFwaGljUG9wdWxhdGlvbk1vZGVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5Qb3B1bGF0aW9uR3JvdXA7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLlBvcHVsYXRpb25Nb2RlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuUG9wdWxhdGlvbk1vZGVsTGFiZWw7CisKKy8qKgorICogU1RFTSBEZWNvcmF0b3IgbG9nZ2VyIHRoYXQgd3JpdGVzIHRoZSBvdXRwdXQgdmFsdWVzIG9mIG5vZGUgbGFiZWxzIGZvciB0aGUKKyAqIGRlY29yYXRvcidzIHByb3BlcnRpZXMgdG8gYSBlbnRyeS1kZWxpbWV0ZWQgbG9nIGZpbGUuICBUaGlzIGNsYXNzIGNhbiBiZSAKKyAqIHVzZWQgdG8gY3JlYXRlIHZhcmlvdXMgdHlwZXMgb2YgInNlcGFyYXRlZC12YWx1ZSIgbG9nIGZpbGVzLCBpbmNsdWRpbmcKKyAqIGNvbW1hIGFuZCB0YWIgc2VwYXJhdGVkLgorICoKKyAqLworcHVibGljIGNsYXNzIERlbGltZXRlZEZpbGVEZWNvcmF0b3JMb2dnZXIgCit7CisJcHVibGljIHN0YXRpYyBmaW5hbCBDb21wYXJhdG9yPE5vZGU+IE5PREVfU09SVEVSID0gbmV3IENvbXBhcmF0b3I8Tm9kZT4oKSB7CisJCXB1YmxpYyBpbnQgY29tcGFyZShOb2RlIG4xLCBOb2RlIG4yKSB7CisJCQlTdHJpbmcgczEgPSBuMS5nZXRVUkkoKS50b1N0cmluZygpOworCQkJU3RyaW5nIHMyID0gbjIuZ2V0VVJJKCkudG9TdHJpbmcoKTsKKwkJCXJldHVybiBzMS5jb21wYXJlVG8oczIpOworCQl9CisJfTsKKwkKKwkKKwlwcml2YXRlIGZpbmFsIExpc3Q8U3RyaW5nPiBFWENMVURFRF9OT0RFUyA9IG5ldyBBcnJheUxpc3Q8U3RyaW5nPihBcnJheXMuYXNMaXN0KENvbnN0YW50cy5FWENMVURFRF9OT0RFX0RFRkFVTFRTKSk7CisJCisJcHJpdmF0ZSBmaW5hbCBNYXA8U3RhdGVMZXZlbE1hcCwgRGVsaW1ldGVkV3JpdGVyPiBsb2dXcml0ZXJzID0gbmV3IEhhc2hNYXA8U3RhdGVMZXZlbE1hcCwgRGVsaW1ldGVkV3JpdGVyPigpOworCQorCXByaXZhdGUgZmluYWwgTWFwPEludGVnZXIsIExpc3Q8Tm9kZT4+IHNvcnRlZE5vZGVMaXN0ID0gbmV3IEhhc2hNYXA8SW50ZWdlciwgTGlzdDxOb2RlPj4oKTsKKwkKKwlwcml2YXRlIGZpbmFsIERlbGltZXRlZEZpbGVTaW11bGF0aW9uTG9nZ2VyIHNpbXVsYXRpb25Mb2dnZXI7CisJCisJcHJpdmF0ZSBmaW5hbCBJbnRlZ3JhdGlvbkRlY29yYXRvciBkZWNvcmF0b3I7CisJCisJcHJpdmF0ZSBmaW5hbCBDU1ZMb2dnZXIgbG9nZ2VyOworCisKKwlwcml2YXRlIEZpbGUgbG9nRGlyZWN0b3J5OworCQorCXByaXZhdGUgTWFwPE5vZGUsSW50ZWdlcj4gbm9kZUxldmVsczsKKwkKKwlwcml2YXRlIFN0cmluZyBkZWNvcmF0b3JOYW1lOworCQorCXByaXZhdGUgVGltZVByb3ZpZGVyIHRpbWVQcm92aWRlcjsKKwkKKwlwcml2YXRlIGludCBpbnRlcmF0aW9uQ291bnQgPSAwOworCisJcHJpdmF0ZSBib29sZWFuIGxvZ0ludGVnZXJzID0gZmFsc2U7CisJcHJpdmF0ZSBib29sZWFuIGJlZm9yZVN0YXJ0ID0gZmFsc2U7CisKKwlwcml2YXRlIExpc3Q8SW50ZWdlcj4gcmVzb2x1dGlvbkxldmVsczsKKworCisJcHJpdmF0ZSBMaXN0PFN0cmluZz4gcG9wdWxhdGlvbklkZW50aWZpZXJzID0gbnVsbDsKKwkKKwlwdWJsaWMgRGVsaW1ldGVkRmlsZURlY29yYXRvckxvZ2dlcigKKwkJCURlbGltZXRlZEZpbGVTaW11bGF0aW9uTG9nZ2VyIHNpbXVsYXRpb25Mb2dnZXIsCisJCQlJbnRlZ3JhdGlvbkRlY29yYXRvciBkZWNvcmF0b3IpIHsKKwkJdGhpcy5zaW11bGF0aW9uTG9nZ2VyID0gc2ltdWxhdGlvbkxvZ2dlcjsKKwkJdGhpcy5kZWNvcmF0b3IgPSBkZWNvcmF0b3I7CisJCXRoaXMubG9nZ2VyID0gc2ltdWxhdGlvbkxvZ2dlci5nZXRMb2dnZXIoKTsKKwl9CisKKworCS8qKgorCSAqIFN0YXJ0cyB0aGUgZGVjb3JhdG9yIGxvZ2dlci4gIElmIGVuYWJsZWQsIHdyaXRlcyB0aGUgCisJICogc2ltdWxhdGlvbiBwYXJhbWV0ZXJzIHRoZW4gc2V0cyB1cCBlYWNoIGxvZyB3cml0ZXIgZm9yIHRoZSBnaXZlbiBwcm9wZXJ0aWVzCisJICovCisJcHVibGljIHZvaWQgc3RhcnQoKSAKKwl7CisJCWlmIChsb2dnZXIuaXNMb2dSdW5QYXJhbWV0ZXJzKCkpIHsKKwkJCXdyaXRlUnVuUGFyYW1ldGVycygpOworCQl9CisJCQorCQlzZXR1cFByb3BlcnR5TG9nZ2VycygpOworCX0KKworCS8qKgorCSAqIFN0b3BzIHRoZSBkZWNvcmF0b3IgbG9nZ2VyLiAgRmx1c2hlcyBhbmQgY2xvc2VzIGVhY2ggbG9nIHdyaXRlcgorCSAqLworCXB1YmxpYyB2b2lkIHN0b3AoKSAKKwl7CisJCWZsdXNoKCk7CisJCWZvciAoRGVsaW1ldGVkV3JpdGVyIGZ3IDogbG9nV3JpdGVycy52YWx1ZXMoKSkgeworCQkJRmlsZVV0aWxzLnNhZmVDbG9zZShmdyk7CisJCX0KKwkJbG9nV3JpdGVycy5jbGVhcigpOworCQlub2RlTGV2ZWxzID0gbnVsbDsKKwl9CisJCisJLyoqCisJICogRmx1c2hlcyB0aGUgYnVmZmVyIG9uIGVhY2ggb2YgdGhlIGxvZyB3cml0ZXJzCisJICovCisJcHVibGljIHZvaWQgZmx1c2goKQorCXsKKwkJZm9yIChEZWxpbWV0ZWRXcml0ZXIgZncgOiBsb2dXcml0ZXJzLnZhbHVlcygpKSB7CisJCQl0cnkgeworCQkJCWZ3LmZsdXNoKCk7CisJCQl9IGNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7CisJCQl9CisJCX0KKwl9CisJCisJLyoqCisJICogV3JpdGVzIHRoZSBjdXJyZW50IGxhYmVsIHByb3BlcnR5IHZhbHVlcyBmb3IgZWFjaCBub2RlIGF0IHRoZSBnaXZlbiBzaW11bGF0aW9uIHN0ZXAgdGltZQorCSAqIAorCSAqIEBwYXJhbSBldmVudAorCSAqLworCXB1YmxpYyB2b2lkIGxvZygpIAorCXsKKwkJaW50ZXJhdGlvbkNvdW50Kys7CisKKwkJTGlzdDxTdHJpbmc+IGRlY29yYXRvclBvcHVsYXRpb25zID0gZ2V0UG9wdWxhdGlvbklkZW50aWZpZXJzKCk7CisKKwkJZm9yIChJbnRlZ2VyIHJlc29sdXRpb24gOiBnZXRSZXNvbHV0aW9uTGV2ZWxzKCkpIHsKKwkJCWZvciAoTm9kZSBub2RlIDogZ2V0U29ydGVkTm9kZXNGb3JBZG1pbmxldmVsKHJlc29sdXRpb24sIG5vZGVMZXZlbHMpKSB7CisJCQkJZm9yIChTdHJpbmcgcG9wdWxhdGlvbklkZW50aWZpZXIgOiBkZWNvcmF0b3JQb3B1bGF0aW9ucykgeworCQkJCQlOb2RlTGFiZWwgbGFiZWwgPSBnZXRNYXRjaGluZ0xhYmVsKG5vZGUsIHBvcHVsYXRpb25JZGVudGlmaWVyKTsKKwkJCQkJaWYobGFiZWwgPT0gbnVsbCB8fCAhKGxhYmVsIGluc3RhbmNlb2YgSW50ZWdyYXRpb25MYWJlbCkpIHsKKwkJCQkJCWNvbnRpbnVlOworCQkJCQl9CisKKwkJCQkJSW50ZWdyYXRpb25MYWJlbCBkbUxhYmVsID0gKEludGVncmF0aW9uTGFiZWwpbGFiZWw7CQkJCQkKKwkJCQkJSW50ZWdyYXRpb25MYWJlbFZhbHVlIGxhYmVsVmFsdWUgPSAoSW50ZWdyYXRpb25MYWJlbFZhbHVlKWRtTGFiZWwuZ2V0Q3VycmVudFZhbHVlKCk7CQkJCQkKKworCQkJCQlmb3IgKElJdGVtUHJvcGVydHlEZXNjcmlwdG9yIGl0ZW1EZXNjcmlwdG9yIDogZ2V0UHJvcGVydGllc0ZvckxhYmVsKGRtTGFiZWwpKSB7CisJCQkJCQlTdGF0ZUxldmVsTWFwIGtleSA9IG5ldyBTdGF0ZUxldmVsTWFwKHBvcHVsYXRpb25JZGVudGlmaWVyLCBpdGVtRGVzY3JpcHRvci5nZXREaXNwbGF5TmFtZShpdGVtRGVzY3JpcHRvciksIHJlc29sdXRpb24pOworCQkJCQkJRGVsaW1ldGVkV3JpdGVyIGZ3ID0gbG9nV3JpdGVycy5nZXQoa2V5KTsKKwkJCQkJCWlmKGZ3ID09IG51bGwpIHsKKwkJCQkJCQljb250aW51ZTsKKwkJCQkJCX0KKwkJCQkJCQorCQkJCQkJdHJ5IHsKKwkJCQkJCQkvLyBCZWZvcmUgd3JpdGluZyB0aGUgdmFsdWVzIGZvciB0aGUgZmlyc3QgbG9jYXRpb24sCisJCQkJCQkJLy8gYWRkIGl0ZXJhdGlvbiwgdGltZSBjb2x1bW5zCisJCQkJCQkJaWYoZncuaXNFbXB0eUxpbmUoKSkgeworCQkJCQkJCQlmdy53cml0ZUVudHJ5KGludGVyYXRpb25Db3VudCk7CisJCQkJCQkJCWZ3LndyaXRlRW50cnkoQ29uc3RhbnRzLkxPR19EQVRFX0ZPUk1BVFRFUi5mb3JtYXQoZ2V0U2NlbmFyaW9UaW1lKCkuZ2V0VGltZSgpKSk7CisJCQkJCQkJfQorCQkJCQkJCQorCQkJCQkJCS8vIEdldCB0aGUgZmVhdHVyZSBhbmQgbGFiZWwgdmFsdWUgZm9yIHRoZSBmZWF0dXJlCisJCQkJCQkJRVN0cnVjdHVyYWxGZWF0dXJlIGZlYXR1cmUgPSAoRVN0cnVjdHVyYWxGZWF0dXJlKSBpdGVtRGVzY3JpcHRvci5nZXRGZWF0dXJlKG51bGwpOworCQkJCQkJCWRvdWJsZSB2YWx1ZSA9ICgoRG91YmxlKWxhYmVsVmFsdWUuZUdldChmZWF0dXJlKSkuZG91YmxlVmFsdWUoKTsKKworCQkJCQkJCWlmKGxvZ0ludGVnZXJzKSB7CisJCQkJCQkJCWZ3LndyaXRlRW50cnkoKGludClNYXRoLnJpbnQodmFsdWUpKTsKKwkJCQkJCQl9IGVsc2UgeworCQkJCQkJCQlmdy53cml0ZUVudHJ5KHZhbHVlKTsKKwkJCQkJCQl9CisJCQkJCQl9IGNhdGNoIChJT0V4Y2VwdGlvbiBpb2UpIHsKKwkJCQkJCQkvLyBJZiBhbiBJTyBFeGNlcHRpb24gb2NjdXJzLCB0aGVuIGNsb3NlIHRoZSBsb2cgZmlsZQorCQkJCQkJCUFjdGl2YXRvci5sb2dFcnJvcigiRXJyb3Igd3JpdGluZyB0byBsb2cgZmlsZSIsIGlvZSk7CisJCQkJCQkJRmlsZVV0aWxzLnNhZmVDbG9zZShmdyk7CisJCQkJCQkJbG9nV3JpdGVycy5yZW1vdmUoa2V5KTsKKwkJCQkJCX0KKwkJCQkJfSAvLyBGb3IgZWFjaCBwcm9wZXJ0eSBpbiBsYWJlbAorCQkJCX0gLy8gRm9yIGVhY2ggcG9wdWxhdGlvbiBpZGVudGlmaWVyCisJCQl9IC8vIEZvciBlYWNoIG5vZGUJCQkJCisJCX0gLy8gIEZvciBlYWNoIG5vZGUgcmVzb2x1dGlvbgorCQkKKwkJLy8gQWZ0ZXIgYWxsIGl0ZXJhdGlvbiBkYXRhIGlzIHdyaXR0ZW4sIGFkZCBhIG5ldyBsaW5lIHRvIHRoZSBsb2cgZmlsZXMgd2hlcmUgbmVlZGVkCisJCWFwcGVuZExpbmVUb0xvZ1dyaXRlcnMoKTsKKwl9CisJCisJLyoqCisJICogQWRkcyBhIG5ldyBsaW5lIGNoYXJhY3RlciB0byBlYWNoIGxvZyBmaWxlIHdyaXRlciBpZiB0aGVyZSBpcyBjb250ZW50IG9uIHRoZSBsaW5lCisJICovCisJcHJpdmF0ZSB2b2lkIGFwcGVuZExpbmVUb0xvZ1dyaXRlcnMoKQorCXsKKwkJSXRlcmF0b3I8RW50cnk8U3RhdGVMZXZlbE1hcCwgRGVsaW1ldGVkV3JpdGVyPj4gd3JpdGVycyA9IGxvZ1dyaXRlcnMuZW50cnlTZXQoKS5pdGVyYXRvcigpOworCQkKKwkJLy8gTWFrZSBzdXJlIHdlJ3JlIGF0IGEgbmV3IGxpbmUgZm9yIGVhY2ggbG9nIHdyaXRlciB0aGF0IHdhcyBtb2RpZmllZAorCQl3aGlsZSAod3JpdGVycy5oYXNOZXh0KCkpIHsKKwkJCURlbGltZXRlZFdyaXRlciBmdyA9IHdyaXRlcnMubmV4dCgpLmdldFZhbHVlKCk7CisJCQlpZiAoIWZ3LmlzRW1wdHlMaW5lKCkpIHsKKwkJCQl0cnkgeworCQkJCQlmdy5uZXdMaW5lKCk7CisJCQkJfSBjYXRjaCAoSU9FeGNlcHRpb24gaW9lKSB7CisJCQkJCS8vIElmIGFuIElPIEV4Y2VwdGlvbiBvY2N1cnMsIHRoZW4gY2xvc2UgdGhlIGxvZyBmaWxlCisJCQkJCUFjdGl2YXRvci5sb2dFcnJvcigiRXJyb3Igd3JpdGluZyB0byBsb2cgZmlsZSIsIGlvZSk7CisJCQkJCUZpbGVVdGlscy5zYWZlQ2xvc2UoZncpOworCQkJCQl3cml0ZXJzLnJlbW92ZSgpOworCQkJCX0KKwkJCX0KKwkJfQorCX0KKworCS8qKgorCSAqIEByZXR1cm4gVGhlIGh1bWFuIHJlYWRhYmxlIG5hbWUgb2YgdGhlIGRlY29yYXRvcgorCSAqLworCXByaXZhdGUgU3RyaW5nIGdldERlY29yYXRvck5hbWUoKQorCXsKKwkJaWYgKGRlY29yYXRvck5hbWUgPT0gbnVsbCkgeworCQkJaWYoZGVjb3JhdG9yIGluc3RhbmNlb2YgRGlzZWFzZU1vZGVsKSB7CisJCQkJZGVjb3JhdG9yTmFtZSA9ICgoRGlzZWFzZU1vZGVsKWRlY29yYXRvcikuZ2V0RGlzZWFzZU5hbWUoKS50cmltKCk7CisJCQl9IGVsc2UgaWYgKGRlY29yYXRvciBpbnN0YW5jZW9mIFBvcHVsYXRpb25Nb2RlbCkgeworCQkJCWRlY29yYXRvck5hbWUgPSAoKFBvcHVsYXRpb25Nb2RlbClkZWNvcmF0b3IpLmdldE5hbWUoKS50cmltKCk7CisJCQl9IGVsc2UgeworCQkJCWRlY29yYXRvck5hbWUgPSBkZWNvcmF0b3IuZUNsYXNzKCkudG9TdHJpbmcoKTsKKwkJCX0KKwkJfQorCQlyZXR1cm4gZGVjb3JhdG9yTmFtZTsKKwl9CisKKworCS8qKgorCSAqIEByZXR1cm4gVGhlIGJhc2UgZGlyZWN0b3J5IGZvciBhbGwgbG9nIGZpbGVzIGZvciB0aGlzIHNpbXVsYXRpb24gJiBkZWNvcmF0b3IKKwkgKi8KKwlwcm90ZWN0ZWQgRmlsZSBnZXRMb2dEaXJlY3RvcnkoKQorCXsKKwkJaWYgKGxvZ0RpcmVjdG9yeSA9PSBudWxsKSB7CisJCQlsb2dEaXJlY3RvcnkgPSBuZXcgRmlsZShzaW11bGF0aW9uTG9nZ2VyLmdldExvZ0RpcmVjdG9yeSgpLCBnZXREZWNvcmF0b3JOYW1lKCkpOworCQkJaWYgKCFsb2dEaXJlY3RvcnkuZXhpc3RzKCkgJiYgIWxvZ0RpcmVjdG9yeS5ta2RpcnMoKSkgeworCQkJCUFjdGl2YXRvci5sb2dFcnJvcigiVW5hYmxlIHRvIGNyZWF0ZSBsb2cgZGlyZWN0b3J5IGZvciBkZWNvcmF0b3IgIisgZ2V0RGVjb3JhdG9yTmFtZSgpLCBuZXcgSU9FeGNlcHRpb24oIkVycm9yIGNyZWF0aW5nIGRpcmVjdG9yeSAiKyBsb2dEaXJlY3RvcnkuZ2V0QWJzb2x1dGVQYXRoKCkpKTsKKwkJCX0KKwkJfQorCQkKKwkJcmV0dXJuIGxvZ0RpcmVjdG9yeTsKKwl9CisKKwkvKioKKwkgKiBAcmV0dXJuIFRoZSBwYXRoIHRvIHRoZSBmaWxlIGNvbnRhaW5pbmcgc2ltdWxhdGlvbiBwYXJhbWV0ZXJzCisJICovCisJcHJpdmF0ZSBGaWxlIGdldFJ1blBhcmFtZXRlcnNGaWxlKCkgCisJeworCQlyZXR1cm4gbmV3IEZpbGUoZ2V0TG9nRGlyZWN0b3J5KCksIENvbnN0YW50cy5SVU5fUEFSQU1FVEVSX0ZJTEVfTkFNRSk7CisJfQorCisJLyoqCisJICogQHJldHVybiBUaGUgY29ycmVjdCBzZXF1ZW5jZXIgdGltZSBmb3IgdGhlIHNpbXVsYXRpb24KKwkgKi8KKwlwcml2YXRlIFNURU1UaW1lIGdldFNjZW5hcmlvVGltZSgpCisJeworCQlTVEVNVGltZSB0aW1lID0gZ2V0VGltZVByb3ZpZGVyKCkuZ2V0VGltZSgpOworCQlpZih0aW1lID09IG51bGwpIHsKKwkJCXRpbWUgPSBzaW11bGF0aW9uTG9nZ2VyLmdldFNpbXVsYXRpb24oKS5nZXRTY2VuYXJpbygpLmdldFNlcXVlbmNlcigpLmdldFN0YXJ0VGltZSgpOworCQl9CisJCWlmKCFiZWZvcmVTdGFydCkgeworCQkJdGltZSA9IHRpbWUuYWRkSW5jcmVtZW50KHNpbXVsYXRpb25Mb2dnZXIuZ2V0U2ltdWxhdGlvbigpLmdldFNjZW5hcmlvKCkuZ2V0U2VxdWVuY2VyKCkuZ2V0VGltZURlbHRhKCkpOworCQl9CisJCXJldHVybiB0aW1lOworCX0KKworCisJLyoqCisJICogQ3JlYXRlIGFuZCB3cml0ZSB0aGUgcGFyYW1ldGVycyBmb3IgdGhpcyBzaW11bGF0aW9uCisJICovCisJcHJpdmF0ZSB2b2lkIHdyaXRlUnVuUGFyYW1ldGVycygpIAorCXsKKwkJaWYgKGRlY29yYXRvciA9PSBudWxsKSB7CisJCQlyZXR1cm47CisJCX0KKworCQlEZWxpbWV0ZWRXcml0ZXIgZndwID0gbnVsbDsKKwkJdHJ5IHsKKwkJCWZ3cCA9IG5ldyBEZWxpbWV0ZWRXcml0ZXIobG9nZ2VyLmdldERlbGltZXRlcigpLCBsb2dnZXIuZ2V0QnVmZmVyU2l6ZSgpLCBuZXcgRmlsZVdyaXRlcihnZXRSdW5QYXJhbWV0ZXJzRmlsZSgpKSk7CisKKwkJCWZpbmFsIENvbXBvc2VkQWRhcHRlckZhY3RvcnkgaXRlbVByb3ZpZGVyRmFjdG9yeSA9IG5ldyBDb21wb3NlZEFkYXB0ZXJGYWN0b3J5KAorCQkJCQlDb21wb3NlZEFkYXB0ZXJGYWN0b3J5LkRlc2NyaXB0b3IuUmVnaXN0cnkuSU5TVEFOQ0UpOworCQkJZmluYWwgSUl0ZW1Qcm9wZXJ0eVNvdXJjZSBwcm9wZXJ0eVNvdXJjZSA9IChJSXRlbVByb3BlcnR5U291cmNlKSBpdGVtUHJvdmlkZXJGYWN0b3J5CisJCQkJCS5hZGFwdChkZWNvcmF0b3IsIElJdGVtUHJvcGVydHlTb3VyY2UuY2xhc3MpOworCQkJZmluYWwgTGlzdDxJSXRlbVByb3BlcnR5RGVzY3JpcHRvcj4gcHJvcGVydGllcyA9IHByb3BlcnR5U291cmNlCisJCQkJCS5nZXRQcm9wZXJ0eURlc2NyaXB0b3JzKGRlY29yYXRvcik7CisKKwkJCUxpc3Q8U3RyaW5nPiBoZWFkZXIgPSBuZXcgQXJyYXlMaXN0PFN0cmluZz4oKTsKKwkJCUxpc3Q8U3RyaW5nPiB2YWx1ZXMgPSBuZXcgQXJyYXlMaXN0PFN0cmluZz4oKTsKKworCQkJZm9yIChJSXRlbVByb3BlcnR5RGVzY3JpcHRvciBkZXNjcmlwdG9yIDogcHJvcGVydGllcykgeworCQkJCWZpbmFsIEVTdHJ1Y3R1cmFsRmVhdHVyZSBmZWF0dXJlID0gKEVTdHJ1Y3R1cmFsRmVhdHVyZSkgZGVzY3JpcHRvci5nZXRGZWF0dXJlKG51bGwpOworCQkJCQorCQkJCS8vIE9taXQgRHVibGluIENvcmUgdmFsdWVzIGZyb20gdGhlIGxvZyBmaWxlCisJCQkJaWYgKENvbW1vblBhY2thZ2UuZUlOU1RBTkNFLmdldER1YmxpbkNvcmUoKS5lcXVhbHMoZmVhdHVyZS5nZXRFQ29udGFpbmluZ0NsYXNzKCkpKSB7CisJCQkJCWNvbnRpbnVlOworCQkJCX0KKwkJCQkKKwkJCQloZWFkZXIuYWRkKGZlYXR1cmUuZ2V0TmFtZSgpKTsKKwkJCQl2YWx1ZXMuYWRkKCgoRU9iamVjdCkgZGVjb3JhdG9yKS5lR2V0KGZlYXR1cmUpLnRvU3RyaW5nKCkpOworCQkJfQorCisJCQlmd3Aud3JpdGVMaW5lKGhlYWRlcik7CisJCQlmd3Aud3JpdGVMaW5lKHZhbHVlcyk7CisKKwkJfSBjYXRjaCAoZmluYWwgSU9FeGNlcHRpb24gZSkgeworCQkJQWN0aXZhdG9yLmxvZ0Vycm9yKCJFcnJvciB3aWxsIHdyaXRpbmcgdG8gdGhlIHJ1biBwYXJhbWV0ZXJzIGxvZyBmaWxlIiwgZSk7CisJCX0gZmluYWxseSB7CisJCQlGaWxlVXRpbHMuc2FmZUNsb3NlKGZ3cCk7CisJCX0KKwl9CisKKwkKKwkvKioKKwkgKiBHZXQgdGhlIHBhdGggdG8gdGhlIGxvZyBmaWxlIHRvIHdyaXRlIGZvciB0aGUgc2ltdWxhdGlvbi9wb3B1bGF0aW9uL2RlY29yYXRvciBwcm9wZXJ0eS9hZG1pbiBsZXZlbAorCSAqIAorCSAqIEBwYXJhbSBwb3B1bGF0aW9uSWRlbnRpZmllcgorCSAqIEBwYXJhbSBkZWNvcmF0b3J5UHJvcGVydHlOYW1lCisJICogQHBhcmFtIGFkbWluTGV2ZWwKKwkgKiBAcmV0dXJuCisJICovCisJcHJpdmF0ZSBGaWxlIGdldExvZ0ZpbGVGb3JQcm9wZXJ0eShTdHJpbmcgcG9wdWxhdGlvbklkZW50aWZpZXIsIFN0cmluZyBkZWNvcmF0b3J5UHJvcGVydHlOYW1lLCBpbnQgYWRtaW5MZXZlbCkKKwl7CisJCUZpbGUgcG9wdWxhdGlvbkRpcmVjdG9yeSA9IG5ldyBGaWxlKGdldExvZ0RpcmVjdG9yeSgpLCBwb3B1bGF0aW9uSWRlbnRpZmllcik7CisJCWlmICghcG9wdWxhdGlvbkRpcmVjdG9yeS5leGlzdHMoKSAmJiAhcG9wdWxhdGlvbkRpcmVjdG9yeS5ta2RpcnMoKSkgeworCQkJQWN0aXZhdG9yLmxvZ1dhcm5pbmcoIkZhaWxlZCB0byBjcmVhdGUgbG9nIGRpcmVjdG9yeSAiKyBwb3B1bGF0aW9uRGlyZWN0b3J5LnRvU3RyaW5nKCksIG51bGwpOworCQl9CisJCQorCQlTdHJpbmdCdWlsZGVyIGZpbGVOYW1lID0gbmV3IFN0cmluZ0J1aWxkZXIoKTsKKwkJZmlsZU5hbWUuYXBwZW5kKGRlY29yYXRvcnlQcm9wZXJ0eU5hbWUpOworCQlmaWxlTmFtZS5hcHBlbmQoIl8iKTsKKwkJZmlsZU5hbWUuYXBwZW5kKGFkbWluTGV2ZWwpOworCQlmaWxlTmFtZS5hcHBlbmQoIi4iKTsKKwkJZmlsZU5hbWUuYXBwZW5kKENvbnN0YW50cy5MT0dfRklMRV9TVUZGSVgpOworCQkKKwkJcmV0dXJuIG5ldyBGaWxlKHBvcHVsYXRpb25EaXJlY3RvcnksIGZpbGVOYW1lLnRvU3RyaW5nKCkpOworCX0KKwkKKworCQorCS8qKgorCSAqIENyZWF0ZXMgYSBsb2cgZmlsZSB3cml0ZXIgZm9yIGEgUHJvcGVydHkgYW5kIFBvcHVsYXRpb24gZm9yIGEgZ2l2ZW4gYWRtaW4gbGV2ZWwuICBDcmVhdGVzIHRoZQorCSAqIGxvZyBmaWxlIGFuZCAKKwkgKiBAcGFyYW0gcG9wdWxhdGlvbklkZW50aWZpZXIKKwkgKiBAcGFyYW0gcHJvcGVydHlEaXNwbGF5TmFtZQorCSAqIEBwYXJhbSBhZG1pbkxldmVsCisJICogQHJldHVybgorCSAqLworCXByaXZhdGUgRGVsaW1ldGVkV3JpdGVyIGNyZWF0ZUxvZ2dlcihTdHJpbmcgcG9wdWxhdGlvbklkZW50aWZpZXIsIFN0cmluZyBwcm9wZXJ0eURpc3BsYXlOYW1lLCBpbnQgYWRtaW5MZXZlbCkKKwl7CisJCUZpbGUgcHJvcGVydHlMb2dGaWxlID0gZ2V0TG9nRmlsZUZvclByb3BlcnR5KHBvcHVsYXRpb25JZGVudGlmaWVyLCBwcm9wZXJ0eURpc3BsYXlOYW1lLCBhZG1pbkxldmVsKTsKKwkJCisJCURlbGltZXRlZFdyaXRlciBmdyA9IG51bGw7CisJCWJvb2xlYW4gZmlsZUhhc0RhdGEgPSBmYWxzZTsKKwkJdHJ5IHsKKwkJCWZ3ID0gbmV3IERlbGltZXRlZFdyaXRlcihsb2dnZXIuZ2V0RGVsaW1ldGVyKCksIGxvZ2dlci5nZXRCdWZmZXJTaXplKCksICBuZXcgRmlsZVdyaXRlcihwcm9wZXJ0eUxvZ0ZpbGUpKTsKKworCQkJZncud3JpdGVFbnRyeShDb25zdGFudHMuSVRFUkFUSU9OX0xBQkVMKTsKKwkJCWZ3LndyaXRlRW50cnkoQ29uc3RhbnRzLlRJTUVfTEFCRUwpOworCQkJCisJCQlmb3IgKE5vZGUgbm9kZSA6IGdldFNvcnRlZE5vZGVzRm9yQWRtaW5sZXZlbChhZG1pbkxldmVsLCBub2RlTGV2ZWxzKSkgeworCQkJCU5vZGVMYWJlbCBsYWJlbFRvV3JpdGUgPSBnZXRNYXRjaGluZ0xhYmVsKG5vZGUsIHBvcHVsYXRpb25JZGVudGlmaWVyKTsKKwkJCQlpZihsYWJlbFRvV3JpdGUgIT0gbnVsbCkgeworCQkJCQlmaWxlSGFzRGF0YSA9IHRydWU7CisJCQkJCWZ3LndyaXRlRW50cnkoZmlsdGVyTG9jYXRpb25JZChub2RlLmdldFVSSSgpLnRvU3RyaW5nKCkpKTsKKwkJCQl9CisJCQl9CisKKwkJCWZ3Lm5ld0xpbmUoKTsKKwkJfSBjYXRjaCAoSU9FeGNlcHRpb24gaW9lKSB7CisJCQlBY3RpdmF0b3IubG9nRXJyb3IoIkV4Y2VwdGlvbiB3aGlsZSBzZXR0aW5nIHVwIHRoZSBsb2cgZmlsZSAiKyBwcm9wZXJ0eUxvZ0ZpbGUudG9TdHJpbmcoKSwgaW9lKTsKKwkJCWZpbGVIYXNEYXRhID0gZmFsc2U7CisJCX0gZmluYWxseSB7CisJCQlpZiAoIWZpbGVIYXNEYXRhKSB7CisJCQkJRmlsZVV0aWxzLnNhZmVDbG9zZShmdyk7CisJCQkJZncgPSBudWxsOworCQkJCXRyeSB7CisJCQkJCXByb3BlcnR5TG9nRmlsZS5kZWxldGUoKTsKKwkJCQl9IGNhdGNoIChUaHJvd2FibGUgdCkgeworCQkJCQkvLyBkbyBub3RoaW5nCisJCQkJfQorCQkJfQorCQl9CisJCXJldHVybiBmdzsKKwl9CisJCisJLyoqCisJICogU2V0dXAgYW5kIGNyZWF0ZSBsb2cgZmlsZSB3cml0ZXJzIGZvciBlYWNoIGluZGl2aWR1YWwgcHJvcGVydHkgaW4gCisJICogdGhlIGRlY29yYXRvciB0aGF0IGNvbnRhaW5zIGRhdGEgdG8gd3JpdGUuCisJICovCisJcHJpdmF0ZSB2b2lkIHNldHVwUHJvcGVydHlMb2dnZXJzKCkKKwl7CisJCW5vZGVMZXZlbHMgPSBTaW11bGF0aW9uVXRpbHMuZ2V0Tm9kZUxldmVsc0ZvclNjZW5hcmlvKHNpbXVsYXRpb25Mb2dnZXIuZ2V0U2ltdWxhdGlvbigpLmdldFNjZW5hcmlvKCkpOworCisJCS8vIEdldCB0aGUgZmlyc3QgbGFiZWwgd2UnbGwgd3JpdGUgZm9yIHRoZSBkZWNvcmF0b3IKKwkJSW50ZWdyYXRpb25MYWJlbCBsYWJlbCA9IGdldEZpcnN0TGFiZWxGb3JEZWNvcmF0b3IoKTsKKwkJaWYgKGxhYmVsID09IG51bGwpIHsKKwkJCUFjdGl2YXRvci5sb2dFcnJvcigiTm8gbGFiZWxzIGZvdW5kIGZvciBkZWNvcmF0b3IgIisgZ2V0RGVjb3JhdG9yTmFtZSgpLCBuZXcgRXhjZXB0aW9uKCkpOworCQkJcmV0dXJuOworCQl9CisJCQorCQkvLyBHZXQgdGhlIHByb3BlcnRpZXMgZm9yIHRoYXQgbGFiZWwKKwkJTGlzdDxJSXRlbVByb3BlcnR5RGVzY3JpcHRvcj5wcm9wZXJ0aWVzID0gZ2V0UHJvcGVydGllc0ZvckxhYmVsKGxhYmVsKTsKKwkJaWYgKHByb3BlcnRpZXMgPT0gbnVsbCkgeworCQkJQWN0aXZhdG9yLmxvZ0Vycm9yKCJDYW5ub3QgcmV0cmlldmUgcHJvcGVydGllcyBmb3IgIitsYWJlbCwgbnVsbCk7CisJCQlyZXR1cm47CisJCX0KKwkJCQorCQkvLyBHZXQgdGhlIHBvcHVsYXRpb24gaWRlbnRpZmllcnMgZm9yIHRoZSBsYWJlbAorCQlMaXN0PFN0cmluZz4gcG9wdWxhdGlvbklkZW50aWZpZXJzID0gZ2V0UG9wdWxhdGlvbklkZW50aWZpZXJzKCk7CisJCWlmIChwb3B1bGF0aW9uSWRlbnRpZmllcnMgPT0gbnVsbCkgeworCQkJQWN0aXZhdG9yLmxvZ0Vycm9yKCJObyBwb3B1bGF0aW9ucyBmb3VuZCBmb3IgZGVjb3JhdG9yICIrIGdldERlY29yYXRvck5hbWUoKSwgbnVsbCk7CisJCQlyZXR1cm47CisJCX0KKwkJCisJCS8vIFRoZSBsb2cgZmlsZSBpcyBzZXR1cCBhczoKKwkJLy8gUG9wdWxhdGlvbiAvIExldmVsIC8gRGVjb3JhdG9yCisJCS8vIEl0ZXJhdGUgdGhyb3VnaCB0aGUgaW5kaXZpZHVhbCBsaXN0cyB0byBzZXR1cCB0aGUgaW5kaXZpZHVhbCBsb2cgZmlsZXMKKwkJCisJCWZvciAoSUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IgZGVjb3JhdG9yUHJvcGVydHkgOiBwcm9wZXJ0aWVzKSB7CisJCQlmb3IgKEludGVnZXIgbGV2ZWwgOiBnZXRSZXNvbHV0aW9uTGV2ZWxzKCkpIHsKKwkJCQlmb3IgKFN0cmluZyBwb3B1bGF0aW9uSWRlbnRpZmllciA6IHBvcHVsYXRpb25JZGVudGlmaWVycykgeworCQkJCQlTdHJpbmcgcHJvcGVydHlOYW1lID0gZGVjb3JhdG9yUHJvcGVydHkuZ2V0RGlzcGxheU5hbWUoZGVjb3JhdG9yUHJvcGVydHkpOworCQkJCQlEZWxpbWV0ZWRXcml0ZXIgZncgPSBjcmVhdGVMb2dnZXIocG9wdWxhdGlvbklkZW50aWZpZXIsIHByb3BlcnR5TmFtZSwgbGV2ZWwpOworCQkJCQlpZiAoZncgIT0gbnVsbCkgeworCQkJCQkJbG9nV3JpdGVycy5wdXQobmV3IFN0YXRlTGV2ZWxNYXAocG9wdWxhdGlvbklkZW50aWZpZXIsIHByb3BlcnR5TmFtZSwgbGV2ZWwpLCBmdyk7CisJCQkJCX0KKwkJCQl9CisJCQl9CisJCX0KKwl9CisJCisJLyoqCisJICogQHJldHVybiBUaGUgZmlyc3QgbG9nLWFibGUgbGFiZWwgZm9yIHRoZSBkZWNvcmF0b3IKKwkgKi8KKwlwcml2YXRlIEludGVncmF0aW9uTGFiZWwgZ2V0Rmlyc3RMYWJlbEZvckRlY29yYXRvcigpCisJeworCQlmb3IgKER5bmFtaWNMYWJlbCBsYWJlbCA6ICgoRGVjb3JhdG9yKWRlY29yYXRvcikuZ2V0TGFiZWxzVG9VcGRhdGUoKSkgeworCQkJaWYobGFiZWwgaW5zdGFuY2VvZiBJbnRlZ3JhdGlvbkxhYmVsKSB7CisJCQkJcmV0dXJuIChJbnRlZ3JhdGlvbkxhYmVsKWxhYmVsOworCQkJfQorCQl9CisJCXJldHVybiBudWxsOworCX0KKwkKKworCS8qKgorCSAqIEdldHMgdGhlIHJlbGF0aXZlIHZhbHVlIHByb3BlcnRpZXMgZm9yIHRoZSBnaXZlbiBsYWJlbAorCSAqIEBwYXJhbSBsYWJlbAorCSAqIEByZXR1cm4KKwkgKi8KKwlwcml2YXRlIExpc3Q8SUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I+IGdldFByb3BlcnRpZXNGb3JMYWJlbChEeW5hbWljTGFiZWwgbGFiZWwpCisJeworCQlmaW5hbCBSZWxhdGl2ZVZhbHVlUHJvdmlkZXJBZGFwdGVyIHJ2cCA9IChSZWxhdGl2ZVZhbHVlUHJvdmlkZXJBZGFwdGVyKSBSZWxhdGl2ZVZhbHVlUHJvdmlkZXJBZGFwdGVyRmFjdG9yeS5JTlNUQU5DRS5hZGFwdChsYWJlbCwgUmVsYXRpdmVWYWx1ZVByb3ZpZGVyLmNsYXNzKTsKKwkJcmV0dXJuIHJ2cC5nZXRQcm9wZXJ0aWVzKCk7CisJfQorCQorCQorCS8qKgorCSAqIEByZXR1cm4gVGhlIHBvcHVsYXRpb24gaWRlbnRpZmllcnMgZm9yIHRoZSBkZWNvcmF0b3IKKwkgKi8KKwlwcml2YXRlIExpc3Q8U3RyaW5nPiBnZXRQb3B1bGF0aW9uSWRlbnRpZmllcnMoKSB7CisJCWlmIChkZWNvcmF0b3IgaW5zdGFuY2VvZiBEaXNlYXNlTW9kZWwpIHsKKwkJCXJldHVybiAoKERpc2Vhc2VNb2RlbCkgZGVjb3JhdG9yKS5nZXRBbGxMYWJlbElkZW50aWZpZXJzKCk7CisJCX0gZWxzZSBpZiAoZGVjb3JhdG9yIGluc3RhbmNlb2YgUG9wdWxhdGlvbk1vZGVsKSB7CisJCQlyZXR1cm4gKChQb3B1bGF0aW9uTW9kZWwpIGRlY29yYXRvcikuZ2V0QWxsTGFiZWxJZGVudGlmaWVycygpOworCQl9CisJCQorCQlyZXR1cm4gbmV3IEFycmF5TGlzdDxTdHJpbmc+KCk7CisJfQorCQorCS8qKgorCSAqIEByZXR1cm4gVGhlIGxpc3Qgb2YgYWRtaW4gbGV2ZWxzIGluIHRoZSBsaXN0IG9mIG5vZGVzCisJICovCisJcHJpdmF0ZSBMaXN0PEludGVnZXI+IGdldFJlc29sdXRpb25MZXZlbHMoKSB7CisJCWlmKHJlc29sdXRpb25MZXZlbHMgPT0gbnVsbCkgeworCQkJcmVzb2x1dGlvbkxldmVscyA9IG5ldyBBcnJheUxpc3Q8SW50ZWdlcj4oKTsKKwkJCWZvcihJbnRlZ2VyIGxldmVsIDogbm9kZUxldmVscy52YWx1ZXMoKSkgeworCQkJCWlmKCFyZXNvbHV0aW9uTGV2ZWxzLmNvbnRhaW5zKGxldmVsKSkgeworCQkJCQlyZXNvbHV0aW9uTGV2ZWxzLmFkZChsZXZlbCk7CisJCQkJfQorCQkJfQorCQl9CisJCQorCQlyZXR1cm4gcmVzb2x1dGlvbkxldmVsczsKKwl9CisJCisKKwkvKioKKwkgKiBAcGFyYW0gbm9kZSBUaGUgbm9kZSB0byB0ZXN0CisJICogQHJldHVybiBXaGV0aGVyIHRoZSBub2RlIGlzIHRvIGJlIGV4Y2x1ZGVkIGZyb20gbG9nZ2luZworCSAqLworCXByaXZhdGUgYm9vbGVhbiBpc0V4Y2x1ZGVkTm9kZShOb2RlIG5vZGUpCisJeworCQlmb3IgKFN0cmluZyBrZXkgOiBFWENMVURFRF9OT0RFUykgeworCQkJaWYgKG5vZGUuZ2V0VVJJKCkudG9TdHJpbmcoKS5jb250YWlucyhrZXkpKSB7CisJCQkJcmV0dXJuIHRydWU7CisJCQl9CisJCX0KKwkJcmV0dXJuIGZhbHNlOworCX0KKwkKKwkvKioKKwkgKiBHZXRzIGFuZCBzb3J0cyBhbGwgbm9kZXMgYXNzaWduZWQgdG8gYSBzcGVjaWZpYyBhZG1pbmlzdHJhdGl2ZSBsZXZlbC4KKwkgKiAKKwkgKiBAcGFyYW0gbGV2ZWwgVGhlIGFkbWluIGxldmVsIHRvIGdldCBub2RlcyBmb3IKKwkgKiBAcGFyYW0gbm9kZUxldmVscyBUaGUgbm9kZSBsZXZlbCBsaXN0IHRvIHNjYW4KKwkgKiBAcmV0dXJuCisJICovCisJcHJpdmF0ZSBMaXN0PE5vZGU+IGdldFNvcnRlZE5vZGVzRm9yQWRtaW5sZXZlbChpbnQgbGV2ZWwsIE1hcDxOb2RlLCBJbnRlZ2VyPm5vZGVMZXZlbHMpCisJeworCQlMaXN0PE5vZGU+IGxpc3QgPSBzb3J0ZWROb2RlTGlzdC5nZXQobGV2ZWwpOworCQlpZiAobGlzdCA9PSBudWxsKSB7CisJCQlsaXN0ID0gbmV3IEFycmF5TGlzdDxOb2RlPigpOworCQkJLy8gSXRlcmF0ZSB0aHJvdWdoIHRoZSBsaXN0IG9mIG5vZGVzCisJCQlmb3IgKEVudHJ5PE5vZGUsSW50ZWdlcj4gZW50cnkgOiBub2RlTGV2ZWxzLmVudHJ5U2V0KCkpIHsKKwkJCQkvLyBJZiBub2RlIGxldmVsIGlzIGVxdWFsIHRvIHRoZSBjdXJyZW50IGxldmVsCisJCQkJaWYgKGVudHJ5LmdldFZhbHVlKCkgPT0gbGV2ZWwpIHsKKwkJCQkJTm9kZSBub2RlID0gZW50cnkuZ2V0S2V5KCk7CisJCQkJCQorCQkJCQkvLyBMb29rIHRocm91Z2ggdGhlIGxhYmVscyB0byBkZXRlcm1pbiBpZiB3ZSdyZSBnb2luZyB0byB3cml0ZSB0aGlzIG5vZGUKKwkJCQkJZm9yIChOb2RlTGFiZWwgcyA6IG5vZGUuZ2V0TGFiZWxzKCkpIHsKKwkJCQkJCWlmIChzIGluc3RhbmNlb2YgSW50ZWdyYXRpb25MYWJlbCkgeworCQkJCQkJCS8vIElmIHRoZSBub2RlIGNvbnRhaW5zIGFuIGludGVncmF0aW9uIGxhYmVsIGFuZCBpcyAKKwkJCQkJCQkvLyBub3QgaW4gdGhlIGV4Y2x1c2lvbiBsaXN0LCB0aGVuIGFkZCB0byB0aGUgbGlzdCBmb3Igd3JpdGluZworCQkJCQkJCWlmICghaXNFeGNsdWRlZE5vZGUobm9kZSkpIHsKKwkJCQkJCQkJbGlzdC5hZGQoZW50cnkuZ2V0S2V5KCkpOworCQkJCQkJCX0KKwkJCQkJCQlicmVhazsKKwkJCQkJCX0KKwkJCQkJfQorCQkJCX0KKwkJCX0KKwkJCS8vIFNvcnQgdGhlIGxpc3QgYnkgYXBwbHlpbmcgdGhlIGNvbXBhcmF0b3IKKwkJCUNvbGxlY3Rpb25zLnNvcnQobGlzdCwgTk9ERV9TT1JURVIpOworCQkJCisJCQlzb3J0ZWROb2RlTGlzdC5wdXQobGV2ZWwsIGxpc3QpOworCQl9CisJCXJldHVybiBsaXN0OworCX0KKwkKKwkKKwkKKwkvKioKKwkgKiBHZXRzIHRoZSBjb3JyZWN0IGxhYmVsIGZvciB0aGUgZ2l2ZW4gbm9kZSwgZGVjb3JhdG9yLCBhbmQgcG9wdWxhdGlvbiBpZGVudGlmaWVyCisJICogCisJICogQHBhcmFtIG4gTm9kZSB0byBnZXQgbGFiZWwgZnJvbQorCSAqIEBwYXJhbSBwb3BJZCBQb3B1bGF0aW9uIGlkZW50aWZpZXIgdG8gdGVzdAorCSAqIEByZXR1cm4gVGhlIG1hdGNoaW5nIG5vZGUgbGFiZWwKKwkgKi8KKwlwcml2YXRlIE5vZGVMYWJlbCBnZXRNYXRjaGluZ0xhYmVsKE5vZGUgbiwgU3RyaW5nIHBvcElkKSB7CisJCWZvcihOb2RlTGFiZWwgbGFiZWw6bi5nZXRMYWJlbHMoKSkgeworCQkJaWYgKGRlY29yYXRvciBpbnN0YW5jZW9mIERpc2Vhc2VNb2RlbCAKKwkJCQkJJiYgbGFiZWwgaW5zdGFuY2VvZiBEaXNlYXNlTW9kZWxMYWJlbCAKKwkJCQkJCSYmICgoRGlzZWFzZU1vZGVsTGFiZWwpbGFiZWwpLmdldERlY29yYXRvcigpLmVxdWFscyhkZWNvcmF0b3IpIAorCQkJCQkJCSYmICgoRGlzZWFzZU1vZGVsTGFiZWwpbGFiZWwpLmdldFBvcHVsYXRpb25Nb2RlbExhYmVsKCkuZ2V0UG9wdWxhdGlvbklkZW50aWZpZXIoKS5lcXVhbHMocG9wSWQpKSB7CisJCQkJcmV0dXJuIGxhYmVsOwkJCisJCQl9IGVsc2UgaWYgKGRlY29yYXRvciBpbnN0YW5jZW9mIFBvcHVsYXRpb25Nb2RlbCAKKwkJCQkJCSYmIGxhYmVsIGluc3RhbmNlb2YgUG9wdWxhdGlvbk1vZGVsTGFiZWwKKwkJCQkJCQkmJiAoKFBvcHVsYXRpb25Nb2RlbExhYmVsKWxhYmVsKS5nZXREZWNvcmF0b3IoKS5lcXVhbHMoZGVjb3JhdG9yKSAKKwkJCQkJCQkJJiYgKChQb3B1bGF0aW9uTW9kZWxMYWJlbClsYWJlbCkuZ2V0UG9wdWxhdGlvbklkZW50aWZpZXIoKS5lcXVhbHMocG9wSWQpKSB7CisJCQkJcmV0dXJuIGxhYmVsOworCQkJfQorCQkKKwkJfQorCQlyZXR1cm4gbnVsbDsKKwl9CisJCisJLyoqCisJICogZmlsdGVycyB0aGUgbG9jYXRpb24gaWQgcHJlZml4IGZyb20gdGhlIGJlZ2lubmluZyBvZgorCSAqICBhIG5vZGVzIElEIGZvciBnZW5lcmF0aW9uIG9mIGEgZmlsZSBuYW1lCisJICogQHBhcmFtIHVuZmlsdGVyZWQKKwkgKiBAcmV0dXJuIHRoZSBmaWx0ZXJlZCBmaWxlIG5hbWUgdXNpbmcgbG9jYXRpb24gaWQuCisJICovCisJcHJpdmF0ZSBTdHJpbmcgZmlsdGVyTG9jYXRpb25JZChTdHJpbmcgdW5maWx0ZXJlZCkgeworCQlpbnQgbGFzdCA9IHVuZmlsdGVyZWQuaW5kZXhPZihDb25zdGFudHMuTE9DQVRJT05fSURfUFJFRklYKTsKKwkJaWYgKGxhc3QgPj0gMCkgeworCQkJbGFzdCArPSBDb25zdGFudHMuTE9DQVRJT05fSURfUFJFRklYLmxlbmd0aCgpOworCQkJcmV0dXJuIHVuZmlsdGVyZWQuc3Vic3RyaW5nKGxhc3QsIHVuZmlsdGVyZWQubGVuZ3RoKCkpOworCQl9IAorCQlyZXR1cm4gdW5maWx0ZXJlZDsKKwl9CisJCisJCisJLyoqCisJICogQHJldHVybiBUaGUgdGltZSBwcm92aWRlciBmb3IgdGhlIGNhbm9uaWNhbCBncmFwaAorCSAqLworCXByaXZhdGUgVGltZVByb3ZpZGVyIGdldFRpbWVQcm92aWRlcigpCisJeworCQlpZiAodGltZVByb3ZpZGVyID09IG51bGwpIHsKKwkJCXRpbWVQcm92aWRlciA9IChUaW1lUHJvdmlkZXIpIFRpbWVQcm92aWRlckFkYXB0ZXJGYWN0b3J5LklOU1RBTkNFCisJCQkJCS5hZGFwdChzaW11bGF0aW9uTG9nZ2VyLmdldFNpbXVsYXRpb24oKS5nZXRTY2VuYXJpbygpLmdldENhbm9uaWNhbEdyYXBoKCksIFRpbWVQcm92aWRlci5jbGFzcyk7CisJCX0KKwkJCisJCXJldHVybiB0aW1lUHJvdmlkZXI7CisJfQorCQorCQorCS8qKgorCSAqIFVzZWQgYXMga2V5IGluIG1hcCB3aXRoIEZpbGVXcml0ZXJzLiBGaWxlV3JpdGVycyBhcmUga2V5J2QgYnkKKwkgKiB0aGUgbGFiZWwgKGkuZS4gZGlzZWFzZSBzdGF0ZSkgYW5kIGJ5IAorCSAqLworCXByaXZhdGUgc3RhdGljIGNsYXNzIFN0YXRlTGV2ZWxNYXAgeworCQlwcml2YXRlIGZpbmFsIFN0cmluZyBwb3BJZDsKKwkJcHJpdmF0ZSBmaW5hbCBTdHJpbmcgc3RhdGU7CisJCXByaXZhdGUgZmluYWwgaW50IGxldmVsOworCQkKKwkJcHVibGljIFN0YXRlTGV2ZWxNYXAoU3RyaW5nIHBvcElkLFN0cmluZyBzdGF0ZSwgaW50IGxldmVsKSB7CisJCQl0aGlzLnBvcElkID0gcG9wSWQ7CisJCQl0aGlzLnN0YXRlID0gc3RhdGU7CisJCQl0aGlzLmxldmVsID0gbGV2ZWw7CisJCX0KKwkJCisJCXB1YmxpYyBTdHJpbmcgZ2V0UG9wdWxhdGlvbklkKCkge3JldHVybiB0aGlzLnBvcElkO30KKwkJcHVibGljIGludCBnZXRMZXZlbCgpIHtyZXR1cm4gdGhpcy5sZXZlbDt9CisJCXB1YmxpYyBTdHJpbmcgZ2V0U3RhdGUoKSB7cmV0dXJuIHRoaXMuc3RhdGU7fQorCQkKKwkJQE92ZXJyaWRlCisJCXB1YmxpYyBpbnQgaGFzaENvZGUoKSB7CisJCQlyZXR1cm4gc3RhdGUuaGFzaENvZGUoKStwb3BJZC5oYXNoQ29kZSgpICsgbGV2ZWw7IC8vIHVnaAorCQl9CisJCQorCQlAT3ZlcnJpZGUKKwkJcHVibGljIGJvb2xlYW4gZXF1YWxzKE9iamVjdCBvKSB7CisJCQlpZighKG8gaW5zdGFuY2VvZiBTdGF0ZUxldmVsTWFwKSkgcmV0dXJuIGZhbHNlOworCQkJU3RhdGVMZXZlbE1hcCBzbG0gPSAoU3RhdGVMZXZlbE1hcClvOworCQkJcmV0dXJuIChzbG0uZ2V0U3RhdGUoKS5lcXVhbHModGhpcy5zdGF0ZSkgJiYgc2xtLmdldFBvcHVsYXRpb25JZCgpLmVxdWFscyh0aGlzLnBvcElkKSAmJiBzbG0uZ2V0TGV2ZWwoKSA9PSBsZXZlbCk7CisJCX0KKwkJCisJCUBPdmVycmlkZQorCQlwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkgeworCQkJcmV0dXJuIHRoaXMucG9wSWQrIiAtICIrdGhpcy5zdGF0ZSsiXyIrdGhpcy5sZXZlbDsKKwkJfQorCX0KK30KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzLmNzdi9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9sb2dnZXJzL2Nzdi9sb2dnZXIvRGVsaW1ldGVkRmlsZVNpbXVsYXRpb25Mb2dnZXIuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzLmNzdi9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9sb2dnZXJzL2Nzdi9sb2dnZXIvRGVsaW1ldGVkRmlsZVNpbXVsYXRpb25Mb2dnZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45OWNjZDQwCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMuY3N2L3NyYy9vcmcvZWNsaXBzZS9zdGVtL2xvZ2dlcnMvY3N2L2xvZ2dlci9EZWxpbWV0ZWRGaWxlU2ltdWxhdGlvbkxvZ2dlci5qYXZhCkBAIC0wLDAgKzEsMTg4IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDExIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzLmNzdi5sb2dnZXI7CisKK2ltcG9ydCBqYXZhLmlvLkZpbGU7CitpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlzOworaW1wb3J0IGphdmEudXRpbC5MaXN0OworCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLkRlY29yYXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuSW50ZWdyYXRpb25EZWNvcmF0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5qb2JzLnNpbXVsYXRpb24uSVNpbXVsYXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5qb2JzLnNpbXVsYXRpb24uU2ltdWxhdGlvbkV2ZW50OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uam9icy5zaW11bGF0aW9uLlNpbXVsYXRpb25TdGF0ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMuY3N2LkNTVkxvZ2dlcjsKKworLyoqCisgKiBTaW11bGF0aW9uIGxvZ2dlciBmb3IgY3JlYXRpbmcgZW50cnktZGVsaW1ldGVkIHRleHQgZmlsZXMKKyAqIGZvciB0aGUgb3V0cHV0IG9mIHRoZSBzaW11bGF0aW9uLiAgVEhlIGNsYXNzIGFjY2VwdHMgYW4gCisgKiB1bmRlcmx5aW5nIGxvZ2dlciAoQ1NWTG9nZ2VyKSB0aGF0IHNwZWNpZmllcyB0aGUgcGFyYW1ldGVycworICogc3VjaCBhcyB0aGUgdHlwZSBvZiBkZWxpbWV0ZXIgKGNvbW1hLXNlcGFyYXRlZCB2YWx1ZXMsIGZvciBleGFtcGxlKQorICoKKyAqLworcHVibGljIGNsYXNzIERlbGltZXRlZEZpbGVTaW11bGF0aW9uTG9nZ2VyIAoreworCS8qKgorCSAqIFVuZGVybHlpbmcgbG9nZ2VyIG1vZGVsIHRvIHVzZSBmb3IgY29uZmlndXJhdGlvbgorCSAqLworCXByaXZhdGUgQ1NWTG9nZ2VyIGxvZ2dlcjsKKwkKKwkvKioKKwkgKiBTaW11bGF0aW9uIHRvIGxvZworCSAqLworCXByaXZhdGUgSVNpbXVsYXRpb24gc2ltdWxhdGlvbjsKKwkKKwkvKioKKwkgKiBQYXRoIHRvIHRoZSBsb2cgZmlsZSBkaXJlY3RvcnkKKwkgKi8KKwlwcml2YXRlIEZpbGUgbG9nRGlyZWN0b3J5OworCQorCS8qKgorCSAqIAorCSAqLworCXByaXZhdGUgZmluYWwgTGlzdDxTdHJpbmc+IGV4Y2x1ZGVkRGVjb3JhdG9ycyA9IG5ldyBBcnJheUxpc3Q8U3RyaW5nPihBcnJheXMuYXNMaXN0KENvbnN0YW50cy5FWENMVURFRF9ERUNPUkFUT1JfREVGQVVMVFMpKTsKKwkKKwkvKioKKwkgKiAKKwkgKi8KKwlwcml2YXRlIGZpbmFsIExpc3Q8RGVsaW1ldGVkRmlsZURlY29yYXRvckxvZ2dlcj4gZGVjb3JhdG9yTG9nZ2VycyA9IG5ldyBBcnJheUxpc3Q8RGVsaW1ldGVkRmlsZURlY29yYXRvckxvZ2dlcj4oKTsKKwkKKwkvKioKKwkgKiBAcGFyYW0gbG9nZ2VyCisJICogQHBhcmFtIHNpbXVsYXRpb24KKwkgKi8KKwlwdWJsaWMgRGVsaW1ldGVkRmlsZVNpbXVsYXRpb25Mb2dnZXIoQ1NWTG9nZ2VyIGxvZ2dlciwgSVNpbXVsYXRpb24gc2ltdWxhdGlvbikKKwl7CisJCXRoaXMubG9nZ2VyID0gbG9nZ2VyOworCQl0aGlzLnNpbXVsYXRpb24gPSBzaW11bGF0aW9uOworCQkKKwkJY3JlYXRlTG9nZ2Vyc0ZvckRlY29yYXRvcnMoKTsKKwl9CisJCisJLyoqCisJICogQHJldHVybiBUaGUgdW5kZXJseWluZyBtb2RlbCBmb3IgdGhpcyBzaW11bGF0aW9uIGxvZ2dlcgorCSAqLworCXB1YmxpYyBDU1ZMb2dnZXIgZ2V0TG9nZ2VyKCkKKwl7CisJCXJldHVybiBsb2dnZXI7CisJfQorCQorCS8qKgorCSAqIEByZXR1cm4gVGhlIGxvZ2dlcidzIHNpbXVsYXRpb24KKwkgKi8KKwlwdWJsaWMgSVNpbXVsYXRpb24gZ2V0U2ltdWxhdGlvbigpCisJeworCQlyZXR1cm4gc2ltdWxhdGlvbjsKKwl9CisJCisJCisJLyoqCisJICogR2V0cyB0aGUgYmFzZSBsb2cgZGlyZWN0b3J5IGZvciBhbGwgbG9nIGZpbGVzIGdlbmVyYXRlZCBieSB0aGlzIHNpbXVsYXRpb24KKwkgKiBAcmV0dXJuCisJICovCisJcHVibGljIEZpbGUgZ2V0TG9nRGlyZWN0b3J5KCkKKwl7CisJCWlmIChsb2dEaXJlY3RvcnkgPT0gbnVsbCkgeworCQkJCisJCQlTdHJpbmdCdWlsZGVyIGRpcmVjdG9yeSA9IG5ldyBTdHJpbmdCdWlsZGVyKCk7CisJCQkKKwkJCWlmIChsb2dnZXIuaXNVc2VEZWZhdWx0TG9nRGlyZWN0b3J5KCkgfHwgQ29uc3RhbnRzLkVNUFRZX1NUUklORy5lcXVhbHMobG9nZ2VyLmdldExvZ0RpcmVjdG9yeSgpKSkgeworCQkJCWRpcmVjdG9yeS5hcHBlbmQoRmlsZVV0aWxzLmdldFJvb3RMb2dnaW5nRm9sZGVyRm9yU2NlbmFyaW8oc2ltdWxhdGlvbi5nZXRTY2VuYXJpbygpLmdldFVSSSgpLnRvU3RyaW5nKCkpKTsKKwkJCX0gZWxzZSB7CisJCQkJZGlyZWN0b3J5LmFwcGVuZChsb2dnZXIuZ2V0TG9nRGlyZWN0b3J5KCkpOworCQkJfQorCQkJCisJCQlkaXJlY3RvcnkuYXBwZW5kKENvbnN0YW50cy5TWVNURU1fUEFUSF9TRVBBUkFUT1IpOworCQkJZGlyZWN0b3J5LmFwcGVuZChzaW11bGF0aW9uLmdldFVuaXF1ZUlEU3RyaW5nKCkpOworCQkJZGlyZWN0b3J5LmFwcGVuZChDb25zdGFudHMuU1lTVEVNX1BBVEhfU0VQQVJBVE9SKTsKKwkJCQorCQkJbG9nRGlyZWN0b3J5ID0gbmV3IEZpbGUoZGlyZWN0b3J5LnRvU3RyaW5nKCkpOworCQl9CisJCXJldHVybiBsb2dEaXJlY3Rvcnk7CisJfQorCQorCQorCS8qKgorCSAqIFN0YXJ0cyB0aGUgbG9nZ2VycyBjcmVhdGVkIGJ5IGluaXRpYWxpemluZyBhbmQgc3RhcnRpbmcgYWxsIGRlY29yYXRvciBsb2dnZXJzCisJICovCisJcHVibGljIHZvaWQgc3RhcnQoKQorCXsKKwkJZm9yIChEZWxpbWV0ZWRGaWxlRGVjb3JhdG9yTG9nZ2VyIGxvZ2dlciA6IGRlY29yYXRvckxvZ2dlcnMpIHsKKwkJCWxvZ2dlci5zdGFydCgpOworCQl9CisJfQorCQorCS8qKgorCSAqIFN0b3BzIHRoZSBzaW11bGF0aW9uIGxvZ2dlciBieSBzdG9wcGluZyBhbmQgY2xvc2luZyBhbGwgZGVjb3JhdG9yIGxvZ2dlcnMKKwkgKi8KKwlwdWJsaWMgdm9pZCBzdG9wKCkKKwl7CisJCWZvciAoRGVsaW1ldGVkRmlsZURlY29yYXRvckxvZ2dlciBsb2dnZXIgOiBkZWNvcmF0b3JMb2dnZXJzKSB7CisJCQlsb2dnZXIuc3RvcCgpOworCQl9CisJfQorCQorCS8qKgorCSAqIFBlcmZvcm1zIGxvZ2dpbmcgZm9yIGEgZ2l2ZW4gc2ltdWxhdGlvbiBmb3IgdGhlIGxhc3QgZ2VuZXJhdGVkIGV2ZW50CisJICogQHBhcmFtIGV2ZW50CisJICovCisJcHVibGljIHZvaWQgbG9nKFNpbXVsYXRpb25FdmVudCBldmVudCkKKwl7CisJCWZvciAoRGVsaW1ldGVkRmlsZURlY29yYXRvckxvZ2dlciBsb2dnZXIgOiBkZWNvcmF0b3JMb2dnZXJzKSB7CisJCQlpZiAoZXZlbnQuZ2V0U2ltdWxhdGlvblN0YXRlKCkuZXF1YWxzKFNpbXVsYXRpb25TdGF0ZS5QQVVTRUQpKSB7CisJCQkJbG9nZ2VyLmZsdXNoKCk7CisJCQl9IGVsc2UgaWYgKGV2ZW50LmdldFNpbXVsYXRpb25TdGF0ZSgpLmVxdWFscyhTaW11bGF0aW9uU3RhdGUuQ09NUExFVEVEX0NZQ0xFKSkgeworCQkJCWxvZ2dlci5sb2coKTsKKwkJCX0KKwkJfQorCX0KKwkKKwkvKioKKwkgKiBDcmVhdGVzIHRoZSBsb2dnZXJzIGZvciBhbGwgdmFsaWQgZGVjb3JhdG9ycyBpbiB0aGUgc2NlbmFyaW8KKwkgKi8KKwlwcml2YXRlIHZvaWQgY3JlYXRlTG9nZ2Vyc0ZvckRlY29yYXRvcnMoKSAKKwl7CisJCUxpc3Q8SW50ZWdyYXRpb25EZWNvcmF0b3I+IGRlY29yYXRvcnMgPSBnZXREZWNvcmF0b3JzVG9Mb2coKTsKKwkJCisJCWZvciAoSW50ZWdyYXRpb25EZWNvcmF0b3IgZGVjb3JhdG9yIDogZGVjb3JhdG9ycykgeworCQkJZGVjb3JhdG9yTG9nZ2Vycy5hZGQobmV3IERlbGltZXRlZEZpbGVEZWNvcmF0b3JMb2dnZXIodGhpcywgZGVjb3JhdG9yKSk7CisJCX0KKwl9CisKKwkvKioKKwkgKiBDaGVja3MgaWYgdGhlIHNwZWNpZmljZWQgZGVjb3JhdG9yIGlzIGV4cGxpY2l0bHkgZXhjbHVkZWQgYnkgY2xhc3MgbmFtZQorCSAqIEBwYXJhbSBkCisJICogQHJldHVybgorCSAqLworCXByaXZhdGUgYm9vbGVhbiBpc0V4Y2x1ZGVkRGVjb3JhdG9yKERlY29yYXRvciBkKQorCXsKKwkJcmV0dXJuIGV4Y2x1ZGVkRGVjb3JhdG9ycy5jb250YWlucyhkLmVDbGFzcygpLmdldEluc3RhbmNlQ2xhc3MoKS5nZXROYW1lKCkpOworCX0KKwkKKworCS8qKgorCSAqIEdldHMgdGhlIGRlY29yYXRvcnMgZnJvbSB0aGUgc2NlbmFyaW8gdGhhdCBhcmUgdmFsaWQgZm9yIGxvZ2dpbmcKKwkgKiBAcmV0dXJuCisJICovCisJcHJpdmF0ZSBMaXN0PEludGVncmF0aW9uRGVjb3JhdG9yPiBnZXREZWNvcmF0b3JzVG9Mb2coKQorCXsKKwkJTGlzdDxJbnRlZ3JhdGlvbkRlY29yYXRvcj4gZGVjb3JhdG9ycyA9IG5ldyBBcnJheUxpc3Q8SW50ZWdyYXRpb25EZWNvcmF0b3I+KCk7CisJCQorCQlmb3IgKERlY29yYXRvciBkZWNvcmF0b3IgOiBzaW11bGF0aW9uLmdldFNjZW5hcmlvKCkuZ2V0Q2Fub25pY2FsR3JhcGgoKS5nZXREZWNvcmF0b3JzKCkpIHsKKwkJCWlmKGRlY29yYXRvciBpbnN0YW5jZW9mIEludGVncmF0aW9uRGVjb3JhdG9yICYmICFpc0V4Y2x1ZGVkRGVjb3JhdG9yKGRlY29yYXRvcikpIHsKKwkJCQlkZWNvcmF0b3JzLmFkZCgoSW50ZWdyYXRpb25EZWNvcmF0b3IpZGVjb3JhdG9yKTsKKwkJCX0KKwkJfQorCQkKKwkJcmV0dXJuIGRlY29yYXRvcnM7CisJfQorfQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMuY3N2L3NyYy9vcmcvZWNsaXBzZS9zdGVtL2xvZ2dlcnMvY3N2L2xvZ2dlci9EZWxpbWV0ZWRXcml0ZXIuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzLmNzdi9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9sb2dnZXJzL2Nzdi9sb2dnZXIvRGVsaW1ldGVkV3JpdGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTY0YTU4YwotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzLmNzdi9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9sb2dnZXJzL2Nzdi9sb2dnZXIvRGVsaW1ldGVkV3JpdGVyLmphdmEKQEAgLTAsMCArMSwyMTEgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTEgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMuY3N2LmxvZ2dlcjsKKworaW1wb3J0IGphdmEuaW8uQnVmZmVyZWRXcml0ZXI7CitpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLmlvLldyaXRlcjsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKKworLyoqCisgKiBXcml0ZXIgZm9yIHdyaXRpbmcgZGVsaW1ldGVkIGRhdGEgdG8gYSB0ZXh0IGZpbGUuICBPcHRpb25zIHRvIAorICogdGhpcyBjbGFzcyBpbmNsdWRlIHRoZSB0eXBlcyBvZiBlbnRyeSBhbmQgbmV3IGxpbmUgZGVsaW1ldGVycworICogYXMgd2VsbCBhcyBidWZmZXIgc2l6ZSBhbmQgdGhlIHVuZGVybHlpbmcgd3JpdGVyIHRvIHdyaXRlIHRvLgorICogCisgKiBUaGlzIGNsYXNzIGNhbiBiZSB1c2VkIHRvIGNyZWF0ZSBjb21tYS1zZXBhcmF0ZWQgdmFsdWUgbG9nZ2Vycy4KKyAqCisgKi8KK3B1YmxpYyBjbGFzcyBEZWxpbWV0ZWRXcml0ZXIgZXh0ZW5kcyBCdWZmZXJlZFdyaXRlcgoreworCS8qKgorCSAqIERlZmF1bHQgbmV3IGxpbmUgZGVsaW1ldGVyLgorCSAqLworCXB1YmxpYyBzdGF0aWMgY2hhcltdIERFRkFVTFRfTkVXX0xJTkVfREVMSU1FVEVSID0gbmV3IGNoYXJbXSB7J1xuJ307CisJCisJLyoqCisJICogRGVmYXVsdCBlbnRyeSBkZWxpbWV0ZXIuCisJICovCisJcHVibGljIHN0YXRpYyBjaGFyW10gREVGQVVMVF9FTlRSWV9ERUxJTUVURVIgPSBuZXcgY2hhcltdIHsnLCd9OworCQorCS8qKgorCSAqIERlZmF1bHQgYnVmZmVyIHNpemUuIAorCSAqLworCXB1YmxpYyBzdGF0aWMgaW50IERFRkFVTFRfQlVGRkVSX1NJWkUgPSAxMDI0OworCQorCXByaXZhdGUgU3RyaW5nIGVudHJ5RGVsaW1ldGVyOworCXByaXZhdGUgU3RyaW5nIG5ld0xpbmVEZWxpbWV0ZXI7CisJCisJcHJpdmF0ZSBib29sZWFuIG5ld0xpbmUgPSB0cnVlOworCQorCS8qKgorCSAqIENyZWF0ZXMgYSBuZXcgd3JpdGVyIGZvciB0aGUgZ2l2ZW4gdW5kZXJseWluZyB3cml0ZXIgYW5kIGJ1ZmZlciBzaXplCisJICogQHBhcmFtIGJ1ZlNpemUKKwkgKiBAcGFyYW0gd3JpdGVyCisJICogQHRocm93cyBJT0V4Y2VwdGlvbgorCSAqLworCXB1YmxpYyBEZWxpbWV0ZWRXcml0ZXIoaW50IGJ1ZlNpemUsIFdyaXRlciB3cml0ZXIpIHRocm93cyBJT0V4Y2VwdGlvbgorCXsKKwkJdGhpcyhuZXcgU3RyaW5nKERFRkFVTFRfRU5UUllfREVMSU1FVEVSKSwgbmV3IFN0cmluZyhERUZBVUxUX05FV19MSU5FX0RFTElNRVRFUiksIGJ1ZlNpemUsIHdyaXRlcik7CisJfQorCQorCXB1YmxpYyBEZWxpbWV0ZWRXcml0ZXIoU3RyaW5nIGVudHJ5RGVsaW1ldGVyLCBpbnQgYnVmU2l6ZSwgV3JpdGVyIHdyaXRlcikgdGhyb3dzIElPRXhjZXB0aW9uCisJeworCQl0aGlzKGVudHJ5RGVsaW1ldGVyLCBuZXcgU3RyaW5nKERFRkFVTFRfTkVXX0xJTkVfREVMSU1FVEVSKSwgYnVmU2l6ZSwgd3JpdGVyKTsKKwl9CisJCisJcHVibGljIERlbGltZXRlZFdyaXRlcihTdHJpbmcgZW50cnlEZWxpbWV0ZXIsIFN0cmluZyBuZXdMaW5lRGVsaW1ldGVyLCBpbnQgYnVmU2l6ZSwgV3JpdGVyIHdyaXRlcikgdGhyb3dzIElPRXhjZXB0aW9uCisJeworCQlzdXBlcih3cml0ZXIsIGJ1ZlNpemUpOworCQkKKwkJdGhpcy5lbnRyeURlbGltZXRlciA9IGVudHJ5RGVsaW1ldGVyOworCQl0aGlzLm5ld0xpbmVEZWxpbWV0ZXIgPSBuZXdMaW5lRGVsaW1ldGVyOworCX0KKwkKKwkvKioKKwkgKiBXaGV0aGVyIHRoZSB3cml0ZXIgaXMgY3VycmVudGx5IG9uIGFuIGVtcHR5IGxpbmUuICBOT1RFOiAgT25seSB3b3JrcyB3aGVuIHVzZWQgaW4gCisJICogY29uanVuY3Rpb24gd2l0aCB0aGUgd3JpdGVFbnRyeSguLi4pIGFuZCBuZXdMaW5lKCkgbWV0aG9kcyEhIQorCSAqIAorCSAqIEByZXR1cm4gV2hldGhlciB0aGUgd3JpdGVyIGlzIGN1cnJlbnRseSBvbiBhbiBlbXB0eSBsaW5lLgorCSAqLworCXB1YmxpYyBib29sZWFuIGlzRW1wdHlMaW5lKCkKKwl7CisJCXJldHVybiBuZXdMaW5lOworCX0KKworCS8qKgorCSAqIEBwYXJhbSB2YWwKKwkgKiBAdGhyb3dzIElPRXhjZXB0aW9uCisJICovCisJcHVibGljIHZvaWQgd3JpdGVFbnRyeShpbnQgdmFsKSB0aHJvd3MgSU9FeGNlcHRpb24KKwl7CisJCXdyaXRlRW50cnkoU3RyaW5nLnZhbHVlT2YodmFsKSk7CisJfQorCQorCS8qKgorCSAqIEBwYXJhbSB2YWwKKwkgKiBAdGhyb3dzIElPRXhjZXB0aW9uCisJICovCisJcHVibGljIHZvaWQgd3JpdGVFbnRyeShkb3VibGUgdmFsKSB0aHJvd3MgSU9FeGNlcHRpb24KKwl7CisJCXdyaXRlRW50cnkoU3RyaW5nLnZhbHVlT2YodmFsKSk7CisJfQorCQorCS8qKgorCSAqIEBwYXJhbSB2YWwKKwkgKiBAdGhyb3dzIElPRXhjZXB0aW9uCisJICovCisJcHVibGljIHZvaWQgd3JpdGVFbnRyeShmbG9hdCB2YWwpIHRocm93cyBJT0V4Y2VwdGlvbgorCXsKKwkJd3JpdGVFbnRyeShTdHJpbmcudmFsdWVPZih2YWwpKTsKKwl9CisJCisJLyoqCisJICogQHBhcmFtIHZhbAorCSAqIEB0aHJvd3MgSU9FeGNlcHRpb24KKwkgKi8KKwlwdWJsaWMgdm9pZCB3cml0ZUVudHJ5KGJ5dGVbXSB2YWwpIHRocm93cyBJT0V4Y2VwdGlvbgorCXsKKwkJd3JpdGVFbnRyeShuZXcgU3RyaW5nKHZhbCkpOworCX0KKwkKKwkvKioKKwkgKiBAcGFyYW0gdmFsCisJICogQHRocm93cyBJT0V4Y2VwdGlvbgorCSAqLworCXB1YmxpYyB2b2lkIHdyaXRlRW50cnkoYnl0ZSB2YWwpIHRocm93cyBJT0V4Y2VwdGlvbgorCXsKKwkJd3JpdGVFbnRyeShTdHJpbmcudmFsdWVPZih2YWwpKTsKKwl9CisJCisJLyoqCisJICogQHBhcmFtIHZhbAorCSAqIEB0aHJvd3MgSU9FeGNlcHRpb24KKwkgKi8KKwlwdWJsaWMgdm9pZCB3cml0ZUVudHJ5KGxvbmcgdmFsKSB0aHJvd3MgSU9FeGNlcHRpb24KKwl7CisJCXdyaXRlRW50cnkoU3RyaW5nLnZhbHVlT2YodmFsKSk7CisJfQorCQkKKwkvKioKKwkgKiBXcml0ZXMgYSAKKwkgKiAKKwkgKiBAcGFyYW0gdmFsCisJICogQHRocm93cyBJT0V4Y2VwdGlvbgorCSAqLworCXB1YmxpYyB2b2lkIHdyaXRlRW50cnkoY2hhciB2YWwpIHRocm93cyBJT0V4Y2VwdGlvbgorCXsKKwkJd3JpdGVFbnRyeShTdHJpbmcudmFsdWVPZih2YWwpKTsKKwl9CisJCisJLyoqCisJICogV3JpdGVzIGEgY2hhcmFjdGVyIChzdHJpbmcpIHZhbHVlIG9mIHRoZSBnaXZlbiBvYmplY3QKKwkgKiB0byB0aGUgd3JpdGVyLiBUaGUgZW50cnkgaXMgcHJlY2VkZWQgYnkgYW4gZW50cnkgZGVsaW1ldGVyIGlmCisJICogaXQgaXMgbm90IHRoZSBmaXJzdCBpdGVtIG9uIGEgbGluZS4KKwkgKiAKKwkgKiBAcGFyYW0gdmFsCisJICogQHRocm93cyBJT0V4Y2VwdGlvbgorCSAqLworCXB1YmxpYyB2b2lkIHdyaXRlRW50cnkoT2JqZWN0IHZhbCkgdGhyb3dzIElPRXhjZXB0aW9uCisJeworCQlTdHJpbmcgc3RyID0gbnVsbDsKKwkJaWYgKHZhbCAhPSBudWxsKSB7CisJCQlzdHIgPSB2YWwudG9TdHJpbmcoKTsKKwkJCXN0ciA9IHN0ci5yZXBsYWNlKGVudHJ5RGVsaW1ldGVyLCAiICIpOworCQkJc3RyID0gc3RyLnJlcGxhY2UobmV3TGluZURlbGltZXRlciwgIiAiKTsKKwkJfSBlbHNlIHsKKwkJCXN0ciA9IENvbnN0YW50cy5FTVBUWV9TVFJJTkc7CisJCX0KKwkJCisJCWlmIChuZXdMaW5lKSB7CisJCQluZXdMaW5lID0gZmFsc2U7CisJCX0gZWxzZSB7CisJCQlzdXBlci53cml0ZShlbnRyeURlbGltZXRlcik7CisJCX0KKwkJCisJCXN1cGVyLndyaXRlKHN0cik7CisJfQorCisJLyoqCisJICogQXBwZW5kcyBhIG5ldyBsaW5lIHNlcGFyYXRvci4gIFVzZXMgdGhlIGNvbmZpZ3VyZWQgCisJICogbmV3IGxpbmUgY2hhcmFjdGVycyBvciB0aGUgZGVmYXVsdCBpZiBub25lIGlzIAorCSAqIHNwZWNpZmllZC4KKwkgKi8KKwlwdWJsaWMgdm9pZCBuZXdMaW5lKCkgdGhyb3dzIElPRXhjZXB0aW9uCisJeworCQl3cml0ZShuZXdMaW5lRGVsaW1ldGVyKTsKKwkJbmV3TGluZSA9IHRydWU7CisJfQorCQorCS8qKgorCSAqIFdyaXRlcyBhIGxpbmUgb2YgZGVsaW1ldGVkIGVudHJpZXMgZm9yIHRoZSBnaXZlbiBsaXN0LiAgRWFjaCBlbnRyeQorCSAqIGluIHRoZSBsaXN0IGlzIGFwcGVuZGVkIGluIG9yZGVyIHVzaW5nIHRoZSBkZWxpbWV0ZXIgd2l0aCBhIG5ldyBsaW5lCisJICogY2hhcmFjdGVyIGFkZGVkIHRvIHRoZSBlbmQuIElmIHRoZSB3cml0ZXIgaXMgbm90IGF0IGEgbmV3IGxpbmUsCisJICogdGhlbiBpdCB3aWxsIGFkZCBhIG5ldyBsaW5lIGNoYXJhY3RlciBiZWZvcmUgd3JpdGluZyB0aGUgZW50cmllcy4KKwkgKgorCSAqIEBwYXJhbSB2YWxzIExpc3Qgb2YgdmFsdWVzIHRvIGFwcGVuZCBhcyBkZWxpbWV0ZWQgZW50cmllcyB0byB0aGUgd3JpdGVyCisJICogQHRocm93cyBJT0V4Y2VwdGlvbgorCSAqLworCXB1YmxpYyB2b2lkIHdyaXRlTGluZShMaXN0PD8+IHZhbHMpIHRocm93cyBJT0V4Y2VwdGlvbgorCXsKKwkJaWYgKHZhbHMgIT0gbnVsbCkgeworCQkJaWYgKCFpc0VtcHR5TGluZSgpKSB7CisJCQkJbmV3TGluZSgpOworCQkJfQorCQkJCisJCQlmb3IgKE9iamVjdCB2YWwgOiB2YWxzKSB7CisJCQkJd3JpdGVFbnRyeSh2YWwpOworCQkJfQorCQkJbmV3TGluZSgpOworCQl9CisJCQorCX0KKwkKK30KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzLmNzdi9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9sb2dnZXJzL2Nzdi9sb2dnZXIvRmlsZVV0aWxzLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy5jc3Yvc3JjL29yZy9lY2xpcHNlL3N0ZW0vbG9nZ2Vycy9jc3YvbG9nZ2VyL0ZpbGVVdGlscy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI5MzlkMjgKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy5jc3Yvc3JjL29yZy9lY2xpcHNlL3N0ZW0vbG9nZ2Vycy9jc3YvbG9nZ2VyL0ZpbGVVdGlscy5qYXZhCkBAIC0wLDAgKzEsODkgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYsIDIwMDcsIDIwMDgsIDIwMTEgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMuY3N2LmxvZ2dlcjsKKworaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW07CitpbXBvcnQgamF2YS5pby5PdXRwdXRTdHJlYW07CitpbXBvcnQgamF2YS5pby5Xcml0ZXI7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5SZXNvdXJjZXNQbHVnaW47CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQYXRoOworCisKKy8qKgorICogVXRpbGl0aWUgbWV0aG9kcyBmb3IgaGFuZGxpbmcgcGF0aHMgYW5kIHN0cmVhbXMgaW4gdGhlIGxvZ2dlcgorICoKKyAqLworcHVibGljIGNsYXNzIEZpbGVVdGlscworeworCS8qKgorCSAqIEdpdmVuIGEgc2NlbmFyaW8sIHJldHVybiB0aGUgZm9sZGVyIHdoZXJlIHJlY29yZGVkIHNpbXVsYXRpb25zIGFyZSBzdG9yZWQuCisJICogCisJICogQHBhcmFtIHNjZW5hcmlvVVJMCisJICogQHJldHVybiBTdHJpbmcgRm9sZGVyIHRvIHN0b3JlIHJlY29yZGVkIHNpbXVsYXRpb25zCisJICovCisJcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0Um9vdExvZ2dpbmdGb2xkZXJGb3JTY2VuYXJpbyhTdHJpbmcgc2NlbmFyaW9VUkwpIAorCXsKKwkJZmluYWwgSVBhdGggd29ya3NwYWNlUGF0aCA9IFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5nZXRSb290KCkuZ2V0TG9jYXRpb24oKTsKKwkJCisJCWJvb2xlYW4gc3RlbVByb2plY3RTY2VuYXJpbyA9IHNjZW5hcmlvVVJMLnN0YXJ0c1dpdGgoQ29uc3RhbnRzLlNDRU5BUklPU19VUkxfUFJFRklYKTsKKwkJSVBhdGggcGF0aDE7CisJCWlmKHN0ZW1Qcm9qZWN0U2NlbmFyaW8pIHsKKwkJCS8vIFNjZW5hcmlvIGlzIGNvbnRhaW5lZCBpbiBhIFNURU0gUHJvamVjdAorCQkJU3RyaW5nIHNjZW5hcmlvUmVsYXRpdmVQYXRoID0gc2NlbmFyaW9VUkwuc3Vic3RyaW5nKENvbnN0YW50cy5TQ0VOQVJJT1NfVVJMX1BSRUZJWC5sZW5ndGgoKSk7CisJCQlwYXRoMSA9IHdvcmtzcGFjZVBhdGguYXBwZW5kKHNjZW5hcmlvUmVsYXRpdmVQYXRoKS5yZW1vdmVMYXN0U2VnbWVudHMoMik7CisJCX0gZWxzZSB7CisJCQkvLyBTY2VuYXJpbyBpcyBmcm9tIHRoZSBidWlsdC1pbiBzY2VuYXJpb3MgbGlzdAorCQkJcGF0aDEgPSB3b3Jrc3BhY2VQYXRoLmFwcGVuZChDb25zdGFudHMuQlVJTERfSU5fU0NFTkFSSU9TX1BST0pFQ1RfRk9MREVSKTsKKwkJfQorCQlTdHJpbmcgcGF0aCA9IHBhdGgxLmFwcGVuZChDb25zdGFudHMuU1lTVEVNX1BBVEhfU0VQQVJBVE9SKS5hcHBlbmQoQ29uc3RhbnRzLlJFQ09SREVEX1NJTVVMQVRJT05TX0ZPTERFUikudG9PU1N0cmluZygpOworCQlyZXR1cm4gcGF0aDsKKwl9CisJCisJLyoqCisJICogU2FmZWx5IGNsb3NlIGEgd3JpdGVyLCBpZ25vcmluZyBhbGwgdGhyb3duIGVycm9ycyBhbmQgZXhjZXB0aW9ucworCSAqIEBwYXJhbSB3IFRoZSB3cml0ZXIgdG8gY2xvc2UKKwkgKi8KKwlwdWJsaWMgc3RhdGljIHZvaWQgc2FmZUNsb3NlKGZpbmFsIFdyaXRlciB3KQorCXsKKwkJdHJ5IHsKKwkJCXcuY2xvc2UoKTsKKwkJfSBjYXRjaCAoVGhyb3dhYmxlIHQpIHsKKwkJCS8vIGRvbid0IGNhcmUKKwkJfQorCX0KKwkKKwkvKioKKwkgKiBTYWZlbHkgY2xvc2UgYW4gb3V0cHV0IHN0cmVhbSwgaWdub3JpbmcgYWxsIHRocm93biBlcnJvcnMgYW5kIGV4Y2VwdGlvbnMKKwkgKiBAcGFyYW0gb3MgT3V0cHV0IHN0cmVhbSB0byBjbG9zZQorCSAqLworCXB1YmxpYyBzdGF0aWMgdm9pZCBzYWZlQ2xvc2UoZmluYWwgT3V0cHV0U3RyZWFtIG9zKQorCXsKKwkJdHJ5IHsKKwkJCW9zLmNsb3NlKCk7CisJCX0gY2F0Y2ggKFRocm93YWJsZSB0KSB7CisJCQkvLyBkb24ndCBjYXJlCisJCX0KKwl9CisJCisJLyoqCisJICogU2FmZWx5IGNsb3NlIGFuIGlucHV0IHN0cmVhbSwgaWdub3JpbmcgYWxsIGV4Y2VwdGlvbnMgdGhyb3VnaAorCSAqIEBwYXJhbSBpcyBJbnB1dCBzdHJlYW0gdG8gY2xvc2UKKwkgKi8KKwlwdWJsaWMgc3RhdGljIHZvaWQgc2FmZUNsb3NlKGZpbmFsIElucHV0U3RyZWFtIGlzKQorCXsKKwkJdHJ5IHsKKwkJCWlzLmNsb3NlKCk7CisJCX0gY2F0Y2ggKFRocm93YWJsZSB0KSB7CisJCQkvLyBkb24ndCBjYXJlCisJCX0KKwl9Cit9CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy5jc3Yvc3JjL29yZy9lY2xpcHNlL3N0ZW0vbG9nZ2Vycy9jc3YvbG9nZ2VyL1NpbXVsYXRpb25VdGlscy5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMuY3N2L3NyYy9vcmcvZWNsaXBzZS9zdGVtL2xvZ2dlcnMvY3N2L2xvZ2dlci9TaW11bGF0aW9uVXRpbHMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NjMwZTZiCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMuY3N2L3NyYy9vcmcvZWNsaXBzZS9zdGVtL2xvZ2dlcnMvY3N2L2xvZ2dlci9TaW11bGF0aW9uVXRpbHMuamF2YQpAQCAtMCwwICsxLDc5IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA2LCAyMDA3LCAyMDA4LCAyMDExIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzLmNzdi5sb2dnZXI7CisKK2ltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKK2ltcG9ydCBqYXZhLnV0aWwuTWFwOworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLkVNYXA7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlVSSTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguR3JhcGg7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLk5vZGU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNjZW5hcmlvLlNjZW5hcmlvOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uam9icy5zaW11bGF0aW9uLlNpbXVsYXRpb25NYW5hZ2VyOworCisvKioKKyAqIEhlbHBlciBtZXRob2RzIGZvciBzaW11bGF0aW9uLXNwZWNpZmljIG9wZXJhdGlvbnMgaW4gdGhlIGxvZ2dlcgorICoKKyAqLworcHVibGljIGNsYXNzIFNpbXVsYXRpb25VdGlscworeworCisJLyoqCisJICogUmV0dXJuIGFsbCBub2RlcyBhbmQgdGhlaXIgY29ycmVzcG9uZGluZyBsZXZlbC4gV2UgdXNlIHRoaXMgdG8gbG9nIGRhdGEgdXNpbmcgCisJICogZGlmZmVyZW50IHJlc29sdXRpb25zLgorCSAqIAorCSAqIEBwYXJhbSBzaW11bGF0aW9uCisJICogQHJldHVybiBNYXAgd2l0aCBub2RlIGFuZCBsZXZlbAorCSAqLworCXB1YmxpYyBzdGF0aWMgTWFwPE5vZGUsIEludGVnZXI+IGdldE5vZGVMZXZlbHNGb3JTY2VuYXJpbyhTY2VuYXJpbyBzY2VuYXJpbykgeworCQlNYXA8Tm9kZSwgSW50ZWdlcj4gcmVzdWx0ID0gbmV3IEhhc2hNYXA8Tm9kZSwgSW50ZWdlcj4oKTsKKwkJZmluYWwgR3JhcGggZ3JhcGggPSBzY2VuYXJpby5nZXRDYW5vbmljYWxHcmFwaCgpOworCQlpZiAoZ3JhcGggIT0gbnVsbCkgeworCQkJZmluYWwgRU1hcDxVUkksTm9kZT4gYWxsTm9kZXMgPSBncmFwaC5nZXROb2RlcygpOworCQkgICAgZm9yIChVUkkgdXJpIDogYWxsTm9kZXMua2V5U2V0KCkpIHsKKwkJICAgIAlOb2RlIG5vZGUgPSBhbGxOb2Rlcy5nZXQodXJpKTsKKwkJICAgIAkKKwkJICAgIAkvLyBGaXggZm9yIGRpc3RyaWJ1dGVkIFNURU0uIE9ubHkgbG9nIG5vZGVzCisJCSAgICAJLy8gdGhhdCBhcmUgbWFuYWdlZCBieSB0aGlzIGluc3RhbmNlCisJCSAgICAJaWYoIVNpbXVsYXRpb25NYW5hZ2VyLmdldE1hbmFnZXIoKS5nZXRHcmFwaFBhcnRpdGlvbmVyKCkuaXNNYW5hZ2VkKG5vZGUpKSB7CisJCSAgICAJCWNvbnRpbnVlOworCQkgICAgCX0KKwkJICAgIAkKKwkJICAgIAkvLyBCdWcgZml4LiBNYWtlIHN1cmUgdGhlIG5vZGUgaGFzIGxhYmVscworCQkgICAgCWlmKG5vZGUuZ2V0TGFiZWxzKCkuc2l6ZSgpID09IDApIHsKKwkJICAgIAkJY29udGludWU7CisJCSAgICAJfQorCQkgICAgCVN0cmluZyBpZCA9IG5vZGUuZ2V0VVJJKCkudG9TdHJpbmcoKTsKKwkJICAgIAlpbnQgbGV2ZWwgPSBnZXRBZG1pbkxldmVsKGlkKTsKKwkJICAgIAlyZXN1bHQucHV0KG5vZGUsIGxldmVsKTsKKwkJICAgIH0KKwkJfSAvLyBncmFwaCBub3QgbnVsbAorCQlyZXR1cm4gcmVzdWx0OworCX0KKwkKKwlwdWJsaWMgc3RhdGljIGludCBnZXRBZG1pbkxldmVsKFN0cmluZyB1cmlLZXkpIHsKKwkJaW50IHJldFZhbCA9IDA7CisJCVN0cmluZyB0ZXN0ID0gdXJpS2V5OworCQl3aGlsZSh0ZXN0LmNvbnRhaW5zKCItIikpIHsKKwkJCXJldFZhbCArKzsKKwkJCWludCBpZHgxID0gdGVzdC5pbmRleE9mKCItIik7CisJCQlTdHJpbmcgdGVzdDIgPSB0ZXN0LnN1YnN0cmluZyhpZHgxKzEsIHRlc3QubGVuZ3RoKCkpOworCQkJdGVzdCA9IHRlc3QyOworCQl9CisJCXJldHVybiByZXRWYWw7CisJfQorCQorCisKKworCQorfQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMuY3N2L3NyYy9vcmcvZWNsaXBzZS9zdGVtL2xvZ2dlcnMvY3N2L3ByZXNlbnRhdGlvbi9DU1ZBY3Rpb25CYXJDb250cmlidXRvci5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMuY3N2L3NyYy9vcmcvZWNsaXBzZS9zdGVtL2xvZ2dlcnMvY3N2L3ByZXNlbnRhdGlvbi9DU1ZBY3Rpb25CYXJDb250cmlidXRvci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFjMmFlMzcKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy5jc3Yvc3JjL29yZy9lY2xpcHNlL3N0ZW0vbG9nZ2Vycy9jc3YvcHJlc2VudGF0aW9uL0NTVkFjdGlvbkJhckNvbnRyaWJ1dG9yLmphdmEKQEAgLTAsMCArMSw0MjkgQEAKKy8qKgorICogPGNvcHlyaWdodD4KKyAqIDwvY29weXJpZ2h0PgorICoKKyAqICRJZCQKKyAqLworcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMuY3N2LnByZXNlbnRhdGlvbjsKKworaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7CitpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnVpLnZpZXdlci5JVmlld2VyUHJvdmlkZXI7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5kb21haW4uRWRpdGluZ0RvbWFpbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5kb21haW4uSUVkaXRpbmdEb21haW5Qcm92aWRlcjsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmFjdGlvbi5Db250cm9sQWN0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmFjdGlvbi5DcmVhdGVDaGlsZEFjdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5hY3Rpb24uQ3JlYXRlU2libGluZ0FjdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5hY3Rpb24uRWRpdGluZ0RvbWFpbkFjdGlvbkJhckNvbnRyaWJ1dG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmFjdGlvbi5Mb2FkUmVzb3VyY2VBY3Rpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkuYWN0aW9uLlZhbGlkYXRlQWN0aW9uOworCitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLkFjdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uQWN0aW9uQ29udHJpYnV0aW9uSXRlbTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSUFjdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSUNvbnRyaWJ1dGlvbkl0ZW07CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklDb250cmlidXRpb25NYW5hZ2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JTWVudUxpc3RlbmVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JTWVudU1hbmFnZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklUb29sQmFyTWFuYWdlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uTWVudU1hbmFnZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLlNlcGFyYXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uU3ViQ29udHJpYnV0aW9uSXRlbTsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU3RydWN0dXJlZFNlbGVjdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlNlbGVjdGlvbkNoYW5nZWRFdmVudDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlZpZXdlcjsKKworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy5jc3YucHJvdmlkZXIuQ1NWTG9nZ2VyRWRpdFBsdWdpbjsKKworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklFZGl0b3JQYXJ0OworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLlBhcnRJbml0RXhjZXB0aW9uOworCisvKioKKyAqIFRoaXMgaXMgdGhlIGFjdGlvbiBiYXIgY29udHJpYnV0b3IgZm9yIHRoZSBDU1YgbW9kZWwgZWRpdG9yLgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgQ1NWQWN0aW9uQmFyQ29udHJpYnV0b3IKKwlleHRlbmRzIEVkaXRpbmdEb21haW5BY3Rpb25CYXJDb250cmlidXRvcgorCWltcGxlbWVudHMgSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lciB7CisJLyoqCisJICogVGhpcyBrZWVwcyB0cmFjayBvZiB0aGUgYWN0aXZlIGVkaXRvci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgSUVkaXRvclBhcnQgYWN0aXZlRWRpdG9yUGFydDsKKworCS8qKgorCSAqIFRoaXMga2VlcHMgdHJhY2sgb2YgdGhlIGN1cnJlbnQgc2VsZWN0aW9uIHByb3ZpZGVyLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBJU2VsZWN0aW9uUHJvdmlkZXIgc2VsZWN0aW9uUHJvdmlkZXI7CisKKwkvKioKKwkgKiBUaGlzIGFjdGlvbiBvcGVucyB0aGUgUHJvcGVydGllcyB2aWV3LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBJQWN0aW9uIHNob3dQcm9wZXJ0aWVzVmlld0FjdGlvbiA9CisJCW5ldyBBY3Rpb24oQ1NWTG9nZ2VyRWRpdFBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoIl9VSV9TaG93UHJvcGVydGllc1ZpZXdfbWVudV9pdGVtIikpIHsKKwkJCUBPdmVycmlkZQorCQkJcHVibGljIHZvaWQgcnVuKCkgeworCQkJCXRyeSB7CisJCQkJCWdldFBhZ2UoKS5zaG93Vmlldygib3JnLmVjbGlwc2UudWkudmlld3MuUHJvcGVydHlTaGVldCIpOworCQkJCX0KKwkJCQljYXRjaCAoUGFydEluaXRFeGNlcHRpb24gZXhjZXB0aW9uKSB7CisJCQkJCUNTVkxvZ2dlckVkaXRQbHVnaW4uSU5TVEFOQ0UubG9nKGV4Y2VwdGlvbik7CisJCQkJfQorCQkJfQorCQl9OworCisJLyoqCisJICogVGhpcyBhY3Rpb24gcmVmcmVzaGVzIHRoZSB2aWV3ZXIgb2YgdGhlIGN1cnJlbnQgZWRpdG9yIGlmIHRoZSBlZGl0b3IKKwkgKiBpbXBsZW1lbnRzIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnVpLnZpZXdlci5JVmlld2VyUHJvdmlkZXJ9LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBJQWN0aW9uIHJlZnJlc2hWaWV3ZXJBY3Rpb24gPQorCQluZXcgQWN0aW9uKENTVkxvZ2dlckVkaXRQbHVnaW4uSU5TVEFOQ0UuZ2V0U3RyaW5nKCJfVUlfUmVmcmVzaFZpZXdlcl9tZW51X2l0ZW0iKSkgeworCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgYm9vbGVhbiBpc0VuYWJsZWQoKSB7CisJCQkJcmV0dXJuIGFjdGl2ZUVkaXRvclBhcnQgaW5zdGFuY2VvZiBJVmlld2VyUHJvdmlkZXI7CisJCQl9CisKKwkJCUBPdmVycmlkZQorCQkJcHVibGljIHZvaWQgcnVuKCkgeworCQkJCWlmIChhY3RpdmVFZGl0b3JQYXJ0IGluc3RhbmNlb2YgSVZpZXdlclByb3ZpZGVyKSB7CisJCQkJCVZpZXdlciB2aWV3ZXIgPSAoKElWaWV3ZXJQcm92aWRlcilhY3RpdmVFZGl0b3JQYXJ0KS5nZXRWaWV3ZXIoKTsKKwkJCQkJaWYgKHZpZXdlciAhPSBudWxsKSB7CisJCQkJCQl2aWV3ZXIucmVmcmVzaCgpOworCQkJCQl9CisJCQkJfQorCQkJfQorCQl9OworCisJLyoqCisJICogVGhpcyB3aWxsIGNvbnRhaW4gb25lIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5hY3Rpb24uQ3JlYXRlQ2hpbGRBY3Rpb259IGNvcnJlc3BvbmRpbmcgdG8gZWFjaCBkZXNjcmlwdG9yCisJICogZ2VuZXJhdGVkIGZvciB0aGUgY3VycmVudCBzZWxlY3Rpb24gYnkgdGhlIGl0ZW0gcHJvdmlkZXIuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIENvbGxlY3Rpb248SUFjdGlvbj4gY3JlYXRlQ2hpbGRBY3Rpb25zOworCisJLyoqCisJICogVGhpcyBpcyB0aGUgbWVudSBtYW5hZ2VyIGludG8gd2hpY2ggbWVudSBjb250cmlidXRpb24gaXRlbXMgc2hvdWxkIGJlIGFkZGVkIGZvciBDcmVhdGVDaGlsZCBhY3Rpb25zLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBJTWVudU1hbmFnZXIgY3JlYXRlQ2hpbGRNZW51TWFuYWdlcjsKKworCS8qKgorCSAqIFRoaXMgd2lsbCBjb250YWluIG9uZSB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkuYWN0aW9uLkNyZWF0ZVNpYmxpbmdBY3Rpb259IGNvcnJlc3BvbmRpbmcgdG8gZWFjaCBkZXNjcmlwdG9yCisJICogZ2VuZXJhdGVkIGZvciB0aGUgY3VycmVudCBzZWxlY3Rpb24gYnkgdGhlIGl0ZW0gcHJvdmlkZXIuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIENvbGxlY3Rpb248SUFjdGlvbj4gY3JlYXRlU2libGluZ0FjdGlvbnM7CisKKwkvKioKKwkgKiBUaGlzIGlzIHRoZSBtZW51IG1hbmFnZXIgaW50byB3aGljaCBtZW51IGNvbnRyaWJ1dGlvbiBpdGVtcyBzaG91bGQgYmUgYWRkZWQgZm9yIENyZWF0ZVNpYmxpbmcgYWN0aW9ucy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgSU1lbnVNYW5hZ2VyIGNyZWF0ZVNpYmxpbmdNZW51TWFuYWdlcjsKKworCS8qKgorCSAqIFRoaXMgY3JlYXRlcyBhbiBpbnN0YW5jZSBvZiB0aGUgY29udHJpYnV0b3IuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIENTVkFjdGlvbkJhckNvbnRyaWJ1dG9yKCkgeworCQlzdXBlcihBRERJVElPTlNfTEFTVF9TVFlMRSk7CisJCWxvYWRSZXNvdXJjZUFjdGlvbiA9IG5ldyBMb2FkUmVzb3VyY2VBY3Rpb24oKTsKKwkJdmFsaWRhdGVBY3Rpb24gPSBuZXcgVmFsaWRhdGVBY3Rpb24oKTsKKwkJY29udHJvbEFjdGlvbiA9IG5ldyBDb250cm9sQWN0aW9uKCk7CisJfQorCisJLyoqCisJICogVGhpcyBhZGRzIFNlcGFyYXRvcnMgZm9yIGVkaXRvciBhZGRpdGlvbnMgdG8gdGhlIHRvb2wgYmFyLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGNvbnRyaWJ1dGVUb1Rvb2xCYXIoSVRvb2xCYXJNYW5hZ2VyIHRvb2xCYXJNYW5hZ2VyKSB7CisJCXRvb2xCYXJNYW5hZ2VyLmFkZChuZXcgU2VwYXJhdG9yKCJjc3Ytc2V0dGluZ3MiKSk7CisJCXRvb2xCYXJNYW5hZ2VyLmFkZChuZXcgU2VwYXJhdG9yKCJjc3YtYWRkaXRpb25zIikpOworCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyB0byB0aGUgbWVudSBiYXIgYSBtZW51IGFuZCBzb21lIHNlcGFyYXRvcnMgZm9yIGVkaXRvciBhZGRpdGlvbnMsCisJICogYXMgd2VsbCBhcyB0aGUgc3ViLW1lbnVzIGZvciBvYmplY3QgY3JlYXRpb24gaXRlbXMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgY29udHJpYnV0ZVRvTWVudShJTWVudU1hbmFnZXIgbWVudU1hbmFnZXIpIHsKKwkJc3VwZXIuY29udHJpYnV0ZVRvTWVudShtZW51TWFuYWdlcik7CisKKwkJSU1lbnVNYW5hZ2VyIHN1Ym1lbnVNYW5hZ2VyID0gbmV3IE1lbnVNYW5hZ2VyKENTVkxvZ2dlckVkaXRQbHVnaW4uSU5TVEFOQ0UuZ2V0U3RyaW5nKCJfVUlfQ1NWRWRpdG9yX21lbnUiKSwgIm9yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy5jc3ZNZW51SUQiKTsKKwkJbWVudU1hbmFnZXIuaW5zZXJ0QWZ0ZXIoImFkZGl0aW9ucyIsIHN1Ym1lbnVNYW5hZ2VyKTsKKwkJc3VibWVudU1hbmFnZXIuYWRkKG5ldyBTZXBhcmF0b3IoInNldHRpbmdzIikpOworCQlzdWJtZW51TWFuYWdlci5hZGQobmV3IFNlcGFyYXRvcigiYWN0aW9ucyIpKTsKKwkJc3VibWVudU1hbmFnZXIuYWRkKG5ldyBTZXBhcmF0b3IoImFkZGl0aW9ucyIpKTsKKwkJc3VibWVudU1hbmFnZXIuYWRkKG5ldyBTZXBhcmF0b3IoImFkZGl0aW9ucy1lbmQiKSk7CisKKwkJLy8gUHJlcGFyZSBmb3IgQ3JlYXRlQ2hpbGQgaXRlbSBhZGRpdGlvbiBvciByZW1vdmFsLgorCQkvLworCQljcmVhdGVDaGlsZE1lbnVNYW5hZ2VyID0gbmV3IE1lbnVNYW5hZ2VyKENTVkxvZ2dlckVkaXRQbHVnaW4uSU5TVEFOQ0UuZ2V0U3RyaW5nKCJfVUlfQ3JlYXRlQ2hpbGRfbWVudV9pdGVtIikpOworCQlzdWJtZW51TWFuYWdlci5pbnNlcnRCZWZvcmUoImFkZGl0aW9ucyIsIGNyZWF0ZUNoaWxkTWVudU1hbmFnZXIpOworCisJCS8vIFByZXBhcmUgZm9yIENyZWF0ZVNpYmxpbmcgaXRlbSBhZGRpdGlvbiBvciByZW1vdmFsLgorCQkvLworCQljcmVhdGVTaWJsaW5nTWVudU1hbmFnZXIgPSBuZXcgTWVudU1hbmFnZXIoQ1NWTG9nZ2VyRWRpdFBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoIl9VSV9DcmVhdGVTaWJsaW5nX21lbnVfaXRlbSIpKTsKKwkJc3VibWVudU1hbmFnZXIuaW5zZXJ0QmVmb3JlKCJhZGRpdGlvbnMiLCBjcmVhdGVTaWJsaW5nTWVudU1hbmFnZXIpOworCisJCS8vIEZvcmNlIGFuIHVwZGF0ZSBiZWNhdXNlIEVjbGlwc2UgaGlkZXMgZW1wdHkgbWVudXMgbm93LgorCQkvLworCQlzdWJtZW51TWFuYWdlci5hZGRNZW51TGlzdGVuZXIKKwkJCShuZXcgSU1lbnVMaXN0ZW5lcigpIHsKKwkJCQkgcHVibGljIHZvaWQgbWVudUFib3V0VG9TaG93KElNZW51TWFuYWdlciBtZW51TWFuYWdlcikgeworCQkJCQkgbWVudU1hbmFnZXIudXBkYXRlQWxsKHRydWUpOworCQkJCSB9CisJCQkgfSk7CisKKwkJYWRkR2xvYmFsQWN0aW9ucyhzdWJtZW51TWFuYWdlcik7CisJfQorCisJLyoqCisJICogV2hlbiB0aGUgYWN0aXZlIGVkaXRvciBjaGFuZ2VzLCB0aGlzIHJlbWVtYmVycyB0aGUgY2hhbmdlIGFuZCByZWdpc3RlcnMgd2l0aCBpdCBhcyBhIHNlbGVjdGlvbiBwcm92aWRlci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBzZXRBY3RpdmVFZGl0b3IoSUVkaXRvclBhcnQgcGFydCkgeworCQlzdXBlci5zZXRBY3RpdmVFZGl0b3IocGFydCk7CisJCWFjdGl2ZUVkaXRvclBhcnQgPSBwYXJ0OworCisJCS8vIFN3aXRjaCB0byB0aGUgbmV3IHNlbGVjdGlvbiBwcm92aWRlci4KKwkJLy8KKwkJaWYgKHNlbGVjdGlvblByb3ZpZGVyICE9IG51bGwpIHsKKwkJCXNlbGVjdGlvblByb3ZpZGVyLnJlbW92ZVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcih0aGlzKTsKKwkJfQorCQlpZiAocGFydCA9PSBudWxsKSB7CisJCQlzZWxlY3Rpb25Qcm92aWRlciA9IG51bGw7CisJCX0KKwkJZWxzZSB7CisJCQlzZWxlY3Rpb25Qcm92aWRlciA9IHBhcnQuZ2V0U2l0ZSgpLmdldFNlbGVjdGlvblByb3ZpZGVyKCk7CisJCQlzZWxlY3Rpb25Qcm92aWRlci5hZGRTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIodGhpcyk7CisKKwkJCS8vIEZha2UgYSBzZWxlY3Rpb24gY2hhbmdlZCBldmVudCB0byB1cGRhdGUgdGhlIG1lbnVzLgorCQkJLy8KKwkJCWlmIChzZWxlY3Rpb25Qcm92aWRlci5nZXRTZWxlY3Rpb24oKSAhPSBudWxsKSB7CisJCQkJc2VsZWN0aW9uQ2hhbmdlZChuZXcgU2VsZWN0aW9uQ2hhbmdlZEV2ZW50KHNlbGVjdGlvblByb3ZpZGVyLCBzZWxlY3Rpb25Qcm92aWRlci5nZXRTZWxlY3Rpb24oKSkpOworCQkJfQorCQl9CisJfQorCisJLyoqCisJICogVGhpcyBpbXBsZW1lbnRzIHtAbGluayBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXJ9LAorCSAqIGhhbmRsaW5nIHtAbGluayBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlNlbGVjdGlvbkNoYW5nZWRFdmVudH1zIGJ5IHF1ZXJ5aW5nIGZvciB0aGUgY2hpbGRyZW4gYW5kIHNpYmxpbmdzCisJICogdGhhdCBjYW4gYmUgYWRkZWQgdG8gdGhlIHNlbGVjdGVkIG9iamVjdCBhbmQgdXBkYXRpbmcgdGhlIG1lbnVzIGFjY29yZGluZ2x5LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIHNlbGVjdGlvbkNoYW5nZWQoU2VsZWN0aW9uQ2hhbmdlZEV2ZW50IGV2ZW50KSB7CisJCS8vIFJlbW92ZSBhbnkgbWVudSBpdGVtcyBmb3Igb2xkIHNlbGVjdGlvbi4KKwkJLy8KKwkJaWYgKGNyZWF0ZUNoaWxkTWVudU1hbmFnZXIgIT0gbnVsbCkgeworCQkJZGVwb3B1bGF0ZU1hbmFnZXIoY3JlYXRlQ2hpbGRNZW51TWFuYWdlciwgY3JlYXRlQ2hpbGRBY3Rpb25zKTsKKwkJfQorCQlpZiAoY3JlYXRlU2libGluZ01lbnVNYW5hZ2VyICE9IG51bGwpIHsKKwkJCWRlcG9wdWxhdGVNYW5hZ2VyKGNyZWF0ZVNpYmxpbmdNZW51TWFuYWdlciwgY3JlYXRlU2libGluZ0FjdGlvbnMpOworCQl9CisKKwkJLy8gUXVlcnkgdGhlIG5ldyBzZWxlY3Rpb24gZm9yIGFwcHJvcHJpYXRlIG5ldyBjaGlsZC9zaWJsaW5nIGRlc2NyaXB0b3JzCisJCS8vCisJCUNvbGxlY3Rpb248Pz4gbmV3Q2hpbGREZXNjcmlwdG9ycyA9IG51bGw7CisJCUNvbGxlY3Rpb248Pz4gbmV3U2libGluZ0Rlc2NyaXB0b3JzID0gbnVsbDsKKworCQlJU2VsZWN0aW9uIHNlbGVjdGlvbiA9IGV2ZW50LmdldFNlbGVjdGlvbigpOworCQlpZiAoc2VsZWN0aW9uIGluc3RhbmNlb2YgSVN0cnVjdHVyZWRTZWxlY3Rpb24gJiYgKChJU3RydWN0dXJlZFNlbGVjdGlvbilzZWxlY3Rpb24pLnNpemUoKSA9PSAxKSB7CisJCQlPYmplY3Qgb2JqZWN0ID0gKChJU3RydWN0dXJlZFNlbGVjdGlvbilzZWxlY3Rpb24pLmdldEZpcnN0RWxlbWVudCgpOworCisJCQlFZGl0aW5nRG9tYWluIGRvbWFpbiA9ICgoSUVkaXRpbmdEb21haW5Qcm92aWRlcilhY3RpdmVFZGl0b3JQYXJ0KS5nZXRFZGl0aW5nRG9tYWluKCk7CisKKwkJCW5ld0NoaWxkRGVzY3JpcHRvcnMgPSBkb21haW4uZ2V0TmV3Q2hpbGREZXNjcmlwdG9ycyhvYmplY3QsIG51bGwpOworCQkJbmV3U2libGluZ0Rlc2NyaXB0b3JzID0gZG9tYWluLmdldE5ld0NoaWxkRGVzY3JpcHRvcnMobnVsbCwgb2JqZWN0KTsKKwkJfQorCisJCS8vIEdlbmVyYXRlIGFjdGlvbnMgZm9yIHNlbGVjdGlvbjsgcG9wdWxhdGUgYW5kIHJlZHJhdyB0aGUgbWVudXMuCisJCS8vCisJCWNyZWF0ZUNoaWxkQWN0aW9ucyA9IGdlbmVyYXRlQ3JlYXRlQ2hpbGRBY3Rpb25zKG5ld0NoaWxkRGVzY3JpcHRvcnMsIHNlbGVjdGlvbik7CisJCWNyZWF0ZVNpYmxpbmdBY3Rpb25zID0gZ2VuZXJhdGVDcmVhdGVTaWJsaW5nQWN0aW9ucyhuZXdTaWJsaW5nRGVzY3JpcHRvcnMsIHNlbGVjdGlvbik7CisKKwkJaWYgKGNyZWF0ZUNoaWxkTWVudU1hbmFnZXIgIT0gbnVsbCkgeworCQkJcG9wdWxhdGVNYW5hZ2VyKGNyZWF0ZUNoaWxkTWVudU1hbmFnZXIsIGNyZWF0ZUNoaWxkQWN0aW9ucywgbnVsbCk7CisJCQljcmVhdGVDaGlsZE1lbnVNYW5hZ2VyLnVwZGF0ZSh0cnVlKTsKKwkJfQorCQlpZiAoY3JlYXRlU2libGluZ01lbnVNYW5hZ2VyICE9IG51bGwpIHsKKwkJCXBvcHVsYXRlTWFuYWdlcihjcmVhdGVTaWJsaW5nTWVudU1hbmFnZXIsIGNyZWF0ZVNpYmxpbmdBY3Rpb25zLCBudWxsKTsKKwkJCWNyZWF0ZVNpYmxpbmdNZW51TWFuYWdlci51cGRhdGUodHJ1ZSk7CisJCX0KKwl9CisKKwkvKioKKwkgKiBUaGlzIGdlbmVyYXRlcyBhIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5hY3Rpb24uQ3JlYXRlQ2hpbGRBY3Rpb259IGZvciBlYWNoIG9iamVjdCBpbiA8Y29kZT5kZXNjcmlwdG9yczwvY29kZT4sCisJICogYW5kIHJldHVybnMgdGhlIGNvbGxlY3Rpb24gb2YgdGhlc2UgYWN0aW9ucy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgQ29sbGVjdGlvbjxJQWN0aW9uPiBnZW5lcmF0ZUNyZWF0ZUNoaWxkQWN0aW9ucyhDb2xsZWN0aW9uPD8+IGRlc2NyaXB0b3JzLCBJU2VsZWN0aW9uIHNlbGVjdGlvbikgeworCQlDb2xsZWN0aW9uPElBY3Rpb24+IGFjdGlvbnMgPSBuZXcgQXJyYXlMaXN0PElBY3Rpb24+KCk7CisJCWlmIChkZXNjcmlwdG9ycyAhPSBudWxsKSB7CisJCQlmb3IgKE9iamVjdCBkZXNjcmlwdG9yIDogZGVzY3JpcHRvcnMpIHsKKwkJCQlhY3Rpb25zLmFkZChuZXcgQ3JlYXRlQ2hpbGRBY3Rpb24oYWN0aXZlRWRpdG9yUGFydCwgc2VsZWN0aW9uLCBkZXNjcmlwdG9yKSk7CisJCQl9CisJCX0KKwkJcmV0dXJuIGFjdGlvbnM7CisJfQorCisJLyoqCisJICogVGhpcyBnZW5lcmF0ZXMgYSB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkuYWN0aW9uLkNyZWF0ZVNpYmxpbmdBY3Rpb259IGZvciBlYWNoIG9iamVjdCBpbiA8Y29kZT5kZXNjcmlwdG9yczwvY29kZT4sCisJICogYW5kIHJldHVybnMgdGhlIGNvbGxlY3Rpb24gb2YgdGhlc2UgYWN0aW9ucy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgQ29sbGVjdGlvbjxJQWN0aW9uPiBnZW5lcmF0ZUNyZWF0ZVNpYmxpbmdBY3Rpb25zKENvbGxlY3Rpb248Pz4gZGVzY3JpcHRvcnMsIElTZWxlY3Rpb24gc2VsZWN0aW9uKSB7CisJCUNvbGxlY3Rpb248SUFjdGlvbj4gYWN0aW9ucyA9IG5ldyBBcnJheUxpc3Q8SUFjdGlvbj4oKTsKKwkJaWYgKGRlc2NyaXB0b3JzICE9IG51bGwpIHsKKwkJCWZvciAoT2JqZWN0IGRlc2NyaXB0b3IgOiBkZXNjcmlwdG9ycykgeworCQkJCWFjdGlvbnMuYWRkKG5ldyBDcmVhdGVTaWJsaW5nQWN0aW9uKGFjdGl2ZUVkaXRvclBhcnQsIHNlbGVjdGlvbiwgZGVzY3JpcHRvcikpOworCQkJfQorCQl9CisJCXJldHVybiBhY3Rpb25zOworCX0KKworCS8qKgorCSAqIFRoaXMgcG9wdWxhdGVzIHRoZSBzcGVjaWZpZWQgPGNvZGU+bWFuYWdlcjwvY29kZT4gd2l0aCB7QGxpbmsgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLkFjdGlvbkNvbnRyaWJ1dGlvbkl0ZW19cworCSAqIGJhc2VkIG9uIHRoZSB7QGxpbmsgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklBY3Rpb259cyBjb250YWluZWQgaW4gdGhlIDxjb2RlPmFjdGlvbnM8L2NvZGU+IGNvbGxlY3Rpb24sCisJICogYnkgaW5zZXJ0aW5nIHRoZW0gYmVmb3JlIHRoZSBzcGVjaWZpZWQgY29udHJpYnV0aW9uIGl0ZW0gPGNvZGU+Y29udHJpYnV0aW9uSUQ8L2NvZGU+LgorCSAqIElmIDxjb2RlPmNvbnRyaWJ1dGlvbklEPC9jb2RlPiBpcyA8Y29kZT5udWxsPC9jb2RlPiwgdGhleSBhcmUgc2ltcGx5IGFkZGVkLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIHBvcHVsYXRlTWFuYWdlcihJQ29udHJpYnV0aW9uTWFuYWdlciBtYW5hZ2VyLCBDb2xsZWN0aW9uPD8gZXh0ZW5kcyBJQWN0aW9uPiBhY3Rpb25zLCBTdHJpbmcgY29udHJpYnV0aW9uSUQpIHsKKwkJaWYgKGFjdGlvbnMgIT0gbnVsbCkgeworCQkJZm9yIChJQWN0aW9uIGFjdGlvbiA6IGFjdGlvbnMpIHsKKwkJCQlpZiAoY29udHJpYnV0aW9uSUQgIT0gbnVsbCkgeworCQkJCQltYW5hZ2VyLmluc2VydEJlZm9yZShjb250cmlidXRpb25JRCwgYWN0aW9uKTsKKwkJCQl9CisJCQkJZWxzZSB7CisJCQkJCW1hbmFnZXIuYWRkKGFjdGlvbik7CisJCQkJfQorCQkJfQorCQl9CisJfQorCQkKKwkvKioKKwkgKiBUaGlzIHJlbW92ZXMgZnJvbSB0aGUgc3BlY2lmaWVkIDxjb2RlPm1hbmFnZXI8L2NvZGU+IGFsbCB7QGxpbmsgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLkFjdGlvbkNvbnRyaWJ1dGlvbkl0ZW19cworCSAqIGJhc2VkIG9uIHRoZSB7QGxpbmsgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklBY3Rpb259cyBjb250YWluZWQgaW4gdGhlIDxjb2RlPmFjdGlvbnM8L2NvZGU+IGNvbGxlY3Rpb24uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgZGVwb3B1bGF0ZU1hbmFnZXIoSUNvbnRyaWJ1dGlvbk1hbmFnZXIgbWFuYWdlciwgQ29sbGVjdGlvbjw/IGV4dGVuZHMgSUFjdGlvbj4gYWN0aW9ucykgeworCQlpZiAoYWN0aW9ucyAhPSBudWxsKSB7CisJCQlJQ29udHJpYnV0aW9uSXRlbVtdIGl0ZW1zID0gbWFuYWdlci5nZXRJdGVtcygpOworCQkJZm9yIChpbnQgaSA9IDA7IGkgPCBpdGVtcy5sZW5ndGg7IGkrKykgeworCQkJCS8vIExvb2sgaW50byBTdWJDb250cmlidXRpb25JdGVtcworCQkJCS8vCisJCQkJSUNvbnRyaWJ1dGlvbkl0ZW0gY29udHJpYnV0aW9uSXRlbSA9IGl0ZW1zW2ldOworCQkJCXdoaWxlIChjb250cmlidXRpb25JdGVtIGluc3RhbmNlb2YgU3ViQ29udHJpYnV0aW9uSXRlbSkgeworCQkJCQljb250cmlidXRpb25JdGVtID0gKChTdWJDb250cmlidXRpb25JdGVtKWNvbnRyaWJ1dGlvbkl0ZW0pLmdldElubmVySXRlbSgpOworCQkJCX0KKworCQkJCS8vIERlbGV0ZSB0aGUgQWN0aW9uQ29udHJpYnV0aW9uSXRlbXMgd2l0aCBtYXRjaGluZyBhY3Rpb24uCisJCQkJLy8KKwkJCQlpZiAoY29udHJpYnV0aW9uSXRlbSBpbnN0YW5jZW9mIEFjdGlvbkNvbnRyaWJ1dGlvbkl0ZW0pIHsKKwkJCQkJSUFjdGlvbiBhY3Rpb24gPSAoKEFjdGlvbkNvbnRyaWJ1dGlvbkl0ZW0pY29udHJpYnV0aW9uSXRlbSkuZ2V0QWN0aW9uKCk7CisJCQkJCWlmIChhY3Rpb25zLmNvbnRhaW5zKGFjdGlvbikpIHsKKwkJCQkJCW1hbmFnZXIucmVtb3ZlKGNvbnRyaWJ1dGlvbkl0ZW0pOworCQkJCQl9CisJCQkJfQorCQkJfQorCQl9CisJfQorCisJLyoqCisJICogVGhpcyBwb3B1bGF0ZXMgdGhlIHBvcC11cCBtZW51IGJlZm9yZSBpdCBhcHBlYXJzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIG1lbnVBYm91dFRvU2hvdyhJTWVudU1hbmFnZXIgbWVudU1hbmFnZXIpIHsKKwkJc3VwZXIubWVudUFib3V0VG9TaG93KG1lbnVNYW5hZ2VyKTsKKwkJTWVudU1hbmFnZXIgc3VibWVudU1hbmFnZXIgPSBudWxsOworCisJCXN1Ym1lbnVNYW5hZ2VyID0gbmV3IE1lbnVNYW5hZ2VyKENTVkxvZ2dlckVkaXRQbHVnaW4uSU5TVEFOQ0UuZ2V0U3RyaW5nKCJfVUlfQ3JlYXRlQ2hpbGRfbWVudV9pdGVtIikpOworCQlwb3B1bGF0ZU1hbmFnZXIoc3VibWVudU1hbmFnZXIsIGNyZWF0ZUNoaWxkQWN0aW9ucywgbnVsbCk7CisJCW1lbnVNYW5hZ2VyLmluc2VydEJlZm9yZSgiZWRpdCIsIHN1Ym1lbnVNYW5hZ2VyKTsKKworCQlzdWJtZW51TWFuYWdlciA9IG5ldyBNZW51TWFuYWdlcihDU1ZMb2dnZXJFZGl0UGx1Z2luLklOU1RBTkNFLmdldFN0cmluZygiX1VJX0NyZWF0ZVNpYmxpbmdfbWVudV9pdGVtIikpOworCQlwb3B1bGF0ZU1hbmFnZXIoc3VibWVudU1hbmFnZXIsIGNyZWF0ZVNpYmxpbmdBY3Rpb25zLCBudWxsKTsKKwkJbWVudU1hbmFnZXIuaW5zZXJ0QmVmb3JlKCJlZGl0Iiwgc3VibWVudU1hbmFnZXIpOworCX0KKworCS8qKgorCSAqIFRoaXMgaW5zZXJ0cyBnbG9iYWwgYWN0aW9ucyBiZWZvcmUgdGhlICJhZGRpdGlvbnMtZW5kIiBzZXBhcmF0b3IuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgYWRkR2xvYmFsQWN0aW9ucyhJTWVudU1hbmFnZXIgbWVudU1hbmFnZXIpIHsKKwkJbWVudU1hbmFnZXIuaW5zZXJ0QWZ0ZXIoImFkZGl0aW9ucy1lbmQiLCBuZXcgU2VwYXJhdG9yKCJ1aS1hY3Rpb25zIikpOworCQltZW51TWFuYWdlci5pbnNlcnRBZnRlcigidWktYWN0aW9ucyIsIHNob3dQcm9wZXJ0aWVzVmlld0FjdGlvbik7CisKKwkJcmVmcmVzaFZpZXdlckFjdGlvbi5zZXRFbmFibGVkKHJlZnJlc2hWaWV3ZXJBY3Rpb24uaXNFbmFibGVkKCkpOwkJCisJCW1lbnVNYW5hZ2VyLmluc2VydEFmdGVyKCJ1aS1hY3Rpb25zIiwgcmVmcmVzaFZpZXdlckFjdGlvbik7CisKKwkJc3VwZXIuYWRkR2xvYmFsQWN0aW9ucyhtZW51TWFuYWdlcik7CisJfQorCisJLyoqCisJICogVGhpcyBlbnN1cmVzIHRoYXQgYSBkZWxldGUgYWN0aW9uIHdpbGwgY2xlYW4gdXAgYWxsIHJlZmVyZW5jZXMgdG8gZGVsZXRlZCBvYmplY3RzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCBib29sZWFuIHJlbW92ZUFsbFJlZmVyZW5jZXNPbkRlbGV0ZSgpIHsKKwkJcmV0dXJuIHRydWU7CisJfQorCit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMuY3N2L3NyYy9vcmcvZWNsaXBzZS9zdGVtL2xvZ2dlcnMvY3N2L3ByZXNlbnRhdGlvbi9DU1ZFZGl0b3IuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzLmNzdi9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9sb2dnZXJzL2Nzdi9wcmVzZW50YXRpb24vQ1NWRWRpdG9yLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmJkY2NlYQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzLmNzdi9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9sb2dnZXJzL2Nzdi9wcmVzZW50YXRpb24vQ1NWRWRpdG9yLmphdmEKQEAgLTAsMCArMSwxODQ4IEBACisvKioKKyAqIDxjb3B5cmlnaHQ+CisgKiA8L2NvcHlyaWdodD4KKyAqCisgKiAkSWQkCisgKi8KK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzLmNzdi5wcmVzZW50YXRpb247CisKKworaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247CitpbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbTsKKworaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7CitpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247CitpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb25zOworaW1wb3J0IGphdmEudXRpbC5FdmVudE9iamVjdDsKK2ltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKK2ltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7CitpbXBvcnQgamF2YS51dGlsLkxpbmtlZEhhc2hNYXA7CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CitpbXBvcnQgamF2YS51dGlsLk1hcDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklGaWxlOworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklNYXJrZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVJlc291cmNlOworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklSZXNvdXJjZUNoYW5nZUV2ZW50OworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklSZXNvdXJjZUNoYW5nZUxpc3RlbmVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklSZXNvdXJjZURlbHRhOworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklSZXNvdXJjZURlbHRhVmlzaXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5SZXNvdXJjZXNQbHVnaW47CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQ29yZUV4Y2VwdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVBhdGg7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQcm9ncmVzc01vbml0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLk51bGxQcm9ncmVzc01vbml0b3I7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSU1lbnVMaXN0ZW5lcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSU1lbnVNYW5hZ2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JU3RhdHVzTGluZU1hbmFnZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklUb29sQmFyTWFuYWdlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uTWVudU1hbmFnZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLlNlcGFyYXRvcjsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmRpYWxvZ3MuTWVzc2FnZURpYWxvZzsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5kaWFsb2dzLlByb2dyZXNzTW9uaXRvckRpYWxvZzsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuQ29sdW1uV2VpZ2h0RGF0YTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvblByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVN0cnVjdHVyZWRTZWxlY3Rpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5MaXN0Vmlld2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuU2VsZWN0aW9uQ2hhbmdlZEV2ZW50OworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuU3RydWN0dXJlZFNlbGVjdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlN0cnVjdHVyZWRWaWV3ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5UYWJsZUxheW91dDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlRhYmxlVmlld2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuVHJlZVZpZXdlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlZpZXdlcjsKKworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5TV1Q7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuY3VzdG9tLkNUYWJGb2xkZXI7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZG5kLkRORDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZG5kLlRyYW5zZmVyOworCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5Db250cm9sQWRhcHRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLkNvbnRyb2xFdmVudDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ncmFwaGljcy5Qb2ludDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5sYXlvdXQuRmlsbExheW91dDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5NZW51OworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlRhYmxlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlRhYmxlQ29sdW1uOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlRyZWU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuVHJlZUNvbHVtbjsKKworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklBY3Rpb25CYXJzOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklFZGl0b3JJbnB1dDsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5JRWRpdG9yUGFydDsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5JRWRpdG9yU2l0ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5JUGFydExpc3RlbmVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2hQYXJ0OworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLlBhcnRJbml0RXhjZXB0aW9uOworCitpbXBvcnQgb3JnLmVjbGlwc2UudWkuZGlhbG9ncy5TYXZlQXNEaWFsb2c7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5pZGUuSUdvdG9NYXJrZXI7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5wYXJ0LkZpbGVFZGl0b3JJbnB1dDsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5wYXJ0Lk11bHRpUGFnZUVkaXRvclBhcnQ7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS52aWV3cy5jb250ZW50b3V0bGluZS5Db250ZW50T3V0bGluZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS52aWV3cy5jb250ZW50b3V0bGluZS5Db250ZW50T3V0bGluZVBhZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkudmlld3MuY29udGVudG91dGxpbmUuSUNvbnRlbnRPdXRsaW5lUGFnZTsKKworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLnZpZXdzLnByb3BlcnRpZXMuSVByb3BlcnR5U2hlZXRQYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLnZpZXdzLnByb3BlcnRpZXMuUHJvcGVydHlTaGVldDsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS52aWV3cy5wcm9wZXJ0aWVzLlByb3BlcnR5U2hlZXRQYWdlOworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5jb21tYW5kLkJhc2ljQ29tbWFuZFN0YWNrOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24uY29tbWFuZC5Db21tYW5kOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24uY29tbWFuZC5Db21tYW5kU3RhY2s7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5jb21tYW5kLkNvbW1hbmRTdGFja0xpc3RlbmVyOworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uOworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51aS5NYXJrZXJIZWxwZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51aS5WaWV3ZXJQYW5lOworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51aS5lZGl0b3IuUHJvYmxlbUVkaXRvclBhcnQ7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnVpLnZpZXdlci5JVmlld2VyUHJvdmlkZXI7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuQmFzaWNEaWFnbm9zdGljOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5EaWFnbm9zdGljOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5VUkk7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRVZhbGlkYXRvcjsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5yZXNvdXJjZS5SZXNvdXJjZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUucmVzb3VyY2UuUmVzb3VyY2VTZXQ7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUudXRpbC5FQ29udGVudEFkYXB0ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnV0aWwuRWNvcmVVdGlsOworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQuZG9tYWluLkFkYXB0ZXJGYWN0b3J5RWRpdGluZ0RvbWFpbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5kb21haW4uRWRpdGluZ0RvbWFpbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5kb21haW4uSUVkaXRpbmdEb21haW5Qcm92aWRlcjsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkFkYXB0ZXJGYWN0b3J5SXRlbURlbGVnYXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5Db21wb3NlZEFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLlJlZmxlY3RpdmVJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeTsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLnJlc291cmNlLlJlc291cmNlSXRlbVByb3ZpZGVyQWRhcHRlckZhY3Rvcnk7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5hY3Rpb24uRWRpdGluZ0RvbWFpbkFjdGlvbkJhckNvbnRyaWJ1dG9yOworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkuY2VsbGVkaXRvci5BZGFwdGVyRmFjdG9yeVRyZWVFZGl0b3I7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5kbmQuRWRpdGluZ0RvbWFpblZpZXdlckRyb3BBZGFwdGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmRuZC5Mb2NhbFRyYW5zZmVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmRuZC5WaWV3ZXJEcmFnQWRhcHRlcjsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLnByb3ZpZGVyLkFkYXB0ZXJGYWN0b3J5Q29udGVudFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLnByb3ZpZGVyLkFkYXB0ZXJGYWN0b3J5TGFiZWxQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5wcm92aWRlci5VbndyYXBwaW5nU2VsZWN0aW9uUHJvdmlkZXI7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS51dGlsLkVkaXRVSU1hcmtlckhlbHBlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS51dGlsLkVkaXRVSVV0aWw7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS52aWV3LkV4dGVuZGVkUHJvcGVydHlTaGVldFBhZ2U7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMuY3N2LnByb3ZpZGVyLkNTVkl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5OworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnByb3ZpZGVyLkVjb3JlSXRlbVByb3ZpZGVyQWRhcHRlckZhY3Rvcnk7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLnByb3ZpZGVyLkNvbW1vbkl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5OworCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLnByb3ZpZGVyLkdyYXBoSXRlbVByb3ZpZGVyQWRhcHRlckZhY3Rvcnk7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubG9nZ2VyLnByb3ZpZGVyLkxvZ2dlckl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5OworCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLnByb3ZpZGVyLk1vZGVsSXRlbVByb3ZpZGVyQWRhcHRlckZhY3Rvcnk7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIucHJvdmlkZXIuTW9kaWZpZXJJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeTsKKworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zY2VuYXJpby5wcm92aWRlci5TY2VuYXJpb0l0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5OworCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNlcXVlbmNlci5wcm92aWRlci5TZXF1ZW5jZXJJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeTsKKworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zb2x2ZXIucHJvdmlkZXIuU29sdmVySXRlbVByb3ZpZGVyQWRhcHRlckZhY3Rvcnk7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMuY3N2LnByb3ZpZGVyLkNTVkxvZ2dlckVkaXRQbHVnaW47CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMucHJvdmlkZXIuU2ltdWxhdGlvbkxvZ2dlckl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5OworCitpbXBvcnQgb3JnLmVjbGlwc2UudWkuYWN0aW9ucy5Xb3Jrc3BhY2VNb2RpZnlPcGVyYXRpb247CisKKworLyoqCisgKiBUaGlzIGlzIGFuIGV4YW1wbGUgb2YgYSBDU1YgbW9kZWwgZWRpdG9yLgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgQ1NWRWRpdG9yCisJZXh0ZW5kcyBNdWx0aVBhZ2VFZGl0b3JQYXJ0CisJaW1wbGVtZW50cyBJRWRpdGluZ0RvbWFpblByb3ZpZGVyLCBJU2VsZWN0aW9uUHJvdmlkZXIsIElNZW51TGlzdGVuZXIsIElWaWV3ZXJQcm92aWRlciwgSUdvdG9NYXJrZXIgeworCS8qKgorCSAqIFRoaXMga2VlcHMgdHJhY2sgb2YgdGhlIGVkaXRpbmcgZG9tYWluIHRoYXQgaXMgdXNlZCB0byB0cmFjayBhbGwgY2hhbmdlcyB0byB0aGUgbW9kZWwuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIEFkYXB0ZXJGYWN0b3J5RWRpdGluZ0RvbWFpbiBlZGl0aW5nRG9tYWluOworCisJLyoqCisJICogVGhpcyBpcyB0aGUgb25lIGFkYXB0ZXIgZmFjdG9yeSB1c2VkIGZvciBwcm92aWRpbmcgdmlld3Mgb2YgdGhlIG1vZGVsLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBDb21wb3NlZEFkYXB0ZXJGYWN0b3J5IGFkYXB0ZXJGYWN0b3J5OworCisJLyoqCisJICogVGhpcyBpcyB0aGUgY29udGVudCBvdXRsaW5lIHBhZ2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIElDb250ZW50T3V0bGluZVBhZ2UgY29udGVudE91dGxpbmVQYWdlOworCisJLyoqCisJICogVGhpcyBpcyBhIGtsdWRnZS4uLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBJU3RhdHVzTGluZU1hbmFnZXIgY29udGVudE91dGxpbmVTdGF0dXNMaW5lTWFuYWdlcjsKKworCS8qKgorCSAqIFRoaXMgaXMgdGhlIGNvbnRlbnQgb3V0bGluZSBwYWdlJ3Mgdmlld2VyLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBUcmVlVmlld2VyIGNvbnRlbnRPdXRsaW5lVmlld2VyOworCisJLyoqCisJICogVGhpcyBpcyB0aGUgcHJvcGVydHkgc2hlZXQgcGFnZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgUHJvcGVydHlTaGVldFBhZ2UgcHJvcGVydHlTaGVldFBhZ2U7CisKKwkvKioKKwkgKiBUaGlzIGlzIHRoZSB2aWV3ZXIgdGhhdCBzaGFkb3dzIHRoZSBzZWxlY3Rpb24gaW4gdGhlIGNvbnRlbnQgb3V0bGluZS4KKwkgKiBUaGUgcGFyZW50IHJlbGF0aW9uIG11c3QgYmUgY29ycmVjdGx5IGRlZmluZWQgZm9yIHRoaXMgdG8gd29yay4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgVHJlZVZpZXdlciBzZWxlY3Rpb25WaWV3ZXI7CisKKwkvKioKKwkgKiBUaGlzIGludmVydHMgdGhlIHJvbGwgb2YgcGFyZW50IGFuZCBjaGlsZCBpbiB0aGUgY29udGVudCBwcm92aWRlciBhbmQgc2hvdyBwYXJlbnRzIGFzIGEgdHJlZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgVHJlZVZpZXdlciBwYXJlbnRWaWV3ZXI7CisKKwkvKioKKwkgKiBUaGlzIHNob3dzIGhvdyBhIHRyZWUgdmlldyB3b3Jrcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgVHJlZVZpZXdlciB0cmVlVmlld2VyOworCisJLyoqCisJICogVGhpcyBzaG93cyBob3cgYSBsaXN0IHZpZXcgd29ya3MuCisJICogQSBsaXN0IHZpZXdlciBkb2Vzbid0IHN1cHBvcnQgaWNvbnMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIExpc3RWaWV3ZXIgbGlzdFZpZXdlcjsKKworCS8qKgorCSAqIFRoaXMgc2hvd3MgaG93IGEgdGFibGUgdmlldyB3b3Jrcy4KKwkgKiBBIHRhYmxlIGNhbiBiZSB1c2VkIGFzIGEgbGlzdCB3aXRoIGljb25zLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBUYWJsZVZpZXdlciB0YWJsZVZpZXdlcjsKKworCS8qKgorCSAqIFRoaXMgc2hvd3MgaG93IGEgdHJlZSB2aWV3IHdpdGggY29sdW1ucyB3b3Jrcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgVHJlZVZpZXdlciB0cmVlVmlld2VyV2l0aENvbHVtbnM7CisKKwkvKioKKwkgKiBUaGlzIGtlZXBzIHRyYWNrIG9mIHRoZSBhY3RpdmUgdmlld2VyIHBhbmUsIGluIHRoZSBib29rLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBWaWV3ZXJQYW5lIGN1cnJlbnRWaWV3ZXJQYW5lOworCisJLyoqCisJICogVGhpcyBrZWVwcyB0cmFjayBvZiB0aGUgYWN0aXZlIGNvbnRlbnQgdmlld2VyLCB3aGljaCBtYXkgYmUgZWl0aGVyIG9uZSBvZiB0aGUgdmlld2VycyBpbiB0aGUgcGFnZXMgb3IgdGhlIGNvbnRlbnQgb3V0bGluZSB2aWV3ZXIuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIFZpZXdlciBjdXJyZW50Vmlld2VyOworCisJLyoqCisJICogVGhpcyBsaXN0ZW5zIHRvIHdoaWNoIGV2ZXIgdmlld2VyIGlzIGFjdGl2ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lciBzZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXI7CisKKwkvKioKKwkgKiBUaGlzIGtlZXBzIHRyYWNrIG9mIGFsbCB0aGUge0BsaW5rIG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcn1zIHRoYXQgYXJlIGxpc3RlbmluZyB0byB0aGlzIGVkaXRvci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgQ29sbGVjdGlvbjxJU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyPiBzZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXJzID0gbmV3IEFycmF5TGlzdDxJU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyPigpOworCisJLyoqCisJICogVGhpcyBrZWVwcyB0cmFjayBvZiB0aGUgc2VsZWN0aW9uIG9mIHRoZSBlZGl0b3IgYXMgYSB3aG9sZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgSVNlbGVjdGlvbiBlZGl0b3JTZWxlY3Rpb24gPSBTdHJ1Y3R1cmVkU2VsZWN0aW9uLkVNUFRZOworCisJLyoqCisJICogVGhlIE1hcmtlckhlbHBlciBpcyByZXNwb25zaWJsZSBmb3IgY3JlYXRpbmcgd29ya3NwYWNlIHJlc291cmNlIG1hcmtlcnMgcHJlc2VudGVkCisJICogaW4gRWNsaXBzZSdzIFByb2JsZW1zIFZpZXcuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIE1hcmtlckhlbHBlciBtYXJrZXJIZWxwZXIgPSBuZXcgRWRpdFVJTWFya2VySGVscGVyKCk7CisKKwkvKioKKwkgKiBUaGlzIGxpc3RlbnMgZm9yIHdoZW4gdGhlIG91dGxpbmUgYmVjb21lcyBhY3RpdmUKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgSVBhcnRMaXN0ZW5lciBwYXJ0TGlzdGVuZXIgPQorCQluZXcgSVBhcnRMaXN0ZW5lcigpIHsKKwkJCXB1YmxpYyB2b2lkIHBhcnRBY3RpdmF0ZWQoSVdvcmtiZW5jaFBhcnQgcCkgeworCQkJCWlmIChwIGluc3RhbmNlb2YgQ29udGVudE91dGxpbmUpIHsKKwkJCQkJaWYgKCgoQ29udGVudE91dGxpbmUpcCkuZ2V0Q3VycmVudFBhZ2UoKSA9PSBjb250ZW50T3V0bGluZVBhZ2UpIHsKKwkJCQkJCWdldEFjdGlvbkJhckNvbnRyaWJ1dG9yKCkuc2V0QWN0aXZlRWRpdG9yKENTVkVkaXRvci50aGlzKTsKKworCQkJCQkJc2V0Q3VycmVudFZpZXdlcihjb250ZW50T3V0bGluZVZpZXdlcik7CisJCQkJCX0KKwkJCQl9CisJCQkJZWxzZSBpZiAocCBpbnN0YW5jZW9mIFByb3BlcnR5U2hlZXQpIHsKKwkJCQkJaWYgKCgoUHJvcGVydHlTaGVldClwKS5nZXRDdXJyZW50UGFnZSgpID09IHByb3BlcnR5U2hlZXRQYWdlKSB7CisJCQkJCQlnZXRBY3Rpb25CYXJDb250cmlidXRvcigpLnNldEFjdGl2ZUVkaXRvcihDU1ZFZGl0b3IudGhpcyk7CisJCQkJCQloYW5kbGVBY3RpdmF0ZSgpOworCQkJCQl9CisJCQkJfQorCQkJCWVsc2UgaWYgKHAgPT0gQ1NWRWRpdG9yLnRoaXMpIHsKKwkJCQkJaGFuZGxlQWN0aXZhdGUoKTsKKwkJCQl9CisJCQl9CisJCQlwdWJsaWMgdm9pZCBwYXJ0QnJvdWdodFRvVG9wKElXb3JrYmVuY2hQYXJ0IHApIHsKKwkJCQkvLyBJZ25vcmUuCisJCQl9CisJCQlwdWJsaWMgdm9pZCBwYXJ0Q2xvc2VkKElXb3JrYmVuY2hQYXJ0IHApIHsKKwkJCQkvLyBJZ25vcmUuCisJCQl9CisJCQlwdWJsaWMgdm9pZCBwYXJ0RGVhY3RpdmF0ZWQoSVdvcmtiZW5jaFBhcnQgcCkgeworCQkJCS8vIElnbm9yZS4KKwkJCX0KKwkJCXB1YmxpYyB2b2lkIHBhcnRPcGVuZWQoSVdvcmtiZW5jaFBhcnQgcCkgeworCQkJCS8vIElnbm9yZS4KKwkJCX0KKwkJfTsKKworCS8qKgorCSAqIFJlc291cmNlcyB0aGF0IGhhdmUgYmVlbiByZW1vdmVkIHNpbmNlIGxhc3QgYWN0aXZhdGlvbi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgQ29sbGVjdGlvbjxSZXNvdXJjZT4gcmVtb3ZlZFJlc291cmNlcyA9IG5ldyBBcnJheUxpc3Q8UmVzb3VyY2U+KCk7CisKKwkvKioKKwkgKiBSZXNvdXJjZXMgdGhhdCBoYXZlIGJlZW4gY2hhbmdlZCBzaW5jZSBsYXN0IGFjdGl2YXRpb24uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIENvbGxlY3Rpb248UmVzb3VyY2U+IGNoYW5nZWRSZXNvdXJjZXMgPSBuZXcgQXJyYXlMaXN0PFJlc291cmNlPigpOworCisJLyoqCisJICogUmVzb3VyY2VzIHRoYXQgaGF2ZSBiZWVuIHNhdmVkLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBDb2xsZWN0aW9uPFJlc291cmNlPiBzYXZlZFJlc291cmNlcyA9IG5ldyBBcnJheUxpc3Q8UmVzb3VyY2U+KCk7CisKKwkvKioKKwkgKiBNYXAgdG8gc3RvcmUgdGhlIGRpYWdub3N0aWMgYXNzb2NpYXRlZCB3aXRoIGEgcmVzb3VyY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIE1hcDxSZXNvdXJjZSwgRGlhZ25vc3RpYz4gcmVzb3VyY2VUb0RpYWdub3N0aWNNYXAgPSBuZXcgTGlua2VkSGFzaE1hcDxSZXNvdXJjZSwgRGlhZ25vc3RpYz4oKTsKKworCS8qKgorCSAqIENvbnRyb2xzIHdoZXRoZXIgdGhlIHByb2JsZW0gaW5kaWNhdGlvbiBzaG91bGQgYmUgdXBkYXRlZC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgYm9vbGVhbiB1cGRhdGVQcm9ibGVtSW5kaWNhdGlvbiA9IHRydWU7CisKKwkvKioKKwkgKiBBZGFwdGVyIHVzZWQgdG8gdXBkYXRlIHRoZSBwcm9ibGVtIGluZGljYXRpb24gd2hlbiByZXNvdXJjZXMgYXJlIGRlbWFuZGVkIGxvYWRlZC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgRUNvbnRlbnRBZGFwdGVyIHByb2JsZW1JbmRpY2F0aW9uQWRhcHRlciA9IAorCQluZXcgRUNvbnRlbnRBZGFwdGVyKCkgeworCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgdm9pZCBub3RpZnlDaGFuZ2VkKE5vdGlmaWNhdGlvbiBub3RpZmljYXRpb24pIHsKKwkJCQlpZiAobm90aWZpY2F0aW9uLmdldE5vdGlmaWVyKCkgaW5zdGFuY2VvZiBSZXNvdXJjZSkgeworCQkJCQlzd2l0Y2ggKG5vdGlmaWNhdGlvbi5nZXRGZWF0dXJlSUQoUmVzb3VyY2UuY2xhc3MpKSB7CisJCQkJCQljYXNlIFJlc291cmNlLlJFU09VUkNFX19JU19MT0FERUQ6CisJCQkJCQljYXNlIFJlc291cmNlLlJFU09VUkNFX19FUlJPUlM6CisJCQkJCQljYXNlIFJlc291cmNlLlJFU09VUkNFX19XQVJOSU5HUzogeworCQkJCQkJCVJlc291cmNlIHJlc291cmNlID0gKFJlc291cmNlKW5vdGlmaWNhdGlvbi5nZXROb3RpZmllcigpOworCQkJCQkJCURpYWdub3N0aWMgZGlhZ25vc3RpYyA9IGFuYWx5emVSZXNvdXJjZVByb2JsZW1zKHJlc291cmNlLCBudWxsKTsKKwkJCQkJCQlpZiAoZGlhZ25vc3RpYy5nZXRTZXZlcml0eSgpICE9IERpYWdub3N0aWMuT0spIHsKKwkJCQkJCQkJcmVzb3VyY2VUb0RpYWdub3N0aWNNYXAucHV0KHJlc291cmNlLCBkaWFnbm9zdGljKTsKKwkJCQkJCQl9CisJCQkJCQkJZWxzZSB7CisJCQkJCQkJCXJlc291cmNlVG9EaWFnbm9zdGljTWFwLnJlbW92ZShyZXNvdXJjZSk7CisJCQkJCQkJfQorCisJCQkJCQkJaWYgKHVwZGF0ZVByb2JsZW1JbmRpY2F0aW9uKSB7CisJCQkJCQkJCWdldFNpdGUoKS5nZXRTaGVsbCgpLmdldERpc3BsYXkoKS5hc3luY0V4ZWMKKwkJCQkJCQkJCShuZXcgUnVubmFibGUoKSB7CisJCQkJCQkJCQkJIHB1YmxpYyB2b2lkIHJ1bigpIHsKKwkJCQkJCQkJCQkJIHVwZGF0ZVByb2JsZW1JbmRpY2F0aW9uKCk7CisJCQkJCQkJCQkJIH0KKwkJCQkJCQkJCSB9KTsKKwkJCQkJCQl9CisJCQkJCQkJYnJlYWs7CisJCQkJCQl9CisJCQkJCX0KKwkJCQl9CisJCQkJZWxzZSB7CisJCQkJCXN1cGVyLm5vdGlmeUNoYW5nZWQobm90aWZpY2F0aW9uKTsKKwkJCQl9CisJCQl9CisKKwkJCUBPdmVycmlkZQorCQkJcHJvdGVjdGVkIHZvaWQgc2V0VGFyZ2V0KFJlc291cmNlIHRhcmdldCkgeworCQkJCWJhc2ljU2V0VGFyZ2V0KHRhcmdldCk7CisJCQl9CisKKwkJCUBPdmVycmlkZQorCQkJcHJvdGVjdGVkIHZvaWQgdW5zZXRUYXJnZXQoUmVzb3VyY2UgdGFyZ2V0KSB7CisJCQkJYmFzaWNVbnNldFRhcmdldCh0YXJnZXQpOworCQkJfQorCQl9OworCisJLyoqCisJICogVGhpcyBsaXN0ZW5zIGZvciB3b3Jrc3BhY2UgY2hhbmdlcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgSVJlc291cmNlQ2hhbmdlTGlzdGVuZXIgcmVzb3VyY2VDaGFuZ2VMaXN0ZW5lciA9CisJCW5ldyBJUmVzb3VyY2VDaGFuZ2VMaXN0ZW5lcigpIHsKKwkJCXB1YmxpYyB2b2lkIHJlc291cmNlQ2hhbmdlZChJUmVzb3VyY2VDaGFuZ2VFdmVudCBldmVudCkgeworCQkJCUlSZXNvdXJjZURlbHRhIGRlbHRhID0gZXZlbnQuZ2V0RGVsdGEoKTsKKwkJCQl0cnkgeworCQkJCQljbGFzcyBSZXNvdXJjZURlbHRhVmlzaXRvciBpbXBsZW1lbnRzIElSZXNvdXJjZURlbHRhVmlzaXRvciB7CisJCQkJCQlwcm90ZWN0ZWQgUmVzb3VyY2VTZXQgcmVzb3VyY2VTZXQgPSBlZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCk7CisJCQkJCQlwcm90ZWN0ZWQgQ29sbGVjdGlvbjxSZXNvdXJjZT4gY2hhbmdlZFJlc291cmNlcyA9IG5ldyBBcnJheUxpc3Q8UmVzb3VyY2U+KCk7CisJCQkJCQlwcm90ZWN0ZWQgQ29sbGVjdGlvbjxSZXNvdXJjZT4gcmVtb3ZlZFJlc291cmNlcyA9IG5ldyBBcnJheUxpc3Q8UmVzb3VyY2U+KCk7CisKKwkJCQkJCXB1YmxpYyBib29sZWFuIHZpc2l0KElSZXNvdXJjZURlbHRhIGRlbHRhKSB7CisJCQkJCQkJaWYgKGRlbHRhLmdldFJlc291cmNlKCkuZ2V0VHlwZSgpID09IElSZXNvdXJjZS5GSUxFKSB7CisJCQkJCQkJCWlmIChkZWx0YS5nZXRLaW5kKCkgPT0gSVJlc291cmNlRGVsdGEuUkVNT1ZFRCB8fAorCQkJCQkJCQkgICAgZGVsdGEuZ2V0S2luZCgpID09IElSZXNvdXJjZURlbHRhLkNIQU5HRUQgJiYgZGVsdGEuZ2V0RmxhZ3MoKSAhPSBJUmVzb3VyY2VEZWx0YS5NQVJLRVJTKSB7CisJCQkJCQkJCQlSZXNvdXJjZSByZXNvdXJjZSA9IHJlc291cmNlU2V0LmdldFJlc291cmNlKFVSSS5jcmVhdGVQbGF0Zm9ybVJlc291cmNlVVJJKGRlbHRhLmdldEZ1bGxQYXRoKCkudG9TdHJpbmcoKSwgdHJ1ZSksIGZhbHNlKTsKKwkJCQkJCQkJCWlmIChyZXNvdXJjZSAhPSBudWxsKSB7CisJCQkJCQkJCQkJaWYgKGRlbHRhLmdldEtpbmQoKSA9PSBJUmVzb3VyY2VEZWx0YS5SRU1PVkVEKSB7CisJCQkJCQkJCQkJCXJlbW92ZWRSZXNvdXJjZXMuYWRkKHJlc291cmNlKTsKKwkJCQkJCQkJCQl9CisJCQkJCQkJCQkJZWxzZSBpZiAoIXNhdmVkUmVzb3VyY2VzLnJlbW92ZShyZXNvdXJjZSkpIHsKKwkJCQkJCQkJCQkJY2hhbmdlZFJlc291cmNlcy5hZGQocmVzb3VyY2UpOworCQkJCQkJCQkJCX0KKwkJCQkJCQkJCX0KKwkJCQkJCQkJfQorCQkJCQkJCX0KKworCQkJCQkJCXJldHVybiB0cnVlOworCQkJCQkJfQorCisJCQkJCQlwdWJsaWMgQ29sbGVjdGlvbjxSZXNvdXJjZT4gZ2V0Q2hhbmdlZFJlc291cmNlcygpIHsKKwkJCQkJCQlyZXR1cm4gY2hhbmdlZFJlc291cmNlczsKKwkJCQkJCX0KKworCQkJCQkJcHVibGljIENvbGxlY3Rpb248UmVzb3VyY2U+IGdldFJlbW92ZWRSZXNvdXJjZXMoKSB7CisJCQkJCQkJcmV0dXJuIHJlbW92ZWRSZXNvdXJjZXM7CisJCQkJCQl9CisJCQkJCX0KKworCQkJCQlmaW5hbCBSZXNvdXJjZURlbHRhVmlzaXRvciB2aXNpdG9yID0gbmV3IFJlc291cmNlRGVsdGFWaXNpdG9yKCk7CisJCQkJCWRlbHRhLmFjY2VwdCh2aXNpdG9yKTsKKworCQkJCQlpZiAoIXZpc2l0b3IuZ2V0UmVtb3ZlZFJlc291cmNlcygpLmlzRW1wdHkoKSkgeworCQkJCQkJZ2V0U2l0ZSgpLmdldFNoZWxsKCkuZ2V0RGlzcGxheSgpLmFzeW5jRXhlYworCQkJCQkJCShuZXcgUnVubmFibGUoKSB7CisJCQkJCQkJCSBwdWJsaWMgdm9pZCBydW4oKSB7CisJCQkJCQkJCQkgcmVtb3ZlZFJlc291cmNlcy5hZGRBbGwodmlzaXRvci5nZXRSZW1vdmVkUmVzb3VyY2VzKCkpOworCQkJCQkJCQkJIGlmICghaXNEaXJ0eSgpKSB7CisJCQkJCQkJCQkJIGdldFNpdGUoKS5nZXRQYWdlKCkuY2xvc2VFZGl0b3IoQ1NWRWRpdG9yLnRoaXMsIGZhbHNlKTsKKwkJCQkJCQkJCSB9CisJCQkJCQkJCSB9CisJCQkJCQkJIH0pOworCQkJCQl9CisKKwkJCQkJaWYgKCF2aXNpdG9yLmdldENoYW5nZWRSZXNvdXJjZXMoKS5pc0VtcHR5KCkpIHsKKwkJCQkJCWdldFNpdGUoKS5nZXRTaGVsbCgpLmdldERpc3BsYXkoKS5hc3luY0V4ZWMKKwkJCQkJCQkobmV3IFJ1bm5hYmxlKCkgeworCQkJCQkJCQkgcHVibGljIHZvaWQgcnVuKCkgeworCQkJCQkJCQkJIGNoYW5nZWRSZXNvdXJjZXMuYWRkQWxsKHZpc2l0b3IuZ2V0Q2hhbmdlZFJlc291cmNlcygpKTsKKwkJCQkJCQkJCSBpZiAoZ2V0U2l0ZSgpLmdldFBhZ2UoKS5nZXRBY3RpdmVFZGl0b3IoKSA9PSBDU1ZFZGl0b3IudGhpcykgeworCQkJCQkJCQkJCSBoYW5kbGVBY3RpdmF0ZSgpOworCQkJCQkJCQkJIH0KKwkJCQkJCQkJIH0KKwkJCQkJCQkgfSk7CisJCQkJCX0KKwkJCQl9CisJCQkJY2F0Y2ggKENvcmVFeGNlcHRpb24gZXhjZXB0aW9uKSB7CisJCQkJCUNTVkxvZ2dlckVkaXRQbHVnaW4uSU5TVEFOQ0UubG9nKGV4Y2VwdGlvbik7CisJCQkJfQorCQkJfQorCQl9OworCisJLyoqCisJICogSGFuZGxlcyBhY3RpdmF0aW9uIG9mIHRoZSBlZGl0b3Igb3IgaXQncyBhc3NvY2lhdGVkIHZpZXdzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIGhhbmRsZUFjdGl2YXRlKCkgeworCQkvLyBSZWNvbXB1dGUgdGhlIHJlYWQgb25seSBzdGF0ZS4KKwkJLy8KKwkJaWYgKGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VUb1JlYWRPbmx5TWFwKCkgIT0gbnVsbCkgeworCQkgIGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VUb1JlYWRPbmx5TWFwKCkuY2xlYXIoKTsKKworCQkgIC8vIFJlZnJlc2ggYW55IGFjdGlvbnMgdGhhdCBtYXkgYmVjb21lIGVuYWJsZWQgb3IgZGlzYWJsZWQuCisJCSAgLy8KKwkJICBzZXRTZWxlY3Rpb24oZ2V0U2VsZWN0aW9uKCkpOworCQl9CisKKwkJaWYgKCFyZW1vdmVkUmVzb3VyY2VzLmlzRW1wdHkoKSkgeworCQkJaWYgKGhhbmRsZURpcnR5Q29uZmxpY3QoKSkgeworCQkJCWdldFNpdGUoKS5nZXRQYWdlKCkuY2xvc2VFZGl0b3IoQ1NWRWRpdG9yLnRoaXMsIGZhbHNlKTsKKwkJCX0KKwkJCWVsc2UgeworCQkJCXJlbW92ZWRSZXNvdXJjZXMuY2xlYXIoKTsKKwkJCQljaGFuZ2VkUmVzb3VyY2VzLmNsZWFyKCk7CisJCQkJc2F2ZWRSZXNvdXJjZXMuY2xlYXIoKTsKKwkJCX0KKwkJfQorCQllbHNlIGlmICghY2hhbmdlZFJlc291cmNlcy5pc0VtcHR5KCkpIHsKKwkJCWNoYW5nZWRSZXNvdXJjZXMucmVtb3ZlQWxsKHNhdmVkUmVzb3VyY2VzKTsKKwkJCWhhbmRsZUNoYW5nZWRSZXNvdXJjZXMoKTsKKwkJCWNoYW5nZWRSZXNvdXJjZXMuY2xlYXIoKTsKKwkJCXNhdmVkUmVzb3VyY2VzLmNsZWFyKCk7CisJCX0KKwl9CisKKwkvKioKKwkgKiBIYW5kbGVzIHdoYXQgdG8gZG8gd2l0aCBjaGFuZ2VkIHJlc291cmNlcyBvbiBhY3RpdmF0aW9uLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIGhhbmRsZUNoYW5nZWRSZXNvdXJjZXMoKSB7CisJCWlmICghY2hhbmdlZFJlc291cmNlcy5pc0VtcHR5KCkgJiYgKCFpc0RpcnR5KCkgfHwgaGFuZGxlRGlydHlDb25mbGljdCgpKSkgeworCQkJaWYgKGlzRGlydHkoKSkgeworCQkJCWNoYW5nZWRSZXNvdXJjZXMuYWRkQWxsKGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKS5nZXRSZXNvdXJjZXMoKSk7CisJCQl9CisJCQllZGl0aW5nRG9tYWluLmdldENvbW1hbmRTdGFjaygpLmZsdXNoKCk7CisKKwkJCXVwZGF0ZVByb2JsZW1JbmRpY2F0aW9uID0gZmFsc2U7CisJCQlmb3IgKFJlc291cmNlIHJlc291cmNlIDogY2hhbmdlZFJlc291cmNlcykgeworCQkJCWlmIChyZXNvdXJjZS5pc0xvYWRlZCgpKSB7CisJCQkJCXJlc291cmNlLnVubG9hZCgpOworCQkJCQl0cnkgeworCQkJCQkJcmVzb3VyY2UubG9hZChDb2xsZWN0aW9ucy5FTVBUWV9NQVApOworCQkJCQl9CisJCQkJCWNhdGNoIChJT0V4Y2VwdGlvbiBleGNlcHRpb24pIHsKKwkJCQkJCWlmICghcmVzb3VyY2VUb0RpYWdub3N0aWNNYXAuY29udGFpbnNLZXkocmVzb3VyY2UpKSB7CisJCQkJCQkJcmVzb3VyY2VUb0RpYWdub3N0aWNNYXAucHV0KHJlc291cmNlLCBhbmFseXplUmVzb3VyY2VQcm9ibGVtcyhyZXNvdXJjZSwgZXhjZXB0aW9uKSk7CisJCQkJCQl9CisJCQkJCX0KKwkJCQl9CisJCQl9CisKKwkJCWlmIChBZGFwdGVyRmFjdG9yeUVkaXRpbmdEb21haW4uaXNTdGFsZShlZGl0b3JTZWxlY3Rpb24pKSB7CisJCQkJc2V0U2VsZWN0aW9uKFN0cnVjdHVyZWRTZWxlY3Rpb24uRU1QVFkpOworCQkJfQorCisJCQl1cGRhdGVQcm9ibGVtSW5kaWNhdGlvbiA9IHRydWU7CisJCQl1cGRhdGVQcm9ibGVtSW5kaWNhdGlvbigpOworCQl9CisJfQorICAKKwkvKioKKwkgKiBVcGRhdGVzIHRoZSBwcm9ibGVtcyBpbmRpY2F0aW9uIHdpdGggdGhlIGluZm9ybWF0aW9uIGRlc2NyaWJlZCBpbiB0aGUgc3BlY2lmaWVkIGRpYWdub3N0aWMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgdXBkYXRlUHJvYmxlbUluZGljYXRpb24oKSB7CisJCWlmICh1cGRhdGVQcm9ibGVtSW5kaWNhdGlvbikgeworCQkJQmFzaWNEaWFnbm9zdGljIGRpYWdub3N0aWMgPQorCQkJCW5ldyBCYXNpY0RpYWdub3N0aWMKKwkJCQkJKERpYWdub3N0aWMuT0ssCisJCQkJCSAib3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzLmNzdiIsCisJCQkJCSAwLAorCQkJCQkgbnVsbCwKKwkJCQkJIG5ldyBPYmplY3QgW10geyBlZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkgfSk7CisJCQlmb3IgKERpYWdub3N0aWMgY2hpbGREaWFnbm9zdGljIDogcmVzb3VyY2VUb0RpYWdub3N0aWNNYXAudmFsdWVzKCkpIHsKKwkJCQlpZiAoY2hpbGREaWFnbm9zdGljLmdldFNldmVyaXR5KCkgIT0gRGlhZ25vc3RpYy5PSykgeworCQkJCQlkaWFnbm9zdGljLmFkZChjaGlsZERpYWdub3N0aWMpOworCQkJCX0KKwkJCX0KKworCQkJaW50IGxhc3RFZGl0b3JQYWdlID0gZ2V0UGFnZUNvdW50KCkgLSAxOworCQkJaWYgKGxhc3RFZGl0b3JQYWdlID49IDAgJiYgZ2V0RWRpdG9yKGxhc3RFZGl0b3JQYWdlKSBpbnN0YW5jZW9mIFByb2JsZW1FZGl0b3JQYXJ0KSB7CisJCQkJKChQcm9ibGVtRWRpdG9yUGFydClnZXRFZGl0b3IobGFzdEVkaXRvclBhZ2UpKS5zZXREaWFnbm9zdGljKGRpYWdub3N0aWMpOworCQkJCWlmIChkaWFnbm9zdGljLmdldFNldmVyaXR5KCkgIT0gRGlhZ25vc3RpYy5PSykgeworCQkJCQlzZXRBY3RpdmVQYWdlKGxhc3RFZGl0b3JQYWdlKTsKKwkJCQl9CisJCQl9CisJCQllbHNlIGlmIChkaWFnbm9zdGljLmdldFNldmVyaXR5KCkgIT0gRGlhZ25vc3RpYy5PSykgeworCQkJCVByb2JsZW1FZGl0b3JQYXJ0IHByb2JsZW1FZGl0b3JQYXJ0ID0gbmV3IFByb2JsZW1FZGl0b3JQYXJ0KCk7CisJCQkJcHJvYmxlbUVkaXRvclBhcnQuc2V0RGlhZ25vc3RpYyhkaWFnbm9zdGljKTsKKwkJCQlwcm9ibGVtRWRpdG9yUGFydC5zZXRNYXJrZXJIZWxwZXIobWFya2VySGVscGVyKTsKKwkJCQl0cnkgeworCQkJCQlhZGRQYWdlKCsrbGFzdEVkaXRvclBhZ2UsIHByb2JsZW1FZGl0b3JQYXJ0LCBnZXRFZGl0b3JJbnB1dCgpKTsKKwkJCQkJc2V0UGFnZVRleHQobGFzdEVkaXRvclBhZ2UsIHByb2JsZW1FZGl0b3JQYXJ0LmdldFBhcnROYW1lKCkpOworCQkJCQlzZXRBY3RpdmVQYWdlKGxhc3RFZGl0b3JQYWdlKTsKKwkJCQkJc2hvd1RhYnMoKTsKKwkJCQl9CisJCQkJY2F0Y2ggKFBhcnRJbml0RXhjZXB0aW9uIGV4Y2VwdGlvbikgeworCQkJCQlDU1ZMb2dnZXJFZGl0UGx1Z2luLklOU1RBTkNFLmxvZyhleGNlcHRpb24pOworCQkJCX0KKwkJCX0KKworCQkJaWYgKG1hcmtlckhlbHBlci5oYXNNYXJrZXJzKGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKSkpIHsKKwkJCQltYXJrZXJIZWxwZXIuZGVsZXRlTWFya2VycyhlZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkpOworCQkJCWlmIChkaWFnbm9zdGljLmdldFNldmVyaXR5KCkgIT0gRGlhZ25vc3RpYy5PSykgeworCQkJCQl0cnkgeworCQkJCQkJbWFya2VySGVscGVyLmNyZWF0ZU1hcmtlcnMoZGlhZ25vc3RpYyk7CisJCQkJCX0KKwkJCQkJY2F0Y2ggKENvcmVFeGNlcHRpb24gZXhjZXB0aW9uKSB7CisJCQkJCQlDU1ZMb2dnZXJFZGl0UGx1Z2luLklOU1RBTkNFLmxvZyhleGNlcHRpb24pOworCQkJCQl9CisJCQkJfQorCQkJfQorCQl9CisJfQorCisJLyoqCisJICogU2hvd3MgYSBkaWFsb2cgdGhhdCBhc2tzIGlmIGNvbmZsaWN0aW5nIGNoYW5nZXMgc2hvdWxkIGJlIGRpc2NhcmRlZC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgYm9vbGVhbiBoYW5kbGVEaXJ0eUNvbmZsaWN0KCkgeworCQlyZXR1cm4KKwkJCU1lc3NhZ2VEaWFsb2cub3BlblF1ZXN0aW9uCisJCQkJKGdldFNpdGUoKS5nZXRTaGVsbCgpLAorCQkJCSBnZXRTdHJpbmcoIl9VSV9GaWxlQ29uZmxpY3RfbGFiZWwiKSwKKwkJCQkgZ2V0U3RyaW5nKCJfV0FSTl9GaWxlQ29uZmxpY3QiKSk7CisJfQorCisJLyoqCisJICogVGhpcyBjcmVhdGVzIGEgbW9kZWwgZWRpdG9yLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBDU1ZFZGl0b3IoKSB7CisJCXN1cGVyKCk7CisJCWluaXRpYWxpemVFZGl0aW5nRG9tYWluKCk7CisJfQorCisJLyoqCisJICogVGhpcyBzZXRzIHVwIHRoZSBlZGl0aW5nIGRvbWFpbiBmb3IgdGhlIG1vZGVsIGVkaXRvci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBpbml0aWFsaXplRWRpdGluZ0RvbWFpbigpIHsKKwkJLy8gQ3JlYXRlIGFuIGFkYXB0ZXIgZmFjdG9yeSB0aGF0IHlpZWxkcyBpdGVtIHByb3ZpZGVycy4KKwkJLy8KKwkJYWRhcHRlckZhY3RvcnkgPSBuZXcgQ29tcG9zZWRBZGFwdGVyRmFjdG9yeShDb21wb3NlZEFkYXB0ZXJGYWN0b3J5LkRlc2NyaXB0b3IuUmVnaXN0cnkuSU5TVEFOQ0UpOworCisJCWFkYXB0ZXJGYWN0b3J5LmFkZEFkYXB0ZXJGYWN0b3J5KG5ldyBSZXNvdXJjZUl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5KCkpOworCQlhZGFwdGVyRmFjdG9yeS5hZGRBZGFwdGVyRmFjdG9yeShuZXcgQ1NWSXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkoKSk7CisJCWFkYXB0ZXJGYWN0b3J5LmFkZEFkYXB0ZXJGYWN0b3J5KG5ldyBDb21tb25JdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSgpKTsKKwkJYWRhcHRlckZhY3RvcnkuYWRkQWRhcHRlckZhY3RvcnkobmV3IEdyYXBoSXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkoKSk7CisJCWFkYXB0ZXJGYWN0b3J5LmFkZEFkYXB0ZXJGYWN0b3J5KG5ldyBNb2RlbEl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5KCkpOworCQlhZGFwdGVyRmFjdG9yeS5hZGRBZGFwdGVyRmFjdG9yeShuZXcgTW9kaWZpZXJJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSgpKTsKKwkJYWRhcHRlckZhY3RvcnkuYWRkQWRhcHRlckZhY3RvcnkobmV3IFNjZW5hcmlvSXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkoKSk7CisJCWFkYXB0ZXJGYWN0b3J5LmFkZEFkYXB0ZXJGYWN0b3J5KG5ldyBTZXF1ZW5jZXJJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSgpKTsKKwkJYWRhcHRlckZhY3RvcnkuYWRkQWRhcHRlckZhY3RvcnkobmV3IFNvbHZlckl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5KCkpOworCQlhZGFwdGVyRmFjdG9yeS5hZGRBZGFwdGVyRmFjdG9yeShuZXcgTG9nZ2VySXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkoKSk7CisJCWFkYXB0ZXJGYWN0b3J5LmFkZEFkYXB0ZXJGYWN0b3J5KG5ldyBFY29yZUl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5KCkpOworCQlhZGFwdGVyRmFjdG9yeS5hZGRBZGFwdGVyRmFjdG9yeShuZXcgU2ltdWxhdGlvbkxvZ2dlckl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5KCkpOworCQlhZGFwdGVyRmFjdG9yeS5hZGRBZGFwdGVyRmFjdG9yeShuZXcgUmVmbGVjdGl2ZUl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5KCkpOworCisJCS8vIENyZWF0ZSB0aGUgY29tbWFuZCBzdGFjayB0aGF0IHdpbGwgbm90aWZ5IHRoaXMgZWRpdG9yIGFzIGNvbW1hbmRzIGFyZSBleGVjdXRlZC4KKwkJLy8KKwkJQmFzaWNDb21tYW5kU3RhY2sgY29tbWFuZFN0YWNrID0gbmV3IEJhc2ljQ29tbWFuZFN0YWNrKCk7CisKKwkJLy8gQWRkIGEgbGlzdGVuZXIgdG8gc2V0IHRoZSBtb3N0IHJlY2VudCBjb21tYW5kJ3MgYWZmZWN0ZWQgb2JqZWN0cyB0byBiZSB0aGUgc2VsZWN0aW9uIG9mIHRoZSB2aWV3ZXIgd2l0aCBmb2N1cy4KKwkJLy8KKwkJY29tbWFuZFN0YWNrLmFkZENvbW1hbmRTdGFja0xpc3RlbmVyCisJCQkobmV3IENvbW1hbmRTdGFja0xpc3RlbmVyKCkgeworCQkJCSBwdWJsaWMgdm9pZCBjb21tYW5kU3RhY2tDaGFuZ2VkKGZpbmFsIEV2ZW50T2JqZWN0IGV2ZW50KSB7CisJCQkJCSBnZXRDb250YWluZXIoKS5nZXREaXNwbGF5KCkuYXN5bmNFeGVjCisJCQkJCQkgKG5ldyBSdW5uYWJsZSgpIHsKKwkJCQkJCQkgIHB1YmxpYyB2b2lkIHJ1bigpIHsKKwkJCQkJCQkJICBmaXJlUHJvcGVydHlDaGFuZ2UoSUVkaXRvclBhcnQuUFJPUF9ESVJUWSk7CisKKwkJCQkJCQkJICAvLyBUcnkgdG8gc2VsZWN0IHRoZSBhZmZlY3RlZCBvYmplY3RzLgorCQkJCQkJCQkgIC8vCisJCQkJCQkJCSAgQ29tbWFuZCBtb3N0UmVjZW50Q29tbWFuZCA9ICgoQ29tbWFuZFN0YWNrKWV2ZW50LmdldFNvdXJjZSgpKS5nZXRNb3N0UmVjZW50Q29tbWFuZCgpOworCQkJCQkJCQkgIGlmIChtb3N0UmVjZW50Q29tbWFuZCAhPSBudWxsKSB7CisJCQkJCQkJCQkgIHNldFNlbGVjdGlvblRvVmlld2VyKG1vc3RSZWNlbnRDb21tYW5kLmdldEFmZmVjdGVkT2JqZWN0cygpKTsKKwkJCQkJCQkJICB9CisJCQkJCQkJCSAgaWYgKHByb3BlcnR5U2hlZXRQYWdlICE9IG51bGwgJiYgIXByb3BlcnR5U2hlZXRQYWdlLmdldENvbnRyb2woKS5pc0Rpc3Bvc2VkKCkpIHsKKwkJCQkJCQkJCSAgcHJvcGVydHlTaGVldFBhZ2UucmVmcmVzaCgpOworCQkJCQkJCQkgIH0KKwkJCQkJCQkgIH0KKwkJCQkJCSAgfSk7CisJCQkJIH0KKwkJCSB9KTsKKworCQkvLyBDcmVhdGUgdGhlIGVkaXRpbmcgZG9tYWluIHdpdGggYSBzcGVjaWFsIGNvbW1hbmQgc3RhY2suCisJCS8vCisJCWVkaXRpbmdEb21haW4gPSBuZXcgQWRhcHRlckZhY3RvcnlFZGl0aW5nRG9tYWluKGFkYXB0ZXJGYWN0b3J5LCBjb21tYW5kU3RhY2ssIG5ldyBIYXNoTWFwPFJlc291cmNlLCBCb29sZWFuPigpKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGlzIGhlcmUgZm9yIHRoZSBsaXN0ZW5lciB0byBiZSBhYmxlIHRvIGNhbGwgaXQuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJCQlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgdm9pZCBmaXJlUHJvcGVydHlDaGFuZ2UoaW50IGFjdGlvbikgeworCQlzdXBlci5maXJlUHJvcGVydHlDaGFuZ2UoYWN0aW9uKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHNldHMgdGhlIHNlbGVjdGlvbiBpbnRvIHdoaWNoZXZlciB2aWV3ZXIgaXMgYWN0aXZlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIHNldFNlbGVjdGlvblRvVmlld2VyKENvbGxlY3Rpb248Pz4gY29sbGVjdGlvbikgeworCQlmaW5hbCBDb2xsZWN0aW9uPD8+IHRoZVNlbGVjdGlvbiA9IGNvbGxlY3Rpb247CisJCS8vIE1ha2Ugc3VyZSBpdCdzIG9rYXkuCisJCS8vCisJCWlmICh0aGVTZWxlY3Rpb24gIT0gbnVsbCAmJiAhdGhlU2VsZWN0aW9uLmlzRW1wdHkoKSkgeworCQkJUnVubmFibGUgcnVubmFibGUgPQorCQkJCW5ldyBSdW5uYWJsZSgpIHsKKwkJCQkJcHVibGljIHZvaWQgcnVuKCkgeworCQkJCQkJLy8gVHJ5IHRvIHNlbGVjdCB0aGUgaXRlbXMgaW4gdGhlIGN1cnJlbnQgY29udGVudCB2aWV3ZXIgb2YgdGhlIGVkaXRvci4KKwkJCQkJCS8vCisJCQkJCQlpZiAoY3VycmVudFZpZXdlciAhPSBudWxsKSB7CisJCQkJCQkJY3VycmVudFZpZXdlci5zZXRTZWxlY3Rpb24obmV3IFN0cnVjdHVyZWRTZWxlY3Rpb24odGhlU2VsZWN0aW9uLnRvQXJyYXkoKSksIHRydWUpOworCQkJCQkJfQorCQkJCQl9CisJCQkJfTsKKwkJCWdldFNpdGUoKS5nZXRTaGVsbCgpLmdldERpc3BsYXkoKS5hc3luY0V4ZWMocnVubmFibGUpOworCQl9CisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIHRoZSBlZGl0aW5nIGRvbWFpbiBhcyByZXF1aXJlZCBieSB0aGUge0BsaW5rIElFZGl0aW5nRG9tYWluUHJvdmlkZXJ9IGludGVyZmFjZS4KKwkgKiBUaGlzIGlzIGltcG9ydGFudCBmb3IgaW1wbGVtZW50aW5nIHRoZSBzdGF0aWMgbWV0aG9kcyBvZiB7QGxpbmsgQWRhcHRlckZhY3RvcnlFZGl0aW5nRG9tYWlufQorCSAqIGFuZCBmb3Igc3VwcG9ydGluZyB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkuYWN0aW9uLkNvbW1hbmRBY3Rpb259LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFZGl0aW5nRG9tYWluIGdldEVkaXRpbmdEb21haW4oKSB7CisJCXJldHVybiBlZGl0aW5nRG9tYWluOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBjbGFzcyBSZXZlcnNlQWRhcHRlckZhY3RvcnlDb250ZW50UHJvdmlkZXIgZXh0ZW5kcyBBZGFwdGVyRmFjdG9yeUNvbnRlbnRQcm92aWRlciB7CisJCS8qKgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJcHVibGljIFJldmVyc2VBZGFwdGVyRmFjdG9yeUNvbnRlbnRQcm92aWRlcihBZGFwdGVyRmFjdG9yeSBhZGFwdGVyRmFjdG9yeSkgeworCQkJc3VwZXIoYWRhcHRlckZhY3RvcnkpOworCQl9CisKKwkJLyoqCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlAT3ZlcnJpZGUKKwkJcHVibGljIE9iamVjdCBbXSBnZXRFbGVtZW50cyhPYmplY3Qgb2JqZWN0KSB7CisJCQlPYmplY3QgcGFyZW50ID0gc3VwZXIuZ2V0UGFyZW50KG9iamVjdCk7CisJCQlyZXR1cm4gKHBhcmVudCA9PSBudWxsID8gQ29sbGVjdGlvbnMuRU1QVFlfU0VUIDogQ29sbGVjdGlvbnMuc2luZ2xldG9uKHBhcmVudCkpLnRvQXJyYXkoKTsKKwkJfQorCisJCS8qKgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJQE92ZXJyaWRlCisJCXB1YmxpYyBPYmplY3QgW10gZ2V0Q2hpbGRyZW4oT2JqZWN0IG9iamVjdCkgeworCQkJT2JqZWN0IHBhcmVudCA9IHN1cGVyLmdldFBhcmVudChvYmplY3QpOworCQkJcmV0dXJuIChwYXJlbnQgPT0gbnVsbCA/IENvbGxlY3Rpb25zLkVNUFRZX1NFVCA6IENvbGxlY3Rpb25zLnNpbmdsZXRvbihwYXJlbnQpKS50b0FycmF5KCk7CisJCX0KKworCQkvKioKKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUBPdmVycmlkZQorCQlwdWJsaWMgYm9vbGVhbiBoYXNDaGlsZHJlbihPYmplY3Qgb2JqZWN0KSB7CisJCQlPYmplY3QgcGFyZW50ID0gc3VwZXIuZ2V0UGFyZW50KG9iamVjdCk7CisJCQlyZXR1cm4gcGFyZW50ICE9IG51bGw7CisJCX0KKworCQkvKioKKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUBPdmVycmlkZQorCQlwdWJsaWMgT2JqZWN0IGdldFBhcmVudChPYmplY3Qgb2JqZWN0KSB7CisJCQlyZXR1cm4gbnVsbDsKKwkJfQorCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIHNldEN1cnJlbnRWaWV3ZXJQYW5lKFZpZXdlclBhbmUgdmlld2VyUGFuZSkgeworCQlpZiAoY3VycmVudFZpZXdlclBhbmUgIT0gdmlld2VyUGFuZSkgeworCQkJaWYgKGN1cnJlbnRWaWV3ZXJQYW5lICE9IG51bGwpIHsKKwkJCQljdXJyZW50Vmlld2VyUGFuZS5zaG93Rm9jdXMoZmFsc2UpOworCQkJfQorCQkJY3VycmVudFZpZXdlclBhbmUgPSB2aWV3ZXJQYW5lOworCQl9CisJCXNldEN1cnJlbnRWaWV3ZXIoY3VycmVudFZpZXdlclBhbmUuZ2V0Vmlld2VyKCkpOworCX0KKworCS8qKgorCSAqIFRoaXMgbWFrZXMgc3VyZSB0aGF0IG9uZSBjb250ZW50IHZpZXdlciwgZWl0aGVyIGZvciB0aGUgY3VycmVudCBwYWdlIG9yIHRoZSBvdXRsaW5lIHZpZXcsIGlmIGl0IGhhcyBmb2N1cywKKwkgKiBpcyB0aGUgY3VycmVudCBvbmUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgc2V0Q3VycmVudFZpZXdlcihWaWV3ZXIgdmlld2VyKSB7CisJCS8vIElmIGl0IGlzIGNoYW5naW5nLi4uCisJCS8vCisJCWlmIChjdXJyZW50Vmlld2VyICE9IHZpZXdlcikgeworCQkJaWYgKHNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lciA9PSBudWxsKSB7CisJCQkJLy8gQ3JlYXRlIHRoZSBsaXN0ZW5lciBvbiBkZW1hbmQuCisJCQkJLy8KKwkJCQlzZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIgPQorCQkJCQluZXcgSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcigpIHsKKwkJCQkJCS8vIFRoaXMganVzdCBub3RpZmllcyB0aG9zZSB0aGluZ3MgdGhhdCBhcmUgYWZmZWN0ZWQgYnkgdGhlIHNlY3Rpb24uCisJCQkJCQkvLworCQkJCQkJcHVibGljIHZvaWQgc2VsZWN0aW9uQ2hhbmdlZChTZWxlY3Rpb25DaGFuZ2VkRXZlbnQgc2VsZWN0aW9uQ2hhbmdlZEV2ZW50KSB7CisJCQkJCQkJc2V0U2VsZWN0aW9uKHNlbGVjdGlvbkNoYW5nZWRFdmVudC5nZXRTZWxlY3Rpb24oKSk7CisJCQkJCQl9CisJCQkJCX07CisJCQl9CisKKwkJCS8vIFN0b3AgbGlzdGVuaW5nIHRvIHRoZSBvbGQgb25lLgorCQkJLy8KKwkJCWlmIChjdXJyZW50Vmlld2VyICE9IG51bGwpIHsKKwkJCQljdXJyZW50Vmlld2VyLnJlbW92ZVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcihzZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIpOworCQkJfQorCisJCQkvLyBTdGFydCBsaXN0ZW5pbmcgdG8gdGhlIG5ldyBvbmUuCisJCQkvLworCQkJaWYgKHZpZXdlciAhPSBudWxsKSB7CisJCQkJdmlld2VyLmFkZFNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcihzZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIpOworCQkJfQorCisJCQkvLyBSZW1lbWJlciBpdC4KKwkJCS8vCisJCQljdXJyZW50Vmlld2VyID0gdmlld2VyOworCisJCQkvLyBTZXQgdGhlIGVkaXRvcnMgc2VsZWN0aW9uIGJhc2VkIG9uIHRoZSBjdXJyZW50IHZpZXdlcidzIHNlbGVjdGlvbi4KKwkJCS8vCisJCQlzZXRTZWxlY3Rpb24oY3VycmVudFZpZXdlciA9PSBudWxsID8gU3RydWN0dXJlZFNlbGVjdGlvbi5FTVBUWSA6IGN1cnJlbnRWaWV3ZXIuZ2V0U2VsZWN0aW9uKCkpOworCQl9CisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIHRoZSB2aWV3ZXIgYXMgcmVxdWlyZWQgYnkgdGhlIHtAbGluayBJVmlld2VyUHJvdmlkZXJ9IGludGVyZmFjZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVmlld2VyIGdldFZpZXdlcigpIHsKKwkJcmV0dXJuIGN1cnJlbnRWaWV3ZXI7CisJfQorCisJLyoqCisJICogVGhpcyBjcmVhdGVzIGEgY29udGV4dCBtZW51IGZvciB0aGUgdmlld2VyIGFuZCBhZGRzIGEgbGlzdGVuZXIgYXMgd2VsbCByZWdpc3RlcmluZyB0aGUgbWVudSBmb3IgZXh0ZW5zaW9uLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIGNyZWF0ZUNvbnRleHRNZW51Rm9yKFN0cnVjdHVyZWRWaWV3ZXIgdmlld2VyKSB7CisJCU1lbnVNYW5hZ2VyIGNvbnRleHRNZW51ID0gbmV3IE1lbnVNYW5hZ2VyKCIjUG9wVXAiKTsKKwkJY29udGV4dE1lbnUuYWRkKG5ldyBTZXBhcmF0b3IoImFkZGl0aW9ucyIpKTsKKwkJY29udGV4dE1lbnUuc2V0UmVtb3ZlQWxsV2hlblNob3duKHRydWUpOworCQljb250ZXh0TWVudS5hZGRNZW51TGlzdGVuZXIodGhpcyk7CisJCU1lbnUgbWVudT0gY29udGV4dE1lbnUuY3JlYXRlQ29udGV4dE1lbnUodmlld2VyLmdldENvbnRyb2woKSk7CisJCXZpZXdlci5nZXRDb250cm9sKCkuc2V0TWVudShtZW51KTsKKwkJZ2V0U2l0ZSgpLnJlZ2lzdGVyQ29udGV4dE1lbnUoY29udGV4dE1lbnUsIG5ldyBVbndyYXBwaW5nU2VsZWN0aW9uUHJvdmlkZXIodmlld2VyKSk7CisKKwkJaW50IGRuZE9wZXJhdGlvbnMgPSBETkQuRFJPUF9DT1BZIHwgRE5ELkRST1BfTU9WRSB8IERORC5EUk9QX0xJTks7CisJCVRyYW5zZmVyW10gdHJhbnNmZXJzID0gbmV3IFRyYW5zZmVyW10geyBMb2NhbFRyYW5zZmVyLmdldEluc3RhbmNlKCkgfTsKKwkJdmlld2VyLmFkZERyYWdTdXBwb3J0KGRuZE9wZXJhdGlvbnMsIHRyYW5zZmVycywgbmV3IFZpZXdlckRyYWdBZGFwdGVyKHZpZXdlcikpOworCQl2aWV3ZXIuYWRkRHJvcFN1cHBvcnQoZG5kT3BlcmF0aW9ucywgdHJhbnNmZXJzLCBuZXcgRWRpdGluZ0RvbWFpblZpZXdlckRyb3BBZGFwdGVyKGVkaXRpbmdEb21haW4sIHZpZXdlcikpOworCX0KKworCS8qKgorCSAqIFRoaXMgaXMgdGhlIG1ldGhvZCBjYWxsZWQgdG8gbG9hZCBhIHJlc291cmNlIGludG8gdGhlIGVkaXRpbmcgZG9tYWluJ3MgcmVzb3VyY2Ugc2V0IGJhc2VkIG9uIHRoZSBlZGl0b3IncyBpbnB1dC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBjcmVhdGVNb2RlbCgpIHsKKwkJVVJJIHJlc291cmNlVVJJID0gRWRpdFVJVXRpbC5nZXRVUkkoZ2V0RWRpdG9ySW5wdXQoKSk7CisJCUV4Y2VwdGlvbiBleGNlcHRpb24gPSBudWxsOworCQlSZXNvdXJjZSByZXNvdXJjZSA9IG51bGw7CisJCXRyeSB7CisJCQkvLyBMb2FkIHRoZSByZXNvdXJjZSB0aHJvdWdoIHRoZSBlZGl0aW5nIGRvbWFpbi4KKwkJCS8vCisJCQlyZXNvdXJjZSA9IGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKS5nZXRSZXNvdXJjZShyZXNvdXJjZVVSSSwgdHJ1ZSk7CisJCX0KKwkJY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CisJCQlleGNlcHRpb24gPSBlOworCQkJcmVzb3VyY2UgPSBlZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkuZ2V0UmVzb3VyY2UocmVzb3VyY2VVUkksIGZhbHNlKTsKKwkJfQorCisJCURpYWdub3N0aWMgZGlhZ25vc3RpYyA9IGFuYWx5emVSZXNvdXJjZVByb2JsZW1zKHJlc291cmNlLCBleGNlcHRpb24pOworCQlpZiAoZGlhZ25vc3RpYy5nZXRTZXZlcml0eSgpICE9IERpYWdub3N0aWMuT0spIHsKKwkJCXJlc291cmNlVG9EaWFnbm9zdGljTWFwLnB1dChyZXNvdXJjZSwgIGFuYWx5emVSZXNvdXJjZVByb2JsZW1zKHJlc291cmNlLCBleGNlcHRpb24pKTsKKwkJfQorCQllZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkuZUFkYXB0ZXJzKCkuYWRkKHByb2JsZW1JbmRpY2F0aW9uQWRhcHRlcik7CisJfQorCisJLyoqCisJICogUmV0dXJucyBhIGRpYWdub3N0aWMgZGVzY3JpYmluZyB0aGUgZXJyb3JzIGFuZCB3YXJuaW5ncyBsaXN0ZWQgaW4gdGhlIHJlc291cmNlCisJICogYW5kIHRoZSBzcGVjaWZpZWQgZXhjZXB0aW9uIChpZiBhbnkpLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBEaWFnbm9zdGljIGFuYWx5emVSZXNvdXJjZVByb2JsZW1zKFJlc291cmNlIHJlc291cmNlLCBFeGNlcHRpb24gZXhjZXB0aW9uKSB7CisJCWlmICghcmVzb3VyY2UuZ2V0RXJyb3JzKCkuaXNFbXB0eSgpIHx8ICFyZXNvdXJjZS5nZXRXYXJuaW5ncygpLmlzRW1wdHkoKSkgeworCQkJQmFzaWNEaWFnbm9zdGljIGJhc2ljRGlhZ25vc3RpYyA9CisJCQkJbmV3IEJhc2ljRGlhZ25vc3RpYworCQkJCQkoRGlhZ25vc3RpYy5FUlJPUiwKKwkJCQkJICJvcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMuY3N2IiwKKwkJCQkJIDAsCisJCQkJCSBnZXRTdHJpbmcoIl9VSV9DcmVhdGVNb2RlbEVycm9yX21lc3NhZ2UiLCByZXNvdXJjZS5nZXRVUkkoKSksCisJCQkJCSBuZXcgT2JqZWN0IFtdIHsgZXhjZXB0aW9uID09IG51bGwgPyAoT2JqZWN0KXJlc291cmNlIDogZXhjZXB0aW9uIH0pOworCQkJYmFzaWNEaWFnbm9zdGljLm1lcmdlKEVjb3JlVXRpbC5jb21wdXRlRGlhZ25vc3RpYyhyZXNvdXJjZSwgdHJ1ZSkpOworCQkJcmV0dXJuIGJhc2ljRGlhZ25vc3RpYzsKKwkJfQorCQllbHNlIGlmIChleGNlcHRpb24gIT0gbnVsbCkgeworCQkJcmV0dXJuCisJCQkJbmV3IEJhc2ljRGlhZ25vc3RpYworCQkJCQkoRGlhZ25vc3RpYy5FUlJPUiwKKwkJCQkJICJvcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMuY3N2IiwKKwkJCQkJIDAsCisJCQkJCSBnZXRTdHJpbmcoIl9VSV9DcmVhdGVNb2RlbEVycm9yX21lc3NhZ2UiLCByZXNvdXJjZS5nZXRVUkkoKSksCisJCQkJCSBuZXcgT2JqZWN0W10geyBleGNlcHRpb24gfSk7CisJCX0KKwkJZWxzZSB7CisJCQlyZXR1cm4gRGlhZ25vc3RpYy5PS19JTlNUQU5DRTsKKwkJfQorCX0KKworCS8qKgorCSAqIFRoaXMgaXMgdGhlIG1ldGhvZCB1c2VkIGJ5IHRoZSBmcmFtZXdvcmsgdG8gaW5zdGFsbCB5b3VyIG93biBjb250cm9scy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBjcmVhdGVQYWdlcygpIHsKKwkJLy8gQ3JlYXRlcyB0aGUgbW9kZWwgZnJvbSB0aGUgZWRpdG9yIGlucHV0CisJCS8vCisJCWNyZWF0ZU1vZGVsKCk7CisKKwkJLy8gT25seSBjcmVhdGVzIHRoZSBvdGhlciBwYWdlcyBpZiB0aGVyZSBpcyBzb21ldGhpbmcgdGhhdCBjYW4gYmUgZWRpdGVkCisJCS8vCisJCWlmICghZ2V0RWRpdGluZ0RvbWFpbigpLmdldFJlc291cmNlU2V0KCkuZ2V0UmVzb3VyY2VzKCkuaXNFbXB0eSgpKSB7CisJCQkvLyBDcmVhdGUgYSBwYWdlIGZvciB0aGUgc2VsZWN0aW9uIHRyZWUgdmlldy4KKwkJCS8vCisJCQl7CisJCQkJVmlld2VyUGFuZSB2aWV3ZXJQYW5lID0KKwkJCQkJbmV3IFZpZXdlclBhbmUoZ2V0U2l0ZSgpLmdldFBhZ2UoKSwgQ1NWRWRpdG9yLnRoaXMpIHsKKwkJCQkJCUBPdmVycmlkZQorCQkJCQkJcHVibGljIFZpZXdlciBjcmVhdGVWaWV3ZXIoQ29tcG9zaXRlIGNvbXBvc2l0ZSkgeworCQkJCQkJCVRyZWUgdHJlZSA9IG5ldyBUcmVlKGNvbXBvc2l0ZSwgU1dULk1VTFRJKTsKKwkJCQkJCQlUcmVlVmlld2VyIG5ld1RyZWVWaWV3ZXIgPSBuZXcgVHJlZVZpZXdlcih0cmVlKTsKKwkJCQkJCQlyZXR1cm4gbmV3VHJlZVZpZXdlcjsKKwkJCQkJCX0KKwkJCQkJCUBPdmVycmlkZQorCQkJCQkJcHVibGljIHZvaWQgcmVxdWVzdEFjdGl2YXRpb24oKSB7CisJCQkJCQkJc3VwZXIucmVxdWVzdEFjdGl2YXRpb24oKTsKKwkJCQkJCQlzZXRDdXJyZW50Vmlld2VyUGFuZSh0aGlzKTsKKwkJCQkJCX0KKwkJCQkJfTsKKwkJCQl2aWV3ZXJQYW5lLmNyZWF0ZUNvbnRyb2woZ2V0Q29udGFpbmVyKCkpOworCisJCQkJc2VsZWN0aW9uVmlld2VyID0gKFRyZWVWaWV3ZXIpdmlld2VyUGFuZS5nZXRWaWV3ZXIoKTsKKwkJCQlzZWxlY3Rpb25WaWV3ZXIuc2V0Q29udGVudFByb3ZpZGVyKG5ldyBBZGFwdGVyRmFjdG9yeUNvbnRlbnRQcm92aWRlcihhZGFwdGVyRmFjdG9yeSkpOworCisJCQkJc2VsZWN0aW9uVmlld2VyLnNldExhYmVsUHJvdmlkZXIobmV3IEFkYXB0ZXJGYWN0b3J5TGFiZWxQcm92aWRlcihhZGFwdGVyRmFjdG9yeSkpOworCQkJCXNlbGVjdGlvblZpZXdlci5zZXRJbnB1dChlZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkpOworCQkJCXNlbGVjdGlvblZpZXdlci5zZXRTZWxlY3Rpb24obmV3IFN0cnVjdHVyZWRTZWxlY3Rpb24oZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpLmdldFJlc291cmNlcygpLmdldCgwKSksIHRydWUpOworCQkJCXZpZXdlclBhbmUuc2V0VGl0bGUoZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpKTsKKworCQkJCW5ldyBBZGFwdGVyRmFjdG9yeVRyZWVFZGl0b3Ioc2VsZWN0aW9uVmlld2VyLmdldFRyZWUoKSwgYWRhcHRlckZhY3RvcnkpOworCisJCQkJY3JlYXRlQ29udGV4dE1lbnVGb3Ioc2VsZWN0aW9uVmlld2VyKTsKKwkJCQlpbnQgcGFnZUluZGV4ID0gYWRkUGFnZSh2aWV3ZXJQYW5lLmdldENvbnRyb2woKSk7CisJCQkJc2V0UGFnZVRleHQocGFnZUluZGV4LCBnZXRTdHJpbmcoIl9VSV9TZWxlY3Rpb25QYWdlX2xhYmVsIikpOworCQkJfQorCisJCQkvLyBDcmVhdGUgYSBwYWdlIGZvciB0aGUgcGFyZW50IHRyZWUgdmlldy4KKwkJCS8vCisJCQl7CisJCQkJVmlld2VyUGFuZSB2aWV3ZXJQYW5lID0KKwkJCQkJbmV3IFZpZXdlclBhbmUoZ2V0U2l0ZSgpLmdldFBhZ2UoKSwgQ1NWRWRpdG9yLnRoaXMpIHsKKwkJCQkJCUBPdmVycmlkZQorCQkJCQkJcHVibGljIFZpZXdlciBjcmVhdGVWaWV3ZXIoQ29tcG9zaXRlIGNvbXBvc2l0ZSkgeworCQkJCQkJCVRyZWUgdHJlZSA9IG5ldyBUcmVlKGNvbXBvc2l0ZSwgU1dULk1VTFRJKTsKKwkJCQkJCQlUcmVlVmlld2VyIG5ld1RyZWVWaWV3ZXIgPSBuZXcgVHJlZVZpZXdlcih0cmVlKTsKKwkJCQkJCQlyZXR1cm4gbmV3VHJlZVZpZXdlcjsKKwkJCQkJCX0KKwkJCQkJCUBPdmVycmlkZQorCQkJCQkJcHVibGljIHZvaWQgcmVxdWVzdEFjdGl2YXRpb24oKSB7CisJCQkJCQkJc3VwZXIucmVxdWVzdEFjdGl2YXRpb24oKTsKKwkJCQkJCQlzZXRDdXJyZW50Vmlld2VyUGFuZSh0aGlzKTsKKwkJCQkJCX0KKwkJCQkJfTsKKwkJCQl2aWV3ZXJQYW5lLmNyZWF0ZUNvbnRyb2woZ2V0Q29udGFpbmVyKCkpOworCisJCQkJcGFyZW50Vmlld2VyID0gKFRyZWVWaWV3ZXIpdmlld2VyUGFuZS5nZXRWaWV3ZXIoKTsKKwkJCQlwYXJlbnRWaWV3ZXIuc2V0QXV0b0V4cGFuZExldmVsKDMwKTsKKwkJCQlwYXJlbnRWaWV3ZXIuc2V0Q29udGVudFByb3ZpZGVyKG5ldyBSZXZlcnNlQWRhcHRlckZhY3RvcnlDb250ZW50UHJvdmlkZXIoYWRhcHRlckZhY3RvcnkpKTsKKwkJCQlwYXJlbnRWaWV3ZXIuc2V0TGFiZWxQcm92aWRlcihuZXcgQWRhcHRlckZhY3RvcnlMYWJlbFByb3ZpZGVyKGFkYXB0ZXJGYWN0b3J5KSk7CisKKwkJCQljcmVhdGVDb250ZXh0TWVudUZvcihwYXJlbnRWaWV3ZXIpOworCQkJCWludCBwYWdlSW5kZXggPSBhZGRQYWdlKHZpZXdlclBhbmUuZ2V0Q29udHJvbCgpKTsKKwkJCQlzZXRQYWdlVGV4dChwYWdlSW5kZXgsIGdldFN0cmluZygiX1VJX1BhcmVudFBhZ2VfbGFiZWwiKSk7CisJCQl9CisKKwkJCS8vIFRoaXMgaXMgdGhlIHBhZ2UgZm9yIHRoZSBsaXN0IHZpZXdlcgorCQkJLy8KKwkJCXsKKwkJCQlWaWV3ZXJQYW5lIHZpZXdlclBhbmUgPQorCQkJCQluZXcgVmlld2VyUGFuZShnZXRTaXRlKCkuZ2V0UGFnZSgpLCBDU1ZFZGl0b3IudGhpcykgeworCQkJCQkJQE92ZXJyaWRlCisJCQkJCQlwdWJsaWMgVmlld2VyIGNyZWF0ZVZpZXdlcihDb21wb3NpdGUgY29tcG9zaXRlKSB7CisJCQkJCQkJcmV0dXJuIG5ldyBMaXN0Vmlld2VyKGNvbXBvc2l0ZSk7CisJCQkJCQl9CisJCQkJCQlAT3ZlcnJpZGUKKwkJCQkJCXB1YmxpYyB2b2lkIHJlcXVlc3RBY3RpdmF0aW9uKCkgeworCQkJCQkJCXN1cGVyLnJlcXVlc3RBY3RpdmF0aW9uKCk7CisJCQkJCQkJc2V0Q3VycmVudFZpZXdlclBhbmUodGhpcyk7CisJCQkJCQl9CisJCQkJCX07CisJCQkJdmlld2VyUGFuZS5jcmVhdGVDb250cm9sKGdldENvbnRhaW5lcigpKTsKKwkJCQlsaXN0Vmlld2VyID0gKExpc3RWaWV3ZXIpdmlld2VyUGFuZS5nZXRWaWV3ZXIoKTsKKwkJCQlsaXN0Vmlld2VyLnNldENvbnRlbnRQcm92aWRlcihuZXcgQWRhcHRlckZhY3RvcnlDb250ZW50UHJvdmlkZXIoYWRhcHRlckZhY3RvcnkpKTsKKwkJCQlsaXN0Vmlld2VyLnNldExhYmVsUHJvdmlkZXIobmV3IEFkYXB0ZXJGYWN0b3J5TGFiZWxQcm92aWRlcihhZGFwdGVyRmFjdG9yeSkpOworCisJCQkJY3JlYXRlQ29udGV4dE1lbnVGb3IobGlzdFZpZXdlcik7CisJCQkJaW50IHBhZ2VJbmRleCA9IGFkZFBhZ2Uodmlld2VyUGFuZS5nZXRDb250cm9sKCkpOworCQkJCXNldFBhZ2VUZXh0KHBhZ2VJbmRleCwgZ2V0U3RyaW5nKCJfVUlfTGlzdFBhZ2VfbGFiZWwiKSk7CisJCQl9CisKKwkJCS8vIFRoaXMgaXMgdGhlIHBhZ2UgZm9yIHRoZSB0cmVlIHZpZXdlcgorCQkJLy8KKwkJCXsKKwkJCQlWaWV3ZXJQYW5lIHZpZXdlclBhbmUgPQorCQkJCQluZXcgVmlld2VyUGFuZShnZXRTaXRlKCkuZ2V0UGFnZSgpLCBDU1ZFZGl0b3IudGhpcykgeworCQkJCQkJQE92ZXJyaWRlCisJCQkJCQlwdWJsaWMgVmlld2VyIGNyZWF0ZVZpZXdlcihDb21wb3NpdGUgY29tcG9zaXRlKSB7CisJCQkJCQkJcmV0dXJuIG5ldyBUcmVlVmlld2VyKGNvbXBvc2l0ZSk7CisJCQkJCQl9CisJCQkJCQlAT3ZlcnJpZGUKKwkJCQkJCXB1YmxpYyB2b2lkIHJlcXVlc3RBY3RpdmF0aW9uKCkgeworCQkJCQkJCXN1cGVyLnJlcXVlc3RBY3RpdmF0aW9uKCk7CisJCQkJCQkJc2V0Q3VycmVudFZpZXdlclBhbmUodGhpcyk7CisJCQkJCQl9CisJCQkJCX07CisJCQkJdmlld2VyUGFuZS5jcmVhdGVDb250cm9sKGdldENvbnRhaW5lcigpKTsKKwkJCQl0cmVlVmlld2VyID0gKFRyZWVWaWV3ZXIpdmlld2VyUGFuZS5nZXRWaWV3ZXIoKTsKKwkJCQl0cmVlVmlld2VyLnNldENvbnRlbnRQcm92aWRlcihuZXcgQWRhcHRlckZhY3RvcnlDb250ZW50UHJvdmlkZXIoYWRhcHRlckZhY3RvcnkpKTsKKwkJCQl0cmVlVmlld2VyLnNldExhYmVsUHJvdmlkZXIobmV3IEFkYXB0ZXJGYWN0b3J5TGFiZWxQcm92aWRlcihhZGFwdGVyRmFjdG9yeSkpOworCisJCQkJbmV3IEFkYXB0ZXJGYWN0b3J5VHJlZUVkaXRvcih0cmVlVmlld2VyLmdldFRyZWUoKSwgYWRhcHRlckZhY3RvcnkpOworCisJCQkJY3JlYXRlQ29udGV4dE1lbnVGb3IodHJlZVZpZXdlcik7CisJCQkJaW50IHBhZ2VJbmRleCA9IGFkZFBhZ2Uodmlld2VyUGFuZS5nZXRDb250cm9sKCkpOworCQkJCXNldFBhZ2VUZXh0KHBhZ2VJbmRleCwgZ2V0U3RyaW5nKCJfVUlfVHJlZVBhZ2VfbGFiZWwiKSk7CisJCQl9CisKKwkJCS8vIFRoaXMgaXMgdGhlIHBhZ2UgZm9yIHRoZSB0YWJsZSB2aWV3ZXIuCisJCQkvLworCQkJeworCQkJCVZpZXdlclBhbmUgdmlld2VyUGFuZSA9CisJCQkJCW5ldyBWaWV3ZXJQYW5lKGdldFNpdGUoKS5nZXRQYWdlKCksIENTVkVkaXRvci50aGlzKSB7CisJCQkJCQlAT3ZlcnJpZGUKKwkJCQkJCXB1YmxpYyBWaWV3ZXIgY3JlYXRlVmlld2VyKENvbXBvc2l0ZSBjb21wb3NpdGUpIHsKKwkJCQkJCQlyZXR1cm4gbmV3IFRhYmxlVmlld2VyKGNvbXBvc2l0ZSk7CisJCQkJCQl9CisJCQkJCQlAT3ZlcnJpZGUKKwkJCQkJCXB1YmxpYyB2b2lkIHJlcXVlc3RBY3RpdmF0aW9uKCkgeworCQkJCQkJCXN1cGVyLnJlcXVlc3RBY3RpdmF0aW9uKCk7CisJCQkJCQkJc2V0Q3VycmVudFZpZXdlclBhbmUodGhpcyk7CisJCQkJCQl9CisJCQkJCX07CisJCQkJdmlld2VyUGFuZS5jcmVhdGVDb250cm9sKGdldENvbnRhaW5lcigpKTsKKwkJCQl0YWJsZVZpZXdlciA9IChUYWJsZVZpZXdlcil2aWV3ZXJQYW5lLmdldFZpZXdlcigpOworCisJCQkJVGFibGUgdGFibGUgPSB0YWJsZVZpZXdlci5nZXRUYWJsZSgpOworCQkJCVRhYmxlTGF5b3V0IGxheW91dCA9IG5ldyBUYWJsZUxheW91dCgpOworCQkJCXRhYmxlLnNldExheW91dChsYXlvdXQpOworCQkJCXRhYmxlLnNldEhlYWRlclZpc2libGUodHJ1ZSk7CisJCQkJdGFibGUuc2V0TGluZXNWaXNpYmxlKHRydWUpOworCisJCQkJVGFibGVDb2x1bW4gb2JqZWN0Q29sdW1uID0gbmV3IFRhYmxlQ29sdW1uKHRhYmxlLCBTV1QuTk9ORSk7CisJCQkJbGF5b3V0LmFkZENvbHVtbkRhdGEobmV3IENvbHVtbldlaWdodERhdGEoMywgMTAwLCB0cnVlKSk7CisJCQkJb2JqZWN0Q29sdW1uLnNldFRleHQoZ2V0U3RyaW5nKCJfVUlfT2JqZWN0Q29sdW1uX2xhYmVsIikpOworCQkJCW9iamVjdENvbHVtbi5zZXRSZXNpemFibGUodHJ1ZSk7CisKKwkJCQlUYWJsZUNvbHVtbiBzZWxmQ29sdW1uID0gbmV3IFRhYmxlQ29sdW1uKHRhYmxlLCBTV1QuTk9ORSk7CisJCQkJbGF5b3V0LmFkZENvbHVtbkRhdGEobmV3IENvbHVtbldlaWdodERhdGEoMiwgMTAwLCB0cnVlKSk7CisJCQkJc2VsZkNvbHVtbi5zZXRUZXh0KGdldFN0cmluZygiX1VJX1NlbGZDb2x1bW5fbGFiZWwiKSk7CisJCQkJc2VsZkNvbHVtbi5zZXRSZXNpemFibGUodHJ1ZSk7CisKKwkJCQl0YWJsZVZpZXdlci5zZXRDb2x1bW5Qcm9wZXJ0aWVzKG5ldyBTdHJpbmcgW10geyJhIiwgImIifSk7CisJCQkJdGFibGVWaWV3ZXIuc2V0Q29udGVudFByb3ZpZGVyKG5ldyBBZGFwdGVyRmFjdG9yeUNvbnRlbnRQcm92aWRlcihhZGFwdGVyRmFjdG9yeSkpOworCQkJCXRhYmxlVmlld2VyLnNldExhYmVsUHJvdmlkZXIobmV3IEFkYXB0ZXJGYWN0b3J5TGFiZWxQcm92aWRlcihhZGFwdGVyRmFjdG9yeSkpOworCisJCQkJY3JlYXRlQ29udGV4dE1lbnVGb3IodGFibGVWaWV3ZXIpOworCQkJCWludCBwYWdlSW5kZXggPSBhZGRQYWdlKHZpZXdlclBhbmUuZ2V0Q29udHJvbCgpKTsKKwkJCQlzZXRQYWdlVGV4dChwYWdlSW5kZXgsIGdldFN0cmluZygiX1VJX1RhYmxlUGFnZV9sYWJlbCIpKTsKKwkJCX0KKworCQkJLy8gVGhpcyBpcyB0aGUgcGFnZSBmb3IgdGhlIHRhYmxlIHRyZWUgdmlld2VyLgorCQkJLy8KKwkJCXsKKwkJCQlWaWV3ZXJQYW5lIHZpZXdlclBhbmUgPQorCQkJCQluZXcgVmlld2VyUGFuZShnZXRTaXRlKCkuZ2V0UGFnZSgpLCBDU1ZFZGl0b3IudGhpcykgeworCQkJCQkJQE92ZXJyaWRlCisJCQkJCQlwdWJsaWMgVmlld2VyIGNyZWF0ZVZpZXdlcihDb21wb3NpdGUgY29tcG9zaXRlKSB7CisJCQkJCQkJcmV0dXJuIG5ldyBUcmVlVmlld2VyKGNvbXBvc2l0ZSk7CisJCQkJCQl9CisJCQkJCQlAT3ZlcnJpZGUKKwkJCQkJCXB1YmxpYyB2b2lkIHJlcXVlc3RBY3RpdmF0aW9uKCkgeworCQkJCQkJCXN1cGVyLnJlcXVlc3RBY3RpdmF0aW9uKCk7CisJCQkJCQkJc2V0Q3VycmVudFZpZXdlclBhbmUodGhpcyk7CisJCQkJCQl9CisJCQkJCX07CisJCQkJdmlld2VyUGFuZS5jcmVhdGVDb250cm9sKGdldENvbnRhaW5lcigpKTsKKworCQkJCXRyZWVWaWV3ZXJXaXRoQ29sdW1ucyA9IChUcmVlVmlld2VyKXZpZXdlclBhbmUuZ2V0Vmlld2VyKCk7CisKKwkJCQlUcmVlIHRyZWUgPSB0cmVlVmlld2VyV2l0aENvbHVtbnMuZ2V0VHJlZSgpOworCQkJCXRyZWUuc2V0TGF5b3V0RGF0YShuZXcgRmlsbExheW91dCgpKTsKKwkJCQl0cmVlLnNldEhlYWRlclZpc2libGUodHJ1ZSk7CisJCQkJdHJlZS5zZXRMaW5lc1Zpc2libGUodHJ1ZSk7CisKKwkJCQlUcmVlQ29sdW1uIG9iamVjdENvbHVtbiA9IG5ldyBUcmVlQ29sdW1uKHRyZWUsIFNXVC5OT05FKTsKKwkJCQlvYmplY3RDb2x1bW4uc2V0VGV4dChnZXRTdHJpbmcoIl9VSV9PYmplY3RDb2x1bW5fbGFiZWwiKSk7CisJCQkJb2JqZWN0Q29sdW1uLnNldFJlc2l6YWJsZSh0cnVlKTsKKwkJCQlvYmplY3RDb2x1bW4uc2V0V2lkdGgoMjUwKTsKKworCQkJCVRyZWVDb2x1bW4gc2VsZkNvbHVtbiA9IG5ldyBUcmVlQ29sdW1uKHRyZWUsIFNXVC5OT05FKTsKKwkJCQlzZWxmQ29sdW1uLnNldFRleHQoZ2V0U3RyaW5nKCJfVUlfU2VsZkNvbHVtbl9sYWJlbCIpKTsKKwkJCQlzZWxmQ29sdW1uLnNldFJlc2l6YWJsZSh0cnVlKTsKKwkJCQlzZWxmQ29sdW1uLnNldFdpZHRoKDIwMCk7CisKKwkJCQl0cmVlVmlld2VyV2l0aENvbHVtbnMuc2V0Q29sdW1uUHJvcGVydGllcyhuZXcgU3RyaW5nIFtdIHsiYSIsICJiIn0pOworCQkJCXRyZWVWaWV3ZXJXaXRoQ29sdW1ucy5zZXRDb250ZW50UHJvdmlkZXIobmV3IEFkYXB0ZXJGYWN0b3J5Q29udGVudFByb3ZpZGVyKGFkYXB0ZXJGYWN0b3J5KSk7CisJCQkJdHJlZVZpZXdlcldpdGhDb2x1bW5zLnNldExhYmVsUHJvdmlkZXIobmV3IEFkYXB0ZXJGYWN0b3J5TGFiZWxQcm92aWRlcihhZGFwdGVyRmFjdG9yeSkpOworCisJCQkJY3JlYXRlQ29udGV4dE1lbnVGb3IodHJlZVZpZXdlcldpdGhDb2x1bW5zKTsKKwkJCQlpbnQgcGFnZUluZGV4ID0gYWRkUGFnZSh2aWV3ZXJQYW5lLmdldENvbnRyb2woKSk7CisJCQkJc2V0UGFnZVRleHQocGFnZUluZGV4LCBnZXRTdHJpbmcoIl9VSV9UcmVlV2l0aENvbHVtbnNQYWdlX2xhYmVsIikpOworCQkJfQorCisJCQlnZXRTaXRlKCkuZ2V0U2hlbGwoKS5nZXREaXNwbGF5KCkuYXN5bmNFeGVjCisJCQkJKG5ldyBSdW5uYWJsZSgpIHsKKwkJCQkJIHB1YmxpYyB2b2lkIHJ1bigpIHsKKwkJCQkJCSBzZXRBY3RpdmVQYWdlKDApOworCQkJCQkgfQorCQkJCSB9KTsKKwkJfQorCisJCS8vIEVuc3VyZXMgdGhhdCB0aGlzIGVkaXRvciB3aWxsIG9ubHkgZGlzcGxheSB0aGUgcGFnZSdzIHRhYgorCQkvLyBhcmVhIGlmIHRoZXJlIGFyZSBtb3JlIHRoYW4gb25lIHBhZ2UKKwkJLy8KKwkJZ2V0Q29udGFpbmVyKCkuYWRkQ29udHJvbExpc3RlbmVyCisJCQkobmV3IENvbnRyb2xBZGFwdGVyKCkgeworCQkJCWJvb2xlYW4gZ3VhcmQgPSBmYWxzZTsKKwkJCQlAT3ZlcnJpZGUKKwkJCQlwdWJsaWMgdm9pZCBjb250cm9sUmVzaXplZChDb250cm9sRXZlbnQgZXZlbnQpIHsKKwkJCQkJaWYgKCFndWFyZCkgeworCQkJCQkJZ3VhcmQgPSB0cnVlOworCQkJCQkJaGlkZVRhYnMoKTsKKwkJCQkJCWd1YXJkID0gZmFsc2U7CisJCQkJCX0KKwkJCQl9CisJCQkgfSk7CisKKwkJZ2V0U2l0ZSgpLmdldFNoZWxsKCkuZ2V0RGlzcGxheSgpLmFzeW5jRXhlYworCQkJKG5ldyBSdW5uYWJsZSgpIHsKKwkJCQkgcHVibGljIHZvaWQgcnVuKCkgeworCQkJCQkgdXBkYXRlUHJvYmxlbUluZGljYXRpb24oKTsKKwkJCQkgfQorCQkJIH0pOworCX0KKworCS8qKgorCSAqIElmIHRoZXJlIGlzIGp1c3Qgb25lIHBhZ2UgaW4gdGhlIG11bHRpLXBhZ2UgZWRpdG9yIHBhcnQsCisJICogdGhpcyBoaWRlcyB0aGUgc2luZ2xlIHRhYiBhdCB0aGUgYm90dG9tLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIGhpZGVUYWJzKCkgeworCQlpZiAoZ2V0UGFnZUNvdW50KCkgPD0gMSkgeworCQkJc2V0UGFnZVRleHQoMCwgIiIpOworCQkJaWYgKGdldENvbnRhaW5lcigpIGluc3RhbmNlb2YgQ1RhYkZvbGRlcikgeworCQkJCSgoQ1RhYkZvbGRlcilnZXRDb250YWluZXIoKSkuc2V0VGFiSGVpZ2h0KDEpOworCQkJCVBvaW50IHBvaW50ID0gZ2V0Q29udGFpbmVyKCkuZ2V0U2l6ZSgpOworCQkJCWdldENvbnRhaW5lcigpLnNldFNpemUocG9pbnQueCwgcG9pbnQueSArIDYpOworCQkJfQorCQl9CisJfQorCisJLyoqCisJICogSWYgdGhlcmUgaXMgbW9yZSB0aGFuIG9uZSBwYWdlIGluIHRoZSBtdWx0aS1wYWdlIGVkaXRvciBwYXJ0LAorCSAqIHRoaXMgc2hvd3MgdGhlIHRhYnMgYXQgdGhlIGJvdHRvbS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBzaG93VGFicygpIHsKKwkJaWYgKGdldFBhZ2VDb3VudCgpID4gMSkgeworCQkJc2V0UGFnZVRleHQoMCwgZ2V0U3RyaW5nKCJfVUlfU2VsZWN0aW9uUGFnZV9sYWJlbCIpKTsKKwkJCWlmIChnZXRDb250YWluZXIoKSBpbnN0YW5jZW9mIENUYWJGb2xkZXIpIHsKKwkJCQkoKENUYWJGb2xkZXIpZ2V0Q29udGFpbmVyKCkpLnNldFRhYkhlaWdodChTV1QuREVGQVVMVCk7CisJCQkJUG9pbnQgcG9pbnQgPSBnZXRDb250YWluZXIoKS5nZXRTaXplKCk7CisJCQkJZ2V0Q29udGFpbmVyKCkuc2V0U2l6ZShwb2ludC54LCBwb2ludC55IC0gNik7CisJCQl9CisJCX0KKwl9CisKKwkvKioKKwkgKiBUaGlzIGlzIHVzZWQgdG8gdHJhY2sgdGhlIGFjdGl2ZSB2aWV3ZXIuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgcGFnZUNoYW5nZShpbnQgcGFnZUluZGV4KSB7CisJCXN1cGVyLnBhZ2VDaGFuZ2UocGFnZUluZGV4KTsKKworCQlpZiAoY29udGVudE91dGxpbmVQYWdlICE9IG51bGwpIHsKKwkJCWhhbmRsZUNvbnRlbnRPdXRsaW5lU2VsZWN0aW9uKGNvbnRlbnRPdXRsaW5lUGFnZS5nZXRTZWxlY3Rpb24oKSk7CisJCX0KKwl9CisKKwkvKioKKwkgKiBUaGlzIGlzIGhvdyB0aGUgZnJhbWV3b3JrIGRldGVybWluZXMgd2hpY2ggaW50ZXJmYWNlcyB3ZSBpbXBsZW1lbnQuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQFN1cHByZXNzV2FybmluZ3MoInJhd3R5cGVzIikKKwlAT3ZlcnJpZGUKKwlwdWJsaWMgT2JqZWN0IGdldEFkYXB0ZXIoQ2xhc3Mga2V5KSB7CisJCWlmIChrZXkuZXF1YWxzKElDb250ZW50T3V0bGluZVBhZ2UuY2xhc3MpKSB7CisJCQlyZXR1cm4gc2hvd091dGxpbmVWaWV3KCkgPyBnZXRDb250ZW50T3V0bGluZVBhZ2UoKSA6IG51bGw7CisJCX0KKwkJZWxzZSBpZiAoa2V5LmVxdWFscyhJUHJvcGVydHlTaGVldFBhZ2UuY2xhc3MpKSB7CisJCQlyZXR1cm4gZ2V0UHJvcGVydHlTaGVldFBhZ2UoKTsKKwkJfQorCQllbHNlIGlmIChrZXkuZXF1YWxzKElHb3RvTWFya2VyLmNsYXNzKSkgeworCQkJcmV0dXJuIHRoaXM7CisJCX0KKwkJZWxzZSB7CisJCQlyZXR1cm4gc3VwZXIuZ2V0QWRhcHRlcihrZXkpOworCQl9CisJfQorCisJLyoqCisJICogVGhpcyBhY2Nlc3NlcyBhIGNhY2hlZCB2ZXJzaW9uIG9mIHRoZSBjb250ZW50IG91dGxpbmVyLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBJQ29udGVudE91dGxpbmVQYWdlIGdldENvbnRlbnRPdXRsaW5lUGFnZSgpIHsKKwkJaWYgKGNvbnRlbnRPdXRsaW5lUGFnZSA9PSBudWxsKSB7CisJCQkvLyBUaGUgY29udGVudCBvdXRsaW5lIGlzIGp1c3QgYSB0cmVlLgorCQkJLy8KKwkJCWNsYXNzIE15Q29udGVudE91dGxpbmVQYWdlIGV4dGVuZHMgQ29udGVudE91dGxpbmVQYWdlIHsKKwkJCQlAT3ZlcnJpZGUKKwkJCQlwdWJsaWMgdm9pZCBjcmVhdGVDb250cm9sKENvbXBvc2l0ZSBwYXJlbnQpIHsKKwkJCQkJc3VwZXIuY3JlYXRlQ29udHJvbChwYXJlbnQpOworCQkJCQljb250ZW50T3V0bGluZVZpZXdlciA9IGdldFRyZWVWaWV3ZXIoKTsKKwkJCQkJY29udGVudE91dGxpbmVWaWV3ZXIuYWRkU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyKHRoaXMpOworCisJCQkJCS8vIFNldCB1cCB0aGUgdHJlZSB2aWV3ZXIuCisJCQkJCS8vCisJCQkJCWNvbnRlbnRPdXRsaW5lVmlld2VyLnNldENvbnRlbnRQcm92aWRlcihuZXcgQWRhcHRlckZhY3RvcnlDb250ZW50UHJvdmlkZXIoYWRhcHRlckZhY3RvcnkpKTsKKwkJCQkJY29udGVudE91dGxpbmVWaWV3ZXIuc2V0TGFiZWxQcm92aWRlcihuZXcgQWRhcHRlckZhY3RvcnlMYWJlbFByb3ZpZGVyKGFkYXB0ZXJGYWN0b3J5KSk7CisJCQkJCWNvbnRlbnRPdXRsaW5lVmlld2VyLnNldElucHV0KGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKSk7CisKKwkJCQkJLy8gTWFrZSBzdXJlIG91ciBwb3B1cHMgd29yay4KKwkJCQkJLy8KKwkJCQkJY3JlYXRlQ29udGV4dE1lbnVGb3IoY29udGVudE91dGxpbmVWaWV3ZXIpOworCisJCQkJCWlmICghZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpLmdldFJlc291cmNlcygpLmlzRW1wdHkoKSkgeworCQkJCQkgIC8vIFNlbGVjdCB0aGUgcm9vdCBvYmplY3QgaW4gdGhlIHZpZXcuCisJCQkJCSAgLy8KKwkJCQkJICBjb250ZW50T3V0bGluZVZpZXdlci5zZXRTZWxlY3Rpb24obmV3IFN0cnVjdHVyZWRTZWxlY3Rpb24oZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpLmdldFJlc291cmNlcygpLmdldCgwKSksIHRydWUpOworCQkJCQl9CisJCQkJfQorCisJCQkJQE92ZXJyaWRlCisJCQkJcHVibGljIHZvaWQgbWFrZUNvbnRyaWJ1dGlvbnMoSU1lbnVNYW5hZ2VyIG1lbnVNYW5hZ2VyLCBJVG9vbEJhck1hbmFnZXIgdG9vbEJhck1hbmFnZXIsIElTdGF0dXNMaW5lTWFuYWdlciBzdGF0dXNMaW5lTWFuYWdlcikgeworCQkJCQlzdXBlci5tYWtlQ29udHJpYnV0aW9ucyhtZW51TWFuYWdlciwgdG9vbEJhck1hbmFnZXIsIHN0YXR1c0xpbmVNYW5hZ2VyKTsKKwkJCQkJY29udGVudE91dGxpbmVTdGF0dXNMaW5lTWFuYWdlciA9IHN0YXR1c0xpbmVNYW5hZ2VyOworCQkJCX0KKworCQkJCUBPdmVycmlkZQorCQkJCXB1YmxpYyB2b2lkIHNldEFjdGlvbkJhcnMoSUFjdGlvbkJhcnMgYWN0aW9uQmFycykgeworCQkJCQlzdXBlci5zZXRBY3Rpb25CYXJzKGFjdGlvbkJhcnMpOworCQkJCQlnZXRBY3Rpb25CYXJDb250cmlidXRvcigpLnNoYXJlR2xvYmFsQWN0aW9ucyh0aGlzLCBhY3Rpb25CYXJzKTsKKwkJCQl9CisJCQl9CisKKwkJCWNvbnRlbnRPdXRsaW5lUGFnZSA9IG5ldyBNeUNvbnRlbnRPdXRsaW5lUGFnZSgpOworCisJCQkvLyBMaXN0ZW4gdG8gc2VsZWN0aW9uIHNvIHRoYXQgd2UgY2FuIGhhbmRsZSBpdCBpcyBhIHNwZWNpYWwgd2F5LgorCQkJLy8KKwkJCWNvbnRlbnRPdXRsaW5lUGFnZS5hZGRTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIKKwkJCQkobmV3IElTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIoKSB7CisJCQkJCSAvLyBUaGlzIGVuc3VyZXMgdGhhdCB3ZSBoYW5kbGUgc2VsZWN0aW9ucyBjb3JyZWN0bHkuCisJCQkJCSAvLworCQkJCQkgcHVibGljIHZvaWQgc2VsZWN0aW9uQ2hhbmdlZChTZWxlY3Rpb25DaGFuZ2VkRXZlbnQgZXZlbnQpIHsKKwkJCQkJCSBoYW5kbGVDb250ZW50T3V0bGluZVNlbGVjdGlvbihldmVudC5nZXRTZWxlY3Rpb24oKSk7CisJCQkJCSB9CisJCQkJIH0pOworCQl9CisKKwkJcmV0dXJuIGNvbnRlbnRPdXRsaW5lUGFnZTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFjY2Vzc2VzIGEgY2FjaGVkIHZlcnNpb24gb2YgdGhlIHByb3BlcnR5IHNoZWV0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBJUHJvcGVydHlTaGVldFBhZ2UgZ2V0UHJvcGVydHlTaGVldFBhZ2UoKSB7CisJCWlmIChwcm9wZXJ0eVNoZWV0UGFnZSA9PSBudWxsKSB7CisJCQlwcm9wZXJ0eVNoZWV0UGFnZSA9CisJCQkJbmV3IEV4dGVuZGVkUHJvcGVydHlTaGVldFBhZ2UoZWRpdGluZ0RvbWFpbikgeworCQkJCQlAT3ZlcnJpZGUKKwkJCQkJcHVibGljIHZvaWQgc2V0U2VsZWN0aW9uVG9WaWV3ZXIoTGlzdDw/PiBzZWxlY3Rpb24pIHsKKwkJCQkJCUNTVkVkaXRvci50aGlzLnNldFNlbGVjdGlvblRvVmlld2VyKHNlbGVjdGlvbik7CisJCQkJCQlDU1ZFZGl0b3IudGhpcy5zZXRGb2N1cygpOworCQkJCQl9CisKKwkJCQkJQE92ZXJyaWRlCisJCQkJCXB1YmxpYyB2b2lkIHNldEFjdGlvbkJhcnMoSUFjdGlvbkJhcnMgYWN0aW9uQmFycykgeworCQkJCQkJc3VwZXIuc2V0QWN0aW9uQmFycyhhY3Rpb25CYXJzKTsKKwkJCQkJCWdldEFjdGlvbkJhckNvbnRyaWJ1dG9yKCkuc2hhcmVHbG9iYWxBY3Rpb25zKHRoaXMsIGFjdGlvbkJhcnMpOworCQkJCQl9CisJCQkJfTsKKwkJCXByb3BlcnR5U2hlZXRQYWdlLnNldFByb3BlcnR5U291cmNlUHJvdmlkZXIobmV3IEFkYXB0ZXJGYWN0b3J5Q29udGVudFByb3ZpZGVyKGFkYXB0ZXJGYWN0b3J5KSk7CisJCX0KKworCQlyZXR1cm4gcHJvcGVydHlTaGVldFBhZ2U7CisJfQorCisJLyoqCisJICogVGhpcyBkZWFscyB3aXRoIGhvdyB3ZSB3YW50IHNlbGVjdGlvbiBpbiB0aGUgb3V0bGluZXIgdG8gYWZmZWN0IHRoZSBvdGhlciB2aWV3cy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBoYW5kbGVDb250ZW50T3V0bGluZVNlbGVjdGlvbihJU2VsZWN0aW9uIHNlbGVjdGlvbikgeworCQlpZiAoY3VycmVudFZpZXdlclBhbmUgIT0gbnVsbCAmJiAhc2VsZWN0aW9uLmlzRW1wdHkoKSAmJiBzZWxlY3Rpb24gaW5zdGFuY2VvZiBJU3RydWN0dXJlZFNlbGVjdGlvbikgeworCQkJSXRlcmF0b3I8Pz4gc2VsZWN0ZWRFbGVtZW50cyA9ICgoSVN0cnVjdHVyZWRTZWxlY3Rpb24pc2VsZWN0aW9uKS5pdGVyYXRvcigpOworCQkJaWYgKHNlbGVjdGVkRWxlbWVudHMuaGFzTmV4dCgpKSB7CisJCQkJLy8gR2V0IHRoZSBmaXJzdCBzZWxlY3RlZCBlbGVtZW50LgorCQkJCS8vCisJCQkJT2JqZWN0IHNlbGVjdGVkRWxlbWVudCA9IHNlbGVjdGVkRWxlbWVudHMubmV4dCgpOworCisJCQkJLy8gSWYgaXQncyB0aGUgc2VsZWN0aW9uIHZpZXdlciwgdGhlbiB3ZSB3YW50IGl0IHRvIHNlbGVjdCB0aGUgc2FtZSBzZWxlY3Rpb24gYXMgdGhpcyBzZWxlY3Rpb24uCisJCQkJLy8KKwkJCQlpZiAoY3VycmVudFZpZXdlclBhbmUuZ2V0Vmlld2VyKCkgPT0gc2VsZWN0aW9uVmlld2VyKSB7CisJCQkJCUFycmF5TGlzdDxPYmplY3Q+IHNlbGVjdGlvbkxpc3QgPSBuZXcgQXJyYXlMaXN0PE9iamVjdD4oKTsKKwkJCQkJc2VsZWN0aW9uTGlzdC5hZGQoc2VsZWN0ZWRFbGVtZW50KTsKKwkJCQkJd2hpbGUgKHNlbGVjdGVkRWxlbWVudHMuaGFzTmV4dCgpKSB7CisJCQkJCQlzZWxlY3Rpb25MaXN0LmFkZChzZWxlY3RlZEVsZW1lbnRzLm5leHQoKSk7CisJCQkJCX0KKworCQkJCQkvLyBTZXQgdGhlIHNlbGVjdGlvbiB0byB0aGUgd2lkZ2V0LgorCQkJCQkvLworCQkJCQlzZWxlY3Rpb25WaWV3ZXIuc2V0U2VsZWN0aW9uKG5ldyBTdHJ1Y3R1cmVkU2VsZWN0aW9uKHNlbGVjdGlvbkxpc3QpKTsKKwkJCQl9CisJCQkJZWxzZSB7CisJCQkJCS8vIFNldCB0aGUgaW5wdXQgdG8gdGhlIHdpZGdldC4KKwkJCQkJLy8KKwkJCQkJaWYgKGN1cnJlbnRWaWV3ZXJQYW5lLmdldFZpZXdlcigpLmdldElucHV0KCkgIT0gc2VsZWN0ZWRFbGVtZW50KSB7CisJCQkJCQljdXJyZW50Vmlld2VyUGFuZS5nZXRWaWV3ZXIoKS5zZXRJbnB1dChzZWxlY3RlZEVsZW1lbnQpOworCQkJCQkJY3VycmVudFZpZXdlclBhbmUuc2V0VGl0bGUoc2VsZWN0ZWRFbGVtZW50KTsKKwkJCQkJfQorCQkJCX0KKwkJCX0KKwkJfQorCX0KKworCS8qKgorCSAqIFRoaXMgaXMgZm9yIGltcGxlbWVudGluZyB7QGxpbmsgSUVkaXRvclBhcnR9IGFuZCBzaW1wbHkgdGVzdHMgdGhlIGNvbW1hbmQgc3RhY2suCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIGJvb2xlYW4gaXNEaXJ0eSgpIHsKKwkJcmV0dXJuICgoQmFzaWNDb21tYW5kU3RhY2spZWRpdGluZ0RvbWFpbi5nZXRDb21tYW5kU3RhY2soKSkuaXNTYXZlTmVlZGVkKCk7CisJfQorCisJLyoqCisJICogVGhpcyBpcyBmb3IgaW1wbGVtZW50aW5nIHtAbGluayBJRWRpdG9yUGFydH0gYW5kIHNpbXBseSBzYXZlcyB0aGUgbW9kZWwgZmlsZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBkb1NhdmUoSVByb2dyZXNzTW9uaXRvciBwcm9ncmVzc01vbml0b3IpIHsKKwkJLy8gU2F2ZSBvbmx5IHJlc291cmNlcyB0aGF0IGhhdmUgYWN0dWFsbHkgY2hhbmdlZC4KKwkJLy8KKwkJZmluYWwgTWFwPE9iamVjdCwgT2JqZWN0PiBzYXZlT3B0aW9ucyA9IG5ldyBIYXNoTWFwPE9iamVjdCwgT2JqZWN0PigpOworCQlzYXZlT3B0aW9ucy5wdXQoUmVzb3VyY2UuT1BUSU9OX1NBVkVfT05MWV9JRl9DSEFOR0VELCBSZXNvdXJjZS5PUFRJT05fU0FWRV9PTkxZX0lGX0NIQU5HRURfTUVNT1JZX0JVRkZFUik7CisKKwkJLy8gRG8gdGhlIHdvcmsgd2l0aGluIGFuIG9wZXJhdGlvbiBiZWNhdXNlIHRoaXMgaXMgYSBsb25nIHJ1bm5pbmcgYWN0aXZpdHkgdGhhdCBtb2RpZmllcyB0aGUgd29ya2JlbmNoLgorCQkvLworCQlXb3Jrc3BhY2VNb2RpZnlPcGVyYXRpb24gb3BlcmF0aW9uID0KKwkJCW5ldyBXb3Jrc3BhY2VNb2RpZnlPcGVyYXRpb24oKSB7CisJCQkJLy8gVGhpcyBpcyB0aGUgbWV0aG9kIHRoYXQgZ2V0cyBpbnZva2VkIHdoZW4gdGhlIG9wZXJhdGlvbiBydW5zLgorCQkJCS8vCisJCQkJQE92ZXJyaWRlCisJCQkJcHVibGljIHZvaWQgZXhlY3V0ZShJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IpIHsKKwkJCQkJLy8gU2F2ZSB0aGUgcmVzb3VyY2VzIHRvIHRoZSBmaWxlIHN5c3RlbS4KKwkJCQkJLy8KKwkJCQkJYm9vbGVhbiBmaXJzdCA9IHRydWU7CisJCQkJCWZvciAoUmVzb3VyY2UgcmVzb3VyY2UgOiBlZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkuZ2V0UmVzb3VyY2VzKCkpIHsKKwkJCQkJCWlmICgoZmlyc3QgfHwgIXJlc291cmNlLmdldENvbnRlbnRzKCkuaXNFbXB0eSgpIHx8IGlzUGVyc2lzdGVkKHJlc291cmNlKSkgJiYgIWVkaXRpbmdEb21haW4uaXNSZWFkT25seShyZXNvdXJjZSkpIHsKKwkJCQkJCQl0cnkgeworCQkJCQkJCQlsb25nIHRpbWVTdGFtcCA9IHJlc291cmNlLmdldFRpbWVTdGFtcCgpOworCQkJCQkJCQlyZXNvdXJjZS5zYXZlKHNhdmVPcHRpb25zKTsKKwkJCQkJCQkJaWYgKHJlc291cmNlLmdldFRpbWVTdGFtcCgpICE9IHRpbWVTdGFtcCkgeworCQkJCQkJCQkJc2F2ZWRSZXNvdXJjZXMuYWRkKHJlc291cmNlKTsKKwkJCQkJCQkJfQorCQkJCQkJCX0KKwkJCQkJCQljYXRjaCAoRXhjZXB0aW9uIGV4Y2VwdGlvbikgeworCQkJCQkJCQlyZXNvdXJjZVRvRGlhZ25vc3RpY01hcC5wdXQocmVzb3VyY2UsIGFuYWx5emVSZXNvdXJjZVByb2JsZW1zKHJlc291cmNlLCBleGNlcHRpb24pKTsKKwkJCQkJCQl9CisJCQkJCQkJZmlyc3QgPSBmYWxzZTsKKwkJCQkJCX0KKwkJCQkJfQorCQkJCX0KKwkJCX07CisKKwkJdXBkYXRlUHJvYmxlbUluZGljYXRpb24gPSBmYWxzZTsKKwkJdHJ5IHsKKwkJCS8vIFRoaXMgcnVucyB0aGUgb3B0aW9ucywgYW5kIHNob3dzIHByb2dyZXNzLgorCQkJLy8KKwkJCW5ldyBQcm9ncmVzc01vbml0b3JEaWFsb2coZ2V0U2l0ZSgpLmdldFNoZWxsKCkpLnJ1bih0cnVlLCBmYWxzZSwgb3BlcmF0aW9uKTsKKworCQkJLy8gUmVmcmVzaCB0aGUgbmVjZXNzYXJ5IHN0YXRlLgorCQkJLy8KKwkJCSgoQmFzaWNDb21tYW5kU3RhY2spZWRpdGluZ0RvbWFpbi5nZXRDb21tYW5kU3RhY2soKSkuc2F2ZUlzRG9uZSgpOworCQkJZmlyZVByb3BlcnR5Q2hhbmdlKElFZGl0b3JQYXJ0LlBST1BfRElSVFkpOworCQl9CisJCWNhdGNoIChFeGNlcHRpb24gZXhjZXB0aW9uKSB7CisJCQkvLyBTb21ldGhpbmcgd2VudCB3cm9uZyB0aGF0IHNob3VsZG4ndC4KKwkJCS8vCisJCQlDU1ZMb2dnZXJFZGl0UGx1Z2luLklOU1RBTkNFLmxvZyhleGNlcHRpb24pOworCQl9CisJCXVwZGF0ZVByb2JsZW1JbmRpY2F0aW9uID0gdHJ1ZTsKKwkJdXBkYXRlUHJvYmxlbUluZGljYXRpb24oKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgd2hldGhlciBzb21ldGhpbmcgaGFzIGJlZW4gcGVyc2lzdGVkIHRvIHRoZSBVUkkgb2YgdGhlIHNwZWNpZmllZCByZXNvdXJjZS4KKwkgKiBUaGUgaW1wbGVtZW50YXRpb24gdXNlcyB0aGUgVVJJIGNvbnZlcnRlciBmcm9tIHRoZSBlZGl0b3IncyByZXNvdXJjZSBzZXQgdG8gdHJ5IHRvIG9wZW4gYW4gaW5wdXQgc3RyZWFtLiAKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgYm9vbGVhbiBpc1BlcnNpc3RlZChSZXNvdXJjZSByZXNvdXJjZSkgeworCQlib29sZWFuIHJlc3VsdCA9IGZhbHNlOworCQl0cnkgeworCQkJSW5wdXRTdHJlYW0gc3RyZWFtID0gZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpLmdldFVSSUNvbnZlcnRlcigpLmNyZWF0ZUlucHV0U3RyZWFtKHJlc291cmNlLmdldFVSSSgpKTsKKwkJCWlmIChzdHJlYW0gIT0gbnVsbCkgeworCQkJCXJlc3VsdCA9IHRydWU7CisJCQkJc3RyZWFtLmNsb3NlKCk7CisJCQl9CisJCX0KKwkJY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKKwkJCS8vIElnbm9yZQorCQl9CisJCXJldHVybiByZXN1bHQ7CisJfQorCisJLyoqCisJICogVGhpcyBhbHdheXMgcmV0dXJucyB0cnVlIGJlY2F1c2UgaXQgaXMgbm90IGN1cnJlbnRseSBzdXBwb3J0ZWQuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIGJvb2xlYW4gaXNTYXZlQXNBbGxvd2VkKCkgeworCQlyZXR1cm4gdHJ1ZTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFsc28gY2hhbmdlcyB0aGUgZWRpdG9yJ3MgaW5wdXQuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgZG9TYXZlQXMoKSB7CisJCVNhdmVBc0RpYWxvZyBzYXZlQXNEaWFsb2cgPSBuZXcgU2F2ZUFzRGlhbG9nKGdldFNpdGUoKS5nZXRTaGVsbCgpKTsKKwkJc2F2ZUFzRGlhbG9nLm9wZW4oKTsKKwkJSVBhdGggcGF0aCA9IHNhdmVBc0RpYWxvZy5nZXRSZXN1bHQoKTsKKwkJaWYgKHBhdGggIT0gbnVsbCkgeworCQkJSUZpbGUgZmlsZSA9IFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5nZXRSb290KCkuZ2V0RmlsZShwYXRoKTsKKwkJCWlmIChmaWxlICE9IG51bGwpIHsKKwkJCQlkb1NhdmVBcyhVUkkuY3JlYXRlUGxhdGZvcm1SZXNvdXJjZVVSSShmaWxlLmdldEZ1bGxQYXRoKCkudG9TdHJpbmcoKSwgdHJ1ZSksIG5ldyBGaWxlRWRpdG9ySW5wdXQoZmlsZSkpOworCQkJfQorCQl9CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgZG9TYXZlQXMoVVJJIHVyaSwgSUVkaXRvcklucHV0IGVkaXRvcklucHV0KSB7CisJCShlZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkuZ2V0UmVzb3VyY2VzKCkuZ2V0KDApKS5zZXRVUkkodXJpKTsKKwkJc2V0SW5wdXRXaXRoTm90aWZ5KGVkaXRvcklucHV0KTsKKwkJc2V0UGFydE5hbWUoZWRpdG9ySW5wdXQuZ2V0TmFtZSgpKTsKKwkJSVByb2dyZXNzTW9uaXRvciBwcm9ncmVzc01vbml0b3IgPQorCQkJZ2V0QWN0aW9uQmFycygpLmdldFN0YXR1c0xpbmVNYW5hZ2VyKCkgIT0gbnVsbCA/CisJCQkJZ2V0QWN0aW9uQmFycygpLmdldFN0YXR1c0xpbmVNYW5hZ2VyKCkuZ2V0UHJvZ3Jlc3NNb25pdG9yKCkgOgorCQkJCW5ldyBOdWxsUHJvZ3Jlc3NNb25pdG9yKCk7CisJCWRvU2F2ZShwcm9ncmVzc01vbml0b3IpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIGdvdG9NYXJrZXIoSU1hcmtlciBtYXJrZXIpIHsKKwkJdHJ5IHsKKwkJCWlmIChtYXJrZXIuZ2V0VHlwZSgpLmVxdWFscyhFVmFsaWRhdG9yLk1BUktFUikpIHsKKwkJCQlTdHJpbmcgdXJpQXR0cmlidXRlID0gbWFya2VyLmdldEF0dHJpYnV0ZShFVmFsaWRhdG9yLlVSSV9BVFRSSUJVVEUsIG51bGwpOworCQkJCWlmICh1cmlBdHRyaWJ1dGUgIT0gbnVsbCkgeworCQkJCQlVUkkgdXJpID0gVVJJLmNyZWF0ZVVSSSh1cmlBdHRyaWJ1dGUpOworCQkJCQlFT2JqZWN0IGVPYmplY3QgPSBlZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkuZ2V0RU9iamVjdCh1cmksIHRydWUpOworCQkJCQlpZiAoZU9iamVjdCAhPSBudWxsKSB7CisJCQkJCSAgc2V0U2VsZWN0aW9uVG9WaWV3ZXIoQ29sbGVjdGlvbnMuc2luZ2xldG9uKGVkaXRpbmdEb21haW4uZ2V0V3JhcHBlcihlT2JqZWN0KSkpOworCQkJCQl9CisJCQkJfQorCQkJfQorCQl9CisJCWNhdGNoIChDb3JlRXhjZXB0aW9uIGV4Y2VwdGlvbikgeworCQkJQ1NWTG9nZ2VyRWRpdFBsdWdpbi5JTlNUQU5DRS5sb2coZXhjZXB0aW9uKTsKKwkJfQorCX0KKworCS8qKgorCSAqIFRoaXMgaXMgY2FsbGVkIGR1cmluZyBzdGFydHVwLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGluaXQoSUVkaXRvclNpdGUgc2l0ZSwgSUVkaXRvcklucHV0IGVkaXRvcklucHV0KSB7CisJCXNldFNpdGUoc2l0ZSk7CisJCXNldElucHV0V2l0aE5vdGlmeShlZGl0b3JJbnB1dCk7CisJCXNldFBhcnROYW1lKGVkaXRvcklucHV0LmdldE5hbWUoKSk7CisJCXNpdGUuc2V0U2VsZWN0aW9uUHJvdmlkZXIodGhpcyk7CisJCXNpdGUuZ2V0UGFnZSgpLmFkZFBhcnRMaXN0ZW5lcihwYXJ0TGlzdGVuZXIpOworCQlSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuYWRkUmVzb3VyY2VDaGFuZ2VMaXN0ZW5lcihyZXNvdXJjZUNoYW5nZUxpc3RlbmVyLCBJUmVzb3VyY2VDaGFuZ2VFdmVudC5QT1NUX0NIQU5HRSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgc2V0Rm9jdXMoKSB7CisJCWlmIChjdXJyZW50Vmlld2VyUGFuZSAhPSBudWxsKSB7CisJCQljdXJyZW50Vmlld2VyUGFuZS5zZXRGb2N1cygpOworCQl9CisJCWVsc2UgeworCQkJZ2V0Q29udHJvbChnZXRBY3RpdmVQYWdlKCkpLnNldEZvY3VzKCk7CisJCX0KKwl9CisKKwkvKioKKwkgKiBUaGlzIGltcGxlbWVudHMge0BsaW5rIG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvblByb3ZpZGVyfS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBhZGRTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIoSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lciBsaXN0ZW5lcikgeworCQlzZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXJzLmFkZChsaXN0ZW5lcik7CisJfQorCisJLyoqCisJICogVGhpcyBpbXBsZW1lbnRzIHtAbGluayBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb25Qcm92aWRlcn0uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgcmVtb3ZlU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyKElTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIgbGlzdGVuZXIpIHsKKwkJc2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVycy5yZW1vdmUobGlzdGVuZXIpOworCX0KKworCS8qKgorCSAqIFRoaXMgaW1wbGVtZW50cyB7QGxpbmsgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uUHJvdmlkZXJ9IHRvIHJldHVybiB0aGlzIGVkaXRvcidzIG92ZXJhbGwgc2VsZWN0aW9uLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBJU2VsZWN0aW9uIGdldFNlbGVjdGlvbigpIHsKKwkJcmV0dXJuIGVkaXRvclNlbGVjdGlvbjsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGltcGxlbWVudHMge0BsaW5rIG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvblByb3ZpZGVyfSB0byBzZXQgdGhpcyBlZGl0b3IncyBvdmVyYWxsIHNlbGVjdGlvbi4KKwkgKiBDYWxsaW5nIHRoaXMgcmVzdWx0IHdpbGwgbm90aWZ5IHRoZSBsaXN0ZW5lcnMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgc2V0U2VsZWN0aW9uKElTZWxlY3Rpb24gc2VsZWN0aW9uKSB7CisJCWVkaXRvclNlbGVjdGlvbiA9IHNlbGVjdGlvbjsKKworCQlmb3IgKElTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIgbGlzdGVuZXIgOiBzZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXJzKSB7CisJCQlsaXN0ZW5lci5zZWxlY3Rpb25DaGFuZ2VkKG5ldyBTZWxlY3Rpb25DaGFuZ2VkRXZlbnQodGhpcywgc2VsZWN0aW9uKSk7CisJCX0KKwkJc2V0U3RhdHVzTGluZU1hbmFnZXIoc2VsZWN0aW9uKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRTdGF0dXNMaW5lTWFuYWdlcihJU2VsZWN0aW9uIHNlbGVjdGlvbikgeworCQlJU3RhdHVzTGluZU1hbmFnZXIgc3RhdHVzTGluZU1hbmFnZXIgPSBjdXJyZW50Vmlld2VyICE9IG51bGwgJiYgY3VycmVudFZpZXdlciA9PSBjb250ZW50T3V0bGluZVZpZXdlciA/CisJCQljb250ZW50T3V0bGluZVN0YXR1c0xpbmVNYW5hZ2VyIDogZ2V0QWN0aW9uQmFycygpLmdldFN0YXR1c0xpbmVNYW5hZ2VyKCk7CisKKwkJaWYgKHN0YXR1c0xpbmVNYW5hZ2VyICE9IG51bGwpIHsKKwkJCWlmIChzZWxlY3Rpb24gaW5zdGFuY2VvZiBJU3RydWN0dXJlZFNlbGVjdGlvbikgeworCQkJCUNvbGxlY3Rpb248Pz4gY29sbGVjdGlvbiA9ICgoSVN0cnVjdHVyZWRTZWxlY3Rpb24pc2VsZWN0aW9uKS50b0xpc3QoKTsKKwkJCQlzd2l0Y2ggKGNvbGxlY3Rpb24uc2l6ZSgpKSB7CisJCQkJCWNhc2UgMDogeworCQkJCQkJc3RhdHVzTGluZU1hbmFnZXIuc2V0TWVzc2FnZShnZXRTdHJpbmcoIl9VSV9Ob09iamVjdFNlbGVjdGVkIikpOworCQkJCQkJYnJlYWs7CisJCQkJCX0KKwkJCQkJY2FzZSAxOiB7CisJCQkJCQlTdHJpbmcgdGV4dCA9IG5ldyBBZGFwdGVyRmFjdG9yeUl0ZW1EZWxlZ2F0b3IoYWRhcHRlckZhY3RvcnkpLmdldFRleHQoY29sbGVjdGlvbi5pdGVyYXRvcigpLm5leHQoKSk7CisJCQkJCQlzdGF0dXNMaW5lTWFuYWdlci5zZXRNZXNzYWdlKGdldFN0cmluZygiX1VJX1NpbmdsZU9iamVjdFNlbGVjdGVkIiwgdGV4dCkpOworCQkJCQkJYnJlYWs7CisJCQkJCX0KKwkJCQkJZGVmYXVsdDogeworCQkJCQkJc3RhdHVzTGluZU1hbmFnZXIuc2V0TWVzc2FnZShnZXRTdHJpbmcoIl9VSV9NdWx0aU9iamVjdFNlbGVjdGVkIiwgSW50ZWdlci50b1N0cmluZyhjb2xsZWN0aW9uLnNpemUoKSkpKTsKKwkJCQkJCWJyZWFrOworCQkJCQl9CisJCQkJfQorCQkJfQorCQkJZWxzZSB7CisJCQkJc3RhdHVzTGluZU1hbmFnZXIuc2V0TWVzc2FnZSgiIik7CisJCQl9CisJCX0KKwl9CisKKwkvKioKKwkgKiBUaGlzIGxvb2tzIHVwIGEgc3RyaW5nIGluIHRoZSBwbHVnaW4ncyBwbHVnaW4ucHJvcGVydGllcyBmaWxlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByaXZhdGUgc3RhdGljIFN0cmluZyBnZXRTdHJpbmcoU3RyaW5nIGtleSkgeworCQlyZXR1cm4gQ1NWTG9nZ2VyRWRpdFBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoa2V5KTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGxvb2tzIHVwIGEgc3RyaW5nIGluIHBsdWdpbi5wcm9wZXJ0aWVzLCBtYWtpbmcgYSBzdWJzdGl0dXRpb24uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIGdldFN0cmluZyhTdHJpbmcga2V5LCBPYmplY3QgczEpIHsKKwkJcmV0dXJuIENTVkxvZ2dlckVkaXRQbHVnaW4uSU5TVEFOQ0UuZ2V0U3RyaW5nKGtleSwgbmV3IE9iamVjdCBbXSB7IHMxIH0pOworCX0KKworCS8qKgorCSAqIFRoaXMgaW1wbGVtZW50cyB7QGxpbmsgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklNZW51TGlzdGVuZXJ9IHRvIGhlbHAgZmlsbCB0aGUgY29udGV4dCBtZW51cyB3aXRoIGNvbnRyaWJ1dGlvbnMgZnJvbSB0aGUgRWRpdCBtZW51LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIG1lbnVBYm91dFRvU2hvdyhJTWVudU1hbmFnZXIgbWVudU1hbmFnZXIpIHsKKwkJKChJTWVudUxpc3RlbmVyKWdldEVkaXRvclNpdGUoKS5nZXRBY3Rpb25CYXJDb250cmlidXRvcigpKS5tZW51QWJvdXRUb1Nob3cobWVudU1hbmFnZXIpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFZGl0aW5nRG9tYWluQWN0aW9uQmFyQ29udHJpYnV0b3IgZ2V0QWN0aW9uQmFyQ29udHJpYnV0b3IoKSB7CisJCXJldHVybiAoRWRpdGluZ0RvbWFpbkFjdGlvbkJhckNvbnRyaWJ1dG9yKWdldEVkaXRvclNpdGUoKS5nZXRBY3Rpb25CYXJDb250cmlidXRvcigpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBJQWN0aW9uQmFycyBnZXRBY3Rpb25CYXJzKCkgeworCQlyZXR1cm4gZ2V0QWN0aW9uQmFyQ29udHJpYnV0b3IoKS5nZXRBY3Rpb25CYXJzKCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEFkYXB0ZXJGYWN0b3J5IGdldEFkYXB0ZXJGYWN0b3J5KCkgeworCQlyZXR1cm4gYWRhcHRlckZhY3Rvcnk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgZGlzcG9zZSgpIHsKKwkJdXBkYXRlUHJvYmxlbUluZGljYXRpb24gPSBmYWxzZTsKKworCQlSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkucmVtb3ZlUmVzb3VyY2VDaGFuZ2VMaXN0ZW5lcihyZXNvdXJjZUNoYW5nZUxpc3RlbmVyKTsKKworCQlnZXRTaXRlKCkuZ2V0UGFnZSgpLnJlbW92ZVBhcnRMaXN0ZW5lcihwYXJ0TGlzdGVuZXIpOworCisJCWFkYXB0ZXJGYWN0b3J5LmRpc3Bvc2UoKTsKKworCQlpZiAoZ2V0QWN0aW9uQmFyQ29udHJpYnV0b3IoKS5nZXRBY3RpdmVFZGl0b3IoKSA9PSB0aGlzKSB7CisJCQlnZXRBY3Rpb25CYXJDb250cmlidXRvcigpLnNldEFjdGl2ZUVkaXRvcihudWxsKTsKKwkJfQorCisJCWlmIChwcm9wZXJ0eVNoZWV0UGFnZSAhPSBudWxsKSB7CisJCQlwcm9wZXJ0eVNoZWV0UGFnZS5kaXNwb3NlKCk7CisJCX0KKworCQlpZiAoY29udGVudE91dGxpbmVQYWdlICE9IG51bGwpIHsKKwkJCWNvbnRlbnRPdXRsaW5lUGFnZS5kaXNwb3NlKCk7CisJCX0KKworCQlzdXBlci5kaXNwb3NlKCk7CisJfQorCisJLyoqCisJICogUmV0dXJucyB3aGV0aGVyIHRoZSBvdXRsaW5lIHZpZXcgc2hvdWxkIGJlIHByZXNlbnRlZCB0byB0aGUgdXNlci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgYm9vbGVhbiBzaG93T3V0bGluZVZpZXcoKSB7CisJCXJldHVybiB0cnVlOworCX0KK30KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzLmNzdi9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9sb2dnZXJzL2Nzdi9wcmVzZW50YXRpb24vQ1NWTW9kZWxXaXphcmQuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzLmNzdi9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9sb2dnZXJzL2Nzdi9wcmVzZW50YXRpb24vQ1NWTW9kZWxXaXphcmQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNzE4NzJhCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMuY3N2L3NyYy9vcmcvZWNsaXBzZS9zdGVtL2xvZ2dlcnMvY3N2L3ByZXNlbnRhdGlvbi9DU1ZNb2RlbFdpemFyZC5qYXZhCkBAIC0wLDAgKzEsNjMxIEBACisvKioKKyAqIDxjb3B5cmlnaHQ+CisgKiA8L2NvcHlyaWdodD4KKyAqCisgKiAkSWQkCisgKi8KK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzLmNzdi5wcmVzZW50YXRpb247CisKKworaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7CitpbXBvcnQgamF2YS51dGlsLkFycmF5czsKK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbnM7CitpbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CitpbXBvcnQgamF2YS51dGlsLk1hcDsKK2ltcG9ydCBqYXZhLnV0aWwuTWlzc2luZ1Jlc291cmNlRXhjZXB0aW9uOworaW1wb3J0IGphdmEudXRpbC5TdHJpbmdUb2tlbml6ZXI7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLkNvbW1vblBsdWdpbjsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5VUkk7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3NpZmllcjsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5yZXNvdXJjZS5SZXNvdXJjZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUucmVzb3VyY2UuUmVzb3VyY2VTZXQ7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUucmVzb3VyY2UuaW1wbC5SZXNvdXJjZVNldEltcGw7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS54bWkuWE1MUmVzb3VyY2U7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5wcm92aWRlci5FeHRlbmRlZEltYWdlUmVnaXN0cnk7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JQ29udGFpbmVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklGaWxlOworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklGb2xkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3Q7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVJlc291cmNlOworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLlJlc291cmNlc1BsdWdpbjsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUHJvZ3Jlc3NNb25pdG9yOworCitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuZGlhbG9ncy5NZXNzYWdlRGlhbG9nOworCitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU3RydWN0dXJlZFNlbGVjdGlvbjsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLndpemFyZC5XaXphcmQ7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uud2l6YXJkLldpemFyZFBhZ2U7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuU1dUOworCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5Nb2RpZnlMaXN0ZW5lcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLk1vZGlmeUV2ZW50OworCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5HcmlkRGF0YTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QubGF5b3V0LkdyaWRMYXlvdXQ7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21ibzsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuTGFiZWw7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5JTmV3V2l6YXJkOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2g7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5hY3Rpb25zLldvcmtzcGFjZU1vZGlmeU9wZXJhdGlvbjsKKworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLmRpYWxvZ3MuV2l6YXJkTmV3RmlsZUNyZWF0aW9uUGFnZTsKKworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLnBhcnQuRmlsZUVkaXRvcklucHV0OworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLnBhcnQuSVNldFNlbGVjdGlvblRhcmdldDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy5jc3YuQ1NWRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMuY3N2LkNTVlBhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzLmNzdi5wcm92aWRlci5DU1ZMb2dnZXJFZGl0UGx1Z2luOworCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGF0aDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlN0cnVjdHVyZWRTZWxlY3Rpb247CisKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5JV29ya2JlbmNoUGFnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5JV29ya2JlbmNoUGFydDsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5JV29ya2JlbmNoV2luZG93OworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLlBhcnRJbml0RXhjZXB0aW9uOworCisKKy8qKgorICogVGhpcyBpcyBhIHNpbXBsZSB3aXphcmQgZm9yIGNyZWF0aW5nIGEgbmV3IG1vZGVsIGZpbGUuCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBDU1ZNb2RlbFdpemFyZCBleHRlbmRzIFdpemFyZCBpbXBsZW1lbnRzIElOZXdXaXphcmQgeworCS8qKgorCSAqIFRoZSBzdXBwb3J0ZWQgZXh0ZW5zaW9ucyBmb3IgY3JlYXRlZCBmaWxlcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIExpc3Q8U3RyaW5nPiBGSUxFX0VYVEVOU0lPTlMgPQorCQlDb2xsZWN0aW9ucy51bm1vZGlmaWFibGVMaXN0KEFycmF5cy5hc0xpc3QoQ1NWTG9nZ2VyRWRpdFBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoIl9VSV9DU1ZFZGl0b3JGaWxlbmFtZUV4dGVuc2lvbnMiKS5zcGxpdCgiXFxzKixcXHMqIikpKTsKKworCS8qKgorCSAqIEEgZm9ybWF0dGVkIGxpc3Qgb2Ygc3VwcG9ydGVkIGZpbGUgZXh0ZW5zaW9ucywgc3VpdGFibGUgZm9yIGRpc3BsYXkuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgRk9STUFUVEVEX0ZJTEVfRVhURU5TSU9OUyA9CisJCUNTVkxvZ2dlckVkaXRQbHVnaW4uSU5TVEFOQ0UuZ2V0U3RyaW5nKCJfVUlfQ1NWRWRpdG9yRmlsZW5hbWVFeHRlbnNpb25zIikucmVwbGFjZUFsbCgiXFxzKixcXHMqIiwgIiwgIik7CisKKwkvKioKKwkgKiBUaGlzIGNhY2hlcyBhbiBpbnN0YW5jZSBvZiB0aGUgbW9kZWwgcGFja2FnZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgQ1NWUGFja2FnZSBjc3ZQYWNrYWdlID0gQ1NWUGFja2FnZS5lSU5TVEFOQ0U7CisKKwkvKioKKwkgKiBUaGlzIGNhY2hlcyBhbiBpbnN0YW5jZSBvZiB0aGUgbW9kZWwgZmFjdG9yeS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgQ1NWRmFjdG9yeSBjc3ZGYWN0b3J5ID0gY3N2UGFja2FnZS5nZXRDU1ZGYWN0b3J5KCk7CisKKwkvKioKKwkgKiBUaGlzIGlzIHRoZSBmaWxlIGNyZWF0aW9uIHBhZ2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIENTVk1vZGVsV2l6YXJkTmV3RmlsZUNyZWF0aW9uUGFnZSBuZXdGaWxlQ3JlYXRpb25QYWdlOworCisJLyoqCisJICogVGhpcyBpcyB0aGUgaW5pdGlhbCBvYmplY3QgY3JlYXRpb24gcGFnZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgQ1NWTW9kZWxXaXphcmRJbml0aWFsT2JqZWN0Q3JlYXRpb25QYWdlIGluaXRpYWxPYmplY3RDcmVhdGlvblBhZ2U7CisKKwkvKioKKwkgKiBSZW1lbWJlciB0aGUgc2VsZWN0aW9uIGR1cmluZyBpbml0aWFsaXphdGlvbiBmb3IgcG9wdWxhdGluZyB0aGUgZGVmYXVsdCBjb250YWluZXIuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIElTdHJ1Y3R1cmVkU2VsZWN0aW9uIHNlbGVjdGlvbjsKKworCS8qKgorCSAqIFJlbWVtYmVyIHRoZSB3b3JrYmVuY2ggZHVyaW5nIGluaXRpYWxpemF0aW9uLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBJV29ya2JlbmNoIHdvcmtiZW5jaDsKKworCS8qKgorCSAqIENhY2hlcyB0aGUgbmFtZXMgb2YgdGhlIHR5cGVzIHRoYXQgY2FuIGJlIGNyZWF0ZWQgYXMgdGhlIHJvb3Qgb2JqZWN0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBMaXN0PFN0cmluZz4gaW5pdGlhbE9iamVjdE5hbWVzOworCisJLyoqCisJICogVGhpcyBqdXN0IHJlY29yZHMgdGhlIGluZm9ybWF0aW9uLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIGluaXQoSVdvcmtiZW5jaCB3b3JrYmVuY2gsIElTdHJ1Y3R1cmVkU2VsZWN0aW9uIHNlbGVjdGlvbikgeworCQl0aGlzLndvcmtiZW5jaCA9IHdvcmtiZW5jaDsKKwkJdGhpcy5zZWxlY3Rpb24gPSBzZWxlY3Rpb247CisJCXNldFdpbmRvd1RpdGxlKENTVkxvZ2dlckVkaXRQbHVnaW4uSU5TVEFOQ0UuZ2V0U3RyaW5nKCJfVUlfV2l6YXJkX2xhYmVsIikpOworCQlzZXREZWZhdWx0UGFnZUltYWdlRGVzY3JpcHRvcihFeHRlbmRlZEltYWdlUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0SW1hZ2VEZXNjcmlwdG9yKENTVkxvZ2dlckVkaXRQbHVnaW4uSU5TVEFOQ0UuZ2V0SW1hZ2UoImZ1bGwvd2l6YmFuL05ld0NTViIpKSk7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgbmFtZXMgb2YgdGhlIHR5cGVzIHRoYXQgY2FuIGJlIGNyZWF0ZWQgYXMgdGhlIHJvb3Qgb2JqZWN0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBDb2xsZWN0aW9uPFN0cmluZz4gZ2V0SW5pdGlhbE9iamVjdE5hbWVzKCkgeworCQlpZiAoaW5pdGlhbE9iamVjdE5hbWVzID09IG51bGwpIHsKKwkJCWluaXRpYWxPYmplY3ROYW1lcyA9IG5ldyBBcnJheUxpc3Q8U3RyaW5nPigpOworCQkJZm9yIChFQ2xhc3NpZmllciBlQ2xhc3NpZmllciA6IGNzdlBhY2thZ2UuZ2V0RUNsYXNzaWZpZXJzKCkpIHsKKwkJCQlpZiAoZUNsYXNzaWZpZXIgaW5zdGFuY2VvZiBFQ2xhc3MpIHsKKwkJCQkJRUNsYXNzIGVDbGFzcyA9IChFQ2xhc3MpZUNsYXNzaWZpZXI7CisJCQkJCWlmICghZUNsYXNzLmlzQWJzdHJhY3QoKSkgeworCQkJCQkJaW5pdGlhbE9iamVjdE5hbWVzLmFkZChlQ2xhc3MuZ2V0TmFtZSgpKTsKKwkJCQkJfQorCQkJCX0KKwkJCX0KKwkJCUNvbGxlY3Rpb25zLnNvcnQoaW5pdGlhbE9iamVjdE5hbWVzLCBDb21tb25QbHVnaW4uSU5TVEFOQ0UuZ2V0Q29tcGFyYXRvcigpKTsKKwkJfQorCQlyZXR1cm4gaW5pdGlhbE9iamVjdE5hbWVzOworCX0KKworCS8qKgorCSAqIENyZWF0ZSBhIG5ldyBtb2RlbC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgRU9iamVjdCBjcmVhdGVJbml0aWFsTW9kZWwoKSB7CisJCUVDbGFzcyBlQ2xhc3MgPSAoRUNsYXNzKWNzdlBhY2thZ2UuZ2V0RUNsYXNzaWZpZXIoaW5pdGlhbE9iamVjdENyZWF0aW9uUGFnZS5nZXRJbml0aWFsT2JqZWN0TmFtZSgpKTsKKwkJRU9iamVjdCByb290T2JqZWN0ID0gY3N2RmFjdG9yeS5jcmVhdGUoZUNsYXNzKTsKKwkJcmV0dXJuIHJvb3RPYmplY3Q7CisJfQorCisJLyoqCisJICogRG8gdGhlIHdvcmsgYWZ0ZXIgZXZlcnl0aGluZyBpcyBzcGVjaWZpZWQuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIGJvb2xlYW4gcGVyZm9ybUZpbmlzaCgpIHsKKwkJdHJ5IHsKKwkJCS8vIFJlbWVtYmVyIHRoZSBmaWxlLgorCQkJLy8KKwkJCWZpbmFsIElGaWxlIG1vZGVsRmlsZSA9IGdldE1vZGVsRmlsZSgpOworCisJCQkvLyBEbyB0aGUgd29yayB3aXRoaW4gYW4gb3BlcmF0aW9uLgorCQkJLy8KKwkJCVdvcmtzcGFjZU1vZGlmeU9wZXJhdGlvbiBvcGVyYXRpb24gPQorCQkJCW5ldyBXb3Jrc3BhY2VNb2RpZnlPcGVyYXRpb24oKSB7CisJCQkJCUBPdmVycmlkZQorCQkJCQlwcm90ZWN0ZWQgdm9pZCBleGVjdXRlKElQcm9ncmVzc01vbml0b3IgcHJvZ3Jlc3NNb25pdG9yKSB7CisJCQkJCQl0cnkgeworCQkJCQkJCS8vIENyZWF0ZSBhIHJlc291cmNlIHNldAorCQkJCQkJCS8vCisJCQkJCQkJUmVzb3VyY2VTZXQgcmVzb3VyY2VTZXQgPSBuZXcgUmVzb3VyY2VTZXRJbXBsKCk7CisKKwkJCQkJCQkvLyBHZXQgdGhlIFVSSSBvZiB0aGUgbW9kZWwgZmlsZS4KKwkJCQkJCQkvLworCQkJCQkJCVVSSSBmaWxlVVJJID0gVVJJLmNyZWF0ZVBsYXRmb3JtUmVzb3VyY2VVUkkobW9kZWxGaWxlLmdldEZ1bGxQYXRoKCkudG9TdHJpbmcoKSwgdHJ1ZSk7CisKKwkJCQkJCQkvLyBDcmVhdGUgYSByZXNvdXJjZSBmb3IgdGhpcyBmaWxlLgorCQkJCQkJCS8vCisJCQkJCQkJUmVzb3VyY2UgcmVzb3VyY2UgPSByZXNvdXJjZVNldC5jcmVhdGVSZXNvdXJjZShmaWxlVVJJKTsKKworCQkJCQkJCS8vIEFkZCB0aGUgaW5pdGlhbCBtb2RlbCBvYmplY3QgdG8gdGhlIGNvbnRlbnRzLgorCQkJCQkJCS8vCisJCQkJCQkJRU9iamVjdCByb290T2JqZWN0ID0gY3JlYXRlSW5pdGlhbE1vZGVsKCk7CisJCQkJCQkJaWYgKHJvb3RPYmplY3QgIT0gbnVsbCkgeworCQkJCQkJCQlyZXNvdXJjZS5nZXRDb250ZW50cygpLmFkZChyb290T2JqZWN0KTsKKwkJCQkJCQl9CisKKwkJCQkJCQkvLyBTYXZlIHRoZSBjb250ZW50cyBvZiB0aGUgcmVzb3VyY2UgdG8gdGhlIGZpbGUgc3lzdGVtLgorCQkJCQkJCS8vCisJCQkJCQkJTWFwPE9iamVjdCwgT2JqZWN0PiBvcHRpb25zID0gbmV3IEhhc2hNYXA8T2JqZWN0LCBPYmplY3Q+KCk7CisJCQkJCQkJb3B0aW9ucy5wdXQoWE1MUmVzb3VyY2UuT1BUSU9OX0VOQ09ESU5HLCBpbml0aWFsT2JqZWN0Q3JlYXRpb25QYWdlLmdldEVuY29kaW5nKCkpOworCQkJCQkJCXJlc291cmNlLnNhdmUob3B0aW9ucyk7CisJCQkJCQl9CisJCQkJCQljYXRjaCAoRXhjZXB0aW9uIGV4Y2VwdGlvbikgeworCQkJCQkJCUNTVkxvZ2dlckVkaXRQbHVnaW4uSU5TVEFOQ0UubG9nKGV4Y2VwdGlvbik7CisJCQkJCQl9CisJCQkJCQlmaW5hbGx5IHsKKwkJCQkJCQlwcm9ncmVzc01vbml0b3IuZG9uZSgpOworCQkJCQkJfQorCQkJCQl9CisJCQkJfTsKKworCQkJZ2V0Q29udGFpbmVyKCkucnVuKGZhbHNlLCBmYWxzZSwgb3BlcmF0aW9uKTsKKworCQkJLy8gU2VsZWN0IHRoZSBuZXcgZmlsZSByZXNvdXJjZSBpbiB0aGUgY3VycmVudCB2aWV3LgorCQkJLy8KKwkJCUlXb3JrYmVuY2hXaW5kb3cgd29ya2JlbmNoV2luZG93ID0gd29ya2JlbmNoLmdldEFjdGl2ZVdvcmtiZW5jaFdpbmRvdygpOworCQkJSVdvcmtiZW5jaFBhZ2UgcGFnZSA9IHdvcmtiZW5jaFdpbmRvdy5nZXRBY3RpdmVQYWdlKCk7CisJCQlmaW5hbCBJV29ya2JlbmNoUGFydCBhY3RpdmVQYXJ0ID0gcGFnZS5nZXRBY3RpdmVQYXJ0KCk7CisJCQlpZiAoYWN0aXZlUGFydCBpbnN0YW5jZW9mIElTZXRTZWxlY3Rpb25UYXJnZXQpIHsKKwkJCQlmaW5hbCBJU2VsZWN0aW9uIHRhcmdldFNlbGVjdGlvbiA9IG5ldyBTdHJ1Y3R1cmVkU2VsZWN0aW9uKG1vZGVsRmlsZSk7CisJCQkJZ2V0U2hlbGwoKS5nZXREaXNwbGF5KCkuYXN5bmNFeGVjCisJCQkJCShuZXcgUnVubmFibGUoKSB7CisJCQkJCQkgcHVibGljIHZvaWQgcnVuKCkgeworCQkJCQkJCSAoKElTZXRTZWxlY3Rpb25UYXJnZXQpYWN0aXZlUGFydCkuc2VsZWN0UmV2ZWFsKHRhcmdldFNlbGVjdGlvbik7CisJCQkJCQkgfQorCQkJCQkgfSk7CisJCQl9CisKKwkJCS8vIE9wZW4gYW4gZWRpdG9yIG9uIHRoZSBuZXcgZmlsZS4KKwkJCS8vCisJCQl0cnkgeworCQkJCXBhZ2Uub3BlbkVkaXRvcgorCQkJCQkobmV3IEZpbGVFZGl0b3JJbnB1dChtb2RlbEZpbGUpLAorCQkJCQkgd29ya2JlbmNoLmdldEVkaXRvclJlZ2lzdHJ5KCkuZ2V0RGVmYXVsdEVkaXRvcihtb2RlbEZpbGUuZ2V0RnVsbFBhdGgoKS50b1N0cmluZygpKS5nZXRJZCgpKTsJCQkJCSAJIAorCQkJfQorCQkJY2F0Y2ggKFBhcnRJbml0RXhjZXB0aW9uIGV4Y2VwdGlvbikgeworCQkJCU1lc3NhZ2VEaWFsb2cub3BlbkVycm9yKHdvcmtiZW5jaFdpbmRvdy5nZXRTaGVsbCgpLCBDU1ZMb2dnZXJFZGl0UGx1Z2luLklOU1RBTkNFLmdldFN0cmluZygiX1VJX09wZW5FZGl0b3JFcnJvcl9sYWJlbCIpLCBleGNlcHRpb24uZ2V0TWVzc2FnZSgpKTsKKwkJCQlyZXR1cm4gZmFsc2U7CisJCQl9CisKKwkJCXJldHVybiB0cnVlOworCQl9CisJCWNhdGNoIChFeGNlcHRpb24gZXhjZXB0aW9uKSB7CisJCQlDU1ZMb2dnZXJFZGl0UGx1Z2luLklOU1RBTkNFLmxvZyhleGNlcHRpb24pOworCQkJcmV0dXJuIGZhbHNlOworCQl9CisJfQorCisJLyoqCisJICogVGhpcyBpcyB0aGUgb25lIHBhZ2Ugb2YgdGhlIHdpemFyZC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgY2xhc3MgQ1NWTW9kZWxXaXphcmROZXdGaWxlQ3JlYXRpb25QYWdlIGV4dGVuZHMgV2l6YXJkTmV3RmlsZUNyZWF0aW9uUGFnZSB7CisJCS8qKgorCQkgKiBQYXNzIGluIHRoZSBzZWxlY3Rpb24uCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlwdWJsaWMgQ1NWTW9kZWxXaXphcmROZXdGaWxlQ3JlYXRpb25QYWdlKFN0cmluZyBwYWdlSWQsIElTdHJ1Y3R1cmVkU2VsZWN0aW9uIHNlbGVjdGlvbikgeworCQkJc3VwZXIocGFnZUlkLCBzZWxlY3Rpb24pOworCQl9CisKKwkJLyoqCisJCSAqIFRoZSBmcmFtZXdvcmsgY2FsbHMgdGhpcyB0byBzZWUgaWYgdGhlIGZpbGUgaXMgY29ycmVjdC4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUBPdmVycmlkZQorCQlwcm90ZWN0ZWQgYm9vbGVhbiB2YWxpZGF0ZVBhZ2UoKSB7CisJCQlpZiAoc3VwZXIudmFsaWRhdGVQYWdlKCkpIHsKKwkJCQlTdHJpbmcgZXh0ZW5zaW9uID0gbmV3IFBhdGgoZ2V0RmlsZU5hbWUoKSkuZ2V0RmlsZUV4dGVuc2lvbigpOworCQkJCWlmIChleHRlbnNpb24gPT0gbnVsbCB8fCAhRklMRV9FWFRFTlNJT05TLmNvbnRhaW5zKGV4dGVuc2lvbikpIHsKKwkJCQkJU3RyaW5nIGtleSA9IEZJTEVfRVhURU5TSU9OUy5zaXplKCkgPiAxID8gIl9XQVJOX0ZpbGVuYW1lRXh0ZW5zaW9ucyIgOiAiX1dBUk5fRmlsZW5hbWVFeHRlbnNpb24iOworCQkJCQlzZXRFcnJvck1lc3NhZ2UoQ1NWTG9nZ2VyRWRpdFBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoa2V5LCBuZXcgT2JqZWN0IFtdIHsgRk9STUFUVEVEX0ZJTEVfRVhURU5TSU9OUyB9KSk7CisJCQkJCXJldHVybiBmYWxzZTsKKwkJCQl9CisJCQkJcmV0dXJuIHRydWU7CisJCQl9CisJCQlyZXR1cm4gZmFsc2U7CisJCX0KKworCQkvKioKKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCXB1YmxpYyBJRmlsZSBnZXRNb2RlbEZpbGUoKSB7CisJCQlyZXR1cm4gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmdldFJvb3QoKS5nZXRGaWxlKGdldENvbnRhaW5lckZ1bGxQYXRoKCkuYXBwZW5kKGdldEZpbGVOYW1lKCkpKTsKKwkJfQorCX0KKworCS8qKgorCSAqIFRoaXMgaXMgdGhlIHBhZ2Ugd2hlcmUgdGhlIHR5cGUgb2Ygb2JqZWN0IHRvIGNyZWF0ZSBpcyBzZWxlY3RlZC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgY2xhc3MgQ1NWTW9kZWxXaXphcmRJbml0aWFsT2JqZWN0Q3JlYXRpb25QYWdlIGV4dGVuZHMgV2l6YXJkUGFnZSB7CisJCS8qKgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJcHJvdGVjdGVkIENvbWJvIGluaXRpYWxPYmplY3RGaWVsZDsKKworCQkvKioKKwkJICogQGdlbmVyYXRlZAorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICovCisJCXByb3RlY3RlZCBMaXN0PFN0cmluZz4gZW5jb2RpbmdzOworCisJCS8qKgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJcHJvdGVjdGVkIENvbWJvIGVuY29kaW5nRmllbGQ7CisKKwkJLyoqCisJCSAqIFBhc3MgaW4gdGhlIHNlbGVjdGlvbi4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCXB1YmxpYyBDU1ZNb2RlbFdpemFyZEluaXRpYWxPYmplY3RDcmVhdGlvblBhZ2UoU3RyaW5nIHBhZ2VJZCkgeworCQkJc3VwZXIocGFnZUlkKTsKKwkJfQorCisJCS8qKgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJcHVibGljIHZvaWQgY3JlYXRlQ29udHJvbChDb21wb3NpdGUgcGFyZW50KSB7CisJCQlDb21wb3NpdGUgY29tcG9zaXRlID0gbmV3IENvbXBvc2l0ZShwYXJlbnQsIFNXVC5OT05FKTsgeworCQkJCUdyaWRMYXlvdXQgbGF5b3V0ID0gbmV3IEdyaWRMYXlvdXQoKTsKKwkJCQlsYXlvdXQubnVtQ29sdW1ucyA9IDE7CisJCQkJbGF5b3V0LnZlcnRpY2FsU3BhY2luZyA9IDEyOworCQkJCWNvbXBvc2l0ZS5zZXRMYXlvdXQobGF5b3V0KTsKKworCQkJCUdyaWREYXRhIGRhdGEgPSBuZXcgR3JpZERhdGEoKTsKKwkJCQlkYXRhLnZlcnRpY2FsQWxpZ25tZW50ID0gR3JpZERhdGEuRklMTDsKKwkJCQlkYXRhLmdyYWJFeGNlc3NWZXJ0aWNhbFNwYWNlID0gdHJ1ZTsKKwkJCQlkYXRhLmhvcml6b250YWxBbGlnbm1lbnQgPSBHcmlkRGF0YS5GSUxMOworCQkJCWNvbXBvc2l0ZS5zZXRMYXlvdXREYXRhKGRhdGEpOworCQkJfQorCisJCQlMYWJlbCBjb250YWluZXJMYWJlbCA9IG5ldyBMYWJlbChjb21wb3NpdGUsIFNXVC5MRUZUKTsKKwkJCXsKKwkJCQljb250YWluZXJMYWJlbC5zZXRUZXh0KENTVkxvZ2dlckVkaXRQbHVnaW4uSU5TVEFOQ0UuZ2V0U3RyaW5nKCJfVUlfTW9kZWxPYmplY3QiKSk7CisKKwkJCQlHcmlkRGF0YSBkYXRhID0gbmV3IEdyaWREYXRhKCk7CisJCQkJZGF0YS5ob3Jpem9udGFsQWxpZ25tZW50ID0gR3JpZERhdGEuRklMTDsKKwkJCQljb250YWluZXJMYWJlbC5zZXRMYXlvdXREYXRhKGRhdGEpOworCQkJfQorCisJCQlpbml0aWFsT2JqZWN0RmllbGQgPSBuZXcgQ29tYm8oY29tcG9zaXRlLCBTV1QuQk9SREVSKTsKKwkJCXsKKwkJCQlHcmlkRGF0YSBkYXRhID0gbmV3IEdyaWREYXRhKCk7CisJCQkJZGF0YS5ob3Jpem9udGFsQWxpZ25tZW50ID0gR3JpZERhdGEuRklMTDsKKwkJCQlkYXRhLmdyYWJFeGNlc3NIb3Jpem9udGFsU3BhY2UgPSB0cnVlOworCQkJCWluaXRpYWxPYmplY3RGaWVsZC5zZXRMYXlvdXREYXRhKGRhdGEpOworCQkJfQorCisJCQlmb3IgKFN0cmluZyBvYmplY3ROYW1lIDogZ2V0SW5pdGlhbE9iamVjdE5hbWVzKCkpIHsKKwkJCQlpbml0aWFsT2JqZWN0RmllbGQuYWRkKGdldExhYmVsKG9iamVjdE5hbWUpKTsKKwkJCX0KKworCQkJaWYgKGluaXRpYWxPYmplY3RGaWVsZC5nZXRJdGVtQ291bnQoKSA9PSAxKSB7CisJCQkJaW5pdGlhbE9iamVjdEZpZWxkLnNlbGVjdCgwKTsKKwkJCX0KKwkJCWluaXRpYWxPYmplY3RGaWVsZC5hZGRNb2RpZnlMaXN0ZW5lcih2YWxpZGF0b3IpOworCisJCQlMYWJlbCBlbmNvZGluZ0xhYmVsID0gbmV3IExhYmVsKGNvbXBvc2l0ZSwgU1dULkxFRlQpOworCQkJeworCQkJCWVuY29kaW5nTGFiZWwuc2V0VGV4dChDU1ZMb2dnZXJFZGl0UGx1Z2luLklOU1RBTkNFLmdldFN0cmluZygiX1VJX1hNTEVuY29kaW5nIikpOworCisJCQkJR3JpZERhdGEgZGF0YSA9IG5ldyBHcmlkRGF0YSgpOworCQkJCWRhdGEuaG9yaXpvbnRhbEFsaWdubWVudCA9IEdyaWREYXRhLkZJTEw7CisJCQkJZW5jb2RpbmdMYWJlbC5zZXRMYXlvdXREYXRhKGRhdGEpOworCQkJfQorCQkJZW5jb2RpbmdGaWVsZCA9IG5ldyBDb21ibyhjb21wb3NpdGUsIFNXVC5CT1JERVIpOworCQkJeworCQkJCUdyaWREYXRhIGRhdGEgPSBuZXcgR3JpZERhdGEoKTsKKwkJCQlkYXRhLmhvcml6b250YWxBbGlnbm1lbnQgPSBHcmlkRGF0YS5GSUxMOworCQkJCWRhdGEuZ3JhYkV4Y2Vzc0hvcml6b250YWxTcGFjZSA9IHRydWU7CisJCQkJZW5jb2RpbmdGaWVsZC5zZXRMYXlvdXREYXRhKGRhdGEpOworCQkJfQorCisJCQlmb3IgKFN0cmluZyBlbmNvZGluZyA6IGdldEVuY29kaW5ncygpKSB7CisJCQkJZW5jb2RpbmdGaWVsZC5hZGQoZW5jb2RpbmcpOworCQkJfQorCisJCQllbmNvZGluZ0ZpZWxkLnNlbGVjdCgwKTsKKwkJCWVuY29kaW5nRmllbGQuYWRkTW9kaWZ5TGlzdGVuZXIodmFsaWRhdG9yKTsKKworCQkJc2V0UGFnZUNvbXBsZXRlKHZhbGlkYXRlUGFnZSgpKTsKKwkJCXNldENvbnRyb2woY29tcG9zaXRlKTsKKwkJfQorCisJCS8qKgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJcHJvdGVjdGVkIE1vZGlmeUxpc3RlbmVyIHZhbGlkYXRvciA9CisJCQluZXcgTW9kaWZ5TGlzdGVuZXIoKSB7CisJCQkJcHVibGljIHZvaWQgbW9kaWZ5VGV4dChNb2RpZnlFdmVudCBlKSB7CisJCQkJCXNldFBhZ2VDb21wbGV0ZSh2YWxpZGF0ZVBhZ2UoKSk7CisJCQkJfQorCQkJfTsKKworCQkvKioKKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCXByb3RlY3RlZCBib29sZWFuIHZhbGlkYXRlUGFnZSgpIHsKKwkJCXJldHVybiBnZXRJbml0aWFsT2JqZWN0TmFtZSgpICE9IG51bGwgJiYgZ2V0RW5jb2RpbmdzKCkuY29udGFpbnMoZW5jb2RpbmdGaWVsZC5nZXRUZXh0KCkpOworCQl9CisKKwkJLyoqCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlAT3ZlcnJpZGUKKwkJcHVibGljIHZvaWQgc2V0VmlzaWJsZShib29sZWFuIHZpc2libGUpIHsKKwkJCXN1cGVyLnNldFZpc2libGUodmlzaWJsZSk7CisJCQlpZiAodmlzaWJsZSkgeworCQkJCWlmIChpbml0aWFsT2JqZWN0RmllbGQuZ2V0SXRlbUNvdW50KCkgPT0gMSkgeworCQkJCQlpbml0aWFsT2JqZWN0RmllbGQuY2xlYXJTZWxlY3Rpb24oKTsKKwkJCQkJZW5jb2RpbmdGaWVsZC5zZXRGb2N1cygpOworCQkJCX0KKwkJCQllbHNlIHsKKwkJCQkJZW5jb2RpbmdGaWVsZC5jbGVhclNlbGVjdGlvbigpOworCQkJCQlpbml0aWFsT2JqZWN0RmllbGQuc2V0Rm9jdXMoKTsKKwkJCQl9CisJCQl9CisJCX0KKworCQkvKioKKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCXB1YmxpYyBTdHJpbmcgZ2V0SW5pdGlhbE9iamVjdE5hbWUoKSB7CisJCQlTdHJpbmcgbGFiZWwgPSBpbml0aWFsT2JqZWN0RmllbGQuZ2V0VGV4dCgpOworCisJCQlmb3IgKFN0cmluZyBuYW1lIDogZ2V0SW5pdGlhbE9iamVjdE5hbWVzKCkpIHsKKwkJCQlpZiAoZ2V0TGFiZWwobmFtZSkuZXF1YWxzKGxhYmVsKSkgeworCQkJCQlyZXR1cm4gbmFtZTsKKwkJCQl9CisJCQl9CisJCQlyZXR1cm4gbnVsbDsKKwkJfQorCisJCS8qKgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJcHVibGljIFN0cmluZyBnZXRFbmNvZGluZygpIHsKKwkJCXJldHVybiBlbmNvZGluZ0ZpZWxkLmdldFRleHQoKTsKKwkJfQorCisJCS8qKgorCQkgKiBSZXR1cm5zIHRoZSBsYWJlbCBmb3IgdGhlIHNwZWNpZmllZCB0eXBlIG5hbWUuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlwcm90ZWN0ZWQgU3RyaW5nIGdldExhYmVsKFN0cmluZyB0eXBlTmFtZSkgeworCQkJdHJ5IHsKKwkJCQlyZXR1cm4gQ1NWTG9nZ2VyRWRpdFBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoIl9VSV8iICsgdHlwZU5hbWUgKyAiX3R5cGUiKTsKKwkJCX0KKwkJCWNhdGNoKE1pc3NpbmdSZXNvdXJjZUV4Y2VwdGlvbiBtcmUpIHsKKwkJCQlDU1ZMb2dnZXJFZGl0UGx1Z2luLklOU1RBTkNFLmxvZyhtcmUpOworCQkJfQorCQkJcmV0dXJuIHR5cGVOYW1lOworCQl9CisKKwkJLyoqCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlwcm90ZWN0ZWQgQ29sbGVjdGlvbjxTdHJpbmc+IGdldEVuY29kaW5ncygpIHsKKwkJCWlmIChlbmNvZGluZ3MgPT0gbnVsbCkgeworCQkJCWVuY29kaW5ncyA9IG5ldyBBcnJheUxpc3Q8U3RyaW5nPigpOworCQkJCWZvciAoU3RyaW5nVG9rZW5pemVyIHN0cmluZ1Rva2VuaXplciA9IG5ldyBTdHJpbmdUb2tlbml6ZXIoQ1NWTG9nZ2VyRWRpdFBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoIl9VSV9YTUxFbmNvZGluZ0Nob2ljZXMiKSk7IHN0cmluZ1Rva2VuaXplci5oYXNNb3JlVG9rZW5zKCk7ICkgeworCQkJCQllbmNvZGluZ3MuYWRkKHN0cmluZ1Rva2VuaXplci5uZXh0VG9rZW4oKSk7CisJCQkJfQorCQkJfQorCQkJcmV0dXJuIGVuY29kaW5nczsKKwkJfQorCX0KKworCS8qKgorCSAqIFRoZSBmcmFtZXdvcmsgY2FsbHMgdGhpcyB0byBjcmVhdGUgdGhlIGNvbnRlbnRzIG9mIHRoZSB3aXphcmQuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGFkZFBhZ2VzKCkgeworCQkvLyBDcmVhdGUgYSBwYWdlLCBzZXQgdGhlIHRpdGxlLCBhbmQgdGhlIGluaXRpYWwgbW9kZWwgZmlsZSBuYW1lLgorCQkvLworCQluZXdGaWxlQ3JlYXRpb25QYWdlID0gbmV3IENTVk1vZGVsV2l6YXJkTmV3RmlsZUNyZWF0aW9uUGFnZSgiV2hhdGV2ZXIiLCBzZWxlY3Rpb24pOworCQluZXdGaWxlQ3JlYXRpb25QYWdlLnNldFRpdGxlKENTVkxvZ2dlckVkaXRQbHVnaW4uSU5TVEFOQ0UuZ2V0U3RyaW5nKCJfVUlfQ1NWTW9kZWxXaXphcmRfbGFiZWwiKSk7CisJCW5ld0ZpbGVDcmVhdGlvblBhZ2Uuc2V0RGVzY3JpcHRpb24oQ1NWTG9nZ2VyRWRpdFBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoIl9VSV9DU1ZNb2RlbFdpemFyZF9kZXNjcmlwdGlvbiIpKTsKKwkJbmV3RmlsZUNyZWF0aW9uUGFnZS5zZXRGaWxlTmFtZShDU1ZMb2dnZXJFZGl0UGx1Z2luLklOU1RBTkNFLmdldFN0cmluZygiX1VJX0NTVkVkaXRvckZpbGVuYW1lRGVmYXVsdEJhc2UiKSArICIuIiArIEZJTEVfRVhURU5TSU9OUy5nZXQoMCkpOworCQlhZGRQYWdlKG5ld0ZpbGVDcmVhdGlvblBhZ2UpOworCisJCS8vIFRyeSBhbmQgZ2V0IHRoZSByZXNvdXJjZSBzZWxlY3Rpb24gdG8gZGV0ZXJtaW5lIGEgY3VycmVudCBkaXJlY3RvcnkgZm9yIHRoZSBmaWxlIGRpYWxvZy4KKwkJLy8KKwkJaWYgKHNlbGVjdGlvbiAhPSBudWxsICYmICFzZWxlY3Rpb24uaXNFbXB0eSgpKSB7CisJCQkvLyBHZXQgdGhlIHJlc291cmNlLi4uCisJCQkvLworCQkJT2JqZWN0IHNlbGVjdGVkRWxlbWVudCA9IHNlbGVjdGlvbi5pdGVyYXRvcigpLm5leHQoKTsKKwkJCWlmIChzZWxlY3RlZEVsZW1lbnQgaW5zdGFuY2VvZiBJUmVzb3VyY2UpIHsKKwkJCQkvLyBHZXQgdGhlIHJlc291cmNlIHBhcmVudCwgaWYgaXRzIGEgZmlsZS4KKwkJCQkvLworCQkJCUlSZXNvdXJjZSBzZWxlY3RlZFJlc291cmNlID0gKElSZXNvdXJjZSlzZWxlY3RlZEVsZW1lbnQ7CisJCQkJaWYgKHNlbGVjdGVkUmVzb3VyY2UuZ2V0VHlwZSgpID09IElSZXNvdXJjZS5GSUxFKSB7CisJCQkJCXNlbGVjdGVkUmVzb3VyY2UgPSBzZWxlY3RlZFJlc291cmNlLmdldFBhcmVudCgpOworCQkJCX0KKworCQkJCS8vIFRoaXMgZ2l2ZXMgdXMgYSBkaXJlY3RvcnkuLi4KKwkJCQkvLworCQkJCWlmIChzZWxlY3RlZFJlc291cmNlIGluc3RhbmNlb2YgSUZvbGRlciB8fCBzZWxlY3RlZFJlc291cmNlIGluc3RhbmNlb2YgSVByb2plY3QpIHsKKwkJCQkJLy8gU2V0IHRoaXMgZm9yIHRoZSBjb250YWluZXIuCisJCQkJCS8vCisJCQkJCW5ld0ZpbGVDcmVhdGlvblBhZ2Uuc2V0Q29udGFpbmVyRnVsbFBhdGgoc2VsZWN0ZWRSZXNvdXJjZS5nZXRGdWxsUGF0aCgpKTsKKworCQkJCQkvLyBNYWtlIHVwIGEgdW5pcXVlIG5ldyBuYW1lIGhlcmUuCisJCQkJCS8vCisJCQkJCVN0cmluZyBkZWZhdWx0TW9kZWxCYXNlRmlsZW5hbWUgPSBDU1ZMb2dnZXJFZGl0UGx1Z2luLklOU1RBTkNFLmdldFN0cmluZygiX1VJX0NTVkVkaXRvckZpbGVuYW1lRGVmYXVsdEJhc2UiKTsKKwkJCQkJU3RyaW5nIGRlZmF1bHRNb2RlbEZpbGVuYW1lRXh0ZW5zaW9uID0gRklMRV9FWFRFTlNJT05TLmdldCgwKTsKKwkJCQkJU3RyaW5nIG1vZGVsRmlsZW5hbWUgPSBkZWZhdWx0TW9kZWxCYXNlRmlsZW5hbWUgKyAiLiIgKyBkZWZhdWx0TW9kZWxGaWxlbmFtZUV4dGVuc2lvbjsKKwkJCQkJZm9yIChpbnQgaSA9IDE7ICgoSUNvbnRhaW5lcilzZWxlY3RlZFJlc291cmNlKS5maW5kTWVtYmVyKG1vZGVsRmlsZW5hbWUpICE9IG51bGw7ICsraSkgeworCQkJCQkJbW9kZWxGaWxlbmFtZSA9IGRlZmF1bHRNb2RlbEJhc2VGaWxlbmFtZSArIGkgKyAiLiIgKyBkZWZhdWx0TW9kZWxGaWxlbmFtZUV4dGVuc2lvbjsKKwkJCQkJfQorCQkJCQluZXdGaWxlQ3JlYXRpb25QYWdlLnNldEZpbGVOYW1lKG1vZGVsRmlsZW5hbWUpOworCQkJCX0KKwkJCX0KKwkJfQorCQlpbml0aWFsT2JqZWN0Q3JlYXRpb25QYWdlID0gbmV3IENTVk1vZGVsV2l6YXJkSW5pdGlhbE9iamVjdENyZWF0aW9uUGFnZSgiV2hhdGV2ZXIyIik7CisJCWluaXRpYWxPYmplY3RDcmVhdGlvblBhZ2Uuc2V0VGl0bGUoQ1NWTG9nZ2VyRWRpdFBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoIl9VSV9DU1ZNb2RlbFdpemFyZF9sYWJlbCIpKTsKKwkJaW5pdGlhbE9iamVjdENyZWF0aW9uUGFnZS5zZXREZXNjcmlwdGlvbihDU1ZMb2dnZXJFZGl0UGx1Z2luLklOU1RBTkNFLmdldFN0cmluZygiX1VJX1dpemFyZF9pbml0aWFsX29iamVjdF9kZXNjcmlwdGlvbiIpKTsKKwkJYWRkUGFnZShpbml0aWFsT2JqZWN0Q3JlYXRpb25QYWdlKTsKKwl9CisKKwkvKioKKwkgKiBHZXQgdGhlIGZpbGUgZnJvbSB0aGUgcGFnZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgSUZpbGUgZ2V0TW9kZWxGaWxlKCkgeworCQlyZXR1cm4gbmV3RmlsZUNyZWF0aW9uUGFnZS5nZXRNb2RlbEZpbGUoKTsKKwl9CisKK30KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzLmNzdi9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9sb2dnZXJzL2Nzdi9wcm92aWRlci9DU1ZJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeS5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMuY3N2L3NyYy9vcmcvZWNsaXBzZS9zdGVtL2xvZ2dlcnMvY3N2L3Byb3ZpZGVyL0NTVkl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTc4N2M1MQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzLmNzdi9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9sb2dnZXJzL2Nzdi9wcm92aWRlci9DU1ZJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeS5qYXZhCkBAIC0wLDAgKzEsMjAzIEBACisvKioKKyAqIDxjb3B5cmlnaHQ+CisgKiA8L2NvcHlyaWdodD4KKyAqCisgKiAkSWQkCisgKi8KK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzLmNzdi5wcm92aWRlcjsKKworaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7CitpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5BZGFwdGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmllcjsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkNoYW5nZU5vdGlmaWVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkNvbXBvc2VhYmxlQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuQ29tcG9zZWRBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JQ2hhbmdlTm90aWZpZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSURpc3Bvc2FibGU7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUVkaXRpbmdEb21haW5JdGVtUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1MYWJlbFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtUHJvcGVydHlTb3VyY2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSU5vdGlmeUNoYW5nZWRMaXN0ZW5lcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JU3RydWN0dXJlZEl0ZW1Db250ZW50UHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVRyZWVJdGVtQ29udGVudFByb3ZpZGVyOworCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzLmNzdi51dGlsLkNTVkFkYXB0ZXJGYWN0b3J5OworCisvKioKKyAqIFRoaXMgaXMgdGhlIGZhY3RvcnkgdGhhdCBpcyB1c2VkIHRvIHByb3ZpZGUgdGhlIGludGVyZmFjZXMgbmVlZGVkIHRvIHN1cHBvcnQgVmlld2Vycy4KKyAqIFRoZSBhZGFwdGVycyBnZW5lcmF0ZWQgYnkgdGhpcyBmYWN0b3J5IGNvbnZlcnQgRU1GIGFkYXB0ZXIgbm90aWZpY2F0aW9ucyBpbnRvIGNhbGxzIHRvIHtAbGluayAjZmlyZU5vdGlmeUNoYW5nZWQgZmlyZU5vdGlmeUNoYW5nZWR9LgorICogVGhlIGFkYXB0ZXJzIGFsc28gc3VwcG9ydCBFY2xpcHNlIHByb3BlcnR5IHNoZWV0cy4KKyAqIE5vdGUgdGhhdCBtb3N0IG9mIHRoZSBhZGFwdGVycyBhcmUgc2hhcmVkIGFtb25nIG11bHRpcGxlIGluc3RhbmNlcy4KKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIENTVkl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5IGV4dGVuZHMgQ1NWQWRhcHRlckZhY3RvcnkgaW1wbGVtZW50cyBDb21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5LCBJQ2hhbmdlTm90aWZpZXIsIElEaXNwb3NhYmxlIHsKKwkvKioKKwkgKiBUaGlzIGtlZXBzIHRyYWNrIG9mIHRoZSByb290IGFkYXB0ZXIgZmFjdG9yeSB0aGF0IGRlbGVnYXRlcyB0byB0aGlzIGFkYXB0ZXIgZmFjdG9yeS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgQ29tcG9zZWRBZGFwdGVyRmFjdG9yeSBwYXJlbnRBZGFwdGVyRmFjdG9yeTsKKworCS8qKgorCSAqIFRoaXMgaXMgdXNlZCB0byBpbXBsZW1lbnQge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklDaGFuZ2VOb3RpZmllcn0uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIElDaGFuZ2VOb3RpZmllciBjaGFuZ2VOb3RpZmllciA9IG5ldyBDaGFuZ2VOb3RpZmllcigpOworCisJLyoqCisJICogVGhpcyBrZWVwcyB0cmFjayBvZiBhbGwgdGhlIHN1cHBvcnRlZCB0eXBlcyBjaGVja2VkIGJ5IHtAbGluayAjaXNGYWN0b3J5Rm9yVHlwZSBpc0ZhY3RvcnlGb3JUeXBlfS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgQ29sbGVjdGlvbjxPYmplY3Q+IHN1cHBvcnRlZFR5cGVzID0gbmV3IEFycmF5TGlzdDxPYmplY3Q+KCk7CisKKwkvKioKKwkgKiBUaGlzIGNvbnN0cnVjdHMgYW4gaW5zdGFuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIENTVkl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5KCkgeworCQlzdXBwb3J0ZWRUeXBlcy5hZGQoSUVkaXRpbmdEb21haW5JdGVtUHJvdmlkZXIuY2xhc3MpOworCQlzdXBwb3J0ZWRUeXBlcy5hZGQoSVN0cnVjdHVyZWRJdGVtQ29udGVudFByb3ZpZGVyLmNsYXNzKTsKKwkJc3VwcG9ydGVkVHlwZXMuYWRkKElUcmVlSXRlbUNvbnRlbnRQcm92aWRlci5jbGFzcyk7CisJCXN1cHBvcnRlZFR5cGVzLmFkZChJSXRlbUxhYmVsUHJvdmlkZXIuY2xhc3MpOworCQlzdXBwb3J0ZWRUeXBlcy5hZGQoSUl0ZW1Qcm9wZXJ0eVNvdXJjZS5jbGFzcyk7CisJfQorCisJLyoqCisJICogVGhpcyBrZWVwcyB0cmFjayBvZiB0aGUgb25lIGFkYXB0ZXIgdXNlZCBmb3IgYWxsIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMuY3N2LkNTVkxvZ2dlcn0gaW5zdGFuY2VzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBDU1ZMb2dnZXJJdGVtUHJvdmlkZXIgY3N2TG9nZ2VySXRlbVByb3ZpZGVyOworCisJLyoqCisJICogVGhpcyBjcmVhdGVzIGFuIGFkYXB0ZXIgZm9yIGEge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy5jc3YuQ1NWTG9nZ2VyfS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVDU1ZMb2dnZXJBZGFwdGVyKCkgeworCQlpZiAoY3N2TG9nZ2VySXRlbVByb3ZpZGVyID09IG51bGwpIHsKKwkJCWNzdkxvZ2dlckl0ZW1Qcm92aWRlciA9IG5ldyBDU1ZMb2dnZXJJdGVtUHJvdmlkZXIodGhpcyk7CisJCX0KKworCQlyZXR1cm4gY3N2TG9nZ2VySXRlbVByb3ZpZGVyOworCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyB0aGUgcm9vdCBhZGFwdGVyIGZhY3RvcnkgdGhhdCBjb250YWlucyB0aGlzIGZhY3RvcnkuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnkgZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCkgeworCQlyZXR1cm4gcGFyZW50QWRhcHRlckZhY3RvcnkgPT0gbnVsbCA/IHRoaXMgOiBwYXJlbnRBZGFwdGVyRmFjdG9yeS5nZXRSb290QWRhcHRlckZhY3RvcnkoKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHNldHMgdGhlIGNvbXBvc2VkIGFkYXB0ZXIgZmFjdG9yeSB0aGF0IGNvbnRhaW5zIHRoaXMgZmFjdG9yeS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRQYXJlbnRBZGFwdGVyRmFjdG9yeShDb21wb3NlZEFkYXB0ZXJGYWN0b3J5IHBhcmVudEFkYXB0ZXJGYWN0b3J5KSB7CisJCXRoaXMucGFyZW50QWRhcHRlckZhY3RvcnkgPSBwYXJlbnRBZGFwdGVyRmFjdG9yeTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgYm9vbGVhbiBpc0ZhY3RvcnlGb3JUeXBlKE9iamVjdCB0eXBlKSB7CisJCXJldHVybiBzdXBwb3J0ZWRUeXBlcy5jb250YWlucyh0eXBlKSB8fCBzdXBlci5pc0ZhY3RvcnlGb3JUeXBlKHR5cGUpOworCX0KKworCS8qKgorCSAqIFRoaXMgaW1wbGVtZW50YXRpb24gc3Vic3RpdHV0ZXMgdGhlIGZhY3RvcnkgaXRzZWxmIGFzIHRoZSBrZXkgZm9yIHRoZSBhZGFwdGVyLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBBZGFwdGVyIGFkYXB0KE5vdGlmaWVyIG5vdGlmaWVyLCBPYmplY3QgdHlwZSkgeworCQlyZXR1cm4gc3VwZXIuYWRhcHQobm90aWZpZXIsIHRoaXMpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBPYmplY3QgYWRhcHQoT2JqZWN0IG9iamVjdCwgT2JqZWN0IHR5cGUpIHsKKwkJaWYgKGlzRmFjdG9yeUZvclR5cGUodHlwZSkpIHsKKwkJCU9iamVjdCBhZGFwdGVyID0gc3VwZXIuYWRhcHQob2JqZWN0LCB0eXBlKTsKKwkJCWlmICghKHR5cGUgaW5zdGFuY2VvZiBDbGFzczw/PikgfHwgKCgoQ2xhc3M8Pz4pdHlwZSkuaXNJbnN0YW5jZShhZGFwdGVyKSkpIHsKKwkJCQlyZXR1cm4gYWRhcHRlcjsKKwkJCX0KKwkJfQorCisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyBhIGxpc3RlbmVyLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIGFkZExpc3RlbmVyKElOb3RpZnlDaGFuZ2VkTGlzdGVuZXIgbm90aWZ5Q2hhbmdlZExpc3RlbmVyKSB7CisJCWNoYW5nZU5vdGlmaWVyLmFkZExpc3RlbmVyKG5vdGlmeUNoYW5nZWRMaXN0ZW5lcik7CisJfQorCisJLyoqCisJICogVGhpcyByZW1vdmVzIGEgbGlzdGVuZXIuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgcmVtb3ZlTGlzdGVuZXIoSU5vdGlmeUNoYW5nZWRMaXN0ZW5lciBub3RpZnlDaGFuZ2VkTGlzdGVuZXIpIHsKKwkJY2hhbmdlTm90aWZpZXIucmVtb3ZlTGlzdGVuZXIobm90aWZ5Q2hhbmdlZExpc3RlbmVyKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGRlbGVnYXRlcyB0byB7QGxpbmsgI2NoYW5nZU5vdGlmaWVyfSBhbmQgdG8ge0BsaW5rICNwYXJlbnRBZGFwdGVyRmFjdG9yeX0uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgZmlyZU5vdGlmeUNoYW5nZWQoTm90aWZpY2F0aW9uIG5vdGlmaWNhdGlvbikgeworCQljaGFuZ2VOb3RpZmllci5maXJlTm90aWZ5Q2hhbmdlZChub3RpZmljYXRpb24pOworCisJCWlmIChwYXJlbnRBZGFwdGVyRmFjdG9yeSAhPSBudWxsKSB7CisJCQlwYXJlbnRBZGFwdGVyRmFjdG9yeS5maXJlTm90aWZ5Q2hhbmdlZChub3RpZmljYXRpb24pOworCQl9CisJfQorCisJLyoqCisJICogVGhpcyBkaXNwb3NlcyBhbGwgb2YgdGhlIGl0ZW0gcHJvdmlkZXJzIGNyZWF0ZWQgYnkgdGhpcyBmYWN0b3J5LiAKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBkaXNwb3NlKCkgeworCQlpZiAoY3N2TG9nZ2VySXRlbVByb3ZpZGVyICE9IG51bGwpIGNzdkxvZ2dlckl0ZW1Qcm92aWRlci5kaXNwb3NlKCk7CisJfQorCit9CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy5jc3Yvc3JjL29yZy9lY2xpcHNlL3N0ZW0vbG9nZ2Vycy9jc3YvcHJvdmlkZXIvQ1NWTG9nZ2VyRWRpdFBsdWdpbi5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMuY3N2L3NyYy9vcmcvZWNsaXBzZS9zdGVtL2xvZ2dlcnMvY3N2L3Byb3ZpZGVyL0NTVkxvZ2dlckVkaXRQbHVnaW4uamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYmI0OGViCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMuY3N2L3NyYy9vcmcvZWNsaXBzZS9zdGVtL2xvZ2dlcnMvY3N2L3Byb3ZpZGVyL0NTVkxvZ2dlckVkaXRQbHVnaW4uamF2YQpAQCAtMCwwICsxLDEwOCBAQAorLyoqCisgKiA8Y29weXJpZ2h0PgorICogPC9jb3B5cmlnaHQ+CisgKgorICogJElkJAorICovCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy5jc3YucHJvdmlkZXI7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLkVNRlBsdWdpbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnVpLkVjbGlwc2VVSVBsdWdpbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuUmVzb3VyY2VMb2NhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5wcm92aWRlci5FY29yZUVkaXRQbHVnaW47CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5wcm92aWRlci5Db3JlRWRpdFBsdWdpbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMucHJvdmlkZXIuU2ltdWxhdGlvbkxvZ2dlckVkaXRQbHVnaW47CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS51aS53aXphcmRzLkNTVkxvZ2dlclByb3BlcnR5U3RyaW5nUHJvdmlkZXJBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcub3NnaS5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dDsKKworLyoqCisgKiBUaGlzIGlzIHRoZSBjZW50cmFsIHNpbmdsZXRvbiBmb3IgdGhlIENTVkxvZ2dlciBlZGl0b3IgcGx1Z2luLgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgZmluYWwgY2xhc3MgQ1NWTG9nZ2VyRWRpdFBsdWdpbiBleHRlbmRzIEVNRlBsdWdpbiB7CisJLyoqCisJICogS2VlcCB0cmFjayBvZiB0aGUgc2luZ2xldG9uLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgQ1NWTG9nZ2VyRWRpdFBsdWdpbiBJTlNUQU5DRSA9IG5ldyBDU1ZMb2dnZXJFZGl0UGx1Z2luKCk7CisJCisJLyoqCisJICogS2VlcCB0cmFjayBvZiB0aGUgc2luZ2xldG9uLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByaXZhdGUgc3RhdGljIEltcGxlbWVudGF0aW9uIHBsdWdpbjsKKworCS8qKgorCSAqIENyZWF0ZSB0aGUgaW5zdGFuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIENTVkxvZ2dlckVkaXRQbHVnaW4oKSB7CisJCXN1cGVyCisJCQkobmV3IFJlc291cmNlTG9jYXRvciBbXSB7CisJCQkJQ29yZUVkaXRQbHVnaW4uSU5TVEFOQ0UsCisJCQkJRWNvcmVFZGl0UGx1Z2luLklOU1RBTkNFLAorCQkJCVNpbXVsYXRpb25Mb2dnZXJFZGl0UGx1Z2luLklOU1RBTkNFCisJCQl9KTsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBzaW5nbGV0b24gaW5zdGFuY2Ugb2YgdGhlIEVjbGlwc2UgcGx1Z2luLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgc2luZ2xldG9uIGluc3RhbmNlLgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgUmVzb3VyY2VMb2NhdG9yIGdldFBsdWdpblJlc291cmNlTG9jYXRvcigpIHsKKwkJcmV0dXJuIHBsdWdpbjsKKwl9CisJCisJLyoqCisJICogUmV0dXJucyB0aGUgc2luZ2xldG9uIGluc3RhbmNlIG9mIHRoZSBFY2xpcHNlIHBsdWdpbi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIHNpbmdsZXRvbiBpbnN0YW5jZS4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHN0YXRpYyBJbXBsZW1lbnRhdGlvbiBnZXRQbHVnaW4oKSB7CisJCXJldHVybiBwbHVnaW47CisJfQorCQorCS8qKgorCSAqIFRoZSBhY3R1YWwgaW1wbGVtZW50YXRpb24gb2YgdGhlIEVjbGlwc2UgPGI+UGx1Z2luPC9iPi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGNsYXNzIEltcGxlbWVudGF0aW9uIGV4dGVuZHMgRWNsaXBzZVVJUGx1Z2luIHsKKwkJLyoqCisJCSAqIENyZWF0ZXMgYW4gaW5zdGFuY2UuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlwdWJsaWMgSW1wbGVtZW50YXRpb24oKSB7CisJCQlzdXBlcigpOworCQorCQkJLy8gUmVtZW1iZXIgdGhlIHN0YXRpYyBpbnN0YW5jZS4KKwkJCS8vCisJCQlwbHVnaW4gPSB0aGlzOworCQl9CisKKwkJQE92ZXJyaWRlCisJCXB1YmxpYyB2b2lkIHN0YXJ0KEJ1bmRsZUNvbnRleHQgY29udGV4dCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCQlzdXBlci5zdGFydChjb250ZXh0KTsKKwkJCQorCQkJbmV3IENTVkxvZ2dlclByb3BlcnR5U3RyaW5nUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSgpOworCQl9CisJfQorCit9CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy5jc3Yvc3JjL29yZy9lY2xpcHNlL3N0ZW0vbG9nZ2Vycy9jc3YvcHJvdmlkZXIvQ1NWTG9nZ2VySXRlbVByb3ZpZGVyLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy5jc3Yvc3JjL29yZy9lY2xpcHNlL3N0ZW0vbG9nZ2Vycy9jc3YvcHJvdmlkZXIvQ1NWTG9nZ2VySXRlbVByb3ZpZGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmE0ZTI3MAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzLmNzdi9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9sb2dnZXJzL2Nzdi9wcm92aWRlci9DU1ZMb2dnZXJJdGVtUHJvdmlkZXIuamF2YQpAQCAtMCwwICsxLDI2MCBAQAorLyoqCisgKiA8Y29weXJpZ2h0PgorICogPC9jb3B5cmlnaHQ+CisgKgorICogJElkJAorICovCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy5jc3YucHJvdmlkZXI7CisKKworaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOworaW1wb3J0IGphdmEudXRpbC5MaXN0OworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uOworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlJlc291cmNlTG9jYXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuVVJJOworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JRWRpdGluZ0RvbWFpbkl0ZW1Qcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbUxhYmVsUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1Qcm9wZXJ0eVNvdXJjZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JU3RydWN0dXJlZEl0ZW1Db250ZW50UHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVRyZWVJdGVtQ29udGVudFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuVmlld2VyTm90aWZpY2F0aW9uOworCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzLmNzdi5DU1ZMb2dnZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzLmNzdi5DU1ZQYWNrYWdlOworCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzLnByb3ZpZGVyLlNpbXVsYXRpb25Mb2dnZXJJdGVtUHJvdmlkZXI7CisKKy8qKgorICogVGhpcyBpcyB0aGUgaXRlbSBwcm92aWRlciBhZGFwdGVyIGZvciBhIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMuY3N2LkNTVkxvZ2dlcn0gb2JqZWN0LgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgQ1NWTG9nZ2VySXRlbVByb3ZpZGVyCisJZXh0ZW5kcyBTaW11bGF0aW9uTG9nZ2VySXRlbVByb3ZpZGVyCisJaW1wbGVtZW50cworCQlJRWRpdGluZ0RvbWFpbkl0ZW1Qcm92aWRlciwKKwkJSVN0cnVjdHVyZWRJdGVtQ29udGVudFByb3ZpZGVyLAorCQlJVHJlZUl0ZW1Db250ZW50UHJvdmlkZXIsCisJCUlJdGVtTGFiZWxQcm92aWRlciwKKwkJSUl0ZW1Qcm9wZXJ0eVNvdXJjZSB7CisJLyoqCisJICogVGhpcyBjb25zdHJ1Y3RzIGFuIGluc3RhbmNlIGZyb20gYSBmYWN0b3J5IGFuZCBhIG5vdGlmaWVyLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBDU1ZMb2dnZXJJdGVtUHJvdmlkZXIoQWRhcHRlckZhY3RvcnkgYWRhcHRlckZhY3RvcnkpIHsKKwkJc3VwZXIoYWRhcHRlckZhY3RvcnkpOworCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyB0aGUgcHJvcGVydHkgZGVzY3JpcHRvcnMgZm9yIHRoZSBhZGFwdGVkIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBMaXN0PElJdGVtUHJvcGVydHlEZXNjcmlwdG9yPiBnZXRQcm9wZXJ0eURlc2NyaXB0b3JzKE9iamVjdCBvYmplY3QpIHsKKwkJaWYgKGl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzID09IG51bGwpIHsKKwkJCXN1cGVyLmdldFByb3BlcnR5RGVzY3JpcHRvcnMob2JqZWN0KTsKKworCQkJYWRkVXNlRGVmYXVsdExvZ0RpcmVjdG9yeVByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QpOworCQkJYWRkTG9nRGlyZWN0b3J5UHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCk7CisJCQlhZGREZWxpbWV0ZXJQcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0KTsKKwkJCWFkZExvZ1J1blBhcmFtZXRlcnNQcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0KTsKKwkJCWFkZEJ1ZmZlclNpemVQcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0KTsKKwkJfQorCQlyZXR1cm4gaXRlbVByb3BlcnR5RGVzY3JpcHRvcnM7CisJfQorCisJLyoqCisJICogVGhpcyBhZGRzIGEgcHJvcGVydHkgZGVzY3JpcHRvciBmb3IgdGhlIFVzZSBEZWZhdWx0IExvZyBEaXJlY3RvcnkgZmVhdHVyZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBhZGRVc2VEZWZhdWx0TG9nRGlyZWN0b3J5UHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdCBvYmplY3QpIHsKKwkJaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMuYWRkCisJCQkoY3JlYXRlSXRlbVByb3BlcnR5RGVzY3JpcHRvcgorCQkJCSgoKENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnkpYWRhcHRlckZhY3RvcnkpLmdldFJvb3RBZGFwdGVyRmFjdG9yeSgpLAorCQkJCSBnZXRSZXNvdXJjZUxvY2F0b3IoKSwKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfQ1NWTG9nZ2VyX3VzZURlZmF1bHRMb2dEaXJlY3RvcnlfZmVhdHVyZSIpLAorCQkJCSBnZXRTdHJpbmcoIl9VSV9Qcm9wZXJ0eURlc2NyaXB0b3JfZGVzY3JpcHRpb24iLCAiX1VJX0NTVkxvZ2dlcl91c2VEZWZhdWx0TG9nRGlyZWN0b3J5X2ZlYXR1cmUiLCAiX1VJX0NTVkxvZ2dlcl90eXBlIiksCisJCQkJIENTVlBhY2thZ2UuTGl0ZXJhbHMuQ1NWX0xPR0dFUl9fVVNFX0RFRkFVTFRfTE9HX0RJUkVDVE9SWSwKKwkJCQkgdHJ1ZSwKKwkJCQkgZmFsc2UsCisJCQkJIGZhbHNlLAorCQkJCSBJdGVtUHJvcGVydHlEZXNjcmlwdG9yLkJPT0xFQU5fVkFMVUVfSU1BR0UsCisJCQkJIG51bGwsCisJCQkJIG51bGwpKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFkZHMgYSBwcm9wZXJ0eSBkZXNjcmlwdG9yIGZvciB0aGUgTG9nIERpcmVjdG9yeSBmZWF0dXJlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIGFkZExvZ0RpcmVjdG9yeVByb3BlcnR5RGVzY3JpcHRvcihPYmplY3Qgb2JqZWN0KSB7CisJCWl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzLmFkZAorCQkJKGNyZWF0ZUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IKKwkJCQkoKChDb21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5KWFkYXB0ZXJGYWN0b3J5KS5nZXRSb290QWRhcHRlckZhY3RvcnkoKSwKKwkJCQkgZ2V0UmVzb3VyY2VMb2NhdG9yKCksCisJCQkJIGdldFN0cmluZygiX1VJX0NTVkxvZ2dlcl9sb2dEaXJlY3RvcnlfZmVhdHVyZSIpLAorCQkJCSBnZXRTdHJpbmcoIl9VSV9Qcm9wZXJ0eURlc2NyaXB0b3JfZGVzY3JpcHRpb24iLCAiX1VJX0NTVkxvZ2dlcl9sb2dEaXJlY3RvcnlfZmVhdHVyZSIsICJfVUlfQ1NWTG9nZ2VyX3R5cGUiKSwKKwkJCQkgQ1NWUGFja2FnZS5MaXRlcmFscy5DU1ZfTE9HR0VSX19MT0dfRElSRUNUT1JZLAorCQkJCSB0cnVlLAorCQkJCSBmYWxzZSwKKwkJCQkgZmFsc2UsCisJCQkJIEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IuR0VORVJJQ19WQUxVRV9JTUFHRSwKKwkJCQkgbnVsbCwKKwkJCQkgbnVsbCkpOworCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyBhIHByb3BlcnR5IGRlc2NyaXB0b3IgZm9yIHRoZSBEZWxpbWV0ZXIgZmVhdHVyZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBhZGREZWxpbWV0ZXJQcm9wZXJ0eURlc2NyaXB0b3IoT2JqZWN0IG9iamVjdCkgeworCQlpdGVtUHJvcGVydHlEZXNjcmlwdG9ycy5hZGQKKwkJCShjcmVhdGVJdGVtUHJvcGVydHlEZXNjcmlwdG9yCisJCQkJKCgoQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSlhZGFwdGVyRmFjdG9yeSkuZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCksCisJCQkJIGdldFJlc291cmNlTG9jYXRvcigpLAorCQkJCSBnZXRTdHJpbmcoIl9VSV9DU1ZMb2dnZXJfZGVsaW1ldGVyX2ZlYXR1cmUiKSwKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfUHJvcGVydHlEZXNjcmlwdG9yX2Rlc2NyaXB0aW9uIiwgIl9VSV9DU1ZMb2dnZXJfZGVsaW1ldGVyX2ZlYXR1cmUiLCAiX1VJX0NTVkxvZ2dlcl90eXBlIiksCisJCQkJIENTVlBhY2thZ2UuTGl0ZXJhbHMuQ1NWX0xPR0dFUl9fREVMSU1FVEVSLAorCQkJCSB0cnVlLAorCQkJCSBmYWxzZSwKKwkJCQkgZmFsc2UsCisJCQkJIEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IuR0VORVJJQ19WQUxVRV9JTUFHRSwKKwkJCQkgbnVsbCwKKwkJCQkgbnVsbCkpOworCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyBhIHByb3BlcnR5IGRlc2NyaXB0b3IgZm9yIHRoZSBMb2cgUnVuIFBhcmFtZXRlcnMgZmVhdHVyZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBhZGRMb2dSdW5QYXJhbWV0ZXJzUHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdCBvYmplY3QpIHsKKwkJaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMuYWRkCisJCQkoY3JlYXRlSXRlbVByb3BlcnR5RGVzY3JpcHRvcgorCQkJCSgoKENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnkpYWRhcHRlckZhY3RvcnkpLmdldFJvb3RBZGFwdGVyRmFjdG9yeSgpLAorCQkJCSBnZXRSZXNvdXJjZUxvY2F0b3IoKSwKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfQ1NWTG9nZ2VyX2xvZ1J1blBhcmFtZXRlcnNfZmVhdHVyZSIpLAorCQkJCSBnZXRTdHJpbmcoIl9VSV9Qcm9wZXJ0eURlc2NyaXB0b3JfZGVzY3JpcHRpb24iLCAiX1VJX0NTVkxvZ2dlcl9sb2dSdW5QYXJhbWV0ZXJzX2ZlYXR1cmUiLCAiX1VJX0NTVkxvZ2dlcl90eXBlIiksCisJCQkJIENTVlBhY2thZ2UuTGl0ZXJhbHMuQ1NWX0xPR0dFUl9fTE9HX1JVTl9QQVJBTUVURVJTLAorCQkJCSB0cnVlLAorCQkJCSBmYWxzZSwKKwkJCQkgZmFsc2UsCisJCQkJIEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IuQk9PTEVBTl9WQUxVRV9JTUFHRSwKKwkJCQkgbnVsbCwKKwkJCQkgbnVsbCkpOworCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyBhIHByb3BlcnR5IGRlc2NyaXB0b3IgZm9yIHRoZSBCdWZmZXIgU2l6ZSBmZWF0dXJlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIGFkZEJ1ZmZlclNpemVQcm9wZXJ0eURlc2NyaXB0b3IoT2JqZWN0IG9iamVjdCkgeworCQlpdGVtUHJvcGVydHlEZXNjcmlwdG9ycy5hZGQKKwkJCShjcmVhdGVJdGVtUHJvcGVydHlEZXNjcmlwdG9yCisJCQkJKCgoQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSlhZGFwdGVyRmFjdG9yeSkuZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCksCisJCQkJIGdldFJlc291cmNlTG9jYXRvcigpLAorCQkJCSBnZXRTdHJpbmcoIl9VSV9DU1ZMb2dnZXJfYnVmZmVyU2l6ZV9mZWF0dXJlIiksCisJCQkJIGdldFN0cmluZygiX1VJX1Byb3BlcnR5RGVzY3JpcHRvcl9kZXNjcmlwdGlvbiIsICJfVUlfQ1NWTG9nZ2VyX2J1ZmZlclNpemVfZmVhdHVyZSIsICJfVUlfQ1NWTG9nZ2VyX3R5cGUiKSwKKwkJCQkgQ1NWUGFja2FnZS5MaXRlcmFscy5DU1ZfTE9HR0VSX19CVUZGRVJfU0laRSwKKwkJCQkgdHJ1ZSwKKwkJCQkgZmFsc2UsCisJCQkJIGZhbHNlLAorCQkJCSBJdGVtUHJvcGVydHlEZXNjcmlwdG9yLklOVEVHUkFMX1ZBTFVFX0lNQUdFLAorCQkJCSBudWxsLAorCQkJCSBudWxsKSk7CisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIENTVkxvZ2dlci5naWYuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIE9iamVjdCBnZXRJbWFnZShPYmplY3Qgb2JqZWN0KSB7CisJCXJldHVybiBvdmVybGF5SW1hZ2Uob2JqZWN0LCBnZXRSZXNvdXJjZUxvY2F0b3IoKS5nZXRJbWFnZSgiZnVsbC9vYmoxNi9DU1ZMb2dnZXIiKSk7CisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIHRoZSBsYWJlbCB0ZXh0IGZvciB0aGUgYWRhcHRlZCBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgU3RyaW5nIGdldFRleHQoT2JqZWN0IG9iamVjdCkgeworCQlVUkkgbGFiZWxWYWx1ZSA9ICgoQ1NWTG9nZ2VyKW9iamVjdCkuZ2V0VVJJKCk7CisJCVN0cmluZyBsYWJlbCA9IGxhYmVsVmFsdWUgPT0gbnVsbCA/IG51bGwgOiBsYWJlbFZhbHVlLnRvU3RyaW5nKCk7CisJCXJldHVybiBsYWJlbCA9PSBudWxsIHx8IGxhYmVsLmxlbmd0aCgpID09IDAgPworCQkJZ2V0U3RyaW5nKCJfVUlfQ1NWTG9nZ2VyX3R5cGUiKSA6CisJCQlnZXRTdHJpbmcoIl9VSV9DU1ZMb2dnZXJfdHlwZSIpICsgIiAiICsgbGFiZWw7CisJfQorCisJLyoqCisJICogVGhpcyBoYW5kbGVzIG1vZGVsIG5vdGlmaWNhdGlvbnMgYnkgY2FsbGluZyB7QGxpbmsgI3VwZGF0ZUNoaWxkcmVufSB0byB1cGRhdGUgYW55IGNhY2hlZAorCSAqIGNoaWxkcmVuIGFuZCBieSBjcmVhdGluZyBhIHZpZXdlciBub3RpZmljYXRpb24sIHdoaWNoIGl0IHBhc3NlcyB0byB7QGxpbmsgI2ZpcmVOb3RpZnlDaGFuZ2VkfS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBub3RpZnlDaGFuZ2VkKE5vdGlmaWNhdGlvbiBub3RpZmljYXRpb24pIHsKKwkJdXBkYXRlQ2hpbGRyZW4obm90aWZpY2F0aW9uKTsKKworCQlzd2l0Y2ggKG5vdGlmaWNhdGlvbi5nZXRGZWF0dXJlSUQoQ1NWTG9nZ2VyLmNsYXNzKSkgeworCQkJY2FzZSBDU1ZQYWNrYWdlLkNTVl9MT0dHRVJfX1VTRV9ERUZBVUxUX0xPR19ESVJFQ1RPUlk6CisJCQljYXNlIENTVlBhY2thZ2UuQ1NWX0xPR0dFUl9fTE9HX0RJUkVDVE9SWToKKwkJCWNhc2UgQ1NWUGFja2FnZS5DU1ZfTE9HR0VSX19ERUxJTUVURVI6CisJCQljYXNlIENTVlBhY2thZ2UuQ1NWX0xPR0dFUl9fTE9HX1JVTl9QQVJBTUVURVJTOgorCQkJY2FzZSBDU1ZQYWNrYWdlLkNTVl9MT0dHRVJfX0JVRkZFUl9TSVpFOgorCQkJCWZpcmVOb3RpZnlDaGFuZ2VkKG5ldyBWaWV3ZXJOb3RpZmljYXRpb24obm90aWZpY2F0aW9uLCBub3RpZmljYXRpb24uZ2V0Tm90aWZpZXIoKSwgZmFsc2UsIHRydWUpKTsKKwkJCQlyZXR1cm47CisJCX0KKwkJc3VwZXIubm90aWZ5Q2hhbmdlZChub3RpZmljYXRpb24pOworCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmVkaXQuY29tbWFuZC5Db21tYW5kUGFyYW1ldGVyfXMgZGVzY3JpYmluZyB0aGUgY2hpbGRyZW4KKwkgKiB0aGF0IGNhbiBiZSBjcmVhdGVkIHVuZGVyIHRoaXMgb2JqZWN0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIGNvbGxlY3ROZXdDaGlsZERlc2NyaXB0b3JzKENvbGxlY3Rpb248T2JqZWN0PiBuZXdDaGlsZERlc2NyaXB0b3JzLCBPYmplY3Qgb2JqZWN0KSB7CisJCXN1cGVyLmNvbGxlY3ROZXdDaGlsZERlc2NyaXB0b3JzKG5ld0NoaWxkRGVzY3JpcHRvcnMsIG9iamVjdCk7CisJfQorCisJLyoqCisJICogUmV0dXJuIHRoZSByZXNvdXJjZSBsb2NhdG9yIGZvciB0aGlzIGl0ZW0gcHJvdmlkZXIncyByZXNvdXJjZXMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIFJlc291cmNlTG9jYXRvciBnZXRSZXNvdXJjZUxvY2F0b3IoKSB7CisJCXJldHVybiBDU1ZMb2dnZXJFZGl0UGx1Z2luLklOU1RBTkNFOworCX0KKworfQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMuY3N2L3NyYy9vcmcvZWNsaXBzZS9zdGVtL2xvZ2dlcnMvY3N2L3V0aWwvQ1NWQWRhcHRlckZhY3RvcnkuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzLmNzdi9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9sb2dnZXJzL2Nzdi91dGlsL0NTVkFkYXB0ZXJGYWN0b3J5LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWQ4MWYzZAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzLmNzdi9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9sb2dnZXJzL2Nzdi91dGlsL0NTVkFkYXB0ZXJGYWN0b3J5LmphdmEKQEAgLTAsMCArMSwyMjEgQEAKKy8qKgorICogPGNvcHlyaWdodD4KKyAqIDwvY29weXJpZ2h0PgorICoKKyAqICRJZCQKKyAqLworcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMuY3N2LnV0aWw7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5BZGFwdGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWVyOworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuaW1wbC5BZGFwdGVyRmFjdG9yeUltcGw7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uSWRlbnRpZmlhYmxlOworCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmxvZ2dlci5Mb2dnZXI7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMuU2ltdWxhdGlvbkxvZ2dlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMuU3luY2hyb25vdXNMb2dnZXI7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMuY3N2Lio7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIFRoZSA8Yj5BZGFwdGVyIEZhY3Rvcnk8L2I+IGZvciB0aGUgbW9kZWwuCisgKiBJdCBwcm92aWRlcyBhbiBhZGFwdGVyIDxjb2RlPmNyZWF0ZVhYWDwvY29kZT4gbWV0aG9kIGZvciBlYWNoIGNsYXNzIG9mIHRoZSBtb2RlbC4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMuY3N2LkNTVlBhY2thZ2UKKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIENTVkFkYXB0ZXJGYWN0b3J5IGV4dGVuZHMgQWRhcHRlckZhY3RvcnlJbXBsIHsKKwkvKioKKwkgKiBUaGUgY2FjaGVkIG1vZGVsIHBhY2thZ2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHN0YXRpYyBDU1ZQYWNrYWdlIG1vZGVsUGFja2FnZTsKKworCS8qKgorCSAqIENyZWF0ZXMgYW4gaW5zdGFuY2Ugb2YgdGhlIGFkYXB0ZXIgZmFjdG9yeS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQ1NWQWRhcHRlckZhY3RvcnkoKSB7CisJCWlmIChtb2RlbFBhY2thZ2UgPT0gbnVsbCkgeworCQkJbW9kZWxQYWNrYWdlID0gQ1NWUGFja2FnZS5lSU5TVEFOQ0U7CisJCX0KKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHdoZXRoZXIgdGhpcyBmYWN0b3J5IGlzIGFwcGxpY2FibGUgZm9yIHRoZSB0eXBlIG9mIHRoZSBvYmplY3QuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgPGNvZGU+dHJ1ZTwvY29kZT4gaWYgdGhlIG9iamVjdCBpcyBlaXRoZXIgdGhlIG1vZGVsJ3MgcGFja2FnZSBvciBpcyBhbiBpbnN0YW5jZSBvYmplY3Qgb2YgdGhlIG1vZGVsLgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gd2hldGhlciB0aGlzIGZhY3RvcnkgaXMgYXBwbGljYWJsZSBmb3IgdGhlIHR5cGUgb2YgdGhlIG9iamVjdC4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIGJvb2xlYW4gaXNGYWN0b3J5Rm9yVHlwZShPYmplY3Qgb2JqZWN0KSB7CisJCWlmIChvYmplY3QgPT0gbW9kZWxQYWNrYWdlKSB7CisJCQlyZXR1cm4gdHJ1ZTsKKwkJfQorCQlpZiAob2JqZWN0IGluc3RhbmNlb2YgRU9iamVjdCkgeworCQkJcmV0dXJuICgoRU9iamVjdClvYmplY3QpLmVDbGFzcygpLmdldEVQYWNrYWdlKCkgPT0gbW9kZWxQYWNrYWdlOworCQl9CisJCXJldHVybiBmYWxzZTsKKwl9CisKKwkvKioKKwkgKiBUaGUgc3dpdGNoIHRoYXQgZGVsZWdhdGVzIHRvIHRoZSA8Y29kZT5jcmVhdGVYWFg8L2NvZGU+IG1ldGhvZHMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIENTVlN3aXRjaDxBZGFwdGVyPiBtb2RlbFN3aXRjaCA9CisJCW5ldyBDU1ZTd2l0Y2g8QWRhcHRlcj4oKSB7CisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyBBZGFwdGVyIGNhc2VDU1ZMb2dnZXIoQ1NWTG9nZ2VyIG9iamVjdCkgeworCQkJCXJldHVybiBjcmVhdGVDU1ZMb2dnZXJBZGFwdGVyKCk7CisJCQl9CisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyA8VD4gQWRhcHRlciBjYXNlQ29tcGFyYWJsZShDb21wYXJhYmxlPFQ+IG9iamVjdCkgeworCQkJCXJldHVybiBjcmVhdGVDb21wYXJhYmxlQWRhcHRlcigpOworCQkJfQorCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgQWRhcHRlciBjYXNlSWRlbnRpZmlhYmxlKElkZW50aWZpYWJsZSBvYmplY3QpIHsKKwkJCQlyZXR1cm4gY3JlYXRlSWRlbnRpZmlhYmxlQWRhcHRlcigpOworCQkJfQorCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgQWRhcHRlciBjYXNlTG9nZ2VyKExvZ2dlciBvYmplY3QpIHsKKwkJCQlyZXR1cm4gY3JlYXRlTG9nZ2VyQWRhcHRlcigpOworCQkJfQorCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgQWRhcHRlciBjYXNlU2ltdWxhdGlvbkxvZ2dlcihTaW11bGF0aW9uTG9nZ2VyIG9iamVjdCkgeworCQkJCXJldHVybiBjcmVhdGVTaW11bGF0aW9uTG9nZ2VyQWRhcHRlcigpOworCQkJfQorCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgQWRhcHRlciBjYXNlU3luY2hyb25vdXNMb2dnZXIoU3luY2hyb25vdXNMb2dnZXIgb2JqZWN0KSB7CisJCQkJcmV0dXJuIGNyZWF0ZVN5bmNocm9ub3VzTG9nZ2VyQWRhcHRlcigpOworCQkJfQorCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgQWRhcHRlciBkZWZhdWx0Q2FzZShFT2JqZWN0IG9iamVjdCkgeworCQkJCXJldHVybiBjcmVhdGVFT2JqZWN0QWRhcHRlcigpOworCQkJfQorCQl9OworCisJLyoqCisJICogQ3JlYXRlcyBhbiBhZGFwdGVyIGZvciB0aGUgPGNvZGU+dGFyZ2V0PC9jb2RlPi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSB0YXJnZXQgdGhlIG9iamVjdCB0byBhZGFwdC4KKwkgKiBAcmV0dXJuIHRoZSBhZGFwdGVyIGZvciB0aGUgPGNvZGU+dGFyZ2V0PC9jb2RlPi4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlQWRhcHRlcihOb3RpZmllciB0YXJnZXQpIHsKKwkJcmV0dXJuIG1vZGVsU3dpdGNoLmRvU3dpdGNoKChFT2JqZWN0KXRhcmdldCk7CisJfQorCisKKwkvKioKKwkgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy5jc3YuQ1NWTG9nZ2VyIDxlbT5Mb2dnZXI8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOworCSAqIGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZSB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5LgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzLmNzdi5DU1ZMb2dnZXIKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlQ1NWTG9nZ2VyQWRhcHRlcigpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBqYXZhLmxhbmcuQ29tcGFyYWJsZSA8ZW0+Q29tcGFyYWJsZTwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7CisJICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCisJICogQHNlZSBqYXZhLmxhbmcuQ29tcGFyYWJsZQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVDb21wYXJhYmxlQWRhcHRlcigpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLklkZW50aWZpYWJsZSA8ZW0+SWRlbnRpZmlhYmxlPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsKKwkgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uSWRlbnRpZmlhYmxlCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZUlkZW50aWZpYWJsZUFkYXB0ZXIoKSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmxvZ2dlci5Mb2dnZXIgPGVtPkxvZ2dlcjwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7CisJICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubG9nZ2VyLkxvZ2dlcgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVMb2dnZXJBZGFwdGVyKCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy5TaW11bGF0aW9uTG9nZ2VyIDxlbT5TaW11bGF0aW9uIExvZ2dlcjwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7CisJICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMuU2ltdWxhdGlvbkxvZ2dlcgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVTaW11bGF0aW9uTG9nZ2VyQWRhcHRlcigpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMuU3luY2hyb25vdXNMb2dnZXIgPGVtPlN5bmNocm9ub3VzIExvZ2dlcjwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7CisJICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMuU3luY2hyb25vdXNMb2dnZXIKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlU3luY2hyb25vdXNMb2dnZXJBZGFwdGVyKCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIHRoZSBkZWZhdWx0IGNhc2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsLgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVFT2JqZWN0QWRhcHRlcigpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCit9IC8vQ1NWQWRhcHRlckZhY3RvcnkKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzLmNzdi9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9sb2dnZXJzL2Nzdi91dGlsL0NTVlN3aXRjaC5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMuY3N2L3NyYy9vcmcvZWNsaXBzZS9zdGVtL2xvZ2dlcnMvY3N2L3V0aWwvQ1NWU3dpdGNoLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWRkZmM2ZAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzLmNzdi9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9sb2dnZXJzL2Nzdi91dGlsL0NTVlN3aXRjaC5qYXZhCkBAIC0wLDAgKzEsMjE3IEBACisvKioKKyAqIDxjb3B5cmlnaHQ+CisgKiA8L2NvcHlyaWdodD4KKyAqCisgKiAkSWQkCisgKi8KK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzLmNzdi51dGlsOworCitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0OworCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5JZGVudGlmaWFibGU7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubG9nZ2VyLkxvZ2dlcjsKKworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy5TaW11bGF0aW9uTG9nZ2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy5TeW5jaHJvbm91c0xvZ2dlcjsKKworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy5jc3YuKjsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogVGhlIDxiPlN3aXRjaDwvYj4gZm9yIHRoZSBtb2RlbCdzIGluaGVyaXRhbmNlIGhpZXJhcmNoeS4KKyAqIEl0IHN1cHBvcnRzIHRoZSBjYWxsIHtAbGluayAjZG9Td2l0Y2goRU9iamVjdCkgZG9Td2l0Y2gob2JqZWN0KX0KKyAqIHRvIGludm9rZSB0aGUgPGNvZGU+Y2FzZVhYWDwvY29kZT4gbWV0aG9kIGZvciBlYWNoIGNsYXNzIG9mIHRoZSBtb2RlbCwKKyAqIHN0YXJ0aW5nIHdpdGggdGhlIGFjdHVhbCBjbGFzcyBvZiB0aGUgb2JqZWN0CisgKiBhbmQgcHJvY2VlZGluZyB1cCB0aGUgaW5oZXJpdGFuY2UgaGllcmFyY2h5CisgKiB1bnRpbCBhIG5vbi1udWxsIHJlc3VsdCBpcyByZXR1cm5lZCwKKyAqIHdoaWNoIGlzIHRoZSByZXN1bHQgb2YgdGhlIHN3aXRjaC4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMuY3N2LkNTVlBhY2thZ2UKKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIENTVlN3aXRjaDxUMT4geworCS8qKgorCSAqIFRoZSBjYWNoZWQgbW9kZWwgcGFja2FnZQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBzdGF0aWMgQ1NWUGFja2FnZSBtb2RlbFBhY2thZ2U7CisKKwkvKioKKwkgKiBDcmVhdGVzIGFuIGluc3RhbmNlIG9mIHRoZSBzd2l0Y2guCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIENTVlN3aXRjaCgpIHsKKwkJaWYgKG1vZGVsUGFja2FnZSA9PSBudWxsKSB7CisJCQltb2RlbFBhY2thZ2UgPSBDU1ZQYWNrYWdlLmVJTlNUQU5DRTsKKwkJfQorCX0KKworCS8qKgorCSAqIENhbGxzIDxjb2RlPmNhc2VYWFg8L2NvZGU+IGZvciBlYWNoIGNsYXNzIG9mIHRoZSBtb2RlbCB1bnRpbCBvbmUgcmV0dXJucyBhIG5vbiBudWxsIHJlc3VsdDsgaXQgeWllbGRzIHRoYXQgcmVzdWx0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgZmlyc3Qgbm9uLW51bGwgcmVzdWx0IHJldHVybmVkIGJ5IGEgPGNvZGU+Y2FzZVhYWDwvY29kZT4gY2FsbC4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFQxIGRvU3dpdGNoKEVPYmplY3QgdGhlRU9iamVjdCkgeworCQlyZXR1cm4gZG9Td2l0Y2godGhlRU9iamVjdC5lQ2xhc3MoKSwgdGhlRU9iamVjdCk7CisJfQorCisJLyoqCisJICogQ2FsbHMgPGNvZGU+Y2FzZVhYWDwvY29kZT4gZm9yIGVhY2ggY2xhc3Mgb2YgdGhlIG1vZGVsIHVudGlsIG9uZSByZXR1cm5zIGEgbm9uIG51bGwgcmVzdWx0OyBpdCB5aWVsZHMgdGhhdCByZXN1bHQuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBmaXJzdCBub24tbnVsbCByZXN1bHQgcmV0dXJuZWQgYnkgYSA8Y29kZT5jYXNlWFhYPC9jb2RlPiBjYWxsLgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgVDEgZG9Td2l0Y2goRUNsYXNzIHRoZUVDbGFzcywgRU9iamVjdCB0aGVFT2JqZWN0KSB7CisJCWlmICh0aGVFQ2xhc3MuZUNvbnRhaW5lcigpID09IG1vZGVsUGFja2FnZSkgeworCQkJcmV0dXJuIGRvU3dpdGNoKHRoZUVDbGFzcy5nZXRDbGFzc2lmaWVySUQoKSwgdGhlRU9iamVjdCk7CisJCX0KKwkJZWxzZSB7CisJCQlMaXN0PEVDbGFzcz4gZVN1cGVyVHlwZXMgPSB0aGVFQ2xhc3MuZ2V0RVN1cGVyVHlwZXMoKTsKKwkJCXJldHVybgorCQkJCWVTdXBlclR5cGVzLmlzRW1wdHkoKSA/CisJCQkJCWRlZmF1bHRDYXNlKHRoZUVPYmplY3QpIDoKKwkJCQkJZG9Td2l0Y2goZVN1cGVyVHlwZXMuZ2V0KDApLCB0aGVFT2JqZWN0KTsKKwkJfQorCX0KKworCS8qKgorCSAqIENhbGxzIDxjb2RlPmNhc2VYWFg8L2NvZGU+IGZvciBlYWNoIGNsYXNzIG9mIHRoZSBtb2RlbCB1bnRpbCBvbmUgcmV0dXJucyBhIG5vbiBudWxsIHJlc3VsdDsgaXQgeWllbGRzIHRoYXQgcmVzdWx0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgZmlyc3Qgbm9uLW51bGwgcmVzdWx0IHJldHVybmVkIGJ5IGEgPGNvZGU+Y2FzZVhYWDwvY29kZT4gY2FsbC4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIFQxIGRvU3dpdGNoKGludCBjbGFzc2lmaWVySUQsIEVPYmplY3QgdGhlRU9iamVjdCkgeworCQlzd2l0Y2ggKGNsYXNzaWZpZXJJRCkgeworCQkJY2FzZSBDU1ZQYWNrYWdlLkNTVl9MT0dHRVI6IHsKKwkJCQlDU1ZMb2dnZXIgY3N2TG9nZ2VyID0gKENTVkxvZ2dlcil0aGVFT2JqZWN0OworCQkJCVQxIHJlc3VsdCA9IGNhc2VDU1ZMb2dnZXIoY3N2TG9nZ2VyKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VTeW5jaHJvbm91c0xvZ2dlcihjc3ZMb2dnZXIpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZVNpbXVsYXRpb25Mb2dnZXIoY3N2TG9nZ2VyKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VMb2dnZXIoY3N2TG9nZ2VyKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VJZGVudGlmaWFibGUoY3N2TG9nZ2VyKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VDb21wYXJhYmxlKGNzdkxvZ2dlcik7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBkZWZhdWx0Q2FzZSh0aGVFT2JqZWN0KTsKKwkJCQlyZXR1cm4gcmVzdWx0OworCQkJfQorCQkJZGVmYXVsdDogcmV0dXJuIGRlZmF1bHRDYXNlKHRoZUVPYmplY3QpOworCQl9CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+TG9nZ2VyPC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7CisJICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCisJICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+TG9nZ2VyPC9lbT4nLgorCSAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVDEgY2FzZUNTVkxvZ2dlcihDU1ZMb2dnZXIgb2JqZWN0KSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkNvbXBhcmFibGU8L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsKKwkgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KKwkgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5Db21wYXJhYmxlPC9lbT4nLgorCSAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgPFQ+IFQxIGNhc2VDb21wYXJhYmxlKENvbXBhcmFibGU8VD4gb2JqZWN0KSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPklkZW50aWZpYWJsZTwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOworCSAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgorCSAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPklkZW50aWZpYWJsZTwvZW0+Jy4KKwkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFQxIGNhc2VJZGVudGlmaWFibGUoSWRlbnRpZmlhYmxlIG9iamVjdCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5Mb2dnZXI8L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsKKwkgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KKwkgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5Mb2dnZXI8L2VtPicuCisJICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBUMSBjYXNlTG9nZ2VyKExvZ2dlciBvYmplY3QpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+U2ltdWxhdGlvbiBMb2dnZXI8L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsKKwkgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KKwkgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5TaW11bGF0aW9uIExvZ2dlcjwvZW0+Jy4KKwkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFQxIGNhc2VTaW11bGF0aW9uTG9nZ2VyKFNpbXVsYXRpb25Mb2dnZXIgb2JqZWN0KSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPlN5bmNocm9ub3VzIExvZ2dlcjwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOworCSAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgorCSAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPlN5bmNocm9ub3VzIExvZ2dlcjwvZW0+Jy4KKwkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFQxIGNhc2VTeW5jaHJvbm91c0xvZ2dlcihTeW5jaHJvbm91c0xvZ2dlciBvYmplY3QpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+RU9iamVjdDwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOworCSAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLCBidXQgdGhpcyBpcyB0aGUgbGFzdCBjYXNlIGFueXdheS4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KKwkgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5FT2JqZWN0PC9lbT4nLgorCSAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVDEgZGVmYXVsdENhc2UoRU9iamVjdCBvYmplY3QpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCit9IC8vQ1NWU3dpdGNoCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy5jc3Yvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvd2l6YXJkcy9DU1ZMb2dnZXJQcm9wZXJ0eVN0cmluZ1Byb3ZpZGVyQWRhcHRlckZhY3RvcnkuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzLmNzdi9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS93aXphcmRzL0NTVkxvZ2dlclByb3BlcnR5U3RyaW5nUHJvdmlkZXJBZGFwdGVyRmFjdG9yeS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU0NGNmODgKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy5jc3Yvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvd2l6YXJkcy9DU1ZMb2dnZXJQcm9wZXJ0eVN0cmluZ1Byb3ZpZGVyQWRhcHRlckZhY3RvcnkuamF2YQpAQCAtMCwwICsxLDEwNiBAQAorLy8gU3RhbmRhcmRQcm9wZXJ0eVN0cmluZ1Byb3ZpZGVyQWRhcHRlckZhY3RvcnkuamF2YQorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnVpLndpemFyZHM7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5BZGFwdGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FU3RydWN0dXJhbEZlYXR1cmU7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLkRpc2Vhc2VNb2RlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMuY3N2LnV0aWwuQ1NWQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS51aS5hZGFwdGVycy5wcm9wZXJ0eXN0cmluZ3MuUHJvcGVydHlTdHJpbmdQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnVpLmFkYXB0ZXJzLnByb3BlcnR5c3RyaW5ncy5Qcm9wZXJ0eVN0cmluZ1Byb3ZpZGVyQWRhcHRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnVpLmFkYXB0ZXJzLnByb3BlcnR5c3RyaW5ncy5Qcm9wZXJ0eVN0cmluZ1Byb3ZpZGVyQWRhcHRlckZhY3Rvcnk7CisKKy8qKgorICogVGhpcyBjbGFzcyBpcyB1c2VkIHRvIE5MUydkIHN0cmluZ3MgZm9yIHtAbGluayBEaXNlYXNlTW9kZWx9IHByb3BlcnRpZXMuIAorICovCitwdWJsaWMgY2xhc3MgQ1NWTG9nZ2VyUHJvcGVydHlTdHJpbmdQcm92aWRlckFkYXB0ZXJGYWN0b3J5IGV4dGVuZHMKKwkJQ1NWQWRhcHRlckZhY3RvcnkgaW1wbGVtZW50cyBQcm9wZXJ0eVN0cmluZ1Byb3ZpZGVyQWRhcHRlckZhY3RvcnkgeworCisJCisJUHJvcGVydHlTdHJpbmdQcm92aWRlckFkYXB0ZXIgYWRhcHRlciA9IG51bGw7CisKKwkvKioKKwkgKiBEZWZhdWx0IENvbnN0cnVjdG9yCisJICovCisJcHVibGljIENTVkxvZ2dlclByb3BlcnR5U3RyaW5nUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSgpIHsKKwkJc3VwZXIoKTsKKwkJUHJvcGVydHlTdHJpbmdQcm92aWRlckFkYXB0ZXJGYWN0b3J5LklOU1RBTkNFLmFkZEFkYXB0ZXJGYWN0b3J5KHRoaXMpOworCX0KKwkKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LmltcGwuQWRhcHRlckZhY3RvcnlJbXBsI2lzRmFjdG9yeUZvclR5cGUoamF2YS5sYW5nLk9iamVjdCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgYm9vbGVhbiBpc0ZhY3RvcnlGb3JUeXBlKE9iamVjdCB0eXBlKSB7CisJCXJldHVybiAgc3VwZXIuaXNGYWN0b3J5Rm9yVHlwZSh0eXBlKSB8fCB0eXBlID09IFByb3BlcnR5U3RyaW5nUHJvdmlkZXIuY2xhc3M7CisJfQorCisJCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQudXRpbC5TdGFuZGFyZEFkYXB0ZXJGYWN0b3J5I2NyZWF0ZURpc2Vhc2VNb2RlbEFkYXB0ZXIoKQorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZUxvZ2dlckFkYXB0ZXIoKSB7CisJCS8vIEhhdmUgd2UgY3JlYXRlZCBvbmUgYmVmb3JlPworCQlpZiAoYWRhcHRlciA9PSBudWxsKSB7CisJCQkvLyBObworCQkJYWRhcHRlciA9IG5ldyBDU1ZMb2dnZXJQcm9wZXJ0eVN0cmluZ1Byb3ZpZGVyQWRhcHRlcigpOworCQl9IC8vIGlmIHdlIGRpZG4ndCBjcmVhdGUgb25lIGJlZm9yZQorCQlyZXR1cm4gYWRhcHRlcjsKKwl9IC8vIGNyZWF0ZURpc2Vhc2VNb2RlbEFkYXB0ZXIKKworCisJLyoqCisJICogVGhpcyBjbGFzcyByZXByZXNlbnRzIAorCSAqLworCXB1YmxpYyBzdGF0aWMgY2xhc3MgQ1NWTG9nZ2VyUHJvcGVydHlTdHJpbmdQcm92aWRlckFkYXB0ZXIgZXh0ZW5kcworCQkJUHJvcGVydHlTdHJpbmdQcm92aWRlckFkYXB0ZXIgeworCisJCS8qKgorCQkgKiBAcGFyYW0gZGVzY3JpcHRvcgorCQkgKiBAcmV0dXJuIHRoZSBOTFMnZCBuYW1lIG9mIHRoZSBwcm9wZXJ0eSB0byBkaXNwbGF5IHRvIHRoZSB1c2VyCisJCSAqLworCQlwdWJsaWMgU3RyaW5nIGdldFByb3BlcnR5TmFtZShJSXRlbVByb3BlcnR5RGVzY3JpcHRvciBkZXNjcmlwdG9yKSB7CisJCQlyZXR1cm4gQ1NWTG9nZ2VyV2l6YXJkTWVzc2FnZXMKKwkJCQkJLmdldFN0cmluZygoKEVTdHJ1Y3R1cmFsRmVhdHVyZSkgZGVzY3JpcHRvcgorCQkJCQkJCS5nZXRGZWF0dXJlKG51bGwpKS5nZXROYW1lKCkpOworCQl9IC8vIGdldFByb3BlcnR5TmFtZQorCisJCS8qKgorCQkgKiBAcGFyYW0gZGVzY3JpcHRvcgorCQkgKiBAcmV0dXJuIHRoZSBOTFMnZCB0b29sIHRpcCB0ZXh0IHRoYXQgZGVzY3JpYmVzIHRoZSBwcm9wZXJ0eQorCQkgKi8KKwkJcHVibGljIFN0cmluZyBnZXRQcm9wZXJ0eVRvb2xUaXAoCisJCQkJSUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IgZGVzY3JpcHRvcikgeworCQkJZmluYWwgRVN0cnVjdHVyYWxGZWF0dXJlIGZlYXR1cmUgPSAoRVN0cnVjdHVyYWxGZWF0dXJlKSBkZXNjcmlwdG9yCisJCQkJCS5nZXRGZWF0dXJlKG51bGwpOworCQkJcmV0dXJuIENTVkxvZ2dlcldpemFyZE1lc3NhZ2VzLmdldFN0cmluZyhmZWF0dXJlLmdldE5hbWUoKQorCQkJCQkrIFRUX1NVRkZJWCk7CisJCX0gLy8gZ2V0UHJvcGVydHlUb29sVGlwCisKKwkJLyoqCisJCSAqIEBwYXJhbSBkZXNjcmlwdG9yCisJCSAqIEByZXR1cm4gdGhlIE5MUydkIHRleHQgdGhhdCByZXByZXNlbnRzIHRoZSB1bml0cyBvZiB0aGUKKwkJICogICAgICAgICBwcm9wZXJ0eQorCQkgKi8KKwkJcHVibGljIFN0cmluZyBnZXRQcm9wZXJ0eVVuaXRzKAorCQkJCUlJdGVtUHJvcGVydHlEZXNjcmlwdG9yIGRlc2NyaXB0b3IpIHsKKwkJCWZpbmFsIEVTdHJ1Y3R1cmFsRmVhdHVyZSBmZWF0dXJlID0gKEVTdHJ1Y3R1cmFsRmVhdHVyZSkgZGVzY3JpcHRvcgorCQkJCQkuZ2V0RmVhdHVyZShudWxsKTsKKwkJCXJldHVybiBDU1ZMb2dnZXJXaXphcmRNZXNzYWdlcy5nZXRTdHJpbmcoZmVhdHVyZS5nZXROYW1lKCkKKwkJCQkJKyBVTklUX1NVRkZJWCk7CisJCX0gLy8gZ2V0UHJvcGVydHlVbml0cworCisJfSAvLyBTdGFuZGFyZFByb3BlcnR5U3RyaW5nUHJvdmlkZXJBZGFwdGVyCit9IC8vIFN0YW5kYXJkUHJvcGVydHlTdHJpbmdQcm92aWRlckFkYXB0ZXJGYWN0b3J5CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy5jc3Yvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvd2l6YXJkcy9DU1ZMb2dnZXJXaXphcmRNZXNzYWdlcy5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMuY3N2L3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3dpemFyZHMvQ1NWTG9nZ2VyV2l6YXJkTWVzc2FnZXMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYzQ5M2JhCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMuY3N2L3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3dpemFyZHMvQ1NWTG9nZ2VyV2l6YXJkTWVzc2FnZXMuamF2YQpAQCAtMCwwICsxLDQ0IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA3LDIwMTEgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnVpLndpemFyZHM7CisKK2ltcG9ydCBqYXZhLnV0aWwuTWlzc2luZ1Jlc291cmNlRXhjZXB0aW9uOworaW1wb3J0IGphdmEudXRpbC5SZXNvdXJjZUJ1bmRsZTsKKworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5Db25zdGFudHM7CisKKy8qKgorICogVGhpcyBjbGFzcyBpcyB0aGUgUmVzb3VyY2UgQnVuZGxlIGZvciB0aGlzIHBhY2thZ2UuCisgKi8KK3B1YmxpYyBjbGFzcyBDU1ZMb2dnZXJXaXphcmRNZXNzYWdlcyB7CisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEJVTkRMRV9OQU1FID0gQ29uc3RhbnRzLklEX1JPT1QKKwkJCSsgIi51aS53aXphcmRzLmNzdmxvZ2dlcndpemFyZG1lc3NhZ2VzIjsgLy8kTk9OLU5MUy0xJAorCisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgUmVzb3VyY2VCdW5kbGUgUkVTT1VSQ0VfQlVORExFID0gUmVzb3VyY2VCdW5kbGUKKwkJCS5nZXRCdW5kbGUoQlVORExFX05BTUUpOworCisJcHJpdmF0ZSBDU1ZMb2dnZXJXaXphcmRNZXNzYWdlcygpIHsKKwkJLy8gZW1wdHkKKwl9CisKKwkvKioKKwkgKiBAcGFyYW0ga2V5CisJICogICAgICAgICAgICB0aGUga2V5IGZvciB0aGUgbWVzc2FnZQorCSAqIEByZXR1cm4gdGhlIHN0cmluZyB0aGF0IG1hdGNoZXMgdGhlIGtleQorCSAqLworCXB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldFN0cmluZyhmaW5hbCBTdHJpbmcga2V5KSB7CisJCXRyeSB7CisJCQlyZXR1cm4gUkVTT1VSQ0VfQlVORExFLmdldFN0cmluZyhrZXkpOworCQl9IGNhdGNoIChmaW5hbCBNaXNzaW5nUmVzb3VyY2VFeGNlcHRpb24gZSkgeworCQkJcmV0dXJuICchJyArIGtleSArICchJzsKKwkJfQorCX0gLy8gZ2V0U3RyaW5nCit9IC8vIERpc2Vhc2VXaXphcmRNZXNzYWdlcwpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMuY3N2L3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3dpemFyZHMvY3N2bG9nZ2Vyd2l6YXJkbWVzc2FnZXMucHJvcGVydGllcyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzLmNzdi9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS93aXphcmRzL2NzdmxvZ2dlcndpemFyZG1lc3NhZ2VzLnByb3BlcnRpZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDE4MTlkNgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzLmNzdi9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS93aXphcmRzL2NzdmxvZ2dlcndpemFyZG1lc3NhZ2VzLnByb3BlcnRpZXMKQEAgLTAsMCArMSwzMiBAQAorIy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjICogQ29weXJpZ2h0IChjKSAyMDA4LCAyMDExIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorIyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyMgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyMgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorIyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisjICoKKyMgKiBDb250cmlidXRvcnM6CisjICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorIyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjIENTViBMb2dnZXIgV2l6YXJkIE1lc3NhZ2VzCisKK2VuYWJsZWQgPSBFbmFibGVkCitlbmFibGVkVFQgPSBFbmFibGUgdGhlIGxvZ2dlciB3aGVuIHRoZSBzaW11bGF0aW9uIGJlZ2lucworZW5hYmxlZFVOSVQgPSAKKwordXNlRGVmYXVsdExvZ0RpcmVjdG9yeSA9IFVzZSBEZWZhdWx0IExvZyBEaXJlY3RvcnkKK3VzZURlZmF1bHRMb2dEaXJlY3RvcnlUVCA9IFdoZXRoZXIgb3Igbm90IHRvIHVzZSB0aGUgZGVmYXVsdCBsb2cgZmlsZSBkaXJlY3RvcnkKK3VzZURlZmF1bHRMb2dEaXJlY3RvcnlVTklUID0gCisKK2xvZ0RpcmVjdG9yeSA9IExvZyBEaXJlY3RvcnkKK2xvZ0RpcmVjdG9yeVRUID0gUGF0aCB0byB0aGUgZm9sZGVyIHRvIHN0b3JlIGxvZyBmaWxlcworbG9nRGlyZWN0b3J5VU5JVCA9IAorCitkZWxpbWV0ZXIgPSBGaWxlIERlbGltaXRlcgorZGVsaW1ldGVyVFQgPSBXaGljaCBkZWxpbWV0ZXIgdG8gdXNlIHdoZW4gc2VwYXJhdGluZyBlbnRyaWVzIGluIGxvZyBmaWxlcworZGVsaW1ldGVyVU5JVCA9IAorCitkY190aXRsZV9sb2dnZXIgPSBDU1YgTG9nZ2VyCitkY19kZXNjX2xvZ2dlciA9IFNURU0gbG9nZ2VyIGZvciB3cml0aW5nIHRoZSByZXN1bHRzIG9mIGEgc2ltdWxhdGlvbiB0byBhbiBlbnRyeS1kZWxpbWl0ZWQgdGV4dCBmaWxlCitkY19zb3VyY2VfbG9nZ2VyID0gCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy5pbWFnZXdyaXRlci8uY2xhc3NwYXRoIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMuaW1hZ2V3cml0ZXIvLmNsYXNzcGF0aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMjFlNTI3Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMuaW1hZ2V3cml0ZXIvLmNsYXNzcGF0aApAQCAtMCwwICsxLDcgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8Y2xhc3NwYXRoPgorCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJzcmMiIHBhdGg9InNyYyIvPgorCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJjb24iIHBhdGg9Im9yZy5lY2xpcHNlLmpkdC5sYXVuY2hpbmcuSlJFX0NPTlRBSU5FUi9vcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwuZGVidWcudWkubGF1bmNoZXIuU3RhbmRhcmRWTVR5cGUvSmF2YVNFLTEuNiIvPgorCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJjb24iIHBhdGg9Im9yZy5lY2xpcHNlLnBkZS5jb3JlLnJlcXVpcmVkUGx1Z2lucyIvPgorCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJvdXRwdXQiIHBhdGg9ImJpbiIvPgorPC9jbGFzc3BhdGg+CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy5pbWFnZXdyaXRlci8ucHJvamVjdCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzLmltYWdld3JpdGVyLy5wcm9qZWN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJhZjg5MzUKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy5pbWFnZXdyaXRlci8ucHJvamVjdApAQCAtMCwwICsxLDI4IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPHByb2plY3REZXNjcmlwdGlvbj4KKwk8bmFtZT5vcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMuaW1hZ2V3cml0ZXI8L25hbWU+CisJPGNvbW1lbnQ+PC9jb21tZW50PgorCTxwcm9qZWN0cz4KKwk8L3Byb2plY3RzPgorCTxidWlsZFNwZWM+CisJCTxidWlsZENvbW1hbmQ+CisJCQk8bmFtZT5vcmcuZWNsaXBzZS5qZHQuY29yZS5qYXZhYnVpbGRlcjwvbmFtZT4KKwkJCTxhcmd1bWVudHM+CisJCQk8L2FyZ3VtZW50cz4KKwkJPC9idWlsZENvbW1hbmQ+CisJCTxidWlsZENvbW1hbmQ+CisJCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuTWFuaWZlc3RCdWlsZGVyPC9uYW1lPgorCQkJPGFyZ3VtZW50cz4KKwkJCTwvYXJndW1lbnRzPgorCQk8L2J1aWxkQ29tbWFuZD4KKwkJPGJ1aWxkQ29tbWFuZD4KKwkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5TY2hlbWFCdWlsZGVyPC9uYW1lPgorCQkJPGFyZ3VtZW50cz4KKwkJCTwvYXJndW1lbnRzPgorCQk8L2J1aWxkQ29tbWFuZD4KKwk8L2J1aWxkU3BlYz4KKwk8bmF0dXJlcz4KKwkJPG5hdHVyZT5vcmcuZWNsaXBzZS5qZHQuY29yZS5qYXZhbmF0dXJlPC9uYXR1cmU+CisJCTxuYXR1cmU+b3JnLmVjbGlwc2UucGRlLlBsdWdpbk5hdHVyZTwvbmF0dXJlPgorCTwvbmF0dXJlcz4KKzwvcHJvamVjdERlc2NyaXB0aW9uPgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMuaW1hZ2V3cml0ZXIvTUVUQS1JTkYvTUFOSUZFU1QuTUYgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy5pbWFnZXdyaXRlci9NRVRBLUlORi9NQU5JRkVTVC5NRgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYjVjMjJiCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMuaW1hZ2V3cml0ZXIvTUVUQS1JTkYvTUFOSUZFU1QuTUYKQEAgLTAsMCArMSwyNiBAQAorTWFuaWZlc3QtVmVyc2lvbjogMS4wCitCdW5kbGUtTWFuaWZlc3RWZXJzaW9uOiAyCitCdW5kbGUtTmFtZTogb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzLmltYWdld3JpdGVyCitCdW5kbGUtU3ltYm9saWNOYW1lOiBvcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMuaW1hZ2V3cml0ZXI7c2luZ2xldG9uOj10cnVlCitCdW5kbGUtVmVyc2lvbjogMS4yLjEKK0J1bmRsZS1DbGFzc1BhdGg6IC4KK0J1bmRsZS1Mb2NhbGl6YXRpb246IHBsdWdpbgorUmVxdWlyZS1CdW5kbGU6IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZSwKKyBvcmcuZWNsaXBzZS5lbWYuZWNvcmUsCisgb3JnLmVjbGlwc2UuZW1mLmVkaXQ7dmlzaWJpbGl0eTo9cmVleHBvcnQsCisgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLmVkaXQ7dmlzaWJpbGl0eTo9cmVleHBvcnQsCisgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnhtaTt2aXNpYmlsaXR5Oj1yZWV4cG9ydCwKKyBvcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMsCisgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLAorIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMsCisgb3JnLmVjbGlwc2Uuc3RlbS5qb2JzLAorIG9yZy5lY2xpcHNlLnN0ZW0udWksCisgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLAorIG9yZy5hcGFjaGUuY29tbW9ucy5jb2xsZWN0aW9ucworQnVuZGxlLUFjdGl2YXRpb25Qb2xpY3k6IGxhenkKK0J1bmRsZS1WZW5kb3I6IEVjbGlwc2Uub3JnCitCdW5kbGUtQWN0aXZhdG9yOiBvcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMuaW1hZ2V3cml0ZXIucHJvdmlkZXIuSW1hZ2VXcml0ZXJMb2dnZXJFZGl0UGx1Z2luJEltcGxlbWVudGF0aW9uCitFeHBvcnQtUGFja2FnZTogb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzLmltYWdld3JpdGVyLAorIG9yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy5pbWFnZXdyaXRlci5pbXBsLAorIG9yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy5pbWFnZXdyaXRlci5wcm92aWRlciwKKyBvcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMuaW1hZ2V3cml0ZXIudXRpbApkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMuaW1hZ2V3cml0ZXIvYmluL29yZy9lY2xpcHNlL3N0ZW0vbG9nZ2Vycy9pbWFnZXdyaXRlci9BY3RpdmF0b3IuY2xhc3MgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy5pbWFnZXdyaXRlci9iaW4vb3JnL2VjbGlwc2Uvc3RlbS9sb2dnZXJzL2ltYWdld3JpdGVyL0FjdGl2YXRvci5jbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZTA2MjNjCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMuaW1hZ2V3cml0ZXIvYmluL29yZy9lY2xpcHNlL3N0ZW0vbG9nZ2Vycy9pbWFnZXdyaXRlci9BY3RpdmF0b3IuY2xhc3MKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMuaW1hZ2V3cml0ZXIvYmluL29yZy9lY2xpcHNlL3N0ZW0vbG9nZ2Vycy9pbWFnZXdyaXRlci9FcXVpcmVjdGFuZ3VsYXJNYXBMb2dnZXIuY2xhc3MgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy5pbWFnZXdyaXRlci9iaW4vb3JnL2VjbGlwc2Uvc3RlbS9sb2dnZXJzL2ltYWdld3JpdGVyL0VxdWlyZWN0YW5ndWxhck1hcExvZ2dlci5jbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41OTRiZjRiCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMuaW1hZ2V3cml0ZXIvYmluL29yZy9lY2xpcHNlL3N0ZW0vbG9nZ2Vycy9pbWFnZXdyaXRlci9FcXVpcmVjdGFuZ3VsYXJNYXBMb2dnZXIuY2xhc3MKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMuaW1hZ2V3cml0ZXIvYmluL29yZy9lY2xpcHNlL3N0ZW0vbG9nZ2Vycy9pbWFnZXdyaXRlci9JbWFnZVdyaXRlckxvZ2dlci5jbGFzcyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzLmltYWdld3JpdGVyL2Jpbi9vcmcvZWNsaXBzZS9zdGVtL2xvZ2dlcnMvaW1hZ2V3cml0ZXIvSW1hZ2VXcml0ZXJMb2dnZXIuY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2I2NWMyMwotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzLmltYWdld3JpdGVyL2Jpbi9vcmcvZWNsaXBzZS9zdGVtL2xvZ2dlcnMvaW1hZ2V3cml0ZXIvSW1hZ2VXcml0ZXJMb2dnZXIuY2xhc3MKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMuaW1hZ2V3cml0ZXIvYmluL29yZy9lY2xpcHNlL3N0ZW0vbG9nZ2Vycy9pbWFnZXdyaXRlci9JbWFnZXdyaXRlckZhY3RvcnkuY2xhc3MgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy5pbWFnZXdyaXRlci9iaW4vb3JnL2VjbGlwc2Uvc3RlbS9sb2dnZXJzL2ltYWdld3JpdGVyL0ltYWdld3JpdGVyRmFjdG9yeS5jbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZWI2ZTJkCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMuaW1hZ2V3cml0ZXIvYmluL29yZy9lY2xpcHNlL3N0ZW0vbG9nZ2Vycy9pbWFnZXdyaXRlci9JbWFnZXdyaXRlckZhY3RvcnkuY2xhc3MKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMuaW1hZ2V3cml0ZXIvYmluL29yZy9lY2xpcHNlL3N0ZW0vbG9nZ2Vycy9pbWFnZXdyaXRlci9JbWFnZXdyaXRlclBhY2thZ2UkTGl0ZXJhbHMuY2xhc3MgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy5pbWFnZXdyaXRlci9iaW4vb3JnL2VjbGlwc2Uvc3RlbS9sb2dnZXJzL2ltYWdld3JpdGVyL0ltYWdld3JpdGVyUGFja2FnZSRMaXRlcmFscy5jbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZjA5N2IyCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMuaW1hZ2V3cml0ZXIvYmluL29yZy9lY2xpcHNlL3N0ZW0vbG9nZ2Vycy9pbWFnZXdyaXRlci9JbWFnZXdyaXRlclBhY2thZ2UkTGl0ZXJhbHMuY2xhc3MKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMuaW1hZ2V3cml0ZXIvYmluL29yZy9lY2xpcHNlL3N0ZW0vbG9nZ2Vycy9pbWFnZXdyaXRlci9JbWFnZXdyaXRlclBhY2thZ2UuY2xhc3MgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy5pbWFnZXdyaXRlci9iaW4vb3JnL2VjbGlwc2Uvc3RlbS9sb2dnZXJzL2ltYWdld3JpdGVyL0ltYWdld3JpdGVyUGFja2FnZS5jbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YWM2MjIyCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMuaW1hZ2V3cml0ZXIvYmluL29yZy9lY2xpcHNlL3N0ZW0vbG9nZ2Vycy9pbWFnZXdyaXRlci9JbWFnZXdyaXRlclBhY2thZ2UuY2xhc3MKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMuaW1hZ2V3cml0ZXIvYmluL29yZy9lY2xpcHNlL3N0ZW0vbG9nZ2Vycy9pbWFnZXdyaXRlci9NQVBfUFJPSkVDVElPTlMuY2xhc3MgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy5pbWFnZXdyaXRlci9iaW4vb3JnL2VjbGlwc2Uvc3RlbS9sb2dnZXJzL2ltYWdld3JpdGVyL01BUF9QUk9KRUNUSU9OUy5jbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yODBhYTY3Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMuaW1hZ2V3cml0ZXIvYmluL29yZy9lY2xpcHNlL3N0ZW0vbG9nZ2Vycy9pbWFnZXdyaXRlci9NQVBfUFJPSkVDVElPTlMuY2xhc3MKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMuaW1hZ2V3cml0ZXIvYmluL29yZy9lY2xpcHNlL3N0ZW0vbG9nZ2Vycy9pbWFnZXdyaXRlci9NYXBWaWV3SW1hZ2VXcml0ZXJMb2dnZXIuY2xhc3MgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy5pbWFnZXdyaXRlci9iaW4vb3JnL2VjbGlwc2Uvc3RlbS9sb2dnZXJzL2ltYWdld3JpdGVyL01hcFZpZXdJbWFnZVdyaXRlckxvZ2dlci5jbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yM2ExZTdjCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMuaW1hZ2V3cml0ZXIvYmluL29yZy9lY2xpcHNlL3N0ZW0vbG9nZ2Vycy9pbWFnZXdyaXRlci9NYXBWaWV3SW1hZ2VXcml0ZXJMb2dnZXIuY2xhc3MKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMuaW1hZ2V3cml0ZXIvYmluL29yZy9lY2xpcHNlL3N0ZW0vbG9nZ2Vycy9pbWFnZXdyaXRlci9Qcm9qZWN0ZWRNYXBJbWFnZUxvZ2dlci5jbGFzcyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzLmltYWdld3JpdGVyL2Jpbi9vcmcvZWNsaXBzZS9zdGVtL2xvZ2dlcnMvaW1hZ2V3cml0ZXIvUHJvamVjdGVkTWFwSW1hZ2VMb2dnZXIuY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2FmM2ZiZQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzLmltYWdld3JpdGVyL2Jpbi9vcmcvZWNsaXBzZS9zdGVtL2xvZ2dlcnMvaW1hZ2V3cml0ZXIvUHJvamVjdGVkTWFwSW1hZ2VMb2dnZXIuY2xhc3MKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMuaW1hZ2V3cml0ZXIvYmluL29yZy9lY2xpcHNlL3N0ZW0vbG9nZ2Vycy9pbWFnZXdyaXRlci9pbXBsL0VxdWlyZWN0YW5ndWxhck1hcExvZ2dlckltcGwuY2xhc3MgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy5pbWFnZXdyaXRlci9iaW4vb3JnL2VjbGlwc2Uvc3RlbS9sb2dnZXJzL2ltYWdld3JpdGVyL2ltcGwvRXF1aXJlY3Rhbmd1bGFyTWFwTG9nZ2VySW1wbC5jbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NmM0ZmIzCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMuaW1hZ2V3cml0ZXIvYmluL29yZy9lY2xpcHNlL3N0ZW0vbG9nZ2Vycy9pbWFnZXdyaXRlci9pbXBsL0VxdWlyZWN0YW5ndWxhck1hcExvZ2dlckltcGwuY2xhc3MKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMuaW1hZ2V3cml0ZXIvYmluL29yZy9lY2xpcHNlL3N0ZW0vbG9nZ2Vycy9pbWFnZXdyaXRlci9pbXBsL0ltYWdlV3JpdGVyTG9nZ2VySW1wbC5jbGFzcyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzLmltYWdld3JpdGVyL2Jpbi9vcmcvZWNsaXBzZS9zdGVtL2xvZ2dlcnMvaW1hZ2V3cml0ZXIvaW1wbC9JbWFnZVdyaXRlckxvZ2dlckltcGwuY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmU5ZWVhNgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzLmltYWdld3JpdGVyL2Jpbi9vcmcvZWNsaXBzZS9zdGVtL2xvZ2dlcnMvaW1hZ2V3cml0ZXIvaW1wbC9JbWFnZVdyaXRlckxvZ2dlckltcGwuY2xhc3MKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMuaW1hZ2V3cml0ZXIvYmluL29yZy9lY2xpcHNlL3N0ZW0vbG9nZ2Vycy9pbWFnZXdyaXRlci9pbXBsL0ltYWdld3JpdGVyRmFjdG9yeUltcGwuY2xhc3MgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy5pbWFnZXdyaXRlci9iaW4vb3JnL2VjbGlwc2Uvc3RlbS9sb2dnZXJzL2ltYWdld3JpdGVyL2ltcGwvSW1hZ2V3cml0ZXJGYWN0b3J5SW1wbC5jbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNzI5Zjc3Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMuaW1hZ2V3cml0ZXIvYmluL29yZy9lY2xpcHNlL3N0ZW0vbG9nZ2Vycy9pbWFnZXdyaXRlci9pbXBsL0ltYWdld3JpdGVyRmFjdG9yeUltcGwuY2xhc3MKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMuaW1hZ2V3cml0ZXIvYmluL29yZy9lY2xpcHNlL3N0ZW0vbG9nZ2Vycy9pbWFnZXdyaXRlci9pbXBsL0ltYWdld3JpdGVyUGFja2FnZUltcGwuY2xhc3MgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy5pbWFnZXdyaXRlci9iaW4vb3JnL2VjbGlwc2Uvc3RlbS9sb2dnZXJzL2ltYWdld3JpdGVyL2ltcGwvSW1hZ2V3cml0ZXJQYWNrYWdlSW1wbC5jbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YmMyNzNjCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMuaW1hZ2V3cml0ZXIvYmluL29yZy9lY2xpcHNlL3N0ZW0vbG9nZ2Vycy9pbWFnZXdyaXRlci9pbXBsL0ltYWdld3JpdGVyUGFja2FnZUltcGwuY2xhc3MKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMuaW1hZ2V3cml0ZXIvYmluL29yZy9lY2xpcHNlL3N0ZW0vbG9nZ2Vycy9pbWFnZXdyaXRlci9pbXBsL01hcFZpZXdJbWFnZVdyaXRlckxvZ2dlckltcGwkMS5jbGFzcyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzLmltYWdld3JpdGVyL2Jpbi9vcmcvZWNsaXBzZS9zdGVtL2xvZ2dlcnMvaW1hZ2V3cml0ZXIvaW1wbC9NYXBWaWV3SW1hZ2VXcml0ZXJMb2dnZXJJbXBsJDEuY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWQ1NmVmOAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzLmltYWdld3JpdGVyL2Jpbi9vcmcvZWNsaXBzZS9zdGVtL2xvZ2dlcnMvaW1hZ2V3cml0ZXIvaW1wbC9NYXBWaWV3SW1hZ2VXcml0ZXJMb2dnZXJJbXBsJDEuY2xhc3MKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMuaW1hZ2V3cml0ZXIvYmluL29yZy9lY2xpcHNlL3N0ZW0vbG9nZ2Vycy9pbWFnZXdyaXRlci9pbXBsL01hcFZpZXdJbWFnZVdyaXRlckxvZ2dlckltcGwuY2xhc3MgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy5pbWFnZXdyaXRlci9iaW4vb3JnL2VjbGlwc2Uvc3RlbS9sb2dnZXJzL2ltYWdld3JpdGVyL2ltcGwvTWFwVmlld0ltYWdlV3JpdGVyTG9nZ2VySW1wbC5jbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYjAxZjQ4Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMuaW1hZ2V3cml0ZXIvYmluL29yZy9lY2xpcHNlL3N0ZW0vbG9nZ2Vycy9pbWFnZXdyaXRlci9pbXBsL01hcFZpZXdJbWFnZVdyaXRlckxvZ2dlckltcGwuY2xhc3MKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMuaW1hZ2V3cml0ZXIvYmluL29yZy9lY2xpcHNlL3N0ZW0vbG9nZ2Vycy9pbWFnZXdyaXRlci9pbXBsL1Byb2plY3RlZE1hcEltYWdlTG9nZ2VySW1wbC5jbGFzcyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzLmltYWdld3JpdGVyL2Jpbi9vcmcvZWNsaXBzZS9zdGVtL2xvZ2dlcnMvaW1hZ2V3cml0ZXIvaW1wbC9Qcm9qZWN0ZWRNYXBJbWFnZUxvZ2dlckltcGwuY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDc0ZjUxNQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzLmltYWdld3JpdGVyL2Jpbi9vcmcvZWNsaXBzZS9zdGVtL2xvZ2dlcnMvaW1hZ2V3cml0ZXIvaW1wbC9Qcm9qZWN0ZWRNYXBJbWFnZUxvZ2dlckltcGwuY2xhc3MKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMuaW1hZ2V3cml0ZXIvYmluL29yZy9lY2xpcHNlL3N0ZW0vbG9nZ2Vycy9pbWFnZXdyaXRlci9sb2dnZXIvRGVjb3JhdG9yUHJvcGVydHlJbWFnZVdyaXRlci5jbGFzcyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzLmltYWdld3JpdGVyL2Jpbi9vcmcvZWNsaXBzZS9zdGVtL2xvZ2dlcnMvaW1hZ2V3cml0ZXIvbG9nZ2VyL0RlY29yYXRvclByb3BlcnR5SW1hZ2VXcml0ZXIuY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTNkY2QyZgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzLmltYWdld3JpdGVyL2Jpbi9vcmcvZWNsaXBzZS9zdGVtL2xvZ2dlcnMvaW1hZ2V3cml0ZXIvbG9nZ2VyL0RlY29yYXRvclByb3BlcnR5SW1hZ2VXcml0ZXIuY2xhc3MKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMuaW1hZ2V3cml0ZXIvYmluL29yZy9lY2xpcHNlL3N0ZW0vbG9nZ2Vycy9pbWFnZXdyaXRlci9sb2dnZXIvUG9seWdvbkhhbmRsZXIkUHJvamVjdGVkUG9seWdvbi5jbGFzcyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzLmltYWdld3JpdGVyL2Jpbi9vcmcvZWNsaXBzZS9zdGVtL2xvZ2dlcnMvaW1hZ2V3cml0ZXIvbG9nZ2VyL1BvbHlnb25IYW5kbGVyJFByb2plY3RlZFBvbHlnb24uY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTk3OGMwZAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzLmltYWdld3JpdGVyL2Jpbi9vcmcvZWNsaXBzZS9zdGVtL2xvZ2dlcnMvaW1hZ2V3cml0ZXIvbG9nZ2VyL1BvbHlnb25IYW5kbGVyJFByb2plY3RlZFBvbHlnb24uY2xhc3MKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMuaW1hZ2V3cml0ZXIvYmluL29yZy9lY2xpcHNlL3N0ZW0vbG9nZ2Vycy9pbWFnZXdyaXRlci9sb2dnZXIvUG9seWdvbkhhbmRsZXIkUHJvamVjdGVkUG9seWdvbnMuY2xhc3MgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy5pbWFnZXdyaXRlci9iaW4vb3JnL2VjbGlwc2Uvc3RlbS9sb2dnZXJzL2ltYWdld3JpdGVyL2xvZ2dlci9Qb2x5Z29uSGFuZGxlciRQcm9qZWN0ZWRQb2x5Z29ucy5jbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYjkzNGY3Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMuaW1hZ2V3cml0ZXIvYmluL29yZy9lY2xpcHNlL3N0ZW0vbG9nZ2Vycy9pbWFnZXdyaXRlci9sb2dnZXIvUG9seWdvbkhhbmRsZXIkUHJvamVjdGVkUG9seWdvbnMuY2xhc3MKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMuaW1hZ2V3cml0ZXIvYmluL29yZy9lY2xpcHNlL3N0ZW0vbG9nZ2Vycy9pbWFnZXdyaXRlci9sb2dnZXIvUG9seWdvbkhhbmRsZXIuY2xhc3MgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy5pbWFnZXdyaXRlci9iaW4vb3JnL2VjbGlwc2Uvc3RlbS9sb2dnZXJzL2ltYWdld3JpdGVyL2xvZ2dlci9Qb2x5Z29uSGFuZGxlci5jbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ODBhNjYwCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMuaW1hZ2V3cml0ZXIvYmluL29yZy9lY2xpcHNlL3N0ZW0vbG9nZ2Vycy9pbWFnZXdyaXRlci9sb2dnZXIvUG9seWdvbkhhbmRsZXIuY2xhc3MKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMuaW1hZ2V3cml0ZXIvYmluL29yZy9lY2xpcHNlL3N0ZW0vbG9nZ2Vycy9pbWFnZXdyaXRlci9sb2dnZXIvVXRpbHMuY2xhc3MgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy5pbWFnZXdyaXRlci9iaW4vb3JnL2VjbGlwc2Uvc3RlbS9sb2dnZXJzL2ltYWdld3JpdGVyL2xvZ2dlci9VdGlscy5jbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MTYwMjg4Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMuaW1hZ2V3cml0ZXIvYmluL29yZy9lY2xpcHNlL3N0ZW0vbG9nZ2Vycy9pbWFnZXdyaXRlci9sb2dnZXIvVXRpbHMuY2xhc3MKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMuaW1hZ2V3cml0ZXIvYmluL29yZy9lY2xpcHNlL3N0ZW0vbG9nZ2Vycy9pbWFnZXdyaXRlci9sb2dnZXIvcHJvamVjdGlvbnMvRXF1aXJlY3Rhbmd1bGFyLmNsYXNzIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMuaW1hZ2V3cml0ZXIvYmluL29yZy9lY2xpcHNlL3N0ZW0vbG9nZ2Vycy9pbWFnZXdyaXRlci9sb2dnZXIvcHJvamVjdGlvbnMvRXF1aXJlY3Rhbmd1bGFyLmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRlZTU5ZDQKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy5pbWFnZXdyaXRlci9iaW4vb3JnL2VjbGlwc2Uvc3RlbS9sb2dnZXJzL2ltYWdld3JpdGVyL2xvZ2dlci9wcm9qZWN0aW9ucy9FcXVpcmVjdGFuZ3VsYXIuY2xhc3MKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMuaW1hZ2V3cml0ZXIvYmluL29yZy9lY2xpcHNlL3N0ZW0vbG9nZ2Vycy9pbWFnZXdyaXRlci9sb2dnZXIvcHJvamVjdGlvbnMvSU1hcFByb2plY3Rpb24uY2xhc3MgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy5pbWFnZXdyaXRlci9iaW4vb3JnL2VjbGlwc2Uvc3RlbS9sb2dnZXJzL2ltYWdld3JpdGVyL2xvZ2dlci9wcm9qZWN0aW9ucy9JTWFwUHJvamVjdGlvbi5jbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MTg5YTkzCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMuaW1hZ2V3cml0ZXIvYmluL29yZy9lY2xpcHNlL3N0ZW0vbG9nZ2Vycy9pbWFnZXdyaXRlci9sb2dnZXIvcHJvamVjdGlvbnMvSU1hcFByb2plY3Rpb24uY2xhc3MKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMuaW1hZ2V3cml0ZXIvYmluL29yZy9lY2xpcHNlL3N0ZW0vbG9nZ2Vycy9pbWFnZXdyaXRlci9wcmVzZW50YXRpb24vSW1hZ2V3cml0ZXJBY3Rpb25CYXJDb250cmlidXRvciQxLmNsYXNzIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMuaW1hZ2V3cml0ZXIvYmluL29yZy9lY2xpcHNlL3N0ZW0vbG9nZ2Vycy9pbWFnZXdyaXRlci9wcmVzZW50YXRpb24vSW1hZ2V3cml0ZXJBY3Rpb25CYXJDb250cmlidXRvciQxLmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQyMDE5MjcKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy5pbWFnZXdyaXRlci9iaW4vb3JnL2VjbGlwc2Uvc3RlbS9sb2dnZXJzL2ltYWdld3JpdGVyL3ByZXNlbnRhdGlvbi9JbWFnZXdyaXRlckFjdGlvbkJhckNvbnRyaWJ1dG9yJDEuY2xhc3MKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMuaW1hZ2V3cml0ZXIvYmluL29yZy9lY2xpcHNlL3N0ZW0vbG9nZ2Vycy9pbWFnZXdyaXRlci9wcmVzZW50YXRpb24vSW1hZ2V3cml0ZXJBY3Rpb25CYXJDb250cmlidXRvciQyLmNsYXNzIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMuaW1hZ2V3cml0ZXIvYmluL29yZy9lY2xpcHNlL3N0ZW0vbG9nZ2Vycy9pbWFnZXdyaXRlci9wcmVzZW50YXRpb24vSW1hZ2V3cml0ZXJBY3Rpb25CYXJDb250cmlidXRvciQyLmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE2ODk3MWYKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy5pbWFnZXdyaXRlci9iaW4vb3JnL2VjbGlwc2Uvc3RlbS9sb2dnZXJzL2ltYWdld3JpdGVyL3ByZXNlbnRhdGlvbi9JbWFnZXdyaXRlckFjdGlvbkJhckNvbnRyaWJ1dG9yJDIuY2xhc3MKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMuaW1hZ2V3cml0ZXIvYmluL29yZy9lY2xpcHNlL3N0ZW0vbG9nZ2Vycy9pbWFnZXdyaXRlci9wcmVzZW50YXRpb24vSW1hZ2V3cml0ZXJBY3Rpb25CYXJDb250cmlidXRvciQzLmNsYXNzIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMuaW1hZ2V3cml0ZXIvYmluL29yZy9lY2xpcHNlL3N0ZW0vbG9nZ2Vycy9pbWFnZXdyaXRlci9wcmVzZW50YXRpb24vSW1hZ2V3cml0ZXJBY3Rpb25CYXJDb250cmlidXRvciQzLmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFhMTM1MjMKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy5pbWFnZXdyaXRlci9iaW4vb3JnL2VjbGlwc2Uvc3RlbS9sb2dnZXJzL2ltYWdld3JpdGVyL3ByZXNlbnRhdGlvbi9JbWFnZXdyaXRlckFjdGlvbkJhckNvbnRyaWJ1dG9yJDMuY2xhc3MKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMuaW1hZ2V3cml0ZXIvYmluL29yZy9lY2xpcHNlL3N0ZW0vbG9nZ2Vycy9pbWFnZXdyaXRlci9wcmVzZW50YXRpb24vSW1hZ2V3cml0ZXJBY3Rpb25CYXJDb250cmlidXRvciROZXdBY3Rpb24uY2xhc3MgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy5pbWFnZXdyaXRlci9iaW4vb3JnL2VjbGlwc2Uvc3RlbS9sb2dnZXJzL2ltYWdld3JpdGVyL3ByZXNlbnRhdGlvbi9JbWFnZXdyaXRlckFjdGlvbkJhckNvbnRyaWJ1dG9yJE5ld0FjdGlvbi5jbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMzQ2YmYxCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMuaW1hZ2V3cml0ZXIvYmluL29yZy9lY2xpcHNlL3N0ZW0vbG9nZ2Vycy9pbWFnZXdyaXRlci9wcmVzZW50YXRpb24vSW1hZ2V3cml0ZXJBY3Rpb25CYXJDb250cmlidXRvciROZXdBY3Rpb24uY2xhc3MKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMuaW1hZ2V3cml0ZXIvYmluL29yZy9lY2xpcHNlL3N0ZW0vbG9nZ2Vycy9pbWFnZXdyaXRlci9wcmVzZW50YXRpb24vSW1hZ2V3cml0ZXJBY3Rpb25CYXJDb250cmlidXRvci5jbGFzcyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzLmltYWdld3JpdGVyL2Jpbi9vcmcvZWNsaXBzZS9zdGVtL2xvZ2dlcnMvaW1hZ2V3cml0ZXIvcHJlc2VudGF0aW9uL0ltYWdld3JpdGVyQWN0aW9uQmFyQ29udHJpYnV0b3IuY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWQwODkyOAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzLmltYWdld3JpdGVyL2Jpbi9vcmcvZWNsaXBzZS9zdGVtL2xvZ2dlcnMvaW1hZ2V3cml0ZXIvcHJlc2VudGF0aW9uL0ltYWdld3JpdGVyQWN0aW9uQmFyQ29udHJpYnV0b3IuY2xhc3MKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMuaW1hZ2V3cml0ZXIvYmluL29yZy9lY2xpcHNlL3N0ZW0vbG9nZ2Vycy9pbWFnZXdyaXRlci9wcmVzZW50YXRpb24vSW1hZ2V3cml0ZXJFZGl0b3IkMS5jbGFzcyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzLmltYWdld3JpdGVyL2Jpbi9vcmcvZWNsaXBzZS9zdGVtL2xvZ2dlcnMvaW1hZ2V3cml0ZXIvcHJlc2VudGF0aW9uL0ltYWdld3JpdGVyRWRpdG9yJDEuY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjUyNmZjYwotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzLmltYWdld3JpdGVyL2Jpbi9vcmcvZWNsaXBzZS9zdGVtL2xvZ2dlcnMvaW1hZ2V3cml0ZXIvcHJlc2VudGF0aW9uL0ltYWdld3JpdGVyRWRpdG9yJDEuY2xhc3MKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMuaW1hZ2V3cml0ZXIvYmluL29yZy9lY2xpcHNlL3N0ZW0vbG9nZ2Vycy9pbWFnZXdyaXRlci9wcmVzZW50YXRpb24vSW1hZ2V3cml0ZXJFZGl0b3IkMTAuY2xhc3MgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy5pbWFnZXdyaXRlci9iaW4vb3JnL2VjbGlwc2Uvc3RlbS9sb2dnZXJzL2ltYWdld3JpdGVyL3ByZXNlbnRhdGlvbi9JbWFnZXdyaXRlckVkaXRvciQxMC5jbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYTYwOGRlCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMuaW1hZ2V3cml0ZXIvYmluL29yZy9lY2xpcHNlL3N0ZW0vbG9nZ2Vycy9pbWFnZXdyaXRlci9wcmVzZW50YXRpb24vSW1hZ2V3cml0ZXJFZGl0b3IkMTAuY2xhc3MKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMuaW1hZ2V3cml0ZXIvYmluL29yZy9lY2xpcHNlL3N0ZW0vbG9nZ2Vycy9pbWFnZXdyaXRlci9wcmVzZW50YXRpb24vSW1hZ2V3cml0ZXJFZGl0b3IkMTEuY2xhc3MgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy5pbWFnZXdyaXRlci9iaW4vb3JnL2VjbGlwc2Uvc3RlbS9sb2dnZXJzL2ltYWdld3JpdGVyL3ByZXNlbnRhdGlvbi9JbWFnZXdyaXRlckVkaXRvciQxMS5jbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44Yjc5Y2UwCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMuaW1hZ2V3cml0ZXIvYmluL29yZy9lY2xpcHNlL3N0ZW0vbG9nZ2Vycy9pbWFnZXdyaXRlci9wcmVzZW50YXRpb24vSW1hZ2V3cml0ZXJFZGl0b3IkMTEuY2xhc3MKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMuaW1hZ2V3cml0ZXIvYmluL29yZy9lY2xpcHNlL3N0ZW0vbG9nZ2Vycy9pbWFnZXdyaXRlci9wcmVzZW50YXRpb24vSW1hZ2V3cml0ZXJFZGl0b3IkMTIuY2xhc3MgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy5pbWFnZXdyaXRlci9iaW4vb3JnL2VjbGlwc2Uvc3RlbS9sb2dnZXJzL2ltYWdld3JpdGVyL3ByZXNlbnRhdGlvbi9JbWFnZXdyaXRlckVkaXRvciQxMi5jbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jOWFhMzljCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMuaW1hZ2V3cml0ZXIvYmluL29yZy9lY2xpcHNlL3N0ZW0vbG9nZ2Vycy9pbWFnZXdyaXRlci9wcmVzZW50YXRpb24vSW1hZ2V3cml0ZXJFZGl0b3IkMTIuY2xhc3MKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMuaW1hZ2V3cml0ZXIvYmluL29yZy9lY2xpcHNlL3N0ZW0vbG9nZ2Vycy9pbWFnZXdyaXRlci9wcmVzZW50YXRpb24vSW1hZ2V3cml0ZXJFZGl0b3IkMTMuY2xhc3MgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy5pbWFnZXdyaXRlci9iaW4vb3JnL2VjbGlwc2Uvc3RlbS9sb2dnZXJzL2ltYWdld3JpdGVyL3ByZXNlbnRhdGlvbi9JbWFnZXdyaXRlckVkaXRvciQxMy5jbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNzkwZWRjCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMuaW1hZ2V3cml0ZXIvYmluL29yZy9lY2xpcHNlL3N0ZW0vbG9nZ2Vycy9pbWFnZXdyaXRlci9wcmVzZW50YXRpb24vSW1hZ2V3cml0ZXJFZGl0b3IkMTMuY2xhc3MKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMuaW1hZ2V3cml0ZXIvYmluL29yZy9lY2xpcHNlL3N0ZW0vbG9nZ2Vycy9pbWFnZXdyaXRlci9wcmVzZW50YXRpb24vSW1hZ2V3cml0ZXJFZGl0b3IkMTQuY2xhc3MgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy5pbWFnZXdyaXRlci9iaW4vb3JnL2VjbGlwc2Uvc3RlbS9sb2dnZXJzL2ltYWdld3JpdGVyL3ByZXNlbnRhdGlvbi9JbWFnZXdyaXRlckVkaXRvciQxNC5jbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZjNmOGYxCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMuaW1hZ2V3cml0ZXIvYmluL29yZy9lY2xpcHNlL3N0ZW0vbG9nZ2Vycy9pbWFnZXdyaXRlci9wcmVzZW50YXRpb24vSW1hZ2V3cml0ZXJFZGl0b3IkMTQuY2xhc3MKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMuaW1hZ2V3cml0ZXIvYmluL29yZy9lY2xpcHNlL3N0ZW0vbG9nZ2Vycy9pbWFnZXdyaXRlci9wcmVzZW50YXRpb24vSW1hZ2V3cml0ZXJFZGl0b3IkMTUuY2xhc3MgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy5pbWFnZXdyaXRlci9iaW4vb3JnL2VjbGlwc2Uvc3RlbS9sb2dnZXJzL2ltYWdld3JpdGVyL3ByZXNlbnRhdGlvbi9JbWFnZXdyaXRlckVkaXRvciQxNS5jbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMWI1ZTU3Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMuaW1hZ2V3cml0ZXIvYmluL29yZy9lY2xpcHNlL3N0ZW0vbG9nZ2Vycy9pbWFnZXdyaXRlci9wcmVzZW50YXRpb24vSW1hZ2V3cml0ZXJFZGl0b3IkMTUuY2xhc3MKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMuaW1hZ2V3cml0ZXIvYmluL29yZy9lY2xpcHNlL3N0ZW0vbG9nZ2Vycy9pbWFnZXdyaXRlci9wcmVzZW50YXRpb24vSW1hZ2V3cml0ZXJFZGl0b3IkMTYuY2xhc3MgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy5pbWFnZXdyaXRlci9iaW4vb3JnL2VjbGlwc2Uvc3RlbS9sb2dnZXJzL2ltYWdld3JpdGVyL3ByZXNlbnRhdGlvbi9JbWFnZXdyaXRlckVkaXRvciQxNi5jbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNWE4NGJiCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMuaW1hZ2V3cml0ZXIvYmluL29yZy9lY2xpcHNlL3N0ZW0vbG9nZ2Vycy9pbWFnZXdyaXRlci9wcmVzZW50YXRpb24vSW1hZ2V3cml0ZXJFZGl0b3IkMTYuY2xhc3MKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMuaW1hZ2V3cml0ZXIvYmluL29yZy9lY2xpcHNlL3N0ZW0vbG9nZ2Vycy9pbWFnZXdyaXRlci9wcmVzZW50YXRpb24vSW1hZ2V3cml0ZXJFZGl0b3IkMTcuY2xhc3MgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy5pbWFnZXdyaXRlci9iaW4vb3JnL2VjbGlwc2Uvc3RlbS9sb2dnZXJzL2ltYWdld3JpdGVyL3ByZXNlbnRhdGlvbi9JbWFnZXdyaXRlckVkaXRvciQxNy5jbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMTAzYmExCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMuaW1hZ2V3cml0ZXIvYmluL29yZy9lY2xpcHNlL3N0ZW0vbG9nZ2Vycy9pbWFnZXdyaXRlci9wcmVzZW50YXRpb24vSW1hZ2V3cml0ZXJFZGl0b3IkMTcuY2xhc3MKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMuaW1hZ2V3cml0ZXIvYmluL29yZy9lY2xpcHNlL3N0ZW0vbG9nZ2Vycy9pbWFnZXdyaXRlci9wcmVzZW50YXRpb24vSW1hZ2V3cml0ZXJFZGl0b3IkMU15Q29udGVudE91dGxpbmVQYWdlLmNsYXNzIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMuaW1hZ2V3cml0ZXIvYmluL29yZy9lY2xpcHNlL3N0ZW0vbG9nZ2Vycy9pbWFnZXdyaXRlci9wcmVzZW50YXRpb24vSW1hZ2V3cml0ZXJFZGl0b3IkMU15Q29udGVudE91dGxpbmVQYWdlLmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcxNzZhOTcKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy5pbWFnZXdyaXRlci9iaW4vb3JnL2VjbGlwc2Uvc3RlbS9sb2dnZXJzL2ltYWdld3JpdGVyL3ByZXNlbnRhdGlvbi9JbWFnZXdyaXRlckVkaXRvciQxTXlDb250ZW50T3V0bGluZVBhZ2UuY2xhc3MKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMuaW1hZ2V3cml0ZXIvYmluL29yZy9lY2xpcHNlL3N0ZW0vbG9nZ2Vycy9pbWFnZXdyaXRlci9wcmVzZW50YXRpb24vSW1hZ2V3cml0ZXJFZGl0b3IkMiQxLmNsYXNzIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMuaW1hZ2V3cml0ZXIvYmluL29yZy9lY2xpcHNlL3N0ZW0vbG9nZ2Vycy9pbWFnZXdyaXRlci9wcmVzZW50YXRpb24vSW1hZ2V3cml0ZXJFZGl0b3IkMiQxLmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhjZDg2MzAKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy5pbWFnZXdyaXRlci9iaW4vb3JnL2VjbGlwc2Uvc3RlbS9sb2dnZXJzL2ltYWdld3JpdGVyL3ByZXNlbnRhdGlvbi9JbWFnZXdyaXRlckVkaXRvciQyJDEuY2xhc3MKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMuaW1hZ2V3cml0ZXIvYmluL29yZy9lY2xpcHNlL3N0ZW0vbG9nZ2Vycy9pbWFnZXdyaXRlci9wcmVzZW50YXRpb24vSW1hZ2V3cml0ZXJFZGl0b3IkMi5jbGFzcyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzLmltYWdld3JpdGVyL2Jpbi9vcmcvZWNsaXBzZS9zdGVtL2xvZ2dlcnMvaW1hZ2V3cml0ZXIvcHJlc2VudGF0aW9uL0ltYWdld3JpdGVyRWRpdG9yJDIuY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2U3NWJkZQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzLmltYWdld3JpdGVyL2Jpbi9vcmcvZWNsaXBzZS9zdGVtL2xvZ2dlcnMvaW1hZ2V3cml0ZXIvcHJlc2VudGF0aW9uL0ltYWdld3JpdGVyRWRpdG9yJDIuY2xhc3MKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMuaW1hZ2V3cml0ZXIvYmluL29yZy9lY2xpcHNlL3N0ZW0vbG9nZ2Vycy9pbWFnZXdyaXRlci9wcmVzZW50YXRpb24vSW1hZ2V3cml0ZXJFZGl0b3IkMyQxLmNsYXNzIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMuaW1hZ2V3cml0ZXIvYmluL29yZy9lY2xpcHNlL3N0ZW0vbG9nZ2Vycy9pbWFnZXdyaXRlci9wcmVzZW50YXRpb24vSW1hZ2V3cml0ZXJFZGl0b3IkMyQxLmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdlM2YwYzkKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy5pbWFnZXdyaXRlci9iaW4vb3JnL2VjbGlwc2Uvc3RlbS9sb2dnZXJzL2ltYWdld3JpdGVyL3ByZXNlbnRhdGlvbi9JbWFnZXdyaXRlckVkaXRvciQzJDEuY2xhc3MKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMuaW1hZ2V3cml0ZXIvYmluL29yZy9lY2xpcHNlL3N0ZW0vbG9nZ2Vycy9pbWFnZXdyaXRlci9wcmVzZW50YXRpb24vSW1hZ2V3cml0ZXJFZGl0b3IkMy5jbGFzcyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzLmltYWdld3JpdGVyL2Jpbi9vcmcvZWNsaXBzZS9zdGVtL2xvZ2dlcnMvaW1hZ2V3cml0ZXIvcHJlc2VudGF0aW9uL0ltYWdld3JpdGVyRWRpdG9yJDMuY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjM2ZmFjMwotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzLmltYWdld3JpdGVyL2Jpbi9vcmcvZWNsaXBzZS9zdGVtL2xvZ2dlcnMvaW1hZ2V3cml0ZXIvcHJlc2VudGF0aW9uL0ltYWdld3JpdGVyRWRpdG9yJDMuY2xhc3MKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMuaW1hZ2V3cml0ZXIvYmluL29yZy9lY2xpcHNlL3N0ZW0vbG9nZ2Vycy9pbWFnZXdyaXRlci9wcmVzZW50YXRpb24vSW1hZ2V3cml0ZXJFZGl0b3IkNC5jbGFzcyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzLmltYWdld3JpdGVyL2Jpbi9vcmcvZWNsaXBzZS9zdGVtL2xvZ2dlcnMvaW1hZ2V3cml0ZXIvcHJlc2VudGF0aW9uL0ltYWdld3JpdGVyRWRpdG9yJDQuY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmIzMjVhYQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzLmltYWdld3JpdGVyL2Jpbi9vcmcvZWNsaXBzZS9zdGVtL2xvZ2dlcnMvaW1hZ2V3cml0ZXIvcHJlc2VudGF0aW9uL0ltYWdld3JpdGVyRWRpdG9yJDQuY2xhc3MKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMuaW1hZ2V3cml0ZXIvYmluL29yZy9lY2xpcHNlL3N0ZW0vbG9nZ2Vycy9pbWFnZXdyaXRlci9wcmVzZW50YXRpb24vSW1hZ2V3cml0ZXJFZGl0b3IkNS5jbGFzcyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzLmltYWdld3JpdGVyL2Jpbi9vcmcvZWNsaXBzZS9zdGVtL2xvZ2dlcnMvaW1hZ2V3cml0ZXIvcHJlc2VudGF0aW9uL0ltYWdld3JpdGVyRWRpdG9yJDUuY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2I3N2RkOAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzLmltYWdld3JpdGVyL2Jpbi9vcmcvZWNsaXBzZS9zdGVtL2xvZ2dlcnMvaW1hZ2V3cml0ZXIvcHJlc2VudGF0aW9uL0ltYWdld3JpdGVyRWRpdG9yJDUuY2xhc3MKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMuaW1hZ2V3cml0ZXIvYmluL29yZy9lY2xpcHNlL3N0ZW0vbG9nZ2Vycy9pbWFnZXdyaXRlci9wcmVzZW50YXRpb24vSW1hZ2V3cml0ZXJFZGl0b3IkNi5jbGFzcyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzLmltYWdld3JpdGVyL2Jpbi9vcmcvZWNsaXBzZS9zdGVtL2xvZ2dlcnMvaW1hZ2V3cml0ZXIvcHJlc2VudGF0aW9uL0ltYWdld3JpdGVyRWRpdG9yJDYuY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTJmMjFjMgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzLmltYWdld3JpdGVyL2Jpbi9vcmcvZWNsaXBzZS9zdGVtL2xvZ2dlcnMvaW1hZ2V3cml0ZXIvcHJlc2VudGF0aW9uL0ltYWdld3JpdGVyRWRpdG9yJDYuY2xhc3MKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMuaW1hZ2V3cml0ZXIvYmluL29yZy9lY2xpcHNlL3N0ZW0vbG9nZ2Vycy9pbWFnZXdyaXRlci9wcmVzZW50YXRpb24vSW1hZ2V3cml0ZXJFZGl0b3IkNy5jbGFzcyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzLmltYWdld3JpdGVyL2Jpbi9vcmcvZWNsaXBzZS9zdGVtL2xvZ2dlcnMvaW1hZ2V3cml0ZXIvcHJlc2VudGF0aW9uL0ltYWdld3JpdGVyRWRpdG9yJDcuY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWUxM2RhNwotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzLmltYWdld3JpdGVyL2Jpbi9vcmcvZWNsaXBzZS9zdGVtL2xvZ2dlcnMvaW1hZ2V3cml0ZXIvcHJlc2VudGF0aW9uL0ltYWdld3JpdGVyRWRpdG9yJDcuY2xhc3MKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMuaW1hZ2V3cml0ZXIvYmluL29yZy9lY2xpcHNlL3N0ZW0vbG9nZ2Vycy9pbWFnZXdyaXRlci9wcmVzZW50YXRpb24vSW1hZ2V3cml0ZXJFZGl0b3IkOC5jbGFzcyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzLmltYWdld3JpdGVyL2Jpbi9vcmcvZWNsaXBzZS9zdGVtL2xvZ2dlcnMvaW1hZ2V3cml0ZXIvcHJlc2VudGF0aW9uL0ltYWdld3JpdGVyRWRpdG9yJDguY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjMzN2FkYQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzLmltYWdld3JpdGVyL2Jpbi9vcmcvZWNsaXBzZS9zdGVtL2xvZ2dlcnMvaW1hZ2V3cml0ZXIvcHJlc2VudGF0aW9uL0ltYWdld3JpdGVyRWRpdG9yJDguY2xhc3MKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMuaW1hZ2V3cml0ZXIvYmluL29yZy9lY2xpcHNlL3N0ZW0vbG9nZ2Vycy9pbWFnZXdyaXRlci9wcmVzZW50YXRpb24vSW1hZ2V3cml0ZXJFZGl0b3IkOS5jbGFzcyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzLmltYWdld3JpdGVyL2Jpbi9vcmcvZWNsaXBzZS9zdGVtL2xvZ2dlcnMvaW1hZ2V3cml0ZXIvcHJlc2VudGF0aW9uL0ltYWdld3JpdGVyRWRpdG9yJDkuY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzdhMzNhMAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzLmltYWdld3JpdGVyL2Jpbi9vcmcvZWNsaXBzZS9zdGVtL2xvZ2dlcnMvaW1hZ2V3cml0ZXIvcHJlc2VudGF0aW9uL0ltYWdld3JpdGVyRWRpdG9yJDkuY2xhc3MKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMuaW1hZ2V3cml0ZXIvYmluL29yZy9lY2xpcHNlL3N0ZW0vbG9nZ2Vycy9pbWFnZXdyaXRlci9wcmVzZW50YXRpb24vSW1hZ2V3cml0ZXJFZGl0b3IkUmV2ZXJzZUFkYXB0ZXJGYWN0b3J5Q29udGVudFByb3ZpZGVyLmNsYXNzIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMuaW1hZ2V3cml0ZXIvYmluL29yZy9lY2xpcHNlL3N0ZW0vbG9nZ2Vycy9pbWFnZXdyaXRlci9wcmVzZW50YXRpb24vSW1hZ2V3cml0ZXJFZGl0b3IkUmV2ZXJzZUFkYXB0ZXJGYWN0b3J5Q29udGVudFByb3ZpZGVyLmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNkM2M2YjQKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy5pbWFnZXdyaXRlci9iaW4vb3JnL2VjbGlwc2Uvc3RlbS9sb2dnZXJzL2ltYWdld3JpdGVyL3ByZXNlbnRhdGlvbi9JbWFnZXdyaXRlckVkaXRvciRSZXZlcnNlQWRhcHRlckZhY3RvcnlDb250ZW50UHJvdmlkZXIuY2xhc3MKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMuaW1hZ2V3cml0ZXIvYmluL29yZy9lY2xpcHNlL3N0ZW0vbG9nZ2Vycy9pbWFnZXdyaXRlci9wcmVzZW50YXRpb24vSW1hZ2V3cml0ZXJFZGl0b3IuY2xhc3MgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy5pbWFnZXdyaXRlci9iaW4vb3JnL2VjbGlwc2Uvc3RlbS9sb2dnZXJzL2ltYWdld3JpdGVyL3ByZXNlbnRhdGlvbi9JbWFnZXdyaXRlckVkaXRvci5jbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZDlmMzYyCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMuaW1hZ2V3cml0ZXIvYmluL29yZy9lY2xpcHNlL3N0ZW0vbG9nZ2Vycy9pbWFnZXdyaXRlci9wcmVzZW50YXRpb24vSW1hZ2V3cml0ZXJFZGl0b3IuY2xhc3MKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMuaW1hZ2V3cml0ZXIvYmluL29yZy9lY2xpcHNlL3N0ZW0vbG9nZ2Vycy9pbWFnZXdyaXRlci9wcmVzZW50YXRpb24vSW1hZ2V3cml0ZXJNb2RlbFdpemFyZCQxLmNsYXNzIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMuaW1hZ2V3cml0ZXIvYmluL29yZy9lY2xpcHNlL3N0ZW0vbG9nZ2Vycy9pbWFnZXdyaXRlci9wcmVzZW50YXRpb24vSW1hZ2V3cml0ZXJNb2RlbFdpemFyZCQxLmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcwMWY4OTMKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy5pbWFnZXdyaXRlci9iaW4vb3JnL2VjbGlwc2Uvc3RlbS9sb2dnZXJzL2ltYWdld3JpdGVyL3ByZXNlbnRhdGlvbi9JbWFnZXdyaXRlck1vZGVsV2l6YXJkJDEuY2xhc3MKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMuaW1hZ2V3cml0ZXIvYmluL29yZy9lY2xpcHNlL3N0ZW0vbG9nZ2Vycy9pbWFnZXdyaXRlci9wcmVzZW50YXRpb24vSW1hZ2V3cml0ZXJNb2RlbFdpemFyZCRJbWFnZXdyaXRlck1vZGVsV2l6YXJkSW5pdGlhbE9iamVjdENyZWF0aW9uUGFnZSQxLmNsYXNzIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMuaW1hZ2V3cml0ZXIvYmluL29yZy9lY2xpcHNlL3N0ZW0vbG9nZ2Vycy9pbWFnZXdyaXRlci9wcmVzZW50YXRpb24vSW1hZ2V3cml0ZXJNb2RlbFdpemFyZCRJbWFnZXdyaXRlck1vZGVsV2l6YXJkSW5pdGlhbE9iamVjdENyZWF0aW9uUGFnZSQxLmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUzZDI3NWIKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy5pbWFnZXdyaXRlci9iaW4vb3JnL2VjbGlwc2Uvc3RlbS9sb2dnZXJzL2ltYWdld3JpdGVyL3ByZXNlbnRhdGlvbi9JbWFnZXdyaXRlck1vZGVsV2l6YXJkJEltYWdld3JpdGVyTW9kZWxXaXphcmRJbml0aWFsT2JqZWN0Q3JlYXRpb25QYWdlJDEuY2xhc3MKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMuaW1hZ2V3cml0ZXIvYmluL29yZy9lY2xpcHNlL3N0ZW0vbG9nZ2Vycy9pbWFnZXdyaXRlci9wcmVzZW50YXRpb24vSW1hZ2V3cml0ZXJNb2RlbFdpemFyZCRJbWFnZXdyaXRlck1vZGVsV2l6YXJkSW5pdGlhbE9iamVjdENyZWF0aW9uUGFnZSQyLmNsYXNzIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMuaW1hZ2V3cml0ZXIvYmluL29yZy9lY2xpcHNlL3N0ZW0vbG9nZ2Vycy9pbWFnZXdyaXRlci9wcmVzZW50YXRpb24vSW1hZ2V3cml0ZXJNb2RlbFdpemFyZCRJbWFnZXdyaXRlck1vZGVsV2l6YXJkSW5pdGlhbE9iamVjdENyZWF0aW9uUGFnZSQyLmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZmMmU3NmEKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy5pbWFnZXdyaXRlci9iaW4vb3JnL2VjbGlwc2Uvc3RlbS9sb2dnZXJzL2ltYWdld3JpdGVyL3ByZXNlbnRhdGlvbi9JbWFnZXdyaXRlck1vZGVsV2l6YXJkJEltYWdld3JpdGVyTW9kZWxXaXphcmRJbml0aWFsT2JqZWN0Q3JlYXRpb25QYWdlJDIuY2xhc3MKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMuaW1hZ2V3cml0ZXIvYmluL29yZy9lY2xpcHNlL3N0ZW0vbG9nZ2Vycy9pbWFnZXdyaXRlci9wcmVzZW50YXRpb24vSW1hZ2V3cml0ZXJNb2RlbFdpemFyZCRJbWFnZXdyaXRlck1vZGVsV2l6YXJkSW5pdGlhbE9iamVjdENyZWF0aW9uUGFnZS5jbGFzcyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzLmltYWdld3JpdGVyL2Jpbi9vcmcvZWNsaXBzZS9zdGVtL2xvZ2dlcnMvaW1hZ2V3cml0ZXIvcHJlc2VudGF0aW9uL0ltYWdld3JpdGVyTW9kZWxXaXphcmQkSW1hZ2V3cml0ZXJNb2RlbFdpemFyZEluaXRpYWxPYmplY3RDcmVhdGlvblBhZ2UuY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDYyMmQ4YgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzLmltYWdld3JpdGVyL2Jpbi9vcmcvZWNsaXBzZS9zdGVtL2xvZ2dlcnMvaW1hZ2V3cml0ZXIvcHJlc2VudGF0aW9uL0ltYWdld3JpdGVyTW9kZWxXaXphcmQkSW1hZ2V3cml0ZXJNb2RlbFdpemFyZEluaXRpYWxPYmplY3RDcmVhdGlvblBhZ2UuY2xhc3MKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMuaW1hZ2V3cml0ZXIvYmluL29yZy9lY2xpcHNlL3N0ZW0vbG9nZ2Vycy9pbWFnZXdyaXRlci9wcmVzZW50YXRpb24vSW1hZ2V3cml0ZXJNb2RlbFdpemFyZC5jbGFzcyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzLmltYWdld3JpdGVyL2Jpbi9vcmcvZWNsaXBzZS9zdGVtL2xvZ2dlcnMvaW1hZ2V3cml0ZXIvcHJlc2VudGF0aW9uL0ltYWdld3JpdGVyTW9kZWxXaXphcmQuY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzRjYTY2YwotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzLmltYWdld3JpdGVyL2Jpbi9vcmcvZWNsaXBzZS9zdGVtL2xvZ2dlcnMvaW1hZ2V3cml0ZXIvcHJlc2VudGF0aW9uL0ltYWdld3JpdGVyTW9kZWxXaXphcmQuY2xhc3MKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMuaW1hZ2V3cml0ZXIvYmluL29yZy9lY2xpcHNlL3N0ZW0vbG9nZ2Vycy9pbWFnZXdyaXRlci9wcm92aWRlci9FcXVpcmVjdGFuZ3VsYXJNYXBMb2dnZXJJdGVtUHJvdmlkZXIuY2xhc3MgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy5pbWFnZXdyaXRlci9iaW4vb3JnL2VjbGlwc2Uvc3RlbS9sb2dnZXJzL2ltYWdld3JpdGVyL3Byb3ZpZGVyL0VxdWlyZWN0YW5ndWxhck1hcExvZ2dlckl0ZW1Qcm92aWRlci5jbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNGJhZmYxCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMuaW1hZ2V3cml0ZXIvYmluL29yZy9lY2xpcHNlL3N0ZW0vbG9nZ2Vycy9pbWFnZXdyaXRlci9wcm92aWRlci9FcXVpcmVjdGFuZ3VsYXJNYXBMb2dnZXJJdGVtUHJvdmlkZXIuY2xhc3MKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMuaW1hZ2V3cml0ZXIvYmluL29yZy9lY2xpcHNlL3N0ZW0vbG9nZ2Vycy9pbWFnZXdyaXRlci9wcm92aWRlci9JbWFnZVdyaXRlckxvZ2dlckVkaXRQbHVnaW4kSW1wbGVtZW50YXRpb24uY2xhc3MgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy5pbWFnZXdyaXRlci9iaW4vb3JnL2VjbGlwc2Uvc3RlbS9sb2dnZXJzL2ltYWdld3JpdGVyL3Byb3ZpZGVyL0ltYWdlV3JpdGVyTG9nZ2VyRWRpdFBsdWdpbiRJbXBsZW1lbnRhdGlvbi5jbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYmVkYmJjCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMuaW1hZ2V3cml0ZXIvYmluL29yZy9lY2xpcHNlL3N0ZW0vbG9nZ2Vycy9pbWFnZXdyaXRlci9wcm92aWRlci9JbWFnZVdyaXRlckxvZ2dlckVkaXRQbHVnaW4kSW1wbGVtZW50YXRpb24uY2xhc3MKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMuaW1hZ2V3cml0ZXIvYmluL29yZy9lY2xpcHNlL3N0ZW0vbG9nZ2Vycy9pbWFnZXdyaXRlci9wcm92aWRlci9JbWFnZVdyaXRlckxvZ2dlckVkaXRQbHVnaW4uY2xhc3MgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy5pbWFnZXdyaXRlci9iaW4vb3JnL2VjbGlwc2Uvc3RlbS9sb2dnZXJzL2ltYWdld3JpdGVyL3Byb3ZpZGVyL0ltYWdlV3JpdGVyTG9nZ2VyRWRpdFBsdWdpbi5jbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZDIxOTRmCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMuaW1hZ2V3cml0ZXIvYmluL29yZy9lY2xpcHNlL3N0ZW0vbG9nZ2Vycy9pbWFnZXdyaXRlci9wcm92aWRlci9JbWFnZVdyaXRlckxvZ2dlckVkaXRQbHVnaW4uY2xhc3MKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMuaW1hZ2V3cml0ZXIvYmluL29yZy9lY2xpcHNlL3N0ZW0vbG9nZ2Vycy9pbWFnZXdyaXRlci9wcm92aWRlci9JbWFnZVdyaXRlckxvZ2dlckVkaXRvckFkdmlzb3IkQWJvdXRBY3Rpb24uY2xhc3MgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy5pbWFnZXdyaXRlci9iaW4vb3JnL2VjbGlwc2Uvc3RlbS9sb2dnZXJzL2ltYWdld3JpdGVyL3Byb3ZpZGVyL0ltYWdlV3JpdGVyTG9nZ2VyRWRpdG9yQWR2aXNvciRBYm91dEFjdGlvbi5jbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45N2QyMzdiCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMuaW1hZ2V3cml0ZXIvYmluL29yZy9lY2xpcHNlL3N0ZW0vbG9nZ2Vycy9pbWFnZXdyaXRlci9wcm92aWRlci9JbWFnZVdyaXRlckxvZ2dlckVkaXRvckFkdmlzb3IkQWJvdXRBY3Rpb24uY2xhc3MKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMuaW1hZ2V3cml0ZXIvYmluL29yZy9lY2xpcHNlL3N0ZW0vbG9nZ2Vycy9pbWFnZXdyaXRlci9wcm92aWRlci9JbWFnZVdyaXRlckxvZ2dlckVkaXRvckFkdmlzb3IkQXBwbGljYXRpb24uY2xhc3MgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy5pbWFnZXdyaXRlci9iaW4vb3JnL2VjbGlwc2Uvc3RlbS9sb2dnZXJzL2ltYWdld3JpdGVyL3Byb3ZpZGVyL0ltYWdlV3JpdGVyTG9nZ2VyRWRpdG9yQWR2aXNvciRBcHBsaWNhdGlvbi5jbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYjM1Mzc2Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMuaW1hZ2V3cml0ZXIvYmluL29yZy9lY2xpcHNlL3N0ZW0vbG9nZ2Vycy9pbWFnZXdyaXRlci9wcm92aWRlci9JbWFnZVdyaXRlckxvZ2dlckVkaXRvckFkdmlzb3IkQXBwbGljYXRpb24uY2xhc3MKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMuaW1hZ2V3cml0ZXIvYmluL29yZy9lY2xpcHNlL3N0ZW0vbG9nZ2Vycy9pbWFnZXdyaXRlci9wcm92aWRlci9JbWFnZVdyaXRlckxvZ2dlckVkaXRvckFkdmlzb3IkT3BlbkFjdGlvbi5jbGFzcyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzLmltYWdld3JpdGVyL2Jpbi9vcmcvZWNsaXBzZS9zdGVtL2xvZ2dlcnMvaW1hZ2V3cml0ZXIvcHJvdmlkZXIvSW1hZ2VXcml0ZXJMb2dnZXJFZGl0b3JBZHZpc29yJE9wZW5BY3Rpb24uY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDIwOWM5MAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzLmltYWdld3JpdGVyL2Jpbi9vcmcvZWNsaXBzZS9zdGVtL2xvZ2dlcnMvaW1hZ2V3cml0ZXIvcHJvdmlkZXIvSW1hZ2VXcml0ZXJMb2dnZXJFZGl0b3JBZHZpc29yJE9wZW5BY3Rpb24uY2xhc3MKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMuaW1hZ2V3cml0ZXIvYmluL29yZy9lY2xpcHNlL3N0ZW0vbG9nZ2Vycy9pbWFnZXdyaXRlci9wcm92aWRlci9JbWFnZVdyaXRlckxvZ2dlckVkaXRvckFkdmlzb3IkT3BlblVSSUFjdGlvbi5jbGFzcyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzLmltYWdld3JpdGVyL2Jpbi9vcmcvZWNsaXBzZS9zdGVtL2xvZ2dlcnMvaW1hZ2V3cml0ZXIvcHJvdmlkZXIvSW1hZ2VXcml0ZXJMb2dnZXJFZGl0b3JBZHZpc29yJE9wZW5VUklBY3Rpb24uY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmVmZGJkYgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzLmltYWdld3JpdGVyL2Jpbi9vcmcvZWNsaXBzZS9zdGVtL2xvZ2dlcnMvaW1hZ2V3cml0ZXIvcHJvdmlkZXIvSW1hZ2VXcml0ZXJMb2dnZXJFZGl0b3JBZHZpc29yJE9wZW5VUklBY3Rpb24uY2xhc3MKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMuaW1hZ2V3cml0ZXIvYmluL29yZy9lY2xpcHNlL3N0ZW0vbG9nZ2Vycy9pbWFnZXdyaXRlci9wcm92aWRlci9JbWFnZVdyaXRlckxvZ2dlckVkaXRvckFkdmlzb3IkUGVyc3BlY3RpdmUuY2xhc3MgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy5pbWFnZXdyaXRlci9iaW4vb3JnL2VjbGlwc2Uvc3RlbS9sb2dnZXJzL2ltYWdld3JpdGVyL3Byb3ZpZGVyL0ltYWdlV3JpdGVyTG9nZ2VyRWRpdG9yQWR2aXNvciRQZXJzcGVjdGl2ZS5jbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZWE5ODhiCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMuaW1hZ2V3cml0ZXIvYmluL29yZy9lY2xpcHNlL3N0ZW0vbG9nZ2Vycy9pbWFnZXdyaXRlci9wcm92aWRlci9JbWFnZVdyaXRlckxvZ2dlckVkaXRvckFkdmlzb3IkUGVyc3BlY3RpdmUuY2xhc3MKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMuaW1hZ2V3cml0ZXIvYmluL29yZy9lY2xpcHNlL3N0ZW0vbG9nZ2Vycy9pbWFnZXdyaXRlci9wcm92aWRlci9JbWFnZVdyaXRlckxvZ2dlckVkaXRvckFkdmlzb3IkV2luZG93QWN0aW9uQmFyQWR2aXNvci5jbGFzcyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzLmltYWdld3JpdGVyL2Jpbi9vcmcvZWNsaXBzZS9zdGVtL2xvZ2dlcnMvaW1hZ2V3cml0ZXIvcHJvdmlkZXIvSW1hZ2VXcml0ZXJMb2dnZXJFZGl0b3JBZHZpc29yJFdpbmRvd0FjdGlvbkJhckFkdmlzb3IuY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTMwN2U3YQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzLmltYWdld3JpdGVyL2Jpbi9vcmcvZWNsaXBzZS9zdGVtL2xvZ2dlcnMvaW1hZ2V3cml0ZXIvcHJvdmlkZXIvSW1hZ2VXcml0ZXJMb2dnZXJFZGl0b3JBZHZpc29yJFdpbmRvd0FjdGlvbkJhckFkdmlzb3IuY2xhc3MKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMuaW1hZ2V3cml0ZXIvYmluL29yZy9lY2xpcHNlL3N0ZW0vbG9nZ2Vycy9pbWFnZXdyaXRlci9wcm92aWRlci9JbWFnZVdyaXRlckxvZ2dlckVkaXRvckFkdmlzb3IkV2luZG93QWR2aXNvci5jbGFzcyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzLmltYWdld3JpdGVyL2Jpbi9vcmcvZWNsaXBzZS9zdGVtL2xvZ2dlcnMvaW1hZ2V3cml0ZXIvcHJvdmlkZXIvSW1hZ2VXcml0ZXJMb2dnZXJFZGl0b3JBZHZpc29yJFdpbmRvd0Fkdmlzb3IuY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDZlY2MyYQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzLmltYWdld3JpdGVyL2Jpbi9vcmcvZWNsaXBzZS9zdGVtL2xvZ2dlcnMvaW1hZ2V3cml0ZXIvcHJvdmlkZXIvSW1hZ2VXcml0ZXJMb2dnZXJFZGl0b3JBZHZpc29yJFdpbmRvd0Fkdmlzb3IuY2xhc3MKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMuaW1hZ2V3cml0ZXIvYmluL29yZy9lY2xpcHNlL3N0ZW0vbG9nZ2Vycy9pbWFnZXdyaXRlci9wcm92aWRlci9JbWFnZVdyaXRlckxvZ2dlckVkaXRvckFkdmlzb3IuY2xhc3MgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy5pbWFnZXdyaXRlci9iaW4vb3JnL2VjbGlwc2Uvc3RlbS9sb2dnZXJzL2ltYWdld3JpdGVyL3Byb3ZpZGVyL0ltYWdlV3JpdGVyTG9nZ2VyRWRpdG9yQWR2aXNvci5jbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45Zjk3MjIzCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMuaW1hZ2V3cml0ZXIvYmluL29yZy9lY2xpcHNlL3N0ZW0vbG9nZ2Vycy9pbWFnZXdyaXRlci9wcm92aWRlci9JbWFnZVdyaXRlckxvZ2dlckVkaXRvckFkdmlzb3IuY2xhc3MKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMuaW1hZ2V3cml0ZXIvYmluL29yZy9lY2xpcHNlL3N0ZW0vbG9nZ2Vycy9pbWFnZXdyaXRlci9wcm92aWRlci9JbWFnZVdyaXRlckxvZ2dlckl0ZW1Qcm92aWRlci5jbGFzcyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzLmltYWdld3JpdGVyL2Jpbi9vcmcvZWNsaXBzZS9zdGVtL2xvZ2dlcnMvaW1hZ2V3cml0ZXIvcHJvdmlkZXIvSW1hZ2VXcml0ZXJMb2dnZXJJdGVtUHJvdmlkZXIuY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDFhY2EyMAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzLmltYWdld3JpdGVyL2Jpbi9vcmcvZWNsaXBzZS9zdGVtL2xvZ2dlcnMvaW1hZ2V3cml0ZXIvcHJvdmlkZXIvSW1hZ2VXcml0ZXJMb2dnZXJJdGVtUHJvdmlkZXIuY2xhc3MKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMuaW1hZ2V3cml0ZXIvYmluL29yZy9lY2xpcHNlL3N0ZW0vbG9nZ2Vycy9pbWFnZXdyaXRlci9wcm92aWRlci9JbWFnZXdyaXRlckl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5LmNsYXNzIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMuaW1hZ2V3cml0ZXIvYmluL29yZy9lY2xpcHNlL3N0ZW0vbG9nZ2Vycy9pbWFnZXdyaXRlci9wcm92aWRlci9JbWFnZXdyaXRlckl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5LmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcxNWRhYjIKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy5pbWFnZXdyaXRlci9iaW4vb3JnL2VjbGlwc2Uvc3RlbS9sb2dnZXJzL2ltYWdld3JpdGVyL3Byb3ZpZGVyL0ltYWdld3JpdGVySXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkuY2xhc3MKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMuaW1hZ2V3cml0ZXIvYmluL29yZy9lY2xpcHNlL3N0ZW0vbG9nZ2Vycy9pbWFnZXdyaXRlci9wcm92aWRlci9NYXBWaWV3SW1hZ2VXcml0ZXJMb2dnZXJJdGVtUHJvdmlkZXIuY2xhc3MgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy5pbWFnZXdyaXRlci9iaW4vb3JnL2VjbGlwc2Uvc3RlbS9sb2dnZXJzL2ltYWdld3JpdGVyL3Byb3ZpZGVyL01hcFZpZXdJbWFnZVdyaXRlckxvZ2dlckl0ZW1Qcm92aWRlci5jbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kY2UwNmYyCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMuaW1hZ2V3cml0ZXIvYmluL29yZy9lY2xpcHNlL3N0ZW0vbG9nZ2Vycy9pbWFnZXdyaXRlci9wcm92aWRlci9NYXBWaWV3SW1hZ2VXcml0ZXJMb2dnZXJJdGVtUHJvdmlkZXIuY2xhc3MKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMuaW1hZ2V3cml0ZXIvYmluL29yZy9lY2xpcHNlL3N0ZW0vbG9nZ2Vycy9pbWFnZXdyaXRlci9wcm92aWRlci9Qcm9qZWN0ZWRNYXBJbWFnZUxvZ2dlckl0ZW1Qcm92aWRlci5jbGFzcyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzLmltYWdld3JpdGVyL2Jpbi9vcmcvZWNsaXBzZS9zdGVtL2xvZ2dlcnMvaW1hZ2V3cml0ZXIvcHJvdmlkZXIvUHJvamVjdGVkTWFwSW1hZ2VMb2dnZXJJdGVtUHJvdmlkZXIuY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjUyZDc0NQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzLmltYWdld3JpdGVyL2Jpbi9vcmcvZWNsaXBzZS9zdGVtL2xvZ2dlcnMvaW1hZ2V3cml0ZXIvcHJvdmlkZXIvUHJvamVjdGVkTWFwSW1hZ2VMb2dnZXJJdGVtUHJvdmlkZXIuY2xhc3MKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMuaW1hZ2V3cml0ZXIvYmluL29yZy9lY2xpcHNlL3N0ZW0vbG9nZ2Vycy9pbWFnZXdyaXRlci91dGlsL0ltYWdld3JpdGVyQWRhcHRlckZhY3RvcnkkMS5jbGFzcyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzLmltYWdld3JpdGVyL2Jpbi9vcmcvZWNsaXBzZS9zdGVtL2xvZ2dlcnMvaW1hZ2V3cml0ZXIvdXRpbC9JbWFnZXdyaXRlckFkYXB0ZXJGYWN0b3J5JDEuY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTJiYTgzMAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzLmltYWdld3JpdGVyL2Jpbi9vcmcvZWNsaXBzZS9zdGVtL2xvZ2dlcnMvaW1hZ2V3cml0ZXIvdXRpbC9JbWFnZXdyaXRlckFkYXB0ZXJGYWN0b3J5JDEuY2xhc3MKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMuaW1hZ2V3cml0ZXIvYmluL29yZy9lY2xpcHNlL3N0ZW0vbG9nZ2Vycy9pbWFnZXdyaXRlci91dGlsL0ltYWdld3JpdGVyQWRhcHRlckZhY3RvcnkuY2xhc3MgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy5pbWFnZXdyaXRlci9iaW4vb3JnL2VjbGlwc2Uvc3RlbS9sb2dnZXJzL2ltYWdld3JpdGVyL3V0aWwvSW1hZ2V3cml0ZXJBZGFwdGVyRmFjdG9yeS5jbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MmJjZGJmCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMuaW1hZ2V3cml0ZXIvYmluL29yZy9lY2xpcHNlL3N0ZW0vbG9nZ2Vycy9pbWFnZXdyaXRlci91dGlsL0ltYWdld3JpdGVyQWRhcHRlckZhY3RvcnkuY2xhc3MKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMuaW1hZ2V3cml0ZXIvYmluL29yZy9lY2xpcHNlL3N0ZW0vbG9nZ2Vycy9pbWFnZXdyaXRlci91dGlsL0ltYWdld3JpdGVyU3dpdGNoLmNsYXNzIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMuaW1hZ2V3cml0ZXIvYmluL29yZy9lY2xpcHNlL3N0ZW0vbG9nZ2Vycy9pbWFnZXdyaXRlci91dGlsL0ltYWdld3JpdGVyU3dpdGNoLmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBiOGZiMjkKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy5pbWFnZXdyaXRlci9iaW4vb3JnL2VjbGlwc2Uvc3RlbS9sb2dnZXJzL2ltYWdld3JpdGVyL3V0aWwvSW1hZ2V3cml0ZXJTd2l0Y2guY2xhc3MKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMuaW1hZ2V3cml0ZXIvYmluL29yZy9lY2xpcHNlL3N0ZW0vdWkvd2l6YXJkcy9JbWFnZVdyaXRlckxvZ2dlclByb3BlcnR5U3RyaW5nUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSRJbWFnZVdyaXRlckxvZ2dlclByb3BlcnR5U3RyaW5nUHJvdmlkZXJBZGFwdGVyLmNsYXNzIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMuaW1hZ2V3cml0ZXIvYmluL29yZy9lY2xpcHNlL3N0ZW0vdWkvd2l6YXJkcy9JbWFnZVdyaXRlckxvZ2dlclByb3BlcnR5U3RyaW5nUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSRJbWFnZVdyaXRlckxvZ2dlclByb3BlcnR5U3RyaW5nUHJvdmlkZXJBZGFwdGVyLmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ4NjdmZjEKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy5pbWFnZXdyaXRlci9iaW4vb3JnL2VjbGlwc2Uvc3RlbS91aS93aXphcmRzL0ltYWdlV3JpdGVyTG9nZ2VyUHJvcGVydHlTdHJpbmdQcm92aWRlckFkYXB0ZXJGYWN0b3J5JEltYWdlV3JpdGVyTG9nZ2VyUHJvcGVydHlTdHJpbmdQcm92aWRlckFkYXB0ZXIuY2xhc3MKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMuaW1hZ2V3cml0ZXIvYmluL29yZy9lY2xpcHNlL3N0ZW0vdWkvd2l6YXJkcy9JbWFnZVdyaXRlckxvZ2dlclByb3BlcnR5U3RyaW5nUHJvdmlkZXJBZGFwdGVyRmFjdG9yeS5jbGFzcyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzLmltYWdld3JpdGVyL2Jpbi9vcmcvZWNsaXBzZS9zdGVtL3VpL3dpemFyZHMvSW1hZ2VXcml0ZXJMb2dnZXJQcm9wZXJ0eVN0cmluZ1Byb3ZpZGVyQWRhcHRlckZhY3RvcnkuY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2VjMzQ1ZQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzLmltYWdld3JpdGVyL2Jpbi9vcmcvZWNsaXBzZS9zdGVtL3VpL3dpemFyZHMvSW1hZ2VXcml0ZXJMb2dnZXJQcm9wZXJ0eVN0cmluZ1Byb3ZpZGVyQWRhcHRlckZhY3RvcnkuY2xhc3MKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMuaW1hZ2V3cml0ZXIvYmluL29yZy9lY2xpcHNlL3N0ZW0vdWkvd2l6YXJkcy9JbWFnZVdyaXRlckxvZ2dlcldpemFyZE1lc3NhZ2VzLmNsYXNzIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMuaW1hZ2V3cml0ZXIvYmluL29yZy9lY2xpcHNlL3N0ZW0vdWkvd2l6YXJkcy9JbWFnZVdyaXRlckxvZ2dlcldpemFyZE1lc3NhZ2VzLmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIxNDBmM2MKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy5pbWFnZXdyaXRlci9iaW4vb3JnL2VjbGlwc2Uvc3RlbS91aS93aXphcmRzL0ltYWdlV3JpdGVyTG9nZ2VyV2l6YXJkTWVzc2FnZXMuY2xhc3MKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMuaW1hZ2V3cml0ZXIvYmluL29yZy9lY2xpcHNlL3N0ZW0vdWkvd2l6YXJkcy9pbWFnZXdyaXRlcmxvZ2dlcndpemFyZG1lc3NhZ2VzLnByb3BlcnRpZXMgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy5pbWFnZXdyaXRlci9iaW4vb3JnL2VjbGlwc2Uvc3RlbS91aS93aXphcmRzL2ltYWdld3JpdGVybG9nZ2Vyd2l6YXJkbWVzc2FnZXMucHJvcGVydGllcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMDI4NWJlCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMuaW1hZ2V3cml0ZXIvYmluL29yZy9lY2xpcHNlL3N0ZW0vdWkvd2l6YXJkcy9pbWFnZXdyaXRlcmxvZ2dlcndpemFyZG1lc3NhZ2VzLnByb3BlcnRpZXMKQEAgLTAsMCArMSwyOSBAQAorIy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjICogQ29weXJpZ2h0IChjKSAyMDA4LCAyMDExIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorIyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyMgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyMgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorIyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisjICoKKyMgKiBDb250cmlidXRvcnM6CisjICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorIyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjIEltYWdlIFdyaXRlciBMb2dnZXIgV2l6YXJkIE1lc3NhZ2VzCisKK2VuYWJsZWQgPSBFbmFibGVkCitlbmFibGVkVFQgPSBFbmFibGUgdGhlIGxvZ2dlciB3aGVuIHRoZSBzaW11bGF0aW9uIGJlZ2lucworZW5hYmxlZFVOSVQgPSAKKwordXNlRGVmYXVsdExvZ0RpcmVjdG9yeSA9IFVzZSBEZWZhdWx0IExvZyBEaXJlY3RvcnkKK3VzZURlZmF1bHRMb2dEaXJlY3RvcnlUVCA9IFdoZXRoZXIgb3Igbm90IHRvIHVzZSB0aGUgZGVmYXVsdCBsb2cgZmlsZSBkaXJlY3RvcnkKK3VzZURlZmF1bHRMb2dEaXJlY3RvcnlVTklUID0gCisKK2xvZ0RpcmVjdG9yeSA9IExvZyBEaXJlY3RvcnkKK2xvZ0RpcmVjdG9yeVRUID0gUGF0aCB0byB0aGUgZm9sZGVyIHRvIHN0b3JlIGxvZyBmaWxlcworbG9nRGlyZWN0b3J5VU5JVCA9IAorCitkZWxpbWV0ZXIgPSBGaWxlIERlbGltaXRlcgorZGVsaW1ldGVyVFQgPSBXaGljaCBkZWxpbWV0ZXIgdG8gdXNlIHdoZW4gc2VwYXJhdGluZyBlbnRyaWVzIGluIGxvZyBmaWxlcworZGVsaW1ldGVyVU5JVCA9IAorCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy5pbWFnZXdyaXRlci9idWlsZC5wcm9wZXJ0aWVzIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMuaW1hZ2V3cml0ZXIvYnVpbGQucHJvcGVydGllcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYTRlNDRiCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMuaW1hZ2V3cml0ZXIvYnVpbGQucHJvcGVydGllcwpAQCAtMCwwICsxLDE1IEBACisKKyMgPGNvcHlyaWdodD4KKyMgPC9jb3B5cmlnaHQ+CisjCisjICRJZCQKKworYmluLmluY2x1ZGVzID0gLixcCisgICAgICAgICAgICAgICBtb2RlbC8sXAorICAgICAgICAgICAgICAgaWNvbnMvLFwKKyAgICAgICAgICAgICAgIE1FVEEtSU5GLyxcCisgICAgICAgICAgICAgICBwbHVnaW4ueG1sLFwKKyAgICAgICAgICAgICAgIHBsdWdpbi5wcm9wZXJ0aWVzCitqYXJzLmNvbXBpbGUub3JkZXIgPSAuCitzb3VyY2UuLiA9IHNyYy8KK291dHB1dC4uID0gYmluLwpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMuaW1hZ2V3cml0ZXIvaWNvbnMvZnVsbC9vYmoxNi9FcXVpcmVjdGFuZ3VsYXJNYXBMb2dnZXIuZ2lmIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMuaW1hZ2V3cml0ZXIvaWNvbnMvZnVsbC9vYmoxNi9FcXVpcmVjdGFuZ3VsYXJNYXBMb2dnZXIuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMwZjBjNDgKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy5pbWFnZXdyaXRlci9pY29ucy9mdWxsL29iajE2L0VxdWlyZWN0YW5ndWxhck1hcExvZ2dlci5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMuaW1hZ2V3cml0ZXIvaWNvbnMvZnVsbC9vYmoxNi9JbWFnZVdyaXRlckxvZ2dlci5naWYgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy5pbWFnZXdyaXRlci9pY29ucy9mdWxsL29iajE2L0ltYWdlV3JpdGVyTG9nZ2VyLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYWYyODA0Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMuaW1hZ2V3cml0ZXIvaWNvbnMvZnVsbC9vYmoxNi9JbWFnZVdyaXRlckxvZ2dlci5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMuaW1hZ2V3cml0ZXIvaWNvbnMvZnVsbC9vYmoxNi9JbWFnZXdyaXRlck1vZGVsRmlsZS5naWYgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy5pbWFnZXdyaXRlci9pY29ucy9mdWxsL29iajE2L0ltYWdld3JpdGVyTW9kZWxGaWxlLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45Y2U5NzdhCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMuaW1hZ2V3cml0ZXIvaWNvbnMvZnVsbC9vYmoxNi9JbWFnZXdyaXRlck1vZGVsRmlsZS5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMuaW1hZ2V3cml0ZXIvaWNvbnMvZnVsbC9vYmoxNi9NYXBWaWV3SW1hZ2VXcml0ZXJMb2dnZXIuZ2lmIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMuaW1hZ2V3cml0ZXIvaWNvbnMvZnVsbC9vYmoxNi9NYXBWaWV3SW1hZ2VXcml0ZXJMb2dnZXIuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFmYjgyZWEKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy5pbWFnZXdyaXRlci9pY29ucy9mdWxsL29iajE2L01hcFZpZXdJbWFnZVdyaXRlckxvZ2dlci5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMuaW1hZ2V3cml0ZXIvaWNvbnMvZnVsbC9vYmoxNi9Qcm9qZWN0ZWRNYXBJbWFnZUxvZ2dlci5naWYgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy5pbWFnZXdyaXRlci9pY29ucy9mdWxsL29iajE2L1Byb2plY3RlZE1hcEltYWdlTG9nZ2VyLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NTczMWZlCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMuaW1hZ2V3cml0ZXIvaWNvbnMvZnVsbC9vYmoxNi9Qcm9qZWN0ZWRNYXBJbWFnZUxvZ2dlci5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMuaW1hZ2V3cml0ZXIvaWNvbnMvZnVsbC93aXpiYW4vTmV3SW1hZ2V3cml0ZXIuZ2lmIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMuaW1hZ2V3cml0ZXIvaWNvbnMvZnVsbC93aXpiYW4vTmV3SW1hZ2V3cml0ZXIuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ3YTU4OTcKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy5pbWFnZXdyaXRlci9pY29ucy9mdWxsL3dpemJhbi9OZXdJbWFnZXdyaXRlci5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMuaW1hZ2V3cml0ZXIvbW9kZWwvSW1hZ2VXcml0ZXJMb2dnZXIuZWNvcmUgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy5pbWFnZXdyaXRlci9tb2RlbC9JbWFnZVdyaXRlckxvZ2dlci5lY29yZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NzA4NTIyCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMuaW1hZ2V3cml0ZXIvbW9kZWwvSW1hZ2VXcml0ZXJMb2dnZXIuZWNvcmUKQEAgLTAsMCArMSw0MCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxlY29yZTpFUGFja2FnZSB4bWk6dmVyc2lvbj0iMi4wIgorICAgIHhtbG5zOnhtaT0iaHR0cDovL3d3dy5vbWcub3JnL1hNSSIgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIKKyAgICB4bWxuczplY29yZT0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9lbWYvMjAwMi9FY29yZSIgbmFtZT0iaW1hZ2V3cml0ZXIiCisgICAgbnNVUkk9Imh0dHA6Ly9vcmcvZWNsaXBzZS9zdGVtL2xvZ2dlcnMvaW1hZ2V3cml0ZXIiIG5zUHJlZml4PSJvcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMuaW1hZ2V3cml0ZXIubW9kZWwiPgorICA8ZUNsYXNzaWZpZXJzIHhzaTp0eXBlPSJlY29yZTpFQ2xhc3MiIG5hbWU9IkltYWdlV3JpdGVyTG9nZ2VyIiBhYnN0cmFjdD0idHJ1ZSIgZVN1cGVyVHlwZXM9Ii4uLy4uL29yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy9tb2RlbHMvU2ltdWxhdGlvbkxvZ2dlci5lY29yZSMvL1N5bmNocm9ub3VzTG9nZ2VyIj4KKyAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0idXNlRGVmYXVsdExvZ0RpcmVjdG9yeSIKKyAgICAgICAgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2VtZi8yMDAyL0Vjb3JlIy8vRUJvb2xlYW4iIGRlZmF1bHRWYWx1ZUxpdGVyYWw9InRydWUiLz4KKyAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0iZGF0YVBhdGgiIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9lbWYvMjAwMi9FY29yZSMvL0VTdHJpbmciLz4KKyAgPC9lQ2xhc3NpZmllcnM+CisgIDxlQ2xhc3NpZmllcnMgeHNpOnR5cGU9ImVjb3JlOkVDbGFzcyIgbmFtZT0iUHJvamVjdGVkTWFwSW1hZ2VMb2dnZXIiIGFic3RyYWN0PSJ0cnVlIgorICAgICAgZVN1cGVyVHlwZXM9IiMvL0ltYWdlV3JpdGVyTG9nZ2VyIj4KKyAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0idXNlTG9nU2NhbGluZyIgbG93ZXJCb3VuZD0iMSIKKyAgICAgICAgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2VtZi8yMDAyL0Vjb3JlIy8vRUJvb2xlYW4iIGRlZmF1bHRWYWx1ZUxpdGVyYWw9InRydWUiLz4KKyAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0iZ2FpbiIgbG93ZXJCb3VuZD0iMSIgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2VtZi8yMDAyL0Vjb3JlIy8vRUZsb2F0IgorICAgICAgICBkZWZhdWx0VmFsdWVMaXRlcmFsPSIxLjAiLz4KKyAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0ibG9nQWxsRGVjb3JhdG9ycyIgbG93ZXJCb3VuZD0iMSIKKyAgICAgICAgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2VtZi8yMDAyL0Vjb3JlIy8vRUJvb2xlYW4iIGRlZmF1bHRWYWx1ZUxpdGVyYWw9ImZhbHNlIi8+CisgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVBdHRyaWJ1dGUiIG5hbWU9ImNvbG9yUHJvdmlkZXIiIGVUeXBlPSIjLy9Db2xvclByb3ZpZGVyIi8+CisgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVSZWZlcmVuY2UiIG5hbWU9ImRlY29yYXRvciIgZVR5cGU9ImVjb3JlOkVDbGFzcyAuLi8uLi9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvbW9kZWwvbW9kZWwuZWNvcmUjLy9EZWNvcmF0b3IiLz4KKyAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0iZGVjb3JhdG9yUHJvcGVydGllcyIgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2VtZi8yMDAyL0Vjb3JlIy8vRVN0cmluZyIvPgorICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJ3aWR0aCIgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2VtZi8yMDAyL0Vjb3JlIy8vRUludCIKKyAgICAgICAgZGVmYXVsdFZhbHVlTGl0ZXJhbD0iMTAwMCIvPgorICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJoZWlnaHQiIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9lbWYvMjAwMi9FY29yZSMvL0VJbnQiCisgICAgICAgIGRlZmF1bHRWYWx1ZUxpdGVyYWw9IjUwMCIvPgorICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJwcm9qZWN0aW9uIiBlVHlwZT0iIy8vSU1hcFByb2plY3Rpb24iCisgICAgICAgIHRyYW5zaWVudD0idHJ1ZSIgZGVmYXVsdFZhbHVlTGl0ZXJhbD0iIi8+CisgIDwvZUNsYXNzaWZpZXJzPgorICA8ZUNsYXNzaWZpZXJzIHhzaTp0eXBlPSJlY29yZTpFRGF0YVR5cGUiIG5hbWU9IklNYXBQcm9qZWN0aW9uIiBpbnN0YW5jZUNsYXNzTmFtZT0ib3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzLmltYWdld3JpdGVyLmxvZ2dlci5wcm9qZWN0aW9ucy5JTWFwUHJvamVjdGlvbiIvPgorICA8ZUNsYXNzaWZpZXJzIHhzaTp0eXBlPSJlY29yZTpFQ2xhc3MiIG5hbWU9Ik1hcFZpZXdJbWFnZVdyaXRlckxvZ2dlciIgZVN1cGVyVHlwZXM9IiMvL0ltYWdlV3JpdGVyTG9nZ2VyIj4KKyAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0ib3Blbk1hcFZpZXciIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9lbWYvMjAwMi9FY29yZSMvL0VCb29sZWFuIgorICAgICAgICBkZWZhdWx0VmFsdWVMaXRlcmFsPSJ0cnVlIi8+CisgIDwvZUNsYXNzaWZpZXJzPgorICA8ZUNsYXNzaWZpZXJzIHhzaTp0eXBlPSJlY29yZTpFRW51bSIgbmFtZT0iTUFQX1BST0pFQ1RJT05TIj4KKyAgICA8ZUxpdGVyYWxzIG5hbWU9IkVRVUlSRUNUQU5HVUxBUiIvPgorICAgIDxlTGl0ZXJhbHMgbmFtZT0iTUVSQ0FUT1IiIHZhbHVlPSIxIi8+CisgIDwvZUNsYXNzaWZpZXJzPgorICA8ZUNsYXNzaWZpZXJzIHhzaTp0eXBlPSJlY29yZTpFRGF0YVR5cGUiIG5hbWU9IkNvbG9yUHJvdmlkZXIiIGluc3RhbmNlQ2xhc3NOYW1lPSJvcmcuZWNsaXBzZS5zdGVtLnVpLmFkYXB0ZXJzLmNvbG9yLkNvbG9yUHJvdmlkZXIiLz4KKyAgPGVDbGFzc2lmaWVycyB4c2k6dHlwZT0iZWNvcmU6RUNsYXNzIiBuYW1lPSJFcXVpcmVjdGFuZ3VsYXJNYXBMb2dnZXIiIGVTdXBlclR5cGVzPSIjLy9Qcm9qZWN0ZWRNYXBJbWFnZUxvZ2dlciIvPgorPC9lY29yZTpFUGFja2FnZT4KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzLmltYWdld3JpdGVyL21vZGVsL0ltYWdlV3JpdGVyTG9nZ2VyLmdlbm1vZGVsIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMuaW1hZ2V3cml0ZXIvbW9kZWwvSW1hZ2VXcml0ZXJMb2dnZXIuZ2VubW9kZWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjdjYTYxOAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzLmltYWdld3JpdGVyL21vZGVsL0ltYWdlV3JpdGVyTG9nZ2VyLmdlbm1vZGVsCkBAIC0wLDAgKzEsMzkgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8Z2VubW9kZWw6R2VuTW9kZWwgeG1pOnZlcnNpb249IjIuMCIKKyAgICB4bWxuczp4bWk9Imh0dHA6Ly93d3cub21nLm9yZy9YTUkiIHhtbG5zOmVjb3JlPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2VtZi8yMDAyL0Vjb3JlIgorICAgIHhtbG5zOmdlbm1vZGVsPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2VtZi8yMDAyL0dlbk1vZGVsIiBtb2RlbERpcmVjdG9yeT0iL29yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy5pbWFnZXdyaXRlci9zcmMiCisgICAgZWRpdERpcmVjdG9yeT0iL29yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy5pbWFnZXdyaXRlci9zcmMiIGVkaXRvckRpcmVjdG9yeT0iL29yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy5pbWFnZXdyaXRlci9zcmMiCisgICAgbW9kZWxQbHVnaW5JRD0ib3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzLmltYWdld3JpdGVyIiBtb2RlbE5hbWU9IkltYWdlV3JpdGVyTG9nZ2VyIgorICAgIGltcG9ydGVySUQ9Im9yZy5lY2xpcHNlLmVtZi5pbXBvcnRlci5lY29yZSIgY29tcGxpYW5jZUxldmVsPSI1LjAiIGNvcHlyaWdodEZpZWxkcz0iZmFsc2UiCisgICAgcHVibGljQ29uc3RydWN0b3JzPSJ0cnVlIiBydW50aW1lVmVyc2lvbj0iMi42IiBsYW5ndWFnZT0iIiB1c2VkR2VuUGFja2FnZXM9Ii4uLy4uL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9tb2RlbC9jb3JlLmdlbm1vZGVsIy8vY29tbW9uIC4uLy4uL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9tb2RlbC9jb3JlLmdlbm1vZGVsIy8vZ3JhcGggLi4vLi4vb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL21vZGVsL2NvcmUuZ2VubW9kZWwjLy9tb2RlbCAuLi8uLi9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvbW9kZWwvY29yZS5nZW5tb2RlbCMvL21vZGlmaWVyIC4uLy4uL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9tb2RlbC9jb3JlLmdlbm1vZGVsIy8vc2NlbmFyaW8gLi4vLi4vb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL21vZGVsL2NvcmUuZ2VubW9kZWwjLy9zZXF1ZW5jZXIgLi4vLi4vb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL21vZGVsL2NvcmUuZ2VubW9kZWwjLy9zb2x2ZXIgLi4vLi4vb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL21vZGVsL2NvcmUuZ2VubW9kZWwjLy9sb2dnZXIgcGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5lbWYuZWNvcmUvbW9kZWwvRWNvcmUuZ2VubW9kZWwjLy9lY29yZSAuLi8uLi9vcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMvbW9kZWxzL1NpbXVsYXRpb25Mb2dnZXIuZ2VubW9kZWwjLy9sb2dnZXJzIgorICAgIHJ1bnRpbWVQbGF0Zm9ybT0iUkNQIj4KKyAgPGZvcmVpZ25Nb2RlbD5JbWFnZVdyaXRlckxvZ2dlci5lY29yZTwvZm9yZWlnbk1vZGVsPgorICA8Z2VuUGFja2FnZXMgcHJlZml4PSJJbWFnZXdyaXRlciIgYmFzZVBhY2thZ2U9Im9yZy5lY2xpcHNlLnN0ZW0ubG9nZ2VycyIgZGlzcG9zYWJsZVByb3ZpZGVyRmFjdG9yeT0idHJ1ZSIKKyAgICAgIGVjb3JlUGFja2FnZT0iSW1hZ2VXcml0ZXJMb2dnZXIuZWNvcmUjLyI+CisgICAgPGdlbkVudW1zIHR5cGVTYWZlRW51bUNvbXBhdGlibGU9ImZhbHNlIiBlY29yZUVudW09IkltYWdlV3JpdGVyTG9nZ2VyLmVjb3JlIy8vTUFQX1BST0pFQ1RJT05TIj4KKyAgICAgIDxnZW5FbnVtTGl0ZXJhbHMgZWNvcmVFbnVtTGl0ZXJhbD0iSW1hZ2VXcml0ZXJMb2dnZXIuZWNvcmUjLy9NQVBfUFJPSkVDVElPTlMvRVFVSVJFQ1RBTkdVTEFSIi8+CisgICAgICA8Z2VuRW51bUxpdGVyYWxzIGVjb3JlRW51bUxpdGVyYWw9IkltYWdlV3JpdGVyTG9nZ2VyLmVjb3JlIy8vTUFQX1BST0pFQ1RJT05TL01FUkNBVE9SIi8+CisgICAgPC9nZW5FbnVtcz4KKyAgICA8Z2VuRGF0YVR5cGVzIGVjb3JlRGF0YVR5cGU9IkltYWdlV3JpdGVyTG9nZ2VyLmVjb3JlIy8vSU1hcFByb2plY3Rpb24iLz4KKyAgICA8Z2VuRGF0YVR5cGVzIGVjb3JlRGF0YVR5cGU9IkltYWdlV3JpdGVyTG9nZ2VyLmVjb3JlIy8vQ29sb3JQcm92aWRlciIvPgorICAgIDxnZW5DbGFzc2VzIGVjb3JlQ2xhc3M9IkltYWdlV3JpdGVyTG9nZ2VyLmVjb3JlIy8vSW1hZ2VXcml0ZXJMb2dnZXIiPgorICAgICAgPGdlbkZlYXR1cmVzIGNyZWF0ZUNoaWxkPSJmYWxzZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFQXR0cmlidXRlIEltYWdlV3JpdGVyTG9nZ2VyLmVjb3JlIy8vSW1hZ2VXcml0ZXJMb2dnZXIvdXNlRGVmYXVsdExvZ0RpcmVjdG9yeSIvPgorICAgICAgPGdlbkZlYXR1cmVzIGNyZWF0ZUNoaWxkPSJmYWxzZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFQXR0cmlidXRlIEltYWdlV3JpdGVyTG9nZ2VyLmVjb3JlIy8vSW1hZ2VXcml0ZXJMb2dnZXIvZGF0YVBhdGgiLz4KKyAgICA8L2dlbkNsYXNzZXM+CisgICAgPGdlbkNsYXNzZXMgZWNvcmVDbGFzcz0iSW1hZ2VXcml0ZXJMb2dnZXIuZWNvcmUjLy9Qcm9qZWN0ZWRNYXBJbWFnZUxvZ2dlciI+CisgICAgICA8Z2VuRmVhdHVyZXMgY3JlYXRlQ2hpbGQ9ImZhbHNlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVBdHRyaWJ1dGUgSW1hZ2VXcml0ZXJMb2dnZXIuZWNvcmUjLy9Qcm9qZWN0ZWRNYXBJbWFnZUxvZ2dlci91c2VMb2dTY2FsaW5nIi8+CisgICAgICA8Z2VuRmVhdHVyZXMgY3JlYXRlQ2hpbGQ9ImZhbHNlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVBdHRyaWJ1dGUgSW1hZ2VXcml0ZXJMb2dnZXIuZWNvcmUjLy9Qcm9qZWN0ZWRNYXBJbWFnZUxvZ2dlci9nYWluIi8+CisgICAgICA8Z2VuRmVhdHVyZXMgY3JlYXRlQ2hpbGQ9ImZhbHNlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVBdHRyaWJ1dGUgSW1hZ2VXcml0ZXJMb2dnZXIuZWNvcmUjLy9Qcm9qZWN0ZWRNYXBJbWFnZUxvZ2dlci9sb2dBbGxEZWNvcmF0b3JzIi8+CisgICAgICA8Z2VuRmVhdHVyZXMgY3JlYXRlQ2hpbGQ9ImZhbHNlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVBdHRyaWJ1dGUgSW1hZ2VXcml0ZXJMb2dnZXIuZWNvcmUjLy9Qcm9qZWN0ZWRNYXBJbWFnZUxvZ2dlci9jb2xvclByb3ZpZGVyIi8+CisgICAgICA8Z2VuRmVhdHVyZXMgbm90aWZ5PSJmYWxzZSIgY3JlYXRlQ2hpbGQ9ImZhbHNlIiBwcm9wZXJ0eVNvcnRDaG9pY2VzPSJ0cnVlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVSZWZlcmVuY2UgSW1hZ2VXcml0ZXJMb2dnZXIuZWNvcmUjLy9Qcm9qZWN0ZWRNYXBJbWFnZUxvZ2dlci9kZWNvcmF0b3IiLz4KKyAgICAgIDxnZW5GZWF0dXJlcyBjcmVhdGVDaGlsZD0iZmFsc2UiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RUF0dHJpYnV0ZSBJbWFnZVdyaXRlckxvZ2dlci5lY29yZSMvL1Byb2plY3RlZE1hcEltYWdlTG9nZ2VyL2RlY29yYXRvclByb3BlcnRpZXMiLz4KKyAgICAgIDxnZW5GZWF0dXJlcyBjcmVhdGVDaGlsZD0iZmFsc2UiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RUF0dHJpYnV0ZSBJbWFnZVdyaXRlckxvZ2dlci5lY29yZSMvL1Byb2plY3RlZE1hcEltYWdlTG9nZ2VyL3dpZHRoIi8+CisgICAgICA8Z2VuRmVhdHVyZXMgY3JlYXRlQ2hpbGQ9ImZhbHNlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVBdHRyaWJ1dGUgSW1hZ2VXcml0ZXJMb2dnZXIuZWNvcmUjLy9Qcm9qZWN0ZWRNYXBJbWFnZUxvZ2dlci9oZWlnaHQiLz4KKyAgICAgIDxnZW5GZWF0dXJlcyBjcmVhdGVDaGlsZD0iZmFsc2UiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RUF0dHJpYnV0ZSBJbWFnZVdyaXRlckxvZ2dlci5lY29yZSMvL1Byb2plY3RlZE1hcEltYWdlTG9nZ2VyL3Byb2plY3Rpb24iLz4KKyAgICA8L2dlbkNsYXNzZXM+CisgICAgPGdlbkNsYXNzZXMgZWNvcmVDbGFzcz0iSW1hZ2VXcml0ZXJMb2dnZXIuZWNvcmUjLy9NYXBWaWV3SW1hZ2VXcml0ZXJMb2dnZXIiPgorICAgICAgPGdlbkZlYXR1cmVzIGNyZWF0ZUNoaWxkPSJmYWxzZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFQXR0cmlidXRlIEltYWdlV3JpdGVyTG9nZ2VyLmVjb3JlIy8vTWFwVmlld0ltYWdlV3JpdGVyTG9nZ2VyL29wZW5NYXBWaWV3Ii8+CisgICAgPC9nZW5DbGFzc2VzPgorICAgIDxnZW5DbGFzc2VzIGVjb3JlQ2xhc3M9IkltYWdlV3JpdGVyTG9nZ2VyLmVjb3JlIy8vRXF1aXJlY3Rhbmd1bGFyTWFwTG9nZ2VyIi8+CisgIDwvZ2VuUGFja2FnZXM+Cis8L2dlbm1vZGVsOkdlbk1vZGVsPgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMuaW1hZ2V3cml0ZXIvcGx1Z2luLnByb3BlcnRpZXMgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy5pbWFnZXdyaXRlci9wbHVnaW4ucHJvcGVydGllcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYjk4Yjg4Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMuaW1hZ2V3cml0ZXIvcGx1Z2luLnByb3BlcnRpZXMKQEAgLTAsMCArMSw5MiBAQAorCisjIDxjb3B5cmlnaHQ+CisjIDwvY29weXJpZ2h0PgorIworIyAkSWQkCisKK3BsdWdpbk5hbWUgPSBJbWFnZVdyaXRlckxvZ2dlciBNb2RlbAorcHJvdmlkZXJOYW1lID0gd3d3LmV4YW1wbGUub3JnCitfVUlfQ3JlYXRlQ2hpbGRfdGV4dCA9IHswfQorX1VJX0NyZWF0ZUNoaWxkX3RleHQyID0gezF9IHswfQorX1VJX0NyZWF0ZUNoaWxkX3RleHQzID0gezF9CitfVUlfQ3JlYXRlQ2hpbGRfdG9vbHRpcCA9IENyZWF0ZSBOZXcgezB9IFVuZGVyIHsxfSBGZWF0dXJlCitfVUlfQ3JlYXRlQ2hpbGRfZGVzY3JpcHRpb24gPSBDcmVhdGUgYSBuZXcgY2hpbGQgb2YgdHlwZSB7MH0gZm9yIHRoZSB7MX0gZmVhdHVyZSBvZiB0aGUgc2VsZWN0ZWQgezJ9LgorX1VJX0NyZWF0ZVNpYmxpbmdfZGVzY3JpcHRpb24gPSBDcmVhdGUgYSBuZXcgc2libGluZyBvZiB0eXBlIHswfSBmb3IgdGhlIHNlbGVjdGVkIHsyfSwgdW5kZXIgdGhlIHsxfSBmZWF0dXJlIG9mIHRoZWlyIHBhcmVudC4KK19VSV9Qcm9wZXJ0eURlc2NyaXB0b3JfZGVzY3JpcHRpb24gPSBUaGUgezB9IG9mIHRoZSB7MX0KK19VSV9JbWFnZVdyaXRlckxvZ2dlcl90eXBlID0gSW1hZ2UgV3JpdGVyIExvZ2dlcgorX1VJX1Vua25vd25fdHlwZSA9IE9iamVjdAorX1VJX1Vua25vd25fZGF0YXR5cGU9IFZhbHVlCitfVUlfSW1hZ2VXcml0ZXJMb2dnZXJfdXNlRGVmYXVsdExvZ0RpcmVjdG9yeV9mZWF0dXJlID0gVXNlIERlZmF1bHQgTG9nIERpcmVjdG9yeQorX1VJX0ltYWdlV3JpdGVyTG9nZ2VyX2xvZ0RpcmVjdG9yeV9mZWF0dXJlID0gTG9nIERpcmVjdG9yeQorX1VJX0ltYWdlV3JpdGVyTG9nZ2VyX3Byb2plY3Rpb25fZmVhdHVyZSA9IFByb2plY3Rpb24KK19VSV9Vbmtub3duX2ZlYXR1cmUgPSBVbnNwZWNpZmllZAorX1VJX01BUF9QUk9KRUNUSU9OU19FUVVJUkVDVEFOR1VMQVJfbGl0ZXJhbCA9IEVRVUlSRUNUQU5HVUxBUgorX1VJX01BUF9QUk9KRUNUSU9OU19NRVJDQVRPUl9saXRlcmFsID0gTUVSQ0FUT1IKK19VSV9JbWFnZVdyaXRlckxvZ2dlcl9kYXRhUGF0aF9mZWF0dXJlID0gRGF0YSBQYXRoCitfVUlfSW1hZ2V3cml0ZXJFZGl0b3JfbWVudSA9ICZJbWFnZXdyaXRlciBFZGl0b3IKK19VSV9DcmVhdGVDaGlsZF9tZW51X2l0ZW0gPSAmTmV3IENoaWxkCitfVUlfQ3JlYXRlU2libGluZ19tZW51X2l0ZW0gPSBOJmV3IFNpYmxpbmcKK19VSV9TaG93UHJvcGVydGllc1ZpZXdfbWVudV9pdGVtID0gU2hvdyAmUHJvcGVydGllcyBWaWV3CitfVUlfUmVmcmVzaFZpZXdlcl9tZW51X2l0ZW0gPSAmUmVmcmVzaAorX1VJX1NlbGVjdGlvblBhZ2VfbGFiZWwgPSBTZWxlY3Rpb24KK19VSV9QYXJlbnRQYWdlX2xhYmVsID0gUGFyZW50CitfVUlfTGlzdFBhZ2VfbGFiZWwgPSBMaXN0CitfVUlfVHJlZVBhZ2VfbGFiZWwgPSBUcmVlCitfVUlfVGFibGVQYWdlX2xhYmVsID0gVGFibGUKK19VSV9UcmVlV2l0aENvbHVtbnNQYWdlX2xhYmVsID0gVHJlZSB3aXRoIENvbHVtbnMKK19VSV9PYmplY3RDb2x1bW5fbGFiZWwgPSBPYmplY3QKK19VSV9TZWxmQ29sdW1uX2xhYmVsID0gU2VsZgorX1VJX05vT2JqZWN0U2VsZWN0ZWQgPSBTZWxlY3RlZCBOb3RoaW5nCitfVUlfU2luZ2xlT2JqZWN0U2VsZWN0ZWQgPSBTZWxlY3RlZCBPYmplY3Q6IHswfQorX1VJX011bHRpT2JqZWN0U2VsZWN0ZWQgPSBTZWxlY3RlZCB7MH0gT2JqZWN0cworX1VJX09wZW5FZGl0b3JFcnJvcl9sYWJlbCA9IE9wZW4gRWRpdG9yCitfVUlfV2l6YXJkX2NhdGVnb3J5ID0gRXhhbXBsZSBFTUYgTW9kZWwgQ3JlYXRpb24gV2l6YXJkcworX1VJX0NyZWF0ZU1vZGVsRXJyb3JfbWVzc2FnZSA9IFByb2JsZW1zIGVuY291bnRlcmVkIGluIGZpbGUgInswfSIKK19VSV9JbWFnZXdyaXRlck1vZGVsV2l6YXJkX2xhYmVsID0gSW1hZ2V3cml0ZXIgTW9kZWwKK19VSV9JbWFnZXdyaXRlck1vZGVsV2l6YXJkX2Rlc2NyaXB0aW9uID0gQ3JlYXRlIGEgbmV3IEltYWdld3JpdGVyIG1vZGVsCitfVUlfSW1hZ2V3cml0ZXJFZGl0b3JfbGFiZWwgPSBJbWFnZXdyaXRlciBNb2RlbCBFZGl0b3IKK19VSV9JbWFnZXdyaXRlckVkaXRvckZpbGVuYW1lRGVmYXVsdEJhc2UgPSBNeQorX1VJX0ltYWdld3JpdGVyRWRpdG9yRmlsZW5hbWVFeHRlbnNpb25zID0gaW1hZ2V3cml0ZXIKK19VSV9XaXphcmRfbGFiZWwgPSBOZXcKK19XQVJOX0ZpbGVuYW1lRXh0ZW5zaW9uID0gVGhlIGZpbGUgbmFtZSBtdXN0IGVuZCBpbiAnJy57MH0nJworX1dBUk5fRmlsZW5hbWVFeHRlbnNpb25zID0gVGhlIGZpbGUgbmFtZSBtdXN0IGhhdmUgb25lIG9mIHRoZSBmb2xsb3dpbmcgZXh0ZW5zaW9uczogezB9CitfVUlfTW9kZWxPYmplY3QgPSAmTW9kZWwgT2JqZWN0CitfVUlfWE1MRW5jb2RpbmcgPSAmWE1MIEVuY29kaW5nCitfVUlfWE1MRW5jb2RpbmdDaG9pY2VzID0gVVRGLTggQVNDSUkgVVRGLTE2IFVURi0xNkJFIFVURi0xNkxFIElTTy04ODU5LTEKK19VSV9XaXphcmRfaW5pdGlhbF9vYmplY3RfZGVzY3JpcHRpb24gPSBTcGVjaWZ5IGEgZmlsZSBuYW1lIGFuZCBzZWxlY3QgYSBtb2RlbCBvYmplY3QgdG8gY3JlYXRlCitfVUlfRmlsZUNvbmZsaWN0X2xhYmVsID0gRmlsZSBDb25mbGljdAorX1dBUk5fRmlsZUNvbmZsaWN0ID0gVGhlIGZpbGUgInswfSIgYWxyZWFkeSBleGlzdHMuICBEbyB5b3Ugd2FudCB0byByZXBsYWNlIHRoZSBleGlzdGluZyBmaWxlPworX1VJX0ltYWdlV3JpdGVyTG9nZ2VyRWRpdG9yQWR2aXNvcl9BY3Rpb25TZXRfbGFiZWwgPSBJbWFnZVdyaXRlckxvZ2dlciBBY3Rpb24gU2V0CitfVUlfUGVyc3BlY3RpdmVfbGFiZWwgPSBJbWFnZVdyaXRlckxvZ2dlcgorX1VJX0Jyb3dzZV9sYWJlbCA9ICZCcm93c2UuLi4KK19VSV9GaWxlX2xhYmVsID0gJkZpbGUKK19VSV9RdWVzdGlvbl90aXRsZSA9IFF1ZXN0aW9uCitfVUlfRXJyb3JfdGl0bGUgPSBFcnJvcgorX1dBUk5fTm9fRWRpdG9yID0gVGhlcmUgaXMgbm8gZWRpdG9yIHJlZ2lzdGVyZWQgZm9yIHRoZSBmaWxlICJ7MH0iLgorX1VJX0FwcGxpY2F0aW9uX3RpdGxlID0gSW1hZ2VXcml0ZXJMb2dnZXIgQXBwbGljYXRpb24KK19VSV9NZW51X0ZpbGVfbGFiZWwgPSAmRmlsZQorX1VJX01lbnVfTmV3X2xhYmVsID0gJk5ldworX1VJX01lbnVfT3Blbl9sYWJlbCA9ICZPcGVuLi4uCitfVUlfTWVudV9PcGVuX2Rlc2NyaXB0aW9uID0gT3BlbnMgYSBtb2RlbCBvYmplY3QgZmlsZQorX1VJX01lbnVfT3BlblVSSV9sYWJlbCA9ICZPcGVuIFVSSS4uLgorX1VJX01lbnVfT3BlblVSSV9kZXNjcmlwdGlvbiA9IE9wZW5zIGEgbW9kZWwgb2JqZWN0IGxvYWRpbmcgaXQgZnJvbSBhIFVSSQorX1VJX01lbnVfRWRpdF9sYWJlbCA9ICZFZGl0CitfVUlfTWVudV9XaW5kb3dfbGFiZWwgPSAmV2luZG93CitfVUlfTWVudV9IZWxwX2xhYmVsID0gJkhlbHAKK19VSV9NZW51X0Fib3V0X2xhYmVsID0gSW1hZ2VXcml0ZXJMb2dnZXIgJkFib3V0Li4uCitfVUlfQWJvdXRfdGl0bGUgPSBJbWFnZVdyaXRlckxvZ2dlciBBcHBsaWNhdGlvbgorX1VJX0Fib3V0X3RleHQgPSBJbWFnZVdyaXRlckxvZ2dlciBBcHBsaWNhdGlvbiBhYm91dCBib3ggZ29lcyBoZXJlLgorX1VJX0ltYWdld3JpdGVyTW9kZWxXaXphcmRfQWN0aW9uU2V0X2xhYmVsID0gSW1hZ2V3cml0ZXIgTW9kZWwgQWN0aW9uIFNldAorX1VJX01hcFZpZXdJbWFnZVdyaXRlckxvZ2dlcl90eXBlID0gTWFwIFZpZXcgSW1hZ2UgV3JpdGVyIExvZ2dlcgorX1VJX01hcFZpZXdJbWFnZVdyaXRlckxvZ2dlcl9vcGVuTWFwVmlld19mZWF0dXJlID0gT3BlbiBNYXAgVmlldworX1VJX1Byb2plY3RlZE1hcEltYWdlTG9nZ2VyX3R5cGUgPSBQcm9qZWN0ZWQgTWFwIEltYWdlIExvZ2dlcgorX1VJX1Byb2plY3RlZE1hcEltYWdlTG9nZ2VyX3Byb2plY3Rpb25fZmVhdHVyZSA9IFByb2plY3Rpb24KK19VSV9Qcm9qZWN0ZWRNYXBJbWFnZUxvZ2dlcl91c2VMb2dTY2FsaW5nX2ZlYXR1cmUgPSBVc2UgTG9nIFNjYWxpbmcKK19VSV9Qcm9qZWN0ZWRNYXBJbWFnZUxvZ2dlcl9nYWluX2ZlYXR1cmUgPSBHYWluCitfVUlfUHJvamVjdGVkTWFwSW1hZ2VMb2dnZXJfbG9nQWxsRGVjb3JhdG9yc19mZWF0dXJlID0gTG9nIEFsbCBEZWNvcmF0b3JzCitfVUlfUHJvamVjdGVkTWFwSW1hZ2VMb2dnZXJfY29sb3JQcm92aWRlcl9mZWF0dXJlID0gQ29sb3IgUHJvdmlkZXIKK19VSV9Qcm9qZWN0ZWRNYXBJbWFnZUxvZ2dlcl9kZWNvcmF0b3JfZmVhdHVyZSA9IERlY29yYXRvcgorX1VJX1Byb2plY3RlZE1hcEltYWdlTG9nZ2VyX2RlY29yYXRvclByb3BlcnRpZXNfZmVhdHVyZSA9IERlY29yYXRvciBQcm9wZXJ0aWVzCitfVUlfRXF1aXJlY3Rhbmd1bGFyTWFwTG9nZ2VyX3R5cGUgPSBFcXVpcmVjdGFuZ3VsYXIgTWFwIExvZ2dlcgorX1VJX1Byb2plY3RlZE1hcEltYWdlTG9nZ2VyX3dpZHRoX2ZlYXR1cmUgPSBXaWR0aAorX1VJX1Byb2plY3RlZE1hcEltYWdlTG9nZ2VyX2hlaWdodF9mZWF0dXJlID0gSGVpZ2h0CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy5pbWFnZXdyaXRlci9wbHVnaW4ueG1sIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMuaW1hZ2V3cml0ZXIvcGx1Z2luLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZGZkMWIzCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMuaW1hZ2V3cml0ZXIvcGx1Z2luLnhtbApAQCAtMCwwICsxLDg4IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPD9lY2xpcHNlIHZlcnNpb249IjMuMCI/PgorCis8IS0tCisgPGNvcHlyaWdodD4KKyA8L2NvcHlyaWdodD4KKworICRJZCQKKy0tPgorCis8cGx1Z2luPgorCisKKyAgIDxleHRlbnNpb24KKyAgICAgICAgIHBvaW50PSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUubG9nZ2VyIj4KKyAgICAgIDxjbGFzc2RlZgorICAgICAgICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy5pbWFnZXdyaXRlci5pbXBsLk1hcFZpZXdJbWFnZVdyaXRlckxvZ2dlckltcGwiPgorICAgICAgPC9jbGFzc2RlZj4KKyAgICAgIDxkdWJsaW5fY29yZQorICAgICAgICAgICAgY2F0ZWdvcnlfaWQ9Ii8iCisgICAgICAgICAgICBpZGVudGlmaWVyPSJvcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMuaW1hZ2V3cml0ZXIuZHVibGluX2NvcmUiCisgICAgICAgICAgICB0aXRsZT0iTWFwIFZpZXcgTG9nZ2VyIj4KKyAgICAgIDwvZHVibGluX2NvcmU+CisgICAgICAKKyAgIDwvZXh0ZW5zaW9uPgorCisgICA8ZXh0ZW5zaW9uCisgICAgICAgICBwb2ludD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmxvZ2dlciI+CisgICAgICA8Y2xhc3NkZWYKKyAgICAgICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMuaW1hZ2V3cml0ZXIuaW1wbC5FcXVpcmVjdGFuZ3VsYXJNYXBMb2dnZXJJbXBsIj4KKyAgICAgIDwvY2xhc3NkZWY+CisgICAgICA8ZHVibGluX2NvcmUKKyAgICAgICAgICAgIGNhdGVnb3J5X2lkPSIvIgorICAgICAgICAgICAgaWRlbnRpZmllcj0ib3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzLmltYWdld3JpdGVyLmR1Ymxpbl9jb3JlIgorICAgICAgICAgICAgdGl0bGU9Ik1hcCBWaWV3IExvZ2dlciI+CisgICAgICA8L2R1Ymxpbl9jb3JlPgorICAgICAgCisgICA8L2V4dGVuc2lvbj4KKworICAgPGV4dGVuc2lvbiBwb2ludD0ib3JnLmVjbGlwc2UuZW1mLmVkaXQuaXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcmllcyI+CisgICAgICA8ZmFjdG9yeQorICAgICAgICAgICAgdXJpPSJodHRwOi8vb3JnL2VjbGlwc2Uvc3RlbS9sb2dnZXJzL2ltYWdld3JpdGVyIgorICAgICAgICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy5pbWFnZXdyaXRlci5wcm92aWRlci5JbWFnZXdyaXRlckl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5IgorICAgICAgICAgICAgc3VwcG9ydGVkVHlwZXM9CisgICAgICAgICAgICAgICJvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JRWRpdGluZ0RvbWFpbkl0ZW1Qcm92aWRlcgorICAgICAgICAgICAgICAgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVN0cnVjdHVyZWRJdGVtQ29udGVudFByb3ZpZGVyCisgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JVHJlZUl0ZW1Db250ZW50UHJvdmlkZXIKKyAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtTGFiZWxQcm92aWRlcgorICAgICAgICAgICAgICAgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1Qcm9wZXJ0eVNvdXJjZSIvPgorICAgPC9leHRlbnNpb24+CisKKyAgIDxleHRlbnNpb24gcG9pbnQ9Im9yZy5lY2xpcHNlLmVtZi5lY29yZS5nZW5lcmF0ZWRfcGFja2FnZSI+CisgICAgICA8cGFja2FnZQorICAgICAgICAgICAgdXJpPSJodHRwOi8vb3JnL2VjbGlwc2Uvc3RlbS9sb2dnZXJzL2ltYWdld3JpdGVyIgorICAgICAgICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy5pbWFnZXdyaXRlci5JbWFnZXdyaXRlclBhY2thZ2UiCisgICAgICAgICAgICBnZW5Nb2RlbD0ibW9kZWxzL0NTVkxvZ2dlci5nZW5tb2RlbCIvPgorICAgPC9leHRlbnNpb24+CisKKzwhLS0KKyAgIDxleHRlbnNpb24gcG9pbnQ9Im9yZy5lY2xpcHNlLnVpLm5ld1dpemFyZHMiPgorICAgICAgPGNhdGVnb3J5CisgICAgICAgICAgICBpZD0ib3JnLmVjbGlwc2UuZW1mLmVjb3JlLldpemFyZC5jYXRlZ29yeS5JRCIKKyAgICAgICAgICAgIG5hbWU9IiVfVUlfV2l6YXJkX2NhdGVnb3J5Ii8+CisgICAgICA8d2l6YXJkCisgICAgICAgICAgICBpZD0ib3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzLmNzdi5wcmVzZW50YXRpb24uQ1NWTW9kZWxXaXphcmRJRCIKKyAgICAgICAgICAgIG5hbWU9IiVfVUlfQ1NWTW9kZWxXaXphcmRfbGFiZWwiCisgICAgICAgICAgICBjbGFzcz0ib3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzLmNzdi5wcmVzZW50YXRpb24uQ1NWTW9kZWxXaXphcmQiCisgICAgICAgICAgICBjYXRlZ29yeT0ib3JnLmVjbGlwc2UuZW1mLmVjb3JlLldpemFyZC5jYXRlZ29yeS5JRCIKKyAgICAgICAgICAgIGljb249Imljb25zL2Z1bGwvb2JqMTYvQ1NWTW9kZWxGaWxlLmdpZiI+CisgICAgICAgICA8ZGVzY3JpcHRpb24+JV9VSV9DU1ZNb2RlbFdpemFyZF9kZXNjcmlwdGlvbjwvZGVzY3JpcHRpb24+CisgICAgICAgICA8c2VsZWN0aW9uIGNsYXNzPSJvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUmVzb3VyY2UiLz4KKyAgICAgIDwvd2l6YXJkPgorICAgPC9leHRlbnNpb24+CisKKyAgIDxleHRlbnNpb24gcG9pbnQ9Im9yZy5lY2xpcHNlLnVpLmVkaXRvcnMiPgorICAgICAgPGVkaXRvcgorICAgICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy5jc3YucHJlc2VudGF0aW9uLkNTVkVkaXRvcklEIgorICAgICAgICAgICAgbmFtZT0iJV9VSV9DU1ZFZGl0b3JfbGFiZWwiCisgICAgICAgICAgICBpY29uPSJpY29ucy9mdWxsL29iajE2L0NTVk1vZGVsRmlsZS5naWYiCisgICAgICAgICAgICBleHRlbnNpb25zPSJjc3YiCisgICAgICAgICAgICBjbGFzcz0ib3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzLmNzdi5wcmVzZW50YXRpb24uQ1NWRWRpdG9yIgorICAgICAgICAgICAgY29udHJpYnV0b3JDbGFzcz0ib3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzLmNzdi5wcmVzZW50YXRpb24uQ1NWQWN0aW9uQmFyQ29udHJpYnV0b3IiPgorICAgICAgPC9lZGl0b3I+CisgICA8L2V4dGVuc2lvbj4KKy0tPgorCisKKzwvcGx1Z2luPgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMuaW1hZ2V3cml0ZXIvc3JjL29yZy9lY2xpcHNlL3N0ZW0vbG9nZ2Vycy9pbWFnZXdyaXRlci9BY3RpdmF0b3IuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzLmltYWdld3JpdGVyL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2xvZ2dlcnMvaW1hZ2V3cml0ZXIvQWN0aXZhdG9yLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWE4MTQyZgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzLmltYWdld3JpdGVyL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2xvZ2dlcnMvaW1hZ2V3cml0ZXIvQWN0aXZhdG9yLmphdmEKQEAgLTAsMCArMSwxMDkgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy5pbWFnZXdyaXRlcjsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QbHVnaW47CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlN0YXR1czsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMuaW1hZ2V3cml0ZXIucHJvdmlkZXIuSW1hZ2VXcml0ZXJMb2dnZXJFZGl0UGx1Z2luOworaW1wb3J0IG9yZy5vc2dpLmZyYW1ld29yay5CdW5kbGVDb250ZXh0OworCisvKioKKyAqIFRoZSBhY3RpdmF0b3IgY2xhc3MgY29udHJvbHMgdGhlIHBsdWctaW4gbGlmZSBjeWNsZQorICovCitwdWJsaWMgY2xhc3MgQWN0aXZhdG9yIGV4dGVuZHMgUGx1Z2luIHsKKworCS8qKgorCSAqIFRoZSBwbHVnLWluIElECisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUExVR0lOX0lEID0gIm9yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy5pbWFnZXdyaXRlciI7IC8vJE5PTi1OTFMtMSQKKworCS8vIFRoZSBzaGFyZWQgaW5zdGFuY2UKKwlwcml2YXRlIHN0YXRpYyBBY3RpdmF0b3IgcGx1Z2luOworCisJLyoqCisJICogVGhlIGNvbnN0cnVjdG9yCisJICovCisJcHVibGljIEFjdGl2YXRvcigpIHsKKwkJcGx1Z2luID0gdGhpczsKKwl9CisKKwkvKioKKwkgKiBAcGFyYW0gY29udGV4dAorCSAqIEB0aHJvd3MgRXhjZXB0aW9uCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgc3RhcnQoQnVuZGxlQ29udGV4dCBjb250ZXh0KSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJc3VwZXIuc3RhcnQoY29udGV4dCk7CisJfSAvLyBzdGFydAorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGx1Z2luI3N0b3Aob3JnLm9zZ2kuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHQpCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgc3RvcChCdW5kbGVDb250ZXh0IGNvbnRleHQpIHRocm93cyBFeGNlcHRpb24geworCQlwbHVnaW4gPSBudWxsOworCQlzdXBlci5zdG9wKGNvbnRleHQpOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIHNoYXJlZCBpbnN0YW5jZQorCSAqIAorCSAqIEByZXR1cm4gdGhlIHNoYXJlZCBpbnN0YW5jZQorCSAqLworCXB1YmxpYyBzdGF0aWMgQWN0aXZhdG9yIGdldERlZmF1bHQoKSB7CisJCXJldHVybiBwbHVnaW47CisJfQorCisJLyoqCisJICogTG9nIGFuIGVycm9yIHRvIHRoZSBJTG9nIGZvciB0aGlzIHBsdWdpbgorCSAqIAorCSAqIEBwYXJhbSBtZXNzYWdlCisJICogICAgICAgICAgICB0aGUgbG9jYWxpemVkIGVycm9yIG1lc3NhZ2UgdGV4dAorCSAqIEBwYXJhbSBleGNlcHRpb24KKwkgKiAgICAgICAgICAgIHRoZSBhc3NvY2lhdGVkIGV4Y2VwdGlvbiwgb3IgbnVsbAorCSAqLworCXB1YmxpYyBzdGF0aWMgdm9pZCBsb2dFcnJvcihTdHJpbmcgbWVzc2FnZSwgVGhyb3dhYmxlIGV4Y2VwdGlvbikgeworCQlJbWFnZVdyaXRlckxvZ2dlckVkaXRQbHVnaW4uZ2V0UGx1Z2luKCkuZ2V0TG9nKCkubG9nKAorCQkJCW5ldyBTdGF0dXMoSVN0YXR1cy5FUlJPUiwgSW1hZ2VXcml0ZXJMb2dnZXJFZGl0UGx1Z2luLmdldFBsdWdpbigpLmdldEJ1bmRsZSgpLmdldFN5bWJvbGljTmFtZSgpLAorCQkJCQkJMCwgbWVzc2FnZSwgZXhjZXB0aW9uKSk7CisJfSAvLyBsb2dFcnJvcgorCisJLyoqCisJICogTG9nIGluZm9ybWF0aW9uIHRvIHRoZSBJTG9nIGZvciB0aGlzIHBsdWdpbgorCSAqIAorCSAqIEBwYXJhbSBtZXNzYWdlCisJICogICAgICAgICAgICB0aGUgbG9jYWxpemVkIGluZm9ybWF0aW9uIG1lc3NhZ2UgdGV4dAorCSAqIEBwYXJhbSBleGNlcHRpb24KKwkgKiAgICAgICAgICAgIHRoZSBhc3NvY2lhdGVkIGV4Y2VwdGlvbiwgb3IgbnVsbAorCSAqLworCXB1YmxpYyBzdGF0aWMgdm9pZCBsb2dJbmZvcm1hdGlvbihTdHJpbmcgbWVzc2FnZSwgVGhyb3dhYmxlIGV4Y2VwdGlvbikgeworCQlJbWFnZVdyaXRlckxvZ2dlckVkaXRQbHVnaW4uZ2V0UGx1Z2luKCkuZ2V0TG9nKCkubG9nKAorCQkJCW5ldyBTdGF0dXMoSVN0YXR1cy5JTkZPLCBJbWFnZVdyaXRlckxvZ2dlckVkaXRQbHVnaW4uZ2V0UGx1Z2luKCkuZ2V0QnVuZGxlKCkuZ2V0U3ltYm9saWNOYW1lKCksCisJCQkJCQkwLCBtZXNzYWdlLCBleGNlcHRpb24pKTsKKwl9IC8vIGxvZ0luZm9ybWF0aW9uCisJCisJCisJLyoqCisJICogTG9nIGluZm9ybWF0aW9uIHRvIHRoZSBJTG9nIGZvciB0aGlzIHBsdWdpbgorCSAqIAorCSAqIEBwYXJhbSBtZXNzYWdlCisJICogICAgICAgICAgICB0aGUgbG9jYWxpemVkIGluZm9ybWF0aW9uIG1lc3NhZ2UgdGV4dAorCSAqIEBwYXJhbSBleGNlcHRpb24KKwkgKiAgICAgICAgICAgIHRoZSBhc3NvY2lhdGVkIGV4Y2VwdGlvbiwgb3IgbnVsbAorCSAqLworCXB1YmxpYyBzdGF0aWMgdm9pZCBsb2dXYXJuaW5nKFN0cmluZyBtZXNzYWdlLCBUaHJvd2FibGUgZXhjZXB0aW9uKSB7CisJCUltYWdlV3JpdGVyTG9nZ2VyRWRpdFBsdWdpbi5nZXRQbHVnaW4oKS5nZXRMb2coKS5sb2coCisJCQkJbmV3IFN0YXR1cyhJU3RhdHVzLldBUk5JTkcsIEltYWdlV3JpdGVyTG9nZ2VyRWRpdFBsdWdpbi5nZXRQbHVnaW4oKS5nZXRCdW5kbGUoKS5nZXRTeW1ib2xpY05hbWUoKSwKKwkJCQkJCTAsIG1lc3NhZ2UsIGV4Y2VwdGlvbikpOworCX0gLy8gbG9nSW5mb3JtYXRpb24KK30gLy8gQWN0aXZhdG9yCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy5pbWFnZXdyaXRlci9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9sb2dnZXJzL2ltYWdld3JpdGVyL0VxdWlyZWN0YW5ndWxhck1hcExvZ2dlci5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMuaW1hZ2V3cml0ZXIvc3JjL29yZy9lY2xpcHNlL3N0ZW0vbG9nZ2Vycy9pbWFnZXdyaXRlci9FcXVpcmVjdGFuZ3VsYXJNYXBMb2dnZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YWJkNDczCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMuaW1hZ2V3cml0ZXIvc3JjL29yZy9lY2xpcHNlL3N0ZW0vbG9nZ2Vycy9pbWFnZXdyaXRlci9FcXVpcmVjdGFuZ3VsYXJNYXBMb2dnZXIuamF2YQpAQCAtMCwwICsxLDIxIEBACisvKioKKyAqIDxjb3B5cmlnaHQ+CisgKiA8L2NvcHlyaWdodD4KKyAqCisgKiAkSWQkCisgKi8KK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzLmltYWdld3JpdGVyOworCisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIEEgcmVwcmVzZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPkVxdWlyZWN0YW5ndWxhciBNYXAgTG9nZ2VyPC9iPjwvZW0+Jy4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICoKKyAqCisgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy5pbWFnZXdyaXRlci5JbWFnZXdyaXRlclBhY2thZ2UjZ2V0RXF1aXJlY3Rhbmd1bGFyTWFwTG9nZ2VyKCkKKyAqIEBtb2RlbAorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgaW50ZXJmYWNlIEVxdWlyZWN0YW5ndWxhck1hcExvZ2dlciBleHRlbmRzIFByb2plY3RlZE1hcEltYWdlTG9nZ2VyIHsKK30gLy8gRXF1aXJlY3Rhbmd1bGFyTWFwTG9nZ2VyCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy5pbWFnZXdyaXRlci9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9sb2dnZXJzL2ltYWdld3JpdGVyL0ltYWdlV3JpdGVyTG9nZ2VyLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy5pbWFnZXdyaXRlci9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9sb2dnZXJzL2ltYWdld3JpdGVyL0ltYWdlV3JpdGVyTG9nZ2VyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTc0ZWVjNQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzLmltYWdld3JpdGVyL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2xvZ2dlcnMvaW1hZ2V3cml0ZXIvSW1hZ2VXcml0ZXJMb2dnZXIuamF2YQpAQCAtMCwwICsxLDgyIEBACisvKioKKyAqIDxjb3B5cmlnaHQ+CisgKiA8L2NvcHlyaWdodD4KKyAqCisgKiAkSWQkCisgKi8KK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzLmltYWdld3JpdGVyOworCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzLlN5bmNocm9ub3VzTG9nZ2VyOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiBBIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5JbWFnZSBXcml0ZXIgTG9nZ2VyPC9iPjwvZW0+Jy4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICoKKyAqIDxwPgorICogVGhlIGZvbGxvd2luZyBmZWF0dXJlcyBhcmUgc3VwcG9ydGVkOgorICogPHVsPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy5pbWFnZXdyaXRlci5JbWFnZVdyaXRlckxvZ2dlciNpc1VzZURlZmF1bHRMb2dEaXJlY3RvcnkgPGVtPlVzZSBEZWZhdWx0IExvZyBEaXJlY3Rvcnk8L2VtPn08L2xpPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy5pbWFnZXdyaXRlci5JbWFnZVdyaXRlckxvZ2dlciNnZXREYXRhUGF0aCA8ZW0+RGF0YSBQYXRoPC9lbT59PC9saT4KKyAqIDwvdWw+CisgKiA8L3A+CisgKgorICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMuaW1hZ2V3cml0ZXIuSW1hZ2V3cml0ZXJQYWNrYWdlI2dldEltYWdlV3JpdGVyTG9nZ2VyKCkKKyAqIEBtb2RlbCBhYnN0cmFjdD0idHJ1ZSIKKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGludGVyZmFjZSBJbWFnZVdyaXRlckxvZ2dlciBleHRlbmRzIFN5bmNocm9ub3VzTG9nZ2VyIHsKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5Vc2UgRGVmYXVsdCBMb2cgRGlyZWN0b3J5PC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogVGhlIGRlZmF1bHQgdmFsdWUgaXMgPGNvZGU+InRydWUiPC9jb2RlPi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDxwPgorCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPlVzZSBEZWZhdWx0IExvZyBEaXJlY3Rvcnk8L2VtPicgYXR0cmlidXRlIGlzbid0IGNsZWFyLAorCSAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4KKwkgKiA8L3A+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+VXNlIERlZmF1bHQgTG9nIERpcmVjdG9yeTwvZW0+JyBhdHRyaWJ1dGUuCisJICogQHNlZSAjc2V0VXNlRGVmYXVsdExvZ0RpcmVjdG9yeShib29sZWFuKQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzLmltYWdld3JpdGVyLkltYWdld3JpdGVyUGFja2FnZSNnZXRJbWFnZVdyaXRlckxvZ2dlcl9Vc2VEZWZhdWx0TG9nRGlyZWN0b3J5KCkKKwkgKiBAbW9kZWwgZGVmYXVsdD0idHJ1ZSIKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJYm9vbGVhbiBpc1VzZURlZmF1bHRMb2dEaXJlY3RvcnkoKTsKKworCS8qKgorCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy5pbWFnZXdyaXRlci5JbWFnZVdyaXRlckxvZ2dlciNpc1VzZURlZmF1bHRMb2dEaXJlY3RvcnkgPGVtPlVzZSBEZWZhdWx0IExvZyBEaXJlY3Rvcnk8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPlVzZSBEZWZhdWx0IExvZyBEaXJlY3Rvcnk8L2VtPicgYXR0cmlidXRlLgorCSAqIEBzZWUgI2lzVXNlRGVmYXVsdExvZ0RpcmVjdG9yeSgpCisJICogQGdlbmVyYXRlZAorCSAqLworCXZvaWQgc2V0VXNlRGVmYXVsdExvZ0RpcmVjdG9yeShib29sZWFuIHZhbHVlKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPkRhdGEgUGF0aDwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPHA+CisJICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+RGF0YSBQYXRoPC9lbT4nIGF0dHJpYnV0ZSBpc24ndCBjbGVhciwKKwkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uCisJICogPC9wPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPkRhdGEgUGF0aDwvZW0+JyBhdHRyaWJ1dGUuCisJICogQHNlZSAjc2V0RGF0YVBhdGgoU3RyaW5nKQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzLmltYWdld3JpdGVyLkltYWdld3JpdGVyUGFja2FnZSNnZXRJbWFnZVdyaXRlckxvZ2dlcl9EYXRhUGF0aCgpCisJICogQG1vZGVsCisJICogQGdlbmVyYXRlZAorCSAqLworCVN0cmluZyBnZXREYXRhUGF0aCgpOworCisJLyoqCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzLmltYWdld3JpdGVyLkltYWdlV3JpdGVyTG9nZ2VyI2dldERhdGFQYXRoIDxlbT5EYXRhIFBhdGg8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPkRhdGEgUGF0aDwvZW0+JyBhdHRyaWJ1dGUuCisJICogQHNlZSAjZ2V0RGF0YVBhdGgoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwl2b2lkIHNldERhdGFQYXRoKFN0cmluZyB2YWx1ZSk7CisKK30gLy8gSW1hZ2VXcml0ZXJMb2dnZXIKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzLmltYWdld3JpdGVyL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2xvZ2dlcnMvaW1hZ2V3cml0ZXIvSW1hZ2V3cml0ZXJGYWN0b3J5LmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy5pbWFnZXdyaXRlci9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9sb2dnZXJzL2ltYWdld3JpdGVyL0ltYWdld3JpdGVyRmFjdG9yeS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY0NmU4NjEKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy5pbWFnZXdyaXRlci9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9sb2dnZXJzL2ltYWdld3JpdGVyL0ltYWdld3JpdGVyRmFjdG9yeS5qYXZhCkBAIC0wLDAgKzEsNTUgQEAKKy8qKgorICogPGNvcHlyaWdodD4KKyAqIDwvY29weXJpZ2h0PgorICoKKyAqICRJZCQKKyAqLworcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMuaW1hZ2V3cml0ZXI7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUZhY3Rvcnk7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIFRoZSA8Yj5GYWN0b3J5PC9iPiBmb3IgdGhlIG1vZGVsLgorICogSXQgcHJvdmlkZXMgYSBjcmVhdGUgbWV0aG9kIGZvciBlYWNoIG5vbi1hYnN0cmFjdCBjbGFzcyBvZiB0aGUgbW9kZWwuCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzLmltYWdld3JpdGVyLkltYWdld3JpdGVyUGFja2FnZQorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgaW50ZXJmYWNlIEltYWdld3JpdGVyRmFjdG9yeSBleHRlbmRzIEVGYWN0b3J5IHsKKwkvKioKKwkgKiBUaGUgc2luZ2xldG9uIGluc3RhbmNlIG9mIHRoZSBmYWN0b3J5LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUltYWdld3JpdGVyRmFjdG9yeSBlSU5TVEFOQ0UgPSBvcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMuaW1hZ2V3cml0ZXIuaW1wbC5JbWFnZXdyaXRlckZhY3RvcnlJbXBsLmluaXQoKTsKKworCS8qKgorCSAqIFJldHVybnMgYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+TWFwIFZpZXcgSW1hZ2UgV3JpdGVyIExvZ2dlcjwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+TWFwIFZpZXcgSW1hZ2UgV3JpdGVyIExvZ2dlcjwvZW0+Jy4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJTWFwVmlld0ltYWdlV3JpdGVyTG9nZ2VyIGNyZWF0ZU1hcFZpZXdJbWFnZVdyaXRlckxvZ2dlcigpOworCisJLyoqCisJICogUmV0dXJucyBhIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5FcXVpcmVjdGFuZ3VsYXIgTWFwIExvZ2dlcjwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+RXF1aXJlY3Rhbmd1bGFyIE1hcCBMb2dnZXI8L2VtPicuCisJICogQGdlbmVyYXRlZAorCSAqLworCUVxdWlyZWN0YW5ndWxhck1hcExvZ2dlciBjcmVhdGVFcXVpcmVjdGFuZ3VsYXJNYXBMb2dnZXIoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIHBhY2thZ2Ugc3VwcG9ydGVkIGJ5IHRoaXMgZmFjdG9yeS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIHBhY2thZ2Ugc3VwcG9ydGVkIGJ5IHRoaXMgZmFjdG9yeS4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJSW1hZ2V3cml0ZXJQYWNrYWdlIGdldEltYWdld3JpdGVyUGFja2FnZSgpOworCit9IC8vSW1hZ2V3cml0ZXJGYWN0b3J5CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy5pbWFnZXdyaXRlci9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9sb2dnZXJzL2ltYWdld3JpdGVyL0ltYWdld3JpdGVyUGFja2FnZS5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMuaW1hZ2V3cml0ZXIvc3JjL29yZy9lY2xpcHNlL3N0ZW0vbG9nZ2Vycy9pbWFnZXdyaXRlci9JbWFnZXdyaXRlclBhY2thZ2UuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYzdiZTlhCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMuaW1hZ2V3cml0ZXIvc3JjL29yZy9lY2xpcHNlL3N0ZW0vbG9nZ2Vycy9pbWFnZXdyaXRlci9JbWFnZXdyaXRlclBhY2thZ2UuamF2YQpAQCAtMCwwICsxLDk1NSBAQAorLyoqCisgKiA8Y29weXJpZ2h0PgorICogPC9jb3B5cmlnaHQ+CisgKgorICogJElkJAorICovCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy5pbWFnZXdyaXRlcjsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQXR0cmlidXRlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVEYXRhVHlwZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUVudW07CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVQYWNrYWdlOworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVSZWZlcmVuY2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzLlNpbXVsYXRpb25Mb2dnZXJQYWNrYWdlOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiBUaGUgPGI+UGFja2FnZTwvYj4gZm9yIHRoZSBtb2RlbC4KKyAqIEl0IGNvbnRhaW5zIGFjY2Vzc29ycyBmb3IgdGhlIG1ldGEgb2JqZWN0cyB0byByZXByZXNlbnQKKyAqIDx1bD4KKyAqICAgPGxpPmVhY2ggY2xhc3MsPC9saT4KKyAqICAgPGxpPmVhY2ggZmVhdHVyZSBvZiBlYWNoIGNsYXNzLDwvbGk+CisgKiAgIDxsaT5lYWNoIGVudW0sPC9saT4KKyAqICAgPGxpPmFuZCBlYWNoIGRhdGEgdHlwZTwvbGk+CisgKiA8L3VsPgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy5pbWFnZXdyaXRlci5JbWFnZXdyaXRlckZhY3RvcnkKKyAqIEBtb2RlbCBraW5kPSJwYWNrYWdlIgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgaW50ZXJmYWNlIEltYWdld3JpdGVyUGFja2FnZSBleHRlbmRzIEVQYWNrYWdlIHsKKwkvKioKKwkgKiBUaGUgcGFja2FnZSBuYW1lLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCVN0cmluZyBlTkFNRSA9ICJpbWFnZXdyaXRlciI7CisKKwkvKioKKwkgKiBUaGUgcGFja2FnZSBuYW1lc3BhY2UgVVJJLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCVN0cmluZyBlTlNfVVJJID0gImh0dHA6Ly9vcmcvZWNsaXBzZS9zdGVtL2xvZ2dlcnMvaW1hZ2V3cml0ZXIiOworCisJLyoqCisJICogVGhlIHBhY2thZ2UgbmFtZXNwYWNlIG5hbWUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJU3RyaW5nIGVOU19QUkVGSVggPSAib3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzLmltYWdld3JpdGVyLm1vZGVsIjsKKworCS8qKgorCSAqIFRoZSBzaW5nbGV0b24gaW5zdGFuY2Ugb2YgdGhlIHBhY2thZ2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJSW1hZ2V3cml0ZXJQYWNrYWdlIGVJTlNUQU5DRSA9IG9yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy5pbWFnZXdyaXRlci5pbXBsLkltYWdld3JpdGVyUGFja2FnZUltcGwuaW5pdCgpOworCisJLyoqCisJICogVGhlIG1ldGEgb2JqZWN0IGlkIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMuaW1hZ2V3cml0ZXIuaW1wbC5JbWFnZVdyaXRlckxvZ2dlckltcGwgPGVtPkltYWdlIFdyaXRlciBMb2dnZXI8L2VtPn0nIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMuaW1hZ2V3cml0ZXIuaW1wbC5JbWFnZVdyaXRlckxvZ2dlckltcGwKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy5pbWFnZXdyaXRlci5pbXBsLkltYWdld3JpdGVyUGFja2FnZUltcGwjZ2V0SW1hZ2VXcml0ZXJMb2dnZXIoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlpbnQgSU1BR0VfV1JJVEVSX0xPR0dFUiA9IDA7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VVJJPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgSU1BR0VfV1JJVEVSX0xPR0dFUl9fVVJJID0gU2ltdWxhdGlvbkxvZ2dlclBhY2thZ2UuU1lOQ0hST05PVVNfTE9HR0VSX19VUkk7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VHlwZSBVUkk8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBJTUFHRV9XUklURVJfTE9HR0VSX19UWVBFX1VSSSA9IFNpbXVsYXRpb25Mb2dnZXJQYWNrYWdlLlNZTkNIUk9OT1VTX0xPR0dFUl9fVFlQRV9VUkk7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RHVibGluIENvcmU8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBJTUFHRV9XUklURVJfTE9HR0VSX19EVUJMSU5fQ09SRSA9IFNpbXVsYXRpb25Mb2dnZXJQYWNrYWdlLlNZTkNIUk9OT1VTX0xPR0dFUl9fRFVCTElOX0NPUkU7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RW5hYmxlZDwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IElNQUdFX1dSSVRFUl9MT0dHRVJfX0VOQUJMRUQgPSBTaW11bGF0aW9uTG9nZ2VyUGFja2FnZS5TWU5DSFJPTk9VU19MT0dHRVJfX0VOQUJMRUQ7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VXNlIERlZmF1bHQgTG9nIERpcmVjdG9yeTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IElNQUdFX1dSSVRFUl9MT0dHRVJfX1VTRV9ERUZBVUxUX0xPR19ESVJFQ1RPUlkgPSBTaW11bGF0aW9uTG9nZ2VyUGFja2FnZS5TWU5DSFJPTk9VU19MT0dHRVJfRkVBVFVSRV9DT1VOVCArIDA7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RGF0YSBQYXRoPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgSU1BR0VfV1JJVEVSX0xPR0dFUl9fREFUQV9QQVRIID0gU2ltdWxhdGlvbkxvZ2dlclBhY2thZ2UuU1lOQ0hST05PVVNfTE9HR0VSX0ZFQVRVUkVfQ09VTlQgKyAxOworCisJLyoqCisJICogVGhlIG51bWJlciBvZiBzdHJ1Y3R1cmFsIGZlYXR1cmVzIG9mIHRoZSAnPGVtPkltYWdlIFdyaXRlciBMb2dnZXI8L2VtPicgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgSU1BR0VfV1JJVEVSX0xPR0dFUl9GRUFUVVJFX0NPVU5UID0gU2ltdWxhdGlvbkxvZ2dlclBhY2thZ2UuU1lOQ0hST05PVVNfTE9HR0VSX0ZFQVRVUkVfQ09VTlQgKyAyOworCisJLyoqCisJICogVGhlIG1ldGEgb2JqZWN0IGlkIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMuaW1hZ2V3cml0ZXIuaW1wbC5Qcm9qZWN0ZWRNYXBJbWFnZUxvZ2dlckltcGwgPGVtPlByb2plY3RlZCBNYXAgSW1hZ2UgTG9nZ2VyPC9lbT59JyBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzLmltYWdld3JpdGVyLmltcGwuUHJvamVjdGVkTWFwSW1hZ2VMb2dnZXJJbXBsCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMuaW1hZ2V3cml0ZXIuaW1wbC5JbWFnZXdyaXRlclBhY2thZ2VJbXBsI2dldFByb2plY3RlZE1hcEltYWdlTG9nZ2VyKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJaW50IFBST0pFQ1RFRF9NQVBfSU1BR0VfTE9HR0VSID0gMTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5VUkk8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBQUk9KRUNURURfTUFQX0lNQUdFX0xPR0dFUl9fVVJJID0gSU1BR0VfV1JJVEVSX0xPR0dFUl9fVVJJOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlR5cGUgVVJJPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgUFJPSkVDVEVEX01BUF9JTUFHRV9MT0dHRVJfX1RZUEVfVVJJID0gSU1BR0VfV1JJVEVSX0xPR0dFUl9fVFlQRV9VUkk7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RHVibGluIENvcmU8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBQUk9KRUNURURfTUFQX0lNQUdFX0xPR0dFUl9fRFVCTElOX0NPUkUgPSBJTUFHRV9XUklURVJfTE9HR0VSX19EVUJMSU5fQ09SRTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5FbmFibGVkPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgUFJPSkVDVEVEX01BUF9JTUFHRV9MT0dHRVJfX0VOQUJMRUQgPSBJTUFHRV9XUklURVJfTE9HR0VSX19FTkFCTEVEOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlVzZSBEZWZhdWx0IExvZyBEaXJlY3Rvcnk8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBQUk9KRUNURURfTUFQX0lNQUdFX0xPR0dFUl9fVVNFX0RFRkFVTFRfTE9HX0RJUkVDVE9SWSA9IElNQUdFX1dSSVRFUl9MT0dHRVJfX1VTRV9ERUZBVUxUX0xPR19ESVJFQ1RPUlk7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RGF0YSBQYXRoPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgUFJPSkVDVEVEX01BUF9JTUFHRV9MT0dHRVJfX0RBVEFfUEFUSCA9IElNQUdFX1dSSVRFUl9MT0dHRVJfX0RBVEFfUEFUSDsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5Vc2UgTG9nIFNjYWxpbmc8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBQUk9KRUNURURfTUFQX0lNQUdFX0xPR0dFUl9fVVNFX0xPR19TQ0FMSU5HID0gSU1BR0VfV1JJVEVSX0xPR0dFUl9GRUFUVVJFX0NPVU5UICsgMDsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5HYWluPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgUFJPSkVDVEVEX01BUF9JTUFHRV9MT0dHRVJfX0dBSU4gPSBJTUFHRV9XUklURVJfTE9HR0VSX0ZFQVRVUkVfQ09VTlQgKyAxOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkxvZyBBbGwgRGVjb3JhdG9yczwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFBST0pFQ1RFRF9NQVBfSU1BR0VfTE9HR0VSX19MT0dfQUxMX0RFQ09SQVRPUlMgPSBJTUFHRV9XUklURVJfTE9HR0VSX0ZFQVRVUkVfQ09VTlQgKyAyOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkNvbG9yIFByb3ZpZGVyPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgUFJPSkVDVEVEX01BUF9JTUFHRV9MT0dHRVJfX0NPTE9SX1BST1ZJREVSID0gSU1BR0VfV1JJVEVSX0xPR0dFUl9GRUFUVVJFX0NPVU5UICsgMzsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5EZWNvcmF0b3I8L2I+PC9lbT4nIHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBQUk9KRUNURURfTUFQX0lNQUdFX0xPR0dFUl9fREVDT1JBVE9SID0gSU1BR0VfV1JJVEVSX0xPR0dFUl9GRUFUVVJFX0NPVU5UICsgNDsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5EZWNvcmF0b3IgUHJvcGVydGllczwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFBST0pFQ1RFRF9NQVBfSU1BR0VfTE9HR0VSX19ERUNPUkFUT1JfUFJPUEVSVElFUyA9IElNQUdFX1dSSVRFUl9MT0dHRVJfRkVBVFVSRV9DT1VOVCArIDU7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+V2lkdGg8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBQUk9KRUNURURfTUFQX0lNQUdFX0xPR0dFUl9fV0lEVEggPSBJTUFHRV9XUklURVJfTE9HR0VSX0ZFQVRVUkVfQ09VTlQgKyA2OworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkhlaWdodDwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFBST0pFQ1RFRF9NQVBfSU1BR0VfTE9HR0VSX19IRUlHSFQgPSBJTUFHRV9XUklURVJfTE9HR0VSX0ZFQVRVUkVfQ09VTlQgKyA3OworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlByb2plY3Rpb248L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBQUk9KRUNURURfTUFQX0lNQUdFX0xPR0dFUl9fUFJPSkVDVElPTiA9IElNQUdFX1dSSVRFUl9MT0dHRVJfRkVBVFVSRV9DT1VOVCArIDg7CisKKwkvKioKKwkgKiBUaGUgbnVtYmVyIG9mIHN0cnVjdHVyYWwgZmVhdHVyZXMgb2YgdGhlICc8ZW0+UHJvamVjdGVkIE1hcCBJbWFnZSBMb2dnZXI8L2VtPicgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgUFJPSkVDVEVEX01BUF9JTUFHRV9MT0dHRVJfRkVBVFVSRV9DT1VOVCA9IElNQUdFX1dSSVRFUl9MT0dHRVJfRkVBVFVSRV9DT1VOVCArIDk7CisKKwkvKioKKwkgKiBUaGUgbWV0YSBvYmplY3QgaWQgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy5pbWFnZXdyaXRlci5pbXBsLk1hcFZpZXdJbWFnZVdyaXRlckxvZ2dlckltcGwgPGVtPk1hcCBWaWV3IEltYWdlIFdyaXRlciBMb2dnZXI8L2VtPn0nIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMuaW1hZ2V3cml0ZXIuaW1wbC5NYXBWaWV3SW1hZ2VXcml0ZXJMb2dnZXJJbXBsCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMuaW1hZ2V3cml0ZXIuaW1wbC5JbWFnZXdyaXRlclBhY2thZ2VJbXBsI2dldE1hcFZpZXdJbWFnZVdyaXRlckxvZ2dlcigpCisJICogQGdlbmVyYXRlZAorCSAqLworCWludCBNQVBfVklFV19JTUFHRV9XUklURVJfTE9HR0VSID0gMjsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5VUkk8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBNQVBfVklFV19JTUFHRV9XUklURVJfTE9HR0VSX19VUkkgPSBJTUFHRV9XUklURVJfTE9HR0VSX19VUkk7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VHlwZSBVUkk8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBNQVBfVklFV19JTUFHRV9XUklURVJfTE9HR0VSX19UWVBFX1VSSSA9IElNQUdFX1dSSVRFUl9MT0dHRVJfX1RZUEVfVVJJOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkR1YmxpbiBDb3JlPC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgTUFQX1ZJRVdfSU1BR0VfV1JJVEVSX0xPR0dFUl9fRFVCTElOX0NPUkUgPSBJTUFHRV9XUklURVJfTE9HR0VSX19EVUJMSU5fQ09SRTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5FbmFibGVkPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgTUFQX1ZJRVdfSU1BR0VfV1JJVEVSX0xPR0dFUl9fRU5BQkxFRCA9IElNQUdFX1dSSVRFUl9MT0dHRVJfX0VOQUJMRUQ7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VXNlIERlZmF1bHQgTG9nIERpcmVjdG9yeTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IE1BUF9WSUVXX0lNQUdFX1dSSVRFUl9MT0dHRVJfX1VTRV9ERUZBVUxUX0xPR19ESVJFQ1RPUlkgPSBJTUFHRV9XUklURVJfTE9HR0VSX19VU0VfREVGQVVMVF9MT0dfRElSRUNUT1JZOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkRhdGEgUGF0aDwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IE1BUF9WSUVXX0lNQUdFX1dSSVRFUl9MT0dHRVJfX0RBVEFfUEFUSCA9IElNQUdFX1dSSVRFUl9MT0dHRVJfX0RBVEFfUEFUSDsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5PcGVuIE1hcCBWaWV3PC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgTUFQX1ZJRVdfSU1BR0VfV1JJVEVSX0xPR0dFUl9fT1BFTl9NQVBfVklFVyA9IElNQUdFX1dSSVRFUl9MT0dHRVJfRkVBVFVSRV9DT1VOVCArIDA7CisKKwkvKioKKwkgKiBUaGUgbnVtYmVyIG9mIHN0cnVjdHVyYWwgZmVhdHVyZXMgb2YgdGhlICc8ZW0+TWFwIFZpZXcgSW1hZ2UgV3JpdGVyIExvZ2dlcjwvZW0+JyBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBNQVBfVklFV19JTUFHRV9XUklURVJfTE9HR0VSX0ZFQVRVUkVfQ09VTlQgPSBJTUFHRV9XUklURVJfTE9HR0VSX0ZFQVRVUkVfQ09VTlQgKyAxOworCisJLyoqCisJICogVGhlIG1ldGEgb2JqZWN0IGlkIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMuaW1hZ2V3cml0ZXIuaW1wbC5FcXVpcmVjdGFuZ3VsYXJNYXBMb2dnZXJJbXBsIDxlbT5FcXVpcmVjdGFuZ3VsYXIgTWFwIExvZ2dlcjwvZW0+fScgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy5pbWFnZXdyaXRlci5pbXBsLkVxdWlyZWN0YW5ndWxhck1hcExvZ2dlckltcGwKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy5pbWFnZXdyaXRlci5pbXBsLkltYWdld3JpdGVyUGFja2FnZUltcGwjZ2V0RXF1aXJlY3Rhbmd1bGFyTWFwTG9nZ2VyKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJaW50IEVRVUlSRUNUQU5HVUxBUl9NQVBfTE9HR0VSID0gMzsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5VUkk8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBFUVVJUkVDVEFOR1VMQVJfTUFQX0xPR0dFUl9fVVJJID0gUFJPSkVDVEVEX01BUF9JTUFHRV9MT0dHRVJfX1VSSTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5UeXBlIFVSSTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IEVRVUlSRUNUQU5HVUxBUl9NQVBfTE9HR0VSX19UWVBFX1VSSSA9IFBST0pFQ1RFRF9NQVBfSU1BR0VfTE9HR0VSX19UWVBFX1VSSTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5EdWJsaW4gQ29yZTwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IEVRVUlSRUNUQU5HVUxBUl9NQVBfTE9HR0VSX19EVUJMSU5fQ09SRSA9IFBST0pFQ1RFRF9NQVBfSU1BR0VfTE9HR0VSX19EVUJMSU5fQ09SRTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5FbmFibGVkPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgRVFVSVJFQ1RBTkdVTEFSX01BUF9MT0dHRVJfX0VOQUJMRUQgPSBQUk9KRUNURURfTUFQX0lNQUdFX0xPR0dFUl9fRU5BQkxFRDsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5Vc2UgRGVmYXVsdCBMb2cgRGlyZWN0b3J5PC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgRVFVSVJFQ1RBTkdVTEFSX01BUF9MT0dHRVJfX1VTRV9ERUZBVUxUX0xPR19ESVJFQ1RPUlkgPSBQUk9KRUNURURfTUFQX0lNQUdFX0xPR0dFUl9fVVNFX0RFRkFVTFRfTE9HX0RJUkVDVE9SWTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5EYXRhIFBhdGg8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBFUVVJUkVDVEFOR1VMQVJfTUFQX0xPR0dFUl9fREFUQV9QQVRIID0gUFJPSkVDVEVEX01BUF9JTUFHRV9MT0dHRVJfX0RBVEFfUEFUSDsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5Vc2UgTG9nIFNjYWxpbmc8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBFUVVJUkVDVEFOR1VMQVJfTUFQX0xPR0dFUl9fVVNFX0xPR19TQ0FMSU5HID0gUFJPSkVDVEVEX01BUF9JTUFHRV9MT0dHRVJfX1VTRV9MT0dfU0NBTElORzsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5HYWluPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgRVFVSVJFQ1RBTkdVTEFSX01BUF9MT0dHRVJfX0dBSU4gPSBQUk9KRUNURURfTUFQX0lNQUdFX0xPR0dFUl9fR0FJTjsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5Mb2cgQWxsIERlY29yYXRvcnM8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBFUVVJUkVDVEFOR1VMQVJfTUFQX0xPR0dFUl9fTE9HX0FMTF9ERUNPUkFUT1JTID0gUFJPSkVDVEVEX01BUF9JTUFHRV9MT0dHRVJfX0xPR19BTExfREVDT1JBVE9SUzsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5Db2xvciBQcm92aWRlcjwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IEVRVUlSRUNUQU5HVUxBUl9NQVBfTE9HR0VSX19DT0xPUl9QUk9WSURFUiA9IFBST0pFQ1RFRF9NQVBfSU1BR0VfTE9HR0VSX19DT0xPUl9QUk9WSURFUjsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5EZWNvcmF0b3I8L2I+PC9lbT4nIHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBFUVVJUkVDVEFOR1VMQVJfTUFQX0xPR0dFUl9fREVDT1JBVE9SID0gUFJPSkVDVEVEX01BUF9JTUFHRV9MT0dHRVJfX0RFQ09SQVRPUjsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5EZWNvcmF0b3IgUHJvcGVydGllczwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IEVRVUlSRUNUQU5HVUxBUl9NQVBfTE9HR0VSX19ERUNPUkFUT1JfUFJPUEVSVElFUyA9IFBST0pFQ1RFRF9NQVBfSU1BR0VfTE9HR0VSX19ERUNPUkFUT1JfUFJPUEVSVElFUzsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5XaWR0aDwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IEVRVUlSRUNUQU5HVUxBUl9NQVBfTE9HR0VSX19XSURUSCA9IFBST0pFQ1RFRF9NQVBfSU1BR0VfTE9HR0VSX19XSURUSDsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5IZWlnaHQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBFUVVJUkVDVEFOR1VMQVJfTUFQX0xPR0dFUl9fSEVJR0hUID0gUFJPSkVDVEVEX01BUF9JTUFHRV9MT0dHRVJfX0hFSUdIVDsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5Qcm9qZWN0aW9uPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgRVFVSVJFQ1RBTkdVTEFSX01BUF9MT0dHRVJfX1BST0pFQ1RJT04gPSBQUk9KRUNURURfTUFQX0lNQUdFX0xPR0dFUl9fUFJPSkVDVElPTjsKKworCS8qKgorCSAqIFRoZSBudW1iZXIgb2Ygc3RydWN0dXJhbCBmZWF0dXJlcyBvZiB0aGUgJzxlbT5FcXVpcmVjdGFuZ3VsYXIgTWFwIExvZ2dlcjwvZW0+JyBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBFUVVJUkVDVEFOR1VMQVJfTUFQX0xPR0dFUl9GRUFUVVJFX0NPVU5UID0gUFJPSkVDVEVEX01BUF9JTUFHRV9MT0dHRVJfRkVBVFVSRV9DT1VOVCArIDA7CisKKwkvKioKKwkgKiBUaGUgbWV0YSBvYmplY3QgaWQgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy5pbWFnZXdyaXRlci5NQVBfUFJPSkVDVElPTlMgPGVtPk1BUCBQUk9KRUNUSU9OUzwvZW0+fScgZW51bS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzLmltYWdld3JpdGVyLk1BUF9QUk9KRUNUSU9OUworCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzLmltYWdld3JpdGVyLmltcGwuSW1hZ2V3cml0ZXJQYWNrYWdlSW1wbCNnZXRNQVBfUFJPSkVDVElPTlMoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlpbnQgTUFQX1BST0pFQ1RJT05TID0gNDsKKworCisJLyoqCisJICogVGhlIG1ldGEgb2JqZWN0IGlkIGZvciB0aGUgJzxlbT5JTWFwIFByb2plY3Rpb248L2VtPicgZGF0YSB0eXBlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMuaW1hZ2V3cml0ZXIubG9nZ2VyLnByb2plY3Rpb25zLklNYXBQcm9qZWN0aW9uCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMuaW1hZ2V3cml0ZXIuaW1wbC5JbWFnZXdyaXRlclBhY2thZ2VJbXBsI2dldElNYXBQcm9qZWN0aW9uKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJaW50IElNQVBfUFJPSkVDVElPTiA9IDU7CisKKwkvKioKKwkgKiBUaGUgbWV0YSBvYmplY3QgaWQgZm9yIHRoZSAnPGVtPkNvbG9yIFByb3ZpZGVyPC9lbT4nIGRhdGEgdHlwZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS51aS5hZGFwdGVycy5jb2xvci5Db2xvclByb3ZpZGVyCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMuaW1hZ2V3cml0ZXIuaW1wbC5JbWFnZXdyaXRlclBhY2thZ2VJbXBsI2dldENvbG9yUHJvdmlkZXIoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlpbnQgQ09MT1JfUFJPVklERVIgPSA2OworCisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMuaW1hZ2V3cml0ZXIuSW1hZ2VXcml0ZXJMb2dnZXIgPGVtPkltYWdlIFdyaXRlciBMb2dnZXI8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICc8ZW0+SW1hZ2UgV3JpdGVyIExvZ2dlcjwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy5pbWFnZXdyaXRlci5JbWFnZVdyaXRlckxvZ2dlcgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQ2xhc3MgZ2V0SW1hZ2VXcml0ZXJMb2dnZXIoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzLmltYWdld3JpdGVyLkltYWdlV3JpdGVyTG9nZ2VyI2lzVXNlRGVmYXVsdExvZ0RpcmVjdG9yeSA8ZW0+VXNlIERlZmF1bHQgTG9nIERpcmVjdG9yeTwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPGVtPlVzZSBEZWZhdWx0IExvZyBEaXJlY3Rvcnk8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMuaW1hZ2V3cml0ZXIuSW1hZ2VXcml0ZXJMb2dnZXIjaXNVc2VEZWZhdWx0TG9nRGlyZWN0b3J5KCkKKwkgKiBAc2VlICNnZXRJbWFnZVdyaXRlckxvZ2dlcigpCisJICogQGdlbmVyYXRlZAorCSAqLworCUVBdHRyaWJ1dGUgZ2V0SW1hZ2VXcml0ZXJMb2dnZXJfVXNlRGVmYXVsdExvZ0RpcmVjdG9yeSgpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMuaW1hZ2V3cml0ZXIuSW1hZ2VXcml0ZXJMb2dnZXIjZ2V0RGF0YVBhdGggPGVtPkRhdGEgUGF0aDwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPGVtPkRhdGEgUGF0aDwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy5pbWFnZXdyaXRlci5JbWFnZVdyaXRlckxvZ2dlciNnZXREYXRhUGF0aCgpCisJICogQHNlZSAjZ2V0SW1hZ2VXcml0ZXJMb2dnZXIoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQXR0cmlidXRlIGdldEltYWdlV3JpdGVyTG9nZ2VyX0RhdGFQYXRoKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMuaW1hZ2V3cml0ZXIuUHJvamVjdGVkTWFwSW1hZ2VMb2dnZXIgPGVtPlByb2plY3RlZCBNYXAgSW1hZ2UgTG9nZ2VyPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAnPGVtPlByb2plY3RlZCBNYXAgSW1hZ2UgTG9nZ2VyPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzLmltYWdld3JpdGVyLlByb2plY3RlZE1hcEltYWdlTG9nZ2VyCisJICogQGdlbmVyYXRlZAorCSAqLworCUVDbGFzcyBnZXRQcm9qZWN0ZWRNYXBJbWFnZUxvZ2dlcigpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMuaW1hZ2V3cml0ZXIuUHJvamVjdGVkTWFwSW1hZ2VMb2dnZXIjaXNVc2VMb2dTY2FsaW5nIDxlbT5Vc2UgTG9nIFNjYWxpbmc8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxlbT5Vc2UgTG9nIFNjYWxpbmc8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMuaW1hZ2V3cml0ZXIuUHJvamVjdGVkTWFwSW1hZ2VMb2dnZXIjaXNVc2VMb2dTY2FsaW5nKCkKKwkgKiBAc2VlICNnZXRQcm9qZWN0ZWRNYXBJbWFnZUxvZ2dlcigpCisJICogQGdlbmVyYXRlZAorCSAqLworCUVBdHRyaWJ1dGUgZ2V0UHJvamVjdGVkTWFwSW1hZ2VMb2dnZXJfVXNlTG9nU2NhbGluZygpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMuaW1hZ2V3cml0ZXIuUHJvamVjdGVkTWFwSW1hZ2VMb2dnZXIjZ2V0R2FpbiA8ZW0+R2FpbjwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPGVtPkdhaW48L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMuaW1hZ2V3cml0ZXIuUHJvamVjdGVkTWFwSW1hZ2VMb2dnZXIjZ2V0R2FpbigpCisJICogQHNlZSAjZ2V0UHJvamVjdGVkTWFwSW1hZ2VMb2dnZXIoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQXR0cmlidXRlIGdldFByb2plY3RlZE1hcEltYWdlTG9nZ2VyX0dhaW4oKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzLmltYWdld3JpdGVyLlByb2plY3RlZE1hcEltYWdlTG9nZ2VyI2lzTG9nQWxsRGVjb3JhdG9ycyA8ZW0+TG9nIEFsbCBEZWNvcmF0b3JzPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+TG9nIEFsbCBEZWNvcmF0b3JzPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzLmltYWdld3JpdGVyLlByb2plY3RlZE1hcEltYWdlTG9nZ2VyI2lzTG9nQWxsRGVjb3JhdG9ycygpCisJICogQHNlZSAjZ2V0UHJvamVjdGVkTWFwSW1hZ2VMb2dnZXIoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQXR0cmlidXRlIGdldFByb2plY3RlZE1hcEltYWdlTG9nZ2VyX0xvZ0FsbERlY29yYXRvcnMoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzLmltYWdld3JpdGVyLlByb2plY3RlZE1hcEltYWdlTG9nZ2VyI2dldENvbG9yUHJvdmlkZXIgPGVtPkNvbG9yIFByb3ZpZGVyPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+Q29sb3IgUHJvdmlkZXI8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMuaW1hZ2V3cml0ZXIuUHJvamVjdGVkTWFwSW1hZ2VMb2dnZXIjZ2V0Q29sb3JQcm92aWRlcigpCisJICogQHNlZSAjZ2V0UHJvamVjdGVkTWFwSW1hZ2VMb2dnZXIoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQXR0cmlidXRlIGdldFByb2plY3RlZE1hcEltYWdlTG9nZ2VyX0NvbG9yUHJvdmlkZXIoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgcmVmZXJlbmNlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzLmltYWdld3JpdGVyLlByb2plY3RlZE1hcEltYWdlTG9nZ2VyI2dldERlY29yYXRvciA8ZW0+RGVjb3JhdG9yPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgcmVmZXJlbmNlICc8ZW0+RGVjb3JhdG9yPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzLmltYWdld3JpdGVyLlByb2plY3RlZE1hcEltYWdlTG9nZ2VyI2dldERlY29yYXRvcigpCisJICogQHNlZSAjZ2V0UHJvamVjdGVkTWFwSW1hZ2VMb2dnZXIoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFUmVmZXJlbmNlIGdldFByb2plY3RlZE1hcEltYWdlTG9nZ2VyX0RlY29yYXRvcigpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMuaW1hZ2V3cml0ZXIuUHJvamVjdGVkTWFwSW1hZ2VMb2dnZXIjZ2V0RGVjb3JhdG9yUHJvcGVydGllcyA8ZW0+RGVjb3JhdG9yIFByb3BlcnRpZXM8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxlbT5EZWNvcmF0b3IgUHJvcGVydGllczwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy5pbWFnZXdyaXRlci5Qcm9qZWN0ZWRNYXBJbWFnZUxvZ2dlciNnZXREZWNvcmF0b3JQcm9wZXJ0aWVzKCkKKwkgKiBAc2VlICNnZXRQcm9qZWN0ZWRNYXBJbWFnZUxvZ2dlcigpCisJICogQGdlbmVyYXRlZAorCSAqLworCUVBdHRyaWJ1dGUgZ2V0UHJvamVjdGVkTWFwSW1hZ2VMb2dnZXJfRGVjb3JhdG9yUHJvcGVydGllcygpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMuaW1hZ2V3cml0ZXIuUHJvamVjdGVkTWFwSW1hZ2VMb2dnZXIjZ2V0V2lkdGggPGVtPldpZHRoPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+V2lkdGg8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMuaW1hZ2V3cml0ZXIuUHJvamVjdGVkTWFwSW1hZ2VMb2dnZXIjZ2V0V2lkdGgoKQorCSAqIEBzZWUgI2dldFByb2plY3RlZE1hcEltYWdlTG9nZ2VyKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUF0dHJpYnV0ZSBnZXRQcm9qZWN0ZWRNYXBJbWFnZUxvZ2dlcl9XaWR0aCgpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMuaW1hZ2V3cml0ZXIuUHJvamVjdGVkTWFwSW1hZ2VMb2dnZXIjZ2V0SGVpZ2h0IDxlbT5IZWlnaHQ8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxlbT5IZWlnaHQ8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMuaW1hZ2V3cml0ZXIuUHJvamVjdGVkTWFwSW1hZ2VMb2dnZXIjZ2V0SGVpZ2h0KCkKKwkgKiBAc2VlICNnZXRQcm9qZWN0ZWRNYXBJbWFnZUxvZ2dlcigpCisJICogQGdlbmVyYXRlZAorCSAqLworCUVBdHRyaWJ1dGUgZ2V0UHJvamVjdGVkTWFwSW1hZ2VMb2dnZXJfSGVpZ2h0KCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy5pbWFnZXdyaXRlci5Qcm9qZWN0ZWRNYXBJbWFnZUxvZ2dlciNnZXRQcm9qZWN0aW9uIDxlbT5Qcm9qZWN0aW9uPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+UHJvamVjdGlvbjwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy5pbWFnZXdyaXRlci5Qcm9qZWN0ZWRNYXBJbWFnZUxvZ2dlciNnZXRQcm9qZWN0aW9uKCkKKwkgKiBAc2VlICNnZXRQcm9qZWN0ZWRNYXBJbWFnZUxvZ2dlcigpCisJICogQGdlbmVyYXRlZAorCSAqLworCUVBdHRyaWJ1dGUgZ2V0UHJvamVjdGVkTWFwSW1hZ2VMb2dnZXJfUHJvamVjdGlvbigpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzLmltYWdld3JpdGVyLk1hcFZpZXdJbWFnZVdyaXRlckxvZ2dlciA8ZW0+TWFwIFZpZXcgSW1hZ2UgV3JpdGVyIExvZ2dlcjwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJzxlbT5NYXAgVmlldyBJbWFnZSBXcml0ZXIgTG9nZ2VyPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzLmltYWdld3JpdGVyLk1hcFZpZXdJbWFnZVdyaXRlckxvZ2dlcgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQ2xhc3MgZ2V0TWFwVmlld0ltYWdlV3JpdGVyTG9nZ2VyKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy5pbWFnZXdyaXRlci5NYXBWaWV3SW1hZ2VXcml0ZXJMb2dnZXIjaXNPcGVuTWFwVmlldyA8ZW0+T3BlbiBNYXAgVmlldzwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPGVtPk9wZW4gTWFwIFZpZXc8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMuaW1hZ2V3cml0ZXIuTWFwVmlld0ltYWdlV3JpdGVyTG9nZ2VyI2lzT3Blbk1hcFZpZXcoKQorCSAqIEBzZWUgI2dldE1hcFZpZXdJbWFnZVdyaXRlckxvZ2dlcigpCisJICogQGdlbmVyYXRlZAorCSAqLworCUVBdHRyaWJ1dGUgZ2V0TWFwVmlld0ltYWdlV3JpdGVyTG9nZ2VyX09wZW5NYXBWaWV3KCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMuaW1hZ2V3cml0ZXIuRXF1aXJlY3Rhbmd1bGFyTWFwTG9nZ2VyIDxlbT5FcXVpcmVjdGFuZ3VsYXIgTWFwIExvZ2dlcjwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJzxlbT5FcXVpcmVjdGFuZ3VsYXIgTWFwIExvZ2dlcjwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy5pbWFnZXdyaXRlci5FcXVpcmVjdGFuZ3VsYXJNYXBMb2dnZXIKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUNsYXNzIGdldEVxdWlyZWN0YW5ndWxhck1hcExvZ2dlcigpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIGVudW0gJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMuaW1hZ2V3cml0ZXIuTUFQX1BST0pFQ1RJT05TIDxlbT5NQVAgUFJPSkVDVElPTlM8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIGVudW0gJzxlbT5NQVAgUFJPSkVDVElPTlM8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMuaW1hZ2V3cml0ZXIuTUFQX1BST0pFQ1RJT05TCisJICogQGdlbmVyYXRlZAorCSAqLworCUVFbnVtIGdldE1BUF9QUk9KRUNUSU9OUygpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIGRhdGEgdHlwZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy5pbWFnZXdyaXRlci5sb2dnZXIucHJvamVjdGlvbnMuSU1hcFByb2plY3Rpb24gPGVtPklNYXAgUHJvamVjdGlvbjwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgZGF0YSB0eXBlICc8ZW0+SU1hcCBQcm9qZWN0aW9uPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzLmltYWdld3JpdGVyLmxvZ2dlci5wcm9qZWN0aW9ucy5JTWFwUHJvamVjdGlvbgorCSAqIEBtb2RlbCBpbnN0YW5jZUNsYXNzPSJvcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMuaW1hZ2V3cml0ZXIubG9nZ2VyLnByb2plY3Rpb25zLklNYXBQcm9qZWN0aW9uIgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFRGF0YVR5cGUgZ2V0SU1hcFByb2plY3Rpb24oKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciBkYXRhIHR5cGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLnVpLmFkYXB0ZXJzLmNvbG9yLkNvbG9yUHJvdmlkZXIgPGVtPkNvbG9yIFByb3ZpZGVyPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciBkYXRhIHR5cGUgJzxlbT5Db2xvciBQcm92aWRlcjwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0udWkuYWRhcHRlcnMuY29sb3IuQ29sb3JQcm92aWRlcgorCSAqIEBtb2RlbCBpbnN0YW5jZUNsYXNzPSJvcmcuZWNsaXBzZS5zdGVtLnVpLmFkYXB0ZXJzLmNvbG9yLkNvbG9yUHJvdmlkZXIiCisJICogQGdlbmVyYXRlZAorCSAqLworCUVEYXRhVHlwZSBnZXRDb2xvclByb3ZpZGVyKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBmYWN0b3J5IHRoYXQgY3JlYXRlcyB0aGUgaW5zdGFuY2VzIG9mIHRoZSBtb2RlbC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIGZhY3RvcnkgdGhhdCBjcmVhdGVzIHRoZSBpbnN0YW5jZXMgb2YgdGhlIG1vZGVsLgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlJbWFnZXdyaXRlckZhY3RvcnkgZ2V0SW1hZ2V3cml0ZXJGYWN0b3J5KCk7CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIERlZmluZXMgbGl0ZXJhbHMgZm9yIHRoZSBtZXRhIG9iamVjdHMgdGhhdCByZXByZXNlbnQKKwkgKiA8dWw+CisJICogICA8bGk+ZWFjaCBjbGFzcyw8L2xpPgorCSAqICAgPGxpPmVhY2ggZmVhdHVyZSBvZiBlYWNoIGNsYXNzLDwvbGk+CisJICogICA8bGk+ZWFjaCBlbnVtLDwvbGk+CisJICogICA8bGk+YW5kIGVhY2ggZGF0YSB0eXBlPC9saT4KKwkgKiA8L3VsPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlpbnRlcmZhY2UgTGl0ZXJhbHMgeworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy5pbWFnZXdyaXRlci5pbXBsLkltYWdlV3JpdGVyTG9nZ2VySW1wbCA8ZW0+SW1hZ2UgV3JpdGVyIExvZ2dlcjwvZW0+fScgY2xhc3MuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy5pbWFnZXdyaXRlci5pbXBsLkltYWdlV3JpdGVyTG9nZ2VySW1wbAorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy5pbWFnZXdyaXRlci5pbXBsLkltYWdld3JpdGVyUGFja2FnZUltcGwjZ2V0SW1hZ2VXcml0ZXJMb2dnZXIoKQorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQ2xhc3MgSU1BR0VfV1JJVEVSX0xPR0dFUiA9IGVJTlNUQU5DRS5nZXRJbWFnZVdyaXRlckxvZ2dlcigpOworCisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+VXNlIERlZmF1bHQgTG9nIERpcmVjdG9yeTwvYj48L2VtPicgYXR0cmlidXRlIGZlYXR1cmUuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQXR0cmlidXRlIElNQUdFX1dSSVRFUl9MT0dHRVJfX1VTRV9ERUZBVUxUX0xPR19ESVJFQ1RPUlkgPSBlSU5TVEFOQ0UuZ2V0SW1hZ2VXcml0ZXJMb2dnZXJfVXNlRGVmYXVsdExvZ0RpcmVjdG9yeSgpOworCisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+RGF0YSBQYXRoPC9iPjwvZW0+JyBhdHRyaWJ1dGUgZmVhdHVyZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVBdHRyaWJ1dGUgSU1BR0VfV1JJVEVSX0xPR0dFUl9fREFUQV9QQVRIID0gZUlOU1RBTkNFLmdldEltYWdlV3JpdGVyTG9nZ2VyX0RhdGFQYXRoKCk7CisKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMuaW1hZ2V3cml0ZXIuaW1wbC5Qcm9qZWN0ZWRNYXBJbWFnZUxvZ2dlckltcGwgPGVtPlByb2plY3RlZCBNYXAgSW1hZ2UgTG9nZ2VyPC9lbT59JyBjbGFzcy4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzLmltYWdld3JpdGVyLmltcGwuUHJvamVjdGVkTWFwSW1hZ2VMb2dnZXJJbXBsCisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzLmltYWdld3JpdGVyLmltcGwuSW1hZ2V3cml0ZXJQYWNrYWdlSW1wbCNnZXRQcm9qZWN0ZWRNYXBJbWFnZUxvZ2dlcigpCisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVDbGFzcyBQUk9KRUNURURfTUFQX0lNQUdFX0xPR0dFUiA9IGVJTlNUQU5DRS5nZXRQcm9qZWN0ZWRNYXBJbWFnZUxvZ2dlcigpOworCisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+VXNlIExvZyBTY2FsaW5nPC9iPjwvZW0+JyBhdHRyaWJ1dGUgZmVhdHVyZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVBdHRyaWJ1dGUgUFJPSkVDVEVEX01BUF9JTUFHRV9MT0dHRVJfX1VTRV9MT0dfU0NBTElORyA9IGVJTlNUQU5DRS5nZXRQcm9qZWN0ZWRNYXBJbWFnZUxvZ2dlcl9Vc2VMb2dTY2FsaW5nKCk7CisKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5HYWluPC9iPjwvZW0+JyBhdHRyaWJ1dGUgZmVhdHVyZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVBdHRyaWJ1dGUgUFJPSkVDVEVEX01BUF9JTUFHRV9MT0dHRVJfX0dBSU4gPSBlSU5TVEFOQ0UuZ2V0UHJvamVjdGVkTWFwSW1hZ2VMb2dnZXJfR2FpbigpOworCisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+TG9nIEFsbCBEZWNvcmF0b3JzPC9iPjwvZW0+JyBhdHRyaWJ1dGUgZmVhdHVyZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVBdHRyaWJ1dGUgUFJPSkVDVEVEX01BUF9JTUFHRV9MT0dHRVJfX0xPR19BTExfREVDT1JBVE9SUyA9IGVJTlNUQU5DRS5nZXRQcm9qZWN0ZWRNYXBJbWFnZUxvZ2dlcl9Mb2dBbGxEZWNvcmF0b3JzKCk7CisKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5Db2xvciBQcm92aWRlcjwvYj48L2VtPicgYXR0cmlidXRlIGZlYXR1cmUuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQXR0cmlidXRlIFBST0pFQ1RFRF9NQVBfSU1BR0VfTE9HR0VSX19DT0xPUl9QUk9WSURFUiA9IGVJTlNUQU5DRS5nZXRQcm9qZWN0ZWRNYXBJbWFnZUxvZ2dlcl9Db2xvclByb3ZpZGVyKCk7CisKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5EZWNvcmF0b3I8L2I+PC9lbT4nIHJlZmVyZW5jZSBmZWF0dXJlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRVJlZmVyZW5jZSBQUk9KRUNURURfTUFQX0lNQUdFX0xPR0dFUl9fREVDT1JBVE9SID0gZUlOU1RBTkNFLmdldFByb2plY3RlZE1hcEltYWdlTG9nZ2VyX0RlY29yYXRvcigpOworCisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+RGVjb3JhdG9yIFByb3BlcnRpZXM8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUF0dHJpYnV0ZSBQUk9KRUNURURfTUFQX0lNQUdFX0xPR0dFUl9fREVDT1JBVE9SX1BST1BFUlRJRVMgPSBlSU5TVEFOQ0UuZ2V0UHJvamVjdGVkTWFwSW1hZ2VMb2dnZXJfRGVjb3JhdG9yUHJvcGVydGllcygpOworCisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+V2lkdGg8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUF0dHJpYnV0ZSBQUk9KRUNURURfTUFQX0lNQUdFX0xPR0dFUl9fV0lEVEggPSBlSU5TVEFOQ0UuZ2V0UHJvamVjdGVkTWFwSW1hZ2VMb2dnZXJfV2lkdGgoKTsKKworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPkhlaWdodDwvYj48L2VtPicgYXR0cmlidXRlIGZlYXR1cmUuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQXR0cmlidXRlIFBST0pFQ1RFRF9NQVBfSU1BR0VfTE9HR0VSX19IRUlHSFQgPSBlSU5TVEFOQ0UuZ2V0UHJvamVjdGVkTWFwSW1hZ2VMb2dnZXJfSGVpZ2h0KCk7CisKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5Qcm9qZWN0aW9uPC9iPjwvZW0+JyBhdHRyaWJ1dGUgZmVhdHVyZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVBdHRyaWJ1dGUgUFJPSkVDVEVEX01BUF9JTUFHRV9MT0dHRVJfX1BST0pFQ1RJT04gPSBlSU5TVEFOQ0UuZ2V0UHJvamVjdGVkTWFwSW1hZ2VMb2dnZXJfUHJvamVjdGlvbigpOworCisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzLmltYWdld3JpdGVyLmltcGwuTWFwVmlld0ltYWdlV3JpdGVyTG9nZ2VySW1wbCA8ZW0+TWFwIFZpZXcgSW1hZ2UgV3JpdGVyIExvZ2dlcjwvZW0+fScgY2xhc3MuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy5pbWFnZXdyaXRlci5pbXBsLk1hcFZpZXdJbWFnZVdyaXRlckxvZ2dlckltcGwKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMuaW1hZ2V3cml0ZXIuaW1wbC5JbWFnZXdyaXRlclBhY2thZ2VJbXBsI2dldE1hcFZpZXdJbWFnZVdyaXRlckxvZ2dlcigpCisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVDbGFzcyBNQVBfVklFV19JTUFHRV9XUklURVJfTE9HR0VSID0gZUlOU1RBTkNFLmdldE1hcFZpZXdJbWFnZVdyaXRlckxvZ2dlcigpOworCisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+T3BlbiBNYXAgVmlldzwvYj48L2VtPicgYXR0cmlidXRlIGZlYXR1cmUuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQXR0cmlidXRlIE1BUF9WSUVXX0lNQUdFX1dSSVRFUl9MT0dHRVJfX09QRU5fTUFQX1ZJRVcgPSBlSU5TVEFOQ0UuZ2V0TWFwVmlld0ltYWdlV3JpdGVyTG9nZ2VyX09wZW5NYXBWaWV3KCk7CisKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMuaW1hZ2V3cml0ZXIuaW1wbC5FcXVpcmVjdGFuZ3VsYXJNYXBMb2dnZXJJbXBsIDxlbT5FcXVpcmVjdGFuZ3VsYXIgTWFwIExvZ2dlcjwvZW0+fScgY2xhc3MuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy5pbWFnZXdyaXRlci5pbXBsLkVxdWlyZWN0YW5ndWxhck1hcExvZ2dlckltcGwKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMuaW1hZ2V3cml0ZXIuaW1wbC5JbWFnZXdyaXRlclBhY2thZ2VJbXBsI2dldEVxdWlyZWN0YW5ndWxhck1hcExvZ2dlcigpCisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVDbGFzcyBFUVVJUkVDVEFOR1VMQVJfTUFQX0xPR0dFUiA9IGVJTlNUQU5DRS5nZXRFcXVpcmVjdGFuZ3VsYXJNYXBMb2dnZXIoKTsKKworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy5pbWFnZXdyaXRlci5NQVBfUFJPSkVDVElPTlMgPGVtPk1BUCBQUk9KRUNUSU9OUzwvZW0+fScgZW51bS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzLmltYWdld3JpdGVyLk1BUF9QUk9KRUNUSU9OUworCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy5pbWFnZXdyaXRlci5pbXBsLkltYWdld3JpdGVyUGFja2FnZUltcGwjZ2V0TUFQX1BST0pFQ1RJT05TKCkKKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUVudW0gTUFQX1BST0pFQ1RJT05TID0gZUlOU1RBTkNFLmdldE1BUF9QUk9KRUNUSU9OUygpOworCisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+SU1hcCBQcm9qZWN0aW9uPC9lbT4nIGRhdGEgdHlwZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzLmltYWdld3JpdGVyLmxvZ2dlci5wcm9qZWN0aW9ucy5JTWFwUHJvamVjdGlvbgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy5pbWFnZXdyaXRlci5pbXBsLkltYWdld3JpdGVyUGFja2FnZUltcGwjZ2V0SU1hcFByb2plY3Rpb24oKQorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFRGF0YVR5cGUgSU1BUF9QUk9KRUNUSU9OID0gZUlOU1RBTkNFLmdldElNYXBQcm9qZWN0aW9uKCk7CisKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT5Db2xvciBQcm92aWRlcjwvZW0+JyBkYXRhIHR5cGUuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0udWkuYWRhcHRlcnMuY29sb3IuQ29sb3JQcm92aWRlcgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy5pbWFnZXdyaXRlci5pbXBsLkltYWdld3JpdGVyUGFja2FnZUltcGwjZ2V0Q29sb3JQcm92aWRlcigpCisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVEYXRhVHlwZSBDT0xPUl9QUk9WSURFUiA9IGVJTlNUQU5DRS5nZXRDb2xvclByb3ZpZGVyKCk7CisKKwl9CisKK30gLy9JbWFnZXdyaXRlclBhY2thZ2UKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzLmltYWdld3JpdGVyL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2xvZ2dlcnMvaW1hZ2V3cml0ZXIvTUFQX1BST0pFQ1RJT05TLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy5pbWFnZXdyaXRlci9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9sb2dnZXJzL2ltYWdld3JpdGVyL01BUF9QUk9KRUNUSU9OUy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM2NTZhNjYKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy5pbWFnZXdyaXRlci9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9sb2dnZXJzL2ltYWdld3JpdGVyL01BUF9QUk9KRUNUSU9OUy5qYXZhCkBAIC0wLDAgKzEsMjEyIEBACisvKioKKyAqIDxjb3B5cmlnaHQ+CisgKiA8L2NvcHlyaWdodD4KKyAqCisgKiAkSWQkCisgKi8KK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzLmltYWdld3JpdGVyOworCitpbXBvcnQgamF2YS51dGlsLkFycmF5czsKK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbnM7CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuRW51bWVyYXRvcjsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogQSByZXByZXNlbnRhdGlvbiBvZiB0aGUgbGl0ZXJhbHMgb2YgdGhlIGVudW1lcmF0aW9uICc8ZW0+PGI+TUFQIFBST0pFQ1RJT05TPC9iPjwvZW0+JywKKyAqIGFuZCB1dGlsaXR5IG1ldGhvZHMgZm9yIHdvcmtpbmcgd2l0aCB0aGVtLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy5pbWFnZXdyaXRlci5JbWFnZXdyaXRlclBhY2thZ2UjZ2V0TUFQX1BST0pFQ1RJT05TKCkKKyAqIEBtb2RlbAorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgZW51bSBNQVBfUFJPSkVDVElPTlMgaW1wbGVtZW50cyBFbnVtZXJhdG9yIHsKKwkvKioKKwkgKiBUaGUgJzxlbT48Yj5FUVVJUkVDVEFOR1VMQVI8L2I+PC9lbT4nIGxpdGVyYWwgb2JqZWN0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjRVFVSVJFQ1RBTkdVTEFSX1ZBTFVFCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJRVFVSVJFQ1RBTkdVTEFSKDAsICJFUVVJUkVDVEFOR1VMQVIiLCAiRVFVSVJFQ1RBTkdVTEFSIiksCisKKwkvKioKKwkgKiBUaGUgJzxlbT48Yj5NRVJDQVRPUjwvYj48L2VtPicgbGl0ZXJhbCBvYmplY3QuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNNRVJDQVRPUl9WQUxVRQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCU1FUkNBVE9SKDEsICJNRVJDQVRPUiIsICJNRVJDQVRPUiIpOworCisJLyoqCisJICogVGhlICc8ZW0+PGI+RVFVSVJFQ1RBTkdVTEFSPC9iPjwvZW0+JyBsaXRlcmFsIHZhbHVlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPHA+CisJICogSWYgdGhlIG1lYW5pbmcgb2YgJzxlbT48Yj5FUVVJUkVDVEFOR1VMQVI8L2I+PC9lbT4nIGxpdGVyYWwgb2JqZWN0IGlzbid0IGNsZWFyLAorCSAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4KKwkgKiA8L3A+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjRVFVSVJFQ1RBTkdVTEFSCisJICogQG1vZGVsCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgRVFVSVJFQ1RBTkdVTEFSX1ZBTFVFID0gMDsKKworCS8qKgorCSAqIFRoZSAnPGVtPjxiPk1FUkNBVE9SPC9iPjwvZW0+JyBsaXRlcmFsIHZhbHVlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPHA+CisJICogSWYgdGhlIG1lYW5pbmcgb2YgJzxlbT48Yj5NRVJDQVRPUjwvYj48L2VtPicgbGl0ZXJhbCBvYmplY3QgaXNuJ3QgY2xlYXIsCisJICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLgorCSAqIDwvcD4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNNRVJDQVRPUgorCSAqIEBtb2RlbAorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IE1FUkNBVE9SX1ZBTFVFID0gMTsKKworCS8qKgorCSAqIEFuIGFycmF5IG9mIGFsbCB0aGUgJzxlbT48Yj5NQVAgUFJPSkVDVElPTlM8L2I+PC9lbT4nIGVudW1lcmF0b3JzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByaXZhdGUgc3RhdGljIGZpbmFsIE1BUF9QUk9KRUNUSU9OU1tdIFZBTFVFU19BUlJBWSA9CisJCW5ldyBNQVBfUFJPSkVDVElPTlNbXSB7CisJCQlFUVVJUkVDVEFOR1VMQVIsCisJCQlNRVJDQVRPUiwKKwkJfTsKKworCS8qKgorCSAqIEEgcHVibGljIHJlYWQtb25seSBsaXN0IG9mIGFsbCB0aGUgJzxlbT48Yj5NQVAgUFJPSkVDVElPTlM8L2I+PC9lbT4nIGVudW1lcmF0b3JzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgTGlzdDxNQVBfUFJPSkVDVElPTlM+IFZBTFVFUyA9IENvbGxlY3Rpb25zLnVubW9kaWZpYWJsZUxpc3QoQXJyYXlzLmFzTGlzdChWQUxVRVNfQVJSQVkpKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlICc8ZW0+PGI+TUFQIFBST0pFQ1RJT05TPC9iPjwvZW0+JyBsaXRlcmFsIHdpdGggdGhlIHNwZWNpZmllZCBsaXRlcmFsIHZhbHVlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBzdGF0aWMgTUFQX1BST0pFQ1RJT05TIGdldChTdHJpbmcgbGl0ZXJhbCkgeworCQlmb3IgKGludCBpID0gMDsgaSA8IFZBTFVFU19BUlJBWS5sZW5ndGg7ICsraSkgeworCQkJTUFQX1BST0pFQ1RJT05TIHJlc3VsdCA9IFZBTFVFU19BUlJBWVtpXTsKKwkJCWlmIChyZXN1bHQudG9TdHJpbmcoKS5lcXVhbHMobGl0ZXJhbCkpIHsKKwkJCQlyZXR1cm4gcmVzdWx0OworCQkJfQorCQl9CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlICc8ZW0+PGI+TUFQIFBST0pFQ1RJT05TPC9iPjwvZW0+JyBsaXRlcmFsIHdpdGggdGhlIHNwZWNpZmllZCBuYW1lLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBzdGF0aWMgTUFQX1BST0pFQ1RJT05TIGdldEJ5TmFtZShTdHJpbmcgbmFtZSkgeworCQlmb3IgKGludCBpID0gMDsgaSA8IFZBTFVFU19BUlJBWS5sZW5ndGg7ICsraSkgeworCQkJTUFQX1BST0pFQ1RJT05TIHJlc3VsdCA9IFZBTFVFU19BUlJBWVtpXTsKKwkJCWlmIChyZXN1bHQuZ2V0TmFtZSgpLmVxdWFscyhuYW1lKSkgeworCQkJCXJldHVybiByZXN1bHQ7CisJCQl9CisJCX0KKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgJzxlbT48Yj5NQVAgUFJPSkVDVElPTlM8L2I+PC9lbT4nIGxpdGVyYWwgd2l0aCB0aGUgc3BlY2lmaWVkIGludGVnZXIgdmFsdWUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHN0YXRpYyBNQVBfUFJPSkVDVElPTlMgZ2V0KGludCB2YWx1ZSkgeworCQlzd2l0Y2ggKHZhbHVlKSB7CisJCQljYXNlIEVRVUlSRUNUQU5HVUxBUl9WQUxVRTogcmV0dXJuIEVRVUlSRUNUQU5HVUxBUjsKKwkJCWNhc2UgTUVSQ0FUT1JfVkFMVUU6IHJldHVybiBNRVJDQVRPUjsKKwkJfQorCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcml2YXRlIGZpbmFsIGludCB2YWx1ZTsKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByaXZhdGUgZmluYWwgU3RyaW5nIG5hbWU7CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcml2YXRlIGZpbmFsIFN0cmluZyBsaXRlcmFsOworCisJLyoqCisJICogT25seSB0aGlzIGNsYXNzIGNhbiBjb25zdHJ1Y3QgaW5zdGFuY2VzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByaXZhdGUgTUFQX1BST0pFQ1RJT05TKGludCB2YWx1ZSwgU3RyaW5nIG5hbWUsIFN0cmluZyBsaXRlcmFsKSB7CisJCXRoaXMudmFsdWUgPSB2YWx1ZTsKKwkJdGhpcy5uYW1lID0gbmFtZTsKKwkJdGhpcy5saXRlcmFsID0gbGl0ZXJhbDsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgaW50IGdldFZhbHVlKCkgeworCSAgcmV0dXJuIHZhbHVlOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBTdHJpbmcgZ2V0TmFtZSgpIHsKKwkgIHJldHVybiBuYW1lOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBTdHJpbmcgZ2V0TGl0ZXJhbCgpIHsKKwkgIHJldHVybiBsaXRlcmFsOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIGxpdGVyYWwgdmFsdWUgb2YgdGhlIGVudW1lcmF0b3IsIHdoaWNoIGlzIGl0cyBzdHJpbmcgcmVwcmVzZW50YXRpb24uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIFN0cmluZyB0b1N0cmluZygpIHsKKwkJcmV0dXJuIGxpdGVyYWw7CisJfQorCQorfSAvL01BUF9QUk9KRUNUSU9OUwpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMuaW1hZ2V3cml0ZXIvc3JjL29yZy9lY2xpcHNlL3N0ZW0vbG9nZ2Vycy9pbWFnZXdyaXRlci9NYXBWaWV3SW1hZ2VXcml0ZXJMb2dnZXIuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzLmltYWdld3JpdGVyL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2xvZ2dlcnMvaW1hZ2V3cml0ZXIvTWFwVmlld0ltYWdlV3JpdGVyTG9nZ2VyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjdjM2YzZgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzLmltYWdld3JpdGVyL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2xvZ2dlcnMvaW1hZ2V3cml0ZXIvTWFwVmlld0ltYWdlV3JpdGVyTG9nZ2VyLmphdmEKQEAgLTAsMCArMSw1NCBAQAorLyoqCisgKiA8Y29weXJpZ2h0PgorICogPC9jb3B5cmlnaHQ+CisgKgorICogJElkJAorICovCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy5pbWFnZXdyaXRlcjsKKworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiBBIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5NYXAgVmlldyBJbWFnZSBXcml0ZXIgTG9nZ2VyPC9iPjwvZW0+Jy4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICoKKyAqIDxwPgorICogVGhlIGZvbGxvd2luZyBmZWF0dXJlcyBhcmUgc3VwcG9ydGVkOgorICogPHVsPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy5pbWFnZXdyaXRlci5NYXBWaWV3SW1hZ2VXcml0ZXJMb2dnZXIjaXNPcGVuTWFwVmlldyA8ZW0+T3BlbiBNYXAgVmlldzwvZW0+fTwvbGk+CisgKiA8L3VsPgorICogPC9wPgorICoKKyAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzLmltYWdld3JpdGVyLkltYWdld3JpdGVyUGFja2FnZSNnZXRNYXBWaWV3SW1hZ2VXcml0ZXJMb2dnZXIoKQorICogQG1vZGVsCisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBpbnRlcmZhY2UgTWFwVmlld0ltYWdlV3JpdGVyTG9nZ2VyIGV4dGVuZHMgSW1hZ2VXcml0ZXJMb2dnZXIgeworCisJLyoqCisJICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+T3BlbiBNYXAgVmlldzwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIGlzIDxjb2RlPiJ0cnVlIjwvY29kZT4uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8cD4KKwkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5PcGVuIE1hcCBWaWV3PC9lbT4nIGF0dHJpYnV0ZSBpc24ndCBjbGVhciwKKwkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uCisJICogPC9wPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPk9wZW4gTWFwIFZpZXc8L2VtPicgYXR0cmlidXRlLgorCSAqIEBzZWUgI3NldE9wZW5NYXBWaWV3KGJvb2xlYW4pCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMuaW1hZ2V3cml0ZXIuSW1hZ2V3cml0ZXJQYWNrYWdlI2dldE1hcFZpZXdJbWFnZVdyaXRlckxvZ2dlcl9PcGVuTWFwVmlldygpCisJICogQG1vZGVsIGRlZmF1bHQ9InRydWUiCisJICogQGdlbmVyYXRlZAorCSAqLworCWJvb2xlYW4gaXNPcGVuTWFwVmlldygpOworCisJLyoqCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzLmltYWdld3JpdGVyLk1hcFZpZXdJbWFnZVdyaXRlckxvZ2dlciNpc09wZW5NYXBWaWV3IDxlbT5PcGVuIE1hcCBWaWV3PC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5PcGVuIE1hcCBWaWV3PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiBAc2VlICNpc09wZW5NYXBWaWV3KCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJdm9pZCBzZXRPcGVuTWFwVmlldyhib29sZWFuIHZhbHVlKTsKK30gLy8gTWFwVmlld0ltYWdlV3JpdGVyTG9nZ2VyCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy5pbWFnZXdyaXRlci9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9sb2dnZXJzL2ltYWdld3JpdGVyL1Byb2plY3RlZE1hcEltYWdlTG9nZ2VyLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy5pbWFnZXdyaXRlci9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9sb2dnZXJzL2ltYWdld3JpdGVyL1Byb2plY3RlZE1hcEltYWdlTG9nZ2VyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2VjZGEwMwotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzLmltYWdld3JpdGVyL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2xvZ2dlcnMvaW1hZ2V3cml0ZXIvUHJvamVjdGVkTWFwSW1hZ2VMb2dnZXIuamF2YQpAQCAtMCwwICsxLDI4MCBAQAorLyoqCisgKiA8Y29weXJpZ2h0PgorICogPC9jb3B5cmlnaHQ+CisgKgorICogJElkJAorICovCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy5pbWFnZXdyaXRlcjsKKworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5EZWNvcmF0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLkludGVncmF0aW9uRGVjb3JhdG9yOworCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzLmltYWdld3JpdGVyLmxvZ2dlci5wcm9qZWN0aW9ucy5JTWFwUHJvamVjdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnVpLmFkYXB0ZXJzLmNvbG9yLkNvbG9yUHJvdmlkZXI7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIEEgcmVwcmVzZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPlByb2plY3RlZCBNYXAgSW1hZ2UgTG9nZ2VyPC9iPjwvZW0+Jy4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICoKKyAqIDxwPgorICogVGhlIGZvbGxvd2luZyBmZWF0dXJlcyBhcmUgc3VwcG9ydGVkOgorICogPHVsPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy5pbWFnZXdyaXRlci5Qcm9qZWN0ZWRNYXBJbWFnZUxvZ2dlciNpc1VzZUxvZ1NjYWxpbmcgPGVtPlVzZSBMb2cgU2NhbGluZzwvZW0+fTwvbGk+CisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzLmltYWdld3JpdGVyLlByb2plY3RlZE1hcEltYWdlTG9nZ2VyI2dldEdhaW4gPGVtPkdhaW48L2VtPn08L2xpPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy5pbWFnZXdyaXRlci5Qcm9qZWN0ZWRNYXBJbWFnZUxvZ2dlciNpc0xvZ0FsbERlY29yYXRvcnMgPGVtPkxvZyBBbGwgRGVjb3JhdG9yczwvZW0+fTwvbGk+CisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzLmltYWdld3JpdGVyLlByb2plY3RlZE1hcEltYWdlTG9nZ2VyI2dldENvbG9yUHJvdmlkZXIgPGVtPkNvbG9yIFByb3ZpZGVyPC9lbT59PC9saT4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMuaW1hZ2V3cml0ZXIuUHJvamVjdGVkTWFwSW1hZ2VMb2dnZXIjZ2V0RGVjb3JhdG9yIDxlbT5EZWNvcmF0b3I8L2VtPn08L2xpPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy5pbWFnZXdyaXRlci5Qcm9qZWN0ZWRNYXBJbWFnZUxvZ2dlciNnZXREZWNvcmF0b3JQcm9wZXJ0aWVzIDxlbT5EZWNvcmF0b3IgUHJvcGVydGllczwvZW0+fTwvbGk+CisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzLmltYWdld3JpdGVyLlByb2plY3RlZE1hcEltYWdlTG9nZ2VyI2dldFdpZHRoIDxlbT5XaWR0aDwvZW0+fTwvbGk+CisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzLmltYWdld3JpdGVyLlByb2plY3RlZE1hcEltYWdlTG9nZ2VyI2dldEhlaWdodCA8ZW0+SGVpZ2h0PC9lbT59PC9saT4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMuaW1hZ2V3cml0ZXIuUHJvamVjdGVkTWFwSW1hZ2VMb2dnZXIjZ2V0UHJvamVjdGlvbiA8ZW0+UHJvamVjdGlvbjwvZW0+fTwvbGk+CisgKiA8L3VsPgorICogPC9wPgorICoKKyAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzLmltYWdld3JpdGVyLkltYWdld3JpdGVyUGFja2FnZSNnZXRQcm9qZWN0ZWRNYXBJbWFnZUxvZ2dlcigpCisgKiBAbW9kZWwgYWJzdHJhY3Q9InRydWUiCisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBpbnRlcmZhY2UgUHJvamVjdGVkTWFwSW1hZ2VMb2dnZXIgZXh0ZW5kcyBJbWFnZVdyaXRlckxvZ2dlciB7CisJLyoqCisJICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+UHJvamVjdGlvbjwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIGlzIDxjb2RlPiIiPC9jb2RlPi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDxwPgorCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPlByb2plY3Rpb248L2VtPicgYXR0cmlidXRlIGlzbid0IGNsZWFyLAorCSAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4KKwkgKiA8L3A+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+UHJvamVjdGlvbjwvZW0+JyBhdHRyaWJ1dGUuCisJICogQHNlZSAjc2V0UHJvamVjdGlvbihJTWFwUHJvamVjdGlvbikKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy5pbWFnZXdyaXRlci5JbWFnZXdyaXRlclBhY2thZ2UjZ2V0UHJvamVjdGVkTWFwSW1hZ2VMb2dnZXJfUHJvamVjdGlvbigpCisJICogQG1vZGVsIGRlZmF1bHQ9IiIgZGF0YVR5cGU9Im9yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy5pbWFnZXdyaXRlci5JTWFwUHJvamVjdGlvbiIgdHJhbnNpZW50PSJ0cnVlIgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlJTWFwUHJvamVjdGlvbiBnZXRQcm9qZWN0aW9uKCk7CisKKwkvKioKKwkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMuaW1hZ2V3cml0ZXIuUHJvamVjdGVkTWFwSW1hZ2VMb2dnZXIjZ2V0UHJvamVjdGlvbiA8ZW0+UHJvamVjdGlvbjwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+UHJvamVjdGlvbjwvZW0+JyBhdHRyaWJ1dGUuCisJICogQHNlZSAjZ2V0UHJvamVjdGlvbigpCisJICogQGdlbmVyYXRlZAorCSAqLworCXZvaWQgc2V0UHJvamVjdGlvbihJTWFwUHJvamVjdGlvbiB2YWx1ZSk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5Vc2UgTG9nIFNjYWxpbmc8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyA8Y29kZT4idHJ1ZSI8L2NvZGU+LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPHA+CisJICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+VXNlIExvZyBTY2FsaW5nPC9lbT4nIGF0dHJpYnV0ZSBpc24ndCBjbGVhciwKKwkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uCisJICogPC9wPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPlVzZSBMb2cgU2NhbGluZzwvZW0+JyBhdHRyaWJ1dGUuCisJICogQHNlZSAjc2V0VXNlTG9nU2NhbGluZyhib29sZWFuKQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzLmltYWdld3JpdGVyLkltYWdld3JpdGVyUGFja2FnZSNnZXRQcm9qZWN0ZWRNYXBJbWFnZUxvZ2dlcl9Vc2VMb2dTY2FsaW5nKCkKKwkgKiBAbW9kZWwgZGVmYXVsdD0idHJ1ZSIgcmVxdWlyZWQ9InRydWUiCisJICogQGdlbmVyYXRlZAorCSAqLworCWJvb2xlYW4gaXNVc2VMb2dTY2FsaW5nKCk7CisKKwkvKioKKwkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMuaW1hZ2V3cml0ZXIuUHJvamVjdGVkTWFwSW1hZ2VMb2dnZXIjaXNVc2VMb2dTY2FsaW5nIDxlbT5Vc2UgTG9nIFNjYWxpbmc8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPlVzZSBMb2cgU2NhbGluZzwvZW0+JyBhdHRyaWJ1dGUuCisJICogQHNlZSAjaXNVc2VMb2dTY2FsaW5nKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJdm9pZCBzZXRVc2VMb2dTY2FsaW5nKGJvb2xlYW4gdmFsdWUpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+R2FpbjwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIGlzIDxjb2RlPiIxLjAiPC9jb2RlPi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDxwPgorCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPkdhaW48L2VtPicgYXR0cmlidXRlIGlzbid0IGNsZWFyLAorCSAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4KKwkgKiA8L3A+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+R2FpbjwvZW0+JyBhdHRyaWJ1dGUuCisJICogQHNlZSAjc2V0R2FpbihmbG9hdCkKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy5pbWFnZXdyaXRlci5JbWFnZXdyaXRlclBhY2thZ2UjZ2V0UHJvamVjdGVkTWFwSW1hZ2VMb2dnZXJfR2FpbigpCisJICogQG1vZGVsIGRlZmF1bHQ9IjEuMCIgcmVxdWlyZWQ9InRydWUiCisJICogQGdlbmVyYXRlZAorCSAqLworCWZsb2F0IGdldEdhaW4oKTsKKworCS8qKgorCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy5pbWFnZXdyaXRlci5Qcm9qZWN0ZWRNYXBJbWFnZUxvZ2dlciNnZXRHYWluIDxlbT5HYWluPC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5HYWluPC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiBAc2VlICNnZXRHYWluKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJdm9pZCBzZXRHYWluKGZsb2F0IHZhbHVlKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPkxvZyBBbGwgRGVjb3JhdG9yczwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIGlzIDxjb2RlPiJmYWxzZSI8L2NvZGU+LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPHA+CisJICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+TG9nIEFsbCBEZWNvcmF0b3JzPC9lbT4nIGF0dHJpYnV0ZSBpc24ndCBjbGVhciwKKwkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uCisJICogPC9wPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPkxvZyBBbGwgRGVjb3JhdG9yczwvZW0+JyBhdHRyaWJ1dGUuCisJICogQHNlZSAjc2V0TG9nQWxsRGVjb3JhdG9ycyhib29sZWFuKQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzLmltYWdld3JpdGVyLkltYWdld3JpdGVyUGFja2FnZSNnZXRQcm9qZWN0ZWRNYXBJbWFnZUxvZ2dlcl9Mb2dBbGxEZWNvcmF0b3JzKCkKKwkgKiBAbW9kZWwgZGVmYXVsdD0iZmFsc2UiIHJlcXVpcmVkPSJ0cnVlIgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlib29sZWFuIGlzTG9nQWxsRGVjb3JhdG9ycygpOworCisJLyoqCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzLmltYWdld3JpdGVyLlByb2plY3RlZE1hcEltYWdlTG9nZ2VyI2lzTG9nQWxsRGVjb3JhdG9ycyA8ZW0+TG9nIEFsbCBEZWNvcmF0b3JzPC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5Mb2cgQWxsIERlY29yYXRvcnM8L2VtPicgYXR0cmlidXRlLgorCSAqIEBzZWUgI2lzTG9nQWxsRGVjb3JhdG9ycygpCisJICogQGdlbmVyYXRlZAorCSAqLworCXZvaWQgc2V0TG9nQWxsRGVjb3JhdG9ycyhib29sZWFuIHZhbHVlKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPkNvbG9yIFByb3ZpZGVyPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8cD4KKwkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5Db2xvciBQcm92aWRlcjwvZW0+JyBhdHRyaWJ1dGUgaXNuJ3QgY2xlYXIsCisJICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLgorCSAqIDwvcD4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5Db2xvciBQcm92aWRlcjwvZW0+JyBhdHRyaWJ1dGUuCisJICogQHNlZSAjc2V0Q29sb3JQcm92aWRlcihDb2xvclByb3ZpZGVyKQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzLmltYWdld3JpdGVyLkltYWdld3JpdGVyUGFja2FnZSNnZXRQcm9qZWN0ZWRNYXBJbWFnZUxvZ2dlcl9Db2xvclByb3ZpZGVyKCkKKwkgKiBAbW9kZWwgZGF0YVR5cGU9Im9yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy5pbWFnZXdyaXRlci5Db2xvclByb3ZpZGVyIgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlDb2xvclByb3ZpZGVyIGdldENvbG9yUHJvdmlkZXIoKTsKKworCS8qKgorCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy5pbWFnZXdyaXRlci5Qcm9qZWN0ZWRNYXBJbWFnZUxvZ2dlciNnZXRDb2xvclByb3ZpZGVyIDxlbT5Db2xvciBQcm92aWRlcjwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+Q29sb3IgUHJvdmlkZXI8L2VtPicgYXR0cmlidXRlLgorCSAqIEBzZWUgI2dldENvbG9yUHJvdmlkZXIoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwl2b2lkIHNldENvbG9yUHJvdmlkZXIoQ29sb3JQcm92aWRlciB2YWx1ZSk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5EZWNvcmF0b3I8L2I+PC9lbT4nIHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDxwPgorCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPkRlY29yYXRvcjwvZW0+JyByZWZlcmVuY2UgaXNuJ3QgY2xlYXIsCisJICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLgorCSAqIDwvcD4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5EZWNvcmF0b3I8L2VtPicgcmVmZXJlbmNlLgorCSAqIEBzZWUgI3NldERlY29yYXRvcihEZWNvcmF0b3IpCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMuaW1hZ2V3cml0ZXIuSW1hZ2V3cml0ZXJQYWNrYWdlI2dldFByb2plY3RlZE1hcEltYWdlTG9nZ2VyX0RlY29yYXRvcigpCisJICogQG1vZGVsCisJICogQGdlbmVyYXRlZAorCSAqLworCURlY29yYXRvciBnZXREZWNvcmF0b3IoKTsKKworCS8qKgorCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy5pbWFnZXdyaXRlci5Qcm9qZWN0ZWRNYXBJbWFnZUxvZ2dlciNnZXREZWNvcmF0b3IgPGVtPkRlY29yYXRvcjwvZW0+fScgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+RGVjb3JhdG9yPC9lbT4nIHJlZmVyZW5jZS4KKwkgKiBAc2VlICNnZXREZWNvcmF0b3IoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwl2b2lkIHNldERlY29yYXRvcihEZWNvcmF0b3IgdmFsdWUpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+RGVjb3JhdG9yIFByb3BlcnRpZXM8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDxwPgorCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPkRlY29yYXRvciBQcm9wZXJ0aWVzPC9lbT4nIGF0dHJpYnV0ZSBpc24ndCBjbGVhciwKKwkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uCisJICogPC9wPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPkRlY29yYXRvciBQcm9wZXJ0aWVzPC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiBAc2VlICNzZXREZWNvcmF0b3JQcm9wZXJ0aWVzKFN0cmluZykKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy5pbWFnZXdyaXRlci5JbWFnZXdyaXRlclBhY2thZ2UjZ2V0UHJvamVjdGVkTWFwSW1hZ2VMb2dnZXJfRGVjb3JhdG9yUHJvcGVydGllcygpCisJICogQG1vZGVsCisJICogQGdlbmVyYXRlZAorCSAqLworCVN0cmluZyBnZXREZWNvcmF0b3JQcm9wZXJ0aWVzKCk7CisKKwkvKioKKwkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMuaW1hZ2V3cml0ZXIuUHJvamVjdGVkTWFwSW1hZ2VMb2dnZXIjZ2V0RGVjb3JhdG9yUHJvcGVydGllcyA8ZW0+RGVjb3JhdG9yIFByb3BlcnRpZXM8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPkRlY29yYXRvciBQcm9wZXJ0aWVzPC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiBAc2VlICNnZXREZWNvcmF0b3JQcm9wZXJ0aWVzKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJdm9pZCBzZXREZWNvcmF0b3JQcm9wZXJ0aWVzKFN0cmluZyB2YWx1ZSk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5XaWR0aDwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIGlzIDxjb2RlPiIxMDAwIjwvY29kZT4uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8cD4KKwkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5XaWR0aDwvZW0+JyBhdHRyaWJ1dGUgaXNuJ3QgY2xlYXIsCisJICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLgorCSAqIDwvcD4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5XaWR0aDwvZW0+JyBhdHRyaWJ1dGUuCisJICogQHNlZSAjc2V0V2lkdGgoaW50KQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzLmltYWdld3JpdGVyLkltYWdld3JpdGVyUGFja2FnZSNnZXRQcm9qZWN0ZWRNYXBJbWFnZUxvZ2dlcl9XaWR0aCgpCisJICogQG1vZGVsIGRlZmF1bHQ9IjEwMDAiCisJICogQGdlbmVyYXRlZAorCSAqLworCWludCBnZXRXaWR0aCgpOworCisJLyoqCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzLmltYWdld3JpdGVyLlByb2plY3RlZE1hcEltYWdlTG9nZ2VyI2dldFdpZHRoIDxlbT5XaWR0aDwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+V2lkdGg8L2VtPicgYXR0cmlidXRlLgorCSAqIEBzZWUgI2dldFdpZHRoKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJdm9pZCBzZXRXaWR0aChpbnQgdmFsdWUpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+SGVpZ2h0PC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogVGhlIGRlZmF1bHQgdmFsdWUgaXMgPGNvZGU+IjUwMCI8L2NvZGU+LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPHA+CisJICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+SGVpZ2h0PC9lbT4nIGF0dHJpYnV0ZSBpc24ndCBjbGVhciwKKwkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uCisJICogPC9wPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPkhlaWdodDwvZW0+JyBhdHRyaWJ1dGUuCisJICogQHNlZSAjc2V0SGVpZ2h0KGludCkKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy5pbWFnZXdyaXRlci5JbWFnZXdyaXRlclBhY2thZ2UjZ2V0UHJvamVjdGVkTWFwSW1hZ2VMb2dnZXJfSGVpZ2h0KCkKKwkgKiBAbW9kZWwgZGVmYXVsdD0iNTAwIgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlpbnQgZ2V0SGVpZ2h0KCk7CisKKwkvKioKKwkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMuaW1hZ2V3cml0ZXIuUHJvamVjdGVkTWFwSW1hZ2VMb2dnZXIjZ2V0SGVpZ2h0IDxlbT5IZWlnaHQ8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPkhlaWdodDwvZW0+JyBhdHRyaWJ1dGUuCisJICogQHNlZSAjZ2V0SGVpZ2h0KCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJdm9pZCBzZXRIZWlnaHQoaW50IHZhbHVlKTsKKworfSAvLyBQcm9qZWN0ZWRNYXBJbWFnZUxvZ2dlcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMuaW1hZ2V3cml0ZXIvc3JjL29yZy9lY2xpcHNlL3N0ZW0vbG9nZ2Vycy9pbWFnZXdyaXRlci9pbXBsL0VxdWlyZWN0YW5ndWxhck1hcExvZ2dlckltcGwuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzLmltYWdld3JpdGVyL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2xvZ2dlcnMvaW1hZ2V3cml0ZXIvaW1wbC9FcXVpcmVjdGFuZ3VsYXJNYXBMb2dnZXJJbXBsLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTdmOWNjZAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzLmltYWdld3JpdGVyL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2xvZ2dlcnMvaW1hZ2V3cml0ZXIvaW1wbC9FcXVpcmVjdGFuZ3VsYXJNYXBMb2dnZXJJbXBsLmphdmEKQEAgLTAsMCArMSw0NiBAQAorLyoqCisgKiA8Y29weXJpZ2h0PgorICogPC9jb3B5cmlnaHQ+CisgKgorICogJElkJAorICovCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy5pbWFnZXdyaXRlci5pbXBsOworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzczsKKworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy5pbWFnZXdyaXRlci5FcXVpcmVjdGFuZ3VsYXJNYXBMb2dnZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzLmltYWdld3JpdGVyLkltYWdld3JpdGVyUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMuaW1hZ2V3cml0ZXIubG9nZ2VyLnByb2plY3Rpb25zLkVxdWlyZWN0YW5ndWxhcjsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPkVxdWlyZWN0YW5ndWxhciBNYXAgTG9nZ2VyPC9iPjwvZW0+Jy4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogPHA+CisgKiA8L3A+CisgKgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgRXF1aXJlY3Rhbmd1bGFyTWFwTG9nZ2VySW1wbCBleHRlbmRzIFByb2plY3RlZE1hcEltYWdlTG9nZ2VySW1wbCBpbXBsZW1lbnRzIEVxdWlyZWN0YW5ndWxhck1hcExvZ2dlciB7CisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCXB1YmxpYyBFcXVpcmVjdGFuZ3VsYXJNYXBMb2dnZXJJbXBsKCkgeworCQlzdXBlcigpOworCQkKKwkJc2V0UHJvamVjdGlvbihuZXcgRXF1aXJlY3Rhbmd1bGFyKCkpOwkKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgRUNsYXNzIGVTdGF0aWNDbGFzcygpIHsKKwkJcmV0dXJuIEltYWdld3JpdGVyUGFja2FnZS5MaXRlcmFscy5FUVVJUkVDVEFOR1VMQVJfTUFQX0xPR0dFUjsKKwl9CisKK30gLy9FcXVpcmVjdGFuZ3VsYXJNYXBMb2dnZXJJbXBsCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy5pbWFnZXdyaXRlci9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9sb2dnZXJzL2ltYWdld3JpdGVyL2ltcGwvSW1hZ2VXcml0ZXJMb2dnZXJJbXBsLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy5pbWFnZXdyaXRlci9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9sb2dnZXJzL2ltYWdld3JpdGVyL2ltcGwvSW1hZ2VXcml0ZXJMb2dnZXJJbXBsLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjg3M2VkYwotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzLmltYWdld3JpdGVyL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2xvZ2dlcnMvaW1hZ2V3cml0ZXIvaW1wbC9JbWFnZVdyaXRlckxvZ2dlckltcGwuamF2YQpAQCAtMCwwICsxLDI0NiBAQAorLyoqCisgKiA8Y29weXJpZ2h0PgorICogPC9jb3B5cmlnaHQ+CisgKgorICogJElkJAorICovCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy5pbWFnZXdyaXRlci5pbXBsOworCitpbXBvcnQgamF2YS5pby5GaWxlOworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLmltcGwuRU5vdGlmaWNhdGlvbkltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5qb2JzLnNpbXVsYXRpb24uSVNpbXVsYXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzLmNvbW1vbi5Db25zdGFudHM7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzLmNvbW1vbi5GaWxlVXRpbHM7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzLmltYWdld3JpdGVyLkltYWdlV3JpdGVyTG9nZ2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy5pbWFnZXdyaXRlci5JbWFnZXdyaXRlclBhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzLmltcGwuU2ltdWxhdGlvbkxvZ2dlckltcGw7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIEFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5JbWFnZSBXcml0ZXIgTG9nZ2VyPC9iPjwvZW0+Jy4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogPHA+CisgKiBUaGUgZm9sbG93aW5nIGZlYXR1cmVzIGFyZSBpbXBsZW1lbnRlZDoKKyAqIDx1bD4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMuaW1hZ2V3cml0ZXIuaW1wbC5JbWFnZVdyaXRlckxvZ2dlckltcGwjaXNVc2VEZWZhdWx0TG9nRGlyZWN0b3J5IDxlbT5Vc2UgRGVmYXVsdCBMb2cgRGlyZWN0b3J5PC9lbT59PC9saT4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMuaW1hZ2V3cml0ZXIuaW1wbC5JbWFnZVdyaXRlckxvZ2dlckltcGwjZ2V0RGF0YVBhdGggPGVtPkRhdGEgUGF0aDwvZW0+fTwvbGk+CisgKiA8L3VsPgorICogPC9wPgorICoKKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGFic3RyYWN0IGNsYXNzIEltYWdlV3JpdGVyTG9nZ2VySW1wbCBleHRlbmRzIFNpbXVsYXRpb25Mb2dnZXJJbXBsIGltcGxlbWVudHMgSW1hZ2VXcml0ZXJMb2dnZXIgeworCS8qKgorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSAne0BsaW5rICNpc1VzZURlZmF1bHRMb2dEaXJlY3RvcnkoKSA8ZW0+VXNlIERlZmF1bHQgTG9nIERpcmVjdG9yeTwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjaXNVc2VEZWZhdWx0TG9nRGlyZWN0b3J5KCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIGJvb2xlYW4gVVNFX0RFRkFVTFRfTE9HX0RJUkVDVE9SWV9FREVGQVVMVCA9IHRydWU7CisKKwkvKioKKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNpc1VzZURlZmF1bHRMb2dEaXJlY3RvcnkoKSA8ZW0+VXNlIERlZmF1bHQgTG9nIERpcmVjdG9yeTwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjaXNVc2VEZWZhdWx0TG9nRGlyZWN0b3J5KCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgYm9vbGVhbiB1c2VEZWZhdWx0TG9nRGlyZWN0b3J5ID0gVVNFX0RFRkFVTFRfTE9HX0RJUkVDVE9SWV9FREVGQVVMVDsKKworCS8qKgorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXREYXRhUGF0aCgpIDxlbT5EYXRhIFBhdGg8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI2dldERhdGFQYXRoKCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIFN0cmluZyBEQVRBX1BBVEhfRURFRkFVTFQgPSBudWxsOworCisJLyoqCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0RGF0YVBhdGgoKSA8ZW0+RGF0YSBQYXRoPC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNnZXREYXRhUGF0aCgpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIFN0cmluZyBkYXRhUGF0aCA9IERBVEFfUEFUSF9FREVGQVVMVDsKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlwdWJsaWMgSW1hZ2VXcml0ZXJMb2dnZXJJbXBsKCkgeworCQlzdXBlcigpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCBFQ2xhc3MgZVN0YXRpY0NsYXNzKCkgeworCQlyZXR1cm4gSW1hZ2V3cml0ZXJQYWNrYWdlLkxpdGVyYWxzLklNQUdFX1dSSVRFUl9MT0dHRVI7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIGJvb2xlYW4gaXNVc2VEZWZhdWx0TG9nRGlyZWN0b3J5KCkgeworCQlyZXR1cm4gdXNlRGVmYXVsdExvZ0RpcmVjdG9yeTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRVc2VEZWZhdWx0TG9nRGlyZWN0b3J5KGJvb2xlYW4gbmV3VXNlRGVmYXVsdExvZ0RpcmVjdG9yeSkgeworCQlib29sZWFuIG9sZFVzZURlZmF1bHRMb2dEaXJlY3RvcnkgPSB1c2VEZWZhdWx0TG9nRGlyZWN0b3J5OworCQl1c2VEZWZhdWx0TG9nRGlyZWN0b3J5ID0gbmV3VXNlRGVmYXVsdExvZ0RpcmVjdG9yeTsKKwkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQorCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgSW1hZ2V3cml0ZXJQYWNrYWdlLklNQUdFX1dSSVRFUl9MT0dHRVJfX1VTRV9ERUZBVUxUX0xPR19ESVJFQ1RPUlksIG9sZFVzZURlZmF1bHRMb2dEaXJlY3RvcnksIHVzZURlZmF1bHRMb2dEaXJlY3RvcnkpKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgU3RyaW5nIGdldERhdGFQYXRoKCkgeworCQlyZXR1cm4gZGF0YVBhdGg7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgc2V0RGF0YVBhdGgoU3RyaW5nIG5ld0RhdGFQYXRoKSB7CisJCVN0cmluZyBvbGREYXRhUGF0aCA9IGRhdGFQYXRoOworCQlkYXRhUGF0aCA9IG5ld0RhdGFQYXRoOworCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpCisJCQllTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBJbWFnZXdyaXRlclBhY2thZ2UuSU1BR0VfV1JJVEVSX0xPR0dFUl9fREFUQV9QQVRILCBvbGREYXRhUGF0aCwgZGF0YVBhdGgpKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgT2JqZWN0IGVHZXQoaW50IGZlYXR1cmVJRCwgYm9vbGVhbiByZXNvbHZlLCBib29sZWFuIGNvcmVUeXBlKSB7CisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7CisJCQljYXNlIEltYWdld3JpdGVyUGFja2FnZS5JTUFHRV9XUklURVJfTE9HR0VSX19VU0VfREVGQVVMVF9MT0dfRElSRUNUT1JZOgorCQkJCXJldHVybiBpc1VzZURlZmF1bHRMb2dEaXJlY3RvcnkoKTsKKwkJCWNhc2UgSW1hZ2V3cml0ZXJQYWNrYWdlLklNQUdFX1dSSVRFUl9MT0dHRVJfX0RBVEFfUEFUSDoKKwkJCQlyZXR1cm4gZ2V0RGF0YVBhdGgoKTsKKwkJfQorCQlyZXR1cm4gc3VwZXIuZUdldChmZWF0dXJlSUQsIHJlc29sdmUsIGNvcmVUeXBlKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBlU2V0KGludCBmZWF0dXJlSUQsIE9iamVjdCBuZXdWYWx1ZSkgeworCQlzd2l0Y2ggKGZlYXR1cmVJRCkgeworCQkJY2FzZSBJbWFnZXdyaXRlclBhY2thZ2UuSU1BR0VfV1JJVEVSX0xPR0dFUl9fVVNFX0RFRkFVTFRfTE9HX0RJUkVDVE9SWToKKwkJCQlzZXRVc2VEZWZhdWx0TG9nRGlyZWN0b3J5KChCb29sZWFuKW5ld1ZhbHVlKTsKKwkJCQlyZXR1cm47CisJCQljYXNlIEltYWdld3JpdGVyUGFja2FnZS5JTUFHRV9XUklURVJfTE9HR0VSX19EQVRBX1BBVEg6CisJCQkJc2V0RGF0YVBhdGgoKFN0cmluZyluZXdWYWx1ZSk7CisJCQkJcmV0dXJuOworCQl9CisJCXN1cGVyLmVTZXQoZmVhdHVyZUlELCBuZXdWYWx1ZSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgZVVuc2V0KGludCBmZWF0dXJlSUQpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJCWNhc2UgSW1hZ2V3cml0ZXJQYWNrYWdlLklNQUdFX1dSSVRFUl9MT0dHRVJfX1VTRV9ERUZBVUxUX0xPR19ESVJFQ1RPUlk6CisJCQkJc2V0VXNlRGVmYXVsdExvZ0RpcmVjdG9yeShVU0VfREVGQVVMVF9MT0dfRElSRUNUT1JZX0VERUZBVUxUKTsKKwkJCQlyZXR1cm47CisJCQljYXNlIEltYWdld3JpdGVyUGFja2FnZS5JTUFHRV9XUklURVJfTE9HR0VSX19EQVRBX1BBVEg6CisJCQkJc2V0RGF0YVBhdGgoREFUQV9QQVRIX0VERUZBVUxUKTsKKwkJCQlyZXR1cm47CisJCX0KKwkJc3VwZXIuZVVuc2V0KGZlYXR1cmVJRCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIGJvb2xlYW4gZUlzU2V0KGludCBmZWF0dXJlSUQpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJCWNhc2UgSW1hZ2V3cml0ZXJQYWNrYWdlLklNQUdFX1dSSVRFUl9MT0dHRVJfX1VTRV9ERUZBVUxUX0xPR19ESVJFQ1RPUlk6CisJCQkJcmV0dXJuIHVzZURlZmF1bHRMb2dEaXJlY3RvcnkgIT0gVVNFX0RFRkFVTFRfTE9HX0RJUkVDVE9SWV9FREVGQVVMVDsKKwkJCWNhc2UgSW1hZ2V3cml0ZXJQYWNrYWdlLklNQUdFX1dSSVRFUl9MT0dHRVJfX0RBVEFfUEFUSDoKKwkJCQlyZXR1cm4gREFUQV9QQVRIX0VERUZBVUxUID09IG51bGwgPyBkYXRhUGF0aCAhPSBudWxsIDogIURBVEFfUEFUSF9FREVGQVVMVC5lcXVhbHMoZGF0YVBhdGgpOworCQl9CisJCXJldHVybiBzdXBlci5lSXNTZXQoZmVhdHVyZUlEKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkgeworCQlpZiAoZUlzUHJveHkoKSkgcmV0dXJuIHN1cGVyLnRvU3RyaW5nKCk7CisKKwkJU3RyaW5nQnVmZmVyIHJlc3VsdCA9IG5ldyBTdHJpbmdCdWZmZXIoc3VwZXIudG9TdHJpbmcoKSk7CisJCXJlc3VsdC5hcHBlbmQoIiAodXNlRGVmYXVsdExvZ0RpcmVjdG9yeTogIik7CisJCXJlc3VsdC5hcHBlbmQodXNlRGVmYXVsdExvZ0RpcmVjdG9yeSk7CisJCXJlc3VsdC5hcHBlbmQoIiwgZGF0YVBhdGg6ICIpOworCQlyZXN1bHQuYXBwZW5kKGRhdGFQYXRoKTsKKwkJcmVzdWx0LmFwcGVuZCgnKScpOworCQlyZXR1cm4gcmVzdWx0LnRvU3RyaW5nKCk7CisJfQorCisJCisJLyoqCisJICogQHBhcmFtIHNpbXVsYXRpb24KKwkgKiBAcmV0dXJuCisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlwcm90ZWN0ZWQgRmlsZSBnZXRMb2dGaWxlRGlyZWN0b3J5KElTaW11bGF0aW9uIHNpbXVsYXRpb24pCisJeworCQkJCisJCVN0cmluZ0J1aWxkZXIgZGlyZWN0b3J5ID0gbmV3IFN0cmluZ0J1aWxkZXIoKTsKKwkJCisJCWlmIChpc1VzZURlZmF1bHRMb2dEaXJlY3RvcnkoKSB8fCBDb25zdGFudHMuRU1QVFlfU1RSSU5HLmVxdWFscyhnZXREYXRhUGF0aCgpKSkgeworCQkJZGlyZWN0b3J5LmFwcGVuZChGaWxlVXRpbHMuZ2V0Um9vdExvZ2dpbmdGb2xkZXJGb3JTY2VuYXJpbyhzaW11bGF0aW9uLmdldFNjZW5hcmlvKCkuZ2V0VVJJKCkudG9TdHJpbmcoKSkpOworCQl9IGVsc2UgeworCQkJZGlyZWN0b3J5LmFwcGVuZChnZXREYXRhUGF0aCgpKTsKKwkJfQorCQkKKwkJZGlyZWN0b3J5LmFwcGVuZChDb25zdGFudHMuU1lTVEVNX1BBVEhfU0VQQVJBVE9SKTsKKwkJZGlyZWN0b3J5LmFwcGVuZChzaW11bGF0aW9uLmdldFVuaXF1ZUlEU3RyaW5nKCkpOworCQlkaXJlY3RvcnkuYXBwZW5kKENvbnN0YW50cy5TWVNURU1fUEFUSF9TRVBBUkFUT1IpOworCisJCXJldHVybiBuZXcgRmlsZShkaXJlY3RvcnkudG9TdHJpbmcoKSk7CisJfQorfSAvL0ltYWdlV3JpdGVyTG9nZ2VySW1wbApkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMuaW1hZ2V3cml0ZXIvc3JjL29yZy9lY2xpcHNlL3N0ZW0vbG9nZ2Vycy9pbWFnZXdyaXRlci9pbXBsL0ltYWdld3JpdGVyRmFjdG9yeUltcGwuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzLmltYWdld3JpdGVyL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2xvZ2dlcnMvaW1hZ2V3cml0ZXIvaW1wbC9JbWFnZXdyaXRlckZhY3RvcnlJbXBsLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzlkMDQwOQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzLmltYWdld3JpdGVyL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2xvZ2dlcnMvaW1hZ2V3cml0ZXIvaW1wbC9JbWFnZXdyaXRlckZhY3RvcnlJbXBsLmphdmEKQEAgLTAsMCArMSwyMDcgQEAKKy8qKgorICogPGNvcHlyaWdodD4KKyAqIDwvY29weXJpZ2h0PgorICoKKyAqICRJZCQKKyAqLworcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMuaW1hZ2V3cml0ZXIuaW1wbDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVEYXRhVHlwZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRVBhY2thZ2U7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuaW1wbC5FRmFjdG9yeUltcGw7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUucGx1Z2luLkVjb3JlUGx1Z2luOworCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzLmltYWdld3JpdGVyLio7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzLmltYWdld3JpdGVyLmxvZ2dlci5wcm9qZWN0aW9ucy5JTWFwUHJvamVjdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnVpLmFkYXB0ZXJzLmNvbG9yLkNvbG9yUHJvdmlkZXI7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIEFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBtb2RlbCA8Yj5GYWN0b3J5PC9iPi4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgSW1hZ2V3cml0ZXJGYWN0b3J5SW1wbCBleHRlbmRzIEVGYWN0b3J5SW1wbCBpbXBsZW1lbnRzIEltYWdld3JpdGVyRmFjdG9yeSB7CisJLyoqCisJICogQ3JlYXRlcyB0aGUgZGVmYXVsdCBmYWN0b3J5IGltcGxlbWVudGF0aW9uLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBzdGF0aWMgSW1hZ2V3cml0ZXJGYWN0b3J5IGluaXQoKSB7CisJCXRyeSB7CisJCQlJbWFnZXdyaXRlckZhY3RvcnkgdGhlSW1hZ2V3cml0ZXJGYWN0b3J5ID0gKEltYWdld3JpdGVyRmFjdG9yeSlFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFRmFjdG9yeSgiaHR0cDovL29yZy9lY2xpcHNlL3N0ZW0vbG9nZ2Vycy9pbWFnZXdyaXRlciIpOyAKKwkJCWlmICh0aGVJbWFnZXdyaXRlckZhY3RvcnkgIT0gbnVsbCkgeworCQkJCXJldHVybiB0aGVJbWFnZXdyaXRlckZhY3Rvcnk7CisJCQl9CisJCX0KKwkJY2F0Y2ggKEV4Y2VwdGlvbiBleGNlcHRpb24pIHsKKwkJCUVjb3JlUGx1Z2luLklOU1RBTkNFLmxvZyhleGNlcHRpb24pOworCQl9CisJCXJldHVybiBuZXcgSW1hZ2V3cml0ZXJGYWN0b3J5SW1wbCgpOworCX0KKworCS8qKgorCSAqIENyZWF0ZXMgYW4gaW5zdGFuY2Ugb2YgdGhlIGZhY3RvcnkuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEltYWdld3JpdGVyRmFjdG9yeUltcGwoKSB7CisJCXN1cGVyKCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIEVPYmplY3QgY3JlYXRlKEVDbGFzcyBlQ2xhc3MpIHsKKwkJc3dpdGNoIChlQ2xhc3MuZ2V0Q2xhc3NpZmllcklEKCkpIHsKKwkJCWNhc2UgSW1hZ2V3cml0ZXJQYWNrYWdlLk1BUF9WSUVXX0lNQUdFX1dSSVRFUl9MT0dHRVI6IHJldHVybiBjcmVhdGVNYXBWaWV3SW1hZ2VXcml0ZXJMb2dnZXIoKTsKKwkJCWNhc2UgSW1hZ2V3cml0ZXJQYWNrYWdlLkVRVUlSRUNUQU5HVUxBUl9NQVBfTE9HR0VSOiByZXR1cm4gY3JlYXRlRXF1aXJlY3Rhbmd1bGFyTWFwTG9nZ2VyKCk7CisJCQlkZWZhdWx0OgorCQkJCXRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIlRoZSBjbGFzcyAnIiArIGVDbGFzcy5nZXROYW1lKCkgKyAiJyBpcyBub3QgYSB2YWxpZCBjbGFzc2lmaWVyIik7CisJCX0KKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgT2JqZWN0IGNyZWF0ZUZyb21TdHJpbmcoRURhdGFUeXBlIGVEYXRhVHlwZSwgU3RyaW5nIGluaXRpYWxWYWx1ZSkgeworCQlzd2l0Y2ggKGVEYXRhVHlwZS5nZXRDbGFzc2lmaWVySUQoKSkgeworCQkJY2FzZSBJbWFnZXdyaXRlclBhY2thZ2UuTUFQX1BST0pFQ1RJT05TOgorCQkJCXJldHVybiBjcmVhdGVNQVBfUFJPSkVDVElPTlNGcm9tU3RyaW5nKGVEYXRhVHlwZSwgaW5pdGlhbFZhbHVlKTsKKwkJCWNhc2UgSW1hZ2V3cml0ZXJQYWNrYWdlLklNQVBfUFJPSkVDVElPTjoKKwkJCQlyZXR1cm4gY3JlYXRlSU1hcFByb2plY3Rpb25Gcm9tU3RyaW5nKGVEYXRhVHlwZSwgaW5pdGlhbFZhbHVlKTsKKwkJCWNhc2UgSW1hZ2V3cml0ZXJQYWNrYWdlLkNPTE9SX1BST1ZJREVSOgorCQkJCXJldHVybiBjcmVhdGVDb2xvclByb3ZpZGVyRnJvbVN0cmluZyhlRGF0YVR5cGUsIGluaXRpYWxWYWx1ZSk7CisJCQlkZWZhdWx0OgorCQkJCXRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIlRoZSBkYXRhdHlwZSAnIiArIGVEYXRhVHlwZS5nZXROYW1lKCkgKyAiJyBpcyBub3QgYSB2YWxpZCBjbGFzc2lmaWVyIik7CisJCX0KKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgU3RyaW5nIGNvbnZlcnRUb1N0cmluZyhFRGF0YVR5cGUgZURhdGFUeXBlLCBPYmplY3QgaW5zdGFuY2VWYWx1ZSkgeworCQlzd2l0Y2ggKGVEYXRhVHlwZS5nZXRDbGFzc2lmaWVySUQoKSkgeworCQkJY2FzZSBJbWFnZXdyaXRlclBhY2thZ2UuTUFQX1BST0pFQ1RJT05TOgorCQkJCXJldHVybiBjb252ZXJ0TUFQX1BST0pFQ1RJT05TVG9TdHJpbmcoZURhdGFUeXBlLCBpbnN0YW5jZVZhbHVlKTsKKwkJCWNhc2UgSW1hZ2V3cml0ZXJQYWNrYWdlLklNQVBfUFJPSkVDVElPTjoKKwkJCQlyZXR1cm4gY29udmVydElNYXBQcm9qZWN0aW9uVG9TdHJpbmcoZURhdGFUeXBlLCBpbnN0YW5jZVZhbHVlKTsKKwkJCWNhc2UgSW1hZ2V3cml0ZXJQYWNrYWdlLkNPTE9SX1BST1ZJREVSOgorCQkJCXJldHVybiBjb252ZXJ0Q29sb3JQcm92aWRlclRvU3RyaW5nKGVEYXRhVHlwZSwgaW5zdGFuY2VWYWx1ZSk7CisJCQlkZWZhdWx0OgorCQkJCXRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIlRoZSBkYXRhdHlwZSAnIiArIGVEYXRhVHlwZS5nZXROYW1lKCkgKyAiJyBpcyBub3QgYSB2YWxpZCBjbGFzc2lmaWVyIik7CisJCX0KKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgTWFwVmlld0ltYWdlV3JpdGVyTG9nZ2VyIGNyZWF0ZU1hcFZpZXdJbWFnZVdyaXRlckxvZ2dlcigpIHsKKwkJTWFwVmlld0ltYWdlV3JpdGVyTG9nZ2VySW1wbCBtYXBWaWV3SW1hZ2VXcml0ZXJMb2dnZXIgPSBuZXcgTWFwVmlld0ltYWdlV3JpdGVyTG9nZ2VySW1wbCgpOworCQlyZXR1cm4gbWFwVmlld0ltYWdlV3JpdGVyTG9nZ2VyOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFcXVpcmVjdGFuZ3VsYXJNYXBMb2dnZXIgY3JlYXRlRXF1aXJlY3Rhbmd1bGFyTWFwTG9nZ2VyKCkgeworCQlFcXVpcmVjdGFuZ3VsYXJNYXBMb2dnZXJJbXBsIGVxdWlyZWN0YW5ndWxhck1hcExvZ2dlciA9IG5ldyBFcXVpcmVjdGFuZ3VsYXJNYXBMb2dnZXJJbXBsKCk7CisJCXJldHVybiBlcXVpcmVjdGFuZ3VsYXJNYXBMb2dnZXI7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIE1BUF9QUk9KRUNUSU9OUyBjcmVhdGVNQVBfUFJPSkVDVElPTlNGcm9tU3RyaW5nKEVEYXRhVHlwZSBlRGF0YVR5cGUsIFN0cmluZyBpbml0aWFsVmFsdWUpIHsKKwkJTUFQX1BST0pFQ1RJT05TIHJlc3VsdCA9IE1BUF9QUk9KRUNUSU9OUy5nZXQoaW5pdGlhbFZhbHVlKTsKKwkJaWYgKHJlc3VsdCA9PSBudWxsKSB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJUaGUgdmFsdWUgJyIgKyBpbml0aWFsVmFsdWUgKyAiJyBpcyBub3QgYSB2YWxpZCBlbnVtZXJhdG9yIG9mICciICsgZURhdGFUeXBlLmdldE5hbWUoKSArICInIik7CisJCXJldHVybiByZXN1bHQ7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFN0cmluZyBjb252ZXJ0TUFQX1BST0pFQ1RJT05TVG9TdHJpbmcoRURhdGFUeXBlIGVEYXRhVHlwZSwgT2JqZWN0IGluc3RhbmNlVmFsdWUpIHsKKwkJcmV0dXJuIGluc3RhbmNlVmFsdWUgPT0gbnVsbCA/IG51bGwgOiBpbnN0YW5jZVZhbHVlLnRvU3RyaW5nKCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIElNYXBQcm9qZWN0aW9uIGNyZWF0ZUlNYXBQcm9qZWN0aW9uRnJvbVN0cmluZyhFRGF0YVR5cGUgZURhdGFUeXBlLCBTdHJpbmcgaW5pdGlhbFZhbHVlKSB7CisJCXJldHVybiAoSU1hcFByb2plY3Rpb24pc3VwZXIuY3JlYXRlRnJvbVN0cmluZyhlRGF0YVR5cGUsIGluaXRpYWxWYWx1ZSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFN0cmluZyBjb252ZXJ0SU1hcFByb2plY3Rpb25Ub1N0cmluZyhFRGF0YVR5cGUgZURhdGFUeXBlLCBPYmplY3QgaW5zdGFuY2VWYWx1ZSkgeworCQlyZXR1cm4gc3VwZXIuY29udmVydFRvU3RyaW5nKGVEYXRhVHlwZSwgaW5zdGFuY2VWYWx1ZSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIENvbG9yUHJvdmlkZXIgY3JlYXRlQ29sb3JQcm92aWRlckZyb21TdHJpbmcoRURhdGFUeXBlIGVEYXRhVHlwZSwgU3RyaW5nIGluaXRpYWxWYWx1ZSkgeworCQlyZXR1cm4gKENvbG9yUHJvdmlkZXIpc3VwZXIuY3JlYXRlRnJvbVN0cmluZyhlRGF0YVR5cGUsIGluaXRpYWxWYWx1ZSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFN0cmluZyBjb252ZXJ0Q29sb3JQcm92aWRlclRvU3RyaW5nKEVEYXRhVHlwZSBlRGF0YVR5cGUsIE9iamVjdCBpbnN0YW5jZVZhbHVlKSB7CisJCXJldHVybiBzdXBlci5jb252ZXJ0VG9TdHJpbmcoZURhdGFUeXBlLCBpbnN0YW5jZVZhbHVlKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgSW1hZ2V3cml0ZXJQYWNrYWdlIGdldEltYWdld3JpdGVyUGFja2FnZSgpIHsKKwkJcmV0dXJuIChJbWFnZXdyaXRlclBhY2thZ2UpZ2V0RVBhY2thZ2UoKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBkZXByZWNhdGVkCisJICogQGdlbmVyYXRlZAorCSAqLworCUBEZXByZWNhdGVkCisJcHVibGljIHN0YXRpYyBJbWFnZXdyaXRlclBhY2thZ2UgZ2V0UGFja2FnZSgpIHsKKwkJcmV0dXJuIEltYWdld3JpdGVyUGFja2FnZS5lSU5TVEFOQ0U7CisJfQorCit9IC8vSW1hZ2V3cml0ZXJGYWN0b3J5SW1wbApkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMuaW1hZ2V3cml0ZXIvc3JjL29yZy9lY2xpcHNlL3N0ZW0vbG9nZ2Vycy9pbWFnZXdyaXRlci9pbXBsL0ltYWdld3JpdGVyUGFja2FnZUltcGwuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzLmltYWdld3JpdGVyL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2xvZ2dlcnMvaW1hZ2V3cml0ZXIvaW1wbC9JbWFnZXdyaXRlclBhY2thZ2VJbXBsLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGEzOThlYQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzLmltYWdld3JpdGVyL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2xvZ2dlcnMvaW1hZ2V3cml0ZXIvaW1wbC9JbWFnZXdyaXRlclBhY2thZ2VJbXBsLmphdmEKQEAgLTAsMCArMSw0NDggQEAKKy8qKgorICogPGNvcHlyaWdodD4KKyAqIDwvY29weXJpZ2h0PgorICoKKyAqICRJZCQKKyAqLworcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMuaW1hZ2V3cml0ZXIuaW1wbDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQXR0cmlidXRlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVEYXRhVHlwZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUVudW07CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVQYWNrYWdlOworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVSZWZlcmVuY2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLmltcGwuRVBhY2thZ2VJbXBsOworCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLk1vZGVsUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMuU2ltdWxhdGlvbkxvZ2dlclBhY2thZ2U7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMuaW1hZ2V3cml0ZXIuRXF1aXJlY3Rhbmd1bGFyTWFwTG9nZ2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy5pbWFnZXdyaXRlci5JbWFnZVdyaXRlckxvZ2dlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMuaW1hZ2V3cml0ZXIuSW1hZ2V3cml0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy5pbWFnZXdyaXRlci5JbWFnZXdyaXRlclBhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzLmltYWdld3JpdGVyLk1hcFZpZXdJbWFnZVdyaXRlckxvZ2dlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMuaW1hZ2V3cml0ZXIuUHJvamVjdGVkTWFwSW1hZ2VMb2dnZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzLmltYWdld3JpdGVyLmxvZ2dlci5wcm9qZWN0aW9ucy5JTWFwUHJvamVjdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnVpLmFkYXB0ZXJzLmNvbG9yLkNvbG9yUHJvdmlkZXI7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIEFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBtb2RlbCA8Yj5QYWNrYWdlPC9iPi4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgSW1hZ2V3cml0ZXJQYWNrYWdlSW1wbCBleHRlbmRzIEVQYWNrYWdlSW1wbCBpbXBsZW1lbnRzIEltYWdld3JpdGVyUGFja2FnZSB7CisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJpdmF0ZSBFQ2xhc3MgaW1hZ2VXcml0ZXJMb2dnZXJFQ2xhc3MgPSBudWxsOworCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJpdmF0ZSBFQ2xhc3MgcHJvamVjdGVkTWFwSW1hZ2VMb2dnZXJFQ2xhc3MgPSBudWxsOworCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJpdmF0ZSBFQ2xhc3MgbWFwVmlld0ltYWdlV3JpdGVyTG9nZ2VyRUNsYXNzID0gbnVsbDsKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByaXZhdGUgRUNsYXNzIGVxdWlyZWN0YW5ndWxhck1hcExvZ2dlckVDbGFzcyA9IG51bGw7CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcml2YXRlIEVFbnVtIG1hUF9QUk9KRUNUSU9OU0VFbnVtID0gbnVsbDsKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByaXZhdGUgRURhdGFUeXBlIGlNYXBQcm9qZWN0aW9uRURhdGFUeXBlID0gbnVsbDsKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByaXZhdGUgRURhdGFUeXBlIGNvbG9yUHJvdmlkZXJFRGF0YVR5cGUgPSBudWxsOworCisJLyoqCisJICogQ3JlYXRlcyBhbiBpbnN0YW5jZSBvZiB0aGUgbW9kZWwgPGI+UGFja2FnZTwvYj4sIHJlZ2lzdGVyZWQgd2l0aAorCSAqIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRVBhY2thZ2UuUmVnaXN0cnkgRVBhY2thZ2UuUmVnaXN0cnl9IGJ5IHRoZSBwYWNrYWdlCisJICogcGFja2FnZSBVUkkgdmFsdWUuCisJICogPHA+Tm90ZTogdGhlIGNvcnJlY3Qgd2F5IHRvIGNyZWF0ZSB0aGUgcGFja2FnZSBpcyB2aWEgdGhlIHN0YXRpYworCSAqIGZhY3RvcnkgbWV0aG9kIHtAbGluayAjaW5pdCBpbml0KCl9LCB3aGljaCBhbHNvIHBlcmZvcm1zCisJICogaW5pdGlhbGl6YXRpb24gb2YgdGhlIHBhY2thZ2UsIG9yIHJldHVybnMgdGhlIHJlZ2lzdGVyZWQgcGFja2FnZSwKKwkgKiBpZiBvbmUgYWxyZWFkeSBleGlzdHMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FUGFja2FnZS5SZWdpc3RyeQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzLmltYWdld3JpdGVyLkltYWdld3JpdGVyUGFja2FnZSNlTlNfVVJJCisJICogQHNlZSAjaW5pdCgpCisJICogQGdlbmVyYXRlZAorCSAqLworCXByaXZhdGUgSW1hZ2V3cml0ZXJQYWNrYWdlSW1wbCgpIHsKKwkJc3VwZXIoZU5TX1VSSSwgSW1hZ2V3cml0ZXJGYWN0b3J5LmVJTlNUQU5DRSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJpdmF0ZSBzdGF0aWMgYm9vbGVhbiBpc0luaXRlZCA9IGZhbHNlOworCisJLyoqCisJICogQ3JlYXRlcywgcmVnaXN0ZXJzLCBhbmQgaW5pdGlhbGl6ZXMgdGhlIDxiPlBhY2thZ2U8L2I+IGZvciB0aGlzIG1vZGVsLCBhbmQgZm9yIGFueSBvdGhlcnMgdXBvbiB3aGljaCBpdCBkZXBlbmRzLgorCSAqIAorCSAqIDxwPlRoaXMgbWV0aG9kIGlzIHVzZWQgdG8gaW5pdGlhbGl6ZSB7QGxpbmsgSW1hZ2V3cml0ZXJQYWNrYWdlI2VJTlNUQU5DRX0gd2hlbiB0aGF0IGZpZWxkIGlzIGFjY2Vzc2VkLgorCSAqIENsaWVudHMgc2hvdWxkIG5vdCBpbnZva2UgaXQgZGlyZWN0bHkuIEluc3RlYWQsIHRoZXkgc2hvdWxkIHNpbXBseSBhY2Nlc3MgdGhhdCBmaWVsZCB0byBvYnRhaW4gdGhlIHBhY2thZ2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNlTlNfVVJJCisJICogQHNlZSAjY3JlYXRlUGFja2FnZUNvbnRlbnRzKCkKKwkgKiBAc2VlICNpbml0aWFsaXplUGFja2FnZUNvbnRlbnRzKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHN0YXRpYyBJbWFnZXdyaXRlclBhY2thZ2UgaW5pdCgpIHsKKwkJaWYgKGlzSW5pdGVkKSByZXR1cm4gKEltYWdld3JpdGVyUGFja2FnZSlFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShJbWFnZXdyaXRlclBhY2thZ2UuZU5TX1VSSSk7CisKKwkJLy8gT2J0YWluIG9yIGNyZWF0ZSBhbmQgcmVnaXN0ZXIgcGFja2FnZQorCQlJbWFnZXdyaXRlclBhY2thZ2VJbXBsIHRoZUltYWdld3JpdGVyUGFja2FnZSA9IChJbWFnZXdyaXRlclBhY2thZ2VJbXBsKShFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXQoZU5TX1VSSSkgaW5zdGFuY2VvZiBJbWFnZXdyaXRlclBhY2thZ2VJbXBsID8gRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0KGVOU19VUkkpIDogbmV3IEltYWdld3JpdGVyUGFja2FnZUltcGwoKSk7CisKKwkJaXNJbml0ZWQgPSB0cnVlOworCisJCS8vIEluaXRpYWxpemUgc2ltcGxlIGRlcGVuZGVuY2llcworCQlTaW11bGF0aW9uTG9nZ2VyUGFja2FnZS5lSU5TVEFOQ0UuZUNsYXNzKCk7CisKKwkJLy8gQ3JlYXRlIHBhY2thZ2UgbWV0YS1kYXRhIG9iamVjdHMKKwkJdGhlSW1hZ2V3cml0ZXJQYWNrYWdlLmNyZWF0ZVBhY2thZ2VDb250ZW50cygpOworCisJCS8vIEluaXRpYWxpemUgY3JlYXRlZCBtZXRhLWRhdGEKKwkJdGhlSW1hZ2V3cml0ZXJQYWNrYWdlLmluaXRpYWxpemVQYWNrYWdlQ29udGVudHMoKTsKKworCQkvLyBNYXJrIG1ldGEtZGF0YSB0byBpbmRpY2F0ZSBpdCBjYW4ndCBiZSBjaGFuZ2VkCisJCXRoZUltYWdld3JpdGVyUGFja2FnZS5mcmVlemUoKTsKKworICAKKwkJLy8gVXBkYXRlIHRoZSByZWdpc3RyeSBhbmQgcmV0dXJuIHRoZSBwYWNrYWdlCisJCUVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLnB1dChJbWFnZXdyaXRlclBhY2thZ2UuZU5TX1VSSSwgdGhlSW1hZ2V3cml0ZXJQYWNrYWdlKTsKKwkJcmV0dXJuIHRoZUltYWdld3JpdGVyUGFja2FnZTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUNsYXNzIGdldEltYWdlV3JpdGVyTG9nZ2VyKCkgeworCQlyZXR1cm4gaW1hZ2VXcml0ZXJMb2dnZXJFQ2xhc3M7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVBdHRyaWJ1dGUgZ2V0SW1hZ2VXcml0ZXJMb2dnZXJfVXNlRGVmYXVsdExvZ0RpcmVjdG9yeSgpIHsKKwkJcmV0dXJuIChFQXR0cmlidXRlKWltYWdlV3JpdGVyTG9nZ2VyRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVBdHRyaWJ1dGUgZ2V0SW1hZ2VXcml0ZXJMb2dnZXJfRGF0YVBhdGgoKSB7CisJCXJldHVybiAoRUF0dHJpYnV0ZSlpbWFnZVdyaXRlckxvZ2dlckVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDEpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQ2xhc3MgZ2V0UHJvamVjdGVkTWFwSW1hZ2VMb2dnZXIoKSB7CisJCXJldHVybiBwcm9qZWN0ZWRNYXBJbWFnZUxvZ2dlckVDbGFzczsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUF0dHJpYnV0ZSBnZXRQcm9qZWN0ZWRNYXBJbWFnZUxvZ2dlcl9Vc2VMb2dTY2FsaW5nKCkgeworCQlyZXR1cm4gKEVBdHRyaWJ1dGUpcHJvamVjdGVkTWFwSW1hZ2VMb2dnZXJFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgwKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUF0dHJpYnV0ZSBnZXRQcm9qZWN0ZWRNYXBJbWFnZUxvZ2dlcl9HYWluKCkgeworCQlyZXR1cm4gKEVBdHRyaWJ1dGUpcHJvamVjdGVkTWFwSW1hZ2VMb2dnZXJFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgxKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUF0dHJpYnV0ZSBnZXRQcm9qZWN0ZWRNYXBJbWFnZUxvZ2dlcl9Mb2dBbGxEZWNvcmF0b3JzKCkgeworCQlyZXR1cm4gKEVBdHRyaWJ1dGUpcHJvamVjdGVkTWFwSW1hZ2VMb2dnZXJFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgyKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUF0dHJpYnV0ZSBnZXRQcm9qZWN0ZWRNYXBJbWFnZUxvZ2dlcl9Db2xvclByb3ZpZGVyKCkgeworCQlyZXR1cm4gKEVBdHRyaWJ1dGUpcHJvamVjdGVkTWFwSW1hZ2VMb2dnZXJFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgzKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRVJlZmVyZW5jZSBnZXRQcm9qZWN0ZWRNYXBJbWFnZUxvZ2dlcl9EZWNvcmF0b3IoKSB7CisJCXJldHVybiAoRVJlZmVyZW5jZSlwcm9qZWN0ZWRNYXBJbWFnZUxvZ2dlckVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDQpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQXR0cmlidXRlIGdldFByb2plY3RlZE1hcEltYWdlTG9nZ2VyX0RlY29yYXRvclByb3BlcnRpZXMoKSB7CisJCXJldHVybiAoRUF0dHJpYnV0ZSlwcm9qZWN0ZWRNYXBJbWFnZUxvZ2dlckVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDUpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQXR0cmlidXRlIGdldFByb2plY3RlZE1hcEltYWdlTG9nZ2VyX1dpZHRoKCkgeworCQlyZXR1cm4gKEVBdHRyaWJ1dGUpcHJvamVjdGVkTWFwSW1hZ2VMb2dnZXJFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCg2KTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUF0dHJpYnV0ZSBnZXRQcm9qZWN0ZWRNYXBJbWFnZUxvZ2dlcl9IZWlnaHQoKSB7CisJCXJldHVybiAoRUF0dHJpYnV0ZSlwcm9qZWN0ZWRNYXBJbWFnZUxvZ2dlckVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDcpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQXR0cmlidXRlIGdldFByb2plY3RlZE1hcEltYWdlTG9nZ2VyX1Byb2plY3Rpb24oKSB7CisJCXJldHVybiAoRUF0dHJpYnV0ZSlwcm9qZWN0ZWRNYXBJbWFnZUxvZ2dlckVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDgpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQ2xhc3MgZ2V0TWFwVmlld0ltYWdlV3JpdGVyTG9nZ2VyKCkgeworCQlyZXR1cm4gbWFwVmlld0ltYWdlV3JpdGVyTG9nZ2VyRUNsYXNzOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQXR0cmlidXRlIGdldE1hcFZpZXdJbWFnZVdyaXRlckxvZ2dlcl9PcGVuTWFwVmlldygpIHsKKwkJcmV0dXJuIChFQXR0cmlidXRlKW1hcFZpZXdJbWFnZVdyaXRlckxvZ2dlckVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDApOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQ2xhc3MgZ2V0RXF1aXJlY3Rhbmd1bGFyTWFwTG9nZ2VyKCkgeworCQlyZXR1cm4gZXF1aXJlY3Rhbmd1bGFyTWFwTG9nZ2VyRUNsYXNzOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFRW51bSBnZXRNQVBfUFJPSkVDVElPTlMoKSB7CisJCXJldHVybiBtYVBfUFJPSkVDVElPTlNFRW51bTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRURhdGFUeXBlIGdldElNYXBQcm9qZWN0aW9uKCkgeworCQlyZXR1cm4gaU1hcFByb2plY3Rpb25FRGF0YVR5cGU7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVEYXRhVHlwZSBnZXRDb2xvclByb3ZpZGVyKCkgeworCQlyZXR1cm4gY29sb3JQcm92aWRlckVEYXRhVHlwZTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgSW1hZ2V3cml0ZXJGYWN0b3J5IGdldEltYWdld3JpdGVyRmFjdG9yeSgpIHsKKwkJcmV0dXJuIChJbWFnZXdyaXRlckZhY3RvcnkpZ2V0RUZhY3RvcnlJbnN0YW5jZSgpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByaXZhdGUgYm9vbGVhbiBpc0NyZWF0ZWQgPSBmYWxzZTsKKworCS8qKgorCSAqIENyZWF0ZXMgdGhlIG1ldGEtbW9kZWwgb2JqZWN0cyBmb3IgdGhlIHBhY2thZ2UuICBUaGlzIG1ldGhvZCBpcworCSAqIGd1YXJkZWQgdG8gaGF2ZSBubyBhZmZlY3Qgb24gYW55IGludm9jYXRpb24gYnV0IGl0cyBmaXJzdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBjcmVhdGVQYWNrYWdlQ29udGVudHMoKSB7CisJCWlmIChpc0NyZWF0ZWQpIHJldHVybjsKKwkJaXNDcmVhdGVkID0gdHJ1ZTsKKworCQkvLyBDcmVhdGUgY2xhc3NlcyBhbmQgdGhlaXIgZmVhdHVyZXMKKwkJaW1hZ2VXcml0ZXJMb2dnZXJFQ2xhc3MgPSBjcmVhdGVFQ2xhc3MoSU1BR0VfV1JJVEVSX0xPR0dFUik7CisJCWNyZWF0ZUVBdHRyaWJ1dGUoaW1hZ2VXcml0ZXJMb2dnZXJFQ2xhc3MsIElNQUdFX1dSSVRFUl9MT0dHRVJfX1VTRV9ERUZBVUxUX0xPR19ESVJFQ1RPUlkpOworCQljcmVhdGVFQXR0cmlidXRlKGltYWdlV3JpdGVyTG9nZ2VyRUNsYXNzLCBJTUFHRV9XUklURVJfTE9HR0VSX19EQVRBX1BBVEgpOworCisJCXByb2plY3RlZE1hcEltYWdlTG9nZ2VyRUNsYXNzID0gY3JlYXRlRUNsYXNzKFBST0pFQ1RFRF9NQVBfSU1BR0VfTE9HR0VSKTsKKwkJY3JlYXRlRUF0dHJpYnV0ZShwcm9qZWN0ZWRNYXBJbWFnZUxvZ2dlckVDbGFzcywgUFJPSkVDVEVEX01BUF9JTUFHRV9MT0dHRVJfX1VTRV9MT0dfU0NBTElORyk7CisJCWNyZWF0ZUVBdHRyaWJ1dGUocHJvamVjdGVkTWFwSW1hZ2VMb2dnZXJFQ2xhc3MsIFBST0pFQ1RFRF9NQVBfSU1BR0VfTE9HR0VSX19HQUlOKTsKKwkJY3JlYXRlRUF0dHJpYnV0ZShwcm9qZWN0ZWRNYXBJbWFnZUxvZ2dlckVDbGFzcywgUFJPSkVDVEVEX01BUF9JTUFHRV9MT0dHRVJfX0xPR19BTExfREVDT1JBVE9SUyk7CisJCWNyZWF0ZUVBdHRyaWJ1dGUocHJvamVjdGVkTWFwSW1hZ2VMb2dnZXJFQ2xhc3MsIFBST0pFQ1RFRF9NQVBfSU1BR0VfTE9HR0VSX19DT0xPUl9QUk9WSURFUik7CisJCWNyZWF0ZUVSZWZlcmVuY2UocHJvamVjdGVkTWFwSW1hZ2VMb2dnZXJFQ2xhc3MsIFBST0pFQ1RFRF9NQVBfSU1BR0VfTE9HR0VSX19ERUNPUkFUT1IpOworCQljcmVhdGVFQXR0cmlidXRlKHByb2plY3RlZE1hcEltYWdlTG9nZ2VyRUNsYXNzLCBQUk9KRUNURURfTUFQX0lNQUdFX0xPR0dFUl9fREVDT1JBVE9SX1BST1BFUlRJRVMpOworCQljcmVhdGVFQXR0cmlidXRlKHByb2plY3RlZE1hcEltYWdlTG9nZ2VyRUNsYXNzLCBQUk9KRUNURURfTUFQX0lNQUdFX0xPR0dFUl9fV0lEVEgpOworCQljcmVhdGVFQXR0cmlidXRlKHByb2plY3RlZE1hcEltYWdlTG9nZ2VyRUNsYXNzLCBQUk9KRUNURURfTUFQX0lNQUdFX0xPR0dFUl9fSEVJR0hUKTsKKwkJY3JlYXRlRUF0dHJpYnV0ZShwcm9qZWN0ZWRNYXBJbWFnZUxvZ2dlckVDbGFzcywgUFJPSkVDVEVEX01BUF9JTUFHRV9MT0dHRVJfX1BST0pFQ1RJT04pOworCisJCW1hcFZpZXdJbWFnZVdyaXRlckxvZ2dlckVDbGFzcyA9IGNyZWF0ZUVDbGFzcyhNQVBfVklFV19JTUFHRV9XUklURVJfTE9HR0VSKTsKKwkJY3JlYXRlRUF0dHJpYnV0ZShtYXBWaWV3SW1hZ2VXcml0ZXJMb2dnZXJFQ2xhc3MsIE1BUF9WSUVXX0lNQUdFX1dSSVRFUl9MT0dHRVJfX09QRU5fTUFQX1ZJRVcpOworCisJCWVxdWlyZWN0YW5ndWxhck1hcExvZ2dlckVDbGFzcyA9IGNyZWF0ZUVDbGFzcyhFUVVJUkVDVEFOR1VMQVJfTUFQX0xPR0dFUik7CisKKwkJLy8gQ3JlYXRlIGVudW1zCisJCW1hUF9QUk9KRUNUSU9OU0VFbnVtID0gY3JlYXRlRUVudW0oTUFQX1BST0pFQ1RJT05TKTsKKworCQkvLyBDcmVhdGUgZGF0YSB0eXBlcworCQlpTWFwUHJvamVjdGlvbkVEYXRhVHlwZSA9IGNyZWF0ZUVEYXRhVHlwZShJTUFQX1BST0pFQ1RJT04pOworCQljb2xvclByb3ZpZGVyRURhdGFUeXBlID0gY3JlYXRlRURhdGFUeXBlKENPTE9SX1BST1ZJREVSKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcml2YXRlIGJvb2xlYW4gaXNJbml0aWFsaXplZCA9IGZhbHNlOworCisJLyoqCisJICogQ29tcGxldGUgdGhlIGluaXRpYWxpemF0aW9uIG9mIHRoZSBwYWNrYWdlIGFuZCBpdHMgbWV0YS1tb2RlbC4gIFRoaXMKKwkgKiBtZXRob2QgaXMgZ3VhcmRlZCB0byBoYXZlIG5vIGFmZmVjdCBvbiBhbnkgaW52b2NhdGlvbiBidXQgaXRzIGZpcnN0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIGluaXRpYWxpemVQYWNrYWdlQ29udGVudHMoKSB7CisJCWlmIChpc0luaXRpYWxpemVkKSByZXR1cm47CisJCWlzSW5pdGlhbGl6ZWQgPSB0cnVlOworCisJCS8vIEluaXRpYWxpemUgcGFja2FnZQorCQlzZXROYW1lKGVOQU1FKTsKKwkJc2V0TnNQcmVmaXgoZU5TX1BSRUZJWCk7CisJCXNldE5zVVJJKGVOU19VUkkpOworCisJCS8vIE9idGFpbiBvdGhlciBkZXBlbmRlbnQgcGFja2FnZXMKKwkJU2ltdWxhdGlvbkxvZ2dlclBhY2thZ2UgdGhlU2ltdWxhdGlvbkxvZ2dlclBhY2thZ2UgPSAoU2ltdWxhdGlvbkxvZ2dlclBhY2thZ2UpRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RVBhY2thZ2UoU2ltdWxhdGlvbkxvZ2dlclBhY2thZ2UuZU5TX1VSSSk7CisJCU1vZGVsUGFja2FnZSB0aGVNb2RlbFBhY2thZ2UgPSAoTW9kZWxQYWNrYWdlKUVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVQYWNrYWdlKE1vZGVsUGFja2FnZS5lTlNfVVJJKTsKKworCQkvLyBDcmVhdGUgdHlwZSBwYXJhbWV0ZXJzCisKKwkJLy8gU2V0IGJvdW5kcyBmb3IgdHlwZSBwYXJhbWV0ZXJzCisKKwkJLy8gQWRkIHN1cGVydHlwZXMgdG8gY2xhc3NlcworCQlpbWFnZVdyaXRlckxvZ2dlckVDbGFzcy5nZXRFU3VwZXJUeXBlcygpLmFkZCh0aGVTaW11bGF0aW9uTG9nZ2VyUGFja2FnZS5nZXRTeW5jaHJvbm91c0xvZ2dlcigpKTsKKwkJcHJvamVjdGVkTWFwSW1hZ2VMb2dnZXJFQ2xhc3MuZ2V0RVN1cGVyVHlwZXMoKS5hZGQodGhpcy5nZXRJbWFnZVdyaXRlckxvZ2dlcigpKTsKKwkJbWFwVmlld0ltYWdlV3JpdGVyTG9nZ2VyRUNsYXNzLmdldEVTdXBlclR5cGVzKCkuYWRkKHRoaXMuZ2V0SW1hZ2VXcml0ZXJMb2dnZXIoKSk7CisJCWVxdWlyZWN0YW5ndWxhck1hcExvZ2dlckVDbGFzcy5nZXRFU3VwZXJUeXBlcygpLmFkZCh0aGlzLmdldFByb2plY3RlZE1hcEltYWdlTG9nZ2VyKCkpOworCisJCS8vIEluaXRpYWxpemUgY2xhc3NlcyBhbmQgZmVhdHVyZXM7IGFkZCBvcGVyYXRpb25zIGFuZCBwYXJhbWV0ZXJzCisJCWluaXRFQ2xhc3MoaW1hZ2VXcml0ZXJMb2dnZXJFQ2xhc3MsIEltYWdlV3JpdGVyTG9nZ2VyLmNsYXNzLCAiSW1hZ2VXcml0ZXJMb2dnZXIiLCBJU19BQlNUUkFDVCwgIUlTX0lOVEVSRkFDRSwgSVNfR0VORVJBVEVEX0lOU1RBTkNFX0NMQVNTKTsKKwkJaW5pdEVBdHRyaWJ1dGUoZ2V0SW1hZ2VXcml0ZXJMb2dnZXJfVXNlRGVmYXVsdExvZ0RpcmVjdG9yeSgpLCBlY29yZVBhY2thZ2UuZ2V0RUJvb2xlYW4oKSwgInVzZURlZmF1bHRMb2dEaXJlY3RvcnkiLCAidHJ1ZSIsIDAsIDEsIEltYWdlV3JpdGVyTG9nZ2VyLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOworCQlpbml0RUF0dHJpYnV0ZShnZXRJbWFnZVdyaXRlckxvZ2dlcl9EYXRhUGF0aCgpLCBlY29yZVBhY2thZ2UuZ2V0RVN0cmluZygpLCAiZGF0YVBhdGgiLCBudWxsLCAwLCAxLCBJbWFnZVdyaXRlckxvZ2dlci5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsKKworCQlpbml0RUNsYXNzKHByb2plY3RlZE1hcEltYWdlTG9nZ2VyRUNsYXNzLCBQcm9qZWN0ZWRNYXBJbWFnZUxvZ2dlci5jbGFzcywgIlByb2plY3RlZE1hcEltYWdlTG9nZ2VyIiwgSVNfQUJTVFJBQ1QsICFJU19JTlRFUkZBQ0UsIElTX0dFTkVSQVRFRF9JTlNUQU5DRV9DTEFTUyk7CisJCWluaXRFQXR0cmlidXRlKGdldFByb2plY3RlZE1hcEltYWdlTG9nZ2VyX1VzZUxvZ1NjYWxpbmcoKSwgZWNvcmVQYWNrYWdlLmdldEVCb29sZWFuKCksICJ1c2VMb2dTY2FsaW5nIiwgInRydWUiLCAxLCAxLCBQcm9qZWN0ZWRNYXBJbWFnZUxvZ2dlci5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsKKwkJaW5pdEVBdHRyaWJ1dGUoZ2V0UHJvamVjdGVkTWFwSW1hZ2VMb2dnZXJfR2FpbigpLCBlY29yZVBhY2thZ2UuZ2V0RUZsb2F0KCksICJnYWluIiwgIjEuMCIsIDEsIDEsIFByb2plY3RlZE1hcEltYWdlTG9nZ2VyLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOworCQlpbml0RUF0dHJpYnV0ZShnZXRQcm9qZWN0ZWRNYXBJbWFnZUxvZ2dlcl9Mb2dBbGxEZWNvcmF0b3JzKCksIGVjb3JlUGFja2FnZS5nZXRFQm9vbGVhbigpLCAibG9nQWxsRGVjb3JhdG9ycyIsICJmYWxzZSIsIDEsIDEsIFByb2plY3RlZE1hcEltYWdlTG9nZ2VyLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOworCQlpbml0RUF0dHJpYnV0ZShnZXRQcm9qZWN0ZWRNYXBJbWFnZUxvZ2dlcl9Db2xvclByb3ZpZGVyKCksIHRoaXMuZ2V0Q29sb3JQcm92aWRlcigpLCAiY29sb3JQcm92aWRlciIsIG51bGwsIDAsIDEsIFByb2plY3RlZE1hcEltYWdlTG9nZ2VyLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOworCQlpbml0RVJlZmVyZW5jZShnZXRQcm9qZWN0ZWRNYXBJbWFnZUxvZ2dlcl9EZWNvcmF0b3IoKSwgdGhlTW9kZWxQYWNrYWdlLmdldERlY29yYXRvcigpLCBudWxsLCAiZGVjb3JhdG9yIiwgbnVsbCwgMCwgMSwgUHJvamVjdGVkTWFwSW1hZ2VMb2dnZXIuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX0NPTVBPU0lURSwgSVNfUkVTT0xWRV9QUk9YSUVTLCAhSVNfVU5TRVRUQUJMRSwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7CisJCWluaXRFQXR0cmlidXRlKGdldFByb2plY3RlZE1hcEltYWdlTG9nZ2VyX0RlY29yYXRvclByb3BlcnRpZXMoKSwgZWNvcmVQYWNrYWdlLmdldEVTdHJpbmcoKSwgImRlY29yYXRvclByb3BlcnRpZXMiLCBudWxsLCAwLCAxLCBQcm9qZWN0ZWRNYXBJbWFnZUxvZ2dlci5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsKKwkJaW5pdEVBdHRyaWJ1dGUoZ2V0UHJvamVjdGVkTWFwSW1hZ2VMb2dnZXJfV2lkdGgoKSwgZWNvcmVQYWNrYWdlLmdldEVJbnQoKSwgIndpZHRoIiwgIjEwMDAiLCAwLCAxLCBQcm9qZWN0ZWRNYXBJbWFnZUxvZ2dlci5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsKKwkJaW5pdEVBdHRyaWJ1dGUoZ2V0UHJvamVjdGVkTWFwSW1hZ2VMb2dnZXJfSGVpZ2h0KCksIGVjb3JlUGFja2FnZS5nZXRFSW50KCksICJoZWlnaHQiLCAiNTAwIiwgMCwgMSwgUHJvamVjdGVkTWFwSW1hZ2VMb2dnZXIuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7CisJCWluaXRFQXR0cmlidXRlKGdldFByb2plY3RlZE1hcEltYWdlTG9nZ2VyX1Byb2plY3Rpb24oKSwgdGhpcy5nZXRJTWFwUHJvamVjdGlvbigpLCAicHJvamVjdGlvbiIsICIiLCAwLCAxLCBQcm9qZWN0ZWRNYXBJbWFnZUxvZ2dlci5jbGFzcywgSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOworCisJCWluaXRFQ2xhc3MobWFwVmlld0ltYWdlV3JpdGVyTG9nZ2VyRUNsYXNzLCBNYXBWaWV3SW1hZ2VXcml0ZXJMb2dnZXIuY2xhc3MsICJNYXBWaWV3SW1hZ2VXcml0ZXJMb2dnZXIiLCAhSVNfQUJTVFJBQ1QsICFJU19JTlRFUkZBQ0UsIElTX0dFTkVSQVRFRF9JTlNUQU5DRV9DTEFTUyk7CisJCWluaXRFQXR0cmlidXRlKGdldE1hcFZpZXdJbWFnZVdyaXRlckxvZ2dlcl9PcGVuTWFwVmlldygpLCBlY29yZVBhY2thZ2UuZ2V0RUJvb2xlYW4oKSwgIm9wZW5NYXBWaWV3IiwgInRydWUiLCAwLCAxLCBNYXBWaWV3SW1hZ2VXcml0ZXJMb2dnZXIuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7CisKKwkJaW5pdEVDbGFzcyhlcXVpcmVjdGFuZ3VsYXJNYXBMb2dnZXJFQ2xhc3MsIEVxdWlyZWN0YW5ndWxhck1hcExvZ2dlci5jbGFzcywgIkVxdWlyZWN0YW5ndWxhck1hcExvZ2dlciIsICFJU19BQlNUUkFDVCwgIUlTX0lOVEVSRkFDRSwgSVNfR0VORVJBVEVEX0lOU1RBTkNFX0NMQVNTKTsKKworCQkvLyBJbml0aWFsaXplIGVudW1zIGFuZCBhZGQgZW51bSBsaXRlcmFscworCQlpbml0RUVudW0obWFQX1BST0pFQ1RJT05TRUVudW0sIG9yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy5pbWFnZXdyaXRlci5NQVBfUFJPSkVDVElPTlMuY2xhc3MsICJNQVBfUFJPSkVDVElPTlMiKTsKKwkJYWRkRUVudW1MaXRlcmFsKG1hUF9QUk9KRUNUSU9OU0VFbnVtLCBvcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMuaW1hZ2V3cml0ZXIuTUFQX1BST0pFQ1RJT05TLkVRVUlSRUNUQU5HVUxBUik7CisJCWFkZEVFbnVtTGl0ZXJhbChtYVBfUFJPSkVDVElPTlNFRW51bSwgb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzLmltYWdld3JpdGVyLk1BUF9QUk9KRUNUSU9OUy5NRVJDQVRPUik7CisKKwkJLy8gSW5pdGlhbGl6ZSBkYXRhIHR5cGVzCisJCWluaXRFRGF0YVR5cGUoaU1hcFByb2plY3Rpb25FRGF0YVR5cGUsIElNYXBQcm9qZWN0aW9uLmNsYXNzLCAiSU1hcFByb2plY3Rpb24iLCBJU19TRVJJQUxJWkFCTEUsICFJU19HRU5FUkFURURfSU5TVEFOQ0VfQ0xBU1MpOworCQlpbml0RURhdGFUeXBlKGNvbG9yUHJvdmlkZXJFRGF0YVR5cGUsIENvbG9yUHJvdmlkZXIuY2xhc3MsICJDb2xvclByb3ZpZGVyIiwgSVNfU0VSSUFMSVpBQkxFLCAhSVNfR0VORVJBVEVEX0lOU1RBTkNFX0NMQVNTKTsKKworCQkvLyBDcmVhdGUgcmVzb3VyY2UKKwkJY3JlYXRlUmVzb3VyY2UoZU5TX1VSSSk7CisJfQorCit9IC8vSW1hZ2V3cml0ZXJQYWNrYWdlSW1wbApkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMuaW1hZ2V3cml0ZXIvc3JjL29yZy9lY2xpcHNlL3N0ZW0vbG9nZ2Vycy9pbWFnZXdyaXRlci9pbXBsL01hcFZpZXdJbWFnZVdyaXRlckxvZ2dlckltcGwuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzLmltYWdld3JpdGVyL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2xvZ2dlcnMvaW1hZ2V3cml0ZXIvaW1wbC9NYXBWaWV3SW1hZ2VXcml0ZXJMb2dnZXJJbXBsLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWExYjIxYgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzLmltYWdld3JpdGVyL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2xvZ2dlcnMvaW1hZ2V3cml0ZXIvaW1wbC9NYXBWaWV3SW1hZ2VXcml0ZXJMb2dnZXJJbXBsLmphdmEKQEAgLTAsMCArMSwzNjUgQEAKKy8qKgorICogPGNvcHlyaWdodD4KKyAqIDwvY29weXJpZ2h0PgorICoKKyAqICRJZCQKKyAqLworcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMuaW1hZ2V3cml0ZXIuaW1wbDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbjsKK2ltcG9ydCBqYXZhLmlvLkZpbGU7CitpbXBvcnQgamF2YS50ZXh0LlNpbXBsZURhdGVGb3JtYXQ7CitpbXBvcnQgamF2YS51dGlsLkxvY2FsZTsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUGF0aDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5pbXBsLkVOb3RpZmljYXRpb25JbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uYWRhcHRlcnMudGltZS5UaW1lUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5hZGFwdGVycy50aW1lLlRpbWVQcm92aWRlckFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5TVEVNVGltZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmpvYnMuRGlzcGxheVNhZmVFeGVjdXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmpvYnMuc2ltdWxhdGlvbi5JU2ltdWxhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmpvYnMuc2ltdWxhdGlvbi5TaW11bGF0aW9uRXZlbnQ7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5qb2JzLnNpbXVsYXRpb24uU2ltdWxhdGlvblN0YXRlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy5MT0dHRVJfRVZFTlRTOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy5pbWFnZXdyaXRlci5BY3RpdmF0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzLmltYWdld3JpdGVyLkltYWdld3JpdGVyUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMuaW1hZ2V3cml0ZXIuTWFwVmlld0ltYWdlV3JpdGVyTG9nZ2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udWkudmlld3MuZ2VvZ3JhcGhpYy5HZW9ncmFwaGljQ29udHJvbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnVpLnZpZXdzLmdlb2dyYXBoaWMuR2VvZ3JhcGhpY1ZpZXdlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnVpLnZpZXdzLmdlb2dyYXBoaWMubWFwLk1hcFZpZXc7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LlNXVDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZ3JhcGhpY3MuSW1hZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmdyYXBoaWNzLkltYWdlRGF0YTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZ3JhcGhpY3MuSW1hZ2VMb2FkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbnRyb2w7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuSVZpZXdQYXJ0OworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklWaWV3UmVmZXJlbmNlOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2hQYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLlBhcnRJbml0RXhjZXB0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLlBsYXRmb3JtVUk7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIEFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5NYXAgVmlldyBJbWFnZSBXcml0ZXIgTG9nZ2VyPC9iPjwvZW0+Jy4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogPHA+CisgKiBUaGUgZm9sbG93aW5nIGZlYXR1cmVzIGFyZSBpbXBsZW1lbnRlZDoKKyAqIDx1bD4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMuaW1hZ2V3cml0ZXIuaW1wbC5NYXBWaWV3SW1hZ2VXcml0ZXJMb2dnZXJJbXBsI2lzT3Blbk1hcFZpZXcgPGVtPk9wZW4gTWFwIFZpZXc8L2VtPn08L2xpPgorICogPC91bD4KKyAqIDwvcD4KKyAqCisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBNYXBWaWV3SW1hZ2VXcml0ZXJMb2dnZXJJbXBsIGV4dGVuZHMgSW1hZ2VXcml0ZXJMb2dnZXJJbXBsIGltcGxlbWVudHMgTWFwVmlld0ltYWdlV3JpdGVyTG9nZ2VyIHsKKwkvKioKKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjaXNPcGVuTWFwVmlldygpIDxlbT5PcGVuIE1hcCBWaWV3PC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNpc09wZW5NYXBWaWV3KCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIGJvb2xlYW4gT1BFTl9NQVBfVklFV19FREVGQVVMVCA9IHRydWU7CisKKwkvKioKKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNpc09wZW5NYXBWaWV3KCkgPGVtPk9wZW4gTWFwIFZpZXc8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI2lzT3Blbk1hcFZpZXcoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBib29sZWFuIG9wZW5NYXBWaWV3ID0gT1BFTl9NQVBfVklFV19FREVGQVVMVDsKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBNYXBWaWV3SW1hZ2VXcml0ZXJMb2dnZXJJbXBsKCkgeworCQlzdXBlcigpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCBFQ2xhc3MgZVN0YXRpY0NsYXNzKCkgeworCQlyZXR1cm4gSW1hZ2V3cml0ZXJQYWNrYWdlLkxpdGVyYWxzLk1BUF9WSUVXX0lNQUdFX1dSSVRFUl9MT0dHRVI7CisJfQorCisJCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIGJvb2xlYW4gaXNPcGVuTWFwVmlldygpIHsKKwkJcmV0dXJuIG9wZW5NYXBWaWV3OworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIHNldE9wZW5NYXBWaWV3KGJvb2xlYW4gbmV3T3Blbk1hcFZpZXcpIHsKKwkJYm9vbGVhbiBvbGRPcGVuTWFwVmlldyA9IG9wZW5NYXBWaWV3OworCQlvcGVuTWFwVmlldyA9IG5ld09wZW5NYXBWaWV3OworCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpCisJCQllTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBJbWFnZXdyaXRlclBhY2thZ2UuTUFQX1ZJRVdfSU1BR0VfV1JJVEVSX0xPR0dFUl9fT1BFTl9NQVBfVklFVywgb2xkT3Blbk1hcFZpZXcsIG9wZW5NYXBWaWV3KSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIE9iamVjdCBlR2V0KGludCBmZWF0dXJlSUQsIGJvb2xlYW4gcmVzb2x2ZSwgYm9vbGVhbiBjb3JlVHlwZSkgeworCQlzd2l0Y2ggKGZlYXR1cmVJRCkgeworCQkJY2FzZSBJbWFnZXdyaXRlclBhY2thZ2UuTUFQX1ZJRVdfSU1BR0VfV1JJVEVSX0xPR0dFUl9fT1BFTl9NQVBfVklFVzoKKwkJCQlyZXR1cm4gaXNPcGVuTWFwVmlldygpOworCQl9CisJCXJldHVybiBzdXBlci5lR2V0KGZlYXR1cmVJRCwgcmVzb2x2ZSwgY29yZVR5cGUpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGVTZXQoaW50IGZlYXR1cmVJRCwgT2JqZWN0IG5ld1ZhbHVlKSB7CisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7CisJCQljYXNlIEltYWdld3JpdGVyUGFja2FnZS5NQVBfVklFV19JTUFHRV9XUklURVJfTE9HR0VSX19PUEVOX01BUF9WSUVXOgorCQkJCXNldE9wZW5NYXBWaWV3KChCb29sZWFuKW5ld1ZhbHVlKTsKKwkJCQlyZXR1cm47CisJCX0KKwkJc3VwZXIuZVNldChmZWF0dXJlSUQsIG5ld1ZhbHVlKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBlVW5zZXQoaW50IGZlYXR1cmVJRCkgeworCQlzd2l0Y2ggKGZlYXR1cmVJRCkgeworCQkJY2FzZSBJbWFnZXdyaXRlclBhY2thZ2UuTUFQX1ZJRVdfSU1BR0VfV1JJVEVSX0xPR0dFUl9fT1BFTl9NQVBfVklFVzoKKwkJCQlzZXRPcGVuTWFwVmlldyhPUEVOX01BUF9WSUVXX0VERUZBVUxUKTsKKwkJCQlyZXR1cm47CisJCX0KKwkJc3VwZXIuZVVuc2V0KGZlYXR1cmVJRCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIGJvb2xlYW4gZUlzU2V0KGludCBmZWF0dXJlSUQpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJCWNhc2UgSW1hZ2V3cml0ZXJQYWNrYWdlLk1BUF9WSUVXX0lNQUdFX1dSSVRFUl9MT0dHRVJfX09QRU5fTUFQX1ZJRVc6CisJCQkJcmV0dXJuIG9wZW5NYXBWaWV3ICE9IE9QRU5fTUFQX1ZJRVdfRURFRkFVTFQ7CisJCX0KKwkJcmV0dXJuIHN1cGVyLmVJc1NldChmZWF0dXJlSUQpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKSB7CisJCWlmIChlSXNQcm94eSgpKSByZXR1cm4gc3VwZXIudG9TdHJpbmcoKTsKKworCQlTdHJpbmdCdWZmZXIgcmVzdWx0ID0gbmV3IFN0cmluZ0J1ZmZlcihzdXBlci50b1N0cmluZygpKTsKKwkJcmVzdWx0LmFwcGVuZCgiIChvcGVuTWFwVmlldzogIik7CisJCXJlc3VsdC5hcHBlbmQob3Blbk1hcFZpZXcpOworCQlyZXN1bHQuYXBwZW5kKCcpJyk7CisJCXJldHVybiByZXN1bHQudG9TdHJpbmcoKTsKKwl9CisJCisJCisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIE1BUF9WSUVXX0lEID0gIm9yZy5lY2xpcHNlLnN0ZW0udWkudmlld3MuZ2VvZ3JhcGhpYy5tYXAiOworCisJcHJpdmF0ZSBNYXBWaWV3IGdldE1hcFZpZXdGcm9tV29ya2JlbmNoKCkKKwl7CisJCQorCQlJVmlld1BhcnQgdmlldyA9IG51bGw7CisJCQorCQlNYXBWaWV3IHJldFZhbHVlID0gbnVsbDsKKwkJaWYgKFBsYXRmb3JtVUkuaXNXb3JrYmVuY2hSdW5uaW5nKCkpIHsKKwkJCUlXb3JrYmVuY2hQYWdlIHBhZ2UgPSBQbGF0Zm9ybVVJLmdldFdvcmtiZW5jaCgpLmdldEFjdGl2ZVdvcmtiZW5jaFdpbmRvdygpLmdldEFjdGl2ZVBhZ2UoKTsKKwkJCWlmIChwYWdlICE9IG51bGwpIHsKKwkJCQkKKwkJCQkvLyBUcnkgdG8gZmluZCB0aGUgdmlldyBkaXJlY3RseQorCQkJCXZpZXcgPSBwYWdlLmZpbmRWaWV3KE1BUF9WSUVXX0lEKTsKKworCQkJCS8vIFRyeSB0byBmaW5kIHRoZSB2aWV3IGJ5IHJlZmVyZW5jZQorCQkJCWlmICh2aWV3ID09IG51bGwgfHwgISh2aWV3IGluc3RhbmNlb2YgTWFwVmlldykpIHsKKwkJCQkJSVZpZXdSZWZlcmVuY2Ugdmlld1JlZiA9IHBhZ2UuZmluZFZpZXdSZWZlcmVuY2UoTUFQX1ZJRVdfSUQpOworCQkJCQlpZiAodmlld1JlZiAhPSBudWxsKSB7CisJCQkJCQl2aWV3ID0gdmlld1JlZi5nZXRWaWV3KHRydWUpOworCQkJCQl9CisJCQkJfQorCQkJCQorCQkJCS8vIFN0aWxsIGNhbm5vdCBmaW5kIHRoZSBtYXAgdmlldy4gIGl0J3MgcHJvYmFibHkgb3BlbiBpbiBhIGRpZmZlcmVudCBwZXJzcGVjdGl2ZS4KKwkJCQkvLyBpZiB0aGUgbG9nZ2VyIGlzIGNvbmZpZ3VyZWQgdG8gb3BlbiB0aGUgbWFwIHZpZXcsIHRoZW4gYXR0ZW1wdCB0byBvcGVuIGl0CisJCQkJaWYgKCh2aWV3ID09IG51bGwgfHwgISh2aWV3IGluc3RhbmNlb2YgTWFwVmlldykpICYmIGlzT3Blbk1hcFZpZXcoKSkgeworCQkJCQl0cnkgeworCQkJCQkJaWYgKGlzT3Blbk1hcFZpZXcoKSkgeworCQkJCQkJCXZpZXcgPSBwYWdlLnNob3dWaWV3KE1BUF9WSUVXX0lEKTsKKwkJCQkJCX0KKwkJCQkJfSBjYXRjaCAoUGFydEluaXRFeGNlcHRpb24gZSkgeworCQkJCQkJQWN0aXZhdG9yLmxvZ0Vycm9yKCJFcnJvciBvcGVuaW5nIHRoZSBtYXAgdmlldyBmb3IgdGhlIG1hcCBpbWFnZSBsb2dnZXIiLCBlKTsKKwkJCQkJfQorCQkJCX0KKwkJCX0KKwkJfQorCQkKKwkJaWYgKHZpZXcgIT0gbnVsbCAmJiB2aWV3IGluc3RhbmNlb2YgTWFwVmlldykgeworCQkJcmV0VmFsdWUgPSAoTWFwVmlldyl2aWV3OworCQl9CisJCQorCQlyZXR1cm4gcmV0VmFsdWU7CisJfQorCQorCQorCQorCQorCXByaXZhdGUgR2VvZ3JhcGhpY0NvbnRyb2wgZ2V0TWFwQ29udHJvbEZvclNpbXVsYXRpb24oKQorCXsKKwkJTWFwVmlldyB2aWV3ID0gZ2V0TWFwVmlld0Zyb21Xb3JrYmVuY2goKTsKKwkJaWYgKHZpZXcgIT0gbnVsbCAmJiB2aWV3LmdldFNpdGUoKS5nZXRTZWxlY3Rpb25Qcm92aWRlcigpIGluc3RhbmNlb2YgR2VvZ3JhcGhpY1ZpZXdlcikgeworCQkJR2VvZ3JhcGhpY1ZpZXdlciB2aWV3ZXIgPSAoR2VvZ3JhcGhpY1ZpZXdlcil2aWV3LmdldFNpdGUoKS5nZXRTZWxlY3Rpb25Qcm92aWRlcigpOworCQkJCisJCQlDb250cm9sW10gY29udHJvbHMgPSAoKENvbXBvc2l0ZSl2aWV3ZXIuZ2V0Q29udHJvbCgpKS5nZXRDaGlsZHJlbigpOworCQkJZm9yIChDb250cm9sIGNvbnRyb2wgOiBjb250cm9scykgeworCQkJCWlmIChjb250cm9sIGluc3RhbmNlb2YgR2VvZ3JhcGhpY0NvbnRyb2wKKwkJCQkJCSYmIHNpbXVsYXRpb24gPT0gKChHZW9ncmFwaGljQ29udHJvbCljb250cm9sKS5nZXRTaW11bGF0aW9uKCkpIHsKKwkJCQkJcmV0dXJuIChHZW9ncmFwaGljQ29udHJvbCljb250cm9sOworCQkJCX0KKwkJCX0KKwkJfQorCQkKKwkJcmV0dXJuIG51bGw7CisJfQorCQorCQorCQorCXByaXZhdGUgc3RhdGljIGZpbmFsIFNpbXBsZURhdGVGb3JtYXQgREFURV9GT1JNQVRURVIgPSBuZXcgU2ltcGxlRGF0ZUZvcm1hdCgieXl5eU1NZGRISG1tc3MiLCBMb2NhbGUuZ2V0RGVmYXVsdCgpKTsKKwkKKwlwcml2YXRlIEZpbGUgbG9nRGlyZWN0b3J5OworCQorCXByaXZhdGUgVGltZVByb3ZpZGVyIHRpbWVQcm92aWRlcjsKKwkKKwlwcml2YXRlIElTaW11bGF0aW9uIHNpbXVsYXRpb247CisJCisJYm9vbGVhbiBiZWZvcmVTdGFydCA9IGZhbHNlOworCQorCXByaXZhdGUgU1RFTVRpbWUgZ2V0U2NlbmFyaW9UaW1lKCkKKwl7CisJCVNURU1UaW1lIHRpbWUgPSBnZXRUaW1lUHJvdmlkZXIoKS5nZXRUaW1lKCk7CisJCWlmKHRpbWUgPT0gbnVsbCkgeworCQkJdGltZSA9IHNpbXVsYXRpb24uZ2V0U2NlbmFyaW8oKS5nZXRTZXF1ZW5jZXIoKS5nZXRTdGFydFRpbWUoKTsKKwkJfQorCQlpZighYmVmb3JlU3RhcnQpIHsKKwkJCXRpbWUgPSB0aW1lLmFkZEluY3JlbWVudChzaW11bGF0aW9uLmdldFNjZW5hcmlvKCkuZ2V0U2VxdWVuY2VyKCkuZ2V0VGltZURlbHRhKCkpOworCQl9CisJCXJldHVybiB0aW1lOworCX0KKwkKKwlwcml2YXRlIFRpbWVQcm92aWRlciBnZXRUaW1lUHJvdmlkZXIoKQorCXsKKwkJaWYgKHRpbWVQcm92aWRlciA9PSBudWxsKSB7CisJCQl0aW1lUHJvdmlkZXIgPSAoVGltZVByb3ZpZGVyKSBUaW1lUHJvdmlkZXJBZGFwdGVyRmFjdG9yeS5JTlNUQU5DRQorCQkJCQkuYWRhcHQoc2ltdWxhdGlvbi5nZXRTY2VuYXJpbygpLmdldENhbm9uaWNhbEdyYXBoKCksIFRpbWVQcm92aWRlci5jbGFzcyk7CisJCX0KKwkJCisJCXJldHVybiB0aW1lUHJvdmlkZXI7CisJfQorCQorCisJCisJCisJcHJpdmF0ZSBGaWxlIGdldEltYWdlRmlsZSgpIHsKKwkJCisJCWlmIChsb2dEaXJlY3RvcnkgPT0gbnVsbCkgeworCQkJbG9nRGlyZWN0b3J5ID0gbmV3IEZpbGUoZ2V0TG9nRmlsZURpcmVjdG9yeShzaW11bGF0aW9uKSwgIk1hcEltYWdlcyIpOworCQkJbG9nRGlyZWN0b3J5Lm1rZGlycygpOworCQl9CisJCQorCQlyZXR1cm4gbmV3IEZpbGUobG9nRGlyZWN0b3J5LCBEQVRFX0ZPUk1BVFRFUi5mb3JtYXQoZ2V0U2NlbmFyaW9UaW1lKCkuZ2V0VGltZSgpKSArIi5wbmciKTsKKwl9CisJCisJCisJcHJpdmF0ZSB2b2lkIHNhdmVTaW11bGF0aW9uSW1hZ2VGaWxlKEltYWdlIG1hcEltYWdlKQorCXsKKwkJaWYgKG1hcEltYWdlICE9IG51bGwgJiYgIW1hcEltYWdlLmlzRGlzcG9zZWQoKSkgeworCQkJdHJ5IHsKKwkJCQlGaWxlIGltYWdlRmlsZSA9IGdldEltYWdlRmlsZSgpOworCQkJCUltYWdlTG9hZGVyIGxvYWRlciA9IG5ldyBJbWFnZUxvYWRlcigpOworCQkJCWxvYWRlci5kYXRhID0gbmV3IEltYWdlRGF0YVtdIHttYXBJbWFnZS5nZXRJbWFnZURhdGEoKX07CisJCQkJbG9hZGVyLnNhdmUoaW1hZ2VGaWxlLmdldEFic29sdXRlUGF0aCgpLCBTV1QuSU1BR0VfUE5HKTsKKwkJCX0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CisJCQkJZS5wcmludFN0YWNrVHJhY2UoKTsKKwkJCX0KKwkJfQorCX0KKwkKKwkKKwkKKwkvKiAobm9uLUphdmFkb2MpCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMuaW1wbC5TaW11bGF0aW9uTG9nZ2VySW1wbCNzaW11bGF0aW9uRXZlbnQob3JnLmVjbGlwc2Uuc3RlbS5qb2JzLnNpbXVsYXRpb24uU2ltdWxhdGlvbkV2ZW50KQorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIHNpbXVsYXRpb25FdmVudChmaW5hbCBTaW11bGF0aW9uRXZlbnQgZXZlbnQpIAorCXsKKwkJaWYgKCFQbGF0Zm9ybVVJLmlzV29ya2JlbmNoUnVubmluZygpKSB7CisJCQlyZXR1cm47CisJCX0KKwkJaWYgKFNpbXVsYXRpb25TdGF0ZS5DT01QTEVURURfQ1lDTEUuZXF1YWxzKGV2ZW50LmdldFNpbXVsYXRpb25TdGF0ZSgpKSkgeworCQkJRGlzcGxheVNhZmVFeGVjdXRvci5leGVjdXRlU3luYyhuZXcgUnVubmFibGUoKSB7CisJCQkJQE92ZXJyaWRlCisJCQkJcHVibGljIHZvaWQgcnVuKCkgeworCQkJCQlHZW9ncmFwaGljQ29udHJvbCBjb250cm9sID0gZ2V0TWFwQ29udHJvbEZvclNpbXVsYXRpb24oKTsKKwkJCQkJaWYgKGNvbnRyb2wgIT0gbnVsbCkgeworCQkJCQkJSW1hZ2UgaW1hZ2UgPSBjb250cm9sLmdldE1hcENhbnZhc0ltYWdlKCk7CisJCQkJCQlzYXZlU2ltdWxhdGlvbkltYWdlRmlsZShpbWFnZSk7CisJCQkJCX0gZWxzZSB7CisJCQkJCQlBY3RpdmF0b3IubG9nV2FybmluZygiVGhlIE1hcCBWaWV3IExvZ2dlciBjb3VsZCBub3QgZmluZCB0aGUgTWFwIENhbnZhcy4iLCBudWxsKTsKKwkJCQkJfQorCQkJCX0KKwkJCQorCQkJfSk7CisJCQorCQl9CisJfQorCisJLyogKG5vbi1KYXZhZG9jKQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzLmltcGwuU2ltdWxhdGlvbkxvZ2dlckltcGwjbG9nZ2VyRXZlbnQob3JnLmVjbGlwc2Uuc3RlbS5qb2JzLnNpbXVsYXRpb24uSVNpbXVsYXRpb24sIG9yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy5MT0dHRVJfRVZFTlRTKQorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGxvZ2dlckV2ZW50KElTaW11bGF0aW9uIHNpbXVsYXRpb24sIExPR0dFUl9FVkVOVFMgZXZlbnQpIAorCXsJCQorCQlpZiAoTE9HR0VSX0VWRU5UUy5MT0dHRVJfU1RBUlRFRC5lcXVhbHMoZXZlbnQpKSB7CisJCQlpZiAoIVBsYXRmb3JtVUkuaXNXb3JrYmVuY2hSdW5uaW5nKCkpIHsKKwkJCQlBY3RpdmF0b3IubG9nV2FybmluZygiTWFwIFZpZXcgTG9nZ2VyIGlzIGRpc2FibGVkIGluIGhlYWRsZXNzIG1vZGUuIiwgbnVsbCk7CisJCQkJcmV0dXJuOworCQkJfQorCQkJCisJCQl0aGlzLnNpbXVsYXRpb24gPSBzaW11bGF0aW9uOworCQl9CisJfQorCit9IC8vTWFwVmlld0ltYWdlV3JpdGVyTG9nZ2VySW1wbApkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMuaW1hZ2V3cml0ZXIvc3JjL29yZy9lY2xpcHNlL3N0ZW0vbG9nZ2Vycy9pbWFnZXdyaXRlci9pbXBsL1Byb2plY3RlZE1hcEltYWdlTG9nZ2VySW1wbC5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMuaW1hZ2V3cml0ZXIvc3JjL29yZy9lY2xpcHNlL3N0ZW0vbG9nZ2Vycy9pbWFnZXdyaXRlci9pbXBsL1Byb2plY3RlZE1hcEltYWdlTG9nZ2VySW1wbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZhOThlN2QKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy5pbWFnZXdyaXRlci9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9sb2dnZXJzL2ltYWdld3JpdGVyL2ltcGwvUHJvamVjdGVkTWFwSW1hZ2VMb2dnZXJJbXBsLmphdmEKQEAgLTAsMCArMSw2NDkgQEAKKy8qKgorICogPGNvcHlyaWdodD4KKyAqIDwvY29weXJpZ2h0PgorICoKKyAqICRJZCQKKyAqLworcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMuaW1hZ2V3cml0ZXIuaW1wbDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbjsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkludGVybmFsRU9iamVjdDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5pbXBsLkVOb3RpZmljYXRpb25JbXBsOworCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLkRlY29yYXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuSW50ZWdyYXRpb25EZWNvcmF0b3I7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmpvYnMuc2ltdWxhdGlvbi5JU2ltdWxhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmpvYnMuc2ltdWxhdGlvbi5TaW11bGF0aW9uRXZlbnQ7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5qb2JzLnNpbXVsYXRpb24uU2ltdWxhdGlvblN0YXRlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy5MT0dHRVJfRVZFTlRTOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy5pbWFnZXdyaXRlci5JbWFnZXdyaXRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzLmltYWdld3JpdGVyLkltYWdld3JpdGVyUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMuaW1hZ2V3cml0ZXIuTUFQX1BST0pFQ1RJT05TOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy5pbWFnZXdyaXRlci5Qcm9qZWN0ZWRNYXBJbWFnZUxvZ2dlcjsKKworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy5pbWFnZXdyaXRlci5sb2dnZXIuRGVjb3JhdG9yUHJvcGVydHlJbWFnZVdyaXRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMuaW1hZ2V3cml0ZXIubG9nZ2VyLnByb2plY3Rpb25zLklNYXBQcm9qZWN0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udWkuYWRhcHRlcnMuY29sb3IuQ29sb3JQcm92aWRlcjsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPlByb2plY3RlZCBNYXAgSW1hZ2UgTG9nZ2VyPC9iPjwvZW0+Jy4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogPHA+CisgKiBUaGUgZm9sbG93aW5nIGZlYXR1cmVzIGFyZSBpbXBsZW1lbnRlZDoKKyAqIDx1bD4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMuaW1hZ2V3cml0ZXIuaW1wbC5Qcm9qZWN0ZWRNYXBJbWFnZUxvZ2dlckltcGwjaXNVc2VMb2dTY2FsaW5nIDxlbT5Vc2UgTG9nIFNjYWxpbmc8L2VtPn08L2xpPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy5pbWFnZXdyaXRlci5pbXBsLlByb2plY3RlZE1hcEltYWdlTG9nZ2VySW1wbCNnZXRHYWluIDxlbT5HYWluPC9lbT59PC9saT4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMuaW1hZ2V3cml0ZXIuaW1wbC5Qcm9qZWN0ZWRNYXBJbWFnZUxvZ2dlckltcGwjaXNMb2dBbGxEZWNvcmF0b3JzIDxlbT5Mb2cgQWxsIERlY29yYXRvcnM8L2VtPn08L2xpPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy5pbWFnZXdyaXRlci5pbXBsLlByb2plY3RlZE1hcEltYWdlTG9nZ2VySW1wbCNnZXRDb2xvclByb3ZpZGVyIDxlbT5Db2xvciBQcm92aWRlcjwvZW0+fTwvbGk+CisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzLmltYWdld3JpdGVyLmltcGwuUHJvamVjdGVkTWFwSW1hZ2VMb2dnZXJJbXBsI2dldERlY29yYXRvciA8ZW0+RGVjb3JhdG9yPC9lbT59PC9saT4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMuaW1hZ2V3cml0ZXIuaW1wbC5Qcm9qZWN0ZWRNYXBJbWFnZUxvZ2dlckltcGwjZ2V0RGVjb3JhdG9yUHJvcGVydGllcyA8ZW0+RGVjb3JhdG9yIFByb3BlcnRpZXM8L2VtPn08L2xpPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy5pbWFnZXdyaXRlci5pbXBsLlByb2plY3RlZE1hcEltYWdlTG9nZ2VySW1wbCNnZXRXaWR0aCA8ZW0+V2lkdGg8L2VtPn08L2xpPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy5pbWFnZXdyaXRlci5pbXBsLlByb2plY3RlZE1hcEltYWdlTG9nZ2VySW1wbCNnZXRIZWlnaHQgPGVtPkhlaWdodDwvZW0+fTwvbGk+CisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzLmltYWdld3JpdGVyLmltcGwuUHJvamVjdGVkTWFwSW1hZ2VMb2dnZXJJbXBsI2dldFByb2plY3Rpb24gPGVtPlByb2plY3Rpb248L2VtPn08L2xpPgorICogPC91bD4KKyAqIDwvcD4KKyAqCisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBhYnN0cmFjdCBjbGFzcyBQcm9qZWN0ZWRNYXBJbWFnZUxvZ2dlckltcGwgZXh0ZW5kcyBJbWFnZVdyaXRlckxvZ2dlckltcGwgaW1wbGVtZW50cyBQcm9qZWN0ZWRNYXBJbWFnZUxvZ2dlciB7CisJLyoqCisJICogVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2lzVXNlTG9nU2NhbGluZygpIDxlbT5Vc2UgTG9nIFNjYWxpbmc8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI2lzVXNlTG9nU2NhbGluZygpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBib29sZWFuIFVTRV9MT0dfU0NBTElOR19FREVGQVVMVCA9IHRydWU7CisKKwkvKioKKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNpc1VzZUxvZ1NjYWxpbmcoKSA8ZW0+VXNlIExvZyBTY2FsaW5nPC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNpc1VzZUxvZ1NjYWxpbmcoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBib29sZWFuIHVzZUxvZ1NjYWxpbmcgPSBVU0VfTE9HX1NDQUxJTkdfRURFRkFVTFQ7CisKKwkvKioKKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0R2FpbigpIDxlbT5HYWluPC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNnZXRHYWluKCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIGZsb2F0IEdBSU5fRURFRkFVTFQgPSAxLjBGOworCisJLyoqCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0R2FpbigpIDxlbT5HYWluPC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNnZXRHYWluKCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgZmxvYXQgZ2FpbiA9IEdBSU5fRURFRkFVTFQ7CisKKwkvKioKKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjaXNMb2dBbGxEZWNvcmF0b3JzKCkgPGVtPkxvZyBBbGwgRGVjb3JhdG9yczwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjaXNMb2dBbGxEZWNvcmF0b3JzKCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIGJvb2xlYW4gTE9HX0FMTF9ERUNPUkFUT1JTX0VERUZBVUxUID0gZmFsc2U7CisKKwkvKioKKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNpc0xvZ0FsbERlY29yYXRvcnMoKSA8ZW0+TG9nIEFsbCBEZWNvcmF0b3JzPC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNpc0xvZ0FsbERlY29yYXRvcnMoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBib29sZWFuIGxvZ0FsbERlY29yYXRvcnMgPSBMT0dfQUxMX0RFQ09SQVRPUlNfRURFRkFVTFQ7CisKKwkvKioKKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0Q29sb3JQcm92aWRlcigpIDxlbT5Db2xvciBQcm92aWRlcjwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZ2V0Q29sb3JQcm92aWRlcigpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBDb2xvclByb3ZpZGVyIENPTE9SX1BST1ZJREVSX0VERUZBVUxUID0gbnVsbDsKKworCS8qKgorCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldENvbG9yUHJvdmlkZXIoKSA8ZW0+Q29sb3IgUHJvdmlkZXI8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI2dldENvbG9yUHJvdmlkZXIoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBDb2xvclByb3ZpZGVyIGNvbG9yUHJvdmlkZXIgPSBDT0xPUl9QUk9WSURFUl9FREVGQVVMVDsKKworCS8qKgorCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldERlY29yYXRvcigpIDxlbT5EZWNvcmF0b3I8L2VtPn0nIHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI2dldERlY29yYXRvcigpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIERlY29yYXRvciBkZWNvcmF0b3I7CisKKwkvKioKKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0RGVjb3JhdG9yUHJvcGVydGllcygpIDxlbT5EZWNvcmF0b3IgUHJvcGVydGllczwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZ2V0RGVjb3JhdG9yUHJvcGVydGllcygpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBTdHJpbmcgREVDT1JBVE9SX1BST1BFUlRJRVNfRURFRkFVTFQgPSBudWxsOworCisJLyoqCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0RGVjb3JhdG9yUHJvcGVydGllcygpIDxlbT5EZWNvcmF0b3IgUHJvcGVydGllczwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZ2V0RGVjb3JhdG9yUHJvcGVydGllcygpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIFN0cmluZyBkZWNvcmF0b3JQcm9wZXJ0aWVzID0gREVDT1JBVE9SX1BST1BFUlRJRVNfRURFRkFVTFQ7CisKKwkvKioKKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0V2lkdGgoKSA8ZW0+V2lkdGg8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI2dldFdpZHRoKCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIGludCBXSURUSF9FREVGQVVMVCA9IDEwMDA7CisKKwkvKioKKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRXaWR0aCgpIDxlbT5XaWR0aDwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZ2V0V2lkdGgoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBpbnQgd2lkdGggPSBXSURUSF9FREVGQVVMVDsKKworCS8qKgorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRIZWlnaHQoKSA8ZW0+SGVpZ2h0PC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNnZXRIZWlnaHQoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgaW50IEhFSUdIVF9FREVGQVVMVCA9IDUwMDsKKworCS8qKgorCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldEhlaWdodCgpIDxlbT5IZWlnaHQ8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI2dldEhlaWdodCgpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIGludCBoZWlnaHQgPSBIRUlHSFRfRURFRkFVTFQ7CisKKwkvKioKKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0UHJvamVjdGlvbigpIDxlbT5Qcm9qZWN0aW9uPC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNnZXRQcm9qZWN0aW9uKCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIElNYXBQcm9qZWN0aW9uIFBST0pFQ1RJT05fRURFRkFVTFQgPSBudWxsOyAvLyhJTWFwUHJvamVjdGlvbilJbWFnZXdyaXRlckZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZUZyb21TdHJpbmcoSW1hZ2V3cml0ZXJQYWNrYWdlLmVJTlNUQU5DRS5nZXRJTWFwUHJvamVjdGlvbigpLCAibnVsbCIpOworCisJLyoqCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0UHJvamVjdGlvbigpIDxlbT5Qcm9qZWN0aW9uPC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNnZXRQcm9qZWN0aW9uKCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgSU1hcFByb2plY3Rpb24gcHJvamVjdGlvbiA9IFBST0pFQ1RJT05fRURFRkFVTFQ7CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgUHJvamVjdGVkTWFwSW1hZ2VMb2dnZXJJbXBsKCkgeworCQlzdXBlcigpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCBFQ2xhc3MgZVN0YXRpY0NsYXNzKCkgeworCQlyZXR1cm4gSW1hZ2V3cml0ZXJQYWNrYWdlLkxpdGVyYWxzLlBST0pFQ1RFRF9NQVBfSU1BR0VfTE9HR0VSOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBJTWFwUHJvamVjdGlvbiBnZXRQcm9qZWN0aW9uKCkgeworCQlyZXR1cm4gcHJvamVjdGlvbjsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRQcm9qZWN0aW9uKElNYXBQcm9qZWN0aW9uIG5ld1Byb2plY3Rpb24pIHsKKwkJSU1hcFByb2plY3Rpb24gb2xkUHJvamVjdGlvbiA9IHByb2plY3Rpb247CisJCXByb2plY3Rpb24gPSBuZXdQcm9qZWN0aW9uOworCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpCisJCQllTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBJbWFnZXdyaXRlclBhY2thZ2UuUFJPSkVDVEVEX01BUF9JTUFHRV9MT0dHRVJfX1BST0pFQ1RJT04sIG9sZFByb2plY3Rpb24sIHByb2plY3Rpb24pKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgYm9vbGVhbiBpc1VzZUxvZ1NjYWxpbmcoKSB7CisJCXJldHVybiB1c2VMb2dTY2FsaW5nOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIHNldFVzZUxvZ1NjYWxpbmcoYm9vbGVhbiBuZXdVc2VMb2dTY2FsaW5nKSB7CisJCWJvb2xlYW4gb2xkVXNlTG9nU2NhbGluZyA9IHVzZUxvZ1NjYWxpbmc7CisJCXVzZUxvZ1NjYWxpbmcgPSBuZXdVc2VMb2dTY2FsaW5nOworCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpCisJCQllTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBJbWFnZXdyaXRlclBhY2thZ2UuUFJPSkVDVEVEX01BUF9JTUFHRV9MT0dHRVJfX1VTRV9MT0dfU0NBTElORywgb2xkVXNlTG9nU2NhbGluZywgdXNlTG9nU2NhbGluZykpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBmbG9hdCBnZXRHYWluKCkgeworCQlyZXR1cm4gZ2FpbjsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRHYWluKGZsb2F0IG5ld0dhaW4pIHsKKwkJZmxvYXQgb2xkR2FpbiA9IGdhaW47CisJCWdhaW4gPSBuZXdHYWluOworCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpCisJCQllTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBJbWFnZXdyaXRlclBhY2thZ2UuUFJPSkVDVEVEX01BUF9JTUFHRV9MT0dHRVJfX0dBSU4sIG9sZEdhaW4sIGdhaW4pKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgYm9vbGVhbiBpc0xvZ0FsbERlY29yYXRvcnMoKSB7CisJCXJldHVybiBsb2dBbGxEZWNvcmF0b3JzOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIHNldExvZ0FsbERlY29yYXRvcnMoYm9vbGVhbiBuZXdMb2dBbGxEZWNvcmF0b3JzKSB7CisJCWJvb2xlYW4gb2xkTG9nQWxsRGVjb3JhdG9ycyA9IGxvZ0FsbERlY29yYXRvcnM7CisJCWxvZ0FsbERlY29yYXRvcnMgPSBuZXdMb2dBbGxEZWNvcmF0b3JzOworCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpCisJCQllTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBJbWFnZXdyaXRlclBhY2thZ2UuUFJPSkVDVEVEX01BUF9JTUFHRV9MT0dHRVJfX0xPR19BTExfREVDT1JBVE9SUywgb2xkTG9nQWxsRGVjb3JhdG9ycywgbG9nQWxsRGVjb3JhdG9ycykpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBDb2xvclByb3ZpZGVyIGdldENvbG9yUHJvdmlkZXIoKSB7CisJCXJldHVybiBjb2xvclByb3ZpZGVyOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIHNldENvbG9yUHJvdmlkZXIoQ29sb3JQcm92aWRlciBuZXdDb2xvclByb3ZpZGVyKSB7CisJCUNvbG9yUHJvdmlkZXIgb2xkQ29sb3JQcm92aWRlciA9IGNvbG9yUHJvdmlkZXI7CisJCWNvbG9yUHJvdmlkZXIgPSBuZXdDb2xvclByb3ZpZGVyOworCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpCisJCQllTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBJbWFnZXdyaXRlclBhY2thZ2UuUFJPSkVDVEVEX01BUF9JTUFHRV9MT0dHRVJfX0NPTE9SX1BST1ZJREVSLCBvbGRDb2xvclByb3ZpZGVyLCBjb2xvclByb3ZpZGVyKSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIERlY29yYXRvciBnZXREZWNvcmF0b3IoKSB7CisJCWlmIChkZWNvcmF0b3IgIT0gbnVsbCAmJiBkZWNvcmF0b3IuZUlzUHJveHkoKSkgeworCQkJSW50ZXJuYWxFT2JqZWN0IG9sZERlY29yYXRvciA9IChJbnRlcm5hbEVPYmplY3QpZGVjb3JhdG9yOworCQkJZGVjb3JhdG9yID0gKERlY29yYXRvcillUmVzb2x2ZVByb3h5KG9sZERlY29yYXRvcik7CisJCQlpZiAoZGVjb3JhdG9yICE9IG9sZERlY29yYXRvcikgeworCQkJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkKKwkJCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlJFU09MVkUsIEltYWdld3JpdGVyUGFja2FnZS5QUk9KRUNURURfTUFQX0lNQUdFX0xPR0dFUl9fREVDT1JBVE9SLCBvbGREZWNvcmF0b3IsIGRlY29yYXRvcikpOworCQkJfQorCQl9CisJCXJldHVybiBkZWNvcmF0b3I7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIERlY29yYXRvciBiYXNpY0dldERlY29yYXRvcigpIHsKKwkJcmV0dXJuIGRlY29yYXRvcjsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXREZWNvcmF0b3IoRGVjb3JhdG9yIG5ld0RlY29yYXRvcikgeworCQlEZWNvcmF0b3Igb2xkRGVjb3JhdG9yID0gZGVjb3JhdG9yOworCQlkZWNvcmF0b3IgPSBuZXdEZWNvcmF0b3I7CisJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkKKwkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIEltYWdld3JpdGVyUGFja2FnZS5QUk9KRUNURURfTUFQX0lNQUdFX0xPR0dFUl9fREVDT1JBVE9SLCBvbGREZWNvcmF0b3IsIGRlY29yYXRvcikpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBTdHJpbmcgZ2V0RGVjb3JhdG9yUHJvcGVydGllcygpIHsKKwkJcmV0dXJuIGRlY29yYXRvclByb3BlcnRpZXM7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgc2V0RGVjb3JhdG9yUHJvcGVydGllcyhTdHJpbmcgbmV3RGVjb3JhdG9yUHJvcGVydGllcykgeworCQlTdHJpbmcgb2xkRGVjb3JhdG9yUHJvcGVydGllcyA9IGRlY29yYXRvclByb3BlcnRpZXM7CisJCWRlY29yYXRvclByb3BlcnRpZXMgPSBuZXdEZWNvcmF0b3JQcm9wZXJ0aWVzOworCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpCisJCQllTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBJbWFnZXdyaXRlclBhY2thZ2UuUFJPSkVDVEVEX01BUF9JTUFHRV9MT0dHRVJfX0RFQ09SQVRPUl9QUk9QRVJUSUVTLCBvbGREZWNvcmF0b3JQcm9wZXJ0aWVzLCBkZWNvcmF0b3JQcm9wZXJ0aWVzKSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIGludCBnZXRXaWR0aCgpIHsKKwkJcmV0dXJuIHdpZHRoOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIHNldFdpZHRoKGludCBuZXdXaWR0aCkgeworCQlpbnQgb2xkV2lkdGggPSB3aWR0aDsKKwkJd2lkdGggPSBuZXdXaWR0aDsKKwkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQorCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgSW1hZ2V3cml0ZXJQYWNrYWdlLlBST0pFQ1RFRF9NQVBfSU1BR0VfTE9HR0VSX19XSURUSCwgb2xkV2lkdGgsIHdpZHRoKSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIGludCBnZXRIZWlnaHQoKSB7CisJCXJldHVybiBoZWlnaHQ7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgc2V0SGVpZ2h0KGludCBuZXdIZWlnaHQpIHsKKwkJaW50IG9sZEhlaWdodCA9IGhlaWdodDsKKwkJaGVpZ2h0ID0gbmV3SGVpZ2h0OworCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpCisJCQllTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBJbWFnZXdyaXRlclBhY2thZ2UuUFJPSkVDVEVEX01BUF9JTUFHRV9MT0dHRVJfX0hFSUdIVCwgb2xkSGVpZ2h0LCBoZWlnaHQpKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgT2JqZWN0IGVHZXQoaW50IGZlYXR1cmVJRCwgYm9vbGVhbiByZXNvbHZlLCBib29sZWFuIGNvcmVUeXBlKSB7CisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7CisJCQljYXNlIEltYWdld3JpdGVyUGFja2FnZS5QUk9KRUNURURfTUFQX0lNQUdFX0xPR0dFUl9fVVNFX0xPR19TQ0FMSU5HOgorCQkJCXJldHVybiBpc1VzZUxvZ1NjYWxpbmcoKTsKKwkJCWNhc2UgSW1hZ2V3cml0ZXJQYWNrYWdlLlBST0pFQ1RFRF9NQVBfSU1BR0VfTE9HR0VSX19HQUlOOgorCQkJCXJldHVybiBnZXRHYWluKCk7CisJCQljYXNlIEltYWdld3JpdGVyUGFja2FnZS5QUk9KRUNURURfTUFQX0lNQUdFX0xPR0dFUl9fTE9HX0FMTF9ERUNPUkFUT1JTOgorCQkJCXJldHVybiBpc0xvZ0FsbERlY29yYXRvcnMoKTsKKwkJCWNhc2UgSW1hZ2V3cml0ZXJQYWNrYWdlLlBST0pFQ1RFRF9NQVBfSU1BR0VfTE9HR0VSX19DT0xPUl9QUk9WSURFUjoKKwkJCQlyZXR1cm4gZ2V0Q29sb3JQcm92aWRlcigpOworCQkJY2FzZSBJbWFnZXdyaXRlclBhY2thZ2UuUFJPSkVDVEVEX01BUF9JTUFHRV9MT0dHRVJfX0RFQ09SQVRPUjoKKwkJCQlpZiAocmVzb2x2ZSkgcmV0dXJuIGdldERlY29yYXRvcigpOworCQkJCXJldHVybiBiYXNpY0dldERlY29yYXRvcigpOworCQkJY2FzZSBJbWFnZXdyaXRlclBhY2thZ2UuUFJPSkVDVEVEX01BUF9JTUFHRV9MT0dHRVJfX0RFQ09SQVRPUl9QUk9QRVJUSUVTOgorCQkJCXJldHVybiBnZXREZWNvcmF0b3JQcm9wZXJ0aWVzKCk7CisJCQljYXNlIEltYWdld3JpdGVyUGFja2FnZS5QUk9KRUNURURfTUFQX0lNQUdFX0xPR0dFUl9fV0lEVEg6CisJCQkJcmV0dXJuIGdldFdpZHRoKCk7CisJCQljYXNlIEltYWdld3JpdGVyUGFja2FnZS5QUk9KRUNURURfTUFQX0lNQUdFX0xPR0dFUl9fSEVJR0hUOgorCQkJCXJldHVybiBnZXRIZWlnaHQoKTsKKwkJCWNhc2UgSW1hZ2V3cml0ZXJQYWNrYWdlLlBST0pFQ1RFRF9NQVBfSU1BR0VfTE9HR0VSX19QUk9KRUNUSU9OOgorCQkJCXJldHVybiBnZXRQcm9qZWN0aW9uKCk7CisJCX0KKwkJcmV0dXJuIHN1cGVyLmVHZXQoZmVhdHVyZUlELCByZXNvbHZlLCBjb3JlVHlwZSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgZVNldChpbnQgZmVhdHVyZUlELCBPYmplY3QgbmV3VmFsdWUpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJCWNhc2UgSW1hZ2V3cml0ZXJQYWNrYWdlLlBST0pFQ1RFRF9NQVBfSU1BR0VfTE9HR0VSX19VU0VfTE9HX1NDQUxJTkc6CisJCQkJc2V0VXNlTG9nU2NhbGluZygoQm9vbGVhbiluZXdWYWx1ZSk7CisJCQkJcmV0dXJuOworCQkJY2FzZSBJbWFnZXdyaXRlclBhY2thZ2UuUFJPSkVDVEVEX01BUF9JTUFHRV9MT0dHRVJfX0dBSU46CisJCQkJc2V0R2FpbigoRmxvYXQpbmV3VmFsdWUpOworCQkJCXJldHVybjsKKwkJCWNhc2UgSW1hZ2V3cml0ZXJQYWNrYWdlLlBST0pFQ1RFRF9NQVBfSU1BR0VfTE9HR0VSX19MT0dfQUxMX0RFQ09SQVRPUlM6CisJCQkJc2V0TG9nQWxsRGVjb3JhdG9ycygoQm9vbGVhbiluZXdWYWx1ZSk7CisJCQkJcmV0dXJuOworCQkJY2FzZSBJbWFnZXdyaXRlclBhY2thZ2UuUFJPSkVDVEVEX01BUF9JTUFHRV9MT0dHRVJfX0NPTE9SX1BST1ZJREVSOgorCQkJCXNldENvbG9yUHJvdmlkZXIoKENvbG9yUHJvdmlkZXIpbmV3VmFsdWUpOworCQkJCXJldHVybjsKKwkJCWNhc2UgSW1hZ2V3cml0ZXJQYWNrYWdlLlBST0pFQ1RFRF9NQVBfSU1BR0VfTE9HR0VSX19ERUNPUkFUT1I6CisJCQkJc2V0RGVjb3JhdG9yKChEZWNvcmF0b3IpbmV3VmFsdWUpOworCQkJCXJldHVybjsKKwkJCWNhc2UgSW1hZ2V3cml0ZXJQYWNrYWdlLlBST0pFQ1RFRF9NQVBfSU1BR0VfTE9HR0VSX19ERUNPUkFUT1JfUFJPUEVSVElFUzoKKwkJCQlzZXREZWNvcmF0b3JQcm9wZXJ0aWVzKChTdHJpbmcpbmV3VmFsdWUpOworCQkJCXJldHVybjsKKwkJCWNhc2UgSW1hZ2V3cml0ZXJQYWNrYWdlLlBST0pFQ1RFRF9NQVBfSU1BR0VfTE9HR0VSX19XSURUSDoKKwkJCQlzZXRXaWR0aCgoSW50ZWdlciluZXdWYWx1ZSk7CisJCQkJcmV0dXJuOworCQkJY2FzZSBJbWFnZXdyaXRlclBhY2thZ2UuUFJPSkVDVEVEX01BUF9JTUFHRV9MT0dHRVJfX0hFSUdIVDoKKwkJCQlzZXRIZWlnaHQoKEludGVnZXIpbmV3VmFsdWUpOworCQkJCXJldHVybjsKKwkJCWNhc2UgSW1hZ2V3cml0ZXJQYWNrYWdlLlBST0pFQ1RFRF9NQVBfSU1BR0VfTE9HR0VSX19QUk9KRUNUSU9OOgorCQkJCXNldFByb2plY3Rpb24oKElNYXBQcm9qZWN0aW9uKW5ld1ZhbHVlKTsKKwkJCQlyZXR1cm47CisJCX0KKwkJc3VwZXIuZVNldChmZWF0dXJlSUQsIG5ld1ZhbHVlKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBlVW5zZXQoaW50IGZlYXR1cmVJRCkgeworCQlzd2l0Y2ggKGZlYXR1cmVJRCkgeworCQkJY2FzZSBJbWFnZXdyaXRlclBhY2thZ2UuUFJPSkVDVEVEX01BUF9JTUFHRV9MT0dHRVJfX1VTRV9MT0dfU0NBTElORzoKKwkJCQlzZXRVc2VMb2dTY2FsaW5nKFVTRV9MT0dfU0NBTElOR19FREVGQVVMVCk7CisJCQkJcmV0dXJuOworCQkJY2FzZSBJbWFnZXdyaXRlclBhY2thZ2UuUFJPSkVDVEVEX01BUF9JTUFHRV9MT0dHRVJfX0dBSU46CisJCQkJc2V0R2FpbihHQUlOX0VERUZBVUxUKTsKKwkJCQlyZXR1cm47CisJCQljYXNlIEltYWdld3JpdGVyUGFja2FnZS5QUk9KRUNURURfTUFQX0lNQUdFX0xPR0dFUl9fTE9HX0FMTF9ERUNPUkFUT1JTOgorCQkJCXNldExvZ0FsbERlY29yYXRvcnMoTE9HX0FMTF9ERUNPUkFUT1JTX0VERUZBVUxUKTsKKwkJCQlyZXR1cm47CisJCQljYXNlIEltYWdld3JpdGVyUGFja2FnZS5QUk9KRUNURURfTUFQX0lNQUdFX0xPR0dFUl9fQ09MT1JfUFJPVklERVI6CisJCQkJc2V0Q29sb3JQcm92aWRlcihDT0xPUl9QUk9WSURFUl9FREVGQVVMVCk7CisJCQkJcmV0dXJuOworCQkJY2FzZSBJbWFnZXdyaXRlclBhY2thZ2UuUFJPSkVDVEVEX01BUF9JTUFHRV9MT0dHRVJfX0RFQ09SQVRPUjoKKwkJCQlzZXREZWNvcmF0b3IoKERlY29yYXRvciludWxsKTsKKwkJCQlyZXR1cm47CisJCQljYXNlIEltYWdld3JpdGVyUGFja2FnZS5QUk9KRUNURURfTUFQX0lNQUdFX0xPR0dFUl9fREVDT1JBVE9SX1BST1BFUlRJRVM6CisJCQkJc2V0RGVjb3JhdG9yUHJvcGVydGllcyhERUNPUkFUT1JfUFJPUEVSVElFU19FREVGQVVMVCk7CisJCQkJcmV0dXJuOworCQkJY2FzZSBJbWFnZXdyaXRlclBhY2thZ2UuUFJPSkVDVEVEX01BUF9JTUFHRV9MT0dHRVJfX1dJRFRIOgorCQkJCXNldFdpZHRoKFdJRFRIX0VERUZBVUxUKTsKKwkJCQlyZXR1cm47CisJCQljYXNlIEltYWdld3JpdGVyUGFja2FnZS5QUk9KRUNURURfTUFQX0lNQUdFX0xPR0dFUl9fSEVJR0hUOgorCQkJCXNldEhlaWdodChIRUlHSFRfRURFRkFVTFQpOworCQkJCXJldHVybjsKKwkJCWNhc2UgSW1hZ2V3cml0ZXJQYWNrYWdlLlBST0pFQ1RFRF9NQVBfSU1BR0VfTE9HR0VSX19QUk9KRUNUSU9OOgorCQkJCXNldFByb2plY3Rpb24oUFJPSkVDVElPTl9FREVGQVVMVCk7CisJCQkJcmV0dXJuOworCQl9CisJCXN1cGVyLmVVbnNldChmZWF0dXJlSUQpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBib29sZWFuIGVJc1NldChpbnQgZmVhdHVyZUlEKSB7CisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7CisJCQljYXNlIEltYWdld3JpdGVyUGFja2FnZS5QUk9KRUNURURfTUFQX0lNQUdFX0xPR0dFUl9fVVNFX0xPR19TQ0FMSU5HOgorCQkJCXJldHVybiB1c2VMb2dTY2FsaW5nICE9IFVTRV9MT0dfU0NBTElOR19FREVGQVVMVDsKKwkJCWNhc2UgSW1hZ2V3cml0ZXJQYWNrYWdlLlBST0pFQ1RFRF9NQVBfSU1BR0VfTE9HR0VSX19HQUlOOgorCQkJCXJldHVybiBnYWluICE9IEdBSU5fRURFRkFVTFQ7CisJCQljYXNlIEltYWdld3JpdGVyUGFja2FnZS5QUk9KRUNURURfTUFQX0lNQUdFX0xPR0dFUl9fTE9HX0FMTF9ERUNPUkFUT1JTOgorCQkJCXJldHVybiBsb2dBbGxEZWNvcmF0b3JzICE9IExPR19BTExfREVDT1JBVE9SU19FREVGQVVMVDsKKwkJCWNhc2UgSW1hZ2V3cml0ZXJQYWNrYWdlLlBST0pFQ1RFRF9NQVBfSU1BR0VfTE9HR0VSX19DT0xPUl9QUk9WSURFUjoKKwkJCQlyZXR1cm4gQ09MT1JfUFJPVklERVJfRURFRkFVTFQgPT0gbnVsbCA/IGNvbG9yUHJvdmlkZXIgIT0gbnVsbCA6ICFDT0xPUl9QUk9WSURFUl9FREVGQVVMVC5lcXVhbHMoY29sb3JQcm92aWRlcik7CisJCQljYXNlIEltYWdld3JpdGVyUGFja2FnZS5QUk9KRUNURURfTUFQX0lNQUdFX0xPR0dFUl9fREVDT1JBVE9SOgorCQkJCXJldHVybiBkZWNvcmF0b3IgIT0gbnVsbDsKKwkJCWNhc2UgSW1hZ2V3cml0ZXJQYWNrYWdlLlBST0pFQ1RFRF9NQVBfSU1BR0VfTE9HR0VSX19ERUNPUkFUT1JfUFJPUEVSVElFUzoKKwkJCQlyZXR1cm4gREVDT1JBVE9SX1BST1BFUlRJRVNfRURFRkFVTFQgPT0gbnVsbCA/IGRlY29yYXRvclByb3BlcnRpZXMgIT0gbnVsbCA6ICFERUNPUkFUT1JfUFJPUEVSVElFU19FREVGQVVMVC5lcXVhbHMoZGVjb3JhdG9yUHJvcGVydGllcyk7CisJCQljYXNlIEltYWdld3JpdGVyUGFja2FnZS5QUk9KRUNURURfTUFQX0lNQUdFX0xPR0dFUl9fV0lEVEg6CisJCQkJcmV0dXJuIHdpZHRoICE9IFdJRFRIX0VERUZBVUxUOworCQkJY2FzZSBJbWFnZXdyaXRlclBhY2thZ2UuUFJPSkVDVEVEX01BUF9JTUFHRV9MT0dHRVJfX0hFSUdIVDoKKwkJCQlyZXR1cm4gaGVpZ2h0ICE9IEhFSUdIVF9FREVGQVVMVDsKKwkJCWNhc2UgSW1hZ2V3cml0ZXJQYWNrYWdlLlBST0pFQ1RFRF9NQVBfSU1BR0VfTE9HR0VSX19QUk9KRUNUSU9OOgorCQkJCXJldHVybiBQUk9KRUNUSU9OX0VERUZBVUxUID09IG51bGwgPyBwcm9qZWN0aW9uICE9IG51bGwgOiAhUFJPSkVDVElPTl9FREVGQVVMVC5lcXVhbHMocHJvamVjdGlvbik7CisJCX0KKwkJcmV0dXJuIHN1cGVyLmVJc1NldChmZWF0dXJlSUQpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKSB7CisJCWlmIChlSXNQcm94eSgpKSByZXR1cm4gc3VwZXIudG9TdHJpbmcoKTsKKworCQlTdHJpbmdCdWZmZXIgcmVzdWx0ID0gbmV3IFN0cmluZ0J1ZmZlcihzdXBlci50b1N0cmluZygpKTsKKwkJcmVzdWx0LmFwcGVuZCgiICh1c2VMb2dTY2FsaW5nOiAiKTsKKwkJcmVzdWx0LmFwcGVuZCh1c2VMb2dTY2FsaW5nKTsKKwkJcmVzdWx0LmFwcGVuZCgiLCBnYWluOiAiKTsKKwkJcmVzdWx0LmFwcGVuZChnYWluKTsKKwkJcmVzdWx0LmFwcGVuZCgiLCBsb2dBbGxEZWNvcmF0b3JzOiAiKTsKKwkJcmVzdWx0LmFwcGVuZChsb2dBbGxEZWNvcmF0b3JzKTsKKwkJcmVzdWx0LmFwcGVuZCgiLCBjb2xvclByb3ZpZGVyOiAiKTsKKwkJcmVzdWx0LmFwcGVuZChjb2xvclByb3ZpZGVyKTsKKwkJcmVzdWx0LmFwcGVuZCgiLCBkZWNvcmF0b3JQcm9wZXJ0aWVzOiAiKTsKKwkJcmVzdWx0LmFwcGVuZChkZWNvcmF0b3JQcm9wZXJ0aWVzKTsKKwkJcmVzdWx0LmFwcGVuZCgiLCB3aWR0aDogIik7CisJCXJlc3VsdC5hcHBlbmQod2lkdGgpOworCQlyZXN1bHQuYXBwZW5kKCIsIGhlaWdodDogIik7CisJCXJlc3VsdC5hcHBlbmQoaGVpZ2h0KTsKKwkJcmVzdWx0LmFwcGVuZCgiLCBwcm9qZWN0aW9uOiAiKTsKKwkJcmVzdWx0LmFwcGVuZChwcm9qZWN0aW9uKTsKKwkJcmVzdWx0LmFwcGVuZCgnKScpOworCQlyZXR1cm4gcmVzdWx0LnRvU3RyaW5nKCk7CisJfQorCisJCisJRGVjb3JhdG9yUHJvcGVydHlJbWFnZVdyaXRlciB3cml0ZXI7CisJCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgc2ltdWxhdGlvbkV2ZW50KFNpbXVsYXRpb25FdmVudCBldmVudCkgCisJeworCQkKKwkJU3lzdGVtLm91dC5wcmludGxuKCJoZXJlIik7CisJCQorCQlpZiAoU2ltdWxhdGlvblN0YXRlLkNPTVBMRVRFRF9DWUNMRS5lcXVhbHMoZXZlbnQuZ2V0U2ltdWxhdGlvblN0YXRlKCkpKSB7CisJCQl3cml0ZXIubG9nKCk7CisJCX0KKwl9CisKKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBsb2dnZXJFdmVudChJU2ltdWxhdGlvbiBzaW11bGF0aW9uLCBMT0dHRVJfRVZFTlRTIGV2ZW50KSAKKwl7CisKKwkJaWYgKExPR0dFUl9FVkVOVFMuTE9HR0VSX1NUQVJURUQuZXF1YWxzKGV2ZW50KSkgeworCQkJd3JpdGVyID0gbmV3IERlY29yYXRvclByb3BlcnR5SW1hZ2VXcml0ZXIoc2ltdWxhdGlvbiwgdGhpcyk7CisJCQl3cml0ZXIuc3RhcnQoKTsKKwkJCQorCQkJCisJCQkKKwkJfQorCQkKKwl9CisKKwkKKwkKKwkKK30gLy9Qcm9qZWN0ZWRNYXBJbWFnZUxvZ2dlckltcGwKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzLmltYWdld3JpdGVyL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2xvZ2dlcnMvaW1hZ2V3cml0ZXIvbG9nZ2VyL0RlY29yYXRvclByb3BlcnR5SW1hZ2VXcml0ZXIuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzLmltYWdld3JpdGVyL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2xvZ2dlcnMvaW1hZ2V3cml0ZXIvbG9nZ2VyL0RlY29yYXRvclByb3BlcnR5SW1hZ2VXcml0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZjkzOGI1Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMuaW1hZ2V3cml0ZXIvc3JjL29yZy9lY2xpcHNlL3N0ZW0vbG9nZ2Vycy9pbWFnZXdyaXRlci9sb2dnZXIvRGVjb3JhdG9yUHJvcGVydHlJbWFnZVdyaXRlci5qYXZhCkBAIC0wLDAgKzEsOTQgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzLmltYWdld3JpdGVyLmxvZ2dlcjsKKworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5EeW5hbWljTGFiZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkR5bmFtaWNOb2RlTGFiZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLkRlY29yYXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuRGlzZWFzZU1vZGVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uam9icy5zaW11bGF0aW9uLklTaW11bGF0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy5pbWFnZXdyaXRlci5Qcm9qZWN0ZWRNYXBJbWFnZUxvZ2dlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMuaW1hZ2V3cml0ZXIubG9nZ2VyLlBvbHlnb25IYW5kbGVyLlByb2plY3RlZFBvbHlnb247CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzLmltYWdld3JpdGVyLmxvZ2dlci5Qb2x5Z29uSGFuZGxlci5Qcm9qZWN0ZWRQb2x5Z29uczsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnVpLnZpZXdzLmdlb2dyYXBoaWMubWFwLlN0ZW1Qb2x5Z29uc0xpc3Q7CisKK3B1YmxpYyBjbGFzcyBEZWNvcmF0b3JQcm9wZXJ0eUltYWdlV3JpdGVyIAoreworCXByaXZhdGUgUHJvamVjdGVkTWFwSW1hZ2VMb2dnZXIgbG9nZ2VyOworCQorCXByaXZhdGUgSVNpbXVsYXRpb24gc2ltdWxhdGlvbjsKKwlwcml2YXRlIERlY29yYXRvciBkZWNvcmF0b3I7CisJcHJpdmF0ZSBTdHJpbmcgcHJvcGVydGllczsKKwkKKwkKKwkKKwlwdWJsaWMgRGVjb3JhdG9yUHJvcGVydHlJbWFnZVdyaXRlcihJU2ltdWxhdGlvbiBzaW11bGF0aW9uLCBQcm9qZWN0ZWRNYXBJbWFnZUxvZ2dlciBsb2dnZXIpCisJeworCQl0aGlzLmxvZ2dlciA9IGxvZ2dlcjsKKwkJdGhpcy5zaW11bGF0aW9uID0gc2ltdWxhdGlvbjsKKwkJCisJCXRoaXMuZGVjb3JhdG9yID0gbG9nZ2VyLmdldERlY29yYXRvcigpOworCQkKKwl9CisJCisJcHJvdGVjdGVkIHZvaWQgc2V0dXAoKQorCXsKKwkJCisJCVN0ZW1Qb2x5Z29uc0xpc3QgcG9seWdvbnMgPSBVdGlscy5nZXRQb2x5Z29uc0ZvckRlY29yYXRvcihkZWNvcmF0b3IpOworCQkKKwkJCisJfQorCQorCXByaXZhdGUgRGVjb3JhdG9yIGdldERlZmF1bHREZWNvcmF0b3IoKQorCXsKKwkJRGVjb3JhdG9yIGRlY29yYXRvciA9IG51bGw7CisJCWZvciAoRGVjb3JhdG9yIGQgOiBzaW11bGF0aW9uLmdldFNjZW5hcmlvKCkuZ2V0Q2Fub25pY2FsR3JhcGgoKS5nZXREZWNvcmF0b3JzKCkpIHsKKwkJCWlmIChkIGluc3RhbmNlb2YgRGlzZWFzZU1vZGVsKSB7CisJCQkJZGVjb3JhdG9yID0gZDsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCQlyZXR1cm4gZGVjb3JhdG9yOworCX0KKwkKKwlwdWJsaWMgdm9pZCBzdGFydCgpCisJeworLy8JCWRlY29yYXRvciA9IGdldERlZmF1bHREZWNvcmF0b3IoKTsKKy8vCQlpZiAoZGVjb3JhdG9yICE9IG51bGwpIHsKKy8vCQkJCisvLwkJCWZvciAoRHluYW1pY0xhYmVsIG9iaiA6IGRlY29yYXRvci5nZXRMYWJlbHNUb1VwZGF0ZSgpKSB7CisvLwkJCQlpZiAob2JqIGluc3RhbmNlb2YgRHluYW1pY05vZGVMYWJlbCkgeworLy8JCQkJCQorLy8JCQkKKy8vCQkJCQlQcm9qZWN0ZWRQb2x5Z29ucyBwcCA9IFBvbHlnb25IYW5kbGVyLmdldFBvbHlnb25zRm9yUHJvamVjdGlvbihsb2dnZXIuZ2V0UHJvamVjdGlvbigpLCAoRHluYW1pY05vZGVMYWJlbClvYmopOworLy8JCQkJfQorLy8JCQl9CisvLwkJfQorCX0KKwkKKwlwdWJsaWMgdm9pZCBsb2coKQorCXsKKwkJZGVjb3JhdG9yID0gZ2V0RGVmYXVsdERlY29yYXRvcigpOworCQlpZiAoZGVjb3JhdG9yICE9IG51bGwpIHsKKwkJCQorCQkJZm9yIChEeW5hbWljTGFiZWwgb2JqIDogZGVjb3JhdG9yLmdldExhYmVsc1RvVXBkYXRlKCkpIHsKKwkJCQlpZiAob2JqIGluc3RhbmNlb2YgRHluYW1pY05vZGVMYWJlbCkgeworCQkJCQkKKwkJCQorCQkJCQlQcm9qZWN0ZWRQb2x5Z29ucyBwcCA9IFBvbHlnb25IYW5kbGVyLmdldFBvbHlnb25zRm9yUHJvamVjdGlvbihsb2dnZXIuZ2V0UHJvamVjdGlvbigpLCAoRHluYW1pY05vZGVMYWJlbClvYmopOworCQkJCQkKKwkJCQkJaWYgKHBwICE9IG51bGwpIHsKKwkJCQkJCXBwLnRvU3RyaW5nKCk7CisJCQkJCX0KKwkJCQkJCisJCQkJCQorLy8JCQkJCWZvciAoUHJvamVjdGVkUG9seWdvbiBwIDogcHAucG9seWdvbnMpIHsKKy8vCQkJCQkJZm9yIChpbnQgaT0wOyBpPHAucG9pbnRzLmxlbmd0aC0xOyBpKz0yKSB7CisvLwkJCQkJCQlTeXN0ZW0ub3V0LnByaW50KHAucG9pbnRzW2ldICsgIiwiICsgcC5wb2ludHNbaSsxXSk7CisvLwkJCQkJCX0KKy8vCQkJCQl9CisJCQkJCQorCQkJCX0KKwkJCX0KKwkJfQorCX0KKwkKK30KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzLmltYWdld3JpdGVyL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2xvZ2dlcnMvaW1hZ2V3cml0ZXIvbG9nZ2VyL1BvbHlnb25IYW5kbGVyLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy5pbWFnZXdyaXRlci9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9sb2dnZXJzL2ltYWdld3JpdGVyL2xvZ2dlci9Qb2x5Z29uSGFuZGxlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZkZWE5OTcKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy5pbWFnZXdyaXRlci9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9sb2dnZXJzL2ltYWdld3JpdGVyL2xvZ2dlci9Qb2x5Z29uSGFuZGxlci5qYXZhCkBAIC0wLDAgKzEsMTE3IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy5pbWFnZXdyaXRlci5sb2dnZXI7CisKK2ltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKK2ltcG9ydCBqYXZhLnV0aWwuTGlua2VkTGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuTWFwOworCitpbXBvcnQgb3JnLmFwYWNoZS5jb21tb25zLmNvbGxlY3Rpb25zLm1hcC5SZWZlcmVuY2VNYXA7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5JZGVudGlmaWFibGU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLk5vZGVMYWJlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmFkYXB0ZXJzLnNwYXRpYWwuZ2VvLkxhdExvbmc7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5hZGFwdGVycy5zcGF0aWFsLmdlby5MYXRMb25nUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5hZGFwdGVycy5zcGF0aWFsLmdlby5MYXRMb25nUHJvdmlkZXJBZGFwdGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuYWRhcHRlcnMuc3BhdGlhbC5nZW8uTGF0TG9uZ1Byb3ZpZGVyQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzLmltYWdld3JpdGVyLmxvZ2dlci5wcm9qZWN0aW9ucy5JTWFwUHJvamVjdGlvbjsKKworcHVibGljIGNsYXNzIFBvbHlnb25IYW5kbGVyIAoreworCisJCisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgTWFwPENsYXNzPD8gZXh0ZW5kcyBJTWFwUHJvamVjdGlvbj4sIE1hcD4gY2FjaGVkUG9seWdvbnMgPSAKKwkJCW5ldyBIYXNoTWFwPENsYXNzPD8gZXh0ZW5kcyBJTWFwUHJvamVjdGlvbj4sIE1hcD4oKTsKKwkKKwkKKwkKKwlwdWJsaWMgc3RhdGljIGNsYXNzIFByb2plY3RlZFBvbHlnb25zCisJeworCQlwdWJsaWMgSWRlbnRpZmlhYmxlIGlkZW50aWZpYWJsZTsKKwkJcHVibGljIExpc3Q8UHJvamVjdGVkUG9seWdvbj4gcG9seWdvbnMgPSBuZXcgTGlua2VkTGlzdDxQcm9qZWN0ZWRQb2x5Z29uPigpOworCQkKKwkJcHVibGljIFByb2plY3RlZFBvbHlnb25zKCkKKwkJeworCQkJCisJCX0KKwl9CisJCisJcHVibGljIHN0YXRpYyBjbGFzcyBQcm9qZWN0ZWRQb2x5Z29uCisJeworCQlwdWJsaWMgZG91YmxlW10gcG9pbnRzOworCQkKKwkJcHVibGljIFByb2plY3RlZFBvbHlnb24oaW50IHZlcnRleENvdW50KQorCQl7CisJCQlwb2ludHMgPSBuZXcgZG91YmxlW3ZlcnRleENvdW50KjIrMV07CisJCX0KKwl9CisJCisJCisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgUHJvamVjdGVkUG9seWdvbnMgZ2V0UHJvamVjdGVkUG9seWdvbnMoSU1hcFByb2plY3Rpb24gcHJvamVjdGlvbiwgSWRlbnRpZmlhYmxlIGlkZW50aWZpYWJsZSwgTGF0TG9uZyBwb2ludHMpCisJeworCisJCVByb2plY3RlZFBvbHlnb25zIHBvbHlnb25zID0gbmV3IFByb2plY3RlZFBvbHlnb25zKCk7CisJCXBvbHlnb25zLmlkZW50aWZpYWJsZSA9IGlkZW50aWZpYWJsZTsKKwkJaWYgKHBvaW50cyAhPSBudWxsKSB7CisJCQlmb3IgKExhdExvbmcuU2VnbWVudCBzZWdtZW50IDogcG9pbnRzLmdldFNlZ21lbnRzKCkpIHsKKwkJCQlpZiAoc2VnbWVudC5zaXplKCkgPiAwKSB7CisJCQkJCVByb2plY3RlZFBvbHlnb24gcG9seSA9IG5ldyBQcm9qZWN0ZWRQb2x5Z29uKHNlZ21lbnQuc2l6ZSgpKTsKKwkJCQkJcG9seWdvbnMucG9seWdvbnMuYWRkKHBvbHkpOworCQkJCQlpbnQgdmVydGV4Q291bnQgPSBzZWdtZW50LnNpemUoKTsKKwkJCQkJZm9yIChpbnQgaSA9IDA7IGkgPCB2ZXJ0ZXhDb3VudDsgaSsrKSB7CisJCQkJCQlkb3VibGVbXSBwdCA9IHByb2plY3Rpb24ucHJvamVjdChzZWdtZW50LmxhdGl0dWRlKGkpLCBzZWdtZW50LmxvbmdpdHVkZShpKSk7CisJCisJCQkJCQlwb2x5LnBvaW50c1tpKjJdID0gcHRbMF07CisJCQkJCQlwb2x5LnBvaW50c1tpKjIrMV0gPSBwdFsxXTsKKwkJCQkJfQorCQkJCX0KKwkJCX0KKwkJfQorCQkKKwkJaWYgKHBvbHlnb25zLnBvbHlnb25zLnNpemUoKSA8IDEpIHsKKwkJCXBvbHlnb25zID0gbnVsbDsKKwkJfQorCQkKKwkJcmV0dXJuIHBvbHlnb25zOworCX0KKwkKKwkKKwlwdWJsaWMgc3RhdGljIFByb2plY3RlZFBvbHlnb25zIGdldFBvbHlnb25zRm9yUHJvamVjdGlvbihJTWFwUHJvamVjdGlvbiBwcm9qZWN0aW9uLCBOb2RlTGFiZWwgbGFiZWwpCisJeworCQkKKwkJTWFwIHByb2plY3Rpb25DYWNoZSA9IGNhY2hlZFBvbHlnb25zLmdldChwcm9qZWN0aW9uLmdldENsYXNzKCkpOworCQlpZiAocHJvamVjdGlvbkNhY2hlID09IG51bGwpIHsKKwkJCS8vIGNyZWF0ZSBhIG5ldyBtYXAgZW50cnkgZm9yIHRoZSBwcm9qZWN0aW9uCisJCQlwcm9qZWN0aW9uQ2FjaGUgPSBuZXcgUmVmZXJlbmNlTWFwKFJlZmVyZW5jZU1hcC5TT0ZULCBSZWZlcmVuY2VNYXAuU09GVCk7CisJCQljYWNoZWRQb2x5Z29ucy5wdXQocHJvamVjdGlvbi5nZXRDbGFzcygpLCBwcm9qZWN0aW9uQ2FjaGUpOworCQl9CisJCQorCQlQcm9qZWN0ZWRQb2x5Z29ucyByZXRWYWwgPSBudWxsOworCQkKKwkJT2JqZWN0IG9iaiA9IHByb2plY3Rpb25DYWNoZS5nZXQobGFiZWwuZ2V0SWRlbnRpZmlhYmxlKCkuZ2V0VVJJKCkpOworCQlpZiAob2JqICE9IG51bGwpIHsKKwkJCVN5c3RlbS5vdXQucHJpbnRsbigiTG9hZEZyb21DYWNoZSAiKyBsYWJlbC5nZXRJZGVudGlmaWFibGUoKS5nZXRVUkkoKSk7CisJCQkKKwkJCS8vIFdlIGhhdmUgYW4gZXhpc3RpbmcgcG9seWdvbiBzZXQgaW4gY2FjaGUuICByZXR1cm4KKwkJCXJldFZhbCA9IChQcm9qZWN0ZWRQb2x5Z29ucylvYmo7CisJCX0gZWxzZSB7CisJCQkKKwkJCVN5c3RlbS5lcnIucHJpbnRsbigiTG9hZEZyb21GaWxlICIrIGxhYmVsLmdldElkZW50aWZpYWJsZSgpLmdldFVSSSgpKTsKKwkJCQorCQkJLy8gVGhlIHBvbHlnb24gaXMgbm90IGNhY2hlZC4gIFdlIG5lZWQgdG8gYWNxdWlyZSB0aGUgbGF0L2xuZyBkYXRhLCBwcm9qZWN0LCBhbmQgY2FjaGUgCisJCQlMYXRMb25nUHJvdmlkZXJBZGFwdGVyIGxhdExvbmdQcm92aWRlciA9IChMYXRMb25nUHJvdmlkZXJBZGFwdGVyKUxhdExvbmdQcm92aWRlckFkYXB0ZXJGYWN0b3J5LklOU1RBTkNFLmFkYXB0KGxhYmVsLCBMYXRMb25nUHJvdmlkZXIuY2xhc3MpOworCisJCQlsYXRMb25nUHJvdmlkZXIuc2V0VGFyZ2V0KGxhYmVsLmdldElkZW50aWZpYWJsZSgpKTsKKwkJCUxhdExvbmcgbGF0TG9uZyA9IGxhdExvbmdQcm92aWRlci5nZXRMYXRMb25nKCk7CisJCQkKKwkJCXJldFZhbCA9IGdldFByb2plY3RlZFBvbHlnb25zKHByb2plY3Rpb24sIGxhYmVsLmdldElkZW50aWZpYWJsZSgpLCBsYXRMb25nKTsKKwkJCWlmIChyZXRWYWwgIT0gbnVsbCkgeworCQkJCXByb2plY3Rpb25DYWNoZS5wdXQobGFiZWwuZ2V0SWRlbnRpZmlhYmxlKCkuZ2V0VVJJKCksIHJldFZhbCk7CisJCQl9CisJCX0KKwkJCisJCXJldHVybiByZXRWYWw7CisKKworCX0KKwkKKwkKK30KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzLmltYWdld3JpdGVyL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2xvZ2dlcnMvaW1hZ2V3cml0ZXIvbG9nZ2VyL1V0aWxzLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy5pbWFnZXdyaXRlci9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9sb2dnZXJzL2ltYWdld3JpdGVyL2xvZ2dlci9VdGlscy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE2YTBlM2MKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy5pbWFnZXdyaXRlci9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9sb2dnZXJzL2ltYWdld3JpdGVyL2xvZ2dlci9VdGlscy5qYXZhCkBAIC0wLDAgKzEsNDcgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzLmltYWdld3JpdGVyLmxvZ2dlcjsKKworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5EeW5hbWljTGFiZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkR5bmFtaWNOb2RlTGFiZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLkRlY29yYXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmFkYXB0ZXJzLnNwYXRpYWwuZ2VvLkxhdExvbmc7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5hZGFwdGVycy5zcGF0aWFsLmdlby5MYXRMb25nUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5hZGFwdGVycy5zcGF0aWFsLmdlby5MYXRMb25nUHJvdmlkZXJBZGFwdGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuYWRhcHRlcnMuc3BhdGlhbC5nZW8uTGF0TG9uZ1Byb3ZpZGVyQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS51aS52aWV3cy5nZW9ncmFwaGljLm1hcC5TdGVtUG9seWdvbnNMaXN0OworCitwdWJsaWMgY2xhc3MgVXRpbHMgeworCXB1YmxpYyBzdGF0aWMgU3RlbVBvbHlnb25zTGlzdCBnZXRQb2x5Z29uc0ZvckRlY29yYXRvcihEZWNvcmF0b3IgZGVjb3JhdG9yKSB7CisKKwkJU3RlbVBvbHlnb25zTGlzdCByZXRWYWx1ZSA9IG51bGw7CisJCUxhdExvbmdQcm92aWRlckFkYXB0ZXIgbGF0TG9uZ1Byb3ZpZGVyID0gbnVsbDsKKworCQlEeW5hbWljTm9kZUxhYmVsIG5vZGVMYWJlbCA9IG51bGw7CisJCWlmIChkZWNvcmF0b3IgIT0gbnVsbCkgeworCQkJcmV0VmFsdWUgPSBuZXcgU3RlbVBvbHlnb25zTGlzdCgpOworCQkJZm9yIChEeW5hbWljTGFiZWwgb2JqIDogZGVjb3JhdG9yLmdldExhYmVsc1RvVXBkYXRlKCkpIHsKKwkJCQlpZiAob2JqIGluc3RhbmNlb2YgRHluYW1pY05vZGVMYWJlbCkgeworCQkJCQlub2RlTGFiZWwgPSAoRHluYW1pY05vZGVMYWJlbCkgb2JqOworCQkJCQlpZiAobGF0TG9uZ1Byb3ZpZGVyID09IG51bGwpIHsKKwkJCQkJCWxhdExvbmdQcm92aWRlciA9IChMYXRMb25nUHJvdmlkZXJBZGFwdGVyKSBMYXRMb25nUHJvdmlkZXJBZGFwdGVyRmFjdG9yeS5JTlNUQU5DRQorCQkJCQkJCQkuYWRhcHQobm9kZUxhYmVsLCBMYXRMb25nUHJvdmlkZXIuY2xhc3MpOworCQkJCQl9CisJCisJCQkJCWxhdExvbmdQcm92aWRlci5zZXRUYXJnZXQobm9kZUxhYmVsLmdldElkZW50aWZpYWJsZSgpKTsKKwkJCQkJTGF0TG9uZyBsYXRMb25nID0gbGF0TG9uZ1Byb3ZpZGVyLmdldExhdExvbmcoKTsKKwkKKwkJCQkJLy8gQW55IGxhdC9sb25nIGRhdGEgZm9yIHRoaXMgbGFiZWw/CisJCQkJCWlmIChsYXRMb25nLnNpemUoKSA+IDApIHsKKwkJCQkJCS8vIGFkZGluZyBpdCB0byB0aGUgbGlzdCBvZiBwb2x5Z29ucyB0byBiZSBkcmF3bgorCQkJCQkJcmV0VmFsdWUuYWRkQWxsKG5ldyBTdGVtUG9seWdvbnNMaXN0KGxhdExvbmcsIG5vZGVMYWJlbAorCQkJCQkJCQkuZ2V0SWRlbnRpZmlhYmxlKCkpKTsKKwkJCQkJfSAvLyBpZiBBbnkgbGF0L2xvbmcgZGF0YSBmb3IgdGhpcyBsYWJlbAorCQkJCX0KKwkJCX0KKworCQl9CisKKwkJcmV0dXJuIHJldFZhbHVlOworCisJfQorCit9CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy5pbWFnZXdyaXRlci9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9sb2dnZXJzL2ltYWdld3JpdGVyL2xvZ2dlci9wcm9qZWN0aW9ucy9FcXVpcmVjdGFuZ3VsYXIuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzLmltYWdld3JpdGVyL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2xvZ2dlcnMvaW1hZ2V3cml0ZXIvbG9nZ2VyL3Byb2plY3Rpb25zL0VxdWlyZWN0YW5ndWxhci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYwYjM4ODIKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy5pbWFnZXdyaXRlci9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9sb2dnZXJzL2ltYWdld3JpdGVyL2xvZ2dlci9wcm9qZWN0aW9ucy9FcXVpcmVjdGFuZ3VsYXIuamF2YQpAQCAtMCwwICsxLDgxIEBACisvKioKKyAqIENvcHlyaWdodCAoQykgMjAxMCBJQk0gQ29ycG9yYXRpb24KKyAqLworcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMuaW1hZ2V3cml0ZXIubG9nZ2VyLnByb2plY3Rpb25zOworCitpbXBvcnQgamF2YS5hd3QuZ2VvbS5Qb2ludDJEOworCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmdyYXBoaWNzLlBvaW50OworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ncmFwaGljcy5SZWN0YW5nbGU7CisKKworCisvKioKKyAqIEltcGxlbWVudGF0aW9uIG9mIEVxdWlyZWN0YW5ndWxhciBtYXAgcHJvamVjdGlvbi4gIAorICogSW4gdGVybXMgb2YgdGhlIGV4aXN0aW5nIGNvb3JkaW5hdGUgc3lzdGVtIGltcGxpZWQKKyAqIGluIHRoZSBHbG9iZSBzeXN0ZW0sIHRoaXMgcHJvamVjdGlvbiBkb2VzIG5vdGhpbmcgYXMKKyAqIHRoaXMgaXMgdGhlIGltcGxpZWQgYmFzZSBjb29yZGluYXRlIHN5c3RlbQorICogCisgKiBAc2VlIGh0dHA6Ly9tYXRod29ybGQud29sZnJhbS5jb20vRXF1aXJlY3Rhbmd1bGFyUHJvamVjdGlvbi5odG1sCisgKgorICovCitwdWJsaWMgY2xhc3MgRXF1aXJlY3Rhbmd1bGFyIGltcGxlbWVudHMgSU1hcFByb2plY3Rpb24KK3sKKwkvKioKKwkgKiAKKwkgKi8KKwlwdWJsaWMgRXF1aXJlY3Rhbmd1bGFyKCkKKwl7CisJCXN1cGVyKCk7CisJfQorCisJLyogKG5vbi1KYXZhZG9jKQorCSAqIEBzZWUgY29tLmlibS5hbG1hZGVuLm9tbmlnbG9iZS5wcm9qZWN0aW9uLklNYXBQcm9qZWN0aW9uI3Byb2plY3QoamF2YS5hd3QuZ2VvbS5Qb2ludDJEKQorCSAqLworCXB1YmxpYyBkb3VibGVbXSBwcm9qZWN0KGRvdWJsZSBsYXQsIGRvdWJsZSBsb24pIAorCXsKKwkJcmV0dXJuIG5ldyBkb3VibGVbXSB7bGF0LGxvbn07CisJfQorCisJLyogKG5vbi1KYXZhZG9jKQorCSAqIEBzZWUgY29tLmlibS5hbG1hZGVuLm9tbmlnbG9iZS5wcm9qZWN0aW9uLklNYXBQcm9qZWN0aW9uI3Byb2plY3QoamF2YS5hd3QuZ2VvbS5Qb2ludDJELCBqYXZhLmF3dC5nZW9tLlBvaW50MkQsIGJvb2xlYW4pCisJICovCisJcHVibGljIGRvdWJsZVtdIHByb2plY3QoZG91YmxlIGxhdCwgZG91YmxlIGxvbiwgZG91YmxlIGxhdDAsIGRvdWJsZSBsb24wLCBib29sZWFuIGRpc3RvcnQpIAorCXsKKwkJcmV0dXJuIHByb2plY3QobGF0LGxvbik7CisJfQorCisJLyogKG5vbi1KYXZhZG9jKQorCSAqIEBzZWUgY29tLmlibS5hbG1hZGVuLm9tbmlnbG9iZS5wcm9qZWN0aW9uLklNYXBQcm9qZWN0aW9uI2ludmVyc2VQcm9qZWN0KGphdmEuYXd0Lmdlb20uUG9pbnQyRCkKKwkgKi8KKwlwdWJsaWMgZG91YmxlW10gaW52ZXJzZVByb2plY3QoZG91YmxlIGxhdCwgZG91YmxlIGxvbikKKwl7CisJCXJldHVybiBuZXcgZG91YmxlW10ge2xhdCxsb259OworCX0KKwkKKwkvKiAobm9uLUphdmFkb2MpCisJICogQHNlZSBjb20uaWJtLmFsbWFkZW4ub21uaWdsb2JlLnByb2plY3Rpb24uSU1hcFByb2plY3Rpb24jaW52ZXJzZVByb2plY3QoamF2YS5hd3QuZ2VvbS5Qb2ludDJELCBqYXZhLmF3dC5nZW9tLlBvaW50MkQsIGJvb2xlYW4pCisJICovCisJcHVibGljIGRvdWJsZVtdIGludmVyc2VQcm9qZWN0KGRvdWJsZSBsYXQsIGRvdWJsZSBsb24sIGRvdWJsZSBsYXQwLCBkb3VibGUgbG9uMCwgYm9vbGVhbiBkaXN0b3J0KQorCXsKKwkJcmV0dXJuIGludmVyc2VQcm9qZWN0KGxhdCwgbG9uKTsKKwl9CisJCisJLyogKG5vbi1KYXZhZG9jKQorCSAqIEBzZWUgY29tLmlibS5hbG1hZGVuLm9tbmlnbG9iZS5wcm9qZWN0aW9uLklNYXBQcm9qZWN0aW9uI3NldE9yaWdpbihqYXZhLmF3dC5nZW9tLlBvaW50MkQpCisJICovCisJcHVibGljIHZvaWQgc2V0T3JpZ2luKGRvdWJsZSBsYXQsIGRvdWJsZSBsb24pCisJeworCQkvL3Byb2plY3Rpb24gaXMgbm90IG9yaWdpbi1kZXBlbmRlbnQKKwkJLy9kb2VzIG5vdGhpbmcKKwl9CisJCisJLyogKG5vbi1KYXZhZG9jKQorCSAqIEBzZWUgY29tLmlibS5hbG1hZGVuLm9tbmlnbG9iZS5wcm9qZWN0aW9uLklNYXBQcm9qZWN0aW9uI2dldEJvdW5kcygpCisJICovCisJcHVibGljIFJlY3RhbmdsZSBnZXRCb3VuZHMoKSAKKwl7CisJCXJldHVybiBuZXcgUmVjdGFuZ2xlKC0xODAsOTAsMzYwLDE4MCk7CisJfQorCit9CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy5pbWFnZXdyaXRlci9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9sb2dnZXJzL2ltYWdld3JpdGVyL2xvZ2dlci9wcm9qZWN0aW9ucy9JTWFwUHJvamVjdGlvbi5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMuaW1hZ2V3cml0ZXIvc3JjL29yZy9lY2xpcHNlL3N0ZW0vbG9nZ2Vycy9pbWFnZXdyaXRlci9sb2dnZXIvcHJvamVjdGlvbnMvSU1hcFByb2plY3Rpb24uamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NjRjOGJmCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMuaW1hZ2V3cml0ZXIvc3JjL29yZy9lY2xpcHNlL3N0ZW0vbG9nZ2Vycy9pbWFnZXdyaXRlci9sb2dnZXIvcHJvamVjdGlvbnMvSU1hcFByb2plY3Rpb24uamF2YQpAQCAtMCwwICsxLDg2IEBACisvKioKKyAqIENvcHlyaWdodCAoQykgMjAxMCBJQk0gQ29ycG9yYXRpb24KKyAqLworcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMuaW1hZ2V3cml0ZXIubG9nZ2VyLnByb2plY3Rpb25zOworCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmdyYXBoaWNzLlBvaW50OworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ncmFwaGljcy5SZWN0YW5nbGU7CisKKworLyoqCisgKiBJbnRlcmZhY2UgdG8gcHJvdmlkZSBzdXBwb3J0IGZvciBtdWx0aXBsZSBkaWZmZXJpbmcKKyAqIHR5cGVzIG9mIG1hcCBwcm9qZWN0aW9ucy4gIFRoZSBtYWluIHB1cnBvc2Ugb2YgaW1wbGVtZW50YXRpb25zCisgKiBpcyB0byBzdXBwb3J0IHBvaW50IHRyYW5zZm9ybWF0aW9ucyBmcm9tIGdlbyBjb29yZGluYXRlcyAobGF0aXR1ZGUgYW5kIGxvbmdpdHVkZSkKKyAqIGludG8gYSB0YXJnZXQgcHJvamVjdGlvbiBjb29yZGluYXRlIHN5c3RlbSAoYW5kIHJldmVyc2UsIGlmIHBvc3NpYmxlKS4KKyAqCisgKi8KK3B1YmxpYyBpbnRlcmZhY2UgSU1hcFByb2plY3Rpb24gCit7CisJLyoqCisJICogQm91bmRhcmllcyBvZiB0aGUgbWFwIHByb2plY3Rpb24KKwkgKiBAcmV0dXJuCisJICovCisJcHVibGljIFJlY3RhbmdsZSBnZXRCb3VuZHMoKTsKKwkKKwkvKioKKwkgKiBTZXRzIHRoZSBkZWZhdWx0IG9yaWdpbiBwb2ludCBvZiB0aGUgcHJvamVjdGlvbiwgaWYgc3VwcG9ydGVkCisJICogQHBhcmFtIG9yaWdpbgorCSAqLworCXB1YmxpYyB2b2lkIHNldE9yaWdpbihkb3VibGUgbGF0LCBkb3VibGUgbG9uKTsKKworCS8qKgorCSAqIFRyYW5zZm9ybSBhIHBvaW50IGZyb20gZ2VvIGNvb3JkaW5hdGVzICBpbnRvIHRoZSB0YXJnZXQgCisJICogY29vcmRpbmF0ZSBzeXN0ZW0gdXNpbmcgYSBmaXhlZCBwcm9qZWN0aW9uLiAgSWYgdGhlIHByb2plY3Rpb24KKwkgKiBpcyBvcmlnaW4tZGVwZW5kZW50LCB0aGVuIHRoZSBkZWZhdWx0IChvciBwcmV2aW91c2x5IHNldCkgCisJICogb3JpZ2luIGlzIHVzZWQuCisJICogCisJICogQHBhcmFtIGNvb3JkIFBvaW50IHZhbHVlIHRvIHRyYW5zZm9ybQorCSAqIEByZXR1cm4gTmV3IHRyYW5zZm9ybWVkIHBvaW50CisJICovCisJcHVibGljIGRvdWJsZVtdIHByb2plY3QoZG91YmxlIGxhdCwgZG91YmxlIGxvbik7CisJCisJLyoqCisJICogVHJhbnNmb3JtIGFuZCBkaXN0b3J0IGEgcG9pbnQgZnJvbSBnZW8gY29vcmRpbmF0ZXMgaW50byB0aGUgdGFyZ2V0IAorCSAqIGNvb3JkaW5hdGUgc3lzdGVtIHVzaW5nIGEgZml4ZWQgcHJvamVjdGlvbi4gIElmIHRoZSBwcm9qZWN0aW9uCisJICogaXMgb3JpZ2luLWRlcGVuZGVudCwgdXNlIHRoZSBzcGVjaWZpZWQgb3JpZ2luLgorCSAqIAorCSAqIEBwYXJhbSBjb29yZCBQb2ludCB2YWx1ZSB0byB0cmFuc2Zvcm0KKwkgKiBAcGFyYW0gb3JpZ2luIE9yaWdpbiBwb2ludCBvZiB0aGUgcHJvamVjdGlvbiAobWlnaHQgYmUgb3B0aW9uYWwpCisJICogQHBhcmFtIGRpc3RvcnQgV2hldGhlciB0byBwZXJmb3JtIGFkZGl0aW9uYWwgZGlzdG9ydGlvbgorCSAqIEByZXR1cm4gTmV3IHRyYW5zZm9ybWVkIHBvaW50CisJICovCisJcHVibGljIGRvdWJsZVtdIHByb2plY3QoZG91YmxlIGxhdCwgZG91YmxlIGxvbiwgZG91YmxlIGxhdDAsIGRvdWJsZSBsb24wLCBib29sZWFuIGRpc3RvcnQpOworCQorCS8qKgorCSAqIFBlcmZvcm1zIGFuIGludmVyc2UgcHJvamVjdGlvbiBmcm9tIHRoZSBjdXJyZW50IHByb2plY3Rpb24gCisJICogYmFjayB0byBhIGJhc2UgZ2VvZ3JhcGhpYyBjb29yZGluYXRlLiAgSWYgdGhlIHByb2plY3Rpb24gaXMgCisJICogb3JpZ2luLWRlcGVuZGVudCwgdGhlbiB1c2UgdGhlIGRlZmF1bHQgKG9yIHByZXZpb3VzbHkgc2V0KQorCSAqIG9yaWdpbiB2YWx1ZS4KKwkgKiAKKwkgKiBXQVJOSU5HCisJICogSWYgdGhlIHZhbHVlIHBhc3NlZCB0byB7QGxpbmsgI2ludmVyc2VQcm9qZWN0KFBvaW50MkQpfWludmVyc2VQcm9qZWN0IAorCSAqIGlzIHRoZSByZXN1bHQgb2YgYSBwcmV2aW91cyB7QGxpbmsgI3Byb2plY3QoUG9pbnQyRCl9IGFuZCB0aGUKKwkgKiBvcmlnaW4gaGFzIGNoYW5nZWQsIHRoZSB2YWx1ZXMgbWF5IG5vdCBiZSBlcXVhbC4KKwkgKiAKKwkgKiBAcGFyYW0gY29vcmQgUHJvamVjdGVkIHBvaW50IHRvIHRyYW5zZm9ybQorCSAqIEByZXR1cm4gVW5wcm9qZWN0ZWQgZ2VvZ3JhcGhpYyBjb29yZGluYXRlCisJICovCisJcHVibGljIGRvdWJsZVtdIGludmVyc2VQcm9qZWN0KGRvdWJsZSBsYXQsIGRvdWJsZSBsb24pOworCQorCS8qKgorCSAqIFBlcmZvcm1zIGFuIGludmVyc2UgcHJvamVjdGlvbiBmcm9tIHRoZSBjdXJyZW50IHByb2plY3Rpb24gCisJICogYmFjayB0byBhIGJhc2UgZ2VvZ3JhcGhpYyBjb29yZGluYXRlLiAgSWYgdGhlIHByb2plY3Rpb24gaXMgCisJICogb3JpZ2luLWRlcGVuZGVudCwgdGhlbiB1c2Ugc3BlY2lmaWVkIG9yaWdpbiBwYXJhbWV0ZXIuCisJICogCisJICogV0FSTklORworCSAqIElmIHRoZSB2YWx1ZSBwYXNzZWQgdG8ge0BsaW5rICNpbnZlcnNlUHJvamVjdChQb2ludDJEKX1pbnZlcnNlUHJvamVjdCAKKwkgKiBpcyB0aGUgcmVzdWx0IG9mIGEgcHJldmlvdXMge0BsaW5rICNwcm9qZWN0KFBvaW50MkQpfSBhbmQgdGhlCisJICogb3JpZ2luIGhhcyBjaGFuZ2VkLCB0aGUgdmFsdWVzIG1heSBub3QgYmUgZXF1YWwuCisJICogCisJICogQHBhcmFtIGNvb3JkIFByb2plY3RlZCBwb2ludCB0byB0cmFuc2Zvcm0KKwkgKiBAcGFyYW0gb3JpZ2luIE9yaWdpbiBwb2ludCBvZiB0aGUgcHJvamVjdGlvbiAobWlnaHQgYmUgb3B0aW9uYWwpCisJICogQHBhcmFtIGRpc3RvcnQgV2hldGhlciB0byBwZXJmb3JtIGFkZGl0aW9uYWwgZGlzdG9ydGlvbgorCSAqIEByZXR1cm4gVW5wcm9qZWN0ZWQgZ2VvZ3JhcGhpYyBjb29yZGluYXRlCisJICovCisJcHVibGljIGRvdWJsZVtdIGludmVyc2VQcm9qZWN0KGRvdWJsZSBsYXQsIGRvdWJsZSBsb24sIGRvdWJsZSBsYXQwLCBkb3VibGUgbG9uMCwgYm9vbGVhbiBkaXN0b3J0KTsKK30KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzLmltYWdld3JpdGVyL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2xvZ2dlcnMvaW1hZ2V3cml0ZXIvcHJlc2VudGF0aW9uL0ltYWdld3JpdGVyQWN0aW9uQmFyQ29udHJpYnV0b3IuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzLmltYWdld3JpdGVyL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2xvZ2dlcnMvaW1hZ2V3cml0ZXIvcHJlc2VudGF0aW9uL0ltYWdld3JpdGVyQWN0aW9uQmFyQ29udHJpYnV0b3IuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNzhmZGI2Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMuaW1hZ2V3cml0ZXIvc3JjL29yZy9lY2xpcHNlL3N0ZW0vbG9nZ2Vycy9pbWFnZXdyaXRlci9wcmVzZW50YXRpb24vSW1hZ2V3cml0ZXJBY3Rpb25CYXJDb250cmlidXRvci5qYXZhCkBAIC0wLDAgKzEsNDU1IEBACisvKioKKyAqIDxjb3B5cmlnaHQ+CisgKiA8L2NvcHlyaWdodD4KKyAqCisgKiAkSWQkCisgKi8KK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzLmltYWdld3JpdGVyLnByZXNlbnRhdGlvbjsKKworaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7CitpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnVpLmFjdGlvbi5Xb3JrYmVuY2hXaW5kb3dBY3Rpb25EZWxlZ2F0ZTsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udWkudmlld2VyLklWaWV3ZXJQcm92aWRlcjsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LmRvbWFpbi5FZGl0aW5nRG9tYWluOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LmRvbWFpbi5JRWRpdGluZ0RvbWFpblByb3ZpZGVyOworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkuYWN0aW9uLkNvbnRyb2xBY3Rpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkuYWN0aW9uLkNyZWF0ZUNoaWxkQWN0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmFjdGlvbi5DcmVhdGVTaWJsaW5nQWN0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmFjdGlvbi5FZGl0aW5nRG9tYWluQWN0aW9uQmFyQ29udHJpYnV0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkuYWN0aW9uLkxvYWRSZXNvdXJjZUFjdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5hY3Rpb24uVmFsaWRhdGVBY3Rpb247CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uQWN0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5BY3Rpb25Db250cmlidXRpb25JdGVtOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JQWN0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JQ29udHJpYnV0aW9uSXRlbTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSUNvbnRyaWJ1dGlvbk1hbmFnZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklNZW51TGlzdGVuZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklNZW51TWFuYWdlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSVRvb2xCYXJNYW5hZ2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5NZW51TWFuYWdlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uU2VwYXJhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5TdWJDb250cmlidXRpb25JdGVtOworCitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb25Qcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTdHJ1Y3R1cmVkU2VsZWN0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuU2VsZWN0aW9uQ2hhbmdlZEV2ZW50OworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuU3RydWN0dXJlZFNlbGVjdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlZpZXdlcjsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLndpemFyZC5XaXphcmREaWFsb2c7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMuaW1hZ2V3cml0ZXIucHJvdmlkZXIuSW1hZ2VXcml0ZXJMb2dnZXJFZGl0UGx1Z2luOworCitpbXBvcnQgb3JnLmVjbGlwc2UudWkuSUVkaXRvclBhcnQ7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuUGFydEluaXRFeGNlcHRpb247CisKKy8qKgorICogVGhpcyBpcyB0aGUgYWN0aW9uIGJhciBjb250cmlidXRvciBmb3IgdGhlIEltYWdld3JpdGVyIG1vZGVsIGVkaXRvci4KKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIEltYWdld3JpdGVyQWN0aW9uQmFyQ29udHJpYnV0b3IKKwlleHRlbmRzIEVkaXRpbmdEb21haW5BY3Rpb25CYXJDb250cmlidXRvcgorCWltcGxlbWVudHMgSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lciB7CisJLyoqCisJICogQWN0aW9uIHRvIGNyZWF0ZSBvYmplY3RzIGZyb20gdGhlIEltYWdld3JpdGVyIG1vZGVsLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBzdGF0aWMgY2xhc3MgTmV3QWN0aW9uIGV4dGVuZHMgV29ya2JlbmNoV2luZG93QWN0aW9uRGVsZWdhdGUgeworCQkvKioKKwkJICogQHNlZSBvcmcuZWNsaXBzZS51aS5JQWN0aW9uRGVsZWdhdGUjcnVuKG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JQWN0aW9uKQorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJcHVibGljIHZvaWQgcnVuKElBY3Rpb24gYWN0aW9uKSB7CisJCQlJbWFnZXdyaXRlck1vZGVsV2l6YXJkIHdpemFyZCA9IG5ldyBJbWFnZXdyaXRlck1vZGVsV2l6YXJkKCk7CisJCQl3aXphcmQuaW5pdChnZXRXaW5kb3coKS5nZXRXb3JrYmVuY2goKSwgU3RydWN0dXJlZFNlbGVjdGlvbi5FTVBUWSk7CisJCQlXaXphcmREaWFsb2cgd2l6YXJkRGlhbG9nID0gbmV3IFdpemFyZERpYWxvZyhnZXRXaW5kb3coKS5nZXRTaGVsbCgpLCB3aXphcmQpOworCQkJd2l6YXJkRGlhbG9nLm9wZW4oKTsKKwkJfQorCX0KKworCS8qKgorCSAqIFRoaXMga2VlcHMgdHJhY2sgb2YgdGhlIGFjdGl2ZSBlZGl0b3IuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIElFZGl0b3JQYXJ0IGFjdGl2ZUVkaXRvclBhcnQ7CisKKwkvKioKKwkgKiBUaGlzIGtlZXBzIHRyYWNrIG9mIHRoZSBjdXJyZW50IHNlbGVjdGlvbiBwcm92aWRlci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgSVNlbGVjdGlvblByb3ZpZGVyIHNlbGVjdGlvblByb3ZpZGVyOworCisJLyoqCisJICogVGhpcyBhY3Rpb24gb3BlbnMgdGhlIFByb3BlcnRpZXMgdmlldy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgSUFjdGlvbiBzaG93UHJvcGVydGllc1ZpZXdBY3Rpb24gPQorCQluZXcgQWN0aW9uKEltYWdlV3JpdGVyTG9nZ2VyRWRpdFBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoIl9VSV9TaG93UHJvcGVydGllc1ZpZXdfbWVudV9pdGVtIikpIHsKKwkJCUBPdmVycmlkZQorCQkJcHVibGljIHZvaWQgcnVuKCkgeworCQkJCXRyeSB7CisJCQkJCWdldFBhZ2UoKS5zaG93Vmlldygib3JnLmVjbGlwc2UudWkudmlld3MuUHJvcGVydHlTaGVldCIpOworCQkJCX0KKwkJCQljYXRjaCAoUGFydEluaXRFeGNlcHRpb24gZXhjZXB0aW9uKSB7CisJCQkJCUltYWdlV3JpdGVyTG9nZ2VyRWRpdFBsdWdpbi5JTlNUQU5DRS5sb2coZXhjZXB0aW9uKTsKKwkJCQl9CisJCQl9CisJCX07CisKKwkvKioKKwkgKiBUaGlzIGFjdGlvbiByZWZyZXNoZXMgdGhlIHZpZXdlciBvZiB0aGUgY3VycmVudCBlZGl0b3IgaWYgdGhlIGVkaXRvcgorCSAqIGltcGxlbWVudHMge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5jb21tb24udWkudmlld2VyLklWaWV3ZXJQcm92aWRlcn0uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIElBY3Rpb24gcmVmcmVzaFZpZXdlckFjdGlvbiA9CisJCW5ldyBBY3Rpb24oSW1hZ2VXcml0ZXJMb2dnZXJFZGl0UGx1Z2luLklOU1RBTkNFLmdldFN0cmluZygiX1VJX1JlZnJlc2hWaWV3ZXJfbWVudV9pdGVtIikpIHsKKwkJCUBPdmVycmlkZQorCQkJcHVibGljIGJvb2xlYW4gaXNFbmFibGVkKCkgeworCQkJCXJldHVybiBhY3RpdmVFZGl0b3JQYXJ0IGluc3RhbmNlb2YgSVZpZXdlclByb3ZpZGVyOworCQkJfQorCisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyB2b2lkIHJ1bigpIHsKKwkJCQlpZiAoYWN0aXZlRWRpdG9yUGFydCBpbnN0YW5jZW9mIElWaWV3ZXJQcm92aWRlcikgeworCQkJCQlWaWV3ZXIgdmlld2VyID0gKChJVmlld2VyUHJvdmlkZXIpYWN0aXZlRWRpdG9yUGFydCkuZ2V0Vmlld2VyKCk7CisJCQkJCWlmICh2aWV3ZXIgIT0gbnVsbCkgeworCQkJCQkJdmlld2VyLnJlZnJlc2goKTsKKwkJCQkJfQorCQkJCX0KKwkJCX0KKwkJfTsKKworCS8qKgorCSAqIFRoaXMgd2lsbCBjb250YWluIG9uZSB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkuYWN0aW9uLkNyZWF0ZUNoaWxkQWN0aW9ufSBjb3JyZXNwb25kaW5nIHRvIGVhY2ggZGVzY3JpcHRvcgorCSAqIGdlbmVyYXRlZCBmb3IgdGhlIGN1cnJlbnQgc2VsZWN0aW9uIGJ5IHRoZSBpdGVtIHByb3ZpZGVyLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBDb2xsZWN0aW9uPElBY3Rpb24+IGNyZWF0ZUNoaWxkQWN0aW9uczsKKworCS8qKgorCSAqIFRoaXMgaXMgdGhlIG1lbnUgbWFuYWdlciBpbnRvIHdoaWNoIG1lbnUgY29udHJpYnV0aW9uIGl0ZW1zIHNob3VsZCBiZSBhZGRlZCBmb3IgQ3JlYXRlQ2hpbGQgYWN0aW9ucy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgSU1lbnVNYW5hZ2VyIGNyZWF0ZUNoaWxkTWVudU1hbmFnZXI7CisKKwkvKioKKwkgKiBUaGlzIHdpbGwgY29udGFpbiBvbmUge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmFjdGlvbi5DcmVhdGVTaWJsaW5nQWN0aW9ufSBjb3JyZXNwb25kaW5nIHRvIGVhY2ggZGVzY3JpcHRvcgorCSAqIGdlbmVyYXRlZCBmb3IgdGhlIGN1cnJlbnQgc2VsZWN0aW9uIGJ5IHRoZSBpdGVtIHByb3ZpZGVyLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBDb2xsZWN0aW9uPElBY3Rpb24+IGNyZWF0ZVNpYmxpbmdBY3Rpb25zOworCisJLyoqCisJICogVGhpcyBpcyB0aGUgbWVudSBtYW5hZ2VyIGludG8gd2hpY2ggbWVudSBjb250cmlidXRpb24gaXRlbXMgc2hvdWxkIGJlIGFkZGVkIGZvciBDcmVhdGVTaWJsaW5nIGFjdGlvbnMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIElNZW51TWFuYWdlciBjcmVhdGVTaWJsaW5nTWVudU1hbmFnZXI7CisKKwkvKioKKwkgKiBUaGlzIGNyZWF0ZXMgYW4gaW5zdGFuY2Ugb2YgdGhlIGNvbnRyaWJ1dG9yLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBJbWFnZXdyaXRlckFjdGlvbkJhckNvbnRyaWJ1dG9yKCkgeworCQlzdXBlcihBRERJVElPTlNfTEFTVF9TVFlMRSk7CisJCWxvYWRSZXNvdXJjZUFjdGlvbiA9IG5ldyBMb2FkUmVzb3VyY2VBY3Rpb24oKTsKKwkJdmFsaWRhdGVBY3Rpb24gPSBuZXcgVmFsaWRhdGVBY3Rpb24oKTsKKwkJY29udHJvbEFjdGlvbiA9IG5ldyBDb250cm9sQWN0aW9uKCk7CisJfQorCisJLyoqCisJICogVGhpcyBhZGRzIFNlcGFyYXRvcnMgZm9yIGVkaXRvciBhZGRpdGlvbnMgdG8gdGhlIHRvb2wgYmFyLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGNvbnRyaWJ1dGVUb1Rvb2xCYXIoSVRvb2xCYXJNYW5hZ2VyIHRvb2xCYXJNYW5hZ2VyKSB7CisJCXRvb2xCYXJNYW5hZ2VyLmFkZChuZXcgU2VwYXJhdG9yKCJpbWFnZXdyaXRlci1zZXR0aW5ncyIpKTsKKwkJdG9vbEJhck1hbmFnZXIuYWRkKG5ldyBTZXBhcmF0b3IoImltYWdld3JpdGVyLWFkZGl0aW9ucyIpKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFkZHMgdG8gdGhlIG1lbnUgYmFyIGEgbWVudSBhbmQgc29tZSBzZXBhcmF0b3JzIGZvciBlZGl0b3IgYWRkaXRpb25zLAorCSAqIGFzIHdlbGwgYXMgdGhlIHN1Yi1tZW51cyBmb3Igb2JqZWN0IGNyZWF0aW9uIGl0ZW1zLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGNvbnRyaWJ1dGVUb01lbnUoSU1lbnVNYW5hZ2VyIG1lbnVNYW5hZ2VyKSB7CisJCXN1cGVyLmNvbnRyaWJ1dGVUb01lbnUobWVudU1hbmFnZXIpOworCisJCUlNZW51TWFuYWdlciBzdWJtZW51TWFuYWdlciA9IG5ldyBNZW51TWFuYWdlcihJbWFnZVdyaXRlckxvZ2dlckVkaXRQbHVnaW4uSU5TVEFOQ0UuZ2V0U3RyaW5nKCJfVUlfSW1hZ2V3cml0ZXJFZGl0b3JfbWVudSIpLCAib3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzLmltYWdld3JpdGVyTWVudUlEIik7CisJCW1lbnVNYW5hZ2VyLmluc2VydEFmdGVyKCJhZGRpdGlvbnMiLCBzdWJtZW51TWFuYWdlcik7CisJCXN1Ym1lbnVNYW5hZ2VyLmFkZChuZXcgU2VwYXJhdG9yKCJzZXR0aW5ncyIpKTsKKwkJc3VibWVudU1hbmFnZXIuYWRkKG5ldyBTZXBhcmF0b3IoImFjdGlvbnMiKSk7CisJCXN1Ym1lbnVNYW5hZ2VyLmFkZChuZXcgU2VwYXJhdG9yKCJhZGRpdGlvbnMiKSk7CisJCXN1Ym1lbnVNYW5hZ2VyLmFkZChuZXcgU2VwYXJhdG9yKCJhZGRpdGlvbnMtZW5kIikpOworCisJCS8vIFByZXBhcmUgZm9yIENyZWF0ZUNoaWxkIGl0ZW0gYWRkaXRpb24gb3IgcmVtb3ZhbC4KKwkJLy8KKwkJY3JlYXRlQ2hpbGRNZW51TWFuYWdlciA9IG5ldyBNZW51TWFuYWdlcihJbWFnZVdyaXRlckxvZ2dlckVkaXRQbHVnaW4uSU5TVEFOQ0UuZ2V0U3RyaW5nKCJfVUlfQ3JlYXRlQ2hpbGRfbWVudV9pdGVtIikpOworCQlzdWJtZW51TWFuYWdlci5pbnNlcnRCZWZvcmUoImFkZGl0aW9ucyIsIGNyZWF0ZUNoaWxkTWVudU1hbmFnZXIpOworCisJCS8vIFByZXBhcmUgZm9yIENyZWF0ZVNpYmxpbmcgaXRlbSBhZGRpdGlvbiBvciByZW1vdmFsLgorCQkvLworCQljcmVhdGVTaWJsaW5nTWVudU1hbmFnZXIgPSBuZXcgTWVudU1hbmFnZXIoSW1hZ2VXcml0ZXJMb2dnZXJFZGl0UGx1Z2luLklOU1RBTkNFLmdldFN0cmluZygiX1VJX0NyZWF0ZVNpYmxpbmdfbWVudV9pdGVtIikpOworCQlzdWJtZW51TWFuYWdlci5pbnNlcnRCZWZvcmUoImFkZGl0aW9ucyIsIGNyZWF0ZVNpYmxpbmdNZW51TWFuYWdlcik7CisKKwkJLy8gRm9yY2UgYW4gdXBkYXRlIGJlY2F1c2UgRWNsaXBzZSBoaWRlcyBlbXB0eSBtZW51cyBub3cuCisJCS8vCisJCXN1Ym1lbnVNYW5hZ2VyLmFkZE1lbnVMaXN0ZW5lcgorCQkJKG5ldyBJTWVudUxpc3RlbmVyKCkgeworCQkJCSBwdWJsaWMgdm9pZCBtZW51QWJvdXRUb1Nob3coSU1lbnVNYW5hZ2VyIG1lbnVNYW5hZ2VyKSB7CisJCQkJCSBtZW51TWFuYWdlci51cGRhdGVBbGwodHJ1ZSk7CisJCQkJIH0KKwkJCSB9KTsKKworCQlhZGRHbG9iYWxBY3Rpb25zKHN1Ym1lbnVNYW5hZ2VyKTsKKwl9CisKKwkvKioKKwkgKiBXaGVuIHRoZSBhY3RpdmUgZWRpdG9yIGNoYW5nZXMsIHRoaXMgcmVtZW1iZXJzIHRoZSBjaGFuZ2UgYW5kIHJlZ2lzdGVycyB3aXRoIGl0IGFzIGEgc2VsZWN0aW9uIHByb3ZpZGVyLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIHNldEFjdGl2ZUVkaXRvcihJRWRpdG9yUGFydCBwYXJ0KSB7CisJCXN1cGVyLnNldEFjdGl2ZUVkaXRvcihwYXJ0KTsKKwkJYWN0aXZlRWRpdG9yUGFydCA9IHBhcnQ7CisKKwkJLy8gU3dpdGNoIHRvIHRoZSBuZXcgc2VsZWN0aW9uIHByb3ZpZGVyLgorCQkvLworCQlpZiAoc2VsZWN0aW9uUHJvdmlkZXIgIT0gbnVsbCkgeworCQkJc2VsZWN0aW9uUHJvdmlkZXIucmVtb3ZlU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyKHRoaXMpOworCQl9CisJCWlmIChwYXJ0ID09IG51bGwpIHsKKwkJCXNlbGVjdGlvblByb3ZpZGVyID0gbnVsbDsKKwkJfQorCQllbHNlIHsKKwkJCXNlbGVjdGlvblByb3ZpZGVyID0gcGFydC5nZXRTaXRlKCkuZ2V0U2VsZWN0aW9uUHJvdmlkZXIoKTsKKwkJCXNlbGVjdGlvblByb3ZpZGVyLmFkZFNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcih0aGlzKTsKKworCQkJLy8gRmFrZSBhIHNlbGVjdGlvbiBjaGFuZ2VkIGV2ZW50IHRvIHVwZGF0ZSB0aGUgbWVudXMuCisJCQkvLworCQkJaWYgKHNlbGVjdGlvblByb3ZpZGVyLmdldFNlbGVjdGlvbigpICE9IG51bGwpIHsKKwkJCQlzZWxlY3Rpb25DaGFuZ2VkKG5ldyBTZWxlY3Rpb25DaGFuZ2VkRXZlbnQoc2VsZWN0aW9uUHJvdmlkZXIsIHNlbGVjdGlvblByb3ZpZGVyLmdldFNlbGVjdGlvbigpKSk7CisJCQl9CisJCX0KKwl9CisKKwkvKioKKwkgKiBUaGlzIGltcGxlbWVudHMge0BsaW5rIG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcn0sCisJICogaGFuZGxpbmcge0BsaW5rIG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuU2VsZWN0aW9uQ2hhbmdlZEV2ZW50fXMgYnkgcXVlcnlpbmcgZm9yIHRoZSBjaGlsZHJlbiBhbmQgc2libGluZ3MKKwkgKiB0aGF0IGNhbiBiZSBhZGRlZCB0byB0aGUgc2VsZWN0ZWQgb2JqZWN0IGFuZCB1cGRhdGluZyB0aGUgbWVudXMgYWNjb3JkaW5nbHkuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgc2VsZWN0aW9uQ2hhbmdlZChTZWxlY3Rpb25DaGFuZ2VkRXZlbnQgZXZlbnQpIHsKKwkJLy8gUmVtb3ZlIGFueSBtZW51IGl0ZW1zIGZvciBvbGQgc2VsZWN0aW9uLgorCQkvLworCQlpZiAoY3JlYXRlQ2hpbGRNZW51TWFuYWdlciAhPSBudWxsKSB7CisJCQlkZXBvcHVsYXRlTWFuYWdlcihjcmVhdGVDaGlsZE1lbnVNYW5hZ2VyLCBjcmVhdGVDaGlsZEFjdGlvbnMpOworCQl9CisJCWlmIChjcmVhdGVTaWJsaW5nTWVudU1hbmFnZXIgIT0gbnVsbCkgeworCQkJZGVwb3B1bGF0ZU1hbmFnZXIoY3JlYXRlU2libGluZ01lbnVNYW5hZ2VyLCBjcmVhdGVTaWJsaW5nQWN0aW9ucyk7CisJCX0KKworCQkvLyBRdWVyeSB0aGUgbmV3IHNlbGVjdGlvbiBmb3IgYXBwcm9wcmlhdGUgbmV3IGNoaWxkL3NpYmxpbmcgZGVzY3JpcHRvcnMKKwkJLy8KKwkJQ29sbGVjdGlvbjw/PiBuZXdDaGlsZERlc2NyaXB0b3JzID0gbnVsbDsKKwkJQ29sbGVjdGlvbjw/PiBuZXdTaWJsaW5nRGVzY3JpcHRvcnMgPSBudWxsOworCisJCUlTZWxlY3Rpb24gc2VsZWN0aW9uID0gZXZlbnQuZ2V0U2VsZWN0aW9uKCk7CisJCWlmIChzZWxlY3Rpb24gaW5zdGFuY2VvZiBJU3RydWN0dXJlZFNlbGVjdGlvbiAmJiAoKElTdHJ1Y3R1cmVkU2VsZWN0aW9uKXNlbGVjdGlvbikuc2l6ZSgpID09IDEpIHsKKwkJCU9iamVjdCBvYmplY3QgPSAoKElTdHJ1Y3R1cmVkU2VsZWN0aW9uKXNlbGVjdGlvbikuZ2V0Rmlyc3RFbGVtZW50KCk7CisKKwkJCUVkaXRpbmdEb21haW4gZG9tYWluID0gKChJRWRpdGluZ0RvbWFpblByb3ZpZGVyKWFjdGl2ZUVkaXRvclBhcnQpLmdldEVkaXRpbmdEb21haW4oKTsKKworCQkJbmV3Q2hpbGREZXNjcmlwdG9ycyA9IGRvbWFpbi5nZXROZXdDaGlsZERlc2NyaXB0b3JzKG9iamVjdCwgbnVsbCk7CisJCQluZXdTaWJsaW5nRGVzY3JpcHRvcnMgPSBkb21haW4uZ2V0TmV3Q2hpbGREZXNjcmlwdG9ycyhudWxsLCBvYmplY3QpOworCQl9CisKKwkJLy8gR2VuZXJhdGUgYWN0aW9ucyBmb3Igc2VsZWN0aW9uOyBwb3B1bGF0ZSBhbmQgcmVkcmF3IHRoZSBtZW51cy4KKwkJLy8KKwkJY3JlYXRlQ2hpbGRBY3Rpb25zID0gZ2VuZXJhdGVDcmVhdGVDaGlsZEFjdGlvbnMobmV3Q2hpbGREZXNjcmlwdG9ycywgc2VsZWN0aW9uKTsKKwkJY3JlYXRlU2libGluZ0FjdGlvbnMgPSBnZW5lcmF0ZUNyZWF0ZVNpYmxpbmdBY3Rpb25zKG5ld1NpYmxpbmdEZXNjcmlwdG9ycywgc2VsZWN0aW9uKTsKKworCQlpZiAoY3JlYXRlQ2hpbGRNZW51TWFuYWdlciAhPSBudWxsKSB7CisJCQlwb3B1bGF0ZU1hbmFnZXIoY3JlYXRlQ2hpbGRNZW51TWFuYWdlciwgY3JlYXRlQ2hpbGRBY3Rpb25zLCBudWxsKTsKKwkJCWNyZWF0ZUNoaWxkTWVudU1hbmFnZXIudXBkYXRlKHRydWUpOworCQl9CisJCWlmIChjcmVhdGVTaWJsaW5nTWVudU1hbmFnZXIgIT0gbnVsbCkgeworCQkJcG9wdWxhdGVNYW5hZ2VyKGNyZWF0ZVNpYmxpbmdNZW51TWFuYWdlciwgY3JlYXRlU2libGluZ0FjdGlvbnMsIG51bGwpOworCQkJY3JlYXRlU2libGluZ01lbnVNYW5hZ2VyLnVwZGF0ZSh0cnVlKTsKKwkJfQorCX0KKworCS8qKgorCSAqIFRoaXMgZ2VuZXJhdGVzIGEge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmFjdGlvbi5DcmVhdGVDaGlsZEFjdGlvbn0gZm9yIGVhY2ggb2JqZWN0IGluIDxjb2RlPmRlc2NyaXB0b3JzPC9jb2RlPiwKKwkgKiBhbmQgcmV0dXJucyB0aGUgY29sbGVjdGlvbiBvZiB0aGVzZSBhY3Rpb25zLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBDb2xsZWN0aW9uPElBY3Rpb24+IGdlbmVyYXRlQ3JlYXRlQ2hpbGRBY3Rpb25zKENvbGxlY3Rpb248Pz4gZGVzY3JpcHRvcnMsIElTZWxlY3Rpb24gc2VsZWN0aW9uKSB7CisJCUNvbGxlY3Rpb248SUFjdGlvbj4gYWN0aW9ucyA9IG5ldyBBcnJheUxpc3Q8SUFjdGlvbj4oKTsKKwkJaWYgKGRlc2NyaXB0b3JzICE9IG51bGwpIHsKKwkJCWZvciAoT2JqZWN0IGRlc2NyaXB0b3IgOiBkZXNjcmlwdG9ycykgeworCQkJCWFjdGlvbnMuYWRkKG5ldyBDcmVhdGVDaGlsZEFjdGlvbihhY3RpdmVFZGl0b3JQYXJ0LCBzZWxlY3Rpb24sIGRlc2NyaXB0b3IpKTsKKwkJCX0KKwkJfQorCQlyZXR1cm4gYWN0aW9uczsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGdlbmVyYXRlcyBhIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5hY3Rpb24uQ3JlYXRlU2libGluZ0FjdGlvbn0gZm9yIGVhY2ggb2JqZWN0IGluIDxjb2RlPmRlc2NyaXB0b3JzPC9jb2RlPiwKKwkgKiBhbmQgcmV0dXJucyB0aGUgY29sbGVjdGlvbiBvZiB0aGVzZSBhY3Rpb25zLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBDb2xsZWN0aW9uPElBY3Rpb24+IGdlbmVyYXRlQ3JlYXRlU2libGluZ0FjdGlvbnMoQ29sbGVjdGlvbjw/PiBkZXNjcmlwdG9ycywgSVNlbGVjdGlvbiBzZWxlY3Rpb24pIHsKKwkJQ29sbGVjdGlvbjxJQWN0aW9uPiBhY3Rpb25zID0gbmV3IEFycmF5TGlzdDxJQWN0aW9uPigpOworCQlpZiAoZGVzY3JpcHRvcnMgIT0gbnVsbCkgeworCQkJZm9yIChPYmplY3QgZGVzY3JpcHRvciA6IGRlc2NyaXB0b3JzKSB7CisJCQkJYWN0aW9ucy5hZGQobmV3IENyZWF0ZVNpYmxpbmdBY3Rpb24oYWN0aXZlRWRpdG9yUGFydCwgc2VsZWN0aW9uLCBkZXNjcmlwdG9yKSk7CisJCQl9CisJCX0KKwkJcmV0dXJuIGFjdGlvbnM7CisJfQorCisJLyoqCisJICogVGhpcyBwb3B1bGF0ZXMgdGhlIHNwZWNpZmllZCA8Y29kZT5tYW5hZ2VyPC9jb2RlPiB3aXRoIHtAbGluayBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uQWN0aW9uQ29udHJpYnV0aW9uSXRlbX1zCisJICogYmFzZWQgb24gdGhlIHtAbGluayBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSUFjdGlvbn1zIGNvbnRhaW5lZCBpbiB0aGUgPGNvZGU+YWN0aW9uczwvY29kZT4gY29sbGVjdGlvbiwKKwkgKiBieSBpbnNlcnRpbmcgdGhlbSBiZWZvcmUgdGhlIHNwZWNpZmllZCBjb250cmlidXRpb24gaXRlbSA8Y29kZT5jb250cmlidXRpb25JRDwvY29kZT4uCisJICogSWYgPGNvZGU+Y29udHJpYnV0aW9uSUQ8L2NvZGU+IGlzIDxjb2RlPm51bGw8L2NvZGU+LCB0aGV5IGFyZSBzaW1wbHkgYWRkZWQuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgcG9wdWxhdGVNYW5hZ2VyKElDb250cmlidXRpb25NYW5hZ2VyIG1hbmFnZXIsIENvbGxlY3Rpb248PyBleHRlbmRzIElBY3Rpb24+IGFjdGlvbnMsIFN0cmluZyBjb250cmlidXRpb25JRCkgeworCQlpZiAoYWN0aW9ucyAhPSBudWxsKSB7CisJCQlmb3IgKElBY3Rpb24gYWN0aW9uIDogYWN0aW9ucykgeworCQkJCWlmIChjb250cmlidXRpb25JRCAhPSBudWxsKSB7CisJCQkJCW1hbmFnZXIuaW5zZXJ0QmVmb3JlKGNvbnRyaWJ1dGlvbklELCBhY3Rpb24pOworCQkJCX0KKwkJCQllbHNlIHsKKwkJCQkJbWFuYWdlci5hZGQoYWN0aW9uKTsKKwkJCQl9CisJCQl9CisJCX0KKwl9CisJCQorCS8qKgorCSAqIFRoaXMgcmVtb3ZlcyBmcm9tIHRoZSBzcGVjaWZpZWQgPGNvZGU+bWFuYWdlcjwvY29kZT4gYWxsIHtAbGluayBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uQWN0aW9uQ29udHJpYnV0aW9uSXRlbX1zCisJICogYmFzZWQgb24gdGhlIHtAbGluayBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSUFjdGlvbn1zIGNvbnRhaW5lZCBpbiB0aGUgPGNvZGU+YWN0aW9uczwvY29kZT4gY29sbGVjdGlvbi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBkZXBvcHVsYXRlTWFuYWdlcihJQ29udHJpYnV0aW9uTWFuYWdlciBtYW5hZ2VyLCBDb2xsZWN0aW9uPD8gZXh0ZW5kcyBJQWN0aW9uPiBhY3Rpb25zKSB7CisJCWlmIChhY3Rpb25zICE9IG51bGwpIHsKKwkJCUlDb250cmlidXRpb25JdGVtW10gaXRlbXMgPSBtYW5hZ2VyLmdldEl0ZW1zKCk7CisJCQlmb3IgKGludCBpID0gMDsgaSA8IGl0ZW1zLmxlbmd0aDsgaSsrKSB7CisJCQkJLy8gTG9vayBpbnRvIFN1YkNvbnRyaWJ1dGlvbkl0ZW1zCisJCQkJLy8KKwkJCQlJQ29udHJpYnV0aW9uSXRlbSBjb250cmlidXRpb25JdGVtID0gaXRlbXNbaV07CisJCQkJd2hpbGUgKGNvbnRyaWJ1dGlvbkl0ZW0gaW5zdGFuY2VvZiBTdWJDb250cmlidXRpb25JdGVtKSB7CisJCQkJCWNvbnRyaWJ1dGlvbkl0ZW0gPSAoKFN1YkNvbnRyaWJ1dGlvbkl0ZW0pY29udHJpYnV0aW9uSXRlbSkuZ2V0SW5uZXJJdGVtKCk7CisJCQkJfQorCisJCQkJLy8gRGVsZXRlIHRoZSBBY3Rpb25Db250cmlidXRpb25JdGVtcyB3aXRoIG1hdGNoaW5nIGFjdGlvbi4KKwkJCQkvLworCQkJCWlmIChjb250cmlidXRpb25JdGVtIGluc3RhbmNlb2YgQWN0aW9uQ29udHJpYnV0aW9uSXRlbSkgeworCQkJCQlJQWN0aW9uIGFjdGlvbiA9ICgoQWN0aW9uQ29udHJpYnV0aW9uSXRlbSljb250cmlidXRpb25JdGVtKS5nZXRBY3Rpb24oKTsKKwkJCQkJaWYgKGFjdGlvbnMuY29udGFpbnMoYWN0aW9uKSkgeworCQkJCQkJbWFuYWdlci5yZW1vdmUoY29udHJpYnV0aW9uSXRlbSk7CisJCQkJCX0KKwkJCQl9CisJCQl9CisJCX0KKwl9CisKKwkvKioKKwkgKiBUaGlzIHBvcHVsYXRlcyB0aGUgcG9wLXVwIG1lbnUgYmVmb3JlIGl0IGFwcGVhcnMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgbWVudUFib3V0VG9TaG93KElNZW51TWFuYWdlciBtZW51TWFuYWdlcikgeworCQlzdXBlci5tZW51QWJvdXRUb1Nob3cobWVudU1hbmFnZXIpOworCQlNZW51TWFuYWdlciBzdWJtZW51TWFuYWdlciA9IG51bGw7CisKKwkJc3VibWVudU1hbmFnZXIgPSBuZXcgTWVudU1hbmFnZXIoSW1hZ2VXcml0ZXJMb2dnZXJFZGl0UGx1Z2luLklOU1RBTkNFLmdldFN0cmluZygiX1VJX0NyZWF0ZUNoaWxkX21lbnVfaXRlbSIpKTsKKwkJcG9wdWxhdGVNYW5hZ2VyKHN1Ym1lbnVNYW5hZ2VyLCBjcmVhdGVDaGlsZEFjdGlvbnMsIG51bGwpOworCQltZW51TWFuYWdlci5pbnNlcnRCZWZvcmUoImVkaXQiLCBzdWJtZW51TWFuYWdlcik7CisKKwkJc3VibWVudU1hbmFnZXIgPSBuZXcgTWVudU1hbmFnZXIoSW1hZ2VXcml0ZXJMb2dnZXJFZGl0UGx1Z2luLklOU1RBTkNFLmdldFN0cmluZygiX1VJX0NyZWF0ZVNpYmxpbmdfbWVudV9pdGVtIikpOworCQlwb3B1bGF0ZU1hbmFnZXIoc3VibWVudU1hbmFnZXIsIGNyZWF0ZVNpYmxpbmdBY3Rpb25zLCBudWxsKTsKKwkJbWVudU1hbmFnZXIuaW5zZXJ0QmVmb3JlKCJlZGl0Iiwgc3VibWVudU1hbmFnZXIpOworCX0KKworCS8qKgorCSAqIFRoaXMgaW5zZXJ0cyBnbG9iYWwgYWN0aW9ucyBiZWZvcmUgdGhlICJhZGRpdGlvbnMtZW5kIiBzZXBhcmF0b3IuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgYWRkR2xvYmFsQWN0aW9ucyhJTWVudU1hbmFnZXIgbWVudU1hbmFnZXIpIHsKKwkJbWVudU1hbmFnZXIuaW5zZXJ0QWZ0ZXIoImFkZGl0aW9ucy1lbmQiLCBuZXcgU2VwYXJhdG9yKCJ1aS1hY3Rpb25zIikpOworCQltZW51TWFuYWdlci5pbnNlcnRBZnRlcigidWktYWN0aW9ucyIsIHNob3dQcm9wZXJ0aWVzVmlld0FjdGlvbik7CisKKwkJcmVmcmVzaFZpZXdlckFjdGlvbi5zZXRFbmFibGVkKHJlZnJlc2hWaWV3ZXJBY3Rpb24uaXNFbmFibGVkKCkpOwkJCisJCW1lbnVNYW5hZ2VyLmluc2VydEFmdGVyKCJ1aS1hY3Rpb25zIiwgcmVmcmVzaFZpZXdlckFjdGlvbik7CisKKwkJc3VwZXIuYWRkR2xvYmFsQWN0aW9ucyhtZW51TWFuYWdlcik7CisJfQorCisJLyoqCisJICogVGhpcyBlbnN1cmVzIHRoYXQgYSBkZWxldGUgYWN0aW9uIHdpbGwgY2xlYW4gdXAgYWxsIHJlZmVyZW5jZXMgdG8gZGVsZXRlZCBvYmplY3RzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCBib29sZWFuIHJlbW92ZUFsbFJlZmVyZW5jZXNPbkRlbGV0ZSgpIHsKKwkJcmV0dXJuIHRydWU7CisJfQorCit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMuaW1hZ2V3cml0ZXIvc3JjL29yZy9lY2xpcHNlL3N0ZW0vbG9nZ2Vycy9pbWFnZXdyaXRlci9wcmVzZW50YXRpb24vSW1hZ2V3cml0ZXJFZGl0b3IuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzLmltYWdld3JpdGVyL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2xvZ2dlcnMvaW1hZ2V3cml0ZXIvcHJlc2VudGF0aW9uL0ltYWdld3JpdGVyRWRpdG9yLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTAzNGM0YgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzLmltYWdld3JpdGVyL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2xvZ2dlcnMvaW1hZ2V3cml0ZXIvcHJlc2VudGF0aW9uL0ltYWdld3JpdGVyRWRpdG9yLmphdmEKQEAgLTAsMCArMSwxNzE5IEBACisvKioKKyAqIDxjb3B5cmlnaHQ+CisgKiA8L2NvcHlyaWdodD4KKyAqCisgKiAkSWQkCisgKi8KK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzLmltYWdld3JpdGVyLnByZXNlbnRhdGlvbjsKKworCitpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtOworCitpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbnM7CitpbXBvcnQgamF2YS51dGlsLkV2ZW50T2JqZWN0OworaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOworaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKK2ltcG9ydCBqYXZhLnV0aWwuTGlua2VkSGFzaE1hcDsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuTWFwOworCitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQcm9ncmVzc01vbml0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLk51bGxQcm9ncmVzc01vbml0b3I7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSU1lbnVMaXN0ZW5lcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSU1lbnVNYW5hZ2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JU3RhdHVzTGluZU1hbmFnZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklUb29sQmFyTWFuYWdlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uTWVudU1hbmFnZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLlNlcGFyYXRvcjsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmRpYWxvZ3MuTWVzc2FnZURpYWxvZzsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5kaWFsb2dzLlByb2dyZXNzTW9uaXRvckRpYWxvZzsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuQ29sdW1uV2VpZ2h0RGF0YTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvblByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVN0cnVjdHVyZWRTZWxlY3Rpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5MaXN0Vmlld2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuU2VsZWN0aW9uQ2hhbmdlZEV2ZW50OworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuU3RydWN0dXJlZFNlbGVjdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlN0cnVjdHVyZWRWaWV3ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5UYWJsZUxheW91dDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlRhYmxlVmlld2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuVHJlZVZpZXdlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlZpZXdlcjsKKworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5TV1Q7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuY3VzdG9tLkNUYWJGb2xkZXI7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZG5kLkRORDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZG5kLlRyYW5zZmVyOworCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5Db250cm9sQWRhcHRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLkNvbnRyb2xFdmVudDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ncmFwaGljcy5Qb2ludDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5sYXlvdXQuRmlsbExheW91dDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5NZW51OworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlRhYmxlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlRhYmxlQ29sdW1uOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlRyZWU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuVHJlZUNvbHVtbjsKKworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklBY3Rpb25CYXJzOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklFZGl0b3JJbnB1dDsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5JRWRpdG9yUGFydDsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5JRWRpdG9yU2l0ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5JUGFydExpc3RlbmVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2hQYXJ0OworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLlBhcnRJbml0RXhjZXB0aW9uOworCitpbXBvcnQgb3JnLmVjbGlwc2UudWkucGFydC5NdWx0aVBhZ2VFZGl0b3JQYXJ0OworCitpbXBvcnQgb3JnLmVjbGlwc2UudWkudmlld3MuY29udGVudG91dGxpbmUuQ29udGVudE91dGxpbmU7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkudmlld3MuY29udGVudG91dGxpbmUuQ29udGVudE91dGxpbmVQYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLnZpZXdzLmNvbnRlbnRvdXRsaW5lLklDb250ZW50T3V0bGluZVBhZ2U7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS52aWV3cy5wcm9wZXJ0aWVzLklQcm9wZXJ0eVNoZWV0UGFnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS52aWV3cy5wcm9wZXJ0aWVzLlByb3BlcnR5U2hlZXQ7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkudmlld3MucHJvcGVydGllcy5Qcm9wZXJ0eVNoZWV0UGFnZTsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24uY29tbWFuZC5CYXNpY0NvbW1hbmRTdGFjazsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLmNvbW1hbmQuQ29tbWFuZDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLmNvbW1hbmQuQ29tbWFuZFN0YWNrOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24uY29tbWFuZC5Db21tYW5kU3RhY2tMaXN0ZW5lcjsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LkFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbjsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udWkuVmlld2VyUGFuZTsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udWkuZWRpdG9yLlByb2JsZW1FZGl0b3JQYXJ0OworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51aS52aWV3ZXIuSVZpZXdlclByb3ZpZGVyOworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLkJhc2ljRGlhZ25vc3RpYzsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuRGlhZ25vc3RpYzsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuVVJJOworCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUucmVzb3VyY2UuUmVzb3VyY2U7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUudXRpbC5FQ29udGVudEFkYXB0ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnV0aWwuRWNvcmVVdGlsOworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQuZG9tYWluLkFkYXB0ZXJGYWN0b3J5RWRpdGluZ0RvbWFpbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5kb21haW4uRWRpdGluZ0RvbWFpbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5kb21haW4uSUVkaXRpbmdEb21haW5Qcm92aWRlcjsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkFkYXB0ZXJGYWN0b3J5SXRlbURlbGVnYXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5Db21wb3NlZEFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLlJlZmxlY3RpdmVJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeTsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLnJlc291cmNlLlJlc291cmNlSXRlbVByb3ZpZGVyQWRhcHRlckZhY3Rvcnk7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5hY3Rpb24uRWRpdGluZ0RvbWFpbkFjdGlvbkJhckNvbnRyaWJ1dG9yOworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkuY2VsbGVkaXRvci5BZGFwdGVyRmFjdG9yeVRyZWVFZGl0b3I7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5kbmQuRWRpdGluZ0RvbWFpblZpZXdlckRyb3BBZGFwdGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmRuZC5Mb2NhbFRyYW5zZmVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmRuZC5WaWV3ZXJEcmFnQWRhcHRlcjsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLnByb3ZpZGVyLkFkYXB0ZXJGYWN0b3J5Q29udGVudFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLnByb3ZpZGVyLkFkYXB0ZXJGYWN0b3J5TGFiZWxQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5wcm92aWRlci5VbndyYXBwaW5nU2VsZWN0aW9uUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkudXRpbC5FZGl0VUlVdGlsOworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkudmlldy5FeHRlbmRlZFByb3BlcnR5U2hlZXRQYWdlOworCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzLmltYWdld3JpdGVyLnByb3ZpZGVyLkltYWdld3JpdGVySXRlbVByb3ZpZGVyQWRhcHRlckZhY3Rvcnk7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnVpLlVSSUVkaXRvcklucHV0OworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnByb3ZpZGVyLkVjb3JlSXRlbVByb3ZpZGVyQWRhcHRlckZhY3Rvcnk7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5vcGVyYXRpb24uSVJ1bm5hYmxlV2l0aFByb2dyZXNzOworCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5wcm92aWRlci5Db21tb25JdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeTsKKworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5wcm92aWRlci5HcmFwaEl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5OworCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmxvZ2dlci5wcm92aWRlci5Mb2dnZXJJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeTsKKworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5wcm92aWRlci5Nb2RlbEl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5OworCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLnByb3ZpZGVyLk1vZGlmaWVySXRlbVByb3ZpZGVyQWRhcHRlckZhY3Rvcnk7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2NlbmFyaW8ucHJvdmlkZXIuU2NlbmFyaW9JdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeTsKKworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zZXF1ZW5jZXIucHJvdmlkZXIuU2VxdWVuY2VySXRlbVByb3ZpZGVyQWRhcHRlckZhY3Rvcnk7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc29sdmVyLnByb3ZpZGVyLlNvbHZlckl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5OworCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzLmltYWdld3JpdGVyLnByb3ZpZGVyLkltYWdlV3JpdGVyTG9nZ2VyRWRpdFBsdWdpbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMuaW1hZ2V3cml0ZXIucHJvdmlkZXIuSW1hZ2VXcml0ZXJMb2dnZXJFZGl0b3JBZHZpc29yOworCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzLnByb3ZpZGVyLlNpbXVsYXRpb25Mb2dnZXJJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeTsKKworCisvKioKKyAqIFRoaXMgaXMgYW4gZXhhbXBsZSBvZiBhIEltYWdld3JpdGVyIG1vZGVsIGVkaXRvci4KKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIEltYWdld3JpdGVyRWRpdG9yCisJZXh0ZW5kcyBNdWx0aVBhZ2VFZGl0b3JQYXJ0CisJaW1wbGVtZW50cyBJRWRpdGluZ0RvbWFpblByb3ZpZGVyLCBJU2VsZWN0aW9uUHJvdmlkZXIsIElNZW51TGlzdGVuZXIsIElWaWV3ZXJQcm92aWRlciB7CisJLyoqCisJICogVGhlIGZpbHRlcnMgZm9yIGZpbGUgZXh0ZW5zaW9ucyBzdXBwb3J0ZWQgYnkgdGhlIGVkaXRvci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIExpc3Q8U3RyaW5nPiBGSUxFX0VYVEVOU0lPTl9GSUxURVJTID0gcHJlZml4RXh0ZW5zaW9ucyhJbWFnZXdyaXRlck1vZGVsV2l6YXJkLkZJTEVfRVhURU5TSU9OUywgIiouIik7CisJCisJLyoqCisJICogUmV0dXJucyBhIG5ldyB1bm1vZGlmaWFibGUgbGlzdCBjb250YWluaW5nIHByZWZpeGVkIHZlcnNpb25zIG9mIHRoZSBleHRlbnNpb25zIGluIHRoZSBnaXZlbiBsaXN0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByaXZhdGUgc3RhdGljIExpc3Q8U3RyaW5nPiBwcmVmaXhFeHRlbnNpb25zKExpc3Q8U3RyaW5nPiBleHRlbnNpb25zLCBTdHJpbmcgcHJlZml4KSB7CisJCUxpc3Q8U3RyaW5nPiByZXN1bHQgPSBuZXcgQXJyYXlMaXN0PFN0cmluZz4oKTsKKwkJZm9yIChTdHJpbmcgZXh0ZW5zaW9uIDogZXh0ZW5zaW9ucykgeworCQkJcmVzdWx0LmFkZChwcmVmaXggKyBleHRlbnNpb24pOworCQl9CisJCXJldHVybiBDb2xsZWN0aW9ucy51bm1vZGlmaWFibGVMaXN0KHJlc3VsdCk7CisJfQorCisJLyoqCisJICogVGhpcyBrZWVwcyB0cmFjayBvZiB0aGUgZWRpdGluZyBkb21haW4gdGhhdCBpcyB1c2VkIHRvIHRyYWNrIGFsbCBjaGFuZ2VzIHRvIHRoZSBtb2RlbC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgQWRhcHRlckZhY3RvcnlFZGl0aW5nRG9tYWluIGVkaXRpbmdEb21haW47CisKKwkvKioKKwkgKiBUaGlzIGlzIHRoZSBvbmUgYWRhcHRlciBmYWN0b3J5IHVzZWQgZm9yIHByb3ZpZGluZyB2aWV3cyBvZiB0aGUgbW9kZWwuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIENvbXBvc2VkQWRhcHRlckZhY3RvcnkgYWRhcHRlckZhY3Rvcnk7CisKKwkvKioKKwkgKiBUaGlzIGlzIHRoZSBjb250ZW50IG91dGxpbmUgcGFnZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgSUNvbnRlbnRPdXRsaW5lUGFnZSBjb250ZW50T3V0bGluZVBhZ2U7CisKKwkvKioKKwkgKiBUaGlzIGlzIGEga2x1ZGdlLi4uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIElTdGF0dXNMaW5lTWFuYWdlciBjb250ZW50T3V0bGluZVN0YXR1c0xpbmVNYW5hZ2VyOworCisJLyoqCisJICogVGhpcyBpcyB0aGUgY29udGVudCBvdXRsaW5lIHBhZ2UncyB2aWV3ZXIuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIFRyZWVWaWV3ZXIgY29udGVudE91dGxpbmVWaWV3ZXI7CisKKwkvKioKKwkgKiBUaGlzIGlzIHRoZSBwcm9wZXJ0eSBzaGVldCBwYWdlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBQcm9wZXJ0eVNoZWV0UGFnZSBwcm9wZXJ0eVNoZWV0UGFnZTsKKworCS8qKgorCSAqIFRoaXMgaXMgdGhlIHZpZXdlciB0aGF0IHNoYWRvd3MgdGhlIHNlbGVjdGlvbiBpbiB0aGUgY29udGVudCBvdXRsaW5lLgorCSAqIFRoZSBwYXJlbnQgcmVsYXRpb24gbXVzdCBiZSBjb3JyZWN0bHkgZGVmaW5lZCBmb3IgdGhpcyB0byB3b3JrLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBUcmVlVmlld2VyIHNlbGVjdGlvblZpZXdlcjsKKworCS8qKgorCSAqIFRoaXMgaW52ZXJ0cyB0aGUgcm9sbCBvZiBwYXJlbnQgYW5kIGNoaWxkIGluIHRoZSBjb250ZW50IHByb3ZpZGVyIGFuZCBzaG93IHBhcmVudHMgYXMgYSB0cmVlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBUcmVlVmlld2VyIHBhcmVudFZpZXdlcjsKKworCS8qKgorCSAqIFRoaXMgc2hvd3MgaG93IGEgdHJlZSB2aWV3IHdvcmtzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBUcmVlVmlld2VyIHRyZWVWaWV3ZXI7CisKKwkvKioKKwkgKiBUaGlzIHNob3dzIGhvdyBhIGxpc3QgdmlldyB3b3Jrcy4KKwkgKiBBIGxpc3Qgdmlld2VyIGRvZXNuJ3Qgc3VwcG9ydCBpY29ucy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgTGlzdFZpZXdlciBsaXN0Vmlld2VyOworCisJLyoqCisJICogVGhpcyBzaG93cyBob3cgYSB0YWJsZSB2aWV3IHdvcmtzLgorCSAqIEEgdGFibGUgY2FuIGJlIHVzZWQgYXMgYSBsaXN0IHdpdGggaWNvbnMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIFRhYmxlVmlld2VyIHRhYmxlVmlld2VyOworCisJLyoqCisJICogVGhpcyBzaG93cyBob3cgYSB0cmVlIHZpZXcgd2l0aCBjb2x1bW5zIHdvcmtzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBUcmVlVmlld2VyIHRyZWVWaWV3ZXJXaXRoQ29sdW1uczsKKworCS8qKgorCSAqIFRoaXMga2VlcHMgdHJhY2sgb2YgdGhlIGFjdGl2ZSB2aWV3ZXIgcGFuZSwgaW4gdGhlIGJvb2suCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIFZpZXdlclBhbmUgY3VycmVudFZpZXdlclBhbmU7CisKKwkvKioKKwkgKiBUaGlzIGtlZXBzIHRyYWNrIG9mIHRoZSBhY3RpdmUgY29udGVudCB2aWV3ZXIsIHdoaWNoIG1heSBiZSBlaXRoZXIgb25lIG9mIHRoZSB2aWV3ZXJzIGluIHRoZSBwYWdlcyBvciB0aGUgY29udGVudCBvdXRsaW5lIHZpZXdlci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgVmlld2VyIGN1cnJlbnRWaWV3ZXI7CisKKwkvKioKKwkgKiBUaGlzIGxpc3RlbnMgdG8gd2hpY2ggZXZlciB2aWV3ZXIgaXMgYWN0aXZlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBJU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyIHNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcjsKKworCS8qKgorCSAqIFRoaXMga2VlcHMgdHJhY2sgb2YgYWxsIHRoZSB7QGxpbmsgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyfXMgdGhhdCBhcmUgbGlzdGVuaW5nIHRvIHRoaXMgZWRpdG9yLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBDb2xsZWN0aW9uPElTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXI+IHNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcnMgPSBuZXcgQXJyYXlMaXN0PElTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXI+KCk7CisKKwkvKioKKwkgKiBUaGlzIGtlZXBzIHRyYWNrIG9mIHRoZSBzZWxlY3Rpb24gb2YgdGhlIGVkaXRvciBhcyBhIHdob2xlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBJU2VsZWN0aW9uIGVkaXRvclNlbGVjdGlvbiA9IFN0cnVjdHVyZWRTZWxlY3Rpb24uRU1QVFk7CisKKwkvKioKKwkgKiBUaGlzIGxpc3RlbnMgZm9yIHdoZW4gdGhlIG91dGxpbmUgYmVjb21lcyBhY3RpdmUKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgSVBhcnRMaXN0ZW5lciBwYXJ0TGlzdGVuZXIgPQorCQluZXcgSVBhcnRMaXN0ZW5lcigpIHsKKwkJCXB1YmxpYyB2b2lkIHBhcnRBY3RpdmF0ZWQoSVdvcmtiZW5jaFBhcnQgcCkgeworCQkJCWlmIChwIGluc3RhbmNlb2YgQ29udGVudE91dGxpbmUpIHsKKwkJCQkJaWYgKCgoQ29udGVudE91dGxpbmUpcCkuZ2V0Q3VycmVudFBhZ2UoKSA9PSBjb250ZW50T3V0bGluZVBhZ2UpIHsKKwkJCQkJCWdldEFjdGlvbkJhckNvbnRyaWJ1dG9yKCkuc2V0QWN0aXZlRWRpdG9yKEltYWdld3JpdGVyRWRpdG9yLnRoaXMpOworCisJCQkJCQlzZXRDdXJyZW50Vmlld2VyKGNvbnRlbnRPdXRsaW5lVmlld2VyKTsKKwkJCQkJfQorCQkJCX0KKwkJCQllbHNlIGlmIChwIGluc3RhbmNlb2YgUHJvcGVydHlTaGVldCkgeworCQkJCQlpZiAoKChQcm9wZXJ0eVNoZWV0KXApLmdldEN1cnJlbnRQYWdlKCkgPT0gcHJvcGVydHlTaGVldFBhZ2UpIHsKKwkJCQkJCWdldEFjdGlvbkJhckNvbnRyaWJ1dG9yKCkuc2V0QWN0aXZlRWRpdG9yKEltYWdld3JpdGVyRWRpdG9yLnRoaXMpOworCQkJCQkJaGFuZGxlQWN0aXZhdGUoKTsKKwkJCQkJfQorCQkJCX0KKwkJCQllbHNlIGlmIChwID09IEltYWdld3JpdGVyRWRpdG9yLnRoaXMpIHsKKwkJCQkJaGFuZGxlQWN0aXZhdGUoKTsKKwkJCQl9CisJCQl9CisJCQlwdWJsaWMgdm9pZCBwYXJ0QnJvdWdodFRvVG9wKElXb3JrYmVuY2hQYXJ0IHApIHsKKwkJCQkvLyBJZ25vcmUuCisJCQl9CisJCQlwdWJsaWMgdm9pZCBwYXJ0Q2xvc2VkKElXb3JrYmVuY2hQYXJ0IHApIHsKKwkJCQkvLyBJZ25vcmUuCisJCQl9CisJCQlwdWJsaWMgdm9pZCBwYXJ0RGVhY3RpdmF0ZWQoSVdvcmtiZW5jaFBhcnQgcCkgeworCQkJCS8vIElnbm9yZS4KKwkJCX0KKwkJCXB1YmxpYyB2b2lkIHBhcnRPcGVuZWQoSVdvcmtiZW5jaFBhcnQgcCkgeworCQkJCS8vIElnbm9yZS4KKwkJCX0KKwkJfTsKKworCS8qKgorCSAqIFJlc291cmNlcyB0aGF0IGhhdmUgYmVlbiByZW1vdmVkIHNpbmNlIGxhc3QgYWN0aXZhdGlvbi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgQ29sbGVjdGlvbjxSZXNvdXJjZT4gcmVtb3ZlZFJlc291cmNlcyA9IG5ldyBBcnJheUxpc3Q8UmVzb3VyY2U+KCk7CisKKwkvKioKKwkgKiBSZXNvdXJjZXMgdGhhdCBoYXZlIGJlZW4gY2hhbmdlZCBzaW5jZSBsYXN0IGFjdGl2YXRpb24uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIENvbGxlY3Rpb248UmVzb3VyY2U+IGNoYW5nZWRSZXNvdXJjZXMgPSBuZXcgQXJyYXlMaXN0PFJlc291cmNlPigpOworCisJLyoqCisJICogUmVzb3VyY2VzIHRoYXQgaGF2ZSBiZWVuIHNhdmVkLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBDb2xsZWN0aW9uPFJlc291cmNlPiBzYXZlZFJlc291cmNlcyA9IG5ldyBBcnJheUxpc3Q8UmVzb3VyY2U+KCk7CisKKwkvKioKKwkgKiBNYXAgdG8gc3RvcmUgdGhlIGRpYWdub3N0aWMgYXNzb2NpYXRlZCB3aXRoIGEgcmVzb3VyY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIE1hcDxSZXNvdXJjZSwgRGlhZ25vc3RpYz4gcmVzb3VyY2VUb0RpYWdub3N0aWNNYXAgPSBuZXcgTGlua2VkSGFzaE1hcDxSZXNvdXJjZSwgRGlhZ25vc3RpYz4oKTsKKworCS8qKgorCSAqIENvbnRyb2xzIHdoZXRoZXIgdGhlIHByb2JsZW0gaW5kaWNhdGlvbiBzaG91bGQgYmUgdXBkYXRlZC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgYm9vbGVhbiB1cGRhdGVQcm9ibGVtSW5kaWNhdGlvbiA9IHRydWU7CisKKwkvKioKKwkgKiBBZGFwdGVyIHVzZWQgdG8gdXBkYXRlIHRoZSBwcm9ibGVtIGluZGljYXRpb24gd2hlbiByZXNvdXJjZXMgYXJlIGRlbWFuZGVkIGxvYWRlZC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgRUNvbnRlbnRBZGFwdGVyIHByb2JsZW1JbmRpY2F0aW9uQWRhcHRlciA9IAorCQluZXcgRUNvbnRlbnRBZGFwdGVyKCkgeworCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgdm9pZCBub3RpZnlDaGFuZ2VkKE5vdGlmaWNhdGlvbiBub3RpZmljYXRpb24pIHsKKwkJCQlpZiAobm90aWZpY2F0aW9uLmdldE5vdGlmaWVyKCkgaW5zdGFuY2VvZiBSZXNvdXJjZSkgeworCQkJCQlzd2l0Y2ggKG5vdGlmaWNhdGlvbi5nZXRGZWF0dXJlSUQoUmVzb3VyY2UuY2xhc3MpKSB7CisJCQkJCQljYXNlIFJlc291cmNlLlJFU09VUkNFX19JU19MT0FERUQ6CisJCQkJCQljYXNlIFJlc291cmNlLlJFU09VUkNFX19FUlJPUlM6CisJCQkJCQljYXNlIFJlc291cmNlLlJFU09VUkNFX19XQVJOSU5HUzogeworCQkJCQkJCVJlc291cmNlIHJlc291cmNlID0gKFJlc291cmNlKW5vdGlmaWNhdGlvbi5nZXROb3RpZmllcigpOworCQkJCQkJCURpYWdub3N0aWMgZGlhZ25vc3RpYyA9IGFuYWx5emVSZXNvdXJjZVByb2JsZW1zKHJlc291cmNlLCBudWxsKTsKKwkJCQkJCQlpZiAoZGlhZ25vc3RpYy5nZXRTZXZlcml0eSgpICE9IERpYWdub3N0aWMuT0spIHsKKwkJCQkJCQkJcmVzb3VyY2VUb0RpYWdub3N0aWNNYXAucHV0KHJlc291cmNlLCBkaWFnbm9zdGljKTsKKwkJCQkJCQl9CisJCQkJCQkJZWxzZSB7CisJCQkJCQkJCXJlc291cmNlVG9EaWFnbm9zdGljTWFwLnJlbW92ZShyZXNvdXJjZSk7CisJCQkJCQkJfQorCisJCQkJCQkJaWYgKHVwZGF0ZVByb2JsZW1JbmRpY2F0aW9uKSB7CisJCQkJCQkJCWdldFNpdGUoKS5nZXRTaGVsbCgpLmdldERpc3BsYXkoKS5hc3luY0V4ZWMKKwkJCQkJCQkJCShuZXcgUnVubmFibGUoKSB7CisJCQkJCQkJCQkJIHB1YmxpYyB2b2lkIHJ1bigpIHsKKwkJCQkJCQkJCQkJIHVwZGF0ZVByb2JsZW1JbmRpY2F0aW9uKCk7CisJCQkJCQkJCQkJIH0KKwkJCQkJCQkJCSB9KTsKKwkJCQkJCQl9CisJCQkJCQkJYnJlYWs7CisJCQkJCQl9CisJCQkJCX0KKwkJCQl9CisJCQkJZWxzZSB7CisJCQkJCXN1cGVyLm5vdGlmeUNoYW5nZWQobm90aWZpY2F0aW9uKTsKKwkJCQl9CisJCQl9CisKKwkJCUBPdmVycmlkZQorCQkJcHJvdGVjdGVkIHZvaWQgc2V0VGFyZ2V0KFJlc291cmNlIHRhcmdldCkgeworCQkJCWJhc2ljU2V0VGFyZ2V0KHRhcmdldCk7CisJCQl9CisKKwkJCUBPdmVycmlkZQorCQkJcHJvdGVjdGVkIHZvaWQgdW5zZXRUYXJnZXQoUmVzb3VyY2UgdGFyZ2V0KSB7CisJCQkJYmFzaWNVbnNldFRhcmdldCh0YXJnZXQpOworCQkJfQorCQl9OworCisJLyoqCisJICogSGFuZGxlcyBhY3RpdmF0aW9uIG9mIHRoZSBlZGl0b3Igb3IgaXQncyBhc3NvY2lhdGVkIHZpZXdzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIGhhbmRsZUFjdGl2YXRlKCkgeworCQkvLyBSZWNvbXB1dGUgdGhlIHJlYWQgb25seSBzdGF0ZS4KKwkJLy8KKwkJaWYgKGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VUb1JlYWRPbmx5TWFwKCkgIT0gbnVsbCkgeworCQkgIGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VUb1JlYWRPbmx5TWFwKCkuY2xlYXIoKTsKKworCQkgIC8vIFJlZnJlc2ggYW55IGFjdGlvbnMgdGhhdCBtYXkgYmVjb21lIGVuYWJsZWQgb3IgZGlzYWJsZWQuCisJCSAgLy8KKwkJICBzZXRTZWxlY3Rpb24oZ2V0U2VsZWN0aW9uKCkpOworCQl9CisKKwkJaWYgKCFyZW1vdmVkUmVzb3VyY2VzLmlzRW1wdHkoKSkgeworCQkJaWYgKGhhbmRsZURpcnR5Q29uZmxpY3QoKSkgeworCQkJCWdldFNpdGUoKS5nZXRQYWdlKCkuY2xvc2VFZGl0b3IoSW1hZ2V3cml0ZXJFZGl0b3IudGhpcywgZmFsc2UpOworCQkJfQorCQkJZWxzZSB7CisJCQkJcmVtb3ZlZFJlc291cmNlcy5jbGVhcigpOworCQkJCWNoYW5nZWRSZXNvdXJjZXMuY2xlYXIoKTsKKwkJCQlzYXZlZFJlc291cmNlcy5jbGVhcigpOworCQkJfQorCQl9CisJCWVsc2UgaWYgKCFjaGFuZ2VkUmVzb3VyY2VzLmlzRW1wdHkoKSkgeworCQkJY2hhbmdlZFJlc291cmNlcy5yZW1vdmVBbGwoc2F2ZWRSZXNvdXJjZXMpOworCQkJaGFuZGxlQ2hhbmdlZFJlc291cmNlcygpOworCQkJY2hhbmdlZFJlc291cmNlcy5jbGVhcigpOworCQkJc2F2ZWRSZXNvdXJjZXMuY2xlYXIoKTsKKwkJfQorCX0KKworCS8qKgorCSAqIEhhbmRsZXMgd2hhdCB0byBkbyB3aXRoIGNoYW5nZWQgcmVzb3VyY2VzIG9uIGFjdGl2YXRpb24uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgaGFuZGxlQ2hhbmdlZFJlc291cmNlcygpIHsKKwkJaWYgKCFjaGFuZ2VkUmVzb3VyY2VzLmlzRW1wdHkoKSAmJiAoIWlzRGlydHkoKSB8fCBoYW5kbGVEaXJ0eUNvbmZsaWN0KCkpKSB7CisJCQlpZiAoaXNEaXJ0eSgpKSB7CisJCQkJY2hhbmdlZFJlc291cmNlcy5hZGRBbGwoZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpLmdldFJlc291cmNlcygpKTsKKwkJCX0KKwkJCWVkaXRpbmdEb21haW4uZ2V0Q29tbWFuZFN0YWNrKCkuZmx1c2goKTsKKworCQkJdXBkYXRlUHJvYmxlbUluZGljYXRpb24gPSBmYWxzZTsKKwkJCWZvciAoUmVzb3VyY2UgcmVzb3VyY2UgOiBjaGFuZ2VkUmVzb3VyY2VzKSB7CisJCQkJaWYgKHJlc291cmNlLmlzTG9hZGVkKCkpIHsKKwkJCQkJcmVzb3VyY2UudW5sb2FkKCk7CisJCQkJCXRyeSB7CisJCQkJCQlyZXNvdXJjZS5sb2FkKENvbGxlY3Rpb25zLkVNUFRZX01BUCk7CisJCQkJCX0KKwkJCQkJY2F0Y2ggKElPRXhjZXB0aW9uIGV4Y2VwdGlvbikgeworCQkJCQkJaWYgKCFyZXNvdXJjZVRvRGlhZ25vc3RpY01hcC5jb250YWluc0tleShyZXNvdXJjZSkpIHsKKwkJCQkJCQlyZXNvdXJjZVRvRGlhZ25vc3RpY01hcC5wdXQocmVzb3VyY2UsIGFuYWx5emVSZXNvdXJjZVByb2JsZW1zKHJlc291cmNlLCBleGNlcHRpb24pKTsKKwkJCQkJCX0KKwkJCQkJfQorCQkJCX0KKwkJCX0KKworCQkJaWYgKEFkYXB0ZXJGYWN0b3J5RWRpdGluZ0RvbWFpbi5pc1N0YWxlKGVkaXRvclNlbGVjdGlvbikpIHsKKwkJCQlzZXRTZWxlY3Rpb24oU3RydWN0dXJlZFNlbGVjdGlvbi5FTVBUWSk7CisJCQl9CisKKwkJCXVwZGF0ZVByb2JsZW1JbmRpY2F0aW9uID0gdHJ1ZTsKKwkJCXVwZGF0ZVByb2JsZW1JbmRpY2F0aW9uKCk7CisJCX0KKwl9CisgIAorCS8qKgorCSAqIFVwZGF0ZXMgdGhlIHByb2JsZW1zIGluZGljYXRpb24gd2l0aCB0aGUgaW5mb3JtYXRpb24gZGVzY3JpYmVkIGluIHRoZSBzcGVjaWZpZWQgZGlhZ25vc3RpYy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCB1cGRhdGVQcm9ibGVtSW5kaWNhdGlvbigpIHsKKwkJaWYgKHVwZGF0ZVByb2JsZW1JbmRpY2F0aW9uKSB7CisJCQlCYXNpY0RpYWdub3N0aWMgZGlhZ25vc3RpYyA9CisJCQkJbmV3IEJhc2ljRGlhZ25vc3RpYworCQkJCQkoRGlhZ25vc3RpYy5PSywKKwkJCQkJICJvcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMuaW1hZ2V3cml0ZXIiLAorCQkJCQkgMCwKKwkJCQkJIG51bGwsCisJCQkJCSBuZXcgT2JqZWN0IFtdIHsgZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpIH0pOworCQkJZm9yIChEaWFnbm9zdGljIGNoaWxkRGlhZ25vc3RpYyA6IHJlc291cmNlVG9EaWFnbm9zdGljTWFwLnZhbHVlcygpKSB7CisJCQkJaWYgKGNoaWxkRGlhZ25vc3RpYy5nZXRTZXZlcml0eSgpICE9IERpYWdub3N0aWMuT0spIHsKKwkJCQkJZGlhZ25vc3RpYy5hZGQoY2hpbGREaWFnbm9zdGljKTsKKwkJCQl9CisJCQl9CisKKwkJCWludCBsYXN0RWRpdG9yUGFnZSA9IGdldFBhZ2VDb3VudCgpIC0gMTsKKwkJCWlmIChsYXN0RWRpdG9yUGFnZSA+PSAwICYmIGdldEVkaXRvcihsYXN0RWRpdG9yUGFnZSkgaW5zdGFuY2VvZiBQcm9ibGVtRWRpdG9yUGFydCkgeworCQkJCSgoUHJvYmxlbUVkaXRvclBhcnQpZ2V0RWRpdG9yKGxhc3RFZGl0b3JQYWdlKSkuc2V0RGlhZ25vc3RpYyhkaWFnbm9zdGljKTsKKwkJCQlpZiAoZGlhZ25vc3RpYy5nZXRTZXZlcml0eSgpICE9IERpYWdub3N0aWMuT0spIHsKKwkJCQkJc2V0QWN0aXZlUGFnZShsYXN0RWRpdG9yUGFnZSk7CisJCQkJfQorCQkJfQorCQkJZWxzZSBpZiAoZGlhZ25vc3RpYy5nZXRTZXZlcml0eSgpICE9IERpYWdub3N0aWMuT0spIHsKKwkJCQlQcm9ibGVtRWRpdG9yUGFydCBwcm9ibGVtRWRpdG9yUGFydCA9IG5ldyBQcm9ibGVtRWRpdG9yUGFydCgpOworCQkJCXByb2JsZW1FZGl0b3JQYXJ0LnNldERpYWdub3N0aWMoZGlhZ25vc3RpYyk7CisJCQkJdHJ5IHsKKwkJCQkJYWRkUGFnZSgrK2xhc3RFZGl0b3JQYWdlLCBwcm9ibGVtRWRpdG9yUGFydCwgZ2V0RWRpdG9ySW5wdXQoKSk7CisJCQkJCXNldFBhZ2VUZXh0KGxhc3RFZGl0b3JQYWdlLCBwcm9ibGVtRWRpdG9yUGFydC5nZXRQYXJ0TmFtZSgpKTsKKwkJCQkJc2V0QWN0aXZlUGFnZShsYXN0RWRpdG9yUGFnZSk7CisJCQkJCXNob3dUYWJzKCk7CisJCQkJfQorCQkJCWNhdGNoIChQYXJ0SW5pdEV4Y2VwdGlvbiBleGNlcHRpb24pIHsKKwkJCQkJSW1hZ2VXcml0ZXJMb2dnZXJFZGl0UGx1Z2luLklOU1RBTkNFLmxvZyhleGNlcHRpb24pOworCQkJCX0KKwkJCX0KKwkJfQorCX0KKworCS8qKgorCSAqIFNob3dzIGEgZGlhbG9nIHRoYXQgYXNrcyBpZiBjb25mbGljdGluZyBjaGFuZ2VzIHNob3VsZCBiZSBkaXNjYXJkZWQuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIGJvb2xlYW4gaGFuZGxlRGlydHlDb25mbGljdCgpIHsKKwkJcmV0dXJuCisJCQlNZXNzYWdlRGlhbG9nLm9wZW5RdWVzdGlvbgorCQkJCShnZXRTaXRlKCkuZ2V0U2hlbGwoKSwKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfRmlsZUNvbmZsaWN0X2xhYmVsIiksCisJCQkJIGdldFN0cmluZygiX1dBUk5fRmlsZUNvbmZsaWN0IikpOworCX0KKworCS8qKgorCSAqIFRoaXMgY3JlYXRlcyBhIG1vZGVsIGVkaXRvci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgSW1hZ2V3cml0ZXJFZGl0b3IoKSB7CisJCXN1cGVyKCk7CisJCWluaXRpYWxpemVFZGl0aW5nRG9tYWluKCk7CisJfQorCisJLyoqCisJICogVGhpcyBzZXRzIHVwIHRoZSBlZGl0aW5nIGRvbWFpbiBmb3IgdGhlIG1vZGVsIGVkaXRvci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBpbml0aWFsaXplRWRpdGluZ0RvbWFpbigpIHsKKwkJLy8gQ3JlYXRlIGFuIGFkYXB0ZXIgZmFjdG9yeSB0aGF0IHlpZWxkcyBpdGVtIHByb3ZpZGVycy4KKwkJLy8KKwkJYWRhcHRlckZhY3RvcnkgPSBuZXcgQ29tcG9zZWRBZGFwdGVyRmFjdG9yeShDb21wb3NlZEFkYXB0ZXJGYWN0b3J5LkRlc2NyaXB0b3IuUmVnaXN0cnkuSU5TVEFOQ0UpOworCisJCWFkYXB0ZXJGYWN0b3J5LmFkZEFkYXB0ZXJGYWN0b3J5KG5ldyBSZXNvdXJjZUl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5KCkpOworCQlhZGFwdGVyRmFjdG9yeS5hZGRBZGFwdGVyRmFjdG9yeShuZXcgSW1hZ2V3cml0ZXJJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSgpKTsKKwkJYWRhcHRlckZhY3RvcnkuYWRkQWRhcHRlckZhY3RvcnkobmV3IENvbW1vbkl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5KCkpOworCQlhZGFwdGVyRmFjdG9yeS5hZGRBZGFwdGVyRmFjdG9yeShuZXcgR3JhcGhJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSgpKTsKKwkJYWRhcHRlckZhY3RvcnkuYWRkQWRhcHRlckZhY3RvcnkobmV3IE1vZGVsSXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkoKSk7CisJCWFkYXB0ZXJGYWN0b3J5LmFkZEFkYXB0ZXJGYWN0b3J5KG5ldyBNb2RpZmllckl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5KCkpOworCQlhZGFwdGVyRmFjdG9yeS5hZGRBZGFwdGVyRmFjdG9yeShuZXcgU2NlbmFyaW9JdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSgpKTsKKwkJYWRhcHRlckZhY3RvcnkuYWRkQWRhcHRlckZhY3RvcnkobmV3IFNlcXVlbmNlckl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5KCkpOworCQlhZGFwdGVyRmFjdG9yeS5hZGRBZGFwdGVyRmFjdG9yeShuZXcgU29sdmVySXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkoKSk7CisJCWFkYXB0ZXJGYWN0b3J5LmFkZEFkYXB0ZXJGYWN0b3J5KG5ldyBMb2dnZXJJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSgpKTsKKwkJYWRhcHRlckZhY3RvcnkuYWRkQWRhcHRlckZhY3RvcnkobmV3IEVjb3JlSXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkoKSk7CisJCWFkYXB0ZXJGYWN0b3J5LmFkZEFkYXB0ZXJGYWN0b3J5KG5ldyBTaW11bGF0aW9uTG9nZ2VySXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkoKSk7CisJCWFkYXB0ZXJGYWN0b3J5LmFkZEFkYXB0ZXJGYWN0b3J5KG5ldyBSZWZsZWN0aXZlSXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkoKSk7CisKKwkJLy8gQ3JlYXRlIHRoZSBjb21tYW5kIHN0YWNrIHRoYXQgd2lsbCBub3RpZnkgdGhpcyBlZGl0b3IgYXMgY29tbWFuZHMgYXJlIGV4ZWN1dGVkLgorCQkvLworCQlCYXNpY0NvbW1hbmRTdGFjayBjb21tYW5kU3RhY2sgPSBuZXcgQmFzaWNDb21tYW5kU3RhY2soKTsKKworCQkvLyBBZGQgYSBsaXN0ZW5lciB0byBzZXQgdGhlIG1vc3QgcmVjZW50IGNvbW1hbmQncyBhZmZlY3RlZCBvYmplY3RzIHRvIGJlIHRoZSBzZWxlY3Rpb24gb2YgdGhlIHZpZXdlciB3aXRoIGZvY3VzLgorCQkvLworCQljb21tYW5kU3RhY2suYWRkQ29tbWFuZFN0YWNrTGlzdGVuZXIKKwkJCShuZXcgQ29tbWFuZFN0YWNrTGlzdGVuZXIoKSB7CisJCQkJIHB1YmxpYyB2b2lkIGNvbW1hbmRTdGFja0NoYW5nZWQoZmluYWwgRXZlbnRPYmplY3QgZXZlbnQpIHsKKwkJCQkJIGdldENvbnRhaW5lcigpLmdldERpc3BsYXkoKS5hc3luY0V4ZWMKKwkJCQkJCSAobmV3IFJ1bm5hYmxlKCkgeworCQkJCQkJCSAgcHVibGljIHZvaWQgcnVuKCkgeworCQkJCQkJCQkgIGZpcmVQcm9wZXJ0eUNoYW5nZShJRWRpdG9yUGFydC5QUk9QX0RJUlRZKTsKKworCQkJCQkJCQkgIC8vIFRyeSB0byBzZWxlY3QgdGhlIGFmZmVjdGVkIG9iamVjdHMuCisJCQkJCQkJCSAgLy8KKwkJCQkJCQkJICBDb21tYW5kIG1vc3RSZWNlbnRDb21tYW5kID0gKChDb21tYW5kU3RhY2spZXZlbnQuZ2V0U291cmNlKCkpLmdldE1vc3RSZWNlbnRDb21tYW5kKCk7CisJCQkJCQkJCSAgaWYgKG1vc3RSZWNlbnRDb21tYW5kICE9IG51bGwpIHsKKwkJCQkJCQkJCSAgc2V0U2VsZWN0aW9uVG9WaWV3ZXIobW9zdFJlY2VudENvbW1hbmQuZ2V0QWZmZWN0ZWRPYmplY3RzKCkpOworCQkJCQkJCQkgIH0KKwkJCQkJCQkJICBpZiAocHJvcGVydHlTaGVldFBhZ2UgIT0gbnVsbCAmJiAhcHJvcGVydHlTaGVldFBhZ2UuZ2V0Q29udHJvbCgpLmlzRGlzcG9zZWQoKSkgeworCQkJCQkJCQkJICBwcm9wZXJ0eVNoZWV0UGFnZS5yZWZyZXNoKCk7CisJCQkJCQkJCSAgfQorCQkJCQkJCSAgfQorCQkJCQkJICB9KTsKKwkJCQkgfQorCQkJIH0pOworCisJCS8vIENyZWF0ZSB0aGUgZWRpdGluZyBkb21haW4gd2l0aCBhIHNwZWNpYWwgY29tbWFuZCBzdGFjay4KKwkJLy8KKwkJZWRpdGluZ0RvbWFpbiA9IG5ldyBBZGFwdGVyRmFjdG9yeUVkaXRpbmdEb21haW4oYWRhcHRlckZhY3RvcnksIGNvbW1hbmRTdGFjaywgbmV3IEhhc2hNYXA8UmVzb3VyY2UsIEJvb2xlYW4+KCkpOworCX0KKworCS8qKgorCSAqIFRoaXMgaXMgaGVyZSBmb3IgdGhlIGxpc3RlbmVyIHRvIGJlIGFibGUgdG8gY2FsbCBpdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwkJCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIGZpcmVQcm9wZXJ0eUNoYW5nZShpbnQgYWN0aW9uKSB7CisJCXN1cGVyLmZpcmVQcm9wZXJ0eUNoYW5nZShhY3Rpb24pOworCX0KKworCS8qKgorCSAqIFRoaXMgc2V0cyB0aGUgc2VsZWN0aW9uIGludG8gd2hpY2hldmVyIHZpZXdlciBpcyBhY3RpdmUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgc2V0U2VsZWN0aW9uVG9WaWV3ZXIoQ29sbGVjdGlvbjw/PiBjb2xsZWN0aW9uKSB7CisJCWZpbmFsIENvbGxlY3Rpb248Pz4gdGhlU2VsZWN0aW9uID0gY29sbGVjdGlvbjsKKwkJLy8gTWFrZSBzdXJlIGl0J3Mgb2theS4KKwkJLy8KKwkJaWYgKHRoZVNlbGVjdGlvbiAhPSBudWxsICYmICF0aGVTZWxlY3Rpb24uaXNFbXB0eSgpKSB7CisJCQlSdW5uYWJsZSBydW5uYWJsZSA9CisJCQkJbmV3IFJ1bm5hYmxlKCkgeworCQkJCQlwdWJsaWMgdm9pZCBydW4oKSB7CisJCQkJCQkvLyBUcnkgdG8gc2VsZWN0IHRoZSBpdGVtcyBpbiB0aGUgY3VycmVudCBjb250ZW50IHZpZXdlciBvZiB0aGUgZWRpdG9yLgorCQkJCQkJLy8KKwkJCQkJCWlmIChjdXJyZW50Vmlld2VyICE9IG51bGwpIHsKKwkJCQkJCQljdXJyZW50Vmlld2VyLnNldFNlbGVjdGlvbihuZXcgU3RydWN0dXJlZFNlbGVjdGlvbih0aGVTZWxlY3Rpb24udG9BcnJheSgpKSwgdHJ1ZSk7CisJCQkJCQl9CisJCQkJCX0KKwkJCQl9OworCQkJZ2V0U2l0ZSgpLmdldFNoZWxsKCkuZ2V0RGlzcGxheSgpLmFzeW5jRXhlYyhydW5uYWJsZSk7CisJCX0KKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgdGhlIGVkaXRpbmcgZG9tYWluIGFzIHJlcXVpcmVkIGJ5IHRoZSB7QGxpbmsgSUVkaXRpbmdEb21haW5Qcm92aWRlcn0gaW50ZXJmYWNlLgorCSAqIFRoaXMgaXMgaW1wb3J0YW50IGZvciBpbXBsZW1lbnRpbmcgdGhlIHN0YXRpYyBtZXRob2RzIG9mIHtAbGluayBBZGFwdGVyRmFjdG9yeUVkaXRpbmdEb21haW59CisJICogYW5kIGZvciBzdXBwb3J0aW5nIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5hY3Rpb24uQ29tbWFuZEFjdGlvbn0uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVkaXRpbmdEb21haW4gZ2V0RWRpdGluZ0RvbWFpbigpIHsKKwkJcmV0dXJuIGVkaXRpbmdEb21haW47CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIGNsYXNzIFJldmVyc2VBZGFwdGVyRmFjdG9yeUNvbnRlbnRQcm92aWRlciBleHRlbmRzIEFkYXB0ZXJGYWN0b3J5Q29udGVudFByb3ZpZGVyIHsKKwkJLyoqCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlwdWJsaWMgUmV2ZXJzZUFkYXB0ZXJGYWN0b3J5Q29udGVudFByb3ZpZGVyKEFkYXB0ZXJGYWN0b3J5IGFkYXB0ZXJGYWN0b3J5KSB7CisJCQlzdXBlcihhZGFwdGVyRmFjdG9yeSk7CisJCX0KKworCQkvKioKKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUBPdmVycmlkZQorCQlwdWJsaWMgT2JqZWN0IFtdIGdldEVsZW1lbnRzKE9iamVjdCBvYmplY3QpIHsKKwkJCU9iamVjdCBwYXJlbnQgPSBzdXBlci5nZXRQYXJlbnQob2JqZWN0KTsKKwkJCXJldHVybiAocGFyZW50ID09IG51bGwgPyBDb2xsZWN0aW9ucy5FTVBUWV9TRVQgOiBDb2xsZWN0aW9ucy5zaW5nbGV0b24ocGFyZW50KSkudG9BcnJheSgpOworCQl9CisKKwkJLyoqCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlAT3ZlcnJpZGUKKwkJcHVibGljIE9iamVjdCBbXSBnZXRDaGlsZHJlbihPYmplY3Qgb2JqZWN0KSB7CisJCQlPYmplY3QgcGFyZW50ID0gc3VwZXIuZ2V0UGFyZW50KG9iamVjdCk7CisJCQlyZXR1cm4gKHBhcmVudCA9PSBudWxsID8gQ29sbGVjdGlvbnMuRU1QVFlfU0VUIDogQ29sbGVjdGlvbnMuc2luZ2xldG9uKHBhcmVudCkpLnRvQXJyYXkoKTsKKwkJfQorCisJCS8qKgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJQE92ZXJyaWRlCisJCXB1YmxpYyBib29sZWFuIGhhc0NoaWxkcmVuKE9iamVjdCBvYmplY3QpIHsKKwkJCU9iamVjdCBwYXJlbnQgPSBzdXBlci5nZXRQYXJlbnQob2JqZWN0KTsKKwkJCXJldHVybiBwYXJlbnQgIT0gbnVsbDsKKwkJfQorCisJCS8qKgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJQE92ZXJyaWRlCisJCXB1YmxpYyBPYmplY3QgZ2V0UGFyZW50KE9iamVjdCBvYmplY3QpIHsKKwkJCXJldHVybiBudWxsOworCQl9CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgc2V0Q3VycmVudFZpZXdlclBhbmUoVmlld2VyUGFuZSB2aWV3ZXJQYW5lKSB7CisJCWlmIChjdXJyZW50Vmlld2VyUGFuZSAhPSB2aWV3ZXJQYW5lKSB7CisJCQlpZiAoY3VycmVudFZpZXdlclBhbmUgIT0gbnVsbCkgeworCQkJCWN1cnJlbnRWaWV3ZXJQYW5lLnNob3dGb2N1cyhmYWxzZSk7CisJCQl9CisJCQljdXJyZW50Vmlld2VyUGFuZSA9IHZpZXdlclBhbmU7CisJCX0KKwkJc2V0Q3VycmVudFZpZXdlcihjdXJyZW50Vmlld2VyUGFuZS5nZXRWaWV3ZXIoKSk7CisJfQorCisJLyoqCisJICogVGhpcyBtYWtlcyBzdXJlIHRoYXQgb25lIGNvbnRlbnQgdmlld2VyLCBlaXRoZXIgZm9yIHRoZSBjdXJyZW50IHBhZ2Ugb3IgdGhlIG91dGxpbmUgdmlldywgaWYgaXQgaGFzIGZvY3VzLAorCSAqIGlzIHRoZSBjdXJyZW50IG9uZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRDdXJyZW50Vmlld2VyKFZpZXdlciB2aWV3ZXIpIHsKKwkJLy8gSWYgaXQgaXMgY2hhbmdpbmcuLi4KKwkJLy8KKwkJaWYgKGN1cnJlbnRWaWV3ZXIgIT0gdmlld2VyKSB7CisJCQlpZiAoc2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyID09IG51bGwpIHsKKwkJCQkvLyBDcmVhdGUgdGhlIGxpc3RlbmVyIG9uIGRlbWFuZC4KKwkJCQkvLworCQkJCXNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lciA9CisJCQkJCW5ldyBJU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyKCkgeworCQkJCQkJLy8gVGhpcyBqdXN0IG5vdGlmaWVzIHRob3NlIHRoaW5ncyB0aGF0IGFyZSBhZmZlY3RlZCBieSB0aGUgc2VjdGlvbi4KKwkJCQkJCS8vCisJCQkJCQlwdWJsaWMgdm9pZCBzZWxlY3Rpb25DaGFuZ2VkKFNlbGVjdGlvbkNoYW5nZWRFdmVudCBzZWxlY3Rpb25DaGFuZ2VkRXZlbnQpIHsKKwkJCQkJCQlzZXRTZWxlY3Rpb24oc2VsZWN0aW9uQ2hhbmdlZEV2ZW50LmdldFNlbGVjdGlvbigpKTsKKwkJCQkJCX0KKwkJCQkJfTsKKwkJCX0KKworCQkJLy8gU3RvcCBsaXN0ZW5pbmcgdG8gdGhlIG9sZCBvbmUuCisJCQkvLworCQkJaWYgKGN1cnJlbnRWaWV3ZXIgIT0gbnVsbCkgeworCQkJCWN1cnJlbnRWaWV3ZXIucmVtb3ZlU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyKHNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcik7CisJCQl9CisKKwkJCS8vIFN0YXJ0IGxpc3RlbmluZyB0byB0aGUgbmV3IG9uZS4KKwkJCS8vCisJCQlpZiAodmlld2VyICE9IG51bGwpIHsKKwkJCQl2aWV3ZXIuYWRkU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyKHNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcik7CisJCQl9CisKKwkJCS8vIFJlbWVtYmVyIGl0LgorCQkJLy8KKwkJCWN1cnJlbnRWaWV3ZXIgPSB2aWV3ZXI7CisKKwkJCS8vIFNldCB0aGUgZWRpdG9ycyBzZWxlY3Rpb24gYmFzZWQgb24gdGhlIGN1cnJlbnQgdmlld2VyJ3Mgc2VsZWN0aW9uLgorCQkJLy8KKwkJCXNldFNlbGVjdGlvbihjdXJyZW50Vmlld2VyID09IG51bGwgPyBTdHJ1Y3R1cmVkU2VsZWN0aW9uLkVNUFRZIDogY3VycmVudFZpZXdlci5nZXRTZWxlY3Rpb24oKSk7CisJCX0KKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgdGhlIHZpZXdlciBhcyByZXF1aXJlZCBieSB0aGUge0BsaW5rIElWaWV3ZXJQcm92aWRlcn0gaW50ZXJmYWNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBWaWV3ZXIgZ2V0Vmlld2VyKCkgeworCQlyZXR1cm4gY3VycmVudFZpZXdlcjsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGNyZWF0ZXMgYSBjb250ZXh0IG1lbnUgZm9yIHRoZSB2aWV3ZXIgYW5kIGFkZHMgYSBsaXN0ZW5lciBhcyB3ZWxsIHJlZ2lzdGVyaW5nIHRoZSBtZW51IGZvciBleHRlbnNpb24uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgY3JlYXRlQ29udGV4dE1lbnVGb3IoU3RydWN0dXJlZFZpZXdlciB2aWV3ZXIpIHsKKwkJTWVudU1hbmFnZXIgY29udGV4dE1lbnUgPSBuZXcgTWVudU1hbmFnZXIoIiNQb3BVcCIpOworCQljb250ZXh0TWVudS5hZGQobmV3IFNlcGFyYXRvcigiYWRkaXRpb25zIikpOworCQljb250ZXh0TWVudS5zZXRSZW1vdmVBbGxXaGVuU2hvd24odHJ1ZSk7CisJCWNvbnRleHRNZW51LmFkZE1lbnVMaXN0ZW5lcih0aGlzKTsKKwkJTWVudSBtZW51PSBjb250ZXh0TWVudS5jcmVhdGVDb250ZXh0TWVudSh2aWV3ZXIuZ2V0Q29udHJvbCgpKTsKKwkJdmlld2VyLmdldENvbnRyb2woKS5zZXRNZW51KG1lbnUpOworCQlnZXRTaXRlKCkucmVnaXN0ZXJDb250ZXh0TWVudShjb250ZXh0TWVudSwgbmV3IFVud3JhcHBpbmdTZWxlY3Rpb25Qcm92aWRlcih2aWV3ZXIpKTsKKworCQlpbnQgZG5kT3BlcmF0aW9ucyA9IERORC5EUk9QX0NPUFkgfCBETkQuRFJPUF9NT1ZFIHwgRE5ELkRST1BfTElOSzsKKwkJVHJhbnNmZXJbXSB0cmFuc2ZlcnMgPSBuZXcgVHJhbnNmZXJbXSB7IExvY2FsVHJhbnNmZXIuZ2V0SW5zdGFuY2UoKSB9OworCQl2aWV3ZXIuYWRkRHJhZ1N1cHBvcnQoZG5kT3BlcmF0aW9ucywgdHJhbnNmZXJzLCBuZXcgVmlld2VyRHJhZ0FkYXB0ZXIodmlld2VyKSk7CisJCXZpZXdlci5hZGREcm9wU3VwcG9ydChkbmRPcGVyYXRpb25zLCB0cmFuc2ZlcnMsIG5ldyBFZGl0aW5nRG9tYWluVmlld2VyRHJvcEFkYXB0ZXIoZWRpdGluZ0RvbWFpbiwgdmlld2VyKSk7CisJfQorCisJLyoqCisJICogVGhpcyBpcyB0aGUgbWV0aG9kIGNhbGxlZCB0byBsb2FkIGEgcmVzb3VyY2UgaW50byB0aGUgZWRpdGluZyBkb21haW4ncyByZXNvdXJjZSBzZXQgYmFzZWQgb24gdGhlIGVkaXRvcidzIGlucHV0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIGNyZWF0ZU1vZGVsKCkgeworCQlVUkkgcmVzb3VyY2VVUkkgPSBFZGl0VUlVdGlsLmdldFVSSShnZXRFZGl0b3JJbnB1dCgpKTsKKwkJRXhjZXB0aW9uIGV4Y2VwdGlvbiA9IG51bGw7CisJCVJlc291cmNlIHJlc291cmNlID0gbnVsbDsKKwkJdHJ5IHsKKwkJCS8vIExvYWQgdGhlIHJlc291cmNlIHRocm91Z2ggdGhlIGVkaXRpbmcgZG9tYWluLgorCQkJLy8KKwkJCXJlc291cmNlID0gZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpLmdldFJlc291cmNlKHJlc291cmNlVVJJLCB0cnVlKTsKKwkJfQorCQljYXRjaCAoRXhjZXB0aW9uIGUpIHsKKwkJCWV4Y2VwdGlvbiA9IGU7CisJCQlyZXNvdXJjZSA9IGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKS5nZXRSZXNvdXJjZShyZXNvdXJjZVVSSSwgZmFsc2UpOworCQl9CisKKwkJRGlhZ25vc3RpYyBkaWFnbm9zdGljID0gYW5hbHl6ZVJlc291cmNlUHJvYmxlbXMocmVzb3VyY2UsIGV4Y2VwdGlvbik7CisJCWlmIChkaWFnbm9zdGljLmdldFNldmVyaXR5KCkgIT0gRGlhZ25vc3RpYy5PSykgeworCQkJcmVzb3VyY2VUb0RpYWdub3N0aWNNYXAucHV0KHJlc291cmNlLCAgYW5hbHl6ZVJlc291cmNlUHJvYmxlbXMocmVzb3VyY2UsIGV4Y2VwdGlvbikpOworCQl9CisJCWVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKS5lQWRhcHRlcnMoKS5hZGQocHJvYmxlbUluZGljYXRpb25BZGFwdGVyKTsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIGEgZGlhZ25vc3RpYyBkZXNjcmliaW5nIHRoZSBlcnJvcnMgYW5kIHdhcm5pbmdzIGxpc3RlZCBpbiB0aGUgcmVzb3VyY2UKKwkgKiBhbmQgdGhlIHNwZWNpZmllZCBleGNlcHRpb24gKGlmIGFueSkuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIERpYWdub3N0aWMgYW5hbHl6ZVJlc291cmNlUHJvYmxlbXMoUmVzb3VyY2UgcmVzb3VyY2UsIEV4Y2VwdGlvbiBleGNlcHRpb24pIHsKKwkJaWYgKCFyZXNvdXJjZS5nZXRFcnJvcnMoKS5pc0VtcHR5KCkgfHwgIXJlc291cmNlLmdldFdhcm5pbmdzKCkuaXNFbXB0eSgpKSB7CisJCQlCYXNpY0RpYWdub3N0aWMgYmFzaWNEaWFnbm9zdGljID0KKwkJCQluZXcgQmFzaWNEaWFnbm9zdGljCisJCQkJCShEaWFnbm9zdGljLkVSUk9SLAorCQkJCQkgIm9yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy5pbWFnZXdyaXRlciIsCisJCQkJCSAwLAorCQkJCQkgZ2V0U3RyaW5nKCJfVUlfQ3JlYXRlTW9kZWxFcnJvcl9tZXNzYWdlIiwgcmVzb3VyY2UuZ2V0VVJJKCkpLAorCQkJCQkgbmV3IE9iamVjdCBbXSB7IGV4Y2VwdGlvbiA9PSBudWxsID8gKE9iamVjdClyZXNvdXJjZSA6IGV4Y2VwdGlvbiB9KTsKKwkJCWJhc2ljRGlhZ25vc3RpYy5tZXJnZShFY29yZVV0aWwuY29tcHV0ZURpYWdub3N0aWMocmVzb3VyY2UsIHRydWUpKTsKKwkJCXJldHVybiBiYXNpY0RpYWdub3N0aWM7CisJCX0KKwkJZWxzZSBpZiAoZXhjZXB0aW9uICE9IG51bGwpIHsKKwkJCXJldHVybgorCQkJCW5ldyBCYXNpY0RpYWdub3N0aWMKKwkJCQkJKERpYWdub3N0aWMuRVJST1IsCisJCQkJCSAib3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzLmltYWdld3JpdGVyIiwKKwkJCQkJIDAsCisJCQkJCSBnZXRTdHJpbmcoIl9VSV9DcmVhdGVNb2RlbEVycm9yX21lc3NhZ2UiLCByZXNvdXJjZS5nZXRVUkkoKSksCisJCQkJCSBuZXcgT2JqZWN0W10geyBleGNlcHRpb24gfSk7CisJCX0KKwkJZWxzZSB7CisJCQlyZXR1cm4gRGlhZ25vc3RpYy5PS19JTlNUQU5DRTsKKwkJfQorCX0KKworCS8qKgorCSAqIFRoaXMgaXMgdGhlIG1ldGhvZCB1c2VkIGJ5IHRoZSBmcmFtZXdvcmsgdG8gaW5zdGFsbCB5b3VyIG93biBjb250cm9scy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBjcmVhdGVQYWdlcygpIHsKKwkJLy8gQ3JlYXRlcyB0aGUgbW9kZWwgZnJvbSB0aGUgZWRpdG9yIGlucHV0CisJCS8vCisJCWNyZWF0ZU1vZGVsKCk7CisKKwkJLy8gT25seSBjcmVhdGVzIHRoZSBvdGhlciBwYWdlcyBpZiB0aGVyZSBpcyBzb21ldGhpbmcgdGhhdCBjYW4gYmUgZWRpdGVkCisJCS8vCisJCWlmICghZ2V0RWRpdGluZ0RvbWFpbigpLmdldFJlc291cmNlU2V0KCkuZ2V0UmVzb3VyY2VzKCkuaXNFbXB0eSgpKSB7CisJCQkvLyBDcmVhdGUgYSBwYWdlIGZvciB0aGUgc2VsZWN0aW9uIHRyZWUgdmlldy4KKwkJCS8vCisJCQl7CisJCQkJVmlld2VyUGFuZSB2aWV3ZXJQYW5lID0KKwkJCQkJbmV3IFZpZXdlclBhbmUoZ2V0U2l0ZSgpLmdldFBhZ2UoKSwgSW1hZ2V3cml0ZXJFZGl0b3IudGhpcykgeworCQkJCQkJQE92ZXJyaWRlCisJCQkJCQlwdWJsaWMgVmlld2VyIGNyZWF0ZVZpZXdlcihDb21wb3NpdGUgY29tcG9zaXRlKSB7CisJCQkJCQkJVHJlZSB0cmVlID0gbmV3IFRyZWUoY29tcG9zaXRlLCBTV1QuTVVMVEkpOworCQkJCQkJCVRyZWVWaWV3ZXIgbmV3VHJlZVZpZXdlciA9IG5ldyBUcmVlVmlld2VyKHRyZWUpOworCQkJCQkJCXJldHVybiBuZXdUcmVlVmlld2VyOworCQkJCQkJfQorCQkJCQkJQE92ZXJyaWRlCisJCQkJCQlwdWJsaWMgdm9pZCByZXF1ZXN0QWN0aXZhdGlvbigpIHsKKwkJCQkJCQlzdXBlci5yZXF1ZXN0QWN0aXZhdGlvbigpOworCQkJCQkJCXNldEN1cnJlbnRWaWV3ZXJQYW5lKHRoaXMpOworCQkJCQkJfQorCQkJCQl9OworCQkJCXZpZXdlclBhbmUuY3JlYXRlQ29udHJvbChnZXRDb250YWluZXIoKSk7CisKKwkJCQlzZWxlY3Rpb25WaWV3ZXIgPSAoVHJlZVZpZXdlcil2aWV3ZXJQYW5lLmdldFZpZXdlcigpOworCQkJCXNlbGVjdGlvblZpZXdlci5zZXRDb250ZW50UHJvdmlkZXIobmV3IEFkYXB0ZXJGYWN0b3J5Q29udGVudFByb3ZpZGVyKGFkYXB0ZXJGYWN0b3J5KSk7CisKKwkJCQlzZWxlY3Rpb25WaWV3ZXIuc2V0TGFiZWxQcm92aWRlcihuZXcgQWRhcHRlckZhY3RvcnlMYWJlbFByb3ZpZGVyKGFkYXB0ZXJGYWN0b3J5KSk7CisJCQkJc2VsZWN0aW9uVmlld2VyLnNldElucHV0KGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKSk7CisJCQkJc2VsZWN0aW9uVmlld2VyLnNldFNlbGVjdGlvbihuZXcgU3RydWN0dXJlZFNlbGVjdGlvbihlZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkuZ2V0UmVzb3VyY2VzKCkuZ2V0KDApKSwgdHJ1ZSk7CisJCQkJdmlld2VyUGFuZS5zZXRUaXRsZShlZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkpOworCisJCQkJbmV3IEFkYXB0ZXJGYWN0b3J5VHJlZUVkaXRvcihzZWxlY3Rpb25WaWV3ZXIuZ2V0VHJlZSgpLCBhZGFwdGVyRmFjdG9yeSk7CisKKwkJCQljcmVhdGVDb250ZXh0TWVudUZvcihzZWxlY3Rpb25WaWV3ZXIpOworCQkJCWludCBwYWdlSW5kZXggPSBhZGRQYWdlKHZpZXdlclBhbmUuZ2V0Q29udHJvbCgpKTsKKwkJCQlzZXRQYWdlVGV4dChwYWdlSW5kZXgsIGdldFN0cmluZygiX1VJX1NlbGVjdGlvblBhZ2VfbGFiZWwiKSk7CisJCQl9CisKKwkJCS8vIENyZWF0ZSBhIHBhZ2UgZm9yIHRoZSBwYXJlbnQgdHJlZSB2aWV3LgorCQkJLy8KKwkJCXsKKwkJCQlWaWV3ZXJQYW5lIHZpZXdlclBhbmUgPQorCQkJCQluZXcgVmlld2VyUGFuZShnZXRTaXRlKCkuZ2V0UGFnZSgpLCBJbWFnZXdyaXRlckVkaXRvci50aGlzKSB7CisJCQkJCQlAT3ZlcnJpZGUKKwkJCQkJCXB1YmxpYyBWaWV3ZXIgY3JlYXRlVmlld2VyKENvbXBvc2l0ZSBjb21wb3NpdGUpIHsKKwkJCQkJCQlUcmVlIHRyZWUgPSBuZXcgVHJlZShjb21wb3NpdGUsIFNXVC5NVUxUSSk7CisJCQkJCQkJVHJlZVZpZXdlciBuZXdUcmVlVmlld2VyID0gbmV3IFRyZWVWaWV3ZXIodHJlZSk7CisJCQkJCQkJcmV0dXJuIG5ld1RyZWVWaWV3ZXI7CisJCQkJCQl9CisJCQkJCQlAT3ZlcnJpZGUKKwkJCQkJCXB1YmxpYyB2b2lkIHJlcXVlc3RBY3RpdmF0aW9uKCkgeworCQkJCQkJCXN1cGVyLnJlcXVlc3RBY3RpdmF0aW9uKCk7CisJCQkJCQkJc2V0Q3VycmVudFZpZXdlclBhbmUodGhpcyk7CisJCQkJCQl9CisJCQkJCX07CisJCQkJdmlld2VyUGFuZS5jcmVhdGVDb250cm9sKGdldENvbnRhaW5lcigpKTsKKworCQkJCXBhcmVudFZpZXdlciA9IChUcmVlVmlld2VyKXZpZXdlclBhbmUuZ2V0Vmlld2VyKCk7CisJCQkJcGFyZW50Vmlld2VyLnNldEF1dG9FeHBhbmRMZXZlbCgzMCk7CisJCQkJcGFyZW50Vmlld2VyLnNldENvbnRlbnRQcm92aWRlcihuZXcgUmV2ZXJzZUFkYXB0ZXJGYWN0b3J5Q29udGVudFByb3ZpZGVyKGFkYXB0ZXJGYWN0b3J5KSk7CisJCQkJcGFyZW50Vmlld2VyLnNldExhYmVsUHJvdmlkZXIobmV3IEFkYXB0ZXJGYWN0b3J5TGFiZWxQcm92aWRlcihhZGFwdGVyRmFjdG9yeSkpOworCisJCQkJY3JlYXRlQ29udGV4dE1lbnVGb3IocGFyZW50Vmlld2VyKTsKKwkJCQlpbnQgcGFnZUluZGV4ID0gYWRkUGFnZSh2aWV3ZXJQYW5lLmdldENvbnRyb2woKSk7CisJCQkJc2V0UGFnZVRleHQocGFnZUluZGV4LCBnZXRTdHJpbmcoIl9VSV9QYXJlbnRQYWdlX2xhYmVsIikpOworCQkJfQorCisJCQkvLyBUaGlzIGlzIHRoZSBwYWdlIGZvciB0aGUgbGlzdCB2aWV3ZXIKKwkJCS8vCisJCQl7CisJCQkJVmlld2VyUGFuZSB2aWV3ZXJQYW5lID0KKwkJCQkJbmV3IFZpZXdlclBhbmUoZ2V0U2l0ZSgpLmdldFBhZ2UoKSwgSW1hZ2V3cml0ZXJFZGl0b3IudGhpcykgeworCQkJCQkJQE92ZXJyaWRlCisJCQkJCQlwdWJsaWMgVmlld2VyIGNyZWF0ZVZpZXdlcihDb21wb3NpdGUgY29tcG9zaXRlKSB7CisJCQkJCQkJcmV0dXJuIG5ldyBMaXN0Vmlld2VyKGNvbXBvc2l0ZSk7CisJCQkJCQl9CisJCQkJCQlAT3ZlcnJpZGUKKwkJCQkJCXB1YmxpYyB2b2lkIHJlcXVlc3RBY3RpdmF0aW9uKCkgeworCQkJCQkJCXN1cGVyLnJlcXVlc3RBY3RpdmF0aW9uKCk7CisJCQkJCQkJc2V0Q3VycmVudFZpZXdlclBhbmUodGhpcyk7CisJCQkJCQl9CisJCQkJCX07CisJCQkJdmlld2VyUGFuZS5jcmVhdGVDb250cm9sKGdldENvbnRhaW5lcigpKTsKKwkJCQlsaXN0Vmlld2VyID0gKExpc3RWaWV3ZXIpdmlld2VyUGFuZS5nZXRWaWV3ZXIoKTsKKwkJCQlsaXN0Vmlld2VyLnNldENvbnRlbnRQcm92aWRlcihuZXcgQWRhcHRlckZhY3RvcnlDb250ZW50UHJvdmlkZXIoYWRhcHRlckZhY3RvcnkpKTsKKwkJCQlsaXN0Vmlld2VyLnNldExhYmVsUHJvdmlkZXIobmV3IEFkYXB0ZXJGYWN0b3J5TGFiZWxQcm92aWRlcihhZGFwdGVyRmFjdG9yeSkpOworCisJCQkJY3JlYXRlQ29udGV4dE1lbnVGb3IobGlzdFZpZXdlcik7CisJCQkJaW50IHBhZ2VJbmRleCA9IGFkZFBhZ2Uodmlld2VyUGFuZS5nZXRDb250cm9sKCkpOworCQkJCXNldFBhZ2VUZXh0KHBhZ2VJbmRleCwgZ2V0U3RyaW5nKCJfVUlfTGlzdFBhZ2VfbGFiZWwiKSk7CisJCQl9CisKKwkJCS8vIFRoaXMgaXMgdGhlIHBhZ2UgZm9yIHRoZSB0cmVlIHZpZXdlcgorCQkJLy8KKwkJCXsKKwkJCQlWaWV3ZXJQYW5lIHZpZXdlclBhbmUgPQorCQkJCQluZXcgVmlld2VyUGFuZShnZXRTaXRlKCkuZ2V0UGFnZSgpLCBJbWFnZXdyaXRlckVkaXRvci50aGlzKSB7CisJCQkJCQlAT3ZlcnJpZGUKKwkJCQkJCXB1YmxpYyBWaWV3ZXIgY3JlYXRlVmlld2VyKENvbXBvc2l0ZSBjb21wb3NpdGUpIHsKKwkJCQkJCQlyZXR1cm4gbmV3IFRyZWVWaWV3ZXIoY29tcG9zaXRlKTsKKwkJCQkJCX0KKwkJCQkJCUBPdmVycmlkZQorCQkJCQkJcHVibGljIHZvaWQgcmVxdWVzdEFjdGl2YXRpb24oKSB7CisJCQkJCQkJc3VwZXIucmVxdWVzdEFjdGl2YXRpb24oKTsKKwkJCQkJCQlzZXRDdXJyZW50Vmlld2VyUGFuZSh0aGlzKTsKKwkJCQkJCX0KKwkJCQkJfTsKKwkJCQl2aWV3ZXJQYW5lLmNyZWF0ZUNvbnRyb2woZ2V0Q29udGFpbmVyKCkpOworCQkJCXRyZWVWaWV3ZXIgPSAoVHJlZVZpZXdlcil2aWV3ZXJQYW5lLmdldFZpZXdlcigpOworCQkJCXRyZWVWaWV3ZXIuc2V0Q29udGVudFByb3ZpZGVyKG5ldyBBZGFwdGVyRmFjdG9yeUNvbnRlbnRQcm92aWRlcihhZGFwdGVyRmFjdG9yeSkpOworCQkJCXRyZWVWaWV3ZXIuc2V0TGFiZWxQcm92aWRlcihuZXcgQWRhcHRlckZhY3RvcnlMYWJlbFByb3ZpZGVyKGFkYXB0ZXJGYWN0b3J5KSk7CisKKwkJCQluZXcgQWRhcHRlckZhY3RvcnlUcmVlRWRpdG9yKHRyZWVWaWV3ZXIuZ2V0VHJlZSgpLCBhZGFwdGVyRmFjdG9yeSk7CisKKwkJCQljcmVhdGVDb250ZXh0TWVudUZvcih0cmVlVmlld2VyKTsKKwkJCQlpbnQgcGFnZUluZGV4ID0gYWRkUGFnZSh2aWV3ZXJQYW5lLmdldENvbnRyb2woKSk7CisJCQkJc2V0UGFnZVRleHQocGFnZUluZGV4LCBnZXRTdHJpbmcoIl9VSV9UcmVlUGFnZV9sYWJlbCIpKTsKKwkJCX0KKworCQkJLy8gVGhpcyBpcyB0aGUgcGFnZSBmb3IgdGhlIHRhYmxlIHZpZXdlci4KKwkJCS8vCisJCQl7CisJCQkJVmlld2VyUGFuZSB2aWV3ZXJQYW5lID0KKwkJCQkJbmV3IFZpZXdlclBhbmUoZ2V0U2l0ZSgpLmdldFBhZ2UoKSwgSW1hZ2V3cml0ZXJFZGl0b3IudGhpcykgeworCQkJCQkJQE92ZXJyaWRlCisJCQkJCQlwdWJsaWMgVmlld2VyIGNyZWF0ZVZpZXdlcihDb21wb3NpdGUgY29tcG9zaXRlKSB7CisJCQkJCQkJcmV0dXJuIG5ldyBUYWJsZVZpZXdlcihjb21wb3NpdGUpOworCQkJCQkJfQorCQkJCQkJQE92ZXJyaWRlCisJCQkJCQlwdWJsaWMgdm9pZCByZXF1ZXN0QWN0aXZhdGlvbigpIHsKKwkJCQkJCQlzdXBlci5yZXF1ZXN0QWN0aXZhdGlvbigpOworCQkJCQkJCXNldEN1cnJlbnRWaWV3ZXJQYW5lKHRoaXMpOworCQkJCQkJfQorCQkJCQl9OworCQkJCXZpZXdlclBhbmUuY3JlYXRlQ29udHJvbChnZXRDb250YWluZXIoKSk7CisJCQkJdGFibGVWaWV3ZXIgPSAoVGFibGVWaWV3ZXIpdmlld2VyUGFuZS5nZXRWaWV3ZXIoKTsKKworCQkJCVRhYmxlIHRhYmxlID0gdGFibGVWaWV3ZXIuZ2V0VGFibGUoKTsKKwkJCQlUYWJsZUxheW91dCBsYXlvdXQgPSBuZXcgVGFibGVMYXlvdXQoKTsKKwkJCQl0YWJsZS5zZXRMYXlvdXQobGF5b3V0KTsKKwkJCQl0YWJsZS5zZXRIZWFkZXJWaXNpYmxlKHRydWUpOworCQkJCXRhYmxlLnNldExpbmVzVmlzaWJsZSh0cnVlKTsKKworCQkJCVRhYmxlQ29sdW1uIG9iamVjdENvbHVtbiA9IG5ldyBUYWJsZUNvbHVtbih0YWJsZSwgU1dULk5PTkUpOworCQkJCWxheW91dC5hZGRDb2x1bW5EYXRhKG5ldyBDb2x1bW5XZWlnaHREYXRhKDMsIDEwMCwgdHJ1ZSkpOworCQkJCW9iamVjdENvbHVtbi5zZXRUZXh0KGdldFN0cmluZygiX1VJX09iamVjdENvbHVtbl9sYWJlbCIpKTsKKwkJCQlvYmplY3RDb2x1bW4uc2V0UmVzaXphYmxlKHRydWUpOworCisJCQkJVGFibGVDb2x1bW4gc2VsZkNvbHVtbiA9IG5ldyBUYWJsZUNvbHVtbih0YWJsZSwgU1dULk5PTkUpOworCQkJCWxheW91dC5hZGRDb2x1bW5EYXRhKG5ldyBDb2x1bW5XZWlnaHREYXRhKDIsIDEwMCwgdHJ1ZSkpOworCQkJCXNlbGZDb2x1bW4uc2V0VGV4dChnZXRTdHJpbmcoIl9VSV9TZWxmQ29sdW1uX2xhYmVsIikpOworCQkJCXNlbGZDb2x1bW4uc2V0UmVzaXphYmxlKHRydWUpOworCisJCQkJdGFibGVWaWV3ZXIuc2V0Q29sdW1uUHJvcGVydGllcyhuZXcgU3RyaW5nIFtdIHsiYSIsICJiIn0pOworCQkJCXRhYmxlVmlld2VyLnNldENvbnRlbnRQcm92aWRlcihuZXcgQWRhcHRlckZhY3RvcnlDb250ZW50UHJvdmlkZXIoYWRhcHRlckZhY3RvcnkpKTsKKwkJCQl0YWJsZVZpZXdlci5zZXRMYWJlbFByb3ZpZGVyKG5ldyBBZGFwdGVyRmFjdG9yeUxhYmVsUHJvdmlkZXIoYWRhcHRlckZhY3RvcnkpKTsKKworCQkJCWNyZWF0ZUNvbnRleHRNZW51Rm9yKHRhYmxlVmlld2VyKTsKKwkJCQlpbnQgcGFnZUluZGV4ID0gYWRkUGFnZSh2aWV3ZXJQYW5lLmdldENvbnRyb2woKSk7CisJCQkJc2V0UGFnZVRleHQocGFnZUluZGV4LCBnZXRTdHJpbmcoIl9VSV9UYWJsZVBhZ2VfbGFiZWwiKSk7CisJCQl9CisKKwkJCS8vIFRoaXMgaXMgdGhlIHBhZ2UgZm9yIHRoZSB0YWJsZSB0cmVlIHZpZXdlci4KKwkJCS8vCisJCQl7CisJCQkJVmlld2VyUGFuZSB2aWV3ZXJQYW5lID0KKwkJCQkJbmV3IFZpZXdlclBhbmUoZ2V0U2l0ZSgpLmdldFBhZ2UoKSwgSW1hZ2V3cml0ZXJFZGl0b3IudGhpcykgeworCQkJCQkJQE92ZXJyaWRlCisJCQkJCQlwdWJsaWMgVmlld2VyIGNyZWF0ZVZpZXdlcihDb21wb3NpdGUgY29tcG9zaXRlKSB7CisJCQkJCQkJcmV0dXJuIG5ldyBUcmVlVmlld2VyKGNvbXBvc2l0ZSk7CisJCQkJCQl9CisJCQkJCQlAT3ZlcnJpZGUKKwkJCQkJCXB1YmxpYyB2b2lkIHJlcXVlc3RBY3RpdmF0aW9uKCkgeworCQkJCQkJCXN1cGVyLnJlcXVlc3RBY3RpdmF0aW9uKCk7CisJCQkJCQkJc2V0Q3VycmVudFZpZXdlclBhbmUodGhpcyk7CisJCQkJCQl9CisJCQkJCX07CisJCQkJdmlld2VyUGFuZS5jcmVhdGVDb250cm9sKGdldENvbnRhaW5lcigpKTsKKworCQkJCXRyZWVWaWV3ZXJXaXRoQ29sdW1ucyA9IChUcmVlVmlld2VyKXZpZXdlclBhbmUuZ2V0Vmlld2VyKCk7CisKKwkJCQlUcmVlIHRyZWUgPSB0cmVlVmlld2VyV2l0aENvbHVtbnMuZ2V0VHJlZSgpOworCQkJCXRyZWUuc2V0TGF5b3V0RGF0YShuZXcgRmlsbExheW91dCgpKTsKKwkJCQl0cmVlLnNldEhlYWRlclZpc2libGUodHJ1ZSk7CisJCQkJdHJlZS5zZXRMaW5lc1Zpc2libGUodHJ1ZSk7CisKKwkJCQlUcmVlQ29sdW1uIG9iamVjdENvbHVtbiA9IG5ldyBUcmVlQ29sdW1uKHRyZWUsIFNXVC5OT05FKTsKKwkJCQlvYmplY3RDb2x1bW4uc2V0VGV4dChnZXRTdHJpbmcoIl9VSV9PYmplY3RDb2x1bW5fbGFiZWwiKSk7CisJCQkJb2JqZWN0Q29sdW1uLnNldFJlc2l6YWJsZSh0cnVlKTsKKwkJCQlvYmplY3RDb2x1bW4uc2V0V2lkdGgoMjUwKTsKKworCQkJCVRyZWVDb2x1bW4gc2VsZkNvbHVtbiA9IG5ldyBUcmVlQ29sdW1uKHRyZWUsIFNXVC5OT05FKTsKKwkJCQlzZWxmQ29sdW1uLnNldFRleHQoZ2V0U3RyaW5nKCJfVUlfU2VsZkNvbHVtbl9sYWJlbCIpKTsKKwkJCQlzZWxmQ29sdW1uLnNldFJlc2l6YWJsZSh0cnVlKTsKKwkJCQlzZWxmQ29sdW1uLnNldFdpZHRoKDIwMCk7CisKKwkJCQl0cmVlVmlld2VyV2l0aENvbHVtbnMuc2V0Q29sdW1uUHJvcGVydGllcyhuZXcgU3RyaW5nIFtdIHsiYSIsICJiIn0pOworCQkJCXRyZWVWaWV3ZXJXaXRoQ29sdW1ucy5zZXRDb250ZW50UHJvdmlkZXIobmV3IEFkYXB0ZXJGYWN0b3J5Q29udGVudFByb3ZpZGVyKGFkYXB0ZXJGYWN0b3J5KSk7CisJCQkJdHJlZVZpZXdlcldpdGhDb2x1bW5zLnNldExhYmVsUHJvdmlkZXIobmV3IEFkYXB0ZXJGYWN0b3J5TGFiZWxQcm92aWRlcihhZGFwdGVyRmFjdG9yeSkpOworCisJCQkJY3JlYXRlQ29udGV4dE1lbnVGb3IodHJlZVZpZXdlcldpdGhDb2x1bW5zKTsKKwkJCQlpbnQgcGFnZUluZGV4ID0gYWRkUGFnZSh2aWV3ZXJQYW5lLmdldENvbnRyb2woKSk7CisJCQkJc2V0UGFnZVRleHQocGFnZUluZGV4LCBnZXRTdHJpbmcoIl9VSV9UcmVlV2l0aENvbHVtbnNQYWdlX2xhYmVsIikpOworCQkJfQorCisJCQlnZXRTaXRlKCkuZ2V0U2hlbGwoKS5nZXREaXNwbGF5KCkuYXN5bmNFeGVjCisJCQkJKG5ldyBSdW5uYWJsZSgpIHsKKwkJCQkJIHB1YmxpYyB2b2lkIHJ1bigpIHsKKwkJCQkJCSBzZXRBY3RpdmVQYWdlKDApOworCQkJCQkgfQorCQkJCSB9KTsKKwkJfQorCisJCS8vIEVuc3VyZXMgdGhhdCB0aGlzIGVkaXRvciB3aWxsIG9ubHkgZGlzcGxheSB0aGUgcGFnZSdzIHRhYgorCQkvLyBhcmVhIGlmIHRoZXJlIGFyZSBtb3JlIHRoYW4gb25lIHBhZ2UKKwkJLy8KKwkJZ2V0Q29udGFpbmVyKCkuYWRkQ29udHJvbExpc3RlbmVyCisJCQkobmV3IENvbnRyb2xBZGFwdGVyKCkgeworCQkJCWJvb2xlYW4gZ3VhcmQgPSBmYWxzZTsKKwkJCQlAT3ZlcnJpZGUKKwkJCQlwdWJsaWMgdm9pZCBjb250cm9sUmVzaXplZChDb250cm9sRXZlbnQgZXZlbnQpIHsKKwkJCQkJaWYgKCFndWFyZCkgeworCQkJCQkJZ3VhcmQgPSB0cnVlOworCQkJCQkJaGlkZVRhYnMoKTsKKwkJCQkJCWd1YXJkID0gZmFsc2U7CisJCQkJCX0KKwkJCQl9CisJCQkgfSk7CisKKwkJZ2V0U2l0ZSgpLmdldFNoZWxsKCkuZ2V0RGlzcGxheSgpLmFzeW5jRXhlYworCQkJKG5ldyBSdW5uYWJsZSgpIHsKKwkJCQkgcHVibGljIHZvaWQgcnVuKCkgeworCQkJCQkgdXBkYXRlUHJvYmxlbUluZGljYXRpb24oKTsKKwkJCQkgfQorCQkJIH0pOworCX0KKworCS8qKgorCSAqIElmIHRoZXJlIGlzIGp1c3Qgb25lIHBhZ2UgaW4gdGhlIG11bHRpLXBhZ2UgZWRpdG9yIHBhcnQsCisJICogdGhpcyBoaWRlcyB0aGUgc2luZ2xlIHRhYiBhdCB0aGUgYm90dG9tLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIGhpZGVUYWJzKCkgeworCQlpZiAoZ2V0UGFnZUNvdW50KCkgPD0gMSkgeworCQkJc2V0UGFnZVRleHQoMCwgIiIpOworCQkJaWYgKGdldENvbnRhaW5lcigpIGluc3RhbmNlb2YgQ1RhYkZvbGRlcikgeworCQkJCSgoQ1RhYkZvbGRlcilnZXRDb250YWluZXIoKSkuc2V0VGFiSGVpZ2h0KDEpOworCQkJCVBvaW50IHBvaW50ID0gZ2V0Q29udGFpbmVyKCkuZ2V0U2l6ZSgpOworCQkJCWdldENvbnRhaW5lcigpLnNldFNpemUocG9pbnQueCwgcG9pbnQueSArIDYpOworCQkJfQorCQl9CisJfQorCisJLyoqCisJICogSWYgdGhlcmUgaXMgbW9yZSB0aGFuIG9uZSBwYWdlIGluIHRoZSBtdWx0aS1wYWdlIGVkaXRvciBwYXJ0LAorCSAqIHRoaXMgc2hvd3MgdGhlIHRhYnMgYXQgdGhlIGJvdHRvbS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBzaG93VGFicygpIHsKKwkJaWYgKGdldFBhZ2VDb3VudCgpID4gMSkgeworCQkJc2V0UGFnZVRleHQoMCwgZ2V0U3RyaW5nKCJfVUlfU2VsZWN0aW9uUGFnZV9sYWJlbCIpKTsKKwkJCWlmIChnZXRDb250YWluZXIoKSBpbnN0YW5jZW9mIENUYWJGb2xkZXIpIHsKKwkJCQkoKENUYWJGb2xkZXIpZ2V0Q29udGFpbmVyKCkpLnNldFRhYkhlaWdodChTV1QuREVGQVVMVCk7CisJCQkJUG9pbnQgcG9pbnQgPSBnZXRDb250YWluZXIoKS5nZXRTaXplKCk7CisJCQkJZ2V0Q29udGFpbmVyKCkuc2V0U2l6ZShwb2ludC54LCBwb2ludC55IC0gNik7CisJCQl9CisJCX0KKwl9CisKKwkvKioKKwkgKiBUaGlzIGlzIHVzZWQgdG8gdHJhY2sgdGhlIGFjdGl2ZSB2aWV3ZXIuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgcGFnZUNoYW5nZShpbnQgcGFnZUluZGV4KSB7CisJCXN1cGVyLnBhZ2VDaGFuZ2UocGFnZUluZGV4KTsKKworCQlpZiAoY29udGVudE91dGxpbmVQYWdlICE9IG51bGwpIHsKKwkJCWhhbmRsZUNvbnRlbnRPdXRsaW5lU2VsZWN0aW9uKGNvbnRlbnRPdXRsaW5lUGFnZS5nZXRTZWxlY3Rpb24oKSk7CisJCX0KKwl9CisKKwkvKioKKwkgKiBUaGlzIGlzIGhvdyB0aGUgZnJhbWV3b3JrIGRldGVybWluZXMgd2hpY2ggaW50ZXJmYWNlcyB3ZSBpbXBsZW1lbnQuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQFN1cHByZXNzV2FybmluZ3MoInJhd3R5cGVzIikKKwlAT3ZlcnJpZGUKKwlwdWJsaWMgT2JqZWN0IGdldEFkYXB0ZXIoQ2xhc3Mga2V5KSB7CisJCWlmIChrZXkuZXF1YWxzKElDb250ZW50T3V0bGluZVBhZ2UuY2xhc3MpKSB7CisJCQlyZXR1cm4gc2hvd091dGxpbmVWaWV3KCkgPyBnZXRDb250ZW50T3V0bGluZVBhZ2UoKSA6IG51bGw7CisJCX0KKwkJZWxzZSBpZiAoa2V5LmVxdWFscyhJUHJvcGVydHlTaGVldFBhZ2UuY2xhc3MpKSB7CisJCQlyZXR1cm4gZ2V0UHJvcGVydHlTaGVldFBhZ2UoKTsKKwkJfQorCQllbHNlIHsKKwkJCXJldHVybiBzdXBlci5nZXRBZGFwdGVyKGtleSk7CisJCX0KKwl9CisKKwkvKioKKwkgKiBUaGlzIGFjY2Vzc2VzIGEgY2FjaGVkIHZlcnNpb24gb2YgdGhlIGNvbnRlbnQgb3V0bGluZXIuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIElDb250ZW50T3V0bGluZVBhZ2UgZ2V0Q29udGVudE91dGxpbmVQYWdlKCkgeworCQlpZiAoY29udGVudE91dGxpbmVQYWdlID09IG51bGwpIHsKKwkJCS8vIFRoZSBjb250ZW50IG91dGxpbmUgaXMganVzdCBhIHRyZWUuCisJCQkvLworCQkJY2xhc3MgTXlDb250ZW50T3V0bGluZVBhZ2UgZXh0ZW5kcyBDb250ZW50T3V0bGluZVBhZ2UgeworCQkJCUBPdmVycmlkZQorCQkJCXB1YmxpYyB2b2lkIGNyZWF0ZUNvbnRyb2woQ29tcG9zaXRlIHBhcmVudCkgeworCQkJCQlzdXBlci5jcmVhdGVDb250cm9sKHBhcmVudCk7CisJCQkJCWNvbnRlbnRPdXRsaW5lVmlld2VyID0gZ2V0VHJlZVZpZXdlcigpOworCQkJCQljb250ZW50T3V0bGluZVZpZXdlci5hZGRTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIodGhpcyk7CisKKwkJCQkJLy8gU2V0IHVwIHRoZSB0cmVlIHZpZXdlci4KKwkJCQkJLy8KKwkJCQkJY29udGVudE91dGxpbmVWaWV3ZXIuc2V0Q29udGVudFByb3ZpZGVyKG5ldyBBZGFwdGVyRmFjdG9yeUNvbnRlbnRQcm92aWRlcihhZGFwdGVyRmFjdG9yeSkpOworCQkJCQljb250ZW50T3V0bGluZVZpZXdlci5zZXRMYWJlbFByb3ZpZGVyKG5ldyBBZGFwdGVyRmFjdG9yeUxhYmVsUHJvdmlkZXIoYWRhcHRlckZhY3RvcnkpKTsKKwkJCQkJY29udGVudE91dGxpbmVWaWV3ZXIuc2V0SW5wdXQoZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpKTsKKworCQkJCQkvLyBNYWtlIHN1cmUgb3VyIHBvcHVwcyB3b3JrLgorCQkJCQkvLworCQkJCQljcmVhdGVDb250ZXh0TWVudUZvcihjb250ZW50T3V0bGluZVZpZXdlcik7CisKKwkJCQkJaWYgKCFlZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkuZ2V0UmVzb3VyY2VzKCkuaXNFbXB0eSgpKSB7CisJCQkJCSAgLy8gU2VsZWN0IHRoZSByb290IG9iamVjdCBpbiB0aGUgdmlldy4KKwkJCQkJICAvLworCQkJCQkgIGNvbnRlbnRPdXRsaW5lVmlld2VyLnNldFNlbGVjdGlvbihuZXcgU3RydWN0dXJlZFNlbGVjdGlvbihlZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkuZ2V0UmVzb3VyY2VzKCkuZ2V0KDApKSwgdHJ1ZSk7CisJCQkJCX0KKwkJCQl9CisKKwkJCQlAT3ZlcnJpZGUKKwkJCQlwdWJsaWMgdm9pZCBtYWtlQ29udHJpYnV0aW9ucyhJTWVudU1hbmFnZXIgbWVudU1hbmFnZXIsIElUb29sQmFyTWFuYWdlciB0b29sQmFyTWFuYWdlciwgSVN0YXR1c0xpbmVNYW5hZ2VyIHN0YXR1c0xpbmVNYW5hZ2VyKSB7CisJCQkJCXN1cGVyLm1ha2VDb250cmlidXRpb25zKG1lbnVNYW5hZ2VyLCB0b29sQmFyTWFuYWdlciwgc3RhdHVzTGluZU1hbmFnZXIpOworCQkJCQljb250ZW50T3V0bGluZVN0YXR1c0xpbmVNYW5hZ2VyID0gc3RhdHVzTGluZU1hbmFnZXI7CisJCQkJfQorCisJCQkJQE92ZXJyaWRlCisJCQkJcHVibGljIHZvaWQgc2V0QWN0aW9uQmFycyhJQWN0aW9uQmFycyBhY3Rpb25CYXJzKSB7CisJCQkJCXN1cGVyLnNldEFjdGlvbkJhcnMoYWN0aW9uQmFycyk7CisJCQkJCWdldEFjdGlvbkJhckNvbnRyaWJ1dG9yKCkuc2hhcmVHbG9iYWxBY3Rpb25zKHRoaXMsIGFjdGlvbkJhcnMpOworCQkJCX0KKwkJCX0KKworCQkJY29udGVudE91dGxpbmVQYWdlID0gbmV3IE15Q29udGVudE91dGxpbmVQYWdlKCk7CisKKwkJCS8vIExpc3RlbiB0byBzZWxlY3Rpb24gc28gdGhhdCB3ZSBjYW4gaGFuZGxlIGl0IGlzIGEgc3BlY2lhbCB3YXkuCisJCQkvLworCQkJY29udGVudE91dGxpbmVQYWdlLmFkZFNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcgorCQkJCShuZXcgSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcigpIHsKKwkJCQkJIC8vIFRoaXMgZW5zdXJlcyB0aGF0IHdlIGhhbmRsZSBzZWxlY3Rpb25zIGNvcnJlY3RseS4KKwkJCQkJIC8vCisJCQkJCSBwdWJsaWMgdm9pZCBzZWxlY3Rpb25DaGFuZ2VkKFNlbGVjdGlvbkNoYW5nZWRFdmVudCBldmVudCkgeworCQkJCQkJIGhhbmRsZUNvbnRlbnRPdXRsaW5lU2VsZWN0aW9uKGV2ZW50LmdldFNlbGVjdGlvbigpKTsKKwkJCQkJIH0KKwkJCQkgfSk7CisJCX0KKworCQlyZXR1cm4gY29udGVudE91dGxpbmVQYWdlOworCX0KKworCS8qKgorCSAqIFRoaXMgYWNjZXNzZXMgYSBjYWNoZWQgdmVyc2lvbiBvZiB0aGUgcHJvcGVydHkgc2hlZXQuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIElQcm9wZXJ0eVNoZWV0UGFnZSBnZXRQcm9wZXJ0eVNoZWV0UGFnZSgpIHsKKwkJaWYgKHByb3BlcnR5U2hlZXRQYWdlID09IG51bGwpIHsKKwkJCXByb3BlcnR5U2hlZXRQYWdlID0KKwkJCQluZXcgRXh0ZW5kZWRQcm9wZXJ0eVNoZWV0UGFnZShlZGl0aW5nRG9tYWluKSB7CisJCQkJCUBPdmVycmlkZQorCQkJCQlwdWJsaWMgdm9pZCBzZXRTZWxlY3Rpb25Ub1ZpZXdlcihMaXN0PD8+IHNlbGVjdGlvbikgeworCQkJCQkJSW1hZ2V3cml0ZXJFZGl0b3IudGhpcy5zZXRTZWxlY3Rpb25Ub1ZpZXdlcihzZWxlY3Rpb24pOworCQkJCQkJSW1hZ2V3cml0ZXJFZGl0b3IudGhpcy5zZXRGb2N1cygpOworCQkJCQl9CisKKwkJCQkJQE92ZXJyaWRlCisJCQkJCXB1YmxpYyB2b2lkIHNldEFjdGlvbkJhcnMoSUFjdGlvbkJhcnMgYWN0aW9uQmFycykgeworCQkJCQkJc3VwZXIuc2V0QWN0aW9uQmFycyhhY3Rpb25CYXJzKTsKKwkJCQkJCWdldEFjdGlvbkJhckNvbnRyaWJ1dG9yKCkuc2hhcmVHbG9iYWxBY3Rpb25zKHRoaXMsIGFjdGlvbkJhcnMpOworCQkJCQl9CisJCQkJfTsKKwkJCXByb3BlcnR5U2hlZXRQYWdlLnNldFByb3BlcnR5U291cmNlUHJvdmlkZXIobmV3IEFkYXB0ZXJGYWN0b3J5Q29udGVudFByb3ZpZGVyKGFkYXB0ZXJGYWN0b3J5KSk7CisJCX0KKworCQlyZXR1cm4gcHJvcGVydHlTaGVldFBhZ2U7CisJfQorCisJLyoqCisJICogVGhpcyBkZWFscyB3aXRoIGhvdyB3ZSB3YW50IHNlbGVjdGlvbiBpbiB0aGUgb3V0bGluZXIgdG8gYWZmZWN0IHRoZSBvdGhlciB2aWV3cy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBoYW5kbGVDb250ZW50T3V0bGluZVNlbGVjdGlvbihJU2VsZWN0aW9uIHNlbGVjdGlvbikgeworCQlpZiAoY3VycmVudFZpZXdlclBhbmUgIT0gbnVsbCAmJiAhc2VsZWN0aW9uLmlzRW1wdHkoKSAmJiBzZWxlY3Rpb24gaW5zdGFuY2VvZiBJU3RydWN0dXJlZFNlbGVjdGlvbikgeworCQkJSXRlcmF0b3I8Pz4gc2VsZWN0ZWRFbGVtZW50cyA9ICgoSVN0cnVjdHVyZWRTZWxlY3Rpb24pc2VsZWN0aW9uKS5pdGVyYXRvcigpOworCQkJaWYgKHNlbGVjdGVkRWxlbWVudHMuaGFzTmV4dCgpKSB7CisJCQkJLy8gR2V0IHRoZSBmaXJzdCBzZWxlY3RlZCBlbGVtZW50LgorCQkJCS8vCisJCQkJT2JqZWN0IHNlbGVjdGVkRWxlbWVudCA9IHNlbGVjdGVkRWxlbWVudHMubmV4dCgpOworCisJCQkJLy8gSWYgaXQncyB0aGUgc2VsZWN0aW9uIHZpZXdlciwgdGhlbiB3ZSB3YW50IGl0IHRvIHNlbGVjdCB0aGUgc2FtZSBzZWxlY3Rpb24gYXMgdGhpcyBzZWxlY3Rpb24uCisJCQkJLy8KKwkJCQlpZiAoY3VycmVudFZpZXdlclBhbmUuZ2V0Vmlld2VyKCkgPT0gc2VsZWN0aW9uVmlld2VyKSB7CisJCQkJCUFycmF5TGlzdDxPYmplY3Q+IHNlbGVjdGlvbkxpc3QgPSBuZXcgQXJyYXlMaXN0PE9iamVjdD4oKTsKKwkJCQkJc2VsZWN0aW9uTGlzdC5hZGQoc2VsZWN0ZWRFbGVtZW50KTsKKwkJCQkJd2hpbGUgKHNlbGVjdGVkRWxlbWVudHMuaGFzTmV4dCgpKSB7CisJCQkJCQlzZWxlY3Rpb25MaXN0LmFkZChzZWxlY3RlZEVsZW1lbnRzLm5leHQoKSk7CisJCQkJCX0KKworCQkJCQkvLyBTZXQgdGhlIHNlbGVjdGlvbiB0byB0aGUgd2lkZ2V0LgorCQkJCQkvLworCQkJCQlzZWxlY3Rpb25WaWV3ZXIuc2V0U2VsZWN0aW9uKG5ldyBTdHJ1Y3R1cmVkU2VsZWN0aW9uKHNlbGVjdGlvbkxpc3QpKTsKKwkJCQl9CisJCQkJZWxzZSB7CisJCQkJCS8vIFNldCB0aGUgaW5wdXQgdG8gdGhlIHdpZGdldC4KKwkJCQkJLy8KKwkJCQkJaWYgKGN1cnJlbnRWaWV3ZXJQYW5lLmdldFZpZXdlcigpLmdldElucHV0KCkgIT0gc2VsZWN0ZWRFbGVtZW50KSB7CisJCQkJCQljdXJyZW50Vmlld2VyUGFuZS5nZXRWaWV3ZXIoKS5zZXRJbnB1dChzZWxlY3RlZEVsZW1lbnQpOworCQkJCQkJY3VycmVudFZpZXdlclBhbmUuc2V0VGl0bGUoc2VsZWN0ZWRFbGVtZW50KTsKKwkJCQkJfQorCQkJCX0KKwkJCX0KKwkJfQorCX0KKworCS8qKgorCSAqIFRoaXMgaXMgZm9yIGltcGxlbWVudGluZyB7QGxpbmsgSUVkaXRvclBhcnR9IGFuZCBzaW1wbHkgdGVzdHMgdGhlIGNvbW1hbmQgc3RhY2suCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIGJvb2xlYW4gaXNEaXJ0eSgpIHsKKwkJcmV0dXJuICgoQmFzaWNDb21tYW5kU3RhY2spZWRpdGluZ0RvbWFpbi5nZXRDb21tYW5kU3RhY2soKSkuaXNTYXZlTmVlZGVkKCk7CisJfQorCisJLyoqCisJICogVGhpcyBpcyBmb3IgaW1wbGVtZW50aW5nIHtAbGluayBJRWRpdG9yUGFydH0gYW5kIHNpbXBseSBzYXZlcyB0aGUgbW9kZWwgZmlsZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBkb1NhdmUoSVByb2dyZXNzTW9uaXRvciBwcm9ncmVzc01vbml0b3IpIHsKKwkJLy8gU2F2ZSBvbmx5IHJlc291cmNlcyB0aGF0IGhhdmUgYWN0dWFsbHkgY2hhbmdlZC4KKwkJLy8KKwkJZmluYWwgTWFwPE9iamVjdCwgT2JqZWN0PiBzYXZlT3B0aW9ucyA9IG5ldyBIYXNoTWFwPE9iamVjdCwgT2JqZWN0PigpOworCQlzYXZlT3B0aW9ucy5wdXQoUmVzb3VyY2UuT1BUSU9OX1NBVkVfT05MWV9JRl9DSEFOR0VELCBSZXNvdXJjZS5PUFRJT05fU0FWRV9PTkxZX0lGX0NIQU5HRURfTUVNT1JZX0JVRkZFUik7CisKKwkJLy8gRG8gdGhlIHdvcmsgd2l0aGluIGFuIG9wZXJhdGlvbiBiZWNhdXNlIHRoaXMgaXMgYSBsb25nIHJ1bm5pbmcgYWN0aXZpdHkgdGhhdCBtb2RpZmllcyB0aGUgd29ya2JlbmNoLgorCQkvLworCQlJUnVubmFibGVXaXRoUHJvZ3Jlc3Mgb3BlcmF0aW9uID0KKwkJCW5ldyBJUnVubmFibGVXaXRoUHJvZ3Jlc3MoKSB7CisJCQkJLy8gVGhpcyBpcyB0aGUgbWV0aG9kIHRoYXQgZ2V0cyBpbnZva2VkIHdoZW4gdGhlIG9wZXJhdGlvbiBydW5zLgorCQkJCS8vCisJCQkJcHVibGljIHZvaWQgcnVuKElQcm9ncmVzc01vbml0b3IgbW9uaXRvcikgeworCQkJCQkvLyBTYXZlIHRoZSByZXNvdXJjZXMgdG8gdGhlIGZpbGUgc3lzdGVtLgorCQkJCQkvLworCQkJCQlib29sZWFuIGZpcnN0ID0gdHJ1ZTsKKwkJCQkJZm9yIChSZXNvdXJjZSByZXNvdXJjZSA6IGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKS5nZXRSZXNvdXJjZXMoKSkgeworCQkJCQkJaWYgKChmaXJzdCB8fCAhcmVzb3VyY2UuZ2V0Q29udGVudHMoKS5pc0VtcHR5KCkgfHwgaXNQZXJzaXN0ZWQocmVzb3VyY2UpKSAmJiAhZWRpdGluZ0RvbWFpbi5pc1JlYWRPbmx5KHJlc291cmNlKSkgeworCQkJCQkJCXRyeSB7CisJCQkJCQkJCWxvbmcgdGltZVN0YW1wID0gcmVzb3VyY2UuZ2V0VGltZVN0YW1wKCk7CisJCQkJCQkJCXJlc291cmNlLnNhdmUoc2F2ZU9wdGlvbnMpOworCQkJCQkJCQlpZiAocmVzb3VyY2UuZ2V0VGltZVN0YW1wKCkgIT0gdGltZVN0YW1wKSB7CisJCQkJCQkJCQlzYXZlZFJlc291cmNlcy5hZGQocmVzb3VyY2UpOworCQkJCQkJCQl9CisJCQkJCQkJfQorCQkJCQkJCWNhdGNoIChFeGNlcHRpb24gZXhjZXB0aW9uKSB7CisJCQkJCQkJCXJlc291cmNlVG9EaWFnbm9zdGljTWFwLnB1dChyZXNvdXJjZSwgYW5hbHl6ZVJlc291cmNlUHJvYmxlbXMocmVzb3VyY2UsIGV4Y2VwdGlvbikpOworCQkJCQkJCX0KKwkJCQkJCQlmaXJzdCA9IGZhbHNlOworCQkJCQkJfQorCQkJCQl9CisJCQkJfQorCQkJfTsKKworCQl1cGRhdGVQcm9ibGVtSW5kaWNhdGlvbiA9IGZhbHNlOworCQl0cnkgeworCQkJLy8gVGhpcyBydW5zIHRoZSBvcHRpb25zLCBhbmQgc2hvd3MgcHJvZ3Jlc3MuCisJCQkvLworCQkJbmV3IFByb2dyZXNzTW9uaXRvckRpYWxvZyhnZXRTaXRlKCkuZ2V0U2hlbGwoKSkucnVuKHRydWUsIGZhbHNlLCBvcGVyYXRpb24pOworCisJCQkvLyBSZWZyZXNoIHRoZSBuZWNlc3Nhcnkgc3RhdGUuCisJCQkvLworCQkJKChCYXNpY0NvbW1hbmRTdGFjayllZGl0aW5nRG9tYWluLmdldENvbW1hbmRTdGFjaygpKS5zYXZlSXNEb25lKCk7CisJCQlmaXJlUHJvcGVydHlDaGFuZ2UoSUVkaXRvclBhcnQuUFJPUF9ESVJUWSk7CisJCX0KKwkJY2F0Y2ggKEV4Y2VwdGlvbiBleGNlcHRpb24pIHsKKwkJCS8vIFNvbWV0aGluZyB3ZW50IHdyb25nIHRoYXQgc2hvdWxkbid0LgorCQkJLy8KKwkJCUltYWdlV3JpdGVyTG9nZ2VyRWRpdFBsdWdpbi5JTlNUQU5DRS5sb2coZXhjZXB0aW9uKTsKKwkJfQorCQl1cGRhdGVQcm9ibGVtSW5kaWNhdGlvbiA9IHRydWU7CisJCXVwZGF0ZVByb2JsZW1JbmRpY2F0aW9uKCk7CisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIHdoZXRoZXIgc29tZXRoaW5nIGhhcyBiZWVuIHBlcnNpc3RlZCB0byB0aGUgVVJJIG9mIHRoZSBzcGVjaWZpZWQgcmVzb3VyY2UuCisJICogVGhlIGltcGxlbWVudGF0aW9uIHVzZXMgdGhlIFVSSSBjb252ZXJ0ZXIgZnJvbSB0aGUgZWRpdG9yJ3MgcmVzb3VyY2Ugc2V0IHRvIHRyeSB0byBvcGVuIGFuIGlucHV0IHN0cmVhbS4gCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIGJvb2xlYW4gaXNQZXJzaXN0ZWQoUmVzb3VyY2UgcmVzb3VyY2UpIHsKKwkJYm9vbGVhbiByZXN1bHQgPSBmYWxzZTsKKwkJdHJ5IHsKKwkJCUlucHV0U3RyZWFtIHN0cmVhbSA9IGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKS5nZXRVUklDb252ZXJ0ZXIoKS5jcmVhdGVJbnB1dFN0cmVhbShyZXNvdXJjZS5nZXRVUkkoKSk7CisJCQlpZiAoc3RyZWFtICE9IG51bGwpIHsKKwkJCQlyZXN1bHQgPSB0cnVlOworCQkJCXN0cmVhbS5jbG9zZSgpOworCQkJfQorCQl9CisJCWNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7CisJCQkvLyBJZ25vcmUKKwkJfQorCQlyZXR1cm4gcmVzdWx0OworCX0KKworCS8qKgorCSAqIFRoaXMgYWx3YXlzIHJldHVybnMgdHJ1ZSBiZWNhdXNlIGl0IGlzIG5vdCBjdXJyZW50bHkgc3VwcG9ydGVkLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBib29sZWFuIGlzU2F2ZUFzQWxsb3dlZCgpIHsKKwkJcmV0dXJuIHRydWU7CisJfQorCisJLyoqCisJICogVGhpcyBhbHNvIGNoYW5nZXMgdGhlIGVkaXRvcidzIGlucHV0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGRvU2F2ZUFzKCkgeworCQlTdHJpbmdbXSBmaWx0ZXJzID0gRklMRV9FWFRFTlNJT05fRklMVEVSUy50b0FycmF5KG5ldyBTdHJpbmdbRklMRV9FWFRFTlNJT05fRklMVEVSUy5zaXplKCldKTsKKwkJU3RyaW5nW10gZmlsZXMgPSBJbWFnZVdyaXRlckxvZ2dlckVkaXRvckFkdmlzb3Iub3BlbkZpbGVQYXRoRGlhbG9nKGdldFNpdGUoKS5nZXRTaGVsbCgpLCBTV1QuU0FWRSwgZmlsdGVycyk7CisJCWlmIChmaWxlcy5sZW5ndGggPiAwKSB7CisJCQlVUkkgdXJpID0gVVJJLmNyZWF0ZUZpbGVVUkkoZmlsZXNbMF0pOworCQkJZG9TYXZlQXModXJpLCBuZXcgVVJJRWRpdG9ySW5wdXQodXJpKSk7CisJCX0KKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBkb1NhdmVBcyhVUkkgdXJpLCBJRWRpdG9ySW5wdXQgZWRpdG9ySW5wdXQpIHsKKwkJKGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKS5nZXRSZXNvdXJjZXMoKS5nZXQoMCkpLnNldFVSSSh1cmkpOworCQlzZXRJbnB1dFdpdGhOb3RpZnkoZWRpdG9ySW5wdXQpOworCQlzZXRQYXJ0TmFtZShlZGl0b3JJbnB1dC5nZXROYW1lKCkpOworCQlJUHJvZ3Jlc3NNb25pdG9yIHByb2dyZXNzTW9uaXRvciA9CisJCQlnZXRBY3Rpb25CYXJzKCkuZ2V0U3RhdHVzTGluZU1hbmFnZXIoKSAhPSBudWxsID8KKwkJCQlnZXRBY3Rpb25CYXJzKCkuZ2V0U3RhdHVzTGluZU1hbmFnZXIoKS5nZXRQcm9ncmVzc01vbml0b3IoKSA6CisJCQkJbmV3IE51bGxQcm9ncmVzc01vbml0b3IoKTsKKwkJZG9TYXZlKHByb2dyZXNzTW9uaXRvcik7CisJfQorCisJLyoqCisJICogVGhpcyBpcyBjYWxsZWQgZHVyaW5nIHN0YXJ0dXAuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgaW5pdChJRWRpdG9yU2l0ZSBzaXRlLCBJRWRpdG9ySW5wdXQgZWRpdG9ySW5wdXQpIHsKKwkJc2V0U2l0ZShzaXRlKTsKKwkJc2V0SW5wdXRXaXRoTm90aWZ5KGVkaXRvcklucHV0KTsKKwkJc2V0UGFydE5hbWUoZWRpdG9ySW5wdXQuZ2V0TmFtZSgpKTsKKwkJc2l0ZS5zZXRTZWxlY3Rpb25Qcm92aWRlcih0aGlzKTsKKwkJc2l0ZS5nZXRQYWdlKCkuYWRkUGFydExpc3RlbmVyKHBhcnRMaXN0ZW5lcik7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgc2V0Rm9jdXMoKSB7CisJCWlmIChjdXJyZW50Vmlld2VyUGFuZSAhPSBudWxsKSB7CisJCQljdXJyZW50Vmlld2VyUGFuZS5zZXRGb2N1cygpOworCQl9CisJCWVsc2UgeworCQkJZ2V0Q29udHJvbChnZXRBY3RpdmVQYWdlKCkpLnNldEZvY3VzKCk7CisJCX0KKwl9CisKKwkvKioKKwkgKiBUaGlzIGltcGxlbWVudHMge0BsaW5rIG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvblByb3ZpZGVyfS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBhZGRTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIoSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lciBsaXN0ZW5lcikgeworCQlzZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXJzLmFkZChsaXN0ZW5lcik7CisJfQorCisJLyoqCisJICogVGhpcyBpbXBsZW1lbnRzIHtAbGluayBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb25Qcm92aWRlcn0uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgcmVtb3ZlU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyKElTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIgbGlzdGVuZXIpIHsKKwkJc2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVycy5yZW1vdmUobGlzdGVuZXIpOworCX0KKworCS8qKgorCSAqIFRoaXMgaW1wbGVtZW50cyB7QGxpbmsgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uUHJvdmlkZXJ9IHRvIHJldHVybiB0aGlzIGVkaXRvcidzIG92ZXJhbGwgc2VsZWN0aW9uLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBJU2VsZWN0aW9uIGdldFNlbGVjdGlvbigpIHsKKwkJcmV0dXJuIGVkaXRvclNlbGVjdGlvbjsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGltcGxlbWVudHMge0BsaW5rIG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvblByb3ZpZGVyfSB0byBzZXQgdGhpcyBlZGl0b3IncyBvdmVyYWxsIHNlbGVjdGlvbi4KKwkgKiBDYWxsaW5nIHRoaXMgcmVzdWx0IHdpbGwgbm90aWZ5IHRoZSBsaXN0ZW5lcnMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgc2V0U2VsZWN0aW9uKElTZWxlY3Rpb24gc2VsZWN0aW9uKSB7CisJCWVkaXRvclNlbGVjdGlvbiA9IHNlbGVjdGlvbjsKKworCQlmb3IgKElTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIgbGlzdGVuZXIgOiBzZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXJzKSB7CisJCQlsaXN0ZW5lci5zZWxlY3Rpb25DaGFuZ2VkKG5ldyBTZWxlY3Rpb25DaGFuZ2VkRXZlbnQodGhpcywgc2VsZWN0aW9uKSk7CisJCX0KKwkJc2V0U3RhdHVzTGluZU1hbmFnZXIoc2VsZWN0aW9uKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRTdGF0dXNMaW5lTWFuYWdlcihJU2VsZWN0aW9uIHNlbGVjdGlvbikgeworCQlJU3RhdHVzTGluZU1hbmFnZXIgc3RhdHVzTGluZU1hbmFnZXIgPSBjdXJyZW50Vmlld2VyICE9IG51bGwgJiYgY3VycmVudFZpZXdlciA9PSBjb250ZW50T3V0bGluZVZpZXdlciA/CisJCQljb250ZW50T3V0bGluZVN0YXR1c0xpbmVNYW5hZ2VyIDogZ2V0QWN0aW9uQmFycygpLmdldFN0YXR1c0xpbmVNYW5hZ2VyKCk7CisKKwkJaWYgKHN0YXR1c0xpbmVNYW5hZ2VyICE9IG51bGwpIHsKKwkJCWlmIChzZWxlY3Rpb24gaW5zdGFuY2VvZiBJU3RydWN0dXJlZFNlbGVjdGlvbikgeworCQkJCUNvbGxlY3Rpb248Pz4gY29sbGVjdGlvbiA9ICgoSVN0cnVjdHVyZWRTZWxlY3Rpb24pc2VsZWN0aW9uKS50b0xpc3QoKTsKKwkJCQlzd2l0Y2ggKGNvbGxlY3Rpb24uc2l6ZSgpKSB7CisJCQkJCWNhc2UgMDogeworCQkJCQkJc3RhdHVzTGluZU1hbmFnZXIuc2V0TWVzc2FnZShnZXRTdHJpbmcoIl9VSV9Ob09iamVjdFNlbGVjdGVkIikpOworCQkJCQkJYnJlYWs7CisJCQkJCX0KKwkJCQkJY2FzZSAxOiB7CisJCQkJCQlTdHJpbmcgdGV4dCA9IG5ldyBBZGFwdGVyRmFjdG9yeUl0ZW1EZWxlZ2F0b3IoYWRhcHRlckZhY3RvcnkpLmdldFRleHQoY29sbGVjdGlvbi5pdGVyYXRvcigpLm5leHQoKSk7CisJCQkJCQlzdGF0dXNMaW5lTWFuYWdlci5zZXRNZXNzYWdlKGdldFN0cmluZygiX1VJX1NpbmdsZU9iamVjdFNlbGVjdGVkIiwgdGV4dCkpOworCQkJCQkJYnJlYWs7CisJCQkJCX0KKwkJCQkJZGVmYXVsdDogeworCQkJCQkJc3RhdHVzTGluZU1hbmFnZXIuc2V0TWVzc2FnZShnZXRTdHJpbmcoIl9VSV9NdWx0aU9iamVjdFNlbGVjdGVkIiwgSW50ZWdlci50b1N0cmluZyhjb2xsZWN0aW9uLnNpemUoKSkpKTsKKwkJCQkJCWJyZWFrOworCQkJCQl9CisJCQkJfQorCQkJfQorCQkJZWxzZSB7CisJCQkJc3RhdHVzTGluZU1hbmFnZXIuc2V0TWVzc2FnZSgiIik7CisJCQl9CisJCX0KKwl9CisKKwkvKioKKwkgKiBUaGlzIGxvb2tzIHVwIGEgc3RyaW5nIGluIHRoZSBwbHVnaW4ncyBwbHVnaW4ucHJvcGVydGllcyBmaWxlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByaXZhdGUgc3RhdGljIFN0cmluZyBnZXRTdHJpbmcoU3RyaW5nIGtleSkgeworCQlyZXR1cm4gSW1hZ2VXcml0ZXJMb2dnZXJFZGl0UGx1Z2luLklOU1RBTkNFLmdldFN0cmluZyhrZXkpOworCX0KKworCS8qKgorCSAqIFRoaXMgbG9va3MgdXAgYSBzdHJpbmcgaW4gcGx1Z2luLnByb3BlcnRpZXMsIG1ha2luZyBhIHN1YnN0aXR1dGlvbi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcml2YXRlIHN0YXRpYyBTdHJpbmcgZ2V0U3RyaW5nKFN0cmluZyBrZXksIE9iamVjdCBzMSkgeworCQlyZXR1cm4gSW1hZ2VXcml0ZXJMb2dnZXJFZGl0UGx1Z2luLklOU1RBTkNFLmdldFN0cmluZyhrZXksIG5ldyBPYmplY3QgW10geyBzMSB9KTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGltcGxlbWVudHMge0BsaW5rIG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JTWVudUxpc3RlbmVyfSB0byBoZWxwIGZpbGwgdGhlIGNvbnRleHQgbWVudXMgd2l0aCBjb250cmlidXRpb25zIGZyb20gdGhlIEVkaXQgbWVudS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBtZW51QWJvdXRUb1Nob3coSU1lbnVNYW5hZ2VyIG1lbnVNYW5hZ2VyKSB7CisJCSgoSU1lbnVMaXN0ZW5lcilnZXRFZGl0b3JTaXRlKCkuZ2V0QWN0aW9uQmFyQ29udHJpYnV0b3IoKSkubWVudUFib3V0VG9TaG93KG1lbnVNYW5hZ2VyKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRWRpdGluZ0RvbWFpbkFjdGlvbkJhckNvbnRyaWJ1dG9yIGdldEFjdGlvbkJhckNvbnRyaWJ1dG9yKCkgeworCQlyZXR1cm4gKEVkaXRpbmdEb21haW5BY3Rpb25CYXJDb250cmlidXRvcilnZXRFZGl0b3JTaXRlKCkuZ2V0QWN0aW9uQmFyQ29udHJpYnV0b3IoKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgSUFjdGlvbkJhcnMgZ2V0QWN0aW9uQmFycygpIHsKKwkJcmV0dXJuIGdldEFjdGlvbkJhckNvbnRyaWJ1dG9yKCkuZ2V0QWN0aW9uQmFycygpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBBZGFwdGVyRmFjdG9yeSBnZXRBZGFwdGVyRmFjdG9yeSgpIHsKKwkJcmV0dXJuIGFkYXB0ZXJGYWN0b3J5OworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGRpc3Bvc2UoKSB7CisJCXVwZGF0ZVByb2JsZW1JbmRpY2F0aW9uID0gZmFsc2U7CisKKwkJZ2V0U2l0ZSgpLmdldFBhZ2UoKS5yZW1vdmVQYXJ0TGlzdGVuZXIocGFydExpc3RlbmVyKTsKKworCQlhZGFwdGVyRmFjdG9yeS5kaXNwb3NlKCk7CisKKwkJaWYgKGdldEFjdGlvbkJhckNvbnRyaWJ1dG9yKCkuZ2V0QWN0aXZlRWRpdG9yKCkgPT0gdGhpcykgeworCQkJZ2V0QWN0aW9uQmFyQ29udHJpYnV0b3IoKS5zZXRBY3RpdmVFZGl0b3IobnVsbCk7CisJCX0KKworCQlpZiAocHJvcGVydHlTaGVldFBhZ2UgIT0gbnVsbCkgeworCQkJcHJvcGVydHlTaGVldFBhZ2UuZGlzcG9zZSgpOworCQl9CisKKwkJaWYgKGNvbnRlbnRPdXRsaW5lUGFnZSAhPSBudWxsKSB7CisJCQljb250ZW50T3V0bGluZVBhZ2UuZGlzcG9zZSgpOworCQl9CisKKwkJc3VwZXIuZGlzcG9zZSgpOworCX0KKworCS8qKgorCSAqIFJldHVybnMgd2hldGhlciB0aGUgb3V0bGluZSB2aWV3IHNob3VsZCBiZSBwcmVzZW50ZWQgdG8gdGhlIHVzZXIuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIGJvb2xlYW4gc2hvd091dGxpbmVWaWV3KCkgeworCQlyZXR1cm4gdHJ1ZTsKKwl9Cit9CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy5pbWFnZXdyaXRlci9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9sb2dnZXJzL2ltYWdld3JpdGVyL3ByZXNlbnRhdGlvbi9JbWFnZXdyaXRlck1vZGVsV2l6YXJkLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy5pbWFnZXdyaXRlci9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9sb2dnZXJzL2ltYWdld3JpdGVyL3ByZXNlbnRhdGlvbi9JbWFnZXdyaXRlck1vZGVsV2l6YXJkLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGYzOGIyMQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzLmltYWdld3JpdGVyL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2xvZ2dlcnMvaW1hZ2V3cml0ZXIvcHJlc2VudGF0aW9uL0ltYWdld3JpdGVyTW9kZWxXaXphcmQuamF2YQpAQCAtMCwwICsxLDU4OCBAQAorLyoqCisgKiA8Y29weXJpZ2h0PgorICogPC9jb3B5cmlnaHQ+CisgKgorICogJElkJAorICovCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy5pbWFnZXdyaXRlci5wcmVzZW50YXRpb247CisKKworaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7CitpbXBvcnQgamF2YS51dGlsLkFycmF5czsKK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbnM7CitpbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CitpbXBvcnQgamF2YS51dGlsLk1hcDsKK2ltcG9ydCBqYXZhLnV0aWwuTWlzc2luZ1Jlc291cmNlRXhjZXB0aW9uOworaW1wb3J0IGphdmEudXRpbC5TdHJpbmdUb2tlbml6ZXI7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuVVJJOworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzczsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzaWZpZXI7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUucmVzb3VyY2UuUmVzb3VyY2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnJlc291cmNlLlJlc291cmNlU2V0OworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnJlc291cmNlLmltcGwuUmVzb3VyY2VTZXRJbXBsOworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3Q7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUueG1pLlhNTFJlc291cmNlOworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkucHJvdmlkZXIuRXh0ZW5kZWRJbWFnZVJlZ2lzdHJ5OworCitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQcm9ncmVzc01vbml0b3I7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5kaWFsb2dzLk1lc3NhZ2VEaWFsb2c7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTdHJ1Y3R1cmVkU2VsZWN0aW9uOworCitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uud2l6YXJkLldpemFyZDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS53aXphcmQuV2l6YXJkUGFnZTsKKworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5TV1Q7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLk1vZGlmeUxpc3RlbmVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuTW9kaWZ5RXZlbnQ7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QubGF5b3V0LkdyaWREYXRhOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5sYXlvdXQuR3JpZExheW91dDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbWJvOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5MYWJlbDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklOZXdXaXphcmQ7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy5pbWFnZXdyaXRlci5JbWFnZXdyaXRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzLmltYWdld3JpdGVyLkltYWdld3JpdGVyUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMuaW1hZ2V3cml0ZXIucHJvdmlkZXIuSW1hZ2VXcml0ZXJMb2dnZXJFZGl0UGx1Z2luOworCisKK2ltcG9ydCBqYXZhLmlvLkZpbGU7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5vcGVyYXRpb24uSVJ1bm5hYmxlV2l0aFByb2dyZXNzOworCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzLmltYWdld3JpdGVyLnByb3ZpZGVyLkltYWdlV3JpdGVyTG9nZ2VyRWRpdG9yQWR2aXNvcjsKKworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuU2VsZWN0aW9uQWRhcHRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLlNlbGVjdGlvbkV2ZW50OworCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQnV0dG9uOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlRleHQ7CisKKworLyoqCisgKiBUaGlzIGlzIGEgc2ltcGxlIHdpemFyZCBmb3IgY3JlYXRpbmcgYSBuZXcgbW9kZWwgZmlsZS4KKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIEltYWdld3JpdGVyTW9kZWxXaXphcmQgZXh0ZW5kcyBXaXphcmQgaW1wbGVtZW50cyBJTmV3V2l6YXJkIHsKKwkvKioKKwkgKiBUaGUgc3VwcG9ydGVkIGV4dGVuc2lvbnMgZm9yIGNyZWF0ZWQgZmlsZXMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBMaXN0PFN0cmluZz4gRklMRV9FWFRFTlNJT05TID0KKwkJQ29sbGVjdGlvbnMudW5tb2RpZmlhYmxlTGlzdChBcnJheXMuYXNMaXN0KEltYWdlV3JpdGVyTG9nZ2VyRWRpdFBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoIl9VSV9JbWFnZXdyaXRlckVkaXRvckZpbGVuYW1lRXh0ZW5zaW9ucyIpLnNwbGl0KCJcXHMqLFxccyoiKSkpOworCisJLyoqCisJICogQSBmb3JtYXR0ZWQgbGlzdCBvZiBzdXBwb3J0ZWQgZmlsZSBleHRlbnNpb25zLCBzdWl0YWJsZSBmb3IgZGlzcGxheS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBGT1JNQVRURURfRklMRV9FWFRFTlNJT05TID0KKwkJSW1hZ2VXcml0ZXJMb2dnZXJFZGl0UGx1Z2luLklOU1RBTkNFLmdldFN0cmluZygiX1VJX0ltYWdld3JpdGVyRWRpdG9yRmlsZW5hbWVFeHRlbnNpb25zIikucmVwbGFjZUFsbCgiXFxzKixcXHMqIiwgIiwgIik7CisKKwkvKioKKwkgKiBUaGlzIGNhY2hlcyBhbiBpbnN0YW5jZSBvZiB0aGUgbW9kZWwgcGFja2FnZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgSW1hZ2V3cml0ZXJQYWNrYWdlIGltYWdld3JpdGVyUGFja2FnZSA9IEltYWdld3JpdGVyUGFja2FnZS5lSU5TVEFOQ0U7CisKKwkvKioKKwkgKiBUaGlzIGNhY2hlcyBhbiBpbnN0YW5jZSBvZiB0aGUgbW9kZWwgZmFjdG9yeS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgSW1hZ2V3cml0ZXJGYWN0b3J5IGltYWdld3JpdGVyRmFjdG9yeSA9IGltYWdld3JpdGVyUGFja2FnZS5nZXRJbWFnZXdyaXRlckZhY3RvcnkoKTsKKworCS8qKgorCSAqIFRoaXMgaXMgdGhlIGluaXRpYWwgb2JqZWN0IGNyZWF0aW9uIHBhZ2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIEltYWdld3JpdGVyTW9kZWxXaXphcmRJbml0aWFsT2JqZWN0Q3JlYXRpb25QYWdlIGluaXRpYWxPYmplY3RDcmVhdGlvblBhZ2U7CisKKwkvKioKKwkgKiBSZW1lbWJlciB0aGUgc2VsZWN0aW9uIGR1cmluZyBpbml0aWFsaXphdGlvbiBmb3IgcG9wdWxhdGluZyB0aGUgZGVmYXVsdCBjb250YWluZXIuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIElTdHJ1Y3R1cmVkU2VsZWN0aW9uIHNlbGVjdGlvbjsKKworCS8qKgorCSAqIFJlbWVtYmVyIHRoZSB3b3JrYmVuY2ggZHVyaW5nIGluaXRpYWxpemF0aW9uLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBJV29ya2JlbmNoIHdvcmtiZW5jaDsKKworCS8qKgorCSAqIENhY2hlcyB0aGUgbmFtZXMgb2YgdGhlIHR5cGVzIHRoYXQgY2FuIGJlIGNyZWF0ZWQgYXMgdGhlIHJvb3Qgb2JqZWN0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBMaXN0PFN0cmluZz4gaW5pdGlhbE9iamVjdE5hbWVzOworCisJLyoqCisJICogVGhpcyBqdXN0IHJlY29yZHMgdGhlIGluZm9ybWF0aW9uLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIGluaXQoSVdvcmtiZW5jaCB3b3JrYmVuY2gsIElTdHJ1Y3R1cmVkU2VsZWN0aW9uIHNlbGVjdGlvbikgeworCQl0aGlzLndvcmtiZW5jaCA9IHdvcmtiZW5jaDsKKwkJdGhpcy5zZWxlY3Rpb24gPSBzZWxlY3Rpb247CisJCXNldFdpbmRvd1RpdGxlKEltYWdlV3JpdGVyTG9nZ2VyRWRpdFBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoIl9VSV9XaXphcmRfbGFiZWwiKSk7CisJCXNldERlZmF1bHRQYWdlSW1hZ2VEZXNjcmlwdG9yKEV4dGVuZGVkSW1hZ2VSZWdpc3RyeS5JTlNUQU5DRS5nZXRJbWFnZURlc2NyaXB0b3IoSW1hZ2VXcml0ZXJMb2dnZXJFZGl0UGx1Z2luLklOU1RBTkNFLmdldEltYWdlKCJmdWxsL3dpemJhbi9OZXdJbWFnZXdyaXRlciIpKSk7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgbmFtZXMgb2YgdGhlIHR5cGVzIHRoYXQgY2FuIGJlIGNyZWF0ZWQgYXMgdGhlIHJvb3Qgb2JqZWN0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBDb2xsZWN0aW9uPFN0cmluZz4gZ2V0SW5pdGlhbE9iamVjdE5hbWVzKCkgeworCQlpZiAoaW5pdGlhbE9iamVjdE5hbWVzID09IG51bGwpIHsKKwkJCWluaXRpYWxPYmplY3ROYW1lcyA9IG5ldyBBcnJheUxpc3Q8U3RyaW5nPigpOworCQkJZm9yIChFQ2xhc3NpZmllciBlQ2xhc3NpZmllciA6IGltYWdld3JpdGVyUGFja2FnZS5nZXRFQ2xhc3NpZmllcnMoKSkgeworCQkJCWlmIChlQ2xhc3NpZmllciBpbnN0YW5jZW9mIEVDbGFzcykgeworCQkJCQlFQ2xhc3MgZUNsYXNzID0gKEVDbGFzcyllQ2xhc3NpZmllcjsKKwkJCQkJaWYgKCFlQ2xhc3MuaXNBYnN0cmFjdCgpKSB7CisJCQkJCQlpbml0aWFsT2JqZWN0TmFtZXMuYWRkKGVDbGFzcy5nZXROYW1lKCkpOworCQkJCQl9CisJCQkJfQorCQkJfQorCQkJQ29sbGVjdGlvbnMuc29ydChpbml0aWFsT2JqZWN0TmFtZXMsIGphdmEudGV4dC5Db2xsYXRvci5nZXRJbnN0YW5jZSgpKTsKKwkJfQorCQlyZXR1cm4gaW5pdGlhbE9iamVjdE5hbWVzOworCX0KKworCS8qKgorCSAqIENyZWF0ZSBhIG5ldyBtb2RlbC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgRU9iamVjdCBjcmVhdGVJbml0aWFsTW9kZWwoKSB7CisJCUVDbGFzcyBlQ2xhc3MgPSAoRUNsYXNzKWltYWdld3JpdGVyUGFja2FnZS5nZXRFQ2xhc3NpZmllcihpbml0aWFsT2JqZWN0Q3JlYXRpb25QYWdlLmdldEluaXRpYWxPYmplY3ROYW1lKCkpOworCQlFT2JqZWN0IHJvb3RPYmplY3QgPSBpbWFnZXdyaXRlckZhY3RvcnkuY3JlYXRlKGVDbGFzcyk7CisJCXJldHVybiByb290T2JqZWN0OworCX0KKworCS8qKgorCSAqIERvIHRoZSB3b3JrIGFmdGVyIGV2ZXJ5dGhpbmcgaXMgc3BlY2lmaWVkLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBib29sZWFuIHBlcmZvcm1GaW5pc2goKSB7CisJCXRyeSB7CisJCQkvLyBHZXQgdGhlIFVSSSBvZiB0aGUgbW9kZWwgZmlsZS4KKwkJCS8vCisJCQlmaW5hbCBVUkkgZmlsZVVSSSA9IGdldE1vZGVsVVJJKCk7CisJCQlpZiAobmV3IEZpbGUoZmlsZVVSSS50b0ZpbGVTdHJpbmcoKSkuZXhpc3RzKCkpIHsKKwkJCQlpZiAoIU1lc3NhZ2VEaWFsb2cub3BlblF1ZXN0aW9uCisJCQkJCQkoZ2V0U2hlbGwoKSwKKwkJCQkJCSBJbWFnZVdyaXRlckxvZ2dlckVkaXRQbHVnaW4uSU5TVEFOQ0UuZ2V0U3RyaW5nKCJfVUlfUXVlc3Rpb25fdGl0bGUiKSwKKwkJCQkJCSBJbWFnZVdyaXRlckxvZ2dlckVkaXRQbHVnaW4uSU5TVEFOQ0UuZ2V0U3RyaW5nKCJfV0FSTl9GaWxlQ29uZmxpY3QiLCBuZXcgU3RyaW5nIFtdeyBmaWxlVVJJLnRvRmlsZVN0cmluZygpIH0pKSkgeworCQkJCQlpbml0aWFsT2JqZWN0Q3JlYXRpb25QYWdlLnNlbGVjdEZpbGVGaWVsZCgpOworCQkJCQlyZXR1cm4gZmFsc2U7CisJCQkJfQorCQkJfQorCQkJCisJCQkvLyBEbyB0aGUgd29yayB3aXRoaW4gYW4gb3BlcmF0aW9uLgorCQkJLy8KKwkJCUlSdW5uYWJsZVdpdGhQcm9ncmVzcyBvcGVyYXRpb24gPSBuZXcgSVJ1bm5hYmxlV2l0aFByb2dyZXNzKCkgeworCQkJCXB1YmxpYyB2b2lkIHJ1bihJUHJvZ3Jlc3NNb25pdG9yIHByb2dyZXNzTW9uaXRvcikgeworCQkJCQkJdHJ5IHsKKwkJCQkJCQkvLyBDcmVhdGUgYSByZXNvdXJjZSBzZXQKKwkJCQkJCQkvLworCQkJCQkJCVJlc291cmNlU2V0IHJlc291cmNlU2V0ID0gbmV3IFJlc291cmNlU2V0SW1wbCgpOworCisJCQkJCQkJLy8gQ3JlYXRlIGEgcmVzb3VyY2UgZm9yIHRoaXMgZmlsZS4KKwkJCQkJCQkvLworCQkJCQkJCVJlc291cmNlIHJlc291cmNlID0gcmVzb3VyY2VTZXQuY3JlYXRlUmVzb3VyY2UoZmlsZVVSSSk7CisKKwkJCQkJCQkvLyBBZGQgdGhlIGluaXRpYWwgbW9kZWwgb2JqZWN0IHRvIHRoZSBjb250ZW50cy4KKwkJCQkJCQkvLworCQkJCQkJCUVPYmplY3Qgcm9vdE9iamVjdCA9IGNyZWF0ZUluaXRpYWxNb2RlbCgpOworCQkJCQkJCWlmIChyb290T2JqZWN0ICE9IG51bGwpIHsKKwkJCQkJCQkJcmVzb3VyY2UuZ2V0Q29udGVudHMoKS5hZGQocm9vdE9iamVjdCk7CisJCQkJCQkJfQorCisJCQkJCQkJLy8gU2F2ZSB0aGUgY29udGVudHMgb2YgdGhlIHJlc291cmNlIHRvIHRoZSBmaWxlIHN5c3RlbS4KKwkJCQkJCQkvLworCQkJCQkJCU1hcDxPYmplY3QsIE9iamVjdD4gb3B0aW9ucyA9IG5ldyBIYXNoTWFwPE9iamVjdCwgT2JqZWN0PigpOworCQkJCQkJCW9wdGlvbnMucHV0KFhNTFJlc291cmNlLk9QVElPTl9FTkNPRElORywgaW5pdGlhbE9iamVjdENyZWF0aW9uUGFnZS5nZXRFbmNvZGluZygpKTsKKwkJCQkJCQlyZXNvdXJjZS5zYXZlKG9wdGlvbnMpOworCQkJCQkJfQorCQkJCQkJY2F0Y2ggKEV4Y2VwdGlvbiBleGNlcHRpb24pIHsKKwkJCQkJCQlJbWFnZVdyaXRlckxvZ2dlckVkaXRQbHVnaW4uSU5TVEFOQ0UubG9nKGV4Y2VwdGlvbik7CisJCQkJCQl9CisJCQkJCQlmaW5hbGx5IHsKKwkJCQkJCQlwcm9ncmVzc01vbml0b3IuZG9uZSgpOworCQkJCQkJfQorCQkJCQl9CisJCQkJfTsKKworCQkJZ2V0Q29udGFpbmVyKCkucnVuKGZhbHNlLCBmYWxzZSwgb3BlcmF0aW9uKTsKKworCQkJcmV0dXJuIEltYWdlV3JpdGVyTG9nZ2VyRWRpdG9yQWR2aXNvci5vcGVuRWRpdG9yKHdvcmtiZW5jaCwgZmlsZVVSSSk7CQkJCisJCX0KKwkJY2F0Y2ggKEV4Y2VwdGlvbiBleGNlcHRpb24pIHsKKwkJCUltYWdlV3JpdGVyTG9nZ2VyRWRpdFBsdWdpbi5JTlNUQU5DRS5sb2coZXhjZXB0aW9uKTsKKwkJCXJldHVybiBmYWxzZTsKKwkJfQorCX0KKworCS8qKgorCSAqIFRoaXMgaXMgdGhlIHBhZ2Ugd2hlcmUgdGhlIHR5cGUgb2Ygb2JqZWN0IHRvIGNyZWF0ZSBpcyBzZWxlY3RlZC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgY2xhc3MgSW1hZ2V3cml0ZXJNb2RlbFdpemFyZEluaXRpYWxPYmplY3RDcmVhdGlvblBhZ2UgZXh0ZW5kcyBXaXphcmRQYWdlIHsKKwkJLyoqCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlwcm90ZWN0ZWQgVGV4dCBmaWxlRmllbGQ7CisKKwkJLyoqCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlwcm90ZWN0ZWQgQ29tYm8gaW5pdGlhbE9iamVjdEZpZWxkOworCisJCS8qKgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKi8KKwkJcHJvdGVjdGVkIExpc3Q8U3RyaW5nPiBlbmNvZGluZ3M7CisKKwkJLyoqCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlwcm90ZWN0ZWQgQ29tYm8gZW5jb2RpbmdGaWVsZDsKKworCQkvKioKKwkJICogUGFzcyBpbiB0aGUgc2VsZWN0aW9uLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJcHVibGljIEltYWdld3JpdGVyTW9kZWxXaXphcmRJbml0aWFsT2JqZWN0Q3JlYXRpb25QYWdlKFN0cmluZyBwYWdlSWQpIHsKKwkJCXN1cGVyKHBhZ2VJZCk7CisJCX0KKworCQkvKioKKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCXB1YmxpYyB2b2lkIGNyZWF0ZUNvbnRyb2woQ29tcG9zaXRlIHBhcmVudCkgeworCQkJQ29tcG9zaXRlIGNvbXBvc2l0ZSA9IG5ldyBDb21wb3NpdGUocGFyZW50LCBTV1QuTk9ORSk7IHsKKwkJCQlHcmlkTGF5b3V0IGxheW91dCA9IG5ldyBHcmlkTGF5b3V0KCk7CisJCQkJbGF5b3V0Lm51bUNvbHVtbnMgPSAxOworCQkJCWxheW91dC52ZXJ0aWNhbFNwYWNpbmcgPSAxMjsKKwkJCQljb21wb3NpdGUuc2V0TGF5b3V0KGxheW91dCk7CisKKwkJCQlHcmlkRGF0YSBkYXRhID0gbmV3IEdyaWREYXRhKCk7CisJCQkJZGF0YS52ZXJ0aWNhbEFsaWdubWVudCA9IEdyaWREYXRhLkZJTEw7CisJCQkJZGF0YS5ncmFiRXhjZXNzVmVydGljYWxTcGFjZSA9IHRydWU7CisJCQkJZGF0YS5ob3Jpem9udGFsQWxpZ25tZW50ID0gR3JpZERhdGEuRklMTDsKKwkJCQljb21wb3NpdGUuc2V0TGF5b3V0RGF0YShkYXRhKTsKKwkJCX0KKwkJCQorCQkJTGFiZWwgcmVzb3VyY2VVUklMYWJlbCA9IG5ldyBMYWJlbChjb21wb3NpdGUsIFNXVC5MRUZUKTsKKwkJCXsKKwkJCQlyZXNvdXJjZVVSSUxhYmVsLnNldFRleHQoSW1hZ2VXcml0ZXJMb2dnZXJFZGl0UGx1Z2luLklOU1RBTkNFLmdldFN0cmluZygiX1VJX0ZpbGVfbGFiZWwiKSk7CisKKwkJCQlHcmlkRGF0YSBkYXRhID0gbmV3IEdyaWREYXRhKCk7CisJCQkJZGF0YS5ob3Jpem9udGFsQWxpZ25tZW50ID0gR3JpZERhdGEuRklMTDsKKwkJCQlyZXNvdXJjZVVSSUxhYmVsLnNldExheW91dERhdGEoZGF0YSk7CisJCQl9CisKKwkJCUNvbXBvc2l0ZSBmaWxlQ29tcG9zaXRlID0gbmV3IENvbXBvc2l0ZShjb21wb3NpdGUsIFNXVC5OT05FKTsKKwkJCXsKKwkJCQlHcmlkRGF0YSBkYXRhID0gbmV3IEdyaWREYXRhKCk7CisJCQkJZGF0YS5ob3Jpem9udGFsQWxpZ25tZW50ID0gR3JpZERhdGEuRU5EOworCQkJCWZpbGVDb21wb3NpdGUuc2V0TGF5b3V0RGF0YShkYXRhKTsKKworCQkJCUdyaWRMYXlvdXQgbGF5b3V0ID0gbmV3IEdyaWRMYXlvdXQoKTsKKwkJCQlkYXRhLmhvcml6b250YWxBbGlnbm1lbnQgPSBHcmlkRGF0YS5GSUxMOworCQkJCWxheW91dC5tYXJnaW5IZWlnaHQgPSAwOworCQkJCWxheW91dC5tYXJnaW5XaWR0aCA9IDA7CisJCQkJbGF5b3V0Lm51bUNvbHVtbnMgPSAyOworCQkJCWZpbGVDb21wb3NpdGUuc2V0TGF5b3V0KGxheW91dCk7CisJCQl9CisKKwkJCWZpbGVGaWVsZCA9IG5ldyBUZXh0KGZpbGVDb21wb3NpdGUsIFNXVC5CT1JERVIpOworCQkJeworCQkJCUdyaWREYXRhIGRhdGEgPSBuZXcgR3JpZERhdGEoKTsKKwkJCQlkYXRhLmhvcml6b250YWxBbGlnbm1lbnQgPSBHcmlkRGF0YS5GSUxMOworCQkJCWRhdGEuZ3JhYkV4Y2Vzc0hvcml6b250YWxTcGFjZSA9IHRydWU7CisJCQkJZGF0YS5ob3Jpem9udGFsU3BhbiA9IDE7CisJCQkJZmlsZUZpZWxkLnNldExheW91dERhdGEoZGF0YSk7CisJCQl9CisKKwkJCWZpbGVGaWVsZC5hZGRNb2RpZnlMaXN0ZW5lcih2YWxpZGF0b3IpOworCisJCQlCdXR0b24gcmVzb3VyY2VVUklCcm93c2VGaWxlU3lzdGVtQnV0dG9uID0gbmV3IEJ1dHRvbihmaWxlQ29tcG9zaXRlLCBTV1QuUFVTSCk7CisJCQlyZXNvdXJjZVVSSUJyb3dzZUZpbGVTeXN0ZW1CdXR0b24uc2V0VGV4dChJbWFnZVdyaXRlckxvZ2dlckVkaXRQbHVnaW4uSU5TVEFOQ0UuZ2V0U3RyaW5nKCJfVUlfQnJvd3NlX2xhYmVsIikpOworCisJCQlyZXNvdXJjZVVSSUJyb3dzZUZpbGVTeXN0ZW1CdXR0b24uYWRkU2VsZWN0aW9uTGlzdGVuZXIKKwkJCQkobmV3IFNlbGVjdGlvbkFkYXB0ZXIoKSB7CisJCQkJCSBAT3ZlcnJpZGUKKwkJCQkJIHB1YmxpYyB2b2lkIHdpZGdldFNlbGVjdGVkKFNlbGVjdGlvbkV2ZW50IGV2ZW50KSB7CisJCQkJCQkgU3RyaW5nW10gZmlsdGVycyA9IEltYWdld3JpdGVyRWRpdG9yLkZJTEVfRVhURU5TSU9OX0ZJTFRFUlMudG9BcnJheShuZXcgU3RyaW5nW0ltYWdld3JpdGVyRWRpdG9yLkZJTEVfRVhURU5TSU9OX0ZJTFRFUlMuc2l6ZSgpXSk7CisJCQkJCQkgU3RyaW5nW10gZmlsZXMgPSBJbWFnZVdyaXRlckxvZ2dlckVkaXRvckFkdmlzb3Iub3BlbkZpbGVQYXRoRGlhbG9nKGdldFNoZWxsKCksIFNXVC5TQVZFLCBmaWx0ZXJzKTsKKwkJCQkJCSBpZiAoZmlsZXMubGVuZ3RoID4gMCkgeworCQkJCQkJCSBmaWxlRmllbGQuc2V0VGV4dChmaWxlc1swXSk7CisJCQkJCQkgfQorCQkJCQkgfQorCQkJCSB9KTsKKwkJCUxhYmVsIGNvbnRhaW5lckxhYmVsID0gbmV3IExhYmVsKGNvbXBvc2l0ZSwgU1dULkxFRlQpOworCQkJeworCQkJCWNvbnRhaW5lckxhYmVsLnNldFRleHQoSW1hZ2VXcml0ZXJMb2dnZXJFZGl0UGx1Z2luLklOU1RBTkNFLmdldFN0cmluZygiX1VJX01vZGVsT2JqZWN0IikpOworCisJCQkJR3JpZERhdGEgZGF0YSA9IG5ldyBHcmlkRGF0YSgpOworCQkJCWRhdGEuaG9yaXpvbnRhbEFsaWdubWVudCA9IEdyaWREYXRhLkZJTEw7CisJCQkJY29udGFpbmVyTGFiZWwuc2V0TGF5b3V0RGF0YShkYXRhKTsKKwkJCX0KKworCQkJaW5pdGlhbE9iamVjdEZpZWxkID0gbmV3IENvbWJvKGNvbXBvc2l0ZSwgU1dULkJPUkRFUik7CisJCQl7CisJCQkJR3JpZERhdGEgZGF0YSA9IG5ldyBHcmlkRGF0YSgpOworCQkJCWRhdGEuaG9yaXpvbnRhbEFsaWdubWVudCA9IEdyaWREYXRhLkZJTEw7CisJCQkJZGF0YS5ncmFiRXhjZXNzSG9yaXpvbnRhbFNwYWNlID0gdHJ1ZTsKKwkJCQlpbml0aWFsT2JqZWN0RmllbGQuc2V0TGF5b3V0RGF0YShkYXRhKTsKKwkJCX0KKworCQkJZm9yIChTdHJpbmcgb2JqZWN0TmFtZSA6IGdldEluaXRpYWxPYmplY3ROYW1lcygpKSB7CisJCQkJaW5pdGlhbE9iamVjdEZpZWxkLmFkZChnZXRMYWJlbChvYmplY3ROYW1lKSk7CisJCQl9CisKKwkJCWlmIChpbml0aWFsT2JqZWN0RmllbGQuZ2V0SXRlbUNvdW50KCkgPT0gMSkgeworCQkJCWluaXRpYWxPYmplY3RGaWVsZC5zZWxlY3QoMCk7CisJCQl9CisJCQlpbml0aWFsT2JqZWN0RmllbGQuYWRkTW9kaWZ5TGlzdGVuZXIodmFsaWRhdG9yKTsKKworCQkJTGFiZWwgZW5jb2RpbmdMYWJlbCA9IG5ldyBMYWJlbChjb21wb3NpdGUsIFNXVC5MRUZUKTsKKwkJCXsKKwkJCQllbmNvZGluZ0xhYmVsLnNldFRleHQoSW1hZ2VXcml0ZXJMb2dnZXJFZGl0UGx1Z2luLklOU1RBTkNFLmdldFN0cmluZygiX1VJX1hNTEVuY29kaW5nIikpOworCisJCQkJR3JpZERhdGEgZGF0YSA9IG5ldyBHcmlkRGF0YSgpOworCQkJCWRhdGEuaG9yaXpvbnRhbEFsaWdubWVudCA9IEdyaWREYXRhLkZJTEw7CisJCQkJZW5jb2RpbmdMYWJlbC5zZXRMYXlvdXREYXRhKGRhdGEpOworCQkJfQorCQkJZW5jb2RpbmdGaWVsZCA9IG5ldyBDb21ibyhjb21wb3NpdGUsIFNXVC5CT1JERVIpOworCQkJeworCQkJCUdyaWREYXRhIGRhdGEgPSBuZXcgR3JpZERhdGEoKTsKKwkJCQlkYXRhLmhvcml6b250YWxBbGlnbm1lbnQgPSBHcmlkRGF0YS5GSUxMOworCQkJCWRhdGEuZ3JhYkV4Y2Vzc0hvcml6b250YWxTcGFjZSA9IHRydWU7CisJCQkJZW5jb2RpbmdGaWVsZC5zZXRMYXlvdXREYXRhKGRhdGEpOworCQkJfQorCisJCQlmb3IgKFN0cmluZyBlbmNvZGluZyA6IGdldEVuY29kaW5ncygpKSB7CisJCQkJZW5jb2RpbmdGaWVsZC5hZGQoZW5jb2RpbmcpOworCQkJfQorCisJCQllbmNvZGluZ0ZpZWxkLnNlbGVjdCgwKTsKKwkJCWVuY29kaW5nRmllbGQuYWRkTW9kaWZ5TGlzdGVuZXIodmFsaWRhdG9yKTsKKworCQkJc2V0UGFnZUNvbXBsZXRlKHZhbGlkYXRlUGFnZSgpKTsKKwkJCXNldENvbnRyb2woY29tcG9zaXRlKTsKKwkJfQorCisJCS8qKgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJcHJvdGVjdGVkIE1vZGlmeUxpc3RlbmVyIHZhbGlkYXRvciA9CisJCQluZXcgTW9kaWZ5TGlzdGVuZXIoKSB7CisJCQkJcHVibGljIHZvaWQgbW9kaWZ5VGV4dChNb2RpZnlFdmVudCBlKSB7CisJCQkJCXNldFBhZ2VDb21wbGV0ZSh2YWxpZGF0ZVBhZ2UoKSk7CisJCQkJfQorCQkJfTsKKworCQkvKioKKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCXByb3RlY3RlZCBib29sZWFuIHZhbGlkYXRlUGFnZSgpIHsKKwkJCVVSSSBmaWxlVVJJID0gZ2V0RmlsZVVSSSgpOworCQkJaWYgKGZpbGVVUkkgPT0gbnVsbCB8fCBmaWxlVVJJLmlzRW1wdHkoKSkgeworCQkJCXNldEVycm9yTWVzc2FnZShudWxsKTsKKwkJCQlyZXR1cm4gZmFsc2U7CisJCQl9CisKKwkJCVN0cmluZyBleHRlbnNpb24gPSBmaWxlVVJJLmZpbGVFeHRlbnNpb24oKTsKKwkJCWlmIChleHRlbnNpb24gPT0gbnVsbCB8fCAhRklMRV9FWFRFTlNJT05TLmNvbnRhaW5zKGV4dGVuc2lvbikpIHsKKwkJCQlTdHJpbmcga2V5ID0gRklMRV9FWFRFTlNJT05TLnNpemUoKSA+IDEgPyAiX1dBUk5fRmlsZW5hbWVFeHRlbnNpb25zIiA6ICJfV0FSTl9GaWxlbmFtZUV4dGVuc2lvbiI7CisJCQkJc2V0RXJyb3JNZXNzYWdlKEltYWdlV3JpdGVyTG9nZ2VyRWRpdFBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoa2V5LCBuZXcgT2JqZWN0IFtdIHsgRk9STUFUVEVEX0ZJTEVfRVhURU5TSU9OUyB9KSk7CisJCQkJcmV0dXJuIGZhbHNlOworCQkJfQorCisJCQlzZXRFcnJvck1lc3NhZ2UobnVsbCk7CisJCQlyZXR1cm4gZ2V0SW5pdGlhbE9iamVjdE5hbWUoKSAhPSBudWxsICYmIGdldEVuY29kaW5ncygpLmNvbnRhaW5zKGVuY29kaW5nRmllbGQuZ2V0VGV4dCgpKTsKKwkJfQorCisJCS8qKgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJQE92ZXJyaWRlCisJCXB1YmxpYyB2b2lkIHNldFZpc2libGUoYm9vbGVhbiB2aXNpYmxlKSB7CisJCQlzdXBlci5zZXRWaXNpYmxlKHZpc2libGUpOworCQkJaWYgKHZpc2libGUpIHsKKwkJCQlpbml0aWFsT2JqZWN0RmllbGQuY2xlYXJTZWxlY3Rpb24oKTsKKwkJCQllbmNvZGluZ0ZpZWxkLmNsZWFyU2VsZWN0aW9uKCk7CisJCQkJZmlsZUZpZWxkLnNldEZvY3VzKCk7CisJCQl9CisJCX0KKworCQkvKioKKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCXB1YmxpYyBTdHJpbmcgZ2V0SW5pdGlhbE9iamVjdE5hbWUoKSB7CisJCQlTdHJpbmcgbGFiZWwgPSBpbml0aWFsT2JqZWN0RmllbGQuZ2V0VGV4dCgpOworCisJCQlmb3IgKFN0cmluZyBuYW1lIDogZ2V0SW5pdGlhbE9iamVjdE5hbWVzKCkpIHsKKwkJCQlpZiAoZ2V0TGFiZWwobmFtZSkuZXF1YWxzKGxhYmVsKSkgeworCQkJCQlyZXR1cm4gbmFtZTsKKwkJCQl9CisJCQl9CisJCQlyZXR1cm4gbnVsbDsKKwkJfQorCisJCS8qKgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJcHVibGljIFN0cmluZyBnZXRFbmNvZGluZygpIHsKKwkJCXJldHVybiBlbmNvZGluZ0ZpZWxkLmdldFRleHQoKTsKKwkJfQorCisJCS8qKgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJcHVibGljIFVSSSBnZXRGaWxlVVJJKCkgeworCQkJdHJ5IHsKKwkJCQlyZXR1cm4gVVJJLmNyZWF0ZUZpbGVVUkkoZmlsZUZpZWxkLmdldFRleHQoKSk7CisJCQl9CisJCQljYXRjaCAoRXhjZXB0aW9uIGV4Y2VwdGlvbikgeworCQkJCS8vIElnbm9yZQorCQkJfQorCQkJcmV0dXJuIG51bGw7CisJCX0KKworCQkvKioKKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCXB1YmxpYyB2b2lkIHNlbGVjdEZpbGVGaWVsZCgpIHsKKwkJCQlpbml0aWFsT2JqZWN0RmllbGQuY2xlYXJTZWxlY3Rpb24oKTsKKwkJCQllbmNvZGluZ0ZpZWxkLmNsZWFyU2VsZWN0aW9uKCk7CisJCQkJZmlsZUZpZWxkLnNlbGVjdEFsbCgpOworCQkJCWZpbGVGaWVsZC5zZXRGb2N1cygpOworCQl9CQkKKworCQkvKioKKwkJICogUmV0dXJucyB0aGUgbGFiZWwgZm9yIHRoZSBzcGVjaWZpZWQgdHlwZSBuYW1lLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJcHJvdGVjdGVkIFN0cmluZyBnZXRMYWJlbChTdHJpbmcgdHlwZU5hbWUpIHsKKwkJCXRyeSB7CisJCQkJcmV0dXJuIEltYWdlV3JpdGVyTG9nZ2VyRWRpdFBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoIl9VSV8iICsgdHlwZU5hbWUgKyAiX3R5cGUiKTsKKwkJCX0KKwkJCWNhdGNoKE1pc3NpbmdSZXNvdXJjZUV4Y2VwdGlvbiBtcmUpIHsKKwkJCQlJbWFnZVdyaXRlckxvZ2dlckVkaXRQbHVnaW4uSU5TVEFOQ0UubG9nKG1yZSk7CisJCQl9CisJCQlyZXR1cm4gdHlwZU5hbWU7CisJCX0KKworCQkvKioKKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCXByb3RlY3RlZCBDb2xsZWN0aW9uPFN0cmluZz4gZ2V0RW5jb2RpbmdzKCkgeworCQkJaWYgKGVuY29kaW5ncyA9PSBudWxsKSB7CisJCQkJZW5jb2RpbmdzID0gbmV3IEFycmF5TGlzdDxTdHJpbmc+KCk7CisJCQkJZm9yIChTdHJpbmdUb2tlbml6ZXIgc3RyaW5nVG9rZW5pemVyID0gbmV3IFN0cmluZ1Rva2VuaXplcihJbWFnZVdyaXRlckxvZ2dlckVkaXRQbHVnaW4uSU5TVEFOQ0UuZ2V0U3RyaW5nKCJfVUlfWE1MRW5jb2RpbmdDaG9pY2VzIikpOyBzdHJpbmdUb2tlbml6ZXIuaGFzTW9yZVRva2VucygpOyApIHsKKwkJCQkJZW5jb2RpbmdzLmFkZChzdHJpbmdUb2tlbml6ZXIubmV4dFRva2VuKCkpOworCQkJCX0KKwkJCX0KKwkJCXJldHVybiBlbmNvZGluZ3M7CisJCX0KKwl9CisKKwkvKioKKwkgKiBUaGUgZnJhbWV3b3JrIGNhbGxzIHRoaXMgdG8gY3JlYXRlIHRoZSBjb250ZW50cyBvZiB0aGUgd2l6YXJkLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCQlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBhZGRQYWdlcygpIHsKKwkJaW5pdGlhbE9iamVjdENyZWF0aW9uUGFnZSA9IG5ldyBJbWFnZXdyaXRlck1vZGVsV2l6YXJkSW5pdGlhbE9iamVjdENyZWF0aW9uUGFnZSgiV2hhdGV2ZXIyIik7CisJCWluaXRpYWxPYmplY3RDcmVhdGlvblBhZ2Uuc2V0VGl0bGUoSW1hZ2VXcml0ZXJMb2dnZXJFZGl0UGx1Z2luLklOU1RBTkNFLmdldFN0cmluZygiX1VJX0ltYWdld3JpdGVyTW9kZWxXaXphcmRfbGFiZWwiKSk7CisJCWluaXRpYWxPYmplY3RDcmVhdGlvblBhZ2Uuc2V0RGVzY3JpcHRpb24oSW1hZ2VXcml0ZXJMb2dnZXJFZGl0UGx1Z2luLklOU1RBTkNFLmdldFN0cmluZygiX1VJX1dpemFyZF9pbml0aWFsX29iamVjdF9kZXNjcmlwdGlvbiIpKTsKKwkJYWRkUGFnZShpbml0aWFsT2JqZWN0Q3JlYXRpb25QYWdlKTsKKwl9CisKKwkvKioKKwkgKiBHZXQgdGhlIFVSSSBmcm9tIHRoZSBwYWdlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBVUkkgZ2V0TW9kZWxVUkkoKSB7CisJCXJldHVybiBpbml0aWFsT2JqZWN0Q3JlYXRpb25QYWdlLmdldEZpbGVVUkkoKTsKKwl9CisKK30KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzLmltYWdld3JpdGVyL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2xvZ2dlcnMvaW1hZ2V3cml0ZXIvcHJvdmlkZXIvRXF1aXJlY3Rhbmd1bGFyTWFwTG9nZ2VySXRlbVByb3ZpZGVyLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy5pbWFnZXdyaXRlci9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9sb2dnZXJzL2ltYWdld3JpdGVyL3Byb3ZpZGVyL0VxdWlyZWN0YW5ndWxhck1hcExvZ2dlckl0ZW1Qcm92aWRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMzNzkwYmQKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy5pbWFnZXdyaXRlci9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9sb2dnZXJzL2ltYWdld3JpdGVyL3Byb3ZpZGVyL0VxdWlyZWN0YW5ndWxhck1hcExvZ2dlckl0ZW1Qcm92aWRlci5qYXZhCkBAIC0wLDAgKzEsMTE3IEBACisvKioKKyAqIDxjb3B5cmlnaHQ+CisgKiA8L2NvcHlyaWdodD4KKyAqCisgKiAkSWQkCisgKi8KK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzLmltYWdld3JpdGVyLnByb3ZpZGVyOworCisKK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LkFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbjsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5VUkk7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JRWRpdGluZ0RvbWFpbkl0ZW1Qcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbUxhYmVsUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1Qcm9wZXJ0eVNvdXJjZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JU3RydWN0dXJlZEl0ZW1Db250ZW50UHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVRyZWVJdGVtQ29udGVudFByb3ZpZGVyOworCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzLmltYWdld3JpdGVyLkVxdWlyZWN0YW5ndWxhck1hcExvZ2dlcjsKKworLyoqCisgKiBUaGlzIGlzIHRoZSBpdGVtIHByb3ZpZGVyIGFkYXB0ZXIgZm9yIGEge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy5pbWFnZXdyaXRlci5FcXVpcmVjdGFuZ3VsYXJNYXBMb2dnZXJ9IG9iamVjdC4KKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIEVxdWlyZWN0YW5ndWxhck1hcExvZ2dlckl0ZW1Qcm92aWRlcgorCWV4dGVuZHMgUHJvamVjdGVkTWFwSW1hZ2VMb2dnZXJJdGVtUHJvdmlkZXIKKwlpbXBsZW1lbnRzCisJCUlFZGl0aW5nRG9tYWluSXRlbVByb3ZpZGVyLAorCQlJU3RydWN0dXJlZEl0ZW1Db250ZW50UHJvdmlkZXIsCisJCUlUcmVlSXRlbUNvbnRlbnRQcm92aWRlciwKKwkJSUl0ZW1MYWJlbFByb3ZpZGVyLAorCQlJSXRlbVByb3BlcnR5U291cmNlIHsKKwkvKioKKwkgKiBUaGlzIGNvbnN0cnVjdHMgYW4gaW5zdGFuY2UgZnJvbSBhIGZhY3RvcnkgYW5kIGEgbm90aWZpZXIuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVxdWlyZWN0YW5ndWxhck1hcExvZ2dlckl0ZW1Qcm92aWRlcihBZGFwdGVyRmFjdG9yeSBhZGFwdGVyRmFjdG9yeSkgeworCQlzdXBlcihhZGFwdGVyRmFjdG9yeSk7CisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIHRoZSBwcm9wZXJ0eSBkZXNjcmlwdG9ycyBmb3IgdGhlIGFkYXB0ZWQgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIExpc3Q8SUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I+IGdldFByb3BlcnR5RGVzY3JpcHRvcnMoT2JqZWN0IG9iamVjdCkgeworCQlpZiAoaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMgPT0gbnVsbCkgeworCQkJc3VwZXIuZ2V0UHJvcGVydHlEZXNjcmlwdG9ycyhvYmplY3QpOworCisJCX0KKwkJcmV0dXJuIGl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzOworCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyBFcXVpcmVjdGFuZ3VsYXJNYXBMb2dnZXIuZ2lmLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBPYmplY3QgZ2V0SW1hZ2UoT2JqZWN0IG9iamVjdCkgeworCQlyZXR1cm4gb3ZlcmxheUltYWdlKG9iamVjdCwgZ2V0UmVzb3VyY2VMb2NhdG9yKCkuZ2V0SW1hZ2UoImZ1bGwvb2JqMTYvRXF1aXJlY3Rhbmd1bGFyTWFwTG9nZ2VyIikpOworCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyB0aGUgbGFiZWwgdGV4dCBmb3IgdGhlIGFkYXB0ZWQgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIFN0cmluZyBnZXRUZXh0KE9iamVjdCBvYmplY3QpIHsKKwkJVVJJIGxhYmVsVmFsdWUgPSAoKEVxdWlyZWN0YW5ndWxhck1hcExvZ2dlcilvYmplY3QpLmdldFVSSSgpOworCQlTdHJpbmcgbGFiZWwgPSBsYWJlbFZhbHVlID09IG51bGwgPyBudWxsIDogbGFiZWxWYWx1ZS50b1N0cmluZygpOworCQlyZXR1cm4gbGFiZWwgPT0gbnVsbCB8fCBsYWJlbC5sZW5ndGgoKSA9PSAwID8KKwkJCWdldFN0cmluZygiX1VJX0VxdWlyZWN0YW5ndWxhck1hcExvZ2dlcl90eXBlIikgOgorCQkJZ2V0U3RyaW5nKCJfVUlfRXF1aXJlY3Rhbmd1bGFyTWFwTG9nZ2VyX3R5cGUiKSArICIgIiArIGxhYmVsOworCX0KKworCS8qKgorCSAqIFRoaXMgaGFuZGxlcyBtb2RlbCBub3RpZmljYXRpb25zIGJ5IGNhbGxpbmcge0BsaW5rICN1cGRhdGVDaGlsZHJlbn0gdG8gdXBkYXRlIGFueSBjYWNoZWQKKwkgKiBjaGlsZHJlbiBhbmQgYnkgY3JlYXRpbmcgYSB2aWV3ZXIgbm90aWZpY2F0aW9uLCB3aGljaCBpdCBwYXNzZXMgdG8ge0BsaW5rICNmaXJlTm90aWZ5Q2hhbmdlZH0uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgbm90aWZ5Q2hhbmdlZChOb3RpZmljYXRpb24gbm90aWZpY2F0aW9uKSB7CisJCXVwZGF0ZUNoaWxkcmVuKG5vdGlmaWNhdGlvbik7CisJCXN1cGVyLm5vdGlmeUNoYW5nZWQobm90aWZpY2F0aW9uKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFkZHMge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lZGl0LmNvbW1hbmQuQ29tbWFuZFBhcmFtZXRlcn1zIGRlc2NyaWJpbmcgdGhlIGNoaWxkcmVuCisJICogdGhhdCBjYW4gYmUgY3JlYXRlZCB1bmRlciB0aGlzIG9iamVjdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgdm9pZCBjb2xsZWN0TmV3Q2hpbGREZXNjcmlwdG9ycyhDb2xsZWN0aW9uPE9iamVjdD4gbmV3Q2hpbGREZXNjcmlwdG9ycywgT2JqZWN0IG9iamVjdCkgeworCQlzdXBlci5jb2xsZWN0TmV3Q2hpbGREZXNjcmlwdG9ycyhuZXdDaGlsZERlc2NyaXB0b3JzLCBvYmplY3QpOworCX0KKworfQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMuaW1hZ2V3cml0ZXIvc3JjL29yZy9lY2xpcHNlL3N0ZW0vbG9nZ2Vycy9pbWFnZXdyaXRlci9wcm92aWRlci9JbWFnZVdyaXRlckxvZ2dlckVkaXRQbHVnaW4uamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzLmltYWdld3JpdGVyL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2xvZ2dlcnMvaW1hZ2V3cml0ZXIvcHJvdmlkZXIvSW1hZ2VXcml0ZXJMb2dnZXJFZGl0UGx1Z2luLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDE0NjQ5OQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzLmltYWdld3JpdGVyL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2xvZ2dlcnMvaW1hZ2V3cml0ZXIvcHJvdmlkZXIvSW1hZ2VXcml0ZXJMb2dnZXJFZGl0UGx1Z2luLmphdmEKQEAgLTAsMCArMSwxMDAgQEAKKy8qKgorICogPGNvcHlyaWdodD4KKyAqIDwvY29weXJpZ2h0PgorICoKKyAqICRJZCQKKyAqLworcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMuaW1hZ2V3cml0ZXIucHJvdmlkZXI7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLkVNRlBsdWdpbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnVpLkVjbGlwc2VVSVBsdWdpbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuUmVzb3VyY2VMb2NhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5wcm92aWRlci5FY29yZUVkaXRQbHVnaW47CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5wcm92aWRlci5Db3JlRWRpdFBsdWdpbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMucHJvdmlkZXIuU2ltdWxhdGlvbkxvZ2dlckVkaXRQbHVnaW47CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS51aS53aXphcmRzLkltYWdlV3JpdGVyTG9nZ2VyUHJvcGVydHlTdHJpbmdQcm92aWRlckFkYXB0ZXJGYWN0b3J5OworCisvKioKKyAqIFRoaXMgaXMgdGhlIGNlbnRyYWwgc2luZ2xldG9uIGZvciB0aGUgSW1hZ2VXcml0ZXJMb2dnZXIgZWRpdG9yIHBsdWdpbi4KKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGZpbmFsIGNsYXNzIEltYWdlV3JpdGVyTG9nZ2VyRWRpdFBsdWdpbiBleHRlbmRzIEVNRlBsdWdpbiB7CisJLyoqCisJICogS2VlcCB0cmFjayBvZiB0aGUgc2luZ2xldG9uLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgSW1hZ2VXcml0ZXJMb2dnZXJFZGl0UGx1Z2luIElOU1RBTkNFID0gbmV3IEltYWdlV3JpdGVyTG9nZ2VyRWRpdFBsdWdpbigpOworCQorCS8qKgorCSAqIEtlZXAgdHJhY2sgb2YgdGhlIHNpbmdsZXRvbi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcml2YXRlIHN0YXRpYyBJbXBsZW1lbnRhdGlvbiBwbHVnaW47CisKKwkvKioKKwkgKiBDcmVhdGUgdGhlIGluc3RhbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBJbWFnZVdyaXRlckxvZ2dlckVkaXRQbHVnaW4oKSB7CisJCXN1cGVyCisJCQkobmV3IFJlc291cmNlTG9jYXRvciBbXSB7CisJCQkJQ29yZUVkaXRQbHVnaW4uSU5TVEFOQ0UsCisJCQkJRWNvcmVFZGl0UGx1Z2luLklOU1RBTkNFLAorCQkJCVNpbXVsYXRpb25Mb2dnZXJFZGl0UGx1Z2luLklOU1RBTkNFLAorCQkJfSk7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgc2luZ2xldG9uIGluc3RhbmNlIG9mIHRoZSBFY2xpcHNlIHBsdWdpbi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIHNpbmdsZXRvbiBpbnN0YW5jZS4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIFJlc291cmNlTG9jYXRvciBnZXRQbHVnaW5SZXNvdXJjZUxvY2F0b3IoKSB7CisJCXJldHVybiBwbHVnaW47CisJfQorCQorCS8qKgorCSAqIFJldHVybnMgdGhlIHNpbmdsZXRvbiBpbnN0YW5jZSBvZiB0aGUgRWNsaXBzZSBwbHVnaW4uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBzaW5nbGV0b24gaW5zdGFuY2UuCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBzdGF0aWMgSW1wbGVtZW50YXRpb24gZ2V0UGx1Z2luKCkgeworCQlyZXR1cm4gcGx1Z2luOworCX0KKwkKKwkvKioKKwkgKiBUaGUgYWN0dWFsIGltcGxlbWVudGF0aW9uIG9mIHRoZSBFY2xpcHNlIDxiPlBsdWdpbjwvYj4uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHN0YXRpYyBjbGFzcyBJbXBsZW1lbnRhdGlvbiBleHRlbmRzIEVjbGlwc2VVSVBsdWdpbiB7CisJCS8qKgorCQkgKiBDcmVhdGVzIGFuIGluc3RhbmNlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJcHVibGljIEltcGxlbWVudGF0aW9uKCkgeworCQkJc3VwZXIoKTsKKwkKKwkJCS8vIFJlbWVtYmVyIHRoZSBzdGF0aWMgaW5zdGFuY2UuCisJCQkvLworCQkJcGx1Z2luID0gdGhpczsKKwkJfQorCX0KKworfQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMuaW1hZ2V3cml0ZXIvc3JjL29yZy9lY2xpcHNlL3N0ZW0vbG9nZ2Vycy9pbWFnZXdyaXRlci9wcm92aWRlci9JbWFnZVdyaXRlckxvZ2dlckVkaXRvckFkdmlzb3IuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzLmltYWdld3JpdGVyL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2xvZ2dlcnMvaW1hZ2V3cml0ZXIvcHJvdmlkZXIvSW1hZ2VXcml0ZXJMb2dnZXJFZGl0b3JBZHZpc29yLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGRhZDg5YgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzLmltYWdld3JpdGVyL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2xvZ2dlcnMvaW1hZ2V3cml0ZXIvcHJvdmlkZXIvSW1hZ2VXcml0ZXJMb2dnZXJFZGl0b3JBZHZpc29yLmphdmEKQEAgLTAsMCArMSw1NjkgQEAKKy8qKgorICogPGNvcHlyaWdodD4KKyAqIDwvY29weXJpZ2h0PgorICoKKyAqICRJZCQKKyAqLworcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMuaW1hZ2V3cml0ZXIucHJvdmlkZXI7CisKK2ltcG9ydCBqYXZhLmlvLkZpbGU7CitpbXBvcnQgamF2YS51dGlsLkFycmF5czsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVxdWlub3guYXBwLklBcHBsaWNhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lcXVpbm94LmFwcC5JQXBwbGljYXRpb25Db250ZXh0OworCitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLkdyb3VwTWFya2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JQWN0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JTWVudU1hbmFnZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLk1lbnVNYW5hZ2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5TZXBhcmF0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuZGlhbG9ncy5NZXNzYWdlRGlhbG9nOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLndpbmRvdy5XaW5kb3c7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LlNXVDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZ3JhcGhpY3MuUG9pbnQ7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuRGlzcGxheTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5GaWxlRGlhbG9nOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlNoZWxsOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklFZGl0b3JEZXNjcmlwdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklGb2xkZXJMYXlvdXQ7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuSVBhZ2VMYXlvdXQ7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuSVBlcnNwZWN0aXZlRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5JV29ya2JlbmNoOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2hBY3Rpb25Db25zdGFudHM7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaFBhZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaFdpbmRvdzsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5QYXJ0SW5pdEV4Y2VwdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5QbGF0Zm9ybVVJOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLmFjdGlvbnMuQWN0aW9uRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5hY3Rpb25zLkNvbnRyaWJ1dGlvbkl0ZW1GYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLmFwcGxpY2F0aW9uLkFjdGlvbkJhckFkdmlzb3I7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuYXBwbGljYXRpb24uSUFjdGlvbkJhckNvbmZpZ3VyZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuYXBwbGljYXRpb24uSVdvcmtiZW5jaENvbmZpZ3VyZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuYXBwbGljYXRpb24uSVdvcmtiZW5jaFdpbmRvd0NvbmZpZ3VyZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuYXBwbGljYXRpb24uV29ya2JlbmNoQWR2aXNvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5hcHBsaWNhdGlvbi5Xb3JrYmVuY2hXaW5kb3dBZHZpc29yOworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51aS5VUklFZGl0b3JJbnB1dDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnVpLmFjdGlvbi5Xb3JrYmVuY2hXaW5kb3dBY3Rpb25EZWxlZ2F0ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuVVJJOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmFjdGlvbi5Mb2FkUmVzb3VyY2VBY3Rpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkudXRpbC5FZGl0VUlVdGlsOworCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzLmltYWdld3JpdGVyLnByb3ZpZGVyLkltYWdlV3JpdGVyTG9nZ2VyRWRpdFBsdWdpbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMuaW1hZ2V3cml0ZXIucHJlc2VudGF0aW9uLkltYWdld3JpdGVyRWRpdG9yOworCisKKy8qKgorICogQ3VzdG9taXplZCB7QGxpbmsgV29ya2JlbmNoQWR2aXNvcn0gZm9yIHRoZSBSQ1AgYXBwbGljYXRpb24uCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBmaW5hbCBjbGFzcyBJbWFnZVdyaXRlckxvZ2dlckVkaXRvckFkdmlzb3IgZXh0ZW5kcyBXb3JrYmVuY2hBZHZpc29yIHsKKwkvKioKKwkgKiBUaGUgZGVmYXVsdCBmaWxlIGV4dGVuc2lvbiBmaWx0ZXJzIGZvciB1c2UgaW4gZGlhbG9ncy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmdbXSBGSUxFX0VYVEVOU0lPTl9GSUxURVJTID0gSW1hZ2V3cml0ZXJFZGl0b3IuRklMRV9FWFRFTlNJT05fRklMVEVSUy50b0FycmF5KG5ldyBTdHJpbmdbMF0pOyAKKworCS8qKgorCSAqIFRoaXMgbG9va3MgdXAgYSBzdHJpbmcgaW4gdGhlIHBsdWdpbidzIHBsdWdpbi5wcm9wZXJ0aWVzIGZpbGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIGdldFN0cmluZyhTdHJpbmcga2V5KSB7CisJCXJldHVybiBJbWFnZVdyaXRlckxvZ2dlckVkaXRQbHVnaW4uSU5TVEFOQ0UuZ2V0U3RyaW5nKGtleSk7CisJfQorCisJLyoqCisJICogVGhpcyBsb29rcyB1cCBhIHN0cmluZyBpbiBwbHVnaW4ucHJvcGVydGllcywgbWFraW5nIGEgc3Vic3RpdHV0aW9uLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByaXZhdGUgc3RhdGljIFN0cmluZyBnZXRTdHJpbmcoU3RyaW5nIGtleSwgT2JqZWN0IHMxKSB7CisJCXJldHVybiBvcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMuaW1hZ2V3cml0ZXIucHJvdmlkZXIuSW1hZ2VXcml0ZXJMb2dnZXJFZGl0UGx1Z2luLklOU1RBTkNFLmdldFN0cmluZyhrZXksIG5ldyBPYmplY3QgW10geyBzMSB9KTsKKwl9CisKKwkvKioKKwkgKiBSQ1AncyBhcHBsaWNhdGlvbgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBzdGF0aWMgY2xhc3MgQXBwbGljYXRpb24gaW1wbGVtZW50cyBJQXBwbGljYXRpb24geworCQkvKioKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5lcXVpbm94LmFwcC5JQXBwbGljYXRpb24jc3RhcnQob3JnLmVjbGlwc2UuZXF1aW5veC5hcHAuSUFwcGxpY2F0aW9uQ29udGV4dCkKKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCXB1YmxpYyBPYmplY3Qgc3RhcnQoSUFwcGxpY2F0aW9uQ29udGV4dCBjb250ZXh0KSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJCVdvcmtiZW5jaEFkdmlzb3Igd29ya2JlbmNoQWR2aXNvciA9IG5ldyBJbWFnZVdyaXRlckxvZ2dlckVkaXRvckFkdmlzb3IoKTsKKwkJCURpc3BsYXkgZGlzcGxheSA9IFBsYXRmb3JtVUkuY3JlYXRlRGlzcGxheSgpOworCQkJdHJ5IHsKKwkJCQlpbnQgcmV0dXJuQ29kZSA9IFBsYXRmb3JtVUkuY3JlYXRlQW5kUnVuV29ya2JlbmNoKGRpc3BsYXksIHdvcmtiZW5jaEFkdmlzb3IpOworCQkJCWlmIChyZXR1cm5Db2RlID09IFBsYXRmb3JtVUkuUkVUVVJOX1JFU1RBUlQpIHsKKwkJCQkJcmV0dXJuIElBcHBsaWNhdGlvbi5FWElUX1JFU1RBUlQ7CisJCQkJfQorCQkJCWVsc2UgeworCQkJCQlyZXR1cm4gSUFwcGxpY2F0aW9uLkVYSVRfT0s7CisJCQkJfQorCQkJfQorCQkJZmluYWxseSB7CisJCQkJZGlzcGxheS5kaXNwb3NlKCk7CisJCQl9CisJCX0KKworCQkvKioKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5lcXVpbm94LmFwcC5JQXBwbGljYXRpb24jc3RvcCgpCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlwdWJsaWMgdm9pZCBzdG9wKCkgeworCQkJLy8gRG8gbm90aGluZy4KKwkJfQorCX0KKworCS8qKgorCSAqIFJDUCdzIHBlcnNwZWN0aXZlCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHN0YXRpYyBjbGFzcyBQZXJzcGVjdGl2ZSBpbXBsZW1lbnRzIElQZXJzcGVjdGl2ZUZhY3RvcnkgeworCQkvKioKKwkJICogUGVyc3BlY3RpdmUgSUQKKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIElEX1BFUlNQRUNUSVZFID0gIm9yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy5pbWFnZXdyaXRlci5wcm92aWRlci5JbWFnZVdyaXRlckxvZ2dlckVkaXRvckFkdmlzb3JQZXJzcGVjdGl2ZSI7CisKKwkJLyoqCisJCSAqIEBzZWUgb3JnLmVjbGlwc2UudWkuSVBlcnNwZWN0aXZlRmFjdG9yeSNjcmVhdGVJbml0aWFsTGF5b3V0KG9yZy5lY2xpcHNlLnVpLklQYWdlTGF5b3V0KQorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJcHVibGljIHZvaWQgY3JlYXRlSW5pdGlhbExheW91dChJUGFnZUxheW91dCBsYXlvdXQpIHsKKwkJCWxheW91dC5zZXRFZGl0b3JBcmVhVmlzaWJsZSh0cnVlKTsKKwkJCWxheW91dC5hZGRQZXJzcGVjdGl2ZVNob3J0Y3V0KElEX1BFUlNQRUNUSVZFKTsKKworCQkJSUZvbGRlckxheW91dCByaWdodCA9IGxheW91dC5jcmVhdGVGb2xkZXIoInJpZ2h0IiwgSVBhZ2VMYXlvdXQuUklHSFQsIChmbG9hdCkwLjY2LCBsYXlvdXQuZ2V0RWRpdG9yQXJlYSgpKTsKKwkJCXJpZ2h0LmFkZFZpZXcoSVBhZ2VMYXlvdXQuSURfT1VUTElORSk7CisKKwkJCUlGb2xkZXJMYXlvdXQgYm90dG9uUmlnaHQgPSBsYXlvdXQuY3JlYXRlRm9sZGVyKCJib3R0b25SaWdodCIsIElQYWdlTGF5b3V0LkJPVFRPTSwgKGZsb2F0KTAuNjAsICJyaWdodCIpOworCQkJYm90dG9uUmlnaHQuYWRkVmlldyhJUGFnZUxheW91dC5JRF9QUk9QX1NIRUVUKTsKKwkJfQorCX0KKwkKKwkvKioKKwkgKiBSQ1AncyB3aW5kb3cgYWR2aXNvcgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBzdGF0aWMgY2xhc3MgV2luZG93QWR2aXNvciBleHRlbmRzIFdvcmtiZW5jaFdpbmRvd0Fkdmlzb3IgeworCQkvKioKKwkJICogQHNlZSBXb3JrYmVuY2hXaW5kb3dBZHZpc29yI1dvcmtiZW5jaFdpbmRvd0Fkdmlzb3Iob3JnLmVjbGlwc2UudWkuYXBwbGljYXRpb24uSVdvcmtiZW5jaFdpbmRvd0NvbmZpZ3VyZXIpCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlwdWJsaWMgV2luZG93QWR2aXNvcihJV29ya2JlbmNoV2luZG93Q29uZmlndXJlciBjb25maWd1cmVyKSB7CisJCQlzdXBlcihjb25maWd1cmVyKTsKKwkJfQorCQkKKwkJLyoqCisJCSAqIEBzZWUgb3JnLmVjbGlwc2UudWkuYXBwbGljYXRpb24uV29ya2JlbmNoV2luZG93QWR2aXNvciNwcmVXaW5kb3dPcGVuKCkKKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUBPdmVycmlkZQorCQlwdWJsaWMgdm9pZCBwcmVXaW5kb3dPcGVuKCkgeworCQkJSVdvcmtiZW5jaFdpbmRvd0NvbmZpZ3VyZXIgY29uZmlndXJlciA9IGdldFdpbmRvd0NvbmZpZ3VyZXIoKTsKKwkJCWNvbmZpZ3VyZXIuc2V0SW5pdGlhbFNpemUobmV3IFBvaW50KDYwMCwgNDUwKSk7CisJCQljb25maWd1cmVyLnNldFNob3dDb29sQmFyKGZhbHNlKTsKKwkJCWNvbmZpZ3VyZXIuc2V0U2hvd1N0YXR1c0xpbmUodHJ1ZSk7CisJCQljb25maWd1cmVyLnNldFRpdGxlKGdldFN0cmluZygiX1VJX0FwcGxpY2F0aW9uX3RpdGxlIikpOworCQl9CisJCQorCQkvKioKKwkJICogQHNlZSBvcmcuZWNsaXBzZS51aS5hcHBsaWNhdGlvbi5Xb3JrYmVuY2hXaW5kb3dBZHZpc29yI2NyZWF0ZUFjdGlvbkJhckFkdmlzb3Iob3JnLmVjbGlwc2UudWkuYXBwbGljYXRpb24uSUFjdGlvbkJhckNvbmZpZ3VyZXIpCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlAT3ZlcnJpZGUKKwkJcHVibGljIEFjdGlvbkJhckFkdmlzb3IgY3JlYXRlQWN0aW9uQmFyQWR2aXNvcihJQWN0aW9uQmFyQ29uZmlndXJlciBjb25maWd1cmVyKSB7CisJCQlyZXR1cm4gbmV3IFdpbmRvd0FjdGlvbkJhckFkdmlzb3IoY29uZmlndXJlcik7CisJCX0KKwl9CisKKwkvKioKKwkgKiBSQ1AncyBhY3Rpb24gYmFyIGFkdmlzb3IKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGNsYXNzIFdpbmRvd0FjdGlvbkJhckFkdmlzb3IgZXh0ZW5kcyBBY3Rpb25CYXJBZHZpc29yIHsKKwkJLyoqCisJCSAqIEBzZWUgQWN0aW9uQmFyQWR2aXNvciNBY3Rpb25CYXJBZHZpc29yKG9yZy5lY2xpcHNlLnVpLmFwcGxpY2F0aW9uLklBY3Rpb25CYXJDb25maWd1cmVyKQorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJcHVibGljIFdpbmRvd0FjdGlvbkJhckFkdmlzb3IoSUFjdGlvbkJhckNvbmZpZ3VyZXIgY29uZmlndXJlcikgeworCQkJc3VwZXIoY29uZmlndXJlcik7CisJCX0KKwkJCisJCS8qKgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnVpLmFwcGxpY2F0aW9uLkFjdGlvbkJhckFkdmlzb3IjZmlsbE1lbnVCYXIob3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklNZW51TWFuYWdlcikKKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUBPdmVycmlkZQorCQlwcm90ZWN0ZWQgdm9pZCBmaWxsTWVudUJhcihJTWVudU1hbmFnZXIgbWVudUJhcikgeworCQkJSVdvcmtiZW5jaFdpbmRvdyB3aW5kb3cgPSBnZXRBY3Rpb25CYXJDb25maWd1cmVyKCkuZ2V0V2luZG93Q29uZmlndXJlcigpLmdldFdpbmRvdygpOworCQkJbWVudUJhci5hZGQoY3JlYXRlRmlsZU1lbnUod2luZG93KSk7CisJCQltZW51QmFyLmFkZChjcmVhdGVFZGl0TWVudSh3aW5kb3cpKTsKKwkJCW1lbnVCYXIuYWRkKG5ldyBHcm91cE1hcmtlcihJV29ya2JlbmNoQWN0aW9uQ29uc3RhbnRzLk1CX0FERElUSU9OUykpOworCQkJbWVudUJhci5hZGQoY3JlYXRlV2luZG93TWVudSh3aW5kb3cpKTsKKwkJCW1lbnVCYXIuYWRkKGNyZWF0ZUhlbHBNZW51KHdpbmRvdykpOwkJCQkJCisJCX0KKwkJCisJCS8qKgorCQkgKiBDcmVhdGVzIHRoZSAnRmlsZScgbWVudS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCXByb3RlY3RlZCBJTWVudU1hbmFnZXIgY3JlYXRlRmlsZU1lbnUoSVdvcmtiZW5jaFdpbmRvdyB3aW5kb3cpIHsKKwkJCUlNZW51TWFuYWdlciBtZW51ID0gbmV3IE1lbnVNYW5hZ2VyKGdldFN0cmluZygiX1VJX01lbnVfRmlsZV9sYWJlbCIpLAorCQkJSVdvcmtiZW5jaEFjdGlvbkNvbnN0YW50cy5NX0ZJTEUpOyAgICAKKwkJCW1lbnUuYWRkKG5ldyBHcm91cE1hcmtlcihJV29ya2JlbmNoQWN0aW9uQ29uc3RhbnRzLkZJTEVfU1RBUlQpKTsKKwkKKwkJCUlNZW51TWFuYWdlciBuZXdNZW51ID0gbmV3IE1lbnVNYW5hZ2VyKGdldFN0cmluZygiX1VJX01lbnVfTmV3X2xhYmVsIiksICJuZXciKTsKKwkJCW5ld01lbnUuYWRkKG5ldyBHcm91cE1hcmtlcihJV29ya2JlbmNoQWN0aW9uQ29uc3RhbnRzLk1CX0FERElUSU9OUykpOworCQorCQkJbWVudS5hZGQobmV3TWVudSk7CisJCQltZW51LmFkZChuZXcgU2VwYXJhdG9yKCkpOworCQkJbWVudS5hZGQobmV3IEdyb3VwTWFya2VyKElXb3JrYmVuY2hBY3Rpb25Db25zdGFudHMuTUJfQURESVRJT05TKSk7CisJCQltZW51LmFkZChuZXcgU2VwYXJhdG9yKCkpOworCQkJYWRkVG9NZW51QW5kUmVnaXN0ZXIobWVudSwgQWN0aW9uRmFjdG9yeS5DTE9TRS5jcmVhdGUod2luZG93KSk7CisJCQlhZGRUb01lbnVBbmRSZWdpc3RlcihtZW51LCBBY3Rpb25GYWN0b3J5LkNMT1NFX0FMTC5jcmVhdGUod2luZG93KSk7CisJCQltZW51LmFkZChuZXcgU2VwYXJhdG9yKCkpOworCQkJYWRkVG9NZW51QW5kUmVnaXN0ZXIobWVudSwgQWN0aW9uRmFjdG9yeS5TQVZFLmNyZWF0ZSh3aW5kb3cpKTsKKwkJCWFkZFRvTWVudUFuZFJlZ2lzdGVyKG1lbnUsIEFjdGlvbkZhY3RvcnkuU0FWRV9BUy5jcmVhdGUod2luZG93KSk7CisJCQlhZGRUb01lbnVBbmRSZWdpc3RlcihtZW51LCBBY3Rpb25GYWN0b3J5LlNBVkVfQUxMLmNyZWF0ZSh3aW5kb3cpKTsKKwkJCW1lbnUuYWRkKG5ldyBTZXBhcmF0b3IoKSk7CisJCQlhZGRUb01lbnVBbmRSZWdpc3RlcihtZW51LCBBY3Rpb25GYWN0b3J5LlFVSVQuY3JlYXRlKHdpbmRvdykpOworCQkJbWVudS5hZGQobmV3IEdyb3VwTWFya2VyKElXb3JrYmVuY2hBY3Rpb25Db25zdGFudHMuRklMRV9FTkQpKTsKKwkJCXJldHVybiBtZW51OworCQl9CisKKwkJLyoqCisJCSAqIENyZWF0ZXMgdGhlICdFZGl0JyBtZW51LgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJcHJvdGVjdGVkIElNZW51TWFuYWdlciBjcmVhdGVFZGl0TWVudShJV29ya2JlbmNoV2luZG93IHdpbmRvdykgeworCQkJSU1lbnVNYW5hZ2VyIG1lbnUgPSBuZXcgTWVudU1hbmFnZXIoZ2V0U3RyaW5nKCJfVUlfTWVudV9FZGl0X2xhYmVsIiksCisJCQlJV29ya2JlbmNoQWN0aW9uQ29uc3RhbnRzLk1fRURJVCk7CisJCQltZW51LmFkZChuZXcgR3JvdXBNYXJrZXIoSVdvcmtiZW5jaEFjdGlvbkNvbnN0YW50cy5FRElUX1NUQVJUKSk7CisJCisJCQlhZGRUb01lbnVBbmRSZWdpc3RlcihtZW51LCBBY3Rpb25GYWN0b3J5LlVORE8uY3JlYXRlKHdpbmRvdykpOworCQkJYWRkVG9NZW51QW5kUmVnaXN0ZXIobWVudSwgQWN0aW9uRmFjdG9yeS5SRURPLmNyZWF0ZSh3aW5kb3cpKTsKKwkJCW1lbnUuYWRkKG5ldyBHcm91cE1hcmtlcihJV29ya2JlbmNoQWN0aW9uQ29uc3RhbnRzLlVORE9fRVhUKSk7CisJCQltZW51LmFkZChuZXcgU2VwYXJhdG9yKCkpOworCQorCQkJYWRkVG9NZW51QW5kUmVnaXN0ZXIobWVudSwgQWN0aW9uRmFjdG9yeS5DVVQuY3JlYXRlKHdpbmRvdykpOworCQkJYWRkVG9NZW51QW5kUmVnaXN0ZXIobWVudSwgQWN0aW9uRmFjdG9yeS5DT1BZLmNyZWF0ZSh3aW5kb3cpKTsKKwkJCWFkZFRvTWVudUFuZFJlZ2lzdGVyKG1lbnUsIEFjdGlvbkZhY3RvcnkuUEFTVEUuY3JlYXRlKHdpbmRvdykpOworCQkJbWVudS5hZGQobmV3IEdyb3VwTWFya2VyKElXb3JrYmVuY2hBY3Rpb25Db25zdGFudHMuQ1VUX0VYVCkpOworCQkJbWVudS5hZGQobmV3IFNlcGFyYXRvcigpKTsKKwkKKwkJCWFkZFRvTWVudUFuZFJlZ2lzdGVyKG1lbnUsIEFjdGlvbkZhY3RvcnkuREVMRVRFLmNyZWF0ZSh3aW5kb3cpKTsKKwkJCWFkZFRvTWVudUFuZFJlZ2lzdGVyKG1lbnUsIEFjdGlvbkZhY3RvcnkuU0VMRUNUX0FMTC5jcmVhdGUod2luZG93KSk7CisJCQltZW51LmFkZChuZXcgU2VwYXJhdG9yKCkpOworCQorCQkJbWVudS5hZGQobmV3IEdyb3VwTWFya2VyKElXb3JrYmVuY2hBY3Rpb25Db25zdGFudHMuQUREX0VYVCkpOworCQorCQkJbWVudS5hZGQobmV3IEdyb3VwTWFya2VyKElXb3JrYmVuY2hBY3Rpb25Db25zdGFudHMuRURJVF9FTkQpKTsKKwkJCW1lbnUuYWRkKG5ldyBTZXBhcmF0b3IoSVdvcmtiZW5jaEFjdGlvbkNvbnN0YW50cy5NQl9BRERJVElPTlMpKTsKKwkJCXJldHVybiBtZW51OworCQl9CisJCisJCS8qKgorCQkgKiBDcmVhdGVzIHRoZSAnV2luZG93JyBtZW51LgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJcHJvdGVjdGVkIElNZW51TWFuYWdlciBjcmVhdGVXaW5kb3dNZW51KElXb3JrYmVuY2hXaW5kb3cgd2luZG93KSB7CisJCQlJTWVudU1hbmFnZXIgbWVudSA9IG5ldyBNZW51TWFuYWdlcihnZXRTdHJpbmcoIl9VSV9NZW51X1dpbmRvd19sYWJlbCIpLAorCQkJSVdvcmtiZW5jaEFjdGlvbkNvbnN0YW50cy5NX1dJTkRPVyk7CisJCisJCQlhZGRUb01lbnVBbmRSZWdpc3RlcihtZW51LCBBY3Rpb25GYWN0b3J5Lk9QRU5fTkVXX1dJTkRPVy5jcmVhdGUod2luZG93KSk7CisJCQltZW51LmFkZChuZXcgR3JvdXBNYXJrZXIoSVdvcmtiZW5jaEFjdGlvbkNvbnN0YW50cy5NQl9BRERJVElPTlMpKTsKKwkJCW1lbnUuYWRkKENvbnRyaWJ1dGlvbkl0ZW1GYWN0b3J5Lk9QRU5fV0lORE9XUy5jcmVhdGUod2luZG93KSk7CisJCisJCQlyZXR1cm4gbWVudTsKKwkJfQorCQorCQkvKioKKwkJICogQ3JlYXRlcyB0aGUgJ0hlbHAnIG1lbnUuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlwcm90ZWN0ZWQgSU1lbnVNYW5hZ2VyIGNyZWF0ZUhlbHBNZW51KElXb3JrYmVuY2hXaW5kb3cgd2luZG93KSB7CisJCQlJTWVudU1hbmFnZXIgbWVudSA9IG5ldyBNZW51TWFuYWdlcihnZXRTdHJpbmcoIl9VSV9NZW51X0hlbHBfbGFiZWwiKSwgSVdvcmtiZW5jaEFjdGlvbkNvbnN0YW50cy5NX0hFTFApOworCQkJLy8gV2VsY29tZSBvciBpbnRybyBwYWdlIHdvdWxkIGdvIGhlcmUKKwkJCS8vIEhlbHAgY29udGVudHMgd291bGQgZ28gaGVyZQorCQkJLy8gVGlwcyBhbmQgdHJpY2tzIHBhZ2Ugd291bGQgZ28gaGVyZQorCQkJbWVudS5hZGQobmV3IEdyb3VwTWFya2VyKElXb3JrYmVuY2hBY3Rpb25Db25zdGFudHMuSEVMUF9TVEFSVCkpOworCQkJbWVudS5hZGQobmV3IEdyb3VwTWFya2VyKElXb3JrYmVuY2hBY3Rpb25Db25zdGFudHMuSEVMUF9FTkQpKTsKKwkJCW1lbnUuYWRkKG5ldyBHcm91cE1hcmtlcihJV29ya2JlbmNoQWN0aW9uQ29uc3RhbnRzLk1CX0FERElUSU9OUykpOworCQkJcmV0dXJuIG1lbnU7CisJCX0KKwkJCisJCS8qKgorCQkgKiBBZGRzIHRoZSBzcGVjaWZpZWQgYWN0aW9uIHRvIHRoZSBnaXZlbiBtZW51IGFuZCBhbHNvIHJlZ2lzdGVycyB0aGUgYWN0aW9uIHdpdGggdGhlCisJCSAqIGFjdGlvbiBiYXIgY29uZmlndXJlciwgaW4gb3JkZXIgdG8gYWN0aXZhdGUgaXRzIGtleSBiaW5kaW5nLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJcHJvdGVjdGVkIHZvaWQgYWRkVG9NZW51QW5kUmVnaXN0ZXIoSU1lbnVNYW5hZ2VyIG1lbnVNYW5hZ2VyLCBJQWN0aW9uIGFjdGlvbikgeworCQkJbWVudU1hbmFnZXIuYWRkKGFjdGlvbik7CisJCQlnZXRBY3Rpb25CYXJDb25maWd1cmVyKCkucmVnaXN0ZXJHbG9iYWxBY3Rpb24oYWN0aW9uKTsKKwkJfQorCX0KKwkKKwkvKioKKwkgKiBBYm91dCBhY3Rpb24gZm9yIHRoZSBSQ1AgYXBwbGljYXRpb24uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHN0YXRpYyBjbGFzcyBBYm91dEFjdGlvbiBleHRlbmRzIFdvcmtiZW5jaFdpbmRvd0FjdGlvbkRlbGVnYXRlIHsKKwkJLyoqCisJCSAqIEBzZWUgb3JnLmVjbGlwc2UudWkuSUFjdGlvbkRlbGVnYXRlI3J1bihvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSUFjdGlvbikKKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCXB1YmxpYyB2b2lkIHJ1bihJQWN0aW9uIGFjdGlvbikgeworCQkJTWVzc2FnZURpYWxvZy5vcGVuSW5mb3JtYXRpb24oZ2V0V2luZG93KCkuZ2V0U2hlbGwoKSwgZ2V0U3RyaW5nKCJfVUlfQWJvdXRfdGl0bGUiKSwKKwkJCWdldFN0cmluZygiX1VJX0Fib3V0X3RleHQiKSk7CisJCX0KKwl9CisJCisJLyoqCisJICogT3BlbiBhY3Rpb24gZm9yIHRoZSBvYmplY3RzIGZyb20gdGhlIEltYWdlV3JpdGVyTG9nZ2VyIG1vZGVsLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBzdGF0aWMgY2xhc3MgT3BlbkFjdGlvbiBleHRlbmRzIFdvcmtiZW5jaFdpbmRvd0FjdGlvbkRlbGVnYXRlIHsKKwkJLyoqCisJCSAqIE9wZW5zIHRoZSBlZGl0b3JzIGZvciB0aGUgZmlsZXMgc2VsZWN0ZWQgdXNpbmcgdGhlIGZpbGUgZGlhbG9nLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJcHVibGljIHZvaWQgcnVuKElBY3Rpb24gYWN0aW9uKSB7CisJCQlTdHJpbmdbXSBmaWxlUGF0aHMgPSBvcGVuRmlsZVBhdGhEaWFsb2coZ2V0V2luZG93KCkuZ2V0U2hlbGwoKSwgU1dULk9QRU4sIG51bGwpOworCQkJaWYgKGZpbGVQYXRocy5sZW5ndGggPiAwKSB7CisJCQkJb3BlbkVkaXRvcihnZXRXaW5kb3coKS5nZXRXb3JrYmVuY2goKSwgVVJJLmNyZWF0ZUZpbGVVUkkoZmlsZVBhdGhzWzBdKSk7CisJCQl9CisJCX0KKwl9CisJCisJLyoqCisJICogT3BlbiBVUkkgYWN0aW9uIGZvciB0aGUgb2JqZWN0cyBmcm9tIHRoZSBJbWFnZVdyaXRlckxvZ2dlciBtb2RlbC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGNsYXNzIE9wZW5VUklBY3Rpb24gZXh0ZW5kcyBXb3JrYmVuY2hXaW5kb3dBY3Rpb25EZWxlZ2F0ZSB7CisJCS8qKgorCQkgKiBPcGVucyB0aGUgZWRpdG9ycyBmb3IgdGhlIGZpbGVzIHNlbGVjdGVkIHVzaW5nIHRoZSBMb2FkUmVzb3VyY2VEaWFsb2cuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlwdWJsaWMgdm9pZCBydW4oSUFjdGlvbiBhY3Rpb24pIHsKKwkJCUxvYWRSZXNvdXJjZUFjdGlvbi5Mb2FkUmVzb3VyY2VEaWFsb2cgbG9hZFJlc291cmNlRGlhbG9nID0gbmV3IExvYWRSZXNvdXJjZUFjdGlvbi5Mb2FkUmVzb3VyY2VEaWFsb2coZ2V0V2luZG93KCkuZ2V0U2hlbGwoKSk7CisJCQlpZiAoV2luZG93Lk9LID09IGxvYWRSZXNvdXJjZURpYWxvZy5vcGVuKCkpIHsKKwkJCQlmb3IgKFVSSSB1cmkgOiBsb2FkUmVzb3VyY2VEaWFsb2cuZ2V0VVJJcygpKSB7CisJCQkJCW9wZW5FZGl0b3IoZ2V0V2luZG93KCkuZ2V0V29ya2JlbmNoKCksIHVyaSk7CisJCQkJfQorCQkJfQorCQl9CisJfQorCQorCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBzdGF0aWMgU3RyaW5nW10gb3BlbkZpbGVQYXRoRGlhbG9nKFNoZWxsIHNoZWxsLCBpbnQgc3R5bGUsIFN0cmluZ1tdIGZpbGVFeHRlbnNpb25GaWx0ZXJzKSB7CisJCXJldHVybiBvcGVuRmlsZVBhdGhEaWFsb2coc2hlbGwsIHN0eWxlLCBmaWxlRXh0ZW5zaW9uRmlsdGVycywgKHN0eWxlICYgU1dULk9QRU4pICE9IDAsIChzdHlsZSAmIFNXVC5PUEVOKSAhPSAwLCAoc3R5bGUgJiBTV1QuU0FWRSkgIT0gMCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHN0YXRpYyBTdHJpbmdbXSBvcGVuRmlsZVBhdGhEaWFsb2coU2hlbGwgc2hlbGwsIGludCBzdHlsZSwgU3RyaW5nW10gZmlsZUV4dGVuc2lvbkZpbHRlcnMsIGJvb2xlYW4gaW5jbHVkZUdyb3VwRmlsdGVyLCBib29sZWFuIGluY2x1ZGVBbGxGaWx0ZXIsIGJvb2xlYW4gYWRkRXh0ZW5zaW9uKSB7CisJCUZpbGVEaWFsb2cgZmlsZURpYWxvZyA9IG5ldyBGaWxlRGlhbG9nKHNoZWxsLCBzdHlsZSk7CisJCWlmIChmaWxlRXh0ZW5zaW9uRmlsdGVycyA9PSBudWxsKSB7CisJCQlmaWxlRXh0ZW5zaW9uRmlsdGVycyA9IEZJTEVfRVhURU5TSU9OX0ZJTFRFUlM7CisJCX0KKwkJCisJCS8vIElmIHJlcXVlc3RlZCwgYXVnbWVudCB0aGUgZmlsZSBleHRlbnNpb24gZmlsdGVycyBieSBhZGRpbmcgYSBncm91cCBvZiBhbGwgdGhlIG90aGVyIGZpbHRlcnMgKCouZXh0MTsqLmV4dDI7Li4uKQorCQkvLyBhdCB0aGUgYmVnaW5uaW5nIGFuZC9vciBhbiBhbGwgZmlsZXMgd2lsZGNhcmQgKCouKikgYXQgdGhlIGVuZC4KKwkJLy8KKwkJaW5jbHVkZUdyb3VwRmlsdGVyICY9IGZpbGVFeHRlbnNpb25GaWx0ZXJzLmxlbmd0aCA+IDE7CisJCWludCBvZmZzZXQgPSBpbmNsdWRlR3JvdXBGaWx0ZXIgPyAxIDogMDsKKwkJCisJCWlmIChpbmNsdWRlR3JvdXBGaWx0ZXIgfHwgaW5jbHVkZUFsbEZpbHRlcikgeworCQkJaW50IHNpemUgPSBmaWxlRXh0ZW5zaW9uRmlsdGVycy5sZW5ndGggKyBvZmZzZXQgKyAoaW5jbHVkZUFsbEZpbHRlciA/IDEgOiAwKTsKKwkJCVN0cmluZ1tdIGFsbEZpbHRlcnMgPSBuZXcgU3RyaW5nW3NpemVdOworCQkJU3RyaW5nQnVpbGRlciBncm91cCA9IGluY2x1ZGVHcm91cEZpbHRlciA/IG5ldyBTdHJpbmdCdWlsZGVyKCkgOiBudWxsOworCQkJCisJCQlmb3IgKGludCBpID0gMDsgaSA8IGZpbGVFeHRlbnNpb25GaWx0ZXJzLmxlbmd0aDsgaSsrKSB7CisJCQkJaWYgKGluY2x1ZGVHcm91cEZpbHRlcikgeworCQkJCQlpZiAoaSAhPSAwKSB7CisJCQkJCQlncm91cC5hcHBlbmQoJzsnKTsKKwkJCQkJfQorCQkJCQlncm91cC5hcHBlbmQoZmlsZUV4dGVuc2lvbkZpbHRlcnNbaV0pOworCQkJCX0KKwkJCQlhbGxGaWx0ZXJzW2kgKyBvZmZzZXRdID0gZmlsZUV4dGVuc2lvbkZpbHRlcnNbaV07CisJCQl9CisJCQkKKwkJCWlmIChpbmNsdWRlR3JvdXBGaWx0ZXIpIHsKKwkJCQlhbGxGaWx0ZXJzWzBdID0gZ3JvdXAudG9TdHJpbmcoKTsKKwkJCX0KKwkJCWlmIChpbmNsdWRlQWxsRmlsdGVyKSB7CisJCQkJYWxsRmlsdGVyc1thbGxGaWx0ZXJzLmxlbmd0aCAtIDFdID0gIiouKiI7CisJCQl9CisJCQkKKwkJCWZpbGVEaWFsb2cuc2V0RmlsdGVyRXh0ZW5zaW9ucyhhbGxGaWx0ZXJzKTsKKwkJfQorCQllbHNlIHsKKwkJCWZpbGVEaWFsb2cuc2V0RmlsdGVyRXh0ZW5zaW9ucyhmaWxlRXh0ZW5zaW9uRmlsdGVycyk7CisJCX0KKwkJZmlsZURpYWxvZy5vcGVuKCk7CisJCQorCQlTdHJpbmdbXSBmaWxlbmFtZXMgPSBmaWxlRGlhbG9nLmdldEZpbGVOYW1lcygpOworCQlTdHJpbmdbXSByZXN1bHQgPSBuZXcgU3RyaW5nW2ZpbGVuYW1lcy5sZW5ndGhdOworCQlTdHJpbmcgcGF0aCA9IGZpbGVEaWFsb2cuZ2V0RmlsdGVyUGF0aCgpICsgRmlsZS5zZXBhcmF0b3I7CisJCVN0cmluZyBleHRlbnNpb24gPSBudWxsOworCQkKKwkJLy8gSWYgZXh0ZW5zaW9uIGFkZGluZyByZXF1ZXN0ZWQsIGdldCB0aGUgZG90dGVkIGV4dGVuc2lvbiBjb3JyZXNwb25kaW5nIHRvIHRoZSBzZWxlY3RlZCBmaWx0ZXIuCisJCS8vCisJCWlmIChhZGRFeHRlbnNpb24pIHsKKwkJCWludCBpID0gZmlsZURpYWxvZy5nZXRGaWx0ZXJJbmRleCgpOworCQkJaWYgKGkgIT0gLTEgJiYgKCFpbmNsdWRlQWxsRmlsdGVyIHx8IGkgIT0gZmlsZUV4dGVuc2lvbkZpbHRlcnMubGVuZ3RoKSkgeworCQkJCWkgPSBpbmNsdWRlR3JvdXBGaWx0ZXIgJiYgaSA9PSAwID8gMCA6IGkgLSBvZmZzZXQ7CisJCQkJU3RyaW5nIGZpbHRlciA9IGZpbGVFeHRlbnNpb25GaWx0ZXJzW2ldOworCQkJCWludCBkb3QgPSBmaWx0ZXIubGFzdEluZGV4T2YoJy4nKTsKKwkJCQlpZiAoZG90ID09IDEgJiYgZmlsdGVyLmNoYXJBdCgwKSA9PSAnKicpIHsKKwkJCQkJZXh0ZW5zaW9uID0gZmlsdGVyLnN1YnN0cmluZyhkb3QpOworCQkJCX0KKwkJCX0KKwkJfQorCQkKKwkJLy8gQnVpbGQgdGhlIHJlc3VsdCBieSBhZGRpbmcgdGhlIHNlbGVjdGVkIHBhdGggYW5kLCBpZiBuZWVkZWQsIGF1dG8tYXBwZW5kaW5nIHRoZSBleHRlbnNpb24uCisJCS8vCisJCWZvciAoaW50IGkgPSAwOyBpIDwgZmlsZW5hbWVzLmxlbmd0aDsgaSsrKSB7CisJCQlTdHJpbmcgZmlsZW5hbWUgPSBwYXRoICsgZmlsZW5hbWVzW2ldOworCQkJaWYgKGV4dGVuc2lvbiAhPSBudWxsKSB7CisJCQkJaW50IGRvdCA9IGZpbGVuYW1lLmxhc3RJbmRleE9mKCcuJyk7CisJCQkJaWYgKGRvdCA9PSAtMSB8fCAhQXJyYXlzLmFzTGlzdChmaWxlRXh0ZW5zaW9uRmlsdGVycykuY29udGFpbnMoIioiICsgZmlsZW5hbWUuc3Vic3RyaW5nKGRvdCkpKSB7CisJCQkJCWZpbGVuYW1lICs9IGV4dGVuc2lvbjsKKwkJCQl9CisJCQl9CisJCQlyZXN1bHRbaV0gPSBmaWxlbmFtZTsKKwkJfQorCQlyZXR1cm4gcmVzdWx0OworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBzdGF0aWMgYm9vbGVhbiBvcGVuRWRpdG9yKElXb3JrYmVuY2ggd29ya2JlbmNoLCBVUkkgdXJpKSB7CisJCUlXb3JrYmVuY2hXaW5kb3cgd29ya2JlbmNoV2luZG93ID0gd29ya2JlbmNoLmdldEFjdGl2ZVdvcmtiZW5jaFdpbmRvdygpOworCQlJV29ya2JlbmNoUGFnZSBwYWdlID0gd29ya2JlbmNoV2luZG93LmdldEFjdGl2ZVBhZ2UoKTsKKwkJCisJCUlFZGl0b3JEZXNjcmlwdG9yIGVkaXRvckRlc2NyaXB0b3IgPSBFZGl0VUlVdGlsLmdldERlZmF1bHRFZGl0b3IodXJpLCBudWxsKTsKKwkJaWYgKGVkaXRvckRlc2NyaXB0b3IgPT0gbnVsbCkgeworCQkJTWVzc2FnZURpYWxvZy5vcGVuRXJyb3IoCisJCQkJd29ya2JlbmNoV2luZG93LmdldFNoZWxsKCksCisJCQkJZ2V0U3RyaW5nKCJfVUlfRXJyb3JfdGl0bGUiKSwKKwkJCQlnZXRTdHJpbmcoIl9XQVJOX05vX0VkaXRvciIsIHVyaS5sYXN0U2VnbWVudCgpKSk7CisJCQlyZXR1cm4gZmFsc2U7CisJCX0KKwkJZWxzZSB7CisJCQl0cnkgeworCQkJCXBhZ2Uub3BlbkVkaXRvcihuZXcgVVJJRWRpdG9ySW5wdXQodXJpKSwgZWRpdG9yRGVzY3JpcHRvci5nZXRJZCgpKTsKKwkJCX0KKwkJCWNhdGNoIChQYXJ0SW5pdEV4Y2VwdGlvbiBleGNlcHRpb24pIHsKKwkJCQlNZXNzYWdlRGlhbG9nLm9wZW5FcnJvcigKKwkJCQkJd29ya2JlbmNoV2luZG93LmdldFNoZWxsKCksCisJCQkJCWdldFN0cmluZygiX1VJX09wZW5FZGl0b3JFcnJvcl9sYWJlbCIpLAorCQkJCQlleGNlcHRpb24uZ2V0TWVzc2FnZSgpKTsKKwkJCQlyZXR1cm4gZmFsc2U7CisJCQl9CisJCX0KKwkJcmV0dXJuIHRydWU7CisJfQorCQorCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2UudWkuYXBwbGljYXRpb24uV29ya2JlbmNoQWR2aXNvciNnZXRJbml0aWFsV2luZG93UGVyc3BlY3RpdmVJZCgpCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJCUBPdmVycmlkZQorCXB1YmxpYyBTdHJpbmcgZ2V0SW5pdGlhbFdpbmRvd1BlcnNwZWN0aXZlSWQoKSB7CisJCXJldHVybiBQZXJzcGVjdGl2ZS5JRF9QRVJTUEVDVElWRTsKKwl9CisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnVpLmFwcGxpY2F0aW9uLldvcmtiZW5jaEFkdmlzb3IjaW5pdGlhbGl6ZShvcmcuZWNsaXBzZS51aS5hcHBsaWNhdGlvbi5JV29ya2JlbmNoQ29uZmlndXJlcikKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwkJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgaW5pdGlhbGl6ZShJV29ya2JlbmNoQ29uZmlndXJlciBjb25maWd1cmVyKSB7CisJCXN1cGVyLmluaXRpYWxpemUoY29uZmlndXJlcik7CisJCWNvbmZpZ3VyZXIuc2V0U2F2ZUFuZFJlc3RvcmUodHJ1ZSk7CisJfQorCQorCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2UudWkuYXBwbGljYXRpb24uV29ya2JlbmNoQWR2aXNvciNjcmVhdGVXb3JrYmVuY2hXaW5kb3dBZHZpc29yKG9yZy5lY2xpcHNlLnVpLmFwcGxpY2F0aW9uLklXb3JrYmVuY2hXaW5kb3dDb25maWd1cmVyKQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCQlAT3ZlcnJpZGUKKwlwdWJsaWMgV29ya2JlbmNoV2luZG93QWR2aXNvciBjcmVhdGVXb3JrYmVuY2hXaW5kb3dBZHZpc29yKElXb3JrYmVuY2hXaW5kb3dDb25maWd1cmVyIGNvbmZpZ3VyZXIpIHsKKwkJcmV0dXJuIG5ldyBXaW5kb3dBZHZpc29yKGNvbmZpZ3VyZXIpOworCX0KK30KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzLmltYWdld3JpdGVyL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2xvZ2dlcnMvaW1hZ2V3cml0ZXIvcHJvdmlkZXIvSW1hZ2VXcml0ZXJMb2dnZXJJdGVtUHJvdmlkZXIuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzLmltYWdld3JpdGVyL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2xvZ2dlcnMvaW1hZ2V3cml0ZXIvcHJvdmlkZXIvSW1hZ2VXcml0ZXJMb2dnZXJJdGVtUHJvdmlkZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYjVkZTgwCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMuaW1hZ2V3cml0ZXIvc3JjL29yZy9lY2xpcHNlL3N0ZW0vbG9nZ2Vycy9pbWFnZXdyaXRlci9wcm92aWRlci9JbWFnZVdyaXRlckxvZ2dlckl0ZW1Qcm92aWRlci5qYXZhCkBAIC0wLDAgKzEsMTg4IEBACisvKioKKyAqIDxjb3B5cmlnaHQ+CisgKiA8L2NvcHlyaWdodD4KKyAqCisgKiAkSWQkCisgKi8KK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzLmltYWdld3JpdGVyLnByb3ZpZGVyOworCisKK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LkFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbjsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5SZXNvdXJjZUxvY2F0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlVSSTsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkNvbXBvc2VhYmxlQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUVkaXRpbmdEb21haW5JdGVtUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1MYWJlbFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtUHJvcGVydHlEZXNjcmlwdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtUHJvcGVydHlTb3VyY2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVN0cnVjdHVyZWRJdGVtQ29udGVudFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklUcmVlSXRlbUNvbnRlbnRQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JdGVtUHJvcGVydHlEZXNjcmlwdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLlZpZXdlck5vdGlmaWNhdGlvbjsKKworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy5pbWFnZXdyaXRlci5JbWFnZVdyaXRlckxvZ2dlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMuaW1hZ2V3cml0ZXIuSW1hZ2V3cml0ZXJQYWNrYWdlOworCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzLnByb3ZpZGVyLlNpbXVsYXRpb25Mb2dnZXJJdGVtUHJvdmlkZXI7CisKKy8qKgorICogVGhpcyBpcyB0aGUgaXRlbSBwcm92aWRlciBhZGFwdGVyIGZvciBhIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMuaW1hZ2V3cml0ZXIuSW1hZ2VXcml0ZXJMb2dnZXJ9IG9iamVjdC4KKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIEltYWdlV3JpdGVyTG9nZ2VySXRlbVByb3ZpZGVyCisJZXh0ZW5kcyBTaW11bGF0aW9uTG9nZ2VySXRlbVByb3ZpZGVyCisJaW1wbGVtZW50cworCQlJRWRpdGluZ0RvbWFpbkl0ZW1Qcm92aWRlciwKKwkJSVN0cnVjdHVyZWRJdGVtQ29udGVudFByb3ZpZGVyLAorCQlJVHJlZUl0ZW1Db250ZW50UHJvdmlkZXIsCisJCUlJdGVtTGFiZWxQcm92aWRlciwKKwkJSUl0ZW1Qcm9wZXJ0eVNvdXJjZSB7CisJLyoqCisJICogVGhpcyBjb25zdHJ1Y3RzIGFuIGluc3RhbmNlIGZyb20gYSBmYWN0b3J5IGFuZCBhIG5vdGlmaWVyLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBJbWFnZVdyaXRlckxvZ2dlckl0ZW1Qcm92aWRlcihBZGFwdGVyRmFjdG9yeSBhZGFwdGVyRmFjdG9yeSkgeworCQlzdXBlcihhZGFwdGVyRmFjdG9yeSk7CisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIHRoZSBwcm9wZXJ0eSBkZXNjcmlwdG9ycyBmb3IgdGhlIGFkYXB0ZWQgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIExpc3Q8SUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I+IGdldFByb3BlcnR5RGVzY3JpcHRvcnMoT2JqZWN0IG9iamVjdCkgeworCQlpZiAoaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMgPT0gbnVsbCkgeworCQkJc3VwZXIuZ2V0UHJvcGVydHlEZXNjcmlwdG9ycyhvYmplY3QpOworCisJCQlhZGRVc2VEZWZhdWx0TG9nRGlyZWN0b3J5UHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCk7CisJCQlhZGREYXRhUGF0aFByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QpOworCQl9CisJCXJldHVybiBpdGVtUHJvcGVydHlEZXNjcmlwdG9yczsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFkZHMgYSBwcm9wZXJ0eSBkZXNjcmlwdG9yIGZvciB0aGUgVXNlIERlZmF1bHQgTG9nIERpcmVjdG9yeSBmZWF0dXJlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIGFkZFVzZURlZmF1bHRMb2dEaXJlY3RvcnlQcm9wZXJ0eURlc2NyaXB0b3IoT2JqZWN0IG9iamVjdCkgeworCQlpdGVtUHJvcGVydHlEZXNjcmlwdG9ycy5hZGQKKwkJCShjcmVhdGVJdGVtUHJvcGVydHlEZXNjcmlwdG9yCisJCQkJKCgoQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSlhZGFwdGVyRmFjdG9yeSkuZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCksCisJCQkJIGdldFJlc291cmNlTG9jYXRvcigpLAorCQkJCSBnZXRTdHJpbmcoIl9VSV9JbWFnZVdyaXRlckxvZ2dlcl91c2VEZWZhdWx0TG9nRGlyZWN0b3J5X2ZlYXR1cmUiKSwKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfUHJvcGVydHlEZXNjcmlwdG9yX2Rlc2NyaXB0aW9uIiwgIl9VSV9JbWFnZVdyaXRlckxvZ2dlcl91c2VEZWZhdWx0TG9nRGlyZWN0b3J5X2ZlYXR1cmUiLCAiX1VJX0ltYWdlV3JpdGVyTG9nZ2VyX3R5cGUiKSwKKwkJCQkgSW1hZ2V3cml0ZXJQYWNrYWdlLkxpdGVyYWxzLklNQUdFX1dSSVRFUl9MT0dHRVJfX1VTRV9ERUZBVUxUX0xPR19ESVJFQ1RPUlksCisJCQkJIHRydWUsCisJCQkJIGZhbHNlLAorCQkJCSBmYWxzZSwKKwkJCQkgSXRlbVByb3BlcnR5RGVzY3JpcHRvci5CT09MRUFOX1ZBTFVFX0lNQUdFLAorCQkJCSBudWxsLAorCQkJCSBudWxsKSk7CisJfQorCisJLyoqCisJICogVGhpcyBhZGRzIGEgcHJvcGVydHkgZGVzY3JpcHRvciBmb3IgdGhlIERhdGEgUGF0aCBmZWF0dXJlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIGFkZERhdGFQYXRoUHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdCBvYmplY3QpIHsKKwkJaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMuYWRkCisJCQkoY3JlYXRlSXRlbVByb3BlcnR5RGVzY3JpcHRvcgorCQkJCSgoKENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnkpYWRhcHRlckZhY3RvcnkpLmdldFJvb3RBZGFwdGVyRmFjdG9yeSgpLAorCQkJCSBnZXRSZXNvdXJjZUxvY2F0b3IoKSwKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfSW1hZ2VXcml0ZXJMb2dnZXJfZGF0YVBhdGhfZmVhdHVyZSIpLAorCQkJCSBnZXRTdHJpbmcoIl9VSV9Qcm9wZXJ0eURlc2NyaXB0b3JfZGVzY3JpcHRpb24iLCAiX1VJX0ltYWdlV3JpdGVyTG9nZ2VyX2RhdGFQYXRoX2ZlYXR1cmUiLCAiX1VJX0ltYWdlV3JpdGVyTG9nZ2VyX3R5cGUiKSwKKwkJCQkgSW1hZ2V3cml0ZXJQYWNrYWdlLkxpdGVyYWxzLklNQUdFX1dSSVRFUl9MT0dHRVJfX0RBVEFfUEFUSCwKKwkJCQkgdHJ1ZSwKKwkJCQkgZmFsc2UsCisJCQkJIGZhbHNlLAorCQkJCSBJdGVtUHJvcGVydHlEZXNjcmlwdG9yLkdFTkVSSUNfVkFMVUVfSU1BR0UsCisJCQkJIG51bGwsCisJCQkJIG51bGwpKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgSW1hZ2VXcml0ZXJMb2dnZXIuZ2lmLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBPYmplY3QgZ2V0SW1hZ2UoT2JqZWN0IG9iamVjdCkgeworCQlyZXR1cm4gb3ZlcmxheUltYWdlKG9iamVjdCwgZ2V0UmVzb3VyY2VMb2NhdG9yKCkuZ2V0SW1hZ2UoImZ1bGwvb2JqMTYvSW1hZ2VXcml0ZXJMb2dnZXIiKSk7CisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIHRoZSBsYWJlbCB0ZXh0IGZvciB0aGUgYWRhcHRlZCBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgU3RyaW5nIGdldFRleHQoT2JqZWN0IG9iamVjdCkgeworCQlVUkkgbGFiZWxWYWx1ZSA9ICgoSW1hZ2VXcml0ZXJMb2dnZXIpb2JqZWN0KS5nZXRVUkkoKTsKKwkJU3RyaW5nIGxhYmVsID0gbGFiZWxWYWx1ZSA9PSBudWxsID8gbnVsbCA6IGxhYmVsVmFsdWUudG9TdHJpbmcoKTsKKwkJcmV0dXJuIGxhYmVsID09IG51bGwgfHwgbGFiZWwubGVuZ3RoKCkgPT0gMCA/CisJCQlnZXRTdHJpbmcoIl9VSV9JbWFnZVdyaXRlckxvZ2dlcl90eXBlIikgOgorCQkJZ2V0U3RyaW5nKCJfVUlfSW1hZ2VXcml0ZXJMb2dnZXJfdHlwZSIpICsgIiAiICsgbGFiZWw7CisJfQorCisJLyoqCisJICogVGhpcyBoYW5kbGVzIG1vZGVsIG5vdGlmaWNhdGlvbnMgYnkgY2FsbGluZyB7QGxpbmsgI3VwZGF0ZUNoaWxkcmVufSB0byB1cGRhdGUgYW55IGNhY2hlZAorCSAqIGNoaWxkcmVuIGFuZCBieSBjcmVhdGluZyBhIHZpZXdlciBub3RpZmljYXRpb24sIHdoaWNoIGl0IHBhc3NlcyB0byB7QGxpbmsgI2ZpcmVOb3RpZnlDaGFuZ2VkfS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBub3RpZnlDaGFuZ2VkKE5vdGlmaWNhdGlvbiBub3RpZmljYXRpb24pIHsKKwkJdXBkYXRlQ2hpbGRyZW4obm90aWZpY2F0aW9uKTsKKworCQlzd2l0Y2ggKG5vdGlmaWNhdGlvbi5nZXRGZWF0dXJlSUQoSW1hZ2VXcml0ZXJMb2dnZXIuY2xhc3MpKSB7CisJCQljYXNlIEltYWdld3JpdGVyUGFja2FnZS5JTUFHRV9XUklURVJfTE9HR0VSX19VU0VfREVGQVVMVF9MT0dfRElSRUNUT1JZOgorCQkJY2FzZSBJbWFnZXdyaXRlclBhY2thZ2UuSU1BR0VfV1JJVEVSX0xPR0dFUl9fREFUQV9QQVRIOgorCQkJCWZpcmVOb3RpZnlDaGFuZ2VkKG5ldyBWaWV3ZXJOb3RpZmljYXRpb24obm90aWZpY2F0aW9uLCBub3RpZmljYXRpb24uZ2V0Tm90aWZpZXIoKSwgZmFsc2UsIHRydWUpKTsKKwkJCQlyZXR1cm47CisJCX0KKwkJc3VwZXIubm90aWZ5Q2hhbmdlZChub3RpZmljYXRpb24pOworCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmVkaXQuY29tbWFuZC5Db21tYW5kUGFyYW1ldGVyfXMgZGVzY3JpYmluZyB0aGUgY2hpbGRyZW4KKwkgKiB0aGF0IGNhbiBiZSBjcmVhdGVkIHVuZGVyIHRoaXMgb2JqZWN0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIGNvbGxlY3ROZXdDaGlsZERlc2NyaXB0b3JzKENvbGxlY3Rpb248T2JqZWN0PiBuZXdDaGlsZERlc2NyaXB0b3JzLCBPYmplY3Qgb2JqZWN0KSB7CisJCXN1cGVyLmNvbGxlY3ROZXdDaGlsZERlc2NyaXB0b3JzKG5ld0NoaWxkRGVzY3JpcHRvcnMsIG9iamVjdCk7CisJfQorCisJLyoqCisJICogUmV0dXJuIHRoZSByZXNvdXJjZSBsb2NhdG9yIGZvciB0aGlzIGl0ZW0gcHJvdmlkZXIncyByZXNvdXJjZXMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIFJlc291cmNlTG9jYXRvciBnZXRSZXNvdXJjZUxvY2F0b3IoKSB7CisJCXJldHVybiBJbWFnZVdyaXRlckxvZ2dlckVkaXRQbHVnaW4uSU5TVEFOQ0U7CisJfQorCit9CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy5pbWFnZXdyaXRlci9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9sb2dnZXJzL2ltYWdld3JpdGVyL3Byb3ZpZGVyL0ltYWdld3JpdGVySXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzLmltYWdld3JpdGVyL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2xvZ2dlcnMvaW1hZ2V3cml0ZXIvcHJvdmlkZXIvSW1hZ2V3cml0ZXJJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhjYjEzZDEKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy5pbWFnZXdyaXRlci9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9sb2dnZXJzL2ltYWdld3JpdGVyL3Byb3ZpZGVyL0ltYWdld3JpdGVySXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkuamF2YQpAQCAtMCwwICsxLDIyNyBAQAorLyoqCisgKiA8Y29weXJpZ2h0PgorICogPC9jb3B5cmlnaHQ+CisgKgorICogJElkJAorICovCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy5pbWFnZXdyaXRlci5wcm92aWRlcjsKKworaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7CitpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5BZGFwdGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmllcjsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkNoYW5nZU5vdGlmaWVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkNvbXBvc2VhYmxlQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuQ29tcG9zZWRBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JQ2hhbmdlTm90aWZpZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSURpc3Bvc2FibGU7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUVkaXRpbmdEb21haW5JdGVtUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1MYWJlbFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtUHJvcGVydHlTb3VyY2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSU5vdGlmeUNoYW5nZWRMaXN0ZW5lcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JU3RydWN0dXJlZEl0ZW1Db250ZW50UHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVRyZWVJdGVtQ29udGVudFByb3ZpZGVyOworCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzLmltYWdld3JpdGVyLnV0aWwuSW1hZ2V3cml0ZXJBZGFwdGVyRmFjdG9yeTsKKworLyoqCisgKiBUaGlzIGlzIHRoZSBmYWN0b3J5IHRoYXQgaXMgdXNlZCB0byBwcm92aWRlIHRoZSBpbnRlcmZhY2VzIG5lZWRlZCB0byBzdXBwb3J0IFZpZXdlcnMuCisgKiBUaGUgYWRhcHRlcnMgZ2VuZXJhdGVkIGJ5IHRoaXMgZmFjdG9yeSBjb252ZXJ0IEVNRiBhZGFwdGVyIG5vdGlmaWNhdGlvbnMgaW50byBjYWxscyB0byB7QGxpbmsgI2ZpcmVOb3RpZnlDaGFuZ2VkIGZpcmVOb3RpZnlDaGFuZ2VkfS4KKyAqIFRoZSBhZGFwdGVycyBhbHNvIHN1cHBvcnQgRWNsaXBzZSBwcm9wZXJ0eSBzaGVldHMuCisgKiBOb3RlIHRoYXQgbW9zdCBvZiB0aGUgYWRhcHRlcnMgYXJlIHNoYXJlZCBhbW9uZyBtdWx0aXBsZSBpbnN0YW5jZXMuCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBJbWFnZXdyaXRlckl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5IGV4dGVuZHMgSW1hZ2V3cml0ZXJBZGFwdGVyRmFjdG9yeSBpbXBsZW1lbnRzIENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnksIElDaGFuZ2VOb3RpZmllciwgSURpc3Bvc2FibGUgeworCS8qKgorCSAqIFRoaXMga2VlcHMgdHJhY2sgb2YgdGhlIHJvb3QgYWRhcHRlciBmYWN0b3J5IHRoYXQgZGVsZWdhdGVzIHRvIHRoaXMgYWRhcHRlciBmYWN0b3J5LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBDb21wb3NlZEFkYXB0ZXJGYWN0b3J5IHBhcmVudEFkYXB0ZXJGYWN0b3J5OworCisJLyoqCisJICogVGhpcyBpcyB1c2VkIHRvIGltcGxlbWVudCB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUNoYW5nZU5vdGlmaWVyfS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgSUNoYW5nZU5vdGlmaWVyIGNoYW5nZU5vdGlmaWVyID0gbmV3IENoYW5nZU5vdGlmaWVyKCk7CisKKwkvKioKKwkgKiBUaGlzIGtlZXBzIHRyYWNrIG9mIGFsbCB0aGUgc3VwcG9ydGVkIHR5cGVzIGNoZWNrZWQgYnkge0BsaW5rICNpc0ZhY3RvcnlGb3JUeXBlIGlzRmFjdG9yeUZvclR5cGV9LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBDb2xsZWN0aW9uPE9iamVjdD4gc3VwcG9ydGVkVHlwZXMgPSBuZXcgQXJyYXlMaXN0PE9iamVjdD4oKTsKKworCS8qKgorCSAqIFRoaXMgY29uc3RydWN0cyBhbiBpbnN0YW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgSW1hZ2V3cml0ZXJJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSgpIHsKKwkJc3VwcG9ydGVkVHlwZXMuYWRkKElFZGl0aW5nRG9tYWluSXRlbVByb3ZpZGVyLmNsYXNzKTsKKwkJc3VwcG9ydGVkVHlwZXMuYWRkKElTdHJ1Y3R1cmVkSXRlbUNvbnRlbnRQcm92aWRlci5jbGFzcyk7CisJCXN1cHBvcnRlZFR5cGVzLmFkZChJVHJlZUl0ZW1Db250ZW50UHJvdmlkZXIuY2xhc3MpOworCQlzdXBwb3J0ZWRUeXBlcy5hZGQoSUl0ZW1MYWJlbFByb3ZpZGVyLmNsYXNzKTsKKwkJc3VwcG9ydGVkVHlwZXMuYWRkKElJdGVtUHJvcGVydHlTb3VyY2UuY2xhc3MpOworCX0KKworCS8qKgorCSAqIFRoaXMga2VlcHMgdHJhY2sgb2YgdGhlIG9uZSBhZGFwdGVyIHVzZWQgZm9yIGFsbCB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzLmltYWdld3JpdGVyLk1hcFZpZXdJbWFnZVdyaXRlckxvZ2dlcn0gaW5zdGFuY2VzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBNYXBWaWV3SW1hZ2VXcml0ZXJMb2dnZXJJdGVtUHJvdmlkZXIgbWFwVmlld0ltYWdlV3JpdGVyTG9nZ2VySXRlbVByb3ZpZGVyOworCisJLyoqCisJICogVGhpcyBjcmVhdGVzIGFuIGFkYXB0ZXIgZm9yIGEge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy5pbWFnZXdyaXRlci5NYXBWaWV3SW1hZ2VXcml0ZXJMb2dnZXJ9LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZU1hcFZpZXdJbWFnZVdyaXRlckxvZ2dlckFkYXB0ZXIoKSB7CisJCWlmIChtYXBWaWV3SW1hZ2VXcml0ZXJMb2dnZXJJdGVtUHJvdmlkZXIgPT0gbnVsbCkgeworCQkJbWFwVmlld0ltYWdlV3JpdGVyTG9nZ2VySXRlbVByb3ZpZGVyID0gbmV3IE1hcFZpZXdJbWFnZVdyaXRlckxvZ2dlckl0ZW1Qcm92aWRlcih0aGlzKTsKKwkJfQorCisJCXJldHVybiBtYXBWaWV3SW1hZ2VXcml0ZXJMb2dnZXJJdGVtUHJvdmlkZXI7CisJfQorCisJLyoqCisJICogVGhpcyBrZWVwcyB0cmFjayBvZiB0aGUgb25lIGFkYXB0ZXIgdXNlZCBmb3IgYWxsIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMuaW1hZ2V3cml0ZXIuRXF1aXJlY3Rhbmd1bGFyTWFwTG9nZ2VyfSBpbnN0YW5jZXMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIEVxdWlyZWN0YW5ndWxhck1hcExvZ2dlckl0ZW1Qcm92aWRlciBlcXVpcmVjdGFuZ3VsYXJNYXBMb2dnZXJJdGVtUHJvdmlkZXI7CisKKwkvKioKKwkgKiBUaGlzIGNyZWF0ZXMgYW4gYWRhcHRlciBmb3IgYSB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzLmltYWdld3JpdGVyLkVxdWlyZWN0YW5ndWxhck1hcExvZ2dlcn0uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlRXF1aXJlY3Rhbmd1bGFyTWFwTG9nZ2VyQWRhcHRlcigpIHsKKwkJaWYgKGVxdWlyZWN0YW5ndWxhck1hcExvZ2dlckl0ZW1Qcm92aWRlciA9PSBudWxsKSB7CisJCQllcXVpcmVjdGFuZ3VsYXJNYXBMb2dnZXJJdGVtUHJvdmlkZXIgPSBuZXcgRXF1aXJlY3Rhbmd1bGFyTWFwTG9nZ2VySXRlbVByb3ZpZGVyKHRoaXMpOworCQl9CisKKwkJcmV0dXJuIGVxdWlyZWN0YW5ndWxhck1hcExvZ2dlckl0ZW1Qcm92aWRlcjsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgdGhlIHJvb3QgYWRhcHRlciBmYWN0b3J5IHRoYXQgY29udGFpbnMgdGhpcyBmYWN0b3J5LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBDb21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5IGdldFJvb3RBZGFwdGVyRmFjdG9yeSgpIHsKKwkJcmV0dXJuIHBhcmVudEFkYXB0ZXJGYWN0b3J5ID09IG51bGwgPyB0aGlzIDogcGFyZW50QWRhcHRlckZhY3RvcnkuZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCk7CisJfQorCisJLyoqCisJICogVGhpcyBzZXRzIHRoZSBjb21wb3NlZCBhZGFwdGVyIGZhY3RvcnkgdGhhdCBjb250YWlucyB0aGlzIGZhY3RvcnkuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgc2V0UGFyZW50QWRhcHRlckZhY3RvcnkoQ29tcG9zZWRBZGFwdGVyRmFjdG9yeSBwYXJlbnRBZGFwdGVyRmFjdG9yeSkgeworCQl0aGlzLnBhcmVudEFkYXB0ZXJGYWN0b3J5ID0gcGFyZW50QWRhcHRlckZhY3Rvcnk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIGJvb2xlYW4gaXNGYWN0b3J5Rm9yVHlwZShPYmplY3QgdHlwZSkgeworCQlyZXR1cm4gc3VwcG9ydGVkVHlwZXMuY29udGFpbnModHlwZSkgfHwgc3VwZXIuaXNGYWN0b3J5Rm9yVHlwZSh0eXBlKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGltcGxlbWVudGF0aW9uIHN1YnN0aXR1dGVzIHRoZSBmYWN0b3J5IGl0c2VsZiBhcyB0aGUga2V5IGZvciB0aGUgYWRhcHRlci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgQWRhcHRlciBhZGFwdChOb3RpZmllciBub3RpZmllciwgT2JqZWN0IHR5cGUpIHsKKwkJcmV0dXJuIHN1cGVyLmFkYXB0KG5vdGlmaWVyLCB0aGlzKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgT2JqZWN0IGFkYXB0KE9iamVjdCBvYmplY3QsIE9iamVjdCB0eXBlKSB7CisJCWlmIChpc0ZhY3RvcnlGb3JUeXBlKHR5cGUpKSB7CisJCQlPYmplY3QgYWRhcHRlciA9IHN1cGVyLmFkYXB0KG9iamVjdCwgdHlwZSk7CisJCQlpZiAoISh0eXBlIGluc3RhbmNlb2YgQ2xhc3M8Pz4pIHx8ICgoKENsYXNzPD8+KXR5cGUpLmlzSW5zdGFuY2UoYWRhcHRlcikpKSB7CisJCQkJcmV0dXJuIGFkYXB0ZXI7CisJCQl9CisJCX0KKworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFkZHMgYSBsaXN0ZW5lci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBhZGRMaXN0ZW5lcihJTm90aWZ5Q2hhbmdlZExpc3RlbmVyIG5vdGlmeUNoYW5nZWRMaXN0ZW5lcikgeworCQljaGFuZ2VOb3RpZmllci5hZGRMaXN0ZW5lcihub3RpZnlDaGFuZ2VkTGlzdGVuZXIpOworCX0KKworCS8qKgorCSAqIFRoaXMgcmVtb3ZlcyBhIGxpc3RlbmVyLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIHJlbW92ZUxpc3RlbmVyKElOb3RpZnlDaGFuZ2VkTGlzdGVuZXIgbm90aWZ5Q2hhbmdlZExpc3RlbmVyKSB7CisJCWNoYW5nZU5vdGlmaWVyLnJlbW92ZUxpc3RlbmVyKG5vdGlmeUNoYW5nZWRMaXN0ZW5lcik7CisJfQorCisJLyoqCisJICogVGhpcyBkZWxlZ2F0ZXMgdG8ge0BsaW5rICNjaGFuZ2VOb3RpZmllcn0gYW5kIHRvIHtAbGluayAjcGFyZW50QWRhcHRlckZhY3Rvcnl9LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIGZpcmVOb3RpZnlDaGFuZ2VkKE5vdGlmaWNhdGlvbiBub3RpZmljYXRpb24pIHsKKwkJY2hhbmdlTm90aWZpZXIuZmlyZU5vdGlmeUNoYW5nZWQobm90aWZpY2F0aW9uKTsKKworCQlpZiAocGFyZW50QWRhcHRlckZhY3RvcnkgIT0gbnVsbCkgeworCQkJcGFyZW50QWRhcHRlckZhY3RvcnkuZmlyZU5vdGlmeUNoYW5nZWQobm90aWZpY2F0aW9uKTsKKwkJfQorCX0KKworCS8qKgorCSAqIFRoaXMgZGlzcG9zZXMgYWxsIG9mIHRoZSBpdGVtIHByb3ZpZGVycyBjcmVhdGVkIGJ5IHRoaXMgZmFjdG9yeS4gCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgZGlzcG9zZSgpIHsKKwkJaWYgKG1hcFZpZXdJbWFnZVdyaXRlckxvZ2dlckl0ZW1Qcm92aWRlciAhPSBudWxsKSBtYXBWaWV3SW1hZ2VXcml0ZXJMb2dnZXJJdGVtUHJvdmlkZXIuZGlzcG9zZSgpOworCQlpZiAoZXF1aXJlY3Rhbmd1bGFyTWFwTG9nZ2VySXRlbVByb3ZpZGVyICE9IG51bGwpIGVxdWlyZWN0YW5ndWxhck1hcExvZ2dlckl0ZW1Qcm92aWRlci5kaXNwb3NlKCk7CisJfQorCit9CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy5pbWFnZXdyaXRlci9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9sb2dnZXJzL2ltYWdld3JpdGVyL3Byb3ZpZGVyL01hcFZpZXdJbWFnZVdyaXRlckxvZ2dlckl0ZW1Qcm92aWRlci5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMuaW1hZ2V3cml0ZXIvc3JjL29yZy9lY2xpcHNlL3N0ZW0vbG9nZ2Vycy9pbWFnZXdyaXRlci9wcm92aWRlci9NYXBWaWV3SW1hZ2VXcml0ZXJMb2dnZXJJdGVtUHJvdmlkZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MTUyYzk0Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMuaW1hZ2V3cml0ZXIvc3JjL29yZy9lY2xpcHNlL3N0ZW0vbG9nZ2Vycy9pbWFnZXdyaXRlci9wcm92aWRlci9NYXBWaWV3SW1hZ2VXcml0ZXJMb2dnZXJJdGVtUHJvdmlkZXIuamF2YQpAQCAtMCwwICsxLDE1MCBAQAorLyoqCisgKiA8Y29weXJpZ2h0PgorICogPC9jb3B5cmlnaHQ+CisgKgorICogJElkJAorICovCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy5pbWFnZXdyaXRlci5wcm92aWRlcjsKKworCitpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5BZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb247CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuVVJJOworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JRWRpdGluZ0RvbWFpbkl0ZW1Qcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbUxhYmVsUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1Qcm9wZXJ0eVNvdXJjZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JU3RydWN0dXJlZEl0ZW1Db250ZW50UHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVRyZWVJdGVtQ29udGVudFByb3ZpZGVyOworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSXRlbVByb3BlcnR5RGVzY3JpcHRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5WaWV3ZXJOb3RpZmljYXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzLmltYWdld3JpdGVyLkltYWdld3JpdGVyUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMuaW1hZ2V3cml0ZXIuTWFwVmlld0ltYWdlV3JpdGVyTG9nZ2VyOworCisvKioKKyAqIFRoaXMgaXMgdGhlIGl0ZW0gcHJvdmlkZXIgYWRhcHRlciBmb3IgYSB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzLmltYWdld3JpdGVyLk1hcFZpZXdJbWFnZVdyaXRlckxvZ2dlcn0gb2JqZWN0LgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgTWFwVmlld0ltYWdlV3JpdGVyTG9nZ2VySXRlbVByb3ZpZGVyCisJZXh0ZW5kcyBJbWFnZVdyaXRlckxvZ2dlckl0ZW1Qcm92aWRlcgorCWltcGxlbWVudHMKKwkJSUVkaXRpbmdEb21haW5JdGVtUHJvdmlkZXIsCisJCUlTdHJ1Y3R1cmVkSXRlbUNvbnRlbnRQcm92aWRlciwKKwkJSVRyZWVJdGVtQ29udGVudFByb3ZpZGVyLAorCQlJSXRlbUxhYmVsUHJvdmlkZXIsCisJCUlJdGVtUHJvcGVydHlTb3VyY2UgeworCS8qKgorCSAqIFRoaXMgY29uc3RydWN0cyBhbiBpbnN0YW5jZSBmcm9tIGEgZmFjdG9yeSBhbmQgYSBub3RpZmllci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgTWFwVmlld0ltYWdlV3JpdGVyTG9nZ2VySXRlbVByb3ZpZGVyKEFkYXB0ZXJGYWN0b3J5IGFkYXB0ZXJGYWN0b3J5KSB7CisJCXN1cGVyKGFkYXB0ZXJGYWN0b3J5KTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgdGhlIHByb3BlcnR5IGRlc2NyaXB0b3JzIGZvciB0aGUgYWRhcHRlZCBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgTGlzdDxJSXRlbVByb3BlcnR5RGVzY3JpcHRvcj4gZ2V0UHJvcGVydHlEZXNjcmlwdG9ycyhPYmplY3Qgb2JqZWN0KSB7CisJCWlmIChpdGVtUHJvcGVydHlEZXNjcmlwdG9ycyA9PSBudWxsKSB7CisJCQlzdXBlci5nZXRQcm9wZXJ0eURlc2NyaXB0b3JzKG9iamVjdCk7CisKKwkJCWFkZE9wZW5NYXBWaWV3UHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCk7CisJCX0KKwkJcmV0dXJuIGl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzOworCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyBhIHByb3BlcnR5IGRlc2NyaXB0b3IgZm9yIHRoZSBPcGVuIE1hcCBWaWV3IGZlYXR1cmUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgYWRkT3Blbk1hcFZpZXdQcm9wZXJ0eURlc2NyaXB0b3IoT2JqZWN0IG9iamVjdCkgeworCQlpdGVtUHJvcGVydHlEZXNjcmlwdG9ycy5hZGQKKwkJCShjcmVhdGVJdGVtUHJvcGVydHlEZXNjcmlwdG9yCisJCQkJKCgoQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSlhZGFwdGVyRmFjdG9yeSkuZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCksCisJCQkJIGdldFJlc291cmNlTG9jYXRvcigpLAorCQkJCSBnZXRTdHJpbmcoIl9VSV9NYXBWaWV3SW1hZ2VXcml0ZXJMb2dnZXJfb3Blbk1hcFZpZXdfZmVhdHVyZSIpLAorCQkJCSBnZXRTdHJpbmcoIl9VSV9Qcm9wZXJ0eURlc2NyaXB0b3JfZGVzY3JpcHRpb24iLCAiX1VJX01hcFZpZXdJbWFnZVdyaXRlckxvZ2dlcl9vcGVuTWFwVmlld19mZWF0dXJlIiwgIl9VSV9NYXBWaWV3SW1hZ2VXcml0ZXJMb2dnZXJfdHlwZSIpLAorCQkJCSBJbWFnZXdyaXRlclBhY2thZ2UuTGl0ZXJhbHMuTUFQX1ZJRVdfSU1BR0VfV1JJVEVSX0xPR0dFUl9fT1BFTl9NQVBfVklFVywKKwkJCQkgdHJ1ZSwKKwkJCQkgZmFsc2UsCisJCQkJIGZhbHNlLAorCQkJCSBJdGVtUHJvcGVydHlEZXNjcmlwdG9yLkJPT0xFQU5fVkFMVUVfSU1BR0UsCisJCQkJIG51bGwsCisJCQkJIG51bGwpKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgTWFwVmlld0ltYWdlV3JpdGVyTG9nZ2VyLmdpZi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgT2JqZWN0IGdldEltYWdlKE9iamVjdCBvYmplY3QpIHsKKwkJcmV0dXJuIG92ZXJsYXlJbWFnZShvYmplY3QsIGdldFJlc291cmNlTG9jYXRvcigpLmdldEltYWdlKCJmdWxsL29iajE2L01hcFZpZXdJbWFnZVdyaXRlckxvZ2dlciIpKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgdGhlIGxhYmVsIHRleHQgZm9yIHRoZSBhZGFwdGVkIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBTdHJpbmcgZ2V0VGV4dChPYmplY3Qgb2JqZWN0KSB7CisJCVVSSSBsYWJlbFZhbHVlID0gKChNYXBWaWV3SW1hZ2VXcml0ZXJMb2dnZXIpb2JqZWN0KS5nZXRVUkkoKTsKKwkJU3RyaW5nIGxhYmVsID0gbGFiZWxWYWx1ZSA9PSBudWxsID8gbnVsbCA6IGxhYmVsVmFsdWUudG9TdHJpbmcoKTsKKwkJcmV0dXJuIGxhYmVsID09IG51bGwgfHwgbGFiZWwubGVuZ3RoKCkgPT0gMCA/CisJCQlnZXRTdHJpbmcoIl9VSV9NYXBWaWV3SW1hZ2VXcml0ZXJMb2dnZXJfdHlwZSIpIDoKKwkJCWdldFN0cmluZygiX1VJX01hcFZpZXdJbWFnZVdyaXRlckxvZ2dlcl90eXBlIikgKyAiICIgKyBsYWJlbDsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGhhbmRsZXMgbW9kZWwgbm90aWZpY2F0aW9ucyBieSBjYWxsaW5nIHtAbGluayAjdXBkYXRlQ2hpbGRyZW59IHRvIHVwZGF0ZSBhbnkgY2FjaGVkCisJICogY2hpbGRyZW4gYW5kIGJ5IGNyZWF0aW5nIGEgdmlld2VyIG5vdGlmaWNhdGlvbiwgd2hpY2ggaXQgcGFzc2VzIHRvIHtAbGluayAjZmlyZU5vdGlmeUNoYW5nZWR9LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIG5vdGlmeUNoYW5nZWQoTm90aWZpY2F0aW9uIG5vdGlmaWNhdGlvbikgeworCQl1cGRhdGVDaGlsZHJlbihub3RpZmljYXRpb24pOworCisJCXN3aXRjaCAobm90aWZpY2F0aW9uLmdldEZlYXR1cmVJRChNYXBWaWV3SW1hZ2VXcml0ZXJMb2dnZXIuY2xhc3MpKSB7CisJCQljYXNlIEltYWdld3JpdGVyUGFja2FnZS5NQVBfVklFV19JTUFHRV9XUklURVJfTE9HR0VSX19PUEVOX01BUF9WSUVXOgorCQkJCWZpcmVOb3RpZnlDaGFuZ2VkKG5ldyBWaWV3ZXJOb3RpZmljYXRpb24obm90aWZpY2F0aW9uLCBub3RpZmljYXRpb24uZ2V0Tm90aWZpZXIoKSwgZmFsc2UsIHRydWUpKTsKKwkJCQlyZXR1cm47CisJCX0KKwkJc3VwZXIubm90aWZ5Q2hhbmdlZChub3RpZmljYXRpb24pOworCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmVkaXQuY29tbWFuZC5Db21tYW5kUGFyYW1ldGVyfXMgZGVzY3JpYmluZyB0aGUgY2hpbGRyZW4KKwkgKiB0aGF0IGNhbiBiZSBjcmVhdGVkIHVuZGVyIHRoaXMgb2JqZWN0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIGNvbGxlY3ROZXdDaGlsZERlc2NyaXB0b3JzKENvbGxlY3Rpb248T2JqZWN0PiBuZXdDaGlsZERlc2NyaXB0b3JzLCBPYmplY3Qgb2JqZWN0KSB7CisJCXN1cGVyLmNvbGxlY3ROZXdDaGlsZERlc2NyaXB0b3JzKG5ld0NoaWxkRGVzY3JpcHRvcnMsIG9iamVjdCk7CisJfQorCit9CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy5pbWFnZXdyaXRlci9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9sb2dnZXJzL2ltYWdld3JpdGVyL3Byb3ZpZGVyL1Byb2plY3RlZE1hcEltYWdlTG9nZ2VySXRlbVByb3ZpZGVyLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy5pbWFnZXdyaXRlci9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9sb2dnZXJzL2ltYWdld3JpdGVyL3Byb3ZpZGVyL1Byb2plY3RlZE1hcEltYWdlTG9nZ2VySXRlbVByb3ZpZGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWUyYTYyMQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzLmltYWdld3JpdGVyL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2xvZ2dlcnMvaW1hZ2V3cml0ZXIvcHJvdmlkZXIvUHJvamVjdGVkTWFwSW1hZ2VMb2dnZXJJdGVtUHJvdmlkZXIuamF2YQpAQCAtMCwwICsxLDM0MSBAQAorLyoqCisgKiA8Y29weXJpZ2h0PgorICogPC9jb3B5cmlnaHQ+CisgKgorICogJElkJAorICovCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy5pbWFnZXdyaXRlci5wcm92aWRlcjsKKworCitpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5BZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb247CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuVVJJOworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JRWRpdGluZ0RvbWFpbkl0ZW1Qcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbUxhYmVsUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1Qcm9wZXJ0eVNvdXJjZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JU3RydWN0dXJlZEl0ZW1Db250ZW50UHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVRyZWVJdGVtQ29udGVudFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuVmlld2VyTm90aWZpY2F0aW9uOworCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzLmltYWdld3JpdGVyLkltYWdld3JpdGVyUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMuaW1hZ2V3cml0ZXIuUHJvamVjdGVkTWFwSW1hZ2VMb2dnZXI7CisKKy8qKgorICogVGhpcyBpcyB0aGUgaXRlbSBwcm92aWRlciBhZGFwdGVyIGZvciBhIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMuaW1hZ2V3cml0ZXIuUHJvamVjdGVkTWFwSW1hZ2VMb2dnZXJ9IG9iamVjdC4KKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIFByb2plY3RlZE1hcEltYWdlTG9nZ2VySXRlbVByb3ZpZGVyCisJZXh0ZW5kcyBJbWFnZVdyaXRlckxvZ2dlckl0ZW1Qcm92aWRlcgorCWltcGxlbWVudHMKKwkJSUVkaXRpbmdEb21haW5JdGVtUHJvdmlkZXIsCisJCUlTdHJ1Y3R1cmVkSXRlbUNvbnRlbnRQcm92aWRlciwKKwkJSVRyZWVJdGVtQ29udGVudFByb3ZpZGVyLAorCQlJSXRlbUxhYmVsUHJvdmlkZXIsCisJCUlJdGVtUHJvcGVydHlTb3VyY2UgeworCS8qKgorCSAqIFRoaXMgY29uc3RydWN0cyBhbiBpbnN0YW5jZSBmcm9tIGEgZmFjdG9yeSBhbmQgYSBub3RpZmllci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgUHJvamVjdGVkTWFwSW1hZ2VMb2dnZXJJdGVtUHJvdmlkZXIoQWRhcHRlckZhY3RvcnkgYWRhcHRlckZhY3RvcnkpIHsKKwkJc3VwZXIoYWRhcHRlckZhY3RvcnkpOworCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyB0aGUgcHJvcGVydHkgZGVzY3JpcHRvcnMgZm9yIHRoZSBhZGFwdGVkIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBMaXN0PElJdGVtUHJvcGVydHlEZXNjcmlwdG9yPiBnZXRQcm9wZXJ0eURlc2NyaXB0b3JzKE9iamVjdCBvYmplY3QpIHsKKwkJaWYgKGl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzID09IG51bGwpIHsKKwkJCXN1cGVyLmdldFByb3BlcnR5RGVzY3JpcHRvcnMob2JqZWN0KTsKKworCQkJYWRkVXNlTG9nU2NhbGluZ1Byb3BlcnR5RGVzY3JpcHRvcihvYmplY3QpOworCQkJYWRkR2FpblByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QpOworCQkJYWRkTG9nQWxsRGVjb3JhdG9yc1Byb3BlcnR5RGVzY3JpcHRvcihvYmplY3QpOworCQkJYWRkQ29sb3JQcm92aWRlclByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QpOworCQkJYWRkRGVjb3JhdG9yUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCk7CisJCQlhZGREZWNvcmF0b3JQcm9wZXJ0aWVzUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCk7CisJCQlhZGRXaWR0aFByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QpOworCQkJYWRkSGVpZ2h0UHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCk7CisJCQlhZGRQcm9qZWN0aW9uUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCk7CisJCX0KKwkJcmV0dXJuIGl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzOworCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyBhIHByb3BlcnR5IGRlc2NyaXB0b3IgZm9yIHRoZSBVc2UgTG9nIFNjYWxpbmcgZmVhdHVyZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBhZGRVc2VMb2dTY2FsaW5nUHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdCBvYmplY3QpIHsKKwkJaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMuYWRkCisJCQkoY3JlYXRlSXRlbVByb3BlcnR5RGVzY3JpcHRvcgorCQkJCSgoKENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnkpYWRhcHRlckZhY3RvcnkpLmdldFJvb3RBZGFwdGVyRmFjdG9yeSgpLAorCQkJCSBnZXRSZXNvdXJjZUxvY2F0b3IoKSwKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfUHJvamVjdGVkTWFwSW1hZ2VMb2dnZXJfdXNlTG9nU2NhbGluZ19mZWF0dXJlIiksCisJCQkJIGdldFN0cmluZygiX1VJX1Byb3BlcnR5RGVzY3JpcHRvcl9kZXNjcmlwdGlvbiIsICJfVUlfUHJvamVjdGVkTWFwSW1hZ2VMb2dnZXJfdXNlTG9nU2NhbGluZ19mZWF0dXJlIiwgIl9VSV9Qcm9qZWN0ZWRNYXBJbWFnZUxvZ2dlcl90eXBlIiksCisJCQkJIEltYWdld3JpdGVyUGFja2FnZS5MaXRlcmFscy5QUk9KRUNURURfTUFQX0lNQUdFX0xPR0dFUl9fVVNFX0xPR19TQ0FMSU5HLAorCQkJCSB0cnVlLAorCQkJCSBmYWxzZSwKKwkJCQkgZmFsc2UsCisJCQkJIEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IuQk9PTEVBTl9WQUxVRV9JTUFHRSwKKwkJCQkgbnVsbCwKKwkJCQkgbnVsbCkpOworCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyBhIHByb3BlcnR5IGRlc2NyaXB0b3IgZm9yIHRoZSBHYWluIGZlYXR1cmUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgYWRkR2FpblByb3BlcnR5RGVzY3JpcHRvcihPYmplY3Qgb2JqZWN0KSB7CisJCWl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzLmFkZAorCQkJKGNyZWF0ZUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IKKwkJCQkoKChDb21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5KWFkYXB0ZXJGYWN0b3J5KS5nZXRSb290QWRhcHRlckZhY3RvcnkoKSwKKwkJCQkgZ2V0UmVzb3VyY2VMb2NhdG9yKCksCisJCQkJIGdldFN0cmluZygiX1VJX1Byb2plY3RlZE1hcEltYWdlTG9nZ2VyX2dhaW5fZmVhdHVyZSIpLAorCQkJCSBnZXRTdHJpbmcoIl9VSV9Qcm9wZXJ0eURlc2NyaXB0b3JfZGVzY3JpcHRpb24iLCAiX1VJX1Byb2plY3RlZE1hcEltYWdlTG9nZ2VyX2dhaW5fZmVhdHVyZSIsICJfVUlfUHJvamVjdGVkTWFwSW1hZ2VMb2dnZXJfdHlwZSIpLAorCQkJCSBJbWFnZXdyaXRlclBhY2thZ2UuTGl0ZXJhbHMuUFJPSkVDVEVEX01BUF9JTUFHRV9MT0dHRVJfX0dBSU4sCisJCQkJIHRydWUsCisJCQkJIGZhbHNlLAorCQkJCSBmYWxzZSwKKwkJCQkgSXRlbVByb3BlcnR5RGVzY3JpcHRvci5SRUFMX1ZBTFVFX0lNQUdFLAorCQkJCSBudWxsLAorCQkJCSBudWxsKSk7CisJfQorCisJLyoqCisJICogVGhpcyBhZGRzIGEgcHJvcGVydHkgZGVzY3JpcHRvciBmb3IgdGhlIExvZyBBbGwgRGVjb3JhdG9ycyBmZWF0dXJlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIGFkZExvZ0FsbERlY29yYXRvcnNQcm9wZXJ0eURlc2NyaXB0b3IoT2JqZWN0IG9iamVjdCkgeworCQlpdGVtUHJvcGVydHlEZXNjcmlwdG9ycy5hZGQKKwkJCShjcmVhdGVJdGVtUHJvcGVydHlEZXNjcmlwdG9yCisJCQkJKCgoQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSlhZGFwdGVyRmFjdG9yeSkuZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCksCisJCQkJIGdldFJlc291cmNlTG9jYXRvcigpLAorCQkJCSBnZXRTdHJpbmcoIl9VSV9Qcm9qZWN0ZWRNYXBJbWFnZUxvZ2dlcl9sb2dBbGxEZWNvcmF0b3JzX2ZlYXR1cmUiKSwKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfUHJvcGVydHlEZXNjcmlwdG9yX2Rlc2NyaXB0aW9uIiwgIl9VSV9Qcm9qZWN0ZWRNYXBJbWFnZUxvZ2dlcl9sb2dBbGxEZWNvcmF0b3JzX2ZlYXR1cmUiLCAiX1VJX1Byb2plY3RlZE1hcEltYWdlTG9nZ2VyX3R5cGUiKSwKKwkJCQkgSW1hZ2V3cml0ZXJQYWNrYWdlLkxpdGVyYWxzLlBST0pFQ1RFRF9NQVBfSU1BR0VfTE9HR0VSX19MT0dfQUxMX0RFQ09SQVRPUlMsCisJCQkJIHRydWUsCisJCQkJIGZhbHNlLAorCQkJCSBmYWxzZSwKKwkJCQkgSXRlbVByb3BlcnR5RGVzY3JpcHRvci5CT09MRUFOX1ZBTFVFX0lNQUdFLAorCQkJCSBudWxsLAorCQkJCSBudWxsKSk7CisJfQorCisJLyoqCisJICogVGhpcyBhZGRzIGEgcHJvcGVydHkgZGVzY3JpcHRvciBmb3IgdGhlIENvbG9yIFByb3ZpZGVyIGZlYXR1cmUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgYWRkQ29sb3JQcm92aWRlclByb3BlcnR5RGVzY3JpcHRvcihPYmplY3Qgb2JqZWN0KSB7CisJCWl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzLmFkZAorCQkJKGNyZWF0ZUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IKKwkJCQkoKChDb21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5KWFkYXB0ZXJGYWN0b3J5KS5nZXRSb290QWRhcHRlckZhY3RvcnkoKSwKKwkJCQkgZ2V0UmVzb3VyY2VMb2NhdG9yKCksCisJCQkJIGdldFN0cmluZygiX1VJX1Byb2plY3RlZE1hcEltYWdlTG9nZ2VyX2NvbG9yUHJvdmlkZXJfZmVhdHVyZSIpLAorCQkJCSBnZXRTdHJpbmcoIl9VSV9Qcm9wZXJ0eURlc2NyaXB0b3JfZGVzY3JpcHRpb24iLCAiX1VJX1Byb2plY3RlZE1hcEltYWdlTG9nZ2VyX2NvbG9yUHJvdmlkZXJfZmVhdHVyZSIsICJfVUlfUHJvamVjdGVkTWFwSW1hZ2VMb2dnZXJfdHlwZSIpLAorCQkJCSBJbWFnZXdyaXRlclBhY2thZ2UuTGl0ZXJhbHMuUFJPSkVDVEVEX01BUF9JTUFHRV9MT0dHRVJfX0NPTE9SX1BST1ZJREVSLAorCQkJCSB0cnVlLAorCQkJCSBmYWxzZSwKKwkJCQkgZmFsc2UsCisJCQkJIEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IuR0VORVJJQ19WQUxVRV9JTUFHRSwKKwkJCQkgbnVsbCwKKwkJCQkgbnVsbCkpOworCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyBhIHByb3BlcnR5IGRlc2NyaXB0b3IgZm9yIHRoZSBEZWNvcmF0b3IgZmVhdHVyZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBhZGREZWNvcmF0b3JQcm9wZXJ0eURlc2NyaXB0b3IoT2JqZWN0IG9iamVjdCkgeworCQlpdGVtUHJvcGVydHlEZXNjcmlwdG9ycy5hZGQKKwkJCShjcmVhdGVJdGVtUHJvcGVydHlEZXNjcmlwdG9yCisJCQkJKCgoQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSlhZGFwdGVyRmFjdG9yeSkuZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCksCisJCQkJIGdldFJlc291cmNlTG9jYXRvcigpLAorCQkJCSBnZXRTdHJpbmcoIl9VSV9Qcm9qZWN0ZWRNYXBJbWFnZUxvZ2dlcl9kZWNvcmF0b3JfZmVhdHVyZSIpLAorCQkJCSBnZXRTdHJpbmcoIl9VSV9Qcm9wZXJ0eURlc2NyaXB0b3JfZGVzY3JpcHRpb24iLCAiX1VJX1Byb2plY3RlZE1hcEltYWdlTG9nZ2VyX2RlY29yYXRvcl9mZWF0dXJlIiwgIl9VSV9Qcm9qZWN0ZWRNYXBJbWFnZUxvZ2dlcl90eXBlIiksCisJCQkJIEltYWdld3JpdGVyUGFja2FnZS5MaXRlcmFscy5QUk9KRUNURURfTUFQX0lNQUdFX0xPR0dFUl9fREVDT1JBVE9SLAorCQkJCSB0cnVlLAorCQkJCSBmYWxzZSwKKwkJCQkgdHJ1ZSwKKwkJCQkgbnVsbCwKKwkJCQkgbnVsbCwKKwkJCQkgbnVsbCkpOworCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyBhIHByb3BlcnR5IGRlc2NyaXB0b3IgZm9yIHRoZSBEZWNvcmF0b3IgUHJvcGVydGllcyBmZWF0dXJlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIGFkZERlY29yYXRvclByb3BlcnRpZXNQcm9wZXJ0eURlc2NyaXB0b3IoT2JqZWN0IG9iamVjdCkgeworCQlpdGVtUHJvcGVydHlEZXNjcmlwdG9ycy5hZGQKKwkJCShjcmVhdGVJdGVtUHJvcGVydHlEZXNjcmlwdG9yCisJCQkJKCgoQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSlhZGFwdGVyRmFjdG9yeSkuZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCksCisJCQkJIGdldFJlc291cmNlTG9jYXRvcigpLAorCQkJCSBnZXRTdHJpbmcoIl9VSV9Qcm9qZWN0ZWRNYXBJbWFnZUxvZ2dlcl9kZWNvcmF0b3JQcm9wZXJ0aWVzX2ZlYXR1cmUiKSwKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfUHJvcGVydHlEZXNjcmlwdG9yX2Rlc2NyaXB0aW9uIiwgIl9VSV9Qcm9qZWN0ZWRNYXBJbWFnZUxvZ2dlcl9kZWNvcmF0b3JQcm9wZXJ0aWVzX2ZlYXR1cmUiLCAiX1VJX1Byb2plY3RlZE1hcEltYWdlTG9nZ2VyX3R5cGUiKSwKKwkJCQkgSW1hZ2V3cml0ZXJQYWNrYWdlLkxpdGVyYWxzLlBST0pFQ1RFRF9NQVBfSU1BR0VfTE9HR0VSX19ERUNPUkFUT1JfUFJPUEVSVElFUywKKwkJCQkgdHJ1ZSwKKwkJCQkgZmFsc2UsCisJCQkJIGZhbHNlLAorCQkJCSBJdGVtUHJvcGVydHlEZXNjcmlwdG9yLkdFTkVSSUNfVkFMVUVfSU1BR0UsCisJCQkJIG51bGwsCisJCQkJIG51bGwpKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFkZHMgYSBwcm9wZXJ0eSBkZXNjcmlwdG9yIGZvciB0aGUgV2lkdGggZmVhdHVyZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBhZGRXaWR0aFByb3BlcnR5RGVzY3JpcHRvcihPYmplY3Qgb2JqZWN0KSB7CisJCWl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzLmFkZAorCQkJKGNyZWF0ZUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IKKwkJCQkoKChDb21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5KWFkYXB0ZXJGYWN0b3J5KS5nZXRSb290QWRhcHRlckZhY3RvcnkoKSwKKwkJCQkgZ2V0UmVzb3VyY2VMb2NhdG9yKCksCisJCQkJIGdldFN0cmluZygiX1VJX1Byb2plY3RlZE1hcEltYWdlTG9nZ2VyX3dpZHRoX2ZlYXR1cmUiKSwKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfUHJvcGVydHlEZXNjcmlwdG9yX2Rlc2NyaXB0aW9uIiwgIl9VSV9Qcm9qZWN0ZWRNYXBJbWFnZUxvZ2dlcl93aWR0aF9mZWF0dXJlIiwgIl9VSV9Qcm9qZWN0ZWRNYXBJbWFnZUxvZ2dlcl90eXBlIiksCisJCQkJIEltYWdld3JpdGVyUGFja2FnZS5MaXRlcmFscy5QUk9KRUNURURfTUFQX0lNQUdFX0xPR0dFUl9fV0lEVEgsCisJCQkJIHRydWUsCisJCQkJIGZhbHNlLAorCQkJCSBmYWxzZSwKKwkJCQkgSXRlbVByb3BlcnR5RGVzY3JpcHRvci5JTlRFR1JBTF9WQUxVRV9JTUFHRSwKKwkJCQkgbnVsbCwKKwkJCQkgbnVsbCkpOworCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyBhIHByb3BlcnR5IGRlc2NyaXB0b3IgZm9yIHRoZSBIZWlnaHQgZmVhdHVyZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBhZGRIZWlnaHRQcm9wZXJ0eURlc2NyaXB0b3IoT2JqZWN0IG9iamVjdCkgeworCQlpdGVtUHJvcGVydHlEZXNjcmlwdG9ycy5hZGQKKwkJCShjcmVhdGVJdGVtUHJvcGVydHlEZXNjcmlwdG9yCisJCQkJKCgoQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSlhZGFwdGVyRmFjdG9yeSkuZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCksCisJCQkJIGdldFJlc291cmNlTG9jYXRvcigpLAorCQkJCSBnZXRTdHJpbmcoIl9VSV9Qcm9qZWN0ZWRNYXBJbWFnZUxvZ2dlcl9oZWlnaHRfZmVhdHVyZSIpLAorCQkJCSBnZXRTdHJpbmcoIl9VSV9Qcm9wZXJ0eURlc2NyaXB0b3JfZGVzY3JpcHRpb24iLCAiX1VJX1Byb2plY3RlZE1hcEltYWdlTG9nZ2VyX2hlaWdodF9mZWF0dXJlIiwgIl9VSV9Qcm9qZWN0ZWRNYXBJbWFnZUxvZ2dlcl90eXBlIiksCisJCQkJIEltYWdld3JpdGVyUGFja2FnZS5MaXRlcmFscy5QUk9KRUNURURfTUFQX0lNQUdFX0xPR0dFUl9fSEVJR0hULAorCQkJCSB0cnVlLAorCQkJCSBmYWxzZSwKKwkJCQkgZmFsc2UsCisJCQkJIEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IuSU5URUdSQUxfVkFMVUVfSU1BR0UsCisJCQkJIG51bGwsCisJCQkJIG51bGwpKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFkZHMgYSBwcm9wZXJ0eSBkZXNjcmlwdG9yIGZvciB0aGUgUHJvamVjdGlvbiBmZWF0dXJlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIGFkZFByb2plY3Rpb25Qcm9wZXJ0eURlc2NyaXB0b3IoT2JqZWN0IG9iamVjdCkgeworCQlpdGVtUHJvcGVydHlEZXNjcmlwdG9ycy5hZGQKKwkJCShjcmVhdGVJdGVtUHJvcGVydHlEZXNjcmlwdG9yCisJCQkJKCgoQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSlhZGFwdGVyRmFjdG9yeSkuZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCksCisJCQkJIGdldFJlc291cmNlTG9jYXRvcigpLAorCQkJCSBnZXRTdHJpbmcoIl9VSV9Qcm9qZWN0ZWRNYXBJbWFnZUxvZ2dlcl9wcm9qZWN0aW9uX2ZlYXR1cmUiKSwKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfUHJvcGVydHlEZXNjcmlwdG9yX2Rlc2NyaXB0aW9uIiwgIl9VSV9Qcm9qZWN0ZWRNYXBJbWFnZUxvZ2dlcl9wcm9qZWN0aW9uX2ZlYXR1cmUiLCAiX1VJX1Byb2plY3RlZE1hcEltYWdlTG9nZ2VyX3R5cGUiKSwKKwkJCQkgSW1hZ2V3cml0ZXJQYWNrYWdlLkxpdGVyYWxzLlBST0pFQ1RFRF9NQVBfSU1BR0VfTE9HR0VSX19QUk9KRUNUSU9OLAorCQkJCSB0cnVlLAorCQkJCSBmYWxzZSwKKwkJCQkgZmFsc2UsCisJCQkJIEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IuR0VORVJJQ19WQUxVRV9JTUFHRSwKKwkJCQkgbnVsbCwKKwkJCQkgbnVsbCkpOworCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyBQcm9qZWN0ZWRNYXBJbWFnZUxvZ2dlci5naWYuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIE9iamVjdCBnZXRJbWFnZShPYmplY3Qgb2JqZWN0KSB7CisJCXJldHVybiBvdmVybGF5SW1hZ2Uob2JqZWN0LCBnZXRSZXNvdXJjZUxvY2F0b3IoKS5nZXRJbWFnZSgiZnVsbC9vYmoxNi9Qcm9qZWN0ZWRNYXBJbWFnZUxvZ2dlciIpKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgdGhlIGxhYmVsIHRleHQgZm9yIHRoZSBhZGFwdGVkIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBTdHJpbmcgZ2V0VGV4dChPYmplY3Qgb2JqZWN0KSB7CisJCVVSSSBsYWJlbFZhbHVlID0gKChQcm9qZWN0ZWRNYXBJbWFnZUxvZ2dlcilvYmplY3QpLmdldFVSSSgpOworCQlTdHJpbmcgbGFiZWwgPSBsYWJlbFZhbHVlID09IG51bGwgPyBudWxsIDogbGFiZWxWYWx1ZS50b1N0cmluZygpOworCQlyZXR1cm4gbGFiZWwgPT0gbnVsbCB8fCBsYWJlbC5sZW5ndGgoKSA9PSAwID8KKwkJCWdldFN0cmluZygiX1VJX1Byb2plY3RlZE1hcEltYWdlTG9nZ2VyX3R5cGUiKSA6CisJCQlnZXRTdHJpbmcoIl9VSV9Qcm9qZWN0ZWRNYXBJbWFnZUxvZ2dlcl90eXBlIikgKyAiICIgKyBsYWJlbDsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGhhbmRsZXMgbW9kZWwgbm90aWZpY2F0aW9ucyBieSBjYWxsaW5nIHtAbGluayAjdXBkYXRlQ2hpbGRyZW59IHRvIHVwZGF0ZSBhbnkgY2FjaGVkCisJICogY2hpbGRyZW4gYW5kIGJ5IGNyZWF0aW5nIGEgdmlld2VyIG5vdGlmaWNhdGlvbiwgd2hpY2ggaXQgcGFzc2VzIHRvIHtAbGluayAjZmlyZU5vdGlmeUNoYW5nZWR9LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIG5vdGlmeUNoYW5nZWQoTm90aWZpY2F0aW9uIG5vdGlmaWNhdGlvbikgeworCQl1cGRhdGVDaGlsZHJlbihub3RpZmljYXRpb24pOworCisJCXN3aXRjaCAobm90aWZpY2F0aW9uLmdldEZlYXR1cmVJRChQcm9qZWN0ZWRNYXBJbWFnZUxvZ2dlci5jbGFzcykpIHsKKwkJCWNhc2UgSW1hZ2V3cml0ZXJQYWNrYWdlLlBST0pFQ1RFRF9NQVBfSU1BR0VfTE9HR0VSX19VU0VfTE9HX1NDQUxJTkc6CisJCQljYXNlIEltYWdld3JpdGVyUGFja2FnZS5QUk9KRUNURURfTUFQX0lNQUdFX0xPR0dFUl9fR0FJTjoKKwkJCWNhc2UgSW1hZ2V3cml0ZXJQYWNrYWdlLlBST0pFQ1RFRF9NQVBfSU1BR0VfTE9HR0VSX19MT0dfQUxMX0RFQ09SQVRPUlM6CisJCQljYXNlIEltYWdld3JpdGVyUGFja2FnZS5QUk9KRUNURURfTUFQX0lNQUdFX0xPR0dFUl9fQ09MT1JfUFJPVklERVI6CisJCQljYXNlIEltYWdld3JpdGVyUGFja2FnZS5QUk9KRUNURURfTUFQX0lNQUdFX0xPR0dFUl9fREVDT1JBVE9SX1BST1BFUlRJRVM6CisJCQljYXNlIEltYWdld3JpdGVyUGFja2FnZS5QUk9KRUNURURfTUFQX0lNQUdFX0xPR0dFUl9fV0lEVEg6CisJCQljYXNlIEltYWdld3JpdGVyUGFja2FnZS5QUk9KRUNURURfTUFQX0lNQUdFX0xPR0dFUl9fSEVJR0hUOgorCQkJY2FzZSBJbWFnZXdyaXRlclBhY2thZ2UuUFJPSkVDVEVEX01BUF9JTUFHRV9MT0dHRVJfX1BST0pFQ1RJT046CisJCQkJZmlyZU5vdGlmeUNoYW5nZWQobmV3IFZpZXdlck5vdGlmaWNhdGlvbihub3RpZmljYXRpb24sIG5vdGlmaWNhdGlvbi5nZXROb3RpZmllcigpLCBmYWxzZSwgdHJ1ZSkpOworCQkJCXJldHVybjsKKwkJfQorCQlzdXBlci5ub3RpZnlDaGFuZ2VkKG5vdGlmaWNhdGlvbik7CisJfQorCisJLyoqCisJICogVGhpcyBhZGRzIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuZWRpdC5jb21tYW5kLkNvbW1hbmRQYXJhbWV0ZXJ9cyBkZXNjcmliaW5nIHRoZSBjaGlsZHJlbgorCSAqIHRoYXQgY2FuIGJlIGNyZWF0ZWQgdW5kZXIgdGhpcyBvYmplY3QuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgY29sbGVjdE5ld0NoaWxkRGVzY3JpcHRvcnMoQ29sbGVjdGlvbjxPYmplY3Q+IG5ld0NoaWxkRGVzY3JpcHRvcnMsIE9iamVjdCBvYmplY3QpIHsKKwkJc3VwZXIuY29sbGVjdE5ld0NoaWxkRGVzY3JpcHRvcnMobmV3Q2hpbGREZXNjcmlwdG9ycywgb2JqZWN0KTsKKwl9CisKK30KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzLmltYWdld3JpdGVyL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2xvZ2dlcnMvaW1hZ2V3cml0ZXIvdXRpbC9JbWFnZXdyaXRlckFkYXB0ZXJGYWN0b3J5LmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy5pbWFnZXdyaXRlci9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9sb2dnZXJzL2ltYWdld3JpdGVyL3V0aWwvSW1hZ2V3cml0ZXJBZGFwdGVyRmFjdG9yeS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU3NDcxMGIKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy5pbWFnZXdyaXRlci9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9sb2dnZXJzL2ltYWdld3JpdGVyL3V0aWwvSW1hZ2V3cml0ZXJBZGFwdGVyRmFjdG9yeS5qYXZhCkBAIC0wLDAgKzEsMjc1IEBACisvKioKKyAqIDxjb3B5cmlnaHQ+CisgKiA8L2NvcHlyaWdodD4KKyAqCisgKiAkSWQkCisgKi8KK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzLmltYWdld3JpdGVyLnV0aWw7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5BZGFwdGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWVyOworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuaW1wbC5BZGFwdGVyRmFjdG9yeUltcGw7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uSWRlbnRpZmlhYmxlOworCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmxvZ2dlci5Mb2dnZXI7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMuU2ltdWxhdGlvbkxvZ2dlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMuU3luY2hyb25vdXNMb2dnZXI7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMuaW1hZ2V3cml0ZXIuKjsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogVGhlIDxiPkFkYXB0ZXIgRmFjdG9yeTwvYj4gZm9yIHRoZSBtb2RlbC4KKyAqIEl0IHByb3ZpZGVzIGFuIGFkYXB0ZXIgPGNvZGU+Y3JlYXRlWFhYPC9jb2RlPiBtZXRob2QgZm9yIGVhY2ggY2xhc3Mgb2YgdGhlIG1vZGVsLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy5pbWFnZXdyaXRlci5JbWFnZXdyaXRlclBhY2thZ2UKKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIEltYWdld3JpdGVyQWRhcHRlckZhY3RvcnkgZXh0ZW5kcyBBZGFwdGVyRmFjdG9yeUltcGwgeworCS8qKgorCSAqIFRoZSBjYWNoZWQgbW9kZWwgcGFja2FnZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgc3RhdGljIEltYWdld3JpdGVyUGFja2FnZSBtb2RlbFBhY2thZ2U7CisKKwkvKioKKwkgKiBDcmVhdGVzIGFuIGluc3RhbmNlIG9mIHRoZSBhZGFwdGVyIGZhY3RvcnkuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEltYWdld3JpdGVyQWRhcHRlckZhY3RvcnkoKSB7CisJCWlmIChtb2RlbFBhY2thZ2UgPT0gbnVsbCkgeworCQkJbW9kZWxQYWNrYWdlID0gSW1hZ2V3cml0ZXJQYWNrYWdlLmVJTlNUQU5DRTsKKwkJfQorCX0KKworCS8qKgorCSAqIFJldHVybnMgd2hldGhlciB0aGlzIGZhY3RvcnkgaXMgYXBwbGljYWJsZSBmb3IgdGhlIHR5cGUgb2YgdGhlIG9iamVjdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyA8Y29kZT50cnVlPC9jb2RlPiBpZiB0aGUgb2JqZWN0IGlzIGVpdGhlciB0aGUgbW9kZWwncyBwYWNrYWdlIG9yIGlzIGFuIGluc3RhbmNlIG9iamVjdCBvZiB0aGUgbW9kZWwuCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB3aGV0aGVyIHRoaXMgZmFjdG9yeSBpcyBhcHBsaWNhYmxlIGZvciB0aGUgdHlwZSBvZiB0aGUgb2JqZWN0LgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgYm9vbGVhbiBpc0ZhY3RvcnlGb3JUeXBlKE9iamVjdCBvYmplY3QpIHsKKwkJaWYgKG9iamVjdCA9PSBtb2RlbFBhY2thZ2UpIHsKKwkJCXJldHVybiB0cnVlOworCQl9CisJCWlmIChvYmplY3QgaW5zdGFuY2VvZiBFT2JqZWN0KSB7CisJCQlyZXR1cm4gKChFT2JqZWN0KW9iamVjdCkuZUNsYXNzKCkuZ2V0RVBhY2thZ2UoKSA9PSBtb2RlbFBhY2thZ2U7CisJCX0KKwkJcmV0dXJuIGZhbHNlOworCX0KKworCS8qKgorCSAqIFRoZSBzd2l0Y2ggdGhhdCBkZWxlZ2F0ZXMgdG8gdGhlIDxjb2RlPmNyZWF0ZVhYWDwvY29kZT4gbWV0aG9kcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgSW1hZ2V3cml0ZXJTd2l0Y2g8QWRhcHRlcj4gbW9kZWxTd2l0Y2ggPQorCQluZXcgSW1hZ2V3cml0ZXJTd2l0Y2g8QWRhcHRlcj4oKSB7CisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyBBZGFwdGVyIGNhc2VJbWFnZVdyaXRlckxvZ2dlcihJbWFnZVdyaXRlckxvZ2dlciBvYmplY3QpIHsKKwkJCQlyZXR1cm4gY3JlYXRlSW1hZ2VXcml0ZXJMb2dnZXJBZGFwdGVyKCk7CisJCQl9CisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyBBZGFwdGVyIGNhc2VQcm9qZWN0ZWRNYXBJbWFnZUxvZ2dlcihQcm9qZWN0ZWRNYXBJbWFnZUxvZ2dlciBvYmplY3QpIHsKKwkJCQlyZXR1cm4gY3JlYXRlUHJvamVjdGVkTWFwSW1hZ2VMb2dnZXJBZGFwdGVyKCk7CisJCQl9CisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyBBZGFwdGVyIGNhc2VNYXBWaWV3SW1hZ2VXcml0ZXJMb2dnZXIoTWFwVmlld0ltYWdlV3JpdGVyTG9nZ2VyIG9iamVjdCkgeworCQkJCXJldHVybiBjcmVhdGVNYXBWaWV3SW1hZ2VXcml0ZXJMb2dnZXJBZGFwdGVyKCk7CisJCQl9CisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyBBZGFwdGVyIGNhc2VFcXVpcmVjdGFuZ3VsYXJNYXBMb2dnZXIoRXF1aXJlY3Rhbmd1bGFyTWFwTG9nZ2VyIG9iamVjdCkgeworCQkJCXJldHVybiBjcmVhdGVFcXVpcmVjdGFuZ3VsYXJNYXBMb2dnZXJBZGFwdGVyKCk7CisJCQl9CisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyA8VD4gQWRhcHRlciBjYXNlQ29tcGFyYWJsZShDb21wYXJhYmxlPFQ+IG9iamVjdCkgeworCQkJCXJldHVybiBjcmVhdGVDb21wYXJhYmxlQWRhcHRlcigpOworCQkJfQorCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgQWRhcHRlciBjYXNlSWRlbnRpZmlhYmxlKElkZW50aWZpYWJsZSBvYmplY3QpIHsKKwkJCQlyZXR1cm4gY3JlYXRlSWRlbnRpZmlhYmxlQWRhcHRlcigpOworCQkJfQorCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgQWRhcHRlciBjYXNlTG9nZ2VyKExvZ2dlciBvYmplY3QpIHsKKwkJCQlyZXR1cm4gY3JlYXRlTG9nZ2VyQWRhcHRlcigpOworCQkJfQorCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgQWRhcHRlciBjYXNlU2ltdWxhdGlvbkxvZ2dlcihTaW11bGF0aW9uTG9nZ2VyIG9iamVjdCkgeworCQkJCXJldHVybiBjcmVhdGVTaW11bGF0aW9uTG9nZ2VyQWRhcHRlcigpOworCQkJfQorCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgQWRhcHRlciBjYXNlU3luY2hyb25vdXNMb2dnZXIoU3luY2hyb25vdXNMb2dnZXIgb2JqZWN0KSB7CisJCQkJcmV0dXJuIGNyZWF0ZVN5bmNocm9ub3VzTG9nZ2VyQWRhcHRlcigpOworCQkJfQorCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgQWRhcHRlciBkZWZhdWx0Q2FzZShFT2JqZWN0IG9iamVjdCkgeworCQkJCXJldHVybiBjcmVhdGVFT2JqZWN0QWRhcHRlcigpOworCQkJfQorCQl9OworCisJLyoqCisJICogQ3JlYXRlcyBhbiBhZGFwdGVyIGZvciB0aGUgPGNvZGU+dGFyZ2V0PC9jb2RlPi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSB0YXJnZXQgdGhlIG9iamVjdCB0byBhZGFwdC4KKwkgKiBAcmV0dXJuIHRoZSBhZGFwdGVyIGZvciB0aGUgPGNvZGU+dGFyZ2V0PC9jb2RlPi4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlQWRhcHRlcihOb3RpZmllciB0YXJnZXQpIHsKKwkJcmV0dXJuIG1vZGVsU3dpdGNoLmRvU3dpdGNoKChFT2JqZWN0KXRhcmdldCk7CisJfQorCisKKwkvKioKKwkgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy5pbWFnZXdyaXRlci5JbWFnZVdyaXRlckxvZ2dlciA8ZW0+SW1hZ2UgV3JpdGVyIExvZ2dlcjwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7CisJICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMuaW1hZ2V3cml0ZXIuSW1hZ2VXcml0ZXJMb2dnZXIKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlSW1hZ2VXcml0ZXJMb2dnZXJBZGFwdGVyKCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy5pbWFnZXdyaXRlci5Qcm9qZWN0ZWRNYXBJbWFnZUxvZ2dlciA8ZW0+UHJvamVjdGVkIE1hcCBJbWFnZSBMb2dnZXI8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOworCSAqIGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZSB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5LgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzLmltYWdld3JpdGVyLlByb2plY3RlZE1hcEltYWdlTG9nZ2VyCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZVByb2plY3RlZE1hcEltYWdlTG9nZ2VyQWRhcHRlcigpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMuaW1hZ2V3cml0ZXIuTWFwVmlld0ltYWdlV3JpdGVyTG9nZ2VyIDxlbT5NYXAgVmlldyBJbWFnZSBXcml0ZXIgTG9nZ2VyPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsKKwkgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy5pbWFnZXdyaXRlci5NYXBWaWV3SW1hZ2VXcml0ZXJMb2dnZXIKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlTWFwVmlld0ltYWdlV3JpdGVyTG9nZ2VyQWRhcHRlcigpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMuaW1hZ2V3cml0ZXIuRXF1aXJlY3Rhbmd1bGFyTWFwTG9nZ2VyIDxlbT5FcXVpcmVjdGFuZ3VsYXIgTWFwIExvZ2dlcjwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7CisJICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMuaW1hZ2V3cml0ZXIuRXF1aXJlY3Rhbmd1bGFyTWFwTG9nZ2VyCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZUVxdWlyZWN0YW5ndWxhck1hcExvZ2dlckFkYXB0ZXIoKSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgamF2YS5sYW5nLkNvbXBhcmFibGUgPGVtPkNvbXBhcmFibGU8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOworCSAqIGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZSB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5LgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgorCSAqIEBzZWUgamF2YS5sYW5nLkNvbXBhcmFibGUKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlQ29tcGFyYWJsZUFkYXB0ZXIoKSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5JZGVudGlmaWFibGUgPGVtPklkZW50aWZpYWJsZTwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7CisJICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLklkZW50aWZpYWJsZQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVJZGVudGlmaWFibGVBZGFwdGVyKCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5sb2dnZXIuTG9nZ2VyIDxlbT5Mb2dnZXI8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOworCSAqIGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZSB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5LgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmxvZ2dlci5Mb2dnZXIKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlTG9nZ2VyQWRhcHRlcigpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMuU2ltdWxhdGlvbkxvZ2dlciA8ZW0+U2ltdWxhdGlvbiBMb2dnZXI8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOworCSAqIGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZSB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5LgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzLlNpbXVsYXRpb25Mb2dnZXIKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlU2ltdWxhdGlvbkxvZ2dlckFkYXB0ZXIoKSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzLlN5bmNocm9ub3VzTG9nZ2VyIDxlbT5TeW5jaHJvbm91cyBMb2dnZXI8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOworCSAqIGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZSB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5LgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzLlN5bmNocm9ub3VzTG9nZ2VyCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZVN5bmNocm9ub3VzTG9nZ2VyQWRhcHRlcigpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciB0aGUgZGVmYXVsdCBjYXNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbC4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlRU9iamVjdEFkYXB0ZXIoKSB7CisJCXJldHVybiBudWxsOworCX0KKworfSAvL0ltYWdld3JpdGVyQWRhcHRlckZhY3RvcnkKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzLmltYWdld3JpdGVyL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2xvZ2dlcnMvaW1hZ2V3cml0ZXIvdXRpbC9JbWFnZXdyaXRlclN3aXRjaC5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMuaW1hZ2V3cml0ZXIvc3JjL29yZy9lY2xpcHNlL3N0ZW0vbG9nZ2Vycy9pbWFnZXdyaXRlci91dGlsL0ltYWdld3JpdGVyU3dpdGNoLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2E2ODgxZAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzLmltYWdld3JpdGVyL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2xvZ2dlcnMvaW1hZ2V3cml0ZXIvdXRpbC9JbWFnZXdyaXRlclN3aXRjaC5qYXZhCkBAIC0wLDAgKzEsMjk5IEBACisvKioKKyAqIDxjb3B5cmlnaHQ+CisgKiA8L2NvcHlyaWdodD4KKyAqCisgKiAkSWQkCisgKi8KK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzLmltYWdld3JpdGVyLnV0aWw7CisKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3Q7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLklkZW50aWZpYWJsZTsKKworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5sb2dnZXIuTG9nZ2VyOworCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzLlNpbXVsYXRpb25Mb2dnZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzLlN5bmNocm9ub3VzTG9nZ2VyOworCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzLmltYWdld3JpdGVyLio7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIFRoZSA8Yj5Td2l0Y2g8L2I+IGZvciB0aGUgbW9kZWwncyBpbmhlcml0YW5jZSBoaWVyYXJjaHkuCisgKiBJdCBzdXBwb3J0cyB0aGUgY2FsbCB7QGxpbmsgI2RvU3dpdGNoKEVPYmplY3QpIGRvU3dpdGNoKG9iamVjdCl9CisgKiB0byBpbnZva2UgdGhlIDxjb2RlPmNhc2VYWFg8L2NvZGU+IG1ldGhvZCBmb3IgZWFjaCBjbGFzcyBvZiB0aGUgbW9kZWwsCisgKiBzdGFydGluZyB3aXRoIHRoZSBhY3R1YWwgY2xhc3Mgb2YgdGhlIG9iamVjdAorICogYW5kIHByb2NlZWRpbmcgdXAgdGhlIGluaGVyaXRhbmNlIGhpZXJhcmNoeQorICogdW50aWwgYSBub24tbnVsbCByZXN1bHQgaXMgcmV0dXJuZWQsCisgKiB3aGljaCBpcyB0aGUgcmVzdWx0IG9mIHRoZSBzd2l0Y2guCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzLmltYWdld3JpdGVyLkltYWdld3JpdGVyUGFja2FnZQorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgSW1hZ2V3cml0ZXJTd2l0Y2g8VDE+IHsKKwkvKioKKwkgKiBUaGUgY2FjaGVkIG1vZGVsIHBhY2thZ2UKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgc3RhdGljIEltYWdld3JpdGVyUGFja2FnZSBtb2RlbFBhY2thZ2U7CisKKwkvKioKKwkgKiBDcmVhdGVzIGFuIGluc3RhbmNlIG9mIHRoZSBzd2l0Y2guCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEltYWdld3JpdGVyU3dpdGNoKCkgeworCQlpZiAobW9kZWxQYWNrYWdlID09IG51bGwpIHsKKwkJCW1vZGVsUGFja2FnZSA9IEltYWdld3JpdGVyUGFja2FnZS5lSU5TVEFOQ0U7CisJCX0KKwl9CisKKwkvKioKKwkgKiBDYWxscyA8Y29kZT5jYXNlWFhYPC9jb2RlPiBmb3IgZWFjaCBjbGFzcyBvZiB0aGUgbW9kZWwgdW50aWwgb25lIHJldHVybnMgYSBub24gbnVsbCByZXN1bHQ7IGl0IHlpZWxkcyB0aGF0IHJlc3VsdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIGZpcnN0IG5vbi1udWxsIHJlc3VsdCByZXR1cm5lZCBieSBhIDxjb2RlPmNhc2VYWFg8L2NvZGU+IGNhbGwuCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBUMSBkb1N3aXRjaChFT2JqZWN0IHRoZUVPYmplY3QpIHsKKwkJcmV0dXJuIGRvU3dpdGNoKHRoZUVPYmplY3QuZUNsYXNzKCksIHRoZUVPYmplY3QpOworCX0KKworCS8qKgorCSAqIENhbGxzIDxjb2RlPmNhc2VYWFg8L2NvZGU+IGZvciBlYWNoIGNsYXNzIG9mIHRoZSBtb2RlbCB1bnRpbCBvbmUgcmV0dXJucyBhIG5vbiBudWxsIHJlc3VsdDsgaXQgeWllbGRzIHRoYXQgcmVzdWx0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgZmlyc3Qgbm9uLW51bGwgcmVzdWx0IHJldHVybmVkIGJ5IGEgPGNvZGU+Y2FzZVhYWDwvY29kZT4gY2FsbC4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIFQxIGRvU3dpdGNoKEVDbGFzcyB0aGVFQ2xhc3MsIEVPYmplY3QgdGhlRU9iamVjdCkgeworCQlpZiAodGhlRUNsYXNzLmVDb250YWluZXIoKSA9PSBtb2RlbFBhY2thZ2UpIHsKKwkJCXJldHVybiBkb1N3aXRjaCh0aGVFQ2xhc3MuZ2V0Q2xhc3NpZmllcklEKCksIHRoZUVPYmplY3QpOworCQl9CisJCWVsc2UgeworCQkJTGlzdDxFQ2xhc3M+IGVTdXBlclR5cGVzID0gdGhlRUNsYXNzLmdldEVTdXBlclR5cGVzKCk7CisJCQlyZXR1cm4KKwkJCQllU3VwZXJUeXBlcy5pc0VtcHR5KCkgPworCQkJCQlkZWZhdWx0Q2FzZSh0aGVFT2JqZWN0KSA6CisJCQkJCWRvU3dpdGNoKGVTdXBlclR5cGVzLmdldCgwKSwgdGhlRU9iamVjdCk7CisJCX0KKwl9CisKKwkvKioKKwkgKiBDYWxscyA8Y29kZT5jYXNlWFhYPC9jb2RlPiBmb3IgZWFjaCBjbGFzcyBvZiB0aGUgbW9kZWwgdW50aWwgb25lIHJldHVybnMgYSBub24gbnVsbCByZXN1bHQ7IGl0IHlpZWxkcyB0aGF0IHJlc3VsdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIGZpcnN0IG5vbi1udWxsIHJlc3VsdCByZXR1cm5lZCBieSBhIDxjb2RlPmNhc2VYWFg8L2NvZGU+IGNhbGwuCisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBUMSBkb1N3aXRjaChpbnQgY2xhc3NpZmllcklELCBFT2JqZWN0IHRoZUVPYmplY3QpIHsKKwkJc3dpdGNoIChjbGFzc2lmaWVySUQpIHsKKwkJCWNhc2UgSW1hZ2V3cml0ZXJQYWNrYWdlLklNQUdFX1dSSVRFUl9MT0dHRVI6IHsKKwkJCQlJbWFnZVdyaXRlckxvZ2dlciBpbWFnZVdyaXRlckxvZ2dlciA9IChJbWFnZVdyaXRlckxvZ2dlcil0aGVFT2JqZWN0OworCQkJCVQxIHJlc3VsdCA9IGNhc2VJbWFnZVdyaXRlckxvZ2dlcihpbWFnZVdyaXRlckxvZ2dlcik7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlU3luY2hyb25vdXNMb2dnZXIoaW1hZ2VXcml0ZXJMb2dnZXIpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZVNpbXVsYXRpb25Mb2dnZXIoaW1hZ2VXcml0ZXJMb2dnZXIpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZUxvZ2dlcihpbWFnZVdyaXRlckxvZ2dlcik7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlSWRlbnRpZmlhYmxlKGltYWdlV3JpdGVyTG9nZ2VyKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VDb21wYXJhYmxlKGltYWdlV3JpdGVyTG9nZ2VyKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGRlZmF1bHRDYXNlKHRoZUVPYmplY3QpOworCQkJCXJldHVybiByZXN1bHQ7CisJCQl9CisJCQljYXNlIEltYWdld3JpdGVyUGFja2FnZS5QUk9KRUNURURfTUFQX0lNQUdFX0xPR0dFUjogeworCQkJCVByb2plY3RlZE1hcEltYWdlTG9nZ2VyIHByb2plY3RlZE1hcEltYWdlTG9nZ2VyID0gKFByb2plY3RlZE1hcEltYWdlTG9nZ2VyKXRoZUVPYmplY3Q7CisJCQkJVDEgcmVzdWx0ID0gY2FzZVByb2plY3RlZE1hcEltYWdlTG9nZ2VyKHByb2plY3RlZE1hcEltYWdlTG9nZ2VyKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VJbWFnZVdyaXRlckxvZ2dlcihwcm9qZWN0ZWRNYXBJbWFnZUxvZ2dlcik7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlU3luY2hyb25vdXNMb2dnZXIocHJvamVjdGVkTWFwSW1hZ2VMb2dnZXIpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZVNpbXVsYXRpb25Mb2dnZXIocHJvamVjdGVkTWFwSW1hZ2VMb2dnZXIpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZUxvZ2dlcihwcm9qZWN0ZWRNYXBJbWFnZUxvZ2dlcik7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlSWRlbnRpZmlhYmxlKHByb2plY3RlZE1hcEltYWdlTG9nZ2VyKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VDb21wYXJhYmxlKHByb2plY3RlZE1hcEltYWdlTG9nZ2VyKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGRlZmF1bHRDYXNlKHRoZUVPYmplY3QpOworCQkJCXJldHVybiByZXN1bHQ7CisJCQl9CisJCQljYXNlIEltYWdld3JpdGVyUGFja2FnZS5NQVBfVklFV19JTUFHRV9XUklURVJfTE9HR0VSOiB7CisJCQkJTWFwVmlld0ltYWdlV3JpdGVyTG9nZ2VyIG1hcFZpZXdJbWFnZVdyaXRlckxvZ2dlciA9IChNYXBWaWV3SW1hZ2VXcml0ZXJMb2dnZXIpdGhlRU9iamVjdDsKKwkJCQlUMSByZXN1bHQgPSBjYXNlTWFwVmlld0ltYWdlV3JpdGVyTG9nZ2VyKG1hcFZpZXdJbWFnZVdyaXRlckxvZ2dlcik7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlSW1hZ2VXcml0ZXJMb2dnZXIobWFwVmlld0ltYWdlV3JpdGVyTG9nZ2VyKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VTeW5jaHJvbm91c0xvZ2dlcihtYXBWaWV3SW1hZ2VXcml0ZXJMb2dnZXIpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZVNpbXVsYXRpb25Mb2dnZXIobWFwVmlld0ltYWdlV3JpdGVyTG9nZ2VyKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VMb2dnZXIobWFwVmlld0ltYWdlV3JpdGVyTG9nZ2VyKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VJZGVudGlmaWFibGUobWFwVmlld0ltYWdlV3JpdGVyTG9nZ2VyKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VDb21wYXJhYmxlKG1hcFZpZXdJbWFnZVdyaXRlckxvZ2dlcik7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBkZWZhdWx0Q2FzZSh0aGVFT2JqZWN0KTsKKwkJCQlyZXR1cm4gcmVzdWx0OworCQkJfQorCQkJY2FzZSBJbWFnZXdyaXRlclBhY2thZ2UuRVFVSVJFQ1RBTkdVTEFSX01BUF9MT0dHRVI6IHsKKwkJCQlFcXVpcmVjdGFuZ3VsYXJNYXBMb2dnZXIgZXF1aXJlY3Rhbmd1bGFyTWFwTG9nZ2VyID0gKEVxdWlyZWN0YW5ndWxhck1hcExvZ2dlcil0aGVFT2JqZWN0OworCQkJCVQxIHJlc3VsdCA9IGNhc2VFcXVpcmVjdGFuZ3VsYXJNYXBMb2dnZXIoZXF1aXJlY3Rhbmd1bGFyTWFwTG9nZ2VyKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VQcm9qZWN0ZWRNYXBJbWFnZUxvZ2dlcihlcXVpcmVjdGFuZ3VsYXJNYXBMb2dnZXIpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZUltYWdlV3JpdGVyTG9nZ2VyKGVxdWlyZWN0YW5ndWxhck1hcExvZ2dlcik7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlU3luY2hyb25vdXNMb2dnZXIoZXF1aXJlY3Rhbmd1bGFyTWFwTG9nZ2VyKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VTaW11bGF0aW9uTG9nZ2VyKGVxdWlyZWN0YW5ndWxhck1hcExvZ2dlcik7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlTG9nZ2VyKGVxdWlyZWN0YW5ndWxhck1hcExvZ2dlcik7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlSWRlbnRpZmlhYmxlKGVxdWlyZWN0YW5ndWxhck1hcExvZ2dlcik7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlQ29tcGFyYWJsZShlcXVpcmVjdGFuZ3VsYXJNYXBMb2dnZXIpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gZGVmYXVsdENhc2UodGhlRU9iamVjdCk7CisJCQkJcmV0dXJuIHJlc3VsdDsKKwkJCX0KKwkJCWRlZmF1bHQ6IHJldHVybiBkZWZhdWx0Q2FzZSh0aGVFT2JqZWN0KTsKKwkJfQorCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkltYWdlIFdyaXRlciBMb2dnZXI8L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsKKwkgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KKwkgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5JbWFnZSBXcml0ZXIgTG9nZ2VyPC9lbT4nLgorCSAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVDEgY2FzZUltYWdlV3JpdGVyTG9nZ2VyKEltYWdlV3JpdGVyTG9nZ2VyIG9iamVjdCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5Qcm9qZWN0ZWQgTWFwIEltYWdlIExvZ2dlcjwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOworCSAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgorCSAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPlByb2plY3RlZCBNYXAgSW1hZ2UgTG9nZ2VyPC9lbT4nLgorCSAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVDEgY2FzZVByb2plY3RlZE1hcEltYWdlTG9nZ2VyKFByb2plY3RlZE1hcEltYWdlTG9nZ2VyIG9iamVjdCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5NYXAgVmlldyBJbWFnZSBXcml0ZXIgTG9nZ2VyPC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7CisJICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCisJICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+TWFwIFZpZXcgSW1hZ2UgV3JpdGVyIExvZ2dlcjwvZW0+Jy4KKwkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFQxIGNhc2VNYXBWaWV3SW1hZ2VXcml0ZXJMb2dnZXIoTWFwVmlld0ltYWdlV3JpdGVyTG9nZ2VyIG9iamVjdCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5FcXVpcmVjdGFuZ3VsYXIgTWFwIExvZ2dlcjwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOworCSAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgorCSAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkVxdWlyZWN0YW5ndWxhciBNYXAgTG9nZ2VyPC9lbT4nLgorCSAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVDEgY2FzZUVxdWlyZWN0YW5ndWxhck1hcExvZ2dlcihFcXVpcmVjdGFuZ3VsYXJNYXBMb2dnZXIgb2JqZWN0KSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkNvbXBhcmFibGU8L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsKKwkgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KKwkgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5Db21wYXJhYmxlPC9lbT4nLgorCSAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgPFQ+IFQxIGNhc2VDb21wYXJhYmxlKENvbXBhcmFibGU8VD4gb2JqZWN0KSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPklkZW50aWZpYWJsZTwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOworCSAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgorCSAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPklkZW50aWZpYWJsZTwvZW0+Jy4KKwkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFQxIGNhc2VJZGVudGlmaWFibGUoSWRlbnRpZmlhYmxlIG9iamVjdCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5Mb2dnZXI8L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsKKwkgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KKwkgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5Mb2dnZXI8L2VtPicuCisJICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBUMSBjYXNlTG9nZ2VyKExvZ2dlciBvYmplY3QpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+U2ltdWxhdGlvbiBMb2dnZXI8L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsKKwkgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KKwkgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5TaW11bGF0aW9uIExvZ2dlcjwvZW0+Jy4KKwkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFQxIGNhc2VTaW11bGF0aW9uTG9nZ2VyKFNpbXVsYXRpb25Mb2dnZXIgb2JqZWN0KSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPlN5bmNocm9ub3VzIExvZ2dlcjwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOworCSAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgorCSAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPlN5bmNocm9ub3VzIExvZ2dlcjwvZW0+Jy4KKwkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFQxIGNhc2VTeW5jaHJvbm91c0xvZ2dlcihTeW5jaHJvbm91c0xvZ2dlciBvYmplY3QpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+RU9iamVjdDwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOworCSAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLCBidXQgdGhpcyBpcyB0aGUgbGFzdCBjYXNlIGFueXdheS4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KKwkgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5FT2JqZWN0PC9lbT4nLgorCSAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVDEgZGVmYXVsdENhc2UoRU9iamVjdCBvYmplY3QpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCit9IC8vSW1hZ2V3cml0ZXJTd2l0Y2gKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzLmltYWdld3JpdGVyL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3dpemFyZHMvSW1hZ2VXcml0ZXJMb2dnZXJQcm9wZXJ0eVN0cmluZ1Byb3ZpZGVyQWRhcHRlckZhY3RvcnkuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzLmltYWdld3JpdGVyL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3dpemFyZHMvSW1hZ2VXcml0ZXJMb2dnZXJQcm9wZXJ0eVN0cmluZ1Byb3ZpZGVyQWRhcHRlckZhY3RvcnkuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43Njg4YjNlCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMuaW1hZ2V3cml0ZXIvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvd2l6YXJkcy9JbWFnZVdyaXRlckxvZ2dlclByb3BlcnR5U3RyaW5nUHJvdmlkZXJBZGFwdGVyRmFjdG9yeS5qYXZhCkBAIC0wLDAgKzEsMTA1IEBACisvLyBTdGFuZGFyZFByb3BlcnR5U3RyaW5nUHJvdmlkZXJBZGFwdGVyRmFjdG9yeS5qYXZhCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0udWkud2l6YXJkczsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LkFkYXB0ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVTdHJ1Y3R1cmFsRmVhdHVyZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbVByb3BlcnR5RGVzY3JpcHRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMuaW1hZ2V3cml0ZXIudXRpbC5JbWFnZXdyaXRlckFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udWkuYWRhcHRlcnMucHJvcGVydHlzdHJpbmdzLlByb3BlcnR5U3RyaW5nUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS51aS5hZGFwdGVycy5wcm9wZXJ0eXN0cmluZ3MuUHJvcGVydHlTdHJpbmdQcm92aWRlckFkYXB0ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS51aS5hZGFwdGVycy5wcm9wZXJ0eXN0cmluZ3MuUHJvcGVydHlTdHJpbmdQcm92aWRlckFkYXB0ZXJGYWN0b3J5OworCisvKioKKyAqIFRoaXMgY2xhc3MgaXMgdXNlZCB0byBOTFMnZCBzdHJpbmdzIGZvciB7QGxpbmsgRGlzZWFzZU1vZGVsfSBwcm9wZXJ0aWVzLiAKKyAqLworcHVibGljIGNsYXNzIEltYWdlV3JpdGVyTG9nZ2VyUHJvcGVydHlTdHJpbmdQcm92aWRlckFkYXB0ZXJGYWN0b3J5IGV4dGVuZHMKKwkJSW1hZ2V3cml0ZXJBZGFwdGVyRmFjdG9yeSBpbXBsZW1lbnRzIFByb3BlcnR5U3RyaW5nUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSB7CisKKwkKKwlQcm9wZXJ0eVN0cmluZ1Byb3ZpZGVyQWRhcHRlciBhZGFwdGVyID0gbnVsbDsKKworCS8qKgorCSAqIERlZmF1bHQgQ29uc3RydWN0b3IKKwkgKi8KKwlwdWJsaWMgSW1hZ2VXcml0ZXJMb2dnZXJQcm9wZXJ0eVN0cmluZ1Byb3ZpZGVyQWRhcHRlckZhY3RvcnkoKSB7CisJCXN1cGVyKCk7CisJCVByb3BlcnR5U3RyaW5nUHJvdmlkZXJBZGFwdGVyRmFjdG9yeS5JTlNUQU5DRS5hZGRBZGFwdGVyRmFjdG9yeSh0aGlzKTsKKwl9CisJCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5pbXBsLkFkYXB0ZXJGYWN0b3J5SW1wbCNpc0ZhY3RvcnlGb3JUeXBlKGphdmEubGFuZy5PYmplY3QpCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIGJvb2xlYW4gaXNGYWN0b3J5Rm9yVHlwZShPYmplY3QgdHlwZSkgeworCQlyZXR1cm4gIHN1cGVyLmlzRmFjdG9yeUZvclR5cGUodHlwZSkgfHwgdHlwZSA9PSBQcm9wZXJ0eVN0cmluZ1Byb3ZpZGVyLmNsYXNzOworCX0KKworCQorCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLnV0aWwuU3RhbmRhcmRBZGFwdGVyRmFjdG9yeSNjcmVhdGVEaXNlYXNlTW9kZWxBZGFwdGVyKCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVMb2dnZXJBZGFwdGVyKCkgeworCQkvLyBIYXZlIHdlIGNyZWF0ZWQgb25lIGJlZm9yZT8KKwkJaWYgKGFkYXB0ZXIgPT0gbnVsbCkgeworCQkJLy8gTm8KKwkJCWFkYXB0ZXIgPSBuZXcgSW1hZ2VXcml0ZXJMb2dnZXJQcm9wZXJ0eVN0cmluZ1Byb3ZpZGVyQWRhcHRlcigpOworCQl9IC8vIGlmIHdlIGRpZG4ndCBjcmVhdGUgb25lIGJlZm9yZQorCQlyZXR1cm4gYWRhcHRlcjsKKwl9IC8vIGNyZWF0ZURpc2Vhc2VNb2RlbEFkYXB0ZXIKKworCisJLyoqCisJICogVGhpcyBjbGFzcyByZXByZXNlbnRzIAorCSAqLworCXB1YmxpYyBzdGF0aWMgY2xhc3MgSW1hZ2VXcml0ZXJMb2dnZXJQcm9wZXJ0eVN0cmluZ1Byb3ZpZGVyQWRhcHRlciBleHRlbmRzCisJCQlQcm9wZXJ0eVN0cmluZ1Byb3ZpZGVyQWRhcHRlciB7CisKKwkJLyoqCisJCSAqIEBwYXJhbSBkZXNjcmlwdG9yCisJCSAqIEByZXR1cm4gdGhlIE5MUydkIG5hbWUgb2YgdGhlIHByb3BlcnR5IHRvIGRpc3BsYXkgdG8gdGhlIHVzZXIKKwkJICovCisJCXB1YmxpYyBTdHJpbmcgZ2V0UHJvcGVydHlOYW1lKElJdGVtUHJvcGVydHlEZXNjcmlwdG9yIGRlc2NyaXB0b3IpIHsKKwkJCXJldHVybiBJbWFnZVdyaXRlckxvZ2dlcldpemFyZE1lc3NhZ2VzCisJCQkJCS5nZXRTdHJpbmcoKChFU3RydWN0dXJhbEZlYXR1cmUpIGRlc2NyaXB0b3IKKwkJCQkJCQkuZ2V0RmVhdHVyZShudWxsKSkuZ2V0TmFtZSgpKTsKKwkJfSAvLyBnZXRQcm9wZXJ0eU5hbWUKKworCQkvKioKKwkJICogQHBhcmFtIGRlc2NyaXB0b3IKKwkJICogQHJldHVybiB0aGUgTkxTJ2QgdG9vbCB0aXAgdGV4dCB0aGF0IGRlc2NyaWJlcyB0aGUgcHJvcGVydHkKKwkJICovCisJCXB1YmxpYyBTdHJpbmcgZ2V0UHJvcGVydHlUb29sVGlwKAorCQkJCUlJdGVtUHJvcGVydHlEZXNjcmlwdG9yIGRlc2NyaXB0b3IpIHsKKwkJCWZpbmFsIEVTdHJ1Y3R1cmFsRmVhdHVyZSBmZWF0dXJlID0gKEVTdHJ1Y3R1cmFsRmVhdHVyZSkgZGVzY3JpcHRvcgorCQkJCQkuZ2V0RmVhdHVyZShudWxsKTsKKwkJCXJldHVybiBJbWFnZVdyaXRlckxvZ2dlcldpemFyZE1lc3NhZ2VzLmdldFN0cmluZyhmZWF0dXJlLmdldE5hbWUoKQorCQkJCQkrIFRUX1NVRkZJWCk7CisJCX0gLy8gZ2V0UHJvcGVydHlUb29sVGlwCisKKwkJLyoqCisJCSAqIEBwYXJhbSBkZXNjcmlwdG9yCisJCSAqIEByZXR1cm4gdGhlIE5MUydkIHRleHQgdGhhdCByZXByZXNlbnRzIHRoZSB1bml0cyBvZiB0aGUKKwkJICogICAgICAgICBwcm9wZXJ0eQorCQkgKi8KKwkJcHVibGljIFN0cmluZyBnZXRQcm9wZXJ0eVVuaXRzKAorCQkJCUlJdGVtUHJvcGVydHlEZXNjcmlwdG9yIGRlc2NyaXB0b3IpIHsKKwkJCWZpbmFsIEVTdHJ1Y3R1cmFsRmVhdHVyZSBmZWF0dXJlID0gKEVTdHJ1Y3R1cmFsRmVhdHVyZSkgZGVzY3JpcHRvcgorCQkJCQkuZ2V0RmVhdHVyZShudWxsKTsKKwkJCXJldHVybiBJbWFnZVdyaXRlckxvZ2dlcldpemFyZE1lc3NhZ2VzLmdldFN0cmluZyhmZWF0dXJlLmdldE5hbWUoKQorCQkJCQkrIFVOSVRfU1VGRklYKTsKKwkJfSAvLyBnZXRQcm9wZXJ0eVVuaXRzCisKKwl9IC8vIFN0YW5kYXJkUHJvcGVydHlTdHJpbmdQcm92aWRlckFkYXB0ZXIKK30gLy8gU3RhbmRhcmRQcm9wZXJ0eVN0cmluZ1Byb3ZpZGVyQWRhcHRlckZhY3RvcnkKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzLmltYWdld3JpdGVyL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3dpemFyZHMvSW1hZ2VXcml0ZXJMb2dnZXJXaXphcmRNZXNzYWdlcy5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMuaW1hZ2V3cml0ZXIvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvd2l6YXJkcy9JbWFnZVdyaXRlckxvZ2dlcldpemFyZE1lc3NhZ2VzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWFhZmYyZgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzLmltYWdld3JpdGVyL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3dpemFyZHMvSW1hZ2VXcml0ZXJMb2dnZXJXaXphcmRNZXNzYWdlcy5qYXZhCkBAIC0wLDAgKzEsNDQgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDcsMjAxMSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0udWkud2l6YXJkczsKKworaW1wb3J0IGphdmEudXRpbC5NaXNzaW5nUmVzb3VyY2VFeGNlcHRpb247CitpbXBvcnQgamF2YS51dGlsLlJlc291cmNlQnVuZGxlOworCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLkNvbnN0YW50czsKKworLyoqCisgKiBUaGlzIGNsYXNzIGlzIHRoZSBSZXNvdXJjZSBCdW5kbGUgZm9yIHRoaXMgcGFja2FnZS4KKyAqLworcHVibGljIGNsYXNzIEltYWdlV3JpdGVyTG9nZ2VyV2l6YXJkTWVzc2FnZXMgeworCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBCVU5ETEVfTkFNRSA9IENvbnN0YW50cy5JRF9ST09UCisJCQkrICIudWkud2l6YXJkcy5pbWFnZXdyaXRlcmxvZ2dlcndpemFyZG1lc3NhZ2VzIjsgLy8kTk9OLU5MUy0xJAorCisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgUmVzb3VyY2VCdW5kbGUgUkVTT1VSQ0VfQlVORExFID0gUmVzb3VyY2VCdW5kbGUKKwkJCS5nZXRCdW5kbGUoQlVORExFX05BTUUpOworCisJcHJpdmF0ZSBJbWFnZVdyaXRlckxvZ2dlcldpemFyZE1lc3NhZ2VzKCkgeworCQkvLyBlbXB0eQorCX0KKworCS8qKgorCSAqIEBwYXJhbSBrZXkKKwkgKiAgICAgICAgICAgIHRoZSBrZXkgZm9yIHRoZSBtZXNzYWdlCisJICogQHJldHVybiB0aGUgc3RyaW5nIHRoYXQgbWF0Y2hlcyB0aGUga2V5CisJICovCisJcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0U3RyaW5nKGZpbmFsIFN0cmluZyBrZXkpIHsKKwkJdHJ5IHsKKwkJCXJldHVybiBSRVNPVVJDRV9CVU5ETEUuZ2V0U3RyaW5nKGtleSk7CisJCX0gY2F0Y2ggKGZpbmFsIE1pc3NpbmdSZXNvdXJjZUV4Y2VwdGlvbiBlKSB7CisJCQlyZXR1cm4gJyEnICsga2V5ICsgJyEnOworCQl9CisJfSAvLyBnZXRTdHJpbmcKK30gLy8gRGlzZWFzZVdpemFyZE1lc3NhZ2VzCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy5pbWFnZXdyaXRlci9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS93aXphcmRzL2ltYWdld3JpdGVybG9nZ2Vyd2l6YXJkbWVzc2FnZXMucHJvcGVydGllcyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzLmltYWdld3JpdGVyL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3dpemFyZHMvaW1hZ2V3cml0ZXJsb2dnZXJ3aXphcmRtZXNzYWdlcy5wcm9wZXJ0aWVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQwMjg1YmUKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy5pbWFnZXdyaXRlci9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS93aXphcmRzL2ltYWdld3JpdGVybG9nZ2Vyd2l6YXJkbWVzc2FnZXMucHJvcGVydGllcwpAQCAtMCwwICsxLDI5IEBACisjLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyMgKiBDb3B5cmlnaHQgKGMpIDIwMDgsIDIwMTEgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisjICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworIyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorIyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisjICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyMgKgorIyAqIENvbnRyaWJ1dG9yczoKKyMgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisjICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyMgSW1hZ2UgV3JpdGVyIExvZ2dlciBXaXphcmQgTWVzc2FnZXMKKworZW5hYmxlZCA9IEVuYWJsZWQKK2VuYWJsZWRUVCA9IEVuYWJsZSB0aGUgbG9nZ2VyIHdoZW4gdGhlIHNpbXVsYXRpb24gYmVnaW5zCitlbmFibGVkVU5JVCA9IAorCit1c2VEZWZhdWx0TG9nRGlyZWN0b3J5ID0gVXNlIERlZmF1bHQgTG9nIERpcmVjdG9yeQordXNlRGVmYXVsdExvZ0RpcmVjdG9yeVRUID0gV2hldGhlciBvciBub3QgdG8gdXNlIHRoZSBkZWZhdWx0IGxvZyBmaWxlIGRpcmVjdG9yeQordXNlRGVmYXVsdExvZ0RpcmVjdG9yeVVOSVQgPSAKKworbG9nRGlyZWN0b3J5ID0gTG9nIERpcmVjdG9yeQorbG9nRGlyZWN0b3J5VFQgPSBQYXRoIHRvIHRoZSBmb2xkZXIgdG8gc3RvcmUgbG9nIGZpbGVzCitsb2dEaXJlY3RvcnlVTklUID0gCisKK2RlbGltZXRlciA9IEZpbGUgRGVsaW1pdGVyCitkZWxpbWV0ZXJUVCA9IFdoaWNoIGRlbGltZXRlciB0byB1c2Ugd2hlbiBzZXBhcmF0aW5nIGVudHJpZXMgaW4gbG9nIGZpbGVzCitkZWxpbWV0ZXJVTklUID0gCisKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzLy5jbGFzc3BhdGggYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy8uY2xhc3NwYXRoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEyMWU1MjcKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy8uY2xhc3NwYXRoCkBAIC0wLDAgKzEsNyBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxjbGFzc3BhdGg+CisJPGNsYXNzcGF0aGVudHJ5IGtpbmQ9InNyYyIgcGF0aD0ic3JjIi8+CisJPGNsYXNzcGF0aGVudHJ5IGtpbmQ9ImNvbiIgcGF0aD0ib3JnLmVjbGlwc2UuamR0LmxhdW5jaGluZy5KUkVfQ09OVEFJTkVSL29yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC5kZWJ1Zy51aS5sYXVuY2hlci5TdGFuZGFyZFZNVHlwZS9KYXZhU0UtMS42Ii8+CisJPGNsYXNzcGF0aGVudHJ5IGtpbmQ9ImNvbiIgcGF0aD0ib3JnLmVjbGlwc2UucGRlLmNvcmUucmVxdWlyZWRQbHVnaW5zIi8+CisJPGNsYXNzcGF0aGVudHJ5IGtpbmQ9Im91dHB1dCIgcGF0aD0iYmluIi8+Cis8L2NsYXNzcGF0aD4KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzLy5wcm9qZWN0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMvLnByb2plY3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzAxY2ViYgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzLy5wcm9qZWN0CkBAIC0wLDAgKzEsMjggQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8cHJvamVjdERlc2NyaXB0aW9uPgorCTxuYW1lPm9yZy5lY2xpcHNlLnN0ZW0ubG9nZ2VyczwvbmFtZT4KKwk8Y29tbWVudD48L2NvbW1lbnQ+CisJPHByb2plY3RzPgorCTwvcHJvamVjdHM+CisJPGJ1aWxkU3BlYz4KKwkJPGJ1aWxkQ29tbWFuZD4KKwkJCTxuYW1lPm9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFidWlsZGVyPC9uYW1lPgorCQkJPGFyZ3VtZW50cz4KKwkJCTwvYXJndW1lbnRzPgorCQk8L2J1aWxkQ29tbWFuZD4KKwkJPGJ1aWxkQ29tbWFuZD4KKwkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5NYW5pZmVzdEJ1aWxkZXI8L25hbWU+CisJCQk8YXJndW1lbnRzPgorCQkJPC9hcmd1bWVudHM+CisJCTwvYnVpbGRDb21tYW5kPgorCQk8YnVpbGRDb21tYW5kPgorCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLlNjaGVtYUJ1aWxkZXI8L25hbWU+CisJCQk8YXJndW1lbnRzPgorCQkJPC9hcmd1bWVudHM+CisJCTwvYnVpbGRDb21tYW5kPgorCTwvYnVpbGRTcGVjPgorCTxuYXR1cmVzPgorCQk8bmF0dXJlPm9yZy5lY2xpcHNlLnBkZS5QbHVnaW5OYXR1cmU8L25hdHVyZT4KKwkJPG5hdHVyZT5vcmcuZWNsaXBzZS5qZHQuY29yZS5qYXZhbmF0dXJlPC9uYXR1cmU+CisJPC9uYXR1cmVzPgorPC9wcm9qZWN0RGVzY3JpcHRpb24+CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODk3MmIzOQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcwpAQCAtMCwwICsxLDggQEAKKyNGcmkgSnVuIDEwIDA5OjEwOjU1IFBEVCAyMDExCitlY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29kZWdlbi5pbmxpbmVKc3JCeXRlY29kZT1lbmFibGVkCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb2RlZ2VuLnRhcmdldFBsYXRmb3JtPTEuNgorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29tcGxpYW5jZT0xLjYKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uYXNzZXJ0SWRlbnRpZmllcj1lcnJvcgorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5lbnVtSWRlbnRpZmllcj1lcnJvcgorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuc291cmNlPTEuNgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMvTUVUQS1JTkYvTUFOSUZFU1QuTUYgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy9NRVRBLUlORi9NQU5JRkVTVC5NRgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44N2E5NjJhCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMvTUVUQS1JTkYvTUFOSUZFU1QuTUYKQEAgLTAsMCArMSwyNCBAQAorTWFuaWZlc3QtVmVyc2lvbjogMS4wCitCdW5kbGUtTWFuaWZlc3RWZXJzaW9uOiAyCitCdW5kbGUtTmFtZTogJXBsdWdpbk5hbWUKK0J1bmRsZS1TeW1ib2xpY05hbWU6IG9yZy5lY2xpcHNlLnN0ZW0ubG9nZ2VycztzaW5nbGV0b246PXRydWUKK0J1bmRsZS1WZXJzaW9uOiAxLjIuMQorQnVuZGxlLUNsYXNzUGF0aDogLgorQnVuZGxlLVZlbmRvcjogJXByb3ZpZGVyTmFtZQorQnVuZGxlLUxvY2FsaXphdGlvbjogcGx1Z2luCitCdW5kbGUtUmVxdWlyZWRFeGVjdXRpb25FbnZpcm9ubWVudDogSjJTRS0xLjUKK1JlcXVpcmUtQnVuZGxlOiBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUsCisgb3JnLmVjbGlwc2UuZW1mLmVjb3JlO3Zpc2liaWxpdHk6PXJlZXhwb3J0LAorIG9yZy5lY2xpcHNlLmVtZi5lY29yZS5lZGl0LAorIG9yZy5lY2xpcHNlLnN0ZW0uY29yZTt2aXNpYmlsaXR5Oj1yZWV4cG9ydCwKKyBvcmcuZWNsaXBzZS5zdGVtLmpvYnMsCisgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMKK0J1bmRsZS1BY3RpdmF0aW9uUG9saWN5OiBsYXp5CitFeHBvcnQtUGFja2FnZTogb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzLAorIG9yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy5jb21tb24sCisgb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzLmltcGwsCisgb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzLm1hbmFnZXIsCisgb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzLnByZXNlbnRhdGlvbiwKKyBvcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMucHJvdmlkZXIsCisgb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzLnV0aWwKK0J1bmRsZS1BY3RpdmF0b3I6IG9yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy5BY3RpdmF0b3IKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzL2Jpbi9vcmcvZWNsaXBzZS9zdGVtL2xvZ2dlcnMvQWN0aXZhdG9yLmNsYXNzIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMvYmluL29yZy9lY2xpcHNlL3N0ZW0vbG9nZ2Vycy9BY3RpdmF0b3IuY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjBiYzAzMgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzL2Jpbi9vcmcvZWNsaXBzZS9zdGVtL2xvZ2dlcnMvQWN0aXZhdG9yLmNsYXNzCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzL2Jpbi9vcmcvZWNsaXBzZS9zdGVtL2xvZ2dlcnMvQXN5bmNocm9ub3VzTG9nZ2VyLmNsYXNzIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMvYmluL29yZy9lY2xpcHNlL3N0ZW0vbG9nZ2Vycy9Bc3luY2hyb25vdXNMb2dnZXIuY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjZhNTY1ZgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzL2Jpbi9vcmcvZWNsaXBzZS9zdGVtL2xvZ2dlcnMvQXN5bmNocm9ub3VzTG9nZ2VyLmNsYXNzCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzL2Jpbi9vcmcvZWNsaXBzZS9zdGVtL2xvZ2dlcnMvTE9HR0VSX0VWRU5UUy5jbGFzcyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzL2Jpbi9vcmcvZWNsaXBzZS9zdGVtL2xvZ2dlcnMvTE9HR0VSX0VWRU5UUy5jbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NTkyNDZjCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMvYmluL29yZy9lY2xpcHNlL3N0ZW0vbG9nZ2Vycy9MT0dHRVJfRVZFTlRTLmNsYXNzCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzL2Jpbi9vcmcvZWNsaXBzZS9zdGVtL2xvZ2dlcnMvU2ltdWxhdGlvbkxvZ2dlci5jbGFzcyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzL2Jpbi9vcmcvZWNsaXBzZS9zdGVtL2xvZ2dlcnMvU2ltdWxhdGlvbkxvZ2dlci5jbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZmFkNzIzCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMvYmluL29yZy9lY2xpcHNlL3N0ZW0vbG9nZ2Vycy9TaW11bGF0aW9uTG9nZ2VyLmNsYXNzCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzL2Jpbi9vcmcvZWNsaXBzZS9zdGVtL2xvZ2dlcnMvU2ltdWxhdGlvbkxvZ2dlckV2ZW50LmNsYXNzIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMvYmluL29yZy9lY2xpcHNlL3N0ZW0vbG9nZ2Vycy9TaW11bGF0aW9uTG9nZ2VyRXZlbnQuY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWEwM2JjZgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzL2Jpbi9vcmcvZWNsaXBzZS9zdGVtL2xvZ2dlcnMvU2ltdWxhdGlvbkxvZ2dlckV2ZW50LmNsYXNzCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzL2Jpbi9vcmcvZWNsaXBzZS9zdGVtL2xvZ2dlcnMvU2ltdWxhdGlvbkxvZ2dlckZhY3RvcnkuY2xhc3MgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy9iaW4vb3JnL2VjbGlwc2Uvc3RlbS9sb2dnZXJzL1NpbXVsYXRpb25Mb2dnZXJGYWN0b3J5LmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE1OGQzMWEKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy9iaW4vb3JnL2VjbGlwc2Uvc3RlbS9sb2dnZXJzL1NpbXVsYXRpb25Mb2dnZXJGYWN0b3J5LmNsYXNzCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzL2Jpbi9vcmcvZWNsaXBzZS9zdGVtL2xvZ2dlcnMvU2ltdWxhdGlvbkxvZ2dlclBhY2thZ2UkTGl0ZXJhbHMuY2xhc3MgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy9iaW4vb3JnL2VjbGlwc2Uvc3RlbS9sb2dnZXJzL1NpbXVsYXRpb25Mb2dnZXJQYWNrYWdlJExpdGVyYWxzLmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFlMmQyYTYKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy9iaW4vb3JnL2VjbGlwc2Uvc3RlbS9sb2dnZXJzL1NpbXVsYXRpb25Mb2dnZXJQYWNrYWdlJExpdGVyYWxzLmNsYXNzCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzL2Jpbi9vcmcvZWNsaXBzZS9zdGVtL2xvZ2dlcnMvU2ltdWxhdGlvbkxvZ2dlclBhY2thZ2UuY2xhc3MgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy9iaW4vb3JnL2VjbGlwc2Uvc3RlbS9sb2dnZXJzL1NpbXVsYXRpb25Mb2dnZXJQYWNrYWdlLmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjExODM3ZDIKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy9iaW4vb3JnL2VjbGlwc2Uvc3RlbS9sb2dnZXJzL1NpbXVsYXRpb25Mb2dnZXJQYWNrYWdlLmNsYXNzCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzL2Jpbi9vcmcvZWNsaXBzZS9zdGVtL2xvZ2dlcnMvU3luY2hyb25vdXNMb2dnZXIuY2xhc3MgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy9iaW4vb3JnL2VjbGlwc2Uvc3RlbS9sb2dnZXJzL1N5bmNocm9ub3VzTG9nZ2VyLmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZkNmY0ZGYKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy9iaW4vb3JnL2VjbGlwc2Uvc3RlbS9sb2dnZXJzL1N5bmNocm9ub3VzTG9nZ2VyLmNsYXNzCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzL2Jpbi9vcmcvZWNsaXBzZS9zdGVtL2xvZ2dlcnMvY29tbW9uL0NvbnN0YW50cy5jbGFzcyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzL2Jpbi9vcmcvZWNsaXBzZS9zdGVtL2xvZ2dlcnMvY29tbW9uL0NvbnN0YW50cy5jbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNTUxOWE0Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMvYmluL29yZy9lY2xpcHNlL3N0ZW0vbG9nZ2Vycy9jb21tb24vQ29uc3RhbnRzLmNsYXNzCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzL2Jpbi9vcmcvZWNsaXBzZS9zdGVtL2xvZ2dlcnMvY29tbW9uL0ZpbGVVdGlscy5jbGFzcyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzL2Jpbi9vcmcvZWNsaXBzZS9zdGVtL2xvZ2dlcnMvY29tbW9uL0ZpbGVVdGlscy5jbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jOTZkOTdiCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMvYmluL29yZy9lY2xpcHNlL3N0ZW0vbG9nZ2Vycy9jb21tb24vRmlsZVV0aWxzLmNsYXNzCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzL2Jpbi9vcmcvZWNsaXBzZS9zdGVtL2xvZ2dlcnMvaW1wbC9Bc3luY2hyb25vdXNMb2dnZXJJbXBsLmNsYXNzIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMvYmluL29yZy9lY2xpcHNlL3N0ZW0vbG9nZ2Vycy9pbXBsL0FzeW5jaHJvbm91c0xvZ2dlckltcGwuY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjY4M2YzMgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzL2Jpbi9vcmcvZWNsaXBzZS9zdGVtL2xvZ2dlcnMvaW1wbC9Bc3luY2hyb25vdXNMb2dnZXJJbXBsLmNsYXNzCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzL2Jpbi9vcmcvZWNsaXBzZS9zdGVtL2xvZ2dlcnMvaW1wbC9TaW11bGF0aW9uTG9nZ2VyRXZlbnRJbXBsLmNsYXNzIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMvYmluL29yZy9lY2xpcHNlL3N0ZW0vbG9nZ2Vycy9pbXBsL1NpbXVsYXRpb25Mb2dnZXJFdmVudEltcGwuY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGQxMzAxMwotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzL2Jpbi9vcmcvZWNsaXBzZS9zdGVtL2xvZ2dlcnMvaW1wbC9TaW11bGF0aW9uTG9nZ2VyRXZlbnRJbXBsLmNsYXNzCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzL2Jpbi9vcmcvZWNsaXBzZS9zdGVtL2xvZ2dlcnMvaW1wbC9TaW11bGF0aW9uTG9nZ2VyRmFjdG9yeUltcGwuY2xhc3MgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy9iaW4vb3JnL2VjbGlwc2Uvc3RlbS9sb2dnZXJzL2ltcGwvU2ltdWxhdGlvbkxvZ2dlckZhY3RvcnlJbXBsLmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlmNDVlYmUKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy9iaW4vb3JnL2VjbGlwc2Uvc3RlbS9sb2dnZXJzL2ltcGwvU2ltdWxhdGlvbkxvZ2dlckZhY3RvcnlJbXBsLmNsYXNzCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzL2Jpbi9vcmcvZWNsaXBzZS9zdGVtL2xvZ2dlcnMvaW1wbC9TaW11bGF0aW9uTG9nZ2VySW1wbC5jbGFzcyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzL2Jpbi9vcmcvZWNsaXBzZS9zdGVtL2xvZ2dlcnMvaW1wbC9TaW11bGF0aW9uTG9nZ2VySW1wbC5jbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYzQ5ZTZiCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMvYmluL29yZy9lY2xpcHNlL3N0ZW0vbG9nZ2Vycy9pbXBsL1NpbXVsYXRpb25Mb2dnZXJJbXBsLmNsYXNzCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzL2Jpbi9vcmcvZWNsaXBzZS9zdGVtL2xvZ2dlcnMvaW1wbC9TaW11bGF0aW9uTG9nZ2VyUGFja2FnZUltcGwuY2xhc3MgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy9iaW4vb3JnL2VjbGlwc2Uvc3RlbS9sb2dnZXJzL2ltcGwvU2ltdWxhdGlvbkxvZ2dlclBhY2thZ2VJbXBsLmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ2ZjM5NTMKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy9iaW4vb3JnL2VjbGlwc2Uvc3RlbS9sb2dnZXJzL2ltcGwvU2ltdWxhdGlvbkxvZ2dlclBhY2thZ2VJbXBsLmNsYXNzCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzL2Jpbi9vcmcvZWNsaXBzZS9zdGVtL2xvZ2dlcnMvaW1wbC9TeW5jaHJvbm91c0xvZ2dlckltcGwuY2xhc3MgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy9iaW4vb3JnL2VjbGlwc2Uvc3RlbS9sb2dnZXJzL2ltcGwvU3luY2hyb25vdXNMb2dnZXJJbXBsLmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlhYmNlMzAKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy9iaW4vb3JnL2VjbGlwc2Uvc3RlbS9sb2dnZXJzL2ltcGwvU3luY2hyb25vdXNMb2dnZXJJbXBsLmNsYXNzCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzL2Jpbi9vcmcvZWNsaXBzZS9zdGVtL2xvZ2dlcnMvbWFuYWdlci9JU2ltdWxhdGlvbkxvZ2dlck1hbmFnZXJMaXN0ZW5lci5jbGFzcyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzL2Jpbi9vcmcvZWNsaXBzZS9zdGVtL2xvZ2dlcnMvbWFuYWdlci9JU2ltdWxhdGlvbkxvZ2dlck1hbmFnZXJMaXN0ZW5lci5jbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NTM2NjIzCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMvYmluL29yZy9lY2xpcHNlL3N0ZW0vbG9nZ2Vycy9tYW5hZ2VyL0lTaW11bGF0aW9uTG9nZ2VyTWFuYWdlckxpc3RlbmVyLmNsYXNzCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzL2Jpbi9vcmcvZWNsaXBzZS9zdGVtL2xvZ2dlcnMvbWFuYWdlci9Mb2dnZXJBZGFwdGVyLmNsYXNzIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMvYmluL29yZy9lY2xpcHNlL3N0ZW0vbG9nZ2Vycy9tYW5hZ2VyL0xvZ2dlckFkYXB0ZXIuY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTdkMzIyZAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzL2Jpbi9vcmcvZWNsaXBzZS9zdGVtL2xvZ2dlcnMvbWFuYWdlci9Mb2dnZXJBZGFwdGVyLmNsYXNzCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzL2Jpbi9vcmcvZWNsaXBzZS9zdGVtL2xvZ2dlcnMvbWFuYWdlci9TaW11bGF0aW9uTG9nZ2VyTWFuYWdlci5jbGFzcyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzL2Jpbi9vcmcvZWNsaXBzZS9zdGVtL2xvZ2dlcnMvbWFuYWdlci9TaW11bGF0aW9uTG9nZ2VyTWFuYWdlci5jbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YmM3ZmEyCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMvYmluL29yZy9lY2xpcHNlL3N0ZW0vbG9nZ2Vycy9tYW5hZ2VyL1NpbXVsYXRpb25Mb2dnZXJNYW5hZ2VyLmNsYXNzCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzL2Jpbi9vcmcvZWNsaXBzZS9zdGVtL2xvZ2dlcnMvcHJlc2VudGF0aW9uL1NpbXVsYXRpb25Mb2dnZXJBY3Rpb25CYXJDb250cmlidXRvciQxLmNsYXNzIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMvYmluL29yZy9lY2xpcHNlL3N0ZW0vbG9nZ2Vycy9wcmVzZW50YXRpb24vU2ltdWxhdGlvbkxvZ2dlckFjdGlvbkJhckNvbnRyaWJ1dG9yJDEuY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTg1OTVjOAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzL2Jpbi9vcmcvZWNsaXBzZS9zdGVtL2xvZ2dlcnMvcHJlc2VudGF0aW9uL1NpbXVsYXRpb25Mb2dnZXJBY3Rpb25CYXJDb250cmlidXRvciQxLmNsYXNzCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzL2Jpbi9vcmcvZWNsaXBzZS9zdGVtL2xvZ2dlcnMvcHJlc2VudGF0aW9uL1NpbXVsYXRpb25Mb2dnZXJBY3Rpb25CYXJDb250cmlidXRvciQyLmNsYXNzIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMvYmluL29yZy9lY2xpcHNlL3N0ZW0vbG9nZ2Vycy9wcmVzZW50YXRpb24vU2ltdWxhdGlvbkxvZ2dlckFjdGlvbkJhckNvbnRyaWJ1dG9yJDIuY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2Y3N2Q5NAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzL2Jpbi9vcmcvZWNsaXBzZS9zdGVtL2xvZ2dlcnMvcHJlc2VudGF0aW9uL1NpbXVsYXRpb25Mb2dnZXJBY3Rpb25CYXJDb250cmlidXRvciQyLmNsYXNzCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzL2Jpbi9vcmcvZWNsaXBzZS9zdGVtL2xvZ2dlcnMvcHJlc2VudGF0aW9uL1NpbXVsYXRpb25Mb2dnZXJBY3Rpb25CYXJDb250cmlidXRvciQzLmNsYXNzIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMvYmluL29yZy9lY2xpcHNlL3N0ZW0vbG9nZ2Vycy9wcmVzZW50YXRpb24vU2ltdWxhdGlvbkxvZ2dlckFjdGlvbkJhckNvbnRyaWJ1dG9yJDMuY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmE3Y2Y4NAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzL2Jpbi9vcmcvZWNsaXBzZS9zdGVtL2xvZ2dlcnMvcHJlc2VudGF0aW9uL1NpbXVsYXRpb25Mb2dnZXJBY3Rpb25CYXJDb250cmlidXRvciQzLmNsYXNzCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzL2Jpbi9vcmcvZWNsaXBzZS9zdGVtL2xvZ2dlcnMvcHJlc2VudGF0aW9uL1NpbXVsYXRpb25Mb2dnZXJBY3Rpb25CYXJDb250cmlidXRvciROZXdBY3Rpb24uY2xhc3MgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy9iaW4vb3JnL2VjbGlwc2Uvc3RlbS9sb2dnZXJzL3ByZXNlbnRhdGlvbi9TaW11bGF0aW9uTG9nZ2VyQWN0aW9uQmFyQ29udHJpYnV0b3IkTmV3QWN0aW9uLmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUwYWI3MjgKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy9iaW4vb3JnL2VjbGlwc2Uvc3RlbS9sb2dnZXJzL3ByZXNlbnRhdGlvbi9TaW11bGF0aW9uTG9nZ2VyQWN0aW9uQmFyQ29udHJpYnV0b3IkTmV3QWN0aW9uLmNsYXNzCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzL2Jpbi9vcmcvZWNsaXBzZS9zdGVtL2xvZ2dlcnMvcHJlc2VudGF0aW9uL1NpbXVsYXRpb25Mb2dnZXJBY3Rpb25CYXJDb250cmlidXRvci5jbGFzcyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzL2Jpbi9vcmcvZWNsaXBzZS9zdGVtL2xvZ2dlcnMvcHJlc2VudGF0aW9uL1NpbXVsYXRpb25Mb2dnZXJBY3Rpb25CYXJDb250cmlidXRvci5jbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYjNkMDE3Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMvYmluL29yZy9lY2xpcHNlL3N0ZW0vbG9nZ2Vycy9wcmVzZW50YXRpb24vU2ltdWxhdGlvbkxvZ2dlckFjdGlvbkJhckNvbnRyaWJ1dG9yLmNsYXNzCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzL2Jpbi9vcmcvZWNsaXBzZS9zdGVtL2xvZ2dlcnMvcHJlc2VudGF0aW9uL1NpbXVsYXRpb25Mb2dnZXJFZGl0b3IkMS5jbGFzcyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzL2Jpbi9vcmcvZWNsaXBzZS9zdGVtL2xvZ2dlcnMvcHJlc2VudGF0aW9uL1NpbXVsYXRpb25Mb2dnZXJFZGl0b3IkMS5jbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYzI3MjVhCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMvYmluL29yZy9lY2xpcHNlL3N0ZW0vbG9nZ2Vycy9wcmVzZW50YXRpb24vU2ltdWxhdGlvbkxvZ2dlckVkaXRvciQxLmNsYXNzCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzL2Jpbi9vcmcvZWNsaXBzZS9zdGVtL2xvZ2dlcnMvcHJlc2VudGF0aW9uL1NpbXVsYXRpb25Mb2dnZXJFZGl0b3IkMTAuY2xhc3MgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy9iaW4vb3JnL2VjbGlwc2Uvc3RlbS9sb2dnZXJzL3ByZXNlbnRhdGlvbi9TaW11bGF0aW9uTG9nZ2VyRWRpdG9yJDEwLmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIxM2RmZGEKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy9iaW4vb3JnL2VjbGlwc2Uvc3RlbS9sb2dnZXJzL3ByZXNlbnRhdGlvbi9TaW11bGF0aW9uTG9nZ2VyRWRpdG9yJDEwLmNsYXNzCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzL2Jpbi9vcmcvZWNsaXBzZS9zdGVtL2xvZ2dlcnMvcHJlc2VudGF0aW9uL1NpbXVsYXRpb25Mb2dnZXJFZGl0b3IkMTEuY2xhc3MgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy9iaW4vb3JnL2VjbGlwc2Uvc3RlbS9sb2dnZXJzL3ByZXNlbnRhdGlvbi9TaW11bGF0aW9uTG9nZ2VyRWRpdG9yJDExLmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUyYTc4NTgKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy9iaW4vb3JnL2VjbGlwc2Uvc3RlbS9sb2dnZXJzL3ByZXNlbnRhdGlvbi9TaW11bGF0aW9uTG9nZ2VyRWRpdG9yJDExLmNsYXNzCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzL2Jpbi9vcmcvZWNsaXBzZS9zdGVtL2xvZ2dlcnMvcHJlc2VudGF0aW9uL1NpbXVsYXRpb25Mb2dnZXJFZGl0b3IkMTIuY2xhc3MgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy9iaW4vb3JnL2VjbGlwc2Uvc3RlbS9sb2dnZXJzL3ByZXNlbnRhdGlvbi9TaW11bGF0aW9uTG9nZ2VyRWRpdG9yJDEyLmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk3MDg0ODAKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy9iaW4vb3JnL2VjbGlwc2Uvc3RlbS9sb2dnZXJzL3ByZXNlbnRhdGlvbi9TaW11bGF0aW9uTG9nZ2VyRWRpdG9yJDEyLmNsYXNzCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzL2Jpbi9vcmcvZWNsaXBzZS9zdGVtL2xvZ2dlcnMvcHJlc2VudGF0aW9uL1NpbXVsYXRpb25Mb2dnZXJFZGl0b3IkMTMuY2xhc3MgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy9iaW4vb3JnL2VjbGlwc2Uvc3RlbS9sb2dnZXJzL3ByZXNlbnRhdGlvbi9TaW11bGF0aW9uTG9nZ2VyRWRpdG9yJDEzLmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNmNWRhZmEKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy9iaW4vb3JnL2VjbGlwc2Uvc3RlbS9sb2dnZXJzL3ByZXNlbnRhdGlvbi9TaW11bGF0aW9uTG9nZ2VyRWRpdG9yJDEzLmNsYXNzCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzL2Jpbi9vcmcvZWNsaXBzZS9zdGVtL2xvZ2dlcnMvcHJlc2VudGF0aW9uL1NpbXVsYXRpb25Mb2dnZXJFZGl0b3IkMTQuY2xhc3MgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy9iaW4vb3JnL2VjbGlwc2Uvc3RlbS9sb2dnZXJzL3ByZXNlbnRhdGlvbi9TaW11bGF0aW9uTG9nZ2VyRWRpdG9yJDE0LmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk1OGFkMzAKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy9iaW4vb3JnL2VjbGlwc2Uvc3RlbS9sb2dnZXJzL3ByZXNlbnRhdGlvbi9TaW11bGF0aW9uTG9nZ2VyRWRpdG9yJDE0LmNsYXNzCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzL2Jpbi9vcmcvZWNsaXBzZS9zdGVtL2xvZ2dlcnMvcHJlc2VudGF0aW9uL1NpbXVsYXRpb25Mb2dnZXJFZGl0b3IkMTUuY2xhc3MgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy9iaW4vb3JnL2VjbGlwc2Uvc3RlbS9sb2dnZXJzL3ByZXNlbnRhdGlvbi9TaW11bGF0aW9uTG9nZ2VyRWRpdG9yJDE1LmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRiYjdkMDAKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy9iaW4vb3JnL2VjbGlwc2Uvc3RlbS9sb2dnZXJzL3ByZXNlbnRhdGlvbi9TaW11bGF0aW9uTG9nZ2VyRWRpdG9yJDE1LmNsYXNzCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzL2Jpbi9vcmcvZWNsaXBzZS9zdGVtL2xvZ2dlcnMvcHJlc2VudGF0aW9uL1NpbXVsYXRpb25Mb2dnZXJFZGl0b3IkMTYuY2xhc3MgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy9iaW4vb3JnL2VjbGlwc2Uvc3RlbS9sb2dnZXJzL3ByZXNlbnRhdGlvbi9TaW11bGF0aW9uTG9nZ2VyRWRpdG9yJDE2LmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE5NDM1MzMKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy9iaW4vb3JnL2VjbGlwc2Uvc3RlbS9sb2dnZXJzL3ByZXNlbnRhdGlvbi9TaW11bGF0aW9uTG9nZ2VyRWRpdG9yJDE2LmNsYXNzCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzL2Jpbi9vcmcvZWNsaXBzZS9zdGVtL2xvZ2dlcnMvcHJlc2VudGF0aW9uL1NpbXVsYXRpb25Mb2dnZXJFZGl0b3IkMTcuY2xhc3MgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy9iaW4vb3JnL2VjbGlwc2Uvc3RlbS9sb2dnZXJzL3ByZXNlbnRhdGlvbi9TaW11bGF0aW9uTG9nZ2VyRWRpdG9yJDE3LmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUyMTdmNGIKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy9iaW4vb3JnL2VjbGlwc2Uvc3RlbS9sb2dnZXJzL3ByZXNlbnRhdGlvbi9TaW11bGF0aW9uTG9nZ2VyRWRpdG9yJDE3LmNsYXNzCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzL2Jpbi9vcmcvZWNsaXBzZS9zdGVtL2xvZ2dlcnMvcHJlc2VudGF0aW9uL1NpbXVsYXRpb25Mb2dnZXJFZGl0b3IkMU15Q29udGVudE91dGxpbmVQYWdlLmNsYXNzIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMvYmluL29yZy9lY2xpcHNlL3N0ZW0vbG9nZ2Vycy9wcmVzZW50YXRpb24vU2ltdWxhdGlvbkxvZ2dlckVkaXRvciQxTXlDb250ZW50T3V0bGluZVBhZ2UuY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmRkMmRiOAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzL2Jpbi9vcmcvZWNsaXBzZS9zdGVtL2xvZ2dlcnMvcHJlc2VudGF0aW9uL1NpbXVsYXRpb25Mb2dnZXJFZGl0b3IkMU15Q29udGVudE91dGxpbmVQYWdlLmNsYXNzCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzL2Jpbi9vcmcvZWNsaXBzZS9zdGVtL2xvZ2dlcnMvcHJlc2VudGF0aW9uL1NpbXVsYXRpb25Mb2dnZXJFZGl0b3IkMiQxLmNsYXNzIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMvYmluL29yZy9lY2xpcHNlL3N0ZW0vbG9nZ2Vycy9wcmVzZW50YXRpb24vU2ltdWxhdGlvbkxvZ2dlckVkaXRvciQyJDEuY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjJhNDY0YgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzL2Jpbi9vcmcvZWNsaXBzZS9zdGVtL2xvZ2dlcnMvcHJlc2VudGF0aW9uL1NpbXVsYXRpb25Mb2dnZXJFZGl0b3IkMiQxLmNsYXNzCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzL2Jpbi9vcmcvZWNsaXBzZS9zdGVtL2xvZ2dlcnMvcHJlc2VudGF0aW9uL1NpbXVsYXRpb25Mb2dnZXJFZGl0b3IkMi5jbGFzcyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzL2Jpbi9vcmcvZWNsaXBzZS9zdGVtL2xvZ2dlcnMvcHJlc2VudGF0aW9uL1NpbXVsYXRpb25Mb2dnZXJFZGl0b3IkMi5jbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZTgwODJhCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMvYmluL29yZy9lY2xpcHNlL3N0ZW0vbG9nZ2Vycy9wcmVzZW50YXRpb24vU2ltdWxhdGlvbkxvZ2dlckVkaXRvciQyLmNsYXNzCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzL2Jpbi9vcmcvZWNsaXBzZS9zdGVtL2xvZ2dlcnMvcHJlc2VudGF0aW9uL1NpbXVsYXRpb25Mb2dnZXJFZGl0b3IkMyQxLmNsYXNzIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMvYmluL29yZy9lY2xpcHNlL3N0ZW0vbG9nZ2Vycy9wcmVzZW50YXRpb24vU2ltdWxhdGlvbkxvZ2dlckVkaXRvciQzJDEuY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmEyM2FiZgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzL2Jpbi9vcmcvZWNsaXBzZS9zdGVtL2xvZ2dlcnMvcHJlc2VudGF0aW9uL1NpbXVsYXRpb25Mb2dnZXJFZGl0b3IkMyQxLmNsYXNzCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzL2Jpbi9vcmcvZWNsaXBzZS9zdGVtL2xvZ2dlcnMvcHJlc2VudGF0aW9uL1NpbXVsYXRpb25Mb2dnZXJFZGl0b3IkMy5jbGFzcyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzL2Jpbi9vcmcvZWNsaXBzZS9zdGVtL2xvZ2dlcnMvcHJlc2VudGF0aW9uL1NpbXVsYXRpb25Mb2dnZXJFZGl0b3IkMy5jbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YjI2NTljCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMvYmluL29yZy9lY2xpcHNlL3N0ZW0vbG9nZ2Vycy9wcmVzZW50YXRpb24vU2ltdWxhdGlvbkxvZ2dlckVkaXRvciQzLmNsYXNzCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzL2Jpbi9vcmcvZWNsaXBzZS9zdGVtL2xvZ2dlcnMvcHJlc2VudGF0aW9uL1NpbXVsYXRpb25Mb2dnZXJFZGl0b3IkNC5jbGFzcyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzL2Jpbi9vcmcvZWNsaXBzZS9zdGVtL2xvZ2dlcnMvcHJlc2VudGF0aW9uL1NpbXVsYXRpb25Mb2dnZXJFZGl0b3IkNC5jbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNWM3ZGVjCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMvYmluL29yZy9lY2xpcHNlL3N0ZW0vbG9nZ2Vycy9wcmVzZW50YXRpb24vU2ltdWxhdGlvbkxvZ2dlckVkaXRvciQ0LmNsYXNzCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzL2Jpbi9vcmcvZWNsaXBzZS9zdGVtL2xvZ2dlcnMvcHJlc2VudGF0aW9uL1NpbXVsYXRpb25Mb2dnZXJFZGl0b3IkNS5jbGFzcyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzL2Jpbi9vcmcvZWNsaXBzZS9zdGVtL2xvZ2dlcnMvcHJlc2VudGF0aW9uL1NpbXVsYXRpb25Mb2dnZXJFZGl0b3IkNS5jbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MzI4MDIxCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMvYmluL29yZy9lY2xpcHNlL3N0ZW0vbG9nZ2Vycy9wcmVzZW50YXRpb24vU2ltdWxhdGlvbkxvZ2dlckVkaXRvciQ1LmNsYXNzCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzL2Jpbi9vcmcvZWNsaXBzZS9zdGVtL2xvZ2dlcnMvcHJlc2VudGF0aW9uL1NpbXVsYXRpb25Mb2dnZXJFZGl0b3IkNi5jbGFzcyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzL2Jpbi9vcmcvZWNsaXBzZS9zdGVtL2xvZ2dlcnMvcHJlc2VudGF0aW9uL1NpbXVsYXRpb25Mb2dnZXJFZGl0b3IkNi5jbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41OGRiNmI4Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMvYmluL29yZy9lY2xpcHNlL3N0ZW0vbG9nZ2Vycy9wcmVzZW50YXRpb24vU2ltdWxhdGlvbkxvZ2dlckVkaXRvciQ2LmNsYXNzCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzL2Jpbi9vcmcvZWNsaXBzZS9zdGVtL2xvZ2dlcnMvcHJlc2VudGF0aW9uL1NpbXVsYXRpb25Mb2dnZXJFZGl0b3IkNy5jbGFzcyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzL2Jpbi9vcmcvZWNsaXBzZS9zdGVtL2xvZ2dlcnMvcHJlc2VudGF0aW9uL1NpbXVsYXRpb25Mb2dnZXJFZGl0b3IkNy5jbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMjE0YjBiCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMvYmluL29yZy9lY2xpcHNlL3N0ZW0vbG9nZ2Vycy9wcmVzZW50YXRpb24vU2ltdWxhdGlvbkxvZ2dlckVkaXRvciQ3LmNsYXNzCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzL2Jpbi9vcmcvZWNsaXBzZS9zdGVtL2xvZ2dlcnMvcHJlc2VudGF0aW9uL1NpbXVsYXRpb25Mb2dnZXJFZGl0b3IkOC5jbGFzcyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzL2Jpbi9vcmcvZWNsaXBzZS9zdGVtL2xvZ2dlcnMvcHJlc2VudGF0aW9uL1NpbXVsYXRpb25Mb2dnZXJFZGl0b3IkOC5jbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMThhOWY3Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMvYmluL29yZy9lY2xpcHNlL3N0ZW0vbG9nZ2Vycy9wcmVzZW50YXRpb24vU2ltdWxhdGlvbkxvZ2dlckVkaXRvciQ4LmNsYXNzCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzL2Jpbi9vcmcvZWNsaXBzZS9zdGVtL2xvZ2dlcnMvcHJlc2VudGF0aW9uL1NpbXVsYXRpb25Mb2dnZXJFZGl0b3IkOS5jbGFzcyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzL2Jpbi9vcmcvZWNsaXBzZS9zdGVtL2xvZ2dlcnMvcHJlc2VudGF0aW9uL1NpbXVsYXRpb25Mb2dnZXJFZGl0b3IkOS5jbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNzAwMDg4Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMvYmluL29yZy9lY2xpcHNlL3N0ZW0vbG9nZ2Vycy9wcmVzZW50YXRpb24vU2ltdWxhdGlvbkxvZ2dlckVkaXRvciQ5LmNsYXNzCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzL2Jpbi9vcmcvZWNsaXBzZS9zdGVtL2xvZ2dlcnMvcHJlc2VudGF0aW9uL1NpbXVsYXRpb25Mb2dnZXJFZGl0b3IkUmV2ZXJzZUFkYXB0ZXJGYWN0b3J5Q29udGVudFByb3ZpZGVyLmNsYXNzIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMvYmluL29yZy9lY2xpcHNlL3N0ZW0vbG9nZ2Vycy9wcmVzZW50YXRpb24vU2ltdWxhdGlvbkxvZ2dlckVkaXRvciRSZXZlcnNlQWRhcHRlckZhY3RvcnlDb250ZW50UHJvdmlkZXIuY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODlmMDhkMQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzL2Jpbi9vcmcvZWNsaXBzZS9zdGVtL2xvZ2dlcnMvcHJlc2VudGF0aW9uL1NpbXVsYXRpb25Mb2dnZXJFZGl0b3IkUmV2ZXJzZUFkYXB0ZXJGYWN0b3J5Q29udGVudFByb3ZpZGVyLmNsYXNzCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzL2Jpbi9vcmcvZWNsaXBzZS9zdGVtL2xvZ2dlcnMvcHJlc2VudGF0aW9uL1NpbXVsYXRpb25Mb2dnZXJFZGl0b3IuY2xhc3MgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy9iaW4vb3JnL2VjbGlwc2Uvc3RlbS9sb2dnZXJzL3ByZXNlbnRhdGlvbi9TaW11bGF0aW9uTG9nZ2VyRWRpdG9yLmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA1MDQ4NDEKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy9iaW4vb3JnL2VjbGlwc2Uvc3RlbS9sb2dnZXJzL3ByZXNlbnRhdGlvbi9TaW11bGF0aW9uTG9nZ2VyRWRpdG9yLmNsYXNzCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzL2Jpbi9vcmcvZWNsaXBzZS9zdGVtL2xvZ2dlcnMvcHJlc2VudGF0aW9uL1NpbXVsYXRpb25Mb2dnZXJNb2RlbFdpemFyZCQxLmNsYXNzIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMvYmluL29yZy9lY2xpcHNlL3N0ZW0vbG9nZ2Vycy9wcmVzZW50YXRpb24vU2ltdWxhdGlvbkxvZ2dlck1vZGVsV2l6YXJkJDEuY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2Y0ZDFlZgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzL2Jpbi9vcmcvZWNsaXBzZS9zdGVtL2xvZ2dlcnMvcHJlc2VudGF0aW9uL1NpbXVsYXRpb25Mb2dnZXJNb2RlbFdpemFyZCQxLmNsYXNzCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzL2Jpbi9vcmcvZWNsaXBzZS9zdGVtL2xvZ2dlcnMvcHJlc2VudGF0aW9uL1NpbXVsYXRpb25Mb2dnZXJNb2RlbFdpemFyZCRTaW11bGF0aW9uTG9nZ2VyTW9kZWxXaXphcmRJbml0aWFsT2JqZWN0Q3JlYXRpb25QYWdlJDEuY2xhc3MgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy9iaW4vb3JnL2VjbGlwc2Uvc3RlbS9sb2dnZXJzL3ByZXNlbnRhdGlvbi9TaW11bGF0aW9uTG9nZ2VyTW9kZWxXaXphcmQkU2ltdWxhdGlvbkxvZ2dlck1vZGVsV2l6YXJkSW5pdGlhbE9iamVjdENyZWF0aW9uUGFnZSQxLmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUwNDA2NWUKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy9iaW4vb3JnL2VjbGlwc2Uvc3RlbS9sb2dnZXJzL3ByZXNlbnRhdGlvbi9TaW11bGF0aW9uTG9nZ2VyTW9kZWxXaXphcmQkU2ltdWxhdGlvbkxvZ2dlck1vZGVsV2l6YXJkSW5pdGlhbE9iamVjdENyZWF0aW9uUGFnZSQxLmNsYXNzCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzL2Jpbi9vcmcvZWNsaXBzZS9zdGVtL2xvZ2dlcnMvcHJlc2VudGF0aW9uL1NpbXVsYXRpb25Mb2dnZXJNb2RlbFdpemFyZCRTaW11bGF0aW9uTG9nZ2VyTW9kZWxXaXphcmRJbml0aWFsT2JqZWN0Q3JlYXRpb25QYWdlJDIuY2xhc3MgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy9iaW4vb3JnL2VjbGlwc2Uvc3RlbS9sb2dnZXJzL3ByZXNlbnRhdGlvbi9TaW11bGF0aW9uTG9nZ2VyTW9kZWxXaXphcmQkU2ltdWxhdGlvbkxvZ2dlck1vZGVsV2l6YXJkSW5pdGlhbE9iamVjdENyZWF0aW9uUGFnZSQyLmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ3ZjFhMWEKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy9iaW4vb3JnL2VjbGlwc2Uvc3RlbS9sb2dnZXJzL3ByZXNlbnRhdGlvbi9TaW11bGF0aW9uTG9nZ2VyTW9kZWxXaXphcmQkU2ltdWxhdGlvbkxvZ2dlck1vZGVsV2l6YXJkSW5pdGlhbE9iamVjdENyZWF0aW9uUGFnZSQyLmNsYXNzCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzL2Jpbi9vcmcvZWNsaXBzZS9zdGVtL2xvZ2dlcnMvcHJlc2VudGF0aW9uL1NpbXVsYXRpb25Mb2dnZXJNb2RlbFdpemFyZCRTaW11bGF0aW9uTG9nZ2VyTW9kZWxXaXphcmRJbml0aWFsT2JqZWN0Q3JlYXRpb25QYWdlLmNsYXNzIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMvYmluL29yZy9lY2xpcHNlL3N0ZW0vbG9nZ2Vycy9wcmVzZW50YXRpb24vU2ltdWxhdGlvbkxvZ2dlck1vZGVsV2l6YXJkJFNpbXVsYXRpb25Mb2dnZXJNb2RlbFdpemFyZEluaXRpYWxPYmplY3RDcmVhdGlvblBhZ2UuY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDk0ZWQwYgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzL2Jpbi9vcmcvZWNsaXBzZS9zdGVtL2xvZ2dlcnMvcHJlc2VudGF0aW9uL1NpbXVsYXRpb25Mb2dnZXJNb2RlbFdpemFyZCRTaW11bGF0aW9uTG9nZ2VyTW9kZWxXaXphcmRJbml0aWFsT2JqZWN0Q3JlYXRpb25QYWdlLmNsYXNzCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzL2Jpbi9vcmcvZWNsaXBzZS9zdGVtL2xvZ2dlcnMvcHJlc2VudGF0aW9uL1NpbXVsYXRpb25Mb2dnZXJNb2RlbFdpemFyZC5jbGFzcyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzL2Jpbi9vcmcvZWNsaXBzZS9zdGVtL2xvZ2dlcnMvcHJlc2VudGF0aW9uL1NpbXVsYXRpb25Mb2dnZXJNb2RlbFdpemFyZC5jbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43N2ZiMmJlCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMvYmluL29yZy9lY2xpcHNlL3N0ZW0vbG9nZ2Vycy9wcmVzZW50YXRpb24vU2ltdWxhdGlvbkxvZ2dlck1vZGVsV2l6YXJkLmNsYXNzCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzL2Jpbi9vcmcvZWNsaXBzZS9zdGVtL2xvZ2dlcnMvcHJvdmlkZXIvQXN5bmNocm9ub3VzTG9nZ2VySXRlbVByb3ZpZGVyLmNsYXNzIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMvYmluL29yZy9lY2xpcHNlL3N0ZW0vbG9nZ2Vycy9wcm92aWRlci9Bc3luY2hyb25vdXNMb2dnZXJJdGVtUHJvdmlkZXIuY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzZhYmY2ZAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzL2Jpbi9vcmcvZWNsaXBzZS9zdGVtL2xvZ2dlcnMvcHJvdmlkZXIvQXN5bmNocm9ub3VzTG9nZ2VySXRlbVByb3ZpZGVyLmNsYXNzCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzL2Jpbi9vcmcvZWNsaXBzZS9zdGVtL2xvZ2dlcnMvcHJvdmlkZXIvU2ltdWxhdGlvbkxvZ2dlckVkaXRQbHVnaW4kSW1wbGVtZW50YXRpb24uY2xhc3MgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy9iaW4vb3JnL2VjbGlwc2Uvc3RlbS9sb2dnZXJzL3Byb3ZpZGVyL1NpbXVsYXRpb25Mb2dnZXJFZGl0UGx1Z2luJEltcGxlbWVudGF0aW9uLmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkwMTI5OTAKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy9iaW4vb3JnL2VjbGlwc2Uvc3RlbS9sb2dnZXJzL3Byb3ZpZGVyL1NpbXVsYXRpb25Mb2dnZXJFZGl0UGx1Z2luJEltcGxlbWVudGF0aW9uLmNsYXNzCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzL2Jpbi9vcmcvZWNsaXBzZS9zdGVtL2xvZ2dlcnMvcHJvdmlkZXIvU2ltdWxhdGlvbkxvZ2dlckVkaXRQbHVnaW4uY2xhc3MgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy9iaW4vb3JnL2VjbGlwc2Uvc3RlbS9sb2dnZXJzL3Byb3ZpZGVyL1NpbXVsYXRpb25Mb2dnZXJFZGl0UGx1Z2luLmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVkNjMxZmMKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy9iaW4vb3JnL2VjbGlwc2Uvc3RlbS9sb2dnZXJzL3Byb3ZpZGVyL1NpbXVsYXRpb25Mb2dnZXJFZGl0UGx1Z2luLmNsYXNzCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzL2Jpbi9vcmcvZWNsaXBzZS9zdGVtL2xvZ2dlcnMvcHJvdmlkZXIvU2ltdWxhdGlvbkxvZ2dlckV2ZW50SXRlbVByb3ZpZGVyLmNsYXNzIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMvYmluL29yZy9lY2xpcHNlL3N0ZW0vbG9nZ2Vycy9wcm92aWRlci9TaW11bGF0aW9uTG9nZ2VyRXZlbnRJdGVtUHJvdmlkZXIuY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWIxNjQzZAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzL2Jpbi9vcmcvZWNsaXBzZS9zdGVtL2xvZ2dlcnMvcHJvdmlkZXIvU2ltdWxhdGlvbkxvZ2dlckV2ZW50SXRlbVByb3ZpZGVyLmNsYXNzCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzL2Jpbi9vcmcvZWNsaXBzZS9zdGVtL2xvZ2dlcnMvcHJvdmlkZXIvU2ltdWxhdGlvbkxvZ2dlckl0ZW1Qcm92aWRlci5jbGFzcyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzL2Jpbi9vcmcvZWNsaXBzZS9zdGVtL2xvZ2dlcnMvcHJvdmlkZXIvU2ltdWxhdGlvbkxvZ2dlckl0ZW1Qcm92aWRlci5jbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNzJlMTY3Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMvYmluL29yZy9lY2xpcHNlL3N0ZW0vbG9nZ2Vycy9wcm92aWRlci9TaW11bGF0aW9uTG9nZ2VySXRlbVByb3ZpZGVyLmNsYXNzCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzL2Jpbi9vcmcvZWNsaXBzZS9zdGVtL2xvZ2dlcnMvcHJvdmlkZXIvU2ltdWxhdGlvbkxvZ2dlckl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5LmNsYXNzIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMvYmluL29yZy9lY2xpcHNlL3N0ZW0vbG9nZ2Vycy9wcm92aWRlci9TaW11bGF0aW9uTG9nZ2VySXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkuY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2U3NTJkMgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzL2Jpbi9vcmcvZWNsaXBzZS9zdGVtL2xvZ2dlcnMvcHJvdmlkZXIvU2ltdWxhdGlvbkxvZ2dlckl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5LmNsYXNzCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzL2Jpbi9vcmcvZWNsaXBzZS9zdGVtL2xvZ2dlcnMvcHJvdmlkZXIvU3luY2hyb25vdXNMb2dnZXJJdGVtUHJvdmlkZXIuY2xhc3MgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy9iaW4vb3JnL2VjbGlwc2Uvc3RlbS9sb2dnZXJzL3Byb3ZpZGVyL1N5bmNocm9ub3VzTG9nZ2VySXRlbVByb3ZpZGVyLmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRmNTUwMjAKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy9iaW4vb3JnL2VjbGlwc2Uvc3RlbS9sb2dnZXJzL3Byb3ZpZGVyL1N5bmNocm9ub3VzTG9nZ2VySXRlbVByb3ZpZGVyLmNsYXNzCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzL2Jpbi9vcmcvZWNsaXBzZS9zdGVtL2xvZ2dlcnMvcHJvdmlkZXIvc2ltdWxhdGlvbmxvZ2dlckVkaXRvckFkdmlzb3IkQWJvdXRBY3Rpb24uY2xhc3MgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy9iaW4vb3JnL2VjbGlwc2Uvc3RlbS9sb2dnZXJzL3Byb3ZpZGVyL3NpbXVsYXRpb25sb2dnZXJFZGl0b3JBZHZpc29yJEFib3V0QWN0aW9uLmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkwY2JlMzQKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy9iaW4vb3JnL2VjbGlwc2Uvc3RlbS9sb2dnZXJzL3Byb3ZpZGVyL3NpbXVsYXRpb25sb2dnZXJFZGl0b3JBZHZpc29yJEFib3V0QWN0aW9uLmNsYXNzCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzL2Jpbi9vcmcvZWNsaXBzZS9zdGVtL2xvZ2dlcnMvcHJvdmlkZXIvc2ltdWxhdGlvbmxvZ2dlckVkaXRvckFkdmlzb3IkQXBwbGljYXRpb24uY2xhc3MgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy9iaW4vb3JnL2VjbGlwc2Uvc3RlbS9sb2dnZXJzL3Byb3ZpZGVyL3NpbXVsYXRpb25sb2dnZXJFZGl0b3JBZHZpc29yJEFwcGxpY2F0aW9uLmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkyMWE0OTEKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy9iaW4vb3JnL2VjbGlwc2Uvc3RlbS9sb2dnZXJzL3Byb3ZpZGVyL3NpbXVsYXRpb25sb2dnZXJFZGl0b3JBZHZpc29yJEFwcGxpY2F0aW9uLmNsYXNzCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzL2Jpbi9vcmcvZWNsaXBzZS9zdGVtL2xvZ2dlcnMvcHJvdmlkZXIvc2ltdWxhdGlvbmxvZ2dlckVkaXRvckFkdmlzb3IkT3BlbkFjdGlvbi5jbGFzcyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzL2Jpbi9vcmcvZWNsaXBzZS9zdGVtL2xvZ2dlcnMvcHJvdmlkZXIvc2ltdWxhdGlvbmxvZ2dlckVkaXRvckFkdmlzb3IkT3BlbkFjdGlvbi5jbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZTllMmZkCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMvYmluL29yZy9lY2xpcHNlL3N0ZW0vbG9nZ2Vycy9wcm92aWRlci9zaW11bGF0aW9ubG9nZ2VyRWRpdG9yQWR2aXNvciRPcGVuQWN0aW9uLmNsYXNzCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzL2Jpbi9vcmcvZWNsaXBzZS9zdGVtL2xvZ2dlcnMvcHJvdmlkZXIvc2ltdWxhdGlvbmxvZ2dlckVkaXRvckFkdmlzb3IkT3BlblVSSUFjdGlvbi5jbGFzcyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzL2Jpbi9vcmcvZWNsaXBzZS9zdGVtL2xvZ2dlcnMvcHJvdmlkZXIvc2ltdWxhdGlvbmxvZ2dlckVkaXRvckFkdmlzb3IkT3BlblVSSUFjdGlvbi5jbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40Y2UyNDZmCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMvYmluL29yZy9lY2xpcHNlL3N0ZW0vbG9nZ2Vycy9wcm92aWRlci9zaW11bGF0aW9ubG9nZ2VyRWRpdG9yQWR2aXNvciRPcGVuVVJJQWN0aW9uLmNsYXNzCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzL2Jpbi9vcmcvZWNsaXBzZS9zdGVtL2xvZ2dlcnMvcHJvdmlkZXIvc2ltdWxhdGlvbmxvZ2dlckVkaXRvckFkdmlzb3IkUGVyc3BlY3RpdmUuY2xhc3MgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy9iaW4vb3JnL2VjbGlwc2Uvc3RlbS9sb2dnZXJzL3Byb3ZpZGVyL3NpbXVsYXRpb25sb2dnZXJFZGl0b3JBZHZpc29yJFBlcnNwZWN0aXZlLmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI2NjExOWYKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy9iaW4vb3JnL2VjbGlwc2Uvc3RlbS9sb2dnZXJzL3Byb3ZpZGVyL3NpbXVsYXRpb25sb2dnZXJFZGl0b3JBZHZpc29yJFBlcnNwZWN0aXZlLmNsYXNzCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzL2Jpbi9vcmcvZWNsaXBzZS9zdGVtL2xvZ2dlcnMvcHJvdmlkZXIvc2ltdWxhdGlvbmxvZ2dlckVkaXRvckFkdmlzb3IkV2luZG93QWN0aW9uQmFyQWR2aXNvci5jbGFzcyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzL2Jpbi9vcmcvZWNsaXBzZS9zdGVtL2xvZ2dlcnMvcHJvdmlkZXIvc2ltdWxhdGlvbmxvZ2dlckVkaXRvckFkdmlzb3IkV2luZG93QWN0aW9uQmFyQWR2aXNvci5jbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wN2ZmMjRiCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMvYmluL29yZy9lY2xpcHNlL3N0ZW0vbG9nZ2Vycy9wcm92aWRlci9zaW11bGF0aW9ubG9nZ2VyRWRpdG9yQWR2aXNvciRXaW5kb3dBY3Rpb25CYXJBZHZpc29yLmNsYXNzCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzL2Jpbi9vcmcvZWNsaXBzZS9zdGVtL2xvZ2dlcnMvcHJvdmlkZXIvc2ltdWxhdGlvbmxvZ2dlckVkaXRvckFkdmlzb3IkV2luZG93QWR2aXNvci5jbGFzcyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzL2Jpbi9vcmcvZWNsaXBzZS9zdGVtL2xvZ2dlcnMvcHJvdmlkZXIvc2ltdWxhdGlvbmxvZ2dlckVkaXRvckFkdmlzb3IkV2luZG93QWR2aXNvci5jbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NDIxOWM4Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMvYmluL29yZy9lY2xpcHNlL3N0ZW0vbG9nZ2Vycy9wcm92aWRlci9zaW11bGF0aW9ubG9nZ2VyRWRpdG9yQWR2aXNvciRXaW5kb3dBZHZpc29yLmNsYXNzCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzL2Jpbi9vcmcvZWNsaXBzZS9zdGVtL2xvZ2dlcnMvcHJvdmlkZXIvc2ltdWxhdGlvbmxvZ2dlckVkaXRvckFkdmlzb3IuY2xhc3MgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy9iaW4vb3JnL2VjbGlwc2Uvc3RlbS9sb2dnZXJzL3Byb3ZpZGVyL3NpbXVsYXRpb25sb2dnZXJFZGl0b3JBZHZpc29yLmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY1ZDdhZmYKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy9iaW4vb3JnL2VjbGlwc2Uvc3RlbS9sb2dnZXJzL3Byb3ZpZGVyL3NpbXVsYXRpb25sb2dnZXJFZGl0b3JBZHZpc29yLmNsYXNzCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzL2Jpbi9vcmcvZWNsaXBzZS9zdGVtL2xvZ2dlcnMvdXRpbC9TaW11bGF0aW9uTG9nZ2VyQWRhcHRlckZhY3RvcnkkMS5jbGFzcyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzL2Jpbi9vcmcvZWNsaXBzZS9zdGVtL2xvZ2dlcnMvdXRpbC9TaW11bGF0aW9uTG9nZ2VyQWRhcHRlckZhY3RvcnkkMS5jbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYjcwYTUzCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMvYmluL29yZy9lY2xpcHNlL3N0ZW0vbG9nZ2Vycy91dGlsL1NpbXVsYXRpb25Mb2dnZXJBZGFwdGVyRmFjdG9yeSQxLmNsYXNzCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzL2Jpbi9vcmcvZWNsaXBzZS9zdGVtL2xvZ2dlcnMvdXRpbC9TaW11bGF0aW9uTG9nZ2VyQWRhcHRlckZhY3RvcnkuY2xhc3MgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy9iaW4vb3JnL2VjbGlwc2Uvc3RlbS9sb2dnZXJzL3V0aWwvU2ltdWxhdGlvbkxvZ2dlckFkYXB0ZXJGYWN0b3J5LmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE2YjRlMWMKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy9iaW4vb3JnL2VjbGlwc2Uvc3RlbS9sb2dnZXJzL3V0aWwvU2ltdWxhdGlvbkxvZ2dlckFkYXB0ZXJGYWN0b3J5LmNsYXNzCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzL2Jpbi9vcmcvZWNsaXBzZS9zdGVtL2xvZ2dlcnMvdXRpbC9TaW11bGF0aW9uTG9nZ2VyU3dpdGNoLmNsYXNzIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMvYmluL29yZy9lY2xpcHNlL3N0ZW0vbG9nZ2Vycy91dGlsL1NpbXVsYXRpb25Mb2dnZXJTd2l0Y2guY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDZjZmY1YgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzL2Jpbi9vcmcvZWNsaXBzZS9zdGVtL2xvZ2dlcnMvdXRpbC9TaW11bGF0aW9uTG9nZ2VyU3dpdGNoLmNsYXNzCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzL2J1aWxkLnByb3BlcnRpZXMgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy9idWlsZC5wcm9wZXJ0aWVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY2ZDljMmQKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy9idWlsZC5wcm9wZXJ0aWVzCkBAIC0wLDAgKzEsMTQgQEAKKworIyA8Y29weXJpZ2h0PgorIyA8L2NvcHlyaWdodD4KKyMKKyMgJElkJAorCitiaW4uaW5jbHVkZXMgPSAuLFwKKyAgICAgICAgICAgICAgIG1vZGVsLyxcCisgICAgICAgICAgICAgICBNRVRBLUlORi8sXAorICAgICAgICAgICAgICAgcGx1Z2luLnhtbCxcCisgICAgICAgICAgICAgICBwbHVnaW4ucHJvcGVydGllcworamFycy5jb21waWxlLm9yZGVyID0gLgorc291cmNlLi4gPSBzcmMvCitvdXRwdXQuLiA9IGJpbi8KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzL2ljb25zL2Z1bGwvb2JqMTYvQ1NWTG9nZ2VyLmdpZiBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzL2ljb25zL2Z1bGwvb2JqMTYvQ1NWTG9nZ2VyLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNjczYTUyCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMvaWNvbnMvZnVsbC9vYmoxNi9DU1ZMb2dnZXIuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzL2ljb25zL2Z1bGwvb2JqMTYvU2ltdWxhdGlvbkxvZ2dlci5naWYgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy9pY29ucy9mdWxsL29iajE2L1NpbXVsYXRpb25Mb2dnZXIuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMwZjBjNDgKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy9pY29ucy9mdWxsL29iajE2L1NpbXVsYXRpb25Mb2dnZXIuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzL2ljb25zL2Z1bGwvb2JqMTYvU2ltdWxhdGlvbkxvZ2dlckV2ZW50LmdpZiBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzL2ljb25zL2Z1bGwvb2JqMTYvU2ltdWxhdGlvbkxvZ2dlckV2ZW50LmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MjBlZWUxCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMvaWNvbnMvZnVsbC9vYmoxNi9TaW11bGF0aW9uTG9nZ2VyRXZlbnQuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzL2ljb25zL2Z1bGwvb2JqMTYvU2ltdWxhdGlvbkxvZ2dlck1vZGVsRmlsZS5naWYgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy9pY29ucy9mdWxsL29iajE2L1NpbXVsYXRpb25Mb2dnZXJNb2RlbEZpbGUuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIyZWM3NWIKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy9pY29ucy9mdWxsL29iajE2L1NpbXVsYXRpb25Mb2dnZXJNb2RlbEZpbGUuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzL2ljb25zL2Z1bGwvb2JqMTYvU3luY2hyb25vdXNMb2dnZXIuZ2lmIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMvaWNvbnMvZnVsbC9vYmoxNi9TeW5jaHJvbm91c0xvZ2dlci5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2MyYWFhYwotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzL2ljb25zL2Z1bGwvb2JqMTYvU3luY2hyb25vdXNMb2dnZXIuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzL2ljb25zL2Z1bGwvd2l6YmFuL05ld1NpbXVsYXRpb25Mb2dnZXIuZ2lmIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMvaWNvbnMvZnVsbC93aXpiYW4vTmV3U2ltdWxhdGlvbkxvZ2dlci5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjU5NzA0YwotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzL2ljb25zL2Z1bGwvd2l6YmFuL05ld1NpbXVsYXRpb25Mb2dnZXIuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzL21vZGVscy9TaW11bGF0aW9uTG9nZ2VyLmVjb3JlIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMvbW9kZWxzL1NpbXVsYXRpb25Mb2dnZXIuZWNvcmUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmQ2ZTQ0NQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzL21vZGVscy9TaW11bGF0aW9uTG9nZ2VyLmVjb3JlCkBAIC0wLDAgKzEsMzkgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8ZWNvcmU6RVBhY2thZ2UgeG1pOnZlcnNpb249IjIuMCIKKyAgICB4bWxuczp4bWk9Imh0dHA6Ly93d3cub21nLm9yZy9YTUkiIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiCisgICAgeG1sbnM6ZWNvcmU9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDIvRWNvcmUiIG5hbWU9ImxvZ2dlcnMiCisgICAgbnNVUkk9Imh0dHA6Ly9vcmcvZWNsaXBzZS9zdGVtL2xvZ2dlcnMvIiBuc1ByZWZpeD0ib3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzIj4KKyAgPGVDbGFzc2lmaWVycyB4c2k6dHlwZT0iZWNvcmU6RUNsYXNzIiBuYW1lPSJTaW11bGF0aW9uTG9nZ2VyIiBhYnN0cmFjdD0idHJ1ZSIgZVN1cGVyVHlwZXM9Ii4uLy4uL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9tb2RlbC9sb2dnZXIuZWNvcmUjLy9Mb2dnZXIiPgorICAgIDxlT3BlcmF0aW9ucyBuYW1lPSJzaW11bGF0aW9uRXZlbnQiPgorICAgICAgPGVQYXJhbWV0ZXJzIG5hbWU9ImV2ZW50IiBlVHlwZT0iIy8vU2ltdWxhdGlvbkV2ZW50Ii8+CisgICAgPC9lT3BlcmF0aW9ucz4KKyAgICA8ZU9wZXJhdGlvbnMgbmFtZT0ibG9nZ2VyRXZlbnQiPgorICAgICAgPGVQYXJhbWV0ZXJzIG5hbWU9InNpbXVsYXRpb24iIGVUeXBlPSIjLy9TaW11bGF0aW9uIi8+CisgICAgICA8ZVBhcmFtZXRlcnMgbmFtZT0iZXZlbnQiIGVUeXBlPSIjLy9MT0dHRVJfRVZFTlRTIi8+CisgICAgPC9lT3BlcmF0aW9ucz4KKyAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0iZW5hYmxlZCIgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLmVtZi5lY29yZS9tb2RlbC9FY29yZS5lY29yZSMvL0VCb29sZWFuIgorICAgICAgICBkZWZhdWx0VmFsdWVMaXRlcmFsPSJ0cnVlIi8+CisgIDwvZUNsYXNzaWZpZXJzPgorICA8ZUNsYXNzaWZpZXJzIHhzaTp0eXBlPSJlY29yZTpFRW51bSIgbmFtZT0iTE9HR0VSX0VWRU5UUyI+CisgICAgPGVMaXRlcmFscyBuYW1lPSJMT0dHRVJfTUFOQUdFUl9TVEFSVEVEIiBsaXRlcmFsPSJMT0dHRVJfTUFOQUdFUl9TVEFSVEVEIi8+CisgICAgPGVMaXRlcmFscyBuYW1lPSJMT0dHRVJfTUFOQUdFUl9TVE9QUEVEIiB2YWx1ZT0iMSIgbGl0ZXJhbD0iTE9HR0VSX01BTkFHRVJfU1RPUFBFRCIvPgorICAgIDxlTGl0ZXJhbHMgbmFtZT0iTE9HR0VSX1NUQVJURUQiIHZhbHVlPSIyIiBsaXRlcmFsPSJMT0dHRVJfU1RBUlRFRCIvPgorICAgIDxlTGl0ZXJhbHMgbmFtZT0iTE9HR0VSX1NUT1BQRUQiIHZhbHVlPSIzIiBsaXRlcmFsPSJMT0dHRVJfU1RPUFBFRCIvPgorICAgIDxlTGl0ZXJhbHMgbmFtZT0iTE9HR0VSX0VOQUJMRUQiIHZhbHVlPSI0IiBsaXRlcmFsPSJMT0dHRVJfRU5BQkxFRCIvPgorICAgIDxlTGl0ZXJhbHMgbmFtZT0iTE9HR0VSX0RJU0FCTEVEIiB2YWx1ZT0iNSIgbGl0ZXJhbD0iTE9HR0VSX0RJU0FCTEVEIi8+CisgICAgPGVMaXRlcmFscyBuYW1lPSJTSU1VTEFUSU9OU19BRERFRCIgdmFsdWU9IjYiIGxpdGVyYWw9IlNJTVVMQVRJT05TX0FEREVEIi8+CisgICAgPGVMaXRlcmFscyBuYW1lPSJTSU1VTEFUSU9OU19SRU1PVkVEIiB2YWx1ZT0iNyIgbGl0ZXJhbD0iIi8+CisgICAgPGVMaXRlcmFscyBuYW1lPSJMT0dHRVJTX0FEREVEIiB2YWx1ZT0iOCIgbGl0ZXJhbD0iTE9HR0VSU19BRERFRCIvPgorICAgIDxlTGl0ZXJhbHMgbmFtZT0iTE9HR0VSU19SRU1PVkVEIiB2YWx1ZT0iOSIvPgorICA8L2VDbGFzc2lmaWVycz4KKyAgPGVDbGFzc2lmaWVycyB4c2k6dHlwZT0iZWNvcmU6RUNsYXNzIiBuYW1lPSJTeW5jaHJvbm91c0xvZ2dlciIgYWJzdHJhY3Q9InRydWUiIGludGVyZmFjZT0idHJ1ZSIKKyAgICAgIGVTdXBlclR5cGVzPSIjLy9TaW11bGF0aW9uTG9nZ2VyIi8+CisgIDxlQ2xhc3NpZmllcnMgeHNpOnR5cGU9ImVjb3JlOkVEYXRhVHlwZSIgbmFtZT0iU2ltdWxhdGlvbiIgaW5zdGFuY2VDbGFzc05hbWU9Im9yZy5lY2xpcHNlLnN0ZW0uam9icy5zaW11bGF0aW9uLklTaW11bGF0aW9uIgorICAgICAgc2VyaWFsaXphYmxlPSJmYWxzZSIvPgorICA8ZUNsYXNzaWZpZXJzIHhzaTp0eXBlPSJlY29yZTpFQ2xhc3MiIG5hbWU9IklTaW11bGF0aW9uTGlzdGVuZXIiIGluc3RhbmNlQ2xhc3NOYW1lPSJvcmcuZWNsaXBzZS5zdGVtLmpvYnMuc2ltdWxhdGlvbi5JU2ltdWxhdGlvbkxpc3RlbmVyIgorICAgICAgYWJzdHJhY3Q9InRydWUiIGludGVyZmFjZT0idHJ1ZSIvPgorICA8ZUNsYXNzaWZpZXJzIHhzaTp0eXBlPSJlY29yZTpFQ2xhc3MiIG5hbWU9IkFzeW5jaHJvbm91c0xvZ2dlciIgYWJzdHJhY3Q9InRydWUiCisgICAgICBpbnRlcmZhY2U9InRydWUiIGVTdXBlclR5cGVzPSIjLy9TaW11bGF0aW9uTG9nZ2VyIi8+CisgIDxlQ2xhc3NpZmllcnMgeHNpOnR5cGU9ImVjb3JlOkVEYXRhVHlwZSIgbmFtZT0iU2ltdWxhdGlvbkV2ZW50IiBpbnN0YW5jZUNsYXNzTmFtZT0ib3JnLmVjbGlwc2Uuc3RlbS5qb2JzLnNpbXVsYXRpb24uU2ltdWxhdGlvbkV2ZW50Ii8+CisgIDxlQ2xhc3NpZmllcnMgeHNpOnR5cGU9ImVjb3JlOkVDbGFzcyIgbmFtZT0iU2ltdWxhdGlvbkxvZ2dlckV2ZW50Ii8+Cis8L2Vjb3JlOkVQYWNrYWdlPgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMvbW9kZWxzL1NpbXVsYXRpb25Mb2dnZXIuZ2VubW9kZWwgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy9tb2RlbHMvU2ltdWxhdGlvbkxvZ2dlci5nZW5tb2RlbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNzVmYTQ3Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMvbW9kZWxzL1NpbXVsYXRpb25Mb2dnZXIuZ2VubW9kZWwKQEAgLTAsMCArMSw0NSBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxnZW5tb2RlbDpHZW5Nb2RlbCB4bWk6dmVyc2lvbj0iMi4wIgorICAgIHhtbG5zOnhtaT0iaHR0cDovL3d3dy5vbWcub3JnL1hNSSIgeG1sbnM6ZWNvcmU9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDIvRWNvcmUiCisgICAgeG1sbnM6Z2VubW9kZWw9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDIvR2VuTW9kZWwiIG1vZGVsRGlyZWN0b3J5PSIvb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzL3NyYyIKKyAgICBlZGl0RGlyZWN0b3J5PSIvb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzL3NyYyIgZWRpdG9yRGlyZWN0b3J5PSIvb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzL3NyYyIKKyAgICBtb2RlbFBsdWdpbklEPSJvcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMiIHRlbXBsYXRlRGlyZWN0b3J5PSIiIHJlZGlyZWN0aW9uPSIiIG1vZGVsTmFtZT0ic2ltdWxhdGlvbmxvZ2dlciIKKyAgICBtb2RlbFBsdWdpbkNsYXNzPSIiIGVkaXRQbHVnaW5DbGFzcz0ib3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzLnByb3ZpZGVyLlNpbXVsYXRpb25Mb2dnZXJFZGl0UGx1Z2luIgorICAgIGVkaXRvclBsdWdpbkNsYXNzPSJvcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMucHJlc2VudGF0aW9uLlNpbXVsYXRpb25Mb2dnZXJFZGl0b3JQbHVnaW4iCisgICAgdGVzdFN1aXRlQ2xhc3M9Im9yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy50ZXN0cy5TaW11bGF0aW9uTG9nZ2VyQWxsVGVzdHMiIGltcG9ydGVySUQ9Im9yZy5lY2xpcHNlLmVtZi5pbXBvcnRlci5lY29yZSIKKyAgICBjb21wbGlhbmNlTGV2ZWw9IjUuMCIgZWRpdFBsdWdpbklEPSJvcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMiIHJ1bnRpbWVWZXJzaW9uPSIyLjYiCisgICAgbGFuZ3VhZ2U9IiIgdXNlZEdlblBhY2thZ2VzPSIuLi8uLi9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvbW9kZWwvY29yZS5nZW5tb2RlbCMvL2NvbW1vbiAuLi8uLi9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvbW9kZWwvY29yZS5nZW5tb2RlbCMvL2dyYXBoIC4uLy4uL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9tb2RlbC9jb3JlLmdlbm1vZGVsIy8vbW9kZWwgLi4vLi4vb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL21vZGVsL2NvcmUuZ2VubW9kZWwjLy9tb2RpZmllciAuLi8uLi9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvbW9kZWwvY29yZS5nZW5tb2RlbCMvL3NjZW5hcmlvIC4uLy4uL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9tb2RlbC9jb3JlLmdlbm1vZGVsIy8vc2VxdWVuY2VyIC4uLy4uL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9tb2RlbC9jb3JlLmdlbm1vZGVsIy8vc29sdmVyIC4uLy4uL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9tb2RlbC9jb3JlLmdlbm1vZGVsIy8vbG9nZ2VyIHBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2UuZW1mLmVjb3JlL21vZGVsL0Vjb3JlLmdlbm1vZGVsIy8vZWNvcmUiCisgICAgcnVudGltZVBsYXRmb3JtPSJSQ1AiPgorICA8Zm9yZWlnbk1vZGVsPlNpbXVsYXRpb25Mb2dnZXIuZWNvcmU8L2ZvcmVpZ25Nb2RlbD4KKyAgPGdlblBhY2thZ2VzIHByZWZpeD0iU2ltdWxhdGlvbkxvZ2dlciIgYmFzZVBhY2thZ2U9Im9yZy5lY2xpcHNlLnN0ZW0iIGRpc3Bvc2FibGVQcm92aWRlckZhY3Rvcnk9InRydWUiCisgICAgICBmaWxlRXh0ZW5zaW9ucz0ibG9nZ2VyIiBlY29yZVBhY2thZ2U9IlNpbXVsYXRpb25Mb2dnZXIuZWNvcmUjLyI+CisgICAgPGdlbkVudW1zIHR5cGVTYWZlRW51bUNvbXBhdGlibGU9ImZhbHNlIiBlY29yZUVudW09IlNpbXVsYXRpb25Mb2dnZXIuZWNvcmUjLy9MT0dHRVJfRVZFTlRTIj4KKyAgICAgIDxnZW5FbnVtTGl0ZXJhbHMgZWNvcmVFbnVtTGl0ZXJhbD0iU2ltdWxhdGlvbkxvZ2dlci5lY29yZSMvL0xPR0dFUl9FVkVOVFMvTE9HR0VSX01BTkFHRVJfU1RBUlRFRCIvPgorICAgICAgPGdlbkVudW1MaXRlcmFscyBlY29yZUVudW1MaXRlcmFsPSJTaW11bGF0aW9uTG9nZ2VyLmVjb3JlIy8vTE9HR0VSX0VWRU5UUy9MT0dHRVJfTUFOQUdFUl9TVE9QUEVEIi8+CisgICAgICA8Z2VuRW51bUxpdGVyYWxzIGVjb3JlRW51bUxpdGVyYWw9IlNpbXVsYXRpb25Mb2dnZXIuZWNvcmUjLy9MT0dHRVJfRVZFTlRTL0xPR0dFUl9TVEFSVEVEIi8+CisgICAgICA8Z2VuRW51bUxpdGVyYWxzIGVjb3JlRW51bUxpdGVyYWw9IlNpbXVsYXRpb25Mb2dnZXIuZWNvcmUjLy9MT0dHRVJfRVZFTlRTL0xPR0dFUl9TVE9QUEVEIi8+CisgICAgICA8Z2VuRW51bUxpdGVyYWxzIGVjb3JlRW51bUxpdGVyYWw9IlNpbXVsYXRpb25Mb2dnZXIuZWNvcmUjLy9MT0dHRVJfRVZFTlRTL0xPR0dFUl9FTkFCTEVEIi8+CisgICAgICA8Z2VuRW51bUxpdGVyYWxzIGVjb3JlRW51bUxpdGVyYWw9IlNpbXVsYXRpb25Mb2dnZXIuZWNvcmUjLy9MT0dHRVJfRVZFTlRTL0xPR0dFUl9ESVNBQkxFRCIvPgorICAgICAgPGdlbkVudW1MaXRlcmFscyBlY29yZUVudW1MaXRlcmFsPSJTaW11bGF0aW9uTG9nZ2VyLmVjb3JlIy8vTE9HR0VSX0VWRU5UUy9TSU1VTEFUSU9OU19BRERFRCIvPgorICAgICAgPGdlbkVudW1MaXRlcmFscyBlY29yZUVudW1MaXRlcmFsPSJTaW11bGF0aW9uTG9nZ2VyLmVjb3JlIy8vTE9HR0VSX0VWRU5UUy9TSU1VTEFUSU9OU19SRU1PVkVEIi8+CisgICAgICA8Z2VuRW51bUxpdGVyYWxzIGVjb3JlRW51bUxpdGVyYWw9IlNpbXVsYXRpb25Mb2dnZXIuZWNvcmUjLy9MT0dHRVJfRVZFTlRTL0xPR0dFUlNfQURERUQiLz4KKyAgICAgIDxnZW5FbnVtTGl0ZXJhbHMgZWNvcmVFbnVtTGl0ZXJhbD0iU2ltdWxhdGlvbkxvZ2dlci5lY29yZSMvL0xPR0dFUl9FVkVOVFMvTE9HR0VSU19SRU1PVkVEIi8+CisgICAgPC9nZW5FbnVtcz4KKyAgICA8Z2VuRGF0YVR5cGVzIGVjb3JlRGF0YVR5cGU9IlNpbXVsYXRpb25Mb2dnZXIuZWNvcmUjLy9TaW11bGF0aW9uIi8+CisgICAgPGdlbkRhdGFUeXBlcyBlY29yZURhdGFUeXBlPSJTaW11bGF0aW9uTG9nZ2VyLmVjb3JlIy8vU2ltdWxhdGlvbkV2ZW50Ii8+CisgICAgPGdlbkNsYXNzZXMgZWNvcmVDbGFzcz0iU2ltdWxhdGlvbkxvZ2dlci5lY29yZSMvL1NpbXVsYXRpb25Mb2dnZXIiPgorICAgICAgPGdlbkZlYXR1cmVzIGNyZWF0ZUNoaWxkPSJmYWxzZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFQXR0cmlidXRlIFNpbXVsYXRpb25Mb2dnZXIuZWNvcmUjLy9TaW11bGF0aW9uTG9nZ2VyL2VuYWJsZWQiLz4KKyAgICAgIDxnZW5PcGVyYXRpb25zIGVjb3JlT3BlcmF0aW9uPSJTaW11bGF0aW9uTG9nZ2VyLmVjb3JlIy8vU2ltdWxhdGlvbkxvZ2dlci9zaW11bGF0aW9uRXZlbnQiPgorICAgICAgICA8Z2VuUGFyYW1ldGVycyBlY29yZVBhcmFtZXRlcj0iU2ltdWxhdGlvbkxvZ2dlci5lY29yZSMvL1NpbXVsYXRpb25Mb2dnZXIvc2ltdWxhdGlvbkV2ZW50L2V2ZW50Ii8+CisgICAgICA8L2dlbk9wZXJhdGlvbnM+CisgICAgICA8Z2VuT3BlcmF0aW9ucyBlY29yZU9wZXJhdGlvbj0iU2ltdWxhdGlvbkxvZ2dlci5lY29yZSMvL1NpbXVsYXRpb25Mb2dnZXIvbG9nZ2VyRXZlbnQiPgorICAgICAgICA8Z2VuUGFyYW1ldGVycyBlY29yZVBhcmFtZXRlcj0iU2ltdWxhdGlvbkxvZ2dlci5lY29yZSMvL1NpbXVsYXRpb25Mb2dnZXIvbG9nZ2VyRXZlbnQvc2ltdWxhdGlvbiIvPgorICAgICAgICA8Z2VuUGFyYW1ldGVycyBlY29yZVBhcmFtZXRlcj0iU2ltdWxhdGlvbkxvZ2dlci5lY29yZSMvL1NpbXVsYXRpb25Mb2dnZXIvbG9nZ2VyRXZlbnQvZXZlbnQiLz4KKyAgICAgIDwvZ2VuT3BlcmF0aW9ucz4KKyAgICA8L2dlbkNsYXNzZXM+CisgICAgPGdlbkNsYXNzZXMgZWNvcmVDbGFzcz0iU2ltdWxhdGlvbkxvZ2dlci5lY29yZSMvL1N5bmNocm9ub3VzTG9nZ2VyIi8+CisgICAgPGdlbkNsYXNzZXMgaW1hZ2U9ImZhbHNlIiBlY29yZUNsYXNzPSJTaW11bGF0aW9uTG9nZ2VyLmVjb3JlIy8vSVNpbXVsYXRpb25MaXN0ZW5lciIvPgorICAgIDxnZW5DbGFzc2VzIGltYWdlPSJmYWxzZSIgZWNvcmVDbGFzcz0iU2ltdWxhdGlvbkxvZ2dlci5lY29yZSMvL0FzeW5jaHJvbm91c0xvZ2dlciIvPgorICAgIDxnZW5DbGFzc2VzIGVjb3JlQ2xhc3M9IlNpbXVsYXRpb25Mb2dnZXIuZWNvcmUjLy9TaW11bGF0aW9uTG9nZ2VyRXZlbnQiLz4KKyAgPC9nZW5QYWNrYWdlcz4KKzwvZ2VubW9kZWw6R2VuTW9kZWw+CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy9wbHVnaW4ucHJvcGVydGllcyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzL3BsdWdpbi5wcm9wZXJ0aWVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYyMjkyNDYKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy9wbHVnaW4ucHJvcGVydGllcwpAQCAtMCwwICsxLDkyIEBACisKKyMgPGNvcHlyaWdodD4KKyMgPC9jb3B5cmlnaHQ+CisjCisjICRJZCQKKworcGx1Z2luTmFtZSA9IFNpbXVsYXRpb25Mb2dnZXIgTW9kZWwKK3Byb3ZpZGVyTmFtZSA9IHd3dy5leGFtcGxlLm9yZworX1VJX0NyZWF0ZUNoaWxkX3RleHQgPSB7MH0KK19VSV9DcmVhdGVDaGlsZF90ZXh0MiA9IHsxfSB7MH0KK19VSV9DcmVhdGVDaGlsZF90ZXh0MyA9IHsxfQorX1VJX0NyZWF0ZUNoaWxkX3Rvb2x0aXAgPSBDcmVhdGUgTmV3IHswfSBVbmRlciB7MX0gRmVhdHVyZQorX1VJX0NyZWF0ZUNoaWxkX2Rlc2NyaXB0aW9uID0gQ3JlYXRlIGEgbmV3IGNoaWxkIG9mIHR5cGUgezB9IGZvciB0aGUgezF9IGZlYXR1cmUgb2YgdGhlIHNlbGVjdGVkIHsyfS4KK19VSV9DcmVhdGVTaWJsaW5nX2Rlc2NyaXB0aW9uID0gQ3JlYXRlIGEgbmV3IHNpYmxpbmcgb2YgdHlwZSB7MH0gZm9yIHRoZSBzZWxlY3RlZCB7Mn0sIHVuZGVyIHRoZSB7MX0gZmVhdHVyZSBvZiB0aGVpciBwYXJlbnQuCitfVUlfUHJvcGVydHlEZXNjcmlwdG9yX2Rlc2NyaXB0aW9uID0gVGhlIHswfSBvZiB0aGUgezF9CitfVUlfU2ltdWxhdGlvbkxvZ2dlcl90eXBlID0gU2ltdWxhdGlvbiBMb2dnZXIKK19VSV9TeW5jaHJvbm91c0xvZ2dlcl90eXBlID0gU3luY2hyb25vdXMgTG9nZ2VyCitfVUlfSVNpbXVsYXRpb25MaXN0ZW5lcl90eXBlID0gSVNpbXVsYXRpb24gTGlzdGVuZXIKK19VSV9Bc3luY2hyb25vdXNMb2dnZXJfdHlwZSA9IEFzeW5jaHJvbm91cyBMb2dnZXIKK19VSV9Vbmtub3duX3R5cGUgPSBPYmplY3QKK19VSV9Vbmtub3duX2RhdGF0eXBlPSBWYWx1ZQorX1VJX1Vua25vd25fZmVhdHVyZSA9IFVuc3BlY2lmaWVkCitfVUlfQ1NWTG9nZ2VyX3R5cGUgPSBMb2dnZXIKK19VSV9DU1ZMb2dnZXJfdXNlRGVmYXVsdExvZ0RpcmVjdG9yeV9mZWF0dXJlID0gVXNlIERlZmF1bHQgTG9nIERpcmVjdG9yeQorX1VJX0NTVkxvZ2dlcl9sb2dEaXJlY3RvcnlfZmVhdHVyZSA9IExvZyBEaXJlY3RvcnkKK19VSV9DU1ZMb2dnZXJfZGVsaW1ldGVyX2ZlYXR1cmUgPSBEZWxpbWV0ZXIKK19VSV9TaW11bGF0aW9uTG9nZ2VyRWRpdG9yX21lbnUgPSAmU2ltdWxhdGlvbkxvZ2dlciBFZGl0b3IKK19VSV9DcmVhdGVDaGlsZF9tZW51X2l0ZW0gPSAmTmV3IENoaWxkCitfVUlfQ3JlYXRlU2libGluZ19tZW51X2l0ZW0gPSBOJmV3IFNpYmxpbmcKK19VSV9TaG93UHJvcGVydGllc1ZpZXdfbWVudV9pdGVtID0gU2hvdyAmUHJvcGVydGllcyBWaWV3CitfVUlfUmVmcmVzaFZpZXdlcl9tZW51X2l0ZW0gPSAmUmVmcmVzaAorX1VJX1NlbGVjdGlvblBhZ2VfbGFiZWwgPSBTZWxlY3Rpb24KK19VSV9QYXJlbnRQYWdlX2xhYmVsID0gUGFyZW50CitfVUlfTGlzdFBhZ2VfbGFiZWwgPSBMaXN0CitfVUlfVHJlZVBhZ2VfbGFiZWwgPSBUcmVlCitfVUlfVGFibGVQYWdlX2xhYmVsID0gVGFibGUKK19VSV9UcmVlV2l0aENvbHVtbnNQYWdlX2xhYmVsID0gVHJlZSB3aXRoIENvbHVtbnMKK19VSV9PYmplY3RDb2x1bW5fbGFiZWwgPSBPYmplY3QKK19VSV9TZWxmQ29sdW1uX2xhYmVsID0gU2VsZgorX1VJX05vT2JqZWN0U2VsZWN0ZWQgPSBTZWxlY3RlZCBOb3RoaW5nCitfVUlfU2luZ2xlT2JqZWN0U2VsZWN0ZWQgPSBTZWxlY3RlZCBPYmplY3Q6IHswfQorX1VJX011bHRpT2JqZWN0U2VsZWN0ZWQgPSBTZWxlY3RlZCB7MH0gT2JqZWN0cworX1VJX09wZW5FZGl0b3JFcnJvcl9sYWJlbCA9IE9wZW4gRWRpdG9yCitfVUlfV2l6YXJkX2NhdGVnb3J5ID0gRXhhbXBsZSBFTUYgTW9kZWwgQ3JlYXRpb24gV2l6YXJkcworX1VJX0NyZWF0ZU1vZGVsRXJyb3JfbWVzc2FnZSA9IFByb2JsZW1zIGVuY291bnRlcmVkIGluIGZpbGUgInswfSIKK19VSV9TaW11bGF0aW9uTG9nZ2VyTW9kZWxXaXphcmRfbGFiZWwgPSBTaW11bGF0aW9uTG9nZ2VyIE1vZGVsCitfVUlfU2ltdWxhdGlvbkxvZ2dlck1vZGVsV2l6YXJkX2Rlc2NyaXB0aW9uID0gQ3JlYXRlIGEgbmV3IFNpbXVsYXRpb25Mb2dnZXIgbW9kZWwKK19VSV9TaW11bGF0aW9uTG9nZ2VyRWRpdG9yX2xhYmVsID0gU2ltdWxhdGlvbkxvZ2dlciBNb2RlbCBFZGl0b3IKK19VSV9TaW11bGF0aW9uTG9nZ2VyRWRpdG9yRmlsZW5hbWVEZWZhdWx0QmFzZSA9IE15CitfVUlfU2ltdWxhdGlvbkxvZ2dlckVkaXRvckZpbGVuYW1lRXh0ZW5zaW9ucyA9IGxvZ2dlcgorX1VJX1dpemFyZF9sYWJlbCA9IE5ldworX1dBUk5fRmlsZW5hbWVFeHRlbnNpb24gPSBUaGUgZmlsZSBuYW1lIG11c3QgZW5kIGluICcnLnswfScnCitfV0FSTl9GaWxlbmFtZUV4dGVuc2lvbnMgPSBUaGUgZmlsZSBuYW1lIG11c3QgaGF2ZSBvbmUgb2YgdGhlIGZvbGxvd2luZyBleHRlbnNpb25zOiB7MH0KK19VSV9Nb2RlbE9iamVjdCA9ICZNb2RlbCBPYmplY3QKK19VSV9YTUxFbmNvZGluZyA9ICZYTUwgRW5jb2RpbmcKK19VSV9YTUxFbmNvZGluZ0Nob2ljZXMgPSBVVEYtOCBBU0NJSSBVVEYtMTYgVVRGLTE2QkUgVVRGLTE2TEUgSVNPLTg4NTktMQorX1VJX1dpemFyZF9pbml0aWFsX29iamVjdF9kZXNjcmlwdGlvbiA9IFNwZWNpZnkgYSBmaWxlIG5hbWUgYW5kIHNlbGVjdCBhIG1vZGVsIG9iamVjdCB0byBjcmVhdGUKK19VSV9GaWxlQ29uZmxpY3RfbGFiZWwgPSBGaWxlIENvbmZsaWN0CitfV0FSTl9GaWxlQ29uZmxpY3QgPSBUaGUgZmlsZSAiezB9IiBhbHJlYWR5IGV4aXN0cy4gIERvIHlvdSB3YW50IHRvIHJlcGxhY2UgdGhlIGV4aXN0aW5nIGZpbGU/CitfVUlfc2ltdWxhdGlvbmxvZ2dlckVkaXRvckFkdmlzb3JfQWN0aW9uU2V0X2xhYmVsID0gc2ltdWxhdGlvbmxvZ2dlciBBY3Rpb24gU2V0CitfVUlfUGVyc3BlY3RpdmVfbGFiZWwgPSBzaW11bGF0aW9ubG9nZ2VyCitfVUlfQnJvd3NlX2xhYmVsID0gJkJyb3dzZS4uLgorX1VJX0ZpbGVfbGFiZWwgPSAmRmlsZQorX1VJX1F1ZXN0aW9uX3RpdGxlID0gUXVlc3Rpb24KK19VSV9FcnJvcl90aXRsZSA9IEVycm9yCitfV0FSTl9Ob19FZGl0b3IgPSBUaGVyZSBpcyBubyBlZGl0b3IgcmVnaXN0ZXJlZCBmb3IgdGhlIGZpbGUgInswfSIuCitfVUlfQXBwbGljYXRpb25fdGl0bGUgPSBzaW11bGF0aW9ubG9nZ2VyIEFwcGxpY2F0aW9uCitfVUlfTWVudV9GaWxlX2xhYmVsID0gJkZpbGUKK19VSV9NZW51X05ld19sYWJlbCA9ICZOZXcKK19VSV9NZW51X09wZW5fbGFiZWwgPSAmT3Blbi4uLgorX1VJX01lbnVfT3Blbl9kZXNjcmlwdGlvbiA9IE9wZW5zIGEgbW9kZWwgb2JqZWN0IGZpbGUKK19VSV9NZW51X09wZW5VUklfbGFiZWwgPSAmT3BlbiBVUkkuLi4KK19VSV9NZW51X09wZW5VUklfZGVzY3JpcHRpb24gPSBPcGVucyBhIG1vZGVsIG9iamVjdCBsb2FkaW5nIGl0IGZyb20gYSBVUkkKK19VSV9NZW51X0VkaXRfbGFiZWwgPSAmRWRpdAorX1VJX01lbnVfV2luZG93X2xhYmVsID0gJldpbmRvdworX1VJX01lbnVfSGVscF9sYWJlbCA9ICZIZWxwCitfVUlfTWVudV9BYm91dF9sYWJlbCA9IHNpbXVsYXRpb25sb2dnZXIgJkFib3V0Li4uCitfVUlfQWJvdXRfdGl0bGUgPSBzaW11bGF0aW9ubG9nZ2VyIEFwcGxpY2F0aW9uCitfVUlfQWJvdXRfdGV4dCA9IHNpbXVsYXRpb25sb2dnZXIgQXBwbGljYXRpb24gYWJvdXQgYm94IGdvZXMgaGVyZS4KK19VSV9TaW11bGF0aW9uTG9nZ2VyTW9kZWxXaXphcmRfQWN0aW9uU2V0X2xhYmVsID0gU2ltdWxhdGlvbkxvZ2dlciBNb2RlbCBBY3Rpb24gU2V0CitfVUlfU2ltdWxhdGlvbkxvZ2dlckV2ZW50X3R5cGUgPSBFdmVudAorX1VJX1NpbXVsYXRpb25Mb2dnZXJfZW5hYmxlZF9mZWF0dXJlID0gRW5hYmxlZAorX1VJX0xPR0dFUl9FVkVOVFNfTE9HR0VSX01BTkFHRVJfU1RBUlRFRF9saXRlcmFsID0gTE9HR0VSX01BTkFHRVJfU1RBUlRFRAorX1VJX0xPR0dFUl9FVkVOVFNfTE9HR0VSX01BTkFHRVJfU1RPUFBFRF9saXRlcmFsID0gTE9HR0VSX01BTkFHRVJfU1RPUFBFRAorX1VJX0xPR0dFUl9FVkVOVFNfTE9HR0VSX1NUQVJURURfbGl0ZXJhbCA9IExPR0dFUl9TVEFSVEVECitfVUlfTE9HR0VSX0VWRU5UU19MT0dHRVJfU1RPUFBFRF9saXRlcmFsID0gTE9HR0VSX1NUT1BQRUQKK19VSV9MT0dHRVJfRVZFTlRTX0xPR0dFUl9FTkFCTEVEX2xpdGVyYWwgPSBMT0dHRVJfRU5BQkxFRAorX1VJX0xPR0dFUl9FVkVOVFNfTE9HR0VSX0RJU0FCTEVEX2xpdGVyYWwgPSBMT0dHRVJfRElTQUJMRUQKK19VSV9MT0dHRVJfRVZFTlRTX1NJTVVMQVRJT05TX0FEREVEX2xpdGVyYWwgPSBTSU1VTEFUSU9OU19BRERFRAorX1VJX0xPR0dFUl9FVkVOVFNfU0lNVUxBVElPTlNfUkVNT1ZFRF9saXRlcmFsID0gCitfVUlfTE9HR0VSX0VWRU5UU19MT0dHRVJTX0FEREVEX2xpdGVyYWwgPSBMT0dHRVJTX0FEREVECitfVUlfTE9HR0VSX0VWRU5UU19MT0dHRVJTX1JFTU9WRURfbGl0ZXJhbCA9IExPR0dFUlNfUkVNT1ZFRApkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMvcGx1Z2luLnhtbCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzL3BsdWdpbi54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWViNTk4ZQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzL3BsdWdpbi54bWwKQEAgLTAsMCArMSwyMCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzw/ZWNsaXBzZSB2ZXJzaW9uPSIzLjAiPz4KKworPCEtLQorIDxjb3B5cmlnaHQ+CisgPC9jb3B5cmlnaHQ+CisKKyAkSWQkCistLT4KKworPHBsdWdpbj4KKworICAgPGV4dGVuc2lvbiBwb2ludD0ib3JnLmVjbGlwc2UuZW1mLmVjb3JlLmdlbmVyYXRlZF9wYWNrYWdlIj4KKyAgICAgIDxwYWNrYWdlCisgICAgICAgICAgICB1cmk9Imh0dHA6Ly9vcmcvZWNsaXBzZS9zdGVtL2xvZ2dlcnMvIgorICAgICAgICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy5TaW11bGF0aW9uTG9nZ2VyUGFja2FnZSIKKyAgICAgICAgICAgIGdlbk1vZGVsPSJtb2RlbHMvU2ltdWxhdGlvbkxvZ2dlci5nZW5tb2RlbCIvPgorICAgPC9leHRlbnNpb24+CisKKzwvcGx1Z2luPgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vbG9nZ2Vycy9BY3RpdmF0b3IuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2xvZ2dlcnMvQWN0aXZhdG9yLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODcxZGRmZAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2xvZ2dlcnMvQWN0aXZhdG9yLmphdmEKQEAgLTAsMCArMSwxMDAgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0ubG9nZ2VyczsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QbHVnaW47CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlN0YXR1czsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMubWFuYWdlci5TaW11bGF0aW9uTG9nZ2VyTWFuYWdlcjsKK2ltcG9ydCBvcmcub3NnaS5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dDsKKworLyoqCisgKiBUaGUgYWN0aXZhdG9yIGNsYXNzIGNvbnRyb2xzIHRoZSBwbHVnLWluIGxpZmUgY3ljbGUKKyAqLworcHVibGljIGNsYXNzIEFjdGl2YXRvciBleHRlbmRzIFBsdWdpbiB7CisKKwkvKioKKwkgKiBUaGUgcGx1Zy1pbiBJRAorCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFBMVUdJTl9JRCA9ICJvcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMiOyAvLyROT04tTkxTLTEkCisKKwkvLyBUaGUgc2hhcmVkIGluc3RhbmNlCisJcHJpdmF0ZSBzdGF0aWMgQWN0aXZhdG9yIHBsdWdpbjsKKworCXByaXZhdGUgc3RhdGljIFNpbXVsYXRpb25Mb2dnZXJNYW5hZ2VyIGxvZ01ncjsKKwkKKwkvKioKKwkgKiBUaGUgY29uc3RydWN0b3IKKwkgKi8KKwlwdWJsaWMgQWN0aXZhdG9yKCkgeworCQlwbHVnaW4gPSB0aGlzOworCX0KKworCS8qKgorCSAqIEBwYXJhbSBjb250ZXh0CisJICogQHRocm93cyBFeGNlcHRpb24KKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBzdGFydChCdW5kbGVDb250ZXh0IGNvbnRleHQpIHRocm93cyBFeGNlcHRpb24geworCQlzdXBlci5zdGFydChjb250ZXh0KTsKKwkJbG9nTWdyID0gU2ltdWxhdGlvbkxvZ2dlck1hbmFnZXIuZ2V0TWFuYWdlcigpOworCQkKKwl9IC8vIHN0YXJ0CisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QbHVnaW4jc3RvcChvcmcub3NnaS5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBzdG9wKEJ1bmRsZUNvbnRleHQgY29udGV4dCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCWxvZ01nci5zaHV0ZG93bigpOworCQlsb2dNZ3IgPSBudWxsOworCQlwbHVnaW4gPSBudWxsOworCQlzdXBlci5zdG9wKGNvbnRleHQpOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIHNoYXJlZCBpbnN0YW5jZQorCSAqIAorCSAqIEByZXR1cm4gdGhlIHNoYXJlZCBpbnN0YW5jZQorCSAqLworCXB1YmxpYyBzdGF0aWMgQWN0aXZhdG9yIGdldERlZmF1bHQoKSB7CisJCXJldHVybiBwbHVnaW47CisJfQorCisJLyoqCisJICogTG9nIGFuIGVycm9yIHRvIHRoZSBJTG9nIGZvciB0aGlzIHBsdWdpbgorCSAqIAorCSAqIEBwYXJhbSBtZXNzYWdlCisJICogICAgICAgICAgICB0aGUgbG9jYWxpemVkIGVycm9yIG1lc3NhZ2UgdGV4dAorCSAqIEBwYXJhbSBleGNlcHRpb24KKwkgKiAgICAgICAgICAgIHRoZSBhc3NvY2lhdGVkIGV4Y2VwdGlvbiwgb3IgbnVsbAorCSAqLworCXB1YmxpYyBzdGF0aWMgdm9pZCBsb2dFcnJvcihTdHJpbmcgbWVzc2FnZSwgVGhyb3dhYmxlIGV4Y2VwdGlvbikgeworCQlwbHVnaW4uZ2V0TG9nKCkubG9nKAorCQkJCW5ldyBTdGF0dXMoSVN0YXR1cy5FUlJPUiwgcGx1Z2luLmdldEJ1bmRsZSgpLmdldFN5bWJvbGljTmFtZSgpLAorCQkJCQkJMCwgbWVzc2FnZSwgZXhjZXB0aW9uKSk7CisJfSAvLyBsb2dFcnJvcgorCisJLyoqCisJICogTG9nIGluZm9ybWF0aW9uIHRvIHRoZSBJTG9nIGZvciB0aGlzIHBsdWdpbgorCSAqIAorCSAqIEBwYXJhbSBtZXNzYWdlCisJICogICAgICAgICAgICB0aGUgbG9jYWxpemVkIGluZm9ybWF0aW9uIG1lc3NhZ2UgdGV4dAorCSAqIEBwYXJhbSBleGNlcHRpb24KKwkgKiAgICAgICAgICAgIHRoZSBhc3NvY2lhdGVkIGV4Y2VwdGlvbiwgb3IgbnVsbAorCSAqLworCXB1YmxpYyBzdGF0aWMgdm9pZCBsb2dJbmZvcm1hdGlvbihTdHJpbmcgbWVzc2FnZSwgVGhyb3dhYmxlIGV4Y2VwdGlvbikgeworCQlwbHVnaW4uZ2V0TG9nKCkubG9nKAorCQkJCW5ldyBTdGF0dXMoSVN0YXR1cy5JTkZPLCBwbHVnaW4uZ2V0QnVuZGxlKCkuZ2V0U3ltYm9saWNOYW1lKCksCisJCQkJCQkwLCBtZXNzYWdlLCBleGNlcHRpb24pKTsKKwl9IC8vIGxvZ0luZm9ybWF0aW9uCit9IC8vIEFjdGl2YXRvcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vbG9nZ2Vycy9Bc3luY2hyb25vdXNMb2dnZXIuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2xvZ2dlcnMvQXN5bmNocm9ub3VzTG9nZ2VyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODY1NzgzNgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2xvZ2dlcnMvQXN5bmNocm9ub3VzTG9nZ2VyLmphdmEKQEAgLTAsMCArMSwyMSBAQAorLyoqCisgKiA8Y29weXJpZ2h0PgorICogPC9jb3B5cmlnaHQ+CisgKgorICogJElkJAorICovCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0ubG9nZ2VyczsKKworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiBBIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5Bc3luY2hyb25vdXMgTG9nZ2VyPC9iPjwvZW0+Jy4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICoKKyAqCisgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy5TaW11bGF0aW9uTG9nZ2VyUGFja2FnZSNnZXRBc3luY2hyb25vdXNMb2dnZXIoKQorICogQG1vZGVsIGludGVyZmFjZT0idHJ1ZSIgYWJzdHJhY3Q9InRydWUiCisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBpbnRlcmZhY2UgQXN5bmNocm9ub3VzTG9nZ2VyIGV4dGVuZHMgU2ltdWxhdGlvbkxvZ2dlciB7Cit9IC8vIEFzeW5jaHJvbm91c0xvZ2dlcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vbG9nZ2Vycy9MT0dHRVJfRVZFTlRTLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9sb2dnZXJzL0xPR0dFUl9FVkVOVFMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMjI0MGNlCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vbG9nZ2Vycy9MT0dHRVJfRVZFTlRTLmphdmEKQEAgLTAsMCArMSw0MjAgQEAKKy8qKgorICogPGNvcHlyaWdodD4KKyAqIDwvY29weXJpZ2h0PgorICoKKyAqICRJZCQKKyAqLworcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnM7CisKK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlzOworaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uczsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5FbnVtZXJhdG9yOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiBBIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBsaXRlcmFscyBvZiB0aGUgZW51bWVyYXRpb24gJzxlbT48Yj5MT0dHRVIgRVZFTlRTPC9iPjwvZW0+JywKKyAqIGFuZCB1dGlsaXR5IG1ldGhvZHMgZm9yIHdvcmtpbmcgd2l0aCB0aGVtLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy5TaW11bGF0aW9uTG9nZ2VyUGFja2FnZSNnZXRMT0dHRVJfRVZFTlRTKCkKKyAqIEBtb2RlbAorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgZW51bSBMT0dHRVJfRVZFTlRTIGltcGxlbWVudHMgRW51bWVyYXRvciB7CisJLyoqCisJICogVGhlICc8ZW0+PGI+TE9HR0VSIE1BTkFHRVIgU1RBUlRFRDwvYj48L2VtPicgbGl0ZXJhbCBvYmplY3QuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNMT0dHRVJfTUFOQUdFUl9TVEFSVEVEX1ZBTFVFCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJTE9HR0VSX01BTkFHRVJfU1RBUlRFRCgwLCAiTE9HR0VSX01BTkFHRVJfU1RBUlRFRCIsICJMT0dHRVJfTUFOQUdFUl9TVEFSVEVEIiksCisKKwkvKioKKwkgKiBUaGUgJzxlbT48Yj5MT0dHRVIgTUFOQUdFUiBTVE9QUEVEPC9iPjwvZW0+JyBsaXRlcmFsIG9iamVjdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI0xPR0dFUl9NQU5BR0VSX1NUT1BQRURfVkFMVUUKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlMT0dHRVJfTUFOQUdFUl9TVE9QUEVEKDEsICJMT0dHRVJfTUFOQUdFUl9TVE9QUEVEIiwgIkxPR0dFUl9NQU5BR0VSX1NUT1BQRUQiKSwKKworCS8qKgorCSAqIFRoZSAnPGVtPjxiPkxPR0dFUiBTVEFSVEVEPC9iPjwvZW0+JyBsaXRlcmFsIG9iamVjdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI0xPR0dFUl9TVEFSVEVEX1ZBTFVFCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJTE9HR0VSX1NUQVJURUQoMiwgIkxPR0dFUl9TVEFSVEVEIiwgIkxPR0dFUl9TVEFSVEVEIiksCisKKwkvKioKKwkgKiBUaGUgJzxlbT48Yj5MT0dHRVIgU1RPUFBFRDwvYj48L2VtPicgbGl0ZXJhbCBvYmplY3QuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNMT0dHRVJfU1RPUFBFRF9WQUxVRQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCUxPR0dFUl9TVE9QUEVEKDMsICJMT0dHRVJfU1RPUFBFRCIsICJMT0dHRVJfU1RPUFBFRCIpLAorCisJLyoqCisJICogVGhlICc8ZW0+PGI+TE9HR0VSIEVOQUJMRUQ8L2I+PC9lbT4nIGxpdGVyYWwgb2JqZWN0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjTE9HR0VSX0VOQUJMRURfVkFMVUUKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlMT0dHRVJfRU5BQkxFRCg0LCAiTE9HR0VSX0VOQUJMRUQiLCAiTE9HR0VSX0VOQUJMRUQiKSwKKworCS8qKgorCSAqIFRoZSAnPGVtPjxiPkxPR0dFUiBESVNBQkxFRDwvYj48L2VtPicgbGl0ZXJhbCBvYmplY3QuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNMT0dHRVJfRElTQUJMRURfVkFMVUUKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlMT0dHRVJfRElTQUJMRUQoNSwgIkxPR0dFUl9ESVNBQkxFRCIsICJMT0dHRVJfRElTQUJMRUQiKSwgLyoqCisJICogVGhlICc8ZW0+PGI+U0lNVUxBVElPTlMgQURERUQ8L2I+PC9lbT4nIGxpdGVyYWwgb2JqZWN0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjU0lNVUxBVElPTlNfQURERURfVkFMVUUKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlTSU1VTEFUSU9OU19BRERFRCg2LCAiU0lNVUxBVElPTlNfQURERUQiLCAiU0lNVUxBVElPTlNfQURERUQiKSwgLyoqCisJICogVGhlICc8ZW0+PGI+U0lNVUxBVElPTlMgUkVNT1ZFRDwvYj48L2VtPicgbGl0ZXJhbCBvYmplY3QuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNTSU1VTEFUSU9OU19SRU1PVkVEX1ZBTFVFCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJU0lNVUxBVElPTlNfUkVNT1ZFRCg3LCAiU0lNVUxBVElPTlNfUkVNT1ZFRCIsICIiKSwgLyoqCisJICogVGhlICc8ZW0+PGI+TE9HR0VSUyBBRERFRDwvYj48L2VtPicgbGl0ZXJhbCBvYmplY3QuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNMT0dHRVJTX0FEREVEX1ZBTFVFCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJTE9HR0VSU19BRERFRCg4LCAiTE9HR0VSU19BRERFRCIsICJMT0dHRVJTX0FEREVEIiksIC8qKgorCSAqIFRoZSAnPGVtPjxiPkxPR0dFUlMgUkVNT1ZFRDwvYj48L2VtPicgbGl0ZXJhbCBvYmplY3QuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNMT0dHRVJTX1JFTU9WRURfVkFMVUUKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlMT0dHRVJTX1JFTU9WRUQoOSwgIkxPR0dFUlNfUkVNT1ZFRCIsICJMT0dHRVJTX1JFTU9WRUQiKTsKKworCS8qKgorCSAqIFRoZSAnPGVtPjxiPkxPR0dFUiBNQU5BR0VSIFNUQVJURUQ8L2I+PC9lbT4nIGxpdGVyYWwgdmFsdWUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8cD4KKwkgKiBJZiB0aGUgbWVhbmluZyBvZiAnPGVtPjxiPkxPR0dFUiBNQU5BR0VSIFNUQVJURUQ8L2I+PC9lbT4nIGxpdGVyYWwgb2JqZWN0IGlzbid0IGNsZWFyLAorCSAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4KKwkgKiA8L3A+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjTE9HR0VSX01BTkFHRVJfU1RBUlRFRAorCSAqIEBtb2RlbAorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IExPR0dFUl9NQU5BR0VSX1NUQVJURURfVkFMVUUgPSAwOworCisJLyoqCisJICogVGhlICc8ZW0+PGI+TE9HR0VSIE1BTkFHRVIgU1RPUFBFRDwvYj48L2VtPicgbGl0ZXJhbCB2YWx1ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDxwPgorCSAqIElmIHRoZSBtZWFuaW5nIG9mICc8ZW0+PGI+TE9HR0VSIE1BTkFHRVIgU1RPUFBFRDwvYj48L2VtPicgbGl0ZXJhbCBvYmplY3QgaXNuJ3QgY2xlYXIsCisJICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLgorCSAqIDwvcD4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNMT0dHRVJfTUFOQUdFUl9TVE9QUEVECisJICogQG1vZGVsCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgTE9HR0VSX01BTkFHRVJfU1RPUFBFRF9WQUxVRSA9IDE7CisKKwkvKioKKwkgKiBUaGUgJzxlbT48Yj5MT0dHRVIgU1RBUlRFRDwvYj48L2VtPicgbGl0ZXJhbCB2YWx1ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDxwPgorCSAqIElmIHRoZSBtZWFuaW5nIG9mICc8ZW0+PGI+TE9HR0VSIFNUQVJURUQ8L2I+PC9lbT4nIGxpdGVyYWwgb2JqZWN0IGlzbid0IGNsZWFyLAorCSAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4KKwkgKiA8L3A+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjTE9HR0VSX1NUQVJURUQKKwkgKiBAbW9kZWwKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIGludCBMT0dHRVJfU1RBUlRFRF9WQUxVRSA9IDI7CisKKwkvKioKKwkgKiBUaGUgJzxlbT48Yj5MT0dHRVIgU1RPUFBFRDwvYj48L2VtPicgbGl0ZXJhbCB2YWx1ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDxwPgorCSAqIElmIHRoZSBtZWFuaW5nIG9mICc8ZW0+PGI+TE9HR0VSIFNUT1BQRUQ8L2I+PC9lbT4nIGxpdGVyYWwgb2JqZWN0IGlzbid0IGNsZWFyLAorCSAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4KKwkgKiA8L3A+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjTE9HR0VSX1NUT1BQRUQKKwkgKiBAbW9kZWwKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIGludCBMT0dHRVJfU1RPUFBFRF9WQUxVRSA9IDM7CisKKwkvKioKKwkgKiBUaGUgJzxlbT48Yj5MT0dHRVIgRU5BQkxFRDwvYj48L2VtPicgbGl0ZXJhbCB2YWx1ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDxwPgorCSAqIElmIHRoZSBtZWFuaW5nIG9mICc8ZW0+PGI+TE9HR0VSIEVOQUJMRUQ8L2I+PC9lbT4nIGxpdGVyYWwgb2JqZWN0IGlzbid0IGNsZWFyLAorCSAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4KKwkgKiA8L3A+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjTE9HR0VSX0VOQUJMRUQKKwkgKiBAbW9kZWwKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIGludCBMT0dHRVJfRU5BQkxFRF9WQUxVRSA9IDQ7CisKKwkvKioKKwkgKiBUaGUgJzxlbT48Yj5MT0dHRVIgRElTQUJMRUQ8L2I+PC9lbT4nIGxpdGVyYWwgdmFsdWUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8cD4KKwkgKiBJZiB0aGUgbWVhbmluZyBvZiAnPGVtPjxiPkxPR0dFUiBESVNBQkxFRDwvYj48L2VtPicgbGl0ZXJhbCBvYmplY3QgaXNuJ3QgY2xlYXIsCisJICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLgorCSAqIDwvcD4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNMT0dHRVJfRElTQUJMRUQKKwkgKiBAbW9kZWwKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIGludCBMT0dHRVJfRElTQUJMRURfVkFMVUUgPSA1OworCisJLyoqCisJICogVGhlICc8ZW0+PGI+U0lNVUxBVElPTlMgQURERUQ8L2I+PC9lbT4nIGxpdGVyYWwgdmFsdWUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8cD4KKwkgKiBJZiB0aGUgbWVhbmluZyBvZiAnPGVtPjxiPlNJTVVMQVRJT05TIEFEREVEPC9iPjwvZW0+JyBsaXRlcmFsIG9iamVjdCBpc24ndCBjbGVhciwKKwkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uCisJICogPC9wPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI1NJTVVMQVRJT05TX0FEREVECisJICogQG1vZGVsCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgU0lNVUxBVElPTlNfQURERURfVkFMVUUgPSA2OworCisJLyoqCisJICogVGhlICc8ZW0+PGI+U0lNVUxBVElPTlMgUkVNT1ZFRDwvYj48L2VtPicgbGl0ZXJhbCB2YWx1ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDxwPgorCSAqIElmIHRoZSBtZWFuaW5nIG9mICc8ZW0+PGI+U0lNVUxBVElPTlMgUkVNT1ZFRDwvYj48L2VtPicgbGl0ZXJhbCBvYmplY3QgaXNuJ3QgY2xlYXIsCisJICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLgorCSAqIDwvcD4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNTSU1VTEFUSU9OU19SRU1PVkVECisJICogQG1vZGVsIGxpdGVyYWw9IiIKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIGludCBTSU1VTEFUSU9OU19SRU1PVkVEX1ZBTFVFID0gNzsKKworCS8qKgorCSAqIFRoZSAnPGVtPjxiPkxPR0dFUlMgQURERUQ8L2I+PC9lbT4nIGxpdGVyYWwgdmFsdWUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8cD4KKwkgKiBJZiB0aGUgbWVhbmluZyBvZiAnPGVtPjxiPkxPR0dFUlMgQURERUQ8L2I+PC9lbT4nIGxpdGVyYWwgb2JqZWN0IGlzbid0IGNsZWFyLAorCSAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4KKwkgKiA8L3A+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjTE9HR0VSU19BRERFRAorCSAqIEBtb2RlbAorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IExPR0dFUlNfQURERURfVkFMVUUgPSA4OworCisJLyoqCisJICogVGhlICc8ZW0+PGI+TE9HR0VSUyBSRU1PVkVEPC9iPjwvZW0+JyBsaXRlcmFsIHZhbHVlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPHA+CisJICogSWYgdGhlIG1lYW5pbmcgb2YgJzxlbT48Yj5MT0dHRVJTIFJFTU9WRUQ8L2I+PC9lbT4nIGxpdGVyYWwgb2JqZWN0IGlzbid0IGNsZWFyLAorCSAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4KKwkgKiA8L3A+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjTE9HR0VSU19SRU1PVkVECisJICogQG1vZGVsCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgTE9HR0VSU19SRU1PVkVEX1ZBTFVFID0gOTsKKworCS8qKgorCSAqIEFuIGFycmF5IG9mIGFsbCB0aGUgJzxlbT48Yj5MT0dHRVIgRVZFTlRTPC9iPjwvZW0+JyBlbnVtZXJhdG9ycy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBMT0dHRVJfRVZFTlRTW10gVkFMVUVTX0FSUkFZID0KKwkJbmV3IExPR0dFUl9FVkVOVFNbXSB7CisJCQlMT0dHRVJfTUFOQUdFUl9TVEFSVEVELAorCQkJTE9HR0VSX01BTkFHRVJfU1RPUFBFRCwKKwkJCUxPR0dFUl9TVEFSVEVELAorCQkJTE9HR0VSX1NUT1BQRUQsCisJCQlMT0dHRVJfRU5BQkxFRCwKKwkJCUxPR0dFUl9ESVNBQkxFRCwKKwkJCVNJTVVMQVRJT05TX0FEREVELAorCQkJU0lNVUxBVElPTlNfUkVNT1ZFRCwKKwkJCUxPR0dFUlNfQURERUQsCisJCQlMT0dHRVJTX1JFTU9WRUQsCisJCX07CisKKwkvKioKKwkgKiBBIHB1YmxpYyByZWFkLW9ubHkgbGlzdCBvZiBhbGwgdGhlICc8ZW0+PGI+TE9HR0VSIEVWRU5UUzwvYj48L2VtPicgZW51bWVyYXRvcnMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBMaXN0PExPR0dFUl9FVkVOVFM+IFZBTFVFUyA9IENvbGxlY3Rpb25zLnVubW9kaWZpYWJsZUxpc3QoQXJyYXlzLmFzTGlzdChWQUxVRVNfQVJSQVkpKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlICc8ZW0+PGI+TE9HR0VSIEVWRU5UUzwvYj48L2VtPicgbGl0ZXJhbCB3aXRoIHRoZSBzcGVjaWZpZWQgbGl0ZXJhbCB2YWx1ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgc3RhdGljIExPR0dFUl9FVkVOVFMgZ2V0KFN0cmluZyBsaXRlcmFsKSB7CisJCWZvciAoaW50IGkgPSAwOyBpIDwgVkFMVUVTX0FSUkFZLmxlbmd0aDsgKytpKSB7CisJCQlMT0dHRVJfRVZFTlRTIHJlc3VsdCA9IFZBTFVFU19BUlJBWVtpXTsKKwkJCWlmIChyZXN1bHQudG9TdHJpbmcoKS5lcXVhbHMobGl0ZXJhbCkpIHsKKwkJCQlyZXR1cm4gcmVzdWx0OworCQkJfQorCQl9CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlICc8ZW0+PGI+TE9HR0VSIEVWRU5UUzwvYj48L2VtPicgbGl0ZXJhbCB3aXRoIHRoZSBzcGVjaWZpZWQgbmFtZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgc3RhdGljIExPR0dFUl9FVkVOVFMgZ2V0QnlOYW1lKFN0cmluZyBuYW1lKSB7CisJCWZvciAoaW50IGkgPSAwOyBpIDwgVkFMVUVTX0FSUkFZLmxlbmd0aDsgKytpKSB7CisJCQlMT0dHRVJfRVZFTlRTIHJlc3VsdCA9IFZBTFVFU19BUlJBWVtpXTsKKwkJCWlmIChyZXN1bHQuZ2V0TmFtZSgpLmVxdWFscyhuYW1lKSkgeworCQkJCXJldHVybiByZXN1bHQ7CisJCQl9CisJCX0KKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgJzxlbT48Yj5MT0dHRVIgRVZFTlRTPC9iPjwvZW0+JyBsaXRlcmFsIHdpdGggdGhlIHNwZWNpZmllZCBpbnRlZ2VyIHZhbHVlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBzdGF0aWMgTE9HR0VSX0VWRU5UUyBnZXQoaW50IHZhbHVlKSB7CisJCXN3aXRjaCAodmFsdWUpIHsKKwkJCWNhc2UgTE9HR0VSX01BTkFHRVJfU1RBUlRFRF9WQUxVRTogcmV0dXJuIExPR0dFUl9NQU5BR0VSX1NUQVJURUQ7CisJCQljYXNlIExPR0dFUl9NQU5BR0VSX1NUT1BQRURfVkFMVUU6IHJldHVybiBMT0dHRVJfTUFOQUdFUl9TVE9QUEVEOworCQkJY2FzZSBMT0dHRVJfU1RBUlRFRF9WQUxVRTogcmV0dXJuIExPR0dFUl9TVEFSVEVEOworCQkJY2FzZSBMT0dHRVJfU1RPUFBFRF9WQUxVRTogcmV0dXJuIExPR0dFUl9TVE9QUEVEOworCQkJY2FzZSBMT0dHRVJfRU5BQkxFRF9WQUxVRTogcmV0dXJuIExPR0dFUl9FTkFCTEVEOworCQkJY2FzZSBMT0dHRVJfRElTQUJMRURfVkFMVUU6IHJldHVybiBMT0dHRVJfRElTQUJMRUQ7CisJCQljYXNlIFNJTVVMQVRJT05TX0FEREVEX1ZBTFVFOiByZXR1cm4gU0lNVUxBVElPTlNfQURERUQ7CisJCQljYXNlIFNJTVVMQVRJT05TX1JFTU9WRURfVkFMVUU6IHJldHVybiBTSU1VTEFUSU9OU19SRU1PVkVEOworCQkJY2FzZSBMT0dHRVJTX0FEREVEX1ZBTFVFOiByZXR1cm4gTE9HR0VSU19BRERFRDsKKwkJCWNhc2UgTE9HR0VSU19SRU1PVkVEX1ZBTFVFOiByZXR1cm4gTE9HR0VSU19SRU1PVkVEOworCQl9CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByaXZhdGUgZmluYWwgaW50IHZhbHVlOworCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJpdmF0ZSBmaW5hbCBTdHJpbmcgbmFtZTsKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByaXZhdGUgZmluYWwgU3RyaW5nIGxpdGVyYWw7CisKKwkvKioKKwkgKiBPbmx5IHRoaXMgY2xhc3MgY2FuIGNvbnN0cnVjdCBpbnN0YW5jZXMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJpdmF0ZSBMT0dHRVJfRVZFTlRTKGludCB2YWx1ZSwgU3RyaW5nIG5hbWUsIFN0cmluZyBsaXRlcmFsKSB7CisJCXRoaXMudmFsdWUgPSB2YWx1ZTsKKwkJdGhpcy5uYW1lID0gbmFtZTsKKwkJdGhpcy5saXRlcmFsID0gbGl0ZXJhbDsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgaW50IGdldFZhbHVlKCkgeworCSAgcmV0dXJuIHZhbHVlOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBTdHJpbmcgZ2V0TmFtZSgpIHsKKwkgIHJldHVybiBuYW1lOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBTdHJpbmcgZ2V0TGl0ZXJhbCgpIHsKKwkgIHJldHVybiBsaXRlcmFsOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIGxpdGVyYWwgdmFsdWUgb2YgdGhlIGVudW1lcmF0b3IsIHdoaWNoIGlzIGl0cyBzdHJpbmcgcmVwcmVzZW50YXRpb24uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIFN0cmluZyB0b1N0cmluZygpIHsKKwkJcmV0dXJuIGxpdGVyYWw7CisJfQorCQorfSAvL0xPR0dFUl9FVkVOVFMKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2xvZ2dlcnMvU2ltdWxhdGlvbkxvZ2dlci5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vbG9nZ2Vycy9TaW11bGF0aW9uTG9nZ2VyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGQwN2ZkNwotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2xvZ2dlcnMvU2ltdWxhdGlvbkxvZ2dlci5qYXZhCkBAIC0wLDAgKzEsNzQgQEAKKy8qKgorICogPGNvcHlyaWdodD4KKyAqIDwvY29weXJpZ2h0PgorICoKKyAqICRJZCQKKyAqLworcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnM7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubG9nZ2VyLkxvZ2dlcjsKKworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uam9icy5zaW11bGF0aW9uLklTaW11bGF0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uam9icy5zaW11bGF0aW9uLlNpbXVsYXRpb25FdmVudDsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogQSByZXByZXNlbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+U2ltdWxhdGlvbiBMb2dnZXI8L2I+PC9lbT4nLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKgorICogPHA+CisgKiBUaGUgZm9sbG93aW5nIGZlYXR1cmVzIGFyZSBzdXBwb3J0ZWQ6CisgKiA8dWw+CisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzLlNpbXVsYXRpb25Mb2dnZXIjaXNFbmFibGVkIDxlbT5FbmFibGVkPC9lbT59PC9saT4KKyAqIDwvdWw+CisgKiA8L3A+CisgKgorICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMuU2ltdWxhdGlvbkxvZ2dlclBhY2thZ2UjZ2V0U2ltdWxhdGlvbkxvZ2dlcigpCisgKiBAbW9kZWwgYWJzdHJhY3Q9InRydWUiCisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBpbnRlcmZhY2UgU2ltdWxhdGlvbkxvZ2dlciBleHRlbmRzIExvZ2dlciB7CisJLyoqCisJICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+RW5hYmxlZDwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIGlzIDxjb2RlPiJ0cnVlIjwvY29kZT4uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8cD4KKwkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5FbmFibGVkPC9lbT4nIGF0dHJpYnV0ZSBpc24ndCBjbGVhciwKKwkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uCisJICogPC9wPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPkVuYWJsZWQ8L2VtPicgYXR0cmlidXRlLgorCSAqIEBzZWUgI3NldEVuYWJsZWQoYm9vbGVhbikKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy5TaW11bGF0aW9uTG9nZ2VyUGFja2FnZSNnZXRTaW11bGF0aW9uTG9nZ2VyX0VuYWJsZWQoKQorCSAqIEBtb2RlbCBkZWZhdWx0PSJ0cnVlIgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlib29sZWFuIGlzRW5hYmxlZCgpOworCisJLyoqCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzLlNpbXVsYXRpb25Mb2dnZXIjaXNFbmFibGVkIDxlbT5FbmFibGVkPC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5FbmFibGVkPC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiBAc2VlICNpc0VuYWJsZWQoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwl2b2lkIHNldEVuYWJsZWQoYm9vbGVhbiB2YWx1ZSk7CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBtb2RlbCBldmVudERhdGFUeXBlPSJvcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMuU2ltdWxhdGlvbkV2ZW50IgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwl2b2lkIHNpbXVsYXRpb25FdmVudChTaW11bGF0aW9uRXZlbnQgZXZlbnQpOworCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAbW9kZWwgc2ltdWxhdGlvbkRhdGFUeXBlPSJvcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMuU2ltdWxhdGlvbiIKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJdm9pZCBsb2dnZXJFdmVudChJU2ltdWxhdGlvbiBzaW11bGF0aW9uLCBMT0dHRVJfRVZFTlRTIGV2ZW50KTsKKworfSAvLyBTaW11bGF0aW9uTG9nZ2VyCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9sb2dnZXJzL1NpbXVsYXRpb25Mb2dnZXJFdmVudC5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vbG9nZ2Vycy9TaW11bGF0aW9uTG9nZ2VyRXZlbnQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNjBmODlhCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vbG9nZ2Vycy9TaW11bGF0aW9uTG9nZ2VyRXZlbnQuamF2YQpAQCAtMCwwICsxLDIyIEBACisvKioKKyAqIDxjb3B5cmlnaHQ+CisgKiA8L2NvcHlyaWdodD4KKyAqCisgKiAkSWQkCisgKi8KK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzOworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3Q7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIEEgcmVwcmVzZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPkV2ZW50PC9iPjwvZW0+Jy4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICoKKyAqCisgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy5TaW11bGF0aW9uTG9nZ2VyUGFja2FnZSNnZXRTaW11bGF0aW9uTG9nZ2VyRXZlbnQoKQorICogQG1vZGVsCisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBpbnRlcmZhY2UgU2ltdWxhdGlvbkxvZ2dlckV2ZW50IGV4dGVuZHMgRU9iamVjdCB7Cit9IC8vIFNpbXVsYXRpb25Mb2dnZXJFdmVudApkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vbG9nZ2Vycy9TaW11bGF0aW9uTG9nZ2VyRmFjdG9yeS5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vbG9nZ2Vycy9TaW11bGF0aW9uTG9nZ2VyRmFjdG9yeS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE2MGMwMDcKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9sb2dnZXJzL1NpbXVsYXRpb25Mb2dnZXJGYWN0b3J5LmphdmEKQEAgLTAsMCArMSw0NiBAQAorLyoqCisgKiA8Y29weXJpZ2h0PgorICogPC9jb3B5cmlnaHQ+CisgKgorICogJElkJAorICovCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0ubG9nZ2VyczsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FRmFjdG9yeTsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogVGhlIDxiPkZhY3Rvcnk8L2I+IGZvciB0aGUgbW9kZWwuCisgKiBJdCBwcm92aWRlcyBhIGNyZWF0ZSBtZXRob2QgZm9yIGVhY2ggbm9uLWFic3RyYWN0IGNsYXNzIG9mIHRoZSBtb2RlbC4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMuU2ltdWxhdGlvbkxvZ2dlclBhY2thZ2UKKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGludGVyZmFjZSBTaW11bGF0aW9uTG9nZ2VyRmFjdG9yeSBleHRlbmRzIEVGYWN0b3J5IHsKKwkvKioKKwkgKiBUaGUgc2luZ2xldG9uIGluc3RhbmNlIG9mIHRoZSBmYWN0b3J5LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCVNpbXVsYXRpb25Mb2dnZXJGYWN0b3J5IGVJTlNUQU5DRSA9IG9yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy5pbXBsLlNpbXVsYXRpb25Mb2dnZXJGYWN0b3J5SW1wbC5pbml0KCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPkV2ZW50PC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiBhIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5FdmVudDwvZW0+Jy4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJU2ltdWxhdGlvbkxvZ2dlckV2ZW50IGNyZWF0ZVNpbXVsYXRpb25Mb2dnZXJFdmVudCgpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgcGFja2FnZSBzdXBwb3J0ZWQgYnkgdGhpcyBmYWN0b3J5LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgcGFja2FnZSBzdXBwb3J0ZWQgYnkgdGhpcyBmYWN0b3J5LgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlTaW11bGF0aW9uTG9nZ2VyUGFja2FnZSBnZXRTaW11bGF0aW9uTG9nZ2VyUGFja2FnZSgpOworCit9IC8vU2ltdWxhdGlvbkxvZ2dlckZhY3RvcnkKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2xvZ2dlcnMvU2ltdWxhdGlvbkxvZ2dlclBhY2thZ2UuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2xvZ2dlcnMvU2ltdWxhdGlvbkxvZ2dlclBhY2thZ2UuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZTQ1YTZhCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vbG9nZ2Vycy9TaW11bGF0aW9uTG9nZ2VyUGFja2FnZS5qYXZhCkBAIC0wLDAgKzEsNTA2IEBACisvKioKKyAqIDxjb3B5cmlnaHQ+CisgKiA8L2NvcHlyaWdodD4KKyAqCisgKiAkSWQkCisgKi8KK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzOworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVBdHRyaWJ1dGU7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzczsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRURhdGFUeXBlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FRW51bTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRVBhY2thZ2U7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubG9nZ2VyLkxvZ2dlclBhY2thZ2U7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIFRoZSA8Yj5QYWNrYWdlPC9iPiBmb3IgdGhlIG1vZGVsLgorICogSXQgY29udGFpbnMgYWNjZXNzb3JzIGZvciB0aGUgbWV0YSBvYmplY3RzIHRvIHJlcHJlc2VudAorICogPHVsPgorICogICA8bGk+ZWFjaCBjbGFzcyw8L2xpPgorICogICA8bGk+ZWFjaCBmZWF0dXJlIG9mIGVhY2ggY2xhc3MsPC9saT4KKyAqICAgPGxpPmVhY2ggZW51bSw8L2xpPgorICogICA8bGk+YW5kIGVhY2ggZGF0YSB0eXBlPC9saT4KKyAqIDwvdWw+CisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzLlNpbXVsYXRpb25Mb2dnZXJGYWN0b3J5CisgKiBAbW9kZWwga2luZD0icGFja2FnZSIKKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGludGVyZmFjZSBTaW11bGF0aW9uTG9nZ2VyUGFja2FnZSBleHRlbmRzIEVQYWNrYWdlIHsKKwkvKioKKwkgKiBUaGUgcGFja2FnZSBuYW1lLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCVN0cmluZyBlTkFNRSA9ICJsb2dnZXJzIjsKKworCS8qKgorCSAqIFRoZSBwYWNrYWdlIG5hbWVzcGFjZSBVUkkuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJU3RyaW5nIGVOU19VUkkgPSAiaHR0cDovL29yZy9lY2xpcHNlL3N0ZW0vbG9nZ2Vycy8iOworCisJLyoqCisJICogVGhlIHBhY2thZ2UgbmFtZXNwYWNlIG5hbWUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJU3RyaW5nIGVOU19QUkVGSVggPSAib3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzIjsKKworCS8qKgorCSAqIFRoZSBzaW5nbGV0b24gaW5zdGFuY2Ugb2YgdGhlIHBhY2thZ2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJU2ltdWxhdGlvbkxvZ2dlclBhY2thZ2UgZUlOU1RBTkNFID0gb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzLmltcGwuU2ltdWxhdGlvbkxvZ2dlclBhY2thZ2VJbXBsLmluaXQoKTsKKworCS8qKgorCSAqIFRoZSBtZXRhIG9iamVjdCBpZCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzLmltcGwuU2ltdWxhdGlvbkxvZ2dlckltcGwgPGVtPlNpbXVsYXRpb24gTG9nZ2VyPC9lbT59JyBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzLmltcGwuU2ltdWxhdGlvbkxvZ2dlckltcGwKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy5pbXBsLlNpbXVsYXRpb25Mb2dnZXJQYWNrYWdlSW1wbCNnZXRTaW11bGF0aW9uTG9nZ2VyKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJaW50IFNJTVVMQVRJT05fTE9HR0VSID0gMDsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5VUkk8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTSU1VTEFUSU9OX0xPR0dFUl9fVVJJID0gTG9nZ2VyUGFja2FnZS5MT0dHRVJfX1VSSTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5UeXBlIFVSSTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNJTVVMQVRJT05fTE9HR0VSX19UWVBFX1VSSSA9IExvZ2dlclBhY2thZ2UuTE9HR0VSX19UWVBFX1VSSTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5EdWJsaW4gQ29yZTwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNJTVVMQVRJT05fTE9HR0VSX19EVUJMSU5fQ09SRSA9IExvZ2dlclBhY2thZ2UuTE9HR0VSX19EVUJMSU5fQ09SRTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5FbmFibGVkPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU0lNVUxBVElPTl9MT0dHRVJfX0VOQUJMRUQgPSBMb2dnZXJQYWNrYWdlLkxPR0dFUl9GRUFUVVJFX0NPVU5UICsgMDsKKworCS8qKgorCSAqIFRoZSBudW1iZXIgb2Ygc3RydWN0dXJhbCBmZWF0dXJlcyBvZiB0aGUgJzxlbT5TaW11bGF0aW9uIExvZ2dlcjwvZW0+JyBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTSU1VTEFUSU9OX0xPR0dFUl9GRUFUVVJFX0NPVU5UID0gTG9nZ2VyUGFja2FnZS5MT0dHRVJfRkVBVFVSRV9DT1VOVCArIDE7CisKKwkvKioKKwkgKiBUaGUgbWV0YSBvYmplY3QgaWQgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy5TeW5jaHJvbm91c0xvZ2dlciA8ZW0+U3luY2hyb25vdXMgTG9nZ2VyPC9lbT59JyBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzLlN5bmNocm9ub3VzTG9nZ2VyCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMuaW1wbC5TaW11bGF0aW9uTG9nZ2VyUGFja2FnZUltcGwjZ2V0U3luY2hyb25vdXNMb2dnZXIoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlpbnQgU1lOQ0hST05PVVNfTE9HR0VSID0gMTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5VUkk8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTWU5DSFJPTk9VU19MT0dHRVJfX1VSSSA9IFNJTVVMQVRJT05fTE9HR0VSX19VUkk7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VHlwZSBVUkk8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTWU5DSFJPTk9VU19MT0dHRVJfX1RZUEVfVVJJID0gU0lNVUxBVElPTl9MT0dHRVJfX1RZUEVfVVJJOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkR1YmxpbiBDb3JlPC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU1lOQ0hST05PVVNfTE9HR0VSX19EVUJMSU5fQ09SRSA9IFNJTVVMQVRJT05fTE9HR0VSX19EVUJMSU5fQ09SRTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5FbmFibGVkPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU1lOQ0hST05PVVNfTE9HR0VSX19FTkFCTEVEID0gU0lNVUxBVElPTl9MT0dHRVJfX0VOQUJMRUQ7CisKKwkvKioKKwkgKiBUaGUgbnVtYmVyIG9mIHN0cnVjdHVyYWwgZmVhdHVyZXMgb2YgdGhlICc8ZW0+U3luY2hyb25vdXMgTG9nZ2VyPC9lbT4nIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNZTkNIUk9OT1VTX0xPR0dFUl9GRUFUVVJFX0NPVU5UID0gU0lNVUxBVElPTl9MT0dHRVJfRkVBVFVSRV9DT1VOVCArIDA7CisKKwkvKioKKwkgKiBUaGUgbWV0YSBvYmplY3QgaWQgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uam9icy5zaW11bGF0aW9uLklTaW11bGF0aW9uTGlzdGVuZXIgPGVtPklTaW11bGF0aW9uIExpc3RlbmVyPC9lbT59JyBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5qb2JzLnNpbXVsYXRpb24uSVNpbXVsYXRpb25MaXN0ZW5lcgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzLmltcGwuU2ltdWxhdGlvbkxvZ2dlclBhY2thZ2VJbXBsI2dldElTaW11bGF0aW9uTGlzdGVuZXIoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlpbnQgSVNJTVVMQVRJT05fTElTVEVORVIgPSAyOworCisJLyoqCisJICogVGhlIG51bWJlciBvZiBzdHJ1Y3R1cmFsIGZlYXR1cmVzIG9mIHRoZSAnPGVtPklTaW11bGF0aW9uIExpc3RlbmVyPC9lbT4nIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IElTSU1VTEFUSU9OX0xJU1RFTkVSX0ZFQVRVUkVfQ09VTlQgPSAwOworCisJLyoqCisJICogVGhlIG1ldGEgb2JqZWN0IGlkIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMuQXN5bmNocm9ub3VzTG9nZ2VyIDxlbT5Bc3luY2hyb25vdXMgTG9nZ2VyPC9lbT59JyBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzLkFzeW5jaHJvbm91c0xvZ2dlcgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzLmltcGwuU2ltdWxhdGlvbkxvZ2dlclBhY2thZ2VJbXBsI2dldEFzeW5jaHJvbm91c0xvZ2dlcigpCisJICogQGdlbmVyYXRlZAorCSAqLworCWludCBBU1lOQ0hST05PVVNfTE9HR0VSID0gMzsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5VUkk8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBBU1lOQ0hST05PVVNfTE9HR0VSX19VUkkgPSBTSU1VTEFUSU9OX0xPR0dFUl9fVVJJOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlR5cGUgVVJJPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgQVNZTkNIUk9OT1VTX0xPR0dFUl9fVFlQRV9VUkkgPSBTSU1VTEFUSU9OX0xPR0dFUl9fVFlQRV9VUkk7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RHVibGluIENvcmU8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBBU1lOQ0hST05PVVNfTE9HR0VSX19EVUJMSU5fQ09SRSA9IFNJTVVMQVRJT05fTE9HR0VSX19EVUJMSU5fQ09SRTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5FbmFibGVkPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgQVNZTkNIUk9OT1VTX0xPR0dFUl9fRU5BQkxFRCA9IFNJTVVMQVRJT05fTE9HR0VSX19FTkFCTEVEOworCisJLyoqCisJICogVGhlIG51bWJlciBvZiBzdHJ1Y3R1cmFsIGZlYXR1cmVzIG9mIHRoZSAnPGVtPkFzeW5jaHJvbm91cyBMb2dnZXI8L2VtPicgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgQVNZTkNIUk9OT1VTX0xPR0dFUl9GRUFUVVJFX0NPVU5UID0gU0lNVUxBVElPTl9MT0dHRVJfRkVBVFVSRV9DT1VOVCArIDA7CisKKwkvKioKKwkgKiBUaGUgbWV0YSBvYmplY3QgaWQgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy5pbXBsLlNpbXVsYXRpb25Mb2dnZXJFdmVudEltcGwgPGVtPkV2ZW50PC9lbT59JyBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzLmltcGwuU2ltdWxhdGlvbkxvZ2dlckV2ZW50SW1wbAorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzLmltcGwuU2ltdWxhdGlvbkxvZ2dlclBhY2thZ2VJbXBsI2dldFNpbXVsYXRpb25Mb2dnZXJFdmVudCgpCisJICogQGdlbmVyYXRlZAorCSAqLworCWludCBTSU1VTEFUSU9OX0xPR0dFUl9FVkVOVCA9IDQ7CisKKwkvKioKKwkgKiBUaGUgbnVtYmVyIG9mIHN0cnVjdHVyYWwgZmVhdHVyZXMgb2YgdGhlICc8ZW0+RXZlbnQ8L2VtPicgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU0lNVUxBVElPTl9MT0dHRVJfRVZFTlRfRkVBVFVSRV9DT1VOVCA9IDA7CisKKwkvKioKKwkgKiBUaGUgbWV0YSBvYmplY3QgaWQgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy5MT0dHRVJfRVZFTlRTIDxlbT5MT0dHRVIgRVZFTlRTPC9lbT59JyBlbnVtLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMuTE9HR0VSX0VWRU5UUworCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzLmltcGwuU2ltdWxhdGlvbkxvZ2dlclBhY2thZ2VJbXBsI2dldExPR0dFUl9FVkVOVFMoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlpbnQgTE9HR0VSX0VWRU5UUyA9IDU7CisKKwkvKioKKwkgKiBUaGUgbWV0YSBvYmplY3QgaWQgZm9yIHRoZSAnPGVtPlNpbXVsYXRpb248L2VtPicgZGF0YSB0eXBlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmpvYnMuc2ltdWxhdGlvbi5JU2ltdWxhdGlvbgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzLmltcGwuU2ltdWxhdGlvbkxvZ2dlclBhY2thZ2VJbXBsI2dldFNpbXVsYXRpb24oKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlpbnQgU0lNVUxBVElPTiA9IDY7CisKKworCS8qKgorCSAqIFRoZSBtZXRhIG9iamVjdCBpZCBmb3IgdGhlICc8ZW0+U2ltdWxhdGlvbiBFdmVudDwvZW0+JyBkYXRhIHR5cGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uam9icy5zaW11bGF0aW9uLlNpbXVsYXRpb25FdmVudAorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzLmltcGwuU2ltdWxhdGlvbkxvZ2dlclBhY2thZ2VJbXBsI2dldFNpbXVsYXRpb25FdmVudCgpCisJICogQGdlbmVyYXRlZAorCSAqLworCWludCBTSU1VTEFUSU9OX0VWRU5UID0gNzsKKworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzLlNpbXVsYXRpb25Mb2dnZXIgPGVtPlNpbXVsYXRpb24gTG9nZ2VyPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAnPGVtPlNpbXVsYXRpb24gTG9nZ2VyPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzLlNpbXVsYXRpb25Mb2dnZXIKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUNsYXNzIGdldFNpbXVsYXRpb25Mb2dnZXIoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzLlNpbXVsYXRpb25Mb2dnZXIjaXNFbmFibGVkIDxlbT5FbmFibGVkPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+RW5hYmxlZDwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy5TaW11bGF0aW9uTG9nZ2VyI2lzRW5hYmxlZCgpCisJICogQHNlZSAjZ2V0U2ltdWxhdGlvbkxvZ2dlcigpCisJICogQGdlbmVyYXRlZAorCSAqLworCUVBdHRyaWJ1dGUgZ2V0U2ltdWxhdGlvbkxvZ2dlcl9FbmFibGVkKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMuU3luY2hyb25vdXNMb2dnZXIgPGVtPlN5bmNocm9ub3VzIExvZ2dlcjwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJzxlbT5TeW5jaHJvbm91cyBMb2dnZXI8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMuU3luY2hyb25vdXNMb2dnZXIKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUNsYXNzIGdldFN5bmNocm9ub3VzTG9nZ2VyKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmpvYnMuc2ltdWxhdGlvbi5JU2ltdWxhdGlvbkxpc3RlbmVyIDxlbT5JU2ltdWxhdGlvbiBMaXN0ZW5lcjwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJzxlbT5JU2ltdWxhdGlvbiBMaXN0ZW5lcjwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uam9icy5zaW11bGF0aW9uLklTaW11bGF0aW9uTGlzdGVuZXIKKwkgKiBAbW9kZWwgaW5zdGFuY2VDbGFzcz0ib3JnLmVjbGlwc2Uuc3RlbS5qb2JzLnNpbXVsYXRpb24uSVNpbXVsYXRpb25MaXN0ZW5lciIKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUNsYXNzIGdldElTaW11bGF0aW9uTGlzdGVuZXIoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy5Bc3luY2hyb25vdXNMb2dnZXIgPGVtPkFzeW5jaHJvbm91cyBMb2dnZXI8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICc8ZW0+QXN5bmNocm9ub3VzIExvZ2dlcjwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy5Bc3luY2hyb25vdXNMb2dnZXIKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUNsYXNzIGdldEFzeW5jaHJvbm91c0xvZ2dlcigpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzLlNpbXVsYXRpb25Mb2dnZXJFdmVudCA8ZW0+RXZlbnQ8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICc8ZW0+RXZlbnQ8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMuU2ltdWxhdGlvbkxvZ2dlckV2ZW50CisJICogQGdlbmVyYXRlZAorCSAqLworCUVDbGFzcyBnZXRTaW11bGF0aW9uTG9nZ2VyRXZlbnQoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciBlbnVtICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzLkxPR0dFUl9FVkVOVFMgPGVtPkxPR0dFUiBFVkVOVFM8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIGVudW0gJzxlbT5MT0dHRVIgRVZFTlRTPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzLkxPR0dFUl9FVkVOVFMKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUVudW0gZ2V0TE9HR0VSX0VWRU5UUygpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIGRhdGEgdHlwZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uam9icy5zaW11bGF0aW9uLklTaW11bGF0aW9uIDxlbT5TaW11bGF0aW9uPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciBkYXRhIHR5cGUgJzxlbT5TaW11bGF0aW9uPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5qb2JzLnNpbXVsYXRpb24uSVNpbXVsYXRpb24KKwkgKiBAbW9kZWwgaW5zdGFuY2VDbGFzcz0ib3JnLmVjbGlwc2Uuc3RlbS5qb2JzLnNpbXVsYXRpb24uSVNpbXVsYXRpb24iIHNlcmlhbGl6ZWFibGU9ImZhbHNlIgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFRGF0YVR5cGUgZ2V0U2ltdWxhdGlvbigpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIGRhdGEgdHlwZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uam9icy5zaW11bGF0aW9uLlNpbXVsYXRpb25FdmVudCA8ZW0+U2ltdWxhdGlvbiBFdmVudDwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgZGF0YSB0eXBlICc8ZW0+U2ltdWxhdGlvbiBFdmVudDwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uam9icy5zaW11bGF0aW9uLlNpbXVsYXRpb25FdmVudAorCSAqIEBtb2RlbCBpbnN0YW5jZUNsYXNzPSJvcmcuZWNsaXBzZS5zdGVtLmpvYnMuc2ltdWxhdGlvbi5TaW11bGF0aW9uRXZlbnQiCisJICogQGdlbmVyYXRlZAorCSAqLworCUVEYXRhVHlwZSBnZXRTaW11bGF0aW9uRXZlbnQoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIGZhY3RvcnkgdGhhdCBjcmVhdGVzIHRoZSBpbnN0YW5jZXMgb2YgdGhlIG1vZGVsLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgZmFjdG9yeSB0aGF0IGNyZWF0ZXMgdGhlIGluc3RhbmNlcyBvZiB0aGUgbW9kZWwuCisJICogQGdlbmVyYXRlZAorCSAqLworCVNpbXVsYXRpb25Mb2dnZXJGYWN0b3J5IGdldFNpbXVsYXRpb25Mb2dnZXJGYWN0b3J5KCk7CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIERlZmluZXMgbGl0ZXJhbHMgZm9yIHRoZSBtZXRhIG9iamVjdHMgdGhhdCByZXByZXNlbnQKKwkgKiA8dWw+CisJICogICA8bGk+ZWFjaCBjbGFzcyw8L2xpPgorCSAqICAgPGxpPmVhY2ggZmVhdHVyZSBvZiBlYWNoIGNsYXNzLDwvbGk+CisJICogICA8bGk+ZWFjaCBlbnVtLDwvbGk+CisJICogICA8bGk+YW5kIGVhY2ggZGF0YSB0eXBlPC9saT4KKwkgKiA8L3VsPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlpbnRlcmZhY2UgTGl0ZXJhbHMgeworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy5pbXBsLlNpbXVsYXRpb25Mb2dnZXJJbXBsIDxlbT5TaW11bGF0aW9uIExvZ2dlcjwvZW0+fScgY2xhc3MuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy5pbXBsLlNpbXVsYXRpb25Mb2dnZXJJbXBsCisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzLmltcGwuU2ltdWxhdGlvbkxvZ2dlclBhY2thZ2VJbXBsI2dldFNpbXVsYXRpb25Mb2dnZXIoKQorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQ2xhc3MgU0lNVUxBVElPTl9MT0dHRVIgPSBlSU5TVEFOQ0UuZ2V0U2ltdWxhdGlvbkxvZ2dlcigpOworCisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+RW5hYmxlZDwvYj48L2VtPicgYXR0cmlidXRlIGZlYXR1cmUuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQXR0cmlidXRlIFNJTVVMQVRJT05fTE9HR0VSX19FTkFCTEVEID0gZUlOU1RBTkNFLmdldFNpbXVsYXRpb25Mb2dnZXJfRW5hYmxlZCgpOworCisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzLlN5bmNocm9ub3VzTG9nZ2VyIDxlbT5TeW5jaHJvbm91cyBMb2dnZXI8L2VtPn0nIGNsYXNzLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMuU3luY2hyb25vdXNMb2dnZXIKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMuaW1wbC5TaW11bGF0aW9uTG9nZ2VyUGFja2FnZUltcGwjZ2V0U3luY2hyb25vdXNMb2dnZXIoKQorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQ2xhc3MgU1lOQ0hST05PVVNfTE9HR0VSID0gZUlOU1RBTkNFLmdldFN5bmNocm9ub3VzTG9nZ2VyKCk7CisKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmpvYnMuc2ltdWxhdGlvbi5JU2ltdWxhdGlvbkxpc3RlbmVyIDxlbT5JU2ltdWxhdGlvbiBMaXN0ZW5lcjwvZW0+fScgY2xhc3MuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uam9icy5zaW11bGF0aW9uLklTaW11bGF0aW9uTGlzdGVuZXIKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMuaW1wbC5TaW11bGF0aW9uTG9nZ2VyUGFja2FnZUltcGwjZ2V0SVNpbXVsYXRpb25MaXN0ZW5lcigpCisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVDbGFzcyBJU0lNVUxBVElPTl9MSVNURU5FUiA9IGVJTlNUQU5DRS5nZXRJU2ltdWxhdGlvbkxpc3RlbmVyKCk7CisKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMuQXN5bmNocm9ub3VzTG9nZ2VyIDxlbT5Bc3luY2hyb25vdXMgTG9nZ2VyPC9lbT59JyBjbGFzcy4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzLkFzeW5jaHJvbm91c0xvZ2dlcgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy5pbXBsLlNpbXVsYXRpb25Mb2dnZXJQYWNrYWdlSW1wbCNnZXRBc3luY2hyb25vdXNMb2dnZXIoKQorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQ2xhc3MgQVNZTkNIUk9OT1VTX0xPR0dFUiA9IGVJTlNUQU5DRS5nZXRBc3luY2hyb25vdXNMb2dnZXIoKTsKKworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy5pbXBsLlNpbXVsYXRpb25Mb2dnZXJFdmVudEltcGwgPGVtPkV2ZW50PC9lbT59JyBjbGFzcy4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzLmltcGwuU2ltdWxhdGlvbkxvZ2dlckV2ZW50SW1wbAorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy5pbXBsLlNpbXVsYXRpb25Mb2dnZXJQYWNrYWdlSW1wbCNnZXRTaW11bGF0aW9uTG9nZ2VyRXZlbnQoKQorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQ2xhc3MgU0lNVUxBVElPTl9MT0dHRVJfRVZFTlQgPSBlSU5TVEFOQ0UuZ2V0U2ltdWxhdGlvbkxvZ2dlckV2ZW50KCk7CisKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMuTE9HR0VSX0VWRU5UUyA8ZW0+TE9HR0VSIEVWRU5UUzwvZW0+fScgZW51bS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzLkxPR0dFUl9FVkVOVFMKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMuaW1wbC5TaW11bGF0aW9uTG9nZ2VyUGFja2FnZUltcGwjZ2V0TE9HR0VSX0VWRU5UUygpCisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVFbnVtIExPR0dFUl9FVkVOVFMgPSBlSU5TVEFOQ0UuZ2V0TE9HR0VSX0VWRU5UUygpOworCisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+U2ltdWxhdGlvbjwvZW0+JyBkYXRhIHR5cGUuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uam9icy5zaW11bGF0aW9uLklTaW11bGF0aW9uCisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzLmltcGwuU2ltdWxhdGlvbkxvZ2dlclBhY2thZ2VJbXBsI2dldFNpbXVsYXRpb24oKQorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFRGF0YVR5cGUgU0lNVUxBVElPTiA9IGVJTlNUQU5DRS5nZXRTaW11bGF0aW9uKCk7CisKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT5TaW11bGF0aW9uIEV2ZW50PC9lbT4nIGRhdGEgdHlwZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5qb2JzLnNpbXVsYXRpb24uU2ltdWxhdGlvbkV2ZW50CisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzLmltcGwuU2ltdWxhdGlvbkxvZ2dlclBhY2thZ2VJbXBsI2dldFNpbXVsYXRpb25FdmVudCgpCisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVEYXRhVHlwZSBTSU1VTEFUSU9OX0VWRU5UID0gZUlOU1RBTkNFLmdldFNpbXVsYXRpb25FdmVudCgpOworCisJfQorCit9IC8vU2ltdWxhdGlvbkxvZ2dlclBhY2thZ2UKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2xvZ2dlcnMvU3luY2hyb25vdXNMb2dnZXIuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2xvZ2dlcnMvU3luY2hyb25vdXNMb2dnZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NDFlMDZiCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vbG9nZ2Vycy9TeW5jaHJvbm91c0xvZ2dlci5qYXZhCkBAIC0wLDAgKzEsMjEgQEAKKy8qKgorICogPGNvcHlyaWdodD4KKyAqIDwvY29weXJpZ2h0PgorICoKKyAqICRJZCQKKyAqLworcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnM7CisKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogQSByZXByZXNlbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+U3luY2hyb25vdXMgTG9nZ2VyPC9iPjwvZW0+Jy4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICoKKyAqCisgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy5TaW11bGF0aW9uTG9nZ2VyUGFja2FnZSNnZXRTeW5jaHJvbm91c0xvZ2dlcigpCisgKiBAbW9kZWwgaW50ZXJmYWNlPSJ0cnVlIiBhYnN0cmFjdD0idHJ1ZSIKKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGludGVyZmFjZSBTeW5jaHJvbm91c0xvZ2dlciBleHRlbmRzIFNpbXVsYXRpb25Mb2dnZXIgeworfSAvLyBTeW5jaHJvbm91c0xvZ2dlcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vbG9nZ2Vycy9jb21tb24vQ29uc3RhbnRzLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9sb2dnZXJzL2NvbW1vbi9Db25zdGFudHMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYzM0YmIwCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vbG9nZ2Vycy9jb21tb24vQ29uc3RhbnRzLmphdmEKQEAgLTAsMCArMSw1NCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAxMSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy5jb21tb247CisKK2ltcG9ydCBqYXZhLmlvLkZpbGU7CitpbXBvcnQgamF2YS50ZXh0LlNpbXBsZURhdGVGb3JtYXQ7CitpbXBvcnQgamF2YS51dGlsLkxvY2FsZTsKKworLyoqCisgKiBGaXhlZCB2YWx1ZXMgZm9yIHVzZSBpbiB0aGUgQ1NWIExvZ2dlciBwcm9qZWN0CisgKgorICovCitwdWJsaWMgaW50ZXJmYWNlIENvbnN0YW50cyAKK3sKKwlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBTWVNURU1fUEFUSF9TRVBBUkFUT1IgPSBGaWxlLnNlcGFyYXRvcjsKKwlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBTQ0VOQVJJT1NfVVJMX1BSRUZJWCA9ICJwbGF0Zm9ybTovcmVzb3VyY2UvIjsKKwlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBCVUlMRF9JTl9TQ0VOQVJJT1NfUFJPSkVDVF9GT0xERVIgPSAiQnVpbHRJblNjZW5hcmlvcyI7CisJcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUkVDT1JERURfU0lNVUxBVElPTlNfRk9MREVSID0gIlJlY29yZGVkU2ltdWxhdGlvbnMiOworCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEVNUFRZX1NUUklORyA9ICIiOworCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nW10gRVhDTFVERURfREVDT1JBVE9SX0RFRkFVTFRTID0gbmV3IFN0cmluZ1tdIHsKKwkib3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLkFnZ3JlZ2F0aW5nU0lEaXNlYXNlTW9kZWwifTsKKworCXB1YmxpYyBzdGF0aWMgZmluYWwgU2ltcGxlRGF0ZUZvcm1hdCBMT0dfREFURV9GT1JNQVRURVIgCisJPSBuZXcgU2ltcGxlRGF0ZUZvcm1hdCgiRUVFIGQgTU1NIHl5eXkiLCBMb2NhbGUuZ2V0RGVmYXVsdCgpKTsKKwkKKwkvKioKKwkgKiBDU1YgSGVhZGVyIExhYmVsIGZvciB0aW1lIGNvbHVtbgorCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFRJTUVfTEFCRUwgPSAidGltZSI7CisKKwkvKioKKwkgKiBDU1YgSGVhZGVyIExhYmVsIGZvciBpdGVyYXRpb24gY29sdW1uCisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgSVRFUkFUSU9OX0xBQkVMID0gIml0ZXJhdGlvbiI7CisJCisJcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUlVOX1BBUkFNRVRFUl9GSUxFX05BTUUgPSAicnVucGFyYW1ldGVycy5jc3YiOworCQorCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIExPR19GSUxFX1NVRkZJWCA9ICJjc3YiOworCisJcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmdbXSBFWENMVURFRF9OT0RFX0RFRkFVTFRTID0gbmV3IFN0cmluZ1tdIHsibm9kZS90cmFuc3BvcnQvcGlwZSJ9OworCisKKwlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBMT0NBVElPTl9JRF9QUkVGSVggPSAiL25vZGUvZ2VvL3JlZ2lvbi8iOworCQorCQorfQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vbG9nZ2Vycy9jb21tb24vRmlsZVV0aWxzLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9sb2dnZXJzL2NvbW1vbi9GaWxlVXRpbHMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMTIyOTZhCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vbG9nZ2Vycy9jb21tb24vRmlsZVV0aWxzLmphdmEKQEAgLTAsMCArMSw4OSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNiwgMjAwNywgMjAwOCwgMjAxMSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy5jb21tb247CisKK2ltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtOworaW1wb3J0IGphdmEuaW8uT3V0cHV0U3RyZWFtOworaW1wb3J0IGphdmEuaW8uV3JpdGVyOworCitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuUmVzb3VyY2VzUGx1Z2luOworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUGF0aDsKKworCisvKioKKyAqIFV0aWxpdGllIG1ldGhvZHMgZm9yIGhhbmRsaW5nIHBhdGhzIGFuZCBzdHJlYW1zIGluIHRoZSBsb2dnZXIKKyAqCisgKi8KK3B1YmxpYyBjbGFzcyBGaWxlVXRpbHMKK3sKKwkvKioKKwkgKiBHaXZlbiBhIHNjZW5hcmlvLCByZXR1cm4gdGhlIGZvbGRlciB3aGVyZSByZWNvcmRlZCBzaW11bGF0aW9ucyBhcmUgc3RvcmVkLgorCSAqIAorCSAqIEBwYXJhbSBzY2VuYXJpb1VSTAorCSAqIEByZXR1cm4gU3RyaW5nIEZvbGRlciB0byBzdG9yZSByZWNvcmRlZCBzaW11bGF0aW9ucworCSAqLworCXB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldFJvb3RMb2dnaW5nRm9sZGVyRm9yU2NlbmFyaW8oU3RyaW5nIHNjZW5hcmlvVVJMKSAKKwl7CisJCWZpbmFsIElQYXRoIHdvcmtzcGFjZVBhdGggPSBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuZ2V0Um9vdCgpLmdldExvY2F0aW9uKCk7CisJCQorCQlib29sZWFuIHN0ZW1Qcm9qZWN0U2NlbmFyaW8gPSBzY2VuYXJpb1VSTC5zdGFydHNXaXRoKENvbnN0YW50cy5TQ0VOQVJJT1NfVVJMX1BSRUZJWCk7CisJCUlQYXRoIHBhdGgxOworCQlpZihzdGVtUHJvamVjdFNjZW5hcmlvKSB7CisJCQkvLyBTY2VuYXJpbyBpcyBjb250YWluZWQgaW4gYSBTVEVNIFByb2plY3QKKwkJCVN0cmluZyBzY2VuYXJpb1JlbGF0aXZlUGF0aCA9IHNjZW5hcmlvVVJMLnN1YnN0cmluZyhDb25zdGFudHMuU0NFTkFSSU9TX1VSTF9QUkVGSVgubGVuZ3RoKCkpOworCQkJcGF0aDEgPSB3b3Jrc3BhY2VQYXRoLmFwcGVuZChzY2VuYXJpb1JlbGF0aXZlUGF0aCkucmVtb3ZlTGFzdFNlZ21lbnRzKDIpOworCQl9IGVsc2UgeworCQkJLy8gU2NlbmFyaW8gaXMgZnJvbSB0aGUgYnVpbHQtaW4gc2NlbmFyaW9zIGxpc3QKKwkJCXBhdGgxID0gd29ya3NwYWNlUGF0aC5hcHBlbmQoQ29uc3RhbnRzLkJVSUxEX0lOX1NDRU5BUklPU19QUk9KRUNUX0ZPTERFUik7CisJCX0KKwkJU3RyaW5nIHBhdGggPSBwYXRoMS5hcHBlbmQoQ29uc3RhbnRzLlNZU1RFTV9QQVRIX1NFUEFSQVRPUikuYXBwZW5kKENvbnN0YW50cy5SRUNPUkRFRF9TSU1VTEFUSU9OU19GT0xERVIpLnRvT1NTdHJpbmcoKTsKKwkJcmV0dXJuIHBhdGg7CisJfQorCQorCS8qKgorCSAqIFNhZmVseSBjbG9zZSBhIHdyaXRlciwgaWdub3JpbmcgYWxsIHRocm93biBlcnJvcnMgYW5kIGV4Y2VwdGlvbnMKKwkgKiBAcGFyYW0gdyBUaGUgd3JpdGVyIHRvIGNsb3NlCisJICovCisJcHVibGljIHN0YXRpYyB2b2lkIHNhZmVDbG9zZShmaW5hbCBXcml0ZXIgdykKKwl7CisJCXRyeSB7CisJCQl3LmNsb3NlKCk7CisJCX0gY2F0Y2ggKFRocm93YWJsZSB0KSB7CisJCQkvLyBkb24ndCBjYXJlCisJCX0KKwl9CisJCisJLyoqCisJICogU2FmZWx5IGNsb3NlIGFuIG91dHB1dCBzdHJlYW0sIGlnbm9yaW5nIGFsbCB0aHJvd24gZXJyb3JzIGFuZCBleGNlcHRpb25zCisJICogQHBhcmFtIG9zIE91dHB1dCBzdHJlYW0gdG8gY2xvc2UKKwkgKi8KKwlwdWJsaWMgc3RhdGljIHZvaWQgc2FmZUNsb3NlKGZpbmFsIE91dHB1dFN0cmVhbSBvcykKKwl7CisJCXRyeSB7CisJCQlvcy5jbG9zZSgpOworCQl9IGNhdGNoIChUaHJvd2FibGUgdCkgeworCQkJLy8gZG9uJ3QgY2FyZQorCQl9CisJfQorCQorCS8qKgorCSAqIFNhZmVseSBjbG9zZSBhbiBpbnB1dCBzdHJlYW0sIGlnbm9yaW5nIGFsbCBleGNlcHRpb25zIHRocm91Z2gKKwkgKiBAcGFyYW0gaXMgSW5wdXQgc3RyZWFtIHRvIGNsb3NlCisJICovCisJcHVibGljIHN0YXRpYyB2b2lkIHNhZmVDbG9zZShmaW5hbCBJbnB1dFN0cmVhbSBpcykKKwl7CisJCXRyeSB7CisJCQlpcy5jbG9zZSgpOworCQl9IGNhdGNoIChUaHJvd2FibGUgdCkgeworCQkJLy8gZG9uJ3QgY2FyZQorCQl9CisJfQorfQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vbG9nZ2Vycy9pbXBsL0FzeW5jaHJvbm91c0xvZ2dlckltcGwuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2xvZ2dlcnMvaW1wbC9Bc3luY2hyb25vdXNMb2dnZXJJbXBsLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2NiYWQ3NAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2xvZ2dlcnMvaW1wbC9Bc3luY2hyb25vdXNMb2dnZXJJbXBsLmphdmEKQEAgLTAsMCArMSw0MiBAQAorLyoqCisgKiA8Y29weXJpZ2h0PgorICogPC9jb3B5cmlnaHQ+CisgKgorICogJElkJAorICovCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy5pbXBsOworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzczsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMuQXN5bmNocm9ub3VzTG9nZ2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy5TaW11bGF0aW9uTG9nZ2VyUGFja2FnZTsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPkFzeW5jaHJvbm91cyBMb2dnZXI8L2I+PC9lbT4nLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiA8cD4KKyAqIDwvcD4KKyAqCisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBhYnN0cmFjdCBjbGFzcyBBc3luY2hyb25vdXNMb2dnZXJJbXBsIGV4dGVuZHMgU2ltdWxhdGlvbkxvZ2dlckltcGwgaW1wbGVtZW50cyBBc3luY2hyb25vdXNMb2dnZXIgeworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBBc3luY2hyb25vdXNMb2dnZXJJbXBsKCkgeworCQlzdXBlcigpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCBFQ2xhc3MgZVN0YXRpY0NsYXNzKCkgeworCQlyZXR1cm4gU2ltdWxhdGlvbkxvZ2dlclBhY2thZ2UuTGl0ZXJhbHMuQVNZTkNIUk9OT1VTX0xPR0dFUjsKKwl9CisKK30gLy9Bc3luY2hyb25vdXNMb2dnZXJJbXBsCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9sb2dnZXJzL2ltcGwvU2ltdWxhdGlvbkxvZ2dlckV2ZW50SW1wbC5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vbG9nZ2Vycy9pbXBsL1NpbXVsYXRpb25Mb2dnZXJFdmVudEltcGwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZjFhZGIxCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vbG9nZ2Vycy9pbXBsL1NpbXVsYXRpb25Mb2dnZXJFdmVudEltcGwuamF2YQpAQCAtMCwwICsxLDQ1IEBACisvKioKKyAqIDxjb3B5cmlnaHQ+CisgKiA8L2NvcHlyaWdodD4KKyAqCisgKiAkSWQkCisgKi8KK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzLmltcGw7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLmltcGwuRU9iamVjdEltcGw7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMuU2ltdWxhdGlvbkxvZ2dlckV2ZW50OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy5TaW11bGF0aW9uTG9nZ2VyUGFja2FnZTsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPkV2ZW50PC9iPjwvZW0+Jy4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogPHA+CisgKiA8L3A+CisgKgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgU2ltdWxhdGlvbkxvZ2dlckV2ZW50SW1wbCBleHRlbmRzIEVPYmplY3RJbXBsIGltcGxlbWVudHMgU2ltdWxhdGlvbkxvZ2dlckV2ZW50IHsKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgU2ltdWxhdGlvbkxvZ2dlckV2ZW50SW1wbCgpIHsKKwkJc3VwZXIoKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgRUNsYXNzIGVTdGF0aWNDbGFzcygpIHsKKwkJcmV0dXJuIFNpbXVsYXRpb25Mb2dnZXJQYWNrYWdlLkxpdGVyYWxzLlNJTVVMQVRJT05fTE9HR0VSX0VWRU5UOworCX0KKworfSAvL1NpbXVsYXRpb25Mb2dnZXJFdmVudEltcGwKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2xvZ2dlcnMvaW1wbC9TaW11bGF0aW9uTG9nZ2VyRmFjdG9yeUltcGwuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2xvZ2dlcnMvaW1wbC9TaW11bGF0aW9uTG9nZ2VyRmFjdG9yeUltcGwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YzE4ZGQxCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vbG9nZ2Vycy9pbXBsL1NpbXVsYXRpb25Mb2dnZXJGYWN0b3J5SW1wbC5qYXZhCkBAIC0wLDAgKzEsMTczIEBACisvKioKKyAqIDxjb3B5cmlnaHQ+CisgKiA8L2NvcHlyaWdodD4KKyAqCisgKiAkSWQkCisgKi8KK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzLmltcGw7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FRGF0YVR5cGU7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3Q7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVQYWNrYWdlOworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLmltcGwuRUZhY3RvcnlJbXBsOworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnBsdWdpbi5FY29yZVBsdWdpbjsKKworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uam9icy5zaW11bGF0aW9uLlNpbXVsYXRpb25FdmVudDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMuKjsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIG1vZGVsIDxiPkZhY3Rvcnk8L2I+LgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBTaW11bGF0aW9uTG9nZ2VyRmFjdG9yeUltcGwgZXh0ZW5kcyBFRmFjdG9yeUltcGwgaW1wbGVtZW50cyBTaW11bGF0aW9uTG9nZ2VyRmFjdG9yeSB7CisJLyoqCisJICogQ3JlYXRlcyB0aGUgZGVmYXVsdCBmYWN0b3J5IGltcGxlbWVudGF0aW9uLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBzdGF0aWMgU2ltdWxhdGlvbkxvZ2dlckZhY3RvcnkgaW5pdCgpIHsKKwkJdHJ5IHsKKwkJCVNpbXVsYXRpb25Mb2dnZXJGYWN0b3J5IHRoZVNpbXVsYXRpb25Mb2dnZXJGYWN0b3J5ID0gKFNpbXVsYXRpb25Mb2dnZXJGYWN0b3J5KUVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVGYWN0b3J5KCJodHRwOi8vb3JnL2VjbGlwc2Uvc3RlbS9sb2dnZXJzLyIpOyAKKwkJCWlmICh0aGVTaW11bGF0aW9uTG9nZ2VyRmFjdG9yeSAhPSBudWxsKSB7CisJCQkJcmV0dXJuIHRoZVNpbXVsYXRpb25Mb2dnZXJGYWN0b3J5OworCQkJfQorCQl9CisJCWNhdGNoIChFeGNlcHRpb24gZXhjZXB0aW9uKSB7CisJCQlFY29yZVBsdWdpbi5JTlNUQU5DRS5sb2coZXhjZXB0aW9uKTsKKwkJfQorCQlyZXR1cm4gbmV3IFNpbXVsYXRpb25Mb2dnZXJGYWN0b3J5SW1wbCgpOworCX0KKworCS8qKgorCSAqIENyZWF0ZXMgYW4gaW5zdGFuY2Ugb2YgdGhlIGZhY3RvcnkuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFNpbXVsYXRpb25Mb2dnZXJGYWN0b3J5SW1wbCgpIHsKKwkJc3VwZXIoKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgRU9iamVjdCBjcmVhdGUoRUNsYXNzIGVDbGFzcykgeworCQlzd2l0Y2ggKGVDbGFzcy5nZXRDbGFzc2lmaWVySUQoKSkgeworCQkJY2FzZSBTaW11bGF0aW9uTG9nZ2VyUGFja2FnZS5TSU1VTEFUSU9OX0xPR0dFUl9FVkVOVDogcmV0dXJuIGNyZWF0ZVNpbXVsYXRpb25Mb2dnZXJFdmVudCgpOworCQkJZGVmYXVsdDoKKwkJCQl0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJUaGUgY2xhc3MgJyIgKyBlQ2xhc3MuZ2V0TmFtZSgpICsgIicgaXMgbm90IGEgdmFsaWQgY2xhc3NpZmllciIpOworCQl9CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIE9iamVjdCBjcmVhdGVGcm9tU3RyaW5nKEVEYXRhVHlwZSBlRGF0YVR5cGUsIFN0cmluZyBpbml0aWFsVmFsdWUpIHsKKwkJc3dpdGNoIChlRGF0YVR5cGUuZ2V0Q2xhc3NpZmllcklEKCkpIHsKKwkJCWNhc2UgU2ltdWxhdGlvbkxvZ2dlclBhY2thZ2UuTE9HR0VSX0VWRU5UUzoKKwkJCQlyZXR1cm4gY3JlYXRlTE9HR0VSX0VWRU5UU0Zyb21TdHJpbmcoZURhdGFUeXBlLCBpbml0aWFsVmFsdWUpOworCQkJY2FzZSBTaW11bGF0aW9uTG9nZ2VyUGFja2FnZS5TSU1VTEFUSU9OX0VWRU5UOgorCQkJCXJldHVybiBjcmVhdGVTaW11bGF0aW9uRXZlbnRGcm9tU3RyaW5nKGVEYXRhVHlwZSwgaW5pdGlhbFZhbHVlKTsKKwkJCWRlZmF1bHQ6CisJCQkJdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiVGhlIGRhdGF0eXBlICciICsgZURhdGFUeXBlLmdldE5hbWUoKSArICInIGlzIG5vdCBhIHZhbGlkIGNsYXNzaWZpZXIiKTsKKwkJfQorCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBTdHJpbmcgY29udmVydFRvU3RyaW5nKEVEYXRhVHlwZSBlRGF0YVR5cGUsIE9iamVjdCBpbnN0YW5jZVZhbHVlKSB7CisJCXN3aXRjaCAoZURhdGFUeXBlLmdldENsYXNzaWZpZXJJRCgpKSB7CisJCQljYXNlIFNpbXVsYXRpb25Mb2dnZXJQYWNrYWdlLkxPR0dFUl9FVkVOVFM6CisJCQkJcmV0dXJuIGNvbnZlcnRMT0dHRVJfRVZFTlRTVG9TdHJpbmcoZURhdGFUeXBlLCBpbnN0YW5jZVZhbHVlKTsKKwkJCWNhc2UgU2ltdWxhdGlvbkxvZ2dlclBhY2thZ2UuU0lNVUxBVElPTl9FVkVOVDoKKwkJCQlyZXR1cm4gY29udmVydFNpbXVsYXRpb25FdmVudFRvU3RyaW5nKGVEYXRhVHlwZSwgaW5zdGFuY2VWYWx1ZSk7CisJCQlkZWZhdWx0OgorCQkJCXRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIlRoZSBkYXRhdHlwZSAnIiArIGVEYXRhVHlwZS5nZXROYW1lKCkgKyAiJyBpcyBub3QgYSB2YWxpZCBjbGFzc2lmaWVyIik7CisJCX0KKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgU2ltdWxhdGlvbkxvZ2dlckV2ZW50IGNyZWF0ZVNpbXVsYXRpb25Mb2dnZXJFdmVudCgpIHsKKwkJU2ltdWxhdGlvbkxvZ2dlckV2ZW50SW1wbCBzaW11bGF0aW9uTG9nZ2VyRXZlbnQgPSBuZXcgU2ltdWxhdGlvbkxvZ2dlckV2ZW50SW1wbCgpOworCQlyZXR1cm4gc2ltdWxhdGlvbkxvZ2dlckV2ZW50OworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBMT0dHRVJfRVZFTlRTIGNyZWF0ZUxPR0dFUl9FVkVOVFNGcm9tU3RyaW5nKEVEYXRhVHlwZSBlRGF0YVR5cGUsIFN0cmluZyBpbml0aWFsVmFsdWUpIHsKKwkJTE9HR0VSX0VWRU5UUyByZXN1bHQgPSBMT0dHRVJfRVZFTlRTLmdldChpbml0aWFsVmFsdWUpOworCQlpZiAocmVzdWx0ID09IG51bGwpIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIlRoZSB2YWx1ZSAnIiArIGluaXRpYWxWYWx1ZSArICInIGlzIG5vdCBhIHZhbGlkIGVudW1lcmF0b3Igb2YgJyIgKyBlRGF0YVR5cGUuZ2V0TmFtZSgpICsgIiciKTsKKwkJcmV0dXJuIHJlc3VsdDsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgU3RyaW5nIGNvbnZlcnRMT0dHRVJfRVZFTlRTVG9TdHJpbmcoRURhdGFUeXBlIGVEYXRhVHlwZSwgT2JqZWN0IGluc3RhbmNlVmFsdWUpIHsKKwkJcmV0dXJuIGluc3RhbmNlVmFsdWUgPT0gbnVsbCA/IG51bGwgOiBpbnN0YW5jZVZhbHVlLnRvU3RyaW5nKCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFNpbXVsYXRpb25FdmVudCBjcmVhdGVTaW11bGF0aW9uRXZlbnRGcm9tU3RyaW5nKEVEYXRhVHlwZSBlRGF0YVR5cGUsIFN0cmluZyBpbml0aWFsVmFsdWUpIHsKKwkJcmV0dXJuIChTaW11bGF0aW9uRXZlbnQpc3VwZXIuY3JlYXRlRnJvbVN0cmluZyhlRGF0YVR5cGUsIGluaXRpYWxWYWx1ZSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFN0cmluZyBjb252ZXJ0U2ltdWxhdGlvbkV2ZW50VG9TdHJpbmcoRURhdGFUeXBlIGVEYXRhVHlwZSwgT2JqZWN0IGluc3RhbmNlVmFsdWUpIHsKKwkJcmV0dXJuIHN1cGVyLmNvbnZlcnRUb1N0cmluZyhlRGF0YVR5cGUsIGluc3RhbmNlVmFsdWUpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBTaW11bGF0aW9uTG9nZ2VyUGFja2FnZSBnZXRTaW11bGF0aW9uTG9nZ2VyUGFja2FnZSgpIHsKKwkJcmV0dXJuIChTaW11bGF0aW9uTG9nZ2VyUGFja2FnZSlnZXRFUGFja2FnZSgpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGRlcHJlY2F0ZWQKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQERlcHJlY2F0ZWQKKwlwdWJsaWMgc3RhdGljIFNpbXVsYXRpb25Mb2dnZXJQYWNrYWdlIGdldFBhY2thZ2UoKSB7CisJCXJldHVybiBTaW11bGF0aW9uTG9nZ2VyUGFja2FnZS5lSU5TVEFOQ0U7CisJfQorCit9IC8vU2ltdWxhdGlvbkxvZ2dlckZhY3RvcnlJbXBsCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9sb2dnZXJzL2ltcGwvU2ltdWxhdGlvbkxvZ2dlckltcGwuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2xvZ2dlcnMvaW1wbC9TaW11bGF0aW9uTG9nZ2VySW1wbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk4MjA3NDQKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9sb2dnZXJzL2ltcGwvU2ltdWxhdGlvbkxvZ2dlckltcGwuamF2YQpAQCAtMCwwICsxLDIxMSBAQAorLyoqCisgKiA8Y29weXJpZ2h0PgorICogPC9jb3B5cmlnaHQ+CisgKgorICogJElkJAorICovCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy5pbXBsOworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLmltcGwuRU5vdGlmaWNhdGlvbkltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmxvZ2dlci5pbXBsLkxvZ2dlckltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5qb2JzLnNpbXVsYXRpb24uSVNpbXVsYXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5qb2JzLnNpbXVsYXRpb24uU2ltdWxhdGlvbkV2ZW50OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy5MT0dHRVJfRVZFTlRTOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy5TaW11bGF0aW9uTG9nZ2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy5TaW11bGF0aW9uTG9nZ2VyUGFja2FnZTsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPlNpbXVsYXRpb24gTG9nZ2VyPC9iPjwvZW0+Jy4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogPHA+CisgKiBUaGUgZm9sbG93aW5nIGZlYXR1cmVzIGFyZSBpbXBsZW1lbnRlZDoKKyAqIDx1bD4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMuaW1wbC5TaW11bGF0aW9uTG9nZ2VySW1wbCNpc0VuYWJsZWQgPGVtPkVuYWJsZWQ8L2VtPn08L2xpPgorICogPC91bD4KKyAqIDwvcD4KKyAqCisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBhYnN0cmFjdCBjbGFzcyBTaW11bGF0aW9uTG9nZ2VySW1wbCBleHRlbmRzIExvZ2dlckltcGwgaW1wbGVtZW50cyBTaW11bGF0aW9uTG9nZ2VyIHsKKwkvKioKKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjaXNFbmFibGVkKCkgPGVtPkVuYWJsZWQ8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI2lzRW5hYmxlZCgpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBib29sZWFuIEVOQUJMRURfRURFRkFVTFQgPSB0cnVlOworCisJLyoqCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjaXNFbmFibGVkKCkgPGVtPkVuYWJsZWQ8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI2lzRW5hYmxlZCgpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIGJvb2xlYW4gZW5hYmxlZCA9IEVOQUJMRURfRURFRkFVTFQ7CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgU2ltdWxhdGlvbkxvZ2dlckltcGwoKSB7CisJCXN1cGVyKCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIEVDbGFzcyBlU3RhdGljQ2xhc3MoKSB7CisJCXJldHVybiBTaW11bGF0aW9uTG9nZ2VyUGFja2FnZS5MaXRlcmFscy5TSU1VTEFUSU9OX0xPR0dFUjsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgYm9vbGVhbiBpc0VuYWJsZWQoKSB7CisJCXJldHVybiBlbmFibGVkOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIHNldEVuYWJsZWQoYm9vbGVhbiBuZXdFbmFibGVkKSB7CisJCWJvb2xlYW4gb2xkRW5hYmxlZCA9IGVuYWJsZWQ7CisJCWVuYWJsZWQgPSBuZXdFbmFibGVkOworCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpCisJCQllTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBTaW11bGF0aW9uTG9nZ2VyUGFja2FnZS5TSU1VTEFUSU9OX0xPR0dFUl9fRU5BQkxFRCwgb2xkRW5hYmxlZCwgZW5hYmxlZCkpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIHNpbXVsYXRpb25FdmVudChTaW11bGF0aW9uRXZlbnQgZXZlbnQpIHsKKwkJLy8gVE9ETzogaW1wbGVtZW50IHRoaXMgbWV0aG9kCisJCS8vIEVuc3VyZSB0aGF0IHlvdSByZW1vdmUgQGdlbmVyYXRlZCBvciBtYXJrIGl0IEBnZW5lcmF0ZWQgTk9UCisJCXRocm93IG5ldyBVbnN1cHBvcnRlZE9wZXJhdGlvbkV4Y2VwdGlvbigpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIGxvZ2dlckV2ZW50KElTaW11bGF0aW9uIHNpbXVsYXRpb24sIExPR0dFUl9FVkVOVFMgZXZlbnQpIHsKKwkJLy8gVE9ETzogaW1wbGVtZW50IHRoaXMgbWV0aG9kCisJCS8vIEVuc3VyZSB0aGF0IHlvdSByZW1vdmUgQGdlbmVyYXRlZCBvciBtYXJrIGl0IEBnZW5lcmF0ZWQgTk9UCisJCXRocm93IG5ldyBVbnN1cHBvcnRlZE9wZXJhdGlvbkV4Y2VwdGlvbigpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKy8vCXB1YmxpYyB2b2lkIHNpbXVsYXRpb25FdmVudChTaW11bGF0aW9uRXZlbnQgZXZlbnQpIHsKKy8vCQkvLyBUT0RPOiBpbXBsZW1lbnQgdGhpcyBtZXRob2QKKy8vCQkvLyBFbnN1cmUgdGhhdCB5b3UgcmVtb3ZlIEBnZW5lcmF0ZWQgb3IgbWFyayBpdCBAZ2VuZXJhdGVkIE5PVAorLy8JCXRocm93IG5ldyBVbnN1cHBvcnRlZE9wZXJhdGlvbkV4Y2VwdGlvbigpOworLy8JfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworLy8JcHVibGljIHZvaWQgbG9nZ2VyRXZlbnQoSVNpbXVsYXRpb24gc2ltdWxhdGlvbiwgTE9HR0VSX0VWRU5UUyBldmVudCkgeworLy8JCS8vIFRPRE86IGltcGxlbWVudCB0aGlzIG1ldGhvZAorLy8JCS8vIEVuc3VyZSB0aGF0IHlvdSByZW1vdmUgQGdlbmVyYXRlZCBvciBtYXJrIGl0IEBnZW5lcmF0ZWQgTk9UCisvLwkJdGhyb3cgbmV3IFVuc3VwcG9ydGVkT3BlcmF0aW9uRXhjZXB0aW9uKCk7CisvLwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgT2JqZWN0IGVHZXQoaW50IGZlYXR1cmVJRCwgYm9vbGVhbiByZXNvbHZlLCBib29sZWFuIGNvcmVUeXBlKSB7CisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7CisJCQljYXNlIFNpbXVsYXRpb25Mb2dnZXJQYWNrYWdlLlNJTVVMQVRJT05fTE9HR0VSX19FTkFCTEVEOgorCQkJCXJldHVybiBpc0VuYWJsZWQoKTsKKwkJfQorCQlyZXR1cm4gc3VwZXIuZUdldChmZWF0dXJlSUQsIHJlc29sdmUsIGNvcmVUeXBlKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBlU2V0KGludCBmZWF0dXJlSUQsIE9iamVjdCBuZXdWYWx1ZSkgeworCQlzd2l0Y2ggKGZlYXR1cmVJRCkgeworCQkJY2FzZSBTaW11bGF0aW9uTG9nZ2VyUGFja2FnZS5TSU1VTEFUSU9OX0xPR0dFUl9fRU5BQkxFRDoKKwkJCQlzZXRFbmFibGVkKChCb29sZWFuKW5ld1ZhbHVlKTsKKwkJCQlyZXR1cm47CisJCX0KKwkJc3VwZXIuZVNldChmZWF0dXJlSUQsIG5ld1ZhbHVlKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBlVW5zZXQoaW50IGZlYXR1cmVJRCkgeworCQlzd2l0Y2ggKGZlYXR1cmVJRCkgeworCQkJY2FzZSBTaW11bGF0aW9uTG9nZ2VyUGFja2FnZS5TSU1VTEFUSU9OX0xPR0dFUl9fRU5BQkxFRDoKKwkJCQlzZXRFbmFibGVkKEVOQUJMRURfRURFRkFVTFQpOworCQkJCXJldHVybjsKKwkJfQorCQlzdXBlci5lVW5zZXQoZmVhdHVyZUlEKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgYm9vbGVhbiBlSXNTZXQoaW50IGZlYXR1cmVJRCkgeworCQlzd2l0Y2ggKGZlYXR1cmVJRCkgeworCQkJY2FzZSBTaW11bGF0aW9uTG9nZ2VyUGFja2FnZS5TSU1VTEFUSU9OX0xPR0dFUl9fRU5BQkxFRDoKKwkJCQlyZXR1cm4gZW5hYmxlZCAhPSBFTkFCTEVEX0VERUZBVUxUOworCQl9CisJCXJldHVybiBzdXBlci5lSXNTZXQoZmVhdHVyZUlEKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkgeworCQlpZiAoZUlzUHJveHkoKSkgcmV0dXJuIHN1cGVyLnRvU3RyaW5nKCk7CisKKwkJU3RyaW5nQnVmZmVyIHJlc3VsdCA9IG5ldyBTdHJpbmdCdWZmZXIoc3VwZXIudG9TdHJpbmcoKSk7CisJCXJlc3VsdC5hcHBlbmQoIiAoZW5hYmxlZDogIik7CisJCXJlc3VsdC5hcHBlbmQoZW5hYmxlZCk7CisJCXJlc3VsdC5hcHBlbmQoJyknKTsKKwkJcmV0dXJuIHJlc3VsdC50b1N0cmluZygpOworCX0KKworfSAvL1NpbXVsYXRpb25Mb2dnZXJJbXBsCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9sb2dnZXJzL2ltcGwvU2ltdWxhdGlvbkxvZ2dlclBhY2thZ2VJbXBsLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9sb2dnZXJzL2ltcGwvU2ltdWxhdGlvbkxvZ2dlclBhY2thZ2VJbXBsLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWRmMGM3MAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2xvZ2dlcnMvaW1wbC9TaW11bGF0aW9uTG9nZ2VyUGFja2FnZUltcGwuamF2YQpAQCAtMCwwICsxLDM4NCBAQAorLyoqCisgKiA8Y29weXJpZ2h0PgorICogPC9jb3B5cmlnaHQ+CisgKgorICogJElkJAorICovCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy5pbXBsOworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVBdHRyaWJ1dGU7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzczsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRURhdGFUeXBlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FRW51bTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9wZXJhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRVBhY2thZ2U7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRWNvcmVQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5pbXBsLkVQYWNrYWdlSW1wbDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uQ29tbW9uUGFja2FnZTsKKworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5HcmFwaFBhY2thZ2U7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubG9nZ2VyLkxvZ2dlclBhY2thZ2U7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuTW9kZWxQYWNrYWdlOworCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLk1vZGlmaWVyUGFja2FnZTsKKworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zY2VuYXJpby5TY2VuYXJpb1BhY2thZ2U7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2VxdWVuY2VyLlNlcXVlbmNlclBhY2thZ2U7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc29sdmVyLlNvbHZlclBhY2thZ2U7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmpvYnMuc2ltdWxhdGlvbi5JU2ltdWxhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmpvYnMuc2ltdWxhdGlvbi5JU2ltdWxhdGlvbkxpc3RlbmVyOworCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5qb2JzLnNpbXVsYXRpb24uU2ltdWxhdGlvbkV2ZW50OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy5Bc3luY2hyb25vdXNMb2dnZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzLlNpbXVsYXRpb25Mb2dnZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzLlNpbXVsYXRpb25Mb2dnZXJFdmVudDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMuU2ltdWxhdGlvbkxvZ2dlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzLlNpbXVsYXRpb25Mb2dnZXJQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy5TeW5jaHJvbm91c0xvZ2dlcjsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIG1vZGVsIDxiPlBhY2thZ2U8L2I+LgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBTaW11bGF0aW9uTG9nZ2VyUGFja2FnZUltcGwgZXh0ZW5kcyBFUGFja2FnZUltcGwgaW1wbGVtZW50cyBTaW11bGF0aW9uTG9nZ2VyUGFja2FnZSB7CisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJpdmF0ZSBFQ2xhc3Mgc2ltdWxhdGlvbkxvZ2dlckVDbGFzcyA9IG51bGw7CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcml2YXRlIEVDbGFzcyBzeW5jaHJvbm91c0xvZ2dlckVDbGFzcyA9IG51bGw7CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcml2YXRlIEVDbGFzcyBpU2ltdWxhdGlvbkxpc3RlbmVyRUNsYXNzID0gbnVsbDsKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByaXZhdGUgRUNsYXNzIGFzeW5jaHJvbm91c0xvZ2dlckVDbGFzcyA9IG51bGw7CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcml2YXRlIEVDbGFzcyBzaW11bGF0aW9uTG9nZ2VyRXZlbnRFQ2xhc3MgPSBudWxsOworCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJpdmF0ZSBFRW51bSBsb2dnZVJfRVZFTlRTRUVudW0gPSBudWxsOworCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJpdmF0ZSBFRGF0YVR5cGUgc2ltdWxhdGlvbkVEYXRhVHlwZSA9IG51bGw7CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcml2YXRlIEVEYXRhVHlwZSBzaW11bGF0aW9uRXZlbnRFRGF0YVR5cGUgPSBudWxsOworCisJLyoqCisJICogQ3JlYXRlcyBhbiBpbnN0YW5jZSBvZiB0aGUgbW9kZWwgPGI+UGFja2FnZTwvYj4sIHJlZ2lzdGVyZWQgd2l0aAorCSAqIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRVBhY2thZ2UuUmVnaXN0cnkgRVBhY2thZ2UuUmVnaXN0cnl9IGJ5IHRoZSBwYWNrYWdlCisJICogcGFja2FnZSBVUkkgdmFsdWUuCisJICogPHA+Tm90ZTogdGhlIGNvcnJlY3Qgd2F5IHRvIGNyZWF0ZSB0aGUgcGFja2FnZSBpcyB2aWEgdGhlIHN0YXRpYworCSAqIGZhY3RvcnkgbWV0aG9kIHtAbGluayAjaW5pdCBpbml0KCl9LCB3aGljaCBhbHNvIHBlcmZvcm1zCisJICogaW5pdGlhbGl6YXRpb24gb2YgdGhlIHBhY2thZ2UsIG9yIHJldHVybnMgdGhlIHJlZ2lzdGVyZWQgcGFja2FnZSwKKwkgKiBpZiBvbmUgYWxyZWFkeSBleGlzdHMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FUGFja2FnZS5SZWdpc3RyeQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzLlNpbXVsYXRpb25Mb2dnZXJQYWNrYWdlI2VOU19VUkkKKwkgKiBAc2VlICNpbml0KCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJpdmF0ZSBTaW11bGF0aW9uTG9nZ2VyUGFja2FnZUltcGwoKSB7CisJCXN1cGVyKGVOU19VUkksIFNpbXVsYXRpb25Mb2dnZXJGYWN0b3J5LmVJTlNUQU5DRSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJpdmF0ZSBzdGF0aWMgYm9vbGVhbiBpc0luaXRlZCA9IGZhbHNlOworCisJLyoqCisJICogQ3JlYXRlcywgcmVnaXN0ZXJzLCBhbmQgaW5pdGlhbGl6ZXMgdGhlIDxiPlBhY2thZ2U8L2I+IGZvciB0aGlzIG1vZGVsLCBhbmQgZm9yIGFueSBvdGhlcnMgdXBvbiB3aGljaCBpdCBkZXBlbmRzLgorCSAqIAorCSAqIDxwPlRoaXMgbWV0aG9kIGlzIHVzZWQgdG8gaW5pdGlhbGl6ZSB7QGxpbmsgU2ltdWxhdGlvbkxvZ2dlclBhY2thZ2UjZUlOU1RBTkNFfSB3aGVuIHRoYXQgZmllbGQgaXMgYWNjZXNzZWQuCisJICogQ2xpZW50cyBzaG91bGQgbm90IGludm9rZSBpdCBkaXJlY3RseS4gSW5zdGVhZCwgdGhleSBzaG91bGQgc2ltcGx5IGFjY2VzcyB0aGF0IGZpZWxkIHRvIG9idGFpbiB0aGUgcGFja2FnZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI2VOU19VUkkKKwkgKiBAc2VlICNjcmVhdGVQYWNrYWdlQ29udGVudHMoKQorCSAqIEBzZWUgI2luaXRpYWxpemVQYWNrYWdlQ29udGVudHMoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgc3RhdGljIFNpbXVsYXRpb25Mb2dnZXJQYWNrYWdlIGluaXQoKSB7CisJCWlmIChpc0luaXRlZCkgcmV0dXJuIChTaW11bGF0aW9uTG9nZ2VyUGFja2FnZSlFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShTaW11bGF0aW9uTG9nZ2VyUGFja2FnZS5lTlNfVVJJKTsKKworCQkvLyBPYnRhaW4gb3IgY3JlYXRlIGFuZCByZWdpc3RlciBwYWNrYWdlCisJCVNpbXVsYXRpb25Mb2dnZXJQYWNrYWdlSW1wbCB0aGVTaW11bGF0aW9uTG9nZ2VyUGFja2FnZSA9IChTaW11bGF0aW9uTG9nZ2VyUGFja2FnZUltcGwpKEVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldChlTlNfVVJJKSBpbnN0YW5jZW9mIFNpbXVsYXRpb25Mb2dnZXJQYWNrYWdlSW1wbCA/IEVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldChlTlNfVVJJKSA6IG5ldyBTaW11bGF0aW9uTG9nZ2VyUGFja2FnZUltcGwoKSk7CisKKwkJaXNJbml0ZWQgPSB0cnVlOworCisJCS8vIEluaXRpYWxpemUgc2ltcGxlIGRlcGVuZGVuY2llcworCQlDb21tb25QYWNrYWdlLmVJTlNUQU5DRS5lQ2xhc3MoKTsKKwkJR3JhcGhQYWNrYWdlLmVJTlNUQU5DRS5lQ2xhc3MoKTsKKwkJTW9kZWxQYWNrYWdlLmVJTlNUQU5DRS5lQ2xhc3MoKTsKKwkJTW9kaWZpZXJQYWNrYWdlLmVJTlNUQU5DRS5lQ2xhc3MoKTsKKwkJU2NlbmFyaW9QYWNrYWdlLmVJTlNUQU5DRS5lQ2xhc3MoKTsKKwkJU2VxdWVuY2VyUGFja2FnZS5lSU5TVEFOQ0UuZUNsYXNzKCk7CisJCVNvbHZlclBhY2thZ2UuZUlOU1RBTkNFLmVDbGFzcygpOworCQlMb2dnZXJQYWNrYWdlLmVJTlNUQU5DRS5lQ2xhc3MoKTsKKworCQkvLyBDcmVhdGUgcGFja2FnZSBtZXRhLWRhdGEgb2JqZWN0cworCQl0aGVTaW11bGF0aW9uTG9nZ2VyUGFja2FnZS5jcmVhdGVQYWNrYWdlQ29udGVudHMoKTsKKworCQkvLyBJbml0aWFsaXplIGNyZWF0ZWQgbWV0YS1kYXRhCisJCXRoZVNpbXVsYXRpb25Mb2dnZXJQYWNrYWdlLmluaXRpYWxpemVQYWNrYWdlQ29udGVudHMoKTsKKworCQkvLyBNYXJrIG1ldGEtZGF0YSB0byBpbmRpY2F0ZSBpdCBjYW4ndCBiZSBjaGFuZ2VkCisJCXRoZVNpbXVsYXRpb25Mb2dnZXJQYWNrYWdlLmZyZWV6ZSgpOworCisgIAorCQkvLyBVcGRhdGUgdGhlIHJlZ2lzdHJ5IGFuZCByZXR1cm4gdGhlIHBhY2thZ2UKKwkJRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UucHV0KFNpbXVsYXRpb25Mb2dnZXJQYWNrYWdlLmVOU19VUkksIHRoZVNpbXVsYXRpb25Mb2dnZXJQYWNrYWdlKTsKKwkJcmV0dXJuIHRoZVNpbXVsYXRpb25Mb2dnZXJQYWNrYWdlOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQ2xhc3MgZ2V0U2ltdWxhdGlvbkxvZ2dlcigpIHsKKwkJcmV0dXJuIHNpbXVsYXRpb25Mb2dnZXJFQ2xhc3M7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVBdHRyaWJ1dGUgZ2V0U2ltdWxhdGlvbkxvZ2dlcl9FbmFibGVkKCkgeworCQlyZXR1cm4gKEVBdHRyaWJ1dGUpc2ltdWxhdGlvbkxvZ2dlckVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDApOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQ2xhc3MgZ2V0U3luY2hyb25vdXNMb2dnZXIoKSB7CisJCXJldHVybiBzeW5jaHJvbm91c0xvZ2dlckVDbGFzczsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUNsYXNzIGdldElTaW11bGF0aW9uTGlzdGVuZXIoKSB7CisJCXJldHVybiBpU2ltdWxhdGlvbkxpc3RlbmVyRUNsYXNzOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQ2xhc3MgZ2V0QXN5bmNocm9ub3VzTG9nZ2VyKCkgeworCQlyZXR1cm4gYXN5bmNocm9ub3VzTG9nZ2VyRUNsYXNzOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQ2xhc3MgZ2V0U2ltdWxhdGlvbkxvZ2dlckV2ZW50KCkgeworCQlyZXR1cm4gc2ltdWxhdGlvbkxvZ2dlckV2ZW50RUNsYXNzOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFRW51bSBnZXRMT0dHRVJfRVZFTlRTKCkgeworCQlyZXR1cm4gbG9nZ2VSX0VWRU5UU0VFbnVtOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFRGF0YVR5cGUgZ2V0U2ltdWxhdGlvbigpIHsKKwkJcmV0dXJuIHNpbXVsYXRpb25FRGF0YVR5cGU7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVEYXRhVHlwZSBnZXRTaW11bGF0aW9uRXZlbnQoKSB7CisJCXJldHVybiBzaW11bGF0aW9uRXZlbnRFRGF0YVR5cGU7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFNpbXVsYXRpb25Mb2dnZXJGYWN0b3J5IGdldFNpbXVsYXRpb25Mb2dnZXJGYWN0b3J5KCkgeworCQlyZXR1cm4gKFNpbXVsYXRpb25Mb2dnZXJGYWN0b3J5KWdldEVGYWN0b3J5SW5zdGFuY2UoKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcml2YXRlIGJvb2xlYW4gaXNDcmVhdGVkID0gZmFsc2U7CisKKwkvKioKKwkgKiBDcmVhdGVzIHRoZSBtZXRhLW1vZGVsIG9iamVjdHMgZm9yIHRoZSBwYWNrYWdlLiAgVGhpcyBtZXRob2QgaXMKKwkgKiBndWFyZGVkIHRvIGhhdmUgbm8gYWZmZWN0IG9uIGFueSBpbnZvY2F0aW9uIGJ1dCBpdHMgZmlyc3QuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgY3JlYXRlUGFja2FnZUNvbnRlbnRzKCkgeworCQlpZiAoaXNDcmVhdGVkKSByZXR1cm47CisJCWlzQ3JlYXRlZCA9IHRydWU7CisKKwkJLy8gQ3JlYXRlIGNsYXNzZXMgYW5kIHRoZWlyIGZlYXR1cmVzCisJCXNpbXVsYXRpb25Mb2dnZXJFQ2xhc3MgPSBjcmVhdGVFQ2xhc3MoU0lNVUxBVElPTl9MT0dHRVIpOworCQljcmVhdGVFQXR0cmlidXRlKHNpbXVsYXRpb25Mb2dnZXJFQ2xhc3MsIFNJTVVMQVRJT05fTE9HR0VSX19FTkFCTEVEKTsKKworCQlzeW5jaHJvbm91c0xvZ2dlckVDbGFzcyA9IGNyZWF0ZUVDbGFzcyhTWU5DSFJPTk9VU19MT0dHRVIpOworCisJCWlTaW11bGF0aW9uTGlzdGVuZXJFQ2xhc3MgPSBjcmVhdGVFQ2xhc3MoSVNJTVVMQVRJT05fTElTVEVORVIpOworCisJCWFzeW5jaHJvbm91c0xvZ2dlckVDbGFzcyA9IGNyZWF0ZUVDbGFzcyhBU1lOQ0hST05PVVNfTE9HR0VSKTsKKworCQlzaW11bGF0aW9uTG9nZ2VyRXZlbnRFQ2xhc3MgPSBjcmVhdGVFQ2xhc3MoU0lNVUxBVElPTl9MT0dHRVJfRVZFTlQpOworCisJCS8vIENyZWF0ZSBlbnVtcworCQlsb2dnZVJfRVZFTlRTRUVudW0gPSBjcmVhdGVFRW51bShMT0dHRVJfRVZFTlRTKTsKKworCQkvLyBDcmVhdGUgZGF0YSB0eXBlcworCQlzaW11bGF0aW9uRURhdGFUeXBlID0gY3JlYXRlRURhdGFUeXBlKFNJTVVMQVRJT04pOworCQlzaW11bGF0aW9uRXZlbnRFRGF0YVR5cGUgPSBjcmVhdGVFRGF0YVR5cGUoU0lNVUxBVElPTl9FVkVOVCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJpdmF0ZSBib29sZWFuIGlzSW5pdGlhbGl6ZWQgPSBmYWxzZTsKKworCS8qKgorCSAqIENvbXBsZXRlIHRoZSBpbml0aWFsaXphdGlvbiBvZiB0aGUgcGFja2FnZSBhbmQgaXRzIG1ldGEtbW9kZWwuICBUaGlzCisJICogbWV0aG9kIGlzIGd1YXJkZWQgdG8gaGF2ZSBubyBhZmZlY3Qgb24gYW55IGludm9jYXRpb24gYnV0IGl0cyBmaXJzdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBpbml0aWFsaXplUGFja2FnZUNvbnRlbnRzKCkgeworCQlpZiAoaXNJbml0aWFsaXplZCkgcmV0dXJuOworCQlpc0luaXRpYWxpemVkID0gdHJ1ZTsKKworCQkvLyBJbml0aWFsaXplIHBhY2thZ2UKKwkJc2V0TmFtZShlTkFNRSk7CisJCXNldE5zUHJlZml4KGVOU19QUkVGSVgpOworCQlzZXROc1VSSShlTlNfVVJJKTsKKworCQkvLyBPYnRhaW4gb3RoZXIgZGVwZW5kZW50IHBhY2thZ2VzCisJCUxvZ2dlclBhY2thZ2UgdGhlTG9nZ2VyUGFja2FnZSA9IChMb2dnZXJQYWNrYWdlKUVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVQYWNrYWdlKExvZ2dlclBhY2thZ2UuZU5TX1VSSSk7CisJCUVjb3JlUGFja2FnZSB0aGVFY29yZVBhY2thZ2UgPSAoRWNvcmVQYWNrYWdlKUVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVQYWNrYWdlKEVjb3JlUGFja2FnZS5lTlNfVVJJKTsKKworCQkvLyBDcmVhdGUgdHlwZSBwYXJhbWV0ZXJzCisKKwkJLy8gU2V0IGJvdW5kcyBmb3IgdHlwZSBwYXJhbWV0ZXJzCisKKwkJLy8gQWRkIHN1cGVydHlwZXMgdG8gY2xhc3NlcworCQlzaW11bGF0aW9uTG9nZ2VyRUNsYXNzLmdldEVTdXBlclR5cGVzKCkuYWRkKHRoZUxvZ2dlclBhY2thZ2UuZ2V0TG9nZ2VyKCkpOworCQlzeW5jaHJvbm91c0xvZ2dlckVDbGFzcy5nZXRFU3VwZXJUeXBlcygpLmFkZCh0aGlzLmdldFNpbXVsYXRpb25Mb2dnZXIoKSk7CisJCWFzeW5jaHJvbm91c0xvZ2dlckVDbGFzcy5nZXRFU3VwZXJUeXBlcygpLmFkZCh0aGlzLmdldFNpbXVsYXRpb25Mb2dnZXIoKSk7CisKKwkJLy8gSW5pdGlhbGl6ZSBjbGFzc2VzIGFuZCBmZWF0dXJlczsgYWRkIG9wZXJhdGlvbnMgYW5kIHBhcmFtZXRlcnMKKwkJaW5pdEVDbGFzcyhzaW11bGF0aW9uTG9nZ2VyRUNsYXNzLCBTaW11bGF0aW9uTG9nZ2VyLmNsYXNzLCAiU2ltdWxhdGlvbkxvZ2dlciIsIElTX0FCU1RSQUNULCAhSVNfSU5URVJGQUNFLCBJU19HRU5FUkFURURfSU5TVEFOQ0VfQ0xBU1MpOworCQlpbml0RUF0dHJpYnV0ZShnZXRTaW11bGF0aW9uTG9nZ2VyX0VuYWJsZWQoKSwgdGhlRWNvcmVQYWNrYWdlLmdldEVCb29sZWFuKCksICJlbmFibGVkIiwgInRydWUiLCAwLCAxLCBTaW11bGF0aW9uTG9nZ2VyLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOworCisJCUVPcGVyYXRpb24gb3AgPSBhZGRFT3BlcmF0aW9uKHNpbXVsYXRpb25Mb2dnZXJFQ2xhc3MsIG51bGwsICJzaW11bGF0aW9uRXZlbnQiLCAwLCAxLCBJU19VTklRVUUsIElTX09SREVSRUQpOworCQlhZGRFUGFyYW1ldGVyKG9wLCB0aGlzLmdldFNpbXVsYXRpb25FdmVudCgpLCAiZXZlbnQiLCAwLCAxLCBJU19VTklRVUUsIElTX09SREVSRUQpOworCisJCW9wID0gYWRkRU9wZXJhdGlvbihzaW11bGF0aW9uTG9nZ2VyRUNsYXNzLCBudWxsLCAibG9nZ2VyRXZlbnQiLCAwLCAxLCBJU19VTklRVUUsIElTX09SREVSRUQpOworCQlhZGRFUGFyYW1ldGVyKG9wLCB0aGlzLmdldFNpbXVsYXRpb24oKSwgInNpbXVsYXRpb24iLCAwLCAxLCBJU19VTklRVUUsIElTX09SREVSRUQpOworCQlhZGRFUGFyYW1ldGVyKG9wLCB0aGlzLmdldExPR0dFUl9FVkVOVFMoKSwgImV2ZW50IiwgMCwgMSwgSVNfVU5JUVVFLCBJU19PUkRFUkVEKTsKKworCQlpbml0RUNsYXNzKHN5bmNocm9ub3VzTG9nZ2VyRUNsYXNzLCBTeW5jaHJvbm91c0xvZ2dlci5jbGFzcywgIlN5bmNocm9ub3VzTG9nZ2VyIiwgSVNfQUJTVFJBQ1QsIElTX0lOVEVSRkFDRSwgSVNfR0VORVJBVEVEX0lOU1RBTkNFX0NMQVNTKTsKKworCQlpbml0RUNsYXNzKGlTaW11bGF0aW9uTGlzdGVuZXJFQ2xhc3MsIElTaW11bGF0aW9uTGlzdGVuZXIuY2xhc3MsICJJU2ltdWxhdGlvbkxpc3RlbmVyIiwgSVNfQUJTVFJBQ1QsIElTX0lOVEVSRkFDRSwgIUlTX0dFTkVSQVRFRF9JTlNUQU5DRV9DTEFTUyk7CisKKwkJaW5pdEVDbGFzcyhhc3luY2hyb25vdXNMb2dnZXJFQ2xhc3MsIEFzeW5jaHJvbm91c0xvZ2dlci5jbGFzcywgIkFzeW5jaHJvbm91c0xvZ2dlciIsIElTX0FCU1RSQUNULCBJU19JTlRFUkZBQ0UsIElTX0dFTkVSQVRFRF9JTlNUQU5DRV9DTEFTUyk7CisKKwkJaW5pdEVDbGFzcyhzaW11bGF0aW9uTG9nZ2VyRXZlbnRFQ2xhc3MsIFNpbXVsYXRpb25Mb2dnZXJFdmVudC5jbGFzcywgIlNpbXVsYXRpb25Mb2dnZXJFdmVudCIsICFJU19BQlNUUkFDVCwgIUlTX0lOVEVSRkFDRSwgSVNfR0VORVJBVEVEX0lOU1RBTkNFX0NMQVNTKTsKKworCQkvLyBJbml0aWFsaXplIGVudW1zIGFuZCBhZGQgZW51bSBsaXRlcmFscworCQlpbml0RUVudW0obG9nZ2VSX0VWRU5UU0VFbnVtLCBvcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMuTE9HR0VSX0VWRU5UUy5jbGFzcywgIkxPR0dFUl9FVkVOVFMiKTsKKwkJYWRkRUVudW1MaXRlcmFsKGxvZ2dlUl9FVkVOVFNFRW51bSwgb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzLkxPR0dFUl9FVkVOVFMuTE9HR0VSX01BTkFHRVJfU1RBUlRFRCk7CisJCWFkZEVFbnVtTGl0ZXJhbChsb2dnZVJfRVZFTlRTRUVudW0sIG9yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy5MT0dHRVJfRVZFTlRTLkxPR0dFUl9NQU5BR0VSX1NUT1BQRUQpOworCQlhZGRFRW51bUxpdGVyYWwobG9nZ2VSX0VWRU5UU0VFbnVtLCBvcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMuTE9HR0VSX0VWRU5UUy5MT0dHRVJfU1RBUlRFRCk7CisJCWFkZEVFbnVtTGl0ZXJhbChsb2dnZVJfRVZFTlRTRUVudW0sIG9yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy5MT0dHRVJfRVZFTlRTLkxPR0dFUl9TVE9QUEVEKTsKKwkJYWRkRUVudW1MaXRlcmFsKGxvZ2dlUl9FVkVOVFNFRW51bSwgb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzLkxPR0dFUl9FVkVOVFMuTE9HR0VSX0VOQUJMRUQpOworCQlhZGRFRW51bUxpdGVyYWwobG9nZ2VSX0VWRU5UU0VFbnVtLCBvcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMuTE9HR0VSX0VWRU5UUy5MT0dHRVJfRElTQUJMRUQpOworCQlhZGRFRW51bUxpdGVyYWwobG9nZ2VSX0VWRU5UU0VFbnVtLCBvcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMuTE9HR0VSX0VWRU5UUy5TSU1VTEFUSU9OU19BRERFRCk7CisJCWFkZEVFbnVtTGl0ZXJhbChsb2dnZVJfRVZFTlRTRUVudW0sIG9yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy5MT0dHRVJfRVZFTlRTLlNJTVVMQVRJT05TX1JFTU9WRUQpOworCQlhZGRFRW51bUxpdGVyYWwobG9nZ2VSX0VWRU5UU0VFbnVtLCBvcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMuTE9HR0VSX0VWRU5UUy5MT0dHRVJTX0FEREVEKTsKKwkJYWRkRUVudW1MaXRlcmFsKGxvZ2dlUl9FVkVOVFNFRW51bSwgb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzLkxPR0dFUl9FVkVOVFMuTE9HR0VSU19SRU1PVkVEKTsKKworCQkvLyBJbml0aWFsaXplIGRhdGEgdHlwZXMKKwkJaW5pdEVEYXRhVHlwZShzaW11bGF0aW9uRURhdGFUeXBlLCBJU2ltdWxhdGlvbi5jbGFzcywgIlNpbXVsYXRpb24iLCAhSVNfU0VSSUFMSVpBQkxFLCAhSVNfR0VORVJBVEVEX0lOU1RBTkNFX0NMQVNTKTsKKwkJaW5pdEVEYXRhVHlwZShzaW11bGF0aW9uRXZlbnRFRGF0YVR5cGUsIFNpbXVsYXRpb25FdmVudC5jbGFzcywgIlNpbXVsYXRpb25FdmVudCIsIElTX1NFUklBTElaQUJMRSwgIUlTX0dFTkVSQVRFRF9JTlNUQU5DRV9DTEFTUyk7CisKKwkJLy8gQ3JlYXRlIHJlc291cmNlCisJCWNyZWF0ZVJlc291cmNlKGVOU19VUkkpOworCX0KKworfSAvL1NpbXVsYXRpb25Mb2dnZXJQYWNrYWdlSW1wbApkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vbG9nZ2Vycy9pbXBsL1N5bmNocm9ub3VzTG9nZ2VySW1wbC5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vbG9nZ2Vycy9pbXBsL1N5bmNocm9ub3VzTG9nZ2VySW1wbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNlNGE1MjUKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9sb2dnZXJzL2ltcGwvU3luY2hyb25vdXNMb2dnZXJJbXBsLmphdmEKQEAgLTAsMCArMSw0NCBAQAorLyoqCisgKiA8Y29weXJpZ2h0PgorICogPC9jb3B5cmlnaHQ+CisgKgorICogJElkJAorICovCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy5pbXBsOworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzczsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMuU2ltdWxhdGlvbkxvZ2dlclBhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzLlN5bmNocm9ub3VzTG9nZ2VyOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiBBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+U3luY2hyb25vdXMgTG9nZ2VyPC9iPjwvZW0+Jy4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogPHA+CisgKiA8L3A+CisgKgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgYWJzdHJhY3QgY2xhc3MgU3luY2hyb25vdXNMb2dnZXJJbXBsIGV4dGVuZHMgU2ltdWxhdGlvbkxvZ2dlckltcGwgaW1wbGVtZW50cyBTeW5jaHJvbm91c0xvZ2dlciB7CisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIFN5bmNocm9ub3VzTG9nZ2VySW1wbCgpIHsKKwkJc3VwZXIoKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgRUNsYXNzIGVTdGF0aWNDbGFzcygpIHsKKwkJcmV0dXJuIFNpbXVsYXRpb25Mb2dnZXJQYWNrYWdlLkxpdGVyYWxzLlNZTkNIUk9OT1VTX0xPR0dFUjsKKwl9CisKKworCit9IC8vU3luY2hyb25vdXNMb2dnZXJJbXBsCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9sb2dnZXJzL21hbmFnZXIvSVNpbXVsYXRpb25Mb2dnZXJNYW5hZ2VyTGlzdGVuZXIuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2xvZ2dlcnMvbWFuYWdlci9JU2ltdWxhdGlvbkxvZ2dlck1hbmFnZXJMaXN0ZW5lci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ1ZmM4NzcKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9sb2dnZXJzL21hbmFnZXIvSVNpbXVsYXRpb25Mb2dnZXJNYW5hZ2VyTGlzdGVuZXIuamF2YQpAQCAtMCwwICsxLDI5IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDExIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzLm1hbmFnZXI7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMuTE9HR0VSX0VWRU5UUzsKKworLyoqCisgKiBJbnRlcmZhY2UgZm9yIGNsYXNzZXMgdGhhdCB3YW50IHRvIG1vbml0b3IgZXZlbnRzCisgKiBpbiB0aGUgc2ltdWxhdGlvbiBsb2dnZXIuCisgKi8KK3B1YmxpYyBpbnRlcmZhY2UgSVNpbXVsYXRpb25Mb2dnZXJNYW5hZ2VyTGlzdGVuZXIKK3sKKwkvKioKKwkgKiBDYWxsYmFjayBmb3IgY2hhbmdlcyBpbiBzdGF0ZSBvbiB0aGUgc2ltdWxhdGlvbiBsb2dnZXIgbWFuYWdlci4gIFRoaXMgaW5jbHVkZXMKKwkgKiB0aGUgYWRkaXRpb24gYW5kIHJlbW92YWwgb2Ygc2ltdWxhdGlvbnMgZnJvbSBtb25pdG9yaW5nLgorCSAqIAorCSAqIEBwYXJhbSBldmVudCBUaGUgc2ltdWxhdGlvbiBsb2dnZXIgbWFuYWdlciBldmVudAorCSAqIEBwYXJhbSB0YXJnZXRzIFRoZSB0YXJnZXRzIGFmZmVjdGVkIGJ5IHRoaXMgc3RhdGUgY2hhbmdlCisJICovCisJcHVibGljIHZvaWQgc2ltdWxhdGlvbkxvZ2dlckV2ZW50KExPR0dFUl9FVkVOVFMgZXZlbnQsIE9iamVjdFtdIHRhcmdldHMpOworfQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vbG9nZ2Vycy9tYW5hZ2VyL0xvZ2dlckFkYXB0ZXIuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2xvZ2dlcnMvbWFuYWdlci9Mb2dnZXJBZGFwdGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODU0NzYyNQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2xvZ2dlcnMvbWFuYWdlci9Mb2dnZXJBZGFwdGVyLmphdmEKQEAgLTAsMCArMSwxMzUgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTEgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMubWFuYWdlcjsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5pbXBsLkFkYXB0ZXJJbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uam9icy5zaW11bGF0aW9uLklTaW11bGF0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uam9icy5zaW11bGF0aW9uLklTaW11bGF0aW9uTGlzdGVuZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5qb2JzLnNpbXVsYXRpb24uSVNpbXVsYXRpb25MaXN0ZW5lclN5bmM7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5qb2JzLnNpbXVsYXRpb24uU2ltdWxhdGlvbkV2ZW50OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy5MT0dHRVJfRVZFTlRTOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy5TaW11bGF0aW9uTG9nZ2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy5TaW11bGF0aW9uTG9nZ2VyUGFja2FnZTsKKworLyoqCisgKiBMb2dnZXIgYWRhcHRlciB0byBoYW5kbGUgdGhlIGludGVyYWN0aW9ucyBiZXR3ZWVuIHRoZSBTVEVNIHNpbXVsYXRpb24KKyAqIHJ1bnRpbWUgYW5kIHRoZSBpbmRpdmlkdWFsIGxvZ2dlcnMgCisgKgorICovCitwdWJsaWMgY2xhc3MgTG9nZ2VyQWRhcHRlciBleHRlbmRzIEFkYXB0ZXJJbXBsIGltcGxlbWVudHMgSVNpbXVsYXRpb25MaXN0ZW5lciwKKwkJSVNpbXVsYXRpb25MaXN0ZW5lclN5bmMgeworCisJLyoqCisJICogUGFyZW50IGxvZ2dlciB0aGUgYWRhcHRlciB3cmFwcworCSAqLworCVNpbXVsYXRpb25Mb2dnZXIgbG9nZ2VyOworCQorCS8qKgorCSAqIFNpbXVsYXRpb24gdGhlIGxvZ2dlciBsb2dzCisJICovCisJSVNpbXVsYXRpb24gc2ltdWxhdGlvbjsKKworCS8qKgorCSAqIENvbnN0cnVjdG9yIGZvciB0aGUgTG9nZ2VyIEFkYXB0ZXIKKwkgKiBAcGFyYW0gc2ltdWxhdGlvbiBUaGUgc2ltdWxhdGlvbiB0aGF0IGNvbnRhaW5zIHRoZSBzY2VuYXJpbyB0byBsb2cKKwkgKiBAcGFyYW0gbG9nZ2VyIFBhcmVudCBsb2dnZXIKKwkgKi8KKwlMb2dnZXJBZGFwdGVyKElTaW11bGF0aW9uIHNpbXVsYXRpb24sIFNpbXVsYXRpb25Mb2dnZXIgbG9nZ2VyKQorCXsKKwkJdGhpcy5sb2dnZXIgPSBsb2dnZXI7CisJCXRoaXMuc2ltdWxhdGlvbiA9IHNpbXVsYXRpb247CisKKwkJc2V0VGFyZ2V0KGxvZ2dlcik7CisJCWxvZ2dlci5lQWRhcHRlcnMoKS5hZGQodGhpcyk7CisJfQorCisJLyogKG5vbi1KYXZhZG9jKQorCSAqIEBzZWUgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuaW1wbC5BZGFwdGVySW1wbCNub3RpZnlDaGFuZ2VkKG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbikKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBub3RpZnlDaGFuZ2VkKE5vdGlmaWNhdGlvbiBtc2cpIAorCXsKKwkJaWYgKFNpbXVsYXRpb25Mb2dnZXJQYWNrYWdlLkxpdGVyYWxzLlNJTVVMQVRJT05fTE9HR0VSX19FTkFCTEVECisJCQkJLmVxdWFscyhtc2cuZ2V0RmVhdHVyZSgpKSkgeworCQkJaWYgKG1zZy5nZXROZXdCb29sZWFuVmFsdWUoKSA9PSB0cnVlKSB7CisJCQkJZmlyZUxvZ2dlckV2ZW50KExPR0dFUl9FVkVOVFMuTE9HR0VSX0VOQUJMRUQpOworCQkJfSBlbHNlIHsKKwkJCQlmaXJlTG9nZ2VyRXZlbnQoTE9HR0VSX0VWRU5UUy5MT0dHRVJfRElTQUJMRUQpOworCQkJfQorCQl9CisJfQorCisJLyoqCisJICogQHJldHVybiBUaGUgbG9nZ2VyIHRyYWNrZWQgYnkgdGhlIGFkYXB0ZXIKKwkgKi8KKwlwdWJsaWMgU2ltdWxhdGlvbkxvZ2dlciBnZXRMb2dnZXIoKSB7CisJCXJldHVybiBsb2dnZXI7CisJfQorCisJLyoqCisJICogQHJldHVybiBUaGUgc2ltdWxhdGlvbiB0cmFja2VkIGJ5IHRoZSBhZGFwdGVyCisJICovCisJcHVibGljIElTaW11bGF0aW9uIGdldFNpbXVsYXRpb24oKSB7CisJCXJldHVybiBzaW11bGF0aW9uOworCX0KKworCS8qKgorCSAqIFNlbmRzIGEgbG9nZ2VyIHN0YXRlIGNoYW5nZSBldmVudCB0byB0aGUgdW5kZXJseWluZyBsb2dnZXIgaW1wbGVtZW50YXRpb24KKwkgKiAKKwkgKiBAcGFyYW0gZXZlbnQgVGhlIGxvZ2dlciBldmVudCB0eXBlCisJICovCisJdm9pZCBmaXJlTG9nZ2VyRXZlbnQoTE9HR0VSX0VWRU5UUyBldmVudCkgeworCQlsb2dnZXIubG9nZ2VyRXZlbnQoc2ltdWxhdGlvbiwgZXZlbnQpOworCX0KKworCS8qKgorCSAqIFNlbmRzIGEgc2ltdWxhdGlvbiBjaGFuZ2UgZXZlbnQgdG8gdGhlIHVuZGVybHlpbmcgbG9nZ2VyIGltcGxlbWVudGF0aW9uLCAKKwkgKiBpZiB0aGUgbG9nZ2VyIGlzIGVuYWJsZWQKKwkgKiAKKwkgKiBAcGFyYW0gZXZlbnQgVGhlIHNpbXVsYXRpb24gZXZlbnQKKwkgKi8KKwl2b2lkIGZpcmVTaW11bGF0aW9uRXZlbnQoU2ltdWxhdGlvbkV2ZW50IGV2ZW50KQorCXsKKwkJLy8gZXZlbnQuCisJCWlmIChsb2dnZXIgIT0gbnVsbCAmJiBsb2dnZXIuaXNFbmFibGVkKCkpIHsKKwkJCWxvZ2dlci5zaW11bGF0aW9uRXZlbnQoZXZlbnQpOworCQl9CisJfQorCisJLyogKG5vbi1KYXZhZG9jKQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5qb2JzLnNpbXVsYXRpb24uSVNpbXVsYXRpb25MaXN0ZW5lclN5bmMjc2ltdWxhdGlvbkNoYW5nZWRTeW5jKG9yZy5lY2xpcHNlLnN0ZW0uam9icy5zaW11bGF0aW9uLlNpbXVsYXRpb25FdmVudCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBzaW11bGF0aW9uQ2hhbmdlZFN5bmMoU2ltdWxhdGlvbkV2ZW50IGV2ZW50KSAKKwl7CisJCWZpcmVTaW11bGF0aW9uRXZlbnQoZXZlbnQpOworCX0KKworCS8qIChub24tSmF2YWRvYykKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uam9icy5zaW11bGF0aW9uLklTaW11bGF0aW9uTGlzdGVuZXIjc2ltdWxhdGlvbkNoYW5nZWQob3JnLmVjbGlwc2Uuc3RlbS5qb2JzLnNpbXVsYXRpb24uU2ltdWxhdGlvbkV2ZW50KQorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIHNpbXVsYXRpb25DaGFuZ2VkKFNpbXVsYXRpb25FdmVudCBldmVudCkgCisJeworCQlmaXJlU2ltdWxhdGlvbkV2ZW50KGV2ZW50KTsKKwl9CisKKwkvKioKKwkgKiBkaXNhc3NvY2lhdGVzIGFkYXB0ZXIgZnJvbSBFTUYgbGlzdGVuZXJzCisJICovCisJdm9pZCBkZXN0cm95KCkgeworCQlzZXRUYXJnZXQobnVsbCk7CisJCWxvZ2dlci5lQWRhcHRlcnMoKS5yZW1vdmUodGhpcyk7CisJCWxvZ2dlciA9IG51bGw7CisJCXNpbXVsYXRpb24gPSBudWxsOworCX0KK30KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2xvZ2dlcnMvbWFuYWdlci9TaW11bGF0aW9uTG9nZ2VyTWFuYWdlci5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vbG9nZ2Vycy9tYW5hZ2VyL1NpbXVsYXRpb25Mb2dnZXJNYW5hZ2VyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjBmN2RhZQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2xvZ2dlcnMvbWFuYWdlci9TaW11bGF0aW9uTG9nZ2VyTWFuYWdlci5qYXZhCkBAIC0wLDAgKzEsMjM0IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDExIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzLm1hbmFnZXI7CisKK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OworaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOworaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uczsKK2ltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKK2ltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7CitpbXBvcnQgamF2YS51dGlsLkxpbmtlZExpc3Q7CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CitpbXBvcnQgamF2YS51dGlsLk1hcDsKK2ltcG9ydCBqYXZhLnV0aWwuY29uY3VycmVudC5Db3B5T25Xcml0ZUFycmF5TGlzdDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS51dGlsLkVjb3JlVXRpbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubG9nZ2VyLkxvZ2dlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmpvYnMuc2ltdWxhdGlvbi5JU2ltdWxhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmpvYnMuc2ltdWxhdGlvbi5JU2ltdWxhdGlvbk1hbmFnZXJMaXN0ZW5lclN5bmM7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5qb2JzLnNpbXVsYXRpb24uU2ltdWxhdGlvbk1hbmFnZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5qb2JzLnNpbXVsYXRpb24uU2ltdWxhdGlvbk1hbmFnZXJFdmVudDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMuQXN5bmNocm9ub3VzTG9nZ2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy5MT0dHRVJfRVZFTlRTOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy5TaW11bGF0aW9uTG9nZ2VyOworCisvKioKKyAqIFNlcnZpY2UgdG8gbWFuYWdlIHRoZSBsb2dnaW5nIG9mIFNURU0gU2ltdWxhdGlvbnMuICBUaGlzIHNpbmdsZXRvbiBjbGFzcyAKKyAqIGhhbmRsZXMgdGhlIGFkZGl0aW9uIGFuZCByZW1vdmFsIG9mIGxvZ2dlcnMgZm9yIHRoZSBTVEVNIHJ1bnRpbWUuICBUaGUgbG9nZ2VyIG1hbmFnZXIKKyAqICBtb25pdG9ycyB0aGUgU1RFTSBzaW11bGF0aW9uIG1hbmFnZXIgdG8gc3RhcnQvc3RvcCBsb2dnZXJzIGFzIGFwcHJvcHJpYXRlLiAgCisgKiAKKyAqLworcHVibGljIGNsYXNzIFNpbXVsYXRpb25Mb2dnZXJNYW5hZ2VyIGltcGxlbWVudHMgSVNpbXVsYXRpb25NYW5hZ2VyTGlzdGVuZXJTeW5jCit7CisJcHJpdmF0ZSBzdGF0aWMgU2ltdWxhdGlvbkxvZ2dlck1hbmFnZXIgSU5TVEFOQ0U7CisJCisJcHJpdmF0ZSBmaW5hbCBNYXA8SVNpbXVsYXRpb24sIExpc3Q8TG9nZ2VyQWRhcHRlcj4+IGxvZ2dlcnMgPQorCQkJbmV3IEhhc2hNYXA8SVNpbXVsYXRpb24sIExpc3Q8TG9nZ2VyQWRhcHRlcj4+KCk7CisJCisJcHJpdmF0ZSBmaW5hbCBMaXN0PElTaW11bGF0aW9uTG9nZ2VyTWFuYWdlckxpc3RlbmVyPiBsaXN0ZW5lcnMgPSBuZXcgQ29weU9uV3JpdGVBcnJheUxpc3Q8SVNpbXVsYXRpb25Mb2dnZXJNYW5hZ2VyTGlzdGVuZXI+KCk7CisJCisJcHJpdmF0ZSBmaW5hbCBMaXN0PFNpbXVsYXRpb25Mb2dnZXI+IGF1dG9BZGRlZExvZ2dlcnMgPSBuZXcgQ29weU9uV3JpdGVBcnJheUxpc3Q8U2ltdWxhdGlvbkxvZ2dlcj4oKTsKKwkKKwlwcml2YXRlIGZpbmFsIFNpbXVsYXRpb25NYW5hZ2VyIHNpbXVsYXRpb25NYW5hZ2VyOworCQorCXB1YmxpYyBzeW5jaHJvbml6ZWQgc3RhdGljIFNpbXVsYXRpb25Mb2dnZXJNYW5hZ2VyIGdldE1hbmFnZXIoKQorCXsKKwkJaWYgKG51bGwgPT0gSU5TVEFOQ0UpIHsKKwkJCUlOU1RBTkNFID0gbmV3IFNpbXVsYXRpb25Mb2dnZXJNYW5hZ2VyKCk7CisJCX0KKwkJCisJCXJldHVybiBJTlNUQU5DRTsKKwl9CisJCisJcHVibGljIENvbGxlY3Rpb248SVNpbXVsYXRpb24+IGdldEFjdGl2ZVNpbXVsYXRpb25zKCkKKwl7CisJCXJldHVybiBDb2xsZWN0aW9ucy51bm1vZGlmaWFibGVDb2xsZWN0aW9uKGxvZ2dlcnMua2V5U2V0KCkpOworCX0KKwkKKwlwdWJsaWMgdm9pZCBhZGRBdXRvQWRkZWRMb2dnZXIoU2ltdWxhdGlvbkxvZ2dlciBsb2dnZXIpCisJeworCQlhdXRvQWRkZWRMb2dnZXJzLmFkZChsb2dnZXIpOworCX0KKwkKKwlwdWJsaWMgdm9pZCByZW1vdmVBdXRvQWRkZWRMb2dnZXIoU2ltdWxhdGlvbkxvZ2dlciBsb2dnZXIpCisJeworCQlhdXRvQWRkZWRMb2dnZXJzLnJlbW92ZShsb2dnZXIpOworCX0KKwkKKwlwcml2YXRlIFNpbXVsYXRpb25Mb2dnZXJNYW5hZ2VyKCkKKwl7CisJCXNpbXVsYXRpb25NYW5hZ2VyID0gU2ltdWxhdGlvbk1hbmFnZXIuZ2V0TWFuYWdlcigpOworCQlzdGFydHVwKCk7CisJfQorCQorCQorCXZvaWQgc3RhcnR1cCgpCisJeworCQlzaW11bGF0aW9uTWFuYWdlci5hZGRTaW11bGF0aW9uTWFuYWdlckxpc3RlbmVyU3luYyh0aGlzKTsKKwkJZmlyZUxpc3RlbmVyRXZlbnQoTE9HR0VSX0VWRU5UUy5MT0dHRVJfTUFOQUdFUl9TVEFSVEVELCBudWxsKTsKKwl9CisJCisJcHVibGljIENvbGxlY3Rpb248U2ltdWxhdGlvbkxvZ2dlcj4gZ2V0TG9nZ2Vyc0ZvclNpbXVsYXRpb24oSVNpbXVsYXRpb24gc2ltdWxhdGlvbikKKwl7CisJCWlmIChzaW11bGF0aW9uID09IG51bGwpIHsKKwkJCXJldHVybiBudWxsOworCQl9CisJCUxpc3Q8TG9nZ2VyQWRhcHRlcj4gYWRhcHRlcnMgPSBsb2dnZXJzLmdldChzaW11bGF0aW9uKTsKKwkJCisJCUxpc3Q8U2ltdWxhdGlvbkxvZ2dlcj4gbG9nZ2VyczIgPSBuZXcgQXJyYXlMaXN0PFNpbXVsYXRpb25Mb2dnZXI+KCk7CisJCWlmIChhZGFwdGVycyAhPSBudWxsKSB7CisJCQlmb3IgKExvZ2dlckFkYXB0ZXIgYWRhcHRlciA6IGFkYXB0ZXJzKSB7CisJCQkJbG9nZ2VyczIuYWRkKGFkYXB0ZXIuZ2V0TG9nZ2VyKCkpOworCQkJfQorCQl9CisJCQorCQlyZXR1cm4gQ29sbGVjdGlvbnMudW5tb2RpZmlhYmxlQ29sbGVjdGlvbihsb2dnZXJzMik7CisJfQorCQorCQorCXB1YmxpYyB2b2lkIGFkZExpc3RlbmVyKElTaW11bGF0aW9uTG9nZ2VyTWFuYWdlckxpc3RlbmVyIGxpc3RlbmVyKQorCXsKKwkJbGlzdGVuZXJzLmFkZChsaXN0ZW5lcik7CisJfQorCQorCXB1YmxpYyB2b2lkIHJlbW92ZUxpc3RlbmVyKElTaW11bGF0aW9uTG9nZ2VyTWFuYWdlckxpc3RlbmVyIGxpc3RlbmVyKQorCXsKKwkJbGlzdGVuZXJzLnJlbW92ZShsaXN0ZW5lcik7CisJfQorCQorCXByb3RlY3RlZCB2b2lkIGZpcmVMaXN0ZW5lckV2ZW50KExPR0dFUl9FVkVOVFMgZXZlbnQsIE9iamVjdFtdIHRhcmdldHMpCisJeworCQlmb3IgKElTaW11bGF0aW9uTG9nZ2VyTWFuYWdlckxpc3RlbmVyIGxpc3RlbmVyIDogbGlzdGVuZXJzKSB7CisJCQlsaXN0ZW5lci5zaW11bGF0aW9uTG9nZ2VyRXZlbnQoZXZlbnQsIHRhcmdldHMpOworCQl9CisJfQorCQorCQorCXB1YmxpYyB2b2lkIHNodXRkb3duKCkKKwl7CisJCUxpc3Q8SVNpbXVsYXRpb24+IHRlbXBMaXN0ID0gbmV3IExpbmtlZExpc3Q8SVNpbXVsYXRpb24+KCk7CisJCXRlbXBMaXN0LmFkZEFsbChsb2dnZXJzLmtleVNldCgpKTsKKwkJCisJCWZvciAoSVNpbXVsYXRpb24gc2ltdWxhdGlvbiA6IHRlbXBMaXN0KSB7CisJCQloYW5kbGVSZW1vdmVkU2ltdWxhdGlvbihzaW11bGF0aW9uKTsKKwkJfQorCisJCXRlbXBMaXN0LmNsZWFyKCk7CisJCQorCQlmaXJlTGlzdGVuZXJFdmVudChMT0dHRVJfRVZFTlRTLkxPR0dFUl9NQU5BR0VSX1NUT1BQRUQsIG51bGwpOworCQlsaXN0ZW5lcnMuY2xlYXIoKTsKKwl9CisJCisJCisJcHVibGljIHZvaWQgc2ltdWxhdGlvbnNDaGFuZ2VkU3luYyhTaW11bGF0aW9uTWFuYWdlckV2ZW50IGV2ZW50KSAKKwl7CQkJCisJCWZvciAoSVNpbXVsYXRpb24gcmVtb3ZlZFNpbXVsYXRpb24gOiBldmVudC5nZXRTaW11bGF0aW9uc1JlbW92ZWQoKSkgeworCQkJaGFuZGxlUmVtb3ZlZFNpbXVsYXRpb24ocmVtb3ZlZFNpbXVsYXRpb24pOworCQl9CisJCQorCQlpZiAoZXZlbnQuZ2V0U2ltdWxhdGlvbnNSZW1vdmVkKCkubGVuZ3RoID4gMCkgeworCQkJZmlyZUxpc3RlbmVyRXZlbnQoTE9HR0VSX0VWRU5UUy5TSU1VTEFUSU9OU19SRU1PVkVELCBldmVudC5nZXRTaW11bGF0aW9uc1JlbW92ZWQoKSk7CisJCX0KKwkJCisJCWZvciAoSVNpbXVsYXRpb24gYWRkZWRTaW11bGF0aW9uIDogZXZlbnQuZ2V0U2ltdWxhdGlvbnNBZGRlZCgpKSB7CisJCQloYW5kbGVBZGRlZFNpbXVsYXRpb24oYWRkZWRTaW11bGF0aW9uKTsKKwkJfQorCQkKKwkJaWYgKGV2ZW50LmdldFNpbXVsYXRpb25zQWRkZWQoKS5sZW5ndGggPiAwKSB7CisJCQlmaXJlTGlzdGVuZXJFdmVudChMT0dHRVJfRVZFTlRTLlNJTVVMQVRJT05TX0FEREVELCBldmVudC5nZXRTaW11bGF0aW9uc0FkZGVkKCkpOworCQl9CisKKwl9CisJCisJcHJpdmF0ZSBMb2dnZXJBZGFwdGVyIGhhbmRsZUFkZGVkTG9nZ2VyKElTaW11bGF0aW9uIHNpbXVsYXRpb24sIFNpbXVsYXRpb25Mb2dnZXIgbG9nZ2VyKQorCXsKKwkJTG9nZ2VyQWRhcHRlciB3cmFwcGVyID0gbmV3IExvZ2dlckFkYXB0ZXIoc2ltdWxhdGlvbiwgKFNpbXVsYXRpb25Mb2dnZXIpRWNvcmVVdGlsLmNvcHkobG9nZ2VyKSk7CQkJCisJCXdyYXBwZXIuZmlyZUxvZ2dlckV2ZW50KExPR0dFUl9FVkVOVFMuTE9HR0VSX1NUQVJURUQpOworCQkKKwkJaWYgKGxvZ2dlciBpbnN0YW5jZW9mIEFzeW5jaHJvbm91c0xvZ2dlcikgeworCQkJc2ltdWxhdGlvbi5hZGRTaW11bGF0aW9uTGlzdGVuZXIod3JhcHBlcik7CisJCX0gZWxzZSB7CisJCQlzaW11bGF0aW9uLmFkZFNpbXVsYXRpb25MaXN0ZW5lclN5bmMod3JhcHBlcik7CisJCX0KKwkJCisJCXJldHVybiB3cmFwcGVyOworCX0KKwkKKwkKKwlwdWJsaWMgdm9pZCBhZGRMb2dnZXJUb1NpbXVsYXRpb24oSVNpbXVsYXRpb24gc2ltdWxhdGlvbiwgU2ltdWxhdGlvbkxvZ2dlciBsb2dnZXIpCisJeworCQlpZiAoc2ltdWxhdGlvbiAhPSBudWxsICYmIGxvZ2dlciAhPSBudWxsKSB7CisJCQlMaXN0PExvZ2dlckFkYXB0ZXI+IHNpbXVsYXRpb25Mb2dnZXJzID0gbG9nZ2Vycy5nZXQoc2ltdWxhdGlvbik7CisJCQkKKwkJCWlmIChzaW11bGF0aW9uTG9nZ2VycyA9PSBudWxsKSB7CisJCQkJcmV0dXJuOworCQkJfQorCQkJCisJCQlMb2dnZXJBZGFwdGVyIGFkYXB0ZXIgPSBoYW5kbGVBZGRlZExvZ2dlcihzaW11bGF0aW9uLCBsb2dnZXIpOworCQkJc2ltdWxhdGlvbkxvZ2dlcnMuYWRkKGFkYXB0ZXIpOworCQkJCisJCQlmaXJlTGlzdGVuZXJFdmVudChMT0dHRVJfRVZFTlRTLlNJTVVMQVRJT05TX0FEREVELCBuZXcgT2JqZWN0W10ge2FkYXB0ZXJ9KTsKKwkJCQorCQl9CisJfQorCQorCXByaXZhdGUgdm9pZCBoYW5kbGVBZGRlZFNpbXVsYXRpb24oSVNpbXVsYXRpb24gc2ltdWxhdGlvbikKKwl7CisJCUxpc3Q8TG9nZ2VyQWRhcHRlcj4gc2ltdWxhdGlvbkxvZ2dlcnMgPSBuZXcgQXJyYXlMaXN0PExvZ2dlckFkYXB0ZXI+KCk7CisJCWxvZ2dlcnMucHV0KHNpbXVsYXRpb24sIHNpbXVsYXRpb25Mb2dnZXJzKTsKKwkJCisJCS8vIEZpcnN0IGFkZCBsb2dnZXJzIGRlZmluZWQgaW4gdGhlIHVuZGVybHlpbmcgc2NlbmFyaW8KKwkJZm9yIChMb2dnZXIgbG9nZ2VyIDogc2ltdWxhdGlvbi5nZXRTY2VuYXJpbygpLmdldExvZ2dlcnMoKSkgeworCQkJaWYgKGxvZ2dlciBpbnN0YW5jZW9mIFNpbXVsYXRpb25Mb2dnZXIpIHsKKwkJCQlzaW11bGF0aW9uTG9nZ2Vycy5hZGQoaGFuZGxlQWRkZWRMb2dnZXIoc2ltdWxhdGlvbiwgKFNpbXVsYXRpb25Mb2dnZXIpbG9nZ2VyKSk7CisJCQl9CisJCX0KKworCQkvLyBOZXh0IGFkZCBsb2dnZXJzIGRlZmluZWQgdG8gYmUgYXV0by1hZGRlZCBieSB0aGUgbWFuYWdlcgorCQlmb3IgKFNpbXVsYXRpb25Mb2dnZXIgbG9nZ2VyIDogYXV0b0FkZGVkTG9nZ2VycykgeworCQkJc2ltdWxhdGlvbkxvZ2dlcnMuYWRkKGhhbmRsZUFkZGVkTG9nZ2VyKHNpbXVsYXRpb24sIGxvZ2dlcikpOworCQl9CisJfQorCQorCXByaXZhdGUgdm9pZCBoYW5kbGVSZW1vdmVkU2ltdWxhdGlvbihJU2ltdWxhdGlvbiBzaW11bGF0aW9uKQorCXsKKwkJTGlzdDxMb2dnZXJBZGFwdGVyPiBzaW11bGF0aW9uTG9nZ2VycyA9IGxvZ2dlcnMuZ2V0KHNpbXVsYXRpb24pOworCQlpZiAoc2ltdWxhdGlvbkxvZ2dlcnMgIT0gbnVsbCkgeworCQkJCisJCQlzeW5jaHJvbml6ZWQgKHNpbXVsYXRpb25Mb2dnZXJzKSB7CisJCQkJZm9yIChJdGVyYXRvcjxMb2dnZXJBZGFwdGVyPiBpdGVyID0gc2ltdWxhdGlvbkxvZ2dlcnMuaXRlcmF0b3IoKTsgaXRlci5oYXNOZXh0KCk7ICkgeworCQkJCQlMb2dnZXJBZGFwdGVyIHdyYXBwZXIgPSBpdGVyLm5leHQoKTsKKwkJCQkJc2ltdWxhdGlvbi5yZW1vdmVTaW11bGF0aW9uTGlzdGVuZXIod3JhcHBlcik7CisJCQkJCXNpbXVsYXRpb24ucmVtb3ZlU2ltdWxhdGlvbkxpc3RlbmVyU3luYyh3cmFwcGVyKTsKKwkJCQkJd3JhcHBlci5maXJlTG9nZ2VyRXZlbnQoTE9HR0VSX0VWRU5UUy5MT0dHRVJfU1RPUFBFRCk7CisJCQkJCXdyYXBwZXIuZGVzdHJveSgpOworCQkJCQlpdGVyLnJlbW92ZSgpOworCQkJCQkKKwkJCQkJCisJCQkJCVN5c3RlbS5vdXQucHJpbnRsbigiUmVtb3ZlZCBsb2dnZXIgIisgd3JhcHBlci5nZXRMb2dnZXIoKSArIiBmb3IgIisgc2ltdWxhdGlvbik7CisJCQkJfQorCQkJfQorCisJCQlsb2dnZXJzLnJlbW92ZShzaW11bGF0aW9uKTsKKwkJfQorCX0KKwkKK30KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2xvZ2dlcnMvcHJlc2VudGF0aW9uL1NpbXVsYXRpb25Mb2dnZXJBY3Rpb25CYXJDb250cmlidXRvci5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vbG9nZ2Vycy9wcmVzZW50YXRpb24vU2ltdWxhdGlvbkxvZ2dlckFjdGlvbkJhckNvbnRyaWJ1dG9yLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzFhODQyZQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2xvZ2dlcnMvcHJlc2VudGF0aW9uL1NpbXVsYXRpb25Mb2dnZXJBY3Rpb25CYXJDb250cmlidXRvci5qYXZhCkBAIC0wLDAgKzEsNDU1IEBACisvKioKKyAqIDxjb3B5cmlnaHQ+CisgKiA8L2NvcHlyaWdodD4KKyAqCisgKiAkSWQkCisgKi8KK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzLnByZXNlbnRhdGlvbjsKKworaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7CitpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnVpLmFjdGlvbi5Xb3JrYmVuY2hXaW5kb3dBY3Rpb25EZWxlZ2F0ZTsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udWkudmlld2VyLklWaWV3ZXJQcm92aWRlcjsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LmRvbWFpbi5FZGl0aW5nRG9tYWluOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LmRvbWFpbi5JRWRpdGluZ0RvbWFpblByb3ZpZGVyOworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkuYWN0aW9uLkNvbnRyb2xBY3Rpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkuYWN0aW9uLkNyZWF0ZUNoaWxkQWN0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmFjdGlvbi5DcmVhdGVTaWJsaW5nQWN0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmFjdGlvbi5FZGl0aW5nRG9tYWluQWN0aW9uQmFyQ29udHJpYnV0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkuYWN0aW9uLkxvYWRSZXNvdXJjZUFjdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5hY3Rpb24uVmFsaWRhdGVBY3Rpb247CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uQWN0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5BY3Rpb25Db250cmlidXRpb25JdGVtOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JQWN0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JQ29udHJpYnV0aW9uSXRlbTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSUNvbnRyaWJ1dGlvbk1hbmFnZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklNZW51TGlzdGVuZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklNZW51TWFuYWdlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSVRvb2xCYXJNYW5hZ2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5NZW51TWFuYWdlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uU2VwYXJhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5TdWJDb250cmlidXRpb25JdGVtOworCitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb25Qcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTdHJ1Y3R1cmVkU2VsZWN0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuU2VsZWN0aW9uQ2hhbmdlZEV2ZW50OworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuU3RydWN0dXJlZFNlbGVjdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlZpZXdlcjsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLndpemFyZC5XaXphcmREaWFsb2c7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMucHJvdmlkZXIuU2ltdWxhdGlvbkxvZ2dlckVkaXRQbHVnaW47CisKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5JRWRpdG9yUGFydDsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5QYXJ0SW5pdEV4Y2VwdGlvbjsKKworLyoqCisgKiBUaGlzIGlzIHRoZSBhY3Rpb24gYmFyIGNvbnRyaWJ1dG9yIGZvciB0aGUgU2ltdWxhdGlvbkxvZ2dlciBtb2RlbCBlZGl0b3IuCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBTaW11bGF0aW9uTG9nZ2VyQWN0aW9uQmFyQ29udHJpYnV0b3IKKwlleHRlbmRzIEVkaXRpbmdEb21haW5BY3Rpb25CYXJDb250cmlidXRvcgorCWltcGxlbWVudHMgSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lciB7CisJLyoqCisJICogQWN0aW9uIHRvIGNyZWF0ZSBvYmplY3RzIGZyb20gdGhlIFNpbXVsYXRpb25Mb2dnZXIgbW9kZWwuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHN0YXRpYyBjbGFzcyBOZXdBY3Rpb24gZXh0ZW5kcyBXb3JrYmVuY2hXaW5kb3dBY3Rpb25EZWxlZ2F0ZSB7CisJCS8qKgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnVpLklBY3Rpb25EZWxlZ2F0ZSNydW4ob3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklBY3Rpb24pCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlwdWJsaWMgdm9pZCBydW4oSUFjdGlvbiBhY3Rpb24pIHsKKwkJCVNpbXVsYXRpb25Mb2dnZXJNb2RlbFdpemFyZCB3aXphcmQgPSBuZXcgU2ltdWxhdGlvbkxvZ2dlck1vZGVsV2l6YXJkKCk7CisJCQl3aXphcmQuaW5pdChnZXRXaW5kb3coKS5nZXRXb3JrYmVuY2goKSwgU3RydWN0dXJlZFNlbGVjdGlvbi5FTVBUWSk7CisJCQlXaXphcmREaWFsb2cgd2l6YXJkRGlhbG9nID0gbmV3IFdpemFyZERpYWxvZyhnZXRXaW5kb3coKS5nZXRTaGVsbCgpLCB3aXphcmQpOworCQkJd2l6YXJkRGlhbG9nLm9wZW4oKTsKKwkJfQorCX0KKworCS8qKgorCSAqIFRoaXMga2VlcHMgdHJhY2sgb2YgdGhlIGFjdGl2ZSBlZGl0b3IuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIElFZGl0b3JQYXJ0IGFjdGl2ZUVkaXRvclBhcnQ7CisKKwkvKioKKwkgKiBUaGlzIGtlZXBzIHRyYWNrIG9mIHRoZSBjdXJyZW50IHNlbGVjdGlvbiBwcm92aWRlci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgSVNlbGVjdGlvblByb3ZpZGVyIHNlbGVjdGlvblByb3ZpZGVyOworCisJLyoqCisJICogVGhpcyBhY3Rpb24gb3BlbnMgdGhlIFByb3BlcnRpZXMgdmlldy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgSUFjdGlvbiBzaG93UHJvcGVydGllc1ZpZXdBY3Rpb24gPQorCQluZXcgQWN0aW9uKFNpbXVsYXRpb25Mb2dnZXJFZGl0UGx1Z2luLklOU1RBTkNFLmdldFN0cmluZygiX1VJX1Nob3dQcm9wZXJ0aWVzVmlld19tZW51X2l0ZW0iKSkgeworCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgdm9pZCBydW4oKSB7CisJCQkJdHJ5IHsKKwkJCQkJZ2V0UGFnZSgpLnNob3dWaWV3KCJvcmcuZWNsaXBzZS51aS52aWV3cy5Qcm9wZXJ0eVNoZWV0Iik7CisJCQkJfQorCQkJCWNhdGNoIChQYXJ0SW5pdEV4Y2VwdGlvbiBleGNlcHRpb24pIHsKKwkJCQkJU2ltdWxhdGlvbkxvZ2dlckVkaXRQbHVnaW4uSU5TVEFOQ0UubG9nKGV4Y2VwdGlvbik7CisJCQkJfQorCQkJfQorCQl9OworCisJLyoqCisJICogVGhpcyBhY3Rpb24gcmVmcmVzaGVzIHRoZSB2aWV3ZXIgb2YgdGhlIGN1cnJlbnQgZWRpdG9yIGlmIHRoZSBlZGl0b3IKKwkgKiBpbXBsZW1lbnRzIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnVpLnZpZXdlci5JVmlld2VyUHJvdmlkZXJ9LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBJQWN0aW9uIHJlZnJlc2hWaWV3ZXJBY3Rpb24gPQorCQluZXcgQWN0aW9uKFNpbXVsYXRpb25Mb2dnZXJFZGl0UGx1Z2luLklOU1RBTkNFLmdldFN0cmluZygiX1VJX1JlZnJlc2hWaWV3ZXJfbWVudV9pdGVtIikpIHsKKwkJCUBPdmVycmlkZQorCQkJcHVibGljIGJvb2xlYW4gaXNFbmFibGVkKCkgeworCQkJCXJldHVybiBhY3RpdmVFZGl0b3JQYXJ0IGluc3RhbmNlb2YgSVZpZXdlclByb3ZpZGVyOworCQkJfQorCisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyB2b2lkIHJ1bigpIHsKKwkJCQlpZiAoYWN0aXZlRWRpdG9yUGFydCBpbnN0YW5jZW9mIElWaWV3ZXJQcm92aWRlcikgeworCQkJCQlWaWV3ZXIgdmlld2VyID0gKChJVmlld2VyUHJvdmlkZXIpYWN0aXZlRWRpdG9yUGFydCkuZ2V0Vmlld2VyKCk7CisJCQkJCWlmICh2aWV3ZXIgIT0gbnVsbCkgeworCQkJCQkJdmlld2VyLnJlZnJlc2goKTsKKwkJCQkJfQorCQkJCX0KKwkJCX0KKwkJfTsKKworCS8qKgorCSAqIFRoaXMgd2lsbCBjb250YWluIG9uZSB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkuYWN0aW9uLkNyZWF0ZUNoaWxkQWN0aW9ufSBjb3JyZXNwb25kaW5nIHRvIGVhY2ggZGVzY3JpcHRvcgorCSAqIGdlbmVyYXRlZCBmb3IgdGhlIGN1cnJlbnQgc2VsZWN0aW9uIGJ5IHRoZSBpdGVtIHByb3ZpZGVyLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBDb2xsZWN0aW9uPElBY3Rpb24+IGNyZWF0ZUNoaWxkQWN0aW9uczsKKworCS8qKgorCSAqIFRoaXMgaXMgdGhlIG1lbnUgbWFuYWdlciBpbnRvIHdoaWNoIG1lbnUgY29udHJpYnV0aW9uIGl0ZW1zIHNob3VsZCBiZSBhZGRlZCBmb3IgQ3JlYXRlQ2hpbGQgYWN0aW9ucy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgSU1lbnVNYW5hZ2VyIGNyZWF0ZUNoaWxkTWVudU1hbmFnZXI7CisKKwkvKioKKwkgKiBUaGlzIHdpbGwgY29udGFpbiBvbmUge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmFjdGlvbi5DcmVhdGVTaWJsaW5nQWN0aW9ufSBjb3JyZXNwb25kaW5nIHRvIGVhY2ggZGVzY3JpcHRvcgorCSAqIGdlbmVyYXRlZCBmb3IgdGhlIGN1cnJlbnQgc2VsZWN0aW9uIGJ5IHRoZSBpdGVtIHByb3ZpZGVyLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBDb2xsZWN0aW9uPElBY3Rpb24+IGNyZWF0ZVNpYmxpbmdBY3Rpb25zOworCisJLyoqCisJICogVGhpcyBpcyB0aGUgbWVudSBtYW5hZ2VyIGludG8gd2hpY2ggbWVudSBjb250cmlidXRpb24gaXRlbXMgc2hvdWxkIGJlIGFkZGVkIGZvciBDcmVhdGVTaWJsaW5nIGFjdGlvbnMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIElNZW51TWFuYWdlciBjcmVhdGVTaWJsaW5nTWVudU1hbmFnZXI7CisKKwkvKioKKwkgKiBUaGlzIGNyZWF0ZXMgYW4gaW5zdGFuY2Ugb2YgdGhlIGNvbnRyaWJ1dG9yLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBTaW11bGF0aW9uTG9nZ2VyQWN0aW9uQmFyQ29udHJpYnV0b3IoKSB7CisJCXN1cGVyKEFERElUSU9OU19MQVNUX1NUWUxFKTsKKwkJbG9hZFJlc291cmNlQWN0aW9uID0gbmV3IExvYWRSZXNvdXJjZUFjdGlvbigpOworCQl2YWxpZGF0ZUFjdGlvbiA9IG5ldyBWYWxpZGF0ZUFjdGlvbigpOworCQljb250cm9sQWN0aW9uID0gbmV3IENvbnRyb2xBY3Rpb24oKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFkZHMgU2VwYXJhdG9ycyBmb3IgZWRpdG9yIGFkZGl0aW9ucyB0byB0aGUgdG9vbCBiYXIuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgY29udHJpYnV0ZVRvVG9vbEJhcihJVG9vbEJhck1hbmFnZXIgdG9vbEJhck1hbmFnZXIpIHsKKwkJdG9vbEJhck1hbmFnZXIuYWRkKG5ldyBTZXBhcmF0b3IoInNpbXVsYXRpb25sb2dnZXItc2V0dGluZ3MiKSk7CisJCXRvb2xCYXJNYW5hZ2VyLmFkZChuZXcgU2VwYXJhdG9yKCJzaW11bGF0aW9ubG9nZ2VyLWFkZGl0aW9ucyIpKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFkZHMgdG8gdGhlIG1lbnUgYmFyIGEgbWVudSBhbmQgc29tZSBzZXBhcmF0b3JzIGZvciBlZGl0b3IgYWRkaXRpb25zLAorCSAqIGFzIHdlbGwgYXMgdGhlIHN1Yi1tZW51cyBmb3Igb2JqZWN0IGNyZWF0aW9uIGl0ZW1zLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGNvbnRyaWJ1dGVUb01lbnUoSU1lbnVNYW5hZ2VyIG1lbnVNYW5hZ2VyKSB7CisJCXN1cGVyLmNvbnRyaWJ1dGVUb01lbnUobWVudU1hbmFnZXIpOworCisJCUlNZW51TWFuYWdlciBzdWJtZW51TWFuYWdlciA9IG5ldyBNZW51TWFuYWdlcihTaW11bGF0aW9uTG9nZ2VyRWRpdFBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoIl9VSV9TaW11bGF0aW9uTG9nZ2VyRWRpdG9yX21lbnUiKSwgIm9yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vyc01lbnVJRCIpOworCQltZW51TWFuYWdlci5pbnNlcnRBZnRlcigiYWRkaXRpb25zIiwgc3VibWVudU1hbmFnZXIpOworCQlzdWJtZW51TWFuYWdlci5hZGQobmV3IFNlcGFyYXRvcigic2V0dGluZ3MiKSk7CisJCXN1Ym1lbnVNYW5hZ2VyLmFkZChuZXcgU2VwYXJhdG9yKCJhY3Rpb25zIikpOworCQlzdWJtZW51TWFuYWdlci5hZGQobmV3IFNlcGFyYXRvcigiYWRkaXRpb25zIikpOworCQlzdWJtZW51TWFuYWdlci5hZGQobmV3IFNlcGFyYXRvcigiYWRkaXRpb25zLWVuZCIpKTsKKworCQkvLyBQcmVwYXJlIGZvciBDcmVhdGVDaGlsZCBpdGVtIGFkZGl0aW9uIG9yIHJlbW92YWwuCisJCS8vCisJCWNyZWF0ZUNoaWxkTWVudU1hbmFnZXIgPSBuZXcgTWVudU1hbmFnZXIoU2ltdWxhdGlvbkxvZ2dlckVkaXRQbHVnaW4uSU5TVEFOQ0UuZ2V0U3RyaW5nKCJfVUlfQ3JlYXRlQ2hpbGRfbWVudV9pdGVtIikpOworCQlzdWJtZW51TWFuYWdlci5pbnNlcnRCZWZvcmUoImFkZGl0aW9ucyIsIGNyZWF0ZUNoaWxkTWVudU1hbmFnZXIpOworCisJCS8vIFByZXBhcmUgZm9yIENyZWF0ZVNpYmxpbmcgaXRlbSBhZGRpdGlvbiBvciByZW1vdmFsLgorCQkvLworCQljcmVhdGVTaWJsaW5nTWVudU1hbmFnZXIgPSBuZXcgTWVudU1hbmFnZXIoU2ltdWxhdGlvbkxvZ2dlckVkaXRQbHVnaW4uSU5TVEFOQ0UuZ2V0U3RyaW5nKCJfVUlfQ3JlYXRlU2libGluZ19tZW51X2l0ZW0iKSk7CisJCXN1Ym1lbnVNYW5hZ2VyLmluc2VydEJlZm9yZSgiYWRkaXRpb25zIiwgY3JlYXRlU2libGluZ01lbnVNYW5hZ2VyKTsKKworCQkvLyBGb3JjZSBhbiB1cGRhdGUgYmVjYXVzZSBFY2xpcHNlIGhpZGVzIGVtcHR5IG1lbnVzIG5vdy4KKwkJLy8KKwkJc3VibWVudU1hbmFnZXIuYWRkTWVudUxpc3RlbmVyCisJCQkobmV3IElNZW51TGlzdGVuZXIoKSB7CisJCQkJIHB1YmxpYyB2b2lkIG1lbnVBYm91dFRvU2hvdyhJTWVudU1hbmFnZXIgbWVudU1hbmFnZXIpIHsKKwkJCQkJIG1lbnVNYW5hZ2VyLnVwZGF0ZUFsbCh0cnVlKTsKKwkJCQkgfQorCQkJIH0pOworCisJCWFkZEdsb2JhbEFjdGlvbnMoc3VibWVudU1hbmFnZXIpOworCX0KKworCS8qKgorCSAqIFdoZW4gdGhlIGFjdGl2ZSBlZGl0b3IgY2hhbmdlcywgdGhpcyByZW1lbWJlcnMgdGhlIGNoYW5nZSBhbmQgcmVnaXN0ZXJzIHdpdGggaXQgYXMgYSBzZWxlY3Rpb24gcHJvdmlkZXIuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgc2V0QWN0aXZlRWRpdG9yKElFZGl0b3JQYXJ0IHBhcnQpIHsKKwkJc3VwZXIuc2V0QWN0aXZlRWRpdG9yKHBhcnQpOworCQlhY3RpdmVFZGl0b3JQYXJ0ID0gcGFydDsKKworCQkvLyBTd2l0Y2ggdG8gdGhlIG5ldyBzZWxlY3Rpb24gcHJvdmlkZXIuCisJCS8vCisJCWlmIChzZWxlY3Rpb25Qcm92aWRlciAhPSBudWxsKSB7CisJCQlzZWxlY3Rpb25Qcm92aWRlci5yZW1vdmVTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIodGhpcyk7CisJCX0KKwkJaWYgKHBhcnQgPT0gbnVsbCkgeworCQkJc2VsZWN0aW9uUHJvdmlkZXIgPSBudWxsOworCQl9CisJCWVsc2UgeworCQkJc2VsZWN0aW9uUHJvdmlkZXIgPSBwYXJ0LmdldFNpdGUoKS5nZXRTZWxlY3Rpb25Qcm92aWRlcigpOworCQkJc2VsZWN0aW9uUHJvdmlkZXIuYWRkU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyKHRoaXMpOworCisJCQkvLyBGYWtlIGEgc2VsZWN0aW9uIGNoYW5nZWQgZXZlbnQgdG8gdXBkYXRlIHRoZSBtZW51cy4KKwkJCS8vCisJCQlpZiAoc2VsZWN0aW9uUHJvdmlkZXIuZ2V0U2VsZWN0aW9uKCkgIT0gbnVsbCkgeworCQkJCXNlbGVjdGlvbkNoYW5nZWQobmV3IFNlbGVjdGlvbkNoYW5nZWRFdmVudChzZWxlY3Rpb25Qcm92aWRlciwgc2VsZWN0aW9uUHJvdmlkZXIuZ2V0U2VsZWN0aW9uKCkpKTsKKwkJCX0KKwkJfQorCX0KKworCS8qKgorCSAqIFRoaXMgaW1wbGVtZW50cyB7QGxpbmsgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyfSwKKwkgKiBoYW5kbGluZyB7QGxpbmsgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5TZWxlY3Rpb25DaGFuZ2VkRXZlbnR9cyBieSBxdWVyeWluZyBmb3IgdGhlIGNoaWxkcmVuIGFuZCBzaWJsaW5ncworCSAqIHRoYXQgY2FuIGJlIGFkZGVkIHRvIHRoZSBzZWxlY3RlZCBvYmplY3QgYW5kIHVwZGF0aW5nIHRoZSBtZW51cyBhY2NvcmRpbmdseS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZWxlY3Rpb25DaGFuZ2VkKFNlbGVjdGlvbkNoYW5nZWRFdmVudCBldmVudCkgeworCQkvLyBSZW1vdmUgYW55IG1lbnUgaXRlbXMgZm9yIG9sZCBzZWxlY3Rpb24uCisJCS8vCisJCWlmIChjcmVhdGVDaGlsZE1lbnVNYW5hZ2VyICE9IG51bGwpIHsKKwkJCWRlcG9wdWxhdGVNYW5hZ2VyKGNyZWF0ZUNoaWxkTWVudU1hbmFnZXIsIGNyZWF0ZUNoaWxkQWN0aW9ucyk7CisJCX0KKwkJaWYgKGNyZWF0ZVNpYmxpbmdNZW51TWFuYWdlciAhPSBudWxsKSB7CisJCQlkZXBvcHVsYXRlTWFuYWdlcihjcmVhdGVTaWJsaW5nTWVudU1hbmFnZXIsIGNyZWF0ZVNpYmxpbmdBY3Rpb25zKTsKKwkJfQorCisJCS8vIFF1ZXJ5IHRoZSBuZXcgc2VsZWN0aW9uIGZvciBhcHByb3ByaWF0ZSBuZXcgY2hpbGQvc2libGluZyBkZXNjcmlwdG9ycworCQkvLworCQlDb2xsZWN0aW9uPD8+IG5ld0NoaWxkRGVzY3JpcHRvcnMgPSBudWxsOworCQlDb2xsZWN0aW9uPD8+IG5ld1NpYmxpbmdEZXNjcmlwdG9ycyA9IG51bGw7CisKKwkJSVNlbGVjdGlvbiBzZWxlY3Rpb24gPSBldmVudC5nZXRTZWxlY3Rpb24oKTsKKwkJaWYgKHNlbGVjdGlvbiBpbnN0YW5jZW9mIElTdHJ1Y3R1cmVkU2VsZWN0aW9uICYmICgoSVN0cnVjdHVyZWRTZWxlY3Rpb24pc2VsZWN0aW9uKS5zaXplKCkgPT0gMSkgeworCQkJT2JqZWN0IG9iamVjdCA9ICgoSVN0cnVjdHVyZWRTZWxlY3Rpb24pc2VsZWN0aW9uKS5nZXRGaXJzdEVsZW1lbnQoKTsKKworCQkJRWRpdGluZ0RvbWFpbiBkb21haW4gPSAoKElFZGl0aW5nRG9tYWluUHJvdmlkZXIpYWN0aXZlRWRpdG9yUGFydCkuZ2V0RWRpdGluZ0RvbWFpbigpOworCisJCQluZXdDaGlsZERlc2NyaXB0b3JzID0gZG9tYWluLmdldE5ld0NoaWxkRGVzY3JpcHRvcnMob2JqZWN0LCBudWxsKTsKKwkJCW5ld1NpYmxpbmdEZXNjcmlwdG9ycyA9IGRvbWFpbi5nZXROZXdDaGlsZERlc2NyaXB0b3JzKG51bGwsIG9iamVjdCk7CisJCX0KKworCQkvLyBHZW5lcmF0ZSBhY3Rpb25zIGZvciBzZWxlY3Rpb247IHBvcHVsYXRlIGFuZCByZWRyYXcgdGhlIG1lbnVzLgorCQkvLworCQljcmVhdGVDaGlsZEFjdGlvbnMgPSBnZW5lcmF0ZUNyZWF0ZUNoaWxkQWN0aW9ucyhuZXdDaGlsZERlc2NyaXB0b3JzLCBzZWxlY3Rpb24pOworCQljcmVhdGVTaWJsaW5nQWN0aW9ucyA9IGdlbmVyYXRlQ3JlYXRlU2libGluZ0FjdGlvbnMobmV3U2libGluZ0Rlc2NyaXB0b3JzLCBzZWxlY3Rpb24pOworCisJCWlmIChjcmVhdGVDaGlsZE1lbnVNYW5hZ2VyICE9IG51bGwpIHsKKwkJCXBvcHVsYXRlTWFuYWdlcihjcmVhdGVDaGlsZE1lbnVNYW5hZ2VyLCBjcmVhdGVDaGlsZEFjdGlvbnMsIG51bGwpOworCQkJY3JlYXRlQ2hpbGRNZW51TWFuYWdlci51cGRhdGUodHJ1ZSk7CisJCX0KKwkJaWYgKGNyZWF0ZVNpYmxpbmdNZW51TWFuYWdlciAhPSBudWxsKSB7CisJCQlwb3B1bGF0ZU1hbmFnZXIoY3JlYXRlU2libGluZ01lbnVNYW5hZ2VyLCBjcmVhdGVTaWJsaW5nQWN0aW9ucywgbnVsbCk7CisJCQljcmVhdGVTaWJsaW5nTWVudU1hbmFnZXIudXBkYXRlKHRydWUpOworCQl9CisJfQorCisJLyoqCisJICogVGhpcyBnZW5lcmF0ZXMgYSB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkuYWN0aW9uLkNyZWF0ZUNoaWxkQWN0aW9ufSBmb3IgZWFjaCBvYmplY3QgaW4gPGNvZGU+ZGVzY3JpcHRvcnM8L2NvZGU+LAorCSAqIGFuZCByZXR1cm5zIHRoZSBjb2xsZWN0aW9uIG9mIHRoZXNlIGFjdGlvbnMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIENvbGxlY3Rpb248SUFjdGlvbj4gZ2VuZXJhdGVDcmVhdGVDaGlsZEFjdGlvbnMoQ29sbGVjdGlvbjw/PiBkZXNjcmlwdG9ycywgSVNlbGVjdGlvbiBzZWxlY3Rpb24pIHsKKwkJQ29sbGVjdGlvbjxJQWN0aW9uPiBhY3Rpb25zID0gbmV3IEFycmF5TGlzdDxJQWN0aW9uPigpOworCQlpZiAoZGVzY3JpcHRvcnMgIT0gbnVsbCkgeworCQkJZm9yIChPYmplY3QgZGVzY3JpcHRvciA6IGRlc2NyaXB0b3JzKSB7CisJCQkJYWN0aW9ucy5hZGQobmV3IENyZWF0ZUNoaWxkQWN0aW9uKGFjdGl2ZUVkaXRvclBhcnQsIHNlbGVjdGlvbiwgZGVzY3JpcHRvcikpOworCQkJfQorCQl9CisJCXJldHVybiBhY3Rpb25zOworCX0KKworCS8qKgorCSAqIFRoaXMgZ2VuZXJhdGVzIGEge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmFjdGlvbi5DcmVhdGVTaWJsaW5nQWN0aW9ufSBmb3IgZWFjaCBvYmplY3QgaW4gPGNvZGU+ZGVzY3JpcHRvcnM8L2NvZGU+LAorCSAqIGFuZCByZXR1cm5zIHRoZSBjb2xsZWN0aW9uIG9mIHRoZXNlIGFjdGlvbnMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIENvbGxlY3Rpb248SUFjdGlvbj4gZ2VuZXJhdGVDcmVhdGVTaWJsaW5nQWN0aW9ucyhDb2xsZWN0aW9uPD8+IGRlc2NyaXB0b3JzLCBJU2VsZWN0aW9uIHNlbGVjdGlvbikgeworCQlDb2xsZWN0aW9uPElBY3Rpb24+IGFjdGlvbnMgPSBuZXcgQXJyYXlMaXN0PElBY3Rpb24+KCk7CisJCWlmIChkZXNjcmlwdG9ycyAhPSBudWxsKSB7CisJCQlmb3IgKE9iamVjdCBkZXNjcmlwdG9yIDogZGVzY3JpcHRvcnMpIHsKKwkJCQlhY3Rpb25zLmFkZChuZXcgQ3JlYXRlU2libGluZ0FjdGlvbihhY3RpdmVFZGl0b3JQYXJ0LCBzZWxlY3Rpb24sIGRlc2NyaXB0b3IpKTsKKwkJCX0KKwkJfQorCQlyZXR1cm4gYWN0aW9uczsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHBvcHVsYXRlcyB0aGUgc3BlY2lmaWVkIDxjb2RlPm1hbmFnZXI8L2NvZGU+IHdpdGgge0BsaW5rIG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5BY3Rpb25Db250cmlidXRpb25JdGVtfXMKKwkgKiBiYXNlZCBvbiB0aGUge0BsaW5rIG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JQWN0aW9ufXMgY29udGFpbmVkIGluIHRoZSA8Y29kZT5hY3Rpb25zPC9jb2RlPiBjb2xsZWN0aW9uLAorCSAqIGJ5IGluc2VydGluZyB0aGVtIGJlZm9yZSB0aGUgc3BlY2lmaWVkIGNvbnRyaWJ1dGlvbiBpdGVtIDxjb2RlPmNvbnRyaWJ1dGlvbklEPC9jb2RlPi4KKwkgKiBJZiA8Y29kZT5jb250cmlidXRpb25JRDwvY29kZT4gaXMgPGNvZGU+bnVsbDwvY29kZT4sIHRoZXkgYXJlIHNpbXBseSBhZGRlZC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBwb3B1bGF0ZU1hbmFnZXIoSUNvbnRyaWJ1dGlvbk1hbmFnZXIgbWFuYWdlciwgQ29sbGVjdGlvbjw/IGV4dGVuZHMgSUFjdGlvbj4gYWN0aW9ucywgU3RyaW5nIGNvbnRyaWJ1dGlvbklEKSB7CisJCWlmIChhY3Rpb25zICE9IG51bGwpIHsKKwkJCWZvciAoSUFjdGlvbiBhY3Rpb24gOiBhY3Rpb25zKSB7CisJCQkJaWYgKGNvbnRyaWJ1dGlvbklEICE9IG51bGwpIHsKKwkJCQkJbWFuYWdlci5pbnNlcnRCZWZvcmUoY29udHJpYnV0aW9uSUQsIGFjdGlvbik7CisJCQkJfQorCQkJCWVsc2UgeworCQkJCQltYW5hZ2VyLmFkZChhY3Rpb24pOworCQkJCX0KKwkJCX0KKwkJfQorCX0KKwkJCisJLyoqCisJICogVGhpcyByZW1vdmVzIGZyb20gdGhlIHNwZWNpZmllZCA8Y29kZT5tYW5hZ2VyPC9jb2RlPiBhbGwge0BsaW5rIG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5BY3Rpb25Db250cmlidXRpb25JdGVtfXMKKwkgKiBiYXNlZCBvbiB0aGUge0BsaW5rIG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JQWN0aW9ufXMgY29udGFpbmVkIGluIHRoZSA8Y29kZT5hY3Rpb25zPC9jb2RlPiBjb2xsZWN0aW9uLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIGRlcG9wdWxhdGVNYW5hZ2VyKElDb250cmlidXRpb25NYW5hZ2VyIG1hbmFnZXIsIENvbGxlY3Rpb248PyBleHRlbmRzIElBY3Rpb24+IGFjdGlvbnMpIHsKKwkJaWYgKGFjdGlvbnMgIT0gbnVsbCkgeworCQkJSUNvbnRyaWJ1dGlvbkl0ZW1bXSBpdGVtcyA9IG1hbmFnZXIuZ2V0SXRlbXMoKTsKKwkJCWZvciAoaW50IGkgPSAwOyBpIDwgaXRlbXMubGVuZ3RoOyBpKyspIHsKKwkJCQkvLyBMb29rIGludG8gU3ViQ29udHJpYnV0aW9uSXRlbXMKKwkJCQkvLworCQkJCUlDb250cmlidXRpb25JdGVtIGNvbnRyaWJ1dGlvbkl0ZW0gPSBpdGVtc1tpXTsKKwkJCQl3aGlsZSAoY29udHJpYnV0aW9uSXRlbSBpbnN0YW5jZW9mIFN1YkNvbnRyaWJ1dGlvbkl0ZW0pIHsKKwkJCQkJY29udHJpYnV0aW9uSXRlbSA9ICgoU3ViQ29udHJpYnV0aW9uSXRlbSljb250cmlidXRpb25JdGVtKS5nZXRJbm5lckl0ZW0oKTsKKwkJCQl9CisKKwkJCQkvLyBEZWxldGUgdGhlIEFjdGlvbkNvbnRyaWJ1dGlvbkl0ZW1zIHdpdGggbWF0Y2hpbmcgYWN0aW9uLgorCQkJCS8vCisJCQkJaWYgKGNvbnRyaWJ1dGlvbkl0ZW0gaW5zdGFuY2VvZiBBY3Rpb25Db250cmlidXRpb25JdGVtKSB7CisJCQkJCUlBY3Rpb24gYWN0aW9uID0gKChBY3Rpb25Db250cmlidXRpb25JdGVtKWNvbnRyaWJ1dGlvbkl0ZW0pLmdldEFjdGlvbigpOworCQkJCQlpZiAoYWN0aW9ucy5jb250YWlucyhhY3Rpb24pKSB7CisJCQkJCQltYW5hZ2VyLnJlbW92ZShjb250cmlidXRpb25JdGVtKTsKKwkJCQkJfQorCQkJCX0KKwkJCX0KKwkJfQorCX0KKworCS8qKgorCSAqIFRoaXMgcG9wdWxhdGVzIHRoZSBwb3AtdXAgbWVudSBiZWZvcmUgaXQgYXBwZWFycy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBtZW51QWJvdXRUb1Nob3coSU1lbnVNYW5hZ2VyIG1lbnVNYW5hZ2VyKSB7CisJCXN1cGVyLm1lbnVBYm91dFRvU2hvdyhtZW51TWFuYWdlcik7CisJCU1lbnVNYW5hZ2VyIHN1Ym1lbnVNYW5hZ2VyID0gbnVsbDsKKworCQlzdWJtZW51TWFuYWdlciA9IG5ldyBNZW51TWFuYWdlcihTaW11bGF0aW9uTG9nZ2VyRWRpdFBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoIl9VSV9DcmVhdGVDaGlsZF9tZW51X2l0ZW0iKSk7CisJCXBvcHVsYXRlTWFuYWdlcihzdWJtZW51TWFuYWdlciwgY3JlYXRlQ2hpbGRBY3Rpb25zLCBudWxsKTsKKwkJbWVudU1hbmFnZXIuaW5zZXJ0QmVmb3JlKCJlZGl0Iiwgc3VibWVudU1hbmFnZXIpOworCisJCXN1Ym1lbnVNYW5hZ2VyID0gbmV3IE1lbnVNYW5hZ2VyKFNpbXVsYXRpb25Mb2dnZXJFZGl0UGx1Z2luLklOU1RBTkNFLmdldFN0cmluZygiX1VJX0NyZWF0ZVNpYmxpbmdfbWVudV9pdGVtIikpOworCQlwb3B1bGF0ZU1hbmFnZXIoc3VibWVudU1hbmFnZXIsIGNyZWF0ZVNpYmxpbmdBY3Rpb25zLCBudWxsKTsKKwkJbWVudU1hbmFnZXIuaW5zZXJ0QmVmb3JlKCJlZGl0Iiwgc3VibWVudU1hbmFnZXIpOworCX0KKworCS8qKgorCSAqIFRoaXMgaW5zZXJ0cyBnbG9iYWwgYWN0aW9ucyBiZWZvcmUgdGhlICJhZGRpdGlvbnMtZW5kIiBzZXBhcmF0b3IuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgYWRkR2xvYmFsQWN0aW9ucyhJTWVudU1hbmFnZXIgbWVudU1hbmFnZXIpIHsKKwkJbWVudU1hbmFnZXIuaW5zZXJ0QWZ0ZXIoImFkZGl0aW9ucy1lbmQiLCBuZXcgU2VwYXJhdG9yKCJ1aS1hY3Rpb25zIikpOworCQltZW51TWFuYWdlci5pbnNlcnRBZnRlcigidWktYWN0aW9ucyIsIHNob3dQcm9wZXJ0aWVzVmlld0FjdGlvbik7CisKKwkJcmVmcmVzaFZpZXdlckFjdGlvbi5zZXRFbmFibGVkKHJlZnJlc2hWaWV3ZXJBY3Rpb24uaXNFbmFibGVkKCkpOwkJCisJCW1lbnVNYW5hZ2VyLmluc2VydEFmdGVyKCJ1aS1hY3Rpb25zIiwgcmVmcmVzaFZpZXdlckFjdGlvbik7CisKKwkJc3VwZXIuYWRkR2xvYmFsQWN0aW9ucyhtZW51TWFuYWdlcik7CisJfQorCisJLyoqCisJICogVGhpcyBlbnN1cmVzIHRoYXQgYSBkZWxldGUgYWN0aW9uIHdpbGwgY2xlYW4gdXAgYWxsIHJlZmVyZW5jZXMgdG8gZGVsZXRlZCBvYmplY3RzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCBib29sZWFuIHJlbW92ZUFsbFJlZmVyZW5jZXNPbkRlbGV0ZSgpIHsKKwkJcmV0dXJuIHRydWU7CisJfQorCit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vbG9nZ2Vycy9wcmVzZW50YXRpb24vU2ltdWxhdGlvbkxvZ2dlckVkaXRvci5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vbG9nZ2Vycy9wcmVzZW50YXRpb24vU2ltdWxhdGlvbkxvZ2dlckVkaXRvci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEwNzYxYjcKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9sb2dnZXJzL3ByZXNlbnRhdGlvbi9TaW11bGF0aW9uTG9nZ2VyRWRpdG9yLmphdmEKQEAgLTAsMCArMSwxNzE2IEBACisvKioKKyAqIDxjb3B5cmlnaHQ+CisgKiA8L2NvcHlyaWdodD4KKyAqCisgKiAkSWQkCisgKi8KK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzLnByZXNlbnRhdGlvbjsKKworCitpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtOworCitpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbnM7CitpbXBvcnQgamF2YS51dGlsLkV2ZW50T2JqZWN0OworaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOworaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKK2ltcG9ydCBqYXZhLnV0aWwuTGlua2VkSGFzaE1hcDsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuTWFwOworCitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQcm9ncmVzc01vbml0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLk51bGxQcm9ncmVzc01vbml0b3I7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSU1lbnVMaXN0ZW5lcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSU1lbnVNYW5hZ2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JU3RhdHVzTGluZU1hbmFnZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklUb29sQmFyTWFuYWdlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uTWVudU1hbmFnZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLlNlcGFyYXRvcjsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmRpYWxvZ3MuTWVzc2FnZURpYWxvZzsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5kaWFsb2dzLlByb2dyZXNzTW9uaXRvckRpYWxvZzsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuQ29sdW1uV2VpZ2h0RGF0YTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvblByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVN0cnVjdHVyZWRTZWxlY3Rpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5MaXN0Vmlld2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuU2VsZWN0aW9uQ2hhbmdlZEV2ZW50OworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuU3RydWN0dXJlZFNlbGVjdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlN0cnVjdHVyZWRWaWV3ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5UYWJsZUxheW91dDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlRhYmxlVmlld2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuVHJlZVZpZXdlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlZpZXdlcjsKKworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5TV1Q7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuY3VzdG9tLkNUYWJGb2xkZXI7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZG5kLkRORDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZG5kLlRyYW5zZmVyOworCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5Db250cm9sQWRhcHRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLkNvbnRyb2xFdmVudDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ncmFwaGljcy5Qb2ludDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5sYXlvdXQuRmlsbExheW91dDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5NZW51OworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlRhYmxlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlRhYmxlQ29sdW1uOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlRyZWU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuVHJlZUNvbHVtbjsKKworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklBY3Rpb25CYXJzOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklFZGl0b3JJbnB1dDsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5JRWRpdG9yUGFydDsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5JRWRpdG9yU2l0ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5JUGFydExpc3RlbmVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2hQYXJ0OworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLlBhcnRJbml0RXhjZXB0aW9uOworCitpbXBvcnQgb3JnLmVjbGlwc2UudWkucGFydC5NdWx0aVBhZ2VFZGl0b3JQYXJ0OworCitpbXBvcnQgb3JnLmVjbGlwc2UudWkudmlld3MuY29udGVudG91dGxpbmUuQ29udGVudE91dGxpbmU7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkudmlld3MuY29udGVudG91dGxpbmUuQ29udGVudE91dGxpbmVQYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLnZpZXdzLmNvbnRlbnRvdXRsaW5lLklDb250ZW50T3V0bGluZVBhZ2U7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS52aWV3cy5wcm9wZXJ0aWVzLklQcm9wZXJ0eVNoZWV0UGFnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS52aWV3cy5wcm9wZXJ0aWVzLlByb3BlcnR5U2hlZXQ7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkudmlld3MucHJvcGVydGllcy5Qcm9wZXJ0eVNoZWV0UGFnZTsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24uY29tbWFuZC5CYXNpY0NvbW1hbmRTdGFjazsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLmNvbW1hbmQuQ29tbWFuZDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLmNvbW1hbmQuQ29tbWFuZFN0YWNrOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24uY29tbWFuZC5Db21tYW5kU3RhY2tMaXN0ZW5lcjsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LkFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbjsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udWkuVmlld2VyUGFuZTsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udWkuZWRpdG9yLlByb2JsZW1FZGl0b3JQYXJ0OworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51aS52aWV3ZXIuSVZpZXdlclByb3ZpZGVyOworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLkJhc2ljRGlhZ25vc3RpYzsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuRGlhZ25vc3RpYzsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuVVJJOworCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUucmVzb3VyY2UuUmVzb3VyY2U7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUudXRpbC5FQ29udGVudEFkYXB0ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnV0aWwuRWNvcmVVdGlsOworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQuZG9tYWluLkFkYXB0ZXJGYWN0b3J5RWRpdGluZ0RvbWFpbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5kb21haW4uRWRpdGluZ0RvbWFpbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5kb21haW4uSUVkaXRpbmdEb21haW5Qcm92aWRlcjsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkFkYXB0ZXJGYWN0b3J5SXRlbURlbGVnYXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5Db21wb3NlZEFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLlJlZmxlY3RpdmVJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeTsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLnJlc291cmNlLlJlc291cmNlSXRlbVByb3ZpZGVyQWRhcHRlckZhY3Rvcnk7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5hY3Rpb24uRWRpdGluZ0RvbWFpbkFjdGlvbkJhckNvbnRyaWJ1dG9yOworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkuY2VsbGVkaXRvci5BZGFwdGVyRmFjdG9yeVRyZWVFZGl0b3I7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5kbmQuRWRpdGluZ0RvbWFpblZpZXdlckRyb3BBZGFwdGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmRuZC5Mb2NhbFRyYW5zZmVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmRuZC5WaWV3ZXJEcmFnQWRhcHRlcjsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLnByb3ZpZGVyLkFkYXB0ZXJGYWN0b3J5Q29udGVudFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLnByb3ZpZGVyLkFkYXB0ZXJGYWN0b3J5TGFiZWxQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5wcm92aWRlci5VbndyYXBwaW5nU2VsZWN0aW9uUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkudXRpbC5FZGl0VUlVdGlsOworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkudmlldy5FeHRlbmRlZFByb3BlcnR5U2hlZXRQYWdlOworCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzLnByb3ZpZGVyLlNpbXVsYXRpb25Mb2dnZXJJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeTsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udWkuVVJJRWRpdG9ySW5wdXQ7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUucHJvdmlkZXIuRWNvcmVJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeTsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLm9wZXJhdGlvbi5JUnVubmFibGVXaXRoUHJvZ3Jlc3M7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLnByb3ZpZGVyLkNvbW1vbkl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5OworCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLnByb3ZpZGVyLkdyYXBoSXRlbVByb3ZpZGVyQWRhcHRlckZhY3Rvcnk7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubG9nZ2VyLnByb3ZpZGVyLkxvZ2dlckl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5OworCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLnByb3ZpZGVyLk1vZGVsSXRlbVByb3ZpZGVyQWRhcHRlckZhY3Rvcnk7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIucHJvdmlkZXIuTW9kaWZpZXJJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeTsKKworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zY2VuYXJpby5wcm92aWRlci5TY2VuYXJpb0l0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5OworCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNlcXVlbmNlci5wcm92aWRlci5TZXF1ZW5jZXJJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeTsKKworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zb2x2ZXIucHJvdmlkZXIuU29sdmVySXRlbVByb3ZpZGVyQWRhcHRlckZhY3Rvcnk7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMucHJvdmlkZXIuU2ltdWxhdGlvbkxvZ2dlckVkaXRQbHVnaW47CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzLnByb3ZpZGVyLnNpbXVsYXRpb25sb2dnZXJFZGl0b3JBZHZpc29yOworCisKKy8qKgorICogVGhpcyBpcyBhbiBleGFtcGxlIG9mIGEgU2ltdWxhdGlvbkxvZ2dlciBtb2RlbCBlZGl0b3IuCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBTaW11bGF0aW9uTG9nZ2VyRWRpdG9yCisJZXh0ZW5kcyBNdWx0aVBhZ2VFZGl0b3JQYXJ0CisJaW1wbGVtZW50cyBJRWRpdGluZ0RvbWFpblByb3ZpZGVyLCBJU2VsZWN0aW9uUHJvdmlkZXIsIElNZW51TGlzdGVuZXIsIElWaWV3ZXJQcm92aWRlciB7CisJLyoqCisJICogVGhlIGZpbHRlcnMgZm9yIGZpbGUgZXh0ZW5zaW9ucyBzdXBwb3J0ZWQgYnkgdGhlIGVkaXRvci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIExpc3Q8U3RyaW5nPiBGSUxFX0VYVEVOU0lPTl9GSUxURVJTID0gcHJlZml4RXh0ZW5zaW9ucyhTaW11bGF0aW9uTG9nZ2VyTW9kZWxXaXphcmQuRklMRV9FWFRFTlNJT05TLCAiKi4iKTsKKwkKKwkvKioKKwkgKiBSZXR1cm5zIGEgbmV3IHVubW9kaWZpYWJsZSBsaXN0IGNvbnRhaW5pbmcgcHJlZml4ZWQgdmVyc2lvbnMgb2YgdGhlIGV4dGVuc2lvbnMgaW4gdGhlIGdpdmVuIGxpc3QuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJpdmF0ZSBzdGF0aWMgTGlzdDxTdHJpbmc+IHByZWZpeEV4dGVuc2lvbnMoTGlzdDxTdHJpbmc+IGV4dGVuc2lvbnMsIFN0cmluZyBwcmVmaXgpIHsKKwkJTGlzdDxTdHJpbmc+IHJlc3VsdCA9IG5ldyBBcnJheUxpc3Q8U3RyaW5nPigpOworCQlmb3IgKFN0cmluZyBleHRlbnNpb24gOiBleHRlbnNpb25zKSB7CisJCQlyZXN1bHQuYWRkKHByZWZpeCArIGV4dGVuc2lvbik7CisJCX0KKwkJcmV0dXJuIENvbGxlY3Rpb25zLnVubW9kaWZpYWJsZUxpc3QocmVzdWx0KTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGtlZXBzIHRyYWNrIG9mIHRoZSBlZGl0aW5nIGRvbWFpbiB0aGF0IGlzIHVzZWQgdG8gdHJhY2sgYWxsIGNoYW5nZXMgdG8gdGhlIG1vZGVsLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBBZGFwdGVyRmFjdG9yeUVkaXRpbmdEb21haW4gZWRpdGluZ0RvbWFpbjsKKworCS8qKgorCSAqIFRoaXMgaXMgdGhlIG9uZSBhZGFwdGVyIGZhY3RvcnkgdXNlZCBmb3IgcHJvdmlkaW5nIHZpZXdzIG9mIHRoZSBtb2RlbC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgQ29tcG9zZWRBZGFwdGVyRmFjdG9yeSBhZGFwdGVyRmFjdG9yeTsKKworCS8qKgorCSAqIFRoaXMgaXMgdGhlIGNvbnRlbnQgb3V0bGluZSBwYWdlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBJQ29udGVudE91dGxpbmVQYWdlIGNvbnRlbnRPdXRsaW5lUGFnZTsKKworCS8qKgorCSAqIFRoaXMgaXMgYSBrbHVkZ2UuLi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgSVN0YXR1c0xpbmVNYW5hZ2VyIGNvbnRlbnRPdXRsaW5lU3RhdHVzTGluZU1hbmFnZXI7CisKKwkvKioKKwkgKiBUaGlzIGlzIHRoZSBjb250ZW50IG91dGxpbmUgcGFnZSdzIHZpZXdlci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgVHJlZVZpZXdlciBjb250ZW50T3V0bGluZVZpZXdlcjsKKworCS8qKgorCSAqIFRoaXMgaXMgdGhlIHByb3BlcnR5IHNoZWV0IHBhZ2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIFByb3BlcnR5U2hlZXRQYWdlIHByb3BlcnR5U2hlZXRQYWdlOworCisJLyoqCisJICogVGhpcyBpcyB0aGUgdmlld2VyIHRoYXQgc2hhZG93cyB0aGUgc2VsZWN0aW9uIGluIHRoZSBjb250ZW50IG91dGxpbmUuCisJICogVGhlIHBhcmVudCByZWxhdGlvbiBtdXN0IGJlIGNvcnJlY3RseSBkZWZpbmVkIGZvciB0aGlzIHRvIHdvcmsuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIFRyZWVWaWV3ZXIgc2VsZWN0aW9uVmlld2VyOworCisJLyoqCisJICogVGhpcyBpbnZlcnRzIHRoZSByb2xsIG9mIHBhcmVudCBhbmQgY2hpbGQgaW4gdGhlIGNvbnRlbnQgcHJvdmlkZXIgYW5kIHNob3cgcGFyZW50cyBhcyBhIHRyZWUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIFRyZWVWaWV3ZXIgcGFyZW50Vmlld2VyOworCisJLyoqCisJICogVGhpcyBzaG93cyBob3cgYSB0cmVlIHZpZXcgd29ya3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIFRyZWVWaWV3ZXIgdHJlZVZpZXdlcjsKKworCS8qKgorCSAqIFRoaXMgc2hvd3MgaG93IGEgbGlzdCB2aWV3IHdvcmtzLgorCSAqIEEgbGlzdCB2aWV3ZXIgZG9lc24ndCBzdXBwb3J0IGljb25zLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBMaXN0Vmlld2VyIGxpc3RWaWV3ZXI7CisKKwkvKioKKwkgKiBUaGlzIHNob3dzIGhvdyBhIHRhYmxlIHZpZXcgd29ya3MuCisJICogQSB0YWJsZSBjYW4gYmUgdXNlZCBhcyBhIGxpc3Qgd2l0aCBpY29ucy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgVGFibGVWaWV3ZXIgdGFibGVWaWV3ZXI7CisKKwkvKioKKwkgKiBUaGlzIHNob3dzIGhvdyBhIHRyZWUgdmlldyB3aXRoIGNvbHVtbnMgd29ya3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIFRyZWVWaWV3ZXIgdHJlZVZpZXdlcldpdGhDb2x1bW5zOworCisJLyoqCisJICogVGhpcyBrZWVwcyB0cmFjayBvZiB0aGUgYWN0aXZlIHZpZXdlciBwYW5lLCBpbiB0aGUgYm9vay4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgVmlld2VyUGFuZSBjdXJyZW50Vmlld2VyUGFuZTsKKworCS8qKgorCSAqIFRoaXMga2VlcHMgdHJhY2sgb2YgdGhlIGFjdGl2ZSBjb250ZW50IHZpZXdlciwgd2hpY2ggbWF5IGJlIGVpdGhlciBvbmUgb2YgdGhlIHZpZXdlcnMgaW4gdGhlIHBhZ2VzIG9yIHRoZSBjb250ZW50IG91dGxpbmUgdmlld2VyLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBWaWV3ZXIgY3VycmVudFZpZXdlcjsKKworCS8qKgorCSAqIFRoaXMgbGlzdGVucyB0byB3aGljaCBldmVyIHZpZXdlciBpcyBhY3RpdmUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIElTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIgc2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyOworCisJLyoqCisJICogVGhpcyBrZWVwcyB0cmFjayBvZiBhbGwgdGhlIHtAbGluayBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXJ9cyB0aGF0IGFyZSBsaXN0ZW5pbmcgdG8gdGhpcyBlZGl0b3IuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIENvbGxlY3Rpb248SVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcj4gc2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVycyA9IG5ldyBBcnJheUxpc3Q8SVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcj4oKTsKKworCS8qKgorCSAqIFRoaXMga2VlcHMgdHJhY2sgb2YgdGhlIHNlbGVjdGlvbiBvZiB0aGUgZWRpdG9yIGFzIGEgd2hvbGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIElTZWxlY3Rpb24gZWRpdG9yU2VsZWN0aW9uID0gU3RydWN0dXJlZFNlbGVjdGlvbi5FTVBUWTsKKworCS8qKgorCSAqIFRoaXMgbGlzdGVucyBmb3Igd2hlbiB0aGUgb3V0bGluZSBiZWNvbWVzIGFjdGl2ZQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBJUGFydExpc3RlbmVyIHBhcnRMaXN0ZW5lciA9CisJCW5ldyBJUGFydExpc3RlbmVyKCkgeworCQkJcHVibGljIHZvaWQgcGFydEFjdGl2YXRlZChJV29ya2JlbmNoUGFydCBwKSB7CisJCQkJaWYgKHAgaW5zdGFuY2VvZiBDb250ZW50T3V0bGluZSkgeworCQkJCQlpZiAoKChDb250ZW50T3V0bGluZSlwKS5nZXRDdXJyZW50UGFnZSgpID09IGNvbnRlbnRPdXRsaW5lUGFnZSkgeworCQkJCQkJZ2V0QWN0aW9uQmFyQ29udHJpYnV0b3IoKS5zZXRBY3RpdmVFZGl0b3IoU2ltdWxhdGlvbkxvZ2dlckVkaXRvci50aGlzKTsKKworCQkJCQkJc2V0Q3VycmVudFZpZXdlcihjb250ZW50T3V0bGluZVZpZXdlcik7CisJCQkJCX0KKwkJCQl9CisJCQkJZWxzZSBpZiAocCBpbnN0YW5jZW9mIFByb3BlcnR5U2hlZXQpIHsKKwkJCQkJaWYgKCgoUHJvcGVydHlTaGVldClwKS5nZXRDdXJyZW50UGFnZSgpID09IHByb3BlcnR5U2hlZXRQYWdlKSB7CisJCQkJCQlnZXRBY3Rpb25CYXJDb250cmlidXRvcigpLnNldEFjdGl2ZUVkaXRvcihTaW11bGF0aW9uTG9nZ2VyRWRpdG9yLnRoaXMpOworCQkJCQkJaGFuZGxlQWN0aXZhdGUoKTsKKwkJCQkJfQorCQkJCX0KKwkJCQllbHNlIGlmIChwID09IFNpbXVsYXRpb25Mb2dnZXJFZGl0b3IudGhpcykgeworCQkJCQloYW5kbGVBY3RpdmF0ZSgpOworCQkJCX0KKwkJCX0KKwkJCXB1YmxpYyB2b2lkIHBhcnRCcm91Z2h0VG9Ub3AoSVdvcmtiZW5jaFBhcnQgcCkgeworCQkJCS8vIElnbm9yZS4KKwkJCX0KKwkJCXB1YmxpYyB2b2lkIHBhcnRDbG9zZWQoSVdvcmtiZW5jaFBhcnQgcCkgeworCQkJCS8vIElnbm9yZS4KKwkJCX0KKwkJCXB1YmxpYyB2b2lkIHBhcnREZWFjdGl2YXRlZChJV29ya2JlbmNoUGFydCBwKSB7CisJCQkJLy8gSWdub3JlLgorCQkJfQorCQkJcHVibGljIHZvaWQgcGFydE9wZW5lZChJV29ya2JlbmNoUGFydCBwKSB7CisJCQkJLy8gSWdub3JlLgorCQkJfQorCQl9OworCisJLyoqCisJICogUmVzb3VyY2VzIHRoYXQgaGF2ZSBiZWVuIHJlbW92ZWQgc2luY2UgbGFzdCBhY3RpdmF0aW9uLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBDb2xsZWN0aW9uPFJlc291cmNlPiByZW1vdmVkUmVzb3VyY2VzID0gbmV3IEFycmF5TGlzdDxSZXNvdXJjZT4oKTsKKworCS8qKgorCSAqIFJlc291cmNlcyB0aGF0IGhhdmUgYmVlbiBjaGFuZ2VkIHNpbmNlIGxhc3QgYWN0aXZhdGlvbi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgQ29sbGVjdGlvbjxSZXNvdXJjZT4gY2hhbmdlZFJlc291cmNlcyA9IG5ldyBBcnJheUxpc3Q8UmVzb3VyY2U+KCk7CisKKwkvKioKKwkgKiBSZXNvdXJjZXMgdGhhdCBoYXZlIGJlZW4gc2F2ZWQuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIENvbGxlY3Rpb248UmVzb3VyY2U+IHNhdmVkUmVzb3VyY2VzID0gbmV3IEFycmF5TGlzdDxSZXNvdXJjZT4oKTsKKworCS8qKgorCSAqIE1hcCB0byBzdG9yZSB0aGUgZGlhZ25vc3RpYyBhc3NvY2lhdGVkIHdpdGggYSByZXNvdXJjZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgTWFwPFJlc291cmNlLCBEaWFnbm9zdGljPiByZXNvdXJjZVRvRGlhZ25vc3RpY01hcCA9IG5ldyBMaW5rZWRIYXNoTWFwPFJlc291cmNlLCBEaWFnbm9zdGljPigpOworCisJLyoqCisJICogQ29udHJvbHMgd2hldGhlciB0aGUgcHJvYmxlbSBpbmRpY2F0aW9uIHNob3VsZCBiZSB1cGRhdGVkLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBib29sZWFuIHVwZGF0ZVByb2JsZW1JbmRpY2F0aW9uID0gdHJ1ZTsKKworCS8qKgorCSAqIEFkYXB0ZXIgdXNlZCB0byB1cGRhdGUgdGhlIHByb2JsZW0gaW5kaWNhdGlvbiB3aGVuIHJlc291cmNlcyBhcmUgZGVtYW5kZWQgbG9hZGVkLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBFQ29udGVudEFkYXB0ZXIgcHJvYmxlbUluZGljYXRpb25BZGFwdGVyID0gCisJCW5ldyBFQ29udGVudEFkYXB0ZXIoKSB7CisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyB2b2lkIG5vdGlmeUNoYW5nZWQoTm90aWZpY2F0aW9uIG5vdGlmaWNhdGlvbikgeworCQkJCWlmIChub3RpZmljYXRpb24uZ2V0Tm90aWZpZXIoKSBpbnN0YW5jZW9mIFJlc291cmNlKSB7CisJCQkJCXN3aXRjaCAobm90aWZpY2F0aW9uLmdldEZlYXR1cmVJRChSZXNvdXJjZS5jbGFzcykpIHsKKwkJCQkJCWNhc2UgUmVzb3VyY2UuUkVTT1VSQ0VfX0lTX0xPQURFRDoKKwkJCQkJCWNhc2UgUmVzb3VyY2UuUkVTT1VSQ0VfX0VSUk9SUzoKKwkJCQkJCWNhc2UgUmVzb3VyY2UuUkVTT1VSQ0VfX1dBUk5JTkdTOiB7CisJCQkJCQkJUmVzb3VyY2UgcmVzb3VyY2UgPSAoUmVzb3VyY2Upbm90aWZpY2F0aW9uLmdldE5vdGlmaWVyKCk7CisJCQkJCQkJRGlhZ25vc3RpYyBkaWFnbm9zdGljID0gYW5hbHl6ZVJlc291cmNlUHJvYmxlbXMocmVzb3VyY2UsIG51bGwpOworCQkJCQkJCWlmIChkaWFnbm9zdGljLmdldFNldmVyaXR5KCkgIT0gRGlhZ25vc3RpYy5PSykgeworCQkJCQkJCQlyZXNvdXJjZVRvRGlhZ25vc3RpY01hcC5wdXQocmVzb3VyY2UsIGRpYWdub3N0aWMpOworCQkJCQkJCX0KKwkJCQkJCQllbHNlIHsKKwkJCQkJCQkJcmVzb3VyY2VUb0RpYWdub3N0aWNNYXAucmVtb3ZlKHJlc291cmNlKTsKKwkJCQkJCQl9CisKKwkJCQkJCQlpZiAodXBkYXRlUHJvYmxlbUluZGljYXRpb24pIHsKKwkJCQkJCQkJZ2V0U2l0ZSgpLmdldFNoZWxsKCkuZ2V0RGlzcGxheSgpLmFzeW5jRXhlYworCQkJCQkJCQkJKG5ldyBSdW5uYWJsZSgpIHsKKwkJCQkJCQkJCQkgcHVibGljIHZvaWQgcnVuKCkgeworCQkJCQkJCQkJCQkgdXBkYXRlUHJvYmxlbUluZGljYXRpb24oKTsKKwkJCQkJCQkJCQkgfQorCQkJCQkJCQkJIH0pOworCQkJCQkJCX0KKwkJCQkJCQlicmVhazsKKwkJCQkJCX0KKwkJCQkJfQorCQkJCX0KKwkJCQllbHNlIHsKKwkJCQkJc3VwZXIubm90aWZ5Q2hhbmdlZChub3RpZmljYXRpb24pOworCQkJCX0KKwkJCX0KKworCQkJQE92ZXJyaWRlCisJCQlwcm90ZWN0ZWQgdm9pZCBzZXRUYXJnZXQoUmVzb3VyY2UgdGFyZ2V0KSB7CisJCQkJYmFzaWNTZXRUYXJnZXQodGFyZ2V0KTsKKwkJCX0KKworCQkJQE92ZXJyaWRlCisJCQlwcm90ZWN0ZWQgdm9pZCB1bnNldFRhcmdldChSZXNvdXJjZSB0YXJnZXQpIHsKKwkJCQliYXNpY1Vuc2V0VGFyZ2V0KHRhcmdldCk7CisJCQl9CisJCX07CisKKwkvKioKKwkgKiBIYW5kbGVzIGFjdGl2YXRpb24gb2YgdGhlIGVkaXRvciBvciBpdCdzIGFzc29jaWF0ZWQgdmlld3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgaGFuZGxlQWN0aXZhdGUoKSB7CisJCS8vIFJlY29tcHV0ZSB0aGUgcmVhZCBvbmx5IHN0YXRlLgorCQkvLworCQlpZiAoZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVRvUmVhZE9ubHlNYXAoKSAhPSBudWxsKSB7CisJCSAgZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVRvUmVhZE9ubHlNYXAoKS5jbGVhcigpOworCisJCSAgLy8gUmVmcmVzaCBhbnkgYWN0aW9ucyB0aGF0IG1heSBiZWNvbWUgZW5hYmxlZCBvciBkaXNhYmxlZC4KKwkJICAvLworCQkgIHNldFNlbGVjdGlvbihnZXRTZWxlY3Rpb24oKSk7CisJCX0KKworCQlpZiAoIXJlbW92ZWRSZXNvdXJjZXMuaXNFbXB0eSgpKSB7CisJCQlpZiAoaGFuZGxlRGlydHlDb25mbGljdCgpKSB7CisJCQkJZ2V0U2l0ZSgpLmdldFBhZ2UoKS5jbG9zZUVkaXRvcihTaW11bGF0aW9uTG9nZ2VyRWRpdG9yLnRoaXMsIGZhbHNlKTsKKwkJCX0KKwkJCWVsc2UgeworCQkJCXJlbW92ZWRSZXNvdXJjZXMuY2xlYXIoKTsKKwkJCQljaGFuZ2VkUmVzb3VyY2VzLmNsZWFyKCk7CisJCQkJc2F2ZWRSZXNvdXJjZXMuY2xlYXIoKTsKKwkJCX0KKwkJfQorCQllbHNlIGlmICghY2hhbmdlZFJlc291cmNlcy5pc0VtcHR5KCkpIHsKKwkJCWNoYW5nZWRSZXNvdXJjZXMucmVtb3ZlQWxsKHNhdmVkUmVzb3VyY2VzKTsKKwkJCWhhbmRsZUNoYW5nZWRSZXNvdXJjZXMoKTsKKwkJCWNoYW5nZWRSZXNvdXJjZXMuY2xlYXIoKTsKKwkJCXNhdmVkUmVzb3VyY2VzLmNsZWFyKCk7CisJCX0KKwl9CisKKwkvKioKKwkgKiBIYW5kbGVzIHdoYXQgdG8gZG8gd2l0aCBjaGFuZ2VkIHJlc291cmNlcyBvbiBhY3RpdmF0aW9uLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIGhhbmRsZUNoYW5nZWRSZXNvdXJjZXMoKSB7CisJCWlmICghY2hhbmdlZFJlc291cmNlcy5pc0VtcHR5KCkgJiYgKCFpc0RpcnR5KCkgfHwgaGFuZGxlRGlydHlDb25mbGljdCgpKSkgeworCQkJaWYgKGlzRGlydHkoKSkgeworCQkJCWNoYW5nZWRSZXNvdXJjZXMuYWRkQWxsKGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKS5nZXRSZXNvdXJjZXMoKSk7CisJCQl9CisJCQllZGl0aW5nRG9tYWluLmdldENvbW1hbmRTdGFjaygpLmZsdXNoKCk7CisKKwkJCXVwZGF0ZVByb2JsZW1JbmRpY2F0aW9uID0gZmFsc2U7CisJCQlmb3IgKFJlc291cmNlIHJlc291cmNlIDogY2hhbmdlZFJlc291cmNlcykgeworCQkJCWlmIChyZXNvdXJjZS5pc0xvYWRlZCgpKSB7CisJCQkJCXJlc291cmNlLnVubG9hZCgpOworCQkJCQl0cnkgeworCQkJCQkJcmVzb3VyY2UubG9hZChDb2xsZWN0aW9ucy5FTVBUWV9NQVApOworCQkJCQl9CisJCQkJCWNhdGNoIChJT0V4Y2VwdGlvbiBleGNlcHRpb24pIHsKKwkJCQkJCWlmICghcmVzb3VyY2VUb0RpYWdub3N0aWNNYXAuY29udGFpbnNLZXkocmVzb3VyY2UpKSB7CisJCQkJCQkJcmVzb3VyY2VUb0RpYWdub3N0aWNNYXAucHV0KHJlc291cmNlLCBhbmFseXplUmVzb3VyY2VQcm9ibGVtcyhyZXNvdXJjZSwgZXhjZXB0aW9uKSk7CisJCQkJCQl9CisJCQkJCX0KKwkJCQl9CisJCQl9CisKKwkJCWlmIChBZGFwdGVyRmFjdG9yeUVkaXRpbmdEb21haW4uaXNTdGFsZShlZGl0b3JTZWxlY3Rpb24pKSB7CisJCQkJc2V0U2VsZWN0aW9uKFN0cnVjdHVyZWRTZWxlY3Rpb24uRU1QVFkpOworCQkJfQorCisJCQl1cGRhdGVQcm9ibGVtSW5kaWNhdGlvbiA9IHRydWU7CisJCQl1cGRhdGVQcm9ibGVtSW5kaWNhdGlvbigpOworCQl9CisJfQorICAKKwkvKioKKwkgKiBVcGRhdGVzIHRoZSBwcm9ibGVtcyBpbmRpY2F0aW9uIHdpdGggdGhlIGluZm9ybWF0aW9uIGRlc2NyaWJlZCBpbiB0aGUgc3BlY2lmaWVkIGRpYWdub3N0aWMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgdXBkYXRlUHJvYmxlbUluZGljYXRpb24oKSB7CisJCWlmICh1cGRhdGVQcm9ibGVtSW5kaWNhdGlvbikgeworCQkJQmFzaWNEaWFnbm9zdGljIGRpYWdub3N0aWMgPQorCQkJCW5ldyBCYXNpY0RpYWdub3N0aWMKKwkJCQkJKERpYWdub3N0aWMuT0ssCisJCQkJCSAib3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzIiwKKwkJCQkJIDAsCisJCQkJCSBudWxsLAorCQkJCQkgbmV3IE9iamVjdCBbXSB7IGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKSB9KTsKKwkJCWZvciAoRGlhZ25vc3RpYyBjaGlsZERpYWdub3N0aWMgOiByZXNvdXJjZVRvRGlhZ25vc3RpY01hcC52YWx1ZXMoKSkgeworCQkJCWlmIChjaGlsZERpYWdub3N0aWMuZ2V0U2V2ZXJpdHkoKSAhPSBEaWFnbm9zdGljLk9LKSB7CisJCQkJCWRpYWdub3N0aWMuYWRkKGNoaWxkRGlhZ25vc3RpYyk7CisJCQkJfQorCQkJfQorCisJCQlpbnQgbGFzdEVkaXRvclBhZ2UgPSBnZXRQYWdlQ291bnQoKSAtIDE7CisJCQlpZiAobGFzdEVkaXRvclBhZ2UgPj0gMCAmJiBnZXRFZGl0b3IobGFzdEVkaXRvclBhZ2UpIGluc3RhbmNlb2YgUHJvYmxlbUVkaXRvclBhcnQpIHsKKwkJCQkoKFByb2JsZW1FZGl0b3JQYXJ0KWdldEVkaXRvcihsYXN0RWRpdG9yUGFnZSkpLnNldERpYWdub3N0aWMoZGlhZ25vc3RpYyk7CisJCQkJaWYgKGRpYWdub3N0aWMuZ2V0U2V2ZXJpdHkoKSAhPSBEaWFnbm9zdGljLk9LKSB7CisJCQkJCXNldEFjdGl2ZVBhZ2UobGFzdEVkaXRvclBhZ2UpOworCQkJCX0KKwkJCX0KKwkJCWVsc2UgaWYgKGRpYWdub3N0aWMuZ2V0U2V2ZXJpdHkoKSAhPSBEaWFnbm9zdGljLk9LKSB7CisJCQkJUHJvYmxlbUVkaXRvclBhcnQgcHJvYmxlbUVkaXRvclBhcnQgPSBuZXcgUHJvYmxlbUVkaXRvclBhcnQoKTsKKwkJCQlwcm9ibGVtRWRpdG9yUGFydC5zZXREaWFnbm9zdGljKGRpYWdub3N0aWMpOworCQkJCXRyeSB7CisJCQkJCWFkZFBhZ2UoKytsYXN0RWRpdG9yUGFnZSwgcHJvYmxlbUVkaXRvclBhcnQsIGdldEVkaXRvcklucHV0KCkpOworCQkJCQlzZXRQYWdlVGV4dChsYXN0RWRpdG9yUGFnZSwgcHJvYmxlbUVkaXRvclBhcnQuZ2V0UGFydE5hbWUoKSk7CisJCQkJCXNldEFjdGl2ZVBhZ2UobGFzdEVkaXRvclBhZ2UpOworCQkJCQlzaG93VGFicygpOworCQkJCX0KKwkJCQljYXRjaCAoUGFydEluaXRFeGNlcHRpb24gZXhjZXB0aW9uKSB7CisJCQkJCVNpbXVsYXRpb25Mb2dnZXJFZGl0UGx1Z2luLklOU1RBTkNFLmxvZyhleGNlcHRpb24pOworCQkJCX0KKwkJCX0KKwkJfQorCX0KKworCS8qKgorCSAqIFNob3dzIGEgZGlhbG9nIHRoYXQgYXNrcyBpZiBjb25mbGljdGluZyBjaGFuZ2VzIHNob3VsZCBiZSBkaXNjYXJkZWQuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIGJvb2xlYW4gaGFuZGxlRGlydHlDb25mbGljdCgpIHsKKwkJcmV0dXJuCisJCQlNZXNzYWdlRGlhbG9nLm9wZW5RdWVzdGlvbgorCQkJCShnZXRTaXRlKCkuZ2V0U2hlbGwoKSwKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfRmlsZUNvbmZsaWN0X2xhYmVsIiksCisJCQkJIGdldFN0cmluZygiX1dBUk5fRmlsZUNvbmZsaWN0IikpOworCX0KKworCS8qKgorCSAqIFRoaXMgY3JlYXRlcyBhIG1vZGVsIGVkaXRvci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgU2ltdWxhdGlvbkxvZ2dlckVkaXRvcigpIHsKKwkJc3VwZXIoKTsKKwkJaW5pdGlhbGl6ZUVkaXRpbmdEb21haW4oKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHNldHMgdXAgdGhlIGVkaXRpbmcgZG9tYWluIGZvciB0aGUgbW9kZWwgZWRpdG9yLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIGluaXRpYWxpemVFZGl0aW5nRG9tYWluKCkgeworCQkvLyBDcmVhdGUgYW4gYWRhcHRlciBmYWN0b3J5IHRoYXQgeWllbGRzIGl0ZW0gcHJvdmlkZXJzLgorCQkvLworCQlhZGFwdGVyRmFjdG9yeSA9IG5ldyBDb21wb3NlZEFkYXB0ZXJGYWN0b3J5KENvbXBvc2VkQWRhcHRlckZhY3RvcnkuRGVzY3JpcHRvci5SZWdpc3RyeS5JTlNUQU5DRSk7CisKKwkJYWRhcHRlckZhY3RvcnkuYWRkQWRhcHRlckZhY3RvcnkobmV3IFJlc291cmNlSXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkoKSk7CisJCWFkYXB0ZXJGYWN0b3J5LmFkZEFkYXB0ZXJGYWN0b3J5KG5ldyBTaW11bGF0aW9uTG9nZ2VySXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkoKSk7CisJCWFkYXB0ZXJGYWN0b3J5LmFkZEFkYXB0ZXJGYWN0b3J5KG5ldyBDb21tb25JdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSgpKTsKKwkJYWRhcHRlckZhY3RvcnkuYWRkQWRhcHRlckZhY3RvcnkobmV3IEdyYXBoSXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkoKSk7CisJCWFkYXB0ZXJGYWN0b3J5LmFkZEFkYXB0ZXJGYWN0b3J5KG5ldyBNb2RlbEl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5KCkpOworCQlhZGFwdGVyRmFjdG9yeS5hZGRBZGFwdGVyRmFjdG9yeShuZXcgTW9kaWZpZXJJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSgpKTsKKwkJYWRhcHRlckZhY3RvcnkuYWRkQWRhcHRlckZhY3RvcnkobmV3IFNjZW5hcmlvSXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkoKSk7CisJCWFkYXB0ZXJGYWN0b3J5LmFkZEFkYXB0ZXJGYWN0b3J5KG5ldyBTZXF1ZW5jZXJJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSgpKTsKKwkJYWRhcHRlckZhY3RvcnkuYWRkQWRhcHRlckZhY3RvcnkobmV3IFNvbHZlckl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5KCkpOworCQlhZGFwdGVyRmFjdG9yeS5hZGRBZGFwdGVyRmFjdG9yeShuZXcgTG9nZ2VySXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkoKSk7CisJCWFkYXB0ZXJGYWN0b3J5LmFkZEFkYXB0ZXJGYWN0b3J5KG5ldyBFY29yZUl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5KCkpOworCQlhZGFwdGVyRmFjdG9yeS5hZGRBZGFwdGVyRmFjdG9yeShuZXcgUmVmbGVjdGl2ZUl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5KCkpOworCisJCS8vIENyZWF0ZSB0aGUgY29tbWFuZCBzdGFjayB0aGF0IHdpbGwgbm90aWZ5IHRoaXMgZWRpdG9yIGFzIGNvbW1hbmRzIGFyZSBleGVjdXRlZC4KKwkJLy8KKwkJQmFzaWNDb21tYW5kU3RhY2sgY29tbWFuZFN0YWNrID0gbmV3IEJhc2ljQ29tbWFuZFN0YWNrKCk7CisKKwkJLy8gQWRkIGEgbGlzdGVuZXIgdG8gc2V0IHRoZSBtb3N0IHJlY2VudCBjb21tYW5kJ3MgYWZmZWN0ZWQgb2JqZWN0cyB0byBiZSB0aGUgc2VsZWN0aW9uIG9mIHRoZSB2aWV3ZXIgd2l0aCBmb2N1cy4KKwkJLy8KKwkJY29tbWFuZFN0YWNrLmFkZENvbW1hbmRTdGFja0xpc3RlbmVyCisJCQkobmV3IENvbW1hbmRTdGFja0xpc3RlbmVyKCkgeworCQkJCSBwdWJsaWMgdm9pZCBjb21tYW5kU3RhY2tDaGFuZ2VkKGZpbmFsIEV2ZW50T2JqZWN0IGV2ZW50KSB7CisJCQkJCSBnZXRDb250YWluZXIoKS5nZXREaXNwbGF5KCkuYXN5bmNFeGVjCisJCQkJCQkgKG5ldyBSdW5uYWJsZSgpIHsKKwkJCQkJCQkgIHB1YmxpYyB2b2lkIHJ1bigpIHsKKwkJCQkJCQkJICBmaXJlUHJvcGVydHlDaGFuZ2UoSUVkaXRvclBhcnQuUFJPUF9ESVJUWSk7CisKKwkJCQkJCQkJICAvLyBUcnkgdG8gc2VsZWN0IHRoZSBhZmZlY3RlZCBvYmplY3RzLgorCQkJCQkJCQkgIC8vCisJCQkJCQkJCSAgQ29tbWFuZCBtb3N0UmVjZW50Q29tbWFuZCA9ICgoQ29tbWFuZFN0YWNrKWV2ZW50LmdldFNvdXJjZSgpKS5nZXRNb3N0UmVjZW50Q29tbWFuZCgpOworCQkJCQkJCQkgIGlmIChtb3N0UmVjZW50Q29tbWFuZCAhPSBudWxsKSB7CisJCQkJCQkJCQkgIHNldFNlbGVjdGlvblRvVmlld2VyKG1vc3RSZWNlbnRDb21tYW5kLmdldEFmZmVjdGVkT2JqZWN0cygpKTsKKwkJCQkJCQkJICB9CisJCQkJCQkJCSAgaWYgKHByb3BlcnR5U2hlZXRQYWdlICE9IG51bGwgJiYgIXByb3BlcnR5U2hlZXRQYWdlLmdldENvbnRyb2woKS5pc0Rpc3Bvc2VkKCkpIHsKKwkJCQkJCQkJCSAgcHJvcGVydHlTaGVldFBhZ2UucmVmcmVzaCgpOworCQkJCQkJCQkgIH0KKwkJCQkJCQkgIH0KKwkJCQkJCSAgfSk7CisJCQkJIH0KKwkJCSB9KTsKKworCQkvLyBDcmVhdGUgdGhlIGVkaXRpbmcgZG9tYWluIHdpdGggYSBzcGVjaWFsIGNvbW1hbmQgc3RhY2suCisJCS8vCisJCWVkaXRpbmdEb21haW4gPSBuZXcgQWRhcHRlckZhY3RvcnlFZGl0aW5nRG9tYWluKGFkYXB0ZXJGYWN0b3J5LCBjb21tYW5kU3RhY2ssIG5ldyBIYXNoTWFwPFJlc291cmNlLCBCb29sZWFuPigpKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGlzIGhlcmUgZm9yIHRoZSBsaXN0ZW5lciB0byBiZSBhYmxlIHRvIGNhbGwgaXQuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJCQlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgdm9pZCBmaXJlUHJvcGVydHlDaGFuZ2UoaW50IGFjdGlvbikgeworCQlzdXBlci5maXJlUHJvcGVydHlDaGFuZ2UoYWN0aW9uKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHNldHMgdGhlIHNlbGVjdGlvbiBpbnRvIHdoaWNoZXZlciB2aWV3ZXIgaXMgYWN0aXZlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIHNldFNlbGVjdGlvblRvVmlld2VyKENvbGxlY3Rpb248Pz4gY29sbGVjdGlvbikgeworCQlmaW5hbCBDb2xsZWN0aW9uPD8+IHRoZVNlbGVjdGlvbiA9IGNvbGxlY3Rpb247CisJCS8vIE1ha2Ugc3VyZSBpdCdzIG9rYXkuCisJCS8vCisJCWlmICh0aGVTZWxlY3Rpb24gIT0gbnVsbCAmJiAhdGhlU2VsZWN0aW9uLmlzRW1wdHkoKSkgeworCQkJUnVubmFibGUgcnVubmFibGUgPQorCQkJCW5ldyBSdW5uYWJsZSgpIHsKKwkJCQkJcHVibGljIHZvaWQgcnVuKCkgeworCQkJCQkJLy8gVHJ5IHRvIHNlbGVjdCB0aGUgaXRlbXMgaW4gdGhlIGN1cnJlbnQgY29udGVudCB2aWV3ZXIgb2YgdGhlIGVkaXRvci4KKwkJCQkJCS8vCisJCQkJCQlpZiAoY3VycmVudFZpZXdlciAhPSBudWxsKSB7CisJCQkJCQkJY3VycmVudFZpZXdlci5zZXRTZWxlY3Rpb24obmV3IFN0cnVjdHVyZWRTZWxlY3Rpb24odGhlU2VsZWN0aW9uLnRvQXJyYXkoKSksIHRydWUpOworCQkJCQkJfQorCQkJCQl9CisJCQkJfTsKKwkJCWdldFNpdGUoKS5nZXRTaGVsbCgpLmdldERpc3BsYXkoKS5hc3luY0V4ZWMocnVubmFibGUpOworCQl9CisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIHRoZSBlZGl0aW5nIGRvbWFpbiBhcyByZXF1aXJlZCBieSB0aGUge0BsaW5rIElFZGl0aW5nRG9tYWluUHJvdmlkZXJ9IGludGVyZmFjZS4KKwkgKiBUaGlzIGlzIGltcG9ydGFudCBmb3IgaW1wbGVtZW50aW5nIHRoZSBzdGF0aWMgbWV0aG9kcyBvZiB7QGxpbmsgQWRhcHRlckZhY3RvcnlFZGl0aW5nRG9tYWlufQorCSAqIGFuZCBmb3Igc3VwcG9ydGluZyB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkuYWN0aW9uLkNvbW1hbmRBY3Rpb259LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFZGl0aW5nRG9tYWluIGdldEVkaXRpbmdEb21haW4oKSB7CisJCXJldHVybiBlZGl0aW5nRG9tYWluOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBjbGFzcyBSZXZlcnNlQWRhcHRlckZhY3RvcnlDb250ZW50UHJvdmlkZXIgZXh0ZW5kcyBBZGFwdGVyRmFjdG9yeUNvbnRlbnRQcm92aWRlciB7CisJCS8qKgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJcHVibGljIFJldmVyc2VBZGFwdGVyRmFjdG9yeUNvbnRlbnRQcm92aWRlcihBZGFwdGVyRmFjdG9yeSBhZGFwdGVyRmFjdG9yeSkgeworCQkJc3VwZXIoYWRhcHRlckZhY3RvcnkpOworCQl9CisKKwkJLyoqCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlAT3ZlcnJpZGUKKwkJcHVibGljIE9iamVjdCBbXSBnZXRFbGVtZW50cyhPYmplY3Qgb2JqZWN0KSB7CisJCQlPYmplY3QgcGFyZW50ID0gc3VwZXIuZ2V0UGFyZW50KG9iamVjdCk7CisJCQlyZXR1cm4gKHBhcmVudCA9PSBudWxsID8gQ29sbGVjdGlvbnMuRU1QVFlfU0VUIDogQ29sbGVjdGlvbnMuc2luZ2xldG9uKHBhcmVudCkpLnRvQXJyYXkoKTsKKwkJfQorCisJCS8qKgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJQE92ZXJyaWRlCisJCXB1YmxpYyBPYmplY3QgW10gZ2V0Q2hpbGRyZW4oT2JqZWN0IG9iamVjdCkgeworCQkJT2JqZWN0IHBhcmVudCA9IHN1cGVyLmdldFBhcmVudChvYmplY3QpOworCQkJcmV0dXJuIChwYXJlbnQgPT0gbnVsbCA/IENvbGxlY3Rpb25zLkVNUFRZX1NFVCA6IENvbGxlY3Rpb25zLnNpbmdsZXRvbihwYXJlbnQpKS50b0FycmF5KCk7CisJCX0KKworCQkvKioKKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUBPdmVycmlkZQorCQlwdWJsaWMgYm9vbGVhbiBoYXNDaGlsZHJlbihPYmplY3Qgb2JqZWN0KSB7CisJCQlPYmplY3QgcGFyZW50ID0gc3VwZXIuZ2V0UGFyZW50KG9iamVjdCk7CisJCQlyZXR1cm4gcGFyZW50ICE9IG51bGw7CisJCX0KKworCQkvKioKKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUBPdmVycmlkZQorCQlwdWJsaWMgT2JqZWN0IGdldFBhcmVudChPYmplY3Qgb2JqZWN0KSB7CisJCQlyZXR1cm4gbnVsbDsKKwkJfQorCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIHNldEN1cnJlbnRWaWV3ZXJQYW5lKFZpZXdlclBhbmUgdmlld2VyUGFuZSkgeworCQlpZiAoY3VycmVudFZpZXdlclBhbmUgIT0gdmlld2VyUGFuZSkgeworCQkJaWYgKGN1cnJlbnRWaWV3ZXJQYW5lICE9IG51bGwpIHsKKwkJCQljdXJyZW50Vmlld2VyUGFuZS5zaG93Rm9jdXMoZmFsc2UpOworCQkJfQorCQkJY3VycmVudFZpZXdlclBhbmUgPSB2aWV3ZXJQYW5lOworCQl9CisJCXNldEN1cnJlbnRWaWV3ZXIoY3VycmVudFZpZXdlclBhbmUuZ2V0Vmlld2VyKCkpOworCX0KKworCS8qKgorCSAqIFRoaXMgbWFrZXMgc3VyZSB0aGF0IG9uZSBjb250ZW50IHZpZXdlciwgZWl0aGVyIGZvciB0aGUgY3VycmVudCBwYWdlIG9yIHRoZSBvdXRsaW5lIHZpZXcsIGlmIGl0IGhhcyBmb2N1cywKKwkgKiBpcyB0aGUgY3VycmVudCBvbmUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgc2V0Q3VycmVudFZpZXdlcihWaWV3ZXIgdmlld2VyKSB7CisJCS8vIElmIGl0IGlzIGNoYW5naW5nLi4uCisJCS8vCisJCWlmIChjdXJyZW50Vmlld2VyICE9IHZpZXdlcikgeworCQkJaWYgKHNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lciA9PSBudWxsKSB7CisJCQkJLy8gQ3JlYXRlIHRoZSBsaXN0ZW5lciBvbiBkZW1hbmQuCisJCQkJLy8KKwkJCQlzZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIgPQorCQkJCQluZXcgSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcigpIHsKKwkJCQkJCS8vIFRoaXMganVzdCBub3RpZmllcyB0aG9zZSB0aGluZ3MgdGhhdCBhcmUgYWZmZWN0ZWQgYnkgdGhlIHNlY3Rpb24uCisJCQkJCQkvLworCQkJCQkJcHVibGljIHZvaWQgc2VsZWN0aW9uQ2hhbmdlZChTZWxlY3Rpb25DaGFuZ2VkRXZlbnQgc2VsZWN0aW9uQ2hhbmdlZEV2ZW50KSB7CisJCQkJCQkJc2V0U2VsZWN0aW9uKHNlbGVjdGlvbkNoYW5nZWRFdmVudC5nZXRTZWxlY3Rpb24oKSk7CisJCQkJCQl9CisJCQkJCX07CisJCQl9CisKKwkJCS8vIFN0b3AgbGlzdGVuaW5nIHRvIHRoZSBvbGQgb25lLgorCQkJLy8KKwkJCWlmIChjdXJyZW50Vmlld2VyICE9IG51bGwpIHsKKwkJCQljdXJyZW50Vmlld2VyLnJlbW92ZVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcihzZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIpOworCQkJfQorCisJCQkvLyBTdGFydCBsaXN0ZW5pbmcgdG8gdGhlIG5ldyBvbmUuCisJCQkvLworCQkJaWYgKHZpZXdlciAhPSBudWxsKSB7CisJCQkJdmlld2VyLmFkZFNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcihzZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIpOworCQkJfQorCisJCQkvLyBSZW1lbWJlciBpdC4KKwkJCS8vCisJCQljdXJyZW50Vmlld2VyID0gdmlld2VyOworCisJCQkvLyBTZXQgdGhlIGVkaXRvcnMgc2VsZWN0aW9uIGJhc2VkIG9uIHRoZSBjdXJyZW50IHZpZXdlcidzIHNlbGVjdGlvbi4KKwkJCS8vCisJCQlzZXRTZWxlY3Rpb24oY3VycmVudFZpZXdlciA9PSBudWxsID8gU3RydWN0dXJlZFNlbGVjdGlvbi5FTVBUWSA6IGN1cnJlbnRWaWV3ZXIuZ2V0U2VsZWN0aW9uKCkpOworCQl9CisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIHRoZSB2aWV3ZXIgYXMgcmVxdWlyZWQgYnkgdGhlIHtAbGluayBJVmlld2VyUHJvdmlkZXJ9IGludGVyZmFjZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVmlld2VyIGdldFZpZXdlcigpIHsKKwkJcmV0dXJuIGN1cnJlbnRWaWV3ZXI7CisJfQorCisJLyoqCisJICogVGhpcyBjcmVhdGVzIGEgY29udGV4dCBtZW51IGZvciB0aGUgdmlld2VyIGFuZCBhZGRzIGEgbGlzdGVuZXIgYXMgd2VsbCByZWdpc3RlcmluZyB0aGUgbWVudSBmb3IgZXh0ZW5zaW9uLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIGNyZWF0ZUNvbnRleHRNZW51Rm9yKFN0cnVjdHVyZWRWaWV3ZXIgdmlld2VyKSB7CisJCU1lbnVNYW5hZ2VyIGNvbnRleHRNZW51ID0gbmV3IE1lbnVNYW5hZ2VyKCIjUG9wVXAiKTsKKwkJY29udGV4dE1lbnUuYWRkKG5ldyBTZXBhcmF0b3IoImFkZGl0aW9ucyIpKTsKKwkJY29udGV4dE1lbnUuc2V0UmVtb3ZlQWxsV2hlblNob3duKHRydWUpOworCQljb250ZXh0TWVudS5hZGRNZW51TGlzdGVuZXIodGhpcyk7CisJCU1lbnUgbWVudT0gY29udGV4dE1lbnUuY3JlYXRlQ29udGV4dE1lbnUodmlld2VyLmdldENvbnRyb2woKSk7CisJCXZpZXdlci5nZXRDb250cm9sKCkuc2V0TWVudShtZW51KTsKKwkJZ2V0U2l0ZSgpLnJlZ2lzdGVyQ29udGV4dE1lbnUoY29udGV4dE1lbnUsIG5ldyBVbndyYXBwaW5nU2VsZWN0aW9uUHJvdmlkZXIodmlld2VyKSk7CisKKwkJaW50IGRuZE9wZXJhdGlvbnMgPSBETkQuRFJPUF9DT1BZIHwgRE5ELkRST1BfTU9WRSB8IERORC5EUk9QX0xJTks7CisJCVRyYW5zZmVyW10gdHJhbnNmZXJzID0gbmV3IFRyYW5zZmVyW10geyBMb2NhbFRyYW5zZmVyLmdldEluc3RhbmNlKCkgfTsKKwkJdmlld2VyLmFkZERyYWdTdXBwb3J0KGRuZE9wZXJhdGlvbnMsIHRyYW5zZmVycywgbmV3IFZpZXdlckRyYWdBZGFwdGVyKHZpZXdlcikpOworCQl2aWV3ZXIuYWRkRHJvcFN1cHBvcnQoZG5kT3BlcmF0aW9ucywgdHJhbnNmZXJzLCBuZXcgRWRpdGluZ0RvbWFpblZpZXdlckRyb3BBZGFwdGVyKGVkaXRpbmdEb21haW4sIHZpZXdlcikpOworCX0KKworCS8qKgorCSAqIFRoaXMgaXMgdGhlIG1ldGhvZCBjYWxsZWQgdG8gbG9hZCBhIHJlc291cmNlIGludG8gdGhlIGVkaXRpbmcgZG9tYWluJ3MgcmVzb3VyY2Ugc2V0IGJhc2VkIG9uIHRoZSBlZGl0b3IncyBpbnB1dC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBjcmVhdGVNb2RlbCgpIHsKKwkJVVJJIHJlc291cmNlVVJJID0gRWRpdFVJVXRpbC5nZXRVUkkoZ2V0RWRpdG9ySW5wdXQoKSk7CisJCUV4Y2VwdGlvbiBleGNlcHRpb24gPSBudWxsOworCQlSZXNvdXJjZSByZXNvdXJjZSA9IG51bGw7CisJCXRyeSB7CisJCQkvLyBMb2FkIHRoZSByZXNvdXJjZSB0aHJvdWdoIHRoZSBlZGl0aW5nIGRvbWFpbi4KKwkJCS8vCisJCQlyZXNvdXJjZSA9IGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKS5nZXRSZXNvdXJjZShyZXNvdXJjZVVSSSwgdHJ1ZSk7CisJCX0KKwkJY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CisJCQlleGNlcHRpb24gPSBlOworCQkJcmVzb3VyY2UgPSBlZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkuZ2V0UmVzb3VyY2UocmVzb3VyY2VVUkksIGZhbHNlKTsKKwkJfQorCisJCURpYWdub3N0aWMgZGlhZ25vc3RpYyA9IGFuYWx5emVSZXNvdXJjZVByb2JsZW1zKHJlc291cmNlLCBleGNlcHRpb24pOworCQlpZiAoZGlhZ25vc3RpYy5nZXRTZXZlcml0eSgpICE9IERpYWdub3N0aWMuT0spIHsKKwkJCXJlc291cmNlVG9EaWFnbm9zdGljTWFwLnB1dChyZXNvdXJjZSwgIGFuYWx5emVSZXNvdXJjZVByb2JsZW1zKHJlc291cmNlLCBleGNlcHRpb24pKTsKKwkJfQorCQllZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkuZUFkYXB0ZXJzKCkuYWRkKHByb2JsZW1JbmRpY2F0aW9uQWRhcHRlcik7CisJfQorCisJLyoqCisJICogUmV0dXJucyBhIGRpYWdub3N0aWMgZGVzY3JpYmluZyB0aGUgZXJyb3JzIGFuZCB3YXJuaW5ncyBsaXN0ZWQgaW4gdGhlIHJlc291cmNlCisJICogYW5kIHRoZSBzcGVjaWZpZWQgZXhjZXB0aW9uIChpZiBhbnkpLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBEaWFnbm9zdGljIGFuYWx5emVSZXNvdXJjZVByb2JsZW1zKFJlc291cmNlIHJlc291cmNlLCBFeGNlcHRpb24gZXhjZXB0aW9uKSB7CisJCWlmICghcmVzb3VyY2UuZ2V0RXJyb3JzKCkuaXNFbXB0eSgpIHx8ICFyZXNvdXJjZS5nZXRXYXJuaW5ncygpLmlzRW1wdHkoKSkgeworCQkJQmFzaWNEaWFnbm9zdGljIGJhc2ljRGlhZ25vc3RpYyA9CisJCQkJbmV3IEJhc2ljRGlhZ25vc3RpYworCQkJCQkoRGlhZ25vc3RpYy5FUlJPUiwKKwkJCQkJICJvcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMiLAorCQkJCQkgMCwKKwkJCQkJIGdldFN0cmluZygiX1VJX0NyZWF0ZU1vZGVsRXJyb3JfbWVzc2FnZSIsIHJlc291cmNlLmdldFVSSSgpKSwKKwkJCQkJIG5ldyBPYmplY3QgW10geyBleGNlcHRpb24gPT0gbnVsbCA/IChPYmplY3QpcmVzb3VyY2UgOiBleGNlcHRpb24gfSk7CisJCQliYXNpY0RpYWdub3N0aWMubWVyZ2UoRWNvcmVVdGlsLmNvbXB1dGVEaWFnbm9zdGljKHJlc291cmNlLCB0cnVlKSk7CisJCQlyZXR1cm4gYmFzaWNEaWFnbm9zdGljOworCQl9CisJCWVsc2UgaWYgKGV4Y2VwdGlvbiAhPSBudWxsKSB7CisJCQlyZXR1cm4KKwkJCQluZXcgQmFzaWNEaWFnbm9zdGljCisJCQkJCShEaWFnbm9zdGljLkVSUk9SLAorCQkJCQkgIm9yZy5lY2xpcHNlLnN0ZW0ubG9nZ2VycyIsCisJCQkJCSAwLAorCQkJCQkgZ2V0U3RyaW5nKCJfVUlfQ3JlYXRlTW9kZWxFcnJvcl9tZXNzYWdlIiwgcmVzb3VyY2UuZ2V0VVJJKCkpLAorCQkJCQkgbmV3IE9iamVjdFtdIHsgZXhjZXB0aW9uIH0pOworCQl9CisJCWVsc2UgeworCQkJcmV0dXJuIERpYWdub3N0aWMuT0tfSU5TVEFOQ0U7CisJCX0KKwl9CisKKwkvKioKKwkgKiBUaGlzIGlzIHRoZSBtZXRob2QgdXNlZCBieSB0aGUgZnJhbWV3b3JrIHRvIGluc3RhbGwgeW91ciBvd24gY29udHJvbHMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgY3JlYXRlUGFnZXMoKSB7CisJCS8vIENyZWF0ZXMgdGhlIG1vZGVsIGZyb20gdGhlIGVkaXRvciBpbnB1dAorCQkvLworCQljcmVhdGVNb2RlbCgpOworCisJCS8vIE9ubHkgY3JlYXRlcyB0aGUgb3RoZXIgcGFnZXMgaWYgdGhlcmUgaXMgc29tZXRoaW5nIHRoYXQgY2FuIGJlIGVkaXRlZAorCQkvLworCQlpZiAoIWdldEVkaXRpbmdEb21haW4oKS5nZXRSZXNvdXJjZVNldCgpLmdldFJlc291cmNlcygpLmlzRW1wdHkoKSkgeworCQkJLy8gQ3JlYXRlIGEgcGFnZSBmb3IgdGhlIHNlbGVjdGlvbiB0cmVlIHZpZXcuCisJCQkvLworCQkJeworCQkJCVZpZXdlclBhbmUgdmlld2VyUGFuZSA9CisJCQkJCW5ldyBWaWV3ZXJQYW5lKGdldFNpdGUoKS5nZXRQYWdlKCksIFNpbXVsYXRpb25Mb2dnZXJFZGl0b3IudGhpcykgeworCQkJCQkJQE92ZXJyaWRlCisJCQkJCQlwdWJsaWMgVmlld2VyIGNyZWF0ZVZpZXdlcihDb21wb3NpdGUgY29tcG9zaXRlKSB7CisJCQkJCQkJVHJlZSB0cmVlID0gbmV3IFRyZWUoY29tcG9zaXRlLCBTV1QuTVVMVEkpOworCQkJCQkJCVRyZWVWaWV3ZXIgbmV3VHJlZVZpZXdlciA9IG5ldyBUcmVlVmlld2VyKHRyZWUpOworCQkJCQkJCXJldHVybiBuZXdUcmVlVmlld2VyOworCQkJCQkJfQorCQkJCQkJQE92ZXJyaWRlCisJCQkJCQlwdWJsaWMgdm9pZCByZXF1ZXN0QWN0aXZhdGlvbigpIHsKKwkJCQkJCQlzdXBlci5yZXF1ZXN0QWN0aXZhdGlvbigpOworCQkJCQkJCXNldEN1cnJlbnRWaWV3ZXJQYW5lKHRoaXMpOworCQkJCQkJfQorCQkJCQl9OworCQkJCXZpZXdlclBhbmUuY3JlYXRlQ29udHJvbChnZXRDb250YWluZXIoKSk7CisKKwkJCQlzZWxlY3Rpb25WaWV3ZXIgPSAoVHJlZVZpZXdlcil2aWV3ZXJQYW5lLmdldFZpZXdlcigpOworCQkJCXNlbGVjdGlvblZpZXdlci5zZXRDb250ZW50UHJvdmlkZXIobmV3IEFkYXB0ZXJGYWN0b3J5Q29udGVudFByb3ZpZGVyKGFkYXB0ZXJGYWN0b3J5KSk7CisKKwkJCQlzZWxlY3Rpb25WaWV3ZXIuc2V0TGFiZWxQcm92aWRlcihuZXcgQWRhcHRlckZhY3RvcnlMYWJlbFByb3ZpZGVyKGFkYXB0ZXJGYWN0b3J5KSk7CisJCQkJc2VsZWN0aW9uVmlld2VyLnNldElucHV0KGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKSk7CisJCQkJc2VsZWN0aW9uVmlld2VyLnNldFNlbGVjdGlvbihuZXcgU3RydWN0dXJlZFNlbGVjdGlvbihlZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkuZ2V0UmVzb3VyY2VzKCkuZ2V0KDApKSwgdHJ1ZSk7CisJCQkJdmlld2VyUGFuZS5zZXRUaXRsZShlZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkpOworCisJCQkJbmV3IEFkYXB0ZXJGYWN0b3J5VHJlZUVkaXRvcihzZWxlY3Rpb25WaWV3ZXIuZ2V0VHJlZSgpLCBhZGFwdGVyRmFjdG9yeSk7CisKKwkJCQljcmVhdGVDb250ZXh0TWVudUZvcihzZWxlY3Rpb25WaWV3ZXIpOworCQkJCWludCBwYWdlSW5kZXggPSBhZGRQYWdlKHZpZXdlclBhbmUuZ2V0Q29udHJvbCgpKTsKKwkJCQlzZXRQYWdlVGV4dChwYWdlSW5kZXgsIGdldFN0cmluZygiX1VJX1NlbGVjdGlvblBhZ2VfbGFiZWwiKSk7CisJCQl9CisKKwkJCS8vIENyZWF0ZSBhIHBhZ2UgZm9yIHRoZSBwYXJlbnQgdHJlZSB2aWV3LgorCQkJLy8KKwkJCXsKKwkJCQlWaWV3ZXJQYW5lIHZpZXdlclBhbmUgPQorCQkJCQluZXcgVmlld2VyUGFuZShnZXRTaXRlKCkuZ2V0UGFnZSgpLCBTaW11bGF0aW9uTG9nZ2VyRWRpdG9yLnRoaXMpIHsKKwkJCQkJCUBPdmVycmlkZQorCQkJCQkJcHVibGljIFZpZXdlciBjcmVhdGVWaWV3ZXIoQ29tcG9zaXRlIGNvbXBvc2l0ZSkgeworCQkJCQkJCVRyZWUgdHJlZSA9IG5ldyBUcmVlKGNvbXBvc2l0ZSwgU1dULk1VTFRJKTsKKwkJCQkJCQlUcmVlVmlld2VyIG5ld1RyZWVWaWV3ZXIgPSBuZXcgVHJlZVZpZXdlcih0cmVlKTsKKwkJCQkJCQlyZXR1cm4gbmV3VHJlZVZpZXdlcjsKKwkJCQkJCX0KKwkJCQkJCUBPdmVycmlkZQorCQkJCQkJcHVibGljIHZvaWQgcmVxdWVzdEFjdGl2YXRpb24oKSB7CisJCQkJCQkJc3VwZXIucmVxdWVzdEFjdGl2YXRpb24oKTsKKwkJCQkJCQlzZXRDdXJyZW50Vmlld2VyUGFuZSh0aGlzKTsKKwkJCQkJCX0KKwkJCQkJfTsKKwkJCQl2aWV3ZXJQYW5lLmNyZWF0ZUNvbnRyb2woZ2V0Q29udGFpbmVyKCkpOworCisJCQkJcGFyZW50Vmlld2VyID0gKFRyZWVWaWV3ZXIpdmlld2VyUGFuZS5nZXRWaWV3ZXIoKTsKKwkJCQlwYXJlbnRWaWV3ZXIuc2V0QXV0b0V4cGFuZExldmVsKDMwKTsKKwkJCQlwYXJlbnRWaWV3ZXIuc2V0Q29udGVudFByb3ZpZGVyKG5ldyBSZXZlcnNlQWRhcHRlckZhY3RvcnlDb250ZW50UHJvdmlkZXIoYWRhcHRlckZhY3RvcnkpKTsKKwkJCQlwYXJlbnRWaWV3ZXIuc2V0TGFiZWxQcm92aWRlcihuZXcgQWRhcHRlckZhY3RvcnlMYWJlbFByb3ZpZGVyKGFkYXB0ZXJGYWN0b3J5KSk7CisKKwkJCQljcmVhdGVDb250ZXh0TWVudUZvcihwYXJlbnRWaWV3ZXIpOworCQkJCWludCBwYWdlSW5kZXggPSBhZGRQYWdlKHZpZXdlclBhbmUuZ2V0Q29udHJvbCgpKTsKKwkJCQlzZXRQYWdlVGV4dChwYWdlSW5kZXgsIGdldFN0cmluZygiX1VJX1BhcmVudFBhZ2VfbGFiZWwiKSk7CisJCQl9CisKKwkJCS8vIFRoaXMgaXMgdGhlIHBhZ2UgZm9yIHRoZSBsaXN0IHZpZXdlcgorCQkJLy8KKwkJCXsKKwkJCQlWaWV3ZXJQYW5lIHZpZXdlclBhbmUgPQorCQkJCQluZXcgVmlld2VyUGFuZShnZXRTaXRlKCkuZ2V0UGFnZSgpLCBTaW11bGF0aW9uTG9nZ2VyRWRpdG9yLnRoaXMpIHsKKwkJCQkJCUBPdmVycmlkZQorCQkJCQkJcHVibGljIFZpZXdlciBjcmVhdGVWaWV3ZXIoQ29tcG9zaXRlIGNvbXBvc2l0ZSkgeworCQkJCQkJCXJldHVybiBuZXcgTGlzdFZpZXdlcihjb21wb3NpdGUpOworCQkJCQkJfQorCQkJCQkJQE92ZXJyaWRlCisJCQkJCQlwdWJsaWMgdm9pZCByZXF1ZXN0QWN0aXZhdGlvbigpIHsKKwkJCQkJCQlzdXBlci5yZXF1ZXN0QWN0aXZhdGlvbigpOworCQkJCQkJCXNldEN1cnJlbnRWaWV3ZXJQYW5lKHRoaXMpOworCQkJCQkJfQorCQkJCQl9OworCQkJCXZpZXdlclBhbmUuY3JlYXRlQ29udHJvbChnZXRDb250YWluZXIoKSk7CisJCQkJbGlzdFZpZXdlciA9IChMaXN0Vmlld2VyKXZpZXdlclBhbmUuZ2V0Vmlld2VyKCk7CisJCQkJbGlzdFZpZXdlci5zZXRDb250ZW50UHJvdmlkZXIobmV3IEFkYXB0ZXJGYWN0b3J5Q29udGVudFByb3ZpZGVyKGFkYXB0ZXJGYWN0b3J5KSk7CisJCQkJbGlzdFZpZXdlci5zZXRMYWJlbFByb3ZpZGVyKG5ldyBBZGFwdGVyRmFjdG9yeUxhYmVsUHJvdmlkZXIoYWRhcHRlckZhY3RvcnkpKTsKKworCQkJCWNyZWF0ZUNvbnRleHRNZW51Rm9yKGxpc3RWaWV3ZXIpOworCQkJCWludCBwYWdlSW5kZXggPSBhZGRQYWdlKHZpZXdlclBhbmUuZ2V0Q29udHJvbCgpKTsKKwkJCQlzZXRQYWdlVGV4dChwYWdlSW5kZXgsIGdldFN0cmluZygiX1VJX0xpc3RQYWdlX2xhYmVsIikpOworCQkJfQorCisJCQkvLyBUaGlzIGlzIHRoZSBwYWdlIGZvciB0aGUgdHJlZSB2aWV3ZXIKKwkJCS8vCisJCQl7CisJCQkJVmlld2VyUGFuZSB2aWV3ZXJQYW5lID0KKwkJCQkJbmV3IFZpZXdlclBhbmUoZ2V0U2l0ZSgpLmdldFBhZ2UoKSwgU2ltdWxhdGlvbkxvZ2dlckVkaXRvci50aGlzKSB7CisJCQkJCQlAT3ZlcnJpZGUKKwkJCQkJCXB1YmxpYyBWaWV3ZXIgY3JlYXRlVmlld2VyKENvbXBvc2l0ZSBjb21wb3NpdGUpIHsKKwkJCQkJCQlyZXR1cm4gbmV3IFRyZWVWaWV3ZXIoY29tcG9zaXRlKTsKKwkJCQkJCX0KKwkJCQkJCUBPdmVycmlkZQorCQkJCQkJcHVibGljIHZvaWQgcmVxdWVzdEFjdGl2YXRpb24oKSB7CisJCQkJCQkJc3VwZXIucmVxdWVzdEFjdGl2YXRpb24oKTsKKwkJCQkJCQlzZXRDdXJyZW50Vmlld2VyUGFuZSh0aGlzKTsKKwkJCQkJCX0KKwkJCQkJfTsKKwkJCQl2aWV3ZXJQYW5lLmNyZWF0ZUNvbnRyb2woZ2V0Q29udGFpbmVyKCkpOworCQkJCXRyZWVWaWV3ZXIgPSAoVHJlZVZpZXdlcil2aWV3ZXJQYW5lLmdldFZpZXdlcigpOworCQkJCXRyZWVWaWV3ZXIuc2V0Q29udGVudFByb3ZpZGVyKG5ldyBBZGFwdGVyRmFjdG9yeUNvbnRlbnRQcm92aWRlcihhZGFwdGVyRmFjdG9yeSkpOworCQkJCXRyZWVWaWV3ZXIuc2V0TGFiZWxQcm92aWRlcihuZXcgQWRhcHRlckZhY3RvcnlMYWJlbFByb3ZpZGVyKGFkYXB0ZXJGYWN0b3J5KSk7CisKKwkJCQluZXcgQWRhcHRlckZhY3RvcnlUcmVlRWRpdG9yKHRyZWVWaWV3ZXIuZ2V0VHJlZSgpLCBhZGFwdGVyRmFjdG9yeSk7CisKKwkJCQljcmVhdGVDb250ZXh0TWVudUZvcih0cmVlVmlld2VyKTsKKwkJCQlpbnQgcGFnZUluZGV4ID0gYWRkUGFnZSh2aWV3ZXJQYW5lLmdldENvbnRyb2woKSk7CisJCQkJc2V0UGFnZVRleHQocGFnZUluZGV4LCBnZXRTdHJpbmcoIl9VSV9UcmVlUGFnZV9sYWJlbCIpKTsKKwkJCX0KKworCQkJLy8gVGhpcyBpcyB0aGUgcGFnZSBmb3IgdGhlIHRhYmxlIHZpZXdlci4KKwkJCS8vCisJCQl7CisJCQkJVmlld2VyUGFuZSB2aWV3ZXJQYW5lID0KKwkJCQkJbmV3IFZpZXdlclBhbmUoZ2V0U2l0ZSgpLmdldFBhZ2UoKSwgU2ltdWxhdGlvbkxvZ2dlckVkaXRvci50aGlzKSB7CisJCQkJCQlAT3ZlcnJpZGUKKwkJCQkJCXB1YmxpYyBWaWV3ZXIgY3JlYXRlVmlld2VyKENvbXBvc2l0ZSBjb21wb3NpdGUpIHsKKwkJCQkJCQlyZXR1cm4gbmV3IFRhYmxlVmlld2VyKGNvbXBvc2l0ZSk7CisJCQkJCQl9CisJCQkJCQlAT3ZlcnJpZGUKKwkJCQkJCXB1YmxpYyB2b2lkIHJlcXVlc3RBY3RpdmF0aW9uKCkgeworCQkJCQkJCXN1cGVyLnJlcXVlc3RBY3RpdmF0aW9uKCk7CisJCQkJCQkJc2V0Q3VycmVudFZpZXdlclBhbmUodGhpcyk7CisJCQkJCQl9CisJCQkJCX07CisJCQkJdmlld2VyUGFuZS5jcmVhdGVDb250cm9sKGdldENvbnRhaW5lcigpKTsKKwkJCQl0YWJsZVZpZXdlciA9IChUYWJsZVZpZXdlcil2aWV3ZXJQYW5lLmdldFZpZXdlcigpOworCisJCQkJVGFibGUgdGFibGUgPSB0YWJsZVZpZXdlci5nZXRUYWJsZSgpOworCQkJCVRhYmxlTGF5b3V0IGxheW91dCA9IG5ldyBUYWJsZUxheW91dCgpOworCQkJCXRhYmxlLnNldExheW91dChsYXlvdXQpOworCQkJCXRhYmxlLnNldEhlYWRlclZpc2libGUodHJ1ZSk7CisJCQkJdGFibGUuc2V0TGluZXNWaXNpYmxlKHRydWUpOworCisJCQkJVGFibGVDb2x1bW4gb2JqZWN0Q29sdW1uID0gbmV3IFRhYmxlQ29sdW1uKHRhYmxlLCBTV1QuTk9ORSk7CisJCQkJbGF5b3V0LmFkZENvbHVtbkRhdGEobmV3IENvbHVtbldlaWdodERhdGEoMywgMTAwLCB0cnVlKSk7CisJCQkJb2JqZWN0Q29sdW1uLnNldFRleHQoZ2V0U3RyaW5nKCJfVUlfT2JqZWN0Q29sdW1uX2xhYmVsIikpOworCQkJCW9iamVjdENvbHVtbi5zZXRSZXNpemFibGUodHJ1ZSk7CisKKwkJCQlUYWJsZUNvbHVtbiBzZWxmQ29sdW1uID0gbmV3IFRhYmxlQ29sdW1uKHRhYmxlLCBTV1QuTk9ORSk7CisJCQkJbGF5b3V0LmFkZENvbHVtbkRhdGEobmV3IENvbHVtbldlaWdodERhdGEoMiwgMTAwLCB0cnVlKSk7CisJCQkJc2VsZkNvbHVtbi5zZXRUZXh0KGdldFN0cmluZygiX1VJX1NlbGZDb2x1bW5fbGFiZWwiKSk7CisJCQkJc2VsZkNvbHVtbi5zZXRSZXNpemFibGUodHJ1ZSk7CisKKwkJCQl0YWJsZVZpZXdlci5zZXRDb2x1bW5Qcm9wZXJ0aWVzKG5ldyBTdHJpbmcgW10geyJhIiwgImIifSk7CisJCQkJdGFibGVWaWV3ZXIuc2V0Q29udGVudFByb3ZpZGVyKG5ldyBBZGFwdGVyRmFjdG9yeUNvbnRlbnRQcm92aWRlcihhZGFwdGVyRmFjdG9yeSkpOworCQkJCXRhYmxlVmlld2VyLnNldExhYmVsUHJvdmlkZXIobmV3IEFkYXB0ZXJGYWN0b3J5TGFiZWxQcm92aWRlcihhZGFwdGVyRmFjdG9yeSkpOworCisJCQkJY3JlYXRlQ29udGV4dE1lbnVGb3IodGFibGVWaWV3ZXIpOworCQkJCWludCBwYWdlSW5kZXggPSBhZGRQYWdlKHZpZXdlclBhbmUuZ2V0Q29udHJvbCgpKTsKKwkJCQlzZXRQYWdlVGV4dChwYWdlSW5kZXgsIGdldFN0cmluZygiX1VJX1RhYmxlUGFnZV9sYWJlbCIpKTsKKwkJCX0KKworCQkJLy8gVGhpcyBpcyB0aGUgcGFnZSBmb3IgdGhlIHRhYmxlIHRyZWUgdmlld2VyLgorCQkJLy8KKwkJCXsKKwkJCQlWaWV3ZXJQYW5lIHZpZXdlclBhbmUgPQorCQkJCQluZXcgVmlld2VyUGFuZShnZXRTaXRlKCkuZ2V0UGFnZSgpLCBTaW11bGF0aW9uTG9nZ2VyRWRpdG9yLnRoaXMpIHsKKwkJCQkJCUBPdmVycmlkZQorCQkJCQkJcHVibGljIFZpZXdlciBjcmVhdGVWaWV3ZXIoQ29tcG9zaXRlIGNvbXBvc2l0ZSkgeworCQkJCQkJCXJldHVybiBuZXcgVHJlZVZpZXdlcihjb21wb3NpdGUpOworCQkJCQkJfQorCQkJCQkJQE92ZXJyaWRlCisJCQkJCQlwdWJsaWMgdm9pZCByZXF1ZXN0QWN0aXZhdGlvbigpIHsKKwkJCQkJCQlzdXBlci5yZXF1ZXN0QWN0aXZhdGlvbigpOworCQkJCQkJCXNldEN1cnJlbnRWaWV3ZXJQYW5lKHRoaXMpOworCQkJCQkJfQorCQkJCQl9OworCQkJCXZpZXdlclBhbmUuY3JlYXRlQ29udHJvbChnZXRDb250YWluZXIoKSk7CisKKwkJCQl0cmVlVmlld2VyV2l0aENvbHVtbnMgPSAoVHJlZVZpZXdlcil2aWV3ZXJQYW5lLmdldFZpZXdlcigpOworCisJCQkJVHJlZSB0cmVlID0gdHJlZVZpZXdlcldpdGhDb2x1bW5zLmdldFRyZWUoKTsKKwkJCQl0cmVlLnNldExheW91dERhdGEobmV3IEZpbGxMYXlvdXQoKSk7CisJCQkJdHJlZS5zZXRIZWFkZXJWaXNpYmxlKHRydWUpOworCQkJCXRyZWUuc2V0TGluZXNWaXNpYmxlKHRydWUpOworCisJCQkJVHJlZUNvbHVtbiBvYmplY3RDb2x1bW4gPSBuZXcgVHJlZUNvbHVtbih0cmVlLCBTV1QuTk9ORSk7CisJCQkJb2JqZWN0Q29sdW1uLnNldFRleHQoZ2V0U3RyaW5nKCJfVUlfT2JqZWN0Q29sdW1uX2xhYmVsIikpOworCQkJCW9iamVjdENvbHVtbi5zZXRSZXNpemFibGUodHJ1ZSk7CisJCQkJb2JqZWN0Q29sdW1uLnNldFdpZHRoKDI1MCk7CisKKwkJCQlUcmVlQ29sdW1uIHNlbGZDb2x1bW4gPSBuZXcgVHJlZUNvbHVtbih0cmVlLCBTV1QuTk9ORSk7CisJCQkJc2VsZkNvbHVtbi5zZXRUZXh0KGdldFN0cmluZygiX1VJX1NlbGZDb2x1bW5fbGFiZWwiKSk7CisJCQkJc2VsZkNvbHVtbi5zZXRSZXNpemFibGUodHJ1ZSk7CisJCQkJc2VsZkNvbHVtbi5zZXRXaWR0aCgyMDApOworCisJCQkJdHJlZVZpZXdlcldpdGhDb2x1bW5zLnNldENvbHVtblByb3BlcnRpZXMobmV3IFN0cmluZyBbXSB7ImEiLCAiYiJ9KTsKKwkJCQl0cmVlVmlld2VyV2l0aENvbHVtbnMuc2V0Q29udGVudFByb3ZpZGVyKG5ldyBBZGFwdGVyRmFjdG9yeUNvbnRlbnRQcm92aWRlcihhZGFwdGVyRmFjdG9yeSkpOworCQkJCXRyZWVWaWV3ZXJXaXRoQ29sdW1ucy5zZXRMYWJlbFByb3ZpZGVyKG5ldyBBZGFwdGVyRmFjdG9yeUxhYmVsUHJvdmlkZXIoYWRhcHRlckZhY3RvcnkpKTsKKworCQkJCWNyZWF0ZUNvbnRleHRNZW51Rm9yKHRyZWVWaWV3ZXJXaXRoQ29sdW1ucyk7CisJCQkJaW50IHBhZ2VJbmRleCA9IGFkZFBhZ2Uodmlld2VyUGFuZS5nZXRDb250cm9sKCkpOworCQkJCXNldFBhZ2VUZXh0KHBhZ2VJbmRleCwgZ2V0U3RyaW5nKCJfVUlfVHJlZVdpdGhDb2x1bW5zUGFnZV9sYWJlbCIpKTsKKwkJCX0KKworCQkJZ2V0U2l0ZSgpLmdldFNoZWxsKCkuZ2V0RGlzcGxheSgpLmFzeW5jRXhlYworCQkJCShuZXcgUnVubmFibGUoKSB7CisJCQkJCSBwdWJsaWMgdm9pZCBydW4oKSB7CisJCQkJCQkgc2V0QWN0aXZlUGFnZSgwKTsKKwkJCQkJIH0KKwkJCQkgfSk7CisJCX0KKworCQkvLyBFbnN1cmVzIHRoYXQgdGhpcyBlZGl0b3Igd2lsbCBvbmx5IGRpc3BsYXkgdGhlIHBhZ2UncyB0YWIKKwkJLy8gYXJlYSBpZiB0aGVyZSBhcmUgbW9yZSB0aGFuIG9uZSBwYWdlCisJCS8vCisJCWdldENvbnRhaW5lcigpLmFkZENvbnRyb2xMaXN0ZW5lcgorCQkJKG5ldyBDb250cm9sQWRhcHRlcigpIHsKKwkJCQlib29sZWFuIGd1YXJkID0gZmFsc2U7CisJCQkJQE92ZXJyaWRlCisJCQkJcHVibGljIHZvaWQgY29udHJvbFJlc2l6ZWQoQ29udHJvbEV2ZW50IGV2ZW50KSB7CisJCQkJCWlmICghZ3VhcmQpIHsKKwkJCQkJCWd1YXJkID0gdHJ1ZTsKKwkJCQkJCWhpZGVUYWJzKCk7CisJCQkJCQlndWFyZCA9IGZhbHNlOworCQkJCQl9CisJCQkJfQorCQkJIH0pOworCisJCWdldFNpdGUoKS5nZXRTaGVsbCgpLmdldERpc3BsYXkoKS5hc3luY0V4ZWMKKwkJCShuZXcgUnVubmFibGUoKSB7CisJCQkJIHB1YmxpYyB2b2lkIHJ1bigpIHsKKwkJCQkJIHVwZGF0ZVByb2JsZW1JbmRpY2F0aW9uKCk7CisJCQkJIH0KKwkJCSB9KTsKKwl9CisKKwkvKioKKwkgKiBJZiB0aGVyZSBpcyBqdXN0IG9uZSBwYWdlIGluIHRoZSBtdWx0aS1wYWdlIGVkaXRvciBwYXJ0LAorCSAqIHRoaXMgaGlkZXMgdGhlIHNpbmdsZSB0YWIgYXQgdGhlIGJvdHRvbS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBoaWRlVGFicygpIHsKKwkJaWYgKGdldFBhZ2VDb3VudCgpIDw9IDEpIHsKKwkJCXNldFBhZ2VUZXh0KDAsICIiKTsKKwkJCWlmIChnZXRDb250YWluZXIoKSBpbnN0YW5jZW9mIENUYWJGb2xkZXIpIHsKKwkJCQkoKENUYWJGb2xkZXIpZ2V0Q29udGFpbmVyKCkpLnNldFRhYkhlaWdodCgxKTsKKwkJCQlQb2ludCBwb2ludCA9IGdldENvbnRhaW5lcigpLmdldFNpemUoKTsKKwkJCQlnZXRDb250YWluZXIoKS5zZXRTaXplKHBvaW50LngsIHBvaW50LnkgKyA2KTsKKwkJCX0KKwkJfQorCX0KKworCS8qKgorCSAqIElmIHRoZXJlIGlzIG1vcmUgdGhhbiBvbmUgcGFnZSBpbiB0aGUgbXVsdGktcGFnZSBlZGl0b3IgcGFydCwKKwkgKiB0aGlzIHNob3dzIHRoZSB0YWJzIGF0IHRoZSBib3R0b20uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgc2hvd1RhYnMoKSB7CisJCWlmIChnZXRQYWdlQ291bnQoKSA+IDEpIHsKKwkJCXNldFBhZ2VUZXh0KDAsIGdldFN0cmluZygiX1VJX1NlbGVjdGlvblBhZ2VfbGFiZWwiKSk7CisJCQlpZiAoZ2V0Q29udGFpbmVyKCkgaW5zdGFuY2VvZiBDVGFiRm9sZGVyKSB7CisJCQkJKChDVGFiRm9sZGVyKWdldENvbnRhaW5lcigpKS5zZXRUYWJIZWlnaHQoU1dULkRFRkFVTFQpOworCQkJCVBvaW50IHBvaW50ID0gZ2V0Q29udGFpbmVyKCkuZ2V0U2l6ZSgpOworCQkJCWdldENvbnRhaW5lcigpLnNldFNpemUocG9pbnQueCwgcG9pbnQueSAtIDYpOworCQkJfQorCQl9CisJfQorCisJLyoqCisJICogVGhpcyBpcyB1c2VkIHRvIHRyYWNrIHRoZSBhY3RpdmUgdmlld2VyLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIHBhZ2VDaGFuZ2UoaW50IHBhZ2VJbmRleCkgeworCQlzdXBlci5wYWdlQ2hhbmdlKHBhZ2VJbmRleCk7CisKKwkJaWYgKGNvbnRlbnRPdXRsaW5lUGFnZSAhPSBudWxsKSB7CisJCQloYW5kbGVDb250ZW50T3V0bGluZVNlbGVjdGlvbihjb250ZW50T3V0bGluZVBhZ2UuZ2V0U2VsZWN0aW9uKCkpOworCQl9CisJfQorCisJLyoqCisJICogVGhpcyBpcyBob3cgdGhlIGZyYW1ld29yayBkZXRlcm1pbmVzIHdoaWNoIGludGVyZmFjZXMgd2UgaW1wbGVtZW50LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBTdXBwcmVzc1dhcm5pbmdzKCJyYXd0eXBlcyIpCisJQE92ZXJyaWRlCisJcHVibGljIE9iamVjdCBnZXRBZGFwdGVyKENsYXNzIGtleSkgeworCQlpZiAoa2V5LmVxdWFscyhJQ29udGVudE91dGxpbmVQYWdlLmNsYXNzKSkgeworCQkJcmV0dXJuIHNob3dPdXRsaW5lVmlldygpID8gZ2V0Q29udGVudE91dGxpbmVQYWdlKCkgOiBudWxsOworCQl9CisJCWVsc2UgaWYgKGtleS5lcXVhbHMoSVByb3BlcnR5U2hlZXRQYWdlLmNsYXNzKSkgeworCQkJcmV0dXJuIGdldFByb3BlcnR5U2hlZXRQYWdlKCk7CisJCX0KKwkJZWxzZSB7CisJCQlyZXR1cm4gc3VwZXIuZ2V0QWRhcHRlcihrZXkpOworCQl9CisJfQorCisJLyoqCisJICogVGhpcyBhY2Nlc3NlcyBhIGNhY2hlZCB2ZXJzaW9uIG9mIHRoZSBjb250ZW50IG91dGxpbmVyLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBJQ29udGVudE91dGxpbmVQYWdlIGdldENvbnRlbnRPdXRsaW5lUGFnZSgpIHsKKwkJaWYgKGNvbnRlbnRPdXRsaW5lUGFnZSA9PSBudWxsKSB7CisJCQkvLyBUaGUgY29udGVudCBvdXRsaW5lIGlzIGp1c3QgYSB0cmVlLgorCQkJLy8KKwkJCWNsYXNzIE15Q29udGVudE91dGxpbmVQYWdlIGV4dGVuZHMgQ29udGVudE91dGxpbmVQYWdlIHsKKwkJCQlAT3ZlcnJpZGUKKwkJCQlwdWJsaWMgdm9pZCBjcmVhdGVDb250cm9sKENvbXBvc2l0ZSBwYXJlbnQpIHsKKwkJCQkJc3VwZXIuY3JlYXRlQ29udHJvbChwYXJlbnQpOworCQkJCQljb250ZW50T3V0bGluZVZpZXdlciA9IGdldFRyZWVWaWV3ZXIoKTsKKwkJCQkJY29udGVudE91dGxpbmVWaWV3ZXIuYWRkU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyKHRoaXMpOworCisJCQkJCS8vIFNldCB1cCB0aGUgdHJlZSB2aWV3ZXIuCisJCQkJCS8vCisJCQkJCWNvbnRlbnRPdXRsaW5lVmlld2VyLnNldENvbnRlbnRQcm92aWRlcihuZXcgQWRhcHRlckZhY3RvcnlDb250ZW50UHJvdmlkZXIoYWRhcHRlckZhY3RvcnkpKTsKKwkJCQkJY29udGVudE91dGxpbmVWaWV3ZXIuc2V0TGFiZWxQcm92aWRlcihuZXcgQWRhcHRlckZhY3RvcnlMYWJlbFByb3ZpZGVyKGFkYXB0ZXJGYWN0b3J5KSk7CisJCQkJCWNvbnRlbnRPdXRsaW5lVmlld2VyLnNldElucHV0KGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKSk7CisKKwkJCQkJLy8gTWFrZSBzdXJlIG91ciBwb3B1cHMgd29yay4KKwkJCQkJLy8KKwkJCQkJY3JlYXRlQ29udGV4dE1lbnVGb3IoY29udGVudE91dGxpbmVWaWV3ZXIpOworCisJCQkJCWlmICghZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpLmdldFJlc291cmNlcygpLmlzRW1wdHkoKSkgeworCQkJCQkgIC8vIFNlbGVjdCB0aGUgcm9vdCBvYmplY3QgaW4gdGhlIHZpZXcuCisJCQkJCSAgLy8KKwkJCQkJICBjb250ZW50T3V0bGluZVZpZXdlci5zZXRTZWxlY3Rpb24obmV3IFN0cnVjdHVyZWRTZWxlY3Rpb24oZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpLmdldFJlc291cmNlcygpLmdldCgwKSksIHRydWUpOworCQkJCQl9CisJCQkJfQorCisJCQkJQE92ZXJyaWRlCisJCQkJcHVibGljIHZvaWQgbWFrZUNvbnRyaWJ1dGlvbnMoSU1lbnVNYW5hZ2VyIG1lbnVNYW5hZ2VyLCBJVG9vbEJhck1hbmFnZXIgdG9vbEJhck1hbmFnZXIsIElTdGF0dXNMaW5lTWFuYWdlciBzdGF0dXNMaW5lTWFuYWdlcikgeworCQkJCQlzdXBlci5tYWtlQ29udHJpYnV0aW9ucyhtZW51TWFuYWdlciwgdG9vbEJhck1hbmFnZXIsIHN0YXR1c0xpbmVNYW5hZ2VyKTsKKwkJCQkJY29udGVudE91dGxpbmVTdGF0dXNMaW5lTWFuYWdlciA9IHN0YXR1c0xpbmVNYW5hZ2VyOworCQkJCX0KKworCQkJCUBPdmVycmlkZQorCQkJCXB1YmxpYyB2b2lkIHNldEFjdGlvbkJhcnMoSUFjdGlvbkJhcnMgYWN0aW9uQmFycykgeworCQkJCQlzdXBlci5zZXRBY3Rpb25CYXJzKGFjdGlvbkJhcnMpOworCQkJCQlnZXRBY3Rpb25CYXJDb250cmlidXRvcigpLnNoYXJlR2xvYmFsQWN0aW9ucyh0aGlzLCBhY3Rpb25CYXJzKTsKKwkJCQl9CisJCQl9CisKKwkJCWNvbnRlbnRPdXRsaW5lUGFnZSA9IG5ldyBNeUNvbnRlbnRPdXRsaW5lUGFnZSgpOworCisJCQkvLyBMaXN0ZW4gdG8gc2VsZWN0aW9uIHNvIHRoYXQgd2UgY2FuIGhhbmRsZSBpdCBpcyBhIHNwZWNpYWwgd2F5LgorCQkJLy8KKwkJCWNvbnRlbnRPdXRsaW5lUGFnZS5hZGRTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIKKwkJCQkobmV3IElTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIoKSB7CisJCQkJCSAvLyBUaGlzIGVuc3VyZXMgdGhhdCB3ZSBoYW5kbGUgc2VsZWN0aW9ucyBjb3JyZWN0bHkuCisJCQkJCSAvLworCQkJCQkgcHVibGljIHZvaWQgc2VsZWN0aW9uQ2hhbmdlZChTZWxlY3Rpb25DaGFuZ2VkRXZlbnQgZXZlbnQpIHsKKwkJCQkJCSBoYW5kbGVDb250ZW50T3V0bGluZVNlbGVjdGlvbihldmVudC5nZXRTZWxlY3Rpb24oKSk7CisJCQkJCSB9CisJCQkJIH0pOworCQl9CisKKwkJcmV0dXJuIGNvbnRlbnRPdXRsaW5lUGFnZTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFjY2Vzc2VzIGEgY2FjaGVkIHZlcnNpb24gb2YgdGhlIHByb3BlcnR5IHNoZWV0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBJUHJvcGVydHlTaGVldFBhZ2UgZ2V0UHJvcGVydHlTaGVldFBhZ2UoKSB7CisJCWlmIChwcm9wZXJ0eVNoZWV0UGFnZSA9PSBudWxsKSB7CisJCQlwcm9wZXJ0eVNoZWV0UGFnZSA9CisJCQkJbmV3IEV4dGVuZGVkUHJvcGVydHlTaGVldFBhZ2UoZWRpdGluZ0RvbWFpbikgeworCQkJCQlAT3ZlcnJpZGUKKwkJCQkJcHVibGljIHZvaWQgc2V0U2VsZWN0aW9uVG9WaWV3ZXIoTGlzdDw/PiBzZWxlY3Rpb24pIHsKKwkJCQkJCVNpbXVsYXRpb25Mb2dnZXJFZGl0b3IudGhpcy5zZXRTZWxlY3Rpb25Ub1ZpZXdlcihzZWxlY3Rpb24pOworCQkJCQkJU2ltdWxhdGlvbkxvZ2dlckVkaXRvci50aGlzLnNldEZvY3VzKCk7CisJCQkJCX0KKworCQkJCQlAT3ZlcnJpZGUKKwkJCQkJcHVibGljIHZvaWQgc2V0QWN0aW9uQmFycyhJQWN0aW9uQmFycyBhY3Rpb25CYXJzKSB7CisJCQkJCQlzdXBlci5zZXRBY3Rpb25CYXJzKGFjdGlvbkJhcnMpOworCQkJCQkJZ2V0QWN0aW9uQmFyQ29udHJpYnV0b3IoKS5zaGFyZUdsb2JhbEFjdGlvbnModGhpcywgYWN0aW9uQmFycyk7CisJCQkJCX0KKwkJCQl9OworCQkJcHJvcGVydHlTaGVldFBhZ2Uuc2V0UHJvcGVydHlTb3VyY2VQcm92aWRlcihuZXcgQWRhcHRlckZhY3RvcnlDb250ZW50UHJvdmlkZXIoYWRhcHRlckZhY3RvcnkpKTsKKwkJfQorCisJCXJldHVybiBwcm9wZXJ0eVNoZWV0UGFnZTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGRlYWxzIHdpdGggaG93IHdlIHdhbnQgc2VsZWN0aW9uIGluIHRoZSBvdXRsaW5lciB0byBhZmZlY3QgdGhlIG90aGVyIHZpZXdzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIGhhbmRsZUNvbnRlbnRPdXRsaW5lU2VsZWN0aW9uKElTZWxlY3Rpb24gc2VsZWN0aW9uKSB7CisJCWlmIChjdXJyZW50Vmlld2VyUGFuZSAhPSBudWxsICYmICFzZWxlY3Rpb24uaXNFbXB0eSgpICYmIHNlbGVjdGlvbiBpbnN0YW5jZW9mIElTdHJ1Y3R1cmVkU2VsZWN0aW9uKSB7CisJCQlJdGVyYXRvcjw/PiBzZWxlY3RlZEVsZW1lbnRzID0gKChJU3RydWN0dXJlZFNlbGVjdGlvbilzZWxlY3Rpb24pLml0ZXJhdG9yKCk7CisJCQlpZiAoc2VsZWN0ZWRFbGVtZW50cy5oYXNOZXh0KCkpIHsKKwkJCQkvLyBHZXQgdGhlIGZpcnN0IHNlbGVjdGVkIGVsZW1lbnQuCisJCQkJLy8KKwkJCQlPYmplY3Qgc2VsZWN0ZWRFbGVtZW50ID0gc2VsZWN0ZWRFbGVtZW50cy5uZXh0KCk7CisKKwkJCQkvLyBJZiBpdCdzIHRoZSBzZWxlY3Rpb24gdmlld2VyLCB0aGVuIHdlIHdhbnQgaXQgdG8gc2VsZWN0IHRoZSBzYW1lIHNlbGVjdGlvbiBhcyB0aGlzIHNlbGVjdGlvbi4KKwkJCQkvLworCQkJCWlmIChjdXJyZW50Vmlld2VyUGFuZS5nZXRWaWV3ZXIoKSA9PSBzZWxlY3Rpb25WaWV3ZXIpIHsKKwkJCQkJQXJyYXlMaXN0PE9iamVjdD4gc2VsZWN0aW9uTGlzdCA9IG5ldyBBcnJheUxpc3Q8T2JqZWN0PigpOworCQkJCQlzZWxlY3Rpb25MaXN0LmFkZChzZWxlY3RlZEVsZW1lbnQpOworCQkJCQl3aGlsZSAoc2VsZWN0ZWRFbGVtZW50cy5oYXNOZXh0KCkpIHsKKwkJCQkJCXNlbGVjdGlvbkxpc3QuYWRkKHNlbGVjdGVkRWxlbWVudHMubmV4dCgpKTsKKwkJCQkJfQorCisJCQkJCS8vIFNldCB0aGUgc2VsZWN0aW9uIHRvIHRoZSB3aWRnZXQuCisJCQkJCS8vCisJCQkJCXNlbGVjdGlvblZpZXdlci5zZXRTZWxlY3Rpb24obmV3IFN0cnVjdHVyZWRTZWxlY3Rpb24oc2VsZWN0aW9uTGlzdCkpOworCQkJCX0KKwkJCQllbHNlIHsKKwkJCQkJLy8gU2V0IHRoZSBpbnB1dCB0byB0aGUgd2lkZ2V0LgorCQkJCQkvLworCQkJCQlpZiAoY3VycmVudFZpZXdlclBhbmUuZ2V0Vmlld2VyKCkuZ2V0SW5wdXQoKSAhPSBzZWxlY3RlZEVsZW1lbnQpIHsKKwkJCQkJCWN1cnJlbnRWaWV3ZXJQYW5lLmdldFZpZXdlcigpLnNldElucHV0KHNlbGVjdGVkRWxlbWVudCk7CisJCQkJCQljdXJyZW50Vmlld2VyUGFuZS5zZXRUaXRsZShzZWxlY3RlZEVsZW1lbnQpOworCQkJCQl9CisJCQkJfQorCQkJfQorCQl9CisJfQorCisJLyoqCisJICogVGhpcyBpcyBmb3IgaW1wbGVtZW50aW5nIHtAbGluayBJRWRpdG9yUGFydH0gYW5kIHNpbXBseSB0ZXN0cyB0aGUgY29tbWFuZCBzdGFjay4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgYm9vbGVhbiBpc0RpcnR5KCkgeworCQlyZXR1cm4gKChCYXNpY0NvbW1hbmRTdGFjayllZGl0aW5nRG9tYWluLmdldENvbW1hbmRTdGFjaygpKS5pc1NhdmVOZWVkZWQoKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGlzIGZvciBpbXBsZW1lbnRpbmcge0BsaW5rIElFZGl0b3JQYXJ0fSBhbmQgc2ltcGx5IHNhdmVzIHRoZSBtb2RlbCBmaWxlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGRvU2F2ZShJUHJvZ3Jlc3NNb25pdG9yIHByb2dyZXNzTW9uaXRvcikgeworCQkvLyBTYXZlIG9ubHkgcmVzb3VyY2VzIHRoYXQgaGF2ZSBhY3R1YWxseSBjaGFuZ2VkLgorCQkvLworCQlmaW5hbCBNYXA8T2JqZWN0LCBPYmplY3Q+IHNhdmVPcHRpb25zID0gbmV3IEhhc2hNYXA8T2JqZWN0LCBPYmplY3Q+KCk7CisJCXNhdmVPcHRpb25zLnB1dChSZXNvdXJjZS5PUFRJT05fU0FWRV9PTkxZX0lGX0NIQU5HRUQsIFJlc291cmNlLk9QVElPTl9TQVZFX09OTFlfSUZfQ0hBTkdFRF9NRU1PUllfQlVGRkVSKTsKKworCQkvLyBEbyB0aGUgd29yayB3aXRoaW4gYW4gb3BlcmF0aW9uIGJlY2F1c2UgdGhpcyBpcyBhIGxvbmcgcnVubmluZyBhY3Rpdml0eSB0aGF0IG1vZGlmaWVzIHRoZSB3b3JrYmVuY2guCisJCS8vCisJCUlSdW5uYWJsZVdpdGhQcm9ncmVzcyBvcGVyYXRpb24gPQorCQkJbmV3IElSdW5uYWJsZVdpdGhQcm9ncmVzcygpIHsKKwkJCQkvLyBUaGlzIGlzIHRoZSBtZXRob2QgdGhhdCBnZXRzIGludm9rZWQgd2hlbiB0aGUgb3BlcmF0aW9uIHJ1bnMuCisJCQkJLy8KKwkJCQlwdWJsaWMgdm9pZCBydW4oSVByb2dyZXNzTW9uaXRvciBtb25pdG9yKSB7CisJCQkJCS8vIFNhdmUgdGhlIHJlc291cmNlcyB0byB0aGUgZmlsZSBzeXN0ZW0uCisJCQkJCS8vCisJCQkJCWJvb2xlYW4gZmlyc3QgPSB0cnVlOworCQkJCQlmb3IgKFJlc291cmNlIHJlc291cmNlIDogZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpLmdldFJlc291cmNlcygpKSB7CisJCQkJCQlpZiAoKGZpcnN0IHx8ICFyZXNvdXJjZS5nZXRDb250ZW50cygpLmlzRW1wdHkoKSB8fCBpc1BlcnNpc3RlZChyZXNvdXJjZSkpICYmICFlZGl0aW5nRG9tYWluLmlzUmVhZE9ubHkocmVzb3VyY2UpKSB7CisJCQkJCQkJdHJ5IHsKKwkJCQkJCQkJbG9uZyB0aW1lU3RhbXAgPSByZXNvdXJjZS5nZXRUaW1lU3RhbXAoKTsKKwkJCQkJCQkJcmVzb3VyY2Uuc2F2ZShzYXZlT3B0aW9ucyk7CisJCQkJCQkJCWlmIChyZXNvdXJjZS5nZXRUaW1lU3RhbXAoKSAhPSB0aW1lU3RhbXApIHsKKwkJCQkJCQkJCXNhdmVkUmVzb3VyY2VzLmFkZChyZXNvdXJjZSk7CisJCQkJCQkJCX0KKwkJCQkJCQl9CisJCQkJCQkJY2F0Y2ggKEV4Y2VwdGlvbiBleGNlcHRpb24pIHsKKwkJCQkJCQkJcmVzb3VyY2VUb0RpYWdub3N0aWNNYXAucHV0KHJlc291cmNlLCBhbmFseXplUmVzb3VyY2VQcm9ibGVtcyhyZXNvdXJjZSwgZXhjZXB0aW9uKSk7CisJCQkJCQkJfQorCQkJCQkJCWZpcnN0ID0gZmFsc2U7CisJCQkJCQl9CisJCQkJCX0KKwkJCQl9CisJCQl9OworCisJCXVwZGF0ZVByb2JsZW1JbmRpY2F0aW9uID0gZmFsc2U7CisJCXRyeSB7CisJCQkvLyBUaGlzIHJ1bnMgdGhlIG9wdGlvbnMsIGFuZCBzaG93cyBwcm9ncmVzcy4KKwkJCS8vCisJCQluZXcgUHJvZ3Jlc3NNb25pdG9yRGlhbG9nKGdldFNpdGUoKS5nZXRTaGVsbCgpKS5ydW4odHJ1ZSwgZmFsc2UsIG9wZXJhdGlvbik7CisKKwkJCS8vIFJlZnJlc2ggdGhlIG5lY2Vzc2FyeSBzdGF0ZS4KKwkJCS8vCisJCQkoKEJhc2ljQ29tbWFuZFN0YWNrKWVkaXRpbmdEb21haW4uZ2V0Q29tbWFuZFN0YWNrKCkpLnNhdmVJc0RvbmUoKTsKKwkJCWZpcmVQcm9wZXJ0eUNoYW5nZShJRWRpdG9yUGFydC5QUk9QX0RJUlRZKTsKKwkJfQorCQljYXRjaCAoRXhjZXB0aW9uIGV4Y2VwdGlvbikgeworCQkJLy8gU29tZXRoaW5nIHdlbnQgd3JvbmcgdGhhdCBzaG91bGRuJ3QuCisJCQkvLworCQkJU2ltdWxhdGlvbkxvZ2dlckVkaXRQbHVnaW4uSU5TVEFOQ0UubG9nKGV4Y2VwdGlvbik7CisJCX0KKwkJdXBkYXRlUHJvYmxlbUluZGljYXRpb24gPSB0cnVlOworCQl1cGRhdGVQcm9ibGVtSW5kaWNhdGlvbigpOworCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyB3aGV0aGVyIHNvbWV0aGluZyBoYXMgYmVlbiBwZXJzaXN0ZWQgdG8gdGhlIFVSSSBvZiB0aGUgc3BlY2lmaWVkIHJlc291cmNlLgorCSAqIFRoZSBpbXBsZW1lbnRhdGlvbiB1c2VzIHRoZSBVUkkgY29udmVydGVyIGZyb20gdGhlIGVkaXRvcidzIHJlc291cmNlIHNldCB0byB0cnkgdG8gb3BlbiBhbiBpbnB1dCBzdHJlYW0uIAorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBib29sZWFuIGlzUGVyc2lzdGVkKFJlc291cmNlIHJlc291cmNlKSB7CisJCWJvb2xlYW4gcmVzdWx0ID0gZmFsc2U7CisJCXRyeSB7CisJCQlJbnB1dFN0cmVhbSBzdHJlYW0gPSBlZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkuZ2V0VVJJQ29udmVydGVyKCkuY3JlYXRlSW5wdXRTdHJlYW0ocmVzb3VyY2UuZ2V0VVJJKCkpOworCQkJaWYgKHN0cmVhbSAhPSBudWxsKSB7CisJCQkJcmVzdWx0ID0gdHJ1ZTsKKwkJCQlzdHJlYW0uY2xvc2UoKTsKKwkJCX0KKwkJfQorCQljYXRjaCAoSU9FeGNlcHRpb24gZSkgeworCQkJLy8gSWdub3JlCisJCX0KKwkJcmV0dXJuIHJlc3VsdDsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFsd2F5cyByZXR1cm5zIHRydWUgYmVjYXVzZSBpdCBpcyBub3QgY3VycmVudGx5IHN1cHBvcnRlZC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgYm9vbGVhbiBpc1NhdmVBc0FsbG93ZWQoKSB7CisJCXJldHVybiB0cnVlOworCX0KKworCS8qKgorCSAqIFRoaXMgYWxzbyBjaGFuZ2VzIHRoZSBlZGl0b3IncyBpbnB1dC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBkb1NhdmVBcygpIHsKKwkJU3RyaW5nW10gZmlsdGVycyA9IEZJTEVfRVhURU5TSU9OX0ZJTFRFUlMudG9BcnJheShuZXcgU3RyaW5nW0ZJTEVfRVhURU5TSU9OX0ZJTFRFUlMuc2l6ZSgpXSk7CisJCVN0cmluZ1tdIGZpbGVzID0gc2ltdWxhdGlvbmxvZ2dlckVkaXRvckFkdmlzb3Iub3BlbkZpbGVQYXRoRGlhbG9nKGdldFNpdGUoKS5nZXRTaGVsbCgpLCBTV1QuU0FWRSwgZmlsdGVycyk7CisJCWlmIChmaWxlcy5sZW5ndGggPiAwKSB7CisJCQlVUkkgdXJpID0gVVJJLmNyZWF0ZUZpbGVVUkkoZmlsZXNbMF0pOworCQkJZG9TYXZlQXModXJpLCBuZXcgVVJJRWRpdG9ySW5wdXQodXJpKSk7CisJCX0KKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBkb1NhdmVBcyhVUkkgdXJpLCBJRWRpdG9ySW5wdXQgZWRpdG9ySW5wdXQpIHsKKwkJKGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKS5nZXRSZXNvdXJjZXMoKS5nZXQoMCkpLnNldFVSSSh1cmkpOworCQlzZXRJbnB1dFdpdGhOb3RpZnkoZWRpdG9ySW5wdXQpOworCQlzZXRQYXJ0TmFtZShlZGl0b3JJbnB1dC5nZXROYW1lKCkpOworCQlJUHJvZ3Jlc3NNb25pdG9yIHByb2dyZXNzTW9uaXRvciA9CisJCQlnZXRBY3Rpb25CYXJzKCkuZ2V0U3RhdHVzTGluZU1hbmFnZXIoKSAhPSBudWxsID8KKwkJCQlnZXRBY3Rpb25CYXJzKCkuZ2V0U3RhdHVzTGluZU1hbmFnZXIoKS5nZXRQcm9ncmVzc01vbml0b3IoKSA6CisJCQkJbmV3IE51bGxQcm9ncmVzc01vbml0b3IoKTsKKwkJZG9TYXZlKHByb2dyZXNzTW9uaXRvcik7CisJfQorCisJLyoqCisJICogVGhpcyBpcyBjYWxsZWQgZHVyaW5nIHN0YXJ0dXAuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgaW5pdChJRWRpdG9yU2l0ZSBzaXRlLCBJRWRpdG9ySW5wdXQgZWRpdG9ySW5wdXQpIHsKKwkJc2V0U2l0ZShzaXRlKTsKKwkJc2V0SW5wdXRXaXRoTm90aWZ5KGVkaXRvcklucHV0KTsKKwkJc2V0UGFydE5hbWUoZWRpdG9ySW5wdXQuZ2V0TmFtZSgpKTsKKwkJc2l0ZS5zZXRTZWxlY3Rpb25Qcm92aWRlcih0aGlzKTsKKwkJc2l0ZS5nZXRQYWdlKCkuYWRkUGFydExpc3RlbmVyKHBhcnRMaXN0ZW5lcik7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgc2V0Rm9jdXMoKSB7CisJCWlmIChjdXJyZW50Vmlld2VyUGFuZSAhPSBudWxsKSB7CisJCQljdXJyZW50Vmlld2VyUGFuZS5zZXRGb2N1cygpOworCQl9CisJCWVsc2UgeworCQkJZ2V0Q29udHJvbChnZXRBY3RpdmVQYWdlKCkpLnNldEZvY3VzKCk7CisJCX0KKwl9CisKKwkvKioKKwkgKiBUaGlzIGltcGxlbWVudHMge0BsaW5rIG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvblByb3ZpZGVyfS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBhZGRTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIoSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lciBsaXN0ZW5lcikgeworCQlzZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXJzLmFkZChsaXN0ZW5lcik7CisJfQorCisJLyoqCisJICogVGhpcyBpbXBsZW1lbnRzIHtAbGluayBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb25Qcm92aWRlcn0uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgcmVtb3ZlU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyKElTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIgbGlzdGVuZXIpIHsKKwkJc2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVycy5yZW1vdmUobGlzdGVuZXIpOworCX0KKworCS8qKgorCSAqIFRoaXMgaW1wbGVtZW50cyB7QGxpbmsgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uUHJvdmlkZXJ9IHRvIHJldHVybiB0aGlzIGVkaXRvcidzIG92ZXJhbGwgc2VsZWN0aW9uLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBJU2VsZWN0aW9uIGdldFNlbGVjdGlvbigpIHsKKwkJcmV0dXJuIGVkaXRvclNlbGVjdGlvbjsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGltcGxlbWVudHMge0BsaW5rIG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvblByb3ZpZGVyfSB0byBzZXQgdGhpcyBlZGl0b3IncyBvdmVyYWxsIHNlbGVjdGlvbi4KKwkgKiBDYWxsaW5nIHRoaXMgcmVzdWx0IHdpbGwgbm90aWZ5IHRoZSBsaXN0ZW5lcnMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgc2V0U2VsZWN0aW9uKElTZWxlY3Rpb24gc2VsZWN0aW9uKSB7CisJCWVkaXRvclNlbGVjdGlvbiA9IHNlbGVjdGlvbjsKKworCQlmb3IgKElTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIgbGlzdGVuZXIgOiBzZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXJzKSB7CisJCQlsaXN0ZW5lci5zZWxlY3Rpb25DaGFuZ2VkKG5ldyBTZWxlY3Rpb25DaGFuZ2VkRXZlbnQodGhpcywgc2VsZWN0aW9uKSk7CisJCX0KKwkJc2V0U3RhdHVzTGluZU1hbmFnZXIoc2VsZWN0aW9uKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRTdGF0dXNMaW5lTWFuYWdlcihJU2VsZWN0aW9uIHNlbGVjdGlvbikgeworCQlJU3RhdHVzTGluZU1hbmFnZXIgc3RhdHVzTGluZU1hbmFnZXIgPSBjdXJyZW50Vmlld2VyICE9IG51bGwgJiYgY3VycmVudFZpZXdlciA9PSBjb250ZW50T3V0bGluZVZpZXdlciA/CisJCQljb250ZW50T3V0bGluZVN0YXR1c0xpbmVNYW5hZ2VyIDogZ2V0QWN0aW9uQmFycygpLmdldFN0YXR1c0xpbmVNYW5hZ2VyKCk7CisKKwkJaWYgKHN0YXR1c0xpbmVNYW5hZ2VyICE9IG51bGwpIHsKKwkJCWlmIChzZWxlY3Rpb24gaW5zdGFuY2VvZiBJU3RydWN0dXJlZFNlbGVjdGlvbikgeworCQkJCUNvbGxlY3Rpb248Pz4gY29sbGVjdGlvbiA9ICgoSVN0cnVjdHVyZWRTZWxlY3Rpb24pc2VsZWN0aW9uKS50b0xpc3QoKTsKKwkJCQlzd2l0Y2ggKGNvbGxlY3Rpb24uc2l6ZSgpKSB7CisJCQkJCWNhc2UgMDogeworCQkJCQkJc3RhdHVzTGluZU1hbmFnZXIuc2V0TWVzc2FnZShnZXRTdHJpbmcoIl9VSV9Ob09iamVjdFNlbGVjdGVkIikpOworCQkJCQkJYnJlYWs7CisJCQkJCX0KKwkJCQkJY2FzZSAxOiB7CisJCQkJCQlTdHJpbmcgdGV4dCA9IG5ldyBBZGFwdGVyRmFjdG9yeUl0ZW1EZWxlZ2F0b3IoYWRhcHRlckZhY3RvcnkpLmdldFRleHQoY29sbGVjdGlvbi5pdGVyYXRvcigpLm5leHQoKSk7CisJCQkJCQlzdGF0dXNMaW5lTWFuYWdlci5zZXRNZXNzYWdlKGdldFN0cmluZygiX1VJX1NpbmdsZU9iamVjdFNlbGVjdGVkIiwgdGV4dCkpOworCQkJCQkJYnJlYWs7CisJCQkJCX0KKwkJCQkJZGVmYXVsdDogeworCQkJCQkJc3RhdHVzTGluZU1hbmFnZXIuc2V0TWVzc2FnZShnZXRTdHJpbmcoIl9VSV9NdWx0aU9iamVjdFNlbGVjdGVkIiwgSW50ZWdlci50b1N0cmluZyhjb2xsZWN0aW9uLnNpemUoKSkpKTsKKwkJCQkJCWJyZWFrOworCQkJCQl9CisJCQkJfQorCQkJfQorCQkJZWxzZSB7CisJCQkJc3RhdHVzTGluZU1hbmFnZXIuc2V0TWVzc2FnZSgiIik7CisJCQl9CisJCX0KKwl9CisKKwkvKioKKwkgKiBUaGlzIGxvb2tzIHVwIGEgc3RyaW5nIGluIHRoZSBwbHVnaW4ncyBwbHVnaW4ucHJvcGVydGllcyBmaWxlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByaXZhdGUgc3RhdGljIFN0cmluZyBnZXRTdHJpbmcoU3RyaW5nIGtleSkgeworCQlyZXR1cm4gU2ltdWxhdGlvbkxvZ2dlckVkaXRQbHVnaW4uSU5TVEFOQ0UuZ2V0U3RyaW5nKGtleSk7CisJfQorCisJLyoqCisJICogVGhpcyBsb29rcyB1cCBhIHN0cmluZyBpbiBwbHVnaW4ucHJvcGVydGllcywgbWFraW5nIGEgc3Vic3RpdHV0aW9uLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByaXZhdGUgc3RhdGljIFN0cmluZyBnZXRTdHJpbmcoU3RyaW5nIGtleSwgT2JqZWN0IHMxKSB7CisJCXJldHVybiBTaW11bGF0aW9uTG9nZ2VyRWRpdFBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoa2V5LCBuZXcgT2JqZWN0IFtdIHsgczEgfSk7CisJfQorCisJLyoqCisJICogVGhpcyBpbXBsZW1lbnRzIHtAbGluayBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSU1lbnVMaXN0ZW5lcn0gdG8gaGVscCBmaWxsIHRoZSBjb250ZXh0IG1lbnVzIHdpdGggY29udHJpYnV0aW9ucyBmcm9tIHRoZSBFZGl0IG1lbnUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgbWVudUFib3V0VG9TaG93KElNZW51TWFuYWdlciBtZW51TWFuYWdlcikgeworCQkoKElNZW51TGlzdGVuZXIpZ2V0RWRpdG9yU2l0ZSgpLmdldEFjdGlvbkJhckNvbnRyaWJ1dG9yKCkpLm1lbnVBYm91dFRvU2hvdyhtZW51TWFuYWdlcik7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVkaXRpbmdEb21haW5BY3Rpb25CYXJDb250cmlidXRvciBnZXRBY3Rpb25CYXJDb250cmlidXRvcigpIHsKKwkJcmV0dXJuIChFZGl0aW5nRG9tYWluQWN0aW9uQmFyQ29udHJpYnV0b3IpZ2V0RWRpdG9yU2l0ZSgpLmdldEFjdGlvbkJhckNvbnRyaWJ1dG9yKCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIElBY3Rpb25CYXJzIGdldEFjdGlvbkJhcnMoKSB7CisJCXJldHVybiBnZXRBY3Rpb25CYXJDb250cmlidXRvcigpLmdldEFjdGlvbkJhcnMoKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQWRhcHRlckZhY3RvcnkgZ2V0QWRhcHRlckZhY3RvcnkoKSB7CisJCXJldHVybiBhZGFwdGVyRmFjdG9yeTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBkaXNwb3NlKCkgeworCQl1cGRhdGVQcm9ibGVtSW5kaWNhdGlvbiA9IGZhbHNlOworCisJCWdldFNpdGUoKS5nZXRQYWdlKCkucmVtb3ZlUGFydExpc3RlbmVyKHBhcnRMaXN0ZW5lcik7CisKKwkJYWRhcHRlckZhY3RvcnkuZGlzcG9zZSgpOworCisJCWlmIChnZXRBY3Rpb25CYXJDb250cmlidXRvcigpLmdldEFjdGl2ZUVkaXRvcigpID09IHRoaXMpIHsKKwkJCWdldEFjdGlvbkJhckNvbnRyaWJ1dG9yKCkuc2V0QWN0aXZlRWRpdG9yKG51bGwpOworCQl9CisKKwkJaWYgKHByb3BlcnR5U2hlZXRQYWdlICE9IG51bGwpIHsKKwkJCXByb3BlcnR5U2hlZXRQYWdlLmRpc3Bvc2UoKTsKKwkJfQorCisJCWlmIChjb250ZW50T3V0bGluZVBhZ2UgIT0gbnVsbCkgeworCQkJY29udGVudE91dGxpbmVQYWdlLmRpc3Bvc2UoKTsKKwkJfQorCisJCXN1cGVyLmRpc3Bvc2UoKTsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHdoZXRoZXIgdGhlIG91dGxpbmUgdmlldyBzaG91bGQgYmUgcHJlc2VudGVkIHRvIHRoZSB1c2VyLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBib29sZWFuIHNob3dPdXRsaW5lVmlldygpIHsKKwkJcmV0dXJuIHRydWU7CisJfQorfQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vbG9nZ2Vycy9wcmVzZW50YXRpb24vU2ltdWxhdGlvbkxvZ2dlck1vZGVsV2l6YXJkLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9sb2dnZXJzL3ByZXNlbnRhdGlvbi9TaW11bGF0aW9uTG9nZ2VyTW9kZWxXaXphcmQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMGZiYzA3Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vbG9nZ2Vycy9wcmVzZW50YXRpb24vU2ltdWxhdGlvbkxvZ2dlck1vZGVsV2l6YXJkLmphdmEKQEAgLTAsMCArMSw1ODggQEAKKy8qKgorICogPGNvcHlyaWdodD4KKyAqIDwvY29weXJpZ2h0PgorICoKKyAqICRJZCQKKyAqLworcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMucHJlc2VudGF0aW9uOworCisKK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OworaW1wb3J0IGphdmEudXRpbC5BcnJheXM7CitpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247CitpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb25zOworaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOworaW1wb3J0IGphdmEudXRpbC5MaXN0OworaW1wb3J0IGphdmEudXRpbC5NYXA7CitpbXBvcnQgamF2YS51dGlsLk1pc3NpbmdSZXNvdXJjZUV4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLnV0aWwuU3RyaW5nVG9rZW5pemVyOworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlVSSTsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzc2lmaWVyOworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnJlc291cmNlLlJlc291cmNlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5yZXNvdXJjZS5SZXNvdXJjZVNldDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5yZXNvdXJjZS5pbXBsLlJlc291cmNlU2V0SW1wbDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0OworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnhtaS5YTUxSZXNvdXJjZTsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLnByb3ZpZGVyLkV4dGVuZGVkSW1hZ2VSZWdpc3RyeTsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUHJvZ3Jlc3NNb25pdG9yOworCitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuZGlhbG9ncy5NZXNzYWdlRGlhbG9nOworCitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU3RydWN0dXJlZFNlbGVjdGlvbjsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLndpemFyZC5XaXphcmQ7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uud2l6YXJkLldpemFyZFBhZ2U7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuU1dUOworCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5Nb2RpZnlMaXN0ZW5lcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLk1vZGlmeUV2ZW50OworCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5HcmlkRGF0YTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QubGF5b3V0LkdyaWRMYXlvdXQ7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21ibzsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuTGFiZWw7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5JTmV3V2l6YXJkOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2g7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMuU2ltdWxhdGlvbkxvZ2dlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzLlNpbXVsYXRpb25Mb2dnZXJQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy5wcm92aWRlci5TaW11bGF0aW9uTG9nZ2VyRWRpdFBsdWdpbjsKKworCitpbXBvcnQgamF2YS5pby5GaWxlOworCitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uub3BlcmF0aW9uLklSdW5uYWJsZVdpdGhQcm9ncmVzczsKKworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy5wcm92aWRlci5zaW11bGF0aW9ubG9nZ2VyRWRpdG9yQWR2aXNvcjsKKworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuU2VsZWN0aW9uQWRhcHRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLlNlbGVjdGlvbkV2ZW50OworCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQnV0dG9uOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlRleHQ7CisKKworLyoqCisgKiBUaGlzIGlzIGEgc2ltcGxlIHdpemFyZCBmb3IgY3JlYXRpbmcgYSBuZXcgbW9kZWwgZmlsZS4KKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIFNpbXVsYXRpb25Mb2dnZXJNb2RlbFdpemFyZCBleHRlbmRzIFdpemFyZCBpbXBsZW1lbnRzIElOZXdXaXphcmQgeworCS8qKgorCSAqIFRoZSBzdXBwb3J0ZWQgZXh0ZW5zaW9ucyBmb3IgY3JlYXRlZCBmaWxlcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIExpc3Q8U3RyaW5nPiBGSUxFX0VYVEVOU0lPTlMgPQorCQlDb2xsZWN0aW9ucy51bm1vZGlmaWFibGVMaXN0KEFycmF5cy5hc0xpc3QoU2ltdWxhdGlvbkxvZ2dlckVkaXRQbHVnaW4uSU5TVEFOQ0UuZ2V0U3RyaW5nKCJfVUlfU2ltdWxhdGlvbkxvZ2dlckVkaXRvckZpbGVuYW1lRXh0ZW5zaW9ucyIpLnNwbGl0KCJcXHMqLFxccyoiKSkpOworCisJLyoqCisJICogQSBmb3JtYXR0ZWQgbGlzdCBvZiBzdXBwb3J0ZWQgZmlsZSBleHRlbnNpb25zLCBzdWl0YWJsZSBmb3IgZGlzcGxheS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBGT1JNQVRURURfRklMRV9FWFRFTlNJT05TID0KKwkJU2ltdWxhdGlvbkxvZ2dlckVkaXRQbHVnaW4uSU5TVEFOQ0UuZ2V0U3RyaW5nKCJfVUlfU2ltdWxhdGlvbkxvZ2dlckVkaXRvckZpbGVuYW1lRXh0ZW5zaW9ucyIpLnJlcGxhY2VBbGwoIlxccyosXFxzKiIsICIsICIpOworCisJLyoqCisJICogVGhpcyBjYWNoZXMgYW4gaW5zdGFuY2Ugb2YgdGhlIG1vZGVsIHBhY2thZ2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIFNpbXVsYXRpb25Mb2dnZXJQYWNrYWdlIHNpbXVsYXRpb25Mb2dnZXJQYWNrYWdlID0gU2ltdWxhdGlvbkxvZ2dlclBhY2thZ2UuZUlOU1RBTkNFOworCisJLyoqCisJICogVGhpcyBjYWNoZXMgYW4gaW5zdGFuY2Ugb2YgdGhlIG1vZGVsIGZhY3RvcnkuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIFNpbXVsYXRpb25Mb2dnZXJGYWN0b3J5IHNpbXVsYXRpb25Mb2dnZXJGYWN0b3J5ID0gc2ltdWxhdGlvbkxvZ2dlclBhY2thZ2UuZ2V0U2ltdWxhdGlvbkxvZ2dlckZhY3RvcnkoKTsKKworCS8qKgorCSAqIFRoaXMgaXMgdGhlIGluaXRpYWwgb2JqZWN0IGNyZWF0aW9uIHBhZ2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIFNpbXVsYXRpb25Mb2dnZXJNb2RlbFdpemFyZEluaXRpYWxPYmplY3RDcmVhdGlvblBhZ2UgaW5pdGlhbE9iamVjdENyZWF0aW9uUGFnZTsKKworCS8qKgorCSAqIFJlbWVtYmVyIHRoZSBzZWxlY3Rpb24gZHVyaW5nIGluaXRpYWxpemF0aW9uIGZvciBwb3B1bGF0aW5nIHRoZSBkZWZhdWx0IGNvbnRhaW5lci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgSVN0cnVjdHVyZWRTZWxlY3Rpb24gc2VsZWN0aW9uOworCisJLyoqCisJICogUmVtZW1iZXIgdGhlIHdvcmtiZW5jaCBkdXJpbmcgaW5pdGlhbGl6YXRpb24uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIElXb3JrYmVuY2ggd29ya2JlbmNoOworCisJLyoqCisJICogQ2FjaGVzIHRoZSBuYW1lcyBvZiB0aGUgdHlwZXMgdGhhdCBjYW4gYmUgY3JlYXRlZCBhcyB0aGUgcm9vdCBvYmplY3QuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIExpc3Q8U3RyaW5nPiBpbml0aWFsT2JqZWN0TmFtZXM7CisKKwkvKioKKwkgKiBUaGlzIGp1c3QgcmVjb3JkcyB0aGUgaW5mb3JtYXRpb24uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgaW5pdChJV29ya2JlbmNoIHdvcmtiZW5jaCwgSVN0cnVjdHVyZWRTZWxlY3Rpb24gc2VsZWN0aW9uKSB7CisJCXRoaXMud29ya2JlbmNoID0gd29ya2JlbmNoOworCQl0aGlzLnNlbGVjdGlvbiA9IHNlbGVjdGlvbjsKKwkJc2V0V2luZG93VGl0bGUoU2ltdWxhdGlvbkxvZ2dlckVkaXRQbHVnaW4uSU5TVEFOQ0UuZ2V0U3RyaW5nKCJfVUlfV2l6YXJkX2xhYmVsIikpOworCQlzZXREZWZhdWx0UGFnZUltYWdlRGVzY3JpcHRvcihFeHRlbmRlZEltYWdlUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0SW1hZ2VEZXNjcmlwdG9yKFNpbXVsYXRpb25Mb2dnZXJFZGl0UGx1Z2luLklOU1RBTkNFLmdldEltYWdlKCJmdWxsL3dpemJhbi9OZXdTaW11bGF0aW9uTG9nZ2VyIikpKTsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBuYW1lcyBvZiB0aGUgdHlwZXMgdGhhdCBjYW4gYmUgY3JlYXRlZCBhcyB0aGUgcm9vdCBvYmplY3QuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIENvbGxlY3Rpb248U3RyaW5nPiBnZXRJbml0aWFsT2JqZWN0TmFtZXMoKSB7CisJCWlmIChpbml0aWFsT2JqZWN0TmFtZXMgPT0gbnVsbCkgeworCQkJaW5pdGlhbE9iamVjdE5hbWVzID0gbmV3IEFycmF5TGlzdDxTdHJpbmc+KCk7CisJCQlmb3IgKEVDbGFzc2lmaWVyIGVDbGFzc2lmaWVyIDogc2ltdWxhdGlvbkxvZ2dlclBhY2thZ2UuZ2V0RUNsYXNzaWZpZXJzKCkpIHsKKwkJCQlpZiAoZUNsYXNzaWZpZXIgaW5zdGFuY2VvZiBFQ2xhc3MpIHsKKwkJCQkJRUNsYXNzIGVDbGFzcyA9IChFQ2xhc3MpZUNsYXNzaWZpZXI7CisJCQkJCWlmICghZUNsYXNzLmlzQWJzdHJhY3QoKSkgeworCQkJCQkJaW5pdGlhbE9iamVjdE5hbWVzLmFkZChlQ2xhc3MuZ2V0TmFtZSgpKTsKKwkJCQkJfQorCQkJCX0KKwkJCX0KKwkJCUNvbGxlY3Rpb25zLnNvcnQoaW5pdGlhbE9iamVjdE5hbWVzLCBqYXZhLnRleHQuQ29sbGF0b3IuZ2V0SW5zdGFuY2UoKSk7CisJCX0KKwkJcmV0dXJuIGluaXRpYWxPYmplY3ROYW1lczsKKwl9CisKKwkvKioKKwkgKiBDcmVhdGUgYSBuZXcgbW9kZWwuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIEVPYmplY3QgY3JlYXRlSW5pdGlhbE1vZGVsKCkgeworCQlFQ2xhc3MgZUNsYXNzID0gKEVDbGFzcylzaW11bGF0aW9uTG9nZ2VyUGFja2FnZS5nZXRFQ2xhc3NpZmllcihpbml0aWFsT2JqZWN0Q3JlYXRpb25QYWdlLmdldEluaXRpYWxPYmplY3ROYW1lKCkpOworCQlFT2JqZWN0IHJvb3RPYmplY3QgPSBzaW11bGF0aW9uTG9nZ2VyRmFjdG9yeS5jcmVhdGUoZUNsYXNzKTsKKwkJcmV0dXJuIHJvb3RPYmplY3Q7CisJfQorCisJLyoqCisJICogRG8gdGhlIHdvcmsgYWZ0ZXIgZXZlcnl0aGluZyBpcyBzcGVjaWZpZWQuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIGJvb2xlYW4gcGVyZm9ybUZpbmlzaCgpIHsKKwkJdHJ5IHsKKwkJCS8vIEdldCB0aGUgVVJJIG9mIHRoZSBtb2RlbCBmaWxlLgorCQkJLy8KKwkJCWZpbmFsIFVSSSBmaWxlVVJJID0gZ2V0TW9kZWxVUkkoKTsKKwkJCWlmIChuZXcgRmlsZShmaWxlVVJJLnRvRmlsZVN0cmluZygpKS5leGlzdHMoKSkgeworCQkJCWlmICghTWVzc2FnZURpYWxvZy5vcGVuUXVlc3Rpb24KKwkJCQkJCShnZXRTaGVsbCgpLAorCQkJCQkJIFNpbXVsYXRpb25Mb2dnZXJFZGl0UGx1Z2luLklOU1RBTkNFLmdldFN0cmluZygiX1VJX1F1ZXN0aW9uX3RpdGxlIiksCisJCQkJCQkgU2ltdWxhdGlvbkxvZ2dlckVkaXRQbHVnaW4uSU5TVEFOQ0UuZ2V0U3RyaW5nKCJfV0FSTl9GaWxlQ29uZmxpY3QiLCBuZXcgU3RyaW5nIFtdeyBmaWxlVVJJLnRvRmlsZVN0cmluZygpIH0pKSkgeworCQkJCQlpbml0aWFsT2JqZWN0Q3JlYXRpb25QYWdlLnNlbGVjdEZpbGVGaWVsZCgpOworCQkJCQlyZXR1cm4gZmFsc2U7CisJCQkJfQorCQkJfQorCQkJCisJCQkvLyBEbyB0aGUgd29yayB3aXRoaW4gYW4gb3BlcmF0aW9uLgorCQkJLy8KKwkJCUlSdW5uYWJsZVdpdGhQcm9ncmVzcyBvcGVyYXRpb24gPSBuZXcgSVJ1bm5hYmxlV2l0aFByb2dyZXNzKCkgeworCQkJCXB1YmxpYyB2b2lkIHJ1bihJUHJvZ3Jlc3NNb25pdG9yIHByb2dyZXNzTW9uaXRvcikgeworCQkJCQkJdHJ5IHsKKwkJCQkJCQkvLyBDcmVhdGUgYSByZXNvdXJjZSBzZXQKKwkJCQkJCQkvLworCQkJCQkJCVJlc291cmNlU2V0IHJlc291cmNlU2V0ID0gbmV3IFJlc291cmNlU2V0SW1wbCgpOworCisJCQkJCQkJLy8gQ3JlYXRlIGEgcmVzb3VyY2UgZm9yIHRoaXMgZmlsZS4KKwkJCQkJCQkvLworCQkJCQkJCVJlc291cmNlIHJlc291cmNlID0gcmVzb3VyY2VTZXQuY3JlYXRlUmVzb3VyY2UoZmlsZVVSSSk7CisKKwkJCQkJCQkvLyBBZGQgdGhlIGluaXRpYWwgbW9kZWwgb2JqZWN0IHRvIHRoZSBjb250ZW50cy4KKwkJCQkJCQkvLworCQkJCQkJCUVPYmplY3Qgcm9vdE9iamVjdCA9IGNyZWF0ZUluaXRpYWxNb2RlbCgpOworCQkJCQkJCWlmIChyb290T2JqZWN0ICE9IG51bGwpIHsKKwkJCQkJCQkJcmVzb3VyY2UuZ2V0Q29udGVudHMoKS5hZGQocm9vdE9iamVjdCk7CisJCQkJCQkJfQorCisJCQkJCQkJLy8gU2F2ZSB0aGUgY29udGVudHMgb2YgdGhlIHJlc291cmNlIHRvIHRoZSBmaWxlIHN5c3RlbS4KKwkJCQkJCQkvLworCQkJCQkJCU1hcDxPYmplY3QsIE9iamVjdD4gb3B0aW9ucyA9IG5ldyBIYXNoTWFwPE9iamVjdCwgT2JqZWN0PigpOworCQkJCQkJCW9wdGlvbnMucHV0KFhNTFJlc291cmNlLk9QVElPTl9FTkNPRElORywgaW5pdGlhbE9iamVjdENyZWF0aW9uUGFnZS5nZXRFbmNvZGluZygpKTsKKwkJCQkJCQlyZXNvdXJjZS5zYXZlKG9wdGlvbnMpOworCQkJCQkJfQorCQkJCQkJY2F0Y2ggKEV4Y2VwdGlvbiBleGNlcHRpb24pIHsKKwkJCQkJCQlTaW11bGF0aW9uTG9nZ2VyRWRpdFBsdWdpbi5JTlNUQU5DRS5sb2coZXhjZXB0aW9uKTsKKwkJCQkJCX0KKwkJCQkJCWZpbmFsbHkgeworCQkJCQkJCXByb2dyZXNzTW9uaXRvci5kb25lKCk7CisJCQkJCQl9CisJCQkJCX0KKwkJCQl9OworCisJCQlnZXRDb250YWluZXIoKS5ydW4oZmFsc2UsIGZhbHNlLCBvcGVyYXRpb24pOworCisJCQlyZXR1cm4gc2ltdWxhdGlvbmxvZ2dlckVkaXRvckFkdmlzb3Iub3BlbkVkaXRvcih3b3JrYmVuY2gsIGZpbGVVUkkpOwkJCQorCQl9CisJCWNhdGNoIChFeGNlcHRpb24gZXhjZXB0aW9uKSB7CisJCQlTaW11bGF0aW9uTG9nZ2VyRWRpdFBsdWdpbi5JTlNUQU5DRS5sb2coZXhjZXB0aW9uKTsKKwkJCXJldHVybiBmYWxzZTsKKwkJfQorCX0KKworCS8qKgorCSAqIFRoaXMgaXMgdGhlIHBhZ2Ugd2hlcmUgdGhlIHR5cGUgb2Ygb2JqZWN0IHRvIGNyZWF0ZSBpcyBzZWxlY3RlZC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgY2xhc3MgU2ltdWxhdGlvbkxvZ2dlck1vZGVsV2l6YXJkSW5pdGlhbE9iamVjdENyZWF0aW9uUGFnZSBleHRlbmRzIFdpemFyZFBhZ2UgeworCQkvKioKKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCXByb3RlY3RlZCBUZXh0IGZpbGVGaWVsZDsKKworCQkvKioKKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCXByb3RlY3RlZCBDb21ibyBpbml0aWFsT2JqZWN0RmllbGQ7CisKKwkJLyoqCisJCSAqIEBnZW5lcmF0ZWQKKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqLworCQlwcm90ZWN0ZWQgTGlzdDxTdHJpbmc+IGVuY29kaW5nczsKKworCQkvKioKKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCXByb3RlY3RlZCBDb21ibyBlbmNvZGluZ0ZpZWxkOworCisJCS8qKgorCQkgKiBQYXNzIGluIHRoZSBzZWxlY3Rpb24uCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlwdWJsaWMgU2ltdWxhdGlvbkxvZ2dlck1vZGVsV2l6YXJkSW5pdGlhbE9iamVjdENyZWF0aW9uUGFnZShTdHJpbmcgcGFnZUlkKSB7CisJCQlzdXBlcihwYWdlSWQpOworCQl9CisKKwkJLyoqCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlwdWJsaWMgdm9pZCBjcmVhdGVDb250cm9sKENvbXBvc2l0ZSBwYXJlbnQpIHsKKwkJCUNvbXBvc2l0ZSBjb21wb3NpdGUgPSBuZXcgQ29tcG9zaXRlKHBhcmVudCwgU1dULk5PTkUpOyB7CisJCQkJR3JpZExheW91dCBsYXlvdXQgPSBuZXcgR3JpZExheW91dCgpOworCQkJCWxheW91dC5udW1Db2x1bW5zID0gMTsKKwkJCQlsYXlvdXQudmVydGljYWxTcGFjaW5nID0gMTI7CisJCQkJY29tcG9zaXRlLnNldExheW91dChsYXlvdXQpOworCisJCQkJR3JpZERhdGEgZGF0YSA9IG5ldyBHcmlkRGF0YSgpOworCQkJCWRhdGEudmVydGljYWxBbGlnbm1lbnQgPSBHcmlkRGF0YS5GSUxMOworCQkJCWRhdGEuZ3JhYkV4Y2Vzc1ZlcnRpY2FsU3BhY2UgPSB0cnVlOworCQkJCWRhdGEuaG9yaXpvbnRhbEFsaWdubWVudCA9IEdyaWREYXRhLkZJTEw7CisJCQkJY29tcG9zaXRlLnNldExheW91dERhdGEoZGF0YSk7CisJCQl9CisJCQkKKwkJCUxhYmVsIHJlc291cmNlVVJJTGFiZWwgPSBuZXcgTGFiZWwoY29tcG9zaXRlLCBTV1QuTEVGVCk7CisJCQl7CisJCQkJcmVzb3VyY2VVUklMYWJlbC5zZXRUZXh0KFNpbXVsYXRpb25Mb2dnZXJFZGl0UGx1Z2luLklOU1RBTkNFLmdldFN0cmluZygiX1VJX0ZpbGVfbGFiZWwiKSk7CisKKwkJCQlHcmlkRGF0YSBkYXRhID0gbmV3IEdyaWREYXRhKCk7CisJCQkJZGF0YS5ob3Jpem9udGFsQWxpZ25tZW50ID0gR3JpZERhdGEuRklMTDsKKwkJCQlyZXNvdXJjZVVSSUxhYmVsLnNldExheW91dERhdGEoZGF0YSk7CisJCQl9CisKKwkJCUNvbXBvc2l0ZSBmaWxlQ29tcG9zaXRlID0gbmV3IENvbXBvc2l0ZShjb21wb3NpdGUsIFNXVC5OT05FKTsKKwkJCXsKKwkJCQlHcmlkRGF0YSBkYXRhID0gbmV3IEdyaWREYXRhKCk7CisJCQkJZGF0YS5ob3Jpem9udGFsQWxpZ25tZW50ID0gR3JpZERhdGEuRU5EOworCQkJCWZpbGVDb21wb3NpdGUuc2V0TGF5b3V0RGF0YShkYXRhKTsKKworCQkJCUdyaWRMYXlvdXQgbGF5b3V0ID0gbmV3IEdyaWRMYXlvdXQoKTsKKwkJCQlkYXRhLmhvcml6b250YWxBbGlnbm1lbnQgPSBHcmlkRGF0YS5GSUxMOworCQkJCWxheW91dC5tYXJnaW5IZWlnaHQgPSAwOworCQkJCWxheW91dC5tYXJnaW5XaWR0aCA9IDA7CisJCQkJbGF5b3V0Lm51bUNvbHVtbnMgPSAyOworCQkJCWZpbGVDb21wb3NpdGUuc2V0TGF5b3V0KGxheW91dCk7CisJCQl9CisKKwkJCWZpbGVGaWVsZCA9IG5ldyBUZXh0KGZpbGVDb21wb3NpdGUsIFNXVC5CT1JERVIpOworCQkJeworCQkJCUdyaWREYXRhIGRhdGEgPSBuZXcgR3JpZERhdGEoKTsKKwkJCQlkYXRhLmhvcml6b250YWxBbGlnbm1lbnQgPSBHcmlkRGF0YS5GSUxMOworCQkJCWRhdGEuZ3JhYkV4Y2Vzc0hvcml6b250YWxTcGFjZSA9IHRydWU7CisJCQkJZGF0YS5ob3Jpem9udGFsU3BhbiA9IDE7CisJCQkJZmlsZUZpZWxkLnNldExheW91dERhdGEoZGF0YSk7CisJCQl9CisKKwkJCWZpbGVGaWVsZC5hZGRNb2RpZnlMaXN0ZW5lcih2YWxpZGF0b3IpOworCisJCQlCdXR0b24gcmVzb3VyY2VVUklCcm93c2VGaWxlU3lzdGVtQnV0dG9uID0gbmV3IEJ1dHRvbihmaWxlQ29tcG9zaXRlLCBTV1QuUFVTSCk7CisJCQlyZXNvdXJjZVVSSUJyb3dzZUZpbGVTeXN0ZW1CdXR0b24uc2V0VGV4dChTaW11bGF0aW9uTG9nZ2VyRWRpdFBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoIl9VSV9Ccm93c2VfbGFiZWwiKSk7CisKKwkJCXJlc291cmNlVVJJQnJvd3NlRmlsZVN5c3RlbUJ1dHRvbi5hZGRTZWxlY3Rpb25MaXN0ZW5lcgorCQkJCShuZXcgU2VsZWN0aW9uQWRhcHRlcigpIHsKKwkJCQkJIEBPdmVycmlkZQorCQkJCQkgcHVibGljIHZvaWQgd2lkZ2V0U2VsZWN0ZWQoU2VsZWN0aW9uRXZlbnQgZXZlbnQpIHsKKwkJCQkJCSBTdHJpbmdbXSBmaWx0ZXJzID0gU2ltdWxhdGlvbkxvZ2dlckVkaXRvci5GSUxFX0VYVEVOU0lPTl9GSUxURVJTLnRvQXJyYXkobmV3IFN0cmluZ1tTaW11bGF0aW9uTG9nZ2VyRWRpdG9yLkZJTEVfRVhURU5TSU9OX0ZJTFRFUlMuc2l6ZSgpXSk7CisJCQkJCQkgU3RyaW5nW10gZmlsZXMgPSBzaW11bGF0aW9ubG9nZ2VyRWRpdG9yQWR2aXNvci5vcGVuRmlsZVBhdGhEaWFsb2coZ2V0U2hlbGwoKSwgU1dULlNBVkUsIGZpbHRlcnMpOworCQkJCQkJIGlmIChmaWxlcy5sZW5ndGggPiAwKSB7CisJCQkJCQkJIGZpbGVGaWVsZC5zZXRUZXh0KGZpbGVzWzBdKTsKKwkJCQkJCSB9CisJCQkJCSB9CisJCQkJIH0pOworCQkJTGFiZWwgY29udGFpbmVyTGFiZWwgPSBuZXcgTGFiZWwoY29tcG9zaXRlLCBTV1QuTEVGVCk7CisJCQl7CisJCQkJY29udGFpbmVyTGFiZWwuc2V0VGV4dChTaW11bGF0aW9uTG9nZ2VyRWRpdFBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoIl9VSV9Nb2RlbE9iamVjdCIpKTsKKworCQkJCUdyaWREYXRhIGRhdGEgPSBuZXcgR3JpZERhdGEoKTsKKwkJCQlkYXRhLmhvcml6b250YWxBbGlnbm1lbnQgPSBHcmlkRGF0YS5GSUxMOworCQkJCWNvbnRhaW5lckxhYmVsLnNldExheW91dERhdGEoZGF0YSk7CisJCQl9CisKKwkJCWluaXRpYWxPYmplY3RGaWVsZCA9IG5ldyBDb21ibyhjb21wb3NpdGUsIFNXVC5CT1JERVIpOworCQkJeworCQkJCUdyaWREYXRhIGRhdGEgPSBuZXcgR3JpZERhdGEoKTsKKwkJCQlkYXRhLmhvcml6b250YWxBbGlnbm1lbnQgPSBHcmlkRGF0YS5GSUxMOworCQkJCWRhdGEuZ3JhYkV4Y2Vzc0hvcml6b250YWxTcGFjZSA9IHRydWU7CisJCQkJaW5pdGlhbE9iamVjdEZpZWxkLnNldExheW91dERhdGEoZGF0YSk7CisJCQl9CisKKwkJCWZvciAoU3RyaW5nIG9iamVjdE5hbWUgOiBnZXRJbml0aWFsT2JqZWN0TmFtZXMoKSkgeworCQkJCWluaXRpYWxPYmplY3RGaWVsZC5hZGQoZ2V0TGFiZWwob2JqZWN0TmFtZSkpOworCQkJfQorCisJCQlpZiAoaW5pdGlhbE9iamVjdEZpZWxkLmdldEl0ZW1Db3VudCgpID09IDEpIHsKKwkJCQlpbml0aWFsT2JqZWN0RmllbGQuc2VsZWN0KDApOworCQkJfQorCQkJaW5pdGlhbE9iamVjdEZpZWxkLmFkZE1vZGlmeUxpc3RlbmVyKHZhbGlkYXRvcik7CisKKwkJCUxhYmVsIGVuY29kaW5nTGFiZWwgPSBuZXcgTGFiZWwoY29tcG9zaXRlLCBTV1QuTEVGVCk7CisJCQl7CisJCQkJZW5jb2RpbmdMYWJlbC5zZXRUZXh0KFNpbXVsYXRpb25Mb2dnZXJFZGl0UGx1Z2luLklOU1RBTkNFLmdldFN0cmluZygiX1VJX1hNTEVuY29kaW5nIikpOworCisJCQkJR3JpZERhdGEgZGF0YSA9IG5ldyBHcmlkRGF0YSgpOworCQkJCWRhdGEuaG9yaXpvbnRhbEFsaWdubWVudCA9IEdyaWREYXRhLkZJTEw7CisJCQkJZW5jb2RpbmdMYWJlbC5zZXRMYXlvdXREYXRhKGRhdGEpOworCQkJfQorCQkJZW5jb2RpbmdGaWVsZCA9IG5ldyBDb21ibyhjb21wb3NpdGUsIFNXVC5CT1JERVIpOworCQkJeworCQkJCUdyaWREYXRhIGRhdGEgPSBuZXcgR3JpZERhdGEoKTsKKwkJCQlkYXRhLmhvcml6b250YWxBbGlnbm1lbnQgPSBHcmlkRGF0YS5GSUxMOworCQkJCWRhdGEuZ3JhYkV4Y2Vzc0hvcml6b250YWxTcGFjZSA9IHRydWU7CisJCQkJZW5jb2RpbmdGaWVsZC5zZXRMYXlvdXREYXRhKGRhdGEpOworCQkJfQorCisJCQlmb3IgKFN0cmluZyBlbmNvZGluZyA6IGdldEVuY29kaW5ncygpKSB7CisJCQkJZW5jb2RpbmdGaWVsZC5hZGQoZW5jb2RpbmcpOworCQkJfQorCisJCQllbmNvZGluZ0ZpZWxkLnNlbGVjdCgwKTsKKwkJCWVuY29kaW5nRmllbGQuYWRkTW9kaWZ5TGlzdGVuZXIodmFsaWRhdG9yKTsKKworCQkJc2V0UGFnZUNvbXBsZXRlKHZhbGlkYXRlUGFnZSgpKTsKKwkJCXNldENvbnRyb2woY29tcG9zaXRlKTsKKwkJfQorCisJCS8qKgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJcHJvdGVjdGVkIE1vZGlmeUxpc3RlbmVyIHZhbGlkYXRvciA9CisJCQluZXcgTW9kaWZ5TGlzdGVuZXIoKSB7CisJCQkJcHVibGljIHZvaWQgbW9kaWZ5VGV4dChNb2RpZnlFdmVudCBlKSB7CisJCQkJCXNldFBhZ2VDb21wbGV0ZSh2YWxpZGF0ZVBhZ2UoKSk7CisJCQkJfQorCQkJfTsKKworCQkvKioKKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCXByb3RlY3RlZCBib29sZWFuIHZhbGlkYXRlUGFnZSgpIHsKKwkJCVVSSSBmaWxlVVJJID0gZ2V0RmlsZVVSSSgpOworCQkJaWYgKGZpbGVVUkkgPT0gbnVsbCB8fCBmaWxlVVJJLmlzRW1wdHkoKSkgeworCQkJCXNldEVycm9yTWVzc2FnZShudWxsKTsKKwkJCQlyZXR1cm4gZmFsc2U7CisJCQl9CisKKwkJCVN0cmluZyBleHRlbnNpb24gPSBmaWxlVVJJLmZpbGVFeHRlbnNpb24oKTsKKwkJCWlmIChleHRlbnNpb24gPT0gbnVsbCB8fCAhRklMRV9FWFRFTlNJT05TLmNvbnRhaW5zKGV4dGVuc2lvbikpIHsKKwkJCQlTdHJpbmcga2V5ID0gRklMRV9FWFRFTlNJT05TLnNpemUoKSA+IDEgPyAiX1dBUk5fRmlsZW5hbWVFeHRlbnNpb25zIiA6ICJfV0FSTl9GaWxlbmFtZUV4dGVuc2lvbiI7CisJCQkJc2V0RXJyb3JNZXNzYWdlKFNpbXVsYXRpb25Mb2dnZXJFZGl0UGx1Z2luLklOU1RBTkNFLmdldFN0cmluZyhrZXksIG5ldyBPYmplY3QgW10geyBGT1JNQVRURURfRklMRV9FWFRFTlNJT05TIH0pKTsKKwkJCQlyZXR1cm4gZmFsc2U7CisJCQl9CisKKwkJCXNldEVycm9yTWVzc2FnZShudWxsKTsKKwkJCXJldHVybiBnZXRJbml0aWFsT2JqZWN0TmFtZSgpICE9IG51bGwgJiYgZ2V0RW5jb2RpbmdzKCkuY29udGFpbnMoZW5jb2RpbmdGaWVsZC5nZXRUZXh0KCkpOworCQl9CisKKwkJLyoqCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlAT3ZlcnJpZGUKKwkJcHVibGljIHZvaWQgc2V0VmlzaWJsZShib29sZWFuIHZpc2libGUpIHsKKwkJCXN1cGVyLnNldFZpc2libGUodmlzaWJsZSk7CisJCQlpZiAodmlzaWJsZSkgeworCQkJCWluaXRpYWxPYmplY3RGaWVsZC5jbGVhclNlbGVjdGlvbigpOworCQkJCWVuY29kaW5nRmllbGQuY2xlYXJTZWxlY3Rpb24oKTsKKwkJCQlmaWxlRmllbGQuc2V0Rm9jdXMoKTsKKwkJCX0KKwkJfQorCisJCS8qKgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJcHVibGljIFN0cmluZyBnZXRJbml0aWFsT2JqZWN0TmFtZSgpIHsKKwkJCVN0cmluZyBsYWJlbCA9IGluaXRpYWxPYmplY3RGaWVsZC5nZXRUZXh0KCk7CisKKwkJCWZvciAoU3RyaW5nIG5hbWUgOiBnZXRJbml0aWFsT2JqZWN0TmFtZXMoKSkgeworCQkJCWlmIChnZXRMYWJlbChuYW1lKS5lcXVhbHMobGFiZWwpKSB7CisJCQkJCXJldHVybiBuYW1lOworCQkJCX0KKwkJCX0KKwkJCXJldHVybiBudWxsOworCQl9CisKKwkJLyoqCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlwdWJsaWMgU3RyaW5nIGdldEVuY29kaW5nKCkgeworCQkJcmV0dXJuIGVuY29kaW5nRmllbGQuZ2V0VGV4dCgpOworCQl9CisKKwkJLyoqCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlwdWJsaWMgVVJJIGdldEZpbGVVUkkoKSB7CisJCQl0cnkgeworCQkJCXJldHVybiBVUkkuY3JlYXRlRmlsZVVSSShmaWxlRmllbGQuZ2V0VGV4dCgpKTsKKwkJCX0KKwkJCWNhdGNoIChFeGNlcHRpb24gZXhjZXB0aW9uKSB7CisJCQkJLy8gSWdub3JlCisJCQl9CisJCQlyZXR1cm4gbnVsbDsKKwkJfQorCisJCS8qKgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJcHVibGljIHZvaWQgc2VsZWN0RmlsZUZpZWxkKCkgeworCQkJCWluaXRpYWxPYmplY3RGaWVsZC5jbGVhclNlbGVjdGlvbigpOworCQkJCWVuY29kaW5nRmllbGQuY2xlYXJTZWxlY3Rpb24oKTsKKwkJCQlmaWxlRmllbGQuc2VsZWN0QWxsKCk7CisJCQkJZmlsZUZpZWxkLnNldEZvY3VzKCk7CisJCX0JCQorCisJCS8qKgorCQkgKiBSZXR1cm5zIHRoZSBsYWJlbCBmb3IgdGhlIHNwZWNpZmllZCB0eXBlIG5hbWUuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlwcm90ZWN0ZWQgU3RyaW5nIGdldExhYmVsKFN0cmluZyB0eXBlTmFtZSkgeworCQkJdHJ5IHsKKwkJCQlyZXR1cm4gU2ltdWxhdGlvbkxvZ2dlckVkaXRQbHVnaW4uSU5TVEFOQ0UuZ2V0U3RyaW5nKCJfVUlfIiArIHR5cGVOYW1lICsgIl90eXBlIik7CisJCQl9CisJCQljYXRjaChNaXNzaW5nUmVzb3VyY2VFeGNlcHRpb24gbXJlKSB7CisJCQkJU2ltdWxhdGlvbkxvZ2dlckVkaXRQbHVnaW4uSU5TVEFOQ0UubG9nKG1yZSk7CisJCQl9CisJCQlyZXR1cm4gdHlwZU5hbWU7CisJCX0KKworCQkvKioKKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCXByb3RlY3RlZCBDb2xsZWN0aW9uPFN0cmluZz4gZ2V0RW5jb2RpbmdzKCkgeworCQkJaWYgKGVuY29kaW5ncyA9PSBudWxsKSB7CisJCQkJZW5jb2RpbmdzID0gbmV3IEFycmF5TGlzdDxTdHJpbmc+KCk7CisJCQkJZm9yIChTdHJpbmdUb2tlbml6ZXIgc3RyaW5nVG9rZW5pemVyID0gbmV3IFN0cmluZ1Rva2VuaXplcihTaW11bGF0aW9uTG9nZ2VyRWRpdFBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoIl9VSV9YTUxFbmNvZGluZ0Nob2ljZXMiKSk7IHN0cmluZ1Rva2VuaXplci5oYXNNb3JlVG9rZW5zKCk7ICkgeworCQkJCQllbmNvZGluZ3MuYWRkKHN0cmluZ1Rva2VuaXplci5uZXh0VG9rZW4oKSk7CisJCQkJfQorCQkJfQorCQkJcmV0dXJuIGVuY29kaW5nczsKKwkJfQorCX0KKworCS8qKgorCSAqIFRoZSBmcmFtZXdvcmsgY2FsbHMgdGhpcyB0byBjcmVhdGUgdGhlIGNvbnRlbnRzIG9mIHRoZSB3aXphcmQuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGFkZFBhZ2VzKCkgeworCQlpbml0aWFsT2JqZWN0Q3JlYXRpb25QYWdlID0gbmV3IFNpbXVsYXRpb25Mb2dnZXJNb2RlbFdpemFyZEluaXRpYWxPYmplY3RDcmVhdGlvblBhZ2UoIldoYXRldmVyMiIpOworCQlpbml0aWFsT2JqZWN0Q3JlYXRpb25QYWdlLnNldFRpdGxlKFNpbXVsYXRpb25Mb2dnZXJFZGl0UGx1Z2luLklOU1RBTkNFLmdldFN0cmluZygiX1VJX1NpbXVsYXRpb25Mb2dnZXJNb2RlbFdpemFyZF9sYWJlbCIpKTsKKwkJaW5pdGlhbE9iamVjdENyZWF0aW9uUGFnZS5zZXREZXNjcmlwdGlvbihTaW11bGF0aW9uTG9nZ2VyRWRpdFBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoIl9VSV9XaXphcmRfaW5pdGlhbF9vYmplY3RfZGVzY3JpcHRpb24iKSk7CisJCWFkZFBhZ2UoaW5pdGlhbE9iamVjdENyZWF0aW9uUGFnZSk7CisJfQorCisJLyoqCisJICogR2V0IHRoZSBVUkkgZnJvbSB0aGUgcGFnZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVVJJIGdldE1vZGVsVVJJKCkgeworCQlyZXR1cm4gaW5pdGlhbE9iamVjdENyZWF0aW9uUGFnZS5nZXRGaWxlVVJJKCk7CisJfQorCit9CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9sb2dnZXJzL3Byb3ZpZGVyL0FzeW5jaHJvbm91c0xvZ2dlckl0ZW1Qcm92aWRlci5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vbG9nZ2Vycy9wcm92aWRlci9Bc3luY2hyb25vdXNMb2dnZXJJdGVtUHJvdmlkZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41OWFmYTI4Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vbG9nZ2Vycy9wcm92aWRlci9Bc3luY2hyb25vdXNMb2dnZXJJdGVtUHJvdmlkZXIuamF2YQpAQCAtMCwwICsxLDEwMyBAQAorLyoqCisgKiA8Y29weXJpZ2h0PgorICogPC9jb3B5cmlnaHQ+CisgKgorICogJElkJAorICovCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy5wcm92aWRlcjsKKworCitpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5BZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlVSSTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JRWRpdGluZ0RvbWFpbkl0ZW1Qcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbUxhYmVsUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1Qcm9wZXJ0eVNvdXJjZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JU3RydWN0dXJlZEl0ZW1Db250ZW50UHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVRyZWVJdGVtQ29udGVudFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy5Bc3luY2hyb25vdXNMb2dnZXI7CisKKy8qKgorICogVGhpcyBpcyB0aGUgaXRlbSBwcm92aWRlciBhZGFwdGVyIGZvciBhIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMuQXN5bmNocm9ub3VzTG9nZ2VyfSBvYmplY3QuCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBBc3luY2hyb25vdXNMb2dnZXJJdGVtUHJvdmlkZXIKKwlleHRlbmRzIFNpbXVsYXRpb25Mb2dnZXJJdGVtUHJvdmlkZXIKKwlpbXBsZW1lbnRzCisJCUlFZGl0aW5nRG9tYWluSXRlbVByb3ZpZGVyLAorCQlJU3RydWN0dXJlZEl0ZW1Db250ZW50UHJvdmlkZXIsCisJCUlUcmVlSXRlbUNvbnRlbnRQcm92aWRlciwKKwkJSUl0ZW1MYWJlbFByb3ZpZGVyLAorCQlJSXRlbVByb3BlcnR5U291cmNlIHsKKwkvKioKKwkgKiBUaGlzIGNvbnN0cnVjdHMgYW4gaW5zdGFuY2UgZnJvbSBhIGZhY3RvcnkgYW5kIGEgbm90aWZpZXIuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEFzeW5jaHJvbm91c0xvZ2dlckl0ZW1Qcm92aWRlcihBZGFwdGVyRmFjdG9yeSBhZGFwdGVyRmFjdG9yeSkgeworCQlzdXBlcihhZGFwdGVyRmFjdG9yeSk7CisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIHRoZSBwcm9wZXJ0eSBkZXNjcmlwdG9ycyBmb3IgdGhlIGFkYXB0ZWQgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIExpc3Q8SUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I+IGdldFByb3BlcnR5RGVzY3JpcHRvcnMoT2JqZWN0IG9iamVjdCkgeworCQlpZiAoaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMgPT0gbnVsbCkgeworCQkJc3VwZXIuZ2V0UHJvcGVydHlEZXNjcmlwdG9ycyhvYmplY3QpOworCisJCX0KKwkJcmV0dXJuIGl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzOworCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyB0aGUgbGFiZWwgdGV4dCBmb3IgdGhlIGFkYXB0ZWQgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIFN0cmluZyBnZXRUZXh0KE9iamVjdCBvYmplY3QpIHsKKwkJVVJJIGxhYmVsVmFsdWUgPSAoKEFzeW5jaHJvbm91c0xvZ2dlcilvYmplY3QpLmdldFVSSSgpOworCQlTdHJpbmcgbGFiZWwgPSBsYWJlbFZhbHVlID09IG51bGwgPyBudWxsIDogbGFiZWxWYWx1ZS50b1N0cmluZygpOworCQlyZXR1cm4gbGFiZWwgPT0gbnVsbCB8fCBsYWJlbC5sZW5ndGgoKSA9PSAwID8KKwkJCWdldFN0cmluZygiX1VJX0FzeW5jaHJvbm91c0xvZ2dlcl90eXBlIikgOgorCQkJZ2V0U3RyaW5nKCJfVUlfQXN5bmNocm9ub3VzTG9nZ2VyX3R5cGUiKSArICIgIiArIGxhYmVsOworCX0KKworCS8qKgorCSAqIFRoaXMgaGFuZGxlcyBtb2RlbCBub3RpZmljYXRpb25zIGJ5IGNhbGxpbmcge0BsaW5rICN1cGRhdGVDaGlsZHJlbn0gdG8gdXBkYXRlIGFueSBjYWNoZWQKKwkgKiBjaGlsZHJlbiBhbmQgYnkgY3JlYXRpbmcgYSB2aWV3ZXIgbm90aWZpY2F0aW9uLCB3aGljaCBpdCBwYXNzZXMgdG8ge0BsaW5rICNmaXJlTm90aWZ5Q2hhbmdlZH0uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgbm90aWZ5Q2hhbmdlZChOb3RpZmljYXRpb24gbm90aWZpY2F0aW9uKSB7CisJCXVwZGF0ZUNoaWxkcmVuKG5vdGlmaWNhdGlvbik7CisJCXN1cGVyLm5vdGlmeUNoYW5nZWQobm90aWZpY2F0aW9uKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFkZHMge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lZGl0LmNvbW1hbmQuQ29tbWFuZFBhcmFtZXRlcn1zIGRlc2NyaWJpbmcgdGhlIGNoaWxkcmVuCisJICogdGhhdCBjYW4gYmUgY3JlYXRlZCB1bmRlciB0aGlzIG9iamVjdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgdm9pZCBjb2xsZWN0TmV3Q2hpbGREZXNjcmlwdG9ycyhDb2xsZWN0aW9uPE9iamVjdD4gbmV3Q2hpbGREZXNjcmlwdG9ycywgT2JqZWN0IG9iamVjdCkgeworCQlzdXBlci5jb2xsZWN0TmV3Q2hpbGREZXNjcmlwdG9ycyhuZXdDaGlsZERlc2NyaXB0b3JzLCBvYmplY3QpOworCX0KKworfQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vbG9nZ2Vycy9wcm92aWRlci9TaW11bGF0aW9uTG9nZ2VyRWRpdFBsdWdpbi5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vbG9nZ2Vycy9wcm92aWRlci9TaW11bGF0aW9uTG9nZ2VyRWRpdFBsdWdpbi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM5NjNhYjcKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9sb2dnZXJzL3Byb3ZpZGVyL1NpbXVsYXRpb25Mb2dnZXJFZGl0UGx1Z2luLmphdmEKQEAgLTAsMCArMSwxMDEgQEAKKy8qKgorICogPGNvcHlyaWdodD4KKyAqIDwvY29weXJpZ2h0PgorICoKKyAqICRJZCQKKyAqLworcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMucHJvdmlkZXI7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLkVNRlBsdWdpbjsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udWkuRWNsaXBzZVVJUGx1Z2luOworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlJlc291cmNlTG9jYXRvcjsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5wcm92aWRlci5FY29yZUVkaXRQbHVnaW47CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLnByb3ZpZGVyLkNvcmVFZGl0UGx1Z2luOworCisvKioKKyAqIFRoaXMgaXMgdGhlIGNlbnRyYWwgc2luZ2xldG9uIGZvciB0aGUgc2ltdWxhdGlvbmxvZ2dlciBlZGl0b3IgcGx1Z2luLgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgZmluYWwgY2xhc3MgU2ltdWxhdGlvbkxvZ2dlckVkaXRQbHVnaW4gZXh0ZW5kcyBFTUZQbHVnaW4geworCS8qKgorCSAqIEtlZXAgdHJhY2sgb2YgdGhlIHNpbmdsZXRvbi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIFNpbXVsYXRpb25Mb2dnZXJFZGl0UGx1Z2luIElOU1RBTkNFID0gbmV3IFNpbXVsYXRpb25Mb2dnZXJFZGl0UGx1Z2luKCk7CisJCisJLyoqCisJICogS2VlcCB0cmFjayBvZiB0aGUgc2luZ2xldG9uLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByaXZhdGUgc3RhdGljIEltcGxlbWVudGF0aW9uIHBsdWdpbjsKKworCS8qKgorCSAqIENyZWF0ZSB0aGUgaW5zdGFuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFNpbXVsYXRpb25Mb2dnZXJFZGl0UGx1Z2luKCkgeworCQlzdXBlcgorCQkJKG5ldyBSZXNvdXJjZUxvY2F0b3IgW10geworCQkJCUNvcmVFZGl0UGx1Z2luLklOU1RBTkNFLAorCQkJCUVjb3JlRWRpdFBsdWdpbi5JTlNUQU5DRSwKKwkJCX0pOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIHNpbmdsZXRvbiBpbnN0YW5jZSBvZiB0aGUgRWNsaXBzZSBwbHVnaW4uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBzaW5nbGV0b24gaW5zdGFuY2UuCisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBSZXNvdXJjZUxvY2F0b3IgZ2V0UGx1Z2luUmVzb3VyY2VMb2NhdG9yKCkgeworCQlyZXR1cm4gcGx1Z2luOworCX0KKwkKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBzaW5nbGV0b24gaW5zdGFuY2Ugb2YgdGhlIEVjbGlwc2UgcGx1Z2luLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgc2luZ2xldG9uIGluc3RhbmNlLgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgc3RhdGljIEltcGxlbWVudGF0aW9uIGdldFBsdWdpbigpIHsKKwkJcmV0dXJuIHBsdWdpbjsKKwl9CisJCisJLyoqCisJICogVGhlIGFjdHVhbCBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgRWNsaXBzZSA8Yj5QbHVnaW48L2I+LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBzdGF0aWMgY2xhc3MgSW1wbGVtZW50YXRpb24gZXh0ZW5kcyBFY2xpcHNlVUlQbHVnaW4geworCQkvKioKKwkJICogQ3JlYXRlcyBhbiBpbnN0YW5jZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCXB1YmxpYyBJbXBsZW1lbnRhdGlvbigpIHsKKwkJCXN1cGVyKCk7CisJCisJCQkvLyBSZW1lbWJlciB0aGUgc3RhdGljIGluc3RhbmNlLgorCQkJLy8KKwkJCXBsdWdpbiA9IHRoaXM7CisJCX0KKwl9CisKK30KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2xvZ2dlcnMvcHJvdmlkZXIvU2ltdWxhdGlvbkxvZ2dlckV2ZW50SXRlbVByb3ZpZGVyLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9sb2dnZXJzL3Byb3ZpZGVyL1NpbXVsYXRpb25Mb2dnZXJFdmVudEl0ZW1Qcm92aWRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYxZTM2NmUKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9sb2dnZXJzL3Byb3ZpZGVyL1NpbXVsYXRpb25Mb2dnZXJFdmVudEl0ZW1Qcm92aWRlci5qYXZhCkBAIC0wLDAgKzEsMTIzIEBACisvKioKKyAqIDxjb3B5cmlnaHQ+CisgKiA8L2NvcHlyaWdodD4KKyAqCisgKiAkSWQkCisgKi8KK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzLnByb3ZpZGVyOworCisKK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LkFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbjsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5SZXNvdXJjZUxvY2F0b3I7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JRWRpdGluZ0RvbWFpbkl0ZW1Qcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbUxhYmVsUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1Qcm9wZXJ0eVNvdXJjZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JU3RydWN0dXJlZEl0ZW1Db250ZW50UHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVRyZWVJdGVtQ29udGVudFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkl0ZW1Qcm92aWRlckFkYXB0ZXI7CisKKy8qKgorICogVGhpcyBpcyB0aGUgaXRlbSBwcm92aWRlciBhZGFwdGVyIGZvciBhIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMuU2ltdWxhdGlvbkxvZ2dlckV2ZW50fSBvYmplY3QuCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBTaW11bGF0aW9uTG9nZ2VyRXZlbnRJdGVtUHJvdmlkZXIKKwlleHRlbmRzIEl0ZW1Qcm92aWRlckFkYXB0ZXIKKwlpbXBsZW1lbnRzCisJCUlFZGl0aW5nRG9tYWluSXRlbVByb3ZpZGVyLAorCQlJU3RydWN0dXJlZEl0ZW1Db250ZW50UHJvdmlkZXIsCisJCUlUcmVlSXRlbUNvbnRlbnRQcm92aWRlciwKKwkJSUl0ZW1MYWJlbFByb3ZpZGVyLAorCQlJSXRlbVByb3BlcnR5U291cmNlIHsKKwkvKioKKwkgKiBUaGlzIGNvbnN0cnVjdHMgYW4gaW5zdGFuY2UgZnJvbSBhIGZhY3RvcnkgYW5kIGEgbm90aWZpZXIuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFNpbXVsYXRpb25Mb2dnZXJFdmVudEl0ZW1Qcm92aWRlcihBZGFwdGVyRmFjdG9yeSBhZGFwdGVyRmFjdG9yeSkgeworCQlzdXBlcihhZGFwdGVyRmFjdG9yeSk7CisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIHRoZSBwcm9wZXJ0eSBkZXNjcmlwdG9ycyBmb3IgdGhlIGFkYXB0ZWQgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIExpc3Q8SUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I+IGdldFByb3BlcnR5RGVzY3JpcHRvcnMoT2JqZWN0IG9iamVjdCkgeworCQlpZiAoaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMgPT0gbnVsbCkgeworCQkJc3VwZXIuZ2V0UHJvcGVydHlEZXNjcmlwdG9ycyhvYmplY3QpOworCisJCX0KKwkJcmV0dXJuIGl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzOworCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyBTaW11bGF0aW9uTG9nZ2VyRXZlbnQuZ2lmLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBPYmplY3QgZ2V0SW1hZ2UoT2JqZWN0IG9iamVjdCkgeworCQlyZXR1cm4gb3ZlcmxheUltYWdlKG9iamVjdCwgZ2V0UmVzb3VyY2VMb2NhdG9yKCkuZ2V0SW1hZ2UoImZ1bGwvb2JqMTYvU2ltdWxhdGlvbkxvZ2dlckV2ZW50IikpOworCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyB0aGUgbGFiZWwgdGV4dCBmb3IgdGhlIGFkYXB0ZWQgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIFN0cmluZyBnZXRUZXh0KE9iamVjdCBvYmplY3QpIHsKKwkJcmV0dXJuIGdldFN0cmluZygiX1VJX1NpbXVsYXRpb25Mb2dnZXJFdmVudF90eXBlIik7CisJfQorCisJLyoqCisJICogVGhpcyBoYW5kbGVzIG1vZGVsIG5vdGlmaWNhdGlvbnMgYnkgY2FsbGluZyB7QGxpbmsgI3VwZGF0ZUNoaWxkcmVufSB0byB1cGRhdGUgYW55IGNhY2hlZAorCSAqIGNoaWxkcmVuIGFuZCBieSBjcmVhdGluZyBhIHZpZXdlciBub3RpZmljYXRpb24sIHdoaWNoIGl0IHBhc3NlcyB0byB7QGxpbmsgI2ZpcmVOb3RpZnlDaGFuZ2VkfS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBub3RpZnlDaGFuZ2VkKE5vdGlmaWNhdGlvbiBub3RpZmljYXRpb24pIHsKKwkJdXBkYXRlQ2hpbGRyZW4obm90aWZpY2F0aW9uKTsKKwkJc3VwZXIubm90aWZ5Q2hhbmdlZChub3RpZmljYXRpb24pOworCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmVkaXQuY29tbWFuZC5Db21tYW5kUGFyYW1ldGVyfXMgZGVzY3JpYmluZyB0aGUgY2hpbGRyZW4KKwkgKiB0aGF0IGNhbiBiZSBjcmVhdGVkIHVuZGVyIHRoaXMgb2JqZWN0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIGNvbGxlY3ROZXdDaGlsZERlc2NyaXB0b3JzKENvbGxlY3Rpb248T2JqZWN0PiBuZXdDaGlsZERlc2NyaXB0b3JzLCBPYmplY3Qgb2JqZWN0KSB7CisJCXN1cGVyLmNvbGxlY3ROZXdDaGlsZERlc2NyaXB0b3JzKG5ld0NoaWxkRGVzY3JpcHRvcnMsIG9iamVjdCk7CisJfQorCisJLyoqCisJICogUmV0dXJuIHRoZSByZXNvdXJjZSBsb2NhdG9yIGZvciB0aGlzIGl0ZW0gcHJvdmlkZXIncyByZXNvdXJjZXMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIFJlc291cmNlTG9jYXRvciBnZXRSZXNvdXJjZUxvY2F0b3IoKSB7CisJCXJldHVybiBTaW11bGF0aW9uTG9nZ2VyRWRpdFBsdWdpbi5JTlNUQU5DRTsKKwl9CisKK30KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2xvZ2dlcnMvcHJvdmlkZXIvU2ltdWxhdGlvbkxvZ2dlckl0ZW1Qcm92aWRlci5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vbG9nZ2Vycy9wcm92aWRlci9TaW11bGF0aW9uTG9nZ2VySXRlbVByb3ZpZGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDdlYjA1MQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2xvZ2dlcnMvcHJvdmlkZXIvU2ltdWxhdGlvbkxvZ2dlckl0ZW1Qcm92aWRlci5qYXZhCkBAIC0wLDAgKzEsMTY0IEBACisvKioKKyAqIDxjb3B5cmlnaHQ+CisgKiA8L2NvcHlyaWdodD4KKyAqCisgKiAkSWQkCisgKi8KK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzLnByb3ZpZGVyOworCisKK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LkFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbjsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5SZXNvdXJjZUxvY2F0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlVSSTsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkNvbXBvc2VhYmxlQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUVkaXRpbmdEb21haW5JdGVtUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1MYWJlbFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtUHJvcGVydHlEZXNjcmlwdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtUHJvcGVydHlTb3VyY2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVN0cnVjdHVyZWRJdGVtQ29udGVudFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklUcmVlSXRlbUNvbnRlbnRQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JdGVtUHJvcGVydHlEZXNjcmlwdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLlZpZXdlck5vdGlmaWNhdGlvbjsKKworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5sb2dnZXIucHJvdmlkZXIuTG9nZ2VySXRlbVByb3ZpZGVyOworCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzLlNpbXVsYXRpb25Mb2dnZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzLlNpbXVsYXRpb25Mb2dnZXJQYWNrYWdlOworCisvKioKKyAqIFRoaXMgaXMgdGhlIGl0ZW0gcHJvdmlkZXIgYWRhcHRlciBmb3IgYSB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzLlNpbXVsYXRpb25Mb2dnZXJ9IG9iamVjdC4KKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIFNpbXVsYXRpb25Mb2dnZXJJdGVtUHJvdmlkZXIKKwlleHRlbmRzIExvZ2dlckl0ZW1Qcm92aWRlcgorCWltcGxlbWVudHMKKwkJSUVkaXRpbmdEb21haW5JdGVtUHJvdmlkZXIsCisJCUlTdHJ1Y3R1cmVkSXRlbUNvbnRlbnRQcm92aWRlciwKKwkJSVRyZWVJdGVtQ29udGVudFByb3ZpZGVyLAorCQlJSXRlbUxhYmVsUHJvdmlkZXIsCisJCUlJdGVtUHJvcGVydHlTb3VyY2UgeworCS8qKgorCSAqIFRoaXMgY29uc3RydWN0cyBhbiBpbnN0YW5jZSBmcm9tIGEgZmFjdG9yeSBhbmQgYSBub3RpZmllci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgU2ltdWxhdGlvbkxvZ2dlckl0ZW1Qcm92aWRlcihBZGFwdGVyRmFjdG9yeSBhZGFwdGVyRmFjdG9yeSkgeworCQlzdXBlcihhZGFwdGVyRmFjdG9yeSk7CisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIHRoZSBwcm9wZXJ0eSBkZXNjcmlwdG9ycyBmb3IgdGhlIGFkYXB0ZWQgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIExpc3Q8SUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I+IGdldFByb3BlcnR5RGVzY3JpcHRvcnMoT2JqZWN0IG9iamVjdCkgeworCQlpZiAoaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMgPT0gbnVsbCkgeworCQkJc3VwZXIuZ2V0UHJvcGVydHlEZXNjcmlwdG9ycyhvYmplY3QpOworCisJCQlhZGRFbmFibGVkUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCk7CisJCX0KKwkJcmV0dXJuIGl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzOworCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyBhIHByb3BlcnR5IGRlc2NyaXB0b3IgZm9yIHRoZSBFbmFibGVkIGZlYXR1cmUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgYWRkRW5hYmxlZFByb3BlcnR5RGVzY3JpcHRvcihPYmplY3Qgb2JqZWN0KSB7CisJCWl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzLmFkZAorCQkJKGNyZWF0ZUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IKKwkJCQkoKChDb21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5KWFkYXB0ZXJGYWN0b3J5KS5nZXRSb290QWRhcHRlckZhY3RvcnkoKSwKKwkJCQkgZ2V0UmVzb3VyY2VMb2NhdG9yKCksCisJCQkJIGdldFN0cmluZygiX1VJX1NpbXVsYXRpb25Mb2dnZXJfZW5hYmxlZF9mZWF0dXJlIiksCisJCQkJIGdldFN0cmluZygiX1VJX1Byb3BlcnR5RGVzY3JpcHRvcl9kZXNjcmlwdGlvbiIsICJfVUlfU2ltdWxhdGlvbkxvZ2dlcl9lbmFibGVkX2ZlYXR1cmUiLCAiX1VJX1NpbXVsYXRpb25Mb2dnZXJfdHlwZSIpLAorCQkJCSBTaW11bGF0aW9uTG9nZ2VyUGFja2FnZS5MaXRlcmFscy5TSU1VTEFUSU9OX0xPR0dFUl9fRU5BQkxFRCwKKwkJCQkgdHJ1ZSwKKwkJCQkgZmFsc2UsCisJCQkJIGZhbHNlLAorCQkJCSBJdGVtUHJvcGVydHlEZXNjcmlwdG9yLkJPT0xFQU5fVkFMVUVfSU1BR0UsCisJCQkJIG51bGwsCisJCQkJIG51bGwpKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgU2ltdWxhdGlvbkxvZ2dlci5naWYuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIE9iamVjdCBnZXRJbWFnZShPYmplY3Qgb2JqZWN0KSB7CisJCXJldHVybiBvdmVybGF5SW1hZ2Uob2JqZWN0LCBnZXRSZXNvdXJjZUxvY2F0b3IoKS5nZXRJbWFnZSgiZnVsbC9vYmoxNi9TaW11bGF0aW9uTG9nZ2VyIikpOworCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyB0aGUgbGFiZWwgdGV4dCBmb3IgdGhlIGFkYXB0ZWQgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIFN0cmluZyBnZXRUZXh0KE9iamVjdCBvYmplY3QpIHsKKwkJVVJJIGxhYmVsVmFsdWUgPSAoKFNpbXVsYXRpb25Mb2dnZXIpb2JqZWN0KS5nZXRVUkkoKTsKKwkJU3RyaW5nIGxhYmVsID0gbGFiZWxWYWx1ZSA9PSBudWxsID8gbnVsbCA6IGxhYmVsVmFsdWUudG9TdHJpbmcoKTsKKwkJcmV0dXJuIGxhYmVsID09IG51bGwgfHwgbGFiZWwubGVuZ3RoKCkgPT0gMCA/CisJCQlnZXRTdHJpbmcoIl9VSV9TaW11bGF0aW9uTG9nZ2VyX3R5cGUiKSA6CisJCQlnZXRTdHJpbmcoIl9VSV9TaW11bGF0aW9uTG9nZ2VyX3R5cGUiKSArICIgIiArIGxhYmVsOworCX0KKworCS8qKgorCSAqIFRoaXMgaGFuZGxlcyBtb2RlbCBub3RpZmljYXRpb25zIGJ5IGNhbGxpbmcge0BsaW5rICN1cGRhdGVDaGlsZHJlbn0gdG8gdXBkYXRlIGFueSBjYWNoZWQKKwkgKiBjaGlsZHJlbiBhbmQgYnkgY3JlYXRpbmcgYSB2aWV3ZXIgbm90aWZpY2F0aW9uLCB3aGljaCBpdCBwYXNzZXMgdG8ge0BsaW5rICNmaXJlTm90aWZ5Q2hhbmdlZH0uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgbm90aWZ5Q2hhbmdlZChOb3RpZmljYXRpb24gbm90aWZpY2F0aW9uKSB7CisJCXVwZGF0ZUNoaWxkcmVuKG5vdGlmaWNhdGlvbik7CisKKwkJc3dpdGNoIChub3RpZmljYXRpb24uZ2V0RmVhdHVyZUlEKFNpbXVsYXRpb25Mb2dnZXIuY2xhc3MpKSB7CisJCQljYXNlIFNpbXVsYXRpb25Mb2dnZXJQYWNrYWdlLlNJTVVMQVRJT05fTE9HR0VSX19FTkFCTEVEOgorCQkJCWZpcmVOb3RpZnlDaGFuZ2VkKG5ldyBWaWV3ZXJOb3RpZmljYXRpb24obm90aWZpY2F0aW9uLCBub3RpZmljYXRpb24uZ2V0Tm90aWZpZXIoKSwgZmFsc2UsIHRydWUpKTsKKwkJCQlyZXR1cm47CisJCX0KKwkJc3VwZXIubm90aWZ5Q2hhbmdlZChub3RpZmljYXRpb24pOworCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmVkaXQuY29tbWFuZC5Db21tYW5kUGFyYW1ldGVyfXMgZGVzY3JpYmluZyB0aGUgY2hpbGRyZW4KKwkgKiB0aGF0IGNhbiBiZSBjcmVhdGVkIHVuZGVyIHRoaXMgb2JqZWN0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIGNvbGxlY3ROZXdDaGlsZERlc2NyaXB0b3JzKENvbGxlY3Rpb248T2JqZWN0PiBuZXdDaGlsZERlc2NyaXB0b3JzLCBPYmplY3Qgb2JqZWN0KSB7CisJCXN1cGVyLmNvbGxlY3ROZXdDaGlsZERlc2NyaXB0b3JzKG5ld0NoaWxkRGVzY3JpcHRvcnMsIG9iamVjdCk7CisJfQorCisJLyoqCisJICogUmV0dXJuIHRoZSByZXNvdXJjZSBsb2NhdG9yIGZvciB0aGlzIGl0ZW0gcHJvdmlkZXIncyByZXNvdXJjZXMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIFJlc291cmNlTG9jYXRvciBnZXRSZXNvdXJjZUxvY2F0b3IoKSB7CisJCXJldHVybiBTaW11bGF0aW9uTG9nZ2VyRWRpdFBsdWdpbi5JTlNUQU5DRTsKKwl9CisKK30KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2xvZ2dlcnMvcHJvdmlkZXIvU2ltdWxhdGlvbkxvZ2dlckl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5LmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9sb2dnZXJzL3Byb3ZpZGVyL1NpbXVsYXRpb25Mb2dnZXJJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk0MmU3OWMKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9sb2dnZXJzL3Byb3ZpZGVyL1NpbXVsYXRpb25Mb2dnZXJJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeS5qYXZhCkBAIC0wLDAgKzEsMjAzIEBACisvKioKKyAqIDxjb3B5cmlnaHQ+CisgKiA8L2NvcHlyaWdodD4KKyAqCisgKiAkSWQkCisgKi8KK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzLnByb3ZpZGVyOworCitpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LkFkYXB0ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWVyOworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuQ2hhbmdlTm90aWZpZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5Db21wb3NlZEFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklDaGFuZ2VOb3RpZmllcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JRGlzcG9zYWJsZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JRWRpdGluZ0RvbWFpbkl0ZW1Qcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbUxhYmVsUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1Qcm9wZXJ0eVNvdXJjZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JTm90aWZ5Q2hhbmdlZExpc3RlbmVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklTdHJ1Y3R1cmVkSXRlbUNvbnRlbnRQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JVHJlZUl0ZW1Db250ZW50UHJvdmlkZXI7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMudXRpbC5TaW11bGF0aW9uTG9nZ2VyQWRhcHRlckZhY3Rvcnk7CisKKy8qKgorICogVGhpcyBpcyB0aGUgZmFjdG9yeSB0aGF0IGlzIHVzZWQgdG8gcHJvdmlkZSB0aGUgaW50ZXJmYWNlcyBuZWVkZWQgdG8gc3VwcG9ydCBWaWV3ZXJzLgorICogVGhlIGFkYXB0ZXJzIGdlbmVyYXRlZCBieSB0aGlzIGZhY3RvcnkgY29udmVydCBFTUYgYWRhcHRlciBub3RpZmljYXRpb25zIGludG8gY2FsbHMgdG8ge0BsaW5rICNmaXJlTm90aWZ5Q2hhbmdlZCBmaXJlTm90aWZ5Q2hhbmdlZH0uCisgKiBUaGUgYWRhcHRlcnMgYWxzbyBzdXBwb3J0IEVjbGlwc2UgcHJvcGVydHkgc2hlZXRzLgorICogTm90ZSB0aGF0IG1vc3Qgb2YgdGhlIGFkYXB0ZXJzIGFyZSBzaGFyZWQgYW1vbmcgbXVsdGlwbGUgaW5zdGFuY2VzLgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgU2ltdWxhdGlvbkxvZ2dlckl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5IGV4dGVuZHMgU2ltdWxhdGlvbkxvZ2dlckFkYXB0ZXJGYWN0b3J5IGltcGxlbWVudHMgQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSwgSUNoYW5nZU5vdGlmaWVyLCBJRGlzcG9zYWJsZSB7CisJLyoqCisJICogVGhpcyBrZWVwcyB0cmFjayBvZiB0aGUgcm9vdCBhZGFwdGVyIGZhY3RvcnkgdGhhdCBkZWxlZ2F0ZXMgdG8gdGhpcyBhZGFwdGVyIGZhY3RvcnkuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIENvbXBvc2VkQWRhcHRlckZhY3RvcnkgcGFyZW50QWRhcHRlckZhY3Rvcnk7CisKKwkvKioKKwkgKiBUaGlzIGlzIHVzZWQgdG8gaW1wbGVtZW50IHtAbGluayBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JQ2hhbmdlTm90aWZpZXJ9LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBJQ2hhbmdlTm90aWZpZXIgY2hhbmdlTm90aWZpZXIgPSBuZXcgQ2hhbmdlTm90aWZpZXIoKTsKKworCS8qKgorCSAqIFRoaXMga2VlcHMgdHJhY2sgb2YgYWxsIHRoZSBzdXBwb3J0ZWQgdHlwZXMgY2hlY2tlZCBieSB7QGxpbmsgI2lzRmFjdG9yeUZvclR5cGUgaXNGYWN0b3J5Rm9yVHlwZX0uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIENvbGxlY3Rpb248T2JqZWN0PiBzdXBwb3J0ZWRUeXBlcyA9IG5ldyBBcnJheUxpc3Q8T2JqZWN0PigpOworCisJLyoqCisJICogVGhpcyBjb25zdHJ1Y3RzIGFuIGluc3RhbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBTaW11bGF0aW9uTG9nZ2VySXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkoKSB7CisJCXN1cHBvcnRlZFR5cGVzLmFkZChJRWRpdGluZ0RvbWFpbkl0ZW1Qcm92aWRlci5jbGFzcyk7CisJCXN1cHBvcnRlZFR5cGVzLmFkZChJU3RydWN0dXJlZEl0ZW1Db250ZW50UHJvdmlkZXIuY2xhc3MpOworCQlzdXBwb3J0ZWRUeXBlcy5hZGQoSVRyZWVJdGVtQ29udGVudFByb3ZpZGVyLmNsYXNzKTsKKwkJc3VwcG9ydGVkVHlwZXMuYWRkKElJdGVtTGFiZWxQcm92aWRlci5jbGFzcyk7CisJCXN1cHBvcnRlZFR5cGVzLmFkZChJSXRlbVByb3BlcnR5U291cmNlLmNsYXNzKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGtlZXBzIHRyYWNrIG9mIHRoZSBvbmUgYWRhcHRlciB1c2VkIGZvciBhbGwge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy5TaW11bGF0aW9uTG9nZ2VyRXZlbnR9IGluc3RhbmNlcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgU2ltdWxhdGlvbkxvZ2dlckV2ZW50SXRlbVByb3ZpZGVyIHNpbXVsYXRpb25Mb2dnZXJFdmVudEl0ZW1Qcm92aWRlcjsKKworCS8qKgorCSAqIFRoaXMgY3JlYXRlcyBhbiBhZGFwdGVyIGZvciBhIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMuU2ltdWxhdGlvbkxvZ2dlckV2ZW50fS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVTaW11bGF0aW9uTG9nZ2VyRXZlbnRBZGFwdGVyKCkgeworCQlpZiAoc2ltdWxhdGlvbkxvZ2dlckV2ZW50SXRlbVByb3ZpZGVyID09IG51bGwpIHsKKwkJCXNpbXVsYXRpb25Mb2dnZXJFdmVudEl0ZW1Qcm92aWRlciA9IG5ldyBTaW11bGF0aW9uTG9nZ2VyRXZlbnRJdGVtUHJvdmlkZXIodGhpcyk7CisJCX0KKworCQlyZXR1cm4gc2ltdWxhdGlvbkxvZ2dlckV2ZW50SXRlbVByb3ZpZGVyOworCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyB0aGUgcm9vdCBhZGFwdGVyIGZhY3RvcnkgdGhhdCBjb250YWlucyB0aGlzIGZhY3RvcnkuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnkgZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCkgeworCQlyZXR1cm4gcGFyZW50QWRhcHRlckZhY3RvcnkgPT0gbnVsbCA/IHRoaXMgOiBwYXJlbnRBZGFwdGVyRmFjdG9yeS5nZXRSb290QWRhcHRlckZhY3RvcnkoKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHNldHMgdGhlIGNvbXBvc2VkIGFkYXB0ZXIgZmFjdG9yeSB0aGF0IGNvbnRhaW5zIHRoaXMgZmFjdG9yeS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRQYXJlbnRBZGFwdGVyRmFjdG9yeShDb21wb3NlZEFkYXB0ZXJGYWN0b3J5IHBhcmVudEFkYXB0ZXJGYWN0b3J5KSB7CisJCXRoaXMucGFyZW50QWRhcHRlckZhY3RvcnkgPSBwYXJlbnRBZGFwdGVyRmFjdG9yeTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgYm9vbGVhbiBpc0ZhY3RvcnlGb3JUeXBlKE9iamVjdCB0eXBlKSB7CisJCXJldHVybiBzdXBwb3J0ZWRUeXBlcy5jb250YWlucyh0eXBlKSB8fCBzdXBlci5pc0ZhY3RvcnlGb3JUeXBlKHR5cGUpOworCX0KKworCS8qKgorCSAqIFRoaXMgaW1wbGVtZW50YXRpb24gc3Vic3RpdHV0ZXMgdGhlIGZhY3RvcnkgaXRzZWxmIGFzIHRoZSBrZXkgZm9yIHRoZSBhZGFwdGVyLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBBZGFwdGVyIGFkYXB0KE5vdGlmaWVyIG5vdGlmaWVyLCBPYmplY3QgdHlwZSkgeworCQlyZXR1cm4gc3VwZXIuYWRhcHQobm90aWZpZXIsIHRoaXMpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBPYmplY3QgYWRhcHQoT2JqZWN0IG9iamVjdCwgT2JqZWN0IHR5cGUpIHsKKwkJaWYgKGlzRmFjdG9yeUZvclR5cGUodHlwZSkpIHsKKwkJCU9iamVjdCBhZGFwdGVyID0gc3VwZXIuYWRhcHQob2JqZWN0LCB0eXBlKTsKKwkJCWlmICghKHR5cGUgaW5zdGFuY2VvZiBDbGFzczw/PikgfHwgKCgoQ2xhc3M8Pz4pdHlwZSkuaXNJbnN0YW5jZShhZGFwdGVyKSkpIHsKKwkJCQlyZXR1cm4gYWRhcHRlcjsKKwkJCX0KKwkJfQorCisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyBhIGxpc3RlbmVyLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIGFkZExpc3RlbmVyKElOb3RpZnlDaGFuZ2VkTGlzdGVuZXIgbm90aWZ5Q2hhbmdlZExpc3RlbmVyKSB7CisJCWNoYW5nZU5vdGlmaWVyLmFkZExpc3RlbmVyKG5vdGlmeUNoYW5nZWRMaXN0ZW5lcik7CisJfQorCisJLyoqCisJICogVGhpcyByZW1vdmVzIGEgbGlzdGVuZXIuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgcmVtb3ZlTGlzdGVuZXIoSU5vdGlmeUNoYW5nZWRMaXN0ZW5lciBub3RpZnlDaGFuZ2VkTGlzdGVuZXIpIHsKKwkJY2hhbmdlTm90aWZpZXIucmVtb3ZlTGlzdGVuZXIobm90aWZ5Q2hhbmdlZExpc3RlbmVyKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGRlbGVnYXRlcyB0byB7QGxpbmsgI2NoYW5nZU5vdGlmaWVyfSBhbmQgdG8ge0BsaW5rICNwYXJlbnRBZGFwdGVyRmFjdG9yeX0uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgZmlyZU5vdGlmeUNoYW5nZWQoTm90aWZpY2F0aW9uIG5vdGlmaWNhdGlvbikgeworCQljaGFuZ2VOb3RpZmllci5maXJlTm90aWZ5Q2hhbmdlZChub3RpZmljYXRpb24pOworCisJCWlmIChwYXJlbnRBZGFwdGVyRmFjdG9yeSAhPSBudWxsKSB7CisJCQlwYXJlbnRBZGFwdGVyRmFjdG9yeS5maXJlTm90aWZ5Q2hhbmdlZChub3RpZmljYXRpb24pOworCQl9CisJfQorCisJLyoqCisJICogVGhpcyBkaXNwb3NlcyBhbGwgb2YgdGhlIGl0ZW0gcHJvdmlkZXJzIGNyZWF0ZWQgYnkgdGhpcyBmYWN0b3J5LiAKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBkaXNwb3NlKCkgeworCQlpZiAoc2ltdWxhdGlvbkxvZ2dlckV2ZW50SXRlbVByb3ZpZGVyICE9IG51bGwpIHNpbXVsYXRpb25Mb2dnZXJFdmVudEl0ZW1Qcm92aWRlci5kaXNwb3NlKCk7CisJfQorCit9CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9sb2dnZXJzL3Byb3ZpZGVyL1N5bmNocm9ub3VzTG9nZ2VySXRlbVByb3ZpZGVyLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9sb2dnZXJzL3Byb3ZpZGVyL1N5bmNocm9ub3VzTG9nZ2VySXRlbVByb3ZpZGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWM0NzBmNQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2xvZ2dlcnMvcHJvdmlkZXIvU3luY2hyb25vdXNMb2dnZXJJdGVtUHJvdmlkZXIuamF2YQpAQCAtMCwwICsxLDExNCBAQAorLyoqCisgKiA8Y29weXJpZ2h0PgorICogPC9jb3B5cmlnaHQ+CisgKgorICogJElkJAorICovCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy5wcm92aWRlcjsKKworCitpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5BZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlVSSTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JRWRpdGluZ0RvbWFpbkl0ZW1Qcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbUxhYmVsUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1Qcm9wZXJ0eVNvdXJjZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JU3RydWN0dXJlZEl0ZW1Db250ZW50UHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVRyZWVJdGVtQ29udGVudFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy5TeW5jaHJvbm91c0xvZ2dlcjsKKworLyoqCisgKiBUaGlzIGlzIHRoZSBpdGVtIHByb3ZpZGVyIGFkYXB0ZXIgZm9yIGEge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy5TeW5jaHJvbm91c0xvZ2dlcn0gb2JqZWN0LgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgU3luY2hyb25vdXNMb2dnZXJJdGVtUHJvdmlkZXIKKwlleHRlbmRzIFNpbXVsYXRpb25Mb2dnZXJJdGVtUHJvdmlkZXIKKwlpbXBsZW1lbnRzCisJCUlFZGl0aW5nRG9tYWluSXRlbVByb3ZpZGVyLAorCQlJU3RydWN0dXJlZEl0ZW1Db250ZW50UHJvdmlkZXIsCisJCUlUcmVlSXRlbUNvbnRlbnRQcm92aWRlciwKKwkJSUl0ZW1MYWJlbFByb3ZpZGVyLAorCQlJSXRlbVByb3BlcnR5U291cmNlIHsKKwkvKioKKwkgKiBUaGlzIGNvbnN0cnVjdHMgYW4gaW5zdGFuY2UgZnJvbSBhIGZhY3RvcnkgYW5kIGEgbm90aWZpZXIuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFN5bmNocm9ub3VzTG9nZ2VySXRlbVByb3ZpZGVyKEFkYXB0ZXJGYWN0b3J5IGFkYXB0ZXJGYWN0b3J5KSB7CisJCXN1cGVyKGFkYXB0ZXJGYWN0b3J5KTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgdGhlIHByb3BlcnR5IGRlc2NyaXB0b3JzIGZvciB0aGUgYWRhcHRlZCBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgTGlzdDxJSXRlbVByb3BlcnR5RGVzY3JpcHRvcj4gZ2V0UHJvcGVydHlEZXNjcmlwdG9ycyhPYmplY3Qgb2JqZWN0KSB7CisJCWlmIChpdGVtUHJvcGVydHlEZXNjcmlwdG9ycyA9PSBudWxsKSB7CisJCQlzdXBlci5nZXRQcm9wZXJ0eURlc2NyaXB0b3JzKG9iamVjdCk7CisKKwkJfQorCQlyZXR1cm4gaXRlbVByb3BlcnR5RGVzY3JpcHRvcnM7CisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIFN5bmNocm9ub3VzTG9nZ2VyLmdpZi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgT2JqZWN0IGdldEltYWdlKE9iamVjdCBvYmplY3QpIHsKKwkJcmV0dXJuIG92ZXJsYXlJbWFnZShvYmplY3QsIGdldFJlc291cmNlTG9jYXRvcigpLmdldEltYWdlKCJmdWxsL29iajE2L1N5bmNocm9ub3VzTG9nZ2VyIikpOworCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyB0aGUgbGFiZWwgdGV4dCBmb3IgdGhlIGFkYXB0ZWQgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIFN0cmluZyBnZXRUZXh0KE9iamVjdCBvYmplY3QpIHsKKwkJVVJJIGxhYmVsVmFsdWUgPSAoKFN5bmNocm9ub3VzTG9nZ2VyKW9iamVjdCkuZ2V0VVJJKCk7CisJCVN0cmluZyBsYWJlbCA9IGxhYmVsVmFsdWUgPT0gbnVsbCA/IG51bGwgOiBsYWJlbFZhbHVlLnRvU3RyaW5nKCk7CisJCXJldHVybiBsYWJlbCA9PSBudWxsIHx8IGxhYmVsLmxlbmd0aCgpID09IDAgPworCQkJZ2V0U3RyaW5nKCJfVUlfU3luY2hyb25vdXNMb2dnZXJfdHlwZSIpIDoKKwkJCWdldFN0cmluZygiX1VJX1N5bmNocm9ub3VzTG9nZ2VyX3R5cGUiKSArICIgIiArIGxhYmVsOworCX0KKworCS8qKgorCSAqIFRoaXMgaGFuZGxlcyBtb2RlbCBub3RpZmljYXRpb25zIGJ5IGNhbGxpbmcge0BsaW5rICN1cGRhdGVDaGlsZHJlbn0gdG8gdXBkYXRlIGFueSBjYWNoZWQKKwkgKiBjaGlsZHJlbiBhbmQgYnkgY3JlYXRpbmcgYSB2aWV3ZXIgbm90aWZpY2F0aW9uLCB3aGljaCBpdCBwYXNzZXMgdG8ge0BsaW5rICNmaXJlTm90aWZ5Q2hhbmdlZH0uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgbm90aWZ5Q2hhbmdlZChOb3RpZmljYXRpb24gbm90aWZpY2F0aW9uKSB7CisJCXVwZGF0ZUNoaWxkcmVuKG5vdGlmaWNhdGlvbik7CisJCXN1cGVyLm5vdGlmeUNoYW5nZWQobm90aWZpY2F0aW9uKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFkZHMge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lZGl0LmNvbW1hbmQuQ29tbWFuZFBhcmFtZXRlcn1zIGRlc2NyaWJpbmcgdGhlIGNoaWxkcmVuCisJICogdGhhdCBjYW4gYmUgY3JlYXRlZCB1bmRlciB0aGlzIG9iamVjdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgdm9pZCBjb2xsZWN0TmV3Q2hpbGREZXNjcmlwdG9ycyhDb2xsZWN0aW9uPE9iamVjdD4gbmV3Q2hpbGREZXNjcmlwdG9ycywgT2JqZWN0IG9iamVjdCkgeworCQlzdXBlci5jb2xsZWN0TmV3Q2hpbGREZXNjcmlwdG9ycyhuZXdDaGlsZERlc2NyaXB0b3JzLCBvYmplY3QpOworCX0KKworfQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vbG9nZ2Vycy9wcm92aWRlci9zaW11bGF0aW9ubG9nZ2VyRWRpdG9yQWR2aXNvci5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vbG9nZ2Vycy9wcm92aWRlci9zaW11bGF0aW9ubG9nZ2VyRWRpdG9yQWR2aXNvci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdmZWIwZTUKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9sb2dnZXJzL3Byb3ZpZGVyL3NpbXVsYXRpb25sb2dnZXJFZGl0b3JBZHZpc29yLmphdmEKQEAgLTAsMCArMSw1NjkgQEAKKy8qKgorICogPGNvcHlyaWdodD4KKyAqIDwvY29weXJpZ2h0PgorICoKKyAqICRJZCQKKyAqLworcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMucHJvdmlkZXI7CisKK2ltcG9ydCBqYXZhLmlvLkZpbGU7CitpbXBvcnQgamF2YS51dGlsLkFycmF5czsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVxdWlub3guYXBwLklBcHBsaWNhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lcXVpbm94LmFwcC5JQXBwbGljYXRpb25Db250ZXh0OworCitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLkdyb3VwTWFya2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JQWN0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JTWVudU1hbmFnZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLk1lbnVNYW5hZ2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5TZXBhcmF0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuZGlhbG9ncy5NZXNzYWdlRGlhbG9nOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLndpbmRvdy5XaW5kb3c7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LlNXVDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZ3JhcGhpY3MuUG9pbnQ7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuRGlzcGxheTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5GaWxlRGlhbG9nOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlNoZWxsOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklFZGl0b3JEZXNjcmlwdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklGb2xkZXJMYXlvdXQ7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuSVBhZ2VMYXlvdXQ7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuSVBlcnNwZWN0aXZlRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5JV29ya2JlbmNoOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2hBY3Rpb25Db25zdGFudHM7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaFBhZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaFdpbmRvdzsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5QYXJ0SW5pdEV4Y2VwdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5QbGF0Zm9ybVVJOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLmFjdGlvbnMuQWN0aW9uRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5hY3Rpb25zLkNvbnRyaWJ1dGlvbkl0ZW1GYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLmFwcGxpY2F0aW9uLkFjdGlvbkJhckFkdmlzb3I7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuYXBwbGljYXRpb24uSUFjdGlvbkJhckNvbmZpZ3VyZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuYXBwbGljYXRpb24uSVdvcmtiZW5jaENvbmZpZ3VyZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuYXBwbGljYXRpb24uSVdvcmtiZW5jaFdpbmRvd0NvbmZpZ3VyZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuYXBwbGljYXRpb24uV29ya2JlbmNoQWR2aXNvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5hcHBsaWNhdGlvbi5Xb3JrYmVuY2hXaW5kb3dBZHZpc29yOworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51aS5VUklFZGl0b3JJbnB1dDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnVpLmFjdGlvbi5Xb3JrYmVuY2hXaW5kb3dBY3Rpb25EZWxlZ2F0ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuVVJJOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmFjdGlvbi5Mb2FkUmVzb3VyY2VBY3Rpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkudXRpbC5FZGl0VUlVdGlsOworCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzLnByb3ZpZGVyLlNpbXVsYXRpb25Mb2dnZXJFZGl0UGx1Z2luOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy5wcmVzZW50YXRpb24uU2ltdWxhdGlvbkxvZ2dlckVkaXRvcjsKKworCisvKioKKyAqIEN1c3RvbWl6ZWQge0BsaW5rIFdvcmtiZW5jaEFkdmlzb3J9IGZvciB0aGUgUkNQIGFwcGxpY2F0aW9uLgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgZmluYWwgY2xhc3Mgc2ltdWxhdGlvbmxvZ2dlckVkaXRvckFkdmlzb3IgZXh0ZW5kcyBXb3JrYmVuY2hBZHZpc29yIHsKKwkvKioKKwkgKiBUaGUgZGVmYXVsdCBmaWxlIGV4dGVuc2lvbiBmaWx0ZXJzIGZvciB1c2UgaW4gZGlhbG9ncy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmdbXSBGSUxFX0VYVEVOU0lPTl9GSUxURVJTID0gU2ltdWxhdGlvbkxvZ2dlckVkaXRvci5GSUxFX0VYVEVOU0lPTl9GSUxURVJTLnRvQXJyYXkobmV3IFN0cmluZ1swXSk7IAorCisJLyoqCisJICogVGhpcyBsb29rcyB1cCBhIHN0cmluZyBpbiB0aGUgcGx1Z2luJ3MgcGx1Z2luLnByb3BlcnRpZXMgZmlsZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcml2YXRlIHN0YXRpYyBTdHJpbmcgZ2V0U3RyaW5nKFN0cmluZyBrZXkpIHsKKwkJcmV0dXJuIFNpbXVsYXRpb25Mb2dnZXJFZGl0UGx1Z2luLklOU1RBTkNFLmdldFN0cmluZyhrZXkpOworCX0KKworCS8qKgorCSAqIFRoaXMgbG9va3MgdXAgYSBzdHJpbmcgaW4gcGx1Z2luLnByb3BlcnRpZXMsIG1ha2luZyBhIHN1YnN0aXR1dGlvbi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcml2YXRlIHN0YXRpYyBTdHJpbmcgZ2V0U3RyaW5nKFN0cmluZyBrZXksIE9iamVjdCBzMSkgeworCQlyZXR1cm4gb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzLnByb3ZpZGVyLlNpbXVsYXRpb25Mb2dnZXJFZGl0UGx1Z2luLklOU1RBTkNFLmdldFN0cmluZyhrZXksIG5ldyBPYmplY3QgW10geyBzMSB9KTsKKwl9CisKKwkvKioKKwkgKiBSQ1AncyBhcHBsaWNhdGlvbgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBzdGF0aWMgY2xhc3MgQXBwbGljYXRpb24gaW1wbGVtZW50cyBJQXBwbGljYXRpb24geworCQkvKioKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5lcXVpbm94LmFwcC5JQXBwbGljYXRpb24jc3RhcnQob3JnLmVjbGlwc2UuZXF1aW5veC5hcHAuSUFwcGxpY2F0aW9uQ29udGV4dCkKKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCXB1YmxpYyBPYmplY3Qgc3RhcnQoSUFwcGxpY2F0aW9uQ29udGV4dCBjb250ZXh0KSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJCVdvcmtiZW5jaEFkdmlzb3Igd29ya2JlbmNoQWR2aXNvciA9IG5ldyBzaW11bGF0aW9ubG9nZ2VyRWRpdG9yQWR2aXNvcigpOworCQkJRGlzcGxheSBkaXNwbGF5ID0gUGxhdGZvcm1VSS5jcmVhdGVEaXNwbGF5KCk7CisJCQl0cnkgeworCQkJCWludCByZXR1cm5Db2RlID0gUGxhdGZvcm1VSS5jcmVhdGVBbmRSdW5Xb3JrYmVuY2goZGlzcGxheSwgd29ya2JlbmNoQWR2aXNvcik7CisJCQkJaWYgKHJldHVybkNvZGUgPT0gUGxhdGZvcm1VSS5SRVRVUk5fUkVTVEFSVCkgeworCQkJCQlyZXR1cm4gSUFwcGxpY2F0aW9uLkVYSVRfUkVTVEFSVDsKKwkJCQl9CisJCQkJZWxzZSB7CisJCQkJCXJldHVybiBJQXBwbGljYXRpb24uRVhJVF9PSzsKKwkJCQl9CisJCQl9CisJCQlmaW5hbGx5IHsKKwkJCQlkaXNwbGF5LmRpc3Bvc2UoKTsKKwkJCX0KKwkJfQorCisJCS8qKgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLmVxdWlub3guYXBwLklBcHBsaWNhdGlvbiNzdG9wKCkKKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCXB1YmxpYyB2b2lkIHN0b3AoKSB7CisJCQkvLyBEbyBub3RoaW5nLgorCQl9CisJfQorCisJLyoqCisJICogUkNQJ3MgcGVyc3BlY3RpdmUKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGNsYXNzIFBlcnNwZWN0aXZlIGltcGxlbWVudHMgSVBlcnNwZWN0aXZlRmFjdG9yeSB7CisJCS8qKgorCQkgKiBQZXJzcGVjdGl2ZSBJRAorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgSURfUEVSU1BFQ1RJVkUgPSAib3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzLnByb3ZpZGVyLnNpbXVsYXRpb25sb2dnZXJFZGl0b3JBZHZpc29yUGVyc3BlY3RpdmUiOworCisJCS8qKgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnVpLklQZXJzcGVjdGl2ZUZhY3RvcnkjY3JlYXRlSW5pdGlhbExheW91dChvcmcuZWNsaXBzZS51aS5JUGFnZUxheW91dCkKKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCXB1YmxpYyB2b2lkIGNyZWF0ZUluaXRpYWxMYXlvdXQoSVBhZ2VMYXlvdXQgbGF5b3V0KSB7CisJCQlsYXlvdXQuc2V0RWRpdG9yQXJlYVZpc2libGUodHJ1ZSk7CisJCQlsYXlvdXQuYWRkUGVyc3BlY3RpdmVTaG9ydGN1dChJRF9QRVJTUEVDVElWRSk7CisKKwkJCUlGb2xkZXJMYXlvdXQgcmlnaHQgPSBsYXlvdXQuY3JlYXRlRm9sZGVyKCJyaWdodCIsIElQYWdlTGF5b3V0LlJJR0hULCAoZmxvYXQpMC42NiwgbGF5b3V0LmdldEVkaXRvckFyZWEoKSk7CisJCQlyaWdodC5hZGRWaWV3KElQYWdlTGF5b3V0LklEX09VVExJTkUpOworCisJCQlJRm9sZGVyTGF5b3V0IGJvdHRvblJpZ2h0ID0gbGF5b3V0LmNyZWF0ZUZvbGRlcigiYm90dG9uUmlnaHQiLCBJUGFnZUxheW91dC5CT1RUT00sIChmbG9hdCkwLjYwLCAicmlnaHQiKTsKKwkJCWJvdHRvblJpZ2h0LmFkZFZpZXcoSVBhZ2VMYXlvdXQuSURfUFJPUF9TSEVFVCk7CisJCX0KKwl9CisJCisJLyoqCisJICogUkNQJ3Mgd2luZG93IGFkdmlzb3IKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGNsYXNzIFdpbmRvd0Fkdmlzb3IgZXh0ZW5kcyBXb3JrYmVuY2hXaW5kb3dBZHZpc29yIHsKKwkJLyoqCisJCSAqIEBzZWUgV29ya2JlbmNoV2luZG93QWR2aXNvciNXb3JrYmVuY2hXaW5kb3dBZHZpc29yKG9yZy5lY2xpcHNlLnVpLmFwcGxpY2F0aW9uLklXb3JrYmVuY2hXaW5kb3dDb25maWd1cmVyKQorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJcHVibGljIFdpbmRvd0Fkdmlzb3IoSVdvcmtiZW5jaFdpbmRvd0NvbmZpZ3VyZXIgY29uZmlndXJlcikgeworCQkJc3VwZXIoY29uZmlndXJlcik7CisJCX0KKwkJCisJCS8qKgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnVpLmFwcGxpY2F0aW9uLldvcmtiZW5jaFdpbmRvd0Fkdmlzb3IjcHJlV2luZG93T3BlbigpCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlAT3ZlcnJpZGUKKwkJcHVibGljIHZvaWQgcHJlV2luZG93T3BlbigpIHsKKwkJCUlXb3JrYmVuY2hXaW5kb3dDb25maWd1cmVyIGNvbmZpZ3VyZXIgPSBnZXRXaW5kb3dDb25maWd1cmVyKCk7CisJCQljb25maWd1cmVyLnNldEluaXRpYWxTaXplKG5ldyBQb2ludCg2MDAsIDQ1MCkpOworCQkJY29uZmlndXJlci5zZXRTaG93Q29vbEJhcihmYWxzZSk7CisJCQljb25maWd1cmVyLnNldFNob3dTdGF0dXNMaW5lKHRydWUpOworCQkJY29uZmlndXJlci5zZXRUaXRsZShnZXRTdHJpbmcoIl9VSV9BcHBsaWNhdGlvbl90aXRsZSIpKTsKKwkJfQorCQkKKwkJLyoqCisJCSAqIEBzZWUgb3JnLmVjbGlwc2UudWkuYXBwbGljYXRpb24uV29ya2JlbmNoV2luZG93QWR2aXNvciNjcmVhdGVBY3Rpb25CYXJBZHZpc29yKG9yZy5lY2xpcHNlLnVpLmFwcGxpY2F0aW9uLklBY3Rpb25CYXJDb25maWd1cmVyKQorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJQE92ZXJyaWRlCisJCXB1YmxpYyBBY3Rpb25CYXJBZHZpc29yIGNyZWF0ZUFjdGlvbkJhckFkdmlzb3IoSUFjdGlvbkJhckNvbmZpZ3VyZXIgY29uZmlndXJlcikgeworCQkJcmV0dXJuIG5ldyBXaW5kb3dBY3Rpb25CYXJBZHZpc29yKGNvbmZpZ3VyZXIpOworCQl9CisJfQorCisJLyoqCisJICogUkNQJ3MgYWN0aW9uIGJhciBhZHZpc29yCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHN0YXRpYyBjbGFzcyBXaW5kb3dBY3Rpb25CYXJBZHZpc29yIGV4dGVuZHMgQWN0aW9uQmFyQWR2aXNvciB7CisJCS8qKgorCQkgKiBAc2VlIEFjdGlvbkJhckFkdmlzb3IjQWN0aW9uQmFyQWR2aXNvcihvcmcuZWNsaXBzZS51aS5hcHBsaWNhdGlvbi5JQWN0aW9uQmFyQ29uZmlndXJlcikKKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCXB1YmxpYyBXaW5kb3dBY3Rpb25CYXJBZHZpc29yKElBY3Rpb25CYXJDb25maWd1cmVyIGNvbmZpZ3VyZXIpIHsKKwkJCXN1cGVyKGNvbmZpZ3VyZXIpOworCQl9CisJCQorCQkvKioKKwkJICogQHNlZSBvcmcuZWNsaXBzZS51aS5hcHBsaWNhdGlvbi5BY3Rpb25CYXJBZHZpc29yI2ZpbGxNZW51QmFyKG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JTWVudU1hbmFnZXIpCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlAT3ZlcnJpZGUKKwkJcHJvdGVjdGVkIHZvaWQgZmlsbE1lbnVCYXIoSU1lbnVNYW5hZ2VyIG1lbnVCYXIpIHsKKwkJCUlXb3JrYmVuY2hXaW5kb3cgd2luZG93ID0gZ2V0QWN0aW9uQmFyQ29uZmlndXJlcigpLmdldFdpbmRvd0NvbmZpZ3VyZXIoKS5nZXRXaW5kb3coKTsKKwkJCW1lbnVCYXIuYWRkKGNyZWF0ZUZpbGVNZW51KHdpbmRvdykpOworCQkJbWVudUJhci5hZGQoY3JlYXRlRWRpdE1lbnUod2luZG93KSk7CisJCQltZW51QmFyLmFkZChuZXcgR3JvdXBNYXJrZXIoSVdvcmtiZW5jaEFjdGlvbkNvbnN0YW50cy5NQl9BRERJVElPTlMpKTsKKwkJCW1lbnVCYXIuYWRkKGNyZWF0ZVdpbmRvd01lbnUod2luZG93KSk7CisJCQltZW51QmFyLmFkZChjcmVhdGVIZWxwTWVudSh3aW5kb3cpKTsJCQkJCQorCQl9CisJCQorCQkvKioKKwkJICogQ3JlYXRlcyB0aGUgJ0ZpbGUnIG1lbnUuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlwcm90ZWN0ZWQgSU1lbnVNYW5hZ2VyIGNyZWF0ZUZpbGVNZW51KElXb3JrYmVuY2hXaW5kb3cgd2luZG93KSB7CisJCQlJTWVudU1hbmFnZXIgbWVudSA9IG5ldyBNZW51TWFuYWdlcihnZXRTdHJpbmcoIl9VSV9NZW51X0ZpbGVfbGFiZWwiKSwKKwkJCUlXb3JrYmVuY2hBY3Rpb25Db25zdGFudHMuTV9GSUxFKTsgICAgCisJCQltZW51LmFkZChuZXcgR3JvdXBNYXJrZXIoSVdvcmtiZW5jaEFjdGlvbkNvbnN0YW50cy5GSUxFX1NUQVJUKSk7CisJCisJCQlJTWVudU1hbmFnZXIgbmV3TWVudSA9IG5ldyBNZW51TWFuYWdlcihnZXRTdHJpbmcoIl9VSV9NZW51X05ld19sYWJlbCIpLCAibmV3Iik7CisJCQluZXdNZW51LmFkZChuZXcgR3JvdXBNYXJrZXIoSVdvcmtiZW5jaEFjdGlvbkNvbnN0YW50cy5NQl9BRERJVElPTlMpKTsKKwkKKwkJCW1lbnUuYWRkKG5ld01lbnUpOworCQkJbWVudS5hZGQobmV3IFNlcGFyYXRvcigpKTsKKwkJCW1lbnUuYWRkKG5ldyBHcm91cE1hcmtlcihJV29ya2JlbmNoQWN0aW9uQ29uc3RhbnRzLk1CX0FERElUSU9OUykpOworCQkJbWVudS5hZGQobmV3IFNlcGFyYXRvcigpKTsKKwkJCWFkZFRvTWVudUFuZFJlZ2lzdGVyKG1lbnUsIEFjdGlvbkZhY3RvcnkuQ0xPU0UuY3JlYXRlKHdpbmRvdykpOworCQkJYWRkVG9NZW51QW5kUmVnaXN0ZXIobWVudSwgQWN0aW9uRmFjdG9yeS5DTE9TRV9BTEwuY3JlYXRlKHdpbmRvdykpOworCQkJbWVudS5hZGQobmV3IFNlcGFyYXRvcigpKTsKKwkJCWFkZFRvTWVudUFuZFJlZ2lzdGVyKG1lbnUsIEFjdGlvbkZhY3RvcnkuU0FWRS5jcmVhdGUod2luZG93KSk7CisJCQlhZGRUb01lbnVBbmRSZWdpc3RlcihtZW51LCBBY3Rpb25GYWN0b3J5LlNBVkVfQVMuY3JlYXRlKHdpbmRvdykpOworCQkJYWRkVG9NZW51QW5kUmVnaXN0ZXIobWVudSwgQWN0aW9uRmFjdG9yeS5TQVZFX0FMTC5jcmVhdGUod2luZG93KSk7CisJCQltZW51LmFkZChuZXcgU2VwYXJhdG9yKCkpOworCQkJYWRkVG9NZW51QW5kUmVnaXN0ZXIobWVudSwgQWN0aW9uRmFjdG9yeS5RVUlULmNyZWF0ZSh3aW5kb3cpKTsKKwkJCW1lbnUuYWRkKG5ldyBHcm91cE1hcmtlcihJV29ya2JlbmNoQWN0aW9uQ29uc3RhbnRzLkZJTEVfRU5EKSk7CisJCQlyZXR1cm4gbWVudTsKKwkJfQorCisJCS8qKgorCQkgKiBDcmVhdGVzIHRoZSAnRWRpdCcgbWVudS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCXByb3RlY3RlZCBJTWVudU1hbmFnZXIgY3JlYXRlRWRpdE1lbnUoSVdvcmtiZW5jaFdpbmRvdyB3aW5kb3cpIHsKKwkJCUlNZW51TWFuYWdlciBtZW51ID0gbmV3IE1lbnVNYW5hZ2VyKGdldFN0cmluZygiX1VJX01lbnVfRWRpdF9sYWJlbCIpLAorCQkJSVdvcmtiZW5jaEFjdGlvbkNvbnN0YW50cy5NX0VESVQpOworCQkJbWVudS5hZGQobmV3IEdyb3VwTWFya2VyKElXb3JrYmVuY2hBY3Rpb25Db25zdGFudHMuRURJVF9TVEFSVCkpOworCQorCQkJYWRkVG9NZW51QW5kUmVnaXN0ZXIobWVudSwgQWN0aW9uRmFjdG9yeS5VTkRPLmNyZWF0ZSh3aW5kb3cpKTsKKwkJCWFkZFRvTWVudUFuZFJlZ2lzdGVyKG1lbnUsIEFjdGlvbkZhY3RvcnkuUkVETy5jcmVhdGUod2luZG93KSk7CisJCQltZW51LmFkZChuZXcgR3JvdXBNYXJrZXIoSVdvcmtiZW5jaEFjdGlvbkNvbnN0YW50cy5VTkRPX0VYVCkpOworCQkJbWVudS5hZGQobmV3IFNlcGFyYXRvcigpKTsKKwkKKwkJCWFkZFRvTWVudUFuZFJlZ2lzdGVyKG1lbnUsIEFjdGlvbkZhY3RvcnkuQ1VULmNyZWF0ZSh3aW5kb3cpKTsKKwkJCWFkZFRvTWVudUFuZFJlZ2lzdGVyKG1lbnUsIEFjdGlvbkZhY3RvcnkuQ09QWS5jcmVhdGUod2luZG93KSk7CisJCQlhZGRUb01lbnVBbmRSZWdpc3RlcihtZW51LCBBY3Rpb25GYWN0b3J5LlBBU1RFLmNyZWF0ZSh3aW5kb3cpKTsKKwkJCW1lbnUuYWRkKG5ldyBHcm91cE1hcmtlcihJV29ya2JlbmNoQWN0aW9uQ29uc3RhbnRzLkNVVF9FWFQpKTsKKwkJCW1lbnUuYWRkKG5ldyBTZXBhcmF0b3IoKSk7CisJCisJCQlhZGRUb01lbnVBbmRSZWdpc3RlcihtZW51LCBBY3Rpb25GYWN0b3J5LkRFTEVURS5jcmVhdGUod2luZG93KSk7CisJCQlhZGRUb01lbnVBbmRSZWdpc3RlcihtZW51LCBBY3Rpb25GYWN0b3J5LlNFTEVDVF9BTEwuY3JlYXRlKHdpbmRvdykpOworCQkJbWVudS5hZGQobmV3IFNlcGFyYXRvcigpKTsKKwkKKwkJCW1lbnUuYWRkKG5ldyBHcm91cE1hcmtlcihJV29ya2JlbmNoQWN0aW9uQ29uc3RhbnRzLkFERF9FWFQpKTsKKwkKKwkJCW1lbnUuYWRkKG5ldyBHcm91cE1hcmtlcihJV29ya2JlbmNoQWN0aW9uQ29uc3RhbnRzLkVESVRfRU5EKSk7CisJCQltZW51LmFkZChuZXcgU2VwYXJhdG9yKElXb3JrYmVuY2hBY3Rpb25Db25zdGFudHMuTUJfQURESVRJT05TKSk7CisJCQlyZXR1cm4gbWVudTsKKwkJfQorCQorCQkvKioKKwkJICogQ3JlYXRlcyB0aGUgJ1dpbmRvdycgbWVudS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCXByb3RlY3RlZCBJTWVudU1hbmFnZXIgY3JlYXRlV2luZG93TWVudShJV29ya2JlbmNoV2luZG93IHdpbmRvdykgeworCQkJSU1lbnVNYW5hZ2VyIG1lbnUgPSBuZXcgTWVudU1hbmFnZXIoZ2V0U3RyaW5nKCJfVUlfTWVudV9XaW5kb3dfbGFiZWwiKSwKKwkJCUlXb3JrYmVuY2hBY3Rpb25Db25zdGFudHMuTV9XSU5ET1cpOworCQorCQkJYWRkVG9NZW51QW5kUmVnaXN0ZXIobWVudSwgQWN0aW9uRmFjdG9yeS5PUEVOX05FV19XSU5ET1cuY3JlYXRlKHdpbmRvdykpOworCQkJbWVudS5hZGQobmV3IEdyb3VwTWFya2VyKElXb3JrYmVuY2hBY3Rpb25Db25zdGFudHMuTUJfQURESVRJT05TKSk7CisJCQltZW51LmFkZChDb250cmlidXRpb25JdGVtRmFjdG9yeS5PUEVOX1dJTkRPV1MuY3JlYXRlKHdpbmRvdykpOworCQorCQkJcmV0dXJuIG1lbnU7CisJCX0KKwkKKwkJLyoqCisJCSAqIENyZWF0ZXMgdGhlICdIZWxwJyBtZW51LgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJcHJvdGVjdGVkIElNZW51TWFuYWdlciBjcmVhdGVIZWxwTWVudShJV29ya2JlbmNoV2luZG93IHdpbmRvdykgeworCQkJSU1lbnVNYW5hZ2VyIG1lbnUgPSBuZXcgTWVudU1hbmFnZXIoZ2V0U3RyaW5nKCJfVUlfTWVudV9IZWxwX2xhYmVsIiksIElXb3JrYmVuY2hBY3Rpb25Db25zdGFudHMuTV9IRUxQKTsKKwkJCS8vIFdlbGNvbWUgb3IgaW50cm8gcGFnZSB3b3VsZCBnbyBoZXJlCisJCQkvLyBIZWxwIGNvbnRlbnRzIHdvdWxkIGdvIGhlcmUKKwkJCS8vIFRpcHMgYW5kIHRyaWNrcyBwYWdlIHdvdWxkIGdvIGhlcmUKKwkJCW1lbnUuYWRkKG5ldyBHcm91cE1hcmtlcihJV29ya2JlbmNoQWN0aW9uQ29uc3RhbnRzLkhFTFBfU1RBUlQpKTsKKwkJCW1lbnUuYWRkKG5ldyBHcm91cE1hcmtlcihJV29ya2JlbmNoQWN0aW9uQ29uc3RhbnRzLkhFTFBfRU5EKSk7CisJCQltZW51LmFkZChuZXcgR3JvdXBNYXJrZXIoSVdvcmtiZW5jaEFjdGlvbkNvbnN0YW50cy5NQl9BRERJVElPTlMpKTsKKwkJCXJldHVybiBtZW51OworCQl9CisJCQorCQkvKioKKwkJICogQWRkcyB0aGUgc3BlY2lmaWVkIGFjdGlvbiB0byB0aGUgZ2l2ZW4gbWVudSBhbmQgYWxzbyByZWdpc3RlcnMgdGhlIGFjdGlvbiB3aXRoIHRoZQorCQkgKiBhY3Rpb24gYmFyIGNvbmZpZ3VyZXIsIGluIG9yZGVyIHRvIGFjdGl2YXRlIGl0cyBrZXkgYmluZGluZy4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCXByb3RlY3RlZCB2b2lkIGFkZFRvTWVudUFuZFJlZ2lzdGVyKElNZW51TWFuYWdlciBtZW51TWFuYWdlciwgSUFjdGlvbiBhY3Rpb24pIHsKKwkJCW1lbnVNYW5hZ2VyLmFkZChhY3Rpb24pOworCQkJZ2V0QWN0aW9uQmFyQ29uZmlndXJlcigpLnJlZ2lzdGVyR2xvYmFsQWN0aW9uKGFjdGlvbik7CisJCX0KKwl9CisJCisJLyoqCisJICogQWJvdXQgYWN0aW9uIGZvciB0aGUgUkNQIGFwcGxpY2F0aW9uLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBzdGF0aWMgY2xhc3MgQWJvdXRBY3Rpb24gZXh0ZW5kcyBXb3JrYmVuY2hXaW5kb3dBY3Rpb25EZWxlZ2F0ZSB7CisJCS8qKgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnVpLklBY3Rpb25EZWxlZ2F0ZSNydW4ob3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklBY3Rpb24pCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlwdWJsaWMgdm9pZCBydW4oSUFjdGlvbiBhY3Rpb24pIHsKKwkJCU1lc3NhZ2VEaWFsb2cub3BlbkluZm9ybWF0aW9uKGdldFdpbmRvdygpLmdldFNoZWxsKCksIGdldFN0cmluZygiX1VJX0Fib3V0X3RpdGxlIiksCisJCQlnZXRTdHJpbmcoIl9VSV9BYm91dF90ZXh0IikpOworCQl9CisJfQorCQorCS8qKgorCSAqIE9wZW4gYWN0aW9uIGZvciB0aGUgb2JqZWN0cyBmcm9tIHRoZSBzaW11bGF0aW9ubG9nZ2VyIG1vZGVsLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBzdGF0aWMgY2xhc3MgT3BlbkFjdGlvbiBleHRlbmRzIFdvcmtiZW5jaFdpbmRvd0FjdGlvbkRlbGVnYXRlIHsKKwkJLyoqCisJCSAqIE9wZW5zIHRoZSBlZGl0b3JzIGZvciB0aGUgZmlsZXMgc2VsZWN0ZWQgdXNpbmcgdGhlIGZpbGUgZGlhbG9nLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJcHVibGljIHZvaWQgcnVuKElBY3Rpb24gYWN0aW9uKSB7CisJCQlTdHJpbmdbXSBmaWxlUGF0aHMgPSBvcGVuRmlsZVBhdGhEaWFsb2coZ2V0V2luZG93KCkuZ2V0U2hlbGwoKSwgU1dULk9QRU4sIG51bGwpOworCQkJaWYgKGZpbGVQYXRocy5sZW5ndGggPiAwKSB7CisJCQkJb3BlbkVkaXRvcihnZXRXaW5kb3coKS5nZXRXb3JrYmVuY2goKSwgVVJJLmNyZWF0ZUZpbGVVUkkoZmlsZVBhdGhzWzBdKSk7CisJCQl9CisJCX0KKwl9CisJCisJLyoqCisJICogT3BlbiBVUkkgYWN0aW9uIGZvciB0aGUgb2JqZWN0cyBmcm9tIHRoZSBzaW11bGF0aW9ubG9nZ2VyIG1vZGVsLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBzdGF0aWMgY2xhc3MgT3BlblVSSUFjdGlvbiBleHRlbmRzIFdvcmtiZW5jaFdpbmRvd0FjdGlvbkRlbGVnYXRlIHsKKwkJLyoqCisJCSAqIE9wZW5zIHRoZSBlZGl0b3JzIGZvciB0aGUgZmlsZXMgc2VsZWN0ZWQgdXNpbmcgdGhlIExvYWRSZXNvdXJjZURpYWxvZy4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCXB1YmxpYyB2b2lkIHJ1bihJQWN0aW9uIGFjdGlvbikgeworCQkJTG9hZFJlc291cmNlQWN0aW9uLkxvYWRSZXNvdXJjZURpYWxvZyBsb2FkUmVzb3VyY2VEaWFsb2cgPSBuZXcgTG9hZFJlc291cmNlQWN0aW9uLkxvYWRSZXNvdXJjZURpYWxvZyhnZXRXaW5kb3coKS5nZXRTaGVsbCgpKTsKKwkJCWlmIChXaW5kb3cuT0sgPT0gbG9hZFJlc291cmNlRGlhbG9nLm9wZW4oKSkgeworCQkJCWZvciAoVVJJIHVyaSA6IGxvYWRSZXNvdXJjZURpYWxvZy5nZXRVUklzKCkpIHsKKwkJCQkJb3BlbkVkaXRvcihnZXRXaW5kb3coKS5nZXRXb3JrYmVuY2goKSwgdXJpKTsKKwkJCQl9CisJCQl9CisJCX0KKwl9CisJCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHN0YXRpYyBTdHJpbmdbXSBvcGVuRmlsZVBhdGhEaWFsb2coU2hlbGwgc2hlbGwsIGludCBzdHlsZSwgU3RyaW5nW10gZmlsZUV4dGVuc2lvbkZpbHRlcnMpIHsKKwkJcmV0dXJuIG9wZW5GaWxlUGF0aERpYWxvZyhzaGVsbCwgc3R5bGUsIGZpbGVFeHRlbnNpb25GaWx0ZXJzLCAoc3R5bGUgJiBTV1QuT1BFTikgIT0gMCwgKHN0eWxlICYgU1dULk9QRU4pICE9IDAsIChzdHlsZSAmIFNXVC5TQVZFKSAhPSAwKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgc3RhdGljIFN0cmluZ1tdIG9wZW5GaWxlUGF0aERpYWxvZyhTaGVsbCBzaGVsbCwgaW50IHN0eWxlLCBTdHJpbmdbXSBmaWxlRXh0ZW5zaW9uRmlsdGVycywgYm9vbGVhbiBpbmNsdWRlR3JvdXBGaWx0ZXIsIGJvb2xlYW4gaW5jbHVkZUFsbEZpbHRlciwgYm9vbGVhbiBhZGRFeHRlbnNpb24pIHsKKwkJRmlsZURpYWxvZyBmaWxlRGlhbG9nID0gbmV3IEZpbGVEaWFsb2coc2hlbGwsIHN0eWxlKTsKKwkJaWYgKGZpbGVFeHRlbnNpb25GaWx0ZXJzID09IG51bGwpIHsKKwkJCWZpbGVFeHRlbnNpb25GaWx0ZXJzID0gRklMRV9FWFRFTlNJT05fRklMVEVSUzsKKwkJfQorCQkKKwkJLy8gSWYgcmVxdWVzdGVkLCBhdWdtZW50IHRoZSBmaWxlIGV4dGVuc2lvbiBmaWx0ZXJzIGJ5IGFkZGluZyBhIGdyb3VwIG9mIGFsbCB0aGUgb3RoZXIgZmlsdGVycyAoKi5leHQxOyouZXh0MjsuLi4pCisJCS8vIGF0IHRoZSBiZWdpbm5pbmcgYW5kL29yIGFuIGFsbCBmaWxlcyB3aWxkY2FyZCAoKi4qKSBhdCB0aGUgZW5kLgorCQkvLworCQlpbmNsdWRlR3JvdXBGaWx0ZXIgJj0gZmlsZUV4dGVuc2lvbkZpbHRlcnMubGVuZ3RoID4gMTsKKwkJaW50IG9mZnNldCA9IGluY2x1ZGVHcm91cEZpbHRlciA/IDEgOiAwOworCQkKKwkJaWYgKGluY2x1ZGVHcm91cEZpbHRlciB8fCBpbmNsdWRlQWxsRmlsdGVyKSB7CisJCQlpbnQgc2l6ZSA9IGZpbGVFeHRlbnNpb25GaWx0ZXJzLmxlbmd0aCArIG9mZnNldCArIChpbmNsdWRlQWxsRmlsdGVyID8gMSA6IDApOworCQkJU3RyaW5nW10gYWxsRmlsdGVycyA9IG5ldyBTdHJpbmdbc2l6ZV07CisJCQlTdHJpbmdCdWlsZGVyIGdyb3VwID0gaW5jbHVkZUdyb3VwRmlsdGVyID8gbmV3IFN0cmluZ0J1aWxkZXIoKSA6IG51bGw7CisJCQkKKwkJCWZvciAoaW50IGkgPSAwOyBpIDwgZmlsZUV4dGVuc2lvbkZpbHRlcnMubGVuZ3RoOyBpKyspIHsKKwkJCQlpZiAoaW5jbHVkZUdyb3VwRmlsdGVyKSB7CisJCQkJCWlmIChpICE9IDApIHsKKwkJCQkJCWdyb3VwLmFwcGVuZCgnOycpOworCQkJCQl9CisJCQkJCWdyb3VwLmFwcGVuZChmaWxlRXh0ZW5zaW9uRmlsdGVyc1tpXSk7CisJCQkJfQorCQkJCWFsbEZpbHRlcnNbaSArIG9mZnNldF0gPSBmaWxlRXh0ZW5zaW9uRmlsdGVyc1tpXTsKKwkJCX0KKwkJCQorCQkJaWYgKGluY2x1ZGVHcm91cEZpbHRlcikgeworCQkJCWFsbEZpbHRlcnNbMF0gPSBncm91cC50b1N0cmluZygpOworCQkJfQorCQkJaWYgKGluY2x1ZGVBbGxGaWx0ZXIpIHsKKwkJCQlhbGxGaWx0ZXJzW2FsbEZpbHRlcnMubGVuZ3RoIC0gMV0gPSAiKi4qIjsKKwkJCX0KKwkJCQorCQkJZmlsZURpYWxvZy5zZXRGaWx0ZXJFeHRlbnNpb25zKGFsbEZpbHRlcnMpOworCQl9CisJCWVsc2UgeworCQkJZmlsZURpYWxvZy5zZXRGaWx0ZXJFeHRlbnNpb25zKGZpbGVFeHRlbnNpb25GaWx0ZXJzKTsKKwkJfQorCQlmaWxlRGlhbG9nLm9wZW4oKTsKKwkJCisJCVN0cmluZ1tdIGZpbGVuYW1lcyA9IGZpbGVEaWFsb2cuZ2V0RmlsZU5hbWVzKCk7CisJCVN0cmluZ1tdIHJlc3VsdCA9IG5ldyBTdHJpbmdbZmlsZW5hbWVzLmxlbmd0aF07CisJCVN0cmluZyBwYXRoID0gZmlsZURpYWxvZy5nZXRGaWx0ZXJQYXRoKCkgKyBGaWxlLnNlcGFyYXRvcjsKKwkJU3RyaW5nIGV4dGVuc2lvbiA9IG51bGw7CisJCQorCQkvLyBJZiBleHRlbnNpb24gYWRkaW5nIHJlcXVlc3RlZCwgZ2V0IHRoZSBkb3R0ZWQgZXh0ZW5zaW9uIGNvcnJlc3BvbmRpbmcgdG8gdGhlIHNlbGVjdGVkIGZpbHRlci4KKwkJLy8KKwkJaWYgKGFkZEV4dGVuc2lvbikgeworCQkJaW50IGkgPSBmaWxlRGlhbG9nLmdldEZpbHRlckluZGV4KCk7CisJCQlpZiAoaSAhPSAtMSAmJiAoIWluY2x1ZGVBbGxGaWx0ZXIgfHwgaSAhPSBmaWxlRXh0ZW5zaW9uRmlsdGVycy5sZW5ndGgpKSB7CisJCQkJaSA9IGluY2x1ZGVHcm91cEZpbHRlciAmJiBpID09IDAgPyAwIDogaSAtIG9mZnNldDsKKwkJCQlTdHJpbmcgZmlsdGVyID0gZmlsZUV4dGVuc2lvbkZpbHRlcnNbaV07CisJCQkJaW50IGRvdCA9IGZpbHRlci5sYXN0SW5kZXhPZignLicpOworCQkJCWlmIChkb3QgPT0gMSAmJiBmaWx0ZXIuY2hhckF0KDApID09ICcqJykgeworCQkJCQlleHRlbnNpb24gPSBmaWx0ZXIuc3Vic3RyaW5nKGRvdCk7CisJCQkJfQorCQkJfQorCQl9CisJCQorCQkvLyBCdWlsZCB0aGUgcmVzdWx0IGJ5IGFkZGluZyB0aGUgc2VsZWN0ZWQgcGF0aCBhbmQsIGlmIG5lZWRlZCwgYXV0by1hcHBlbmRpbmcgdGhlIGV4dGVuc2lvbi4KKwkJLy8KKwkJZm9yIChpbnQgaSA9IDA7IGkgPCBmaWxlbmFtZXMubGVuZ3RoOyBpKyspIHsKKwkJCVN0cmluZyBmaWxlbmFtZSA9IHBhdGggKyBmaWxlbmFtZXNbaV07CisJCQlpZiAoZXh0ZW5zaW9uICE9IG51bGwpIHsKKwkJCQlpbnQgZG90ID0gZmlsZW5hbWUubGFzdEluZGV4T2YoJy4nKTsKKwkJCQlpZiAoZG90ID09IC0xIHx8ICFBcnJheXMuYXNMaXN0KGZpbGVFeHRlbnNpb25GaWx0ZXJzKS5jb250YWlucygiKiIgKyBmaWxlbmFtZS5zdWJzdHJpbmcoZG90KSkpIHsKKwkJCQkJZmlsZW5hbWUgKz0gZXh0ZW5zaW9uOworCQkJCX0KKwkJCX0KKwkJCXJlc3VsdFtpXSA9IGZpbGVuYW1lOworCQl9CisJCXJldHVybiByZXN1bHQ7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHN0YXRpYyBib29sZWFuIG9wZW5FZGl0b3IoSVdvcmtiZW5jaCB3b3JrYmVuY2gsIFVSSSB1cmkpIHsKKwkJSVdvcmtiZW5jaFdpbmRvdyB3b3JrYmVuY2hXaW5kb3cgPSB3b3JrYmVuY2guZ2V0QWN0aXZlV29ya2JlbmNoV2luZG93KCk7CisJCUlXb3JrYmVuY2hQYWdlIHBhZ2UgPSB3b3JrYmVuY2hXaW5kb3cuZ2V0QWN0aXZlUGFnZSgpOworCQkKKwkJSUVkaXRvckRlc2NyaXB0b3IgZWRpdG9yRGVzY3JpcHRvciA9IEVkaXRVSVV0aWwuZ2V0RGVmYXVsdEVkaXRvcih1cmksIG51bGwpOworCQlpZiAoZWRpdG9yRGVzY3JpcHRvciA9PSBudWxsKSB7CisJCQlNZXNzYWdlRGlhbG9nLm9wZW5FcnJvcigKKwkJCQl3b3JrYmVuY2hXaW5kb3cuZ2V0U2hlbGwoKSwKKwkJCQlnZXRTdHJpbmcoIl9VSV9FcnJvcl90aXRsZSIpLAorCQkJCWdldFN0cmluZygiX1dBUk5fTm9fRWRpdG9yIiwgdXJpLmxhc3RTZWdtZW50KCkpKTsKKwkJCXJldHVybiBmYWxzZTsKKwkJfQorCQllbHNlIHsKKwkJCXRyeSB7CisJCQkJcGFnZS5vcGVuRWRpdG9yKG5ldyBVUklFZGl0b3JJbnB1dCh1cmkpLCBlZGl0b3JEZXNjcmlwdG9yLmdldElkKCkpOworCQkJfQorCQkJY2F0Y2ggKFBhcnRJbml0RXhjZXB0aW9uIGV4Y2VwdGlvbikgeworCQkJCU1lc3NhZ2VEaWFsb2cub3BlbkVycm9yKAorCQkJCQl3b3JrYmVuY2hXaW5kb3cuZ2V0U2hlbGwoKSwKKwkJCQkJZ2V0U3RyaW5nKCJfVUlfT3BlbkVkaXRvckVycm9yX2xhYmVsIiksCisJCQkJCWV4Y2VwdGlvbi5nZXRNZXNzYWdlKCkpOworCQkJCXJldHVybiBmYWxzZTsKKwkJCX0KKwkJfQorCQlyZXR1cm4gdHJ1ZTsKKwl9CisJCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS51aS5hcHBsaWNhdGlvbi5Xb3JrYmVuY2hBZHZpc29yI2dldEluaXRpYWxXaW5kb3dQZXJzcGVjdGl2ZUlkKCkKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwkJQE92ZXJyaWRlCisJcHVibGljIFN0cmluZyBnZXRJbml0aWFsV2luZG93UGVyc3BlY3RpdmVJZCgpIHsKKwkJcmV0dXJuIFBlcnNwZWN0aXZlLklEX1BFUlNQRUNUSVZFOworCX0KKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2UudWkuYXBwbGljYXRpb24uV29ya2JlbmNoQWR2aXNvciNpbml0aWFsaXplKG9yZy5lY2xpcHNlLnVpLmFwcGxpY2F0aW9uLklXb3JrYmVuY2hDb25maWd1cmVyKQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCQlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBpbml0aWFsaXplKElXb3JrYmVuY2hDb25maWd1cmVyIGNvbmZpZ3VyZXIpIHsKKwkJc3VwZXIuaW5pdGlhbGl6ZShjb25maWd1cmVyKTsKKwkJY29uZmlndXJlci5zZXRTYXZlQW5kUmVzdG9yZSh0cnVlKTsKKwl9CisJCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS51aS5hcHBsaWNhdGlvbi5Xb3JrYmVuY2hBZHZpc29yI2NyZWF0ZVdvcmtiZW5jaFdpbmRvd0Fkdmlzb3Iob3JnLmVjbGlwc2UudWkuYXBwbGljYXRpb24uSVdvcmtiZW5jaFdpbmRvd0NvbmZpZ3VyZXIpCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJCUBPdmVycmlkZQorCXB1YmxpYyBXb3JrYmVuY2hXaW5kb3dBZHZpc29yIGNyZWF0ZVdvcmtiZW5jaFdpbmRvd0Fkdmlzb3IoSVdvcmtiZW5jaFdpbmRvd0NvbmZpZ3VyZXIgY29uZmlndXJlcikgeworCQlyZXR1cm4gbmV3IFdpbmRvd0Fkdmlzb3IoY29uZmlndXJlcik7CisJfQorfQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vbG9nZ2Vycy91dGlsL1NpbXVsYXRpb25Mb2dnZXJBZGFwdGVyRmFjdG9yeS5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vbG9nZ2Vycy91dGlsL1NpbXVsYXRpb25Mb2dnZXJBZGFwdGVyRmFjdG9yeS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAxZTNkNzQKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9sb2dnZXJzL3V0aWwvU2ltdWxhdGlvbkxvZ2dlckFkYXB0ZXJGYWN0b3J5LmphdmEKQEAgLTAsMCArMSwyNTYgQEAKKy8qKgorICogPGNvcHlyaWdodD4KKyAqIDwvY29weXJpZ2h0PgorICoKKyAqICRJZCQKKyAqLworcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMudXRpbDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LkFkYXB0ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpZXI7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5pbXBsLkFkYXB0ZXJGYWN0b3J5SW1wbDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0OworCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5JZGVudGlmaWFibGU7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubG9nZ2VyLkxvZ2dlcjsKKworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uam9icy5zaW11bGF0aW9uLklTaW11bGF0aW9uTGlzdGVuZXI7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMuKjsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogVGhlIDxiPkFkYXB0ZXIgRmFjdG9yeTwvYj4gZm9yIHRoZSBtb2RlbC4KKyAqIEl0IHByb3ZpZGVzIGFuIGFkYXB0ZXIgPGNvZGU+Y3JlYXRlWFhYPC9jb2RlPiBtZXRob2QgZm9yIGVhY2ggY2xhc3Mgb2YgdGhlIG1vZGVsLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy5TaW11bGF0aW9uTG9nZ2VyUGFja2FnZQorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgU2ltdWxhdGlvbkxvZ2dlckFkYXB0ZXJGYWN0b3J5IGV4dGVuZHMgQWRhcHRlckZhY3RvcnlJbXBsIHsKKwkvKioKKwkgKiBUaGUgY2FjaGVkIG1vZGVsIHBhY2thZ2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHN0YXRpYyBTaW11bGF0aW9uTG9nZ2VyUGFja2FnZSBtb2RlbFBhY2thZ2U7CisKKwkvKioKKwkgKiBDcmVhdGVzIGFuIGluc3RhbmNlIG9mIHRoZSBhZGFwdGVyIGZhY3RvcnkuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFNpbXVsYXRpb25Mb2dnZXJBZGFwdGVyRmFjdG9yeSgpIHsKKwkJaWYgKG1vZGVsUGFja2FnZSA9PSBudWxsKSB7CisJCQltb2RlbFBhY2thZ2UgPSBTaW11bGF0aW9uTG9nZ2VyUGFja2FnZS5lSU5TVEFOQ0U7CisJCX0KKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHdoZXRoZXIgdGhpcyBmYWN0b3J5IGlzIGFwcGxpY2FibGUgZm9yIHRoZSB0eXBlIG9mIHRoZSBvYmplY3QuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgPGNvZGU+dHJ1ZTwvY29kZT4gaWYgdGhlIG9iamVjdCBpcyBlaXRoZXIgdGhlIG1vZGVsJ3MgcGFja2FnZSBvciBpcyBhbiBpbnN0YW5jZSBvYmplY3Qgb2YgdGhlIG1vZGVsLgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gd2hldGhlciB0aGlzIGZhY3RvcnkgaXMgYXBwbGljYWJsZSBmb3IgdGhlIHR5cGUgb2YgdGhlIG9iamVjdC4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIGJvb2xlYW4gaXNGYWN0b3J5Rm9yVHlwZShPYmplY3Qgb2JqZWN0KSB7CisJCWlmIChvYmplY3QgPT0gbW9kZWxQYWNrYWdlKSB7CisJCQlyZXR1cm4gdHJ1ZTsKKwkJfQorCQlpZiAob2JqZWN0IGluc3RhbmNlb2YgRU9iamVjdCkgeworCQkJcmV0dXJuICgoRU9iamVjdClvYmplY3QpLmVDbGFzcygpLmdldEVQYWNrYWdlKCkgPT0gbW9kZWxQYWNrYWdlOworCQl9CisJCXJldHVybiBmYWxzZTsKKwl9CisKKwkvKioKKwkgKiBUaGUgc3dpdGNoIHRoYXQgZGVsZWdhdGVzIHRvIHRoZSA8Y29kZT5jcmVhdGVYWFg8L2NvZGU+IG1ldGhvZHMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIFNpbXVsYXRpb25Mb2dnZXJTd2l0Y2g8QWRhcHRlcj4gbW9kZWxTd2l0Y2ggPQorCQluZXcgU2ltdWxhdGlvbkxvZ2dlclN3aXRjaDxBZGFwdGVyPigpIHsKKwkJCUBPdmVycmlkZQorCQkJcHVibGljIEFkYXB0ZXIgY2FzZVNpbXVsYXRpb25Mb2dnZXIoU2ltdWxhdGlvbkxvZ2dlciBvYmplY3QpIHsKKwkJCQlyZXR1cm4gY3JlYXRlU2ltdWxhdGlvbkxvZ2dlckFkYXB0ZXIoKTsKKwkJCX0KKwkJCUBPdmVycmlkZQorCQkJcHVibGljIEFkYXB0ZXIgY2FzZVN5bmNocm9ub3VzTG9nZ2VyKFN5bmNocm9ub3VzTG9nZ2VyIG9iamVjdCkgeworCQkJCXJldHVybiBjcmVhdGVTeW5jaHJvbm91c0xvZ2dlckFkYXB0ZXIoKTsKKwkJCX0KKwkJCUBPdmVycmlkZQorCQkJcHVibGljIEFkYXB0ZXIgY2FzZUlTaW11bGF0aW9uTGlzdGVuZXIoSVNpbXVsYXRpb25MaXN0ZW5lciBvYmplY3QpIHsKKwkJCQlyZXR1cm4gY3JlYXRlSVNpbXVsYXRpb25MaXN0ZW5lckFkYXB0ZXIoKTsKKwkJCX0KKwkJCUBPdmVycmlkZQorCQkJcHVibGljIEFkYXB0ZXIgY2FzZUFzeW5jaHJvbm91c0xvZ2dlcihBc3luY2hyb25vdXNMb2dnZXIgb2JqZWN0KSB7CisJCQkJcmV0dXJuIGNyZWF0ZUFzeW5jaHJvbm91c0xvZ2dlckFkYXB0ZXIoKTsKKwkJCX0KKwkJCUBPdmVycmlkZQorCQkJcHVibGljIEFkYXB0ZXIgY2FzZVNpbXVsYXRpb25Mb2dnZXJFdmVudChTaW11bGF0aW9uTG9nZ2VyRXZlbnQgb2JqZWN0KSB7CisJCQkJcmV0dXJuIGNyZWF0ZVNpbXVsYXRpb25Mb2dnZXJFdmVudEFkYXB0ZXIoKTsKKwkJCX0KKwkJCUBPdmVycmlkZQorCQkJcHVibGljIDxUPiBBZGFwdGVyIGNhc2VDb21wYXJhYmxlKENvbXBhcmFibGU8VD4gb2JqZWN0KSB7CisJCQkJcmV0dXJuIGNyZWF0ZUNvbXBhcmFibGVBZGFwdGVyKCk7CisJCQl9CisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyBBZGFwdGVyIGNhc2VJZGVudGlmaWFibGUoSWRlbnRpZmlhYmxlIG9iamVjdCkgeworCQkJCXJldHVybiBjcmVhdGVJZGVudGlmaWFibGVBZGFwdGVyKCk7CisJCQl9CisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyBBZGFwdGVyIGNhc2VMb2dnZXIoTG9nZ2VyIG9iamVjdCkgeworCQkJCXJldHVybiBjcmVhdGVMb2dnZXJBZGFwdGVyKCk7CisJCQl9CisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyBBZGFwdGVyIGRlZmF1bHRDYXNlKEVPYmplY3Qgb2JqZWN0KSB7CisJCQkJcmV0dXJuIGNyZWF0ZUVPYmplY3RBZGFwdGVyKCk7CisJCQl9CisJCX07CisKKwkvKioKKwkgKiBDcmVhdGVzIGFuIGFkYXB0ZXIgZm9yIHRoZSA8Y29kZT50YXJnZXQ8L2NvZGU+LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIHRhcmdldCB0aGUgb2JqZWN0IHRvIGFkYXB0LgorCSAqIEByZXR1cm4gdGhlIGFkYXB0ZXIgZm9yIHRoZSA8Y29kZT50YXJnZXQ8L2NvZGU+LgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVBZGFwdGVyKE5vdGlmaWVyIHRhcmdldCkgeworCQlyZXR1cm4gbW9kZWxTd2l0Y2guZG9Td2l0Y2goKEVPYmplY3QpdGFyZ2V0KTsKKwl9CisKKworCS8qKgorCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzLlNpbXVsYXRpb25Mb2dnZXIgPGVtPlNpbXVsYXRpb24gTG9nZ2VyPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsKKwkgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy5TaW11bGF0aW9uTG9nZ2VyCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZVNpbXVsYXRpb25Mb2dnZXJBZGFwdGVyKCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy5TeW5jaHJvbm91c0xvZ2dlciA8ZW0+U3luY2hyb25vdXMgTG9nZ2VyPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsKKwkgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy5TeW5jaHJvbm91c0xvZ2dlcgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVTeW5jaHJvbm91c0xvZ2dlckFkYXB0ZXIoKSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5qb2JzLnNpbXVsYXRpb24uSVNpbXVsYXRpb25MaXN0ZW5lciA8ZW0+SVNpbXVsYXRpb24gTGlzdGVuZXI8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOworCSAqIGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZSB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5LgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5qb2JzLnNpbXVsYXRpb24uSVNpbXVsYXRpb25MaXN0ZW5lcgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVJU2ltdWxhdGlvbkxpc3RlbmVyQWRhcHRlcigpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMuQXN5bmNocm9ub3VzTG9nZ2VyIDxlbT5Bc3luY2hyb25vdXMgTG9nZ2VyPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsKKwkgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy5Bc3luY2hyb25vdXNMb2dnZXIKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlQXN5bmNocm9ub3VzTG9nZ2VyQWRhcHRlcigpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMuU2ltdWxhdGlvbkxvZ2dlckV2ZW50IDxlbT5FdmVudDwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7CisJICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMuU2ltdWxhdGlvbkxvZ2dlckV2ZW50CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZVNpbXVsYXRpb25Mb2dnZXJFdmVudEFkYXB0ZXIoKSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgamF2YS5sYW5nLkNvbXBhcmFibGUgPGVtPkNvbXBhcmFibGU8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOworCSAqIGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZSB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5LgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgorCSAqIEBzZWUgamF2YS5sYW5nLkNvbXBhcmFibGUKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlQ29tcGFyYWJsZUFkYXB0ZXIoKSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5JZGVudGlmaWFibGUgPGVtPklkZW50aWZpYWJsZTwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7CisJICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLklkZW50aWZpYWJsZQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVJZGVudGlmaWFibGVBZGFwdGVyKCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5sb2dnZXIuTG9nZ2VyIDxlbT5Mb2dnZXI8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOworCSAqIGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZSB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5LgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmxvZ2dlci5Mb2dnZXIKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlTG9nZ2VyQWRhcHRlcigpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciB0aGUgZGVmYXVsdCBjYXNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbC4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlRU9iamVjdEFkYXB0ZXIoKSB7CisJCXJldHVybiBudWxsOworCX0KKworfSAvL1NpbXVsYXRpb25Mb2dnZXJBZGFwdGVyRmFjdG9yeQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vbG9nZ2Vycy91dGlsL1NpbXVsYXRpb25Mb2dnZXJTd2l0Y2guamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2xvZ2dlcnMvdXRpbC9TaW11bGF0aW9uTG9nZ2VyU3dpdGNoLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzIwMzRlNgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2xvZ2dlcnMvdXRpbC9TaW11bGF0aW9uTG9nZ2VyU3dpdGNoLmphdmEKQEAgLTAsMCArMSwyNzAgQEAKKy8qKgorICogPGNvcHlyaWdodD4KKyAqIDwvY29weXJpZ2h0PgorICoKKyAqICRJZCQKKyAqLworcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMudXRpbDsKKworaW1wb3J0IGphdmEudXRpbC5MaXN0OworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzczsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uSWRlbnRpZmlhYmxlOworCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmxvZ2dlci5Mb2dnZXI7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmpvYnMuc2ltdWxhdGlvbi5JU2ltdWxhdGlvbkxpc3RlbmVyOworCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzLio7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIFRoZSA8Yj5Td2l0Y2g8L2I+IGZvciB0aGUgbW9kZWwncyBpbmhlcml0YW5jZSBoaWVyYXJjaHkuCisgKiBJdCBzdXBwb3J0cyB0aGUgY2FsbCB7QGxpbmsgI2RvU3dpdGNoKEVPYmplY3QpIGRvU3dpdGNoKG9iamVjdCl9CisgKiB0byBpbnZva2UgdGhlIDxjb2RlPmNhc2VYWFg8L2NvZGU+IG1ldGhvZCBmb3IgZWFjaCBjbGFzcyBvZiB0aGUgbW9kZWwsCisgKiBzdGFydGluZyB3aXRoIHRoZSBhY3R1YWwgY2xhc3Mgb2YgdGhlIG9iamVjdAorICogYW5kIHByb2NlZWRpbmcgdXAgdGhlIGluaGVyaXRhbmNlIGhpZXJhcmNoeQorICogdW50aWwgYSBub24tbnVsbCByZXN1bHQgaXMgcmV0dXJuZWQsCisgKiB3aGljaCBpcyB0aGUgcmVzdWx0IG9mIHRoZSBzd2l0Y2guCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzLlNpbXVsYXRpb25Mb2dnZXJQYWNrYWdlCisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBTaW11bGF0aW9uTG9nZ2VyU3dpdGNoPFQxPiB7CisJLyoqCisJICogVGhlIGNhY2hlZCBtb2RlbCBwYWNrYWdlCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHN0YXRpYyBTaW11bGF0aW9uTG9nZ2VyUGFja2FnZSBtb2RlbFBhY2thZ2U7CisKKwkvKioKKwkgKiBDcmVhdGVzIGFuIGluc3RhbmNlIG9mIHRoZSBzd2l0Y2guCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFNpbXVsYXRpb25Mb2dnZXJTd2l0Y2goKSB7CisJCWlmIChtb2RlbFBhY2thZ2UgPT0gbnVsbCkgeworCQkJbW9kZWxQYWNrYWdlID0gU2ltdWxhdGlvbkxvZ2dlclBhY2thZ2UuZUlOU1RBTkNFOworCQl9CisJfQorCisJLyoqCisJICogQ2FsbHMgPGNvZGU+Y2FzZVhYWDwvY29kZT4gZm9yIGVhY2ggY2xhc3Mgb2YgdGhlIG1vZGVsIHVudGlsIG9uZSByZXR1cm5zIGEgbm9uIG51bGwgcmVzdWx0OyBpdCB5aWVsZHMgdGhhdCByZXN1bHQuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBmaXJzdCBub24tbnVsbCByZXN1bHQgcmV0dXJuZWQgYnkgYSA8Y29kZT5jYXNlWFhYPC9jb2RlPiBjYWxsLgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVDEgZG9Td2l0Y2goRU9iamVjdCB0aGVFT2JqZWN0KSB7CisJCXJldHVybiBkb1N3aXRjaCh0aGVFT2JqZWN0LmVDbGFzcygpLCB0aGVFT2JqZWN0KTsKKwl9CisKKwkvKioKKwkgKiBDYWxscyA8Y29kZT5jYXNlWFhYPC9jb2RlPiBmb3IgZWFjaCBjbGFzcyBvZiB0aGUgbW9kZWwgdW50aWwgb25lIHJldHVybnMgYSBub24gbnVsbCByZXN1bHQ7IGl0IHlpZWxkcyB0aGF0IHJlc3VsdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIGZpcnN0IG5vbi1udWxsIHJlc3VsdCByZXR1cm5lZCBieSBhIDxjb2RlPmNhc2VYWFg8L2NvZGU+IGNhbGwuCisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBUMSBkb1N3aXRjaChFQ2xhc3MgdGhlRUNsYXNzLCBFT2JqZWN0IHRoZUVPYmplY3QpIHsKKwkJaWYgKHRoZUVDbGFzcy5lQ29udGFpbmVyKCkgPT0gbW9kZWxQYWNrYWdlKSB7CisJCQlyZXR1cm4gZG9Td2l0Y2godGhlRUNsYXNzLmdldENsYXNzaWZpZXJJRCgpLCB0aGVFT2JqZWN0KTsKKwkJfQorCQllbHNlIHsKKwkJCUxpc3Q8RUNsYXNzPiBlU3VwZXJUeXBlcyA9IHRoZUVDbGFzcy5nZXRFU3VwZXJUeXBlcygpOworCQkJcmV0dXJuCisJCQkJZVN1cGVyVHlwZXMuaXNFbXB0eSgpID8KKwkJCQkJZGVmYXVsdENhc2UodGhlRU9iamVjdCkgOgorCQkJCQlkb1N3aXRjaChlU3VwZXJUeXBlcy5nZXQoMCksIHRoZUVPYmplY3QpOworCQl9CisJfQorCisJLyoqCisJICogQ2FsbHMgPGNvZGU+Y2FzZVhYWDwvY29kZT4gZm9yIGVhY2ggY2xhc3Mgb2YgdGhlIG1vZGVsIHVudGlsIG9uZSByZXR1cm5zIGEgbm9uIG51bGwgcmVzdWx0OyBpdCB5aWVsZHMgdGhhdCByZXN1bHQuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBmaXJzdCBub24tbnVsbCByZXN1bHQgcmV0dXJuZWQgYnkgYSA8Y29kZT5jYXNlWFhYPC9jb2RlPiBjYWxsLgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgVDEgZG9Td2l0Y2goaW50IGNsYXNzaWZpZXJJRCwgRU9iamVjdCB0aGVFT2JqZWN0KSB7CisJCXN3aXRjaCAoY2xhc3NpZmllcklEKSB7CisJCQljYXNlIFNpbXVsYXRpb25Mb2dnZXJQYWNrYWdlLlNJTVVMQVRJT05fTE9HR0VSOiB7CisJCQkJU2ltdWxhdGlvbkxvZ2dlciBzaW11bGF0aW9uTG9nZ2VyID0gKFNpbXVsYXRpb25Mb2dnZXIpdGhlRU9iamVjdDsKKwkJCQlUMSByZXN1bHQgPSBjYXNlU2ltdWxhdGlvbkxvZ2dlcihzaW11bGF0aW9uTG9nZ2VyKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VMb2dnZXIoc2ltdWxhdGlvbkxvZ2dlcik7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlSWRlbnRpZmlhYmxlKHNpbXVsYXRpb25Mb2dnZXIpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZUNvbXBhcmFibGUoc2ltdWxhdGlvbkxvZ2dlcik7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBkZWZhdWx0Q2FzZSh0aGVFT2JqZWN0KTsKKwkJCQlyZXR1cm4gcmVzdWx0OworCQkJfQorCQkJY2FzZSBTaW11bGF0aW9uTG9nZ2VyUGFja2FnZS5TWU5DSFJPTk9VU19MT0dHRVI6IHsKKwkJCQlTeW5jaHJvbm91c0xvZ2dlciBzeW5jaHJvbm91c0xvZ2dlciA9IChTeW5jaHJvbm91c0xvZ2dlcil0aGVFT2JqZWN0OworCQkJCVQxIHJlc3VsdCA9IGNhc2VTeW5jaHJvbm91c0xvZ2dlcihzeW5jaHJvbm91c0xvZ2dlcik7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlU2ltdWxhdGlvbkxvZ2dlcihzeW5jaHJvbm91c0xvZ2dlcik7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlTG9nZ2VyKHN5bmNocm9ub3VzTG9nZ2VyKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VJZGVudGlmaWFibGUoc3luY2hyb25vdXNMb2dnZXIpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZUNvbXBhcmFibGUoc3luY2hyb25vdXNMb2dnZXIpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gZGVmYXVsdENhc2UodGhlRU9iamVjdCk7CisJCQkJcmV0dXJuIHJlc3VsdDsKKwkJCX0KKwkJCWNhc2UgU2ltdWxhdGlvbkxvZ2dlclBhY2thZ2UuQVNZTkNIUk9OT1VTX0xPR0dFUjogeworCQkJCUFzeW5jaHJvbm91c0xvZ2dlciBhc3luY2hyb25vdXNMb2dnZXIgPSAoQXN5bmNocm9ub3VzTG9nZ2VyKXRoZUVPYmplY3Q7CisJCQkJVDEgcmVzdWx0ID0gY2FzZUFzeW5jaHJvbm91c0xvZ2dlcihhc3luY2hyb25vdXNMb2dnZXIpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZVNpbXVsYXRpb25Mb2dnZXIoYXN5bmNocm9ub3VzTG9nZ2VyKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VMb2dnZXIoYXN5bmNocm9ub3VzTG9nZ2VyKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VJZGVudGlmaWFibGUoYXN5bmNocm9ub3VzTG9nZ2VyKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VDb21wYXJhYmxlKGFzeW5jaHJvbm91c0xvZ2dlcik7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBkZWZhdWx0Q2FzZSh0aGVFT2JqZWN0KTsKKwkJCQlyZXR1cm4gcmVzdWx0OworCQkJfQorCQkJY2FzZSBTaW11bGF0aW9uTG9nZ2VyUGFja2FnZS5TSU1VTEFUSU9OX0xPR0dFUl9FVkVOVDogeworCQkJCVNpbXVsYXRpb25Mb2dnZXJFdmVudCBzaW11bGF0aW9uTG9nZ2VyRXZlbnQgPSAoU2ltdWxhdGlvbkxvZ2dlckV2ZW50KXRoZUVPYmplY3Q7CisJCQkJVDEgcmVzdWx0ID0gY2FzZVNpbXVsYXRpb25Mb2dnZXJFdmVudChzaW11bGF0aW9uTG9nZ2VyRXZlbnQpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gZGVmYXVsdENhc2UodGhlRU9iamVjdCk7CisJCQkJcmV0dXJuIHJlc3VsdDsKKwkJCX0KKwkJCWRlZmF1bHQ6IHJldHVybiBkZWZhdWx0Q2FzZSh0aGVFT2JqZWN0KTsKKwkJfQorCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPlNpbXVsYXRpb24gTG9nZ2VyPC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7CisJICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCisJICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+U2ltdWxhdGlvbiBMb2dnZXI8L2VtPicuCisJICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBUMSBjYXNlU2ltdWxhdGlvbkxvZ2dlcihTaW11bGF0aW9uTG9nZ2VyIG9iamVjdCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5TeW5jaHJvbm91cyBMb2dnZXI8L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsKKwkgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KKwkgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5TeW5jaHJvbm91cyBMb2dnZXI8L2VtPicuCisJICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBUMSBjYXNlU3luY2hyb25vdXNMb2dnZXIoU3luY2hyb25vdXNMb2dnZXIgb2JqZWN0KSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPklTaW11bGF0aW9uIExpc3RlbmVyPC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7CisJICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCisJICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+SVNpbXVsYXRpb24gTGlzdGVuZXI8L2VtPicuCisJICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBUMSBjYXNlSVNpbXVsYXRpb25MaXN0ZW5lcihJU2ltdWxhdGlvbkxpc3RlbmVyIG9iamVjdCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5Bc3luY2hyb25vdXMgTG9nZ2VyPC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7CisJICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCisJICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+QXN5bmNocm9ub3VzIExvZ2dlcjwvZW0+Jy4KKwkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFQxIGNhc2VBc3luY2hyb25vdXNMb2dnZXIoQXN5bmNocm9ub3VzTG9nZ2VyIG9iamVjdCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5FdmVudDwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOworCSAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgorCSAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkV2ZW50PC9lbT4nLgorCSAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVDEgY2FzZVNpbXVsYXRpb25Mb2dnZXJFdmVudChTaW11bGF0aW9uTG9nZ2VyRXZlbnQgb2JqZWN0KSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkNvbXBhcmFibGU8L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsKKwkgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KKwkgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5Db21wYXJhYmxlPC9lbT4nLgorCSAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgPFQ+IFQxIGNhc2VDb21wYXJhYmxlKENvbXBhcmFibGU8VD4gb2JqZWN0KSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPklkZW50aWZpYWJsZTwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOworCSAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgorCSAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPklkZW50aWZpYWJsZTwvZW0+Jy4KKwkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFQxIGNhc2VJZGVudGlmaWFibGUoSWRlbnRpZmlhYmxlIG9iamVjdCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5Mb2dnZXI8L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsKKwkgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KKwkgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5Mb2dnZXI8L2VtPicuCisJICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBUMSBjYXNlTG9nZ2VyKExvZ2dlciBvYmplY3QpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+RU9iamVjdDwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOworCSAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLCBidXQgdGhpcyBpcyB0aGUgbGFzdCBjYXNlIGFueXdheS4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KKwkgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5FT2JqZWN0PC9lbT4nLgorCSAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVDEgZGVmYXVsdENhc2UoRU9iamVjdCBvYmplY3QpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCit9IC8vU2ltdWxhdGlvbkxvZ2dlclN3aXRjaApkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnNlcXVlbmNlcnMvLmNoZWNrc3R5bGUgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uc2VxdWVuY2Vycy8uY2hlY2tzdHlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZTgxMzliCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnNlcXVlbmNlcnMvLmNoZWNrc3R5bGUKQEAgLTAsMCArMSw2IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPGZpbGVzZXQtY29uZmlnIGZpbGUtZm9ybWF0LXZlcnNpb249IjEuMi4wIiBzaW1wbGUtY29uZmlnPSJ0cnVlIj4KKyAgICA8ZmlsZXNldCBuYW1lPSJhbGwiIGVuYWJsZWQ9InRydWUiIGNoZWNrLWNvbmZpZy1uYW1lPSJTdW4gQ2hlY2tzIiBsb2NhbD0iZmFsc2UiPgorICAgICAgICA8ZmlsZS1tYXRjaC1wYXR0ZXJuIG1hdGNoLXBhdHRlcm49Ii4iIGluY2x1ZGUtcGF0dGVybj0idHJ1ZSIvPgorICAgIDwvZmlsZXNldD4KKzwvZmlsZXNldC1jb25maWc+CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uc2VxdWVuY2Vycy8uY2xhc3NwYXRoIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnNlcXVlbmNlcnMvLmNsYXNzcGF0aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMDRlODYxCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnNlcXVlbmNlcnMvLmNsYXNzcGF0aApAQCAtMCwwICsxLDcgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8Y2xhc3NwYXRoPgorCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJzcmMiIHBhdGg9InNyYyIvPgorCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJjb24iIHBhdGg9Im9yZy5lY2xpcHNlLmpkdC5sYXVuY2hpbmcuSlJFX0NPTlRBSU5FUi9vcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwuZGVidWcudWkubGF1bmNoZXIuU3RhbmRhcmRWTVR5cGUvSjJTRS0xLjUiLz4KKwk8Y2xhc3NwYXRoZW50cnkga2luZD0iY29uIiBwYXRoPSJvcmcuZWNsaXBzZS5wZGUuY29yZS5yZXF1aXJlZFBsdWdpbnMiLz4KKwk8Y2xhc3NwYXRoZW50cnkga2luZD0ib3V0cHV0IiBwYXRoPSJiaW4iLz4KKzwvY2xhc3NwYXRoPgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnNlcXVlbmNlcnMvLnByb2plY3QgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uc2VxdWVuY2Vycy8ucHJvamVjdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYzExMTIzCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnNlcXVlbmNlcnMvLnByb2plY3QKQEAgLTAsMCArMSwyOCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxwcm9qZWN0RGVzY3JpcHRpb24+CisJPG5hbWU+b3JnLmVjbGlwc2Uuc3RlbS5zZXF1ZW5jZXJzPC9uYW1lPgorCTxjb21tZW50PjwvY29tbWVudD4KKwk8cHJvamVjdHM+CisJPC9wcm9qZWN0cz4KKwk8YnVpbGRTcGVjPgorCQk8YnVpbGRDb21tYW5kPgorCQkJPG5hbWU+b3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YWJ1aWxkZXI8L25hbWU+CisJCQk8YXJndW1lbnRzPgorCQkJPC9hcmd1bWVudHM+CisJCTwvYnVpbGRDb21tYW5kPgorCQk8YnVpbGRDb21tYW5kPgorCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLk1hbmlmZXN0QnVpbGRlcjwvbmFtZT4KKwkJCTxhcmd1bWVudHM+CisJCQk8L2FyZ3VtZW50cz4KKwkJPC9idWlsZENvbW1hbmQ+CisJCTxidWlsZENvbW1hbmQ+CisJCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuU2NoZW1hQnVpbGRlcjwvbmFtZT4KKwkJCTxhcmd1bWVudHM+CisJCQk8L2FyZ3VtZW50cz4KKwkJPC9idWlsZENvbW1hbmQ+CisJPC9idWlsZFNwZWM+CisJPG5hdHVyZXM+CisJCTxuYXR1cmU+b3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YW5hdHVyZTwvbmF0dXJlPgorCQk8bmF0dXJlPm9yZy5lY2xpcHNlLnBkZS5QbHVnaW5OYXR1cmU8L25hdHVyZT4KKwk8L25hdHVyZXM+Cis8L3Byb2plY3REZXNjcmlwdGlvbj4KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5zZXF1ZW5jZXJzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5zZXF1ZW5jZXJzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZDk3OTMzCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnNlcXVlbmNlcnMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzCkBAIC0wLDAgKzEsNjkgQEAKKyNNb24gSmFuIDIxIDEyOjQ0OjE5IEVTVCAyMDA4CitlY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29kZWdlbi50YXJnZXRQbGF0Zm9ybT0xLjUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvbXBsaWFuY2U9MS41CitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5kb2MuY29tbWVudC5zdXBwb3J0PWRpc2FibGVkCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmFubm90YXRpb25TdXBlckludGVyZmFjZT1pZ25vcmUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uYXNzZXJ0SWRlbnRpZmllcj1lcnJvcgorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5hdXRvYm94aW5nPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZGVwcmVjYXRpb249aWdub3JlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRlcHJlY2F0aW9uSW5EZXByZWNhdGVkQ29kZT1kaXNhYmxlZAorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5kZXByZWNhdGlvbldoZW5PdmVycmlkaW5nRGVwcmVjYXRlZE1ldGhvZD1kaXNhYmxlZAorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5kaXNjb3VyYWdlZFJlZmVyZW5jZT1pZ25vcmUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZW1wdHlTdGF0ZW1lbnQ9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5lbnVtSWRlbnRpZmllcj1lcnJvcgorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5mYWxsdGhyb3VnaENhc2U9aWdub3JlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZpZWxkSGlkaW5nPWlnbm9yZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5maW5hbFBhcmFtZXRlckJvdW5kPWlnbm9yZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5maW5hbGx5QmxvY2tOb3RDb21wbGV0aW5nTm9ybWFsbHk9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5mb3JiaWRkZW5SZWZlcmVuY2U9aWdub3JlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmhpZGRlbkNhdGNoQmxvY2s9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbmNvbXBhdGlibGVOb25Jbmhlcml0ZWRJbnRlcmZhY2VNZXRob2Q9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbmNvbXBsZXRlRW51bVN3aXRjaD1pZ25vcmUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW5kaXJlY3RTdGF0aWNBY2Nlc3M9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbnZhbGlkSmF2YWRvYz13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmludmFsaWRKYXZhZG9jVGFncz1lbmFibGVkCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmludmFsaWRKYXZhZG9jVGFnc0RlcHJlY2F0ZWRSZWY9ZW5hYmxlZAorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbnZhbGlkSmF2YWRvY1RhZ3NOb3RWaXNpYmxlUmVmPWVuYWJsZWQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW52YWxpZEphdmFkb2NUYWdzVmlzaWJpbGl0eT1wdWJsaWMKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubG9jYWxWYXJpYWJsZUhpZGluZz1pZ25vcmUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWV0aG9kV2l0aENvbnN0cnVjdG9yTmFtZT13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdEZXByZWNhdGVkQW5ub3RhdGlvbj1pZ25vcmUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0phdmFkb2NDb21tZW50cz13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdKYXZhZG9jQ29tbWVudHNPdmVycmlkaW5nPWVuYWJsZWQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0phdmFkb2NDb21tZW50c1Zpc2liaWxpdHk9cHVibGljCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdKYXZhZG9jVGFncz13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdKYXZhZG9jVGFnc092ZXJyaWRpbmc9ZW5hYmxlZAorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nSmF2YWRvY1RhZ3NWaXNpYmlsaXR5PXB1YmxpYworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nT3ZlcnJpZGVBbm5vdGF0aW9uPWlnbm9yZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nU2VyaWFsVmVyc2lvbj13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm5vRWZmZWN0QXNzaWdubWVudD13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm5vSW1wbGljaXRTdHJpbmdDb252ZXJzaW9uPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubm9uRXh0ZXJuYWxpemVkU3RyaW5nTGl0ZXJhbD1pZ25vcmUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubnVsbFJlZmVyZW5jZT1pZ25vcmUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ub3ZlcnJpZGluZ1BhY2thZ2VEZWZhdWx0TWV0aG9kPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ucGFyYW1ldGVyQXNzaWdubWVudD1pZ25vcmUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ucG9zc2libGVBY2NpZGVudGFsQm9vbGVhbkFzc2lnbm1lbnQ9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5yYXdUeXBlUmVmZXJlbmNlPWlnbm9yZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5zcGVjaWFsUGFyYW1ldGVySGlkaW5nRmllbGQ9ZGlzYWJsZWQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uc3RhdGljQWNjZXNzUmVjZWl2ZXI9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5zdXBwcmVzc1dhcm5pbmdzPWVuYWJsZWQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uc3ludGhldGljQWNjZXNzRW11bGF0aW9uPWlnbm9yZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS50eXBlUGFyYW1ldGVySGlkaW5nPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5jaGVja2VkVHlwZU9wZXJhdGlvbj1pZ25vcmUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5kb2N1bWVudGVkRW1wdHlCbG9jaz1pZ25vcmUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5oYW5kbGVkV2FybmluZ1Rva2VuPWlnbm9yZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bm5lY2Vzc2FyeUVsc2U9aWdub3JlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVubmVjZXNzYXJ5VHlwZUNoZWNrPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5xdWFsaWZpZWRGaWVsZEFjY2Vzcz1pZ25vcmUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkRGVjbGFyZWRUaHJvd25FeGNlcHRpb249d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWREZWNsYXJlZFRocm93bkV4Y2VwdGlvbldoZW5PdmVycmlkaW5nPWVuYWJsZWQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkSW1wb3J0PWlnbm9yZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRMYWJlbD13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZExvY2FsPWlnbm9yZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRQYXJhbWV0ZXI9aWdub3JlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZFBhcmFtZXRlcldoZW5JbXBsZW1lbnRpbmdBYnN0cmFjdD1lbmFibGVkCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZFBhcmFtZXRlcldoZW5PdmVycmlkaW5nQ29uY3JldGU9ZW5hYmxlZAorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRQcml2YXRlTWVtYmVyPWlnbm9yZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS52YXJhcmdzQXJndW1lbnROZWVkQ2FzdD13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5zb3VyY2U9MS41CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uc2VxdWVuY2Vycy9NRVRBLUlORi9NQU5JRkVTVC5NRiBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5zZXF1ZW5jZXJzL01FVEEtSU5GL01BTklGRVNULk1GCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIxZjE2OWUKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uc2VxdWVuY2Vycy9NRVRBLUlORi9NQU5JRkVTVC5NRgpAQCAtMCwwICsxLDkgQEAKK01hbmlmZXN0LVZlcnNpb246IDEuMAorQnVuZGxlLU1hbmlmZXN0VmVyc2lvbjogMgorQnVuZGxlLU5hbWU6ICVwbHVnaW5OYW1lCitCdW5kbGUtU3ltYm9saWNOYW1lOiBvcmcuZWNsaXBzZS5zdGVtLnNlcXVlbmNlcnM7IHNpbmdsZXRvbjo9dHJ1ZQorQnVuZGxlLVZlcnNpb246IDEuMi4xCitCdW5kbGUtQ2xhc3NQYXRoOiAuCitCdW5kbGUtVmVuZG9yOiAlcHJvdmlkZXJOYW1lCitCdW5kbGUtTG9jYWxpemF0aW9uOiBwbHVnaW4KK0J1bmRsZS1SZXF1aXJlZEV4ZWN1dGlvbkVudmlyb25tZW50OiBKMlNFLTEuNQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnNlcXVlbmNlcnMvYnVpbGQucHJvcGVydGllcyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5zZXF1ZW5jZXJzL2J1aWxkLnByb3BlcnRpZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWE3NzQxNQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5zZXF1ZW5jZXJzL2J1aWxkLnByb3BlcnRpZXMKQEAgLTAsMCArMSwxOSBAQAorIyA8Y29weXJpZ2h0PgorIyA8L2NvcHlyaWdodD4KKyMKKyMgJElkJAorCitiaW4uaW5jbHVkZXMgPSAuLFwKKyAgICAgICAgICAgICAgIGljb25zLyxcCisgICAgICAgICAgICAgICBNRVRBLUlORi8sXAorICAgICAgICAgICAgICAgcGx1Z2luLnhtbCxcCisgICAgICAgICAgICAgICBwbHVnaW4ucHJvcGVydGllcyxcCisgICAgICAgICAgICAgICBub3RpY2UuaHRtbCxcCisgICAgICAgICAgICAgICBlcGwtdjEwLmh0bWwsXAorICAgICAgICAgICAgICAgcmVzb3VyY2VzLyxcCisgICAgICAgICAgICAgICBwbHVnaW5fZGUucHJvcGVydGllcyxcCisgICAgICAgICAgICAgICBwbHVnaW5fa3IucHJvcGVydGllcyxcCisgICAgICAgICAgICAgICBwbHVnaW5femgucHJvcGVydGllcworamFycy5jb21waWxlLm9yZGVyID0gLgorc291cmNlLi4gPSBzcmMvCitvdXRwdXQuLiA9IGJpbi8KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5zZXF1ZW5jZXJzL2VwbC12MTAuaHRtbCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5zZXF1ZW5jZXJzL2VwbC12MTAuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZDRiMTk2Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnNlcXVlbmNlcnMvZXBsLXYxMC5odG1sCkBAIC0wLDAgKzEsMzI4IEBACis8aHRtbCB4bWxuczpvPSJ1cm46c2NoZW1hcy1taWNyb3NvZnQtY29tOm9mZmljZTpvZmZpY2UiCit4bWxuczp3PSJ1cm46c2NoZW1hcy1taWNyb3NvZnQtY29tOm9mZmljZTp3b3JkIgoreG1sbnM9Imh0dHA6Ly93d3cudzMub3JnL1RSL1JFQy1odG1sNDAiPgorCis8aGVhZD4KKzxtZXRhIGh0dHAtZXF1aXY9Q29udGVudC1UeXBlIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD13aW5kb3dzLTEyNTIiPgorPG1ldGEgbmFtZT1Qcm9nSWQgY29udGVudD1Xb3JkLkRvY3VtZW50PgorPG1ldGEgbmFtZT1HZW5lcmF0b3IgY29udGVudD0iTWljcm9zb2Z0IFdvcmQgOSI+Cis8bWV0YSBuYW1lPU9yaWdpbmF0b3IgY29udGVudD0iTWljcm9zb2Z0IFdvcmQgOSI+Cis8bGluayByZWw9RmlsZS1MaXN0CitocmVmPSIuL0VjbGlwc2UlMjBFUEwlMjAyMDAzXzExXzEwJTIwRmluYWxfZmlsZXMvZmlsZWxpc3QueG1sIj4KKzx0aXRsZT5FY2xpcHNlIFB1YmxpYyBMaWNlbnNlIC0gVmVyc2lvbiAxLjA8L3RpdGxlPgorPCEtLVtpZiBndGUgbXNvIDldPjx4bWw+CisgPG86RG9jdW1lbnRQcm9wZXJ0aWVzPgorICA8bzpSZXZpc2lvbj4yPC9vOlJldmlzaW9uPgorICA8bzpUb3RhbFRpbWU+MzwvbzpUb3RhbFRpbWU+CisgIDxvOkNyZWF0ZWQ+MjAwNC0wMy0wNVQyMzowMzowMFo8L286Q3JlYXRlZD4KKyAgPG86TGFzdFNhdmVkPjIwMDQtMDMtMDVUMjM6MDM6MDBaPC9vOkxhc3RTYXZlZD4KKyAgPG86UGFnZXM+NDwvbzpQYWdlcz4KKyAgPG86V29yZHM+MTYyNjwvbzpXb3Jkcz4KKyAgPG86Q2hhcmFjdGVycz45MjcwPC9vOkNoYXJhY3RlcnM+CisgICA8bzpMaW5lcz43NzwvbzpMaW5lcz4KKyAgPG86UGFyYWdyYXBocz4xODwvbzpQYXJhZ3JhcGhzPgorICA8bzpDaGFyYWN0ZXJzV2l0aFNwYWNlcz4xMTM4NDwvbzpDaGFyYWN0ZXJzV2l0aFNwYWNlcz4KKyAgPG86VmVyc2lvbj45LjQ0MDI8L286VmVyc2lvbj4KKyA8L286RG9jdW1lbnRQcm9wZXJ0aWVzPgorPC94bWw+PCFbZW5kaWZdLS0+PCEtLVtpZiBndGUgbXNvIDldPjx4bWw+CisgPHc6V29yZERvY3VtZW50PgorICA8dzpUcmFja1JldmlzaW9ucy8+CisgPC93OldvcmREb2N1bWVudD4KKzwveG1sPjwhW2VuZGlmXS0tPgorPHN0eWxlPgorPCEtLQorIC8qIEZvbnQgRGVmaW5pdGlvbnMgKi8KK0Bmb250LWZhY2UKKwl7Zm9udC1mYW1pbHk6VGFob21hOworCXBhbm9zZS0xOjIgMTEgNiA0IDMgNSA0IDQgMiA0OworCW1zby1mb250LWNoYXJzZXQ6MDsKKwltc28tZ2VuZXJpYy1mb250LWZhbWlseTpzd2lzczsKKwltc28tZm9udC1waXRjaDp2YXJpYWJsZTsKKwltc28tZm9udC1zaWduYXR1cmU6NTUzNjc5NDk1IC0yMTQ3NDgzNjQ4IDggMCA2NjA0NyAwO30KKyAvKiBTdHlsZSBEZWZpbml0aW9ucyAqLworcC5Nc29Ob3JtYWwsIGxpLk1zb05vcm1hbCwgZGl2Lk1zb05vcm1hbAorCXttc28tc3R5bGUtcGFyZW50OiIiOworCW1hcmdpbjowaW47CisJbWFyZ2luLWJvdHRvbTouMDAwMXB0OworCW1zby1wYWdpbmF0aW9uOndpZG93LW9ycGhhbjsKKwlmb250LXNpemU6MTIuMHB0OworCWZvbnQtZmFtaWx5OiJUaW1lcyBOZXcgUm9tYW4iOworCW1zby1mYXJlYXN0LWZvbnQtZmFtaWx5OiJUaW1lcyBOZXcgUm9tYW4iO30KK3AKKwl7bWFyZ2luLXJpZ2h0OjBpbjsKKwltc28tbWFyZ2luLXRvcC1hbHQ6YXV0bzsKKwltc28tbWFyZ2luLWJvdHRvbS1hbHQ6YXV0bzsKKwltYXJnaW4tbGVmdDowaW47CisJbXNvLXBhZ2luYXRpb246d2lkb3ctb3JwaGFuOworCWZvbnQtc2l6ZToxMi4wcHQ7CisJZm9udC1mYW1pbHk6IlRpbWVzIE5ldyBSb21hbiI7CisJbXNvLWZhcmVhc3QtZm9udC1mYW1pbHk6IlRpbWVzIE5ldyBSb21hbiI7fQorcC5CYWxsb29uVGV4dCwgbGkuQmFsbG9vblRleHQsIGRpdi5CYWxsb29uVGV4dAorCXttc28tc3R5bGUtbmFtZToiQmFsbG9vbiBUZXh0IjsKKwltYXJnaW46MGluOworCW1hcmdpbi1ib3R0b206LjAwMDFwdDsKKwltc28tcGFnaW5hdGlvbjp3aWRvdy1vcnBoYW47CisJZm9udC1zaXplOjguMHB0OworCWZvbnQtZmFtaWx5OlRhaG9tYTsKKwltc28tZmFyZWFzdC1mb250LWZhbWlseToiVGltZXMgTmV3IFJvbWFuIjt9CitAcGFnZSBTZWN0aW9uMQorCXtzaXplOjguNWluIDExLjBpbjsKKwltYXJnaW46MS4waW4gMS4yNWluIDEuMGluIDEuMjVpbjsKKwltc28taGVhZGVyLW1hcmdpbjouNWluOworCW1zby1mb290ZXItbWFyZ2luOi41aW47CisJbXNvLXBhcGVyLXNvdXJjZTowO30KK2Rpdi5TZWN0aW9uMQorCXtwYWdlOlNlY3Rpb24xO30KKy0tPgorPC9zdHlsZT4KKzwvaGVhZD4KKworPGJvZHkgbGFuZz1FTi1VUyBzdHlsZT0ndGFiLWludGVydmFsOi41aW4nPgorCis8ZGl2IGNsYXNzPVNlY3Rpb24xPgorCis8cCBhbGlnbj1jZW50ZXIgc3R5bGU9J3RleHQtYWxpZ246Y2VudGVyJz48Yj5FY2xpcHNlIFB1YmxpYyBMaWNlbnNlIC0gdiAxLjA8L2I+Cis8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5USEUgQUNDT01QQU5ZSU5HIFBST0dSQU0gSVMgUFJPVklERUQgVU5ERVIKK1RIRSBURVJNUyBPRiBUSElTIEVDTElQU0UgUFVCTElDIExJQ0VOU0UgKCZxdW90O0FHUkVFTUVOVCZxdW90OykuIEFOWSBVU0UsCitSRVBST0RVQ1RJT04gT1IgRElTVFJJQlVUSU9OIE9GIFRIRSBQUk9HUkFNIENPTlNUSVRVVEVTIFJFQ0lQSUVOVCdTIEFDQ0VQVEFOQ0UKK09GIFRISVMgQUdSRUVNRU5ULjwvc3Bhbj4gPC9wPgorCis8cD48Yj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+MS4gREVGSU5JVElPTlM8L3NwYW4+PC9iPiA8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4mcXVvdDtDb250cmlidXRpb24mcXVvdDsgbWVhbnM6PC9zcGFuPiA8L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmEpCitpbiB0aGUgY2FzZSBvZiB0aGUgaW5pdGlhbCBDb250cmlidXRvciwgdGhlIGluaXRpYWwgY29kZSBhbmQgZG9jdW1lbnRhdGlvbgorZGlzdHJpYnV0ZWQgdW5kZXIgdGhpcyBBZ3JlZW1lbnQsIGFuZDxiciBjbGVhcj1sZWZ0PgorYikgaW4gdGhlIGNhc2Ugb2YgZWFjaCBzdWJzZXF1ZW50IENvbnRyaWJ1dG9yOjwvc3Bhbj48L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmkpCitjaGFuZ2VzIHRvIHRoZSBQcm9ncmFtLCBhbmQ8L3NwYW4+PC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5paSkKK2FkZGl0aW9ucyB0byB0aGUgUHJvZ3JhbTs8L3NwYW4+PC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz53aGVyZQorc3VjaCBjaGFuZ2VzIGFuZC9vciBhZGRpdGlvbnMgdG8gdGhlIFByb2dyYW0gb3JpZ2luYXRlIGZyb20gYW5kIGFyZSBkaXN0cmlidXRlZAorYnkgdGhhdCBwYXJ0aWN1bGFyIENvbnRyaWJ1dG9yLiBBIENvbnRyaWJ1dGlvbiAnb3JpZ2luYXRlcycgZnJvbSBhIENvbnRyaWJ1dG9yCitpZiBpdCB3YXMgYWRkZWQgdG8gdGhlIFByb2dyYW0gYnkgc3VjaCBDb250cmlidXRvciBpdHNlbGYgb3IgYW55b25lIGFjdGluZyBvbgorc3VjaCBDb250cmlidXRvcidzIGJlaGFsZi4gQ29udHJpYnV0aW9ucyBkbyBub3QgaW5jbHVkZSBhZGRpdGlvbnMgdG8gdGhlCitQcm9ncmFtIHdoaWNoOiAoaSkgYXJlIHNlcGFyYXRlIG1vZHVsZXMgb2Ygc29mdHdhcmUgZGlzdHJpYnV0ZWQgaW4gY29uanVuY3Rpb24KK3dpdGggdGhlIFByb2dyYW0gdW5kZXIgdGhlaXIgb3duIGxpY2Vuc2UgYWdyZWVtZW50LCBhbmQgKGlpKSBhcmUgbm90IGRlcml2YXRpdmUKK3dvcmtzIG9mIHRoZSBQcm9ncmFtLiA8L3NwYW4+PC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+JnF1b3Q7Q29udHJpYnV0b3ImcXVvdDsgbWVhbnMgYW55IHBlcnNvbiBvcgorZW50aXR5IHRoYXQgZGlzdHJpYnV0ZXMgdGhlIFByb2dyYW0uPC9zcGFuPiA8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4mcXVvdDtMaWNlbnNlZCBQYXRlbnRzICZxdW90OyBtZWFuIHBhdGVudAorY2xhaW1zIGxpY2Vuc2FibGUgYnkgYSBDb250cmlidXRvciB3aGljaCBhcmUgbmVjZXNzYXJpbHkgaW5mcmluZ2VkIGJ5IHRoZSB1c2UKK29yIHNhbGUgb2YgaXRzIENvbnRyaWJ1dGlvbiBhbG9uZSBvciB3aGVuIGNvbWJpbmVkIHdpdGggdGhlIFByb2dyYW0uIDwvc3Bhbj48L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4mcXVvdDtQcm9ncmFtJnF1b3Q7IG1lYW5zIHRoZSBDb250cmlidXRpb25zCitkaXN0cmlidXRlZCBpbiBhY2NvcmRhbmNlIHdpdGggdGhpcyBBZ3JlZW1lbnQuPC9zcGFuPiA8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4mcXVvdDtSZWNpcGllbnQmcXVvdDsgbWVhbnMgYW55b25lIHdobworcmVjZWl2ZXMgdGhlIFByb2dyYW0gdW5kZXIgdGhpcyBBZ3JlZW1lbnQsIGluY2x1ZGluZyBhbGwgQ29udHJpYnV0b3JzLjwvc3Bhbj4gPC9wPgorCis8cD48Yj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+Mi4gR1JBTlQgT0YgUklHSFRTPC9zcGFuPjwvYj4gPC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5hKQorU3ViamVjdCB0byB0aGUgdGVybXMgb2YgdGhpcyBBZ3JlZW1lbnQsIGVhY2ggQ29udHJpYnV0b3IgaGVyZWJ5IGdyYW50cyBSZWNpcGllbnQKK2Egbm9uLWV4Y2x1c2l2ZSwgd29ybGR3aWRlLCByb3lhbHR5LWZyZWUgY29weXJpZ2h0IGxpY2Vuc2UgdG88c3Bhbgorc3R5bGU9J2NvbG9yOnJlZCc+IDwvc3Bhbj5yZXByb2R1Y2UsIHByZXBhcmUgZGVyaXZhdGl2ZSB3b3JrcyBvZiwgcHVibGljbHkKK2Rpc3BsYXksIHB1YmxpY2x5IHBlcmZvcm0sIGRpc3RyaWJ1dGUgYW5kIHN1YmxpY2Vuc2UgdGhlIENvbnRyaWJ1dGlvbiBvZiBzdWNoCitDb250cmlidXRvciwgaWYgYW55LCBhbmQgc3VjaCBkZXJpdmF0aXZlIHdvcmtzLCBpbiBzb3VyY2UgY29kZSBhbmQgb2JqZWN0IGNvZGUKK2Zvcm0uPC9zcGFuPjwvcD4KKworPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YikKK1N1YmplY3QgdG8gdGhlIHRlcm1zIG9mIHRoaXMgQWdyZWVtZW50LCBlYWNoIENvbnRyaWJ1dG9yIGhlcmVieSBncmFudHMKK1JlY2lwaWVudCBhIG5vbi1leGNsdXNpdmUsIHdvcmxkd2lkZSw8c3BhbiBzdHlsZT0nY29sb3I6Z3JlZW4nPiA8L3NwYW4+cm95YWx0eS1mcmVlCitwYXRlbnQgbGljZW5zZSB1bmRlciBMaWNlbnNlZCBQYXRlbnRzIHRvIG1ha2UsIHVzZSwgc2VsbCwgb2ZmZXIgdG8gc2VsbCwgaW1wb3J0CithbmQgb3RoZXJ3aXNlIHRyYW5zZmVyIHRoZSBDb250cmlidXRpb24gb2Ygc3VjaCBDb250cmlidXRvciwgaWYgYW55LCBpbiBzb3VyY2UKK2NvZGUgYW5kIG9iamVjdCBjb2RlIGZvcm0uIFRoaXMgcGF0ZW50IGxpY2Vuc2Ugc2hhbGwgYXBwbHkgdG8gdGhlIGNvbWJpbmF0aW9uCitvZiB0aGUgQ29udHJpYnV0aW9uIGFuZCB0aGUgUHJvZ3JhbSBpZiwgYXQgdGhlIHRpbWUgdGhlIENvbnRyaWJ1dGlvbiBpcyBhZGRlZAorYnkgdGhlIENvbnRyaWJ1dG9yLCBzdWNoIGFkZGl0aW9uIG9mIHRoZSBDb250cmlidXRpb24gY2F1c2VzIHN1Y2ggY29tYmluYXRpb24KK3RvIGJlIGNvdmVyZWQgYnkgdGhlIExpY2Vuc2VkIFBhdGVudHMuIFRoZSBwYXRlbnQgbGljZW5zZSBzaGFsbCBub3QgYXBwbHkgdG8KK2FueSBvdGhlciBjb21iaW5hdGlvbnMgd2hpY2ggaW5jbHVkZSB0aGUgQ29udHJpYnV0aW9uLiBObyBoYXJkd2FyZSBwZXIgc2UgaXMKK2xpY2Vuc2VkIGhlcmV1bmRlci4gPC9zcGFuPjwvcD4KKworPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YykKK1JlY2lwaWVudCB1bmRlcnN0YW5kcyB0aGF0IGFsdGhvdWdoIGVhY2ggQ29udHJpYnV0b3IgZ3JhbnRzIHRoZSBsaWNlbnNlcyB0byBpdHMKK0NvbnRyaWJ1dGlvbnMgc2V0IGZvcnRoIGhlcmVpbiwgbm8gYXNzdXJhbmNlcyBhcmUgcHJvdmlkZWQgYnkgYW55IENvbnRyaWJ1dG9yCit0aGF0IHRoZSBQcm9ncmFtIGRvZXMgbm90IGluZnJpbmdlIHRoZSBwYXRlbnQgb3Igb3RoZXIgaW50ZWxsZWN0dWFsIHByb3BlcnR5CityaWdodHMgb2YgYW55IG90aGVyIGVudGl0eS4gRWFjaCBDb250cmlidXRvciBkaXNjbGFpbXMgYW55IGxpYWJpbGl0eSB0byBSZWNpcGllbnQKK2ZvciBjbGFpbXMgYnJvdWdodCBieSBhbnkgb3RoZXIgZW50aXR5IGJhc2VkIG9uIGluZnJpbmdlbWVudCBvZiBpbnRlbGxlY3R1YWwKK3Byb3BlcnR5IHJpZ2h0cyBvciBvdGhlcndpc2UuIEFzIGEgY29uZGl0aW9uIHRvIGV4ZXJjaXNpbmcgdGhlIHJpZ2h0cyBhbmQKK2xpY2Vuc2VzIGdyYW50ZWQgaGVyZXVuZGVyLCBlYWNoIFJlY2lwaWVudCBoZXJlYnkgYXNzdW1lcyBzb2xlIHJlc3BvbnNpYmlsaXR5Cit0byBzZWN1cmUgYW55IG90aGVyIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgbmVlZGVkLCBpZiBhbnkuIEZvciBleGFtcGxlLAoraWYgYSB0aGlyZCBwYXJ0eSBwYXRlbnQgbGljZW5zZSBpcyByZXF1aXJlZCB0byBhbGxvdyBSZWNpcGllbnQgdG8gZGlzdHJpYnV0ZQordGhlIFByb2dyYW0sIGl0IGlzIFJlY2lwaWVudCdzIHJlc3BvbnNpYmlsaXR5IHRvIGFjcXVpcmUgdGhhdCBsaWNlbnNlIGJlZm9yZQorZGlzdHJpYnV0aW5nIHRoZSBQcm9ncmFtLjwvc3Bhbj48L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmQpCitFYWNoIENvbnRyaWJ1dG9yIHJlcHJlc2VudHMgdGhhdCB0byBpdHMga25vd2xlZGdlIGl0IGhhcyBzdWZmaWNpZW50IGNvcHlyaWdodAorcmlnaHRzIGluIGl0cyBDb250cmlidXRpb24sIGlmIGFueSwgdG8gZ3JhbnQgdGhlIGNvcHlyaWdodCBsaWNlbnNlIHNldCBmb3J0aCBpbgordGhpcyBBZ3JlZW1lbnQuIDwvc3Bhbj48L3A+CisKKzxwPjxiPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4zLiBSRVFVSVJFTUVOVFM8L3NwYW4+PC9iPiA8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5BIENvbnRyaWJ1dG9yIG1heSBjaG9vc2UgdG8gZGlzdHJpYnV0ZSB0aGUKK1Byb2dyYW0gaW4gb2JqZWN0IGNvZGUgZm9ybSB1bmRlciBpdHMgb3duIGxpY2Vuc2UgYWdyZWVtZW50LCBwcm92aWRlZCB0aGF0Ojwvc3Bhbj4KKzwvcD4KKworPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YSkKK2l0IGNvbXBsaWVzIHdpdGggdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoaXMgQWdyZWVtZW50OyBhbmQ8L3NwYW4+PC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5iKQoraXRzIGxpY2Vuc2UgYWdyZWVtZW50Ojwvc3Bhbj48L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmkpCitlZmZlY3RpdmVseSBkaXNjbGFpbXMgb24gYmVoYWxmIG9mIGFsbCBDb250cmlidXRvcnMgYWxsIHdhcnJhbnRpZXMgYW5kCitjb25kaXRpb25zLCBleHByZXNzIGFuZCBpbXBsaWVkLCBpbmNsdWRpbmcgd2FycmFudGllcyBvciBjb25kaXRpb25zIG9mIHRpdGxlCithbmQgbm9uLWluZnJpbmdlbWVudCwgYW5kIGltcGxpZWQgd2FycmFudGllcyBvciBjb25kaXRpb25zIG9mIG1lcmNoYW50YWJpbGl0eQorYW5kIGZpdG5lc3MgZm9yIGEgcGFydGljdWxhciBwdXJwb3NlOyA8L3NwYW4+PC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5paSkKK2VmZmVjdGl2ZWx5IGV4Y2x1ZGVzIG9uIGJlaGFsZiBvZiBhbGwgQ29udHJpYnV0b3JzIGFsbCBsaWFiaWxpdHkgZm9yIGRhbWFnZXMsCitpbmNsdWRpbmcgZGlyZWN0LCBpbmRpcmVjdCwgc3BlY2lhbCwgaW5jaWRlbnRhbCBhbmQgY29uc2VxdWVudGlhbCBkYW1hZ2VzLCBzdWNoCithcyBsb3N0IHByb2ZpdHM7IDwvc3Bhbj48L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmlpaSkKK3N0YXRlcyB0aGF0IGFueSBwcm92aXNpb25zIHdoaWNoIGRpZmZlciBmcm9tIHRoaXMgQWdyZWVtZW50IGFyZSBvZmZlcmVkIGJ5IHRoYXQKK0NvbnRyaWJ1dG9yIGFsb25lIGFuZCBub3QgYnkgYW55IG90aGVyIHBhcnR5OyBhbmQ8L3NwYW4+PC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5pdikKK3N0YXRlcyB0aGF0IHNvdXJjZSBjb2RlIGZvciB0aGUgUHJvZ3JhbSBpcyBhdmFpbGFibGUgZnJvbSBzdWNoIENvbnRyaWJ1dG9yLCBhbmQKK2luZm9ybXMgbGljZW5zZWVzIGhvdyB0byBvYnRhaW4gaXQgaW4gYSByZWFzb25hYmxlIG1hbm5lciBvbiBvciB0aHJvdWdoIGEKK21lZGl1bSBjdXN0b21hcmlseSB1c2VkIGZvciBzb2Z0d2FyZSBleGNoYW5nZS48c3BhbiBzdHlsZT0nY29sb3I6Ymx1ZSc+IDwvc3Bhbj48L3NwYW4+PC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+V2hlbiB0aGUgUHJvZ3JhbSBpcyBtYWRlIGF2YWlsYWJsZSBpbiBzb3VyY2UKK2NvZGUgZm9ybTo8L3NwYW4+IDwvcD4KKworPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YSkKK2l0IG11c3QgYmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhpcyBBZ3JlZW1lbnQ7IGFuZCA8L3NwYW4+PC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5iKSBhCitjb3B5IG9mIHRoaXMgQWdyZWVtZW50IG11c3QgYmUgaW5jbHVkZWQgd2l0aCBlYWNoIGNvcHkgb2YgdGhlIFByb2dyYW0uIDwvc3Bhbj48L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5Db250cmlidXRvcnMgbWF5IG5vdCByZW1vdmUgb3IgYWx0ZXIgYW55Citjb3B5cmlnaHQgbm90aWNlcyBjb250YWluZWQgd2l0aGluIHRoZSBQcm9ncmFtLiA8L3NwYW4+PC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+RWFjaCBDb250cmlidXRvciBtdXN0IGlkZW50aWZ5IGl0c2VsZiBhcyB0aGUKK29yaWdpbmF0b3Igb2YgaXRzIENvbnRyaWJ1dGlvbiwgaWYgYW55LCBpbiBhIG1hbm5lciB0aGF0IHJlYXNvbmFibHkgYWxsb3dzCitzdWJzZXF1ZW50IFJlY2lwaWVudHMgdG8gaWRlbnRpZnkgdGhlIG9yaWdpbmF0b3Igb2YgdGhlIENvbnRyaWJ1dGlvbi4gPC9zcGFuPjwvcD4KKworPHA+PGI+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPjQuIENPTU1FUkNJQUwgRElTVFJJQlVUSU9OPC9zcGFuPjwvYj4gPC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+Q29tbWVyY2lhbCBkaXN0cmlidXRvcnMgb2Ygc29mdHdhcmUgbWF5CithY2NlcHQgY2VydGFpbiByZXNwb25zaWJpbGl0aWVzIHdpdGggcmVzcGVjdCB0byBlbmQgdXNlcnMsIGJ1c2luZXNzIHBhcnRuZXJzCithbmQgdGhlIGxpa2UuIFdoaWxlIHRoaXMgbGljZW5zZSBpcyBpbnRlbmRlZCB0byBmYWNpbGl0YXRlIHRoZSBjb21tZXJjaWFsIHVzZQorb2YgdGhlIFByb2dyYW0sIHRoZSBDb250cmlidXRvciB3aG8gaW5jbHVkZXMgdGhlIFByb2dyYW0gaW4gYSBjb21tZXJjaWFsCitwcm9kdWN0IG9mZmVyaW5nIHNob3VsZCBkbyBzbyBpbiBhIG1hbm5lciB3aGljaCBkb2VzIG5vdCBjcmVhdGUgcG90ZW50aWFsCitsaWFiaWxpdHkgZm9yIG90aGVyIENvbnRyaWJ1dG9ycy4gVGhlcmVmb3JlLCBpZiBhIENvbnRyaWJ1dG9yIGluY2x1ZGVzIHRoZQorUHJvZ3JhbSBpbiBhIGNvbW1lcmNpYWwgcHJvZHVjdCBvZmZlcmluZywgc3VjaCBDb250cmlidXRvciAoJnF1b3Q7Q29tbWVyY2lhbAorQ29udHJpYnV0b3ImcXVvdDspIGhlcmVieSBhZ3JlZXMgdG8gZGVmZW5kIGFuZCBpbmRlbW5pZnkgZXZlcnkgb3RoZXIKK0NvbnRyaWJ1dG9yICgmcXVvdDtJbmRlbW5pZmllZCBDb250cmlidXRvciZxdW90OykgYWdhaW5zdCBhbnkgbG9zc2VzLCBkYW1hZ2VzIGFuZAorY29zdHMgKGNvbGxlY3RpdmVseSAmcXVvdDtMb3NzZXMmcXVvdDspIGFyaXNpbmcgZnJvbSBjbGFpbXMsIGxhd3N1aXRzIGFuZCBvdGhlcgorbGVnYWwgYWN0aW9ucyBicm91Z2h0IGJ5IGEgdGhpcmQgcGFydHkgYWdhaW5zdCB0aGUgSW5kZW1uaWZpZWQgQ29udHJpYnV0b3IgdG8KK3RoZSBleHRlbnQgY2F1c2VkIGJ5IHRoZSBhY3RzIG9yIG9taXNzaW9ucyBvZiBzdWNoIENvbW1lcmNpYWwgQ29udHJpYnV0b3IgaW4KK2Nvbm5lY3Rpb24gd2l0aCBpdHMgZGlzdHJpYnV0aW9uIG9mIHRoZSBQcm9ncmFtIGluIGEgY29tbWVyY2lhbCBwcm9kdWN0CitvZmZlcmluZy4gVGhlIG9ibGlnYXRpb25zIGluIHRoaXMgc2VjdGlvbiBkbyBub3QgYXBwbHkgdG8gYW55IGNsYWltcyBvciBMb3NzZXMKK3JlbGF0aW5nIHRvIGFueSBhY3R1YWwgb3IgYWxsZWdlZCBpbnRlbGxlY3R1YWwgcHJvcGVydHkgaW5mcmluZ2VtZW50LiBJbiBvcmRlcgordG8gcXVhbGlmeSwgYW4gSW5kZW1uaWZpZWQgQ29udHJpYnV0b3IgbXVzdDogYSkgcHJvbXB0bHkgbm90aWZ5IHRoZSBDb21tZXJjaWFsCitDb250cmlidXRvciBpbiB3cml0aW5nIG9mIHN1Y2ggY2xhaW0sIGFuZCBiKSBhbGxvdyB0aGUgQ29tbWVyY2lhbCBDb250cmlidXRvcgordG8gY29udHJvbCwgYW5kIGNvb3BlcmF0ZSB3aXRoIHRoZSBDb21tZXJjaWFsIENvbnRyaWJ1dG9yIGluLCB0aGUgZGVmZW5zZSBhbmQKK2FueSByZWxhdGVkIHNldHRsZW1lbnQgbmVnb3RpYXRpb25zLiBUaGUgSW5kZW1uaWZpZWQgQ29udHJpYnV0b3IgbWF5IHBhcnRpY2lwYXRlCitpbiBhbnkgc3VjaCBjbGFpbSBhdCBpdHMgb3duIGV4cGVuc2UuPC9zcGFuPiA8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5Gb3IgZXhhbXBsZSwgYSBDb250cmlidXRvciBtaWdodCBpbmNsdWRlIHRoZQorUHJvZ3JhbSBpbiBhIGNvbW1lcmNpYWwgcHJvZHVjdCBvZmZlcmluZywgUHJvZHVjdCBYLiBUaGF0IENvbnRyaWJ1dG9yIGlzIHRoZW4gYQorQ29tbWVyY2lhbCBDb250cmlidXRvci4gSWYgdGhhdCBDb21tZXJjaWFsIENvbnRyaWJ1dG9yIHRoZW4gbWFrZXMgcGVyZm9ybWFuY2UKK2NsYWltcywgb3Igb2ZmZXJzIHdhcnJhbnRpZXMgcmVsYXRlZCB0byBQcm9kdWN0IFgsIHRob3NlIHBlcmZvcm1hbmNlIGNsYWltcyBhbmQKK3dhcnJhbnRpZXMgYXJlIHN1Y2ggQ29tbWVyY2lhbCBDb250cmlidXRvcidzIHJlc3BvbnNpYmlsaXR5IGFsb25lLiBVbmRlciB0aGlzCitzZWN0aW9uLCB0aGUgQ29tbWVyY2lhbCBDb250cmlidXRvciB3b3VsZCBoYXZlIHRvIGRlZmVuZCBjbGFpbXMgYWdhaW5zdCB0aGUKK290aGVyIENvbnRyaWJ1dG9ycyByZWxhdGVkIHRvIHRob3NlIHBlcmZvcm1hbmNlIGNsYWltcyBhbmQgd2FycmFudGllcywgYW5kIGlmIGEKK2NvdXJ0IHJlcXVpcmVzIGFueSBvdGhlciBDb250cmlidXRvciB0byBwYXkgYW55IGRhbWFnZXMgYXMgYSByZXN1bHQsIHRoZQorQ29tbWVyY2lhbCBDb250cmlidXRvciBtdXN0IHBheSB0aG9zZSBkYW1hZ2VzLjwvc3Bhbj4gPC9wPgorCis8cD48Yj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+NS4gTk8gV0FSUkFOVFk8L3NwYW4+PC9iPiA8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5FWENFUFQgQVMgRVhQUkVTU0xZIFNFVCBGT1JUSCBJTiBUSElTCitBR1JFRU1FTlQsIFRIRSBQUk9HUkFNIElTIFBST1ZJREVEIE9OIEFOICZxdW90O0FTIElTJnF1b3Q7IEJBU0lTLCBXSVRIT1VUCitXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIEVJVEhFUiBFWFBSRVNTIE9SIElNUExJRUQgSU5DTFVESU5HLAorV0lUSE9VVCBMSU1JVEFUSU9OLCBBTlkgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIFRJVExFLCBOT04tSU5GUklOR0VNRU5ULAorTUVSQ0hBTlRBQklMSVRZIE9SIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBFYWNoIFJlY2lwaWVudCBpcyBzb2xlbHkKK3Jlc3BvbnNpYmxlIGZvciBkZXRlcm1pbmluZyB0aGUgYXBwcm9wcmlhdGVuZXNzIG9mIHVzaW5nIGFuZCBkaXN0cmlidXRpbmcgdGhlCitQcm9ncmFtIGFuZCBhc3N1bWVzIGFsbCByaXNrcyBhc3NvY2lhdGVkIHdpdGggaXRzIGV4ZXJjaXNlIG9mIHJpZ2h0cyB1bmRlciB0aGlzCitBZ3JlZW1lbnQgLCBpbmNsdWRpbmcgYnV0IG5vdCBsaW1pdGVkIHRvIHRoZSByaXNrcyBhbmQgY29zdHMgb2YgcHJvZ3JhbSBlcnJvcnMsCitjb21wbGlhbmNlIHdpdGggYXBwbGljYWJsZSBsYXdzLCBkYW1hZ2UgdG8gb3IgbG9zcyBvZiBkYXRhLCBwcm9ncmFtcyBvcgorZXF1aXBtZW50LCBhbmQgdW5hdmFpbGFiaWxpdHkgb3IgaW50ZXJydXB0aW9uIG9mIG9wZXJhdGlvbnMuIDwvc3Bhbj48L3A+CisKKzxwPjxiPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz42LiBESVNDTEFJTUVSIE9GIExJQUJJTElUWTwvc3Bhbj48L2I+IDwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkVYQ0VQVCBBUyBFWFBSRVNTTFkgU0VUIEZPUlRIIElOIFRISVMKK0FHUkVFTUVOVCwgTkVJVEhFUiBSRUNJUElFTlQgTk9SIEFOWSBDT05UUklCVVRPUlMgU0hBTEwgSEFWRSBBTlkgTElBQklMSVRZIEZPUgorQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisoSU5DTFVESU5HIFdJVEhPVVQgTElNSVRBVElPTiBMT1NUIFBST0ZJVFMpLCBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcKK05FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT1IgRElTVFJJQlVUSU9OIE9GCitUSEUgUFJPR1JBTSBPUiBUSEUgRVhFUkNJU0UgT0YgQU5ZIFJJR0hUUyBHUkFOVEVEIEhFUkVVTkRFUiwgRVZFTiBJRiBBRFZJU0VEIE9GCitUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLjwvc3Bhbj4gPC9wPgorCis8cD48Yj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+Ny4gR0VORVJBTDwvc3Bhbj48L2I+IDwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPklmIGFueSBwcm92aXNpb24gb2YgdGhpcyBBZ3JlZW1lbnQgaXMgaW52YWxpZAorb3IgdW5lbmZvcmNlYWJsZSB1bmRlciBhcHBsaWNhYmxlIGxhdywgaXQgc2hhbGwgbm90IGFmZmVjdCB0aGUgdmFsaWRpdHkgb3IKK2VuZm9yY2VhYmlsaXR5IG9mIHRoZSByZW1haW5kZXIgb2YgdGhlIHRlcm1zIG9mIHRoaXMgQWdyZWVtZW50LCBhbmQgd2l0aG91dAorZnVydGhlciBhY3Rpb24gYnkgdGhlIHBhcnRpZXMgaGVyZXRvLCBzdWNoIHByb3Zpc2lvbiBzaGFsbCBiZSByZWZvcm1lZCB0byB0aGUKK21pbmltdW0gZXh0ZW50IG5lY2Vzc2FyeSB0byBtYWtlIHN1Y2ggcHJvdmlzaW9uIHZhbGlkIGFuZCBlbmZvcmNlYWJsZS48L3NwYW4+IDwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPklmIFJlY2lwaWVudCBpbnN0aXR1dGVzIHBhdGVudCBsaXRpZ2F0aW9uCithZ2FpbnN0IGFueSBlbnRpdHkgKGluY2x1ZGluZyBhIGNyb3NzLWNsYWltIG9yIGNvdW50ZXJjbGFpbSBpbiBhIGxhd3N1aXQpCithbGxlZ2luZyB0aGF0IHRoZSBQcm9ncmFtIGl0c2VsZiAoZXhjbHVkaW5nIGNvbWJpbmF0aW9ucyBvZiB0aGUgUHJvZ3JhbSB3aXRoCitvdGhlciBzb2Z0d2FyZSBvciBoYXJkd2FyZSkgaW5mcmluZ2VzIHN1Y2ggUmVjaXBpZW50J3MgcGF0ZW50KHMpLCB0aGVuIHN1Y2gKK1JlY2lwaWVudCdzIHJpZ2h0cyBncmFudGVkIHVuZGVyIFNlY3Rpb24gMihiKSBzaGFsbCB0ZXJtaW5hdGUgYXMgb2YgdGhlIGRhdGUKK3N1Y2ggbGl0aWdhdGlvbiBpcyBmaWxlZC4gPC9zcGFuPjwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkFsbCBSZWNpcGllbnQncyByaWdodHMgdW5kZXIgdGhpcyBBZ3JlZW1lbnQKK3NoYWxsIHRlcm1pbmF0ZSBpZiBpdCBmYWlscyB0byBjb21wbHkgd2l0aCBhbnkgb2YgdGhlIG1hdGVyaWFsIHRlcm1zIG9yCitjb25kaXRpb25zIG9mIHRoaXMgQWdyZWVtZW50IGFuZCBkb2VzIG5vdCBjdXJlIHN1Y2ggZmFpbHVyZSBpbiBhIHJlYXNvbmFibGUKK3BlcmlvZCBvZiB0aW1lIGFmdGVyIGJlY29taW5nIGF3YXJlIG9mIHN1Y2ggbm9uY29tcGxpYW5jZS4gSWYgYWxsIFJlY2lwaWVudCdzCityaWdodHMgdW5kZXIgdGhpcyBBZ3JlZW1lbnQgdGVybWluYXRlLCBSZWNpcGllbnQgYWdyZWVzIHRvIGNlYXNlIHVzZSBhbmQKK2Rpc3RyaWJ1dGlvbiBvZiB0aGUgUHJvZ3JhbSBhcyBzb29uIGFzIHJlYXNvbmFibHkgcHJhY3RpY2FibGUuIEhvd2V2ZXIsCitSZWNpcGllbnQncyBvYmxpZ2F0aW9ucyB1bmRlciB0aGlzIEFncmVlbWVudCBhbmQgYW55IGxpY2Vuc2VzIGdyYW50ZWQgYnkKK1JlY2lwaWVudCByZWxhdGluZyB0byB0aGUgUHJvZ3JhbSBzaGFsbCBjb250aW51ZSBhbmQgc3Vydml2ZS4gPC9zcGFuPjwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkV2ZXJ5b25lIGlzIHBlcm1pdHRlZCB0byBjb3B5IGFuZCBkaXN0cmlidXRlCitjb3BpZXMgb2YgdGhpcyBBZ3JlZW1lbnQsIGJ1dCBpbiBvcmRlciB0byBhdm9pZCBpbmNvbnNpc3RlbmN5IHRoZSBBZ3JlZW1lbnQgaXMKK2NvcHlyaWdodGVkIGFuZCBtYXkgb25seSBiZSBtb2RpZmllZCBpbiB0aGUgZm9sbG93aW5nIG1hbm5lci4gVGhlIEFncmVlbWVudAorU3Rld2FyZCByZXNlcnZlcyB0aGUgcmlnaHQgdG8gcHVibGlzaCBuZXcgdmVyc2lvbnMgKGluY2x1ZGluZyByZXZpc2lvbnMpIG9mCit0aGlzIEFncmVlbWVudCBmcm9tIHRpbWUgdG8gdGltZS4gTm8gb25lIG90aGVyIHRoYW4gdGhlIEFncmVlbWVudCBTdGV3YXJkIGhhcwordGhlIHJpZ2h0IHRvIG1vZGlmeSB0aGlzIEFncmVlbWVudC4gVGhlIEVjbGlwc2UgRm91bmRhdGlvbiBpcyB0aGUgaW5pdGlhbAorQWdyZWVtZW50IFN0ZXdhcmQuIFRoZSBFY2xpcHNlIEZvdW5kYXRpb24gbWF5IGFzc2lnbiB0aGUgcmVzcG9uc2liaWxpdHkgdG8KK3NlcnZlIGFzIHRoZSBBZ3JlZW1lbnQgU3Rld2FyZCB0byBhIHN1aXRhYmxlIHNlcGFyYXRlIGVudGl0eS4gRWFjaCBuZXcgdmVyc2lvbgorb2YgdGhlIEFncmVlbWVudCB3aWxsIGJlIGdpdmVuIGEgZGlzdGluZ3Vpc2hpbmcgdmVyc2lvbiBudW1iZXIuIFRoZSBQcm9ncmFtCisoaW5jbHVkaW5nIENvbnRyaWJ1dGlvbnMpIG1heSBhbHdheXMgYmUgZGlzdHJpYnV0ZWQgc3ViamVjdCB0byB0aGUgdmVyc2lvbiBvZgordGhlIEFncmVlbWVudCB1bmRlciB3aGljaCBpdCB3YXMgcmVjZWl2ZWQuIEluIGFkZGl0aW9uLCBhZnRlciBhIG5ldyB2ZXJzaW9uIG9mCit0aGUgQWdyZWVtZW50IGlzIHB1Ymxpc2hlZCwgQ29udHJpYnV0b3IgbWF5IGVsZWN0IHRvIGRpc3RyaWJ1dGUgdGhlIFByb2dyYW0KKyhpbmNsdWRpbmcgaXRzIENvbnRyaWJ1dGlvbnMpIHVuZGVyIHRoZSBuZXcgdmVyc2lvbi4gRXhjZXB0IGFzIGV4cHJlc3NseSBzdGF0ZWQKK2luIFNlY3Rpb25zIDIoYSkgYW5kIDIoYikgYWJvdmUsIFJlY2lwaWVudCByZWNlaXZlcyBubyByaWdodHMgb3IgbGljZW5zZXMgdG8KK3RoZSBpbnRlbGxlY3R1YWwgcHJvcGVydHkgb2YgYW55IENvbnRyaWJ1dG9yIHVuZGVyIHRoaXMgQWdyZWVtZW50LCB3aGV0aGVyCitleHByZXNzbHksIGJ5IGltcGxpY2F0aW9uLCBlc3RvcHBlbCBvciBvdGhlcndpc2UuIEFsbCByaWdodHMgaW4gdGhlIFByb2dyYW0gbm90CitleHByZXNzbHkgZ3JhbnRlZCB1bmRlciB0aGlzIEFncmVlbWVudCBhcmUgcmVzZXJ2ZWQuPC9zcGFuPiA8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5UaGlzIEFncmVlbWVudCBpcyBnb3Zlcm5lZCBieSB0aGUgbGF3cyBvZiB0aGUKK1N0YXRlIG9mIE5ldyBZb3JrIGFuZCB0aGUgaW50ZWxsZWN0dWFsIHByb3BlcnR5IGxhd3Mgb2YgdGhlIFVuaXRlZCBTdGF0ZXMgb2YKK0FtZXJpY2EuIE5vIHBhcnR5IHRvIHRoaXMgQWdyZWVtZW50IHdpbGwgYnJpbmcgYSBsZWdhbCBhY3Rpb24gdW5kZXIgdGhpcworQWdyZWVtZW50IG1vcmUgdGhhbiBvbmUgeWVhciBhZnRlciB0aGUgY2F1c2Ugb2YgYWN0aW9uIGFyb3NlLiBFYWNoIHBhcnR5IHdhaXZlcworaXRzIHJpZ2h0cyB0byBhIGp1cnkgdHJpYWwgaW4gYW55IHJlc3VsdGluZyBsaXRpZ2F0aW9uLjwvc3Bhbj4gPC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWw+PCFbaWYgIXN1cHBvcnRFbXB0eVBhcmFzXT4mbmJzcDs8IVtlbmRpZl0+PG86cD48L286cD48L3A+CisKKzwvZGl2PgorCis8L2JvZHk+CisKKzwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uc2VxdWVuY2Vycy9pY29ucy9mdWxsL29iajE2L1NlcXVlbmNlck1vZGVsRmlsZS5naWYgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uc2VxdWVuY2Vycy9pY29ucy9mdWxsL29iajE2L1NlcXVlbmNlck1vZGVsRmlsZS5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzA5N2NmNAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5zZXF1ZW5jZXJzL2ljb25zL2Z1bGwvb2JqMTYvU2VxdWVuY2VyTW9kZWxGaWxlLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uc2VxdWVuY2Vycy9pY29ucy9mdWxsL29iajE2L1NlcXVlbnRpYWxTZXF1ZW5jZXIuZ2lmIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnNlcXVlbmNlcnMvaWNvbnMvZnVsbC9vYmoxNi9TZXF1ZW50aWFsU2VxdWVuY2VyLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNWVmODRlCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnNlcXVlbmNlcnMvaWNvbnMvZnVsbC9vYmoxNi9TZXF1ZW50aWFsU2VxdWVuY2VyLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uc2VxdWVuY2Vycy9pY29ucy9mdWxsL3dpemJhbi9OZXdTZXF1ZW5jZXIuZ2lmIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnNlcXVlbmNlcnMvaWNvbnMvZnVsbC93aXpiYW4vTmV3U2VxdWVuY2VyLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mOWU4MGYwCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnNlcXVlbmNlcnMvaWNvbnMvZnVsbC93aXpiYW4vTmV3U2VxdWVuY2VyLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uc2VxdWVuY2Vycy9ub3RpY2UuaHRtbCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5zZXF1ZW5jZXJzL25vdGljZS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM2YWY5NjYKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uc2VxdWVuY2Vycy9ub3RpY2UuaHRtbApAQCAtMCwwICsxLDc5IEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wLy9FTiI+Cis8aHRtbD4KKzxoZWFkPgorPG1ldGEgaHR0cC1lcXVpdj1Db250ZW50LVR5cGUgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PWlzby04ODU5LTEiPgorPHRpdGxlPkVjbGlwc2Uub3JnIFNvZnR3YXJlIFVzZXIgQWdyZWVtZW50PC90aXRsZT4KKzwvaGVhZD4KKworPGJvZHkgbGFuZz0iRU4tVVMiIGxpbms9Ymx1ZSB2bGluaz1wdXJwbGU+Cis8aDI+RWNsaXBzZSBGb3VuZGF0aW9uIFNvZnR3YXJlIFVzZXIgQWdyZWVtZW50PC9oMj4KKzxwPk1hcmNoIDE3LCAyMDA1PC9wPgorCis8aDM+VXNhZ2UgT2YgQ29udGVudDwvaDM+CisKKzxwPlRIRSBFQ0xJUFNFIEZPVU5EQVRJT04gTUFLRVMgQVZBSUxBQkxFIFNPRlRXQVJFLCBET0NVTUVOVEFUSU9OLCBJTkZPUk1BVElPTiBBTkQvT1IgT1RIRVIgTUFURVJJQUxTIEZPUiBPUEVOIFNPVVJDRSBQUk9KRUNUUworICAgKENPTExFQ1RJVkVMWSAmcXVvdDtDT05URU5UJnF1b3Q7KS4gIFVTRSBPRiBUSEUgQ09OVEVOVCBJUyBHT1ZFUk5FRCBCWSBUSEUgVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgVEhJUyBBR1JFRU1FTlQgQU5EL09SIFRIRSBURVJNUyBBTkQKKyAgIENPTkRJVElPTlMgT0YgTElDRU5TRSBBR1JFRU1FTlRTIE9SIE5PVElDRVMgSU5ESUNBVEVEIE9SIFJFRkVSRU5DRUQgQkVMT1cuICBCWSBVU0lORyBUSEUgQ09OVEVOVCwgWU9VIEFHUkVFIFRIQVQgWU9VUiBVU0UKKyAgIE9GIFRIRSBDT05URU5UIElTIEdPVkVSTkVEIEJZIFRISVMgQUdSRUVNRU5UIEFORC9PUiBUSEUgVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgQU5ZIEFQUExJQ0FCTEUgTElDRU5TRSBBR1JFRU1FTlRTIE9SCisgICBOT1RJQ0VTIElORElDQVRFRCBPUiBSRUZFUkVOQ0VEIEJFTE9XLiAgSUYgWU9VIERPIE5PVCBBR1JFRSBUTyBUSEUgVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgVEhJUyBBR1JFRU1FTlQgQU5EIFRIRSBURVJNUyBBTkQKKyAgIENPTkRJVElPTlMgT0YgQU5ZIEFQUExJQ0FCTEUgTElDRU5TRSBBR1JFRU1FTlRTIE9SIE5PVElDRVMgSU5ESUNBVEVEIE9SIFJFRkVSRU5DRUQgQkVMT1csIFRIRU4gWU9VIE1BWSBOT1QgVVNFIFRIRSBDT05URU5ULjwvcD4KKyAgIAorPGgzPkFwcGxpY2FibGUgTGljZW5zZXM8L2gzPiAgIAorICAgCis8cD5Vbmxlc3Mgb3RoZXJ3aXNlIGluZGljYXRlZCwgYWxsIENvbnRlbnQgbWFkZSBhdmFpbGFibGUgYnkgdGhlIEVjbGlwc2UgRm91bmRhdGlvbiBpcyBwcm92aWRlZCB0byB5b3UgdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4wCisgICAoJnF1b3Q7RVBMJnF1b3Q7KS4gIEEgY29weSBvZiB0aGUgRVBMIGlzIHByb3ZpZGVkIHdpdGggdGhpcyBDb250ZW50IGFuZCBpcyBhbHNvIGF2YWlsYWJsZSBhdCA8YSBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbCI+aHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWw8L2E+LgorICAgRm9yIHB1cnBvc2VzIG9mIHRoZSBFUEwsICZxdW90O1Byb2dyYW0mcXVvdDsgd2lsbCBtZWFuIHRoZSBDb250ZW50LjwvcD4KKworPHA+Q29udGVudCBpbmNsdWRlcywgYnV0IGlzIG5vdCBsaW1pdGVkIHRvLCBzb3VyY2UgY29kZSwgb2JqZWN0IGNvZGUsIGRvY3VtZW50YXRpb24gYW5kIG90aGVyIGZpbGVzIG1haW50YWluZWQgaW4gdGhlIEVjbGlwc2Uub3JnIENWUyByZXBvc2l0b3J5ICgmcXVvdDtSZXBvc2l0b3J5JnF1b3Q7KSBpbiBDVlMKKyAgIG1vZHVsZXMgKCZxdW90O01vZHVsZXMmcXVvdDspIGFuZCBtYWRlIGF2YWlsYWJsZSBhcyBkb3dubG9hZGFibGUgYXJjaGl2ZXMgKCZxdW90O0Rvd25sb2FkcyZxdW90OykuPC9wPgorICAgCis8dWw+CisJPGxpPkNvbnRlbnQgbWF5IGJlIHN0cnVjdHVyZWQgYW5kIHBhY2thZ2VkIGludG8gbW9kdWxlcyB0byBmYWNpbGl0YXRlIGRlbGl2ZXJpbmcsIGV4dGVuZGluZywgYW5kIHVwZ3JhZGluZyB0aGUgQ29udGVudC4gIFR5cGljYWwgbW9kdWxlcyBtYXkgaW5jbHVkZSBwbHVnLWlucyAoJnF1b3Q7UGx1Zy1pbnMmcXVvdDspLCBwbHVnLWluIGZyYWdtZW50cyAoJnF1b3Q7RnJhZ21lbnRzJnF1b3Q7KSwgYW5kIGZlYXR1cmVzICgmcXVvdDtGZWF0dXJlcyZxdW90OykuPC9saT4KKwk8bGk+RWFjaCBQbHVnLWluIG9yIEZyYWdtZW50IG1heSBiZSBwYWNrYWdlZCBhcyBhIHN1Yi1kaXJlY3Rvcnkgb3IgSkFSIChKYXZhJnRyYWRlOyBBUmNoaXZlKSBpbiBhIGRpcmVjdG9yeSBuYW1lZCAmcXVvdDtwbHVnaW5zJnF1b3Q7LjwvbGk+CisJPGxpPkEgRmVhdHVyZSBpcyBhIGJ1bmRsZSBvZiBvbmUgb3IgbW9yZSBQbHVnLWlucyBhbmQvb3IgRnJhZ21lbnRzIGFuZCBhc3NvY2lhdGVkIG1hdGVyaWFsLiAgRWFjaCBGZWF0dXJlIG1heSBiZSBwYWNrYWdlZCBhcyBhIHN1Yi1kaXJlY3RvcnkgaW4gYSBkaXJlY3RvcnkgbmFtZWQgJnF1b3Q7ZmVhdHVyZXMmcXVvdDsuICBXaXRoaW4gYSBGZWF0dXJlLCBmaWxlcyBuYW1lZCAmcXVvdDtmZWF0dXJlLnhtbCZxdW90OyBtYXkgY29udGFpbiBhIGxpc3Qgb2YgdGhlIG5hbWVzIGFuZCB2ZXJzaW9uIG51bWJlcnMgb2YgdGhlIFBsdWctaW5zCisgICAgICBhbmQvb3IgRnJhZ21lbnRzIGFzc29jaWF0ZWQgd2l0aCB0aGF0IEZlYXR1cmUuPC9saT4KKwk8bGk+RmVhdHVyZXMgbWF5IGFsc28gaW5jbHVkZSBvdGhlciBGZWF0dXJlcyAoJnF1b3Q7SW5jbHVkZWQgRmVhdHVyZXMmcXVvdDspLiBXaXRoaW4gYSBGZWF0dXJlLCBmaWxlcyBuYW1lZCAmcXVvdDtmZWF0dXJlLnhtbCZxdW90OyBtYXkgY29udGFpbiBhIGxpc3Qgb2YgdGhlIG5hbWVzIGFuZCB2ZXJzaW9uIG51bWJlcnMgb2YgSW5jbHVkZWQgRmVhdHVyZXMuPC9saT4KKzwvdWw+ICAgCisgCis8cD5UaGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgZ292ZXJuaW5nIFBsdWctaW5zIGFuZCBGcmFnbWVudHMgc2hvdWxkIGJlIGNvbnRhaW5lZCBpbiBmaWxlcyBuYW1lZCAmcXVvdDthYm91dC5odG1sJnF1b3Q7ICgmcXVvdDtBYm91dHMmcXVvdDspLiBUaGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgZ292ZXJuaW5nIEZlYXR1cmVzIGFuZAorSW5jbHVkZWQgRmVhdHVyZXMgc2hvdWxkIGJlIGNvbnRhaW5lZCBpbiBmaWxlcyBuYW1lZCAmcXVvdDtsaWNlbnNlLmh0bWwmcXVvdDsgKCZxdW90O0ZlYXR1cmUgTGljZW5zZXMmcXVvdDspLiAgQWJvdXRzIGFuZCBGZWF0dXJlIExpY2Vuc2VzIG1heSBiZSBsb2NhdGVkIGluIGFueSBkaXJlY3Rvcnkgb2YgYSBEb3dubG9hZCBvciBNb2R1bGUKK2luY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvIHRoZSBmb2xsb3dpbmcgbG9jYXRpb25zOjwvcD4KKworPHVsPgorCTxsaT5UaGUgdG9wLWxldmVsIChyb290KSBkaXJlY3Rvcnk8L2xpPgorCTxsaT5QbHVnLWluIGFuZCBGcmFnbWVudCBkaXJlY3RvcmllczwvbGk+CisJPGxpPkluc2lkZSBQbHVnLWlucyBhbmQgRnJhZ21lbnRzIHBhY2thZ2VkIGFzIEpBUnM8L2xpPgorCTxsaT5TdWItZGlyZWN0b3JpZXMgb2YgdGhlIGRpcmVjdG9yeSBuYW1lZCAmcXVvdDtzcmMmcXVvdDsgb2YgY2VydGFpbiBQbHVnLWluczwvbGk+CisJPGxpPkZlYXR1cmUgZGlyZWN0b3JpZXM8L2xpPgorPC91bD4KKwkJCis8cD5Ob3RlOiBpZiBhIEZlYXR1cmUgbWFkZSBhdmFpbGFibGUgYnkgdGhlIEVjbGlwc2UgRm91bmRhdGlvbiBpcyBpbnN0YWxsZWQgdXNpbmcgdGhlIEVjbGlwc2UgVXBkYXRlIE1hbmFnZXIsIHlvdSBtdXN0IGFncmVlIHRvIGEgbGljZW5zZSAoJnF1b3Q7RmVhdHVyZSBVcGRhdGUgTGljZW5zZSZxdW90OykgZHVyaW5nIHRoZQoraW5zdGFsbGF0aW9uIHByb2Nlc3MuICBJZiB0aGUgRmVhdHVyZSBjb250YWlucyBJbmNsdWRlZCBGZWF0dXJlcywgdGhlIEZlYXR1cmUgVXBkYXRlIExpY2Vuc2Ugc2hvdWxkIGVpdGhlciBwcm92aWRlIHlvdSB3aXRoIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBnb3Zlcm5pbmcgdGhlIEluY2x1ZGVkIEZlYXR1cmVzIG9yCitpbmZvcm0geW91IHdoZXJlIHlvdSBjYW4gbG9jYXRlIHRoZW0uICBGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlcyBtYXkgYmUgZm91bmQgaW4gdGhlICZxdW90O2xpY2Vuc2UmcXVvdDsgcHJvcGVydHkgb2YgZmlsZXMgbmFtZWQgJnF1b3Q7ZmVhdHVyZS5wcm9wZXJ0aWVzJnF1b3Q7IGZvdW5kIHdpdGhpbiBhIEZlYXR1cmUuCitTdWNoIEFib3V0cywgRmVhdHVyZSBMaWNlbnNlcywgYW5kIEZlYXR1cmUgVXBkYXRlIExpY2Vuc2VzIGNvbnRhaW4gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIChvciByZWZlcmVuY2VzIHRvIHN1Y2ggdGVybXMgYW5kIGNvbmRpdGlvbnMpIHRoYXQgZ292ZXJuIHlvdXIgdXNlIG9mIHRoZSBhc3NvY2lhdGVkIENvbnRlbnQgaW4KK3RoYXQgZGlyZWN0b3J5LjwvcD4KKworPHA+VEhFIEFCT1VUUywgRkVBVFVSRSBMSUNFTlNFUywgQU5EIEZFQVRVUkUgVVBEQVRFIExJQ0VOU0VTIE1BWSBSRUZFUiBUTyBUSEUgRVBMIE9SIE9USEVSIExJQ0VOU0UgQUdSRUVNRU5UUywgTk9USUNFUyBPUiBURVJNUyBBTkQgQ09ORElUSU9OUy4gIFNPTUUgT0YgVEhFU0UKK09USEVSIExJQ0VOU0UgQUdSRUVNRU5UUyBNQVkgSU5DTFVERSAoQlVUIEFSRSBOT1QgTElNSVRFRCBUTyk6PC9wPgorCis8dWw+CisJPGxpPkNvbW1vbiBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMCAoYXZhaWxhYmxlIGF0IDxhIGhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvY3BsLXYxMC5odG1sIj5odHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2NwbC12MTAuaHRtbDwvYT4pPC9saT4KKwk8bGk+QXBhY2hlIFNvZnR3YXJlIExpY2Vuc2UgMS4xIChhdmFpbGFibGUgYXQgPGEgaHJlZj0iaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UiPmh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFPC9hPik8L2xpPgorCTxsaT5BcGFjaGUgU29mdHdhcmUgTGljZW5zZSAyLjAgKGF2YWlsYWJsZSBhdCA8YSBocmVmPSJodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAiPmh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMDwvYT4pPC9saT4KKwk8bGk+SUJNIFB1YmxpYyBMaWNlbnNlIDEuMCAoYXZhaWxhYmxlIGF0IDxhIGhyZWY9Imh0dHA6Ly9vc3Muc29mdHdhcmUuaWJtLmNvbS9kZXZlbG9wZXJ3b3Jrcy9vcGVuc291cmNlL2xpY2Vuc2UxMC5odG1sIj5odHRwOi8vb3NzLnNvZnR3YXJlLmlibS5jb20vZGV2ZWxvcGVyd29ya3Mvb3BlbnNvdXJjZS9saWNlbnNlMTAuaHRtbDwvYT4pPC9saT4JCisJPGxpPk1ldHJvIExpbmsgUHVibGljIExpY2Vuc2UgMS4wMCAoYXZhaWxhYmxlIGF0IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbmdyb3VwLm9yZy9vcGVubW90aWYvc3VwcG9ydGVycy9tZXRyb2xpbmsvbGljZW5zZS5odG1sIj5odHRwOi8vd3d3Lm9wZW5ncm91cC5vcmcvb3Blbm1vdGlmL3N1cHBvcnRlcnMvbWV0cm9saW5rL2xpY2Vuc2UuaHRtbDwvYT4pPC9saT4KKwk8bGk+TW96aWxsYSBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMSAoYXZhaWxhYmxlIGF0IDxhIGhyZWY9Imh0dHA6Ly93d3cubW96aWxsYS5vcmcvTVBML01QTC0xLjEuaHRtbCI+aHR0cDovL3d3dy5tb3ppbGxhLm9yZy9NUEwvTVBMLTEuMS5odG1sPC9hPik8L2xpPgorPC91bD4KKworPHA+SVQgSVMgWU9VUiBPQkxJR0FUSU9OIFRPIFJFQUQgQU5EIEFDQ0VQVCBBTEwgU1VDSCBURVJNUyBBTkQgQ09ORElUSU9OUyBQUklPUiBUTyBVU0UgT0YgVEhFIENPTlRFTlQuICBJZiBubyBBYm91dCwgRmVhdHVyZSBMaWNlbnNlLCBvciBGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlIGlzIHByb3ZpZGVkLCBwbGVhc2UKK2NvbnRhY3QgdGhlIEVjbGlwc2UgRm91bmRhdGlvbiB0byBkZXRlcm1pbmUgd2hhdCB0ZXJtcyBhbmQgY29uZGl0aW9ucyBnb3Zlcm4gdGhhdCBwYXJ0aWN1bGFyIENvbnRlbnQuPC9wPgorCis8aDM+Q3J5cHRvZ3JhcGh5PC9oMz4KKworPHA+Q29udGVudCBtYXkgY29udGFpbiBlbmNyeXB0aW9uIHNvZnR3YXJlLiBUaGUgY291bnRyeSBpbiB3aGljaCB5b3UgYXJlIGN1cnJlbnRseSBtYXkgaGF2ZSByZXN0cmljdGlvbnMgb24gdGhlIGltcG9ydCwgcG9zc2Vzc2lvbiwgYW5kIHVzZSwgYW5kL29yIHJlLWV4cG9ydCB0bworICAgYW5vdGhlciBjb3VudHJ5LCBvZiBlbmNyeXB0aW9uIHNvZnR3YXJlLiBCRUZPUkUgdXNpbmcgYW55IGVuY3J5cHRpb24gc29mdHdhcmUsIHBsZWFzZSBjaGVjayB0aGUgY291bnRyeSdzIGxhd3MsIHJlZ3VsYXRpb25zIGFuZCBwb2xpY2llcyBjb25jZXJuaW5nIHRoZSBpbXBvcnQsCisgICBwb3NzZXNzaW9uLCBvciB1c2UsIGFuZCByZS1leHBvcnQgb2YgZW5jcnlwdGlvbiBzb2Z0d2FyZSwgdG8gc2VlIGlmIHRoaXMgaXMgcGVybWl0dGVkLjwvcD4KKyAgIAorPHNtYWxsPkphdmEgYW5kIGFsbCBKYXZhLWJhc2VkIHRyYWRlbWFya3MgYXJlIHRyYWRlbWFya3Mgb2YgU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiBpbiB0aGUgVW5pdGVkIFN0YXRlcywgb3RoZXIgY291bnRyaWVzLCBvciBib3RoLjwvc21hbGw+ICAgCis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uc2VxdWVuY2Vycy9wbHVnaW4ucHJvcGVydGllcyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5zZXF1ZW5jZXJzL3BsdWdpbi5wcm9wZXJ0aWVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI4NWFkMTgKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uc2VxdWVuY2Vycy9wbHVnaW4ucHJvcGVydGllcwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uc2VxdWVuY2Vycy9wbHVnaW4ueG1sIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnNlcXVlbmNlcnMvcGx1Z2luLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZTVkZThiCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnNlcXVlbmNlcnMvcGx1Z2luLnhtbApAQCAtMCwwICsxLDMyIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPD9lY2xpcHNlIHZlcnNpb249IjMuMCI/PgorCis8IS0tCisgPGNvcHlyaWdodD4KKyA8L2NvcHlyaWdodD4KKworICRJZCQKKy0tPgorCis8cGx1Z2luPgorIDxleHRlbnNpb24KKyAgICAgICAgcG9pbnQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zZXF1ZW5jZXIiPgorICAgICA8c3RlbV9jYXRlZ29yeQorICAgICAgICAgICBpZD0ib3JnLmVjbGlwc2Uuc3RlbS5zZXF1ZW5jZXJzLmNhdGVnb3J5LnN0ZW0iCisgICAgICAgICAgIG5hbWU9IiVfVUlfQ29tbW9uX1NURU0iCisgICAgICAgICAgIHBhcmVudF9pZD0iLyIvPgorICAgICA8c3RlbV9jYXRlZ29yeQorICAgICAgICAgICBpZD0ib3JnLmVjbGlwc2Uuc3RlbS5zZXF1ZW5jZXJzLmNhdGVnb3J5LnNlcXVlbnRpYWwiCisgICAgICAgICAgIG5hbWU9IiVfVUlfU2VxdWVudGlhbF9TZXF1ZW5jZXIiCisgICAgICAgICAgIHBhcmVudF9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5zZXF1ZW5jZXJzLmNhdGVnb3J5LnN0ZW0iLz4KKyAgICAgPGR1Ymxpbl9jb3JlCisgICAgICAgICAgIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLnNlcXVlbmNlcnMuY2F0ZWdvcnkuc2VxdWVudGlhbCIKKyAgICAgICAgICAgY3JlYXRvcj0iJWRjX2NyZWF0b3JfZGFmb3JkIgorICAgICAgICAgICBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3NlcXVlbmNlci5lY29yZSIKKyAgICAgICAgICAgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLnNlcXVlbmNlcnMvcmVzb3VyY2VzL3NlcXVlbmNlcnMvMjAwMC0wMS0wMV8yMDAwLTEyLTMxX3NlcXVlbnRpYWxzZXF1ZW5jZXIuc2VxdWVuY2VyIgorICAgICAgICAgICBwdWJsaXNoZXI9IiVkY19wdWIiCisgICAgICAgICAgIHRpdGxlPSIlZGNfc2Vxc2VxMjAwMF90aXRsZSIKKyAgICAgICAgICAgdmFsaWQ9InN0YXJ0PTIwMDAtMDEtMDE7IGVuZD0yMDAwLTAxLTEwIi8+CisgIDwvZXh0ZW5zaW9uPgorIAorPC9wbHVnaW4+CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uc2VxdWVuY2Vycy9wbHVnaW5fZGUucHJvcGVydGllcyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5zZXF1ZW5jZXJzL3BsdWdpbl9kZS5wcm9wZXJ0aWVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIwY2NlNGQKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uc2VxdWVuY2Vycy9wbHVnaW5fZGUucHJvcGVydGllcwpAQCAtMCwwICsxLDEyNiBAQAorIy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjICogQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorIyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyMgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyMgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorIyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisjICoKKyMgKiBDb250cmlidXRvcnM6CisjICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorIyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisjIFRvIGNvZGUgZGV2ZWxvcGVyOgorIyAgIERvIE5PVCBjaGFuZ2UgdGhlIHByb3BlcnRpZXMgYmV0d2VlbiB0aGlzIGxpbmUgYW5kIHRoZQorIyAgICIlJSUgRU5EIE9GIFRSQU5TTEFURUQgUFJPUEVSVElFUyAlJSUiIGxpbmUuCisjICAgTWFrZSBhIG5ldyBwcm9wZXJ0eSBuYW1lLCBhcHBlbmQgdG8gdGhlIGVuZCBvZiB0aGUgZmlsZSBhbmQgY2hhbmdlCisjICAgdGhlIGNvZGUgdG8gdXNlIHRoZSBuZXcgcHJvcGVydHkuCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyMgJSUlIEVORCBPRiBUUkFOU0xBVEVEIFBST1BFUlRJRVMgJSUlCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK3BsdWdpbk5hbWU9U1RFTSBTZXF1ZW56ZXJtb2RlbGwKK3Byb3ZpZGVyTmFtZT1FY2xpcHNlLm9yZworCisjIFNURU0KK19VSV9Db21tb25fU1RFTT1TVEVNCisKKyMgU2VxdWVuY2VyCitfVUlfU2VxdWVudGlhbF9TZXF1ZW5jZXI9U2VxdWVudGllbGxlciBTZXF1ZW56ZXIKKworIyBEdWJsaW4gQ29yZQorZGNfY3JlYXRvcl9kYWZvcmQ9ZGFmb3JkCitkY19wdWI9RWNsaXBzZS5vcmcKK2RjX3NlcXNlcTIwMDBfdGl0bGU9U2VxdWVudGllbGxlciBTZXF1ZW56ZXIgMjAwMAorZGNfc2Vxc2VxMjAwNl90aXRsZT1TZXF1ZW50aWVsbGVyIFNlcXVlbnplciAyMDA2CisKK19VSV9DcmVhdGVDaGlsZF90ZXh0PXswfQorX1VJX0NyZWF0ZUNoaWxkX3RleHQyPXsxfSB7MH0KK19VSV9DcmVhdGVDaGlsZF90ZXh0Mz17MX0KK19VSV9DcmVhdGVDaGlsZF90b29sdGlwPU5ldWVzIHswfSB1bnRlciB7MX0gRmVhdHVyZSBlcnN0ZWxsZW4KK19VSV9DcmVhdGVDaGlsZF9kZXNjcmlwdGlvbj1OZXVlcyBLaW5kIHZvbSBUeXAgezB9IGZcdTAwZmNyIGRhcyB7MX0gTWVya21hbCBkZXIgYXVzZ2V3XHUwMGU0aGx0ZW4gezJ9IGVyc3RlbGxlbgorX1VJX0NyZWF0ZVNpYmxpbmdfZGVzY3JpcHRpb249TmV1ZXMgR2VzY2h3aXN0ZXJ0ZWlsIHZvbSBUeXAgezB9IGZcdTAwZmNyIGRlbiBhdXNnZXdcdTAwZTRobHRlbiB7Mn0gdW50ZXIgZGVtIHsxfSBNZXJrbWFsIGRlcyBFbHRlcm50ZWlsIGVyc3RlbGxlbgorCitfVUlfUHJvcGVydHlEZXNjcmlwdG9yX2Rlc2NyaXB0aW9uPXswfSB2b24gezF9CisKK19VSV9TZXF1ZW50aWFsU2VxdWVuY2VyX3R5cGU9U2VxdWVudGllbGxlciBTZXF1ZW56ZXIKK19VSV9Vbmtub3duX3R5cGU9T2JqZWt0CisKK19VSV9Vbmtub3duX2RhdGF0eXBlPVdlcnQKKworX1VJX1NlcXVlbnRpYWxTZXF1ZW5jZXJfdGltZUluY3JlbWVudF9mZWF0dXJlPVplaXQtSW5rcmVtZW50CitfVUlfVW5rbm93bl9mZWF0dXJlPU5pY2h0IHNwZXppZml6aWVydAorCitfVUlfU2VxdWVuY2VyRWRpdG9yX21lbnU9JlNlcXVlbmNlciBFZGl0b3IKKworX1VJX0NyZWF0ZUNoaWxkX21lbnVfaXRlbT0mTmV3IENoaWxkCitfVUlfQ3JlYXRlU2libGluZ19tZW51X2l0ZW09TiZldWVzIEdlc2Nod2lzdGVydGVpbAorCitfVUlfU2hvd1Byb3BlcnRpZXNWaWV3X21lbnVfaXRlbT1TaG93ICYgUHJvcGVydGllcyBWaWV3CitfVUlfUmVmcmVzaFZpZXdlcl9tZW51X2l0ZW09JlJlZnJlc2gKKworX1VJX1NlbGVjdGlvblBhZ2VfbGFiZWw9QXVzd2FobAorX1VJX1BhcmVudFBhZ2VfbGFiZWw9RWx0ZXJudGVpbAorX1VJX0xpc3RQYWdlX2xhYmVsPUxpc3RlCitfVUlfVHJlZVBhZ2VfbGFiZWw9QmF1bQorX1VJX1RhYmxlUGFnZV9sYWJlbD1UYWJlbGxlCitfVUlfVHJlZVdpdGhDb2x1bW5zUGFnZV9sYWJlbD1CYXVtIG1pdCBTcGFsdGVuCitfVUlfT2JqZWN0Q29sdW1uX2xhYmVsPU9iamVrdAorX1VJX1NlbGZDb2x1bW5fbGFiZWw9U2VsYnN0CisKK19VSV9Ob09iamVjdFNlbGVjdGVkPU5pY2h0cyBhdXNnZXdcdTAwZTRobHQKK19VSV9TaW5nbGVPYmplY3RTZWxlY3RlZD1BdXNnZXdcdTAwZTRobHRlcyBPYmpla3Q6IHswfQorX1VJX011bHRpT2JqZWN0U2VsZWN0ZWQ9QXVzZ2V3XHUwMGU0aGx0ZSB7MH0gT2JqZWt0ZQorCitfVUlfT3BlbkVkaXRvckVycm9yX2xhYmVsPUVkaXRvciBcdTAwZjZmZm5lbgorCitfVUlfV2l6YXJkX2NhdGVnb3J5PUJlaXNwaWVsIEVNRiBNb2RlbGwgRXJzdGVsbHVuZ3Nhc3Npc3RlbnQKKworX1VJX0NyZWF0ZU1vZGVsRXJyb3JfbWVzc2FnZT1BdWZnZXRyZXRlbmUgUHJvYmxlbWUgaW4gZGVyIERhdGVpICJ7MH0iCisKK19VSV9TZXF1ZW5jZXJNb2RlbFdpemFyZF9sYWJlbD1TZXF1ZW56ZXItTW9kZWxsCitfVUlfU2VxdWVuY2VyTW9kZWxXaXphcmRfZGVzY3JpcHRpb249TmV1ZXMgU2VxdWVuemVyLU1vZGVsbCBlcnN0ZWxsZW4KKworX1VJX1NlcXVlbmNlckVkaXRvcl9sYWJlbD1TZXF1ZW56ZXItTW9kZWxsLUVkaXRvcgorCitfVUlfU2VxdWVuY2VyRWRpdG9yRmlsZW5hbWVEZWZhdWx0QmFzZT1NZWluCitfVUlfU2VxdWVuY2VyRWRpdG9yRmlsZW5hbWVFeHRlbnNpb249U2VxdWVuemVyCisKK19VSV9XaXphcmRfbGFiZWw9TmV1CisKK19XQVJOX0ZpbGVuYW1lRXh0ZW5zaW9uPURlciBEYXRlaW5hbWUgbXVzcyBhdWYgIi57MH0iIGVuZGVuCisKK19VSV9Nb2RlbE9iamVjdD1Nb2RlbGwgT2JqZWt0CitfVUlfWE1MRW5jb2Rpbmc9WE1MIEtvZGllcnVuZworX1VJX1hNTEVuY29kaW5nQ2hvaWNlcz1VVEYtOCBBU0NJSSBVVEYtMTYgVVRGLTE2QkUgVVRGLTE2TEUgSVNPLTg4NTktMQorX1VJX1dpemFyZF9pbml0aWFsX29iamVjdF9kZXNjcmlwdGlvbj1EYXRlaW5haG1lbiBhbmdlYmVuIHVuZCB6dSBlcnN0ZWxsZW5kZXMgTW9kZWxsLU9iamVrdCBhdXN3XHUwMGU0aGxlbgorCitfVUlfRmlsZUNvbmZsaWN0X2xhYmVsPURhdGVpa29uZmxpa3QKK19XQVJOX0ZpbGVDb25mbGljdD1EaWUgRGF0ZWkgInswfSIgZXhpc3RpZXJ0IGJlcmVpdHMuIFdvbGxlbiBTaWUgZGllIHZvcmhhbmRlbmUgRGF0ZWkgZXJzZXR6ZW4/CitfVUlfU2VxdWVuY2VyRWRpdG9yQWR2aXNvcl9BY3Rpb25TZXRfbGFiZWw9U2VxdWVuemVyIEFrdGlvbnNtZW5nZQorX1VJX1BlcnNwZWN0aXZlX2xhYmVsPVNlcXVlbnplcgorCitfVUlfQnJvd3NlX2xhYmVsPSZCcm93c2UuLi4KK19VSV9GaWxlX2xhYmVsPSZGaWxlCitfVUlfUXVlc3Rpb25fdGl0bGU9RnJhZ2UKK19VSV9FcnJvcl90aXRsZT1GZWhsZXIKK19XQVJOX05vX0VkaXRvcj1FcyBnaWJ0IGtlaW5lbiBFZGl0b3IsIGRlciBmXHUwMGZjciBkaWUgRGF0ZWkgInswfSIgcmVnaXN0cmllcnQgaXN0LgorCitfVUlfQXBwbGljYXRpb25fdGl0bGU9U2VxdWVuemVyLUFud2VuZHVuZworX1VJX01lbnVfRmlsZV9sYWJlbD0mRmlsZQorX1VJX01lbnVfTmV3X2xhYmVsPSZOZXcKK19VSV9NZW51X09wZW5fbGFiZWw9Jk9wZW4uLi4KK19VSV9NZW51X09wZW5fZGVzY3JpcHRpb249TW9kZWwtT2JqZWt0LURhdGVpIFx1MDBmNmZmbmVuCitfVUlfTWVudV9PcGVuVVJJX2xhYmVsPSZPcGVuIFVSSS4uLgorX1VJX01lbnVfT3BlblVSSV9kZXNjcmlwdGlvbj1Nb2RlbC1PYmpla3QgYXVzIGVpbmVyIFVSSSBsYWRlbiB1bmQgXHUwMGY2ZmZuZW4KK19VSV9NZW51X0VkaXRfbGFiZWw9JkVkaXQKK19VSV9NZW51X1dpbmRvd19sYWJlbD0mV2luZG93CitfVUlfTWVudV9IZWxwX2xhYmVsPSZIZWxwCitfVUlfTWVudV9BYm91dF9sYWJlbD1TZXF1ZW56ZXIgJlx1MDBkY2Jlci4uLgorX1VJX0Fib3V0X3RpdGxlPVNlcXVlbnplci1BbndlbmR1bmcKK19VSV9BYm91dF90ZXh0PVNlcXVlbmNlci1BbndlbmR1bmcgQWJvdXQtQm94IGtvbW10IGhpZXIgaGluLgorCitfVUlfU2VxdWVuY2VyTW9kZWxXaXphcmRfQWN0aW9uU2V0X2xhYmVsPVNlcXVlbnplci1Nb2RlbGwtQWt0aW9uc21lbmdlCisKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5zZXF1ZW5jZXJzL3BsdWdpbl9rci5wcm9wZXJ0aWVzIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnNlcXVlbmNlcnMvcGx1Z2luX2tyLnByb3BlcnRpZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGYxZWNhNgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5zZXF1ZW5jZXJzL3BsdWdpbl9rci5wcm9wZXJ0aWVzCkBAIC0wLDAgKzEsMTI2IEBACisjLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyMgKiBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisjICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworIyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorIyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisjICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyMgKgorIyAqIENvbnRyaWJ1dG9yczoKKyMgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisjICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyMgVG8gY29kZSBkZXZlbG9wZXI6CisjICAgRG8gTk9UIGNoYW5nZSB0aGUgcHJvcGVydGllcyBiZXR3ZWVuIHRoaXMgbGluZSBhbmQgdGhlCisjICAgIiUlJSBFTkQgT0YgVFJBTlNMQVRFRCBQUk9QRVJUSUVTICUlJSIgbGluZS4KKyMgICBNYWtlIGEgbmV3IHByb3BlcnR5IG5hbWUsIGFwcGVuZCB0byB0aGUgZW5kIG9mIHRoZSBmaWxlIGFuZCBjaGFuZ2UKKyMgICB0aGUgY29kZSB0byB1c2UgdGhlIG5ldyBwcm9wZXJ0eS4KKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorIyAlJSUgRU5EIE9GIFRSQU5TTEFURUQgUFJPUEVSVElFUyAlJSUKKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworcGx1Z2luTmFtZT1TVEVNIFx1YzJkY1x1ZDAwMFx1YzExYyBcdWJhYThcdWIzNzgKK3Byb3ZpZGVyTmFtZT1FY2xpcHNlLm9yZworCisjIFNURU0KK19VSV9Db21tb25fU1RFTT1TVEVNCisKKyMgU2VxdWVuY2VyCitfVUlfU2VxdWVudGlhbF9TZXF1ZW5jZXI9XHVjMjFjXHVjYzI4IFx1YzJkY1x1ZDAwMFx1YzExYworCisjIER1YmxpbiBDb3JlCitkY19jcmVhdG9yX2RhZm9yZD1kYWZvcmQKK2RjX3B1Yj1FY2xpcHNlLm9yZworZGNfc2Vxc2VxMjAwMF90aXRsZT1cdWMyMWNcdWNjMjggXHVjMmRjXHVkMDAwXHVjMTFjIDIwMDAKK2RjX3NlcXNlcTIwMDZfdGl0bGU9XHVjMjFjXHVjYzI4IFx1YzJkY1x1ZDAwMFx1YzExYyAyMDA2CisKK19VSV9DcmVhdGVDaGlsZF90ZXh0PXswfQorX1VJX0NyZWF0ZUNoaWxkX3RleHQyPXsxfSB7MH0KK19VSV9DcmVhdGVDaGlsZF90ZXh0Mz17MX0KK19VSV9DcmVhdGVDaGlsZF90b29sdGlwPXsxfSBcdWFlMzBcdWIyYTUgXHVkNTU4XHVjNWQwIFx1YzBjOCB7MH0gXHViOWNjXHViNGU0XHVhZTMwCitfVUlfQ3JlYXRlQ2hpbGRfZGVzY3JpcHRpb249XHVjMTIwXHVkMGRkXHVkNTVjIHsyfVx1Yzc1OCB7MX0gXHVhZTMwXHViMmE1XHVjNWQwIFx1YjMwMFx1ZDU1YyBcdWQ2MTVcdWMyZGQgezB9XHVjNzU4IFx1YzBjOFx1Yjg1Y1x1YzZiNCBDaGlsZFx1Yjk3YyBcdWI5Y2NcdWI0ZWRcdWIyYzhcdWIyZTQuCitfVUlfQ3JlYXRlU2libGluZ19kZXNjcmlwdGlvbj1cdWJkODBcdWJhYThcdWM3NTggXHVjMTIwXHVkMGRkXHViNDFjIHsyfVx1YzVkMFx1YzExYyB7MX0gXHVhZTMwXHViMmE1XHVjNWQwIFx1YjMwMFx1ZDU1YyBcdWQ2MTVcdWMyZGQgezB9XHVjNzU4IFx1YzBjOFx1Yjg1Y1x1YzZiNCBcdWQ2MTVcdWM4MWNcdWI5N2MgXHViOWNjXHViNGVkXHViMmM4XHViMmU0LgorCitfVUlfUHJvcGVydHlEZXNjcmlwdG9yX2Rlc2NyaXB0aW9uPXsxfSBcdWM5MTEgezB9CisKK19VSV9TZXF1ZW50aWFsU2VxdWVuY2VyX3R5cGU9XHVjMjFjXHVjYzI4IFx1YzJkY1x1ZDAwMFx1YzExYworX1VJX1Vua25vd25fdHlwZT1cdWFjMWNcdWNjYjQKKworX1VJX1Vua25vd25fZGF0YXR5cGU9XHVhYzEyCisKK19VSV9TZXF1ZW50aWFsU2VxdWVuY2VyX3RpbWVJbmNyZW1lbnRfZmVhdHVyZT1cdWMyZGNcdWFjMDQgXHVjOTlkXHVhYzAwCitfVUlfVW5rbm93bl9mZWF0dXJlPVx1YzljMFx1YzgxNVx1YjQxOFx1YzljMCBcdWM1NGFcdWM3NGMKKworX1VJX1NlcXVlbmNlckVkaXRvcl9tZW51PSZTZXF1ZW5jZXIgRWRpdG9yCisKK19VSV9DcmVhdGVDaGlsZF9tZW51X2l0ZW09Jk5ldyBDaGlsZAorX1VJX0NyZWF0ZVNpYmxpbmdfbWVudV9pdGVtPU4mICBcdWQ2MTVcdWM4MWMgXHVjNzkwXHViOWU0CisKK19VSV9TaG93UHJvcGVydGllc1ZpZXdfbWVudV9pdGVtPVx1ZDQ1Y1x1YzJkYyBcdWJjMGYgXHVjMThkXHVjMTMxXHViY2Y0XHVhZTMwCitfVUlfUmVmcmVzaFZpZXdlcl9tZW51X2l0ZW09JlJlZnJlc2gKKworX1VJX1NlbGVjdGlvblBhZ2VfbGFiZWw9XHVjMTIwXHVkMGRkCitfVUlfUGFyZW50UGFnZV9sYWJlbD1cdWJkODBcdWJhYTgKK19VSV9MaXN0UGFnZV9sYWJlbD1cdWJhYTlcdWI4NWQKK19VSV9UcmVlUGFnZV9sYWJlbD1cdWIwOThcdWJiMzQKK19VSV9UYWJsZVBhZ2VfbGFiZWw9XHVkMTRjXHVjNzc0XHViZTE0CitfVUlfVHJlZVdpdGhDb2x1bW5zUGFnZV9sYWJlbD1cdWIwOThcdWJiMzRcdWM2NDAgXHVjNWY0CitfVUlfT2JqZWN0Q29sdW1uX2xhYmVsPVx1YWMxY1x1Y2NiNAorX1VJX1NlbGZDb2x1bW5fbGFiZWw9XHVjMTQwXHVkNTA0CisKK19VSV9Ob09iamVjdFNlbGVjdGVkPVx1YzU0NFx1YmIzNFx1YWM4M1x1YjNjNCBcdWM1NDggXHVjMTIwXHVkMGRkXHVkNTY4CitfVUlfU2luZ2xlT2JqZWN0U2VsZWN0ZWQ9XHVjMTIwXHVkMGRkXHVkNTVjIFx1YWMxZFx1Y2NiNCA6IHswfQorX1VJX011bHRpT2JqZWN0U2VsZWN0ZWQ9XHVjMTIwXHVkMGRkXHViNDFjIHswfSBcdWFjMWRcdWNjYjQKKworX1VJX09wZW5FZGl0b3JFcnJvcl9sYWJlbD1cdWM2MjRcdWQ1MDggXHVjNWQwXHViNTE0XHVkMTMwCisKK19VSV9XaXphcmRfY2F0ZWdvcnk9XHVjNjA4XHVjODFjIEVNRiBcdWJhYThcdWIzNzggXHVjMGRkXHVjMTMxIFx1YjljOFx1YmM5NVx1YzBhYworCitfVUlfQ3JlYXRlTW9kZWxFcnJvcl9tZXNzYWdlPVx1ZDMwY1x1Yzc3YyAnezB9ICJcdWM1ZDBcdWMxMWMgXHViYjM4XHVjODFjIFx1YmMxY1x1YzBkZAorCitfVUlfU2VxdWVuY2VyTW9kZWxXaXphcmRfbGFiZWw9XHVjMmRjXHVkMDAwXHVjMTFjIFx1YmFhOFx1YjM3OAorX1VJX1NlcXVlbmNlck1vZGVsV2l6YXJkX2Rlc2NyaXB0aW9uPVx1YzBjOFx1Yjg1Y1x1YzZiNCBcdWMyZGNcdWQwMDBcdWMxMWMgXHViYWE4XHViMzc4IFx1YjljY1x1YjRlNFx1YWUzMAorCitfVUlfU2VxdWVuY2VyRWRpdG9yX2xhYmVsPVx1YzJkY1x1ZDAwMFx1YzExYyBcdWJhYThcdWIzNzggXHVkM2I4XHVjOWQxXHVhZTMwCisKK19VSV9TZXF1ZW5jZXJFZGl0b3JGaWxlbmFtZURlZmF1bHRCYXNlPVx1YjA5OFx1Yzc1OAorX1VJX1NlcXVlbmNlckVkaXRvckZpbGVuYW1lRXh0ZW5zaW9uPVx1YzJkY1x1ZDAwMFx1YzExYworCitfVUlfV2l6YXJkX2xhYmVsPVx1YzBjOFx1Yjg1Y1x1YzZiNAorCitfV0FSTl9GaWxlbmFtZUV4dGVuc2lvbj1cdWQzMGNcdWM3N2MgXHVjNzc0XHViOTg0XHVjNzQwICIuezB9Ilx1Yjg1YyBcdWIwNWRcdWIwOThcdWM1N2NcdWQ1NjguIAorCitfVUlfTW9kZWxPYmplY3Q9XHViYWE4XHViMzc4IFx1YWMxZFx1Y2NiNAorX1VJX1hNTEVuY29kaW5nPVhNTCBcdWM3NzhcdWNmNTRcdWI1MjkKK19VSV9YTUxFbmNvZGluZ0Nob2ljZXM9VVRGIC0gOCBBU0NJSSBVVEYgLSAxNiBVVEYgLSAxNkJFIFVURiAtIDE2TEUgSVNPIC0gODg1OSAtIDEKK19VSV9XaXphcmRfaW5pdGlhbF9vYmplY3RfZGVzY3JpcHRpb249XHVkMzBjXHVjNzdjIFx1Yzc3NFx1Yjk4NCBcdWM5YzBcdWM4MTVcdWQ1NThcdWFjZTAgXHVjMGRkXHVjMTMxXHVkNTYwIFx1YmFhOFx1YjM3OCBcdWFjMWNcdWNjYjQgXHVjMTIwXHVkMGRkCisKK19VSV9GaWxlQ29uZmxpY3RfbGFiZWw9XHVkMzBjXHVjNzdjIFx1Y2RhOVx1YjNjYworX1dBUk5fRmlsZUNvbmZsaWN0PVx1ZDMwY1x1Yzc3YyAiezB9Ilx1Yzc3NFx1YmJmOCBcdWM4NzRcdWM3YWNcdWQ1NjguIFx1YWUzMFx1Yzg3NCBcdWQzMGNcdWM3N2NcdWM3NDQgXHViYzE0XHVhZmI4XHVjMmRjXHVhY2EwXHVjMmI1XHViMmM4XHVhZTRjPworX1VJX1NlcXVlbmNlckVkaXRvckFkdmlzb3JfQWN0aW9uU2V0X2xhYmVsPVx1YzJkY1x1ZDAwMFx1YzExYyBcdWM1NjFcdWMxNTggXHVjMTM4XHVkMmI4CitfVUlfUGVyc3BlY3RpdmVfbGFiZWw9XHVjMmRjXHVkMDAwXHVjMTFjCisKK19VSV9Ccm93c2VfbGFiZWw9JkJyb3dzZS4uLgorX1VJX0ZpbGVfbGFiZWw9JkZpbGUKK19VSV9RdWVzdGlvbl90aXRsZT1cdWM5YzhcdWJiMzgKK19VSV9FcnJvcl90aXRsZT1cdWM2MjRcdWI5NTgKK19XQVJOX05vX0VkaXRvcj1cdWQzMGNcdWM3N2MgInswfSJcdWM1ZDAgXHViMzAwXHVkNTVjIFx1YjRmMVx1Yjg1ZFx1YjQxYyBcdWQzYjhcdWM5ZDFcdWFlMzBcdWFjMDAgXHVjNWM2XHVjNzRjLgorCitfVUlfQXBwbGljYXRpb25fdGl0bGU9XHVjMmRjXHVkMDAwXHVjMTFjIFx1Yzc1MVx1YzZhOSBcdWQ1MDRcdWI4NWNcdWFkZjhcdWI3YTgKK19VSV9NZW51X0ZpbGVfbGFiZWw9JkZpbGUKK19VSV9NZW51X05ld19sYWJlbD0mTmV3CitfVUlfTWVudV9PcGVuX2xhYmVsPSZPcGVuLi4uCitfVUlfTWVudV9PcGVuX2Rlc2NyaXB0aW9uPVx1YmFhOFx1YjM3OCBcdWFjMWNcdWNjYjQgXHVkMzBjXHVjNzdjIFx1YzVmNFx1YWUzMAorX1VJX01lbnVfT3BlblVSSV9sYWJlbD0mT3BlbiBVUkkuLi4KK19VSV9NZW51X09wZW5VUklfZGVzY3JpcHRpb249VVJJXHVjNWQwXHVjMTFjIFx1Yjg1Y1x1YjUyOVx1ZDU1OFx1YjI5NCBcdWJhYThcdWIzNzggXHVhYzFjXHVjY2I0IFx1YzVmNFx1YWUzMAorX1VJX01lbnVfRWRpdF9sYWJlbD0mRWRpdAorX1VJX01lbnVfV2luZG93X2xhYmVsPSZXaW5kb3cKK19VSV9NZW51X0hlbHBfbGFiZWw9JkhlbHAKK19VSV9NZW51X0Fib3V0X2xhYmVsPVx1YzJkY1x1ZDAwMFx1YzExYyAmXHVjNWQwIFx1YWQwMFx1ZDU1OFx1YzVlYyAuLi4KK19VSV9BYm91dF90aXRsZT1cdWMyZGNcdWQwMDBcdWMxMWMgXHVjNzUxXHVjNmE5IFx1ZDUwNFx1Yjg1Y1x1YWRmOFx1YjdhOAorX1VJX0Fib3V0X3RleHQ9XHVjMmRjXHVkMDAwXHVjMTFjIFx1Yzc1MVx1YzZhOSBcdWQ1MDRcdWI4NWNcdWFkZjhcdWI3YTggXHVjMTI0XHViYTg1IFx1YzBjMVx1Yzc5MFx1YjI5NCBcdWM1ZWNcdWFlMzBcdWM1ZDAgXHVkNDVjXHVjMmRjXHViNDI5XHViMmM4XHViMmU0LgorCitfVUlfU2VxdWVuY2VyTW9kZWxXaXphcmRfQWN0aW9uU2V0X2xhYmVsPVx1YzJkY1x1ZDAwMFx1YzExYyBcdWJhYThcdWIzNzggXHVjNTYxXHVjMTU4IFx1YzEzOFx1ZDJiOAorCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uc2VxdWVuY2Vycy9wbHVnaW5femgucHJvcGVydGllcyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5zZXF1ZW5jZXJzL3BsdWdpbl96aC5wcm9wZXJ0aWVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA3MDMxMzQKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uc2VxdWVuY2Vycy9wbHVnaW5femgucHJvcGVydGllcwpAQCAtMCwwICsxLDEyNiBAQAorIy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjICogQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorIyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyMgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyMgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorIyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisjICoKKyMgKiBDb250cmlidXRvcnM6CisjICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorIyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisjIFRvIGNvZGUgZGV2ZWxvcGVyOgorIyAgIERvIE5PVCBjaGFuZ2UgdGhlIHByb3BlcnRpZXMgYmV0d2VlbiB0aGlzIGxpbmUgYW5kIHRoZQorIyAgICIlJSUgRU5EIE9GIFRSQU5TTEFURUQgUFJPUEVSVElFUyAlJSUiIGxpbmUuCisjICAgTWFrZSBhIG5ldyBwcm9wZXJ0eSBuYW1lLCBhcHBlbmQgdG8gdGhlIGVuZCBvZiB0aGUgZmlsZSBhbmQgY2hhbmdlCisjICAgdGhlIGNvZGUgdG8gdXNlIHRoZSBuZXcgcHJvcGVydHkuCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyMgJSUlIEVORCBPRiBUUkFOU0xBVEVEIFBST1BFUlRJRVMgJSUlCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK3BsdWdpbk5hbWU9U1RFTVx1NWU4Zlx1NTIxN1x1NmEyMVx1NTc4YgorcHJvdmlkZXJOYW1lPUVjbGlwc2Uub3JnCisKKyMgU1RFTQorX1VJX0NvbW1vbl9TVEVNPVNURU0KKworIyBTZXF1ZW5jZXIKK19VSV9TZXF1ZW50aWFsX1NlcXVlbmNlcj1cdTk4N2FcdTVlOGZcdTViOWFcdTVlOGZcdTU2NjgKKworIyBEdWJsaW4gQ29yZQorZGNfY3JlYXRvcl9kYWZvcmQ9RGFmb3JkCitkY19wdWI9RWNsaXBzZS5vcmcKK2RjX3NlcXNlcTIwMDBfdGl0bGU9XHU5ODdhXHU1ZThmXHU1YjlhXHU1ZThmXHU1NjY4MjAwMAorZGNfc2Vxc2VxMjAwNl90aXRsZT1cdTk4N2FcdTVlOGZcdTViOWFcdTVlOGZcdTU2NjggMjAwNgorCitfVUlfQ3JlYXRlQ2hpbGRfdGV4dD17MH0KK19VSV9DcmVhdGVDaGlsZF90ZXh0Mj17MX0gezB9CitfVUlfQ3JlYXRlQ2hpbGRfdGV4dDM9ezF9CitfVUlfQ3JlYXRlQ2hpbGRfdG9vbHRpcD1cdTUyMWJcdTVlZmFcdTU3Mjh7MX0gezB9XHU2NWIwXHU1MjlmXHU4MGZkCitfVUlfQ3JlYXRlQ2hpbGRfZGVzY3JpcHRpb249XHU0ZTNhXHU5MDA5XHU1YjlhXHU3Njg0ezJ9XHU3Njg0ezF9XHU3Mjc5XHU2MDI3XHU2NzY1XHU1MjFiXHU1ZWZhXHU0ZTAwXHU0ZTJhXHU2NWIwXHU3Njg0ezB9XHU1YjUwXHU3YzdiCitfVUlfQ3JlYXRlU2libGluZ19kZXNjcmlwdGlvbj1cdTU3Mjh7MX1cdTc2ODRcdTcyMzZcdTk2YzZcdTRlMmRcdTRlM2FcdTkwMDlcdTViOWFcdTc2ODR7Mn1cdTY3NjVcdTUyMWJcdTVlZmFcdTRlMDBcdTRlMmF7MH1cdTdjN2JcdTU3OGJcdTc2ODRcdTY1YjBcdTc2ODRcdTUxNDRcdTVmMWZcdTdjN2IKKworX1VJX1Byb3BlcnR5RGVzY3JpcHRvcl9kZXNjcmlwdGlvbj17MH1cdTRlY2VcdTVjNWV7MX0KKworX1VJX1NlcXVlbnRpYWxTZXF1ZW5jZXJfdHlwZT1cdTk4N2FcdTVlOGZcdTViOWFcdTVlOGZcdTU2NjgKK19VSV9Vbmtub3duX3R5cGU9XHU1YmY5XHU4YzYxCisKK19VSV9Vbmtub3duX2RhdGF0eXBlPVx1NGVmN1x1NTAzYworCitfVUlfU2VxdWVudGlhbFNlcXVlbmNlcl90aW1lSW5jcmVtZW50X2ZlYXR1cmU9XHU2NWY2XHU5NWY0XHU5MDEyXHU1ODllCitfVUlfVW5rbm93bl9mZWF0dXJlPVx1NjcyYVx1NjMwN1x1NWI5YQorCitfVUlfU2VxdWVuY2VyRWRpdG9yX21lbnU9JlNlcXVlbmNlciBFZGl0b3IKKworX1VJX0NyZWF0ZUNoaWxkX21lbnVfaXRlbT0mTmV3IENoaWxkCitfVUlfQ3JlYXRlU2libGluZ19tZW51X2l0ZW09XHU2NWIwXHU3NTFmXHU2MjEwXHU0ZTAwXHU0ZTJhXHU1MTQ0XHU1ZjFmXHU3YzdiCisKK19VSV9TaG93UHJvcGVydGllc1ZpZXdfbWVudV9pdGVtPVx1NjYzZVx1NzkzYVx1NTQ4Y1x1NWM1ZVx1NjAyN1x1NjdlNVx1NzcwYgorX1VJX1JlZnJlc2hWaWV3ZXJfbWVudV9pdGVtPSZSZWZyZXNoCisKK19VSV9TZWxlY3Rpb25QYWdlX2xhYmVsPVx1OTAwOVx1NjJlOQorX1VJX1BhcmVudFBhZ2VfbGFiZWw9XHU1YmI2XHU5NTdmCitfVUlfTGlzdFBhZ2VfbGFiZWw9XHU3NmVlXHU1ZjU1CitfVUlfVHJlZVBhZ2VfbGFiZWw9XHU2ODExCitfVUlfVGFibGVQYWdlX2xhYmVsPVx1ODg2OAorX1VJX1RyZWVXaXRoQ29sdW1uc1BhZ2VfbGFiZWw9XHU1MjA2XHU1MjE3XHU3Njg0XHU2ODExCitfVUlfT2JqZWN0Q29sdW1uX2xhYmVsPVx1NWJmOVx1OGM2MQorX1VJX1NlbGZDb2x1bW5fbGFiZWw9XHU4MWVhXHU1ZGYxCisKK19VSV9Ob09iamVjdFNlbGVjdGVkPVx1NjVlMFx1OTAwOVx1NWI5YVx1NTE4NVx1NWJiOQorX1VJX1NpbmdsZU9iamVjdFNlbGVjdGVkPVx1OTAwOVx1NjJlOVx1NWJmOVx1OGM2MVx1ZmYxYXswfQorX1VJX011bHRpT2JqZWN0U2VsZWN0ZWQ9XHU5MDA5XHU2MmU5ezB9XHU1YmY5XHU4YzYxCisKK19VSV9PcGVuRWRpdG9yRXJyb3JfbGFiZWw9XHU2MjUzXHU1ZjAwXHU3ZjE2XHU4ZjkxXHU1NjY4CisKK19VSV9XaXphcmRfY2F0ZWdvcnk9XHU0ZjhiXHU1OTgyRU1GXHU2YTIxXHU1NzhiXHU1MjFiXHU1ZWZhXHU1NDExXHU1YmZjCisKK19VSV9DcmVhdGVNb2RlbEVycm9yX21lc3NhZ2U9XHU1NzI4XHU2NTg3XHU0ZWY2XHUyMDFjezB9XHUyMDFkXHU0ZTJkXHU5MDQ3XHU1MjMwXHU3Njg0XHU5NWVlXHU5ODk4CisKK19VSV9TZXF1ZW5jZXJNb2RlbFdpemFyZF9sYWJlbD1cdTVlOGZcdTUyMTdcdTUzZDFcdTc1MWZcdTU2NjhcdTZhMjFcdTU3OGIKK19VSV9TZXF1ZW5jZXJNb2RlbFdpemFyZF9kZXNjcmlwdGlvbj1cdTUyMWJcdTVlZmFcdTRlMDBcdTRlMmFcdTY1YjBcdTc2ODRcdTVlOGZcdTUyMTdcdTZhMjFcdTU3OGIKKworX1VJX1NlcXVlbmNlckVkaXRvcl9sYWJlbD1cdTVlOGZcdTUyMTdcdTUzZDFcdTc1MWZcdTU2NjhcdTZhMjFcdTU3OGJcdTdmMTZcdThmOTFcdTU2NjgKKworX1VJX1NlcXVlbmNlckVkaXRvckZpbGVuYW1lRGVmYXVsdEJhc2U9XHU2MjExXHU3Njg0CitfVUlfU2VxdWVuY2VyRWRpdG9yRmlsZW5hbWVFeHRlbnNpb249XHU1ZThmXHU1MjE3XHU1M2QxXHU3NTFmXHU1NjY4CisKK19VSV9XaXphcmRfbGFiZWw9XHU2NWIwXHU1ZWZhCisKK19XQVJOX0ZpbGVuYW1lRXh0ZW5zaW9uPVx1NjU4N1x1NGVmNlx1NTQwZFx1NWZjNVx1OTg3Ylx1NGVlNSd7MH0gJydcdTdlZDNcdTVjM2UKKworX1VJX01vZGVsT2JqZWN0PVx1NmEyMVx1NTc4Ylx1NWJmOVx1OGM2MQorX1VJX1hNTEVuY29kaW5nPVhNTFx1N2YxNlx1NzgwMQorX1VJX1hNTEVuY29kaW5nQ2hvaWNlcz1VVEYtOCBBU0NJSSBVVEYtMTYgVVRGLTE2QkUgVVRGLTE2TEUgSVNPLTg4NTktMQorX1VJX1dpemFyZF9pbml0aWFsX29iamVjdF9kZXNjcmlwdGlvbj1cdTYzMDdcdTViOWFcdTRlMDBcdTRlMmFcdTY1ODdcdTRlZjZcdTU0MGRcdTVlNzZcdTkwMDlcdTYyZTlcdTRlMDBcdTRlMmFcdTZhMjFcdTU3OGJcdTViZjlcdThjNjFcdTUyMWJcdTVlZmEKKworX1VJX0ZpbGVDb25mbGljdF9sYWJlbD1cdTY1ODdcdTRlZjZcdTUxYjJcdTdhODEKK19XQVJOX0ZpbGVDb25mbGljdD1cdTY1ODdcdTRlZjZcdTIwMWN7MH1cdTIwMWRcdTVkZjJcdTViNThcdTU3MjhcdTMwMDJcdTRmNjBcdTg5ODFcdTY2ZmZcdTYzNjJcdTczYjBcdTY3MDlcdTc2ODRcdTY1ODdcdTRlZjZcdTU0MTdcdWZmMWYKK19VSV9TZXF1ZW5jZXJFZGl0b3JBZHZpc29yX0FjdGlvblNldF9sYWJlbD1cdTVlOGZcdTUyMTdcdTUzZDFcdTc1MWZcdTU2NjhcdTY0Y2RcdTRmNWNcdThiYmVcdTdmNmUKK19VSV9QZXJzcGVjdGl2ZV9sYWJlbD1cdTVlOGZcdTUyMTdcdTUzZDFcdTc1MWZcdTU2NjgKKworX1VJX0Jyb3dzZV9sYWJlbD0mQnJvd3NlLi4uCitfVUlfRmlsZV9sYWJlbD0mRmlsZQorX1VJX1F1ZXN0aW9uX3RpdGxlPVx1OTVlZVx1OTg5OAorX1VJX0Vycm9yX3RpdGxlPVx1OTUxOVx1OGJlZgorX1dBUk5fTm9fRWRpdG9yPVx1NzZlZVx1NTI0ZFx1OGJlNVx1NjU4N1x1NGVmNlx1MjAxY3swfVx1MjAxZFx1NmNhMVx1NjcwOVx1NmNlOFx1NTE4Y1x1N2YxNlx1OGY5MVx1NTY2OFx1MzAwMgorCitfVUlfQXBwbGljYXRpb25fdGl0bGU9XHU1ZThmXHU1MjE3XHU1M2QxXHU3NTFmXHU1NjY4XHU3Njg0XHU1ZTk0XHU3NTI4CitfVUlfTWVudV9GaWxlX2xhYmVsPSZGaWxlCitfVUlfTWVudV9OZXdfbGFiZWw9Jk5ldworX1VJX01lbnVfT3Blbl9sYWJlbD0mT3Blbi4uLgorX1VJX01lbnVfT3Blbl9kZXNjcmlwdGlvbj1cdTYyNTNcdTVmMDBcdTRlMDBcdTRlMmFcdTZhMjFcdTU3OGJcdTViZjlcdThjNjFcdTY1ODdcdTRlZjYKK19VSV9NZW51X09wZW5VUklfbGFiZWw9Jk9wZW4gVVJJLi4uCitfVUlfTWVudV9PcGVuVVJJX2Rlc2NyaXB0aW9uPVx1NjI1M1x1NWYwMFx1NGUwMFx1NGUyYVx1NmEyMVx1NTc4Ylx1NWJmOVx1OGM2MVx1NWU3Nlx1NGUxNFx1NGVjZVx1NGUwMFx1NGUyYVVSSVx1Njc2NVx1NTJhMFx1OGY3ZFx1NWI4MworX1VJX01lbnVfRWRpdF9sYWJlbD0mRWRpdAorX1VJX01lbnVfV2luZG93X2xhYmVsPSZXaW5kb3cKK19VSV9NZW51X0hlbHBfbGFiZWw9JkhlbHAKK19VSV9NZW51X0Fib3V0X2xhYmVsPVx1NWU4Zlx1NTIxN1x1NTNkMVx1NzUxZlx1NTY2OFx1NGVlNVx1NTNjYVx1NzZmOFx1NTE3My4uLgorX1VJX0Fib3V0X3RpdGxlPVx1NWU4Zlx1NTIxN1x1NTNkMVx1NzUxZlx1NTY2OFx1NzY4NFx1NWU5NFx1NzUyOAorX1VJX0Fib3V0X3RleHQ9XHU1ZThmXHU1MjE3XHU1M2QxXHU3NTFmXHU1NjY4XHU3Njg0XHU1ZTk0XHU3NTI4XHU1M2JiXHU4ZmQ5XHU5MWNjXHUzMDAyCisKK19VSV9TZXF1ZW5jZXJNb2RlbFdpemFyZF9BY3Rpb25TZXRfbGFiZWw9XHU1ZThmXHU1MjE3XHU1M2QxXHU3NTFmXHU1NjY4XHU2YTIxXHU1NzhiXHU4ODRjXHU1MmE4XHU3ZWM0CisKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5zZXF1ZW5jZXJzL3Jlc291cmNlcy9zZXF1ZW5jZXJzLzIwMDAtMDEtMDFfMjAwMC0xMi0zMV9zZXF1ZW50aWFsc2VxdWVuY2VyLnNlcXVlbmNlciBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5zZXF1ZW5jZXJzL3Jlc291cmNlcy9zZXF1ZW5jZXJzLzIwMDAtMDEtMDFfMjAwMC0xMi0zMV9zZXF1ZW50aWFsc2VxdWVuY2VyLnNlcXVlbmNlcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MTc5MDdmCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnNlcXVlbmNlcnMvcmVzb3VyY2VzL3NlcXVlbmNlcnMvMjAwMC0wMS0wMV8yMDAwLTEyLTMxX3NlcXVlbnRpYWxzZXF1ZW5jZXIuc2VxdWVuY2VyCkBAIC0wLDAgKzEsNSBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iQVNDSUkiPz4KKzxvcmcuZWNsaXBzZS5zdGVtLnNlcXVlbmNlcjpTZXF1ZW50aWFsU2VxdWVuY2VyIHhtaTp2ZXJzaW9uPSIyLjAiIHhtbG5zOnhtaT0iaHR0cDovL3d3dy5vbWcub3JnL1hNSSIgeG1sbnM6b3JnLmVjbGlwc2Uuc3RlbS5zZXF1ZW5jZXI9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3NlcXVlbmNlci5lY29yZSIgdVJJPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uc2VxdWVuY2Vycy9yZXNvdXJjZXMvc2VxdWVuY2Vycy8yMDAwLTAxLTAxXzIwMDAtMTItMzFfc2VxdWVudGlhbHNlcXVlbmNlci5zZXF1ZW5jZXIiIHR5cGVVUkk9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9pZGVudGlmaWFibGUwIj4KKyAgPGR1YmxpbkNvcmUgdGl0bGU9IlNlcXVlbnRpYWwgU2VxdWVuY2VyIEp1bi4gMDEsIDIwMDYgdG8gSnVuLiAxMCwgMjAwNiAoQ3ljbGU6IDEgRGF5KSIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLnNlcXVlbmNlcnMvcmVzb3VyY2VzL3NlcXVlbmNlcnMvMjAwMC0wMS0wMV8yMDAwLTEyLTMxX3NlcXVlbnRpYWxzZXF1ZW5jZXIuc2VxdWVuY2VyIiBkZXNjcmlwdGlvbj0iIiBjcmVhdG9yPSJkYWZvcmQiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL3NlcXVlbmNlci5lY29yZSIgdmFsaWQ9InN0YXJ0PTIwMDAtMDEtMDE7IGVuZD0yMDAwLTEyLTMxIi8+CisgIDxzdGFydFRpbWUgdGltZT0iMjAwMC0wMS0wMVQwMDowMDowMC4wMC0wNTAwIi8+Cis8L29yZy5lY2xpcHNlLnN0ZW0uc2VxdWVuY2VyOlNlcXVlbnRpYWxTZXF1ZW5jZXI+CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uc2VxdWVuY2Vycy9zcmMvLmN2c2lnbm9yZSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5zZXF1ZW5jZXJzL3NyYy8uY3ZzaWdub3JlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQyMTM3NmQKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uc2VxdWVuY2Vycy9zcmMvLmN2c2lnbm9yZQpAQCAtMCwwICsxIEBACitkdW1teQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnNvbHZlcnMuZmQvLmNsYXNzcGF0aCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5zb2x2ZXJzLmZkLy5jbGFzc3BhdGgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDVmMDI0ZQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5zb2x2ZXJzLmZkLy5jbGFzc3BhdGgKQEAgLTAsMCArMSw3IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/Pg0KKzxjbGFzc3BhdGg+DQorCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJzcmMiIHBhdGg9InNyYyIvPg0KKwk8Y2xhc3NwYXRoZW50cnkga2luZD0iY29uIiBwYXRoPSJvcmcuZWNsaXBzZS5qZHQubGF1bmNoaW5nLkpSRV9DT05UQUlORVIvb3JnLmVjbGlwc2UuamR0LmludGVybmFsLmRlYnVnLnVpLmxhdW5jaGVyLlN0YW5kYXJkVk1UeXBlL0oyU0UtMS41Ii8+DQorCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJjb24iIHBhdGg9Im9yZy5lY2xpcHNlLnBkZS5jb3JlLnJlcXVpcmVkUGx1Z2lucyIvPg0KKwk8Y2xhc3NwYXRoZW50cnkga2luZD0ib3V0cHV0IiBwYXRoPSJiaW4iLz4NCis8L2NsYXNzcGF0aD4NCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uc29sdmVycy5mZC8ucHJvamVjdCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5zb2x2ZXJzLmZkLy5wcm9qZWN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM3ZTdjMzMKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uc29sdmVycy5mZC8ucHJvamVjdApAQCAtMCwwICsxLDI4IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/Pg0KKzxwcm9qZWN0RGVzY3JpcHRpb24+DQorCTxuYW1lPm9yZy5lY2xpcHNlLnN0ZW0uc29sdmVycy5mZDwvbmFtZT4NCisJPGNvbW1lbnQ+PC9jb21tZW50Pg0KKwk8cHJvamVjdHM+DQorCTwvcHJvamVjdHM+DQorCTxidWlsZFNwZWM+DQorCQk8YnVpbGRDb21tYW5kPg0KKwkJCTxuYW1lPm9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFidWlsZGVyPC9uYW1lPg0KKwkJCTxhcmd1bWVudHM+DQorCQkJPC9hcmd1bWVudHM+DQorCQk8L2J1aWxkQ29tbWFuZD4NCisJCTxidWlsZENvbW1hbmQ+DQorCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLk1hbmlmZXN0QnVpbGRlcjwvbmFtZT4NCisJCQk8YXJndW1lbnRzPg0KKwkJCTwvYXJndW1lbnRzPg0KKwkJPC9idWlsZENvbW1hbmQ+DQorCQk8YnVpbGRDb21tYW5kPg0KKwkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5TY2hlbWFCdWlsZGVyPC9uYW1lPg0KKwkJCTxhcmd1bWVudHM+DQorCQkJPC9hcmd1bWVudHM+DQorCQk8L2J1aWxkQ29tbWFuZD4NCisJPC9idWlsZFNwZWM+DQorCTxuYXR1cmVzPg0KKwkJPG5hdHVyZT5vcmcuZWNsaXBzZS5qZHQuY29yZS5qYXZhbmF0dXJlPC9uYXR1cmU+DQorCQk8bmF0dXJlPm9yZy5lY2xpcHNlLnBkZS5QbHVnaW5OYXR1cmU8L25hdHVyZT4NCisJPC9uYXR1cmVzPg0KKzwvcHJvamVjdERlc2NyaXB0aW9uPg0KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5zb2x2ZXJzLmZkLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5zb2x2ZXJzLmZkLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNDM2ZmE5Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnNvbHZlcnMuZmQvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzCkBAIC0wLDAgKzEsMjEgQEAKKyNUdWUgU2VwIDAxIDE2OjU2OjQxIEVEVCAyMDA5CitlY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29kZWdlbi5pbmxpbmVKc3JCeXRlY29kZT1lbmFibGVkCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb2RlZ2VuLnRhcmdldFBsYXRmb3JtPTEuNQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29tcGxpYW5jZT0xLjUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmRvYy5jb21tZW50LnN1cHBvcnQ9ZGlzYWJsZWQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uYXNzZXJ0SWRlbnRpZmllcj1lcnJvcgorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5lbnVtSWRlbnRpZmllcj1lcnJvcgorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbnZhbGlkSmF2YWRvYz13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmludmFsaWRKYXZhZG9jVGFncz1lbmFibGVkCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmludmFsaWRKYXZhZG9jVGFnc0RlcHJlY2F0ZWRSZWY9ZW5hYmxlZAorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbnZhbGlkSmF2YWRvY1RhZ3NOb3RWaXNpYmxlUmVmPWVuYWJsZWQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW52YWxpZEphdmFkb2NUYWdzVmlzaWJpbGl0eT1wdWJsaWMKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0phdmFkb2NDb21tZW50cz13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdKYXZhZG9jQ29tbWVudHNPdmVycmlkaW5nPWVuYWJsZWQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0phdmFkb2NDb21tZW50c1Zpc2liaWxpdHk9cHVibGljCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdKYXZhZG9jVGFnRGVzY3JpcHRpb249cmV0dXJuX3RhZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nSmF2YWRvY1RhZ3M9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nSmF2YWRvY1RhZ3NPdmVycmlkaW5nPWVuYWJsZWQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0phdmFkb2NUYWdzVmlzaWJpbGl0eT1wdWJsaWMKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnNvdXJjZT0xLjUKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5zb2x2ZXJzLmZkL01FVEEtSU5GL01BTklGRVNULk1GIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnNvbHZlcnMuZmQvTUVUQS1JTkYvTUFOSUZFU1QuTUYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWI4MzE5ZAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5zb2x2ZXJzLmZkL01FVEEtSU5GL01BTklGRVNULk1GCkBAIC0wLDAgKzEsMjAgQEAKK01hbmlmZXN0LVZlcnNpb246IDEuMA0KK0J1bmRsZS1NYW5pZmVzdFZlcnNpb246IDINCitCdW5kbGUtTmFtZTogJXBsdWdpbk5hbWUNCitCdW5kbGUtU3ltYm9saWNOYW1lOiBvcmcuZWNsaXBzZS5zdGVtLnNvbHZlcnMuZmQ7c2luZ2xldG9uOj10cnVlDQorQnVuZGxlLVZlcnNpb246IDEuMi4xDQorQnVuZGxlLUNsYXNzUGF0aDogLg0KK0J1bmRsZS1WZW5kb3I6ICVwcm92aWRlck5hbWUNCitCdW5kbGUtTG9jYWxpemF0aW9uOiBwbHVnaW4NCitCdW5kbGUtUmVxdWlyZWRFeGVjdXRpb25FbnZpcm9ubWVudDogSjJTRS0xLjUNCitSZXF1aXJlLUJ1bmRsZTogb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLA0KKyBvcmcuZWNsaXBzZS5lbWYuZWNvcmU7dmlzaWJpbGl0eTo9cmVleHBvcnQsDQorIG9yZy5lY2xpcHNlLnN0ZW0uY29yZSwNCisgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLmVkaXQsDQorIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscywNCisgb3JnLmVjbGlwc2Uuc3RlbS51aQ0KK0J1bmRsZS1BY3RpdmF0aW9uUG9saWN5OiBsYXp5DQorRXhwb3J0LVBhY2thZ2U6IG9yZy5lY2xpcHNlLnN0ZW0uc29sdmVycy5mZCwNCisgb3JnLmVjbGlwc2Uuc3RlbS5zb2x2ZXJzLmZkLmltcGwsDQorIG9yZy5lY2xpcHNlLnN0ZW0uc29sdmVycy5mZC5wcm92aWRlciwNCisgb3JnLmVjbGlwc2Uuc3RlbS5zb2x2ZXJzLmZkLnV0aWwNCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uc29sdmVycy5mZC9idWlsZC5wcm9wZXJ0aWVzIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnNvbHZlcnMuZmQvYnVpbGQucHJvcGVydGllcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMmIwYmFkCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnNvbHZlcnMuZmQvYnVpbGQucHJvcGVydGllcwpAQCAtMCwwICsxLDE4IEBACisNCisjIDxjb3B5cmlnaHQ+DQorIyA8L2NvcHlyaWdodD4NCisjDQorIyAkSWQkDQorDQorYmluLmluY2x1ZGVzID0gLixcDQorICAgICAgICAgICAgICAgbW9kZWwvLFwNCisgICAgICAgICAgICAgICBNRVRBLUlORi8sXA0KKyAgICAgICAgICAgICAgIHBsdWdpbi54bWwsXA0KKyAgICAgICAgICAgICAgIHBsdWdpbi5wcm9wZXJ0aWVzLFwNCisgICAgICAgICAgICAgICBpY29ucy8sXA0KKyAgICAgICAgICAgICAgIHBsdWdpbl9kZS5wcm9wZXJ0aWVzLFwNCisgICAgICAgICAgICAgICBwbHVnaW5fa3IucHJvcGVydGllcyxcDQorICAgICAgICAgICAgICAgcGx1Z2luX3poLnByb3BlcnRpZXMNCitqYXJzLmNvbXBpbGUub3JkZXIgPSAuDQorc291cmNlLi4gPSBzcmMvDQorb3V0cHV0Li4gPSBiaW4vDQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnNvbHZlcnMuZmQvaWNvbnMvZnVsbC9jdXN0b20xNi9zb2x2ZXIuZ2lmIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnNvbHZlcnMuZmQvaWNvbnMvZnVsbC9jdXN0b20xNi9zb2x2ZXIuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY5MzRmZTEKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uc29sdmVycy5mZC9pY29ucy9mdWxsL2N1c3RvbTE2L3NvbHZlci5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnNvbHZlcnMuZmQvaWNvbnMvZnVsbC9vYmoxNi9GaW5pdGVEaWZmZXJlbmNlLmdpZiBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5zb2x2ZXJzLmZkL2ljb25zL2Z1bGwvb2JqMTYvRmluaXRlRGlmZmVyZW5jZS5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTI1MGZlYwotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5zb2x2ZXJzLmZkL2ljb25zL2Z1bGwvb2JqMTYvRmluaXRlRGlmZmVyZW5jZS5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnNvbHZlcnMuZmQvbW9kZWwvZmQuZWNvcmUgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uc29sdmVycy5mZC9tb2RlbC9mZC5lY29yZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZGFiZDYwCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnNvbHZlcnMuZmQvbW9kZWwvZmQuZWNvcmUKQEAgLTAsMCArMSw3IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/Pg0KKzxlY29yZTpFUGFja2FnZSB4bWk6dmVyc2lvbj0iMi4wIg0KKyAgICB4bWxuczp4bWk9Imh0dHA6Ly93d3cub21nLm9yZy9YTUkiIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiDQorICAgIHhtbG5zOmVjb3JlPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2VtZi8yMDAyL0Vjb3JlIiBuYW1lPSJmZCINCisgICAgbnNVUkk9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9zb2x2ZXJzL2ZkIiBuc1ByZWZpeD0ib3JnLmVjbGlwc2Uuc3RlbS5zb2x2ZXJzLmZkIj4NCisgIDxlQ2xhc3NpZmllcnMgeHNpOnR5cGU9ImVjb3JlOkVDbGFzcyIgbmFtZT0iRmluaXRlRGlmZmVyZW5jZSIgZVN1cGVyVHlwZXM9Ii4uLy4uL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9tb2RlbC9zb2x2ZXIuZWNvcmUjLy9Tb2x2ZXIiLz4NCis8L2Vjb3JlOkVQYWNrYWdlPg0KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5zb2x2ZXJzLmZkL21vZGVsL2ZkLmdlbm1vZGVsIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnNvbHZlcnMuZmQvbW9kZWwvZmQuZ2VubW9kZWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmExMDc5ZQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5zb2x2ZXJzLmZkL21vZGVsL2ZkLmdlbm1vZGVsCkBAIC0wLDAgKzEsMTMgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+DQorPGdlbm1vZGVsOkdlbk1vZGVsIHhtaTp2ZXJzaW9uPSIyLjAiDQorICAgIHhtbG5zOnhtaT0iaHR0cDovL3d3dy5vbWcub3JnL1hNSSIgeG1sbnM6Z2VubW9kZWw9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDIvR2VuTW9kZWwiIG1vZGVsRGlyZWN0b3J5PSIvb3JnLmVjbGlwc2Uuc3RlbS5zb2x2ZXJzLmZkL3NyYyINCisgICAgZWRpdERpcmVjdG9yeT0iL29yZy5lY2xpcHNlLnN0ZW0uc29sdmVycy5mZC9zcmMiIGVkaXRvckRpcmVjdG9yeT0iL29yZy5lY2xpcHNlLnN0ZW0udWkuc29sdmVycy5mZC9zcmMiDQorICAgIG1vZGVsUGx1Z2luSUQ9Im9yZy5lY2xpcHNlLnN0ZW0uc29sdmVycy5mZCIgbW9kZWxOYW1lPSJGZCIgdGVzdHNEaXJlY3Rvcnk9Ii9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnNvbHZlcnMuZmQvc3JjIg0KKyAgICBpbXBvcnRlcklEPSJvcmcuZWNsaXBzZS5lbWYuaW1wb3J0ZXIuZWNvcmUiIGNvbXBsaWFuY2VMZXZlbD0iNi4wIiBjb3B5cmlnaHRGaWVsZHM9ImZhbHNlIg0KKyAgICB1c2VkR2VuUGFja2FnZXM9Ii4uLy4uL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9tb2RlbC9jb3JlLmdlbm1vZGVsIy8vY29tbW9uIC4uLy4uL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9tb2RlbC9jb3JlLmdlbm1vZGVsIy8vZ3JhcGggLi4vLi4vb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL21vZGVsL2NvcmUuZ2VubW9kZWwjLy9tb2RlbCAuLi8uLi9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvbW9kZWwvY29yZS5nZW5tb2RlbCMvL21vZGlmaWVyIC4uLy4uL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9tb2RlbC9jb3JlLmdlbm1vZGVsIy8vc2NlbmFyaW8gLi4vLi4vb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL21vZGVsL2NvcmUuZ2VubW9kZWwjLy9zZXF1ZW5jZXIgLi4vLi4vb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL21vZGVsL2NvcmUuZ2VubW9kZWwjLy9zb2x2ZXIgcGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5lbWYuZWNvcmUvbW9kZWwvRWNvcmUuZ2VubW9kZWwjLy9lY29yZSI+DQorICA8Zm9yZWlnbk1vZGVsPmZkLmVjb3JlPC9mb3JlaWduTW9kZWw+DQorICA8Z2VuUGFja2FnZXMgcHJlZml4PSJGZCIgYmFzZVBhY2thZ2U9Im9yZy5lY2xpcHNlLnN0ZW0uc29sdmVycyIgZGlzcG9zYWJsZVByb3ZpZGVyRmFjdG9yeT0idHJ1ZSINCisgICAgICBlY29yZVBhY2thZ2U9ImZkLmVjb3JlIy8iPg0KKyAgICA8Z2VuQ2xhc3NlcyBlY29yZUNsYXNzPSJmZC5lY29yZSMvL0Zpbml0ZURpZmZlcmVuY2UiLz4NCisgIDwvZ2VuUGFja2FnZXM+DQorPC9nZW5tb2RlbDpHZW5Nb2RlbD4NCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uc29sdmVycy5mZC9wbHVnaW4ucHJvcGVydGllcyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5zb2x2ZXJzLmZkL3BsdWdpbi5wcm9wZXJ0aWVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdmYjI5MTEKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uc29sdmVycy5mZC9wbHVnaW4ucHJvcGVydGllcwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uc29sdmVycy5mZC9wbHVnaW4ueG1sIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnNvbHZlcnMuZmQvcGx1Z2luLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YzZhYTI2Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnNvbHZlcnMuZmQvcGx1Z2luLnhtbApAQCAtMCwwICsxLDQyIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/Pg0KKzw/ZWNsaXBzZSB2ZXJzaW9uPSIzLjAiPz4NCisNCis8IS0tDQorIDxjb3B5cmlnaHQ+DQorIDwvY29weXJpZ2h0Pg0KKw0KKyAkSWQkDQorLS0+DQorDQorPHBsdWdpbj4NCisgICAgPGV4dGVuc2lvbg0KKyAgICAgICAgIHBvaW50PSJvcmcuZWNsaXBzZS5lbWYuZWRpdC5pdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yaWVzIj4NCisgICAgICA8ZmFjdG9yeQ0KKyAgICAgICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS5zdGVtLnNvbHZlcnMuZmQucHJvdmlkZXIuRmRJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSINCisgICAgICAgICAgICB1cmk9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9zb2x2ZXJzL2ZkIg0KKyAgICAgICAgICAgIHN1cHBvcnRlZFR5cGVzPQ0KKyAgICAgICAgICAgICAgIm9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklFZGl0aW5nRG9tYWluSXRlbVByb3ZpZGVyDQorICAgICAgICAgICAgICAgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVN0cnVjdHVyZWRJdGVtQ29udGVudFByb3ZpZGVyDQorICAgICAgICAgICAgICAgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVRyZWVJdGVtQ29udGVudFByb3ZpZGVyDQorICAgICAgICAgICAgICAgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1MYWJlbFByb3ZpZGVyDQorICAgICAgICAgICAgICAgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1Qcm9wZXJ0eVNvdXJjZSI+DQorICAgICAgPC9mYWN0b3J5Pg0KKyAgIDwvZXh0ZW5zaW9uPg0KKyAgIDxleHRlbnNpb24NCisgICAgICAgICBwb2ludD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNvbHZlciI+DQorICAgICAgPGNsYXNzZGVmDQorICAgICAgICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLnN0ZW0uc29sdmVycy5mZC5pbXBsLkZpbml0ZURpZmZlcmVuY2VJbXBsIj4NCisgICAgICA8L2NsYXNzZGVmPg0KKyAgICAgIDxkdWJsaW5fY29yZQ0KKyAgICAgICAgICAgIGNhdGVnb3J5X2lkPSIvIg0KKyAgICAgICAgICAgIGlkZW50aWZpZXI9Im9yZy5lY2xpcHNlLnN0ZW0uc29sdmVycy5mZC5kdWJsaW5fY29yZTEiDQorICAgICAgICAgICAgdGl0bGU9Im9yZy5lY2xpcHNlLnN0ZW0uc29sdmVycy5mZC5kdWJsaW5fY29yZTEiPg0KKyAgICAgIDwvZHVibGluX2NvcmU+DQorICAgPC9leHRlbnNpb24+DQorICAgPGV4dGVuc2lvbiBwb2ludD0ib3JnLmVjbGlwc2UuZW1mLmVjb3JlLmdlbmVyYXRlZF9wYWNrYWdlIj4NCisgICAgICA8cGFja2FnZQ0KKyAgICAgICAgICAgIHVyaT0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL3NvbHZlcnMvZmQiDQorICAgICAgICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLnN0ZW0uc29sdmVycy5mZC5GZFBhY2thZ2UiDQorICAgICAgICAgICAgZ2VuTW9kZWw9Im1vZGVsL2ZkLmdlbm1vZGVsIi8+DQorICAgPC9leHRlbnNpb24+Cis8L3BsdWdpbj4NCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uc29sdmVycy5mZC9wbHVnaW5fZGUucHJvcGVydGllcyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5zb2x2ZXJzLmZkL3BsdWdpbl9kZS5wcm9wZXJ0aWVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc2MjU5ZmMKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uc29sdmVycy5mZC9wbHVnaW5fZGUucHJvcGVydGllcwpAQCAtMCwwICsxLDQ0IEBACisKKyMvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIyAqIENvcHlyaWdodCAoYykgMjAwOSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyMgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisjICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisjICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyMgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorIyAqCisjICogQ29udHJpYnV0b3JzOgorIyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorIyBUbyBjb2RlIGRldmVsb3BlcjoKKyMgICBEbyBOT1QgY2hhbmdlIHRoZSBwcm9wZXJ0aWVzIGJldHdlZW4gdGhpcyBsaW5lIGFuZCB0aGUKKyMgICAiJSUlIEVORCBPRiBUUkFOU0xBVEVEIFBST1BFUlRJRVMgJSUlIiBsaW5lLgorIyAgIE1ha2UgYSBuZXcgcHJvcGVydHkgbmFtZSwgYXBwZW5kIHRvIHRoZSBlbmQgb2YgdGhlIGZpbGUgYW5kIGNoYW5nZQorIyAgIHRoZSBjb2RlIHRvIHVzZSB0aGUgbmV3IHByb3BlcnR5LgorIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisjICUlJSBFTkQgT0YgVFJBTlNMQVRFRCBQUk9QRVJUSUVTICUlJQorIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisKK3BsdWdpbk5hbWU9U1RFTSBGaW5pdGUtRGlmZmVyZW56ZW4tR2xlaWNodW5nc2xcdTAwZjZzZXIKK3Byb3ZpZGVyTmFtZT1FY2xpcHNlLm9yZworX1VJX0NyZWF0ZUNoaWxkX3RleHQ9ezB9CitfVUlfQ3JlYXRlQ2hpbGRfdGV4dDI9ezF9IHswfQorX1VJX0NyZWF0ZUNoaWxkX3RleHQzPXsxfQorX1VJX0NyZWF0ZUNoaWxkX3Rvb2x0aXA9TmV1ZXMgezB9IHVudGVyIHsxfSBGZWF0dXJlIGVyc3RlbGxlbgorX1VJX0NyZWF0ZUNoaWxkX2Rlc2NyaXB0aW9uPU5ldWVzIEtpbmQgdm9tIFR5cCB7MH0gZlx1MDBmY3IgZGFzIHsxfSBNZXJrbWFsIGRlciBhdXNnZXdcdTAwZTRobHRlbiB7Mn0gZXJzdGVsbGVuCitfVUlfQ3JlYXRlU2libGluZ19kZXNjcmlwdGlvbj1OZXVlcyBHZXNjaHdpc3RlcnRlaWwgdm9tIFR5cCB7MH0gZlx1MDBmY3IgZGVuIGF1c2dld1x1MDBlNGhsdGVuIHsyfSB1bnRlciBkZW0gezF9IE1lcmttYWwgZGVzIEVsdGVybnRlaWwgZXJzdGVsbGVuCisKK19VSV9Qcm9wZXJ0eURlc2NyaXB0b3JfZGVzY3JpcHRpb249ezB9IHZvbiB7MX0KKworX1VJX0Zpbml0ZURpZmZlcmVuY2VfdHlwZT1GaW5pdGUtRGlmZmVyZW56ZW4KK19VSV9Vbmtub3duX3R5cGU9T2JqZWt0CisKK19VSV9Vbmtub3duX2RhdGF0eXBlPVdlcnQKKworX1VJX1Vua25vd25fZmVhdHVyZT1OaWNodCBzcGV6aWZpemllcnQKKworCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uc29sdmVycy5mZC9wbHVnaW5fa3IucHJvcGVydGllcyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5zb2x2ZXJzLmZkL3BsdWdpbl9rci5wcm9wZXJ0aWVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU3Yzc1YTEKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uc29sdmVycy5mZC9wbHVnaW5fa3IucHJvcGVydGllcwpAQCAtMCwwICsxLDQ0IEBACisKKyMvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIyAqIENvcHlyaWdodCAoYykgMjAwOSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyMgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisjICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisjICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyMgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorIyAqCisjICogQ29udHJpYnV0b3JzOgorIyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorIyBUbyBjb2RlIGRldmVsb3BlcjoKKyMgICBEbyBOT1QgY2hhbmdlIHRoZSBwcm9wZXJ0aWVzIGJldHdlZW4gdGhpcyBsaW5lIGFuZCB0aGUKKyMgICAiJSUlIEVORCBPRiBUUkFOU0xBVEVEIFBST1BFUlRJRVMgJSUlIiBsaW5lLgorIyAgIE1ha2UgYSBuZXcgcHJvcGVydHkgbmFtZSwgYXBwZW5kIHRvIHRoZSBlbmQgb2YgdGhlIGZpbGUgYW5kIGNoYW5nZQorIyAgIHRoZSBjb2RlIHRvIHVzZSB0aGUgbmV3IHByb3BlcnR5LgorIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisjICUlJSBFTkQgT0YgVFJBTlNMQVRFRCBQUk9QRVJUSUVTICUlJQorIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisKK3BsdWdpbk5hbWU9U1RFTSBcdWM3MjBcdWQ1NWMgXHVjYzI4XHVjNzc0XHVjODEwIFx1ZDU3NFx1YWNiMFx1YzBhYworcHJvdmlkZXJOYW1lPUVjbGlwc2Uub3JnCitfVUlfQ3JlYXRlQ2hpbGRfdGV4dD17MH0KK19VSV9DcmVhdGVDaGlsZF90ZXh0Mj17MX0gezB9CitfVUlfQ3JlYXRlQ2hpbGRfdGV4dDM9ezF9CitfVUlfQ3JlYXRlQ2hpbGRfdG9vbHRpcD17MX0gXHVhZTMwXHViMmE1IFx1ZDU1OFx1YzVkMCBcdWMwYzggezB9IFx1YjljY1x1YjRlNFx1YWUzMAorX1VJX0NyZWF0ZUNoaWxkX2Rlc2NyaXB0aW9uPVx1YzEyMFx1ZDBkZFx1ZDU1YyB7Mn1cdWM3NTggezF9IFx1YWUzMFx1YjJhNVx1YzVkMCBcdWIzMDBcdWQ1NWMgXHVkNjE1XHVjMmRkIHswfVx1Yzc1OCBcdWMwYzhcdWI4NWNcdWM2YjQgQ2hpbGRcdWI5N2MgXHViOWNjXHViNGVkXHViMmM4XHViMmU0LgorX1VJX0NyZWF0ZVNpYmxpbmdfZGVzY3JpcHRpb249XHViZDgwXHViYWE4XHVjNzU4IFx1YzEyMFx1ZDBkZFx1YjQxYyB7Mn1cdWM1ZDBcdWMxMWMgezF9IFx1YWUzMFx1YjJhNVx1YzVkMCBcdWIzMDBcdWQ1NWMgXHVkNjE1XHVjMmRkIHswfVx1Yzc1OCBcdWMwYzhcdWI4NWNcdWM2YjQgXHVkNjE1XHVjODFjXHViOTdjIFx1YjljY1x1YjRlZFx1YjJjOFx1YjJlNC4KKworX1VJX1Byb3BlcnR5RGVzY3JpcHRvcl9kZXNjcmlwdGlvbj17MX0gXHVjOTExIHswfQorCitfVUlfRmluaXRlRGlmZmVyZW5jZV90eXBlPVx1YzcyMFx1ZDU1YyBcdWNjMjhcdWM3NzQKK19VSV9Vbmtub3duX3R5cGU9XHVhYzFjXHVjY2I0CisKK19VSV9Vbmtub3duX2RhdGF0eXBlPVx1YWMxMgorCitfVUlfVW5rbm93bl9mZWF0dXJlPVx1YzljMFx1YzgxNVx1YjQxOFx1YzljMCBcdWM1NGFcdWM3NGMKKworCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uc29sdmVycy5mZC9wbHVnaW5femgucHJvcGVydGllcyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5zb2x2ZXJzLmZkL3BsdWdpbl96aC5wcm9wZXJ0aWVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ4NjY3OWIKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uc29sdmVycy5mZC9wbHVnaW5femgucHJvcGVydGllcwpAQCAtMCwwICsxLDQ0IEBACisKKyMvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIyAqIENvcHlyaWdodCAoYykgMjAwOSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyMgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisjICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisjICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyMgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorIyAqCisjICogQ29udHJpYnV0b3JzOgorIyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorIyBUbyBjb2RlIGRldmVsb3BlcjoKKyMgICBEbyBOT1QgY2hhbmdlIHRoZSBwcm9wZXJ0aWVzIGJldHdlZW4gdGhpcyBsaW5lIGFuZCB0aGUKKyMgICAiJSUlIEVORCBPRiBUUkFOU0xBVEVEIFBST1BFUlRJRVMgJSUlIiBsaW5lLgorIyAgIE1ha2UgYSBuZXcgcHJvcGVydHkgbmFtZSwgYXBwZW5kIHRvIHRoZSBlbmQgb2YgdGhlIGZpbGUgYW5kIGNoYW5nZQorIyAgIHRoZSBjb2RlIHRvIHVzZSB0aGUgbmV3IHByb3BlcnR5LgorIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisjICUlJSBFTkQgT0YgVFJBTlNMQVRFRCBQUk9QRVJUSUVTICUlJQorIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisKK3BsdWdpbk5hbWU9U1RFTVx1NjcwOVx1OTY1MFx1NWRlZVx1NTIwNlx1NmM0Mlx1ODllMworcHJvdmlkZXJOYW1lPUVjbGlwc2Uub3JnCitfVUlfQ3JlYXRlQ2hpbGRfdGV4dD17MH0KK19VSV9DcmVhdGVDaGlsZF90ZXh0Mj17MX0gezB9CitfVUlfQ3JlYXRlQ2hpbGRfdGV4dDM9ezF9CitfVUlfQ3JlYXRlQ2hpbGRfdG9vbHRpcD1cdTUyMWJcdTVlZmFcdTU3Mjh7MX0gezB9XHU2NWIwXHU1MjlmXHU4MGZkCitfVUlfQ3JlYXRlQ2hpbGRfZGVzY3JpcHRpb249XHU0ZTNhXHU5MDA5XHU1YjlhXHU3Njg0ezJ9XHU3Njg0ezF9XHU3Mjc5XHU2MDI3XHU2NzY1XHU1MjFiXHU1ZWZhXHU0ZTAwXHU0ZTJhXHU2NWIwXHU3Njg0ezB9XHU1YjUwXHU3YzdiCitfVUlfQ3JlYXRlU2libGluZ19kZXNjcmlwdGlvbj1cdTU3Mjh7MX1cdTc2ODRcdTcyMzZcdTk2YzZcdTRlMmRcdTRlM2FcdTkwMDlcdTViOWFcdTc2ODR7Mn1cdTY3NjVcdTUyMWJcdTVlZmFcdTRlMDBcdTRlMmF7MH1cdTdjN2JcdTU3OGJcdTc2ODRcdTY1YjBcdTc2ODRcdTUxNDRcdTVmMWZcdTdjN2IKKworX1VJX1Byb3BlcnR5RGVzY3JpcHRvcl9kZXNjcmlwdGlvbj17MH1cdTRlY2VcdTVjNWV7MX0KKworX1VJX0Zpbml0ZURpZmZlcmVuY2VfdHlwZT1cdTY3MDlcdTk2NTBcdTVkZWVcdTUyMDYKK19VSV9Vbmtub3duX3R5cGU9XHU1YmY5XHU4YzYxCisKK19VSV9Vbmtub3duX2RhdGF0eXBlPVx1NGVmN1x1NTAzYworCitfVUlfVW5rbm93bl9mZWF0dXJlPVx1NjcyYVx1NjMwN1x1NWI5YQorCisKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5zb2x2ZXJzLmZkL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3NvbHZlcnMvZmQvRmRGYWN0b3J5LmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uc29sdmVycy5mZC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9zb2x2ZXJzL2ZkL0ZkRmFjdG9yeS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRkYmZiZmMKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uc29sdmVycy5mZC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9zb2x2ZXJzL2ZkL0ZkRmFjdG9yeS5qYXZhCkBAIC0wLDAgKzEsNTEgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5zb2x2ZXJzLmZkOw0KKw0KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorICogQ29weXJpZ2h0IChjKSAyMDA5IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLg0KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMNCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjANCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdA0KKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sDQorICoNCisgKiBDb250cmlidXRvcnM6DQorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbg0KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KKw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUZhY3Rvcnk7DQorDQorLyoqDQorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisgKiBUaGUgPGI+RmFjdG9yeTwvYj4gZm9yIHRoZSBtb2RlbC4NCisgKiBJdCBwcm92aWRlcyBhIGNyZWF0ZSBtZXRob2QgZm9yIGVhY2ggbm9uLWFic3RyYWN0IGNsYXNzIG9mIHRoZSBtb2RlbC4NCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uc29sdmVycy5mZC5GZFBhY2thZ2UNCisgKiBAZ2VuZXJhdGVkDQorICovDQorcHVibGljIGludGVyZmFjZSBGZEZhY3RvcnkgZXh0ZW5kcyBFRmFjdG9yeSB7DQorCS8qKg0KKwkgKiBUaGUgc2luZ2xldG9uIGluc3RhbmNlIG9mIHRoZSBmYWN0b3J5Lg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJRmRGYWN0b3J5IGVJTlNUQU5DRSA9IG9yZy5lY2xpcHNlLnN0ZW0uc29sdmVycy5mZC5pbXBsLkZkRmFjdG9yeUltcGwuaW5pdCgpOw0KKw0KKwkvKioNCisJICogUmV0dXJucyBhIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5GaW5pdGUgRGlmZmVyZW5jZTwvZW0+Jy4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEByZXR1cm4gYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+RmluaXRlIERpZmZlcmVuY2U8L2VtPicuDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCUZpbml0ZURpZmZlcmVuY2UgY3JlYXRlRmluaXRlRGlmZmVyZW5jZSgpOw0KKw0KKwkvKioNCisJICogUmV0dXJucyB0aGUgcGFja2FnZSBzdXBwb3J0ZWQgYnkgdGhpcyBmYWN0b3J5Lg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHJldHVybiB0aGUgcGFja2FnZSBzdXBwb3J0ZWQgYnkgdGhpcyBmYWN0b3J5Lg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlGZFBhY2thZ2UgZ2V0RmRQYWNrYWdlKCk7DQorDQorfSAvL0ZkRmFjdG9yeQ0KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5zb2x2ZXJzLmZkL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3NvbHZlcnMvZmQvRmRQYWNrYWdlLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uc29sdmVycy5mZC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9zb2x2ZXJzL2ZkL0ZkUGFja2FnZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc4YzUzMzYKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uc29sdmVycy5mZC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9zb2x2ZXJzL2ZkL0ZkUGFja2FnZS5qYXZhCkBAIC0wLDAgKzEsMTY2IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uc29sdmVycy5mZDsNCisNCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyAqIENvcHlyaWdodCAoYykgMjAwOSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4NCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzDQorICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wDQorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQNCisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbA0KKyAqDQorICogQ29udHJpYnV0b3JzOg0KKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24NCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCisNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzczsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVQYWNrYWdlOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc29sdmVyLlNvbHZlclBhY2thZ2U7DQorDQorLyoqDQorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisgKiBUaGUgPGI+UGFja2FnZTwvYj4gZm9yIHRoZSBtb2RlbC4NCisgKiBJdCBjb250YWlucyBhY2Nlc3NvcnMgZm9yIHRoZSBtZXRhIG9iamVjdHMgdG8gcmVwcmVzZW50DQorICogPHVsPg0KKyAqICAgPGxpPmVhY2ggY2xhc3MsPC9saT4NCisgKiAgIDxsaT5lYWNoIGZlYXR1cmUgb2YgZWFjaCBjbGFzcyw8L2xpPg0KKyAqICAgPGxpPmVhY2ggZW51bSw8L2xpPg0KKyAqICAgPGxpPmFuZCBlYWNoIGRhdGEgdHlwZTwvbGk+DQorICogPC91bD4NCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uc29sdmVycy5mZC5GZEZhY3RvcnkNCisgKiBAbW9kZWwga2luZD0icGFja2FnZSINCisgKiBAZ2VuZXJhdGVkDQorICovDQorcHVibGljIGludGVyZmFjZSBGZFBhY2thZ2UgZXh0ZW5kcyBFUGFja2FnZSB7DQorCS8qKg0KKwkgKiBUaGUgcGFja2FnZSBuYW1lLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJU3RyaW5nIGVOQU1FID0gImZkIjsNCisNCisJLyoqDQorCSAqIFRoZSBwYWNrYWdlIG5hbWVzcGFjZSBVUkkuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlTdHJpbmcgZU5TX1VSSSA9ICJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vc29sdmVycy9mZCI7DQorDQorCS8qKg0KKwkgKiBUaGUgcGFja2FnZSBuYW1lc3BhY2UgbmFtZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCVN0cmluZyBlTlNfUFJFRklYID0gIm9yZy5lY2xpcHNlLnN0ZW0uc29sdmVycy5mZCI7DQorDQorCS8qKg0KKwkgKiBUaGUgc2luZ2xldG9uIGluc3RhbmNlIG9mIHRoZSBwYWNrYWdlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJRmRQYWNrYWdlIGVJTlNUQU5DRSA9IG9yZy5lY2xpcHNlLnN0ZW0uc29sdmVycy5mZC5pbXBsLkZkUGFja2FnZUltcGwuaW5pdCgpOw0KKw0KKwkvKioNCisJICogVGhlIG1ldGEgb2JqZWN0IGlkIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLnNvbHZlcnMuZmQuaW1wbC5GaW5pdGVEaWZmZXJlbmNlSW1wbCA8ZW0+RmluaXRlIERpZmZlcmVuY2U8L2VtPn0nIGNsYXNzLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnNvbHZlcnMuZmQuaW1wbC5GaW5pdGVEaWZmZXJlbmNlSW1wbA0KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uc29sdmVycy5mZC5pbXBsLkZkUGFja2FnZUltcGwjZ2V0RmluaXRlRGlmZmVyZW5jZSgpDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCWludCBGSU5JVEVfRElGRkVSRU5DRSA9IDA7DQorDQorCS8qKg0KKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VVJJPC9iPjwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqIEBvcmRlcmVkDQorCSAqLw0KKwlpbnQgRklOSVRFX0RJRkZFUkVOQ0VfX1VSSSA9IFNvbHZlclBhY2thZ2UuU09MVkVSX19VUkk7DQorDQorCS8qKg0KKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VHlwZSBVUkk8L2I+PC9lbT4nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCWludCBGSU5JVEVfRElGRkVSRU5DRV9fVFlQRV9VUkkgPSBTb2x2ZXJQYWNrYWdlLlNPTFZFUl9fVFlQRV9VUkk7DQorDQorCS8qKg0KKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RHVibGluIENvcmU8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCWludCBGSU5JVEVfRElGRkVSRU5DRV9fRFVCTElOX0NPUkUgPSBTb2x2ZXJQYWNrYWdlLlNPTFZFUl9fRFVCTElOX0NPUkU7DQorDQorCS8qKg0KKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RGVjb3JhdG9yczwvYj48L2VtPicgcmVmZXJlbmNlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJaW50IEZJTklURV9ESUZGRVJFTkNFX19ERUNPUkFUT1JTID0gU29sdmVyUGFja2FnZS5TT0xWRVJfX0RFQ09SQVRPUlM7DQorDQorCS8qKg0KKwkgKiBUaGUgbnVtYmVyIG9mIHN0cnVjdHVyYWwgZmVhdHVyZXMgb2YgdGhlICc8ZW0+RmluaXRlIERpZmZlcmVuY2U8L2VtPicgY2xhc3MuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqIEBvcmRlcmVkDQorCSAqLw0KKwlpbnQgRklOSVRFX0RJRkZFUkVOQ0VfRkVBVFVSRV9DT1VOVCA9IFNvbHZlclBhY2thZ2UuU09MVkVSX0ZFQVRVUkVfQ09VTlQgKyAwOw0KKw0KKw0KKwkvKioNCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5zb2x2ZXJzLmZkLkZpbml0ZURpZmZlcmVuY2UgPGVtPkZpbml0ZSBEaWZmZXJlbmNlPC9lbT59Jy4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAnPGVtPkZpbml0ZSBEaWZmZXJlbmNlPC9lbT4nLg0KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uc29sdmVycy5mZC5GaW5pdGVEaWZmZXJlbmNlDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCUVDbGFzcyBnZXRGaW5pdGVEaWZmZXJlbmNlKCk7DQorDQorCS8qKg0KKwkgKiBSZXR1cm5zIHRoZSBmYWN0b3J5IHRoYXQgY3JlYXRlcyB0aGUgaW5zdGFuY2VzIG9mIHRoZSBtb2RlbC4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEByZXR1cm4gdGhlIGZhY3RvcnkgdGhhdCBjcmVhdGVzIHRoZSBpbnN0YW5jZXMgb2YgdGhlIG1vZGVsLg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlGZEZhY3RvcnkgZ2V0RmRGYWN0b3J5KCk7DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiBEZWZpbmVzIGxpdGVyYWxzIGZvciB0aGUgbWV0YSBvYmplY3RzIHRoYXQgcmVwcmVzZW50DQorCSAqIDx1bD4NCisJICogICA8bGk+ZWFjaCBjbGFzcyw8L2xpPg0KKwkgKiAgIDxsaT5lYWNoIGZlYXR1cmUgb2YgZWFjaCBjbGFzcyw8L2xpPg0KKwkgKiAgIDxsaT5lYWNoIGVudW0sPC9saT4NCisJICogICA8bGk+YW5kIGVhY2ggZGF0YSB0eXBlPC9saT4NCisJICogPC91bD4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCWludGVyZmFjZSBMaXRlcmFscyB7DQorCQkvKioNCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLnNvbHZlcnMuZmQuaW1wbC5GaW5pdGVEaWZmZXJlbmNlSW1wbCA8ZW0+RmluaXRlIERpZmZlcmVuY2U8L2VtPn0nIGNsYXNzLg0KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnNvbHZlcnMuZmQuaW1wbC5GaW5pdGVEaWZmZXJlbmNlSW1wbA0KKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnNvbHZlcnMuZmQuaW1wbC5GZFBhY2thZ2VJbXBsI2dldEZpbml0ZURpZmZlcmVuY2UoKQ0KKwkJICogQGdlbmVyYXRlZA0KKwkJICovDQorCQlFQ2xhc3MgRklOSVRFX0RJRkZFUkVOQ0UgPSBlSU5TVEFOQ0UuZ2V0RmluaXRlRGlmZmVyZW5jZSgpOw0KKw0KKwl9DQorDQorfSAvL0ZkUGFja2FnZQ0KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5zb2x2ZXJzLmZkL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3NvbHZlcnMvZmQvRmluaXRlRGlmZmVyZW5jZS5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnNvbHZlcnMuZmQvc3JjL29yZy9lY2xpcHNlL3N0ZW0vc29sdmVycy9mZC9GaW5pdGVEaWZmZXJlbmNlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmM5NjI1ZAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5zb2x2ZXJzLmZkL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3NvbHZlcnMvZmQvRmluaXRlRGlmZmVyZW5jZS5qYXZhCkBAIC0wLDAgKzEsMzEgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5zb2x2ZXJzLmZkOw0KKw0KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorICogQ29weXJpZ2h0IChjKSAyMDA5IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLg0KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMNCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjANCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdA0KKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sDQorICoNCisgKiBDb250cmlidXRvcnM6DQorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbg0KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KKw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc29sdmVyLlNvbHZlcjsNCisNCisvKioNCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKyAqIEEgcmVwcmVzZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPkZpbml0ZSBEaWZmZXJlbmNlPC9iPjwvZW0+Jy4NCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisgKg0KKyAqDQorICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnNvbHZlcnMuZmQuRmRQYWNrYWdlI2dldEZpbml0ZURpZmZlcmVuY2UoKQ0KKyAqIEBtb2RlbA0KKyAqIEBnZW5lcmF0ZWQNCisgKi8NCitAU3VwcHJlc3NXYXJuaW5ncygiYWxsIikNCitwdWJsaWMgaW50ZXJmYWNlIEZpbml0ZURpZmZlcmVuY2UgZXh0ZW5kcyBTb2x2ZXIgew0KKwkNCisJcHVibGljIGZpbmFsIHN0YXRpYyBTdHJpbmcgVVJJX1RZUEVfU09MVkVSX1NFR01FTlQgPSAiRmluaXRlRGlmZmVyZW5jZVNvbHZlciI7DQorCQ0KK30gLy8gRmluaXRlRGlmZmVyZW5jZQ0KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5zb2x2ZXJzLmZkL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3NvbHZlcnMvZmQvaW1wbC9GZEZhY3RvcnlJbXBsLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uc29sdmVycy5mZC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9zb2x2ZXJzL2ZkL2ltcGwvRmRGYWN0b3J5SW1wbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI0NmFiYTgKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uc29sdmVycy5mZC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9zb2x2ZXJzL2ZkL2ltcGwvRmRGYWN0b3J5SW1wbC5qYXZhCkBAIC0wLDAgKzEsMTAzIEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uc29sdmVycy5mZC5pbXBsOw0KKw0KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorICogQ29weXJpZ2h0IChjKSAyMDA5IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLg0KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMNCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjANCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdA0KKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sDQorICoNCisgKiBDb250cmlidXRvcnM6DQorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbg0KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KKw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdDsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVQYWNrYWdlOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuaW1wbC5FRmFjdG9yeUltcGw7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5wbHVnaW4uRWNvcmVQbHVnaW47DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uc29sdmVycy5mZC5GZEZhY3Rvcnk7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uc29sdmVycy5mZC5GZFBhY2thZ2U7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uc29sdmVycy5mZC5GaW5pdGVEaWZmZXJlbmNlOw0KKw0KKy8qKg0KKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorICogQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIG1vZGVsIDxiPkZhY3Rvcnk8L2I+Lg0KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKyAqIEBnZW5lcmF0ZWQNCisgKi8NCitwdWJsaWMgY2xhc3MgRmRGYWN0b3J5SW1wbCBleHRlbmRzIEVGYWN0b3J5SW1wbCBpbXBsZW1lbnRzIEZkRmFjdG9yeSB7DQorCS8qKg0KKwkgKiBDcmVhdGVzIHRoZSBkZWZhdWx0IGZhY3RvcnkgaW1wbGVtZW50YXRpb24uDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgc3RhdGljIEZkRmFjdG9yeSBpbml0KCkgew0KKwkJdHJ5IHsNCisJCQlGZEZhY3RvcnkgdGhlRmRGYWN0b3J5ID0gKEZkRmFjdG9yeSlFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFRmFjdG9yeSgiaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL3NvbHZlcnMvZmQiKTsgDQorCQkJaWYgKHRoZUZkRmFjdG9yeSAhPSBudWxsKSB7DQorCQkJCXJldHVybiB0aGVGZEZhY3Rvcnk7DQorCQkJfQ0KKwkJfQ0KKwkJY2F0Y2ggKEV4Y2VwdGlvbiBleGNlcHRpb24pIHsNCisJCQlFY29yZVBsdWdpbi5JTlNUQU5DRS5sb2coZXhjZXB0aW9uKTsNCisJCX0NCisJCXJldHVybiBuZXcgRmRGYWN0b3J5SW1wbCgpOw0KKwl9DQorDQorCS8qKg0KKwkgKiBDcmVhdGVzIGFuIGluc3RhbmNlIG9mIHRoZSBmYWN0b3J5Lg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIEZkRmFjdG9yeUltcGwoKSB7DQorCQlzdXBlcigpOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJQE92ZXJyaWRlDQorCXB1YmxpYyBFT2JqZWN0IGNyZWF0ZShFQ2xhc3MgZUNsYXNzKSB7DQorCQlzd2l0Y2ggKGVDbGFzcy5nZXRDbGFzc2lmaWVySUQoKSkgew0KKwkJCWNhc2UgRmRQYWNrYWdlLkZJTklURV9ESUZGRVJFTkNFOiByZXR1cm4gY3JlYXRlRmluaXRlRGlmZmVyZW5jZSgpOw0KKwkJCWRlZmF1bHQ6DQorCQkJCXRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIlRoZSBjbGFzcyAnIiArIGVDbGFzcy5nZXROYW1lKCkgKyAiJyBpcyBub3QgYSB2YWxpZCBjbGFzc2lmaWVyIik7DQorCQl9DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgRmluaXRlRGlmZmVyZW5jZSBjcmVhdGVGaW5pdGVEaWZmZXJlbmNlKCkgew0KKwkJRmluaXRlRGlmZmVyZW5jZUltcGwgZmluaXRlRGlmZmVyZW5jZSA9IG5ldyBGaW5pdGVEaWZmZXJlbmNlSW1wbCgpOw0KKwkJcmV0dXJuIGZpbml0ZURpZmZlcmVuY2U7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgRmRQYWNrYWdlIGdldEZkUGFja2FnZSgpIHsNCisJCXJldHVybiAoRmRQYWNrYWdlKWdldEVQYWNrYWdlKCk7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZGVwcmVjYXRlZA0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlARGVwcmVjYXRlZA0KKwlwdWJsaWMgc3RhdGljIEZkUGFja2FnZSBnZXRQYWNrYWdlKCkgew0KKwkJcmV0dXJuIEZkUGFja2FnZS5lSU5TVEFOQ0U7DQorCX0NCisNCit9IC8vRmRGYWN0b3J5SW1wbA0KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5zb2x2ZXJzLmZkL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3NvbHZlcnMvZmQvaW1wbC9GZEpvYi5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnNvbHZlcnMuZmQvc3JjL29yZy9lY2xpcHNlL3N0ZW0vc29sdmVycy9mZC9pbXBsL0ZkSm9iLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDM1MGNmNwotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5zb2x2ZXJzLmZkL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3NvbHZlcnMvZmQvaW1wbC9GZEpvYi5qYXZhCkBAIC0wLDAgKzEsNzAgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5zb2x2ZXJzLmZkLmltcGw7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDkgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKKworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUHJvZ3Jlc3NNb25pdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TdGF0dXM7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLmpvYnMuSm9iOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5TVEVNVGltZTsKKworLyoqCisgKiBBIGpvYiBmb3IgdGhlIGZpbml0ZSBkaWZmZXJlbmNlIHNvbHZlcgorICoKKyAqLworcHVibGljIGNsYXNzIEZkSm9iIGV4dGVuZHMgSm9iIHsKKwkKKwlwdWJsaWMgRmRKb2IoU3RyaW5nIG4sIHNob3J0IHRocmVhZCwgRmluaXRlRGlmZmVyZW5jZUltcGwgcykgeworCQlzdXBlcihuKTsKKwkJdGhpcy50aHJlYWRudW0gPSB0aHJlYWQ7CisJCXRoaXMuc29sdmVyID0gczsKKwl9CisJCisJcHVibGljIHN0YXRpYyBpbnQgQ09NUFVURV9ERUxUQVMgPSAwOworCXB1YmxpYyBzdGF0aWMgaW50IENIRUNLX0RFTFRBUyA9IDE7CisJcHVibGljIHN0YXRpYyBpbnQgQVBQTFlfREVMVEFTID0gMjsKKworCXByb3RlY3RlZCBkb3VibGUgcHJvZ3Jlc3M7CisJcHJvdGVjdGVkIGRvdWJsZSB0OworCXByb3RlY3RlZCBGaW5pdGVEaWZmZXJlbmNlSW1wbCBzb2x2ZXI7CisJCisJcHJvdGVjdGVkIFNURU1UaW1lIHRpbWU7CisJbG9uZyB0aW1lRGVsdGE7CisJaW50IGN5Y2xlOworCXNob3J0IHRocmVhZG51bTsKKwlpbnQgc3RlcDsKKwkKKwlwdWJsaWMgZG91YmxlIGdldFByb2dyZXNzKCkgeworCQlyZXR1cm4gdGhpcy5wcm9ncmVzczsKKwl9CisJcHVibGljIHZvaWQgc2V0UHJvZ3Jlc3MoZG91YmxlIHApIHsKKwkJdGhpcy5wcm9ncmVzcyA9IHA7CisJfQorCXByb3RlY3RlZCBJU3RhdHVzIHJ1bihmaW5hbCBJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IpIHsKKwkJSVN0YXR1cyBzdGF0dXMgPSBTdGF0dXMuQ0FOQ0VMX1NUQVRVUzsKKwkJCisJCWlmIChzdGVwID09IENPTVBVVEVfREVMVEFTKSB7CisJCQlzb2x2ZXIuY29tcHV0ZURlbHRhc1N0ZXAodGltZSx0aW1lRGVsdGEsdGhyZWFkbnVtKTsKKwkJCXN0YXR1cyA9IG5ldyBTdGF0dXMoSVN0YXR1cy5PSywgInVua25vd25JZCIsICIiKTsKKwkJfSBlbHNlIGlmIChzdGVwID09IENIRUNLX0RFTFRBUykgeworCQkJZG91YmxlIGFkanVzdG1lbnRGYWN0b3IgPSBzb2x2ZXIuY2hlY2tEZWx0YXNTdGVwKHRocmVhZG51bSk7CisJCQlzdGF0dXMgPSBuZXcgU3RhdHVzKElTdGF0dXMuT0ssICJ1bmtub3duSWQiLCBhZGp1c3RtZW50RmFjdG9yICsgIiIpOworCQl9IGVsc2UgaWYgKHN0ZXAgPT0gQVBQTFlfREVMVEFTKSB7CisJCQlzb2x2ZXIuYXBwbHlEZWx0YXNTdGVwKHRocmVhZG51bSk7CisJCQlzdGF0dXMgPSBuZXcgU3RhdHVzKElTdGF0dXMuT0ssICJ1bmtub3duSWQiLCAiIik7CisJCX0KKwkJCisJCXJldHVybiBzdGF0dXM7CisJfQorfQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnNvbHZlcnMuZmQvc3JjL29yZy9lY2xpcHNlL3N0ZW0vc29sdmVycy9mZC9pbXBsL0ZkUGFja2FnZUltcGwuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5zb2x2ZXJzLmZkL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3NvbHZlcnMvZmQvaW1wbC9GZFBhY2thZ2VJbXBsLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWI2NDEzNAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5zb2x2ZXJzLmZkL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3NvbHZlcnMvZmQvaW1wbC9GZFBhY2thZ2VJbXBsLmphdmEKQEAgLTAsMCArMSwxOTkgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5zb2x2ZXJzLmZkLmltcGw7DQorDQorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisgKiBDb3B5cmlnaHQgKGMpIDIwMDkgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuDQorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscw0KKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMA0KKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0DQorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwNCisgKg0KKyAqIENvbnRyaWJ1dG9yczoNCisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uDQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQorDQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FUGFja2FnZTsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLmltcGwuRVBhY2thZ2VJbXBsOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLkNvbW1vblBhY2thZ2U7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5HcmFwaFBhY2thZ2U7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5Nb2RlbFBhY2thZ2U7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5Nb2RpZmllclBhY2thZ2U7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zY2VuYXJpby5TY2VuYXJpb1BhY2thZ2U7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zZXF1ZW5jZXIuU2VxdWVuY2VyUGFja2FnZTsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNvbHZlci5Tb2x2ZXJQYWNrYWdlOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnNvbHZlcnMuZmQuRmRGYWN0b3J5Ow0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnNvbHZlcnMuZmQuRmRQYWNrYWdlOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnNvbHZlcnMuZmQuRmluaXRlRGlmZmVyZW5jZTsNCisNCisvKioNCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKyAqIEFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBtb2RlbCA8Yj5QYWNrYWdlPC9iPi4NCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisgKiBAZ2VuZXJhdGVkDQorICovDQorcHVibGljIGNsYXNzIEZkUGFja2FnZUltcGwgZXh0ZW5kcyBFUGFja2FnZUltcGwgaW1wbGVtZW50cyBGZFBhY2thZ2Ugew0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByaXZhdGUgRUNsYXNzIGZpbml0ZURpZmZlcmVuY2VFQ2xhc3MgPSBudWxsOw0KKw0KKwkvKioNCisJICogQ3JlYXRlcyBhbiBpbnN0YW5jZSBvZiB0aGUgbW9kZWwgPGI+UGFja2FnZTwvYj4sIHJlZ2lzdGVyZWQgd2l0aA0KKwkgKiB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVQYWNrYWdlLlJlZ2lzdHJ5IEVQYWNrYWdlLlJlZ2lzdHJ5fSBieSB0aGUgcGFja2FnZQ0KKwkgKiBwYWNrYWdlIFVSSSB2YWx1ZS4NCisJICogPHA+Tm90ZTogdGhlIGNvcnJlY3Qgd2F5IHRvIGNyZWF0ZSB0aGUgcGFja2FnZSBpcyB2aWEgdGhlIHN0YXRpYw0KKwkgKiBmYWN0b3J5IG1ldGhvZCB7QGxpbmsgI2luaXQgaW5pdCgpfSwgd2hpY2ggYWxzbyBwZXJmb3Jtcw0KKwkgKiBpbml0aWFsaXphdGlvbiBvZiB0aGUgcGFja2FnZSwgb3IgcmV0dXJucyB0aGUgcmVnaXN0ZXJlZCBwYWNrYWdlLA0KKwkgKiBpZiBvbmUgYWxyZWFkeSBleGlzdHMuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FUGFja2FnZS5SZWdpc3RyeQ0KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uc29sdmVycy5mZC5GZFBhY2thZ2UjZU5TX1VSSQ0KKwkgKiBAc2VlICNpbml0KCkNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJpdmF0ZSBGZFBhY2thZ2VJbXBsKCkgew0KKwkJc3VwZXIoZU5TX1VSSSwgRmRGYWN0b3J5LmVJTlNUQU5DRSk7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcml2YXRlIHN0YXRpYyBib29sZWFuIGlzSW5pdGVkID0gZmFsc2U7DQorDQorCS8qKg0KKwkgKiBDcmVhdGVzLCByZWdpc3RlcnMsIGFuZCBpbml0aWFsaXplcyB0aGUgPGI+UGFja2FnZTwvYj4gZm9yIHRoaXMNCisJICogbW9kZWwsIGFuZCBmb3IgYW55IG90aGVycyB1cG9uIHdoaWNoIGl0IGRlcGVuZHMuICBTaW1wbGUNCisJICogZGVwZW5kZW5jaWVzIGFyZSBzYXRpc2ZpZWQgYnkgY2FsbGluZyB0aGlzIG1ldGhvZCBvbiBhbGwNCisJICogZGVwZW5kZW50IHBhY2thZ2VzIGJlZm9yZSBkb2luZyBhbnl0aGluZyBlbHNlLiAgVGhpcyBtZXRob2QgZHJpdmVzDQorCSAqIGluaXRpYWxpemF0aW9uIGZvciBpbnRlcmRlcGVuZGVudCBwYWNrYWdlcyBkaXJlY3RseSwgaW4gcGFyYWxsZWwNCisJICogd2l0aCB0aGlzIHBhY2thZ2UsIGl0c2VsZi4NCisJICogPHA+T2YgdGhpcyBwYWNrYWdlIGFuZCBpdHMgaW50ZXJkZXBlbmRlbmNpZXMsIGFsbCBwYWNrYWdlcyB3aGljaA0KKwkgKiBoYXZlIG5vdCB5ZXQgYmVlbiByZWdpc3RlcmVkIGJ5IHRoZWlyIFVSSSB2YWx1ZXMgYXJlIGZpcnN0IGNyZWF0ZWQNCisJICogYW5kIHJlZ2lzdGVyZWQuICBUaGUgcGFja2FnZXMgYXJlIHRoZW4gaW5pdGlhbGl6ZWQgaW4gdHdvIHN0ZXBzOg0KKwkgKiBtZXRhLW1vZGVsIG9iamVjdHMgZm9yIGFsbCBvZiB0aGUgcGFja2FnZXMgYXJlIGNyZWF0ZWQgYmVmb3JlIGFueQ0KKwkgKiBhcmUgaW5pdGlhbGl6ZWQsIHNpbmNlIG9uZSBwYWNrYWdlJ3MgbWV0YS1tb2RlbCBvYmplY3RzIG1heSByZWZlciB0bw0KKwkgKiB0aG9zZSBvZiBhbm90aGVyLg0KKwkgKiA8cD5JbnZvY2F0aW9uIG9mIHRoaXMgbWV0aG9kIHdpbGwgbm90IGFmZmVjdCBhbnkgcGFja2FnZXMgdGhhdCBoYXZlDQorCSAqIGFscmVhZHkgYmVlbiBpbml0aWFsaXplZC4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBzZWUgI2VOU19VUkkNCisJICogQHNlZSAjY3JlYXRlUGFja2FnZUNvbnRlbnRzKCkNCisJICogQHNlZSAjaW5pdGlhbGl6ZVBhY2thZ2VDb250ZW50cygpDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBzdGF0aWMgRmRQYWNrYWdlIGluaXQoKSB7DQorCQlpZiAoaXNJbml0ZWQpIHJldHVybiAoRmRQYWNrYWdlKUVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVQYWNrYWdlKEZkUGFja2FnZS5lTlNfVVJJKTsNCisNCisJCS8vIE9idGFpbiBvciBjcmVhdGUgYW5kIHJlZ2lzdGVyIHBhY2thZ2UNCisJCUZkUGFja2FnZUltcGwgdGhlRmRQYWNrYWdlID0gKEZkUGFja2FnZUltcGwpKEVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVQYWNrYWdlKGVOU19VUkkpIGluc3RhbmNlb2YgRmRQYWNrYWdlSW1wbCA/IEVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVQYWNrYWdlKGVOU19VUkkpIDogbmV3IEZkUGFja2FnZUltcGwoKSk7DQorDQorCQlpc0luaXRlZCA9IHRydWU7DQorDQorCQkvLyBJbml0aWFsaXplIHNpbXBsZSBkZXBlbmRlbmNpZXMNCisJCUNvbW1vblBhY2thZ2UuZUlOU1RBTkNFLmVDbGFzcygpOw0KKwkJR3JhcGhQYWNrYWdlLmVJTlNUQU5DRS5lQ2xhc3MoKTsNCisJCU1vZGVsUGFja2FnZS5lSU5TVEFOQ0UuZUNsYXNzKCk7DQorCQlNb2RpZmllclBhY2thZ2UuZUlOU1RBTkNFLmVDbGFzcygpOw0KKwkJU2NlbmFyaW9QYWNrYWdlLmVJTlNUQU5DRS5lQ2xhc3MoKTsNCisJCVNlcXVlbmNlclBhY2thZ2UuZUlOU1RBTkNFLmVDbGFzcygpOw0KKwkJU29sdmVyUGFja2FnZS5lSU5TVEFOQ0UuZUNsYXNzKCk7DQorDQorCQkvLyBDcmVhdGUgcGFja2FnZSBtZXRhLWRhdGEgb2JqZWN0cw0KKwkJdGhlRmRQYWNrYWdlLmNyZWF0ZVBhY2thZ2VDb250ZW50cygpOw0KKw0KKwkJLy8gSW5pdGlhbGl6ZSBjcmVhdGVkIG1ldGEtZGF0YQ0KKwkJdGhlRmRQYWNrYWdlLmluaXRpYWxpemVQYWNrYWdlQ29udGVudHMoKTsNCisNCisJCS8vIE1hcmsgbWV0YS1kYXRhIHRvIGluZGljYXRlIGl0IGNhbid0IGJlIGNoYW5nZWQNCisJCXRoZUZkUGFja2FnZS5mcmVlemUoKTsNCisNCisJCXJldHVybiB0aGVGZFBhY2thZ2U7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgRUNsYXNzIGdldEZpbml0ZURpZmZlcmVuY2UoKSB7DQorCQlyZXR1cm4gZmluaXRlRGlmZmVyZW5jZUVDbGFzczsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBGZEZhY3RvcnkgZ2V0RmRGYWN0b3J5KCkgew0KKwkJcmV0dXJuIChGZEZhY3RvcnkpZ2V0RUZhY3RvcnlJbnN0YW5jZSgpOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJpdmF0ZSBib29sZWFuIGlzQ3JlYXRlZCA9IGZhbHNlOw0KKw0KKwkvKioNCisJICogQ3JlYXRlcyB0aGUgbWV0YS1tb2RlbCBvYmplY3RzIGZvciB0aGUgcGFja2FnZS4gIFRoaXMgbWV0aG9kIGlzDQorCSAqIGd1YXJkZWQgdG8gaGF2ZSBubyBhZmZlY3Qgb24gYW55IGludm9jYXRpb24gYnV0IGl0cyBmaXJzdC4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyB2b2lkIGNyZWF0ZVBhY2thZ2VDb250ZW50cygpIHsNCisJCWlmIChpc0NyZWF0ZWQpIHJldHVybjsNCisJCWlzQ3JlYXRlZCA9IHRydWU7DQorDQorCQkvLyBDcmVhdGUgY2xhc3NlcyBhbmQgdGhlaXIgZmVhdHVyZXMNCisJCWZpbml0ZURpZmZlcmVuY2VFQ2xhc3MgPSBjcmVhdGVFQ2xhc3MoRklOSVRFX0RJRkZFUkVOQ0UpOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJpdmF0ZSBib29sZWFuIGlzSW5pdGlhbGl6ZWQgPSBmYWxzZTsNCisNCisJLyoqDQorCSAqIENvbXBsZXRlIHRoZSBpbml0aWFsaXphdGlvbiBvZiB0aGUgcGFja2FnZSBhbmQgaXRzIG1ldGEtbW9kZWwuICBUaGlzDQorCSAqIG1ldGhvZCBpcyBndWFyZGVkIHRvIGhhdmUgbm8gYWZmZWN0IG9uIGFueSBpbnZvY2F0aW9uIGJ1dCBpdHMgZmlyc3QuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgdm9pZCBpbml0aWFsaXplUGFja2FnZUNvbnRlbnRzKCkgew0KKwkJaWYgKGlzSW5pdGlhbGl6ZWQpIHJldHVybjsNCisJCWlzSW5pdGlhbGl6ZWQgPSB0cnVlOw0KKw0KKwkJLy8gSW5pdGlhbGl6ZSBwYWNrYWdlDQorCQlzZXROYW1lKGVOQU1FKTsNCisJCXNldE5zUHJlZml4KGVOU19QUkVGSVgpOw0KKwkJc2V0TnNVUkkoZU5TX1VSSSk7DQorDQorCQkvLyBPYnRhaW4gb3RoZXIgZGVwZW5kZW50IHBhY2thZ2VzDQorCQlTb2x2ZXJQYWNrYWdlIHRoZVNvbHZlclBhY2thZ2UgPSAoU29sdmVyUGFja2FnZSlFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShTb2x2ZXJQYWNrYWdlLmVOU19VUkkpOw0KKw0KKwkJLy8gQ3JlYXRlIHR5cGUgcGFyYW1ldGVycw0KKw0KKwkJLy8gU2V0IGJvdW5kcyBmb3IgdHlwZSBwYXJhbWV0ZXJzDQorDQorCQkvLyBBZGQgc3VwZXJ0eXBlcyB0byBjbGFzc2VzDQorCQlmaW5pdGVEaWZmZXJlbmNlRUNsYXNzLmdldEVTdXBlclR5cGVzKCkuYWRkKHRoZVNvbHZlclBhY2thZ2UuZ2V0U29sdmVyKCkpOw0KKw0KKwkJLy8gSW5pdGlhbGl6ZSBjbGFzc2VzIGFuZCBmZWF0dXJlczsgYWRkIG9wZXJhdGlvbnMgYW5kIHBhcmFtZXRlcnMNCisJCWluaXRFQ2xhc3MoZmluaXRlRGlmZmVyZW5jZUVDbGFzcywgRmluaXRlRGlmZmVyZW5jZS5jbGFzcywgIkZpbml0ZURpZmZlcmVuY2UiLCAhSVNfQUJTVFJBQ1QsICFJU19JTlRFUkZBQ0UsIElTX0dFTkVSQVRFRF9JTlNUQU5DRV9DTEFTUyk7DQorDQorCQkvLyBDcmVhdGUgcmVzb3VyY2UNCisJCWNyZWF0ZVJlc291cmNlKGVOU19VUkkpOw0KKwl9DQorDQorfSAvL0ZkUGFja2FnZUltcGwNCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uc29sdmVycy5mZC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9zb2x2ZXJzL2ZkL2ltcGwvRmluaXRlRGlmZmVyZW5jZUltcGwuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5zb2x2ZXJzLmZkL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3NvbHZlcnMvZmQvaW1wbC9GaW5pdGVEaWZmZXJlbmNlSW1wbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFlNmQxYTcKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uc29sdmVycy5mZC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9zb2x2ZXJzL2ZkL2ltcGwvRmluaXRlRGlmZmVyZW5jZUltcGwuamF2YQpAQCAtMCwwICsxLDM1OCBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnNvbHZlcnMuZmQuaW1wbDsNCisNCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyAqIENvcHlyaWdodCAoYykgMjAwOSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4NCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzDQorICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wDQorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQNCisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbA0KKyAqDQorICogQ29udHJpYnV0b3JzOg0KKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24NCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCisNCitpbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOw0KKw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUHJlZmVyZW5jZXM7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5CYXNpY0VMaXN0Ow0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuRUxpc3Q7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5EeW5hbWljTGFiZWw7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5JbnRlZ3JhdGlvbkxhYmVsOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguSW50ZWdyYXRpb25MYWJlbFZhbHVlOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguTGFiZWxWYWx1ZTsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLkRlY29yYXRvcjsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLkludGVncmF0aW9uRGVjb3JhdG9yOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuU1RFTVRpbWU7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zb2x2ZXIuaW1wbC5Tb2x2ZXJJbXBsOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUudHJpZ2dlci5UcmlnZ2VyOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnNvbHZlcnMuZmQuRmRQYWNrYWdlOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnNvbHZlcnMuZmQuRmluaXRlRGlmZmVyZW5jZTsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS51aS5BY3RpdmF0b3I7DQorDQorLyoqDQorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisgKiBBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+RmluaXRlIERpZmZlcmVuY2U8L2I+PC9lbT4nLg0KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKyAqIDxwPg0KKyAqIDwvcD4NCisgKg0KKyAqIEBnZW5lcmF0ZWQNCisgKi8NCitwdWJsaWMgY2xhc3MgRmluaXRlRGlmZmVyZW5jZUltcGwgZXh0ZW5kcyBTb2x2ZXJJbXBsIGltcGxlbWVudHMgRmluaXRlRGlmZmVyZW5jZSB7DQorCQ0KKwkvLyBUaGUgd29ya2VyIGpvYnMNCisJcHJpdmF0ZSBGZEpvYiBbXSBqb2JzOw0KKwkvLyBOdW1iZXIgb2YgdGhyZWFkcw0KKwlwcml2YXRlIHNob3J0IG51bV90aHJlYWRzOw0KKwkNCisJcHJpdmF0ZSBmaW5hbCBzdGF0aWMgaW50IE1BWF9QUk9HUkVTU19SRVBPUlRTID0gNTsNCisJDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZCBOT1QNCisJICovDQorCXB1YmxpYyBGaW5pdGVEaWZmZXJlbmNlSW1wbCgpIHsNCisJCXN1cGVyKCk7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkIE5PVA0KKwkgKi8NCisJQE92ZXJyaWRlDQorCXB1YmxpYyBib29sZWFuIHN0ZXAoU1RFTVRpbWUgdGltZSwgbG9uZyB0aW1lRGVsdGEsIGludCBjeWNsZSkgew0KKwkJDQorCQlBY3RpdmF0b3IgYWN0ID0gb3JnLmVjbGlwc2Uuc3RlbS51aS5BY3RpdmF0b3IuZ2V0RGVmYXVsdCgpOw0KKwkJaWYoYWN0ICE9IG51bGwpIHsNCisJCQlmaW5hbCBQcmVmZXJlbmNlcyBwcmVmZXJlbmNlcyA9IGFjdC5nZXRQbHVnaW5QcmVmZXJlbmNlcygpOw0KKwkJCW51bV90aHJlYWRzID0gKHNob3J0KXByZWZlcmVuY2VzLmdldEludChvcmcuZWNsaXBzZS5zdGVtLnVpLnByZWZlcmVuY2VzLlByZWZlcmVuY2VDb25zdGFudHMuU0lNVUxBVElPTl9USFJFQURTKTsNCisJCX0gZWxzZSBudW1fdGhyZWFkcyA9IDI7IC8vIEp1c3Qgc28gd2UgY2FuIHJ1biBpbnNpZGUganVuaXQgdGVzdA0KKwkJDQorCQlwYXJ0aXRpb25lci5zZXROdW1Qcm9jZXNzZXMobnVtX3RocmVhZHMpOw0KKwkJDQorCQkvLyBGaW5kIHRyaWdnZXJzIGFuZCBtYWtlIHN1cmUgdGhleSBhcmUgaW52b2tlZA0KKwkJZm9yKERlY29yYXRvciBkZWNvcmF0b3I6dGhpcy5nZXREZWNvcmF0b3JzKCkpIHsNCisJCQlpZihkZWNvcmF0b3IgaW5zdGFuY2VvZiBUcmlnZ2VyKSB7DQorCQkJCWRlY29yYXRvci51cGRhdGVMYWJlbHModGltZSwgdGltZURlbHRhLCBjeWNsZSk7DQorCQkJfQ0KKwkJfQkJDQorCQkNCisJCS8vIEZpcnN0IGluaXRpYWxpemUgdGhlIFkgYW5kIHRlbXAgbGFiZWwgdmFsdWVzIGZyb20gdGhlIGN1cnJlbnQNCisJCS8vIGxhYmVsIHZhbHVlcy4NCisJCQ0KKwkJZm9yKERlY29yYXRvciBkZWNvcmF0b3I6dGhpcy5nZXREZWNvcmF0b3JzKCkpIHsNCisJCQlFTGlzdDxEeW5hbWljTGFiZWw+YWxsTGFiZWxzID0gZGVjb3JhdG9yLmdldExhYmVsc1RvVXBkYXRlKCk7DQorCQkJZm9yIChmaW5hbCBJdGVyYXRvcjxEeW5hbWljTGFiZWw+IGN1cnJlbnRTdGF0ZUxhYmVsSXRlciA9IGFsbExhYmVscw0KKwkJCQkJLml0ZXJhdG9yKCk7IGN1cnJlbnRTdGF0ZUxhYmVsSXRlci5oYXNOZXh0KCk7KSB7DQorCQkJCWlmKGRlY29yYXRvciBpbnN0YW5jZW9mIEludGVncmF0aW9uRGVjb3JhdG9yKSB7DQorCQkJCQkvLyBJdCdzIGEgc3RhbmRhcmQgZGlzZWFzZSBtb2RlbCB3aXRoIGEgc3RhbmRhcmQgZGlzZWFzZSBtb2RlbCBsYWJlbA0KKwkJCQkJZmluYWwgSW50ZWdyYXRpb25MYWJlbCBpTGFiZWwgPSAoSW50ZWdyYXRpb25MYWJlbCkgY3VycmVudFN0YXRlTGFiZWxJdGVyLm5leHQoKTsNCisJCQkJCSgoSW50ZWdyYXRpb25MYWJlbFZhbHVlKWlMYWJlbC5nZXRQcm9iZVZhbHVlKCkpLnNldCgoSW50ZWdyYXRpb25MYWJlbFZhbHVlKWlMYWJlbC5nZXRDdXJyZW50VmFsdWUoKSk7DQorCQkJCQkoKEludGVncmF0aW9uTGFiZWxWYWx1ZSlpTGFiZWwuZ2V0VGVtcFZhbHVlKCkpLnNldCgoSW50ZWdyYXRpb25MYWJlbFZhbHVlKWlMYWJlbC5nZXRDdXJyZW50VmFsdWUoKSk7DQorCQkJCQkoKEludGVncmF0aW9uTGFiZWxWYWx1ZSlpTGFiZWwuZ2V0VGVtcFZhbHVlKCkpLnByZXBhcmVDeWNsZSgpOw0KKwkJCQkJKChJbnRlZ3JhdGlvbkxhYmVsVmFsdWUpaUxhYmVsLmdldFByb2JlVmFsdWUoKSkucHJlcGFyZUN5Y2xlKCk7DQorCQkJCX0gZWxzZSBjdXJyZW50U3RhdGVMYWJlbEl0ZXIubmV4dCgpOw0KKwkJCX0NCisJCX0NCisJCQ0KKwkJaWYoam9icyA9PSBudWxsIHx8IGpvYnMubGVuZ3RoICE9IG51bV90aHJlYWRzKSB7DQorCQkJLy8gSW5pdGlhbGl6ZSB0aGUgam9icyBpZiBub3QgZG9uZSB5ZXQgb3Igb2YgdGhlIG51bWJlciBvZiB0aHJlYWRzIGNoYW5nZXMNCisJCQlqb2JzID0gbmV3IEZkSm9iW251bV90aHJlYWRzXTsNCisJDQorCQkJZm9yKGludCBpPTA7aTxudW1fdGhyZWFkczsrK2kpIHsNCisJCQkJZmluYWwgc2hvcnQgdGhyZWFkbnVtID0gKHNob3J0KWk7DQorCQkJCWpvYnNbaV0gPSBuZXcgRmRKb2IoIkZpbml0ZSBEaWZmZXJlbmNlIFdvcmtlciAiK2ksIHRocmVhZG51bSwgdGhpcyk7DQorCQkJfSAvLyBGb3IgZWFjaCBqb2INCisJCX0gLy8gSWYgbm90IGluaXRpYWxpemVkDQorCQkNCisJCXJlY3Vyc2l2ZVN0ZXAodGltZSwgdGltZURlbHRhLCBjeWNsZSwgMS4wKTsNCisJCQkNCisJCXJldHVybiB0cnVlOw0KKwl9DQorCQ0KKwlwcm90ZWN0ZWQgdm9pZCByZWN1cnNpdmVTdGVwKFNURU1UaW1lIHRpbWUsIGxvbmcgdGltZURlbHRhLCBpbnQgY3ljbGUsIGRvdWJsZSBzY2FsaW5nKSB7DQorCQkvLyBDb21wdXRlIGRlbHRhcw0KKwkJZm9yKEZkSm9iIGo6am9icykgew0KKwkJCWouY3ljbGUgPSBjeWNsZTsNCisJCQlqLnRpbWUgPSB0aW1lOw0KKwkJCWoudGltZURlbHRhID0gdGltZURlbHRhOw0KKwkJCWouc3RlcCA9IEZkSm9iLkNPTVBVVEVfREVMVEFTOw0KKwkJCWouc2NoZWR1bGUoKTsNCisJCX0JCQkNCisJCQ0KKwkJZm9yKEZkSm9iIGogOiBqb2JzKSB7DQorCQkJdHJ5IHsNCisJCQkJai5qb2luKCk7DQorCQkJfSBjYXRjaChJbnRlcnJ1cHRlZEV4Y2VwdGlvbiBpZSkgew0KKwkJCQlBY3RpdmF0b3IubG9nRXJyb3IoaWUuZ2V0TWVzc2FnZSgpLCBpZSk7DQorCQkJfQ0KKwkJfQ0KKwkJDQorCQkvLyBTY2FsZSBkZWx0YXMNCisJCXNjYWxlQWxsRGVsdGFzKHNjYWxpbmcpOw0KKwkJDQorCQkvLyBDaGVjayBkZWx0YXMgZm9yIGFkanVzdG1lbnQNCisJCWZvcihGZEpvYiBqOmpvYnMpIHsNCisJCQlqLnN0ZXAgPSBGZEpvYi5DSEVDS19ERUxUQVM7DQorCQkJai5zY2hlZHVsZSgpOw0KKwkJfQkJCQ0KKwkJDQorCQlmb3IoRmRKb2IgaiA6IGpvYnMpIHsNCisJCQl0cnkgew0KKwkJCQlqLmpvaW4oKTsNCisJCQl9IGNhdGNoKEludGVycnVwdGVkRXhjZXB0aW9uIGllKSB7DQorCQkJCUFjdGl2YXRvci5sb2dFcnJvcihpZS5nZXRNZXNzYWdlKCksIGllKTsNCisJCQl9DQorCQl9DQorCQkNCisJCWRvdWJsZSBmYWN0b3IgPSAxLjA7DQorCQkNCisJCWZvciAoRmRKb2IgaiA6IGpvYnMpIHsNCisJCQlmYWN0b3IgPSBNYXRoLm1pbihmYWN0b3IsIERvdWJsZS5wYXJzZURvdWJsZShqLmdldFJlc3VsdCgpLmdldE1lc3NhZ2UoKSkpOw0KKwkJfQ0KKwkJDQorCQlpZiAoZmFjdG9yID09IDEuMCkgew0KKwkJCS8vIEFwcGx5IGRlbHRhcwkNCisJCQlmb3IoRmRKb2Igajpqb2JzKSB7DQorCQkJCWouc3RlcCA9IEZkSm9iLkFQUExZX0RFTFRBUzsNCisJCQkJai5zY2hlZHVsZSgpOw0KKwkJCX0NCisJCQkNCisJCQlmb3IoRmRKb2IgaiA6IGpvYnMpIHsNCisJCQkJdHJ5IHsNCisJCQkJCWouam9pbigpOw0KKwkJCQl9IGNhdGNoKEludGVycnVwdGVkRXhjZXB0aW9uIGllKSB7DQorCQkJCQlBY3RpdmF0b3IubG9nRXJyb3IoaWUuZ2V0TWVzc2FnZSgpLCBpZSk7DQorCQkJCX0NCisJCQl9DQorCQl9IGVsc2UgaWYoZmFjdG9yID4gMCl7DQorCQkJLy8gU2NhbGUgdG8gYXZvaWQgZ29pbmcgbmVnYXRpdmUNCisJCQlzY2FsZUFsbERlbHRhcyhmYWN0b3IpOw0KKwkJCQ0KKwkJCS8vIEFwcGx5IGRlbHRhcw0KKwkJCWZvcihGZEpvYiBqOmpvYnMpIHsNCisJCQkJai5zdGVwID0gRmRKb2IuQVBQTFlfREVMVEFTOw0KKwkJCQlqLnNjaGVkdWxlKCk7DQorCQkJfQkNCisJCQkNCisJCQlmb3IoRmRKb2IgaiA6IGpvYnMpIHsNCisJCQkJdHJ5IHsNCisJCQkJCWouam9pbigpOw0KKwkJCQl9IGNhdGNoKEludGVycnVwdGVkRXhjZXB0aW9uIGllKSB7DQorCQkJCQlBY3RpdmF0b3IubG9nRXJyb3IoaWUuZ2V0TWVzc2FnZSgpLCBpZSk7DQorCQkJCX0NCisJCQl9DQorCQkJDQorCQkJLy8gQ2FsbCB0aGlzIG1ldGhvZCBhZ2FpbiBmb3IgdGhlIHJlc3Qgb2YgdGhlIHRpbWUgc3RlcA0KKwkJCWZvcihEZWNvcmF0b3IgZGVjb3JhdG9yOnRoaXMuZ2V0RGVjb3JhdG9ycygpKSB7DQorCQkJCUVMaXN0PER5bmFtaWNMYWJlbD5hbGxMYWJlbHMgPSBkZWNvcmF0b3IuZ2V0TGFiZWxzVG9VcGRhdGUoKTsNCisJCQkJZm9yIChmaW5hbCBJdGVyYXRvcjxEeW5hbWljTGFiZWw+IGN1cnJlbnRTdGF0ZUxhYmVsSXRlciA9IGFsbExhYmVscw0KKwkJCQkJCS5pdGVyYXRvcigpOyBjdXJyZW50U3RhdGVMYWJlbEl0ZXIuaGFzTmV4dCgpOykgew0KKwkJCQkJaWYoZGVjb3JhdG9yIGluc3RhbmNlb2YgSW50ZWdyYXRpb25EZWNvcmF0b3IpIHsNCisJCQkJCQkvLyBJdCdzIGEgc3RhbmRhcmQgZGlzZWFzZSBtb2RlbCB3aXRoIGEgc3RhbmRhcmQgZGlzZWFzZSBtb2RlbCBsYWJlbA0KKwkJCQkJCWZpbmFsIEludGVncmF0aW9uTGFiZWwgaUxhYmVsID0gKEludGVncmF0aW9uTGFiZWwpIGN1cnJlbnRTdGF0ZUxhYmVsSXRlci5uZXh0KCk7DQorCQkJCQkJKChJbnRlZ3JhdGlvbkxhYmVsVmFsdWUpaUxhYmVsLmdldFByb2JlVmFsdWUoKSkuc2V0KChJbnRlZ3JhdGlvbkxhYmVsVmFsdWUpaUxhYmVsLmdldE5leHRWYWx1ZSgpKTsNCisJCQkJCQkoKEludGVncmF0aW9uTGFiZWxWYWx1ZSlpTGFiZWwuZ2V0VGVtcFZhbHVlKCkpLnNldCgoSW50ZWdyYXRpb25MYWJlbFZhbHVlKWlMYWJlbC5nZXROZXh0VmFsdWUoKSk7DQorCQkJCQl9IGVsc2UgY3VycmVudFN0YXRlTGFiZWxJdGVyLm5leHQoKTsNCisJCQkJfQ0KKwkJCX0NCisJCQkNCisJCQlyZWN1cnNpdmVTdGVwKHRpbWUsIHRpbWVEZWx0YSwgY3ljbGUsICgxLWZhY3Rvcikqc2NhbGluZyk7DQorCQl9IGVsc2Ugew0KKwkJCUFjdGl2YXRvci5sb2dFcnJvcigiQXR0ZW1wdGVkIGZpbml0ZSBkaWZmZXJlbmNlIHN0ZXAgcmVzY2FsaW5nIGJ1dCB0aGUgc2NhbGluZyBmYWN0b3Igd2FzIDAiLCBuZXcgRXhjZXB0aW9uKCkpOw0KKwkJfQ0KKwl9DQorCQ0KKwlwcm90ZWN0ZWQgdm9pZCBjb21wdXRlRGVsdGFzU3RlcChTVEVNVGltZSB0aW1lLCBsb25nIHRpbWVEZWx0YSwgc2hvcnQgdGhyZWFkbnVtKSB7DQorCQkvLyBOb3cgZ2l2ZSBlYWNoIGRlY29yYXRvciBhIGNoYW5jZSB0byB1cGRhdGUgaXRzIGR5bmFtaWMNCisJCS8vIGxhYmVscyBpbiB0aGUgY2Fub25pY2FsIGdyYXBoLCBidXQgb25seSBpZiBpdCBpcyBlbmFibGVkLiBBDQorCQkvLyBEZWNvcmF0b3IgbWlnaHQgbm90IGJlIGVuYWJsZWQgaWYgaXQgaXMgdGhlIGFjdGlvbiBvZiBhIFRyaWdnZXINCisJCS8vIGFuZCB0aGUgUHJlZGljYXRlIG9mIHRoZSB0cmlnZ2VyIGlzIGZhbHNlLg0KKwkJRUxpc3Q8SW50ZWdyYXRpb25EZWNvcmF0b3I+IGlEZWNvcmF0b3JzID0gbmV3IEJhc2ljRUxpc3Q8SW50ZWdyYXRpb25EZWNvcmF0b3I+KCk7DQorCQlmb3IgKGZpbmFsIEl0ZXJhdG9yPERlY29yYXRvcj4gZGVjb3JhdG9ySXRlciA9IHRoaXMNCisJCQkJLmdldERlY29yYXRvcnMoKS5pdGVyYXRvcigpOyBkZWNvcmF0b3JJdGVyLmhhc05leHQoKTspIHsNCisJCQlmaW5hbCBEZWNvcmF0b3IgZGVjb3JhdG9yID0gZGVjb3JhdG9ySXRlci5uZXh0KCk7DQorCQkJLy8gSXMgdGhlIGRlY29yYXRvciBlbmFibGVkPw0KKwkJCWlmIChkZWNvcmF0b3IuaXNFbmFibGVkKCkgJiYgZGVjb3JhdG9yIGluc3RhbmNlb2YgSW50ZWdyYXRpb25EZWNvcmF0b3IpIGlEZWNvcmF0b3JzLmFkZCgoSW50ZWdyYXRpb25EZWNvcmF0b3IpZGVjb3JhdG9yKTsNCisJCX0NCisJCQ0KKwkJZm9yKEludGVncmF0aW9uRGVjb3JhdG9yIGltb2RlbDppRGVjb3JhdG9ycykNCisJCQlpbW9kZWwuY2FsY3VsYXRlRGVsdGEodGltZSwgdGltZURlbHRhLCBwYXJ0aXRpb25lci5wYXJ0aXRpb25EZWNvcmF0b3JMYWJlbHMoKERlY29yYXRvcilpbW9kZWwsIHRocmVhZG51bSkpOw0KKwkJZm9yKEludGVncmF0aW9uRGVjb3JhdG9yIGltb2RlbDppRGVjb3JhdG9ycykNCisJCQlpbW9kZWwuYXBwbHlFeHRlcm5hbERlbHRhcyh0aW1lLCB0aW1lRGVsdGEsIHBhcnRpdGlvbmVyLnBhcnRpdGlvbkRlY29yYXRvckxhYmVscygoRGVjb3JhdG9yKWltb2RlbCwgdGhyZWFkbnVtKSk7DQorCX0NCisJDQorCXByb3RlY3RlZCBkb3VibGUgY2hlY2tEZWx0YXNTdGVwKHNob3J0IHRocmVhZG51bSkgew0KKwkJRUxpc3Q8SW50ZWdyYXRpb25EZWNvcmF0b3I+IGlEZWNvcmF0b3JzID0gbmV3IEJhc2ljRUxpc3Q8SW50ZWdyYXRpb25EZWNvcmF0b3I+KCk7DQorCQlmb3IgKGZpbmFsIEl0ZXJhdG9yPERlY29yYXRvcj4gZGVjb3JhdG9ySXRlciA9IHRoaXMNCisJCQkJLmdldERlY29yYXRvcnMoKS5pdGVyYXRvcigpOyBkZWNvcmF0b3JJdGVyLmhhc05leHQoKTspIHsNCisJCQlmaW5hbCBEZWNvcmF0b3IgZGVjb3JhdG9yID0gZGVjb3JhdG9ySXRlci5uZXh0KCk7DQorCQkJLy8gSXMgdGhlIGRlY29yYXRvciBlbmFibGVkPw0KKwkJCWlmIChkZWNvcmF0b3IuaXNFbmFibGVkKCkgJiYgZGVjb3JhdG9yIGluc3RhbmNlb2YgSW50ZWdyYXRpb25EZWNvcmF0b3IpIGlEZWNvcmF0b3JzLmFkZCgoSW50ZWdyYXRpb25EZWNvcmF0b3IpZGVjb3JhdG9yKTsNCisJCX0NCisJCQ0KKwkJZG91YmxlIGZhY3RvciA9IDEuMDsNCisJCQ0KKwkJZm9yKEludGVncmF0aW9uRGVjb3JhdG9yIGltb2RlbDppRGVjb3JhdG9ycykNCisJCQlmYWN0b3IgPSBNYXRoLm1pbihmYWN0b3IsIGdldERlbHRhQWRqdXN0bWVudCgoRGVjb3JhdG9yKWltb2RlbCwgdGhyZWFkbnVtKSk7DQorCQkJCQ0KKwkJcmV0dXJuIGZhY3RvcjsNCisJfQ0KKwkNCisJcHJvdGVjdGVkIHZvaWQgYXBwbHlEZWx0YXNTdGVwKHNob3J0IHRocmVhZG51bSkgew0KKwkJRUxpc3Q8SW50ZWdyYXRpb25EZWNvcmF0b3I+IGlEZWNvcmF0b3JzID0gbmV3IEJhc2ljRUxpc3Q8SW50ZWdyYXRpb25EZWNvcmF0b3I+KCk7DQorCQlmb3IgKGZpbmFsIEl0ZXJhdG9yPERlY29yYXRvcj4gZGVjb3JhdG9ySXRlciA9IHRoaXMNCisJCQkJLmdldERlY29yYXRvcnMoKS5pdGVyYXRvcigpOyBkZWNvcmF0b3JJdGVyLmhhc05leHQoKTspIHsNCisJCQlmaW5hbCBEZWNvcmF0b3IgZGVjb3JhdG9yID0gZGVjb3JhdG9ySXRlci5uZXh0KCk7DQorCQkJLy8gSXMgdGhlIGRlY29yYXRvciBlbmFibGVkPw0KKwkJCWlmIChkZWNvcmF0b3IuaXNFbmFibGVkKCkgJiYgZGVjb3JhdG9yIGluc3RhbmNlb2YgSW50ZWdyYXRpb25EZWNvcmF0b3IpIGlEZWNvcmF0b3JzLmFkZCgoSW50ZWdyYXRpb25EZWNvcmF0b3IpZGVjb3JhdG9yKTsNCisJCX0NCisJCQ0KKwkJZm9yKEludGVncmF0aW9uRGVjb3JhdG9yIGltb2RlbDppRGVjb3JhdG9ycykNCisJCQl1cGRhdGVTdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVscygoRGVjb3JhdG9yKWltb2RlbCwgdGhyZWFkbnVtKTsNCisJfQ0KKwkNCisJcHJvdGVjdGVkIHZvaWQgc2NhbGVBbGxEZWx0YXMoZG91YmxlIHNjYWxpbmcpIHsNCisJCWZvcihEZWNvcmF0b3IgZGVjb3JhdG9yOnRoaXMuZ2V0RGVjb3JhdG9ycygpKSB7DQorCQkJRUxpc3Q8RHluYW1pY0xhYmVsPmFsbExhYmVscyA9IGRlY29yYXRvci5nZXRMYWJlbHNUb1VwZGF0ZSgpOw0KKwkJCWZvciAoZmluYWwgSXRlcmF0b3I8RHluYW1pY0xhYmVsPiBjdXJyZW50U3RhdGVMYWJlbEl0ZXIgPSBhbGxMYWJlbHMNCisJCQkJCS5pdGVyYXRvcigpOyBjdXJyZW50U3RhdGVMYWJlbEl0ZXIuaGFzTmV4dCgpOykgew0KKwkJCQlpZihkZWNvcmF0b3IgaW5zdGFuY2VvZiBJbnRlZ3JhdGlvbkRlY29yYXRvcikgew0KKwkJCQkJLy8gSXQncyBhIHN0YW5kYXJkIGRpc2Vhc2UgbW9kZWwgd2l0aCBhIHN0YW5kYXJkIGRpc2Vhc2UgbW9kZWwgbGFiZWwNCisJCQkJCWZpbmFsIEludGVncmF0aW9uTGFiZWwgaUxhYmVsID0gKEludGVncmF0aW9uTGFiZWwpIGN1cnJlbnRTdGF0ZUxhYmVsSXRlci5uZXh0KCk7DQorCQkJCQkoKEludGVncmF0aW9uTGFiZWxWYWx1ZSlpTGFiZWwuZ2V0RGVsdGFWYWx1ZSgpKS5zY2FsZShzY2FsaW5nKTsNCisJCQkJfSBlbHNlIGN1cnJlbnRTdGF0ZUxhYmVsSXRlci5uZXh0KCk7DQorCQkJfQ0KKwkJfQ0KKwl9DQorCQ0KKwlwcm90ZWN0ZWQgZG91YmxlIGdldERlbHRhQWRqdXN0bWVudChEZWNvcmF0b3IgbW9kZWwsIHNob3J0IHRocmVhZG51bSkgew0KKwkJRUxpc3Q8RHluYW1pY0xhYmVsPiBteUxhYmVscyA9IHBhcnRpdGlvbmVyLnBhcnRpdGlvbkRlY29yYXRvckxhYmVscyhtb2RlbCwgdGhyZWFkbnVtKTsNCisJCWRvdWJsZSBmYWN0b3IgPSAxLjA7DQorCQ0KKwkJZm9yIChmaW5hbCBJdGVyYXRvcjxEeW5hbWljTGFiZWw+IGN1cnJlbnRTdGF0ZUxhYmVsSXRlciA9IG15TGFiZWxzDQorCQkJCS5pdGVyYXRvcigpOyBjdXJyZW50U3RhdGVMYWJlbEl0ZXIuaGFzTmV4dCgpOykgew0KKwkJCWZpbmFsIEludGVncmF0aW9uTGFiZWwgbGFiZWwgPSAoSW50ZWdyYXRpb25MYWJlbCkgY3VycmVudFN0YXRlTGFiZWxJdGVyLm5leHQoKTsNCisJDQorCQkJSW50ZWdyYXRpb25MYWJlbFZhbHVlIGRlbHRhID0gKEludGVncmF0aW9uTGFiZWxWYWx1ZSlsYWJlbC5nZXREZWx0YVZhbHVlKCk7DQorCQkJZmFjdG9yID0gTWF0aC5taW4oZmFjdG9yLCBkZWx0YS5jb21wdXRlRGVsdGFBZGp1c3RtZW50KChJbnRlZ3JhdGlvbkxhYmVsVmFsdWUpbGFiZWwuZ2V0VGVtcFZhbHVlKCkpKTsNCisJCX0NCisJCQ0KKwkJcmV0dXJuIGZhY3RvcjsNCisJfQ0KKwkNCisJcHJvdGVjdGVkIHZvaWQgdXBkYXRlU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbHMoRGVjb3JhdG9yIG1vZGVsLCBzaG9ydCB0aHJlYWRudW0pIHsNCisJCQ0KKwkJRUxpc3Q8RHluYW1pY0xhYmVsPiBteUxhYmVscyA9IHBhcnRpdGlvbmVyLnBhcnRpdGlvbkRlY29yYXRvckxhYmVscyhtb2RlbCwgdGhyZWFkbnVtKTsNCisJCQ0KKwkJSW50ZWdyYXRpb25EZWNvcmF0b3IgaW1vZGVsID0gKEludGVncmF0aW9uRGVjb3JhdG9yKW1vZGVsOw0KKwkJDQorCQlpbnQgbnVtTGFiZWxzID0gbXlMYWJlbHMuc2l6ZSgpOw0KKwkJaW50IHNldFByb2dyZXNzRXZlcnlOdGhOb2RlID0gbnVtX3RocmVhZHMgKiBudW1MYWJlbHMvKE1BWF9QUk9HUkVTU19SRVBPUlRTKTsNCisJCWlmKHNldFByb2dyZXNzRXZlcnlOdGhOb2RlID09IDApIHNldFByb2dyZXNzRXZlcnlOdGhOb2RlID0gMTsNCisJCWludCBuPTA7DQorCQkvLyBJbml0aWFsaXplIHRoZSBuZXh0IHZhbHVlIGZyb20gdGhlIGN1cnJlbnQgdmFsdWUgYW5kIGFkZCB0aGUgZGVsdGENCisJCWZvciAoZmluYWwgSXRlcmF0b3I8RHluYW1pY0xhYmVsPiBjdXJyZW50U3RhdGVMYWJlbEl0ZXIgPSBteUxhYmVscw0KKwkJCQkuaXRlcmF0b3IoKTsgY3VycmVudFN0YXRlTGFiZWxJdGVyLmhhc05leHQoKTspIHsNCisJCQlmaW5hbCBJbnRlZ3JhdGlvbkxhYmVsIGxhYmVsID0gKEludGVncmF0aW9uTGFiZWwpIGN1cnJlbnRTdGF0ZUxhYmVsSXRlci5uZXh0KCk7DQorCQkJTGFiZWxWYWx1ZSBuZXh0U3RhdGUgPSBsYWJlbC5nZXROZXh0VmFsdWUoKTsNCisJCQkNCisJCQlMYWJlbFZhbHVlIGRlbHRhID0gKChJbnRlZ3JhdGlvbkxhYmVsKWxhYmVsKS5nZXREZWx0YVZhbHVlKCk7DQorCQkJLy8gRm9yIGZpbml0ZSBkaWZmZXJlbmNlLCB3ZSBuZWVkIHRvIG1ha2Ugc3VyZSB3ZSBkb24ndA0KKwkJCS8vIG1vdmUgdG9vIG1hbnkgcGVvcGxlIGZyb20gb25lIHN0YXRlIHRvIGFub3RoZXINCisJCQkoKEludGVncmF0aW9uTGFiZWxWYWx1ZSlkZWx0YSkuYXZvaWROZWdhdGl2ZSgoSW50ZWdyYXRpb25MYWJlbFZhbHVlKWxhYmVsLmdldFByb2JlVmFsdWUoKSk7DQorCQkJDQorCQkJbmV4dFN0YXRlLnJlc2V0KCk7DQorCQkJLy8gQWRkIGRlbHRhLCB0aGlzIHdpbGwgYWxzbyBhZGQgdGhlIGluY2lkZW5jZQ0KKwkJCSgoSW50ZWdyYXRpb25MYWJlbFZhbHVlKW5leHRTdGF0ZSkuYWRkKChJbnRlZ3JhdGlvbkxhYmVsVmFsdWUpZGVsdGEpOw0KKwkJCQ0KKwkJCS8vIEFkZCB0aGUgb3JpZ2luYWwgdmFsdWUuIFVzZSB0aGUgdGVtcCB2YWx1ZSBzaW5jZSB0aGUgaW5jaWRlbmNlIGhhcyBiZWVuIHJlc2V0IG9uIGl0IGluIHRoZSBwcmVwYXJlQ3ljbGUoKSBjYWxsDQorCQkJKChJbnRlZ3JhdGlvbkxhYmVsVmFsdWUpbmV4dFN0YXRlKS5hZGQoKEludGVncmF0aW9uTGFiZWxWYWx1ZSkoKEludGVncmF0aW9uTGFiZWwpbGFiZWwpLmdldFRlbXBWYWx1ZSgpKTsNCisNCisJCQkvLyBEbyBhbnkgbW9kZWwgc3BlY2lmaWMgd29yayBmb3IgaW5zdGFuY2UgYWRkIG5vaXNlDQorCQkJaW1vZGVsLmRvTW9kZWxTcGVjaWZpY0FkanVzdG1lbnRzKChMYWJlbFZhbHVlKW5leHRTdGF0ZSk7DQorCQkJDQorCQkJLy8gVGhlIG5leHQgdmFsdWUgaXMgdmFsaWQgbm93Lg0KKwkJCWxhYmVsLnNldE5leHRWYWx1ZVZhbGlkKHRydWUpOw0KKwkJCS8vIE5vdyBhZGQgaW4gdGhlIHBvcHVsYXRpb24gc28gd2UgY2FuIGNvbXB1dGUgdGhlIHJlY2lwcm9jYWwNCisJCQkvLyBuZXh0IGN5Y2xlLg0KKy8vCQkJYWRkVG9Ub3RhbFBvcHVsYXRpb25Db3VudChuZXh0U3RhdGUuZ2V0UG9wdWxhdGlvbkNvdW50KCkpOw0KKwkJDQorCQkJZG91YmxlIHByb2dyZXNzID0gKGRvdWJsZSluLyhkb3VibGUpbnVtTGFiZWxzOw0KKwkJCWpvYnNbdGhyZWFkbnVtXS5zZXRQcm9ncmVzcyhwcm9ncmVzcyk7DQorCQkJaWYobiVzZXRQcm9ncmVzc0V2ZXJ5TnRoTm9kZT09MCkgew0KKwkJCQkvLyBHZXQgdGhlIHByb2dyZXNzIGZvciBhbGwgdGhyZWFkcw0KKwkJCQlmb3IoaW50IGk9MDtpPG51bV90aHJlYWRzOysraSkgaWYoaSE9dGhyZWFkbnVtICYmIGpvYnNbaV0gIT0gbnVsbCkgcHJvZ3Jlc3MrPWpvYnNbaV0uZ2V0UHJvZ3Jlc3MoKTsNCisJCQkJcHJvZ3Jlc3MgLz0gbnVtX3RocmVhZHM7DQorCQkJCW1vZGVsLnNldFByb2dyZXNzKHByb2dyZXNzKTsNCisJCQl9DQorCQkJKytuOw0KKwkJCQ0KKwkJfQ0KKwkJLy8gRG9uZQ0KKy8vCQl0aGlzLnNldFByb2dyZXNzKDEuMCk7DQorCX0NCisJDQorCS8qKg0KKwkgKiBSZXNldCB0aGUgc29sdmVyDQorCSAqIEBnZW5lcmF0ZWQgTk9UDQorCSAqLw0KKwlAT3ZlcnJpZGUNCisJcHVibGljIHZvaWQgcmVzZXQoKSB7DQorCQl0aGlzLnNldEluaXRpYWxpemVkKGZhbHNlKTsNCisJfQ0KKwkNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlAT3ZlcnJpZGUNCisJcHJvdGVjdGVkIEVDbGFzcyBlU3RhdGljQ2xhc3MoKSB7DQorCQlyZXR1cm4gRmRQYWNrYWdlLkxpdGVyYWxzLkZJTklURV9ESUZGRVJFTkNFOw0KKwl9DQorDQorfSAvL0Zpbml0ZURpZmZlcmVuY2VJbXBsDQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnNvbHZlcnMuZmQvc3JjL29yZy9lY2xpcHNlL3N0ZW0vc29sdmVycy9mZC9wcm92aWRlci9GZEVkaXRQbHVnaW4uamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5zb2x2ZXJzLmZkL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3NvbHZlcnMvZmQvcHJvdmlkZXIvRmRFZGl0UGx1Z2luLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDA3NWQ0ZAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5zb2x2ZXJzLmZkL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3NvbHZlcnMvZmQvcHJvdmlkZXIvRmRFZGl0UGx1Z2luLmphdmEKQEAgLTAsMCArMSwxMDMgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5zb2x2ZXJzLmZkLnByb3ZpZGVyOw0KKw0KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorICogQ29weXJpZ2h0IChjKSAyMDA5IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLg0KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMNCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjANCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdA0KKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sDQorICoNCisgKiBDb250cmlidXRvcnM6DQorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbg0KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KKw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLkVNRlBsdWdpbjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlJlc291cmNlTG9jYXRvcjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnByb3ZpZGVyLkVjb3JlRWRpdFBsdWdpbjsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5wcm92aWRlci5Db3JlRWRpdFBsdWdpbjsNCisNCisNCisvKioNCisgKiBUaGlzIGlzIHRoZSBjZW50cmFsIHNpbmdsZXRvbiBmb3IgdGhlIEZkIGVkaXQgcGx1Z2luLg0KKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorICogQGdlbmVyYXRlZA0KKyAqLw0KK0BTdXBwcmVzc1dhcm5pbmdzKCJzeW50aGV0aWMtYWNjZXNzIikNCitwdWJsaWMgZmluYWwgY2xhc3MgRmRFZGl0UGx1Z2luIGV4dGVuZHMgRU1GUGx1Z2luIHsNCisJLyoqDQorCSAqIEtlZXAgdHJhY2sgb2YgdGhlIHNpbmdsZXRvbi4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBzdGF0aWMgZmluYWwgRmRFZGl0UGx1Z2luIElOU1RBTkNFID0gbmV3IEZkRWRpdFBsdWdpbigpOw0KKw0KKwkvKioNCisJICogS2VlcCB0cmFjayBvZiB0aGUgc2luZ2xldG9uLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJpdmF0ZSBzdGF0aWMgSW1wbGVtZW50YXRpb24gcGx1Z2luOw0KKw0KKwkvKioNCisJICogQ3JlYXRlIHRoZSBpbnN0YW5jZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBGZEVkaXRQbHVnaW4oKSB7DQorCQlzdXBlcg0KKwkJICAobmV3IFJlc291cmNlTG9jYXRvciBbXSB7DQorCQkgICAgIENvcmVFZGl0UGx1Z2luLklOU1RBTkNFLA0KKwkJICAgICBFY29yZUVkaXRQbHVnaW4uSU5TVEFOQ0UsDQorCQkgICB9KTsNCisJfQ0KKw0KKwkvKioNCisJICogUmV0dXJucyB0aGUgc2luZ2xldG9uIGluc3RhbmNlIG9mIHRoZSBFY2xpcHNlIHBsdWdpbi4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEByZXR1cm4gdGhlIHNpbmdsZXRvbiBpbnN0YW5jZS4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJQE92ZXJyaWRlDQorCXB1YmxpYyBSZXNvdXJjZUxvY2F0b3IgZ2V0UGx1Z2luUmVzb3VyY2VMb2NhdG9yKCkgew0KKwkJcmV0dXJuIHBsdWdpbjsNCisJfQ0KKw0KKwkvKioNCisJICogUmV0dXJucyB0aGUgc2luZ2xldG9uIGluc3RhbmNlIG9mIHRoZSBFY2xpcHNlIHBsdWdpbi4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEByZXR1cm4gdGhlIHNpbmdsZXRvbiBpbnN0YW5jZS4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIHN0YXRpYyBJbXBsZW1lbnRhdGlvbiBnZXRQbHVnaW4oKSB7DQorCQlyZXR1cm4gcGx1Z2luOw0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGUgYWN0dWFsIGltcGxlbWVudGF0aW9uIG9mIHRoZSBFY2xpcHNlIDxiPlBsdWdpbjwvYj4uDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgc3RhdGljIGNsYXNzIEltcGxlbWVudGF0aW9uIGV4dGVuZHMgRWNsaXBzZVBsdWdpbiB7DQorCQkvKioNCisJCSAqIENyZWF0ZXMgYW4gaW5zdGFuY2UuDQorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCQkgKiBAZ2VuZXJhdGVkDQorCQkgKi8NCisJCXB1YmxpYyBJbXBsZW1lbnRhdGlvbigpIHsNCisJCQlzdXBlcigpOw0KKw0KKwkJCS8vIFJlbWVtYmVyIHRoZSBzdGF0aWMgaW5zdGFuY2UuDQorCQkJLy8NCisJCQlwbHVnaW4gPSB0aGlzOw0KKwkJfQ0KKwl9DQorDQorfQ0KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5zb2x2ZXJzLmZkL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3NvbHZlcnMvZmQvcHJvdmlkZXIvRmRJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeS5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnNvbHZlcnMuZmQvc3JjL29yZy9lY2xpcHNlL3N0ZW0vc29sdmVycy9mZC9wcm92aWRlci9GZEl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTk0OGMwZAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5zb2x2ZXJzLmZkL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3NvbHZlcnMvZmQvcHJvdmlkZXIvRmRJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeS5qYXZhCkBAIC0wLDAgKzEsMjA2IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uc29sdmVycy5mZC5wcm92aWRlcjsNCisNCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyAqIENvcHlyaWdodCAoYykgMjAwOSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4NCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzDQorICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wDQorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQNCisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbA0KKyAqDQorICogQ29udHJpYnV0b3JzOg0KKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24NCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCisNCitpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsNCitpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247DQorDQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LkFkYXB0ZXI7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpZXI7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkNoYW5nZU5vdGlmaWVyOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5Db21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5Ow0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5Db21wb3NlZEFkYXB0ZXJGYWN0b3J5Ow0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JQ2hhbmdlTm90aWZpZXI7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklEaXNwb3NhYmxlOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JRWRpdGluZ0RvbWFpbkl0ZW1Qcm92aWRlcjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1MYWJlbFByb3ZpZGVyOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbVByb3BlcnR5U291cmNlOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JTm90aWZ5Q2hhbmdlZExpc3RlbmVyOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JU3RydWN0dXJlZEl0ZW1Db250ZW50UHJvdmlkZXI7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklUcmVlSXRlbUNvbnRlbnRQcm92aWRlcjsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5zb2x2ZXJzLmZkLnV0aWwuRmRBZGFwdGVyRmFjdG9yeTsNCisNCisvKioNCisgKiBUaGlzIGlzIHRoZSBmYWN0b3J5IHRoYXQgaXMgdXNlZCB0byBwcm92aWRlIHRoZSBpbnRlcmZhY2VzIG5lZWRlZCB0byBzdXBwb3J0IFZpZXdlcnMuDQorICogVGhlIGFkYXB0ZXJzIGdlbmVyYXRlZCBieSB0aGlzIGZhY3RvcnkgY29udmVydCBFTUYgYWRhcHRlciBub3RpZmljYXRpb25zIGludG8gY2FsbHMgdG8ge0BsaW5rICNmaXJlTm90aWZ5Q2hhbmdlZCBmaXJlTm90aWZ5Q2hhbmdlZH0uDQorICogVGhlIGFkYXB0ZXJzIGFsc28gc3VwcG9ydCBFY2xpcHNlIHByb3BlcnR5IHNoZWV0cy4NCisgKiBOb3RlIHRoYXQgbW9zdCBvZiB0aGUgYWRhcHRlcnMgYXJlIHNoYXJlZCBhbW9uZyBtdWx0aXBsZSBpbnN0YW5jZXMuDQorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisgKiBAZ2VuZXJhdGVkDQorICovDQorcHVibGljIGNsYXNzIEZkSXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkgZXh0ZW5kcyBGZEFkYXB0ZXJGYWN0b3J5IGltcGxlbWVudHMgQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSwgSUNoYW5nZU5vdGlmaWVyLCBJRGlzcG9zYWJsZSB7DQorCS8qKg0KKwkgKiBUaGlzIGtlZXBzIHRyYWNrIG9mIHRoZSByb290IGFkYXB0ZXIgZmFjdG9yeSB0aGF0IGRlbGVnYXRlcyB0byB0aGlzIGFkYXB0ZXIgZmFjdG9yeS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCBDb21wb3NlZEFkYXB0ZXJGYWN0b3J5IHBhcmVudEFkYXB0ZXJGYWN0b3J5Ow0KKw0KKwkvKioNCisJICogVGhpcyBpcyB1c2VkIHRvIGltcGxlbWVudCB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUNoYW5nZU5vdGlmaWVyfS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCBJQ2hhbmdlTm90aWZpZXIgY2hhbmdlTm90aWZpZXIgPSBuZXcgQ2hhbmdlTm90aWZpZXIoKTsNCisNCisJLyoqDQorCSAqIFRoaXMga2VlcHMgdHJhY2sgb2YgYWxsIHRoZSBzdXBwb3J0ZWQgdHlwZXMgY2hlY2tlZCBieSB7QGxpbmsgI2lzRmFjdG9yeUZvclR5cGUgaXNGYWN0b3J5Rm9yVHlwZX0uDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgQ29sbGVjdGlvbjxPYmplY3Q+IHN1cHBvcnRlZFR5cGVzID0gbmV3IEFycmF5TGlzdDxPYmplY3Q+KCk7DQorDQorCS8qKg0KKwkgKiBUaGlzIGNvbnN0cnVjdHMgYW4gaW5zdGFuY2UuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgRmRJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSgpIHsNCisJCXN1cHBvcnRlZFR5cGVzLmFkZChJRWRpdGluZ0RvbWFpbkl0ZW1Qcm92aWRlci5jbGFzcyk7DQorCQlzdXBwb3J0ZWRUeXBlcy5hZGQoSVN0cnVjdHVyZWRJdGVtQ29udGVudFByb3ZpZGVyLmNsYXNzKTsNCisJCXN1cHBvcnRlZFR5cGVzLmFkZChJVHJlZUl0ZW1Db250ZW50UHJvdmlkZXIuY2xhc3MpOw0KKwkJc3VwcG9ydGVkVHlwZXMuYWRkKElJdGVtTGFiZWxQcm92aWRlci5jbGFzcyk7DQorCQlzdXBwb3J0ZWRUeXBlcy5hZGQoSUl0ZW1Qcm9wZXJ0eVNvdXJjZS5jbGFzcyk7DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMga2VlcHMgdHJhY2sgb2YgdGhlIG9uZSBhZGFwdGVyIHVzZWQgZm9yIGFsbCB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5zb2x2ZXJzLmZkLkZpbml0ZURpZmZlcmVuY2V9IGluc3RhbmNlcy4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCBGaW5pdGVEaWZmZXJlbmNlSXRlbVByb3ZpZGVyIGZpbml0ZURpZmZlcmVuY2VJdGVtUHJvdmlkZXI7DQorDQorCS8qKg0KKwkgKiBUaGlzIGNyZWF0ZXMgYW4gYWRhcHRlciBmb3IgYSB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5zb2x2ZXJzLmZkLkZpbml0ZURpZmZlcmVuY2V9Lg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJQE92ZXJyaWRlDQorCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZUZpbml0ZURpZmZlcmVuY2VBZGFwdGVyKCkgew0KKwkJaWYgKGZpbml0ZURpZmZlcmVuY2VJdGVtUHJvdmlkZXIgPT0gbnVsbCkgew0KKwkJCWZpbml0ZURpZmZlcmVuY2VJdGVtUHJvdmlkZXIgPSBuZXcgRmluaXRlRGlmZmVyZW5jZUl0ZW1Qcm92aWRlcih0aGlzKTsNCisJCX0NCisNCisJCXJldHVybiBmaW5pdGVEaWZmZXJlbmNlSXRlbVByb3ZpZGVyOw0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIHJldHVybnMgdGhlIHJvb3QgYWRhcHRlciBmYWN0b3J5IHRoYXQgY29udGFpbnMgdGhpcyBmYWN0b3J5Lg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnkgZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCkgew0KKwkJcmV0dXJuIHBhcmVudEFkYXB0ZXJGYWN0b3J5ID09IG51bGwgPyB0aGlzIDogcGFyZW50QWRhcHRlckZhY3RvcnkuZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCk7DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgc2V0cyB0aGUgY29tcG9zZWQgYWRhcHRlciBmYWN0b3J5IHRoYXQgY29udGFpbnMgdGhpcyBmYWN0b3J5Lg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIHZvaWQgc2V0UGFyZW50QWRhcHRlckZhY3RvcnkoQ29tcG9zZWRBZGFwdGVyRmFjdG9yeSBwYXJlbnRBZGFwdGVyRmFjdG9yeSkgew0KKwkJdGhpcy5wYXJlbnRBZGFwdGVyRmFjdG9yeSA9IHBhcmVudEFkYXB0ZXJGYWN0b3J5Ow0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJQE92ZXJyaWRlDQorCXB1YmxpYyBib29sZWFuIGlzRmFjdG9yeUZvclR5cGUoT2JqZWN0IHR5cGUpIHsNCisJCXJldHVybiBzdXBwb3J0ZWRUeXBlcy5jb250YWlucyh0eXBlKSB8fCBzdXBlci5pc0ZhY3RvcnlGb3JUeXBlKHR5cGUpOw0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIGltcGxlbWVudGF0aW9uIHN1YnN0aXR1dGVzIHRoZSBmYWN0b3J5IGl0c2VsZiBhcyB0aGUga2V5IGZvciB0aGUgYWRhcHRlci4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCUBPdmVycmlkZQ0KKwlwdWJsaWMgQWRhcHRlciBhZGFwdChOb3RpZmllciBub3RpZmllciwgT2JqZWN0IHR5cGUpIHsNCisJCXJldHVybiBzdXBlci5hZGFwdChub3RpZmllciwgdGhpcyk7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlAT3ZlcnJpZGUNCisJcHVibGljIE9iamVjdCBhZGFwdChPYmplY3Qgb2JqZWN0LCBPYmplY3QgdHlwZSkgew0KKwkJaWYgKGlzRmFjdG9yeUZvclR5cGUodHlwZSkpIHsNCisJCQlPYmplY3QgYWRhcHRlciA9IHN1cGVyLmFkYXB0KG9iamVjdCwgdHlwZSk7DQorCQkJaWYgKCEodHlwZSBpbnN0YW5jZW9mIENsYXNzKSB8fCAoKChDbGFzczw/Pil0eXBlKS5pc0luc3RhbmNlKGFkYXB0ZXIpKSkgew0KKwkJCQlyZXR1cm4gYWRhcHRlcjsNCisJCQl9DQorCQl9DQorDQorCQlyZXR1cm4gbnVsbDsNCisJfQ0KKw0KKwkvKioNCisJICogVGhpcyBhZGRzIGEgbGlzdGVuZXIuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgdm9pZCBhZGRMaXN0ZW5lcihJTm90aWZ5Q2hhbmdlZExpc3RlbmVyIG5vdGlmeUNoYW5nZWRMaXN0ZW5lcikgew0KKwkJY2hhbmdlTm90aWZpZXIuYWRkTGlzdGVuZXIobm90aWZ5Q2hhbmdlZExpc3RlbmVyKTsNCisJfQ0KKw0KKwkvKioNCisJICogVGhpcyByZW1vdmVzIGEgbGlzdGVuZXIuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgdm9pZCByZW1vdmVMaXN0ZW5lcihJTm90aWZ5Q2hhbmdlZExpc3RlbmVyIG5vdGlmeUNoYW5nZWRMaXN0ZW5lcikgew0KKwkJY2hhbmdlTm90aWZpZXIucmVtb3ZlTGlzdGVuZXIobm90aWZ5Q2hhbmdlZExpc3RlbmVyKTsNCisJfQ0KKw0KKwkvKioNCisJICogVGhpcyBkZWxlZ2F0ZXMgdG8ge0BsaW5rICNjaGFuZ2VOb3RpZmllcn0gYW5kIHRvIHtAbGluayAjcGFyZW50QWRhcHRlckZhY3Rvcnl9Lg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIHZvaWQgZmlyZU5vdGlmeUNoYW5nZWQoTm90aWZpY2F0aW9uIG5vdGlmaWNhdGlvbikgew0KKwkJY2hhbmdlTm90aWZpZXIuZmlyZU5vdGlmeUNoYW5nZWQobm90aWZpY2F0aW9uKTsNCisNCisJCWlmIChwYXJlbnRBZGFwdGVyRmFjdG9yeSAhPSBudWxsKSB7DQorCQkJcGFyZW50QWRhcHRlckZhY3RvcnkuZmlyZU5vdGlmeUNoYW5nZWQobm90aWZpY2F0aW9uKTsNCisJCX0NCisJfQ0KKw0KKwkvKioNCisJICogVGhpcyBkaXNwb3NlcyBhbGwgb2YgdGhlIGl0ZW0gcHJvdmlkZXJzIGNyZWF0ZWQgYnkgdGhpcyBmYWN0b3J5LiANCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyB2b2lkIGRpc3Bvc2UoKSB7DQorCQlpZiAoZmluaXRlRGlmZmVyZW5jZUl0ZW1Qcm92aWRlciAhPSBudWxsKSBmaW5pdGVEaWZmZXJlbmNlSXRlbVByb3ZpZGVyLmRpc3Bvc2UoKTsNCisJfQ0KKw0KK30NCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uc29sdmVycy5mZC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9zb2x2ZXJzL2ZkL3Byb3ZpZGVyL0Zpbml0ZURpZmZlcmVuY2VJdGVtUHJvdmlkZXIuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5zb2x2ZXJzLmZkL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3NvbHZlcnMvZmQvcHJvdmlkZXIvRmluaXRlRGlmZmVyZW5jZUl0ZW1Qcm92aWRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU4NDE4ZWIKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uc29sdmVycy5mZC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9zb2x2ZXJzL2ZkL3Byb3ZpZGVyL0Zpbml0ZURpZmZlcmVuY2VJdGVtUHJvdmlkZXIuamF2YQpAQCAtMCwwICsxLDE0MyBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnNvbHZlcnMuZmQucHJvdmlkZXI7DQorDQorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisgKiBDb3B5cmlnaHQgKGMpIDIwMDkgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuDQorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscw0KKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMA0KKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0DQorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwNCisgKg0KKyAqIENvbnRyaWJ1dG9yczoNCisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uDQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQorDQorDQoraW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOw0KK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsNCisNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuQWRhcHRlckZhY3Rvcnk7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlJlc291cmNlTG9jYXRvcjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlVSSTsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUVkaXRpbmdEb21haW5JdGVtUHJvdmlkZXI7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtTGFiZWxQcm92aWRlcjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtUHJvcGVydHlTb3VyY2U7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklTdHJ1Y3R1cmVkSXRlbUNvbnRlbnRQcm92aWRlcjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVRyZWVJdGVtQ29udGVudFByb3ZpZGVyOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc29sdmVyLnByb3ZpZGVyLlNvbHZlckl0ZW1Qcm92aWRlcjsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5zb2x2ZXJzLmZkLkZpbml0ZURpZmZlcmVuY2U7DQorDQorLyoqDQorICogVGhpcyBpcyB0aGUgaXRlbSBwcm92aWRlciBhZGFwdGVyIGZvciBhIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLnNvbHZlcnMuZmQuRmluaXRlRGlmZmVyZW5jZX0gb2JqZWN0Lg0KKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorICogQGdlbmVyYXRlZA0KKyAqLw0KK3B1YmxpYyBjbGFzcyBGaW5pdGVEaWZmZXJlbmNlSXRlbVByb3ZpZGVyDQorCWV4dGVuZHMgU29sdmVySXRlbVByb3ZpZGVyDQorCWltcGxlbWVudHMNCisJCUlFZGl0aW5nRG9tYWluSXRlbVByb3ZpZGVyLA0KKwkJSVN0cnVjdHVyZWRJdGVtQ29udGVudFByb3ZpZGVyLA0KKwkJSVRyZWVJdGVtQ29udGVudFByb3ZpZGVyLA0KKwkJSUl0ZW1MYWJlbFByb3ZpZGVyLA0KKwkJSUl0ZW1Qcm9wZXJ0eVNvdXJjZSB7DQorCS8qKg0KKwkgKiBUaGlzIGNvbnN0cnVjdHMgYW4gaW5zdGFuY2UgZnJvbSBhIGZhY3RvcnkgYW5kIGEgbm90aWZpZXIuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgRmluaXRlRGlmZmVyZW5jZUl0ZW1Qcm92aWRlcihBZGFwdGVyRmFjdG9yeSBhZGFwdGVyRmFjdG9yeSkgew0KKwkJc3VwZXIoYWRhcHRlckZhY3RvcnkpOw0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIHJldHVybnMgdGhlIHByb3BlcnR5IGRlc2NyaXB0b3JzIGZvciB0aGUgYWRhcHRlZCBjbGFzcy4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCUBPdmVycmlkZQ0KKwlwdWJsaWMgTGlzdDxJSXRlbVByb3BlcnR5RGVzY3JpcHRvcj4gZ2V0UHJvcGVydHlEZXNjcmlwdG9ycyhPYmplY3Qgb2JqZWN0KSB7DQorCQlpZiAoaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMgPT0gbnVsbCkgew0KKwkJCXN1cGVyLmdldFByb3BlcnR5RGVzY3JpcHRvcnMob2JqZWN0KTsNCisNCisJCX0NCisJCXJldHVybiBpdGVtUHJvcGVydHlEZXNjcmlwdG9yczsNCisJfQ0KKw0KKwkvKioNCisJICogVGhpcyByZXR1cm5zIEZpbml0ZURpZmZlcmVuY2UuZ2lmLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZCBOT1QNCisJICovDQorCUBPdmVycmlkZQ0KKwlwdWJsaWMgT2JqZWN0IGdldEltYWdlKE9iamVjdCBvYmplY3QpIHsNCisJCXJldHVybiBvdmVybGF5SW1hZ2Uob2JqZWN0LCBnZXRSZXNvdXJjZUxvY2F0b3IoKS5nZXRJbWFnZSgiZnVsbC9jdXN0b20xNi9zb2x2ZXIiKSk7DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgcmV0dXJucyB0aGUgbGFiZWwgdGV4dCBmb3IgdGhlIGFkYXB0ZWQgY2xhc3MuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkIE5PVA0KKwkgKi8NCisJQE92ZXJyaWRlDQorCXB1YmxpYyBTdHJpbmcgZ2V0VGV4dChPYmplY3Qgb2JqZWN0KSB7DQorCQlyZXR1cm4gIkZpbml0ZSBEaWZmZXJlbmNlIFNvbHZlciI7DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgcmV0dXJucyB0aGUgbGFiZWwgdGV4dCBmb3IgdGhlIGFkYXB0ZWQgY2xhc3MuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlAT3ZlcnJpZGUNCisJcHVibGljIFN0cmluZyBnZXRUZXh0R2VuKE9iamVjdCBvYmplY3QpIHsNCisJCVVSSSBsYWJlbFZhbHVlID0gKChGaW5pdGVEaWZmZXJlbmNlKW9iamVjdCkuZ2V0VVJJKCk7DQorCQlTdHJpbmcgbGFiZWwgPSBsYWJlbFZhbHVlID09IG51bGwgPyBudWxsIDogbGFiZWxWYWx1ZS50b1N0cmluZygpOw0KKwkJcmV0dXJuIGxhYmVsID09IG51bGwgfHwgbGFiZWwubGVuZ3RoKCkgPT0gMCA/DQorCQkJZ2V0U3RyaW5nKCJfVUlfRmluaXRlRGlmZmVyZW5jZV90eXBlIikgOg0KKwkJCWdldFN0cmluZygiX1VJX0Zpbml0ZURpZmZlcmVuY2VfdHlwZSIpICsgIiAiICsgbGFiZWw7DQorCX0NCisJDQorCS8qKg0KKwkgKiBUaGlzIGhhbmRsZXMgbW9kZWwgbm90aWZpY2F0aW9ucyBieSBjYWxsaW5nIHtAbGluayAjdXBkYXRlQ2hpbGRyZW59IHRvIHVwZGF0ZSBhbnkgY2FjaGVkDQorCSAqIGNoaWxkcmVuIGFuZCBieSBjcmVhdGluZyBhIHZpZXdlciBub3RpZmljYXRpb24sIHdoaWNoIGl0IHBhc3NlcyB0byB7QGxpbmsgI2ZpcmVOb3RpZnlDaGFuZ2VkfS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCUBPdmVycmlkZQ0KKwlwdWJsaWMgdm9pZCBub3RpZnlDaGFuZ2VkKE5vdGlmaWNhdGlvbiBub3RpZmljYXRpb24pIHsNCisJCXVwZGF0ZUNoaWxkcmVuKG5vdGlmaWNhdGlvbik7DQorCQlzdXBlci5ub3RpZnlDaGFuZ2VkKG5vdGlmaWNhdGlvbik7DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgYWRkcyB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmVkaXQuY29tbWFuZC5Db21tYW5kUGFyYW1ldGVyfXMgZGVzY3JpYmluZyB0aGUgY2hpbGRyZW4NCisJICogdGhhdCBjYW4gYmUgY3JlYXRlZCB1bmRlciB0aGlzIG9iamVjdC4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCUBPdmVycmlkZQ0KKwlwcm90ZWN0ZWQgdm9pZCBjb2xsZWN0TmV3Q2hpbGREZXNjcmlwdG9ycyhDb2xsZWN0aW9uPE9iamVjdD4gbmV3Q2hpbGREZXNjcmlwdG9ycywgT2JqZWN0IG9iamVjdCkgew0KKwkJc3VwZXIuY29sbGVjdE5ld0NoaWxkRGVzY3JpcHRvcnMobmV3Q2hpbGREZXNjcmlwdG9ycywgb2JqZWN0KTsNCisJfQ0KKw0KKwkvKioNCisJICogUmV0dXJuIHRoZSByZXNvdXJjZSBsb2NhdG9yIGZvciB0aGlzIGl0ZW0gcHJvdmlkZXIncyByZXNvdXJjZXMuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlAT3ZlcnJpZGUNCisJcHVibGljIFJlc291cmNlTG9jYXRvciBnZXRSZXNvdXJjZUxvY2F0b3IoKSB7DQorCQlyZXR1cm4gRmRFZGl0UGx1Z2luLklOU1RBTkNFOw0KKwl9DQorDQorfQ0KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5zb2x2ZXJzLmZkL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3NvbHZlcnMvZmQvdXRpbC9GZEFkYXB0ZXJGYWN0b3J5LmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uc29sdmVycy5mZC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9zb2x2ZXJzL2ZkL3V0aWwvRmRBZGFwdGVyRmFjdG9yeS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY3ZmFhN2IKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uc29sdmVycy5mZC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9zb2x2ZXJzL2ZkL3V0aWwvRmRBZGFwdGVyRmFjdG9yeS5qYXZhCkBAIC0wLDAgKzEsMTg0IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uc29sdmVycy5mZC51dGlsOw0KKw0KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorICogQ29weXJpZ2h0IChjKSAyMDA5IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLg0KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMNCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjANCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdA0KKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sDQorICoNCisgKiBDb250cmlidXRvcnM6DQorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbg0KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KKw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5BZGFwdGVyOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmllcjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuaW1wbC5BZGFwdGVyRmFjdG9yeUltcGw7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0Ow0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLklkZW50aWZpYWJsZTsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNvbHZlci5Tb2x2ZXI7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uc29sdmVycy5mZC5GZFBhY2thZ2U7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uc29sdmVycy5mZC5GaW5pdGVEaWZmZXJlbmNlOw0KKw0KKy8qKg0KKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorICogVGhlIDxiPkFkYXB0ZXIgRmFjdG9yeTwvYj4gZm9yIHRoZSBtb2RlbC4NCisgKiBJdCBwcm92aWRlcyBhbiBhZGFwdGVyIDxjb2RlPmNyZWF0ZVhYWDwvY29kZT4gbWV0aG9kIGZvciBlYWNoIGNsYXNzIG9mIHRoZSBtb2RlbC4NCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uc29sdmVycy5mZC5GZFBhY2thZ2UNCisgKiBAZ2VuZXJhdGVkDQorICovDQorcHVibGljIGNsYXNzIEZkQWRhcHRlckZhY3RvcnkgZXh0ZW5kcyBBZGFwdGVyRmFjdG9yeUltcGwgew0KKwkvKioNCisJICogVGhlIGNhY2hlZCBtb2RlbCBwYWNrYWdlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIHN0YXRpYyBGZFBhY2thZ2UgbW9kZWxQYWNrYWdlOw0KKw0KKwkvKioNCisJICogQ3JlYXRlcyBhbiBpbnN0YW5jZSBvZiB0aGUgYWRhcHRlciBmYWN0b3J5Lg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIEZkQWRhcHRlckZhY3RvcnkoKSB7DQorCQlpZiAobW9kZWxQYWNrYWdlID09IG51bGwpIHsNCisJCQltb2RlbFBhY2thZ2UgPSBGZFBhY2thZ2UuZUlOU1RBTkNFOw0KKwkJfQ0KKwl9DQorDQorCS8qKg0KKwkgKiBSZXR1cm5zIHdoZXRoZXIgdGhpcyBmYWN0b3J5IGlzIGFwcGxpY2FibGUgZm9yIHRoZSB0eXBlIG9mIHRoZSBvYmplY3QuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyA8Y29kZT50cnVlPC9jb2RlPiBpZiB0aGUgb2JqZWN0IGlzIGVpdGhlciB0aGUgbW9kZWwncyBwYWNrYWdlIG9yIGlzIGFuIGluc3RhbmNlIG9iamVjdCBvZiB0aGUgbW9kZWwuDQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcmV0dXJuIHdoZXRoZXIgdGhpcyBmYWN0b3J5IGlzIGFwcGxpY2FibGUgZm9yIHRoZSB0eXBlIG9mIHRoZSBvYmplY3QuDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCUBPdmVycmlkZQ0KKwlwdWJsaWMgYm9vbGVhbiBpc0ZhY3RvcnlGb3JUeXBlKE9iamVjdCBvYmplY3QpIHsNCisJCWlmIChvYmplY3QgPT0gbW9kZWxQYWNrYWdlKSB7DQorCQkJcmV0dXJuIHRydWU7DQorCQl9DQorCQlpZiAob2JqZWN0IGluc3RhbmNlb2YgRU9iamVjdCkgew0KKwkJCXJldHVybiAoKEVPYmplY3Qpb2JqZWN0KS5lQ2xhc3MoKS5nZXRFUGFja2FnZSgpID09IG1vZGVsUGFja2FnZTsNCisJCX0NCisJCXJldHVybiBmYWxzZTsNCisJfQ0KKw0KKwkvKioNCisJICogVGhlIHN3aXRjaCB0aGF0IGRlbGVnYXRlcyB0byB0aGUgPGNvZGU+Y3JlYXRlWFhYPC9jb2RlPiBtZXRob2RzLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJQFN1cHByZXNzV2FybmluZ3MoInVudXNlZCIpIA0KKwlwcm90ZWN0ZWQgRmRTd2l0Y2g8QWRhcHRlcj4gbW9kZWxTd2l0Y2ggPQ0KKwkJbmV3IEZkU3dpdGNoPEFkYXB0ZXI+KCkgew0KKwkJCUBPdmVycmlkZQ0KKwkJCXB1YmxpYyBBZGFwdGVyIGNhc2VGaW5pdGVEaWZmZXJlbmNlKEZpbml0ZURpZmZlcmVuY2Ugb2JqZWN0KSB7DQorCQkJCXJldHVybiBjcmVhdGVGaW5pdGVEaWZmZXJlbmNlQWRhcHRlcigpOw0KKwkJCX0NCisJCQlAT3ZlcnJpZGUNCisJCQlwdWJsaWMgPFQ+IEFkYXB0ZXIgY2FzZUNvbXBhcmFibGUoQ29tcGFyYWJsZTxUPiBvYmplY3QpIHsNCisJCQkJcmV0dXJuIGNyZWF0ZUNvbXBhcmFibGVBZGFwdGVyKCk7DQorCQkJfQ0KKwkJCUBPdmVycmlkZQ0KKwkJCXB1YmxpYyBBZGFwdGVyIGNhc2VJZGVudGlmaWFibGUoSWRlbnRpZmlhYmxlIG9iamVjdCkgew0KKwkJCQlyZXR1cm4gY3JlYXRlSWRlbnRpZmlhYmxlQWRhcHRlcigpOw0KKwkJCX0NCisJCQlAT3ZlcnJpZGUNCisJCQlwdWJsaWMgQWRhcHRlciBjYXNlU29sdmVyKFNvbHZlciBvYmplY3QpIHsNCisJCQkJcmV0dXJuIGNyZWF0ZVNvbHZlckFkYXB0ZXIoKTsNCisJCQl9DQorCQkJQE92ZXJyaWRlDQorCQkJcHVibGljIEFkYXB0ZXIgZGVmYXVsdENhc2UoRU9iamVjdCBvYmplY3QpIHsNCisJCQkJcmV0dXJuIGNyZWF0ZUVPYmplY3RBZGFwdGVyKCk7DQorCQkJfQ0KKwkJfTsNCisNCisJLyoqDQorCSAqIENyZWF0ZXMgYW4gYWRhcHRlciBmb3IgdGhlIDxjb2RlPnRhcmdldDwvY29kZT4uDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcGFyYW0gdGFyZ2V0IHRoZSBvYmplY3QgdG8gYWRhcHQuDQorCSAqIEByZXR1cm4gdGhlIGFkYXB0ZXIgZm9yIHRoZSA8Y29kZT50YXJnZXQ8L2NvZGU+Lg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlAT3ZlcnJpZGUNCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlQWRhcHRlcihOb3RpZmllciB0YXJnZXQpIHsNCisJCXJldHVybiBtb2RlbFN3aXRjaC5kb1N3aXRjaCgoRU9iamVjdCl0YXJnZXQpOw0KKwl9DQorDQorDQorCS8qKg0KKwkgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uc29sdmVycy5mZC5GaW5pdGVEaWZmZXJlbmNlIDxlbT5GaW5pdGUgRGlmZmVyZW5jZTwvZW0+fScuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsNCisJICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuDQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4NCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnNvbHZlcnMuZmQuRmluaXRlRGlmZmVyZW5jZQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVGaW5pdGVEaWZmZXJlbmNlQWRhcHRlcigpIHsNCisJCXJldHVybiBudWxsOw0KKwl9DQorDQorCS8qKg0KKwkgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIGphdmEubGFuZy5Db21wYXJhYmxlIDxlbT5Db21wYXJhYmxlPC9lbT59Jy4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOw0KKwkgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLg0KKwkgKiBAc2VlIGphdmEubGFuZy5Db21wYXJhYmxlDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZUNvbXBhcmFibGVBZGFwdGVyKCkgew0KKwkJcmV0dXJuIG51bGw7DQorCX0NCisNCisJLyoqDQorCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5JZGVudGlmaWFibGUgPGVtPklkZW50aWZpYWJsZTwvZW0+fScuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsNCisJICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuDQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4NCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLklkZW50aWZpYWJsZQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVJZGVudGlmaWFibGVBZGFwdGVyKCkgew0KKwkJcmV0dXJuIG51bGw7DQorCX0NCisNCisJLyoqDQorCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNvbHZlci5Tb2x2ZXIgPGVtPlNvbHZlcjwvZW0+fScuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsNCisJICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuDQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4NCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc29sdmVyLlNvbHZlcg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVTb2x2ZXJBZGFwdGVyKCkgew0KKwkJcmV0dXJuIG51bGw7DQorCX0NCisNCisJLyoqDQorCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgdGhlIGRlZmF1bHQgY2FzZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbC4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVFT2JqZWN0QWRhcHRlcigpIHsNCisJCXJldHVybiBudWxsOw0KKwl9DQorDQorfSAvL0ZkQWRhcHRlckZhY3RvcnkNCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uc29sdmVycy5mZC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9zb2x2ZXJzL2ZkL3V0aWwvRmRTd2l0Y2guamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5zb2x2ZXJzLmZkL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3NvbHZlcnMvZmQvdXRpbC9GZFN3aXRjaC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIxMzc5ZDgKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uc29sdmVycy5mZC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9zb2x2ZXJzL2ZkL3V0aWwvRmRTd2l0Y2guamF2YQpAQCAtMCwwICsxLDE4NiBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnNvbHZlcnMuZmQudXRpbDsNCisNCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyAqIENvcHlyaWdodCAoYykgMjAwOSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4NCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzDQorICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wDQorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQNCisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbA0KKyAqDQorICogQ29udHJpYnV0b3JzOg0KKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24NCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCisNCitpbXBvcnQgamF2YS51dGlsLkxpc3Q7DQorDQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0Ow0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLklkZW50aWZpYWJsZTsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNvbHZlci5Tb2x2ZXI7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uc29sdmVycy5mZC5GZFBhY2thZ2U7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uc29sdmVycy5mZC5GaW5pdGVEaWZmZXJlbmNlOw0KKw0KKy8qKg0KKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorICogVGhlIDxiPlN3aXRjaDwvYj4gZm9yIHRoZSBtb2RlbCdzIGluaGVyaXRhbmNlIGhpZXJhcmNoeS4NCisgKiBJdCBzdXBwb3J0cyB0aGUgY2FsbCB7QGxpbmsgI2RvU3dpdGNoKEVPYmplY3QpIGRvU3dpdGNoKG9iamVjdCl9DQorICogdG8gaW52b2tlIHRoZSA8Y29kZT5jYXNlWFhYPC9jb2RlPiBtZXRob2QgZm9yIGVhY2ggY2xhc3Mgb2YgdGhlIG1vZGVsLA0KKyAqIHN0YXJ0aW5nIHdpdGggdGhlIGFjdHVhbCBjbGFzcyBvZiB0aGUgb2JqZWN0DQorICogYW5kIHByb2NlZWRpbmcgdXAgdGhlIGluaGVyaXRhbmNlIGhpZXJhcmNoeQ0KKyAqIHVudGlsIGEgbm9uLW51bGwgcmVzdWx0IGlzIHJldHVybmVkLA0KKyAqIHdoaWNoIGlzIHRoZSByZXN1bHQgb2YgdGhlIHN3aXRjaC4NCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uc29sdmVycy5mZC5GZFBhY2thZ2UNCisgKiBAZ2VuZXJhdGVkDQorICovDQorQFN1cHByZXNzV2FybmluZ3MoImFsbCIpDQorcHVibGljIGNsYXNzIEZkU3dpdGNoPFQxPiB7DQorCS8qKg0KKwkgKiBUaGUgY2FjaGVkIG1vZGVsIHBhY2thZ2UNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCBzdGF0aWMgRmRQYWNrYWdlIG1vZGVsUGFja2FnZTsNCisNCisJLyoqDQorCSAqIENyZWF0ZXMgYW4gaW5zdGFuY2Ugb2YgdGhlIHN3aXRjaC4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBGZFN3aXRjaCgpIHsNCisJCWlmIChtb2RlbFBhY2thZ2UgPT0gbnVsbCkgew0KKwkJCW1vZGVsUGFja2FnZSA9IEZkUGFja2FnZS5lSU5TVEFOQ0U7DQorCQl9DQorCX0NCisNCisJLyoqDQorCSAqIENhbGxzIDxjb2RlPmNhc2VYWFg8L2NvZGU+IGZvciBlYWNoIGNsYXNzIG9mIHRoZSBtb2RlbCB1bnRpbCBvbmUgcmV0dXJucyBhIG5vbiBudWxsIHJlc3VsdDsgaXQgeWllbGRzIHRoYXQgcmVzdWx0Lg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHJldHVybiB0aGUgZmlyc3Qgbm9uLW51bGwgcmVzdWx0IHJldHVybmVkIGJ5IGEgPGNvZGU+Y2FzZVhYWDwvY29kZT4gY2FsbC4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIFQxIGRvU3dpdGNoKEVPYmplY3QgdGhlRU9iamVjdCkgew0KKwkJcmV0dXJuIGRvU3dpdGNoKHRoZUVPYmplY3QuZUNsYXNzKCksIHRoZUVPYmplY3QpOw0KKwl9DQorDQorCS8qKg0KKwkgKiBDYWxscyA8Y29kZT5jYXNlWFhYPC9jb2RlPiBmb3IgZWFjaCBjbGFzcyBvZiB0aGUgbW9kZWwgdW50aWwgb25lIHJldHVybnMgYSBub24gbnVsbCByZXN1bHQ7IGl0IHlpZWxkcyB0aGF0IHJlc3VsdC4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEByZXR1cm4gdGhlIGZpcnN0IG5vbi1udWxsIHJlc3VsdCByZXR1cm5lZCBieSBhIDxjb2RlPmNhc2VYWFg8L2NvZGU+IGNhbGwuDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCBUMSBkb1N3aXRjaChFQ2xhc3MgdGhlRUNsYXNzLCBFT2JqZWN0IHRoZUVPYmplY3QpIHsNCisJCWlmICh0aGVFQ2xhc3MuZUNvbnRhaW5lcigpID09IG1vZGVsUGFja2FnZSkgew0KKwkJCXJldHVybiBkb1N3aXRjaCh0aGVFQ2xhc3MuZ2V0Q2xhc3NpZmllcklEKCksIHRoZUVPYmplY3QpOw0KKwkJfQ0KKwkJZWxzZSB7DQorCQkJTGlzdDxFQ2xhc3M+IGVTdXBlclR5cGVzID0gdGhlRUNsYXNzLmdldEVTdXBlclR5cGVzKCk7DQorCQkJcmV0dXJuDQorCQkJCWVTdXBlclR5cGVzLmlzRW1wdHkoKSA/DQorCQkJCQlkZWZhdWx0Q2FzZSh0aGVFT2JqZWN0KSA6DQorCQkJCQlkb1N3aXRjaChlU3VwZXJUeXBlcy5nZXQoMCksIHRoZUVPYmplY3QpOw0KKwkJfQ0KKwl9DQorDQorCS8qKg0KKwkgKiBDYWxscyA8Y29kZT5jYXNlWFhYPC9jb2RlPiBmb3IgZWFjaCBjbGFzcyBvZiB0aGUgbW9kZWwgdW50aWwgb25lIHJldHVybnMgYSBub24gbnVsbCByZXN1bHQ7IGl0IHlpZWxkcyB0aGF0IHJlc3VsdC4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEByZXR1cm4gdGhlIGZpcnN0IG5vbi1udWxsIHJlc3VsdCByZXR1cm5lZCBieSBhIDxjb2RlPmNhc2VYWFg8L2NvZGU+IGNhbGwuDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCBUMSBkb1N3aXRjaChpbnQgY2xhc3NpZmllcklELCBFT2JqZWN0IHRoZUVPYmplY3QpIHsNCisJCXN3aXRjaCAoY2xhc3NpZmllcklEKSB7DQorCQkJY2FzZSBGZFBhY2thZ2UuRklOSVRFX0RJRkZFUkVOQ0U6IHsNCisJCQkJRmluaXRlRGlmZmVyZW5jZSBmaW5pdGVEaWZmZXJlbmNlID0gKEZpbml0ZURpZmZlcmVuY2UpdGhlRU9iamVjdDsNCisJCQkJVDEgcmVzdWx0ID0gY2FzZUZpbml0ZURpZmZlcmVuY2UoZmluaXRlRGlmZmVyZW5jZSk7DQorCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZVNvbHZlcihmaW5pdGVEaWZmZXJlbmNlKTsNCisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlSWRlbnRpZmlhYmxlKGZpbml0ZURpZmZlcmVuY2UpOw0KKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VDb21wYXJhYmxlKGZpbml0ZURpZmZlcmVuY2UpOw0KKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGRlZmF1bHRDYXNlKHRoZUVPYmplY3QpOw0KKwkJCQlyZXR1cm4gcmVzdWx0Ow0KKwkJCX0NCisJCQlkZWZhdWx0OiByZXR1cm4gZGVmYXVsdENhc2UodGhlRU9iamVjdCk7DQorCQl9DQorCX0NCisNCisJLyoqDQorCSAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkZpbml0ZSBEaWZmZXJlbmNlPC9lbT4nLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsNCisJICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guDQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4NCisJICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+RmluaXRlIERpZmZlcmVuY2U8L2VtPicuDQorCSAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgVDEgY2FzZUZpbml0ZURpZmZlcmVuY2UoRmluaXRlRGlmZmVyZW5jZSBvYmplY3QpIHsNCisJCXJldHVybiBudWxsOw0KKwl9DQorDQorCS8qKg0KKwkgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5Db21wYXJhYmxlPC9lbT4nLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsNCisJICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guDQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4NCisJICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+Q29tcGFyYWJsZTwvZW0+Jy4NCisJICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyA8VD4gVDEgY2FzZUNvbXBhcmFibGUoQ29tcGFyYWJsZTxUPiBvYmplY3QpIHsNCisJCXJldHVybiBudWxsOw0KKwl9DQorDQorCS8qKg0KKwkgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5JZGVudGlmaWFibGU8L2VtPicuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOw0KKwkgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLg0KKwkgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5JZGVudGlmaWFibGU8L2VtPicuDQorCSAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgVDEgY2FzZUlkZW50aWZpYWJsZShJZGVudGlmaWFibGUgb2JqZWN0KSB7DQorCQlyZXR1cm4gbnVsbDsNCisJfQ0KKw0KKwkvKioNCisJICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+U29sdmVyPC9lbT4nLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsNCisJICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guDQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4NCisJICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+U29sdmVyPC9lbT4nLg0KKwkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIFQxIGNhc2VTb2x2ZXIoU29sdmVyIG9iamVjdCkgew0KKwkJcmV0dXJuIG51bGw7DQorCX0NCisNCisJLyoqDQorCSAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkVPYmplY3Q8L2VtPicuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOw0KKwkgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaCwgYnV0IHRoaXMgaXMgdGhlIGxhc3QgY2FzZSBhbnl3YXkuDQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4NCisJICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+RU9iamVjdDwvZW0+Jy4NCisJICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBUMSBkZWZhdWx0Q2FzZShFT2JqZWN0IG9iamVjdCkgew0KKwkJcmV0dXJuIG51bGw7DQorCX0NCisNCit9IC8vRmRTd2l0Y2gNCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uc29sdmVycy5yay8uY2xhc3NwYXRoIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnNvbHZlcnMucmsvLmNsYXNzcGF0aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NWYwMjRlCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnNvbHZlcnMucmsvLmNsYXNzcGF0aApAQCAtMCwwICsxLDcgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+DQorPGNsYXNzcGF0aD4NCisJPGNsYXNzcGF0aGVudHJ5IGtpbmQ9InNyYyIgcGF0aD0ic3JjIi8+DQorCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJjb24iIHBhdGg9Im9yZy5lY2xpcHNlLmpkdC5sYXVuY2hpbmcuSlJFX0NPTlRBSU5FUi9vcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwuZGVidWcudWkubGF1bmNoZXIuU3RhbmRhcmRWTVR5cGUvSjJTRS0xLjUiLz4NCisJPGNsYXNzcGF0aGVudHJ5IGtpbmQ9ImNvbiIgcGF0aD0ib3JnLmVjbGlwc2UucGRlLmNvcmUucmVxdWlyZWRQbHVnaW5zIi8+DQorCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJvdXRwdXQiIHBhdGg9ImJpbiIvPg0KKzwvY2xhc3NwYXRoPg0KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5zb2x2ZXJzLnJrLy5wcm9qZWN0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnNvbHZlcnMucmsvLnByb2plY3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzJiNmZiMQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5zb2x2ZXJzLnJrLy5wcm9qZWN0CkBAIC0wLDAgKzEsMjggQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+DQorPHByb2plY3REZXNjcmlwdGlvbj4NCisJPG5hbWU+b3JnLmVjbGlwc2Uuc3RlbS5zb2x2ZXJzLnJrPC9uYW1lPg0KKwk8Y29tbWVudD48L2NvbW1lbnQ+DQorCTxwcm9qZWN0cz4NCisJPC9wcm9qZWN0cz4NCisJPGJ1aWxkU3BlYz4NCisJCTxidWlsZENvbW1hbmQ+DQorCQkJPG5hbWU+b3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YWJ1aWxkZXI8L25hbWU+DQorCQkJPGFyZ3VtZW50cz4NCisJCQk8L2FyZ3VtZW50cz4NCisJCTwvYnVpbGRDb21tYW5kPg0KKwkJPGJ1aWxkQ29tbWFuZD4NCisJCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuTWFuaWZlc3RCdWlsZGVyPC9uYW1lPg0KKwkJCTxhcmd1bWVudHM+DQorCQkJPC9hcmd1bWVudHM+DQorCQk8L2J1aWxkQ29tbWFuZD4NCisJCTxidWlsZENvbW1hbmQ+DQorCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLlNjaGVtYUJ1aWxkZXI8L25hbWU+DQorCQkJPGFyZ3VtZW50cz4NCisJCQk8L2FyZ3VtZW50cz4NCisJCTwvYnVpbGRDb21tYW5kPg0KKwk8L2J1aWxkU3BlYz4NCisJPG5hdHVyZXM+DQorCQk8bmF0dXJlPm9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFuYXR1cmU8L25hdHVyZT4NCisJCTxuYXR1cmU+b3JnLmVjbGlwc2UucGRlLlBsdWdpbk5hdHVyZTwvbmF0dXJlPg0KKwk8L25hdHVyZXM+DQorPC9wcm9qZWN0RGVzY3JpcHRpb24+DQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnNvbHZlcnMucmsvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnNvbHZlcnMucmsvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk4MTgyMDYKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uc29sdmVycy5yay8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMKQEAgLTAsMCArMSwyMSBAQAorI1R1ZSBTZXAgMDEgMTY6NTU6NTQgRURUIDIwMDkKK2VjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb2RlZ2VuLmlubGluZUpzckJ5dGVjb2RlPWVuYWJsZWQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvZGVnZW4udGFyZ2V0UGxhdGZvcm09MS41CitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb21wbGlhbmNlPTEuNQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuZG9jLmNvbW1lbnQuc3VwcG9ydD1kaXNhYmxlZAorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5hc3NlcnRJZGVudGlmaWVyPWVycm9yCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmVudW1JZGVudGlmaWVyPWVycm9yCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmludmFsaWRKYXZhZG9jPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW52YWxpZEphdmFkb2NUYWdzPWVuYWJsZWQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW52YWxpZEphdmFkb2NUYWdzRGVwcmVjYXRlZFJlZj1lbmFibGVkCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmludmFsaWRKYXZhZG9jVGFnc05vdFZpc2libGVSZWY9ZW5hYmxlZAorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbnZhbGlkSmF2YWRvY1RhZ3NWaXNpYmlsaXR5PXB1YmxpYworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nSmF2YWRvY0NvbW1lbnRzPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0phdmFkb2NDb21tZW50c092ZXJyaWRpbmc9ZW5hYmxlZAorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nSmF2YWRvY0NvbW1lbnRzVmlzaWJpbGl0eT1wdWJsaWMKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0phdmFkb2NUYWdEZXNjcmlwdGlvbj1yZXR1cm5fdGFnCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdKYXZhZG9jVGFncz13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdKYXZhZG9jVGFnc092ZXJyaWRpbmc9ZW5hYmxlZAorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nSmF2YWRvY1RhZ3NWaXNpYmlsaXR5PXB1YmxpYworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuc291cmNlPTEuNQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnNvbHZlcnMucmsvTUVUQS1JTkYvTUFOSUZFU1QuTUYgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uc29sdmVycy5yay9NRVRBLUlORi9NQU5JRkVTVC5NRgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYzhhYTRlCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnNvbHZlcnMucmsvTUVUQS1JTkYvTUFOSUZFU1QuTUYKQEAgLTAsMCArMSwyMCBAQAorTWFuaWZlc3QtVmVyc2lvbjogMS4wDQorQnVuZGxlLU1hbmlmZXN0VmVyc2lvbjogMg0KK0J1bmRsZS1OYW1lOiAlcGx1Z2luTmFtZQ0KK0J1bmRsZS1TeW1ib2xpY05hbWU6IG9yZy5lY2xpcHNlLnN0ZW0uc29sdmVycy5yaztzaW5nbGV0b246PXRydWUNCitCdW5kbGUtVmVyc2lvbjogMS4yLjENCitCdW5kbGUtQ2xhc3NQYXRoOiAuDQorQnVuZGxlLVZlbmRvcjogJXByb3ZpZGVyTmFtZQ0KK0J1bmRsZS1Mb2NhbGl6YXRpb246IHBsdWdpbg0KK0J1bmRsZS1SZXF1aXJlZEV4ZWN1dGlvbkVudmlyb25tZW50OiBKMlNFLTEuNQ0KK0V4cG9ydC1QYWNrYWdlOiBvcmcuZWNsaXBzZS5zdGVtLnNvbHZlcnMucmssDQorIG9yZy5lY2xpcHNlLnN0ZW0uc29sdmVycy5yay5pbXBsLA0KKyBvcmcuZWNsaXBzZS5zdGVtLnNvbHZlcnMucmsucHJvdmlkZXIsDQorIG9yZy5lY2xpcHNlLnN0ZW0uc29sdmVycy5yay51dGlsDQorUmVxdWlyZS1CdW5kbGU6IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZSwNCisgb3JnLmVjbGlwc2UuZW1mLmVjb3JlO3Zpc2liaWxpdHk6PXJlZXhwb3J0LA0KKyBvcmcuZWNsaXBzZS5zdGVtLmNvcmU7dmlzaWJpbGl0eTo9cmVleHBvcnQsDQorIG9yZy5lY2xpcHNlLmVtZi5lY29yZS5lZGl0LA0KKyBvcmcuZWNsaXBzZS5zdGVtLnVpLA0KKyBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMNCitCdW5kbGUtQWN0aXZhdGlvblBvbGljeTogbGF6eQ0KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5zb2x2ZXJzLnJrL2J1aWxkLnByb3BlcnRpZXMgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uc29sdmVycy5yay9idWlsZC5wcm9wZXJ0aWVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQyYjBiYWQKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uc29sdmVycy5yay9idWlsZC5wcm9wZXJ0aWVzCkBAIC0wLDAgKzEsMTggQEAKKw0KKyMgPGNvcHlyaWdodD4NCisjIDwvY29weXJpZ2h0Pg0KKyMNCisjICRJZCQNCisNCitiaW4uaW5jbHVkZXMgPSAuLFwNCisgICAgICAgICAgICAgICBtb2RlbC8sXA0KKyAgICAgICAgICAgICAgIE1FVEEtSU5GLyxcDQorICAgICAgICAgICAgICAgcGx1Z2luLnhtbCxcDQorICAgICAgICAgICAgICAgcGx1Z2luLnByb3BlcnRpZXMsXA0KKyAgICAgICAgICAgICAgIGljb25zLyxcDQorICAgICAgICAgICAgICAgcGx1Z2luX2RlLnByb3BlcnRpZXMsXA0KKyAgICAgICAgICAgICAgIHBsdWdpbl9rci5wcm9wZXJ0aWVzLFwNCisgICAgICAgICAgICAgICBwbHVnaW5femgucHJvcGVydGllcw0KK2phcnMuY29tcGlsZS5vcmRlciA9IC4NCitzb3VyY2UuLiA9IHNyYy8NCitvdXRwdXQuLiA9IGJpbi8NCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uc29sdmVycy5yay9pY29ucy9mdWxsL2N1c3RvbTE2L3NvbHZlci5naWYgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uc29sdmVycy5yay9pY29ucy9mdWxsL2N1c3RvbTE2L3NvbHZlci5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjkzNGZlMQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5zb2x2ZXJzLnJrL2ljb25zL2Z1bGwvY3VzdG9tMTYvc29sdmVyLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uc29sdmVycy5yay9pY29ucy9mdWxsL29iajE2L1J1bmdlS3V0dGEuZ2lmIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnNvbHZlcnMucmsvaWNvbnMvZnVsbC9vYmoxNi9SdW5nZUt1dHRhLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40OGUzY2YyCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnNvbHZlcnMucmsvaWNvbnMvZnVsbC9vYmoxNi9SdW5nZUt1dHRhLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uc29sdmVycy5yay9tb2RlbC9yay5lY29yZSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5zb2x2ZXJzLnJrL21vZGVsL3JrLmVjb3JlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmExNjgwNjMKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uc29sdmVycy5yay9tb2RlbC9yay5lY29yZQpAQCAtMCwwICsxLDEwIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/Pg0KKzxlY29yZTpFUGFja2FnZSB4bWk6dmVyc2lvbj0iMi4wIg0KKyAgICB4bWxuczp4bWk9Imh0dHA6Ly93d3cub21nLm9yZy9YTUkiIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiDQorICAgIHhtbG5zOmVjb3JlPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2VtZi8yMDAyL0Vjb3JlIiBuYW1lPSJyayINCisgICAgbnNVUkk9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9zb2x2ZXJzL3JrIiBuc1ByZWZpeD0ib3JnLmVjbGlwc2Uuc3RlbS5zb2x2ZXJzLnJrIj4NCisgIDxlQ2xhc3NpZmllcnMgeHNpOnR5cGU9ImVjb3JlOkVDbGFzcyIgbmFtZT0iUnVuZ2VLdXR0YSIgZVN1cGVyVHlwZXM9Ii4uLy4uL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9tb2RlbC9zb2x2ZXIuZWNvcmUjLy9Tb2x2ZXIiPg0KKyAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0icmVsYXRpdmVUb2xlcmFuY2UiIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgcGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5lbWYuZWNvcmUvbW9kZWwvRWNvcmUuZWNvcmUjLy9FRG91YmxlIg0KKyAgICAgICAgZGVmYXVsdFZhbHVlTGl0ZXJhbD0iMUUtOSIvPg0KKyAgPC9lQ2xhc3NpZmllcnM+DQorPC9lY29yZTpFUGFja2FnZT4NCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uc29sdmVycy5yay9tb2RlbC9yay5nZW5tb2RlbCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5zb2x2ZXJzLnJrL21vZGVsL3JrLmdlbm1vZGVsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJmMzBjOGQKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uc29sdmVycy5yay9tb2RlbC9yay5nZW5tb2RlbApAQCAtMCwwICsxLDE2IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/Pg0KKzxnZW5tb2RlbDpHZW5Nb2RlbCB4bWk6dmVyc2lvbj0iMi4wIg0KKyAgICB4bWxuczp4bWk9Imh0dHA6Ly93d3cub21nLm9yZy9YTUkiIHhtbG5zOmVjb3JlPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2VtZi8yMDAyL0Vjb3JlIg0KKyAgICB4bWxuczpnZW5tb2RlbD0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9lbWYvMjAwMi9HZW5Nb2RlbCIgbW9kZWxEaXJlY3Rvcnk9Ii9vcmcuZWNsaXBzZS5zdGVtLnNvbHZlcnMucmsvc3JjIg0KKyAgICBlZGl0RGlyZWN0b3J5PSIvb3JnLmVjbGlwc2Uuc3RlbS5zb2x2ZXJzLnJrL3NyYyIgZWRpdG9yRGlyZWN0b3J5PSIvb3JnLmVjbGlwc2Uuc3RlbS51aS5zb2x2ZXJzLnJrL3NyYyINCisgICAgbW9kZWxQbHVnaW5JRD0ib3JnLmVjbGlwc2Uuc3RlbS5zb2x2ZXJzLnJrIiBtb2RlbE5hbWU9IlJrIiB0ZXN0c0RpcmVjdG9yeT0iL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuc29sdmVycy5yay9zcmMiDQorICAgIGltcG9ydGVySUQ9Im9yZy5lY2xpcHNlLmVtZi5pbXBvcnRlci5lY29yZSIgY29tcGxpYW5jZUxldmVsPSI2LjAiIGNvcHlyaWdodEZpZWxkcz0iZmFsc2UiDQorICAgIHVzZWRHZW5QYWNrYWdlcz0iLi4vLi4vb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL21vZGVsL2NvcmUuZ2VubW9kZWwjLy9jb21tb24gLi4vLi4vb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL21vZGVsL2NvcmUuZ2VubW9kZWwjLy9ncmFwaCAuLi8uLi9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvbW9kZWwvY29yZS5nZW5tb2RlbCMvL21vZGVsIC4uLy4uL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9tb2RlbC9jb3JlLmdlbm1vZGVsIy8vbW9kaWZpZXIgLi4vLi4vb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL21vZGVsL2NvcmUuZ2VubW9kZWwjLy9zY2VuYXJpbyAuLi8uLi9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvbW9kZWwvY29yZS5nZW5tb2RlbCMvL3NlcXVlbmNlciAuLi8uLi9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvbW9kZWwvY29yZS5nZW5tb2RlbCMvL3NvbHZlciBwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLmVtZi5lY29yZS9tb2RlbC9FY29yZS5nZW5tb2RlbCMvL2Vjb3JlIj4NCisgIDxmb3JlaWduTW9kZWw+cmsuZWNvcmU8L2ZvcmVpZ25Nb2RlbD4NCisgIDxnZW5QYWNrYWdlcyBwcmVmaXg9IlJrIiBiYXNlUGFja2FnZT0ib3JnLmVjbGlwc2Uuc3RlbS5zb2x2ZXJzIiBkaXNwb3NhYmxlUHJvdmlkZXJGYWN0b3J5PSJ0cnVlIg0KKyAgICAgIGVjb3JlUGFja2FnZT0icmsuZWNvcmUjLyI+DQorICAgIDxnZW5DbGFzc2VzIGVjb3JlQ2xhc3M9InJrLmVjb3JlIy8vUnVuZ2VLdXR0YSI+DQorICAgICAgPGdlbkZlYXR1cmVzIGNyZWF0ZUNoaWxkPSJmYWxzZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFQXR0cmlidXRlIHJrLmVjb3JlIy8vUnVuZ2VLdXR0YS9yZWxhdGl2ZVRvbGVyYW5jZSIvPg0KKyAgICA8L2dlbkNsYXNzZXM+DQorICA8L2dlblBhY2thZ2VzPg0KKzwvZ2VubW9kZWw6R2VuTW9kZWw+DQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnNvbHZlcnMucmsvcGx1Z2luLnByb3BlcnRpZXMgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uc29sdmVycy5yay9wbHVnaW4ucHJvcGVydGllcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YTQ2YmM0Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnNvbHZlcnMucmsvcGx1Z2luLnByb3BlcnRpZXMKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnNvbHZlcnMucmsvcGx1Z2luLnhtbCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5zb2x2ZXJzLnJrL3BsdWdpbi54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDc3ZWUwOQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5zb2x2ZXJzLnJrL3BsdWdpbi54bWwKQEAgLTAsMCArMSw0MyBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4NCis8P2VjbGlwc2UgdmVyc2lvbj0iMy4wIj8+DQorDQorPCEtLQ0KKyA8Y29weXJpZ2h0Pg0KKyA8L2NvcHlyaWdodD4NCisNCisgJElkJA0KKy0tPg0KKw0KKzxwbHVnaW4+DQorDQorICAgPGV4dGVuc2lvbiBwb2ludD0ib3JnLmVjbGlwc2UuZW1mLmVjb3JlLmdlbmVyYXRlZF9wYWNrYWdlIj4NCisgICAgICA8cGFja2FnZQ0KKyAgICAgICAgICAgIHVyaT0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL3NvbHZlcnMvcmsiDQorICAgICAgICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLnN0ZW0uc29sdmVycy5yay5Sa1BhY2thZ2UiDQorICAgICAgICAgICAgZ2VuTW9kZWw9Im1vZGVsL3JrLmdlbm1vZGVsIi8+DQorICAgPC9leHRlbnNpb24+DQorICAgPGV4dGVuc2lvbg0KKyAgICAgICAgIHBvaW50PSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc29sdmVyIj4NCisgICAgICA8Y2xhc3NkZWYNCisgICAgICAgICAgICBjbGFzcz0ib3JnLmVjbGlwc2Uuc3RlbS5zb2x2ZXJzLnJrLmltcGwuUnVuZ2VLdXR0YUltcGwiPg0KKyAgICAgIDwvY2xhc3NkZWY+DQorICAgICAgPGR1Ymxpbl9jb3JlDQorICAgICAgICAgICAgY2F0ZWdvcnlfaWQ9Ii8iDQorICAgICAgICAgICAgaWRlbnRpZmllcj0ib3JnLmVjbGlwc2Uuc3RlbS5zb2x2ZXJzLnJrLmR1Ymxpbl9jb3JlMiINCisgICAgICAgICAgICB0aXRsZT0ib3JnLmVjbGlwc2Uuc3RlbS5zb2x2ZXJzLnJrLmR1Ymxpbl9jb3JlMiI+DQorICAgICAgPC9kdWJsaW5fY29yZT4NCisgICA8L2V4dGVuc2lvbj4NCisgICA8ZXh0ZW5zaW9uDQorICAgICAgICAgcG9pbnQ9Im9yZy5lY2xpcHNlLmVtZi5lZGl0Lml0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3JpZXMiPg0KKyAgICAgIDxmYWN0b3J5DQorICAgICAgICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLnN0ZW0uc29sdmVycy5yay5wcm92aWRlci5Sa0l0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5Ig0KKyAgICAgICAgICAgIHVyaT0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL3NvbHZlcnMvcmsiDQorICAgICAgICAgICAgc3VwcG9ydGVkVHlwZXM9DQorICAgICAgICAgICAgICAib3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUVkaXRpbmdEb21haW5JdGVtUHJvdmlkZXINCisgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JU3RydWN0dXJlZEl0ZW1Db250ZW50UHJvdmlkZXINCisgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JVHJlZUl0ZW1Db250ZW50UHJvdmlkZXINCisgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbUxhYmVsUHJvdmlkZXINCisgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbVByb3BlcnR5U291cmNlIj4NCisgICAgICA8L2ZhY3Rvcnk+DQorICAgPC9leHRlbnNpb24+DQorPC9wbHVnaW4+DQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnNvbHZlcnMucmsvcGx1Z2luX2RlLnByb3BlcnRpZXMgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uc29sdmVycy5yay9wbHVnaW5fZGUucHJvcGVydGllcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZDNmNTQ0Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnNvbHZlcnMucmsvcGx1Z2luX2RlLnByb3BlcnRpZXMKQEAgLTAsMCArMSw0NSBAQAorCisjLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyMgKiBDb3B5cmlnaHQgKGMpIDIwMDkgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisjICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworIyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorIyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisjICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyMgKgorIyAqIENvbnRyaWJ1dG9yczoKKyMgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisjICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyMgVG8gY29kZSBkZXZlbG9wZXI6CisjICAgRG8gTk9UIGNoYW5nZSB0aGUgcHJvcGVydGllcyBiZXR3ZWVuIHRoaXMgbGluZSBhbmQgdGhlCisjICAgIiUlJSBFTkQgT0YgVFJBTlNMQVRFRCBQUk9QRVJUSUVTICUlJSIgbGluZS4KKyMgICBNYWtlIGEgbmV3IHByb3BlcnR5IG5hbWUsIGFwcGVuZCB0byB0aGUgZW5kIG9mIHRoZSBmaWxlIGFuZCBjaGFuZ2UKKyMgICB0aGUgY29kZSB0byB1c2UgdGhlIG5ldyBwcm9wZXJ0eS4KKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorIyAlJSUgRU5EIE9GIFRSQU5TTEFURUQgUFJPUEVSVElFUyAlJSUKKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworCitwbHVnaW5OYW1lPVNURU0gUnVuZ2UtS3V0dGEtR2xlaWNodW5nc2xcdTAwZjZzZXIKK3Byb3ZpZGVyTmFtZT1FY2xpcHNlLm9yZworX1VJX0NyZWF0ZUNoaWxkX3RleHQ9ezB9CitfVUlfQ3JlYXRlQ2hpbGRfdGV4dDI9ezF9IHswfQorX1VJX0NyZWF0ZUNoaWxkX3RleHQzPXsxfQorX1VJX0NyZWF0ZUNoaWxkX3Rvb2x0aXA9TmV1ZXMgezB9IHVudGVyIHsxfSBGZWF0dXJlIGVyc3RlbGxlbgorX1VJX0NyZWF0ZUNoaWxkX2Rlc2NyaXB0aW9uPU5ldWVzIEtpbmQgdm9tIFR5cCB7MH0gZlx1MDBmY3IgZGFzIHsxfSBNZXJrbWFsIGRlciBhdXNnZXdcdTAwZTRobHRlbiB7Mn0gZXJzdGVsbGVuCitfVUlfQ3JlYXRlU2libGluZ19kZXNjcmlwdGlvbj1OZXVlcyBHZXNjaHdpc3RlcnRlaWwgdm9tIFR5cCB7MH0gZlx1MDBmY3IgZGVuIGF1c2dld1x1MDBlNGhsdGVuIHsyfSB1bnRlciBkZW0gezF9IE1lcmttYWwgZGVzIEVsdGVybnRlaWwgZXJzdGVsbGVuCisKK19VSV9Qcm9wZXJ0eURlc2NyaXB0b3JfZGVzY3JpcHRpb249ezB9IHZvbiB7MX0KKworX1VJX1J1bmdlS3V0dGFfdHlwZT1SdW5nZSBLdXR0YQorX1VJX1Vua25vd25fdHlwZT1PYmpla3QKKworX1VJX1Vua25vd25fZGF0YXR5cGU9V2VydAorCitfVUlfUnVuZ2VLdXR0YV9yZWxhdGl2ZVRvbGVyYW5jZV9mZWF0dXJlPVJlbGF0aXZlIFRvbGVyYW56CitfVUlfVW5rbm93bl9mZWF0dXJlPU5pY2h0IHNwZXppZml6aWVydAorCisKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5zb2x2ZXJzLnJrL3BsdWdpbl9rci5wcm9wZXJ0aWVzIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnNvbHZlcnMucmsvcGx1Z2luX2tyLnByb3BlcnRpZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmZjNTg0ZgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5zb2x2ZXJzLnJrL3BsdWdpbl9rci5wcm9wZXJ0aWVzCkBAIC0wLDAgKzEsNDUgQEAKKworIy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjICogQ29weXJpZ2h0IChjKSAyMDA5IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorIyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyMgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyMgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorIyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisjICoKKyMgKiBDb250cmlidXRvcnM6CisjICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorIyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisjIFRvIGNvZGUgZGV2ZWxvcGVyOgorIyAgIERvIE5PVCBjaGFuZ2UgdGhlIHByb3BlcnRpZXMgYmV0d2VlbiB0aGlzIGxpbmUgYW5kIHRoZQorIyAgICIlJSUgRU5EIE9GIFRSQU5TTEFURUQgUFJPUEVSVElFUyAlJSUiIGxpbmUuCisjICAgTWFrZSBhIG5ldyBwcm9wZXJ0eSBuYW1lLCBhcHBlbmQgdG8gdGhlIGVuZCBvZiB0aGUgZmlsZSBhbmQgY2hhbmdlCisjICAgdGhlIGNvZGUgdG8gdXNlIHRoZSBuZXcgcHJvcGVydHkuCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyMgJSUlIEVORCBPRiBUUkFOU0xBVEVEIFBST1BFUlRJRVMgJSUlCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKworcGx1Z2luTmFtZT1TVEVNIFx1YjdmMFx1YzljMCBLdXR0YSBcdWQ1NzRcdWFjYjBcdWMwYWMKK3Byb3ZpZGVyTmFtZT1FY2xpcHNlLm9yZworX1VJX0NyZWF0ZUNoaWxkX3RleHQ9ezB9CitfVUlfQ3JlYXRlQ2hpbGRfdGV4dDI9ezF9IHswfQorX1VJX0NyZWF0ZUNoaWxkX3RleHQzPXsxfQorX1VJX0NyZWF0ZUNoaWxkX3Rvb2x0aXA9ezF9IFx1YWUzMFx1YjJhNSBcdWQ1NThcdWM1ZDAgXHVjMGM4IHswfSBcdWI5Y2NcdWI0ZTRcdWFlMzAKK19VSV9DcmVhdGVDaGlsZF9kZXNjcmlwdGlvbj1cdWMxMjBcdWQwZGRcdWQ1NWMgezJ9XHVjNzU4IHsxfSBcdWFlMzBcdWIyYTVcdWM1ZDAgXHViMzAwXHVkNTVjIFx1ZDYxNVx1YzJkZCB7MH1cdWM3NTggXHVjMGM4XHViODVjXHVjNmI0IENoaWxkXHViOTdjIFx1YjljY1x1YjRlZFx1YjJjOFx1YjJlNC4KK19VSV9DcmVhdGVTaWJsaW5nX2Rlc2NyaXB0aW9uPVx1YmQ4MFx1YmFhOFx1Yzc1OCBcdWMxMjBcdWQwZGRcdWI0MWMgezJ9XHVjNWQwXHVjMTFjIHsxfSBcdWFlMzBcdWIyYTVcdWM1ZDAgXHViMzAwXHVkNTVjIFx1ZDYxNVx1YzJkZCB7MH1cdWM3NTggXHVjMGM4XHViODVjXHVjNmI0IFx1ZDYxNVx1YzgxY1x1Yjk3YyBcdWI5Y2NcdWI0ZWRcdWIyYzhcdWIyZTQuCisKK19VSV9Qcm9wZXJ0eURlc2NyaXB0b3JfZGVzY3JpcHRpb249ezF9IFx1YzkxMSB7MH0KKworX1VJX1J1bmdlS3V0dGFfdHlwZT1SdW5nZSBLdXR0YQorX1VJX1Vua25vd25fdHlwZT1cdWFjMWNcdWNjYjQKKworX1VJX1Vua25vd25fZGF0YXR5cGU9XHVhYzEyCisKK19VSV9SdW5nZUt1dHRhX3JlbGF0aXZlVG9sZXJhbmNlX2ZlYXR1cmU9XHVjMGMxXHViMzAwXHVjODAxIFx1YjBiNFx1YzEzMQorX1VJX1Vua25vd25fZmVhdHVyZT1cdWM5YzBcdWM4MTVcdWI0MThcdWM5YzAgXHVjNTRhXHVjNzRjCisKKwpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnNvbHZlcnMucmsvcGx1Z2luX3poLnByb3BlcnRpZXMgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uc29sdmVycy5yay9wbHVnaW5femgucHJvcGVydGllcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYmFjMWMyCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnNvbHZlcnMucmsvcGx1Z2luX3poLnByb3BlcnRpZXMKQEAgLTAsMCArMSw0NSBAQAorCisjLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyMgKiBDb3B5cmlnaHQgKGMpIDIwMDkgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisjICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworIyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorIyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisjICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyMgKgorIyAqIENvbnRyaWJ1dG9yczoKKyMgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisjICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyMgVG8gY29kZSBkZXZlbG9wZXI6CisjICAgRG8gTk9UIGNoYW5nZSB0aGUgcHJvcGVydGllcyBiZXR3ZWVuIHRoaXMgbGluZSBhbmQgdGhlCisjICAgIiUlJSBFTkQgT0YgVFJBTlNMQVRFRCBQUk9QRVJUSUVTICUlJSIgbGluZS4KKyMgICBNYWtlIGEgbmV3IHByb3BlcnR5IG5hbWUsIGFwcGVuZCB0byB0aGUgZW5kIG9mIHRoZSBmaWxlIGFuZCBjaGFuZ2UKKyMgICB0aGUgY29kZSB0byB1c2UgdGhlIG5ldyBwcm9wZXJ0eS4KKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorIyAlJSUgRU5EIE9GIFRSQU5TTEFURUQgUFJPUEVSVElFUyAlJSUKKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworCitwbHVnaW5OYW1lPVNURU1cdTlmOTlcdTY4M2NcdTVlOTNcdTU4NTRcdTZjNDJcdTg5ZTMKK3Byb3ZpZGVyTmFtZT1FY2xpcHNlLm9yZworX1VJX0NyZWF0ZUNoaWxkX3RleHQ9ezB9CitfVUlfQ3JlYXRlQ2hpbGRfdGV4dDI9ezF9IHswfQorX1VJX0NyZWF0ZUNoaWxkX3RleHQzPXsxfQorX1VJX0NyZWF0ZUNoaWxkX3Rvb2x0aXA9XHU1MjFiXHU1ZWZhXHU1NzI4ezF9IHswfVx1NjViMFx1NTI5Zlx1ODBmZAorX1VJX0NyZWF0ZUNoaWxkX2Rlc2NyaXB0aW9uPVx1NGUzYVx1OTAwOVx1NWI5YVx1NzY4NHsyfVx1NzY4NHsxfVx1NzI3OVx1NjAyN1x1Njc2NVx1NTIxYlx1NWVmYVx1NGUwMFx1NGUyYVx1NjViMFx1NzY4NHswfVx1NWI1MFx1N2M3YgorX1VJX0NyZWF0ZVNpYmxpbmdfZGVzY3JpcHRpb249XHU1NzI4ezF9XHU3Njg0XHU3MjM2XHU5NmM2XHU0ZTJkXHU0ZTNhXHU5MDA5XHU1YjlhXHU3Njg0ezJ9XHU2NzY1XHU1MjFiXHU1ZWZhXHU0ZTAwXHU0ZTJhezB9XHU3YzdiXHU1NzhiXHU3Njg0XHU2NWIwXHU3Njg0XHU1MTQ0XHU1ZjFmXHU3YzdiCisKK19VSV9Qcm9wZXJ0eURlc2NyaXB0b3JfZGVzY3JpcHRpb249ezB9XHU0ZWNlXHU1YzVlezF9CisKK19VSV9SdW5nZUt1dHRhX3R5cGU9XHU5Zjk5XHU2ODNjXHU1ZTkzXHU1ODU0CitfVUlfVW5rbm93bl90eXBlPVx1NWJmOVx1OGM2MQorCitfVUlfVW5rbm93bl9kYXRhdHlwZT1cdTRlZjdcdTUwM2MKKworX1VJX1J1bmdlS3V0dGFfcmVsYXRpdmVUb2xlcmFuY2VfZmVhdHVyZT1cdTc2ZjhcdTViZjlcdTUxNmNcdTVkZWUKK19VSV9Vbmtub3duX2ZlYXR1cmU9XHU2NzJhXHU2MzA3XHU1YjlhCisKKwpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnNvbHZlcnMucmsvc3JjL29yZy9lY2xpcHNlL3N0ZW0vc29sdmVycy9yay9Sa0ZhY3RvcnkuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5zb2x2ZXJzLnJrL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3NvbHZlcnMvcmsvUmtGYWN0b3J5LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzdmZmZjZQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5zb2x2ZXJzLnJrL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3NvbHZlcnMvcmsvUmtGYWN0b3J5LmphdmEKQEAgLTAsMCArMSw1MSBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnNvbHZlcnMucms7DQorDQorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisgKiBDb3B5cmlnaHQgKGMpIDIwMDkgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuDQorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscw0KKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMA0KKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0DQorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwNCisgKg0KKyAqIENvbnRyaWJ1dG9yczoNCisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uDQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQorDQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FRmFjdG9yeTsNCisNCisvKioNCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKyAqIFRoZSA8Yj5GYWN0b3J5PC9iPiBmb3IgdGhlIG1vZGVsLg0KKyAqIEl0IHByb3ZpZGVzIGEgY3JlYXRlIG1ldGhvZCBmb3IgZWFjaCBub24tYWJzdHJhY3QgY2xhc3Mgb2YgdGhlIG1vZGVsLg0KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKyAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5zb2x2ZXJzLnJrLlJrUGFja2FnZQ0KKyAqIEBnZW5lcmF0ZWQNCisgKi8NCitwdWJsaWMgaW50ZXJmYWNlIFJrRmFjdG9yeSBleHRlbmRzIEVGYWN0b3J5IHsNCisJLyoqDQorCSAqIFRoZSBzaW5nbGV0b24gaW5zdGFuY2Ugb2YgdGhlIGZhY3RvcnkuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlSa0ZhY3RvcnkgZUlOU1RBTkNFID0gb3JnLmVjbGlwc2Uuc3RlbS5zb2x2ZXJzLnJrLmltcGwuUmtGYWN0b3J5SW1wbC5pbml0KCk7DQorDQorCS8qKg0KKwkgKiBSZXR1cm5zIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPlJ1bmdlIEt1dHRhPC9lbT4nLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHJldHVybiBhIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5SdW5nZSBLdXR0YTwvZW0+Jy4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJUnVuZ2VLdXR0YSBjcmVhdGVSdW5nZUt1dHRhKCk7DQorDQorCS8qKg0KKwkgKiBSZXR1cm5zIHRoZSBwYWNrYWdlIHN1cHBvcnRlZCBieSB0aGlzIGZhY3RvcnkuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcmV0dXJuIHRoZSBwYWNrYWdlIHN1cHBvcnRlZCBieSB0aGlzIGZhY3RvcnkuDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCVJrUGFja2FnZSBnZXRSa1BhY2thZ2UoKTsNCisNCit9IC8vUmtGYWN0b3J5DQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnNvbHZlcnMucmsvc3JjL29yZy9lY2xpcHNlL3N0ZW0vc29sdmVycy9yay9Sa1BhY2thZ2UuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5zb2x2ZXJzLnJrL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3NvbHZlcnMvcmsvUmtQYWNrYWdlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjE2NzQ0YQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5zb2x2ZXJzLnJrL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3NvbHZlcnMvcmsvUmtQYWNrYWdlLmphdmEKQEAgLTAsMCArMSwxOTUgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5zb2x2ZXJzLnJrOw0KKw0KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorICogQ29weXJpZ2h0IChjKSAyMDA5IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLg0KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMNCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjANCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdA0KKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sDQorICoNCisgKiBDb250cmlidXRvcnM6DQorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbg0KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KKw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUF0dHJpYnV0ZTsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzczsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVQYWNrYWdlOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc29sdmVyLlNvbHZlclBhY2thZ2U7DQorDQorLyoqDQorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisgKiBUaGUgPGI+UGFja2FnZTwvYj4gZm9yIHRoZSBtb2RlbC4NCisgKiBJdCBjb250YWlucyBhY2Nlc3NvcnMgZm9yIHRoZSBtZXRhIG9iamVjdHMgdG8gcmVwcmVzZW50DQorICogPHVsPg0KKyAqICAgPGxpPmVhY2ggY2xhc3MsPC9saT4NCisgKiAgIDxsaT5lYWNoIGZlYXR1cmUgb2YgZWFjaCBjbGFzcyw8L2xpPg0KKyAqICAgPGxpPmVhY2ggZW51bSw8L2xpPg0KKyAqICAgPGxpPmFuZCBlYWNoIGRhdGEgdHlwZTwvbGk+DQorICogPC91bD4NCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uc29sdmVycy5yay5Sa0ZhY3RvcnkNCisgKiBAbW9kZWwga2luZD0icGFja2FnZSINCisgKiBAZ2VuZXJhdGVkDQorICovDQorcHVibGljIGludGVyZmFjZSBSa1BhY2thZ2UgZXh0ZW5kcyBFUGFja2FnZSB7DQorCS8qKg0KKwkgKiBUaGUgcGFja2FnZSBuYW1lLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJU3RyaW5nIGVOQU1FID0gInJrIjsNCisNCisJLyoqDQorCSAqIFRoZSBwYWNrYWdlIG5hbWVzcGFjZSBVUkkuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlTdHJpbmcgZU5TX1VSSSA9ICJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vc29sdmVycy9yayI7DQorDQorCS8qKg0KKwkgKiBUaGUgcGFja2FnZSBuYW1lc3BhY2UgbmFtZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCVN0cmluZyBlTlNfUFJFRklYID0gIm9yZy5lY2xpcHNlLnN0ZW0uc29sdmVycy5yayI7DQorDQorCS8qKg0KKwkgKiBUaGUgc2luZ2xldG9uIGluc3RhbmNlIG9mIHRoZSBwYWNrYWdlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJUmtQYWNrYWdlIGVJTlNUQU5DRSA9IG9yZy5lY2xpcHNlLnN0ZW0uc29sdmVycy5yay5pbXBsLlJrUGFja2FnZUltcGwuaW5pdCgpOw0KKw0KKwkvKioNCisJICogVGhlIG1ldGEgb2JqZWN0IGlkIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLnNvbHZlcnMucmsuaW1wbC5SdW5nZUt1dHRhSW1wbCA8ZW0+UnVuZ2UgS3V0dGE8L2VtPn0nIGNsYXNzLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnNvbHZlcnMucmsuaW1wbC5SdW5nZUt1dHRhSW1wbA0KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uc29sdmVycy5yay5pbXBsLlJrUGFja2FnZUltcGwjZ2V0UnVuZ2VLdXR0YSgpDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCWludCBSVU5HRV9LVVRUQSA9IDA7DQorDQorCS8qKg0KKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VVJJPC9iPjwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqIEBvcmRlcmVkDQorCSAqLw0KKwlpbnQgUlVOR0VfS1VUVEFfX1VSSSA9IFNvbHZlclBhY2thZ2UuU09MVkVSX19VUkk7DQorDQorCS8qKg0KKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VHlwZSBVUkk8L2I+PC9lbT4nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCWludCBSVU5HRV9LVVRUQV9fVFlQRV9VUkkgPSBTb2x2ZXJQYWNrYWdlLlNPTFZFUl9fVFlQRV9VUkk7DQorDQorCS8qKg0KKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RHVibGluIENvcmU8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCWludCBSVU5HRV9LVVRUQV9fRFVCTElOX0NPUkUgPSBTb2x2ZXJQYWNrYWdlLlNPTFZFUl9fRFVCTElOX0NPUkU7DQorDQorCS8qKg0KKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RGVjb3JhdG9yczwvYj48L2VtPicgcmVmZXJlbmNlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJaW50IFJVTkdFX0tVVFRBX19ERUNPUkFUT1JTID0gU29sdmVyUGFja2FnZS5TT0xWRVJfX0RFQ09SQVRPUlM7DQorDQorCS8qKg0KKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+UmVsYXRpdmUgVG9sZXJhbmNlPC9iPjwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqIEBvcmRlcmVkDQorCSAqLw0KKwlpbnQgUlVOR0VfS1VUVEFfX1JFTEFUSVZFX1RPTEVSQU5DRSA9IFNvbHZlclBhY2thZ2UuU09MVkVSX0ZFQVRVUkVfQ09VTlQgKyAwOw0KKw0KKwkvKioNCisJICogVGhlIG51bWJlciBvZiBzdHJ1Y3R1cmFsIGZlYXR1cmVzIG9mIHRoZSAnPGVtPlJ1bmdlIEt1dHRhPC9lbT4nIGNsYXNzLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJaW50IFJVTkdFX0tVVFRBX0ZFQVRVUkVfQ09VTlQgPSBTb2x2ZXJQYWNrYWdlLlNPTFZFUl9GRUFUVVJFX0NPVU5UICsgMTsNCisNCisNCisJLyoqDQorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uc29sdmVycy5yay5SdW5nZUt1dHRhIDxlbT5SdW5nZSBLdXR0YTwvZW0+fScuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJzxlbT5SdW5nZSBLdXR0YTwvZW0+Jy4NCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnNvbHZlcnMucmsuUnVuZ2VLdXR0YQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlFQ2xhc3MgZ2V0UnVuZ2VLdXR0YSgpOw0KKw0KKwkvKioNCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLnNvbHZlcnMucmsuUnVuZ2VLdXR0YSNnZXRSZWxhdGl2ZVRvbGVyYW5jZSA8ZW0+UmVsYXRpdmUgVG9sZXJhbmNlPC9lbT59Jy4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+UmVsYXRpdmUgVG9sZXJhbmNlPC9lbT4nLg0KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uc29sdmVycy5yay5SdW5nZUt1dHRhI2dldFJlbGF0aXZlVG9sZXJhbmNlKCkNCisJICogQHNlZSAjZ2V0UnVuZ2VLdXR0YSgpDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCUVBdHRyaWJ1dGUgZ2V0UnVuZ2VLdXR0YV9SZWxhdGl2ZVRvbGVyYW5jZSgpOw0KKw0KKwkvKioNCisJICogUmV0dXJucyB0aGUgZmFjdG9yeSB0aGF0IGNyZWF0ZXMgdGhlIGluc3RhbmNlcyBvZiB0aGUgbW9kZWwuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcmV0dXJuIHRoZSBmYWN0b3J5IHRoYXQgY3JlYXRlcyB0aGUgaW5zdGFuY2VzIG9mIHRoZSBtb2RlbC4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJUmtGYWN0b3J5IGdldFJrRmFjdG9yeSgpOw0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogRGVmaW5lcyBsaXRlcmFscyBmb3IgdGhlIG1ldGEgb2JqZWN0cyB0aGF0IHJlcHJlc2VudA0KKwkgKiA8dWw+DQorCSAqICAgPGxpPmVhY2ggY2xhc3MsPC9saT4NCisJICogICA8bGk+ZWFjaCBmZWF0dXJlIG9mIGVhY2ggY2xhc3MsPC9saT4NCisJICogICA8bGk+ZWFjaCBlbnVtLDwvbGk+DQorCSAqICAgPGxpPmFuZCBlYWNoIGRhdGEgdHlwZTwvbGk+DQorCSAqIDwvdWw+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlpbnRlcmZhY2UgTGl0ZXJhbHMgew0KKwkJLyoqDQorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5zb2x2ZXJzLnJrLmltcGwuUnVuZ2VLdXR0YUltcGwgPGVtPlJ1bmdlIEt1dHRhPC9lbT59JyBjbGFzcy4NCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5zb2x2ZXJzLnJrLmltcGwuUnVuZ2VLdXR0YUltcGwNCisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5zb2x2ZXJzLnJrLmltcGwuUmtQYWNrYWdlSW1wbCNnZXRSdW5nZUt1dHRhKCkNCisJCSAqIEBnZW5lcmF0ZWQNCisJCSAqLw0KKwkJRUNsYXNzIFJVTkdFX0tVVFRBID0gZUlOU1RBTkNFLmdldFJ1bmdlS3V0dGEoKTsNCisNCisJCS8qKg0KKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPlJlbGF0aXZlIFRvbGVyYW5jZTwvYj48L2VtPicgYXR0cmlidXRlIGZlYXR1cmUuDQorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCQkgKiBAZ2VuZXJhdGVkDQorCQkgKi8NCisJCUVBdHRyaWJ1dGUgUlVOR0VfS1VUVEFfX1JFTEFUSVZFX1RPTEVSQU5DRSA9IGVJTlNUQU5DRS5nZXRSdW5nZUt1dHRhX1JlbGF0aXZlVG9sZXJhbmNlKCk7DQorDQorCX0NCisNCit9IC8vUmtQYWNrYWdlDQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnNvbHZlcnMucmsvc3JjL29yZy9lY2xpcHNlL3N0ZW0vc29sdmVycy9yay9SdW5nZUt1dHRhLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uc29sdmVycy5yay9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9zb2x2ZXJzL3JrL1J1bmdlS3V0dGEuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZWY2MTY2Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnNvbHZlcnMucmsvc3JjL29yZy9lY2xpcHNlL3N0ZW0vc29sdmVycy9yay9SdW5nZUt1dHRhLmphdmEKQEAgLTAsMCArMSw2MyBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnNvbHZlcnMucms7DQorDQorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisgKiBDb3B5cmlnaHQgKGMpIDIwMDkgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuDQorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscw0KKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMA0KKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0DQorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwNCisgKg0KKyAqIENvbnRyaWJ1dG9yczoNCisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uDQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQorDQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zb2x2ZXIuU29sdmVyOw0KKw0KKy8qKg0KKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorICogQSByZXByZXNlbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+UnVuZ2UgS3V0dGE8L2I+PC9lbT4nLg0KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKyAqDQorICogPHA+DQorICogVGhlIGZvbGxvd2luZyBmZWF0dXJlcyBhcmUgc3VwcG9ydGVkOg0KKyAqIDx1bD4NCisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5zb2x2ZXJzLnJrLlJ1bmdlS3V0dGEjZ2V0UmVsYXRpdmVUb2xlcmFuY2UgPGVtPlJlbGF0aXZlIFRvbGVyYW5jZTwvZW0+fTwvbGk+DQorICogPC91bD4NCisgKiA8L3A+DQorICoNCisgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uc29sdmVycy5yay5Sa1BhY2thZ2UjZ2V0UnVuZ2VLdXR0YSgpDQorICogQG1vZGVsDQorICogQGdlbmVyYXRlZA0KKyAqLw0KK3B1YmxpYyBpbnRlcmZhY2UgUnVuZ2VLdXR0YSBleHRlbmRzIFNvbHZlciB7DQorCQ0KKwlwdWJsaWMgZmluYWwgc3RhdGljIFN0cmluZyBVUklfVFlQRV9TT0xWRVJfU0VHTUVOVCA9ICJSdW5nZUt1dHRhU29sdmVyIjsNCisJDQorCS8qKg0KKwkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5SZWxhdGl2ZSBUb2xlcmFuY2U8L2I+PC9lbT4nIGF0dHJpYnV0ZS4NCisJICogVGhlIGRlZmF1bHQgdmFsdWUgaXMgPGNvZGU+IjFFLTkiPC9jb2RlPi4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPHA+DQorCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPlJlbGF0aXZlIFRvbGVyYW5jZTwvZW0+JyBhdHRyaWJ1dGUgaXNuJ3QgY2xlYXIsDQorCSAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4NCisJICogPC9wPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+UmVsYXRpdmUgVG9sZXJhbmNlPC9lbT4nIGF0dHJpYnV0ZS4NCisJICogQHNlZSAjc2V0UmVsYXRpdmVUb2xlcmFuY2UoZG91YmxlKQ0KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uc29sdmVycy5yay5Sa1BhY2thZ2UjZ2V0UnVuZ2VLdXR0YV9SZWxhdGl2ZVRvbGVyYW5jZSgpDQorCSAqIEBtb2RlbCBkZWZhdWx0PSIxRS05Ig0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlkb3VibGUgZ2V0UmVsYXRpdmVUb2xlcmFuY2UoKTsNCisNCisJLyoqDQorCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uc29sdmVycy5yay5SdW5nZUt1dHRhI2dldFJlbGF0aXZlVG9sZXJhbmNlIDxlbT5SZWxhdGl2ZSBUb2xlcmFuY2U8L2VtPn0nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPlJlbGF0aXZlIFRvbGVyYW5jZTwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIEBzZWUgI2dldFJlbGF0aXZlVG9sZXJhbmNlKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJdm9pZCBzZXRSZWxhdGl2ZVRvbGVyYW5jZShkb3VibGUgdmFsdWUpOw0KKw0KK30gLy8gUnVuZ2VLdXR0YQ0KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5zb2x2ZXJzLnJrL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3NvbHZlcnMvcmsvaW1wbC9Sa0ZhY3RvcnlJbXBsLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uc29sdmVycy5yay9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9zb2x2ZXJzL3JrL2ltcGwvUmtGYWN0b3J5SW1wbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI5ZjZiN2EKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uc29sdmVycy5yay9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9zb2x2ZXJzL3JrL2ltcGwvUmtGYWN0b3J5SW1wbC5qYXZhCkBAIC0wLDAgKzEsMTAzIEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uc29sdmVycy5yay5pbXBsOw0KKw0KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorICogQ29weXJpZ2h0IChjKSAyMDA5IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLg0KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMNCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjANCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdA0KKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sDQorICoNCisgKiBDb250cmlidXRvcnM6DQorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbg0KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KKw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdDsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVQYWNrYWdlOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuaW1wbC5FRmFjdG9yeUltcGw7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5wbHVnaW4uRWNvcmVQbHVnaW47DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uc29sdmVycy5yay5Sa0ZhY3Rvcnk7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uc29sdmVycy5yay5Sa1BhY2thZ2U7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uc29sdmVycy5yay5SdW5nZUt1dHRhOw0KKw0KKy8qKg0KKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorICogQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIG1vZGVsIDxiPkZhY3Rvcnk8L2I+Lg0KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKyAqIEBnZW5lcmF0ZWQNCisgKi8NCitwdWJsaWMgY2xhc3MgUmtGYWN0b3J5SW1wbCBleHRlbmRzIEVGYWN0b3J5SW1wbCBpbXBsZW1lbnRzIFJrRmFjdG9yeSB7DQorCS8qKg0KKwkgKiBDcmVhdGVzIHRoZSBkZWZhdWx0IGZhY3RvcnkgaW1wbGVtZW50YXRpb24uDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgc3RhdGljIFJrRmFjdG9yeSBpbml0KCkgew0KKwkJdHJ5IHsNCisJCQlSa0ZhY3RvcnkgdGhlUmtGYWN0b3J5ID0gKFJrRmFjdG9yeSlFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFRmFjdG9yeSgiaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL3NvbHZlcnMvcmsiKTsgDQorCQkJaWYgKHRoZVJrRmFjdG9yeSAhPSBudWxsKSB7DQorCQkJCXJldHVybiB0aGVSa0ZhY3Rvcnk7DQorCQkJfQ0KKwkJfQ0KKwkJY2F0Y2ggKEV4Y2VwdGlvbiBleGNlcHRpb24pIHsNCisJCQlFY29yZVBsdWdpbi5JTlNUQU5DRS5sb2coZXhjZXB0aW9uKTsNCisJCX0NCisJCXJldHVybiBuZXcgUmtGYWN0b3J5SW1wbCgpOw0KKwl9DQorDQorCS8qKg0KKwkgKiBDcmVhdGVzIGFuIGluc3RhbmNlIG9mIHRoZSBmYWN0b3J5Lg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIFJrRmFjdG9yeUltcGwoKSB7DQorCQlzdXBlcigpOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJQE92ZXJyaWRlDQorCXB1YmxpYyBFT2JqZWN0IGNyZWF0ZShFQ2xhc3MgZUNsYXNzKSB7DQorCQlzd2l0Y2ggKGVDbGFzcy5nZXRDbGFzc2lmaWVySUQoKSkgew0KKwkJCWNhc2UgUmtQYWNrYWdlLlJVTkdFX0tVVFRBOiByZXR1cm4gY3JlYXRlUnVuZ2VLdXR0YSgpOw0KKwkJCWRlZmF1bHQ6DQorCQkJCXRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIlRoZSBjbGFzcyAnIiArIGVDbGFzcy5nZXROYW1lKCkgKyAiJyBpcyBub3QgYSB2YWxpZCBjbGFzc2lmaWVyIik7DQorCQl9DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgUnVuZ2VLdXR0YSBjcmVhdGVSdW5nZUt1dHRhKCkgew0KKwkJUnVuZ2VLdXR0YUltcGwgcnVuZ2VLdXR0YSA9IG5ldyBSdW5nZUt1dHRhSW1wbCgpOw0KKwkJcmV0dXJuIHJ1bmdlS3V0dGE7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgUmtQYWNrYWdlIGdldFJrUGFja2FnZSgpIHsNCisJCXJldHVybiAoUmtQYWNrYWdlKWdldEVQYWNrYWdlKCk7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZGVwcmVjYXRlZA0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlARGVwcmVjYXRlZA0KKwlwdWJsaWMgc3RhdGljIFJrUGFja2FnZSBnZXRQYWNrYWdlKCkgew0KKwkJcmV0dXJuIFJrUGFja2FnZS5lSU5TVEFOQ0U7DQorCX0NCisNCit9IC8vUmtGYWN0b3J5SW1wbA0KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5zb2x2ZXJzLnJrL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3NvbHZlcnMvcmsvaW1wbC9Sa0pvYi5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnNvbHZlcnMucmsvc3JjL29yZy9lY2xpcHNlL3N0ZW0vc29sdmVycy9yay9pbXBsL1JrSm9iLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2RmMDFhNQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5zb2x2ZXJzLnJrL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3NvbHZlcnMvcmsvaW1wbC9Sa0pvYi5qYXZhCkBAIC0wLDAgKzEsNTYgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5zb2x2ZXJzLnJrLmltcGw7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDkgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKKworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUHJvZ3Jlc3NNb25pdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TdGF0dXM7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLmpvYnMuSm9iOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5TVEVNVGltZTsKKworLyoqCisgKiBBIGpvYiBmb3IgdGhlIGZpbml0ZSBkaWZmZXJlbmNlIHNvbHZlcgorICoKKyAqLworcHVibGljIGNsYXNzIFJrSm9iIGV4dGVuZHMgSm9iIHsKKwkKKwlwdWJsaWMgUmtKb2IoU3RyaW5nIG4sIHNob3J0IHRocmVhZCwgUnVuZ2VLdXR0YUltcGwgcykgeworCQlzdXBlcihuKTsKKwkJdGhpcy50aHJlYWRudW0gPSB0aHJlYWQ7CisJCXRoaXMuc29sdmVyID0gczsKKwl9CisKKwlwcm90ZWN0ZWQgZG91YmxlIHByb2dyZXNzOworCXByb3RlY3RlZCBkb3VibGUgaDsKKwlwcm90ZWN0ZWQgZG91YmxlIHQ7CisJcHJvdGVjdGVkIGRvdWJsZSBtYXhlcnJvcjsKKwlwcm90ZWN0ZWQgUnVuZ2VLdXR0YUltcGwgc29sdmVyOworCQorCXByb3RlY3RlZCBTVEVNVGltZSB0aW1lOworCWxvbmcgdGltZURlbHRhOworCWludCBjeWNsZTsKKwlzaG9ydCB0aHJlYWRudW07CisJCisJcHVibGljIGRvdWJsZSBnZXRQcm9ncmVzcygpIHsKKwkJcmV0dXJuIHRoaXMucHJvZ3Jlc3M7CisJfQorCXB1YmxpYyB2b2lkIHNldFByb2dyZXNzKGRvdWJsZSBwKSB7CisJCXRoaXMucHJvZ3Jlc3MgPSBwOworCX0KKwlwcm90ZWN0ZWQgSVN0YXR1cyBydW4oZmluYWwgSVByb2dyZXNzTW9uaXRvciBtb25pdG9yKSB7CisJCXNvbHZlci5fc3RlcCh0aW1lLHRpbWVEZWx0YSxjeWNsZSx0aHJlYWRudW0pOworCQkKKwkJcmV0dXJuIFN0YXR1cy5PS19TVEFUVVM7CisJfQorfQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnNvbHZlcnMucmsvc3JjL29yZy9lY2xpcHNlL3N0ZW0vc29sdmVycy9yay9pbXBsL1JrUGFja2FnZUltcGwuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5zb2x2ZXJzLnJrL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3NvbHZlcnMvcmsvaW1wbC9Sa1BhY2thZ2VJbXBsLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2QwMjgxZgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5zb2x2ZXJzLnJrL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3NvbHZlcnMvcmsvaW1wbC9Sa1BhY2thZ2VJbXBsLmphdmEKQEAgLTAsMCArMSwyMTMgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5zb2x2ZXJzLnJrLmltcGw7DQorDQorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisgKiBDb3B5cmlnaHQgKGMpIDIwMDkgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuDQorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscw0KKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMA0KKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0DQorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwNCisgKg0KKyAqIENvbnRyaWJ1dG9yczoNCisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uDQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQorDQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQXR0cmlidXRlOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRVBhY2thZ2U7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FY29yZVBhY2thZ2U7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5pbXBsLkVQYWNrYWdlSW1wbDsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5Db21tb25QYWNrYWdlOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguR3JhcGhQYWNrYWdlOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuTW9kZWxQYWNrYWdlOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuTW9kaWZpZXJQYWNrYWdlOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2NlbmFyaW8uU2NlbmFyaW9QYWNrYWdlOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2VxdWVuY2VyLlNlcXVlbmNlclBhY2thZ2U7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zb2x2ZXIuU29sdmVyUGFja2FnZTsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5zb2x2ZXJzLnJrLlJrRmFjdG9yeTsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5zb2x2ZXJzLnJrLlJrUGFja2FnZTsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5zb2x2ZXJzLnJrLlJ1bmdlS3V0dGE7DQorDQorLyoqDQorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisgKiBBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgbW9kZWwgPGI+UGFja2FnZTwvYj4uDQorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorICogQGdlbmVyYXRlZA0KKyAqLw0KK3B1YmxpYyBjbGFzcyBSa1BhY2thZ2VJbXBsIGV4dGVuZHMgRVBhY2thZ2VJbXBsIGltcGxlbWVudHMgUmtQYWNrYWdlIHsNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcml2YXRlIEVDbGFzcyBydW5nZUt1dHRhRUNsYXNzID0gbnVsbDsNCisNCisJLyoqDQorCSAqIENyZWF0ZXMgYW4gaW5zdGFuY2Ugb2YgdGhlIG1vZGVsIDxiPlBhY2thZ2U8L2I+LCByZWdpc3RlcmVkIHdpdGgNCisJICoge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FUGFja2FnZS5SZWdpc3RyeSBFUGFja2FnZS5SZWdpc3RyeX0gYnkgdGhlIHBhY2thZ2UNCisJICogcGFja2FnZSBVUkkgdmFsdWUuDQorCSAqIDxwPk5vdGU6IHRoZSBjb3JyZWN0IHdheSB0byBjcmVhdGUgdGhlIHBhY2thZ2UgaXMgdmlhIHRoZSBzdGF0aWMNCisJICogZmFjdG9yeSBtZXRob2Qge0BsaW5rICNpbml0IGluaXQoKX0sIHdoaWNoIGFsc28gcGVyZm9ybXMNCisJICogaW5pdGlhbGl6YXRpb24gb2YgdGhlIHBhY2thZ2UsIG9yIHJldHVybnMgdGhlIHJlZ2lzdGVyZWQgcGFja2FnZSwNCisJICogaWYgb25lIGFscmVhZHkgZXhpc3RzLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHNlZSBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRVBhY2thZ2UuUmVnaXN0cnkNCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnNvbHZlcnMucmsuUmtQYWNrYWdlI2VOU19VUkkNCisJICogQHNlZSAjaW5pdCgpDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByaXZhdGUgUmtQYWNrYWdlSW1wbCgpIHsNCisJCXN1cGVyKGVOU19VUkksIFJrRmFjdG9yeS5lSU5TVEFOQ0UpOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJpdmF0ZSBzdGF0aWMgYm9vbGVhbiBpc0luaXRlZCA9IGZhbHNlOw0KKw0KKwkvKioNCisJICogQ3JlYXRlcywgcmVnaXN0ZXJzLCBhbmQgaW5pdGlhbGl6ZXMgdGhlIDxiPlBhY2thZ2U8L2I+IGZvciB0aGlzDQorCSAqIG1vZGVsLCBhbmQgZm9yIGFueSBvdGhlcnMgdXBvbiB3aGljaCBpdCBkZXBlbmRzLiAgU2ltcGxlDQorCSAqIGRlcGVuZGVuY2llcyBhcmUgc2F0aXNmaWVkIGJ5IGNhbGxpbmcgdGhpcyBtZXRob2Qgb24gYWxsDQorCSAqIGRlcGVuZGVudCBwYWNrYWdlcyBiZWZvcmUgZG9pbmcgYW55dGhpbmcgZWxzZS4gIFRoaXMgbWV0aG9kIGRyaXZlcw0KKwkgKiBpbml0aWFsaXphdGlvbiBmb3IgaW50ZXJkZXBlbmRlbnQgcGFja2FnZXMgZGlyZWN0bHksIGluIHBhcmFsbGVsDQorCSAqIHdpdGggdGhpcyBwYWNrYWdlLCBpdHNlbGYuDQorCSAqIDxwPk9mIHRoaXMgcGFja2FnZSBhbmQgaXRzIGludGVyZGVwZW5kZW5jaWVzLCBhbGwgcGFja2FnZXMgd2hpY2gNCisJICogaGF2ZSBub3QgeWV0IGJlZW4gcmVnaXN0ZXJlZCBieSB0aGVpciBVUkkgdmFsdWVzIGFyZSBmaXJzdCBjcmVhdGVkDQorCSAqIGFuZCByZWdpc3RlcmVkLiAgVGhlIHBhY2thZ2VzIGFyZSB0aGVuIGluaXRpYWxpemVkIGluIHR3byBzdGVwczoNCisJICogbWV0YS1tb2RlbCBvYmplY3RzIGZvciBhbGwgb2YgdGhlIHBhY2thZ2VzIGFyZSBjcmVhdGVkIGJlZm9yZSBhbnkNCisJICogYXJlIGluaXRpYWxpemVkLCBzaW5jZSBvbmUgcGFja2FnZSdzIG1ldGEtbW9kZWwgb2JqZWN0cyBtYXkgcmVmZXIgdG8NCisJICogdGhvc2Ugb2YgYW5vdGhlci4NCisJICogPHA+SW52b2NhdGlvbiBvZiB0aGlzIG1ldGhvZCB3aWxsIG5vdCBhZmZlY3QgYW55IHBhY2thZ2VzIHRoYXQgaGF2ZQ0KKwkgKiBhbHJlYWR5IGJlZW4gaW5pdGlhbGl6ZWQuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAc2VlICNlTlNfVVJJDQorCSAqIEBzZWUgI2NyZWF0ZVBhY2thZ2VDb250ZW50cygpDQorCSAqIEBzZWUgI2luaXRpYWxpemVQYWNrYWdlQ29udGVudHMoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgc3RhdGljIFJrUGFja2FnZSBpbml0KCkgew0KKwkJaWYgKGlzSW5pdGVkKSByZXR1cm4gKFJrUGFja2FnZSlFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShSa1BhY2thZ2UuZU5TX1VSSSk7DQorDQorCQkvLyBPYnRhaW4gb3IgY3JlYXRlIGFuZCByZWdpc3RlciBwYWNrYWdlDQorCQlSa1BhY2thZ2VJbXBsIHRoZVJrUGFja2FnZSA9IChSa1BhY2thZ2VJbXBsKShFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShlTlNfVVJJKSBpbnN0YW5jZW9mIFJrUGFja2FnZUltcGwgPyBFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShlTlNfVVJJKSA6IG5ldyBSa1BhY2thZ2VJbXBsKCkpOw0KKw0KKwkJaXNJbml0ZWQgPSB0cnVlOw0KKw0KKwkJLy8gSW5pdGlhbGl6ZSBzaW1wbGUgZGVwZW5kZW5jaWVzDQorCQlDb21tb25QYWNrYWdlLmVJTlNUQU5DRS5lQ2xhc3MoKTsNCisJCUdyYXBoUGFja2FnZS5lSU5TVEFOQ0UuZUNsYXNzKCk7DQorCQlNb2RlbFBhY2thZ2UuZUlOU1RBTkNFLmVDbGFzcygpOw0KKwkJTW9kaWZpZXJQYWNrYWdlLmVJTlNUQU5DRS5lQ2xhc3MoKTsNCisJCVNjZW5hcmlvUGFja2FnZS5lSU5TVEFOQ0UuZUNsYXNzKCk7DQorCQlTZXF1ZW5jZXJQYWNrYWdlLmVJTlNUQU5DRS5lQ2xhc3MoKTsNCisJCVNvbHZlclBhY2thZ2UuZUlOU1RBTkNFLmVDbGFzcygpOw0KKw0KKwkJLy8gQ3JlYXRlIHBhY2thZ2UgbWV0YS1kYXRhIG9iamVjdHMNCisJCXRoZVJrUGFja2FnZS5jcmVhdGVQYWNrYWdlQ29udGVudHMoKTsNCisNCisJCS8vIEluaXRpYWxpemUgY3JlYXRlZCBtZXRhLWRhdGENCisJCXRoZVJrUGFja2FnZS5pbml0aWFsaXplUGFja2FnZUNvbnRlbnRzKCk7DQorDQorCQkvLyBNYXJrIG1ldGEtZGF0YSB0byBpbmRpY2F0ZSBpdCBjYW4ndCBiZSBjaGFuZ2VkDQorCQl0aGVSa1BhY2thZ2UuZnJlZXplKCk7DQorDQorCQlyZXR1cm4gdGhlUmtQYWNrYWdlOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIEVDbGFzcyBnZXRSdW5nZUt1dHRhKCkgew0KKwkJcmV0dXJuIHJ1bmdlS3V0dGFFQ2xhc3M7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgRUF0dHJpYnV0ZSBnZXRSdW5nZUt1dHRhX1JlbGF0aXZlVG9sZXJhbmNlKCkgew0KKwkJcmV0dXJuIChFQXR0cmlidXRlKXJ1bmdlS3V0dGFFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgwKTsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBSa0ZhY3RvcnkgZ2V0UmtGYWN0b3J5KCkgew0KKwkJcmV0dXJuIChSa0ZhY3RvcnkpZ2V0RUZhY3RvcnlJbnN0YW5jZSgpOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJpdmF0ZSBib29sZWFuIGlzQ3JlYXRlZCA9IGZhbHNlOw0KKw0KKwkvKioNCisJICogQ3JlYXRlcyB0aGUgbWV0YS1tb2RlbCBvYmplY3RzIGZvciB0aGUgcGFja2FnZS4gIFRoaXMgbWV0aG9kIGlzDQorCSAqIGd1YXJkZWQgdG8gaGF2ZSBubyBhZmZlY3Qgb24gYW55IGludm9jYXRpb24gYnV0IGl0cyBmaXJzdC4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyB2b2lkIGNyZWF0ZVBhY2thZ2VDb250ZW50cygpIHsNCisJCWlmIChpc0NyZWF0ZWQpIHJldHVybjsNCisJCWlzQ3JlYXRlZCA9IHRydWU7DQorDQorCQkvLyBDcmVhdGUgY2xhc3NlcyBhbmQgdGhlaXIgZmVhdHVyZXMNCisJCXJ1bmdlS3V0dGFFQ2xhc3MgPSBjcmVhdGVFQ2xhc3MoUlVOR0VfS1VUVEEpOw0KKwkJY3JlYXRlRUF0dHJpYnV0ZShydW5nZUt1dHRhRUNsYXNzLCBSVU5HRV9LVVRUQV9fUkVMQVRJVkVfVE9MRVJBTkNFKTsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByaXZhdGUgYm9vbGVhbiBpc0luaXRpYWxpemVkID0gZmFsc2U7DQorDQorCS8qKg0KKwkgKiBDb21wbGV0ZSB0aGUgaW5pdGlhbGl6YXRpb24gb2YgdGhlIHBhY2thZ2UgYW5kIGl0cyBtZXRhLW1vZGVsLiAgVGhpcw0KKwkgKiBtZXRob2QgaXMgZ3VhcmRlZCB0byBoYXZlIG5vIGFmZmVjdCBvbiBhbnkgaW52b2NhdGlvbiBidXQgaXRzIGZpcnN0Lg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIHZvaWQgaW5pdGlhbGl6ZVBhY2thZ2VDb250ZW50cygpIHsNCisJCWlmIChpc0luaXRpYWxpemVkKSByZXR1cm47DQorCQlpc0luaXRpYWxpemVkID0gdHJ1ZTsNCisNCisJCS8vIEluaXRpYWxpemUgcGFja2FnZQ0KKwkJc2V0TmFtZShlTkFNRSk7DQorCQlzZXROc1ByZWZpeChlTlNfUFJFRklYKTsNCisJCXNldE5zVVJJKGVOU19VUkkpOw0KKw0KKwkJLy8gT2J0YWluIG90aGVyIGRlcGVuZGVudCBwYWNrYWdlcw0KKwkJU29sdmVyUGFja2FnZSB0aGVTb2x2ZXJQYWNrYWdlID0gKFNvbHZlclBhY2thZ2UpRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RVBhY2thZ2UoU29sdmVyUGFja2FnZS5lTlNfVVJJKTsNCisJCUVjb3JlUGFja2FnZSB0aGVFY29yZVBhY2thZ2UgPSAoRWNvcmVQYWNrYWdlKUVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVQYWNrYWdlKEVjb3JlUGFja2FnZS5lTlNfVVJJKTsNCisNCisJCS8vIENyZWF0ZSB0eXBlIHBhcmFtZXRlcnMNCisNCisJCS8vIFNldCBib3VuZHMgZm9yIHR5cGUgcGFyYW1ldGVycw0KKw0KKwkJLy8gQWRkIHN1cGVydHlwZXMgdG8gY2xhc3Nlcw0KKwkJcnVuZ2VLdXR0YUVDbGFzcy5nZXRFU3VwZXJUeXBlcygpLmFkZCh0aGVTb2x2ZXJQYWNrYWdlLmdldFNvbHZlcigpKTsNCisNCisJCS8vIEluaXRpYWxpemUgY2xhc3NlcyBhbmQgZmVhdHVyZXM7IGFkZCBvcGVyYXRpb25zIGFuZCBwYXJhbWV0ZXJzDQorCQlpbml0RUNsYXNzKHJ1bmdlS3V0dGFFQ2xhc3MsIFJ1bmdlS3V0dGEuY2xhc3MsICJSdW5nZUt1dHRhIiwgIUlTX0FCU1RSQUNULCAhSVNfSU5URVJGQUNFLCBJU19HRU5FUkFURURfSU5TVEFOQ0VfQ0xBU1MpOw0KKwkJaW5pdEVBdHRyaWJ1dGUoZ2V0UnVuZ2VLdXR0YV9SZWxhdGl2ZVRvbGVyYW5jZSgpLCB0aGVFY29yZVBhY2thZ2UuZ2V0RURvdWJsZSgpLCAicmVsYXRpdmVUb2xlcmFuY2UiLCAiMUUtOSIsIDAsIDEsIFJ1bmdlS3V0dGEuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7DQorDQorCQkvLyBDcmVhdGUgcmVzb3VyY2UNCisJCWNyZWF0ZVJlc291cmNlKGVOU19VUkkpOw0KKwl9DQorDQorfSAvL1JrUGFja2FnZUltcGwNCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uc29sdmVycy5yay9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9zb2x2ZXJzL3JrL2ltcGwvUnVuZ2VLdXR0YUltcGwuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5zb2x2ZXJzLnJrL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3NvbHZlcnMvcmsvaW1wbC9SdW5nZUt1dHRhSW1wbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMyNWZkYzkKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uc29sdmVycy5yay9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9zb2x2ZXJzL3JrL2ltcGwvUnVuZ2VLdXR0YUltcGwuamF2YQpAQCAtMCwwICsxLDExMjggQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5zb2x2ZXJzLnJrLmltcGw7DQorDQorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisgKiBDb3B5cmlnaHQgKGMpIDIwMDkgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuDQorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscw0KKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMA0KKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0DQorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwNCisgKg0KKyAqIENvbnRyaWJ1dG9yczoNCisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uDQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQorDQoraW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7DQoraW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOw0KK2ltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7DQoraW1wb3J0IGphdmEudXRpbC5NYXA7DQoraW1wb3J0IGphdmEudXRpbC5jb25jdXJyZW50LkJyb2tlbkJhcnJpZXJFeGNlcHRpb247DQoraW1wb3J0IGphdmEudXRpbC5jb25jdXJyZW50LkN5Y2xpY0JhcnJpZXI7DQorDQoraW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QcmVmZXJlbmNlczsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuRUxpc3Q7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5VUkk7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5pbXBsLkVOb3RpZmljYXRpb25JbXBsOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUudXRpbC5FY29yZVV0aWw7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5EeW5hbWljTGFiZWw7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5JbnRlZ3JhdGlvbkxhYmVsOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguSW50ZWdyYXRpb25MYWJlbFZhbHVlOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguTGFiZWxWYWx1ZTsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLk5vZGU7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5Ob2RlTGFiZWw7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5EZWNvcmF0b3I7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5JbnRlZ3JhdGlvbkRlY29yYXRvcjsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLlNURU1UaW1lOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc29sdmVyLmltcGwuU29sdmVySW1wbDsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnRyaWdnZXIuVHJpZ2dlcjsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5zb2x2ZXJzLnJrLlJrUGFja2FnZTsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5zb2x2ZXJzLnJrLlJ1bmdlS3V0dGE7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udWkuQWN0aXZhdG9yOw0KKw0KKy8qKg0KKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorICogQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPlJ1bmdlIEt1dHRhPC9iPjwvZW0+Jy4NCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisgKiA8cD4NCisgKiBUaGUgZm9sbG93aW5nIGZlYXR1cmVzIGFyZSBpbXBsZW1lbnRlZDoNCisgKiA8dWw+DQorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uc29sdmVycy5yay5pbXBsLlJ1bmdlS3V0dGFJbXBsI2dldFJlbGF0aXZlVG9sZXJhbmNlIDxlbT5SZWxhdGl2ZSBUb2xlcmFuY2U8L2VtPn08L2xpPg0KKyAqIDwvdWw+DQorICogPC9wPg0KKyAqDQorICogQGdlbmVyYXRlZA0KKyAqLw0KK0BTdXBwcmVzc1dhcm5pbmdzKCJzeW50aGV0aWMtYWNjZXNzIikNCitwdWJsaWMgY2xhc3MgUnVuZ2VLdXR0YUltcGwgZXh0ZW5kcyBTb2x2ZXJJbXBsIGltcGxlbWVudHMgUnVuZ2VLdXR0YSB7DQorCQ0KKwkvLyBOdW1iZXIgb2YgdGhyZWFkcw0KKwlwcml2YXRlIHNob3J0IG51bV90aHJlYWRzID0gMjsvLyBQcmVmZXJlbmNlcyB3aWxsIG92ZXJyaWRlDQorCQ0KKwkvLyBKb2JzDQorCXByaXZhdGUgUmtKb2IgW10gam9iczsNCisJDQorCS8vIFVzZWQgdG8gc3luY2hyb25pemUgd29ya2VyIHRocmVhZHMgdG8gYWdyZWUgb24gc3RlcCBzaXplDQorCXByaXZhdGUgQ3ljbGljQmFycmllciBzdGVwU2l6ZUJhcnJpZXI7DQorDQorCS8vIFVzZWQgdG8gc3luY2hyb25pemUgd29ya2VyIHRocmVhZHMgdG8gcHJvY2VlZCBhZnRlciBhbGwgdGhyZWFkcyBoYXZlIA0KKwkvLyB1cGRhdGVkIHRoZSBjdXJyZW50IHRlbXBvcmFyeSB2YWx1ZSB0byB0aGUgbmV3IHBvc2l0aW9uDQorCXByaXZhdGUgQ3ljbGljQmFycmllciB1cGRhdGVEb25lQmFycmllcjsNCisJDQorCS8vIFNtYWxsZXN0IHN0ZXAgc2l6ZSByZXF1aXJlZCBieSBhbnkgdGhyZWFkIHRvIGFkdmFuY2Ugb25lIHN0ZXANCisJDQorCXByaXZhdGUgZG91YmxlIHNtYWxsZXN0SDsNCisJcHJpdmF0ZSBkb3VibGUgbWF4aW11bUVycm9yOw0KKwkNCisJLy8gVGhlIHN0ZXAgc2l6ZSBhbmQgdGhlIGN1cnJlbnQgcG9zaXRpb24gKHgpDQorCXByaXZhdGUgZG91YmxlIHN0ZXBTaXplID0gMS4wOw0KKwlwcml2YXRlIGRvdWJsZSBjdXJyZW50WDsNCisJDQorCS8vIENvbnN0YW50cyB1c2VkIGluIFJ1bmdlIEt1dHRhIENhc2ggS2FycCANCisJDQorCXN0YXRpYyBkb3VibGUgYTI9MC4yLCBhMz0wLjMsIGE0PTAuNiwgYTU9MS4wLCBhNj0wLjg3NTsNCisJc3RhdGljIGRvdWJsZSBiMjEgPSAwLjIsIGIzMT0zLjAvNDAsIGIzMj05LjAvNDAuMCwgYjQxPTAuMywgYjQyPS0wLjksIGI0Mz0xLjI7DQorCXN0YXRpYyBkb3VibGUgYjUxPS0xMS4wLzU0LjAsIGI1Mj0yLjUsIGI1Mz0tNzAuMC8yNy4wLCBiNTQ9MzUuMC8yNy4wLCBiNjE9MTYzMS4wLzU1Mjk2LjAsIGI2Mj0xNzUuMC81MTIuMCwgYjYzPTU3NS4wLzEzODI0LjAsIGI2ND00NDI3NS4wLzExMDU5Mi4wLCBiNjU9MjUzLjAvNDA5Ni4wOw0KKwlzdGF0aWMgZG91YmxlIGMxID0gMzcuMC8zNzguMCwgYzM9MjUwLjAvNjIxLjAsIGM0PTEyNS4wLzU5NC4wLCBjNj01MTIuMC8xNzcxLjA7DQorCXN0YXRpYyBkb3VibGUgZGM1ID0gLTI3Ny4wLzE0MzM2LjA7DQorCXN0YXRpYyBkb3VibGUgZGMxID0gYzEtMjgyNS4wLzI3NjQ4LjAsIGRjMz1jMy0xODU3NS4wLzQ4Mzg0LjAsIGRjND1jNC0xMzUyNS4wLzU1Mjk2LjAsIGRjNj1jNi0wLjI1Ow0KKwkNCisJc3RhdGljIGRvdWJsZSBTQUZFVFk9MC45LCBQR1JPVz0tMC4yLCBQU0hSTks9LTAuMjUsIEVSUkNPTj0xLjg5RS00Ow0KKwlzdGF0aWMgZG91YmxlIFRJTlkgPSAxRS0zMDsNCisNCisJcHJpdmF0ZSBzdGF0aWMgaW50IE1BWF9QUk9HUkVTU19SRVBPUlRTID0gNTsNCisJDQorCS8qKg0KKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0UmVsYXRpdmVUb2xlcmFuY2UoKSA8ZW0+UmVsYXRpdmUgVG9sZXJhbmNlPC9lbT59JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAc2VlICNnZXRSZWxhdGl2ZVRvbGVyYW5jZSgpDQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgZG91YmxlIFJFTEFUSVZFX1RPTEVSQU5DRV9FREVGQVVMVCA9IDEuMEUtOTsNCisNCisJLyoqDQorCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldFJlbGF0aXZlVG9sZXJhbmNlKCkgPGVtPlJlbGF0aXZlIFRvbGVyYW5jZTwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHNlZSAjZ2V0UmVsYXRpdmVUb2xlcmFuY2UoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqIEBvcmRlcmVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgZG91YmxlIHJlbGF0aXZlVG9sZXJhbmNlID0gUkVMQVRJVkVfVE9MRVJBTkNFX0VERUZBVUxUOw0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQgTk9UDQorCSAqLw0KKwlwdWJsaWMgUnVuZ2VLdXR0YUltcGwoKSB7DQorCQlzdXBlcigpOw0KKwl9DQorDQorCS8vIFNldCB0aGlzIGZsYWcgdG8gdHJ1ZSB0byBkbyBhIHNhbml0eSBjaGVjayBvZiB0aGUgZGVjb3JhdG9yIGxhYmVscy4gDQorCS8vIA0KKwkvLyBVU0UgU0lOR0xFIFRIUkVBRCBPTkxZIFdIRU4gU0VUVElORyBUSElTIFRPIFRSVUUuIFRIRSBTQU5FIENIRUNLSU5HIENPREUgSVMgTk9UIFRIRUFEIFNBRkUuDQorCS8vDQorCS8vIFRoZSBjaGVja3MgaW5jbHVkZToNCisJLy8gMS4gSWYgdGhlIGFsZ29yaXRobSBmYWlsZWQgdG8gYWR2YW5jZSBvbmUgc3RlcCBkdWUgdG8gYSBsYXJnZSBlcnJvcjoNCisJLy8NCisJLy8gMS4xLiBNYWtlIHN1cmUgdGhhdCB0aGUgbGFiZWwuY3VycmVudFZhbHVlKCkgYXJlIHRoZSBzYW1lIGFzIGJlZm9yZSBhIHN0ZXAgd2FzIGF0dGVtcHRlZC4NCisJLy8gMS4yICBNYWtlIHN1cmUgdGhhdCB0aGUgbGFiZWwudGVtcFZhbHVlKCkgYXJlIHRoZSBzYW1lIGFzIGJlZm9yZSB0aGUgc3RlcCB3YXMgYXR0ZW1wdGVkLg0KKwkvLyAxLjIuIE1ha2Ugc3VyZSB0aGF0IHRoZSBmaXJzdCBkZWx0YSBjYWxjdWxhdGVkIGluaXRpYWxseSBpcyB0aGUgc2FtZSBhcyB0aGUgcHJldmlvdXNseSBjYWxjdWxhdGVkIGRlbHRhIChhbiBvcHRpbWl6YXRpb24gd291bGQgYmUgdG8gcmVtZW1iZXIgdGhlIG9sZCB2YWx1ZSBoZXJlKQ0KKwkvLyANCisJLy8gMi4gSWYgdGhlIGFsZ29yaXRobSBzdWNjZXNzZnVsbHkgd2FzIGFibGUgdG8gYWR2YW5jZSBvbmUgc3RlcA0KKwkvLyAyLjEuICBNYWtlIHN1cmUgdGhhdCB0aGUgbGFiZWwuY3VycmVudFZhbHVlKCkgYXJlIHRoZSBzYW1lIGFzIGJlZm9yZSB0aGUgc3VjY2Vzc2Z1bCBzdGVwLg0KKwkvLw0KKwkNCisJcHJpdmF0ZSBzdGF0aWMgYm9vbGVhbiBDSEVDS19TQU5FID0gZmFsc2U7DQorCXByaXZhdGUgSGFzaE1hcDxVUkksIER5bmFtaWNMYWJlbD4gbGFiZWxWYWx1ZVNuYXBzaG90Ow0KKwlwcml2YXRlIEhhc2hNYXA8VVJJLCBMYWJlbFZhbHVlPiBkZWx0YUxhYmVsVmFsdWVTbmFwc2hvdCA9IG5ldyBIYXNoTWFwPFVSSSwgTGFiZWxWYWx1ZT4oKTsNCisJDQorCQ0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQgTk9UDQorCSAqLw0KKwlAT3ZlcnJpZGUNCisJcHVibGljIGJvb2xlYW4gc3RlcChTVEVNVGltZSB0aW1lLCBsb25nIHRpbWVEZWx0YSwgaW50IGN5Y2xlKSB7DQorCQkNCisJCS8vIFZhbGlkYXRlIGFsbCBkZWNvcmF0b3JzIHRoYXQgcmV0dXJuIGRlbHRhcyB0byBtYWtlIHN1cmUNCisJCS8vIHRoZXkgYXJlIG9mIGRldGVybWluaXN0aWMgbmF0dXJlLiBUaGUgUnVuZ2UgS3V0dGEgaW50ZWdyYXRpbw0KKwkJLy8gY2FuIG9ubHkgaGFuZGxlIGRldGVybWluaW5pc3RpYyB2YXJpYW50cw0KKwkJDQorCQlmb3IoRGVjb3JhdG9yIGRlY29yYXRvcjp0aGlzLmdldERlY29yYXRvcnMoKSkgDQorCQkJaWYoZGVjb3JhdG9yIGluc3RhbmNlb2YgSW50ZWdyYXRpb25EZWNvcmF0b3IpIHsNCisJCQkJSW50ZWdyYXRpb25EZWNvcmF0b3IgaWRlYyA9IChJbnRlZ3JhdGlvbkRlY29yYXRvcilkZWNvcmF0b3I7DQorCQkJCWlmKCFpZGVjLmlzRGV0ZXJtaW5pc3RpYygpKSB7DQorCQkJCQlBY3RpdmF0b3IubG9nRXJyb3IoIkVycm9yLCBkZWNvcmF0b3I6ICIraWRlYysiIGlzIG5vdCBkZXRlcm1pbmlzdGljLiBUaGUgUnVuZ2UgS3V0dGEgSW50ZWdyYXRvciBjYW4gb25seSBoYW5kbGUgZGV0ZXJtaW5pc3RpYyBtb2RlbHMuIiwgbmV3IEV4Y2VwdGlvbigpKTsNCisJCQkJCXJldHVybiBmYWxzZTsNCisJCQkJfQ0KKwkJCX0NCisJCQ0KKwkJQWN0aXZhdG9yIGFjdCA9IG9yZy5lY2xpcHNlLnN0ZW0udWkuQWN0aXZhdG9yLmdldERlZmF1bHQoKTsNCisJCWlmKGFjdCAhPSBudWxsKSB7DQorCQkJZmluYWwgUHJlZmVyZW5jZXMgcHJlZmVyZW5jZXMgPSBhY3QuZ2V0UGx1Z2luUHJlZmVyZW5jZXMoKTsNCisJCQludW1fdGhyZWFkcyA9IChzaG9ydClwcmVmZXJlbmNlcy5nZXRJbnQob3JnLmVjbGlwc2Uuc3RlbS51aS5wcmVmZXJlbmNlcy5QcmVmZXJlbmNlQ29uc3RhbnRzLlNJTVVMQVRJT05fVEhSRUFEUyk7DQorCQl9IGVsc2UgbnVtX3RocmVhZHMgPSAyOyAvLyBKdXN0IHNvIHdlIGNhbiBydW4gaW5zaWRlIGp1bml0IHRlc3QNCisJCQkNCisJCXBhcnRpdGlvbmVyLnNldE51bVByb2Nlc3NlcyhudW1fdGhyZWFkcyk7DQorDQorCQlmaW5hbCBpbnQgYyA9IGN5Y2xlOw0KKwkJDQorCQkvLyBJbml0aWFsaXplIGxhdGNoZXMNCisJCXN0ZXBTaXplQmFycmllciA9IG5ldyBDeWNsaWNCYXJyaWVyKG51bV90aHJlYWRzLCBuZXcgUnVubmFibGUoKSB7DQorICAgICAgICAgICAgcHVibGljIHZvaWQgcnVuKCkgeyANCisgICAgICAgICAgICAJLy8gQWxsIHRocmVhZHMgc3VjY2Vzc2Z1bGx5IGFkdmFuY2VkIHRpbWUgYnkgc29tZSBzdGVwIGguDQorCQkJCS8vIEZpbmQgdGhlIHNtYWxsZXN0IAkJCQ0KKwkJCQlzbWFsbGVzdEggPSBEb3VibGUuTUFYX1ZBTFVFOw0KKwkJCQltYXhpbXVtRXJyb3IgPSAtRG91YmxlLk1BWF9WQUxVRTsNCisJCQkJZm9yKGludCBpPTA7aTxudW1fdGhyZWFkczsrK2kpICB7DQorCQkJCQlpZihqb2JzW2ldLmggPD0gc21hbGxlc3RIKSB7DQorCQkJCQkJaWYobWF4aW11bUVycm9yIDwgam9ic1tpXS5tYXhlcnJvcikgbWF4aW11bUVycm9yID0gam9ic1tpXS5tYXhlcnJvcjsNCisJCQkJCQlzbWFsbGVzdEggPSBqb2JzW2ldLmg7IA0KKwkJCQkJfQ0KKwkJCQl9DQorICAgICAgICAgICAgICB9DQorICAgICAgICAgICAgfSk7DQorCQkNCisJCXVwZGF0ZURvbmVCYXJyaWVyID0gbmV3IEN5Y2xpY0JhcnJpZXIobnVtX3RocmVhZHMpOw0KKwkJDQorCQkvLyBGaW5kIHRyaWdnZXJzIGFuZCBtYWtlIHN1cmUgdGhleSBhcmUgaW52b2tlZA0KKwkJZm9yKERlY29yYXRvciBkZWNvcmF0b3I6dGhpcy5nZXREZWNvcmF0b3JzKCkpIHsNCisJCQlpZihkZWNvcmF0b3IgaW5zdGFuY2VvZiBUcmlnZ2VyKSB7DQorCQkJCWRlY29yYXRvci51cGRhdGVMYWJlbHModGltZSwgdGltZURlbHRhLCBjeWNsZSk7DQorCQkJfQ0KKwkJfQkJDQorCQkNCisJCS8vIEZpcnN0IGluaXRpYWxpemUgdGhlIHByb2JlIGFuZCB0ZW1wIGxhYmVsIHZhbHVlcyBmcm9tIHRoZSBjdXJyZW50DQorCQkvLyBsYWJlbCB2YWx1ZXMuIA0KKwkJDQorCQlmb3IoRGVjb3JhdG9yIGRlY29yYXRvcjp0aGlzLmdldERlY29yYXRvcnMoKSkgew0KKwkJCUVMaXN0PER5bmFtaWNMYWJlbD5hbGxMYWJlbHMgPSBwYXJ0aXRpb25lci5wYXJ0aXRpb25EZWNvcmF0b3JMYWJlbHMoZGVjb3JhdG9yKTsNCisJCQlmb3IgKGZpbmFsIEl0ZXJhdG9yPER5bmFtaWNMYWJlbD4gY3VycmVudFN0YXRlTGFiZWxJdGVyID0gYWxsTGFiZWxzDQorCQkJCQkuaXRlcmF0b3IoKTsgY3VycmVudFN0YXRlTGFiZWxJdGVyLmhhc05leHQoKTspIHsNCisJCQkJaWYoZGVjb3JhdG9yIGluc3RhbmNlb2YgSW50ZWdyYXRpb25EZWNvcmF0b3IpIHsNCisJCQkJCS8vIEl0J3MgYSBzdGFuZGFyZCBkaXNlYXNlIG1vZGVsIHdpdGggYSBzdGFuZGFyZCBkaXNlYXNlIG1vZGVsIGxhYmVsDQorCQkJCQlmaW5hbCBJbnRlZ3JhdGlvbkxhYmVsIGlMYWJlbCA9IChJbnRlZ3JhdGlvbkxhYmVsKSBjdXJyZW50U3RhdGVMYWJlbEl0ZXIubmV4dCgpOw0KKwkJCQkJKChJbnRlZ3JhdGlvbkxhYmVsVmFsdWUpaUxhYmVsLmdldFByb2JlVmFsdWUoKSkuc2V0KChJbnRlZ3JhdGlvbkxhYmVsVmFsdWUpaUxhYmVsLmdldEN1cnJlbnRWYWx1ZSgpKTsNCisJCQkJCSgoSW50ZWdyYXRpb25MYWJlbFZhbHVlKWlMYWJlbC5nZXRUZW1wVmFsdWUoKSkuc2V0KChJbnRlZ3JhdGlvbkxhYmVsVmFsdWUpaUxhYmVsLmdldEN1cnJlbnRWYWx1ZSgpKTsNCisJCQkJCSgoSW50ZWdyYXRpb25MYWJlbFZhbHVlKWlMYWJlbC5nZXRUZW1wVmFsdWUoKSkucHJlcGFyZUN5Y2xlKCk7DQorCQkJCQkoKEludGVncmF0aW9uTGFiZWxWYWx1ZSlpTGFiZWwuZ2V0UHJvYmVWYWx1ZSgpKS5wcmVwYXJlQ3ljbGUoKTsNCisJCQkJfSBlbHNlIGN1cnJlbnRTdGF0ZUxhYmVsSXRlci5uZXh0KCk7DQorCQkJfQ0KKwkJfQ0KKwkJDQorCQlpZihqb2JzID09IG51bGwgfHwgam9icy5sZW5ndGggIT0gbnVtX3RocmVhZHMpIHsNCisJCQkvLyBJbml0aWFsaXplIHRoZSBqb2JzIGlmIG5vdCBkb25lIHlldCBvciBvZiB0aGUgbnVtYmVyIG9mIHRocmVhZHMgY2hhbmdlcw0KKwkJCWpvYnMgPSBuZXcgUmtKb2JbbnVtX3RocmVhZHNdOw0KKwkNCisJCQlmb3Ioc2hvcnQgaT0wO2k8bnVtX3RocmVhZHM7KytpKSB7DQorCQkJCWZpbmFsIHNob3J0IHRocmVhZG51bSA9IGk7DQorCQkJCWpvYnNbaV0gPSBuZXcgUmtKb2IoIldvcmtlciAiK2ksIHRocmVhZG51bSwgdGhpcyk7DQorCQkJfSAvLyBGb3IgZWFjaCBqb2INCisJCX0gLy8gSWYgbm90IGluaXRpYWxpemVkDQorDQorCQkvLyBJbml0aWFsaXplDQorCQlpbnQgdGhyZWFkID0gMDsNCisJCWZvcihSa0pvYiBqOmpvYnMpIHsNCisJCQlqLmN5Y2xlID0gYzsNCisJCQlqLnRpbWUgPSB0aW1lOw0KKwkJCWoudGltZURlbHRhID0gdGltZURlbHRhOw0KKwkJfQ0KKwkJLy8gU2NoZWR1bGUuIEpvYnMgY2FuIGJlIHJlc2NoZWR1bGVkIGFmdGVyIGZpbmlzaGVkDQorCQlmb3IoUmtKb2Igajpqb2JzKSANCisJCQlqLnNjaGVkdWxlKCk7DQorCQkNCisJCS8vIFdhaXQgdW50aWwgYWxsIGpvYnMgY29tcGxldGVkDQorCQlmb3IoUmtKb2IgaiA6IGpvYnMpIHsNCisJCQl0cnkgew0KKwkJCQlqLmpvaW4oKTsNCisJCQl9IGNhdGNoKEludGVycnVwdGVkRXhjZXB0aW9uIGllKSB7DQorCQkJCUFjdGl2YXRvci5sb2dFcnJvcihpZS5nZXRNZXNzYWdlKCksIGllKTsNCisJCQl9DQorCQl9DQorCQkNCisJCS8vIFNldCB0aGUgY29tbW9uIHRpbWUgYW5kIHN0ZXAgc2l6ZSBoZXJlIGFuZCB2YWxpZGF0ZSBldmVyeXRoaW5nIGlzIHJpZ2h0DQorCQlkb3VibGUgbWluU3RlcCA9IERvdWJsZS5NQVhfVkFMVUU7DQorCQlkb3VibGUgY3VycmVudFQgPSBqb2JzWzBdLnQ7DQorCQlmb3IoUmtKb2IgaiA6IGpvYnMpIHsNCisJCQkvLyBUaGUgam9icyBoYXZlIGNhbGN1bGF0ZWQgbmV3IHN0ZXAgc2l6ZXMgYWZ0ZXIgdGhleSBmaW5pc2hlZC4gUGljayB0aGUNCisJCQkvLyBzbWFsbGVzdCBvbmUgZm9yIHRoZSBuZXh0IGN5Y2xlDQorCQkJaWYoai5oIDwgbWluU3RlcCkgbWluU3RlcCA9IGouaDsNCisJCQlpZihqLnQgIT0gY3VycmVudFQpIEFjdGl2YXRvci5sb2dFcnJvcigiRXJyb3IsIG9uZSB0aHJlYWQgd2FzIGluIG1pc3N0ZXAgd2l0aCBvdGhlciB0aHJlYWRzLCBpdHMgdGltZSB3YXMgIitqLnQrIiB2ZXJzdXMgIitjdXJyZW50VCwgbmV3IEV4Y2VwdGlvbigpKTsNCisJCX0NCisJCXJldHVybiB0cnVlOw0KKwl9DQorCQ0KKwkvKioNCisJICogX3N0ZXAgRG8gdGhlIHN0ZXAgZm9yIGEgc2luZ2xlIHRocmVhZA0KKwkgKiANCisJICogQHBhcmFtIHRpbWUNCisJICogQHBhcmFtIHRpbWVEZWx0YQ0KKwkgKiBAcGFyYW0gY3ljbGUNCisJICogQHBhcmFtIHRocmVhZG51bQ0KKwkgKi8NCisJcHJvdGVjdGVkIHZvaWQgX3N0ZXAoU1RFTVRpbWUgdGltZSwgbG9uZyB0aW1lRGVsdGEsIGludCBjeWNsZSwgc2hvcnQgdGhyZWFkbnVtKSB7DQorLy8JCXRoaXMuc2V0UHJvZ3Jlc3MoMC4wKTsNCisJCS8vIFdlIG9ubHkgZGVhbCB3aXRoIHN0YW5kYXJkIGRpc2Vhc2UgbW9kZWwgZGVjb3JhdG9ycw0KKwkJDQorCQlBcnJheUxpc3Q8RGVjb3JhdG9yPiBpRGVjb3JhdG9ycyA9IG5ldyBBcnJheUxpc3Q8RGVjb3JhdG9yPigpOw0KKwkJDQorCQlmb3IoRGVjb3JhdG9yIGQ6Z2V0RGVjb3JhdG9ycygpKSB7DQorCQkJaWYoZCBpbnN0YW5jZW9mIEludGVncmF0aW9uRGVjb3JhdG9yKQ0KKwkJCQlpRGVjb3JhdG9ycy5hZGQoZCk7DQorCQl9DQorCQkNCisJCQ0KKwkJDQorCQkvLyBGaXJzdCB3ZSBnZXQgdGhlIHN0ZXAgc2l6ZSwgZWl0aGVyIHRoZSBkZWZhdWx0IHN0ZXAgc2l6ZQ0KKwkJLy8gKGluaXRpYWxseSAxLjApIG9yIHRoZSBsYXN0IHN0ZXAgc2l6ZSB1c2VkLiANCisJCQ0KKwkJZG91YmxlIGggPSB0aGlzLmdldFN0ZXBTaXplKCk7DQorCQkvLyB4IGlzIHRvIGtlZXAgdHJhY2sgb2YgaG93IGZhciB3ZSBoYXZlIGFkdmFuY2VkIGluIHRoZSBzb2x1dGlvbi4gSXQgaXMgZXNzZW50aWFsbHkNCisJCS8vIGEgZG91YmxlIGN5Y2xlIHJlcHJlc2VudGF0aW9uDQorCQkNCisJCWRvdWJsZSB4ID0gdGhpcy5nZXRDdXJyZW50WCgpOw0KKwkJDQorCQkvLyBTdWJzdGFudGlhbCBwZXJmb3JtYW5jZSBjYW4gYmUgZ2FpbmVkIGhlcmUuIEJhc2ljYWxseSBpZiB0aGUgY3VycmVudCBjeWNsZQ0KKwkJLy8gaXMgZ3JlYXRlciB0aGFuIHRoZSBjeWNsZSByZXF1ZXN0ZWQgYnkgdGhlIHNpbXVsYXRpb24sIHdlIGFyZSBkb25lLiBUaGlzDQorCQkvLyBtZWFucyB0aGF0IHRoZSBlcnJvciB0b2xlcmFuY2UgYmV0d2VlbiBsYXN0IHN0ZXAgYW5kIHRoaXMgc3RlcCBpcyBzbWFsbA0KKwkJLy8gZW5vdWdoIHNvIHdlIGRvbid0IG5lZWQgdG8gdXBkYXRlIHRoZSBsYWJlbHMuIFRoZSBlcnJvciB0b2xlcmFuY2UgaXMNCisJCS8vIHNwZWNpZmllZCBpbiB0aGUgZGlzZWFzZSBtb2RlbA0KKwkJDQorCQkvLyoqKiBPQlNFUlZFOiBTaW5jZSB3ZSBsaW1pdCBoIHRvIG1heCAxIGJlbG93LCB0aGlzIGNvZGUgaXMgbmV2ZXIgaW52b2tlZC4gSXQncyBrZXB0DQorCQkvLyoqKiBhcm91bmQgaW4gY2FzZSB3ZSB3YW50IHRvIGFsbG93IHRpbWUgdG8gYmUgY2FsY3VsYXRlZCBmYXIgb3V0IGluIHRoZSBmdXR1cmUgaWYNCisJCS8vKioqIHRoZSBlcnJvciBpcyBzbWFsbCBlbm91Z2gNCisJCQ0KKwkJDQorCQlpZih4ID49IGN5Y2xlKSB7DQorCQkJLy8gSnVzdCBjb3B5IHRoZSBuZXh0IHZhbHVlIHRoZSBzYW1lIGFzIHRoZSBjdXJyZW50IHZhbHVlIGZvciBhbGwgbGFiZWxzDQorCQkJZm9yKERlY29yYXRvciBzZG06aURlY29yYXRvcnMpIHsNCisJCQkJRUxpc3Q8RHluYW1pY0xhYmVsPm15TGFiZWxzID0gcGFydGl0aW9uZXIucGFydGl0aW9uRGVjb3JhdG9yTGFiZWxzKHNkbSwgdGhyZWFkbnVtKTsNCisJCQkJaW50IG51bUxhYmVscyA9IG15TGFiZWxzLnNpemUoKTsNCisJCQkJZG91YmxlIG4gPSAwLjA7DQorCQkJCWludCBzZXRQcm9ncmVzc0V2ZXJ5TnRoTm9kZSA9IG51bV90aHJlYWRzICogbnVtTGFiZWxzLyhNQVhfUFJPR1JFU1NfUkVQT1JUUyk7DQorCQkJCWlmKHNldFByb2dyZXNzRXZlcnlOdGhOb2RlID09IDApIHNldFByb2dyZXNzRXZlcnlOdGhOb2RlID0gMTsNCisJCQkJZm9yIChmaW5hbCBJdGVyYXRvcjxEeW5hbWljTGFiZWw+IGN1cnJlbnRTdGF0ZUxhYmVsSXRlciA9IG15TGFiZWxzDQorCQkJCQkJLml0ZXJhdG9yKCk7IGN1cnJlbnRTdGF0ZUxhYmVsSXRlci5oYXNOZXh0KCk7KSB7DQorCQkJCQlmaW5hbCBJbnRlZ3JhdGlvbkxhYmVsIGRpc2Vhc2VMYWJlbCA9IChJbnRlZ3JhdGlvbkxhYmVsKSBjdXJyZW50U3RhdGVMYWJlbEl0ZXINCisJCQkJCS5uZXh0KCk7DQorCQkJCQkNCisJCQkJCS8vIFRoZSBlc3RpbWF0ZWQgZGlzZWFzZSB2YWx1ZSBjb250YWlucyB0aGUgdmFsdWUgY2FsY3VsYXRlZCBhdCBwb3NpdGlvbiB4DQorCQkJCQkNCisJCQkJCUludGVncmF0aW9uTGFiZWxWYWx1ZSBuZXh0VmFsdWVBdFggPSAoSW50ZWdyYXRpb25MYWJlbFZhbHVlKUVjb3JlVXRpbC5jb3B5KGRpc2Vhc2VMYWJlbC5nZXRQcm9iZVZhbHVlKCkpOw0KKwkJCQkJSW50ZWdyYXRpb25MYWJlbFZhbHVlIGN1cnJlbnRWYWx1ZUF0Q3ljbGUgPSAoSW50ZWdyYXRpb25MYWJlbFZhbHVlKWRpc2Vhc2VMYWJlbC5nZXRDdXJyZW50VmFsdWUoKTsNCisJCQkJCUludGVncmF0aW9uTGFiZWxWYWx1ZSBuZXh0U3RhdGUgPSAoSW50ZWdyYXRpb25MYWJlbFZhbHVlKWRpc2Vhc2VMYWJlbC5nZXROZXh0VmFsdWUoKTsNCisJCQkJCWFkanVzdFZhbHVlc1RvQ3ljbGUoY3VycmVudFZhbHVlQXRDeWNsZSwgbmV4dFZhbHVlQXRYLCB4LCBjeWNsZSk7DQorCQkJCQkvLyBOZXh0VmFsdWVBdFggaGFzIGJlZW4gbW9kaWZpZWQgaGVyZSB0byB0aGUgY29ycmVjdCB2YWx1ZSBmb3IgdGhpcyBjeWNsZS4NCisJCQkJCW5leHRTdGF0ZS5zZXQobmV4dFZhbHVlQXRYKTsNCisJCQkJCS8vIFRoZSBuZXh0IHZhbHVlIGlzIHZhbGlkIG5vdy4NCisJCQkJCWRpc2Vhc2VMYWJlbC5zZXROZXh0VmFsdWVWYWxpZCh0cnVlKTsNCisJCQkJCWRvdWJsZSBwcm9ncmVzcyA9IG4vbnVtTGFiZWxzOw0KKwkJCQkJam9ic1t0aHJlYWRudW1dLnNldFByb2dyZXNzKHByb2dyZXNzKTsNCisJCQkJCWlmKG4lc2V0UHJvZ3Jlc3NFdmVyeU50aE5vZGU9PTApIHsNCisJCQkJCQkvLyBHZXQgdGhlIHByb2dyZXNzIGZvciBhbGwgdGhyZWFkcw0KKwkJCQkJCWZvcihpbnQgaT0wO2k8bnVtX3RocmVhZHM7KytpKSBpZihpIT10aHJlYWRudW0gJiYgam9ic1tpXSAhPSBudWxsKSBwcm9ncmVzcys9am9ic1tpXS5nZXRQcm9ncmVzcygpOw0KKwkJCQkJCXByb2dyZXNzIC89IG51bV90aHJlYWRzOw0KKwkJCQkJCXNkbS5zZXRQcm9ncmVzcyhwcm9ncmVzcyk7DQorCQkJCQl9DQorCQkJCQluKz0xLjA7DQorCQkJCX0NCisJCQl9IC8vIEZvciBlYWNoIGRlY29yYXRvcg0KKwkJCS8vIFNvIHRoYXQgdmFsaWRhdGlvbiBjb2RlIGFib3ZlIGlzIGhhcHB5DQorCQkJam9ic1t0aHJlYWRudW1dLmggPSBoOw0KKwkJCWpvYnNbdGhyZWFkbnVtXS50ID0geDsNCisJCQkNCisJCQlyZXR1cm47DQorCQl9DQorDQorCQkvLyBXaGVuIHggKG9yIHRpbWUpIGlzIHRoaXMgd2UncmUgZG9uZQ0KKwkJZG91YmxlIGVuZCA9IE1hdGguZmxvb3IodGhpcy5nZXRDdXJyZW50WCgpKSsxLjA7DQorCQkNCisJCS8vIE1ha2Ugc3VyZSB3ZSBhY3R1YWxseSBoYXZlIGxhYmVscyB0byB1cGRhdGUNCisJCWJvb2xlYW4gd29ya1RvRG89ZmFsc2U7DQorCQlmb3IoRGVjb3JhdG9yIHNkbTppRGVjb3JhdG9ycykNCisJCQlpZihwYXJ0aXRpb25lci5wYXJ0aXRpb25EZWNvcmF0b3JMYWJlbHMoc2RtLCB0aHJlYWRudW0pLnNpemUoKSA+IDApIHt3b3JrVG9Ebz10cnVlO2JyZWFrO30NCisJCQ0KKwkJaWYoIXdvcmtUb0RvKSB7DQorCQkJLy8gTm90aGluZyB0byBkbywganVzdCBhZHZhbmNlIHggYW5kIHNldCBoDQorCQkJam9ic1t0aHJlYWRudW1dLmggPSBoOw0KKwkJCWpvYnNbdGhyZWFkbnVtXS50ID0geDsNCisJCQkvLyBCZSBuaWNlIGFuZCB3YWxrIGluIHN0ZXAgd2l0aCBvdGhlcnMgdW50aWwgZG9uZQ0KKwkJCXdoaWxlKHggPCBlbmQpIHsNCisJCQkJdHJ5IHsNCisJCQkJCS8vIFNldCB0byBhIGxhcmdlIG51bWJlciB0byBtYWtlIHN1cmUgaXQncyBsYXJnZXIgdGhhbiBhbnkgc3RlcCBzaXplIHJlcG9ydGVkDQorCQkJCQkvLyBieSBhbm90aGVyIHRocmVhZA0KKwkJCQkJZG8gew0KKwkJCQkJCWpvYnNbdGhyZWFkbnVtXS5oID0gRG91YmxlLk1BWF9WQUxVRTsJCQkJCQkNCisJCQkJCQlzdGVwU2l6ZUJhcnJpZXIuYXdhaXQoKTsNCisJCQkJCX0gd2hpbGUodGhpcy5tYXhpbXVtRXJyb3IgPiAxLjApOw0KKwkJCQkJdXBkYXRlRG9uZUJhcnJpZXIuYXdhaXQoKTsNCisJCQkJfSBjYXRjaChJbnRlcnJ1cHRlZEV4Y2VwdGlvbiBpZSkgew0KKwkJCQkJLy8gU2hvdWxkIG5ldmVyIGhhcHBlbg0KKwkJCQkJQWN0aXZhdG9yLmxvZ0Vycm9yKGllLmdldE1lc3NhZ2UoKSwgaWUpOw0KKwkJCQl9IGNhdGNoKEJyb2tlbkJhcnJpZXJFeGNlcHRpb24gYmJlKSB7DQorCQkJCQkvLyBTaG91bGQgbmV2ZXIgaGFwcGVuDQorCQkJCQlBY3RpdmF0b3IubG9nRXJyb3IoYmJlLmdldE1lc3NhZ2UoKSwgYmJlKTsNCisJCQkJfQ0KKwkJCQkvLyBTZXQgdG8gdGhlIHNtYWxsZXN0IHZhbHVlIHJlcG9ydGVkIGJ5IGFub3RoZXIgdGhyZWFkDQorCQkJCWggPSB0aGlzLnNtYWxsZXN0SDsNCisJCQkJeCArPSBoOw0KKwkJCQlqb2JzW3RocmVhZG51bV0uaCA9IGg7DQorCQkJCWpvYnNbdGhyZWFkbnVtXS50ID0geDsNCisJCQl9CQkJCQ0KKwkJCXJldHVybjsgDQorCQl9DQorCQkvLyBXZSB1c2UgdGhlIFJ1bmdlIEt1dHRhIEthc2ggQ2FycCBtZXRob2QgdG8gYWR2YW5jZSB0byB0aGUgbmV4dA0KKwkJLy8gc3RlcCBpbiB0aGUgc2ltdWxhdGlvbi4gVHdvIGVzdGltYXRlcyBvZiB0aGUgZGlzZWFzZSBkZWx0YXMNCisJCS8vIGFyZSBjYWxjdWxhdGVkIGFuZCBjb21wYXJlZCB0byBlYWNoIG90aGVyLiBJZiB0aGV5IGRpZmZlcg0KKwkJLy8gYnkgbW9yZSB0aGFuIGEgbWF4aW11bSBlcnJvciAoZGV0ZXJtaW5lZCBieSBhIHBhcmFtZXRlciBmb3INCisJCS8vIHRoZSBkaXNlYXNlIG1vZGVsKSwgd2UgcmVkdWNlIHRoZSBzdGVwIHNpemUgdW50aWwgYW4gYWNjZXB0YWJsZQ0KKwkJLy8gZXJyb3IgaXMgcmVhY2hlZC4gDQorCQkJCQkNCisJCS8vIFRoZXNlIGFyZSB1c2VkIGR1cmluZyBSdW5nZSBLdXR0YSBjYWxjdWxhdGlvbnM6DQorCQlNYXA8SW50ZWdyYXRpb25MYWJlbCwgSW50ZWdyYXRpb25MYWJlbFZhbHVlPiBrMW1hcCA9IG5ldyBIYXNoTWFwPEludGVncmF0aW9uTGFiZWwsIEludGVncmF0aW9uTGFiZWxWYWx1ZT4oKTsNCisJCU1hcDxJbnRlZ3JhdGlvbkxhYmVsLCBJbnRlZ3JhdGlvbkxhYmVsVmFsdWU+IGsybWFwID0gbmV3IEhhc2hNYXA8SW50ZWdyYXRpb25MYWJlbCwgSW50ZWdyYXRpb25MYWJlbFZhbHVlPigpOw0KKwkJTWFwPEludGVncmF0aW9uTGFiZWwsIEludGVncmF0aW9uTGFiZWxWYWx1ZT4gazNtYXAgPSBuZXcgSGFzaE1hcDxJbnRlZ3JhdGlvbkxhYmVsLCBJbnRlZ3JhdGlvbkxhYmVsVmFsdWU+KCk7DQorCQlNYXA8SW50ZWdyYXRpb25MYWJlbCwgSW50ZWdyYXRpb25MYWJlbFZhbHVlPiBrNG1hcCA9IG5ldyBIYXNoTWFwPEludGVncmF0aW9uTGFiZWwsIEludGVncmF0aW9uTGFiZWxWYWx1ZT4oKTsNCisJCU1hcDxJbnRlZ3JhdGlvbkxhYmVsLCBJbnRlZ3JhdGlvbkxhYmVsVmFsdWU+IGs1bWFwID0gbmV3IEhhc2hNYXA8SW50ZWdyYXRpb25MYWJlbCwgSW50ZWdyYXRpb25MYWJlbFZhbHVlPigpOw0KKwkJTWFwPEludGVncmF0aW9uTGFiZWwsIEludGVncmF0aW9uTGFiZWxWYWx1ZT4gazZtYXAgPSBuZXcgSGFzaE1hcDxJbnRlZ3JhdGlvbkxhYmVsLCBJbnRlZ3JhdGlvbkxhYmVsVmFsdWU+KCk7DQorCQkNCisJCS8vIFVzZWQgYmVsb3cgYXMgdGVtcG9yYXJ5IHBsYWNlIGhvbGRlciwgb25lIGZvciBlYWNoIGRlY29yYXRvcg0KKwkJSW50ZWdyYXRpb25MYWJlbFZhbHVlIF9rMVtdLCBfazJbXSwgX2szW10sIF9rNFtdLCBfazVbXSwgX2s2W107DQorCQlpbnQgbnVtRGVjb3JhdG9ycyA9IGlEZWNvcmF0b3JzLnNpemUoKTsNCisJCV9rMSA9IG5ldyBJbnRlZ3JhdGlvbkxhYmVsVmFsdWVbbnVtRGVjb3JhdG9yc107DQorCQlfazIgPSBuZXcgSW50ZWdyYXRpb25MYWJlbFZhbHVlW251bURlY29yYXRvcnNdOw0KKwkJX2szID0gbmV3IEludGVncmF0aW9uTGFiZWxWYWx1ZVtudW1EZWNvcmF0b3JzXTsNCisJCV9rNCA9IG5ldyBJbnRlZ3JhdGlvbkxhYmVsVmFsdWVbbnVtRGVjb3JhdG9yc107DQorCQlfazUgPSBuZXcgSW50ZWdyYXRpb25MYWJlbFZhbHVlW251bURlY29yYXRvcnNdOw0KKwkJX2s2ID0gbmV3IEludGVncmF0aW9uTGFiZWxWYWx1ZVtudW1EZWNvcmF0b3JzXTsNCisJCQ0KKwkJLy8gVGhlIGZpbmFsIGVzdGltYXRlcyBmb3IgbGFiZWwgdmFsdWVzIGFyZSBzdG9yZWQgaGVyZQ0KKwkJTWFwPEludGVncmF0aW9uTGFiZWwsIEludGVncmF0aW9uTGFiZWxWYWx1ZT4gZmluYWxFc3RpbWF0ZSA9IG5ldyBIYXNoTWFwPEludGVncmF0aW9uTGFiZWwsIEludGVncmF0aW9uTGFiZWxWYWx1ZT4oKTsNCisJCQ0KKwkJLy8gRGVsdGEgaXMgdXNlZCB0byBzY2FsZSB0aGUgc3RlcCAoaCkNCisJCWRvdWJsZSBkZWx0YSA9IDAuMDsJDQorCQkJCQ0KKwkJaW50IG49MDsNCisJCWZvcihEZWNvcmF0b3Igc2RtOmlEZWNvcmF0b3JzKSB7DQorCQkJSXRlcmF0b3I8RHluYW1pY0xhYmVsPiBpdGVyID0gcGFydGl0aW9uZXIucGFydGl0aW9uRGVjb3JhdG9yTGFiZWxzKHNkbSwgdGhyZWFkbnVtKQ0KKwkJCQkJLml0ZXJhdG9yKCk7DQorCQkJaWYoIWl0ZXIuaGFzTmV4dCgpKSB7DQorCQkJCUFjdGl2YXRvci5sb2dFcnJvcigiUHJvYmxlbSBkZXRlY3RlZDogRGVjb3JhdG9yICIrc2RtKyIgaGFkIG5vIGxhYmVscyB0byB1cGRhdGUuIFBsZWFzZSBjaGVjayB5b3VyIHNjZW5hcmlvLiIsIG5ldyBFeGNlcHRpb24oKSk7DQorCQkJCSsrbjsNCisJCQkJY29udGludWU7DQorCQkJfQ0KKw0KKwkJCUludGVncmF0aW9uTGFiZWwgZmlyc3RMYWJlbCA9IChJbnRlZ3JhdGlvbkxhYmVsKWl0ZXIubmV4dCgpOw0KKwkJCS8vIEluaXRpYWxpemUgdGVtcG9yYXJ5IHBsYWNlIGhvbGRlcnMganVzdCBieSBjcmVhdGluZyBkdXBzIG9mIHRoZSBmaXJzdCBsYWJlbCBhdmFpbGFibGUNCisJCQlfazFbbl0gPSAoSW50ZWdyYXRpb25MYWJlbFZhbHVlKUVjb3JlVXRpbC5jb3B5KGZpcnN0TGFiZWwuZ2V0Q3VycmVudFZhbHVlKCkpOw0KKwkJCV9rMltuXSA9IChJbnRlZ3JhdGlvbkxhYmVsVmFsdWUpRWNvcmVVdGlsLmNvcHkoZmlyc3RMYWJlbC5nZXRDdXJyZW50VmFsdWUoKSk7DQorCQkJX2szW25dID0gKEludGVncmF0aW9uTGFiZWxWYWx1ZSlFY29yZVV0aWwuY29weShmaXJzdExhYmVsLmdldEN1cnJlbnRWYWx1ZSgpKTsNCisJCQlfazRbbl0gPSAoSW50ZWdyYXRpb25MYWJlbFZhbHVlKUVjb3JlVXRpbC5jb3B5KGZpcnN0TGFiZWwuZ2V0Q3VycmVudFZhbHVlKCkpOw0KKwkJCV9rNVtuXSA9IChJbnRlZ3JhdGlvbkxhYmVsVmFsdWUpRWNvcmVVdGlsLmNvcHkoZmlyc3RMYWJlbC5nZXRDdXJyZW50VmFsdWUoKSk7DQorCQkJX2s2W24rK10gPSAoSW50ZWdyYXRpb25MYWJlbFZhbHVlKUVjb3JlVXRpbC5jb3B5KGZpcnN0TGFiZWwuZ2V0Q3VycmVudFZhbHVlKCkpOw0KKwkJfQ0KKwkJDQorCQkNCisJCS8vIEtlZXAgdHJhY2sgaWYgd2hldGhlciBhbnlvbmUgd2FudCB0byBzdG9wDQorCQkvLyBvciBwYXVzZSB1cGRhdGluZyBsYWJlbHMNCisJCWJvb2xlYW4gaW50ZXJydXB0PWZhbHNlLCBwYXVzZSA9IGZhbHNlOw0KKwkJDQorCQkvLyBXZSBrZWVwIHRoZXNlIGFyb3VuZCB0byBkZXRlcm1pbmUgd2hlbiB0byBjYWxsIHNldFByb2dyZXNzKC4uLikgb24gdGhlIGRlY29yYXRvcnMuDQorCQkvLyBJZiB3ZSBjYWxsIHRvbyBmcmVxdWVudGx5IHdlIGNhbiB0b28gbWFueSBjYWxsYmFja3Mgd2hpY2ggYWZmZWN0cyBwZXJmb3JtYW5jZS4NCisJCWRvdWJsZSBuZXh0UHJvZ3Jlc3NSZXBvcnRTdGVwID0gbnVtX3RocmVhZHMqKGVuZC14KS9NQVhfUFJPR1JFU1NfUkVQT1JUUzsNCisJCWRvdWJsZSBuZXh0UHJvZ3Jlc3NSZXBvcnQgPSB4K25leHRQcm9ncmVzc1JlcG9ydFN0ZXA7DQorCQkNCisvLwkJSGFzaE1hcDxTdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsLCBTdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsVmFsdWU+IHZhbGlkYXRlID0gbmV3IA0KKy8vCQkJSGFzaE1hcDxTdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsLCBTdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsVmFsdWU+KCk7IA0KKwkJDQorCQkvLyBUaGlzIGlzIHRoZSBtYWluIGxvb3Agd2Uga2VlcCBpdGVyYXRpbmcgb3ZlciB1bnRpbCB3ZSBhcmUgZG9uZSB3aXRoIHRoZSBzdGVwDQorCQl3aGlsZSh4IDwgZW5kKSB7DQorCQkJazFtYXAuY2xlYXIoKTsNCisJCQlrMm1hcC5jbGVhcigpOw0KKwkJCWszbWFwLmNsZWFyKCk7DQorCQkJazRtYXAuY2xlYXIoKTsNCisJCQlrNW1hcC5jbGVhcigpOw0KKwkJCWs2bWFwLmNsZWFyKCk7DQorCQkJZmluYWxFc3RpbWF0ZS5jbGVhcigpOw0KKwkJCWJvb2xlYW4gcmV0cnkgPSBmYWxzZTsNCisJCQkNCisJCQlpZihDSEVDS19TQU5FKSBnZXRMYWJlbFNuYXBzaG90KHRocmVhZG51bSwgaURlY29yYXRvcnMpOw0KKwkJCS8vIFZhbGlkYXRpb24gY29kZSBrZXB0IGhlcmUgaWYgbmVlZGVkIGluIHRoZSBmdXR1cmUNCisJCQkNCisJCQkvKg0KKwkJCQ0KKwkJCSAgSGFzaE1hcDxTdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsLCBTdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsVmFsdWU+IHZhbGlkYXRlID0gbmV3IEhhc2hNYXA8U3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbCwgU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbFZhbHVlPigpOw0KKwkJCSANCisJCQkNCisJCQlpZighcmVkbykgCQ0KKwkJCQlmb3IoU3RhbmRhcmREaXNlYXNlTW9kZWxJbXBsIHNkbTpkaXNlYXNlTW9kZWxEZWNvcmF0b3JzKSB7DQorCQkJCQlmb3IgKGZpbmFsIEl0ZXJhdG9yPER5bmFtaWNMYWJlbD4gY3VycmVudFN0YXRlTGFiZWxJdGVyID0gc2RtLmdldExhYmVsc1RvVXBkYXRlKHRocmVhZG51bSwgbnVtX3RocmVhZHMpDQorCQkJCQkJLml0ZXJhdG9yKCk7IGN1cnJlbnRTdGF0ZUxhYmVsSXRlci5oYXNOZXh0KCk7KSB7DQorCQkJCQkJZmluYWwgU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbCBkaXNlYXNlTGFiZWwgPSAoU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbCkgY3VycmVudFN0YXRlTGFiZWxJdGVyDQorCQkJCQkJLm5leHQoKTsNCisJCQkJCQlmaW5hbCBTdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsVmFsdWUgdmFsID0gKFN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZSlkaXNlYXNlTGFiZWwuZ2V0Q3VycmVudERpc2Vhc2VNb2RlbFRlbXBMYWJlbFZhbHVlKCk7DQorCQkJCQkJdmFsaWRhdGUucHV0KGRpc2Vhc2VMYWJlbCwgdmFsKTsNCisJCQkJCX0NCisJCQkJfQ0KKwkJCWVsc2Ugew0KKwkJCQlmb3IoU3RhbmRhcmREaXNlYXNlTW9kZWxJbXBsIHNkbTpkaXNlYXNlTW9kZWxEZWNvcmF0b3JzKQ0KKwkJCQkJZm9yIChmaW5hbCBJdGVyYXRvcjxEeW5hbWljTGFiZWw+IGN1cnJlbnRTdGF0ZUxhYmVsSXRlciA9IHNkbS5nZXRMYWJlbHNUb1VwZGF0ZSh0aHJlYWRudW0sIG51bV90aHJlYWRzKQ0KKwkJCQkJCQkuaXRlcmF0b3IoKTsgY3VycmVudFN0YXRlTGFiZWxJdGVyLmhhc05leHQoKTspIHsNCisJCQkJCQkJZmluYWwgU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbCBkaXNlYXNlTGFiZWwgPSAoU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbCkgY3VycmVudFN0YXRlTGFiZWxJdGVyDQorCQkJCQkJCS5uZXh0KCk7DQorCQkJCQkJCWZpbmFsIFNJUkxhYmVsVmFsdWUgdmFsID0gKFNJUkxhYmVsVmFsdWUpZGlzZWFzZUxhYmVsLmdldEN1cnJlbnREaXNlYXNlTW9kZWxUZW1wTGFiZWxWYWx1ZSgpOw0KKwkJCQkJCQl2YWxpZGF0ZS5wdXQoZGlzZWFzZUxhYmVsLCB2YWwpOw0KKwkJCQkJCQlmaW5hbCBTSVJMYWJlbFZhbHVlIG9sZFZhbCA9IChTSVJMYWJlbFZhbHVlKXZhbGlkYXRlLmdldChkaXNlYXNlTGFiZWwpOw0KKwkJCQkJCQkNCisJCQkJCQkJaWYodmFsLmdldEkoKSAhPSBvbGRWYWwuZ2V0SSgpIHx8DQorCQkJCQkJCQkJdmFsLmdldFMoKSAhPSBvbGRWYWwuZ2V0UygpIHx8DQorCQkJCQkJCQkJdmFsLmdldFIoKSAhPSBvbGRWYWwuZ2V0UigpIHx8DQorCQkJCQkJCQkJLy92YWwuZ2V0RSgpICE9IG9sZFZhbC5nZXRFKCkgfHwNCisJCQkJCQkJCQl2YWwuZ2V0QmlydGhzKCkgIT0gb2xkVmFsLmdldEJpcnRocygpIHx8DQorCQkJCQkJCQkJdmFsLmdldERlYXRocygpICE9IG9sZFZhbC5nZXREZWF0aHMoKSB8fA0KKwkJCQkJCQkJCXZhbC5nZXREaXNlYXNlRGVhdGhzKCkgIT0gb2xkVmFsLmdldERpc2Vhc2VEZWF0aHMoKSANCisJCQkJCQkJCQkpDQorCQkJCQkJCQlBY3RpdmF0b3IubG9nRXJyb3IoIkVycm9yLCBvbGQgYW5kIG5ldyB2YWx1ZSBub3QgdGhlIHNhbWUgIGxhYmVsOiAiK2Rpc2Vhc2VMYWJlbCwgbmV3IEV4Y2VwdGlvbigpKTsNCisJCQkJCX0NCisJCQl9DQorCQkJKi8NCisJCQkNCisJCQkvLyBUb0RvOiBXZSBzaG91bGQgY2hlY2sgaWYgYSBtYXhpbXVtIG51bWJlciBvZiBpdGVyYXRpb25zIGhhdmUgYmVlbg0KKwkJCS8vIGV4Y2VlZGVkIGhlcmUgYW5kIHRocm93IGFuIGVycm9yLiANCisJCQkNCisJCQkvLyBGaXJzdCwgZ2V0IHRoZSBkZWx0YSB2YWx1ZXMgYXQgdGhlIGN1cnJlbnQgc3RhdGUNCisJCQlmb3IoRGVjb3JhdG9yIHNkbTppRGVjb3JhdG9ycykgDQorCQkJCSgoSW50ZWdyYXRpb25EZWNvcmF0b3Ipc2RtKS5jYWxjdWxhdGVEZWx0YSh0aW1lLCB0aW1lRGVsdGEsIHBhcnRpdGlvbmVyLnBhcnRpdGlvbkRlY29yYXRvckxhYmVscyhzZG0sIHRocmVhZG51bSkpOw0KKwkJCWZvcihEZWNvcmF0b3Igc2RtOmlEZWNvcmF0b3JzKQ0KKwkJCQkoKEludGVncmF0aW9uRGVjb3JhdG9yKXNkbSkuYXBwbHlFeHRlcm5hbERlbHRhcyh0aW1lLCB0aW1lRGVsdGEsIHBhcnRpdGlvbmVyLnBhcnRpdGlvbkRlY29yYXRvckxhYmVscyhzZG0sIHRocmVhZG51bSkpOw0KKwkJCQ0KKwkJCS8vIFNldCB0aGUgc2NhbGluZyBmYWN0b3IgZm9yIGRpc2Vhc2UgcGFyYW1ldGVycyBmb3IgZWFjaCBkZWNvcmF0b3IgYW5kIGxvY2F0aW9uDQorCQkJZm9yKERlY29yYXRvciBzZG06aURlY29yYXRvcnMpIHsNCisJCQkJZm9yIChmaW5hbCBJdGVyYXRvcjxEeW5hbWljTGFiZWw+IGN1cnJlbnRTdGF0ZUxhYmVsSXRlciA9IHBhcnRpdGlvbmVyLnBhcnRpdGlvbkRlY29yYXRvckxhYmVscyhzZG0sIHRocmVhZG51bSkNCisJCQkJCQkuaXRlcmF0b3IoKTsgY3VycmVudFN0YXRlTGFiZWxJdGVyLmhhc05leHQoKTspIHsNCisJCQkJCWZpbmFsIEludGVncmF0aW9uTGFiZWwgZGlzZWFzZUxhYmVsID0gKEludGVncmF0aW9uTGFiZWwpIGN1cnJlbnRTdGF0ZUxhYmVsSXRlcg0KKwkJCQkJLm5leHQoKTsNCisJCQkJCQ0KKwkJCQkJSW50ZWdyYXRpb25MYWJlbFZhbHVlIHNjYWxlID0gKEludGVncmF0aW9uTGFiZWxWYWx1ZSlkaXNlYXNlTGFiZWwuZ2V0RXJyb3JTY2FsZSgpOw0KKwkJCQkJc2NhbGUuc2V0KChJbnRlZ3JhdGlvbkxhYmVsVmFsdWUpZGlzZWFzZUxhYmVsLmdldFRlbXBWYWx1ZSgpKTsNCisNCisNCisJCQkJCUludGVncmF0aW9uTGFiZWxWYWx1ZSBkdCA9IChJbnRlZ3JhdGlvbkxhYmVsVmFsdWUpRWNvcmVVdGlsLmNvcHkoZGlzZWFzZUxhYmVsLmdldERlbHRhVmFsdWUoKSk7DQorCQkJCQlkdC5zY2FsZShoKTsNCisJCQkJCWR0LmFicygpOw0KKwkJCQkJZHQuYWRkKFRJTlkpOw0KKwkJCQkJc2NhbGUuYWJzKCk7DQorCQkJCQlzY2FsZS5hZGQoZHQpOw0KKwkJCQl9DQorCQkJfQ0KKwkJCQ0KKwkJCS8vIFN0ZXAgMSBpbiBSdW5nZSBLdXR0YSBGZWhsYmVyZy4gDQorCQkJLy8gR2V0IHRoZSBkZWx0YSB2YWx1ZXMgb3V0IG9mIGVhY2ggbm9kZSBsYWJlbCBhbmQNCisJCQkvLyBidWlsZCBhIGZpcnN0IGVzdGltYXRlIG9mIHRoZSBuZXh0IHZhbHVlJw0KKwkJCWZvcihEZWNvcmF0b3Igc2RtOmlEZWNvcmF0b3JzKSB7DQorCQkJCWZvciAoZmluYWwgSXRlcmF0b3I8RHluYW1pY0xhYmVsPiBjdXJyZW50U3RhdGVMYWJlbEl0ZXIgPSBwYXJ0aXRpb25lci5wYXJ0aXRpb25EZWNvcmF0b3JMYWJlbHMoc2RtLCB0aHJlYWRudW0pDQorCQkJCQkJLml0ZXJhdG9yKCk7IGN1cnJlbnRTdGF0ZUxhYmVsSXRlci5oYXNOZXh0KCk7KSB7DQorCQkJCQlmaW5hbCBJbnRlZ3JhdGlvbkxhYmVsIGRpc2Vhc2VMYWJlbCA9IChJbnRlZ3JhdGlvbkxhYmVsKSBjdXJyZW50U3RhdGVMYWJlbEl0ZXINCisJCQkJCS5uZXh0KCk7DQorCQkJCQkNCisJCQkJCUludGVncmF0aW9uTGFiZWxWYWx1ZSBkZWx0YUxhYmVsID0gKEludGVncmF0aW9uTGFiZWxWYWx1ZSlkaXNlYXNlTGFiZWwuZ2V0RGVsdGFWYWx1ZSgpOw0KKwkJCQkJSW50ZWdyYXRpb25MYWJlbFZhbHVlIGNvcHlWYWwgPSAoSW50ZWdyYXRpb25MYWJlbFZhbHVlKUVjb3JlVXRpbC5jb3B5KGRlbHRhTGFiZWwpOw0KKwkJCQkJazFtYXAucHV0KGRpc2Vhc2VMYWJlbCwgY29weVZhbCk7DQorCQkJCQlpZihDSEVDS19TQU5FICYmIHJldHJ5KSBjaGVja0RlbHRhTGFiZWxTYW1lKChMYWJlbFZhbHVlKWRlbHRhTGFiZWwpOyAvLyBPbmx5IGNoZWNrZWQgaW4gY2FzZSBvZiBhIHJldHJ5LiBUaGUgZmlyc3QgZGVsdGEgY2FsY3VsYXRlZCANCisJCQkJCWlmKENIRUNLX1NBTkUpIGRlbHRhTGFiZWxWYWx1ZVNuYXBzaG90LnB1dCgoKE5vZGVMYWJlbClkaXNlYXNlTGFiZWwpLmdldFVSSSgpLCAoTGFiZWxWYWx1ZSljb3B5VmFsKTsNCisJCQkJCWRlbHRhTGFiZWwuc2NhbGUoaCk7DQorCQkJCQlkZWx0YUxhYmVsLnNjYWxlKGIyMSk7DQorCQkJCQkoKEludGVncmF0aW9uTGFiZWxWYWx1ZSlkaXNlYXNlTGFiZWwuZ2V0UHJvYmVWYWx1ZSgpKS5zZXQoDQorCQkJCQkJCWRlbHRhTGFiZWwuYWRkKChJbnRlZ3JhdGlvbkxhYmVsVmFsdWUpDQorCQkJCQkJCWRpc2Vhc2VMYWJlbC4NCisJCQkJCQkJZ2V0VGVtcFZhbHVlKCkpKTsJDQorCQkJCX0NCisJCQl9DQorCQkJDQorCQkJLy8gTm93IGdldCB0aGUgbmV4dCBkZWx0YSB2YWx1ZXMNCisJCQlmb3IoRGVjb3JhdG9yIHNkbTppRGVjb3JhdG9ycykgDQorCQkJCSgoSW50ZWdyYXRpb25EZWNvcmF0b3Ipc2RtKS5jYWxjdWxhdGVEZWx0YSh0aW1lLCB0aW1lRGVsdGEsIHBhcnRpdGlvbmVyLnBhcnRpdGlvbkRlY29yYXRvckxhYmVscyhzZG0sIHRocmVhZG51bSkpOw0KKwkJCWZvcihEZWNvcmF0b3Igc2RtOmlEZWNvcmF0b3JzKQ0KKwkJCQkoKEludGVncmF0aW9uRGVjb3JhdG9yKXNkbSkuYXBwbHlFeHRlcm5hbERlbHRhcyh0aW1lLCB0aW1lRGVsdGEsIHBhcnRpdGlvbmVyLnBhcnRpdGlvbkRlY29yYXRvckxhYmVscyhzZG0sIHRocmVhZG51bSkpOw0KKw0KKwkJCQ0KKwkJCS8vIFN0ZXAgMiBpbiBSdW5nZSBLdXR0YSBGZWhsYmVyZy4gDQorCQkJLy8gR2V0IHRoZSBkZWx0YSB2YWx1ZXMgb3V0IG9mIGVhY2ggbm9kZSBsYWJlbCBhbmQNCisJCQkvLyBidWlsZCBhIHNlY29uZCBlc3RpbWF0ZSBvZiB0aGUgbmV4dCB2YWx1ZQ0KKwkJCW4gPSAwOw0KKwkJCWZvcihEZWNvcmF0b3Igc2RtOmlEZWNvcmF0b3JzKSB7DQorCQkJCWZvciAoZmluYWwgSXRlcmF0b3I8RHluYW1pY0xhYmVsPiBjdXJyZW50U3RhdGVMYWJlbEl0ZXIgPSBwYXJ0aXRpb25lci5wYXJ0aXRpb25EZWNvcmF0b3JMYWJlbHMoc2RtLCB0aHJlYWRudW0pDQorCQkJCQkJLml0ZXJhdG9yKCk7IGN1cnJlbnRTdGF0ZUxhYmVsSXRlci5oYXNOZXh0KCk7KSB7DQorCQkJCQlmaW5hbCBJbnRlZ3JhdGlvbkxhYmVsIGRpc2Vhc2VMYWJlbCA9IChJbnRlZ3JhdGlvbkxhYmVsKSBjdXJyZW50U3RhdGVMYWJlbEl0ZXINCisJCQkJCS5uZXh0KCk7DQorCQkJCQkNCisJCQkJCUludGVncmF0aW9uTGFiZWxWYWx1ZSBkZWx0YUxhYmVsID0gKEludGVncmF0aW9uTGFiZWxWYWx1ZSlkaXNlYXNlTGFiZWwuZ2V0RGVsdGFWYWx1ZSgpOw0KKwkJCQkJazJtYXAucHV0KGRpc2Vhc2VMYWJlbCwoSW50ZWdyYXRpb25MYWJlbFZhbHVlKUVjb3JlVXRpbC5jb3B5KGRlbHRhTGFiZWwpKTsNCisJCQkJCV9rMVtuXS5zZXQoazFtYXAuZ2V0KGRpc2Vhc2VMYWJlbCkpOw0KKwkJCQkJX2syW25dLnNldChkZWx0YUxhYmVsKTsNCisJCQkJCQ0KKwkJCQkJSW50ZWdyYXRpb25MYWJlbFZhbHVlIGVzdERlbHRhID0gDQorCQkJCQkJX2sxW25dLnNjYWxlKGIzMSk7DQorCQkJCQlfazJbbl0uc2NhbGUoYjMyKTsNCisJCQkJCWVzdERlbHRhLmFkZChfazJbbl0pOw0KKwkJCQkJDQorCQkJCQllc3REZWx0YS5zY2FsZShoKTsNCisJCQkJCQ0KKwkJCQkJKChJbnRlZ3JhdGlvbkxhYmVsVmFsdWUpZGlzZWFzZUxhYmVsLmdldFByb2JlVmFsdWUoKSkuc2V0KGVzdERlbHRhLmFkZCgNCisJCQkJCQkJKEludGVncmF0aW9uTGFiZWxWYWx1ZSlkaXNlYXNlTGFiZWwuDQorCQkJCQkJCWdldFRlbXBWYWx1ZSgpKSk7DQorCQkJCX0NCisJCQkJKytuOw0KKwkJCX0NCisJCQkNCisJCQkvLyBOb3cgZ2V0IHRoZSBuZXh0IGRlbHRhIHZhbHVlcw0KKwkJCWZvcihEZWNvcmF0b3Igc2RtOmlEZWNvcmF0b3JzKSANCisJCQkJKChJbnRlZ3JhdGlvbkRlY29yYXRvcilzZG0pLmNhbGN1bGF0ZURlbHRhKHRpbWUsIHRpbWVEZWx0YSwgcGFydGl0aW9uZXIucGFydGl0aW9uRGVjb3JhdG9yTGFiZWxzKHNkbSwgdGhyZWFkbnVtKSk7DQorCQkJZm9yKERlY29yYXRvciBzZG06aURlY29yYXRvcnMpDQorCQkJCSgoSW50ZWdyYXRpb25EZWNvcmF0b3Ipc2RtKS5hcHBseUV4dGVybmFsRGVsdGFzKHRpbWUsIHRpbWVEZWx0YSwgcGFydGl0aW9uZXIucGFydGl0aW9uRGVjb3JhdG9yTGFiZWxzKHNkbSwgdGhyZWFkbnVtKSk7DQorDQorCQkJDQorCQkJLy8gU3RlcCAzIGluIFJ1bmdlIEt1dHRhIEZlaGxiZXJnLiANCisJCQkvLyBHZXQgdGhlIGRlbHRhIHZhbHVlcyBvdXQgb2YgZWFjaCBub2RlIGxhYmVsIGFuZA0KKwkJCS8vIGJ1aWxkIGEgdGhpcmQgZXN0aW1hdGUgb2YgdGhlIG5leHQgdmFsdWUNCisJCQluID0gMDsNCisJCQlmb3IoRGVjb3JhdG9yIHNkbTppRGVjb3JhdG9ycykgew0KKwkJCQlmb3IgKGZpbmFsIEl0ZXJhdG9yPER5bmFtaWNMYWJlbD4gY3VycmVudFN0YXRlTGFiZWxJdGVyID0gcGFydGl0aW9uZXIucGFydGl0aW9uRGVjb3JhdG9yTGFiZWxzKHNkbSwgdGhyZWFkbnVtKQ0KKwkJCQkJCS5pdGVyYXRvcigpOyBjdXJyZW50U3RhdGVMYWJlbEl0ZXIuaGFzTmV4dCgpOykgew0KKwkJCQkJZmluYWwgSW50ZWdyYXRpb25MYWJlbCBkaXNlYXNlTGFiZWwgPSAoSW50ZWdyYXRpb25MYWJlbCkgY3VycmVudFN0YXRlTGFiZWxJdGVyDQorCQkJCQkubmV4dCgpOw0KKwkJCQkJDQorCQkJCQlJbnRlZ3JhdGlvbkxhYmVsVmFsdWUgZGVsdGFMYWJlbCA9IChJbnRlZ3JhdGlvbkxhYmVsVmFsdWUpZGlzZWFzZUxhYmVsLmdldERlbHRhVmFsdWUoKTsNCisJCQkJCWszbWFwLnB1dChkaXNlYXNlTGFiZWwsIChJbnRlZ3JhdGlvbkxhYmVsVmFsdWUpRWNvcmVVdGlsLmNvcHkoZGVsdGFMYWJlbCkpOw0KKwkJCQkJDQorCQkJCQlfazFbbl0uc2V0KGsxbWFwLmdldChkaXNlYXNlTGFiZWwpKTsNCisJCQkJCV9rMltuXS5zZXQoazJtYXAuZ2V0KGRpc2Vhc2VMYWJlbCkpOw0KKwkJCQkJX2szW25dLnNldChkZWx0YUxhYmVsKTsNCisJCQkJCQ0KKwkJCQkJX2sxW25dLnNjYWxlKGI0MSk7DQorCQkJCQlfazJbbl0uc2NhbGUoYjQyKTsNCisJCQkJCV9rM1tuXS5zY2FsZShiNDMpOw0KKwkJCQkJSW50ZWdyYXRpb25MYWJlbFZhbHVlIGVzdERlbHRhID0gX2sxW25dOw0KKwkJCQkJZXN0RGVsdGEuYWRkKF9rMltuXSk7DQorCQkJCQllc3REZWx0YS5hZGQoX2szW25dKTsNCisJCQkJCQ0KKwkJCQkJZXN0RGVsdGEuc2NhbGUoaCk7DQorCQkJCQkNCisJCQkJCSgoSW50ZWdyYXRpb25MYWJlbFZhbHVlKWRpc2Vhc2VMYWJlbC5nZXRQcm9iZVZhbHVlKCkpLnNldChlc3REZWx0YS5hZGQoDQorCQkJCQkJCShJbnRlZ3JhdGlvbkxhYmVsVmFsdWUpZGlzZWFzZUxhYmVsLg0KKwkJCQkJCQlnZXRUZW1wVmFsdWUoKSkpOw0KKwkJCQl9CQ0KKwkJCQkrK247DQorCQkJfQ0KKwkJCQ0KKwkJCS8vIE5vdyBnZXQgdGhlIG5leHQgZGVsdGEgdmFsdWVzDQorCQkJZm9yKERlY29yYXRvciBzZG06aURlY29yYXRvcnMpIA0KKwkJCQkoKEludGVncmF0aW9uRGVjb3JhdG9yKXNkbSkuY2FsY3VsYXRlRGVsdGEodGltZSwgdGltZURlbHRhLCBwYXJ0aXRpb25lci5wYXJ0aXRpb25EZWNvcmF0b3JMYWJlbHMoc2RtLCB0aHJlYWRudW0pKTsNCisJCQlmb3IoRGVjb3JhdG9yIHNkbTppRGVjb3JhdG9ycykNCisJCQkJKChJbnRlZ3JhdGlvbkRlY29yYXRvcilzZG0pLmFwcGx5RXh0ZXJuYWxEZWx0YXModGltZSwgdGltZURlbHRhLCBwYXJ0aXRpb25lci5wYXJ0aXRpb25EZWNvcmF0b3JMYWJlbHMoc2RtLCB0aHJlYWRudW0pKTsNCisNCisJCQkNCisJCQkvLyBTdGVwIDQgaW4gUnVuZ2UgS3V0dGEgRmVobGJlcmcuIA0KKwkJCS8vIEdldCB0aGUgZGVsdGEgdmFsdWVzIG91dCBvZiBlYWNoIG5vZGUgbGFiZWwgYW5kDQorCQkJLy8gYnVpbGQgYSBmb3VydGggZXN0aW1hdGUgb2YgdGhlIG5leHQgdmFsdWUNCisJCQluID0gMDsNCisJCQlmb3IoRGVjb3JhdG9yIHNkbTppRGVjb3JhdG9ycykgew0KKwkJCQlmb3IgKGZpbmFsIEl0ZXJhdG9yPER5bmFtaWNMYWJlbD4gY3VycmVudFN0YXRlTGFiZWxJdGVyID0gcGFydGl0aW9uZXIucGFydGl0aW9uRGVjb3JhdG9yTGFiZWxzKHNkbSwgdGhyZWFkbnVtKQ0KKwkJCQkJCS5pdGVyYXRvcigpOyBjdXJyZW50U3RhdGVMYWJlbEl0ZXIuaGFzTmV4dCgpOykgew0KKwkJCQkJZmluYWwgSW50ZWdyYXRpb25MYWJlbCBkaXNlYXNlTGFiZWwgPSAoSW50ZWdyYXRpb25MYWJlbCkgY3VycmVudFN0YXRlTGFiZWxJdGVyDQorCQkJCQkubmV4dCgpOw0KKwkJCQkJDQorCQkJCQlJbnRlZ3JhdGlvbkxhYmVsVmFsdWUgZGVsdGFMYWJlbCA9IChJbnRlZ3JhdGlvbkxhYmVsVmFsdWUpZGlzZWFzZUxhYmVsLmdldERlbHRhVmFsdWUoKTsNCisJCQkJCWs0bWFwLnB1dChkaXNlYXNlTGFiZWwsKEludGVncmF0aW9uTGFiZWxWYWx1ZSlFY29yZVV0aWwuY29weShkZWx0YUxhYmVsKSk7DQorCQkJCQkNCisJCQkJCV9rMVtuXS5zZXQoazFtYXAuZ2V0KGRpc2Vhc2VMYWJlbCkpOw0KKwkJCQkJX2syW25dLnNldChrMm1hcC5nZXQoZGlzZWFzZUxhYmVsKSk7DQorCQkJCQlfazNbbl0uc2V0KGszbWFwLmdldChkaXNlYXNlTGFiZWwpKTsNCisJCQkJCV9rNFtuXS5zZXQoZGVsdGFMYWJlbCk7DQorCQkJCQkNCisJCQkJCV9rMVtuXS5zY2FsZShiNTEpOw0KKwkJCQkJX2syW25dLnNjYWxlKGI1Mik7DQorCQkJCQlfazNbbl0uc2NhbGUoYjUzKTsNCisJCQkJCV9rNFtuXS5zY2FsZShiNTQpOw0KKwkJCQkJDQorCQkJCQlJbnRlZ3JhdGlvbkxhYmVsVmFsdWUgZXN0RGVsdGEgPSBfazFbbl07DQorCQkJCQllc3REZWx0YS5hZGQoX2syW25dKTsNCisJCQkJCWVzdERlbHRhLmFkZChfazNbbl0pOw0KKwkJCQkJZXN0RGVsdGEuYWRkKF9rNFtuXSk7DQorCQkJCQkNCisJCQkJCWVzdERlbHRhLnNjYWxlKGgpOw0KKwkJCQkJKChJbnRlZ3JhdGlvbkxhYmVsVmFsdWUpZGlzZWFzZUxhYmVsLmdldFByb2JlVmFsdWUoKSkuc2V0KGVzdERlbHRhLmFkZCgNCisJCQkJCQkJKEludGVncmF0aW9uTGFiZWxWYWx1ZSlkaXNlYXNlTGFiZWwuDQorCQkJCQkJCWdldFRlbXBWYWx1ZSgpKSk7DQorCQkJCX0NCisJCQkJKytuOw0KKwkJCX0NCisJCQ0KKwkJCS8vIE5vdyBnZXQgdGhlIG5leHQgZGVsdGEgdmFsdWVzDQorCQkJZm9yKERlY29yYXRvciBzZG06aURlY29yYXRvcnMpIA0KKwkJCQkoKEludGVncmF0aW9uRGVjb3JhdG9yKXNkbSkuY2FsY3VsYXRlRGVsdGEodGltZSwgdGltZURlbHRhLCBwYXJ0aXRpb25lci5wYXJ0aXRpb25EZWNvcmF0b3JMYWJlbHMoc2RtLCB0aHJlYWRudW0pKTsNCisJCQlmb3IoRGVjb3JhdG9yIHNkbTppRGVjb3JhdG9ycykNCisJCQkJKChJbnRlZ3JhdGlvbkRlY29yYXRvcilzZG0pLmFwcGx5RXh0ZXJuYWxEZWx0YXModGltZSwgdGltZURlbHRhLCBwYXJ0aXRpb25lci5wYXJ0aXRpb25EZWNvcmF0b3JMYWJlbHMoc2RtLCB0aHJlYWRudW0pKTsNCisNCisJCQkNCisJCQkvLyBTdGVwIDUgaW4gUnVuZ2UgS3V0dGEgRmVobGJlcmcuIA0KKwkJCS8vIEdldCB0aGUgZGVsdGEgdmFsdWVzIG91dCBvZiBlYWNoIG5vZGUgbGFiZWwgYW5kDQorCQkJLy8gYnVpbGQgYSBmaWZ0aCBlc3RpbWF0ZSBvZiB0aGUgbmV4dCB2YWx1ZQ0KKwkJCW4gPSAwOw0KKwkJCWZvcihEZWNvcmF0b3Igc2RtOmlEZWNvcmF0b3JzKSB7DQorCQkJCWZvciAoZmluYWwgSXRlcmF0b3I8RHluYW1pY0xhYmVsPiBjdXJyZW50U3RhdGVMYWJlbEl0ZXIgPSBwYXJ0aXRpb25lci5wYXJ0aXRpb25EZWNvcmF0b3JMYWJlbHMoc2RtLCB0aHJlYWRudW0pDQorCQkJCQkJLml0ZXJhdG9yKCk7IGN1cnJlbnRTdGF0ZUxhYmVsSXRlci5oYXNOZXh0KCk7KSB7DQorCQkJDQorCQkJCQlmaW5hbCBJbnRlZ3JhdGlvbkxhYmVsIGRpc2Vhc2VMYWJlbCA9IChJbnRlZ3JhdGlvbkxhYmVsKSBjdXJyZW50U3RhdGVMYWJlbEl0ZXINCisJCQkJCS5uZXh0KCk7DQorCQkJCQkNCisJCQkJCUludGVncmF0aW9uTGFiZWxWYWx1ZSBkZWx0YUxhYmVsID0gKEludGVncmF0aW9uTGFiZWxWYWx1ZSlkaXNlYXNlTGFiZWwuZ2V0RGVsdGFWYWx1ZSgpOw0KKwkJCQkJazVtYXAucHV0KGRpc2Vhc2VMYWJlbCwoSW50ZWdyYXRpb25MYWJlbFZhbHVlKUVjb3JlVXRpbC5jb3B5KGRlbHRhTGFiZWwpKTsNCisJCQkJCQ0KKwkJCQkJX2sxW25dLnNldChrMW1hcC5nZXQoZGlzZWFzZUxhYmVsKSk7DQorCQkJCQlfazJbbl0uc2V0KGsybWFwLmdldChkaXNlYXNlTGFiZWwpKTsNCisJCQkJCV9rM1tuXS5zZXQoazNtYXAuZ2V0KGRpc2Vhc2VMYWJlbCkpOw0KKwkJCQkJX2s0W25dLnNldChrNG1hcC5nZXQoZGlzZWFzZUxhYmVsKSk7DQorCQkJCQlfazVbbl0uc2V0KGRlbHRhTGFiZWwpOw0KKwkJCQkJDQorCQkJCQlfazFbbl0uc2NhbGUoYjYxKTsNCisJCQkJCV9rMltuXS5zY2FsZShiNjIpOw0KKwkJCQkJX2szW25dLnNjYWxlKGI2Myk7DQorCQkJCQlfazRbbl0uc2NhbGUoYjY0KTsNCisJCQkJCV9rNVtuXS5zY2FsZShiNjUpOw0KKwkJCQkJDQorCQkJCQlJbnRlZ3JhdGlvbkxhYmVsVmFsdWUgZXN0RGVsdGEgPSBfazFbbl07DQorCQkJCQllc3REZWx0YS5hZGQoX2syW25dKTsNCisJCQkJCWVzdERlbHRhLmFkZChfazNbbl0pOw0KKwkJCQkJZXN0RGVsdGEuYWRkKF9rNFtuXSk7DQorCQkJCQllc3REZWx0YS5hZGQoX2s1W25dKTsNCisJCQkJCQ0KKwkJCQkJZXN0RGVsdGEuc2NhbGUoaCk7DQorCQkJCQkNCisJCQkJCSgoSW50ZWdyYXRpb25MYWJlbFZhbHVlKWRpc2Vhc2VMYWJlbC5nZXRQcm9iZVZhbHVlKCkpLnNldChlc3REZWx0YS5hZGQoDQorCQkJCQkJCShJbnRlZ3JhdGlvbkxhYmVsVmFsdWUpZGlzZWFzZUxhYmVsLg0KKwkJCQkJCQlnZXRUZW1wVmFsdWUoKSkpOw0KKwkJCQl9CQ0KKwkJCQkrK247DQorCQkJfQ0KKwkJCQ0KKwkJCS8vIE5vdyBnZXQgdGhlIG5leHQgZGVsdGEgdmFsdWVzDQorCQkJZm9yKERlY29yYXRvciBzZG06aURlY29yYXRvcnMpIA0KKwkJCQkoKEludGVncmF0aW9uRGVjb3JhdG9yKXNkbSkuY2FsY3VsYXRlRGVsdGEodGltZSwgdGltZURlbHRhLCBwYXJ0aXRpb25lci5wYXJ0aXRpb25EZWNvcmF0b3JMYWJlbHMoc2RtLCB0aHJlYWRudW0pKTsNCisJCQlmb3IoRGVjb3JhdG9yIHNkbTppRGVjb3JhdG9ycykNCisJCQkJKChJbnRlZ3JhdGlvbkRlY29yYXRvcilzZG0pLmFwcGx5RXh0ZXJuYWxEZWx0YXModGltZSwgdGltZURlbHRhLCBwYXJ0aXRpb25lci5wYXJ0aXRpb25EZWNvcmF0b3JMYWJlbHMoc2RtLCB0aHJlYWRudW0pKTsNCisNCisJCQkNCisJCQkvLyBTdGVwIDYgaW4gUnVuZ2UgS3V0dGEgRmVobGJlcmcuIA0KKwkJCS8vIENhbGN1bGF0ZSBrNg0KKwkJCW4gPSAwOw0KKwkJCWZvcihEZWNvcmF0b3Igc2RtOmlEZWNvcmF0b3JzKSB7DQorCQkJCWZvciAoZmluYWwgSXRlcmF0b3I8RHluYW1pY0xhYmVsPiBjdXJyZW50U3RhdGVMYWJlbEl0ZXIgPSBwYXJ0aXRpb25lci5wYXJ0aXRpb25EZWNvcmF0b3JMYWJlbHMoc2RtLCB0aHJlYWRudW0pDQorCQkJCQkJLml0ZXJhdG9yKCk7IGN1cnJlbnRTdGF0ZUxhYmVsSXRlci5oYXNOZXh0KCk7KSB7DQorCQkJDQorCQkJCQlmaW5hbCBJbnRlZ3JhdGlvbkxhYmVsIGRpc2Vhc2VMYWJlbCA9IChJbnRlZ3JhdGlvbkxhYmVsKSBjdXJyZW50U3RhdGVMYWJlbEl0ZXINCisJCQkJCS5uZXh0KCk7DQorCQkJCQkNCisJCQkJCUludGVncmF0aW9uTGFiZWxWYWx1ZSBkZWx0YUxhYmVsID0gKEludGVncmF0aW9uTGFiZWxWYWx1ZSlkaXNlYXNlTGFiZWwuZ2V0RGVsdGFWYWx1ZSgpOw0KKwkJCQkJazZtYXAucHV0KGRpc2Vhc2VMYWJlbCwoSW50ZWdyYXRpb25MYWJlbFZhbHVlKUVjb3JlVXRpbC5jb3B5KGRlbHRhTGFiZWwpKTsNCisJCQkJfQ0KKwkJCQkrK247DQorCQkJfQ0KKwkJCQ0KKwkJCS8vIFN0ZXAgNyBpbiBSdW5nZSBLdXR0YSBGZWhsYmVyZw0KKwkJCS8vIENhbGN1bGF0ZSB0aGUgdHdvIGVzdGltYXRlcyBmcm9tIGsxLCAuLiBrNiB2YWx1ZXMNCisJCQkvLyBhbmQgZGV0ZXJtaW5lIHRoZSBtYXhpbXVtIGRpZmZlcmVuY2UgKGVycm9yKSBiZXR3ZWVuIHRoZW0uDQorCQkJDQorCQkJYm9vbGVhbiBzdWNjZXNzID0gdHJ1ZTsgLy8gV2VyZSB3ZSBhYmxlIHRvIHVwZGF0ZSBhbGwgbGFiZWxzIHdpdGhvdXQgYSBsYXJnZSBlbm91Z2ggZXJyb3I/DQorCQkJZG91YmxlIG1heGVycm9yID0gMC4wOw0KKwkJCW4gPSAwOw0KKwkJCWZvcihEZWNvcmF0b3Igc2RtOmlEZWNvcmF0b3JzKSB7DQorCQkJCWZvciAoZmluYWwgSXRlcmF0b3I8RHluYW1pY0xhYmVsPiBjdXJyZW50U3RhdGVMYWJlbEl0ZXIgPSBwYXJ0aXRpb25lci5wYXJ0aXRpb25EZWNvcmF0b3JMYWJlbHMoc2RtLCB0aHJlYWRudW0pDQorCQkJCQkJLml0ZXJhdG9yKCk7IGN1cnJlbnRTdGF0ZUxhYmVsSXRlci5oYXNOZXh0KCk7KSB7DQorCQkJDQorCQkJCQlmaW5hbCBJbnRlZ3JhdGlvbkxhYmVsIGRpc2Vhc2VMYWJlbCA9IChJbnRlZ3JhdGlvbkxhYmVsKSBjdXJyZW50U3RhdGVMYWJlbEl0ZXINCisJCQkJCS5uZXh0KCk7DQorCQkJDQorCQkJCQlJbnRlZ3JhdGlvbkxhYmVsVmFsdWUgY3VycmVudFZhbHVlID0gKEludGVncmF0aW9uTGFiZWxWYWx1ZSlkaXNlYXNlTGFiZWwuZ2V0VGVtcFZhbHVlKCk7DQorCQkJCQkNCisJCQkJCV9rMVtuXS5zZXQoazFtYXAuZ2V0KGRpc2Vhc2VMYWJlbCkpOw0KKwkJCQkJX2szW25dLnNldChrM21hcC5nZXQoZGlzZWFzZUxhYmVsKSk7DQorCQkJCQlfazRbbl0uc2V0KGs0bWFwLmdldChkaXNlYXNlTGFiZWwpKTsNCisJCQkJCV9rNVtuXS5zZXQoazVtYXAuZ2V0KGRpc2Vhc2VMYWJlbCkpOw0KKwkJCQkJX2s2W25dLnNldChrNm1hcC5nZXQoZGlzZWFzZUxhYmVsKSk7CQ0KKwkJCQkJDQorCQkJCQlfazFbbl0uc2NhbGUoYzEpOw0KKwkJCQkJX2szW25dLnNjYWxlKGMzKTsNCisJCQkJCV9rNFtuXS5zY2FsZShjNCk7DQorCQkJCQlfazZbbl0uc2NhbGUoYzYpOw0KKwkJCQkJDQorCQkJCQkvLyBOZXcgWQ0KKwkJCQkJSW50ZWdyYXRpb25MYWJlbFZhbHVlIHlvdXQgPSAoSW50ZWdyYXRpb25MYWJlbFZhbHVlKQ0KKwkJCQkJCUVjb3JlVXRpbC5jb3B5KF9rMVtuXS5hZGQoX2szW25dKS5hZGQoX2s0W25dKS5hZGQoX2s2W25dKSk7DQorCQkJCQkNCisJCQkJCXlvdXQuc2NhbGUoaCk7DQorCQkJCQl5b3V0LmFkZChjdXJyZW50VmFsdWUpOw0KKwkJCQkJCQkJDQorCQkJCQkNCisJCQkJCS8vIEdldCB0aGUgZXJyb3INCisJCQkJCV9rMVtuXS5zZXQoazFtYXAuZ2V0KGRpc2Vhc2VMYWJlbCkpOw0KKwkJCQkJX2szW25dLnNldChrM21hcC5nZXQoZGlzZWFzZUxhYmVsKSk7DQorCQkJCQlfazRbbl0uc2V0KGs0bWFwLmdldChkaXNlYXNlTGFiZWwpKTsNCisJCQkJCV9rNVtuXS5zZXQoazVtYXAuZ2V0KGRpc2Vhc2VMYWJlbCkpOw0KKwkJCQkJX2s2W25dLnNldChrNm1hcC5nZXQoZGlzZWFzZUxhYmVsKSk7CQ0KKwkJCQkJDQorCQkJCQlfazFbbl0uc2NhbGUoZGMxKTsNCisJCQkJCV9rM1tuXS5zY2FsZShkYzMpOw0KKwkJCQkJX2s0W25dLnNjYWxlKGRjNCk7DQorCQkJCQlfazVbbl0uc2NhbGUoZGM1KTsNCisJCQkJCV9rNltuXS5zY2FsZShkYzYpOw0KKwkJCQkJDQorCQkJCQlJbnRlZ3JhdGlvbkxhYmVsVmFsdWUgeWVycm9yID0gKEludGVncmF0aW9uTGFiZWxWYWx1ZSkgRWNvcmVVdGlsLmNvcHkoX2sxW25dLmFkZChfazNbbl0pLmFkZChfazRbbl0pLmFkZChfazVbbl0pLmFkZChfazZbbl0pKTsNCisJCQkJCXllcnJvci5zY2FsZShoKTsNCisJCQkJCQ0KKwkJCQkJeWVycm9yLmRpdmlkZSgoSW50ZWdyYXRpb25MYWJlbFZhbHVlKWRpc2Vhc2VMYWJlbC5nZXRFcnJvclNjYWxlKCkpOw0KKwkJCQkJZG91YmxlIGVycm9yID0geWVycm9yLm1heCgpOw0KKwkJCQkJZXJyb3IgLz0gZ2V0UmVsYXRpdmVUb2xlcmFuY2UoKTsNCisJCQkJCQ0KKwkJCQkJaWYoZXJyb3IgPiBtYXhlcnJvcikgew0KKwkJCQkJCW1heGVycm9yID0gZXJyb3I7DQorCQkJCQl9DQorCQkJCQkNCisJCQkJCWlmKGVycm9yIDw9IDEuMCkgDQorCQkJCQkJZmluYWxFc3RpbWF0ZS5wdXQoZGlzZWFzZUxhYmVsLCANCisJCQkJCQkJKEludGVncmF0aW9uTGFiZWxWYWx1ZSlFY29yZVV0aWwuY29weSh5b3V0KSk7DQorCQkJCX0NCisJCQkJKytuOw0KKwkJCX0NCisJCQkNCisJCQlqb2JzW3RocmVhZG51bV0uaCA9IGg7DQorCQkJam9ic1t0aHJlYWRudW1dLm1heGVycm9yID0gbWF4ZXJyb3I7DQorCQkJdHJ5IHsNCisJCQkJc3RlcFNpemVCYXJyaWVyLmF3YWl0KCk7DQorCQkJfSBjYXRjaChJbnRlcnJ1cHRlZEV4Y2VwdGlvbiBpZSkgew0KKwkJCQkvLyBTaG91bGQgbmV2ZXIgaGFwcGVuDQorCQkJCUFjdGl2YXRvci5sb2dFcnJvcihpZS5nZXRNZXNzYWdlKCksIGllKTsNCisJCQl9IGNhdGNoKEJyb2tlbkJhcnJpZXJFeGNlcHRpb24gYmJlKSB7DQorCQkJCS8vIFNob3VsZCBuZXZlciBoYXBwZW4NCisJCQkJQWN0aXZhdG9yLmxvZ0Vycm9yKGJiZS5nZXRNZXNzYWdlKCksIGJiZSk7DQorCQkJfQ0KKwkJCQ0KKwkJCS8vIEF0IGxlYXN0IG9uZSBvZiB0aGUgdGhyZWFkcyBoYWQgdG8gbGFyZ2Ugb2YgYW4gZXJyb3IsIGZhaWwNCisJCQlpZih0aGlzLm1heGltdW1FcnJvciA+IDEuMCkNCisJCQkJc3VjY2VzcyA9IGZhbHNlOw0KKwkJCQ0KKwkJCS8vIEFyZSB3ZSBkb25lPw0KKwkJCWlmKHN1Y2Nlc3MpIHsJDQorCQkJCXJldHJ5ID0gZmFsc2U7DQorCQkJCS8vIENoZWNrIHRvIG1ha2Ugc3VyZQ0KKwkJCQlpZih0aGlzLnNtYWxsZXN0SCA+IGgpDQorCQkJCQlBY3RpdmF0b3IubG9nRXJyb3IoIkVycm9yLCBoIHdhcyBsZXNzIHRoYW4gdGhlIHNtYWxsZXN0LCBwZXJoYXBzIGJhcnJpZXIgcHJvY2VzcyBmYWlsZWQgdG8gZXhlY3V0ZT8gaDoiK2grIiB2cyAiK3RoaXMuc21hbGxlc3RILCBuZXcgRXhjZXB0aW9uKCkpOw0KKw0KKwkJCQkvLyBZZXMsIGh1cnJhaCwgYWR2YW5jZSB4IHVzaW5nIHRoZSBzdGVwIHNpemUgaA0KKwkJCQl4Kz1oOw0KKw0KKwkJCQlpZih0aGlzLm1heGltdW1FcnJvciA+IEVSUkNPTikNCisJCQkJCWggPSBTQUZFVFkqaCpNYXRoLnBvdyh0aGlzLm1heGltdW1FcnJvciwgUEdST1cpOw0KKwkJCQllbHNlDQorCQkJCQloID0gNS4wKmg7DQorDQorLy8JCQkJQWN0aXZhdG9yLmxvZ0luZm9ybWF0aW9uKCJTdWNjZXNzIFN0ZXA6IitoKyIgeD0iK3gpOw0KKwkJCQkJDQorCQkJCS8vIExpbWl0IHRvIG1heCAxDQorCQkJCWlmKGggPiAxLjApICBoID0gMS4wOw0KKwkJCQkNCisNCisJCQkJCS8vIE1ha2Ugc3VyZSB3ZSBkb24ndCBvdmVyc2hvb3QNCisJCQkJaWYoeCA8IGVuZCAmJiB4K2ggPiBlbmQpIGggPSAoZW5kLXgpOw0KKwkJCQkJDQorCQkJCQkNCisJCQkJCS8vIFVwZGF0ZSB0aGUgY3VycmVudCB2YWx1ZSB0byB0aGUgbmV3IHBvc2l0aW9uDQorCQkJCWZvcihEZWNvcmF0b3Igc2RtOmlEZWNvcmF0b3JzKSB7DQorCQkJCQlmb3IgKGZpbmFsIEl0ZXJhdG9yPER5bmFtaWNMYWJlbD4gY3VycmVudFN0YXRlTGFiZWxJdGVyID0gcGFydGl0aW9uZXIucGFydGl0aW9uRGVjb3JhdG9yTGFiZWxzKHNkbSwgdGhyZWFkbnVtKQ0KKwkJCQkJCQkuaXRlcmF0b3IoKTsgY3VycmVudFN0YXRlTGFiZWxJdGVyLmhhc05leHQoKTspIHsNCisJCQkJCQlmaW5hbCBJbnRlZ3JhdGlvbkxhYmVsIGRpc2Vhc2VMYWJlbCA9IChJbnRlZ3JhdGlvbkxhYmVsKSBjdXJyZW50U3RhdGVMYWJlbEl0ZXIubmV4dCgpOw0KKwkJCQkJCSgoSW50ZWdyYXRpb25MYWJlbFZhbHVlKWRpc2Vhc2VMYWJlbC5nZXRUZW1wVmFsdWUoKSkuc2V0KGZpbmFsRXN0aW1hdGUuZ2V0KGRpc2Vhc2VMYWJlbCkpOw0KKwkJCQkJCSgoSW50ZWdyYXRpb25MYWJlbFZhbHVlKWRpc2Vhc2VMYWJlbC5nZXRQcm9iZVZhbHVlKCkpLnNldChmaW5hbEVzdGltYXRlLmdldChkaXNlYXNlTGFiZWwpKTsNCisJCQkJCX0NCisJCQkJfQ0KKwkJCQkJDQorCQkJCS8vIFdhaXQgdW50aWwgYWxsIG90aGVyIHRocmVhZHMgaGF2ZSB1cGRhdGVkIHRoZSBjdXJyZW50IHZhbHVlIA0KKwkJCQl0cnkgew0KKwkJCQkJdXBkYXRlRG9uZUJhcnJpZXIuYXdhaXQoKTsNCisJCQkJfSBjYXRjaChJbnRlcnJ1cHRlZEV4Y2VwdGlvbiBpZSkgew0KKwkJCQkJLy8gU2hvdWxkIG5ldmVyIGhhcHBlbg0KKwkJCQkJQWN0aXZhdG9yLmxvZ0Vycm9yKGllLmdldE1lc3NhZ2UoKSwgaWUpOw0KKwkJCQl9IGNhdGNoKEJyb2tlbkJhcnJpZXJFeGNlcHRpb24gYmJlKSB7DQorCQkJCQkvLyBTaG91bGQgbmV2ZXIgaGFwcGVuDQorCQkJCQlBY3RpdmF0b3IubG9nRXJyb3IoYmJlLmdldE1lc3NhZ2UoKSwgYmJlKTsNCisJCQkJfQ0KKwkJCQkJDQorCQkJCWRvdWJsZSBwcm9ncmVzcyA9IChlbmQteCA8IDAuMCk/IDEuMDoxLjAtKGVuZC14KTsNCisJCQkJam9ic1t0aHJlYWRudW1dLnNldFByb2dyZXNzKHByb2dyZXNzKTsNCisJCQkJaWYoeCA+IG5leHRQcm9ncmVzc1JlcG9ydCkgew0KKwkJCQkJLy8gR2V0IHRoZSBwcm9ncmVzcyBmb3IgYWxsIHRocmVhZHMNCisJCQkJCWZvcihpbnQgaT0wO2k8bnVtX3RocmVhZHM7KytpKSBpZihpIT10aHJlYWRudW0gJiYgam9ic1tpXSAhPSBudWxsKSBwcm9ncmVzcys9am9ic1tpXS5nZXRQcm9ncmVzcygpOw0KKwkJCQkJcHJvZ3Jlc3MgLz0gbnVtX3RocmVhZHM7DQorCQkJCQlmb3IoRGVjb3JhdG9yIHNkbTppRGVjb3JhdG9ycykgCQkJCQkJDQorCQkJCQkJc2RtLnNldFByb2dyZXNzKHByb2dyZXNzKTsNCisJCQkJCW5leHRQcm9ncmVzc1JlcG9ydCArPSBuZXh0UHJvZ3Jlc3NSZXBvcnRTdGVwOw0KKwkJCQl9DQorCQkJCQ0KKwkJCQlpZihDSEVDS19TQU5FKSBjaGVja0xhYmVsU2FuaXR5KHRocmVhZG51bSwgaURlY29yYXRvcnMsIGZhbHNlKTsNCisJCQl9IGVsc2Ugew0KKwkJCQlyZXRyeSA9IHRydWU7DQorCQkJCS8vIEF0IGxlYXN0IG9uZSB0aHJlYWQgZmFpbGVkLCBjaGFuZ2UgdGhlIHN0ZXAgc2l6ZQ0KKwkJCQkvLyBQcm9ibGVtLCBlcnJvciB0b28gYmlnLCB3ZSBuZWVkIHRvIHJlZHVjZSB0aGUgc3RlcCBzaXplDQorCQkJCWRlbHRhID0gU0FGRVRZKmgqTWF0aC5wb3codGhpcy5tYXhpbXVtRXJyb3IsUFNIUk5LKTsNCisgICAgICAgIAkJaWYoaCA+IDAuMCkNCisgICAgICAgIAkJCWggPSAoZGVsdGEgPiAwLjEqaCk/IGRlbHRhOjAuMSpoOw0KKyAgICAgICAgCQllbHNlDQorICAgICAgICAJCQloID0gKGRlbHRhID4gMC4xKmgpPyAwLjEqaDpkZWx0YTsNCisNCisvLwkJCQlBY3RpdmF0b3IubG9nSW5mb3JtYXRpb24oIkZhaWwgaDoiK2grIiB4PSIreCk7DQorDQorCQkJCS8vIFdlIGRpZG4ndCBzdWNjZWVkLiANCisgDQorCQkJCS8vUmVzZXQgdGhlIGVzdGltYXRlZCB2YWx1ZSBiYWNrIHRvIHRoZSBvcmlnaW5hbCwgdGhlIHN0ZXAgc2l6ZQ0KKwkJCQkvLyBoYXMgYmVlbiByZWR1Y2VkIHNvIHdlIHdlbGwgdHJ5IGFnYWluLg0KKwkJCQkvLyBTZXQgdGhlIGVzdGltYXRlZCB2YWx1ZSBiYWNrIHRvIHRoZSBjdXJyZW50IG9yaWdpbmFsIHZhbHVlDQorICAgIAkJCWZvcihEZWNvcmF0b3Igc2RtOmlEZWNvcmF0b3JzKSB7DQorICAgIAkJCQlmb3IgKGZpbmFsIEl0ZXJhdG9yPER5bmFtaWNMYWJlbD4gY3VycmVudFN0YXRlTGFiZWxJdGVyID0gcGFydGl0aW9uZXIucGFydGl0aW9uRGVjb3JhdG9yTGFiZWxzKHNkbSwgdGhyZWFkbnVtKQ0KKyAgICAJCQkJCQkuaXRlcmF0b3IoKTsgY3VycmVudFN0YXRlTGFiZWxJdGVyLmhhc05leHQoKTspIHsNCisgICAgCQkJCQlmaW5hbCBJbnRlZ3JhdGlvbkxhYmVsIGRpc2Vhc2VMYWJlbCA9IChJbnRlZ3JhdGlvbkxhYmVsKSBjdXJyZW50U3RhdGVMYWJlbEl0ZXIubmV4dCgpOw0KKyAgICAJCQkJCSgoSW50ZWdyYXRpb25MYWJlbFZhbHVlKWRpc2Vhc2VMYWJlbC5nZXRQcm9iZVZhbHVlKCkpLnNldCgoSW50ZWdyYXRpb25MYWJlbFZhbHVlKWRpc2Vhc2VMYWJlbC5nZXRUZW1wVmFsdWUoKSk7DQorICAgIAkJCQl9DQorICAgIAkJCX0NCisgICAgCQkJaWYoQ0hFQ0tfU0FORSkgY2hlY2tMYWJlbFNhbml0eSh0aHJlYWRudW0sIGlEZWNvcmF0b3JzLCB0cnVlKTsNCisgICAJCX0NCisJCX0gLy8gV2hpbGUgeCA8IGVuZA0KKwkJDQorCQlqb2JzW3RocmVhZG51bV0udCA9IHg7DQorCQlqb2JzW3RocmVhZG51bV0uaCA9IGg7DQorCQkNCisJCS8vIFJlbWVtYmVyIHRoZSBzdGVwIHNpemUgYW5kIHBvc2l0aW9uIGluIHRoZSBzb2x2ZXINCisJCXRoaXMuc2V0U3RlcFNpemUoaCk7DQorCQl0aGlzLnNldEN1cnJlbnRYKHgpOw0KKwkJDQorCQkvLyBXZSdyZSBkb25lDQorCQlmb3IoRGVjb3JhdG9yIHNkbTppRGVjb3JhdG9ycykgew0KKwkJCWZvciAoZmluYWwgSXRlcmF0b3I8RHluYW1pY0xhYmVsPiBjdXJyZW50U3RhdGVMYWJlbEl0ZXIgPSBwYXJ0aXRpb25lci5wYXJ0aXRpb25EZWNvcmF0b3JMYWJlbHMoc2RtLCB0aHJlYWRudW0pDQorCQkJCQkuaXRlcmF0b3IoKTsgY3VycmVudFN0YXRlTGFiZWxJdGVyLmhhc05leHQoKTspIHsNCisJCQkJZmluYWwgSW50ZWdyYXRpb25MYWJlbCBkaXNlYXNlTGFiZWwgPSAoSW50ZWdyYXRpb25MYWJlbCkgY3VycmVudFN0YXRlTGFiZWxJdGVyDQorCQkJCS5uZXh0KCk7DQorCQkNCisJCQkJLy8gVGhpcyBpcyB0aGUgbmV4dCBzdGF0ZSBmb3IgdGhlIGxhYmVsDQorCQkJCUludGVncmF0aW9uTGFiZWxWYWx1ZSBuZXh0U3RhdGUgPSAoSW50ZWdyYXRpb25MYWJlbFZhbHVlKWRpc2Vhc2VMYWJlbC5nZXROZXh0VmFsdWUoKTsNCisJCQkJLy8gVGhpcyBpcyB0aGUgb3JpZ2luYWwgY3VycmVudCBzdGF0ZSBhdCB0aGUgcHJldmlvdXMgY3ljbGUNCisJCQkJSW50ZWdyYXRpb25MYWJlbFZhbHVlIG9yaWdpbmFsU3RhdGUgPSAoSW50ZWdyYXRpb25MYWJlbFZhbHVlKWRpc2Vhc2VMYWJlbC5nZXRDdXJyZW50VmFsdWUoKTsNCisJCQkJLy8gVGhpcyBpcyB0aGUgZmluYWwgdmFsdWUgY2FsY3VsYXRlZCBhdCBwb3NpdGlvbiB4Lg0KKwkJCQlJbnRlZ3JhdGlvbkxhYmVsVmFsdWUgbmV3VmFsdWUgPSAgZmluYWxFc3RpbWF0ZS5nZXQoZGlzZWFzZUxhYmVsKTsNCisJCQkJLy8geCBjb3VsZCBiZSBsYXJnZXIgdGhhbiB0aGUgcmVxdWVzdGVkIGN5Y2xlLCBzbyB3ZSBkbyBhIGxpbmVhciBpbnRlcnBvbGF0aW9uDQorCQkJCS8vIHRvIGZpdCBpdCBleGFjdGx5IHRvIHRoZSByZXF1ZXN0ZWQgY3ljbGUNCisJCQkJLy8gKioqIE5vdCBuZWVkZWQgc2luY2Ugd2UgYWx3YXlzIGVuZCBleGFjdGx5IGF0IHRoZSByZXF1ZXN0ZWQgY3ljbGUNCisJCQkJLy9hZGp1c3RWYWx1ZXNUb0N5Y2xlKG9yaWdpbmFsU3RhdGUsIG5ld1ZhbHVlLCB4LCBjeWNsZSk7DQorCQkJCQ0KKwkJCQkvLyBOZXcgdmFsdWUgaGFzIGJlZW4gbW9kaWZpZWQgaGVyZSB0byBmaXQgdGhlIHJlcXVlc3RlZCBjeWNsZQ0KKwkJCQluZXh0U3RhdGUuc2V0KG5ld1ZhbHVlKTsNCisJCQkJLy8gRG8gYW55IG1vZGVsIHNwZWNpZmljIHdvcmsgZm9yIGluc3RhbmNlIGFkZCBub2lzZQ0KKwkJCQkoKEludGVncmF0aW9uRGVjb3JhdG9yKXNkbSkuZG9Nb2RlbFNwZWNpZmljQWRqdXN0bWVudHMoKExhYmVsVmFsdWUpbmV4dFN0YXRlKTsNCisJCQkJLy8gVGhlIG5leHQgdmFsdWUgaXMgdmFsaWQgbm93Lg0KKwkJCQlkaXNlYXNlTGFiZWwuc2V0TmV4dFZhbHVlVmFsaWQodHJ1ZSk7DQorCQkJfQ0KKwkJfQ0KKw0KKwl9DQorCQ0KKwkvKioNCisJICogQWRqdXN0IHRoZSByZXR1cm5lZCBsYWJlbCBzbyB0aGF0IGl0IG1hdGNoZXMgdGhlIGV4YWN0IHZhbHVlIGF0IHRoZSByZXF1ZXN0ZWQgY3ljbGUNCisJICogaW5zdGVhZCBvZiB0aGUgdmFsdWUgYXQgeC4gV2UgZG8gdGhpcyBieSB1c2luZyB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIHggYW5kIHRoZSBjdXJyZW50DQorCSAqIGN5Y2xlIHRvIGFkanVzdCB0aGUgbGFiZWwuIG5leHRWYWx1ZUF0WCBpcyBtb2RpZmllZCBieSB0aGlzIGZ1bmN0aW9uDQorCSAqIA0KKwkgKiBAcGFyYW0gY3VycmVudFZhbHVlIFRoZSBjdXJyZW50IHZhbHVlDQorCSAqIEBwYXJhbSBuZXh0VmFsdWVBdFggVGhlIG5leHQgdmFsdWUgYXQgcG9zaXRpb24geA0KKwkgKiBAcGFyYW0geCBDdXJyZW50IHBvc2l0aW9uDQorCSAqIEBwYXJhbSBjeWNsZSBDdXJyZW50IGN5Y2xlDQorCSAqLw0KKwl2b2lkIGFkanVzdFZhbHVlc1RvQ3ljbGUoSW50ZWdyYXRpb25MYWJlbFZhbHVlIGN1cnJlbnRWYWx1ZSwgSW50ZWdyYXRpb25MYWJlbFZhbHVlIG5leHRWYWx1ZUF0WCwgZG91YmxlIHgsIGludCBjeWNsZSkgew0KKwkJSW50ZWdyYXRpb25MYWJlbFZhbHVlIHJlc3VsdCA9IChJbnRlZ3JhdGlvbkxhYmVsVmFsdWUpRWNvcmVVdGlsLmNvcHkoY3VycmVudFZhbHVlKTsNCisJCW5leHRWYWx1ZUF0WC5zdWIoY3VycmVudFZhbHVlKTsgLy8gZGlmZmVyZW5jZSBiZXR3ZWVuIG5ldyB2YWx1ZSBhbmQgb2xkIG5vdyBpbiBuZXh0VmFsdWVBdFgNCisJCW5leHRWYWx1ZUF0WC5zY2FsZSgxLjAvKHgtY3ljbGUrMSkpOw0KKwkJbmV4dFZhbHVlQXRYLnNldChyZXN1bHQuYWRkKG5leHRWYWx1ZUF0WCkpOw0KKwl9DQorCQ0KKwkNCisJDQorCS8qKg0KKwkgKiBSZXNldCB0aGUgc29sdmVyDQorCSAqIEBnZW5lcmF0ZWQgTk9UDQorCSAqLw0KKwlAT3ZlcnJpZGUNCisJcHVibGljIHZvaWQgcmVzZXQoKSB7DQorCQl0aGlzLnNldFN0ZXBTaXplKDEuMCk7DQorCQl0aGlzLnNldEN1cnJlbnRYKDAuMCk7DQorCQl0aGlzLnNldEluaXRpYWxpemVkKGZhbHNlKTsNCisJfQ0KKwkNCisJcHJvdGVjdGVkIGRvdWJsZSBnZXRTdGVwU2l6ZSgpIHsNCisJCXJldHVybiBzdGVwU2l6ZTsNCisJfQ0KKwkNCisJcHJvdGVjdGVkIGRvdWJsZSBnZXRDdXJyZW50WCgpIHsNCisJCXJldHVybiBjdXJyZW50WDsNCisJfQ0KKwkNCisJcHJvdGVjdGVkIHZvaWQgc2V0U3RlcFNpemUoZG91YmxlIGQpIHsNCisJCXN0ZXBTaXplID0gZDsNCisJfQ0KKwkNCisJcHJvdGVjdGVkIHZvaWQgc2V0Q3VycmVudFgoZG91YmxlIGQpIHsNCisJCWN1cnJlbnRYID0gZDsNCisJfQ0KKwkNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlAT3ZlcnJpZGUNCisJcHJvdGVjdGVkIEVDbGFzcyBlU3RhdGljQ2xhc3MoKSB7DQorCQlyZXR1cm4gUmtQYWNrYWdlLkxpdGVyYWxzLlJVTkdFX0tVVFRBOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIGRvdWJsZSBnZXRSZWxhdGl2ZVRvbGVyYW5jZSgpIHsNCisJCXJldHVybiByZWxhdGl2ZVRvbGVyYW5jZTsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyB2b2lkIHNldFJlbGF0aXZlVG9sZXJhbmNlKGRvdWJsZSBuZXdSZWxhdGl2ZVRvbGVyYW5jZSkgew0KKwkJZG91YmxlIG9sZFJlbGF0aXZlVG9sZXJhbmNlID0gcmVsYXRpdmVUb2xlcmFuY2U7DQorCQlyZWxhdGl2ZVRvbGVyYW5jZSA9IG5ld1JlbGF0aXZlVG9sZXJhbmNlOw0KKwkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQ0KKwkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIFJrUGFja2FnZS5SVU5HRV9LVVRUQV9fUkVMQVRJVkVfVE9MRVJBTkNFLCBvbGRSZWxhdGl2ZVRvbGVyYW5jZSwgcmVsYXRpdmVUb2xlcmFuY2UpKTsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCUBPdmVycmlkZQ0KKwlwdWJsaWMgT2JqZWN0IGVHZXQoaW50IGZlYXR1cmVJRCwgYm9vbGVhbiByZXNvbHZlLCBib29sZWFuIGNvcmVUeXBlKSB7DQorCQlzd2l0Y2ggKGZlYXR1cmVJRCkgew0KKwkJCWNhc2UgUmtQYWNrYWdlLlJVTkdFX0tVVFRBX19SRUxBVElWRV9UT0xFUkFOQ0U6DQorCQkJCXJldHVybiBuZXcgRG91YmxlKGdldFJlbGF0aXZlVG9sZXJhbmNlKCkpOw0KKwkJfQ0KKwkJcmV0dXJuIHN1cGVyLmVHZXQoZmVhdHVyZUlELCByZXNvbHZlLCBjb3JlVHlwZSk7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlAT3ZlcnJpZGUNCisJcHVibGljIHZvaWQgZVNldChpbnQgZmVhdHVyZUlELCBPYmplY3QgbmV3VmFsdWUpIHsNCisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7DQorCQkJY2FzZSBSa1BhY2thZ2UuUlVOR0VfS1VUVEFfX1JFTEFUSVZFX1RPTEVSQU5DRToNCisJCQkJc2V0UmVsYXRpdmVUb2xlcmFuY2UoKChEb3VibGUpbmV3VmFsdWUpLmRvdWJsZVZhbHVlKCkpOw0KKwkJCQlyZXR1cm47DQorCQl9DQorCQlzdXBlci5lU2V0KGZlYXR1cmVJRCwgbmV3VmFsdWUpOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJQE92ZXJyaWRlDQorCXB1YmxpYyB2b2lkIGVVbnNldChpbnQgZmVhdHVyZUlEKSB7DQorCQlzd2l0Y2ggKGZlYXR1cmVJRCkgew0KKwkJCWNhc2UgUmtQYWNrYWdlLlJVTkdFX0tVVFRBX19SRUxBVElWRV9UT0xFUkFOQ0U6DQorCQkJCXNldFJlbGF0aXZlVG9sZXJhbmNlKFJFTEFUSVZFX1RPTEVSQU5DRV9FREVGQVVMVCk7DQorCQkJCXJldHVybjsNCisJCX0NCisJCXN1cGVyLmVVbnNldChmZWF0dXJlSUQpOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJQE92ZXJyaWRlDQorCXB1YmxpYyBib29sZWFuIGVJc1NldChpbnQgZmVhdHVyZUlEKSB7DQorCQlzd2l0Y2ggKGZlYXR1cmVJRCkgew0KKwkJCWNhc2UgUmtQYWNrYWdlLlJVTkdFX0tVVFRBX19SRUxBVElWRV9UT0xFUkFOQ0U6DQorCQkJCXJldHVybiByZWxhdGl2ZVRvbGVyYW5jZSAhPSBSRUxBVElWRV9UT0xFUkFOQ0VfRURFRkFVTFQ7DQorCQl9DQorCQlyZXR1cm4gc3VwZXIuZUlzU2V0KGZlYXR1cmVJRCk7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlAT3ZlcnJpZGUNCisJcHVibGljIFN0cmluZyB0b1N0cmluZygpIHsNCisJCWlmIChlSXNQcm94eSgpKSByZXR1cm4gc3VwZXIudG9TdHJpbmcoKTsNCisNCisJCVN0cmluZ0J1ZmZlciByZXN1bHQgPSBuZXcgU3RyaW5nQnVmZmVyKHN1cGVyLnRvU3RyaW5nKCkpOw0KKwkJcmVzdWx0LmFwcGVuZCgiIChyZWxhdGl2ZVRvbGVyYW5jZTogIik7DQorCQlyZXN1bHQuYXBwZW5kKHJlbGF0aXZlVG9sZXJhbmNlKTsNCisJCXJlc3VsdC5hcHBlbmQoJyknKTsNCisJCXJldHVybiByZXN1bHQudG9TdHJpbmcoKTsNCisJfQ0KKw0KKwlwcml2YXRlIHZvaWQgZ2V0TGFiZWxTbmFwc2hvdChzaG9ydCB0aHJlYWRudW0sIEFycmF5TGlzdDxEZWNvcmF0b3I+aURlY29yYXRvcnMpIHsNCisJCWlmKGxhYmVsVmFsdWVTbmFwc2hvdCA9PSBudWxsKSBsYWJlbFZhbHVlU25hcHNob3QgPSBuZXcgSGFzaE1hcDxVUkksIER5bmFtaWNMYWJlbD4oKTsNCisJCWZvcihEZWNvcmF0b3Igc2RtOmlEZWNvcmF0b3JzKSANCisJCQlmb3IgKGZpbmFsIEl0ZXJhdG9yPER5bmFtaWNMYWJlbD4gY3VycmVudFN0YXRlTGFiZWxJdGVyID0gcGFydGl0aW9uZXIucGFydGl0aW9uRGVjb3JhdG9yTGFiZWxzKHNkbSwgdGhyZWFkbnVtKS5pdGVyYXRvcigpOyBjdXJyZW50U3RhdGVMYWJlbEl0ZXIuaGFzTmV4dCgpOykgew0KKwkJCQlmaW5hbCBEeW5hbWljTGFiZWwgbGFiZWwgPSBjdXJyZW50U3RhdGVMYWJlbEl0ZXIubmV4dCgpOw0KKwkJCQlEeW5hbWljTGFiZWwgY29weSA9IChEeW5hbWljTGFiZWwpIEVjb3JlVXRpbC5jb3B5KGxhYmVsKTsNCisJCQkJLy8gVGhlIGNvcHkgYWRkcyBhbm90aGVyIGxhYmVsIHRvIHRoZSBub2RlLCB3ZSBuZWVkIHRvIHJlbW92ZSB0aGF0IG9uZQ0KKwkJCQkoKE5vZGUpbGFiZWwuZ2V0SWRlbnRpZmlhYmxlKCkpLmdldExhYmVscygpLnJlbW92ZShjb3B5KTsNCisJCQkJdGhpcy5sYWJlbFZhbHVlU25hcHNob3QucHV0KGxhYmVsLmdldFVSSSgpLCBjb3B5KTsNCisJCQl9DQorCX0NCisJDQorCXByaXZhdGUgdm9pZCBjaGVja0xhYmVsU2FuaXR5KHNob3J0IHRocmVhZG51bSwgQXJyYXlMaXN0PERlY29yYXRvcj5pRGVjb3JhdG9ycywgYm9vbGVhbiByZXRyeSkgew0KKwkJZm9yKERlY29yYXRvciBzZG06aURlY29yYXRvcnMpIA0KKwkJCWZvciAoZmluYWwgSXRlcmF0b3I8RHluYW1pY0xhYmVsPiBjdXJyZW50U3RhdGVMYWJlbEl0ZXIgPSBwYXJ0aXRpb25lci5wYXJ0aXRpb25EZWNvcmF0b3JMYWJlbHMoc2RtLCB0aHJlYWRudW0pLml0ZXJhdG9yKCk7IGN1cnJlbnRTdGF0ZUxhYmVsSXRlci5oYXNOZXh0KCk7KSB7DQorCQkJCWZpbmFsIER5bmFtaWNMYWJlbCBsYWJlbCA9IGN1cnJlbnRTdGF0ZUxhYmVsSXRlci5uZXh0KCk7DQorCQkJCUR5bmFtaWNMYWJlbCBzbmFwTGFiZWwgPSBsYWJlbFZhbHVlU25hcHNob3QuZ2V0KGxhYmVsLmdldFVSSSgpKTsNCisNCisJCQkJaWYoIWxhYmVsLmdldEN1cnJlbnRWYWx1ZSgpLnNhbWVWYWx1ZShzbmFwTGFiZWwuZ2V0Q3VycmVudFZhbHVlKCkpKQ0KKwkJCQkJU3lzdGVtLmVyci5wcmludGxuKCJFcnJvciBjdXJyZW50IGxhYmVsIHZhbHVlIG5vdCB0aGUgc2FtZSBhcyBpbiBzbmFwc2hvdCBmb3IgIitsYWJlbCsiLiBSZXRyeSB3YXMgIityZXRyeSk7DQorDQorCQkJCWlmKHJldHJ5KSB7DQorCQkJCQlpZighKChJbnRlZ3JhdGlvbkxhYmVsKWxhYmVsKS5nZXRUZW1wVmFsdWUoKS5zYW1lVmFsdWUoKChJbnRlZ3JhdGlvbkxhYmVsKXNuYXBMYWJlbCkuZ2V0VGVtcFZhbHVlKCkpKQ0KKwkJCQkJCVN5c3RlbS5lcnIucHJpbnRsbigiRXJyb3IgdGVtcCBsYWJlbCB2YWx1ZSBub3QgdGhlIHNhbWUgYXMgaW4gc25hcHNob3QgZm9yICIrbGFiZWwrIiBSZXRyeSB3YXMgIityZXRyeSk7DQorCQkJCX0NCisJCQl9DQorCX0NCisJDQorCXByaXZhdGUgdm9pZCBjaGVja0RlbHRhTGFiZWxTYW1lKExhYmVsVmFsdWUgbGFiKSB7DQorCQlMYWJlbFZhbHVlIGxhYmVsdmFsID0gZGVsdGFMYWJlbFZhbHVlU25hcHNob3QuZ2V0KCgoRHluYW1pY0xhYmVsKWxhYikuZ2V0VVJJKCkpOw0KKwkJaWYobGFiZWx2YWwgPT0gbnVsbCkgLy8gbm90IGluaXRpYWxpemVkIHlldA0KKwkJCXJldHVybjsNCisJCWlmKCEobGFiZWx2YWwuc2FtZVZhbHVlKGxhYikpKQ0KKwkJCVN5c3RlbS5lcnIucHJpbnRsbigiRXJyb3IgZGVsdGEgbGFiZWwgdmFsdWUgbm90IHRoZSBzYW1lIGFzIGluIHNuYXBzaG90IGZvciAiK2xhYik7DQorCX0NCisJDQorfSAvL1J1bmdlS3V0dGFJbXBsDQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnNvbHZlcnMucmsvc3JjL29yZy9lY2xpcHNlL3N0ZW0vc29sdmVycy9yay9wcm92aWRlci9Sa0VkaXRQbHVnaW4uamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5zb2x2ZXJzLnJrL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3NvbHZlcnMvcmsvcHJvdmlkZXIvUmtFZGl0UGx1Z2luLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzA4YTAxOAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5zb2x2ZXJzLnJrL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3NvbHZlcnMvcmsvcHJvdmlkZXIvUmtFZGl0UGx1Z2luLmphdmEKQEAgLTAsMCArMSwxMDMgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5zb2x2ZXJzLnJrLnByb3ZpZGVyOw0KKw0KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorICogQ29weXJpZ2h0IChjKSAyMDA5IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLg0KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMNCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjANCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdA0KKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sDQorICoNCisgKiBDb250cmlidXRvcnM6DQorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbg0KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KKw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLkVNRlBsdWdpbjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlJlc291cmNlTG9jYXRvcjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnByb3ZpZGVyLkVjb3JlRWRpdFBsdWdpbjsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5wcm92aWRlci5Db3JlRWRpdFBsdWdpbjsNCisNCisNCisvKioNCisgKiBUaGlzIGlzIHRoZSBjZW50cmFsIHNpbmdsZXRvbiBmb3IgdGhlIFJrIGVkaXQgcGx1Z2luLg0KKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorICogQGdlbmVyYXRlZA0KKyAqLw0KK0BTdXBwcmVzc1dhcm5pbmdzKCJzeW50aGV0aWMtYWNjZXNzIikNCitwdWJsaWMgZmluYWwgY2xhc3MgUmtFZGl0UGx1Z2luIGV4dGVuZHMgRU1GUGx1Z2luIHsNCisJLyoqDQorCSAqIEtlZXAgdHJhY2sgb2YgdGhlIHNpbmdsZXRvbi4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBzdGF0aWMgZmluYWwgUmtFZGl0UGx1Z2luIElOU1RBTkNFID0gbmV3IFJrRWRpdFBsdWdpbigpOw0KKw0KKwkvKioNCisJICogS2VlcCB0cmFjayBvZiB0aGUgc2luZ2xldG9uLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJpdmF0ZSBzdGF0aWMgSW1wbGVtZW50YXRpb24gcGx1Z2luOw0KKw0KKwkvKioNCisJICogQ3JlYXRlIHRoZSBpbnN0YW5jZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBSa0VkaXRQbHVnaW4oKSB7DQorCQlzdXBlcg0KKwkJICAobmV3IFJlc291cmNlTG9jYXRvciBbXSB7DQorCQkgICAgIENvcmVFZGl0UGx1Z2luLklOU1RBTkNFLA0KKwkJICAgICBFY29yZUVkaXRQbHVnaW4uSU5TVEFOQ0UsDQorCQkgICB9KTsNCisJfQ0KKw0KKwkvKioNCisJICogUmV0dXJucyB0aGUgc2luZ2xldG9uIGluc3RhbmNlIG9mIHRoZSBFY2xpcHNlIHBsdWdpbi4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEByZXR1cm4gdGhlIHNpbmdsZXRvbiBpbnN0YW5jZS4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJQE92ZXJyaWRlDQorCXB1YmxpYyBSZXNvdXJjZUxvY2F0b3IgZ2V0UGx1Z2luUmVzb3VyY2VMb2NhdG9yKCkgew0KKwkJcmV0dXJuIHBsdWdpbjsNCisJfQ0KKw0KKwkvKioNCisJICogUmV0dXJucyB0aGUgc2luZ2xldG9uIGluc3RhbmNlIG9mIHRoZSBFY2xpcHNlIHBsdWdpbi4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEByZXR1cm4gdGhlIHNpbmdsZXRvbiBpbnN0YW5jZS4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIHN0YXRpYyBJbXBsZW1lbnRhdGlvbiBnZXRQbHVnaW4oKSB7DQorCQlyZXR1cm4gcGx1Z2luOw0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGUgYWN0dWFsIGltcGxlbWVudGF0aW9uIG9mIHRoZSBFY2xpcHNlIDxiPlBsdWdpbjwvYj4uDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgc3RhdGljIGNsYXNzIEltcGxlbWVudGF0aW9uIGV4dGVuZHMgRWNsaXBzZVBsdWdpbiB7DQorCQkvKioNCisJCSAqIENyZWF0ZXMgYW4gaW5zdGFuY2UuDQorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCQkgKiBAZ2VuZXJhdGVkDQorCQkgKi8NCisJCXB1YmxpYyBJbXBsZW1lbnRhdGlvbigpIHsNCisJCQlzdXBlcigpOw0KKw0KKwkJCS8vIFJlbWVtYmVyIHRoZSBzdGF0aWMgaW5zdGFuY2UuDQorCQkJLy8NCisJCQlwbHVnaW4gPSB0aGlzOw0KKwkJfQ0KKwl9DQorDQorfQ0KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5zb2x2ZXJzLnJrL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3NvbHZlcnMvcmsvcHJvdmlkZXIvUmtJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeS5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnNvbHZlcnMucmsvc3JjL29yZy9lY2xpcHNlL3N0ZW0vc29sdmVycy9yay9wcm92aWRlci9Sa0l0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTcwYjBiNwotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5zb2x2ZXJzLnJrL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3NvbHZlcnMvcmsvcHJvdmlkZXIvUmtJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeS5qYXZhCkBAIC0wLDAgKzEsMjA2IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uc29sdmVycy5yay5wcm92aWRlcjsNCisNCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyAqIENvcHlyaWdodCAoYykgMjAwOSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4NCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzDQorICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wDQorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQNCisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbA0KKyAqDQorICogQ29udHJpYnV0b3JzOg0KKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24NCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCisNCitpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsNCitpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247DQorDQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LkFkYXB0ZXI7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpZXI7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkNoYW5nZU5vdGlmaWVyOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5Db21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5Ow0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5Db21wb3NlZEFkYXB0ZXJGYWN0b3J5Ow0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JQ2hhbmdlTm90aWZpZXI7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklEaXNwb3NhYmxlOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JRWRpdGluZ0RvbWFpbkl0ZW1Qcm92aWRlcjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1MYWJlbFByb3ZpZGVyOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbVByb3BlcnR5U291cmNlOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JTm90aWZ5Q2hhbmdlZExpc3RlbmVyOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JU3RydWN0dXJlZEl0ZW1Db250ZW50UHJvdmlkZXI7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklUcmVlSXRlbUNvbnRlbnRQcm92aWRlcjsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5zb2x2ZXJzLnJrLnV0aWwuUmtBZGFwdGVyRmFjdG9yeTsNCisNCisvKioNCisgKiBUaGlzIGlzIHRoZSBmYWN0b3J5IHRoYXQgaXMgdXNlZCB0byBwcm92aWRlIHRoZSBpbnRlcmZhY2VzIG5lZWRlZCB0byBzdXBwb3J0IFZpZXdlcnMuDQorICogVGhlIGFkYXB0ZXJzIGdlbmVyYXRlZCBieSB0aGlzIGZhY3RvcnkgY29udmVydCBFTUYgYWRhcHRlciBub3RpZmljYXRpb25zIGludG8gY2FsbHMgdG8ge0BsaW5rICNmaXJlTm90aWZ5Q2hhbmdlZCBmaXJlTm90aWZ5Q2hhbmdlZH0uDQorICogVGhlIGFkYXB0ZXJzIGFsc28gc3VwcG9ydCBFY2xpcHNlIHByb3BlcnR5IHNoZWV0cy4NCisgKiBOb3RlIHRoYXQgbW9zdCBvZiB0aGUgYWRhcHRlcnMgYXJlIHNoYXJlZCBhbW9uZyBtdWx0aXBsZSBpbnN0YW5jZXMuDQorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisgKiBAZ2VuZXJhdGVkDQorICovDQorcHVibGljIGNsYXNzIFJrSXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkgZXh0ZW5kcyBSa0FkYXB0ZXJGYWN0b3J5IGltcGxlbWVudHMgQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSwgSUNoYW5nZU5vdGlmaWVyLCBJRGlzcG9zYWJsZSB7DQorCS8qKg0KKwkgKiBUaGlzIGtlZXBzIHRyYWNrIG9mIHRoZSByb290IGFkYXB0ZXIgZmFjdG9yeSB0aGF0IGRlbGVnYXRlcyB0byB0aGlzIGFkYXB0ZXIgZmFjdG9yeS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCBDb21wb3NlZEFkYXB0ZXJGYWN0b3J5IHBhcmVudEFkYXB0ZXJGYWN0b3J5Ow0KKw0KKwkvKioNCisJICogVGhpcyBpcyB1c2VkIHRvIGltcGxlbWVudCB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUNoYW5nZU5vdGlmaWVyfS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCBJQ2hhbmdlTm90aWZpZXIgY2hhbmdlTm90aWZpZXIgPSBuZXcgQ2hhbmdlTm90aWZpZXIoKTsNCisNCisJLyoqDQorCSAqIFRoaXMga2VlcHMgdHJhY2sgb2YgYWxsIHRoZSBzdXBwb3J0ZWQgdHlwZXMgY2hlY2tlZCBieSB7QGxpbmsgI2lzRmFjdG9yeUZvclR5cGUgaXNGYWN0b3J5Rm9yVHlwZX0uDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgQ29sbGVjdGlvbjxPYmplY3Q+IHN1cHBvcnRlZFR5cGVzID0gbmV3IEFycmF5TGlzdDxPYmplY3Q+KCk7DQorDQorCS8qKg0KKwkgKiBUaGlzIGNvbnN0cnVjdHMgYW4gaW5zdGFuY2UuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgUmtJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSgpIHsNCisJCXN1cHBvcnRlZFR5cGVzLmFkZChJRWRpdGluZ0RvbWFpbkl0ZW1Qcm92aWRlci5jbGFzcyk7DQorCQlzdXBwb3J0ZWRUeXBlcy5hZGQoSVN0cnVjdHVyZWRJdGVtQ29udGVudFByb3ZpZGVyLmNsYXNzKTsNCisJCXN1cHBvcnRlZFR5cGVzLmFkZChJVHJlZUl0ZW1Db250ZW50UHJvdmlkZXIuY2xhc3MpOw0KKwkJc3VwcG9ydGVkVHlwZXMuYWRkKElJdGVtTGFiZWxQcm92aWRlci5jbGFzcyk7DQorCQlzdXBwb3J0ZWRUeXBlcy5hZGQoSUl0ZW1Qcm9wZXJ0eVNvdXJjZS5jbGFzcyk7DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMga2VlcHMgdHJhY2sgb2YgdGhlIG9uZSBhZGFwdGVyIHVzZWQgZm9yIGFsbCB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5zb2x2ZXJzLnJrLlJ1bmdlS3V0dGF9IGluc3RhbmNlcy4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCBSdW5nZUt1dHRhSXRlbVByb3ZpZGVyIHJ1bmdlS3V0dGFJdGVtUHJvdmlkZXI7DQorDQorCS8qKg0KKwkgKiBUaGlzIGNyZWF0ZXMgYW4gYWRhcHRlciBmb3IgYSB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5zb2x2ZXJzLnJrLlJ1bmdlS3V0dGF9Lg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJQE92ZXJyaWRlDQorCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZVJ1bmdlS3V0dGFBZGFwdGVyKCkgew0KKwkJaWYgKHJ1bmdlS3V0dGFJdGVtUHJvdmlkZXIgPT0gbnVsbCkgew0KKwkJCXJ1bmdlS3V0dGFJdGVtUHJvdmlkZXIgPSBuZXcgUnVuZ2VLdXR0YUl0ZW1Qcm92aWRlcih0aGlzKTsNCisJCX0NCisNCisJCXJldHVybiBydW5nZUt1dHRhSXRlbVByb3ZpZGVyOw0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIHJldHVybnMgdGhlIHJvb3QgYWRhcHRlciBmYWN0b3J5IHRoYXQgY29udGFpbnMgdGhpcyBmYWN0b3J5Lg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnkgZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCkgew0KKwkJcmV0dXJuIHBhcmVudEFkYXB0ZXJGYWN0b3J5ID09IG51bGwgPyB0aGlzIDogcGFyZW50QWRhcHRlckZhY3RvcnkuZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCk7DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgc2V0cyB0aGUgY29tcG9zZWQgYWRhcHRlciBmYWN0b3J5IHRoYXQgY29udGFpbnMgdGhpcyBmYWN0b3J5Lg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIHZvaWQgc2V0UGFyZW50QWRhcHRlckZhY3RvcnkoQ29tcG9zZWRBZGFwdGVyRmFjdG9yeSBwYXJlbnRBZGFwdGVyRmFjdG9yeSkgew0KKwkJdGhpcy5wYXJlbnRBZGFwdGVyRmFjdG9yeSA9IHBhcmVudEFkYXB0ZXJGYWN0b3J5Ow0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJQE92ZXJyaWRlDQorCXB1YmxpYyBib29sZWFuIGlzRmFjdG9yeUZvclR5cGUoT2JqZWN0IHR5cGUpIHsNCisJCXJldHVybiBzdXBwb3J0ZWRUeXBlcy5jb250YWlucyh0eXBlKSB8fCBzdXBlci5pc0ZhY3RvcnlGb3JUeXBlKHR5cGUpOw0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIGltcGxlbWVudGF0aW9uIHN1YnN0aXR1dGVzIHRoZSBmYWN0b3J5IGl0c2VsZiBhcyB0aGUga2V5IGZvciB0aGUgYWRhcHRlci4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCUBPdmVycmlkZQ0KKwlwdWJsaWMgQWRhcHRlciBhZGFwdChOb3RpZmllciBub3RpZmllciwgT2JqZWN0IHR5cGUpIHsNCisJCXJldHVybiBzdXBlci5hZGFwdChub3RpZmllciwgdGhpcyk7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlAT3ZlcnJpZGUNCisJcHVibGljIE9iamVjdCBhZGFwdChPYmplY3Qgb2JqZWN0LCBPYmplY3QgdHlwZSkgew0KKwkJaWYgKGlzRmFjdG9yeUZvclR5cGUodHlwZSkpIHsNCisJCQlPYmplY3QgYWRhcHRlciA9IHN1cGVyLmFkYXB0KG9iamVjdCwgdHlwZSk7DQorCQkJaWYgKCEodHlwZSBpbnN0YW5jZW9mIENsYXNzKSB8fCAoKChDbGFzczw/Pil0eXBlKS5pc0luc3RhbmNlKGFkYXB0ZXIpKSkgew0KKwkJCQlyZXR1cm4gYWRhcHRlcjsNCisJCQl9DQorCQl9DQorDQorCQlyZXR1cm4gbnVsbDsNCisJfQ0KKw0KKwkvKioNCisJICogVGhpcyBhZGRzIGEgbGlzdGVuZXIuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgdm9pZCBhZGRMaXN0ZW5lcihJTm90aWZ5Q2hhbmdlZExpc3RlbmVyIG5vdGlmeUNoYW5nZWRMaXN0ZW5lcikgew0KKwkJY2hhbmdlTm90aWZpZXIuYWRkTGlzdGVuZXIobm90aWZ5Q2hhbmdlZExpc3RlbmVyKTsNCisJfQ0KKw0KKwkvKioNCisJICogVGhpcyByZW1vdmVzIGEgbGlzdGVuZXIuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgdm9pZCByZW1vdmVMaXN0ZW5lcihJTm90aWZ5Q2hhbmdlZExpc3RlbmVyIG5vdGlmeUNoYW5nZWRMaXN0ZW5lcikgew0KKwkJY2hhbmdlTm90aWZpZXIucmVtb3ZlTGlzdGVuZXIobm90aWZ5Q2hhbmdlZExpc3RlbmVyKTsNCisJfQ0KKw0KKwkvKioNCisJICogVGhpcyBkZWxlZ2F0ZXMgdG8ge0BsaW5rICNjaGFuZ2VOb3RpZmllcn0gYW5kIHRvIHtAbGluayAjcGFyZW50QWRhcHRlckZhY3Rvcnl9Lg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIHZvaWQgZmlyZU5vdGlmeUNoYW5nZWQoTm90aWZpY2F0aW9uIG5vdGlmaWNhdGlvbikgew0KKwkJY2hhbmdlTm90aWZpZXIuZmlyZU5vdGlmeUNoYW5nZWQobm90aWZpY2F0aW9uKTsNCisNCisJCWlmIChwYXJlbnRBZGFwdGVyRmFjdG9yeSAhPSBudWxsKSB7DQorCQkJcGFyZW50QWRhcHRlckZhY3RvcnkuZmlyZU5vdGlmeUNoYW5nZWQobm90aWZpY2F0aW9uKTsNCisJCX0NCisJfQ0KKw0KKwkvKioNCisJICogVGhpcyBkaXNwb3NlcyBhbGwgb2YgdGhlIGl0ZW0gcHJvdmlkZXJzIGNyZWF0ZWQgYnkgdGhpcyBmYWN0b3J5LiANCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyB2b2lkIGRpc3Bvc2UoKSB7DQorCQlpZiAocnVuZ2VLdXR0YUl0ZW1Qcm92aWRlciAhPSBudWxsKSBydW5nZUt1dHRhSXRlbVByb3ZpZGVyLmRpc3Bvc2UoKTsNCisJfQ0KKw0KK30NCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uc29sdmVycy5yay9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9zb2x2ZXJzL3JrL3Byb3ZpZGVyL1J1bmdlS3V0dGFJdGVtUHJvdmlkZXIuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5zb2x2ZXJzLnJrL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3NvbHZlcnMvcmsvcHJvdmlkZXIvUnVuZ2VLdXR0YUl0ZW1Qcm92aWRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUzNzA5ODcKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uc29sdmVycy5yay9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9zb2x2ZXJzL3JrL3Byb3ZpZGVyL1J1bmdlS3V0dGFJdGVtUHJvdmlkZXIuamF2YQpAQCAtMCwwICsxLDE3OCBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnNvbHZlcnMucmsucHJvdmlkZXI7DQorDQorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisgKiBDb3B5cmlnaHQgKGMpIDIwMDkgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuDQorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscw0KKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMA0KKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0DQorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwNCisgKg0KKyAqIENvbnRyaWJ1dG9yczoNCisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uDQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQorDQorDQoraW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOw0KK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsNCisNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuQWRhcHRlckZhY3Rvcnk7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlJlc291cmNlTG9jYXRvcjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlVSSTsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeTsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUVkaXRpbmdEb21haW5JdGVtUHJvdmlkZXI7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtTGFiZWxQcm92aWRlcjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtUHJvcGVydHlTb3VyY2U7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklTdHJ1Y3R1cmVkSXRlbUNvbnRlbnRQcm92aWRlcjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVRyZWVJdGVtQ29udGVudFByb3ZpZGVyOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JdGVtUHJvcGVydHlEZXNjcmlwdG9yOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5WaWV3ZXJOb3RpZmljYXRpb247DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zb2x2ZXIucHJvdmlkZXIuU29sdmVySXRlbVByb3ZpZGVyOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnNvbHZlcnMucmsuUmtQYWNrYWdlOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnNvbHZlcnMucmsuUnVuZ2VLdXR0YTsNCisNCisvKioNCisgKiBUaGlzIGlzIHRoZSBpdGVtIHByb3ZpZGVyIGFkYXB0ZXIgZm9yIGEge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uc29sdmVycy5yay5SdW5nZUt1dHRhfSBvYmplY3QuDQorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisgKiBAZ2VuZXJhdGVkDQorICovDQorQFN1cHByZXNzV2FybmluZ3MoInVudXNlZCIpIA0KK3B1YmxpYyBjbGFzcyBSdW5nZUt1dHRhSXRlbVByb3ZpZGVyDQorCWV4dGVuZHMgU29sdmVySXRlbVByb3ZpZGVyDQorCWltcGxlbWVudHMNCisJCUlFZGl0aW5nRG9tYWluSXRlbVByb3ZpZGVyLA0KKwkJSVN0cnVjdHVyZWRJdGVtQ29udGVudFByb3ZpZGVyLA0KKwkJSVRyZWVJdGVtQ29udGVudFByb3ZpZGVyLA0KKwkJSUl0ZW1MYWJlbFByb3ZpZGVyLA0KKwkJSUl0ZW1Qcm9wZXJ0eVNvdXJjZSB7DQorCS8qKg0KKwkgKiBUaGlzIGNvbnN0cnVjdHMgYW4gaW5zdGFuY2UgZnJvbSBhIGZhY3RvcnkgYW5kIGEgbm90aWZpZXIuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgUnVuZ2VLdXR0YUl0ZW1Qcm92aWRlcihBZGFwdGVyRmFjdG9yeSBhZGFwdGVyRmFjdG9yeSkgew0KKwkJc3VwZXIoYWRhcHRlckZhY3RvcnkpOw0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIHJldHVybnMgdGhlIHByb3BlcnR5IGRlc2NyaXB0b3JzIGZvciB0aGUgYWRhcHRlZCBjbGFzcy4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCUBPdmVycmlkZQ0KKwlwdWJsaWMgTGlzdDxJSXRlbVByb3BlcnR5RGVzY3JpcHRvcj4gZ2V0UHJvcGVydHlEZXNjcmlwdG9ycyhPYmplY3Qgb2JqZWN0KSB7DQorCQlpZiAoaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMgPT0gbnVsbCkgew0KKwkJCXN1cGVyLmdldFByb3BlcnR5RGVzY3JpcHRvcnMob2JqZWN0KTsNCisNCisJCQlhZGRSZWxhdGl2ZVRvbGVyYW5jZVByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QpOw0KKwkJfQ0KKwkJcmV0dXJuIGl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzOw0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIGFkZHMgYSBwcm9wZXJ0eSBkZXNjcmlwdG9yIGZvciB0aGUgUmVsYXRpdmUgVG9sZXJhbmNlIGZlYXR1cmUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgdm9pZCBhZGRSZWxhdGl2ZVRvbGVyYW5jZVByb3BlcnR5RGVzY3JpcHRvcihPYmplY3Qgb2JqZWN0KSB7DQorCQlpdGVtUHJvcGVydHlEZXNjcmlwdG9ycy5hZGQNCisJCQkoY3JlYXRlSXRlbVByb3BlcnR5RGVzY3JpcHRvcg0KKwkJCQkoKChDb21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5KWFkYXB0ZXJGYWN0b3J5KS5nZXRSb290QWRhcHRlckZhY3RvcnkoKSwNCisJCQkJIGdldFJlc291cmNlTG9jYXRvcigpLA0KKwkJCQkgZ2V0U3RyaW5nKCJfVUlfUnVuZ2VLdXR0YV9yZWxhdGl2ZVRvbGVyYW5jZV9mZWF0dXJlIiksDQorCQkJCSBnZXRTdHJpbmcoIl9VSV9Qcm9wZXJ0eURlc2NyaXB0b3JfZGVzY3JpcHRpb24iLCAiX1VJX1J1bmdlS3V0dGFfcmVsYXRpdmVUb2xlcmFuY2VfZmVhdHVyZSIsICJfVUlfUnVuZ2VLdXR0YV90eXBlIiksDQorCQkJCSBSa1BhY2thZ2UuTGl0ZXJhbHMuUlVOR0VfS1VUVEFfX1JFTEFUSVZFX1RPTEVSQU5DRSwNCisJCQkJIHRydWUsDQorCQkJCSBmYWxzZSwNCisJCQkJIGZhbHNlLA0KKwkJCQkgSXRlbVByb3BlcnR5RGVzY3JpcHRvci5SRUFMX1ZBTFVFX0lNQUdFLA0KKwkJCQkgbnVsbCwNCisJCQkJIG51bGwpKTsNCisJfQ0KKw0KKwkvKioNCisJICogVGhpcyByZXR1cm5zIFJ1bmdlS3V0dGEuZ2lmLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZCBOT1QNCisJICovDQorCUBPdmVycmlkZQ0KKwlwdWJsaWMgT2JqZWN0IGdldEltYWdlKE9iamVjdCBvYmplY3QpIHsNCisJCXJldHVybiBvdmVybGF5SW1hZ2Uob2JqZWN0LCBnZXRSZXNvdXJjZUxvY2F0b3IoKS5nZXRJbWFnZSgiZnVsbC9jdXN0b20xNi9zb2x2ZXIiKSk7DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgcmV0dXJucyB0aGUgbGFiZWwgdGV4dCBmb3IgdGhlIGFkYXB0ZWQgY2xhc3MuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkIE5PVA0KKwkgKi8NCisJQE92ZXJyaWRlDQorCXB1YmxpYyBTdHJpbmcgZ2V0VGV4dChPYmplY3Qgb2JqZWN0KSB7DQorCQlSdW5nZUt1dHRhIHJrID0gKFJ1bmdlS3V0dGEpb2JqZWN0Ow0KKwkJcmV0dXJuICJSdW5nZSBLdXR0YSBDYXNoLUthcnA6IisiIFJlbGF0aXZlIFRvbGVyYW5jZTogIityay5nZXRSZWxhdGl2ZVRvbGVyYW5jZSgpOw0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIHJldHVybnMgdGhlIGxhYmVsIHRleHQgZm9yIHRoZSBhZGFwdGVkIGNsYXNzLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJQE92ZXJyaWRlDQorCXB1YmxpYyBTdHJpbmcgZ2V0VGV4dEdlbihPYmplY3Qgb2JqZWN0KSB7DQorCQlVUkkgbGFiZWxWYWx1ZSA9ICgoUnVuZ2VLdXR0YSlvYmplY3QpLmdldFVSSSgpOw0KKwkJU3RyaW5nIGxhYmVsID0gbGFiZWxWYWx1ZSA9PSBudWxsID8gbnVsbCA6IGxhYmVsVmFsdWUudG9TdHJpbmcoKTsNCisJCXJldHVybiBsYWJlbCA9PSBudWxsIHx8IGxhYmVsLmxlbmd0aCgpID09IDAgPw0KKwkJCWdldFN0cmluZygiX1VJX1J1bmdlS3V0dGFfdHlwZSIpIDoNCisJCQlnZXRTdHJpbmcoIl9VSV9SdW5nZUt1dHRhX3R5cGUiKSArICIgIiArIGxhYmVsOw0KKwl9DQorCQ0KKwkvKioNCisJICogVGhpcyBoYW5kbGVzIG1vZGVsIG5vdGlmaWNhdGlvbnMgYnkgY2FsbGluZyB7QGxpbmsgI3VwZGF0ZUNoaWxkcmVufSB0byB1cGRhdGUgYW55IGNhY2hlZA0KKwkgKiBjaGlsZHJlbiBhbmQgYnkgY3JlYXRpbmcgYSB2aWV3ZXIgbm90aWZpY2F0aW9uLCB3aGljaCBpdCBwYXNzZXMgdG8ge0BsaW5rICNmaXJlTm90aWZ5Q2hhbmdlZH0uDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlAT3ZlcnJpZGUNCisJcHVibGljIHZvaWQgbm90aWZ5Q2hhbmdlZChOb3RpZmljYXRpb24gbm90aWZpY2F0aW9uKSB7DQorCQl1cGRhdGVDaGlsZHJlbihub3RpZmljYXRpb24pOw0KKw0KKwkJc3dpdGNoIChub3RpZmljYXRpb24uZ2V0RmVhdHVyZUlEKFJ1bmdlS3V0dGEuY2xhc3MpKSB7DQorCQkJY2FzZSBSa1BhY2thZ2UuUlVOR0VfS1VUVEFfX1JFTEFUSVZFX1RPTEVSQU5DRToNCisJCQkJZmlyZU5vdGlmeUNoYW5nZWQobmV3IFZpZXdlck5vdGlmaWNhdGlvbihub3RpZmljYXRpb24sIG5vdGlmaWNhdGlvbi5nZXROb3RpZmllcigpLCBmYWxzZSwgdHJ1ZSkpOw0KKwkJCQlyZXR1cm47DQorCQl9DQorCQlzdXBlci5ub3RpZnlDaGFuZ2VkKG5vdGlmaWNhdGlvbik7DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgYWRkcyB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmVkaXQuY29tbWFuZC5Db21tYW5kUGFyYW1ldGVyfXMgZGVzY3JpYmluZyB0aGUgY2hpbGRyZW4NCisJICogdGhhdCBjYW4gYmUgY3JlYXRlZCB1bmRlciB0aGlzIG9iamVjdC4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCUBPdmVycmlkZQ0KKwlwcm90ZWN0ZWQgdm9pZCBjb2xsZWN0TmV3Q2hpbGREZXNjcmlwdG9ycyhDb2xsZWN0aW9uPE9iamVjdD4gbmV3Q2hpbGREZXNjcmlwdG9ycywgT2JqZWN0IG9iamVjdCkgew0KKwkJc3VwZXIuY29sbGVjdE5ld0NoaWxkRGVzY3JpcHRvcnMobmV3Q2hpbGREZXNjcmlwdG9ycywgb2JqZWN0KTsNCisJfQ0KKw0KKwkvKioNCisJICogUmV0dXJuIHRoZSByZXNvdXJjZSBsb2NhdG9yIGZvciB0aGlzIGl0ZW0gcHJvdmlkZXIncyByZXNvdXJjZXMuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlAT3ZlcnJpZGUNCisJcHVibGljIFJlc291cmNlTG9jYXRvciBnZXRSZXNvdXJjZUxvY2F0b3IoKSB7DQorCQlyZXR1cm4gUmtFZGl0UGx1Z2luLklOU1RBTkNFOw0KKwl9DQorDQorfQ0KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5zb2x2ZXJzLnJrL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3NvbHZlcnMvcmsvdXRpbC9Sa0FkYXB0ZXJGYWN0b3J5LmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uc29sdmVycy5yay9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9zb2x2ZXJzL3JrL3V0aWwvUmtBZGFwdGVyRmFjdG9yeS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ1YjRmMjAKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uc29sdmVycy5yay9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9zb2x2ZXJzL3JrL3V0aWwvUmtBZGFwdGVyRmFjdG9yeS5qYXZhCkBAIC0wLDAgKzEsMTg0IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uc29sdmVycy5yay51dGlsOw0KKw0KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorICogQ29weXJpZ2h0IChjKSAyMDA5IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLg0KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMNCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjANCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdA0KKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sDQorICoNCisgKiBDb250cmlidXRvcnM6DQorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbg0KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KKw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5BZGFwdGVyOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmllcjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuaW1wbC5BZGFwdGVyRmFjdG9yeUltcGw7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0Ow0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLklkZW50aWZpYWJsZTsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNvbHZlci5Tb2x2ZXI7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uc29sdmVycy5yay5Sa1BhY2thZ2U7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uc29sdmVycy5yay5SdW5nZUt1dHRhOw0KKw0KKy8qKg0KKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorICogVGhlIDxiPkFkYXB0ZXIgRmFjdG9yeTwvYj4gZm9yIHRoZSBtb2RlbC4NCisgKiBJdCBwcm92aWRlcyBhbiBhZGFwdGVyIDxjb2RlPmNyZWF0ZVhYWDwvY29kZT4gbWV0aG9kIGZvciBlYWNoIGNsYXNzIG9mIHRoZSBtb2RlbC4NCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uc29sdmVycy5yay5Sa1BhY2thZ2UNCisgKiBAZ2VuZXJhdGVkDQorICovDQorcHVibGljIGNsYXNzIFJrQWRhcHRlckZhY3RvcnkgZXh0ZW5kcyBBZGFwdGVyRmFjdG9yeUltcGwgew0KKwkvKioNCisJICogVGhlIGNhY2hlZCBtb2RlbCBwYWNrYWdlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIHN0YXRpYyBSa1BhY2thZ2UgbW9kZWxQYWNrYWdlOw0KKw0KKwkvKioNCisJICogQ3JlYXRlcyBhbiBpbnN0YW5jZSBvZiB0aGUgYWRhcHRlciBmYWN0b3J5Lg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIFJrQWRhcHRlckZhY3RvcnkoKSB7DQorCQlpZiAobW9kZWxQYWNrYWdlID09IG51bGwpIHsNCisJCQltb2RlbFBhY2thZ2UgPSBSa1BhY2thZ2UuZUlOU1RBTkNFOw0KKwkJfQ0KKwl9DQorDQorCS8qKg0KKwkgKiBSZXR1cm5zIHdoZXRoZXIgdGhpcyBmYWN0b3J5IGlzIGFwcGxpY2FibGUgZm9yIHRoZSB0eXBlIG9mIHRoZSBvYmplY3QuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyA8Y29kZT50cnVlPC9jb2RlPiBpZiB0aGUgb2JqZWN0IGlzIGVpdGhlciB0aGUgbW9kZWwncyBwYWNrYWdlIG9yIGlzIGFuIGluc3RhbmNlIG9iamVjdCBvZiB0aGUgbW9kZWwuDQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcmV0dXJuIHdoZXRoZXIgdGhpcyBmYWN0b3J5IGlzIGFwcGxpY2FibGUgZm9yIHRoZSB0eXBlIG9mIHRoZSBvYmplY3QuDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCUBPdmVycmlkZQ0KKwlwdWJsaWMgYm9vbGVhbiBpc0ZhY3RvcnlGb3JUeXBlKE9iamVjdCBvYmplY3QpIHsNCisJCWlmIChvYmplY3QgPT0gbW9kZWxQYWNrYWdlKSB7DQorCQkJcmV0dXJuIHRydWU7DQorCQl9DQorCQlpZiAob2JqZWN0IGluc3RhbmNlb2YgRU9iamVjdCkgew0KKwkJCXJldHVybiAoKEVPYmplY3Qpb2JqZWN0KS5lQ2xhc3MoKS5nZXRFUGFja2FnZSgpID09IG1vZGVsUGFja2FnZTsNCisJCX0NCisJCXJldHVybiBmYWxzZTsNCisJfQ0KKw0KKwkvKioNCisJICogVGhlIHN3aXRjaCB0aGF0IGRlbGVnYXRlcyB0byB0aGUgPGNvZGU+Y3JlYXRlWFhYPC9jb2RlPiBtZXRob2RzLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJQFN1cHByZXNzV2FybmluZ3MoInVudXNlZCIpIA0KKwlwcm90ZWN0ZWQgUmtTd2l0Y2g8QWRhcHRlcj4gbW9kZWxTd2l0Y2ggPQ0KKwkJbmV3IFJrU3dpdGNoPEFkYXB0ZXI+KCkgew0KKwkJCUBPdmVycmlkZQ0KKwkJCXB1YmxpYyBBZGFwdGVyIGNhc2VSdW5nZUt1dHRhKFJ1bmdlS3V0dGEgb2JqZWN0KSB7DQorCQkJCXJldHVybiBjcmVhdGVSdW5nZUt1dHRhQWRhcHRlcigpOw0KKwkJCX0NCisJCQlAT3ZlcnJpZGUNCisJCQlwdWJsaWMgPFQ+IEFkYXB0ZXIgY2FzZUNvbXBhcmFibGUoQ29tcGFyYWJsZTxUPiBvYmplY3QpIHsNCisJCQkJcmV0dXJuIGNyZWF0ZUNvbXBhcmFibGVBZGFwdGVyKCk7DQorCQkJfQ0KKwkJCUBPdmVycmlkZQ0KKwkJCXB1YmxpYyBBZGFwdGVyIGNhc2VJZGVudGlmaWFibGUoSWRlbnRpZmlhYmxlIG9iamVjdCkgew0KKwkJCQlyZXR1cm4gY3JlYXRlSWRlbnRpZmlhYmxlQWRhcHRlcigpOw0KKwkJCX0NCisJCQlAT3ZlcnJpZGUNCisJCQlwdWJsaWMgQWRhcHRlciBjYXNlU29sdmVyKFNvbHZlciBvYmplY3QpIHsNCisJCQkJcmV0dXJuIGNyZWF0ZVNvbHZlckFkYXB0ZXIoKTsNCisJCQl9DQorCQkJQE92ZXJyaWRlDQorCQkJcHVibGljIEFkYXB0ZXIgZGVmYXVsdENhc2UoRU9iamVjdCBvYmplY3QpIHsNCisJCQkJcmV0dXJuIGNyZWF0ZUVPYmplY3RBZGFwdGVyKCk7DQorCQkJfQ0KKwkJfTsNCisNCisJLyoqDQorCSAqIENyZWF0ZXMgYW4gYWRhcHRlciBmb3IgdGhlIDxjb2RlPnRhcmdldDwvY29kZT4uDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcGFyYW0gdGFyZ2V0IHRoZSBvYmplY3QgdG8gYWRhcHQuDQorCSAqIEByZXR1cm4gdGhlIGFkYXB0ZXIgZm9yIHRoZSA8Y29kZT50YXJnZXQ8L2NvZGU+Lg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlAT3ZlcnJpZGUNCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlQWRhcHRlcihOb3RpZmllciB0YXJnZXQpIHsNCisJCXJldHVybiBtb2RlbFN3aXRjaC5kb1N3aXRjaCgoRU9iamVjdCl0YXJnZXQpOw0KKwl9DQorDQorDQorCS8qKg0KKwkgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uc29sdmVycy5yay5SdW5nZUt1dHRhIDxlbT5SdW5nZSBLdXR0YTwvZW0+fScuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsNCisJICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuDQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4NCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnNvbHZlcnMucmsuUnVuZ2VLdXR0YQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVSdW5nZUt1dHRhQWRhcHRlcigpIHsNCisJCXJldHVybiBudWxsOw0KKwl9DQorDQorCS8qKg0KKwkgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIGphdmEubGFuZy5Db21wYXJhYmxlIDxlbT5Db21wYXJhYmxlPC9lbT59Jy4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOw0KKwkgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLg0KKwkgKiBAc2VlIGphdmEubGFuZy5Db21wYXJhYmxlDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZUNvbXBhcmFibGVBZGFwdGVyKCkgew0KKwkJcmV0dXJuIG51bGw7DQorCX0NCisNCisJLyoqDQorCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5JZGVudGlmaWFibGUgPGVtPklkZW50aWZpYWJsZTwvZW0+fScuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsNCisJICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuDQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4NCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLklkZW50aWZpYWJsZQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVJZGVudGlmaWFibGVBZGFwdGVyKCkgew0KKwkJcmV0dXJuIG51bGw7DQorCX0NCisNCisJLyoqDQorCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNvbHZlci5Tb2x2ZXIgPGVtPlNvbHZlcjwvZW0+fScuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsNCisJICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuDQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4NCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc29sdmVyLlNvbHZlcg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVTb2x2ZXJBZGFwdGVyKCkgew0KKwkJcmV0dXJuIG51bGw7DQorCX0NCisNCisJLyoqDQorCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgdGhlIGRlZmF1bHQgY2FzZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbC4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVFT2JqZWN0QWRhcHRlcigpIHsNCisJCXJldHVybiBudWxsOw0KKwl9DQorDQorfSAvL1JrQWRhcHRlckZhY3RvcnkNCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uc29sdmVycy5yay9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9zb2x2ZXJzL3JrL3V0aWwvUmtTd2l0Y2guamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5zb2x2ZXJzLnJrL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3NvbHZlcnMvcmsvdXRpbC9Sa1N3aXRjaC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY0OWExMTYKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uc29sdmVycy5yay9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9zb2x2ZXJzL3JrL3V0aWwvUmtTd2l0Y2guamF2YQpAQCAtMCwwICsxLDE4NiBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnNvbHZlcnMucmsudXRpbDsNCisNCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyAqIENvcHlyaWdodCAoYykgMjAwOSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4NCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzDQorICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wDQorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQNCisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbA0KKyAqDQorICogQ29udHJpYnV0b3JzOg0KKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24NCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCisNCitpbXBvcnQgamF2YS51dGlsLkxpc3Q7DQorDQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0Ow0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLklkZW50aWZpYWJsZTsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNvbHZlci5Tb2x2ZXI7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uc29sdmVycy5yay5Sa1BhY2thZ2U7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uc29sdmVycy5yay5SdW5nZUt1dHRhOw0KKw0KKy8qKg0KKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorICogVGhlIDxiPlN3aXRjaDwvYj4gZm9yIHRoZSBtb2RlbCdzIGluaGVyaXRhbmNlIGhpZXJhcmNoeS4NCisgKiBJdCBzdXBwb3J0cyB0aGUgY2FsbCB7QGxpbmsgI2RvU3dpdGNoKEVPYmplY3QpIGRvU3dpdGNoKG9iamVjdCl9DQorICogdG8gaW52b2tlIHRoZSA8Y29kZT5jYXNlWFhYPC9jb2RlPiBtZXRob2QgZm9yIGVhY2ggY2xhc3Mgb2YgdGhlIG1vZGVsLA0KKyAqIHN0YXJ0aW5nIHdpdGggdGhlIGFjdHVhbCBjbGFzcyBvZiB0aGUgb2JqZWN0DQorICogYW5kIHByb2NlZWRpbmcgdXAgdGhlIGluaGVyaXRhbmNlIGhpZXJhcmNoeQ0KKyAqIHVudGlsIGEgbm9uLW51bGwgcmVzdWx0IGlzIHJldHVybmVkLA0KKyAqIHdoaWNoIGlzIHRoZSByZXN1bHQgb2YgdGhlIHN3aXRjaC4NCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uc29sdmVycy5yay5Sa1BhY2thZ2UNCisgKiBAZ2VuZXJhdGVkDQorICovDQorQFN1cHByZXNzV2FybmluZ3MoImFsbCIpDQorcHVibGljIGNsYXNzIFJrU3dpdGNoPFQxPiB7DQorCS8qKg0KKwkgKiBUaGUgY2FjaGVkIG1vZGVsIHBhY2thZ2UNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCBzdGF0aWMgUmtQYWNrYWdlIG1vZGVsUGFja2FnZTsNCisNCisJLyoqDQorCSAqIENyZWF0ZXMgYW4gaW5zdGFuY2Ugb2YgdGhlIHN3aXRjaC4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBSa1N3aXRjaCgpIHsNCisJCWlmIChtb2RlbFBhY2thZ2UgPT0gbnVsbCkgew0KKwkJCW1vZGVsUGFja2FnZSA9IFJrUGFja2FnZS5lSU5TVEFOQ0U7DQorCQl9DQorCX0NCisNCisJLyoqDQorCSAqIENhbGxzIDxjb2RlPmNhc2VYWFg8L2NvZGU+IGZvciBlYWNoIGNsYXNzIG9mIHRoZSBtb2RlbCB1bnRpbCBvbmUgcmV0dXJucyBhIG5vbiBudWxsIHJlc3VsdDsgaXQgeWllbGRzIHRoYXQgcmVzdWx0Lg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHJldHVybiB0aGUgZmlyc3Qgbm9uLW51bGwgcmVzdWx0IHJldHVybmVkIGJ5IGEgPGNvZGU+Y2FzZVhYWDwvY29kZT4gY2FsbC4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIFQxIGRvU3dpdGNoKEVPYmplY3QgdGhlRU9iamVjdCkgew0KKwkJcmV0dXJuIGRvU3dpdGNoKHRoZUVPYmplY3QuZUNsYXNzKCksIHRoZUVPYmplY3QpOw0KKwl9DQorDQorCS8qKg0KKwkgKiBDYWxscyA8Y29kZT5jYXNlWFhYPC9jb2RlPiBmb3IgZWFjaCBjbGFzcyBvZiB0aGUgbW9kZWwgdW50aWwgb25lIHJldHVybnMgYSBub24gbnVsbCByZXN1bHQ7IGl0IHlpZWxkcyB0aGF0IHJlc3VsdC4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEByZXR1cm4gdGhlIGZpcnN0IG5vbi1udWxsIHJlc3VsdCByZXR1cm5lZCBieSBhIDxjb2RlPmNhc2VYWFg8L2NvZGU+IGNhbGwuDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCBUMSBkb1N3aXRjaChFQ2xhc3MgdGhlRUNsYXNzLCBFT2JqZWN0IHRoZUVPYmplY3QpIHsNCisJCWlmICh0aGVFQ2xhc3MuZUNvbnRhaW5lcigpID09IG1vZGVsUGFja2FnZSkgew0KKwkJCXJldHVybiBkb1N3aXRjaCh0aGVFQ2xhc3MuZ2V0Q2xhc3NpZmllcklEKCksIHRoZUVPYmplY3QpOw0KKwkJfQ0KKwkJZWxzZSB7DQorCQkJTGlzdDxFQ2xhc3M+IGVTdXBlclR5cGVzID0gdGhlRUNsYXNzLmdldEVTdXBlclR5cGVzKCk7DQorCQkJcmV0dXJuDQorCQkJCWVTdXBlclR5cGVzLmlzRW1wdHkoKSA/DQorCQkJCQlkZWZhdWx0Q2FzZSh0aGVFT2JqZWN0KSA6DQorCQkJCQlkb1N3aXRjaChlU3VwZXJUeXBlcy5nZXQoMCksIHRoZUVPYmplY3QpOw0KKwkJfQ0KKwl9DQorDQorCS8qKg0KKwkgKiBDYWxscyA8Y29kZT5jYXNlWFhYPC9jb2RlPiBmb3IgZWFjaCBjbGFzcyBvZiB0aGUgbW9kZWwgdW50aWwgb25lIHJldHVybnMgYSBub24gbnVsbCByZXN1bHQ7IGl0IHlpZWxkcyB0aGF0IHJlc3VsdC4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEByZXR1cm4gdGhlIGZpcnN0IG5vbi1udWxsIHJlc3VsdCByZXR1cm5lZCBieSBhIDxjb2RlPmNhc2VYWFg8L2NvZGU+IGNhbGwuDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCBUMSBkb1N3aXRjaChpbnQgY2xhc3NpZmllcklELCBFT2JqZWN0IHRoZUVPYmplY3QpIHsNCisJCXN3aXRjaCAoY2xhc3NpZmllcklEKSB7DQorCQkJY2FzZSBSa1BhY2thZ2UuUlVOR0VfS1VUVEE6IHsNCisJCQkJUnVuZ2VLdXR0YSBydW5nZUt1dHRhID0gKFJ1bmdlS3V0dGEpdGhlRU9iamVjdDsNCisJCQkJVDEgcmVzdWx0ID0gY2FzZVJ1bmdlS3V0dGEocnVuZ2VLdXR0YSk7DQorCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZVNvbHZlcihydW5nZUt1dHRhKTsNCisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlSWRlbnRpZmlhYmxlKHJ1bmdlS3V0dGEpOw0KKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VDb21wYXJhYmxlKHJ1bmdlS3V0dGEpOw0KKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGRlZmF1bHRDYXNlKHRoZUVPYmplY3QpOw0KKwkJCQlyZXR1cm4gcmVzdWx0Ow0KKwkJCX0NCisJCQlkZWZhdWx0OiByZXR1cm4gZGVmYXVsdENhc2UodGhlRU9iamVjdCk7DQorCQl9DQorCX0NCisNCisJLyoqDQorCSAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPlJ1bmdlIEt1dHRhPC9lbT4nLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsNCisJICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guDQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4NCisJICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+UnVuZ2UgS3V0dGE8L2VtPicuDQorCSAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgVDEgY2FzZVJ1bmdlS3V0dGEoUnVuZ2VLdXR0YSBvYmplY3QpIHsNCisJCXJldHVybiBudWxsOw0KKwl9DQorDQorCS8qKg0KKwkgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5Db21wYXJhYmxlPC9lbT4nLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsNCisJICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guDQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4NCisJICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+Q29tcGFyYWJsZTwvZW0+Jy4NCisJICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyA8VD4gVDEgY2FzZUNvbXBhcmFibGUoQ29tcGFyYWJsZTxUPiBvYmplY3QpIHsNCisJCXJldHVybiBudWxsOw0KKwl9DQorDQorCS8qKg0KKwkgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5JZGVudGlmaWFibGU8L2VtPicuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOw0KKwkgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLg0KKwkgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5JZGVudGlmaWFibGU8L2VtPicuDQorCSAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgVDEgY2FzZUlkZW50aWZpYWJsZShJZGVudGlmaWFibGUgb2JqZWN0KSB7DQorCQlyZXR1cm4gbnVsbDsNCisJfQ0KKw0KKwkvKioNCisJICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+U29sdmVyPC9lbT4nLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsNCisJICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guDQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4NCisJICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+U29sdmVyPC9lbT4nLg0KKwkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIFQxIGNhc2VTb2x2ZXIoU29sdmVyIG9iamVjdCkgew0KKwkJcmV0dXJuIG51bGw7DQorCX0NCisNCisJLyoqDQorCSAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkVPYmplY3Q8L2VtPicuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOw0KKwkgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaCwgYnV0IHRoaXMgaXMgdGhlIGxhc3QgY2FzZSBhbnl3YXkuDQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4NCisJICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+RU9iamVjdDwvZW0+Jy4NCisJICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBUMSBkZWZhdWx0Q2FzZShFT2JqZWN0IG9iamVjdCkgew0KKwkJcmV0dXJuIG51bGw7DQorCX0NCisNCit9IC8vUmtTd2l0Y2gNCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udHJhbnNwb3J0Ly5jbGFzc3BhdGggYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udHJhbnNwb3J0Ly5jbGFzc3BhdGgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzA0ZTg2MQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS50cmFuc3BvcnQvLmNsYXNzcGF0aApAQCAtMCwwICsxLDcgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8Y2xhc3NwYXRoPgorCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJzcmMiIHBhdGg9InNyYyIvPgorCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJjb24iIHBhdGg9Im9yZy5lY2xpcHNlLmpkdC5sYXVuY2hpbmcuSlJFX0NPTlRBSU5FUi9vcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwuZGVidWcudWkubGF1bmNoZXIuU3RhbmRhcmRWTVR5cGUvSjJTRS0xLjUiLz4KKwk8Y2xhc3NwYXRoZW50cnkga2luZD0iY29uIiBwYXRoPSJvcmcuZWNsaXBzZS5wZGUuY29yZS5yZXF1aXJlZFBsdWdpbnMiLz4KKwk8Y2xhc3NwYXRoZW50cnkga2luZD0ib3V0cHV0IiBwYXRoPSJiaW4iLz4KKzwvY2xhc3NwYXRoPgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnRyYW5zcG9ydC8ucHJvamVjdCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS50cmFuc3BvcnQvLnByb2plY3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjBlZjYzZAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS50cmFuc3BvcnQvLnByb2plY3QKQEAgLTAsMCArMSwyOCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxwcm9qZWN0RGVzY3JpcHRpb24+CisJPG5hbWU+b3JnLmVjbGlwc2Uuc3RlbS50cmFuc3BvcnQ8L25hbWU+CisJPGNvbW1lbnQ+PC9jb21tZW50PgorCTxwcm9qZWN0cz4KKwk8L3Byb2plY3RzPgorCTxidWlsZFNwZWM+CisJCTxidWlsZENvbW1hbmQ+CisJCQk8bmFtZT5vcmcuZWNsaXBzZS5qZHQuY29yZS5qYXZhYnVpbGRlcjwvbmFtZT4KKwkJCTxhcmd1bWVudHM+CisJCQk8L2FyZ3VtZW50cz4KKwkJPC9idWlsZENvbW1hbmQ+CisJCTxidWlsZENvbW1hbmQ+CisJCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuTWFuaWZlc3RCdWlsZGVyPC9uYW1lPgorCQkJPGFyZ3VtZW50cz4KKwkJCTwvYXJndW1lbnRzPgorCQk8L2J1aWxkQ29tbWFuZD4KKwkJPGJ1aWxkQ29tbWFuZD4KKwkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5TY2hlbWFCdWlsZGVyPC9uYW1lPgorCQkJPGFyZ3VtZW50cz4KKwkJCTwvYXJndW1lbnRzPgorCQk8L2J1aWxkQ29tbWFuZD4KKwk8L2J1aWxkU3BlYz4KKwk8bmF0dXJlcz4KKwkJPG5hdHVyZT5vcmcuZWNsaXBzZS5qZHQuY29yZS5qYXZhbmF0dXJlPC9uYXR1cmU+CisJCTxuYXR1cmU+b3JnLmVjbGlwc2UucGRlLlBsdWdpbk5hdHVyZTwvbmF0dXJlPgorCTwvbmF0dXJlcz4KKzwvcHJvamVjdERlc2NyaXB0aW9uPgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnRyYW5zcG9ydC8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udHJhbnNwb3J0Ly5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYWFmOGExCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnRyYW5zcG9ydC8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMKQEAgLTAsMCArMSw3OCBAQAorI1R1ZSBEZWMgMDQgMTc6MzE6MDYgRVNUIDIwMDcKK2VjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb2RlZ2VuLmlubGluZUpzckJ5dGVjb2RlPWVuYWJsZWQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvZGVnZW4udGFyZ2V0UGxhdGZvcm09MS41CitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb2RlZ2VuLnVudXNlZExvY2FsPXByZXNlcnZlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb21wbGlhbmNlPTEuNQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuZGVidWcubGluZU51bWJlcj1nZW5lcmF0ZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuZGVidWcubG9jYWxWYXJpYWJsZT1nZW5lcmF0ZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuZGVidWcuc291cmNlRmlsZT1nZW5lcmF0ZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuZG9jLmNvbW1lbnQuc3VwcG9ydD1lbmFibGVkCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmFubm90YXRpb25TdXBlckludGVyZmFjZT13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmFzc2VydElkZW50aWZpZXI9ZXJyb3IKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uYXV0b2JveGluZz13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRlcHJlY2F0aW9uPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZGVwcmVjYXRpb25JbkRlcHJlY2F0ZWRDb2RlPWRpc2FibGVkCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRlcHJlY2F0aW9uV2hlbk92ZXJyaWRpbmdEZXByZWNhdGVkTWV0aG9kPWRpc2FibGVkCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRpc2NvdXJhZ2VkUmVmZXJlbmNlPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZW1wdHlTdGF0ZW1lbnQ9aWdub3JlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmVudW1JZGVudGlmaWVyPWVycm9yCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZhbGx0aHJvdWdoQ2FzZT1pZ25vcmUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZmF0YWxPcHRpb25hbEVycm9yPWVuYWJsZWQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZmllbGRIaWRpbmc9aWdub3JlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZpbmFsUGFyYW1ldGVyQm91bmQ9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5maW5hbGx5QmxvY2tOb3RDb21wbGV0aW5nTm9ybWFsbHk9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5mb3JiaWRkZW5SZWZlcmVuY2U9ZXJyb3IKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaGlkZGVuQ2F0Y2hCbG9jaz13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmluY29tcGF0aWJsZU5vbkluaGVyaXRlZEludGVyZmFjZU1ldGhvZD13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmluY29tcGxldGVFbnVtU3dpdGNoPWlnbm9yZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbmRpcmVjdFN0YXRpY0FjY2Vzcz13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmludmFsaWRKYXZhZG9jPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW52YWxpZEphdmFkb2NUYWdzPWVuYWJsZWQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW52YWxpZEphdmFkb2NUYWdzRGVwcmVjYXRlZFJlZj1lbmFibGVkCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmludmFsaWRKYXZhZG9jVGFnc05vdFZpc2libGVSZWY9ZW5hYmxlZAorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbnZhbGlkSmF2YWRvY1RhZ3NWaXNpYmlsaXR5PXB1YmxpYworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5sb2NhbFZhcmlhYmxlSGlkaW5nPWlnbm9yZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5tZXRob2RXaXRoQ29uc3RydWN0b3JOYW1lPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0RlcHJlY2F0ZWRBbm5vdGF0aW9uPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0phdmFkb2NDb21tZW50cz1pZ25vcmUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0phdmFkb2NDb21tZW50c092ZXJyaWRpbmc9ZW5hYmxlZAorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nSmF2YWRvY0NvbW1lbnRzVmlzaWJpbGl0eT1wdWJsaWMKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0phdmFkb2NUYWdzPWlnbm9yZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nSmF2YWRvY1RhZ3NPdmVycmlkaW5nPWVuYWJsZWQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0phdmFkb2NUYWdzVmlzaWJpbGl0eT1wdWJsaWMKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ092ZXJyaWRlQW5ub3RhdGlvbj1pZ25vcmUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ1NlcmlhbFZlcnNpb249d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5ub0VmZmVjdEFzc2lnbm1lbnQ9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5ub0ltcGxpY2l0U3RyaW5nQ29udmVyc2lvbj13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm5vbkV4dGVybmFsaXplZFN0cmluZ0xpdGVyYWw9aWdub3JlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm51bGxSZWZlcmVuY2U9aWdub3JlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm92ZXJyaWRpbmdQYWNrYWdlRGVmYXVsdE1ldGhvZD13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnBhcmFtZXRlckFzc2lnbm1lbnQ9aWdub3JlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnBvc3NpYmxlQWNjaWRlbnRhbEJvb2xlYW5Bc3NpZ25tZW50PXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ucG90ZW50aWFsTnVsbFJlZmVyZW5jZT1pZ25vcmUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ucmF3VHlwZVJlZmVyZW5jZT13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnJlZHVuZGFudE51bGxDaGVjaz1pZ25vcmUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uc3BlY2lhbFBhcmFtZXRlckhpZGluZ0ZpZWxkPWRpc2FibGVkCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnN0YXRpY0FjY2Vzc1JlY2VpdmVyPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uc3VwcHJlc3NXYXJuaW5ncz1lbmFibGVkCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnN5bnRoZXRpY0FjY2Vzc0VtdWxhdGlvbj13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnR5cGVQYXJhbWV0ZXJIaWRpbmc9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bmNoZWNrZWRUeXBlT3BlcmF0aW9uPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5kb2N1bWVudGVkRW1wdHlCbG9jaz13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVuaGFuZGxlZFdhcm5pbmdUb2tlbj13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVubmVjZXNzYXJ5RWxzZT1pZ25vcmUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5uZWNlc3NhcnlUeXBlQ2hlY2s9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnF1YWxpZmllZEZpZWxkQWNjZXNzPWlnbm9yZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWREZWNsYXJlZFRocm93bkV4Y2VwdGlvbj13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZERlY2xhcmVkVGhyb3duRXhjZXB0aW9uV2hlbk92ZXJyaWRpbmc9ZW5hYmxlZAorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRJbXBvcnQ9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRMYWJlbD13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZExvY2FsPWlnbm9yZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRQYXJhbWV0ZXI9aWdub3JlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZFBhcmFtZXRlckluY2x1ZGVEb2NDb21tZW50UmVmZXJlbmNlPWVuYWJsZWQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkUGFyYW1ldGVyV2hlbkltcGxlbWVudGluZ0Fic3RyYWN0PWVuYWJsZWQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkUGFyYW1ldGVyV2hlbk92ZXJyaWRpbmdDb25jcmV0ZT1lbmFibGVkCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZFByaXZhdGVNZW1iZXI9aWdub3JlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnZhcmFyZ3NBcmd1bWVudE5lZWRDYXN0PXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnNvdXJjZT0xLjUKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS50cmFuc3BvcnQvTUVUQS1JTkYvTUFOSUZFU1QuTUYgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udHJhbnNwb3J0L01FVEEtSU5GL01BTklGRVNULk1GCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRlZGEzMDUKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udHJhbnNwb3J0L01FVEEtSU5GL01BTklGRVNULk1GCkBAIC0wLDAgKzEsMTkgQEAKK01hbmlmZXN0LVZlcnNpb246IDEuMAorQnVuZGxlLU1hbmlmZXN0VmVyc2lvbjogMgorQnVuZGxlLU5hbWU6ICVwbHVnaW5OYW1lCitCdW5kbGUtU3ltYm9saWNOYW1lOiBvcmcuZWNsaXBzZS5zdGVtLnRyYW5zcG9ydDsgc2luZ2xldG9uOj10cnVlCitCdW5kbGUtVmVyc2lvbjogMS4yLjEKK0J1bmRsZS1DbGFzc1BhdGg6IC4KK0J1bmRsZS1WZW5kb3I6ICVwcm92aWRlck5hbWUKK0J1bmRsZS1Mb2NhbGl6YXRpb246IHBsdWdpbgorQnVuZGxlLVJlcXVpcmVkRXhlY3V0aW9uRW52aXJvbm1lbnQ6IEoyU0UtMS41CitFeHBvcnQtUGFja2FnZTogb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy50cmFuc3BvcnQsCisgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy50cmFuc3BvcnQuaW1wbCwKKyBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLnRyYW5zcG9ydC5wcm92aWRlciwKKyBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLnRyYW5zcG9ydC51dGlsCitSZXF1aXJlLUJ1bmRsZTogb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9uczt2aXNpYmlsaXR5Oj1yZWV4cG9ydCwKKyBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUsCisgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLmVkaXQsCisgb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeQorQnVuZGxlLUFjdGl2YXRpb25Qb2xpY3k6IGxhenkKK0J1bmRsZS1BY3RpdmF0b3I6IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMudHJhbnNwb3J0LnByb3ZpZGVyLlRyYW5zcG9ydEVkaXRQbHVnaW4kSW1wbGVtZW50YXRpb24KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS50cmFuc3BvcnQvYnVpbGQucHJvcGVydGllcyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS50cmFuc3BvcnQvYnVpbGQucHJvcGVydGllcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZmQyODA3Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnRyYW5zcG9ydC9idWlsZC5wcm9wZXJ0aWVzCkBAIC0wLDAgKzEsMTcgQEAKKworIyA8Y29weXJpZ2h0PgorIyA8L2NvcHlyaWdodD4KKyMKKyMgJElkJAorCitiaW4uaW5jbHVkZXMgPSAuLFwKKyAgICAgICAgICAgICAgIG1vZGVsLyxcCisgICAgICAgICAgICAgICBNRVRBLUlORi8sXAorICAgICAgICAgICAgICAgcGx1Z2luLnhtbCxcCisgICAgICAgICAgICAgICBwbHVnaW4ucHJvcGVydGllcyxcCisgICAgICAgICAgICAgICBwbHVnaW5fZGUucHJvcGVydGllcyxcCisgICAgICAgICAgICAgICBwbHVnaW5fa3IucHJvcGVydGllcyxcCisgICAgICAgICAgICAgICBwbHVnaW5femgucHJvcGVydGllcworamFycy5jb21waWxlLm9yZGVyID0gLgorc291cmNlLi4gPSBzcmMvCitvdXRwdXQuLiA9IGJpbi8KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS50cmFuc3BvcnQvZXBsLXYxMC5odG1sIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnRyYW5zcG9ydC9lcGwtdjEwLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWQ0YjE5NgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS50cmFuc3BvcnQvZXBsLXYxMC5odG1sCkBAIC0wLDAgKzEsMzI4IEBACis8aHRtbCB4bWxuczpvPSJ1cm46c2NoZW1hcy1taWNyb3NvZnQtY29tOm9mZmljZTpvZmZpY2UiCit4bWxuczp3PSJ1cm46c2NoZW1hcy1taWNyb3NvZnQtY29tOm9mZmljZTp3b3JkIgoreG1sbnM9Imh0dHA6Ly93d3cudzMub3JnL1RSL1JFQy1odG1sNDAiPgorCis8aGVhZD4KKzxtZXRhIGh0dHAtZXF1aXY9Q29udGVudC1UeXBlIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD13aW5kb3dzLTEyNTIiPgorPG1ldGEgbmFtZT1Qcm9nSWQgY29udGVudD1Xb3JkLkRvY3VtZW50PgorPG1ldGEgbmFtZT1HZW5lcmF0b3IgY29udGVudD0iTWljcm9zb2Z0IFdvcmQgOSI+Cis8bWV0YSBuYW1lPU9yaWdpbmF0b3IgY29udGVudD0iTWljcm9zb2Z0IFdvcmQgOSI+Cis8bGluayByZWw9RmlsZS1MaXN0CitocmVmPSIuL0VjbGlwc2UlMjBFUEwlMjAyMDAzXzExXzEwJTIwRmluYWxfZmlsZXMvZmlsZWxpc3QueG1sIj4KKzx0aXRsZT5FY2xpcHNlIFB1YmxpYyBMaWNlbnNlIC0gVmVyc2lvbiAxLjA8L3RpdGxlPgorPCEtLVtpZiBndGUgbXNvIDldPjx4bWw+CisgPG86RG9jdW1lbnRQcm9wZXJ0aWVzPgorICA8bzpSZXZpc2lvbj4yPC9vOlJldmlzaW9uPgorICA8bzpUb3RhbFRpbWU+MzwvbzpUb3RhbFRpbWU+CisgIDxvOkNyZWF0ZWQ+MjAwNC0wMy0wNVQyMzowMzowMFo8L286Q3JlYXRlZD4KKyAgPG86TGFzdFNhdmVkPjIwMDQtMDMtMDVUMjM6MDM6MDBaPC9vOkxhc3RTYXZlZD4KKyAgPG86UGFnZXM+NDwvbzpQYWdlcz4KKyAgPG86V29yZHM+MTYyNjwvbzpXb3Jkcz4KKyAgPG86Q2hhcmFjdGVycz45MjcwPC9vOkNoYXJhY3RlcnM+CisgICA8bzpMaW5lcz43NzwvbzpMaW5lcz4KKyAgPG86UGFyYWdyYXBocz4xODwvbzpQYXJhZ3JhcGhzPgorICA8bzpDaGFyYWN0ZXJzV2l0aFNwYWNlcz4xMTM4NDwvbzpDaGFyYWN0ZXJzV2l0aFNwYWNlcz4KKyAgPG86VmVyc2lvbj45LjQ0MDI8L286VmVyc2lvbj4KKyA8L286RG9jdW1lbnRQcm9wZXJ0aWVzPgorPC94bWw+PCFbZW5kaWZdLS0+PCEtLVtpZiBndGUgbXNvIDldPjx4bWw+CisgPHc6V29yZERvY3VtZW50PgorICA8dzpUcmFja1JldmlzaW9ucy8+CisgPC93OldvcmREb2N1bWVudD4KKzwveG1sPjwhW2VuZGlmXS0tPgorPHN0eWxlPgorPCEtLQorIC8qIEZvbnQgRGVmaW5pdGlvbnMgKi8KK0Bmb250LWZhY2UKKwl7Zm9udC1mYW1pbHk6VGFob21hOworCXBhbm9zZS0xOjIgMTEgNiA0IDMgNSA0IDQgMiA0OworCW1zby1mb250LWNoYXJzZXQ6MDsKKwltc28tZ2VuZXJpYy1mb250LWZhbWlseTpzd2lzczsKKwltc28tZm9udC1waXRjaDp2YXJpYWJsZTsKKwltc28tZm9udC1zaWduYXR1cmU6NTUzNjc5NDk1IC0yMTQ3NDgzNjQ4IDggMCA2NjA0NyAwO30KKyAvKiBTdHlsZSBEZWZpbml0aW9ucyAqLworcC5Nc29Ob3JtYWwsIGxpLk1zb05vcm1hbCwgZGl2Lk1zb05vcm1hbAorCXttc28tc3R5bGUtcGFyZW50OiIiOworCW1hcmdpbjowaW47CisJbWFyZ2luLWJvdHRvbTouMDAwMXB0OworCW1zby1wYWdpbmF0aW9uOndpZG93LW9ycGhhbjsKKwlmb250LXNpemU6MTIuMHB0OworCWZvbnQtZmFtaWx5OiJUaW1lcyBOZXcgUm9tYW4iOworCW1zby1mYXJlYXN0LWZvbnQtZmFtaWx5OiJUaW1lcyBOZXcgUm9tYW4iO30KK3AKKwl7bWFyZ2luLXJpZ2h0OjBpbjsKKwltc28tbWFyZ2luLXRvcC1hbHQ6YXV0bzsKKwltc28tbWFyZ2luLWJvdHRvbS1hbHQ6YXV0bzsKKwltYXJnaW4tbGVmdDowaW47CisJbXNvLXBhZ2luYXRpb246d2lkb3ctb3JwaGFuOworCWZvbnQtc2l6ZToxMi4wcHQ7CisJZm9udC1mYW1pbHk6IlRpbWVzIE5ldyBSb21hbiI7CisJbXNvLWZhcmVhc3QtZm9udC1mYW1pbHk6IlRpbWVzIE5ldyBSb21hbiI7fQorcC5CYWxsb29uVGV4dCwgbGkuQmFsbG9vblRleHQsIGRpdi5CYWxsb29uVGV4dAorCXttc28tc3R5bGUtbmFtZToiQmFsbG9vbiBUZXh0IjsKKwltYXJnaW46MGluOworCW1hcmdpbi1ib3R0b206LjAwMDFwdDsKKwltc28tcGFnaW5hdGlvbjp3aWRvdy1vcnBoYW47CisJZm9udC1zaXplOjguMHB0OworCWZvbnQtZmFtaWx5OlRhaG9tYTsKKwltc28tZmFyZWFzdC1mb250LWZhbWlseToiVGltZXMgTmV3IFJvbWFuIjt9CitAcGFnZSBTZWN0aW9uMQorCXtzaXplOjguNWluIDExLjBpbjsKKwltYXJnaW46MS4waW4gMS4yNWluIDEuMGluIDEuMjVpbjsKKwltc28taGVhZGVyLW1hcmdpbjouNWluOworCW1zby1mb290ZXItbWFyZ2luOi41aW47CisJbXNvLXBhcGVyLXNvdXJjZTowO30KK2Rpdi5TZWN0aW9uMQorCXtwYWdlOlNlY3Rpb24xO30KKy0tPgorPC9zdHlsZT4KKzwvaGVhZD4KKworPGJvZHkgbGFuZz1FTi1VUyBzdHlsZT0ndGFiLWludGVydmFsOi41aW4nPgorCis8ZGl2IGNsYXNzPVNlY3Rpb24xPgorCis8cCBhbGlnbj1jZW50ZXIgc3R5bGU9J3RleHQtYWxpZ246Y2VudGVyJz48Yj5FY2xpcHNlIFB1YmxpYyBMaWNlbnNlIC0gdiAxLjA8L2I+Cis8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5USEUgQUNDT01QQU5ZSU5HIFBST0dSQU0gSVMgUFJPVklERUQgVU5ERVIKK1RIRSBURVJNUyBPRiBUSElTIEVDTElQU0UgUFVCTElDIExJQ0VOU0UgKCZxdW90O0FHUkVFTUVOVCZxdW90OykuIEFOWSBVU0UsCitSRVBST0RVQ1RJT04gT1IgRElTVFJJQlVUSU9OIE9GIFRIRSBQUk9HUkFNIENPTlNUSVRVVEVTIFJFQ0lQSUVOVCdTIEFDQ0VQVEFOQ0UKK09GIFRISVMgQUdSRUVNRU5ULjwvc3Bhbj4gPC9wPgorCis8cD48Yj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+MS4gREVGSU5JVElPTlM8L3NwYW4+PC9iPiA8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4mcXVvdDtDb250cmlidXRpb24mcXVvdDsgbWVhbnM6PC9zcGFuPiA8L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmEpCitpbiB0aGUgY2FzZSBvZiB0aGUgaW5pdGlhbCBDb250cmlidXRvciwgdGhlIGluaXRpYWwgY29kZSBhbmQgZG9jdW1lbnRhdGlvbgorZGlzdHJpYnV0ZWQgdW5kZXIgdGhpcyBBZ3JlZW1lbnQsIGFuZDxiciBjbGVhcj1sZWZ0PgorYikgaW4gdGhlIGNhc2Ugb2YgZWFjaCBzdWJzZXF1ZW50IENvbnRyaWJ1dG9yOjwvc3Bhbj48L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmkpCitjaGFuZ2VzIHRvIHRoZSBQcm9ncmFtLCBhbmQ8L3NwYW4+PC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5paSkKK2FkZGl0aW9ucyB0byB0aGUgUHJvZ3JhbTs8L3NwYW4+PC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz53aGVyZQorc3VjaCBjaGFuZ2VzIGFuZC9vciBhZGRpdGlvbnMgdG8gdGhlIFByb2dyYW0gb3JpZ2luYXRlIGZyb20gYW5kIGFyZSBkaXN0cmlidXRlZAorYnkgdGhhdCBwYXJ0aWN1bGFyIENvbnRyaWJ1dG9yLiBBIENvbnRyaWJ1dGlvbiAnb3JpZ2luYXRlcycgZnJvbSBhIENvbnRyaWJ1dG9yCitpZiBpdCB3YXMgYWRkZWQgdG8gdGhlIFByb2dyYW0gYnkgc3VjaCBDb250cmlidXRvciBpdHNlbGYgb3IgYW55b25lIGFjdGluZyBvbgorc3VjaCBDb250cmlidXRvcidzIGJlaGFsZi4gQ29udHJpYnV0aW9ucyBkbyBub3QgaW5jbHVkZSBhZGRpdGlvbnMgdG8gdGhlCitQcm9ncmFtIHdoaWNoOiAoaSkgYXJlIHNlcGFyYXRlIG1vZHVsZXMgb2Ygc29mdHdhcmUgZGlzdHJpYnV0ZWQgaW4gY29uanVuY3Rpb24KK3dpdGggdGhlIFByb2dyYW0gdW5kZXIgdGhlaXIgb3duIGxpY2Vuc2UgYWdyZWVtZW50LCBhbmQgKGlpKSBhcmUgbm90IGRlcml2YXRpdmUKK3dvcmtzIG9mIHRoZSBQcm9ncmFtLiA8L3NwYW4+PC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+JnF1b3Q7Q29udHJpYnV0b3ImcXVvdDsgbWVhbnMgYW55IHBlcnNvbiBvcgorZW50aXR5IHRoYXQgZGlzdHJpYnV0ZXMgdGhlIFByb2dyYW0uPC9zcGFuPiA8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4mcXVvdDtMaWNlbnNlZCBQYXRlbnRzICZxdW90OyBtZWFuIHBhdGVudAorY2xhaW1zIGxpY2Vuc2FibGUgYnkgYSBDb250cmlidXRvciB3aGljaCBhcmUgbmVjZXNzYXJpbHkgaW5mcmluZ2VkIGJ5IHRoZSB1c2UKK29yIHNhbGUgb2YgaXRzIENvbnRyaWJ1dGlvbiBhbG9uZSBvciB3aGVuIGNvbWJpbmVkIHdpdGggdGhlIFByb2dyYW0uIDwvc3Bhbj48L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4mcXVvdDtQcm9ncmFtJnF1b3Q7IG1lYW5zIHRoZSBDb250cmlidXRpb25zCitkaXN0cmlidXRlZCBpbiBhY2NvcmRhbmNlIHdpdGggdGhpcyBBZ3JlZW1lbnQuPC9zcGFuPiA8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4mcXVvdDtSZWNpcGllbnQmcXVvdDsgbWVhbnMgYW55b25lIHdobworcmVjZWl2ZXMgdGhlIFByb2dyYW0gdW5kZXIgdGhpcyBBZ3JlZW1lbnQsIGluY2x1ZGluZyBhbGwgQ29udHJpYnV0b3JzLjwvc3Bhbj4gPC9wPgorCis8cD48Yj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+Mi4gR1JBTlQgT0YgUklHSFRTPC9zcGFuPjwvYj4gPC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5hKQorU3ViamVjdCB0byB0aGUgdGVybXMgb2YgdGhpcyBBZ3JlZW1lbnQsIGVhY2ggQ29udHJpYnV0b3IgaGVyZWJ5IGdyYW50cyBSZWNpcGllbnQKK2Egbm9uLWV4Y2x1c2l2ZSwgd29ybGR3aWRlLCByb3lhbHR5LWZyZWUgY29weXJpZ2h0IGxpY2Vuc2UgdG88c3Bhbgorc3R5bGU9J2NvbG9yOnJlZCc+IDwvc3Bhbj5yZXByb2R1Y2UsIHByZXBhcmUgZGVyaXZhdGl2ZSB3b3JrcyBvZiwgcHVibGljbHkKK2Rpc3BsYXksIHB1YmxpY2x5IHBlcmZvcm0sIGRpc3RyaWJ1dGUgYW5kIHN1YmxpY2Vuc2UgdGhlIENvbnRyaWJ1dGlvbiBvZiBzdWNoCitDb250cmlidXRvciwgaWYgYW55LCBhbmQgc3VjaCBkZXJpdmF0aXZlIHdvcmtzLCBpbiBzb3VyY2UgY29kZSBhbmQgb2JqZWN0IGNvZGUKK2Zvcm0uPC9zcGFuPjwvcD4KKworPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YikKK1N1YmplY3QgdG8gdGhlIHRlcm1zIG9mIHRoaXMgQWdyZWVtZW50LCBlYWNoIENvbnRyaWJ1dG9yIGhlcmVieSBncmFudHMKK1JlY2lwaWVudCBhIG5vbi1leGNsdXNpdmUsIHdvcmxkd2lkZSw8c3BhbiBzdHlsZT0nY29sb3I6Z3JlZW4nPiA8L3NwYW4+cm95YWx0eS1mcmVlCitwYXRlbnQgbGljZW5zZSB1bmRlciBMaWNlbnNlZCBQYXRlbnRzIHRvIG1ha2UsIHVzZSwgc2VsbCwgb2ZmZXIgdG8gc2VsbCwgaW1wb3J0CithbmQgb3RoZXJ3aXNlIHRyYW5zZmVyIHRoZSBDb250cmlidXRpb24gb2Ygc3VjaCBDb250cmlidXRvciwgaWYgYW55LCBpbiBzb3VyY2UKK2NvZGUgYW5kIG9iamVjdCBjb2RlIGZvcm0uIFRoaXMgcGF0ZW50IGxpY2Vuc2Ugc2hhbGwgYXBwbHkgdG8gdGhlIGNvbWJpbmF0aW9uCitvZiB0aGUgQ29udHJpYnV0aW9uIGFuZCB0aGUgUHJvZ3JhbSBpZiwgYXQgdGhlIHRpbWUgdGhlIENvbnRyaWJ1dGlvbiBpcyBhZGRlZAorYnkgdGhlIENvbnRyaWJ1dG9yLCBzdWNoIGFkZGl0aW9uIG9mIHRoZSBDb250cmlidXRpb24gY2F1c2VzIHN1Y2ggY29tYmluYXRpb24KK3RvIGJlIGNvdmVyZWQgYnkgdGhlIExpY2Vuc2VkIFBhdGVudHMuIFRoZSBwYXRlbnQgbGljZW5zZSBzaGFsbCBub3QgYXBwbHkgdG8KK2FueSBvdGhlciBjb21iaW5hdGlvbnMgd2hpY2ggaW5jbHVkZSB0aGUgQ29udHJpYnV0aW9uLiBObyBoYXJkd2FyZSBwZXIgc2UgaXMKK2xpY2Vuc2VkIGhlcmV1bmRlci4gPC9zcGFuPjwvcD4KKworPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YykKK1JlY2lwaWVudCB1bmRlcnN0YW5kcyB0aGF0IGFsdGhvdWdoIGVhY2ggQ29udHJpYnV0b3IgZ3JhbnRzIHRoZSBsaWNlbnNlcyB0byBpdHMKK0NvbnRyaWJ1dGlvbnMgc2V0IGZvcnRoIGhlcmVpbiwgbm8gYXNzdXJhbmNlcyBhcmUgcHJvdmlkZWQgYnkgYW55IENvbnRyaWJ1dG9yCit0aGF0IHRoZSBQcm9ncmFtIGRvZXMgbm90IGluZnJpbmdlIHRoZSBwYXRlbnQgb3Igb3RoZXIgaW50ZWxsZWN0dWFsIHByb3BlcnR5CityaWdodHMgb2YgYW55IG90aGVyIGVudGl0eS4gRWFjaCBDb250cmlidXRvciBkaXNjbGFpbXMgYW55IGxpYWJpbGl0eSB0byBSZWNpcGllbnQKK2ZvciBjbGFpbXMgYnJvdWdodCBieSBhbnkgb3RoZXIgZW50aXR5IGJhc2VkIG9uIGluZnJpbmdlbWVudCBvZiBpbnRlbGxlY3R1YWwKK3Byb3BlcnR5IHJpZ2h0cyBvciBvdGhlcndpc2UuIEFzIGEgY29uZGl0aW9uIHRvIGV4ZXJjaXNpbmcgdGhlIHJpZ2h0cyBhbmQKK2xpY2Vuc2VzIGdyYW50ZWQgaGVyZXVuZGVyLCBlYWNoIFJlY2lwaWVudCBoZXJlYnkgYXNzdW1lcyBzb2xlIHJlc3BvbnNpYmlsaXR5Cit0byBzZWN1cmUgYW55IG90aGVyIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgbmVlZGVkLCBpZiBhbnkuIEZvciBleGFtcGxlLAoraWYgYSB0aGlyZCBwYXJ0eSBwYXRlbnQgbGljZW5zZSBpcyByZXF1aXJlZCB0byBhbGxvdyBSZWNpcGllbnQgdG8gZGlzdHJpYnV0ZQordGhlIFByb2dyYW0sIGl0IGlzIFJlY2lwaWVudCdzIHJlc3BvbnNpYmlsaXR5IHRvIGFjcXVpcmUgdGhhdCBsaWNlbnNlIGJlZm9yZQorZGlzdHJpYnV0aW5nIHRoZSBQcm9ncmFtLjwvc3Bhbj48L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmQpCitFYWNoIENvbnRyaWJ1dG9yIHJlcHJlc2VudHMgdGhhdCB0byBpdHMga25vd2xlZGdlIGl0IGhhcyBzdWZmaWNpZW50IGNvcHlyaWdodAorcmlnaHRzIGluIGl0cyBDb250cmlidXRpb24sIGlmIGFueSwgdG8gZ3JhbnQgdGhlIGNvcHlyaWdodCBsaWNlbnNlIHNldCBmb3J0aCBpbgordGhpcyBBZ3JlZW1lbnQuIDwvc3Bhbj48L3A+CisKKzxwPjxiPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4zLiBSRVFVSVJFTUVOVFM8L3NwYW4+PC9iPiA8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5BIENvbnRyaWJ1dG9yIG1heSBjaG9vc2UgdG8gZGlzdHJpYnV0ZSB0aGUKK1Byb2dyYW0gaW4gb2JqZWN0IGNvZGUgZm9ybSB1bmRlciBpdHMgb3duIGxpY2Vuc2UgYWdyZWVtZW50LCBwcm92aWRlZCB0aGF0Ojwvc3Bhbj4KKzwvcD4KKworPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YSkKK2l0IGNvbXBsaWVzIHdpdGggdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoaXMgQWdyZWVtZW50OyBhbmQ8L3NwYW4+PC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5iKQoraXRzIGxpY2Vuc2UgYWdyZWVtZW50Ojwvc3Bhbj48L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmkpCitlZmZlY3RpdmVseSBkaXNjbGFpbXMgb24gYmVoYWxmIG9mIGFsbCBDb250cmlidXRvcnMgYWxsIHdhcnJhbnRpZXMgYW5kCitjb25kaXRpb25zLCBleHByZXNzIGFuZCBpbXBsaWVkLCBpbmNsdWRpbmcgd2FycmFudGllcyBvciBjb25kaXRpb25zIG9mIHRpdGxlCithbmQgbm9uLWluZnJpbmdlbWVudCwgYW5kIGltcGxpZWQgd2FycmFudGllcyBvciBjb25kaXRpb25zIG9mIG1lcmNoYW50YWJpbGl0eQorYW5kIGZpdG5lc3MgZm9yIGEgcGFydGljdWxhciBwdXJwb3NlOyA8L3NwYW4+PC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5paSkKK2VmZmVjdGl2ZWx5IGV4Y2x1ZGVzIG9uIGJlaGFsZiBvZiBhbGwgQ29udHJpYnV0b3JzIGFsbCBsaWFiaWxpdHkgZm9yIGRhbWFnZXMsCitpbmNsdWRpbmcgZGlyZWN0LCBpbmRpcmVjdCwgc3BlY2lhbCwgaW5jaWRlbnRhbCBhbmQgY29uc2VxdWVudGlhbCBkYW1hZ2VzLCBzdWNoCithcyBsb3N0IHByb2ZpdHM7IDwvc3Bhbj48L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmlpaSkKK3N0YXRlcyB0aGF0IGFueSBwcm92aXNpb25zIHdoaWNoIGRpZmZlciBmcm9tIHRoaXMgQWdyZWVtZW50IGFyZSBvZmZlcmVkIGJ5IHRoYXQKK0NvbnRyaWJ1dG9yIGFsb25lIGFuZCBub3QgYnkgYW55IG90aGVyIHBhcnR5OyBhbmQ8L3NwYW4+PC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5pdikKK3N0YXRlcyB0aGF0IHNvdXJjZSBjb2RlIGZvciB0aGUgUHJvZ3JhbSBpcyBhdmFpbGFibGUgZnJvbSBzdWNoIENvbnRyaWJ1dG9yLCBhbmQKK2luZm9ybXMgbGljZW5zZWVzIGhvdyB0byBvYnRhaW4gaXQgaW4gYSByZWFzb25hYmxlIG1hbm5lciBvbiBvciB0aHJvdWdoIGEKK21lZGl1bSBjdXN0b21hcmlseSB1c2VkIGZvciBzb2Z0d2FyZSBleGNoYW5nZS48c3BhbiBzdHlsZT0nY29sb3I6Ymx1ZSc+IDwvc3Bhbj48L3NwYW4+PC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+V2hlbiB0aGUgUHJvZ3JhbSBpcyBtYWRlIGF2YWlsYWJsZSBpbiBzb3VyY2UKK2NvZGUgZm9ybTo8L3NwYW4+IDwvcD4KKworPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YSkKK2l0IG11c3QgYmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhpcyBBZ3JlZW1lbnQ7IGFuZCA8L3NwYW4+PC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5iKSBhCitjb3B5IG9mIHRoaXMgQWdyZWVtZW50IG11c3QgYmUgaW5jbHVkZWQgd2l0aCBlYWNoIGNvcHkgb2YgdGhlIFByb2dyYW0uIDwvc3Bhbj48L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5Db250cmlidXRvcnMgbWF5IG5vdCByZW1vdmUgb3IgYWx0ZXIgYW55Citjb3B5cmlnaHQgbm90aWNlcyBjb250YWluZWQgd2l0aGluIHRoZSBQcm9ncmFtLiA8L3NwYW4+PC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+RWFjaCBDb250cmlidXRvciBtdXN0IGlkZW50aWZ5IGl0c2VsZiBhcyB0aGUKK29yaWdpbmF0b3Igb2YgaXRzIENvbnRyaWJ1dGlvbiwgaWYgYW55LCBpbiBhIG1hbm5lciB0aGF0IHJlYXNvbmFibHkgYWxsb3dzCitzdWJzZXF1ZW50IFJlY2lwaWVudHMgdG8gaWRlbnRpZnkgdGhlIG9yaWdpbmF0b3Igb2YgdGhlIENvbnRyaWJ1dGlvbi4gPC9zcGFuPjwvcD4KKworPHA+PGI+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPjQuIENPTU1FUkNJQUwgRElTVFJJQlVUSU9OPC9zcGFuPjwvYj4gPC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+Q29tbWVyY2lhbCBkaXN0cmlidXRvcnMgb2Ygc29mdHdhcmUgbWF5CithY2NlcHQgY2VydGFpbiByZXNwb25zaWJpbGl0aWVzIHdpdGggcmVzcGVjdCB0byBlbmQgdXNlcnMsIGJ1c2luZXNzIHBhcnRuZXJzCithbmQgdGhlIGxpa2UuIFdoaWxlIHRoaXMgbGljZW5zZSBpcyBpbnRlbmRlZCB0byBmYWNpbGl0YXRlIHRoZSBjb21tZXJjaWFsIHVzZQorb2YgdGhlIFByb2dyYW0sIHRoZSBDb250cmlidXRvciB3aG8gaW5jbHVkZXMgdGhlIFByb2dyYW0gaW4gYSBjb21tZXJjaWFsCitwcm9kdWN0IG9mZmVyaW5nIHNob3VsZCBkbyBzbyBpbiBhIG1hbm5lciB3aGljaCBkb2VzIG5vdCBjcmVhdGUgcG90ZW50aWFsCitsaWFiaWxpdHkgZm9yIG90aGVyIENvbnRyaWJ1dG9ycy4gVGhlcmVmb3JlLCBpZiBhIENvbnRyaWJ1dG9yIGluY2x1ZGVzIHRoZQorUHJvZ3JhbSBpbiBhIGNvbW1lcmNpYWwgcHJvZHVjdCBvZmZlcmluZywgc3VjaCBDb250cmlidXRvciAoJnF1b3Q7Q29tbWVyY2lhbAorQ29udHJpYnV0b3ImcXVvdDspIGhlcmVieSBhZ3JlZXMgdG8gZGVmZW5kIGFuZCBpbmRlbW5pZnkgZXZlcnkgb3RoZXIKK0NvbnRyaWJ1dG9yICgmcXVvdDtJbmRlbW5pZmllZCBDb250cmlidXRvciZxdW90OykgYWdhaW5zdCBhbnkgbG9zc2VzLCBkYW1hZ2VzIGFuZAorY29zdHMgKGNvbGxlY3RpdmVseSAmcXVvdDtMb3NzZXMmcXVvdDspIGFyaXNpbmcgZnJvbSBjbGFpbXMsIGxhd3N1aXRzIGFuZCBvdGhlcgorbGVnYWwgYWN0aW9ucyBicm91Z2h0IGJ5IGEgdGhpcmQgcGFydHkgYWdhaW5zdCB0aGUgSW5kZW1uaWZpZWQgQ29udHJpYnV0b3IgdG8KK3RoZSBleHRlbnQgY2F1c2VkIGJ5IHRoZSBhY3RzIG9yIG9taXNzaW9ucyBvZiBzdWNoIENvbW1lcmNpYWwgQ29udHJpYnV0b3IgaW4KK2Nvbm5lY3Rpb24gd2l0aCBpdHMgZGlzdHJpYnV0aW9uIG9mIHRoZSBQcm9ncmFtIGluIGEgY29tbWVyY2lhbCBwcm9kdWN0CitvZmZlcmluZy4gVGhlIG9ibGlnYXRpb25zIGluIHRoaXMgc2VjdGlvbiBkbyBub3QgYXBwbHkgdG8gYW55IGNsYWltcyBvciBMb3NzZXMKK3JlbGF0aW5nIHRvIGFueSBhY3R1YWwgb3IgYWxsZWdlZCBpbnRlbGxlY3R1YWwgcHJvcGVydHkgaW5mcmluZ2VtZW50LiBJbiBvcmRlcgordG8gcXVhbGlmeSwgYW4gSW5kZW1uaWZpZWQgQ29udHJpYnV0b3IgbXVzdDogYSkgcHJvbXB0bHkgbm90aWZ5IHRoZSBDb21tZXJjaWFsCitDb250cmlidXRvciBpbiB3cml0aW5nIG9mIHN1Y2ggY2xhaW0sIGFuZCBiKSBhbGxvdyB0aGUgQ29tbWVyY2lhbCBDb250cmlidXRvcgordG8gY29udHJvbCwgYW5kIGNvb3BlcmF0ZSB3aXRoIHRoZSBDb21tZXJjaWFsIENvbnRyaWJ1dG9yIGluLCB0aGUgZGVmZW5zZSBhbmQKK2FueSByZWxhdGVkIHNldHRsZW1lbnQgbmVnb3RpYXRpb25zLiBUaGUgSW5kZW1uaWZpZWQgQ29udHJpYnV0b3IgbWF5IHBhcnRpY2lwYXRlCitpbiBhbnkgc3VjaCBjbGFpbSBhdCBpdHMgb3duIGV4cGVuc2UuPC9zcGFuPiA8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5Gb3IgZXhhbXBsZSwgYSBDb250cmlidXRvciBtaWdodCBpbmNsdWRlIHRoZQorUHJvZ3JhbSBpbiBhIGNvbW1lcmNpYWwgcHJvZHVjdCBvZmZlcmluZywgUHJvZHVjdCBYLiBUaGF0IENvbnRyaWJ1dG9yIGlzIHRoZW4gYQorQ29tbWVyY2lhbCBDb250cmlidXRvci4gSWYgdGhhdCBDb21tZXJjaWFsIENvbnRyaWJ1dG9yIHRoZW4gbWFrZXMgcGVyZm9ybWFuY2UKK2NsYWltcywgb3Igb2ZmZXJzIHdhcnJhbnRpZXMgcmVsYXRlZCB0byBQcm9kdWN0IFgsIHRob3NlIHBlcmZvcm1hbmNlIGNsYWltcyBhbmQKK3dhcnJhbnRpZXMgYXJlIHN1Y2ggQ29tbWVyY2lhbCBDb250cmlidXRvcidzIHJlc3BvbnNpYmlsaXR5IGFsb25lLiBVbmRlciB0aGlzCitzZWN0aW9uLCB0aGUgQ29tbWVyY2lhbCBDb250cmlidXRvciB3b3VsZCBoYXZlIHRvIGRlZmVuZCBjbGFpbXMgYWdhaW5zdCB0aGUKK290aGVyIENvbnRyaWJ1dG9ycyByZWxhdGVkIHRvIHRob3NlIHBlcmZvcm1hbmNlIGNsYWltcyBhbmQgd2FycmFudGllcywgYW5kIGlmIGEKK2NvdXJ0IHJlcXVpcmVzIGFueSBvdGhlciBDb250cmlidXRvciB0byBwYXkgYW55IGRhbWFnZXMgYXMgYSByZXN1bHQsIHRoZQorQ29tbWVyY2lhbCBDb250cmlidXRvciBtdXN0IHBheSB0aG9zZSBkYW1hZ2VzLjwvc3Bhbj4gPC9wPgorCis8cD48Yj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+NS4gTk8gV0FSUkFOVFk8L3NwYW4+PC9iPiA8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5FWENFUFQgQVMgRVhQUkVTU0xZIFNFVCBGT1JUSCBJTiBUSElTCitBR1JFRU1FTlQsIFRIRSBQUk9HUkFNIElTIFBST1ZJREVEIE9OIEFOICZxdW90O0FTIElTJnF1b3Q7IEJBU0lTLCBXSVRIT1VUCitXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIEVJVEhFUiBFWFBSRVNTIE9SIElNUExJRUQgSU5DTFVESU5HLAorV0lUSE9VVCBMSU1JVEFUSU9OLCBBTlkgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIFRJVExFLCBOT04tSU5GUklOR0VNRU5ULAorTUVSQ0hBTlRBQklMSVRZIE9SIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBFYWNoIFJlY2lwaWVudCBpcyBzb2xlbHkKK3Jlc3BvbnNpYmxlIGZvciBkZXRlcm1pbmluZyB0aGUgYXBwcm9wcmlhdGVuZXNzIG9mIHVzaW5nIGFuZCBkaXN0cmlidXRpbmcgdGhlCitQcm9ncmFtIGFuZCBhc3N1bWVzIGFsbCByaXNrcyBhc3NvY2lhdGVkIHdpdGggaXRzIGV4ZXJjaXNlIG9mIHJpZ2h0cyB1bmRlciB0aGlzCitBZ3JlZW1lbnQgLCBpbmNsdWRpbmcgYnV0IG5vdCBsaW1pdGVkIHRvIHRoZSByaXNrcyBhbmQgY29zdHMgb2YgcHJvZ3JhbSBlcnJvcnMsCitjb21wbGlhbmNlIHdpdGggYXBwbGljYWJsZSBsYXdzLCBkYW1hZ2UgdG8gb3IgbG9zcyBvZiBkYXRhLCBwcm9ncmFtcyBvcgorZXF1aXBtZW50LCBhbmQgdW5hdmFpbGFiaWxpdHkgb3IgaW50ZXJydXB0aW9uIG9mIG9wZXJhdGlvbnMuIDwvc3Bhbj48L3A+CisKKzxwPjxiPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz42LiBESVNDTEFJTUVSIE9GIExJQUJJTElUWTwvc3Bhbj48L2I+IDwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkVYQ0VQVCBBUyBFWFBSRVNTTFkgU0VUIEZPUlRIIElOIFRISVMKK0FHUkVFTUVOVCwgTkVJVEhFUiBSRUNJUElFTlQgTk9SIEFOWSBDT05UUklCVVRPUlMgU0hBTEwgSEFWRSBBTlkgTElBQklMSVRZIEZPUgorQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisoSU5DTFVESU5HIFdJVEhPVVQgTElNSVRBVElPTiBMT1NUIFBST0ZJVFMpLCBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcKK05FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT1IgRElTVFJJQlVUSU9OIE9GCitUSEUgUFJPR1JBTSBPUiBUSEUgRVhFUkNJU0UgT0YgQU5ZIFJJR0hUUyBHUkFOVEVEIEhFUkVVTkRFUiwgRVZFTiBJRiBBRFZJU0VEIE9GCitUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLjwvc3Bhbj4gPC9wPgorCis8cD48Yj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+Ny4gR0VORVJBTDwvc3Bhbj48L2I+IDwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPklmIGFueSBwcm92aXNpb24gb2YgdGhpcyBBZ3JlZW1lbnQgaXMgaW52YWxpZAorb3IgdW5lbmZvcmNlYWJsZSB1bmRlciBhcHBsaWNhYmxlIGxhdywgaXQgc2hhbGwgbm90IGFmZmVjdCB0aGUgdmFsaWRpdHkgb3IKK2VuZm9yY2VhYmlsaXR5IG9mIHRoZSByZW1haW5kZXIgb2YgdGhlIHRlcm1zIG9mIHRoaXMgQWdyZWVtZW50LCBhbmQgd2l0aG91dAorZnVydGhlciBhY3Rpb24gYnkgdGhlIHBhcnRpZXMgaGVyZXRvLCBzdWNoIHByb3Zpc2lvbiBzaGFsbCBiZSByZWZvcm1lZCB0byB0aGUKK21pbmltdW0gZXh0ZW50IG5lY2Vzc2FyeSB0byBtYWtlIHN1Y2ggcHJvdmlzaW9uIHZhbGlkIGFuZCBlbmZvcmNlYWJsZS48L3NwYW4+IDwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPklmIFJlY2lwaWVudCBpbnN0aXR1dGVzIHBhdGVudCBsaXRpZ2F0aW9uCithZ2FpbnN0IGFueSBlbnRpdHkgKGluY2x1ZGluZyBhIGNyb3NzLWNsYWltIG9yIGNvdW50ZXJjbGFpbSBpbiBhIGxhd3N1aXQpCithbGxlZ2luZyB0aGF0IHRoZSBQcm9ncmFtIGl0c2VsZiAoZXhjbHVkaW5nIGNvbWJpbmF0aW9ucyBvZiB0aGUgUHJvZ3JhbSB3aXRoCitvdGhlciBzb2Z0d2FyZSBvciBoYXJkd2FyZSkgaW5mcmluZ2VzIHN1Y2ggUmVjaXBpZW50J3MgcGF0ZW50KHMpLCB0aGVuIHN1Y2gKK1JlY2lwaWVudCdzIHJpZ2h0cyBncmFudGVkIHVuZGVyIFNlY3Rpb24gMihiKSBzaGFsbCB0ZXJtaW5hdGUgYXMgb2YgdGhlIGRhdGUKK3N1Y2ggbGl0aWdhdGlvbiBpcyBmaWxlZC4gPC9zcGFuPjwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkFsbCBSZWNpcGllbnQncyByaWdodHMgdW5kZXIgdGhpcyBBZ3JlZW1lbnQKK3NoYWxsIHRlcm1pbmF0ZSBpZiBpdCBmYWlscyB0byBjb21wbHkgd2l0aCBhbnkgb2YgdGhlIG1hdGVyaWFsIHRlcm1zIG9yCitjb25kaXRpb25zIG9mIHRoaXMgQWdyZWVtZW50IGFuZCBkb2VzIG5vdCBjdXJlIHN1Y2ggZmFpbHVyZSBpbiBhIHJlYXNvbmFibGUKK3BlcmlvZCBvZiB0aW1lIGFmdGVyIGJlY29taW5nIGF3YXJlIG9mIHN1Y2ggbm9uY29tcGxpYW5jZS4gSWYgYWxsIFJlY2lwaWVudCdzCityaWdodHMgdW5kZXIgdGhpcyBBZ3JlZW1lbnQgdGVybWluYXRlLCBSZWNpcGllbnQgYWdyZWVzIHRvIGNlYXNlIHVzZSBhbmQKK2Rpc3RyaWJ1dGlvbiBvZiB0aGUgUHJvZ3JhbSBhcyBzb29uIGFzIHJlYXNvbmFibHkgcHJhY3RpY2FibGUuIEhvd2V2ZXIsCitSZWNpcGllbnQncyBvYmxpZ2F0aW9ucyB1bmRlciB0aGlzIEFncmVlbWVudCBhbmQgYW55IGxpY2Vuc2VzIGdyYW50ZWQgYnkKK1JlY2lwaWVudCByZWxhdGluZyB0byB0aGUgUHJvZ3JhbSBzaGFsbCBjb250aW51ZSBhbmQgc3Vydml2ZS4gPC9zcGFuPjwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkV2ZXJ5b25lIGlzIHBlcm1pdHRlZCB0byBjb3B5IGFuZCBkaXN0cmlidXRlCitjb3BpZXMgb2YgdGhpcyBBZ3JlZW1lbnQsIGJ1dCBpbiBvcmRlciB0byBhdm9pZCBpbmNvbnNpc3RlbmN5IHRoZSBBZ3JlZW1lbnQgaXMKK2NvcHlyaWdodGVkIGFuZCBtYXkgb25seSBiZSBtb2RpZmllZCBpbiB0aGUgZm9sbG93aW5nIG1hbm5lci4gVGhlIEFncmVlbWVudAorU3Rld2FyZCByZXNlcnZlcyB0aGUgcmlnaHQgdG8gcHVibGlzaCBuZXcgdmVyc2lvbnMgKGluY2x1ZGluZyByZXZpc2lvbnMpIG9mCit0aGlzIEFncmVlbWVudCBmcm9tIHRpbWUgdG8gdGltZS4gTm8gb25lIG90aGVyIHRoYW4gdGhlIEFncmVlbWVudCBTdGV3YXJkIGhhcwordGhlIHJpZ2h0IHRvIG1vZGlmeSB0aGlzIEFncmVlbWVudC4gVGhlIEVjbGlwc2UgRm91bmRhdGlvbiBpcyB0aGUgaW5pdGlhbAorQWdyZWVtZW50IFN0ZXdhcmQuIFRoZSBFY2xpcHNlIEZvdW5kYXRpb24gbWF5IGFzc2lnbiB0aGUgcmVzcG9uc2liaWxpdHkgdG8KK3NlcnZlIGFzIHRoZSBBZ3JlZW1lbnQgU3Rld2FyZCB0byBhIHN1aXRhYmxlIHNlcGFyYXRlIGVudGl0eS4gRWFjaCBuZXcgdmVyc2lvbgorb2YgdGhlIEFncmVlbWVudCB3aWxsIGJlIGdpdmVuIGEgZGlzdGluZ3Vpc2hpbmcgdmVyc2lvbiBudW1iZXIuIFRoZSBQcm9ncmFtCisoaW5jbHVkaW5nIENvbnRyaWJ1dGlvbnMpIG1heSBhbHdheXMgYmUgZGlzdHJpYnV0ZWQgc3ViamVjdCB0byB0aGUgdmVyc2lvbiBvZgordGhlIEFncmVlbWVudCB1bmRlciB3aGljaCBpdCB3YXMgcmVjZWl2ZWQuIEluIGFkZGl0aW9uLCBhZnRlciBhIG5ldyB2ZXJzaW9uIG9mCit0aGUgQWdyZWVtZW50IGlzIHB1Ymxpc2hlZCwgQ29udHJpYnV0b3IgbWF5IGVsZWN0IHRvIGRpc3RyaWJ1dGUgdGhlIFByb2dyYW0KKyhpbmNsdWRpbmcgaXRzIENvbnRyaWJ1dGlvbnMpIHVuZGVyIHRoZSBuZXcgdmVyc2lvbi4gRXhjZXB0IGFzIGV4cHJlc3NseSBzdGF0ZWQKK2luIFNlY3Rpb25zIDIoYSkgYW5kIDIoYikgYWJvdmUsIFJlY2lwaWVudCByZWNlaXZlcyBubyByaWdodHMgb3IgbGljZW5zZXMgdG8KK3RoZSBpbnRlbGxlY3R1YWwgcHJvcGVydHkgb2YgYW55IENvbnRyaWJ1dG9yIHVuZGVyIHRoaXMgQWdyZWVtZW50LCB3aGV0aGVyCitleHByZXNzbHksIGJ5IGltcGxpY2F0aW9uLCBlc3RvcHBlbCBvciBvdGhlcndpc2UuIEFsbCByaWdodHMgaW4gdGhlIFByb2dyYW0gbm90CitleHByZXNzbHkgZ3JhbnRlZCB1bmRlciB0aGlzIEFncmVlbWVudCBhcmUgcmVzZXJ2ZWQuPC9zcGFuPiA8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5UaGlzIEFncmVlbWVudCBpcyBnb3Zlcm5lZCBieSB0aGUgbGF3cyBvZiB0aGUKK1N0YXRlIG9mIE5ldyBZb3JrIGFuZCB0aGUgaW50ZWxsZWN0dWFsIHByb3BlcnR5IGxhd3Mgb2YgdGhlIFVuaXRlZCBTdGF0ZXMgb2YKK0FtZXJpY2EuIE5vIHBhcnR5IHRvIHRoaXMgQWdyZWVtZW50IHdpbGwgYnJpbmcgYSBsZWdhbCBhY3Rpb24gdW5kZXIgdGhpcworQWdyZWVtZW50IG1vcmUgdGhhbiBvbmUgeWVhciBhZnRlciB0aGUgY2F1c2Ugb2YgYWN0aW9uIGFyb3NlLiBFYWNoIHBhcnR5IHdhaXZlcworaXRzIHJpZ2h0cyB0byBhIGp1cnkgdHJpYWwgaW4gYW55IHJlc3VsdGluZyBsaXRpZ2F0aW9uLjwvc3Bhbj4gPC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWw+PCFbaWYgIXN1cHBvcnRFbXB0eVBhcmFzXT4mbmJzcDs8IVtlbmRpZl0+PG86cD48L286cD48L3A+CisKKzwvZGl2PgorCis8L2JvZHk+CisKKzwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udHJhbnNwb3J0L2ljb25zL2Z1bGwvY3VzdG9tMTYvYWlyRWRnZS5wbmcgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udHJhbnNwb3J0L2ljb25zL2Z1bGwvY3VzdG9tMTYvYWlyRWRnZS5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGYzYzhjZgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS50cmFuc3BvcnQvaWNvbnMvZnVsbC9jdXN0b20xNi9haXJFZGdlLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udHJhbnNwb3J0L2ljb25zL2Z1bGwvY3VzdG9tMTYvYWlycG9ydC5wbmcgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udHJhbnNwb3J0L2ljb25zL2Z1bGwvY3VzdG9tMTYvYWlycG9ydC5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTRjOGM2NwotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS50cmFuc3BvcnQvaWNvbnMvZnVsbC9jdXN0b20xNi9haXJwb3J0LnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udHJhbnNwb3J0L2ljb25zL2Z1bGwvb2JqMTYvUGlwZVN0eWxlVHJhbnNwb3J0U3lzdGVtLmdpZiBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS50cmFuc3BvcnQvaWNvbnMvZnVsbC9vYmoxNi9QaXBlU3R5bGVUcmFuc3BvcnRTeXN0ZW0uZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ5MmYzNGMKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udHJhbnNwb3J0L2ljb25zL2Z1bGwvb2JqMTYvUGlwZVN0eWxlVHJhbnNwb3J0U3lzdGVtLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udHJhbnNwb3J0L2ljb25zL2Z1bGwvb2JqMTYvUGlwZVRyYW5zcG9ydEVkZ2UuZ2lmIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnRyYW5zcG9ydC9pY29ucy9mdWxsL29iajE2L1BpcGVUcmFuc3BvcnRFZGdlLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZDg3NDc0Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnRyYW5zcG9ydC9pY29ucy9mdWxsL29iajE2L1BpcGVUcmFuc3BvcnRFZGdlLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udHJhbnNwb3J0L2ljb25zL2Z1bGwvb2JqMTYvUGlwZVRyYW5zcG9ydEVkZ2VMYWJlbC5naWYgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udHJhbnNwb3J0L2ljb25zL2Z1bGwvb2JqMTYvUGlwZVRyYW5zcG9ydEVkZ2VMYWJlbC5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzQxNGZlOQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS50cmFuc3BvcnQvaWNvbnMvZnVsbC9vYmoxNi9QaXBlVHJhbnNwb3J0RWRnZUxhYmVsLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udHJhbnNwb3J0L2ljb25zL2Z1bGwvb2JqMTYvUGlwZVRyYW5zcG9ydEVkZ2VMYWJlbFZhbHVlLmdpZiBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS50cmFuc3BvcnQvaWNvbnMvZnVsbC9vYmoxNi9QaXBlVHJhbnNwb3J0RWRnZUxhYmVsVmFsdWUuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdjMmFhYWMKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udHJhbnNwb3J0L2ljb25zL2Z1bGwvb2JqMTYvUGlwZVRyYW5zcG9ydEVkZ2VMYWJlbFZhbHVlLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udHJhbnNwb3J0L21vZGVsL3RyYW5zcG9ydC5lY29yZSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS50cmFuc3BvcnQvbW9kZWwvdHJhbnNwb3J0LmVjb3JlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFiODIxNWUKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udHJhbnNwb3J0L21vZGVsL3RyYW5zcG9ydC5lY29yZQpAQCAtMCwwICsxLDIwIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPGVjb3JlOkVQYWNrYWdlIHhtaTp2ZXJzaW9uPSIyLjAiCisgICAgeG1sbnM6eG1pPSJodHRwOi8vd3d3Lm9tZy5vcmcvWE1JIiB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIgorICAgIHhtbG5zOmVjb3JlPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2VtZi8yMDAyL0Vjb3JlIiBuYW1lPSJ0cmFuc3BvcnQiCisgICAgbnNVUkk9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy90cmFuc3BvcnQuZWNvcmUiIG5zUHJlZml4PSJvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLnRyYW5zcG9ydCI+CisgIDxlQ2xhc3NpZmllcnMgeHNpOnR5cGU9ImVjb3JlOkVDbGFzcyIgbmFtZT0iUGlwZVN0eWxlVHJhbnNwb3J0U3lzdGVtIiBlU3VwZXJUeXBlcz0iIy8vVHJhbnNwb3J0U3lzdGVtIj4KKyAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RVJlZmVyZW5jZSIgbmFtZT0iaW5UcmFuc3BvcnRFZGdlcyIgdXBwZXJCb3VuZD0iLTEiCisgICAgICAgIGVUeXBlPSIjLy9QaXBlVHJhbnNwb3J0RWRnZSIvPgorICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFUmVmZXJlbmNlIiBuYW1lPSJvdXRUcmFuc3BvcnRFZGdlcyIgdXBwZXJCb3VuZD0iLTEiCisgICAgICAgIGVUeXBlPSIjLy9QaXBlVHJhbnNwb3J0RWRnZSIvPgorICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJtYXhDYXBhY2l0eSIgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLmVtZi5lY29yZS9tb2RlbC9FY29yZS5lY29yZSMvL0VEb3VibGUiLz4KKyAgPC9lQ2xhc3NpZmllcnM+CisgIDxlQ2xhc3NpZmllcnMgeHNpOnR5cGU9ImVjb3JlOkVDbGFzcyIgbmFtZT0iVHJhbnNwb3J0U3lzdGVtIiBhYnN0cmFjdD0idHJ1ZSIgZVN1cGVyVHlwZXM9Ii4uLy4uL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9tb2RlbC9ncmFwaC5lY29yZSMvL05vZGUiLz4KKyAgPGVDbGFzc2lmaWVycyB4c2k6dHlwZT0iZWNvcmU6RUNsYXNzIiBuYW1lPSJQaXBlVHJhbnNwb3J0RWRnZSIgZVN1cGVyVHlwZXM9Ii4uLy4uL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvbW9kZWwvZWRnZXMuZWNvcmUjLy9Qb3B1bGF0aW9uRWRnZSIvPgorICA8ZUNsYXNzaWZpZXJzIHhzaTp0eXBlPSJlY29yZTpFQ2xhc3MiIG5hbWU9IlBpcGVUcmFuc3BvcnRFZGdlTGFiZWwiIGVTdXBlclR5cGVzPSIuLi8uLi9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvbW9kZWwvZ3JhcGguZWNvcmUjLy9FZGdlTGFiZWwgLi4vLi4vb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL21vZGVsL21vZGlmaWVyLmVjb3JlIy8vTW9kaWZpYWJsZSIvPgorICA8ZUNsYXNzaWZpZXJzIHhzaTp0eXBlPSJlY29yZTpFQ2xhc3MiIG5hbWU9IlBpcGVUcmFuc3BvcnRFZGdlTGFiZWxWYWx1ZSIgZVN1cGVyVHlwZXM9Ii4uLy4uL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9tb2RlbC9ncmFwaC5lY29yZSMvL0xhYmVsVmFsdWUiPgorICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJtYXhGbG93IiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIHBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2UuZW1mLmVjb3JlL21vZGVsL0Vjb3JlLmVjb3JlIy8vRURvdWJsZSIvPgorICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJ0aW1lUGVyaW9kIiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIHBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2UuZW1mLmVjb3JlL21vZGVsL0Vjb3JlLmVjb3JlIy8vRUxvbmciLz4KKyAgPC9lQ2xhc3NpZmllcnM+Cis8L2Vjb3JlOkVQYWNrYWdlPgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnRyYW5zcG9ydC9tb2RlbC90cmFuc3BvcnQuZ2VubW9kZWwgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udHJhbnNwb3J0L21vZGVsL3RyYW5zcG9ydC5nZW5tb2RlbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YmQ0NjIwCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnRyYW5zcG9ydC9tb2RlbC90cmFuc3BvcnQuZ2VubW9kZWwKQEAgLTAsMCArMSwyNiBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxnZW5tb2RlbDpHZW5Nb2RlbCB4bWk6dmVyc2lvbj0iMi4wIgorICAgIHhtbG5zOnhtaT0iaHR0cDovL3d3dy5vbWcub3JnL1hNSSIgeG1sbnM6ZWNvcmU9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDIvRWNvcmUiCisgICAgeG1sbnM6Z2VubW9kZWw9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDIvR2VuTW9kZWwiIG1vZGVsRGlyZWN0b3J5PSIvb3JnLmVjbGlwc2Uuc3RlbS50cmFuc3BvcnQvc3JjIgorICAgIGVkaXREaXJlY3Rvcnk9Ii9vcmcuZWNsaXBzZS5zdGVtLnRyYW5zcG9ydC9zcmMiIGVkaXRvckRpcmVjdG9yeT0iL29yZy5lY2xpcHNlLnN0ZW0udWkudHJhbnNwb3J0L3NyYyIKKyAgICBtb2RlbFBsdWdpbklEPSJvcmcuZWNsaXBzZS5zdGVtLnRyYW5zcG9ydCIgbW9kZWxOYW1lPSJUcmFuc3BvcnQiIHRlc3RzRGlyZWN0b3J5PSIvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy50cmFuc3BvcnQvc3JjIgorICAgIGltcG9ydGVySUQ9Im9yZy5lY2xpcHNlLmVtZi5pbXBvcnRlci5qYXZhIiBjb21wbGlhbmNlTGV2ZWw9IjUuMCIgY29weXJpZ2h0RmllbGRzPSJmYWxzZSIKKyAgICB1c2VkR2VuUGFja2FnZXM9Ii4uLy4uL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvbW9kZWwvZGVmaW5pdGlvbnMuZ2VubW9kZWwjLy9lZGdlcyAuLi8uLi9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvbW9kZWwvY29yZS5nZW5tb2RlbCMvL2dyYXBoIC4uLy4uL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9tb2RlbC9jb3JlLmdlbm1vZGVsIy8vY29tbW9uIC4uLy4uL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9tb2RlbC9jb3JlLmdlbm1vZGVsIy8vbW9kZWwgLi4vLi4vb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL21vZGVsL2NvcmUuZ2VubW9kZWwjLy9tb2RpZmllciBwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLmVtZi5lY29yZS9tb2RlbC9FY29yZS5nZW5tb2RlbCMvL2Vjb3JlIC4uLy4uL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9tb2RlbC9jb3JlLmdlbm1vZGVsIy8vc2NlbmFyaW8gLi4vLi4vb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL21vZGVsL2NvcmUuZ2VubW9kZWwjLy9zZXF1ZW5jZXIgLi4vLi4vb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL21vZGVsL2NvcmUuZ2VubW9kZWwjLy9zb2x2ZXIiPgorICA8Zm9yZWlnbk1vZGVsPkBtb2RlbDwvZm9yZWlnbk1vZGVsPgorICA8Z2VuUGFja2FnZXMgcHJlZml4PSJUcmFuc3BvcnQiIGJhc2VQYWNrYWdlPSJvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zIiBkaXNwb3NhYmxlUHJvdmlkZXJGYWN0b3J5PSJ0cnVlIgorICAgICAgZ2VuZXJhdGVFeGFtcGxlQ2xhc3M9ImZhbHNlIiBtdWx0aXBsZUVkaXRvclBhZ2VzPSJmYWxzZSIgZ2VuZXJhdGVNb2RlbFdpemFyZD0iZmFsc2UiCisgICAgICBlY29yZVBhY2thZ2U9InRyYW5zcG9ydC5lY29yZSMvIj4KKyAgICA8Z2VuQ2xhc3NlcyBlY29yZUNsYXNzPSJ0cmFuc3BvcnQuZWNvcmUjLy9QaXBlU3R5bGVUcmFuc3BvcnRTeXN0ZW0iPgorICAgICAgPGdlbkZlYXR1cmVzIG5vdGlmeT0iZmFsc2UiIGNyZWF0ZUNoaWxkPSJmYWxzZSIgcHJvcGVydHlTb3J0Q2hvaWNlcz0idHJ1ZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFUmVmZXJlbmNlIHRyYW5zcG9ydC5lY29yZSMvL1BpcGVTdHlsZVRyYW5zcG9ydFN5c3RlbS9pblRyYW5zcG9ydEVkZ2VzIi8+CisgICAgICA8Z2VuRmVhdHVyZXMgbm90aWZ5PSJmYWxzZSIgY3JlYXRlQ2hpbGQ9ImZhbHNlIiBwcm9wZXJ0eVNvcnRDaG9pY2VzPSJ0cnVlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVSZWZlcmVuY2UgdHJhbnNwb3J0LmVjb3JlIy8vUGlwZVN0eWxlVHJhbnNwb3J0U3lzdGVtL291dFRyYW5zcG9ydEVkZ2VzIi8+CisgICAgICA8Z2VuRmVhdHVyZXMgY3JlYXRlQ2hpbGQ9ImZhbHNlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVBdHRyaWJ1dGUgdHJhbnNwb3J0LmVjb3JlIy8vUGlwZVN0eWxlVHJhbnNwb3J0U3lzdGVtL21heENhcGFjaXR5Ii8+CisgICAgPC9nZW5DbGFzc2VzPgorICAgIDxnZW5DbGFzc2VzIGltYWdlPSJmYWxzZSIgZWNvcmVDbGFzcz0idHJhbnNwb3J0LmVjb3JlIy8vVHJhbnNwb3J0U3lzdGVtIi8+CisgICAgPGdlbkNsYXNzZXMgZWNvcmVDbGFzcz0idHJhbnNwb3J0LmVjb3JlIy8vUGlwZVRyYW5zcG9ydEVkZ2UiLz4KKyAgICA8Z2VuQ2xhc3NlcyBlY29yZUNsYXNzPSJ0cmFuc3BvcnQuZWNvcmUjLy9QaXBlVHJhbnNwb3J0RWRnZUxhYmVsIi8+CisgICAgPGdlbkNsYXNzZXMgZWNvcmVDbGFzcz0idHJhbnNwb3J0LmVjb3JlIy8vUGlwZVRyYW5zcG9ydEVkZ2VMYWJlbFZhbHVlIj4KKyAgICAgIDxnZW5GZWF0dXJlcyBjcmVhdGVDaGlsZD0iZmFsc2UiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RUF0dHJpYnV0ZSB0cmFuc3BvcnQuZWNvcmUjLy9QaXBlVHJhbnNwb3J0RWRnZUxhYmVsVmFsdWUvbWF4RmxvdyIvPgorICAgICAgPGdlbkZlYXR1cmVzIGNyZWF0ZUNoaWxkPSJmYWxzZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFQXR0cmlidXRlIHRyYW5zcG9ydC5lY29yZSMvL1BpcGVUcmFuc3BvcnRFZGdlTGFiZWxWYWx1ZS90aW1lUGVyaW9kIi8+CisgICAgPC9nZW5DbGFzc2VzPgorICA8L2dlblBhY2thZ2VzPgorPC9nZW5tb2RlbDpHZW5Nb2RlbD4KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS50cmFuc3BvcnQvbm90aWNlLmh0bWwgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udHJhbnNwb3J0L25vdGljZS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM2YWY5NjYKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udHJhbnNwb3J0L25vdGljZS5odG1sCkBAIC0wLDAgKzEsNzkgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAvL0VOIj4KKzxodG1sPgorPGhlYWQ+Cis8bWV0YSBodHRwLWVxdWl2PUNvbnRlbnQtVHlwZSBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9aXNvLTg4NTktMSI+Cis8dGl0bGU+RWNsaXBzZS5vcmcgU29mdHdhcmUgVXNlciBBZ3JlZW1lbnQ8L3RpdGxlPgorPC9oZWFkPgorCis8Ym9keSBsYW5nPSJFTi1VUyIgbGluaz1ibHVlIHZsaW5rPXB1cnBsZT4KKzxoMj5FY2xpcHNlIEZvdW5kYXRpb24gU29mdHdhcmUgVXNlciBBZ3JlZW1lbnQ8L2gyPgorPHA+TWFyY2ggMTcsIDIwMDU8L3A+CisKKzxoMz5Vc2FnZSBPZiBDb250ZW50PC9oMz4KKworPHA+VEhFIEVDTElQU0UgRk9VTkRBVElPTiBNQUtFUyBBVkFJTEFCTEUgU09GVFdBUkUsIERPQ1VNRU5UQVRJT04sIElORk9STUFUSU9OIEFORC9PUiBPVEhFUiBNQVRFUklBTFMgRk9SIE9QRU4gU09VUkNFIFBST0pFQ1RTCisgICAoQ09MTEVDVElWRUxZICZxdW90O0NPTlRFTlQmcXVvdDspLiAgVVNFIE9GIFRIRSBDT05URU5UIElTIEdPVkVSTkVEIEJZIFRIRSBURVJNUyBBTkQgQ09ORElUSU9OUyBPRiBUSElTIEFHUkVFTUVOVCBBTkQvT1IgVEhFIFRFUk1TIEFORAorICAgQ09ORElUSU9OUyBPRiBMSUNFTlNFIEFHUkVFTUVOVFMgT1IgTk9USUNFUyBJTkRJQ0FURUQgT1IgUkVGRVJFTkNFRCBCRUxPVy4gIEJZIFVTSU5HIFRIRSBDT05URU5ULCBZT1UgQUdSRUUgVEhBVCBZT1VSIFVTRQorICAgT0YgVEhFIENPTlRFTlQgSVMgR09WRVJORUQgQlkgVEhJUyBBR1JFRU1FTlQgQU5EL09SIFRIRSBURVJNUyBBTkQgQ09ORElUSU9OUyBPRiBBTlkgQVBQTElDQUJMRSBMSUNFTlNFIEFHUkVFTUVOVFMgT1IKKyAgIE5PVElDRVMgSU5ESUNBVEVEIE9SIFJFRkVSRU5DRUQgQkVMT1cuICBJRiBZT1UgRE8gTk9UIEFHUkVFIFRPIFRIRSBURVJNUyBBTkQgQ09ORElUSU9OUyBPRiBUSElTIEFHUkVFTUVOVCBBTkQgVEhFIFRFUk1TIEFORAorICAgQ09ORElUSU9OUyBPRiBBTlkgQVBQTElDQUJMRSBMSUNFTlNFIEFHUkVFTUVOVFMgT1IgTk9USUNFUyBJTkRJQ0FURUQgT1IgUkVGRVJFTkNFRCBCRUxPVywgVEhFTiBZT1UgTUFZIE5PVCBVU0UgVEhFIENPTlRFTlQuPC9wPgorICAgCis8aDM+QXBwbGljYWJsZSBMaWNlbnNlczwvaDM+ICAgCisgICAKKzxwPlVubGVzcyBvdGhlcndpc2UgaW5kaWNhdGVkLCBhbGwgQ29udGVudCBtYWRlIGF2YWlsYWJsZSBieSB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uIGlzIHByb3ZpZGVkIHRvIHlvdSB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjAKKyAgICgmcXVvdDtFUEwmcXVvdDspLiAgQSBjb3B5IG9mIHRoZSBFUEwgaXMgcHJvdmlkZWQgd2l0aCB0aGlzIENvbnRlbnQgYW5kIGlzIGFsc28gYXZhaWxhYmxlIGF0IDxhIGhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sIj5odHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbDwvYT4uCisgICBGb3IgcHVycG9zZXMgb2YgdGhlIEVQTCwgJnF1b3Q7UHJvZ3JhbSZxdW90OyB3aWxsIG1lYW4gdGhlIENvbnRlbnQuPC9wPgorCis8cD5Db250ZW50IGluY2x1ZGVzLCBidXQgaXMgbm90IGxpbWl0ZWQgdG8sIHNvdXJjZSBjb2RlLCBvYmplY3QgY29kZSwgZG9jdW1lbnRhdGlvbiBhbmQgb3RoZXIgZmlsZXMgbWFpbnRhaW5lZCBpbiB0aGUgRWNsaXBzZS5vcmcgQ1ZTIHJlcG9zaXRvcnkgKCZxdW90O1JlcG9zaXRvcnkmcXVvdDspIGluIENWUworICAgbW9kdWxlcyAoJnF1b3Q7TW9kdWxlcyZxdW90OykgYW5kIG1hZGUgYXZhaWxhYmxlIGFzIGRvd25sb2FkYWJsZSBhcmNoaXZlcyAoJnF1b3Q7RG93bmxvYWRzJnF1b3Q7KS48L3A+CisgICAKKzx1bD4KKwk8bGk+Q29udGVudCBtYXkgYmUgc3RydWN0dXJlZCBhbmQgcGFja2FnZWQgaW50byBtb2R1bGVzIHRvIGZhY2lsaXRhdGUgZGVsaXZlcmluZywgZXh0ZW5kaW5nLCBhbmQgdXBncmFkaW5nIHRoZSBDb250ZW50LiAgVHlwaWNhbCBtb2R1bGVzIG1heSBpbmNsdWRlIHBsdWctaW5zICgmcXVvdDtQbHVnLWlucyZxdW90OyksIHBsdWctaW4gZnJhZ21lbnRzICgmcXVvdDtGcmFnbWVudHMmcXVvdDspLCBhbmQgZmVhdHVyZXMgKCZxdW90O0ZlYXR1cmVzJnF1b3Q7KS48L2xpPgorCTxsaT5FYWNoIFBsdWctaW4gb3IgRnJhZ21lbnQgbWF5IGJlIHBhY2thZ2VkIGFzIGEgc3ViLWRpcmVjdG9yeSBvciBKQVIgKEphdmEmdHJhZGU7IEFSY2hpdmUpIGluIGEgZGlyZWN0b3J5IG5hbWVkICZxdW90O3BsdWdpbnMmcXVvdDsuPC9saT4KKwk8bGk+QSBGZWF0dXJlIGlzIGEgYnVuZGxlIG9mIG9uZSBvciBtb3JlIFBsdWctaW5zIGFuZC9vciBGcmFnbWVudHMgYW5kIGFzc29jaWF0ZWQgbWF0ZXJpYWwuICBFYWNoIEZlYXR1cmUgbWF5IGJlIHBhY2thZ2VkIGFzIGEgc3ViLWRpcmVjdG9yeSBpbiBhIGRpcmVjdG9yeSBuYW1lZCAmcXVvdDtmZWF0dXJlcyZxdW90Oy4gIFdpdGhpbiBhIEZlYXR1cmUsIGZpbGVzIG5hbWVkICZxdW90O2ZlYXR1cmUueG1sJnF1b3Q7IG1heSBjb250YWluIGEgbGlzdCBvZiB0aGUgbmFtZXMgYW5kIHZlcnNpb24gbnVtYmVycyBvZiB0aGUgUGx1Zy1pbnMKKyAgICAgIGFuZC9vciBGcmFnbWVudHMgYXNzb2NpYXRlZCB3aXRoIHRoYXQgRmVhdHVyZS48L2xpPgorCTxsaT5GZWF0dXJlcyBtYXkgYWxzbyBpbmNsdWRlIG90aGVyIEZlYXR1cmVzICgmcXVvdDtJbmNsdWRlZCBGZWF0dXJlcyZxdW90OykuIFdpdGhpbiBhIEZlYXR1cmUsIGZpbGVzIG5hbWVkICZxdW90O2ZlYXR1cmUueG1sJnF1b3Q7IG1heSBjb250YWluIGEgbGlzdCBvZiB0aGUgbmFtZXMgYW5kIHZlcnNpb24gbnVtYmVycyBvZiBJbmNsdWRlZCBGZWF0dXJlcy48L2xpPgorPC91bD4gICAKKyAKKzxwPlRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBnb3Zlcm5pbmcgUGx1Zy1pbnMgYW5kIEZyYWdtZW50cyBzaG91bGQgYmUgY29udGFpbmVkIGluIGZpbGVzIG5hbWVkICZxdW90O2Fib3V0Lmh0bWwmcXVvdDsgKCZxdW90O0Fib3V0cyZxdW90OykuIFRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBnb3Zlcm5pbmcgRmVhdHVyZXMgYW5kCitJbmNsdWRlZCBGZWF0dXJlcyBzaG91bGQgYmUgY29udGFpbmVkIGluIGZpbGVzIG5hbWVkICZxdW90O2xpY2Vuc2UuaHRtbCZxdW90OyAoJnF1b3Q7RmVhdHVyZSBMaWNlbnNlcyZxdW90OykuICBBYm91dHMgYW5kIEZlYXR1cmUgTGljZW5zZXMgbWF5IGJlIGxvY2F0ZWQgaW4gYW55IGRpcmVjdG9yeSBvZiBhIERvd25sb2FkIG9yIE1vZHVsZQoraW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG8gdGhlIGZvbGxvd2luZyBsb2NhdGlvbnM6PC9wPgorCis8dWw+CisJPGxpPlRoZSB0b3AtbGV2ZWwgKHJvb3QpIGRpcmVjdG9yeTwvbGk+CisJPGxpPlBsdWctaW4gYW5kIEZyYWdtZW50IGRpcmVjdG9yaWVzPC9saT4KKwk8bGk+SW5zaWRlIFBsdWctaW5zIGFuZCBGcmFnbWVudHMgcGFja2FnZWQgYXMgSkFSczwvbGk+CisJPGxpPlN1Yi1kaXJlY3RvcmllcyBvZiB0aGUgZGlyZWN0b3J5IG5hbWVkICZxdW90O3NyYyZxdW90OyBvZiBjZXJ0YWluIFBsdWctaW5zPC9saT4KKwk8bGk+RmVhdHVyZSBkaXJlY3RvcmllczwvbGk+Cis8L3VsPgorCQkKKzxwPk5vdGU6IGlmIGEgRmVhdHVyZSBtYWRlIGF2YWlsYWJsZSBieSB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uIGlzIGluc3RhbGxlZCB1c2luZyB0aGUgRWNsaXBzZSBVcGRhdGUgTWFuYWdlciwgeW91IG11c3QgYWdyZWUgdG8gYSBsaWNlbnNlICgmcXVvdDtGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlJnF1b3Q7KSBkdXJpbmcgdGhlCitpbnN0YWxsYXRpb24gcHJvY2Vzcy4gIElmIHRoZSBGZWF0dXJlIGNvbnRhaW5zIEluY2x1ZGVkIEZlYXR1cmVzLCB0aGUgRmVhdHVyZSBVcGRhdGUgTGljZW5zZSBzaG91bGQgZWl0aGVyIHByb3ZpZGUgeW91IHdpdGggdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIGdvdmVybmluZyB0aGUgSW5jbHVkZWQgRmVhdHVyZXMgb3IKK2luZm9ybSB5b3Ugd2hlcmUgeW91IGNhbiBsb2NhdGUgdGhlbS4gIEZlYXR1cmUgVXBkYXRlIExpY2Vuc2VzIG1heSBiZSBmb3VuZCBpbiB0aGUgJnF1b3Q7bGljZW5zZSZxdW90OyBwcm9wZXJ0eSBvZiBmaWxlcyBuYW1lZCAmcXVvdDtmZWF0dXJlLnByb3BlcnRpZXMmcXVvdDsgZm91bmQgd2l0aGluIGEgRmVhdHVyZS4KK1N1Y2ggQWJvdXRzLCBGZWF0dXJlIExpY2Vuc2VzLCBhbmQgRmVhdHVyZSBVcGRhdGUgTGljZW5zZXMgY29udGFpbiB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgKG9yIHJlZmVyZW5jZXMgdG8gc3VjaCB0ZXJtcyBhbmQgY29uZGl0aW9ucykgdGhhdCBnb3Zlcm4geW91ciB1c2Ugb2YgdGhlIGFzc29jaWF0ZWQgQ29udGVudCBpbgordGhhdCBkaXJlY3RvcnkuPC9wPgorCis8cD5USEUgQUJPVVRTLCBGRUFUVVJFIExJQ0VOU0VTLCBBTkQgRkVBVFVSRSBVUERBVEUgTElDRU5TRVMgTUFZIFJFRkVSIFRPIFRIRSBFUEwgT1IgT1RIRVIgTElDRU5TRSBBR1JFRU1FTlRTLCBOT1RJQ0VTIE9SIFRFUk1TIEFORCBDT05ESVRJT05TLiAgU09NRSBPRiBUSEVTRQorT1RIRVIgTElDRU5TRSBBR1JFRU1FTlRTIE1BWSBJTkNMVURFIChCVVQgQVJFIE5PVCBMSU1JVEVEIFRPKTo8L3A+CisKKzx1bD4KKwk8bGk+Q29tbW9uIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4wIChhdmFpbGFibGUgYXQgPGEgaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9jcGwtdjEwLmh0bWwiPmh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvY3BsLXYxMC5odG1sPC9hPik8L2xpPgorCTxsaT5BcGFjaGUgU29mdHdhcmUgTGljZW5zZSAxLjEgKGF2YWlsYWJsZSBhdCA8YSBocmVmPSJodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRSI+aHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0U8L2E+KTwvbGk+CisJPGxpPkFwYWNoZSBTb2Z0d2FyZSBMaWNlbnNlIDIuMCAoYXZhaWxhYmxlIGF0IDxhIGhyZWY9Imh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMCI+aHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wPC9hPik8L2xpPgorCTxsaT5JQk0gUHVibGljIExpY2Vuc2UgMS4wIChhdmFpbGFibGUgYXQgPGEgaHJlZj0iaHR0cDovL29zcy5zb2Z0d2FyZS5pYm0uY29tL2RldmVsb3BlcndvcmtzL29wZW5zb3VyY2UvbGljZW5zZTEwLmh0bWwiPmh0dHA6Ly9vc3Muc29mdHdhcmUuaWJtLmNvbS9kZXZlbG9wZXJ3b3Jrcy9vcGVuc291cmNlL2xpY2Vuc2UxMC5odG1sPC9hPik8L2xpPgkKKwk8bGk+TWV0cm8gTGluayBQdWJsaWMgTGljZW5zZSAxLjAwIChhdmFpbGFibGUgYXQgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuZ3JvdXAub3JnL29wZW5tb3RpZi9zdXBwb3J0ZXJzL21ldHJvbGluay9saWNlbnNlLmh0bWwiPmh0dHA6Ly93d3cub3Blbmdyb3VwLm9yZy9vcGVubW90aWYvc3VwcG9ydGVycy9tZXRyb2xpbmsvbGljZW5zZS5odG1sPC9hPik8L2xpPgorCTxsaT5Nb3ppbGxhIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4xIChhdmFpbGFibGUgYXQgPGEgaHJlZj0iaHR0cDovL3d3dy5tb3ppbGxhLm9yZy9NUEwvTVBMLTEuMS5odG1sIj5odHRwOi8vd3d3Lm1vemlsbGEub3JnL01QTC9NUEwtMS4xLmh0bWw8L2E+KTwvbGk+Cis8L3VsPgorCis8cD5JVCBJUyBZT1VSIE9CTElHQVRJT04gVE8gUkVBRCBBTkQgQUNDRVBUIEFMTCBTVUNIIFRFUk1TIEFORCBDT05ESVRJT05TIFBSSU9SIFRPIFVTRSBPRiBUSEUgQ09OVEVOVC4gIElmIG5vIEFib3V0LCBGZWF0dXJlIExpY2Vuc2UsIG9yIEZlYXR1cmUgVXBkYXRlIExpY2Vuc2UgaXMgcHJvdmlkZWQsIHBsZWFzZQorY29udGFjdCB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uIHRvIGRldGVybWluZSB3aGF0IHRlcm1zIGFuZCBjb25kaXRpb25zIGdvdmVybiB0aGF0IHBhcnRpY3VsYXIgQ29udGVudC48L3A+CisKKzxoMz5DcnlwdG9ncmFwaHk8L2gzPgorCis8cD5Db250ZW50IG1heSBjb250YWluIGVuY3J5cHRpb24gc29mdHdhcmUuIFRoZSBjb3VudHJ5IGluIHdoaWNoIHlvdSBhcmUgY3VycmVudGx5IG1heSBoYXZlIHJlc3RyaWN0aW9ucyBvbiB0aGUgaW1wb3J0LCBwb3NzZXNzaW9uLCBhbmQgdXNlLCBhbmQvb3IgcmUtZXhwb3J0IHRvCisgICBhbm90aGVyIGNvdW50cnksIG9mIGVuY3J5cHRpb24gc29mdHdhcmUuIEJFRk9SRSB1c2luZyBhbnkgZW5jcnlwdGlvbiBzb2Z0d2FyZSwgcGxlYXNlIGNoZWNrIHRoZSBjb3VudHJ5J3MgbGF3cywgcmVndWxhdGlvbnMgYW5kIHBvbGljaWVzIGNvbmNlcm5pbmcgdGhlIGltcG9ydCwKKyAgIHBvc3Nlc3Npb24sIG9yIHVzZSwgYW5kIHJlLWV4cG9ydCBvZiBlbmNyeXB0aW9uIHNvZnR3YXJlLCB0byBzZWUgaWYgdGhpcyBpcyBwZXJtaXR0ZWQuPC9wPgorICAgCis8c21hbGw+SmF2YSBhbmQgYWxsIEphdmEtYmFzZWQgdHJhZGVtYXJrcyBhcmUgdHJhZGVtYXJrcyBvZiBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuIGluIHRoZSBVbml0ZWQgU3RhdGVzLCBvdGhlciBjb3VudHJpZXMsIG9yIGJvdGguPC9zbWFsbD4gICAKKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS50cmFuc3BvcnQvcGx1Z2luLnByb3BlcnRpZXMgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udHJhbnNwb3J0L3BsdWdpbi5wcm9wZXJ0aWVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZhY2YxMjMKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udHJhbnNwb3J0L3BsdWdpbi5wcm9wZXJ0aWVzCkBAIC0wLDAgKzEsNDYgQEAKKyMvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIyAqIENvcHlyaWdodCAoYykgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyMgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisjICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisjICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyMgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorIyAqCisjICogQ29udHJpYnV0b3JzOgorIyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisjIFRvIGNvZGUgZGV2ZWxvcGVyOgorIyAgIERvIE5PVCBjaGFuZ2UgdGhlIHByb3BlcnRpZXMgYmV0d2VlbiB0aGlzIGxpbmUgYW5kIHRoZQorIyAgICIlJSUgRU5EIE9GIFRSQU5TTEFURUQgUFJPUEVSVElFUyAlJSUiIGxpbmUuCisjICAgTWFrZSBhIG5ldyBwcm9wZXJ0eSBuYW1lLCBhcHBlbmQgdG8gdGhlIGVuZCBvZiB0aGUgZmlsZSBhbmQgY2hhbmdlCisjICAgdGhlIGNvZGUgdG8gdXNlIHRoZSBuZXcgcHJvcGVydHkuCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyMgJSUlIEVORCBPRiBUUkFOU0xBVEVEIFBST1BFUlRJRVMgJSUlCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK3BsdWdpbk5hbWUgPSBTVEVNIFRyYW5zcG9ydCBNb2RlbCBUZXN0cworcHJvdmlkZXJOYW1lID0gRWNsaXBzZS5vcmcKK19VSV9DcmVhdGVDaGlsZF90ZXh0ID0gezB9CitfVUlfQ3JlYXRlQ2hpbGRfdGV4dDIgPSB7MX0gezB9CitfVUlfQ3JlYXRlQ2hpbGRfdGV4dDMgPSB7MX0KK19VSV9DcmVhdGVDaGlsZF90b29sdGlwID0gQ3JlYXRlIE5ldyB7MH0gVW5kZXIgezF9IEZlYXR1cmUKK19VSV9DcmVhdGVDaGlsZF9kZXNjcmlwdGlvbiA9IENyZWF0ZSBhIG5ldyBjaGlsZCBvZiB0eXBlIHswfSBmb3IgdGhlIHsxfSBmZWF0dXJlIG9mIHRoZSBzZWxlY3RlZCB7Mn0uCitfVUlfQ3JlYXRlU2libGluZ19kZXNjcmlwdGlvbiA9IENyZWF0ZSBhIG5ldyBzaWJsaW5nIG9mIHR5cGUgezB9IGZvciB0aGUgc2VsZWN0ZWQgezJ9LCB1bmRlciB0aGUgezF9IGZlYXR1cmUgb2YgdGhlaXIgcGFyZW50LgorX1VJX1Byb3BlcnR5RGVzY3JpcHRvcl9kZXNjcmlwdGlvbiA9IFRoZSB7MH0gb2YgdGhlIHsxfQorX1VJX1BpcGVTdHlsZVRyYW5zcG9ydFN5c3RlbV90eXBlID0gUGlwZSBTdHlsZSBUcmFuc3BvcnQgU3lzdGVtCitfVUlfVHJhbnNwb3J0U3lzdGVtX3R5cGUgPSBTeXN0ZW0KK19VSV9QaXBlVHJhbnNwb3J0RWRnZV90eXBlID0gUGlwZSBUcmFuc3BvcnQgRWRnZQorX1VJX1BpcGVUcmFuc3BvcnRFZGdlTGFiZWxfdHlwZSA9IFBpcGUgVHJhbnNwb3J0IEVkZ2UgTGFiZWwKK19VSV9QaXBlVHJhbnNwb3J0RWRnZUxhYmVsVmFsdWVfdHlwZSA9IFBpcGUgVHJhbnNwb3J0IEVkZ2UgTGFiZWwgVmFsdWUKK19VSV9Vbmtub3duX3R5cGUgPSBPYmplY3QKK19VSV9Vbmtub3duX2RhdGF0eXBlPSBWYWx1ZQorX1VJX1BpcGVTdHlsZVRyYW5zcG9ydFN5c3RlbV9pblRyYW5zcG9ydEVkZ2VzX2ZlYXR1cmUgPSBJbiBUcmFuc3BvcnQgRWRnZXMKK19VSV9QaXBlU3R5bGVUcmFuc3BvcnRTeXN0ZW1fb3V0VHJhbnNwb3J0RWRnZXNfZmVhdHVyZSA9IE91dCBUcmFuc3BvcnQgRWRnZXMKK19VSV9QaXBlU3R5bGVUcmFuc3BvcnRTeXN0ZW1fbWF4Q2FwYWNpdHlfZmVhdHVyZSA9IE1heCBDYXBhY2l0eQorX1VJX1BpcGVUcmFuc3BvcnRFZGdlTGFiZWxWYWx1ZV9tYXhGbG93X2ZlYXR1cmUgPSBNYXggRmxvdworX1VJX1BpcGVUcmFuc3BvcnRFZGdlTGFiZWxWYWx1ZV90aW1lUGVyaW9kX2ZlYXR1cmUgPSBUaW1lIFBlcmlvZAorX1VJX1Vua25vd25fZmVhdHVyZSA9IFVuc3BlY2lmaWVkCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udHJhbnNwb3J0L3BsdWdpbi54bWwgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udHJhbnNwb3J0L3BsdWdpbi54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzgxOTU3YgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS50cmFuc3BvcnQvcGx1Z2luLnhtbApAQCAtMCwwICsxLDMyIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPD9lY2xpcHNlIHZlcnNpb249IjMuMCI/PgorCis8IS0tCisgPGNvcHlyaWdodD4KKyA8L2NvcHlyaWdodD4KKworICRJZCQKKy0tPgorCis8cGx1Z2luPgorCisgIDxleHRlbnNpb24gcG9pbnQ9Im9yZy5lY2xpcHNlLmVtZi5lY29yZS5nZW5lcmF0ZWRfcGFja2FnZSI+CisgICAgPHBhY2thZ2UgCisgICAgICAgdXJpID0gImh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy90cmFuc3BvcnQuZWNvcmUiIAorICAgICAgIGNsYXNzID0gIm9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMudHJhbnNwb3J0LlRyYW5zcG9ydFBhY2thZ2UiCisgICAgICAgZ2VuTW9kZWwgPSAibW9kZWwvdHJhbnNwb3J0Lmdlbm1vZGVsIiAvPiAKKyAgPC9leHRlbnNpb24+CisKKzxleHRlbnNpb24gcG9pbnQ9Im9yZy5lY2xpcHNlLmVtZi5lZGl0Lml0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3JpZXMiPgorICAgIDxmYWN0b3J5IAorICAgICAgIHVyaSA9ICJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvdHJhbnNwb3J0LmVjb3JlIiAKKyAgICAgICBjbGFzcyA9ICJvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLnRyYW5zcG9ydC5wcm92aWRlci5UcmFuc3BvcnRJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSIgCisgICAgICAgc3VwcG9ydGVkVHlwZXMgPSAKKyAgICAgICAgICJvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JRWRpdGluZ0RvbWFpbkl0ZW1Qcm92aWRlcgorICAgICAgICAgIG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklTdHJ1Y3R1cmVkSXRlbUNvbnRlbnRQcm92aWRlcgorICAgICAgICAgIG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklUcmVlSXRlbUNvbnRlbnRQcm92aWRlcgorICAgICAgICAgIG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtTGFiZWxQcm92aWRlcgorICAgICAgICAgIG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtUHJvcGVydHlTb3VyY2UiIC8+CisgIDwvZXh0ZW5zaW9uPgorICAKKzwvcGx1Z2luPgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnRyYW5zcG9ydC9wbHVnaW5fZGUucHJvcGVydGllcyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS50cmFuc3BvcnQvcGx1Z2luX2RlLnByb3BlcnRpZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDdlMGY2NwotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS50cmFuc3BvcnQvcGx1Z2luX2RlLnByb3BlcnRpZXMKQEAgLTAsMCArMSw0NiBAQAorIy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjICogQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorIyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyMgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyMgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorIyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisjICoKKyMgKiBDb250cmlidXRvcnM6CisjICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorIyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyMgVG8gY29kZSBkZXZlbG9wZXI6CisjICAgRG8gTk9UIGNoYW5nZSB0aGUgcHJvcGVydGllcyBiZXR3ZWVuIHRoaXMgbGluZSBhbmQgdGhlCisjICAgIiUlJSBFTkQgT0YgVFJBTlNMQVRFRCBQUk9QRVJUSUVTICUlJSIgbGluZS4KKyMgICBNYWtlIGEgbmV3IHByb3BlcnR5IG5hbWUsIGFwcGVuZCB0byB0aGUgZW5kIG9mIHRoZSBmaWxlIGFuZCBjaGFuZ2UKKyMgICB0aGUgY29kZSB0byB1c2UgdGhlIG5ldyBwcm9wZXJ0eS4KKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorIyAlJSUgRU5EIE9GIFRSQU5TTEFURUQgUFJPUEVSVElFUyAlJSUKKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworcGx1Z2luTmFtZT1TVEVNIFRyYW5zcG9ydG1vZGVsbC1UZXN0cworcHJvdmlkZXJOYW1lPUVjbGlwc2Uub3JnCitfVUlfQ3JlYXRlQ2hpbGRfdGV4dD17MH0KK19VSV9DcmVhdGVDaGlsZF90ZXh0Mj17MX0gezB9CitfVUlfQ3JlYXRlQ2hpbGRfdGV4dDM9ezF9CitfVUlfQ3JlYXRlQ2hpbGRfdG9vbHRpcD1OZXVlcyB7MH0gdW50ZXIgezF9IEZlYXR1cmUgZXJzdGVsbGVuCitfVUlfQ3JlYXRlQ2hpbGRfZGVzY3JpcHRpb249TmV1ZXMgS2luZCB2b20gVHlwIHswfSBmXHUwMGZjciBkYXMgezF9IE1lcmttYWwgZGVyIGF1c2dld1x1MDBlNGhsdGVuIHsyfSBlcnN0ZWxsZW4KK19VSV9DcmVhdGVTaWJsaW5nX2Rlc2NyaXB0aW9uPU5ldWVzIEdlc2Nod2lzdGVydGVpbCB2b20gVHlwIHswfSBmXHUwMGZjciBkZW4gYXVzZ2V3XHUwMGU0aGx0ZW4gezJ9IHVudGVyIGRlbSB7MX0gTWVya21hbCBkZXMgRWx0ZXJudGVpbCBlcnN0ZWxsZW4KK19VSV9Qcm9wZXJ0eURlc2NyaXB0b3JfZGVzY3JpcHRpb249ezB9IHZvbiB7MX0KK19VSV9QaXBlU3R5bGVUcmFuc3BvcnRTeXN0ZW1fdHlwZT1SXHUwMGY2aHJlbmFydGlnZXMgVHJhbnNwb3J0c3lzdGVtCitfVUlfVHJhbnNwb3J0U3lzdGVtX3R5cGU9U3lzdGVtCitfVUlfUGlwZVRyYW5zcG9ydEVkZ2VfdHlwZT1SXHUwMGY2aHJlbi1UcmFuc3BvcnRrYW50ZQorX1VJX1BpcGVUcmFuc3BvcnRFZGdlTGFiZWxfdHlwZT1SXHUwMGY2aHJlbi1UcmFuc3BvcnRrYW50ZW5sYWJlbAorX1VJX1BpcGVUcmFuc3BvcnRFZGdlTGFiZWxWYWx1ZV90eXBlPVJcdTAwZjZocmVuLVRyYW5zcG9ydGthbnRlbmxhYmVsd2VydAorX1VJX1Vua25vd25fdHlwZT1PYmpla3QKK19VSV9Vbmtub3duX2RhdGF0eXBlPVdlcnQKK19VSV9QaXBlU3R5bGVUcmFuc3BvcnRTeXN0ZW1faW5UcmFuc3BvcnRFZGdlc19mZWF0dXJlPUluIFZlcmtlaHJza2FudGVuCitfVUlfUGlwZVN0eWxlVHJhbnNwb3J0U3lzdGVtX291dFRyYW5zcG9ydEVkZ2VzX2ZlYXR1cmU9QXVzZ2VoZW5kZXItVmVya2Voci1LYW50ZW4KK19VSV9QaXBlU3R5bGVUcmFuc3BvcnRTeXN0ZW1fbWF4Q2FwYWNpdHlfZmVhdHVyZT1NYXguIEthcGF6aXRcdTAwZTR0CitfVUlfUGlwZVRyYW5zcG9ydEVkZ2VMYWJlbFZhbHVlX21heEZsb3dfZmVhdHVyZT1NYXggRmx1c3MKK19VSV9QaXBlVHJhbnNwb3J0RWRnZUxhYmVsVmFsdWVfdGltZVBlcmlvZF9mZWF0dXJlPVplaXRyYXVtCitfVUlfVW5rbm93bl9mZWF0dXJlPU5pY2h0IHNwZXppZml6aWVydApkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnRyYW5zcG9ydC9wbHVnaW5fa3IucHJvcGVydGllcyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS50cmFuc3BvcnQvcGx1Z2luX2tyLnByb3BlcnRpZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTRmOTNkNgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS50cmFuc3BvcnQvcGx1Z2luX2tyLnByb3BlcnRpZXMKQEAgLTAsMCArMSw0NiBAQAorIy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjICogQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorIyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyMgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyMgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorIyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisjICoKKyMgKiBDb250cmlidXRvcnM6CisjICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorIyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyMgVG8gY29kZSBkZXZlbG9wZXI6CisjICAgRG8gTk9UIGNoYW5nZSB0aGUgcHJvcGVydGllcyBiZXR3ZWVuIHRoaXMgbGluZSBhbmQgdGhlCisjICAgIiUlJSBFTkQgT0YgVFJBTlNMQVRFRCBQUk9QRVJUSUVTICUlJSIgbGluZS4KKyMgICBNYWtlIGEgbmV3IHByb3BlcnR5IG5hbWUsIGFwcGVuZCB0byB0aGUgZW5kIG9mIHRoZSBmaWxlIGFuZCBjaGFuZ2UKKyMgICB0aGUgY29kZSB0byB1c2UgdGhlIG5ldyBwcm9wZXJ0eS4KKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorIyAlJSUgRU5EIE9GIFRSQU5TTEFURUQgUFJPUEVSVElFUyAlJSUKKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworcGx1Z2luTmFtZT1TVEVNIFx1YzgwNFx1YzFhMSBcdWJhYThcdWIzNzggXHVjMmRjXHVkNWQ4Citwcm92aWRlck5hbWU9RWNsaXBzZS5vcmcKK19VSV9DcmVhdGVDaGlsZF90ZXh0PXswfQorX1VJX0NyZWF0ZUNoaWxkX3RleHQyPXsxfSB7MH0KK19VSV9DcmVhdGVDaGlsZF90ZXh0Mz17MX0KK19VSV9DcmVhdGVDaGlsZF90b29sdGlwPXsxfSBcdWFlMzBcdWIyYTUgXHVkNTU4XHVjNWQwIFx1YzBjOCB7MH0gXHViOWNjXHViNGU0XHVhZTMwCitfVUlfQ3JlYXRlQ2hpbGRfZGVzY3JpcHRpb249XHVjMTIwXHVkMGRkXHVkNTVjIHsyfVx1Yzc1OCB7MX0gXHVhZTMwXHViMmE1XHVjNWQwIFx1YjMwMFx1ZDU1YyBcdWQ2MTVcdWMyZGQgezB9XHVjNzU4IFx1YzBjOFx1Yjg1Y1x1YzZiNCBDaGlsZFx1Yjk3YyBcdWI5Y2NcdWI0ZWRcdWIyYzhcdWIyZTQuCitfVUlfQ3JlYXRlU2libGluZ19kZXNjcmlwdGlvbj1cdWJkODBcdWJhYThcdWM3NTggXHVjMTIwXHVkMGRkXHViNDFjIHsyfVx1YzVkMFx1YzExYyB7MX0gXHVhZTMwXHViMmE1XHVjNWQwIFx1YjMwMFx1ZDU1YyBcdWQ2MTVcdWMyZGQgezB9XHVjNzU4IFx1YzBjOFx1Yjg1Y1x1YzZiNCBcdWQ2MTVcdWM4MWNcdWI5N2MgXHViOWNjXHViNGVkXHViMmM4XHViMmU0LgorX1VJX1Byb3BlcnR5RGVzY3JpcHRvcl9kZXNjcmlwdGlvbj17MX0gXHVjOTExIHswfQorX1VJX1BpcGVTdHlsZVRyYW5zcG9ydFN5c3RlbV90eXBlPVx1ZDMwY1x1Yzc3NFx1ZDUwNCBcdWJjMjlcdWMyZGQgXHVjNmI0XHVjMWExIFx1YzJkY1NURU0KK19VSV9UcmFuc3BvcnRTeXN0ZW1fdHlwZT1cdWMyZGNcdWMyYTRcdWQxNWMKK19VSV9QaXBlVHJhbnNwb3J0RWRnZV90eXBlPVx1ZDMwY1x1Yzc3NFx1ZDUwNCBcdWM2YjRcdWMxYTEgXHVhYzAwXHVjN2E1XHVjNzkwXHViOWFjCitfVUlfUGlwZVRyYW5zcG9ydEVkZ2VMYWJlbF90eXBlPVx1ZDMwY1x1Yzc3NFx1ZDUwNCBcdWM4MDRcdWMxYTEgXHVhYzAwXHVjN2E1XHVjNzkwXHViOWFjIFx1Yjc3Y1x1YmNhOAorX1VJX1BpcGVUcmFuc3BvcnRFZGdlTGFiZWxWYWx1ZV90eXBlPVx1ZDMwY1x1Yzc3NFx1ZDUwNCBcdWM4MDRcdWMxYTEgXHVhYzAwXHVjN2E1XHVjNzkwXHViOWFjIFx1Yjc3Y1x1YmNhOCBcdWFjMTIKK19VSV9Vbmtub3duX3R5cGU9XHVhYzFjXHVjY2I0CitfVUlfVW5rbm93bl9kYXRhdHlwZT1cdWFjMTIKK19VSV9QaXBlU3R5bGVUcmFuc3BvcnRTeXN0ZW1faW5UcmFuc3BvcnRFZGdlc19mZWF0dXJlPVx1ZDJiOFx1Yjc5Y1x1YzJhNCBcdWFjMDBcdWM3YTVcdWM3OTBcdWI5YWNcdWM1ZDBcdWMxMWMKK19VSV9QaXBlU3R5bGVUcmFuc3BvcnRTeXN0ZW1fb3V0VHJhbnNwb3J0RWRnZXNfZmVhdHVyZT1cdWQyYjhcdWI3OWNcdWMyYTQgXHVjNWUzXHVjOWMwXHVjMmE0IFx1YzU0NFx1YzZjMworX1VJX1BpcGVTdHlsZVRyYW5zcG9ydFN5c3RlbV9tYXhDYXBhY2l0eV9mZWF0dXJlPVx1Y2Q1Y1x1YjMwMCBcdWM2YTlcdWI3YzkKK19VSV9QaXBlVHJhbnNwb3J0RWRnZUxhYmVsVmFsdWVfbWF4Rmxvd19mZWF0dXJlPVx1Y2Q1Y1x1YjMwMCBcdWQ3NTBcdWI5ODQKK19VSV9QaXBlVHJhbnNwb3J0RWRnZUxhYmVsVmFsdWVfdGltZVBlcmlvZF9mZWF0dXJlPVx1YWUzMFx1YWMwNAorX1VJX1Vua25vd25fZmVhdHVyZT1cdWM5YzBcdWM4MTVcdWI0MThcdWM5YzAgXHVjNTRhXHVjNzRjCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udHJhbnNwb3J0L3BsdWdpbl96aC5wcm9wZXJ0aWVzIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnRyYW5zcG9ydC9wbHVnaW5femgucHJvcGVydGllcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYzk3ZmMwCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnRyYW5zcG9ydC9wbHVnaW5femgucHJvcGVydGllcwpAQCAtMCwwICsxLDI2IEBACisjLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyMgKiBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisjICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworIyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorIyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisjICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyMgKgorIyAqIENvbnRyaWJ1dG9yczoKKyMgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisjICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorIyBUbyBjb2RlIGRldmVsb3BlcjoKKyMgICBEbyBOT1QgY2hhbmdlIHRoZSBwcm9wZXJ0aWVzIGJldHdlZW4gdGhpcyBsaW5lIGFuZCB0aGUKKyMgICAiJSUlIEVORCBPRiBUUkFOU0xBVEVEIFBST1BFUlRJRVMgJSUlIiBsaW5lLgorIyAgIE1ha2UgYSBuZXcgcHJvcGVydHkgbmFtZSwgYXBwZW5kIHRvIHRoZSBlbmQgb2YgdGhlIGZpbGUgYW5kIGNoYW5nZQorIyAgIHRoZSBjb2RlIHRvIHVzZSB0aGUgbmV3IHByb3BlcnR5LgorIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisjICUlJSBFTkQgT0YgVFJBTlNMQVRFRCBQUk9QRVJUSUVTICUlJQorIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitwbHVnaW5OYW1lPVNURU1cdThmZDBcdThmOTNcdTZhMjFcdTU3OGJcdThiZDVcdTlhOGMKK3Byb3ZpZGVyTmFtZT1FY2xpcHNlLm9yZwpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnRyYW5zcG9ydC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy90cmFuc3BvcnQvUGlwZVN0eWxlVHJhbnNwb3J0U3lzdGVtLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udHJhbnNwb3J0L3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL3RyYW5zcG9ydC9QaXBlU3R5bGVUcmFuc3BvcnRTeXN0ZW0uamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYmVhYzU3Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnRyYW5zcG9ydC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy90cmFuc3BvcnQvUGlwZVN0eWxlVHJhbnNwb3J0U3lzdGVtLmphdmEKQEAgLTAsMCArMSw5NSBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLnRyYW5zcG9ydDsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuRUxpc3Q7CisKKy8qKgorICogQSBwaXBlIHN0eWxlIHRyYW5zcG9ydCBzeXN0ZW0gaXMgbXVjaCBsaWtlIGEgZ2VvZ3JhcGhpY2FsIHJlZ2lvbi4gRGlzZWFzZQorICogcHJvY2Vzc2VzIHdvcmsgd2l0aGluIHRoZSBzeXN0ZW0gYmFzZWQgb24gaXRzIG9uIHBvcHVsYXRpb24gZGVuc2l0eSwgZXRjLiBJdAorICogaXMgY29ubmVjdGVkIHRvIHRoZSBnZW9ncmFwaGljYWwgYXJlYXMgaXQgbGlua3MgYnkgYSBzZXJpZXMgb2YgYm90aCBpbgorICogbWlncmF0aW9uIGFuZCBvdXQgbWlncmF0aW9uIGVkZ2VzLiBUaGUgc3VtIG9mIHRoZSByYXRlcyBvZiBvdXQgbWlncmF0aW9uIG9uCisgKiB0aGUgb3V0IG1pZ3JhdGlvbiBlZGdlcyBzaG91bGQgc29tZSB0byB0aGUgYXZlcmFnZSB0aW1lIHRoYXQgYW4gaW5kaXZpZHVhbAorICogc3BlbmRzIHdpdGhpbiB0aGUgdHJhbnNwb3J0IHN5c3RlbS4KKyAqIAorICogQGF1dGhvciBqbGVzc2xlcgorICogCisgKiBAbW9kZWwKKyAqIAorICovCitwdWJsaWMgaW50ZXJmYWNlIFBpcGVTdHlsZVRyYW5zcG9ydFN5c3RlbSBleHRlbmRzIFRyYW5zcG9ydFN5c3RlbSB7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5JbiBUcmFuc3BvcnQgRWRnZXM8L2I+PC9lbT4nIHJlZmVyZW5jZSBsaXN0LgorCSAqIFRoZSBsaXN0IGNvbnRlbnRzIGFyZSBvZiB0eXBlIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLnRyYW5zcG9ydC5QaXBlVHJhbnNwb3J0RWRnZX0uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8cD4KKwkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5JbiBUcmFuc3BvcnQgRWRnZXM8L2VtPicgcmVmZXJlbmNlIGxpc3QgaXNuJ3QgY2xlYXIsCisJICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLgorCSAqIDwvcD4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5JbiBUcmFuc3BvcnQgRWRnZXM8L2VtPicgcmVmZXJlbmNlIGxpc3QuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLnRyYW5zcG9ydC5UcmFuc3BvcnRQYWNrYWdlI2dldFBpcGVTdHlsZVRyYW5zcG9ydFN5c3RlbV9JblRyYW5zcG9ydEVkZ2VzKCkKKwkgKiBAbW9kZWwKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUxpc3Q8UGlwZVRyYW5zcG9ydEVkZ2U+IGdldEluVHJhbnNwb3J0RWRnZXMoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPk91dCBUcmFuc3BvcnQgRWRnZXM8L2I+PC9lbT4nIHJlZmVyZW5jZSBsaXN0LgorCSAqIFRoZSBsaXN0IGNvbnRlbnRzIGFyZSBvZiB0eXBlIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLnRyYW5zcG9ydC5QaXBlVHJhbnNwb3J0RWRnZX0uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8cD4KKwkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5PdXQgVHJhbnNwb3J0IEVkZ2VzPC9lbT4nIHJlZmVyZW5jZSBsaXN0IGlzbid0IGNsZWFyLAorCSAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4KKwkgKiA8L3A+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+T3V0IFRyYW5zcG9ydCBFZGdlczwvZW0+JyByZWZlcmVuY2UgbGlzdC4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMudHJhbnNwb3J0LlRyYW5zcG9ydFBhY2thZ2UjZ2V0UGlwZVN0eWxlVHJhbnNwb3J0U3lzdGVtX091dFRyYW5zcG9ydEVkZ2VzKCkKKwkgKiBAbW9kZWwKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUxpc3Q8UGlwZVRyYW5zcG9ydEVkZ2U+IGdldE91dFRyYW5zcG9ydEVkZ2VzKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5NYXggQ2FwYWNpdHk8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDxwPgorCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPk1heCBDYXBhY2l0eTwvZW0+JyBhdHRyaWJ1dGUgaXNuJ3QgY2xlYXIsCisJICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLgorCSAqIDwvcD4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5NYXggQ2FwYWNpdHk8L2VtPicgYXR0cmlidXRlLgorCSAqIEBzZWUgI3NldE1heENhcGFjaXR5KGRvdWJsZSkKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMudHJhbnNwb3J0LlRyYW5zcG9ydFBhY2thZ2UjZ2V0UGlwZVN0eWxlVHJhbnNwb3J0U3lzdGVtX01heENhcGFjaXR5KCkKKwkgKiBAbW9kZWwKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJZG91YmxlIGdldE1heENhcGFjaXR5KCk7CisKKwkvKioKKwkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLnRyYW5zcG9ydC5QaXBlU3R5bGVUcmFuc3BvcnRTeXN0ZW0jZ2V0TWF4Q2FwYWNpdHkgPGVtPk1heCBDYXBhY2l0eTwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+TWF4IENhcGFjaXR5PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiBAc2VlICNnZXRNYXhDYXBhY2l0eSgpCisJICogQGdlbmVyYXRlZAorCSAqLworCXZvaWQgc2V0TWF4Q2FwYWNpdHkoZG91YmxlIHZhbHVlKTsKKworCS8qKgorCSAqIAorCSAqLworCVN0cmluZyBVUklfVFlQRV9QSVBFX1NUWUxFX1RSQU5TUE9SVF9TWVNURU0gPSBVUklfVFlQRV9UUkFOU1BPUlRfU1lTVEVNX05PREVfU0VHTUVOVAorCQkJKyAiL3BpcGUiOworCit9CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udHJhbnNwb3J0L3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL3RyYW5zcG9ydC9QaXBlVHJhbnNwb3J0RWRnZS5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnRyYW5zcG9ydC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy90cmFuc3BvcnQvUGlwZVRyYW5zcG9ydEVkZ2UuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZTJmNTQ0Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnRyYW5zcG9ydC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy90cmFuc3BvcnQvUGlwZVRyYW5zcG9ydEVkZ2UuamF2YQpAQCAtMCwwICsxLDMzIEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMudHJhbnNwb3J0OworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA5IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuZWRnZXMuUG9wdWxhdGlvbkVkZ2U7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIEEgcmVwcmVzZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPlBpcGUgVHJhbnNwb3J0IEVkZ2U8L2I+PC9lbT4nLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKgorICoKKyAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy50cmFuc3BvcnQuVHJhbnNwb3J0UGFja2FnZSNnZXRQaXBlVHJhbnNwb3J0RWRnZSgpCisgKiBAbW9kZWwKKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGludGVyZmFjZSBQaXBlVHJhbnNwb3J0RWRnZSBleHRlbmRzIFBvcHVsYXRpb25FZGdlIHsKKwkvKioKKwkgKiBUaGlzIGlzIHRoZSBzZWdtZW50IG9mIHRoZSB0eXBlIFVSSSB0aGF0IHByZWZpeGVzIGFsbCBvdGhlciBzZWdtZW50cyBpbiBhCisJICogcGlwZSB0cmFuc3BvcnQgZWRnZSBVUkkuCisJICovCisJcHVibGljIFN0cmluZyBVUklfVFlQRV9QSVBFX1RSQU5TUE9SVF9FREdFX1NFR01FTlQgPSBVUklfVFlQRV9FREdFX1NFR01FTlQgKyAiL3BpcGV0cmFuc3BvcnQiOworCit9IC8vIFBpcGVUcmFuc3BvcnRFZGdlCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udHJhbnNwb3J0L3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL3RyYW5zcG9ydC9QaXBlVHJhbnNwb3J0RWRnZUxhYmVsLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udHJhbnNwb3J0L3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL3RyYW5zcG9ydC9QaXBlVHJhbnNwb3J0RWRnZUxhYmVsLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmMyMWQ1NAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS50cmFuc3BvcnQvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvdHJhbnNwb3J0L1BpcGVUcmFuc3BvcnRFZGdlTGFiZWwuamF2YQpAQCAtMCwwICsxLDI5IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMudHJhbnNwb3J0OworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA5IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5FZGdlTGFiZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLk1vZGlmaWFibGU7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIEEgcmVwcmVzZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPlBpcGUgVHJhbnNwb3J0IEVkZ2UgTGFiZWw8L2I+PC9lbT4nLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKgorICoKKyAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy50cmFuc3BvcnQuVHJhbnNwb3J0UGFja2FnZSNnZXRQaXBlVHJhbnNwb3J0RWRnZUxhYmVsKCkKKyAqIEBtb2RlbAorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgaW50ZXJmYWNlIFBpcGVUcmFuc3BvcnRFZGdlTGFiZWwgZXh0ZW5kcyBFZGdlTGFiZWwsIE1vZGlmaWFibGUgeworCS8vIE5vdGhpbmcKK30gLy8gUGlwZVRyYW5zcG9ydEVkZ2VMYWJlbApkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnRyYW5zcG9ydC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy90cmFuc3BvcnQvUGlwZVRyYW5zcG9ydEVkZ2VMYWJlbFZhbHVlLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udHJhbnNwb3J0L3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL3RyYW5zcG9ydC9QaXBlVHJhbnNwb3J0RWRnZUxhYmVsVmFsdWUuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNjlkMzY3Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnRyYW5zcG9ydC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy90cmFuc3BvcnQvUGlwZVRyYW5zcG9ydEVkZ2VMYWJlbFZhbHVlLmphdmEKQEAgLTAsMCArMSw4NiBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLnRyYW5zcG9ydDsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguTGFiZWxWYWx1ZTsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogQSByZXByZXNlbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+UGlwZSBUcmFuc3BvcnQgRWRnZSBMYWJlbCBWYWx1ZTwvYj48L2VtPicuCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqCisgKiA8cD4KKyAqIFRoZSBmb2xsb3dpbmcgZmVhdHVyZXMgYXJlIHN1cHBvcnRlZDoKKyAqIDx1bD4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLnRyYW5zcG9ydC5QaXBlVHJhbnNwb3J0RWRnZUxhYmVsVmFsdWUjZ2V0TWF4RmxvdyA8ZW0+TWF4IEZsb3c8L2VtPn08L2xpPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMudHJhbnNwb3J0LlBpcGVUcmFuc3BvcnRFZGdlTGFiZWxWYWx1ZSNnZXRUaW1lUGVyaW9kIDxlbT5UaW1lIFBlcmlvZDwvZW0+fTwvbGk+CisgKiA8L3VsPgorICogPC9wPgorICoKKyAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy50cmFuc3BvcnQuVHJhbnNwb3J0UGFja2FnZSNnZXRQaXBlVHJhbnNwb3J0RWRnZUxhYmVsVmFsdWUoKQorICogQG1vZGVsCisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBpbnRlcmZhY2UgUGlwZVRyYW5zcG9ydEVkZ2VMYWJlbFZhbHVlIGV4dGVuZHMgTGFiZWxWYWx1ZSB7CisJLyoqCisJICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+TWF4IEZsb3c8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDxwPgorCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPk1heCBGbG93PC9lbT4nIGF0dHJpYnV0ZSBpc24ndCBjbGVhciwKKwkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uCisJICogPC9wPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPk1heCBGbG93PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiBAc2VlICNzZXRNYXhGbG93KGRvdWJsZSkKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMudHJhbnNwb3J0LlRyYW5zcG9ydFBhY2thZ2UjZ2V0UGlwZVRyYW5zcG9ydEVkZ2VMYWJlbFZhbHVlX01heEZsb3coKQorCSAqIEBtb2RlbAorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlkb3VibGUgZ2V0TWF4RmxvdygpOworCisJLyoqCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy50cmFuc3BvcnQuUGlwZVRyYW5zcG9ydEVkZ2VMYWJlbFZhbHVlI2dldE1heEZsb3cgPGVtPk1heCBGbG93PC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5NYXggRmxvdzwvZW0+JyBhdHRyaWJ1dGUuCisJICogQHNlZSAjZ2V0TWF4RmxvdygpCisJICogQGdlbmVyYXRlZAorCSAqLworCXZvaWQgc2V0TWF4Rmxvdyhkb3VibGUgdmFsdWUpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+VGltZSBQZXJpb2Q8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDxwPgorCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPlRpbWUgUGVyaW9kPC9lbT4nIGF0dHJpYnV0ZSBpc24ndCBjbGVhciwKKwkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uCisJICogPC9wPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPlRpbWUgUGVyaW9kPC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiBAc2VlICNzZXRUaW1lUGVyaW9kKGxvbmcpCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLnRyYW5zcG9ydC5UcmFuc3BvcnRQYWNrYWdlI2dldFBpcGVUcmFuc3BvcnRFZGdlTGFiZWxWYWx1ZV9UaW1lUGVyaW9kKCkKKwkgKiBAbW9kZWwKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJbG9uZyBnZXRUaW1lUGVyaW9kKCk7CisKKwkvKioKKwkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLnRyYW5zcG9ydC5QaXBlVHJhbnNwb3J0RWRnZUxhYmVsVmFsdWUjZ2V0VGltZVBlcmlvZCA8ZW0+VGltZSBQZXJpb2Q8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPlRpbWUgUGVyaW9kPC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiBAc2VlICNnZXRUaW1lUGVyaW9kKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJdm9pZCBzZXRUaW1lUGVyaW9kKGxvbmcgdmFsdWUpOworCit9IC8vIFBpcGVUcmFuc3BvcnRFZGdlTGFiZWxWYWx1ZQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnRyYW5zcG9ydC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy90cmFuc3BvcnQvUGlwZVRyYW5zcG9ydEVkZ2VMYWJlbFZhdWUuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS50cmFuc3BvcnQvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvdHJhbnNwb3J0L1BpcGVUcmFuc3BvcnRFZGdlTGFiZWxWYXVlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGU0NTY3NAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS50cmFuc3BvcnQvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvdHJhbnNwb3J0L1BpcGVUcmFuc3BvcnRFZGdlTGFiZWxWYXVlLmphdmEKQEAgLTAsMCArMSw1NyBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLnRyYW5zcG9ydDsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguTGFiZWxWYWx1ZTsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogQSByZXByZXNlbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+UGlwZSBUcmFuc3BvcnQgRWRnZSBMYWJlbCBWYXVlPC9iPjwvZW0+Jy4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICoKKyAqIDxwPgorICogVGhlIGZvbGxvd2luZyBmZWF0dXJlcyBhcmUgc3VwcG9ydGVkOgorICogPHVsPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMudHJhbnNwb3J0LlBpcGVUcmFuc3BvcnRFZGdlTGFiZWxWYXVlI2dldE1heEZsb3cgPGVtPk1heCBGbG93PC9lbT59PC9saT4KKyAqIDwvdWw+CisgKiA8L3A+CisgKgorICogQG1vZGVsCisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBpbnRlcmZhY2UgUGlwZVRyYW5zcG9ydEVkZ2VMYWJlbFZhdWUgZXh0ZW5kcyBMYWJlbFZhbHVlIHsKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5NYXggRmxvdzwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPHA+CisJICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+TWF4IEZsb3c8L2VtPicgYXR0cmlidXRlIGlzbid0IGNsZWFyLAorCSAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4KKwkgKiA8L3A+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+TWF4IEZsb3c8L2VtPicgYXR0cmlidXRlLgorCSAqIEBzZWUgI3NldE1heEZsb3coZG91YmxlKQorCSAqIEBtb2RlbAorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlkb3VibGUgZ2V0TWF4RmxvdygpOworCisJLyoqCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy50cmFuc3BvcnQuUGlwZVRyYW5zcG9ydEVkZ2VMYWJlbFZhdWUjZ2V0TWF4RmxvdyA8ZW0+TWF4IEZsb3c8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPk1heCBGbG93PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiBAc2VlICNnZXRNYXhGbG93KCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJdm9pZCBzZXRNYXhGbG93KGRvdWJsZSB2YWx1ZSk7CisKK30gLy8gUGlwZVRyYW5zcG9ydEVkZ2VMYWJlbFZhdWUKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS50cmFuc3BvcnQvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvdHJhbnNwb3J0L1RyYW5zcG9ydEZhY3RvcnkuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS50cmFuc3BvcnQvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvdHJhbnNwb3J0L1RyYW5zcG9ydEZhY3RvcnkuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iM2VmN2E3Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnRyYW5zcG9ydC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy90cmFuc3BvcnQvVHJhbnNwb3J0RmFjdG9yeS5qYXZhCkBAIC0wLDAgKzEsNzggQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy50cmFuc3BvcnQ7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVGYWN0b3J5OworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiBUaGUgPGI+RmFjdG9yeTwvYj4gZm9yIHRoZSBtb2RlbC4KKyAqIEl0IHByb3ZpZGVzIGEgY3JlYXRlIG1ldGhvZCBmb3IgZWFjaCBub24tYWJzdHJhY3QgY2xhc3Mgb2YgdGhlIG1vZGVsLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMudHJhbnNwb3J0LlRyYW5zcG9ydFBhY2thZ2UKKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGludGVyZmFjZSBUcmFuc3BvcnRGYWN0b3J5IGV4dGVuZHMgRUZhY3RvcnkgeworCS8qKgorCSAqIFRoZSBzaW5nbGV0b24gaW5zdGFuY2Ugb2YgdGhlIGZhY3RvcnkuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJVHJhbnNwb3J0RmFjdG9yeSBlSU5TVEFOQ0UgPSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLnRyYW5zcG9ydC5pbXBsLlRyYW5zcG9ydEZhY3RvcnlJbXBsLmluaXQoKTsKKworCS8qKgorCSAqIFJldHVybnMgYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+UGlwZSBTdHlsZSBUcmFuc3BvcnQgU3lzdGVtPC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiBhIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5QaXBlIFN0eWxlIFRyYW5zcG9ydCBTeXN0ZW08L2VtPicuCisJICogQGdlbmVyYXRlZAorCSAqLworCVBpcGVTdHlsZVRyYW5zcG9ydFN5c3RlbSBjcmVhdGVQaXBlU3R5bGVUcmFuc3BvcnRTeXN0ZW0oKTsKKworCS8qKgorCSAqIFJldHVybnMgYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+UGlwZSBUcmFuc3BvcnQgRWRnZTwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+UGlwZSBUcmFuc3BvcnQgRWRnZTwvZW0+Jy4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJUGlwZVRyYW5zcG9ydEVkZ2UgY3JlYXRlUGlwZVRyYW5zcG9ydEVkZ2UoKTsKKworCS8qKgorCSAqIFJldHVybnMgYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+UGlwZSBUcmFuc3BvcnQgRWRnZSBMYWJlbDwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+UGlwZSBUcmFuc3BvcnQgRWRnZSBMYWJlbDwvZW0+Jy4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJUGlwZVRyYW5zcG9ydEVkZ2VMYWJlbCBjcmVhdGVQaXBlVHJhbnNwb3J0RWRnZUxhYmVsKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPlBpcGUgVHJhbnNwb3J0IEVkZ2UgTGFiZWwgVmFsdWU8L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPlBpcGUgVHJhbnNwb3J0IEVkZ2UgTGFiZWwgVmFsdWU8L2VtPicuCisJICogQGdlbmVyYXRlZAorCSAqLworCVBpcGVUcmFuc3BvcnRFZGdlTGFiZWxWYWx1ZSBjcmVhdGVQaXBlVHJhbnNwb3J0RWRnZUxhYmVsVmFsdWUoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIHBhY2thZ2Ugc3VwcG9ydGVkIGJ5IHRoaXMgZmFjdG9yeS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIHBhY2thZ2Ugc3VwcG9ydGVkIGJ5IHRoaXMgZmFjdG9yeS4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJVHJhbnNwb3J0UGFja2FnZSBnZXRUcmFuc3BvcnRQYWNrYWdlKCk7CisKK30gLy9UcmFuc3BvcnRGYWN0b3J5CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udHJhbnNwb3J0L3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL3RyYW5zcG9ydC9UcmFuc3BvcnRQYWNrYWdlLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udHJhbnNwb3J0L3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL3RyYW5zcG9ydC9UcmFuc3BvcnRQYWNrYWdlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzU3NmU1ZQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS50cmFuc3BvcnQvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvdHJhbnNwb3J0L1RyYW5zcG9ydFBhY2thZ2UuamF2YQpAQCAtMCwwICsxLDY3MyBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLnRyYW5zcG9ydDsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUF0dHJpYnV0ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRVJlZmVyZW5jZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguR3JhcGhQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuZWRnZXMuRWRnZXNQYWNrYWdlOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiBUaGUgPGI+UGFja2FnZTwvYj4gZm9yIHRoZSBtb2RlbC4KKyAqIEl0IGNvbnRhaW5zIGFjY2Vzc29ycyBmb3IgdGhlIG1ldGEgb2JqZWN0cyB0byByZXByZXNlbnQKKyAqIDx1bD4KKyAqICAgPGxpPmVhY2ggY2xhc3MsPC9saT4KKyAqICAgPGxpPmVhY2ggZmVhdHVyZSBvZiBlYWNoIGNsYXNzLDwvbGk+CisgKiAgIDxsaT5lYWNoIGVudW0sPC9saT4KKyAqICAgPGxpPmFuZCBlYWNoIGRhdGEgdHlwZTwvbGk+CisgKiA8L3VsPgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMudHJhbnNwb3J0LlRyYW5zcG9ydEZhY3RvcnkKKyAqIEBtb2RlbCBraW5kPSJwYWNrYWdlIgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgaW50ZXJmYWNlIFRyYW5zcG9ydFBhY2thZ2UgZXh0ZW5kcyBFUGFja2FnZSB7CisJLyoqCisJICogVGhlIHBhY2thZ2UgbmFtZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlTdHJpbmcgZU5BTUUgPSAidHJhbnNwb3J0IjsKKworCS8qKgorCSAqIFRoZSBwYWNrYWdlIG5hbWVzcGFjZSBVUkkuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJU3RyaW5nIGVOU19VUkkgPSAiaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL3RyYW5zcG9ydC5lY29yZSI7CisKKwkvKioKKwkgKiBUaGUgcGFja2FnZSBuYW1lc3BhY2UgbmFtZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlTdHJpbmcgZU5TX1BSRUZJWCA9ICJvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLnRyYW5zcG9ydCI7CisKKwkvKioKKwkgKiBUaGUgc2luZ2xldG9uIGluc3RhbmNlIG9mIHRoZSBwYWNrYWdlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCVRyYW5zcG9ydFBhY2thZ2UgZUlOU1RBTkNFID0gb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy50cmFuc3BvcnQuaW1wbC5UcmFuc3BvcnRQYWNrYWdlSW1wbC5pbml0KCk7CisKKwkvKioKKwkgKiBUaGUgbWV0YSBvYmplY3QgaWQgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMudHJhbnNwb3J0LmltcGwuVHJhbnNwb3J0U3lzdGVtSW1wbCA8ZW0+U3lzdGVtPC9lbT59JyBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy50cmFuc3BvcnQuaW1wbC5UcmFuc3BvcnRTeXN0ZW1JbXBsCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLnRyYW5zcG9ydC5pbXBsLlRyYW5zcG9ydFBhY2thZ2VJbXBsI2dldFRyYW5zcG9ydFN5c3RlbSgpCisJICogQGdlbmVyYXRlZAorCSAqLworCWludCBUUkFOU1BPUlRfU1lTVEVNID0gMTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5VUkk8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBUUkFOU1BPUlRfU1lTVEVNX19VUkkgPSBHcmFwaFBhY2thZ2UuTk9ERV9fVVJJOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlR5cGUgVVJJPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgVFJBTlNQT1JUX1NZU1RFTV9fVFlQRV9VUkkgPSBHcmFwaFBhY2thZ2UuTk9ERV9fVFlQRV9VUkk7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RHVibGluIENvcmU8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBUUkFOU1BPUlRfU1lTVEVNX19EVUJMSU5fQ09SRSA9IEdyYXBoUGFja2FnZS5OT0RFX19EVUJMSU5fQ09SRTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5FZGdlczwvYj48L2VtPicgcmVmZXJlbmNlIGxpc3QuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgVFJBTlNQT1JUX1NZU1RFTV9fRURHRVMgPSBHcmFwaFBhY2thZ2UuTk9ERV9fRURHRVM7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+TGFiZWxzPC9iPjwvZW0+JyByZWZlcmVuY2UgbGlzdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBUUkFOU1BPUlRfU1lTVEVNX19MQUJFTFMgPSBHcmFwaFBhY2thZ2UuTk9ERV9fTEFCRUxTOworCisJLyoqCisJICogVGhlIG51bWJlciBvZiBzdHJ1Y3R1cmFsIGZlYXR1cmVzIG9mIHRoZSAnPGVtPlN5c3RlbTwvZW0+JyBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBUUkFOU1BPUlRfU1lTVEVNX0ZFQVRVUkVfQ09VTlQgPSBHcmFwaFBhY2thZ2UuTk9ERV9GRUFUVVJFX0NPVU5UICsgMDsKKworCS8qKgorCSAqIFRoZSBtZXRhIG9iamVjdCBpZCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy50cmFuc3BvcnQuaW1wbC5QaXBlU3R5bGVUcmFuc3BvcnRTeXN0ZW1JbXBsIDxlbT5QaXBlIFN0eWxlIFRyYW5zcG9ydCBTeXN0ZW08L2VtPn0nIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLnRyYW5zcG9ydC5pbXBsLlBpcGVTdHlsZVRyYW5zcG9ydFN5c3RlbUltcGwKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMudHJhbnNwb3J0LmltcGwuVHJhbnNwb3J0UGFja2FnZUltcGwjZ2V0UGlwZVN0eWxlVHJhbnNwb3J0U3lzdGVtKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJaW50IFBJUEVfU1RZTEVfVFJBTlNQT1JUX1NZU1RFTSA9IDA7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VVJJPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgUElQRV9TVFlMRV9UUkFOU1BPUlRfU1lTVEVNX19VUkkgPSBUUkFOU1BPUlRfU1lTVEVNX19VUkk7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VHlwZSBVUkk8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBQSVBFX1NUWUxFX1RSQU5TUE9SVF9TWVNURU1fX1RZUEVfVVJJID0gVFJBTlNQT1JUX1NZU1RFTV9fVFlQRV9VUkk7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RHVibGluIENvcmU8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBQSVBFX1NUWUxFX1RSQU5TUE9SVF9TWVNURU1fX0RVQkxJTl9DT1JFID0gVFJBTlNQT1JUX1NZU1RFTV9fRFVCTElOX0NPUkU7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RWRnZXM8L2I+PC9lbT4nIHJlZmVyZW5jZSBsaXN0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFBJUEVfU1RZTEVfVFJBTlNQT1JUX1NZU1RFTV9fRURHRVMgPSBUUkFOU1BPUlRfU1lTVEVNX19FREdFUzsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5MYWJlbHM8L2I+PC9lbT4nIHJlZmVyZW5jZSBsaXN0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFBJUEVfU1RZTEVfVFJBTlNQT1JUX1NZU1RFTV9fTEFCRUxTID0gVFJBTlNQT1JUX1NZU1RFTV9fTEFCRUxTOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkluIFRyYW5zcG9ydCBFZGdlczwvYj48L2VtPicgcmVmZXJlbmNlIGxpc3QuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgUElQRV9TVFlMRV9UUkFOU1BPUlRfU1lTVEVNX19JTl9UUkFOU1BPUlRfRURHRVMgPSBUUkFOU1BPUlRfU1lTVEVNX0ZFQVRVUkVfQ09VTlQgKyAwOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPk91dCBUcmFuc3BvcnQgRWRnZXM8L2I+PC9lbT4nIHJlZmVyZW5jZSBsaXN0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFBJUEVfU1RZTEVfVFJBTlNQT1JUX1NZU1RFTV9fT1VUX1RSQU5TUE9SVF9FREdFUyA9IFRSQU5TUE9SVF9TWVNURU1fRkVBVFVSRV9DT1VOVCArIDE7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+TWF4IENhcGFjaXR5PC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgUElQRV9TVFlMRV9UUkFOU1BPUlRfU1lTVEVNX19NQVhfQ0FQQUNJVFkgPSBUUkFOU1BPUlRfU1lTVEVNX0ZFQVRVUkVfQ09VTlQgKyAyOworCisJLyoqCisJICogVGhlIG51bWJlciBvZiBzdHJ1Y3R1cmFsIGZlYXR1cmVzIG9mIHRoZSAnPGVtPlBpcGUgU3R5bGUgVHJhbnNwb3J0IFN5c3RlbTwvZW0+JyBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBQSVBFX1NUWUxFX1RSQU5TUE9SVF9TWVNURU1fRkVBVFVSRV9DT1VOVCA9IFRSQU5TUE9SVF9TWVNURU1fRkVBVFVSRV9DT1VOVCArIDM7CisKKworCS8qKgorCSAqIFRoZSBtZXRhIG9iamVjdCBpZCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy50cmFuc3BvcnQuaW1wbC5QaXBlVHJhbnNwb3J0RWRnZUltcGwgPGVtPlBpcGUgVHJhbnNwb3J0IEVkZ2U8L2VtPn0nIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLnRyYW5zcG9ydC5pbXBsLlBpcGVUcmFuc3BvcnRFZGdlSW1wbAorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy50cmFuc3BvcnQuaW1wbC5UcmFuc3BvcnRQYWNrYWdlSW1wbCNnZXRQaXBlVHJhbnNwb3J0RWRnZSgpCisJICogQGdlbmVyYXRlZAorCSAqLworCWludCBQSVBFX1RSQU5TUE9SVF9FREdFID0gMjsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5VUkk8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBQSVBFX1RSQU5TUE9SVF9FREdFX19VUkkgPSBFZGdlc1BhY2thZ2UuUE9QVUxBVElPTl9FREdFX19VUkk7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VHlwZSBVUkk8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBQSVBFX1RSQU5TUE9SVF9FREdFX19UWVBFX1VSSSA9IEVkZ2VzUGFja2FnZS5QT1BVTEFUSU9OX0VER0VfX1RZUEVfVVJJOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkR1YmxpbiBDb3JlPC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgUElQRV9UUkFOU1BPUlRfRURHRV9fRFVCTElOX0NPUkUgPSBFZGdlc1BhY2thZ2UuUE9QVUxBVElPTl9FREdFX19EVUJMSU5fQ09SRTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5BPC9iPjwvZW0+JyByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgUElQRV9UUkFOU1BPUlRfRURHRV9fQSA9IEVkZ2VzUGFja2FnZS5QT1BVTEFUSU9OX0VER0VfX0E7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+Tm9kZSBBVVJJPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgUElQRV9UUkFOU1BPUlRfRURHRV9fTk9ERV9BVVJJID0gRWRnZXNQYWNrYWdlLlBPUFVMQVRJT05fRURHRV9fTk9ERV9BVVJJOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkI8L2I+PC9lbT4nIHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBQSVBFX1RSQU5TUE9SVF9FREdFX19CID0gRWRnZXNQYWNrYWdlLlBPUFVMQVRJT05fRURHRV9fQjsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5Ob2RlIEJVUkk8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBQSVBFX1RSQU5TUE9SVF9FREdFX19OT0RFX0JVUkkgPSBFZGdlc1BhY2thZ2UuUE9QVUxBVElPTl9FREdFX19OT0RFX0JVUkk7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+TGFiZWw8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBQSVBFX1RSQU5TUE9SVF9FREdFX19MQUJFTCA9IEVkZ2VzUGFja2FnZS5QT1BVTEFUSU9OX0VER0VfX0xBQkVMOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkRpcmVjdGVkPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgUElQRV9UUkFOU1BPUlRfRURHRV9fRElSRUNURUQgPSBFZGdlc1BhY2thZ2UuUE9QVUxBVElPTl9FREdFX19ESVJFQ1RFRDsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5Qb3B1bGF0aW9uIElkZW50aWZpZXI8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBQSVBFX1RSQU5TUE9SVF9FREdFX19QT1BVTEFUSU9OX0lERU5USUZJRVIgPSBFZGdlc1BhY2thZ2UuUE9QVUxBVElPTl9FREdFX19QT1BVTEFUSU9OX0lERU5USUZJRVI7CisKKwkvKioKKwkgKiBUaGUgbnVtYmVyIG9mIHN0cnVjdHVyYWwgZmVhdHVyZXMgb2YgdGhlICc8ZW0+UGlwZSBUcmFuc3BvcnQgRWRnZTwvZW0+JyBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBQSVBFX1RSQU5TUE9SVF9FREdFX0ZFQVRVUkVfQ09VTlQgPSBFZGdlc1BhY2thZ2UuUE9QVUxBVElPTl9FREdFX0ZFQVRVUkVfQ09VTlQgKyAwOworCisKKwkvKioKKwkgKiBUaGUgbWV0YSBvYmplY3QgaWQgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMudHJhbnNwb3J0LmltcGwuUGlwZVRyYW5zcG9ydEVkZ2VMYWJlbEltcGwgPGVtPlBpcGUgVHJhbnNwb3J0IEVkZ2UgTGFiZWw8L2VtPn0nIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLnRyYW5zcG9ydC5pbXBsLlBpcGVUcmFuc3BvcnRFZGdlTGFiZWxJbXBsCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLnRyYW5zcG9ydC5pbXBsLlRyYW5zcG9ydFBhY2thZ2VJbXBsI2dldFBpcGVUcmFuc3BvcnRFZGdlTGFiZWwoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlpbnQgUElQRV9UUkFOU1BPUlRfRURHRV9MQUJFTCA9IDM7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VVJJPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgUElQRV9UUkFOU1BPUlRfRURHRV9MQUJFTF9fVVJJID0gR3JhcGhQYWNrYWdlLkVER0VfTEFCRUxfX1VSSTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5UeXBlIFVSSTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFBJUEVfVFJBTlNQT1JUX0VER0VfTEFCRUxfX1RZUEVfVVJJID0gR3JhcGhQYWNrYWdlLkVER0VfTEFCRUxfX1RZUEVfVVJJOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkR1YmxpbiBDb3JlPC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgUElQRV9UUkFOU1BPUlRfRURHRV9MQUJFTF9fRFVCTElOX0NPUkUgPSBHcmFwaFBhY2thZ2UuRURHRV9MQUJFTF9fRFVCTElOX0NPUkU7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VVJJIE9mIElkZW50aWZpYWJsZSBUbyBCZSBMYWJlbGVkPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgUElQRV9UUkFOU1BPUlRfRURHRV9MQUJFTF9fVVJJX09GX0lERU5USUZJQUJMRV9UT19CRV9MQUJFTEVEID0gR3JhcGhQYWNrYWdlLkVER0VfTEFCRUxfX1VSSV9PRl9JREVOVElGSUFCTEVfVE9fQkVfTEFCRUxFRDsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5DdXJyZW50IFZhbHVlPC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgUElQRV9UUkFOU1BPUlRfRURHRV9MQUJFTF9fQ1VSUkVOVF9WQUxVRSA9IEdyYXBoUGFja2FnZS5FREdFX0xBQkVMX19DVVJSRU5UX1ZBTFVFOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPklkZW50aWZpYWJsZTwvYj48L2VtPicgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFBJUEVfVFJBTlNQT1JUX0VER0VfTEFCRUxfX0lERU5USUZJQUJMRSA9IEdyYXBoUGFja2FnZS5FREdFX0xBQkVMX19JREVOVElGSUFCTEU7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RWRnZTwvYj48L2VtPicgY29udGFpbmVyIHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBQSVBFX1RSQU5TUE9SVF9FREdFX0xBQkVMX19FREdFID0gR3JhcGhQYWNrYWdlLkVER0VfTEFCRUxfX0VER0U7CisKKwkvKioKKwkgKiBUaGUgbnVtYmVyIG9mIHN0cnVjdHVyYWwgZmVhdHVyZXMgb2YgdGhlICc8ZW0+UGlwZSBUcmFuc3BvcnQgRWRnZSBMYWJlbDwvZW0+JyBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBQSVBFX1RSQU5TUE9SVF9FREdFX0xBQkVMX0ZFQVRVUkVfQ09VTlQgPSBHcmFwaFBhY2thZ2UuRURHRV9MQUJFTF9GRUFUVVJFX0NPVU5UICsgMDsKKworCS8qKgorCSAqIFRoZSBtZXRhIG9iamVjdCBpZCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy50cmFuc3BvcnQuaW1wbC5QaXBlVHJhbnNwb3J0RWRnZUxhYmVsVmFsdWVJbXBsIDxlbT5QaXBlIFRyYW5zcG9ydCBFZGdlIExhYmVsIFZhbHVlPC9lbT59JyBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy50cmFuc3BvcnQuaW1wbC5QaXBlVHJhbnNwb3J0RWRnZUxhYmVsVmFsdWVJbXBsCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLnRyYW5zcG9ydC5pbXBsLlRyYW5zcG9ydFBhY2thZ2VJbXBsI2dldFBpcGVUcmFuc3BvcnRFZGdlTGFiZWxWYWx1ZSgpCisJICogQGdlbmVyYXRlZAorCSAqLworCWludCBQSVBFX1RSQU5TUE9SVF9FREdFX0xBQkVMX1ZBTFVFID0gNDsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5NYXggRmxvdzwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFBJUEVfVFJBTlNQT1JUX0VER0VfTEFCRUxfVkFMVUVfX01BWF9GTE9XID0gR3JhcGhQYWNrYWdlLkxBQkVMX1ZBTFVFX0ZFQVRVUkVfQ09VTlQgKyAwOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlRpbWUgUGVyaW9kPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgUElQRV9UUkFOU1BPUlRfRURHRV9MQUJFTF9WQUxVRV9fVElNRV9QRVJJT0QgPSBHcmFwaFBhY2thZ2UuTEFCRUxfVkFMVUVfRkVBVFVSRV9DT1VOVCArIDE7CisKKwkvKioKKwkgKiBUaGUgbnVtYmVyIG9mIHN0cnVjdHVyYWwgZmVhdHVyZXMgb2YgdGhlICc8ZW0+UGlwZSBUcmFuc3BvcnQgRWRnZSBMYWJlbCBWYWx1ZTwvZW0+JyBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBQSVBFX1RSQU5TUE9SVF9FREdFX0xBQkVMX1ZBTFVFX0ZFQVRVUkVfQ09VTlQgPSBHcmFwaFBhY2thZ2UuTEFCRUxfVkFMVUVfRkVBVFVSRV9DT1VOVCArIDI7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLnRyYW5zcG9ydC5QaXBlU3R5bGVUcmFuc3BvcnRTeXN0ZW0gPGVtPlBpcGUgU3R5bGUgVHJhbnNwb3J0IFN5c3RlbTwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJzxlbT5QaXBlIFN0eWxlIFRyYW5zcG9ydCBTeXN0ZW08L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLnRyYW5zcG9ydC5QaXBlU3R5bGVUcmFuc3BvcnRTeXN0ZW0KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUNsYXNzIGdldFBpcGVTdHlsZVRyYW5zcG9ydFN5c3RlbSgpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSByZWZlcmVuY2UgbGlzdCAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMudHJhbnNwb3J0LlBpcGVTdHlsZVRyYW5zcG9ydFN5c3RlbSNnZXRJblRyYW5zcG9ydEVkZ2VzIDxlbT5JbiBUcmFuc3BvcnQgRWRnZXM8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSByZWZlcmVuY2UgbGlzdCAnPGVtPkluIFRyYW5zcG9ydCBFZGdlczwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMudHJhbnNwb3J0LlBpcGVTdHlsZVRyYW5zcG9ydFN5c3RlbSNnZXRJblRyYW5zcG9ydEVkZ2VzKCkKKwkgKiBAc2VlICNnZXRQaXBlU3R5bGVUcmFuc3BvcnRTeXN0ZW0oKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFUmVmZXJlbmNlIGdldFBpcGVTdHlsZVRyYW5zcG9ydFN5c3RlbV9JblRyYW5zcG9ydEVkZ2VzKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIHJlZmVyZW5jZSBsaXN0ICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy50cmFuc3BvcnQuUGlwZVN0eWxlVHJhbnNwb3J0U3lzdGVtI2dldE91dFRyYW5zcG9ydEVkZ2VzIDxlbT5PdXQgVHJhbnNwb3J0IEVkZ2VzPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgcmVmZXJlbmNlIGxpc3QgJzxlbT5PdXQgVHJhbnNwb3J0IEVkZ2VzPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy50cmFuc3BvcnQuUGlwZVN0eWxlVHJhbnNwb3J0U3lzdGVtI2dldE91dFRyYW5zcG9ydEVkZ2VzKCkKKwkgKiBAc2VlICNnZXRQaXBlU3R5bGVUcmFuc3BvcnRTeXN0ZW0oKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFUmVmZXJlbmNlIGdldFBpcGVTdHlsZVRyYW5zcG9ydFN5c3RlbV9PdXRUcmFuc3BvcnRFZGdlcygpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLnRyYW5zcG9ydC5QaXBlU3R5bGVUcmFuc3BvcnRTeXN0ZW0jZ2V0TWF4Q2FwYWNpdHkgPGVtPk1heCBDYXBhY2l0eTwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPGVtPk1heCBDYXBhY2l0eTwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMudHJhbnNwb3J0LlBpcGVTdHlsZVRyYW5zcG9ydFN5c3RlbSNnZXRNYXhDYXBhY2l0eSgpCisJICogQHNlZSAjZ2V0UGlwZVN0eWxlVHJhbnNwb3J0U3lzdGVtKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUF0dHJpYnV0ZSBnZXRQaXBlU3R5bGVUcmFuc3BvcnRTeXN0ZW1fTWF4Q2FwYWNpdHkoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMudHJhbnNwb3J0LlRyYW5zcG9ydFN5c3RlbSA8ZW0+U3lzdGVtPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAnPGVtPlN5c3RlbTwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMudHJhbnNwb3J0LlRyYW5zcG9ydFN5c3RlbQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQ2xhc3MgZ2V0VHJhbnNwb3J0U3lzdGVtKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLnRyYW5zcG9ydC5QaXBlVHJhbnNwb3J0RWRnZSA8ZW0+UGlwZSBUcmFuc3BvcnQgRWRnZTwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJzxlbT5QaXBlIFRyYW5zcG9ydCBFZGdlPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy50cmFuc3BvcnQuUGlwZVRyYW5zcG9ydEVkZ2UKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUNsYXNzIGdldFBpcGVUcmFuc3BvcnRFZGdlKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLnRyYW5zcG9ydC5QaXBlVHJhbnNwb3J0RWRnZUxhYmVsIDxlbT5QaXBlIFRyYW5zcG9ydCBFZGdlIExhYmVsPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAnPGVtPlBpcGUgVHJhbnNwb3J0IEVkZ2UgTGFiZWw8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLnRyYW5zcG9ydC5QaXBlVHJhbnNwb3J0RWRnZUxhYmVsCisJICogQGdlbmVyYXRlZAorCSAqLworCUVDbGFzcyBnZXRQaXBlVHJhbnNwb3J0RWRnZUxhYmVsKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLnRyYW5zcG9ydC5QaXBlVHJhbnNwb3J0RWRnZUxhYmVsVmFsdWUgPGVtPlBpcGUgVHJhbnNwb3J0IEVkZ2UgTGFiZWwgVmFsdWU8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICc8ZW0+UGlwZSBUcmFuc3BvcnQgRWRnZSBMYWJlbCBWYWx1ZTwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMudHJhbnNwb3J0LlBpcGVUcmFuc3BvcnRFZGdlTGFiZWxWYWx1ZQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQ2xhc3MgZ2V0UGlwZVRyYW5zcG9ydEVkZ2VMYWJlbFZhbHVlKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMudHJhbnNwb3J0LlBpcGVUcmFuc3BvcnRFZGdlTGFiZWxWYWx1ZSNnZXRNYXhGbG93IDxlbT5NYXggRmxvdzwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPGVtPk1heCBGbG93PC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy50cmFuc3BvcnQuUGlwZVRyYW5zcG9ydEVkZ2VMYWJlbFZhbHVlI2dldE1heEZsb3coKQorCSAqIEBzZWUgI2dldFBpcGVUcmFuc3BvcnRFZGdlTGFiZWxWYWx1ZSgpCisJICogQGdlbmVyYXRlZAorCSAqLworCUVBdHRyaWJ1dGUgZ2V0UGlwZVRyYW5zcG9ydEVkZ2VMYWJlbFZhbHVlX01heEZsb3coKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy50cmFuc3BvcnQuUGlwZVRyYW5zcG9ydEVkZ2VMYWJlbFZhbHVlI2dldFRpbWVQZXJpb2QgPGVtPlRpbWUgUGVyaW9kPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+VGltZSBQZXJpb2Q8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLnRyYW5zcG9ydC5QaXBlVHJhbnNwb3J0RWRnZUxhYmVsVmFsdWUjZ2V0VGltZVBlcmlvZCgpCisJICogQHNlZSAjZ2V0UGlwZVRyYW5zcG9ydEVkZ2VMYWJlbFZhbHVlKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUF0dHJpYnV0ZSBnZXRQaXBlVHJhbnNwb3J0RWRnZUxhYmVsVmFsdWVfVGltZVBlcmlvZCgpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgZmFjdG9yeSB0aGF0IGNyZWF0ZXMgdGhlIGluc3RhbmNlcyBvZiB0aGUgbW9kZWwuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBmYWN0b3J5IHRoYXQgY3JlYXRlcyB0aGUgaW5zdGFuY2VzIG9mIHRoZSBtb2RlbC4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJVHJhbnNwb3J0RmFjdG9yeSBnZXRUcmFuc3BvcnRGYWN0b3J5KCk7CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIERlZmluZXMgbGl0ZXJhbHMgZm9yIHRoZSBtZXRhIG9iamVjdHMgdGhhdCByZXByZXNlbnQKKwkgKiA8dWw+CisJICogICA8bGk+ZWFjaCBjbGFzcyw8L2xpPgorCSAqICAgPGxpPmVhY2ggZmVhdHVyZSBvZiBlYWNoIGNsYXNzLDwvbGk+CisJICogICA8bGk+ZWFjaCBlbnVtLDwvbGk+CisJICogICA8bGk+YW5kIGVhY2ggZGF0YSB0eXBlPC9saT4KKwkgKiA8L3VsPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlpbnRlcmZhY2UgTGl0ZXJhbHMgeworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMudHJhbnNwb3J0LmltcGwuUGlwZVN0eWxlVHJhbnNwb3J0U3lzdGVtSW1wbCA8ZW0+UGlwZSBTdHlsZSBUcmFuc3BvcnQgU3lzdGVtPC9lbT59JyBjbGFzcy4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy50cmFuc3BvcnQuaW1wbC5QaXBlU3R5bGVUcmFuc3BvcnRTeXN0ZW1JbXBsCisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy50cmFuc3BvcnQuaW1wbC5UcmFuc3BvcnRQYWNrYWdlSW1wbCNnZXRQaXBlU3R5bGVUcmFuc3BvcnRTeXN0ZW0oKQorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQ2xhc3MgUElQRV9TVFlMRV9UUkFOU1BPUlRfU1lTVEVNID0gZUlOU1RBTkNFLmdldFBpcGVTdHlsZVRyYW5zcG9ydFN5c3RlbSgpOworCisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+SW4gVHJhbnNwb3J0IEVkZ2VzPC9iPjwvZW0+JyByZWZlcmVuY2UgbGlzdCBmZWF0dXJlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRVJlZmVyZW5jZSBQSVBFX1NUWUxFX1RSQU5TUE9SVF9TWVNURU1fX0lOX1RSQU5TUE9SVF9FREdFUyA9IGVJTlNUQU5DRS5nZXRQaXBlU3R5bGVUcmFuc3BvcnRTeXN0ZW1fSW5UcmFuc3BvcnRFZGdlcygpOworCisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+T3V0IFRyYW5zcG9ydCBFZGdlczwvYj48L2VtPicgcmVmZXJlbmNlIGxpc3QgZmVhdHVyZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVSZWZlcmVuY2UgUElQRV9TVFlMRV9UUkFOU1BPUlRfU1lTVEVNX19PVVRfVFJBTlNQT1JUX0VER0VTID0gZUlOU1RBTkNFLmdldFBpcGVTdHlsZVRyYW5zcG9ydFN5c3RlbV9PdXRUcmFuc3BvcnRFZGdlcygpOworCisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+TWF4IENhcGFjaXR5PC9iPjwvZW0+JyBhdHRyaWJ1dGUgZmVhdHVyZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVBdHRyaWJ1dGUgUElQRV9TVFlMRV9UUkFOU1BPUlRfU1lTVEVNX19NQVhfQ0FQQUNJVFkgPSBlSU5TVEFOQ0UuZ2V0UGlwZVN0eWxlVHJhbnNwb3J0U3lzdGVtX01heENhcGFjaXR5KCk7CisKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLnRyYW5zcG9ydC5pbXBsLlRyYW5zcG9ydFN5c3RlbUltcGwgPGVtPlN5c3RlbTwvZW0+fScgY2xhc3MuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMudHJhbnNwb3J0LmltcGwuVHJhbnNwb3J0U3lzdGVtSW1wbAorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMudHJhbnNwb3J0LmltcGwuVHJhbnNwb3J0UGFja2FnZUltcGwjZ2V0VHJhbnNwb3J0U3lzdGVtKCkKKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUNsYXNzIFRSQU5TUE9SVF9TWVNURU0gPSBlSU5TVEFOQ0UuZ2V0VHJhbnNwb3J0U3lzdGVtKCk7CisKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLnRyYW5zcG9ydC5pbXBsLlBpcGVUcmFuc3BvcnRFZGdlSW1wbCA8ZW0+UGlwZSBUcmFuc3BvcnQgRWRnZTwvZW0+fScgY2xhc3MuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMudHJhbnNwb3J0LmltcGwuUGlwZVRyYW5zcG9ydEVkZ2VJbXBsCisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy50cmFuc3BvcnQuaW1wbC5UcmFuc3BvcnRQYWNrYWdlSW1wbCNnZXRQaXBlVHJhbnNwb3J0RWRnZSgpCisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVDbGFzcyBQSVBFX1RSQU5TUE9SVF9FREdFID0gZUlOU1RBTkNFLmdldFBpcGVUcmFuc3BvcnRFZGdlKCk7CisKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLnRyYW5zcG9ydC5pbXBsLlBpcGVUcmFuc3BvcnRFZGdlTGFiZWxJbXBsIDxlbT5QaXBlIFRyYW5zcG9ydCBFZGdlIExhYmVsPC9lbT59JyBjbGFzcy4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy50cmFuc3BvcnQuaW1wbC5QaXBlVHJhbnNwb3J0RWRnZUxhYmVsSW1wbAorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMudHJhbnNwb3J0LmltcGwuVHJhbnNwb3J0UGFja2FnZUltcGwjZ2V0UGlwZVRyYW5zcG9ydEVkZ2VMYWJlbCgpCisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVDbGFzcyBQSVBFX1RSQU5TUE9SVF9FREdFX0xBQkVMID0gZUlOU1RBTkNFLmdldFBpcGVUcmFuc3BvcnRFZGdlTGFiZWwoKTsKKworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMudHJhbnNwb3J0LmltcGwuUGlwZVRyYW5zcG9ydEVkZ2VMYWJlbFZhbHVlSW1wbCA8ZW0+UGlwZSBUcmFuc3BvcnQgRWRnZSBMYWJlbCBWYWx1ZTwvZW0+fScgY2xhc3MuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMudHJhbnNwb3J0LmltcGwuUGlwZVRyYW5zcG9ydEVkZ2VMYWJlbFZhbHVlSW1wbAorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMudHJhbnNwb3J0LmltcGwuVHJhbnNwb3J0UGFja2FnZUltcGwjZ2V0UGlwZVRyYW5zcG9ydEVkZ2VMYWJlbFZhbHVlKCkKKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUNsYXNzIFBJUEVfVFJBTlNQT1JUX0VER0VfTEFCRUxfVkFMVUUgPSBlSU5TVEFOQ0UuZ2V0UGlwZVRyYW5zcG9ydEVkZ2VMYWJlbFZhbHVlKCk7CisKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5NYXggRmxvdzwvYj48L2VtPicgYXR0cmlidXRlIGZlYXR1cmUuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQXR0cmlidXRlIFBJUEVfVFJBTlNQT1JUX0VER0VfTEFCRUxfVkFMVUVfX01BWF9GTE9XID0gZUlOU1RBTkNFLmdldFBpcGVUcmFuc3BvcnRFZGdlTGFiZWxWYWx1ZV9NYXhGbG93KCk7CisKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5UaW1lIFBlcmlvZDwvYj48L2VtPicgYXR0cmlidXRlIGZlYXR1cmUuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQXR0cmlidXRlIFBJUEVfVFJBTlNQT1JUX0VER0VfTEFCRUxfVkFMVUVfX1RJTUVfUEVSSU9EID0gZUlOU1RBTkNFLmdldFBpcGVUcmFuc3BvcnRFZGdlTGFiZWxWYWx1ZV9UaW1lUGVyaW9kKCk7CisKKwl9CisKK30gLy9UcmFuc3BvcnRQYWNrYWdlCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udHJhbnNwb3J0L3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL3RyYW5zcG9ydC9UcmFuc3BvcnRTeXN0ZW0uamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS50cmFuc3BvcnQvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvdHJhbnNwb3J0L1RyYW5zcG9ydFN5c3RlbS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZhNzBhOGUKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udHJhbnNwb3J0L3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL3RyYW5zcG9ydC9UcmFuc3BvcnRTeXN0ZW0uamF2YQpAQCAtMCwwICsxLDMwIEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMudHJhbnNwb3J0OworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5Ob2RlOworCisvKioKKyAqIE5vZGUgcmVwcmVzZW50aW5nIHRoZSB0cmFuc3BvcnQgc3lzdGVtLgorICogCisgKiBAYXV0aG9yIGpsZXNzbGVyCisgKgorICogQG1vZGVsIGFic3RyYWN0PSJ0cnVlIgorICovCitwdWJsaWMgaW50ZXJmYWNlIFRyYW5zcG9ydFN5c3RlbSBleHRlbmRzIE5vZGUgeworCQorCS8qKgorCSAqIAorCSAqLworCVN0cmluZyBVUklfVFlQRV9UUkFOU1BPUlRfU1lTVEVNX05PREVfU0VHTUVOVCA9IFVSSV9UWVBFX05PREVfU0VHTUVOVAorCQkrICIvdHJhbnNwb3J0IjsKK30KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS50cmFuc3BvcnQvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvdHJhbnNwb3J0L2ltcGwvUGlwZVN0eWxlVHJhbnNwb3J0U3lzdGVtSW1wbC5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnRyYW5zcG9ydC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy90cmFuc3BvcnQvaW1wbC9QaXBlU3R5bGVUcmFuc3BvcnRTeXN0ZW1JbXBsLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzRiZjZjNAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS50cmFuc3BvcnQvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvdHJhbnNwb3J0L2ltcGwvUGlwZVN0eWxlVHJhbnNwb3J0U3lzdGVtSW1wbC5qYXZhCkBAIC0wLDAgKzEsMjQyIEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMudHJhbnNwb3J0LmltcGw7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLkVMaXN0OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLmltcGwuRU5vdGlmaWNhdGlvbkltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnV0aWwuRU9iamVjdFJlc29sdmluZ0VMaXN0OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMudHJhbnNwb3J0LlBpcGVTdHlsZVRyYW5zcG9ydFN5c3RlbTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLnRyYW5zcG9ydC5QaXBlVHJhbnNwb3J0RWRnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLnRyYW5zcG9ydC5UcmFuc3BvcnRQYWNrYWdlOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiBBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+UGlwZSBTdHlsZSBUcmFuc3BvcnQgU3lzdGVtPC9iPjwvZW0+Jy4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogPHA+CisgKiBUaGUgZm9sbG93aW5nIGZlYXR1cmVzIGFyZSBpbXBsZW1lbnRlZDoKKyAqIDx1bD4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLnRyYW5zcG9ydC5pbXBsLlBpcGVTdHlsZVRyYW5zcG9ydFN5c3RlbUltcGwjZ2V0SW5UcmFuc3BvcnRFZGdlcyA8ZW0+SW4gVHJhbnNwb3J0IEVkZ2VzPC9lbT59PC9saT4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLnRyYW5zcG9ydC5pbXBsLlBpcGVTdHlsZVRyYW5zcG9ydFN5c3RlbUltcGwjZ2V0T3V0VHJhbnNwb3J0RWRnZXMgPGVtPk91dCBUcmFuc3BvcnQgRWRnZXM8L2VtPn08L2xpPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMudHJhbnNwb3J0LmltcGwuUGlwZVN0eWxlVHJhbnNwb3J0U3lzdGVtSW1wbCNnZXRNYXhDYXBhY2l0eSA8ZW0+TWF4IENhcGFjaXR5PC9lbT59PC9saT4KKyAqIDwvdWw+CisgKiA8L3A+CisgKgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgUGlwZVN0eWxlVHJhbnNwb3J0U3lzdGVtSW1wbCBleHRlbmRzIFRyYW5zcG9ydFN5c3RlbUltcGwgaW1wbGVtZW50cyBQaXBlU3R5bGVUcmFuc3BvcnRTeXN0ZW0geworCS8qKgorCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldEluVHJhbnNwb3J0RWRnZXMoKSA8ZW0+SW4gVHJhbnNwb3J0IEVkZ2VzPC9lbT59JyByZWZlcmVuY2UgbGlzdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI2dldEluVHJhbnNwb3J0RWRnZXMoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBFTGlzdDxQaXBlVHJhbnNwb3J0RWRnZT4gaW5UcmFuc3BvcnRFZGdlczsKKworCS8qKgorCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldE91dFRyYW5zcG9ydEVkZ2VzKCkgPGVtPk91dCBUcmFuc3BvcnQgRWRnZXM8L2VtPn0nIHJlZmVyZW5jZSBsaXN0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZ2V0T3V0VHJhbnNwb3J0RWRnZXMoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBFTGlzdDxQaXBlVHJhbnNwb3J0RWRnZT4gb3V0VHJhbnNwb3J0RWRnZXM7CisKKwkvKioKKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0TWF4Q2FwYWNpdHkoKSA8ZW0+TWF4IENhcGFjaXR5PC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNnZXRNYXhDYXBhY2l0eSgpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBkb3VibGUgTUFYX0NBUEFDSVRZX0VERUZBVUxUID0gMC4wOworCisJLyoqCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0TWF4Q2FwYWNpdHkoKSA8ZW0+TWF4IENhcGFjaXR5PC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNnZXRNYXhDYXBhY2l0eSgpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIGRvdWJsZSBtYXhDYXBhY2l0eSA9IE1BWF9DQVBBQ0lUWV9FREVGQVVMVDsKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBQaXBlU3R5bGVUcmFuc3BvcnRTeXN0ZW1JbXBsKCkgeworCQlzdXBlcigpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCBFQ2xhc3MgZVN0YXRpY0NsYXNzKCkgeworCQlyZXR1cm4gVHJhbnNwb3J0UGFja2FnZS5MaXRlcmFscy5QSVBFX1NUWUxFX1RSQU5TUE9SVF9TWVNURU07CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVMaXN0PFBpcGVUcmFuc3BvcnRFZGdlPiBnZXRJblRyYW5zcG9ydEVkZ2VzKCkgeworCQlpZiAoaW5UcmFuc3BvcnRFZGdlcyA9PSBudWxsKSB7CisJCQlpblRyYW5zcG9ydEVkZ2VzID0gbmV3IEVPYmplY3RSZXNvbHZpbmdFTGlzdDxQaXBlVHJhbnNwb3J0RWRnZT4oUGlwZVRyYW5zcG9ydEVkZ2UuY2xhc3MsIHRoaXMsIFRyYW5zcG9ydFBhY2thZ2UuUElQRV9TVFlMRV9UUkFOU1BPUlRfU1lTVEVNX19JTl9UUkFOU1BPUlRfRURHRVMpOworCQl9CisJCXJldHVybiBpblRyYW5zcG9ydEVkZ2VzOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFTGlzdDxQaXBlVHJhbnNwb3J0RWRnZT4gZ2V0T3V0VHJhbnNwb3J0RWRnZXMoKSB7CisJCWlmIChvdXRUcmFuc3BvcnRFZGdlcyA9PSBudWxsKSB7CisJCQlvdXRUcmFuc3BvcnRFZGdlcyA9IG5ldyBFT2JqZWN0UmVzb2x2aW5nRUxpc3Q8UGlwZVRyYW5zcG9ydEVkZ2U+KFBpcGVUcmFuc3BvcnRFZGdlLmNsYXNzLCB0aGlzLCBUcmFuc3BvcnRQYWNrYWdlLlBJUEVfU1RZTEVfVFJBTlNQT1JUX1NZU1RFTV9fT1VUX1RSQU5TUE9SVF9FREdFUyk7CisJCX0KKwkJcmV0dXJuIG91dFRyYW5zcG9ydEVkZ2VzOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBkb3VibGUgZ2V0TWF4Q2FwYWNpdHkoKSB7CisJCXJldHVybiBtYXhDYXBhY2l0eTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRNYXhDYXBhY2l0eShkb3VibGUgbmV3TWF4Q2FwYWNpdHkpIHsKKwkJZG91YmxlIG9sZE1heENhcGFjaXR5ID0gbWF4Q2FwYWNpdHk7CisJCW1heENhcGFjaXR5ID0gbmV3TWF4Q2FwYWNpdHk7CisJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkKKwkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIFRyYW5zcG9ydFBhY2thZ2UuUElQRV9TVFlMRV9UUkFOU1BPUlRfU1lTVEVNX19NQVhfQ0FQQUNJVFksIG9sZE1heENhcGFjaXR5LCBtYXhDYXBhY2l0eSkpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBPYmplY3QgZUdldChpbnQgZmVhdHVyZUlELCBib29sZWFuIHJlc29sdmUsIGJvb2xlYW4gY29yZVR5cGUpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJCWNhc2UgVHJhbnNwb3J0UGFja2FnZS5QSVBFX1NUWUxFX1RSQU5TUE9SVF9TWVNURU1fX0lOX1RSQU5TUE9SVF9FREdFUzoKKwkJCQlyZXR1cm4gZ2V0SW5UcmFuc3BvcnRFZGdlcygpOworCQkJY2FzZSBUcmFuc3BvcnRQYWNrYWdlLlBJUEVfU1RZTEVfVFJBTlNQT1JUX1NZU1RFTV9fT1VUX1RSQU5TUE9SVF9FREdFUzoKKwkJCQlyZXR1cm4gZ2V0T3V0VHJhbnNwb3J0RWRnZXMoKTsKKwkJCWNhc2UgVHJhbnNwb3J0UGFja2FnZS5QSVBFX1NUWUxFX1RSQU5TUE9SVF9TWVNURU1fX01BWF9DQVBBQ0lUWToKKwkJCQlyZXR1cm4gZ2V0TWF4Q2FwYWNpdHkoKTsKKwkJfQorCQlyZXR1cm4gc3VwZXIuZUdldChmZWF0dXJlSUQsIHJlc29sdmUsIGNvcmVUeXBlKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAU3VwcHJlc3NXYXJuaW5ncygidW5jaGVja2VkIikKKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBlU2V0KGludCBmZWF0dXJlSUQsIE9iamVjdCBuZXdWYWx1ZSkgeworCQlzd2l0Y2ggKGZlYXR1cmVJRCkgeworCQkJY2FzZSBUcmFuc3BvcnRQYWNrYWdlLlBJUEVfU1RZTEVfVFJBTlNQT1JUX1NZU1RFTV9fSU5fVFJBTlNQT1JUX0VER0VTOgorCQkJCWdldEluVHJhbnNwb3J0RWRnZXMoKS5jbGVhcigpOworCQkJCWdldEluVHJhbnNwb3J0RWRnZXMoKS5hZGRBbGwoKENvbGxlY3Rpb248PyBleHRlbmRzIFBpcGVUcmFuc3BvcnRFZGdlPiluZXdWYWx1ZSk7CisJCQkJcmV0dXJuOworCQkJY2FzZSBUcmFuc3BvcnRQYWNrYWdlLlBJUEVfU1RZTEVfVFJBTlNQT1JUX1NZU1RFTV9fT1VUX1RSQU5TUE9SVF9FREdFUzoKKwkJCQlnZXRPdXRUcmFuc3BvcnRFZGdlcygpLmNsZWFyKCk7CisJCQkJZ2V0T3V0VHJhbnNwb3J0RWRnZXMoKS5hZGRBbGwoKENvbGxlY3Rpb248PyBleHRlbmRzIFBpcGVUcmFuc3BvcnRFZGdlPiluZXdWYWx1ZSk7CisJCQkJcmV0dXJuOworCQkJY2FzZSBUcmFuc3BvcnRQYWNrYWdlLlBJUEVfU1RZTEVfVFJBTlNQT1JUX1NZU1RFTV9fTUFYX0NBUEFDSVRZOgorCQkJCXNldE1heENhcGFjaXR5KChEb3VibGUpbmV3VmFsdWUpOworCQkJCXJldHVybjsKKwkJfQorCQlzdXBlci5lU2V0KGZlYXR1cmVJRCwgbmV3VmFsdWUpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGVVbnNldChpbnQgZmVhdHVyZUlEKSB7CisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7CisJCQljYXNlIFRyYW5zcG9ydFBhY2thZ2UuUElQRV9TVFlMRV9UUkFOU1BPUlRfU1lTVEVNX19JTl9UUkFOU1BPUlRfRURHRVM6CisJCQkJZ2V0SW5UcmFuc3BvcnRFZGdlcygpLmNsZWFyKCk7CisJCQkJcmV0dXJuOworCQkJY2FzZSBUcmFuc3BvcnRQYWNrYWdlLlBJUEVfU1RZTEVfVFJBTlNQT1JUX1NZU1RFTV9fT1VUX1RSQU5TUE9SVF9FREdFUzoKKwkJCQlnZXRPdXRUcmFuc3BvcnRFZGdlcygpLmNsZWFyKCk7CisJCQkJcmV0dXJuOworCQkJY2FzZSBUcmFuc3BvcnRQYWNrYWdlLlBJUEVfU1RZTEVfVFJBTlNQT1JUX1NZU1RFTV9fTUFYX0NBUEFDSVRZOgorCQkJCXNldE1heENhcGFjaXR5KE1BWF9DQVBBQ0lUWV9FREVGQVVMVCk7CisJCQkJcmV0dXJuOworCQl9CisJCXN1cGVyLmVVbnNldChmZWF0dXJlSUQpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBib29sZWFuIGVJc1NldChpbnQgZmVhdHVyZUlEKSB7CisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7CisJCQljYXNlIFRyYW5zcG9ydFBhY2thZ2UuUElQRV9TVFlMRV9UUkFOU1BPUlRfU1lTVEVNX19JTl9UUkFOU1BPUlRfRURHRVM6CisJCQkJcmV0dXJuIGluVHJhbnNwb3J0RWRnZXMgIT0gbnVsbCAmJiAhaW5UcmFuc3BvcnRFZGdlcy5pc0VtcHR5KCk7CisJCQljYXNlIFRyYW5zcG9ydFBhY2thZ2UuUElQRV9TVFlMRV9UUkFOU1BPUlRfU1lTVEVNX19PVVRfVFJBTlNQT1JUX0VER0VTOgorCQkJCXJldHVybiBvdXRUcmFuc3BvcnRFZGdlcyAhPSBudWxsICYmICFvdXRUcmFuc3BvcnRFZGdlcy5pc0VtcHR5KCk7CisJCQljYXNlIFRyYW5zcG9ydFBhY2thZ2UuUElQRV9TVFlMRV9UUkFOU1BPUlRfU1lTVEVNX19NQVhfQ0FQQUNJVFk6CisJCQkJcmV0dXJuIG1heENhcGFjaXR5ICE9IE1BWF9DQVBBQ0lUWV9FREVGQVVMVDsKKwkJfQorCQlyZXR1cm4gc3VwZXIuZUlzU2V0KGZlYXR1cmVJRCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIFN0cmluZyB0b1N0cmluZygpIHsKKwkJaWYgKGVJc1Byb3h5KCkpIHJldHVybiBzdXBlci50b1N0cmluZygpOworCisJCVN0cmluZ0J1ZmZlciByZXN1bHQgPSBuZXcgU3RyaW5nQnVmZmVyKHN1cGVyLnRvU3RyaW5nKCkpOworCQlyZXN1bHQuYXBwZW5kKCIgKG1heENhcGFjaXR5OiAiKTsKKwkJcmVzdWx0LmFwcGVuZChtYXhDYXBhY2l0eSk7CisJCXJlc3VsdC5hcHBlbmQoJyknKTsKKwkJcmV0dXJuIHJlc3VsdC50b1N0cmluZygpOworCX0KKworfSAvL1BpcGVTdHlsZVRyYW5zcG9ydFN5c3RlbUltcGwKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS50cmFuc3BvcnQvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvdHJhbnNwb3J0L2ltcGwvUGlwZVRyYW5zcG9ydEVkZ2VJbXBsLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udHJhbnNwb3J0L3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL3RyYW5zcG9ydC9pbXBsL1BpcGVUcmFuc3BvcnRFZGdlSW1wbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA1MmY0NWUKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udHJhbnNwb3J0L3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL3RyYW5zcG9ydC9pbXBsL1BpcGVUcmFuc3BvcnRFZGdlSW1wbC5qYXZhCkBAIC0wLDAgKzEsNjUgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy50cmFuc3BvcnQuaW1wbDsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5TVEVNVVJJOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuZWRnZXMuaW1wbC5Qb3B1bGF0aW9uRWRnZUltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy50cmFuc3BvcnQuUGlwZVRyYW5zcG9ydEVkZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy50cmFuc3BvcnQuVHJhbnNwb3J0RmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLnRyYW5zcG9ydC5UcmFuc3BvcnRQYWNrYWdlOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiBBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+UGlwZSBUcmFuc3BvcnQgRWRnZTwvYj48L2VtPicuCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIDxwPgorICogPC9wPgorICoKKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIFBpcGVUcmFuc3BvcnRFZGdlSW1wbCBleHRlbmRzIFBvcHVsYXRpb25FZGdlSW1wbCBpbXBsZW1lbnRzIFBpcGVUcmFuc3BvcnRFZGdlIHsKKwkKKwkvKioKKwkgKiBUaGlzIGlzIHVzZWQgdG8gZ2VuZXJhdGUgdW5pcXVlIFVSSSdzIGZvciBlYWNoIHBpcGUgdHJhbnNwb3J0IGVkZ2UgZ2VuZXJhdGVkCisJICovCisJc3RhdGljIGludCBwaXBlVHJhbnNwb3J0RWRnZUNvdW50ZXIgPSAwOworCQorCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlwcm90ZWN0ZWQgUGlwZVRyYW5zcG9ydEVkZ2VJbXBsKCkgeworCQlzdXBlcigpOworCQkvL3NldCB0aGUgVVJJCisJCXNldFVSSShTVEVNVVJJLmNyZWF0ZVVSSShVUklfVFlQRV9QSVBFX1RSQU5TUE9SVF9FREdFX1NFR01FTlQgKyAiLyIKKwkJCQkrIEludGVnZXIudG9TdHJpbmcocGlwZVRyYW5zcG9ydEVkZ2VDb3VudGVyKyspKSk7CisJCQkKKwkJLy9NYWtlIGEgbGFiZWwKKwkJc2V0TGFiZWwoVHJhbnNwb3J0RmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlUGlwZVRyYW5zcG9ydEVkZ2VMYWJlbCgpKTsJCQkJCisJCQorCQkvL3RoaXMgZWRnZSBtdXN0IGJlIGRpcmVjdGVkCisJCXNldERpcmVjdGVkKHRydWUpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCBFQ2xhc3MgZVN0YXRpY0NsYXNzKCkgeworCQlyZXR1cm4gVHJhbnNwb3J0UGFja2FnZS5MaXRlcmFscy5QSVBFX1RSQU5TUE9SVF9FREdFOworCX0KKworfSAvL1BpcGVUcmFuc3BvcnRFZGdlSW1wbApkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnRyYW5zcG9ydC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy90cmFuc3BvcnQvaW1wbC9QaXBlVHJhbnNwb3J0RWRnZUxhYmVsSW1wbC5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnRyYW5zcG9ydC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy90cmFuc3BvcnQvaW1wbC9QaXBlVHJhbnNwb3J0RWRnZUxhYmVsSW1wbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJkNDY3MTQKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udHJhbnNwb3J0L3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL3RyYW5zcG9ydC9pbXBsL1BpcGVUcmFuc3BvcnRFZGdlTGFiZWxJbXBsLmphdmEKQEAgLTAsMCArMSw0OCBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLnRyYW5zcG9ydC5pbXBsOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA5IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmltcGwuRWRnZUxhYmVsSW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLnRyYW5zcG9ydC5QaXBlVHJhbnNwb3J0RWRnZUxhYmVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMudHJhbnNwb3J0LlRyYW5zcG9ydFBhY2thZ2U7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIEFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5QaXBlIFRyYW5zcG9ydCBFZGdlIExhYmVsPC9iPjwvZW0+Jy4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogPHA+CisgKiA8L3A+CisgKgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgUGlwZVRyYW5zcG9ydEVkZ2VMYWJlbEltcGwgZXh0ZW5kcyBFZGdlTGFiZWxJbXBsIGltcGxlbWVudHMgUGlwZVRyYW5zcG9ydEVkZ2VMYWJlbCB7CisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIFBpcGVUcmFuc3BvcnRFZGdlTGFiZWxJbXBsKCkgeworCQlzdXBlcigpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCBFQ2xhc3MgZVN0YXRpY0NsYXNzKCkgeworCQlyZXR1cm4gVHJhbnNwb3J0UGFja2FnZS5MaXRlcmFscy5QSVBFX1RSQU5TUE9SVF9FREdFX0xBQkVMOworCX0KKworfSAvL1BpcGVUcmFuc3BvcnRFZGdlTGFiZWxJbXBsCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udHJhbnNwb3J0L3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL3RyYW5zcG9ydC9pbXBsL1BpcGVUcmFuc3BvcnRFZGdlTGFiZWxWYWx1ZUltcGwuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS50cmFuc3BvcnQvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvdHJhbnNwb3J0L2ltcGwvUGlwZVRyYW5zcG9ydEVkZ2VMYWJlbFZhbHVlSW1wbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQxZGIxNDQKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udHJhbnNwb3J0L3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL3RyYW5zcG9ydC9pbXBsL1BpcGVUcmFuc3BvcnRFZGdlTGFiZWxWYWx1ZUltcGwuamF2YQpAQCAtMCwwICsxLDIyMyBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLnRyYW5zcG9ydC5pbXBsOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA5IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5pbXBsLkVOb3RpZmljYXRpb25JbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5pbXBsLkxhYmVsVmFsdWVJbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMudHJhbnNwb3J0LlBpcGVUcmFuc3BvcnRFZGdlTGFiZWxWYWx1ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLnRyYW5zcG9ydC5UcmFuc3BvcnRQYWNrYWdlOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiBBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+UGlwZSBUcmFuc3BvcnQgRWRnZSBMYWJlbCBWYWx1ZTwvYj48L2VtPicuCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIDxwPgorICogVGhlIGZvbGxvd2luZyBmZWF0dXJlcyBhcmUgaW1wbGVtZW50ZWQ6CisgKiA8dWw+CisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy50cmFuc3BvcnQuaW1wbC5QaXBlVHJhbnNwb3J0RWRnZUxhYmVsVmFsdWVJbXBsI2dldE1heEZsb3cgPGVtPk1heCBGbG93PC9lbT59PC9saT4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLnRyYW5zcG9ydC5pbXBsLlBpcGVUcmFuc3BvcnRFZGdlTGFiZWxWYWx1ZUltcGwjZ2V0VGltZVBlcmlvZCA8ZW0+VGltZSBQZXJpb2Q8L2VtPn08L2xpPgorICogPC91bD4KKyAqIDwvcD4KKyAqCisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBQaXBlVHJhbnNwb3J0RWRnZUxhYmVsVmFsdWVJbXBsIGV4dGVuZHMgTGFiZWxWYWx1ZUltcGwgaW1wbGVtZW50cyBQaXBlVHJhbnNwb3J0RWRnZUxhYmVsVmFsdWUgeworCS8qKgorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRNYXhGbG93KCkgPGVtPk1heCBGbG93PC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNnZXRNYXhGbG93KCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIGRvdWJsZSBNQVhfRkxPV19FREVGQVVMVCA9IDAuMDsKKworCS8qKgorCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldE1heEZsb3coKSA8ZW0+TWF4IEZsb3c8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI2dldE1heEZsb3coKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBkb3VibGUgbWF4RmxvdyA9IE1BWF9GTE9XX0VERUZBVUxUOworCisJLyoqCisJICogVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldFRpbWVQZXJpb2QoKSA8ZW0+VGltZSBQZXJpb2Q8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI2dldFRpbWVQZXJpb2QoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgbG9uZyBUSU1FX1BFUklPRF9FREVGQVVMVCA9IDBMOworCisJLyoqCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0VGltZVBlcmlvZCgpIDxlbT5UaW1lIFBlcmlvZDwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZ2V0VGltZVBlcmlvZCgpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIGxvbmcgdGltZVBlcmlvZCA9IFRJTUVfUEVSSU9EX0VERUZBVUxUOworCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIFBpcGVUcmFuc3BvcnRFZGdlTGFiZWxWYWx1ZUltcGwoKSB7CisJCXN1cGVyKCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIEVDbGFzcyBlU3RhdGljQ2xhc3MoKSB7CisJCXJldHVybiBUcmFuc3BvcnRQYWNrYWdlLkxpdGVyYWxzLlBJUEVfVFJBTlNQT1JUX0VER0VfTEFCRUxfVkFMVUU7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIGRvdWJsZSBnZXRNYXhGbG93KCkgeworCQlyZXR1cm4gbWF4RmxvdzsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRNYXhGbG93KGRvdWJsZSBuZXdNYXhGbG93KSB7CisJCWRvdWJsZSBvbGRNYXhGbG93ID0gbWF4RmxvdzsKKwkJbWF4RmxvdyA9IG5ld01heEZsb3c7CisJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkKKwkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIFRyYW5zcG9ydFBhY2thZ2UuUElQRV9UUkFOU1BPUlRfRURHRV9MQUJFTF9WQUxVRV9fTUFYX0ZMT1csIG9sZE1heEZsb3csIG1heEZsb3cpKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgbG9uZyBnZXRUaW1lUGVyaW9kKCkgeworCQlyZXR1cm4gdGltZVBlcmlvZDsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRUaW1lUGVyaW9kKGxvbmcgbmV3VGltZVBlcmlvZCkgeworCQlsb25nIG9sZFRpbWVQZXJpb2QgPSB0aW1lUGVyaW9kOworCQl0aW1lUGVyaW9kID0gbmV3VGltZVBlcmlvZDsKKwkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQorCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgVHJhbnNwb3J0UGFja2FnZS5QSVBFX1RSQU5TUE9SVF9FREdFX0xBQkVMX1ZBTFVFX19USU1FX1BFUklPRCwgb2xkVGltZVBlcmlvZCwgdGltZVBlcmlvZCkpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBPYmplY3QgZUdldChpbnQgZmVhdHVyZUlELCBib29sZWFuIHJlc29sdmUsIGJvb2xlYW4gY29yZVR5cGUpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJCWNhc2UgVHJhbnNwb3J0UGFja2FnZS5QSVBFX1RSQU5TUE9SVF9FREdFX0xBQkVMX1ZBTFVFX19NQVhfRkxPVzoKKwkJCQlyZXR1cm4gZ2V0TWF4RmxvdygpOworCQkJY2FzZSBUcmFuc3BvcnRQYWNrYWdlLlBJUEVfVFJBTlNQT1JUX0VER0VfTEFCRUxfVkFMVUVfX1RJTUVfUEVSSU9EOgorCQkJCXJldHVybiBnZXRUaW1lUGVyaW9kKCk7CisJCX0KKwkJcmV0dXJuIHN1cGVyLmVHZXQoZmVhdHVyZUlELCByZXNvbHZlLCBjb3JlVHlwZSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgZVNldChpbnQgZmVhdHVyZUlELCBPYmplY3QgbmV3VmFsdWUpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJCWNhc2UgVHJhbnNwb3J0UGFja2FnZS5QSVBFX1RSQU5TUE9SVF9FREdFX0xBQkVMX1ZBTFVFX19NQVhfRkxPVzoKKwkJCQlzZXRNYXhGbG93KChEb3VibGUpbmV3VmFsdWUpOworCQkJCXJldHVybjsKKwkJCWNhc2UgVHJhbnNwb3J0UGFja2FnZS5QSVBFX1RSQU5TUE9SVF9FREdFX0xBQkVMX1ZBTFVFX19USU1FX1BFUklPRDoKKwkJCQlzZXRUaW1lUGVyaW9kKChMb25nKW5ld1ZhbHVlKTsKKwkJCQlyZXR1cm47CisJCX0KKwkJc3VwZXIuZVNldChmZWF0dXJlSUQsIG5ld1ZhbHVlKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBlVW5zZXQoaW50IGZlYXR1cmVJRCkgeworCQlzd2l0Y2ggKGZlYXR1cmVJRCkgeworCQkJY2FzZSBUcmFuc3BvcnRQYWNrYWdlLlBJUEVfVFJBTlNQT1JUX0VER0VfTEFCRUxfVkFMVUVfX01BWF9GTE9XOgorCQkJCXNldE1heEZsb3coTUFYX0ZMT1dfRURFRkFVTFQpOworCQkJCXJldHVybjsKKwkJCWNhc2UgVHJhbnNwb3J0UGFja2FnZS5QSVBFX1RSQU5TUE9SVF9FREdFX0xBQkVMX1ZBTFVFX19USU1FX1BFUklPRDoKKwkJCQlzZXRUaW1lUGVyaW9kKFRJTUVfUEVSSU9EX0VERUZBVUxUKTsKKwkJCQlyZXR1cm47CisJCX0KKwkJc3VwZXIuZVVuc2V0KGZlYXR1cmVJRCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIGJvb2xlYW4gZUlzU2V0KGludCBmZWF0dXJlSUQpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJCWNhc2UgVHJhbnNwb3J0UGFja2FnZS5QSVBFX1RSQU5TUE9SVF9FREdFX0xBQkVMX1ZBTFVFX19NQVhfRkxPVzoKKwkJCQlyZXR1cm4gbWF4RmxvdyAhPSBNQVhfRkxPV19FREVGQVVMVDsKKwkJCWNhc2UgVHJhbnNwb3J0UGFja2FnZS5QSVBFX1RSQU5TUE9SVF9FREdFX0xBQkVMX1ZBTFVFX19USU1FX1BFUklPRDoKKwkJCQlyZXR1cm4gdGltZVBlcmlvZCAhPSBUSU1FX1BFUklPRF9FREVGQVVMVDsKKwkJfQorCQlyZXR1cm4gc3VwZXIuZUlzU2V0KGZlYXR1cmVJRCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIFN0cmluZyB0b1N0cmluZygpIHsKKwkJaWYgKGVJc1Byb3h5KCkpIHJldHVybiBzdXBlci50b1N0cmluZygpOworCisJCVN0cmluZ0J1ZmZlciByZXN1bHQgPSBuZXcgU3RyaW5nQnVmZmVyKHN1cGVyLnRvU3RyaW5nKCkpOworCQlyZXN1bHQuYXBwZW5kKCIgKG1heEZsb3c6ICIpOworCQlyZXN1bHQuYXBwZW5kKG1heEZsb3cpOworCQlyZXN1bHQuYXBwZW5kKCIsIHRpbWVQZXJpb2Q6ICIpOworCQlyZXN1bHQuYXBwZW5kKHRpbWVQZXJpb2QpOworCQlyZXN1bHQuYXBwZW5kKCcpJyk7CisJCXJldHVybiByZXN1bHQudG9TdHJpbmcoKTsKKwl9CisKK30gLy9QaXBlVHJhbnNwb3J0RWRnZUxhYmVsVmFsdWVJbXBsCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udHJhbnNwb3J0L3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL3RyYW5zcG9ydC9pbXBsL1RyYW5zcG9ydEZhY3RvcnlJbXBsLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udHJhbnNwb3J0L3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL3RyYW5zcG9ydC9pbXBsL1RyYW5zcG9ydEZhY3RvcnlJbXBsLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWU4MTFhZgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS50cmFuc3BvcnQvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvdHJhbnNwb3J0L2ltcGwvVHJhbnNwb3J0RmFjdG9yeUltcGwuamF2YQpAQCAtMCwwICsxLDEzOSBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLnRyYW5zcG9ydC5pbXBsOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3Q7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5pbXBsLkVGYWN0b3J5SW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUucGx1Z2luLkVjb3JlUGx1Z2luOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMudHJhbnNwb3J0LlBpcGVTdHlsZVRyYW5zcG9ydFN5c3RlbTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLnRyYW5zcG9ydC5QaXBlVHJhbnNwb3J0RWRnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLnRyYW5zcG9ydC5QaXBlVHJhbnNwb3J0RWRnZUxhYmVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMudHJhbnNwb3J0LlBpcGVUcmFuc3BvcnRFZGdlTGFiZWxWYWx1ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLnRyYW5zcG9ydC5UcmFuc3BvcnRGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMudHJhbnNwb3J0LlRyYW5zcG9ydFBhY2thZ2U7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIEFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBtb2RlbCA8Yj5GYWN0b3J5PC9iPi4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgVHJhbnNwb3J0RmFjdG9yeUltcGwgZXh0ZW5kcyBFRmFjdG9yeUltcGwgaW1wbGVtZW50cyBUcmFuc3BvcnRGYWN0b3J5IHsKKwkvKioKKwkgKiBDcmVhdGVzIHRoZSBkZWZhdWx0IGZhY3RvcnkgaW1wbGVtZW50YXRpb24uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHN0YXRpYyBUcmFuc3BvcnRGYWN0b3J5IGluaXQoKSB7CisJCXRyeSB7CisJCQlUcmFuc3BvcnRGYWN0b3J5IHRoZVRyYW5zcG9ydEZhY3RvcnkgPSAoVHJhbnNwb3J0RmFjdG9yeSlFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFRmFjdG9yeSgiaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL3RyYW5zcG9ydC5lY29yZSIpOyAKKwkJCWlmICh0aGVUcmFuc3BvcnRGYWN0b3J5ICE9IG51bGwpIHsKKwkJCQlyZXR1cm4gdGhlVHJhbnNwb3J0RmFjdG9yeTsKKwkJCX0KKwkJfQorCQljYXRjaCAoRXhjZXB0aW9uIGV4Y2VwdGlvbikgeworCQkJRWNvcmVQbHVnaW4uSU5TVEFOQ0UubG9nKGV4Y2VwdGlvbik7CisJCX0KKwkJcmV0dXJuIG5ldyBUcmFuc3BvcnRGYWN0b3J5SW1wbCgpOworCX0KKworCS8qKgorCSAqIENyZWF0ZXMgYW4gaW5zdGFuY2Ugb2YgdGhlIGZhY3RvcnkuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFRyYW5zcG9ydEZhY3RvcnlJbXBsKCkgeworCQlzdXBlcigpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBFT2JqZWN0IGNyZWF0ZShFQ2xhc3MgZUNsYXNzKSB7CisJCXN3aXRjaCAoZUNsYXNzLmdldENsYXNzaWZpZXJJRCgpKSB7CisJCQljYXNlIFRyYW5zcG9ydFBhY2thZ2UuUElQRV9TVFlMRV9UUkFOU1BPUlRfU1lTVEVNOiByZXR1cm4gY3JlYXRlUGlwZVN0eWxlVHJhbnNwb3J0U3lzdGVtKCk7CisJCQljYXNlIFRyYW5zcG9ydFBhY2thZ2UuUElQRV9UUkFOU1BPUlRfRURHRTogcmV0dXJuIGNyZWF0ZVBpcGVUcmFuc3BvcnRFZGdlKCk7CisJCQljYXNlIFRyYW5zcG9ydFBhY2thZ2UuUElQRV9UUkFOU1BPUlRfRURHRV9MQUJFTDogcmV0dXJuIGNyZWF0ZVBpcGVUcmFuc3BvcnRFZGdlTGFiZWwoKTsKKwkJCWNhc2UgVHJhbnNwb3J0UGFja2FnZS5QSVBFX1RSQU5TUE9SVF9FREdFX0xBQkVMX1ZBTFVFOiByZXR1cm4gY3JlYXRlUGlwZVRyYW5zcG9ydEVkZ2VMYWJlbFZhbHVlKCk7CisJCQlkZWZhdWx0OgorCQkJCXRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIlRoZSBjbGFzcyAnIiArIGVDbGFzcy5nZXROYW1lKCkgKyAiJyBpcyBub3QgYSB2YWxpZCBjbGFzc2lmaWVyIik7CisJCX0KKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgUGlwZVN0eWxlVHJhbnNwb3J0U3lzdGVtIGNyZWF0ZVBpcGVTdHlsZVRyYW5zcG9ydFN5c3RlbSgpIHsKKwkJUGlwZVN0eWxlVHJhbnNwb3J0U3lzdGVtSW1wbCBwaXBlU3R5bGVUcmFuc3BvcnRTeXN0ZW0gPSBuZXcgUGlwZVN0eWxlVHJhbnNwb3J0U3lzdGVtSW1wbCgpOworCQlyZXR1cm4gcGlwZVN0eWxlVHJhbnNwb3J0U3lzdGVtOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBQaXBlVHJhbnNwb3J0RWRnZSBjcmVhdGVQaXBlVHJhbnNwb3J0RWRnZSgpIHsKKwkJUGlwZVRyYW5zcG9ydEVkZ2VJbXBsIHBpcGVUcmFuc3BvcnRFZGdlID0gbmV3IFBpcGVUcmFuc3BvcnRFZGdlSW1wbCgpOworCQlyZXR1cm4gcGlwZVRyYW5zcG9ydEVkZ2U7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFBpcGVUcmFuc3BvcnRFZGdlTGFiZWwgY3JlYXRlUGlwZVRyYW5zcG9ydEVkZ2VMYWJlbCgpIHsKKwkJUGlwZVRyYW5zcG9ydEVkZ2VMYWJlbEltcGwgcGlwZVRyYW5zcG9ydEVkZ2VMYWJlbCA9IG5ldyBQaXBlVHJhbnNwb3J0RWRnZUxhYmVsSW1wbCgpOworCQlyZXR1cm4gcGlwZVRyYW5zcG9ydEVkZ2VMYWJlbDsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgUGlwZVRyYW5zcG9ydEVkZ2VMYWJlbFZhbHVlIGNyZWF0ZVBpcGVUcmFuc3BvcnRFZGdlTGFiZWxWYWx1ZSgpIHsKKwkJUGlwZVRyYW5zcG9ydEVkZ2VMYWJlbFZhbHVlSW1wbCBwaXBlVHJhbnNwb3J0RWRnZUxhYmVsVmFsdWUgPSBuZXcgUGlwZVRyYW5zcG9ydEVkZ2VMYWJlbFZhbHVlSW1wbCgpOworCQlyZXR1cm4gcGlwZVRyYW5zcG9ydEVkZ2VMYWJlbFZhbHVlOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBUcmFuc3BvcnRQYWNrYWdlIGdldFRyYW5zcG9ydFBhY2thZ2UoKSB7CisJCXJldHVybiAoVHJhbnNwb3J0UGFja2FnZSlnZXRFUGFja2FnZSgpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGRlcHJlY2F0ZWQKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQERlcHJlY2F0ZWQKKwlwdWJsaWMgc3RhdGljIFRyYW5zcG9ydFBhY2thZ2UgZ2V0UGFja2FnZSgpIHsKKwkJcmV0dXJuIFRyYW5zcG9ydFBhY2thZ2UuZUlOU1RBTkNFOworCX0KKworfSAvL1RyYW5zcG9ydEZhY3RvcnlJbXBsCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udHJhbnNwb3J0L3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL3RyYW5zcG9ydC9pbXBsL1RyYW5zcG9ydFBhY2thZ2VJbXBsLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udHJhbnNwb3J0L3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL3RyYW5zcG9ydC9pbXBsL1RyYW5zcG9ydFBhY2thZ2VJbXBsLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTlhNmRiYQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS50cmFuc3BvcnQvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvdHJhbnNwb3J0L2ltcGwvVHJhbnNwb3J0UGFja2FnZUltcGwuamF2YQpAQCAtMCwwICsxLDMzMiBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLnRyYW5zcG9ydC5pbXBsOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQXR0cmlidXRlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FUmVmZXJlbmNlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FY29yZVBhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLmltcGwuRVBhY2thZ2VJbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5HcmFwaFBhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLk1vZGlmaWVyUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmVkZ2VzLkVkZ2VzUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLnRyYW5zcG9ydC5QaXBlU3R5bGVUcmFuc3BvcnRTeXN0ZW07CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy50cmFuc3BvcnQuUGlwZVRyYW5zcG9ydEVkZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy50cmFuc3BvcnQuUGlwZVRyYW5zcG9ydEVkZ2VMYWJlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLnRyYW5zcG9ydC5QaXBlVHJhbnNwb3J0RWRnZUxhYmVsVmFsdWU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy50cmFuc3BvcnQuVHJhbnNwb3J0RmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLnRyYW5zcG9ydC5UcmFuc3BvcnRQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMudHJhbnNwb3J0LlRyYW5zcG9ydFN5c3RlbTsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIG1vZGVsIDxiPlBhY2thZ2U8L2I+LgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBUcmFuc3BvcnRQYWNrYWdlSW1wbCBleHRlbmRzIEVQYWNrYWdlSW1wbCBpbXBsZW1lbnRzIFRyYW5zcG9ydFBhY2thZ2UgeworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByaXZhdGUgRUNsYXNzIHBpcGVTdHlsZVRyYW5zcG9ydFN5c3RlbUVDbGFzcyA9IG51bGw7CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcml2YXRlIEVDbGFzcyB0cmFuc3BvcnRTeXN0ZW1FQ2xhc3MgPSBudWxsOworCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJpdmF0ZSBFQ2xhc3MgcGlwZVRyYW5zcG9ydEVkZ2VFQ2xhc3MgPSBudWxsOworCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJpdmF0ZSBFQ2xhc3MgcGlwZVRyYW5zcG9ydEVkZ2VMYWJlbEVDbGFzcyA9IG51bGw7CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcml2YXRlIEVDbGFzcyBwaXBlVHJhbnNwb3J0RWRnZUxhYmVsVmFsdWVFQ2xhc3MgPSBudWxsOworCisJLyoqCisJICogQ3JlYXRlcyBhbiBpbnN0YW5jZSBvZiB0aGUgbW9kZWwgPGI+UGFja2FnZTwvYj4sIHJlZ2lzdGVyZWQgd2l0aAorCSAqIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRVBhY2thZ2UuUmVnaXN0cnkgRVBhY2thZ2UuUmVnaXN0cnl9IGJ5IHRoZSBwYWNrYWdlCisJICogcGFja2FnZSBVUkkgdmFsdWUuCisJICogPHA+Tm90ZTogdGhlIGNvcnJlY3Qgd2F5IHRvIGNyZWF0ZSB0aGUgcGFja2FnZSBpcyB2aWEgdGhlIHN0YXRpYworCSAqIGZhY3RvcnkgbWV0aG9kIHtAbGluayAjaW5pdCBpbml0KCl9LCB3aGljaCBhbHNvIHBlcmZvcm1zCisJICogaW5pdGlhbGl6YXRpb24gb2YgdGhlIHBhY2thZ2UsIG9yIHJldHVybnMgdGhlIHJlZ2lzdGVyZWQgcGFja2FnZSwKKwkgKiBpZiBvbmUgYWxyZWFkeSBleGlzdHMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FUGFja2FnZS5SZWdpc3RyeQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy50cmFuc3BvcnQuVHJhbnNwb3J0UGFja2FnZSNlTlNfVVJJCisJICogQHNlZSAjaW5pdCgpCisJICogQGdlbmVyYXRlZAorCSAqLworCXByaXZhdGUgVHJhbnNwb3J0UGFja2FnZUltcGwoKSB7CisJCXN1cGVyKGVOU19VUkksIFRyYW5zcG9ydEZhY3RvcnkuZUlOU1RBTkNFKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcml2YXRlIHN0YXRpYyBib29sZWFuIGlzSW5pdGVkID0gZmFsc2U7CisKKwkvKioKKwkgKiBDcmVhdGVzLCByZWdpc3RlcnMsIGFuZCBpbml0aWFsaXplcyB0aGUgPGI+UGFja2FnZTwvYj4gZm9yIHRoaXMgbW9kZWwsIGFuZCBmb3IgYW55IG90aGVycyB1cG9uIHdoaWNoIGl0IGRlcGVuZHMuCisJICogCisJICogPHA+VGhpcyBtZXRob2QgaXMgdXNlZCB0byBpbml0aWFsaXplIHtAbGluayBUcmFuc3BvcnRQYWNrYWdlI2VJTlNUQU5DRX0gd2hlbiB0aGF0IGZpZWxkIGlzIGFjY2Vzc2VkLgorCSAqIENsaWVudHMgc2hvdWxkIG5vdCBpbnZva2UgaXQgZGlyZWN0bHkuIEluc3RlYWQsIHRoZXkgc2hvdWxkIHNpbXBseSBhY2Nlc3MgdGhhdCBmaWVsZCB0byBvYnRhaW4gdGhlIHBhY2thZ2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNlTlNfVVJJCisJICogQHNlZSAjY3JlYXRlUGFja2FnZUNvbnRlbnRzKCkKKwkgKiBAc2VlICNpbml0aWFsaXplUGFja2FnZUNvbnRlbnRzKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHN0YXRpYyBUcmFuc3BvcnRQYWNrYWdlIGluaXQoKSB7CisJCWlmIChpc0luaXRlZCkgcmV0dXJuIChUcmFuc3BvcnRQYWNrYWdlKUVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVQYWNrYWdlKFRyYW5zcG9ydFBhY2thZ2UuZU5TX1VSSSk7CisKKwkJLy8gT2J0YWluIG9yIGNyZWF0ZSBhbmQgcmVnaXN0ZXIgcGFja2FnZQorCQlUcmFuc3BvcnRQYWNrYWdlSW1wbCB0aGVUcmFuc3BvcnRQYWNrYWdlID0gKFRyYW5zcG9ydFBhY2thZ2VJbXBsKShFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXQoZU5TX1VSSSkgaW5zdGFuY2VvZiBUcmFuc3BvcnRQYWNrYWdlSW1wbCA/IEVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldChlTlNfVVJJKSA6IG5ldyBUcmFuc3BvcnRQYWNrYWdlSW1wbCgpKTsKKworCQlpc0luaXRlZCA9IHRydWU7CisKKwkJLy8gSW5pdGlhbGl6ZSBzaW1wbGUgZGVwZW5kZW5jaWVzCisJCUVkZ2VzUGFja2FnZS5lSU5TVEFOQ0UuZUNsYXNzKCk7CisKKwkJLy8gQ3JlYXRlIHBhY2thZ2UgbWV0YS1kYXRhIG9iamVjdHMKKwkJdGhlVHJhbnNwb3J0UGFja2FnZS5jcmVhdGVQYWNrYWdlQ29udGVudHMoKTsKKworCQkvLyBJbml0aWFsaXplIGNyZWF0ZWQgbWV0YS1kYXRhCisJCXRoZVRyYW5zcG9ydFBhY2thZ2UuaW5pdGlhbGl6ZVBhY2thZ2VDb250ZW50cygpOworCisJCS8vIE1hcmsgbWV0YS1kYXRhIHRvIGluZGljYXRlIGl0IGNhbid0IGJlIGNoYW5nZWQKKwkJdGhlVHJhbnNwb3J0UGFja2FnZS5mcmVlemUoKTsKKworICAKKwkJLy8gVXBkYXRlIHRoZSByZWdpc3RyeSBhbmQgcmV0dXJuIHRoZSBwYWNrYWdlCisJCUVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLnB1dChUcmFuc3BvcnRQYWNrYWdlLmVOU19VUkksIHRoZVRyYW5zcG9ydFBhY2thZ2UpOworCQlyZXR1cm4gdGhlVHJhbnNwb3J0UGFja2FnZTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUNsYXNzIGdldFBpcGVTdHlsZVRyYW5zcG9ydFN5c3RlbSgpIHsKKwkJcmV0dXJuIHBpcGVTdHlsZVRyYW5zcG9ydFN5c3RlbUVDbGFzczsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRVJlZmVyZW5jZSBnZXRQaXBlU3R5bGVUcmFuc3BvcnRTeXN0ZW1fSW5UcmFuc3BvcnRFZGdlcygpIHsKKwkJcmV0dXJuIChFUmVmZXJlbmNlKXBpcGVTdHlsZVRyYW5zcG9ydFN5c3RlbUVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDApOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFUmVmZXJlbmNlIGdldFBpcGVTdHlsZVRyYW5zcG9ydFN5c3RlbV9PdXRUcmFuc3BvcnRFZGdlcygpIHsKKwkJcmV0dXJuIChFUmVmZXJlbmNlKXBpcGVTdHlsZVRyYW5zcG9ydFN5c3RlbUVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDEpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQXR0cmlidXRlIGdldFBpcGVTdHlsZVRyYW5zcG9ydFN5c3RlbV9NYXhDYXBhY2l0eSgpIHsKKwkJcmV0dXJuIChFQXR0cmlidXRlKXBpcGVTdHlsZVRyYW5zcG9ydFN5c3RlbUVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDIpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQ2xhc3MgZ2V0VHJhbnNwb3J0U3lzdGVtKCkgeworCQlyZXR1cm4gdHJhbnNwb3J0U3lzdGVtRUNsYXNzOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQ2xhc3MgZ2V0UGlwZVRyYW5zcG9ydEVkZ2UoKSB7CisJCXJldHVybiBwaXBlVHJhbnNwb3J0RWRnZUVDbGFzczsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUNsYXNzIGdldFBpcGVUcmFuc3BvcnRFZGdlTGFiZWwoKSB7CisJCXJldHVybiBwaXBlVHJhbnNwb3J0RWRnZUxhYmVsRUNsYXNzOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQ2xhc3MgZ2V0UGlwZVRyYW5zcG9ydEVkZ2VMYWJlbFZhbHVlKCkgeworCQlyZXR1cm4gcGlwZVRyYW5zcG9ydEVkZ2VMYWJlbFZhbHVlRUNsYXNzOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQXR0cmlidXRlIGdldFBpcGVUcmFuc3BvcnRFZGdlTGFiZWxWYWx1ZV9NYXhGbG93KCkgeworCQlyZXR1cm4gKEVBdHRyaWJ1dGUpcGlwZVRyYW5zcG9ydEVkZ2VMYWJlbFZhbHVlRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVBdHRyaWJ1dGUgZ2V0UGlwZVRyYW5zcG9ydEVkZ2VMYWJlbFZhbHVlX1RpbWVQZXJpb2QoKSB7CisJCXJldHVybiAoRUF0dHJpYnV0ZSlwaXBlVHJhbnNwb3J0RWRnZUxhYmVsVmFsdWVFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgxKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVHJhbnNwb3J0RmFjdG9yeSBnZXRUcmFuc3BvcnRGYWN0b3J5KCkgeworCQlyZXR1cm4gKFRyYW5zcG9ydEZhY3RvcnkpZ2V0RUZhY3RvcnlJbnN0YW5jZSgpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByaXZhdGUgYm9vbGVhbiBpc0NyZWF0ZWQgPSBmYWxzZTsKKworCS8qKgorCSAqIENyZWF0ZXMgdGhlIG1ldGEtbW9kZWwgb2JqZWN0cyBmb3IgdGhlIHBhY2thZ2UuICBUaGlzIG1ldGhvZCBpcworCSAqIGd1YXJkZWQgdG8gaGF2ZSBubyBhZmZlY3Qgb24gYW55IGludm9jYXRpb24gYnV0IGl0cyBmaXJzdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBjcmVhdGVQYWNrYWdlQ29udGVudHMoKSB7CisJCWlmIChpc0NyZWF0ZWQpIHJldHVybjsKKwkJaXNDcmVhdGVkID0gdHJ1ZTsKKworCQkvLyBDcmVhdGUgY2xhc3NlcyBhbmQgdGhlaXIgZmVhdHVyZXMKKwkJcGlwZVN0eWxlVHJhbnNwb3J0U3lzdGVtRUNsYXNzID0gY3JlYXRlRUNsYXNzKFBJUEVfU1RZTEVfVFJBTlNQT1JUX1NZU1RFTSk7CisJCWNyZWF0ZUVSZWZlcmVuY2UocGlwZVN0eWxlVHJhbnNwb3J0U3lzdGVtRUNsYXNzLCBQSVBFX1NUWUxFX1RSQU5TUE9SVF9TWVNURU1fX0lOX1RSQU5TUE9SVF9FREdFUyk7CisJCWNyZWF0ZUVSZWZlcmVuY2UocGlwZVN0eWxlVHJhbnNwb3J0U3lzdGVtRUNsYXNzLCBQSVBFX1NUWUxFX1RSQU5TUE9SVF9TWVNURU1fX09VVF9UUkFOU1BPUlRfRURHRVMpOworCQljcmVhdGVFQXR0cmlidXRlKHBpcGVTdHlsZVRyYW5zcG9ydFN5c3RlbUVDbGFzcywgUElQRV9TVFlMRV9UUkFOU1BPUlRfU1lTVEVNX19NQVhfQ0FQQUNJVFkpOworCisJCXRyYW5zcG9ydFN5c3RlbUVDbGFzcyA9IGNyZWF0ZUVDbGFzcyhUUkFOU1BPUlRfU1lTVEVNKTsKKworCQlwaXBlVHJhbnNwb3J0RWRnZUVDbGFzcyA9IGNyZWF0ZUVDbGFzcyhQSVBFX1RSQU5TUE9SVF9FREdFKTsKKworCQlwaXBlVHJhbnNwb3J0RWRnZUxhYmVsRUNsYXNzID0gY3JlYXRlRUNsYXNzKFBJUEVfVFJBTlNQT1JUX0VER0VfTEFCRUwpOworCisJCXBpcGVUcmFuc3BvcnRFZGdlTGFiZWxWYWx1ZUVDbGFzcyA9IGNyZWF0ZUVDbGFzcyhQSVBFX1RSQU5TUE9SVF9FREdFX0xBQkVMX1ZBTFVFKTsKKwkJY3JlYXRlRUF0dHJpYnV0ZShwaXBlVHJhbnNwb3J0RWRnZUxhYmVsVmFsdWVFQ2xhc3MsIFBJUEVfVFJBTlNQT1JUX0VER0VfTEFCRUxfVkFMVUVfX01BWF9GTE9XKTsKKwkJY3JlYXRlRUF0dHJpYnV0ZShwaXBlVHJhbnNwb3J0RWRnZUxhYmVsVmFsdWVFQ2xhc3MsIFBJUEVfVFJBTlNQT1JUX0VER0VfTEFCRUxfVkFMVUVfX1RJTUVfUEVSSU9EKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcml2YXRlIGJvb2xlYW4gaXNJbml0aWFsaXplZCA9IGZhbHNlOworCisJLyoqCisJICogQ29tcGxldGUgdGhlIGluaXRpYWxpemF0aW9uIG9mIHRoZSBwYWNrYWdlIGFuZCBpdHMgbWV0YS1tb2RlbC4gIFRoaXMKKwkgKiBtZXRob2QgaXMgZ3VhcmRlZCB0byBoYXZlIG5vIGFmZmVjdCBvbiBhbnkgaW52b2NhdGlvbiBidXQgaXRzIGZpcnN0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIGluaXRpYWxpemVQYWNrYWdlQ29udGVudHMoKSB7CisJCWlmIChpc0luaXRpYWxpemVkKSByZXR1cm47CisJCWlzSW5pdGlhbGl6ZWQgPSB0cnVlOworCisJCS8vIEluaXRpYWxpemUgcGFja2FnZQorCQlzZXROYW1lKGVOQU1FKTsKKwkJc2V0TnNQcmVmaXgoZU5TX1BSRUZJWCk7CisJCXNldE5zVVJJKGVOU19VUkkpOworCisJCS8vIE9idGFpbiBvdGhlciBkZXBlbmRlbnQgcGFja2FnZXMKKwkJRWNvcmVQYWNrYWdlIHRoZUVjb3JlUGFja2FnZSA9IChFY29yZVBhY2thZ2UpRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RVBhY2thZ2UoRWNvcmVQYWNrYWdlLmVOU19VUkkpOworCQlHcmFwaFBhY2thZ2UgdGhlR3JhcGhQYWNrYWdlID0gKEdyYXBoUGFja2FnZSlFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShHcmFwaFBhY2thZ2UuZU5TX1VSSSk7CisJCUVkZ2VzUGFja2FnZSB0aGVFZGdlc1BhY2thZ2UgPSAoRWRnZXNQYWNrYWdlKUVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVQYWNrYWdlKEVkZ2VzUGFja2FnZS5lTlNfVVJJKTsKKwkJTW9kaWZpZXJQYWNrYWdlIHRoZU1vZGlmaWVyUGFja2FnZSA9IChNb2RpZmllclBhY2thZ2UpRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RVBhY2thZ2UoTW9kaWZpZXJQYWNrYWdlLmVOU19VUkkpOworCisJCS8vIENyZWF0ZSB0eXBlIHBhcmFtZXRlcnMKKworCQkvLyBTZXQgYm91bmRzIGZvciB0eXBlIHBhcmFtZXRlcnMKKworCQkvLyBBZGQgc3VwZXJ0eXBlcyB0byBjbGFzc2VzCisJCXBpcGVTdHlsZVRyYW5zcG9ydFN5c3RlbUVDbGFzcy5nZXRFU3VwZXJUeXBlcygpLmFkZCh0aGlzLmdldFRyYW5zcG9ydFN5c3RlbSgpKTsKKwkJdHJhbnNwb3J0U3lzdGVtRUNsYXNzLmdldEVTdXBlclR5cGVzKCkuYWRkKHRoZUdyYXBoUGFja2FnZS5nZXROb2RlKCkpOworCQlwaXBlVHJhbnNwb3J0RWRnZUVDbGFzcy5nZXRFU3VwZXJUeXBlcygpLmFkZCh0aGVFZGdlc1BhY2thZ2UuZ2V0UG9wdWxhdGlvbkVkZ2UoKSk7CisJCXBpcGVUcmFuc3BvcnRFZGdlTGFiZWxFQ2xhc3MuZ2V0RVN1cGVyVHlwZXMoKS5hZGQodGhlR3JhcGhQYWNrYWdlLmdldEVkZ2VMYWJlbCgpKTsKKwkJcGlwZVRyYW5zcG9ydEVkZ2VMYWJlbEVDbGFzcy5nZXRFU3VwZXJUeXBlcygpLmFkZCh0aGVNb2RpZmllclBhY2thZ2UuZ2V0TW9kaWZpYWJsZSgpKTsKKwkJcGlwZVRyYW5zcG9ydEVkZ2VMYWJlbFZhbHVlRUNsYXNzLmdldEVTdXBlclR5cGVzKCkuYWRkKHRoZUdyYXBoUGFja2FnZS5nZXRMYWJlbFZhbHVlKCkpOworCisJCS8vIEluaXRpYWxpemUgY2xhc3NlcyBhbmQgZmVhdHVyZXM7IGFkZCBvcGVyYXRpb25zIGFuZCBwYXJhbWV0ZXJzCisJCWluaXRFQ2xhc3MocGlwZVN0eWxlVHJhbnNwb3J0U3lzdGVtRUNsYXNzLCBQaXBlU3R5bGVUcmFuc3BvcnRTeXN0ZW0uY2xhc3MsICJQaXBlU3R5bGVUcmFuc3BvcnRTeXN0ZW0iLCAhSVNfQUJTVFJBQ1QsICFJU19JTlRFUkZBQ0UsIElTX0dFTkVSQVRFRF9JTlNUQU5DRV9DTEFTUyk7CisJCWluaXRFUmVmZXJlbmNlKGdldFBpcGVTdHlsZVRyYW5zcG9ydFN5c3RlbV9JblRyYW5zcG9ydEVkZ2VzKCksIHRoaXMuZ2V0UGlwZVRyYW5zcG9ydEVkZ2UoKSwgbnVsbCwgImluVHJhbnNwb3J0RWRnZXMiLCBudWxsLCAwLCAtMSwgUGlwZVN0eWxlVHJhbnNwb3J0U3lzdGVtLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19DT01QT1NJVEUsIElTX1JFU09MVkVfUFJPWElFUywgIUlTX1VOU0VUVEFCTEUsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOworCQlpbml0RVJlZmVyZW5jZShnZXRQaXBlU3R5bGVUcmFuc3BvcnRTeXN0ZW1fT3V0VHJhbnNwb3J0RWRnZXMoKSwgdGhpcy5nZXRQaXBlVHJhbnNwb3J0RWRnZSgpLCBudWxsLCAib3V0VHJhbnNwb3J0RWRnZXMiLCBudWxsLCAwLCAtMSwgUGlwZVN0eWxlVHJhbnNwb3J0U3lzdGVtLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19DT01QT1NJVEUsIElTX1JFU09MVkVfUFJPWElFUywgIUlTX1VOU0VUVEFCTEUsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOworCQlpbml0RUF0dHJpYnV0ZShnZXRQaXBlU3R5bGVUcmFuc3BvcnRTeXN0ZW1fTWF4Q2FwYWNpdHkoKSwgdGhlRWNvcmVQYWNrYWdlLmdldEVEb3VibGUoKSwgIm1heENhcGFjaXR5IiwgbnVsbCwgMCwgMSwgUGlwZVN0eWxlVHJhbnNwb3J0U3lzdGVtLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOworCisJCWluaXRFQ2xhc3ModHJhbnNwb3J0U3lzdGVtRUNsYXNzLCBUcmFuc3BvcnRTeXN0ZW0uY2xhc3MsICJUcmFuc3BvcnRTeXN0ZW0iLCBJU19BQlNUUkFDVCwgIUlTX0lOVEVSRkFDRSwgSVNfR0VORVJBVEVEX0lOU1RBTkNFX0NMQVNTKTsKKworCQlpbml0RUNsYXNzKHBpcGVUcmFuc3BvcnRFZGdlRUNsYXNzLCBQaXBlVHJhbnNwb3J0RWRnZS5jbGFzcywgIlBpcGVUcmFuc3BvcnRFZGdlIiwgIUlTX0FCU1RSQUNULCAhSVNfSU5URVJGQUNFLCBJU19HRU5FUkFURURfSU5TVEFOQ0VfQ0xBU1MpOworCisJCWluaXRFQ2xhc3MocGlwZVRyYW5zcG9ydEVkZ2VMYWJlbEVDbGFzcywgUGlwZVRyYW5zcG9ydEVkZ2VMYWJlbC5jbGFzcywgIlBpcGVUcmFuc3BvcnRFZGdlTGFiZWwiLCAhSVNfQUJTVFJBQ1QsICFJU19JTlRFUkZBQ0UsIElTX0dFTkVSQVRFRF9JTlNUQU5DRV9DTEFTUyk7CisKKwkJaW5pdEVDbGFzcyhwaXBlVHJhbnNwb3J0RWRnZUxhYmVsVmFsdWVFQ2xhc3MsIFBpcGVUcmFuc3BvcnRFZGdlTGFiZWxWYWx1ZS5jbGFzcywgIlBpcGVUcmFuc3BvcnRFZGdlTGFiZWxWYWx1ZSIsICFJU19BQlNUUkFDVCwgIUlTX0lOVEVSRkFDRSwgSVNfR0VORVJBVEVEX0lOU1RBTkNFX0NMQVNTKTsKKwkJaW5pdEVBdHRyaWJ1dGUoZ2V0UGlwZVRyYW5zcG9ydEVkZ2VMYWJlbFZhbHVlX01heEZsb3coKSwgdGhlRWNvcmVQYWNrYWdlLmdldEVEb3VibGUoKSwgIm1heEZsb3ciLCBudWxsLCAwLCAxLCBQaXBlVHJhbnNwb3J0RWRnZUxhYmVsVmFsdWUuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7CisJCWluaXRFQXR0cmlidXRlKGdldFBpcGVUcmFuc3BvcnRFZGdlTGFiZWxWYWx1ZV9UaW1lUGVyaW9kKCksIHRoZUVjb3JlUGFja2FnZS5nZXRFTG9uZygpLCAidGltZVBlcmlvZCIsIG51bGwsIDAsIDEsIFBpcGVUcmFuc3BvcnRFZGdlTGFiZWxWYWx1ZS5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsKKworCQkvLyBDcmVhdGUgcmVzb3VyY2UKKwkJY3JlYXRlUmVzb3VyY2UoZU5TX1VSSSk7CisJfQorCit9IC8vVHJhbnNwb3J0UGFja2FnZUltcGwKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS50cmFuc3BvcnQvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvdHJhbnNwb3J0L2ltcGwvVHJhbnNwb3J0U3lzdGVtSW1wbC5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnRyYW5zcG9ydC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy90cmFuc3BvcnQvaW1wbC9UcmFuc3BvcnRTeXN0ZW1JbXBsLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjU5Mzc0MwotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS50cmFuc3BvcnQvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvdHJhbnNwb3J0L2ltcGwvVHJhbnNwb3J0U3lzdGVtSW1wbC5qYXZhCkBAIC0wLDAgKzEsNzEgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy50cmFuc3BvcnQuaW1wbDsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5pbXBsLk5vZGVJbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMudHJhbnNwb3J0LlRyYW5zcG9ydFBhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy50cmFuc3BvcnQuVHJhbnNwb3J0U3lzdGVtOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiBBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+U3lzdGVtPC9iPjwvZW0+Jy4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogPHA+CisgKiA8L3A+CisgKgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgYWJzdHJhY3QgY2xhc3MgVHJhbnNwb3J0U3lzdGVtSW1wbCBleHRlbmRzIE5vZGVJbXBsIGltcGxlbWVudHMgVHJhbnNwb3J0U3lzdGVtIHsKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJcHJvdGVjdGVkIFRyYW5zcG9ydFN5c3RlbUltcGwoKSB7CisJCXN1cGVyKCk7CQkJCQorCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCBFQ2xhc3MgZVN0YXRpY0NsYXNzKCkgeworCQlyZXR1cm4gVHJhbnNwb3J0UGFja2FnZS5MaXRlcmFscy5UUkFOU1BPUlRfU1lTVEVNOworCX0KKwkKKwkvKioKKwkgKiBNYWtlIHN1cmUgdGhhdCB0aGlzIHRyYW5zcG9ydCBzeXN0ZW0gaXMgc2FuZSgpLiBUaGF0IGlzIHRoYXQgaXQgaGFzIGFsbCBvZiB0aGUgcHJvcGVydGllcyB0aGF0CisJICogYSB0cmFuc3BvcnQgc3lzdGVtIG11c3QgaGF2ZS4uLm5hbWVseSBzb21lIHBvcHVsYXRpb24gbGFiZWwuCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIGJvb2xlYW4gc2FuZSgpIHsKKwkJYm9vbGVhbiByZXRWYWx1ZSA9IHN1cGVyLnNhbmUoKTsKKwkJCisvLwkJLy8gQSBUcmFuc3BvcnRhdGlvbiBTeXN0ZW0gc2hvdWxkIGhhdmUgYSBwb3B1bGF0aW9uIGxhYmVsCisJCS8vIE5vdCBjbGVhciB0aGF0IHRoaXMgaXMgdHJ1ZQorLy8JCXJldFZhbHVlID0gZmFsc2U7CisvLwkJZm9yIChOb2RlTGFiZWwgbDp0aGlzLmdldExhYmVscygpKSB7CisvLwkJCS8vIEZvdW5kIGEgcG9wdWxhdGlvbiBsYWJlbD8KKy8vCQkJaWYgKGwgaW5zdGFuY2VvZiBQb3B1bGF0aW9uTGFiZWwpIHsKKy8vCQkJCS8vIFllcworLy8JCQkJcmV0VmFsdWUgPSB0cnVlOworLy8JCQkJYnJlYWs7CisvLwkJCX0gLy8gaWYgUG9wdWxhdGlvbkxhYmVsCisvLwkJfQorLy8JCWFzc2VydCByZXRWYWx1ZTsKKwkJcmV0dXJuIHJldFZhbHVlOworCX0gLy8gc2FuZQorCit9IC8vVHJhbnNwb3J0U3lzdGVtSW1wbApkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnRyYW5zcG9ydC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy90cmFuc3BvcnQvcHJvdmlkZXIvUGlwZVN0eWxlVHJhbnNwb3J0U3lzdGVtSXRlbVByb3ZpZGVyLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udHJhbnNwb3J0L3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL3RyYW5zcG9ydC9wcm92aWRlci9QaXBlU3R5bGVUcmFuc3BvcnRTeXN0ZW1JdGVtUHJvdmlkZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMWFiMWZiCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnRyYW5zcG9ydC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy90cmFuc3BvcnQvcHJvdmlkZXIvUGlwZVN0eWxlVHJhbnNwb3J0U3lzdGVtSXRlbVByb3ZpZGVyLmphdmEKQEAgLTAsMCArMSwyMjUgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy50cmFuc3BvcnQucHJvdmlkZXI7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTEgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5BZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb247CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuVVJJOworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JRWRpdGluZ0RvbWFpbkl0ZW1Qcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbUxhYmVsUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1Qcm9wZXJ0eVNvdXJjZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JU3RydWN0dXJlZEl0ZW1Db250ZW50UHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVRyZWVJdGVtQ29udGVudFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuVmlld2VyTm90aWZpY2F0aW9uOworCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS5HZW9ncmFwaGljTmFtZXM7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy50cmFuc3BvcnQuUGlwZVN0eWxlVHJhbnNwb3J0U3lzdGVtOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMudHJhbnNwb3J0LlRyYW5zcG9ydFBhY2thZ2U7CisKKy8qKgorICogVGhpcyBpcyB0aGUgaXRlbSBwcm92aWRlciBhZGFwdGVyIGZvciBhIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLnRyYW5zcG9ydC5QaXBlU3R5bGVUcmFuc3BvcnRTeXN0ZW19IG9iamVjdC4KKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIFBpcGVTdHlsZVRyYW5zcG9ydFN5c3RlbUl0ZW1Qcm92aWRlcgorCWV4dGVuZHMgVHJhbnNwb3J0U3lzdGVtSXRlbVByb3ZpZGVyCisJaW1wbGVtZW50cworCQlJRWRpdGluZ0RvbWFpbkl0ZW1Qcm92aWRlciwKKwkJSVN0cnVjdHVyZWRJdGVtQ29udGVudFByb3ZpZGVyLAorCQlJVHJlZUl0ZW1Db250ZW50UHJvdmlkZXIsCisJCUlJdGVtTGFiZWxQcm92aWRlciwKKwkJSUl0ZW1Qcm9wZXJ0eVNvdXJjZSB7CisJLyoqCisJICogVGhpcyBjb25zdHJ1Y3RzIGFuIGluc3RhbmNlIGZyb20gYSBmYWN0b3J5IGFuZCBhIG5vdGlmaWVyLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBQaXBlU3R5bGVUcmFuc3BvcnRTeXN0ZW1JdGVtUHJvdmlkZXIoQWRhcHRlckZhY3RvcnkgYWRhcHRlckZhY3RvcnkpIHsKKwkJc3VwZXIoYWRhcHRlckZhY3RvcnkpOworCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyB0aGUgcHJvcGVydHkgZGVzY3JpcHRvcnMgZm9yIHRoZSBhZGFwdGVkIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBMaXN0PElJdGVtUHJvcGVydHlEZXNjcmlwdG9yPiBnZXRQcm9wZXJ0eURlc2NyaXB0b3JzKE9iamVjdCBvYmplY3QpIHsKKwkJaWYgKGl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzID09IG51bGwpIHsKKwkJCXN1cGVyLmdldFByb3BlcnR5RGVzY3JpcHRvcnMob2JqZWN0KTsKKworCQkJYWRkSW5UcmFuc3BvcnRFZGdlc1Byb3BlcnR5RGVzY3JpcHRvcihvYmplY3QpOworCQkJYWRkT3V0VHJhbnNwb3J0RWRnZXNQcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0KTsKKwkJCWFkZE1heENhcGFjaXR5UHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCk7CisJCX0KKwkJcmV0dXJuIGl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzOworCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyBhIHByb3BlcnR5IGRlc2NyaXB0b3IgZm9yIHRoZSBJbiBUcmFuc3BvcnQgRWRnZXMgZmVhdHVyZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBhZGRJblRyYW5zcG9ydEVkZ2VzUHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdCBvYmplY3QpIHsKKwkJaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMuYWRkCisJCQkoY3JlYXRlSXRlbVByb3BlcnR5RGVzY3JpcHRvcgorCQkJCSgoKENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnkpYWRhcHRlckZhY3RvcnkpLmdldFJvb3RBZGFwdGVyRmFjdG9yeSgpLAorCQkJCSBnZXRSZXNvdXJjZUxvY2F0b3IoKSwKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfUGlwZVN0eWxlVHJhbnNwb3J0U3lzdGVtX2luVHJhbnNwb3J0RWRnZXNfZmVhdHVyZSIpLAorCQkJCSBnZXRTdHJpbmcoIl9VSV9Qcm9wZXJ0eURlc2NyaXB0b3JfZGVzY3JpcHRpb24iLCAiX1VJX1BpcGVTdHlsZVRyYW5zcG9ydFN5c3RlbV9pblRyYW5zcG9ydEVkZ2VzX2ZlYXR1cmUiLCAiX1VJX1BpcGVTdHlsZVRyYW5zcG9ydFN5c3RlbV90eXBlIiksCisJCQkJIFRyYW5zcG9ydFBhY2thZ2UuTGl0ZXJhbHMuUElQRV9TVFlMRV9UUkFOU1BPUlRfU1lTVEVNX19JTl9UUkFOU1BPUlRfRURHRVMsCisJCQkJIHRydWUsCisJCQkJIGZhbHNlLAorCQkJCSB0cnVlLAorCQkJCSBudWxsLAorCQkJCSBudWxsLAorCQkJCSBudWxsKSk7CisJfQorCisJLyoqCisJICogVGhpcyBhZGRzIGEgcHJvcGVydHkgZGVzY3JpcHRvciBmb3IgdGhlIE91dCBUcmFuc3BvcnQgRWRnZXMgZmVhdHVyZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBhZGRPdXRUcmFuc3BvcnRFZGdlc1Byb3BlcnR5RGVzY3JpcHRvcihPYmplY3Qgb2JqZWN0KSB7CisJCWl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzLmFkZAorCQkJKGNyZWF0ZUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IKKwkJCQkoKChDb21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5KWFkYXB0ZXJGYWN0b3J5KS5nZXRSb290QWRhcHRlckZhY3RvcnkoKSwKKwkJCQkgZ2V0UmVzb3VyY2VMb2NhdG9yKCksCisJCQkJIGdldFN0cmluZygiX1VJX1BpcGVTdHlsZVRyYW5zcG9ydFN5c3RlbV9vdXRUcmFuc3BvcnRFZGdlc19mZWF0dXJlIiksCisJCQkJIGdldFN0cmluZygiX1VJX1Byb3BlcnR5RGVzY3JpcHRvcl9kZXNjcmlwdGlvbiIsICJfVUlfUGlwZVN0eWxlVHJhbnNwb3J0U3lzdGVtX291dFRyYW5zcG9ydEVkZ2VzX2ZlYXR1cmUiLCAiX1VJX1BpcGVTdHlsZVRyYW5zcG9ydFN5c3RlbV90eXBlIiksCisJCQkJIFRyYW5zcG9ydFBhY2thZ2UuTGl0ZXJhbHMuUElQRV9TVFlMRV9UUkFOU1BPUlRfU1lTVEVNX19PVVRfVFJBTlNQT1JUX0VER0VTLAorCQkJCSB0cnVlLAorCQkJCSBmYWxzZSwKKwkJCQkgdHJ1ZSwKKwkJCQkgbnVsbCwKKwkJCQkgbnVsbCwKKwkJCQkgbnVsbCkpOworCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyBhIHByb3BlcnR5IGRlc2NyaXB0b3IgZm9yIHRoZSBNYXggQ2FwYWNpdHkgZmVhdHVyZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBhZGRNYXhDYXBhY2l0eVByb3BlcnR5RGVzY3JpcHRvcihPYmplY3Qgb2JqZWN0KSB7CisJCWl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzLmFkZAorCQkJKGNyZWF0ZUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IKKwkJCQkoKChDb21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5KWFkYXB0ZXJGYWN0b3J5KS5nZXRSb290QWRhcHRlckZhY3RvcnkoKSwKKwkJCQkgZ2V0UmVzb3VyY2VMb2NhdG9yKCksCisJCQkJIGdldFN0cmluZygiX1VJX1BpcGVTdHlsZVRyYW5zcG9ydFN5c3RlbV9tYXhDYXBhY2l0eV9mZWF0dXJlIiksCisJCQkJIGdldFN0cmluZygiX1VJX1Byb3BlcnR5RGVzY3JpcHRvcl9kZXNjcmlwdGlvbiIsICJfVUlfUGlwZVN0eWxlVHJhbnNwb3J0U3lzdGVtX21heENhcGFjaXR5X2ZlYXR1cmUiLCAiX1VJX1BpcGVTdHlsZVRyYW5zcG9ydFN5c3RlbV90eXBlIiksCisJCQkJIFRyYW5zcG9ydFBhY2thZ2UuTGl0ZXJhbHMuUElQRV9TVFlMRV9UUkFOU1BPUlRfU1lTVEVNX19NQVhfQ0FQQUNJVFksCisJCQkJIHRydWUsCisJCQkJIGZhbHNlLAorCQkJCSBmYWxzZSwKKwkJCQkgSXRlbVByb3BlcnR5RGVzY3JpcHRvci5SRUFMX1ZBTFVFX0lNQUdFLAorCQkJCSBudWxsLAorCQkJCSBudWxsKSk7CisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIFBpcGVTdHlsZVRyYW5zcG9ydFN5c3RlbS5naWYuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBPYmplY3QgZ2V0SW1hZ2UoT2JqZWN0IG9iamVjdCkgeworCQlyZXR1cm4gb3ZlcmxheUltYWdlKG9iamVjdCwgZ2V0UmVzb3VyY2VMb2NhdG9yKCkuZ2V0SW1hZ2UoImZ1bGwvY3VzdG9tMTYvYWlycG9ydC5wbmciKSk7CisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIHRoZSBsYWJlbCB0ZXh0IGZvciB0aGUgYWRhcHRlZCBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgU3RyaW5nIGdldFRleHRHZW4oT2JqZWN0IG9iamVjdCkgeworCQlVUkkgbGFiZWxWYWx1ZSA9ICgoUGlwZVN0eWxlVHJhbnNwb3J0U3lzdGVtKW9iamVjdCkuZ2V0VVJJKCk7CisJCVN0cmluZyBsYWJlbCA9IGxhYmVsVmFsdWUgPT0gbnVsbCA/IG51bGwgOiBsYWJlbFZhbHVlLnRvU3RyaW5nKCk7CisJCXJldHVybiBsYWJlbCA9PSBudWxsIHx8IGxhYmVsLmxlbmd0aCgpID09IDAgPworCQkJZ2V0U3RyaW5nKCJfVUlfUGlwZVN0eWxlVHJhbnNwb3J0U3lzdGVtX3R5cGUiKSA6CisJCQlnZXRTdHJpbmcoIl9VSV9QaXBlU3R5bGVUcmFuc3BvcnRTeXN0ZW1fdHlwZSIpICsgIiAiICsgbGFiZWw7CisJfQorCQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIHRoZSBsYWJlbCB0ZXh0IGZvciB0aGUgYWRhcHRlZCBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIFN0cmluZyBnZXRUZXh0KE9iamVjdCBvYmplY3QpIHsKKwkJUGlwZVN0eWxlVHJhbnNwb3J0U3lzdGVtIHN5c3RlbSA9ICAoKFBpcGVTdHlsZVRyYW5zcG9ydFN5c3RlbSlvYmplY3QpOworCQlmaW5hbCBVUkkgbGFiZWxVUkkgPSBzeXN0ZW0uZ2V0VVJJKCk7CisJCWZpbmFsIFN0cmluZyBsYXN0U2VnbWVudCA9IGxhYmVsVVJJLmxhc3RTZWdtZW50KCkudG9TdHJpbmcoKTsKKwkJU3RyaW5nIElTT0tleSA9IGxhc3RTZWdtZW50OworCQorCQkKKwkJZmluYWwgU3RyaW5nIGdlb05hbWUgPSBHZW9ncmFwaGljTmFtZXMuZ2V0TmFtZShJU09LZXkpOworCQkKKwkJZmluYWwgU3RyaW5nQnVpbGRlciBzYiA9IG5ldyBTdHJpbmdCdWlsZGVyKAorCQkJCWdlb05hbWUuc3RhcnRzV2l0aCgiISIpID8gSVNPS2V5IDogZ2VvTmFtZSk7CisJCQorCQlzYi5hcHBlbmQoIiAiK3N5c3RlbS5nZXRNYXhDYXBhY2l0eSgpKTsKKwkJcmV0dXJuIHNiLnRvU3RyaW5nKCk7CisJfQorCisJLyoqCisJICogVGhpcyBoYW5kbGVzIG1vZGVsIG5vdGlmaWNhdGlvbnMgYnkgY2FsbGluZyB7QGxpbmsgI3VwZGF0ZUNoaWxkcmVufSB0byB1cGRhdGUgYW55IGNhY2hlZAorCSAqIGNoaWxkcmVuIGFuZCBieSBjcmVhdGluZyBhIHZpZXdlciBub3RpZmljYXRpb24sIHdoaWNoIGl0IHBhc3NlcyB0byB7QGxpbmsgI2ZpcmVOb3RpZnlDaGFuZ2VkfS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBub3RpZnlDaGFuZ2VkKE5vdGlmaWNhdGlvbiBub3RpZmljYXRpb24pIHsKKwkJdXBkYXRlQ2hpbGRyZW4obm90aWZpY2F0aW9uKTsKKworCQlzd2l0Y2ggKG5vdGlmaWNhdGlvbi5nZXRGZWF0dXJlSUQoUGlwZVN0eWxlVHJhbnNwb3J0U3lzdGVtLmNsYXNzKSkgeworCQkJY2FzZSBUcmFuc3BvcnRQYWNrYWdlLlBJUEVfU1RZTEVfVFJBTlNQT1JUX1NZU1RFTV9fTUFYX0NBUEFDSVRZOgorCQkJCWZpcmVOb3RpZnlDaGFuZ2VkKG5ldyBWaWV3ZXJOb3RpZmljYXRpb24obm90aWZpY2F0aW9uLCBub3RpZmljYXRpb24uZ2V0Tm90aWZpZXIoKSwgZmFsc2UsIHRydWUpKTsKKwkJCQlyZXR1cm47CisJCX0KKwkJc3VwZXIubm90aWZ5Q2hhbmdlZChub3RpZmljYXRpb24pOworCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmVkaXQuY29tbWFuZC5Db21tYW5kUGFyYW1ldGVyfXMgZGVzY3JpYmluZyB0aGUgY2hpbGRyZW4KKwkgKiB0aGF0IGNhbiBiZSBjcmVhdGVkIHVuZGVyIHRoaXMgb2JqZWN0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIGNvbGxlY3ROZXdDaGlsZERlc2NyaXB0b3JzKENvbGxlY3Rpb248T2JqZWN0PiBuZXdDaGlsZERlc2NyaXB0b3JzLCBPYmplY3Qgb2JqZWN0KSB7CisJCXN1cGVyLmNvbGxlY3ROZXdDaGlsZERlc2NyaXB0b3JzKG5ld0NoaWxkRGVzY3JpcHRvcnMsIG9iamVjdCk7CisJfQorCit9CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udHJhbnNwb3J0L3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL3RyYW5zcG9ydC9wcm92aWRlci9QaXBlVHJhbnNwb3J0RWRnZUl0ZW1Qcm92aWRlci5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnRyYW5zcG9ydC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy90cmFuc3BvcnQvcHJvdmlkZXIvUGlwZVRyYW5zcG9ydEVkZ2VJdGVtUHJvdmlkZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMDMwNTc4Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnRyYW5zcG9ydC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy90cmFuc3BvcnQvcHJvdmlkZXIvUGlwZVRyYW5zcG9ydEVkZ2VJdGVtUHJvdmlkZXIuamF2YQpAQCAtMCwwICsxLDE1NCBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLnRyYW5zcG9ydC5wcm92aWRlcjsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAxMSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LkFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbjsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5SZXNvdXJjZUxvY2F0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlVSSTsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklFZGl0aW5nRG9tYWluSXRlbVByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtTGFiZWxQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbVByb3BlcnR5RGVzY3JpcHRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbVByb3BlcnR5U291cmNlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklTdHJ1Y3R1cmVkSXRlbUNvbnRlbnRQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JVHJlZUl0ZW1Db250ZW50UHJvdmlkZXI7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguR3JhcGhQYWNrYWdlOworCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5lZGdlcy5wcm92aWRlci5Qb3B1bGF0aW9uRWRnZUl0ZW1Qcm92aWRlcjsKKworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMudHJhbnNwb3J0LlBpcGVUcmFuc3BvcnRFZGdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMudHJhbnNwb3J0LlRyYW5zcG9ydEZhY3Rvcnk7CisKKy8qKgorICogVGhpcyBpcyB0aGUgaXRlbSBwcm92aWRlciBhZGFwdGVyIGZvciBhIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLnRyYW5zcG9ydC5QaXBlVHJhbnNwb3J0RWRnZX0gb2JqZWN0LgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgUGlwZVRyYW5zcG9ydEVkZ2VJdGVtUHJvdmlkZXIKKwlleHRlbmRzIFBvcHVsYXRpb25FZGdlSXRlbVByb3ZpZGVyCisJaW1wbGVtZW50cworCQlJRWRpdGluZ0RvbWFpbkl0ZW1Qcm92aWRlciwKKwkJSVN0cnVjdHVyZWRJdGVtQ29udGVudFByb3ZpZGVyLAorCQlJVHJlZUl0ZW1Db250ZW50UHJvdmlkZXIsCisJCUlJdGVtTGFiZWxQcm92aWRlciwKKwkJSUl0ZW1Qcm9wZXJ0eVNvdXJjZSB7CisJLyoqCisJICogVGhpcyBjb25zdHJ1Y3RzIGFuIGluc3RhbmNlIGZyb20gYSBmYWN0b3J5IGFuZCBhIG5vdGlmaWVyLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBQaXBlVHJhbnNwb3J0RWRnZUl0ZW1Qcm92aWRlcihBZGFwdGVyRmFjdG9yeSBhZGFwdGVyRmFjdG9yeSkgeworCQlzdXBlcihhZGFwdGVyRmFjdG9yeSk7CisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIHRoZSBwcm9wZXJ0eSBkZXNjcmlwdG9ycyBmb3IgdGhlIGFkYXB0ZWQgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIExpc3Q8SUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I+IGdldFByb3BlcnR5RGVzY3JpcHRvcnMoT2JqZWN0IG9iamVjdCkgeworCQlpZiAoaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMgPT0gbnVsbCkgeworCQkJc3VwZXIuZ2V0UHJvcGVydHlEZXNjcmlwdG9ycyhvYmplY3QpOworCisJCX0KKwkJcmV0dXJuIGl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzOworCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyBQaXBlVHJhbnNwb3J0RWRnZS5naWYuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBPYmplY3QgZ2V0SW1hZ2UoT2JqZWN0IG9iamVjdCkgeworCQlyZXR1cm4gb3ZlcmxheUltYWdlKG9iamVjdCwgZ2V0UmVzb3VyY2VMb2NhdG9yKCkuZ2V0SW1hZ2UoImZ1bGwvY3VzdG9tMTYvYWlyRWRnZS5wbmciKSk7CisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIHRoZSBsYWJlbCB0ZXh0IGZvciB0aGUgYWRhcHRlZCBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIFN0cmluZyBnZXRUZXh0KE9iamVjdCBvYmplY3QpIHsKKwkJcmV0dXJuIHN1cGVyLmdldFRleHQob2JqZWN0KTsKKwl9CisJCisJLyoqCisJICogVGhpcyByZXR1cm5zIHRoZSBsYWJlbCB0ZXh0IGZvciB0aGUgYWRhcHRlZCBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgU3RyaW5nIGdldFRleHRHZW4oT2JqZWN0IG9iamVjdCkgeworCQlVUkkgbGFiZWxWYWx1ZSA9ICgoUGlwZVRyYW5zcG9ydEVkZ2Upb2JqZWN0KS5nZXRVUkkoKTsKKwkJU3RyaW5nIGxhYmVsID0gbGFiZWxWYWx1ZSA9PSBudWxsID8gbnVsbCA6IGxhYmVsVmFsdWUudG9TdHJpbmcoKTsKKwkJcmV0dXJuIGxhYmVsID09IG51bGwgfHwgbGFiZWwubGVuZ3RoKCkgPT0gMCA/CisJCQlnZXRTdHJpbmcoIl9VSV9QaXBlVHJhbnNwb3J0RWRnZV90eXBlIikgOgorCQkJZ2V0U3RyaW5nKCJfVUlfUGlwZVRyYW5zcG9ydEVkZ2VfdHlwZSIpICsgIiAiICsgbGFiZWw7CisJfQorCisJLyoqCisJICogVGhpcyBoYW5kbGVzIG1vZGVsIG5vdGlmaWNhdGlvbnMgYnkgY2FsbGluZyB7QGxpbmsgI3VwZGF0ZUNoaWxkcmVufSB0byB1cGRhdGUgYW55IGNhY2hlZAorCSAqIGNoaWxkcmVuIGFuZCBieSBjcmVhdGluZyBhIHZpZXdlciBub3RpZmljYXRpb24sIHdoaWNoIGl0IHBhc3NlcyB0byB7QGxpbmsgI2ZpcmVOb3RpZnlDaGFuZ2VkfS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBub3RpZnlDaGFuZ2VkKE5vdGlmaWNhdGlvbiBub3RpZmljYXRpb24pIHsKKwkJdXBkYXRlQ2hpbGRyZW4obm90aWZpY2F0aW9uKTsKKwkJc3VwZXIubm90aWZ5Q2hhbmdlZChub3RpZmljYXRpb24pOworCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmVkaXQuY29tbWFuZC5Db21tYW5kUGFyYW1ldGVyfXMgZGVzY3JpYmluZyB0aGUgY2hpbGRyZW4KKwkgKiB0aGF0IGNhbiBiZSBjcmVhdGVkIHVuZGVyIHRoaXMgb2JqZWN0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIGNvbGxlY3ROZXdDaGlsZERlc2NyaXB0b3JzKENvbGxlY3Rpb248T2JqZWN0PiBuZXdDaGlsZERlc2NyaXB0b3JzLCBPYmplY3Qgb2JqZWN0KSB7CisJCXN1cGVyLmNvbGxlY3ROZXdDaGlsZERlc2NyaXB0b3JzKG5ld0NoaWxkRGVzY3JpcHRvcnMsIG9iamVjdCk7CisKKwkJbmV3Q2hpbGREZXNjcmlwdG9ycy5hZGQKKwkJCShjcmVhdGVDaGlsZFBhcmFtZXRlcgorCQkJCShHcmFwaFBhY2thZ2UuTGl0ZXJhbHMuRURHRV9fTEFCRUwsCisJCQkJIFRyYW5zcG9ydEZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZVBpcGVUcmFuc3BvcnRFZGdlTGFiZWwoKSkpOworCX0KKworCS8qKgorCSAqIFJldHVybiB0aGUgcmVzb3VyY2UgbG9jYXRvciBmb3IgdGhpcyBpdGVtIHByb3ZpZGVyJ3MgcmVzb3VyY2VzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBSZXNvdXJjZUxvY2F0b3IgZ2V0UmVzb3VyY2VMb2NhdG9yKCkgeworCQlyZXR1cm4gVHJhbnNwb3J0RWRpdFBsdWdpbi5JTlNUQU5DRTsKKwl9CisKK30KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS50cmFuc3BvcnQvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvdHJhbnNwb3J0L3Byb3ZpZGVyL1BpcGVUcmFuc3BvcnRFZGdlTGFiZWxJdGVtUHJvdmlkZXIuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS50cmFuc3BvcnQvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvdHJhbnNwb3J0L3Byb3ZpZGVyL1BpcGVUcmFuc3BvcnRFZGdlTGFiZWxJdGVtUHJvdmlkZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZGQ5YzU0Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnRyYW5zcG9ydC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy90cmFuc3BvcnQvcHJvdmlkZXIvUGlwZVRyYW5zcG9ydEVkZ2VMYWJlbEl0ZW1Qcm92aWRlci5qYXZhCkBAIC0wLDAgKzEsMTg2IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMudHJhbnNwb3J0LnByb3ZpZGVyOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDExIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOworaW1wb3J0IGphdmEudXRpbC5MaXN0OworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uOworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlJlc291cmNlTG9jYXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuVVJJOworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUVkaXRpbmdEb21haW5JdGVtUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1MYWJlbFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtUHJvcGVydHlEZXNjcmlwdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtUHJvcGVydHlTb3VyY2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVN0cnVjdHVyZWRJdGVtQ29udGVudFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklUcmVlSXRlbUNvbnRlbnRQcm92aWRlcjsKKworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5FZGdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5FZGdlTGFiZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLnByb3ZpZGVyLkVkZ2VMYWJlbEl0ZW1Qcm92aWRlcjsKKworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkuR2VvZ3JhcGhpY05hbWVzOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMudHJhbnNwb3J0LlBpcGVUcmFuc3BvcnRFZGdlTGFiZWw7CisKKy8qKgorICogVGhpcyBpcyB0aGUgaXRlbSBwcm92aWRlciBhZGFwdGVyIGZvciBhIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLnRyYW5zcG9ydC5QaXBlVHJhbnNwb3J0RWRnZUxhYmVsfSBvYmplY3QuCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBQaXBlVHJhbnNwb3J0RWRnZUxhYmVsSXRlbVByb3ZpZGVyCisJZXh0ZW5kcyBFZGdlTGFiZWxJdGVtUHJvdmlkZXIKKwlpbXBsZW1lbnRzCisJCUlFZGl0aW5nRG9tYWluSXRlbVByb3ZpZGVyLAorCQlJU3RydWN0dXJlZEl0ZW1Db250ZW50UHJvdmlkZXIsCisJCUlUcmVlSXRlbUNvbnRlbnRQcm92aWRlciwKKwkJSUl0ZW1MYWJlbFByb3ZpZGVyLAorCQlJSXRlbVByb3BlcnR5U291cmNlIHsKKwkKKwlwcml2YXRlIHN0YXRpYyBTdHJpbmcgQUlSX1RSQU5TUE9SVF9TWVNURU1fU1RSSU5HID0gIihTKSI7CisJCisJLyoqCisJICogVGhpcyBjb25zdHJ1Y3RzIGFuIGluc3RhbmNlIGZyb20gYSBmYWN0b3J5IGFuZCBhIG5vdGlmaWVyLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBQaXBlVHJhbnNwb3J0RWRnZUxhYmVsSXRlbVByb3ZpZGVyKEFkYXB0ZXJGYWN0b3J5IGFkYXB0ZXJGYWN0b3J5KSB7CisJCXN1cGVyKGFkYXB0ZXJGYWN0b3J5KTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgdGhlIHByb3BlcnR5IGRlc2NyaXB0b3JzIGZvciB0aGUgYWRhcHRlZCBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgTGlzdDxJSXRlbVByb3BlcnR5RGVzY3JpcHRvcj4gZ2V0UHJvcGVydHlEZXNjcmlwdG9ycyhPYmplY3Qgb2JqZWN0KSB7CisJCWlmIChpdGVtUHJvcGVydHlEZXNjcmlwdG9ycyA9PSBudWxsKSB7CisJCQlzdXBlci5nZXRQcm9wZXJ0eURlc2NyaXB0b3JzKG9iamVjdCk7CisKKwkJfQorCQlyZXR1cm4gaXRlbVByb3BlcnR5RGVzY3JpcHRvcnM7CisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIFBpcGVUcmFuc3BvcnRFZGdlTGFiZWwuZ2lmLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBPYmplY3QgZ2V0SW1hZ2UoT2JqZWN0IG9iamVjdCkgeworCQlyZXR1cm4gb3ZlcmxheUltYWdlKG9iamVjdCwgZ2V0UmVzb3VyY2VMb2NhdG9yKCkuZ2V0SW1hZ2UoImZ1bGwvY3VzdG9tMTYvYWlyRWRnZS5wbmciKSk7CisJfQorCisKKwkKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgdGhlIGxhYmVsIHRleHQgZm9yIHRoZSBhZGFwdGVkIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBTdHJpbmcgZ2V0VGV4dEdlbihPYmplY3Qgb2JqZWN0KSB7CisJCVVSSSBsYWJlbFZhbHVlID0gKChQaXBlVHJhbnNwb3J0RWRnZUxhYmVsKW9iamVjdCkuZ2V0VVJJKCk7CisJCVN0cmluZyBsYWJlbCA9IGxhYmVsVmFsdWUgPT0gbnVsbCA/IG51bGwgOiBsYWJlbFZhbHVlLnRvU3RyaW5nKCk7CisJCXJldHVybiBsYWJlbCA9PSBudWxsIHx8IGxhYmVsLmxlbmd0aCgpID09IDAgPworCQkJZ2V0U3RyaW5nKCJfVUlfUGlwZVRyYW5zcG9ydEVkZ2VMYWJlbF90eXBlIikgOgorCQkJZ2V0U3RyaW5nKCJfVUlfUGlwZVRyYW5zcG9ydEVkZ2VMYWJlbF90eXBlIikgKyAiICIgKyBsYWJlbDsKKwl9CisJCisJLyoqCisJICogVGhpcyByZXR1cm5zIHRoZSBsYWJlbCB0ZXh0IGZvciB0aGUgYWRhcHRlZCBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIFN0cmluZyBnZXRUZXh0KE9iamVjdCBvYmplY3QpIHsKKwkJZmluYWwgVVJJIGxhYmVsVVJJID0gKChQaXBlVHJhbnNwb3J0RWRnZUxhYmVsKW9iamVjdCkuZ2V0VVJJKCk7CisJCWZpbmFsIFN0cmluZyBsYXN0U2VnbWVudCA9IGxhYmVsVVJJLmxhc3RTZWdtZW50KCkudG9TdHJpbmcoKTsKKwkJZmluYWwgaW50IGkgPSBsYXN0U2VnbWVudC5pbmRleE9mKCJfIik7CisJCVN0cmluZyBmaXJzdElTT0tleSA9IGxhc3RTZWdtZW50LnN1YnN0cmluZygwLCBpKTsKKwkJU3RyaW5nIHNlY29uZElTT0tleSA9IGxhc3RTZWdtZW50LnN1YnN0cmluZyhpKzEpOworCQlTdHJpbmcgZmlyc3RQcmVmaXggPSAiIjsKKwkJU3RyaW5nIHNlY29uZFByZWZpeCA9ICIiOwkJCisJCQorCQlpZihmaXJzdElTT0tleS5zdGFydHNXaXRoKEFJUl9UUkFOU1BPUlRfU1lTVEVNX1NUUklORykpIHsKKwkJCWZpcnN0SVNPS2V5ID0gZmlyc3RJU09LZXkuc3Vic3RyaW5nKDMpOworCQkJZmlyc3RQcmVmaXggPSBBSVJfVFJBTlNQT1JUX1NZU1RFTV9TVFJJTkc7CisJCX0KKworCQlpZihzZWNvbmRJU09LZXkuc3RhcnRzV2l0aChBSVJfVFJBTlNQT1JUX1NZU1RFTV9TVFJJTkcpKSB7CisJCQlzZWNvbmRJU09LZXkgPSBzZWNvbmRJU09LZXkuc3Vic3RyaW5nKDMpOworCQkJc2Vjb25kUHJlZml4ID0gQUlSX1RSQU5TUE9SVF9TWVNURU1fU1RSSU5HOworCQl9CisKKwkJCisJCWZpbmFsIFN0cmluZyBmaXJzdEdlb05hbWUgPSBHZW9ncmFwaGljTmFtZXMuZ2V0TmFtZShmaXJzdElTT0tleSk7CisJCWZpbmFsIFN0cmluZyBzZWNvbmRHZW9OYW1lID0gR2VvZ3JhcGhpY05hbWVzLmdldE5hbWUoc2Vjb25kSVNPS2V5KTsKKwkJCisJCWZpbmFsIFN0cmluZ0J1aWxkZXIgc2IgPSBuZXcgU3RyaW5nQnVpbGRlcigKKwkJCQlmaXJzdEdlb05hbWUuc3RhcnRzV2l0aCgiISIpID8gZmlyc3RQcmVmaXgrZmlyc3RJU09LZXkgOiBmaXJzdFByZWZpeCtmaXJzdEdlb05hbWUpOworCQlmaW5hbCBFZGdlIGVkZ2UgPSAoKEVkZ2VMYWJlbCkgb2JqZWN0KS5nZXRFZGdlKCk7CisJCXNiLmFwcGVuZChlZGdlLmlzRGlyZWN0ZWQoKSA/ICIgLT4gIiA6ICIgPC0+ICIpOworCQkKKwkJLy8gRmluZCBCdWdzIGlkZW50aWZpZWQgYW4gZXJyb3IuICBzZWNvbmRHZW9OYW1lIHdhcyB1c2VkIAorCQkvLyBmb3IgYm90aCBjb25kaXRpb25zIG9mZiB0aGUgdGVybmFyeQorCQlzYi5hcHBlbmQoc2Vjb25kR2VvTmFtZS5zdGFydHNXaXRoKCIhIikgPyBzZWNvbmRQcmVmaXgrc2Vjb25kSVNPS2V5CisJCQkJCQk6IHNlY29uZFByZWZpeCtzZWNvbmRHZW9OYW1lKTsKKworCQlyZXR1cm4gc2IudG9TdHJpbmcoKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGhhbmRsZXMgbW9kZWwgbm90aWZpY2F0aW9ucyBieSBjYWxsaW5nIHtAbGluayAjdXBkYXRlQ2hpbGRyZW59IHRvIHVwZGF0ZSBhbnkgY2FjaGVkCisJICogY2hpbGRyZW4gYW5kIGJ5IGNyZWF0aW5nIGEgdmlld2VyIG5vdGlmaWNhdGlvbiwgd2hpY2ggaXQgcGFzc2VzIHRvIHtAbGluayAjZmlyZU5vdGlmeUNoYW5nZWR9LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIG5vdGlmeUNoYW5nZWQoTm90aWZpY2F0aW9uIG5vdGlmaWNhdGlvbikgeworCQl1cGRhdGVDaGlsZHJlbihub3RpZmljYXRpb24pOworCQlzdXBlci5ub3RpZnlDaGFuZ2VkKG5vdGlmaWNhdGlvbik7CisJfQorCisJLyoqCisJICogVGhpcyBhZGRzIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuZWRpdC5jb21tYW5kLkNvbW1hbmRQYXJhbWV0ZXJ9cyBkZXNjcmliaW5nIHRoZSBjaGlsZHJlbgorCSAqIHRoYXQgY2FuIGJlIGNyZWF0ZWQgdW5kZXIgdGhpcyBvYmplY3QuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgY29sbGVjdE5ld0NoaWxkRGVzY3JpcHRvcnMoQ29sbGVjdGlvbjxPYmplY3Q+IG5ld0NoaWxkRGVzY3JpcHRvcnMsIE9iamVjdCBvYmplY3QpIHsKKwkJc3VwZXIuY29sbGVjdE5ld0NoaWxkRGVzY3JpcHRvcnMobmV3Q2hpbGREZXNjcmlwdG9ycywgb2JqZWN0KTsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm4gdGhlIHJlc291cmNlIGxvY2F0b3IgZm9yIHRoaXMgaXRlbSBwcm92aWRlcidzIHJlc291cmNlcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgUmVzb3VyY2VMb2NhdG9yIGdldFJlc291cmNlTG9jYXRvcigpIHsKKwkJcmV0dXJuIFRyYW5zcG9ydEVkaXRQbHVnaW4uSU5TVEFOQ0U7CisJfQorCit9CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udHJhbnNwb3J0L3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL3RyYW5zcG9ydC9wcm92aWRlci9QaXBlVHJhbnNwb3J0RWRnZUxhYmVsVmFsdWVJdGVtUHJvdmlkZXIuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS50cmFuc3BvcnQvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvdHJhbnNwb3J0L3Byb3ZpZGVyL1BpcGVUcmFuc3BvcnRFZGdlTGFiZWxWYWx1ZUl0ZW1Qcm92aWRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQwZjQ2MzAKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udHJhbnNwb3J0L3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL3RyYW5zcG9ydC9wcm92aWRlci9QaXBlVHJhbnNwb3J0RWRnZUxhYmVsVmFsdWVJdGVtUHJvdmlkZXIuamF2YQpAQCAtMCwwICsxLDE5OSBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLnRyYW5zcG9ydC5wcm92aWRlcjsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAxMSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LkFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbjsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5SZXNvdXJjZUxvY2F0b3I7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5Db21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklFZGl0aW5nRG9tYWluSXRlbVByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtTGFiZWxQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbVByb3BlcnR5RGVzY3JpcHRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbVByb3BlcnR5U291cmNlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklTdHJ1Y3R1cmVkSXRlbUNvbnRlbnRQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JVHJlZUl0ZW1Db250ZW50UHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSXRlbVByb3BlcnR5RGVzY3JpcHRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5WaWV3ZXJOb3RpZmljYXRpb247CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGgucHJvdmlkZXIuTGFiZWxWYWx1ZUl0ZW1Qcm92aWRlcjsKKworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMudHJhbnNwb3J0LlBpcGVUcmFuc3BvcnRFZGdlTGFiZWxWYWx1ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLnRyYW5zcG9ydC5UcmFuc3BvcnRQYWNrYWdlOworCisvKioKKyAqIFRoaXMgaXMgdGhlIGl0ZW0gcHJvdmlkZXIgYWRhcHRlciBmb3IgYSB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy50cmFuc3BvcnQuUGlwZVRyYW5zcG9ydEVkZ2VMYWJlbFZhbHVlfSBvYmplY3QuCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBQaXBlVHJhbnNwb3J0RWRnZUxhYmVsVmFsdWVJdGVtUHJvdmlkZXIKKwlleHRlbmRzIExhYmVsVmFsdWVJdGVtUHJvdmlkZXIKKwlpbXBsZW1lbnRzCisJCUlFZGl0aW5nRG9tYWluSXRlbVByb3ZpZGVyLAorCQlJU3RydWN0dXJlZEl0ZW1Db250ZW50UHJvdmlkZXIsCisJCUlUcmVlSXRlbUNvbnRlbnRQcm92aWRlciwKKwkJSUl0ZW1MYWJlbFByb3ZpZGVyLAorCQlJSXRlbVByb3BlcnR5U291cmNlIHsKKwkvKioKKwkgKiBUaGlzIGNvbnN0cnVjdHMgYW4gaW5zdGFuY2UgZnJvbSBhIGZhY3RvcnkgYW5kIGEgbm90aWZpZXIuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFBpcGVUcmFuc3BvcnRFZGdlTGFiZWxWYWx1ZUl0ZW1Qcm92aWRlcihBZGFwdGVyRmFjdG9yeSBhZGFwdGVyRmFjdG9yeSkgeworCQlzdXBlcihhZGFwdGVyRmFjdG9yeSk7CisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIHRoZSBwcm9wZXJ0eSBkZXNjcmlwdG9ycyBmb3IgdGhlIGFkYXB0ZWQgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIExpc3Q8SUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I+IGdldFByb3BlcnR5RGVzY3JpcHRvcnMoT2JqZWN0IG9iamVjdCkgeworCQlpZiAoaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMgPT0gbnVsbCkgeworCQkJc3VwZXIuZ2V0UHJvcGVydHlEZXNjcmlwdG9ycyhvYmplY3QpOworCisJCQlhZGRNYXhGbG93UHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCk7CisJCQlhZGRUaW1lUGVyaW9kUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCk7CisJCX0KKwkJcmV0dXJuIGl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzOworCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyBhIHByb3BlcnR5IGRlc2NyaXB0b3IgZm9yIHRoZSBNYXggRmxvdyBmZWF0dXJlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIGFkZE1heEZsb3dQcm9wZXJ0eURlc2NyaXB0b3IoT2JqZWN0IG9iamVjdCkgeworCQlpdGVtUHJvcGVydHlEZXNjcmlwdG9ycy5hZGQKKwkJCShjcmVhdGVJdGVtUHJvcGVydHlEZXNjcmlwdG9yCisJCQkJKCgoQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSlhZGFwdGVyRmFjdG9yeSkuZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCksCisJCQkJIGdldFJlc291cmNlTG9jYXRvcigpLAorCQkJCSBnZXRTdHJpbmcoIl9VSV9QaXBlVHJhbnNwb3J0RWRnZUxhYmVsVmFsdWVfbWF4Rmxvd19mZWF0dXJlIiksCisJCQkJIGdldFN0cmluZygiX1VJX1Byb3BlcnR5RGVzY3JpcHRvcl9kZXNjcmlwdGlvbiIsICJfVUlfUGlwZVRyYW5zcG9ydEVkZ2VMYWJlbFZhbHVlX21heEZsb3dfZmVhdHVyZSIsICJfVUlfUGlwZVRyYW5zcG9ydEVkZ2VMYWJlbFZhbHVlX3R5cGUiKSwKKwkJCQkgVHJhbnNwb3J0UGFja2FnZS5MaXRlcmFscy5QSVBFX1RSQU5TUE9SVF9FREdFX0xBQkVMX1ZBTFVFX19NQVhfRkxPVywKKwkJCQkgdHJ1ZSwKKwkJCQkgZmFsc2UsCisJCQkJIGZhbHNlLAorCQkJCSBJdGVtUHJvcGVydHlEZXNjcmlwdG9yLlJFQUxfVkFMVUVfSU1BR0UsCisJCQkJIG51bGwsCisJCQkJIG51bGwpKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFkZHMgYSBwcm9wZXJ0eSBkZXNjcmlwdG9yIGZvciB0aGUgVGltZSBQZXJpb2QgZmVhdHVyZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBhZGRUaW1lUGVyaW9kUHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdCBvYmplY3QpIHsKKwkJaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMuYWRkCisJCQkoY3JlYXRlSXRlbVByb3BlcnR5RGVzY3JpcHRvcgorCQkJCSgoKENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnkpYWRhcHRlckZhY3RvcnkpLmdldFJvb3RBZGFwdGVyRmFjdG9yeSgpLAorCQkJCSBnZXRSZXNvdXJjZUxvY2F0b3IoKSwKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfUGlwZVRyYW5zcG9ydEVkZ2VMYWJlbFZhbHVlX3RpbWVQZXJpb2RfZmVhdHVyZSIpLAorCQkJCSBnZXRTdHJpbmcoIl9VSV9Qcm9wZXJ0eURlc2NyaXB0b3JfZGVzY3JpcHRpb24iLCAiX1VJX1BpcGVUcmFuc3BvcnRFZGdlTGFiZWxWYWx1ZV90aW1lUGVyaW9kX2ZlYXR1cmUiLCAiX1VJX1BpcGVUcmFuc3BvcnRFZGdlTGFiZWxWYWx1ZV90eXBlIiksCisJCQkJIFRyYW5zcG9ydFBhY2thZ2UuTGl0ZXJhbHMuUElQRV9UUkFOU1BPUlRfRURHRV9MQUJFTF9WQUxVRV9fVElNRV9QRVJJT0QsCisJCQkJIHRydWUsCisJCQkJIGZhbHNlLAorCQkJCSBmYWxzZSwKKwkJCQkgSXRlbVByb3BlcnR5RGVzY3JpcHRvci5JTlRFR1JBTF9WQUxVRV9JTUFHRSwKKwkJCQkgbnVsbCwKKwkJCQkgbnVsbCkpOworCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyBQaXBlVHJhbnNwb3J0RWRnZUxhYmVsVmFsdWUuZ2lmLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBPYmplY3QgZ2V0SW1hZ2UoT2JqZWN0IG9iamVjdCkgeworCQlyZXR1cm4gb3ZlcmxheUltYWdlKG9iamVjdCwgZ2V0UmVzb3VyY2VMb2NhdG9yKCkuZ2V0SW1hZ2UoImZ1bGwvb2JqMTYvUGlwZVRyYW5zcG9ydEVkZ2VMYWJlbFZhbHVlIikpOworCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyB0aGUgbGFiZWwgdGV4dCBmb3IgdGhlIGFkYXB0ZWQgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFN0cmluZyBnZXRUZXh0R2VuKE9iamVjdCBvYmplY3QpIHsKKwkJUGlwZVRyYW5zcG9ydEVkZ2VMYWJlbFZhbHVlIHBpcGVUcmFuc3BvcnRFZGdlTGFiZWxWYWx1ZSA9IChQaXBlVHJhbnNwb3J0RWRnZUxhYmVsVmFsdWUpb2JqZWN0OworCQlyZXR1cm4gZ2V0U3RyaW5nKCJfVUlfUGlwZVRyYW5zcG9ydEVkZ2VMYWJlbFZhbHVlX3R5cGUiKSArICIgIiArIHBpcGVUcmFuc3BvcnRFZGdlTGFiZWxWYWx1ZS5nZXRNYXhGbG93KCk7CisJfQorCQorCS8qKgorCSAqIFRoaXMgcmV0dXJucyB0aGUgbGFiZWwgdGV4dCBmb3IgdGhlIGFkYXB0ZWQgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBTdHJpbmcgZ2V0VGV4dChPYmplY3Qgb2JqZWN0KSB7CisJCVBpcGVUcmFuc3BvcnRFZGdlTGFiZWxWYWx1ZSBwaXBlVHJhbnNwb3J0RWRnZUxhYmVsVmFsdWUgPSAoUGlwZVRyYW5zcG9ydEVkZ2VMYWJlbFZhbHVlKW9iamVjdDsKKwkJcmV0dXJuICBwaXBlVHJhbnNwb3J0RWRnZUxhYmVsVmFsdWUuZ2V0TWF4RmxvdygpICsgIi8iK3BpcGVUcmFuc3BvcnRFZGdlTGFiZWxWYWx1ZS5nZXRUaW1lUGVyaW9kKCkrIiBtcyI7CisJfQorCisJLyoqCisJICogVGhpcyBoYW5kbGVzIG1vZGVsIG5vdGlmaWNhdGlvbnMgYnkgY2FsbGluZyB7QGxpbmsgI3VwZGF0ZUNoaWxkcmVufSB0byB1cGRhdGUgYW55IGNhY2hlZAorCSAqIGNoaWxkcmVuIGFuZCBieSBjcmVhdGluZyBhIHZpZXdlciBub3RpZmljYXRpb24sIHdoaWNoIGl0IHBhc3NlcyB0byB7QGxpbmsgI2ZpcmVOb3RpZnlDaGFuZ2VkfS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBub3RpZnlDaGFuZ2VkKE5vdGlmaWNhdGlvbiBub3RpZmljYXRpb24pIHsKKwkJdXBkYXRlQ2hpbGRyZW4obm90aWZpY2F0aW9uKTsKKworCQlzd2l0Y2ggKG5vdGlmaWNhdGlvbi5nZXRGZWF0dXJlSUQoUGlwZVRyYW5zcG9ydEVkZ2VMYWJlbFZhbHVlLmNsYXNzKSkgeworCQkJY2FzZSBUcmFuc3BvcnRQYWNrYWdlLlBJUEVfVFJBTlNQT1JUX0VER0VfTEFCRUxfVkFMVUVfX01BWF9GTE9XOgorCQkJY2FzZSBUcmFuc3BvcnRQYWNrYWdlLlBJUEVfVFJBTlNQT1JUX0VER0VfTEFCRUxfVkFMVUVfX1RJTUVfUEVSSU9EOgorCQkJCWZpcmVOb3RpZnlDaGFuZ2VkKG5ldyBWaWV3ZXJOb3RpZmljYXRpb24obm90aWZpY2F0aW9uLCBub3RpZmljYXRpb24uZ2V0Tm90aWZpZXIoKSwgZmFsc2UsIHRydWUpKTsKKwkJCQlyZXR1cm47CisJCX0KKwkJc3VwZXIubm90aWZ5Q2hhbmdlZChub3RpZmljYXRpb24pOworCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmVkaXQuY29tbWFuZC5Db21tYW5kUGFyYW1ldGVyfXMgZGVzY3JpYmluZyB0aGUgY2hpbGRyZW4KKwkgKiB0aGF0IGNhbiBiZSBjcmVhdGVkIHVuZGVyIHRoaXMgb2JqZWN0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIGNvbGxlY3ROZXdDaGlsZERlc2NyaXB0b3JzKENvbGxlY3Rpb248T2JqZWN0PiBuZXdDaGlsZERlc2NyaXB0b3JzLCBPYmplY3Qgb2JqZWN0KSB7CisJCXN1cGVyLmNvbGxlY3ROZXdDaGlsZERlc2NyaXB0b3JzKG5ld0NoaWxkRGVzY3JpcHRvcnMsIG9iamVjdCk7CisJfQorCisJLyoqCisJICogUmV0dXJuIHRoZSByZXNvdXJjZSBsb2NhdG9yIGZvciB0aGlzIGl0ZW0gcHJvdmlkZXIncyByZXNvdXJjZXMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIFJlc291cmNlTG9jYXRvciBnZXRSZXNvdXJjZUxvY2F0b3IoKSB7CisJCXJldHVybiBUcmFuc3BvcnRFZGl0UGx1Z2luLklOU1RBTkNFOworCX0KKworfQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnRyYW5zcG9ydC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy90cmFuc3BvcnQvcHJvdmlkZXIvVHJhbnNwb3J0RWRpdFBsdWdpbi5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnRyYW5zcG9ydC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy90cmFuc3BvcnQvcHJvdmlkZXIvVHJhbnNwb3J0RWRpdFBsdWdpbi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUwNGFhYmMKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udHJhbnNwb3J0L3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL3RyYW5zcG9ydC9wcm92aWRlci9UcmFuc3BvcnRFZGl0UGx1Z2luLmphdmEKQEAgLTAsMCArMSwxMjIgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy50cmFuc3BvcnQucHJvdmlkZXI7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTEgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QbGF0Zm9ybTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLkVNRlBsdWdpbjsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5SZXNvdXJjZUxvY2F0b3I7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUucHJvdmlkZXIuRWNvcmVFZGl0UGx1Z2luOworCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5wcm92aWRlci5Db3JlRWRpdFBsdWdpbjsKKworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuZWRnZXMucHJvdmlkZXIuRGVmaW5pdGlvbnNFZGl0UGx1Z2luOworaW1wb3J0IG9yZy5vc2dpLmZyYW1ld29yay5CdW5kbGU7CisKKy8qKgorICogVGhpcyBpcyB0aGUgY2VudHJhbCBzaW5nbGV0b24gZm9yIHRoZSBUcmFuc3BvcnQgZWRpdCBwbHVnaW4uCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBmaW5hbCBjbGFzcyBUcmFuc3BvcnRFZGl0UGx1Z2luIGV4dGVuZHMgRU1GUGx1Z2luIHsKKwkKKwlwcml2YXRlIHN0YXRpYyBTdHJpbmcgVFJBTlNQT1JUX1VJX0JVTkRMRSA9ICJvcmcuZWNsaXBzZS5zdGVtLnVpLnRyYW5zcG9ydCI7CisJCisJLyoqCisJICogS2VlcCB0cmFjayBvZiB0aGUgc2luZ2xldG9uLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgVHJhbnNwb3J0RWRpdFBsdWdpbiBJTlNUQU5DRSA9IG5ldyBUcmFuc3BvcnRFZGl0UGx1Z2luKCk7CisKKwkvKioKKwkgKiBLZWVwIHRyYWNrIG9mIHRoZSBzaW5nbGV0b24uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJpdmF0ZSBzdGF0aWMgSW1wbGVtZW50YXRpb24gcGx1Z2luOworCisJLyoqCisJICogQ3JlYXRlIHRoZSBpbnN0YW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVHJhbnNwb3J0RWRpdFBsdWdpbigpIHsKKwkJc3VwZXIKKwkJICAobmV3IFJlc291cmNlTG9jYXRvciBbXSB7CisJCSAgICAgRGVmaW5pdGlvbnNFZGl0UGx1Z2luLklOU1RBTkNFLAorCQkgICAgIENvcmVFZGl0UGx1Z2luLklOU1RBTkNFLAorCQkgICAgIEVjb3JlRWRpdFBsdWdpbi5JTlNUQU5DRSwKKwkJICAgfSk7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgc2luZ2xldG9uIGluc3RhbmNlIG9mIHRoZSBFY2xpcHNlIHBsdWdpbi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIHNpbmdsZXRvbiBpbnN0YW5jZS4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIFJlc291cmNlTG9jYXRvciBnZXRQbHVnaW5SZXNvdXJjZUxvY2F0b3IoKSB7CisJCXJldHVybiBwbHVnaW47CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgc2luZ2xldG9uIGluc3RhbmNlIG9mIHRoZSBFY2xpcHNlIHBsdWdpbi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIHNpbmdsZXRvbiBpbnN0YW5jZS4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHN0YXRpYyBJbXBsZW1lbnRhdGlvbiBnZXRQbHVnaW4oKSB7CisJCXJldHVybiBwbHVnaW47CisJfQorCisJLyoqCisJICogVGhlIGFjdHVhbCBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgRWNsaXBzZSA8Yj5QbHVnaW48L2I+LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBzdGF0aWMgY2xhc3MgSW1wbGVtZW50YXRpb24gZXh0ZW5kcyBFY2xpcHNlUGx1Z2luIHsKKwkJLyoqCisJCSAqIENyZWF0ZXMgYW4gaW5zdGFuY2UuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkIE5PVAorCQkgKi8KKwkJcHVibGljIEltcGxlbWVudGF0aW9uKCkgeworCQkJc3VwZXIoKTsKKworCQkJLy8gUmVtZW1iZXIgdGhlIHN0YXRpYyBpbnN0YW5jZS4KKwkJCS8vCisJCQlwbHVnaW4gPSB0aGlzOworCQkJCisJCQkvLyBXZSBuZWVkIHRvIHN0YXJ0IHRoZSB1aSBwbHVnaW4gaGVyZSB0byBtYWtlIHN1cmUgdG8gcmVnaXN0ZXIgdGhlIG5ldyBncmFwaCBnZW5lcmF0b3IgaW4gdGhlIFVJCisJCQkKKwkJCUJ1bmRsZSB1aUJ1bmRsZSA9IFBsYXRmb3JtLmdldEJ1bmRsZShUUkFOU1BPUlRfVUlfQlVORExFKTsKKwkJCWlmICh1aUJ1bmRsZSAhPSBudWxsKSB7CisJCQkJdHJ5IHsKKwkJCQkJdWlCdW5kbGUuc3RhcnQoQnVuZGxlLlNUQVJUX1RSQU5TSUVOVCk7CisJCQkJfSBjYXRjaChFeGNlcHRpb24gZSkgeworCQkJCQllLnByaW50U3RhY2tUcmFjZSgpOworCQkJCX0KKwkJCX0gCisJCX0KKwl9CisKK30KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS50cmFuc3BvcnQvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvdHJhbnNwb3J0L3Byb3ZpZGVyL1RyYW5zcG9ydEl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5LmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udHJhbnNwb3J0L3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL3RyYW5zcG9ydC9wcm92aWRlci9UcmFuc3BvcnRJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU4N2UzODEKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udHJhbnNwb3J0L3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL3RyYW5zcG9ydC9wcm92aWRlci9UcmFuc3BvcnRJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeS5qYXZhCkBAIC0wLDAgKzEsMjc5IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMudHJhbnNwb3J0LnByb3ZpZGVyOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDExIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OworaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuQWRhcHRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpZXI7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5DaGFuZ2VOb3RpZmllcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5Db21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkNvbXBvc2VkQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUNoYW5nZU5vdGlmaWVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklEaXNwb3NhYmxlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklFZGl0aW5nRG9tYWluSXRlbVByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtTGFiZWxQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbVByb3BlcnR5U291cmNlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklOb3RpZnlDaGFuZ2VkTGlzdGVuZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVN0cnVjdHVyZWRJdGVtQ29udGVudFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklUcmVlSXRlbUNvbnRlbnRQcm92aWRlcjsKKworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMudHJhbnNwb3J0LnV0aWwuVHJhbnNwb3J0QWRhcHRlckZhY3Rvcnk7CisKKy8qKgorICogVGhpcyBpcyB0aGUgZmFjdG9yeSB0aGF0IGlzIHVzZWQgdG8gcHJvdmlkZSB0aGUgaW50ZXJmYWNlcyBuZWVkZWQgdG8gc3VwcG9ydCBWaWV3ZXJzLgorICogVGhlIGFkYXB0ZXJzIGdlbmVyYXRlZCBieSB0aGlzIGZhY3RvcnkgY29udmVydCBFTUYgYWRhcHRlciBub3RpZmljYXRpb25zIGludG8gY2FsbHMgdG8ge0BsaW5rICNmaXJlTm90aWZ5Q2hhbmdlZCBmaXJlTm90aWZ5Q2hhbmdlZH0uCisgKiBUaGUgYWRhcHRlcnMgYWxzbyBzdXBwb3J0IEVjbGlwc2UgcHJvcGVydHkgc2hlZXRzLgorICogTm90ZSB0aGF0IG1vc3Qgb2YgdGhlIGFkYXB0ZXJzIGFyZSBzaGFyZWQgYW1vbmcgbXVsdGlwbGUgaW5zdGFuY2VzLgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgVHJhbnNwb3J0SXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkgZXh0ZW5kcyBUcmFuc3BvcnRBZGFwdGVyRmFjdG9yeSBpbXBsZW1lbnRzIENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnksIElDaGFuZ2VOb3RpZmllciwgSURpc3Bvc2FibGUgeworCS8qKgorCSAqIFRoaXMga2VlcHMgdHJhY2sgb2YgdGhlIHJvb3QgYWRhcHRlciBmYWN0b3J5IHRoYXQgZGVsZWdhdGVzIHRvIHRoaXMgYWRhcHRlciBmYWN0b3J5LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBDb21wb3NlZEFkYXB0ZXJGYWN0b3J5IHBhcmVudEFkYXB0ZXJGYWN0b3J5OworCisJLyoqCisJICogVGhpcyBpcyB1c2VkIHRvIGltcGxlbWVudCB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUNoYW5nZU5vdGlmaWVyfS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgSUNoYW5nZU5vdGlmaWVyIGNoYW5nZU5vdGlmaWVyID0gbmV3IENoYW5nZU5vdGlmaWVyKCk7CisKKwkvKioKKwkgKiBUaGlzIGtlZXBzIHRyYWNrIG9mIGFsbCB0aGUgc3VwcG9ydGVkIHR5cGVzIGNoZWNrZWQgYnkge0BsaW5rICNpc0ZhY3RvcnlGb3JUeXBlIGlzRmFjdG9yeUZvclR5cGV9LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBDb2xsZWN0aW9uPE9iamVjdD4gc3VwcG9ydGVkVHlwZXMgPSBuZXcgQXJyYXlMaXN0PE9iamVjdD4oKTsKKworCS8qKgorCSAqIFRoaXMgY29uc3RydWN0cyBhbiBpbnN0YW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVHJhbnNwb3J0SXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkoKSB7CisJCXN1cHBvcnRlZFR5cGVzLmFkZChJRWRpdGluZ0RvbWFpbkl0ZW1Qcm92aWRlci5jbGFzcyk7CisJCXN1cHBvcnRlZFR5cGVzLmFkZChJU3RydWN0dXJlZEl0ZW1Db250ZW50UHJvdmlkZXIuY2xhc3MpOworCQlzdXBwb3J0ZWRUeXBlcy5hZGQoSVRyZWVJdGVtQ29udGVudFByb3ZpZGVyLmNsYXNzKTsKKwkJc3VwcG9ydGVkVHlwZXMuYWRkKElJdGVtTGFiZWxQcm92aWRlci5jbGFzcyk7CisJCXN1cHBvcnRlZFR5cGVzLmFkZChJSXRlbVByb3BlcnR5U291cmNlLmNsYXNzKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGtlZXBzIHRyYWNrIG9mIHRoZSBvbmUgYWRhcHRlciB1c2VkIGZvciBhbGwge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMudHJhbnNwb3J0LlBpcGVTdHlsZVRyYW5zcG9ydFN5c3RlbX0gaW5zdGFuY2VzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBQaXBlU3R5bGVUcmFuc3BvcnRTeXN0ZW1JdGVtUHJvdmlkZXIgcGlwZVN0eWxlVHJhbnNwb3J0U3lzdGVtSXRlbVByb3ZpZGVyOworCisJLyoqCisJICogVGhpcyBjcmVhdGVzIGFuIGFkYXB0ZXIgZm9yIGEge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMudHJhbnNwb3J0LlBpcGVTdHlsZVRyYW5zcG9ydFN5c3RlbX0uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlUGlwZVN0eWxlVHJhbnNwb3J0U3lzdGVtQWRhcHRlcigpIHsKKwkJaWYgKHBpcGVTdHlsZVRyYW5zcG9ydFN5c3RlbUl0ZW1Qcm92aWRlciA9PSBudWxsKSB7CisJCQlwaXBlU3R5bGVUcmFuc3BvcnRTeXN0ZW1JdGVtUHJvdmlkZXIgPSBuZXcgUGlwZVN0eWxlVHJhbnNwb3J0U3lzdGVtSXRlbVByb3ZpZGVyKHRoaXMpOworCQl9CisKKwkJcmV0dXJuIHBpcGVTdHlsZVRyYW5zcG9ydFN5c3RlbUl0ZW1Qcm92aWRlcjsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGtlZXBzIHRyYWNrIG9mIHRoZSBvbmUgYWRhcHRlciB1c2VkIGZvciBhbGwge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMudHJhbnNwb3J0LlBpcGVUcmFuc3BvcnRFZGdlfSBpbnN0YW5jZXMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIFBpcGVUcmFuc3BvcnRFZGdlSXRlbVByb3ZpZGVyIHBpcGVUcmFuc3BvcnRFZGdlSXRlbVByb3ZpZGVyOworCisJLyoqCisJICogVGhpcyBjcmVhdGVzIGFuIGFkYXB0ZXIgZm9yIGEge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMudHJhbnNwb3J0LlBpcGVUcmFuc3BvcnRFZGdlfS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVQaXBlVHJhbnNwb3J0RWRnZUFkYXB0ZXIoKSB7CisJCWlmIChwaXBlVHJhbnNwb3J0RWRnZUl0ZW1Qcm92aWRlciA9PSBudWxsKSB7CisJCQlwaXBlVHJhbnNwb3J0RWRnZUl0ZW1Qcm92aWRlciA9IG5ldyBQaXBlVHJhbnNwb3J0RWRnZUl0ZW1Qcm92aWRlcih0aGlzKTsKKwkJfQorCisJCXJldHVybiBwaXBlVHJhbnNwb3J0RWRnZUl0ZW1Qcm92aWRlcjsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGtlZXBzIHRyYWNrIG9mIHRoZSBvbmUgYWRhcHRlciB1c2VkIGZvciBhbGwge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMudHJhbnNwb3J0LlBpcGVUcmFuc3BvcnRFZGdlTGFiZWx9IGluc3RhbmNlcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgUGlwZVRyYW5zcG9ydEVkZ2VMYWJlbEl0ZW1Qcm92aWRlciBwaXBlVHJhbnNwb3J0RWRnZUxhYmVsSXRlbVByb3ZpZGVyOworCisJLyoqCisJICogVGhpcyBjcmVhdGVzIGFuIGFkYXB0ZXIgZm9yIGEge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMudHJhbnNwb3J0LlBpcGVUcmFuc3BvcnRFZGdlTGFiZWx9LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZVBpcGVUcmFuc3BvcnRFZGdlTGFiZWxBZGFwdGVyKCkgeworCQlpZiAocGlwZVRyYW5zcG9ydEVkZ2VMYWJlbEl0ZW1Qcm92aWRlciA9PSBudWxsKSB7CisJCQlwaXBlVHJhbnNwb3J0RWRnZUxhYmVsSXRlbVByb3ZpZGVyID0gbmV3IFBpcGVUcmFuc3BvcnRFZGdlTGFiZWxJdGVtUHJvdmlkZXIodGhpcyk7CisJCX0KKworCQlyZXR1cm4gcGlwZVRyYW5zcG9ydEVkZ2VMYWJlbEl0ZW1Qcm92aWRlcjsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGtlZXBzIHRyYWNrIG9mIHRoZSBvbmUgYWRhcHRlciB1c2VkIGZvciBhbGwge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMudHJhbnNwb3J0LlBpcGVUcmFuc3BvcnRFZGdlTGFiZWxWYWx1ZX0gaW5zdGFuY2VzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBQaXBlVHJhbnNwb3J0RWRnZUxhYmVsVmFsdWVJdGVtUHJvdmlkZXIgcGlwZVRyYW5zcG9ydEVkZ2VMYWJlbFZhbHVlSXRlbVByb3ZpZGVyOworCisJLyoqCisJICogVGhpcyBjcmVhdGVzIGFuIGFkYXB0ZXIgZm9yIGEge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMudHJhbnNwb3J0LlBpcGVUcmFuc3BvcnRFZGdlTGFiZWxWYWx1ZX0uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlUGlwZVRyYW5zcG9ydEVkZ2VMYWJlbFZhbHVlQWRhcHRlcigpIHsKKwkJaWYgKHBpcGVUcmFuc3BvcnRFZGdlTGFiZWxWYWx1ZUl0ZW1Qcm92aWRlciA9PSBudWxsKSB7CisJCQlwaXBlVHJhbnNwb3J0RWRnZUxhYmVsVmFsdWVJdGVtUHJvdmlkZXIgPSBuZXcgUGlwZVRyYW5zcG9ydEVkZ2VMYWJlbFZhbHVlSXRlbVByb3ZpZGVyKHRoaXMpOworCQl9CisKKwkJcmV0dXJuIHBpcGVUcmFuc3BvcnRFZGdlTGFiZWxWYWx1ZUl0ZW1Qcm92aWRlcjsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgdGhlIHJvb3QgYWRhcHRlciBmYWN0b3J5IHRoYXQgY29udGFpbnMgdGhpcyBmYWN0b3J5LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBDb21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5IGdldFJvb3RBZGFwdGVyRmFjdG9yeSgpIHsKKwkJcmV0dXJuIHBhcmVudEFkYXB0ZXJGYWN0b3J5ID09IG51bGwgPyB0aGlzIDogcGFyZW50QWRhcHRlckZhY3RvcnkuZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCk7CisJfQorCisJLyoqCisJICogVGhpcyBzZXRzIHRoZSBjb21wb3NlZCBhZGFwdGVyIGZhY3RvcnkgdGhhdCBjb250YWlucyB0aGlzIGZhY3RvcnkuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgc2V0UGFyZW50QWRhcHRlckZhY3RvcnkoQ29tcG9zZWRBZGFwdGVyRmFjdG9yeSBwYXJlbnRBZGFwdGVyRmFjdG9yeSkgeworCQl0aGlzLnBhcmVudEFkYXB0ZXJGYWN0b3J5ID0gcGFyZW50QWRhcHRlckZhY3Rvcnk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIGJvb2xlYW4gaXNGYWN0b3J5Rm9yVHlwZShPYmplY3QgdHlwZSkgeworCQlyZXR1cm4gc3VwcG9ydGVkVHlwZXMuY29udGFpbnModHlwZSkgfHwgc3VwZXIuaXNGYWN0b3J5Rm9yVHlwZSh0eXBlKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGltcGxlbWVudGF0aW9uIHN1YnN0aXR1dGVzIHRoZSBmYWN0b3J5IGl0c2VsZiBhcyB0aGUga2V5IGZvciB0aGUgYWRhcHRlci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgQWRhcHRlciBhZGFwdChOb3RpZmllciBub3RpZmllciwgT2JqZWN0IHR5cGUpIHsKKwkJcmV0dXJuIHN1cGVyLmFkYXB0KG5vdGlmaWVyLCB0aGlzKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgT2JqZWN0IGFkYXB0KE9iamVjdCBvYmplY3QsIE9iamVjdCB0eXBlKSB7CisJCWlmIChpc0ZhY3RvcnlGb3JUeXBlKHR5cGUpKSB7CisJCQlPYmplY3QgYWRhcHRlciA9IHN1cGVyLmFkYXB0KG9iamVjdCwgdHlwZSk7CisJCQlpZiAoISh0eXBlIGluc3RhbmNlb2YgQ2xhc3M8Pz4pIHx8ICgoKENsYXNzPD8+KXR5cGUpLmlzSW5zdGFuY2UoYWRhcHRlcikpKSB7CisJCQkJcmV0dXJuIGFkYXB0ZXI7CisJCQl9CisJCX0KKworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFkZHMgYSBsaXN0ZW5lci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBhZGRMaXN0ZW5lcihJTm90aWZ5Q2hhbmdlZExpc3RlbmVyIG5vdGlmeUNoYW5nZWRMaXN0ZW5lcikgeworCQljaGFuZ2VOb3RpZmllci5hZGRMaXN0ZW5lcihub3RpZnlDaGFuZ2VkTGlzdGVuZXIpOworCX0KKworCS8qKgorCSAqIFRoaXMgcmVtb3ZlcyBhIGxpc3RlbmVyLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIHJlbW92ZUxpc3RlbmVyKElOb3RpZnlDaGFuZ2VkTGlzdGVuZXIgbm90aWZ5Q2hhbmdlZExpc3RlbmVyKSB7CisJCWNoYW5nZU5vdGlmaWVyLnJlbW92ZUxpc3RlbmVyKG5vdGlmeUNoYW5nZWRMaXN0ZW5lcik7CisJfQorCisJLyoqCisJICogVGhpcyBkZWxlZ2F0ZXMgdG8ge0BsaW5rICNjaGFuZ2VOb3RpZmllcn0gYW5kIHRvIHtAbGluayAjcGFyZW50QWRhcHRlckZhY3Rvcnl9LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIGZpcmVOb3RpZnlDaGFuZ2VkKE5vdGlmaWNhdGlvbiBub3RpZmljYXRpb24pIHsKKwkJY2hhbmdlTm90aWZpZXIuZmlyZU5vdGlmeUNoYW5nZWQobm90aWZpY2F0aW9uKTsKKworCQlpZiAocGFyZW50QWRhcHRlckZhY3RvcnkgIT0gbnVsbCkgeworCQkJcGFyZW50QWRhcHRlckZhY3RvcnkuZmlyZU5vdGlmeUNoYW5nZWQobm90aWZpY2F0aW9uKTsKKwkJfQorCX0KKworCS8qKgorCSAqIFRoaXMgZGlzcG9zZXMgYWxsIG9mIHRoZSBpdGVtIHByb3ZpZGVycyBjcmVhdGVkIGJ5IHRoaXMgZmFjdG9yeS4gCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgZGlzcG9zZSgpIHsKKwkJaWYgKHBpcGVTdHlsZVRyYW5zcG9ydFN5c3RlbUl0ZW1Qcm92aWRlciAhPSBudWxsKSBwaXBlU3R5bGVUcmFuc3BvcnRTeXN0ZW1JdGVtUHJvdmlkZXIuZGlzcG9zZSgpOworCQlpZiAocGlwZVRyYW5zcG9ydEVkZ2VJdGVtUHJvdmlkZXIgIT0gbnVsbCkgcGlwZVRyYW5zcG9ydEVkZ2VJdGVtUHJvdmlkZXIuZGlzcG9zZSgpOworCQlpZiAocGlwZVRyYW5zcG9ydEVkZ2VMYWJlbEl0ZW1Qcm92aWRlciAhPSBudWxsKSBwaXBlVHJhbnNwb3J0RWRnZUxhYmVsSXRlbVByb3ZpZGVyLmRpc3Bvc2UoKTsKKwkJaWYgKHBpcGVUcmFuc3BvcnRFZGdlTGFiZWxWYWx1ZUl0ZW1Qcm92aWRlciAhPSBudWxsKSBwaXBlVHJhbnNwb3J0RWRnZUxhYmVsVmFsdWVJdGVtUHJvdmlkZXIuZGlzcG9zZSgpOworCX0KKworfQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnRyYW5zcG9ydC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy90cmFuc3BvcnQvcHJvdmlkZXIvVHJhbnNwb3J0U3lzdGVtSXRlbVByb3ZpZGVyLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udHJhbnNwb3J0L3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL3RyYW5zcG9ydC9wcm92aWRlci9UcmFuc3BvcnRTeXN0ZW1JdGVtUHJvdmlkZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YTI0ZmNiCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnRyYW5zcG9ydC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy90cmFuc3BvcnQvcHJvdmlkZXIvVHJhbnNwb3J0U3lzdGVtSXRlbVByb3ZpZGVyLmphdmEKQEAgLTAsMCArMSwxMjQgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy50cmFuc3BvcnQucHJvdmlkZXI7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTEgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5BZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb247CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuUmVzb3VyY2VMb2NhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5VUkk7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JRWRpdGluZ0RvbWFpbkl0ZW1Qcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbUxhYmVsUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1Qcm9wZXJ0eVNvdXJjZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JU3RydWN0dXJlZEl0ZW1Db250ZW50UHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVRyZWVJdGVtQ29udGVudFByb3ZpZGVyOworCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLnByb3ZpZGVyLk5vZGVJdGVtUHJvdmlkZXI7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLnRyYW5zcG9ydC5UcmFuc3BvcnRTeXN0ZW07CisKKy8qKgorICogVGhpcyBpcyB0aGUgaXRlbSBwcm92aWRlciBhZGFwdGVyIGZvciBhIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLnRyYW5zcG9ydC5UcmFuc3BvcnRTeXN0ZW19IG9iamVjdC4KKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIFRyYW5zcG9ydFN5c3RlbUl0ZW1Qcm92aWRlcgorCWV4dGVuZHMgTm9kZUl0ZW1Qcm92aWRlcgorCWltcGxlbWVudHMKKwkJSUVkaXRpbmdEb21haW5JdGVtUHJvdmlkZXIsCisJCUlTdHJ1Y3R1cmVkSXRlbUNvbnRlbnRQcm92aWRlciwKKwkJSVRyZWVJdGVtQ29udGVudFByb3ZpZGVyLAorCQlJSXRlbUxhYmVsUHJvdmlkZXIsCisJCUlJdGVtUHJvcGVydHlTb3VyY2UgeworCS8qKgorCSAqIFRoaXMgY29uc3RydWN0cyBhbiBpbnN0YW5jZSBmcm9tIGEgZmFjdG9yeSBhbmQgYSBub3RpZmllci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVHJhbnNwb3J0U3lzdGVtSXRlbVByb3ZpZGVyKEFkYXB0ZXJGYWN0b3J5IGFkYXB0ZXJGYWN0b3J5KSB7CisJCXN1cGVyKGFkYXB0ZXJGYWN0b3J5KTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgdGhlIHByb3BlcnR5IGRlc2NyaXB0b3JzIGZvciB0aGUgYWRhcHRlZCBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgTGlzdDxJSXRlbVByb3BlcnR5RGVzY3JpcHRvcj4gZ2V0UHJvcGVydHlEZXNjcmlwdG9ycyhPYmplY3Qgb2JqZWN0KSB7CisJCWlmIChpdGVtUHJvcGVydHlEZXNjcmlwdG9ycyA9PSBudWxsKSB7CisJCQlzdXBlci5nZXRQcm9wZXJ0eURlc2NyaXB0b3JzKG9iamVjdCk7CisKKwkJfQorCQlyZXR1cm4gaXRlbVByb3BlcnR5RGVzY3JpcHRvcnM7CisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIHRoZSBsYWJlbCB0ZXh0IGZvciB0aGUgYWRhcHRlZCBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgU3RyaW5nIGdldFRleHQoT2JqZWN0IG9iamVjdCkgeworCQlVUkkgbGFiZWxWYWx1ZSA9ICgoVHJhbnNwb3J0U3lzdGVtKW9iamVjdCkuZ2V0VVJJKCk7CisJCVN0cmluZyBsYWJlbCA9IGxhYmVsVmFsdWUgPT0gbnVsbCA/IG51bGwgOiBsYWJlbFZhbHVlLnRvU3RyaW5nKCk7CisJCXJldHVybiBsYWJlbCA9PSBudWxsIHx8IGxhYmVsLmxlbmd0aCgpID09IDAgPworCQkJZ2V0U3RyaW5nKCJfVUlfVHJhbnNwb3J0U3lzdGVtX3R5cGUiKSA6CisJCQlnZXRTdHJpbmcoIl9VSV9UcmFuc3BvcnRTeXN0ZW1fdHlwZSIpICsgIiAiICsgbGFiZWw7CisJfQorCisJLyoqCisJICogVGhpcyBoYW5kbGVzIG1vZGVsIG5vdGlmaWNhdGlvbnMgYnkgY2FsbGluZyB7QGxpbmsgI3VwZGF0ZUNoaWxkcmVufSB0byB1cGRhdGUgYW55IGNhY2hlZAorCSAqIGNoaWxkcmVuIGFuZCBieSBjcmVhdGluZyBhIHZpZXdlciBub3RpZmljYXRpb24sIHdoaWNoIGl0IHBhc3NlcyB0byB7QGxpbmsgI2ZpcmVOb3RpZnlDaGFuZ2VkfS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBub3RpZnlDaGFuZ2VkKE5vdGlmaWNhdGlvbiBub3RpZmljYXRpb24pIHsKKwkJdXBkYXRlQ2hpbGRyZW4obm90aWZpY2F0aW9uKTsKKwkJc3VwZXIubm90aWZ5Q2hhbmdlZChub3RpZmljYXRpb24pOworCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmVkaXQuY29tbWFuZC5Db21tYW5kUGFyYW1ldGVyfXMgZGVzY3JpYmluZyB0aGUgY2hpbGRyZW4KKwkgKiB0aGF0IGNhbiBiZSBjcmVhdGVkIHVuZGVyIHRoaXMgb2JqZWN0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIGNvbGxlY3ROZXdDaGlsZERlc2NyaXB0b3JzKENvbGxlY3Rpb248T2JqZWN0PiBuZXdDaGlsZERlc2NyaXB0b3JzLCBPYmplY3Qgb2JqZWN0KSB7CisJCXN1cGVyLmNvbGxlY3ROZXdDaGlsZERlc2NyaXB0b3JzKG5ld0NoaWxkRGVzY3JpcHRvcnMsIG9iamVjdCk7CisJfQorCisJLyoqCisJICogUmV0dXJuIHRoZSByZXNvdXJjZSBsb2NhdG9yIGZvciB0aGlzIGl0ZW0gcHJvdmlkZXIncyByZXNvdXJjZXMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIFJlc291cmNlTG9jYXRvciBnZXRSZXNvdXJjZUxvY2F0b3IoKSB7CisJCXJldHVybiBUcmFuc3BvcnRFZGl0UGx1Z2luLklOU1RBTkNFOworCX0KKworfQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnRyYW5zcG9ydC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy90cmFuc3BvcnQvdXRpbC9UcmFuc3BvcnRBZGFwdGVyRmFjdG9yeS5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnRyYW5zcG9ydC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy90cmFuc3BvcnQvdXRpbC9UcmFuc3BvcnRBZGFwdGVyRmFjdG9yeS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMwYzI0NDEKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udHJhbnNwb3J0L3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL3RyYW5zcG9ydC91dGlsL1RyYW5zcG9ydEFkYXB0ZXJGYWN0b3J5LmphdmEKQEAgLTAsMCArMSwzOTIgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy50cmFuc3BvcnQudXRpbDsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5BZGFwdGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LmltcGwuQWRhcHRlckZhY3RvcnlJbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uSWRlbnRpZmlhYmxlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uU2FuaXR5Q2hlY2tlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguRWRnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguRWRnZUxhYmVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5MYWJlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguTGFiZWxWYWx1ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguTm9kZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuTW9kaWZpYWJsZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmVkZ2VzLlBvcHVsYXRpb25FZGdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMudHJhbnNwb3J0LlBpcGVTdHlsZVRyYW5zcG9ydFN5c3RlbTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLnRyYW5zcG9ydC5QaXBlVHJhbnNwb3J0RWRnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLnRyYW5zcG9ydC5QaXBlVHJhbnNwb3J0RWRnZUxhYmVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMudHJhbnNwb3J0LlBpcGVUcmFuc3BvcnRFZGdlTGFiZWxWYWx1ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLnRyYW5zcG9ydC5UcmFuc3BvcnRQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMudHJhbnNwb3J0LlRyYW5zcG9ydFN5c3RlbTsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogVGhlIDxiPkFkYXB0ZXIgRmFjdG9yeTwvYj4gZm9yIHRoZSBtb2RlbC4KKyAqIEl0IHByb3ZpZGVzIGFuIGFkYXB0ZXIgPGNvZGU+Y3JlYXRlWFhYPC9jb2RlPiBtZXRob2QgZm9yIGVhY2ggY2xhc3Mgb2YgdGhlIG1vZGVsLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMudHJhbnNwb3J0LlRyYW5zcG9ydFBhY2thZ2UKKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIFRyYW5zcG9ydEFkYXB0ZXJGYWN0b3J5IGV4dGVuZHMgQWRhcHRlckZhY3RvcnlJbXBsIHsKKwkvKioKKwkgKiBUaGUgY2FjaGVkIG1vZGVsIHBhY2thZ2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHN0YXRpYyBUcmFuc3BvcnRQYWNrYWdlIG1vZGVsUGFja2FnZTsKKworCS8qKgorCSAqIENyZWF0ZXMgYW4gaW5zdGFuY2Ugb2YgdGhlIGFkYXB0ZXIgZmFjdG9yeS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVHJhbnNwb3J0QWRhcHRlckZhY3RvcnkoKSB7CisJCWlmIChtb2RlbFBhY2thZ2UgPT0gbnVsbCkgeworCQkJbW9kZWxQYWNrYWdlID0gVHJhbnNwb3J0UGFja2FnZS5lSU5TVEFOQ0U7CisJCX0KKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHdoZXRoZXIgdGhpcyBmYWN0b3J5IGlzIGFwcGxpY2FibGUgZm9yIHRoZSB0eXBlIG9mIHRoZSBvYmplY3QuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgPGNvZGU+dHJ1ZTwvY29kZT4gaWYgdGhlIG9iamVjdCBpcyBlaXRoZXIgdGhlIG1vZGVsJ3MgcGFja2FnZSBvciBpcyBhbiBpbnN0YW5jZSBvYmplY3Qgb2YgdGhlIG1vZGVsLgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gd2hldGhlciB0aGlzIGZhY3RvcnkgaXMgYXBwbGljYWJsZSBmb3IgdGhlIHR5cGUgb2YgdGhlIG9iamVjdC4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIGJvb2xlYW4gaXNGYWN0b3J5Rm9yVHlwZShPYmplY3Qgb2JqZWN0KSB7CisJCWlmIChvYmplY3QgPT0gbW9kZWxQYWNrYWdlKSB7CisJCQlyZXR1cm4gdHJ1ZTsKKwkJfQorCQlpZiAob2JqZWN0IGluc3RhbmNlb2YgRU9iamVjdCkgeworCQkJcmV0dXJuICgoRU9iamVjdClvYmplY3QpLmVDbGFzcygpLmdldEVQYWNrYWdlKCkgPT0gbW9kZWxQYWNrYWdlOworCQl9CisJCXJldHVybiBmYWxzZTsKKwl9CisKKwkvKioKKwkgKiBUaGUgc3dpdGNoIHRoYXQgZGVsZWdhdGVzIHRvIHRoZSA8Y29kZT5jcmVhdGVYWFg8L2NvZGU+IG1ldGhvZHMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIFRyYW5zcG9ydFN3aXRjaDxBZGFwdGVyPiBtb2RlbFN3aXRjaCA9CisJCW5ldyBUcmFuc3BvcnRTd2l0Y2g8QWRhcHRlcj4oKSB7CisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyBBZGFwdGVyIGNhc2VQaXBlU3R5bGVUcmFuc3BvcnRTeXN0ZW0oUGlwZVN0eWxlVHJhbnNwb3J0U3lzdGVtIG9iamVjdCkgeworCQkJCXJldHVybiBjcmVhdGVQaXBlU3R5bGVUcmFuc3BvcnRTeXN0ZW1BZGFwdGVyKCk7CisJCQl9CisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyBBZGFwdGVyIGNhc2VUcmFuc3BvcnRTeXN0ZW0oVHJhbnNwb3J0U3lzdGVtIG9iamVjdCkgeworCQkJCXJldHVybiBjcmVhdGVUcmFuc3BvcnRTeXN0ZW1BZGFwdGVyKCk7CisJCQl9CisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyBBZGFwdGVyIGNhc2VQaXBlVHJhbnNwb3J0RWRnZShQaXBlVHJhbnNwb3J0RWRnZSBvYmplY3QpIHsKKwkJCQlyZXR1cm4gY3JlYXRlUGlwZVRyYW5zcG9ydEVkZ2VBZGFwdGVyKCk7CisJCQl9CisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyBBZGFwdGVyIGNhc2VQaXBlVHJhbnNwb3J0RWRnZUxhYmVsKFBpcGVUcmFuc3BvcnRFZGdlTGFiZWwgb2JqZWN0KSB7CisJCQkJcmV0dXJuIGNyZWF0ZVBpcGVUcmFuc3BvcnRFZGdlTGFiZWxBZGFwdGVyKCk7CisJCQl9CisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyBBZGFwdGVyIGNhc2VQaXBlVHJhbnNwb3J0RWRnZUxhYmVsVmFsdWUoUGlwZVRyYW5zcG9ydEVkZ2VMYWJlbFZhbHVlIG9iamVjdCkgeworCQkJCXJldHVybiBjcmVhdGVQaXBlVHJhbnNwb3J0RWRnZUxhYmVsVmFsdWVBZGFwdGVyKCk7CisJCQl9CisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyA8VD4gQWRhcHRlciBjYXNlQ29tcGFyYWJsZShDb21wYXJhYmxlPFQ+IG9iamVjdCkgeworCQkJCXJldHVybiBjcmVhdGVDb21wYXJhYmxlQWRhcHRlcigpOworCQkJfQorCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgQWRhcHRlciBjYXNlSWRlbnRpZmlhYmxlKElkZW50aWZpYWJsZSBvYmplY3QpIHsKKwkJCQlyZXR1cm4gY3JlYXRlSWRlbnRpZmlhYmxlQWRhcHRlcigpOworCQkJfQorCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgQWRhcHRlciBjYXNlTm9kZShOb2RlIG9iamVjdCkgeworCQkJCXJldHVybiBjcmVhdGVOb2RlQWRhcHRlcigpOworCQkJfQorCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgQWRhcHRlciBjYXNlTW9kaWZpYWJsZShNb2RpZmlhYmxlIG9iamVjdCkgeworCQkJCXJldHVybiBjcmVhdGVNb2RpZmlhYmxlQWRhcHRlcigpOworCQkJfQorCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgQWRhcHRlciBjYXNlRWRnZShFZGdlIG9iamVjdCkgeworCQkJCXJldHVybiBjcmVhdGVFZGdlQWRhcHRlcigpOworCQkJfQorCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgQWRhcHRlciBjYXNlUG9wdWxhdGlvbkVkZ2UoUG9wdWxhdGlvbkVkZ2Ugb2JqZWN0KSB7CisJCQkJcmV0dXJuIGNyZWF0ZVBvcHVsYXRpb25FZGdlQWRhcHRlcigpOworCQkJfQorCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgQWRhcHRlciBjYXNlTGFiZWwoTGFiZWwgb2JqZWN0KSB7CisJCQkJcmV0dXJuIGNyZWF0ZUxhYmVsQWRhcHRlcigpOworCQkJfQorCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgQWRhcHRlciBjYXNlRWRnZUxhYmVsKEVkZ2VMYWJlbCBvYmplY3QpIHsKKwkJCQlyZXR1cm4gY3JlYXRlRWRnZUxhYmVsQWRhcHRlcigpOworCQkJfQorCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgQWRhcHRlciBjYXNlU2FuaXR5Q2hlY2tlcihTYW5pdHlDaGVja2VyIG9iamVjdCkgeworCQkJCXJldHVybiBjcmVhdGVTYW5pdHlDaGVja2VyQWRhcHRlcigpOworCQkJfQorCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgQWRhcHRlciBjYXNlTGFiZWxWYWx1ZShMYWJlbFZhbHVlIG9iamVjdCkgeworCQkJCXJldHVybiBjcmVhdGVMYWJlbFZhbHVlQWRhcHRlcigpOworCQkJfQorCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgQWRhcHRlciBkZWZhdWx0Q2FzZShFT2JqZWN0IG9iamVjdCkgeworCQkJCXJldHVybiBjcmVhdGVFT2JqZWN0QWRhcHRlcigpOworCQkJfQorCQl9OworCisJLyoqCisJICogQ3JlYXRlcyBhbiBhZGFwdGVyIGZvciB0aGUgPGNvZGU+dGFyZ2V0PC9jb2RlPi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSB0YXJnZXQgdGhlIG9iamVjdCB0byBhZGFwdC4KKwkgKiBAcmV0dXJuIHRoZSBhZGFwdGVyIGZvciB0aGUgPGNvZGU+dGFyZ2V0PC9jb2RlPi4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlQWRhcHRlcihOb3RpZmllciB0YXJnZXQpIHsKKwkJcmV0dXJuIG1vZGVsU3dpdGNoLmRvU3dpdGNoKChFT2JqZWN0KXRhcmdldCk7CisJfQorCisKKwkvKioKKwkgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMudHJhbnNwb3J0LlBpcGVTdHlsZVRyYW5zcG9ydFN5c3RlbSA8ZW0+UGlwZSBTdHlsZSBUcmFuc3BvcnQgU3lzdGVtPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsKKwkgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMudHJhbnNwb3J0LlBpcGVTdHlsZVRyYW5zcG9ydFN5c3RlbQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVQaXBlU3R5bGVUcmFuc3BvcnRTeXN0ZW1BZGFwdGVyKCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMudHJhbnNwb3J0LlRyYW5zcG9ydFN5c3RlbSA8ZW0+U3lzdGVtPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsKKwkgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMudHJhbnNwb3J0LlRyYW5zcG9ydFN5c3RlbQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVUcmFuc3BvcnRTeXN0ZW1BZGFwdGVyKCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMudHJhbnNwb3J0LlBpcGVUcmFuc3BvcnRFZGdlIDxlbT5QaXBlIFRyYW5zcG9ydCBFZGdlPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsKKwkgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMudHJhbnNwb3J0LlBpcGVUcmFuc3BvcnRFZGdlCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZVBpcGVUcmFuc3BvcnRFZGdlQWRhcHRlcigpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLnRyYW5zcG9ydC5QaXBlVHJhbnNwb3J0RWRnZUxhYmVsIDxlbT5QaXBlIFRyYW5zcG9ydCBFZGdlIExhYmVsPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsKKwkgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMudHJhbnNwb3J0LlBpcGVUcmFuc3BvcnRFZGdlTGFiZWwKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlUGlwZVRyYW5zcG9ydEVkZ2VMYWJlbEFkYXB0ZXIoKSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy50cmFuc3BvcnQuUGlwZVRyYW5zcG9ydEVkZ2VMYWJlbFZhbHVlIDxlbT5QaXBlIFRyYW5zcG9ydCBFZGdlIExhYmVsIFZhbHVlPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsKKwkgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMudHJhbnNwb3J0LlBpcGVUcmFuc3BvcnRFZGdlTGFiZWxWYWx1ZQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVQaXBlVHJhbnNwb3J0RWRnZUxhYmVsVmFsdWVBZGFwdGVyKCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIGphdmEubGFuZy5Db21wYXJhYmxlIDxlbT5Db21wYXJhYmxlPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsKKwkgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KKwkgKiBAc2VlIGphdmEubGFuZy5Db21wYXJhYmxlCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZUNvbXBhcmFibGVBZGFwdGVyKCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uSWRlbnRpZmlhYmxlIDxlbT5JZGVudGlmaWFibGU8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOworCSAqIGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZSB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5LgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5JZGVudGlmaWFibGUKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlSWRlbnRpZmlhYmxlQWRhcHRlcigpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuTW9kaWZpYWJsZSA8ZW0+TW9kaWZpYWJsZTwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7CisJICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuTW9kaWZpYWJsZQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVNb2RpZmlhYmxlQWRhcHRlcigpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguRWRnZSA8ZW0+RWRnZTwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7CisJICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguRWRnZQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVFZGdlQWRhcHRlcigpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmVkZ2VzLlBvcHVsYXRpb25FZGdlIDxlbT5Qb3B1bGF0aW9uIEVkZ2U8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOworCSAqIGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZSB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5LgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5lZGdlcy5Qb3B1bGF0aW9uRWRnZQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVQb3B1bGF0aW9uRWRnZUFkYXB0ZXIoKSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkxhYmVsIDxlbT5MYWJlbDwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7CisJICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguTGFiZWwKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlTGFiZWxBZGFwdGVyKCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5FZGdlTGFiZWwgPGVtPkVkZ2UgTGFiZWw8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOworCSAqIGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZSB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5LgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkVkZ2VMYWJlbAorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVFZGdlTGFiZWxBZGFwdGVyKCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5Ob2RlIDxlbT5Ob2RlPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsKKwkgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5Ob2RlCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZU5vZGVBZGFwdGVyKCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uU2FuaXR5Q2hlY2tlciA8ZW0+U2FuaXR5IENoZWNrZXI8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOworCSAqIGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZSB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5LgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5TYW5pdHlDaGVja2VyCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZVNhbml0eUNoZWNrZXJBZGFwdGVyKCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5MYWJlbFZhbHVlIDxlbT5MYWJlbCBWYWx1ZTwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7CisJICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguTGFiZWxWYWx1ZQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVMYWJlbFZhbHVlQWRhcHRlcigpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciB0aGUgZGVmYXVsdCBjYXNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbC4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlRU9iamVjdEFkYXB0ZXIoKSB7CisJCXJldHVybiBudWxsOworCX0KKworfSAvL1RyYW5zcG9ydEFkYXB0ZXJGYWN0b3J5CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udHJhbnNwb3J0L3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL3RyYW5zcG9ydC91dGlsL1RyYW5zcG9ydFN3aXRjaC5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnRyYW5zcG9ydC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy90cmFuc3BvcnQvdXRpbC9UcmFuc3BvcnRTd2l0Y2guamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MDZkZjU2Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnRyYW5zcG9ydC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy90cmFuc3BvcnQvdXRpbC9UcmFuc3BvcnRTd2l0Y2guamF2YQpAQCAtMCwwICsxLDQwMSBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLnRyYW5zcG9ydC51dGlsOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGphdmEudXRpbC5MaXN0OworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzczsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLklkZW50aWZpYWJsZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLlNhbml0eUNoZWNrZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkVkZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkVkZ2VMYWJlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguTGFiZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkxhYmVsVmFsdWU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLk5vZGU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLk1vZGlmaWFibGU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5lZGdlcy5Qb3B1bGF0aW9uRWRnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLnRyYW5zcG9ydC5QaXBlU3R5bGVUcmFuc3BvcnRTeXN0ZW07CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy50cmFuc3BvcnQuUGlwZVRyYW5zcG9ydEVkZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy50cmFuc3BvcnQuUGlwZVRyYW5zcG9ydEVkZ2VMYWJlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLnRyYW5zcG9ydC5QaXBlVHJhbnNwb3J0RWRnZUxhYmVsVmFsdWU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy50cmFuc3BvcnQuVHJhbnNwb3J0UGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLnRyYW5zcG9ydC5UcmFuc3BvcnRTeXN0ZW07CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIFRoZSA8Yj5Td2l0Y2g8L2I+IGZvciB0aGUgbW9kZWwncyBpbmhlcml0YW5jZSBoaWVyYXJjaHkuCisgKiBJdCBzdXBwb3J0cyB0aGUgY2FsbCB7QGxpbmsgI2RvU3dpdGNoKEVPYmplY3QpIGRvU3dpdGNoKG9iamVjdCl9CisgKiB0byBpbnZva2UgdGhlIDxjb2RlPmNhc2VYWFg8L2NvZGU+IG1ldGhvZCBmb3IgZWFjaCBjbGFzcyBvZiB0aGUgbW9kZWwsCisgKiBzdGFydGluZyB3aXRoIHRoZSBhY3R1YWwgY2xhc3Mgb2YgdGhlIG9iamVjdAorICogYW5kIHByb2NlZWRpbmcgdXAgdGhlIGluaGVyaXRhbmNlIGhpZXJhcmNoeQorICogdW50aWwgYSBub24tbnVsbCByZXN1bHQgaXMgcmV0dXJuZWQsCisgKiB3aGljaCBpcyB0aGUgcmVzdWx0IG9mIHRoZSBzd2l0Y2guCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy50cmFuc3BvcnQuVHJhbnNwb3J0UGFja2FnZQorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgVHJhbnNwb3J0U3dpdGNoPFQxPiB7CisJLyoqCisJICogVGhlIGNhY2hlZCBtb2RlbCBwYWNrYWdlCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHN0YXRpYyBUcmFuc3BvcnRQYWNrYWdlIG1vZGVsUGFja2FnZTsKKworCS8qKgorCSAqIENyZWF0ZXMgYW4gaW5zdGFuY2Ugb2YgdGhlIHN3aXRjaC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVHJhbnNwb3J0U3dpdGNoKCkgeworCQlpZiAobW9kZWxQYWNrYWdlID09IG51bGwpIHsKKwkJCW1vZGVsUGFja2FnZSA9IFRyYW5zcG9ydFBhY2thZ2UuZUlOU1RBTkNFOworCQl9CisJfQorCisJLyoqCisJICogQ2FsbHMgPGNvZGU+Y2FzZVhYWDwvY29kZT4gZm9yIGVhY2ggY2xhc3Mgb2YgdGhlIG1vZGVsIHVudGlsIG9uZSByZXR1cm5zIGEgbm9uIG51bGwgcmVzdWx0OyBpdCB5aWVsZHMgdGhhdCByZXN1bHQuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBmaXJzdCBub24tbnVsbCByZXN1bHQgcmV0dXJuZWQgYnkgYSA8Y29kZT5jYXNlWFhYPC9jb2RlPiBjYWxsLgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVDEgZG9Td2l0Y2goRU9iamVjdCB0aGVFT2JqZWN0KSB7CisJCXJldHVybiBkb1N3aXRjaCh0aGVFT2JqZWN0LmVDbGFzcygpLCB0aGVFT2JqZWN0KTsKKwl9CisKKwkvKioKKwkgKiBDYWxscyA8Y29kZT5jYXNlWFhYPC9jb2RlPiBmb3IgZWFjaCBjbGFzcyBvZiB0aGUgbW9kZWwgdW50aWwgb25lIHJldHVybnMgYSBub24gbnVsbCByZXN1bHQ7IGl0IHlpZWxkcyB0aGF0IHJlc3VsdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIGZpcnN0IG5vbi1udWxsIHJlc3VsdCByZXR1cm5lZCBieSBhIDxjb2RlPmNhc2VYWFg8L2NvZGU+IGNhbGwuCisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBUMSBkb1N3aXRjaChFQ2xhc3MgdGhlRUNsYXNzLCBFT2JqZWN0IHRoZUVPYmplY3QpIHsKKwkJaWYgKHRoZUVDbGFzcy5lQ29udGFpbmVyKCkgPT0gbW9kZWxQYWNrYWdlKSB7CisJCQlyZXR1cm4gZG9Td2l0Y2godGhlRUNsYXNzLmdldENsYXNzaWZpZXJJRCgpLCB0aGVFT2JqZWN0KTsKKwkJfQorCQllbHNlIHsKKwkJCUxpc3Q8RUNsYXNzPiBlU3VwZXJUeXBlcyA9IHRoZUVDbGFzcy5nZXRFU3VwZXJUeXBlcygpOworCQkJcmV0dXJuCisJCQkJZVN1cGVyVHlwZXMuaXNFbXB0eSgpID8KKwkJCQkJZGVmYXVsdENhc2UodGhlRU9iamVjdCkgOgorCQkJCQlkb1N3aXRjaChlU3VwZXJUeXBlcy5nZXQoMCksIHRoZUVPYmplY3QpOworCQl9CisJfQorCisJLyoqCisJICogQ2FsbHMgPGNvZGU+Y2FzZVhYWDwvY29kZT4gZm9yIGVhY2ggY2xhc3Mgb2YgdGhlIG1vZGVsIHVudGlsIG9uZSByZXR1cm5zIGEgbm9uIG51bGwgcmVzdWx0OyBpdCB5aWVsZHMgdGhhdCByZXN1bHQuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBmaXJzdCBub24tbnVsbCByZXN1bHQgcmV0dXJuZWQgYnkgYSA8Y29kZT5jYXNlWFhYPC9jb2RlPiBjYWxsLgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgVDEgZG9Td2l0Y2goaW50IGNsYXNzaWZpZXJJRCwgRU9iamVjdCB0aGVFT2JqZWN0KSB7CisJCXN3aXRjaCAoY2xhc3NpZmllcklEKSB7CisJCQljYXNlIFRyYW5zcG9ydFBhY2thZ2UuUElQRV9TVFlMRV9UUkFOU1BPUlRfU1lTVEVNOiB7CisJCQkJUGlwZVN0eWxlVHJhbnNwb3J0U3lzdGVtIHBpcGVTdHlsZVRyYW5zcG9ydFN5c3RlbSA9IChQaXBlU3R5bGVUcmFuc3BvcnRTeXN0ZW0pdGhlRU9iamVjdDsKKwkJCQlUMSByZXN1bHQgPSBjYXNlUGlwZVN0eWxlVHJhbnNwb3J0U3lzdGVtKHBpcGVTdHlsZVRyYW5zcG9ydFN5c3RlbSk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlVHJhbnNwb3J0U3lzdGVtKHBpcGVTdHlsZVRyYW5zcG9ydFN5c3RlbSk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlTm9kZShwaXBlU3R5bGVUcmFuc3BvcnRTeXN0ZW0pOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZUlkZW50aWZpYWJsZShwaXBlU3R5bGVUcmFuc3BvcnRTeXN0ZW0pOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZUNvbXBhcmFibGUocGlwZVN0eWxlVHJhbnNwb3J0U3lzdGVtKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGRlZmF1bHRDYXNlKHRoZUVPYmplY3QpOworCQkJCXJldHVybiByZXN1bHQ7CisJCQl9CisJCQljYXNlIFRyYW5zcG9ydFBhY2thZ2UuVFJBTlNQT1JUX1NZU1RFTTogeworCQkJCVRyYW5zcG9ydFN5c3RlbSB0cmFuc3BvcnRTeXN0ZW0gPSAoVHJhbnNwb3J0U3lzdGVtKXRoZUVPYmplY3Q7CisJCQkJVDEgcmVzdWx0ID0gY2FzZVRyYW5zcG9ydFN5c3RlbSh0cmFuc3BvcnRTeXN0ZW0pOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZU5vZGUodHJhbnNwb3J0U3lzdGVtKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VJZGVudGlmaWFibGUodHJhbnNwb3J0U3lzdGVtKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VDb21wYXJhYmxlKHRyYW5zcG9ydFN5c3RlbSk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBkZWZhdWx0Q2FzZSh0aGVFT2JqZWN0KTsKKwkJCQlyZXR1cm4gcmVzdWx0OworCQkJfQorCQkJY2FzZSBUcmFuc3BvcnRQYWNrYWdlLlBJUEVfVFJBTlNQT1JUX0VER0U6IHsKKwkJCQlQaXBlVHJhbnNwb3J0RWRnZSBwaXBlVHJhbnNwb3J0RWRnZSA9IChQaXBlVHJhbnNwb3J0RWRnZSl0aGVFT2JqZWN0OworCQkJCVQxIHJlc3VsdCA9IGNhc2VQaXBlVHJhbnNwb3J0RWRnZShwaXBlVHJhbnNwb3J0RWRnZSk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlUG9wdWxhdGlvbkVkZ2UocGlwZVRyYW5zcG9ydEVkZ2UpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZUVkZ2UocGlwZVRyYW5zcG9ydEVkZ2UpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZUlkZW50aWZpYWJsZShwaXBlVHJhbnNwb3J0RWRnZSk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlTW9kaWZpYWJsZShwaXBlVHJhbnNwb3J0RWRnZSk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlQ29tcGFyYWJsZShwaXBlVHJhbnNwb3J0RWRnZSk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBkZWZhdWx0Q2FzZSh0aGVFT2JqZWN0KTsKKwkJCQlyZXR1cm4gcmVzdWx0OworCQkJfQorCQkJY2FzZSBUcmFuc3BvcnRQYWNrYWdlLlBJUEVfVFJBTlNQT1JUX0VER0VfTEFCRUw6IHsKKwkJCQlQaXBlVHJhbnNwb3J0RWRnZUxhYmVsIHBpcGVUcmFuc3BvcnRFZGdlTGFiZWwgPSAoUGlwZVRyYW5zcG9ydEVkZ2VMYWJlbCl0aGVFT2JqZWN0OworCQkJCVQxIHJlc3VsdCA9IGNhc2VQaXBlVHJhbnNwb3J0RWRnZUxhYmVsKHBpcGVUcmFuc3BvcnRFZGdlTGFiZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZUVkZ2VMYWJlbChwaXBlVHJhbnNwb3J0RWRnZUxhYmVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VNb2RpZmlhYmxlKHBpcGVUcmFuc3BvcnRFZGdlTGFiZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZUxhYmVsKHBpcGVUcmFuc3BvcnRFZGdlTGFiZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZUlkZW50aWZpYWJsZShwaXBlVHJhbnNwb3J0RWRnZUxhYmVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VDb21wYXJhYmxlKHBpcGVUcmFuc3BvcnRFZGdlTGFiZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gZGVmYXVsdENhc2UodGhlRU9iamVjdCk7CisJCQkJcmV0dXJuIHJlc3VsdDsKKwkJCX0KKwkJCWNhc2UgVHJhbnNwb3J0UGFja2FnZS5QSVBFX1RSQU5TUE9SVF9FREdFX0xBQkVMX1ZBTFVFOiB7CisJCQkJUGlwZVRyYW5zcG9ydEVkZ2VMYWJlbFZhbHVlIHBpcGVUcmFuc3BvcnRFZGdlTGFiZWxWYWx1ZSA9IChQaXBlVHJhbnNwb3J0RWRnZUxhYmVsVmFsdWUpdGhlRU9iamVjdDsKKwkJCQlUMSByZXN1bHQgPSBjYXNlUGlwZVRyYW5zcG9ydEVkZ2VMYWJlbFZhbHVlKHBpcGVUcmFuc3BvcnRFZGdlTGFiZWxWYWx1ZSk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlTGFiZWxWYWx1ZShwaXBlVHJhbnNwb3J0RWRnZUxhYmVsVmFsdWUpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZVNhbml0eUNoZWNrZXIocGlwZVRyYW5zcG9ydEVkZ2VMYWJlbFZhbHVlKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGRlZmF1bHRDYXNlKHRoZUVPYmplY3QpOworCQkJCXJldHVybiByZXN1bHQ7CisJCQl9CisJCQlkZWZhdWx0OiByZXR1cm4gZGVmYXVsdENhc2UodGhlRU9iamVjdCk7CisJCX0KKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5QaXBlIFN0eWxlIFRyYW5zcG9ydCBTeXN0ZW08L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsKKwkgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KKwkgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5QaXBlIFN0eWxlIFRyYW5zcG9ydCBTeXN0ZW08L2VtPicuCisJICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBUMSBjYXNlUGlwZVN0eWxlVHJhbnNwb3J0U3lzdGVtKFBpcGVTdHlsZVRyYW5zcG9ydFN5c3RlbSBvYmplY3QpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+U3lzdGVtPC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7CisJICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCisJICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+U3lzdGVtPC9lbT4nLgorCSAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVDEgY2FzZVRyYW5zcG9ydFN5c3RlbShUcmFuc3BvcnRTeXN0ZW0gb2JqZWN0KSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPlBpcGUgVHJhbnNwb3J0IEVkZ2U8L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsKKwkgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KKwkgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5QaXBlIFRyYW5zcG9ydCBFZGdlPC9lbT4nLgorCSAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVDEgY2FzZVBpcGVUcmFuc3BvcnRFZGdlKFBpcGVUcmFuc3BvcnRFZGdlIG9iamVjdCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5QaXBlIFRyYW5zcG9ydCBFZGdlIExhYmVsPC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7CisJICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCisJICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+UGlwZSBUcmFuc3BvcnQgRWRnZSBMYWJlbDwvZW0+Jy4KKwkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFQxIGNhc2VQaXBlVHJhbnNwb3J0RWRnZUxhYmVsKFBpcGVUcmFuc3BvcnRFZGdlTGFiZWwgb2JqZWN0KSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPlBpcGUgVHJhbnNwb3J0IEVkZ2UgTGFiZWwgVmFsdWU8L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsKKwkgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KKwkgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5QaXBlIFRyYW5zcG9ydCBFZGdlIExhYmVsIFZhbHVlPC9lbT4nLgorCSAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVDEgY2FzZVBpcGVUcmFuc3BvcnRFZGdlTGFiZWxWYWx1ZShQaXBlVHJhbnNwb3J0RWRnZUxhYmVsVmFsdWUgb2JqZWN0KSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkNvbXBhcmFibGU8L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsKKwkgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KKwkgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5Db21wYXJhYmxlPC9lbT4nLgorCSAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgPFQ+IFQxIGNhc2VDb21wYXJhYmxlKENvbXBhcmFibGU8VD4gb2JqZWN0KSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPklkZW50aWZpYWJsZTwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOworCSAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgorCSAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPklkZW50aWZpYWJsZTwvZW0+Jy4KKwkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFQxIGNhc2VJZGVudGlmaWFibGUoSWRlbnRpZmlhYmxlIG9iamVjdCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5Nb2RpZmlhYmxlPC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7CisJICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCisJICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+TW9kaWZpYWJsZTwvZW0+Jy4KKwkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFQxIGNhc2VNb2RpZmlhYmxlKE1vZGlmaWFibGUgb2JqZWN0KSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkVkZ2U8L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsKKwkgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KKwkgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5FZGdlPC9lbT4nLgorCSAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVDEgY2FzZUVkZ2UoRWRnZSBvYmplY3QpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+UG9wdWxhdGlvbiBFZGdlPC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7CisJICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCisJICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+UG9wdWxhdGlvbiBFZGdlPC9lbT4nLgorCSAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVDEgY2FzZVBvcHVsYXRpb25FZGdlKFBvcHVsYXRpb25FZGdlIG9iamVjdCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5MYWJlbDwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOworCSAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgorCSAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkxhYmVsPC9lbT4nLgorCSAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVDEgY2FzZUxhYmVsKExhYmVsIG9iamVjdCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5FZGdlIExhYmVsPC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7CisJICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCisJICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+RWRnZSBMYWJlbDwvZW0+Jy4KKwkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFQxIGNhc2VFZGdlTGFiZWwoRWRnZUxhYmVsIG9iamVjdCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5Ob2RlPC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7CisJICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCisJICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+Tm9kZTwvZW0+Jy4KKwkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFQxIGNhc2VOb2RlKE5vZGUgb2JqZWN0KSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPlNhbml0eSBDaGVja2VyPC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7CisJICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCisJICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+U2FuaXR5IENoZWNrZXI8L2VtPicuCisJICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBUMSBjYXNlU2FuaXR5Q2hlY2tlcihTYW5pdHlDaGVja2VyIG9iamVjdCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5MYWJlbCBWYWx1ZTwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOworCSAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgorCSAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkxhYmVsIFZhbHVlPC9lbT4nLgorCSAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVDEgY2FzZUxhYmVsVmFsdWUoTGFiZWxWYWx1ZSBvYmplY3QpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+RU9iamVjdDwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOworCSAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLCBidXQgdGhpcyBpcyB0aGUgbGFzdCBjYXNlIGFueXdheS4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KKwkgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5FT2JqZWN0PC9lbT4nLgorCSAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVDEgZGVmYXVsdENhc2UoRU9iamVjdCBvYmplY3QpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCit9IC8vVHJhbnNwb3J0U3dpdGNoCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkuZ2UvLmNsYXNzcGF0aCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5nZS8uY2xhc3NwYXRoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMwNGU4NjEKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkuZ2UvLmNsYXNzcGF0aApAQCAtMCwwICsxLDcgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8Y2xhc3NwYXRoPgorCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJzcmMiIHBhdGg9InNyYyIvPgorCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJjb24iIHBhdGg9Im9yZy5lY2xpcHNlLmpkdC5sYXVuY2hpbmcuSlJFX0NPTlRBSU5FUi9vcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwuZGVidWcudWkubGF1bmNoZXIuU3RhbmRhcmRWTVR5cGUvSjJTRS0xLjUiLz4KKwk8Y2xhc3NwYXRoZW50cnkga2luZD0iY29uIiBwYXRoPSJvcmcuZWNsaXBzZS5wZGUuY29yZS5yZXF1aXJlZFBsdWdpbnMiLz4KKwk8Y2xhc3NwYXRoZW50cnkga2luZD0ib3V0cHV0IiBwYXRoPSJiaW4iLz4KKzwvY2xhc3NwYXRoPgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLmdlLy5wcm9qZWN0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLmdlLy5wcm9qZWN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJiMjgyYTYKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkuZ2UvLnByb2plY3QKQEAgLTAsMCArMSwyOCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxwcm9qZWN0RGVzY3JpcHRpb24+CisJPG5hbWU+b3JnLmVjbGlwc2Uuc3RlbS51aS5nZTwvbmFtZT4KKwk8Y29tbWVudD48L2NvbW1lbnQ+CisJPHByb2plY3RzPgorCTwvcHJvamVjdHM+CisJPGJ1aWxkU3BlYz4KKwkJPGJ1aWxkQ29tbWFuZD4KKwkJCTxuYW1lPm9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFidWlsZGVyPC9uYW1lPgorCQkJPGFyZ3VtZW50cz4KKwkJCTwvYXJndW1lbnRzPgorCQk8L2J1aWxkQ29tbWFuZD4KKwkJPGJ1aWxkQ29tbWFuZD4KKwkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5NYW5pZmVzdEJ1aWxkZXI8L25hbWU+CisJCQk8YXJndW1lbnRzPgorCQkJPC9hcmd1bWVudHM+CisJCTwvYnVpbGRDb21tYW5kPgorCQk8YnVpbGRDb21tYW5kPgorCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLlNjaGVtYUJ1aWxkZXI8L25hbWU+CisJCQk8YXJndW1lbnRzPgorCQkJPC9hcmd1bWVudHM+CisJCTwvYnVpbGRDb21tYW5kPgorCTwvYnVpbGRTcGVjPgorCTxuYXR1cmVzPgorCQk8bmF0dXJlPm9yZy5lY2xpcHNlLnBkZS5QbHVnaW5OYXR1cmU8L25hdHVyZT4KKwkJPG5hdHVyZT5vcmcuZWNsaXBzZS5qZHQuY29yZS5qYXZhbmF0dXJlPC9uYXR1cmU+CisJPC9uYXR1cmVzPgorPC9wcm9qZWN0RGVzY3JpcHRpb24+CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkuZ2UvLnNldHRpbmdzL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLnByZWZzIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLmdlLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5wcmVmcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ODRjMDdkCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLmdlLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5wcmVmcwpAQCAtMCwwICsxLDMgQEAKKyNNb24gT2N0IDE2IDEyOjU2OjMyIFBEVCAyMDA2CitlY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQorZW5jb2RpbmcvL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL2dlL3ZpZXdzL21lc3NhZ2VzLnByb3BlcnRpZXM9ODg1OV8xCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkuZ2UvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLmdlLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMmJhMDkxCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLmdlLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcwpAQCAtMCwwICsxLDc0IEBACisjVHVlIFNlcCAxOSAxNTo0Mzo0NyBQRFQgMjAwNgorZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvZGVnZW4uaW5saW5lSnNyQnl0ZWNvZGU9ZW5hYmxlZAorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29kZWdlbi50YXJnZXRQbGF0Zm9ybT0xLjUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvZGVnZW4udW51c2VkTG9jYWw9b3B0aW1pemUgb3V0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb21wbGlhbmNlPTEuNQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuZGVidWcubGluZU51bWJlcj1nZW5lcmF0ZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuZGVidWcubG9jYWxWYXJpYWJsZT1nZW5lcmF0ZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuZGVidWcuc291cmNlRmlsZT1nZW5lcmF0ZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuZG9jLmNvbW1lbnQuc3VwcG9ydD1lbmFibGVkCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmFubm90YXRpb25TdXBlckludGVyZmFjZT13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmFzc2VydElkZW50aWZpZXI9ZXJyb3IKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uYXV0b2JveGluZz1pZ25vcmUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZGVwcmVjYXRpb249d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5kZXByZWNhdGlvbkluRGVwcmVjYXRlZENvZGU9ZGlzYWJsZWQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZGVwcmVjYXRpb25XaGVuT3ZlcnJpZGluZ0RlcHJlY2F0ZWRNZXRob2Q9ZGlzYWJsZWQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZGlzY291cmFnZWRSZWZlcmVuY2U9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5lbXB0eVN0YXRlbWVudD1pZ25vcmUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZW51bUlkZW50aWZpZXI9ZXJyb3IKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZmFsbHRocm91Z2hDYXNlPWlnbm9yZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5maWVsZEhpZGluZz1pZ25vcmUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZmluYWxQYXJhbWV0ZXJCb3VuZD13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZpbmFsbHlCbG9ja05vdENvbXBsZXRpbmdOb3JtYWxseT13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZvcmJpZGRlblJlZmVyZW5jZT1lcnJvcgorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5oaWRkZW5DYXRjaEJsb2NrPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW5jb21wYXRpYmxlTm9uSW5oZXJpdGVkSW50ZXJmYWNlTWV0aG9kPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW5jb21wbGV0ZUVudW1Td2l0Y2g9aWdub3JlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmluZGlyZWN0U3RhdGljQWNjZXNzPWlnbm9yZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbnZhbGlkSmF2YWRvYz13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmludmFsaWRKYXZhZG9jVGFncz1kaXNhYmxlZAorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbnZhbGlkSmF2YWRvY1RhZ3NEZXByZWNhdGVkUmVmPWRpc2FibGVkCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmludmFsaWRKYXZhZG9jVGFnc05vdFZpc2libGVSZWY9ZGlzYWJsZWQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW52YWxpZEphdmFkb2NUYWdzVmlzaWJpbGl0eT1wdWJsaWMKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubG9jYWxWYXJpYWJsZUhpZGluZz1pZ25vcmUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWV0aG9kV2l0aENvbnN0cnVjdG9yTmFtZT13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdEZXByZWNhdGVkQW5ub3RhdGlvbj1pZ25vcmUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0phdmFkb2NDb21tZW50cz13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdKYXZhZG9jQ29tbWVudHNPdmVycmlkaW5nPWRpc2FibGVkCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdKYXZhZG9jQ29tbWVudHNWaXNpYmlsaXR5PXB1YmxpYworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nSmF2YWRvY1RhZ3M9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nSmF2YWRvY1RhZ3NPdmVycmlkaW5nPWRpc2FibGVkCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdKYXZhZG9jVGFnc1Zpc2liaWxpdHk9cHVibGljCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdPdmVycmlkZUFubm90YXRpb249aWdub3JlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdTZXJpYWxWZXJzaW9uPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubm9FZmZlY3RBc3NpZ25tZW50PXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubm9JbXBsaWNpdFN0cmluZ0NvbnZlcnNpb249d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5ub25FeHRlcm5hbGl6ZWRTdHJpbmdMaXRlcmFsPWlnbm9yZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5udWxsUmVmZXJlbmNlPWlnbm9yZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5vdmVycmlkaW5nUGFja2FnZURlZmF1bHRNZXRob2Q9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5wYXJhbWV0ZXJBc3NpZ25tZW50PWlnbm9yZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5wb3NzaWJsZUFjY2lkZW50YWxCb29sZWFuQXNzaWdubWVudD1pZ25vcmUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ucmF3VHlwZVJlZmVyZW5jZT1pZ25vcmUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uc3BlY2lhbFBhcmFtZXRlckhpZGluZ0ZpZWxkPWRpc2FibGVkCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnN0YXRpY0FjY2Vzc1JlY2VpdmVyPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uc3VwcHJlc3NXYXJuaW5ncz1lbmFibGVkCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnN5bnRoZXRpY0FjY2Vzc0VtdWxhdGlvbj1pZ25vcmUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udHlwZVBhcmFtZXRlckhpZGluZz13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVuY2hlY2tlZFR5cGVPcGVyYXRpb249d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bmRvY3VtZW50ZWRFbXB0eUJsb2NrPWlnbm9yZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bmhhbmRsZWRXYXJuaW5nVG9rZW49d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bm5lY2Vzc2FyeUVsc2U9aWdub3JlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVubmVjZXNzYXJ5VHlwZUNoZWNrPWlnbm9yZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnF1YWxpZmllZEZpZWxkQWNjZXNzPWlnbm9yZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWREZWNsYXJlZFRocm93bkV4Y2VwdGlvbj1pZ25vcmUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkRGVjbGFyZWRUaHJvd25FeGNlcHRpb25XaGVuT3ZlcnJpZGluZz1kaXNhYmxlZAorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRJbXBvcnQ9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRMYWJlbD13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZExvY2FsPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkUGFyYW1ldGVyPWlnbm9yZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRQYXJhbWV0ZXJXaGVuSW1wbGVtZW50aW5nQWJzdHJhY3Q9ZGlzYWJsZWQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkUGFyYW1ldGVyV2hlbk92ZXJyaWRpbmdDb25jcmV0ZT1kaXNhYmxlZAorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRQcml2YXRlTWVtYmVyPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udmFyYXJnc0FyZ3VtZW50TmVlZENhc3Q9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuc291cmNlPTEuNQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLmdlL01FVEEtSU5GL01BTklGRVNULk1GIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLmdlL01FVEEtSU5GL01BTklGRVNULk1GCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM0MzViYTQKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkuZ2UvTUVUQS1JTkYvTUFOSUZFU1QuTUYKQEAgLTAsMCArMSwzOSBAQAorTWFuaWZlc3QtVmVyc2lvbjogMS4wCitCdW5kbGUtTWFuaWZlc3RWZXJzaW9uOiAyCitCdW5kbGUtTmFtZTogJXBsdWdpbk5hbWUKK0J1bmRsZS1TeW1ib2xpY05hbWU6IG9yZy5lY2xpcHNlLnN0ZW0udWkuZ2U7c2luZ2xldG9uOj10cnVlCitCdW5kbGUtVmVyc2lvbjogMS4yLjEKK0J1bmRsZS1BY3RpdmF0b3I6IG9yZy5lY2xpcHNlLnN0ZW0udWkuZ2UuQWN0aXZhdG9yCitCdW5kbGUtVmVuZG9yOiAlcHJvdmlkZXJOYW1lCitCdW5kbGUtTG9jYWxpemF0aW9uOiBwbHVnaW4KK1JlcXVpcmUtQnVuZGxlOiBvcmcuZWNsaXBzZS5oZWxwLmFwcHNlcnZlcjt2aXNpYmlsaXR5Oj1yZWV4cG9ydCwKKyBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMsCisgb3JnLmVjbGlwc2Uuc3RlbS51aSwKKyBvcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5CitCdW5kbGUtQWN0aXZhdGlvblBvbGljeTogbGF6eQorRXhwb3J0LVBhY2thZ2U6IG9yZy5lY2xpcHNlLnN0ZW0udWkuZ2U7CisgIHVzZXM6PSJvcmcuZWNsaXBzZS5zdGVtLnVpLnZpZXdzLmdlb2dyYXBoaWMubWFwLAorICAgb3JnLmVjbGlwc2Uuc3RlbS51aS5nZS5rbWwsCisgICBvcmcub3NnaS5mcmFtZXdvcmssCisgICBvcmcuZWNsaXBzZS5zdGVtLnVpLmdlLnZpZXdzLAorICAgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5hZGFwdGVycy5zcGF0aWFsLmdlbywKKyAgIG9yZy5lY2xpcHNlLnVpLnBsdWdpbiwKKyAgIG9yZy5lY2xpcHNlLnN0ZW0uam9icy5zaW11bGF0aW9uLAorICAgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5ub2Rlcy5pbXBsLAorICAgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLAorICAgb3JnLmVjbGlwc2UuamZhY2UucmVzb3VyY2UiLAorIG9yZy5lY2xpcHNlLnN0ZW0udWkuZ2Uua21sO3VzZXM6PSJvcmcudzNjLmRvbSxvcmcuZWNsaXBzZS5zdGVtLnVpLmdlIiwKKyBvcmcuZWNsaXBzZS5zdGVtLnVpLmdlLnNlcnZsZXQ7dXNlczo9ImphdmF4LnNlcnZsZXQuaHR0cCxqYXZheC5zZXJ2bGV0IiwKKyBvcmcuZWNsaXBzZS5zdGVtLnVpLmdlLnZpZXdzOworICB1c2VzOj0ib3JnLmVjbGlwc2UuamZhY2UuZGlhbG9ncywKKyAgIG9yZy5lY2xpcHNlLnN0ZW0udWkuZ2UsCisgICBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cywKKyAgIG9yZy5lY2xpcHNlLnN3dC5ncmFwaGljcywKKyAgIG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMsCisgICBvcmcuZWNsaXBzZS5qZmFjZS5wcmVmZXJlbmNlLAorICAgb3JnLmVjbGlwc2Uuc3d0LmxheW91dCwKKyAgIG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5wcmVmZXJlbmNlcywKKyAgIG9yZy5lY2xpcHNlLnVpLnBhcnQsCisgICBvcmcuZWNsaXBzZS5zdGVtLmpvYnMuc2ltdWxhdGlvbiwKKyAgIG9yZy5lY2xpcHNlLnVpIgorQnVuZGxlLVJlcXVpcmVkRXhlY3V0aW9uRW52aXJvbm1lbnQ6IEoyU0UtMS41CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkuZ2UvV0VCLUlORi8uY3ZzaWdub3JlIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLmdlL1dFQi1JTkYvLmN2c2lnbm9yZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MGIwN2U5Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLmdlL1dFQi1JTkYvLmN2c2lnbm9yZQpAQCAtMCwwICsxIEBACitjbGFzc2VzCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkuZ2UvV0VCLUlORi9zdGFydC5odG1sIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLmdlL1dFQi1JTkYvc3RhcnQuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MTcxNmNmCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLmdlL1dFQi1JTkYvc3RhcnQuaHRtbApAQCAtMCwwICsxLDM3IEBACis8aHRtbD4KKzxoZWFkPgorPHRpdGxlPlN0YXJ0IFNURU0gLSBHb29nbGVFYXJ0aCBEaXNwbGF5PC90aXRsZT4KKzwvaGVhZD4KKzxib2R5PgorPGgyPjxjZW50ZXI+U1RFTSAtIEdvb2dsZUVhcnRoIERpc3BsYXk8L2NlbnRlcj48L2gyPgorPGhyPjxicj4KK1RoaXMgd2lsbCBjYXVzZSBhIHJlcXVlc3QgdG8gYmUgc2VudCB0byBHb29nbGVFYXJ0aCB0byByZWFkIAordGhlIG5leHQgS01MIGZpbGUgZnJvbSB0aGUgc3BlY2lmaWVkIGZvbGRlciBvbmNlIAorZXZlcnkgTiBzZWNvbmRzLiAgSWYgbm8gbW9yZSBLTUwgZmlsZXMgZXhpc3QsIGl0IHdpbGwgZWl0aGVyCit3YWl0IG9yIHN0YXJ0IG92ZXIgZnJvbSB0aGUgYmVnaW5uaW5nLgorPGhyPjxicj4gIAorPGZvcm0gbWV0aG9kPVBPU1QgYWN0aW9uPSIvU1RFTS9zdGFydCI+CitLTUwgRm9sZGVyOiAKKzxpbnB1dCB0eXBlPXRleHQgbmFtZT1mb2xkZXIgdmFsdWU9Ii90bXAvZ2UiICAKKyAgICAgICBzaXplPTMwIG1heGxlbmd0aD00MCA+IDxicj4KKzxwPgorT3B0aW9uczo8YnI+CitXYWl0IGZvciBuZXcgZmlsZXM6IAorPGlucHV0IHR5cGU9dGV4dCBuYW1lPXdhaXQgdmFsdWU9InkiIHNpemU9MSBtYXhsZW5ndGg9MT4KKzxwPgorCitXYWl0IGludGVydmFsIChzZWNvbmRzKTogCis8aW5wdXQgdHlwZT10ZXh0IG5hbWU9aW50ZXJ2YWwgdmFsdWU9IjIiIHNpemU9MSBtYXhsZW5ndGg9Mj4KKzxwPgorPGlucHV0IHR5cGU9c3VibWl0IHZhbHVlPSJTdGFydCIgPgorPC9mb3JtPgorPGJyPgorPGhyPgorPHA+U3BlY2lmeSB0aGUgZm9sZGVyIHRoYXQgY29udGFpbnMgdGhlIEtNTCBmaWxlcyBnZW5lcmF0ZWQgCitieSBTVEVNLiBUaGUgZm9sZGVyIG11c3QgYmUgYWNjZXNzYWJsZSBmcm9tIHRoZSBXZWIgc2VydmVyLgorPHA+CitZb3UgbXVzdCBoYXZlIHByZXZpb3VzbHkgaW5zdGFsbGVkIEdvb2dsZUVhcnRoIG9uIHlvdXIgV2luZG93cyBYUCBzeXN0ZW0uCisgPGEgaHJlZj0iaHR0cDovL2VhcnRoLmdvb2dsZS5jb20vIj5odHRwOi8vZWFydGguZ29vZ2xlLmNvbS88L2E+CisKKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5nZS9XRUItSU5GL3dlYi54bWwgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkuZ2UvV0VCLUlORi93ZWIueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUxMjJlMWEKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkuZ2UvV0VCLUlORi93ZWIueG1sCkBAIC0wLDAgKzEsNjMgQEAKKyA8IURPQ1RZUEUgd2ViLWFwcCBQVUJMSUMgIi0vL1N1biBNaWNyb3N5c3RlbXMsIEluYy4vLworRFREIFdlYkFwcGxpY2F0aW9uIDIuMi8vRU4iCisiaHR0cDovL2phdmEuc3VuLmNvbS9qMmVlL2R0ZHMvd2ViLWFwcF8yLjIuZHRkIj4KKworCis8d2ViLWFwcD4KKyAgPGRpc3BsYXktbmFtZT5TVEVNLUdvb2dsZUVhcnRoPC9kaXNwbGF5LW5hbWU+CisgIDxkZXNjcmlwdGlvbj5TVEVNLUdvb2dsZUVhcnRoIFNlcnZsZXRzPC9kZXNjcmlwdGlvbj4KKyAgCisgIAorICA8IS0tIFByaW1hcnkgc2VydmxldCB0byBzZW5kIEtNTCB0byBHRSAtLT4gIAorICA8c2VydmxldD4KKwk8c2VydmxldC1uYW1lPlNsaWRlU2hvdzwvc2VydmxldC1uYW1lPgorCTxzZXJ2bGV0LWNsYXNzPm9yZy5lY2xpcHNlLnN0ZW0udWkuZ2Uuc2VydmxldC5TbGlkZVNob3dTZXJ2bGV0PC9zZXJ2bGV0LWNsYXNzPgkKKyAgPC9zZXJ2bGV0PgorICA8IS0tIFNlcnZsZXQgdG8gc2VuZCBhIG5ldHdvcmtsaW5rIEtNTCB0byBHRSAtLT4KKyAgPHNlcnZsZXQ+CisJPHNlcnZsZXQtbmFtZT5TdGFydDwvc2VydmxldC1uYW1lPgorCTxzZXJ2bGV0LWNsYXNzPm9yZy5lY2xpcHNlLnN0ZW0udWkuZ2Uuc2VydmxldC5TdGFydFNlcnZsZXQ8L3NlcnZsZXQtY2xhc3M+CQorICA8L3NlcnZsZXQ+CisgIDwhLS0gU2VydmxldCB0byBjcmVhdGUgYW4gaW1hZ2Ugd2l0aCBkZXNpcmVkIHRleHQgLS0+CisgIDxzZXJ2bGV0PgorCTxzZXJ2bGV0LW5hbWU+SW1hZ2U8L3NlcnZsZXQtbmFtZT4KKwk8c2VydmxldC1jbGFzcz5vcmcuZWNsaXBzZS5zdGVtLnVpLmdlLnNlcnZsZXQuSW1hZ2VTZXJ2bGV0PC9zZXJ2bGV0LWNsYXNzPgorICA8L3NlcnZsZXQ+CisgIDwhLS0gU2VydmxldCB0byB2ZXJpZnkgdGhhdCB0aGUgd2Vic2VydmVyIGlzIHVwIGFuZCBzZXJ2bGV0cyBkZXBsb3llZCAtLT4KKyA8c2VydmxldD4KKwk8c2VydmxldC1uYW1lPlZlcmlmeTwvc2VydmxldC1uYW1lPgorCTxzZXJ2bGV0LWNsYXNzPm9yZy5lY2xpcHNlLnN0ZW0udWkuZ2Uuc2VydmxldC5WZXJpZnlTZXJ2bGV0PC9zZXJ2bGV0LWNsYXNzPgorCTwvc2VydmxldD4KKyAgPCEtLSBTZXJ2bGV0IHRvIGhhbmRsZSBHRSBCQk9YIGZlZWRiYWNrIC0tPgorICA8c2VydmxldD4gIAorICAgPHNlcnZsZXQtbmFtZT5CQm94PC9zZXJ2bGV0LW5hbWU+CisJPHNlcnZsZXQtY2xhc3M+b3JnLmVjbGlwc2Uuc3RlbS51aS5nZS5zZXJ2bGV0LkJCb3hTZXJ2bGV0PC9zZXJ2bGV0LWNsYXNzPgkKKyAgPC9zZXJ2bGV0PgorICAKKyAgPCEtLSBzZXJ2bGV0IGluc3RhbmNlcyBtdXN0IGdvIGJlZm9yZSBhbGwgb2YgdGhlIHNlcnZsZXQ9bWFwcGluZyAtLT4KKyAgPHNlcnZsZXQtbWFwcGluZz4KKyAgICAgIDxzZXJ2bGV0LW5hbWU+U2xpZGVTaG93PC9zZXJ2bGV0LW5hbWU+CisgICAgICA8dXJsLXBhdHRlcm4+L3NsaWRlc2hvdzwvdXJsLXBhdHRlcm4+CisgIDwvc2VydmxldC1tYXBwaW5nPiAgCisgICAgCisgIDxzZXJ2bGV0LW1hcHBpbmc+CisgICAgICA8c2VydmxldC1uYW1lPlN0YXJ0PC9zZXJ2bGV0LW5hbWU+CisgICAgICA8dXJsLXBhdHRlcm4+L3N0YXJ0PC91cmwtcGF0dGVybj4KKyAgPC9zZXJ2bGV0LW1hcHBpbmc+ICAKKyAgCisgIDxzZXJ2bGV0LW1hcHBpbmc+CisgICAgICA8c2VydmxldC1uYW1lPkltYWdlPC9zZXJ2bGV0LW5hbWU+CisgICAgICA8dXJsLXBhdHRlcm4+L2ltYWdlPC91cmwtcGF0dGVybj4KKyAgPC9zZXJ2bGV0LW1hcHBpbmc+ICAKKyAgCisgIDxzZXJ2bGV0LW1hcHBpbmc+CisgICAgICA8c2VydmxldC1uYW1lPlZlcmlmeTwvc2VydmxldC1uYW1lPgorICAgICAgPHVybC1wYXR0ZXJuPi92ZXJpZnk8L3VybC1wYXR0ZXJuPgorICA8L3NlcnZsZXQtbWFwcGluZz4gIAorICAKKyAgPHNlcnZsZXQtbWFwcGluZz4KKyAgICAgIDxzZXJ2bGV0LW5hbWU+QkJveDwvc2VydmxldC1uYW1lPgorICAgICAgPHVybC1wYXR0ZXJuPi9iYm94PC91cmwtcGF0dGVybj4KKyAgPC9zZXJ2bGV0LW1hcHBpbmc+CisgIAorPC93ZWItYXBwPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5nZS9hYm91dC5odG1sIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLmdlL2Fib3V0Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDYwMjMzMAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5nZS9hYm91dC5odG1sCkBAIC0wLDAgKzEsMjggQEAKKzwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgWEhUTUwgMS4wIFN0cmljdC8vRU4iCisgICAgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sMS9EVEQveGh0bWwxLXN0cmljdC5kdGQiPgorPGh0bWwgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiPgorPGhlYWQ+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0xIi8+Cis8dGl0bGU+QWJvdXQ8L3RpdGxlPgorPC9oZWFkPgorPGJvZHkgbGFuZz0iRU4tVVMiPgorPGgyPkFib3V0IFRoaXMgQ29udGVudDwvaDI+CisgCis8cD5KdW5lIDIsIDIwMDY8L3A+CQorPGgzPkxpY2Vuc2U8L2gzPgorCis8cD5UaGUgRWNsaXBzZSBGb3VuZGF0aW9uIG1ha2VzIGF2YWlsYWJsZSBhbGwgY29udGVudCBpbiB0aGlzIHBsdWctaW4gKCZxdW90O0NvbnRlbnQmcXVvdDspLiAgVW5sZXNzIG90aGVyd2lzZSAKK2luZGljYXRlZCBiZWxvdywgdGhlIENvbnRlbnQgaXMgcHJvdmlkZWQgdG8geW91IHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUKK0VjbGlwc2UgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjAgKCZxdW90O0VQTCZxdW90OykuICBBIGNvcHkgb2YgdGhlIEVQTCBpcyBhdmFpbGFibGUgCithdCA8YSBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbCI+aHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWw8L2E+LgorRm9yIHB1cnBvc2VzIG9mIHRoZSBFUEwsICZxdW90O1Byb2dyYW0mcXVvdDsgd2lsbCBtZWFuIHRoZSBDb250ZW50LjwvcD4KKworPHA+SWYgeW91IGRpZCBub3QgcmVjZWl2ZSB0aGlzIENvbnRlbnQgZGlyZWN0bHkgZnJvbSB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uLCB0aGUgQ29udGVudCBpcyAKK2JlaW5nIHJlZGlzdHJpYnV0ZWQgYnkgYW5vdGhlciBwYXJ0eSAoJnF1b3Q7UmVkaXN0cmlidXRvciZxdW90OykgYW5kIGRpZmZlcmVudCB0ZXJtcyBhbmQgY29uZGl0aW9ucyBtYXkKK2FwcGx5IHRvIHlvdXIgdXNlIG9mIGFueSBvYmplY3QgY29kZSBpbiB0aGUgQ29udGVudC4gIENoZWNrIHRoZSBSZWRpc3RyaWJ1dG9yJ3MgbGljZW5zZSB0aGF0IHdhcyAKK3Byb3ZpZGVkIHdpdGggdGhlIENvbnRlbnQuICBJZiBubyBzdWNoIGxpY2Vuc2UgZXhpc3RzLCBjb250YWN0IHRoZSBSZWRpc3RyaWJ1dG9yLiAgVW5sZXNzIG90aGVyd2lzZQoraW5kaWNhdGVkIGJlbG93LCB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEVQTCBzdGlsbCBhcHBseSB0byBhbnkgc291cmNlIGNvZGUgaW4gdGhlIENvbnRlbnQKK2FuZCBzdWNoIHNvdXJjZSBjb2RlIG1heSBiZSBvYnRhaW5lZCBhdCA8YSBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnIj5odHRwOi8vd3d3LmVjbGlwc2Uub3JnPC9hPi48L3A+CisKKzwvYm9keT4KKzwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkuZ2UvYnVpbGQucHJvcGVydGllcyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5nZS9idWlsZC5wcm9wZXJ0aWVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI2NzE4ZTIKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkuZ2UvYnVpbGQucHJvcGVydGllcwpAQCAtMCwwICsxLDIzIEBACitzb3VyY2UuLiA9IHNyYy8KK291dHB1dC4uID0gYmluLworYmluLmluY2x1ZGVzID0gcGx1Z2luLnhtbCxcCisgICAgICAgICAgICAgICBNRVRBLUlORi8sXAorICAgICAgICAgICAgICAgLixcCisgICAgICAgICAgICAgICBpY29ucy8sXAorICAgICAgICAgICAgICAgV0VCLUlORi8sXAorICAgICAgICAgICAgICAgZXh0bGliLyxcCisgICAgICAgICAgICAgICBwbHVnaW4ucHJvcGVydGllcyxcCisgICAgICAgICAgICAgICBlcGwtdjEwLmh0bWwsXAorICAgICAgICAgICAgICAgbm90aWNlLmh0bWwsXAorICAgICAgICAgICAgICAgcGx1Z2luX2RlLnByb3BlcnRpZXMsXAorICAgICAgICAgICAgICAgcGx1Z2luX3poLnByb3BlcnRpZXMsXAorICAgICAgICAgICAgICAgcGx1Z2luX2tyLnByb3BlcnRpZXMKK2phcnMuY29tcGlsZS5vcmRlciA9IC4sXAorICAgICAgICAgICAgICAgICAgICAgZXh0bGliL3NlcnZsZXQtYXBpLmphcgorc3JjLmluY2x1ZGVzID0gaWNvbnMvLFwKKyAgICAgICAgICAgICAgIGRvYy8sXAorICAgICAgICAgICAgICAgZXh0bGliLworamFycy5leHRyYS5jbGFzc3BhdGggPSBleHRsaWIvc2VydmxldC1hcGkuamFyCisKKyAgICAgICAgICAgICAgIAorCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkuZ2UvZG9jL2V4YW1wbGUua21sIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLmdlL2RvYy9leGFtcGxlLmttbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MzkzNzIyCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLmdlL2RvYy9leGFtcGxlLmttbApAQCAtMCwwICsxLDEzNiBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxrbWwgeG1sbnM9Imh0dHA6Ly9lYXJ0aC5nb29nbGUuY29tL2ttbC8yLjAiPgorPERvY3VtZW50PgorPFN0eWxlIGlkPSJTdHlsZTAiPgorPExpbmVTdHlsZT4KKzx3aWR0aD4xLjA8L3dpZHRoPgorPC9MaW5lU3R5bGU+Cis8UG9seVN0eWxlPgorPGZpbGw+MDwvZmlsbD4KKzwvUG9seVN0eWxlPgorPC9TdHlsZT4KKzxTdHlsZSBpZD0iU3R5bGUxIj4KKzxMaW5lU3R5bGU+Cis8d2lkdGg+MS4wPC93aWR0aD4KKzwvTGluZVN0eWxlPgorPFBvbHlTdHlsZT4KKzxmaWxsPjE8L2ZpbGw+Cis8Y29sb3I+ODAwMDAwMzM8L2NvbG9yPgorPC9Qb2x5U3R5bGU+Cis8L1N0eWxlPgorPFN0eWxlIGlkPSJTdHlsZTIiPgorPExpbmVTdHlsZT4KKzx3aWR0aD4xLjA8L3dpZHRoPgorPC9MaW5lU3R5bGU+Cis8UG9seVN0eWxlPgorPGZpbGw+MTwvZmlsbD4KKzxjb2xvcj44MDAwMDA2NjwvY29sb3I+Cis8L1BvbHlTdHlsZT4KKzwvU3R5bGU+Cis8U3R5bGUgaWQ9IlN0eWxlMyI+Cis8TGluZVN0eWxlPgorPHdpZHRoPjEuMDwvd2lkdGg+Cis8L0xpbmVTdHlsZT4KKzxQb2x5U3R5bGU+Cis8ZmlsbD4xPC9maWxsPgorPGNvbG9yPjgwMDAwMDk5PC9jb2xvcj4KKzwvUG9seVN0eWxlPgorPC9TdHlsZT4KKzxTdHlsZSBpZD0iU3R5bGU0Ij4KKzxMaW5lU3R5bGU+Cis8d2lkdGg+MS4wPC93aWR0aD4KKzwvTGluZVN0eWxlPgorPFBvbHlTdHlsZT4KKzxmaWxsPjE8L2ZpbGw+Cis8Y29sb3I+ODAwMDAwY2M8L2NvbG9yPgorPC9Qb2x5U3R5bGU+Cis8L1N0eWxlPgorPFN0eWxlIGlkPSJTdHlsZTUiPgorPExpbmVTdHlsZT4KKzx3aWR0aD4xLjA8L3dpZHRoPgorPC9MaW5lU3R5bGU+Cis8UG9seVN0eWxlPgorPGZpbGw+MTwvZmlsbD4KKzxjb2xvcj5jMDAwMDBmZjwvY29sb3I+Cis8L1BvbHlTdHlsZT4KKzwvU3R5bGU+Cis8UGxhY2VtYXJrPgorPGRlc2NyaXB0aW9uPlNURU0gbWFwPC9kZXNjcmlwdGlvbj4KKzxuYW1lPlNURU0wPC9uYW1lPgorPHN0eWxlVXJsPiNTdHlsZTA8L3N0eWxlVXJsPgorPE11bHRpR2VvbWV0cnkvPgorPC9QbGFjZW1hcms+Cis8UGxhY2VtYXJrPgorPGRlc2NyaXB0aW9uPlNURU0gbWFwPC9kZXNjcmlwdGlvbj4KKzxuYW1lPlNURU0xPC9uYW1lPgorPHN0eWxlVXJsPiNTdHlsZTE8L3N0eWxlVXJsPgorPE11bHRpR2VvbWV0cnk+Cis8UG9seWdvbj4KKzxuYW1lPk5vcmZvbGsgQ291bnR5PC9uYW1lPgorPG91dGVyQm91bmRhcnlJcz4KKzxMaW5lYXJSaW5nPgorPGNvb3JkaW5hdGVzPi03MS4zODEzMDEsNDEuOTg0OTk4LDI1IC03MS4zMjY5OTksNDEuOTk5Njk4LDI1IC03MS4yODMzOTgsNDIuMDE2MTk5LDI1IC03MS4yNjIyOTcsNDIuMDI0Mzk5LDI1IC03MS4yNjA3OTcsNDIuMDI0ODk5LDI1IC03MS4yNjA3OTcsNDIuMDI0ODk5LDI1IC03MS4yNTU4OTcsNDIuMDI2ODk5LDI1IC03MS4yNTU2MTEsNDIuMDI3MDIxLDI1IC03MS4yNTUyOTQsNDIuMDI3MTU3LDI1IC03MS4yNTQ0OTcsNDIuMDI3NDk5LDI1IC03MS4yNTQ0OTcsNDIuMDI3NDk5LDI1IC03MS4yNDAyMzYsNDIuMDMzNDE4LDI1IC03MS4yMzc1NjksNDIuMDM0NTAzLDI1IC03MS4yMzY4NCw0Mi4wMzQ3OTksMjUgLTcxLjIzNTU2Niw0Mi4wMzUzMTgsMjUgLTcxLjIzNTU2Niw0Mi4wMzUzMTgsMjUgLTcxLjE5MDA4NSw0Mi4wNTMxMjYsMjUgLTcxLjEzODE4MSw0Mi4wNzMyNDUsMjUgLTcxLjA5Mjg5Miw0Mi4wOTA1OTksMjUgLTcxLjA4MDE5Miw0Mi4wOTU2OTksMjUgLTcxLjA4MDE5Miw0Mi4wOTU2OTksMjUgLTcxLjA2NzY5MSw0Mi4xMDExOTksMjUgLTcxLjA2NDI5MSw0Mi4xMDI0OTksMjUgLTcxLjA2MTk5MSw0Mi4xMDMzOTksMjUgLTcxLjA1ODc5MSw0Mi4xMDQ1OTksMjUgLTcxLjA1ODc5MSw0Mi4xMDQ1OTksMjUgLTcwLjk1NDM5LDQyLjE0NTgwMSwyNSAtNzAuOTMxMDE1LDQyLjI0Njk4MSwyNSAtNzAuOTE0MDkxLDQyLjI4ODgsMjUgLTcwLjk2MDE5Miw0Mi4yOTk0OTgsMjUgLTcwLjk2MDE5Miw0Mi4yOTk0OTgsMjUgLTcxLjAwOTc5Myw0Mi4zMDUxOTgsMjUgLTcxLjAzNzg5NCw0Mi4yODQ4OTgsMjUgLTcxLjA0Mjc5NCw0Mi4yNzY5OTgsMjUgLTcxLjA0ODc5NCw0Mi4yNzc2OTgsMjUgLTcxLjA0ODc5NCw0Mi4yNzc2OTgsMjUgLTcxLjA1Mjk5NCw0Mi4yNzcxOTgsMjUgLTcxLjA5Mzc5NSw0Mi4yNjY4OTgsMjUgLTcxLjE0NTM1NCw0Mi4yNDk1OTksMjUgLTcxLjE5MTE5OCw0Mi4yODI2OTcsMjUgLTcxLjE5MTE5OCw0Mi4yODI2OTcsMjUgLTcxLjE5NDE5OCw0Mi4yODc5OTcsMjUgLTcxLjE5NjE5OCw0Mi4yODYwOTcsMjUgLTcxLjIwODA5OCw0Mi4yOTcwOTcsMjUgLTcxLjI0OTEwMSw0Mi4zMjM0OTgsMjUgLTcxLjI0OTEwMSw0Mi4zMjM0OTgsMjUgLTcxLjMwNDQwMSw0Mi4zMTkzOTYsMjUgLTcxLjMwNTkwMiw0Mi4yNjI0OTgsMjUgLTcxLjM3NTMwMyw0Mi4xOTM3MzUsMjUgLTcxLjQ3Nzg3OSw0Mi4xNTY2OSwyNSAtNzEuNDc3ODc5LDQyLjE1NjY5LDI1IC03MS40Nzc4OTYsNDIuMTUzOTEsMjUgLTcxLjQ3NzkyNSw0Mi4xNDk0MzUsMjUgLTcxLjQ3Nzk0MSw0Mi4xNDY4ODEsMjUgLTcxLjQ3Nzg5NCw0Mi4xMzM0NDIsMjUgLTcxLjQ3Nzg5NCw0Mi4xMzM0NDIsMjUgLTcxLjQ3Nzk2Myw0Mi4xMzE4NjQsMjUgLTcxLjQ5NTQxMSw0Mi4xMjE0MDEsMjUgLTcxLjQ5ODIwNiw0Mi4wNjQ2OTcsMjUgLTcxLjQ5ODAwNSw0Mi4wMTcxOTgsMjUgLTcxLjQ5ODAwNSw0Mi4wMTcxOTgsMjUgLTcxLjQ0MTMwMyw0Mi4wMTgwOTgsMjUgLTcxLjM4NzMwMSw0Mi4wMTg3OTgsMjUgLTcxLjM4MTQwMSw0Mi4wMTg3OTgsMjUgLTcxLjM4MTMwMSw0MS45ODQ5OTgsMjUgLTcxLjEwNjc5Niw0Mi4zNDg5OTcsMjUgLTcxLjEwNjY5Niw0Mi4zNDkyOTcsMjUgLTcxLjEwNjU5Niw0Mi4zNDk2OTcsMjUgLTcxLjEwNjg5Niw0Mi4zNDk3OTcsMjUgLTcxLjEwOTYyMyw0Mi4zNTAwODQsMjUgLTcxLjEwOTYyMyw0Mi4zNTAwODQsMjUgLTcxLjExMDY5Niw0Mi4zNTAxOTcsMjUgLTcxLjExMDY5Niw0Mi4zNTAxOTcsMjUgLTcxLjExMTA5Niw0Mi4zNTAxOTcsMjUgLTcxLjExMTIyOCw0Mi4zNTAyNjMsMjUgLTcxLjExMTI5Niw0Mi4zNTAyOTcsMjUgLTcxLjExMTI5Niw0Mi4zNTAyOTcsMjUgLTcxLjExNDA5Niw0Mi4zNTA0OTcsMjUgLTcxLjExNjA5Niw0Mi4zNTA4OTcsMjUgLTcxLjExODU5Niw0Mi4zNTExOTcsMjUgLTcxLjE1Njk5Nyw0Mi4zMzAwOTcsMjUgLTcxLjE1Njk5Nyw0Mi4zMzAwOTcsMjUgLTcxLjE2MjE5Nyw0Mi4zMjY0OTcsMjUgLTcxLjE2MjU5Nyw0Mi4zMjYwOTcsMjUgLTcxLjE2MzQ5Nyw0Mi4zMjU0OTcsMjUgLTcxLjE2NDY5Nyw0Mi4zMDM2OTcsMjUgLTcxLjE2NDY5Nyw0Mi4zMDM2OTcsMjUgLTcxLjExNDc5Niw0Mi4zMjgzOTcsMjUgLTcxLjEwNjg5Niw0Mi4zNDg0OTcsMjUgLTcxLjEwNjg5Niw0Mi4zNDg3OTcsMjUgLTcxLjEwNjc5Niw0Mi4zNDg5OTcsMjUgLTcwLjY3NTY5LDQyLjM3NTA5OCwyNSAtNzAuNzQ5NDg3LDQyLjI5NTM2MiwyNSAtNzAuODMyOTExLDQyLjIwNTkzMiwyNSAtNzAuODQ0Nzk4LDQyLjI1OTc4MiwyNSAtNzAuNzI5MjEyLDQyLjM3Mzg0OCwyNSAtNzAuNzI5MjEyLDQyLjM3Mzg0OCwyNSAtNzAuNjc1NjksNDIuMzc1MDk4LDI1IDwvY29vcmRpbmF0ZXM+Cis8L0xpbmVhclJpbmc+Cis8L291dGVyQm91bmRhcnlJcz4KKzwvUG9seWdvbj4KKzxQb2x5Z29uPgorPG5hbWU+UGx5bW91dGggQ291bnR5PC9uYW1lPgorPG91dGVyQm91bmRhcnlJcz4KKzxMaW5lYXJSaW5nPgorPGNvb3JkaW5hdGVzPi03MC43MjkyMTIsNDIuMzczODQ4LDI1IC03MC43NDk0ODcsNDIuMzczMzQ5LDI1IC03MC44NTExOTEsNDIuMzcyNDk5LDI1IC03MC45MDU2OTIsNDIuMzE2OTk5LDI1IC03MC45NjAxOTIsNDIuMjk5NDk4LDI1IC03MC45NjAxOTIsNDIuMjk5NDk4LDI1IC03MC45MTQwOTEsNDIuMjg4OCwyNSAtNzAuOTMxMDE1LDQyLjI0Njk4MSwyNSAtNzAuOTU0MzksNDIuMTQ1ODAxLDI1IC03MS4wNTg3OTEsNDIuMTA0NTk5LDI1IC03MS4wNTg3OTEsNDIuMTA0NTk5LDI1IC03MS4wNjE5OTEsNDIuMTAzMzk5LDI1IC03MS4wNjQyOTEsNDIuMTAyNDk5LDI1IC03MS4wNjc2OTEsNDIuMTAxMTk5LDI1IC03MS4wODAxOTIsNDIuMDk1Njk5LDI1IC03MS4wODAxOTIsNDIuMDk1Njk5LDI1IC03MS4wNjc2OSw0Mi4wNDExLDI1IC03MS4wNTU0ODksNDEuOTg1NSwyNSAtNzEuMDQyNjg4LDQxLjk1OTQsMjUgLTcxLjAzNDc4OCw0MS45NTQ2LDI1IC03MS4wMzQ3ODgsNDEuOTU0NiwyNSAtNzEuMDI2MTg4LDQxLjk0OTQsMjUgLTcxLjAyNDc4OCw0MS45NDg2LDI1IC03MS4wMjQ3ODgsNDEuOTQ4NiwyNSAtNzEuMDIzODg3LDQxLjk0OCwyNSAtNzEuMDIzODg3LDQxLjk0OCwyNSAtNzEuMDIxNTg3LDQxLjk0NjUsMjUgLTcxLjAyMTU4Nyw0MS45NDY1LDI1IC03MS4wMTk3ODcsNDEuOTQ1MywyNSAtNzEuMDE5Nzg3LDQxLjk0NTMsMjUgLTcxLjAwMzg4Nyw0MS45MzMxMDEsMjUgLTcwLjk5OTk4Nyw0MS45Mjk2MDEsMjUgLTcwLjk5OTk0OCw0MS45Mjk1NjIsMjUgLTcwLjk5NjY1NCw0MS45MjM5NzMsMjUgLTcwLjk5NjY1NCw0MS45MjM5NzMsMjUgLTcwLjk5NjUxLDQxLjkyMTc2NSwyNSAtNzAuOTk0NTc2LDQxLjkwNjY2NywyNSAtNzAuOTczNjI5LDQxLjg2MTM5NywyNSAtNzAuOTc2MjcsNDEuODU5MDc3LDI1IC03MC45NzYyNyw0MS44NTkwNzcsMjUgLTcxLjAxNzg4Niw0MS43OTM0NjIsMjUgLTcwLjkxNDYyLDQxLjc3NzI3LDI1IC03MC44NzA4MSw0MS43MTU4OTUsMjUgLTcwLjg1MTk0NSw0MS42NjQyNjQsMjUgLTcwLjg1MTk0NSw0MS42NjQyNjQsMjUgLTcwLjgyOTUwOCw0MS42MTIyMzgsMjUgLTcwLjgxMzI3NCw0MS42MDc5NiwyNSAtNzAuNzUyNSw0MS41NjU4OTgsMjUgLTcwLjc1MjQyNCw0MS41NjU4NTEsMjUgLTcwLjc1MjQyNCw0MS41NjU4NTEsMjUgLTcwLjcwOTE3Miw0MS42MjUxMDYsMjUgLTcwLjY1MjkxNSw0MS43MDkxMDMsMjUgLTcwLjYzMjUzMiw0MS43NjI4NCwyNSAtNzAuNTkxOTQ1LDQxLjc3ODIwMywyNSAtNzAuNTkxOTQ1LDQxLjc3ODIwMywyNSAtNzAuNDk5NDczLDQxLjg0NDExNywyNSAtNzAuMzU1MDA1LDQyLjAwMDEwMywyNSAtNzAuMzMyMzY5LDQyLjA3MDYyNSwyNSAtNzAuMzIyNTIyLDQyLjExNzkxNSwyNSAtNzAuMzIyNTIyLDQyLjExNzkxNSwyNSAtNzAuMzc0NDc0LDQyLjEyMTU1LDI1IC03MC42MjQ0ODEsNDIuMTU3MjQ4LDI1IC03MC42NzYwNTcsNDIuMjUwMTAxLDI1IC03MC42NTg3MjMsNDIuMzc1MDk4LDI1IC03MC42NTg3MjMsNDIuMzc1MDk4LDI1IC03MC42NzU2OSw0Mi4zNzUwOTgsMjUgLTcwLjk2MDE5Miw0Mi4yOTk0OTgsMjUgLTcwLjkwNTY5Miw0Mi4zMTY5OTksMjUgLTcwLjg1MTE5MSw0Mi4zNzI0OTksMjUgLTcwLjc0OTQ4Nyw0Mi4zNzMzNDksMjUgLTcwLjcyOTIxMiw0Mi4zNzM4NDgsMjUgLTcwLjcyOTIxMiw0Mi4zNzM4NDgsMjUgLTcwLjg0NDc5OCw0Mi4yNTk3ODIsMjUgLTcwLjgzMjkxMSw0Mi4yMDU5MzIsMjUgLTcwLjc0OTQ4Nyw0Mi4yOTUzNjIsMjUgLTcwLjY3NTY5LDQyLjM3NTA5OCwyNSAtNzAuOTYwMTkyLDQyLjI5OTQ5OCwyNSAtNzAuOTA1NjkyLDQyLjMxNjk5OSwyNSAtNzAuODUxMTkxLDQyLjM3MjQ5OSwyNSAtNzAuNzQ5NDg3LDQyLjM3MzM0OSwyNSAtNzAuNzI5MjEyLDQyLjM3Mzg0OCwyNSAtNzAuNzI5MjEyLDQyLjM3Mzg0OCwyNSAtNzAuNjc1NjksNDIuMzc1MDk4LDI1IC03MC42NzU2OSw0Mi4zNzUwOTgsMjUgLTcwLjc0OTQ4Nyw0Mi4yOTUzNjIsMjUgLTcwLjgzMjkxMSw0Mi4yMDU5MzIsMjUgLTcwLjg0NDc5OCw0Mi4yNTk3ODIsMjUgLTcwLjcyOTIxMiw0Mi4zNzM4NDgsMjUgLTcwLjcyOTIxMiw0Mi4zNzM4NDgsMjUgLTcwLjY3NTY5LDQyLjM3NTA5OCwyNSAtNzAuNzI5MjEyLDQyLjM3Mzg0OCwyNSAtNzAuODQ0Nzk4LDQyLjI1OTc4MiwyNSAtNzAuODMyOTExLDQyLjIwNTkzMiwyNSAtNzAuNzQ5NDg3LDQyLjI5NTM2MiwyNSAtNzAuNjc1NjksNDIuMzc1MDk4LDI1IC03MC42NzU2OSw0Mi4zNzUwOTgsMjUgLTcwLjY1ODcyMyw0Mi4zNzUwOTgsMjUgLTcwLjcyOTIxMiw0Mi4zNzM4NDgsMjUgLTcwLjY3NTY5LDQyLjM3NTA5OCwyNSAtNzAuNjc1NjksNDIuMzc1MDk4LDI1IC03MC42NTg3MjMsNDIuMzc1MDk4LDI1IDwvY29vcmRpbmF0ZXM+Cis8L0xpbmVhclJpbmc+Cis8L291dGVyQm91bmRhcnlJcz4KKzwvUG9seWdvbj4KKzxQb2x5Z29uPgorPG5hbWU+TWlkZGxlc2V4IENvdW50eTwvbmFtZT4KKzxvdXRlckJvdW5kYXJ5SXM+Cis8TGluZWFyUmluZz4KKzxjb29yZGluYXRlcz4tNzEuMjU1OTU0LDQyLjczNjEwMiwyNSAtNzEuMjQxOTM3LDQyLjY4NTg3NSwyNSAtNzEuMjM5MDc2LDQyLjY0OTAxNSwyNSAtNzEuMjM1ODAzLDQyLjY0NzM5MSwyNSAtNzEuMjI4OTAyLDQyLjY0Mzk5MSwyNSAtNzEuMjI4OTAyLDQyLjY0Mzk5MSwyNSAtNzEuMTgzODAxLDQyLjYyMjM5MiwyNSAtNzEuMTgyNzAxLDQyLjYyMTc5MiwyNSAtNzEuMTgyNTM4LDQyLjYyMTcxNCwyNSAtNzEuMTc1NjAxLDQyLjYxODM5MiwyNSAtNzEuMTc1NjAxLDQyLjYxODM5MiwyNSAtNzEuMTc0MjAxLDQyLjYxNzY5MiwyNSAtNzEuMTcxNDAxLDQyLjYxNjE5MiwyNSAtNzEuMTcyOTAxLDQyLjYxNDY5MiwyNSAtNzEuMTc0MzgxLDQyLjYxNDc4LDI1IC03MS4xNzQzODEsNDIuNjE0NzgsMjUgLTcxLjE3NTAwNSw0Mi42MTQ5NTYsMjUgLTcxLjE3ODYwMiw0Mi42MDY0OTcsMjUgLTcxLjE3NzIwMSw0Mi42MDU2OTIsMjUgLTcxLjE3MDMwMSw0Mi42MDE1OTIsMjUgLTcxLjE3MDMwMSw0Mi42MDE1OTIsMjUgLTcxLjE2NTAxNyw0Mi41OTc5NjUsMjUgLTcxLjE1NDMzNiw0Mi42MTUyNzcsMjUgLTcxLjEzNTI5LDQyLjU5OTA2MSwyNSAtNzEuMTMxNTA3LDQyLjU5OTM3MiwyNSAtNzEuMTMxNTA3LDQyLjU5OTM3MiwyNSAtNzEuMDc1OTYxLDQyLjYwNDA5MiwyNSAtNzEuMDcxMDM1LDQyLjU1NTcxNCwyNSAtNzEuMDcwMzg2LDQyLjUyNjk2LDI1IC03MS4wNjk4NDksNDIuNTI2NTA0LDI1IC03MS4wNjk4NDksNDIuNTI2NTA0LDI1IC03MS4wNjY3OTgsNDIuNTI0NTk1LDI1IC03MS4wNjU4OTgsNDIuNTI0Mzk1LDI1IC03MS4wNjUyMzUsNDIuNTI0Mzk1LDI1IC03MS4wNjIwOTgsNDIuNTI0Mzk1LDI1IC03MS4wNjIwOTgsNDIuNTI0Mzk1LDI1IC03MS4wNTU0OTcsNDIuNTI0Mjk0LDI1IC03MS4wNDQ2OTgsNDIuNTI1NTk1LDI1IC03MS4wNDExOTcsNDIuNTI1ODk1LDI1IC03MS4wMzczOTcsNDIuNTEyNzk2LDI1IC03MS4wMzczOTcsNDIuNTEyNzk2LDI1IC03MS4wMzY3OTcsNDIuNTExNTk2LDI1IC03MS4wNDM5OTYsNDIuNTAwNjk1LDI1IC03MS4wNDIwOTYsNDIuNDk3OTk1LDI1IC03MS4wMjUyOTUsNDIuNDQ0ODk2LDI1IC03MS4wMjUyOTUsNDIuNDQ0ODk2LDI1IC03MS4wMjQ2OTUsNDIuNDQzNzk2LDI1IC03MS4wMjMyOTUsNDIuNDQyMDk2LDI1IC03MS4wMzA3OTYsNDIuNDE4Njk3LDI1IC03MS4wNzcxOTYsNDIuMzg2Mjk2LDI1IC03MS4wNzcxOTYsNDIuMzg2Mjk2LDI1IC03MS4wNzc5OTYsNDIuMzgwNTk3LDI1IC03MS4wNzc1OTYsNDIuMzgwNTk3LDI1IC03MS4wNzc1OTYsNDIuMzgwNDk3LDI1IC03MS4wNzcyOTYsNDIuMzgwNDk3LDI1IC03MS4wNzcyOTYsNDIuMzgwNDk3LDI1IC03MS4wNzYzOTYsNDIuMzgwMjk3LDI1IC03MS4wNzQzOTcsNDIuMzc3Mjk4LDI1IC03MS4wNzQzOTYsNDIuMzc3MDk3LDI1IC03MS4wNzQxOTYsNDIuMzc2Mzk3LDI1IC03MS4wNzQxOTYsNDIuMzc2Mzk3LDI1IC03MS4xMTY5MjksNDIuMzU4NzE2LDI1IC03MS4xNjc5OTgsNDIuMzYwMTk2LDI1IC03MS4xNjk2OTgsNDIuMzU4Mzk2LDI1IC03MS4xNjk2OTgsNDIuMzU4MDk2LDI1IC03MS4xNjk2OTgsNDIuMzU4MDk2LDI1IC03MS4xNjk5OTksNDIuMzU3Mzk3LDI1IC03MS4xNzExOTgsNDIuMzU2Mzk2LDI1IC03MS4xNzI3OTgsNDIuMzU0Njk2LDI1IC03MS4xNTY5OTcsNDIuMzMwMDk3LDI1IC03MS4xNTY5OTcsNDIuMzMwMDk3LDI1IC03MS4xNjIxOTcsNDIuMzI2NDk3LDI1IC03MS4xNjI1OTcsNDIuMzI2MDk3LDI1IC03MS4xNjM0OTcsNDIuMzI1NDk3LDI1IC03MS4xNjQ2OTcsNDIuMzAzNjk3LDI1IC03MS4xNjQ2OTcsNDIuMzAzNjk3LDI1IC03MS4xNjQ5OTcsNDIuMzAzMjk3LDI1IC03MS4xNjU5OTcsNDIuMzAyNDk3LDI1IC03MS4xNjY3OTcsNDIuMzAyMDk3LDI1IC03MS4xOTExOTgsNDIuMjgyNjk3LDI1IC03MS4xOTExOTgsNDIuMjgyNjk3LDI1IC03MS4xOTQxOTgsNDIuMjg3OTk3LDI1IC03MS4xOTYxOTgsNDIuMjg2MDk3LDI1IC03MS4yMDgwOTgsNDIuMjk3MDk3LDI1IC03MS4yNDkxMDEsNDIuMzIzNDk4LDI1IC03MS4yNDkxMDEsNDIuMzIzNDk4LDI1IC03MS4zMDQ0MDEsNDIuMzE5Mzk2LDI1IC03MS4zMDU5MDIsNDIuMjYyNDk4LDI1IC03MS4zNzUzMDMsNDIuMTkzNzM1LDI1IC03MS40Nzc4NzksNDIuMTU2NjksMjUgLTcxLjQ3Nzg3OSw0Mi4xNTY2OSwyNSAtNzEuNDc3ODU5LDQyLjE1ODQ0NCwyNSAtNzEuNDc5NjM1LDQyLjE2NTc5NCwyNSAtNzEuNTAyNDE4LDQyLjE5MTI4OSwyNSAtNzEuNTMzNyw0Mi4xODkyMTUsMjUgLTcxLjUzMzcsNDIuMTg5MjE1LDI1IC03MS41NTE2NjgsNDIuMTgzODg3LDI1IC03MS41NTY4MzYsNDIuMTkxODcxLDI1IC03MS41NzI3ODksNDIuMTkyMjM5LDI1IC03MS41OTM0Myw0Mi4yNDMxMzQsMjUgLTcxLjU5MzQzLDQyLjI0MzEzNCwyNSAtNzEuNTcxODkzLDQyLjI2NDUxLDI1IC03MS41NzE2NTMsNDIuMjY0NTU4LDI1IC03MS41NjkyNjksNDIuMjY1Mzc0LDI1IC03MS41NjQ5MTcsNDIuMjY2ODk0LDI1IC03MS41NjQ5MTcsNDIuMjY2ODk0LDI1IC03MS41NjM1NzMsNDIuMjY3MjYyLDI1IC03MS41NjM1NzMsNDIuMjY3MjYyLDI1IC03MS41NjMwMjksNDIuMjY3NTAyLDI1IC03MS41NjMwMjksNDIuMjY3NTAyLDI1IC03MS41MzY3ODgsNDIuMjY0NTU4LDI1IC03MS41MzE4Niw0Mi4yNjYxNTgsMjUgLTcxLjUyNTQwMiw0Mi4yNjU5NTUsMjUgLTcxLjUyMjE2LDQyLjI2NjM0MiwyNSAtNzEuNTIyMTYsNDIuMjY2MzQyLDI1IC03MS41MDE5NTMsNDIuMjc5ODY0LDI1IC03MS41MDA5Niw0Mi4yODE3NTgsMjUgLTcxLjQ5OTk1NCw0Mi4yODM2MDQsMjUgLTcxLjQ5OTMyNyw0Mi4yODQ5MjIsMjUgLTcxLjQ5OTMyNyw0Mi4yODQ5MjIsMjUgLTcxLjQ5ODc5OCw0Mi4yODYwMzQsMjUgLTcxLjQ5NjgzMyw0Mi4yODk4NDEsMjUgLTcxLjUxODI4Nyw0Mi4zMzAxNDMsMjUgLTcxLjU3MDcxLDQyLjMxOTY3OCwyNSAtNzEuNTcwNzEsNDIuMzE5Njc4LDI1IC03MS41NzgwMDYsNDIuMzE1NTUsMjUgLTcxLjU3ODUxOCw0Mi4zMTUyNDYsMjUgLTcxLjU4MjA3LDQyLjMxMzE2NiwyNSAtNzEuNjIzMTc1LDQyLjM0NzMwOSwyNSAtNzEuNjIzMTc1LDQyLjM0NzMwOSwyNSAtNzEuNjI0MTk5LDQyLjM0ODE4OSwyNSAtNzEuNjI0ODU1LDQyLjM0ODc0OSwyNSAtNzEuNjI1NjM5LDQyLjM0OTQ4NSwyNSAtNzEuNTk4Mjk1LDQyLjM3NTk5NywyNSAtNzEuNTk4Mjk1LDQyLjM3NTk5NywyNSAtNzEuNTkzODQ2LDQyLjM3ODY4NSwyNSAtNzEuNTg5NzgyLDQyLjM4MTI2MSwyNSAtNzEuNTU1NzM0LDQyLjQyMzExNiwyNSAtNzEuNTU1ODQ3LDQyLjQ3MjMxOCwyNSAtNzEuNTU1ODQ3LDQyLjQ3MjMxOCwyNSAtNzEuNTU2NjE5LDQyLjQ3MjY4NSwyNSAtNzEuNTU2NjE5LDQyLjQ3MjY4NSwyNSAtNzEuNTU4MDc3LDQyLjQ3MzM3OSwyNSAtNzEuNTYwMDU2LDQyLjQ3NDM4MSwyNSAtNzEuNTUwNzY4LDQyLjQ4OTA4NSwyNSAtNzEuNTMzODUyLDQyLjUyNzY4OCwyNSAtNzEuNTMzODUyLDQyLjUyNzY4OCwyNSAtNzEuNjM1ODEyLDQyLjUyNDA5MSwyNSAtNzEuNjk0MDE1LDQyLjYyMDI4OSwyNSAtNzEuODMwMTE4LDQyLjYzNzU4OCwyNSAtNzEuODk4NzE2LDQyLjcxMTQxOCwyNSAtNzEuODk4NzE2LDQyLjcxMTQxOCwyNSAtNzEuNjk5MjE2LDQyLjcwNjI4OCwyNSAtNzEuNDg3OTEsNDIuNzAxMzg5LDI1IC03MS4zODM2NjcsNDIuNjk4ODA5LDI1IC03MS4yNTU5NTQsNDIuNzM2MTAyLDI1IDwvY29vcmRpbmF0ZXM+Cis8L0xpbmVhclJpbmc+Cis8L291dGVyQm91bmRhcnlJcz4KKzwvUG9seWdvbj4KKzxQb2x5Z29uPgorPG5hbWU+RXNzZXggQ291bnR5PC9uYW1lPgorPG91dGVyQm91bmRhcnlJcz4KKzxMaW5lYXJSaW5nPgorPGNvb3JkaW5hdGVzPi03MS4yMjg5MDIsNDIuNjQzOTkxLDI1IC03MS4xODM4MDEsNDIuNjIyMzkyLDI1IC03MS4xODI3MDEsNDIuNjIxNzkyLDI1IC03MS4xODI1MzgsNDIuNjIxNzE0LDI1IC03MS4xNzU2MDEsNDIuNjE4MzkyLDI1IC03MS4xNzU2MDEsNDIuNjE4MzkyLDI1IC03MS4xNzQyMDEsNDIuNjE3NjkyLDI1IC03MS4xNzE0MDEsNDIuNjE2MTkyLDI1IC03MS4xNzI5MDEsNDIuNjE0NjkyLDI1IC03MS4xNzQzODEsNDIuNjE0NzgsMjUgLTcxLjE3NDM4MSw0Mi42MTQ3OCwyNSAtNzEuMTc1MDA1LDQyLjYxNDk1NiwyNSAtNzEuMTc4NjAyLDQyLjYwNjQ5NywyNSAtNzEuMTc3MjAxLDQyLjYwNTY5MiwyNSAtNzEuMTcwMzAxLDQyLjYwMTU5MiwyNSAtNzEuMTcwMzAxLDQyLjYwMTU5MiwyNSAtNzEuMTY1MDE3LDQyLjU5Nzk2NSwyNSAtNzEuMTU0MzM2LDQyLjYxNTI3NywyNSAtNzEuMTM1MjksNDIuNTk5MDYxLDI1IC03MS4xMzE1MDcsNDIuNTk5MzcyLDI1IC03MS4xMzE1MDcsNDIuNTk5MzcyLDI1IC03MS4wNzU5NjEsNDIuNjA0MDkyLDI1IC03MS4wNzEwMzUsNDIuNTU1NzE0LDI1IC03MS4wNzAzODYsNDIuNTI2OTYsMjUgLTcxLjA2OTg0OSw0Mi41MjY1MDQsMjUgLTcxLjA2OTg0OSw0Mi41MjY1MDQsMjUgLTcxLjA2Njc5OCw0Mi41MjQ1OTUsMjUgLTcxLjA2NTg5OCw0Mi41MjQzOTUsMjUgLTcxLjA2NTIzNSw0Mi41MjQzOTUsMjUgLTcxLjA2MjA5OCw0Mi41MjQzOTUsMjUgLTcxLjA2MjA5OCw0Mi41MjQzOTUsMjUgLTcxLjA1NTQ5Nyw0Mi41MjQyOTQsMjUgLTcxLjA0NDY5OCw0Mi41MjU1OTUsMjUgLTcxLjA0MTE5Nyw0Mi41MjU4OTUsMjUgLTcxLjAzNzM5Nyw0Mi41MTI3OTYsMjUgLTcxLjAzNzM5Nyw0Mi41MTI3OTYsMjUgLTcxLjAzNjc5Nyw0Mi41MTE1OTYsMjUgLTcxLjA0Mzk5Niw0Mi41MDA2OTUsMjUgLTcxLjA0MjA5Niw0Mi40OTc5OTUsMjUgLTcxLjAyNTI5NSw0Mi40NDQ4OTYsMjUgLTcxLjAyNTI5NSw0Mi40NDQ4OTYsMjUgLTcwLjk1OTQ5NCw0Mi40MDc0OTgsMjUgLTcwLjg1MTQzNiw0Mi4zOTMyMDksMjUgLTcwLjc0OTQ4OCw0Mi40MDA4MiwyNSAtNzAuNjQ4MDcyLDQyLjQwNTYyOCwyNSAtNzAuNjQ4MDcyLDQyLjQwNTYyOCwyNSAtNzAuNjE3MzM5LDQyLjUwMDA5NiwyNSAtNzAuNzE5MjcyLDQyLjc1MDA5MywyNSAtNzAuNzM1MDA1LDQyLjg3NDY4NSwyNSAtNzAuNzM1MDA1LDQyLjg3NDY4NSwyNSAtNzAuNzQ3MjY2LDQyLjg3NDY5OCwyNSAtNzAuNzkyNDk1LDQyLjg3MzI5MSwyNSAtNzAuODMyODQ0LDQyLjg2Nzc4OCwyNSAtNzAuODgzNjk4LDQyLjg4MTI5LDI1IC03MC44ODM2OTgsNDIuODgxMjksMjUgLTcwLjk0Nzk5OSw0Mi44NzY2ODksMjUgLTcxLjA0NzUwMSw0Mi44NDQwODksMjUgLTcxLjE0MzUwMyw0Mi44MTc2ODksMjUgLTcxLjIwODYwNCw0Mi43NDMzOSwyNSAtNzEuMjA4NjA0LDQyLjc0MzM5LDI1IC03MS4yMTAyMDQsNDIuNzQzNjksMjUgLTcxLjIxNjIwNCw0Mi43NDQ5ODksMjUgLTcxLjIyNjUwMSw0Mi43NDYzNjEsMjUgLTcxLjI0NTUwNCw0Mi43NDI1ODksMjUgLTcxLjI0NTUwNCw0Mi43NDI1ODksMjUgLTcxLjI0ODcwNCw0Mi43NDA1ODksMjUgLTcxLjI1MTUyLDQyLjczOTEyOSwyNSAtNzEuMjU1NjA1LDQyLjczNjM4OSwyNSAtNzEuMjU1OTU0LDQyLjczNjEwMiwyNSAtNzEuMjU1OTU0LDQyLjczNjEwMiwyNSAtNzEuMjQxOTM3LDQyLjY4NTg3NSwyNSAtNzEuMjM5MDc2LDQyLjY0OTAxNSwyNSAtNzEuMjM1ODAzLDQyLjY0NzM5MSwyNSAtNzEuMjI4OTAyLDQyLjY0Mzk5MSwyNSA8L2Nvb3JkaW5hdGVzPgorPC9MaW5lYXJSaW5nPgorPC9vdXRlckJvdW5kYXJ5SXM+Cis8L1BvbHlnb24+Cis8L011bHRpR2VvbWV0cnk+Cis8L1BsYWNlbWFyaz4KKzxQbGFjZW1hcms+Cis8ZGVzY3JpcHRpb24+U1RFTSBtYXA8L2Rlc2NyaXB0aW9uPgorPG5hbWU+U1RFTTI8L25hbWU+Cis8c3R5bGVVcmw+I1N0eWxlMjwvc3R5bGVVcmw+Cis8TXVsdGlHZW9tZXRyeS8+Cis8L1BsYWNlbWFyaz4KKzxQbGFjZW1hcms+Cis8ZGVzY3JpcHRpb24+U1RFTSBtYXA8L2Rlc2NyaXB0aW9uPgorPG5hbWU+U1RFTTM8L25hbWU+Cis8c3R5bGVVcmw+I1N0eWxlMzwvc3R5bGVVcmw+Cis8TXVsdGlHZW9tZXRyeT4KKzxQb2x5Z29uPgorPG5hbWU+U3VmZm9sayBDb3VudHk8L25hbWU+Cis8b3V0ZXJCb3VuZGFyeUlzPgorPExpbmVhclJpbmc+Cis8Y29vcmRpbmF0ZXM+LTcxLjA0ODc5NCw0Mi4yNzc2OTgsMjUgLTcxLjA0Mjc5NCw0Mi4yNzY5OTgsMjUgLTcxLjAzNzg5NCw0Mi4yODQ4OTgsMjUgLTcxLjAwOTc5Myw0Mi4zMDUxOTgsMjUgLTcwLjk2MDE5Miw0Mi4yOTk0OTgsMjUgLTcwLjk2MDE5Miw0Mi4yOTk0OTgsMjUgLTcwLjkwNTY5Miw0Mi4zMTY5OTksMjUgLTcwLjg1MTE5MSw0Mi4zNzI0OTksMjUgLTcwLjc0OTQ4Nyw0Mi4zNzMzNDksMjUgLTcwLjcyOTIxMiw0Mi4zNzM4NDgsMjUgLTcwLjcyOTIxMiw0Mi4zNzM4NDgsMjUgLTcwLjY3NTY5LDQyLjM3NTA5OCwyNSAtNzAuNjc1NjksNDIuMzc1MDk4LDI1IC03MC42NTg3MjMsNDIuMzc1MDk4LDI1IC03MC42NTg3MjMsNDIuMzc1MDk4LDI1IC03MC42NDgwNzIsNDIuNDA1NjI4LDI1IC03MC42NDgwNzIsNDIuNDA1NjI4LDI1IC03MC43NDk0ODgsNDIuNDAwODIsMjUgLTcwLjg1MTQzNiw0Mi4zOTMyMDksMjUgLTcwLjk1OTQ5NCw0Mi40MDc0OTgsMjUgLTcxLjAyNTI5NSw0Mi40NDQ4OTYsMjUgLTcxLjAyNTI5NSw0Mi40NDQ4OTYsMjUgLTcxLjAyNDY5NSw0Mi40NDM3OTYsMjUgLTcxLjAyMzI5NSw0Mi40NDIwOTYsMjUgLTcxLjAzMDc5Niw0Mi40MTg2OTcsMjUgLTcxLjA3NzE5Niw0Mi4zODYyOTYsMjUgLTcxLjA3NzE5Niw0Mi4zODYyOTYsMjUgLTcxLjA3Nzk5Niw0Mi4zODA1OTcsMjUgLTcxLjA3NzU5Niw0Mi4zODA1OTcsMjUgLTcxLjA3NzU5Niw0Mi4zODA0OTcsMjUgLTcxLjA3NzI5Niw0Mi4zODA0OTcsMjUgLTcxLjA3NzI5Niw0Mi4zODA0OTcsMjUgLTcxLjA3NjM5Niw0Mi4zODAyOTcsMjUgLTcxLjA3NDM5Nyw0Mi4zNzcyOTgsMjUgLTcxLjA3NDM5Niw0Mi4zNzcwOTcsMjUgLTcxLjA3NDE5Niw0Mi4zNzYzOTcsMjUgLTcxLjA3NDE5Niw0Mi4zNzYzOTcsMjUgLTcxLjExNjkyOSw0Mi4zNTg3MTYsMjUgLTcxLjE2Nzk5OCw0Mi4zNjAxOTYsMjUgLTcxLjE2OTY5OCw0Mi4zNTgzOTYsMjUgLTcxLjE2OTY5OCw0Mi4zNTgwOTYsMjUgLTcxLjE2OTY5OCw0Mi4zNTgwOTYsMjUgLTcxLjE2OTk5OSw0Mi4zNTczOTcsMjUgLTcxLjE3MTE5OCw0Mi4zNTYzOTYsMjUgLTcxLjE3Mjc5OCw0Mi4zNTQ2OTYsMjUgLTcxLjE1Njk5Nyw0Mi4zMzAwOTcsMjUgLTcxLjE1Njk5Nyw0Mi4zMzAwOTcsMjUgLTcxLjExODU5Niw0Mi4zNTExOTcsMjUgLTcxLjExNjA5Niw0Mi4zNTA4OTcsMjUgLTcxLjExNDA5Niw0Mi4zNTA0OTcsMjUgLTcxLjExMTI5Niw0Mi4zNTAyOTcsMjUgLTcxLjExMTI5Niw0Mi4zNTAyOTcsMjUgLTcxLjExMTIyOCw0Mi4zNTAyNjMsMjUgLTcxLjExMTA5Niw0Mi4zNTAxOTcsMjUgLTcxLjExMDY5Niw0Mi4zNTAxOTcsMjUgLTcxLjExMDY5Niw0Mi4zNTAxOTcsMjUgLTcxLjEwOTYyMyw0Mi4zNTAwODQsMjUgLTcxLjEwOTYyMyw0Mi4zNTAwODQsMjUgLTcxLjEwNjg5Niw0Mi4zNDk3OTcsMjUgLTcxLjEwNjU5Niw0Mi4zNDk2OTcsMjUgLTcxLjEwNjY5Niw0Mi4zNDkyOTcsMjUgLTcxLjEwNjc5Niw0Mi4zNDg5OTcsMjUgLTcxLjEwNjc5Niw0Mi4zNDg5OTcsMjUgLTcxLjEwNjg5Niw0Mi4zNDg3OTcsMjUgLTcxLjEwNjg5Niw0Mi4zNDg0OTcsMjUgLTcxLjExNDc5Niw0Mi4zMjgzOTcsMjUgLTcxLjE2NDY5Nyw0Mi4zMDM2OTcsMjUgLTcxLjE2NDY5Nyw0Mi4zMDM2OTcsMjUgLTcxLjE2NDk5Nyw0Mi4zMDMyOTcsMjUgLTcxLjE2NTk5Nyw0Mi4zMDI0OTcsMjUgLTcxLjE2Njc5Nyw0Mi4zMDIwOTcsMjUgLTcxLjE5MTE5OCw0Mi4yODI2OTcsMjUgLTcxLjE5MTE5OCw0Mi4yODI2OTcsMjUgLTcxLjE0NTM1NCw0Mi4yNDk1OTksMjUgLTcxLjA5Mzc5NSw0Mi4yNjY4OTgsMjUgLTcxLjA1Mjk5NCw0Mi4yNzcxOTgsMjUgLTcxLjA0ODc5NCw0Mi4yNzc2OTgsMjUgPC9jb29yZGluYXRlcz4KKzwvTGluZWFyUmluZz4KKzwvb3V0ZXJCb3VuZGFyeUlzPgorPC9Qb2x5Z29uPgorPC9NdWx0aUdlb21ldHJ5PgorPC9QbGFjZW1hcms+Cis8UGxhY2VtYXJrPgorPGRlc2NyaXB0aW9uPlNURU0gbWFwPC9kZXNjcmlwdGlvbj4KKzxuYW1lPlNURU00PC9uYW1lPgorPHN0eWxlVXJsPiNTdHlsZTQ8L3N0eWxlVXJsPgorPE11bHRpR2VvbWV0cnkvPgorPC9QbGFjZW1hcms+Cis8UGxhY2VtYXJrPgorPGRlc2NyaXB0aW9uPlNURU0gbWFwPC9kZXNjcmlwdGlvbj4KKzxuYW1lPlNURU01PC9uYW1lPgorPHN0eWxlVXJsPiNTdHlsZTU8L3N0eWxlVXJsPgorPE11bHRpR2VvbWV0cnkvPgorPC9QbGFjZW1hcms+Cis8L0RvY3VtZW50PgorPC9rbWw+CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkuZ2UvZG9jL3JlYWRtZS50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkuZ2UvZG9jL3JlYWRtZS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTJmYzc0OQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5nZS9kb2MvcmVhZG1lLnR4dApAQCAtMCwwICsxLDExOCBAQAorTm90ZXMgYWJvdXQgdGhlIFNURU0gLSBHb29nbGVFYXJ0aCBpbnRlcmZhY2UKKyAgb3JnLmVjbGlwc2Uuc3RlbS5nZQorICAKK1RoaXMgZmlsZSBoYXMgbm90ZXMgdGhhdCBkb2N1bWVudCBpbnRlcmVzdGluZyB0aGluZ3MgcmVsYXRpbmcgdG8gdGhlIFNURU0gR29vZ2xlRWFydGggaW50ZXJmYWNlIGNvZGUgdGhhdCBzaG91bGQgYmUgcHJlc2VydmVkIGZvciBmdXR1cmUgZ2VuZXJhdGlvbi4KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgQ3JlYXRpbmcgQU5UIGJ1aWxkLnhtbCAgKGluIHByb2dyZXNzKQorICAgcmlnaHRjbGljayBwbHVnaW4ueG1sIC0+UERFIFRvb2xzIC0+IENyZWF0ZSBBbnQgQnVpbGQgZmlsZQorCitDaGFuZ2UgCisgICAgPHByb3BlcnR5IG5hbWU9ImphdmFjU291cmNlIiB2YWx1ZT0iMS41Ii8+CisJPHByb3BlcnR5IG5hbWU9ImphdmFjVGFyZ2V0IiB2YWx1ZT0iMS41Ii8+CisJCisgY2QgIEM6XHN0ZW1cb3JnLmVjbGlwc2Uuc3RlbS5nZQorIGFudCB6aXAucGx1Z2luIAkKKyAKKyBOb3RlIHRoZSBhYm92ZSBpcyBpbmNvbXBsZXRlLi4uLgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gCisKK1J1bm5pbmcgdGhlIEdvb2dsZUVhcnRoIGludGVyZmFjZSB1bmRlciBTVEVNIAorIAorLSBJbnN0YWxsIGFuZCB0ZXN0IEdvb2dsZUVhcnRoIAorLSB1cGRhdGUgdG8gdGhlIGxhdGVzdCBjb2RlIGFuZCBlbnN1cmUgaXQgaXMgcmVmcmVzaGVkIGFuZCByZWJ1aWx0CistIFVwZGF0ZSB0aGUgbGF1bmNoIHNjcmlwdCB0byBzcGVjaWZ5IFZNIGFyZ3VtZW50cyAgIC1YbXg1MTJNIAorLSBGcm9tIEVjbGlwc2UsIFJ1biBTdGVtIHVzaW5nIHN0ZW0ucHJvZHVjdAorICAKKyAgSW4gdGhlIG5ldyBTVEVNIHdvcmtzcGFjZSB3aW5kb3cgICAKKyAgIC0gV2luZG93cy0+T3BlbiBQZXJzcGVjdGl2ZS0+U2ltdWxhdGlvbiAKKyAgIC0gV2luZG93cy0+U2hvdyBWaWV3LT5PdGhlci0+U3RlbS0+R29vZ2xlRWFydGggCisgICAtIFdpbmRvd3MtPlByZWZlcmVuY2VzLT5Hb29nbGVFYXJ0aAorICAgICAgU3BlY2lmeSBhbnkgcHJlZmVyZW5jZXMgdGhhdCB5b3Ugd2FudCB0byB1c2UKKyAgIC0gU2NlbmFyaW9zOiBzZWxlY3QgU1RFTS0+UGFuZGVtaWMgRGVtbworICAgLSBGcm9tIHRoZSB0b29sYmFyIFNURU0gaWNvbnMsIHNlbGVjdCAiQWR2YW5jZSIKKyAgIC0gU2VsZWN0IEdvb2dsZUVhcnRoIFZpZXcgd2luZG93CisgICAtIFNlbGVjdCB0aGUgU2ltdWxhdGlvbiB0aGVuIHJpZ2h0IGNsaWNrIGZvciBwb3B1cCBtZW51CisgICAtIHNlbGVjdCBEaXNwbGF5TWFwIHRvIHNlbmQgYSBtYXAgdG8gR29vZ2xlRWFydGggCisgICAgCisgIAorICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitVc2luZyBTV1QgUHJvZ3JhbS5sYXVuY2goZm4pIAorCitUaGlzIHVzZXMgIHRoZSBTV1QgUHJvZ3JhbSB1dGlsaXR5IGNsYXNzIHRvIGxhdW5jaCB0aGUgS01MIGZpbGUgdG8gdGhlIEdvb2dsZUVhcnRoIGFwcGxpY2F0aW9uLiAgCitGb3Igc29tZSByZWFzb24sIGFsdGhvdWdoIGl0IGNvbXBpbGVzIHdpdGggbm8gcHJvYmxlbSwgYXQgcnVudGltZSBpdCBmYWlscyBiZWNhdXNlIGl0IG5lZWRzIHBsYXRmb3JtIGRlcGVuZGVudCBKTkkgbWV0aG9kcy4gIAorT24gV2luZG93cyBpdCBuZWVkcyB0aGUgZGxsIGZpbGUgIAorICAgc3d0LXdpbjMyLTMyMzIuZGxsCisgICAKK0FmdGVyIG1hbnkgZnJ1aXRsZXNzIGF0dGVtcHRzIHRvIGdldCB0aGlzIHRvIHdvcmsgSSB1c2VkIHRoZSBmb2xsb3dpbmcgaGFjayB0byBieXBhc3MgdGhlIHByb2JsZW0uCisgICBHbyB0bzoKKyAgICBodHRwOi8vZG93bmxvYWQuZWNsaXBzZS5vcmcvZWNsaXBzZS9kb3dubG9hZHMvZHJvcHMvUi0zLjItMjAwNjA2MjkxOTA1L2luZGV4LnBocAorICAgRG93bmxvYWQ6ICAgIAorICAgIHN3dC0zLjItd2luMzItd2luMzIteDg2LnppcAorICAgZXh0cmFjdCAgCisgICAgc3d0LXdpbjMyLTMyMzIuZGxsIAorICAgcHV0IGl0IGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGUgZ2UgcHJvamVjdC4gCisgICBJdCBpcyB0aGVuIGNoZWNrZWQgaW50byBTVk4KKyAgIAorVGhpcyBzZWVtcyB0byB3b3JrIGJ1dCB3b3VsZCBoYXZlIHRvIGJlIHNsaWdodGx5IHJlZG9uZSB0byBzdXBwb3J0IG90aGVyIHBsYXRmb3Jtcy4KKworSWYgc29tZW9uZSBmaWd1cmVzIG91dCBhIGJldHRlciB3YXkgdG8gaGFuZGxlIGNyb3NzcGxhdGZvcm0gc3VwcG9ydCBmb3IgU1dULCBwbGVhc2UgZG9jdW1lbnQgaXQgaGVyZS4KKyAKKyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgRW1iZWRlZCBXZWIgU2VydmVyCisgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIFNlZSB0aGUgZm9sbG93aW5nIFVSTCBmb3IgaW5mb3JtYXRpb24gYWJvdXQgdXNpbmcgdGhlIHdlYiBzZXJ2ZXIgCisgdGhhdCBpcyBlbWJlZGVkIGluIEVjbGlwc2UuCisgICBodHRwOi8vd3d3LmVjbGlwc2V6b25lLmNvbS9lY2xpcHNlL2ZvcnVtcy90NjI4NTIuaHRtbD9zdGFydD0wCisgCisgV2UgdXNlIHRoaXMgYW5kIGl0IGlzIHN0YXJ0ZWQgaW4gU3RlbUttbC5qYXZhCisgCisgVGhlcmUgYXJlIHNwZWNpYWwgY29uc2lkZXJhdGlvbiB0byBtYWtlIHRoZSBlbWJlZGRlZCB3ZWIgc2VydmVyIHJ1bgorIGluIGEgc3RhbmRhbG9uZSBFY2xpcHNlIFJDUC4gIFRoZSBiYXNpYyBwcm9ibGVtIGlzIHRoYXQgdGhlIGVtYmVkZGVkIFRvbWNhdCBzZXJ2ZXIgCisgY2Fubm90IHJlYWQgZnJvbSBqYXIgZmlsZXMgYW5kIHRoZSBkZWZhdWx0IHdoZW4gZXhwb3J0aW5nIHBsdWdpbnMgZnJvbQorIEVjbGlwc2UgaXMgdG8gcGFja2FnZSBpdCBpbiBhIGphci4gIAorIEEgaGFjayB0byBieXBhc3MgdGhpcyBpcyB0byBkbyB0aGUgZm9sbG93aW5nOgorICAgLSBNb2RpZnkgYnVpbGQucHJvcGVydGllcyBzbyB0aGF0ICJiaW4vIiBpcyBpbmNsdWRlZCBpbgorICAgICB0aGUgYmluLmluY2x1ZGVzIHN0YXRlbWVudC4KKyAgIC0gTW9kaWZ5IG1hbmlmZXN0Lm1mIHRvIGluY2x1ZGUKKyAgICAgIEJ1bmRsZS1DbGFzc1BhdGg6IGJpbi8KK1RoZW4gcnVuIHRoZSBleHBvcnQgd2l6YXJkIGZyb20gb3JnLmVjbGlwc2Uuc3RlbS51aS9zdGVtLnByb2R1Y3QKKworIFRoZXJlIG11c3QgYmUgYmV0dGVyIHdheXMgdG8gZG8gdGhpcyBidXQgYXQgbGVhc3QgCisgaW4gMy4yLjEsIHRoZSBhYm92ZSB3b3Jrcy4KKyAgICAgIAorIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBleGFtcGxlLmttbAorIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gCisgCisgRmlsZSBleGFtcGxlLmttbCBpcyBhbiBleGFtcGxlIG9mIHRoZSBLTUwgdGhhdCBpcyBnZW5lcmF0ZWQgYnkgdGhlIFN0ZW0gdG8gR29vZ2xlRWFydGggaW50ZXJmYWNlIChhY3R1YWxseSB0aGlzIHdhcyBmcm9tIFN0ZW0gMSBidXQgc2hvdWxkIGJlIHRoZSBzYW1lIG9mIHNpbWlsYXIgZm9yIFN0ZW0gMikgIAorIAorIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICAgIAorIAorIFJ1bm5pbmcgb24gMiBwcm9jZXNzb3JzIHdpdGggbmV0d29yayBhdHRhY2hlZCBmaWxlcworIAorICAgU3lzdGVtMSAKKyAgICAgIFNURU0gCisgICAgICAgIEZvbGRlciAgbmV0bGluayBcXHN5c3RlbTFcYy50bXBcZ2UKKyAgICAgICAgICAgCisgICAgICAgICAgIAorICAgU3lzdGVtMiAKKyAgICAgICAgIEZvbGRlciBjOi90bXAvZ2UgCisgICAgICAgICAgIFNoYXJlIGM6XHRtcCBhcyBjLnRtcAorICAgICAgICBUb21jYXQgCisgICAgICAgICAgIAorICAgICAgICBHb29nbGVFYXJ0aAorICAgICAgICAKKyAgICAgICAgaHR0cDovL3N5c3RlbTE6ODA4MC9zbGlkZXNob3cuaHRtbCAKKyAgICAgICAgCisgICAgICAgIGNkICVDQVRBTElOQV9IT01FJQorICAgICAgICBiaW5cdG9tY2F0NS5leGUKKyAgICAgICAgCisgICAgQW4gWFAgc2VydmljZSBjYW5ub3QgcmVhZCBuZXR3b3JrIGZpbGVzIHNvIHlvdSBoYXZlIAorICAgIHRvIHN0YXJ0IFRvbWNhdCBhcyBhIG5vcm1hbCBhcHBsaWNhdGlvbiBpZiBUb21jYXQgaXMgb24gdGhlIHN5c3RlbQorICAgIHRoYXQgcmVhZHMgdGhlIG5ldHdvcmsgZmlsZS4gIFByb2JhYmx5IGJlc3QgdGhpbmcgdG8gZG8gaXMgCisgICAgcnVuIFRvbWNhdCBhbmQgR0Ugb24gdGhlIHN5c3RlbSB0aGF0IGhhcyB0aGUgbmF0aXZlIGZpbGVzIGFuZCBsZXQgCisgICAgU1RFTSB3cml0ZSB0byB0aGUgbmV0d29yayBhdHRhY2hlZCBkaXJlY3RvcnkuCisgCisgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgICAgICAgICAgICAgICAgIApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5nZS9kb2MvcmVhZG1lX3NlcnZsZXQudHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLmdlL2RvYy9yZWFkbWVfc2VydmxldC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWZjYjEzNwotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5nZS9kb2MvcmVhZG1lX3NlcnZsZXQudHh0CkBAIC0wLDAgKzEsMTY1IEBACitvcmcuZWNsaXBzZS5zdGVtLmdlLnNlcnZsZXQKKworT3ZlcnZpZXc6CisKK1RoaXMgcGx1Z2luIHByb3ZpZGVzIGEgc2VydmxldCBiYXNlZCBpbnRlcmZhY2UgZm9yIGRpc3BsYXlpbmcgdGhlIAorU1RFTSBtYXAgYXMgYW4gb3ZlcmxheSBvbiBHb29nbGVFYXJ0aC4KKworVGhlcmUgYXJlIDIgcGFydHMuICBVc2luZyB0aGUgU1RFTSBHb29nbGVFYXJ0aCBpbnRlcmZhY2UgVmlldywgCitTVEVNIGNhbiBiZSBpbnN0cnVjdGVkIG9uIGVhY2ggY3ljbGUgKG9yIG9uIGV2ZXJ5IE50aCAKK2N5Y2xlKSB0byB3cml0ZSB0aGUgbWFwIGRhdGEgdG8gYSBzcGVjaWZpZWQgZGlyZWN0b3J5IGFzIGEgS01MIGZpbGUuCisKK0FzIFNURU0gaXMgcHJvZHVjaW5nIEtNTCBmaWxlcyBvciBhcyBhIGxhdGVyIHN0ZXAsIG9uZSBzdGFydHMgdGhlIAorcHJvY2VzcyB0byBkaXNwbGF5IHRoZSBTVEVNIHJlc3VsdHMgb24gR29vZ2xlRWFydGguCitUaGUgU2VydmxldCBpbnRlcmZhY2UgaW5jbHVkZXMgYSBIVE1MIGZpbGUgYW5kIFN0YXJ0U2VydmxldCB0aGF0IHdpbGwKK3NlbmQgYSBOZXR3b3JrTGluayBmaWxlIHRvIEdvb2dsZUVhcnRoIHRoYXQgdGVsbHMgaXQgdG8gZXZlcnkgTiBzZWNvbmRzCit0byBpc3N1ZSBhIHJlcXVlc3QgdG8gU2xpZGVTaG93U2VydmxldCB0byBnZXQgdGhlIEtNTCBmaWxlIGZvciB0aGUgbmV4dCBjeWNsZS4KKworU2xpZGVTaG93U2VydmxldC5qYXZhCisgIFRoaXMgaXMgYSBKYXZhIFNlcnZsZXQgdG8gaW50ZXJmYWNlIHRvIEdvb2dsZUVhcnRoIAorICB0byBkaXNwbGF5IEtNTCBmaWxlcyBnZW5lcmF0ZWQgYnkgU1RFTS4KKworU3RhcnRTZXJ2bGV0LmphdmEgCisgIFRoaXMgaXMgYSBTZXJ2bGV0IHRoYXQgYmFzZWQgb24gdXNlciBpbnB1dCB3aWxsIHNlbmQgYSAKKyAgTmV0d29ya0xpbmsua21sIGZpbGUgdG8gR29vZ2xlRWFydGguCisKK0ltYWdlU2VydmxldC5qYXZhIAorICBUaGlzIGlzIGEgU2VydmxldCB0aGF0IGJhc2VkIG9uIHVzZXIgaW5wdXQgd2lsbCBjcmVhdGUgYW4gaW1hZ2UgCisgIGZpbGUgdGhhdCBjYW4gYmUgc2VudCB0byBHb29nbGVFYXJ0aC4gIFRoZSBpbWFnZSB3aWxsIGhhdmUgCisgIHdoYXRldmVyIHRleHQgaXMgc3BlY2lmaWVkLgorICBUaGlzIGlzIHVzZWQgdG8gZGlzcGxheSB0ZXh0IG1lc3NhZ2VzIG9uIHRoZSBHb29nbGVFYXJ0aCBzY3JlZW4uICAKKyAKK1ZlcmlmeVNlcnZsZXQuamF2YSAKKyAgVGhpcyBpcyBhIHNlcnZsZXQgdGhhdCBpcyB1c2VkIGJ5IFZlcmlmeUNsaWVudCB0byBwcm92aWRlIAorICBhIHdheSBmb3IgdGhlIGNsaWVudCB0byB2ZXJpZnkgdGhhdCB0aGUgd2ViIHNlcnZlciBpcyBhY3RpdmUgCisgIGFuZCB0aGF0IHRoZSBzZXJ2bGV0IGludGVyZmFjZSBpcyBkZXBsb3llZCBjb3JyZWN0bHkuCisgIAorVmVyaWZ5Q2xpZW50IAorICBUaGlzIHV0aWxpdHkgY2xhc3MgaG9sZHMgYSB2ZXJpZnkgbWV0aG9kIHRoYXQgd2lsbCB0cnkgdG8gCisgIGFjY2VzcyB0aGUgVmVyaWZ5U2VydmxldCB0byBjaGVjayB0aGF0IGl0IGlzIHVwIGFuZCBydW5uaW5nLgorICAgICBTdHJpbmcgdXJsID0gImh0dHA6Ly9sb2NhbGhvc3Q6ODA4MC9TbGlkZVNob3cvdmVyaWZ5IgorICAgICBWZXJpZnlDbGllbnQgdmMgPSBuZXcgVmVyaWZ5Q2xpZW50KCk7CisgICAgIGJvb2xlYW4gb2sgPSB2Yy52ZXJpZnkodXJsKQorICAgICBpZiAoISBvaykgeworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4odmMuZ2V0RXJyb3IoKSk7CisgICAgICAgIHJldHVybjsKKyAgICAgfSAgCisgICAgIAorICAgICAKKyAgICAgICAgCitUaGUgaW5zdGFsbGF0aW9uIG9mIHRoaXMgaW50ZXJmYWNlIGludm9sdmVzIHRoZSBmb2xsb3dpbmc6CisgIC0gSW5zdGFsbGluZyB0aGUgVG9tQ2F0IHdlYiBzZXJ2ZXIuCisgIC0gSW5zdGFsbGluZyB0aGUgc2VydmxldHMgb24gVG9tY2F0CisgIC0gSW5zdGFsbGluZyBHb29nbGUgRWFydGgKKyAgLSBJbnN0YWxsaW5nIGFuZCBydW5uaW5nIFNURU0KKyAgLSBJbnZva2luZyB0aGUgU2xpZGVTaG93Lmh0bWwgCisgIAorVGhlc2Ugc3RlcHMgYXJlIGRlc2NyaWJlZCBpbiBkZXRhaWwgYmVsb3cuCisKKyAKKworICBUbyBpbnN0YWxsIHRoaXMgc2VydmxldCBzbyBpdCB3aWxsIHJ1biBvbiB5b3VyIG93biBXaW5kb3dzIFBDLAorICBkbyB0aGUgZm9sbG93aW5nIHdpdGg6CisgICA8cGF0aD49eW91ciBzdGVtIHdvcmtzcGFjZSBmb2xkZXIuCisgICA8cHJvamVjdD49PHBhdGg+Lm9yZy5lY2xpcHNlLnN0ZW0uZ2Uuc2VydmxldAorICAgVGhpcyBpcyBmb3IgV2luZG93cyBzeXN0ZW1zIG9ubHkgYXQgdGhlIGN1cnJlbnQgdGltZS4KKyAgIExpbnV4IGluc3RhdGFsbGF0aW9uIHdpbGwgYmUgZG9jdW1lbnRlZCB3aGVuIGl0IGlzIGF2YWlsYWJsZS4KKyAgCisgIC0gQ2hlY2tvdXQgdGhlIG9yZy5lY2xpcHNlLnN0ZW0gcHJvamVjdHMgZnJvbQorICAgICAgc3ZuLm9wZW5zb3VyY2UuaWJtLmNvbS9zdm4vc3RlbS90cnVuaworICAgICAgCisgIC0gSW5zdGFsbCBUb21jYXQgKHZlcnNpb24gNSkgb24geW91ciBXaW5kb3dzIFBDLgorICAgICAgaHR0cDovL3RvbWNhdC5hcGFjaGUub3JnCisgICAgICAKKyAgICAgLSBkb3dubG9hZCBjdXJyZW50IDUuNSBleGVjdXRhYmxlIGFuZCBpbnZva2UgaXQuCisgICAgIC0gVGFrZSB0aGUgZGVmYXVsdHMgYW5kIGFzc2lnbiBhIHVzZXIgYW5kIHBhc3N3b3JkIGZvciBhZG1pbi4KKyAgICAgLSBBZnRlciBpdCBzdGFydHMsIGNsaWNrIG9uIHRoZSBUb21jYXQgdHJheSBpY29uIGFuZAorICAgICAgIHNwZWNpZnkgInN0YXJ0IHNlcnZpY2UiIAorICAgICAtIEZyb20geW91ciBicm93c2VyIGdvdG8gaHR0cDovL2xvY2FsaG9zdDo4MDgwIAorICAgICAgIGFuZCBzZWxlY3QgIlRvbWNhdCBNYW5hZ2VyIiBmcm9tIEFkbWluaXN0cmF0aW9uLgorICAtICBBbHRlcm5hdGl2ZSBpcyB0byB1c2UgdGhlIFRvbWNhdCBzZXJ2ZXIgZW1iZWRkZWQgaW4gRWNsaXBzZS4KKyAgCisgICAgIFRoZSBwcmVmZXJlbmNlcyBmb3IgZ0UgaGF2ZSBhIGNoZWNrYm94IHRoYXQgY2FuIGJlIHNldAorICAgICB0byB1c2UgdGhlIGVtYmVkZGVkIHNlcnZlci4gIFRoaXMgd29ya3MgZmluZSBmb3IgcnVubmluZyAKKyAgICAgR29vZ2xlRWFydGggYW5kIFNURU0gdG9nZXRoZXIgYnV0IGNhbiBub3QgYmUgdXNlZCBmb3IgCisgICAgIG9mZmxpbmUgZGlzcGxheSBvZiBTVEVNIGRhdGEuCisgICAgICAgICAgICAgIAorICAtICBSdW4gYW50IHRvIGdlbmVyYXRlIGEgV0FSIGZpbGUuCisgICAgICAgY2QgPHByb2plY3Q+CisgICAgICAgYW50IHdhcgorICAgICBUaGlzIGJ1aWxkcyB0aGUgd2FyIGZpbGUgaW4gCisgICAgICAgPHByb2plY3Q+L1dFQi1JTkYvU2xpZGVTaG93LndhcgorICAgICAgIAorICAtICBVc2UgdGhlIFRvbWNhdCBNYW5hZ2VyIHRvIGRlcGxveSBTbGlkZVNob3cud2FyCisgICAgICBVUkwgaHR0cDovL2xvY2FsaG9zdDo4MDgwL21hbmFnZXIvaHRtbC91cGxvYWQgIAorICAgICAgIC0gY2xpY2sgInVuZGVwbG95IiBmb3IgZXhpc3Rpbmcgc2xpZGVzaG93IChpZiBwcmVzZW50KQorICAgICAgIC0gVW5kZXIgIldBUiBmaWxlIHRvIGRlcGxveSIKKyAgICAgICAgIC0gYnJvd3NlIHRvIDxwcm9qZWN0Pi9idWlsZC93YXIvU2xpZGVTaG93LndhcgorICAgICAgICAgLSBjbGljayAiZGVwbG95IgorICAKKyAgLSBUbyB2ZXJpZnkgdGhlIGluc3RhbGxhdGlvbiwgZW50ZXIgdGhlIGZvbGxvd2luZyBVUkwgaW4geW91ciBicm93c2VyIgorICAgICAgIGh0dHA6Ly9sb2NhbGhvc3Q6ODA4MC9TbGlkZVNob3cvaW1hZ2UKKyAgICBZb3Ugc2hvdWxkIGdldCBhIHNtYWxsIGltYWdlIHdpdGggdGV4dCAiZGVmYXVsdCIgZGlzcGxheWVkIGluIHlvdXIgYnJvd3NlciAKKyAgICAKKyAgLSAgQ29weSA8cHJvamVjdD5zbGlkZXNob3cuaHRtbCB0byA8VG9tY2F0Plx3ZWJhcHBzXFJPT1QgICAgIAorICAgICAgICAgCisgICAgICAgCisgIFRvIHJ1biB0aGlzIHNlcnZsZXQgeW91IG5lZWQgdG8gZG8gdGhlIGZvbGxvd2luZzoKKyAgCisgIC0gSW5zdGFsbCBHb29nbGVFYXJ0aCAgIGh0dHA6Ly9lYXJ0aC5nb29nbGUuY29tLyAKKyAgICAgSW5zdXJlIHRoYXQgR29vZ2xlRWFydGggcnVucyBvbiB5b3VyIHN5c3RlbS4gIFRoZXJlIG1heSBiZSBpc3N1ZXMgd2l0aCAKKyAgICAgZmlyZXdhbGxzIG9yIDNEIHZpZGVvIGRyaXZlcnMgdGhhdCB3aWxsIHByZXZlbnQgR29vZ2xlRWFydGggZnJvbQorICAgICBydW5uaW5nLiAgVGhlIGN1cnJlbnQgdmVyc2lvbiBvZiBHRVNsaWRlU2hvdyBydW5zIHdpdGggCisgICAgIEdvb2dsZUVhcnRoIFY0IGJldGEuIAorICAKKyAgLSBUbyBydW4gdGhlIGV4aXN0aW5nIFNURU0gZGVtbyBvbiBISUkwMDMuYWxtYWRlbi5pYm0uY29tLCAKKyAgICBzZWxlY3QgdGhlIGZvbGxvd2luZyB1cmwuCisgICAgIGh0dHA6Ly9oaWkwMDMuYWxtYWRlbi5pYm0uY29tOjgwODAvc2xpZGVzaG93Lmh0bWwKKyAgICAgVGhlbiBwcmVzcyAic3RhcnQiCisgICAgIFRoaXMgd2lsbCBydW4gYSBwcmV2aW91c2x5IGdlbmVyYXRlZCBzY3JpcHQgb2YgdGhlIHNwcmVhZCBvZiAKKyAgICAgYSBmbHUgdmlydXMgaW4gdGhlIFVuaXRlZCBTdGF0ZXMgc2hvd2luZyAiSW5mZWN0aW91cyIgaW5kaXZpZHVhbHMuCisgICAgIAorICAKKyAgLSAgVG8gY3JlYXRlIGEgbmV3IHNldCBvZiBTVEVNL0tNTCBmaWxlIHlvdSBtdXN0IHJ1biBTVEVNIGFuZCAKKyAgICAgdXNlIHRoZSBHb29nbGVFYXJ0aCBWaWV3ZXIgdG8gZW5hYmxlIHRoZSBsb2dnaW5nIG9mIEtNTCBmaWxlcyAKKyAgICAgYW5kIHRoZW4gcnVuIGEgc2ltdWxhdGlvbi4gIFRoaXMgd2lsbCBiZSBkb2N1bWVudGVkIGVsc2V3aGVyZS4gIAorICAgICAKKyAgICAgIAorICAtICAgVXNlIHRoZSBmb2xsb3dpbmcgVVJMIHRvIHJ1biB0aGUgYWJvdmUgc2xpZGVzaG93IGVpdGVyIGNvbmN1cnJlbnRseSAKKyAgICAgIG9yIGFmdGVyd2FyZHMuCisgICAgICAgaHR0cDovL2xvY2FsaG9zdDo4MDgwL3NsaWRlc2hvdy5odG1sCisgICAgICAgV2hlbiBwcm9tcHRlZDogc3BlY2lmeSB0aGUgZm9sZGVyIHRoYXQgeW91IGNyZWF0ZWQgYWJvdmUuCisgICAgIAorICAgIC0gQW4gYWx0ZXJuYXRpdmUgaXMgdG8gdXBkYXRlIHRoZSA8cHJvamVjdD5zbGlkZXNob3cua21sIGZpbGUgd2l0aCAgCisgICAgICB0aGUgZm9sZGVyIHRoYXQgeW91IGNyZWF0ZWQgYWJvdmUuCisgICAgICAgaHR0cDovL2xvY2FsaG9zdDo4MDgwL1NsaWRlU2hvdy9zbGlkZXNob3c/Zm9sZGVyPWU6L3RtcC9nZQorICAgIAorICAgICAgYW5kIHRoZW4gbGF1bmNoIHRoZSBzbGlkZXNob3cua21sIGZpbGUgYnkgZG91YmxlY2xpY2tpbmcgCisgICAgICBvbiB0aGUgZmlsZSBpbiBGaWxlRXhwbG9yZXIuCisgIAorICAKKyAgQXQgdGhpcyBwb2ludCwgdGhlIHNsaWRlc2hvdy5rbWwgZmlsZSB3aWxsIGJlIHJlYWQgYnkgR29vZ2xlRWFydGgoR0UpIAorICBhbmQgaXQgd2lsbCB0ZWxsIEdFIHRoYXQgaXQgc2hvdWxkIHJlYWQgS01MIGZpbGVzIGZyb20gdGhlIHNwZWNpZmllZCAKKyAgVVJMIGF0IHRoZSBzcGVjaWZpZWQgaW50ZXJ2YWwuICAKKyAgVGhlIFVSTCB3aWxsIGludm9rZSB0aGUgZG9HZXQoKSBtZXRob2Qgb2YgU2xpZGVTaG93U2VydmxldCB3aGljaCAKKyAgd2lsbCBzZW5kIHRoZSBLTUwgZmlsZXMgZnJvbSB0aGUgc3BlY2lmaWVkIGZvbGRlciBvbmUgYnkgb25lIAorICBiYXNlZCBvbiBhIGNvdW50ZXIga2V5ZWQgYnkgdGhlIGlkPSBwYXJhbWV0ZXIuICAKKyAgCisgIElmIHRoZSAid2FpdCIgb3B0aW9uIGlzIHNwZWNpZmllZCBhcyAieSIgdGhlbiB3aGVuIHRoZSBsYXN0IEtNTCBmaWxlIAorICBpcyByZWFkLCByYXRoZXIgdGhhbiBzdGFydGluZyBvdmVyLCBpdCB3aWxsIHdhaXQgZm9yIG1vcmUgZmlsZXMgdG8gCisgIGFwcGVhciBpbiB0aGUgZm9sZGVyIGFuZCBzaG93IGVhY2ggbmV3IGZpbGUgYXMgaXQgYXBwZWFycy4KKyAgCisgIFRoZSBhYm92ZSBpbnN0cnVjdGlvbiBhc3N1bWUgdGhhdCB5b3UgYXJlIGRvaW5nIGV2ZXJ5dGhpbmcgb24geW91ciBsb2NhbCBzeXN0ZW0uIAorICBPYnZpb3VzbHksIHRoaXMgY291bGQgYWxsIHJ1biBvbiBhbm90aGVyIHN5c3RlbSBieSByZXBsYWNpbmcgdGhlIHVzZSBvZiAKKyAgbG9jYWxob3N0IHdpdGggdGhlIGV4dGVybmFsIHN5c3RlbSBuYW1lLiBIb3dldmVyIHRoZSBmb2xkZXIgY29udGFpbmluZyAKKyAgdGhlIEtNTCBmaWxlcyBtdXN0IGJlIGFjY2Vzc2FibGUgZnJvbSB0aGUgd2Vic2VydmVyIHBlcmhhcHMgdmlhIG5ldHdvcmsKKyAgc2hhcmluZy4gIEhvd2V2ZXIgdGhlcmUgaXMgYSByZXN0cmljdGlvbi4gIFdpdGggWFAsIGEgc3lzdGVtIHNlcnZpY2UgY2Fubm90CisgIG5ldHdvcmsgYXR0YWNoZWQgZmlsZXMgc28geW91IG5lZWQgdG8gcnVuIFRvbWNhdCBhcyBhbiBhcHBsaWNhdGlvbiBhbmQgbm90IAorICBhcyBhIHNlcnZpY2UuCisgICAKK1BsZWFzZSBsZXQgbWUga25vdyBpZiBhbnkgb2YgdGhlIGFib3ZlIGluc3RydWN0aW9ucyBhcmUgd3Jvbmcgb3IgY29uZnVzaW5nIQorCitKb2huIAorCitqdGhvbWFzQHNlYWJyaWdodGJlYWNoLmNvbQorICAgClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLmdlL2RvYy9zbGlkZXNob3cua21sIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLmdlL2RvYy9zbGlkZXNob3cua21sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFlMGQ5OTYKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkuZ2UvZG9jL3NsaWRlc2hvdy5rbWwKQEAgLTAsMCArMSwxNSBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxrbWwgeG1sbnM9Imh0dHA6Ly9lYXJ0aC5nb29nbGUuY29tL2ttbC8yLjAiPgorPEZvbGRlcj4KKyAgIDxkZXNjcmlwdGlvbj5TbGlkZVNob3cgTmV0d29ya0xpbms8L2Rlc2NyaXB0aW9uPgorICAgPG5hbWU+TmV0d29yayBMaW5rczwvbmFtZT4KKzxOZXR3b3JrTGluaz4KKzxVcmw+Cis8aHJlZj5odHRwOi8vbG9jYWxob3N0OjgwODAvU2xpZGVTaG93L3NsaWRlc2hvdz9pZD1qdGhvbWFzMiZhbXA7Zm9sZGVyPWM6L3RtcC9nZTE8L2hyZWY+Cis8cmVmcmVzaEludGVydmFsPjI8L3JlZnJlc2hJbnRlcnZhbD4KKzxyZWZyZXNoTW9kZT5vbkludGVydmFsPC9yZWZyZXNoTW9kZT4KKzwvVXJsPgorPGZseVRvVmlldz4wPC9mbHlUb1ZpZXc+Cis8L05ldHdvcmtMaW5rPgorPC9Gb2xkZXI+Cis8L2ttbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkuZ2UvZXBsLXYxMC5odG1sIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLmdlL2VwbC12MTAuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZDRiMTk2Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLmdlL2VwbC12MTAuaHRtbApAQCAtMCwwICsxLDMyOCBAQAorPGh0bWwgeG1sbnM6bz0idXJuOnNjaGVtYXMtbWljcm9zb2Z0LWNvbTpvZmZpY2U6b2ZmaWNlIgoreG1sbnM6dz0idXJuOnNjaGVtYXMtbWljcm9zb2Z0LWNvbTpvZmZpY2U6d29yZCIKK3htbG5zPSJodHRwOi8vd3d3LnczLm9yZy9UUi9SRUMtaHRtbDQwIj4KKworPGhlYWQ+Cis8bWV0YSBodHRwLWVxdWl2PUNvbnRlbnQtVHlwZSBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9d2luZG93cy0xMjUyIj4KKzxtZXRhIG5hbWU9UHJvZ0lkIGNvbnRlbnQ9V29yZC5Eb2N1bWVudD4KKzxtZXRhIG5hbWU9R2VuZXJhdG9yIGNvbnRlbnQ9Ik1pY3Jvc29mdCBXb3JkIDkiPgorPG1ldGEgbmFtZT1PcmlnaW5hdG9yIGNvbnRlbnQ9Ik1pY3Jvc29mdCBXb3JkIDkiPgorPGxpbmsgcmVsPUZpbGUtTGlzdAoraHJlZj0iLi9FY2xpcHNlJTIwRVBMJTIwMjAwM18xMV8xMCUyMEZpbmFsX2ZpbGVzL2ZpbGVsaXN0LnhtbCI+Cis8dGl0bGU+RWNsaXBzZSBQdWJsaWMgTGljZW5zZSAtIFZlcnNpb24gMS4wPC90aXRsZT4KKzwhLS1baWYgZ3RlIG1zbyA5XT48eG1sPgorIDxvOkRvY3VtZW50UHJvcGVydGllcz4KKyAgPG86UmV2aXNpb24+MjwvbzpSZXZpc2lvbj4KKyAgPG86VG90YWxUaW1lPjM8L286VG90YWxUaW1lPgorICA8bzpDcmVhdGVkPjIwMDQtMDMtMDVUMjM6MDM6MDBaPC9vOkNyZWF0ZWQ+CisgIDxvOkxhc3RTYXZlZD4yMDA0LTAzLTA1VDIzOjAzOjAwWjwvbzpMYXN0U2F2ZWQ+CisgIDxvOlBhZ2VzPjQ8L286UGFnZXM+CisgIDxvOldvcmRzPjE2MjY8L286V29yZHM+CisgIDxvOkNoYXJhY3RlcnM+OTI3MDwvbzpDaGFyYWN0ZXJzPgorICAgPG86TGluZXM+Nzc8L286TGluZXM+CisgIDxvOlBhcmFncmFwaHM+MTg8L286UGFyYWdyYXBocz4KKyAgPG86Q2hhcmFjdGVyc1dpdGhTcGFjZXM+MTEzODQ8L286Q2hhcmFjdGVyc1dpdGhTcGFjZXM+CisgIDxvOlZlcnNpb24+OS40NDAyPC9vOlZlcnNpb24+CisgPC9vOkRvY3VtZW50UHJvcGVydGllcz4KKzwveG1sPjwhW2VuZGlmXS0tPjwhLS1baWYgZ3RlIG1zbyA5XT48eG1sPgorIDx3OldvcmREb2N1bWVudD4KKyAgPHc6VHJhY2tSZXZpc2lvbnMvPgorIDwvdzpXb3JkRG9jdW1lbnQ+Cis8L3htbD48IVtlbmRpZl0tLT4KKzxzdHlsZT4KKzwhLS0KKyAvKiBGb250IERlZmluaXRpb25zICovCitAZm9udC1mYWNlCisJe2ZvbnQtZmFtaWx5OlRhaG9tYTsKKwlwYW5vc2UtMToyIDExIDYgNCAzIDUgNCA0IDIgNDsKKwltc28tZm9udC1jaGFyc2V0OjA7CisJbXNvLWdlbmVyaWMtZm9udC1mYW1pbHk6c3dpc3M7CisJbXNvLWZvbnQtcGl0Y2g6dmFyaWFibGU7CisJbXNvLWZvbnQtc2lnbmF0dXJlOjU1MzY3OTQ5NSAtMjE0NzQ4MzY0OCA4IDAgNjYwNDcgMDt9CisgLyogU3R5bGUgRGVmaW5pdGlvbnMgKi8KK3AuTXNvTm9ybWFsLCBsaS5Nc29Ob3JtYWwsIGRpdi5Nc29Ob3JtYWwKKwl7bXNvLXN0eWxlLXBhcmVudDoiIjsKKwltYXJnaW46MGluOworCW1hcmdpbi1ib3R0b206LjAwMDFwdDsKKwltc28tcGFnaW5hdGlvbjp3aWRvdy1vcnBoYW47CisJZm9udC1zaXplOjEyLjBwdDsKKwlmb250LWZhbWlseToiVGltZXMgTmV3IFJvbWFuIjsKKwltc28tZmFyZWFzdC1mb250LWZhbWlseToiVGltZXMgTmV3IFJvbWFuIjt9CitwCisJe21hcmdpbi1yaWdodDowaW47CisJbXNvLW1hcmdpbi10b3AtYWx0OmF1dG87CisJbXNvLW1hcmdpbi1ib3R0b20tYWx0OmF1dG87CisJbWFyZ2luLWxlZnQ6MGluOworCW1zby1wYWdpbmF0aW9uOndpZG93LW9ycGhhbjsKKwlmb250LXNpemU6MTIuMHB0OworCWZvbnQtZmFtaWx5OiJUaW1lcyBOZXcgUm9tYW4iOworCW1zby1mYXJlYXN0LWZvbnQtZmFtaWx5OiJUaW1lcyBOZXcgUm9tYW4iO30KK3AuQmFsbG9vblRleHQsIGxpLkJhbGxvb25UZXh0LCBkaXYuQmFsbG9vblRleHQKKwl7bXNvLXN0eWxlLW5hbWU6IkJhbGxvb24gVGV4dCI7CisJbWFyZ2luOjBpbjsKKwltYXJnaW4tYm90dG9tOi4wMDAxcHQ7CisJbXNvLXBhZ2luYXRpb246d2lkb3ctb3JwaGFuOworCWZvbnQtc2l6ZTo4LjBwdDsKKwlmb250LWZhbWlseTpUYWhvbWE7CisJbXNvLWZhcmVhc3QtZm9udC1mYW1pbHk6IlRpbWVzIE5ldyBSb21hbiI7fQorQHBhZ2UgU2VjdGlvbjEKKwl7c2l6ZTo4LjVpbiAxMS4waW47CisJbWFyZ2luOjEuMGluIDEuMjVpbiAxLjBpbiAxLjI1aW47CisJbXNvLWhlYWRlci1tYXJnaW46LjVpbjsKKwltc28tZm9vdGVyLW1hcmdpbjouNWluOworCW1zby1wYXBlci1zb3VyY2U6MDt9CitkaXYuU2VjdGlvbjEKKwl7cGFnZTpTZWN0aW9uMTt9CistLT4KKzwvc3R5bGU+Cis8L2hlYWQ+CisKKzxib2R5IGxhbmc9RU4tVVMgc3R5bGU9J3RhYi1pbnRlcnZhbDouNWluJz4KKworPGRpdiBjbGFzcz1TZWN0aW9uMT4KKworPHAgYWxpZ249Y2VudGVyIHN0eWxlPSd0ZXh0LWFsaWduOmNlbnRlcic+PGI+RWNsaXBzZSBQdWJsaWMgTGljZW5zZSAtIHYgMS4wPC9iPgorPC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+VEhFIEFDQ09NUEFOWUlORyBQUk9HUkFNIElTIFBST1ZJREVEIFVOREVSCitUSEUgVEVSTVMgT0YgVEhJUyBFQ0xJUFNFIFBVQkxJQyBMSUNFTlNFICgmcXVvdDtBR1JFRU1FTlQmcXVvdDspLiBBTlkgVVNFLAorUkVQUk9EVUNUSU9OIE9SIERJU1RSSUJVVElPTiBPRiBUSEUgUFJPR1JBTSBDT05TVElUVVRFUyBSRUNJUElFTlQnUyBBQ0NFUFRBTkNFCitPRiBUSElTIEFHUkVFTUVOVC48L3NwYW4+IDwvcD4KKworPHA+PGI+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPjEuIERFRklOSVRJT05TPC9zcGFuPjwvYj4gPC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+JnF1b3Q7Q29udHJpYnV0aW9uJnF1b3Q7IG1lYW5zOjwvc3Bhbj4gPC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5hKQoraW4gdGhlIGNhc2Ugb2YgdGhlIGluaXRpYWwgQ29udHJpYnV0b3IsIHRoZSBpbml0aWFsIGNvZGUgYW5kIGRvY3VtZW50YXRpb24KK2Rpc3RyaWJ1dGVkIHVuZGVyIHRoaXMgQWdyZWVtZW50LCBhbmQ8YnIgY2xlYXI9bGVmdD4KK2IpIGluIHRoZSBjYXNlIG9mIGVhY2ggc3Vic2VxdWVudCBDb250cmlidXRvcjo8L3NwYW4+PC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5pKQorY2hhbmdlcyB0byB0aGUgUHJvZ3JhbSwgYW5kPC9zcGFuPjwvcD4KKworPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+aWkpCithZGRpdGlvbnMgdG8gdGhlIFByb2dyYW07PC9zcGFuPjwvcD4KKworPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+d2hlcmUKK3N1Y2ggY2hhbmdlcyBhbmQvb3IgYWRkaXRpb25zIHRvIHRoZSBQcm9ncmFtIG9yaWdpbmF0ZSBmcm9tIGFuZCBhcmUgZGlzdHJpYnV0ZWQKK2J5IHRoYXQgcGFydGljdWxhciBDb250cmlidXRvci4gQSBDb250cmlidXRpb24gJ29yaWdpbmF0ZXMnIGZyb20gYSBDb250cmlidXRvcgoraWYgaXQgd2FzIGFkZGVkIHRvIHRoZSBQcm9ncmFtIGJ5IHN1Y2ggQ29udHJpYnV0b3IgaXRzZWxmIG9yIGFueW9uZSBhY3Rpbmcgb24KK3N1Y2ggQ29udHJpYnV0b3IncyBiZWhhbGYuIENvbnRyaWJ1dGlvbnMgZG8gbm90IGluY2x1ZGUgYWRkaXRpb25zIHRvIHRoZQorUHJvZ3JhbSB3aGljaDogKGkpIGFyZSBzZXBhcmF0ZSBtb2R1bGVzIG9mIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIGluIGNvbmp1bmN0aW9uCit3aXRoIHRoZSBQcm9ncmFtIHVuZGVyIHRoZWlyIG93biBsaWNlbnNlIGFncmVlbWVudCwgYW5kIChpaSkgYXJlIG5vdCBkZXJpdmF0aXZlCit3b3JrcyBvZiB0aGUgUHJvZ3JhbS4gPC9zcGFuPjwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPiZxdW90O0NvbnRyaWJ1dG9yJnF1b3Q7IG1lYW5zIGFueSBwZXJzb24gb3IKK2VudGl0eSB0aGF0IGRpc3RyaWJ1dGVzIHRoZSBQcm9ncmFtLjwvc3Bhbj4gPC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+JnF1b3Q7TGljZW5zZWQgUGF0ZW50cyAmcXVvdDsgbWVhbiBwYXRlbnQKK2NsYWltcyBsaWNlbnNhYmxlIGJ5IGEgQ29udHJpYnV0b3Igd2hpY2ggYXJlIG5lY2Vzc2FyaWx5IGluZnJpbmdlZCBieSB0aGUgdXNlCitvciBzYWxlIG9mIGl0cyBDb250cmlidXRpb24gYWxvbmUgb3Igd2hlbiBjb21iaW5lZCB3aXRoIHRoZSBQcm9ncmFtLiA8L3NwYW4+PC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+JnF1b3Q7UHJvZ3JhbSZxdW90OyBtZWFucyB0aGUgQ29udHJpYnV0aW9ucworZGlzdHJpYnV0ZWQgaW4gYWNjb3JkYW5jZSB3aXRoIHRoaXMgQWdyZWVtZW50Ljwvc3Bhbj4gPC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+JnF1b3Q7UmVjaXBpZW50JnF1b3Q7IG1lYW5zIGFueW9uZSB3aG8KK3JlY2VpdmVzIHRoZSBQcm9ncmFtIHVuZGVyIHRoaXMgQWdyZWVtZW50LCBpbmNsdWRpbmcgYWxsIENvbnRyaWJ1dG9ycy48L3NwYW4+IDwvcD4KKworPHA+PGI+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPjIuIEdSQU5UIE9GIFJJR0hUUzwvc3Bhbj48L2I+IDwvcD4KKworPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YSkKK1N1YmplY3QgdG8gdGhlIHRlcm1zIG9mIHRoaXMgQWdyZWVtZW50LCBlYWNoIENvbnRyaWJ1dG9yIGhlcmVieSBncmFudHMgUmVjaXBpZW50CithIG5vbi1leGNsdXNpdmUsIHdvcmxkd2lkZSwgcm95YWx0eS1mcmVlIGNvcHlyaWdodCBsaWNlbnNlIHRvPHNwYW4KK3N0eWxlPSdjb2xvcjpyZWQnPiA8L3NwYW4+cmVwcm9kdWNlLCBwcmVwYXJlIGRlcml2YXRpdmUgd29ya3Mgb2YsIHB1YmxpY2x5CitkaXNwbGF5LCBwdWJsaWNseSBwZXJmb3JtLCBkaXN0cmlidXRlIGFuZCBzdWJsaWNlbnNlIHRoZSBDb250cmlidXRpb24gb2Ygc3VjaAorQ29udHJpYnV0b3IsIGlmIGFueSwgYW5kIHN1Y2ggZGVyaXZhdGl2ZSB3b3JrcywgaW4gc291cmNlIGNvZGUgYW5kIG9iamVjdCBjb2RlCitmb3JtLjwvc3Bhbj48L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmIpCitTdWJqZWN0IHRvIHRoZSB0ZXJtcyBvZiB0aGlzIEFncmVlbWVudCwgZWFjaCBDb250cmlidXRvciBoZXJlYnkgZ3JhbnRzCitSZWNpcGllbnQgYSBub24tZXhjbHVzaXZlLCB3b3JsZHdpZGUsPHNwYW4gc3R5bGU9J2NvbG9yOmdyZWVuJz4gPC9zcGFuPnJveWFsdHktZnJlZQorcGF0ZW50IGxpY2Vuc2UgdW5kZXIgTGljZW5zZWQgUGF0ZW50cyB0byBtYWtlLCB1c2UsIHNlbGwsIG9mZmVyIHRvIHNlbGwsIGltcG9ydAorYW5kIG90aGVyd2lzZSB0cmFuc2ZlciB0aGUgQ29udHJpYnV0aW9uIG9mIHN1Y2ggQ29udHJpYnV0b3IsIGlmIGFueSwgaW4gc291cmNlCitjb2RlIGFuZCBvYmplY3QgY29kZSBmb3JtLiBUaGlzIHBhdGVudCBsaWNlbnNlIHNoYWxsIGFwcGx5IHRvIHRoZSBjb21iaW5hdGlvbgorb2YgdGhlIENvbnRyaWJ1dGlvbiBhbmQgdGhlIFByb2dyYW0gaWYsIGF0IHRoZSB0aW1lIHRoZSBDb250cmlidXRpb24gaXMgYWRkZWQKK2J5IHRoZSBDb250cmlidXRvciwgc3VjaCBhZGRpdGlvbiBvZiB0aGUgQ29udHJpYnV0aW9uIGNhdXNlcyBzdWNoIGNvbWJpbmF0aW9uCit0byBiZSBjb3ZlcmVkIGJ5IHRoZSBMaWNlbnNlZCBQYXRlbnRzLiBUaGUgcGF0ZW50IGxpY2Vuc2Ugc2hhbGwgbm90IGFwcGx5IHRvCithbnkgb3RoZXIgY29tYmluYXRpb25zIHdoaWNoIGluY2x1ZGUgdGhlIENvbnRyaWJ1dGlvbi4gTm8gaGFyZHdhcmUgcGVyIHNlIGlzCitsaWNlbnNlZCBoZXJldW5kZXIuIDwvc3Bhbj48L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmMpCitSZWNpcGllbnQgdW5kZXJzdGFuZHMgdGhhdCBhbHRob3VnaCBlYWNoIENvbnRyaWJ1dG9yIGdyYW50cyB0aGUgbGljZW5zZXMgdG8gaXRzCitDb250cmlidXRpb25zIHNldCBmb3J0aCBoZXJlaW4sIG5vIGFzc3VyYW5jZXMgYXJlIHByb3ZpZGVkIGJ5IGFueSBDb250cmlidXRvcgordGhhdCB0aGUgUHJvZ3JhbSBkb2VzIG5vdCBpbmZyaW5nZSB0aGUgcGF0ZW50IG9yIG90aGVyIGludGVsbGVjdHVhbCBwcm9wZXJ0eQorcmlnaHRzIG9mIGFueSBvdGhlciBlbnRpdHkuIEVhY2ggQ29udHJpYnV0b3IgZGlzY2xhaW1zIGFueSBsaWFiaWxpdHkgdG8gUmVjaXBpZW50Citmb3IgY2xhaW1zIGJyb3VnaHQgYnkgYW55IG90aGVyIGVudGl0eSBiYXNlZCBvbiBpbmZyaW5nZW1lbnQgb2YgaW50ZWxsZWN0dWFsCitwcm9wZXJ0eSByaWdodHMgb3Igb3RoZXJ3aXNlLiBBcyBhIGNvbmRpdGlvbiB0byBleGVyY2lzaW5nIHRoZSByaWdodHMgYW5kCitsaWNlbnNlcyBncmFudGVkIGhlcmV1bmRlciwgZWFjaCBSZWNpcGllbnQgaGVyZWJ5IGFzc3VtZXMgc29sZSByZXNwb25zaWJpbGl0eQordG8gc2VjdXJlIGFueSBvdGhlciBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIG5lZWRlZCwgaWYgYW55LiBGb3IgZXhhbXBsZSwKK2lmIGEgdGhpcmQgcGFydHkgcGF0ZW50IGxpY2Vuc2UgaXMgcmVxdWlyZWQgdG8gYWxsb3cgUmVjaXBpZW50IHRvIGRpc3RyaWJ1dGUKK3RoZSBQcm9ncmFtLCBpdCBpcyBSZWNpcGllbnQncyByZXNwb25zaWJpbGl0eSB0byBhY3F1aXJlIHRoYXQgbGljZW5zZSBiZWZvcmUKK2Rpc3RyaWJ1dGluZyB0aGUgUHJvZ3JhbS48L3NwYW4+PC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5kKQorRWFjaCBDb250cmlidXRvciByZXByZXNlbnRzIHRoYXQgdG8gaXRzIGtub3dsZWRnZSBpdCBoYXMgc3VmZmljaWVudCBjb3B5cmlnaHQKK3JpZ2h0cyBpbiBpdHMgQ29udHJpYnV0aW9uLCBpZiBhbnksIHRvIGdyYW50IHRoZSBjb3B5cmlnaHQgbGljZW5zZSBzZXQgZm9ydGggaW4KK3RoaXMgQWdyZWVtZW50LiA8L3NwYW4+PC9wPgorCis8cD48Yj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+My4gUkVRVUlSRU1FTlRTPC9zcGFuPjwvYj4gPC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+QSBDb250cmlidXRvciBtYXkgY2hvb3NlIHRvIGRpc3RyaWJ1dGUgdGhlCitQcm9ncmFtIGluIG9iamVjdCBjb2RlIGZvcm0gdW5kZXIgaXRzIG93biBsaWNlbnNlIGFncmVlbWVudCwgcHJvdmlkZWQgdGhhdDo8L3NwYW4+Cis8L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmEpCitpdCBjb21wbGllcyB3aXRoIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGlzIEFncmVlbWVudDsgYW5kPC9zcGFuPjwvcD4KKworPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YikKK2l0cyBsaWNlbnNlIGFncmVlbWVudDo8L3NwYW4+PC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5pKQorZWZmZWN0aXZlbHkgZGlzY2xhaW1zIG9uIGJlaGFsZiBvZiBhbGwgQ29udHJpYnV0b3JzIGFsbCB3YXJyYW50aWVzIGFuZAorY29uZGl0aW9ucywgZXhwcmVzcyBhbmQgaW1wbGllZCwgaW5jbHVkaW5nIHdhcnJhbnRpZXMgb3IgY29uZGl0aW9ucyBvZiB0aXRsZQorYW5kIG5vbi1pbmZyaW5nZW1lbnQsIGFuZCBpbXBsaWVkIHdhcnJhbnRpZXMgb3IgY29uZGl0aW9ucyBvZiBtZXJjaGFudGFiaWxpdHkKK2FuZCBmaXRuZXNzIGZvciBhIHBhcnRpY3VsYXIgcHVycG9zZTsgPC9zcGFuPjwvcD4KKworPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+aWkpCitlZmZlY3RpdmVseSBleGNsdWRlcyBvbiBiZWhhbGYgb2YgYWxsIENvbnRyaWJ1dG9ycyBhbGwgbGlhYmlsaXR5IGZvciBkYW1hZ2VzLAoraW5jbHVkaW5nIGRpcmVjdCwgaW5kaXJlY3QsIHNwZWNpYWwsIGluY2lkZW50YWwgYW5kIGNvbnNlcXVlbnRpYWwgZGFtYWdlcywgc3VjaAorYXMgbG9zdCBwcm9maXRzOyA8L3NwYW4+PC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5paWkpCitzdGF0ZXMgdGhhdCBhbnkgcHJvdmlzaW9ucyB3aGljaCBkaWZmZXIgZnJvbSB0aGlzIEFncmVlbWVudCBhcmUgb2ZmZXJlZCBieSB0aGF0CitDb250cmlidXRvciBhbG9uZSBhbmQgbm90IGJ5IGFueSBvdGhlciBwYXJ0eTsgYW5kPC9zcGFuPjwvcD4KKworPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+aXYpCitzdGF0ZXMgdGhhdCBzb3VyY2UgY29kZSBmb3IgdGhlIFByb2dyYW0gaXMgYXZhaWxhYmxlIGZyb20gc3VjaCBDb250cmlidXRvciwgYW5kCitpbmZvcm1zIGxpY2Vuc2VlcyBob3cgdG8gb2J0YWluIGl0IGluIGEgcmVhc29uYWJsZSBtYW5uZXIgb24gb3IgdGhyb3VnaCBhCittZWRpdW0gY3VzdG9tYXJpbHkgdXNlZCBmb3Igc29mdHdhcmUgZXhjaGFuZ2UuPHNwYW4gc3R5bGU9J2NvbG9yOmJsdWUnPiA8L3NwYW4+PC9zcGFuPjwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPldoZW4gdGhlIFByb2dyYW0gaXMgbWFkZSBhdmFpbGFibGUgaW4gc291cmNlCitjb2RlIGZvcm06PC9zcGFuPiA8L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmEpCitpdCBtdXN0IGJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoaXMgQWdyZWVtZW50OyBhbmQgPC9zcGFuPjwvcD4KKworPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YikgYQorY29weSBvZiB0aGlzIEFncmVlbWVudCBtdXN0IGJlIGluY2x1ZGVkIHdpdGggZWFjaCBjb3B5IG9mIHRoZSBQcm9ncmFtLiA8L3NwYW4+PC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+Q29udHJpYnV0b3JzIG1heSBub3QgcmVtb3ZlIG9yIGFsdGVyIGFueQorY29weXJpZ2h0IG5vdGljZXMgY29udGFpbmVkIHdpdGhpbiB0aGUgUHJvZ3JhbS4gPC9zcGFuPjwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkVhY2ggQ29udHJpYnV0b3IgbXVzdCBpZGVudGlmeSBpdHNlbGYgYXMgdGhlCitvcmlnaW5hdG9yIG9mIGl0cyBDb250cmlidXRpb24sIGlmIGFueSwgaW4gYSBtYW5uZXIgdGhhdCByZWFzb25hYmx5IGFsbG93cworc3Vic2VxdWVudCBSZWNpcGllbnRzIHRvIGlkZW50aWZ5IHRoZSBvcmlnaW5hdG9yIG9mIHRoZSBDb250cmlidXRpb24uIDwvc3Bhbj48L3A+CisKKzxwPjxiPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz40LiBDT01NRVJDSUFMIERJU1RSSUJVVElPTjwvc3Bhbj48L2I+IDwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkNvbW1lcmNpYWwgZGlzdHJpYnV0b3JzIG9mIHNvZnR3YXJlIG1heQorYWNjZXB0IGNlcnRhaW4gcmVzcG9uc2liaWxpdGllcyB3aXRoIHJlc3BlY3QgdG8gZW5kIHVzZXJzLCBidXNpbmVzcyBwYXJ0bmVycworYW5kIHRoZSBsaWtlLiBXaGlsZSB0aGlzIGxpY2Vuc2UgaXMgaW50ZW5kZWQgdG8gZmFjaWxpdGF0ZSB0aGUgY29tbWVyY2lhbCB1c2UKK29mIHRoZSBQcm9ncmFtLCB0aGUgQ29udHJpYnV0b3Igd2hvIGluY2x1ZGVzIHRoZSBQcm9ncmFtIGluIGEgY29tbWVyY2lhbAorcHJvZHVjdCBvZmZlcmluZyBzaG91bGQgZG8gc28gaW4gYSBtYW5uZXIgd2hpY2ggZG9lcyBub3QgY3JlYXRlIHBvdGVudGlhbAorbGlhYmlsaXR5IGZvciBvdGhlciBDb250cmlidXRvcnMuIFRoZXJlZm9yZSwgaWYgYSBDb250cmlidXRvciBpbmNsdWRlcyB0aGUKK1Byb2dyYW0gaW4gYSBjb21tZXJjaWFsIHByb2R1Y3Qgb2ZmZXJpbmcsIHN1Y2ggQ29udHJpYnV0b3IgKCZxdW90O0NvbW1lcmNpYWwKK0NvbnRyaWJ1dG9yJnF1b3Q7KSBoZXJlYnkgYWdyZWVzIHRvIGRlZmVuZCBhbmQgaW5kZW1uaWZ5IGV2ZXJ5IG90aGVyCitDb250cmlidXRvciAoJnF1b3Q7SW5kZW1uaWZpZWQgQ29udHJpYnV0b3ImcXVvdDspIGFnYWluc3QgYW55IGxvc3NlcywgZGFtYWdlcyBhbmQKK2Nvc3RzIChjb2xsZWN0aXZlbHkgJnF1b3Q7TG9zc2VzJnF1b3Q7KSBhcmlzaW5nIGZyb20gY2xhaW1zLCBsYXdzdWl0cyBhbmQgb3RoZXIKK2xlZ2FsIGFjdGlvbnMgYnJvdWdodCBieSBhIHRoaXJkIHBhcnR5IGFnYWluc3QgdGhlIEluZGVtbmlmaWVkIENvbnRyaWJ1dG9yIHRvCit0aGUgZXh0ZW50IGNhdXNlZCBieSB0aGUgYWN0cyBvciBvbWlzc2lvbnMgb2Ygc3VjaCBDb21tZXJjaWFsIENvbnRyaWJ1dG9yIGluCitjb25uZWN0aW9uIHdpdGggaXRzIGRpc3RyaWJ1dGlvbiBvZiB0aGUgUHJvZ3JhbSBpbiBhIGNvbW1lcmNpYWwgcHJvZHVjdAorb2ZmZXJpbmcuIFRoZSBvYmxpZ2F0aW9ucyBpbiB0aGlzIHNlY3Rpb24gZG8gbm90IGFwcGx5IHRvIGFueSBjbGFpbXMgb3IgTG9zc2VzCityZWxhdGluZyB0byBhbnkgYWN0dWFsIG9yIGFsbGVnZWQgaW50ZWxsZWN0dWFsIHByb3BlcnR5IGluZnJpbmdlbWVudC4gSW4gb3JkZXIKK3RvIHF1YWxpZnksIGFuIEluZGVtbmlmaWVkIENvbnRyaWJ1dG9yIG11c3Q6IGEpIHByb21wdGx5IG5vdGlmeSB0aGUgQ29tbWVyY2lhbAorQ29udHJpYnV0b3IgaW4gd3JpdGluZyBvZiBzdWNoIGNsYWltLCBhbmQgYikgYWxsb3cgdGhlIENvbW1lcmNpYWwgQ29udHJpYnV0b3IKK3RvIGNvbnRyb2wsIGFuZCBjb29wZXJhdGUgd2l0aCB0aGUgQ29tbWVyY2lhbCBDb250cmlidXRvciBpbiwgdGhlIGRlZmVuc2UgYW5kCithbnkgcmVsYXRlZCBzZXR0bGVtZW50IG5lZ290aWF0aW9ucy4gVGhlIEluZGVtbmlmaWVkIENvbnRyaWJ1dG9yIG1heSBwYXJ0aWNpcGF0ZQoraW4gYW55IHN1Y2ggY2xhaW0gYXQgaXRzIG93biBleHBlbnNlLjwvc3Bhbj4gPC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+Rm9yIGV4YW1wbGUsIGEgQ29udHJpYnV0b3IgbWlnaHQgaW5jbHVkZSB0aGUKK1Byb2dyYW0gaW4gYSBjb21tZXJjaWFsIHByb2R1Y3Qgb2ZmZXJpbmcsIFByb2R1Y3QgWC4gVGhhdCBDb250cmlidXRvciBpcyB0aGVuIGEKK0NvbW1lcmNpYWwgQ29udHJpYnV0b3IuIElmIHRoYXQgQ29tbWVyY2lhbCBDb250cmlidXRvciB0aGVuIG1ha2VzIHBlcmZvcm1hbmNlCitjbGFpbXMsIG9yIG9mZmVycyB3YXJyYW50aWVzIHJlbGF0ZWQgdG8gUHJvZHVjdCBYLCB0aG9zZSBwZXJmb3JtYW5jZSBjbGFpbXMgYW5kCit3YXJyYW50aWVzIGFyZSBzdWNoIENvbW1lcmNpYWwgQ29udHJpYnV0b3IncyByZXNwb25zaWJpbGl0eSBhbG9uZS4gVW5kZXIgdGhpcworc2VjdGlvbiwgdGhlIENvbW1lcmNpYWwgQ29udHJpYnV0b3Igd291bGQgaGF2ZSB0byBkZWZlbmQgY2xhaW1zIGFnYWluc3QgdGhlCitvdGhlciBDb250cmlidXRvcnMgcmVsYXRlZCB0byB0aG9zZSBwZXJmb3JtYW5jZSBjbGFpbXMgYW5kIHdhcnJhbnRpZXMsIGFuZCBpZiBhCitjb3VydCByZXF1aXJlcyBhbnkgb3RoZXIgQ29udHJpYnV0b3IgdG8gcGF5IGFueSBkYW1hZ2VzIGFzIGEgcmVzdWx0LCB0aGUKK0NvbW1lcmNpYWwgQ29udHJpYnV0b3IgbXVzdCBwYXkgdGhvc2UgZGFtYWdlcy48L3NwYW4+IDwvcD4KKworPHA+PGI+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPjUuIE5PIFdBUlJBTlRZPC9zcGFuPjwvYj4gPC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+RVhDRVBUIEFTIEVYUFJFU1NMWSBTRVQgRk9SVEggSU4gVEhJUworQUdSRUVNRU5ULCBUSEUgUFJPR1JBTSBJUyBQUk9WSURFRCBPTiBBTiAmcXVvdDtBUyBJUyZxdW90OyBCQVNJUywgV0lUSE9VVAorV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBFSVRIRVIgRVhQUkVTUyBPUiBJTVBMSUVEIElOQ0xVRElORywKK1dJVEhPVVQgTElNSVRBVElPTiwgQU5ZIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBUSVRMRSwgTk9OLUlORlJJTkdFTUVOVCwKK01FUkNIQU5UQUJJTElUWSBPUiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gRWFjaCBSZWNpcGllbnQgaXMgc29sZWx5CityZXNwb25zaWJsZSBmb3IgZGV0ZXJtaW5pbmcgdGhlIGFwcHJvcHJpYXRlbmVzcyBvZiB1c2luZyBhbmQgZGlzdHJpYnV0aW5nIHRoZQorUHJvZ3JhbSBhbmQgYXNzdW1lcyBhbGwgcmlza3MgYXNzb2NpYXRlZCB3aXRoIGl0cyBleGVyY2lzZSBvZiByaWdodHMgdW5kZXIgdGhpcworQWdyZWVtZW50ICwgaW5jbHVkaW5nIGJ1dCBub3QgbGltaXRlZCB0byB0aGUgcmlza3MgYW5kIGNvc3RzIG9mIHByb2dyYW0gZXJyb3JzLAorY29tcGxpYW5jZSB3aXRoIGFwcGxpY2FibGUgbGF3cywgZGFtYWdlIHRvIG9yIGxvc3Mgb2YgZGF0YSwgcHJvZ3JhbXMgb3IKK2VxdWlwbWVudCwgYW5kIHVuYXZhaWxhYmlsaXR5IG9yIGludGVycnVwdGlvbiBvZiBvcGVyYXRpb25zLiA8L3NwYW4+PC9wPgorCis8cD48Yj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+Ni4gRElTQ0xBSU1FUiBPRiBMSUFCSUxJVFk8L3NwYW4+PC9iPiA8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5FWENFUFQgQVMgRVhQUkVTU0xZIFNFVCBGT1JUSCBJTiBUSElTCitBR1JFRU1FTlQsIE5FSVRIRVIgUkVDSVBJRU5UIE5PUiBBTlkgQ09OVFJJQlVUT1JTIFNIQUxMIEhBVkUgQU5ZIExJQUJJTElUWSBGT1IKK0FOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworKElOQ0xVRElORyBXSVRIT1VUIExJTUlUQVRJT04gTE9TVCBQUk9GSVRTKSwgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKK09GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HCitORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9SIERJU1RSSUJVVElPTiBPRgorVEhFIFBST0dSQU0gT1IgVEhFIEVYRVJDSVNFIE9GIEFOWSBSSUdIVFMgR1JBTlRFRCBIRVJFVU5ERVIsIEVWRU4gSUYgQURWSVNFRCBPRgorVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFUy48L3NwYW4+IDwvcD4KKworPHA+PGI+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPjcuIEdFTkVSQUw8L3NwYW4+PC9iPiA8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5JZiBhbnkgcHJvdmlzaW9uIG9mIHRoaXMgQWdyZWVtZW50IGlzIGludmFsaWQKK29yIHVuZW5mb3JjZWFibGUgdW5kZXIgYXBwbGljYWJsZSBsYXcsIGl0IHNoYWxsIG5vdCBhZmZlY3QgdGhlIHZhbGlkaXR5IG9yCitlbmZvcmNlYWJpbGl0eSBvZiB0aGUgcmVtYWluZGVyIG9mIHRoZSB0ZXJtcyBvZiB0aGlzIEFncmVlbWVudCwgYW5kIHdpdGhvdXQKK2Z1cnRoZXIgYWN0aW9uIGJ5IHRoZSBwYXJ0aWVzIGhlcmV0bywgc3VjaCBwcm92aXNpb24gc2hhbGwgYmUgcmVmb3JtZWQgdG8gdGhlCittaW5pbXVtIGV4dGVudCBuZWNlc3NhcnkgdG8gbWFrZSBzdWNoIHByb3Zpc2lvbiB2YWxpZCBhbmQgZW5mb3JjZWFibGUuPC9zcGFuPiA8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5JZiBSZWNpcGllbnQgaW5zdGl0dXRlcyBwYXRlbnQgbGl0aWdhdGlvbgorYWdhaW5zdCBhbnkgZW50aXR5IChpbmNsdWRpbmcgYSBjcm9zcy1jbGFpbSBvciBjb3VudGVyY2xhaW0gaW4gYSBsYXdzdWl0KQorYWxsZWdpbmcgdGhhdCB0aGUgUHJvZ3JhbSBpdHNlbGYgKGV4Y2x1ZGluZyBjb21iaW5hdGlvbnMgb2YgdGhlIFByb2dyYW0gd2l0aAorb3RoZXIgc29mdHdhcmUgb3IgaGFyZHdhcmUpIGluZnJpbmdlcyBzdWNoIFJlY2lwaWVudCdzIHBhdGVudChzKSwgdGhlbiBzdWNoCitSZWNpcGllbnQncyByaWdodHMgZ3JhbnRlZCB1bmRlciBTZWN0aW9uIDIoYikgc2hhbGwgdGVybWluYXRlIGFzIG9mIHRoZSBkYXRlCitzdWNoIGxpdGlnYXRpb24gaXMgZmlsZWQuIDwvc3Bhbj48L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5BbGwgUmVjaXBpZW50J3MgcmlnaHRzIHVuZGVyIHRoaXMgQWdyZWVtZW50CitzaGFsbCB0ZXJtaW5hdGUgaWYgaXQgZmFpbHMgdG8gY29tcGx5IHdpdGggYW55IG9mIHRoZSBtYXRlcmlhbCB0ZXJtcyBvcgorY29uZGl0aW9ucyBvZiB0aGlzIEFncmVlbWVudCBhbmQgZG9lcyBub3QgY3VyZSBzdWNoIGZhaWx1cmUgaW4gYSByZWFzb25hYmxlCitwZXJpb2Qgb2YgdGltZSBhZnRlciBiZWNvbWluZyBhd2FyZSBvZiBzdWNoIG5vbmNvbXBsaWFuY2UuIElmIGFsbCBSZWNpcGllbnQncworcmlnaHRzIHVuZGVyIHRoaXMgQWdyZWVtZW50IHRlcm1pbmF0ZSwgUmVjaXBpZW50IGFncmVlcyB0byBjZWFzZSB1c2UgYW5kCitkaXN0cmlidXRpb24gb2YgdGhlIFByb2dyYW0gYXMgc29vbiBhcyByZWFzb25hYmx5IHByYWN0aWNhYmxlLiBIb3dldmVyLAorUmVjaXBpZW50J3Mgb2JsaWdhdGlvbnMgdW5kZXIgdGhpcyBBZ3JlZW1lbnQgYW5kIGFueSBsaWNlbnNlcyBncmFudGVkIGJ5CitSZWNpcGllbnQgcmVsYXRpbmcgdG8gdGhlIFByb2dyYW0gc2hhbGwgY29udGludWUgYW5kIHN1cnZpdmUuIDwvc3Bhbj48L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5FdmVyeW9uZSBpcyBwZXJtaXR0ZWQgdG8gY29weSBhbmQgZGlzdHJpYnV0ZQorY29waWVzIG9mIHRoaXMgQWdyZWVtZW50LCBidXQgaW4gb3JkZXIgdG8gYXZvaWQgaW5jb25zaXN0ZW5jeSB0aGUgQWdyZWVtZW50IGlzCitjb3B5cmlnaHRlZCBhbmQgbWF5IG9ubHkgYmUgbW9kaWZpZWQgaW4gdGhlIGZvbGxvd2luZyBtYW5uZXIuIFRoZSBBZ3JlZW1lbnQKK1N0ZXdhcmQgcmVzZXJ2ZXMgdGhlIHJpZ2h0IHRvIHB1Ymxpc2ggbmV3IHZlcnNpb25zIChpbmNsdWRpbmcgcmV2aXNpb25zKSBvZgordGhpcyBBZ3JlZW1lbnQgZnJvbSB0aW1lIHRvIHRpbWUuIE5vIG9uZSBvdGhlciB0aGFuIHRoZSBBZ3JlZW1lbnQgU3Rld2FyZCBoYXMKK3RoZSByaWdodCB0byBtb2RpZnkgdGhpcyBBZ3JlZW1lbnQuIFRoZSBFY2xpcHNlIEZvdW5kYXRpb24gaXMgdGhlIGluaXRpYWwKK0FncmVlbWVudCBTdGV3YXJkLiBUaGUgRWNsaXBzZSBGb3VuZGF0aW9uIG1heSBhc3NpZ24gdGhlIHJlc3BvbnNpYmlsaXR5IHRvCitzZXJ2ZSBhcyB0aGUgQWdyZWVtZW50IFN0ZXdhcmQgdG8gYSBzdWl0YWJsZSBzZXBhcmF0ZSBlbnRpdHkuIEVhY2ggbmV3IHZlcnNpb24KK29mIHRoZSBBZ3JlZW1lbnQgd2lsbCBiZSBnaXZlbiBhIGRpc3Rpbmd1aXNoaW5nIHZlcnNpb24gbnVtYmVyLiBUaGUgUHJvZ3JhbQorKGluY2x1ZGluZyBDb250cmlidXRpb25zKSBtYXkgYWx3YXlzIGJlIGRpc3RyaWJ1dGVkIHN1YmplY3QgdG8gdGhlIHZlcnNpb24gb2YKK3RoZSBBZ3JlZW1lbnQgdW5kZXIgd2hpY2ggaXQgd2FzIHJlY2VpdmVkLiBJbiBhZGRpdGlvbiwgYWZ0ZXIgYSBuZXcgdmVyc2lvbiBvZgordGhlIEFncmVlbWVudCBpcyBwdWJsaXNoZWQsIENvbnRyaWJ1dG9yIG1heSBlbGVjdCB0byBkaXN0cmlidXRlIHRoZSBQcm9ncmFtCisoaW5jbHVkaW5nIGl0cyBDb250cmlidXRpb25zKSB1bmRlciB0aGUgbmV3IHZlcnNpb24uIEV4Y2VwdCBhcyBleHByZXNzbHkgc3RhdGVkCitpbiBTZWN0aW9ucyAyKGEpIGFuZCAyKGIpIGFib3ZlLCBSZWNpcGllbnQgcmVjZWl2ZXMgbm8gcmlnaHRzIG9yIGxpY2Vuc2VzIHRvCit0aGUgaW50ZWxsZWN0dWFsIHByb3BlcnR5IG9mIGFueSBDb250cmlidXRvciB1bmRlciB0aGlzIEFncmVlbWVudCwgd2hldGhlcgorZXhwcmVzc2x5LCBieSBpbXBsaWNhdGlvbiwgZXN0b3BwZWwgb3Igb3RoZXJ3aXNlLiBBbGwgcmlnaHRzIGluIHRoZSBQcm9ncmFtIG5vdAorZXhwcmVzc2x5IGdyYW50ZWQgdW5kZXIgdGhpcyBBZ3JlZW1lbnQgYXJlIHJlc2VydmVkLjwvc3Bhbj4gPC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+VGhpcyBBZ3JlZW1lbnQgaXMgZ292ZXJuZWQgYnkgdGhlIGxhd3Mgb2YgdGhlCitTdGF0ZSBvZiBOZXcgWW9yayBhbmQgdGhlIGludGVsbGVjdHVhbCBwcm9wZXJ0eSBsYXdzIG9mIHRoZSBVbml0ZWQgU3RhdGVzIG9mCitBbWVyaWNhLiBObyBwYXJ0eSB0byB0aGlzIEFncmVlbWVudCB3aWxsIGJyaW5nIGEgbGVnYWwgYWN0aW9uIHVuZGVyIHRoaXMKK0FncmVlbWVudCBtb3JlIHRoYW4gb25lIHllYXIgYWZ0ZXIgdGhlIGNhdXNlIG9mIGFjdGlvbiBhcm9zZS4gRWFjaCBwYXJ0eSB3YWl2ZXMKK2l0cyByaWdodHMgdG8gYSBqdXJ5IHRyaWFsIGluIGFueSByZXN1bHRpbmcgbGl0aWdhdGlvbi48L3NwYW4+IDwvcD4KKworPHAgY2xhc3M9TXNvTm9ybWFsPjwhW2lmICFzdXBwb3J0RW1wdHlQYXJhc10+Jm5ic3A7PCFbZW5kaWZdPjxvOnA+PC9vOnA+PC9wPgorCis8L2Rpdj4KKworPC9ib2R5PgorCis8L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLmdlL2V4dGxpYi9zZXJ2bGV0LWFwaS5qYXIgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkuZ2UvZXh0bGliL3NlcnZsZXQtYXBpLmphcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MzE4NmY2Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLmdlL2V4dGxpYi9zZXJ2bGV0LWFwaS5qYXIKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLmdlL2ljb25zL2dlLmdpZiBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5nZS9pY29ucy9nZS5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTQxZmE1MQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5nZS9pY29ucy9nZS5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLmdlL25vdGljZS5odG1sIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLmdlL25vdGljZS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM2YWY5NjYKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkuZ2Uvbm90aWNlLmh0bWwKQEAgLTAsMCArMSw3OSBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMC8vRU4iPgorPGh0bWw+Cis8aGVhZD4KKzxtZXRhIGh0dHAtZXF1aXY9Q29udGVudC1UeXBlIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1pc28tODg1OS0xIj4KKzx0aXRsZT5FY2xpcHNlLm9yZyBTb2Z0d2FyZSBVc2VyIEFncmVlbWVudDwvdGl0bGU+Cis8L2hlYWQ+CisKKzxib2R5IGxhbmc9IkVOLVVTIiBsaW5rPWJsdWUgdmxpbms9cHVycGxlPgorPGgyPkVjbGlwc2UgRm91bmRhdGlvbiBTb2Z0d2FyZSBVc2VyIEFncmVlbWVudDwvaDI+Cis8cD5NYXJjaCAxNywgMjAwNTwvcD4KKworPGgzPlVzYWdlIE9mIENvbnRlbnQ8L2gzPgorCis8cD5USEUgRUNMSVBTRSBGT1VOREFUSU9OIE1BS0VTIEFWQUlMQUJMRSBTT0ZUV0FSRSwgRE9DVU1FTlRBVElPTiwgSU5GT1JNQVRJT04gQU5EL09SIE9USEVSIE1BVEVSSUFMUyBGT1IgT1BFTiBTT1VSQ0UgUFJPSkVDVFMKKyAgIChDT0xMRUNUSVZFTFkgJnF1b3Q7Q09OVEVOVCZxdW90OykuICBVU0UgT0YgVEhFIENPTlRFTlQgSVMgR09WRVJORUQgQlkgVEhFIFRFUk1TIEFORCBDT05ESVRJT05TIE9GIFRISVMgQUdSRUVNRU5UIEFORC9PUiBUSEUgVEVSTVMgQU5ECisgICBDT05ESVRJT05TIE9GIExJQ0VOU0UgQUdSRUVNRU5UUyBPUiBOT1RJQ0VTIElORElDQVRFRCBPUiBSRUZFUkVOQ0VEIEJFTE9XLiAgQlkgVVNJTkcgVEhFIENPTlRFTlQsIFlPVSBBR1JFRSBUSEFUIFlPVVIgVVNFCisgICBPRiBUSEUgQ09OVEVOVCBJUyBHT1ZFUk5FRCBCWSBUSElTIEFHUkVFTUVOVCBBTkQvT1IgVEhFIFRFUk1TIEFORCBDT05ESVRJT05TIE9GIEFOWSBBUFBMSUNBQkxFIExJQ0VOU0UgQUdSRUVNRU5UUyBPUgorICAgTk9USUNFUyBJTkRJQ0FURUQgT1IgUkVGRVJFTkNFRCBCRUxPVy4gIElGIFlPVSBETyBOT1QgQUdSRUUgVE8gVEhFIFRFUk1TIEFORCBDT05ESVRJT05TIE9GIFRISVMgQUdSRUVNRU5UIEFORCBUSEUgVEVSTVMgQU5ECisgICBDT05ESVRJT05TIE9GIEFOWSBBUFBMSUNBQkxFIExJQ0VOU0UgQUdSRUVNRU5UUyBPUiBOT1RJQ0VTIElORElDQVRFRCBPUiBSRUZFUkVOQ0VEIEJFTE9XLCBUSEVOIFlPVSBNQVkgTk9UIFVTRSBUSEUgQ09OVEVOVC48L3A+CisgICAKKzxoMz5BcHBsaWNhYmxlIExpY2Vuc2VzPC9oMz4gICAKKyAgIAorPHA+VW5sZXNzIG90aGVyd2lzZSBpbmRpY2F0ZWQsIGFsbCBDb250ZW50IG1hZGUgYXZhaWxhYmxlIGJ5IHRoZSBFY2xpcHNlIEZvdW5kYXRpb24gaXMgcHJvdmlkZWQgdG8geW91IHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMAorICAgKCZxdW90O0VQTCZxdW90OykuICBBIGNvcHkgb2YgdGhlIEVQTCBpcyBwcm92aWRlZCB3aXRoIHRoaXMgQ29udGVudCBhbmQgaXMgYWxzbyBhdmFpbGFibGUgYXQgPGEgaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwiPmh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sPC9hPi4KKyAgIEZvciBwdXJwb3NlcyBvZiB0aGUgRVBMLCAmcXVvdDtQcm9ncmFtJnF1b3Q7IHdpbGwgbWVhbiB0aGUgQ29udGVudC48L3A+CisKKzxwPkNvbnRlbnQgaW5jbHVkZXMsIGJ1dCBpcyBub3QgbGltaXRlZCB0bywgc291cmNlIGNvZGUsIG9iamVjdCBjb2RlLCBkb2N1bWVudGF0aW9uIGFuZCBvdGhlciBmaWxlcyBtYWludGFpbmVkIGluIHRoZSBFY2xpcHNlLm9yZyBDVlMgcmVwb3NpdG9yeSAoJnF1b3Q7UmVwb3NpdG9yeSZxdW90OykgaW4gQ1ZTCisgICBtb2R1bGVzICgmcXVvdDtNb2R1bGVzJnF1b3Q7KSBhbmQgbWFkZSBhdmFpbGFibGUgYXMgZG93bmxvYWRhYmxlIGFyY2hpdmVzICgmcXVvdDtEb3dubG9hZHMmcXVvdDspLjwvcD4KKyAgIAorPHVsPgorCTxsaT5Db250ZW50IG1heSBiZSBzdHJ1Y3R1cmVkIGFuZCBwYWNrYWdlZCBpbnRvIG1vZHVsZXMgdG8gZmFjaWxpdGF0ZSBkZWxpdmVyaW5nLCBleHRlbmRpbmcsIGFuZCB1cGdyYWRpbmcgdGhlIENvbnRlbnQuICBUeXBpY2FsIG1vZHVsZXMgbWF5IGluY2x1ZGUgcGx1Zy1pbnMgKCZxdW90O1BsdWctaW5zJnF1b3Q7KSwgcGx1Zy1pbiBmcmFnbWVudHMgKCZxdW90O0ZyYWdtZW50cyZxdW90OyksIGFuZCBmZWF0dXJlcyAoJnF1b3Q7RmVhdHVyZXMmcXVvdDspLjwvbGk+CisJPGxpPkVhY2ggUGx1Zy1pbiBvciBGcmFnbWVudCBtYXkgYmUgcGFja2FnZWQgYXMgYSBzdWItZGlyZWN0b3J5IG9yIEpBUiAoSmF2YSZ0cmFkZTsgQVJjaGl2ZSkgaW4gYSBkaXJlY3RvcnkgbmFtZWQgJnF1b3Q7cGx1Z2lucyZxdW90Oy48L2xpPgorCTxsaT5BIEZlYXR1cmUgaXMgYSBidW5kbGUgb2Ygb25lIG9yIG1vcmUgUGx1Zy1pbnMgYW5kL29yIEZyYWdtZW50cyBhbmQgYXNzb2NpYXRlZCBtYXRlcmlhbC4gIEVhY2ggRmVhdHVyZSBtYXkgYmUgcGFja2FnZWQgYXMgYSBzdWItZGlyZWN0b3J5IGluIGEgZGlyZWN0b3J5IG5hbWVkICZxdW90O2ZlYXR1cmVzJnF1b3Q7LiAgV2l0aGluIGEgRmVhdHVyZSwgZmlsZXMgbmFtZWQgJnF1b3Q7ZmVhdHVyZS54bWwmcXVvdDsgbWF5IGNvbnRhaW4gYSBsaXN0IG9mIHRoZSBuYW1lcyBhbmQgdmVyc2lvbiBudW1iZXJzIG9mIHRoZSBQbHVnLWlucworICAgICAgYW5kL29yIEZyYWdtZW50cyBhc3NvY2lhdGVkIHdpdGggdGhhdCBGZWF0dXJlLjwvbGk+CisJPGxpPkZlYXR1cmVzIG1heSBhbHNvIGluY2x1ZGUgb3RoZXIgRmVhdHVyZXMgKCZxdW90O0luY2x1ZGVkIEZlYXR1cmVzJnF1b3Q7KS4gV2l0aGluIGEgRmVhdHVyZSwgZmlsZXMgbmFtZWQgJnF1b3Q7ZmVhdHVyZS54bWwmcXVvdDsgbWF5IGNvbnRhaW4gYSBsaXN0IG9mIHRoZSBuYW1lcyBhbmQgdmVyc2lvbiBudW1iZXJzIG9mIEluY2x1ZGVkIEZlYXR1cmVzLjwvbGk+Cis8L3VsPiAgIAorIAorPHA+VGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIGdvdmVybmluZyBQbHVnLWlucyBhbmQgRnJhZ21lbnRzIHNob3VsZCBiZSBjb250YWluZWQgaW4gZmlsZXMgbmFtZWQgJnF1b3Q7YWJvdXQuaHRtbCZxdW90OyAoJnF1b3Q7QWJvdXRzJnF1b3Q7KS4gVGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIGdvdmVybmluZyBGZWF0dXJlcyBhbmQKK0luY2x1ZGVkIEZlYXR1cmVzIHNob3VsZCBiZSBjb250YWluZWQgaW4gZmlsZXMgbmFtZWQgJnF1b3Q7bGljZW5zZS5odG1sJnF1b3Q7ICgmcXVvdDtGZWF0dXJlIExpY2Vuc2VzJnF1b3Q7KS4gIEFib3V0cyBhbmQgRmVhdHVyZSBMaWNlbnNlcyBtYXkgYmUgbG9jYXRlZCBpbiBhbnkgZGlyZWN0b3J5IG9mIGEgRG93bmxvYWQgb3IgTW9kdWxlCitpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0byB0aGUgZm9sbG93aW5nIGxvY2F0aW9uczo8L3A+CisKKzx1bD4KKwk8bGk+VGhlIHRvcC1sZXZlbCAocm9vdCkgZGlyZWN0b3J5PC9saT4KKwk8bGk+UGx1Zy1pbiBhbmQgRnJhZ21lbnQgZGlyZWN0b3JpZXM8L2xpPgorCTxsaT5JbnNpZGUgUGx1Zy1pbnMgYW5kIEZyYWdtZW50cyBwYWNrYWdlZCBhcyBKQVJzPC9saT4KKwk8bGk+U3ViLWRpcmVjdG9yaWVzIG9mIHRoZSBkaXJlY3RvcnkgbmFtZWQgJnF1b3Q7c3JjJnF1b3Q7IG9mIGNlcnRhaW4gUGx1Zy1pbnM8L2xpPgorCTxsaT5GZWF0dXJlIGRpcmVjdG9yaWVzPC9saT4KKzwvdWw+CisJCQorPHA+Tm90ZTogaWYgYSBGZWF0dXJlIG1hZGUgYXZhaWxhYmxlIGJ5IHRoZSBFY2xpcHNlIEZvdW5kYXRpb24gaXMgaW5zdGFsbGVkIHVzaW5nIHRoZSBFY2xpcHNlIFVwZGF0ZSBNYW5hZ2VyLCB5b3UgbXVzdCBhZ3JlZSB0byBhIGxpY2Vuc2UgKCZxdW90O0ZlYXR1cmUgVXBkYXRlIExpY2Vuc2UmcXVvdDspIGR1cmluZyB0aGUKK2luc3RhbGxhdGlvbiBwcm9jZXNzLiAgSWYgdGhlIEZlYXR1cmUgY29udGFpbnMgSW5jbHVkZWQgRmVhdHVyZXMsIHRoZSBGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlIHNob3VsZCBlaXRoZXIgcHJvdmlkZSB5b3Ugd2l0aCB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgZ292ZXJuaW5nIHRoZSBJbmNsdWRlZCBGZWF0dXJlcyBvcgoraW5mb3JtIHlvdSB3aGVyZSB5b3UgY2FuIGxvY2F0ZSB0aGVtLiAgRmVhdHVyZSBVcGRhdGUgTGljZW5zZXMgbWF5IGJlIGZvdW5kIGluIHRoZSAmcXVvdDtsaWNlbnNlJnF1b3Q7IHByb3BlcnR5IG9mIGZpbGVzIG5hbWVkICZxdW90O2ZlYXR1cmUucHJvcGVydGllcyZxdW90OyBmb3VuZCB3aXRoaW4gYSBGZWF0dXJlLgorU3VjaCBBYm91dHMsIEZlYXR1cmUgTGljZW5zZXMsIGFuZCBGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlcyBjb250YWluIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyAob3IgcmVmZXJlbmNlcyB0byBzdWNoIHRlcm1zIGFuZCBjb25kaXRpb25zKSB0aGF0IGdvdmVybiB5b3VyIHVzZSBvZiB0aGUgYXNzb2NpYXRlZCBDb250ZW50IGluCit0aGF0IGRpcmVjdG9yeS48L3A+CisKKzxwPlRIRSBBQk9VVFMsIEZFQVRVUkUgTElDRU5TRVMsIEFORCBGRUFUVVJFIFVQREFURSBMSUNFTlNFUyBNQVkgUkVGRVIgVE8gVEhFIEVQTCBPUiBPVEhFUiBMSUNFTlNFIEFHUkVFTUVOVFMsIE5PVElDRVMgT1IgVEVSTVMgQU5EIENPTkRJVElPTlMuICBTT01FIE9GIFRIRVNFCitPVEhFUiBMSUNFTlNFIEFHUkVFTUVOVFMgTUFZIElOQ0xVREUgKEJVVCBBUkUgTk9UIExJTUlURUQgVE8pOjwvcD4KKworPHVsPgorCTxsaT5Db21tb24gUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjAgKGF2YWlsYWJsZSBhdCA8YSBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2NwbC12MTAuaHRtbCI+aHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9jcGwtdjEwLmh0bWw8L2E+KTwvbGk+CisJPGxpPkFwYWNoZSBTb2Z0d2FyZSBMaWNlbnNlIDEuMSAoYXZhaWxhYmxlIGF0IDxhIGhyZWY9Imh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFIj5odHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRTwvYT4pPC9saT4KKwk8bGk+QXBhY2hlIFNvZnR3YXJlIExpY2Vuc2UgMi4wIChhdmFpbGFibGUgYXQgPGEgaHJlZj0iaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wIj5odHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjA8L2E+KTwvbGk+CisJPGxpPklCTSBQdWJsaWMgTGljZW5zZSAxLjAgKGF2YWlsYWJsZSBhdCA8YSBocmVmPSJodHRwOi8vb3NzLnNvZnR3YXJlLmlibS5jb20vZGV2ZWxvcGVyd29ya3Mvb3BlbnNvdXJjZS9saWNlbnNlMTAuaHRtbCI+aHR0cDovL29zcy5zb2Z0d2FyZS5pYm0uY29tL2RldmVsb3BlcndvcmtzL29wZW5zb3VyY2UvbGljZW5zZTEwLmh0bWw8L2E+KTwvbGk+CQorCTxsaT5NZXRybyBMaW5rIFB1YmxpYyBMaWNlbnNlIDEuMDAgKGF2YWlsYWJsZSBhdCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW5ncm91cC5vcmcvb3Blbm1vdGlmL3N1cHBvcnRlcnMvbWV0cm9saW5rL2xpY2Vuc2UuaHRtbCI+aHR0cDovL3d3dy5vcGVuZ3JvdXAub3JnL29wZW5tb3RpZi9zdXBwb3J0ZXJzL21ldHJvbGluay9saWNlbnNlLmh0bWw8L2E+KTwvbGk+CisJPGxpPk1vemlsbGEgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjEgKGF2YWlsYWJsZSBhdCA8YSBocmVmPSJodHRwOi8vd3d3Lm1vemlsbGEub3JnL01QTC9NUEwtMS4xLmh0bWwiPmh0dHA6Ly93d3cubW96aWxsYS5vcmcvTVBML01QTC0xLjEuaHRtbDwvYT4pPC9saT4KKzwvdWw+CisKKzxwPklUIElTIFlPVVIgT0JMSUdBVElPTiBUTyBSRUFEIEFORCBBQ0NFUFQgQUxMIFNVQ0ggVEVSTVMgQU5EIENPTkRJVElPTlMgUFJJT1IgVE8gVVNFIE9GIFRIRSBDT05URU5ULiAgSWYgbm8gQWJvdXQsIEZlYXR1cmUgTGljZW5zZSwgb3IgRmVhdHVyZSBVcGRhdGUgTGljZW5zZSBpcyBwcm92aWRlZCwgcGxlYXNlCitjb250YWN0IHRoZSBFY2xpcHNlIEZvdW5kYXRpb24gdG8gZGV0ZXJtaW5lIHdoYXQgdGVybXMgYW5kIGNvbmRpdGlvbnMgZ292ZXJuIHRoYXQgcGFydGljdWxhciBDb250ZW50LjwvcD4KKworPGgzPkNyeXB0b2dyYXBoeTwvaDM+CisKKzxwPkNvbnRlbnQgbWF5IGNvbnRhaW4gZW5jcnlwdGlvbiBzb2Z0d2FyZS4gVGhlIGNvdW50cnkgaW4gd2hpY2ggeW91IGFyZSBjdXJyZW50bHkgbWF5IGhhdmUgcmVzdHJpY3Rpb25zIG9uIHRoZSBpbXBvcnQsIHBvc3Nlc3Npb24sIGFuZCB1c2UsIGFuZC9vciByZS1leHBvcnQgdG8KKyAgIGFub3RoZXIgY291bnRyeSwgb2YgZW5jcnlwdGlvbiBzb2Z0d2FyZS4gQkVGT1JFIHVzaW5nIGFueSBlbmNyeXB0aW9uIHNvZnR3YXJlLCBwbGVhc2UgY2hlY2sgdGhlIGNvdW50cnkncyBsYXdzLCByZWd1bGF0aW9ucyBhbmQgcG9saWNpZXMgY29uY2VybmluZyB0aGUgaW1wb3J0LAorICAgcG9zc2Vzc2lvbiwgb3IgdXNlLCBhbmQgcmUtZXhwb3J0IG9mIGVuY3J5cHRpb24gc29mdHdhcmUsIHRvIHNlZSBpZiB0aGlzIGlzIHBlcm1pdHRlZC48L3A+CisgICAKKzxzbWFsbD5KYXZhIGFuZCBhbGwgSmF2YS1iYXNlZCB0cmFkZW1hcmtzIGFyZSB0cmFkZW1hcmtzIG9mIFN1biBNaWNyb3N5c3RlbXMsIEluYy4gaW4gdGhlIFVuaXRlZCBTdGF0ZXMsIG90aGVyIGNvdW50cmllcywgb3IgYm90aC48L3NtYWxsPiAgIAorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLmdlL3BsdWdpbi5wcm9wZXJ0aWVzIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLmdlL3BsdWdpbi5wcm9wZXJ0aWVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUxMjI3NTgKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkuZ2UvcGx1Z2luLnByb3BlcnRpZXMKQEAgLTAsMCArMSwxOSBAQAorIy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjICogQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorIyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyMgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyMgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorIyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisjICoKKyMgKiBDb250cmlidXRvcnM6CisjICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorIyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKK3BsdWdpbk5hbWUgPSBTVEVNIEdvb2dsZSBFYXJ0aCBVSQorcHJvdmlkZXJOYW1lID0gRWNsaXBzZS5vcmcKKworZ2VQUGFnZSA9IEdvb2dsZSBFYXJ0aAorZ2VBZHZQUGFnZSA9IEFkdmFuY2VkCitnZVVudXNlZFBQYWdlID0gR29vZ2xlRWFydGhJbnRlcmZhY2UKK2dlVmlldyA9IEdvb2dsZUVhcnRoX1ZpZXcKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5nZS9wbHVnaW4ueG1sIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLmdlL3BsdWdpbi54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzA3Njc1ZAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5nZS9wbHVnaW4ueG1sCkBAIC0wLDAgKzEsNDAgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8P2VjbGlwc2UgdmVyc2lvbj0iMy4yIj8+Cis8cGx1Z2luPgorCisgICA8ZXh0ZW5zaW9uCisgICAgICAgICBwb2ludD0ib3JnLmVjbGlwc2UudWkudmlld3MiPgorICAgICAgPHZpZXcKKyAgICAgICAgICAgIG5hbWU9IiVnZVZpZXciCisgICAgICAgICAgICBpY29uPSJpY29ucy9nZS5naWYiCisgICAgICAgICAgICBjYXRlZ29yeT0ib3JnLmVjbGlwc2Uuc3RlbS51aS52aWV3cyIKKyAgICAgICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS5zdGVtLnVpLmdlLnZpZXdzLkdFVmlldyIKKyAgICAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5zdGVtLnVpLnZpZXdzLmdlIj4KKyAgICAgIDwvdmlldz4KKyAgICAgIAorICAgPC9leHRlbnNpb24+CisgICA8ZXh0ZW5zaW9uCisgICAgICAgICBwb2ludD0ib3JnLmVjbGlwc2UudWkucHJlZmVyZW5jZVBhZ2VzIj4KKyAgICAgIDxwYWdlCisgICAgICAgICAgICBjYXRlZ29yeT0ib3JnLmVjbGlwc2Uuc3RlbS51aS5wcmVmZXJlbmNlcy5WaXN1YWxpemF0aW9uUHJlZmVyZW5jZVBhZ2UiCisgICAgICAgICAgICBjbGFzcz0ib3JnLmVjbGlwc2Uuc3RlbS51aS5nZS52aWV3cy5HRVByZWZlcmVuY2VQYWdlIgorICAgICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLnN0ZW0udWkuZ2Uudmlld3MuR0VQcmVmZXJlbmNlUGFnZSIKKyAgICAgICAgICAgIG5hbWU9IiVnZVBQYWdlIi8+CisgICAgICA8cGFnZQorICAgICAgICAgICAgY2F0ZWdvcnk9Im9yZy5lY2xpcHNlLnN0ZW0udWkuZ2Uudmlld3MuR0VQcmVmZXJlbmNlUGFnZSIKKyAgICAgICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS5zdGVtLnVpLmdlLnZpZXdzLkdFQWR2YW5jZWRQcmVmZXJlbmNlUGFnZSIKKyAgICAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5zdGVtLnVpLmdlLnZpZXdzLkdFQWR2YW5jZWRQcmVmZXJlbmNlUGFnZSIKKyAgICAgICAgICAgIG5hbWU9IiVnZUFkdlBQYWdlIi8+CisgICA8L2V4dGVuc2lvbj4KKyAgIDxleHRlbnNpb24KKyAgICAgICAgIHBvaW50PSJvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUucHJlZmVyZW5jZXMiPgorICAgICAgPGluaXRpYWxpemVyIGNsYXNzPSJvcmcuZWNsaXBzZS5zdGVtLnVpLmdlLnZpZXdzLlByZWZlcmVuY2VJbml0aWFsaXplciIvPgorICAgPC9leHRlbnNpb24+CisgICA8ZXh0ZW5zaW9uCisgICAgICAgICBpZD0ib3JnLmVjbGlwc2Uuc3RlbS5nZSIKKyAgICAgICAgIG5hbWU9IiVnZVVudXNlZFBQYWdlIgorICAgICAgICAgcG9pbnQ9Im9yZy5lY2xpcHNlLnVpLnByZWZlcmVuY2VQYWdlcyI+CisgICA8L2V4dGVuc2lvbj4KKyAgIAorCis8L3BsdWdpbj4KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5nZS9wbHVnaW5fZGUucHJvcGVydGllcyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5nZS9wbHVnaW5fZGUucHJvcGVydGllcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYzNhYzNiCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLmdlL3BsdWdpbl9kZS5wcm9wZXJ0aWVzCkBAIC0wLDAgKzEsMTkgQEAKKyMvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIyAqIENvcHlyaWdodCAoYykgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyMgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisjICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisjICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyMgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorIyAqCisjICogQ29udHJpYnV0b3JzOgorIyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCitwbHVnaW5OYW1lPVNURU0gR29vZ2xlRWFydGgtQmVudXR6ZXJvYmVyZmxcdTAwZTRjaGUKK3Byb3ZpZGVyTmFtZT1FY2xpcHNlLm9yZworCitnZVBQYWdlPUdvb2dsZSBFYXJ0aAorZ2VBZHZQUGFnZT1Gb3J0Z2VzY2hyaXR0ZW4KK2dlVW51c2VkUFBhZ2U9R29vZ2xlRWFydGggU2Nobml0dHN0ZWxsZQorZ2VWaWV3PUdvb2dsZUVhcnRoIEFuc2ljaHQKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5nZS9wbHVnaW5fa3IucHJvcGVydGllcyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5nZS9wbHVnaW5fa3IucHJvcGVydGllcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jM2RkZjk3Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLmdlL3BsdWdpbl9rci5wcm9wZXJ0aWVzCkBAIC0wLDAgKzEsMTkgQEAKKyMvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIyAqIENvcHlyaWdodCAoYykgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyMgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisjICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisjICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyMgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorIyAqCisjICogQ29udHJpYnV0b3JzOgorIyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCitwbHVnaW5OYW1lPVNURU0gR29vZ2xlIEVhcnRoIFVJCitwcm92aWRlck5hbWU9RWNsaXBzZS5vcmcKKworZ2VQUGFnZT1Hb29nbGUgRWFydGgKK2dlQWR2UFBhZ2U9XHVhY2UwXHVhZTA5CitnZVVudXNlZFBQYWdlPUdvb2dsZUVhcnRoSW50ZXJmYWNlCitnZVZpZXc9R29vZ2xlRWFydGhfVmlldwpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLmdlL3BsdWdpbl96aC5wcm9wZXJ0aWVzIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLmdlL3BsdWdpbl96aC5wcm9wZXJ0aWVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2NjVjZDAKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkuZ2UvcGx1Z2luX3poLnByb3BlcnRpZXMKQEAgLTAsMCArMSwxOSBAQAorIy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjICogQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorIyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyMgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyMgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorIyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisjICoKKyMgKiBDb250cmlidXRvcnM6CisjICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorIyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKK3BsdWdpbk5hbWU9U1RFTVx1OGMzN1x1NmI0Y1x1NTczMFx1NzQwM1x1NzY4NFx1NzUyOFx1NjIzN1x1NzU0Y1x1OTc2MgorcHJvdmlkZXJOYW1lPUVjbGlwc2Uub3JnCisKK2dlUFBhZ2U9XHU4YzM3XHU2YjRjXHU1NzMwXHU3NDAzCitnZUFkdlBQYWdlPVx1OWFkOFx1N2VhNworZ2VVbnVzZWRQUGFnZT1Hb29nbGVFYXJ0aFx1NzU0Y1x1OTc2MgorZ2VWaWV3PUdvb2dsZUVhcnRoXHU4OWM2XHU1NmZlCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkuZ2Uvc2VydmxldC54bWwgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkuZ2Uvc2VydmxldC54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODMwNjkyNAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5nZS9zZXJ2bGV0LnhtbApAQCAtMCwwICsxLDc2IEBACis8IS0tICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogLS0+Cis8IS0tIEFudCBidWlsZCBzY3JpcHQgdG8gYnVpbGQgdGhlIEdFIHNlcnZsZXQgd2FyIGZpbGUgICAgICAgLS0+Cis8IS0tICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogLS0+Cis8cHJvamVjdCBuYW1lPSJTVEVNIiBkZWZhdWx0PSJ3YXIiID4KKworCQorCTwhLS0gQ29uZmlndXJlIHRoZSBkaXJlY3RvcnkgaW50byB3aGljaCB0aGUgd2ViIGFwcGxpY2F0aW9uIGlzIGJ1aWx0IC0tPgorCTxwcm9wZXJ0eSBuYW1lPSJidWlsZC5kaXIiICAgIHZhbHVlPSIke2Jhc2VkaXJ9Ii8+CisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ3YXIubmFtZSIgICAgdmFsdWU9IlNURU0iLz4KKyAgICAgICAgPHByb3BlcnR5IG5hbWU9ImxpYi5zZXJ2bGV0IiAgICB2YWx1ZT0iZXh0bGliL3NlcnZsZXQtYXBpLmphciIvPgorCTwhLS0gR2V0IHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZXMgLS0+CisJCTxwcm9wZXJ0eSBlbnZpcm9ubWVudD0iZW52IiAvPgorCisJCTxwcm9wZXJ0eSBuYW1lPSJjYXRhbGluYSIgdmFsdWU9IiR7ZW52LkNBVEFMSU5BX0hPTUV9IiAvPgorCisKKyAJCisJPCEtLSBFeGVjdXRhYmxlIFRhcmdldHMgLS0+CisJCQorCTx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlc2NyaXB0aW9uPSJyZW1vdmVzIHByZXZpb3VzIGJ1aWxkIj4JCQorCQk8ZGVsZXRlIGRpcj0iJHtiYXNlZGlyfS9XRUItSU5GL2NsYXNzZXMvKiovKiIgLz4JCisJPC90YXJnZXQ+CisKKwk8dGFyZ2V0IG5hbWU9ImluaXQiIGRlc2NyaXB0aW9uPSJtYWtlcyBidWlsZCBzdHJ1Y3R1cmUiID4JCQorCQk8bWtkaXIgZGlyPSIke2Jhc2VkaXJ9L1dFQi1JTkYvY2xhc3NlcyIgLz4KKwk8L3RhcmdldD4KKworCTx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4saW5pdCIgZGVzY3JpcHRpb249IkNvbXBpbGUgd2ViIGFwcGxpY2F0aW9uIj4KKwkJPCEtLSAuLi4gCisJCQljb21waWxlIHRoZSBzZXJ2bGV0cyBpbnRvIFdFQi1JTkYvY2xhc3NlcworCQkJICAgICAgICAgICAgLi4uIC0tPgorCQkKKwkJPGphdmFjIGRlYnVnPSJvbiIgc3JjZGlyPSJzcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9nZSIgCisJCQlpbmNsdWRlcz0ic2VydmxldC8qLmphdmEiCisJCQlleGNsdWRlcz0ic2VydmxldC9WZXJpZnlDbGllbnQuamF2YSIKKwkJCWRlc3RkaXI9IiR7YnVpbGQuZGlyfS9XRUItSU5GL2NsYXNzZXMiID4KKwkJCTxjbGFzc3BhdGggcmVmaWQ9ImNsYXNzcGF0aCIgLz4JCQkgIAkgICAgIAorCQk8L2phdmFjPgorCQkKKwk8L3RhcmdldD4KKwkKKwk8dGFyZ2V0IG5hbWU9Imh0bWwiIGRlc2NyaXB0aW9uPSJDb3B5IHN0YXJ0Lmh0bWwgdG8gc2VydmVyIj4JCQorCQk8Y29weSB0b2Rpcj0iJHtjYXRhbGluYX0vd2ViYXBwcy9TVEVNLyIgb3ZlcndyaXRlPSJ0cnVlIj4KKwkJCQkJPGZpbGVzZXQgZGlyPSIke2Jhc2VkaXJ9L1dFQi1JTkYvIj4KKwkJCQkJCTxpbmNsdWRlIG5hbWU9IiouaHRtbCIgLz4KKwkJCQkJPC9maWxlc2V0PgorCQk8L2NvcHk+CisJPC90YXJnZXQ+CisJCisJCisJCisJPCEtLSAKKwkJKiBCdWlsZCB0aGUgd2FyIGZpbGUgIFNURU0ud2FyCisJCSogICBjb250YWlucworCQkqICAgICAKKwkJKiAgICAgV0VCLUlORi8KKwkJKiAgICAgICB3ZWIueG1sCQkqICAgICAgIAorCQkqICAgICAgIC9jbGFzc2VzLy4uLiAKKwkJKiAgICAgICBsaWIvc2VydmxldC1hcGkuamFyCisJCSogCisJCS0tPgorCTx0YXJnZXQgbmFtZT0id2FyIiBkZXBlbmRzPSJjb21waWxlIiBkZXNjcmlwdGlvbj0iY3JlYXRlcyB0aGUgd2FyIGZpbGUiPgorCisJCTxwYXRoIGlkPSJjbGFzc3BhdGgiPgorCQkJPHBhdGggbG9jYXRpb249IiR7bGliLnNlcnZsZXR9IiAvPgorCQk8L3BhdGg+CisKKwkJCQkKKwkJPHdhciBkZXN0ZmlsZT0iJHtiYXNlZGlyfS9XRUItSU5GLyR7d2FyLm5hbWV9LndhciIgd2VieG1sPSIke2Jhc2VkaXJ9L1dFQi1JTkYvd2ViLnhtbCI+CisJCQk8Y2xhc3NlcyBkaXI9IiR7YmFzZWRpcn0vV0VCLUlORi9jbGFzc2VzIiAgLz4gICAgICAgICAgIAorCQkJPGxpYiBkaXI9IiR7YmFzZWRpcn0vZXh0bGliLyIgaW5jbHVkZXM9InNlcnZsZXQtYXBpLmphciIgLz4KKwkJPC93YXI+CisJPC90YXJnZXQ+CisKKworPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLmdlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL2dlL0FjdGl2YXRvci5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLmdlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL2dlL0FjdGl2YXRvci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFiOGRiYmIKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkuZ2Uvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvZ2UvQWN0aXZhdG9yLmphdmEKQEAgLTAsMCArMSwxMTEgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS51aS5nZTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU3RhdHVzOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnJlc291cmNlLkltYWdlRGVzY3JpcHRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5wbHVnaW4uQWJzdHJhY3RVSVBsdWdpbjsKK2ltcG9ydCBvcmcub3NnaS5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dDsKKworLyoqCisgKiBUaGUgYWN0aXZhdG9yIGNsYXNzIGNvbnRyb2xzIHRoZSBwbHVnLWluIGxpZmUgY3ljbGUKKyAqLworcHVibGljIGNsYXNzIEFjdGl2YXRvciBleHRlbmRzIEFic3RyYWN0VUlQbHVnaW4geworCisJLyoqCisJICogVGhlIHBsdWctaW4gSUQKKwkgKi8gCisJcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUExVR0lOX0lEID0gIm9yZy5lY2xpcHNlLnN0ZW0udWkuZ2UiOworCisJLy8gVGhlIHNoYXJlZCBpbnN0YW5jZQorCXByaXZhdGUgc3RhdGljIEFjdGl2YXRvciBwbHVnaW47CisJCisJLyoqCisJICogVGhlIGNvbnN0cnVjdG9yCisJICovCisJcHVibGljIEFjdGl2YXRvcigpIHsKKwkJcGx1Z2luID0gdGhpczsKKwl9CisKKwkvKgorCSAqIChub24tSmF2YWRvYykKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnVpLnBsdWdpbi5BYnN0cmFjdFVJUGx1Z2luI3N0YXJ0KG9yZy5vc2dpLmZyYW1ld29yay5CdW5kbGVDb250ZXh0KQorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIHN0YXJ0KEJ1bmRsZUNvbnRleHQgY29udGV4dCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCXN1cGVyLnN0YXJ0KGNvbnRleHQpOworCX0KKworCS8qCisJICogKG5vbi1KYXZhZG9jKQorCSAqIEBzZWUgb3JnLmVjbGlwc2UudWkucGx1Z2luLkFic3RyYWN0VUlQbHVnaW4jc3RvcChvcmcub3NnaS5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBzdG9wKEJ1bmRsZUNvbnRleHQgY29udGV4dCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCXBsdWdpbiA9IG51bGw7CisJCXN1cGVyLnN0b3AoY29udGV4dCk7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgc2hhcmVkIGluc3RhbmNlCisJICoKKwkgKiBAcmV0dXJuIHRoZSBzaGFyZWQgaW5zdGFuY2UKKwkgKi8KKwlwdWJsaWMgc3RhdGljIEFjdGl2YXRvciBnZXREZWZhdWx0KCkgeworCQlyZXR1cm4gcGx1Z2luOworCX0KKworCS8qKgorCSAqIFJldHVybnMgYW4gaW1hZ2UgZGVzY3JpcHRvciBmb3IgdGhlIGltYWdlIGZpbGUgYXQgdGhlIGdpdmVuCisJICogcGx1Zy1pbiByZWxhdGl2ZSBwYXRoCisJICoKKwkgKiBAcGFyYW0gcGF0aCB0aGUgcGF0aAorCSAqIEByZXR1cm4gdGhlIGltYWdlIGRlc2NyaXB0b3IKKwkgKi8KKwlwdWJsaWMgc3RhdGljIEltYWdlRGVzY3JpcHRvciBnZXRJbWFnZURlc2NyaXB0b3IoU3RyaW5nIHBhdGgpIHsKKwkJcmV0dXJuIGltYWdlRGVzY3JpcHRvckZyb21QbHVnaW4oUExVR0lOX0lELCBwYXRoKTsKKwl9CisJCisJLyoqCisJICogTG9nIGFuIGVycm9yIHRvIHRoZSBJTG9nIGZvciB0aGlzIHBsdWdpbgorCSAqIAorCSAqIEBwYXJhbSBtZXNzYWdlCisJICogICAgICAgICAgICB0aGUgbG9jYWxpemVkIGVycm9yIG1lc3NhZ2UgdGV4dAorCSAqIEBwYXJhbSBleGNlcHRpb24KKwkgKiAgICAgICAgICAgIHRoZSBhc3NvY2lhdGVkIGV4Y2VwdGlvbiwgb3IgbnVsbAorCSAqLworCXB1YmxpYyBzdGF0aWMgdm9pZCBsb2dFcnJvcihTdHJpbmcgbWVzc2FnZSwgVGhyb3dhYmxlIGV4Y2VwdGlvbikgeworCQlpZiAocGx1Z2luICE9IG51bGwpIHsKKwkJCXBsdWdpbi5nZXRMb2coKS5sb2coCisJCQkJbmV3IFN0YXR1cyhJU3RhdHVzLkVSUk9SLCBwbHVnaW4uZ2V0QnVuZGxlKCkuZ2V0U3ltYm9saWNOYW1lKCksCisJCQkJCQkwLCBtZXNzYWdlLCBleGNlcHRpb24pKTsKKwkgICAgfQorCX0gLy8gbG9nRXJyb3IKKworCS8qKgorCSAqIExvZyBpbmZvcm1hdGlvbiB0byB0aGUgSUxvZyBmb3IgdGhpcyBwbHVnaW4KKwkgKiAKKwkgKiBAcGFyYW0gbWVzc2FnZQorCSAqICAgICAgICAgICAgdGhlIGxvY2FsaXplZCBpbmZvcm1hdGlvbiBtZXNzYWdlIHRleHQKKwkgKiBAcGFyYW0gZXhjZXB0aW9uCisJICogICAgICAgICAgICB0aGUgYXNzb2NpYXRlZCBleGNlcHRpb24sIG9yIG51bGwKKwkgKi8KKwlwdWJsaWMgc3RhdGljIHZvaWQgbG9nSW5mbyhTdHJpbmcgbWVzc2FnZSwgVGhyb3dhYmxlIGV4Y2VwdGlvbikgeworCQlpZiAocGx1Z2luICE9IG51bGwpIHsKKwkJcGx1Z2luLmdldExvZygpLmxvZygKKwkJCQluZXcgU3RhdHVzKElTdGF0dXMuSU5GTywgcGx1Z2luLmdldEJ1bmRsZSgpLmdldFN5bWJvbGljTmFtZSgpLAorCQkJCQkJMCwgbWVzc2FnZSwgZXhjZXB0aW9uKSk7CisJCX0KKwl9IC8vIGxvZ0luZm9ybWF0aW9uCisKK30KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5nZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9nZS9Bc3BlY3QuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5nZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9nZS9Bc3BlY3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMjM4YWY5Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLmdlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL2dlL0FzcGVjdC5qYXZhCkBAIC0wLDAgKzEsNjM2IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0udWkuZ2U7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtOworaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOworaW1wb3J0IGphdmEudXRpbC5NYXA7CitpbXBvcnQgamF2YS51dGlsLlByb3BlcnRpZXM7CitpbXBvcnQgamF2YS51dGlsLlN0cmluZ1Rva2VuaXplcjsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5Bc3NlcnQ7CisvKioKKyAqIEFzcGVjdCAKKyAqIAorICogVGhpcyBjbGFzcyBpcyB1c2VkIHRvIGRlc2NyaWJlIHRoZSBBc3BlY3RzIG9mIGEgZGlzZWFzZSB0aGF0IAorICogd2UgYXJlIGludGVyZXN0ZWQgaW4uICBUaGUgY29tbW9uIG9uZXMgYXJlOiBTLCBFIEksYW5kIFIgZm9yIAorICogU3VzY2VwdGlibGUsIEV4cG9zZWQsIEluZmVjdGlvdXMsIGFuZCBSZWNvdmVyYWJsZS4gIEhvd2V2ZXIgCisgKiB0aGVyZSBjb3VsZCBiZSBvdGhlcnMgb3Igc29tZSBkaXNlYXNlcyBtYXkgaGF2ZSBsZXNzLgorICogCisgKiBUaGUgdmFsaWQgQXNwZWN0cyBhcmUgZGVzY3JpYmVkIGJ5IGEgcHJvcGVydHkgZmlsZS4gIAorICogVGhlIGRlZmF1bHQgaXMgYXNwZWN0cy5wcm9wZXJ0aWVzIHdoaWNoIHdvdWxkIGJlIGZvdW5kIGluIHRoZSAKKyAqIG9yZy5lY2xpcHNlLnN0ZW0udWkuZ2UgcGFja2FnZS4gVGhlIGRlZmF1bHQgaWYgbm8gcHJvcGVydGllcworICogZmlsZSBpcyBmb3VuZCBpcyBTLEUsSSxSIHdpdGggZGVmYXVsdCB2YWx1ZXMgZm9yIGVhY2ggYXNwZWN0LgorICogCisgKiBFYWNoIHZhbGlkIEFzcGVjdCBpcyBkZXNjcmliZWQgYnkgYW4gaW5zdGFuY2Ugb2YgdGhpcyBjbGFzcyBhbmQgCisgKiB0aGUgc2V0IG9mIEFzcGVjdHMgYXJlIHN0b3JlZCBpbiBhIEhhc2hNYXAgdGhhdCBjYW4gYmUgYWNjZXNzZWQgCisgKiBhcyBhIHN0YXRpYyB2YWx1ZSBmb3IgQXNwZWN0LiAKKyAqIDxwcmU+CisgKiBFYWNoIEFzcGVjdCBoYXMgdGhlIGZvbGxvd2luZyBhdHRyaWJ1dGVzOgorICoKKyAqICAgIGNvZGUgICAgIC0gdGhlIFN0cmluZyBjb2RlIGJ5IHdoaWNoIGl0IGlzIGFjY2Vzc2VkIChlLmcgIlMiKQorICogICAgbmFtZSAgICAgLSBUaGUgU3RyaW5nIHRoYXQgdGhlIHVzZXIgd291bGQgdW5kZXJzdGFuZAorICogICAgICAgICAgICAgICAoZS5nICJTdXNjZXB0aXBsZSIKKyAqICAgIGRlc2NyaXB0aW9uIC0gVGhlIHRleHQgZGVzY3JpcHRpb24gb2YgdGhlIGFzcGVjdC4KKyAqICAgIHJhbmdlICAgIC0gQSBsaXN0IG9mIGRvdWJsZSB2YWx1ZXMgdGhhdCBkZXNjcmliZSB0aGUgcmFuZ2UgCisgKiAgICAgICAgICAgICAgIG9mIHZhbHVlcyB0aGF0IHRoZSBhc3BlY3QgbWlnaHQgaGF2ZS4gCisgKiAgICAgICAgICAgICAgIEZvciBhIHJlbGF0aXZlIGFzcGVjdCwgdGhlc2Ugd291bGQgcmFuZ2UgZnJvbSAwLjAgdG8gMS4wCisgKiAgICAgICAgICAgICAgIChlLmcgIDAuMSwgMC4zMywgMC42NiwgMC45KQorICogICAgcmVkICAgICAgICBUaGUgdmFsdWUgKDAgdG8gMjU1KSBmb3IgdGhlIGNvbG9yICJSZWQiIGlmIHRoZSB2YWx1ZSAKKyAqICAgICAgICAgICAgICAgaXMgaW4gdGhlIHNwZWNpZmllZCByYW5nZS4gCisgKiAgICAgICAgICAgICAgIChlLmcgIDAsMjU1LDI1NSwyNTUgd291bGQgY2F1c2UgYW4gYXNwZWN0IHdpdGggYSB2YWx1ZSBvZiAwCisgKiAgICAgICAgICAgICAgIHRvIGhhdmUgcmVkPTA7IHdpdGggYSB2YWx1ZSBncmVhdGVyIHRoYW4gMCB0aGVuIHJlZD0yNTUKKyAqICAgICAgICAgICAgICAgQXNzdW1pbmcgdGhlIGdyZWVuIGFuZCBibHVlIHZhbHVlcyB3ZXJlIDAsMCwwLDAgdGhlbiB0aGUKKyAqICAgICAgICAgICAgICAgYXNwZWN0IHdvdWxkIGJlIHNob3duIGFzIHJlZC4gRXF1YWwgdmFsdWVzIGZvciByZWQgYW5kIGdyZWVuCisgKiAgICAgICAgICAgICAgIHdvdWxkIHJlc3VsdCBpbiB5ZWxsb3cgZXRjLiAKKyAqICAgIGdyZWVuICAgICAgU2FtZSBhcyBhYm92ZSBidXQgZm9yIHRoZSBjb2xvciBncmVlbi4KKyAqICAgIGJsdWUgICAgICAgU2FtZSBhcyBhYm92ZSBidXQgZm9yIHRoZSBjb2xvciBibHVlLgorICogICAgb3BhY2l0eSAgICBUaGUgdmFsdWUgKDAgdG8gMjU1KSB0aGF0IGRlc2NyaXBlcyB0aGUgdHJhbnBhcmVuY3kgCisgKiAgICAgCQkJIHVzZWQgYnkgR29vZ2xlRWFydGggd2hlbiBkcmF3aW5nIGEgcG9seWdvbiB0byAKKyAqICAgICAgICAgICAgICAgcmVwcmVzZW50IHRoZSB2YWx1ZSBvZiB0aGUgYXNwZWN0LiAgCisgKiAgICAgICAgICAgICAgIChlLmcgMCwxMjgsMTYwLDE5MiB3aXRoIHRoZSByYW5nZSBhYm92ZSB3b3VsZCBjYXVzZSBhbiBhcmVhCisgKiAgICAgICAgICAgICAgICB3aXRoIGEgYXNwZWN0IHZhbHVlIG9mIDAgdG8gMC4xIHRvIG5vdCBiZSBmaWxsZWQgaW4gYXQgYWxsLCAKKyAqICAgICAgICAgICAgICAgIHdpdGggYSB2YWx1ZSBsZXNzIG9yIGVxdWFsIHRvIDAuMzMgdG8gaGF2ZSBhbiBvcGFjaXR5CisgKiAgICAgICAgICAgICAgICBvZiAxMjggYW5kIHZhbHVlcyBncmVhdGVyIHRoYXRuIDAuOSBhbiBvcGFjaXR5IG9mIDE5MikgCisgKiAKKyAqIDwvcHJlPgorICovCitwdWJsaWMgY2xhc3MgQXNwZWN0IHsKKyAgICAvKioKKyAgICAgKiBBc3BlY3QgY29kZSAKKyAgICAgKiAgIEV4YW1wbGUgIkUiCisgICAgICovCisJcHJpdmF0ZSBTdHJpbmcgY29kZSA9IG51bGw7CisJCisJLyoqCisJICogQXNwZWN0IE5hbWUKKwkgKiAgIEV4YW1wbGUgIkV4cG9zZWQiCisJICogICAKKwkgKiAgIAorCSAqLworCXByaXZhdGUgU3RyaW5nIG5hbWUgPSBudWxsOworCQorCQorCS8qKgorCSAqIERlc2NyaXB0aW9uIG9mIHRoZSB2YWx1ZS4gIAorCSAqIAorCSAqLworCS8vIFRPRE8gIGhvdyBkbyB3ZSBtYWtlIHRoaXMgdHJhbnNsYXRhYmxlPworCXByaXZhdGUgU3RyaW5nIGRlc2NyaXB0aW9uID0gbnVsbDsKKwkvKioKKwkgKiBmaWxlbmFtZSBmb3IgcHJvcGVydGllcyBmaWxlCisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUFJPUEVSVElFU19OQU1FID0gImFzcGVjdC5wcm9wZXJ0aWVzIjsKKwkvKiogZGVmYXVsdCByYW5nZSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgZG91YmxlW10gREVGQVVMVF9SQU5HRSA9IHswLjAsIDAuMzMsIDAuNjYsIDEuMH07CisJLyoqIGRlZmF1bHQgb3BhY2l0eSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgaW50W10gREVGQVVMVF9PUEFDSVRZID0gezAsMTI4LDE2MCwxOTJ9OworCQorCS8qKgorCSAqIHJhbmdlIG9mIHZhbHVlcyB0aGF0IHdpbGwgYmUgc2hvd24uICAKKwkgKiBUaGlzIHJhbmdlIHdpbGwgYmUgdXNlZCB0byBzZWxlY3QgdGhlIHZhbHVlCisJICogb2Ygb3BhY2l0eSxyZWQsZ3JlZW4gYW5kIGJsdWUgaW4gdGhlIGRpc3BsYXkuCisJICogRm9yIEV4YW1wbGUsIGlmIHRoZSBFeHBvc2VkIHJlbGF0aXZlIHZhbHVlIGlzIDAuNSB0aGVuIAorCSAqIHRoaXMgaXMgdGhlIGxlc3MgdGhhbiBvciBlcXVhbCB0byB0aGUgM3JkIGVudHJ5IGluIHJhbmdlICgwLjY2KSAKKwkgKiBzbyB0aGUgM3JkIGVudHJ5IGluIHRoZSBsaXN0IG9mIE9wYWNpdHkoMTYwKSB3aWxsIGJlIHVzZWQgYW5kIAorCSAqIHRoZSAzcmQgZW50cnkgaW4gdGhlICByZWQsZ3JlZW4gYW5kIGJsdWUgbGlzdHMgd291bGQgYmUgdXNlZC4KKwkgKiAKKwkgKi8KKwlwcml2YXRlIGRvdWJsZVtdIHJhbmdlID0gREVGQVVMVF9SQU5HRTsKKwkKKwkKKwlwcml2YXRlIGludFtdIG9wYWNpdHkgPSBERUZBVUxUX09QQUNJVFk7CisJLyoqCisJICogVGhlIGFycmF5IG9mIGNvbG9yIGVudHJpZXMuICAKKwkgKiBGb3IgZXhhbXBsZSwgdGhlIGFzcGVjdCBFeHBvc2VkIGlzIGRpc3BsYXllZCBhcyB5ZWxsb3cuCisJICogc28gdGhlIGJsdWUgYXJyYXkgaXMgYWxsIDAgYW5kIHRoZSByZWQgYW5kIGdyZWVuIGFycmF5cworCSAqIGFyZSBhbGwgMjU1LiAgQnV0IHRoaXMgY291bGQgYmUgb3RoZXJ3aXNlIHNwZWNpZmllZCBpbiAKKwkgKiB0aGUgcHJvcGVydGllcyBmaWxlLiAgICAKKwkgKiAgIAorCSAqLworCXByaXZhdGUgaW50W10gcmVkID0gbnVsbCA7CisJcHJpdmF0ZSBpbnRbXSBncmVlbiA9IG51bGw7CisJcHJpdmF0ZSBpbnRbXSBibHVlID0gbnVsbDsKKwkvKioKKwkgKiByZWxhdGl2ZSBvciBhYnNvbHV0ZQorCSAqLworCXByaXZhdGUgU3RyaW5nIHR5cGUgPSAicmVsYXRpdmUiOworCQorCS8qKgorCSAqIElmIHNwZWNpZmllZCBjb3VsZCBiZSBzb21ldGhpbmcgbGlrZSAicG9wdWxhdGlvbi9zcSBrbSIKKwkgKiBDdXJyZW50bHkgbm90IHVzZWQuCisJICovCisJcHJpdmF0ZSBTdHJpbmcgdW5pdCA9IG51bGw7CisJCisJLyoqCisJICogTWFwIG9mIEFzcGVjdHMgdGhhdCBhcmUgdXNlZCAKKwkgKiAKKwkgKiBUaGUgS2V5IGlzIGEgU3RyaW5nIGNkb2RlIHZhbHVlIChsaWtlICJTIikgCisJICogVGhlIGVudHJpZXMgYXJlIEFzcGVjdCBpbnN0YW5jZXMuCisJICovCisJcHJpdmF0ZSBzdGF0aWMgTWFwPFN0cmluZyxBc3BlY3Q+IG1hcCA9IG51bGw7CisJLyoqCisJICogZGVmYXVsdCBBc3BlY3QgdG8gYmUgZGlzcGxheWVkIAorCSAqLworCXByaXZhdGUgc3RhdGljIFN0cmluZyBkZWZhdWx0QXNwZWN0ID0gIiI7CisJLyoqCisJICogQ2xhc3MgdGhhdCBpcyBjYWxsZWQgdG8gZ2VuZXJhdGUgdGhlIEtNTCBmaWxlIAorCSAqIHRvIGRpc3BsYXkgdGhlIGFzcGVjdHMuICAKKwkgKiBTZWUgSUtNTERpc3BsYXkuamF2YSBmb3IgcmVxdWlyZW1lbnRzIG9mIHRoZSBjbGFzcy4KKwkgKi8KKwlwcml2YXRlIHN0YXRpYyBTdHJpbmcga21sRGlzcGxheUNsYXNzID0gCisJCSJvcmcuZWNsaXBzZS5zdGVtLnVpLmdlLmttbC5LbWxEaXNwbGF5IjsKKwkKKwkvKioKKwkgKiBSZWZlcmVuY2UgdG8gdGhlIHByb3BlcnRpZXMgaW5zdGFuY2UgdXNlZCAKKwkgKiB0byBkZXRlcm1pbmUgdGhlIEFzcGVjdHMgdXNlZCBpbiB0aGlzIGltcGxlbWVudGF0aW9uCisJICovCisJcHJpdmF0ZSBzdGF0aWMgUHJvcGVydGllcyBwcm9wZXJ0aWVzID0gbmV3IFByb3BlcnRpZXMgKCk7CisJLyoqCisJICogSW5pdGlhbGl6YXRpb24gY29kZS4KKwkgKiBJdCByZWFkcyB0aGUgcHJvcGVydHkgZmlsZSBhbmQgY3JlYXRlcyB0aGUgQXNwZWN0cyAKKwkgKiBhbmQgdGhlbiBzdG9yZXMgZWFjaCBvbmUgaW4gYSBoYXNobWFwLgorCSAqIAorCSAqLworCXB1YmxpYyBzdGF0aWMgdm9pZCBzZXR1cCgpIHsKKwkJCisJCQorCQl0cnkgeworCQkJSW5wdXRTdHJlYW0gaW4gPSBBc3BlY3QuY2xhc3MuZ2V0UmVzb3VyY2VBc1N0cmVhbSAoUFJPUEVSVElFU19OQU1FKTsKKwkJCSBpZiAoaW4gIT0gbnVsbCkgewkJCQkKKwkJCQkgcHJvcGVydGllcy5sb2FkIChpbik7IC8vIENhbiB0aHJvdyBJT0V4Y2VwdGlvbgorCQkJCSBBc3BlY3QubWFwID0gbnVsbDsKKwkJCQkgZ2V0QXNwZWN0cyhwcm9wZXJ0aWVzKTsKKwkJCSB9IGVsc2UgeworCQkJCSBHRUxvZy5lcnJvcigiRmFpbGVkIHJlYWRpbmcgQXNwZWN0IHByb3BlcnRpZXMuICIrCisJCQkJCQkgUFJPUEVSVElFU19OQU1FICwgbnVsbCk7CisJCQkJLy8gdXNlIHRoZSBtYXAgdGhhdCB0aGF0IHdhcyBjb25zdHJ1Y3RlZCAKKwkJCQkgLy8gZHVyaW5nIGNsYXNzIGluaXRpYWxpemF0aW9uCisJCQkJIGlmIChBc3BlY3QubWFwID09IG51bGwpIHsKKwkJCQkJCW1hcCA9IG5ldyBIYXNoTWFwPFN0cmluZyxBc3BlY3Q+KDUpOwkKKwkJCQl9CisJCQkJCisJCQkgfQorCQl9IGNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7CisJCQkKKwkJCWUucHJpbnRTdGFja1RyYWNlKCk7CisJCX0KKwl9CisJLyoqCisJICogUmVhZCB0aGUgUHJvcGVydGllcyBmcm9tIHRoZSBQcm9wZXJ0aWVzIGluc3RhbmNlIHRoYXQKKwkgKiB3YXMgcmVhZCBmcm9tIHRoZSBhc3BlY3QucHJvcGVydGllcyBmaWxlIGFuZCBjcmVhdGUgYQorCSAqICBNYXAgb2YgQXNwZWN0cy4KKwkgKiAKKwkgKiBAcGFyYW0gcHJvcGVydGllcyAgY29sbGV0aW9uIG9mIHByb3BlcnRpZXMKKwkgKi8KKwlwcml2YXRlIHN0YXRpYyB2b2lkIGdldEFzcGVjdHMoUHJvcGVydGllcyBwcm9wZXJ0aWVzKSB7CisJCVN0cmluZyBsaXN0ID0gcHJvcGVydGllcy5nZXRQcm9wZXJ0eSgiQXNwZWN0cyIsIlMsRSxJLFIiKTsKKwkJU3RyaW5nVG9rZW5pemVyIHRva2VucyA9IG5ldyBTdHJpbmdUb2tlbml6ZXIobGlzdCwiLCIpOworCQl3aGlsZSAodG9rZW5zLmhhc01vcmVUb2tlbnMoKSkgeworCQkJU3RyaW5nIHRva2VuID0gdG9rZW5zLm5leHRUb2tlbigpOworCQkJaWYgKGRlZmF1bHRBc3BlY3QgPT0gbnVsbCB8fCBkZWZhdWx0QXNwZWN0Lmxlbmd0aCgpPT0wKSB7CisJCQkJLy8gbWFrZSAxc3QgQXNwZWN0IHRoZSBkZWZhdWx0IGRlZmF1bHQKKwkJCQlkZWZhdWx0QXNwZWN0ID0gdG9rZW47CisJCQl9CisJCQlTdHJpbmcgbmFtZSA9IHByb3BlcnRpZXMuZ2V0UHJvcGVydHkodG9rZW4rIi5uYW1lIixudWxsKTsKKwkJCUFzcGVjdCBhc3BlY3QgPSBuZXcgQXNwZWN0KHRva2VuLG5hbWUpOworCQkJCisJCQlTdHJpbmcgZGVzY3JpcHRpb24gPSAKKwkJCQlwcm9wZXJ0aWVzLmdldFByb3BlcnR5KHRva2VuKyIuZGVzY3JpcHRpb24iLG51bGwpOwkJCQorCQkJYXNwZWN0LnNldERlc2NyaXB0aW9uKGRlc2NyaXB0aW9uKTsKKwkJCVN0cmluZyByYW5nZSA9IHByb3BlcnRpZXMuZ2V0UHJvcGVydHkodG9rZW4rIi5yYW5nZSIsbnVsbCk7CisJCQlhc3BlY3Quc2V0UmFuZ2UocmFuZ2UpOworCQkJU3RyaW5nIG9wYWNpdHkgPSBwcm9wZXJ0aWVzLmdldFByb3BlcnR5KHRva2VuKyIub3BhY2l0eSIsbnVsbCk7CisJCQlhc3BlY3Quc2V0T3BhY2l0eShvcGFjaXR5KTsKKwkJCVN0cmluZyBjb2xvciA9IHByb3BlcnRpZXMuZ2V0UHJvcGVydHkodG9rZW4rIi5yZWQiLCIwIik7CisJCQlhc3BlY3Quc2V0UmVkKGNvbG9yKTsKKwkJCWNvbG9yID0gcHJvcGVydGllcy5nZXRQcm9wZXJ0eSh0b2tlbisiLmdyZWVuIiwiMCIpOworCQkJYXNwZWN0LnNldEdyZWVuKGNvbG9yKTsKKwkJCWNvbG9yID0gcHJvcGVydGllcy5nZXRQcm9wZXJ0eSh0b2tlbisiLmJsdWUiLCIwIik7CisJCQlhc3BlY3Quc2V0Qmx1ZShjb2xvcik7CisvLwkJCUdFTG9nLmRlYnVnKEFzcGVjdC5jbGFzcyx0b2tlbisiOiIrCisvLwkJCQkJIiAiK2FzcGVjdC5nZXRDb2RlKCkrIiAiK2FzcGVjdC5nZXROYW1lKCkrCisvLwkJCQkJIiAiK2FzcGVjdC5nZXRSYW5nZSgpKyIgIithc3BlY3QuZ2V0T3BhY2l0eSgpKTsKKwkJfQorCQlkZWZhdWx0QXNwZWN0ID0gcHJvcGVydGllcy5nZXRQcm9wZXJ0eSgiRGVmYXVsdCIsZGVmYXVsdEFzcGVjdCk7CisJCWttbERpc3BsYXlDbGFzcyA9IAorCQkJcHJvcGVydGllcy5nZXRQcm9wZXJ0eSgia21sRGlzcGxheSIsa21sRGlzcGxheUNsYXNzKTsKKwl9CisJLyoqCisJICogQ3JlYXRlIGFuIGluc3RhbmNlIG9mIEFzcGVjdCBhbmQgcGxhY2UgaXQgaW50byB0aGUgSGFzaG1hcC4KKwkgKiAKKwkgKiBAcGFyYW0gY29kZQorCSAqIEBwYXJhbSBuYW1lCisJICogQHBhcmFtIGlkIAorCSAqLworCXB1YmxpYyBBc3BlY3QoU3RyaW5nIGNvZGUsIFN0cmluZyBuYW1lKSB7CisJCXRoaXMuY29kZSA9IGNvZGU7CisJCXRoaXMubmFtZSA9IG5hbWU7CQkKKwkJLy8gc2V0IHNvbWUgZGVmYXVsdHMKKwkJaWYgKHJlZCA9PSBudWxsKQorCQkJc2V0UmVkKCIwIik7CisJCWlmIChncmVlbiA9PSBudWxsKQorCQkJc2V0R3JlZW4oIjAiKTsKKwkJaWYgKGJsdWUgPT0gbnVsbCkKKwkJCXNldEJsdWUoIjAiKTsKKwkJaWYgKEFzcGVjdC5tYXAgPT0gbnVsbCkgeworCQkJbWFwID0gbmV3IEhhc2hNYXA8U3RyaW5nLEFzcGVjdD4oNSk7CQorCQl9CisJCUFzcGVjdC5tYXAucHV0KGNvZGUsdGhpcyk7CisJfQorCisJLyoqCisJICogVmVyaWZ5IHRoYXQgdGhpcyBpbnN0YW5jZSBvZiBBc3BlY3QgbWFrZXMgZ29vZCBzZW5zZQorCSAqIGFuZCBmb2xsb3dzIGFsbCBvZiB0aGUgcnVsZXMuIAorCSAqIAorCSAqIEByZXR1cm4gdHJ1ZSBpZiBubyBwcm9ibGVtcyBmb3VuZAorCSAqICAgICAgICAgZmFsc2UgaWYgbm90ICAKKwkgKiAgICAgICAgIAorCSAqLworCXB1YmxpYyBib29sZWFuIGlzU2FuZSgpIHsKKwkJCisJCXRyeSB7CisJCQlBc3NlcnQuaXNOb3ROdWxsKHJhbmdlKTsKKwkJCWludCBuID0gcmFuZ2UubGVuZ3RoOworCQkJQXNzZXJ0LmlzVHJ1ZShvcGFjaXR5Lmxlbmd0aCA9PSBuLCJJbnZhbGlkIE9wYWNpdHkgZGltZW5zaW9uIik7CisJCQlBc3NlcnQuaXNUcnVlKHJlZC5sZW5ndGggPT0gbiwiSW52YWxpZCBDb2xvciBSZWQgZGltZW5zaW9uIik7CisJCQlBc3NlcnQuaXNUcnVlKGdyZWVuLmxlbmd0aCA9PSBuLCJJbnZhbGlkIENvbG9yIEJsdWUgZGltZW5zaW9uIik7CisJCQlBc3NlcnQuaXNUcnVlKGJsdWUubGVuZ3RoID09IG4sIkludmFsaWQgQ29sb3IgR3JlZW4gZGltZW5zaW9uIik7CisJCQkKKwkJfSBjYXRjaCAoUnVudGltZUV4Y2VwdGlvbiBlKSB7CQkJCisJCQllLnByaW50U3RhY2tUcmFjZSgpOworCQkJcmV0dXJuIGZhbHNlOworCQl9CisJCXJldHVybiB0cnVlOworCX0KKwkvKioKKwkgKiBSZXR1cm4gdGhlIEFzcGVjdCB0aGF0IGlzIGFzc29jaWF0ZWQgd2l0aCB0aGUgc3BlY2lmaWVkCisJICogY29kZS4gIFJldXJuIGRlZmF1bHRBc3BlY3QgaWYgdW5rbm93bi4KKwkgKiAKKwkgKiBAcGFyYW0gY29kZQorCSAqIEByZXR1cm4gc3BlY2lmaWVkIGFzcGVjdAorCSAqLworCXB1YmxpYyBzdGF0aWMgQXNwZWN0IGdldEFzcGVjdChTdHJpbmcgY29kZSkgeworCQlBc3BlY3QgYXNwZWN0ID0gbnVsbDsKKwkJaWYgKG1hcCA9PSBudWxsKSB7CisJCQlzZXR1cCgpOworCQl9CisJCWlmIChtYXAgIT0gbnVsbCkgeworCQkJYXNwZWN0ID0gbWFwLmdldChjb2RlKTsKKwkJCWlmIChhc3BlY3QgPT0gbnVsbCkgeworCQkJCWFzcGVjdCA9IG1hcC5nZXQoZGVmYXVsdEFzcGVjdCk7CisJCQl9CisJCX0gZWxzZSB7CQkJCisJCQlHRUxvZy5lcnJvcigiSW52YWxpZCBjb25kaXRpb24uIEFzcGVjdCBtYXAgaXMgbnVsbCIsbnVsbCk7CisJCX0KKwkJcmV0dXJuIGFzcGVjdDsKKwl9CisJLyoqCisJICogVGVzdCBpZiBzcGVjaWZpZWQgYXNwZWN0IGNvZGUgaXMgaW4gdGhlIG1hcCBvZiBhc3BlY3RzLgorCSAqCisJICogCisJICogQHBhcmFtIGFzcGVjdENvZGUgIAorCSAqIEByZXR1cm4gdHJ1ZSBpZiB0aGUgc3BlY2lmaWVkIGFzcGVjdCBjb2RlIGlzIGluIHRoZSBtYXAKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGJvb2xlYW4gZXhpc3RzKFN0cmluZyBhc3BlY3RDb2RlKSB7CisJCXJldHVybiBtYXAuY29udGFpbnNLZXkoYXNwZWN0Q29kZSk7CisJfQorCS8qKgorCSAqIEByZXR1cm4gdGhlIG1hcAorCSAqLworCXB1YmxpYyBzdGF0aWMgTWFwPFN0cmluZywgQXNwZWN0PiBnZXRNYXAoKSB7CisJCXJldHVybiBtYXA7CisJfQorCS8qKgorCSAqIEBwYXJhbSBtYXAgdGhlIG1hcCB0byBzZXQKKwkgKi8KKwlwdWJsaWMgc3RhdGljIHZvaWQgc2V0TWFwKE1hcDxTdHJpbmcsIEFzcGVjdD4gbWFwKSB7CisJCUFzcGVjdC5tYXAgPSBtYXA7CisJfQorCisJCisJLyoqCisJICogQHJldHVybiB0aGUgY29kZQorCSAqLworCXB1YmxpYyBTdHJpbmcgZ2V0Q29kZSgpIHsKKwkJcmV0dXJuIGNvZGU7CisJfQorCisJLyoqCisJICogQHBhcmFtIG5ld2NvZGUgdGhlIGNvZGUgdG8gc2V0CisJICovCisJcHVibGljIHZvaWQgc2V0Q29kZShTdHJpbmcgbmV3Y29kZSkgeworCQltYXAucmVtb3ZlKHRoaXMuY29kZSk7CisJCXRoaXMuY29kZSA9IG5ld2NvZGU7CisJCW1hcC5wdXQobmV3Y29kZSwgdGhpcyk7CisJfQorCisJCisKKwkvKioKKwkgKiBAcmV0dXJuIHRoZSBuYW1lCisJICovCisJcHVibGljIFN0cmluZyBnZXROYW1lKCkgeworCQlyZXR1cm4gbmFtZTsKKwl9CisKKwkvKioKKwkgKiBAcGFyYW0gbmFtZSB0aGUgbmFtZSB0byBzZXQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXROYW1lKFN0cmluZyBuYW1lKSB7CisJCXRoaXMubmFtZSA9IG5hbWU7CisJfQorCQorCS8qKgorCSAqIFJldHVybiB0aGUgY29kZSB0aGF0IHRoaXMgQXNwZWN0IHJlcHJlc2VudHMuCisJICogICBGb3IgRXhhbXBsZSAiRSIgZm9yIEV4cG9zZWQuCisJICovCisJcHVibGljIFN0cmluZyB0b1N0cmluZygpIHsKKwkJcmV0dXJuIGNvZGU7CisJfQorCisJCisKKwkvKioKKwkgKiBAcmV0dXJuIHRoZSBkZXNjcmlwdGlvbgorCSAqLworCXB1YmxpYyBTdHJpbmcgZ2V0RGVzY3JpcHRpb24oKSB7CisJCWlmIChkZXNjcmlwdGlvbiA9PSBudWxsKSAKKwkJCXJldHVybiBuYW1lOworCQlyZXR1cm4gZGVzY3JpcHRpb247CisJfQorCisJLyoqCisJICogQHBhcmFtIGRlc2NyaXB0aW9uIHRoZSBkZXNjcmlwdGlvbiB0byBzZXQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXREZXNjcmlwdGlvbihTdHJpbmcgZGVzY3JpcHRpb24pIHsKKwkJdGhpcy5kZXNjcmlwdGlvbiA9IGRlc2NyaXB0aW9uOworCX0KKworCS8qKgorCSAqIEByZXR1cm4gdGhlIHJhbmdlCisJICovCisJcHVibGljIGRvdWJsZVtdIGdldFJhbmdlKCkgeworCQlyZXR1cm4gcmFuZ2U7CisJfQorCS8qKgorCSAqIEdldCBhIHNwZWNpZmljIGVudHJ5IGluIHRoZSBhcnJheSBvZiByYW5nZSB2YWx1ZXMKKwkgKiBAcGFyYW0gbiAgZW50cnkgd2l0aGluIHRoZSBhcnJheSAKKwkgKiBAcmV0dXJuIHRoZSByYW5nZSBlbnRyeSBpbiBsaXN0CisJICovCisJcHVibGljIGRvdWJsZSBnZXRSYW5nZShpbnQgbikgeworCQlyZXR1cm4gcmFuZ2Vbbl07CisJfQorCS8qKgorCSAqIFNldCB0aGUgcmFuZ2Ugb2YgdmFsdWVzIHVzZWQgdG8gZGlzcGxheSB2YWx1ZS4KKwkgKiBJdCBpcyBnaXZlbiBhcyBhIFN0cmluZyBvZiAsIHNlcGFyYXRlZCB2YWx1ZXMKKwkgKiBhbmQgY29udmVydGVkIHRvIGFuIGFycmF5IG9mIGRvdWJsZXMKKwkgKiAKKwkgKiBAcGFyYW0gcmFuZ2UgdGhlIHJhbmdlIHRvIHNldAorCSAqLworCXB1YmxpYyB2b2lkIHNldFJhbmdlKFN0cmluZyByYW5nZSkgeworCQlpZiAocmFuZ2UgPT0gbnVsbCkgeworCQkJdGhpcy5yYW5nZSA9IERFRkFVTFRfUkFOR0U7CisJCQlyZXR1cm47CisJCX0KKwkJU3RyaW5nVG9rZW5pemVyIHRva2VucyA9IG5ldyBTdHJpbmdUb2tlbml6ZXIocmFuZ2UsIiwiKTsKKwkJCisJCWludCBuID0gdG9rZW5zLmNvdW50VG9rZW5zKCk7CisJCXRoaXMucmFuZ2UgPSBuZXcgZG91YmxlW25dOworCQlmb3IgKGludCBpPTA7IGk8bjsgaSsrKSB7CisJCQlkb3VibGUgdmFsdWUgPSBEb3VibGUucGFyc2VEb3VibGUodG9rZW5zLm5leHRUb2tlbigpLnRyaW0oKSk7CisJCQl0aGlzLnJhbmdlW2ldID0gdmFsdWU7CisJCQkKKwkJfQorCQkKKwl9CisJCisJLyoqCisJICogQHJldHVybiB0aGUgb3BhY2l0eSBhcnJheQorCSAqLworCXB1YmxpYyBpbnRbXSBnZXRPcGFjaXR5KCkgeworCQlyZXR1cm4gb3BhY2l0eTsKKwl9CisJLyoqCisJICogQHBhcmFtIG4gZW50cnkgdGhlIGxpc3QgdG8gZ2V0CisJICogQHJldHVybiB0aGUgb3BhY2l0eQorCSAqLworCXB1YmxpYyBpbnQgZ2V0T3BhY2l0eShpbnQgbikgeworCQlyZXR1cm4gb3BhY2l0eVtuXTsKKwl9CisJLyoqCisJICogU2V0IHRoZSBPcGFjaXR5IG9mIHRoZSBkaXNwbGF5ZWQgcG9seWdvbnMKKwkgKiBiYXNlZCBvbiB0aGUgcmFuZ2Ugb2YgdmFsdWVzLiAgCisJICogSXQgaXMgZ2l2ZW4gYXMgYSBTdHJpbmcgYW5kIGNvbnZlcnRlZCB0byAKKwkgKiBhbiBhcnJheSBvZiBpbnRzIHRoYXQgaXMgdGhlIHNhbWUgc2l6ZSBhcyAKKwkgKiByYW5nZS4gIElmIExlc3MgdmFsdWVzIHNwZWNpZmllZCwgdGhlbiBsYXN0IAorCSAqIHZhbHVlIHdpbGwgYmUgcmVwZWF0ZWQuCisJICogQHBhcmFtIG9wYWNpdHkgY29tbWEgc2VwYXJhdGVkIGxpc3QKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRPcGFjaXR5KFN0cmluZyBvcGFjaXR5KSB7CisJCWludCBuID0gZ2V0UmFuZ2UoKS5sZW5ndGg7CisJCXRoaXMub3BhY2l0eSA9IG5ldyBpbnRbbl07CisJCWlmIChvcGFjaXR5ID09IG51bGwpIHsJCisJCQl0aGlzLm9wYWNpdHlbMF0gPSAwOworCQkJZm9yIChpbnQgaT0xO2k8bjtpKyspIHsKKwkJCQl0aGlzLm9wYWNpdHlbaV0gPSBERUZBVUxUX09QQUNJVFlbaV07CisJCQl9CisJCQlyZXR1cm47CisJCX0gCisJCVN0cmluZ1Rva2VuaXplciB0b2tlbnMgPSBuZXcgU3RyaW5nVG9rZW5pemVyKG9wYWNpdHksIiwiKTsJCQorCQkKKwkJaW50IHZhbHVlID0gMDsKKwkJZm9yIChpbnQgaT0wOyBpPG47IGkrKykgeworCQkJaWYgKHRva2Vucy5oYXNNb3JlVG9rZW5zKCkpIHsKKwkJCSAgdmFsdWUgPSBJbnRlZ2VyLnBhcnNlSW50KHRva2Vucy5uZXh0VG9rZW4oKS50cmltKCkpOworCQkJfQorCQkJdGhpcy5vcGFjaXR5W2ldID0gdmFsdWU7CQkJCisJCX0KKwkJCisJfQorCisKKwkvKioKKwkgKiBTZXQgdGhlIENvbG9yIG9mIHRoZSBkaXNwbGF5ZWQgcG9seWdvbnMKKwkgKiBiYXNlZCBvbiB0aGUgcmFuZ2Ugb2YgdmFsdWVzLiAgCisJICogSXQgaXMgZ2l2ZW4gYXMgYSBTdHJpbmcgYW5kIGNvbnZlcnRlZCB0byAKKwkgKiBhbiBhcnJheSBvZiBpbnRzIHRoYXQgaXMgdGhlIHNhbWUgc2l6ZSBhcyAKKwkgKiByYW5nZS4gIElmIExlc3MgdmFsdWVzIHNwZWNpZmllZCwgdGhlbiBsYXN0IAorCSAqIHZhbHVlIHdpbGwgYmUgcmVwZWF0ZWQuCisJICogQHBhcmFtIGNvbG9yIHJhbmdlIG9mIGNvbG9ycyAKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRSZWQoU3RyaW5nIGNvbG9yKSB7CisJCWludCBuID0gZ2V0UmFuZ2UoKS5sZW5ndGg7CisJCXRoaXMucmVkID0gbmV3IGludFtuXTsKKwkJaWYgKGNvbG9yID09IG51bGwpIHsJCQkKKwkJCWZvciAoaW50IGk9MDtpPG47aSsrKSB7CisJCQkJdGhpcy5yZWRbaV0gPSAwOworCQkJfQorCQkJcmV0dXJuOworCQl9IAorCQlTdHJpbmdUb2tlbml6ZXIgdG9rZW5zID0gbmV3IFN0cmluZ1Rva2VuaXplcihjb2xvciwiLCIpOwkJCisJCWludCB2YWx1ZSA9IDA7CisJCWZvciAoaW50IGk9MDsgaTxuOyBpKyspIHsKKwkJCWlmICh0b2tlbnMuaGFzTW9yZVRva2VucygpKSB7CisJCQkgIHZhbHVlID0gSW50ZWdlci5wYXJzZUludCh0b2tlbnMubmV4dFRva2VuKCkudHJpbSgpKTsKKwkJCX0KKwkJCXRoaXMucmVkW2ldID0gdmFsdWU7CQkJCisJCX0JCQorCX0KKwkvKioKKwkgKiBTZXQgdGhlIENvbG9yIG9mIHRoZSBkaXNwbGF5ZWQgcG9seWdvbnMKKwkgKiBiYXNlZCBvbiB0aGUgcmFuZ2Ugb2YgdmFsdWVzLiAgCisJICogSXQgaXMgZ2l2ZW4gYXMgYSBTdHJpbmcgYW5kIGNvbnZlcnRlZCB0byAKKwkgKiBhbiBhcnJheSBvZiBpbnRzIHRoYXQgaXMgdGhlIHNhbWUgc2l6ZSBhcyAKKwkgKiByYW5nZS4gIElmIExlc3MgdmFsdWVzIHNwZWNpZmllZCwgdGhlbiBsYXN0IAorCSAqIHZhbHVlIHdpbGwgYmUgcmVwZWF0ZWQuCisJICogQHBhcmFtIGNvbG9yIHJhbmdlIG9mIGNvbG9ycyAKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRHcmVlbihTdHJpbmcgY29sb3IpIHsKKwkJaW50IG4gPSBnZXRSYW5nZSgpLmxlbmd0aDsKKwkJdGhpcy5ncmVlbiA9IG5ldyBpbnRbbl07CisJCWlmIChjb2xvciA9PSBudWxsKSB7CQkJCisJCQlmb3IgKGludCBpPTA7aTxuO2krKykgeworCQkJCXRoaXMuZ3JlZW5baV0gPSAwOworCQkJfQorCQkJcmV0dXJuOworCQl9IAorCQlTdHJpbmdUb2tlbml6ZXIgdG9rZW5zID0gbmV3IFN0cmluZ1Rva2VuaXplcihjb2xvciwiLCIpOwkJCisJCWludCB2YWx1ZSA9IDA7CisJCWZvciAoaW50IGk9MDsgaTxuOyBpKyspIHsKKwkJCWlmICh0b2tlbnMuaGFzTW9yZVRva2VucygpKSB7CisJCQkgIHZhbHVlID0gSW50ZWdlci5wYXJzZUludCh0b2tlbnMubmV4dFRva2VuKCkudHJpbSgpKTsKKwkJCX0KKwkJCXRoaXMuZ3JlZW5baV0gPSB2YWx1ZTsJCQkKKwkJfQkJCisJfQorCQorCS8qKgorCSAqIFNldCB0aGUgQ29sb3Igb2YgdGhlIGRpc3BsYXllZCBwb2x5Z29ucworCSAqIGJhc2VkIG9uIHRoZSByYW5nZSBvZiB2YWx1ZXMuICAKKwkgKiBJdCBpcyBnaXZlbiBhcyBhIFN0cmluZyBhbmQgY29udmVydGVkIHRvIAorCSAqIGFuIGFycmF5IG9mIGludHMgdGhhdCBpcyB0aGUgc2FtZSBzaXplIGFzIAorCSAqIHJhbmdlLiAgSWYgTGVzcyB2YWx1ZXMgc3BlY2lmaWVkLCB0aGVuIGxhc3QgCisJICogdmFsdWUgd2lsbCBiZSByZXBlYXRlZC4KKwkgKiBAcGFyYW0gY29sb3IgcmFuZ2Ugb2YgY29sb3JzIAorCSAqLworCXB1YmxpYyB2b2lkIHNldEJsdWUoU3RyaW5nIGNvbG9yKSB7CisJCWludCBuID0gZ2V0UmFuZ2UoKS5sZW5ndGg7CisJCXRoaXMuYmx1ZSA9IG5ldyBpbnRbbl07CisJCWlmIChjb2xvciA9PSBudWxsKSB7CQkJCisJCQlmb3IgKGludCBpPTA7aTxuO2krKykgeworCQkJCXRoaXMuYmx1ZVtpXSA9IDA7CisJCQl9CisJCQlyZXR1cm47CisJCX0gCisJCVN0cmluZ1Rva2VuaXplciB0b2tlbnMgPSBuZXcgU3RyaW5nVG9rZW5pemVyKGNvbG9yLCIsIik7CQkKKwkJaW50IHZhbHVlID0gMDsKKwkJZm9yIChpbnQgaT0wOyBpPG47IGkrKykgeworCQkJaWYgKHRva2Vucy5oYXNNb3JlVG9rZW5zKCkpIHsKKwkJCSAgdmFsdWUgPSBJbnRlZ2VyLnBhcnNlSW50KHRva2Vucy5uZXh0VG9rZW4oKSk7CisJCQl9CisJCQl0aGlzLmJsdWVbaV0gPSB2YWx1ZTsJCQkKKwkJfQkJCisJfQorCQorCS8qKgorCSAqIEBwYXJhbSBuIGxpc3QgZW50cnkKKwkgKiBAcmV0dXJuIHRoZSBjb2xvciBlbnRyeQorCSAqLworCQorCXB1YmxpYyBpbnQgZ2V0UmVkKGludCBuKSB7CisJCXJldHVybiByZWRbbl07CisJfQorCQorCS8qKgorCSAqIEBwYXJhbSBuIGxpc3QgZW50cnkKKwkgKiBAcmV0dXJuIHRoZSBjb2xvciBlbnRyeQorCSAqLworCQorCXB1YmxpYyBpbnQgZ2V0R3JlZW4oaW50IG4pIHsKKwkJcmV0dXJuIGdyZWVuW25dOworCX0KKwkKKwkvKioKKwkgKiBAcGFyYW0gbiBsaXN0IGVudHJ5CisJICogQHJldHVybiB0aGUgY29sb3IgZW50cnkKKwkgKi8KKwkKKwlwdWJsaWMgaW50IGdldEJsdWUoaW50IG4pIHsKKwkJcmV0dXJuIGJsdWVbbl07CisJfQorCS8qKgorCSAqIEBwYXJhbSByYW5nZSB0aGUgcmFuZ2UgdG8gc2V0CisJICovCisJcHVibGljIHZvaWQgc2V0UmFuZ2UoZG91YmxlW10gcmFuZ2UpIHsKKwkJdGhpcy5yYW5nZSA9IHJhbmdlOworCX0KKworCS8qKgorCSAqIEByZXR1cm4gdGhlIHR5cGUKKwkgKi8KKwlwdWJsaWMgU3RyaW5nIGdldFR5cGUoKSB7CisJCXJldHVybiB0eXBlOworCX0KKworCS8qKgorCSAqIEBwYXJhbSB0eXBlIHRoZSB0eXBlIHRvIHNldAorCSAqLworCXB1YmxpYyB2b2lkIHNldFR5cGUoU3RyaW5nIHR5cGUpIHsKKwkJdGhpcy50eXBlID0gdHlwZTsKKwl9CisJLyoqCisJICogQHJldHVybiB0aGUgZGVmYXVsdCBBc3BlY3QKKwkgKi8KKwlwdWJsaWMgc3RhdGljIEFzcGVjdCBnZXREZWZhdWx0KCkgeworCQlTdHJpbmcgY29kZSA9IGdldERlZmF1bHRDb2RlKCk7CQkKKwkJcmV0dXJuIGdldEFzcGVjdChjb2RlKTsKKwl9CisJLyoqCisJICogQHJldHVybiB0aGUgZGVmYXVsdCBBc3BlY3QgY29kZQorCSAqLworCXB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldERlZmF1bHRDb2RlKCkgeworCQlyZXR1cm4gZGVmYXVsdEFzcGVjdDsKKwl9CisJLyoqCisJICogQHBhcmFtIGRlZmF1bHRBc3BlY3RDb2RlIHRoZSBhc3BlY3QgdG8gc2V0CisJICovCisJcHVibGljIHN0YXRpYyB2b2lkIHNldERlZmF1bHRDb2RlKFN0cmluZyBkZWZhdWx0QXNwZWN0Q29kZSkgeworCQlkZWZhdWx0QXNwZWN0ID0gZGVmYXVsdEFzcGVjdENvZGU7CisJfQorCS8qKgorCSAqIEByZXR1cm4gdGhlIHVuaXQKKwkgKi8KKwlwdWJsaWMgU3RyaW5nIGdldFVuaXQoKSB7CisJCXJldHVybiB1bml0OworCX0KKworCS8qKgorCSAqIEBwYXJhbSB1bml0IHRoZSB1bml0IHRvIHNldAorCSAqLworCXB1YmxpYyB2b2lkIHNldFVuaXQoU3RyaW5nIHVuaXQpIHsKKwkJdGhpcy51bml0ID0gdW5pdDsKKwl9CisJLyoqCisJICogQHJldHVybiB0aGUga21sRGlzcGxheUNsYXNzCisJICovCisJcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0S21sRGlzcGxheUNsYXNzKCkgeworCQlyZXR1cm4ga21sRGlzcGxheUNsYXNzOworCX0KKwkvKioKKwkgKiBAcmV0dXJuIHRoZSBwcm9wZXJ0aWVzCisJICovCisJcHVibGljIHN0YXRpYyBQcm9wZXJ0aWVzIGdldFByb3BlcnRpZXMoKSB7CisJCXJldHVybiBwcm9wZXJ0aWVzOworCX0KK30KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5nZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9nZS9HRURhdGEuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5nZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9nZS9HRURhdGEuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NWVjMWZmCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLmdlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL2dlL0dFRGF0YS5qYXZhCkBAIC0wLDAgKzEsMzUyIEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0udWkuZ2U7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLyAKK2ltcG9ydCBqYXZhLmF3dC5Qb2x5Z29uOworaW1wb3J0IGphdmEuYXd0LlJlY3RhbmdsZTsKK2ltcG9ydCBqYXZhLnRleHQuRGVjaW1hbEZvcm1hdDsKK2ltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuTWFwOworCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5hZGFwdGVycy5zcGF0aWFsLmdlby5MYXRMb25nOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuYWRhcHRlcnMuc3BhdGlhbC5nZW8uTGF0TG9uZy5TZWdtZW50OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udWkuZ2Uudmlld3MuR0VQcmVmZXJlbmNlUGFnZTsKKworCisKKy8qKgorICogU3RvcmUgaW5mbyBhYm91dCBhIGdlb2dyYXBoaWMgbG9jYXRpb24gYW5kIFNFSVIgc3RhdHVzIGluIFNURU0uCisgKiBJdCB3b3VsZCByZXByZXNlbnQgYW4gYXJlYSBzdWNoIGFzIGEgVVMgY291bnR5IGFuZAorICogY29udGFpbnMgYW4gaWQgYW5kIHRoZSBib3JkZXIgZXhwcmVzc2VkIGFzIG9uZSBvciBtb3JlCisgKiBsaXN0IG9mIHBvaW50cy4gIFRoZSBwb2ludHMgYXJlIExvbmdpdHVkZSBhbmQgbGF0aXR1ZGUuCisgKiAKKyAqIE5vdGUgdGhhdCAocGVyaGFwcyBmb3IgYW4gaXNsYW5kIGdyb3VwKSB0aGVyZSBtYXkgYmUgCisgKiBtb3JlIHRoYW4gMSBsaXN0IG9mIHBvaW50cy4KKyAqIAorICogSXQgYWxzbyBjb250YWlucyB0aGUgdmFsdWVzIGZvciB2YXJpb3VzIGFzcGVjdHMgcmVsYXRpdmUgdG8gUG9wdWxhdGlvbgorICogRm9yIFNFSVIgZGljZWFzZXMsIHRoZXNlIGFzcGVjdHMgd291bGQgYmUgU3VzY2VwdGlibGUsRXhwb3NlZCwKKyAqIEluZmVjdGlvdXMsIGFuZCBSZWNvdmVyZWQgIFRoZXJlIG1heSBiZSBtb3JlIG9yIGxlc3MgYXNwZWN0cy4KKyAqIFRoZXNlIGFyZSBzdG9yZWQgaW4gYSBNYXAga2V5ZWQgYnkgYXNwZWN0IGNvZGUuCisgKgorICovCitwdWJsaWMgY2xhc3MgR0VEYXRhIHsKKyAgICAvKioKKyAgICAgKiBOYW1lIG9mIHRoZSBBZG1pbiBhcmVhIGludm9sdmVkCisgICAgICovCisJcHJpdmF0ZSBTdHJpbmcgbmFtZSA9ICIiOworCS8qKgorCSAqIENhbiBiZSBzZXQgYnkgdGhlIGNyZWF0ZXIgd2l0aCBzZXREZXNjcmlwdGlvbi4KKwkgKiBVc3VhbGx5IHVzZWQgZm9yIHRoZSBsaXN0IG9mIHJlbGF0aXZlIHZhbHVlcworCSAqLworCXByaXZhdGUgU3RyaW5nIGRlc2NyaXB0aW9uID0gIiI7CisJCisJLyoqCisJICogdXNlZCB0byBzZXQgdGhlIGttbCBpZAorCSAqLworCXByaXZhdGUgU3RyaW5nIGlkID0gIiI7CisJLyoqIAorCSAqIHVzZWQgdG8gZm9ybWF0IHRoZSBsb25naXR1ZGUvbGF0aXR1ZGUgdmFsdWVzCisJICogZGVmYXVsdCBvZiBEZWNpbWFsRm9ybWF0KCkgd291bGQgcmVzdWx0IGluIDMgZGlnaXQgcHJlY2lzaW9uIAorCSAqLworCQorCXByaXZhdGUgc3RhdGljIGZpbmFsIERlY2ltYWxGb3JtYXQgZGYgPSBuZXcgRGVjaW1hbEZvcm1hdCgiIyMjIy4jIyIpOworCQorICAgIC8qKgorICAgICAqIEEgTGF0TG9uZyBpbnN0YW5jZSBpcyBhIGNvbGxlY3Rpb24gb2YgbGF0aXR1ZGUvbG9uZ2l0dWRlIGRhdGEgcGFpcnMgcGFydGl0aXRpb25lZAorICAgICAqIGludG8gb25lIG9yIG1vcmUgInNlZ21lbnRzIi4gRWFjaCBzZWdtZW50IGlzIGEgc2VxdWVuY2Ugb2YgbGF0aXR1ZGUvbG9uZ2l0dWRlCisgICAgICogZGF0YSBwYWlycy4gQSBzZWdtZW50IGNvdWxkIGZvcm0gYSBjbG9zZWQgcG9seWdvbiBvciBpdCBjb3VsZCBiZSBhIHBhdGguCisgICAgICogSW4gb3VyIGNhc2UgdGhpcyBzaG91bGQgYWx3YXlzIGJlIGEgY2xvc2VkIHBvbHlnb24uCisgICAgICogPHByZT4KKyAgICAgKiBFYWNoIExhdExvbmcgZGVzY3JpYmVzIDEgb3IgbW9yZSBwb2x5Z29uIGJvcmRlci4gVGhlcmUgbWF5IGJlIAorICAgICAqICAgbW9yZSB0aGFuIG9uZSBwb2x5Z29uIGluIHRoZSBjYXNlIG9mIGFuIGlzbGFuZCBvciAuLi4KKyAgICAgKiAKKyAgICAgKiAgPC9wcmU+CisgICAgICovCQorICAgIHByaXZhdGUgTGF0TG9uZyBwb2x5Z29ucyA9IG51bGw7CisgICAgCisgICAgLyoqCisgICAgICogQ29udGFpbnMgdGhlIGFzcGVjdCB2YWx1ZXMgZm9yIHRoZSBhcmVhCisgICAgICogS2V5ZWQgYnkgdGhlIGFzcGVjdCBjb2RlLiAKKyAgICAgKiBGb3IgRXhhbXBsZS4gd2l0aCBhbiBTRUlSIGRpc2Vhc2UgeW91IHdvdWxkIGhhdmUKKyAgICAgKiBrZXllZCBlbnRyaWVzIGZvciAiUyIsICJFIiwgIkkiIGFuZCAiUiIgICAKKyAgICAgKi8KKyAgICBwcml2YXRlIGZpbmFsIE1hcDxTdHJpbmcsRG91YmxlPiB2YWx1ZU1hcCA9IG5ldyBIYXNoTWFwPFN0cmluZyxEb3VibGU+KDgpOyAKKyAgICAvKioKKyAgICAgKiBCb3VuZGluZyBCb3ggZm9yIHRoaXMgTGF0TG9uZyBwb2x5Z29uLiAgCisgICAgICogSWYgTGF0TG9uZyBjb250YWlucyBtb3JlIHRoYW4gMSBwb2x5Z29uIHRoaXMgaXMgdGhlIAorICAgICAqIHVuaW9uIG9mIHRoZSBCb3VuZGluZ0JveCBmb3IgZWFjaCBwb2x5Z29uCisgICAgICovCisgICAgcHJpdmF0ZSBSZWN0YW5nbGUgYkJveCA9IG51bGw7CisgICAgCisgICAgcHJpdmF0ZSBkb3VibGVbXSBwbGFjZW1hcmsgPSBudWxsOworICAgIAorCS8qKgorCSAqIENyZWF0ZSBhbiBpbnN0YW5jZSBvZiBHRURhdGEgd2l0aCBMYXRMb25nCisJICogQHBhcmFtIG5hbWUKKwkgKiBAcGFyYW0gYXJlYXMKKwkgKi8KKwlwdWJsaWMgR0VEYXRhKFN0cmluZyBuYW1lLCBMYXRMb25nIGFyZWFzKSB7CisJCXN1cGVyKCk7CisJCXRoaXMubmFtZSA9IG5hbWU7CisJCXRoaXMuaWQgPSBuYW1lOworCQl0aGlzLnBvbHlnb25zID0gYXJlYXM7CisJCS8vaWYgKGFyZWFzLnNpemUoKSA+IDEpIHsKKwkJLy8JR0VMb2cuZGVidWcodGhpcyxuYW1lKyI6ICIrYXJlYXMuc2l6ZSgpKTsKKwkJLy99CisJCWlmIChHRVByZWZlcmVuY2VQYWdlLmlzQkJPWCgpKSB7CisJCQl0aGlzLmJCb3ggPSBnZXRCQm94KGFyZWFzKTsKKwkJfQorCQkKKwl9IAorCS8qKgorCSAqIENyZWF0ZSBhbiBpbnN0YW5jZSBvZiBHRURhdGEgd2l0aCBMYXRMb25nCisJICogQHBhcmFtIGlkICAgIGFkbWluIGFyZWEgaWQKKwkgKiBAcGFyYW0gbmFtZSAgYWRtaW4gYXJlYSBuYW1lCisJICogQHBhcmFtIGFyZWFzIGxhdC9sb25nIGJvcmRlciBvZiAxIG9mIG1vcmUgcG9seWdvbnMKKwkgKi8KKwlwdWJsaWMgR0VEYXRhKFN0cmluZyBpZCwgU3RyaW5nIG5hbWUsIExhdExvbmcgYXJlYXMpIHsKKwkJc3VwZXIoKTsKKwkJdGhpcy5uYW1lID0gbmFtZTsKKwkJdGhpcy5pZCA9IGlkOworCQl0aGlzLnBvbHlnb25zID0gYXJlYXM7CisJCS8vaWYgKGFyZWFzLnNpemUoKSA+IDEpIHsKKwkJLy8JR0VMb2cuZGVidWcodGhpcyxuYW1lKyI6ICIrYXJlYXMuc2l6ZSgpKTsKKwkJLy99CisJCWlmIChHRVByZWZlcmVuY2VQYWdlLmlzQkJPWCgpKSB7CisJCQl0aGlzLmJCb3ggPSBnZXRCQm94KGFyZWFzKTsKKwkJfQorCQkKKwl9IAorCS8qKgorCSAqIAorCSAqIGZvcm1hdCBuZWVkZWQgYnkgS01MIAorCSAqICAgIGxvbmcsbGF0IGxvbmcsbGF0IC4uLgorCSAqICAgIAorCSAqIEJ5IGRlZmF1bHQgRGVjaW1hbEZvcm1hdCB3aWxsIHJldHVybiAKKwkgKiBkb3VibGVzIGFzIG5ubm4uZGRkIAorCSAqICAgIAorCSAqIEBwYXJhbSBudW1BcmVhIE5vcm1hbGx5IDAgaWYganVzdCAxIGNvbnRhZ2lvdXMgYXJlYSAKKwkgKiAgICAgICAgICAgICAgICBidXQgaXQgY291bGQgYmUgYSBzZXQgb2YgaXNsYW5kcyBvcgorCSAqICAgICAgICAgICAgICAgIG90aGVyIG11bHRpcGxlIGFyZWFzLiAKKwkgKiBAcmV0dXJuIHRoZSBjb29yZGluYXRlcyBhcyBhIFN0cmluZyBpbiB0aGUgZm9ybQorCSAqICAgbG9uZzEsbGF0MSBsb25nMixsYXQyIC4uLgorCSAqLworCXB1YmxpYyBTdHJpbmcgZ2V0Q29vcmRpbmF0ZXNBc1N0cmluZyhpbnQgbnVtQXJlYSkgeworCQlTZWdtZW50IHNlZ21lbnQgPSBwb2x5Z29ucy5nZXRTZWdtZW50cygpLmdldChudW1BcmVhKTsJCQorCQkvLyB3ZSBkb24ndCBjYXJlIGFib3V0IGFsdGl0dWRlIAorCQkKKwkJU3RyaW5nQnVmZmVyIHN0cmJ1ZiA9IG5ldyBTdHJpbmdCdWZmZXIoNDAwKTsJCisJCWZpbmFsIGludCBzaXplID0gc2VnbWVudC5zaXplKCk7CisJCWZvciAoaW50IGk9MDsgaTwgc2l6ZTsgaSsrKSB7CQkJCisJCQlzdHJidWYuYXBwZW5kKGRmLmZvcm1hdChzZWdtZW50LmxvbmdpdHVkZShpKSkpOworCQkJc3RyYnVmLmFwcGVuZCgiLCIpOworCQkJc3RyYnVmLmFwcGVuZChkZi5mb3JtYXQoc2VnbWVudC5sYXRpdHVkZShpKSApKTsKKwkJCXN0cmJ1Zi5hcHBlbmQoIiAiKTsKKwkJfQorCQlyZXR1cm4gc3RyYnVmLnRvU3RyaW5nKCk7CisJfQorCS8qKgorCSAqIAorCSAqR2V0IHRoZSBhc3BlY3QgdmFsdWVzIGFzIGEgU3RyaW5nCisJICogICAgICAgIAorCSAqIAorCSAqIEByZXR1cm4gdGhlIHZhbHVlcyBhcyBhIFN0cmluZyBpbiB0aGUgZm9ybQorCSAqICAgYTE6IHYxIGEyOnYyIC4uLgorCSAqLworCXB1YmxpYyBTdHJpbmcgZ2V0VmFsdWVzQXNTdHJpbmcoKSB7CisJCQkJCisJCVN0cmluZ0J1ZmZlciBzdHJidWYgPSBuZXcgU3RyaW5nQnVmZmVyKDY0KTsKKwkJZm9yKE1hcC5FbnRyeTxTdHJpbmcsIERvdWJsZT4gZW50cnk6IHZhbHVlTWFwLmVudHJ5U2V0KCkgKSB7CisJCSAgICBzdHJidWYuYXBwZW5kKGVudHJ5LmdldEtleSgpKTsKKwkJCXN0cmJ1Zi5hcHBlbmQoIjoiKTsKKwkJCXN0cmJ1Zi5hcHBlbmQoZGYuZm9ybWF0KGVudHJ5LmdldFZhbHVlKCkpKTsKKwkJCXN0cmJ1Zi5hcHBlbmQoIiAiKTsKKwkJfQorCQkKKwkJCisJCXJldHVybiBzdHJidWYudG9TdHJpbmcoKTsKKwl9CisKKwkvKioKKwkgKiBnZXQgdGhlIG51bWJlciBvZiBhcmVhcyBkZXNjcmliZWQgYnkgdGhlIGdlb2dyYXBoaWMgcG9pbnRzLgorCSAqIAorCSAqIEByZXR1cm4gbnVtYmVyIG9mIHBvbHlnb25zIGRlc2NyaWJlZAorCSAqLworICAgIHB1YmxpYyBpbnQgZ2V0TnVtQXJlYXMoKSB7CisgICAgCWlmIChwb2x5Z29ucyAhPSBudWxsKQorICAgIAkgIHJldHVybiBwb2x5Z29ucy5zaXplKCk7CisgICAgCWVsc2UgCisgICAgCSAgcmV0dXJuIDA7CisgICAgfQorCS8qKgorCSAqIEByZXR1cm4gdGhlIG5hbWUKKwkgKi8KKwlwdWJsaWMgU3RyaW5nIGdldE5hbWUoKSB7CisJCXJldHVybiBuYW1lOworCX0KKwkvKioKKwkgKiBAcmV0dXJuIHRoZSBiQm94IHJlY3RhbmdsZQorCSAqLworCXB1YmxpYyBSZWN0YW5nbGUgZ2V0QkJveCgpIHsKKwkJcmV0dXJuIGJCb3g7CisJfQorCS8qKgorCSAqIEBwYXJhbSBuYW1lIHRoZSBuYW1lIHRvIHNldAorCSAqLworCXB1YmxpYyB2b2lkIHNldE5hbWUoU3RyaW5nIG5hbWUpIHsKKwkJdGhpcy5uYW1lID0gbmFtZTsKKwl9CisKKwkvKioKKwkgKiBAcmV0dXJuIHRoZSBpZAorCSAqLworCXB1YmxpYyBTdHJpbmcgZ2V0SWQoKSB7CisJCXJldHVybiBpZDsKKwl9CisKKwkvKioKKwkgKiBAcGFyYW0gaWQgdGhlIGlkIHRvIHNldAorCSAqLworCXB1YmxpYyB2b2lkIHNldElkKFN0cmluZyBpZCkgeworCQl0aGlzLmlkID0gaWQ7CisJfQorCQorCS8qKgorCSAqIHNldCB0aGUgY29vcmRpbmF0ZXMgb2YgYSBwb2ludCB3aXRoaW4gYSBwb2x5Z29uCisJICogQHBhcmFtIGxhdGl0dWRlCisJICogQHBhcmFtIGxvbmdpdHVkZQorCSAqLworCXB1YmxpYyB2b2lkIHNldFBvaW50KGRvdWJsZSBsYXRpdHVkZSwgZG91YmxlIGxvbmdpdHVkZSkgeworCQlwbGFjZW1hcmsgPSBuZXcgZG91YmxlWzJdOworCQlwbGFjZW1hcmtbMF0gPSBsYXRpdHVkZTsKKwkJcGxhY2VtYXJrWzFdID0gbG9uZ2l0dWRlOworCX0KKwkvKioKKwkgKiBSZXR1cm4gdGhlIGNvb3JkaWFudGVzIG9mIGEgcG9pbnQgCisJICogCisJICogQHJldHVybiBEb3VibGVbXSBvciBudWxsCisJICovCisJcHVibGljIGRvdWJsZVtdIGdldFBvaW50KCkgeworCQlyZXR1cm4gcGxhY2VtYXJrOworCX0KKwkKKwkvKioKKwkgKiBHaXZlbiBhIExhdExvbmcsIGdlbmVyYXRlIHRoZSBvdmVyYWxsIEJvdW5kaW5nQm94ZXMuCisJICogCisJICogQHBhcmFtIGxhdExvbmcKKwkgKiBAcmV0dXJuIFJlY3RhbmdsZQorCSAqLworCXByaXZhdGUgc3RhdGljIFJlY3RhbmdsZSBnZXRCQm94KExhdExvbmcgbGF0TG9uZykgeworCQkKKwkJTGlzdDxTZWdtZW50PiBsaXN0ID0gbGF0TG9uZy5nZXRTZWdtZW50cygpOworCQlpbnQgbnVtYXJlYXMgPSBsaXN0LnNpemUoKTsKKwkJUmVjdGFuZ2xlIGJCb3ggPSBudWxsOworCQlmb3IgKGludCBpPTA7IGk8bnVtYXJlYXM7IGkrKykgeworCQkJZmluYWwgUG9seWdvbiBwb2x5Z29uID0gbmV3IFBvbHlnb24oKTsKKwkJCWZpbmFsIFNlZ21lbnQgc2VnbWVudCA9IGxpc3QuZ2V0KGkpOworCQkJZmluYWwgaW50IHNpemUgPSBzZWdtZW50LnNpemUoKTsKKwkJCWZvciAoaW50IHA9MDsgcDwgc2l6ZTsgcCsrKSB7CisJCQkJZG91YmxlIHggPSBzZWdtZW50LmxvbmdpdHVkZShwKTsKKwkJCQlkb3VibGUgeSA9IHNlZ21lbnQubGF0aXR1ZGUocCk7CisJCQkJaW50IHhpbnQgPSAoaW50KSgoeCsxODApKjEwMDApOworCQkJCWludCB5aW50ID0gKGludCkoKHkrOTApKjEwMDApOworCQkJCXBvbHlnb24uYWRkUG9pbnQoeGludCwgeWludCk7CisJCQl9IC8vIGZvcgorCQkJCisJCQlpZiAoYkJveCA9PSBudWxsKQorCQkJCWJCb3ggPSBwb2x5Z29uLmdldEJvdW5kcygpOworCQkJZWxzZSAKKwkJCQliQm94ID0gYkJveC51bmlvbihwb2x5Z29uLmdldEJvdW5kcygpKTsKKwkJfQorCQkgICAKKwkJcmV0dXJuIGJCb3g7CisJfQorCQorCQorCS8qKgorCSAqIGRlYnVnIGhlbHBlcgorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKSB7CisJCVN0cmluZ0J1ZmZlciBzYiA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKKwkJc2IuYXBwZW5kKCJHRURhdGE6ICIpOworCQlzYi5hcHBlbmQodGhpcy5nZXRWYWx1ZXNBc1N0cmluZygpKTsKKwkJc2IuYXBwZW5kKCIgQkJveDoiK2JCb3gpOworCQlzYi5hcHBlbmQoIiA6ICIpOworCQlmb3IgKGludCBpPTA7IGk8IHBvbHlnb25zLnNpemUoKTsgaSsrKSB7CQkJCisJCQlzYi5hcHBlbmQodGhpcy5nZXRDb29yZGluYXRlc0FzU3RyaW5nKGkpKTsKKwkJfQorCQkJCQorCQlyZXR1cm4gc2IudG9TdHJpbmcoKTsKKwl9CisKKwkvKioKKwkgKiBAcmV0dXJuIHRoZSB2YWx1ZU1hcCBmb3IgdGhlIHNwZWNpZmllZCBhcmVhIHNvIAorCSAqIHdlIGNhbiBzdG9yZSB2YWx1ZXMgaW50byBpdC4KKwkgKi8KKwlwdWJsaWMgTWFwPFN0cmluZyxEb3VibGU+IGdldFZhbHVlTWFwKCkgeworCQlyZXR1cm4gdmFsdWVNYXA7CisJfQorCS8qKgorCSAqIEBwYXJhbSBhc3BlY3QgCisJICogQHJldHVybiB0aGUgdmFsdWUgZm9yIHRoZSBzcGVjaWZpZWQgYWxwZWN0CisJICovCisJcHVibGljIGRvdWJsZSBnZXRWYWx1ZShBc3BlY3QgYXNwZWN0KSB7CisJCXJldHVybiB2YWx1ZU1hcC5nZXQoYXNwZWN0LmdldENvZGUoKSk7CisJfQorCQorCS8qKgorCSAqIFN0b3JlIHRoZSB2YWx1ZSBpbiB0aGUgZGF0YSBzdG9yZSBmb3IgdGhlIGFyZWEuCisJICogCisJICogQHBhcmFtIGFzcGVjdCAgVGhlIGFzcGVjdCB0aGF0IHRoaXMgdmFsdWUgaXMgZm9yLiAKKwkgKiBAcGFyYW0gdmFsdWUgdGhlIHZhbHVlIGZvciB0aGUgc3BlY2lmaWVkIGFzcGVjdAorCSAqLworCXB1YmxpYyB2b2lkIHNldFZhbHVlKEFzcGVjdCBhc3BlY3QsIGRvdWJsZSB2YWx1ZSkgeworCQl2YWx1ZU1hcC5wdXQoYXNwZWN0LmdldENvZGUoKSx2YWx1ZSk7CisJfQorCisJLyoqCisJICogQHJldHVybiB0aGUgY2VudGVyIG9mIHRoZSBCQm94IGFzIGxvbmdpdHVkZSBhbmQgbGF0aXR1ZGUuCisJICovCisJcHVibGljIGRvdWJsZVtdIGdldEJCb3hDZW50ZXIoKSB7CisJCQorCQlpZiAoYkJveCA9PSBudWxsKSB7CisJCQliQm94ID0gZ2V0QkJveChwb2x5Z29ucyk7CisJCX0KKwkJaWYgKGJCb3ggIT0gbnVsbCApIHsKKyAgICAJCS8vIGNvbnZlcnQgYmFjayB0byBkb3VibGUgdmFsdWUuCisgICAgCQlkb3VibGUgbG9uZ2l0dWRlID0gYkJveC5nZXRDZW50ZXJYKCk7CisgICAgCQlsb25naXR1ZGUgPSAobG9uZ2l0dWRlLTE4MDAwMCkvMTAwMDsKKyAgICAJCWRvdWJsZSBsYXRpdHVkZSAgPSBiQm94LmdldENlbnRlclkoKTsKKyAgICAJCWxhdGl0dWRlID0gKGxhdGl0dWRlLTkwMDAwKS8xMDAwOworICAgIAkJCisgICAgCQlkb3VibGVbXSBjZW50ZXIgPSBuZXcgZG91YmxlW10ge2xvbmdpdHVkZSxsYXRpdHVkZX07CisgICAgCQlyZXR1cm4gY2VudGVyOworICAgIAl9IAorCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBAcmV0dXJuIHRoZSBkZXNjcmlwdGlvbgorCSAqLworCXB1YmxpYyBTdHJpbmcgZ2V0RGVzY3JpcHRpb24oKSB7CisJCXJldHVybiBkZXNjcmlwdGlvbjsKKwl9CisKKwkvKioKKwkgKiBAcGFyYW0gZGVzY3JpcHRpb24gdGhlIGRlc2NyaXB0aW9uIHRvIHNldAorCSAqLworCXB1YmxpYyB2b2lkIHNldERlc2NyaXB0aW9uKFN0cmluZyBkZXNjcmlwdGlvbikgeworCQl0aGlzLmRlc2NyaXB0aW9uID0gZGVzY3JpcHRpb247CisJfQorCit9CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkuZ2Uvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvZ2UvR0VJbnRlcmZhY2UuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5nZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9nZS9HRUludGVyZmFjZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU3OTgzM2YKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkuZ2Uvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvZ2UvR0VJbnRlcmZhY2UuamF2YQpAQCAtMCwwICsxLDE4NjggQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS51aS5nZTsKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLyAKK2ltcG9ydCBqYXZhLmlvLkZpbGU7CitpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247CitpbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7CitpbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOworaW1wb3J0IGphdmEudXRpbC5MaXN0OworaW1wb3J0IGphdmEudXRpbC5NYXA7CitpbXBvcnQgamF2YS51dGlsLlNldDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QcmVmZXJlbmNlczsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmllcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuVVJJOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5EdWJsaW5Db3JlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5HcmFwaDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguTm9kZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguTm9kZUxhYmVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5EZWNvcmF0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLk1vZGVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zY2VuYXJpby5TY2VuYXJpbzsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2VxdWVuY2VyLlNlcXVlbmNlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5Lkdlb2dyYXBoaWNOYW1lczsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmFkYXB0ZXJzLnJlbGF0aXZldmFsdWUuUmVsYXRpdmVWYWx1ZVByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuYWRhcHRlcnMucmVsYXRpdmV2YWx1ZS5SZWxhdGl2ZVZhbHVlUHJvdmlkZXJBZGFwdGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuYWRhcHRlcnMucmVsYXRpdmV2YWx1ZS5SZWxhdGl2ZVZhbHVlUHJvdmlkZXJBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmFkYXB0ZXJzLnNwYXRpYWwuZ2VvLkxhdExvbmc7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5hZGFwdGVycy5zcGF0aWFsLmdlby5MYXRMb25nLlNlZ21lbnQ7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5hZGFwdGVycy5zcGF0aWFsLmdlby5MYXRMb25nUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5hZGFwdGVycy5zcGF0aWFsLmdlby5MYXRMb25nUHJvdmlkZXJBZGFwdGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuYWRhcHRlcnMuc3BhdGlhbC5nZW8uTGF0TG9uZ1Byb3ZpZGVyQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5hZGFwdGVycy5zcGF0aWFsLmdlby5QbGF0Zm9ybUxhdExvbmdEYXRhUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5ub2Rlcy5pbXBsLlJlZ2lvbkltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5qb2JzLnByZWZlcmVuY2VzLlByZWZlcmVuY2VDb25zdGFudHM7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5qb2JzLnNpbXVsYXRpb24uSVNpbXVsYXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5qb2JzLnNpbXVsYXRpb24uSVNpbXVsYXRpb25MaXN0ZW5lcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmpvYnMuc2ltdWxhdGlvbi5JU2ltdWxhdGlvbk1hbmFnZXJMaXN0ZW5lcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmpvYnMuc2ltdWxhdGlvbi5TaW11bGF0aW9uRXZlbnQ7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5qb2JzLnNpbXVsYXRpb24uU2ltdWxhdGlvbk1hbmFnZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5qb2JzLnNpbXVsYXRpb24uU2ltdWxhdGlvbk1hbmFnZXJFdmVudDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmpvYnMuc2ltdWxhdGlvbi5TaW11bGF0aW9uU3RhdGU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS51aS5nZS5rbWwuS21sRGlzcGxheVNlbGVjdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnVpLmdlLmttbC5TdGVtS21sOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udWkuZ2Uudmlld3MuR0VQcmVmZXJlbmNlUGFnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnVpLmdlLnZpZXdzLkdFVmlldzsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnVpLnZpZXdzLmdlb2dyYXBoaWMubWFwLkdlb2dyYXBoaWNTZWxlY3Rpb25FbGVtZW50czsKKworCisKKy8qKgorICogVGhpcyBpcyB0aGUgU1RFTSBoYWxmIG9mIHRoZSBpbnRlcmZhY2UgYmV0d2VlbiAKKyAqIFNURU0gYW5kIEdvb2dsZUVhcnRoLgorICogCisgKiBJdCBsaXN0ZW5zIGZvciBTaW11bGF0aW9ucyB0byBiZSBhZGRlZCBvciBkZWxldGVkIGFuZCBtYWludGFpbnMgYSAKKyAqIGxpc3Qgb2Ygc2ltdWxhdGlvbnMuICBXaGVuIGEgc2ltdWxhdGlvbiBiZWNvbWVzIGFjdGl2ZSBpdCB0aGVuIAorICogbGlzdGVucyBmb3IgU2ltdWxhdGlvbiBldmVudHMuICAgCisgKiA8cD4KKyAqIFdoZW4gYSBzaW11bGF0aW9uIGN5Y2xlIGNvbXBsZXRlcywgd2UgYXJlIG5vdGlmaWVkIGFuZCAKKyAqIGl0IHdpbGwgdGFrZSB0aGUgU1RFTSBkYXRhIGFuZCBjYWxsIFN0ZW1LbWwgdG8gY29udmVydCAKKyAqIGl0IHRvIEtNTCBhbmQgZWl0aGVyIGxvZyBpdCB0byBhIHNldCBvZiBmaWxlcyBmb3IgbGF0ZXIgZGlzcGxheSAKKyAqIG9yIHNlbmQgaXQgZGlyZWN0bHkgdG8gR29vZ2xlRWFydGguCisgKiA8cD4KKyAqIFRoZSBvdmVyYWxsIHByb2Nlc3MgZmxvdyBpcyB0aGUgZm9sbG93aW5nOgorICogPHByZT4KKyAqICAgPGI+c2ltdWxhdGlvbnNDaGFuZ2VkOjwvYj4gTm90aWZpZWQgd2hlbiBhIG5ldyBTaW11bGF0aW9uIGlzIGFkZGVkCisgKiAgIG9yIHJlbW92ZWQuICBJZiBhZGRlZCB0aGVuIHNldEFjdGl2ZSgpIGlzIGNhbGxlZCB0byBhZGQgaXQgdG8gCisgKiAgIHRoZSBsaXN0IG9mIFNpbXVsYXRpb25zIGJlaW5nIGhhbmRsZWQuCisgKiAgIAorICogICA8Yj5zaW11bGF0aW9uQ2hhbmdlZDo8L2I+IE5vdGlmaWVkIHdoZW4gYSBjeWNsZSBlbmRzLiBJdCBjYWxscyAKKyAqICAgdGhlIHByb2Nlc3NDeWNsZSBtZXRob2QuCisgKiAgIAorICogICA8Yj5wcm9jZXNzQ3ljbGU8L2I+TWFpbiBwcm9jZXNzIHdoZW4gYSBwcm9jZXNzaW5nIGN5Y2xlIGVuZHMuCisgKiAgICAgCisgKiAgICAgPGI+YnVpbGRNYXAoKTwvYj4gY2FsbGVkIG9uIDFzdCBjeWNsZSB0byBidWlsZCBhIG1hcCBvZiAgCisgKiAgICAgR0VEYXRhIGluc3RhbmNlcyB0aGF0IGNvbnRhaW5zIHRoZSBnZW9ncmFwaGljIGRlc2NyaXB0aW9uIAorICogICAgIG9mIGVhY2ggY291bnR5L2FyZWFpZAorICogICAgIAorICogICAgIEl0IHRoZW4gdXNlcyB0aGUgUHJlZmVyZW5jZVBhZ2Ugb3B0aW9uIHRvIGRlY2lkZSBob3cgdG8gCisgKiAgICAgY29tdW5pY2F0ZSB3aXRoIEdvb2dsZUVhcnRoLiAgCisgKiAgICAgCisgKiAgICAgIDxiPnN0b3JlU0VJUigpPC9iPiBUaGlzIHVwZGF0ZXMgdGhlIEdFRGF0YSBpbnN0YW5jZXMgd2l0aCB0aGUgCisgKiAgICAgIHJlbGF0aXZlIGRpc2Vhc2Ugc3RhdGlzdGljcy4KKyAqICAgICAgCisgKiAgICAgIDxiPmdlbmVyYXRlS01MKCk8L2I+IFRoaXMgc2VuZHMgYWxsIHRoZSBpbmZvcm1hdGlvbiB0byB0aGUgCisgKiAgICAgIEdFSm9iIGluc3RhbmNlIHdoZXJlIGEgS01MIGZpbGUgZm9yIHRoaXMgY3lkbGUgaXMgd3JpdHRlbi4KKyAqICAgICAgCisgKiA8L3ByZT4KKyAqICAgIAorICovCisKK3B1YmxpYyBjbGFzcyBHRUludGVyZmFjZSAKKyAgICAgICAgICAgaW1wbGVtZW50cyBJU2ltdWxhdGlvbkxpc3RlbmVyLCBJU2ltdWxhdGlvbk1hbmFnZXJMaXN0ZW5lcnsKKwkJCisJIC8qKgorICAgICAqIHRlbXBsYXRlIGZvciB0aGUgS01MIGZpbGVuYW1lIHdyaXR0ZW4gb24gdGhlIAorICAgICAqIE50aCBjeWNsZSBmb3IgdHlwZSBUCisgICAgICovCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIGNvbnRyb2xUZW1wbGF0ZSA9ICJjb250cm9sXyZOXyZULmttbCI7CisgICAgCisgICAgCisJLyoqCisJICogTGlzdCBvZiBhY3RpdmUgc2ltdWxhdGlvbnMga2V5ZWQgYnkgTmFtZQorCSAqIAorCSAqIFRoZSBsaXN0IGlzIHVwZGF0ZWQgYnkgU2ltdWxhdGlvbk1hbmFnZXIgZXZlbnRzCisJICogdGhhdCBhZGQgb3IgcmVtb3ZlIHNpbXVsYXRpb25zLgorCSAqLworCXByaXZhdGUgTWFwPFN0cmluZyxHRVNpbUVudHJ5PiBhY3RpdmVTaW11bGF0aW9ucyA9IG51bGw7CisJCisJCisJLyoqCisJICogbWFwIG9mIGdlb2dyYXBoaWMgZGF0YSBrZXllZCBieSBhcmVhIGlkCisJICovCisJcHJpdmF0ZSBNYXA8U3RyaW5nLCBHRURhdGE+IHN0ZW1NYXAgPSBudWxsOworCQorCS8qKgorCSAqIEdFVmlldyBoYW5kbGVzIGFsbCB0aGUgZ3VpIHVpIGZvciB1cworCSAqLworCXByaXZhdGUgR0VWaWV3IGdlVmlldyA9IG51bGw7CisJCisJLyoqCisJICogVGhpcyB3aWxsIGNvbnRhaW4gdGhlIHNpbXVsYXRpb24gaWQgd2hlbiB0aGF0IHNpbXVsYXRpb24gCisJICogaXMgc2VuZGluZyBpdHMgS01MIHRvIEdvb2dsZUVhcnRoLiAgV2hlbiBpdCBpcyBmaWxsZWQKKwkgKiBpbiBhbnkgc3Vic2VxdWVudCByZXF1ZXN0cyB0byBsb2cgYW5kIHZpZXcgd2lsbCBvbmx5IGRvIGxvZ2dpbmcuCisJICogSXQgaXMgY2xlYXJlZCB3aGVuIHRoZSBzaW11bGF0aW9uIGlzIHJlbW92ZWQuCisJICovCisJcHJpdmF0ZSBTdHJpbmcgYWN0aXZlVmlldyA9IG51bGw7CisJCisJLyoqCisJICogd2hlbiBzZXQgdG8gYSBub2RlIG5hbWUgdGhlbiB0aGUgZGlzcGxheU1hcCBtZXRob2QKKwkgKiB3aWxsIG9ubHkgZGlzcGxheSB0aGF0IG5vZGUuCisJICovCisJcHJpdmF0ZSBTdHJpbmcgZGlzcGxheU5vZGUgPSBudWxsOworCS8qKgorCSAqIEN5Y2xlIGJlaW5nIHByb2Nlc3NlZC4KKwkgKi8KKwkvL3ByaXZhdGUgaW50IGN5Y2xlID0gMDsKKwkvKioKKwkgKiBUaGlzIG1hcCBpcyB1c2VkIHRvIGNvbGxlY3Qgbm9kZXMgdGhhdCBoYXZlIGJlZW4gCisJICogZGlzcGxheWVkIGJ5IHByZXZpb3VzIHJlcXVlc3RzIHNvIHRoYXQgdGhpcyBjYW4gCisJICogYmUgYW4gYWNjdW11bGF0aXZlIGRpc3BsYXkuICAKKwkgKi8KKwlwcml2YXRlIE1hcDxTdHJpbmcsR0VEYXRhPiBzdGVtTWFwTm9kZSA9IG51bGw7CisJLyoqCisJICogZGVmYXVsdCBBc3BlY3QgdG8gYmUgZGlzcGxheWVkIGZvciBzaW11bGF0aW9ucy4KKwkgKiBTZXQgYnkgR0VWaWV3IGNvbnRleHQgbWVudSB0byBvdmVycmlkZSAKKwkgKiB0aGUgZGVmYXVsdEFzcGVjdCBzcGVjaWZpZWQgaW4gQXNwZWN0LnByb3BlcnRpZXMKKwkgKi8KKwlwcml2YXRlIEFzcGVjdCBkZWZhdWx0QXNwZWN0ID0gbnVsbDsKKwkKKwkvKiogCisJICogcGxhY2UgdG8gc3RvcmUgYW4gZXJyb3IgbWVzc2FnZSBzbyB0aGUgY2FsbGVyIGNhbiBnZXQgaXQuCisJICovCisJcHJpdmF0ZSBTdHJpbmcgZXJyb3JNZXNzYWdlID0gbnVsbDsKKwkvKioKKwkgKiB3aGVuIHVzZXIgcmVxdWVzdHMgYSBtYW51YWwgZGlzcGxheSBvZiBtYXAKKwkgKiBzZXQgdGhpcyB0cnVlIAorCSAqLworCXByaXZhdGUgYm9vbGVhbiBtYW51YWxSZXF1ZXN0ID0gZmFsc2U7CisJCisJLyoqCisJICogUmVmZXJlbmNlIHRvIHRoZSBkaXNwbGF5IG1vZHVsZSB0aGF0IAorCSAqIGRpc3BsYXlzIHRoZSBpbmZvIGJhc2VkIG9uIGEgc2VsZWN0aW9uIGJ5CisJICogdGhlIG1hcHZpZXcgdmlldyAKKwkgKi8KKwlwcml2YXRlIGZpbmFsIEttbERpc3BsYXlTZWxlY3Rpb24gZGlzcGxheVNlbGVjdGlvbiA9IAorCQluZXcgS21sRGlzcGxheVNlbGVjdGlvbigpOworCS8qKgorCSAqIHJlbWVtYmVyIGlmIHdlIGhhdmUgaXNzc3VlZCBhIGRpc3BsYXlBcmVhIGNtZAorCSAqIHNvIHdlIGNhbiBjbGVhbiBpdCB1cC4KKwkgKi8KKwlwcml2YXRlIGJvb2xlYW4gZGlkRGlzcGxheUFyZWEgPSBmYWxzZTsKKwkvKioKKwkgKiAKKwkgKiBDb25zdHJ1Y3Rvci4gCisJICogCisJICogLSBzZXR1cCB0byBsaXN0ZW4gZm9yIFNpbXVsYXRpb25NYW5hZ2VyIGV2ZW50cworCSAqIC0gY2hlY2sgaWYgZXhpc3Rpbmcgc2ltdWxhdGlvbnMuCisJICogQHBhcmFtIGdlVmlldyAgR1VJIGNsYXNzIHRoYXQgaXMgaW52b2tpbmcgdXMuCisJICovCisJcHVibGljIEdFSW50ZXJmYWNlKEdFVmlldyBnZVZpZXcpIHsKKwkJCisJCUdFTG9nLmRlYnVnKHRoaXMsImNvbnN0cnVjdG9yOiAiKTsKKwkJCisJCXRoaXMuZ2VWaWV3ID0gZ2VWaWV3OworCQlBc3BlY3Quc2V0dXAoKTsKKwkJYWN0aXZlU2ltdWxhdGlvbnMgPSBuZXcgSGFzaE1hcDxTdHJpbmcsR0VTaW1FbnRyeT4oMSk7CisJCQorCQkKKwkJCisJfQorCisJLyoqCisJICogY2FsbGVkIGJ5IEdFVmlldyB0byBkbyBhbnkgaW5pdGlhbGl6YXRpb24gCisJICogYWZ0ZXIgd2UgaGF2ZSBzZXR1cCB0aGUgR1VJIGVudmlyb25tZW50CisJICoKKwkgKiBJdCB3aWxsIHN0YXJ0dXAgdGhlIHNlcnZsZXQgd2ViIHNlcnZlciBpZiBwb3NzaWJsZQorCSAqIAorCSAqIEByZXR1cm4gdHJ1ZSBpZiBpbml0aWFsaXphdGlvbiBpcyBzdWNjZXNzZnVsCisJICogCisJICovCisgICAgcHVibGljIGJvb2xlYW4gaW5pdCgpIHsKKyAgICAJYm9vbGVhbiBvayA9IHRydWU7CisgICAgCWJvb2xlYW4gb2tLTUwgPSB0cnVlOworICAgIAlTaW11bGF0aW9uTWFuYWdlciBzaW11bGF0aW9uTWFuYWdlciA9IFNpbXVsYXRpb25NYW5hZ2VyLmdldE1hbmFnZXIoKTsKKwkJc2ltdWxhdGlvbk1hbmFnZXIuYWRkU2ltdWxhdGlvbk1hbmFnZXJMaXN0ZW5lcih0aGlzKTsKKwkJTGlzdDxJU2ltdWxhdGlvbj5saXN0ID0gc2ltdWxhdGlvbk1hbmFnZXIuZ2V0QWN0aXZlU2ltdWxhdGlvbnMoKTsKKwkJYm9vbGVhbiBhdXRvbG9nID0gR0VQcmVmZXJlbmNlUGFnZS5pc0F1dG9Mb2dnaW5nKCk7CisJCWZvciAoSVNpbXVsYXRpb24gc2ltOiBsaXN0KSB7CisJCQlTdHJpbmcgbmFtZSA9IGdldFNpbXVsYXRpb25JZChzaW0pOworCQkgICAgR0VMb2cuZGVidWcodGhpcywic2ltdWxhdGlvbkFkZGVkOiAiK25hbWUrIiAiK3NpbSk7CQkJCisJCQlzZXRBY3RpdmUoc2ltLGF1dG9sb2cpOwkJCQorCQl9CisgICAgCS8vIGNoZWNrIGZvciB2YWxpZCB3ZWIgc2VydmVyCisJCVN0cmluZyB1cmwgPSBTdGVtS21sLmluaXRXZWJTZXJ2ZXIoKTsKKwkJR0VMb2cuZGVidWcodGhpcywiV2ViIHNlcnZlciBVUkw6ICIrdXJsKTsKKwkJaWYgKHVybCA9PSBudWxsICkgeworCQkJc2V0RXJyb3JNZXNzYWdlKCJVbmFibGUgdG8gYWNjZXNzIFdlYlNlcnZlciIpOworCQkJb2sgPSBmYWxzZTsKKwkJfSBlbHNlIHsKKwkJCW9rS01MID0gU3RlbUttbC52ZXJpZnlHRSgpOwkJCQorCQkJLy8gaGFuZGxlIHVuZGVmaW5lZCBLTUwKKwkJCWlmICghIG9rS01MKSB7CQorCQkJCXNldEVycm9yTWVzc2FnZSgiR29vZ2xlRWFydGggS01MIGZpbGVzIGFyZSBub3QgZGVmaW5lZCIpOworCQkJCQorCQkJfQorCQl9CisJCWlmICghb2sgfHwgIW9rS01MKSB7CisJCQkvLyBjaGVjayBpZiBwcmVmZXJlbmNlcyB3aWxsIHdvcmsgd2l0aCBubyB3ZWIgCisJCQkvLyBzZXJ2ZXIgb3Igbm8gS05MIGZpbGUgZGVmaW5pdGlvbgorCQkJb2sgPSBjaGVja1ByZWZlcmVuY2VzKHVybCxva0tNTCk7CisJCQlpZiAoIW9rKSB7CisJCQkJR0VMb2cuZGVidWcoZ2V0RXJyb3JNZXNzYWdlKCkpOworCQkJfQorCQl9CisJCQorCQlyZXR1cm4gb2s7CisJCQorCX0KKworICAgIC8qKgorICAgICAqIHZlcmlmeSAoYW5kIGNoYW5nZSkgdGhlIHByZWZlcmVuY2VzIGJhc2VkIG9uIHRoZSAKKyAgICAgKiBlbnZpcm9ubWVudC4gIAorICAgICAqIAorICAgICAqIElmIGEgd2Vic2VydmVyIGlzIG5vdCBhdmFpbGFibGUgb3IgaWYgZ29vZ2xlZWFydGggCisgICAgICogaGFzIG5vdCBiZWVuIGluc3RhbGxlZCB0aGVuIGl0IHdpbGwgbGltaXQgdGhlIAorICAgICAqIGNvbW11bmljYXRpb24gbWV0aG9kcyB0byBub3QgdXNlIGEgd2Vic2VydmUgb3IgCisgICAgICogbm90IHRyeSB0byBsYXVuY2ggdGhlIGttbCBmaWxlLgorICAgICAqIAorICAgICAqIEBwYXJhbSB1cmwgVVJMIGZvciB3ZWIgc2VydmVyIG9yIG51bGwKKyAgICAgKiBAcGFyYW0gb2tHRSBmYWxzZSBpZiBnb29nbGVFYXJ0aCBub3QgaW5zdGFsbGVkCisgICAgICogQHJldHVybiBmYWxzZSBpZiBub3QgT0sgYW5kIGNoYW5nZXMgaGFkIHRvIGJlIG1hZGUKKyAgICAgKi8KKyAgICBwcml2YXRlIGJvb2xlYW4gY2hlY2tQcmVmZXJlbmNlcyhTdHJpbmcgdXJsLGJvb2xlYW4gb2tHRSkgeworICAgIAlib29sZWFuIHJlc3VsdCA9IGZhbHNlOworICAgIAlpbnQgbWV0aG9kID0gR0VQcmVmZXJlbmNlUGFnZS5nZXRNZXRob2QoKTsKKyAgICAJaW50IG5ld01ldGhvZCA9IC0xOworCQlzd2l0Y2ggKG1ldGhvZCkgewkJCQkKKwkJCWNhc2UgR0VQcmVmZXJlbmNlUGFnZS5NX0xPR19PTkxZOgorCQkJCS8vIHRoaXMgbWV0aG9kIGFsd2F5IHdvcmtzCisJCQkJcmVzdWx0ID0gdHJ1ZTsKKwkJICAgICAgICBicmVhazsKKwkJCWNhc2UgR0VQcmVmZXJlbmNlUGFnZS5NX0xPR19TRVJWTEVUOgorCQkJCS8vIHRoaXMgbWV0aG9kIHdpbGwgbm90IHdvcmsgaWYgbm8gc2VydmVyCisJCQkJcmVzdWx0ID0gZmFsc2U7IAorCQkJCQorCQkJCWlmICggdXJsID09IG51bGwgJiYgb2tHRSkgeworCQkJCQluZXdNZXRob2QgPSBHRVByZWZlcmVuY2VQYWdlLk1fQVVUT19MQVVOQ0g7CisJCQkJCWVycm9yTWVzc2FnZSA9ICJObyBXZWJTZXJ2ZXI6IENoYW5nZWQgdG8gZGlyZWN0bHkgbGF1bmNoIEtNTCI7CisJCQkJCQorCQkJCX0gZWxzZSB7CisJCQkJCW5ld01ldGhvZCA9IEdFUHJlZmVyZW5jZVBhZ2UuTV9MT0dfT05MWTsKKwkJCQkJZXJyb3JNZXNzYWdlID0gIktNTCBpcyBub3QgcmVjb2duaXplZCwgQ2hhbmdlZCB0byBvbmx5IExvZyBmaWxlcyI7CisJCQkJfQkJCQkJCisJCQkJCisJCSAgICAgICAgYnJlYWs7CisJCQljYXNlIEdFUHJlZmVyZW5jZVBhZ2UuTV9BU1lOQ19TRVJWTEVUOgorLy8JCQkJIHRoaXMgbWV0aG9kIHdpbGwgbm90IHdvcmsgaWYgbm8gc2VydmVyCisJCQkJCQkJCQorCQkJCWlmICggdXJsID09IG51bGwgJiYgb2tHRSkgeworCQkJCQluZXdNZXRob2QgPSBHRVByZWZlcmVuY2VQYWdlLk1fQVVUT19MQVVOQ0g7CisJCQkJCWVycm9yTWVzc2FnZSA9ICJObyBXZWJTZXJ2ZXI6IENoYW5nZWQgdG8gZGlyZWN0bHkgbGF1bmNoIEtNTCI7CisJCQkJCQorCQkJCX0gZWxzZSB7CisJCQkJCW5ld01ldGhvZCA9IEdFUHJlZmVyZW5jZVBhZ2UuTV9MT0dfT05MWTsKKwkJCQkJZXJyb3JNZXNzYWdlID0gIktNTCBpcyBub3QgcmVjb2duaXplZCwgQ2hhbmdlZCB0byBvbmx5IExvZyBmaWxlcyI7CisJCQkJfQkJCQkJCisJCQkJCisJCSAgICAgICAgYnJlYWs7CisJCQljYXNlIEdFUHJlZmVyZW5jZVBhZ2UuTV9BVVRPX0xBVU5DSDoKKyAgICAgICAgICAgICAgICAgLy8JIHRoaXMgbWV0aG9kIHdpbGwgbm90IHdvcmsgaWYgS01MIGlzIHVua25vd24KKwkJCQkgIGlmICghIG9rR0UpIHsKKwkJCQkJICBuZXdNZXRob2QgPSBHRVByZWZlcmVuY2VQYWdlLk1fTE9HX09OTFk7CisJCQkJCQllcnJvck1lc3NhZ2UgPSAiS01MIGlzIG5vdCByZWNvZ25pemVkLCBDaGFuZ2VkIHRvIG9ubHkgTG9nIGZpbGVzIjsKKwkJCQkgIH0KKwkJICAJCWJyZWFrOwkKKwkJCWNhc2UgR0VQcmVmZXJlbmNlUGFnZS5NX01BTlVBTF9ESVNQTEFZOgorCQkJCS8vIHRoaXMgbWV0aG9kIGlzIGFsd2F5cyBPSworCQkJCWJyZWFrOworCisJCSAgICBkZWZhdWx0OgorCQkgICAgICAgIAkKKwkJfQorCQlpZiAobmV3TWV0aG9kICE9IC0xKSB7CisJCQlHRVByZWZlcmVuY2VQYWdlLnNldE1ldGhvZChuZXdNZXRob2QpOworCQkJcmVzdWx0ID0gZmFsc2U7ICAvLyB0ZWxsIGFib3V0IGNoYW5nZQorCQl9CisgICAgCXJldHVybiByZXN1bHQ7CisgICAgfQorCS8qKgorCSAqIFdlIGdldCBoZXJlIGJlY2F1c2Ugd2UgYXJlIGxpc3RlbmluZyBmb3IgU2ltdWxhdGlvbnNDaGFuZ2VkIAorCSAqIGV2ZW50cyBmcm9tIHRoZSBTaW11bGF0aW9uIE1hbmFnZXIgYW5kIG9uZSBvY2N1cmVkLiAKKwkgKiBXZSB3aWxsIGNoZWNrIGZvciBhIFNpbXVsYXRpb24gYmVpbmcgcmVtb3ZlZCBhbmQgaWYgc28gY2hlY2sgaWYgCisJICogaXQgaXMgb25lIG9mIG91ciBhY3RpdmUgc2ltdWxhdGlvbiBhbmQgaWYgc28gcmVtb3ZlIGl0LgorCSAqIElmIGEgc2ltdWxhdGlvbiBpcyBiZWluZyBhZGRlZCwgaXQgd2lsbCBiZSBhZGRlZCB0byB0aGUgbGlzdCBvZgorCSAqIGFjdGl2ZSBzaW11bGF0aW9ucy4KKwkgKiAJIAorCSAqLworCXB1YmxpYyB2b2lkIHNpbXVsYXRpb25zQ2hhbmdlZChTaW11bGF0aW9uTWFuYWdlckV2ZW50IGV2ZW50KSB7CisJCUdFTG9nLmRlYnVnKHRoaXMuZ2V0Q2xhc3MoKSwgInNpbXVsYXRpb25zQ2hhbmdlZDogIik7CisJCS8vIEdFTG9nLm1lbW9yeSgpOworCQlpZiAoZXZlbnQuZ2V0U2ltdWxhdGlvbnNSZW1vdmVkKCkubGVuZ3RoID4gMCkgeworCQkJZm9yIChJU2ltdWxhdGlvbiBzaW0gOiBldmVudC5nZXRTaW11bGF0aW9uc1JlbW92ZWQoKSkgeworCisJCQkJU3RyaW5nIGlkID0gZ2V0U2ltdWxhdGlvbklkKHNpbSk7CisJCQkJR0VMb2cuZGVidWcodGhpcy5nZXRDbGFzcygpLCAic2ltdWxhdGlvblJlbW92ZWQ6ICIgKyBpZCArICIgIgorCQkJCQkJKyBzaW0pOworCisJCQkJR0VTaW1FbnRyeSBleGlzdGluZyA9IGFjdGl2ZVNpbXVsYXRpb25zLmdldChpZCk7CisJCQkJaWYgKGV4aXN0aW5nICE9IG51bGwpIHsKKwkJCQkJYm9vbGVhbiBhY3RpdmUgPSBpc0FjdGl2ZVZpZXcoc2ltKTsKKwkJCQkJc2V0QWN0aXZlKHNpbSwgZmFsc2UpOworCQkJCQlhY3RpdmVTaW11bGF0aW9ucy5yZW1vdmUoaWQpOworCQkJCQlpZiAoYWN0aXZlKSB7CisJCQkJCQlzdG9wR0UoKTsKKwkJCQkJfQorCQkJCQlHRUxvZy5kZWJ1Zyh0aGlzLCAiQWN0aXZlIHNpbXVsYXRpb24gcmVtb3ZlZDogIiArIGlkKTsKKwkJCQl9CisJCQl9CisJCX0gZWxzZSBpZiAoZXZlbnQuZ2V0U2ltdWxhdGlvbnNBZGRlZCgpLmxlbmd0aCA+IDApIHsKKwkJCWJvb2xlYW4gYXV0b2xvZyA9IEdFUHJlZmVyZW5jZVBhZ2UuaXNBdXRvTG9nZ2luZygpOworCQkJZm9yIChJU2ltdWxhdGlvbiBzaW0gOiBldmVudC5nZXRTaW11bGF0aW9uc0FkZGVkKCkpIHsKKwkJCQlTdHJpbmcgbmFtZSA9IGdldFNpbXVsYXRpb25JZChzaW0pOworCQkJCUdFTG9nLmRlYnVnKHRoaXMsICJzaW11bGF0aW9uQWRkZWQ6ICIgKyBuYW1lICsgIiAiICsgc2ltKTsKKwkJCQlHRVNpbUVudHJ5IGV4aXN0aW5nID0gYWN0aXZlU2ltdWxhdGlvbnMuZ2V0KG5hbWUpOworCQkJCWlmIChleGlzdGluZyA9PSBudWxsKSB7CisJCQkJCWJvb2xlYW4gb2sgPSBzZXRBY3RpdmUoc2ltLCBhdXRvbG9nKTsKKwkJCQkJaWYgKCFvaykgeworCQkJCQkJaWYgKCFhdXRvbG9nKSB7CisJCQkJCQkJZ2VWaWV3LnNob3dNZXNzYWdlKGVycm9yTWVzc2FnZSk7CisJCQkJCQl9IAorCQkJCQl9CisJCQkJfQorCisJCQl9CisJCX0KKwl9IC8vIHNpbXVsYXRpb25zQ2hhbmdlZAorICAgIAorCS8qKgorCSAqIENhbGxlZCBieSBHRVZpZXcuZGlzcG9zZSgpCisJICogCisJICogCisJICovCisJcHVibGljIHZvaWQgZGlzcG9zZSgpIHsKKwkJU2ltdWxhdGlvbk1hbmFnZXIgc2ltdWxhdGlvbk1hbmFnZXIgPSBTaW11bGF0aW9uTWFuYWdlci5nZXRNYW5hZ2VyKCk7CisJCUxpc3Q8SVNpbXVsYXRpb24+IGxpc3QgPXNpbXVsYXRpb25NYW5hZ2VyLmdldEFjdGl2ZVNpbXVsYXRpb25zKCk7CisJCWZvciAoSVNpbXVsYXRpb24gc2ltOmxpc3QpIHsKKwkJCXNpbS5yZW1vdmVTaW11bGF0aW9uTGlzdGVuZXIodGhpcyk7CisJCX0KKwkJc2ltdWxhdGlvbk1hbmFnZXIucmVtb3ZlTGlzdGVuZXIodGhpcyk7CisJCWlmIChhY3RpdmVWaWV3ICE9IG51bGwpIHsKKwkJCS8vIEdFIGlzIHRhbGtpbmcgdG8gdXMKKwkJCXN0b3BHRSgpOworCQkJLy8gd2FpdCBhIGJpdCBiZWZvcmUgd2UgY29udGludWUgCisJCQkvLyBiZWNhdXNlIHRoaXMgd2lsbCBraWxsIHRoZSB3ZWJzZXJ2ZXIgCisJCQkvLyB0aGF0IEdvb2dsZUVhcnRoIGlzIHRhbGtpbmcgdG8uCisJCQl0cnkgeworCQkJCVRocmVhZC5zbGVlcCg1MDAwKTsKKwkJCX0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CisJCQkJLy8gaWdub3JlCisJCQl9CisJCX0KKwl9CisgICAgLyoqCisJICogTGlzdGVuZXIgZm9yIGV2ZW50cyB0aGF0IGhhcHBlbiBpbiBhIHNwZWNpZmljIFNpbXVsYXRpb24uCisJICogCisJICogPGNvZGU+CisJICogVGhpcyBnZXRzIGNhbGxlZCBmb3IgdGhlIGZvbGxvd2luZyBldmVudCBzdGF0ZXMKKwkgKiAgICBTaW11bGF0aW9uU3RhdGU6IFJVTk5JTkcKKwkgKiAgICAgICAgICAgICAgICAgICAgIENPTVBMRVRFRF9DWUNMRQorCSAqICAgICAgICAgICAgICAgICAgICAgUEFVU0VEICAKKwkgKiBXZSBhcmUgaW50ZXJlc3RlZCBpbiBDb21wbGV0ZWRfQ3ljbGUgCisJICogCisJICogQHBhcmFtIGV2ZW50CisJICogICAgICAgICAgICB0aGUgZXZlbnQgdGhhdCByZWNvcmRzIHdoYXQgaGFwcGVuZWQgdG8gdGhlIG1hbmFnZXIuCisJICovCisJCisJcHVibGljIHZvaWQgc2ltdWxhdGlvbkNoYW5nZWQoU2ltdWxhdGlvbkV2ZW50IGV2ZW50KSB7CisJCQorCQkKKwkJdHJ5IHsKKwkJCUlTaW11bGF0aW9uIHNpbXVsYXRpb24gPSBldmVudC5nZXRTaW11bGF0aW9uKCk7CisJCQlTaW11bGF0aW9uU3RhdGUgc3RhdGUgPSBldmVudC5nZXRTaW11bGF0aW9uU3RhdGUoKTsKKwkJCVN0cmluZyBpZCA9IGdldFNpbXVsYXRpb25JZChzaW11bGF0aW9uKTsKKwkJCUdFU2ltRW50cnkgZXhpc3RpbmcgPSBhY3RpdmVTaW11bGF0aW9ucy5nZXQoaWQpOworICAgICAgICAgICAgU2VxdWVuY2VyIHNlcSA9IHNpbXVsYXRpb24uZ2V0U2NlbmFyaW8oKS5nZXRTZXF1ZW5jZXIoKTsKKwkJCSAgICAgICAgICAKKyAgICAgICAgICAgIAorCQkJaWYgKHN0YXRlID09IFNpbXVsYXRpb25TdGF0ZS5DT01QTEVURURfQ1lDTEUpIHsJCQkJCisJCQkJaWYgKGV4aXN0aW5nID09IG51bGwgKSB7CisJCQkJCUdFTG9nLmRlYnVnKHRoaXMsIlNpbXVsYXRpb24gIitpZCsiIG5vdCBhY3RpdmUgZm9yIEdFLiIpOworCQkJCQlyZXR1cm47CisJCQkJfQorCQkJCS8vZXhpc3RpbmcuY3ljbGUrKzsKKwkJCQlpbnQgY3ljbGUgPSBzZXEuZ2V0Q3ljbGUoKTsKKwkJCQlHRUxvZy5kZWJ1Zyh0aGlzLGlkKyIgU3RhdGU9IitzdGF0ZSsiIGN5Y2xlPSIrY3ljbGUpOyAKKwkJCQlwcm9jZXNzQ3ljbGUoc2ltdWxhdGlvbixzdGF0ZSk7CisJCQkJZ2VWaWV3LnJlZnJlc2goKTsKKwkJCX0gZWxzZSB7CisJCQkJR0VMb2cuZGVidWcodGhpcyxpZCsiIFN0YXRlPSIrc3RhdGUpOyAKKwkJCX0KKworCQl9IGNhdGNoIChFeGNlcHRpb24gZSkgeworCQkJR0VMb2cuZXJyb3IoInNpbXVsYXRpb25DaGFuZ2VkOiBGYWlsdXJlICIsIGUpOworCQl9CisJfQorCQorCS8qKgorCSAqIEhhbmRsZSB0aGUgc2ltdWxhdGlvbiBldmVudCB0aGF0IGp1c3Qgb2NjdXJlZAorCSAqIFRoaXMgaXMgd2hlcmUgdGhlIHJlYWwgcHJvY2Vzc2luZyBzdGFydHMuCisJICogSWYgd2UgaGF2ZW4ndCBhbHJlYWR5LCB3ZSBidWlsZCBhIG1hcCBvZiB0aGUgCisJICogZ2VvZ3JhcGhpY2FsIGluZm9ybWF0aW9uLgorCSAqIFRoZW4gZGV0ZXJtaW5lIGlmIHdlIHdhbnQgdG8gZG8gYW55dGhpbmcgb24gdGhpcyBjeWNsZSBhbmQgCisJICogZGV0ZXJtaW5lIGhvdyB3ZSB3YW50IHRvIGNvbXVuaWNhdGUgd2l0aCBHRS4gIAorCSAqIE5leHQgd2UgcnVuIHRocnUgdGhlIHNjZW5hcmlvIG5vZGVzIGFuZCBwaWNrIHVwCisJICogdGhlIGN1cnJlbnQgZGlzZWFzZSBzdGF0ZSBmb3IgZWFjaCBub2RlLiAgCisJICogRmluYWxseSBhbGwgb2YgdGhlIGluZm9ybWF0aW9uIGlzIHNlbnQgdG8gYSAKKwkgKiBiYWNrZ3JvdW5kIG1ldGhvZCB0aGF0IGJ1aWxkcyB0aGUgS01MIGZpbGUgdGhhdCBpcworCSAqIHNlbnQgdG8gR29vZ2xlRWFydGguICAgCisJICogIAorCSAqIEBwYXJhbSBzaW11bGF0aW9uIHRoYXQgZXZlbnQgaXMgZm9yCisJICogQHBhcmFtIHN0YXRlICBDdXJyZW50IHN0YXRlIGJlaW5nIHByb2Nlc3NlZAorCSAqIAorCSAqLworCXByaXZhdGUgdm9pZCBwcm9jZXNzQ3ljbGUoSVNpbXVsYXRpb24gc2ltdWxhdGlvbiwgU2ltdWxhdGlvblN0YXRlIHN0YXRlICkgeworCQkKKwkJU3RyaW5nIGttbGZuID0gbnVsbDsJCQorCQlib29sZWFuIGRvaXQgPSBmYWxzZTsKKwkJaW50IG50aCA9IEdFUHJlZmVyZW5jZVBhZ2UuZ2V0V2hpY2hDeWNsZSgpOworCQkKKwkJCisJCQkKKwkJU3RyaW5nIGlkID0gZ2V0U2ltdWxhdGlvbklkKHNpbXVsYXRpb24pOworCQlHRVNpbUVudHJ5IGV4aXN0aW5nID0gYWN0aXZlU2ltdWxhdGlvbnMuZ2V0KGlkKTsKKwkJaWYgKGV4aXN0aW5nID09IG51bGwpIHsKKwkJCUdFTG9nLmRlYnVnKHRoaXMsIlNpbXVsYXRpb24gIitpZCsiIG5vdCBhY3RpdmUgZm9yIEdFLiIpOworCQkJcmV0dXJuOworCQl9CisJCQorCQkKKwkJaW50IG1ldGhvZCA9IGV4aXN0aW5nLmdldE1ldGhvZCgpOworCQlTdHJpbmcgZW50cnlGb2xkZXIgPSBleGlzdGluZy5nZXRMb2dGb2xkZXIoKTsKKwkJU2NlbmFyaW8gc2NlbmFyaW8gPSBzaW11bGF0aW9uLmdldFNjZW5hcmlvKCk7CisJCVNlcXVlbmNlciBzZXEgPSBzY2VuYXJpby5nZXRTZXF1ZW5jZXIoKTsKKy8vCQkgZ2V0IGN5Y2xlIGZyb20gc2ltdWxhdGlvbgorCQlpbnQgY3ljbGUgPSBzZXEuZ2V0Q3ljbGUoKTsKKwkJaWYgKEdFTG9nLm1lbW9yeUNoZWNrKDAuOCkgKSB7CisJCQlHRUxvZy5kZWJ1Zyh0aGlzLCJQcm9jZXNzIGZvciBjeWNsZSAiKworCQkJCQljeWNsZSsiIHNraXBwZWQuIE1lbW9yeSBsb3ciKTsKKwkJCXJldHVybjsKKwkJfQkJCisJCS8vaWYgd2UgaGF2ZW4ndCB5ZXQsIHRoZW4gYnVpbGQgZ2VvIG1hcAorCQlpZiAoKHN0ZW1NYXAgPSBleGlzdGluZy5nZXRTdGVtTWFwKCkpID09IG51bGwgKSB7CisJCQlpZiAoISBHRUxvZy5tZW1vcnlDaGVjaygwLjgpICkgeworCQkJCXN0ZW1NYXAgPSBidWlsZE1hcChzaW11bGF0aW9uKTsKKwkJCX0KKwkJCWlmIChzdGVtTWFwID09IG51bGwpIHsKKwkJCQlHRUxvZy5kZWJ1Zyh0aGlzLmdldENsYXNzKCksIlVuYWJsZSB0byBidWlsZCBzdGVtTWFwIik7CisJCQkJcmV0dXJuOworCQkJfQorCQkJZG9pdCA9IHRydWU7CisJCQlleGlzdGluZy5zZXRTdGVtTWFwKHN0ZW1NYXApOwkJCQorCQl9CisJCQorCQlTdGVtS21sIHN0ZW1LbWwgPSBleGlzdGluZy5nZXRTdGVtS21sKCk7CisJCWlmIChzdGVtS21sID09IG51bGwpIHsKKwkJCXN0ZW1LbWwgPSBuZXcgU3RlbUttbCgpOworCQkJZXhpc3Rpbmcuc2V0U3RlbUttbChzdGVtS21sKTsJCQkKKwkJCXN0ZW1LbWwuaW5pdCgpOworCQl9CisJICAgIC8vIGlmIE1hbnVhbERpc3BsYXkgYW5kIG5vIHVzZXIgcmVxdWVzdAorCQlpZiAobWV0aG9kID09IEdFUHJlZmVyZW5jZVBhZ2UuTV9NQU5VQUxfRElTUExBWSAmJgorCQkJCSEgbWFudWFsUmVxdWVzdCApIHsKKwkJCXJldHVybjsKKwkJfQorICAgICAgICAKKwkJaWYgKGN5Y2xlID09IDAgfHwgbnRoID09IDEgKSB7CisJCQlkb2l0ID0gdHJ1ZTsKKwkJfSBlbHNlIGlmIChudGggPiAxICYmIGN5Y2xlJW50aCA9PSAwICkgeworCQkJZG9pdCA9IHRydWU7CisJCX0KKworCQkvLyBHZXQgYXNwZWN0IHRoYXQgd2Ugd2FudCB2aWV3IG9mCisJCUFzcGVjdCBhc3BlY3QgPSBnZXRBc3BlY3RUb0Rpc3BsYXkoc2ltdWxhdGlvbik7CisJCWlmIChtYW51YWxSZXF1ZXN0KSAKKwkJCWRvaXQgPSB0cnVlOworCQkvLyBkZWNpZGUgaG93IHdlIHdhbnQgdG8gcHJvY2VzcyBpdAorCQlpZiAoZG9pdCkgewkKKwkJCXRyeSB7CQkJCQorCQkJCWJvb2xlYW4gbGF1bmNoID0gZmFsc2U7CQorCQkJCWJvb2xlYW4gcmVuYW1lID0gZmFsc2U7CisJCQkJc3dpdGNoIChtZXRob2QpIHsJCQkJCisJCQkJCWNhc2UgR0VQcmVmZXJlbmNlUGFnZS5NX0xPR19PTkxZOgorCQkJCQkJLy8gbG9nIHRoZSBmaWxlIGJ1dCBubyBsYXVuY2ggb3IgbmV0bGluawkJCQkJCQorCQkJCQkJaWYgKGVudHJ5Rm9sZGVyICE9IG51bGwpIHsKKwkJCQkJCQlrbWxmbiA9IFN0ZW1LbWwuZ2V0Q29udHJvbEZOKGVudHJ5Rm9sZGVyLAorCQkJCQkJCQkJY29udHJvbFRlbXBsYXRlLGFzcGVjdCwgY3ljbGUpOworCQkJCQkJfSBlbHNlIHsKKwkJCQkJCQlkb2l0ID0gZmFsc2U7CisJCQkJCQl9CisJCQkJICAgICAgICBicmVhazsKKwkJCQkJY2FzZSBHRVByZWZlcmVuY2VQYWdlLk1fTE9HX1NFUlZMRVQ6CisJCQkJCQkvLyBsb2cgZmlsZSBhbmQgbGF1bmNoIGEgbmV0bGluayB0byBkaXNwbGF5CisJCQkJCQlpZiAoIG1hbnVhbFJlcXVlc3QgKSB7CisJCQkJCQkJZG9pdCA9IHRydWU7CQkJCQkJCQorCQkJCQkJCWlmIChhY3RpdmVWaWV3ID09IG51bGwpIHsJCQkJCQkJCQkKKwkJCQkJCQkJbGF1bmNoID0gdHJ1ZTsKKwkJCQkJCQkJa21sZm4gPSBTdGVtS21sLmdldENvbnRyb2xGaWxlKCk7CisJCQkJCQkJfSBlbHNlIHsKKwkJCQkJCQkJa21sZm4gPSBTdGVtS21sLmdldENvbnRyb2xGTihlbnRyeUZvbGRlciwKKwkJCQkJCQkJCQljb250cm9sVGVtcGxhdGUsYXNwZWN0LCBjeWNsZSk7CQorCQkJCQkJCX0KKwkJCQkJCX0gZWxzZSBpZiAoISBpZC5lcXVhbHMoYWN0aXZlVmlldykpIHsgCisJCQkJCQkJZG9pdCA9IGZhbHNlOworCQkJCQkJCUdFTG9nLmRlYnVnKHRoaXMsIlVuYWJsZSB0byBkaXNwbGF5IGlkICIraWQpOworCQkJCQkJfSBlbHNlIGlmIChlbnRyeUZvbGRlciAhPSBudWxsKSB7CisJCQkJCQkJa21sZm4gPSBTdGVtS21sLmdldENvbnRyb2xGTihlbnRyeUZvbGRlciwKKwkJCQkJCQkJCWNvbnRyb2xUZW1wbGF0ZSxhc3BlY3QsIGN5Y2xlKTsJCQkJCQkJCisJCQkJCQl9IGVsc2UgeworCQkJCQkJCWRvaXQgPSBmYWxzZTsKKwkJCQkJCQlHRUxvZy5kZWJ1Zyh0aGlzLCJVbmFibGUgdG8gZGlzcGxheS4gSW52YWxpZCBmb2xkZXIiKTsKKwkJCQkJCX0KKwkJCQkgICAgICAgIGJyZWFrOworCQkJCQljYXNlIEdFUHJlZmVyZW5jZVBhZ2UuTV9BU1lOQ19TRVJWTEVUOgkJCQkJCQorCisJCQkJCQlpZiAoIG1hbnVhbFJlcXVlc3QgKSB7CisJCQkJCQkJaWYgKGFjdGl2ZVZpZXcgIT0gbnVsbCkgeworCQkJCQkJCQlkb2l0ID0gZmFsc2U7CisJCQkJCQkJCUdFTG9nLmRlYnVnKHRoaXMsIlVuYWJsZSB0byBkbyBtYW51YWwgZGlzcGxheSIpOworCQkJCQkJCX0gZWxzZSB7CisJCQkJCQkJCWxhdW5jaCA9IHRydWU7CisJCQkJCQkJCWttbGZuID0gU3RlbUttbC5nZXRDb250cm9sRmlsZSgpOworCQkJCQkJCX0KKwkJCQkJCX0gZWxzZSB7CisJCQkJCQkJaWYgKCEgaWQuZXF1YWxzKGFjdGl2ZVZpZXcpKSB7IAkJCQkJCQorCQkJCQkJCSAgIGRvaXQgPSBmYWxzZTsKKwkJCQkJCQkgICBHRUxvZy5kZWJ1Zyh0aGlzLCJOb3QgYW4gYWN0aXZlIFNpbXVsYXRpb24gaWQ6ICIraWQrIiBhY3RpdmVWaWV3OiAiKworCQkJCQkJCQkJICAgYWN0aXZlVmlldyk7CisJCQkJCQkJfSBlbHNlIHsKKwkJCQkJCQkJa21sZm4gPSBTdGVtS21sLmdldENvbnRyb2xGaWxlKCk7CisJCQkJCQkJCXJlbmFtZSA9IHRydWU7CisJCQkJCQkJfQorCQkJCQkJfQorCQkJCSAgICAgICAgYnJlYWs7CisJCQkJCWNhc2UgR0VQcmVmZXJlbmNlUGFnZS5NX0FVVE9fTEFVTkNIOgorCQkJCSAgCQkvLyBidWlsZCBjb250cm9sLmttbCBhbmQgbGF1bmNoIGl0CisJCQkJCQlsYXVuY2ggPSB0cnVlOworCQkJCQkJa21sZm4gPSBTdGVtS21sLmdldENvbnRyb2xGaWxlKCk7CisJCQkJCQlpZiAoICEgbWFudWFsUmVxdWVzdCAmJiAoISBpZC5lcXVhbHMoYWN0aXZlVmlldykpICkgewkJCQkJCQkKKwkJCQkJCQlkb2l0ID0gZmFsc2U7CisJCQkJCQkJR0VMb2cuZGVidWcodGhpcywiSW52YWxpZC4gaWQ6ICIraWQrCisJCQkJCQkJCQkgICAgICAgICAgIiBhY3RpdmVWaWV3OiAiK2FjdGl2ZVZpZXcpOworCQkJCQkJfSAKKwkJCQkgIAkJYnJlYWs7CQorCQkJCQljYXNlIEdFUHJlZmVyZW5jZVBhZ2UuTV9NQU5VQUxfRElTUExBWToKKwkJCQkJCWlmIChtYW51YWxSZXF1ZXN0KSB7CisJCQkJCQkJR0VMb2cuZGVidWcodGhpcywiRG8gbWFudWFsIGRpc3BsYXkiKTsKKwkJCQkJCQlsYXVuY2ggPSB0cnVlOworCQkJCQkJCWttbGZuID0gU3RlbUttbC5nZXRDb250cm9sRmlsZSgpOworCQkJCQkJCWRvaXQgPSB0cnVlOworCQkJCQkJCQorCQkJCQkJfSBlbHNlIHsKKwkJCQkJCQlkb2l0ID0gZmFsc2U7CisJCQkJCQl9CisJCQkJCQlicmVhazsKKwkKKwkJCQkgICAgZGVmYXVsdDoKKwkJCQkgICAgICAgIAkKKwkJCQl9CisJCQkJbWFudWFsUmVxdWVzdCA9IGZhbHNlOworCQkJCWlmIChkb2l0KSB7CisJCQkJCS8vCSBzdG9yZSB0aGUgY3VycmVudCBTRUlSIGRhdGEgaW50byBHRURhdGEKKwkJCQkJc3RvcmVBc3BlY3RzKHNpbXVsYXRpb24sIHN0ZW1NYXApOworCQkJCQkKKwkJCQkJLy8gZ2VuZXJhdGUgdGhlIEtNTCBmaWxlCisJCQkJCUdFTG9nLmRlYnVnKHRoaXMuZ2V0Q2xhc3MoKSwiR2VuZXJhdGVLTUwgZm9yIGlkOiAiKworCQkJCQkJCWlkICsgIiBhc3BlY3QgIithc3BlY3QudG9TdHJpbmcoKSk7CisJCQkJCisJCQkJCWdlbmVyYXRlS01MKGttbGZuLCBzdGVtS21sLHN0ZW1NYXAsIGFzcGVjdCwgY3ljbGUsbGF1bmNoLHJlbmFtZSk7CisJCQkJCQorCQkJCQkKKwkJCQl9CisJCQl9IGNhdGNoIChFeGNlcHRpb24gZSkgewkJCQkKKwkJCQlHRUxvZy5lcnJvcigicHJvY2Vzc0N5Y2xlKCk6IEZhaWx1cmUgY3JlYXRpbmcgS01MICIsZSk7CisJCQkJYWN0aXZlU2ltdWxhdGlvbnMucmVtb3ZlKGlkKTsKKwkJCX0KKwkJfQorCQkKKwkJLy9HRUxvZy5kZWJ1Zyh0aGlzLmdldENsYXNzKCksIkRvbmUuIGN5Y2xlPSIrY3ljbGUpOworCX0KKwkKKwkKKwkvKioKKwkgKiAgY2FsbGVkIGJ5IEdFVmlldyB0byBkaXNwbGF5IHRoZSBjdXJyZW50IG1hcCBmb3IgCisJICogIGEgc3BlY2lmaWMgYWRtaW4gYXJlYS4KKwkgKiAKKwkgKiBAcGFyYW0gYWRtaW5GaWxlICBGaWxlIHRoYXQgY29udGFpbnMgZGVzaXJlZCBkYXRhCisJICogQHBhcmFtIHNlYXJjaCAgIFN0cmluZyB0aGF0IGlzIG1hdGNoZWQgYWdhaW5zdCBhcmVhIGlkCisJICogQHBhcmFtIGNsZWFyICAgIElmIHRydWUgdGhlbiBjbGVhciB0aGUgZXhpc3RpbmcgbWFwCisJICogQHJldHVybiAgdHJ1ZSBpZiBhYmxlIHRvIGRpc3BsYXkgbWFwIG9yIGZhbHNlIGlmIGNvdWxkIG5vdC4KKwkgKi8JCisJcHVibGljIGJvb2xlYW4gZGlzcGxheUFyZWEoIFN0cmluZyBhZG1pbkZpbGUsU3RyaW5nIHNlYXJjaCwgYm9vbGVhbiBjbGVhcikgeworCQlkaXNwbGF5Tm9kZSA9IHNlYXJjaDsKKwkJZGlkRGlzcGxheUFyZWEgPSB0cnVlOworCQllcnJvck1lc3NhZ2UgPSBudWxsOworCQlib29sZWFuIHJlc3VsdCA9IHRydWU7CisJCXRyeSB7CisgICAgICAgICAgICBpZiAoY2xlYXIpIAorICAgICAgICAgICAgCXN0ZW1NYXBOb2RlID0gbnVsbDsKKyAgICAgICAgICAgIAorCQkJR0VMb2cuZGVidWcodGhpcywiZGlzcGxheU1hcCgpICIrYWRtaW5GaWxlKyIgc2VhcmNoOiAiK3NlYXJjaCk7CisJCQlpZiAoYWRtaW5GaWxlID09IG51bGwpIHsJCQkJCisJCQkJZXJyb3JNZXNzYWdlID0gIkFkbWluRmlsZSBhcmd1bWVudCBpcyBudWxsIjsKKwkJCQlHRUxvZy5kZWJ1Zyh0aGlzLGVycm9yTWVzc2FnZSk7CisJCQkJcmV0dXJuIGZhbHNlOworCQkJfQorCQkJU3RyaW5nIGZuID0gU3RlbUttbC5nZXREaXNwbGF5QXJlYUZpbGUoKTsKKwkJCQorCQkJU3RlbUttbCBzdGVtS21sID0gbmV3IFN0ZW1LbWwoKTsJCQkJCisJCQlzdGVtS21sLmluaXQoKTsJCQkJCisJCQkvLyB0aGlzIHdpbGwgY3JlYXRlIEdFRGF0YSBpbnN0YW5jZXMgd2l0aCBMYXRMb25nIGRhdGEKKyAgICAgICAgICAgIC8vIFRoZSBMYXRMb25nIGNvbWVzIGZyb20gZmlsZSByYXRoZXIgdGhhbiBzaW11bGF0aW9uCisJCQlNYXA8U3RyaW5nLEdFRGF0YT4gc3RlbU1hcCA9IGJ1aWxkTWFwKGFkbWluRmlsZSxzZWFyY2gpOworICAgICAgICAgICAgaWYgKHN0ZW1NYXAuc2l6ZSgpID09IDApIHsKKyAgICAgICAgICAgIAllcnJvck1lc3NhZ2UgPSAiU2VhcmNoIGFyZ3VtZW50ICIrc2VhcmNoKworICAgICAgICAgICAgCSAgICAgICAiIGRpZCBub3QgbWF0Y2ggYW55IGFkbWluIGFyZWEgbmFtZS4iOworICAgICAgICAgICAgCXJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0KKwkJCWlmIChzdGVtTWFwTm9kZSA9PSBudWxsKSB7CisJCQkJc3RlbU1hcE5vZGUgPSBzdGVtTWFwOworCQkJfSBlbHNlIHsKKwkJCQlzdGVtTWFwTm9kZS5wdXRBbGwoc3RlbU1hcCk7CisJCQl9CisKKy8vCQkJIEdldCBhc3BlY3QgdGhhdCB3ZSB3YW50IHZpZXcgb2YKKwkJCUFzcGVjdCBhc3BlY3QgPSBBc3BlY3QuZ2V0QXNwZWN0KCJTIik7ICAKKwkJCS8vIGdlbmVyYXRlIHRoZSBLTUwgZmlsZQkKKwkJCWJvb2xlYW4gcmVuYW1lID0gZmFsc2U7CisgICAgICAgICAgICBpbnQgY3ljbGUgPSAwOworCQkJYm9vbGVhbiBsYXVuY2ggPSB0cnVlOwkJCQkKKwkJCWdlbmVyYXRlS01MKGZuLHN0ZW1LbWwsc3RlbU1hcE5vZGUsIGFzcGVjdCwKKwkJCQkJY3ljbGUsbGF1bmNoLHJlbmFtZSk7CisKKwkJfSBjYXRjaCAoUnVudGltZUV4Y2VwdGlvbiBlKSB7CisJCQlyZXN1bHQgPSBmYWxzZTsKKwkJCUdFTG9nLmVycm9yKCJEaXNwbGF5QXJlYSBmYWlsdXJlIiwgZSk7CisJCX0KKworCQlkaXNwbGF5Tm9kZSA9IG51bGw7CisJCXJldHVybiByZXN1bHQ7CisJfQorCS8qKgorCSAqICBjYWxsZWQgYnkgR0VWaWV3IHRvIGRpc3BsYXkgdGhlIHNwZWNpZmllZCBhcmVhCisJICogIHdoZW4gYSBTZWxlY3Rpb24gZXZlbnQgaXMgcmVjZWl2ZWQgZnJvbSBtYXB2aWV3CisJICogCisJICogQHBhcmFtIHJlZ2lvbiBUaGUgSWRlbnRpZmlhYmxlIGRlc2NyaWJpbmcgdGhlIGFkbWluIGFyZWEgdGhhdCAKKwkgKiAgICAgICAgICAgICAgIHdhcyBzZWxlY3RlZC4KKwkgKiBAcGFyYW0gZ3NlICByZWZlcmVuY2UgdG8gdGhlIGRhdGEgYWJvdXQgdGhlIHNlbGVjdGlvbgorCSAqIAorCSAqIEByZXR1cm4gIHRydWUgaWYgYWJsZSB0byBkaXNwbGF5IG1hcCBvciBmYWxzZSBpZiBjb3VsZCBub3QuCisJICovCQorCXB1YmxpYyBib29sZWFuIGRpc3BsYXlTZWxlY3Rpb24oIFJlZ2lvbkltcGwgcmVnaW9uLEdlb2dyYXBoaWNTZWxlY3Rpb25FbGVtZW50cyBnc2UpIHsKKyAgICAgICAgZGlkRGlzcGxheUFyZWEgPSB0cnVlOworCQllcnJvck1lc3NhZ2UgPSBudWxsOworCQlib29sZWFuIHJlc3VsdCA9IHRydWU7CisJCXRyeSB7ICAgICAgICAgICAKKwkJCQorCQkJU3RyaW5nIGZuID0gU3RlbUttbC5nZXREaXNwbGF5QXJlYUZpbGUoKTsKKwkJCQorCQkJU3RlbUttbCBzdGVtS21sID0gbmV3IFN0ZW1LbWwoKTsJCQkJCisJCQlzdGVtS21sLmluaXQoKTsJCQkJCisJCQkKKwkJCU1hcDxTdHJpbmcsR0VEYXRhPiBzdGVtTWFwID0gYnVpbGRTZWxlY3Rpb25NYXAocmVnaW9uLGdzZSk7CisgICAgICAgICAgICBpZiAoc3RlbU1hcCA9PSBudWxsIHx8IHN0ZW1NYXAuc2l6ZSgpID09IDApIHsKKyAgICAgICAgICAgIAlyZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9CisJCQlpZiAoc3RlbU1hcE5vZGUgPT0gbnVsbCkgeworCQkJCXN0ZW1NYXBOb2RlID0gc3RlbU1hcDsKKwkJCX0gZWxzZSB7CisJCQkJLy9zdGVtTWFwTm9kZS5wdXRBbGwoc3RlbU1hcCk7CisJCQkJc3RlbU1hcE5vZGUgPSBzdGVtTWFwOyAvLyBjbGVhcj8/PworCQkJfQorCisvLwkJCSBBc3BlY3Qgbm90IHVzZWQKKwkJCUFzcGVjdCBhc3BlY3QgPSBudWxsOyAgCisJCQkvLyBnZW5lcmF0ZSB0aGUgS01MIGZpbGUKKwkJCWRpc3BsYXlTZWxlY3Rpb24uZ2VuZXJhdGVQb2x5Z29ucyhmbiwgc3RlbU1hcE5vZGUsYXNwZWN0KTsKKworLy8JCQkgbGF1bmNoIHRoZSBmaWxlIGZvciBHb29nbGVFYXJ0aAkJCSAgCisJCQlTdGVtS21sLmxhdW5jaChmbik7CisJCQlHRUxvZy5kZWJ1Zyh0aGlzLCJHb29nbGVFYXJ0aCBNYXAgIHN1Ym1pdHRlZCIpOworICAgICAgICAgICAgCisJCX0gY2F0Y2ggKFJ1bnRpbWVFeGNlcHRpb24gZSkgeworCQkJcmVzdWx0ID0gZmFsc2U7CisJCQlHRUxvZy5lcnJvcigiRGlzcGxheUFyZWEgZmFpbHVyZSIsIGUpOworCQl9CisKKwkJZGlzcGxheU5vZGUgPSBudWxsOworCQlyZXR1cm4gcmVzdWx0OworCX0KKwkvKioKKwkgKiAgY2FsbGVkIGJ5IEdFVmlldyB0byBkaXNwbGF5IHRoZSBjdXJyZW50IG1hcCAKKwkgKiBUaGlzIHZlcnNpb24gc2V0cyBhIHN3aXRjaCB0byBjYXVzZSAKKwkgKiBhIGRpc3BsYXkgb24gdGhlIG5leHQgY3ljbGUgaWYgc2ltdWxhdGlvbiBvcgorCSAqIG5vdyBpZiBwYXVzZWQuIAorCSAqIAorCSAqIAorCSAqIEBwYXJhbSBzaW11bGF0aW9uIFRoZSBjdXJyZW50bHkgc2VsZWN0ZWQgU2ltdWxhdGlvbgorCSAqIEByZXR1cm4gIHRydWUgaWYgYWJsZSB0byBkaXNwbGF5IG1hcCBvciBmYWxzZSBpZiBjb3VsZCBub3QuCisJICovCisJcHVibGljIGJvb2xlYW4gZGlzcGxheU1hcChJU2ltdWxhdGlvbiBzaW11bGF0aW9uKSB7CisJCWJvb2xlYW4gcmVzdWx0ID0gdHJ1ZTsKKwkJU2ltdWxhdGlvblN0YXRlIHN0YXRlID0gICBzaW11bGF0aW9uLmdldFNpbXVsYXRpb25TdGF0ZSgpOworCQlHRUxvZy5kZWJ1Zyh0aGlzLCJEaXNwbGF5TWFwIHJlcXVlc3QiKTsKKwkJbWFudWFsUmVxdWVzdCA9IHRydWU7CisJCWlmIChzdGF0ZSAhPSBTaW11bGF0aW9uU3RhdGUuUlVOTklORykgewkKKwkJCS8vIHByb2Nlc3MgaXQgaWYgbm90IHJ1bm5pbmcuCisJCQlwcm9jZXNzQ3ljbGUoc2ltdWxhdGlvbixzaW11bGF0aW9uLmdldFNpbXVsYXRpb25TdGF0ZSgpKTsKKwkJfQorCSAgICAvLyBpZiBpdCB3YXMgcnVubmluZyBpdCB3aWxsIGRvIGl0IGF0IGVuZCBvZiBjeWNsZQorCQlyZXR1cm4gcmVzdWx0OworCX0KKwkKKworCS8qKgorCSAqICBjYWxsZWQgYnkgR0VWaWV3IHRvIGRpc3BsYXkgdGhlIEtNTCBmaWxlcyBvbiBHRQorCSAqICB2aWEgdGhlIFNlcnZsZXQgQVBJCisJICogIAorCSAqIEBwYXJhbSBmb2xkZXIgCisJICogQHJldHVybiAgdHJ1ZSBpZiBhYmxlIHRvIGRpc3BsYXkgbWFwIG9yIGZhbHNlIGlmIGNvdWxkIG5vdC4KKwkgKi8KKwlwdWJsaWMgYm9vbGVhbiBydW5HRShTdHJpbmcgZm9sZGVyKSB7CisJCWJvb2xlYW4gcmVzdWx0ID0gdHJ1ZTsKKwkJR0VMb2cuZGVidWcodGhpcywiR29vZ2xlRWFydGggcnVuIHJlcXVlc3QiKTsKKwkJaWYgKGFjdGl2ZVZpZXcgPT0gbnVsbCkgewkKKwkgICAgICAgIAorCSAgICAgICAgYWN0aXZlVmlldyA9ICJydW5HRSI7CisJICAgICAgICAKKwkgICAgICAgIFN0ZW1LbWwuc2V0V2FpdEZvcktNTChmYWxzZSk7CisJICAgICAgICBTdGVtS21sLmxhdW5jaE5ldHdvcmtMaW5rKGZvbGRlciwgbnVsbCk7CisJCX0gZWxzZSB7CisJCQllcnJvck1lc3NhZ2UgPSAiR29vZ2xlRWFydGggaXMgYnVzeSI7CisJCQlHRUxvZy5kZWJ1Zyh0aGlzLGVycm9yTWVzc2FnZSk7CisJCQlyZXN1bHQgPSBmYWxzZTsKKwkJCQorCQl9CisJCXJldHVybiByZXN1bHQ7CisJfQorCS8qKgorCSAqICBjYWxsZWQgYnkgR0VWaWV3IHRvIHN0YXJ0IHRoZSBHb29nbGVFYXJ0aCAKKwkgKiAgYXBwbGljYXRpb24gaWYgbm90IGFscmVhZHkgc3RhcnRlZAorCSAqIAorCSAqIAorCSAqIAorCSAqIEByZXR1cm4gIHRydWUgaWYgYWJsZSB0byBkaXNwbGF5IG1hcCBvciBmYWxzZSBpZiBjb3VsZCBub3QuCisJICovCisJcHVibGljIGJvb2xlYW4gc3RhcnRHRSgpIHsKKwkJYm9vbGVhbiByZXN1bHQgPSB0cnVlOwkKKwkJR0VMb2cuZGVidWcodGhpcywiR29vZ2xlRWFydGggU3RhcnQgcmVxdWVzdCIpOworCSAgICBTdGVtS21sLmxhdW5jaEdFKCk7CisJCQorCQlyZXR1cm4gcmVzdWx0OworCX0KKwkvKioKKwkgKiAgY2FsbGVkIGJ5IEdFVmlldyB3aGVuIHRoZSBHb29nbGVFYXJ0aCAKKwkgKiAgYXBwbGljYXRpb24gaXMgYmVpbmcgcmVzdGFydGVkLgorCSAqIAorCSAqIAorCSAqIAorCSAqIEByZXR1cm4gIHRydWUgaWYgYWJsZSB0byByZXNldCBvciBmYWxzZSBpZiBjb3VsZCBub3QuCisJICovCisJcHVibGljIGJvb2xlYW4gcmVzdGFydEdFKCkgeworCQlib29sZWFuIHJlc3VsdCA9IHRydWU7CQorCQlHRUxvZy5kZWJ1Zyh0aGlzLCJHb29nbGVFYXJ0aCBSZXN0YXJ0IHJlcXVlc3QiKTsKKwkgICAgU3RlbUttbC5sYXVuY2hHRSgpOworCSAgICBpbnQgbWV0aG9kID0gMDsKKwkJCisJCS8vIFRPRE8gCisJICAgIC8vIHJlZXN0YWJsaXNoIHRoZSBjb21tdW5pY2F0aW9uIGVudmlyb25tZW50LgorCSAgICAvLyBJZiBhIG5ldHdvcmtsaW5rIHdhcyBhY3RpdmUsIHJlZXN0YWJsaXNoIGl0LgorCSAgICBpZiAoYWN0aXZlVmlldyAhPSBudWxsKSAgeworCSAgICAJR0VTaW1FbnRyeSBleGlzdGluZyA9IGFjdGl2ZVNpbXVsYXRpb25zLmdldChhY3RpdmVWaWV3KTsKKwkJCWlmIChleGlzdGluZyAhPSBudWxsKSB7CisJCQkJbWV0aG9kID0gZXhpc3RpbmcuZ2V0TWV0aG9kKCk7CisJCQkJSVNpbXVsYXRpb24gc2ltID0gZXhpc3RpbmcuZ2V0U2ltdWxhdGlvbigpOworCQkJCWlmIChzaW0uZ2V0U2ltdWxhdGlvblN0YXRlKCkgPT0gU2ltdWxhdGlvblN0YXRlLlJVTk5JTkcpeworCQkJCQllcnJvck1lc3NhZ2UgPSAKKwkJCQkJCSJTaW11bGF0aW9uIHNob3VsZCBiZSBwYXVzZWQgd2hpbGUgcmVzdGFydGluZyBHb29nbGVFYXJ0aCI7CisJCQkJCXJldHVybiBmYWxzZTsKKwkJCQkJCQorCQkJCX0KKwkJCQlTdHJpbmcgZm9sZGVyID0gZXhpc3RpbmcuZ2V0TG9nRm9sZGVyKCk7CisJCQkgICAgaWYgKG1ldGhvZCA9PSBHRVByZWZlcmVuY2VQYWdlLk1fQVNZTkNfU0VSVkxFVCB8fAorCQkJICAgIAltZXRob2QgPT0gR0VQcmVmZXJlbmNlUGFnZS5NX0xPR19TRVJWTEVUKQl7ICAgICAgICAKKwkJCSAgICAJU3RlbUttbC5sYXVuY2hOZXR3b3JrTGluayhmb2xkZXIsIG51bGwpOworCQkJICAgIH0KKwkgICAgICAgIH0KKwkJfQorCQlyZXR1cm4gcmVzdWx0OworCX0KKwkvKioKKwkgKiAgY2FsbGVkIGJ5IEdFVmlldyB0byBzdG9wIHRoZSBjdXJyZW50CisJICogIGRpc3BsYXkgdGhlIEtNTCBmaWxlcyBvbiBHRQorCSAqICB2aWEgdGhlIFNlcnZsZXQgQVBJCisJICogCisJICogCisJICogQHJldHVybiAgdHJ1ZSAKKwkgKi8KKwlwdWJsaWMgYm9vbGVhbiBzdG9wR0UoKSB7CisJCWJvb2xlYW4gcmVzdWx0ID0gdHJ1ZTsJCisJCUdFTG9nLmRlYnVnKHRoaXMsIkdvb2dsZUVhcnRoIFN0b3AgcmVxdWVzdCIpOworCQkvL1N0ZW1LbWwubGF1bmNoR0UoKTsKKwkJaWYgKGRpZERpc3BsYXlBcmVhKSB7CisJCQlTdGVtS21sLmNsZWFyRGlzcGxheUFyZWEoKTsKKwkJfQorCQlhY3RpdmVWaWV3ID0gbnVsbDsKKwkJLy8gZm9yIHNvbWUgcmVhc29uIGl0IGFwcGVhcnMgdGhhdCBzb21ldGltZXMgCisJCS8vIGl0IHRha2VzIHRvIHdyaXRpbmcgb2YgYW4gZW1wdHkgY29udHJvbCBmaWxlCisJCS8vIHRvIHN0b3AgdGhlIGN1cnJlbnQgTmV0d29ya0xpbmsgc28gZG8gaXQgYWdhaW4KKwkJU3RlbUttbC5sYXVuY2hHRSgpOworCQlyZXR1cm4gcmVzdWx0OworCX0KKwkvKioKKwkgKiBTY2hlZHVsZSB0aGUgYmFja2dyb3VuZCBqb2IgdGhhdCB3aWxsIGJ1aWxkIHRoZSAua21sIGZpbGUgCisJICogdGhhdCB3aWxsIGJlIHNlbnQgdG8gR29vZ2xlRWFydGggCisJICogCisJICogQHBhcmFtIGZuICAgICAgIEZ1bGx5IHF1YWxpZmllZCBGaWxlbmFtZSB3aGVyZSB3ZSB3cml0ZSB0aGUga21sCisJICogQHBhcmFtIHN0ZW1LbWwgIE9iamVjdCBjb250YWluaW5nIGluZm8gYWJvdXQgd2hlcmUgYW5kCisJICogICAgICAgICAgICAgICAgIGhvdyB0byBnZW5lcmF0ZSB0aGUgS01MLgorCSAqIEBwYXJhbSBzdGVtTWFwICBNYXAgb2YgUG9seWdvbnMgd2l0aCBTRUlSIGRhdGEgYW5kIFBvcERlbnNpdHkKKwkgKiAKKwkgKiBAcGFyYW0gYXNwZWN0ICAgU0VJUiBUeXBlIHRvIGJlIGRpc3BsYXllZAorCSAqIEBwYXJhbSBjeWNsZSAgICBjdXJyZW50IGN5Y2xlIG51bWJlcgorCSAqIEBwYXJhbSBsYXVuY2ggICB0cnVlIGlmIGZpbGUgc2hvdWxkIGJlIHNlbnQgdG8gR29vZ2xlRWFydGgKKwkgKiBAcGFyYW0gcmVuYW1lICAgdHJ1ZSBpZiBmaWxlIHNob3VsZCBiZSB3cml0dGVuIHRoZW4gcmVuYW1lZAorCSAqIEByZXR1cm4gcmVmZXJlbmNlIHRvIHRoZSBmaWxlIGNvbnRhaW5pbmcgdGhlIEtNTAorCSAqLwkKKwkKKwlwcml2YXRlIFN0ZW1LbWwgZ2VuZXJhdGVLTUwoU3RyaW5nIGZuLFN0ZW1LbWwgc3RlbUttbCwgTWFwPFN0cmluZyxHRURhdGE+IHN0ZW1NYXAsCisJCQlBc3BlY3QgYXNwZWN0LGxvbmcgY3ljbGUsYm9vbGVhbiBsYXVuY2gsYm9vbGVhbiByZW5hbWUpIHsJCisJCXRyeSB7CisJCQlHRUpvYiBqb2IgPSBuZXcgR0VKb2IoIkdlbmVyYXRlIEtNTCIpOworCQkJam9iLmdlbmVyYXRlS01MKGZuLHN0ZW1LbWwsIHN0ZW1NYXAsIGFzcGVjdCwgY3ljbGUsbGF1bmNoLHJlbmFtZSk7CisJCQkKKwkJfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsJCQkKKwkJCWUucHJpbnRTdGFja1RyYWNlKCk7CisJCX0KKwkJcmV0dXJuIHN0ZW1LbWw7CisJfQorCQorCQorCS8qKgorCSAqIG9idGFpbiB0aGUgY3VycmVudCBhc3BlY3QgdmFsdWVzIGFuZCBzdG9yZSB0aGVtIGluIHRoZSAKKwkgKiBHRURhdGEgaW5zdGFuY2UKKwkgKiAKKwkgKiBAcGFyYW0gc2ltCisJICogQHBhcmFtIHN0ZW1NYXAKKwkgKi8KKwkKKwlwcml2YXRlIHZvaWQgc3RvcmVBc3BlY3RzKElTaW11bGF0aW9uIHNpbSxNYXA8U3RyaW5nLEdFRGF0YT4gc3RlbU1hcCkgeworCQkKKwkJU2NlbmFyaW8gc2NlbmFyaW8gPSBzaW0uZ2V0U2NlbmFyaW8oKTsJCQorCQkvLwkJIFdlIGdldCB0aGUgZGVjb3JhdG9ycyBmcm9tIHRoZSBzY2VuYXJpbyAuLi4JCQkKKwkJR3JhcGggZyA9IHNjZW5hcmlvLmdldENhbm9uaWNhbEdyYXBoKCk7CisJCURlY29yYXRvcltdIGRlY29yYXRvcnMgPSBnLmdldERlY29yYXRvcnMoKS50b0FycmF5KG5ldyBEZWNvcmF0b3JbZy5nZXREZWNvcmF0b3JzKCkuc2l6ZSgpXSk7CisJCWludCBlcnIxY3RyID0gMDsgIC8vIG5vIGxhdGxvbmcgZGF0YQorCQlpbnQgZXJyMmN0ciA9IDA7ICAvLyBubyBhc3BlY3QgZGF0YQorCQlmb3IgKERlY29yYXRvciBkZWNvcmF0b3IgOiBkZWNvcmF0b3JzKSB7CisJCisJCQlPYmplY3RbXSBsYWJlbHMgPSBkZWNvcmF0b3IuZ2V0TGFiZWxzVG9VcGRhdGUoKS50b0FycmF5KCk7CisJCQlmb3IgKE9iamVjdCBlbGVtZW50OiBsYWJlbHMpeworCQkJCQorCQkJCWlmICggZWxlbWVudCBpbnN0YW5jZW9mIE5vZGVMYWJlbCkgeworCQkJCQlOb2RlTGFiZWwgbm9kZUxhYmVsID0gKE5vZGVMYWJlbCllbGVtZW50OworCQkJCQlOb2RlIG5vZGUgPSBub2RlTGFiZWwuZ2V0Tm9kZSgpOworCQkJCQkKKwkJCQkJU3RyaW5nIGtleSA9IG5vZGUuZ2V0RHVibGluQ29yZSgpLmdldFRpdGxlKCk7CisJCQkJCQorCQkJCQlHRURhdGEgZGF0YSA9IHN0ZW1NYXAuZ2V0KGtleSk7CisJCQkJCQorCQkJCQlpZiAoZGF0YSA9PSBudWxsKSB7CSAgLy8gZmlsdGVyZWQgcHJldmlvdXNseQkKKwkJCQkJCWNvbnRpbnVlOworCQkJCQl9CisJCQkJCWJvb2xlYW4ga2VlcCA9IGZpbHRlcihub2RlLGtleSxkYXRhKTsKKwkJCQkJaWYgKCFrZWVwKSAKKwkJCQkJCWNvbnRpbnVlOworCQkJCQkvL2lmIChub2RlTGFiZWwgaW5zdGFuY2VvZiBTRUlSTGFiZWxJbXBsKSB7CisJCQkJCQkvLyBUT0RPIHdlIG5lZWQgYSB3YXkgdG8gZ2V0IFBvcERlbnNpdHkKKwkJCQkJCS8vU0VJUkxhYmVsSW1wbCBsYWJlbCA9IChTRUlSTGFiZWxJbXBsKW5vZGVMYWJlbDsKKwkJCQkJCS8vRGlzZWFzZU1vZGVsU3RhdGUgc3RhdGUgPSAoRGlzZWFzZU1vZGVsU3RhdGUpbGFiZWwuZ2V0RGlzZWFzZU1vZGVsU3RhdGUoKTsJCQkJCQkJCisJCQkJCS8vCXBvcERlbnNpdHkgPTUwKk1hdGgucmFuZG9tKCk7IC8vc3RhdGUuZ2V0UG9wdWxhdGlvbkRlbnNpdHkoKTsKKwkJCQkJLy8JZGF0YS5zZXRQb3BEZW5zaXR5KHBvcERlbnNpdHkpOworCQkJCQkvL30KKwkJCQkJUmVsYXRpdmVWYWx1ZVByb3ZpZGVyQWRhcHRlciBydnAgPSAoUmVsYXRpdmVWYWx1ZVByb3ZpZGVyQWRhcHRlcikgUmVsYXRpdmVWYWx1ZVByb3ZpZGVyQWRhcHRlckZhY3RvcnkuSU5TVEFOQ0UKKwkJCQkJLmFkYXB0KGVsZW1lbnQsIFJlbGF0aXZlVmFsdWVQcm92aWRlci5jbGFzcyk7CisJCQkJCXJ2cC5zZXRUYXJnZXQoKE5vdGlmaWVyKWVsZW1lbnQpOworCQkJCQkKKwkJCQkJLy8gRG9lcyB0aGUgbGFiZWwgaGF2ZSByZWxhdGl2ZSB2YWx1ZXM/CisJCQkJCQorCQkJCQlpZiAocnZwICE9IG51bGwpIHsJCisJCQkJCQlNYXA8U3RyaW5nLERvdWJsZT4gbWFwID0gZGF0YS5nZXRWYWx1ZU1hcCgpOworCQkJCQkJZm9yIChJdGVyYXRvciBwcm9wZXJ0eUl0ZXIgPSAKKwkJCQkJCQlydnAuZ2V0UHJvcGVydGllcygpLml0ZXJhdG9yKCk7IHByb3BlcnR5SXRlci5oYXNOZXh0KCk7KSB7CisJCQkJCQkJSXRlbVByb3BlcnR5RGVzY3JpcHRvciBwcm9wZXJ0eSA9IAorCQkJCQkJCQkoSXRlbVByb3BlcnR5RGVzY3JpcHRvcikgcHJvcGVydHlJdGVyLm5leHQoKTsKKworCQkJCQkJCVN0cmluZyBwID0gcHJvcGVydHkuZ2V0RGlzcGxheU5hbWUocHJvcGVydHkpOworCQkJCQkJCWRvdWJsZSB2ID0gcnZwLmdldFJlbGF0aXZlVmFsdWUocHJvcGVydHkpOworCQkJCQkJCS8vIFRPRE8gZGVidWcgaW5zZXJ0IG9mIEluZmVjdGlvdXMgdmFsdWUKKy8vCQkJCQkJCWlmIChrZXkuc3RhcnRzV2l0aCgiTSIpICYmIHAuZXF1YWxzKCJJIikpIHsKKy8vCQkJCQkJCQl2ID0gTWF0aC5yYW5kb20oKTsKKy8vCQkJCQkJCX0KKwkJCQkJCQkvLyBpZiB3ZSBhcmUga2VlcGluZyB0cmFjayBvZiB0aGlzIGFzcGVjdAorCQkJCQkJCWlmIChBc3BlY3QuZXhpc3RzKHApKSB7CisJCQkJCQkJCW1hcC5wdXQocCx2KTsKKwkJCQkJCQl9CisJCQkJCQl9IC8vIGZvciBlYWNoIHByb3BlcnR5CisJCQkJCQkvLyAgcmVtb3ZlIGRlYnVnIGNvZGUKKwkJCQkJCS8vIFRvIGRlYnVnIHRoaXMgdGhlbiBtYWtlIHRoZSBpbmZlY3Rpb3VzIHZhbHVlIHJhbmRvbQorLy8JCQkJCQlpZiAoa2V5LnN0YXJ0c1dpdGgoIk1pZGRsZXNleCIpICYmIGtleS5jb250YWlucygiTUEiKSkgewkJCQkJCQkKKy8vCQkJCQkJCUdFTG9nLmRlYnVnKHRoaXMsa2V5KyIgQXNwZWN0czogIitkYXRhLmdldFZhbHVlc0FzU3RyaW5nKCkpOworLy8JCQkJCQkJLy9HRUxvZy5kZWJ1Zyh0aGlzLCJCQm94OiIrZGF0YS5nZXRCQm94KCkpOworLy8JCQkJCQl9CisvLwkJCQkJCWlmIChrZXkuY29udGFpbnMoIkcyMjAwMTAiKSApIHsJCQkJCQkJCisvLwkJCQkJCQlHRUxvZy5kZWJ1Zyh0aGlzLGtleSsiIEFzcGVjdHM6ICIrZGF0YS5nZXRWYWx1ZXNBc1N0cmluZygpKTsKKy8vCQkJCQkJCS8vR0VMb2cuZGVidWcodGhpcywiQkJveDoiK2RhdGEuZ2V0QkJveCgpKTsKKy8vCQkJCQkJfQorCQkJCQl9IGVsc2UgeworCQkJCQkJLy9pZiAoZXJyMmN0ciA9PSAwKSAKKwkJCQkJCS8vR0VMb2cuZGVidWcodGhpcywiTm9kZTogIitrZXkrIiBoYXMgbm8gYXNwZWN0IGRhdGEiKTsKKwkJCQkJCWVycjJjdHIrKzsKKwkJCQkJfQorCisJCQkJfQorCQkJfSAgLy8gZm9yCisJCX0KKwkJCisJCWlmIChlcnIxY3RyID4gMCkgCisJCQlHRUxvZy5kZWJ1Zyh0aGlzLCJOb2RlcyB3aXRoIG5vIExhdExvbmcgZGF0YS4gY291bnQ9IitlcnIxY3RyKTsKKwkJaWYgKGVycjJjdHIgPiAwKQorCQkgICAgR0VMb2cuZGVidWcodGhpcywiTm9kZXMgd2l0aCBubyBhc3BlY3QgdmFsdWVzLiBjb3VudD0iK2VycjJjdHIpOworCX0KKwkKKwkvKioKKwkgKiBCdWlsZCBhIFN0ZW1NYXAgaW5zdGFuY2UgZm9yIHRoZSBzcGVjaWZpZWQgU2ltdWxhdGlvbgorCSAqIAorCSAqIFRoZSBTdGVtTWFwIGlzIGEgSGFzaE1hcCBjb250YWluaW5nIEdFRGF0YSBvYmplY3RzIAorCSAqIGtleWVkIGJ5IGFyZWFpZC4gIFRoZSBsb2NhdGlvbiBvYmplY3QgY29udGFpbnMgdGhlIAorCSAqIGdlb2dyYXBoaWMgYm9yZGVycyBmb3IgdGhlIGFyZWFpZC4KKwkgKiAKKwkgKiBAcGFyYW0gc2ltdWxhdGlvbiB0aGF0IHdpbGwgYmUgc2hvd24KKwkgKiBAcmV0dXJuIE1hcCBLZXkgaXMgbm9kZSwgZWxlbWVudCBpcyBHRURhdGEgaW5zdGFuY2UKKwkgKiAKKwkgKi8KKwkKKwlwcml2YXRlIE1hcDxTdHJpbmcsR0VEYXRhPiBidWlsZE1hcChJU2ltdWxhdGlvbiBzaW11bGF0aW9uKSB7CisJCXRyeSB7CisJCQlzdGVtTWFwID0gbmV3IEhhc2hNYXA8U3RyaW5nLEdFRGF0YT4oKTsKKwkJCQorCQkJCisJCQlTY2VuYXJpbyBzY2VuYXJpbyA9IHNpbXVsYXRpb24uZ2V0U2NlbmFyaW8oKTsKKwkJCS8vU3RyaW5nIHRpdGxlID0gc2NlbmFyaW8ucHJvZHVjZVRpdGxlKCk7CisJCQkvL0R1YmxpbkNvcmUgZGMgPSBzY2VuYXJpby5nZXREdWJsaW5Db3JlKCk7CisJCQkvL0dFTG9nLmRlYnVnKHRoaXMsImJ1aWxkTWFwKCk6IHRpdGxlPSIrdGl0bGUpOworCQkJLy9HRUxvZy5kZWJ1Zyh0aGlzLCJidWlsZE1hcCgpOiBEdWJsaW5Db3JlPSIrZGMpOworCQkJCisJCQkKKwkJCS8vCQkgV2UgZ2V0IHRoZSBncmFwaC4uLgorCQkJZmluYWwgR3JhcGggY2Fub25pY2FsR3JhcGggPSBzY2VuYXJpby5nZXRDYW5vbmljYWxHcmFwaCgpOworCQkJLy9HRUxvZy5kZWJ1Zyh0aGlzLCJidWlsZE1hcCgpOiBjYW5vbmljYWxHcmFwaD0iK2Nhbm9uaWNhbEdyYXBoKTsKKwkJCWlmIChjYW5vbmljYWxHcmFwaCA9PSBudWxsKSB7CisJCQkJR0VMb2cuZGVidWcodGhpcywiYnVpbGRNYXAoKTogY2Fub25pY2FsR3JhcGggaXMgbnVsbCIpOworCQkJCXJldHVybiBudWxsOworCQkJfQorCQkJLy8gLi4uYW5kIGNhbiBub3cgaXRlcmF0ZSB0aHJvdWdoIHRoZSBub2Rlcy4gTm90ZSB0aGF0IHRoZSBtZXRob2QKKwkJCS8vICJnZXROb2RlcyIgcmV0dXJucyBhIG1hcCBpbmRleGVkIGJ5IHRoZSBVUkkgb2YgZWFjaCBvZiB0aGUgbm9kZXMsCisJCQkvLyB0aHVzIHdlIG5lZWQgdG8gZ2V0IHRoZSB2YWx1ZXMgb2YgdGhlIG1hcCB0byBoYXZlIGFuIGFjdHVhbCBsaXN0IHRvCisJCQkvLyBpdGVyYXRvciBvdmVyLgkJCQkKKwkJCWludCBlcnJjdHIgPSAwOworCQkJZm9yIChmaW5hbCBJdGVyYXRvciBub2RlSXRlciA9IGNhbm9uaWNhbEdyYXBoLmdldE5vZGVzKCkudmFsdWVzKCkKKwkJCQkJLml0ZXJhdG9yKCk7IG5vZGVJdGVyLmhhc05leHQoKTspIHsKKwkJCQlmaW5hbCBOb2RlIG5vZGUgPSAoTm9kZSkgbm9kZUl0ZXIubmV4dCgpOworCQkJICAgIFN0cmluZyBub2RlVGl0bGUgPSBub2RlLmdldER1YmxpbkNvcmUoKS5nZXRUaXRsZSgpOworCQkJICAgIC8vR0VMb2cuZGVidWcodGhpcywgbm9kZSsiIDogIisgbm9kZVRpdGxlKTsKKwkJCSAgICBib29sZWFuIGtlZXAgPSBmaWx0ZXIobm9kZSxub2RlVGl0bGUsbnVsbCk7CisJCQkgICAgaWYgKCEga2VlcCkgCisJCQkgICAgCWNvbnRpbnVlOworCQkJICAgCisgICAgICAgICAgICAgICAgLy8gVGhlIG5vZGUgbWF5IG9yIG1heSBub3QgaGF2ZSBsYXQvbG9uZyBkYXRhIGFzc29jaWF0ZWQgd2l0aAorCQkJCS8vIGl0LCBpZiBpdCBkb2Vzbid0IHRoZSBMYXRMb25nIHRoYXQncyByZXR1cm5lZCB3aWxsIGJlIGVtcHR5LgorCQkJCWZpbmFsIExhdExvbmcgbGF0TG9uZ0RhdGEgPSBnZXRMYXRMb25nKG5vZGUpOworCQkJCWlmIChsYXRMb25nRGF0YSAhPSBudWxsICYmIGxhdExvbmdEYXRhLnNpemUoKSA+IDApIHsKKworCQkJCSAgICBHRURhdGEgZGF0YSA9IG5ldyBHRURhdGEobm9kZVRpdGxlLGxhdExvbmdEYXRhKTsKKwkJCQkgICAgc3RlbU1hcC5wdXQobm9kZVRpdGxlLGRhdGEpOworCQkJCQkJCSAgCisJCQkJfSBlbHNlIHsJCQkJCQorLy8JCQkJCWlmIChlcnJjdHIgPD0gMikgeworLy8JCQkJCSAgR0VMb2cuZGVidWcodGhpcywiYnVpbGRNYXAoKTogTm8gc3BhY2lhbCBkYXRhXG4iKworLy8JCQkJCQkJICAiTmFtZT0iK25vZGVUaXRsZSsiIE5vZGU9Iitub2RlKTsKKy8vCQkJCQl9CisJCQkJCWVycmN0cisrOworCQkJCX0KKwkJCQkKKwkJCX0gLy8gZm9yIGVhY2ggbm9kZQorCQkJCisJCQlpZiAoZXJyY3RyID4gMCkKKwkJCQkgICBHRUxvZy5kZWJ1Zyh0aGlzLCJUb3RhbCBidWlsZG1hcCBlcnJvcnMgPSAiK2VycmN0cik7CQorCQkJCisJCX0gY2F0Y2ggKFRocm93YWJsZSBlKSB7CisJCQkKKwkJCUdFTG9nLmVycm9yKCJGYWlsdXJlIGJ1aWxkaW5nIGFyZWEgbWFwIiwgZSk7CisJCQlzdGVtTWFwID0gbnVsbDsKKwkJfQorCQkKKwkJCisJCXJldHVybiBzdGVtTWFwOwkKKwl9CisJLyoqCisJICogRmlsdGVyIG91dCBub2RlcyB0aGF0IHdlIGFyZSBub3QgaW50ZXJlc3RlZCBpbiAKKwkgKiBOb3RlOiBUaGUgaW1wb3J0YW50IGZpbHRlcmluZyBpcyBkb25lIGluIHRoZSAKKwkgKiBmaWx0ZXIgbWV0aG9kIGluIFN0ZW1LbWwuICBUaGlzIGp1c3QgYWZmZWN0cyBnYXRoZXJpbmcgb2YgCisJICogYXNwZWN0IGRhdGEgLgorCSAqIAkKKwkgKiBAcGFyYW0gbm9kZQorCSAqIEBwYXJhbSBub2RlVGl0bGUKKwkgKiBAcGFyYW4gZGF0YSBHRURhdGEgaW5zdGFuY2UgZm9yIHRoZSBub2RlCisJICogQHJldHVybiB0cnVlIGlmIHdlIHNob3VsZCBrZWVwIHRoZSBub2RlLCBmYWxzZSB0byBpZ25vcmUgaXQKKwkgKi8KKwlib29sZWFuIGZpbHRlcihOb2RlIG5vZGUsU3RyaW5nIG5vZGVUaXRsZSwgR0VEYXRhIGRhdGEpIHsKKy8vCQkgaWYgKEdFUHJlZmVyZW5jZVBhZ2UuaXNUZXN0KCkpIHsKKy8vCQkJCWlmIChub2RlVGl0bGUuaW5kZXhPZigiIFVTLSIpPCAwICkgewkJCQkJCisvLwkJCQkJcmV0dXJuIGZhbHNlOworLy8JCQkJfQorLy8JCSB9CisvLwkJCQkvLyBpZ25vcmUgYWxhc2thCisvLwkJaWYgKG5vZGVUaXRsZS5pbmRleE9mKCIgVVMtQUsiKT4gMCApIHsJCQkJCQorLy8JCQkJCXJldHVybiBmYWxzZTsKKy8vCQl9CisvLy8vCQkJCSBpZ25vcmUgaGF3YWlpCisvLwkJaWYgKG5vZGVUaXRsZS5pbmRleE9mKCIgVVMtSEkiKT4gMCApIHsJCQkJCQorLy8JCQkJCXJldHVybiBmYWxzZTsKKy8vCQkKKwkJLy8gZmlsdGVyIG91dCBBZG1pbkFyZWEgMCBiZWNhdXNlIHRoZXkgIm1heSIgYmUgY29udGFpbmVyIGVudHJpZXMKKwkJaW50IGFkbWluYXJlYSA9IGdldEFyZWFUeXBlKG5vZGUpOworCQlpZiAoYWRtaW5hcmVhIDw9IDApIHsKKwkJCUdFTG9nLmRlYnVnKHRoaXMsIlNraXAgQWRtaW5BcmVhIDA6ICIrbm9kZSk7CisJCQlyZXR1cm4gZmFsc2U7CisJCX0KKwkJLy8gZGVidWcgc3R1ZmYKKwkJaWYgKGRpc3BsYXlOb2RlICE9IG51bGwpIHsKKwkJCWRpc3BsYXlOb2RlID0gZGlzcGxheU5vZGUudG9Mb3dlckNhc2UoKTsJCQkKKwkJCWlmIChub2RlVGl0bGUudG9Mb3dlckNhc2UoKS5jb250YWlucyhkaXNwbGF5Tm9kZSkgKSB7CisJCQkJR0VMb2cuZGVidWcodGhpcywiRGlzcGxheTogIitub2RlVGl0bGUpOworCQkJCXJldHVybiB0cnVlOworCQkJfSBlbHNlIHsKKwkJCQkvL0dFTG9nLmRlYnVnKHRoaXMsIkRvIG5vdCBEaXNwbGF5OiAiK25vZGVUaXRsZSk7CisJCQkJcmV0dXJuIGZhbHNlOworCQkJfQorCQkJCisJCX0KKwkJcmV0dXJuIHRydWU7CisJfQorCisJLyoqCisJICogR2V0IHRoZSBpZCBvZiB0aGUgYXJlYSBmcm9tIHRoZSBEdWJsaW5Db3JlIGluc3RhbmNlCisJICogQHBhcmFtIHJlZ2lvbiBOb2RlIHJlcHJlc2VudGluZyBhbiBBZG1pbkFyZWEKKwkgKiBAcmV0dXJuIDMgQ2hhciBJU08gaWQgb2YgQ291bnRyeQorCSAqLworCisJcHJpdmF0ZSBTdHJpbmcgZ2V0QXJlYUlEKE5vZGUgcmVnaW9uKSB7CisJCWZpbmFsIER1YmxpbkNvcmUgZGMgPSByZWdpb24uZ2V0RHVibGluQ29yZSgpOworCQlmaW5hbCBTdHJpbmcgZGNJZGVudGlmaWVyID0gZGMuZ2V0SWRlbnRpZmllcigpOworCisJCWZpbmFsIFN0cmluZyBpc29LZXkgPSBkY0lkZW50aWZpZXIuc3Vic3RyaW5nKGRjSWRlbnRpZmllcgorCQkJCS5sYXN0SW5kZXhPZigiLyIpKzEpOworCSAgICByZXR1cm4gaXNvS2V5OworCX0KKwkvKioKKwkgKiBHZXQgdGhlIG5hbWUgb2YgdGhlIGFyZWEgZnJvbSB0aGUgRHVibGluQ29yZSBpbnN0YW5jZQorCSAqIEBwYXJhbSByZWdpb24gTm9kZSByZXByZXNlbnRpbmcgYW4gQWRtaW5BcmVhCisJICogQHJldHVybiBOYW1lIG9mIHRoZSBBZG1pbkFyZWEKKwkgKi8KKworCXByaXZhdGUgU3RyaW5nIGdldEFyZWFOYW1lKE5vZGUgcmVnaW9uKSB7CisJCWZpbmFsIER1YmxpbkNvcmUgZGMgPSByZWdpb24uZ2V0RHVibGluQ29yZSgpOworCQlmaW5hbCBTdHJpbmcgZGNJZGVudGlmaWVyID0gZGMuZ2V0SWRlbnRpZmllcigpOworCisJCWZpbmFsIFN0cmluZyBpc29LZXkgPSBkY0lkZW50aWZpZXIuc3Vic3RyaW5nKGRjSWRlbnRpZmllcgorCQkJCS5sYXN0SW5kZXhPZigiLyIpKzEpOworCQkvLyBEaWQgd2UgZ2V0IGl0PworCQlpZiAoaXNvS2V5ICE9IG51bGwgJiYgISIiLmVxdWFscyhpc29LZXkpKSB7CisJCQkvLyBZZXMKKwkJCWZpbmFsIFN0cmluZyBnZW9ncmFwaGljTmFtZSA9IAorCQkJCUdlb2dyYXBoaWNOYW1lcy5nZXROYW1lKGlzb0tleSk7CisJCQlyZXR1cm4gZ2VvZ3JhcGhpY05hbWU7CisvLwkJCWZpbmFsIFN0cmluZ0J1aWxkZXIgc2I9IG5ldyBTdHJpbmdCdWlsZGVyKGdlb2dyYXBoaWNOYW1lKTsKKy8vCQkJc2IuYXBwZW5kKCIgKCIpOworLy8JCQlzYi5hcHBlbmQoaXNvS2V5KTsKKy8vCQkJc2IuYXBwZW5kKCIpIik7CisvLwkJCXJldHVybiBzYi50b1N0cmluZygpOworCQl9IGVsc2UgeworCQkJcmV0dXJuIGRjLmdldFRpdGxlKCk7CisJCX0KKwl9CisJCisJLyoqCisJICogR2V0IHRoZSB0eXBlIG9mIHRoZSBBZG1pbiBhcmVhIGZyb20gdGhlIER1YmxpbkNvcmUgaW5zdGFuY2UKKwkgKiBAcGFyYW0gcmVnaW9uCisJICogQHJldHVybiAwIDEgb3IgMiAoLTEgaWYgcHJvYmxlbSkKKwkgKi8KKworCXByaXZhdGUgaW50IGdldEFyZWFUeXBlKE5vZGUgbm9kZSkgeworCQlpbnQgYXJlYXR5cGUgPSAtMTsKKwkJZmluYWwgRHVibGluQ29yZSBkYyA9IG5vZGUuZ2V0RHVibGluQ29yZSgpOworCQlmaW5hbCBTdHJpbmcgc3BhdGlhbCA9IGRjLmdldFNwYXRpYWwoKTsKKyAgICAKKwkJaWYgKHNwYXRpYWwgIT0gbnVsbCkgeworCQkJU3RyaW5nIG1hcGlkID0gc3BhdGlhbC5zdWJzdHJpbmcoc3BhdGlhbC5sYXN0SW5kZXhPZigiLyIpICsgMSk7CisJCQkvLyBEaWQgd2UgZ2V0IGl0PworCQkJaWYgKG1hcGlkICE9IG51bGwgJiYgISIiLmVxdWFscyhtYXBpZCkpIHsKKwkJCQkvLyAgIFhYWF8wX01BUC54bWwjWFhYCisJCQkJbWFwaWQgPSBtYXBpZC5zdWJzdHJpbmcoMCwgbWFwaWQuaW5kZXhPZigiIyIpKTsKKwkJCQltYXBpZCA9IG1hcGlkLnN1YnN0cmluZyg0LCA1KTsKKwkJCQlhcmVhdHlwZSA9IEludGVnZXIucGFyc2VJbnQobWFwaWQpOworCQkJfQorCQl9CisJCXJldHVybiBhcmVhdHlwZTsKKwl9CisJLyoqCisJICogQnVpbGQgYSBTdGVtTWFwIGluc3RhbmNlIGZvciBhIHNwZWNpZmllZCBTcGF0aWFsIGxvY2F0aW9uCisJICogYmFzZWQgb24gYSBTZWxlY3Rpb24gZXZlbnQgZnJvbSBNYXBWaWV3CisJICogCisJICogVGhlIFN0ZW1NYXAgaXMgYSBIYXNoTWFwIGNvbnRhaW5pbmcgR0VEYXRhIG9iamVjdHMgCisJICoga2V5ZWQgYnkgYXJlYWlkLiAgVGhlIGxvY2F0aW9uIG9iamVjdCBjb250YWlucyB0aGUgCisJICogZ2VvZ3JhcGhpYyBib3JkZXJzIGZvciB0aGUgYXJlYWlkLgorCSAqIAorCSAqIEBwYXJhbSByZWdpb24gVGhlIElkZW50aWZpYWJsZSBkZXNjcmliaW5nIHRoZSBhZG1pbiBhcmVhIHRoYXQgCisJICogICAgICAgICAgICAgICB3YXMgc2VsZWN0ZWQuCisJICogQHBhcmFtIGdzZSAgSW5zdGFjZSBvZiBHZW9ncmFwaGljU2VsZWN0aW9uRWxlbWVudHMgdGhhdCB3YXMKKwkgKiAgICAgICAgICAgICBwYXNzZWQgZnJvbSBNYXBWaWV3IHdoZW4gbW91c2V1cCBvY2N1cnJlZC4KKwkgKiAKKwkgKiBAcmV0dXJuIE1hcCBLZXkgaXMgbm9kZSwgZWxlbWVudCBpcyBHRURhdGEgaW5zdGFuY2UKKwkgKiAKKwkgKi8KKwkKKwlwcml2YXRlIE1hcDxTdHJpbmcsIEdFRGF0YT4gYnVpbGRTZWxlY3Rpb25NYXAoUmVnaW9uSW1wbCByZWdpb24sCisJCQkgICAgICAgICAgICAgICAgICAgICAgICAgR2VvZ3JhcGhpY1NlbGVjdGlvbkVsZW1lbnRzIGdzZSkgeworCQkKKwkJdHJ5IHsKKwkJCQorCQkJRHVibGluQ29yZSBkYyA9IHJlZ2lvbi5nZXREdWJsaW5Db3JlKCk7CisJCQlTdHJpbmcgc3BhdGlhbCA9IGRjLmdldFNwYXRpYWwoKTsKKwkJCQorICAgICAgICAgICAgU3RyaW5nIHVyaVN0cmluZyA9IHNwYXRpYWwucmVwbGFjZSgic3RlbXNwYXRpYWw6IiwiIik7CisgICAgICAgICAgICAKKwkJCXN0ZW1NYXAgPSBuZXcgSGFzaE1hcDxTdHJpbmcsIEdFRGF0YT4oKTsKKwkJCVBsYXRmb3JtTGF0TG9uZ0RhdGFQcm92aWRlciBwcm92aWRlciA9IG5ldyBQbGF0Zm9ybUxhdExvbmdEYXRhUHJvdmlkZXIoKTsKKworCQkJVVJJIHVyaU5vZGUgPSBVUkkuY3JlYXRlVVJJKHVyaVN0cmluZyk7ICAgICAgICAgICAgICAgIAorCQkgICAgTGF0TG9uZyBsYXRMb25nID0gcHJvdmlkZXIuZ2V0TGF0TG9uZyh1cmlOb2RlKTsKKwkJIC8vIGdldCBpZCBvZiB0aGUgYXJlYQorCQkJU3RyaW5nIGlkID0gZ2V0QXJlYUlEKHJlZ2lvbik7CisJCQlTdHJpbmcgbmFtZSA9IGdldEFyZWFOYW1lKHJlZ2lvbik7CisJICAgIAlHRURhdGEgZGF0YSA9IG5ldyBHRURhdGEoaWQsbmFtZSwgbGF0TG9uZyk7CSAgICAJLy8gVXNlIFMganVzdCB0byBnZXQgaXQgdG8gd29yaworCSAgICAJZGF0YS5zZXRWYWx1ZShBc3BlY3QuZ2V0QXNwZWN0KCJTIiksIDAxLjApOworCSAgICAJU3RyaW5nIGRlc2NyaXB0aW9uID0gZm9ybWF0RGVzY3JpcHRpb24ocmVnaW9uLGdzZSk7CisJICAgIAlkYXRhLnNldERlc2NyaXB0aW9uKGRlc2NyaXB0aW9uKTsKKwkgICAgCWRvdWJsZSBsb25naXR1ZGUgPSBnc2UuZ2V0TG9uZ2l0dWRlKCk7CisJICAgIAlkb3VibGUgbGF0aXR1ZGUgPSBnc2UuZ2V0TGF0aXR1ZGUoKTsKKwkgICAgCUdFTG9nLmRlYnVnKGxvbmdpdHVkZSsiOiIrbGF0aXR1ZGUpOworCSAgICAJLy9kb3VibGVbXSBjZW50ZXIgPSBkYXRhLmdldEJCb3hDZW50ZXIoKTsKKwkgICAgCS8vR0VMb2cuZGVidWcoY2VudGVyWzBdKyI6IitjZW50ZXJbMV0pOworCSAgICAJLy8gc2V0IHRoZSB0aHVtYnRhY2sgb24gdGhlIHBvaW50IGNsaWNrZWQgYnkgdXNlcgorCSAgICAJZGF0YS5zZXRQb2ludChsb25naXR1ZGUsIGxhdGl0dWRlKTsKKwkgICAgCQorCSAgICAJc3RlbU1hcC5wdXQoaWQsIGRhdGEpOworCQkJCisJCX0gY2F0Y2ggKFRocm93YWJsZSBlKSB7CisJCQlHRUxvZy5lcnJvcigiRmFpbHVyZSBidWlsZGluZyBhcmVhIG1hcCIsIGUpOworCQkJc3RlbU1hcCA9IG51bGw7CisJCQllcnJvck1lc3NhZ2UgPSAiRXhjZXB0aW9uIHdoaWxlIGJ1aWxkaW5nIE1hcCI7CisJCX0KKworCQlyZXR1cm4gc3RlbU1hcDsKKwl9CisJLyoqCisJICogQnVpbGQgYSBTdGVtTWFwIGluc3RhbmNlIGZvciB0aGUgc3BlY2lmaWVkIFNpbXVsYXRpb24KKwkgKiAKKwkgKiBUaGUgU3RlbU1hcCBpcyBhIEhhc2hNYXAgY29udGFpbmluZyBHRURhdGEgb2JqZWN0cyAKKwkgKiBrZXllZCBieSBhcmVhaWQuICBUaGUgbG9jYXRpb24gb2JqZWN0IGNvbnRhaW5zIHRoZSAKKwkgKiBnZW9ncmFwaGljIGJvcmRlcnMgZm9yIHRoZSBhcmVhaWQuCisJICogCisJICogQHBhcmFtIGFkbWluRmlsZSBmaWxlIG5hbWUgdG8gdXNlIGluIHNlYXJjaAorCSAqIEBwYXJhbSBzZWFyY2ggc3RyaW5nIHRvIGxvb2sgZm9yIAorCSAqIEByZXR1cm4gTWFwIEtleSBpcyBub2RlLCBlbGVtZW50IGlzIEdFRGF0YSBpbnN0YW5jZQorCSAqIAorCSAqLworCQorCXByaXZhdGUgTWFwPFN0cmluZywgR0VEYXRhPiBidWlsZE1hcChTdHJpbmcgYWRtaW5GaWxlLCBTdHJpbmcgc2VhcmNoKSB7CisJCQorCQlTdHJpbmcgYmFzZVVSSSA9IAorCQkJInBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5nZW9ncmFwaHkvIiArIAorCQkJInJlc291cmNlcy9kYXRhL2dlby9jb3VudHJ5LyI7CisJCQorCQl0cnkgeworICAgICAgICAgICAgU3RyaW5nIHVyaVN0cmluZyA9IGJhc2VVUkkrYWRtaW5GaWxlOworCQkJc3RlbU1hcCA9IG5ldyBIYXNoTWFwPFN0cmluZywgR0VEYXRhPigpOworCQkJUGxhdGZvcm1MYXRMb25nRGF0YVByb3ZpZGVyIHByb3ZpZGVyID0gbmV3IFBsYXRmb3JtTGF0TG9uZ0RhdGFQcm92aWRlcigpOworCisJCQlmaW5hbCBVUkkgdXJpID0gVVJJLmNyZWF0ZVVSSSh1cmlTdHJpbmcpOworCQkJZmluYWwgQ29sbGVjdGlvbjxTdHJpbmc+IGlkcyA9IHByb3ZpZGVyLmdldElkcyh1cmkpOworCQkJaWYgKGlkcy5zaXplKCkgPT0gMCkgeworCQkJCWVycm9yTWVzc2FnZSA9ICJJbnZhbGlkIENvdW50cnkgY29kZSBzcGVjaWZpZWQiOworCQkJCXJldHVybiBzdGVtTWFwOworCQkJfQorCQkJU3RyaW5nIG1hdGNoID0gc2VhcmNoLnRvTG93ZXJDYXNlKCk7CisJCQlmb3IgKFN0cmluZyBpZCA6IGlkcykgeworCQkJCWlmIChpZC50b0xvd2VyQ2FzZSgpLmNvbnRhaW5zKG1hdGNoKSkgeworICAgICAgICAgICAgICAgICAgICBVUkkgdXJpTm9kZSA9IFVSSS5jcmVhdGVVUkkodXJpU3RyaW5nICsgIiMiICsgaWQpOyAgICAgICAgICAgICAgICAKKwkJCQkgICAgTGF0TG9uZyBsYXRMb25nID0gcHJvdmlkZXIuZ2V0TGF0TG9uZyh1cmlOb2RlKTsKKwkJCQkgICAgaWYgKGxhdExvbmcgIT0gbnVsbCAmJiBsYXRMb25nLnNpemUoKSA+IDApIHsKKworCQkJCSAgICAJR0VEYXRhIGRhdGEgPSBuZXcgR0VEYXRhKGlkLCBsYXRMb25nKTsKKwkJCQkgICAgCS8vIFVzZSBTIGp1c3QgdG8gZ2V0IGl0IHRvIHdvcmsKKwkJCQkgICAgCWRhdGEuc2V0VmFsdWUoQXNwZWN0LmdldEFzcGVjdCgiUyIpLCAxLjApOworCQkJCSAgICAJc3RlbU1hcC5wdXQoaWQsIGRhdGEpOworCQkJCSAgICB9IGVsc2UgeworCQkJCSAgICAJR0VMb2cuZGVidWcodGhpcywgIk5vIHNwYWNpYWwgZGF0YSIgKyAiIE5hbWU9IiArIGlkKTsKKwkJCQkgICAgfQorCQkJCX0KKworCQkJfSAvLyBmb3IgZWFjaCBpZAorCQkJaWYgKGlkcy5zaXplKCkgPT0gMCkgeworCQkJCWVycm9yTWVzc2FnZSA9ICJObyBNYXRjaGluZyBpbnRlcm5hbCBBZG1pbmlzdHJhdGlvbiBhcmVhIGZvdW5kIjsKKwkJCX0KKwkJfSBjYXRjaCAoVGhyb3dhYmxlIGUpIHsKKworCQkJR0VMb2cuZXJyb3IoIkZhaWx1cmUgYnVpbGRpbmcgYXJlYSBtYXAiLCBlKTsKKwkJCXN0ZW1NYXAgPSBudWxsOworCQkJZXJyb3JNZXNzYWdlID0gIkV4Y2VwdGlvbiB3aGlsZSBidWlsZGluZyBNYXAiOworCQl9CisKKwkJcmV0dXJuIHN0ZW1NYXA7CisJfQorCQorCS8qKgorCSAqIENyZWF0ZSBhIGZvcm1hdGVkIGRpc3BsYXkgdG8gdXNlIGZvciBkZXNjcmlwdGlvbiAKKwkgKiA8cHJlPgorCSAqICAgUzogICAyNS4zJSAKKwkgKiAgIEk6ICAgMTAuMiUKKwkgKiAgIC4uCisJICogICBSOiAgICAwLjAlCisJICogPC9wcmU+CisJICogQHJldHVybiBmb3JtYXR0ZWQgZGVzY3JpcHRpb24KKwkgKi8KKwlwcml2YXRlIFN0cmluZyBmb3JtYXREZXNjcmlwdGlvbihSZWdpb25JbXBsIHJlZ2lvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR2VvZ3JhcGhpY1NlbGVjdGlvbkVsZW1lbnRzIGdzZSkgeworCQlTdHJpbmdCdWZmZXIgc2IgPSBuZXcgU3RyaW5nQnVmZmVyKDEyOCk7CisJCU1hcDxTdHJpbmcsRG91YmxlPiByZWxWYWx1ZXMgPSBnZXRSZWxWYWx1ZXMocmVnaW9uKTsKKwkJU2V0PFN0cmluZz4gYXNwZWN0cyA9IHJlbFZhbHVlcy5rZXlTZXQoKTsKKwkJc2IuYXBwZW5kKCImbHQ7cHJlJmd0OyIpOworCQlzYi5hcHBlbmQoZ2V0QXJlYUlEKHJlZ2lvbikpOworCQlzYi5hcHBlbmQoIiAmbHQ7YnImZ3Q7Iik7CisJCWZvcihTdHJpbmcgYXNwZWN0OmFzcGVjdHMpIHsJCQkKKwkJCURvdWJsZSByZWxWYWx1ZSA9IHJlbFZhbHVlcy5nZXQoYXNwZWN0KSoxMDA7CisJCQkvLyBmb3JtYXQgYXMgIiAgICAgUzogMTUuMSUiCisJCQlTdHJpbmcgcmVzdWx0PSBTdHJpbmcuZm9ybWF0KCIlOHM6ICU1LjFmJSUiLGFzcGVjdCxyZWxWYWx1ZSk7CisJCQlzYi5hcHBlbmQocmVzdWx0KTsKKwkJCS8vIGFkZCB0aGUgaHRtbCBmb3JtYXR0aW5nIAorCQkJc2IuYXBwZW5kKCIgJmx0O2JyJmd0OyIpOworCQl9CisJCXNiLmFwcGVuZCgiJmx0O3ByZSZndDsiKTsKKwkJcmV0dXJuIHNiLnRvU3RyaW5nKCk7CisJfQorCQorCS8qKgorCSAqIEdldCByZWxhdGl2ZSB2YWx1ZXMgZnJvbSB0aGUgR3JhcGguCisJICogV2UgYXJlIGdpdmVuIHRoZSBSZWdpb25JbXBsIGZvciB0aGUgQWRtaW4gQXJlYS4KKwkgKiBXZSB3aWxsIGdldCB0aGUgbGFibGUgZnJvbSBpdCB0aGF0IGNvbnRhaW5zIAorCSAqIHJlbGF0aXZlIHZhbHVlcyBhbmQgcHV0IHRoZW4gaW4gYSBNYXAgd2l0aCAKKwkgKiB0aGUgdmFsdWUgbmFtZSBhcyB0aGUga2V5LgorCSAqIAorCSAqIEBwYXJhbSByZWdpb24KKwkgKiBAcmV0dXJuIE1hcCBjb250YWluaW5nIDxuYW1lOlZhbHVlPgorCSAqLworCXByaXZhdGUgTWFwPFN0cmluZyxEb3VibGU+IGdldFJlbFZhbHVlcyhSZWdpb25JbXBsIHJlZ2lvbikgeworCQlNYXA8U3RyaW5nLERvdWJsZT4gbWFwID0gbmV3IEhhc2hNYXA8U3RyaW5nLCBEb3VibGU+KCk7CisJCQorCQlMaXN0PE5vZGVMYWJlbD4gbm9kZXMgPSByZWdpb24uZ2V0TGFiZWxzKCk7CisJCWZvcihOb2RlTGFiZWwgbm9kZTpub2RlcykgewkJIAorCQkJUmVsYXRpdmVWYWx1ZVByb3ZpZGVyIHJ2cCA9IAorCQkJCShSZWxhdGl2ZVZhbHVlUHJvdmlkZXIpIFJlbGF0aXZlVmFsdWVQcm92aWRlckFkYXB0ZXJGYWN0b3J5LklOU1RBTkNFCisJCQkJCS5hZGFwdChub2RlLCBSZWxhdGl2ZVZhbHVlUHJvdmlkZXIuY2xhc3MpOworCQkJLy8gRG9lcyB0aGUgbGFiZWwgaGF2ZSByZWxhdGl2ZSB2YWx1ZXM/CisJCQlpZiAocnZwICE9IG51bGwpIHsJCQkJCQorCQkJCWZvciAoSXRlcmF0b3IgcHJvcGVydHlJdGVyID0gCisJCQkJCSAgcnZwLmdldFByb3BlcnRpZXMoKS5pdGVyYXRvcigpOyBwcm9wZXJ0eUl0ZXIuaGFzTmV4dCgpOykgeworCQkJCQlJdGVtUHJvcGVydHlEZXNjcmlwdG9yIHByb3BlcnR5ID0gCisJCQkJCQkoSXRlbVByb3BlcnR5RGVzY3JpcHRvcikgcHJvcGVydHlJdGVyLm5leHQoKTsJCQkKKwkJCQkJU3RyaW5nIG5hbWUgPSBwcm9wZXJ0eS5nZXREaXNwbGF5TmFtZShwcm9wZXJ0eSk7CQkJCQkKKwkJCQkJRG91YmxlIHZhbHVlID0gcnZwLmdldFJlbGF0aXZlVmFsdWUocHJvcGVydHkpOworCQkJCSAgICBtYXAucHV0KG5hbWUsIHZhbHVlKTsJCQkJCQkJCQorCQkJICAgIH0gLy8gZm9yCQkJCQorCQkJfQkJCQorCQl9IC8vIGZvcgorICAgICAgICByZXR1cm4gbWFwOworCX0KKwkvKioKKwkgKiBHZXQgZ2VvZ3JhcGhpY2FsIGJvcmRlciBvZiB0aGUgbm9kZS4gV2UnZCBsaWtlIHRvIGhhdmUgYWNjZXNzIHRvIGxhdC9sb25nCisJICogZGF0YSBvZiB0aGUgbm9kZSBpZiB0aGVyZSBpcyBhbnksIHRvIGRvIHRoYXQgd2UgdXNlIGEgZmFjdG9yeSB0byBjcmVhdGUKKwkgKiBhbiBhZGFwdGVyIHRoYXQga25vd3MgYWJvdXQgdGhlIGlubmVyIGRldGFpbHMgb2Ygbm9kZXMgKGl0IHJlYWxseSBrbm93cworCSAqIGFib3V0IGFsbCBJZGVudGlmaWFibGVzKSBhbmQgaW1wbGVtZW50cyB0aGUgTGF0TG9uZ1Byb3ZpZGVyIGludGVyZmFjZS4KKwkgKiAKKwkgKiBAcGFyYW0gbm9kZQorCSAqIEByZXR1cm4gYm9yZGVyIG9mIHRoZSBub2RlIGVzcHJlc3NlZCBhcyBhbiBhcnJheSBvZiBsb25nL2xhdGl0dWRlIHBvaW50cy4KKwkgKi8KKwlMYXRMb25nIGdldExhdExvbmcoZmluYWwgTm9kZSBub2RlKSB7CQkKKworCQkvLyBUaGUgbm9kZSBtYXkgb3IgbWF5IG5vdCBoYXZlIGxhdC9sb25nIGRhdGEgYXNzb2NpYXRlZCB3aXRoCisJCS8vIGl0LCBpZiBpdCBkb2Vzbid0IHRoZSBsaXN0IHRoYXQncyByZXR1cm5lZCB3aWxsIGJlIGVtcHR5LgorCisJCXRyeSB7CisJCQlmaW5hbCBMYXRMb25nUHJvdmlkZXJBZGFwdGVyIGxhdExvbmdQcm92aWRlciA9IAorCQkJCShMYXRMb25nUHJvdmlkZXJBZGFwdGVyKSBMYXRMb25nUHJvdmlkZXJBZGFwdGVyRmFjdG9yeS5JTlNUQU5DRQorCQkJICAgIC5hZGFwdChub2RlLCBMYXRMb25nUHJvdmlkZXIuY2xhc3MpOworCQkJbGF0TG9uZ1Byb3ZpZGVyLnNldFRhcmdldChub2RlKTsKKwkJCXJldHVybiBsYXRMb25nUHJvdmlkZXIuZ2V0TGF0TG9uZygpOworCQl9IGNhdGNoIChSdW50aW1lRXhjZXB0aW9uIGUpIHsKKwkJCUdFTG9nLmRlYnVnKHRoaXMsZS5nZXRNZXNzYWdlKCkpOworCQkJcmV0dXJuIG51bGw7CisJCX0KKwl9CisJCisJCisgICAgLyoqCisJICogQ2hlY2sgaWYgdGhlIHNwZWNpZmllZCBzaW11bGF0aW9uIGlzIGFjdGl2ZWx5IAorCSAqIGJlaW5nIGxpc3RlbmVkIHRvLiBBIHNpbXVsYXRpb24gaXMgYWN0aXZlIGlmCisJICogaXQgaXMgbGlzdGVkIGluIHRoZSBtYXAgb2YgYWN0aXZlIHNpbXVsYXRpb25zCisJICogYW5kIGNhbiB0aGVyZWZvcmUgYmUgbWFudWFsbHkgZGlzcGxheWVkLgorCSAqIAorCSAqIEBwYXJhbSBzaW0KKwkgKiBAcmV0dXJuIDxjb2RlPnRydWU8L2NvZGU+IGlmIGFjdGl2ZSwgPGNvZGU+ZmFsc2U8L2NvZGU+IGluIG5vdCBhY3RpdmUgb3Igbm9uIGV4aXN0ZW50CisJICovCisgICAgcHVibGljIGJvb2xlYW4gIGlzQWN0aXZlKElTaW11bGF0aW9uIHNpbSkgeworICAgIAkKKyAgICAgICAgU3RyaW5nIG5hbWUgPSBnZXRTaW11bGF0aW9uSWQoc2ltKTsJCQorCQlHRVNpbUVudHJ5IGV4aXN0aW5nID0gYWN0aXZlU2ltdWxhdGlvbnMuZ2V0KG5hbWUpOworCQlyZXR1cm4gKGV4aXN0aW5nID09IG51bGwpID8gZmFsc2UgOiBleGlzdGluZy5hY3RpdmU7CisgICAgfQorICAgIAorICAgIC8qKgorCSAqIENoZWNrIGlmIHRoZSBzcGVjaWZpZWQgc2ltdWxhdGlvbiBpcyB0aGUgc2ltdWxhdGlvbgorCSAqIGJlaW5nIHZpZXdlZCBieSBHb29nbGVFYXJ0aAorCSAqIAorCSAqIEBwYXJhbSBzaW0KKwkgKiBAcmV0dXJuIHRydWUgaWYgYWN0aXZlVmlldworCSAqLworICAgIHB1YmxpYyBib29sZWFuICBpc0FjdGl2ZVZpZXcoSVNpbXVsYXRpb24gc2ltKSB7CisgICAgCQorICAgICAgICBTdHJpbmcgbmFtZSA9IGdldFNpbXVsYXRpb25JZChzaW0pOwkJCisJCXJldHVybiBuYW1lLmVxdWFscyhhY3RpdmVWaWV3KTsKKyAgICB9CisJLyoqCisJICogU2V0IHRoZSBsb2dnaW5nIGZvciB0aGUgc3BlY2lmaWVkIHNpbXVsYXRpb24uCisJICogVGhpcyBjcmVhdGVzIHRoZSBHRVNpbUVudHJ5IHdoaWNoIGlzIHVzZWQgdG8gY29sbGVjdCAKKwkgKiBpbmZvcm1hdGlvbiBhYm91dCB0aGUgSVNpbXVsYXRpb24gaW5zdGFuY2UgdG8gdXNlZCAKKwkgKiB0byBidWlsZCBLTUwgZmlsZXMuCisJICogCisJICogQHBhcmFtIHNpbSAgU2ltdWxhdGlvbiBpbnN0YW5jZSBiZWluZyBhY3RpdmF0ZWQgCisJICogICAgICAgICAgICAgKG9yIGRlYWN0aXZhdGVkKSAKKwkgKiBAcGFyYW0gYWN0aXZlICBzZXQgdHJ1ZSB0byB3cml0ZSBmaWxlLCAKKwkgKiAgICAgICAgICAgICAgICBzZXQgZmFsc2UgdG8gYnlwYXNzIHdyaXRlCisJICogQHJldHVybiB0cnVlIGlmIG9rLCBmYWxzZSBpbiBmYWlsZWQgd2l0aAorCSAqICAgICAgICAgICBlcnJvck1lc3NhZ2UKKwkgKi8KKwlwdWJsaWMgYm9vbGVhbiBzZXRBY3RpdmUoSVNpbXVsYXRpb24gc2ltLCBib29sZWFuIGFjdGl2ZSkgeworCQkKKwkJU3RyaW5nIG5hbWUgPSBnZXRTaW11bGF0aW9uSWQoc2ltKTsJCQorCQlHRVNpbUVudHJ5IGV4aXN0aW5nID0gYWN0aXZlU2ltdWxhdGlvbnMuZ2V0KG5hbWUpOworCQlHRUxvZy5kZWJ1Zyh0aGlzLmdldENsYXNzKCksInNldEFjdGl2ZTogIituYW1lKyIgICIrYWN0aXZlKTsKKwkJaWYgKGV4aXN0aW5nICE9IG51bGwpIHsKKwkJCS8vIGlmIGFscmVhZHkga25vd24gYWJvdXQKKwkJCWlmIChleGlzdGluZy5hY3RpdmUgPT0gYWN0aXZlKSB7CisJCQkJLy8gbm8gY2hhbmdlIGluIHN0YXRlIGRvIG5vdGhpbmcKKwkJCQlyZXR1cm4gdHJ1ZTsKKwkJCX0gZWxzZSAJeworCQkJCWV4aXN0aW5nLmFjdGl2ZSA9IGFjdGl2ZTsKKwkJCQlpZiAoIWV4aXN0aW5nLmFjdGl2ZSkgewkKKy8vCQkJCQkgZG8gYW55dGhpbmcgaWYgZGVhY3RpdmF0ZWQ/Pz8/CisJCQkJCWlmIChuYW1lLmVxdWFscyhhY3RpdmVWaWV3KSkKKwkJCQkJCWFjdGl2ZVZpZXcgPSBudWxsOwkJCQkgIAorCQkJCX0gIAorCQkJfQkJCQorCQl9IGVsc2UgeworCQkJLy8gbmV3IGVudHJ5CQkJCisJCQlleGlzdGluZyA9IG5ldyBHRVNpbUVudHJ5KG5hbWUsc2ltKTsKKwkJCWV4aXN0aW5nLmFjdGl2ZSA9IGFjdGl2ZTsKKwkJCWFjdGl2ZVNpbXVsYXRpb25zLnB1dChuYW1lLCBleGlzdGluZyk7CisJCQlleGlzdGluZy5zZXRBc3BlY3RUb0Rpc3BsYXkoR0VQcmVmZXJlbmNlUGFnZS5nZXRBc3BlY3QoKSk7CisJCQkKKwkJCS8vSGFuZGwgdGhpcyBiYXNlZCBvbiBjb21tdW5pY2F0aW9uIG1ldGhvZAorCQkJaWYgKGFjdGl2ZSkgeworCQkJCVN0cmluZyBlbnRyeUZvbGRlciA9IGV4aXN0aW5nLmdldExvZ0ZvbGRlcigpOworCQkJCWludCBtZXRob2QgPSBHRVByZWZlcmVuY2VQYWdlLmdldE1ldGhvZCgpOworCQkJCQorCQkJCXN3aXRjaCAobWV0aG9kKSB7CQkJCQorCQkJCWNhc2UgR0VQcmVmZXJlbmNlUGFnZS5NX0xPR19PTkxZOgorCQkJCQkvLyBsb2cgdGhlIGZpbGUgYnV0IG5vIGxhdW5jaCBvciBuZXRsaW5rCisJCQkJCWlmIChnZVZpZXcgIT0gbnVsbCkgeworCQkJCQkJZW50cnlGb2xkZXIgPSBHRVByZWZlcmVuY2VQYWdlLmdldEZvbGRlcigpOworCQkJCQkJZW50cnlGb2xkZXIgPSBnZVZpZXcudmVyaWZ5Rm9sZGVyKGVudHJ5Rm9sZGVyKTsKKwkJCQkJCWV4aXN0aW5nLnNldExvZ0ZvbGRlcihlbnRyeUZvbGRlcik7CisJCQkJCQlleGlzdGluZy5zZXRNZXRob2QobWV0aG9kKTsKKwkJCQkJfSAKKwkJCQkJc2ltLmFkZFNpbXVsYXRpb25MaXN0ZW5lcih0aGlzKTsKKwkJCQkJYnJlYWs7CisJCQkJY2FzZSBHRVByZWZlcmVuY2VQYWdlLk1fTE9HX1NFUlZMRVQ6CisJCQkJCS8vIGxvZyBmaWxlIGFuZCBsYXVuY2ggYSBuZXRsaW5rIHRvIGRpc3BsYXkJCQkJCisJCQkJCWlmIChnZVZpZXcgIT0gbnVsbCkgeworCQkJCQkJZW50cnlGb2xkZXIgPSBHRVByZWZlcmVuY2VQYWdlLmdldEZvbGRlcigpOworCQkJCQkJZW50cnlGb2xkZXIgPSBnZVZpZXcudmVyaWZ5Rm9sZGVyKGVudHJ5Rm9sZGVyKTsKKwkJCQkJCWV4aXN0aW5nLnNldExvZ0ZvbGRlcihlbnRyeUZvbGRlcik7CisJCQkJCX0gCisJCQkJCWlmIChlbnRyeUZvbGRlciAhPSBudWxsKSB7CQkJCQkKKwkJCQkJCWlmIChhY3RpdmVWaWV3ID09IG51bGwpIHsKKwkJCQkJCQlTdGVtS21sLnNldFdhaXRGb3JLTUwodHJ1ZSk7CisJCQkJCQkJU3RlbUttbC5sYXVuY2hOZXR3b3JrTGluayhlbnRyeUZvbGRlcixudWxsKTsKKwkJCQkJCQlhY3RpdmVWaWV3ID0gbmFtZTsKKwkJCQkJCQlzaW0uYWRkU2ltdWxhdGlvbkxpc3RlbmVyKHRoaXMpOworCQkJCQkJCWV4aXN0aW5nLnNldE1ldGhvZChtZXRob2QpOworCQkJCQkJfSBlbHNlIHsKKwkJCQkJCQllcnJvck1lc3NhZ2UgPSJTaW11bGF0aW9uICIrCisJCQkJCQkJCWFjdGl2ZVZpZXcrCisJCQkJCQkJCSIgYWxyZWFkeSBhY3RpdmUgb24gR29vZ2xlRWFydGguIjsKKwkJCQkJCQlHRUxvZy5kZWJ1Zyh0aGlzLGVycm9yTWVzc2FnZSk7CisJCQkJCQkJZXhpc3RpbmcuYWN0aXZlID0gZmFsc2U7CisJCQkJCQkJcmV0dXJuIGZhbHNlOworCQkJCQkJfQorCQkJCQl9IAorCQkJCQlicmVhazsKKwkJCQljYXNlIEdFUHJlZmVyZW5jZVBhZ2UuTV9BU1lOQ19TRVJWTEVUOgorCisJCQkJCS8vIHdyaXRlIGNvbnRyb2wua21sIGFuZCAKKwkJCQkJLy8gbGF1bmNoIG5ldGxpbmsgdG8gZGlzcGxheSBjb250cm9sLmttbAorCQkJCQkvLyBldmVyeSBuIHNlY29uZHMKKwkJCQkJU3RyaW5nIGttbGZuID0gU3RlbUttbC5nZXRDb250cm9sRmlsZSgpOworCQkJCQlGaWxlIGYgPSBuZXcgRmlsZShrbWxmbik7CisJCQkJCVN0cmluZyBwYXJlbnQgPSBmLmdldFBhcmVudCgpK0ZpbGUuc2VwYXJhdG9yOworCQkJCQlrbWxmbiA9IGYuZ2V0TmFtZSgpOworCQkJCQlrbWxmbiA9IHBhcmVudCsga21sZm4ucmVwbGFjZSgiLiIsIl9DdXJyZW50LiIpOworCQkJCQlpZiAoYWN0aXZlVmlldyA9PSBudWxsKSB7CisJCQkJCQlTdGVtS21sLnNldFdhaXRGb3JLTUwodHJ1ZSk7CisJCQkJCQlTdGVtS21sLmxhdW5jaE5ldHdvcmtMaW5rKGVudHJ5Rm9sZGVyLGttbGZuKTsKKwkJCQkJCWFjdGl2ZVZpZXcgPSBuYW1lOworCQkJCQkJc2ltLmFkZFNpbXVsYXRpb25MaXN0ZW5lcih0aGlzKTsKKwkJCQkJCWV4aXN0aW5nLnNldE1ldGhvZChtZXRob2QpOworCQkJCQl9IGVsc2UgeworCQkJCQkJZXJyb3JNZXNzYWdlID0iU2ltdWxhdGlvbiAiKworCQkJCQkJCWFjdGl2ZVZpZXcrCisJCQkJCQkJIiBhbHJlYWR5IGFjdGl2ZSBvbiBHb29nbGVFYXJ0aC4iOworCQkJCQkJR0VMb2cuZGVidWcodGhpcyxlcnJvck1lc3NhZ2UpOworCQkJCQkJZXhpc3RpbmcuYWN0aXZlID0gZmFsc2U7CisJCQkJCQlyZXR1cm4gZmFsc2U7CisJCQkJCX0KKworCQkJCQlicmVhazsKKwkJCQljYXNlIEdFUHJlZmVyZW5jZVBhZ2UuTV9BVVRPX0xBVU5DSDoKKwkJCQkJaWYgKGFjdGl2ZVZpZXcgPT0gbnVsbCApIHsJCQkJCQorCQkJCQkJYWN0aXZlVmlldyA9IG5hbWU7CisJCQkJCQlzaW0uYWRkU2ltdWxhdGlvbkxpc3RlbmVyKHRoaXMpOworCQkJCQkJZXhpc3Rpbmcuc2V0TWV0aG9kKG1ldGhvZCk7CisJCQkJCX0gZWxzZSB7CisJCQkJCQllcnJvck1lc3NhZ2UgPSJTaW11bGF0aW9uICIrCisJCQkJCQkJCWFjdGl2ZVZpZXcrCisJCQkJCQkiIGFscmVhZHkgYWN0aXZlIG9uIEdvb2dsZUVhcnRoLiI7CisJCQkJCQlHRUxvZy5kZWJ1Zyh0aGlzLGVycm9yTWVzc2FnZSk7CisJCQkJCQlleGlzdGluZy5hY3RpdmUgPSBmYWxzZTsKKwkJCQkJCXNpbS5hZGRTaW11bGF0aW9uTGlzdGVuZXIodGhpcyk7CisJCQkJCQlyZXR1cm4gZmFsc2U7CisJCQkJCX0KKwkJCQkJCisJCQkJCWJyZWFrOwkKKwkJCQljYXNlIEdFUHJlZmVyZW5jZVBhZ2UuTV9NQU5VQUxfRElTUExBWToKKwkJCQkJc2ltLmFkZFNpbXVsYXRpb25MaXN0ZW5lcih0aGlzKTsKKwkJCQkJZXhpc3Rpbmcuc2V0TWV0aG9kKG1ldGhvZCk7CisJCQkJCWJyZWFrOworCisJCQkJZGVmYXVsdDoKKworCQkJCX0vLyBzd2l0Y2gKKwkJCX0KKwkJfQorCQlyZXR1cm4gdHJ1ZTsJCQorCX0KKwkvKioKKwkgKiBTZXQgdGhlIFNFSVIgdmFsdWUgdGhhdCB3d2Ugd2FudCBkaXNwbGF5ZWQuCisJICogCisJICogQHBhcmFtIHNpbSAgU2ltdWxhdGlvbiBpbnN0YW5jZQorCSAqIEBwYXJhbSBhc3BlY3QgdGhlIHNFSVJWYWx1ZSB0byBzZXQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRBc3BlY3RUb0Rpc3BsYXkoSVNpbXVsYXRpb24gc2ltLCBBc3BlY3QgYXNwZWN0KSB7CisJCWlmIChzaW0gPT0gbnVsbCkgeworCQkJc2V0RGVmYXVsdEFzcGVjdChhc3BlY3QpOworCQl9IGVsc2UgeworCQkJU3RyaW5nIG5hbWUgPSBnZXRTaW11bGF0aW9uSWQoc2ltKTsKKwkJCUdFU2ltRW50cnkgZXhpc3RpbmcgPSBhY3RpdmVTaW11bGF0aW9ucy5nZXQobmFtZSk7CisKKwkJCWlmIChleGlzdGluZyAhPSBudWxsKSB7CisJCQkJLy8gaWYgYWxyZWFkeSBrbm93biBhYm91dAorCQkJCWV4aXN0aW5nLnNldEFzcGVjdFRvRGlzcGxheShhc3BlY3QpOworCQkJfSBlbHNlIHsKKwkJCQlzZXREZWZhdWx0QXNwZWN0KGFzcGVjdCk7CisJCQl9CisJCX0KKwl9CisJLyoqCisJICogR2V0IHRoZSBTRUlSIHZhbHVlIHRvIGJlIGRpc3BsYXllZCBmcm9tIHVzZXIuCisJICogCisJICogQHBhcmFtIHNpbQorCSAqICAgICAgICAgICAgU2ltdWxhdGlvbiBpbnN0YW5jZQorCSAqIEByZXR1cm4gdGhlIHNFSVJWYWx1ZSB0byBkaXNwbGF5CisJICovCisJcHVibGljIEFzcGVjdCBnZXRBc3BlY3RUb0Rpc3BsYXkoSVNpbXVsYXRpb24gc2ltKSB7CisgICAgICAgIFN0cmluZyBuYW1lID0gZ2V0U2ltdWxhdGlvbklkKHNpbSk7CQkKKwkJR0VTaW1FbnRyeSBleGlzdGluZyA9IGFjdGl2ZVNpbXVsYXRpb25zLmdldChuYW1lKTsKKwkJQXNwZWN0IHZhbHVlID0gbnVsbDsKKwkJaWYgKGV4aXN0aW5nICE9IG51bGwpIHsKKwkJCS8vIGlmIGFscmVhZHkga25vd24gYWJvdXQKKwkJCXZhbHVlID0gZXhpc3RpbmcuZ2V0QXNwZWN0VG9EaXNwbGF5KCk7CisJCQkKKwkJfSBlbHNlIHsKKwkJCXZhbHVlID0gZ2V0RGVmYXVsdEFzcGVjdCgpOworCQl9CisJCXJldHVybiB2YWx1ZTsKKwl9CisJLyoqCisJICogZGlzcGxheSBzdGF0dXMuCisJICogCisJICogVGhpcyB3aWxsIGRpc3BsYXkgb24gdGhlIGNvbnNvbGUgYSBsb3Qgb2YgCisJICogaW5mb3JtYXRpb24gYWJvdXQgdGhlIGVudmlyb25tZW50LiAKKwkgKiBDdXJyZW50bHkgaXQgZGlzcGxheXMgdGhlIHN0YXR1cyBvbiB0aGUgY29uc29sZS4KKwkgKiBBdCBzb21lIHBvaW50IHRoZSBpbXBvcnRhbnQgc3RhdHVzIG1heSBiZSAKKwkgKiBwbGFjZWQgaW50byBhIGRpYWxvZyBib3ggYW5kIGRpc3BsYXllZC4KKwkgKlRoZSBtYWluIHB1cnBvc2Ugb2YgdGhpcyBpcyB0byBoYXZlIGEgd2F5IHRvIAorCSAqZGlzcGxheSBpbnRlcmVzdGluZyBzdHVmZi4gCisJICogSXQgY2FuIGJlIHVzZWQgYXMgYSBwcm9ibGVtIHJlcG9ydGluZyBhaWQgCisJICogc2luY2Ugb25lIGNhbiB0YWtlIHRoZSBvdXRwdXQgYW5kIHVzZSBpdCBpbiB0aGUgCisJICogcHJvYmxlbSBkZXNjcmlwdGlvbi4gIFNvIGl0IGlzIGltcG9ydGFudCB0aGF0IGluZm9ybWF0aW9uCisJICogdGhhdCBpcyBuZWVkZWQgaW4gZGlhZ25vc2luZyBwcm9ibGVtcyB3aXRoIHRoZSAKKwkgKiBTVEVNLUdFIGludGVyZmFjZSBiZSBkaXNwbGF5ZWQgaGVyZS4KKwkgKgorCSAqCisJICoJIAorCSAqLworCXB1YmxpYyB2b2lkIGRpc3BsYXlTdGF0dXMoKSB7CisJCWJvb2xlYW4gc2F2ZURlYnVnID0gR0VMb2cuREVCVUc7CisJCUdFTG9nLkRFQlVHID0gdHJ1ZTsKKwkJLy8gZGlzcGxheSBQcmVmZXJlbmNlcworCQlHRUxvZy5kZWJ1Zyh0aGlzLEdFUHJlZmVyZW5jZVBhZ2UuZGlzcGxheSgpKTsKKwkJZmluYWwgUHJlZmVyZW5jZXMgcHJlZmVyZW5jZXMgPSAKKwkJCW9yZy5lY2xpcHNlLnN0ZW0uam9icy5BY3RpdmF0b3IuZ2V0RGVmYXVsdCgpCisJCQkJLmdldFBsdWdpblByZWZlcmVuY2VzKCk7CisJCWJvb2xlYW4gc2ltdWxhdGlvblNsZWVwID0gcHJlZmVyZW5jZXMKKwkJCQkuZ2V0Qm9vbGVhbihQcmVmZXJlbmNlQ29uc3RhbnRzLlNJTVVMQVRJT05fU0xFRVBfQk9PTEVBTik7CisJICAgIC8vIGRpc3BsYXkgYW4gaW1wb3J0YW50IGRlbGF5IHZhbHVlLiAgR0UgbmVlZHMgaXQgICAKKwkJaW50IHNpbXVsYXRpb25TbGVlcFNlY29uZHMgPSBwcmVmZXJlbmNlcworCQkJCS5nZXRJbnQoUHJlZmVyZW5jZUNvbnN0YW50cy5TSU1VTEFUSU9OX1NMRUVQX01JTExJU0VDT05EU19JTlRFR0VSKSAqIDEwMDA7CisJCUdFTG9nLmRlYnVnKHRoaXMsIlNJTVVMQVRJT05fU0xFRVA6ICIKKwkJCQkgICAgICAgICAgICArc2ltdWxhdGlvblNsZWVwKTsKKwkJR0VMb2cuZGVidWcodGhpcywiU0lNVUxBVElPTl9TTEVFUF9TRUNPTkRTOiAiCisJCQkJICAgICAgICAgICAgK3NpbXVsYXRpb25TbGVlcFNlY29uZHMpOworCQlHRUxvZy5kZWJ1Zyh0aGlzLCJhY3RpdmVWaWV3OiAiK2FjdGl2ZVZpZXcpOworCQlpZiAoYWN0aXZlU2ltdWxhdGlvbnMuc2l6ZSgpID09IDApIHsKKwkJCUdFTG9nLmRlYnVnKHRoaXMsIk5vIGFjdGl2ZSBTaW11bGF0aW9ucyIpOworCisJCX0gZWxzZSB7CisJCQlHRUxvZy5kZWJ1Zyh0aGlzLCJBY3RpdmUgU2ltdWxhdGlvbnM6ICIrYWN0aXZlU2ltdWxhdGlvbnMuc2l6ZSgpKTsKKwkJCWZvciAoTWFwLkVudHJ5IGVudHJ5IDogYWN0aXZlU2ltdWxhdGlvbnMuZW50cnlTZXQoKSkgeworCQkJCUdFU2ltRW50cnkgZ2VTaW0gPSAoR0VTaW1FbnRyeSllbnRyeS5nZXRWYWx1ZSgpOworCQkJCVN0cmluZyBuYW1lID0gKFN0cmluZyllbnRyeS5nZXRLZXkoKTsKKwkJCQlJU2ltdWxhdGlvbiBzaW0gPSBnZVNpbS5nZXRTaW11bGF0aW9uKCk7CisJCQkJdHJ5IHsKKwkJCQkJR0VMb2cuZGVidWcodGhpcywiICBTaW11bGF0aW9uOiAiKwkJCQkJCQkKKwkJCQkJCQkiICIrZ2VTaW0udG9TdHJpbmcoKSk7CisJCQkJCQorCQkJCQlHRUxvZy5kZWJ1Zyh0aGlzLCIgIFN0YXRlOiAiK3NpbS5nZXRTaW11bGF0aW9uU3RhdGUoKSk7CisJCQkJCQkJCisJCQkJCUdFU2ltRW50cnkgZXhpc3RpbmcgPSBhY3RpdmVTaW11bGF0aW9ucy5nZXQobmFtZSk7CisJCQkJCUdFTG9nLmRlYnVnKHRoaXMsIiAgR0VTaW1FbnRyeTogIitleGlzdGluZyk7CQkKKwkJCQkJU2NlbmFyaW8gc2NlbmFyaW8gPSBzaW0uZ2V0U2NlbmFyaW8oKTsKKwkJCQkJR0VMb2cuZGVidWcodGhpcywiICBTY2VuYXJpbzogIitzY2VuYXJpbyk7CisJCQkJCUR1YmxpbkNvcmUgZGMgPSBzY2VuYXJpby5nZXREdWJsaW5Db3JlKCk7CisJCQkJCUdFTG9nLmRlYnVnKHRoaXMsIiAgU2NlbmFyaW8gRHVibGluQ29yZTogIitkYyk7CisJCQkJCVNlcXVlbmNlciBzZXF1ZW5jZXIgPSBzY2VuYXJpby5nZXRTZXF1ZW5jZXIoKTsKKwkJCQkJR0VMb2cuZGVidWcodGhpcywiICBTZXF1ZW5jZXI6ICIrc2VxdWVuY2VyKTsKKwkJCQkJTW9kZWwgbW9kZWwgPSBzY2VuYXJpby5nZXRNb2RlbCgpOworCQkJCQlHRUxvZy5kZWJ1Zyh0aGlzLCIgIE1vZGVsOiAiK21vZGVsKTsKKwkJCQkJLy9HRUxvZy5kZWJ1Zyh0aGlzLCIgIExvbmdMYXQ6ICIrZGlzcGxheUxhdExvbmcoc2ltKSk7CisJCQkJCS8vR0VMb2cuZGVidWcodGhpcywiICBBc3BlY3Q6ICIrZGlzcGxheUFzcGVjdChzaW0pKTsKKwkJCQkJCisJCQkJfSBjYXRjaCAoVGhyb3dhYmxlIHQpIHsKKwkJCQkJR0VMb2cuZXJyb3IoIkRpc3BsYXkgU3RhdHVzIGZhaWx1cmUiLCB0KTsKKworCQkJCX0KKwkJCX0KKwkJfQorCQlHRUxvZy5ERUJVRyA9IHNhdmVEZWJ1ZzsKKwl9CisJLyoqCisJICogZGlzcGxheSB0aGUgTGF0TG9uZyBkYXRhLgorCSAqIFRoaXMgaXMgbW9zdGx5IGZvciBkZWJ1ZyB1c2FnZS4KKwkgKiAKKwkgKiAKKwkgKiBAcGFyYW0gc2ltdWxhdGlvbiB0aGF0IHdpbGwgYmUgc2hvd24KKwkgKiBAcmV0dXJuIGRpc3BsYXkgc3RyaW5nIG9mIGxhdGxvbmcgZGF0YQorCSAqIAorCSAqLworCQorCUBTdXBwcmVzc1dhcm5pbmdzKCJ1bnVzZWQiKQorCXByaXZhdGUgU3RyaW5nIGRpc3BsYXlMYXRMb25nKElTaW11bGF0aW9uIHNpbXVsYXRpb24pIHsKKwkJZmluYWwgU3RyaW5nQnVpbGRlciBzYiA9IG5ldyBTdHJpbmdCdWlsZGVyKCk7CisJCWludCBjb3VudGVyID0gMDsKKwkJdHJ5IHsKKwkJCXNiLmFwcGVuZCgiTGF0TG9uZyBkYXRhOiAiKTsJCQkKKwkJCVNjZW5hcmlvIHNjZW5hcmlvID0gc2ltdWxhdGlvbi5nZXRTY2VuYXJpbygpOworCQkJCisJCQkvLwkJIFdlIGdldCB0aGUgZ3JhcGguLi4KKwkJCWZpbmFsIEdyYXBoIGNhbm9uaWNhbEdyYXBoID0gc2NlbmFyaW8uZ2V0Q2Fub25pY2FsR3JhcGgoKTsKKwkJCUdFTG9nLmRlYnVnKHRoaXMsImRpc3BsYXlMYXRMb25nKCk6IGNhbm9uaWNhbEdyYXBoPSIrY2Fub25pY2FsR3JhcGgpOworCQkJaWYgKGNhbm9uaWNhbEdyYXBoID09IG51bGwpIHsKKwkJCQlHRUxvZy5kZWJ1Zyh0aGlzLCJkaXNwbGF5TGF0TG9uZygpOiBjYW5vbmljYWxHcmFwaCBpcyBudWxsIik7CisJCQkJcmV0dXJuIG51bGw7CisJCQl9CisJCQkvLyAuLi5hbmQgY2FuIG5vdyBpdGVyYXRlIHRocm91Z2ggdGhlIG5vZGVzLiBOb3RlIHRoYXQgdGhlIG1ldGhvZAorCQkJLy8gImdldE5vZGVzIiByZXR1cm5zIGEgbWFwIGluZGV4ZWQgYnkgdGhlIFVSSSBvZiBlYWNoIG9mIHRoZSBub2RlcywKKwkJCS8vIHRodXMgd2UgbmVlZCB0byBnZXQgdGhlIHZhbHVlcyBvZiB0aGUgbWFwIHRvIGhhdmUgYW4gYWN0dWFsIGxpc3QgdG8KKwkJCS8vIGl0ZXJhdG9yIG92ZXIuCQkJCQorCQkJZm9yIChmaW5hbCBJdGVyYXRvciBub2RlSXRlciA9IGNhbm9uaWNhbEdyYXBoLmdldE5vZGVzKCkudmFsdWVzKCkKKwkJCQkJLml0ZXJhdG9yKCk7IG5vZGVJdGVyLmhhc05leHQoKTspIHsKKwkJCQljb3VudGVyKys7CisJCQkJaWYgKGNvdW50ZXI+MTAwKSB7CisJCQkJCXNiLmFwcGVuZCgiXG4gTGltaXQgb2YgMTAwIHJlYWNoZWQiKTsKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJCWZpbmFsIE5vZGUgbm9kZSA9IChOb2RlKSBub2RlSXRlci5uZXh0KCk7CisJCQkgICAgU3RyaW5nIG5vZGVUaXRsZSA9IG5vZGUuZ2V0RHVibGluQ29yZSgpLmdldFRpdGxlKCk7CisJCQkgICAgc2IuYXBwZW5kKCJcbiIrIk5vZGU6ICIrbm9kZVRpdGxlKTsKKwkJCSAgICBmaW5hbCBMYXRMb25nUHJvdmlkZXJBZGFwdGVyIGxhdExvbmdQcm92aWRlciA9IChMYXRMb25nUHJvdmlkZXJBZGFwdGVyKSBMYXRMb25nUHJvdmlkZXJBZGFwdGVyRmFjdG9yeS5JTlNUQU5DRQorCQkJCSAgICAgICAgICAgICAuYWRhcHQobm9kZSwgTGF0TG9uZ1Byb3ZpZGVyLmNsYXNzKTsKKwkJCSAgIGxhdExvbmdQcm92aWRlci5zZXRUYXJnZXQobm9kZSk7CisJCQkgICAKKyAgICAgICAgICAgICAgICAvLyBUaGUgbm9kZSBtYXkgb3IgbWF5IG5vdCBoYXZlIGxhdC9sb25nIGRhdGEgYXNzb2NpYXRlZCB3aXRoCisJCQkJLy8gaXQsIGlmIGl0IGRvZXNuJ3QgdGhlIGxpc3QgdGhhdCdzIHJldHVybmVkIHdpbGwgYmUgZW1wdHkuCisJCQkJZmluYWwgTGF0TG9uZyBsYXRMb25nRGF0YSA9IGxhdExvbmdQcm92aWRlci5nZXRMYXRMb25nKCk7CisJCQkJaWYgKGxhdExvbmdEYXRhICE9IG51bGwgJiYgbGF0TG9uZ0RhdGEuc2l6ZSgpID4gMCkgeworCQkJCQkvL0dFTG9nLmRlYnVnKHRoaXMsImRpc3BsYXlMYXRMb25nKCk6IE5vZGU9Iitub2RlVGl0bGUpOworICAgICAgICAgICAgICAgICAgICAvLwlOb3cgd2UganVzdCBnbyB0aHJvdWdoIGVhY2ggc2VnbWVudCBhbmQgY3JlYXRlIGEgc3RyaW5nLgorCQkJCQlmb3IgKFNlZ21lbnQgc2VnbWVudCA6IGxhdExvbmdEYXRhLmdldFNlZ21lbnRzKCkpIHsKKwkJCQkJCVN0cmluZyBkYXRhID0gY3JlYXRlU3RyaW5nT2ZMYXRMb25nRGF0YShzZWdtZW50KTsKKwkJCQkJCXNiLmFwcGVuZCgiTGF0TG9uZzogIitkYXRhKTsKKwkJCQkJfSAvLyBmb3IKKwkJCQkgICAgCQkJCQkJCSAgCisJCQkJfSBlbHNlIHsKKwkJCQkJR0VMb2cuZGVidWcodGhpcywiYnVpbGRNYXAoKSgpOiBObyBzcGFjaWFsIGRhdGEgZm9yIE5vZGU9Iitub2RlVGl0bGUpOworCQkJCX0KKwkJCQkKKwkJCX0gLy8gZm9yIGVhY2ggbm9kZQorCQkJCisJCQkJCisJCQkKKwkJfSBjYXRjaCAoVGhyb3dhYmxlIGUpIHsKKwkJCQorCQkJR0VMb2cuZXJyb3IoIkZhaWx1cmUgYnVpbGRpbmcgYXJlYSBtYXAiLCBlKTsKKwkJCQorCQl9CisJCXJldHVybiBzYi50b1N0cmluZygpOwkKKwl9CisJCisJLyoqCisJICogZGlzcGxheSB0aGUgQXNwZWN0IGRhdGEuCisJICogVGhpcyBpcyBtb3N0bHkgZm9yIGRlYnVnCisJICogCisJICogQHBhcmFtIHNpbXVsYXRpb24gdGhhdCB3aWxsIGJlIHNob3duCisJICogQHJldHVybiBEaXNwbGF5IHN0cmluZyBjb250YWluaW5nIGluZm8gYWJvdXQgU0VJUiB2YWx1ZWQKKwkgKiAKKwkgKi8KKworCUBTdXBwcmVzc1dhcm5pbmdzKCJ1bnVzZWQiKQorCXByaXZhdGUgU3RyaW5nIGRpc3BsYXlBc3BlY3QoSVNpbXVsYXRpb24gc2ltdWxhdGlvbikgeworCQlmaW5hbCBTdHJpbmdCdWlsZGVyIHNiID0gbmV3IFN0cmluZ0J1aWxkZXIoKTsKKwkJdHJ5IHsKKyAgICAgICAgICAgIGludCBjb3VudGVyID0gMDsKKwkJCVNjZW5hcmlvIHNjZW5hcmlvID0gc2ltdWxhdGlvbi5nZXRTY2VuYXJpbygpOwkJCisJCQkJCQorCQkJLy8JCSBXZSBnZXQgdGhlIGRlY29yYXRvcnMgZnJvbSB0aGUgc2NlbmFyaW8gLi4uCQkJCisKKwkJCQorCQkJR3JhcGggZyA9IHNjZW5hcmlvLmdldENhbm9uaWNhbEdyYXBoKCk7CisJCQkKKwkJCURlY29yYXRvcltdIGRlY29yYXRvcnMgPSBnLmdldERlY29yYXRvcnMoKS50b0FycmF5KG5ldyBEZWNvcmF0b3JbZy5nZXREZWNvcmF0b3JzKCkuc2l6ZSgpXSk7CisJCQlmb3IgKERlY29yYXRvciBkZWNvcmF0b3IgOiBkZWNvcmF0b3JzKSB7CisJCQkJR0VMb2cuZGVidWcodGhpcywiZGVjb3JhdG9yOiAiK2RlY29yYXRvci50b1N0cmluZygpKTsKKwkJCQkKKwkJCQlPYmplY3RbXSBsYWJlbHMgPSBkZWNvcmF0b3IuZ2V0TGFiZWxzVG9VcGRhdGUoKS50b0FycmF5KCk7CisJCQkJZm9yIChPYmplY3QgZWxlbWVudDogbGFiZWxzKXsKKwkJCQkJY291bnRlcisrOworCQkJCQlpZiAoY291bnRlcj4xMDApIHsKKwkJCQkJCXNiLmFwcGVuZCgiXG4gTGltaXQgb2YgMTAwIHJlYWNoZWQiKTsKKwkJCQkJCWJyZWFrOworCQkJCQl9CisJCQkJCWlmICggZWxlbWVudCBpbnN0YW5jZW9mIE5vZGVMYWJlbCkgeworCQkJCQkJTm9kZUxhYmVsIG5vZGVMYWJlbCA9IChOb2RlTGFiZWwpZWxlbWVudDsKKwkJCQkJCU5vZGUgbm9kZSA9IG5vZGVMYWJlbC5nZXROb2RlKCk7CisJCQkJCQlTdHJpbmcgdGl0bGUgPSBub2RlLmdldER1YmxpbkNvcmUoKS5nZXRUaXRsZSgpOworICAgICAgICAgICAgICAgICAgICAgICAgc2IuYXBwZW5kKCJcbk5vZGU6ICIrdGl0bGUrIiAiKTsKKwkJCQkJCVJlbGF0aXZlVmFsdWVQcm92aWRlckFkYXB0ZXIgcnZwID0gKFJlbGF0aXZlVmFsdWVQcm92aWRlckFkYXB0ZXIpIFJlbGF0aXZlVmFsdWVQcm92aWRlckFkYXB0ZXJGYWN0b3J5LklOU1RBTkNFCisJCQkJCQkuYWRhcHQoZWxlbWVudCwgUmVsYXRpdmVWYWx1ZVByb3ZpZGVyLmNsYXNzKTsKKwkJCQkJCXJ2cC5zZXRUYXJnZXQoKE5vdGlmaWVyKWVsZW1lbnQpOworCQkJCQkJCisJCQkJCQkvLyBEb2VzIHRoZSBsYWJlbCBoYXZlIHJlbGF0aXZlIHZhbHVlcz8KKwkJCQkJCWlmIChydnAgIT0gbnVsbCkgewkJCQkJCQkKKwkJCQkJCQlmb3IgKEl0ZXJhdG9yIHByb3BlcnR5SXRlciA9IHJ2cC5nZXRQcm9wZXJ0aWVzKCkuaXRlcmF0b3IoKTsgcHJvcGVydHlJdGVyCisJCQkJCQkJLmhhc05leHQoKTspIHsKKwkJCQkJCQkJSXRlbVByb3BlcnR5RGVzY3JpcHRvciBwcm9wZXJ0eSA9IChJdGVtUHJvcGVydHlEZXNjcmlwdG9yKSBwcm9wZXJ0eUl0ZXIKKwkJCQkJCQkJLm5leHQoKTsKKwkJCQkJCQkJc2IuYXBwZW5kKHByb3BlcnR5LmdldERpc3BsYXlOYW1lKHByb3BlcnR5KSk7CisJCQkJCQkJCXNiLmFwcGVuZCgiOiAiKTsKKworCQkJCQkJCQlzYi5hcHBlbmQoU3RyaW5nLmZvcm1hdCgiJS4yZiIsIHJ2cC5nZXRSZWxhdGl2ZVZhbHVlKHByb3BlcnR5KSkpOworCisJCQkJCQkJCWlmIChwcm9wZXJ0eUl0ZXIuaGFzTmV4dCgpKSB7CisJCQkJCQkJCQlzYi5hcHBlbmQoIiwgIik7CisJCQkJCQkJCX0KKwkJCQkJCQl9IC8vIGZvciBlYWNoIHByb3BlcnR5CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisJCQkJCQl9IC8vIGlmCisJCQkJCQkKKwkJCQkJfQorCQkJCX0gIC8vIGZvcgorCQkJfQorCisKKwkJfSBjYXRjaCAoVGhyb3dhYmxlIGUpIHsKKwkJCUdFTG9nLmVycm9yKCJGYWlsdXJlIGdldHRpbmcgU0VJUiBkYXRhIiwgZSk7CisJCX0KKwkJcmV0dXJuIHNiLnRvU3RyaW5nKCk7CQorCisJfQorCS8qKiAKKwkgKiBHZXQgdGhlIElEIHRvIHVzZSBmb3IgZ2V0dGluZyB0aGUgR0VTaW1FbnRyeSBpbnN0YW5jZQorCSAqIEBwYXJhbSBzaW11bGF0aW9uCisJICogQHJldHVybiAiU0lNW3NlcXVlbmNlTnVtYmVyIl0iCisJICovCisJcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0U2ltdWxhdGlvbklkKElTaW11bGF0aW9uIHNpbXVsYXRpb24pIHsKKwkJaWYgKHNpbXVsYXRpb24gIT0gbnVsbCkKKwkJICByZXR1cm4gIlNJTVsiKworCQkgICAgICBJbnRlZ2VyLnRvU3RyaW5nKHNpbXVsYXRpb24uZ2V0U2VxdWVuY2VOdW1iZXIoKSkrCisJCSAgICAJCSAgIl0iOworCQllbHNlIAorCQkgIHJldHVybiBudWxsOworCX0KKwkKKwkvKioKKwkgKiBEaXNwbGF5IHRoZSBsYXRsb25nIGRhdGEgZnJvbSBhIExhdExvbmcgc2VnbWVudAorCSAqIEEgc2VnbWVudCBpcyBhIGxpbmUgb3IgcG9seWdvbi4KKwkgKiAKKwkgKiBAcGFyYW0gc2VnbWVudAorCSAqIEByZXR1cm4gYSBzdHJpbmcgb2YgdGhlIGxhdC9sb25nIHBvaW50cworCSAqLworCXByaXZhdGUgc3RhdGljIFN0cmluZyBjcmVhdGVTdHJpbmdPZkxhdExvbmdEYXRhKGZpbmFsIFNlZ21lbnQgc2VnbWVudCkgeworCQlmaW5hbCBTdHJpbmdCdWlsZGVyIHNiID0gbmV3IFN0cmluZ0J1aWxkZXIoKTsKKwkJZmluYWwgaW50IHNpemUgPSBzZWdtZW50LnNpemUoKTsKKwkJZm9yIChpbnQgaSA9IDA7IGkgPCBzaXplOyBpKyspIHsKKwkJCXNiLmFwcGVuZCgiKCIpOworCQkJc2IuYXBwZW5kKHNlZ21lbnQubGF0aXR1ZGUoaSkpOworCQkJc2IuYXBwZW5kKCIsICIpOworCQkJc2IuYXBwZW5kKHNlZ21lbnQubG9uZ2l0dWRlKGkpKTsKKwkJCXNiLmFwcGVuZCgiKSIpOworCQl9IC8vIGZvciBlYWNoIGxhdC9sb25nIHBhaXIKKwkJcmV0dXJuIHNiLnRvU3RyaW5nKCk7CisJfSAvLyBjcmVhdGVTdHJpbmdPZkxhdExvbmdEYXRhCisKKworCisKKwkvKioKKwkgKiBAcmV0dXJuIHRoZSBkZWZhdWx0QXNwZWN0CisJICovCisJcHVibGljIEFzcGVjdCBnZXREZWZhdWx0QXNwZWN0KCkgeworCQlpZiAoZGVmYXVsdEFzcGVjdCA9PSBudWxsKSAKKwkJCWRlZmF1bHRBc3BlY3QgPSBBc3BlY3QuZ2V0RGVmYXVsdCgpOworCQlyZXR1cm4gZGVmYXVsdEFzcGVjdDsKKwl9CisKKworCisKKwkvKioKKwkgKiBAcGFyYW0gZGVmYXVsdEFzcGVjdCB0aGUgZGVmYXVsdEFzcGVjdCB0byBzZXQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXREZWZhdWx0QXNwZWN0KEFzcGVjdCBkZWZhdWx0QXNwZWN0KSB7CisJCXRoaXMuZGVmYXVsdEFzcGVjdCA9IGRlZmF1bHRBc3BlY3Q7CisJfQorCisKKworCS8qKgorCSAqIFNldCBhbiBlcnJvciBtZXNzYWdlIHRvIGRpc3BsYXkKKwkgKiBAcGFyYW0gbXNnIAorCSAqIAorCSAqLworCXB1YmxpYyB2b2lkIHNldEVycm9yTWVzc2FnZShTdHJpbmcgbXNnKSB7CisJCWVycm9yTWVzc2FnZSA9IG1zZzsKKwl9CisJLyoqCisJICogQHJldHVybiB0aGUgZXJyb3JNZXNzYWdlCisJICovCisJcHVibGljIFN0cmluZyBnZXRFcnJvck1lc3NhZ2UoKSB7CisJCWlmIChlcnJvck1lc3NhZ2UgPT0gbnVsbCkgCisJCQlyZXR1cm4gIiI7CisJCWVsc2UgCisJCQlyZXR1cm4gZXJyb3JNZXNzYWdlOworCX0KKworCS8qKgorCSAqIEBwYXJhbSBzaW0gU2ltdWxhdGlvbiB0aGF0IGlzIGJlaW5nIHByb2Nlc3NlZC4KKwkgKiBAcmV0dXJuIHRoZSBjeWNsZQorCSAqLworCXB1YmxpYyBpbnQgZ2V0Q3ljbGUoSVNpbXVsYXRpb24gc2ltKSB7CisJCVNjZW5hcmlvIHNjZW5hcmlvID0gc2ltLmdldFNjZW5hcmlvKCk7CQkKKwkJU2VxdWVuY2VyIHNlcSA9IHNjZW5hcmlvLmdldFNlcXVlbmNlcigpOworCQlpbnQgY3ljbGUgPSBzZXEuZ2V0Q3ljbGUoKTsKKwkJcmV0dXJuIGN5Y2xlOworCX0KKwkKKwkKK30gLy8gY2xhc3MgR0VJbnRlcmZhY2UKKwkKKwpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLmdlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL2dlL0dFSm9iLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkuZ2Uvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvZ2UvR0VKb2IuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NmZiNDlkCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLmdlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL2dlL0dFSm9iLmphdmEKQEAgLTAsMCArMSwxOTYgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS51aS5nZTsKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLyAKKworaW1wb3J0IGphdmEuaW8uRmlsZTsKK2ltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKK2ltcG9ydCBqYXZhLnV0aWwuTWFwOworCitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlByZWZlcmVuY2VzOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uam9icy5wcmVmZXJlbmNlcy5QcmVmZXJlbmNlQ29uc3RhbnRzOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udWkuZ2Uua21sLlN0ZW1LbWw7CisKKworCisvKioKKyAqIERvIHNvbWUgb2YgdGhlIHdvcmsgaW4gdGhlIGJhY2tncm91bmQKKyAqIAorICogVGhpcyBpcyBjYWxsZWQgYnkgR0VJbnRlcmZhY2UgdG8gdGFrZSAKKyAqIHRoZSBjb2xsZWN0ZWQgaW5mb3JtYXRpb24gYWJvdXQgdGhlIFNpbXVsYXRpb24gCisgKiBhbmQgd3JpdGUgaXQgYXMgYSBLTUwgZmlsZS4gCisgKi8KK3B1YmxpYyBjbGFzcyBHRUpvYiBleHRlbmRzIFRocmVhZCB7CisKKwlwcml2YXRlIFN0cmluZyAgZm4gPSBudWxsOworCXByaXZhdGUgU3RlbUttbCBzdGVtS21sID0gbnVsbDsKKwkvKioKKwkgKiB0aGlzIGlzIGEgY29weSBvZiB0aGUgbWFwIHBhc3NlZCB0byBtZQorCSAqLworCXByaXZhdGUgTWFwPFN0cmluZyxHRURhdGE+IHN0ZW1NYXAgPSBudWxsOworCQorCXByaXZhdGUgQXNwZWN0IGFzcGVjdCA9IG51bGw7IAorCXByaXZhdGUgbG9uZyBjeWNsZSA9IDA7CisJcHJpdmF0ZSBib29sZWFuIGxhdW5jaCA9IGZhbHNlOworCXByaXZhdGUgYm9vbGVhbiByZW5hbWUgPSBmYWxzZTsKKwkJCisJcHJpdmF0ZSBzdGF0aWMgVGhyZWFkIHdvcmsgPSBudWxsOworCQorCS8qKgorCSAqIENvbnN0cnVjdCBhIHN1YmNsYXNzIG9mIEpvYiB0aGF0IHdpbGwgZG8gCisJICogdGhlIGxvbmdydW5uaW5nIHBhcnQgb2YgdGhlIGludGVyZmFjZSBpbgorCSAqIHRoZSBiYWNrZ3JvdW5kLgorCSAqIAorCSAqIEBwYXJhbSBuYW1lIE5hbWUgYXNzb2NpYXRlZCB3aXRoIGpvYgorCSAqLworCXB1YmxpYyBHRUpvYihTdHJpbmcgbmFtZSkgeworCQlzdXBlcihuYW1lKTsKKwkJCisJfQorCisJLyoqIAorCSAqIHJ1biBtZXRob2QgZm9yIHRoZSBuZXcgVGhyZWFkCisJICogSXQgd2lsbCB3cml0ZSB0aGUgS01MIGZpbGUgZm9yIEdvb2dsZUVhcnRoIAorCSAqIGFuZCBwZXJoYXBzIGxhdW5jaCBpdCB0byBHRS4gCisJICogCisJICogIEFsdGhvdWdoIGl0IGhhcyBubyBwYXJhbWV0ZXJzIGluIHRoZSBjYWxsCisJICogIHRoZSBmb2xsb3dpbmcgYXJlIGFzc3VtZWQgdG8gYmUgc2V0IGJ5IAorCSAqICBwcmV2aW91cyBjYWxsIHRvIHRoaXMuZ2VuZXJhdGVLTUwoKQorCSAqICAKKwkgKiAgZm4gLSBGaWxlIG5hbWUgdGhhdCBjb250YWlucyB0aGUga21sCisJICogIHN0ZW1NYXAKKwkgKiAgYXNwZWN0CisJICogIGN5Y2xlCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgcnVuKCkgeworCQkKKwkJR0VMb2cuZGVidWcodGhpcyxmbisiICIrYXNwZWN0KyIgIgorCQkJCStjeWNsZSsiICIrbGF1bmNoKyIgIityZW5hbWUpOworCQl0cnkgeworCQkJaWYgKHJlbmFtZSkgeworCQkJCUZpbGUgZiA9IG5ldyBGaWxlKGZuKTsKKwkJCQlTdHJpbmcgcGFyZW50ID0gZi5nZXRQYXJlbnQoKStGaWxlLnNlcGFyYXRvcjsKKwkJCQlmbiA9IGYuZ2V0TmFtZSgpOworCQkJCVN0cmluZyBuZXdGaWxlID0gcGFyZW50KyBmbi5yZXBsYWNlKCIuIiwiX05ldy4iKTsKKwkJCQlTdHJpbmcgY3VycmVudEZpbGUgPSBwYXJlbnQrIGZuLnJlcGxhY2UoIi4iLCJfQ3VycmVudC4iKTsKKwkJCQlTdHJpbmcgb2xkRmlsZSA9IHBhcmVudCtmbi5yZXBsYWNlKCIuIiwiLl9PbGQiKTsKKwkJCQl0cnkgeworCQkJCQkKKwkJCQkJRmlsZSBmaWxlTiA9IG5ldyBGaWxlKG5ld0ZpbGUpOwkJCQkJCisJCQkJCUZpbGUgZmlsZU8gPSBuZXcgRmlsZShvbGRGaWxlKTsKKwkJCQkJRmlsZSBmaWxlQyA9IG5ldyBGaWxlKGN1cnJlbnRGaWxlKTsKKwkJCQkJc3RlbUttbC5nZW5lcmF0ZVBvbHlnb25zKG5ld0ZpbGUsIHN0ZW1NYXAsIGFzcGVjdCwgY3ljbGUpOworCQkJCQkKKwkJCQkJaWYgKGZpbGVPLmV4aXN0cygpKSB7CisJCQkJCQlmaWxlTy5kZWxldGUoKTsKKwkJCQkJfSAKKwkJCQkJaWYgKGZpbGVDLmV4aXN0cygpKQorCQkJCQkgIGZpbGVDLnJlbmFtZVRvKGZpbGVPKTsKKwkJCQkJZmlsZU4ucmVuYW1lVG8oZmlsZUMpOworCQkJCQkKKwkJCQkJLy9HRUxvZy5kZWJ1Zyh0aGlzLCJDdXJyZW50IGZpbGU6ICIrZmlsZUMrIiAiK2ZpbGVDLmV4aXN0cygpKTsKKwkJCQl9IGNhdGNoIChSdW50aW1lRXhjZXB0aW9uIGUpIHsKKwkJCQkJCisJCQkJCUdFTG9nLmVycm9yKCJGYWlsdXJlIGNyZWF0aW5nIEtNTCBmaWxlcy4gIisKKwkJCQkJCQkgICAgIiBuZXdGaWxlOiAiKyBuZXdGaWxlCSxlKTsKKwkJCQl9CisJCQkJCisJCQl9IGVsc2UgeworCQkJCXN0ZW1LbWwuZ2VuZXJhdGVQb2x5Z29ucyhmbiwgc3RlbU1hcCwgYXNwZWN0LCBjeWNsZSk7CQkKKwkJCSAgICAgICAgICAgICAgICAgIAorCQkJCWlmIChsYXVuY2gpIHsKKwkJCQkJLy8JIGxhdW5jaCB0aGUgZmlsZSBmb3IgR29vZ2xlRWFydGgJCQkgIAorCQkJCQlTdGVtS21sLmxhdW5jaChmbik7CisJCQkJCUdFTG9nLmRlYnVnKHRoaXMsIkdvb2dsZUVhcnRoIE1hcCAgc3VibWl0dGVkIik7CisJCQkJfQorCQkJfQorCQl9IGNhdGNoIChUaHJvd2FibGUgZSkgeworCQkJCisJCQlHRUxvZy5lcnJvcigiRmFpbHVyZSBpbiBpbnRlcmZhY2UgdG8gR29vZ2xlRWFydGguICIsZSk7CisJCX0KKwkJCisJCXJldHVybjsKKwl9CisJLyoqCisJICogQnVpbGQgdGhlIC5rbWwgZmlsZSB0aGFuIHdpbGwgYmUgc2VudCB0byBHb29nbGVFYXJ0aCAKKwkgKiBXZSB3aWxsIHJlY2lldmUgdGhlIGluZm9ybWF0aW9uIGZyb20gR0VJbnRlcmZhY2UgYW5kIHRoZW4gCisJICogc2NoZWR1bGUgdGhlIGpvYiB0byBiZSBydW4uCisJICogCisJICogQHBhcmFtIGZuIEZpbGUgd2hlcmUgd2Ugd3JpdGUgdGhlIGttbAorCSAqIEBwYXJhbSBzdGVtS21sICBPYmplY3QgY29udGFpbmluZyBpbmZvIGFib3V0IHdoZXJlIGFuZAorCSAqICAgICAgICAgICAgICAgICBob3cgdG8gZ2VuZXJhdGUgdGhlIEtNTC4KKwkgKiBAcGFyYW0gc3RlbU1hcCAgTWFwIG9mIFBvbHlnb25zCisJICogCisJICogQHBhcmFtIGFzcGVjdCAgIFNFSVIgVHlwZSB0byBiZSBkaXNwbGF5ZWQKKwkgKiBAcGFyYW0gY3ljbGUgICAgY3VycmVudCBjeWNsZSBudW1iZXIKKwkgKiBAcGFyYW0gbGF1bmNoICAgdHJ1ZSBpZiBmaWxlIHNob3VsZCBiZSBzZW50IHRvIEdvb2dsZUVhcnRoCisJICogQHBhcmFtIHJlbmFtZSAgIHRydWUgaWYgZmlsZSBzaG91bGQgYmUgd3JpdHRlbiB0aGVuIHJlbmFtZWQKKwkgKi8JCisJCisJcHVibGljIHZvaWQgZ2VuZXJhdGVLTUwoU3RyaW5nIGZuLCBTdGVtS21sIHN0ZW1LbWwsIE1hcDxTdHJpbmcsR0VEYXRhPiBzdGVtTWFwLAorCQkJQXNwZWN0IGFzcGVjdCxsb25nIGN5Y2xlLCBib29sZWFuIGxhdW5jaCxib29sZWFuIHJlbmFtZSkgeworCQkKKwkJdGhpcy5mbiA9IGZuOworCQl0aGlzLnN0ZW1LbWwgPSBzdGVtS21sOworCQl0aGlzLmFzcGVjdCA9IGFzcGVjdDsKKwkJdGhpcy5jeWNsZSA9IGN5Y2xlOworCQl0aGlzLmxhdW5jaCA9IGxhdW5jaDsKKwkJdGhpcy5yZW5hbWUgPSByZW5hbWU7CisJCQorCQlpZiAoY3ljbGUgPT0gMCkKKwkJICAgIGNoZWNrUHJlZmVyZW5jZXMoKTsKKwkJCisJCS8vIGNvcHkgc3RlbU1hcCAKKwkJLy8gVE9ETyBhcmUgdGhlcmUgd2F5cyB0byBhdm9pZCB0aGlzIGNvcHkgCisJCS8vIG1heWJlIHdlIGNvdWxkIHN5bmNocm9uaXplIG9uIGl0Li4uCisJCWludCBuID0gc3RlbU1hcC5zaXplKCk7CisJCXRoaXMuc3RlbU1hcCA9IG5ldyBIYXNoTWFwPFN0cmluZyxHRURhdGE+KG4pOworCQl0aGlzLnN0ZW1NYXAucHV0QWxsKHN0ZW1NYXApOwkJCisJCQkJCisJCS8vR0VMb2cuZGVidWcodGhpcywiU2NoZWR1bGluZyBnZW5lcmF0aW9uIG9mIEtNTCBmaWxlICIrZm4pOworCQl0cnkgeworCQkJLy8gaWYgcHJvY2Vzc2luZyBiYWNrbG9nCisJCQlpZiAod29yayAhPSBudWxsICYmIAorCQkJCXdvcmsuZ2V0U3RhdGUoKSAhPSBUaHJlYWQuU3RhdGUuVEVSTUlOQVRFRCkgewkJCQorCQkJCS8vIFRPRE8gc2tpcCBwcm9jZXNzaW5nIGlmIGJhY2tsb2dnZWQgPworCQkJCUdFTG9nLmRlYnVnKHRoaXMsIlNraXAgS01MIGdlbmVyYXRpb24gZm9yIGN5Y2xlICIrY3ljbGUpOworCQkJCXJldHVybjsJCQkJCQkJCQorCQkJfQorCQkJd29yayA9IG5ldyBUaHJlYWQodGhpcywiSm9iXyIrY3ljbGUpOworCQkJd29yay5zdGFydCgpOworCQl9IGNhdGNoIChFeGNlcHRpb24gZSkgeworCQkJCisJCQlHRUxvZy5lcnJvcigiRmFpbHVyZSBzY2hlZHVsaW5nIEtNTCBGaWxlIGdlbmVyYXRpb24iLGUpOworCQl9CisJfQorCQkvKioKKwkJICogQ2hlY2sgdGhlIFNURU0gc3lzdGVtIGRlbGF5IGFuZCB3YXJuIGlmIG5vdCBzZXQuCisJCSAqIAkKKwkJICovCisJCXByb3RlY3RlZCB2b2lkIGNoZWNrUHJlZmVyZW5jZXMoKSB7CisJCQlmaW5hbCBQcmVmZXJlbmNlcyBwcmVmZXJlbmNlcyA9IAorCQkJCW9yZy5lY2xpcHNlLnN0ZW0uam9icy5BY3RpdmF0b3IuZ2V0RGVmYXVsdCgpCisJCQkJCS5nZXRQbHVnaW5QcmVmZXJlbmNlcygpOworCQkJYm9vbGVhbiBzaW11bGF0aW9uU2xlZXAgPSBwcmVmZXJlbmNlcworCQkJCQkuZ2V0Qm9vbGVhbihQcmVmZXJlbmNlQ29uc3RhbnRzLlNJTVVMQVRJT05fU0xFRVBfQk9PTEVBTik7CisJCSAgICAgICAKKwkJCWludCBzbGVlcE1pbGxpc2Vjb25kcyA9IHByZWZlcmVuY2VzCisJCQkJCS5nZXRJbnQoUHJlZmVyZW5jZUNvbnN0YW50cy5TSU1VTEFUSU9OX1NMRUVQX01JTExJU0VDT05EU19JTlRFR0VSKTsKKworCQkJaWYgKCEgc2ltdWxhdGlvblNsZWVwIHx8IHNsZWVwTWlsbGlzZWNvbmRzIDw9IDEpIHsKKwkJCQlHRUxvZy5pbmZvKCJHRUpvYjogU3BlY2lmaWVkIFNsZWVwIGludGVydmFsIG5vdCBzcGVjaWZpZWQgXG4iKyAgICAgICAgCisJCQkJICAgICAgICAgICAib3IgbWF5IGJlIHRvbyBzaG9ydCBmb3IgR29vZ2xlRWFydGggb3BlcmF0aW9uLlxuIisKKwkJCQkgICAgICAgICAgICJDaGVjayBwcmVmZXJlbmNlcy4iKTsKKwkJCX0KKwkJfSAvLyBzZXRQZXJmZXJlbmNlcwkKKwkJCisJCit9CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkuZ2Uvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvZ2UvR0VMb2cuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5nZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9nZS9HRUxvZy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE1MzgyOTQKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkuZ2Uvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvZ2UvR0VMb2cuamF2YQpAQCAtMCwwICsxLDI1MiBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnVpLmdlOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8gCitpbXBvcnQgamF2YS51dGlsLkRhdGU7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnVpLmdlLnZpZXdzLkdFUHJlZmVyZW5jZVBhZ2U7CisKKworLyoqCisgKiBkZWJ1ZyBVdGlsaXR5IG1ldGhvZHMgZm9yIEdvb2dsZUVhcnRoIEludGVyZmFjZQorICogIDxwPgorICogICAqIFRoZSBtYWluIHVzZSBvZiB0aGlzIGNsYXNzIGlzIHRvIHByb3ZpZGUgYWRkaXRpb25hbCAKKwkgKiBkZWJ1Z2dpbmcgb3V0cHV0IHdoZW4gaW4gZGVidWcgbW9kZSBvbiB0aGUgcHJpbWFyeSAKKwkgKiBlY2xpcHNlIGNvbnNvbGUgYW5kIHN0aWxsIHByb3ZpZGUgbG9nZ2luZyBvZiBleGNlcHRpb25zIAorCSAqIHRvIHRoZSBlY2xpcHNlIElMb2cgZXJyb3IgbG9nIGZhY2lsaXR5LiAgCisJICogQWx0aG91Z2ggRWNsaXBzZSBwcm92aWRlcyBhbiBFcnJvciBsb2cgZmFjaWxpdHkgaW4gdGhlIAorCSAqIGFwcGxpY2F0aW9uIHdvcmtiZW5jaCBiZWluZyB0ZXN0ZWQsICBpdCBpcyBtb3JlIGNvbnZpZW5lbnQKKwkgKiB0byBnZXQgeW91ciBkZWJ1ZyBtZXNzYWdlcyBhbmQgdW5leHBlY3RlZCBleGNlcHRpb24gaW4gdGhlCisJICogRWNsaXBzZSBDb25zb2xlIHRoYXQgaXMgY29udHJvbGluZyB0aGUgdGVzdCBlbnZpcm9ubWVudC4KKyAqIDxwPgorICogVHlwaWNhbCB1c2Ugb2YgdGhpcyBjbGFzczoKKyAqIDxwcmU+CisgKiAgIC8vIGVhcmx5IGluIHN0YXJ0dXAuIAorICogICAvLyBpbiB2aWV3IGNvbnN0cnVjdG9yIG9yIGp1bml0IHRlc3QgY2xhc3MKKyAqICAgR0VMb2cuREVCVUcgPSB0cnVlOyAKKyAqICAgLi4uCisgKiAgIEdFTG9nLmRlYnVnKHRoaXMsIkN1cnJlbnQgc2ltdWxhdGlvbjogIitzaW11bGF0aW9uKTsKKyAqICAgdHJ5IHsKKyAqICAgICAuLi4KKyAqICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKKyAqICAgICAgR0VMT0cuZXJyb3IoInN0cmFuZ2UgZmFpbHVyZSIsZSk7CisgKiAgIH0KKyAqICAgPC9wcmU+CisgKiAgIFdoZW4gREVCVUcgaXMgdHJ1ZSB0aGVuIGJvdGggdGhlIEVjbGlwc2UgY29uc29sZSBhbmQgCisgKiAgIHRoZSBFY2xpcHNlIGxvZyB3aWxsIGdldCB0aGUgZGVidWcgbXNnIGFuZCB0aGUgZXhjZXB0aW9uCisgKiAgIHN0YWNrdHJhY2UgYnV0IGlmIERFQlVHIGlzIGZhbHNlIHRoZW4gdGhlIGRlYnVnIG1lc3NhZ2UgCisgKiAgIHdpbGwgbm90IGFwcGVhciBhbnl3aGVyZSBhbmQgdGhlIEV4Y2VwdGlvbiBzdGFja3RyYWNlIAorICogICB3aWxsIG9ubHkgYXBwZWFyIGluIHRoZSBlY2xpcHNlIGxvZy4KKyAqICAgICAKKyAqICAgCisgKi8KK3B1YmxpYyBjbGFzcyBHRUxvZyB7CisJLyoqCisJICogaWYgdHJ1ZSB0aGVuIEdFbG9nIG1ldGhvZHMgcHJvZHVjZXMgb3V0cHV0CisJICogCisJICogSXQgd291bGQgYmUgc2V0IHRydWUgbm9ybWFsbHkgaW4gdGhlIEdFVmlldyBjb25zdHJ1Y3RvciAKKwkgKiBiYXNlZCBvbiB0aGUgUHJlZmVyZWVuY2VQYWdlIHNldHRpbmcuIAorCSAqIEl0IGNvdWxkIGJlIGFsc28gc2V0IGluIGFueSBqdW5pdCB0ZXN0cyB3aGVyZSB3ZSAKKwkgKiB3YW50IHRvIGhhdmUgYWRkaXRpb25hbCBkZWJ1ZyBvdXRwdXQuCisJICogVGhpcyBjb3VsZCBiZSBjaGFuZ2VkIHRvICJzdGF0aWMgZmluYWwiIHRvIGNvbXBpbGUgCisJICogb3V0IHRoZSBleGVjdXRpb24gb2YgdGhlIGlmIChERUJVRykgc3RhdGVtZW50LgkKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGJvb2xlYW4gREVCVUcgPSBmYWxzZTsKKworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGxvbmcgc3RhcnQgPSBuZXcgRGF0ZSgpLmdldFRpbWUoKTsKKworCS8qKgorCSAqIHRlbXBvcmFyeSBkZWJ1ZyBzdGF0ZW1lbnRzLgorCSAqIENhbGxzIHRvIHRoaXMgbWV0aG9kIGFyZSBpbnRlbmRlZCBmb3IgZGVidWdnaW5nIGFuZCAKKwkgKiBjb3VsZCBiZSByZW1vdmVkIGJlZm9yZSBwdWJsaXNoaW5nIHRoZSBjb2RlLgorCSAqIFRoZXkgYXJlIGRpc3BsYXllZCBvbiB0aGUgRWNsaXBzZSBDb25zb2xlIG9ubHkgaWYKKwkgKiB0aGUgREVCVUcgdmFyaWFibGUgaXMgdHJ1ZS4KKwkgKiBAcGFyYW0gbXNnIFRoZSBzdHJpbmcgdG8gYmUgZGlzcGxheWVkLgorCSAqLworCXB1YmxpYyBzdGF0aWMgdm9pZCBkZWJ1ZyhTdHJpbmcgbXNnKSB7CisJCWlmIChHRUxvZy5ERUJVRykgeworCQkgIFN5c3RlbS5vdXQucHJpbnRsbigiR0U6ICIrbXNnKTsKKwkJICBTeXN0ZW0ub3V0LmZsdXNoKCk7CisJCX0KKwl9CisJLyoqCisJICogdGVtcG9yYXJ5IGRlYnVnIHN0YXRlbWVudHMuCisJICogQ2FsbHMgdG8gdGhpcyBtZXRob2QgYXJlIGludGVuZGVkIGZvciBkZWJ1Z2dpbmcgYW5kIAorCSAqIGNvdWxkIGJlIHJlbW92ZWQgYmVmb3JlIHB1Ymxpc2hpbmcgdGhlIGNvZGUuCisJICogVGhleSBhcmUgZGlzcGxheWVkIG9uIHRoZSBFY2xpcHNlIENvbnNvbGUgb25seSBpZgorCSAqIHRoZSBERUJVRyB2YXJpYWJsZSBpcyB0cnVlLgorCSAqIDxjb2RlPgorCSAqIEV4YW1wbGU6CisJICogICAgR0VMb2cuZGVidWcodGhpcywiYSBtc2cgdG8gaGVscCBkZWJ1Z2dpbmciKTsKKwkgKiAgLS0+PgorCSAqICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkFjbGFzc05hbWU6IGEgbXNnIHRvIGhlbHAgZGVidWdnaW5nIik7IAorCSAqICAgICAgIAorCSAqIDwvY29kZT4gICAKKwkgKiBAcGFyYW0gd2hlcmUgLSBJbmRpY2F0b3Igb2YgY2xhc3Mgd2hlcmUgbXNnIGdlbmVyYXRlZAorCSAqICAgICBDYW4gYmUgU3RyaW5nLCBjbGFzcyBvciBpbnN0YW5jZQorCSAqIEBwYXJhbSBtc2cgVGhlIHN0cmluZyB0byBiZSBkaXNwbGF5ZWQuCisJICovCisJcHVibGljIHN0YXRpYyB2b2lkIGRlYnVnKE9iamVjdCB3aGVyZSxTdHJpbmcgbXNnKSB7CisJCWlmIChHRUxvZy5ERUJVRykgeworCQkJCisJCQlTdHJpbmcgY2xhc3NuYW1lID0gIiI7CisJCQlpZiAod2hlcmUgaW5zdGFuY2VvZiBTdHJpbmcpIHsKKwkJCQljbGFzc25hbWUgPSAoU3RyaW5nKXdoZXJlOworCQkJfSBlbHNlIGlmICh3aGVyZSBpbnN0YW5jZW9mIENsYXNzKSB7CisJCQkJY2xhc3NuYW1lID0gKChDbGFzcyl3aGVyZSkuZ2V0U2ltcGxlTmFtZSgpOworCQkJfSBlbHNlIHsKKwkJCQljbGFzc25hbWUgPSB3aGVyZS5nZXRDbGFzcygpLmdldFNpbXBsZU5hbWUoKTsKKwkJCQkvLyBoYW5kbGUgR0VMb2cuZGVidWcodGhpcyxtc2cpCisJCQkJVGhyZWFkIHQgPSBUaHJlYWQuY3VycmVudFRocmVhZCgpOworCQkJCVN0YWNrVHJhY2VFbGVtZW50W10gc3QgPSB0LmdldFN0YWNrVHJhY2UoKTsKKwkJCQlpZiAoc3RbM10uZ2V0Q2xhc3NOYW1lKCkuY29udGFpbnMoY2xhc3NuYW1lKSkgeworCQkJCQljbGFzc25hbWUgPSBjbGFzc25hbWUrIi4iKworCQkJCSAgICAgICAgICAgIHN0WzNdLmdldE1ldGhvZE5hbWUoKTsKKwkJCQl9CisJCQl9CisJCQlTdHJpbmcgcHJlZml4ID0gY2xhc3NuYW1lKyI6ICI7CisJCQkvLyBhZGQgZXh0cmEgZGVidWcgaW5mbyBpcyBQX1RFU1QKKwkJCWlmIChBY3RpdmF0b3IuZ2V0RGVmYXVsdCgpICE9IG51bGwpIHsKKwkJCQlpZiAoR0VQcmVmZXJlbmNlUGFnZS5pc1Rlc3QoKSkgeworCQkJCQlTdHJpbmcgdCA9IGdldFRocmVhZCgpOworCQkJCQlTdHJpbmcgY2xvY2sgPSBnZXRDbG9jaygpOworCQkJCQlwcmVmaXggPSBjbG9jaysiICIrdCsiLSIrcHJlZml4OworCQkJCX0KKwkJCX0KKwkJICAKKwkJICBTeXN0ZW0ub3V0LnByaW50bG4ocHJlZml4ICsgbXNnKTsKKwkJICBTeXN0ZW0ub3V0LmZsdXNoKCk7CisJCX0KKwl9CisJCisJcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIGdldFRocmVhZCgpIHsKKwkJcmV0dXJuIFRocmVhZC5jdXJyZW50VGhyZWFkKCkuZ2V0TmFtZSgpOworCX0KKwkKKwlwcml2YXRlIHN0YXRpYyBTdHJpbmcgZ2V0Q2xvY2soKSB7CisJCWxvbmcgbm93ID0gbmV3IERhdGUoKS5nZXRUaW1lKCktc3RhcnQ7CisJCXJldHVybiBMb25nLnRvU3RyaW5nKG5vdyk7CisJfQorCS8qKgorCSAqIGhhbmRsZXIgZm9yIGV4Y2VwdGlvbnMgdGhhdCBvY2N1cgorCSAqIAorCSAqIEBwYXJhbSBjdXJyZW50IENsYXNzIHRoYXQgcHJvZHVjZWQgbXNnCisJICogQHBhcmFtIG1zZyBNZXNzc2FnZSB0byBiZSBkaXNwbGF5ZWQgKGlmIG5vdCBudWxsKQorCSAqIAorCSAqLworCXB1YmxpYyBzdGF0aWMgdm9pZCBpbmZvKENsYXNzIGN1cnJlbnQsU3RyaW5nIG1zZykgeworCQlpbmZvKGN1cnJlbnQuZ2V0U2ltcGxlTmFtZSgpKyI6ICIrbXNnKTsKKwl9CisJLyoqCisJICogSGFuZGxlciBmb3IgaW5mbyBtZXNzYWdlcy4gIAorCSAqIFdpbGwgYmUgcHJvZHVjZWQgZXZlbiBpZiBkZWJ1ZyBvcHRpb24gbm90IG9uCisJICogCisJICogQHBhcmFtIG1zZworCSAqLworCXB1YmxpYyBzdGF0aWMgdm9pZCBpbmZvKFN0cmluZyBtc2cpIHsKKwkJaWYgKEdFTG9nLkRFQlVHKSB7CisJCSAgU3lzdGVtLmVyci5wcmludGxuKG1zZyk7CisJCX0gIAorCQkvLyBub3cgZG8gdGhlIGNvcnJlY3QgT1NHSSB0aGluZworCQkKKwkJQWN0aXZhdG9yLmxvZ0luZm8obXNnLG51bGwpOworCQlyZXR1cm47CisJCQorCX0KKwkvKioKKwkgKiBoYW5kbGVyIGZvciBleGNlcHRpb25zIHRoYXQgb2NjdXIKKwkgKiAKKwkgKiBAcGFyYW0gbXNnIE1lc3NzYWdlIHRvIGJlIGRpc3BsYXllZCAoaWYgbm90IG51bGwpCisJICogQHBhcmFtIHQgIEV4Y2VwdGlvbiB0aGF0IGNhdXNlZCB0aGlzIGlmIG5vdCBudWxsCisJICovCisJcHVibGljIHN0YXRpYyB2b2lkIGVycm9yKFN0cmluZyBtc2csVGhyb3dhYmxlIHQpIHsKKwkJaWYgKEdFTG9nLkRFQlVHKSB7CisJCSAgU3lzdGVtLmVyci5wcmludGxuKG1zZyk7CisJCSAgaWYgKHQgIT0gbnVsbCkKKwkJICAgIHQucHJpbnRTdGFja1RyYWNlKCk7CisJCX0KKwkJU3lzdGVtLmVyci5mbHVzaCgpOworCQkvLyBub3cgZG8gdGhlIGNvcnJlY3QgT1NHSSB0aGluZworCQkKKwkJQWN0aXZhdG9yLmxvZ0Vycm9yKG1zZywgdCk7CisJCXJldHVybjsKKwl9CisKKwkKKwkKKwkvKioKKwkgKiBDYWxsIGdhcmJhZ2UgY29sbGVjdCBhbmQgZGlzcGxheSBtZW1vcnkgc3RhdHMKKwkgKi8KKwlwdWJsaWMgc3RhdGljIHZvaWQgbWVtb3J5KCl7CisJCisJCVJ1bnRpbWUgcnQgPSBSdW50aW1lLmdldFJ1bnRpbWUoKTsKKwkJLy9ydC5nYygpOworCQl0cnkgeworCQkJVGhyZWFkLnNsZWVwKDIwMDApOworCQl9IGNhdGNoIChJbnRlcnJ1cHRlZEV4Y2VwdGlvbiBlKSB7CQkJCisJCX0KKwkJR0VMb2cuZGVidWcoIk1lbW9yeSBUb3RhbDogIitydC50b3RhbE1lbW9yeSgpLzEwMjQrIksiKTsKKwkJR0VMb2cuZGVidWcoIk1lbW9yeSBGcmVlOiAgIitydC5mcmVlTWVtb3J5KCkvMTAyNCsiSyIpOworCQlHRUxvZy5kZWJ1ZygiTWVtb3J5IE1heDogICAiK3J0Lm1heE1lbW9yeSgpLzEwMjQrIksiKTsKKwl9CisJCisJLyoqCisJICogdGVzdCBpZiBwZXJjZW50IG9mIHVzZWQgbWVtb3J5IGlzIGdyZWF0ZXIgdGhhbiBzcGVjaWZpZWQKKwkgKiBwZXJjZW50LiAgCisJICogCisJICogIEBwYXJhbSBwZXJjZW50IHRvIGNoZWNrIGFnYWluc3QuCisJICogICAgIEV4YW1wbGU6IDAuOSA9IDkwJQorCSAqICAKKwkgKiAgQHJldHVybiB0cnVlIGlmICUgbWVtZW9yeSB1c2VkIGlzIGdyZWF0ZXIgCisJICogICAgdGhhbiBzcGVjaWZpZWQgcGVyY2VudC4KKwkgKi8KKwlwdWJsaWMgc3RhdGljIGJvb2xlYW4gbWVtb3J5Q2hlY2soZG91YmxlIHBlcmNlbnQpeworCSAgIAorCQlSdW50aW1lIHJ0ID0gUnVudGltZS5nZXRSdW50aW1lKCk7CisJCQorCQlHRUxvZy5kZWJ1ZygiTWVtb3J5IE1heDogICAiK3J0Lm1heE1lbW9yeSgpLzEwMjQrIksiKTsKKwkJbG9uZyB1c2VkID0gcnQudG90YWxNZW1vcnkoKS1ydC5mcmVlTWVtb3J5KCk7CQkKKwkJZG91YmxlIGN1cnJlbnRQZXJjZW50ID0gKChkb3VibGUpdXNlZCkvKChkb3VibGUpcnQubWF4TWVtb3J5KCkpOworCQlHRUxvZy5kZWJ1ZygiTWVtb3J5IFVzZWQ6ICAiK3VzZWQvMTAyNCsiSyIpOwkJCisJCUdFTG9nLmRlYnVnKCJQZXJjZW50IFVzZWQ6ICIrY3VycmVudFBlcmNlbnQpOworCQlpZiAoY3VycmVudFBlcmNlbnQgPiBwZXJjZW50ICkgeworCQkJLy9ydC5nYygpOyAgIC8vIENoZWNrIGFmdGVyIEdhcmJhZ2UgY29sbGVjdG9yIHJ1bnMKKwkJCXRyeSB7CisJCQkJVGhyZWFkLnNsZWVwKDEwMDApOworCQkJfSBjYXRjaCAoSW50ZXJydXB0ZWRFeGNlcHRpb24gZSkgewkJCQorCQkJfQkJCQorCQkJCisJCQl1c2VkID0gcnQudG90YWxNZW1vcnkoKS1ydC5mcmVlTWVtb3J5KCk7CisJCQljdXJyZW50UGVyY2VudCA9ICgoZG91YmxlKXVzZWQpLygoZG91YmxlKXJ0Lm1heE1lbW9yeSgpKTsKKwkJCUdFTG9nLmRlYnVnKCJNZW1vcnkgdXNlZCBhZnRlciBHQzogICIrdXNlZC8xMDI0KyJLIik7CQorCQkJR0VMb2cuZGVidWcoIlBlcmNlbnQgVXNlZDogIitjdXJyZW50UGVyY2VudCk7CisJCQlyZXR1cm4gKGN1cnJlbnRQZXJjZW50ID4gcGVyY2VudCApIDsKKwkJfQorCQlyZXR1cm4gZmFsc2U7CisJfQorCS8qKgorCSAqIG1haW4oKSBtZXRob2QgZm9yIHRlc3RpbmcuCisJICogQHBhcmFtIGFyZ3MKKwkgKi8KKwlwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CisJCUdFTG9nLkRFQlVHID0gdHJ1ZTsKKwkJCisJCUdFTG9nLmRlYnVnKCJtc2cgd2l0aCBubyBjbGFzcy4iKTsKKwkJCisJCUdFTG9nLmRlYnVnKEdFTG9nLmNsYXNzLCJtc2cgd2l0aCBjbGFzcyBzcGVjaWZpZWQiKTsKKwkJdHJ5IHsKKwkJCU9iamVjdCBhID0gbnVsbDsKKwkJCWEuZ2V0Q2xhc3MoKTsKKwkJfSBjYXRjaCAoVGhyb3dhYmxlIHQpIHsKKwkJCUdFTG9nLmVycm9yKCJFeHBlY3RlZCBOdWxsUG9pbnRlckV4Y2VwdGlvbiIsdCk7CisJCX0KKwl9Cit9CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkuZ2Uvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvZ2UvR0VTaW1FbnRyeS5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLmdlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL2dlL0dFU2ltRW50cnkuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ODQxMGViCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLmdlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL2dlL0dFU2ltRW50cnkuamF2YQpAQCAtMCwwICsxLDE3OSBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnVpLmdlOworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovIAoraW1wb3J0IGphdmEudXRpbC5NYXA7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmpvYnMuc2ltdWxhdGlvbi5JU2ltdWxhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnVpLmdlLmttbC5TdGVtS21sOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udWkuZ2Uudmlld3MuR0VQcmVmZXJlbmNlUGFnZTsKKworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvL1NpbUVudHJ5CisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvKioKKyogU2ltRW50cnkgaXMgc3BlY2lhbCBlbnRyeSB0byBkZXNjcmliZSBhIFNpbXVsYXRpb24gdGhhdCB3ZSAKKyogYXJlIG9yIHdlcmUgYWN0aXZlbHkgbG9nZ2luZy4KKyogCisqIEl0IGhvbGRzIGluZm9ybWF0aW9uIHRoYXQgaXMgdW5pcXVlIHRvIHRoZSBnZW5lcmF0aW9uIAorKiBvZiBLTUwgZmlsZXMgZm9yIGEgc3BlY2lmaWMgc2ltdWxhdGlvbi4KKyogCisqIAorKi8KK3B1YmxpYyBjbGFzcyBHRVNpbUVudHJ5IHsKKwkKKwkvKioKKwkgKiBOYW1lIGFzc2lnbmVkIHRvIHRoaXMgU2ltdWxhdGlvbiBlbnRyeSAKKwkgKiAgIFNJTW4gd2hlcmUgbiBpcyB0aGUgc2ltdWxhdGlvbi5nZXRTZXF1ZW5jZU51bWJlcigpCisJICovCisJcHJpdmF0ZSBTdHJpbmcgbmFtZSA9IG51bGw7CisJCisJLyoqCisJICogU2ltdWxhdGlvbiBiZWluZyB3YXRjaGVkCisJICovCisJcHJpdmF0ZSBJU2ltdWxhdGlvbiBzaW11bGF0aW9uID0gbnVsbDsKKwkKKwkvKioKKwkgKiBTRUlSIHZhbHVlIGJlaW5nIG1hcHBlZAorCSAqLworCXByaXZhdGUgQXNwZWN0IGFzcGVjdFZhbHVlOworCS8qKiAKKwkgKiB3aWxsIEdFIGZpbGVzIGJlIHdyaXR0ZW4KKwkgKi8KKwlib29sZWFuIGFjdGl2ZSA9IGZhbHNlOworCQorCS8qKgorCSAqIFN0ZW1LbWwgY29udHJvbCBpbnN0YW5jZQorCSAqLworCXByaXZhdGUgU3RlbUttbCBzdGVtS21sID0gbnVsbDsKKwkKKwkvKioKKwkgKiBtYXAgb2YgZ2VvZ3JhcGhpYyBkYXRhIGtleWVkIGJ5IGFyZWEgaWQKKwkgKi8KKwlwcml2YXRlIE1hcDxTdHJpbmcsIEdFRGF0YT4gc3RlbU1hcCA9IG51bGw7CisJLyoqCisJICogZGlyZWN0b3J5IHdoZXJlIEtNTCBmaWxlcyBhcmUgd3JpdHRlbi4KKwkgKiBOb3RlOiB0aGVyZSBjb3VsZCBiZSBkaWZmZXJlbnQgbG9nIGZpbGVzIGJlaW5nIHVzZWQgCisJICogZm9yIHNpbXVsYXRpb25zIHRoYXQgcnVuIGNvbmN1cmVudGx5LiAgCisJICovCQorCXByaXZhdGUgU3RyaW5nIGxvZ0ZvbGRlciA9IG51bGw7CisJCisJLyoqCisJICogTWV0aG9kIHVzZWQgdG8gZGlzcGxheSBvbiBHRQorCSAqICAgRGVmYXVsdHMgdG8gTWFudWFsCisJICovCisJcHJpdmF0ZSBpbnQgbWV0aG9kID0gR0VQcmVmZXJlbmNlUGFnZS5NX01BTlVBTF9ESVNQTEFZOworCQorCS8vaW50IGN5Y2xlID0gLTE7CisKKwkvKioKKwkgKiBDb25zdHJ1Y3RvcgorCSAqIAorCSAqIEBwYXJhbSBuYW1lICBVbmlxdWUgbmFtZSBmb3IgYSBTaW11bGF0aW9uCisJICogQHBhcmFtIHNpbXVsYXRpb24gIEluc3RhbmNlIG9mIFNpbXVsYXRpb24gaW1wbGVtZW50YXRpb24KKwkgKi8KKwlwdWJsaWMgR0VTaW1FbnRyeShTdHJpbmcgbmFtZSxJU2ltdWxhdGlvbiBzaW11bGF0aW9uKSB7CisJCXRoaXMubmFtZSA9IG5hbWU7CisJCXRoaXMuc2ltdWxhdGlvbiA9IHNpbXVsYXRpb247CisJCXRoaXMuYWN0aXZlID0gZmFsc2U7CisJfQorCS8qKgorCSAqIEByZXR1cm4gdGhlIGFjdGl2ZQorCSAqLworCXB1YmxpYyBib29sZWFuIGlzQWN0aXZlKCkgeworCQlyZXR1cm4gYWN0aXZlOworCX0KKwkvKioKKwkgKiBAcmV0dXJuIHRoZSBzdGVtS21sCisJICovCisJcHVibGljIFN0ZW1LbWwgZ2V0U3RlbUttbCgpIHsKKwkJcmV0dXJuIHN0ZW1LbWw7CisJfQorCS8qKgorCSAqIEBwYXJhbSBzdGVtS21sIHRoZSBzdGVtS21sIHRvIHNldAorCSAqLworCXB1YmxpYyB2b2lkIHNldFN0ZW1LbWwoU3RlbUttbCBzdGVtS21sKSB7CisJCXRoaXMuc3RlbUttbCA9IHN0ZW1LbWw7CisJfQorCS8qKgorCSAqIEByZXR1cm4gdGhlIHN0ZW1NYXAKKwkgKi8KKwlwdWJsaWMgTWFwPFN0cmluZywgR0VEYXRhPiBnZXRTdGVtTWFwKCkgeworCQlyZXR1cm4gc3RlbU1hcDsKKwl9CisJLyoqCisJICogQHBhcmFtIHN0ZW1NYXAgdGhlIHN0ZW1NYXAgdG8gc2V0CisJICovCisJcHVibGljIHZvaWQgc2V0U3RlbU1hcChNYXA8U3RyaW5nLCBHRURhdGE+IHN0ZW1NYXApIHsKKwkJdGhpcy5zdGVtTWFwID0gc3RlbU1hcDsKKwl9IAorCQorCS8qKgorCSAqIEByZXR1cm4gdGhlIGxvZ0ZvbGRlcgorCSAqLworCXB1YmxpYyBTdHJpbmcgZ2V0TG9nRm9sZGVyKCkgeworCQlyZXR1cm4gbG9nRm9sZGVyOworCX0KKwkvKioKKwkgKiBAcGFyYW0gbG9nRm9sZGVyIHRoZSBsb2dGb2xkZXIgdG8gc2V0CisJICovCisJcHVibGljIHZvaWQgc2V0TG9nRm9sZGVyKFN0cmluZyBsb2dGb2xkZXIpIHsKKwkJdGhpcy5sb2dGb2xkZXIgPSBsb2dGb2xkZXI7CisJfQorCQorCS8qKgorCSAqIGZvciBkZWJ1ZyBpbmZvCisJICovCisJcHVibGljIFN0cmluZyB0b1N0cmluZygpIHsKKwkJU3RyaW5nQnVmZmVyIHNiID0gbmV3IFN0cmluZ0J1ZmZlcigpOworCQlzYi5hcHBlbmQoIkdFU2ltRW50cnk6ICIpOworCQlzYi5hcHBlbmQobmFtZSk7CisJCXNiLmFwcGVuZCgiIGFjdGl2ZTogIithY3RpdmUpOworCQlzYi5hcHBlbmQoIiB0bzogIitsb2dGb2xkZXIpOworCQlzYi5hcHBlbmQoIiBtZXRob2Q6ICIrbWV0aG9kKTsKKwkJLy9zYi5hcHBlbmQoIiBOYW1lOiAiK3NpbXVsYXRpb24uZ2V0TmFtZSgpKTsKKwkJcmV0dXJuIHNiLnRvU3RyaW5nKCk7CisJfQorCS8qKgorCSAqIEdldCB0aGUgYXNwZWN0IHRoYXQgd2Ugd2FudCB0byBkaXNwbGF5CisJICogCisJICogQHJldHVybiB0aGUgc0VJUlZhbHVlCisJICovCisJcHVibGljIEFzcGVjdCBnZXRBc3BlY3RUb0Rpc3BsYXkoKSB7CisJCS8vR0VMb2cuZGVidWcodGhpcy5nZXRDbGFzcygpLCJnZXRBc3BlY3RUb0Rpc3BsYXk6ICIrYXNwZWN0VmFsdWUpOworCQlyZXR1cm4gYXNwZWN0VmFsdWU7CisJfQorCS8qKgorCSAqIEBwYXJhbSB2YWx1ZSB0aGUgYXNwZWN0IHRoYXQgd2Ugd2FudCBkaXNwbGF5ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRBc3BlY3RUb0Rpc3BsYXkoQXNwZWN0IHZhbHVlKSB7CisJCWFzcGVjdFZhbHVlID0gdmFsdWU7CisJfQorCS8qKgorCSAqIEByZXR1cm4gdGhlIHNpbXVsYXRpb24KKwkgKi8KKwlwdWJsaWMgSVNpbXVsYXRpb24gZ2V0U2ltdWxhdGlvbigpIHsKKwkJcmV0dXJuIHNpbXVsYXRpb247CisJfQorCS8qKgorCSAqIEByZXR1cm4gdGhlIG1ldGhvZAorCSAqLworCXB1YmxpYyBpbnQgZ2V0TWV0aG9kKCkgeworCQlyZXR1cm4gbWV0aG9kOworCX0KKwkvKioKKwkgKiBAcGFyYW0gbWV0aG9kIHRoZSBtZXRob2QgdG8gc2V0CisJICovCisJcHVibGljIHZvaWQgc2V0TWV0aG9kKGludCBtZXRob2QpIHsKKwkJdGhpcy5tZXRob2QgPSBtZXRob2Q7CisJfQorfSAgLy8gY2xhc3MgU2ltRW50cnkKKwpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLmdlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL2dlL2FzcGVjdC5wcm9wZXJ0aWVzIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLmdlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL2dlL2FzcGVjdC5wcm9wZXJ0aWVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg1Yzk3YWYKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkuZ2Uvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvZ2UvYXNwZWN0LnByb3BlcnRpZXMKQEAgLTAsMCArMSw3MiBAQAorIyBBc3BlY3RzIGZvciBTRUlSIERpc2Vhc2VzCisjCisjICJBc3BlY3RzIiBpcyBhIGNvbW1hIHNlcGFyYXRlZCBsaXN0IG9mIEFzcGVjdCBjb2Rlcy4KKyMgQWxsIG9mIHRoZSB2YWxpZCBhc3BlY3RzIGhhdmUgdG8gYmUgbGlzdGVkLgorIyBUaGUgRGVmYXVsdCBBc3BlY3QgZGlzcGxheWVkIGlmIG5vdCBvdGhlcndpc2Ugc3BlY2lmaWVkIAorIyBpcyBzcGVjaWZpZWQgYnkgdGhlIERlZmF1bHQgc3RhdGVtZW50LgorQXNwZWN0cyA9IFMsRSxJLFIKK0RlZmF1bHQgPSBJCisjCisjIFRoZSBLTUxEaXNwbGF5Q2xhc3MgcHJvcGVydHkgbmFtZXMgdGhlIGNsYXNzIHRoYXQgaXMgCisjIGNhbGxlZCB0byBnZW5lcmF0ZSB0aGUgS01MIGZpbGUgdXNlIHRvIGRpc3BsYXkgU1RFTSAKKyMgYXNwZWN0cyBvbiB0aGUgR29vZ2xlRWFydGggbWFwLiAKKyMgVGhlIGRlZmF1bHQgY2xhc3MgS21sRGlzcGxheSBzcGVjaWZpZWQgYmVsb3cgdXNlcyB0aGUgQXNwZWN0IHByb3BlcnRpZXMgCisjIHRvIGdlbmVyYXRlIHRoZSBLTUwgYW5kIG5ldyBEaXNlYXNlIGFzcGVjdHMgY2FuIGJlIGFkZGVkCisjIHNpbXBseSBieSBhZGRpbmcgdGhlbSB0byB0aGlzIHByb3BlcnRpZXMgZmlsZS4KKyMgS21sRGlzcGxheUN1c3RvbSBpcyBjdXN0b21pemVkIHRvIG9ubHkgd29yayB3aXRoIFNFSVIgZGlzZWFzZXMuCisjIE5ldyBEaXNwbGF5IGltcGxlbWVudGF0aW9ucyBtYXkgYmUgY3JlYXRlZCBlYXNpbHkuCisjIAorS21sRGlzcGxheSA9IG9yZy5lY2xpcHNlLnN0ZW0udWkuZ2Uua21sLkttbERpc3BsYXkKKyNrbWxEaXNwbGF5ID0gb3JnLmVjbGlwc2Uuc3RlbS51aS5nZS5rbWwuS21sRGlzcGxheUN1c3RvbQorIworIyBGb2xsb3dpbmcgdGhlIEFzcGVjdHMgc3RhdGVtZW50cyBhcmUgZ3JvdXBzIG9mIAorIyBzcGVjaWZpY2F0aW9ucyBmb3IgZWFjaCBvZiB0aGUgYXNwZWN0cyBsaXN0ZWQgYWJvdmUuCisjIGVhY2ggc3BlY2lmaWNhdGlvbiBpcyB0aGUgYXNwZWN0IGNvZGUgKyAiLiIgKyB0aGUKKyMgc3BlY2lmaWNhdGlvbiBuYW1lICsgIj0iICsgdGhlIHZhbHVlLiAKKyMgVGhlIGZvbGxvd2luZyBhcmUgcmVxdWlyZWQ6CisjICAgYXNwZWN0Lm5hbWUgPQorIyAgIGFzcGVjdC5kZXNjcmlwdGlvbiA9CisjICAgYXNwZWN0LmNvbG9yID0gICggd2hlcmUgY29sb3IgaXMgW3JlZCBibHVlIG9yIGdyZWVuXSApIAorIyAgIAorIyBUaGUgZm9sbG93aW5nIGFyZSBvcHRpb25hbCBhbmQgdGhlIGRlZmF1bHRzIGFyZSB1c2VkCisjIGlmIG5vdCBzcGVjaWZpZWQuCisjICAgIGFzcGVjdC5yYW5nZSA9IENvbW1hIHNlcGFyYXRlZCBsaXN0IG9mIGRvdWJsZSB2YWx1ZXMKKyMgICAgICAgIERFRkFVTFRfUkFOR0UgPSB7MC4wLCAwLjMzLCAwLjY2LCAxLjB9OworIyAgICBhc3BlY3Qub3BhY2l0eSA9IENvbW1hIHNlcGFyYXRlZCBsaXN0IG9mIHZhbHVlcyAwLTI1NQorIyAgICAgICAgREVGQVVMVF9PUEFDSVRZID0gezAsMTI4LDE2MCwxOTJ9OworIyAgICBhc3BlY3QucmVkID0gIENvbW1hIHNlcGFyYXRlZCBsaXN0IG9mIHZhbHVlcyAwLTI1NQorIyAgICBhc3BlY3QuZ3JlZW4gPSAgQ29tbWEgc2VwYXJhdGVkIGxpc3Qgb2YgdmFsdWVzIDAtMjU1CisjICAgIGFzcGVjdC5ibHVlID0gIENvbW1hIHNlcGFyYXRlZCBsaXN0IG9mIHZhbHVlcyAwLTI1NQorIyBTZWUgQXNwZWN0IGphdmFkb2MgZm9yIG1vcmUgaW5mb3JtYXRpb24uCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgUyBpcyBTdXNjZXB0aWJsZQorUy5uYW1lID0gU3VzY2VwdGlibGUKK1MuZGVzY3JpcHRpb24gPSBQZXJjZW50YWdlIG9mIHBlb3BsZSB3aG8gYXJlIHN1c2VwdGlibGUgdG8gdGhlIGRpc2Vhc2UuCitTLnJhbmdlID0gMC4wMDEsMC4yLDAuNCwwLjYsMC44LDEuMAorUy5vcGFjaXR5ID0gMCw5NiwxMjgsMTI4LDE2MCwxNjAKK1MuYmx1ZSA9IDAsMjQwLDI0MCwyNDAsMjQwLDI0MAorUy5yZWQgPSAwCitTLmdyZWVuID0gMAorIworIyBFIGlzIGV4cG9zZWQKK0UubmFtZSA9IEV4cG9zZWQKK0UuRGVzY3JpcHRpb24gPSBQZXJjZW50YWdlIG9mIHBlb3BsZSB3aG8gYXJlIGV4cG9zZWQgdG8gdGhlIGRpc2Vhc2UuCitFLnJhbmdlID0gMC4wMDAxLDAuMDEsMC4xLDAuMywwLjYsMS4wCitFLm9wYWNpdHkgPSAwLCAgICAgOTYsMTI4LDE0NCwxNjAsMTc2CitFLnJlZCA9IDI0MAorRS5ncmVlbiA9IDI0MAorIworIyBJIGlzIEluZmVjdGlvdXMKK0kubmFtZSA9IEluZmVjdGlvdXMKK0kuRGVzY3JpcHRpb24gPSBQZXJjZW50YWdlIG9mIHBlb3BsZSB3aG8gYXJlIGluZmVjdGVkIGJ5IHRoZSBkaXNlYXNlLgorSS5yYW5nZSA9IDAuMDAwMDEsMC4wMSwwLjEsMC4zLDAuNiwxLjAKK0kub3BhY2l0eSA9IDAsICAgICAgOTYsMTI4LDE0NCwxNjAsMTc2CitJLnJlZCA9IDI0MAorCisjCisjIFIgaXMgUmVjb3ZlcmVkCitSLm5hbWUgPSBSZWNvdmVyZWQKK1IuRGVzY3JpcHRpb24gPSBQZXJjZW50YWdlIG9mIHBlb3BsZSB3aG8gYXJlIHJlY292ZXJlZCBmcm9tIHRoZSBkaXNlYXNlLgorUi5yYW5nZSA9IDAuMDAwMSwwLjAxLDAuMSwwLjMsMC42LDEuMAorUi5vcGFjaXR5ID0gMCwgICAgIDk2LDEyOCwxMjgsMTYwLDE2MAorUi5ncmVlbiA9IDI0MApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5nZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9nZS9rbWwvQkJveEluZm8uamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5nZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9nZS9rbWwvQkJveEluZm8uamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YzllNmJmCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLmdlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL2dlL2ttbC9CQm94SW5mby5qYXZhCkBAIC0wLDAgKzEsMjY3IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0udWkuZ2Uua21sOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK2ltcG9ydCBqYXZhLmF3dC5Qb2x5Z29uOworaW1wb3J0IGphdmEuYXd0LlJlY3RhbmdsZTsKK2ltcG9ydCBqYXZhLmlvLkJ5dGVBcnJheU91dHB1dFN0cmVhbTsKK2ltcG9ydCBqYXZhLmlvLkRhdGFJbnB1dFN0cmVhbTsKK2ltcG9ydCBqYXZhLmlvLkRhdGFPdXRwdXRTdHJlYW07CitpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLm5ldC5NYWxmb3JtZWRVUkxFeGNlcHRpb247CitpbXBvcnQgamF2YS5uZXQuVVJMOworaW1wb3J0IGphdmEubmV0LlVSTENvbm5lY3Rpb247CitpbXBvcnQgamF2YS51dGlsLlN0cmluZ1Rva2VuaXplcjsKKworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udWkuZ2UuR0VMb2c7CisKKy8qKgorICogT2J0YWluIHRoZSBCb3VuZGluZ0JveCBpbmZvIGZvciBHb29nbGVFYXJ0aCAKKyAqIGZyb20gdGhlIFNlcnZsZXQuICAKKyAqIEdvb2dsZUVhcnRoIHNlbmRzIHRoZSBjdXJyZW50IFNjcmVlbiB2aWV3aW5nIGFyZWEgdG8gdGhlIHNlcnZsZXQgCisgKiBhcyBhIEJCT1ggcGFyYW1ldGVyLiAgVGhlIFNsaWRlU2hvd1NlcnZsZXQgc2F2ZXMgdGhpcyBCQk9YIHN0cmluZworICogZWFjaCB0aW1lIGl0IGlzIHNlbnQuICAKKyAqIAorICogVGhpcyBjbGFzcyBydW5zIGFzIGEgdGhyZWFkIGFuZCBldmVyeSBOIHNlY29uZHMgbWFrZXMgYSByZXF1ZXN0IHRvIHRoZQorICogIEJCb3hTZXJ2bGV0IHRvIGFjY2VzcyB0aGUgbGF0ZXN0IEJCT1ggc3RyaW5nIGFuZCByZXR1cm4gaXQuCisgKiAgV2UgdGhlbiBjb252ZXJ0IGl0IHRvIGEgYm91bmRpbmcgYm94IHJlY3RhbmdsZSBhbmQgbWFrZSBpdCBhdmFpbGFibGUgCisgKiAgZm9yIGFjY2Vzcy4gIEtNTERpc3BsYXkgd2lsbCBhY2Nlc3MgaXQgYW5kIHVzZSBpdCB0byBmaWx0ZXIgb3V0IAorICogIGRpc3BsYXkgb2YgQWRtaW4gYXJlYXMgdGhhdCBhcmUgbm90IHdpdGhpbiB0aGUgc2NyZWVuIEJvdW5kaW5nIGJveC4KKyAqIAorICoKKyAqLworcHVibGljIGNsYXNzIEJCb3hJbmZvIGltcGxlbWVudHMgUnVubmFibGUgeworICAgIAorCXByaXZhdGUgc3RhdGljIGZpbmFsIGxvbmcgU0xFRVBUSU1FID0gMTAqMTAwMDsKKwkKKwkvKioKKwkgKiBpZCB1c2VkIHRvIGFjY2VzcyB0aGUgc2Vzc2lvbiBkYXRhIGluIHNlcnZsZXQKKwkgKi8KKwlwcml2YXRlIFN0cmluZyBzZXJ2bGV0SWQgPSBudWxsOworCS8qKgorCSAqIHVybCB0byBhY2Nlc3MgdGhlIHNlcnZsZXQKKwkgKi8KKwlwcml2YXRlIFN0cmluZyBzZXJ2bGV0VXJsID0gbnVsbDsKKwkKKwkvKioKKwkgKiBCb3VuZGluZ0JveCBsYXN0IGdvdHRlbiBmcm9tIHNlcnZsZXQKKwkgKi8KKwlwcml2YXRlIHN0YXRpYyBSZWN0YW5nbGUgYkJveCA9IG51bGw7CisJCisJcHJpdmF0ZSBTdHJpbmcgYmJveE9sZCA9IG51bGw7CisJLyoqCisJICogY29uc3RydWN0b3IKKwkgKiBAcGFyYW0gdXJsICBVUkwgZm9yIHRoZSBzZXJ2bGV0IHNlcnZlcgorCSAqIEBwYXJhbSBpZCBJZCB0byBpZGVudGlmeSB0aGUgc2VydmxldCBzZXNzaW9uLgorCSAqLworCXB1YmxpYyBCQm94SW5mbyhTdHJpbmcgdXJsLFN0cmluZyBpZCkgeworCQlzZXJ2bGV0SWQgPSBpZDsKKwkJc2VydmxldFVybCA9IHVybDsKKwl9CisJCisJCisJLyoqCisJICogVGhpcyB0aHJlYWQgd2lsbCBzaXQgaW4gYSBsb29wIGFuZCBldmVyeSBOIHNlY29uZHMgaXQgCisJICogd2lsbCBzZW5kIGEgcmVxdWVzdCB0byB0aGUgU2xpZGVTaG93U2VydmxldCB0byBnaXZlIGl0CisJICogdGhlIGxhdGVzdCBCQm94IGluZm8gdGhhdCB3YXMgc2VudCBmcm9tIEdvb2dsZUVhcnRoCisJICovCisJcHVibGljIHZvaWQgcnVuKCkgeworCQkKKwkJd2hpbGUgKHRydWUpIHsKKwkJCXRyeSB7CisJCQkJUmVjdGFuZ2xlIGJib3ggPSByZWFkQkJveCgpOworCQkJCWlmIChiYm94ICE9IG51bGwpIAorCQkJCQlzZXRCQm94KGJib3gpOworCQkJCVRocmVhZC5zbGVlcChTTEVFUFRJTUUpOworCQkJfSBjYXRjaCAoSW50ZXJydXB0ZWRFeGNlcHRpb24gZSkgeworCQkJCQorCQkJfQorCQl9CisKKwl9CisJLyoqCisJICogcmVhZEJCb3ggCisJICogICByZWFkIHRoZSBHb29nbGVFYXJ0aCBCQm94IGluZm8gZnJvbSB0aGUgc2VydmxldC4KKwkgKiAgIEdvb2dsZUVhcnRoIHNlbmRzIHRoZSB2aWV3cG9ydCBib3VuZGluZyBib3ggdG8gdGhlIAorCSAqICAgc2VydmxldCB3aGljaCBzdG9yZXMgaXQuICBUaGlzIHdpbGwgcmVxdWVzdCB0aGUgc2VydmVsZXQKKwkgKiAgIHRvIGZvcndhcmQgaXQgdG8gdXMuCisJICogICAKKwkgKgorCSAqIEByZXR1cm4gQkJveCBSZWN0YW5nbGUgCisJICovCisJcHVibGljICBSZWN0YW5nbGUgIHJlYWRCQm94KCkgeworCQlSZWN0YW5nbGUgYmJveCA9IG51bGw7CisJCQorCQl0cnkgeworCQkJVVJMIHVybCA9IG5ldyBVUkwoc2VydmxldFVybCk7CisJCQlVUkxDb25uZWN0aW9uIGNvbm5lY3QgPSB1cmwub3BlbkNvbm5lY3Rpb24oKTsKKwkJCWNvbm5lY3Quc2V0VXNlQ2FjaGVzKGZhbHNlKTsKKwkJCWNvbm5lY3Quc2V0RG9JbnB1dCh0cnVlKTsKKwkJCWNvbm5lY3Quc2V0RG9PdXRwdXQodHJ1ZSk7CisJCQljb25uZWN0LnNldFJlcXVlc3RQcm9wZXJ0eSgiQ29udGVudC10eXBlIiwgImFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbSIpOworCQkJCisJCQkgIC8vIHVzZSBCeXRlQXJyYXkgb3V0cHV0CisJCQlCeXRlQXJyYXlPdXRwdXRTdHJlYW0gYnl0ZU91dHB1dCA9IG5ldyBCeXRlQXJyYXlPdXRwdXRTdHJlYW0oKTsKKwkJCURhdGFPdXRwdXRTdHJlYW0gb3V0cHV0ID0KKwkJCQluZXcgRGF0YU91dHB1dFN0cmVhbShieXRlT3V0cHV0KTsKKwkJCS8vIHRlbGwgaXQgd2hhdCB3ZSB3YW50IGFuZCBnaXZlIGtleSB0byBpbmZvCisJCQlvdXRwdXQud3JpdGVVVEYoIkJCT1ggIitzZXJ2bGV0SWQpOworCQkJCisJCQlvdXRwdXQuZmx1c2goKTsKKwkJCWJ5dGVbXSBidWYgPSBieXRlT3V0cHV0LnRvQnl0ZUFycmF5KCk7CisJCQkKKwkJCWNvbm5lY3Quc2V0UmVxdWVzdFByb3BlcnR5KCJDb250ZW50LWxlbmd0aCIsICIiK2J1Zi5sZW5ndGgpOworCQkJRGF0YU91dHB1dFN0cmVhbSBkYXRhT3V0cHV0ID0KKwkJCQluZXcgRGF0YU91dHB1dFN0cmVhbShjb25uZWN0LmdldE91dHB1dFN0cmVhbSgpKTsKKwkJCWRhdGFPdXRwdXQud3JpdGUoYnVmKTsKKwkJCWRhdGFPdXRwdXQuZmx1c2goKTsKKwkJCWRhdGFPdXRwdXQuY2xvc2UoKTsKKwkJCQorCQkJRGF0YUlucHV0U3RyZWFtIGluID0gCisJCQkJbmV3IERhdGFJbnB1dFN0cmVhbShjb25uZWN0LmdldElucHV0U3RyZWFtKCkpOworCQkJU3RyaW5nIHN0cmluZ1ZhbHVlID0gaW4ucmVhZFVURigpOworCQkJCisJCQlpbi5jbG9zZSgpOworCQkJCisJCQkKKwkJCS8vIFRPRE8gY29udmVydCBzdHJpbmcgdG8gcmVjdGFuZ2xlCisJCQlTdHJpbmcgYmJveHN0ciA9IHN0cmluZ1ZhbHVlLnN1YnN0cmluZyg1KTsKKwkJCWlmICghIGJib3hzdHIuZXF1YWxzKGJib3hPbGQpKSB7CisJCQkgICBHRUxvZy5kZWJ1Zyh0aGlzLCJCQk9YOiAiK2Jib3hzdHIpOworCQkJICAgLy8gY29udmVydCB0byBCb3VuZGluZyBib3ggcmVjdGFuZ2xlCisJCQkgICBiYm94ID0gZ2V0QkJveChiYm94c3RyKTsKKwkJCSAgIEdFTG9nLmRlYnVnKHRoaXMsImJib3g6ICIrYmJveCk7CisJCQkgICBiYm94T2xkID0gYmJveHN0cjsKKwkJCX0KKwkJCQorCQkJCisJCX0gY2F0Y2ggKE1hbGZvcm1lZFVSTEV4Y2VwdGlvbiBlKSB7CQorCQkJCisJCQlHRUxvZy5kZWJ1ZyhlLmdldE1lc3NhZ2UoKSk7CisJCQorCQkJLy9lcnJvciA9IkVSUk9SIEludmFsaWQgVVJMICIrdXJsc3RyOworCQkJCisJCX0gY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsJCQkKKwkJCUdFTG9nLmRlYnVnKGUuZ2V0TWVzc2FnZSgpKTsKKwkJCQorCQl9CisJCQorCQlyZXR1cm4gYmJveDsKKwl9CisJLyoqCisJICogR2l2ZW4gYSBCQk9YIHN0cmluZyByZXR1cm5lZCBmcm9tIEdvb2dsZUVhcnRoIAorCSAqIGdlbmVyYXRlIHRoZSBCb3VuZGluZ0JveCByZWN0YW5nbGUuCisJICogR29vZ2xlRWFydGggcmV0dXJucyB0aGUgQkJPWCBpbiB0aGUgZm9sbG93aW5nIGZvcm1hdC4KKwkgKiAgQkJPWCB4MSx5MSx4Mix5MgorCSAqICB3aGVyZSB4MSx5MSBhcmUgbGF0aXR1ZGUvbG9uZ2l0dWRlIG9mIGJvdHRvbSBsZWZ0IHBvaW50IAorCSAqICBhbmQgeDIseTIgYXJlIGxhdGl0dWRlL2xvbmdpdHVkZSBvZiB0b3AgcmlnaHQgcG9pbnQKKwkgKiAgVmFsdWVzIGFyZSBkb3VibGVzIGxpa2UgLTExNC4xNDU3ODkzNAorCSAqICAgCisJICogTm90ZSB0aGF0IHRoZSBSZWN0YW5nbGUgY29vcmRpbmF0ZSBzeXN0ZW0gdXNlcyB0aGUgb3JpZ2luICAKKwkgKiAoMCwwKSBhcyB0aGUgdG9wIGxlZnQgb2YgdGhlIHNjcmVlbiwgCisJICogIHdpdGggdGhlIHggYW5kIHkgdmFsdWVzIGluY3JlYXNpbmcgYXMgdGhleSBtb3ZlIHRvIHRoZSByaWdodCAKKwkgKiAgYW5kIGRvd24gcmVzcGVjdGl2ZWx5LgorCSAqICAKKwkgKiBAcGFyYW0gU3RyaW5nIGNvbnRhaW5pbmcgQkJPWCBpbmZvIGZyb20gR0UKKwkgKiBAcmV0dXJuIFJlY3RhbmdsZQorCSAqLworCXByaXZhdGUgc3RhdGljIFJlY3RhbmdsZSBnZXRCQm94KFN0cmluZyBiYm94U3RyaW5nKSB7CisKKwkJUmVjdGFuZ2xlIGJCb3ggPSBudWxsOworCisJCVBvbHlnb24gcG9seWdvbiA9IG5ldyBQb2x5Z29uKCk7CisJCS8vR0VMb2cuZGVidWcoQkJveEluZm8uY2xhc3MsICJCQk9YOiAiICsgYmJveFN0cmluZyk7CisKKwkJU3RyaW5nVG9rZW5pemVyIHN0ID0gbmV3IFN0cmluZ1Rva2VuaXplcihiYm94U3RyaW5nLCAiLCIpOworCQlpZiAoc3QuY291bnRUb2tlbnMoKSA9PSA0KSB7CisJCQkvLyBHRSByZXR1cm5zIHRoZSBCQm94IGFzIGJvdHRvbSBsZWZ0LCB0b3AgcmlnaHQgY29vcmRpbmF0ZXMKKwkJCS8vIHdlIGhhdmUgdG8gdHJhbnNsYXRlIHRvIHRvcCBsZWZ0ICsgd2lkdGgraGVpZ2h0CisJCQlkb3VibGUgeDEgPSBEb3VibGUucGFyc2VEb3VibGUoc3QubmV4dFRva2VuKCkpOworCQkJZG91YmxlIHkxID0gRG91YmxlLnBhcnNlRG91YmxlKHN0Lm5leHRUb2tlbigpKTsKKwkJCWRvdWJsZSB4MiA9IERvdWJsZS5wYXJzZURvdWJsZShzdC5uZXh0VG9rZW4oKSk7CisJCQlkb3VibGUgeTIgPSBEb3VibGUucGFyc2VEb3VibGUoc3QubmV4dFRva2VuKCkpOworCQkJZG91YmxlW10gbG9uZ2l0dWRlcyA9IHsgeDEsIHgxLCB4MiwgeDIsIHgxIH07CisJCQlkb3VibGVbXSBsYXRpdHVkZXMgPSB7IHkxLCB5MiwgeTIsIHkyLCB5MSB9OworICAgICAgICAgICAgLy8gaWdub3JlIGlmIGVudGlyZSBnbG9iZQorCQkJaWYgKHgxID09IC0xODAgJiYgeDIgPT0gMTgwKSB7CisJCQkJLy94MSA9IC0xODA7CisJCQkJeDIgPSAwOworCQkJCUdFTG9nLmRlYnVnKEJCb3hJbmZvLmNsYXNzLCIqKioqKiogbW9kaWZ5IEJCT1ggdG8gMTgwLDAgKioqKioqIik7CisJCQl9CisJCQkJCisJCQkKKwkJCWZvciAoaW50IHAgPSAwOyBwIDwgbG9uZ2l0dWRlcy5sZW5ndGg7IHArKykgeworCQkJCWRvdWJsZSB4ID0gbG9uZ2l0dWRlc1twXTsKKwkJCQlkb3VibGUgeSA9IGxhdGl0dWRlc1twXTsKKwkJCQlpbnQgeGludCA9IChpbnQpICgoeCArIDE4MCkgKiAxMDAwKTsKKwkJCQlpbnQgeWludCA9IChpbnQpICgoeSArIDkwKSAqIDEwMDApOworCisJCQkJcG9seWdvbi5hZGRQb2ludCh4aW50LCB5aW50KTsKKwkJCX0KKwkJfQorCQorCQkKKwkJYkJveCA9IHBvbHlnb24uZ2V0Qm91bmRzKCk7CisJCQorCQlyZXR1cm4gYkJveDsKKwl9CisKKwkvKioKKwkgKiBAcmV0dXJuIHRoZSBiQm94CisJICovCisJcHVibGljIHN5bmNocm9uaXplZCBzdGF0aWMgUmVjdGFuZ2xlIGdldEJCb3goKSB7CisJCXJldHVybiBiQm94OworCX0KKworCisJLyoqCisJICogQHBhcmFtIGJveCB0aGUgYkJveCB0byBzZXQKKwkgKi8KKwlwdWJsaWMgc3luY2hyb25pemVkIHN0YXRpYyB2b2lkIHNldEJCb3goUmVjdGFuZ2xlIGJveCkgeworCQliQm94ID0gYm94OworCX0KKwkKKwkvKioKKwkgKiBUZXN0ICBjb250YWlubWVudCBvZiBib3VuZGluZyBib3ggMSBpbiBCb3VuZGluZyBib3ggMgorCSAqIElmIGFueSBjb3JuZXIgb2YgQkJveCAxIGlzIGNvbnRhaW5lZCBpbiBCQm94IDIgb3IgYW55IGNvcm5lcgorCSAqIG9mIEJCb3ggMiBpcyBjb250YWluZWQgaW4gQkJveCAxIHRoZW4gdGhleSBhcmUgYWRqYWNlbnQuCisJICogCisJICogQHBhcmFtIHIxICBib3VuZGluZyBib3ggMQorCSAqIEBwYXJhbSByMiAgYm91bmRpbmcgYm94IDIKKwkgKiBAcmV0dXJuIHRydWUgaWYgYWRqYWNlbnQgb3IgY29udGFpbm1lbnQgdHJ1ZQorCSAqLworCXB1YmxpYyBzdGF0aWMgYm9vbGVhbiB0ZXN0Q29udGFpbm1lbnQgKFJlY3RhbmdsZSByMSwgUmVjdGFuZ2xlIHIyKSB7CisJCQorCQkvLyBjb29yZHMgb2YgY29ybmVycyBvZiBmaXJzdCBib3VuZGluZyBib3gKKwkJaW50IHhNaW4xID0gcjEueDsKKwkJaW50ICB4TWF4MSA9IHIxLngrcjEud2lkdGg7CisJCWludCAgeU1pbjEgPSByMS55LXIxLmhlaWdodDsKKwkJaW50ICB5TWF4MSA9IHIxLnk7CisJCS8vIHRlc3Qgb3ZlcmxhcAorCQlpZiAocjIuY29udGFpbnMoeE1pbjEseU1pbjEpKSByZXR1cm4gdHJ1ZTsKKwkJaWYgKHIyLmNvbnRhaW5zKHhNaW4xLHlNYXgxKSkgcmV0dXJuIHRydWU7CisJCWlmIChyMi5jb250YWlucyh4TWF4MSx5TWF4MSkpIHJldHVybiB0cnVlOworCQlpZiAocjIuY29udGFpbnMoeE1heDEseU1pbjEpKSByZXR1cm4gdHJ1ZTsKKwkJCisgICAgICAgIC8vIGNvb3JkcyBvZiBjb3JuZXJzIG9mIHNlY29uZCBib3VuZGluZyBib3gKKwkJaW50ICB4TWluMiA9IHIyLng7CisJCWludCAgeE1heDIgPSByMi54K3IyLndpZHRoOworCQlpbnQgIHlNaW4yID0gcjIueS1yMi5oZWlnaHQ7CisJCWludCAgeU1heDIgPSByMi55OworICAgICAgICAvLyB0ZXN0IG92ZXJsYXAKKwkJaWYgKHIxLmNvbnRhaW5zKHhNaW4yLHlNaW4yKSkgcmV0dXJuIHRydWU7CisJCWlmIChyMS5jb250YWlucyh4TWluMix5TWF4MikpIHJldHVybiB0cnVlOworCQlpZiAocjEuY29udGFpbnMoeE1heDIseU1heDIpKSByZXR1cm4gdHJ1ZTsKKwkJaWYgKHIxLmNvbnRhaW5zKHhNYXgyLHlNaW4yKSkgcmV0dXJuIHRydWU7CisJCSAKKwkJcmV0dXJuIGZhbHNlOworCX0KK30KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5nZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9nZS9rbWwvQ29vcmRpbmF0ZXMuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5nZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9nZS9rbWwvQ29vcmRpbmF0ZXMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NDA1NzkwCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLmdlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL2dlL2ttbC9Db29yZGluYXRlcy5qYXZhCkBAIC0wLDAgKzEsMTcwIEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0udWkuZ2Uua21sOworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovIAorCisvKioKKyAqIEJ1aWxkIGEgY29vcmRpbmF0ZXMgYXR0cmlidXRlIGZvciBhIEtNTCBkb2N1bWVudC4KKyAqIDxwcmU+CisgKiAgICAKKyAqIDwvcHJlPgorICogCisgKgorICovCisgIAorICAKKy8qCis8Y29vcmRpbmF0ZXM+CisgICAgMzIuNTY3LC0xMjIuMDk4LDUwIAorICA8L2Nvb3JkaW5hdGVzPgorCisqLyAgIAorcHVibGljIGNsYXNzIENvb3JkaW5hdGVzIHsKKyAgIAorICAgIHByaXZhdGUgZG91YmxlIF9sb25naXR1ZGU7CisgICAgCisgICAgcHJpdmF0ZSBkb3VibGUgX2xhdGl0dWRlOworICAgIAorICAgIHByaXZhdGUgZG91YmxlIF9hbHRpdHVkZTsKKyAgICAKKyAgICBwcml2YXRlIGJvb2xlYW4gX2lzQWx0aXR1ZGVTcGVjaWZpZWQ7CisgICAgLyoqCisgICAgICogQ29vcmRpbmF0ZXMgY29uc3RydWN0b3Igd2l0aG91dCBhbHRpdHVkZS4KKyAgICAgKiAgICAKKyAgICAgKiBDcmVhdGUgYSBjb29yZGluYXRlLgorICAgICAqIAorICAgICAqIEBwYXJhbSBsb25naXR1ZGUKKyAgICAgKiBAcGFyYW0gbGF0aXR1ZGUKKyAgICAgKi8KKyAgICBwdWJsaWMgQ29vcmRpbmF0ZXMoZG91YmxlIGxvbmdpdHVkZSwKKyAgICAgICAgICAgIGRvdWJsZSBsYXRpdHVkZSkgeworICAgICAgICBfbG9uZ2l0dWRlID0gbG9uZ2l0dWRlOworICAgICAgICBfbGF0aXR1ZGUgPSBsYXRpdHVkZTsgICAgICAgICAgICAgCisgICAgfQorICAgIAorICAgIC8qKgorICAgICAqIENvb3JkaW5hdGVzIGNvbnN0cnVjdG9yIHdpdGggYWx0aXR1ZGUuCisgICAgICogICAgCisgICAgICogQ3JlYXRlIGEgY29vcmRpbmF0ZS4KKyAgICAgKiAKKyAgICAgKiBAcGFyYW0gbG9uZ2l0dWRlCisgICAgICogQHBhcmFtIGxhdGl0dWRlCisgICAgICogQHBhcmFtIGFsdGl0dWRlCisgICAgICovCisgICAgcHVibGljIENvb3JkaW5hdGVzKGRvdWJsZSBsb25naXR1ZGUsCisgICAgICAgICAgICBkb3VibGUgbGF0aXR1ZGUsCisgICAgICAgICAgICBkb3VibGUgYWx0aXR1ZGUpIHsKKyAgICAgICAgdGhpcyhsb25naXR1ZGUsbGF0aXR1ZGUpOyAgICAgICAgCisgICAgICAgIF9pc0FsdGl0dWRlU3BlY2lmaWVkID0gdHJ1ZTsKKyAgICAgICAgX2FsdGl0dWRlID0gYWx0aXR1ZGU7CisgICAgfQorICAgIC8qKgorICAgICAqIAorICAgICAqIEByZXR1cm4gU3RyaW5nIHdpdGggbG9uZ2l0dWRlLGxhdGl0dWRlWyxhbHRpdHVkZV0gKSAKKyAgICAgKi8KKyAgICAKKyAgICBwdWJsaWMgU3RyaW5nIGdldENvb3JkaW5hdGVzKCkgeworICAgICAgICBTdHJpbmdCdWZmZXIgc3RyID0gbmV3IFN0cmluZ0J1ZmZlcigpOworICAgICAgICBzdHIuYXBwZW5kKERvdWJsZS50b1N0cmluZyhfbG9uZ2l0dWRlKSk7CisgICAgICAgIHN0ci5hcHBlbmQoIiwiKTsKKyAgICAgICAgc3RyLmFwcGVuZChEb3VibGUudG9TdHJpbmcoX2xhdGl0dWRlKSk7CisgICAgICAgIGlmIChfaXNBbHRpdHVkZVNwZWNpZmllZCkgeworICAgICAgICAgICAgc3RyLmFwcGVuZCgiLCIpOworICAgICAgICAgICAgc3RyLmFwcGVuZChEb3VibGUudG9TdHJpbmcoX2FsdGl0dWRlKSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHN0ci50b1N0cmluZygpOworICAgIH0KKyAgICAKKyAgICAvKioKKyAgICAgKiAKKyAgICAgKiBAcmV0dXJuIGxvbmdpdHVkZSAKKyAgICAgKi8KKyAgICAKKyAgICBwdWJsaWMgZG91YmxlIGdldExvbmdpdHVkZSgpIHsKKyAgICAgICAgcmV0dXJuIF9sb25naXR1ZGU7CisgICAgfQorICAgIC8qKgorICAgICAqIAorICAgICAqIEByZXR1cm4gbGF0aXR1ZGUgCisgICAgICovCisgICAgCisgICAgcHVibGljIGRvdWJsZSBnZXRMYXRpdHVkZSgpIHsKKyAgICAgICAgcmV0dXJuIF9sYXRpdHVkZTsKKyAgICB9CisgICAgLyoqCisgICAgICogCisgICAgICogQHJldHVybiBhbHRpdHVkZSAKKyAgICAgKi8KKyAgICAKKyAgICBwdWJsaWMgZG91YmxlIGdldEFsdGl0dWRlICgpIHsKKyAgICAgICAgcmV0dXJuIF9hbHRpdHVkZTsKKyAgICB9CisgICAgLyoqCisgICAgICogQWRkIGNvb3JkaW5hdGVzIHRvIHRoZSBDb29yZGluYXRlcyBzZWN0aW9uCisgICAgICogICAgICAKKyAgICAgKiBAcGFyYW0gbG9uZ2l0dWRlCisgICAgICogQHBhcmFtIGxhdGl0dWRlCisgICAgICovCisgICAgcHVibGljIHZvaWQgc2V0Q29vcmRpbmF0ZXMoZG91YmxlIGxvbmdpdHVkZSxkb3VibGUgbGF0aXR1ZGUpIHsKKyAgICAgICAgX2xvbmdpdHVkZSA9IGxvbmdpdHVkZTsKKyAgICAgICAgX2xhdGl0dWRlID0gbGF0aXR1ZGU7ICAgIAorICAgIH0KKyAgICAvKioKKyAgICAgKiBBZGQgY29vcmRpbmF0ZXMgdG8gdGhlIENvb3JkaW5hdGVzIHNlY3Rpb24gKHdpdGggYWx0aXR1ZGUpCisgICAgICogICAgICAKKyAgICAgKiBAcGFyYW0gbG9uZ2l0dWRlCisgICAgICogQHBhcmFtIGxhdGl0dWRlCisgICAgICogQHBhcmFtIGFsdAorICAgICAqLworICAgIHB1YmxpYyB2b2lkIHNldENvb3JkaW5hdGVzKGRvdWJsZSBsb25naXR1ZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG91YmxlIGxhdGl0dWRlLGludCBhbHQpIHsKKyAgICAgICAgX2xvbmdpdHVkZSA9IGxvbmdpdHVkZTsKKyAgICAgICAgX2xhdGl0dWRlID0gbGF0aXR1ZGU7ICAgCisgICAgICAgIF9hbHRpdHVkZSA9IGFsdDsKKyAgICB9CisgICAgLyoqCisgICAgICogcmV0dXJuIGEgc2V0IG9mIGNvb3JkaW5hdGVzIGFzIGEgU3RyaW5nLgorICAgICAqIAorICAgICAqICBUaGlzIGlzIG5lZWRlZCB0byBidWlsZCBhIHBvbHlnb24gZnJvbSBhCisgICAgICogIGxpc3Qgb2YgcG9pbnRzLgorICAgICAqICAKKyAgICAgKiAgIGxvbmcxLGxhdDEsYWx0MSBsb25nMixsYXQyLGFsdDIgLi4uCisgICAgICogQHBhcmFtIGNvcm5lcnMKKyAgICAgKiBAcmV0dXJuIFN0cmluZyB2YWx1ZQorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgU3RyaW5nIHRvU3RyaW5nKENvb3JkaW5hdGVzW10gY29ybmVycykgeworICAgICAgICAKKyAgICAgICAgU3RyaW5nQnVmZmVyIHN0cmJ1ZiA9IG5ldyBTdHJpbmdCdWZmZXIoMTAwKTsKKyAgICAgICAgZm9yIChpbnQgaT0wOyBpPGNvcm5lcnMubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgIGlmIChpIT0wKQorICAgICAgICAgICAgICAgIHN0cmJ1Zi5hcHBlbmQoIiwiKTsKKyAgICAgICAgICAgIFN0cmluZyB2ID0gRG91YmxlLnRvU3RyaW5nKGNvcm5lcnNbaV0uZ2V0TG9uZ2l0dWRlKCkpOworICAgICAgICAgICAgc3RyYnVmLmFwcGVuZCh2KTsKKyAgICAgICAgICAgIHN0cmJ1Zi5hcHBlbmQoIiwiKTsKKyAgICAgICAgICAgIHYgPSBEb3VibGUudG9TdHJpbmcoY29ybmVyc1tpXS5nZXRMYXRpdHVkZSgpKTsKKyAgICAgICAgICAgIHN0cmJ1Zi5hcHBlbmQodik7CisgICAgICAgICAgICBzdHJidWYuYXBwZW5kKCIsIik7CisgICAgICAgICAgICBpZiAoY29ybmVyc1tpXS5faXNBbHRpdHVkZVNwZWNpZmllZCkgeworICAgICAgICAgICAgICAgIHYgPSBEb3VibGUudG9TdHJpbmcoY29ybmVyc1tpXS5nZXRMYXRpdHVkZSgpKTsKKyAgICAgICAgICAgICAgICBzdHJidWYuYXBwZW5kKHYpOyAKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXR1cm4gc3RyYnVmLnRvU3RyaW5nKCk7CisgICAgfQorCisJLyoqCisJICogQHJldHVybiB0aGUgX2lzQWx0aXR1ZGVTcGVjaWZpZWQKKwkgKi8KKwlwdWJsaWMgYm9vbGVhbiBpc0FsdGl0dWRlU3BlY2lmaWVkKCkgeworCQlyZXR1cm4gX2lzQWx0aXR1ZGVTcGVjaWZpZWQ7CisJfQorICAgIAorICAgIAorfSAvLyBlbmQgY2xhc3MKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5nZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9nZS9rbWwvSUttbERpc3BsYXkuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5nZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9nZS9rbWwvSUttbERpc3BsYXkuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMTY4Zjc4Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLmdlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL2dlL2ttbC9JS21sRGlzcGxheS5qYXZhCkBAIC0wLDAgKzEsNjAgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS51aS5nZS5rbWw7CisKK2ltcG9ydCBqYXZhLnV0aWwuTWFwOworCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS51aS5nZS5Bc3BlY3Q7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS51aS5nZS5HRURhdGE7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioKKyAqIElLTUxEaXNwbGF5IGRlZmluZXMgdGhlIGludGVyZmFjZSBmb3IgY2xhc3NlcyB0aGF0IGltcGxlbWVudAorICogdGhlIGdlbmVyYXRpb24gb2YgS01MIGZpbGVzIHRoYXQgd2lsbCBkaXNwbGF5IHRoZSBTVEVNCisgKiBkaXNlYXNlIGFzcGVjdCBvbiB0aGUgR29vZ2xlRWFydGggbWFwLiAgCisgKiAKKyAqIEltcGxlbWVudGF0aW9ucyBvZiBJS21sRGlzcGxheSBoYXZlIGEgc2luZ2xlIG1ldGhvZCAKKyAqICJnZW5lcmF0ZVBvbHlnb25zIiB3aGljaCBpcyBwYXNzZWQgYWxsIG9mIHRoZSBpbmZvcm1hdGlvbiAKKyAqIG5lZWRlZCB0byB3cml0ZSB0aGUgZGVzaXJlZCBLTUwuIAorICoKKyAqLworcHVibGljIGludGVyZmFjZSBJS21sRGlzcGxheSB7CisJCisKKwkgLyoqCisgICAgICogQ3JlYXRlIHRoZSBLTUwgY29udHJvbCBmaWxlIHRvIGRpc3BsYXkgYWxsIG9mIHRoZSAKKyAgICAgKiBwb2x5Z29uIChjb3VudHkpIGFyZWFzCisgICAgICoKKyAgICAgKiA8cHJlPgorICAgICAqIEluZm9ybWF0aW9uIHBhc3NlZDoKKyAgICAgKiAKKyAgICAgKiBjb250cm9sRmlsZW5hbWU6ICBUaGUgZmlsZW5hbWUgd2hlcmUgdGhlIHJlc3VsdGluZyBLTUwgaXMgdG8gYmUgd3JpdHRlbi4KKyAgICAgKiAgICAKKyAgICAgKiBnZURhdGE6ICBBIEhhc2hNYXAgY29udGFpbmluZyBhbiBlbnRyeSBmb3IgZWFjaCBnZW9ncmFwaGljYWwKKyAgICAgKiAgICAgICAgICBhcmVhIGJlaW5nIG1hcHBlZCBieSB0aGlzIHNpbXVsYXRpb24uIEl0IGNvbnRhaW5zIHRoZSAKKyAgICAgKiAgICAgICAgICBnZW9ncmFwaGljYWwgYm9yZGVycyAobGF0bG9uZykgYW5kIHZhbHVlcyBmb3IgCisgICAgICogICAgICAgICAgZWFjaCBBc3BlY3QuIAorICAgICAqICAgICAgICAgIAorICAgICAqIGFzcGVjdDogIFRoZSBBc3BlY3QgdGhhdCB0aGUgdXNlciB3YW50cyBkaXNwbGF5ZWQuIAorICAgICAqIAorICAgICAqIAorICAgICAqIDwvcHJlPgorICAgICAqIAorICAgICAqIEBwYXJhbSBjb250cm9sRmlsZU5hbWUgRmlsZSB3aGVyZSBLTUwgd2lsbCBiZSB3cml0dGVuIAorICAgICAqIEBwYXJhbSBnZURhdGEgTWFwIG9mIEdFRGF0YSBvYmplY3RzIAorICAgICAqIEBwYXJhbSBhc3BlY3QgIHdoaWNoIHR5cGUgb2YgbWFwIChwb3B1bGF0aW9uLHN1c2NlcHRpcGxlLi4uCisgICAgICogCisgICAgICovCisgICAgCisJcHVibGljIHZvaWQgZ2VuZXJhdGVQb2x5Z29ucyhTdHJpbmcgY29udHJvbEZpbGVOYW1lLCAKKwkJCU1hcDxTdHJpbmcsR0VEYXRhPiBnZURhdGEsIEFzcGVjdCBhc3BlY3QpOworCQorfQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLmdlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL2dlL2ttbC9LbWxEaXNwbGF5LmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkuZ2Uvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvZ2Uva21sL0ttbERpc3BsYXkuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jN2UxODFhCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLmdlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL2dlL2ttbC9LbWxEaXNwbGF5LmphdmEKQEAgLTAsMCArMSwyODQgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS51aS5nZS5rbWw7CisKK2ltcG9ydCBqYXZhLmF3dC5SZWN0YW5nbGU7CitpbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOworaW1wb3J0IGphdmEudXRpbC5NYXA7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQXNzZXJ0OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udWkuZ2UuQXNwZWN0OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udWkuZ2UuR0VEYXRhOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udWkuZ2UuR0VMb2c7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS51aS5nZS52aWV3cy5HRVByZWZlcmVuY2VQYWdlOworaW1wb3J0IG9yZy53M2MuZG9tLkRvY3VtZW50OworaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioKKyAqIFN0YW5kYXJkIERJU1BMQVkgT0YgU0VJUiBhc3BlY3RzLiAKKyAqCisgKi8KK3B1YmxpYyBjbGFzcyBLbWxEaXNwbGF5IGltcGxlbWVudHMgSUttbERpc3BsYXkgICB7CisKKwkvKioKKyAgICAgKiBpbml0aWFsaXphdGlvbgorICAgICAqIAorICAgICAqIGN1cnJlbnRseSB3ZSBoYXZlIG5vdGhpbmcgdG8gZG8KKyAgICAgKiAKKyAgICAgKiAKKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBpbml0KCkgeworICAgIAkgICAgICAgIAorICAgIH0KKyAgICAvKioKKyAgICAgKiBDcmVhdGUgdGhlIEtNTCBjb250cm9sIGZpbGUgdG8gZGlzcGxheSBhbGwgb2YgdGhlIAorICAgICAqIHBvbHlnb24gKGNvdW50eSkgYXJlYXMKKyAgICAgKgorICAgICAqIFdlIHdpbGwgaGF2ZSBOIFBsYWNlTWFya3MsIGVhY2ggb2Ygd2hpY2ggd2lsbCAKKyAgICAgKiBiZSBhc3NvY2lhdGVkIHdpdGggYSBkaWZmZXJudCBTdHlsZSAoZm9yIGNvbG9yKSAKKyAgICAgKiBUaGUgcG9seWdvbnMgd2lsbCBiZSBwbGFjZWQgaW4gYSBwbGFjZW1hcmsgYmFzZWQKKyAgICAgKiBvbiB0aGUgY29sb3Igc2VsZWN0aW9uLgorICAgICAqIAorICAgICAqIEBwYXJhbSBjb250cm9sRmlsZU5hbWUgRmlsZSB3aGVyZSBLTUwgd2lsbCBiZSB3cml0dGVuIAorICAgICAqIEBwYXJhbSBnZURhdGEgTWFwIG9mIEdFRGF0YSBvYmplY3RzIAorICAgICAqIEBwYXJhbSBhc3BlY3QgIHdoaWNoIHR5cGUgb2YgbWFwIChwb3B1bGF0aW9uLHN1c2NlcHRpcGxlLi4uCisgICAgICogQHBhcmFtIGN5Y2xlIGN1cnJlbnQgbnVtYmVyIG9mIGN5Y2xlIGJlaW5nIGRpc3BsYXllZAorICAgICAqLworICAgIAorCXB1YmxpYyB2b2lkIGdlbmVyYXRlUG9seWdvbnMoU3RyaW5nIGNvbnRyb2xGaWxlTmFtZSwgCisJCQlNYXA8U3RyaW5nLEdFRGF0YT4gZ2VEYXRhLCBBc3BlY3QgYXNwZWN0KSB7CisgICAgICAgIGludCB3cml0dGVuID0gMDsKKwkJLy9HRUxvZy5kZWJ1Zyh0aGlzLCJhc3BlY3Q9Iithc3BlY3QrIiBudW1iZXI9IitnZURhdGEuc2l6ZSgpKTsKKwkJCisJCUttbERvYyBrbWwgPSBuZXcgS21sRG9jKCk7CisJCURvY3VtZW50IGRvYyA9IGttbC5nZXREb2N1bWVudCgpOworCQlFbGVtZW50IHJvb3QgPSBrbWwuc2V0Um9vdChudWxsKTsKKwkJRWxlbWVudCBkb2N1bWVudCA9IGttbC5hcHBlbmRFbGVtZW50KHJvb3QsIkRvY3VtZW50Iik7CisJCVN0eWxlW10gc3R5bGVzID0gc2V0dXBTdHlsZXMoa21sLGRvY3VtZW50LGFzcGVjdCk7CisJCWludCBtYXggPSBhc3BlY3QuZ2V0UmFuZ2UoKS5sZW5ndGg7CisJCQorCQkvL1NldHVwIHRoZSBwbGFjZW1hcmtzIGZvciBwb2x5Z29ucyB3aXRoIHNhbWUgYXR0cmlidXRlCisJCVBsYWNlTWFya1tdIHBsYWNlTWFyayA9IG5ldyBQbGFjZU1hcmtbbWF4XTsKKwkJRWxlbWVudFtdIG11bHRpR2VvbWV0cnkgPSBuZXcgRWxlbWVudFttYXhdOworCQlmb3IgKGludCBqPTA7ajxtYXg7aisrKSB7CisJCQlwbGFjZU1hcmtbal0gPSBuZXcgUGxhY2VNYXJrKGRvYyk7CisJCQlkb2N1bWVudC5hcHBlbmRDaGlsZChwbGFjZU1hcmtbal0uZ2V0RWxlbWVudCgpKTsKKwkJCXBsYWNlTWFya1tqXS5zZXREZXNjcmlwdGlvbigiU1RFTSBtYXAiKTsKKworCQkJcGxhY2VNYXJrW2pdLnNldE5hbWUoIlNURU0iK2opOworCQkJcGxhY2VNYXJrW2pdLnNldFN0eWxlVXJsKHN0eWxlc1tqXSk7ICAgCisJCQltdWx0aUdlb21ldHJ5W2pdID0gZG9jLmNyZWF0ZUVsZW1lbnQoIk11bHRpR2VvbWV0cnkiKTsKKwkJCXBsYWNlTWFya1tqXS5hcHBlbmRDaGlsZChtdWx0aUdlb21ldHJ5W2pdKTsKKwkJfSAKKwkJCisJCS8vIG5vdyB3ZSBnZW5lcmF0ZSBhIHBvbHlnb24gZm9yIGVhY2ggY291bnR5CisvLwkJaW50IGRlYnVnY291bnRlciA9MDsKKwkJLy8gR2V0IGxhdGVzdCBCQm94IGluZm8gZnJvbSBHb29nbGVFYXJ0aAorCQlSZWN0YW5nbGUgYmJveFZpZXcgPSBCQm94SW5mby5nZXRCQm94KCk7CisJCUl0ZXJhdG9yIGl0ID0gZ2VEYXRhLmVudHJ5U2V0KCkuaXRlcmF0b3IoKTsKKwkJYm9vbGVhbiBiYm94RmlsdGVyID0gR0VQcmVmZXJlbmNlUGFnZS5pc0JCT1goKTsgCisJCXdoaWxlKGl0Lmhhc05leHQoKSkgeworCQkJaW50IHR5cGUgPSAwOworCQkJTWFwLkVudHJ5IGUgPSAoTWFwLkVudHJ5KWl0Lm5leHQoKTsKKwkJCUdFRGF0YSBkYXRhID0gKEdFRGF0YSllLmdldFZhbHVlKCk7CisKKwkJCVN0cmluZyBjb3VudHkgPSBkYXRhLmdldE5hbWUoKTsJCisJCQkvLyBjaGVjayBpZiB3ZSBhcmUgZmlsdGVyaW5nIG91dCBzb21lIGFyZWFzCisJCQlpZiAoYmJveEZpbHRlciAmJiBmaWx0ZXIoZGF0YSxiYm94VmlldykpICB7CisJCQkJdHlwZSA9IDA7CQorCQkJfSBlbHNlIHsJCQkJCisJCQkJdHlwZSA9IHNlbGVjdEJ5VmFsdWUoYXNwZWN0LGRhdGEpOworCQkJfQorCQkJCisvLwkJCSBERUJVRyB0ZW1wCisvLwkJCVN0cmluZyBsb2NpZCA9IGxvYy5nZXRJZCgpLnRvU3RyaW5nKCk7CQorLy8JCQlpZiAoY291bnR5LnN0YXJ0c1dpdGgoIk1pZGRsZXNleCIpKSB7CQkJCQkJCQkgCisvLwkJCQlHRUxvZy5kZWJ1Zyh0aGlzLCJnZW5lcmF0ZVBvbHlnb25zOiAiK2krIjogIitjb3VudHkrIjoiK2xvY2lkKworLy8JCQkJCQkiOiAiK3R5cGUrIjogIitjb29yZCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAKKy8vCQkJfQorCQkJaWYgKHR5cGUgPiAwKSB7CisJCQkJLy9HRUxvZy5kZWJ1Zyh0aGlzLGNvdW50eSk7IAorCQkJCWludCBuID0gZGF0YS5nZXROdW1BcmVhcygpOworCQkJCWZvciAoaW50IGkgPSAwOyBpIDwgbjsgaSsrKSB7CisJCQkJCQorCQkJCQlTdHJpbmcgY29vcmQgPSBkYXRhLmdldENvb3JkaW5hdGVzQXNTdHJpbmcoaSk7CisJCQkJCS8vaWYgKGkgPiAwKQorCQkJCQkvLyAgIEdFTG9nLmRlYnVnKHRoaXMsaSsiOiAiK2NvdW50eSsiICIrY29vcmQpOworCQkJCQlQb2x5Z29uIHBvbHlnb24gPSBuZXcgUG9seWdvbihkb2MpOworCQkJCQlrbWwuYXBwZW5kVGV4dChwb2x5Z29uLmdldEVsZW1lbnQoKSwgIm5hbWUiLCBjb3VudHkpOworCQkJCQlwb2x5Z29uLnNldENvb3JkaW5hdGVzKGNvb3JkKTsKKwkJCQkJbXVsdGlHZW9tZXRyeVt0eXBlXS5hcHBlbmRDaGlsZChwb2x5Z29uLmdldEVsZW1lbnQoKSk7CisJCQkJfQorCQkJCXdyaXR0ZW4rKzsKKwkJCX0KKworCQl9CisKKwkJR0VMb2cuZGVidWcodGhpcywid3JpdGUgIitjb250cm9sRmlsZU5hbWUrCisJCQkJIiB3aXRoICIrd3JpdHRlbisiIGVudHJpZXMuIik7CisJCWttbC53cml0ZUZpbGUoY29udHJvbEZpbGVOYW1lKTsKKwkJLy9HRUxvZy5kZWJ1Zyh0aGlzLCJlbmQgd3JpdGUgb2YgIitjb250cm9sRmlsZU5hbWUpOyAKKwkJcmV0dXJuOworCX0KKworCS8qKgorCSAqIGNoZWNrIGlmIHRoaXMgZW50cnkgc2hvdWxkIGJlIGZpbHRlcmVkIG91dCAKKwkgKiAKKwkgKiBAcGFyYW0gZGF0YSAgSW5zdGFuY2UgdGhhdCBjb250YWlucyBpbmZvIGZvciB0aGlzIGFkbWluIGFyZWEKKwkgKiBAcGFyYW0gYmJveFZpZXcgU2NyZWVuIGJvdW5kYXJ5IGJveCBmcm9tIEdvb2dsZUVhcnRoIAorCSAqIEByZXR1cm4gdHJ1ZSBpZiBpdCBzaG91bGQgYmUgZmlsdGVyZWQgb3V0LgorCSAqLworCXByaXZhdGUgYm9vbGVhbiBmaWx0ZXIoR0VEYXRhIGRhdGEsUmVjdGFuZ2xlIGJib3hWaWV3KSB7CisJCWJvb2xlYW4gZmlsdGVyZWQgPSBmYWxzZTsgIC8vIGRlZmF1bHQgLSBub3QgZmlsdGVyZWQKKwkJaWYgKGJib3hWaWV3ICE9IG51bGwgKSB7CQkJCQorCQkJUmVjdGFuZ2xlIGJib3ggPSBkYXRhLmdldEJCb3goKTsKKwkJCWZpbHRlcmVkID0gISBCQm94SW5mby50ZXN0Q29udGFpbm1lbnQoYmJveCxiYm94Vmlldyk7CisJCQlyZXR1cm4gZmlsdGVyZWQ7CisJCX0gCisvLwkJCQlpZiAoY291bnR5LmluZGV4T2YoIiBNQSAiKT49MCAgfHwKKy8vCQkJCSAgICBjb3VudHkuaW5kZXhPZigiIE1UICIpPj0wICAgICkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisvLwkJCSAgICAgICAgZmlsdGVyZWQgPSAhIHRlc3RDb250YWlubWVudChiYm94LGJib3hWaWV3KTsJCQkgICAgCQorLy8JCQkgICAgCUdFTG9nLmRlYnVnKHRoaXMsIiBiYm94OiAgICAiK2Jib3gpOworLy8JCQkgICAgCUdFTG9nLmRlYnVnKHRoaXMsIiBiYm94VmlldzoiK2Jib3hWaWV3KTsKKy8vCQkJCX0KKy8vCQlpZiAoR0VQcmVmZXJlbmNlUGFnZS5pc1Rlc3QoKSkgewkJCisvLwkJCVN0cmluZyBjb3VudHkgPSBkYXRhLmdldE5hbWUoKTsJCisvLwkJCWlmIChjb3VudHkuaW5kZXhPZigiIFVTLSIpPj0gMCApIHsJCQkJCQorLy8JCQkJZmlsdGVyZWQgPSBmYWxzZTsKKy8vCQkJCisvLwkJCX0gZWxzZSBpZiAoY291bnR5LmluZGV4T2YoIiBNRVgiKT49IDAgKSB7CQkJCQkKKy8vCQkJCWZpbHRlcmVkID0gZmFsc2U7CisvLwkJCX0gZWxzZSB7CisvLwkJCQlmaWx0ZXJlZCA9IHRydWU7CisvLwkJCX0KKy8vCQkJCisvLwkJCS8vR0VMb2cuZGVidWcodGhpcyxjb3VudHkrIiAiK2ZpbHRlcmVkKTsKKy8vCQl9CisJCXJldHVybiBmaWx0ZXJlZDsKKwl9CisJCisJCisvLwk8U3R5bGUgaWQ9IlN0eWxlMSI+CisvLwkgIDxMaW5lU3R5bGU+CisvLwkgICAgIDx3aWR0aD4wLjM8L3dpZHRoPgorLy8JICA8L0xpbmVTdHlsZT4KKy8vCSAgPFBvbHlTdHlsZT4KKy8vCSAgICA8b3V0bGluZT4wPC9vdXRsaW5lPgorLy8JICAgIDxmaWxsPjE8L2ZpbGw+CisvLwkgICAgPGNvbG9yPjgwMDAwMGYwPC9jb2xvcj4KKy8vCSAgPC9Qb2x5U3R5bGU+CisvLwk8L1N0eWxlPgorICAvKioKKyAgICogQnVpbGQgdGhlIFN0eWxlIHN0YXRlbWVudHMgdGhhdCB3aWxsIGJlIHJlZmVyZWRlZCB0byAKKyAgICogYnkgdGhlIHBvbHlnb25zIGxpc3RlZCBsYXRlci4gIAorICAgKiAKKyAgICogQHBhcmFtIGttbAorICAgKiBAcGFyYW0gZG9jdW1lbnQKKyAgICogQHBhcmFtIGFzcGVjdAorICAgKiBAcmV0dXJuIFN0eWxlW10gYXJyYXkgb2YgS01MIFN0eWxlIGluc3RhbmNlcworICAgKi8KKyAgcHJpdmF0ZSBTdHlsZVtdIHNldHVwU3R5bGVzKEttbERvYyBrbWwsRWxlbWVudCBkb2N1bWVudCwgQXNwZWN0IGFzcGVjdCkgeworCURvY3VtZW50IGRvYyA9IGttbC5nZXREb2N1bWVudCgpOwkKKwlpbnQgbWF4ID0gYXNwZWN0LmdldFJhbmdlKCkubGVuZ3RoOworCS8vIGRlZmluZSB0aGUgU3R5bGUgc2VjdGlvbnMKKwlTdHlsZVtdIHN0eWxlcyA9IG5ldyBTdHlsZVttYXhdOworCWZvciAoaW50IGs9MDtrPG1heDtrKyspIHsgCisJCXN0eWxlc1trXSA9IG5ldyBTdHlsZShkb2MsIlN0eWxlIitrKTsKKwkJc3R5bGVzW2tdLnNldExpbmVTdHlsZSgwLjMpOworCQlkb2N1bWVudC5hcHBlbmRDaGlsZChzdHlsZXNba10uZ2V0RWxlbWVudCgpKTsKKwkJLyogc2V0IHRoZSBQb2x5U3R5bGUgdmFsdWUgd2l0aCBjb2xvciBpbiBoZXggZm9ybWF0OgorCQkgKiAgICAgICAgICBvb2JiZ2diYiAgCisJCSAqICAgICAgICAgICAgMDAgT3BhY2l0eSAoMDAgdG8gZmYpCisJCSAqICAgICAgICAgICAgYmIgQmx1ZSAoMDAgdG8gZmYpCisJCSAqICAgICAgICAgICAgZ2cgZ3JlZW4gKDAwIHRvIGZmKQorCQkgKiAgICAgICAgICAgIHJyIHJlZCAgKDAwIHRvIGZmKQorCQkgKi8gCisJCWludCBvbyA9IDA7CisJCWludCBibHVlID0gMDsKKwkJaW50IHJlZCA9IDA7CisJCWludCBncmVlbiA9IDA7CisJCS8qKgorCQkgKiBVc2Ugb3VyIHByZWZlcmVuY2UgdG8gb3V0bGluZSB0aGUgYm9yZGVycworCQkgKi8gCisJCWJvb2xlYW4gb3V0bGluZSA9IEdFUHJlZmVyZW5jZVBhZ2UuaXNTaG93Qm9yZGVyKCk7CQkJCQorCQkKKwkJaWYgKGs9PTApIHsKKwkJCS8vIFN0eWxlMCBkb2VzIG5vdCBzaG93IHRoZSBwb2x5Z29uCQkJCisJCQlzdHlsZXNbMF0uc2V0UG9seVN0eWxlKCIwIiwgb3V0bGluZSk7CisJCX0gZWxzZSB7CisJCQlibHVlID0gYXNwZWN0LmdldEJsdWUoayk7CisJCQlyZWQgPSBhc3BlY3QuZ2V0UmVkKGspOworCQkJZ3JlZW4gPSBhc3BlY3QuZ2V0R3JlZW4oayk7CisJCQlvbyA9IGFzcGVjdC5nZXRPcGFjaXR5KGspOworCQkJCisJCQlTdHJpbmcgaGV4ID0gU3RlbUttbC5nZXRIZXgob28pKworCQkJICAgICAgICAgICAgIFN0ZW1LbWwuZ2V0SGV4KGJsdWUpKworCQkJICAgICAgICAgICAgIFN0ZW1LbWwuZ2V0SGV4KGdyZWVuKSsKKwkJCSAgICAgICAgICAgICBTdGVtS21sLmdldEhleChyZWQpOworCQkJc3R5bGVzW2tdLnNldFBvbHlTdHlsZShoZXgsb3V0bGluZSk7CisJCX0KKwl9CisJcmV0dXJuIHN0eWxlczsKKyAgfQorICAKKyAgCisgIC8qKgorICAgKiBTZWxlY3QgdGhlIGNvbG9yIHRvIGJlIHVzZWQgYnkgdGhlIEdvb2dsZUVhcnRoIFBvbHlnb24KKyAgICogYmFzZWQgb24gdGhlIHJlbGF0aXZlIHZhbHVlIGZvciB0aGUgcHJvcGVydHkKKyAgICogCisgICAqIEBwYXJhbSBhc3BlY3QgIGVudW0gdmFsdWUgc3BlY2lmaW5nIHdoaWNoIHR5cGUgb2YKKyAgICogICAgICAgICAgICAgICAgZGlzcGxheSBpcyBzaG93biAocG9wdWxhdGlvbiwgc3VzY2VwdGlibGUsIAorICAgKiAgICAgICAgICAgICAgICBleHBvc2VkLGluZmVjdGlvdXMscmVjb3ZlcmVkKQorICAgKiBAcGFyYW0gZ2VEYXRhCisgICAqIAorICAgKiBAcmV0dXJuICB2YWx1ZSAwIHRvIE1BWCB0aGF0IGRldGVybWluZXMgd2hpY2ggZ3JvdXBpbmcKKyAgICogICBvZiBwb2x5Z29ucyB0aGlzIGFyZWEgd2lsbCBiZSBkaXNwbGF5ZWQgd2l0aC4KKyAgICovCisgIAorICBwdWJsaWMgaW50IHNlbGVjdEJ5VmFsdWUoQXNwZWN0IGFzcGVjdCwgR0VEYXRhIGdlRGF0YSkgeworIAorICAJaW50IHR5cGUgPSAwOworCisgIAl0cnkgeworICAJCVN0cmluZyBjb2RlID0gYXNwZWN0LmdldENvZGUoKTsKKyAgCQlBc3NlcnQuaXNOb3ROdWxsKGNvZGUsICJBc3BlY3QgY29kZSBpcyBudWxsIik7CisgIAkJaWYgKGNvZGUgPT0gbnVsbCkKKyAgCQkJcmV0dXJuIDA7CisgIAkJTWFwPFN0cmluZyxEb3VibGU+IG1hcCA9IGdlRGF0YS5nZXRWYWx1ZU1hcCgpOworICAJCUFzc2VydC5pc05vdE51bGwobWFwLCAiQXNwZWN0IG1hcCBpcyBudWxsIik7ICAJCQkJCQorICAJCWRvdWJsZSB2YWx1ZSA9IDAuMDsKKyAgCQlpZiAobWFwICE9IG51bGwpIHsKKyAgCQkJRG91YmxlIGQgPSBtYXAuZ2V0KGNvZGUpOworICAJCQlpZiAoZCAhPSBudWxsKQorICAJCQkgICAgdmFsdWUgPSBkOworICAJCX0gZWxzZSB7IAorICAJCQlyZXR1cm4gMDsKKyAgCQl9CisgIAkJCisgIAkJZG91YmxlW10gcmFuZ2UgPSBhc3BlY3QuZ2V0UmFuZ2UoKTsJCisgIAkJZm9yIChpbnQgaT0wOyBpPHJhbmdlLmxlbmd0aDsgaSsrKSB7CisgIAkJCWlmICh2YWx1ZSA8PSByYW5nZVtpXSkgeworICAJCQkJdHlwZSA9IGk7CisgIAkJCQlicmVhazsKKyAgCQkJfQorICAJCX0KKyAgCQkKKyAgCQkKKyAgCQkKKyAgCX0gY2F0Y2ggKFJ1bnRpbWVFeGNlcHRpb24gZTEpIHsKKworICAJCUdFTG9nLmVycm9yKCJzZWxlY3RCeVZhbHVlIixlMSk7CisgIAl9CisgIAlyZXR1cm4gdHlwZTsgIAorICB9CisgIAorfQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLmdlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL2dlL2ttbC9LbWxEaXNwbGF5Q3VzdG9tLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkuZ2Uvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvZ2Uva21sL0ttbERpc3BsYXlDdXN0b20uamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNTI2MjZmCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLmdlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL2dlL2ttbC9LbWxEaXNwbGF5Q3VzdG9tLmphdmEKQEAgLTAsMCArMSwzMDAgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS51aS5nZS5rbWw7CisKK2ltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7CitpbXBvcnQgamF2YS51dGlsLk1hcDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udWkuZ2UuQXNwZWN0OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udWkuZ2UuR0VEYXRhOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udWkuZ2UuR0VMb2c7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS51aS5nZS52aWV3cy5HRVByZWZlcmVuY2VQYWdlOworaW1wb3J0IG9yZy53M2MuZG9tLkRvY3VtZW50OworaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioKKyAqIEN1c3RvbSBkaXNwbGF5IE9GIFNFSVIgYXNwZWN0cy4gCisgKiAgIAorICovCitwdWJsaWMgY2xhc3MgS21sRGlzcGxheUN1c3RvbSBpbXBsZW1lbnRzIElLbWxEaXNwbGF5ICAgeworCisJCisgICAgLyoqCisgICAgICogQ3JlYXRlIHRoZSBLTUwgY29udHJvbCBmaWxlIHRvIGRpc3BsYXkgYWxsIG9mIHRoZSAKKyAgICAgKiBwb2x5Z29uIChjb3VudHkpIGFyZWFzCisgICAgICoKKyAgICAgKiBXZSB3aWxsIGhhdmUgTiBQbGFjZU1hcmtzLCBlYWNoIG9mIHdoaWNoIHdpbGwgCisgICAgICogYmUgYXNzb2NpYXRlZCB3aXRoIGEgZGlmZmVybnQgU3R5bGUgKGZvciBjb2xvcikgCisgICAgICogVGhlIHBvbHlnb25zIHdpbGwgYmUgcGxhY2VkIGluIGEgcGxhY2VtYXJrIGJhc2VkCisgICAgICogb24gdGhlIGNvbG9yIHNlbGVjdGlvbi4KKyAgICAgKiAKKyAgICAgKiBAcGFyYW0gY29udHJvbEZpbGVOYW1lIEZpbGUgd2hlcmUgS01MIHdpbGwgYmUgd3JpdHRlbiAKKyAgICAgKiBAcGFyYW0gZ2VEYXRhIE1hcCBvZiBHRURhdGEgb2JqZWN0cyAKKyAgICAgKiBAcGFyYW0gYXNwZWN0ICB3aGljaCB0eXBlIG9mIG1hcCAocG9wdWxhdGlvbixzdXNjZXB0aXBsZS4uLgorICAgICAqIAorICAgICAqLworICAgIAorCXB1YmxpYyB2b2lkIGdlbmVyYXRlUG9seWdvbnMoU3RyaW5nIGNvbnRyb2xGaWxlTmFtZSwgCisJCQlNYXA8U3RyaW5nLEdFRGF0YT4gZ2VEYXRhLCBBc3BlY3QgYXNwZWN0KSB7CisgICAgICAgIAorCQlHRUxvZy5kZWJ1Zyh0aGlzLCJnZW5lcmF0ZVBvbHlnb25zOiBhc3BlY3Q9IisKKwkJCQlhc3BlY3QgKyIgbnVtYmVyPSIrZ2VEYXRhLnNpemUoKSk7CisJCQorCQlLbWxEb2Mga21sID0gbmV3IEttbERvYygpOworCQlEb2N1bWVudCBkb2MgPSBrbWwuZ2V0RG9jdW1lbnQoKTsKKwkJRWxlbWVudCByb290ID0ga21sLnNldFJvb3QobnVsbCk7CisJCUVsZW1lbnQgZG9jdW1lbnQgPSBrbWwuYXBwZW5kRWxlbWVudChyb290LCJEb2N1bWVudCIpOworCQlTdHlsZVtdIHN0eWxlcyA9IHNldHVwU3R5bGVzKGttbCxkb2N1bWVudCxhc3BlY3QpOworCQlpbnQgbWF4ID0gc3R5bGVzLmxlbmd0aDsKKwkJCisJCS8vU2V0dXAgdGhlIHBsYWNlbWFya3MgZm9yIHBvbHlnb25zIHdpdGggc2FtZSBhdHRyaWJ1dGUKKwkJUGxhY2VNYXJrW10gcGxhY2VNYXJrID0gbmV3IFBsYWNlTWFya1ttYXhdOworCQlFbGVtZW50W10gbXVsdGlHZW9tZXRyeSA9IG5ldyBFbGVtZW50W21heF07CisJCWZvciAoaW50IGo9MDtqPG1heDtqKyspIHsKKwkJCXBsYWNlTWFya1tqXSA9IG5ldyBQbGFjZU1hcmsoZG9jKTsKKwkJCWRvY3VtZW50LmFwcGVuZENoaWxkKHBsYWNlTWFya1tqXS5nZXRFbGVtZW50KCkpOworCQkJcGxhY2VNYXJrW2pdLnNldERlc2NyaXB0aW9uKCJTVEVNIG1hcCIpOworCisJCQlwbGFjZU1hcmtbal0uc2V0TmFtZSgiU1RFTSIraik7CisJCQlwbGFjZU1hcmtbal0uc2V0U3R5bGVVcmwoc3R5bGVzW2pdKTsgICAKKwkJCW11bHRpR2VvbWV0cnlbal0gPSBkb2MuY3JlYXRlRWxlbWVudCgiTXVsdGlHZW9tZXRyeSIpOworCQkJcGxhY2VNYXJrW2pdLmFwcGVuZENoaWxkKG11bHRpR2VvbWV0cnlbal0pOworCQl9IAorCQkKKwkJLy8gbm93IHdlIGdlbmVyYXRlIGEgcG9seWdvbiBmb3IgZWFjaCBjb3VudHkKKy8vCQlpbnQgZGVidWdjb3VudGVyID0wOworCQlJdGVyYXRvciBpdCA9IGdlRGF0YS5lbnRyeVNldCgpLml0ZXJhdG9yKCk7CisJCXdoaWxlKGl0Lmhhc05leHQoKSkgeworCQkJaW50IHR5cGUgPSAwOworCQkJTWFwLkVudHJ5IGUgPSAoTWFwLkVudHJ5KWl0Lm5leHQoKTsKKwkJCUdFRGF0YSBkYXRhID0gKEdFRGF0YSllLmdldFZhbHVlKCk7CisJCQlTdHJpbmcgY291bnR5ID0gZGF0YS5nZXROYW1lKCk7CQorLy8JCQkgY2hlY2sgaWYgd2UgYXJlIGZpbHRlcmluZyBvdXQgc29tZSBhcmVhcworCQkJaWYgKGZpbHRlcihkYXRhKSkgIHsKKwkJCQl0eXBlID0gMDsJCisJCQl9IGVsc2UgeworCQkJCXR5cGUgPSBzZWxlY3RCeVZhbHVlKGRhdGEpOworCQkJfQorCisJCQkvLyBpZ25vcmUgcmV0dXJuIHR5cGUgLTEKKyAgICAgICAgICAgIAorCQkJaWYgKHR5cGUgPj0wKSB7CisJCQkJZm9yIChpbnQgaSA9IDA7IGkgPCBkYXRhLmdldE51bUFyZWFzKCk7IGkrKykgeworCQkJCQlTdHJpbmcgY29vcmQgPSBkYXRhLmdldENvb3JkaW5hdGVzQXNTdHJpbmcoaSk7CisJCQkJCQorCQkJCQlQb2x5Z29uIHBvbHlnb24gPSBuZXcgUG9seWdvbihkb2MpOworCQkJCQlrbWwuYXBwZW5kVGV4dChwb2x5Z29uLmdldEVsZW1lbnQoKSwgIm5hbWUiLCBjb3VudHkpOworCQkJCQlwb2x5Z29uLnNldENvb3JkaW5hdGVzKGNvb3JkKTsKKwkJCQkJbXVsdGlHZW9tZXRyeVt0eXBlXS5hcHBlbmRDaGlsZChwb2x5Z29uLmdldEVsZW1lbnQoKSk7CisJCQkJfQorCQkJfQorCisJCX0KKworCQkvL0dFTG9nLmRlYnVnKHRoaXMsInN0YXJ0IHdyaXRlIG9mICIrY29udHJvbEZpbGVOYW1lKTsKKwkJa21sLndyaXRlRmlsZShjb250cm9sRmlsZU5hbWUpOworCQkvL0dFTG9nLmRlYnVnKHRoaXMsImVuZCB3cml0ZSBvZiAiK2NvbnRyb2xGaWxlTmFtZSk7IAorCQlyZXR1cm47CisJfQorCQorCS8qKgorCSAqIGNoZWNrIGlmIHRoaXMgZW50cnkgc2hvdWxkIGJlIGZpbHRlcmVkIG91dCAKKwkgKiAKKwkgKiBAcGFyYW0gZGF0YSAgSW5zdGFuY2UgdGhhdCBjb250YWlucyBpbmZvIGZvciB0aGlzIGFkbWluIGFyZWEKKwkgKiAKKwkgKiBAcmV0dXJuIHRydWUgaWYgaXQgc2hvdWxkIGJlIGZpbHRlcmVkIG91dC4KKwkgKi8KKwlwcml2YXRlIGJvb2xlYW4gZmlsdGVyKEdFRGF0YSBkYXRhKSB7CisJCWJvb2xlYW4gZmlsdGVyZWQgPSBmYWxzZTsKKwkJaWYgKEdFUHJlZmVyZW5jZVBhZ2UuaXNUZXN0KCkpIHsJCQkKKwkJCVN0cmluZyBjb3VudHkgPSBkYXRhLmdldE5hbWUoKTsJCisJCQlpZiAoY291bnR5LmluZGV4T2YoIiBVUy0iKT49IDAgKSB7CQkJCQkKKwkJCQlmaWx0ZXJlZCA9IGZhbHNlOworCQkJCisJCQl9IGVsc2UgaWYgKGNvdW50eS5pbmRleE9mKCIgTUVYIik+PSAwICkgewkJCQkJCisJCQkJZmlsdGVyZWQgPSBmYWxzZTsKKwkJCX0gZWxzZSB7CisJCQkJZmlsdGVyZWQgPSB0cnVlOworCQkJfQorCQl9CisJCXJldHVybiBmaWx0ZXJlZDsKKwl9CisKKy8vCTxTdHlsZSBpZD0iU3R5bGUxIj4KKy8vCSAgPExpbmVTdHlsZT4KKy8vCSAgICAgPHdpZHRoPjAuMzwvd2lkdGg+CisvLwkgIDwvTGluZVN0eWxlPgorLy8JICA8UG9seVN0eWxlPgorLy8JICAgIDxvdXRsaW5lPjA8L291dGxpbmU+CisvLwkgICAgPGZpbGw+MTwvZmlsbD4KKy8vCSAgICA8Y29sb3I+ODAwMDAwZjA8L2NvbG9yPgorLy8JICA8L1BvbHlTdHlsZT4KKy8vCTwvU3R5bGU+CisgIC8qKgorICAgKiBCdWlsZCB0aGUgU3R5bGUgc3RhdGVtZW50cyB0aGF0IHdpbGwgYmUgcmVmZXJlZGVkIHRvIAorICAgKiBieSB0aGUgcG9seWdvbnMgbGlzdGVkIGxhdGVyLiAgCisgICAqIAorICAgKiBAcGFyYW0ga21sCisgICAqIEBwYXJhbSBkb2N1bWVudAorICAgKiBAcGFyYW0gYXNwZWN0CisgICAqIEByZXR1cm4gU3R5bGVbXSBhcnJheSBvZiBLTUwgU3R5bGUgaW5zdGFuY2VzCisgICAqLworICBwcml2YXRlIFN0eWxlW10gc2V0dXBTdHlsZXMoS21sRG9jIGttbCxFbGVtZW50IGRvY3VtZW50LCBBc3BlY3QgYXNwZWN0KSB7CisJRG9jdW1lbnQgZG9jID0ga21sLmdldERvY3VtZW50KCk7CQorCS8qKgorCSAqIERvIG5vdCBvdXRsaW5lIHRoZSBib3JkZXJzCisJICovIAkJCisJYm9vbGVhbiBvdXRsaW5lID0gZmFsc2U7CisJaW50IG1heCA9IDk7CisJLy8gZGVmaW5lIHRoZSBTdHlsZSBzZWN0aW9ucworCVN0eWxlW10gc3R5bGVzID0gbmV3IFN0eWxlW21heF07CisJZm9yIChpbnQgaz0wO2s8bWF4O2srKykgeyAKKwkJc3R5bGVzW2tdID0gbmV3IFN0eWxlKGRvYywiU3R5bGUiK2spOworCQlzdHlsZXNba10uc2V0TGluZVN0eWxlKDAuMyk7CisJCWRvY3VtZW50LmFwcGVuZENoaWxkKHN0eWxlc1trXS5nZXRFbGVtZW50KCkpOworCQkvKiBzZXQgdGhlIFBvbHlTdHlsZSB2YWx1ZSB3aXRoIGNvbG9yIGluIGhleCBmb3JtYXQ6CisJCSAqICAgICAgICAgIG9vYmJnZ2JiICAKKwkJICogICAgICAgICAgICAwMCBPcGFjaXR5ICgwMCB0byBmZikKKwkJICogICAgICAgICAgICBiYiBCbHVlICgwMCB0byBmZikKKwkJICogICAgICAgICAgICBnZyBncmVlbiAoMDAgdG8gZmYpCisJCSAqICAgICAgICAgICAgcnIgcmVkICAoMDAgdG8gZmYpCisJCSAqLyAKKwkJaW50IG9vID0gMTYwOworCQlpbnQgYmx1ZSA9IDA7CisJCWludCByZWQgPSAwOworCQlpbnQgZ3JlZW4gPSAwOwkJCisJCQorCQlzd2l0Y2ggKGspIHsKKwkJY2FzZSAwOiAgLy9yZWQKKwkJCXJlZCA9IDB4ZjA7CisJCQlicmVhazsKKwkJY2FzZSAxOiAgLy8gb3JhbmdlCisJCQlyZWQgPSAweGYwOworCQkJZ3JlZW4gPSAweGEwOworCQkJYnJlYWs7CQorCQljYXNlIDI6ICAgLy8gbHQgZ3JlZW4KKwkJCXJlZCA9IDB4ZDA7CisJCQlncmVlbiA9IDB4ZjA7CisJCQlicmVhazsKKwkJY2FzZSAzOiAgLy9vcmFuZ2UKKwkJCXJlZCA9IDB4ZDA7CisJCQlncmVlbiA9IDB4YjA7CisJCQlicmVhazsKKwkJY2FzZSA0OiAgLy8gbHQgZ3JlZW4KKwkJCXJlZCA9IDB4YjA7CisJCQlncmVlbiA9IDB4ZjA7CisJCQlicmVhazsKKwkJY2FzZSA1OiAgIC8vb3JhbmdlCisJCQlyZWQgPSAweGYwOworCQkJZ3JlZW4gPSAweGMwOworCQkJYnJlYWs7CisJCWNhc2UgNjogIC8vIGx0IGdyZWVuCisJCQlyZWQgPSAweGMwOworCQkJZ3JlZW4gPSAweGYwOworCQkJYnJlYWs7CisJCWNhc2UgNzogIC8vIHllbGxvdworCQkJcmVkID0gMHhmMDsKKwkJCWdyZWVuID0gMHhmMDsKKwkJCWJyZWFrOworCQljYXNlIDg6IC8vIGdyZWVuCisJCQlyZWQgPSAweDAwOworCQkJZ3JlZW4gPSAweGYwOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlicmVhazsKKwkJfQorCQkJCisJCVN0cmluZyBoZXggPSBTdGVtS21sLmdldEhleChvbykrCisJCQkgICAgICAgICAgICAgU3RlbUttbC5nZXRIZXgoYmx1ZSkrCisJCQkgICAgICAgICAgICAgU3RlbUttbC5nZXRIZXgoZ3JlZW4pKworCQkJICAgICAgICAgICAgIFN0ZW1LbWwuZ2V0SGV4KHJlZCk7CisJCXN0eWxlc1trXS5zZXRQb2x5U3R5bGUoaGV4LG91dGxpbmUpOworCQkKKwl9CisJcmV0dXJuIHN0eWxlczsKKyAgfQorICAKKyAgCisgIC8qKgorICAgKiBTZWxlY3QgdGhlIGNvbG9yIHRvIGJlIHVzZWQgYnkgdGhlIEdvb2dsZUVhcnRoIFBvbHlnb24KKyAgICogYmFzZWQgb24gdGhlIHJlbGF0aXZlIHZhbHVlIGZvciB0aGUgcHJvcGVydHkKKyAgICogPHByZT4KKyAgICogIFMgICAgRSAgICBJICAgICBSICAgUmVkIEdyZWVuIEJsdWUgICBUeXBlIAorICAgKiAgIDEgICAwICAgIDAgICAgIDAgICAgICAgICAgICAgICAgICAgICAgLTEKKyAgICogICAtICAgLSAgID4uOCAgICAtICAgIEYwICAgMDAgICAgICAgICAgICAwCisgICAqICAgLSAgPlIgICA+LjYgICAgLSAgICBGMCAgIEEwICAgICAgICAgICAgMQorICAgKiAgIC0gICAtICAgPi42ICAgPkkgICAgRDAgICBGMCAgICAgICAgICAgIDIgCisgICAqICAgLSAgPlIgICA+LjQgICAgLSAgICBEMCAgIEIwICAgICAgICAgICAgMworICAgKiAgIC0gICAwICAgPi40ICAgPkkgICAgQjAgICBGMCAgICAgICAgICAgIDQKKyAgICogICAtICA+UiAgID4uMiAgICAtICAgIEYwICAgQzAgICAgICAgICAgICA1CisgICAqICAgLSAgIC0gICA+LjIgICA+SSAgICBDMCAgIEYwICAgICAgICAgICAgNgorICAgKiAgIC0gID5SICAgPC4yICAgIC0gICAgRjAgICBGMCAgICAgICAgICAgIDcKKyAgICogICAtICAgLSAgIDwuMiAgID5JICAgIDAwICAgRjAgICAgICAgICAgICA4CisgICAqICAgICAgICAgCisgICAqIDwvcHJlPgorICAgKiAKKyAgICogQHBhcmFtIGdlRGF0YSBJbnN0YW5jZSB0aGF0IGhvZHMgaW5mbyBhYm91dCBhcmVhIGluY2x1ZGluZyAKKyAgICogICAgICAgICAgICAgICB0aGUgbGF0ZXN0IGRpc2Vhc2Ugc3RhdGUuCisgICAqIAorICAgKiBAcmV0dXJuICB2YWx1ZSAwIHRvIE1BWCB0aGF0IGRldGVybWluZXMgd2hpY2ggZ3JvdXBpbmcKKyAgICogICBvZiBwb2x5Z29ucyB0aGlzIGFyZWEgd2lsbCBiZSBkaXNwbGF5ZWQgd2l0aC4KKyAgICogICAtMSB3aWxsIGluZGljYXRlIG5vdCB0byBkaXNwbGF5IHRoZSBwb2x5Z29uCisgICAqLworICAKKyAgICBwdWJsaWMgaW50IHNlbGVjdEJ5VmFsdWUoR0VEYXRhIGdlRGF0YSkgeworCisJCWludCB0eXBlID0gMDsKKworCQlkb3VibGUgcyA9IGdlRGF0YS5nZXRWYWx1ZU1hcCgpLmdldCgiUyIpOworCQlkb3VibGUgZSA9IGdlRGF0YS5nZXRWYWx1ZU1hcCgpLmdldCgiRSIpOworCQlkb3VibGUgaSA9IGdlRGF0YS5nZXRWYWx1ZU1hcCgpLmdldCgiSSIpOworCQlkb3VibGUgciA9IGdlRGF0YS5nZXRWYWx1ZU1hcCgpLmdldCgiUiIpOworCisJCWlmIChzID09IDEuMCAmJiBlID09IDAuMCAmJiBpID09IDAuMCAmJiByID09IDAuMCkgeworCQkJdHlwZSA9IC0xOyAvLyB1bmluaXRpYWxpemVkCisJCX0gZWxzZSBpZiAoaSA+PSAwLjIpIHsKKwkJCXR5cGUgPSAwOyAvLyByZWQKKwkJfSBlbHNlIGlmIChpID49IDAuMSApIHsKKwkJCWlmICggZSA+PSByKSB7CisJCQkJdHlwZSA9IDE7ICAvLyBvcmFuZ2UKKwkJCX0gZWxzZSB7CisJCQkJaWYgKHIgPiAwLjkpCisJCQkJICAgIHR5cGUgPSA4OyAgLy8gbHQgZ3JlZW4KKwkJCQllbHNlIAorCQkJCQl0eXBlID0gMDsgIC8vIHJlZAorCQkJfQorLy8JCX0gZWxzZSBpZiAoaSA+PSAwLjQgKSB7CisvLwkJCWlmICggZSA+PSByKSB7CisvLwkJCQl0eXBlID0gMzsgIC8vICByZWQgZ3JlZW4gIAorLy8JCQl9IGVsc2UgeworLy8JCQkJdHlwZSA9IDQ7ICAvLyBncmVlbiByZWQKKy8vCQkJfQorCQl9IGVsc2UgaWYgKGkgPiAwLjAxICkgeworCQkJaWYgKCBlID49IHIpIHsKKwkJCQl0eXBlID0gMTsgIC8vIG9yYW5nZQorCQkJfSBlbHNlIHsKKwkJCQl0eXBlID0gODsgIC8vIGdyZWVuIHJlZAorCQkJfQorCQl9IGVsc2UgaWYgKGUgPj0gcikgewkJCQorCQkJdHlwZSA9IDc7IC8vICAgLy8geWVsbG93CisJCX0gZWxzZSB7CisJCQl0eXBlID0gODsgICAgICAvLyBncmVlbgorCQkJCisJCX0KKwkJaWYgKGdlRGF0YS5nZXROYW1lKCkuY29udGFpbnMoIiAyNTAxNyIpKSB7CisJCQlHRUxvZy5kZWJ1Zyh0aGlzLCBnZURhdGEuZ2V0TmFtZSgpICsgIiAiCisJCQkJCSsgZ2VEYXRhLmdldFZhbHVlc0FzU3RyaW5nKCkgKyAiICIgKyB0eXBlKTsKKwkJfQorCQlyZXR1cm4gdHlwZTsKKwl9CisgIAorfQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLmdlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL2dlL2ttbC9LbWxEaXNwbGF5U2VsZWN0aW9uLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkuZ2Uvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvZ2Uva21sL0ttbERpc3BsYXlTZWxlY3Rpb24uamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZWJjMDNlCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLmdlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL2dlL2ttbC9LbWxEaXNwbGF5U2VsZWN0aW9uLmphdmEKQEAgLTAsMCArMSwyNDQgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS51aS5nZS5rbWw7CisKK2ltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7CitpbXBvcnQgamF2YS51dGlsLk1hcDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5Bc3NlcnQ7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS51aS5nZS5Bc3BlY3Q7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS51aS5nZS5HRURhdGE7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS51aS5nZS5HRUxvZzsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnVpLmdlLnZpZXdzLkdFUHJlZmVyZW5jZVBhZ2U7CitpbXBvcnQgb3JnLnczYy5kb20uRG9jdW1lbnQ7CitpbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKgorICogRGlzcGxheSB0aGUgcG9seWdvbiBhbmQgcGxhY2VtYXJrIGFzIHRoZSByZXN1bHQgb2YgYSAKKyAqIFNlbGVjdGlvbiBldmVudCBmcm9tIGEgTWFwVmlldyBtb3VzZSBjbGljay4gCisgKgorICovCitwdWJsaWMgY2xhc3MgS21sRGlzcGxheVNlbGVjdGlvbiBpbXBsZW1lbnRzIElLbWxEaXNwbGF5ICAgeworCisJLyoqCisgICAgICogaW5pdGlhbGl6YXRpb24KKyAgICAgKiAKKyAgICAgKiBjdXJyZW50bHkgd2UgaGF2ZSBub3RoaW5nIHRvIGRvCisgICAgICogCisgICAgICogCisgICAgICovCisgICAgcHVibGljIHZvaWQgaW5pdCgpIHsKKyAgICAJICAgICAgICAKKyAgICB9CisgICAgLyoqCisgICAgICogQ3JlYXRlIHRoZSBLTUwgY29udHJvbCBmaWxlIHRvIGRpc3BsYXkgYQorICAgICAqIHNlbGVjdGVkIGFkbWluIGFyZWEgYW5kIHBsYWNlbWFyayBpY29uLgorICAgICAqIFRoZSBHRURhdGEgb2JqZWN0cyBpbiB0aGUgTWFwIHRoYXQgaXMgcGFzc2VkIAorICAgICAqIGNvbnRhaW5zIHRoZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgcG9seWdvbiBhbmQgCisgICAgICogdGhlIHBvaW50cyB3aGVyZSB0aGUgcGxhY2VtYXJrIGljb25zIGFyZSB0byBiZSAKKyAgICAgKiBwbGFjZWQuCisgICAgICogICAgICAqIAorICAgICAqIEBwYXJhbSBjb250cm9sRmlsZU5hbWUgRmlsZSB3aGVyZSBLTUwgd2lsbCBiZSB3cml0dGVuIAorICAgICAqIEBwYXJhbSBnZURhdGEgTWFwIG9mIEdFRGF0YSBvYmplY3RzIAorICAgICAqIAorICAgICAqLworICAgIAorCXB1YmxpYyB2b2lkIGdlbmVyYXRlUG9seWdvbnMoU3RyaW5nIGNvbnRyb2xGaWxlTmFtZSwKKwkJCU1hcDxTdHJpbmcsIEdFRGF0YT4gZ2VEYXRhLCBBc3BlY3QgdW51c2VkKSB7CisJCQorCQlHRUxvZy5kZWJ1Zyh0aGlzLCAiZmlsZT0iICsgY29udHJvbEZpbGVOYW1lICsgIiBudW1iZXI9IgorCQkJCSsgZ2VEYXRhLnNpemUoKSk7CisKKwkJS21sRG9jIGttbCA9IG5ldyBLbWxEb2MoKTsKKwkJRG9jdW1lbnQgZG9jID0ga21sLmdldERvY3VtZW50KCk7CisJCUVsZW1lbnQgcm9vdCA9IGttbC5zZXRSb290KG51bGwpOworCQlFbGVtZW50IGRvY3VtZW50ID0ga21sLmFwcGVuZEVsZW1lbnQocm9vdCwgIkRvY3VtZW50Iik7CisJCQorCQkvLyBnZW5lcmF0ZSB0aGUgS01MIFN0eWxlIGluZm8gdGhhdCB3aWxsIGJlIHVzZWQgYnkgCisJCS8vIHRoZSBmb2xsb3dpZyBwbGFjZW1hcmtzCisJCVN0eWxlIHN0eWxlcyA9IHNldHVwU3R5bGVzKGttbCwgZG9jdW1lbnQpOworCQkKKwkJCisgICAgICAgIC8vIFRoZXJlIGlzIG5vcm1hbGx5IG9ubHkgb25lIGVudHJ5IGluIGdlRGF0YQorCQkvLyBidXQgaGFuZGxlIG1vcmUKKwkJCisJCUl0ZXJhdG9yIGl0ID0gZ2VEYXRhLmVudHJ5U2V0KCkuaXRlcmF0b3IoKTsKKworCQl3aGlsZSAoaXQuaGFzTmV4dCgpKSB7CisJCQlNYXAuRW50cnkgZSA9IChNYXAuRW50cnkpIGl0Lm5leHQoKTsKKwkJCUdFRGF0YSBkYXRhID0gKEdFRGF0YSkgZS5nZXRWYWx1ZSgpOworCQkJLy8gZ2VuZXJhdGUgcGxhY21hcmsgZm9yIHBvaW50CisJCQlQbGFjZU1hcmsgcGxhY2VNYXJrID0gbmV3IFBsYWNlTWFyayhkb2MpOworCQkJCisJCQlwbGFjZU1hcmsuc2V0RGVzY3JpcHRpb24oZGF0YS5nZXREZXNjcmlwdGlvbigpKTsKKworCQkJcGxhY2VNYXJrLnNldE5hbWUoZGF0YS5nZXROYW1lKCkpOworCQkKKwkJCXBsYWNlTWFyay5zZXRTdHlsZVVybChzdHlsZXMpOworCQkJUG9pbnQgcG9pbnQgPSBuZXcgUG9pbnQoZG9jKTsKKwkJCWRvdWJsZVtdIHB0cyA9IGRhdGEuZ2V0UG9pbnQoKTsKKwkJCXBvaW50LnNldENvb3JkaW5hdGVzKHB0c1swXSxwdHNbMV0pOworCQkJcGxhY2VNYXJrLmFwcGVuZENoaWxkKHBvaW50LmdldEVsZW1lbnQoKSk7CisJCQlkb2N1bWVudC5hcHBlbmRDaGlsZChwbGFjZU1hcmsuZ2V0RWxlbWVudCgpKTsKKwkJCS8vIFNldHVwIHRoZSBwbGFjZW1hcmtzIGZvciBwb2x5Z29uCQorCQkJcGxhY2VNYXJrID0gbmV3IFBsYWNlTWFyayhkb2MpOworCQkJRWxlbWVudCBtdWx0aUdlb21ldHJ5ID0gbnVsbDsKKwkJCXBsYWNlTWFyay5zZXREZXNjcmlwdGlvbigicG9seWdvbiBkZXNjcmlwdGlvbiIpOworCisJCQlwbGFjZU1hcmsuc2V0TmFtZShkYXRhLmdldE5hbWUoKSk7CisJCQorCQkJcGxhY2VNYXJrLnNldFN0eWxlVXJsKHN0eWxlcyk7CisJCQkKKwkJCWRvY3VtZW50LmFwcGVuZENoaWxkKHBsYWNlTWFyay5nZXRFbGVtZW50KCkpOworCQkJCisJCQltdWx0aUdlb21ldHJ5ID0gZG9jLmNyZWF0ZUVsZW1lbnQoIk11bHRpR2VvbWV0cnkiKTsKKwkJCXBsYWNlTWFyay5hcHBlbmRDaGlsZChtdWx0aUdlb21ldHJ5KTsKKworCQkJaW50IG4gPSBkYXRhLmdldE51bUFyZWFzKCk7CisJCQlmb3IgKGludCBpID0gMDsgaSA8IG47IGkrKykgeworCisJCQkJU3RyaW5nIGNvb3JkID0gZGF0YS5nZXRDb29yZGluYXRlc0FzU3RyaW5nKGkpOworCQkJCVN0cmluZyBjb3VudHkgPSBkYXRhLmdldE5hbWUoKTsKKwkJCQkvLyBpZiAoaSA+IDApCisJCQkJR0VMb2cuZGVidWcodGhpcyxpKyI6ICIrY291bnR5KyIgIitjb29yZCk7CisJCQkJUG9seWdvbiBwb2x5Z29uID0gbmV3IFBvbHlnb24oZG9jKTsKKwkJCQlrbWwuYXBwZW5kVGV4dChwb2x5Z29uLmdldEVsZW1lbnQoKSwgIm5hbWUiLGNvdW50eSApOworCQkJCXBvbHlnb24uc2V0Q29vcmRpbmF0ZXMoY29vcmQpOworCQkJCW11bHRpR2VvbWV0cnkuYXBwZW5kQ2hpbGQocG9seWdvbi5nZXRFbGVtZW50KCkpOworCQkJfQorCQkJCisJCX0KKworCQlrbWwud3JpdGVGaWxlKGNvbnRyb2xGaWxlTmFtZSk7CisJCS8vIEdFTG9nLmRlYnVnKHRoaXMsImVuZCB3cml0ZSBvZiAiK2NvbnRyb2xGaWxlTmFtZSk7CisJCWttbC5kaXNwbGF5KCk7CisJCXJldHVybjsKKwl9CisKKwkKKwkKKwkKKy8vCTxTdHlsZSBpZD0iU3R5bGUiPgorLy8JICA8TGluZVN0eWxlPgorLy8JICAgICA8d2lkdGg+MC4zPC93aWR0aD4KKy8vCSAgPC9MaW5lU3R5bGU+CisvLwkgIDxQb2x5U3R5bGU+CisvLwkgICAgPG91dGxpbmU+MDwvb3V0bGluZT4KKy8vCSAgICA8ZmlsbD4xPC9maWxsPgorLy8JICAgIDxjb2xvcj44MDAwMDBmMDwvY29sb3I+CisvLwkgIDwvUG9seVN0eWxlPgorLy8JCisvLyAgICA8QmFsbG9vblN0eWxlPiAgICAgIAorLy8gICAgICA8YmdDb2xvcj5mZmZmZmZiYjwvYmdDb2xvcj4gICAgICAKKy8vICAgICAgPHRleHQ+PCFbQ0RBVEFbCisvLyAgICAgIDxiPjxmb250IGNvbG9yPSIjQ0MwMDAwIiBzaXplPSIrMyI+JFtuYW1lXTwvZm9udD48L2I+CisvLyAgICAgIDxici8+PGJyLz4KKy8vICAgICAgPGZvbnQgZmFjZT0iQ291cmllciI+JFtkZXNjcmlwdGlvbl08L2ZvbnQ+CisvLyAgICAgIDxici8+PGJyLz4gICAgCisvLyAgICAgIF1dPjwvdGV4dD4KKy8vICAgIDwvQmFsbG9vblN0eWxlPgorLy8gIDwvU3R5bGU+CisgIC8qKgorICAgKiBCdWlsZCB0aGUgU3R5bGUgc3RhdGVtZW50cyB0aGF0IHdpbGwgYmUgcmVmZXJlZGVkIHRvIAorICAgKiBieSB0aGUgcG9seWdvbnMgbGlzdGVkIGxhdGVyLiAgCisgICAqIAorICAgKiBAcGFyYW0ga21sCisgICAqIEBwYXJhbSBkb2N1bWVudAorICAgKiAKKyAgICogQHJldHVybiBTdHlsZSAgS01MIFN0eWxlIGluc3RhbmNlcworICAgKi8KKwlwcml2YXRlIFN0eWxlIHNldHVwU3R5bGVzKEttbERvYyBrbWwsRWxlbWVudCBkb2N1bWVudCkgeworCQlEb2N1bWVudCBkb2MgPSBrbWwuZ2V0RG9jdW1lbnQoKTsJCisKKwkJU3R5bGUgc3R5bGVzID0gbmV3IFN0eWxlKGRvYywiU3R5bGVTZWxlY3QiKTsKKwkJc3R5bGVzLnNldExpbmVTdHlsZSgwLjMpOworCQlkb2N1bWVudC5hcHBlbmRDaGlsZChzdHlsZXMuZ2V0RWxlbWVudCgpKTsKKwkJLyogc2V0IHRoZSBQb2x5U3R5bGUgdmFsdWUgd2l0aCBjb2xvciBpbiBoZXggZm9ybWF0OgorCQkgKiAgICAgICAgICBvb2JiZ2diYiAgCisJCSAqICAgICAgICAgICAgMDAgT3BhY2l0eSAoMDAgdG8gZmYpCisJCSAqICAgICAgICAgICAgYmIgQmx1ZSAoMDAgdG8gZmYpCisJCSAqICAgICAgICAgICAgZ2cgZ3JlZW4gKDAwIHRvIGZmKQorCQkgKiAgICAgICAgICAgIHJyIHJlZCAgKDAwIHRvIGZmKQorCQkgKi8gCisJCWludCBvbyA9IDEyODsKKwkJaW50IGJsdWUgPSAxMjg7CisJCWludCByZWQgPSAwOworCQlpbnQgZ3JlZW4gPSAxMjg7CisJCS8qKgorCQkgKiBVc2Ugb3VyIHByZWZlcmVuY2UgdG8gb3V0bGluZSB0aGUgYm9yZGVycworCQkgKi8gCisJCWJvb2xlYW4gb3V0bGluZSA9IEdFUHJlZmVyZW5jZVBhZ2UuaXNTaG93Qm9yZGVyKCk7CQkJCQorCisKKwkJU3RyaW5nIGhleCA9IFN0ZW1LbWwuZ2V0SGV4KG9vKSsKKwkJU3RlbUttbC5nZXRIZXgoYmx1ZSkrCisJCVN0ZW1LbWwuZ2V0SGV4KGdyZWVuKSsKKwkJU3RlbUttbC5nZXRIZXgocmVkKTsKKwkJc3R5bGVzLnNldFBvbHlTdHlsZShoZXgsb3V0bGluZSk7CisgICAgICAgIAorCQlzdHlsZXMuc2V0QmFsbG9vblN0eWxlKCk7CisKKwkJcmV0dXJuIHN0eWxlczsKKwl9CisKKyAgCisgIC8qKgorICAgKiBTZWxlY3QgdGhlIGNvbG9yIHRvIGJlIHVzZWQgYnkgdGhlIEdvb2dsZUVhcnRoIFBvbHlnb24KKyAgICogYmFzZWQgb24gdGhlIHJlbGF0aXZlIHZhbHVlIGZvciB0aGUgcHJvcGVydHkKKyAgICogCisgICAqIEBwYXJhbSBhc3BlY3QgIGVudW0gdmFsdWUgc3BlY2lmaW5nIHdoaWNoIHR5cGUgb2YKKyAgICogICAgICAgICAgICAgICAgZGlzcGxheSBpcyBzaG93biAocG9wdWxhdGlvbiwgc3VzY2VwdGlibGUsIAorICAgKiAgICAgICAgICAgICAgICBleHBvc2VkLGluZmVjdGlvdXMscmVjb3ZlcmVkKQorICAgKiBAcGFyYW0gZ2VEYXRhCisgICAqIAorICAgKiBAcmV0dXJuICB2YWx1ZSAwIHRvIE1BWCB0aGF0IGRldGVybWluZXMgd2hpY2ggZ3JvdXBpbmcKKyAgICogICBvZiBwb2x5Z29ucyB0aGlzIGFyZWEgd2lsbCBiZSBkaXNwbGF5ZWQgd2l0aC4KKyAgICovCisgIAorICBwdWJsaWMgaW50IHNlbGVjdEJ5VmFsdWUoQXNwZWN0IGFzcGVjdCwgR0VEYXRhIGdlRGF0YSkgeworIAorICAJaW50IHR5cGUgPSAwOworCisgIAl0cnkgeworICAJCVN0cmluZyBjb2RlID0gYXNwZWN0LmdldENvZGUoKTsKKyAgCQlBc3NlcnQuaXNOb3ROdWxsKGNvZGUsICJBc3BlY3QgY29kZSBpcyBudWxsIik7CisgIAkJaWYgKGNvZGUgPT0gbnVsbCkKKyAgCQkJcmV0dXJuIDA7CisgIAkJTWFwPFN0cmluZyxEb3VibGU+IG1hcCA9IGdlRGF0YS5nZXRWYWx1ZU1hcCgpOworICAJCUFzc2VydC5pc05vdE51bGwobWFwLCAiQXNwZWN0IG1hcCBpcyBudWxsIik7ICAJCQkJCQorICAJCWRvdWJsZSB2YWx1ZSA9IDAuMDsKKyAgCQlpZiAobWFwICE9IG51bGwpIHsKKyAgCQkJRG91YmxlIGQgPSBtYXAuZ2V0KGNvZGUpOworICAJCQlpZiAoZCAhPSBudWxsKQorICAJCQkgICAgdmFsdWUgPSBkOworICAJCX0gZWxzZSB7IAorICAJCQlyZXR1cm4gMDsKKyAgCQl9CisgIAkJCisgIAkJZG91YmxlW10gcmFuZ2UgPSBhc3BlY3QuZ2V0UmFuZ2UoKTsJCisgIAkJZm9yIChpbnQgaT0wOyBpPHJhbmdlLmxlbmd0aDsgaSsrKSB7CisgIAkJCWlmICh2YWx1ZSA8PSByYW5nZVtpXSkgeworICAJCQkJdHlwZSA9IGk7CisgIAkJCQlicmVhazsKKyAgCQkJfQorICAJCX0KKyAgCQkKKyAgCQkKKyAgCQkKKyAgCX0gY2F0Y2ggKFJ1bnRpbWVFeGNlcHRpb24gZTEpIHsKKworICAJCUdFTG9nLmVycm9yKCJzZWxlY3RCeVZhbHVlIixlMSk7CisgIAl9CisgIAlyZXR1cm4gdHlwZTsgIAorICB9CisgIAorfQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLmdlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL2dlL2ttbC9LbWxEb2MuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5nZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9nZS9rbWwvS21sRG9jLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTAzNDRkOAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5nZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9nZS9rbWwvS21sRG9jLmphdmEKQEAgLTAsMCArMSw0NTUgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS51aS5nZS5rbWw7CisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8gCitpbXBvcnQgamF2YS5pby5GaWxlT3V0cHV0U3RyZWFtOworaW1wb3J0IGphdmEuaW8uT3V0cHV0U3RyZWFtOworCitpbXBvcnQgamF2YXgueG1sLnBhcnNlcnMuRG9jdW1lbnRCdWlsZGVyOworaW1wb3J0IGphdmF4LnhtbC5wYXJzZXJzLkRvY3VtZW50QnVpbGRlckZhY3Rvcnk7CitpbXBvcnQgamF2YXgueG1sLnBhcnNlcnMuUGFyc2VyQ29uZmlndXJhdGlvbkV4Y2VwdGlvbjsKK2ltcG9ydCBqYXZheC54bWwudHJhbnNmb3JtLk91dHB1dEtleXM7CitpbXBvcnQgamF2YXgueG1sLnRyYW5zZm9ybS5UcmFuc2Zvcm1lcjsKK2ltcG9ydCBqYXZheC54bWwudHJhbnNmb3JtLlRyYW5zZm9ybWVyRmFjdG9yeTsKK2ltcG9ydCBqYXZheC54bWwudHJhbnNmb3JtLmRvbS5ET01Tb3VyY2U7CitpbXBvcnQgamF2YXgueG1sLnRyYW5zZm9ybS5zdHJlYW0uU3RyZWFtUmVzdWx0OworCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS51aS5nZS5HRUxvZzsKK2ltcG9ydCBvcmcudzNjLmRvbS5DREFUQVNlY3Rpb247CitpbXBvcnQgb3JnLnczYy5kb20uRG9jdW1lbnQ7CitpbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKK2ltcG9ydCBvcmcudzNjLmRvbS5UZXh0OworCisKKworLyoqCisgKiBVdGlsaXR5IGNsYXNzIHVzZWQgZm9yIEdvb2dsZSBFYXJ0aCBLTUwgc3VwcG9ydC4KKyAqIAorICogIFRoaXMgY2xhc3MgaXMgdXNlZCB0byBidWlsZCBhIEtNTCBmaWxlIHRvIGJlIHBhc3NlZCB0bworICogIEdvb2dsZSBFYXJ0aC4gIAorICogIAorICogIEl0IGJhc2ljYWxseSBjcmVhdGVzIGFuIFhNTCBmaWxlIHVzaW5nIEtNTCByZWxhdGVkIGFyZ3VtZW50cy4KKyAqICAKKyAqICBTZWUgdGhlIGV4YW1wbGUgaW4gdGhlICJtYWluKCkiIG1ldGhvZCBmb3IgYW4gZXhhbXBsZSBvZiAKKyAqICBob3cgdG8gdXNlIHRoZSBjbGFzcy4KKyAqIAorICoKKyAqCisgKi8KK3B1YmxpYyBjbGFzcyBLbWxEb2MgeworCisgICAgCisKKyAgICAvKioKKyAgICAgKiBUaGlzIGNsYXNzIG5hbWUKKyAgICAgKi8KKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgX2NsYXNzTmFtZSA9ICJLbWxEb2MiOworCisgICAgCisKKyAgICAvKioKKyAgICAgKiAKKyAgICAgKiBBIEtNTCBkb2N1bWVudAorICAgICAqLworICAgIHByaXZhdGUgRG9jdW1lbnQgX2RvYzsKKyAgICAKKyAgICAvL3ByaXZhdGUgRWxlbWVudCBfcm9vdCA9IG51bGw7CisgICAKKyAgICAvKioKKyAgICAgKiBDb25zdHJ1Y3QgYW4gaW5zdGFuY2Ugb2YgS21sRG9jLgorICAgICAqIAorICAgICAqIFRoZSBEb2N1bWVudCBvYmplY3QgaXMgY3JlYXRlZCBidXQgbm90aGluZyBpcyBwdXQKKyAgICAgKiBpbnRvIGl0LgorICAgICAqIAorICAgICAqLworICAgIHB1YmxpYyBLbWxEb2MoKSB7CisgICAgICAgIFN0cmluZyBtZXRob2ROYW1lID0gX2NsYXNzTmFtZSArICIuS21sVXRpbChjb25zdHJ1Y3RvcikgIjsKKyAgICAgICAgLy8gQ3JlYXRlIGEgbmV3IHBhcnNlciB1c2luZyB0aGUgSkFYUCBBUEkgKGphdmF4LnhtbC5wYXJzZXIpCisgICAgICAgIERvY3VtZW50QnVpbGRlckZhY3RvcnkgZmFjdG9yeSA9IERvY3VtZW50QnVpbGRlckZhY3RvcnkubmV3SW5zdGFuY2UoKTsKKyAgICAgICAgRG9jdW1lbnRCdWlsZGVyIGRvY0J1aWxkZXIgPSBudWxsOworICAgICAgICB0cnkgeworICAgICAgICAgICAgZG9jQnVpbGRlciA9IGZhY3RvcnkubmV3RG9jdW1lbnRCdWlsZGVyKCk7CisgICAgICAgICAgICBpZiAoZG9jQnVpbGRlciAhPSBudWxsKQorICAgICAgICAgICAgICBfZG9jID0gZG9jQnVpbGRlci5uZXdEb2N1bWVudCgpOworICAgICAgICB9IGNhdGNoIChQYXJzZXJDb25maWd1cmF0aW9uRXhjZXB0aW9uIHBjZSkgeworICAgICAgICAgICAgZGVidWcobWV0aG9kTmFtZSsgIiBFcnJvciBjb25maWd1cmluZyB4bWwgZG9jdW1lbnQgYnVpbGRlciIKKyAgICAgICAgICAgICAgICAgICAgKyBwY2UuZ2V0TWVzc2FnZSgpKTsKKyAgICAgICAgfS8vIHRyeQorCisgICAgICAgICAgICAgICAgCisKKyAgICB9IC8vIGNvbnN0cnVjdG9yCisKKyAgICAvKioKKyAgICAgKiBTZXR1cCB0aGUgcm9vdCBvZiB0aGUgS01MIGRvY3VtZW50LgorICAgICAqIAorICAgICAqIAorICAgICAqIEBwYXJhbSB4bWxucyBWYWx1ZSBmb3IgeG1sbnMgCisgICAgICogKGlmIG51bGwsICB1c2UgZGVmYXVsdCAiaHR0cDovL2VhcnRoLmdvb2dsZS5jb20va21sLzIuMCIpCisgICAgICogQHJldHVybiB4bWwgZWxlbWVudAorICAgICAqLworICAgIAorICAgIHB1YmxpYyBFbGVtZW50IHNldFJvb3QoU3RyaW5nIHhtbG5zKSB7CisgICAgICAgIC8vU3RyaW5nIG1ldGhvZE5hbWUgPSBfY2xhc3NOYW1lICsgIi5zZXRSb290ICI7CisgICAgICAgIGlmICh4bWxucyA9PSBudWxsKQorICAgICAgICAgIHhtbG5zPSJodHRwOi8vZWFydGguZ29vZ2xlLmNvbS9rbWwvMi4xIjsgICAgIAorICAgICAgICAKKyAgICAgICAgRWxlbWVudCByb290ID0gX2RvYy5jcmVhdGVFbGVtZW50KCJrbWwiKTsKKyAgICAgICAgcm9vdC5zZXRBdHRyaWJ1dGUoInhtbG5zIix4bWxucyk7CisgICAgICAgIF9kb2MuYXBwZW5kQ2hpbGQocm9vdCk7CisgICAgICAgIHJldHVybiByb290OworICAgIH0gLy8gCisKKyAgICAKKyAgICAvKioKKyAgICAgKiAKKyAgICAgKiBXcml0ZSBhbiBYbWwgZG9jdW1lbnQgdG8gYW4gb3V0cHV0U3RyZWFtCisgICAgICogCisgICAgICoKKyAgICAgKiBAcGFyYW0geG1sRmlsZU5hbWVfCisgICAgICovCisKKyAgICBwdWJsaWMgIHZvaWQgd3JpdGVGaWxlKFN0cmluZyB4bWxGaWxlTmFtZV8pIHsKKworICAgICAgICB0cnkgeyAKKworICAgICAgICAgICAgRmlsZU91dHB1dFN0cmVhbSBvdXRwdXRTdHJlYW0gPSBuZXcgRmlsZU91dHB1dFN0cmVhbSh4bWxGaWxlTmFtZV8pOyAgCisgICAgICAgICAgICB3cml0ZShvdXRwdXRTdHJlYW0pOworICAgICAgICAgICAgCisgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CisgICAgICAgIAlkZWJ1ZyhlKTsKKyAgICAgICAgfQorICAgfQorICAgIC8qKgorICAgICAqIAorICAgICAqIFdyaXRlIGFuIFhtbCBkb2N1bWVudCB0byBhbiBvdXRwdXRTdHJlYW0KKyAgICAgKiAKKyAgICAgKgorICAgICAqIEBwYXJhbSBvcyBBbGxvY2F0ZWQgb3V0cHV0IFN0cmVhbQorICAgICAqLworCisgICAgcHVibGljICB2b2lkIHdyaXRlKE91dHB1dFN0cmVhbSBvcykgeworICAgICAgICB0cnkgeworICAgICAgICAgICAgLy8gVXNlIGEgVHJhbnNmb3JtZXIgZm9yIG91dHB1dAorICAgICAgICAgICAgVHJhbnNmb3JtZXJGYWN0b3J5IHRGYWN0b3J5ID0gVHJhbnNmb3JtZXJGYWN0b3J5Lm5ld0luc3RhbmNlKCk7CisgICAgICAgICAgICBUcmFuc2Zvcm1lciB0cmFuc2Zvcm1lciA9IHRGYWN0b3J5Lm5ld1RyYW5zZm9ybWVyKCk7CisgICAgICAgICAgICAvLyB0dXJuIG9uIGluZGVudGF0aW9ucworICAgICAgICAgICAgdHJhbnNmb3JtZXIuc2V0T3V0cHV0UHJvcGVydHkoT3V0cHV0S2V5cy5JTkRFTlQsICJ5ZXMiKTsKKyAgICAgICAgICAKKyAgICAgICAgICAgIC8vIHRoZSBkb2N1bWVudCBzb3VyY2UKKyAgICAgICAgICAgIERPTVNvdXJjZSBkb2NTb3VyY2UgPSBuZXcgRE9NU291cmNlKF9kb2MpOworICAgICAgICAgICAgCisgICAgICAgICAgICBTdHJlYW1SZXN1bHQgcmVzdWx0ID0gbmV3IFN0cmVhbVJlc3VsdChvcyk7CisKKyAgICAgICAgICAgIC8vIG91dHB1dCB0aGUgZG9jCisgICAgICAgICAgICB0cmFuc2Zvcm1lci50cmFuc2Zvcm0oZG9jU291cmNlLCByZXN1bHQpOworCisgICAgICAgICAgICBvcy5mbHVzaCgpOworCisgICAgICAgICAgICBvcy5jbG9zZSgpOworCisgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICBkZWJ1ZyhlKTsKKyAgICAgICAgfQorICAgIH0gLy8gZW5kIHdyaXRlCisgICAgCisgICAgCisgICAgLyoqCisgICAgICogRGlzcGxheSB0aGUgY3VycmVudCBLbWwgZG9jdW1lbnQgb24gc3RkT3V0LgorICAgICAqICAgPGJyPgorICAgICAqICAgICAgKiAKKyAgICAgKiAKKyAgICAgKi8KKworICAgIHB1YmxpYyB2b2lkIGRpc3BsYXkoKSB7CisKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgLy8gVXNlIGEgVHJhbnNmb3JtZXIgZm9yIG91dHB1dAorICAgICAgICAgICAgVHJhbnNmb3JtZXJGYWN0b3J5IHRGYWN0b3J5ID0gVHJhbnNmb3JtZXJGYWN0b3J5Lm5ld0luc3RhbmNlKCk7CisgICAgICAgICAgICBUcmFuc2Zvcm1lciB0cmFuc2Zvcm1lciA9IHRGYWN0b3J5Lm5ld1RyYW5zZm9ybWVyKCk7CisgICAgICAgICAgICAvLyB0dXJuIG9uIGluZGVudGF0aW9ucworICAgICAgICAgICAgdHJhbnNmb3JtZXIuc2V0T3V0cHV0UHJvcGVydHkoImluZGVudCIsICJ5ZXMiKTsKKworICAgICAgICAgIAorICAgICAgICAgICAgLy8gdGhlIGRvY3VtZW50IHNvdXJjZQorICAgICAgICAgICAgRE9NU291cmNlIGRvY1NvdXJjZSA9IG5ldyBET01Tb3VyY2UoX2RvYyk7CisKKyAgICAgICAgICAgIC8vIHRoZSBzdHJlYW0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgU3RyZWFtUmVzdWx0IHJlc3VsdCA9IG5ldyBTdHJlYW1SZXN1bHQoU3lzdGVtLm91dCk7CisKKyAgICAgICAgICAgIC8vIG91dHB1dCB0aGUgZG9jCisgICAgICAgICAgICB0cmFuc2Zvcm1lci50cmFuc2Zvcm0oZG9jU291cmNlLCByZXN1bHQpOworCisgICAgICAgICAgICAKKyAgICAgICAgICAgCisKKyAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgIGRlYnVnKGUpOworICAgICAgICB9CisgICAgfSAvLyBlbmQgZGlzcGxheQorICAgIAorICAgIC8qKgorICAgICAqIGRlYnVnIG91dHB1dCBtZXRob2QgCisgICAgICogQHBhcmFtIG1zZyAKKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBkZWJ1ZyhTdHJpbmcgbXNnKSB7CisgICAgICAgIEdFTG9nLmRlYnVnKHRoaXMsbXNnKTsKKyAgICAgICAgCisgICAgfQorICAgIAorCisgICAgLyoqCisgICAgICogZGVidWcgb3V0cHV0IG1ldGhvZCAKKyAgICAgKiBAcGFyYW0gbWV0aG9kIAorICAgICAqIEBwYXJhbSBtc2cgCisgICAgICovCisgICAgcHVibGljIHZvaWQgZGVidWcoU3RyaW5nIG1ldGhvZCxTdHJpbmcgbXNnKSB7CisgICAgICAgIEdFTG9nLmRlYnVnKHRoaXMsbWV0aG9kK21zZyk7CisgICAgICAgIAorICAgIH0KKworICAgIC8qKgorICAgICAqIGRlYnVnIG91dHB1dCBtZXRob2QgCisgICAgICogQHBhcmFtIHQgCisgICAgICovCisgICAgcHVibGljIHZvaWQgZGVidWcoVGhyb3dhYmxlIHQpIHsKKyAgICAgICAgR0VMb2cuZXJyb3IoIkttbERvYyBmYWlsdXJlIix0KTsKKyAgICAgICAgCisgICAgfQorICAgIC8qKgorICAgICAqIGRlYnVnIG91dHB1dCBtZXRob2QgCisgICAgICogQHBhcmFtIG1zZyAKKyAgICAgKiBAcGFyYW0gdCAKKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBkZWJ1ZyhTdHJpbmcgbXNnLFRocm93YWJsZSB0KSB7CisgICAgCUdFTG9nLmVycm9yKCJLbWxEb2M6ICIrbXNnLHQpOworICAgICAgICAKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBAcmV0dXJuIFJldHVybnMgdGhlIF9kb2MuCisgICAgICovCisgICAgcHVibGljIERvY3VtZW50IGdldERvY3VtZW50KCkgeworICAgICAgICByZXR1cm4gX2RvYzsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBAcGFyYW0gX2RvYyBUaGUgX2RvYyB0byBzZXQuCisgICAgICovCisgICAgcHVibGljIHZvaWQgc2V0RG9jdW1lbnQoRG9jdW1lbnQgX2RvYykgeworICAgICAgICB0aGlzLl9kb2MgPSBfZG9jOworICAgIH0KKyAgICAvKioKKyAgICAgKiBVdGlsaXR5IG1ldGhvZCB0byBDcmVhdGUgYW4gZWxlbWVudCB0aGF0IGhhcyAKKyAgICAgKiBhIG5hbWUgYW5kIHZhbHVlIG9ubHkuIAorICAgICAqIDxwcmU+CisgICAgICogVGhlcmUgaXMgcHJvYmFibHkgYSBiZXR0ZXIgd2F5IHRvIGRvIHRoaXMgYnV0IC4uLgorICAgICAqICAKKyAgICAgKiAgIAorICAgICAqICAgCisgICAgICogKiBAcGFyYW0gZG9jIERvY3VtZW50CisgICAgICogQHBhcmFtIHRhZyAgeG1sIHRhZworICAgICAqIEBwYXJhbSB2YWx1ZSAgc3RyaW5nIHZhbHVlIG9mIHRhZworICAgICAqIEByZXR1cm4gWE1MIGVsZW1lbnQKKyAgICAgKi8KKyAgICAKKyAgICBwdWJsaWMgc3RhdGljIEVsZW1lbnQgY3JlYXRlQXR0cihEb2N1bWVudCBkb2MsU3RyaW5nIHRhZyxTdHJpbmcgdmFsdWUpIHsKKyAgICAgICAKKyAgICAgICAgRWxlbWVudCBubSA9IGRvYy5jcmVhdGVFbGVtZW50KHRhZyk7CisgICAgICAgIFRleHQgdCA9IGRvYy5jcmVhdGVUZXh0Tm9kZSh2YWx1ZSk7CisgICAgICAgIG5tLmFwcGVuZENoaWxkKHQpOyAgICAgICAgCisgICAgICAgIHJldHVybiBubTsKKyAgICB9CisgICAgLyoqCisgICAgICogVXRpbGl0eSBtZXRob2QgdG8gQ3JlYXRlIGFuIGVsZW1lbnQgdGhhdCBoYXMgCisgICAgICogYSBuYW1lIGFuZCBDRGF0YSB2YWx1ZSBvbmx5LiAKKyAgICAgKiA8cHJlPgorICAgICAqIFRoZXJlIGlzIHByb2JhYmx5IGEgYmV0dGVyIHdheSB0byBkbyB0aGlzIGJ1dCAuLi4KKyAgICAgKiAgCisgICAgICogICAKKyAgICAgKiAgIAorICAgICAqICogQHBhcmFtIGRvYyBEb2N1bWVudAorICAgICAqIEBwYXJhbSB0YWcgIHhtbCB0YWcKKyAgICAgKiBAcGFyYW0gdmFsdWUgIHN0cmluZyB2YWx1ZSBvZiB0YWcKKyAgICAgKiBAcmV0dXJuIFhNTCBlbGVtZW50CisgICAgICovCisgICAgCisgICAgcHVibGljIHN0YXRpYyBFbGVtZW50IGNyZWF0ZUNEYXRhQXR0cihEb2N1bWVudCBkb2MsU3RyaW5nIHRhZyxTdHJpbmcgdmFsdWUpIHsKKyAgICAgICAKKyAgICAgICAgRWxlbWVudCBubSA9IGRvYy5jcmVhdGVFbGVtZW50KHRhZyk7CisgICAgICAgIFRleHQgdCA9IGRvYy5jcmVhdGVDREFUQVNlY3Rpb24odmFsdWUpOworICAgICAgICBubS5hcHBlbmRDaGlsZCh0KTsgICAgICAgIAorICAgICAgICByZXR1cm4gbm07CisgICAgfQorICAgIC8qKgorICAgICAqIFV0aWxpdHkgbWV0aG9kIHRvIGFwcGVuZCBhbiBlbGVtZW50IHRoYXQgaGFzIAorICAgICAqIG5vIHZhbHVlcy4gCisgICAgICogPHByZT4gICAgIAorICAgICAqICBDcmVhdGVzIGFuIFhNTCB0YWcgYW5kCisgICAgICogIHBsYWNlcyBpdCBpbiB0aGUgZG9jdW1lbnQgYXMgYSBjaGlsZCBvZiB0aGUgCisgICAgICogIHNwZWNpZmllZCBlbGVtZW50LgorICAgICAqICAKKyAgICAgKiAgIENyZWF0ZXMgPHRhZz52YWx1ZTwvdGFnPiAKKyAgICAgKiA8L3ByZT4KKyAgICAgKiAKKyAgICAgKiAKKyAgICAgKiBAcGFyYW0gZWxlbWVudCBleGlzdGluZyBlbGVtZW50IHdoZXJlIG5ldyB0YWcgaXMgdG8gZ28KKyAgICAgKiBAcGFyYW0gdGFnIFhNTCB0YWcKKyAgICAgKiAKKyAgICAgKiBAcmV0dXJuIFhNTCBlbGVtZW50CisgICAgICovCisgICAgIAorICAgIHB1YmxpYyBFbGVtZW50IGFwcGVuZEVsZW1lbnQoRWxlbWVudCBlbGVtZW50LFN0cmluZyB0YWcpIHsKKyAgICAgICAgCisgICAgICAgIEVsZW1lbnQgbmV3dGFnID0gX2RvYy5jcmVhdGVFbGVtZW50KHRhZyk7ICAgICAgIAorICAgICAgICBlbGVtZW50LmFwcGVuZENoaWxkKG5ld3RhZyk7CisgICAgICAgIHJldHVybiBuZXd0YWc7CisgICAgfQorICAgIAorICAgIC8qKgorICAgICAqIFV0aWxpdHkgbWV0aG9kIHRvIENyZWF0ZSBhbiBlbGVtZW50IHRoYXQgaGFzIAorICAgICAqIGEgbmFtZSBhbmQgVGV4dCB2YWx1ZSBvbmx5LiAKKyAgICAgKiA8cHJlPiAgICAgCisgICAgICogIENyZWF0ZXMgYW4gWE1MIHRhZyB3aXRoIGEgdGV4dCB2YWx1ZSAgYW5kCisgICAgICogIHBsYWNlcyBpdCBpbiB0aGUgZG9jdW1lbnQgYXMgYSBjaGlsZCBvZiB0aGUgCisgICAgICogIHNwZWNpZmllZCBlbGVtZW50LgorICAgICAqICAgQ3JlYXRlcyA8dGFnPnZhbHVlPC90YWc+IAorICAgICAqIDwvcHJlPgorICAgICAqIAorICAgICAqIAorICAgICAqIEBwYXJhbSBlbGVtZW50IGV4aXN0aW5nIGVsZW1lbnQgd2hlcmUgbmV3IHRhZyBpcyB0byBnbworICAgICAqIEBwYXJhbSB0YWcgWE1MIHRhZworICAgICAqIEBwYXJhbSB2YWx1ZSB2YWx1ZSBvZiB0YWcKKyAgICAgKiBAcmV0dXJuIFhNTCBlbGVtZW50CisgICAgICovCisgICAgIAorICAgIHB1YmxpYyBFbGVtZW50IGFwcGVuZFRleHQoRWxlbWVudCBlbGVtZW50LFN0cmluZyB0YWcsU3RyaW5nIHZhbHVlKSB7CisgICAgICAgIC8vIGlmIG9idmlvdXMgWE1MIHRhZyB0aGVuIHRyZWF0IGl0IHNwZWNpYWwKKyAgICAgICAgaWYgKHZhbHVlLmluZGV4T2YoIjwiKT49MCB8fCAKKyAgICAgICAgICAgIHZhbHVlLmluZGV4T2YoIj4iKT49MCApIHsKKyAgICAgICAgICAgIHJldHVybiBhcHBlbmRDREFUQShlbGVtZW50LHRhZyx2YWx1ZSk7CisgICAgICAgIH0KKyAgICAgICAgRWxlbWVudCBubSA9IF9kb2MuY3JlYXRlRWxlbWVudCh0YWcpOworICAgICAgICBUZXh0IHQgPSBfZG9jLmNyZWF0ZVRleHROb2RlKHZhbHVlKTsKKyAgICAgICAgbm0uYXBwZW5kQ2hpbGQodCk7ICAgICAgICAKKyAgICAgICAgZWxlbWVudC5hcHBlbmRDaGlsZChubSk7CisgICAgICAgIHJldHVybiBubTsKKyAgICB9CisgICAgCisgICAgLyoqCisgICAgICogVXRpbGl0eSBtZXRob2QgdG8gYXBwZW5kIGFuIGVsZW1lbnQgdGhhdCBoYXMgCisgICAgICogYSBuYW1lIGFuZCBDRGF0YSB2YWx1ZSBvbmx5LiAKKyAgICAgKiA8cHJlPgorICAgICAqIAorICAgICAqICAKKyAgICAgKiAgIDx0YWc+dmFsdWUgb2YgdGFnIHdpdGggIGh0bWwgaW4gaXQ8L3RhZz4KKyAgICAgKiA8L3ByZT4KKyAgICAgKiAKKyAgICAgKiAKKyAgICAgKiBAcGFyYW0gZWxlbWVudCBleGlzdGluZyBlbGVtZW50IHdoZXJlIG5ldyB0YWcgaXMgdG8gZ28KKyAgICAgKiBAcGFyYW0gdGFnIFhNTCB0YWcKKyAgICAgKiBAcGFyYW0gdmFsdWUgdmFsdWUgb2YgdGFnCisgICAgICogQHJldHVybiBYTUwgZWxlbWVudAorICAgICAqLworICAgIHB1YmxpYyBFbGVtZW50IGFwcGVuZENEQVRBKEVsZW1lbnQgZWxlbWVudCxTdHJpbmcgdGFnLFN0cmluZyB2YWx1ZSkgeworICAgICAgIAorICAgICAgICBFbGVtZW50IG5tID0gX2RvYy5jcmVhdGVFbGVtZW50KHRhZyk7CisgICAgICAgIENEQVRBU2VjdGlvbiBjZGF0YSA9IF9kb2MuY3JlYXRlQ0RBVEFTZWN0aW9uKHZhbHVlKTsKKyAgICAgICAgbm0uYXBwZW5kQ2hpbGQoY2RhdGEpOyAgICAgICAgCisgICAgICAgIGVsZW1lbnQuYXBwZW5kQ2hpbGQobm0pOworICAgICAgICByZXR1cm4gbm07CisgICAgfQorICAgIAorICAgIC8qKgorICAgICAqIFV0aWxpdHkgbWV0aG9kIHRvIENyZWF0ZSBhbiBlbGVtZW50IHRoYXQgaGFzIAorICAgICAqIGEgbmFtZSBhbmQgYm9vbGVhbiB2YWx1ZSBvbmx5LiAKKyAgICAgKiA8cHJlPiAKKyAgICAgKiAgPHRhZz4xPC90YWc+IG9yIDx0YWc+MDwvdGFnPgorICAgICAqICAgCisgICAgICogPC9wcmU+CisgICAgICogCisgICAgICogQHBhcmFtIGRvYyByb290IGRvY3VtZW50CisgICAgICogQHBhcmFtIGVsZW1lbnQgZXhpc3RpbmcgZWxlbWVudCB3aGVyZSBuZXcgdGFnIGlzIHRvIGdvCisgICAgICogQHBhcmFtIHRhZyBYTUwgdGFnCisgICAgICogQHBhcmFtIHZhbHVlIHRydWUgb3IgZmFsc2UKKyAgICAgKiBAcmV0dXJuIFhNTCBlbGVtZW50CisgICAgICovCisgICAgCisgICAgcHVibGljIEVsZW1lbnQgYXBwZW5kQXR0cihFbGVtZW50IGVsZW1lbnQsU3RyaW5nIHRhZyxib29sZWFuIHZhbHVlKSB7CisgICAgICAgCisgICAgICAgIEVsZW1lbnQgbm0gPSBfZG9jLmNyZWF0ZUVsZW1lbnQodGFnKTsKKyAgICAgICAgU3RyaW5nIHN0clZhbHVlID0gKHZhbHVlKT8gIjEiIDogIjAiOworICAgICAgICAgCisgICAgICAgIFRleHQgdCA9IF9kb2MuY3JlYXRlVGV4dE5vZGUoc3RyVmFsdWUpOworICAgICAgICBubS5hcHBlbmRDaGlsZCh0KTsgICAgICAgIAorICAgICAgICBlbGVtZW50LmFwcGVuZENoaWxkKG5tKTsKKyAgICAgICAgcmV0dXJuIG5tOworICAgIH0KKyAgICAvKioKKyAgICAgKiBtYWluIGNsYXNzIHVzZWQgZm9yIGRlYnVnCisgICAgICogQHBhcmFtIGFyZ3MKKyAgICAgKi8KKyAgICAKKyAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CisgICAgICAgS21sRG9jIGttbCA9IG5ldyBLbWxEb2MoKTsKKyAgICAgICBEb2N1bWVudCBkb2MgPSBrbWwuZ2V0RG9jdW1lbnQoKTsKKyAgICAgICBFbGVtZW50IHJvb3QgPSBrbWwuc2V0Um9vdChudWxsKTsKKyAgICAgICBFbGVtZW50IGZvbGRlckEgPSBkb2MuY3JlYXRlRWxlbWVudCgiRm9sZGVyIik7CisgICAgICAgcm9vdC5hcHBlbmRDaGlsZChmb2xkZXJBKTsKKyAgICAgICBFbGVtZW50IGZvbGRlckExID0gZG9jLmNyZWF0ZUVsZW1lbnQoIkZvbGRlciIpOworICAgICAgIGZvbGRlckEuYXBwZW5kQ2hpbGQoZm9sZGVyQTEpOworICAgICAgIFBsYWNlTWFyayBwbGFjZU1hcmsgPSBuZXcgUGxhY2VNYXJrKGRvYyk7CisgICAgICAgZm9sZGVyQTEuYXBwZW5kQ2hpbGQocGxhY2VNYXJrLmdldEVsZW1lbnQoKSk7CisgICAgICAgLy9wbGFjZU1hcmsuc2V0RGVzY3JpcHRpb24oIkhvbWViYXNlIik7CisgICAgICAga21sLmFwcGVuZFRleHQocGxhY2VNYXJrLmdldEVsZW1lbnQoKSwiZGVzY3JpcHRpb24iLAorICAgICAgICAgICAgICAgIkhvbWUgYXQ8YnI+MTE5IFRoaXJkIik7CisgICAgICAgcGxhY2VNYXJrLnNldE5hbWUoIkhvbWUiKTsKKyAgICAgICAKKyAgICAgICBMb29rQXQgbG9va2F0ID0gbmV3IExvb2tBdChkb2MpOworICAgICAgIGxvb2thdC5zZXRDb29yZGluYXRlcygtMTIyLjAwNTksMzYuOTYzOSk7CisgICAgICAgbG9va2F0LnNldFJhbmdlKDMwNS44ODgwNzkyMjk0NTY4KTsKKyAgICAgICBsb29rYXQuc2V0VGlsdCg0Ni43MjQyNTY5OTY2MjY0NSk7CisgICAgICAgbG9va2F0LnNldEhlYWRpbmcoNDkuMDYxMzM0MzkxNzEyMzMpOworICAgICAgIHBsYWNlTWFyay5hcHBlbmRDaGlsZChsb29rYXQuZ2V0RWxlbWVudCgpKTsKKyAgICAgICAKKyAgICAgICAvL3BsYWNlTWFyay5zZXRWaXNpYmlsaXR5KCIwIik7CisgICAgICAga21sLmFwcGVuZEF0dHIocGxhY2VNYXJrLmdldEVsZW1lbnQoKSwidmlzaWJpbGl0eSIsZmFsc2UpOworICAgICAgIFBvaW50IHBvaW50ID0gbmV3IFBvaW50KGRvYyk7CisgICAgICAgcG9pbnQuc2V0Q29vcmRpbmF0ZXMoLTEyMi4wMDU5LDM2Ljk2MzkpOworICAgICAgIHBsYWNlTWFyay5hcHBlbmRDaGlsZChwb2ludC5nZXRFbGVtZW50KCkpOworICAgICAgIAorICAgICAgIEVsZW1lbnQgZm9sZGVyQTIgPSBkb2MuY3JlYXRlRWxlbWVudCgiRm9sZGVyIik7CisgICAgICAgZm9sZGVyQS5hcHBlbmRDaGlsZChmb2xkZXJBMik7CisgICAgICAgCisgICAgICAgUG9seWdvbiBwb2x5Z29uID0gbmV3IFBvbHlnb24oZG9jKTsKKyAgICAgICBDb29yZGluYXRlc1tdIGNvcm5lcnMgPSBuZXcgQ29vcmRpbmF0ZXNbNF07CisgICAgICAgY29ybmVyc1swXSA9IG5ldyBDb29yZGluYXRlcygtMTIyLjAwNTksMzYuOTYzOSk7CisgICAgICAgY29ybmVyc1sxXSA9IG5ldyBDb29yZGluYXRlcygtMTIyLjAwNDksMzYuOTYzOSk7CisgICAgICAgY29ybmVyc1syXSA9IG5ldyBDb29yZGluYXRlcygtMTIyLjAwNDksMzYuOTkpOworICAgICAgIGNvcm5lcnNbMl0gPSBuZXcgQ29vcmRpbmF0ZXMoLTEyMi4wMDU5LDM2Ljk2MzkpOworICAgICAgIHBvbHlnb24uc2V0Q29vcmRpbmF0ZXMoY29ybmVycyk7CisgICAgICAgZm9sZGVyQTIuYXBwZW5kQ2hpbGQocG9seWdvbi5nZXRFbGVtZW50KCkpOworICAgICAgIAorICAgICAgIEVsZW1lbnQgZm9sZGVyQTMgPSBkb2MuY3JlYXRlRWxlbWVudCgiRm9sZGVyIik7CisgICAgICAgZm9sZGVyQS5hcHBlbmRDaGlsZChmb2xkZXJBMyk7CisgICAgICAgCisgICAgICAgTmV0d29ya0xpbmsgbmV0TGluayA9IG5ldyBOZXR3b3JrTGluayhkb2MpOworICAgICAgIFN0cmluZyB1cmxmaWxlID0gImM6L3RtcC90ZXN0LmttbCI7CisgICAgICAgaW50IGludGVydmFsID0gNjsKKyAgICAgICBuZXRMaW5rLnNldFVybCh1cmxmaWxlLCBpbnRlcnZhbCxudWxsKTsKKyAgICAgICBmb2xkZXJBMy5hcHBlbmRDaGlsZChuZXRMaW5rLmdldEVsZW1lbnQoKSk7CisgICAgICAgCisgICAgICAga21sLmRpc3BsYXkoKTsKKyAgICAgICBrbWwud3JpdGVGaWxlKCJ0ZXN0MS5rbWwiKTsKKyAgICB9CisgICAgCit9CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkuZ2Uvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvZ2Uva21sL0xvb2tBdC5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLmdlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL2dlL2ttbC9Mb29rQXQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNDQ2NDczCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLmdlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL2dlL2ttbC9Mb29rQXQuamF2YQpAQCAtMCwwICsxLDEyMCBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnVpLmdlLmttbDsKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLyAKK2ltcG9ydCBvcmcudzNjLmRvbS5Eb2N1bWVudDsKK2ltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OworCisvKioKKyAqIEJ1aWxkIHRoZSBMb29rQXQgc2VjdGlvbiBvZiBhIEtNTCBkb2N1bWVudC4KKyAqIDxwcmU+CisgKiAgICAKKyAqIDwvcHJlPgorICogCisgKgorICovCisvKiAgICAKKzxMb29rQXQ+Cis8bG9uZ2l0dWRlPi0xMjIuMDg1NjM3NTM1NjYzMTwvbG9uZ2l0dWRlPgorPGxhdGl0dWRlPjM3LjQyMjQwNTUxMjI3MjgyPC9sYXRpdHVkZT4KKzxyYW5nZT4zMDUuODg4MDc5MjI5NDU2ODwvcmFuZ2U+Cis8dGlsdD40Ni43MjQyNTY5OTY2MjY0NTwvdGlsdD4KKzxoZWFkaW5nPjQ5LjA2MTMzNDM5MTcxMjMzPC9oZWFkaW5nPgorPC9Mb29rQXQ+CisKKyovICAgCitwdWJsaWMgY2xhc3MgTG9va0F0IHsKKyAgIAorICAgIHByaXZhdGUgRWxlbWVudCBfbG9va2F0ID0gbnVsbDsKKyAgICAKKyAgICBwcml2YXRlIERvY3VtZW50IF9kb2MgPSBudWxsOworICAgIC8qKgorICAgICAqIExvb2tBdCBjb25zdHJ1Y3RvcgorICAgICAqIAorICAgICAqIEBwYXJhbSBkb2MgRG9jdW1lbnQgYmVpbmcgYnVpbHQKKyAgICAgKi8KKyAgICBwdWJsaWMgTG9va0F0KERvY3VtZW50IGRvYykgeworICAgICAgICBfZG9jID0gZG9jOworICAgICAgICBfbG9va2F0ID0gX2RvYy5jcmVhdGVFbGVtZW50KCJMb29rQXQiKTsKKyAgICAgICAgICAKKyAgICAgICAgCisgICAgfQorICAgIAorICAgIC8qKgorICAgICAqIEByZXR1cm4gTG9va0F0IEVsZW1lbnQgCisgICAgICovCisgICAgcHVibGljIEVsZW1lbnQgZ2V0RWxlbWVudCgpIHsKKyAgICAgICAgcmV0dXJuIF9sb29rYXQ7CisgICAgfQorCisgICAgLyoqCisgICAgICogQWRkIGNvb3JkaW5hdGVzIHRvIHRoZSBMb29rQXQgc2VjdGlvbgorICAgICAqIEBwYXJhbSBsb25naXR1ZGUKKyAgICAgKiBAcGFyYW0gbGF0aXR1ZGUgCisgICAgICovCisgICAgcHVibGljIHZvaWQgc2V0Q29vcmRpbmF0ZXMoZG91YmxlIGxvbmdpdHVkZSwKKyAgICAgICAgICAgIGRvdWJsZSBsYXRpdHVkZSkgeworICAgICAgICAgICAKKyAgICAgICAgRWxlbWVudCBlID0gS21sRG9jLmNyZWF0ZUF0dHIoX2RvYywibG9uZ2l0dWRlIixEb3VibGUudG9TdHJpbmcobG9uZ2l0dWRlKSk7ICAgICAgICAgICAgIAorICAgICAgICBfbG9va2F0LmFwcGVuZENoaWxkKGUpOworICAgICAgICBlID0gS21sRG9jLmNyZWF0ZUF0dHIoX2RvYywibGF0aXR1ZGUiLERvdWJsZS50b1N0cmluZyhsYXRpdHVkZSkpOyAgICAgICAgICAgICAKKyAgICAgICAgX2xvb2thdC5hcHBlbmRDaGlsZChlKTsKKworICAgIH0KKyAgICAvKioKKyAgICAgKiBBZGQgYSBhdHRyaWJ1dGVzIHRvIHRoZSBMb29rQXQgc2VjdGlvbgorICAgICAqIEBwYXJhbSBjb29yZHMgYXMgImxvbmdpdHVkZSxsYXRpdHVkZSxhbHRpdHVkZSIKKyAgICAgKiAgCisgICAgICovCisgICAgcHVibGljIHZvaWQgc2V0Q29vcmRpbmF0ZXMoU3RyaW5nIGNvb3JkcykgeworICAgICAgICBpbnQgaTEgPSBjb29yZHMuaW5kZXhPZigiLCIpOworICAgICAgICBpbnQgaTIgPSBjb29yZHMubGFzdEluZGV4T2YoIiwiKTsKKyAgICAgICAgU3RyaW5nIGxvbmdpdHVkZSA9IGNvb3Jkcy5zdWJzdHJpbmcoMCxpMSk7CisgICAgICAgIFN0cmluZyBsYXRpdHVkZSA9IGNvb3Jkcy5zdWJzdHJpbmcoaTErMSxpMik7ICAgCisgICAgICAgIEVsZW1lbnQgZSA9IEttbERvYy5jcmVhdGVBdHRyKF9kb2MsImxvbmdpdHVkZSIsbG9uZ2l0dWRlKTsgICAgICAgICAgICAgCisgICAgICAgIF9sb29rYXQuYXBwZW5kQ2hpbGQoZSk7CisgICAgICAgIGUgPSBLbWxEb2MuY3JlYXRlQXR0cihfZG9jLCJsYXRpdHVkZSIsbGF0aXR1ZGUpOyAgICAgICAgICAgICAKKyAgICAgICAgX2xvb2thdC5hcHBlbmRDaGlsZChlKTsKKworICAgIH0KKyAgICAvKioKKyAgICAgKiBBZGQgYSBhdHRyaWJ1dGVzIHRvIHRoZSBMb29rQXQgc2VjdGlvbgorICAgICAqIEBwYXJhbSByYW5nZSAgQWx0aXR1ZGUgb2YgdGhlIGV5ZQorICAgICAqLworICAgIHB1YmxpYyB2b2lkIHNldFJhbmdlKGRvdWJsZSByYW5nZSkgeworICAgICAgICAgICAKKyAgICAgICAgRWxlbWVudCBlID0gS21sRG9jLmNyZWF0ZUF0dHIoX2RvYywicmFuZ2UiLERvdWJsZS50b1N0cmluZyhyYW5nZSkpOyAgICAgICAgICAgICAKKyAgICAgICAgX2xvb2thdC5hcHBlbmRDaGlsZChlKTsKKworICAgIH0KKyAgICAKKyAgICAvKioKKyAgICAgKiBBZGQgYSBhdHRyaWJ1dGVzIHRvIHRoZSBMb29rQXQgc2VjdGlvbgorICAgICAqIEBwYXJhbSB0aWx0CisgICAgICovCisgICAgcHVibGljIHZvaWQgc2V0VGlsdChkb3VibGUgdGlsdCkgeworICAgICAgICAgICAKKyAgICAgICAgRWxlbWVudCBlID0gS21sRG9jLmNyZWF0ZUF0dHIoX2RvYywidGlsdCIsRG91YmxlLnRvU3RyaW5nKHRpbHQpKTsgICAgICAgICAgICAgCisgICAgICAgIF9sb29rYXQuYXBwZW5kQ2hpbGQoZSk7CisKKyAgICB9IAorICAgIAorICAgIC8qKgorICAgICAqIEFkZCBhIGF0dHJpYnV0ZXMgdG8gdGhlIExvb2tBdCBzZWN0aW9uCisgICAgICogQHBhcmFtIGhlYWRpbmcKKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBzZXRIZWFkaW5nKGRvdWJsZSBoZWFkaW5nKSB7CisgICAgICAgICAgIAorICAgICAgICBFbGVtZW50IGUgPSBLbWxEb2MuY3JlYXRlQXR0cihfZG9jLCJoZWFkaW5nIixEb3VibGUudG9TdHJpbmcoaGVhZGluZykpOyAgICAgICAgICAgICAKKyAgICAgICAgX2xvb2thdC5hcHBlbmRDaGlsZChlKTsKKyAgICB9CisKKyAgICAKK30gLy8gZW5kIGNsYXNzCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkuZ2Uvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvZ2Uva21sL05ldHdvcmtMaW5rLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkuZ2Uvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvZ2Uva21sL05ldHdvcmtMaW5rLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmUzMjIxZgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5nZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9nZS9rbWwvTmV0d29ya0xpbmsuamF2YQpAQCAtMCwwICsxLDk1IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0udWkuZ2Uua21sOworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovIAoraW1wb3J0IG9yZy53M2MuZG9tLkRvY3VtZW50OworaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7CisKKy8qKgorICogQnVpbGQgdGhlIE5ldHdvcmtMaW5rIHNlY3Rpb24gb2YgYSBLTUwgZG9jdW1lbnQuCisgKiA8cHJlPgorICogICAgCisgKiA8L3ByZT4KKyAqIAorICoKKyAqLworLyogICAgCis8TmV0d29ya0xpbms+CisgIDxuYW1lPk5ldHdvcmtMaW5rIDwvbmFtZT4KKyA8Zmx5VG9WaWV3PjE8L2ZseVRvVmlldz4gCisgIDxVcmw+CisgICAgIDxocmVmPkU6L3RtcC90ZXN0MS5rbWw8L2hyZWY+ICAKKyAgICAgPHJlZnJlc2hJbnRlcnZhbD4xMDwvcmVmcmVzaEludGVydmFsPiAgIAorICAgICA8cmVmcmVzaE1vZGU+b25JbnRlcnZhbDwvcmVmcmVzaE1vZGU+ICAgICAgICAgIAorICA8L1VybD4KKzwvTmV0d29ya0xpbms+CisqLyAgIAorcHVibGljIGNsYXNzIE5ldHdvcmtMaW5rIHsKKyAgIAorICAgIHByaXZhdGUgRWxlbWVudCBfbmV0d29ya0xpbmsgPSBudWxsOworICAgIAorICAgIAorICAgIAorICAgIHByaXZhdGUgRG9jdW1lbnQgX2RvYyA9IG51bGw7CisgICAgLyoqCisgICAgICogTmV0d29ya0xpbmsgY29uc3RydWN0b3IKKyAgICAgKiAKKyAgICAgKiBAcGFyYW0gZG9jIERvY3VtZW50CisgICAgICovCisgICAgcHVibGljIE5ldHdvcmtMaW5rKERvY3VtZW50IGRvYykgeworICAgICAgICBfZG9jID0gZG9jOworICAgICAgICBfbmV0d29ya0xpbmsgPSBfZG9jLmNyZWF0ZUVsZW1lbnQoIk5ldHdvcmtMaW5rIik7ICAgICAgICAgIAorICAgICAgICAKKyAgICB9CisgICAgCisgICAgLyoqCisgICAgICogQHJldHVybiAgRWxlbWVudCAKKyAgICAgKi8KKyAgICBwdWJsaWMgRWxlbWVudCBnZXRFbGVtZW50KCkgeworICAgICAgICByZXR1cm4gX25ldHdvcmtMaW5rOworICAgIH0KKworICAgIC8qKgorICAgICAqIEFkZCBhbiBVcmwgd2l0aCBocmVmIGF0dHJpYnV0ZQorICAgICAqIAorICAgICAqIDxwcmU+CisgICAgICogTm90ZTogVGhlIHVybCBjYW4gaGF2ZSBvbmUgb2YgdGhlIHRoZSBmb3JtczoKKyAgICAgKiAgIGh0dHA6Ly9ub2RlOnBvcnQvYWRkcmVzcworICAgICAqICAgYzovcGF0aC9maWxlLmttbAorICAgICAqICAKKyAgICAgKiBUaGUgdmFsaWQgVVJMIG9mICJmaWxlOi8vL2M6L3BhdGgvZmlsZS5rbWwgCisgICAgICogZG9lcyBub3Qgd29yayB3aXRoIEdvb2dsZUVhcnRoIE5ldHdvcmtMaW5rLiAgIAorICAgICAqIDwvcHJlPgorICAgICAqIEBwYXJhbSB1cmwgVVJMIHRvIGJlIGRvd25sb2FkZWQKKyAgICAgKiBAcGFyYW0gaW50ZXJ2YWwgc2Vjb25kcyBiZXR3ZWVuIHJlZnJlc2gKKyAgICAgKiBAcGFyYW0gbW9kZSAKKyAgICAgKiBAcGFyYW0gcmVmcmVzaCBtb2RlIAorICAgICAqICAgICAgICAgSWYgbnVsbCB0aGVuICJvbkludGVydmFsIgorICAgICAqIEByZXR1cm4gWE1MIGVsZW1lbnQKKyAgICAgKi8KKyAgICBwdWJsaWMgRWxlbWVudCBzZXRVcmwoU3RyaW5nIHVybCxpbnQgaW50ZXJ2YWwsU3RyaW5nIG1vZGUpIHsKKyAgICAJRWxlbWVudCBsaW5rID0gbnVsbDsKKyAgICAgICAgbGluayA9IF9kb2MuY3JlYXRlRWxlbWVudCgiTGluayIpOyAgICAgICAgICAgICAKKyAgICAgICAgX25ldHdvcmtMaW5rLmFwcGVuZENoaWxkKGxpbmspOyAgIAorICAgICAgICBFbGVtZW50IGUgPSBLbWxEb2MuY3JlYXRlQXR0cihfZG9jLCJocmVmIix1cmwpOyAgICAgICAgICAgICAKKyAgICAgICAgbGluay5hcHBlbmRDaGlsZChlKTsKKyAgICAgICAgZSA9IEttbERvYy5jcmVhdGVBdHRyKF9kb2MsInJlZnJlc2hJbnRlcnZhbCIsSW50ZWdlci50b1N0cmluZyhpbnRlcnZhbCkpOyAgICAgICAgICAgICAKKyAgICAgICAgbGluay5hcHBlbmRDaGlsZChlKTsKKyAgICAgICAgZSA9IEttbERvYy5jcmVhdGVBdHRyKF9kb2MsInJlZnJlc2hNb2RlIixtb2RlKTsgICAgICAgICAgICAgCisgICAgICAgIGxpbmsuYXBwZW5kQ2hpbGQoZSk7CisgICAgICAgIGUgPSBLbWxEb2MuY3JlYXRlQXR0cihfZG9jLCJ2aWV3UmVmcmVzaE1vZGUiLCJvblN0b3AiKTsgICAgICAgICAgICAgCisgICAgICAgIGxpbmsuYXBwZW5kQ2hpbGQoZSk7CisgICAgICAgIGUgPSBLbWxEb2MuY3JlYXRlQXR0cihfZG9jLCJ2aWV3UmVmcmVzaFRpbWUiLCIyIik7ICAgICAgICAgICAgIAorICAgICAgICBsaW5rLmFwcGVuZENoaWxkKGUpOworICAgICAgICByZXR1cm4gbGluazsKKyAgICB9CisgICAKKyAgICAKK30gLy8gZW5kIGNsYXNzCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkuZ2Uvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvZ2Uva21sL1BsYWNlTWFyay5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLmdlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL2dlL2ttbC9QbGFjZU1hcmsuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNTAxOTIxCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLmdlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL2dlL2ttbC9QbGFjZU1hcmsuamF2YQpAQCAtMCwwICsxLDk0IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0udWkuZ2Uua21sOworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovIAoraW1wb3J0IG9yZy53M2MuZG9tLkRvY3VtZW50OworaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7CitpbXBvcnQgb3JnLnczYy5kb20uVGV4dDsKKworLyoqCisgKiBCdWlsZCB0aGUgUGxhY2VNYXJrIHNlY3Rpb24gb2YgYSBLTUwgZG9jdW1lbnQuCisgKi8KK3B1YmxpYyBjbGFzcyBQbGFjZU1hcmsgeworICAgCisgICAgcHJpdmF0ZSBFbGVtZW50IF9wbGFjZW1hcmsgPSBudWxsOworICAgIAorICAgIHByaXZhdGUgRG9jdW1lbnQgX2RvYyA9IG51bGw7CisgICAgLyoqCisgICAgICogUGxhY2VNYXJrIGNvbnN0cnVjdG9yCisgICAgICogQHBhcmFtIGRvYyAKKyAgICAgKi8KKyAgICBwdWJsaWMgUGxhY2VNYXJrKERvY3VtZW50IGRvYykgeworICAgICAgICBfZG9jID0gZG9jOworICAgICAgICBfcGxhY2VtYXJrID0gX2RvYy5jcmVhdGVFbGVtZW50KCJQbGFjZW1hcmsiKTsKKyAgICAgICAKKyAgICAgICAgCisgICAgfQorICAgIAorICAgIC8qKgorICAgICAqIEByZXR1cm4gUGxhY2VNYXJrIEVsZW1lbnQgCisgICAgICovCisgICAgcHVibGljIEVsZW1lbnQgZ2V0RWxlbWVudCgpIHsKKyAgICAgICAgcmV0dXJuIF9wbGFjZW1hcms7CisgICAgfQorICAgIAorICAgIC8qKgorICAgICAqIEFkZCBhIGRlc2NyaXB0aW9uIHRhZyB0byB0aGUgUGxhY2VNYXJrCisgICAgICogQHBhcmFtIGRlc2NyaXB0aW9uCisgICAgICovCisgICAgcHVibGljIHZvaWQgc2V0RGVzY3JpcHRpb24oU3RyaW5nIGRlc2NyaXB0aW9uKSB7CisgICAgICAgCisgICAgICAgIEVsZW1lbnQgZGVzYyA9IF9kb2MuY3JlYXRlRWxlbWVudCgiZGVzY3JpcHRpb24iKTsKKyAgICAgICAgVGV4dCB0ID0gX2RvYy5jcmVhdGVUZXh0Tm9kZShkZXNjcmlwdGlvbik7CisgICAgICAgIGRlc2MuYXBwZW5kQ2hpbGQodCk7ICAgICAgICAKKyAgICAgICAgX3BsYWNlbWFyay5hcHBlbmRDaGlsZChkZXNjKTsKKyAgICB9CisgICAgCisgICAgLyoqCisgICAgICogQWRkIGEgZGVzY3JpcHRpb24gdGFnIHRvIHRoZSBQbGFjZU1hcmsKKyAgICAgKiBAcGFyYW0gbmFtZQorICAgICAqLworICAgIHB1YmxpYyB2b2lkIHNldE5hbWUoU3RyaW5nIG5hbWUpIHsKKyAgICAgICAKKyAgICAgICAgRWxlbWVudCBubSA9IF9kb2MuY3JlYXRlRWxlbWVudCgibmFtZSIpOworICAgICAgICBUZXh0IHQgPSBfZG9jLmNyZWF0ZVRleHROb2RlKG5hbWUpOworICAgICAgICBubS5hcHBlbmRDaGlsZCh0KTsgICAgICAgIAorICAgICAgICBfcGxhY2VtYXJrLmFwcGVuZENoaWxkKG5tKTsKKyAgICB9CisgICAgCisgICAgLyoqCisgICAgICogQWRkIGEgdmlzaWJpbGl0eSB0YWcgdG8gdGhlIFBsYWNlTWFyaworICAgICAqIEBwYXJhbSB2YWx1ZSAgIFVzdWFsbHkgIjAiCisgICAgICovCisgICAgcHVibGljIHZvaWQgc2V0VmlzaWJpbGl0eShTdHJpbmcgdmFsdWUpIHsKKyAgICAgICAgCisgICAgICAgIEVsZW1lbnQgdiA9IEttbERvYy5jcmVhdGVBdHRyKF9kb2MsInZpc2liaWxpdHkiLCIwIik7ICAgICAKKyAgICAgICAgX3BsYWNlbWFyay5hcHBlbmRDaGlsZCh2KTsKKyAgICAgICAgICAKKyAgICB9CisgICAgCisgICAgLyoqCisgICAgICogQWRkIGEgc3R5bGVVcmwgcG9pbnRpbmcgdG8gYW4gZXhpc3RpbmcgU3R5bGUgCisgICAgICogQHBhcmFtIHN0eWxlIFN0eWxlIG9iamVjdAorICAgICAqLworICAgIHB1YmxpYyB2b2lkIHNldFN0eWxlVXJsKFN0eWxlIHN0eWxlKSB7CisgICAgICAgU3RyaW5nIGlkID0gc3R5bGUuZ2V0SWQoKTsKKyAgICAgICBFbGVtZW50IHVybCA9IEttbERvYy5jcmVhdGVBdHRyKF9kb2MsInN0eWxlVXJsIiwiIyIraWQpOyAgICAgICAgICAgIAorICAgICAgIF9wbGFjZW1hcmsuYXBwZW5kQ2hpbGQodXJsKTsKKyAgICAgICAKKyAgICB9CisgICAgLyoqCisgICAgICogQWRkIGEgc2VjdGlvbiAoaS5lLiBMb29rQXQpIHRvIHRoZSBQbGFjZU1hcmsKKyAgICAgKiBAcGFyYW0gZWxlbWVudAorICAgICAqLworICAgIHB1YmxpYyB2b2lkIGFwcGVuZENoaWxkKEVsZW1lbnQgZWxlbWVudCkgeyAgICAgICAgICAgIAorICAgICAgICBfcGxhY2VtYXJrLmFwcGVuZENoaWxkKGVsZW1lbnQpOworICAgIH0KK30gLy8gZW5kIGNsYXNzCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkuZ2Uvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvZ2Uva21sL1BvaW50LmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkuZ2Uvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvZ2Uva21sL1BvaW50LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDRmNTVhNQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5nZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9nZS9rbWwvUG9pbnQuamF2YQpAQCAtMCwwICsxLDkwIEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0udWkuZ2Uua21sOworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovIAoraW1wb3J0IG9yZy53M2MuZG9tLkRvY3VtZW50OworaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7CisKKy8qKgorICogQnVpbGQgdGhlIHBvaW50IHNlY3Rpb24gb2YgYSBLTUwgZG9jdW1lbnQuCisgKi8KKyAgCisgIAorLyoKKzxQb2ludD4gICAgCisgICAgPGNvb3JkaW5hdGVzPi0xMjIuMDg1NjIwNDU0MTc4NiwzNy40MjI0NDAxNTMyMTY4OCw1MDwvY29vcmRpbmF0ZXM+CisgIDwvUG9pbnQ+CisKKyovICAgCitwdWJsaWMgY2xhc3MgUG9pbnQgeworICAgCisgICAgcHJpdmF0ZSBFbGVtZW50IF9wb2ludCA9IG51bGw7CisgICAgCisgICAgcHJpdmF0ZSBEb2N1bWVudCBfZG9jID0gbnVsbDsKKyAgICAvKioKKyAgICAgKiBQb2ludCBjb25zdHJ1Y3RvcgorICAgICAqIEBwYXJhbSBkb2MgCisgICAgICovCisgICAgcHVibGljIFBvaW50KERvY3VtZW50IGRvYykgeworICAgICAgICBfZG9jID0gZG9jOworICAgICAgICBfcG9pbnQgPSBfZG9jLmNyZWF0ZUVsZW1lbnQoIlBvaW50Iik7CisgICAgICAgICAgCisgICAgICAgIAorICAgIH0KKyAgICAKKyAgICAvKioKKyAgICAgKiBAcmV0dXJuIFBvaW50IEVsZW1lbnQgCisgICAgICovCisgICAgcHVibGljIEVsZW1lbnQgZ2V0RWxlbWVudCgpIHsKKyAgICAgICAgcmV0dXJuIF9wb2ludDsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBBZGQgY29vcmRpbmF0ZXMgdG8gdGhlIFBvaW50IHNlY3Rpb24KKyAgICAgKiAgICAgIAorICAgICAqIEBwYXJhbSBsb25naXR1ZGUKKyAgICAgKiBAcGFyYW0gbGF0aXR1ZGUKKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBzZXRDb29yZGluYXRlcyhkb3VibGUgbG9uZ2l0dWRlLGRvdWJsZSBsYXRpdHVkZSkgeworICAgICAgICBTdHJpbmcgY29vcmQgPSAgRG91YmxlLnRvU3RyaW5nKGxvbmdpdHVkZSkrIiwiKworICAgICAgICAgICAgICAgICAgICAgICAgRG91YmxlLnRvU3RyaW5nKGxhdGl0dWRlKTsKKyAgICAgICAgRWxlbWVudCBlID0gS21sRG9jLmNyZWF0ZUF0dHIoX2RvYywiY29vcmRpbmF0ZXMiLGNvb3JkKTsgICAgICAgICAgICAgCisgICAgICAgIF9wb2ludC5hcHBlbmRDaGlsZChlKTsKKyAgICAgICAKKyAgICB9CisgICAgLyoqCisgICAgICogQWRkIGNvb3JkaW5hdGVzIHRvIHRoZSBQb2ludCBzZWN0aW9uICh3aXRoIGFsdGl0dWRlKQorICAgICAqICAgICAgCisgICAgICogQHBhcmFtIGxvbmdpdHVkZQorICAgICAqIEBwYXJhbSBsYXRpdHVkZQorICAgICAqIEBwYXJhbSBhbHQKKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBzZXRDb29yZGluYXRlcyhkb3VibGUgbG9uZ2l0dWRlLGRvdWJsZSBsYXRpdHVkZSxpbnQgYWx0KSB7CisgICAgICAgIFN0cmluZyBjb29yZCA9ICBEb3VibGUudG9TdHJpbmcobG9uZ2l0dWRlKSsiLCIrCisgICAgICAgICAgICAgICAgICAgICAgICBEb3VibGUudG9TdHJpbmcobGF0aXR1ZGUpKyIsIitJbnRlZ2VyLnRvU3RyaW5nKGFsdCk7CisgICAgICAgIEVsZW1lbnQgZSA9IEttbERvYy5jcmVhdGVBdHRyKF9kb2MsImNvb3JkaW5hdGVzIixjb29yZCk7ICAgICAgICAgICAgIAorICAgICAgICBfcG9pbnQuYXBwZW5kQ2hpbGQoZSk7CisgICAgICAgCisgICAgfQorICAgIAorICAgIC8qKgorICAgICAqIEFkZCBjb29yZGluYXRlcyBhcyBhIFN0cmluZyB0byB0aGUgUG9pbnQgc2VjdGlvbiAKKyAgICAgKiAgICAgIAorICAgICAqIEBwYXJhbSBjb29yZCBMYXRMb25nIGNvb3JkaW5hdGVzCisgICAgICogCisgICAgICovCisgICAgcHVibGljIHZvaWQgc2V0Q29vcmRpbmF0ZXMoU3RyaW5nIGNvb3JkKSB7CisgICAgICAgCisgICAgICAgIEVsZW1lbnQgZSA9IEttbERvYy5jcmVhdGVBdHRyKF9kb2MsImNvb3JkaW5hdGVzIixjb29yZCk7ICAgICAgICAgICAgIAorICAgICAgICBfcG9pbnQuYXBwZW5kQ2hpbGQoZSk7CisgICAgICAgCisgICAgfQorICAgIAorfSAvLyBlbmQgY2xhc3MKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5nZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9nZS9rbWwvUG9seWdvbi5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLmdlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL2dlL2ttbC9Qb2x5Z29uLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTIwYTZiNwotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5nZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9nZS9rbWwvUG9seWdvbi5qYXZhCkBAIC0wLDAgKzEsMTEzIEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0udWkuZ2Uua21sOworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovIAoraW1wb3J0IG9yZy53M2MuZG9tLkRvY3VtZW50OworaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7CisKKy8qCisgKiA8UG9seWdvbj4KKyAqIAorICogICA8b3V0ZXJCb3VuZGFyeUlzPgorICogCisgKiAgICAgPExpbmVhclJpbmc+CisgKiAKKyAqICAgICAgICA8Y29vcmRpbmF0ZXM+CisgKiAKKyAqIC04OC4zMDY1MzQsIDMwLjIyNzg1MiwgMC4wMDAwMDAKKyAqIAorICogLi4uCisgKiAKKyAqIDg4LjMwNjUzNCwgMzAuMjI3ODUyLCAwLjAwMDAwMAorICogCisgKiAgICAgICAgPC9jb29yZGluYXRlcz4KKyAqIAorICogICAgPC9MaW5lYXJSaW5nPgorICogCisgKiAgIDwvb3V0ZXJCb3VuZGFyeUlzPgorICogCisgKiA8L1BvbHlnb24+CisgKiAKKyAqLyAgIAorLyoqCisgKiBCdWlsZCB0aGUgUG9seWdvbiBzZWN0aW9uIG9mIGEgS01MIGRvY3VtZW50LgorICovCisgIAorICAKKworCitwdWJsaWMgY2xhc3MgUG9seWdvbiB7CisgICAKKyAgICBwcml2YXRlIEVsZW1lbnQgX3BvbHlnb24gPSBudWxsOworICAgIAorICAgIHByaXZhdGUgRWxlbWVudCBfb3V0ZXJCb3VuZGFyeUlzID0gbnVsbDsKKyAgICAKKyAgICAKKyAgICBwcml2YXRlIERvY3VtZW50IF9kb2MgPSBudWxsOworICAgIC8qKgorICAgICAqIFBvbHlnb24gY29uc3RydWN0b3IKKyAgICAgKiBAcGFyYW0gZG9jIAorICAgICAqLworICAgIHB1YmxpYyBQb2x5Z29uKERvY3VtZW50IGRvYykgeworICAgICAgICBfZG9jID0gZG9jOworICAgICAgICBfcG9seWdvbiA9IF9kb2MuY3JlYXRlRWxlbWVudCgiUG9seWdvbiIpOyAgICAgICAgICAKKyAgICAgICAgCisgICAgfQorICAgIAorICAgIC8qKgorICAgICAqIEByZXR1cm4gUG9seWdvbiBFbGVtZW50IAorICAgICAqLworICAgIHB1YmxpYyBFbGVtZW50IGdldEVsZW1lbnQoKSB7CisgICAgICAgIHJldHVybiBfcG9seWdvbjsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBBZGQgY29vcmRpbmF0ZXMgdG8gdGhlIFBvbHlnb24gc2VjdGlvbi4KKyAgICAgKiAKKyAgICAgKiBUaGlzIGlzIGEgc2hvcnRjdXQgZm9yIGNyZWF0aW5nIGEgTGluZWFyUmluZyAKKyAgICAgKiBpbnNpZGUgb2YgYW4gb3V0ZXJCb3VuZGFyeUlzLgorICAgICAqICAgICAgCisgICAgICogQHBhcmFtIGNvcm5lcnMgIGNvb3JkaW5hdGVzIG9mIHRoZSBjb3JuZXJzIAorICAgICAqICAgIGZvciB0aGUgb3V0ZXJSaW5nIAorICAgICAqIEByZXR1cm4geG1sIGVsZW1lbnQKKyAgICAgKiAKKyAgICAgKi8KKyAgICBwdWJsaWMgRWxlbWVudCBzZXRDb29yZGluYXRlcyhDb29yZGluYXRlc1tdIGNvcm5lcnMpIHsKKyAgICAgICAgCisgICAgICAgIFN0cmluZyBjb29yZHMgPSBDb29yZGluYXRlcy50b1N0cmluZyhjb3JuZXJzKTsKKyAgICAgICAgCisgICAgICAgIHJldHVybiBzZXRDb29yZGluYXRlcyhjb29yZHMpOworICAgIH0KKyAgICAKKyAgICAvKioKKyAgICAgKiBBZGQgY29vcmRpbmF0ZXMgdG8gdGhlIFBvbHlnb24gc2VjdGlvbi4KKyAgICAgKiAKKyAgICAgKiBUaGlzIGlzIGEgc2hvcnRjdXQgZm9yIGNyZWF0aW5nIGEgTGluZWFyUmluZyAKKyAgICAgKiBpbnNpZGUgb2YgYW4gb3V0ZXJCb3VuZGFyeUlzLgorICAgICAqICAgICAgCisgICAgICogQHBhcmFtIGNvb3JkcyAgY29vcmRpbmF0ZXMgb2YgdGhlIGNvcm5lcnMgCisgICAgICogICAgZm9yIHRoZSBvdXRlclJpbmcgCisgICAgICogQHJldHVybiB4bWwgZWxlbWVudAorICAgICAqIAorICAgICAqLworICAgIHB1YmxpYyBFbGVtZW50IHNldENvb3JkaW5hdGVzKFN0cmluZyBjb29yZHMpIHsgICAgICAgIAorICAgICAgICAKKyAgICAgICAgRWxlbWVudCBlID0gS21sRG9jLmNyZWF0ZUF0dHIoX2RvYywiY29vcmRpbmF0ZXMiLGNvb3Jkcyk7CisgICAgICAgIEVsZW1lbnQgbGluZWFyUmluZyA9IF9kb2MuY3JlYXRlRWxlbWVudCgiTGluZWFyUmluZyIpOyAgICAgICAgCisgICAgICAgIGxpbmVhclJpbmcuYXBwZW5kQ2hpbGQoZSk7CisgICAgICAgIF9vdXRlckJvdW5kYXJ5SXMgPSBfZG9jLmNyZWF0ZUVsZW1lbnQoIm91dGVyQm91bmRhcnlJcyIpOworICAgICAgICBfb3V0ZXJCb3VuZGFyeUlzLmFwcGVuZENoaWxkKGxpbmVhclJpbmcpOworICAgICAgICBfcG9seWdvbi5hcHBlbmRDaGlsZChfb3V0ZXJCb3VuZGFyeUlzKTsKKyAgICAgICAgcmV0dXJuIF9vdXRlckJvdW5kYXJ5SXM7CisgICAgfQorICAgIAorCisgICAgCit9IC8vIGVuZCBjbGFzcwpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLmdlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL2dlL2ttbC9TdGVtS21sLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkuZ2Uvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvZ2Uva21sL1N0ZW1LbWwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZGU5YTdjCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLmdlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL2dlL2ttbC9TdGVtS21sLmphdmEKQEAgLTAsMCArMSw2MzAgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS51aS5nZS5rbWw7CisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8gCisKK2ltcG9ydCBqYXZhLmlvLkZpbGU7CitpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLnV0aWwuRGF0ZTsKK2ltcG9ydCBqYXZhLnV0aWwuTWFwOworCitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkNvcmVFeGNlcHRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBhdGg7CitpbXBvcnQgb3JnLmVjbGlwc2UuaGVscC5pbnRlcm5hbC5hcHBzZXJ2ZXIuV2ViYXBwTWFuYWdlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnVpLmdlLkFjdGl2YXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnVpLmdlLkFzcGVjdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnVpLmdlLkdFRGF0YTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnVpLmdlLkdFTG9nOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udWkuZ2Uuc2VydmxldC5WZXJpZnlDbGllbnQ7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS51aS5nZS52aWV3cy5HRVByZWZlcmVuY2VQYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5wcm9ncmFtLlByb2dyYW07CitpbXBvcnQgb3JnLnczYy5kb20uRE9NRXhjZXB0aW9uOworaW1wb3J0IG9yZy53M2MuZG9tLkRvY3VtZW50OworaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7CisKKworCisKKy8qKgorICogU3RlbUtNTCB3b3JrcyB3aXRoIEdFSW50ZXJmYWNlIHRvIGhhbmRsZSB0aGUgCisgKiBLTUwgc2lkZSBvZiB0aGUgaW50ZXJmYWNlIGJldHdlZW4gU1RFTSBhbmQgR29vZ2xlRWFydGguCisgKiBSZWZlciB0byBHRUludGVyZmFjZSBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KKyAqIDxwcmU+CisgKiAgICAgCisgKiAgCisgKiAgLSBQb2x5Z29uTWFwICBNYXA8U3RyaW5nLEdFRGF0YT4gCisgKiAgICAgICBNYXAgb2YgaW5mbyB0byBnZW5lcmF0ZSBhIHNldCBvZiBQb2x5Z29ucworICogICAgICAgVGhlIGtleSBpcyB0aGUgYXJlYSAKKyAqICAgICAgIAorICogIC0gYXNwZWN0ICAgU0VJUiB2YWx1ZQorICogIC0gY3ljbGUgICAgTnRoIHRpbWUgaW50ZXJ2YWwKKyAqICAKKyAqIAorICogRHVyaW5nIG9wZXJhdGlvbiwgd2hlbiBhcHByb3ByaWF0ZSBUaGUgImNvbnRyb2x4eHh4LmttbCIgZmlsZSAKKyAqIHdpbGwgYmUgcmV3cml0ZW4gd2l0aCBuZXcgaW5zdHJ1Y3Rpb25zLgorICogU3RlbVZpZXcgd2lsbCBjYWxsIGdlbmVyYXRlUG9seWdvbnMoKSB0byBnZW5lcmF0ZSBhIGNvbnRyb2wgZmlsZQorICogdGhhdCB3aWxsIGRpc3BsYXkgYWxsIG9mIHRoZSBjb3VudHkvYXJlYXMgb2YgdGhlIG1hcCB3aXRoIHRoZSAKKyAqIGFwcHJvcHJpYXRlIGNvbG9yIGZpbGwgdG8gbWF0Y2ggdGhlIGNvcnJlc3BvbmRpbmcgU3RlbSBtYXAuCisgKiAKKyAqIFdoZW4gdGhlIHVzZXIgc2VsZWN0cyBhIHNwZWNpZmljIGNvdW50eS9hcmVhIG9uIHRoZSBtYXAsCisgKiB0aGVuIFN0ZW1WaWV3IHdpbGwgY2FsbCB0aGUgZ2VuZXJhdGVQb2x5Z29uIG1ldGhvZC4KKyAqIAorICoKKyAqLworQFN1cHByZXNzV2FybmluZ3MoInJlc3RyaWN0aW9uIikKK3B1YmxpYyBjbGFzcyBTdGVtS21sIHsKKwkvKioKKyAgICAgKiBTZXJ2bGV0IGNvbnRleHQuICAKKyAgICAgKiAKKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBDT05URVhUID0gIlNURU0iOworICAgICAgIAorICAgIC8qKgorICAgICAqIElmIGludGVybmFsIHdlYiBzZXJ2ZXIgc3RhcnRlZCB0aGVuIHRoaXMgaXMgc2V0IHRydWUKKyAgICAgKi8KKyAgICBwcml2YXRlIHN0YXRpYyBib29sZWFuIF9zdGFydGVkID0gZmFsc2U7CisgICAgLyoqIAorICAgICAqIElmIGludGVybmFsIHNlcnZlciBmYWlscyB0byBzdGFydCB0aGVuIHRoaXMgaXMgc2V0IHRydWUKKyAgICAgKi8KKyAgICBwcml2YXRlIHN0YXRpYyBib29sZWFuIF9mYWlsZWQgPSBmYWxzZTsKKyAgICAKKyAgICAvKioKKyAgICAgKiBVUkwgZm9yIGVpdGhlciB0aGUgZW1iZWRlZCB3ZWIgc2VydmVyIG9yIAorICAgICAqIGFuIGFzc2lnbmVkIHdlYiBzZXJ2ZXIuICAKKyAgICAgKiBJZiB0aGlzIHdlYnNlcnZlciB3YXMgaW5vcGVyYXRpdmUgdGhlbiB0aGlzCisgICAgICogaXMgbnVsbC4KKyAgICAgKi8KKyAgICBwcml2YXRlIHN0YXRpYyBTdHJpbmcgX2Jhc2V1cmwgPSBudWxsOworICAgIC8qKgorICAgICAqIFN5c3RlbSB0ZW1wIGRpcmVjdG9yeS4gCisgICAgICogY2FsY3VsYXRlZCBvbmNlIGFuZCBzYXZlZAorICAgICAqLworICAgIHByaXZhdGUgc3RhdGljIFN0cmluZyB0bXBGb2xkZXIgPSBudWxsOworICAgIC8qKgorICAgICAqIE51bWJlciBvZiBpbnRlbnNpdGllcyBvZiBjb2xvcgorICAgICAqLworICAgIHN0YXRpYyBmaW5hbCBpbnQgTUFYID0gNTsKKyAgICBzdGF0aWMgZmluYWwgaW50IE1JTiA9IDA7CisgICAgCisgICAgLyoqCisgICAgICogICB1bmlxdWUgaWQgdXNlZCBmb3Igc2VydmxldCBjb21tdW5pY2F0aW9uCisgICAgICovCisgICAgc3RhdGljIFN0cmluZyBzZXJ2bGV0SWQgPSBudWxsOworICAgIC8qKgorICAgICAqIEZpbGVOYW1lIGZvciBLTUwgY29udHJvbCBmaWxlLgorICAgICAqLworICAgIHN0YXRpYyBmaW5hbCBTdHJpbmcgQ09OVFJPTF9GTiA9ICJjb250cm9sLmttbCI7CisgICAgLyoqCisgICAgICogRmlsZU5hbWUgZm9yIEtNTCBjb250cm9sIGZpbGUgdXNlZCB0byBkaXNwbGF5CisgICAgICogYSBuYW1lZCBhZG1pbiBhcmVhLgorICAgICAqLworICAgIHN0YXRpYyBmaW5hbCBTdHJpbmcgRElTUExBWUFSRUFfRk4gPSAiZGlzcGxheWFyZWEua21sIjsKKyAgICAvKioKKyAgICAgKiBpZiB0cnVlIHRoZW4gc2VydmxldCB3aWxsIHdhaXQgd2hlbiAKKyAgICAgKiBzZW5kaW5nIGZpbGVzIHRvIEdFIGFuZCBpdCBoYXMgcnVuIAorICAgICAqIG91dCBvZiBmaWxlcyB0byBzZW5kLiAgCisgICAgICogCisgICAgICovCisgICAgcHJpdmF0ZSBzdGF0aWMgYm9vbGVhbiB3YWl0Rm9yS01MID0gdHJ1ZTsKKyAgICAKKyAgICAvKioKKyAgICAgKiBJbnRlcnZhbCBpbiBzZWNvbmRzIGJldHdlZW4gcmVxdWVzdHMKKyAgICAgKiBmb3IgcmVmcmVzaC4gIEZpbGxlZCBpbnRvIHRoZSAKKyAgICAgKiBOZXR3b3JrTGluayByZXF1ZXN0LgorICAgICAqLworCXN0YXRpYyBpbnQgaW50ZXJ2YWwgPSAyOworICAgIAorCS8qKgorCSAqIEluZGljYXRlIGlmIEtNTCBpcyBhIHZhbGlkIGZpbGV0eXBlLgorCSAqIElmIG5vdCB0aGVuIEdvb2dsZUVhcnRoIGhhcyBwcm9iYWJseSAKKwkgKiBub3QgYmVlbiBpbnN0YWxsZWQgYW5kIHdlIGNhbm5vdCAKKwkgKiBzaW1wbHkgbGF1bmNoIGEgLmttbCBmaWxlLgorCSAqLworCXN0YXRpYyBib29sZWFuIHZhbGlkS01MID0gdHJ1ZTsKKwkvKioKKwkgKiBpbXBsZW1lbnRhdGlvbiBvZiBJS21sRGlzcGxheSB0aGF0IHdpbGwgY3JlYXRlIGFuZCB3cml0ZQorCSAqIHRoZSBLTUwgZmlsZSB0aGF0IGlzIHNlbnQgdG8gR29vZ2xlRWFydGguCisJICovCisJcHJpdmF0ZSBJS21sRGlzcGxheSBkaXNwbGF5ID0gbnVsbDsKKwkKKworICAgIC8qKgorICAgICAqIENvbnN0cnVjdG9yICAKKyAgICAgKgorICAgICAqLworICAgIHB1YmxpYyBTdGVtS21sKCkgeworICAgIAkKKyAgICAJCisgICAgICAgdHJ5IHsKKwkJICAgU3RyaW5nIGttbERpc3BsYXlDbGFzcyA9IEFzcGVjdC5nZXRLbWxEaXNwbGF5Q2xhc3MoKTsKKworCQkgICBkaXNwbGF5ID0gKElLbWxEaXNwbGF5KUNsYXNzLmZvck5hbWUoa21sRGlzcGxheUNsYXNzKS5uZXdJbnN0YW5jZSgpOworCSAgIH0gY2F0Y2ggKFRocm93YWJsZSB0KSB7CQkKKwkJICAgR0VMb2cuZXJyb3IoIkZhaWxlZCB0byBjcmVhdGUgaW5zdGFuY2UgZm9yIEttbERpc3BsYXkiLCB0KTsKKwkgICB9CisJCSAgCQorICAgICAgCisgICAgfQorICAgICAgICAKKyAgICAvKioKKyAgICAgKiBpbml0aWFsaXphdGlvbgorICAgICAqIAorICAgICAqIGN1cnJlbnRseSB3ZSBoYXZlIG5vdGhpbmcgdG8gZG8KKyAgICAgKiAKKyAgICAgKiAKKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBpbml0KCkgeworICAgIAkgICAgICAgIAorICAgIH0KKworICAgIC8qKgorICAgICAqIFZlcmlmeSB0aGF0IEdvb2dsZUVhcnRoIGlzIGluc3RhbGxlZCBieSAKKyAgICAgKiBjaGVja2luZyB0aGF0IHRoZSBLTUwgZmlsZXR5cGUgaXMga25vd24uCisgICAgICogCisgICAgICogQHJldHVybiB0cnVlIGlmIHRoZSBLTUwgZmlsZSB0eXBlIGlzIGtub3duLgorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgYm9vbGVhbiB2ZXJpZnlHRSgpIHsKKyAgICAJCisgICAgCVN0cmluZyBleHRlbnNpb24gPSAiLmttbCI7CisgICAgCVByb2dyYW0gcCA9IFByb2dyYW0uZmluZFByb2dyYW0oZXh0ZW5zaW9uKTsKKyAgICAJaWYgKHAgIT0gbnVsbCkgeworICAgIAkJR0VMb2cuZGVidWcoIlN0ZW1LbWwudmVyaWZ5R0UiLCJLTUwgaGFuZGxlcjogIitwLmdldE5hbWUoKSk7CisgICAgCQkgICAJCQkKKyAgICAJfSBlbHNlIHsKKyAgICAJCXZhbGlkS01MID0gZmFsc2U7CisgICAgCX0KKyAgICAJCisgICAgCXJldHVybiB2YWxpZEtNTDsKKyAgICAJCisgICAgfQorCS8qKgorCSAqIAorICAgICAqIENyZWF0ZSBhIEdvb2dsZUVhcnRoIGVtcHR5IGNvbnRyb2wgZmlsZXMgYW5kIGxhdW5jaCBpdCAKKyAgICAgKiBzbyB0aGF0IGdvb2dsZUVhcnRoIHN0YXJ0cyB1cC4KKyAgICAgKgorCSAqIEB0aHJvd3MgRE9NRXhjZXB0aW9uCisJICovCisJcHVibGljIHN0YXRpYyB2b2lkIGxhdW5jaEdFKCkgdGhyb3dzIERPTUV4Y2VwdGlvbiB7CisJCQorCQl0cnkgeworCQkJCisJCQlTdHJpbmcgZm4gPSBnZXRDb250cm9sRmlsZSgpOworCQkJCisJCQorCQkJLy8gd3JpdGUgYW4gZW1wdHkgY29udHJvbCBmaWxlIHNvIHRoYXQgCisJCQkvLyB0byBiZWdpbiB3aXRoLCBub3RoaW5nIGhhcHBlbnMgYnV0IAorCQkJLy8gR29vZ2xlRWFydGggZ2V0cyBhIGhlYWRzdGFydCBvbiBpbml0aWFsaXphdGlvbgorCQkJCisJCQlLbWxEb2Mga21sID0gbmV3IEttbERvYygpOworCQkJa21sLnNldFJvb3QobnVsbCk7CisJCQlrbWwuZ2V0RG9jdW1lbnQoKTsKKwkJCWttbC53cml0ZUZpbGUoZm4pOworCQkJR0VMb2cuZGVidWcoIlN0ZW1LbWwubGF1bmNoR0UiLGZuKTsKKwkJCS8vIGxhdW5jaCB0aGUgZmlsZQorCQkJLy8gCisJCQlsYXVuY2goZm4pOworCQkJVGhyZWFkLnNsZWVwKDEqMTAwMCk7CisJCX0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CisJCQlTdHJpbmcgbXNnID0gIkVycm9yIGxhdW5jaGluZyBpbml0aWFsIEdvb2dsZUVhcnRoIGNvbnRyb2wgZmlsZS4iOworCQkJR0VMb2cuZXJyb3IobXNnLGUpOworCQl9CisJfQorCQorCQorCS8qKgorCSAqIEdlbmVyYXRlIHRoZSBuYW1lIHVzZWQgZm9yIEtNTCBDb250cm9sLgorCSAqIAorCSAqIEByZXR1cm4gRnVsbHkgcXVhbGlmaWVkIGZpbGVuYW1lIChlLmcuIGM6L3RtcC9jb250cm9sLmttbCkKKwkgKi8KKwlwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRDb250cm9sRmlsZSgpIHsJCisJCVN0cmluZyBmbiA9IG51bGw7CisJCWlmICh0bXBGb2xkZXIgPT0gbnVsbCkgeworCQkJdG1wRm9sZGVyID0gZ2V0VG1wRm9sZGVyKCk7CisJCX0KKwkJaWYgKHRtcEZvbGRlciA9PSBudWxsKSB7CisJCQlHRUxvZy5lcnJvcigiVW5hYmxlIHRvIGdlbmVyYXRlIEtNTCBDb250cm9sIGZpbGUuIixudWxsKTsKKwkJfSBlbHNlIHsKKwkJCisJCSAgICBmbiA9IHRtcEZvbGRlcitGaWxlLnNlcGFyYXRvcitDT05UUk9MX0ZOOworCQl9CisJCQorCQlyZXR1cm4gZm47CisJfQorCS8qKgorCSAqIG9idGFpbiB0aGUgc3lzdGVtIHRlbXBvcmFyeSBmb2xkZXIuCisJICogCisJICogQHJldHVybiBGdWxseSBxdWFsaWZpZWQgcGF0aCAoZS5nLiBjOi90bXAgb3IgL3RtcCkKKwkgKi8KKwlwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRUbXBGb2xkZXIoKSB7CQorCQlTdHJpbmcgdG1wID0gbnVsbDsKKwkJU3RyaW5nIHNsYXNoID0gRmlsZS5zZXBhcmF0b3I7CQkKKwkJdHJ5IHsKKwkJCUZpbGUgdG1wRmlsZSA9IEZpbGUuY3JlYXRlVGVtcEZpbGUoImNvbnRyb2wiLCIua21sIixudWxsKTsKKwkJCXRtcCA9IHRtcEZpbGUuZ2V0UGFyZW50KCk7CisJCQl0bXBGaWxlLmRlbGV0ZSgpOwkJCisJCQkKKwkJfSBjYXRjaCAoSU9FeGNlcHRpb24gZSkgewkJCQorCQkJR0VMb2cuZXJyb3IoIlN5c3RlbSBUZW1wb3JhcnkgRGlyZWN0b3J5IG5vdCBkZWZpbmVkOiAiLG51bGwpOworCQkJLy8gaWYgbm8gc3lzdGVtIHRlbXAgZm9sZGVyLCB1c2Ugb3VyIGxvZyBmb2xkZXIKKwkJCXRtcCA9IGdldExvZ0ZvbGRlcigpOworCQkJdG1wID0gdG1wK3NsYXNoKyJ0bXAiOworCQkJRmlsZSB0bXBGaWxlID0gbmV3IEZpbGUodG1wKTsKKwkJCXRtcEZpbGUubWtkaXJzKCk7CisJCQkKKwkJfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsJCQkKKwkJCUdFTG9nLmVycm9yKCJGYWlsdXJlIGdldHRpbmcgVE1QIGZvbGRlci4iLGUpOworCQkJCisJCX0KKwkJcmV0dXJuIHRtcDsKKwl9CisJLyoqCisJICogb2J0YWluIHRoZSB1c2VycyBwcmVmZXJlbmNlIGZvciB0aGUgZm9sZGVyCisJICogdXNlZCB0byBnZW5lcmF0ZSBLTUwgZmlsZXMuCisJICogCisJICogQHJldHVybiBGdWxseSBxdWFsaWZpZWQgcGF0aCAoZS5nLiBjOi90bXAgb3IgL3RtcCkKKwkgKi8KKwlwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRMb2dGb2xkZXIoKSB7CQorCQlTdHJpbmcgbG9nID0gbnVsbDsKKwkJCQkKKwkJdHJ5IHsKKwkJCWxvZyA9IEdFUHJlZmVyZW5jZVBhZ2UuZ2V0Rm9sZGVyKCk7CisJCQlGaWxlIGxvZ0ZvbGRlciA9IG5ldyBGaWxlKGxvZyk7CisJCQlpZiAobG9nRm9sZGVyLmV4aXN0cygpKSB7CisJCQkJaWYgKGxvZ0ZvbGRlci5pc0RpcmVjdG9yeSgpKSB7CisJCQkJCXJldHVybiBsb2c7CisJCQkJfSBlbHNlIHsKKwkJCQkJdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oIkxvZyBGb2xkZXIgIisKKwkJCQkJCQlsb2crICIgaXMgbm90IHZhbGlkIik7CisJCQkJfQorCQkJfSAgZWxzZSB7CisJCQkJYm9vbGVhbiBvayA9IGxvZ0ZvbGRlci5ta2RpcnMoKTsKKwkJCQlpZiAob2spCisJCQkJCXJldHVybiBsb2c7IAorCQkJCWVsc2UgCisJCQkJCXRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCJMb2cgRm9sZGVyICIrCisJCQkJCQkJbG9nKyAiIGNhbm5vdCBiZSBjcmVhdGVkICIpOworCQkJfQorCQkJCisJCQkKKwkJfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsJCQkKKwkJCUdFTG9nLmVycm9yKCJGYWlsZWQgdG8gZ2V0IExPRyBmb2xkZXI6ICIrbG9nLGUpOworCQkJbG9nID0gbnVsbDsKKwkJfSAKKwkJcmV0dXJuIGxvZzsKKwl9CisJLyoqCisJICogR2VuZXJhdGUgdGhlIG5hbWUgdXNlZCBmb3IgS01MIHdoZW4gdXNpbmcKKwkgKiB0aGUgRGlzcGxheUFyZWEgdXRpbGl0eSBmdW5jdGlvbgorCSAqIAorCSAqIEByZXR1cm4gRnVsbHkgcXVhbGlmaWVkIGZpbGVuYW1lIChlLmcuIGM6L3RtcC9jb250cm9sLmttbCkKKwkgKi8KKwlwdWJsaWMgc3RhdGljIFN0cmluZyBnZXREaXNwbGF5QXJlYUZpbGUoKSB7CQorCQlTdHJpbmcgZm4gPSBudWxsOworCQl0cnkgeworCQkJaWYgKHRtcEZvbGRlciA9PSBudWxsKSB7CisJCQkJRmlsZSB0bXBGaWxlID0gRmlsZS5jcmVhdGVUZW1wRmlsZSgiZGlzcGxheWFyZWEiLCIua21sIik7CisJCQkJdG1wRm9sZGVyID0gdG1wRmlsZS5nZXRQYXJlbnQoKTsKKwkJCQl0bXBGaWxlLmRlbGV0ZSgpOworCQkJfQorCQkJZm4gPSB0bXBGb2xkZXIrIi8iK0RJU1BMQVlBUkVBX0ZOOworCQl9IGNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7CQkJCisJCQlHRUxvZy5lcnJvcigiVW5hYmxlIHRvIGdlbmVyYXRlIEtNTCBEaXNwbGF5QXJlYSBmaWxlLiIsZSk7CisJCX0KKwkJcmV0dXJuIGZuOworCX0KKwkvKioKKwkgKiAgd3JpdGUgYW4gZW1wdHkgY29udHJvbCBmaWxlIHNvIHRoYXQgCisJICogIGl0IGNsZWFycyB0aGUgY3VycmVudCBkaXNwbGF5CisJICovCisJcHVibGljIHN0YXRpYyB2b2lkIGNsZWFyRGlzcGxheUFyZWEoKSB7CisJCVN0cmluZyBmbiA9IHRtcEZvbGRlcisiLyIrRElTUExBWUFSRUFfRk47CQorCQkKKwkJS21sRG9jIGttbCA9IG5ldyBLbWxEb2MoKTsKKwkJa21sLnNldFJvb3QobnVsbCk7CisJCWttbC5nZXREb2N1bWVudCgpOworCQlrbWwud3JpdGVGaWxlKGZuKTsKKwkJCisJCS8vIGxhdW5jaCB0aGUgZmlsZQorCQkvLyAKKwkJbGF1bmNoKGZuKTsKKwl9CisgICAgLyoqCisJICogY3JlYXRlIGFuZCBsYXVuY2ggYSBuZXR3b3JrIGxpbmsgZmlsZSB0aGF0IHdpbGwgcmVhZCB0aGUgCisJICoga21sIGZpbGVzIHRoYXQgd2Ugd2lsbCBiZSBnZW5lcmF0aW5nLgorICAgICAqCisgICAgICogQHBhcmFtIGZvbGRlciBGb2xkZXIgdGhhdCBjb250YWlucyBLTUwgZmlsZXMKKyAgICAgKiBAcGFyYW0gZmlsZSAgIElmIG5vdCBudWxsIHRoZW4gcGFzcyB0aGlzIG5hbWUgdG8gdGhlIHNlcnZsZXQuICAKKyAgICAgKiBAcmV0dXJuIFVSTCB1c2VkCisJICoKKwkgKi8KKwlwdWJsaWMgc3RhdGljIFN0cmluZyBsYXVuY2hOZXR3b3JrTGluaygJU3RyaW5nIGZvbGRlciwgU3RyaW5nIGZpbGUpIHsKKwkJCQkJCisJCVN0cmluZyB1cmwgPSBudWxsOworCQkvLyBjbGVhciBpZiBuZWVkZWQKKwkJU3RlbUttbC5sYXVuY2hHRSgpOworCisJCXRyeSB7CisJCQkKKwkJCVN0cmluZyBmbiA9IGdldENvbnRyb2xGaWxlKCk7CisJCQkKKwkJCWxvbmcgdGltZSA9IG5ldyBEYXRlKCkuZ2V0VGltZSgpOworCQkJc2VydmxldElkID0gTG9uZy50b0hleFN0cmluZyh0aW1lKTsKKwkJCVN0cmluZyB3YWl0ID0gIm4iOworCQkJaWYgKHdhaXRGb3JLTUwpIAorCQkJCXdhaXQgPSAieSI7CisgICAgICAgICAgICAKKwkJCXVybCA9IF9iYXNldXJsKworCQkJCSIvIitDT05URVhUKyIvc2xpZGVzaG93P2lkPSIrc2VydmxldElkKworCQkJCSImZm9sZGVyPSIrZm9sZGVyKworCQkJCSImd2FpdD0iK3dhaXQ7CisJCQlpZiAoZmlsZSAhPSBudWxsKSB7CisJCQkJdXJsID0gdXJsKyImZmlsZT0iK2ZpbGU7CisJCQl9CisJCQlHRUxvZy5kZWJ1ZyhTdGVtS21sLmNsYXNzLCJsYXVuY2hOZXR3b3JrTGluayB1cmw9Iit1cmwpOworCQkJCisJCQlTdGVtS21sLndyaXRlTmV0TGluayhmbiwgaW50ZXJ2YWwsIHVybCk7CisJCQkKKwkJCVN0cmluZyBiYm94dXJsID0gX2Jhc2V1cmwrCisJCQkgICAgICAgIi8iK0NPTlRFWFQrIi9iYm94P2lkPSIrc2VydmxldElkOworCQkJCisJCQkvLyBzdGFydCBUaHJlYWQgdG8gYWNjZXNzIEJCb3ggaW5mbyBmcm9tIEdFCisJCQlpZiAoR0VQcmVmZXJlbmNlUGFnZS5pc0JCT1goKSkgeworCQkJCUJCb3hJbmZvIGJib3ggPSBuZXcgQkJveEluZm8oYmJveHVybCxzZXJ2bGV0SWQpOworCQkJCVRocmVhZCB0ID0gKG5ldyBUaHJlYWQoYmJveCkpOworCQkJCXQuc3RhcnQoKTsKKwkJCX0KKwkJCXRyeSB7CisJCQkJUHJvZ3JhbS5sYXVuY2goZm4pOworCQkJCUdFTG9nLmRlYnVnKFN0ZW1LbWwuY2xhc3MsIkxhdW5jaGVkIG5ldHdvcmtMaW5rIGZpbGUgIitmbik7CisJCQkJVGhyZWFkLnNsZWVwKDUqMTAwMCk7CisJCQl9IGNhdGNoIChJbnRlcnJ1cHRlZEV4Y2VwdGlvbiBpZSkgeworCQkJfSBjYXRjaCAoVGhyb3dhYmxlIGUpIHsKKwkJCQlHRUxvZy5lcnJvcigiTGF1bmNoIGZhaWx1cmUiLCBlKTsKKwkJCX0KKwkJfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKKwkJCUdFTG9nLmVycm9yKCJGYWlsdXJlIGxhdW5jaGluZyBOZXR3b3JrTGluay5rbWwgZmlsZSIsZSk7CisJCQkKKwkJfQorCQlyZXR1cm4gdXJsOworICAgIH0KKwkvKioKKwkgKiAKKwkgKiBXcml0ZSB0aGUgbmV0d29yayBMaW5rIGZpbGUgdGhhdCB3aWxsIHRlbGwgR29vZ2xlRWFydGggaG93IAorCSAqIHRvIG1ha2UgY2FsbGJhY2tzIHRvIHRoZSBzZXJ2bGV0LgorCSAqIAorCSAqIEBwYXJhbSBmbiAgZm9sZGVyICsgZm4gdG8gd3JpdGUgIAorCSAqIEBwYXJhbSBpbnRlcnZhbCAgSG93IG9mdGVuIHRvIGNhbGwgYmFjayAoc2Vjb25kcykKKwkgKiBAcGFyYW0gdXJsICAgICBXaGVyZSB0byBjYWxsIGJhY2sgKyBwYXJtcworCSAqIEB0aHJvd3MgRE9NRXhjZXB0aW9uCisJICovCisJcHVibGljIHN0YXRpYyB2b2lkIHdyaXRlTmV0TGluayhTdHJpbmcgZm4sIGludCBpbnRlcnZhbCwgU3RyaW5nIHVybCkgCisJICB0aHJvd3MgRE9NRXhjZXB0aW9uIHsKKwkJS21sRG9jIGttbDsKKwkJLy8gd3JpdGUgYSBmaWxlIHVzaW5nIG5ldHdvcmtsaW5rIHRoYXQgdGVsbHMgCisJCS8vIGdvb2dsZSBlYXJ0aCB0byByZWFkIHRoZSBjb250cm9sIGZpbGUgCisJCS8vIGV2ZXJ5IE4gc2Vjb25kcyBhbmQgZG8gd2hhdGV2ZXIgaXQgc2F5cy4KKwkJa21sID0gbmV3IEttbERvYygpOyAgICAgICAgCisJCURvY3VtZW50IGRvYyA9IGttbC5nZXREb2N1bWVudCgpOworCQlFbGVtZW50IHJvb3QgPSBrbWwuc2V0Um9vdChudWxsKTsKKwkJTmV0d29ya0xpbmsgbmV0TGluayA9IG5ldyBOZXR3b3JrTGluayhkb2MpOyAgICAgICAgCisKKwkJU3RyaW5nIG1vZGUgPSAib25JbnRlcnZhbCI7CisJCW5ldExpbmsuc2V0VXJsKHVybCwgaW50ZXJ2YWwsbW9kZSk7CisJCS8vIGFkZCA8Zmx5VG9WaWV3PjE8L2ZseVRvVmlldz4gCisJCWttbC5hcHBlbmRBdHRyKG5ldExpbmsuZ2V0RWxlbWVudCgpLCJmbHlUb1ZpZXciLGZhbHNlKTsKKwkJcm9vdC5hcHBlbmRDaGlsZChuZXRMaW5rLmdldEVsZW1lbnQoKSk7CisKKwkJLy9rbWwuZGlzcGxheSgpOyAgLy8gZGVidWcKKwkJa21sLndyaXRlRmlsZShmbik7CisJfQorCQorCQorICAvKioKKyAgKiBDcmVhdGUgdGhlIEtNTCBjb250cm9sIGZpbGUgdG8gZGlzcGxheSBhbGwgb2YgdGhlIAorICAqIHBvbHlnb24gKGNvdW50eSkgYXJlYXMKKyAgKgorICAqIENhbGwgdGhlIGltcGxlbWVudGF0aW9uIG9mIElLbWxEaXNwbGF5IHRvIGNyZWF0ZSBhbmQgCisgICogd3JpdGUgdGhlIGttbCBmaWxlLgorICAqIAorICAqIEBwYXJhbSBjb250cm9sRmlsZU5hbWUgRmlsZSB3aGVyZSBLTUwgd2lsbCBiZSB3cml0dGVuIAorICAqIEBwYXJhbSBnZURhdGEgTWFwIG9mIEdFRGF0YSBvYmplY3RzIAorICAqIEBwYXJhbSBhc3BlY3QgIHdoaWNoIHR5cGUgb2YgbWFwIChwb3B1bGF0aW9uLHN1c2NlcHRpcGxlLi4uCisgICogQHBhcmFtIGN5Y2xlIGN1cnJlbnQgbnVtYmVyIG9mIGN5Y2xlIGJlaW5nIGRpc3BsYXllZAorICAqLworICAgIAorCXB1YmxpYyB2b2lkIGdlbmVyYXRlUG9seWdvbnMoU3RyaW5nIGNvbnRyb2xGaWxlTmFtZSwgCisJCQlNYXA8U3RyaW5nLEdFRGF0YT4gZ2VEYXRhLCBBc3BlY3QgYXNwZWN0LGxvbmcgY3ljbGUpIHsKKyAJCisJICAgIAorCSAgICBkaXNwbGF5LmdlbmVyYXRlUG9seWdvbnMoY29udHJvbEZpbGVOYW1lLCBnZURhdGEsIGFzcGVjdCk7CisJfQorCQkKKyAKKworICAgICAgCisKKyAgICAvKioKKwkgKiBnZXQgdGhlIEhleCB2YWx1ZSBjb3JyZXNwb25kaW5nIHRvIGFuIGludCB2YWx1ZS4gCisJICogVGhpcyBoYXMgbGVhZGluZyB6ZXJvcy4KKwkgKiAKKwkgKiBAcGFyYW0gdiAgICAgIHZhbHVlIHRvIHRyYW5zbGF0ZS4KKwkgKiBAcmV0dXJuIEhleCBTdHJpbmcKKwkgKi8KKwlwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRIZXgoaW50IHYpIHsKKwkJU3RyaW5nIGhleCA9IEludGVnZXIudG9IZXhTdHJpbmcodik7CisJCWlmICgoaGV4Lmxlbmd0aCgpICUgMikgIT0gMCkgeworCQkJaGV4ID0gIjAiICsgaGV4OworCQl9CisJCXJldHVybiBoZXg7CisJfQorCisvKioKKyAqIExhdW5jaCB0aGUgS01MIGZpbGUgdG8gR29vZ2xlRWFydGgKKyAqIAorICogQHBhcmFtIGNvbnRyb2xGaWxlTmFtZQorICogICAgICAgICAgICBhYnNvbHV0ZSBmaWxlIHBhdGggb3IgYSB1cmwKKyAqIAorICovCitwdWJsaWMgc3RhdGljIHZvaWQgbGF1bmNoKFN0cmluZyBjb250cm9sRmlsZU5hbWUpIHsKKwl0cnkgeworCQlpZiAoIXZhbGlkS01MKSB7CisJCQlHRUxvZy5kZWJ1ZygibGF1bmNoOiBLTUwgaXMgdW5rbm93biBmaWxldHlwZSIpOworCQkJcmV0dXJuOworCQl9CisJCUZpbGUgY29udHJvbEZpbGUgPSBuZXcgRmlsZShjb250cm9sRmlsZU5hbWUpOworCQkKKwkJCisJCVByb2dyYW0ubGF1bmNoKGNvbnRyb2xGaWxlLmdldEFic29sdXRlUGF0aCgpKTsKKwkJR0VMb2cuZGVidWcoIlN0ZW1LbWwubGF1bmNoIiwiTGF1bmNoZWQgZmlsZSAiK2NvbnRyb2xGaWxlTmFtZSk7CisJfSBjYXRjaCAoVGhyb3dhYmxlIGUpIHsKKwkJR0VMb2cuZXJyb3IoIlN0ZW1LbWw6IExhdW5jaCBmYWlsdXJlIiwgZSk7CisJfQorfQorCisvKiogCisgKiBTdGFydHVwIGFuZCB2ZXJpZnkgYSB3ZWIgc2VydmVyIHRvIHJ1biB0aGUgCisgKiBHRVNlcnZsZXQgc2VydmxldHMuCisgKiAKKyAqIElmIHNwZWNpZmllZCBpdCB3aWxsIHRyeSB0byBzdGFydCB0aGUgZW1iZWRkZWQgd2ViIHNlcnZlcgorICogSWYgbm90IG9yIGl0IGZhaWxlZCB0aGVuIGl0IHdpbGwgY2hlY2sgaWYgYW4gCisgKiBleHRlcm5hbCBzZXJ2ZXIgd2FzIHNwZWNpZmllZCBhbmQgdHJ5IHRvIGFjY2VzcyBpdC4KKyAqIAorICogQHJldHVybiB1cmwgZm9yIGhvc3QgYW5kIHBvcnQgCisgKiAgICAgICBleGFtcGxlOiBodHRwOi8vMTI3LjAuMC4xOjU0MzQ1LworICogICAgICAgSXQgd2lsbCByZXR1cm4gbnVsbCBpZiB1bmFibGUgdG8gc3RhcnQgc2VydmVyIG9yIAorICogICAgICAgaWYgc2VydmVyIGRvZXMgbm90IHN1cHBvcnQgb3VyIHNlcnZsZXRzCisgKi8JIAorcHVibGljIHN0YXRpYyBTdHJpbmcgaW5pdFdlYlNlcnZlcigpIHsKKwkKKwlpZiAoR0VQcmVmZXJlbmNlUGFnZS5pc0ludGVybmFsU2VydmVyKCkpewkJCisJCV9iYXNldXJsID0gc3RhcnRXZWJTZXJ2ZXIoKTsJCQorCX0KKwkKKwlpZiAoX2Jhc2V1cmwgPT0gbnVsbCApIHsKKwkJU3RyaW5nIGhvc3QgPUdFUHJlZmVyZW5jZVBhZ2UuZ2V0U2VydmVySG9zdCgpOworCQlpZiAoaG9zdCAhPSBudWxsICYmIGhvc3QubGVuZ3RoKCkgPiAwKQorCQkJX2Jhc2V1cmwgPSAiaHR0cDovLyIraG9zdDsKKwl9IAorCWlmIChfYmFzZXVybCAhPSBudWxsKSB7CisJCUdFTG9nLmRlYnVnKFN0ZW1LbWwuY2xhc3MsIlZlcmlmeUNsaWVudCAiK19iYXNldXJsKTsKKwkJLy8gdmVyaWZ5IHRoYXQgd2UgaGF2ZSBhIHdvcmtpbmcgd2ViIHNlcnZlcgorCQlWZXJpZnlDbGllbnQgdmMgPSBuZXcgVmVyaWZ5Q2xpZW50KCk7CisJCWJvb2xlYW4gdGVzdCA9IHZjLnZlcmlmeShfYmFzZXVybCsKKwkJCSAgICAgICAgICAgIAkiLyIrQ09OVEVYVCsiL3ZlcmlmeSIpOworCQlpZiAoISB0ZXN0KSB7CisJCQlHRUxvZy5pbmZvKHZjLmdldEVycm9yKCkpOworCQkJR0VMb2cuZXJyb3IoIlN0ZW1LbWw6IFVuYWJsZSB0byBjb21tdW5pY2F0ZSB3aXRoIHdlYiBzZXJ2ZXIgQCAiCisJCQkJCStfYmFzZXVybCxudWxsKTsKKwkJCWlmIChHRVByZWZlcmVuY2VQYWdlLmlzSW50ZXJuYWxTZXJ2ZXIoKSl7CisJCQkJX2ZhaWxlZCA9IHRydWU7CisJCQl9CisJCQlfYmFzZXVybCA9IG51bGw7CisJCX0gCisJfQorCWlmIChfYmFzZXVybCA9PSBudWxsKSB7CisJCUdFTG9nLmVycm9yKCJHb29nbGVFYXJ0aCBTZXJ2bGV0IHN1cHBvcnQgZGlzYWJsZWQiLG51bGwpOworCX0KKwlyZXR1cm4gX2Jhc2V1cmw7Cit9CisKKy8qKiAKKyAqIFN0YXJ0dXAgYW4gaW50ZXJuYWwgd2ViIHNlcnZlciB0byBydW4gdGhlIAorICogR0VTZXJ2bGV0IHNlcnZsZXRzLgorICogQHJldHVybiB1cmwgZm9yIGhvc3QgYW5kIHBvcnQgCisgKiAgICAgICBleGFtcGxlOiBodHRwOi8vMTI3LjAuMC4xOjU0MzQ1LworICogICAgICAgSXQgd2lsbCByZXR1cm4gbnVsbCBpZiB1bmFibGUgdG8gc3RhcnQgc2VydmVyCisgKi8JCitAU3VwcHJlc3NXYXJuaW5ncyh7ICJkZXByZWNhdGlvbiIgfSkgCitwdWJsaWMgc3RhdGljIFN0cmluZyBzdGFydFdlYlNlcnZlcigpIHsKKwlTdHJpbmcgdXJsID0gbnVsbDsKKwlpZiAoIV9zdGFydGVkICYmICFfZmFpbGVkKQkgIHsKKwkgICAgdHJ5IHsKKwkgICAgCUdFTG9nLmRlYnVnKFN0ZW1LbWwuY2xhc3MsIlN0YXJ0IHdlYlNlcnZlciIpOworCQkJV2ViYXBwTWFuYWdlci5zdGFydChDT05URVhULCBBY3RpdmF0b3IuUExVR0lOX0lELCBQYXRoLkVNUFRZKTsKKwkJCQorCQkJU3RyaW5nIGludGVybmFsSG9zdCA9IFdlYmFwcE1hbmFnZXIuZ2V0SG9zdCgpICsgIjoiICsgV2ViYXBwTWFuYWdlci5nZXRQb3J0KCk7CisJCQkgdXJsID0gImh0dHA6Ly8iICsgIGludGVybmFsSG9zdDsKKwkJCSBHRUxvZy5kZWJ1ZyhTdGVtS21sLmNsYXNzLCJTdGFydGVkIHdlYlNlcnZlciAiK3VybCk7CisJCQkgCisJCX0gY2F0Y2ggKENvcmVFeGNlcHRpb24gZSkgeworCQkJR0VMb2cuZXJyb3IoZS5nZXRNZXNzYWdlKCksIGUpOworCQkJX2ZhaWxlZCA9IHRydWU7CisJCQl1cmwgPSBudWxsOworCQl9CisJICB9IGVsc2UgaWYgKCFfZmFpbGVkICkgeworCQkgIFN0cmluZyBpbnRlcm5hbEhvc3QgPSBXZWJhcHBNYW5hZ2VyLmdldEhvc3QoKSArICI6IiArIFdlYmFwcE1hbmFnZXIuZ2V0UG9ydCgpOworCQkJIHVybCA9ICJodHRwOi8vIiArICBpbnRlcm5hbEhvc3Q7IAorCSAgfQorCUdFTG9nLmRlYnVnKFN0ZW1LbWwuY2xhc3MsImVtYmVkZGVkIHdlYiBzZXJ2ZXIgYXQ6ICIrdXJsKTsKKwlpZiAoISBfZmFpbGVkKSAKKwkJX3N0YXJ0ZWQgPSB0cnVlOworCXJldHVybiB1cmw7Cit9CisKKy8qKgorICogb2J0YWluIHRoZSBVUkwgdXNlZCB0byBhY2Nlc3MgdGhlIEdFIFNlcnZsZXRzLgorICogCisgKiBAcmV0dXJuIFRoZSBVUkwgYXMgYSBzdHJpbmcsIG51bGwgaWYgdW5hYmxlIHRvIAorICogICBhY2Nlc3MgYSB2YWxpZCB3ZWIgc2VydmVyLgorICovCitzdGF0aWMgcHVibGljIFN0cmluZyBnZXRTZXJ2ZXJVcmwoKSB7CisJcmV0dXJuIF9iYXNldXJsOworfQorCisvKioKKyAqIFNldCB0aGUgZmlsZW5hbWUgYmFzZWQgb24gdGhlIFRlbXBsYXRlIGFuZCAKKyAqIHRoZSBjdXJyZW50IGFzcGVjdCBhbmQgY3ljbGUgbnVtYmVyLgorICogCisgKiBAcGFyYW0gZm9sZGVyIEZvbGRlciB3aGVyZSBrbWwgZmlsZXMgYXJlIHdyaXR0ZW4KKyAqIEBwYXJhbSB0ZW1wbGF0ZSAKKyAqIEBwYXJhbSBhc3BlY3QgYXNwZWN0IHRvIGJlIGRpc3BsYXllZAorICogQHBhcmFtIGN5Y2xlCisgKiAKKyAqIEByZXR1cm4gcmVzdWx0aW5nIGFic29sdXRlIGZpbGVuYW1lCisgKi8KKwlwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRDb250cm9sRk4oU3RyaW5nIGZvbGRlciwgU3RyaW5nIHRlbXBsYXRlLAorCQkJQXNwZWN0IGFzcGVjdCwgbG9uZyBjeWNsZSkgeworICAgICAgICBTdHJpbmcgY29udHJvbEZOID0gIiI7CisJCVN0cmluZyBzZXEgPSAiMDAwMCIgKyBjeWNsZTsKKwkJaWYgKGN5Y2xlID4gOSkKKwkJCXNlcSA9ICIwMDAiICsgY3ljbGU7CisJCWlmIChjeWNsZSA+IDk5KQorCQkJc2VxID0gIjAwIiArIGN5Y2xlOworCQlpZiAoY3ljbGUgPiA5OTkpCisJCQlzZXEgPSAiMCIgKyBjeWNsZTsKKwkJaWYgKGN5Y2xlID4gOTk5OSkKKwkJCXNlcSA9ICIiICsgY3ljbGU7CisJCS8vIHdlIHdvbid0IHdvcnJ5IGFib3V0IGN5Y2xlID4gOTksOTk5CisJCQorCQljb250cm9sRk4gPSBmb2xkZXIgKyAiLyIgKyB0ZW1wbGF0ZTsKKwkJY29udHJvbEZOID0gY29udHJvbEZOLnJlcGxhY2VBbGwoIiZUIiwgYXNwZWN0LnRvU3RyaW5nKCkpOworCQljb250cm9sRk4gPSBjb250cm9sRk4ucmVwbGFjZUFsbCgiJk4iLCBzZXEpOworCQlHRUxvZy5kZWJ1ZyhTdGVtS21sLmNsYXNzLCJPdXRwdXQgZmlsZT0iK2NvbnRyb2xGTik7CisJCXJldHVybiBjb250cm9sRk47CisKKwl9CisvKioKKyAqIAorICogQHJldHVybiB0cnVlIGlmIHNlcnZsZXQgc2hvdWxkIHdhaXQgd2hlbiBpdCBoYXMKKyAqICBzZW50IGFsbCBvZiB0aGUgYXZhaWxhYmxlIGttbCBmaWxlcyB0byBHRQorICovCitwdWJsaWMgc3RhdGljIGJvb2xlYW4gaXNXYWl0Rm9yS01MKCkgeworCXJldHVybiB3YWl0Rm9yS01MOworfQorLyoqCisgKiBTZXQgdHJ1ZSBpZiBzZXJ2bGV0IHNob3VsZCB3YWl0CisgKiBAcGFyYW0gd2FpdEZvcktNTAorICovCitwdWJsaWMgc3RhdGljIHZvaWQgc2V0V2FpdEZvcktNTChib29sZWFuIHdhaXRGb3JLTUwpIHsKKwlTdGVtS21sLndhaXRGb3JLTUwgPSB3YWl0Rm9yS01MOworfQorIAorfS8vIGNsYXNzCisKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5nZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9nZS9rbWwvU3R5bGUuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5nZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9nZS9rbWwvU3R5bGUuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMzgxOGE2Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLmdlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL2dlL2ttbC9TdHlsZS5qYXZhCkBAIC0wLDAgKzEsMTY5IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0udWkuZ2Uua21sOworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovIAoraW1wb3J0IG9yZy53M2MuZG9tLkRvY3VtZW50OworaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7CisKKy8qKgorICogQnVpbGQgdGhlIFN0eWxlIHNlY3Rpb24gb2YgYSBLTUwgZG9jdW1lbnQuCisgKiA8cHJlPgorICogICAgCisgKiA8L3ByZT4KKyAqIAorICoKKyAqLworICAKKyAgCisvKgorICAgIDxTdHlsZT4gCisgICAgICAgICAgPExpbmVTdHlsZSA+CisgICAgICAgICAgICA8d2lkdGg+My4wPC93aWR0aD4KKyAgICAgICAgICAgIDxjb2xvcj43ZDAwZmZmZjwvY29sb3I+CisgICAgICAgICAgPC9MaW5lU3R5bGU+CisgICAgICAgICAgPFBvbHlTdHlsZT4KKyAgICAgICAgICAgPGZpbGw+MDwvZmlsbD4KKyAgICAgICAgICAgPG91dGxpbmU+MDwvb3V0bGluZT4KKyAgICAgICAgICA8L1BvbHlTdHlsZT4KKyAgICAgICAKKyAgICAgPC9TdHlsZT4KKyovICAgCitwdWJsaWMgY2xhc3MgU3R5bGUgeworICAgCisgICAgcHJpdmF0ZSBFbGVtZW50IF9zdHlsZSA9IG51bGw7CisgICAgCisgICAgcHJpdmF0ZSBEb2N1bWVudCBfZG9jID0gbnVsbDsKKyAgICAKKyAgICBwcml2YXRlIFN0cmluZyAgX2lkID0gIlN0eWxlVVJMIjsKKyAgICAvKioKKyAgICAgKiBTdHlsZSBjb25zdHJ1Y3RvcgorICAgICAqIEBwYXJhbSBkb2MgCisgICAgICovCisgICAgcHVibGljIFN0eWxlKERvY3VtZW50IGRvYykgeworICAgICAgICBfZG9jID0gZG9jOworICAgICAgICBfc3R5bGUgPSBfZG9jLmNyZWF0ZUVsZW1lbnQoIlN0eWxlIik7CisgICAgICAgICAgCisgICAgICAgIAorICAgIH0KKyAgICAvKioKKyAgICAgKiBTdHlsZSBjb25zdHJ1Y3RvcgorICAgICAqIEBwYXJhbSBkb2MgCisgICAgICogQHBhcmFtIGlkIAorICAgICAqLworICAgIHB1YmxpYyBTdHlsZShEb2N1bWVudCBkb2MsU3RyaW5nIGlkKSB7CisgICAgICAgIF9kb2MgPSBkb2M7CisgICAgICAgIF9pZCA9IGlkOworICAgICAgICBfc3R5bGUgPSBfZG9jLmNyZWF0ZUVsZW1lbnQoIlN0eWxlIik7CisgICAgICAgIF9zdHlsZS5zZXRBdHRyaWJ1dGUoImlkIixfaWQpOyAgCisgICAgICAgIAorICAgIH0KKyAgICAvKioKKyAgICAgKiBAcmV0dXJuIFN0eWxlIEVsZW1lbnQgCisgICAgICovCisgICAgcHVibGljIEVsZW1lbnQgZ2V0RWxlbWVudCgpIHsKKyAgICAgICAgcmV0dXJuIF9zdHlsZTsKKyAgICB9CisgICAgLyoqCisgICAgICogQHJldHVybiBpZCAKKyAgICAgKi8KKyAgICBwdWJsaWMgU3RyaW5nIGdldElkKCkgeworICAgICAgICByZXR1cm4gX2lkOworICAgIH0KKyAgICAvKioKKyAgICAgKiBBZGQgTGluZVN0eWxlIHRvIHRoZSBTdHlsZSBzZWN0aW9uCisgICAgICogICAgICAKKyAgICAgKiBDb2xvciBpcyBvZiBoZXhpZGVjaW1hbCBmb3JtIG9vYmJnZ3JyIHdoZXJlOgorICAgICAqICAgb28gaXMgMDAtZmYgb3BhY2l0eSB2YWx1ZQorICAgICAqICAgYmIgaXMgMDAtZmYgYmx1ZQorICAgICAqICAgZ2cgaXMgMDAtZmYgZ3JlZW4KKyAgICAgKiAgIHJyIGlzIDAwLWZmIHJlZCAKKyAgICAgKiAgc28gN2ZmZjAwMDAgaXMgQmx1ZSB3aXRoIDUwJSAgb3BhY2l0eQorICAgICAqICAgICAgIAorICAgICAqIEBwYXJhbSB3aWR0aCBsaW5lIHdpZHRoIChlLmcuIDMuMCkgCisgICAgICogQHBhcmFtIGNvbG9yIGxpbmUgY29sb3IgKGUuZy4gN2QwMGZmZmYpCisgICAgICovCisgICAgcHVibGljIHZvaWQgc2V0TGluZVN0eWxlKGZsb2F0IHdpZHRoLFN0cmluZyBjb2xvcikgeworICAgICAgICBFbGVtZW50IGxpbmVTdHlsZSA9IF9kb2MuY3JlYXRlRWxlbWVudCgiTGluZVN0eWxlIik7ICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgIF9zdHlsZS5hcHBlbmRDaGlsZChsaW5lU3R5bGUpOworICAgICAgICBFbGVtZW50IGUgPSBLbWxEb2MuY3JlYXRlQXR0cihfZG9jLCJ3aWR0aCIsRmxvYXQudG9TdHJpbmcod2lkdGgpKTsgCisgICAgICAgIGxpbmVTdHlsZS5hcHBlbmRDaGlsZChlKTsKKyAgICAgICAgZSA9IEttbERvYy5jcmVhdGVBdHRyKF9kb2MsImNvbG9yIixjb2xvcik7IAorICAgICAgICBsaW5lU3R5bGUuYXBwZW5kQ2hpbGQoZSk7CisgICAgfQorICAgCisgICAgLyoqCisgICAgICogQWRkIExpbmVTdHlsZSB0byB0aGUgU3R5bGUgc2VjdGlvbgorICAgICAqICAgICAgCisgICAgICogQHBhcmFtIHdpZHRoIGxpbmUgd2lkdGggKGUuZy4gMy4wKSAKKyAgICAgKiAKKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBzZXRMaW5lU3R5bGUoZG91YmxlIHdpZHRoKSB7CisgICAgICAgIEVsZW1lbnQgbGluZVN0eWxlID0gX2RvYy5jcmVhdGVFbGVtZW50KCJMaW5lU3R5bGUiKTsgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgX3N0eWxlLmFwcGVuZENoaWxkKGxpbmVTdHlsZSk7CisgICAgICAgIEVsZW1lbnQgZSA9IEttbERvYy5jcmVhdGVBdHRyKF9kb2MsIndpZHRoIixEb3VibGUudG9TdHJpbmcod2lkdGgpKTsgCisgICAgICAgIGxpbmVTdHlsZS5hcHBlbmRDaGlsZChlKTsKKyAgICAgICAgCisgICAgfQorICAgIC8qKgorICAgICAqIEFkZCBQb2x5U3R5bGUgdG8gdGhlIFN0eWxlIHNlY3Rpb24KKyAgICAgKiBAcGFyYW0gY29sb3IgIEtNTCBjb2xvcgorICAgICAqIEBwYXJhbSBvdXRsaW5lIHRydWUgaWYgb3V0bGluZSBvcHRpb24gdG8gYmUgYWRkZWQKKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBzZXRQb2x5U3R5bGUoU3RyaW5nIGNvbG9yLCBib29sZWFuIG91dGxpbmUpIHsKKyAgICAgICAgRWxlbWVudCBwb2x5U3R5bGUgPSBfZG9jLmNyZWF0ZUVsZW1lbnQoIlBvbHlTdHlsZSIpOyAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICBfc3R5bGUuYXBwZW5kQ2hpbGQocG9seVN0eWxlKTsKKyAgICAgICAgRWxlbWVudCBlID0gbnVsbDsKKyAgICAgICAgaWYgKCEgb3V0bGluZSkgeyAvLyBkZWZhdWx0IGlzIHRydWUKKyAgICAgICAgICAgIGUgPSBLbWxEb2MuY3JlYXRlQXR0cihfZG9jLCJvdXRsaW5lIiwiMCIpOworICAgICAgICAgICAgcG9seVN0eWxlLmFwcGVuZENoaWxkKGUpOyAKKyAgICAgICAgfSAKKyAgICAgICAgaWYgKGNvbG9yLmVxdWFscygiMCIpKSB7CisgICAgICAgICAgICBlID0gS21sRG9jLmNyZWF0ZUF0dHIoX2RvYywiZmlsbCIsIjAiKTsKKyAgICAgICAgICAgIHBvbHlTdHlsZS5hcHBlbmRDaGlsZChlKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGUgPSBLbWxEb2MuY3JlYXRlQXR0cihfZG9jLCJmaWxsIiwiMSIpOworICAgICAgICAgICAgcG9seVN0eWxlLmFwcGVuZENoaWxkKGUpOworICAgICAgICAgICAgZSA9IEttbERvYy5jcmVhdGVBdHRyKF9kb2MsImNvbG9yIixjb2xvcik7ICAgICAgICAKKyAgICAgICAgICAgIHBvbHlTdHlsZS5hcHBlbmRDaGlsZChlKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICB9CisgICAgCisgICAgLyoqCisgICAgICogQWRkIEJhbG9vblN0eWxlIHRvIHRoZSBTdHlsZSBzZWN0aW9uCisgICAgICogPHByZT4KKyAgICAgKiAgICA8QmFsbG9vblN0eWxlPiAgICAgIAorICAgICAgICAgICAgPGJnQ29sb3I+ZmZmZmZmYmI8L2JnQ29sb3I+ICAgICAgCisgICAgICAgICAgICA8dGV4dD48IVtDREFUQVsKKyAgICAgICAgICAgICAgIDxiPjxmb250IGNvbG9yPSIjQ0MwMDAwIiBzaXplPSIrMyI+JFtuYW1lXTwvZm9udD48L2I+CisgICAgICAgICAgICAgICA8YnIvPjxici8+CisgICAgICAgICAgICAgICA8Zm9udCBmYWNlPSJDb3VyaWVyIj4kW2Rlc2NyaXB0aW9uXTwvZm9udD4KKyAgICAgICAgICAgICAgIDxici8+PGJyLz4gICAgCisgICAgICAgICAgICAgICBdXT4KKyAgICAgICAgICAgICA8L3RleHQ+CisgICAgICAgICA8L0JhbGxvb25TdHlsZT4KKyAgICAgKiA8L3ByZT4KKyAgICAgKiBAcGFyYW0gY29sb3IgIEtNTCBjb2xvcgorICAgICAqIEBwYXJhbSBvdXRsaW5lIHRydWUgaWYgb3V0bGluZSBvcHRpb24gdG8gYmUgYWRkZWQKKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBzZXRCYWxsb29uU3R5bGUoKSB7CisgICAgICAgIEVsZW1lbnQgYmFsbG9vblN0eWxlID0gX2RvYy5jcmVhdGVFbGVtZW50KCJCYWxsb29uU3R5bGUiKTsgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgX3N0eWxlLmFwcGVuZENoaWxkKGJhbGxvb25TdHlsZSk7CisgICAgICAgIEVsZW1lbnQgZSA9IG51bGw7CisgCisgICAgICAgIFN0cmluZyB0ZXh0ID0gIjxiPjxmb250IGNvbG9yPVwiI0NDMDAwMFwiIHNpemU9XCIrM1wiPiRbbmFtZV08L2ZvbnQ+PC9iPiBcbiIgKworICAgICAgICAgICAgICAgICAgICAgICI8YnIvPjxici8+IFxuIiArCisgICAgICAgICAgICAgICAgICAgICAgIjxmb250IGZhY2U9XCJDb3VyaWVyXCI+JFtkZXNjcmlwdGlvbl08L2ZvbnQ+IFxuIiArCisgICAgICAgICAgICAgICAgICAgICAgIjxici8+PGJyLz4gIjsgCisKKyAgICAgICBlID0gS21sRG9jLmNyZWF0ZUNEYXRhQXR0cihfZG9jLCJ0ZXh0Iix0ZXh0KTsKKyAgICAgICBiYWxsb29uU3R5bGUuYXBwZW5kQ2hpbGQoZSk7CisgICAgfQorfSAvLyBlbmQgY2xhc3MKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5nZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9nZS9zZXJ2bGV0L0JCb3hTZXJ2bGV0LmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkuZ2Uvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvZ2Uvc2VydmxldC9CQm94U2VydmxldC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFmN2MzOTQKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkuZ2Uvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvZ2Uvc2VydmxldC9CQm94U2VydmxldC5qYXZhCkBAIC0wLDAgKzEsMTA4IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0udWkuZ2Uuc2VydmxldDsKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLyAKK2ltcG9ydCBqYXZhLmlvLkJ5dGVBcnJheU91dHB1dFN0cmVhbTsKK2ltcG9ydCBqYXZhLmlvLkRhdGFJbnB1dFN0cmVhbTsKK2ltcG9ydCBqYXZhLmlvLkRhdGFPdXRwdXRTdHJlYW07CitpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLmlvLlByaW50V3JpdGVyOworCitpbXBvcnQgamF2YXguc2VydmxldC5TZXJ2bGV0RXhjZXB0aW9uOworaW1wb3J0IGphdmF4LnNlcnZsZXQuU2VydmxldE91dHB1dFN0cmVhbTsKK2ltcG9ydCBqYXZheC5zZXJ2bGV0Lmh0dHAuSHR0cFNlcnZsZXQ7CitpbXBvcnQgamF2YXguc2VydmxldC5odHRwLkh0dHBTZXJ2bGV0UmVxdWVzdDsKK2ltcG9ydCBqYXZheC5zZXJ2bGV0Lmh0dHAuSHR0cFNlcnZsZXRSZXNwb25zZTsKKworCisvKioKKyAqIFNlcnZsZXQgdGhhdCBwcm92aWRlcyBhIHNlcnZpY2UgaW50ZXJmYWNlIGFsbG93cyB0aGUgY2xpZW50IHRvIAorICogZ2V0IHRoZSBCQm94IGluZm8gdGhhdCB3YXMgc2VudCB0byBTbGlkZVNob3dTZXJ2bGV0IGJ5IEdvb2dsZUVhcnRoLiAKKyAqIAorICogCisgKiAKKyAqIAorICogCisgKi8KK3B1YmxpYyBjbGFzcyBCQm94U2VydmxldCBleHRlbmRzIEh0dHBTZXJ2bGV0IHsKKwkKKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBsb25nIHNlcmlhbFZlcnNpb25VSUQgPSAxTDsKKwkKKwlwcml2YXRlIGZpbmFsIFN0cmluZyBERUZBVUxUX0JCT1ggPSAKKwkJICAgICItNzUuMjA2Mzc4NjU3NzU4MDgsNDAuMTk0NTM4NTk2ODI2NjEsIiArCisJCQkiLTY4Ljc2OTkyMDc5NTUxMyw0My45NDkzMDkxNDY5NDQ2NCI7CQorICAvKioKKyAgKiBTZXJ2aWNlIGludGVyZmFjZS4gCisgICogLSBCQm94IC0gU2VuZCBiYWNrIHRoZSBHRSBCQm94IGluZm8KKyAgKiAKKyAgKiAKKyAgKiBAc2VlIGphdmF4LnNlcnZsZXQuaHR0cC5IdHRwU2VydmxldCNzZXJ2aWNlKGphdmF4LnNlcnZsZXQuaHR0cC5IdHRwU2VydmxldFJlcXVlc3QsIGphdmF4LnNlcnZsZXQuaHR0cC5IdHRwU2VydmxldFJlc3BvbnNlKQorICAqLworIHByb3RlY3RlZCB2b2lkIHNlcnZpY2UoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcXVlc3QsSHR0cFNlcnZsZXRSZXNwb25zZSByZXNwb25zZSkgCisgICAgICAgICB0aHJvd3MgU2VydmxldEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24geworIAkKKwkJRGF0YUlucHV0U3RyZWFtIGluID0gCisJCQluZXcgRGF0YUlucHV0U3RyZWFtKHJlcXVlc3QuZ2V0SW5wdXRTdHJlYW0oKSk7CisJCXJlc3BvbnNlLnNldENvbnRlbnRUeXBlKCJhcHBsaWNhdGlvbi9vY3Rlci1zdHJlYW0iKTsKKwkJLy8gdXNlIEJ5dGVBcnJheSBvdXRwdXQKKwkJQnl0ZUFycmF5T3V0cHV0U3RyZWFtIGJ5dGVPdXRwdXQgPSBuZXcgQnl0ZUFycmF5T3V0cHV0U3RyZWFtKCk7CisJCQorCQlEYXRhT3V0cHV0U3RyZWFtIG91dHB1dCA9CisJCQluZXcgRGF0YU91dHB1dFN0cmVhbShieXRlT3V0cHV0KTsKKwkJLy8KKwkJLy8gcmVhZCB0aGUgaW5wdXQgZnJvbSB0aGUgY2xpZW50CisJCS8vCisJCVN0cmluZyBjb21tYW5kID0gaW4ucmVhZFVURigpOworCQkvLyBCQk9YIHNlcnZsZXRJRCAKKwkJCisJCWlmIChjb21tYW5kLnN0YXJ0c1dpdGgoIkJCT1ggIikpIHsKKwkJCVN0cmluZyBpZCA9IGNvbW1hbmQuc3Vic3RyaW5nKDUpLnRyaW0oKTsKKwkJCVNsaWRlU2hvd0luZm8gaW5mbyA9IFNsaWRlU2hvd1NlcnZsZXQuZ2V0SW5mbyhpZCk7CisJCQkvL1NsaWRlU2hvd1NlcnZsZXQuZGVidWcoImlkOiAiK2lkKyIgaW5mbzogIitpbmZvKTsKKwkJCQorCQkJaWYgKGluZm8gIT0gbnVsbCkKKwkJCSAgICBvdXRwdXQud3JpdGVVVEYoIkJCT1g6ICIraW5mby5nZXRCQk9YKCkpOworCQkJZWxzZSAKKwkJCQlvdXRwdXQud3JpdGVVVEYoIkJCT1g6ICIrREVGQVVMVF9CQk9YKTsKKwkJCisJCX0gZWxzZSB7CisJCQlTdHJpbmcgZXJybXNnID0gIkVycm9yOiBSZWNlaXZlZDogIitjb21tYW5kOworCQkJLy9TbGlkZVNob3dTZXJ2bGV0LmRlYnVnKGVycm1zZyk7CisJCQlvdXRwdXQud3JpdGVVVEYoZXJybXNnKTsKKwkJfQorCQlvdXRwdXQuZmx1c2goKTsKKwkJYnl0ZVtdIGJ1ZiA9IGJ5dGVPdXRwdXQudG9CeXRlQXJyYXkoKTsKKwkJcmVzcG9uc2Uuc2V0Q29udGVudExlbmd0aChidWYubGVuZ3RoKTsKKwkJU2VydmxldE91dHB1dFN0cmVhbSBzZXJ2bGV0T3V0cHV0ID0gcmVzcG9uc2UuZ2V0T3V0cHV0U3RyZWFtKCk7CisJCXNlcnZsZXRPdXRwdXQud3JpdGUoYnVmKTsKKwkJc2VydmxldE91dHB1dC5jbG9zZSgpOworCQkKKwl9CisJCisgICAgCisJCisJQFN1cHByZXNzV2FybmluZ3MoInVudXNlZCIpCisJcHJpdmF0ZSB2b2lkIGVyckh0bWwoSHR0cFNlcnZsZXRSZXNwb25zZSByZXNwb25zZSwgU3RyaW5nIG1zZykKKwkJCXRocm93cyBJT0V4Y2VwdGlvbiB7CisJCXJlc3BvbnNlLnNldENvbnRlbnRUeXBlKCJ0ZXh0L2h0bWwiKTsKKwkJUHJpbnRXcml0ZXIgb3V0ID0gbmV3IFByaW50V3JpdGVyKHJlc3BvbnNlLmdldE91dHB1dFN0cmVhbSgpKTsKKwkJb3V0LnByaW50bG4oIjxodG1sPiIpOworCQlvdXQucHJpbnRsbigiPGhlYWQ+PHRpdGxlPkJCb3hTZXJ2bGV0IEVycm9yPC90aXRsZT48L2hlYWQ+Iik7CisJCW91dC5wcmludGxuKCI8Ym9keT4iKTsKKwkJb3V0LnByaW50bG4oIjxwPiIgKyBtc2cgKyAiPC9wPiIpOworCQlvdXQucHJpbnRsbigiPC9ib2R5PjwvaHRtbD4iKTsKKwkJb3V0LmZsdXNoKCk7CisJfQorCQorCisKK30KKworCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkuZ2Uvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvZ2Uvc2VydmxldC9JbWFnZVNlcnZsZXQuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5nZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9nZS9zZXJ2bGV0L0ltYWdlU2VydmxldC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEwYTllMGQKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkuZ2Uvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvZ2Uvc2VydmxldC9JbWFnZVNlcnZsZXQuamF2YQpAQCAtMCwwICsxLDE5OSBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnVpLmdlLnNlcnZsZXQ7CisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8gCitpbXBvcnQgamF2YS5hd3QuQ29sb3I7CitpbXBvcnQgamF2YS5hd3QuRm9udDsKK2ltcG9ydCBqYXZhLmF3dC5HcmFwaGljczJEOworaW1wb3J0IGphdmEuYXd0LmltYWdlLkJ1ZmZlcmVkSW1hZ2U7CitpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLmlvLk91dHB1dFN0cmVhbTsKK2ltcG9ydCBqYXZhLmlvLlByaW50V3JpdGVyOworaW1wb3J0IGphdmEudXRpbC5FbnVtZXJhdGlvbjsKKworaW1wb3J0IGphdmF4LmltYWdlaW8uSW1hZ2VJTzsKK2ltcG9ydCBqYXZheC5zZXJ2bGV0LlNlcnZsZXRFeGNlcHRpb247CitpbXBvcnQgamF2YXguc2VydmxldC5odHRwLkh0dHBTZXJ2bGV0OworaW1wb3J0IGphdmF4LnNlcnZsZXQuaHR0cC5IdHRwU2VydmxldFJlcXVlc3Q7CitpbXBvcnQgamF2YXguc2VydmxldC5odHRwLkh0dHBTZXJ2bGV0UmVzcG9uc2U7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnVpLkFjdGl2YXRvcjsKKworLyoqCisgKiBTZXJ2bGV0IHRoYXQgcmV0dXJucyBhIHBuZyBpbWFnZSBjb250YWluaW5nIHRoZSAKKyAqIHNwZWNpZmllZCB0ZXh0IHN0cmluZy4gCisgKiBUaGlzIGJ1aWxkcyBhIFBORyBpbWFnZSBiYXNlZCBvbiBzcGVjaWZpZWQgcGFyYW1ldGVyczoKKyAqICAgdGV4dD0KKyAqICAgCisgKiBXb3JrcyBmb3IgVG9tY2F0IG9uIFdpbmRvd3MgYnV0IG9uIG90aGVyIHBsYXRmb3JtcworICogSXQgbWF5IHJlcXVpcmUgdGhlIGZvbGxvd2luZyBmb3IgdGhlIHdlYnNlcnZlcgorICogIC1EamF2YS5hd3QuaGVhZGxlc3M9dHJ1ZQorICoKKyAqCisgKi8KK3B1YmxpYyBjbGFzcyBJbWFnZVNlcnZsZXQgZXh0ZW5kcyBIdHRwU2VydmxldCB7CisJCisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgbG9uZyBzZXJpYWxWZXJzaW9uVUlEID0gMUw7CisJCisJCisgICAgLy8JIGdldCB0aGUgcGFybXMgZnJvbSB0aGUgVVJMIHBhcmFtZXRlcnMuCisJLy8gaHR0cDovL2xvY2FsaG9zdDo4MDgwL2ltYWdlP3RleHQ9c3RyaW5nCisJcHJpdmF0ZSBTdHJpbmcgdGV4dD0iREVGQVVMVCI7CisJcHJpdmF0ZSBpbnQgdGV4dHNpemUgPSAxNDsKKwlwcml2YXRlIFN0cmluZyBmYyA9ICIjZmZmZmZmIjsKKwlwcml2YXRlIFN0cmluZyBiYyA9ICIjMDAwMDAwIjsKKwlwcml2YXRlIGludCBoID0gMzI7CisgICAgaW50IHcgPSAwOworICAgIHByaXZhdGUgU3RyaW5nIGZvbnROYW1lID0gIlNhbnMtc2VyaWYiOworICAgIAorICAgIC8qKiAKKyAgICAgKiBoYW5kbGUgZG9Qb3N0IHNhbWUgYXMgZG9HZXQKKyAgICAgKi8KKyAgICBwcm90ZWN0ZWQgdm9pZCBkb1Bvc3QoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcXVlc3QsSHR0cFNlcnZsZXRSZXNwb25zZSByZXNwb25zZSkgCisgICAgICAgICAgICB0aHJvd3MgU2VydmxldEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24geworICAgIAlkb0dldChyZXF1ZXN0LHJlc3BvbnNlKTsKKyAgICB9CisJLyoqCisJICogIFByb2Nlc3MgdGhlIFVSTCBjb21tYW5kIAorCSAqICAKKwkgKiAgVGhlIGZvbGxvd2luZyBhcmUgcGlja2VkIHVwIGZyb20gdGhlIFVSTAorCSAqICAgaHR0cDovL3N5c3RlbS9TbGlkZVNob3cvaW1hZ2U/dGV4dD1BJTIwU3RyaW5nJmg9aGVpZ2h0Jnc9d2lkdGgKKwkgKiAgCisJICogIHRleHQgIFRoZSBTdHJpbmcgdG8gYmUgc2hvd24gaW4gcmVzdWx0aW5nIGltYWdlCisJICogIGggICAgIEhlaWdodCBvZiBpbWFnZSBpbiBwaXhlbHMKKwkgKiAgdyAgICAgV2lkdGggb2YgaW1hZ2UgaW4gcGl4ZWxzCisJICogIGJjICAgICBCYWNrZ3JvdW5kIGNvbG9yICAgKGJsYWNrKQorCSAqICBmYyAgICAgRm9yZWdyb3VuZCAodGV4dCkgY29sb3IgKHdoaXRlKQorCSAqICAKKwkgKiAgLSBjb3VsZCBiZSBlbmhhbmNlZCB0byBhbHNvIGRvIHRoZSBmb2xsb3dpbmcKKwkgCisJICogIGZvbnQgICBGb250IG5hbWUgKCBTYW4tU2FyaWYgKQorCSAqICBzaXplICAgVGV4dFNpc2UgZm9yIGZvbnQgKDE0KSAKKwkgKiAgdHlwZSAgIEltYWdlIFR5cGUgKHBuZykKKwkgKiAgCisJICogIAorCSAqLworCXByb3RlY3RlZCB2b2lkIGRvR2V0KEh0dHBTZXJ2bGV0UmVxdWVzdCByZXF1ZXN0LAorCQkJSHR0cFNlcnZsZXRSZXNwb25zZSByZXNwb25zZSkgdGhyb3dzIElPRXhjZXB0aW9uLCBTZXJ2bGV0RXhjZXB0aW9uIHsKKyAKKwkJRW51bWVyYXRpb24gZSA9IHJlcXVlc3QuZ2V0UGFyYW1ldGVyTmFtZXMoKTsKKwkJd2hpbGUgKGUuaGFzTW9yZUVsZW1lbnRzKCkpIHsKKwkJCVN0cmluZyBuYW1lID0gKFN0cmluZyllLm5leHRFbGVtZW50KCk7CisJCQlTdHJpbmcgdmFsdWUgPSAoU3RyaW5nKXJlcXVlc3QuZ2V0UGFyYW1ldGVyKG5hbWUpOworCQkJLy9kZWJ1ZyhuYW1lKyI9Iit2YWx1ZSk7CisJCQlpZiAobmFtZS5lcXVhbHMoInRleHQiKSkgeworCQkJCXRleHQgPSB2YWx1ZTsKKwkJCX0gZWxzZSBpZiAobmFtZS5lcXVhbHMoInciKSkgeworCQkJCXcgPSBJbnRlZ2VyLnBhcnNlSW50KHZhbHVlKTsJCQkJCisJCQl9IGVsc2UgaWYgKG5hbWUuZXF1YWxzKCJoIikpIHsKKwkJCQloID0gSW50ZWdlci5wYXJzZUludCh2YWx1ZSk7CisJCQkJCisJCQl9IGVsc2UgaWYgKG5hbWUuZXF1YWxzKCJiYyIpKSB7CisJCQkJYmMgPSB2YWx1ZTsKKwkJCX0gZWxzZSBpZiAobmFtZS5lcXVhbHMoImZjIikpIHsKKwkJCQlmYyA9IHZhbHVlOworCQkJfQorCQl9CisJCUJ1ZmZlcmVkSW1hZ2UgaW1hZ2UgPSBnZXRJbWFnZSgpOworCQlpZiAoaW1hZ2UgPT0gbnVsbCkgeworCQkJZXJySHRtbChyZXNwb25zZSwgIlVuYWJsZSB0byBjcmVhdGUgaW1hZ2UuIik7CisJCX0KKwkJcmVzcG9uc2Uuc2V0Q29udGVudFR5cGUoImltYWdlL3BuZyIpOworCQlPdXRwdXRTdHJlYW0gb3V0cHV0U3RyZWFtID0gcmVzcG9uc2UuZ2V0T3V0cHV0U3RyZWFtKCk7CisJCUltYWdlSU8ud3JpdGUoaW1hZ2UsICJwbmciLCBvdXRwdXRTdHJlYW0pOworCQlvdXRwdXRTdHJlYW0uY2xvc2UoKTsKKwl9CisJCisJLyoqCisJICogY3JlYXRlIGEgQnVmZmVyZWQgSW1hZ2UgYmFzZWQgb24gdGhlIAorCSAqIHBhcmFtZXRlcnMgZ2F0aGVyZWQgZnJvbSB0aGUgcmVxdWVzdC4KKwkgKiAKKwkgKiBAcmV0dXJuICBwbmcgaW1hZ2UKKwkgKi8KKwlwdWJsaWMgQnVmZmVyZWRJbWFnZSBnZXRJbWFnZSgpIHsJCisJCUJ1ZmZlcmVkSW1hZ2UgaW1hZ2UgPSBudWxsOworCQkvLyBzZXQgZGVmYXVsdHMKKwkJRm9udCBmb250ID0gbmV3IEZvbnQoZm9udE5hbWUsIEZvbnQuQk9MRCwgdGV4dHNpemUpOworICAgICAgICAvLwkgZGVmYXVsdCB3aWR0aCBpcyA4IHBpeGVscyBwZXIgY2hhciArIG1hcmdpbgorCQlpZiAodyA9PSAwKQorCQkgICAgdyA9ICh0ZXh0Lmxlbmd0aCgpKzIpKjg7CisJCQorCQlpbnQgdGV4dENvbG9yID0gMDsKKwkJaW50IGltYWdlQ29sb3IgPSAwOworCQl0cnkgeyAKKwkgICAgICAgICBpZiAoZmMuc3RhcnRzV2l0aCgiIyIpKSAKKwkgICAgICAgIAkgZmMgPSBmYy5zdWJzdHJpbmcoMSk7CisJICAgICAgICAgdGV4dENvbG9yID0gKGludCkoTG9uZy5wYXJzZUxvbmcoZmMsIDE2KSAmIDB4MGZmZmZmZmYpOworCSAgICAgICAgIGlmIChiYy5zdGFydHNXaXRoKCIjIikpIAorCSAgICAgICAgCSBiYyA9IGJjLnN1YnN0cmluZygxKTsKKwkgICAgICAgICBpbWFnZUNvbG9yID0gKGludCkoTG9uZy5wYXJzZUxvbmcoYmMsIDE2KSAmIDB4MGZmZmZmZmYpOworCSAgICB9IGNhdGNoIChFeGNlcHRpb24gZXhjZXApIHsgCisJICAgIAlkZWJ1ZygidGV4dENvbG9yPSIrdGV4dENvbG9yKTsKKwkJICAgIGRlYnVnKCJpbWFnZUNvbG9yPSIraW1hZ2VDb2xvcik7CisJICAgIAlkZWJ1ZygiSW52YWxpZCB0ZXh0IG9yIGltYWdlIGNvbG9yLiIsZXhjZXApOworCSAgICAJcmV0dXJuIG51bGw7CisJICAgIH0KKwkgICAgCisJCXRyeSB7CisJCQlpbWFnZSA9IG5ldyBCdWZmZXJlZEltYWdlKHcsIGgsCisJCQkJCUJ1ZmZlcmVkSW1hZ2UuVFlQRV9JTlRfUkdCKTsKKwkJCWZvciAoaW50IGk9MDtpPHc7aSsrKSB7CisJCQkJZm9yIChpbnQgaj0wO2o8aDtqKyspIHsKKwkJCQkJaW1hZ2Uuc2V0UkdCKGksaixpbWFnZUNvbG9yKTsKKwkJCQl9CisJCQl9CisJCQlHcmFwaGljczJEIGcgPSBpbWFnZS5jcmVhdGVHcmFwaGljcygpOworCQkJLy8gYWRkIHRleHQgc3RyaW5nCisJCQlDb2xvciBjID0gbmV3IENvbG9yKHRleHRDb2xvciwgKCgodGV4dENvbG9yID4+IDI0KSAmIDB4ZmYpICE9IDApKTsKKwkJCWcuc2V0Q29sb3IoYyk7CQkKKwkJCWcuc2V0Rm9udChmb250KTsKKwkJCWcuZHJhd1N0cmluZyh0ZXh0LCB0ZXh0c2l6ZSAvIDIsICh0ZXh0c2l6ZSAqIDUpIC8gNCk7CisKKwkJCWcuZGlzcG9zZSgpOworCQl9IGNhdGNoIChSdW50aW1lRXhjZXB0aW9uIGUpIHsKKwkJCQorCQkJZS5wcmludFN0YWNrVHJhY2UoKTsKKwkJCXJldHVybiBudWxsOworCQl9CisJCXJldHVybiBpbWFnZTsKKwl9CisJCisJcHJpdmF0ZSB2b2lkIGVyckh0bWwoSHR0cFNlcnZsZXRSZXNwb25zZSByZXNwb25zZSwgU3RyaW5nIG1zZykKKwkJCXRocm93cyBJT0V4Y2VwdGlvbiB7CisJCXJlc3BvbnNlLnNldENvbnRlbnRUeXBlKCJ0ZXh0L2h0bWwiKTsKKwkJUHJpbnRXcml0ZXIgb3V0ID0gbmV3IFByaW50V3JpdGVyKHJlc3BvbnNlLmdldE91dHB1dFN0cmVhbSgpKTsKKwkJb3V0LnByaW50bG4oIjxodG1sPiIpOworCQlvdXQucHJpbnRsbigiPGhlYWQ+PHRpdGxlPktNTCBTbGlkZVNob3cgRXJyb3I8L3RpdGxlPjwvaGVhZD4iKTsKKwkJb3V0LnByaW50bG4oIjxib2R5PiIpOworCQlvdXQucHJpbnRsbigiPHA+IiArIG1zZyArICI8L3A+Iik7CisJCW91dC5wcmludGxuKCI8L2JvZHk+PC9odG1sPiIpOworCQlvdXQuZmx1c2goKTsKKwl9CisJCisgICAgLyoqCisgICAgICogcHJpbnQgZGVidWcgbWVzc2FnZXMgdG8gdGhlIHNlcnZlciBsb2cuCisgICAgICogQHBhcmFtIG1zZworICAgICAqLworCXByaXZhdGUgdm9pZCBkZWJ1ZyhTdHJpbmcgbXNnKSB7CisJCWlmIChTbGlkZVNob3dTZXJ2bGV0LkRFQlVHKSB7CisJCSAgCisJCSAgQWN0aXZhdG9yLmxvZ0luZm9ybWF0aW9uKCJJbWFnZVNlcnZsZXQ6ICIrbXNnKTsKKwkJfQorCX0KKwkKKwlwcml2YXRlIHZvaWQgZGVidWcoU3RyaW5nIG1zZyxUaHJvd2FibGUgZSkgeworCQkKKwkJQWN0aXZhdG9yLmxvZ0luZm9ybWF0aW9uKG1zZyk7CisJCWUucHJpbnRTdGFja1RyYWNlKCk7CisJCQorCX0KK30KKworCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkuZ2Uvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvZ2Uvc2VydmxldC9TbGlkZVNob3dJbmZvLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkuZ2Uvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvZ2Uvc2VydmxldC9TbGlkZVNob3dJbmZvLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDY1YTY3ZgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5nZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9nZS9zZXJ2bGV0L1NsaWRlU2hvd0luZm8uamF2YQpAQCAtMCwwICsxLDIxOSBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnVpLmdlLnNlcnZsZXQ7CisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8gCitpbXBvcnQgamF2YS5pby5GaWxlOworaW1wb3J0IGphdmEudXRpbC5EYXRlOworCisvKioKKyAqIENsYXNzIHRvIGhvbGQgaW5mb3JtYXRpb24gcmVxdWlyZWQgYnkgYSAKKyAqIFNsaWRlU2hvd1NlcnZsZXQgc2Vzc2lvbgorICoKKyAqLworcHVibGljIGNsYXNzIFNsaWRlU2hvd0luZm8geworICAgCisJcHJpdmF0ZSBTdHJpbmcgX2tleSA9ICJLZXkiOworCQorCXByaXZhdGUgaW50IF9jb3VudGVyID0gMDsKKwkKKwkvKioKKwkgKiBidWlsdCBpbiBkZWxheSBvbiByZXF1ZXN0cworCSAqLworCXByaXZhdGUgbG9uZyBfZGVsYXkgPSAyMDAwOworCQorCXByaXZhdGUgRmlsZVtdIF9maWxlcyA9IG51bGw7CisJCisJcHJpdmF0ZSBib29sZWFuIF93YWl0Rm9yS01MID0gZmFsc2U7CisJCisJcHJpdmF0ZSBTdHJpbmcgX2ZvbGRlck5hbWUgPSAiIjsKKwkKKwlwcml2YXRlIGJvb2xlYW4gcGF1c2UgPSBmYWxzZTsKKwkKKwlwcml2YXRlIFN0cmluZ1tdIGluc2VydCA9IG51bGw7CisJCisJcHJpdmF0ZSBTdHJpbmcgICBfZmlsZU5hbWUgPSBudWxsOworCQorCXByaXZhdGUgU3RyaW5nICAgX0JCT1ggPSBudWxsOworCS8qKgorCSAqIHVzZSBmb3IgY2xlYW51cCAtIGZ1dHVyZQorCSAqLworCXByaXZhdGUgbG9uZyB0aW1lTGFzdFVzZWQgPSAwOworCS8qKgorCSAqIGNyZWF0ZSBhbiBpbnN0YW5jZSB3aXRoIHRoZSB2YWx1ZXMgcHVsbGVkIGZyb20gVVJMCisJICogCisJICogQHBhcmFtIGtleSAgcHNldWRvIHNlc3Npb24ga2V5CisJICogQHBhcmFtIGZvbGRlciBmb2xkZXIgbmFtZSBjb250YWluaW5nIEtNTCBmaWxlcworCSAqIEBwYXJhbSB3YWl0IGlmIHRydWUgdGhlbiB3YWl0IGZvciBuZXcgS01MIHdoZW4gCisJICogICAgICAgIG5vIG1vcmUgZmlsZXMgaW4gbGlzdC4KKwkgKiBAcGFyYW0gZmlsZSBTaW5nbGUgZmlsZSB0byBiZSByZXBlYXRhYmx5IHByb2Nlc3NlZAorCSAqIEBwYXJhbSBkZWxheSBpbiBzZWNvbmRzIGJldHdlZW4gcmVxdWVzdCBwcm9jZXNzaW5nCisJICovCisJcHVibGljIFNsaWRlU2hvd0luZm8oU3RyaW5nIGtleSwgU3RyaW5nIGZvbGRlciwgYm9vbGVhbiB3YWl0LCAKKwkJCSAgICAgICAgICAgICBTdHJpbmcgZmlsZSwgU3RyaW5nIGRlbGF5KSB7CisJCV9rZXkgPSBrZXk7CisJCV9jb3VudGVyID0gLTE7ICAvLyBzbyBmaXJzdCBmaWxlIHdpbGwgYmUgMAorCQlfZmlsZXMgPSBudWxsOworCQlfZm9sZGVyTmFtZSA9IGZvbGRlcjsKKwkJX3dhaXRGb3JLTUwgPSB3YWl0OworCQlfZmlsZU5hbWUgPSBmaWxlOworCQlfZGVsYXkgPSBMb25nLnBhcnNlTG9uZyhkZWxheSkqMTAwMDsKKwkJdGltZUxhc3RVc2VkID0gbmV3IERhdGUoKS5nZXRUaW1lKCk7CisJfQorCisJLyoqCisJICogY2FsbGVkIHRvIGNoZWNrIGlmIGl0IHNob3VsZCBiZSBleHBpcmVkIGFuZCBkZWxldGVkCisJICogZnJvbSB0aGUgbWFwIG9mIG91dHN0YW5kaW5nIGVudHJpZXMKKwkgKiAKKwkgKiBAcmV0dXJuIHRydWUgaWYgc2Vzc2lvbiBzaG91bGQgYmUgZXhwaXJlZAorCSAqLworCXB1YmxpYyBib29sZWFuIGlzRXhwaXJlZCgpIHsKKwkJbG9uZyBub3cgPSBuZXcgRGF0ZSgpLmdldFRpbWUoKTsKKwkJbG9uZyB0aW1lVG9MaXZlID0gMjQqNjAqNjAqMTAwMDsgIC8vIDI0IGhvdXJzCisJCWlmICgobm93LXRpbWVMYXN0VXNlZCk+dGltZVRvTGl2ZSkgeworCQkJcmV0dXJuIHRydWU7CQkJCisJCX0KKwkJcmV0dXJuIGZhbHNlOwkJCisJfQorCS8qKgorCSAqIEByZXR1cm4gdGhlIGtleSB1c2VkIHRvIHN0b3JlIHRoaXMgaW5mby4KKwkgKi8KKwlwdWJsaWMgU3RyaW5nIGdldEtleSgpIHsKKwkJdGltZUxhc3RVc2VkID0gbmV3IERhdGUoKS5nZXRUaW1lKCk7CisJCXJldHVybiBfa2V5OworCX0KKwkvKioKKwkgKiBAcmV0dXJuIHRoZSBfY291bnRlcgorCSAqLworCXB1YmxpYyBpbnQgZ2V0Q291bnRlcigpIHsKKwkJCisJCXRpbWVMYXN0VXNlZCA9IG5ldyBEYXRlKCkuZ2V0VGltZSgpOworCQkKKwkJcmV0dXJuIF9jb3VudGVyOworCX0KKwkvKioKKwkgKiBEbyBhIGJ1aWx0IGluIGRlbGF5IGlmIG5lZWRlZAorCSAqLworCXB1YmxpYyB2b2lkIGRlbGF5KCkgeworCQlsb25nIG5vdyA9IG5ldyBEYXRlKCkuZ2V0VGltZSgpOworCQlpZiAobm93IDwgdGltZUxhc3RVc2VkK19kZWxheSkgeworCQkJdHJ5IHsKKwkJCQlUaHJlYWQuc2xlZXAoX2RlbGF5KTsKKwkJCX0gY2F0Y2ggKEludGVycnVwdGVkRXhjZXB0aW9uIGUpIHsKKwkJCQkKKwkJCX0JCQkKKwkJfQorCQl0aW1lTGFzdFVzZWQgPSBuZXcgRGF0ZSgpLmdldFRpbWUoKTsJCQorCQlyZXR1cm4gOworCX0KKwkvKioKKwkgKiBAcGFyYW0gX2NvdW50ZXIgdGhlIF9jb3VudGVyIHRvIHNldAorCSAqLworCXB1YmxpYyB2b2lkIHNldENvdW50ZXIoaW50IF9jb3VudGVyKSB7CisJCXRoaXMuX2NvdW50ZXIgPSBfY291bnRlcjsKKwl9CisKKwkvKioKKwkgKiBAcmV0dXJuIHRoZSBfZmlsZXMKKwkgKi8KKwlwdWJsaWMgRmlsZVtdIGdldEZpbGVzKCkgeworCQlyZXR1cm4gX2ZpbGVzOworCX0KKworCS8qKgorCSAqIEBwYXJhbSBfZmlsZXMgdGhlIF9maWxlcyB0byBzZXQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRGaWxlcyhGaWxlW10gX2ZpbGVzKSB7CisJCXRoaXMuX2ZpbGVzID0gX2ZpbGVzOworCX0KKworCS8qKgorCSAqIEByZXR1cm4gdGhlIF9mb2xkZXJOYW1lCisJICovCisJcHVibGljIFN0cmluZyBnZXRGb2xkZXJOYW1lKCkgeworCQlyZXR1cm4gX2ZvbGRlck5hbWU7CisJfQorCisJLyoqCisJICogQHBhcmFtIG5hbWUgdGhlIF9mb2xkZXJOYW1lIHRvIHNldAorCSAqLworCXB1YmxpYyB2b2lkIHNldEZvbGRlck5hbWUoU3RyaW5nIG5hbWUpIHsKKwkJX2ZvbGRlck5hbWUgPSBuYW1lOworCX0KKworCS8qKgorCSAqIEByZXR1cm4gdGhlIF93YWl0Rm9yS01MCisJICovCisJcHVibGljIGJvb2xlYW4gaXNXYWl0Rm9yS01MKCkgeworCQlyZXR1cm4gX3dhaXRGb3JLTUw7CisJfQorCisJLyoqCisJICogQHBhcmFtIGZvcktNTCB0aGUgX3dhaXRGb3JLTUwgdG8gc2V0CisJICovCisJcHVibGljIHZvaWQgc2V0V2FpdEZvcktNTChib29sZWFuIGZvcktNTCkgeworCQlfd2FpdEZvcktNTCA9IGZvcktNTDsKKwl9CisKKwkvKioKKwkgKiBAcmV0dXJuIHRoZSBwYXVzZQorCSAqLworCXB1YmxpYyBib29sZWFuIGlzUGF1c2UoKSB7CisJCXJldHVybiBwYXVzZTsKKwl9CisKKwkvKioKKwkgKiBAcGFyYW0gcGF1c2UgdGhlIHBhdXNlIHRvIHNldAorCSAqLworCXB1YmxpYyB2b2lkIHNldFBhdXNlKGJvb2xlYW4gcGF1c2UpIHsKKwkJdGhpcy5wYXVzZSA9IHBhdXNlOworCX0KKworCS8qKgorCSAqIEByZXR1cm4gdGhlIGluc2VydAorCSAqLworCXB1YmxpYyBTdHJpbmdbXSBnZXRJbnNlcnQoKSB7CisJCXJldHVybiBpbnNlcnQ7CisJfQorCisJLyoqCisJICogQHBhcmFtIGluc2VydCB0aGUgaW5zZXJ0IHRvIHNldAorCSAqLworCXB1YmxpYyB2b2lkIHNldEluc2VydChTdHJpbmdbXSBpbnNlcnQpIHsKKwkJdGhpcy5pbnNlcnQgPSBpbnNlcnQ7CisJfQorCisJLyoqCisJICogQHJldHVybiB0aGUgX2ZpbGVOYW1lCisJICovCisJcHVibGljIFN0cmluZyBnZXRGaWxlTmFtZSgpIHsKKwkJcmV0dXJuIF9maWxlTmFtZTsKKwl9CisKKwkvKioKKwkgKiBAcGFyYW0gbmFtZSB0aGUgX2ZpbGVOYW1lIHRvIHNldAorCSAqLworCXB1YmxpYyB2b2lkIHNldEZpbGVOYW1lKFN0cmluZyBuYW1lKSB7CisJCV9maWxlTmFtZSA9IG5hbWU7CisJfQorCisJLyoqCisJICogQHJldHVybiB0aGUgX0JCT1gKKwkgKi8KKwlwdWJsaWMgU3RyaW5nIGdldEJCT1goKSB7CisJCXJldHVybiBfQkJPWDsKKwl9CisKKwkvKioKKwkgKiBAcGFyYW0gYmJveCB0aGUgX0JCT1ggdG8gc2V0CisJICovCisJcHVibGljIHZvaWQgc2V0QkJPWChTdHJpbmcgYmJveCkgeworCQlfQkJPWCA9IGJib3g7CisJfQorfQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLmdlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL2dlL3NlcnZsZXQvU2xpZGVTaG93U2VydmxldC5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLmdlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL2dlL3NlcnZsZXQvU2xpZGVTaG93U2VydmxldC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhjYTliYTgKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkuZ2Uvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvZ2Uvc2VydmxldC9TbGlkZVNob3dTZXJ2bGV0LmphdmEKQEAgLTAsMCArMSw3NjIgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS51aS5nZS5zZXJ2bGV0OworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovIAoraW1wb3J0IGphdmEuaW8uQnVmZmVyZWRSZWFkZXI7CitpbXBvcnQgamF2YS5pby5GaWxlOworaW1wb3J0IGphdmEuaW8uRmlsZUZpbHRlcjsKK2ltcG9ydCBqYXZhLmlvLkZpbGVJbnB1dFN0cmVhbTsKK2ltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOworaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW07CitpbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbVJlYWRlcjsKK2ltcG9ydCBqYXZhLmlvLk91dHB1dFN0cmVhbTsKK2ltcG9ydCBqYXZhLmlvLlByaW50V3JpdGVyOworaW1wb3J0IGphdmEubmV0LlVSTEVuY29kZXI7CitpbXBvcnQgamF2YS51dGlsLkFycmF5czsKK2ltcG9ydCBqYXZhLnV0aWwuQ29tcGFyYXRvcjsKK2ltcG9ydCBqYXZhLnV0aWwuRGF0ZTsKK2ltcG9ydCBqYXZhLnV0aWwuRW51bWVyYXRpb247CitpbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7CisKK2ltcG9ydCBqYXZheC5zZXJ2bGV0LlNlcnZsZXRDb25maWc7CitpbXBvcnQgamF2YXguc2VydmxldC5TZXJ2bGV0RXhjZXB0aW9uOworaW1wb3J0IGphdmF4LnNlcnZsZXQuaHR0cC5IdHRwU2VydmxldDsKK2ltcG9ydCBqYXZheC5zZXJ2bGV0Lmh0dHAuSHR0cFNlcnZsZXRSZXF1ZXN0OworaW1wb3J0IGphdmF4LnNlcnZsZXQuaHR0cC5IdHRwU2VydmxldFJlc3BvbnNlOworCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS51aS5BY3RpdmF0b3I7CisKKworLyoqCisgKiBTbGlkZVNob3dTZXJ2bGV0IHNlbmRzIGJhY2sgYSB2YWxpZCBLTUwgZmlsZSBmb3IgYSBHRVQgb3IgUE9TVAorICogYWN0aW9uCisgKiA8cHJlPgorICogVGhlIHdheSB0aGF0IGl0IHdvcmtzIGlzIHRoaXM6CisgKiAgCisgKiAgICBBIEtNTCBmaWxlIGlzIGxhdW5jaGVkIHRvIEdvb2dsZUVhcnRoIHRoYXQgCisgKiAgICBoYXMgYSBuZXR3b3JrIGxpbmsgd2l0aCB0aGUgZm9sbG93aW5nIFVSTAorICogICAgaHR0cDovL2xvY2FsaG9zdDo4MDgwL1NsaWRlU2hvdy9zbGlkZXNob3c/aWQ9PGlkPiZhbXA7Zm9sZGVyPTxwYXRoPgorICogICAgd2hlcmUgPGlkPiBpcyBhIHVuaXF1ZSBpZAorICogICAgICAgICAgPHBhdGg+IGlzIHRoZSBkaXJlY3RvcnkgY29udGFpbmluZyB0aGUgCisgKiAgICAgICAgICAgIGttbCBmaWxlcyBnZW5lcmF0ZWQgYnkgU1RFTS4KKyAqICAgIAorICogICAgIEdvb2dsZUVhcnRoIHdpbGwgdGhlbiBpc3N1ZSBodHRwIEdFVCByZXF1ZXN0cyB3aXRoIAorICogICAgIHRoZSBzcGVjaWZpZWQgVVJMIHdoaWNoIHdpbGwgY2F1c2UgdGhpcyBzZXJ2bGV0J3MgCisgKiAgICAgZG9HZXQoKSBtZXRob2QgdG8gYmUgaW52b2tlZC4gIAorICogICAgIAorICogICAgIEl0IHJldHJpZXZlcyB0aGUgY29ycmVjdCBmaWxlIGluIG9uZSBvZiAyIHdheXM6CisgKiAgICAgCisgKiAgICAgVGhlIHNlcnZsZXQga2VlcHMgYSBtYXAgb2YgaW5mbyBrZXllZCBieSB0aGUgPGlkPiB0aGF0CisgKiAgICAgaGFzIGEgbGlzdCBvZiBmaWxlcyB0aGF0IHdhcyBmb3VuZCBpbiB0aGUgZm9sZGVyIAorICogICAgIGFuZCBhIGNvdW50ZXIgdGhhdCBpcyB1c2VkIHRvIHNlbmQgYmFjayB0aGUgTid0aCBmaWxlLgorICogICAgIGFuZCBpbmNyZW1lbnQgTi4KKyAqICAgICAKKyAqICAgICBJZiBhIGZpbGVuYW1lIHdhcyBzcGVjaWZpZWQgaW4gdGhlIFVSTCAKKyAqICAgICAgIGh0dHA6Ly9sb2NhbGhvc3Q6ODA4MC9TVEVNL3NsaWRlc2hvdz8uLi5maWxlPTxmaWxlbmFtZT4KKyAqICAgICB0aGVuIHRoYXQgZmlsZSB3aWxsIGJlIHJlYWQgYW5kIHJldHVybmVkIHRvIEdFLgorICogICAgIFRoaXMgZmlsZSB3aWxsIGFsd2F5cyBiZSB0aGUgbW9zdCByZWNlbnRseSBnZW5lcmF0ZWQgCisgKiAgICAgS01MIGZpbGUuICBUaGlzIHdpbGwgaGVscCBlbnN1cmUgdGhhdCBHRSBkb2VzIG5vdCBmYWxsCisgKiAgICAgYmVoaW5kIHRoZSBTVEVNIHNpbXVsYXRpb24uICAKKyAqIDwvcHJlPiAgICAgIAorICogICAgICAgICAgICAgCisgKi8KK3B1YmxpYyBjbGFzcyBTbGlkZVNob3dTZXJ2bGV0IGV4dGVuZHMgSHR0cFNlcnZsZXQgeworICAgIC8qKgorCSAqIAorCSAqLworCXByaXZhdGUgc3RhdGljIGZpbmFsIGxvbmcgc2VyaWFsVmVyc2lvblVJRCA9IDFMOworICAgCisJLyoqCisJICogVXNlZCBieSB0aGlzIGFuZCBvdGhlciBzZXJ2bGV0cyB0byBjb250cm9sIGRlYnVnIG91dHB1dAorCSAqLworICAgIHB1YmxpYyBzdGF0aWMgYm9vbGVhbiBERUJVRyA9IGZhbHNlOworICAgIAorICAgIC8vcHVibGljIHN0YXRpYyBib29sZWFuIERFQlVHID0gdHJ1ZTsKKyAgICAvKioKKyAgICAgKiBjaGFuZ2UgdG8gdHJ1ZSB0byBjYXVzZSBvdXRwdXQgdG8gYmUgc2VudCB0byBjb25zb2xlIGluc3RlYWQgCisgICAgICogb2YgR0UKKyAgICAgKi8KKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBib29sZWFuIFRFU1QgPSBmYWxzZTsKKyAgICAKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBsb25nIHN0YXJ0ID0gbmV3IERhdGUoKS5nZXRUaW1lKCk7CisgICAgLyoqCisgICAgICogU2VydmxldCBjb250ZXh0LiAgCisgICAgICogCisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgQ09OVEVYVCA9ICJTVEVNIjsKKyAgICAvKioKKyAgICAgKiBkZWZhdWx0IGZvbGRlciBmb3IgS01MIGZpbGVzLgorICAgICAqLworICAgIHN0YXRpYyBmaW5hbCBTdHJpbmcgU1RFTV9GT0xERVIgPSAiYzpcXHRtcFxcZ2UiOworICAgIAorICAgIC8qKgorICAgICAqIGNvbGxlY3Rpb24gb2YgaW5mb3JtYXRpb24gYWJvdXQgYSBzZXNzaW9uCisgICAgICogS2V5ID0gaWQgcGFzc2VkIHRvIHNlcnZsZXQgCisgICAgICogCisgICAgICovICAgICAgIAorICAgIAorICAgIHByaXZhdGUgc3RhdGljIEhhc2hNYXA8U3RyaW5nLFNsaWRlU2hvd0luZm8+IF9pbmZvTWFwID0gbnVsbDsKKyAgICAKKyAgICAvKioKKyAgICAgKiBzZXQgdHJ1ZSB3aGVuIHdlIGdldCBhIHJlcXVlc3QgdGhhdCBvbmx5IHNldHMgdGhlIEJCb3ggaW5mbworICAgICAqLworICAgIHByaXZhdGUgYm9vbGVhbiBiYm94U2V0ID0gZmFsc2U7ICAgIAorICAgIC8qKgorICAgICAqICBIYW5kbGUgdGhlIGluaXRpYWwgc2V0dXAgCisgICAgICovCisJcHVibGljIHZvaWQgaW5pdChTZXJ2bGV0Q29uZmlnIGNvbmZpZykgdGhyb3dzIFNlcnZsZXRFeGNlcHRpb24geworCQkgICAgc3VwZXIuaW5pdChjb25maWcpOworCQkgICAgLy9kZWJ1ZygiaW5pdDogRGVmYXVsdCBmb2xkZXI9IitTVEVNX0ZPTERFUik7CQkgCisJCSAgIAorCQkgICAgX2luZm9NYXAgPSBuZXcgSGFzaE1hcDxTdHJpbmcsU2xpZGVTaG93SW5mbz4oKTsJCSAgICAKKwkJICAgIAorCSB9CisgICAgCisJLyogKG5vbi1KYXZhZG9jKQorCSAqIEBzZWUgamF2YXguc2VydmxldC5odHRwLkh0dHBTZXJ2bGV0I2RvR2V0KGphdmF4LnNlcnZsZXQuaHR0cC5IdHRwU2VydmxldFJlcXVlc3QsIGphdmF4LnNlcnZsZXQuaHR0cC5IdHRwU2VydmxldFJlc3BvbnNlKQorCSAqLworCXByb3RlY3RlZCB2b2lkIGRvR2V0KEh0dHBTZXJ2bGV0UmVxdWVzdCByZXF1ZXN0LCBIdHRwU2VydmxldFJlc3BvbnNlIHJlc3BvbnNlKQorICAgICAgICAgICAgdGhyb3dzIFNlcnZsZXRFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKKwkJCisJCWRvUG9zdChyZXF1ZXN0LCByZXNwb25zZSk7Cit9CisKKyAgICAvKiAobm9uLUphdmFkb2MpCisgICAgICogQHNlZSBqYXZheC5zZXJ2bGV0Lmh0dHAuSHR0cFNlcnZsZXQjZG9Qb3N0KGphdmF4LnNlcnZsZXQuaHR0cC5IdHRwU2VydmxldFJlcXVlc3QsIGphdmF4LnNlcnZsZXQuaHR0cC5IdHRwU2VydmxldFJlc3BvbnNlKQorICAgICAqLworICAgIHByb3RlY3RlZCB2b2lkIGRvUG9zdChIdHRwU2VydmxldFJlcXVlc3QgcmVxdWVzdCxIdHRwU2VydmxldFJlc3BvbnNlIHJlc3BvbnNlKSAKKyAgICAgICAgICAgIHRocm93cyBTZXJ2bGV0RXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7CisgICAgCQkJCisJCWludCBjb3VudGVyID0gMDsKKwkJCSAgICAKKwkgICAgU3RyaW5nIGZpbGVOYW1lID0gbnVsbDsKKwkJU2xpZGVTaG93SW5mbyBpbmZvID0gbnVsbDsKKwkJCisJCUZpbGVbXSBmaWxlcyA9IG51bGw7CisJCQorCQl0cnkgeworCQkJLy8gZ2V0IGluZm8gZnJvbSB1cmwKKwkJCWluZm8gPSBnZXRQYXJhbWV0ZXJzKHJlcXVlc3QpOworCQkJU3RyaW5nIGtleSA9IGluZm8uZ2V0S2V5KCk7CisJCQlpZiAoYmJveFNldCkgeworCQkJCS8vIFRoaXMgd2FzIGEgcmVxdWVzdCB0byByZXR1cm4gQkJPWCBvbmx5CisJCQkJcHJvY2Vzc05vT3AocmVxdWVzdCxyZXNwb25zZSk7CisJCQl9CisJCQkvLyBtYWtlIHN1cmUgdGhlcmUgaXMgc29tZSBkZWxheSBiZXR3ZWVuIHJlcXVlc3RzCisJCQlpbmZvLmRlbGF5KCk7CQkJCisJCQlmaWxlTmFtZSA9IGluZm8uZ2V0RmlsZU5hbWUoKTsKKwkJCWlmIChmaWxlTmFtZSAhPSBudWxsKSB7CQorCQkJCS8vIGdldCBhIHNwZWNpZmljIGZpbGUKKwkJCQkKKwkJCQlwcm9jZXNzRmlsZShyZXF1ZXN0LHJlc3BvbnNlLGluZm8sZmlsZU5hbWUpOyAKKwkJCQlyZXR1cm47CisJCQl9IGVsc2UgeworCQkJICAvLyBnZXQgc2F2ZWQgbGlzdCBvZiBmaWxlcwkKKwkJCSAgZmlsZXMgPSBpbmZvLmdldEZpbGVzKCk7CisJCQkgIC8vIGlmIG5ldmVyIGZpbGxlZCBpbgorCQkJICBpZiAoZmlsZXMgPT0gbnVsbCkgeworCQkJCSAgLy8gZ2V0IHVwZGF0ZWQgbGlzdCBvZiBmaWxlcworCQkJCSBmaWxlcyA9IGdldEZpbGVzKGluZm8pOworCQkJICB9CisJCQkKKwkJCX0gCisJCQljb3VudGVyID0gZ2V0Q291bnRlcihyZXF1ZXN0LHJlc3BvbnNlLGluZm8pOworCQkJLy8gZ2V0Q291bnRlciB3aWxsIGhhdmUgdXBkYXRlZCBpbmZvLmdldEZpbGVzCisJCQlmaWxlcyA9IGluZm8uZ2V0RmlsZXMoKTsgLy8gYWRkZWQgZmlsZXMJCQkKKwkJCWlmIChmaWxlcy5sZW5ndGggPT0gMCkgeworCQkJCS8vIGlmIG5vIC5rbWwgZmlsZXMgaW4gZm9sZGVyCisJCQkJaWYgKGluZm8uaXNXYWl0Rm9yS01MKCkpIHsKKwkJCQkJc2VuZFNjcmVlbk92ZXJsYXkocmVxdWVzdCwgcmVzcG9uc2UsICJXYWl0aW5nIHRvIFN0YXJ0Iik7CisKKwkJCQl9IGVsc2UgeworCQkJCQlyZXNwb25zZS5zZW5kRXJyb3IoSHR0cFNlcnZsZXRSZXNwb25zZS5TQ19CQURfUkVRVUVTVCwKKwkJCQkJIk5vIEtNTCBmaWxlcyBpbiBzcGVjaWZpZWQgZm9sZGVyLiIpOworCQkJCX0KKwkJCQlyZXR1cm47CisJCQl9CQorCQkJRmlsZSBrbWxGaWxlID0gZmlsZXNbY291bnRlcl07CisvLwkJCVN0cmluZyBwcmludCA9ICJrZXk6ICIra2V5KyIgQ291bnRlcjogIiArIGNvdW50ZXIgKworLy8JCQkiIGFkZHI6ICIgKyByZXF1ZXN0LmdldFNlcnZlck5hbWUoKSArICI6IityZXF1ZXN0LmdldFNlcnZlclBvcnQoKSsKKy8vCQkJIiAjZmlsZXM6ICIrZmlsZXMubGVuZ3RoICsKKy8vCQkJIiBrbWxGaWxlOiAiK2ttbEZpbGUuZ2V0QWJzb2x1dGVQYXRoKCk7CisJCQkvL2RlYnVnKHByaW50KTsKKwkJCWRlYnVnKCJTZW5kIHRvIEdFOiAiK2ttbEZpbGUpOworCQkJCisJCQlGaWxlSW5wdXRTdHJlYW0gZmlzID0gbmV3IEZpbGVJbnB1dFN0cmVhbShrbWxGaWxlKTsKKwkJCS8vIGluc2VydCBpcyBhZGRpdGlvYWwgS01MIHRvIGJlIHNlbnQgd2l0aCBvdXRwdXQKKwkJCVN0cmluZ1tdIGluc2VydCA9IGluZm8uZ2V0SW5zZXJ0KCk7CisJCQkKKwkJCXNlbmRPdXRwdXQocmVxdWVzdCxyZXNwb25zZSwgZmlzLGluc2VydCApOworCQkJaW5mby5zZXRDb3VudGVyKGNvdW50ZXIpOworCQkJX2luZm9NYXAucHV0KGtleSwgaW5mbyk7CisJCX0gY2F0Y2ggKFRocm93YWJsZSBlKSB7CQkJCisJCQllLnByaW50U3RhY2tUcmFjZSgpOworCQkJcmVzcG9uc2Uuc2VuZEVycm9yKEh0dHBTZXJ2bGV0UmVzcG9uc2UuU0NfSU5URVJOQUxfU0VSVkVSX0VSUk9SLAorCQkJCQllLmdldE1lc3NhZ2UoKSk7CisJCX0KKwl9CisKKwkKKyAgICAvKioKKyAgICAgKiBHZXQgdGhlIGNvdW50ZXIgdGhhdCBrZWVwcyB0cmFjayBvZiB3aGljaCBmaWxlCisgICAgICogaXMgdG8gYmUgcHJvY2Vzc2VkIG5leHQuCisgICAgICogCisgICAgICogSXQgZG9lcyBtb3JlIHRoYXRuIGp1c3QgZ2V0IHRoZSBuZXh0IHZhbHVlIGZvciB0aGUgY291bnRlciwKKyAgICAgKiBpdCB3aWxsIGNoZWNrIGlmIHRoZXJlIGFyZSBtb3JlIGZpbGVzIHRvIHByb2Nlc3MgYW5kIGlmIG5vdAorICAgICAqIGRvIHRoZSBoYW5kbGluZyBvZiB0aGlzIGNhc2UuICAKKyAgICAgKiAKKyAgICAgKiBAcGFyYW0gcmVxdWVzdCAgU2VydmxldFJlcXVlc3QKKyAgICAgKiBAcGFyYW0gcmVzcG9uc2UgU2VydmxldFJlc3BvbnNlCisgICAgICogQHBhcmFtIGluZm8gICBpbnN0YW5jZSBvZiBpbmZvcm1hdGlvbiBzYXZlZCBmcm9tIHN0ZXAgdG8gc3RlcAorICAgICAqIEByZXR1cm4gTiB3aGVyZSB3ZSB3YW50IHRvIGRpc3BsYXkgdGhlIE50aCBmaWxlCisgICAgICogICAgICAgICAgIGZyb20gdGhlIHNwZWNpZmllZCBmb2xkZXIuICAKKyAgICAgKiAgICAgICAgICAgMCBpZiBzdGFydGluZyBvdmVyIAorICAgICAqICAgICAgICAgICAKKyAgICAgKiBAdGhyb3dzIEV4Y2VwdGlvbgorICAgICAqLworICAgIHN5bmNocm9uaXplZCAKKyAgICBwcml2YXRlIGludCBnZXRDb3VudGVyKEh0dHBTZXJ2bGV0UmVxdWVzdCByZXF1ZXN0LAorICAgIAkJICAgICAgICAgICAgICAgSHR0cFNlcnZsZXRSZXNwb25zZSByZXNwb25zZSwKKyAgICAJCSAgICAgICAgICAgICAgIFNsaWRlU2hvd0luZm8gaW5mbykgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3dzIEV4Y2VwdGlvbnsKKwkJCisJCWludCBjb3VudGVyID0gaW5mby5nZXRDb3VudGVyKCk7CisJCWNvdW50ZXIrKzsKKwkJCisJCS8vIGlmIGRvbmUgYWxsIG9mIGZpbGVzIGN1cnJlbnRseSBpbiBsaXN0CisJCWludCB3YWl0cyA9IDEwOyAvLyB3YWl0IGZvciAxMCBzZWNvbmRzCisJCWludCBtYXggPSBpbmZvLmdldEZpbGVzKCkubGVuZ3RoOworCQl3aGlsZSAodHJ1ZSkgeworCQkgIAorCQkgIGlmIChjb3VudGVyID49IG1heCkgeworIAkJCSAvLyByZWFjaGVkIGVuZCBvZiBmaWxlbGlzdAorCQkJCisJCQlpZiAoaW5mby5pc1dhaXRGb3JLTUwoKSkgeworCQkJCVRocmVhZC5zbGVlcCgxKjEwMDApOworCQkJICAgIGluZm8uc2V0RmlsZXMobnVsbCk7CisJCQkgICAgZ2V0RmlsZXMoaW5mbyk7CisJCQkgICAgbWF4ID0gaW5mby5nZXRGaWxlcygpLmxlbmd0aDsKKwkJCSAgICAKKwkJCSAgICB3YWl0cy0tOworCQkJICAgIGlmICh3YWl0cyA+IDApIAorCQkJICAgIAljb250aW51ZTsKKwkJCSAgICAvLyB3YWl0ZWQgYW5kIHN0aWxsIG5vIG1vcmUgZmlsZXMKKwkJCSAgICAvLyBpbmRpY2F0ZSB0byB1c2VyIHdlIGFyZSBwYXVzZWQKKwkJCSAgICBjb3VudGVyID0gbWF4LTE7CisJCQkgICAgaWYgKCEgaW5mby5pc1BhdXNlKCkpIHsKKwkJCQkJLy8gaWYgd2UgaGF2ZSBub3QgeWV0IGNsYWltZWQgdG8gYmUgcGF1c2luZworCQkJICAgICAgICAvL2RlYnVnKCJwYXVzZTogIik7CQkJCQkJCQkJCisgICAgICAgICAgICAgICAgICAgIGluZm8uc2V0UGF1c2UodHJ1ZSk7CSAgICAgICAgCisJCQkgICAgICAgIC8vIHNlbmQgcGF1c2UgYXMgaWNvbiB0byBHRQorICAgICAgICAgICAgICAgICAgICBTdHJpbmcgaG9zdCA9IGdldEhvc3QocmVxdWVzdCk7CQkJCisgICAgCQkgICAgCVN0cmluZyB1cmwgPSAiaHR0cDovLyIraG9zdCsiLyIrCisgICAgCQkJCSAgICBDT05URVhUKyIvaW1hZ2U/dGV4dD0iKworICAgIAkJCQkgICAgVVJMRW5jb2Rlci5lbmNvZGUoIlBhdXNlZCIsIlVURi04Iik7CisgICAgCQkJCVN0cmluZ1tdIGluc2VydCA9IGJ1aWxkU2NyZWVuT3ZlcmxheSh1cmwpOworICAgIAkJCQlpbmZvLnNldEluc2VydChpbnNlcnQpOworCQkJICAgIH0KKwkJCSAgICBicmVhazsKKwkJCX0gZWxzZSB7CisJCQkJLy8gcGF1c2UgYmVmb3JlIHJlc3RhcnRpbmcKKwkJCQkvLyBUT0RPIHJlbW92ZSBkZWJ1ZworCQkJCWRlYnVnKCJQYXVzZSAxMCBzZWNvbmRzIGJlZm9yZSByZXN0YXJ0aW5nIik7CisJCQkJVGhyZWFkLnNsZWVwKDEwKjEwMDApOworCQkJCWNvdW50ZXIgPSAwOworCQkJCWJyZWFrOworCQkJfQorCQkgIH0gZWxzZSB7CisJCQlpZiAoaW5mby5pc1BhdXNlKCkpIHsKKwkJCQkvL2RlYnVnKCJDaGFuZ2UgcGF1c2UgdG8gYWN0aXZlIik7CisJCQkJLy8gd2Ugd2VyZSBwYXVzZWQgc28gY2hhbmdlIGltYWdlIHRvIGFjdGl2ZQorCQkJCWluZm8uc2V0UGF1c2UoZmFsc2UpOworCQkJCVRocmVhZC5zbGVlcCgyKjEwMDApOworCQkJCVN0cmluZyBob3N0ID0gZ2V0SG9zdChyZXF1ZXN0KTsJCQkKKwkJICAgIAlTdHJpbmcgdXJsID0gImh0dHA6Ly8iK2hvc3QrIi8iKworCQkJCSAgICBDT05URVhUKyIvaW1hZ2U/dGV4dD0iKworCQkJCSAgICBVUkxFbmNvZGVyLmVuY29kZSgiQWN0aXZlIiwiVVRGLTgiKTsKKwkJICAgIAkKKwkJCQlTdHJpbmdbXSBpbnNlcnQgPSBidWlsZFNjcmVlbk92ZXJsYXkodXJsKTsKKwkJCQlpbmZvLnNldEluc2VydChpbnNlcnQpOworCQkJICAgIAorCQkJfSAKKwkJCWJyZWFrOworCQkgIH0gCisJCX0gLy8gd2hpbGUodHJ1ZSkKKwkJCisJCXJldHVybiBjb3VudGVyOwkKKwkJCisgICAgfQorICAgIC8qKgorICAgICAqIHNlbmQgYmFjayBhbiBlbXB0eSByZXNwb25zZQorICAgICAqIAorICAgICAqIEBwYXJhbSByZXF1ZXN0CisgICAgICogQHBhcmFtIHJlc3BvbnNlCisgICAgICoKKyAgICAgKiBAdGhyb3dzIFNlcnZsZXRFeGNlcHRpb24KKyAgICAgKiBAdGhyb3dzIElPRXhjZXB0aW9uCisgICAgICovCisJCisJcHJpdmF0ZSB2b2lkIHByb2Nlc3NOb09wKEh0dHBTZXJ2bGV0UmVxdWVzdCByZXF1ZXN0LAorCQkJSHR0cFNlcnZsZXRSZXNwb25zZSByZXNwb25zZSkgCisJICAgICAgICAgICAgICAgdGhyb3dzIFNlcnZsZXRFeGNlcHRpb24sIElPRXhjZXB0aW9ueworCQl0cnkgeworCQkJCisJCQlQcmludFdyaXRlciBvcyA9IG5ldyBQcmludFdyaXRlcihyZXNwb25zZS5nZXRPdXRwdXRTdHJlYW0oKSk7CisJCQkvL1ByaW50U3RyZWFtIG9zID0gU3lzdGVtLm91dDsKKwkJCXJlc3BvbnNlLnNldENvbnRlbnRUeXBlKCJhcHBsaWNhdGlvbi9rZXlob2xlIik7CisKKwkJCW9zLnByaW50bG4oIjw/eG1sIHZlcnNpb249XCIxLjBcIiBlbmNvZGluZz1cIlVURi04XCI/PiIpOworCQkJb3MucHJpbnRsbigiPGttbCB4bWxucz1cImh0dHA6Ly9lYXJ0aC5nb29nbGUuY29tL2ttbC8yLjBcIj4iKTsKKwkJCW9zLnByaW50bG4oIjxEb2N1bWVudD4iKTsJCQkKKwkJCW9zLnByaW50bG4oIjwvRG9jdW1lbnQ+Iik7CisJCQlvcy5wcmludGxuKCI8L2ttbD4iKTsKKworCQkJb3MuZmx1c2goKTsgCisJCX0gY2F0Y2ggKFRocm93YWJsZSBlKSB7CQkJCisJCQllLnByaW50U3RhY2tUcmFjZSgpOworCQkJcmVzcG9uc2Uuc2VuZEVycm9yKEh0dHBTZXJ2bGV0UmVzcG9uc2UuU0NfSU5URVJOQUxfU0VSVkVSX0VSUk9SLGUuZ2V0TWVzc2FnZSgpKTsKKwkJfQorCX0KKyAgICAvKioKKyAgICAgKiBQcm9jZXNzIGEgcmVxdWVzdCB0byBzZXJ2ZSB1cCBhIHNwZWNpZmljIGZpbGUKKyAgICAgKiAKKyAgICAgKiBAcGFyYW0gcmVxdWVzdAorICAgICAqIEBwYXJhbSByZXNwb25zZQorICAgICAqIEBwYXJhbSBmaWxlTmFtZQorICAgICAqIEB0aHJvd3MgU2VydmxldEV4Y2VwdGlvbgorICAgICAqIEB0aHJvd3MgSU9FeGNlcHRpb24KKyAgICAgKi8KKwkKKwlwcml2YXRlIHZvaWQgcHJvY2Vzc0ZpbGUoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcXVlc3QsCisJCQlIdHRwU2VydmxldFJlc3BvbnNlIHJlc3BvbnNlLAorCQkJU2xpZGVTaG93SW5mbyBpbmZvLCBTdHJpbmcgZmlsZU5hbWUpIAorCSAgICAgICAgICAgICAgIHRocm93cyBTZXJ2bGV0RXhjZXB0aW9uLCBJT0V4Y2VwdGlvbnsKKwkJdHJ5IHsKKwkJCQorCQkJRmlsZSBrbWxGaWxlID0gbmV3IEZpbGUoZmlsZU5hbWUpOwkKKwkJCVN0cmluZyBvbGRGaWxlTmFtZSA9IGZpbGVOYW1lLnJlcGxhY2UoIl9DdXJyZW50IiwiX09sZCIpOworCQkJRmlsZSBvbGRGaWxlID0gbmV3IEZpbGUob2xkRmlsZU5hbWUpOworCQkJU3RyaW5nW10gaW5zZXJ0ID0gaW5mby5nZXRJbnNlcnQoKTsJCisJCQlGaWxlSW5wdXRTdHJlYW0gZmlzICA9IG51bGw7CisJCQlpbnQgY291bnRlciA9IDA7CisgICAgICAgICAgICB3aGlsZSAodHJ1ZSkgeyAgICAgICAgICAgIAorCQkJICAgIHRyeSB7CisJCQkgICAgCWlmICghIGttbEZpbGUuZXhpc3RzKCkgKSB7CQkJICAgIAkJCisJCQkgICAgCQlUaHJlYWQuc2xlZXAoMioxMDAwKTsKKwkJCSAgICAJCWNvdW50ZXIrKzsKKwkJCSAgICAJCS8vIGFmdGVyIDIwIHNlY29uZHMgdXNlIG9sZCBmaWxlCisJCQkgICAgCQlpZiAoY291bnRlciA+IDEwKSB7CisJCQkgICAgCQkJcmVuYW1lKG9sZEZpbGUsa21sRmlsZSk7CQkJICAgIAkJCQorCQkJICAgIAkJfSAKKwkJCSAgICAJCWNvbnRpbnVlOworCQkJICAgIAl9CisJCQkJCWZpcyA9IG5ldyBGaWxlSW5wdXRTdHJlYW0oa21sRmlsZSk7CQorCQkJCQkvL2RlYnVnKCIga21sRmlsZTogIitrbWxGaWxlLmdldEFic29sdXRlUGF0aCgpKTsKKwkJCQkJYnJlYWs7CisJCQkJfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsJCQkJCQorCQkJCQllcnJvcigicHJvY2Vzc0ZpbGUgZmFpbGVkIixlKTsKKwkJCQkJcmV0dXJuOworCQkJCX0JCQkJCisgICAgICAgICAgICB9CisgICAgICAgICAgICBkZWJ1ZygiU2VuZCB0byBHRTogIitrbWxGaWxlKTsKKyAgICAgICAgICAgIHNlbmRPdXRwdXQocmVxdWVzdCxyZXNwb25zZSwgZmlzLGluc2VydCApOworICAgICAgICAgICAKKyAgICAgICAgICAgIHJlbmFtZShrbWxGaWxlLG9sZEZpbGUpOworICAgICAgICAgICAgCisJCX0gY2F0Y2ggKFRocm93YWJsZSBlKSB7CQkJCisJCQllLnByaW50U3RhY2tUcmFjZSgpOworCQkJcmVzcG9uc2Uuc2VuZEVycm9yKEh0dHBTZXJ2bGV0UmVzcG9uc2UuU0NfSU5URVJOQUxfU0VSVkVSX0VSUk9SLGUuZ2V0TWVzc2FnZSgpKTsKKwkJfQorCX0gIAorCQorCQorCS8qKgorCSAqIHN3aXRjaCBmaWxlcyBieSByZW5hbWluZworCSAqLworCXByaXZhdGUgYm9vbGVhbiByZW5hbWUoRmlsZSBvbGRGaWxlLCBGaWxlIG5ld0ZpbGUpIHsKKwkJdHJ5IHsKKwkJCWlmIChuZXdGaWxlLmV4aXN0cygpKSAKKwkJCQluZXdGaWxlLmRlbGV0ZSgpOworICAgCisJCQlvbGRGaWxlLnJlbmFtZVRvKG5ld0ZpbGUpOworCQl9IGNhdGNoIChSdW50aW1lRXhjZXB0aW9uIGUpIHsKKwkJCXJldHVybiBmYWxzZTsKKwkJfQorCQlyZXR1cm4gdHJ1ZTsKKwl9CisJLyoqCisJICogQHBhcmFtIHJlcXVlc3QKKwkgKi8KKwlwcml2YXRlIFN0cmluZyBnZXRIb3N0KEh0dHBTZXJ2bGV0UmVxdWVzdCByZXF1ZXN0KSB7CisJCWludCBwb3J0ID0gcmVxdWVzdC5nZXRTZXJ2ZXJQb3J0KCk7CQkgICAgCQorCQlTdHJpbmcgaG9zdCA9IHJlcXVlc3QuZ2V0U2VydmVyTmFtZSgpKyI6Iitwb3J0OworCQlyZXR1cm4gaG9zdDsKKwl9CisJCisgICAgLyoqCisgICAgICogR2V0IHRoZSBsaXN0IG9mIGZpbGVzIGluIHRoZSBmb2xkZXIKKyAgICAgKiAgICAgIAorICAgICAqICAKKyAgICAgKiBAcGFyYW0gaW5mbyAgaW5zdGFuY2UgdGhhdCBob2xkcyBtaXNjIGluZm8gYWJvdXQgc2Vzc2lvbgorICAgICAqIEByZXR1cm4gYXJyYXkgb2YgRmlsZXMgaW4gdGhlIHNwZWNpZmllZCBmb2xkZXIKKyAgICAgKi8KKyAgICAKKyAgICBwdWJsaWMgRmlsZVtdIGdldEZpbGVzKFNsaWRlU2hvd0luZm8gaW5mbykgeworCQlGaWxlW10gZmlsZXMgPSBudWxsOworCQlGaWxlIGZvbGRlciA9IG51bGw7CisJCXRyeSB7CisJCQlmaWxlcyA9IGluZm8uZ2V0RmlsZXMoKTsKKwkJCQorCQkJaWYgKGZpbGVzID09IG51bGwgfHwgZmlsZXMubGVuZ3RoID09IDApIHsKKwkJCQlmb2xkZXIgPSBuZXcgRmlsZShpbmZvLmdldEZvbGRlck5hbWUoKSk7CQkJCQorCQkJICAgIGZpbGVzID0gZmlsZUxpc3QoZm9sZGVyKTsKKwkJCSAgICBpZiAoZmlsZXMgPT0gbnVsbCkKKwkJCQkJZmlsZXMgPSBuZXcgRmlsZVswXTsKKwkJCSAgICBpbmZvLnNldEZpbGVzKGZpbGVzKTsKKwkJCX0KKwkJfSBjYXRjaCAoUnVudGltZUV4Y2VwdGlvbiBlKSB7CisJCQkKKwkJCWVycm9yKCJnZXRGaWxlcygpIGZhaWxlZC4gIixlKTsKKwkJCWZpbGVzID0gbmV3IEZpbGVbMF07CisJCX0gCQorCQkKKwkJcmV0dXJuIGZpbGVzOwkJCQorICAgIH0KKyAgICAKKy8qKgorICogZ2V0IHRoZSBsaXN0IG9mIGZpbGVzIGluIHRoZSBzcGVjaWZpZWQgZm9sZGVyLgorICogVGhlIGZpbGVzIHdpbGwgb25seSBiZSBmaWxlcyB3aXRoIHRoZSAiLmttbCIgCisgKiBleHRlbnNpb24gYW5kIHdpbGwgYmUgc29ydGVkIGJ5IGZpbGVuYW1lLgorICogQWxzbyBuZXRsaW5rIGZpbGVzIHdpbGwgYmUgZmlsdGVyZWQgb3V0CisgKiAKKyAqIEBwYXJhbSBmb2xkZXIgRGlyZWN0b3J5IHRoYXQgY29udGFpbnMgS01MIGZpbGVzIHRvIGRpc3BsYXkKKyAqIEByZXR1cm4gYXJyYXkgb2Ygc29ydGVkIGZpbGVuYW1lcworICovCisgICAKKyAgcHJpdmF0ZSBGaWxlW10gZmlsZUxpc3QoRmlsZSBmb2xkZXIpIHsKKyAgICAKKyAgICBGaWxlRmlsdGVyIGZmID0gbmV3IEZpbGVGaWx0ZXIoKSB7CisJCXB1YmxpYyBib29sZWFuIGFjY2VwdChGaWxlIGYpeworCQkJaWYgKGYuZ2V0TmFtZSgpLnRvTG93ZXJDYXNlKCkuc3RhcnRzV2l0aCgibmV0IikpIHsKKwkJCQlyZXR1cm4gZmFsc2U7CisJCQl9CisJCQlpZiAoZi5nZXROYW1lKCkudG9Mb3dlckNhc2UoKS5lbmRzV2l0aCgiLmttbCIpKSB7CisJCQkJcmV0dXJuIHRydWU7CisJCQl9CisJCQlyZXR1cm4gZmFsc2U7CisJCX0KKwl9OwkKKwkKKwlDb21wYXJhdG9yPD8gc3VwZXIgRmlsZT4gY29tcGFyZSA9IG5ldyBDb21wYXJhdG9yPEZpbGU+KCkgeworCQlwdWJsaWMgaW50IGNvbXBhcmUoRmlsZSBvMSwgRmlsZSBvMikgeworCQkJRmlsZSBmMSA9IChGaWxlKW8xOworCQkJRmlsZSBmMiA9IChGaWxlKW8yOworCQkJaW50IGFuc3dlciA9IGYxLmdldE5hbWUoKS5jb21wYXJlVG8oZjIuZ2V0TmFtZSgpKTsKKwkJCXJldHVybiBhbnN3ZXI7CisJCX0KKworCX07CisJCisJdHJ5IHsJCQkJCQkKKwkJRmlsZVtdIGZpbGVzID0gZm9sZGVyLmxpc3RGaWxlcyhmZik7CisJCWlmIChmaWxlcyA9PSBudWxsKSB7CisJCQlyZXR1cm4gbmV3IEZpbGVbMF07CisJCX0JCQorCQlBcnJheXMuc29ydChmaWxlcywwLGZpbGVzLmxlbmd0aCxjb21wYXJlKTsKKwkJcmV0dXJuIGZpbGVzOworCX0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CQkKKwkJZS5wcmludFN0YWNrVHJhY2UoKTsKKwkJcmV0dXJuIG51bGw7CisJfQorICB9CisgIC8qKgorCSAqIE9idGFpbiB0aGUgZm9sbG93aW5nIHBhcmFtZXRlcnMgZnJvbSB0aGUgVVJMLgorCSAqIDxwcmU+CisJICogIGlkOiAgQSBrZXkgdGhhdCBtYWtlcyB0aGlzIHNlc3Npb24gdW5pcXVlCisJICogICAgQmVjYXVzZSBHb29nbGVFYXJ0aCBzZXRzIHVwIGEgbmV3IHNlc3Npb24gZm9yIGVhY2ggCisgICAgICogICByZXF1ZXN0LCB3ZSBjYW5ub3QgdXNlIHRoZSBub3JtYWwgU2VydmxldCBzZXNzaW9uIAorICAgICAqICAgcHJvdG9jb2wuICAKKyAgICAgKiAgIFdlIGtlZXAgYSBoYXNobWFwIG9mIHNlc3Npb24gaW5mbyBrZXllZCBieSBhbiBJRCB0aGF0IAorICAgICAqICAgaXMgcGFzc2VkIGluIHRoZSBVUkwgCisgICAgICogIAorICAgICAqICBmb2xkZXI6ICBXaGVyZSB0byBmaW5kIHRoZSBLTUwgZmlsZXMKKyAgICAgKiAgCisgICAgICogIGRlbGF5OiAgIFRpbWUgdG8gZGVsYXkgYmV0d2VlbiByZXR1cm5pbmcgZGF0YQorICAgICAqICAKKyAgICAgKiAgd2FpdDogICAgSWYgInkiIHRoZW0gaWYgbm93IG5ldyBmaWxlcyBzZW5kIGEgInBhdXNlIiBpY29uCisgICAgICogIAorICAgICAqICBmaWxlOiAgICBJZiBzcGNpZmllZCB0aGVuIHJldHVybiB0aGUgc3BlY2lmaWVkIGZpbGUKKyAgICAgKiAgIAorCSAqICBCQk9YOiAgICBJZiBmb3VuZCB0aGVuIEdFIGhhcyByZXR1cm4gdGhlIGN1cnJlbnQgdmlldyBjb29yZGluYXRlcworCSAqICAKKwkgKiAgQkJveFNldDogSWYgZm91bmQgdGhlbiBHRSBoYXMgcmV0dXJuZWQgQkJPWCBhbmQgbm8gYW5zd2VyIGlzIAorCSAqICAgICAgICAgICByZXF1aXJlZC4gCisJICogICAgICAgICAgIAorCSAqICBpZCBpcyB0aGVuIHVzZWQgdG8gYWNjZXNzIGluZm9NYXAgYW5kCisJICogIGFuZCByZXR1cm4gYW4gaW5zdGFuY2Ugb2YgU2xpZGVTaG93SW5mbyB3aGljaCBjb250YWlucyBjdXJyZW50IAorCSAqICBjeWNsZSBjb3VudGVyLCBhcnJheSBvZiBmaWxlcyBhbmQgYm9vbGVhbiB3YWl0IGluZGljYXRvci4KKwkgKiAgSWYgdGhlcmUgaXMgbm8gZXhpc3RpbmcgZW50cnkgdGhlbiBpdCBidWlsZHMgYSBuZXcgCisJICogIFNsaWRlU2hvd0luZm8gaW5zdGFuY2UgZnJvbSB0aGUgdXJsIHBhcmFtZXRlcnMgYW5kIHN0b3JlcyAKKwkgKiAgaXQgaW4gdGhlIGluZm9NYXAuCisJICogIAorCSAqIEBwYXJhbSByZXF1ZXN0ICBTZXJ2bGV0IHJlcXVlc3QgaW5zdGFuY2UuCisJICogQHJldHVybiBpbnN0YW5jZSBvZiBTbGlkZVNob3dJbmZvIAorCSAqLworCXByaXZhdGUgU2xpZGVTaG93SW5mbyBnZXRQYXJhbWV0ZXJzKEh0dHBTZXJ2bGV0UmVxdWVzdCByZXF1ZXN0KSB7CisJCS8vIGdldCB0aGUgaWQgZnJvbSB0aGUgVVJMIHBhcmFtZXRlcnMuCisJCS8vIGh0dHA6Ly9sb2NhbGhvc3Q6ODA4MC9zbGlkZXNob3c/aWQ9dXNlcmlka2V5CisJCVN0cmluZyBteWtleT0iREVGQVVMVCI7CisJICAgIFN0cmluZyBmb2xkZXJOYW1lID0gU1RFTV9GT0xERVI7CisJICAgIGJvb2xlYW4gd2FpdEZvcktNTCA9IGZhbHNlOworCSAgICBTdHJpbmcgZmlsZU5hbWUgPSBudWxsOworCSAgICBTdHJpbmcgZGVsYXkgPSAiMiI7CisJICAgIFN0cmluZyBiYm94ID0gbnVsbDsKKwkgICAgYmJveFNldCA9IGZhbHNlOworCQlFbnVtZXJhdGlvbiBlID0gcmVxdWVzdC5nZXRQYXJhbWV0ZXJOYW1lcygpOworCQlTdHJpbmdCdWZmZXIgc2IgPSBuZXcgU3RyaW5nQnVmZmVyKCk7CisJCXdoaWxlIChlLmhhc01vcmVFbGVtZW50cygpKSB7CisJCQlTdHJpbmcgbmFtZSA9IChTdHJpbmcpZS5uZXh0RWxlbWVudCgpOworCQkJU3RyaW5nIHZhbHVlID0gKFN0cmluZylyZXF1ZXN0LmdldFBhcmFtZXRlcihuYW1lKTsKKwkJCXNiLmFwcGVuZChuYW1lKyI6ICIrdmFsdWUrIiAiKTsKKwkJCWlmIChuYW1lLmVxdWFscygiaWQiKSkgeworCQkJCW15a2V5ID0gdmFsdWU7CisJCQl9IGVsc2UgaWYgKG5hbWUuZXF1YWxzKCJmb2xkZXIiKSkgeworCQkJCWZvbGRlck5hbWUgPSB2YWx1ZTsJCisJCQl9IGVsc2UgaWYgKG5hbWUuZXF1YWxzKCJkZWxheSIpKSB7CisJCQkJZGVsYXkgPSB2YWx1ZTsKKwkJCQkKKwkJCX0gZWxzZSBpZiAobmFtZS5lcXVhbHMoIndhaXQiKSkgeworCQkJCWlmICh2YWx1ZS5lcXVhbHMoInkiKSkgeworCQkJCQl3YWl0Rm9yS01MID0gdHJ1ZTsKKwkJCQl9CisJCQl9IGVsc2UgaWYgKG5hbWUuZXF1YWxzKCJmaWxlIikpIHsKKwkJCQlmaWxlTmFtZSA9IHZhbHVlOworCQkJfSBlbHNlIGlmIChuYW1lLmVxdWFscygiQkJPWCIpKSB7CisJCQkJYmJveCA9IHZhbHVlOworCQkJfSBlbHNlIGlmIChuYW1lLmVxdWFscygiYmJveFNldCIpKSB7CisJCQkJYmJveFNldCA9IHRydWU7CisJCQl9CisJCX0KKwkJLy9kZWJ1ZygiZ2V0UGFyYW1ldGVyczogIitzYi50b1N0cmluZygpKTsKKwkJU2xpZGVTaG93SW5mbyBpbmZvID0gX2luZm9NYXAuZ2V0KG15a2V5KTsKKwkJaWYgKGluZm8gPT0gbnVsbCkgeworCQkJaW5mbyA9IG5ldyBTbGlkZVNob3dJbmZvKG15a2V5LGZvbGRlck5hbWUsd2FpdEZvcktNTCwKKwkJCQkJICAgICAgICAgICAgICAgICBmaWxlTmFtZSxkZWxheSk7CQkJCisJCX0gCisJCWlmIChiYm94ICE9IG51bGwpCisJCQlpbmZvLnNldEJCT1goYmJveCk7CisJCV9pbmZvTWFwLnB1dChteWtleSxpbmZvKTsKKwkJcmV0dXJuIGluZm87CisJCQorCX0KKwkvKioKKwkgKiBTZW5kIHRoZSBLTUwgZmlsZSB0byB0aGUgY2FsbGVyIChHb29nbGVFYXJ0aCkKKwkgKiAKKwkgKiBJZiBURVNUPXRydWUgdGhlbiBpdCB3aWxsIGJlIHdyaXR0ZW4gdG8gdGhlIGJyb3dzZXIgCisJICogZm9yIHRlc3RpbmcuCisJICogCQorICAgICAqIEBwYXJhbSByZXF1ZXN0ICAgCisgICAgICogQHBhcmFtIHJlc3BvbnNlCisgICAgICogQHBhcmFtIGttbCAgSW5wdXRTdHJlYW0gaG9sZGluZyBmaWxlIGNvbnRlbnRzCisgICAgICogQHBhcmFtIGluc2VydCAgS01MIHRvIGJlIGluc2VydGVkIGluIG91dHB1dAorICAgICAqIEB0aHJvd3MgSU9FeGNlcHRpb24KKyAgICAgKi8KKyAgICBzeW5jaHJvbml6ZWQgCisgICAgcHJpdmF0ZSB2b2lkIHNlbmRPdXRwdXQoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcXVlc3QsCisJCQkgICAgICAgICAgICAgICAgSHR0cFNlcnZsZXRSZXNwb25zZSByZXNwb25zZSwgCisJCQkgICAgICAgICAgICAgICAgSW5wdXRTdHJlYW0gIGttbCwgU3RyaW5nW10gaW5zZXJ0KSAKKwkgICAgICAgICAgICB0aHJvd3MgSU9FeGNlcHRpb24geworICAgIAkvLyBzZXQgVEVTVD10cnVlIHRvIGdldCByZWFkYWJsZSBvdXRwdXQgaW5zdGVhZCBvZiAKKyAgICAJLy8gbGF1bmNoaW5nIGEgS01MIGZpbGUKKyAgICAJICAgICAgCisJCXJlc3BvbnNlLnNldENvbnRlbnRUeXBlKCJhcHBsaWNhdGlvbi9rZXlob2xlIik7CisgICAgCQorCQkJCQorCQl0cnkgeworCQkJT3V0cHV0U3RyZWFtIG9zID0gcmVzcG9uc2UuZ2V0T3V0cHV0U3RyZWFtKCk7CQkJCisJCQlpZiAoVEVTVCkgeworCQkJCW9zID0gU3lzdGVtLm91dDsKKwkJCX0KKwkJCWNvcHkoa21sLG9zLGluc2VydCk7CisJCX0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CisJCQlTdHJpbmcgbXNnID0gIlNsaWRlU2hvd1NlcnZsZXQuc2VuZE91dHB1dCgpIGZhaWxlZCB3aGlsZSBzZW5kaW5nIGttbEZpbGUiOworCQkJZXJyb3IobXNnKyJcbiIrZS5nZXRNZXNzYWdlKCksbnVsbCk7CisJCQkKKwkJfQorCQkKKwl9CisgICAgLyoqCisgICAgICogYnVpbGQgYSBzZWdtZW50IG9mIEtNTCB0byBiZSBpbnNlcnRlZCBpbnRvIHRoZSAKKyAgICAgKiBvdXRwdXQgd3JpdHRlbiB0byBHb29nbGVFYXJ0aC4KKyAgICAgKiAKKyAgICAgKiBAcGFyYW0gdXJsCisgICAgICogQHJldHVybiBLTUwgdG8gYmUgaW5zZXJ0ZWQgCisgICAgICovCisgICAgcHJpdmF0ZSBTdHJpbmdbXSBidWlsZFNjcmVlbk92ZXJsYXkoIFN0cmluZyB1cmwpIHsKKwkJU3RyaW5nW10gaW5zZXJ0ID0gbmV3IFN0cmluZ1tdIAorCQkJeyI8U2NyZWVuT3ZlcmxheSBpZD1cIlN0YXR1c1wiPiIsCisJCQkgIiAgIDxkZXNjcmlwdGlvbj5TVEVNIHN0YXR1czwvZGVzY3JpcHRpb24+IiwKKwkJCSAiICAgPG5hbWU+U3RhdHVzPC9uYW1lPlxuIiwKKwkJCSAiPGljb24+IiwKKwkJCSAiPGhyZWY+IiwJCQkKKwkJCSB1cmwsCisJCQkgIjwvaHJlZj4iLAorCQkJICI8L2ljb24+XG4iLAorCQkJIC8vIGZvbGxvd2luZyBwb3NpdGlvbnMgaW1hZ2UgdG8gbG9vcCBsZWZ0CisJCQkgIjxvdmVybGF5WFkgeD1cIjBcIiB5PVwiMVwiIHh1bml0cz1cImZyYWN0aW9uXCIgeXVuaXRzPVwiZnJhY3Rpb25cIi8+XG4iLAorCQkJICI8c2NyZWVuWFkgeD1cIjBcIiB5PVwiMVwiIHh1bml0cz1cImZyYWN0aW9uXCIgeXVuaXRzPVwiZnJhY3Rpb25cIi8+XG4iLAorCQkJIC8vIHVzZSBhY3R1YWwgc2l6ZSBvZiBpbWFnZQorCQkJICI8c2l6ZSB4PVwiMFwiIHk9XCIwXCIgeHVuaXRzPVwiZnJhY3Rpb25cIiB5dW5pdHM9XCJmcmFjdGlvblwiLz5cbiIsCisJCQkgIjwvU2NyZWVuT3ZlcmxheT5cbiIJCQkKKwkJCSB9OworCQkKKwkJcmV0dXJuIGluc2VydDsKKwl9CisJLyoqCisJICogU2VuZCB0aGUgS01MIGZpbGUgdG8gdGhlIGNhbGxlciAoR29vZ2xlRWFydGgpCisJICogCisJICogCisJICogQHBhcmFtIHJlc3BvbnNlCisJICogQHBhcmFtIGluZm8KKwkgKiBAcGFyYW0gbXNnIEEgc3RyaW5nIHRoYXQgd2lsbCBiZSBjb252ZXJ0ZWQgCisJICogICAgICB0byBhbiBpbWFnZSBhbmQgZGlzcGxheWVkIGJ5IEdvb2dsZUVhcnRoCisJICogQHRocm93cyBJT0V4Y2VwdGlvbgorCSAqLworICAgIAorICAgIHByaXZhdGUgdm9pZCBzZW5kU2NyZWVuT3ZlcmxheShIdHRwU2VydmxldFJlcXVlc3QgcmVxdWVzdCwKKwkJCSAgICAgICAgICAgICAgICBIdHRwU2VydmxldFJlc3BvbnNlIHJlc3BvbnNlLCAKKwkJCSAgICAgICAgICAgICAgICBTdHJpbmcgbXNnKSAKKwkgICAgICAgICAgICB0aHJvd3MgSU9FeGNlcHRpb24geworICAgIAkgICAgCSAgICAgIAorCQlyZXNwb25zZS5zZXRDb250ZW50VHlwZSgiYXBwbGljYXRpb24va2V5aG9sZSIpOworICAgIAkKKwkJCQkKKwkJdHJ5IHsKKwkJCVN0cmluZyBob3N0ID0gZ2V0SG9zdChyZXF1ZXN0KTsJCQkKKwkJCVN0cmluZyB1cmwgPSAiaHR0cDovLyIraG9zdCsiLyIrCisJCQkgICAgIENPTlRFWFQrIi9pbWFnZT90ZXh0PSIrCisJCQlVUkxFbmNvZGVyLmVuY29kZShtc2csIlVURi04Iik7CisKKwkJCVN0cmluZ1tdIGluc2VydCA9IGJ1aWxkU2NyZWVuT3ZlcmxheSh1cmwpOworCisJCQlQcmludFdyaXRlciBvcyA9IG5ldyBQcmludFdyaXRlcihyZXNwb25zZS5nZXRPdXRwdXRTdHJlYW0oKSk7CisJCQkvL1ByaW50U3RyZWFtIG9zID0gU3lzdGVtLm91dDsKKwkJCXJlc3BvbnNlLnNldENvbnRlbnRUeXBlKCJhcHBsaWNhdGlvbi9rZXlob2xlIik7CisKKwkJCW9zLnByaW50bG4oIjw/eG1sIHZlcnNpb249XCIxLjBcIiBlbmNvZGluZz1cIlVURi04XCI/PiIpOworCQkJb3MucHJpbnRsbigiPGttbCB4bWxucz1cImh0dHA6Ly9lYXJ0aC5nb29nbGUuY29tL2ttbC8yLjBcIj4iKTsKKwkJCW9zLnByaW50bG4oIjxEb2N1bWVudD4iKTsKKwkJCWZvciAoaW50IGk9MDsgaTxpbnNlcnQubGVuZ3RoOyBpKyspIHsJCQkJCQorCQkJCW9zLnByaW50bG4oaW5zZXJ0W2ldKTsKKwkJCX0KKwkJCW9zLnByaW50bG4oIjwvRG9jdW1lbnQ+Iik7CisJCQlvcy5wcmludGxuKCI8L2ttbD4iKTsKKworCQkJb3MuZmx1c2goKTsgCisJCX0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CisJCQlTdHJpbmcgZW1zZyA9ICJTbGlkZVNob3dTZXJ2bGV0LnNlbmRTY3JlZW5PdmVybGF5KCkgZmFpbGVkIHdoaWxlIHdyaXRpbmcga21sRmlsZSI7CisJCQllcnJvcihlbXNnKyJcbiIrZS5nZXRNZXNzYWdlKCksbnVsbCk7CisKKwkJfQorCQkKKwl9CisgIAorCisJcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIGdldENsb2NrKCkgeworCQlsb25nIG5vdyA9IG5ldyBEYXRlKCkuZ2V0VGltZSgpLXN0YXJ0OworCQlyZXR1cm4gTG9uZy50b1N0cmluZyhub3cpOworCX0KKworCS8qKgorCSAqIHJldHVybiB0aGUgaW5mbyBpbnN0YW5jZSBhc3NvY2lhdGVkIHdpdGggdGhlIHNwZWNpZmllZCBrZXkKKwkgKiBAcGFyYW0ga2V5IAorCSAqIEByZXR1cm4gaW5zdGFuY2Ugb2YgU2xpZGVTaG93SW5mbworCSAqLworCXB1YmxpYyBzdGF0aWMgU2xpZGVTaG93SW5mbyBnZXRJbmZvKFN0cmluZyBrZXkpIHsKKwkJU2xpZGVTaG93SW5mbyBpbmZvID0gX2luZm9NYXAuZ2V0KGtleSk7CisJCXJldHVybiBpbmZvOworCX0KKwkvKioKKwkgKiBjb3B5IGEgS01MIGZpbGUgdG8gdGhlIHNlcnZsZXQgcmVzcG9uc2Ugb3V0cHV0IHN0cmVhbQorCSAqIGFuZCBwZXJoYXBzIGluc2VydCBhZGRpdGlvbmFsIEtNTCBzdGF0ZW1lbnRzCisJICogCisJICogQHBhcmFtIGlzIEtNTCBmaWxlIGlucHV0CisJICogQHBhcmFtIG9zIFNlcnZsZXQgcmVzcG9uc2Ugb3V0cHV0IHN0cmVhbQorCSAqIEBwYXJhbSBpbnNlcnQgb3B0aW9uYWwgc3RhdGVtZW50cyB0byBiZSBpbnNlcnRlZAorCSAqICAgICAgICAgICAgICAgYWZ0ZXIgdGhlIDxkb2N1bWVudD4gc3RhdGVtZW50LgorCSAqLworCXByaXZhdGUgdm9pZCBjb3B5KElucHV0U3RyZWFtIGlzLCBPdXRwdXRTdHJlYW0gb3MsIFN0cmluZ1tdIGluc2VydCkgCisJICAgICAgIHRocm93cyBJT0V4Y2VwdGlvbiB7CisJCQorCQlJbnB1dFN0cmVhbVJlYWRlciBpc3IgPSBuZXcgSW5wdXRTdHJlYW1SZWFkZXIoaXMpOworICAgICAgICBCdWZmZXJlZFJlYWRlciBiciA9IG5ldyBCdWZmZXJlZFJlYWRlcihpc3IpOyAKKwkJU3RyaW5nIGxpbmUgPSBudWxsOworCQkKKyAgICAgICAgCisJCXRyeSB7CisJCQkKKwkJCXdoaWxlICh0cnVlKSB7CisJCQkJbGluZSA9IGJyLnJlYWRMaW5lKCk7CisJCQkJaWYgKGxpbmUgPT0gbnVsbCkKKwkJCQkJYnJlYWs7CisJCQkJCisJCQkJYnl0ZVtdIGJ1ZmZlciA9IGxpbmUuZ2V0Qnl0ZXMoKTsKKwkJCQlvcy53cml0ZShidWZmZXIsIDAsIGJ1ZmZlci5sZW5ndGgpOworCQkJCWlmIChpbnNlcnQhPW51bGwgJiYgCisJCQkJCQlsaW5lLnRvTG93ZXJDYXNlKCkuc3RhcnRzV2l0aCgiPGRvY3VtZW50PiIpKSB7CisJCQkJCWZvciAoaW50IGk9MDsgaTxpbnNlcnQubGVuZ3RoOyBpKyspIHsJCQkJCQkKKwkJCQkJCWJ1ZmZlciA9IGluc2VydFtpXS5nZXRCeXRlcygpOworCQkJCQkJb3Mud3JpdGUoYnVmZmVyLCAwLCBidWZmZXIubGVuZ3RoKTsKKwkJCQkJfQorCQkJCX0KKwkJCX0KKwkJCW9zLmZsdXNoKCk7CisJCQlvcy5jbG9zZSgpOworCQkJaXMuY2xvc2UoKTsKKwkJfSBjYXRjaCAoVGhyb3dhYmxlIGUpIHsKKwkJCQorCQkJZXJyb3IoIlNsaWRlU2hvd1NlcnZsZXQuY29weSgpOiBFcnJvciB3aGlsZSBjb3B5aW5nIEtNTCBmaWxlLiAiCisJCQkJCStlLnRvU3RyaW5nKCksbnVsbCk7CisJCQl0cnkgeworCQkJCWlzLmNsb3NlKCk7CisJCQkJb3MuY2xvc2UoKTsKKwkJCX0gY2F0Y2ggKEV4Y2VwdGlvbiBlMikgeworCQkJCS8vIGFscmVhZHkgcmVwb3J0ZWQgaXQKKwkJCX0KKwkJfQorCisgICAgfQorCQorCSAgLyoqCisgICAgICogcHJpbnQgZGVidWcgbWVzc2FnZXMgdG8gdGhlIHNlcnZlciBsb2cuCisgICAgICogQHBhcmFtIG1zZworICAgICAqLworCXB1YmxpYyBzdGF0aWMgdm9pZCBkZWJ1ZyhTdHJpbmcgbXNnKSB7CisJCWlmIChERUJVRykgewkJIAorCQkgIEFjdGl2YXRvci5sb2dJbmZvcm1hdGlvbihnZXRDbG9jaygpKyIgR0VTZXJ2bGV0OiAiK21zZyk7CisJCX0KKwl9CisJIAorCS8qKgorCSAqIGRlYnVnIG91dHB1dCBmb3IgZXhjZXB0aW9ucworCSAqIEBwYXJhbSBtc2cKKwkgKiBAcGFyYW0gZQorCSAqLworCXB1YmxpYyBzdGF0aWMgdm9pZCBlcnJvcihTdHJpbmcgbXNnLFRocm93YWJsZSBlKSB7CisJCS8vbG9nKG1zZyxlKTsKKwkJQWN0aXZhdG9yLmxvZ0luZm9ybWF0aW9uKG1zZyk7CisJCWlmIChlICE9IG51bGwpCisJCQlpZiAoREVCVUcpCQkJCQorCQkJCWUucHJpbnRTdGFja1RyYWNlKCk7CisJCQllbHNlIAorCQkJCUFjdGl2YXRvci5sb2dJbmZvcm1hdGlvbihlLnRvU3RyaW5nKCkpOworCQkKKwl9Cit9ICAvLyBjbGFzcwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5nZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9nZS9zZXJ2bGV0L1N0YXJ0U2VydmxldC5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLmdlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL2dlL3NlcnZsZXQvU3RhcnRTZXJ2bGV0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmM5ZTdjNAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5nZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9nZS9zZXJ2bGV0L1N0YXJ0U2VydmxldC5qYXZhCkBAIC0wLDAgKzEsMjUzIEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0udWkuZ2Uuc2VydmxldDsKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLyAKK2ltcG9ydCBqYXZhLmlvLkZpbGU7CitpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLmlvLlByaW50V3JpdGVyOworaW1wb3J0IGphdmEudXRpbC5EYXRlOworaW1wb3J0IGphdmEudXRpbC5FbnVtZXJhdGlvbjsKKworaW1wb3J0IGphdmF4LnNlcnZsZXQuU2VydmxldENvbmZpZzsKK2ltcG9ydCBqYXZheC5zZXJ2bGV0LlNlcnZsZXRFeGNlcHRpb247CitpbXBvcnQgamF2YXguc2VydmxldC5odHRwLkh0dHBTZXJ2bGV0OworaW1wb3J0IGphdmF4LnNlcnZsZXQuaHR0cC5IdHRwU2VydmxldFJlcXVlc3Q7CitpbXBvcnQgamF2YXguc2VydmxldC5odHRwLkh0dHBTZXJ2bGV0UmVzcG9uc2U7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnVpLkFjdGl2YXRvcjsKKworCisKKy8qKgorICogU3RhcnRTZXJ2bGV0IHNlbmRzIGJhY2sgYSB2YWxpZCBLTUwgZmlsZSBmb3IgYSBHRVQgb3IgUE9TVAorICogYWN0aW9uIHRoYXQgd2lsbCBnaXZlIEdvb2dsZUVhcnRoIHRoZSBOZXR3b3JrTGluayB0byAKKyAqIHN0YXJ0IHVwIHRoZSBTVEVNIFNsaWRlU2hvdworICogPHByZT4KKyAqIFRoZSB3YXkgdGhhdCBpdCB3b3JrcyBpcyB0aGlzOgorICogICAgVGhlIGludm9raW5nIEhUTUwgd2lsbCBpbnZva2UgdGhpcyBTZXJ2bGV0IHdpdGggdGhlIGZvbGxvd2luZworICogICAgcGFyYW1ldGVyczoKKyAqICAgICAgZm9sZGVyIDxwYXRoPgorICogICAgICB3YWl0ICAgPHkvbj4KKyAqICAgICAgIAorICogICAgVGhlIHNlcnZsZXQgYnVpbGRzIGEgS01MIGZpbGUgdGhhdCBpcyBsYXVuY2hlZCB0byBHb29nbGVFYXJ0aCB0aGF0IAorICogICAgaGFzIGEgbmV0d29ya2xpbmsgd2l0aCB0aGUgZm9sbG93aW5nIFVSTAorICogICAgaHR0cDovL2xvY2FsaG9zdDo4MDgwL1NURU0vc2xpZGVzaG93P2lkPTxpZD4mZm9sZGVyPTxwYXRoPiZ3YWl0PTx3YWl0PgorICogICAgd2hlcmUgPGlkPiBpcyBhIHVuaXF1ZSBpZAorICogICAgICAgICAgPHBhdGg+IGlzIHRoZSBkaXJlY3RvcnkgY29udGFpbmluZyB0aGUgCisgKiAgICAgICAgICAgIGttbCBmaWxlcyBnZW5lcmF0ZWQgYnkgU1RFTS4KKyAqICAgICAgICAgIDx3YWl0PiBpcyAieSIgaWYgaXQgc2hvdWxkIHdhaXQgZm9yIG5ldyBmaWxlcyAKKyAqICAgICAgICAgIHRvIGJlIGdlbmVyYXRlZCAgICAKKyAqICAgICBHb29nbGVFYXJ0aCB3aWxsIHRoZW4gaXNzdWUgaHR0cCBHRVQgcmVxdWVzdHMgd2l0aCAKKyAqICAgICB0aGUgc3BlY2lmaWVkIFVSTCAKKyAqICAgICAKKyAqICAgICAgICAgICAgIAorICovCitwdWJsaWMgY2xhc3MgU3RhcnRTZXJ2bGV0IGV4dGVuZHMgSHR0cFNlcnZsZXQgeworICAgIC8qKgorCSAqIAorCSAqLworCXByaXZhdGUgc3RhdGljIGZpbmFsIGxvbmcgc2VyaWFsVmVyc2lvblVJRCA9IDFMOworCS8qKgorICAgICAqIFNlcnZsZXQgY29udGV4dC4gIAorICAgICAqIAorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIENPTlRFWFQgPSAiL1NURU0iOworCQorICAgIHByaXZhdGUgc3RhdGljIFN0cmluZyBkZWJ1ZyA9ICJuIjsKKyAgICAvKioKKyAgICAgKiBpZiBzZXQgdHJ1ZSwgdGhpcyB3aWxsIGNyZWF0ZSByZWFkYWJsZSBvdXRwdXQKKyAgICAgKi8KKyAgICBwcml2YXRlIHN0YXRpYyBib29sZWFuIFRFU1QgPSBmYWxzZTsKKyAgICAKKyAgICBzdGF0aWMgZmluYWwgU3RyaW5nIFNURU1fRk9MREVSID0gImM6XFx0bXBcXGdlIjsKKyAgICAKKyAgICBzdGF0aWMgZmluYWwgU3RyaW5nIFZFUlNJT04gPSAiMS4wLjEiOworICAgIC8qKgorICAgICAqICBIYW5kbGUgdGhlIGluaXRpYWwgc2V0dXAgCisgICAgICovCisJcHVibGljIHZvaWQgaW5pdChTZXJ2bGV0Q29uZmlnIGNvbmZpZykgdGhyb3dzIFNlcnZsZXRFeGNlcHRpb24geworCQkgICAgc3VwZXIuaW5pdChjb25maWcpOworCQkgICAgZGVidWcoImluaXQ6ICIrVkVSU0lPTisiIGludm9rZWQgYXQgc3RhcnR1cCBvciBkZXBsb3kiKTsJCisJCSAgICAKKwkgfQorICAgIAorCXByb3RlY3RlZCB2b2lkIGRvR2V0KEh0dHBTZXJ2bGV0UmVxdWVzdCByZXF1ZXN0LCBIdHRwU2VydmxldFJlc3BvbnNlIHJlc3BvbnNlKQorICAgICAgICAgICAgdGhyb3dzIFNlcnZsZXRFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKKwkJZGVidWcoImRvR2V0Iik7CisJCWRvUG9zdChyZXF1ZXN0LCByZXNwb25zZSk7Cit9CisKKyAgICBwcm90ZWN0ZWQgdm9pZCBkb1Bvc3QoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcXVlc3QsSHR0cFNlcnZsZXRSZXNwb25zZSByZXNwb25zZSkgCisgICAgICAgICAgICB0aHJvd3MgU2VydmxldEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24geworICAgIAlkZWJ1ZygiZG9Qb3N0Iik7CQkKKwkJCisJCVN0cmluZyBmb2xkZXJOYW1lID0gU1RFTV9GT0xERVI7CisJCVN0cmluZyB3YWl0Rm9yS01MID0gIm4iOworCQlTdHJpbmcgaW50ZXJ2YWwgPSAiMiI7ICAvLyBldmVyeSAyIHNlY29uZHMKKwkJRmlsZSBmb2xkZXIgPSBudWxsOworCQkKKwkJdHJ5IHsKKwkJCS8vIGdldCB0aGUgZm9sZGVyIGZyb20gdGhlIFVSTCBwYXJhbWV0ZXJzLgorCQkJLy8gaHR0cDovL2xvY2FsaG9zdDo4MDgwL3NsaWRlc2hvdz9mb2xkZXI9cGF0aAorCQkJRW51bWVyYXRpb24gZSA9IHJlcXVlc3QuZ2V0UGFyYW1ldGVyTmFtZXMoKTsKKwkJCXdoaWxlIChlLmhhc01vcmVFbGVtZW50cygpKSB7CisJCQkJU3RyaW5nIG5hbWUgPSAoU3RyaW5nKWUubmV4dEVsZW1lbnQoKTsKKwkJCQlTdHJpbmcgdmFsdWUgPSAoU3RyaW5nKXJlcXVlc3QuZ2V0UGFyYW1ldGVyKG5hbWUpOworCQkJCWRlYnVnKG5hbWUrIj0iK3ZhbHVlKTsKKwkJCQlpZiAobmFtZS5lcXVhbHMoImZvbGRlciIpKSB7CisJCQkJCWZvbGRlck5hbWUgPSB2YWx1ZTsJCQkJCisJCQkJfSBlbHNlIGlmIChuYW1lLmVxdWFscygid2FpdCIpKSB7CisJCQkJCXdhaXRGb3JLTUwgPSB2YWx1ZTsJCQkJCQorCQkJCX0gZWxzZSBpZiAobmFtZS5lcXVhbHMoImludGVydmFsIikpIHsKKwkJCQkJaW50ZXJ2YWwgPSB2YWx1ZTsJCQkJCQorCQkJCX0gZWxzZSBpZiAobmFtZS5lcXVhbHMoImRlYnVnIikpIHsKKwkJCQkJZGVidWcgPSB2YWx1ZTsJCQkJCQorCQkJCX0KKwkJCQkKKwkJCX0KKwkJCWlmIChkZWJ1Zy50b0xvd2VyQ2FzZSgpLnN0YXJ0c1dpdGgoInkiKSkgeworCQkJCVNsaWRlU2hvd1NlcnZsZXQuREVCVUcgPSB0cnVlOworCQkJfSBlbHNlIHsKKwkJCQlTbGlkZVNob3dTZXJ2bGV0LkRFQlVHID0gZmFsc2U7CisJCQl9CisJCQlmb2xkZXIgPSBuZXcgRmlsZShmb2xkZXJOYW1lKTsKKwkJCWRlYnVnKCJmb2xkZXI6ICIrZm9sZGVyLmdldEFic29sdXRlUGF0aCgpKTsKKwkJCQorCQkJCisJCQlsb25nIHRpbWUgPSAwOworCQkJU3RyaW5nIGluZm8gPSAiSVBhZGRyOiAiICsgcmVxdWVzdC5nZXRSZW1vdGVBZGRyKCkgKyAKKwkgICAgICAgICIgZm9sZGVyOiAiK2ZvbGRlci5nZXRBYnNvbHV0ZVBhdGgoKSArCisJICAgICAgICAiIHRpbWU6ICIgKyB0aW1lOworCSAgICAgICAgZGVidWcoaW5mbyk7CisJCQlzZW5kT3V0cHV0KHJlcXVlc3QscmVzcG9uc2UsIGZvbGRlck5hbWUsIAorCQkJCQl3YWl0Rm9yS01MLGludGVydmFsKTsKKwkJfSBjYXRjaCAoVGhyb3dhYmxlIGUpIHsKKwkJCQorCQkJZS5wcmludFN0YWNrVHJhY2UoKTsKKwkJfQorCX0KKyAgIAorCisJLyoqCisJICogU2VuZCB0aGUgS01MIGZpbGUgdG8gdGhlIGNhbGxlciAoR29vZ2xlRWFydGgpCisJICogCisJICogSWYgVEVTVD10cnVlIHRoZW4gaXQgd2lsbCBiZSB3cml0dGVuIHRvIHRoZSBicm93c2VyIAorCSAqIGZvciB0ZXN0aW5nLiBOb3RlIHRoYXQgYmVjYXN1c2UgaXQgaXMgWE1MIHRoZSBvdXRwdXQgCisJICogd2lsbCBiZSBnYXJibGVkIGFuZCB5b3UgbmVlZCB0byB1c2UgdGhlIGJyb3dzZXIgdG8gCisJICogbG9vayBhdCB0aGUgcGFnZSBzb3VyY2UuCisJICogCisJICogQHBhcmFtIHJlcXVlc3QKKwkgKiBAcGFyYW0gcmVzcG9uc2UKKwkgKiBAcGFyYW0gZm9sZGVyTmFtZQorCSAqIEB0aHJvd3MgSU9FeGNlcHRpb24KKwkgKi8KKyAgICBzeW5jaHJvbml6ZWQgCisgICAgcHJpdmF0ZSB2b2lkIHNlbmRPdXRwdXQoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcXVlc3QsCisJCQlIdHRwU2VydmxldFJlc3BvbnNlIHJlc3BvbnNlLCAKKwkJCVN0cmluZyBmb2xkZXJOYW1lLCBTdHJpbmcgd2FpdEZvcktNTCwgU3RyaW5nIGludGVydmFsKSAKKwkgICAgICAgICAgICB0aHJvd3MgSU9FeGNlcHRpb24geworICAgIAkKKyAgICAJCisgICAgCWludCBwb3J0ID0gcmVxdWVzdC5nZXRTZXJ2ZXJQb3J0KCk7CisgICAgCQorICAgIAlTdHJpbmcgaG9zdCA9IHJlcXVlc3QuZ2V0U2VydmVyTmFtZSgpKyI6Iitwb3J0OworCQkKKwkJbG9uZyB0aW1lID0gbmV3IERhdGUoKS5nZXRUaW1lKCk7CisJCVN0cmluZyBpZCA9IExvbmcudG9IZXhTdHJpbmcodGltZSk7CisJCVByaW50V3JpdGVyIG9zID0gbmV3IFByaW50V3JpdGVyKHJlc3BvbnNlLmdldE91dHB1dFN0cmVhbSgpKTsKKyAgICAJLy8gc2V0IFRFU1Q9dHJ1ZSB0byBnZXQgcmVhZGFibGUgb3V0cHV0IGluc3RlYWQgb2YgCisgICAgCS8vIGxhdW5jaGluZyBhIEtNTCBmaWxlCisgICAgCQorICAgIAlpZiAoVEVTVCkgeworICAgIAkJU3RyaW5nIG1zZyA9ICIgS01MIE5ldHdvcmtMaW5rIGZpbGU6ICI7CisgICAgCQlyZXNwb25zZS5zZXRDb250ZW50VHlwZSgidGV4dC9odG1sIik7CisgICAgCQkKKyAgICAJCW9zLnByaW50bG4oIjxodG1sPiIpOworICAgIAkJb3MucHJpbnRsbigiPGhlYWQ+PHRpdGxlPlN0YXJ0IFNsaWRlc2hvdzwvdGl0bGU+PC9oZWFkPiIpOworICAgIAkJb3MucHJpbnRsbigiPGJvZHk+Iik7CisgICAgCQlvcy5wcmludGxuKCI8cD4iK21zZysiPC9wPiIpOworICAgIAkJICAgIAkJICAgIAkJCisgICAgCX0gIGVsc2UgeyAgICAgICAgCisJCSAgICByZXNwb25zZS5zZXRDb250ZW50VHlwZSgiYXBwbGljYXRpb24va2V5aG9sZSIpOworICAgIAl9CisJCQkJCisJCXRyeSB7CisJCQkKKwkJCW9zLnByaW50bG4oIjw/eG1sIHZlcnNpb249XCIxLjBcIiBlbmNvZGluZz1cIlVURi04XCI/PiIpOworCQkJb3MucHJpbnRsbigiPGttbCB4bWxucz1cImh0dHA6Ly9lYXJ0aC5nb29nbGUuY29tL2ttbC8yLjBcIj4iKTsKKwkJCW9zLnByaW50bG4oIjxGb2xkZXI+Iik7CisJCQlvcy5wcmludGxuKCIgICA8ZGVzY3JpcHRpb24+U2xpZGVTaG93IE5ldHdvcmtMaW5rPC9kZXNjcmlwdGlvbj4iKTsKKwkJCW9zLnByaW50bG4oIiAgIDxuYW1lPk5ldHdvcmsgTGlua3M8L25hbWU+Iik7CisJCQlvcy5wcmludGxuKCI8TmV0d29ya0xpbms+Iik7CisJCQlvcy5wcmludGxuKCI8VXJsPiIpOworCQkJLy8gVGhlIGltcG9ydCBpbmZvIGdvZXMgaGVyZQorCQkJU3RyaW5nIHVybCA9ICI8aHJlZj5odHRwOi8vIitob3N0KworCQkJCQlDT05URVhUKyIvc2xpZGVzaG93P2lkPSIraWQrCisJCQkJCSImYW1wO2ZvbGRlcj0iK2ZvbGRlck5hbWUrCisJCQkJCSImYW1wO3dhaXQ9Iit3YWl0Rm9yS01MKworCQkJCQkiPC9ocmVmPiI7CisJCQlvcy5wcmludGxuKHVybCk7CisJCQlkZWJ1Zyh1cmwpOworCQkJCisJCQlvcy5wcmludGxuKCI8cmVmcmVzaEludGVydmFsPiIraW50ZXJ2YWwrIjwvcmVmcmVzaEludGVydmFsPiIpOworCQkJb3MucHJpbnRsbigiPHJlZnJlc2hNb2RlPm9uSW50ZXJ2YWw8L3JlZnJlc2hNb2RlPiIpOworCQkJb3MucHJpbnRsbigiPC9Vcmw+Iik7CisJCQlvcy5wcmludGxuKCI8Zmx5VG9WaWV3PjA8L2ZseVRvVmlldz4iKTsKKwkJCW9zLnByaW50bG4oIjwvTmV0d29ya0xpbms+Iik7CisJCQlvcy5wcmludGxuKCI8L0ZvbGRlcj4iKTsKKwkJCW9zLnByaW50bG4oIjwva21sPiIpOworCQl9IGNhdGNoIChFeGNlcHRpb24gZSkgeworCQkJU3RyaW5nIG1zZyA9ICJTbGlkZVNob3cgc3RhcnR1cCBmYWlsdXJlIjsKKwkJCWRlYnVnKG1zZyxlKTsKKwkJCWVyckh0bWwocmVzcG9uc2UsbXNnK2UuZ2V0TWVzc2FnZSgpKTsKKwkJfQorCQlpZiAoVEVTVCkgeyAgICAJCQorICAgIAkJIAkJCisgICAgCQlvcy5wcmludGxuKCI8L2JvZHk+PC9odG1sPiIpOworICAgIAkJICAgCQkgICAgCQkKKyAgICAJfSAKKwkJb3MuZmx1c2goKTsgCisJfQorICAgIAorICAgIC8qKgorICAgICAqIHByaW50IGRlYnVnIG1lc3NhZ2VzIHRvIHRoZSBzZXZlciBsb2cuCisgICAgICogQHBhcmFtIG1zZworICAgICAqLworCXByaXZhdGUgdm9pZCBkZWJ1ZyhTdHJpbmcgbXNnKSB7CisJCWlmIChTbGlkZVNob3dTZXJ2bGV0LkRFQlVHKSB7CisJCSAgLy9nZXRTZXJ2bGV0Q29udGV4dCgpLmxvZyhtc2cpOworCQkgIC8vbG9nKCJsb2c6ICIrbXNnKTsKKwkJICBBY3RpdmF0b3IubG9nSW5mb3JtYXRpb24oIlN0YXJ0U2VydmxldDogIittc2cpOworCQl9CisJfQorCQorCXByaXZhdGUgdm9pZCBkZWJ1ZyhTdHJpbmcgbXNnLFRocm93YWJsZSBlKSB7CisJCVN5c3RlbS5lcnIucHJpbnRsbihtc2cpOworCQllLnByaW50U3RhY2tUcmFjZSgpOworCX0KKwkvKioKKwkgKiBwdXQgb3V0IGFuIGVycm9yIG1lc3NhZ2UgYXMgaHRtbAorCSAqIAorCSAqIEBwYXJhbSByZXNwb25zZQorCSAqIEBwYXJhbSBtc2cKKwkgKiBAdGhyb3dzIElPRXhjZXB0aW9uCisJICovCisJcHJpdmF0ZSB2b2lkIGVyckh0bWwoSHR0cFNlcnZsZXRSZXNwb25zZSByZXNwb25zZSxTdHJpbmcgbXNnKSAKKwkgICAgICAgICAgICAgICAgICAgICAgIHRocm93cyBJT0V4Y2VwdGlvbiB7CisJCXJlc3BvbnNlLnNldENvbnRlbnRUeXBlKCJ0ZXh0L2h0bWwiKTsKKwkJUHJpbnRXcml0ZXIgb3V0ID0gbmV3IFByaW50V3JpdGVyKHJlc3BvbnNlLmdldE91dHB1dFN0cmVhbSgpKTsKKwkJb3V0LnByaW50bG4oIjxodG1sPiIpOworCQlvdXQucHJpbnRsbigiPGhlYWQ+PHRpdGxlPktNTCBTbGlkZVNob3cgRXJyb3I8L3RpdGxlPjwvaGVhZD4iKTsKKwkJb3V0LnByaW50bG4oIjxib2R5PiIpOworCQlvdXQucHJpbnRsbigiPHA+Iittc2crIjwvcD4iKTsKKwkJb3V0LnByaW50bG4oIjwvYm9keT48L2h0bWw+Iik7CisJCW91dC5mbHVzaCgpOworCX0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkuZ2Uvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvZ2Uvc2VydmxldC9WZXJpZnlDbGllbnQuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5nZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9nZS9zZXJ2bGV0L1ZlcmlmeUNsaWVudC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI3MjI3OTgKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkuZ2Uvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvZ2Uvc2VydmxldC9WZXJpZnlDbGllbnQuamF2YQpAQCAtMCwwICsxLDE1MiBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnVpLmdlLnNlcnZsZXQ7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDkgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgamF2YS5pby5CeXRlQXJyYXlPdXRwdXRTdHJlYW07CitpbXBvcnQgamF2YS5pby5EYXRhSW5wdXRTdHJlYW07CitpbXBvcnQgamF2YS5pby5EYXRhT3V0cHV0U3RyZWFtOworaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247CitpbXBvcnQgamF2YS5uZXQuTWFsZm9ybWVkVVJMRXhjZXB0aW9uOworaW1wb3J0IGphdmEubmV0LlVSTDsKK2ltcG9ydCBqYXZhLm5ldC5VUkxDb25uZWN0aW9uOworCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS51aS5nZS5BY3RpdmF0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS51aS5nZS5HRUxvZzsKKworCisvKioKKyAqIEhvbGRlciBmb3IgdGhlIHZlcmlmeSBtZXRob2QgdGhhdAorICogd2lsbCB2ZXJpZnkgdGhhdCB0aGUgc3BlY2lmaWVkIHdlYnNlcnZlciAKKyAqIGlzIGF2YWlsYWJsZSBhbmQgdGhhdCB0aGUgU3RlbS1Hb29nbGVFYXJ0aCBzZXJ2bGV0cworICogYXJlIGRlcGxveWVkLgorICogCisgKiBJdCB3aWxsIGFsc28gc2VuZCB0aGUgc2V0dGluZyBvZiB0aGUgREVCVUcgZmxhZworICogdG8gdGhlIHNlcnZsZXQgY29kZWJhc2Ugc28gaXQgY2FuIGJlIHVzZWQgdGhlcmUuCisgKiAKKyAqIDxjb2RlPgorICogICAgU3RyaW5nIHVybCA9ICJodHRwOi8vbG9jYWxob3N0OjgwODAvU1RFTS92ZXJpZnkiCisgKiAgICBWZXJpZnlDbGllbnQgdmMgPSBuZXcgVmVyaWZ5Q2xpZW50KCk7CisgKiAgICBib29sZWFuIG9rID0gdmMudmVyaWZ5KHVybCkKKyAqICAgIGlmICghIG9rKSB7CisgKiAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4odmMuZ2V0RXJyb3IoKSk7CisgKiAgICAgICByZXR1cm47CisgKiAgICB9CisgKiAgICAuLi4KKyAqIDwvY29kZT4KKyAqCisgKi8KK3B1YmxpYyBjbGFzcyBWZXJpZnlDbGllbnQgeworCisJOworCS8qKgorICAgICAqIFN0cmluZyB0aGF0IHdlIHdpbGwgc2VuZCB0aGUgY2xpZW50CisgICAgICovCisgCXB1YmxpYyBzdGF0aWMgU3RyaW5nIG91dHB1dFRleHQ9IlZlcmlmeUNsaWVudCAiKworIAkJCVZlcnNpb24udmVyc2lvbjsKKyAJLyoqCisgCSAqIFN0cmluZyB0aGF0IGNsaWVudCBzaG91bGQgc2VuZCB1cy4KKyAJICovCisgCXB1YmxpYyBzdGF0aWMgU3RyaW5nIGV4cGVjdGVkVGV4dD0iVmVyaWZ5U2VydmxldCAiKworIAkJCVZlcnNpb24udmVyc2lvbjsJCisgICAgcHJpdmF0ZSBTdHJpbmcgZXJyb3IgPSAiIjsKKwkvKioKKwkgKiBWZXJpZnk6IAorCSAqICAgKDEpIHRoYXQgdGhlIHdlYiBzZXJ2ZXIgaXMgYWN0aXZlIAorCSAqICAgKDIpIHRoYXQgdGhlIHNlcnZsZXRzIGFyZSBkZXBsb3llZAorCSAqICAgCisJICogQHBhcmFtIHVybHN0ciAgVVJMIGxpa2UgLy9sb2NhbGhvc3Q6ODA4MC9TVEVNL3ZlcmlmeQorCSAqIEByZXR1cm4gT0siIG9yIGFuIGVycm9yIG1lc3NhZ2UKKwkgKi8KKwlwdWJsaWMgIGJvb2xlYW4gdmVyaWZ5KFN0cmluZyB1cmxzdHIpIHsKKwkJYm9vbGVhbiByZXN1bHQgPSB0cnVlOworCQllcnJvciA9ICIiOworCQl0cnkgeworCQkJLy9HRUxvZy5ERUJVRz10cnVlOworCQkJVVJMIHVybCA9IG5ldyBVUkwodXJsc3RyKTsKKwkJCVVSTENvbm5lY3Rpb24gY29ubmVjdCA9IHVybC5vcGVuQ29ubmVjdGlvbigpOworCQkJY29ubmVjdC5zZXRVc2VDYWNoZXMoZmFsc2UpOworCQkJY29ubmVjdC5zZXREb0lucHV0KHRydWUpOworCQkJY29ubmVjdC5zZXREb091dHB1dCh0cnVlKTsKKwkJCWNvbm5lY3Quc2V0UmVxdWVzdFByb3BlcnR5KCJDb250ZW50LXR5cGUiLCAiYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtIik7CisJCQkKKwkJCSAgLy8gdXNlIEJ5dGVBcnJheSBvdXRwdXQKKwkJCUJ5dGVBcnJheU91dHB1dFN0cmVhbSBieXRlT3V0cHV0ID0gbmV3IEJ5dGVBcnJheU91dHB1dFN0cmVhbSgpOworCQkJRGF0YU91dHB1dFN0cmVhbSBvdXRwdXQgPQorCQkJCW5ldyBEYXRhT3V0cHV0U3RyZWFtKGJ5dGVPdXRwdXQpOworCQkJU3RyaW5nIG91dHB1dFN0cmluZyA9IG91dHB1dFRleHQ7CisJCQlpZiAoR0VMb2cuREVCVUcpIHsKKwkJCQlvdXRwdXRTdHJpbmcgPSBvdXRwdXRUZXh0KyIgREVCVUcgIjsKKwkJCX0KKwkJCUdFTG9nLmRlYnVnKHRoaXMsIlNlbmRpbmc6ICIrb3V0cHV0U3RyaW5nKTsKKwkJCW91dHB1dC53cml0ZVVURihvdXRwdXRTdHJpbmcpOworCQkJCisJCQlvdXRwdXQuZmx1c2goKTsKKwkJCWJ5dGVbXSBidWYgPSBieXRlT3V0cHV0LnRvQnl0ZUFycmF5KCk7CisJCQkKKwkJCWNvbm5lY3Quc2V0UmVxdWVzdFByb3BlcnR5KCJDb250ZW50LWxlbmd0aCIsICIiK2J1Zi5sZW5ndGgpOworCQkJRGF0YU91dHB1dFN0cmVhbSBkYXRhT3V0cHV0ID0KKwkJCQluZXcgRGF0YU91dHB1dFN0cmVhbShjb25uZWN0LmdldE91dHB1dFN0cmVhbSgpKTsKKwkJCWRhdGFPdXRwdXQud3JpdGUoYnVmKTsKKwkJCWRhdGFPdXRwdXQuZmx1c2goKTsKKwkJCWRhdGFPdXRwdXQuY2xvc2UoKTsKKwkJCQorCQkJRGF0YUlucHV0U3RyZWFtIGluID0gCisJCQkJbmV3IERhdGFJbnB1dFN0cmVhbShjb25uZWN0LmdldElucHV0U3RyZWFtKCkpOworCQkJU3RyaW5nIHN0cmluZ1ZhbHVlID0gaW4ucmVhZFVURigpOworCQkJCisJCQlpbi5jbG9zZSgpOworCQkJCisJCQlpZiAoc3RyaW5nVmFsdWUuZXF1YWxzKGV4cGVjdGVkVGV4dCkpIHsKKwkJCQlTdHJpbmcgbXNnID0gIk9LOiAiKyAgICAgICAgICAgICAgCisJICAgICAgICAgICAgIiBSZWNlaXZlZDogIitzdHJpbmdWYWx1ZTsKKwkgICAgICAgICAgICBHRUxvZy5kZWJ1Zyh0aGlzLG1zZyk7CisJCQl9IGVsc2UgeworCQkJCWVycm9yID0gIkVSUk9SICIrCisJCQkJCSAgICAgICAgICAgICAgICAiRXhwZWN0ZWQ6ICIrZXhwZWN0ZWRUZXh0KworCQkJCQkgICAgICAgICAgICAgICAgIiBSZWNlaXZlZDogIitzdHJpbmdWYWx1ZTsKKwkJCQlHRUxvZy5kZWJ1Zyh0aGlzLGVycm9yKTsKKwkJCQlyZXN1bHQ9ZmFsc2U7CQorCQkJfQorCQl9IGNhdGNoIChNYWxmb3JtZWRVUkxFeGNlcHRpb24gZSkgewkKKwkJCQorCQkJR0VMb2cuZGVidWcoZS5nZXRNZXNzYWdlKCkpOworCQkKKwkJCWVycm9yID0iRVJST1IgSW52YWxpZCBVUkwgIit1cmxzdHI7CisJCQlyZXN1bHQgPSBmYWxzZTsKKwkJfSBjYXRjaCAoSU9FeGNlcHRpb24gZSkgewkJCQorCQkJR0VMb2cuZGVidWcoZSsiOiAiK2UuZ2V0TWVzc2FnZSgpKTsKKwkJCQorCQkJZXJyb3I9IkVYQ0VQVElPTiAgIitlKyI6ICIrZS5nZXRNZXNzYWdlKCk7CisJCQlyZXN1bHQgPSBmYWxzZTsKKwkJfQorCQlBY3RpdmF0b3IubG9nRXJyb3IoZXJyb3IsIG51bGwpOworCQlyZXR1cm4gcmVzdWx0OworCX0KKwkKKwkKKwkvKioKKwkgKiBSZXR1cm4gdGhlIGVycm9yIG1lc3NhZ2UgZnJvbSB0aGUgbGFzdCBjaGVjay4KKwkgKiAKKwkgKiBAcmV0dXJuIEVycm9yIG1lc3NhZ2UgZnJvbSB0aGUgcHJldmlvdXMgY2FsbCAKKwkgKiB0byBWZXJpZnlDbGllbnQuCisJICovCisJcHVibGljIFN0cmluZyBnZXRFcnJvcigpIHsKKwkJcmV0dXJuIGVycm9yOworCX0KKwkvKioKKwkgKiBAcGFyYW0gYXJncworCSAqLworCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKKwkJCisKKwl9Cit9CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkuZ2Uvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvZ2Uvc2VydmxldC9WZXJpZnlTZXJ2bGV0LmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkuZ2Uvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvZ2Uvc2VydmxldC9WZXJpZnlTZXJ2bGV0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWQ5ZDI3OQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5nZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9nZS9zZXJ2bGV0L1ZlcmlmeVNlcnZsZXQuamF2YQpAQCAtMCwwICsxLDEyNSBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnVpLmdlLnNlcnZsZXQ7CisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8gCitpbXBvcnQgamF2YS5pby5CeXRlQXJyYXlPdXRwdXRTdHJlYW07CitpbXBvcnQgamF2YS5pby5EYXRhSW5wdXRTdHJlYW07CitpbXBvcnQgamF2YS5pby5EYXRhT3V0cHV0U3RyZWFtOworaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247CitpbXBvcnQgamF2YS5pby5QcmludFdyaXRlcjsKKworaW1wb3J0IGphdmF4LnNlcnZsZXQuU2VydmxldEV4Y2VwdGlvbjsKK2ltcG9ydCBqYXZheC5zZXJ2bGV0LlNlcnZsZXRPdXRwdXRTdHJlYW07CitpbXBvcnQgamF2YXguc2VydmxldC5odHRwLkh0dHBTZXJ2bGV0OworaW1wb3J0IGphdmF4LnNlcnZsZXQuaHR0cC5IdHRwU2VydmxldFJlcXVlc3Q7CitpbXBvcnQgamF2YXguc2VydmxldC5odHRwLkh0dHBTZXJ2bGV0UmVzcG9uc2U7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnVpLkFjdGl2YXRvcjsKKworCisvKioKKyAqIFNlcnZsZXQgdGhhdCBhbGxvd3MgdGhlIGNsaWVudCB0byB2ZXJpZnkgdGhhdCB0aGUgCisgKiB3ZWIgc2VydmVyIGlzIHN0YXJ0ZWQgYW5kIHRoZSBTVEVNLUdvb2dsZUVhcnRoIHNlcnZsZXRzIAorICogYXJlIGRlcGxveWVkLgorICogCisgKiBJZiBpdCBnZXRzIGEgU3RyaW5nICJWZXJpZnlDbGllbnQgdi52LnYiCisgKiBJdCByZXR1cm5zIGEgU3RyaW5nICJWZXJpZnlTZXJ2bGV0IHYudi52IgorICogCisgKi8KK3B1YmxpYyBjbGFzcyBWZXJpZnlTZXJ2bGV0IGV4dGVuZHMgSHR0cFNlcnZsZXQgeworCQorCXByaXZhdGUgc3RhdGljIGZpbmFsIGxvbmcgc2VyaWFsVmVyc2lvblVJRCA9IDFMOworCQorCQorCSAgLyoqCisgICAgICogU3RyaW5nIHRoYXQgd2Ugd2lsbCBzZW5kIHRoZSBjbGllbnQKKyAgICAgKi8KKyAJcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIG91dHB1dFRleHQ9IlZlcmlmeVNlcnZsZXQgIisKKyAJCQlWZXJzaW9uLnZlcnNpb247CisgCS8qKgorIAkgKiBTdHJpbmcgdGhhdCBjbGllbnQgc2hvdWxkIHNlbmQgdXMuCisgCSAqLworIAlwcml2YXRlIHN0YXRpYyBTdHJpbmcgZXhwZWN0ZWRUZXh0PSJWZXJpZnlDbGllbnQgIisKKyAJIAkJVmVyc2lvbi52ZXJzaW9uOworICAgIC8qKgorICAgICAqIAorICAgICAqIEBzZWUgamF2YXguc2VydmxldC5odHRwLkh0dHBTZXJ2bGV0I3NlcnZpY2UoamF2YXguc2VydmxldC5odHRwLkh0dHBTZXJ2bGV0UmVxdWVzdCwgamF2YXguc2VydmxldC5odHRwLkh0dHBTZXJ2bGV0UmVzcG9uc2UpCisgICAgICovCisgICAgcHJvdGVjdGVkIHZvaWQgc2VydmljZShIdHRwU2VydmxldFJlcXVlc3QgcmVxdWVzdCxIdHRwU2VydmxldFJlc3BvbnNlIHJlc3BvbnNlKSAKKyAgICAgICAgICAgIHRocm93cyBTZXJ2bGV0RXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7CisgICAgCQorCQlEYXRhSW5wdXRTdHJlYW0gaW4gPSAKKwkJCW5ldyBEYXRhSW5wdXRTdHJlYW0ocmVxdWVzdC5nZXRJbnB1dFN0cmVhbSgpKTsKKwkJcmVzcG9uc2Uuc2V0Q29udGVudFR5cGUoImFwcGxpY2F0aW9uL29jdGVyLXN0cmVhbSIpOworCQkvLyB1c2UgQnl0ZUFycmF5IG91dHB1dAorCQlCeXRlQXJyYXlPdXRwdXRTdHJlYW0gYnl0ZU91dHB1dCA9IG5ldyBCeXRlQXJyYXlPdXRwdXRTdHJlYW0oKTsKKwkJRGF0YU91dHB1dFN0cmVhbSBvdXRwdXQgPQorCQkJbmV3IERhdGFPdXRwdXRTdHJlYW0oYnl0ZU91dHB1dCk7CisJCS8vCisJCS8vIHJlYWQgdGhlIGlucHV0IGZyb20gdGhlIGNsaWVudAorCQkvLworCQlTdHJpbmcgc3RyaW5nVmFsdWUgPSBpbi5yZWFkVVRGKCk7CisJCWlmIChzdHJpbmdWYWx1ZS5zdGFydHNXaXRoKGV4cGVjdGVkVGV4dCkpIHsKKwkJCW91dHB1dC53cml0ZVVURihvdXRwdXRUZXh0KTsKKwkJCWlmIChzdHJpbmdWYWx1ZS5jb250YWlucygiREVCVUciKSkgeworCQkJCVNsaWRlU2hvd1NlcnZsZXQuREVCVUcgPSB0cnVlOworCQkJfQorCQl9IGVsc2UgeworCQkJU3RyaW5nIGVycm1zZyA9ICJFcnJvcjogIisKKwkJCSAgICAgICAgICAgICAgICAiRXhwZWN0ZWQ6ICIrZXhwZWN0ZWRUZXh0KworCQkJICAgICAgICAgICAgICAgICIgUmVjZWl2ZWQ6ICIrc3RyaW5nVmFsdWU7CisJCQlkZWJ1ZyhlcnJtc2cpOworCQkJb3V0cHV0LndyaXRlVVRGKGVycm1zZyk7CisJCX0KKwkJb3V0cHV0LmZsdXNoKCk7CisJCWJ5dGVbXSBidWYgPSBieXRlT3V0cHV0LnRvQnl0ZUFycmF5KCk7CisJCXJlc3BvbnNlLnNldENvbnRlbnRMZW5ndGgoYnVmLmxlbmd0aCk7CisJCVNlcnZsZXRPdXRwdXRTdHJlYW0gc2VydmxldE91dHB1dCA9IHJlc3BvbnNlLmdldE91dHB1dFN0cmVhbSgpOworCQlzZXJ2bGV0T3V0cHV0LndyaXRlKGJ1Zik7CisJCXNlcnZsZXRPdXRwdXQuY2xvc2UoKTsKKwkJCisJfQorCQorCQorCUBTdXBwcmVzc1dhcm5pbmdzKCJ1bnVzZWQiKQorCXByaXZhdGUgdm9pZCBlcnJIdG1sKEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzcG9uc2UsIFN0cmluZyBtc2cpCisJCQl0aHJvd3MgSU9FeGNlcHRpb24geworCQlyZXNwb25zZS5zZXRDb250ZW50VHlwZSgidGV4dC9odG1sIik7CisJCVByaW50V3JpdGVyIG91dCA9IG5ldyBQcmludFdyaXRlcihyZXNwb25zZS5nZXRPdXRwdXRTdHJlYW0oKSk7CisJCW91dC5wcmludGxuKCI8aHRtbD4iKTsKKwkJb3V0LnByaW50bG4oIjxoZWFkPjx0aXRsZT5WZXJpZnlTZXJ2bGV0IEVycm9yPC90aXRsZT48L2hlYWQ+Iik7CisJCW91dC5wcmludGxuKCI8Ym9keT4iKTsKKwkJb3V0LnByaW50bG4oIjxwPiIgKyBtc2cgKyAiPC9wPiIpOworCQlvdXQucHJpbnRsbigiPC9ib2R5PjwvaHRtbD4iKTsKKwkJb3V0LmZsdXNoKCk7CisJfQorCQorCisKKyAgICAvKioKKyAgICAgKiBwcmludCBkZWJ1ZyBtZXNzYWdlcyB0byB0aGUgc2VydmVyIGxvZy4KKyAgICAgKiBAcGFyYW0gbXNnCisgICAgICovCisJcHJpdmF0ZSBzdGF0aWMgdm9pZCBkZWJ1ZyhTdHJpbmcgbXNnKSB7CisJCWlmIChTbGlkZVNob3dTZXJ2bGV0LkRFQlVHKSB7CQkgIAorCQkgIEFjdGl2YXRvci5sb2dJbmZvcm1hdGlvbigiVmVyaWZ5U2VydmxldDogIittc2cpOworCQl9CisJfQorCQorCUBTdXBwcmVzc1dhcm5pbmdzKCJ1bnVzZWQiKQorCXByaXZhdGUgc3RhdGljIHZvaWQgZGVidWcoU3RyaW5nIG1zZyxUaHJvd2FibGUgZSkgeworCQkvL2xvZyhtc2csZSk7CisJCUFjdGl2YXRvci5sb2dJbmZvcm1hdGlvbihtc2cpOworCQllLnByaW50U3RhY2tUcmFjZSgpOworCQkKKwl9Cit9CisKKwpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLmdlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL2dlL3NlcnZsZXQvVmVyc2lvbi5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLmdlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL2dlL3NlcnZsZXQvVmVyc2lvbi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBmODQ3MDYKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkuZ2Uvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvZ2Uvc2VydmxldC9WZXJzaW9uLmphdmEKQEAgLTAsMCArMSwyMyBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnVpLmdlLnNlcnZsZXQ7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDY3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqCisgKiBTdXBwbHkgYSBWZXJzaW9uIG51bWJlciBmb3IgdGhlIHNldmxldHMgCisgKiBNdXN0IGJlIGEgc2VwYXJhdGUgY2xhc3MgZm9yIGNvbXBpbGUgcmVhc29ucworICovCitwdWJsaWMgY2xhc3MgVmVyc2lvbiB7CisgIC8qKgorICAgKiBWZXJzaW9uCisgICAqLworICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyB2ZXJzaW9uID0gIjAuMS4xIjsKK30KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5nZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9nZS92aWV3cy9EaXNwbGF5QXJlYURpYWxvZy5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLmdlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL2dlL3ZpZXdzL0Rpc3BsYXlBcmVhRGlhbG9nLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmZkYWM2MgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5nZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9nZS92aWV3cy9EaXNwbGF5QXJlYURpYWxvZy5qYXZhCkBAIC0wLDAgKzEsMTkxIEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0udWkuZ2Uudmlld3M7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5kaWFsb2dzLklEaWFsb2dDb25zdGFudHM7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuZGlhbG9ncy5UaXRsZUFyZWFEaWFsb2c7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS51aS5nZS5HRUxvZzsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuU1dUOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5sYXlvdXQuUm93TGF5b3V0OworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkJ1dHRvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21ibzsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29udHJvbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Hcm91cDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5MYWJlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5TaGVsbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5UZXh0OworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqCisgKiAgTGV0IHRoZSB1c2VyIGVudGVyIHRoZSBpbmZvIG5lZWRlZCB0byBkaXNwbGF5IAorICogIG9uIEdvb2dsZUVhcnRoIHRoZSBzZWxlY3RlZCBBZG1pbiBhcmVhLgorICoKKyAqLworcHVibGljIGNsYXNzIERpc3BsYXlBcmVhRGlhbG9nIGV4dGVuZHMgVGl0bGVBcmVhRGlhbG9nIHsKKworCXByaXZhdGUgQ29tYm8gY291bnRyeSA9IG51bGw7CisJcHJpdmF0ZSBDb21ibyBsZXZlbCA9IG51bGw7CisJcHJpdmF0ZSBUZXh0ICBzZWFyY2ggPSBudWxsOworCUJ1dHRvbiBjbGVhckJ1dHRvbiA9IG51bGw7OworCQorCQorCWJvb2xlYW4gckNsZWFyID0gZmFsc2U7CisJCisJLyoqCisJICogQHBhcmFtIHBhcmVudFNoZWxsCisJICovCisJcHVibGljIERpc3BsYXlBcmVhRGlhbG9nKFNoZWxsIHBhcmVudFNoZWxsKSB7CisJCXN1cGVyKHBhcmVudFNoZWxsKTsKKwkJCisJfQorICAgIAorCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2UuamZhY2UuZGlhbG9ncy5UaXRsZUFyZWFEaWFsb2cjY3JlYXRlQ29udGVudHMob3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlKQorCSAqIAorCSAqIEBwYXJhbSBwYXJlbnQgIHBhcmVudAorCSAqLwkKKwlwcm90ZWN0ZWQgQ29udHJvbCBjcmVhdGVDb250ZW50cyhDb21wb3NpdGUgcGFyZW50KSB7CisJCUNvbnRyb2wgY29udGVudHMgPSBzdXBlci5jcmVhdGVDb250ZW50cyhwYXJlbnQpOworCQlzZXRNZXNzYWdlKCJFbnRlciBBZG1pbiBBcmVhIGluZm8uIik7CisJCXNldFRpdGxlKCJEaXNwbGF5QXJlYSIpOworCQlyZXR1cm4gY29udGVudHM7CisJfQorCQorCS8qIChub24tSmF2YWRvYykKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLmpmYWNlLmRpYWxvZ3MuVGl0bGVBcmVhRGlhbG9nI2NyZWF0ZURpYWxvZ0FyZWEob3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlKQorCSAqLworCXByb3RlY3RlZCBDb250cm9sIGNyZWF0ZURpYWxvZ0FyZWEoQ29tcG9zaXRlIHBhcmVudCkgeworCQlDb21wb3NpdGUgY29tcG9zaXRlID0gKENvbXBvc2l0ZSlzdXBlci5jcmVhdGVEaWFsb2dBcmVhKHBhcmVudCk7CisJCS8vY29tcG9zaXRlLnNldExheW91dChuZXcgR3JpZExheW91dCg2LGZhbHNlKSk7CisJCUdyb3VwIGdyb3VwMSA9IG5ldyBHcm91cChjb21wb3NpdGUsU1dULlNIQURPV19JTik7CisJCWdyb3VwMS5zZXRMYXlvdXQobmV3IFJvd0xheW91dChTV1QuSE9SSVpPTlRBTCkpOworCQlMYWJlbCBjb3VudHJ5TGFiZWwgPSBuZXcgTGFiZWwoZ3JvdXAxLFNXVC5OT05FKTsKKwkJY291bnRyeUxhYmVsLnNldFRleHQoIkNvdW50cnk6ICIpOworCQljb3VudHJ5ID0gbmV3IENvbWJvKGdyb3VwMSxTV1QuRFJPUF9ET1dOKTsJCQorCQljb3VudHJ5LnNldFRleHRMaW1pdCgzKTsJCQorCQlTdHJpbmdbXSBpdGVtcyA9IG5ldyBTdHJpbmdbXSB7IlVTQSIsIkNBTiIsIk1FWCJ9OworCQljb3VudHJ5LnNldEl0ZW1zKGl0ZW1zKTsKKwkJCisJCWlmIChEaXNwbGF5QXJlYURhdGEuckNvdW50cnkgIT0gbnVsbCkgeworCQkJY291bnRyeS5zZXRUZXh0KERpc3BsYXlBcmVhRGF0YS5yQ291bnRyeSk7CisJCX0gZWxzZSB7CisJCQljb3VudHJ5LnNlbGVjdCgwKTsKKwkJfQorCQlMYWJlbCBsZXZlbExhYmVsID0gbmV3IExhYmVsKGdyb3VwMSxTV1QuTk9ORSk7CisJCWxldmVsTGFiZWwuc2V0VGV4dCgiTGV2ZWw6ICIpOworCQlsZXZlbCA9IG5ldyBDb21ibyhncm91cDEsU1dULkRST1BfRE9XTitTV1QuUkVBRF9PTkxZKTsJCQorCQlpdGVtcyA9IG5ldyBTdHJpbmdbXSB7IjAiLCIxIiwiMiJ9OworCQlsZXZlbC5zZXRUZXh0TGltaXQoMSk7CQkKKwkJbGV2ZWwuc2V0SXRlbXMoaXRlbXMpOworCQkKKwkJbGV2ZWwuc2VsZWN0KEludGVnZXIucGFyc2VJbnQoRGlzcGxheUFyZWFEYXRhLnJMZXZlbCkpOworCQkKKwkJTGFiZWwgc2VhcmNoTGFiZWwgPSBuZXcgTGFiZWwoY29tcG9zaXRlLFNXVC5OT05FKTsKKwkJc2VhcmNoTGFiZWwuc2V0VGV4dCgiU2VhcmNoIHRleHQ6ICIpOworCQlzZWFyY2ggPSBuZXcgVGV4dChjb21wb3NpdGUsU1dULkJPUkRFUik7CisJCXNlYXJjaC5zZXRUZXh0TGltaXQoNDgpOworCQorCQlpZiAoRGlzcGxheUFyZWFEYXRhLnJTZWFyY2ggIT0gbnVsbCkgeworCQkJU3RyaW5nIHNlYXJjaGFyZyA9IERpc3BsYXlBcmVhRGF0YS5yU2VhcmNoOworCQkJaWYgKHNlYXJjaGFyZy5sZW5ndGgoKSA8MTApIAorCQkJCXNlYXJjaGFyZyA9IHNlYXJjaGFyZysiICAgICAgICAgIjsKKwkJCXNlYXJjaC5zZXRUZXh0KHNlYXJjaGFyZyk7CisJCX0JCQkKKwkJCisJCUdyb3VwIGdyb3VwMiA9IG5ldyBHcm91cChjb21wb3NpdGUsU1dULlNIQURPV19JTik7CisJCWdyb3VwMi5zZXRMYXlvdXQobmV3IFJvd0xheW91dChTV1QuSE9SSVpPTlRBTCkpOworCQljbGVhckJ1dHRvbiA9IG5ldyBCdXR0b24oZ3JvdXAyLFNXVC5DSEVDSyk7CisJCWNsZWFyQnV0dG9uLnNldFRleHQoIkNsZWFyIE1hcCIpOworCQlyZXR1cm4gY29tcG9zaXRlOworCX0KKwkKKwkvKioKKwkgKiBjcmVhdGVzIEFwcGx5LCBPSyBhbmQgQ2FuY2VsIGJ1dHRvbnMuCisJICogCisJICogQHNlZSBvcmcuZWNsaXBzZS5qZmFjZS5kaWFsb2dzLkRpYWxvZyNjcmVhdGVCdXR0b25zRm9yQnV0dG9uQmFyKG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZSkKKwkgKi8KKwlwdWJsaWMgdm9pZCBjcmVhdGVCdXR0b25zRm9yQnV0dG9uQmFyKENvbXBvc2l0ZSBwYXJlbnQpIHsKKwkJY3JlYXRlQnV0dG9uKHBhcmVudCxJRGlhbG9nQ29uc3RhbnRzLlBST0NFRURfSUQsCisJCQkJIkFwcGx5IixmYWxzZSk7CisJCWNyZWF0ZUJ1dHRvbihwYXJlbnQsSURpYWxvZ0NvbnN0YW50cy5PS19JRCwKKwkJCQlJRGlhbG9nQ29uc3RhbnRzLk9LX0xBQkVMLHRydWUpOworCQljcmVhdGVCdXR0b24ocGFyZW50LElEaWFsb2dDb25zdGFudHMuQ0FOQ0VMX0lELAorCQkJCUlEaWFsb2dDb25zdGFudHMuQ0FOQ0VMX0xBQkVMLGZhbHNlKTsKKwl9CisJCisJLyoqCisJICogZ2V0cyBjb250cm9sIHdoZW4gdXNlciBwcmVzc2VzIEFwcGx5LCBPSyBvciBDYW5jZWwuCisJICogSXQgc2V0cyB0aGUgcmMgdG8gYnV0dG9uIGlkLCBjYWxscyBjbG9zZSBhbmQgcmV0dXJucy4KKwkgKiAKKwkgKiAgCisJICogCisJICogQHNlZSBvcmcuZWNsaXBzZS5qZmFjZS5kaWFsb2dzLkRpYWxvZyNidXR0b25QcmVzc2VkKGludCkKKwkgKiBAcGFyYW0gaWQgZm9yIHRoZSBidXR0b24gdGhhdCB3YXMgcHJlc3NlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIGJ1dHRvblByZXNzZWQoaW50IGlkKSB7CisJCXNldFJldHVybkNvZGUoaWQpOworCQlHRUxvZy5kZWJ1Zyh0aGlzLCIiK2lkKTsKKwkJLy9pZiAoIGlkICE9IElEaWFsb2dDb25zdGFudHMuUFJPQ0VFRF9JRCkKKwkJY2xvc2UoKTsKKwkJcmV0dXJuOworCX0KKwkvKioKKwkgKiBUaGlzIGdldHMgdGhlIHZhbHVlcyBmcm9tIHRoZSBkaWFsb2cgYW5kIHNhdmVzIHRoZW0gCisJICogc28gdGhhdCB0aGUgY2FsbGVyIG9mIHRoaXMgZGlhbG9nIGNhbiBnZXQgdGhlbSBsYXRlci4KKwkgKiAKKwkgKiBAcmV0dXJuIHRydWUgaWYgY2xvc2UgZGlhbG9nIGlzIE9LCisJICovCisJcHVibGljIGJvb2xlYW4gY2xvc2UoKSB7CisJCQorCQlEaXNwbGF5QXJlYURhdGEuckNvdW50cnkgPSBjb3VudHJ5LmdldFRleHQoKTsKKwkJRGlzcGxheUFyZWFEYXRhLnJMZXZlbCA9IGxldmVsLmdldFRleHQoKTsKKwkJRGlzcGxheUFyZWFEYXRhLnJTZWFyY2ggPSBzZWFyY2guZ2V0VGV4dCgpOworCQlyQ2xlYXIgPSBjbGVhckJ1dHRvbi5nZXRTZWxlY3Rpb24oKTsKKwkJcmV0dXJuIHN1cGVyLmNsb3NlKCk7CisJfQorCS8qKgorCSAqIEByZXR1cm4gbmFtZSBvZiBmaWxlIGNvbnRhaW5pbmcgR01MIGZvciBhcmVhIGJvcmRlcgorCSAqLworCXB1YmxpYyBTdHJpbmcgZ2V0QWRtaW5GaWxlKCkgeworCQlTdHJpbmcgckNvdW50cnkgPSBEaXNwbGF5QXJlYURhdGEuckNvdW50cnk7CisJCUdFTG9nLmRlYnVnKHRoaXMsckNvdW50cnkpOworCQlTdHJpbmcgYWRtaW5GaWxlID1yQ291bnRyeSsiLyIrckNvdW50cnkrIl8iKworCQkgICBEaXNwbGF5QXJlYURhdGEuckxldmVsKyJfTUFQLnhtbCI7CisJCXJldHVybiAgYWRtaW5GaWxlOworCX0KKwkKKwkvKioKKwkgKiAKKwkgKiBAcmV0dXJuIFNlYXJjaCBhcmd1bWVudAorCSAqLworCXB1YmxpYyBTdHJpbmcgZ2V0U2VhcmNoKCkgeworCQlyZXR1cm4gRGlzcGxheUFyZWFEYXRhLnJTZWFyY2g7CisJfQorCS8qKgorCSAqIEByZXR1cm4gdHJ1ZSBpZiB1c2VyIHdhbnRzIHRvIGNsZWFyIHRoZSBleGlzdGluZyBtYXAgZGlzcGxheQorCSAqLworCXB1YmxpYyBib29sZWFuIGlzQ2xlYXIoKSB7CisJCXJldHVybiByQ2xlYXI7CisJfQorCS8qKgorCSAqIFNpbXBsZSBjbGFzcyB0byBzdG9yZSB0aGUgZGlhbG9ncyBsYXN0IHVzZWQgdmFsdWVzCisJICoKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGNsYXNzIERpc3BsYXlBcmVhRGF0YSB7CisJCS8qKiBzYXZlIGFkbWluIGxldmVsICovCisJCXB1YmxpYyBzdGF0aWMgU3RyaW5nIHJMZXZlbCA9ICIyIjsKKwkJLyoqIHNhdmUgY291bnRyeSAqLworCQlwdWJsaWMgc3RhdGljIFN0cmluZyByQ291bnRyeSA9ICJVU0EiOworCQkvKiogc2F2ZSBzZWFyY2ggdGV4dCBmb3IgYWRtaW4gYXJlYSAqLworCQlwdWJsaWMgc3RhdGljIFN0cmluZyByU2VhcmNoID0gbnVsbDsKKwl9Cit9CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkuZ2Uvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvZ2Uvdmlld3MvR0VBZHZhbmNlZFByZWZlcmVuY2VQYWdlLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkuZ2Uvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvZ2Uvdmlld3MvR0VBZHZhbmNlZFByZWZlcmVuY2VQYWdlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzBmYWUwYQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5nZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9nZS92aWV3cy9HRUFkdmFuY2VkUHJlZmVyZW5jZVBhZ2UuamF2YQpAQCAtMCwwICsxLDE1MiBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnVpLmdlLnZpZXdzOworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovIAoraW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5wcmVmZXJlbmNlLkJvb2xlYW5GaWVsZEVkaXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5wcmVmZXJlbmNlLkZpZWxkRWRpdG9yUHJlZmVyZW5jZVBhZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UucHJlZmVyZW5jZS5JUHJlZmVyZW5jZVN0b3JlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udWkuZ2UuQWN0aXZhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udWkuZ2UuR0VMb2c7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaDsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5JV29ya2JlbmNoUHJlZmVyZW5jZVBhZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkucHJlZmVyZW5jZXMuU2NvcGVkUHJlZmVyZW5jZVN0b3JlOworCisKKy8qKgorICogSGFuZGxlIEFkdmFuY2VkIFByZWZlcmVuY2VzIGZvciB0aGUgCisgKiBTVEVNIC0gR29vZ2xlRWFydGggaW50ZXJmYWNlLgorICogCisgKiBUaGlzIGNsYXNzIHdhcyBjb3BpZWQgZnJvbSBHRVByZWZlcmVuY2VQYWdlLmphdmEKKyAqIFRoaXMgY2xhc3MgcmVwcmVzZW50cyBhIHByZWZlcmVuY2UgcGFnZSB0aGF0CisgKiBpcyBjb250cmlidXRlZCB0byB0aGUgUHJlZmVyZW5jZXMgZGlhbG9nLiBCeSAKKyAqIHN1YmNsYXNzaW5nIDxzYW1wPkZpZWxkRWRpdG9yUHJlZmVyZW5jZVBhZ2U8L3NhbXA+LCB3ZQorICogY2FuIHVzZSB0aGUgZmllbGQgc3VwcG9ydCBidWlsdCBpbnRvIEpGYWNlIHRoYXQgYWxsb3dzCisgKiB1cyB0byBjcmVhdGUgYSBwYWdlIHRoYXQgaXMgc21hbGwgYW5kIGtub3dzIGhvdyB0byAKKyAqIHNhdmUsIHJlc3RvcmUgYW5kIGFwcGx5IGl0c2VsZi4KKyAqIDxwPgorICogVGhpcyBwYWdlIGlzIHVzZWQgdG8gbW9kaWZ5IHByZWZlcmVuY2VzIG9ubHkuIFRoZXkKKyAqIGFyZSBzdG9yZWQgaW4gdGhlIHByZWZlcmVuY2Ugc3RvcmUgdGhhdCBiZWxvbmdzIHRvCisgKiB0aGUgbWFpbiBwbHVnLWluIGNsYXNzLiBUaGF0IHdheSwgcHJlZmVyZW5jZXMgY2FuCisgKiBiZSBhY2Nlc3NlZCBkaXJlY3RseSB2aWEgdGhlIHByZWZlcmVuY2Ugc3RvcmUuCisgKiAKKyAqIFRoaXMgdXNlcyB0aGUgamZhY2UgUHJlZmVyZW5jZXMgQVBJIHJhdGhlciB0aGFuCisgKiAgdGhlIG5ldyBTV1QgUHJlZmVyZW5jZXMgQVBJICBiZWNhdXNlIGl0IGlzIHNpbXBsZXIgCisgKiAgdG8gaW1wbGVtZW50LiAKKyAqICAKKyAqICBUaGUgc3RhdGljIHZhbHVlcyB1c2VkIHRvIGFjY2VzcyB0aGUgcHJlZmVyZW5jZXMgCisgKiAgYW5kIHRoZSBtZXRob2RzIHVzZWQgdG8gYWNjZXNzIHRoZW0gYXJlIAorICogIGZvdW5kIGluIEdFUHJlZmVyZW5jZVBhZ2Ugc28gdGhhdCB3ZSBjYW4gbW92ZSB0aGUgCisgKiAgR1VJIGludGVyZmFjZSBmcm9tIHBhZ2UgdG8gcGFnZSB3aXRob3V0IGNoYW5naW5nIHRoZSAKKyAqICBjb2RlIHRoYXQgdXNlcyB0aGUgcHJlZmVyZW5jZS4gCisgKiAgRm9yIEV4YW1wbGUsIHRoZSBQX1NIT1dfQk9SREVSIHZhcmlhYmxlIGFuZCB0aGUgCisgKiAgaXNTaG93Qm9yZGVyKCkgbWV0aG9kIGlzIGZvdW5kIGluIEdFUGVyZm9ybWFuY2VQYWdlIAorICogIGV2ZW4gdGhvdWdoIHRoZSBjb2RlIHRvIHNldCBpdCBpcyBmb3VuZCBpbiAKKyAqICBHRUFkdmFuY2VkUGVyZm9ybWFuY2VQYWdlLgorICovCisKK3B1YmxpYyBjbGFzcyBHRUFkdmFuY2VkUHJlZmVyZW5jZVBhZ2UKKwlleHRlbmRzIEZpZWxkRWRpdG9yUHJlZmVyZW5jZVBhZ2UKKwlpbXBsZW1lbnRzIElXb3JrYmVuY2hQcmVmZXJlbmNlUGFnZSB7CisgICAgCisJCisJCisJCisJCisJCisJCisJLyoqCisJICogCisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBJUHJlZmVyZW5jZVN0b3JlIHByZWZlcmVuY2VzID0gCisJCUFjdGl2YXRvci5nZXREZWZhdWx0KCkuZ2V0UHJlZmVyZW5jZVN0b3JlKCk7CisJICAgIAorCQorCS8qKgorCSAqIGNvbnN0cnVjdCB0aGUgUHJlZmVyZW5jZSBwYWdlIGZvciBHb29nbGVFYXJ0aCBpbnRlcmZhY2UuCisJICogCisJICovCisJcHVibGljIEdFQWR2YW5jZWRQcmVmZXJlbmNlUGFnZSgpIHsKKwkJc3VwZXIoR1JJRCk7CisJCXNldFByZWZlcmVuY2VTdG9yZShwcmVmZXJlbmNlcyk7CisJCXNldERlc2NyaXB0aW9uKCJBZHZhbmNlZCBQcmVmZXJlbmNlcyBmb3IgdGhlIFNURU0gLSBHb29nbGVFYXJ0aCBpbnRlcmZhY2VcbiAiKTsKKwl9CisJCisJLyoqCisJICogQ3JlYXRlcyB0aGUgZmllbGQgZWRpdG9ycy4gRmllbGQgZWRpdG9ycyBhcmUgYWJzdHJhY3Rpb25zIG9mCisJICogdGhlIGNvbW1vbiBHVUkgYmxvY2tzIG5lZWRlZCB0byBtYW5pcHVsYXRlIHZhcmlvdXMgdHlwZXMKKwkgKiBvZiBwcmVmZXJlbmNlcy4gRWFjaCBmaWVsZCBlZGl0b3Iga25vd3MgaG93IHRvIHNhdmUgYW5kCisJICogcmVzdG9yZSBpdHNlbGYuCisJICovCisJcHVibGljIHZvaWQgY3JlYXRlRmllbGRFZGl0b3JzKCkgeworCQkKKwkJLy8gVHVybiB0aGUgZGVidWcgb3B0aW9uIG9uIG9yIG9mZgorCQlhZGRGaWVsZCgKKwkJCQluZXcgQm9vbGVhbkZpZWxkRWRpdG9yKAorCQkJCQlHRVByZWZlcmVuY2VQYWdlLlBfREVCVUcsCisJCQkJCSImQWxsb3cgZGVidWcgb3V0cHV0IG9uIENvbnNvbGUiLAorCQkJCQlnZXRGaWVsZEVkaXRvclBhcmVudCgpKSk7CisJCQorCQkvLyBlbmFibGUgZmVhdHVyZSB0byB1c2UgYm91bmRpbmcgYm94IHRvIG9ubHkgCisJCS8vIGdlbmVyYXRlIHBvbHlnb25zIHdpdGhpbiB0aGUgdXNlcnMgdmlldworCQlhZGRGaWVsZCgKKwkJCQluZXcgQm9vbGVhbkZpZWxkRWRpdG9yKAorCQkJCQlHRVByZWZlcmVuY2VQYWdlLlBfQkJPWCwKKwkJCQkJIlVzZSBHb29nbGVFYXJ0aCBCb3VuZGluZyBCb3ggdG8gZmlsdGVyIG91dHB1dCIsIAorCQkJCQlnZXRGaWVsZEVkaXRvclBhcmVudCgpKSk7CisgICAgICAgIC8vIFNlZSBHRVBlcmZvcm1hbmNlUGFnZSBpc1Nob3dCb3JkZXIoKSBtZXRob2QKKwkJYWRkRmllbGQoCisJCQkJbmV3IEJvb2xlYW5GaWVsZEVkaXRvcigKKwkJCQkJR0VQcmVmZXJlbmNlUGFnZS5QX1NIT1dfQk9SREVSLAorCQkJCQkiU2hvdyBBZG1pbiBBcmVhIEJvcmRlcnMiLAorCQkJCQlnZXRGaWVsZEVkaXRvclBhcmVudCgpKSk7CisJCQorCisgICAgICAgIC8vIFNlZSBHRVBlcmZvcm1hbmNlUGFnZSBpc1Rlc3QoKSBtZXRob2QKKwkJYWRkRmllbGQoCisJCQkJbmV3IEJvb2xlYW5GaWVsZEVkaXRvcigKKwkJCQkJR0VQcmVmZXJlbmNlUGFnZS5QX1RFU1QsCisJCQkJCSJFeHBlcmltZW50YWwgT3B0aW9uIiwKKwkJCQkJZ2V0RmllbGRFZGl0b3JQYXJlbnQoKSkpOworCX0KKyAgICAKKwkKKwkvKiAobm9uLUphdmFkb2MpCisJICogQHNlZSBvcmcuZWNsaXBzZS51aS5JV29ya2JlbmNoUHJlZmVyZW5jZVBhZ2UjaW5pdChvcmcuZWNsaXBzZS51aS5JV29ya2JlbmNoKQorCSAqLworCXB1YmxpYyB2b2lkIGluaXQoSVdvcmtiZW5jaCB3b3JrYmVuY2gpIHsKKwl9CisJCisJcHVibGljIGJvb2xlYW4gcGVyZm9ybU9rKCkgeworCQl0cnkgeworCQkJaWYgKHByZWZlcmVuY2VzIGluc3RhbmNlb2YgU2NvcGVkUHJlZmVyZW5jZVN0b3JlKSB7CisJCQkgICAgU2NvcGVkUHJlZmVyZW5jZVN0b3JlIHAgPSAoU2NvcGVkUHJlZmVyZW5jZVN0b3JlKXByZWZlcmVuY2VzOworCQkJICAgIHAuc2F2ZSgpOworCQkJfQorCQl9IGNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7CQkJCisJCSAgICBHRUxvZy5lcnJvcigiRmFpbHVyZSBzYXZpbmcgUHJlZmVyZW5jZXMiLGUpOwkKKwkJfQorCQlHRUxvZy5kZWJ1Zyh0aGlzLCJzYXZlZCBwcmVmZXJlbmNlcyIpOworCQkKKwkJLy9HRUxvZy5kZWJ1Zyh0aGlzLCJQX1RFU1Q9IitHRVByZWZlcmVuY2VQYWdlLmlzVGVzdCgpKTsKKwkJCisJCQorCQlyZXR1cm4gc3VwZXIucGVyZm9ybU9rKCk7CisJfQorCQorLy9wdWJsaWMgc3RhdGljIGJvb2xlYW4gaXNUZXN0KCkgeworLy8JCQorLy8JCWlmIChwcmVmZXJlbmNlcyAhPSBudWxsKQorLy8JCQlyZXR1cm4gcHJlZmVyZW5jZXMuZ2V0Qm9vbGVhbihHRVByZWZlcmVuY2VQYWdlLlBfVEVTVCk7CisvLwkJZWxzZSAKKy8vCQkJcmV0dXJuIHRydWU7CisvLwl9Cit9IC8vIGNsYXNzClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLmdlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL2dlL3ZpZXdzL0dFUHJlZmVyZW5jZVBhZ2UuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5nZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9nZS92aWV3cy9HRVByZWZlcmVuY2VQYWdlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmFkM2NiNAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5nZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9nZS92aWV3cy9HRVByZWZlcmVuY2VQYWdlLmphdmEKQEAgLTAsMCArMSw2NzkgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS51aS5nZS52aWV3czsKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLyAKK2ltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOworaW1wb3J0IGphdmEudXRpbC5NYXA7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUHJlZmVyZW5jZXM7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlByZWZlcmVuY2VzLklQcm9wZXJ0eUNoYW5nZUxpc3RlbmVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QcmVmZXJlbmNlcy5Qcm9wZXJ0eUNoYW5nZUV2ZW50OworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnByZWZlcmVuY2UuQm9vbGVhbkZpZWxkRWRpdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnByZWZlcmVuY2UuRGlyZWN0b3J5RmllbGRFZGl0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UucHJlZmVyZW5jZS5GaWVsZEVkaXRvclByZWZlcmVuY2VQYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnByZWZlcmVuY2UuSVByZWZlcmVuY2VTdG9yZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5wcmVmZXJlbmNlLkludGVnZXJGaWVsZEVkaXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5wcmVmZXJlbmNlLlJhZGlvR3JvdXBGaWVsZEVkaXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5wcmVmZXJlbmNlLlN0cmluZ0ZpZWxkRWRpdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udWkuZ2UuQWN0aXZhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udWkuZ2UuQXNwZWN0OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udWkuZ2UuR0VMb2c7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS51aS5wcmVmZXJlbmNlcy5QcmVmZXJlbmNlQ29uc3RhbnRzOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2g7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaFByZWZlcmVuY2VQYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLnByZWZlcmVuY2VzLlNjb3BlZFByZWZlcmVuY2VTdG9yZTsKKworCisvKioKKyAqIEhhbmRsZSBQcmVmZXJlbmNlcyBmb3IgdGhlIFNURU0gLSBHb29nbGVFYXJ0aCBpbnRlcmZhY2UuCisgKiA8cHJlPgorICogVGhpcyBjbGFzcyBjb250YWlucyB0aGUgZm9sbG93aW5nOgorICogICAtIGNvZGUgdG8gcHJlc2VudCB0aGUgc2V0dGluZyBvZiB0aGUgcHJlZmVyZW5jZXMgCisgKiAgICAgYnkgdGhlIHVzZXIuICBUaGUgZ3VpIGZvciBzb21lIHByZWZlcmVuY2VzIGFyZSAKKyAqICAgICBoYW5kbGVkIGJ5IEdFQWR2YW5jZWRQcmVmZXJlbmNlUGFnZQorICogICAgIAorICogICAtIGdldHRlci9zZXR0ZXIgY29kZSBmb3IgYWxsIG9mIHRoZSBwcmVmZXJlbmNlcy4gCisgKiAgICAgbW9zdGx5IGdldHRlci4KKyAqICAgCisgKiAgIC0gY29kZSB0byBwaWNrIHVwIHRoZSBhc3BlY3QgcHJlZmVyZW5jZSBmcm9tIHRoZSAKKyAqICAgICB2aXN1YWxpemF0aW9uIHBhZ2UuCisgKiAKKyAqIFRoaXMgY2xhc3Mgd2FzIGluaXRpYWx5IGdlbmVyYXRlZCBieSB0aGUgUHJlZmVyZW5jZVBhZ2Ugd2l6YXJkIGFuZCAKKyAqIHRoZW4gbW9kaWZpZWQgYXMgZGVzY3JpYmVkIGluIAorICogIkJ1aWxkaW5nIENvbWVyY2lhbC1RdWFsaXR5IFBsdWdpbnMiIAorICogCisgKiBUaGlzIGNsYXNzIHJlcHJlc2VudHMgYSBwcmVmZXJlbmNlIHBhZ2UgdGhhdAorICogaXMgY29udHJpYnV0ZWQgdG8gdGhlIFByZWZlcmVuY2VzIGRpYWxvZy4gQnkgCisgKiBzdWJjbGFzc2luZyA8c2FtcD5GaWVsZEVkaXRvclByZWZlcmVuY2VQYWdlPC9zYW1wPiwgd2UKKyAqIGNhbiB1c2UgdGhlIGZpZWxkIHN1cHBvcnQgYnVpbHQgaW50byBKRmFjZSB0aGF0IGFsbG93cworICogdXMgdG8gY3JlYXRlIGEgcGFnZSB0aGF0IGlzIHNtYWxsIGFuZCBrbm93cyBob3cgdG8gCisgKiBzYXZlLCByZXN0b3JlIGFuZCBhcHBseSBpdHNlbGYuCisgKiA8cD4KKyAqIFRoaXMgcGFnZSBpcyB1c2VkIHRvIG1vZGlmeSBwcmVmZXJlbmNlcyBvbmx5LiBUaGV5CisgKiBhcmUgc3RvcmVkIGluIHRoZSBwcmVmZXJlbmNlIHN0b3JlIHRoYXQgYmVsb25ncyB0bworICogdGhlIG1haW4gcGx1Zy1pbiBjbGFzcy4gVGhhdCB3YXksIHByZWZlcmVuY2VzIGNhbgorICogYmUgYWNjZXNzZWQgZGlyZWN0bHkgdmlhIHRoZSBwcmVmZXJlbmNlIHN0b3JlLgorICogCisgKiBUaGlzIHVzZXMgdGhlIGpmYWNlIFByZWZlcmVuY2VzIEFQSSByYXRoZXIgdGhhbgorICogIHRoZSBuZXcgU1dUIFByZWZlcmVuY2VzIEFQSSAgYmVjYXVzZSBpdCBpcyBzaW1wbGVyIAorICogIHRvIGltcGxlbWVudC4gCisgKiAgPC9wcmU+CisgKi8KKworcHVibGljIGNsYXNzIEdFUHJlZmVyZW5jZVBhZ2UKKwlleHRlbmRzIEZpZWxkRWRpdG9yUHJlZmVyZW5jZVBhZ2UKKwlpbXBsZW1lbnRzIElXb3JrYmVuY2hQcmVmZXJlbmNlUGFnZSB7CisgICAgCisJLyoqCisJICogRm9sZGVyIHVzZWQgdG8gc3RvcmUgS01MIGZpbGVzCisJICovCisJc3RhdGljIGZpbmFsIFN0cmluZyBQX0ZPTERFUiA9ICJmb2xkZXJQcmVmZXJlbmNlIjsKKwkvKioKKwkgKiBTZXJ2ZXI6cG9ydCB1c2VkIGZvciBXZWIgc2VydmVyIHRoYXQgd2lsbCBmZWVkIHRoZSAKKwkgKiBLTUwgZmlsZXMgdG8gR29vZ2xlRWFydGguCisJICovCisJc3RhdGljIGZpbmFsIFN0cmluZyBQX1NFUlZFUl9IT1NUID0gIlNlcnZlckhvc3RQcmVmZXJlbmNlIjsKKwkvKioKKwkgKiBMYXVuY2ggR29vZ2xlRWFydGggYXQgc3RhcnR1cCBmbGFnLgorCSAqICAgSWYgdHJ1ZSB0aGVuIGF1dG9tYXRpY2FsbHkgbGF1bmNoIGFuIGVtcHR5IGZpbGUgCisJICogICB0byBHRSBhdCBzdGFydHVwCisJICogICAKKwkgKi8KKwkKKwlzdGF0aWMgZmluYWwgU3RyaW5nIFBfQVVUT19MQVVOQ0ggPSAiQXV0b0xhdW5jaFByZWZlcmVuY2UiOworCQorCS8qKgorCSAqIFVzZSBJbnRlcm5hbFNlcnZlciBmbGFnCisJICogaWYgdHJ1ZSB0aGVuIHN0YXJ0IHRoZSBFY2xwc2UgYnVpbHQgaW4gd2ViIHNlcnZlcgorCSAqLworCXN0YXRpYyBmaW5hbCBTdHJpbmcgUF9JTlRFUk5BTF9TRVJWRVIgPSAiSW50ZXJuYWxTZXJ2ZXIiOworCS8qKgorCSAqIEF1dG9tYXRpY2FsbHkgbGF1bmNoIE5ldHdvcmtMaW5rLktNTCBmaWxlCisJICogCisJICovCisJLy9zdGF0aWMgZmluYWwgU3RyaW5nIFBfQVVUT19ORVRMSU5LID0gIkF1dG9OZXRMaW5rIjsKKwkKKwkvKioKKwkgKiBXcml0ZSBLTUwgZmlsZXMgZXZlcnkgTnRoIGN5Y2xlLgorCSAqIAorCSAqIEZvciBleGFtcGxlIDEgd291bGQgd3JpdGUgZXZlcnkgY3ljbGUgYW5kCisJICogMyB3b3VsZCB3cml0ZSBldmVyeSAzcmQgY3ljbGUuIAorCSAqIFRoaXMgaXMgdXNlZnVsIHdoZW4gdGhlcmUgaXMgbm90IG11Y2ggY2hhbmdlIAorCSAqIGJldHdlZW4gY3ljbGVzIGFuZCBzYXZlcyB0aGUgb3ZlcmhlYWQgb2YgYm90aAorCSAqIHdyaXRpbmcgdGhlIGZpbGUgYW5kIG1vcmUgaW1wb3J0YW50bHkgaGF2aW5nIAorCSAqIEdvb2dsZUVhcnRoIHJlYWQgYW5kIHByb2Nlc3MgaXQuCisJICogTm90ZSA8LSAwIHdvdWxkIG9ubHkgd3JpdGUgdGhlIGZpcnN0IGFuZCBsYXN0LgorCSAqLworCXN0YXRpYyBmaW5hbCBTdHJpbmcgUF9XSElDSF9DWUNMRSA9ICJ3aGljaEN5Y2xlIjsKKwkKKwkKKwkvKioKKwkgKiBEZWJ1ZyBkaXNwbGF5IG9wdGlvbgorCSAqLworCXN0YXRpYyBmaW5hbCBTdHJpbmcgUF9ERUJVRyA9ICJEZWJ1Z1ByZWZlcmVuY2UiOworCQorCQorCS8qKgorCSAqIFVzZSBHb29nbGVFYXJ0aCBCQm94IGluZm8gdG8gZmlsdGVyIEtNTCAKKwkgKiBBY2Nlc3MgdmlhIHRoZSBpc0JCT1goKSBtZXRob2QKKwkgKi8KKwlzdGF0aWMgZmluYWwgU3RyaW5nIFBfQkJPWCA9ICJCQk9YUHJlZmVyZW5jZSI7CisJLyoqCisJICogQXNwZWN0IChTRUlSKSB0byBiZSBkaXNwbGF5ZWQgIChvciBMb2dnZWQpCisJICogCisJICovCisJc3RhdGljIGZpbmFsIFN0cmluZyBQX0FTUEVDVCA9ICJBc3BlY3RQcmVmZXJlbmNlIjsKKwkKKwkvKioKKwkgKiBpZiB0cnVlIHRoZW4gdGhpcyB3aWxsIGRvIGF1dG9sb2dnaW5nIG9mIGV2ZXJ5IHNpbXVsYXRpb24gCisJICogYXNzdW1pbmcgdGhhdCB0aGUgR29vZ2xlRWFydGggaW50ZXJmYWNlIGlzIGFjdGl2ZS4KKwkgKi8KKwlzdGF0aWMgZmluYWwgU3RyaW5nIFBfQVVUT19MT0dHSU5HID0gIkF1dG9Mb2dnaW5nUHJlZmVyZW5jZSI7CisJCisJLyoqCisJICogVGVzdCBvcHRpb24KKwkgKiBUaGUgVGVzdCBvcHRpb24gaXMgdXNlZCBhcmJpdHJhcmlseSB0byAKKwkgKiB0ZXN0IG5ld2x5IGltcGxlbWVudGVkIGZlYXR1cmVzIG9yIHNldHVwCisJICogYSB0ZW1wb3JhcnkgdGVzdCBlbnZpcm9ubWVudC4gIEl0IGlzIGEgdG9vbAorCSAqIGZvciB0aGUgZGV2ZWxvcGVyIGFuZCB3b3VsZCBub3Qgbm9ybWFseSBiZQorCSAqIHNwZWNpZmllZCBieSB0aGUgdXNlciBleGNlcHQgb24gcmVxdWVzdCBvZiAKKwkgKiBhIGRldmVsb3Blci4gIAorCSAqIEFuIGV4YW1wbGUgb2YgdXNlIHdvdWxkIGJlIHRvIHR1cm4gb24gc29tZSAKKwkgKiBhZGRpdGlvbmFsIGRlYnVnIGNvZGUgdG8gaGVscCBmaW5kIGEgYnVnLgorCSAqLworCXN0YXRpYyBmaW5hbCBTdHJpbmcgUF9URVNUID0gIlRlc3RQcmVmZXJlbmNlIjsKKwkKKwkvKioKKwkgKiBPcHRpb24gdG8gY29udHJvbCB0aGUgZGlzcGxheSBvZiBib3JkZXJzIG9uIHRoZSBtYXAKKwkgKi8KKwlzdGF0aWMgZmluYWwgU3RyaW5nIFBfU0hPV19CT1JERVIgPSAiU2hvd0JvcmRlclByZWZlcmVuY2UiOworCQorCS8qKgorCSAqIE1ldGhvZCB1c2VkIHRvIGRpc3BsYXkgU1RFTSByZXN1bHRzIG9uIEdvb2dsZUVhcnRoCisJICogPHByZT4KKwkgKiAKKwkgKiAxPUxvZ09ubHkgICAgLSBLTUwgZmlsZXMgd2lsbCBiZSBsb2dnZWQgZm9yIGxhdGVyIGRpc3BsYXkgdmlhIFNlcnZsZXQKKwkgKiAKKwkgKiAyPUxvZytTZXJ2bGV0IC0gS01MIGZpbGVzIGxvZ2dlZCBhbmQgTmV0bGluayBmaWxlIGxhdW5jaGVkIHRvIGNhdXNlIAorCSAqICAgICAgICAgICAgICBHRSB0byByZXF1ZXN0IGxvZ2dlZCBmaWxlcyB2aWEgU2VydmxldC4gIAorCSAqIAorCSAqIDM9QVN5bmNoLVNlcnZsZXQgLSBLTUwgd3JpdHRlbiB0byBDb250cm9sLmttbCBldmVyeSBOdGggY3ljbGUKKwkgKiAgICAgICAgICAgICAgYW5kIE5ldGxpbmsgZmlsZSBsYXVuY2hlZCB0byBjYXVzZSBHRSB0byByZXJlYWQgCisJICogICAgICAgICAgICAgIGNvbnRyb2wua21sIGV2ZXJ5IE4gc2Vjb25kcyAgICAgICAgICAgICAKKwkgKiA0PUF1dG9MYXVuY2ggLSBBdCBlYWNoIE50aCBjeWNsZSwgZGlyZWN0bHkgbGF1bmNoIHRoZSBmaWxlIHRvIEdFICAgICAgICAgICAgIAorCSAqLworCXN0YXRpYyBmaW5hbCBTdHJpbmcgUF9NRVRIT0QgPSAiTWV0aG9kUHJlZmVyZW5jZSI7CisJLyoqIAorCSAqIE9ubHkgTG9nIEtNTCBmb3IgbGF0ZXIgZGlzcGxheSAKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIGludCBNX0xPR19PTkxZID0gMTsKKwkvKiogCisJICogTG9nIHRoZSBLTUwgZmlsZXMgYW5kIAorCSAqIHN0YXJ0IHRoZSBuZXR3b3JrTGluayBwcm9jZXNzIAorCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IE1fTE9HX1NFUlZMRVQgPSAyOworCS8qKiAKKwkgKiBhbHdheXMgd3JpdGUgdGhlIGNvbnRyb2wua21sIGZpbGUgYW5kIAorCSAqIHN0YXJ0IGEgc2VydmxldCB0byByZWFkIHRoZSBsYXRlc3QgdmVyc2lvbi4KKwkgKiBBZHZhbnRhZ2UgaXMgdGhhdCBHb29nbGVFYXJ0aCBpcyBhbHdheXMgcmVhZGluZworCSAqIHRoZSBsYXRlc3QgdmVyc2lvbiBhbmQgd2lsbCBub3QgZmFsbCBiZWhpbmQuICAKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIGludCBNX0FTWU5DX1NFUlZMRVQgPSAzOworCQorCS8qKiAKKwkgKiBCdWlsZCBhIEtNTCBmaWxlIGFuZCBsYXVuY2ggaXQgZGlyZWN0bHkgCisJICogdG8gR29vZ2xlRWFydGgKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIGludCBNX0FVVE9fTEFVTkNIID0gNDsKKwkvKiogCisJICogRG8gbm90IGRvIGFueXRoaW5nIGF1dG9tYXRpY2FsbHkuCisJICogT25seSBnZW5lcmF0ZSBhIEtNTCBmaWxlIGF0IHJlcXVlc3Qgb2YgdXNlci4KKwkgKiAKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIGludCBNX01BTlVBTF9ESVNQTEFZID0gNTsKKwkvKioKKwkgKiAKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIElQcmVmZXJlbmNlU3RvcmUgcHJlZmVyZW5jZXMgPSAKKwkJQWN0aXZhdG9yLmdldERlZmF1bHQoKS5nZXRQcmVmZXJlbmNlU3RvcmUoKTsKKwkKKwkKKwkvKioKKwkgKiBjb25zdHJ1Y3QgdGhlIFByZWZlcmVuY2UgcGFnZSBmb3IgR29vZ2xlRWFydGggaW50ZXJmYWNlLgorCSAqIAorCSAqLworCXB1YmxpYyBHRVByZWZlcmVuY2VQYWdlKCkgeworCQlzdXBlcihHUklEKTsKKwkJLy9zdXBlcihGTEFUKTsKKwkJLy8gVG8gdXNlIEdFTG9nIEluIHByZWZlcmVuY2VzIHlvdSBoYXZlIHRvIG1hbnVhbGx5CisJCS8vIHR1cm4gaXQgb24gYmVmb3JlIHRoZSBwcmVmZXJlbmNlIGlzIHVzZWQgdG8gc2V0IGl0LgorCQkvLyBvYnZpb3VzbHkhIDotKSAgIFVuY29tbWVudCB0aGUgZm9sbG93aW5nIAorCQkvL0dFTG9nLkRFQlVHID0gdHJ1ZTsKKwkJLy9wcmVmZXJlbmNlcyA9IEFjdGl2YXRvci5nZXREZWZhdWx0KCkuZ2V0UHJlZmVyZW5jZVN0b3JlKCk7CisJCXNldFByZWZlcmVuY2VTdG9yZShwcmVmZXJlbmNlcyk7CisJCXNldERlc2NyaXB0aW9uKCJQcmVmZXJlbmNlcyBmb3IgdGhlIFNURU0gLSBHb29nbGVFYXJ0aCBpbnRlcmZhY2VcbiAiKTsKKwkJLy9nZXRWaXN1YWxpemF0aW9uUHJlZmVyZW5jZXMoKTsKKwl9CisJCisJLyogKG5vbi1KYXZhZG9jKQorCSAqIEBzZWUgb3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaFByZWZlcmVuY2VQYWdlI2luaXQob3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaCkKKwkgKi8KKwlwdWJsaWMgdm9pZCBpbml0KElXb3JrYmVuY2ggd29ya2JlbmNoKSB7CisJfQorCQorCQorCS8qKgorCSAqIENyZWF0ZXMgdGhlIGZpZWxkIGVkaXRvcnMuIEZpZWxkIGVkaXRvcnMgYXJlIGFic3RyYWN0aW9ucyBvZgorCSAqIHRoZSBjb21tb24gR1VJIGJsb2NrcyBuZWVkZWQgdG8gbWFuaXB1bGF0ZSB2YXJpb3VzIHR5cGVzCisJICogb2YgcHJlZmVyZW5jZXMuIEVhY2ggZmllbGQgZWRpdG9yIGtub3dzIGhvdyB0byBzYXZlIGFuZAorCSAqIHJlc3RvcmUgaXRzZWxmLgorCSAqLworCXB1YmxpYyB2b2lkIGNyZWF0ZUZpZWxkRWRpdG9ycygpIHsKKwkJCisJCQorCQkKKwkJYWRkRmllbGQobmV3IFJhZGlvR3JvdXBGaWVsZEVkaXRvcigKKwkJCQlQX01FVEhPRCwKKwkJCSImQ2hvb3NlIHRoZSBtZXRob2QgdXNlZCB0byBkaXNwbGF5IFNURU0gcmVzdWx0cy4iLAorCQkJMSxuZXcgU3RyaW5nW11bXSB7IAorCQkJCXsiTG9nT25seSAgICAtIEtNTCBmaWxlcyB3aWxsIGJlIGxvZ2dlZCBmb3IgbGF0ZXIgZGlzcGxheSIsICIxIiB9LCAKKwkJCQl7IkxvZytTZXJ2bGV0IC0gS01MIGZpbGVzIGxvZ2dlZCBhbmQgZGlzcGxheWVkIGJ5IEdvb2dsZUVhcnRoIiwgIjIiIH0sCisJCQkJeyJBc3luY1NlcnZsZXQgLSBLTUwgd3JpdHRlbiB0byBDb250cm9sLmttbCBhbmQgQXN5bmMgcmVhZCBieSBTZXJ2bGV0ICIsICIzIiB9LAorCQkJCXsiRGlyZWN0TGF1bmNoIC0gQXQgZWFjaCBOdGggY3ljbGUsIGRpcmVjdGx5IGxhdW5jaCB0aGUgZmlsZSB0byBHRSAiLCAiNCIgfSwKKwkJCQl7Ik1hbnVhbERpc3BsYXkgLSBVc2UgRGlzcGxheU1hcCBjb21tYW5kIHRvIGRpc3BsYXkiLCAiNSJ9CisJCQkgfSwgZ2V0RmllbGRFZGl0b3JQYXJlbnQoKSkpOworCQkKKwkJYWRkRmllbGQobmV3IERpcmVjdG9yeUZpZWxkRWRpdG9yKFBfRk9MREVSLCAKKwkJCQkiJkZvbGRlciBmb3IgS01MIGxvZ2dpbmc6IiwgZ2V0RmllbGRFZGl0b3JQYXJlbnQoKSkpOworCQkKKwkJYWRkRmllbGQoCisJCQkJbmV3IEJvb2xlYW5GaWVsZEVkaXRvcigKKwkJCQkJUF9JTlRFUk5BTF9TRVJWRVIsCisJCQkJCSImVXNlIGludGVybmFsIHdlYnNlcnZlciIsCisJCQkJCWdldEZpZWxkRWRpdG9yUGFyZW50KCkpKTsKKwkJCisJCWFkZEZpZWxkKAorCQkJCW5ldyBTdHJpbmdGaWVsZEVkaXRvcihQX1NFUlZFUl9IT1NULAorCQkJCQkJIkhvc3RuYW1lOnBvcnQgZm9yIGV4dGVybmFsIHdlYnNlcnZlcjoiLCBnZXRGaWVsZEVkaXRvclBhcmVudCgpKSk7CisJCQkKKwkJYWRkRmllbGQoCisJCQkJbmV3IEJvb2xlYW5GaWVsZEVkaXRvcigKKwkJCQkJUF9BVVRPX0xBVU5DSCwKKwkJCQkJIiZBdXRvbWF0aWNhbGx5IHN0YXJ0dXAgR29vZ2xlRWFydGgiLCAKKwkJCQkJZ2V0RmllbGRFZGl0b3JQYXJlbnQoKSkpOworCQlhZGRGaWVsZCgKKwkJCQluZXcgQm9vbGVhbkZpZWxkRWRpdG9yKAorCQkJCQlQX0FVVE9fTE9HR0lORywKKwkJCQkJIiZBdXRvbWF0aWNhbGx5IHByb2Nlc3MgZXZlcnkgc2ltdWxhdGlvbiIsIAorCQkJCQlnZXRGaWVsZEVkaXRvclBhcmVudCgpKSk7CisJCQorCQlhZGRGaWVsZCgKKwkJCQluZXcgSW50ZWdlckZpZWxkRWRpdG9yKAorCQkJCQlQX1dISUNIX0NZQ0xFLAorCQkJCQkiV3JpdGUgS01MIGZpbGVzIG9ubHkgZXZlcnkgTiB0aCBjeWNsZSIsIAorCQkJCQlnZXRGaWVsZEVkaXRvclBhcmVudCgpLDIpKTsKKwkJLy8gaWYgYXNwZWN0IHVuaW5pdGlhbGl6ZWQsIHRoZW4gZ2V0IGZyb20gVmlzdWFsaXphdGlvbiBwYWdlCisJCVN0cmluZyBhID0gcHJlZmVyZW5jZXMuZ2V0U3RyaW5nKFBfQVNQRUNUKTsgCisJCWlmICgiIi5lcXVhbHMoYSkpIHsKKwkJCWdldFZpc3VhbGl6YXRpb25QcmVmZXJlbmNlcygpOworCQkJLy9hID0gcHJlZmVyZW5jZXMuZ2V0U3RyaW5nKFBfQVNQRUNUKTsKKwkJfQorCQkKKwkJLy9HRUxvZy5kZWJ1Zyh0aGlzLCJJbml0aWFsIHZpc3VhbGl6YXRpb25Bc3BlY3Q9IithKTsKKwkgICAgLy8gaWYgd2UgaGF2ZSBpbml0aWFsaXplZCB0aGUgYXNwZWN0cyAtIHNob3cgc2VsZWN0aW9uCisJCVN0cmluZ1tdW10gYXNwZWN0TGlzdCA9IGFzcGVjdHMoKTsKKwkJaWYgKGFzcGVjdExpc3QgIT0gbnVsbCkgeworCQkJCisJCQlhZGRGaWVsZCgKKwkJCQluZXcgUmFkaW9Hcm91cEZpZWxkRWRpdG9yKAorCQkJCQlQX0FTUEVDVCwKKwkJCQkJIiZDaG9vc2UgdGhlIFNURU0gQXNwZWN0IHRvIGJlIExvZ2dlZC4iLAorCQkJCQkyLGFzcGVjdHMoKSwKKwkJCQkJZ2V0RmllbGRFZGl0b3JQYXJlbnQoKSkpOworCQl9CisJCQkJCisKKworCX0KKyAgICAKKwkvKioKKwkgKiBHZXQgdGhlIGxpc3Qgb2Ygc3VwcG9ydGVkIEFzcGVjdHMKKwkgKiAKKwkgKiBAcmV0dXJuIEFycmF5IG9mIEFzcGVjdHMuIEVhY2ggZW50cnkgaW4gYXJyYXkgCisJICogICBjb25zaXN0cyBvZiB0aGUgQXNwZWN0IE5hbWUgYW5kIENvZGUKKwkgKi8KKwlwcml2YXRlIFN0cmluZ1tdW10gYXNwZWN0cygpIHsKKwkJCisJCU1hcDxTdHJpbmcsQXNwZWN0PiBhc3BlY3RNYXAgPSBBc3BlY3QuZ2V0TWFwKCk7CisJCWlmIChhc3BlY3RNYXAgPT0gbnVsbCB8fCBhc3BlY3RNYXAuc2l6ZSgpID09IDApIHsKKwkJCXJldHVybiBudWxsOworCQl9CisJCWludCBuID0gYXNwZWN0TWFwLnNpemUoKTsKKwkJU3RyaW5nW11bXSByZXN1bHQgPSBuZXcgU3RyaW5nW25dWzJdOworCQlpbnQgaSA9IDA7CisJCWZvcihNYXAuRW50cnkgZW50cnk6IGFzcGVjdE1hcC5lbnRyeVNldCgpKSB7CisJCQlTdHJpbmcgY29kZSA9IChTdHJpbmcpZW50cnkuZ2V0S2V5KCk7CisJCQlBc3BlY3QgYXNwZWN0ICA9IChBc3BlY3QpZW50cnkuZ2V0VmFsdWUoKTsKKwkJCXJlc3VsdFtpXVswXSA9IGFzcGVjdC5nZXROYW1lKCk7CisJCQlyZXN1bHRbaV1bMV0gPSBjb2RlOworCQkJaSsrOworCQl9CQkJCisJCQorCQlyZXR1cm4gcmVzdWx0OworCX0KKwkKKwkKKwlwdWJsaWMgYm9vbGVhbiBwZXJmb3JtT2soKSB7CisJCXVwZGF0ZSgpOworCQl0cnkgeworCQkJaWYgKHByZWZlcmVuY2VzIGluc3RhbmNlb2YgU2NvcGVkUHJlZmVyZW5jZVN0b3JlKSB7CisJCQkgICAgU2NvcGVkUHJlZmVyZW5jZVN0b3JlIHAgPSAoU2NvcGVkUHJlZmVyZW5jZVN0b3JlKXByZWZlcmVuY2VzOworCQkJICAgIHAuc2F2ZSgpOworCQkJfQorCQl9IGNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7CQkJCisJCSAgICBHRUxvZy5lcnJvcigiRmFpbHVyZSBzYXZpbmcgUHJlZmVyZW5jZXMiLGUpOwkKKwkJfQorCQlHRUxvZy5kZWJ1Zyh0aGlzLCJzYXZlZCBwcmVmZXJlbmNlcyIpOworCQlyZXR1cm4gc3VwZXIucGVyZm9ybU9rKCk7CisJfQorCQorCS8qKgorCSAqIE1ha2UgYW55IG5lZWRlZCBhcHBsaWNhdGlvbiB1cGRhdGVzCisJICoKKwkgKi8KKwlwcml2YXRlIHZvaWQgdXBkYXRlKCkgeworCQlpZiAoaXNEZWJ1ZygpICE9IEdFTG9nLkRFQlVHKSB7CisJCQlHRUxvZy5ERUJVRyA9IGlzRGVidWcoKTsKKwkJCWlmIChpc0RlYnVnKCkgKSB7CisJCQkJR0VMb2cuZGVidWcoIlNldCBERUJVRyB0byAiK2lzRGVidWcoKSk7CisJCQl9CisJCX0KKwl9CisJCisKKwkvKioKKwkgKiBHZXQgdGhlIGFzcGVjdCB0byBkaXNwbGF5IGZyb20gdGhlIFZpc3VhbGl6YXRpb24gCisJICogcHJlZmVyZW5jZSBwYWdlLiAKKwkgKiBXZSBvbmx5IHVzZSB0aGUgdmlzdWFsaXphdGlvbiB2YWx1ZSBpZiB3ZSBkb24ndCAKKwkgKiBoYXZlIGFueSB2YWx1ZSBzcGVjaWZpZmllZCBzbyB0aGF0IHdlIGNhbiBzcGVjaWZ5IAorCSAqIGEgZGlmZmVyZW50IHZhbHVlIGZyb20gdGhlIGludGVybmFsIG1hcCBpZiB3ZSB3YW50LgorCSAqIAorCSAqCisJICovCisJcHJpdmF0ZSB2b2lkIGdldFZpc3VhbGl6YXRpb25QcmVmZXJlbmNlcygpIHsKKwkJb3JnLmVjbGlwc2Uuc3RlbS51aS5BY3RpdmF0b3IgdWlQbHVnaW4gPSBudWxsOworCQl0cnkgeworCQkJCisJCQkvLyBJUHJlZmVyZW5jZVN0b3JlCisJCQl1aVBsdWdpbiA9IG9yZy5lY2xpcHNlLnN0ZW0udWkuQWN0aXZhdG9yLmdldERlZmF1bHQoKTsKKwkJCWZpbmFsIFByZWZlcmVuY2VzIHByZWZlcmVuY2VzID0gdWlQbHVnaW4uZ2V0UGx1Z2luUHJlZmVyZW5jZXMoKTsKKwkJCVN0cmluZyB2aXN1YWxpemF0aW9uQXNwZWN0ID0gcHJlZmVyZW5jZXMKKwkJCQkJLmdldFN0cmluZyhQcmVmZXJlbmNlQ29uc3RhbnRzLklOSVRJQUxfQVRUUklCVVRFX05BTUVfU1RSSU5HX1BSRUZFUkVOQ0UpOworICAgICAgICAgICAgaWYgKHByZWZlcmVuY2VzLmdldFN0cmluZyhQX0FTUEVDVCkgPT0gIiIpIHsKKyAgICAgICAgICAgIAkvLyBUT0RPIHRlbXAgZml4IGZvciBiYWQgdmlzdWFsaXphdGlvbiBkZWZhdWx0CisgICAgICAgICAgICAJR0VMb2cuZGVidWcodGhpcywiVXNlIHZpc3VhbGl6YXRpb25Bc3BlY3Q9Iit2aXN1YWxpemF0aW9uQXNwZWN0KTsKKyAgICAgICAgICAgIAlpZiAodmlzdWFsaXphdGlvbkFzcGVjdC5lcXVhbHMoIlMiKSkKKyAgICAgICAgICAgIAkJdmlzdWFsaXphdGlvbkFzcGVjdCA9ICJJIjsKKyAgICAgICAgICAgIAlzZXRBc3BlY3QodmlzdWFsaXphdGlvbkFzcGVjdCk7CisgICAgICAgICAgICB9IGVsc2UgeworCQkJICBHRUxvZy5kZWJ1Zyh0aGlzLCJJZ25vcmUgdmlzdWFsaXphdGlvbkFzcGVjdD0iK3Zpc3VhbGl6YXRpb25Bc3BlY3QpOworICAgICAgICAgICAgfQorCQl9IGNhdGNoIChFeGNlcHRpb24gZSkgeworCQkJR0VMb2cuZXJyb3IoIkZhaWx1cmUgZ2V0dGluZyBWaXN1YWxpemF0aW9uIHByZWZlcmVuY2VzIixlKTsKKwkJfSAKKwkJLy8gbGlzdGVuIGZvciBjaGFuZ2VzIGluIHRoZSBWaXN1YWxpemF0aW9uIHByZWZlcmVuY2VzCisJCXRyeSB7CisJCQkvLyBMaXN0ZW4gZm9yIGNoYW5nZXMgdG8gdGhlIHByZWZlcmVuY2VzIGFuZCBjaGFuZ2UgdGhlIHZhbHVlIHdlCisJCQkvLyB1c2UgaWYgdGhlIHVzZXIgY2hhbmdlcyB0aGUgdmFsdWUgb24gdGhlIHByZWZlcmVuY2UgcGFnZS4KKwkJCXVpUGx1Z2luLmdldFBsdWdpblByZWZlcmVuY2VzKCkuYWRkUHJvcGVydHlDaGFuZ2VMaXN0ZW5lcihuZXcgSVByb3BlcnR5Q2hhbmdlTGlzdGVuZXIoKSB7CisJCQkJCQlwdWJsaWMgdm9pZCBwcm9wZXJ0eUNoYW5nZShQcm9wZXJ0eUNoYW5nZUV2ZW50IGV2ZW50KSB7CisJCQkJCQkJc2V0VmlzdWxpemF0aW9uUHJlZmVyZW5jZXMoZXZlbnQpOworCQkJCQkJfSAvLyBwcm9wZXJ0eUNoYW5nZQorCQkJCQl9IC8vIElQcm9wZXJ0eUNoYW5nZUxpc3RlbmVyCisJCQkJCSk7CisJCX0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CisJCQkvLyBJZ25vcmUKKwkJfSAvLyBjYXRjaCBFeGNlcHRpb24KKwl9CisJLyoqCisJICogQ2hlY2sgaWYgdGhlIGFzcGVjdCB3YXMgY2hhbmdlZCBvbiB0aGUgdmlzdWFsaXphdGlvbiBwcmVmZXJlbmNlcworCSAqIGFuZCBpZiBzbyB0aGVuIHVzZSBpdCBmb3IgdXMgYWxzby4KKwkgKiBAcGFyYW0gZXZlbnQKKwkgKi8KKwlwcml2YXRlIHZvaWQgc2V0VmlzdWxpemF0aW9uUHJlZmVyZW5jZXMoUHJvcGVydHlDaGFuZ2VFdmVudCBldmVudCkgeworCQkKKwkJU3RyaW5nIHByb3BlcnR5ID0gZXZlbnQuZ2V0UHJvcGVydHkoKTsKKwkJaWYgKFByZWZlcmVuY2VDb25zdGFudHMuSU5JVElBTF9BVFRSSUJVVEVfTkFNRV9TVFJJTkdfUFJFRkVSRU5DRSA9PSBwcm9wZXJ0eSkgeworCQkJU3RyaW5nIHZpc3VhbGl6YXRpb25Bc3BlY3QgPSAoU3RyaW5nKWV2ZW50LmdldE5ld1ZhbHVlKCk7CisJCQlHRUxvZy5kZWJ1Zyh0aGlzLCJDaGFuZ2VkIHZpc3VhbGl6YXRpb25Bc3BlY3Q9Iit2aXN1YWxpemF0aW9uQXNwZWN0KTsKKwkJCXNldEFzcGVjdCh2aXN1YWxpemF0aW9uQXNwZWN0KTsJCisJCQlwZXJmb3JtT2soKTsKKwkJfQorCX0KKwkKKwkvKioKKwkgKiBAcmV0dXJuIHRoZSBsb2dGb2xkZXIKKwkgKi8KKwlwdWJsaWMgc3RhdGljICBTdHJpbmcgZ2V0Rm9sZGVyKCkgeworCQkKKwkJcmV0dXJuIHByZWZlcmVuY2VzLmdldFN0cmluZyhQX0ZPTERFUik7CisJfQorCS8qKgorCSAqIEBwYXJhbSBsb2dGb2xkZXIgdGhlIGxvZ0ZvbGRlciB0byBzZXQKKwkgKi8KKwlwdWJsaWMgc3RhdGljIHZvaWQgc2V0Rm9sZGVyKFN0cmluZyBsb2dGb2xkZXIpIHsKKwkJcHJlZmVyZW5jZXMuc2V0VmFsdWUoUF9GT0xERVIsIGxvZ0ZvbGRlcik7CisJfQorCS8qKgorCSAqIEByZXR1cm4gdGhlIHNlcnZlckhvc3QKKwkgKi8KKwlwdWJsaWMgc3RhdGljICBTdHJpbmcgZ2V0U2VydmVySG9zdCgpIHsKKwkJCisJCXJldHVybiBwcmVmZXJlbmNlcy5nZXRTdHJpbmcoUF9TRVJWRVJfSE9TVCk7CisJfQorCisJLyoqCisJICogVGhpcyB3aWxsIHJldHVybiBhIGNvZGUgMSB0byA1IGluZGljYXRpbmcgdGhlIAorCSAqIG1ldGhvZCB1c2VkIHRvIGRpc3BsYXkgS01MLiAgCisJICogCisJICogIE1fTE9HX09OTFkgPSAxOworCSAqICBNX0xPR19TRVJWTEVUID0gMjsKKwkgKiAgTV9BU1lOQ19TRVJWTEVUID0gMzsKKwkgKiAgTV9BVVRPX0xBVU5DSCA9IDQ7CisJICogIE1fTUFOVUFMX0RJU1BMQVkgPSA1OworCSAqIAorCSAqIElmIHRoZXJlIGlzIG5vIFNlcnZsZXQgc3VwcG9ydCwgaXQgd2lsbCBtb2RpZnkgd2hhdAorCSAqIGlzIHJldHVybmVkIHRvIGF2b2lkIGJlaW5nIGRlcGVuZGVudCBvbiBhIHNlcnZsZXQuCisJICogCisJICogQHJldHVybiB0aGUgbWV0aG9kIGNvZGUgdG8gYmUgdXNlZCB0byBkaXNwbGF5IEtNTCAKKwkgKiAgICAKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGludCBnZXRNZXRob2QoKSB7CisJCVN0cmluZyBzID0gIHByZWZlcmVuY2VzLmdldFN0cmluZyhQX01FVEhPRCk7CisJCWludCB0eXBlID0gSW50ZWdlci5wYXJzZUludChzKTsKKy8vIFRoZSB0ZXN0IGlzIG5vdyBtYWRlIGluIFN0ZW1LTUwKKy8vCQlpZiAoU3RlbUttbC5nZXRTZXJ2ZXJVcmwoKSA9PSBudWxsKSB7CisvLwkJCWlmICh0eXBlID09IE1fTE9HX1NFUlZMRVQpIAorLy8JCQkJdHlwZSA9IE1fTE9HX09OTFk7CisvLwkJCWVsc2UgaWYgKHR5cGUgPT0gTV9BU1lOQ19TRVJWTEVUKQorLy8JCQkJdHlwZSA9IE1fQVVUT19MQVVOQ0g7CisvLwkJfQorCQlyZXR1cm4gdHlwZTsKKwl9CisKKworCisJLyoqCisJICogU2V0IHRoZSBNZXRob2QgdGhhdCBTVEVNIGNvdW1taWNhdGVzIHdpdGggR0UKKwkgKgorCSAqIEBwYXJhbSBuZXdNZXRob2QgIE5ldyBtZXRob2QgdG8gc2V0CisJICovCisJcHVibGljIHN0YXRpYyB2b2lkIHNldE1ldGhvZChpbnQgbmV3TWV0aG9kKSB7CisJCVN0cmluZyBtID0gIiIrbmV3TWV0aG9kOworCQlwcmVmZXJlbmNlcy5zZXRWYWx1ZShQX01FVEhPRCwgbSk7CisJfQorCisJLyoqCisJICogQHJldHVybiB0aGUgaW50ZXJuYWxTZXJ2ZXIgZmxhZworCSAqIAorCSAqIElmIHRydWUgdGhlbiB0aGUgaW5mbyBhYm91dCB0aGUgc3RhdHVzIG9mIAorCSAqIHRoZSBzZXJ2ZXIgaXMgaGFuZGxlZCBieSB0aGUgU3RlbUtNTCBjb2RlLgorCSAqLworCXB1YmxpYyBzdGF0aWMgYm9vbGVhbiBpc0ludGVybmFsU2VydmVyKCkgeworCQlyZXR1cm4gcHJlZmVyZW5jZXMuZ2V0Qm9vbGVhbihQX0lOVEVSTkFMX1NFUlZFUik7CisJfQorCisKKworCS8qKgorCSAqIEByZXR1cm4gdGhlIGF1dG9MYXVuY2ggZmxhZworCSAqLworCXB1YmxpYyBzdGF0aWMgYm9vbGVhbiBpc0F1dG9MYXVuY2goKSB7CisJCXJldHVybiBwcmVmZXJlbmNlcy5nZXRCb29sZWFuKFBfQVVUT19MQVVOQ0gpOworCX0KKworCS8qKgorCSAqIEByZXR1cm4gdGhlIGF1dG9Mb2dnaW5nCisJICovCisJcHVibGljIHN0YXRpYyBib29sZWFuIGlzQXV0b0xvZ2dpbmcoKSB7CisJCXJldHVybiBwcmVmZXJlbmNlcy5nZXRCb29sZWFuKFBfQVVUT19MT0dHSU5HKTsKKwl9CisKKworCS8qKgorCSAqIEByZXR1cm4gdGhlIHdoaWNoQ3ljbGUKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGludCBnZXRXaGljaEN5Y2xlKCkgeworCQlyZXR1cm4gcHJlZmVyZW5jZXMuZ2V0SW50KFBfV0hJQ0hfQ1lDTEUpOworCX0KKyAgICAKKwkvKioKKwkgKiBnZXQgdGhlIHNwZWNpZmllZCBBc3BlY3QgdGhhdCB3aWxsIGJlIGxvZ2dlZCBvciBkaXNwbGF5ZWQKKwkgKiBAcmV0dXJuIEFzcGVjdCBpbnN0YW5jZSBvciBudWxsCisJICovCisJcHVibGljIHN0YXRpYyBBc3BlY3QgZ2V0QXNwZWN0KCkgeworCQlBc3BlY3QgYXNwZWN0ID0gbnVsbDsJCQorCQlTdHJpbmcgYSA9IHByZWZlcmVuY2VzLmdldFN0cmluZyhQX0FTUEVDVCk7CisJCWlmIChhLmxlbmd0aCgpID09IDApIAorCQkJYXNwZWN0ID0gQXNwZWN0LmdldERlZmF1bHQoKTsKKwkJZWxzZQorCQkJYXNwZWN0ID0gQXNwZWN0LmdldEFzcGVjdChhKTsKKwkJaWYgKGFzcGVjdCA9PSBudWxsKSB7CisJCSAgICBHRUxvZy5kZWJ1ZygiR0VQcmVmZXJlbmNlUGFnZS5nZXRBc3BlY3Q6ICIsYSsiIHJldHVybmVkIG51bGwsIHVzZSBkZWZhdWx0IGFzcGVjdCIpOworCQkgICAgYXNwZWN0ID0gQXNwZWN0LmdldERlZmF1bHQoKTsKKwkJfQorCQlyZXR1cm4gYXNwZWN0OworCX0KKwkvKioKKwkgKiBzZXQgdGhlIEFzcGVjdCB0aGF0IHdpbGwgYmUgZGlzcGxheWVkCisJICogQHBhcmFtIGFzcGVjdFN0ciBOYW1lIG9mIHRoZSBkZXNpcmVkIEFzcGVjdC4KKwkgKi8KKwlwdWJsaWMgc3RhdGljIHZvaWQgc2V0QXNwZWN0KFN0cmluZyBhc3BlY3RTdHIpIHsKKwkJTWFwPFN0cmluZyxBc3BlY3Q+IGFzcGVjdE1hcCA9IEFzcGVjdC5nZXRNYXAoKTsKKwkJaWYgKGFzcGVjdE1hcCAhPSBudWxsICYmIGFzcGVjdE1hcC5zaXplKCkgPiAwKSB7CisJCQkKKwkJCUFzcGVjdCBhc3BlY3QgPSBudWxsOwkKKwkJCWFzcGVjdCA9IEFzcGVjdC5nZXRBc3BlY3QoYXNwZWN0U3RyKTsKKwkJCWlmIChhc3BlY3QgPT0gbnVsbCApIHsKKwkJCQlHRUxvZy5kZWJ1ZyhHRVByZWZlcmVuY2VQYWdlLmNsYXNzLAorCQkJCQkiSW52YWxpZCBhc3BlY3QgaWdub3JlZDogIithc3BlY3RTdHIpOworCQkJCXJldHVybjsKKwkJCX0KKwkJfQorCQlwcmVmZXJlbmNlcy5zZXRWYWx1ZShQX0FTUEVDVCxhc3BlY3RTdHIpOworCQkKKwkJR0VMb2cuZGVidWcoR0VQcmVmZXJlbmNlUGFnZS5jbGFzcywKKwkJCQkiQXNwZWN0IHNldDogIithc3BlY3RTdHIpOworCQlyZXR1cm47CisJfQorCQorCS8qKgorCSAqIEByZXR1cm4gdGhlIEJCb3ggZmlsdGVyIGZsYWcKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGJvb2xlYW4gaXNCQk9YKCkgeworCQlpZiAocHJlZmVyZW5jZXMgIT0gbnVsbCkKKwkJCXJldHVybiBwcmVmZXJlbmNlcy5nZXRCb29sZWFuKFBfQkJPWCk7CisJCWVsc2UgCisJCQlyZXR1cm4gZmFsc2U7CisJfQorCS8qKgorCSAqIEByZXR1cm4gdGhlIERlYnVnIGZsYWcKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGJvb2xlYW4gaXNEZWJ1ZygpIHsKKwkJaWYgKHByZWZlcmVuY2VzICE9IG51bGwpCisJCQlyZXR1cm4gcHJlZmVyZW5jZXMuZ2V0Qm9vbGVhbihQX0RFQlVHKTsKKwkJZWxzZSAKKwkJCXJldHVybiB0cnVlOworCX0KKwkvKioKKwkgKiBAcmV0dXJuIHRoZSBUZXN0IGZsYWcKKwkgKiA8cHJlPgorCSAqIFVzZXM6CisJICogIC0gRW5oYW5jZWQgRGVidWcgb3V0cHV0ICh0aW1lIGFuZCB0aHJlYWQpCisJICogIC0gRmlsdGVyIG91dCBub2RlcworCSAqICAgIC0gS21sRGlzcGxheSAtIGlmIG5vdCBCQm94IGZpbHRlciB0aGVuIG5vdCBVUyBvciBNZXhpY28KKwkgKiAgICAtIEttbERpc3BsYXlDdXN0b20gLSBub3QgVVMKKwkgKiBUbyBzZWUgd2hlcmUgZWxzZSB0aGlzIGlzIHVzZWQgYXNrIHRvIHNlZSBjYWxsIGhpZXJhcmNoeQorCSAqLworCXB1YmxpYyBzdGF0aWMgYm9vbGVhbiBpc1Rlc3QoKSB7CisJCQorCQlpZiAocHJlZmVyZW5jZXMgIT0gbnVsbCkKKwkJCXJldHVybiBwcmVmZXJlbmNlcy5nZXRCb29sZWFuKFBfVEVTVCk7CisJCWVsc2UgCisJCQlyZXR1cm4gdHJ1ZTsKKwl9CisJCisJLyoqCisJICogQHJldHVybiB0aGUgU2hvd0JvcmRlciBmbGFnCisJICogPHByZT4KKwkgKiBXaXRoIEtNTCB5b3UgY2FuIGVpdGhlciBzaG93IHRoZSBwb2x5Z29uIGJvcmRlcnMgb3Igbm90LgorCSAqIFRoaXMgZmxhZyB3aWxsIGNvbnRyb2wgd2hldGhlciB0aGV5IGFyZSBzaG93biBvciBub3QuCisJICogVGhlIGRlZmF1bHQgaXMgdG8gbm90IHNob3cgdGhlbQorCSAqLworCXB1YmxpYyBzdGF0aWMgYm9vbGVhbiBpc1Nob3dCb3JkZXIoKSB7CisJCQorCQlpZiAocHJlZmVyZW5jZXMgIT0gbnVsbCkKKwkJCXJldHVybiBwcmVmZXJlbmNlcy5nZXRCb29sZWFuKFBfU0hPV19CT1JERVIpOworCQllbHNlIAorCQkJcmV0dXJuIHRydWU7CisJfQorCS8vIFRPRE8ga2VlcCB0aGlzIHVwIHRvIGRhdGUKKwkvKioKKwkgKiBUbyBkaXNwbGF5IGFsbCBvZiB0aGUgUHJlZmVyZW5jZXMuCisJICogCisJICogUGxlYXNlIGtlZXAgdGhpcyB1cCB0byBkYXRlLiAKKwkgKiAKKwkgKiBAcmV0dXJuIHN0cmluZyBkZXNjcmliaW5nIHRoZSBjdXJyZW50IHByZWZlcmVuY2VzLgorCSAqLworCXB1YmxpYyBzdGF0aWMgU3RyaW5nIGRpc3BsYXkoKSB7CisJCVN0cmluZ0J1ZmZlciBzYiA9IG5ldyAgU3RyaW5nQnVmZmVyKDIwMCk7CisJCQorCQlzYi5hcHBlbmQoIlNURU0tR29vZ2xlRWFydGggUHJlZmVyZW5jZXM6XG4iKTsKKwkJCisJCXNiLmFwcGVuZCgiUF9NRVRIT0Q6ICIpOworCQlzd2l0Y2ggKGdldE1ldGhvZCgpKSB7CisJCWNhc2UgTV9MT0dfT05MWToKKwkJCXNiLmFwcGVuZCgiTV9MT0dfT05MWSAiKTsKKwkJCWJyZWFrOworCQljYXNlIE1fTE9HX1NFUlZMRVQ6CisJCQlzYi5hcHBlbmQoIk1fTE9HX1NFUlZMRVQgIik7CisJCQlicmVhazsKKwkJY2FzZSBNX0FTWU5DX1NFUlZMRVQ6CisJCQlzYi5hcHBlbmQoIk1fQVNZTkNfU0VSVkxFVCAiKTsKKwkJCWJyZWFrOworCQljYXNlIE1fQVVUT19MQVVOQ0g6CisJCQlzYi5hcHBlbmQoIk1fQVVUT19MQVVOQ0ggIik7CisJCQlicmVhazsKKwkJY2FzZSBNX01BTlVBTF9ESVNQTEFZOgorCQkJc2IuYXBwZW5kKCJNX01BTlVBTF9ESVNQTEFZICIpOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlzYi5hcHBlbmQoIlVua25vd24gIik7CisJCX0KKwkJc2IuYXBwZW5kKCJcbiIpOworCQkKKwkJCisJCXNiLmFwcGVuZCgiUF9GT0xERVI6ICIpOworCQlzYi5hcHBlbmQoZ2V0Rm9sZGVyKCkrIlxuIik7CisKKwkJc2IuYXBwZW5kKCJQX1NFUlZFUl9IT1NUOiAiKTsKKwkJc2IuYXBwZW5kKGdldFNlcnZlckhvc3QoKSsiXG4iKTsJCQorCisJCXNiLmFwcGVuZCgiUF9JTlRFUk5BTF9TRVJWRVI6ICIpOworCQlzYi5hcHBlbmQoaXNJbnRlcm5hbFNlcnZlcigpKyJcbiIpOworCQkKKwkJc2IuYXBwZW5kKCJQX0FVVE9fTEFVTkNIOiAiKTsKKwkJc2IuYXBwZW5kKGlzQXV0b0xhdW5jaCgpKyJcbiIpOworCisJCXNiLmFwcGVuZCgiUF9BVVRPX0xPR0dJTkc6ICIpOworCQlzYi5hcHBlbmQoaXNBdXRvTG9nZ2luZygpKyJcbiIpOworCisJCXNiLmFwcGVuZCgiUF9XSElDSF9DWUNMRTogIik7CisJCXNiLmFwcGVuZChnZXRXaGljaEN5Y2xlKCkrIlxuIik7CisJCQorCQlzYi5hcHBlbmQoIlBfQVNQRUNUOiAiKTsKKwkJc2IuYXBwZW5kKGdldEFzcGVjdCgpLnRvU3RyaW5nKCkrIlxuIik7CisJCQorCQlzYi5hcHBlbmQoIlBfQkJPWDogIik7CisJCXNiLmFwcGVuZChpc0JCT1goKSsiXG4iKTsKKworCQlzYi5hcHBlbmQoIlBfREVCVUc6ICIpOworCQlzYi5hcHBlbmQoaXNEZWJ1ZygpKyJcbiIpOworICAvLyAKKyAgLy8gIFRoZSBmb2xsb3dpbmcgYXJlIGZvdW5kIGluIEdFQWR2YW5jZWRQcmVmZXJlbmNlUGFnZQorICAvLworCQlzYi5hcHBlbmQoIlBfVEVTVDogIik7CisJCXNiLmFwcGVuZChpc1Rlc3QoKSsiXG4iKTsKKwkJCisJCXNiLmFwcGVuZCgiUF9TSE9XX0JPUkRFUjogIik7CisJCXNiLmFwcGVuZChpc1Nob3dCb3JkZXIoKSsiXG4iKTsKKwkJcmV0dXJuIHNiLnRvU3RyaW5nKCk7CisJfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5nZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9nZS92aWV3cy9HRVZpZXcuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5nZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9nZS92aWV3cy9HRVZpZXcuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MzlhOTY0Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLmdlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL2dlL3ZpZXdzL0dFVmlldy5qYXZhCkBAIC0wLDAgKzEsNzMxIEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0udWkuZ2Uudmlld3M7CisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8gCitpbXBvcnQgamF2YS5pby5GaWxlOworaW1wb3J0IGphdmEuaW8uRmlsZUZpbHRlcjsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmRpYWxvZ3MuTWVzc2FnZURpYWxvZzsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5yZXNvdXJjZS5Db2xvclJlZ2lzdHJ5OworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuTGlzdFZpZXdlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuQ29uc3RhbnRzOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uam9icy5zaW11bGF0aW9uLklTaW11bGF0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uam9icy5zaW11bGF0aW9uLlNpbXVsYXRpb25NYW5hZ2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udWkuZ2UuQXNwZWN0OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udWkuZ2UuR0VJbnRlcmZhY2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS51aS5nZS5HRUxvZzsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnVpLmdlLmttbC5TdGVtS21sOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5TV1Q7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmN1c3RvbS5TY3JvbGxlZENvbXBvc2l0ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QubGF5b3V0LkZpbGxMYXlvdXQ7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5HcmlkRGF0YTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QubGF5b3V0LkdyaWRMYXlvdXQ7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQnV0dG9uOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5EaXJlY3RvcnlEaWFsb2c7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuRXZlbnQ7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuR3JvdXA7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuTGlzdGVuZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuTWVzc2FnZUJveDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5TaGVsbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5JU2VsZWN0aW9uU2VydmljZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5JV29ya2JlbmNoV2luZG93OworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLnBhcnQuVmlld1BhcnQ7CisKKworLyoqCisgKiBHRVZpZXc6IE9wZW5zIGEgdmlldyBvZiBTVEVNIHRoYXQgY29udHJvbHMgdGhlIAorICogaW50ZXJmYWNlIHRvIEdvb2dsZUVhcnRoLiA8cD4gCisgKiBUaGUgYWN0dWFsIGludGVyZmFjZSB0byBHb29nbGVFYXJ0aCBpcyBoYW5kbGVkIGJ5IEdFSW50ZXJmYWNlIGNsYXNzCisgKiBUaGlzIEdVSSB2aWV3IG9ubHkgaGFuZGxlcyB0aGUgZGlyZWN0IFVzZXIgaW50ZXJmYWNlLiAgCisgKiA8cD4gCisgKiBJdCBkaXNwbGF5cyBhIHdpbmRvdyB3aXRoIGEgbGlzdCBvZiBhY3RpdmUgc2ltdWxhdGlvbnMgYW5kIAorICogc3VwcG9ydHMgYSBwb3B1cCBjb250ZXh0IHdpbmRvdyB0aGF0IGFsbG93cyBhIHNldCBvZiBhY3Rpb25zIAorICogZWl0aGVyIGdsb2JhbCBhY3Rpb25zIG9yIGFjdGlvbnMgb24gYSBzcGVjaWZpYyBzaW11bGF0aW9uCisgKiAgIAorICogCisgKiA8cD4KKyAqLworCitwdWJsaWMgY2xhc3MgR0VWaWV3IGV4dGVuZHMgVmlld1BhcnQgIHsKKwkKKwkvKioKKwkgKiBUaGUgaWRlbnRpZmllciBvZiB0aGUgR29vZ2xlRWFydGggVmlldworCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIElEX0dFX1ZJRVcgPSBDb25zdGFudHMuSURfUk9PVAorCQkJKyAiLnVpLnZpZXdzLmdlIjsgLy8kTk9OLU5MUy0xJAorCisJLyoqCisJICogQSBMaXN0Vmlld2VyIHRoYXQgd2lsbCBsaXN0IHNpbXVsYXRpb25zIHRoYXQgd2UgCisJICogY2FuIHdhdGNoLiAKKwkgKi8KKwlwcml2YXRlIExpc3RWaWV3ZXIgdmlld2VyID0gbnVsbDsKKwkKKwkKKworCS8qKgorCSAqIEFjdGl2YXRvciBmb3IgdGhlIHVpIHByb2plY3QuCisJICogVGhpcyBpcyBoZXJlIHRvIG1ha2UgaXQgY2xlYXIgd2hpY2ggQWN0aXZhdG9yIHdlIAorCSAqIGFyZSByZWZlcmluZyB0by4KKwkgKi8KKwlwcml2YXRlIG9yZy5lY2xpcHNlLnN0ZW0udWkuQWN0aXZhdG9yIHVpQWN0aXZhdG9yID0gbnVsbDsKKwkvKioKKwkgKiBUaGUgY29sb3IgcmVnaXN0cnkgbWFuYWdlcyBTV1QgY29sb3JzLCBjcmVhdGVzIHRoZW0gb24tZGVtYW5kLCBhbmQgdGFrZXMKKwkgKiBjYXJlIG9mIGRpc3Bvc2FsLgorCSAqLworCXByaXZhdGUgc3RhdGljIENvbG9yUmVnaXN0cnkgY29sb3JSZWdpc3RyeSA9IG51bGw7CisJLyoqCisJICogcmVmZXJlbmNlIHRvIGNvbnRlbnRwcm92aWRlciBmb3IgdGhlIExpc3RWaWV3ZXIKKwkgKi8KKwlwcml2YXRlIEdFVmlld0NvbnRlbnRQcm92aWRlciBjb250ZW50UHJvdmlkZXIgPSBudWxsOworCS8qKgorCSAqIHJlZmVyZW5jZSB0byB0aGUgaW50ZXJmYWNlIGNsYXNzCisJICovCisJcHJpdmF0ZSBHRUludGVyZmFjZSBnZWkgPSBudWxsOworCisJCisKKwkKKwkvKioKKwkgKiBzZXQgdG8gdHJ1ZSB3ZW4gR29vZ2xlRWFydGggdmlldyBzdGFydHMKKwkgKiBVc2VkIHRvIHByZXZlbnQgbW9yZSB0aGFuIG9uZSBpbnN0YW5jZS4KKwkgKi8KKwlwcml2YXRlIHN0YXRpYyBib29sZWFuIGFjdGl2ZSA9IGZhbHNlOworCQorCS8qKgorCSAqIFNvbWUgY29uc3RhbnRzIHdlIG5lZWQgdG8gc2V0IHByZWZlcnJlZCBzaXplcyBvZiBTV1QgY29udHJvbHMgYW5kCisJICogY29udGFpbmVycy4KKwkgKi8KKworCXByaXZhdGUgc3RhdGljIGZpbmFsIGludCBTVEFOREFSRF9MRU5HVEggPSAzNzA7CisKKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgU1RBTkRBUkRfSEVJR0hUID0gMTU7CisKKwkKKwkvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogCisJICogQ29uc3RydWN0b3IKKwkgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJLyoqCisJICogVGhlIEdFVmlldyBjb25zdHJ1Y3RvciBnZXRzIGNvbnRyb2wgd2hlbiB0aGUgdXNlciBvcGVucyAKKwkgKiB0aGUgIlZpZXciIGluIHRoZSBjdXJyZW50IHBlcnNwZWN0aXZlLgorCSAqIAorCSAqIEluIHRoZSBHRVZpZXcgY29uc3RydWN0b3Igd2Ugd2lsbCBjcmVhdGUgYW4KKwkgKiBpbnN0YW5jZSBvZiBHRUludGVyZmFjZSB3aGljaCBkb2VzIGFsbCB0aGUgd29yay4KKwkgKiAKKwkgKiAKKwkgKi8KKwlwdWJsaWMgR0VWaWV3KCkgeworCQlpZiAoYWN0aXZlKSB7CisJCQlHRUxvZy5lcnJvcigiU1RFTSAtIEdvb2dsZUVhcnRoIGludGVyZmFjZSBhbHJlYWR5IGFjdGl2ZSIsbnVsbCk7CisJCQl0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbigiRHVwbGljYXRlIik7CisJCX0KKwkJYWN0aXZlID0gdHJ1ZTsKKwkJZ2VpID0gbmV3IEdFSW50ZXJmYWNlKHRoaXMpOwkJCQorCQlHRUxvZy5kZWJ1ZyhHRVZpZXcuY2xhc3MsImdlaT0iK2dlaSk7CQorLy8JCSBTZXQgdGhlIGNvbG9yIHJlZ2lzdHJ5CisJCWlmIChjb2xvclJlZ2lzdHJ5ID09IG51bGwpIHsKKwkJCXVpQWN0aXZhdG9yID0gb3JnLmVjbGlwc2Uuc3RlbS51aS5BY3RpdmF0b3IuZ2V0RGVmYXVsdCgpOworCQkJY29sb3JSZWdpc3RyeSA9IHVpQWN0aXZhdG9yLmdldENvbG9yUmVnaXN0cnkoKTsKKwkJfQorCQkKKwkJCQkJCisJfQorCisKKwkKKwkvKioKKwkgKiBUaGlzIGlzIGEgY2FsbGJhY2sgdGhhdCB3aWxsIGFsbG93IHVzCisJICogdG8gY3JlYXRlIHRoZSB2aWV3ZXIgYW5kIGluaXRpYWxpemUgaXQuCisJICogV2UgYWxzbyBhZGQgc29tZSB1c2VmdWwgYnV0dG9ucyB0byB0aGUgdmlldworCSAqIAorCSAqIEBwYXJhbSBwYXJlbnQgQ29tcG9zaXRlIHRvIHdvcmsgd2l0aAorCSAqLworCXB1YmxpYyB2b2lkIGNyZWF0ZVBhcnRDb250cm9sKENvbXBvc2l0ZSBwYXJlbnQpIHsKKworCQkvLwkgZ2V0IG91ciBwcmVmZXJlbmNlcyAKKyAgICAgICAgCisJCWJvb2xlYW4gZGVidWcgPSBHRVByZWZlcmVuY2VQYWdlLmlzRGVidWcoKTsKKwkJaWYgKGRlYnVnKSB7CisJCQlHRUxvZy5ERUJVRyA9IHRydWU7CisJCQlHRUxvZy5kZWJ1Zyh0aGlzLCJEZWJ1ZyBvcHRpb24gdHVybmVkIG9uLiIpOworCQl9IGVsc2UgeworCQkJR0VMb2cuZGVidWcodGhpcywiRGVidWcgb3B0aW9uIGJlaW5nIHR1cm5lZCBvZmYuIik7CisJCQlHRUxvZy5ERUJVRyA9IGZhbHNlOworCQl9CisJCUdFTG9nLmRlYnVnKCJHRVZpZXcuY3JlYXRlUGFydENvbnRyb2w6Iik7CisJCQorCSAgICBHcmlkTGF5b3V0IGdyaWRMYXlvdXQgPSBuZXcgR3JpZExheW91dCgpOworCSAgICBncmlkTGF5b3V0Lm51bUNvbHVtbnMgPSAxOworCSAgICAKKyAgICAgICAgLy8JIHNldHVwIHRoZSBhc3BlY3QgZGlzcGxheSBidXR0b25zICAKKworCQlwYXJlbnQuc2V0TGF5b3V0KGdyaWRMYXlvdXQpOworCQlTdHJpbmcgYXNwZWN0ID0gQXNwZWN0LmdldERlZmF1bHRDb2RlKCk7CisJCWNyZWF0ZUNvbnRyb2xCdXR0b25zKHBhcmVudCxhc3BlY3QpOworCQkKKwkJCisgICAgICAgIC8vIHNldHVwIHRoZSBMaXN0IG9mIFNpbXVsYXRpb25zCQkKKwkJR3JpZERhdGEgZ3JpZERhdGEgPSBuZXcgR3JpZERhdGEoKTsKKwkgICAgZ3JpZERhdGEuaG9yaXpvbnRhbEFsaWdubWVudCA9IEdyaWREYXRhLkZJTEw7CisJICAgIGdyaWREYXRhLmdyYWJFeGNlc3NIb3Jpem9udGFsU3BhY2UgPSB0cnVlOworCSAgICBDb21wb3NpdGUgY29udHJvbCA9IGdldFNjcm9sbGFibGUocGFyZW50LGdyaWREYXRhKTsKKwkJY29udHJvbC5zZXRMYXlvdXQobmV3IEZpbGxMYXlvdXQoKSk7CisKKwkJdmlld2VyID0gbmV3IExpc3RWaWV3ZXIoY29udHJvbCk7CisJCS8vIHdlIHByb3ZpZGUgdGhlIENvbnRlbnRQcm92aWRlciBhbmQgTGFiZWxQcm92aWRlciBjbGFzc2VzCisJCQorCQljb250ZW50UHJvdmlkZXIgPSBuZXcgR0VWaWV3Q29udGVudFByb3ZpZGVyKGdlaSk7IAorCQl2aWV3ZXIuc2V0Q29udGVudFByb3ZpZGVyKGNvbnRlbnRQcm92aWRlcik7CisJCUdFVmlld0xhYmVsUHJvdmlkZXIgbHAgPSBuZXcgR0VWaWV3TGFiZWxQcm92aWRlcigpOworCQl2aWV3ZXIuc2V0TGFiZWxQcm92aWRlcihscCApOworCQlscC5zZXRHRUkoZ2VpKTsKKwkJLy8gZGVmaW5lIHRoZSBpbnN0YW5jZSB0aGF0IHdpbGwgYmUgdGhlIHBhcmVudCAKKwkJLy8gcGFzc2VkIHRvIHRoZSBnZXRFbGVtZW50cyBtZXRob2QKKwkJdmlld2VyLnNldElucHV0KFNpbXVsYXRpb25NYW5hZ2VyLmdldE1hbmFnZXIoKSk7CisgICAgICAgIC8vV2UgYWxzbyB3YW50IHRvIGJlIGFibGUgdG8gaGF2ZSBhIHVzZXIgc2VsZWN0IGEgc2ltbHVhdGlvbiBmcm9tIG91cgorCQkvLyB2aWV3IGFuZCBoYXZlIHRoYXQgYmVlbiBzZWVuIGJ5IG90aGVycy4gU28gd2UgcmVnaXN0ZXIgdGhlIExpc3RWaWV3ZXIKKwkJLy8gaW5zdGFuY2UgYXMgdGhlIHZpZXcncyBzZWxlY3Rpb24gcHJvdmlkZXIuIFdoZW4geW91IGNsaWNrIG9uIHRoZSBHVUkKKwkJLy8gaXQgZmluZHMgdGhlIHVuZGVybHlpbmcgT2JqZWN0IChpLmUuLCBJU2ltdWxhdGlvbikgeW91IHNlbGVjdGVkIGFuZAorCQkvLyBwYXNzZXMgaXQgdG8gdGhlIHNlbGVjdGlvbiBzZXJ2aWNlLgorCQlnZXRTaXRlKCkuc2V0U2VsZWN0aW9uUHJvdmlkZXIodmlld2VyKTsKKwkJCisJCQorCQkvLyBpZiB3ZSB3YW50ZWQgdG8gbGlzdGVuIHRvIGFsbCBzZWxlY3Rpb24gZXZlbnRzIAorCQlJV29ya2JlbmNoV2luZG93IHd3ID0gZ2V0U2l0ZSgpLmdldFdvcmtiZW5jaFdpbmRvdygpOworCQlJU2VsZWN0aW9uU2VydmljZSBzcyA9IHd3LmdldFNlbGVjdGlvblNlcnZpY2UoKTsKKwkJc3MuYWRkU2VsZWN0aW9uTGlzdGVuZXIoY29udGVudFByb3ZpZGVyKTsKKwkJLy8gKGdldFNpdGUoKS5nZXRXb3JrYmVuY2hXaW5kb3coKS5nZXRTZWxlY3Rpb25TZXJ2aWNlKCkuYWRkU2VsZWN0aW9uTGlzdGVuZXIoY29udGVudFByb3ZpZGVyKTsKKwkJCisJCQorCQlib29sZWFuIG9rID0gZ2VpLmluaXQoKTsgCisJCWlmICggISBvayApIHsKKwkJCUdFTG9nLmRlYnVnKHRoaXMsZ2VpLmdldEVycm9yTWVzc2FnZSgpKTsKKwkJCXNob3dNZXNzYWdlKGdlaS5nZXRFcnJvck1lc3NhZ2UoKSk7CisJCSAgICBnZWkuc2V0RXJyb3JNZXNzYWdlKG51bGwpOworCQl9CisJCS8vIG1ha2UgdGhlIHBvcHVwIG1lbnUgYWN0aW9ucworCQlHRVZpZXdBY3Rpb25zIGFjdGlvbnMgPSBuZXcgR0VWaWV3QWN0aW9ucyh0aGlzLGdlaSk7CisJCWlmIChhY3Rpb25zID09IG51bGwpIHsKKwkJCUdFTG9nLmVycm9yKCJVbmFibGUgdG8gc2V0dXAgY29udGV4dCBtZW51IixudWxsKTsKKwkJfQorCQkKKwkJYm9vbGVhbiBhdXRvTGF1bmNoID0gR0VQcmVmZXJlbmNlUGFnZS5pc0F1dG9MYXVuY2goKTsKKwkJaWYgKGF1dG9MYXVuY2gpIHsKKwkJCVN0ZW1LbWwubGF1bmNoR0UoKTsKKwkJfQkJCisJfQorCS8qKgorCSAqIGNhbGwgdGhlIHJlZnJlc2ggbWV0aG9kIGZvciB0aGUgdmlld2VyCisJICoKKwkgKi8KKwlwdWJsaWMgdm9pZCByZWZyZXNoKCkgeworCQl2aWV3ZXIucmVmcmVzaCgpOworCX0KKwkvKioKKwkgKiBQdXQgdXAgYSBkaWFsb2cgYm94IHdpdGggYW4gaW5mb3JtYXRpb25hbCBtc2cKKwkgKiAKKwkgKiBAcGFyYW0gbWVzc2FnZQorCSAqLworCXB1YmxpYyB2b2lkIHNob3dNZXNzYWdlKFN0cmluZyBtZXNzYWdlKSB7CisJCU1lc3NhZ2VEaWFsb2cub3BlbkluZm9ybWF0aW9uKAorCQkJdmlld2VyLmdldENvbnRyb2woKS5nZXRTaGVsbCgpLAorCQkJTWVzc2FnZXMuZ2V0U3RyaW5nKCJHRVZpZXcuMjciKSwgLy8kTk9OLU5MUy0xJAorCQkJbWVzc2FnZSk7CisJfQorCS8qKgorCSAqIFB1dCB1cCBhIGRpYWxvZyBib3ggd2l0aCBhIHdhcm5pbmcgbXNnCisJICogCisJICogQHBhcmFtIG1lc3NhZ2UKKwkgKi8KKwkKKy8vCXByaXZhdGUgdm9pZCBzaG93V2FybmluZyhTdHJpbmcgbWVzc2FnZSkgeworLy8JCU1lc3NhZ2VEaWFsb2cub3Blbldhcm5pbmcoCisvLwkJCXZpZXdlci5nZXRDb250cm9sKCkuZ2V0U2hlbGwoKSwKKy8vCQkJIkdFVmlldzogR29vZ2xlRWFydGggVmlldyIsCisvLwkJCW1lc3NhZ2UpOworLy8JfQorCQorCQorCS8qKgorCSAqIFZlcmlmeSB0aGF0IHdlIGNhbiB1c2UgdGhlIGZvbGRlciB0byBzdG9yZSBLTUwKKwkgKiBAcGFyYW0gZm9sZGVyCisJICogQHJldHVybiB2ZXJpZmllZCBmb2xkZXIKKwkgKi8KKwlwdWJsaWMgU3RyaW5nIHZlcmlmeUZvbGRlcihTdHJpbmcgZm9sZGVyKSB7CisJCWZvbGRlciA9IGZvbGRlckRpYWxvZyhmb2xkZXIpOworCQlHRUxvZy5kZWJ1Zyh0aGlzLCJ2ZXJpZnlGb2xkZXI9Iitmb2xkZXIpOworCQlpZiAoZm9sZGVyICE9IG51bGwpCisJCSAgICBHRVByZWZlcmVuY2VQYWdlLnNldEZvbGRlcihmb2xkZXIpOworCQlyZXR1cm4gZm9sZGVyOworCX0KKwkKKworCisJCisJCisJLyoqCisJICogZGlhbG9nIHRvIGNob29zZSBhIGZvbGRlciB0byBzdG9yZSBmaWxlcyBpbnRvLgorCSAqIAorCSAqIElmIERlZmF1bHQgZm9sZGVyIGV4aXN0LCBpdCB3aWxsIGJlIHVzZWQuCisJICogaWYgZGVmYXVsdCBmb2xkZXIgaXMgbnVsbCBvciBkb2VzIG5vdCBleGlzdCwKKwkgKiB0aGVuIHN5c3RlbSB0ZW1wb3JhcnkgZm9sZGVyIHdpbGwgYmUgdXNlZCBhcyBkZWZhdWx0CisJICogYW5kIGEgZGlhbG9nIHdpbGwgYmUgc2hvd24uCisJICogPHA+CisJICogSWYgdGhlcmUgYXJlIGV4aXN0aW5nIEtNTCBmaWxlcyBpbiB0aGUgZm9sZGVyCisJICogYSBwcm9tcHQgd2lsbCBiZSBwcm9kdWNlZCBhc2tpbmcgaWYgdGhleSBzaG91bGQgYmUgcmVtb3ZlZC4KKwkgKiAKKwkgKiBAcGFyYW0gZGVmbHQgRGVmYXVsdCBmb2xkZXIuCisJICogQHJldHVybiBmb2xkZXIgcGF0aC4KKwkgKi8KKwlwcml2YXRlIFN0cmluZyBmb2xkZXJEaWFsb2coU3RyaW5nIGRlZmx0KSB7CisJCVN0cmluZyBmb2xkZXIgPSBudWxsOworCQl0cnkgeworCQkJaWYgKGRlZmx0ICE9IG51bGwpIHsKKwkJCQlGaWxlIGRlZmF1bHRmID0gbmV3IEZpbGUoZGVmbHQpOworCQkJCWlmIChkZWZhdWx0Zi5leGlzdHMoKSAmJiBkZWZhdWx0Zi5pc0RpcmVjdG9yeSgpKSB7CisJCQkJCWZvbGRlciA9IGRlZmx0OworCQkJCX0gZWxzZSB7CisJCQkJCWZvbGRlciA9IG51bGw7CisJCQkJfQorCQkJfQorCQkJd2hpbGUgKHRydWUpIHsKKwkJCQlpZiAoZm9sZGVyID09IG51bGwpIHsKKwkJCQkJLy8gZ2V0IHRtcCBmaWxlIGZvbGRlcgorCQkJCQlGaWxlIHRtcEZpbGUgPSBGaWxlLmNyZWF0ZVRlbXBGaWxlKCJYWFgiLCJ0bXAiKTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCisJCQkJCWZvbGRlciA9IHRtcEZpbGUuZ2V0UGFyZW50KCk7CisJCQkJCVNoZWxsIHNoZWxsID0gdmlld2VyLmdldENvbnRyb2woKS5nZXRTaGVsbCgpOworCQkJCQlpbnQgc3R5bGUgPSBTV1QuQVBQTElDQVRJT05fTU9EQUw7CisJCQkJCURpcmVjdG9yeURpYWxvZyBmZCA9IG5ldyBEaXJlY3RvcnlEaWFsb2coc2hlbGwsc3R5bGUpOworCQkJCQlmZC5zZXRGaWx0ZXJQYXRoKGZvbGRlcik7CisJCQkJCWZkLnNldFRleHQoTWVzc2FnZXMuZ2V0U3RyaW5nKCJHRVZpZXcuMzAiKSk7IC8vJE5PTi1OTFMtMSQKKwkJCQkJZmQuc2V0TWVzc2FnZShNZXNzYWdlcy5nZXRTdHJpbmcoIkdFVmlldy4zMSIpKTsgLy8kTk9OLU5MUy0xJAorCisJCQkJCXdoaWxlICh0cnVlKSB7CisJCQkJCQlmb2xkZXIgPSBmZC5vcGVuKCk7CisJCQkJCQlpZiAoZm9sZGVyID09IG51bGwpIHsKKwkJCQkJCQkvLyB1c2VyIHByZXNzZWQgY2FuY2VsCisJCQkJCQkJcmV0dXJuIG51bGw7CisJCQkJCQl9IGVsc2UgewkJICAgIAorCQkJCQkJCUZpbGUgZGlyID0gbmV3IEZpbGUoZm9sZGVyKTsKKwkJCQkJCQlpZiAoZGlyLmV4aXN0cygpICYmIGRpci5pc0RpcmVjdG9yeSgpKSB7CisJCQkJCQkJCWJvb2xlYW4gb2sgPSBjaGVja0NvbnRlbnRzKGZvbGRlcik7CisJCQkJCQkJCWlmIChvaykgCisJCQkJCQkJCQlicmVhazsKKwkJCQkJCQl9IGlmICghZGlyLmV4aXN0cygpKSB7CisJCQkJCQkJCWRpci5ta2RpcnMoKTsKKwkJCQkJCQl9CisJCQkJCQl9CisJCQkJCX0gIC8vIHdoaWxlKHRydWUpCisJCQkJCWJyZWFrOworCQkJCX0gZWxzZSB7IAorCQkJCQkvLyB1c2luZyB0aGUgc3BlY2lmaWVkIGZvbGRlci4gIAorCQkJCQkvLyBjaGVjayBpZiBLTUwgZmlsaWVzIHRvIGJlIGRlbGV0ZWQuCisJCQkJCWJvb2xlYW4gb2sgPSBjaGVja0NvbnRlbnRzKGZvbGRlcik7CisJCQkJCWlmIChvaykgCisJCQkJCQlicmVhazsKKwkJCQkJZWxzZSAKKwkJCQkJCWZvbGRlciA9IG51bGw7CisJCQkJfQorCQkJfQorCQkJCisJCX0gY2F0Y2ggKEV4Y2VwdGlvbiB0KSB7CisJCQkKKwkJCUdFTG9nLmVycm9yKCJGb2xkZXIgRGlhbG9nIiwgdCk7CisJCX0KKwkJcmV0dXJuIGZvbGRlcjsKKwl9CisKKworCS8qKgorCSAqIGRpYWxvZyB0byBjaG9vc2UgYSBmb2xkZXIgdG8gZGlzcGxheSBmaWxlcyBmcm9tLgorCSAqIAorCSAqIEl0IGlzIGV4cGVjdGVkIHRvIGhhdmUgS01MIGZpbGVzIGluIGl0IGFscmVhZHkKKwkgKiAKKwkgKiBAcGFyYW0gZm9sZGVyIERlZmF1bHQgZm9sZGVyLgorCSAqIEByZXR1cm4gZm9sZGVyIHBhdGggb3IgbnVsbCBpZiBubyBkaXNwbGF5IGRlc2lyZWQKKwkgKi8KKwlwdWJsaWMgU3RyaW5nIGRpc3BsYXlGb2xkZXJEaWFsb2coU3RyaW5nIGZvbGRlcikgeworCQlTdHJpbmcgZGlzcGxheUZvbGRlciA9IG51bGw7CisJCXRyeSB7CisJCQlpZiAoZm9sZGVyICE9IG51bGwpIHsKKwkJCQlGaWxlIGRlZmF1bHRmID0gbmV3IEZpbGUoZm9sZGVyKTsKKwkJCQlpZiAoZGVmYXVsdGYuZXhpc3RzKCkgJiYgZGVmYXVsdGYuaXNEaXJlY3RvcnkoKSkgeworCQkJCQlkaXNwbGF5Rm9sZGVyID0gZm9sZGVyOworCQkJCX0gZWxzZSB7CisJCQkJCWRpc3BsYXlGb2xkZXIgPSBudWxsOworCQkJCX0KKwkJCX0KKwkJCXdoaWxlICh0cnVlKSB7CisKKwkJCQlTaGVsbCBzaGVsbCA9IHZpZXdlci5nZXRDb250cm9sKCkuZ2V0U2hlbGwoKTsKKwkJCQlpbnQgc3R5bGUgPSBTV1QuQVBQTElDQVRJT05fTU9EQUw7CisJCQkJRGlyZWN0b3J5RGlhbG9nIGZkID0gbmV3IERpcmVjdG9yeURpYWxvZyhzaGVsbCxzdHlsZSk7CisJCQkJZmQuc2V0RmlsdGVyUGF0aChkaXNwbGF5Rm9sZGVyKTsKKwkJCQlmZC5zZXRUZXh0KE1lc3NhZ2VzLmdldFN0cmluZygiR0VWaWV3LjMwIikpOyAvLyROT04tTkxTLTEkCisJCQkJZmQuc2V0TWVzc2FnZShNZXNzYWdlcy5nZXRTdHJpbmcoIkdFVmlldy4zNCIpKTsgLy8kTk9OLU5MUy0xJAorCisJCQkJZGlzcGxheUZvbGRlciA9IGZkLm9wZW4oKTsKKwkJCQlpZiAoZGlzcGxheUZvbGRlciAhPSAgbnVsbCkgeworCQkJCQlpZiAodmFsaWRGb2xkZXIoZGlzcGxheUZvbGRlcikpIHsKKwkJCQkJCWJyZWFrOworCQkJCQl9CisJCQkJfSBlbHNlIHsKKwkJCQkJLy8gdXNlciBjYW5jZWxlZCAgb3V0CisJCQkJCWRpc3BsYXlGb2xkZXIgPSBudWxsOworCQkJCQlicmVhazsKKwkJCQl9CisJCQl9ICAvLyB3aGlsZSh0cnVlKQorCQl9IGNhdGNoIChFeGNlcHRpb24gdCkgeworCQkJR0VMb2cuZXJyb3IoIkdFVmlldzogZGlzcGxheUZvbGRlckRpYWxvZyIsIHQpOworCQkJZGlzcGxheUZvbGRlciA9IG51bGw7CisJCX0KKwkJcmV0dXJuIGRpc3BsYXlGb2xkZXI7CisJfQorCisJCisJLyoqCisJICogVmVyaWZ5IGlmIGZvbGRlciBjb250YWlucyBLTUwgZmlsZXMKKwkgKiAKKwkgKiBAcGFyYW0gZm9sZGVyCisJICogQHJldHVybiB0cnVlIGlmIGNvbnRhaW5zIEtNTCBmaWxlcyBvciB1c2VyIG9rcyBpdAorCSAqLworCXByaXZhdGUgYm9vbGVhbiB2YWxpZEZvbGRlcihTdHJpbmcgZm9sZGVyKSB7CisJCWJvb2xlYW4gb2sgPSBmYWxzZTsKKwkJRmlsZSBkaXIgPSBuZXcgRmlsZShmb2xkZXIpOworCQlpZiAoZGlyLmV4aXN0cygpICYmIGRpci5pc0RpcmVjdG9yeSgpKSB7CisKKwkJCUZpbGVbXSBjb250ZW50cyA9IGZpbGVMaXN0KGRpcik7CisJCQlpZiAoY29udGVudHMubGVuZ3RoID4gMCkgeworCQkJCW9rID10cnVlOworCQkJfSBlbHNlIHsKKwkJCQkvLyBpZiBubyBleGlzdGluZyBmaWxlcyBhc2sKKwkJCQlTaGVsbCBzaGVsbCA9IHZpZXdlci5nZXRDb250cm9sKCkuZ2V0U2hlbGwoKTsKKwkJCQlpbnQgc3R5bGUgPSBTV1QuQVBQTElDQVRJT05fTU9EQUx8CisJCQkJU1dULklDT05fUVVFU1RJT058U1dULllFU3xTV1QuTk87CisJCQkJTWVzc2FnZUJveCBxdWVzdGlvbiA9IG5ldyBNZXNzYWdlQm94KHNoZWxsLHN0eWxlKTsKKworCQkJCVN0cmluZyB0ZW1wbGF0ZSA9IE1lc3NhZ2VzLmdldFN0cmluZygiR0VWaWV3LjMzIik7CSAgLy8kTk9OLU5MUy0xJAorCQkJCVN0cmluZyBvdXRwdXQgPSBTdHJpbmcuZm9ybWF0KHRlbXBsYXRlLGRpci5nZXRBYnNvbHV0ZVBhdGgoKSk7CisJCQkJcXVlc3Rpb24uc2V0TWVzc2FnZShvdXRwdXQpOworCisJCQkJaW50IGFucyA9IHF1ZXN0aW9uLm9wZW4oKTsKKwkJCQlpZiAoYW5zPT1TV1QuWUVTKSB7CisJCQkJCW9rID0gdHJ1ZTsJCQkJCisJCQkJfQorCQkJfQkJCQkJCQkKKwkJfQorCisJCXJldHVybiBvazsKKwl9CisgICAgCisJLyoqCisJICogQ2hlY2sgdGhlIHNwZWNpZmllZCBmb2xkZXIgZm9yIGV4aXN0aW5nIEtNTCBmaWxlcworCSAqIGFuZCBpZiBzbyBhc2sgaWYgdGhleSBzaG91bGQgYmUgcmVtb3ZlZC4KKwkgKiAKKwkgKiBAcGFyYW0gZm9sZGVyCisJICogQHJldHVybiB0cnVlIGlmIHRoZSBmb2xkZXIgY2FuIGJlIHVzZWQuCisJICogICBmYWxzZSBpZiBhIG5ldyBmb2xkZXIgc2hvdWxkIGJlIGNob3Nlbi4KKwkgKi8KKwlwcml2YXRlIGJvb2xlYW4gY2hlY2tDb250ZW50cyhTdHJpbmcgZm9sZGVyKSB7CisJCWJvb2xlYW4gb2sgPSBmYWxzZTsKKwkJRmlsZSBkaXIgPSBuZXcgRmlsZShmb2xkZXIpOworCQlGaWxlW10gY29udGVudHMgPSBmaWxlTGlzdChkaXIpOworCQlpZiAoY29udGVudHMubGVuZ3RoID09IDApIHsKKwkJCW9rID10cnVlOworCQl9IGVsc2UgeworCQkJLy8gaWYgZXhpc3RpbmcgZmlsZXMgYXNrCisJCQlTaGVsbCBzaGVsbCA9IHZpZXdlci5nZXRDb250cm9sKCkuZ2V0U2hlbGwoKTsKKwkJCWludCBzdHlsZSA9IFNXVC5BUFBMSUNBVElPTl9NT0RBTHwKKwkJCVNXVC5JQ09OX1FVRVNUSU9OfFNXVC5ZRVN8U1dULk5PfFNXVC5DQU5DRUw7CisJCQlNZXNzYWdlQm94IHF1ZXN0aW9uID0gbmV3IE1lc3NhZ2VCb3goc2hlbGwsc3R5bGUpOworCisJCQlTdHJpbmcgdGVtcGxhdGUgPSBNZXNzYWdlcy5nZXRTdHJpbmcoIkdFVmlldy4zMiIpOwkJCQkJICAgLy8kTk9OLU5MUy0xJAorCQkJU3RyaW5nIG91dHB1dCA9IFN0cmluZy5mb3JtYXQodGVtcGxhdGUsZGlyLmdldEFic29sdXRlUGF0aCgpKTsKKwkJCXF1ZXN0aW9uLnNldE1lc3NhZ2Uob3V0cHV0KTsKKworCQkJaW50IGFucyA9IHF1ZXN0aW9uLm9wZW4oKTsKKwkJCWlmIChhbnM9PVNXVC5ZRVMpIHsKKworCQkJCXRyeSB7CisJCQkJCWZvciAoRmlsZSBmOmNvbnRlbnRzKSB7CQkJCQkJCQorCQkJCQkJZi5kZWxldGUoKTsKKwkJCQkJfQorCQkJCQlvayA9IHRydWU7OworCQkJCX0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CisJCQkJCUdFTG9nLmVycm9yKCJVbmFibGUgdG8gZGVsZXRlIEtNTCBmaWxlcyIsIGUpOworCisJCQkJfQorCQkJfSBlbHNlIGlmIChhbnM9PVNXVC5OTykgeworCQkJCS8vIHVzZXIgc2FpZCBpdCB3YXMgb2sgdG8gbm90IGRlbGV0ZSBmaWxlcworCQkJCW9rID0gdHJ1ZTsKKwkJCX0gCisJCX0JCQorCQlyZXR1cm4gb2s7CisJfQorCQkKKwkvKioKKwkgKiBnZXQgdGhlIGxpc3Qgb2YgZmlsZXMgaW4gdGhlIHNwZWNpZmllZCBmb2xkZXIuCisJICogVGhlIGZpbGVzIHdpbGwgb25seSBiZSBmaWxlcyB3aXRoIHRoZSAua21sIAorCSAqIGV4dGVuc2lvbiBhbmQgd2lsbCBiZSBzb3J0ZWQgYnkgZmlsZW5hbWUuCisJICogQWxzbyBuZXRsaW5rIGZpbGVzIHdpbGwgYmUgZmlsdGVyZWQgb3V0CisJICogCisJICogQHBhcmFtIGZvbGRlciBEaXJlY3RvcnkgdGhhdCBjb250YWlucyBLTUwgZmlsZXMgdG8gZGlzcGxheQorCSAqIEByZXR1cm4gYXJyYXkgb2YgZmlsZW5hbWVzCisJICovCisKKwlwcml2YXRlIEZpbGVbXSBmaWxlTGlzdChGaWxlIGZvbGRlcikgeworCisJCUZpbGVGaWx0ZXIgZmYgPSBuZXcgRmlsZUZpbHRlcigpIHsKKwkJCXB1YmxpYyBib29sZWFuIGFjY2VwdChGaWxlIGYpeworCQkJCWlmIChmLmdldE5hbWUoKS50b0xvd2VyQ2FzZSgpLnN0YXJ0c1dpdGgoIm5ldCIpKSB7IC8vJE5PTi1OTFMtMSQKKwkJCQkJcmV0dXJuIGZhbHNlOworCQkJCX0KKwkJCQlpZiAoZi5nZXROYW1lKCkudG9Mb3dlckNhc2UoKS5lbmRzV2l0aCgiLmttbCIpKSB7IC8vJE5PTi1OTFMtMSQKKwkJCQkJcmV0dXJuIHRydWU7CisJCQkJfQorCQkJCXJldHVybiBmYWxzZTsKKwkJCX0KKwkJfTsJCQkKKworCQl0cnkgewkJCQkJCQorCQkJRmlsZVtdIGZpbGVzID0gZm9sZGVyLmxpc3RGaWxlcyhmZik7CisJCQlpZiAoZmlsZXMgPT0gbnVsbCkgeworCQkJCXJldHVybiBuZXcgRmlsZVswXTsKKwkJCX0JCQkKKwkJCXJldHVybiBmaWxlczsKKwkJfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsJCQorCQkJR0VMb2cuZXJyb3IoZS5nZXRNZXNzYWdlKCksIGUpOworCQkJcmV0dXJuIG51bGw7CisJCX0KKwl9CisKKwkvKioKKwkgKiBQYXNzaW5nIHRoZSBmb2N1cyByZXF1ZXN0IHRvIHRoZSB2aWV3ZXIncyBjb250cm9sLgorCSAqLworCXB1YmxpYyB2b2lkIHNldEZvY3VzKCkgeworCQkvL2xvZygic2V0Rm9jdXMoKTogIik7CisJCXZpZXdlci5nZXRDb250cm9sKCkuc2V0Rm9jdXMoKTsKKwl9CisKKwkvKioKKwkgKiBAcmV0dXJuIHRoZSB2aWV3ZXIKKwkgKi8KKwlwdWJsaWMgTGlzdFZpZXdlciBnZXRWaWV3ZXIoKSB7CisJCXJldHVybiB2aWV3ZXI7CisJfQorCisJcHVibGljIHZvaWQgZGlzcG9zZSgpIHsKKwkJR0VMb2cuZGVidWcodGhpcywiRGlzcG9zZSgpIik7CisJCWdlaS5kaXNwb3NlKCk7CisJCWFjdGl2ZSA9IGZhbHNlOworCX0KKworCisKKwkvKioKKwkgKiBAcmV0dXJuIHRoZSBjb250ZW50UHJvdmlkZXIKKwkgKi8KKwlwdWJsaWMgR0VWaWV3Q29udGVudFByb3ZpZGVyIGdldENvbnRlbnRQcm92aWRlcigpIHsKKwkJcmV0dXJuIGNvbnRlbnRQcm92aWRlcjsKKwl9CisJCisgLyoqCisgICAqIHNldHVwIHRoZSBDb21wb3NpdGUgdGhhdCB3aWxsIGFsbG93IHNjcm9sbGluZyAKKyAgICogCisgICAqIEBwYXJhbSBwYXJlbnQgIENvbXBvc2l0ZSB0byB1c2UgYXMgcGFyZW50CisgICAqIEByZXR1cm4gdGhlIGNvbXBvc2l0ZSB0aGF0IGhvbGRzIHNjcm9sbGFibGUgc3R1ZmYuCisgICAqLworCXByaXZhdGUgQ29tcG9zaXRlIGdldFNjcm9sbGFibGUoQ29tcG9zaXRlIHBhcmVudCxHcmlkRGF0YSBncmlkRGF0YSkgeworCQkKKwkJLyoqCisJCSAqIFNvbWUgY29uc3RhbnRzIHdlIG5lZWQgdG8gc2V0IHByZWZlcnJlZCBzaXplcyBvZiBTV1QgY29udHJvbHMKKwkJICovCSAKKwkJZmluYWwgaW50IFNDUk9MTF9NSU5fTEVOR1RIID0gMzAwMDsKKworCQlmaW5hbCBpbnQgU0NST0xMX01JTl9IRUlHVEggPSAxMDAwMDsKKwkJCisJCVNjcm9sbGVkQ29tcG9zaXRlIHNjcm9sbENvbXBvc2l0ZSA9CisJCQluZXcgU2Nyb2xsZWRDb21wb3NpdGUocGFyZW50LCBTV1QuVl9TQ1JPTEwKKwkJCQl8IFNXVC5IX1NDUk9MTCk7CisJCXNjcm9sbENvbXBvc2l0ZS5zZXRFeHBhbmRIb3Jpem9udGFsKHRydWUpOworCQlzY3JvbGxDb21wb3NpdGUuc2V0RXhwYW5kVmVydGljYWwodHJ1ZSk7CisJCXNjcm9sbENvbXBvc2l0ZS5zZXRMYXlvdXREYXRhKGdyaWREYXRhKTsKKwkJc2Nyb2xsQ29tcG9zaXRlLnNldE1pblNpemUoU0NST0xMX01JTl9MRU5HVEgsIFNDUk9MTF9NSU5fSEVJR1RIKTsKKwkJQ29tcG9zaXRlIGNvbnRyb2wgPSBuZXcgQ29tcG9zaXRlKHNjcm9sbENvbXBvc2l0ZSwgU1dULk5PTkUpOworCQkKKwkJc2Nyb2xsQ29tcG9zaXRlLnNldENvbnRlbnQoY29udHJvbCk7CisJCXJldHVybiBjb250cm9sOworCQkKKwl9CisJCQkKKwkvLyBUT0RPIG1vZGlmeSB0aGlzIHRvIGNyZWF0ZSBwdXR0b25zIGJhc2VkIG9uIEFzcGVjdCBjbGFzcworCS8vIGluc3RlYWQgb2YgaGFyZGNvZGluZyBTRUlSICAgCisJLyoqCisJICogQ3JlYXRlcyB0aGUgYXJyYXkgb2YgU1dUIHB1c2ggYnV0dG9ucyBmb3IgY2hvb3NpbmcgCisJICogdGhlIGFzcGVjdCB0byBkaXNwbGF5LiAKKwkgKiAKKwkgKiBAcGFyYW0gcGFyZW50IFBhcmVudCBDb21wb3NpdGUKKwkgKiBAcGFyYW0gY3VycmVudCAgY3VycmVudCB2YWx1ZSBvZiBBc3BlY3QKKwkgKiBAcmV0dXJuIENvbXBvc2l0IHRoYXQgaG9sZHMgdGhlIGJ1dHRvbnMuCisJICovCisJcHJvdGVjdGVkIENvbXBvc2l0ZSBjcmVhdGVDb250cm9sQnV0dG9ucyhDb21wb3NpdGUgcGFyZW50LCBTdHJpbmcgY3VycmVudCkgeworICAgICAgICAKKwkJQnV0dG9uIGRpc3BsYXkgPSBuZXcgQnV0dG9uKHBhcmVudCxTV1QuUFVTSCk7CisgICAgICAgIGRpc3BsYXkuc2V0VGV4dCgiRGlzcGxheSIpOworICAgICAgICBkaXNwbGF5LnNldFRvb2xUaXBUZXh0KCJEaXNwbGF5IGN1cnJlbnQgbWFwIik7CisgICAgICAgIGRpc3BsYXkuYWRkTGlzdGVuZXIoU1dULlNlbGVjdGlvbiwgbmV3IExpc3RlbmVyKCkgeworCQkJcHVibGljIHZvaWQgaGFuZGxlRXZlbnQoRXZlbnQgZSkgeworCQkJCXN3aXRjaCAoZS50eXBlKSB7CisJCQkJY2FzZSBTV1QuU2VsZWN0aW9uOgorCQkJCQlJU2ltdWxhdGlvbiBzaW0gPSBjb250ZW50UHJvdmlkZXIuZ2V0Q3VycmVudFNpbXVsYXRpb24oKTsKKwkJCQkJaWYgKHNpbSAhPSBudWxsKSB7CisJCQkJCQlib29sZWFuIG9rID0gZ2VpLmRpc3BsYXlNYXAoc2ltKTsKKwkJCQkJCWlmICghb2spIHsKKwkJCQkJCQlzaG93TWVzc2FnZShNZXNzYWdlcy5nZXRTdHJpbmcoIkdFVmlldy4xNSIpKTsgLy8kTk9OLU5MUy0xJAorCQkJCQkJfQorCQkJCQl9IGVsc2UgeworCQkJCQkJc2hvd01lc3NhZ2UoIk5vIGFjdGl2ZSBTaW11bGF0aW9uIik7CisJCQkJCX0KKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJfQorCQl9KTsKKyAgICAgICAgCisJCUdyb3VwIGJ0bkNvbnRhaW5lciA9IG51bGw7CisJCWZpbmFsIGludCBPRkZTRVQgPSAxNjsKKwkJYnRuQ29udGFpbmVyID0gbmV3IEdyb3VwKHBhcmVudCwgU1dULlNIQURPV19JTik7CisgICAgICAgIGJ0bkNvbnRhaW5lci5zZXRUZXh0KCJTZWxlY3QgQXNwZWN0IHRvIGJlIGRpc3BsYXllZCIpOworCQlHcmlkTGF5b3V0IGdyaWRMYXlvdXQgPSBuZXcgR3JpZExheW91dCgpOworCQlncmlkTGF5b3V0Lm51bUNvbHVtbnMgPSA0OworCQlncmlkTGF5b3V0Lm1ha2VDb2x1bW5zRXF1YWxXaWR0aCA9IHRydWU7CisJCWJ0bkNvbnRhaW5lci5zZXRMYXlvdXQoZ3JpZExheW91dCk7CisKKwkJR3JpZERhdGEgZ3JpZERhdGEgPSBuZXcgR3JpZERhdGEoKTsKKwkJZ3JpZERhdGEuZ3JhYkV4Y2Vzc0hvcml6b250YWxTcGFjZSA9IGZhbHNlOworCQlncmlkRGF0YS5ncmFiRXhjZXNzVmVydGljYWxTcGFjZSA9IGZhbHNlOworCQlncmlkRGF0YS5oZWlnaHRIaW50ID0gU1RBTkRBUkRfSEVJR0hUICsgT0ZGU0VUOworCQlncmlkRGF0YS5taW5pbXVtSGVpZ2h0ID0gU1RBTkRBUkRfSEVJR0hUICsgT0ZGU0VUOworCQlncmlkRGF0YS53aWR0aEhpbnQgPSBTVEFOREFSRF9MRU5HVEg7CisJCWdyaWREYXRhLm1pbmltdW1XaWR0aCA9IFNUQU5EQVJEX0xFTkdUSDsKKwkJYnRuQ29udGFpbmVyLnNldExheW91dERhdGEoZ3JpZERhdGEpOworCisJCS8vIGNyZWF0ZSB0aGUgc2ltdWxhdGlvbiBjb250cm9sIGJ1dHRvbnMKKwkJLy8gTm90ZTogdGhlc2UgYXJlIFJhZGlvIGJ1dHRvbnMgZXZlbiB0aG91IFB1c2ggQnV0dG9ucyB3b3VsZCBiZSBiZXR0ZXIKKwkJLy8gYnV0IHN0dXBpZCBlY2xpcHNlIGRvZXMgbm90IGFsbG93IHNldHRpbmcgb2YgYmFja2dyb3VuZCBjb2xvciAKKwkJLy8gZm9yIHB1c2hidXR0b25zLgorCQlCdXR0b24gYl9zID0gbmV3IEJ1dHRvbihidG5Db250YWluZXIsIFNXVC5SQURJTyk7CisJCUJ1dHRvbiBiX2UgPSBuZXcgQnV0dG9uKGJ0bkNvbnRhaW5lciwgU1dULlJBRElPKTsKKwkJQnV0dG9uIGJfaSA9IG5ldyBCdXR0b24oYnRuQ29udGFpbmVyLCBTV1QuUkFESU8pOworCQlCdXR0b24gYl9yID0gbmV3IEJ1dHRvbihidG5Db250YWluZXIsIFNXVC5SQURJTyk7CisJCQorCQkKKwkJLy8gc2V0IGFsaWdubWVudCBhbmQgYmFja2dyb3VuZCBjb2xvcgorICAgICAgICBiX3Muc2V0VGV4dCgiUyIpOyAgICAgICAgCisgICAgICAgIGJfcy5zZXRTZWxlY3Rpb24oICJTIi5lcXVhbHMoY3VycmVudCkgKTsKKyAgICAgICAgYl9zLnNldEJhY2tncm91bmQocGFyZW50LmdldERpc3BsYXkoKS5nZXRTeXN0ZW1Db2xvcigKKwkJCQlTV1QuQ09MT1JfQkxVRSkpOworICAgICAgICBiX3Muc2V0Rm9yZWdyb3VuZChwYXJlbnQuZ2V0RGlzcGxheSgpLmdldFN5c3RlbUNvbG9yKAorCQkJCVNXVC5DT0xPUl9XSElURSkpOwkJCQkKKwkJYl9zLnNldFRvb2xUaXBUZXh0KCJTdWNlcHRpcGxlIik7IC8vJE5PTi1OTFMtMSQKKwkJYl9zLnNldExheW91dERhdGEoZ2V0QnV0dG9uR3JpZERhdGEoKSk7CisKKwkJYl9lLnNldFRleHQoIkUiKTsKKwkJYl9lLnNldFNlbGVjdGlvbiggIkUiLmVxdWFscyhjdXJyZW50KSApOworCQliX2Uuc2V0QmFja2dyb3VuZChwYXJlbnQuZ2V0RGlzcGxheSgpLmdldFN5c3RlbUNvbG9yKAorCQkJCQkJU1dULkNPTE9SX1lFTExPVykpOwkKKwkJYl9lLnNldFRvb2xUaXBUZXh0KCJFeHBvc2VkIik7IC8vJE5PTi1OTFMtMSQKKwkJYl9lLnNldExheW91dERhdGEoZ2V0QnV0dG9uR3JpZERhdGEoKSk7CisKKwkJYl9pLnNldFRleHQoIkkiKTsKKwkJYl9pLnNldFNlbGVjdGlvbiggIkkiLmVxdWFscyhjdXJyZW50KSApOworCQliX2kuc2V0QmFja2dyb3VuZChwYXJlbnQuZ2V0RGlzcGxheSgpLmdldFN5c3RlbUNvbG9yKAorCQkJCQkJU1dULkNPTE9SX1JFRCkpOworCQliX2kuc2V0VG9vbFRpcFRleHQoIkluZmVjdGlvdXMiKTsgLy8kTk9OLU5MUy0xJAorCQliX2kuc2V0TGF5b3V0RGF0YShnZXRCdXR0b25HcmlkRGF0YSgpKTsKKworCQliX3Iuc2V0VGV4dCgiUiIpOworCQliX3Iuc2V0U2VsZWN0aW9uKCAiUiIuZXF1YWxzKGN1cnJlbnQpICk7CisJCWJfci5zZXRCYWNrZ3JvdW5kKHBhcmVudC5nZXREaXNwbGF5KCkuZ2V0U3lzdGVtQ29sb3IoU1dULkNPTE9SX0dSRUVOKSk7CisJCWJfci5zZXRUb29sVGlwVGV4dCgiUmVjb3ZlcmVkIik7IC8vJE5PTi1OTFMtMSQKKwkJYl9yLnNldExheW91dERhdGEoZ2V0QnV0dG9uR3JpZERhdGEoKSk7CisgICAgICAgIAorCQkKKwkJCisJCS8vIHNldCBldmVudCBsaXN0ZW5lcnMgZm9yIGJ1dHRvbnMKKwkJYl9zLmFkZExpc3RlbmVyKFNXVC5TZWxlY3Rpb24sIG5ldyBMaXN0ZW5lcigpIHsKKwkJCXB1YmxpYyB2b2lkIGhhbmRsZUV2ZW50KEV2ZW50IGUpIHsKKwkJCQlzd2l0Y2ggKGUudHlwZSkgeworCQkJCWNhc2UgU1dULlNlbGVjdGlvbjoJCQkJCQorCQkJCQlHRVZpZXcudGhpcy5zZXRBc3BlY3QoIlMiKTsJCQkJCQorCQkJCQlicmVhazsKKwkJCQl9CisJCQl9CisJCX0pOworCQliX2UuYWRkTGlzdGVuZXIoU1dULlNlbGVjdGlvbiwgbmV3IExpc3RlbmVyKCkgeworCQkJcHVibGljIHZvaWQgaGFuZGxlRXZlbnQoRXZlbnQgZSkgeworCQkJCXN3aXRjaCAoZS50eXBlKSB7CisJCQkJY2FzZSBTV1QuU2VsZWN0aW9uOgorCQkJCQlHRVZpZXcudGhpcy5zZXRBc3BlY3QoIkUiKTsJCisJCQkJCWJyZWFrOworCQkJCX0KKwkJCX0KKwkJfSk7CisJCWJfaS5hZGRMaXN0ZW5lcihTV1QuU2VsZWN0aW9uLCBuZXcgTGlzdGVuZXIoKSB7CisJCQlwdWJsaWMgdm9pZCBoYW5kbGVFdmVudChFdmVudCBlKSB7CisJCQkJc3dpdGNoIChlLnR5cGUpIHsKKwkJCQljYXNlIFNXVC5TZWxlY3Rpb246CisJCQkJCUdFVmlldy50aGlzLnNldEFzcGVjdCgiSSIpOwkKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJfQorCQl9KTsKKwkJYl9yLmFkZExpc3RlbmVyKFNXVC5TZWxlY3Rpb24sIG5ldyBMaXN0ZW5lcigpIHsKKwkJCXB1YmxpYyB2b2lkIGhhbmRsZUV2ZW50KEV2ZW50IGUpIHsKKwkJCQlzd2l0Y2ggKGUudHlwZSkgeworCQkJCWNhc2UgU1dULlNlbGVjdGlvbjoKKwkJCQkJR0VWaWV3LnRoaXMuc2V0QXNwZWN0KCJSIik7CQorCQkJCQlicmVhazsKKwkJCQl9CisJCQl9CisJCX0pOworCQlHcmlkRGF0YSBidG5ncmlkRGF0YSA9IG5ldyBHcmlkRGF0YSgpOworCQlidG5ncmlkRGF0YS5ob3Jpem9udGFsQWxpZ25tZW50ID0gR3JpZERhdGEuRklMTDsKKwkJYnRuZ3JpZERhdGEuZ3JhYkV4Y2Vzc0hvcml6b250YWxTcGFjZSA9IHRydWU7CisJICAgIGJ0bkNvbnRhaW5lci5zZXRMYXlvdXREYXRhKGJ0bmdyaWREYXRhKTsKKwkJcmV0dXJuIGJ0bkNvbnRhaW5lcjsKKwl9CisJLyoqCisJICogVXNlciBzZWxlY3RlZCBhbiBBc3BlY3QgcmFkaW8gYnV0dG9uCisJICogCisJICogQHBhcmFtIGFzcGVjdENvZGUKKwkgKi8KKwlwcml2YXRlIHZvaWQgc2V0QXNwZWN0KFN0cmluZyBhc3BlY3RDb2RlKSB7CisJCUdFTG9nLmRlYnVnKHRoaXMsYXNwZWN0Q29kZSk7CisJCUFzcGVjdCBhc3BlY3QgPSBBc3BlY3QuZ2V0QXNwZWN0KGFzcGVjdENvZGUpOworCQlJU2ltdWxhdGlvbiBzaW0gPSBjb250ZW50UHJvdmlkZXIuZ2V0Q3VycmVudFNpbXVsYXRpb24oKTsKKwkJLy8gT0sgaWYgc2ltIGlzIG51bGwKKwkJZ2VpLnNldEFzcGVjdFRvRGlzcGxheShzaW0sYXNwZWN0KTsKKwkJCisJfQorCQorCS8qKgorCSAqIENyZWF0ZSBhIG5ldyBncmlkIGRhdGEgY3VzdG9taXplZCBmb3IgdGhlIHB1c2ggYnV0dG9ucy4KKwkgKiAKKwkgKiBAcmV0dXJuIGdyaWREYXRhIHRoZSBuZXcgZ3JpZCBkYXRhIG9iamVjdAorCSAqLworCXByb3RlY3RlZCBHcmlkRGF0YSBnZXRCdXR0b25HcmlkRGF0YSgpIHsKKwkJR3JpZERhdGEgZ3JpZERhdGEgPSBuZXcgR3JpZERhdGEoKTsKKwkJZ3JpZERhdGEuZ3JhYkV4Y2Vzc1ZlcnRpY2FsU3BhY2UgPSBmYWxzZTsKKwkJZ3JpZERhdGEuZ3JhYkV4Y2Vzc0hvcml6b250YWxTcGFjZSA9IHRydWU7CisJCWdyaWREYXRhLmhvcml6b250YWxBbGlnbm1lbnQgPSBTV1QuRklMTDsKKwkJZ3JpZERhdGEudmVydGljYWxBbGlnbm1lbnQgPSBTV1QuQ0VOVEVSOworCQlyZXR1cm4gZ3JpZERhdGE7CisJfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5nZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9nZS92aWV3cy9HRVZpZXdBY3Rpb25zLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkuZ2Uvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvZ2Uvdmlld3MvR0VWaWV3QWN0aW9ucy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNmYzRkMTIKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkuZ2Uvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvZ2Uvdmlld3MvR0VWaWV3QWN0aW9ucy5qYXZhCkBAIC0wLDAgKzEsNDY3IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0udWkuZ2Uudmlld3M7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDkgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLkFjdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSU1lbnVMaXN0ZW5lcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSU1lbnVNYW5hZ2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5NZW51TWFuYWdlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uU2VwYXJhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmRpYWxvZ3MuSURpYWxvZ0NvbnN0YW50czsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLkRvdWJsZUNsaWNrRXZlbnQ7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JRG91YmxlQ2xpY2tMaXN0ZW5lcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLkxpc3RWaWV3ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5qb2JzLnNpbXVsYXRpb24uSVNpbXVsYXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS51aS5nZS5Bc3BlY3Q7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS51aS5nZS5HRUludGVyZmFjZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnVpLmdlLkdFTG9nOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkRpc3BsYXk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuTWVudTsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5JU2hhcmVkSW1hZ2VzOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2hBY3Rpb25Db25zdGFudHM7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuUGxhdGZvcm1VSTsKKworCisvKioKKyAqIEdFVmlld0FjdGlvbnM6IERlZmluZXMgYW5kIGhhbmRsZXMgdGhlIGFjdGlvbnMuCisgKiAgCisgKiA8cD4gCisgKiBJdCBzdXBwb3J0cyBhIHBvcHVwIGNvbnRleHQgd2luZG93IHRoYXQgYWxsb3dzIAorICogYSBzZXQgb2YgYWN0aW9ucyAKKyAqIGVpdGhlciBnbG9iYWwgYWN0aW9ucyBvciBhY3Rpb25zIG9uIGEgc3BlY2lmaWMgc2ltdWxhdGlvbgorICogICAKKyAqIAorICovCisKK3B1YmxpYyBjbGFzcyBHRVZpZXdBY3Rpb25zICB7CisJCisJLyoqCisJICogcmVmZXJlbmNlIHRvIHRoZSBjYWxsZXIgR0VWaWV3IGNsYXNzCisJICovCisJcHJpdmF0ZSBHRVZpZXcgZ2VWaWV3ID0gbnVsbDsKKwkKKwkvKioKKwkgKiByZWZlcmVuY2UgdG8gdGhlIGludGVyZmFjZSBjbGFzcworCSAqLworCXByaXZhdGUgR0VJbnRlcmZhY2UgZ2VpID0gbnVsbDsKKwkvKioKKwkgKiBBIExpc3RWaWV3ZXIgdGhhdCB3aWxsIGxpc3Qgc2ltdWxhdGlvbnMgdGhhdCB3ZSAKKwkgKiBjYW4gd2F0Y2guIAorCSAqLworCXByaXZhdGUgTGlzdFZpZXdlciB2aWV3ZXIgPSBudWxsOworCS8qKgorCSAqIHJlZmVyZW5jZSB0byBjb250ZW50cHJvdmlkZXIgZm9yIHRoZSBMaXN0Vmlld2VyCisJICovCisJcHJpdmF0ZSBHRVZpZXdDb250ZW50UHJvdmlkZXIgY29udGVudFByb3ZpZGVyID0gbnVsbDsKKwkvKiogCisJICogYWN0aW9ucyB0aGF0IHdlIGNhbiB0YWtlIG9uIHNlbGVjdGVkCisJICogZWxlbWVudHMgaW4gdGhlIGxpc3QuCisJICovCisJCisJcHJpdmF0ZSBBY3Rpb24gYWN0aW9uU3RvcDsKKwlwcml2YXRlIEFjdGlvbiBhY3Rpb25TdGFydDsKKwlwcml2YXRlIEFjdGlvbiBhY3Rpb25NYXA7CisJcHJpdmF0ZSBBY3Rpb24gYWN0aW9uTWFwTm9kZTsKKwlwcml2YXRlIEFjdGlvbiBhY3Rpb25TdGF0dXM7CisJLyoqCisJICogYWN0aW9ucyB0aGF0IGFyZSBub3QgZm9yIGEgc2VsZWN0ZWQKKwkgKiBzaW11bGF0aW9uLgorCSAqLworCXByaXZhdGUgQWN0aW9uIGFjdGlvbkdFU3RhcnQ7CisJcHJpdmF0ZSBBY3Rpb24gYWN0aW9uR0VSZXN0YXJ0OworCXByaXZhdGUgQWN0aW9uIGFjdGlvbkdFUnVuOworCXByaXZhdGUgQWN0aW9uIGFjdGlvbkdFU3RvcDsKKwkKKwkKKwlwcml2YXRlIEFjdGlvbiBhY3Rpb25EZWJ1ZzsKKwkvKioKKwkgKiBhY3Rpb24gaW52b2tlZCBvbiBkb3VibGUgY2xpY2sKKwkgKi8KKwlwcml2YXRlIGZpbmFsIEFjdGlvbiBkb3VibGVDbGlja0FjdGlvbj0gbnVsbDsKKworCQkKKwkvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogCisJICogQ29uc3RydWN0b3IKKwkgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJLyoqCisJICogVGhlIEdFVmlldyBjb25zdHJ1Y3RvciBnZXRzIGNvbnRyb2wgd2hlbiB0aGUgdXNlciBvcGVucyAKKwkgKiB0aGUgIlZpZXciIGluIHRoZSBjdXJyZW50IHBlcnNwZWN0aXZlLgorCSAqIAorCSAqIEluIHRoZSBHRVZpZXcgY29uc3RydWN0b3Igd2Ugd2lsbCBjcmVhdGUgYW4KKwkgKiBpbnN0YW5jZSBvZiBHRUludGVyZmFjZSB3aGljaCBkb2VzIGFsbCB0aGUgd29yay4KKwkgKiBAcGFyYW0gZ2VWaWV3IHJlZmVyZW5jZSB0byBjYWxsZXIKKwkgKiBAcGFyYW0gZ2VpIHJlZmVyZW5jZSB0byBHRSBpbnRlcmZhY2UgCisJICogCisJICogCisJICovCisJcHVibGljIEdFVmlld0FjdGlvbnMoR0VWaWV3IGdlVmlldywgR0VJbnRlcmZhY2UgZ2VpKSB7CisJCXRoaXMuZ2VWaWV3ID0gZ2VWaWV3OworCQl0aGlzLmdlaSA9IGdlaTsJCQkKKwkJdGhpcy52aWV3ZXIgPSBnZVZpZXcuZ2V0Vmlld2VyKCk7CQkKKwkgICAgdGhpcy5jb250ZW50UHJvdmlkZXIgPSBnZVZpZXcuZ2V0Q29udGVudFByb3ZpZGVyKCk7CisJCisJCisJCS8vIG1ha2UgdGhlIHBvcHVwIG1lbnUgYWN0aW9ucworCQkvL21ha2VBY3Rpb25zKCk7CQorCQkvLyBhY3RpdmF0ZSB0aGUgY29udGV4dCBtZW51IAorCQlob29rQ29udGV4dE1lbnUoKTsKKwkJLy8gYWN0aXZhdGUgZG91YmxlY2xpY2sgYWN0aW9uCisJCS8vaG9va0RvdWJsZUNsaWNrQWN0aW9uKCk7CisJCQorCQkKKwl9CisKKwkgLyoqCisgICAgICogTWFrZSBhbGwgb2YgdGhlIHBvcHVwIGFjdGlvbnMuCisgICAgICogCisgICAgICogYWN0aW9uU3RvcCAtIHR1cm4gb2ZmIGxvZ2dpbmcgZm9yIGN1cnJlbnQgc2ltdWxhdGlvbgorICAgICAqIGFjdGlvblN0YXJ0IC0gdHVybiBvZmYgbG9nZ2luZyBmb3IgY3VycmVudCBzaW11bGF0aW9uCisgICAgICogYWN0aW9uTWFwIC0gU2VuZCB0aGUgS01MIHRvIGRpc3BsYXkgdGhlIG1hcCBmb3IgdGhlCisgICAgICogICAgICAgICAgIGN1cnJlbnQgc2ltdWxhdGlvbi4KKyAgICAgKiBhY3Rpb25TdGF0dXMgLSBkaXNwbGF5IHN0YXR1cworICAgICAqLworCXByaXZhdGUgdm9pZCBtYWtlQWN0aW9ucygpIHsKKwkJLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJCS8vIGFjdGlvblN0b3AgLSB0dXJuIE9GRiBsb2dnaW5nCisgICAgICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCQlhY3Rpb25TdG9wID0gbmV3IEFjdGlvbigpIHsKKwkJCUBPdmVycmlkZQorCQkJcHVibGljIHZvaWQgcnVuKCkgewkJCQkKKwkJCQlnZWkuc2V0QWN0aXZlKGNvbnRlbnRQcm92aWRlci5nZXRDdXJyZW50U2ltdWxhdGlvbigpLGZhbHNlKTsKKwkJCQlnZVZpZXcuc2hvd01lc3NhZ2UoTWVzc2FnZXMuZ2V0U3RyaW5nKCJHRVZpZXcuNCIpKTsgLy8kTk9OLU5MUy0xJAorCQkJfQorCQl9OworCQlhY3Rpb25TdG9wLnNldFRleHQoTWVzc2FnZXMuZ2V0U3RyaW5nKCJHRVZpZXcuNSIpKTsgLy8kTk9OLU5MUy0xJAorCQlhY3Rpb25TdG9wLnNldFRvb2xUaXBUZXh0KE1lc3NhZ2VzLmdldFN0cmluZygiR0VWaWV3LjYiKSk7IC8vJE5PTi1OTFMtMSQKKwkJYWN0aW9uU3RvcC5zZXRJbWFnZURlc2NyaXB0b3IoUGxhdGZvcm1VSS5nZXRXb3JrYmVuY2goKS5nZXRTaGFyZWRJbWFnZXMoKS4KKwkJCWdldEltYWdlRGVzY3JpcHRvcihJU2hhcmVkSW1hZ2VzLklNR19PQkpTX0lORk9fVFNLKSk7CisvLwkJIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICAvLwlhY3Rpb25TdGFydCAtIHR1cm4gT04gbG9nZ2luZworLy8JCSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwkJYWN0aW9uU3RhcnQgPSBuZXcgQWN0aW9uKCkgeworCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgdm9pZCBydW4oKSB7CQkJCQkJCQkKKwkJCQlTdHJpbmcgbG9nRm9sZGVyID0gZ2VWaWV3LnZlcmlmeUZvbGRlcihHRVByZWZlcmVuY2VQYWdlLmdldEZvbGRlcigpKTsKKwkJCQlpZiAobG9nRm9sZGVyICA9PSBudWxsKSAKKwkJCQkJcmV0dXJuOworCQkJCWVsc2UgCisJCQkJCUdFUHJlZmVyZW5jZVBhZ2Uuc2V0Rm9sZGVyKGxvZ0ZvbGRlcik7CisJCQkJCisJCQkJLy9zaG93TWVzc2FnZShTdHJpbmcuZm9ybWF0KCJHb29nbGVFYXJ0aCBsb2dnaW5nIE9OLiBUbzogJXMiLGZuKTsKKwkJCQlib29sZWFuIG9rID0gZ2VpLnNldEFjdGl2ZShjb250ZW50UHJvdmlkZXIuZ2V0Q3VycmVudFNpbXVsYXRpb24oKSx0cnVlKTsKKwkJCQlpZiAoIW9rKSB7CisJCQkJCWdlVmlldy5zaG93TWVzc2FnZShnZWkuZ2V0RXJyb3JNZXNzYWdlKCkpOworCQkJCX0gZWxzZSB7CisJCQkJCWdlVmlldy5zaG93TWVzc2FnZShTdHJpbmcuZm9ybWF0KCJHb29nbGVFYXJ0aCBsb2dnaW5nIE9OLiBUbzogJXMiLGxvZ0ZvbGRlcikpOworCQkJCX0KKwkJCX0KKwkJfTsKKwkJYWN0aW9uU3RhcnQuc2V0VGV4dChNZXNzYWdlcy5nZXRTdHJpbmcoIkdFVmlldy43IikpOyAvLyROT04tTkxTLTEkCisJCWFjdGlvblN0YXJ0LnNldFRvb2xUaXBUZXh0KE1lc3NhZ2VzLmdldFN0cmluZygiR0VWaWV3LjgiKSk7IC8vJE5PTi1OTFMtMSQKKwkJYWN0aW9uU3RhcnQuc2V0SW1hZ2VEZXNjcmlwdG9yKFBsYXRmb3JtVUkuZ2V0V29ya2JlbmNoKCkuZ2V0U2hhcmVkSW1hZ2VzKCkuCisJCQlnZXRJbWFnZURlc2NyaXB0b3IoSVNoYXJlZEltYWdlcy5JTUdfT0JKU19JTkZPX1RTSykpOworLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCQkgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLwkJYWN0aW9uR0VTdGFydCAtIGxhdW5jaCBhbiBlbXB0eSBjb250cm9sLmttbCB0byBzdGFydCBHRQorLy8JCSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwkJYWN0aW9uR0VTdGFydCA9IG5ldyBBY3Rpb24oKSB7CisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyB2b2lkIHJ1bigpIHsKKwkJCQlnZWkuc3RhcnRHRSgpOworCQkJCQorCQkJfQorCQl9OworCQlhY3Rpb25HRVN0YXJ0LnNldFRleHQoTWVzc2FnZXMuZ2V0U3RyaW5nKCJHRVZpZXcuOSIpKTsgLy8kTk9OLU5MUy0xJAorCQlhY3Rpb25HRVN0YXJ0LnNldFRvb2xUaXBUZXh0KE1lc3NhZ2VzLmdldFN0cmluZygiR0VWaWV3LjEwIikpOyAvLyROT04tTkxTLTEkCisJCWFjdGlvbkdFU3RhcnQuc2V0SW1hZ2VEZXNjcmlwdG9yKFBsYXRmb3JtVUkuZ2V0V29ya2JlbmNoKCkuZ2V0U2hhcmVkSW1hZ2VzKCkuCisJCQlnZXRJbWFnZURlc2NyaXB0b3IoSVNoYXJlZEltYWdlcy5JTUdfT0JKU19JTkZPX1RTSykpOworLy8JCSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vCQlhY3Rpb25HRVJlc3RhcnQgLSBwcm9jZXNzIGEgcmVzdGFydCBvZiB0aGUgR0UgYXBwCisvLwkJIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCQlhY3Rpb25HRVJlc3RhcnQgPSBuZXcgQWN0aW9uKCkgeworCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgdm9pZCBydW4oKSB7CisJCQkJZ2VpLnJlc3RhcnRHRSgpOworCQkJCQorCQkJfQorCQl9OworCQlhY3Rpb25HRVJlc3RhcnQuc2V0VGV4dChNZXNzYWdlcy5nZXRTdHJpbmcoIkdFVmlldy45YSIpKTsgLy8kTk9OLU5MUy0xJAorCQlhY3Rpb25HRVJlc3RhcnQuc2V0VG9vbFRpcFRleHQoTWVzc2FnZXMuZ2V0U3RyaW5nKCJHRVZpZXcuMTBhIikpOyAvLyROT04tTkxTLTEkCisJCWFjdGlvbkdFUmVzdGFydC5zZXRJbWFnZURlc2NyaXB0b3IoUGxhdGZvcm1VSS5nZXRXb3JrYmVuY2goKS5nZXRTaGFyZWRJbWFnZXMoKS4KKwkJCWdldEltYWdlRGVzY3JpcHRvcihJU2hhcmVkSW1hZ2VzLklNR19PQkpTX0lORk9fVFNLKSk7CisKKy8vCQkgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLwkJYWN0aW9uR0VSdW4gLSBsYXVuY2ggY29udHJvbC5rbWwgdG8gc3RhcnQgR0UgcmVhZGluZyBLTUwKKy8vCQkgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJCWFjdGlvbkdFUnVuID0gbmV3IEFjdGlvbigpIHsKKwkJCUBPdmVycmlkZQorCQkJcHVibGljIHZvaWQgcnVuKCkgeworCQkJCVN0cmluZyBmb2xkZXIgPSBHRVByZWZlcmVuY2VQYWdlLmdldEZvbGRlcigpOworCQkJCWZvbGRlciA9IGdlVmlldy5kaXNwbGF5Rm9sZGVyRGlhbG9nKGZvbGRlcik7CisJCQkJaWYgKGZvbGRlciAhPSBudWxsKSB7CisJCQkJCWJvb2xlYW4gb2sgPSBnZWkucnVuR0UoZm9sZGVyKTsKKwkJCQkJaWYgKCFvaykgewkJCQkJCQorCQkJCQkJZ2VWaWV3LnNob3dNZXNzYWdlKGdlaS5nZXRFcnJvck1lc3NhZ2UoKSk7CisJCQkJCX0KKwkJCQl9CisJCQkJCisJCQl9CisJCX07CisJCWFjdGlvbkdFUnVuLnNldFRleHQoTWVzc2FnZXMuZ2V0U3RyaW5nKCJHRVZpZXcuMTEiKSk7IC8vJE5PTi1OTFMtMSQKKwkJYWN0aW9uR0VSdW4uc2V0VG9vbFRpcFRleHQoTWVzc2FnZXMuZ2V0U3RyaW5nKCJHRVZpZXcuMTIiKSk7IC8vJE5PTi1OTFMtMSQKKwkJYWN0aW9uR0VSdW4uc2V0SW1hZ2VEZXNjcmlwdG9yKFBsYXRmb3JtVUkuZ2V0V29ya2JlbmNoKCkuZ2V0U2hhcmVkSW1hZ2VzKCkuCisJCQlnZXRJbWFnZURlc2NyaXB0b3IoSVNoYXJlZEltYWdlcy5JTUdfT0JKU19JTkZPX1RTSykpOworLy8JCSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgLy8JYWN0aW9uR0VTdG9wIC0gc3RvcCBhbnkgYWN0aXZlIEdvb2dsZUVhcnRoIG5ldHdvcmtsaW5rCisJCS8vICBJdCB3aWxsIG5vdCBhY3R1YWxseSBzdG9wIEdFIAorLy8JCSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwkJYWN0aW9uR0VTdG9wID0gbmV3IEFjdGlvbigpIHsKKwkJCUBPdmVycmlkZQorCQkJcHVibGljIHZvaWQgcnVuKCkgeworCQkJCWdlaS5zdG9wR0UoKTsKKwkJCQkKKwkJCX0KKwkJfTsKKwkJYWN0aW9uR0VTdG9wLnNldFRleHQoTWVzc2FnZXMuZ2V0U3RyaW5nKCJHRVZpZXcuMTMiKSk7IC8vJE5PTi1OTFMtMSQKKwkJYWN0aW9uR0VTdG9wLnNldFRvb2xUaXBUZXh0KE1lc3NhZ2VzLmdldFN0cmluZygiR0VWaWV3LjE0IikpOyAvLyROT04tTkxTLTEkCisJCWFjdGlvbkdFU3RvcC5zZXRJbWFnZURlc2NyaXB0b3IoUGxhdGZvcm1VSS5nZXRXb3JrYmVuY2goKS5nZXRTaGFyZWRJbWFnZXMoKS4KKwkJCWdldEltYWdlRGVzY3JpcHRvcihJU2hhcmVkSW1hZ2VzLklNR19PQkpTX0lORk9fVFNLKSk7CQkKKwkJCisgICAgICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJCS8vIGFjdGlvbk1hcCAtIGRpc3BsYXkgY3VycmVudCBtYXAgaW4gR29vZ2xlRWFydGggCisgICAgICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJCWFjdGlvbk1hcCA9IG5ldyBBY3Rpb24oKSB7CisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyB2b2lkIHJ1bigpIHsKKworCQkJCWJvb2xlYW4gb2sgPSBnZWkuZGlzcGxheU1hcChjb250ZW50UHJvdmlkZXIuZ2V0Q3VycmVudFNpbXVsYXRpb24oKSk7CisJCQkJaWYgKCFvaykgeworCQkJCQlnZVZpZXcuc2hvd01lc3NhZ2UoTWVzc2FnZXMuZ2V0U3RyaW5nKCJHRVZpZXcuMTUiKSk7IC8vJE5PTi1OTFMtMSQKKwkJCQl9CisJCQl9CisJCX07CisJCQorCQlhY3Rpb25NYXAuc2V0VGV4dChNZXNzYWdlcy5nZXRTdHJpbmcoIkdFVmlldy4xNiIpKTsgLy8kTk9OLU5MUy0xJAorCQlhY3Rpb25NYXAuc2V0VG9vbFRpcFRleHQoTWVzc2FnZXMuZ2V0U3RyaW5nKCJHRVZpZXcuMTciKSk7IC8vJE5PTi1OTFMtMSQKKwkJYWN0aW9uTWFwLnNldEltYWdlRGVzY3JpcHRvcihQbGF0Zm9ybVVJLmdldFdvcmtiZW5jaCgpLmdldFNoYXJlZEltYWdlcygpLgorCQkJZ2V0SW1hZ2VEZXNjcmlwdG9yKElTaGFyZWRJbWFnZXMuSU1HX09CSlNfSU5GT19UU0spKTsKKworLy8JCSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vCQkgYWN0aW9uTWFwTm9kZSAtIGRpc3BsYXkgTm9kZSBpbiBjdXJyZW50IG1hcCBpbiBHb29nbGVFYXJ0aAorLy8JCSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwkJYWN0aW9uTWFwTm9kZSA9IG5ldyBBY3Rpb24oKSB7CisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyB2b2lkIHJ1bigpIHsKKwkJCQlTdHJpbmcgYXJlYSA9IG51bGw7CisJCQkJU3RyaW5nIGFkbWluRmlsZSA9IG51bGw7CisJCQkJU3RyaW5nIHNlYXJjaCA9IG51bGw7CisKKwkJCQlEaXNwbGF5QXJlYURpYWxvZyBpbnB1dCA9IG5ldyBEaXNwbGF5QXJlYURpYWxvZygKKwkJCQkJCURpc3BsYXkuZ2V0Q3VycmVudCgpLmdldEFjdGl2ZVNoZWxsKCkpOworICAgICAgICAgICAgICAgIAorCQkJCQorICAgICAgICAgICAgICAgIGJvb2xlYW4gZG9uZSA9IGZhbHNlOworICAgICAgICAgICAgICAgIHdoaWxlICghZG9uZSkgeworICAgICAgICAgICAgICAgIAlpbnQgcmMgPSBpbnB1dC5vcGVuKCk7CisgICAgICAgICAgICAgICAgCWlmIChyYyA9PSBJRGlhbG9nQ29uc3RhbnRzLk9LX0lEIHx8CisgICAgICAgICAgICAgICAgCQkgIHJjID09IElEaWFsb2dDb25zdGFudHMuUFJPQ0VFRF9JRAkpIHsKKyAgICAgICAgICAgICAgICAJCWFkbWluRmlsZSA9IGlucHV0LmdldEFkbWluRmlsZSgpOworICAgICAgICAgICAgICAgIAkJc2VhcmNoID0gaW5wdXQuZ2V0U2VhcmNoKCkudHJpbSgpOworICAgICAgICAgICAgICAgIAkJYm9vbGVhbiBjbGVhciA9IGlucHV0LmlzQ2xlYXIoKTsKKyAgICAgICAgICAgICAgICAJCUFzcGVjdCBhID0gZ2VpLmdldEFzcGVjdFRvRGlzcGxheShjb250ZW50UHJvdmlkZXIuZ2V0Q3VycmVudFNpbXVsYXRpb24oKSk7CisgICAgICAgIAkJCQlHRUxvZy5kZWJ1Zyh0aGlzLCJEaXNwbGF5OiAiK2FyZWErICIgYXNwZWN0OiAiK2EudG9TdHJpbmcoKSk7CisgICAgICAgIAkJCQlib29sZWFuIG9rID0gZ2VpLmRpc3BsYXlBcmVhKGFkbWluRmlsZSxzZWFyY2gsY2xlYXIpOworICAgICAgICAJCQkJaWYgKCFvaykgeworICAgICAgICAJCQkJCWdlVmlldy5zaG93TWVzc2FnZShNZXNzYWdlcy5nZXRTdHJpbmcoIkdFVmlldy4xNW4iKSsiXG4iKworICAgICAgICAJCQkJCQkJZ2VpLmdldEVycm9yTWVzc2FnZSgpKTsgCisgICAgICAgIAkJCQkJCisgICAgICAgIAkJCQl9IGVsc2UgaWYgKHJjID09IElEaWFsb2dDb25zdGFudHMuT0tfSUQpIHsgICAgICAgICAgICAgICAgIAkJCisgICAgICAgICAgICAgICAgICAgIAkJZG9uZSA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgIAl9CisgICAgICAgICAgICAgICAgCX0gZWxzZSBpZiAocmMgPT0gSURpYWxvZ0NvbnN0YW50cy5DQU5DRUxfSUQpIHsKKyAgICAgICAgICAgICAgICAJCWRvbmUgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorCQkJCQorCQkJfQorCQl9OworCQkJCisJCWFjdGlvbk1hcE5vZGUuc2V0VGV4dChNZXNzYWdlcy5nZXRTdHJpbmcoIkdFVmlldy4xNm4iKSk7IC8vJE5PTi1OTFMtMSQKKwkJYWN0aW9uTWFwTm9kZS5zZXRUb29sVGlwVGV4dChNZXNzYWdlcy5nZXRTdHJpbmcoIkdFVmlldy4xN24iKSk7IC8vJE5PTi1OTFMtMSQKKwkJYWN0aW9uTWFwTm9kZS5zZXRJbWFnZURlc2NyaXB0b3IoUGxhdGZvcm1VSS5nZXRXb3JrYmVuY2goKS5nZXRTaGFyZWRJbWFnZXMoKS4KKwkJCWdldEltYWdlRGVzY3JpcHRvcihJU2hhcmVkSW1hZ2VzLklNR19PQkpTX0lORk9fVFNLKSk7CisJCQorLy8JCSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vCQkgYWN0aW9uU3RhdHVzIC0gZGlzcGxheSBzdGF0dXMKKy8vCQkgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJCWFjdGlvblN0YXR1cyA9IG5ldyBBY3Rpb24oKSB7CisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyB2b2lkIHJ1bigpIHsKKwkJCQlib29sZWFuIHNhdmUgPSBHRUxvZy5ERUJVRzsKKwkJCQlHRUxvZy5ERUJVRyA9IHRydWU7CisJCQkJZ2VpLmRpc3BsYXlTdGF0dXMoKTsKKwkJCQlHRUxvZy5ERUJVRyA9IHNhdmU7CisJCQl9CisJCX07CisJCWFjdGlvblN0YXR1cy5zZXRUZXh0KE1lc3NhZ2VzLmdldFN0cmluZygiR0VWaWV3LjE4IikpOyAvLyROT04tTkxTLTEkCisJCWFjdGlvblN0YXR1cy5zZXRUb29sVGlwVGV4dChNZXNzYWdlcy5nZXRTdHJpbmcoIkdFVmlldy4xOSIpICk7IC8vJE5PTi1OTFMtMSQKKwkJYWN0aW9uU3RhdHVzLnNldEltYWdlRGVzY3JpcHRvcihQbGF0Zm9ybVVJLmdldFdvcmtiZW5jaCgpLmdldFNoYXJlZEltYWdlcygpLgorCQkJCWdldEltYWdlRGVzY3JpcHRvcihJU2hhcmVkSW1hZ2VzLklNR19PQkpTX0lORk9fVFNLKSk7CisvLwkJIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCQkvLwkJIGFjdGlvbkRlYnVnIC0gRmxpcCBERUJVRyBzdGF0dXMgCisvLwkJIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCQlhY3Rpb25EZWJ1ZyA9IG5ldyBBY3Rpb24oKSB7CisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyB2b2lkIHJ1bigpIHsKKwkJICAgICAgaWYgKEdFTG9nLkRFQlVHKSB7CQkJCQorCQkJCSAgR0VMb2cuZGVidWcodGhpcywgIlR1cm5pbmcgREVCVUcgb2ZmIik7CisJCQkJICBHRUxvZy5ERUJVRyA9IGZhbHNlOyAvLyBmbGlwIHN0YXR1cworCQkgICAgICB9IGVsc2UgeworCQkgICAgCSAgR0VMb2cuREVCVUcgPSB0cnVlOyAvLyBmbGlwIHN0YXR1cyAgCisJCSAgICAJICBHRUxvZy5kZWJ1Zyh0aGlzLCAiVHVybmVkIERFQlVHIG9uIik7CisJCSAgICAgIH0KKwkJCX0KKwkJfTsKKwkJLy8gc2hvdyB3aGF0IGl0IHdpbGwgYmUgY2hhbmdlZCB0by4KKwkJaWYgKEdFTG9nLkRFQlVHKSB7CisJCSAgICBhY3Rpb25EZWJ1Zy5zZXRUZXh0KE1lc3NhZ2VzLmdldFN0cmluZygiR0VWaWV3LjIwT2ZmIikpOyAvLyROT04tTkxTLTEkCisJCX0gZWxzZSB7CisJCQlhY3Rpb25EZWJ1Zy5zZXRUZXh0KE1lc3NhZ2VzLmdldFN0cmluZygiR0VWaWV3LjIwT24iKSk7IC8vJE5PTi1OTFMtMSQKKwkJfQorCQlhY3Rpb25EZWJ1Zy5zZXRUb29sVGlwVGV4dChNZXNzYWdlcy5nZXRTdHJpbmcoIkdFVmlldy4yMSIpICk7IC8vJE5PTi1OTFMtMSQKKwkJYWN0aW9uRGVidWcuc2V0SW1hZ2VEZXNjcmlwdG9yKFBsYXRmb3JtVUkuZ2V0V29ya2JlbmNoKCkuZ2V0U2hhcmVkSW1hZ2VzKCkuCisJCQkJZ2V0SW1hZ2VEZXNjcmlwdG9yKElTaGFyZWRJbWFnZXMuSU1HX09CSlNfSU5GT19UU0spKTsKKyAgICAgICAgLy8gYWN0aW9uRGlzcGxheSogLSBzcGVjaWZ5IGlmIHdlIHNob3VsZCBkaXNwbGF5IFMgRSBJIFIKKyAgICAgICAgLy8gICAgICAgIChzdXNjZXB0aWJsZSAsIEV4cG9zZWQsIEluZmVjdGlvdXMsIFJlY292ZXJlZCAgCisKKwl9CisJCisJCisJCisJLyoqCisJICogVGhlIGZvbGxvd2luZyBzZXRzIHVwIGEgcG9wdXAgbWVudSB0aGF0IGNhbiAKKwkgKiBiZSB1c2VkIHRvIHR1cm4gb24gYW5kIG9mZiB0aGUgZ2VuZXJhdGlvbiBvZgorCSAqIEtNTCBmaWxlcyBhbmQgZGlzcGxheSB0aGUgc3RhdHVzICAKKwkgKiBJbiB0aGUgZnV0dXJlLCBvdGhlciBjb21tYW5kcyBjb3VsZCBiZSBpbXBsZW1lbnRlZC4KKwkgKiAKKwkgKgorCSAqLworCXByaXZhdGUgdm9pZCBob29rQ29udGV4dE1lbnUoKSB7CisJCU1lbnVNYW5hZ2VyIG1lbnVNZ3IgPSBuZXcgTWVudU1hbmFnZXIoIkdvb2dsZUVhcnRoIik7IC8vJE5PTi1OTFMtMSQKKwkJbWVudU1nci5zZXRSZW1vdmVBbGxXaGVuU2hvd24odHJ1ZSk7CisJCW1lbnVNZ3IuYWRkTWVudUxpc3RlbmVyKG5ldyBJTWVudUxpc3RlbmVyKCkgeworCQkJcHVibGljIHZvaWQgbWVudUFib3V0VG9TaG93KElNZW51TWFuYWdlciBtYW5hZ2VyKSB7CisJCQkJbWFrZUFjdGlvbnMoKTsKKwkJCQlmaWxsQ29udGV4dE1lbnUobWFuYWdlcik7CisJCQl9CisJCX0pOworCQkvL1NoZWxsIHNoZWxsID0gdmlld2VyLmdldENvbnRyb2woKS5nZXRTaGVsbCgpOworCQkKKwkJTWVudSBtZW51ID0gbWVudU1nci5jcmVhdGVDb250ZXh0TWVudSh2aWV3ZXIuZ2V0Q29udHJvbCgpKTsKKwkJbWVudU1nci5hZGQobmV3IFNlcGFyYXRvcihJV29ya2JlbmNoQWN0aW9uQ29uc3RhbnRzLk1CX0FERElUSU9OUykpOworCQl2aWV3ZXIuZ2V0Q29udHJvbCgpLnNldE1lbnUobWVudSk7CisJCWdlVmlldy5nZXRTaXRlKCkucmVnaXN0ZXJDb250ZXh0TWVudShtZW51TWdyLCB2aWV3ZXIpOworCX0KKworCisgICAgLyoqCisgICAgICogc2V0dXAgdGhlIFBvcHVwIGFjdGlvbnMgCisgICAgICogVGhpcyBpcyBjYWxsZWQgYXQgdGhlIHRpbWUgdGhlIHBvcHVwIGlzIHJlcXVlc3RlZAorICAgICAqIHNvIHRoZSByZXN1bHRpbmcgcG9wdXAgaXMgY3VzdG9taXplZCBiYXNlZCBvbiB0aGUgc3RhdHVzLiAKKyAgICAgKiBGb3IgZXhhbXBsZSwgaWYgdGhlIExvZ2dpbmcgb3B0aW9uIGlzIE9OIHRoZW4gdGhlIAorICAgICAqIGFjdGlvbiBnZW5lcmF0ZWQgd2lsbCB0dXJuIGl0IE9GRi4gCisgICAgICogCisgICAgICogQHBhcmFtIG1hbmFnZXIKKyAgICAgKi8KKwlwcml2YXRlIHZvaWQgZmlsbENvbnRleHRNZW51KElNZW51TWFuYWdlciBtYW5hZ2VyKSB7CisJCW1hbmFnZXIuYWRkKG5ldyBTZXBhcmF0b3IoSVdvcmtiZW5jaEFjdGlvbkNvbnN0YW50cy5NQl9BRERJVElPTlMpKTsKKwkJSVNpbXVsYXRpb24gc2ltID0gY29udGVudFByb3ZpZGVyLmdldEN1cnJlbnRTaW11bGF0aW9uKCk7CisJCWlmICggc2ltICE9IG51bGwpIHsKKwkJCWlmIChnZWkuaXNBY3RpdmUoc2ltKSkgeworCQkJCWFjdGlvblN0b3Auc2V0RW5hYmxlZCh0cnVlKTsKKwkJICAgICAgICBtYW5hZ2VyLmFkZChhY3Rpb25TdG9wKTsgIC8vIHN0b3AKKwkJICAgICAgICBhY3Rpb25TdGFydC5zZXRFbmFibGVkKGZhbHNlKTsKKwkJICAgICAgICBtYW5hZ2VyLmFkZChhY3Rpb25TdGFydCk7CisJCSAgICAgICAgCisJCSAgICAgICAKKwkJCX0gZWxzZSB7IAorCQkJCWFjdGlvblN0b3Auc2V0RW5hYmxlZChmYWxzZSk7CisJCSAgICAgICAgbWFuYWdlci5hZGQoYWN0aW9uU3RvcCk7ICAvLyBzdG9wCisJCSAgICAgICAgYWN0aW9uU3RhcnQuc2V0RW5hYmxlZCh0cnVlKTsKKwkJICAgICAgICBtYW5hZ2VyLmFkZChhY3Rpb25TdGFydCk7ICAvLyBzdGFydAorCQkJfQorCQkJbWFuYWdlci5hZGQoYWN0aW9uTWFwKTsgIC8vIG1hcAorCQkJCisJCX0KKwkJbWFuYWdlci5hZGQoYWN0aW9uTWFwTm9kZSk7ICAvLyBtYXAKKwkJbWFuYWdlci5hZGQoYWN0aW9uU3RhdHVzKTsgIC8vIHN0YXR1cworCQltYW5hZ2VyLmFkZChuZXcgU2VwYXJhdG9yKCkpOworCQltYW5hZ2VyLmFkZChhY3Rpb25EZWJ1Zyk7ICAvLyBEaXNwbGF5IERlYnVnCisJCW1hbmFnZXIuYWRkKG5ldyBTZXBhcmF0b3IoKSk7CisJCW1hbmFnZXIuYWRkKGFjdGlvbkdFU3RhcnQpOyAgLy8gU3RhcnQgR0UKKwkJbWFuYWdlci5hZGQoYWN0aW9uR0VSZXN0YXJ0KTsgIC8vIFJlU3RhcnQgR0UKKwkJbWFuYWdlci5hZGQoYWN0aW9uR0VSdW4pOyAgLy8gRGlzcGxheSBLTUwgaW4gR0UKKwkJbWFuYWdlci5hZGQoYWN0aW9uR0VTdG9wKTsgIC8vIFN0b3AgR0UgZGlzcGxheQorLy8JCW1hbmFnZXIuYWRkKG5ldyBTZXBhcmF0b3IoKSk7CisvLwkJTWVudU1hbmFnZXIgZGlzcGxheU1lbnUgPSBuZXcgTWVudU1hbmFnZXIoTWVzc2FnZXMuZ2V0U3RyaW5nKCJHRVZpZXcuMiIpLAorLy8JCQkJTWVzc2FnZXMuZ2V0U3RyaW5nKCJHRVZpZXcuMyIpKTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCisvLwkJTWFwPFN0cmluZyxBc3BlY3Q+IG1hcEFzcGVjdHMgPSBBc3BlY3QuZ2V0TWFwKCk7CisvLwkJZm9yIChNYXAuRW50cnk8U3RyaW5nLEFzcGVjdD4gZW50cnkgOiBtYXBBc3BlY3RzLmVudHJ5U2V0KCkgKSB7CisvLwkJCWRpc3BsYXlNZW51LmFkZChhY3Rpb25Bc3BlY3REaXNwbGF5KHNpbSxlbnRyeS5nZXRWYWx1ZSgpKSApOworLy8JCX0KKy8vCisvLworLy8JCW1hbmFnZXIuYWRkKGRpc3BsYXlNZW51KTsKKwkJbWFuYWdlci5hZGQobmV3IFNlcGFyYXRvcihJV29ya2JlbmNoQWN0aW9uQ29uc3RhbnRzLk1CX0FERElUSU9OUykpOworCX0KKwkKKy8vCS8qKgorLy8JICogCisvLwkgKiBAcGFyYW0gYXNwZWN0CisvLwkgKiBAcmV0dXJuIEFjdGlvbiB0byBiZSBhZGRlZCB0byBwb3B1cCBtZW51CisvLwkgKi8KKy8vcHJpdmF0ZSBBY3Rpb24gYWN0aW9uQXNwZWN0RGlzcGxheShJU2ltdWxhdGlvbiBzaW0sZmluYWwgQXNwZWN0IGFzcGVjdCkgeworLy8JIAorLy8JICBBY3Rpb24gYWN0aW9uID0gbmV3IEFjdGlvbigpIHsKKy8vCQkJcHVibGljIHZvaWQgcnVuKCkgewkJCQkJCQkJCisvLwkJCQlnZWkuc2V0QXNwZWN0VG9EaXNwbGF5KGNvbnRlbnRQcm92aWRlci5nZXRDdXJyZW50U2ltdWxhdGlvbigpLGFzcGVjdCk7CQkJCQorLy8JCQl9CisvLwkJfTsKKy8vCQlTdHJpbmcgdGVtcGxhdGUgPSBNZXNzYWdlcy5nZXRTdHJpbmcoIkdFVmlldy4yMiIpOy8vJE5PTi1OTFMtMSQKKy8vCQlhY3Rpb24uc2V0VGV4dChTdHJpbmcuZm9ybWF0KHRlbXBsYXRlLCBhc3BlY3QuZ2V0TmFtZSgpICkpOyAKKy8vCQlhY3Rpb24uc2V0Q2hlY2tlZChmYWxzZSk7CisvLwkJaWYgKHNpbSAhPSBudWxsKSB7CisvLwkJCWlmICggZ2VpLmdldEFzcGVjdFRvRGlzcGxheShzaW0pPT1hc3BlY3QpCisvLwkJCQlhY3Rpb24uc2V0Q2hlY2tlZCh0cnVlKTsKKy8vCQl9IGVsc2UgeworLy8JCQlpZiAoZ2VpLmdldERlZmF1bHRBc3BlY3QoKT09YXNwZWN0KSAJCQorLy8JCQkJYWN0aW9uLnNldENoZWNrZWQodHJ1ZSk7CisvLwkJfQorLy8JCQkKKy8vCSAgcmV0dXJuIGFjdGlvbjsKKy8vCX0JCisgICAKKwkKKwlAU3VwcHJlc3NXYXJuaW5ncygidW51c2VkIikgLy8kTk9OLU5MUy0xJAorCXByaXZhdGUgdm9pZCBob29rRG91YmxlQ2xpY2tBY3Rpb24oKSB7CisJCXZpZXdlci5hZGREb3VibGVDbGlja0xpc3RlbmVyKG5ldyBJRG91YmxlQ2xpY2tMaXN0ZW5lcigpIHsKKwkJCXB1YmxpYyB2b2lkIGRvdWJsZUNsaWNrKERvdWJsZUNsaWNrRXZlbnQgZXZlbnQpIHsKKwkJCQlkb3VibGVDbGlja0FjdGlvbi5ydW4oKTsKKwkJCX0KKwkJfSk7CisJfQorCQorCisKKworCit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLmdlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL2dlL3ZpZXdzL0dFVmlld0NvbnRlbnRQcm92aWRlci5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLmdlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL2dlL3ZpZXdzL0dFVmlld0NvbnRlbnRQcm92aWRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjllYTI4YzMKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkuZ2Uvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvZ2Uvdmlld3MvR0VWaWV3Q29udGVudFByb3ZpZGVyLmphdmEKQEAgLTAsMCArMSwyNTYgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS51aS5nZS52aWV3czsKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLyAKK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OworaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU3RydWN0dXJlZENvbnRlbnRQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTdHJ1Y3R1cmVkU2VsZWN0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuTGlzdFZpZXdlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlNlbGVjdGlvbkNoYW5nZWRFdmVudDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlN0cnVjdHVyZWRTZWxlY3Rpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5WaWV3ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5ub2Rlcy5pbXBsLlJlZ2lvbkltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5qb2JzLnNpbXVsYXRpb24uSVNpbXVsYXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5qb2JzLnNpbXVsYXRpb24uSVNpbXVsYXRpb25NYW5hZ2VyTGlzdGVuZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5qb2JzLnNpbXVsYXRpb24uU2ltdWxhdGlvbk1hbmFnZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5qb2JzLnNpbXVsYXRpb24uU2ltdWxhdGlvbk1hbmFnZXJFdmVudDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnVpLmdlLkdFSW50ZXJmYWNlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udWkuZ2UuR0VMb2c7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS51aS52aWV3cy5nZW9ncmFwaGljLm1hcC5HZW9ncmFwaGljU2VsZWN0aW9uRWxlbWVudHM7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuSVNlbGVjdGlvbkxpc3RlbmVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2hQYXJ0OworCisvKioqKioqKioqKioqIEdFVmlld0NvbnRlbnRQcm92aWRlciAqKioqKioqKioqKi8KKy8qCisgKiBUaGUgY29udGVudCBwcm92aWRlciBjbGFzcyBpcyByZXNwb25zaWJsZSBmb3IKKyAqIHByb3ZpZGluZyBvYmplY3RzIHRvIHRoZSB2aWV3LiBJdCBjYW4gd3JhcAorICogZXhpc3Rpbmcgb2JqZWN0cyBpbiBhZGFwdGVycyBvciBzaW1wbHkgcmV0dXJuCisgKiBvYmplY3RzIGFzLWlzLiBUaGVzZSBvYmplY3RzIG1heSBiZSBzZW5zaXRpdmUKKyAqIHRvIHRoZSBjdXJyZW50IGlucHV0IG9mIHRoZSB2aWV3LCBvciBpZ25vcmUKKyAqIGl0IGFuZCBhbHdheXMgc2hvdyB0aGUgc2FtZSBjb250ZW50IAorICogKGxpa2UgVGFzayBMaXN0LCBmb3IgZXhhbXBsZSkuCisgKi8KKyAKK3B1YmxpYyBjbGFzcyBHRVZpZXdDb250ZW50UHJvdmlkZXIgCisgICAgICBpbXBsZW1lbnRzIElTdHJ1Y3R1cmVkQ29udGVudFByb3ZpZGVyLCAKKyAgICAgIElTaW11bGF0aW9uTWFuYWdlckxpc3RlbmVyLCBJU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyLAorICAgICAgSVNlbGVjdGlvbkxpc3RlbmVyIHsKKwkKKwkvKioKKwkgKiBBIExpc3RWaWV3ZXIgdGhhdCB3aWxsIGxpc3Qgc2ltdWxhdGlvbnMgdGhhdCB3ZSAKKwkgKiBjYW4gd2F0Y2guIAorCSAqLworCXByaXZhdGUgTGlzdFZpZXdlciB2aWV3ZXI7CisJLyoqCisJICogVGhpcyBpcyB0aGUgc2VsZWN0ZWQgU2ltdWxhdGlvbiB3aGljaCB3aWxsIGJlIHVzZWQgCisJICogZm9yIGFjdGlvbnMgaW4gdGhlIGNvbnRleHQgbWVudS4KKwkgKi8KKwlwcml2YXRlIElTaW11bGF0aW9uIGN1cnJlbnRTaW11bGF0aW9uID0gbnVsbDsKKwlwcml2YXRlIFNpbXVsYXRpb25NYW5hZ2VyIHNpbXVsYXRpb25NYW5hZ2VyID0gbnVsbDsKKwkvKioKKwkgKiB0aGUgaW50ZXJmYWNlIHRvIHRoZSByZXN0IG9mIEdFIGludGVyZmFjZSBjb2RlCisJICovCisJcHJpdmF0ZSBHRUludGVyZmFjZSBnZWkgPSBudWxsOworCS8qKiAKKwkgKiAgY29uc3RydWN0b3IKKwkgKgorCSAqIEBwYXJhbSBnZWkgIFJlZmVyZW5jZSB0byB0aGUgR0UgSW50ZXJmYWNlIG9iamVjdC4KKwkgKi8KKwlwdWJsaWMgR0VWaWV3Q29udGVudFByb3ZpZGVyKEdFSW50ZXJmYWNlIGdlaSkgeworCQl0aGlzLmdlaSA9IGdlaTsKKwl9CisJCisJLyoqCisJICogVGhpcyBpcyBnaXZlbiBjb250cm9sIHdoZW4gdGhlIGlucHV0IHBhcmVudCBjaGFuZ2VzLgorCSAqIEluIG91ciBjYXNlLCBTaW11bGF0aW9uTWFuYWdlciBpcyB0aGUgcGFyZW50KE1vZGVsKSAKKwkgKiBhbmQgaXQgbmV2ZXIgY2hhbmdlcyBhZnRlciB0aGUgaW5pdGlhbCBzdGFydHVwLiAKKwkgKiBAcGFyYW0gdiAgVmlld2VyIHJlcG9ydGluZyBjaGFuZ2UKKwkgKiBAcGFyYW0gb2xkSW5wdXQgIG9sZCBTaW11bGF0aW9uTWFuYWdlciBvciBudWxsCisJICogQHBhcmFtIG5ld0lucHV0ICBuZXcgaW5wdXQgc291cmNlKG5ldyBTaW11bGF0aW9uTWFuYWdlcikKKwkgKi8KKwkKKwlwdWJsaWMgdm9pZCBpbnB1dENoYW5nZWQoVmlld2VyIHYsIE9iamVjdCBvbGRJbnB1dCwgT2JqZWN0IG5ld0lucHV0KSB7CisJCUdFTG9nLmRlYnVnKHRoaXMsImlucHV0Q2hhbmdlZDogb2xkPSIrb2xkSW5wdXQrIiBuZXc9IituZXdJbnB1dCk7CisgICAgICAgIHRoaXMudmlld2VyID0gKExpc3RWaWV3ZXIpdjsKKwkJaWYgKG9sZElucHV0ICE9IG51bGwpIHsKKwkJCS8vIFllcworCQkJKChTaW11bGF0aW9uTWFuYWdlcilvbGRJbnB1dCkucmVtb3ZlTGlzdGVuZXIodGhpcyk7CisJCX0KKwkJc2ltdWxhdGlvbk1hbmFnZXIgPSAoU2ltdWxhdGlvbk1hbmFnZXIpIG5ld0lucHV0OworCisJCS8vIERvIHdlIGhhdmUgYSBuZXcgc2ltdWxhdGlvbiBtYW5hZ2VyIHRvIGxpc3RlbiB0bz8KKwkJaWYgKHNpbXVsYXRpb25NYW5hZ2VyICE9IG51bGwpIHsKKwkJCS8vIFllcworCQkJc2ltdWxhdGlvbk1hbmFnZXIuYWRkU2ltdWxhdGlvbk1hbmFnZXJMaXN0ZW5lcih0aGlzKTsKKwkJfQorCQl2aWV3ZXIuYWRkU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyKHRoaXMpOworCQkKKwkJLy8gIHJlZ2lzdGVyIG5ldyBpbnB1dCBtb2RlbAorCX0KKwkKKwkvKioKKwkgKiBDbGVhbnVwIHdoZW4gdXNlciB3YW50cyB0byB0ZXJtaW5hdGUgdGhlIHZpZXcKKwkgKi8KKwlwdWJsaWMgdm9pZCBkaXNwb3NlKCkgeworCQlHRUxvZy5kZWJ1Zyh0aGlzLmdldENsYXNzKCksImRpc3Bvc2UoKTogIik7CisJCWlmIChzaW11bGF0aW9uTWFuYWdlciAhPSBudWxsKQorCQkgIHNpbXVsYXRpb25NYW5hZ2VyLnJlbW92ZUxpc3RlbmVyKHRoaXMpOworCQlpZiAodmlld2VyICE9IG51bGwpCisJCSAgdmlld2VyLnJlbW92ZVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcih0aGlzKTsKKwl9CisJLyoqCisJICogUHJvdmlkZSB0aGUgZGF0YSB0aGF0IHdpbGwgYmUgZGlzcGxheWVkIGluIGEgbGlzdAorCSAqIAorCSAqIEBwYXJhbSBwYXJlbnQgIFNldCB0byByZWZlciB0byB0aGUgU2ltdWxhdGlvbk1hbmFnZXIgc2luZ2xldG9uCisJICovCisJcHVibGljIE9iamVjdFtdIGdldEVsZW1lbnRzKE9iamVjdCBwYXJlbnQpIHsKKwkJLy9HRUxvZy5kZWJ1Zyh0aGlzLCJwYXJlbnQ9IitwYXJlbnQpOworCQlTaW11bGF0aW9uTWFuYWdlciBzbSA9IChTaW11bGF0aW9uTWFuYWdlcilwYXJlbnQ7CisJCUxpc3Q8SVNpbXVsYXRpb24+IHNpbXVsYXRpb25zID0gc20uZ2V0QWN0aXZlU2ltdWxhdGlvbnMoKTsKKwkJaW50IG4gPSBzaW11bGF0aW9ucy5zaXplKCk7CisJCU9iamVjdFtdIHJldHVybkFycmF5ID0gbmV3IE9iamVjdFtuXTsKKwkJZm9yIChpbnQgaT0wO2k8bjtpKyspIHsKKwkJCUlTaW11bGF0aW9uIHNpbXVsYXRpb24gPSBzaW11bGF0aW9ucy5nZXQoaSk7CisJCQkvL1N0cmluZyBuYW1lID1zaW11bGF0aW9uLmdldE5hbWUoKTsKKwkJCS8vU2NlbmFyaW8gc2NlbmFyaW8gPSBzaW11bGF0aW9uLmdldFNjZW5hcmlvKCk7CisJCQkKKwkJCS8vR0VMb2cuZGVidWcodGhpcywiIitpKyIgIituYW1lKTsKKwkJCXJldHVybkFycmF5W2ldID0gc2ltdWxhdGlvbjsJCQkJCisJCX0KKwkJLy8gaWYgb25seSBvbmUgc2ltdWxhdGlvbiAtIGFzc3VtZSBzZWxlY3RlZAorCQlpZiAobj09MSAmJiBjdXJyZW50U2ltdWxhdGlvbiA9PSBudWxsKQorCQkJY3VycmVudFNpbXVsYXRpb24gPSBzaW11bGF0aW9ucy5nZXQoMCk7CisJCQorCQlyZXR1cm4gcmV0dXJuQXJyYXk7CisJfQorCQorCS8qKgorCSAqIFdlIGdldCBoZXJlIGJlY2F1c2Ugd2UgYXJlIGxpc3RlbmluZyBmb3IgU2ltdWxhdGlvbkNoYW5nZWQgCisJICogZXZlbnRzIGFuZCBvbmUgb2NjdXJlZC4gCisJICogCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmpvYnMuc2ltdWxhdGlvbi5JU2ltdWxhdGlvbk1hbmFnZXJMaXN0ZW5lciNzaW11bGF0aW9uc0NoYW5nZWQob3JnLmVjbGlwc2Uuc3RlbS5qb2JzLnNpbXVsYXRpb24uU2ltdWxhdGlvbk1hbmFnZXJFdmVudCkKKwkgKi8KKwlwdWJsaWMgdm9pZCBzaW11bGF0aW9uc0NoYW5nZWQoU2ltdWxhdGlvbk1hbmFnZXJFdmVudCBldmVudCkgeworCQlHRUxvZy5kZWJ1Zyh0aGlzLmdldENsYXNzKCksInNpbXVsYXRpb25zQ2hhbmdlOiAiKTsKKworCisJCXZpZXdlci5yZW1vdmUoZXZlbnQuZ2V0U2ltdWxhdGlvbnNSZW1vdmVkKCkpOworCQl2aWV3ZXIuYWRkKGV2ZW50LmdldFNpbXVsYXRpb25zQWRkZWQoKSk7CisJCWlmICh0aGlzLmN1cnJlbnRTaW11bGF0aW9uID09IG51bGwgJiYgCisJCQkJZXZlbnQuZ2V0U2ltdWxhdGlvbnNBZGRlZCgpLmxlbmd0aCA+IDApICB7CisJCQljdXJyZW50U2ltdWxhdGlvbiA9IGV2ZW50LmdldFNpbXVsYXRpb25zQWRkZWQoKVswXTsKKwkJCUdFTG9nLmRlYnVnKHRoaXMsImN1cnJlbnRTaW11bGF0aW9uOiAiKworCQkJCQljdXJyZW50U2ltdWxhdGlvbi5nZXROYW1lKCkpOworCQl9IAorCQlpZiAodGhpcy5jdXJyZW50U2ltdWxhdGlvbiAhPSBudWxsICYmICAKKwkJCQlldmVudC5nZXRTaW11bGF0aW9uc1JlbW92ZWQoKS5sZW5ndGggPiAwKSAgeworCQkJZm9yKElTaW11bGF0aW9uIHNpbTpldmVudC5nZXRTaW11bGF0aW9uc1JlbW92ZWQoKSkgeworCQkJICAgIGlmIChjdXJyZW50U2ltdWxhdGlvbiA9PSBzaW0pIHsKKwkJCSAgICAJY3VycmVudFNpbXVsYXRpb24gPSBudWxsOworCQkJICAgICAgICBHRUxvZy5kZWJ1Zyh0aGlzLCJjdXJyZW50U2ltdWxhdGlvbiBpcyBub3cgbnVsbCAiKTsKKwkJCSAgICB9CisJICAgIAl9CQkJCisJCX0gCisJfQkgLy8gc2ltdWxhdGlvbnNDaGFuZ2VkCisJLyoqCisJICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIHdoZW5ldmVyIEFOWVRISU5HIGlzIHNlbGVjdGVkIGluIHRoZSBFY2xpcHNlCisJICogd29ya2JlbmNoLiBJdCdzIGpvYiBpcyB0byBmaWx0ZXIgb3V0IHNlbGVjdGlvbnMgb2YgSVNpbXVsYXRpb24KKwkgKiBpbnN0YW5jZXMgc2VlIGlmIGl0IGlzIG9uZSB3ZSBhcmUgd2FpdGluZyBmb3IKKwkgKiAKKyAgICAgKiByZXF1aXJlZCBtZXRob2QgZm9yIElTZWxlY3Rpb25MaXN0ZW5lciAgCisJICogCisJICogQHNlZSBvcmcuZWNsaXBzZS51aS5JU2VsZWN0aW9uTGlzdGVuZXIjc2VsZWN0aW9uQ2hhbmdlZChvcmcuZWNsaXBzZS51aS5JV29ya2JlbmNoUGFydCwKKwkgKiAgICAgIG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvbikKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZWxlY3Rpb25DaGFuZ2VkKElXb3JrYmVuY2hQYXJ0IHBhcnQsIElTZWxlY3Rpb24gc2VsZWN0KSB7CisJCWlmICghIChzZWxlY3QgaW5zdGFuY2VvZiBTdHJ1Y3R1cmVkU2VsZWN0aW9uKSApIAorCQkJcmV0dXJuOwkKKwkJLy8gVmVyaWZ5IGlmIHdlIGFyZSBpbnRlcmVzdGVkIGluIHRoaXMgc2VsZWN0aW9uIGV2ZW50CisJCU9iamVjdFtdIGVsZW1lbnRzID0gKChTdHJ1Y3R1cmVkU2VsZWN0aW9uKXNlbGVjdCkudG9BcnJheSgpOworCQlpZiAoIChlbGVtZW50cy5sZW5ndGggIT0gMikgfHwgCisJCSAgICghIChlbGVtZW50c1sxXSBpbnN0YW5jZW9mIEdlb2dyYXBoaWNTZWxlY3Rpb25FbGVtZW50cykpKSB7ICAKKwkJCQlyZXR1cm47CisJCX0KKwkJUmVnaW9uSW1wbCByZWdpb24gPSAoUmVnaW9uSW1wbCllbGVtZW50c1swXTsKKwkJR2VvZ3JhcGhpY1NlbGVjdGlvbkVsZW1lbnRzIGdzZSA9IAorCQkJKEdlb2dyYXBoaWNTZWxlY3Rpb25FbGVtZW50cyllbGVtZW50c1sxXTsJCQorCQkKKwkJLy8gaWYgd2UgZ2V0IGhlcmUgaXQgaXMgYSBtYXAgc2VsZWN0aW9uIGJ5IHNvbWVib2R5CisJCUdFTG9nLmRlYnVnKHRoaXMsIk1hcFZpZXcgU2VsZWN0aW9uOiAiK3JlZ2lvbik7CisJCWdlaS5kaXNwbGF5U2VsZWN0aW9uKHJlZ2lvbixnc2UpOworCX0KKwkKKwkvKioKKwkgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgd2hlbmV2ZXIgQU5ZVEhJTkcgaXMgc2VsZWN0ZWQgaW4gdGhlIHZpZXdlci4KKwkgKiBJdCdzIGpvYiBpcyB0byBmaWx0ZXIgb3V0IHNlbGVjdGlvbnMgb2YgSVNpbXVsYXRpb24KKwkgKiBpbnN0YW5jZXMgYW5kIG1hcmsgdGhlIFNpbXVsYXRpb24gdGhhdCB3ZSB3YW50IHRvIGludGVyZmFjZSB0by4KKwkgKiAKKwkgKiAKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnVpLklTZWxlY3Rpb25MaXN0ZW5lciNzZWxlY3Rpb25DaGFuZ2VkKG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2hQYXJ0LAorCSAqICAgICAgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uKQorCSAqLworCXB1YmxpYyB2b2lkIHNlbGVjdGlvbkNoYW5nZWQoU2VsZWN0aW9uQ2hhbmdlZEV2ZW50IGV2ZW50KSB7CisJCUdFTG9nLmRlYnVnKHRoaXMsInNlbGVjdGlvbkNoYW5nZTogIitldmVudCk7CisJCS8vIElzIHRoaXMgc2VsZWN0aW9uIGNoYW5nZWQgZXZlbnQgY29taW5nIGZyb20gb3VyIHZpZXc/CisJCWlmIChldmVudC5nZXRTb3VyY2UoKSA9PSB2aWV3ZXIpIHsKKwkJCUlTZWxlY3Rpb24gc2VsZWN0aW9uID0gZXZlbnQuZ2V0U2VsZWN0aW9uKCk7CisJCQkvLyBUaGlzIHdpbGwgaG9sZCB0aGUgbmV3IHNpbXVsYXRpb25zIHRoYXQgaGF2ZSBiZWVuIHNlbGVjdGVkCisJCQlmaW5hbCBMaXN0PElTaW11bGF0aW9uPiB0ZW1wID0gbmV3IEFycmF5TGlzdDxJU2ltdWxhdGlvbj4oKTsKKworCQkJLy8gSXMgaXQgYSBzdHJ1Y3R1cmVkIHNlbGVjdGlvbj8KKwkJCWlmIChldmVudC5nZXRTZWxlY3Rpb24oKSBpbnN0YW5jZW9mIElTdHJ1Y3R1cmVkU2VsZWN0aW9uKSB7CisJCQkJLy8gWWVzCisJCQkJZmluYWwgTGlzdCBsaXN0ID0gKChJU3RydWN0dXJlZFNlbGVjdGlvbikgc2VsZWN0aW9uKQorCQkJCQkJLnRvTGlzdCgpOworCisJCQkJLy8gR28gdGhyb3VnaCBldmVyeXRoaW5nIGluIHRoZSBsaXN0IG9mIHRoaW5ncyB0aGF0IHdlcmUKKwkJCQkvLyBzZWxlY3RlZCBhbmQgcGljayBvdXQgdGhlIG9uZXMgdGhhdCBhcmUgSVNpbXVsYXRpb25zLgorCQkJCWZvciAoZmluYWwgSXRlcmF0b3Igc2VsZWN0aW9uSXRlciA9IGxpc3QuaXRlcmF0b3IoKTsgc2VsZWN0aW9uSXRlcgorCQkJCQkJLmhhc05leHQoKTspIHsKKwkJCQkJZmluYWwgT2JqZWN0IG9iaiA9IHNlbGVjdGlvbkl0ZXIubmV4dCgpOworCQkJCQlpZiAob2JqIGluc3RhbmNlb2YgSVNpbXVsYXRpb24pIHsKKwkJCQkJCXRlbXAuYWRkKChJU2ltdWxhdGlvbikgb2JqKTsKKwkJCQkJCS8vR0VWaWV3LmxvZyh0aGlzLmdldENsYXNzKCksb2JqLnRvU3RyaW5nKCkpOworCQkJCQl9CisJCQkJfSAvLyBmb3IgZWFjaCBzZWxlY3RlZCBpdGVtCisJCQl9IC8vIGlmIHN0cnVjdHVyZWQgc2VsZWN0aW9uCisKKwkJCS8vIERpZCB3ZSBmaW5kIGFueSBuZXcgc2ltdWxhdGlvbnMgdGhhdCB3ZXJlIHNlbGVjdGVkPworCQkJaWYgKHRlbXAuc2l6ZSgpID4gMCkgeworCQkJCS8vIFllcyBVc2UgdGhlIDFzdCBvbmUgCisJCQkJLy9JU2ltdWxhdGlvbiBvbGQgPSBjdXJyZW50U2ltdWxhdGlvbjsKKwkJCQljdXJyZW50U2ltdWxhdGlvbiA9IHRlbXAuZ2V0KDApOworCQkJCS8vR0VMb2cuZGVidWcodGhpcy5nZXRDbGFzcygpLCJTZWxlY3RlZD0iK2N1cnJlbnRTaW11bGF0aW9uLnRvU3RyaW5nKCkpOworCQkJCUdFVmlld0xhYmVsUHJvdmlkZXIgbHAgPShHRVZpZXdMYWJlbFByb3ZpZGVyKXZpZXdlci5nZXRMYWJlbFByb3ZpZGVyKCk7CisJCQkJCisJCQkJbHAuc2V0U2VsZWN0ZWQoY3VycmVudFNpbXVsYXRpb24pOworCQkJfSAvLyBpZiBhbnkgbmV3IHNpbXVsYXRpb25zIHNlbGVjdGVkCisJCX0gLy8gaWYgc2VsZWN0aW9uIGNoYW5nZWQgZXZlbnQgY29taW5nIGZyb20gb3VyIHZpZXc/CisJfSAvLyBzZWxlY3Rpb25DaGFuZ2VkCisKKwkvKioKKwkgKiBzdXBwbHkgdGhlIGN1cnJlbnRseSBzZWxlY3RlZCBzaW11bGF0aW9uICAoaWYgYW55KQorCSAqIEdFVmlldyBkb2VzIG5vdCBzYXZlIHRoZSBjdXJyZW50IFNpbXVsYXRpb24gdGhhdCAKKwkgKiB3YXMgc2VsZWN0ZWQgYnkgdGhlIHVzZXIuICBUaGlzIG1ldGhvZCBpcyB1c2VkIHRvIGdldCBpdC4KKwkgKiAKKwkgKiBAcmV0dXJuIHRoZSBjdXJyZW50U2ltdWxhdGlvbgorCSAqLworCXB1YmxpYyBJU2ltdWxhdGlvbiBnZXRDdXJyZW50U2ltdWxhdGlvbigpIHsKKwkJcmV0dXJuIGN1cnJlbnRTaW11bGF0aW9uOworCX0KKworCQorCit9CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkuZ2Uvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvZ2Uvdmlld3MvR0VWaWV3TGFiZWxQcm92aWRlci5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLmdlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL2dlL3ZpZXdzL0dFVmlld0xhYmVsUHJvdmlkZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MGNhMWNjCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLmdlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL2dlL3ZpZXdzL0dFVmlld0xhYmVsUHJvdmlkZXIuamF2YQpAQCAtMCwwICsxLDExOCBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnVpLmdlLnZpZXdzOworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovIAoraW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSUJhc2VMYWJlbFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuTGFiZWxQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLkxhYmVsUHJvdmlkZXJDaGFuZ2VkRXZlbnQ7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5qb2JzLnNpbXVsYXRpb24uSVNpbXVsYXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS51aS5nZS5HRUludGVyZmFjZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnVpLmdlLkdFTG9nOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ncmFwaGljcy5JbWFnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5JU2hhcmVkSW1hZ2VzOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLlBsYXRmb3JtVUk7CisKKworLyoqCisgKiBwcm92aWRlIHRleHQgYW5kIGltYWdlIGxhYmVscyBmb3IgdGhlIGxpc3QgCisgKiAKKyAqIFdlIGluc2VydCBzb21lIGluZm9ybWF0aW9uIGFib3V0IHRoZSBzaW11bGF0aW9uIGlkIAorICogYW5kIHdoZXRoZXIgaXQgaXMgc2xlY3RlZAorICogd2UgY291bGQgY2hhbmdlIHRoZSBnZXRJbWFnZSB0byByZXR1cm4gYSAKKyAqIGRpZmZlcmVudCBpbWFnZSBpZiBHb29nbGVFYXJ0aCBpcyBhY3RpdmUgb3IgaW5hY3RpdmUgCisgKiBmb3IgdGhlIHNwZWNpZmllZCBzaW11bGF0aW9uIAorICoKKyAqLworcHVibGljIGNsYXNzIEdFVmlld0xhYmVsUHJvdmlkZXIgZXh0ZW5kcyBMYWJlbFByb3ZpZGVyIGltcGxlbWVudHMgSUJhc2VMYWJlbFByb3ZpZGVyIHsKKwkKKwkvKioKKwkgKiBUaGlzIGlzIHRoZSBjbGFzcyB0aGF0IGhhbmRsZXMgdGhlIGludGVyZmFjZQorCSAqICBiZXR3ZWVuIG91ciB2aWV3IGFuZCBHb29nbGVFYXJ0aAorCSAqLworCQorCQorCXByaXZhdGUgR0VJbnRlcmZhY2UgZ2VpID0gbnVsbDsKKwkKKwkJCisJCisJLyoqCisgICAgICogR2V0IHRleHQgdG8gYmUgZGlzcGxheWVkCisgICAgICogCisgICAgICogQHBhcmFtIG9iaiBpbnN0YW5jZSBiZWluZyBkaXNwbGF5ZWQKKyAgICAgKi8KKwlwdWJsaWMgU3RyaW5nIGdldFRleHQoT2JqZWN0IG9iaikgeworICAgICAgICAvL0dFTG9nLmRlYnVnKHRoaXMsImdldFRleHQ6IG9iaj0iK29iaik7CisgICAgICAgIFN0cmluZyBmbGFnID0gIiI7CisgICAgICAgIFN0cmluZyB0ZW1wbGF0ZSA9ICIlcyAlcyAlcyAlcyI7CisgICAgICAgIFN0cmluZyB0ZXh0ID0gbnVsbDsKKyAgICAgICAgdHJ5IHsKKwkJCWlmIChvYmogIT0gbnVsbCkgeworCQkJCWlmIChvYmogaW5zdGFuY2VvZiBJU2ltdWxhdGlvbikgeworCQkJCQlJU2ltdWxhdGlvbiBzaW0gPSAoSVNpbXVsYXRpb24pb2JqOworCQkJCQkKKwkJCQkJU3RyaW5nICBjeWNsZSA9ICIiOworCQkJCQlTdHJpbmcgbmFtZSA9IEdFSW50ZXJmYWNlLmdldFNpbXVsYXRpb25JZChzaW0pOworCQkJCQlpZiAoZ2VpLmlzQWN0aXZlKHNpbSkpIHsKKwkJCQkJCWN5Y2xlID0gIlsiK0ludGVnZXIudG9TdHJpbmcoZ2VpLmdldEN5Y2xlKHNpbSkpKyJdIjsKKwkJCQkJCWZsYWcgPSAiKiI7CisJCQkJCX0KKwkJCQkJaWYgKGdlaS5pc0FjdGl2ZVZpZXcoc2ltKSkgeworCQkJCQkKKwkJCQkJCWZsYWcgPSAiKkdFIjsKKwkJCQkJfQorCQkJCQl0ZXh0ID0gU3RyaW5nLmZvcm1hdCh0ZW1wbGF0ZSwKKwkJCQkJCQlmbGFnLCBuYW1lLCBjeWNsZSwgc2ltLnRvU3RyaW5nKCkpOworCQkJCX0gZWxzZSB7CisJCQkJCXRleHQgPSAiIitvYmo7ICAvLyBzbyBudWxsIHdpbGwgZGlzcGxheQorCQkJCX0KKwkJCX0gZWxzZSB7CisJCQkJdGV4dCA9ICJudWxsIjsgIC8vIGZvciBkZWJ1ZworCQkJfQorCQl9IGNhdGNoIChSdW50aW1lRXhjZXB0aW9uIGUpIHsJCQkKKwkJCUdFTG9nLmVycm9yKCJGYWlsdXJlIixlKTsKKwkJfQorICAgICAgICAvL0dFTG9nLmRlYnVnKHRoaXMsInRleHQ9Iit0ZXh0KTsgCisgICAgICAgcmV0dXJuIHRleHQ7CisJfQorCS8qKgorICAgICAqIEdldCBJbWFnZSB0byBiZSBkaXNwbGF5ZWQKKyAgICAgKiBUaGlzIGFwcHBlYXJzIHRvIG5vdCBiZSBjYWxsZWQuICBQZXJoYXBzIGl0IGlzIG5vdCAKKyAgICAgKiBzdXBwb3J0ZWQgZm9yIExpc3RWaWV3ZXIKKyAgICAgKiAKKyAgICAgKiBAcGFyYW0gb2JqIGluc3RhbmNlIGJlaW5nIGRpc3BsYXllZAorICAgICAqLworCXB1YmxpYyBJbWFnZSBnZXRJbWFnZShPYmplY3Qgb2JqKSB7CisgICAgICAgIEdFTG9nLmRlYnVnKHRoaXMuZ2V0Q2xhc3MoKSwiZ2V0SW1hZ2U6IG9iaj0iK29iai50b1N0cmluZygpKTsKKwkJcmV0dXJuIFBsYXRmb3JtVUkuZ2V0V29ya2JlbmNoKCkuCisJCQkJZ2V0U2hhcmVkSW1hZ2VzKCkuZ2V0SW1hZ2UoSVNoYXJlZEltYWdlcy5JTUdfT0JKX0VMRU1FTlQpOworCX0KKwkvKioKKwkgKiBAcGFyYW0gZ2VpIHJlZmVyZW5jZSB0byBHRSBpbnRlcmZhY2UgY2xhc3MKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRHRUkoR0VJbnRlcmZhY2UgZ2VpKSB7CisJCXRoaXMuZ2VpID0gZ2VpOworCX0KKwkvKioKKwkgKiBTZXQgdGhlIHNlbGVjdGVkIHNpbXVsYXRpb24gCisJICogQ2FsbGVkIGJ5IEdFSW50ZXJmYWNlIHRvIHByb3ZpZGUgdGhpcyBuZWVkZWQgaW5mbworCSAqIAorCSAqIEBwYXJhbSBzZWxlY3Rpb24KKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRTZWxlY3RlZChJU2ltdWxhdGlvbiBzZWxlY3Rpb24pIHsKKwkJR0VMb2cuZGVidWcodGhpcy5nZXRDbGFzcygpLCJzZXRTZWxlY3RlZCIpOworCQkJCQorCQlMYWJlbFByb3ZpZGVyQ2hhbmdlZEV2ZW50IGV2ZW50ID0gbmV3IExhYmVsUHJvdmlkZXJDaGFuZ2VkRXZlbnQodGhpcyk7CisJCXRoaXMuZmlyZUxhYmVsUHJvdmlkZXJDaGFuZ2VkKGV2ZW50KTsKKwl9Cit9CisKKworCisKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5nZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9nZS92aWV3cy9NZXNzYWdlcy5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLmdlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL2dlL3ZpZXdzL01lc3NhZ2VzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTZjODMyMAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5nZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9nZS92aWV3cy9NZXNzYWdlcy5qYXZhCkBAIC0wLDAgKzEsNDIgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS51aS5nZS52aWV3czsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqYXZhLnV0aWwuTWlzc2luZ1Jlc291cmNlRXhjZXB0aW9uOworaW1wb3J0IGphdmEudXRpbC5SZXNvdXJjZUJ1bmRsZTsKKy8qKgorICogQ2xhc3MgZ2VuZXJhdGVkIGJ5IHRoZSBleHRlcm5hbGl6ZVN0cmluZ3Mgb3B0aW9uLgorICogCisgKiAKKyAqCisgKi8KK3B1YmxpYyBjbGFzcyBNZXNzYWdlcyB7CisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEJVTkRMRV9OQU1FID0gIm9yZy5lY2xpcHNlLnN0ZW0udWkuZ2Uudmlld3MubWVzc2FnZXMiOyAvLyROT04tTkxTLTEkCisKKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBSZXNvdXJjZUJ1bmRsZSBSRVNPVVJDRV9CVU5ETEUgPSBSZXNvdXJjZUJ1bmRsZQorCQkJLmdldEJ1bmRsZShCVU5ETEVfTkFNRSk7CisKKwlwcml2YXRlIE1lc3NhZ2VzKCkgeworCX0KKworCS8qKgorCSAqIEBwYXJhbSBrZXkKKwkgKiBAcmV0dXJuIFN0cmluZyBhc3NpZ25lZCB0byB0aGUgc3BlY2lmaWVkIGtleSBpbiBwcm9wZXJ0aWVzIGZpbGUKKwkgKi8KKwlwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRTdHJpbmcoU3RyaW5nIGtleSkgeworCQl0cnkgeworCQkJcmV0dXJuIFJFU09VUkNFX0JVTkRMRS5nZXRTdHJpbmcoa2V5KTsKKwkJfSBjYXRjaCAoTWlzc2luZ1Jlc291cmNlRXhjZXB0aW9uIGUpIHsKKwkJCXJldHVybiAnIScgKyBrZXkgKyAnISc7CisJCX0KKwl9Cit9CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkuZ2Uvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvZ2Uvdmlld3MvUHJlZmVyZW5jZUluaXRpYWxpemVyLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkuZ2Uvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvZ2Uvdmlld3MvUHJlZmVyZW5jZUluaXRpYWxpemVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWVjOGM4NQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5nZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9nZS92aWV3cy9QcmVmZXJlbmNlSW5pdGlhbGl6ZXIuamF2YQpAQCAtMCwwICsxLDc3IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0udWkuZ2Uudmlld3M7CisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8gCitpbXBvcnQgamF2YS5pby5GaWxlOworaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUHJlZmVyZW5jZXM7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLnByZWZlcmVuY2VzLkFic3RyYWN0UHJlZmVyZW5jZUluaXRpYWxpemVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udWkuZ2UuQWN0aXZhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udWkuZ2UuR0VMb2c7CisKKworCisvKioKKyAqIENsYXNzIHVzZWQgdG8gaW5pdGlhbGl6ZSBkZWZhdWx0IHByZWZlcmVuY2UgdmFsdWVzLgorICogCisgKiBCZSBzdXJlIHRvIHVwZGF0ZSB3aGF0ZXZlciBkb2N1bWVudGF0aW9uIHRoZXJlIGlzIAorICogdG8gbWF0Y2ggd2hhdCB3ZSBzcGVjaWZ5IGJlbG93LgorICovCitwdWJsaWMgY2xhc3MgUHJlZmVyZW5jZUluaXRpYWxpemVyIGV4dGVuZHMgQWJzdHJhY3RQcmVmZXJlbmNlSW5pdGlhbGl6ZXIgeworCisJLyoKKwkgKiAobm9uLUphdmFkb2MpCisJICogCisJICogQHNlZSBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUucHJlZmVyZW5jZXMuQWJzdHJhY3RQcmVmZXJlbmNlSW5pdGlhbGl6ZXIjaW5pdGlhbGl6ZURlZmF1bHRQcmVmZXJlbmNlcygpCisJICovCisJcHVibGljIHZvaWQgaW5pdGlhbGl6ZURlZmF1bHRQcmVmZXJlbmNlcygpIHsKKwkJUHJlZmVyZW5jZXMgc3RvcmUgPSBBY3RpdmF0b3IuZ2V0RGVmYXVsdCgpCisJCQkJLmdldFBsdWdpblByZWZlcmVuY2VzKCk7CisJCS8vIHNldCBkZWZhdWx0IHRvIE1hbnVhbCBtb2RlCisJCXN0b3JlLnNldERlZmF1bHQoR0VQcmVmZXJlbmNlUGFnZS5QX01FVEhPRCwKKwkJCQlHRVByZWZlcmVuY2VQYWdlLk1fTUFOVUFMX0RJU1BMQVkpOworCisJCVN0cmluZyBkZWZhdWx0Rm9sZGVyID0gZ2V0RGVmYXVsdEZvbGRlcigpOworCQlzdG9yZS5zZXREZWZhdWx0KEdFUHJlZmVyZW5jZVBhZ2UuUF9GT0xERVIsZGVmYXVsdEZvbGRlcik7CisJCXN0b3JlLnNldERlZmF1bHQoR0VQcmVmZXJlbmNlUGFnZS5QX0lOVEVSTkFMX1NFUlZFUix0cnVlKTsKKwkJc3RvcmUuc2V0RGVmYXVsdChHRVByZWZlcmVuY2VQYWdlLlBfU0VSVkVSX0hPU1QsImxvY2FsaG9zdDo4MDgwIik7CisJCXN0b3JlLnNldERlZmF1bHQoR0VQcmVmZXJlbmNlUGFnZS5QX0FTUEVDVCwgIiIpOworCQlzdG9yZS5zZXREZWZhdWx0KEdFUHJlZmVyZW5jZVBhZ2UuUF9XSElDSF9DWUNMRSwxKTsKKwkJc3RvcmUuc2V0RGVmYXVsdChHRVByZWZlcmVuY2VQYWdlLlBfQVVUT19MQVVOQ0gsdHJ1ZSk7CisJCXN0b3JlLnNldERlZmF1bHQoR0VQcmVmZXJlbmNlUGFnZS5QX0FVVE9fTE9HR0lORyx0cnVlKTsKKwkJc3RvcmUuc2V0RGVmYXVsdChHRVByZWZlcmVuY2VQYWdlLlBfQkJPWCxmYWxzZSk7CisJCXN0b3JlLnNldERlZmF1bHQoR0VQcmVmZXJlbmNlUGFnZS5QX0RFQlVHLCBmYWxzZSk7CisJCXN0b3JlLnNldERlZmF1bHQoR0VQcmVmZXJlbmNlUGFnZS5QX1NIT1dfQk9SREVSLCBmYWxzZSk7CisJCXN0b3JlLnNldERlZmF1bHQoR0VQcmVmZXJlbmNlUGFnZS5QX1RFU1QsIGZhbHNlKTsKKwl9CisKKwkvKioKKwkgKiBkZXRlcm1pbmUgdGhlIGRlZmF1bHQgZm9sZGVyCisJICogCisJICovCisJcHJpdmF0ZSBTdHJpbmcgZ2V0RGVmYXVsdEZvbGRlcigpIHsKKwkJU3RyaW5nIGZvbGRlciA9ICIvdG1wL2dlIjsKKwkJRmlsZSBmaWxlID0gbmV3IEZpbGUoZm9sZGVyKTsKKwkJaWYgKGZpbGUuZXhpc3RzKCkgJiYgZmlsZS5pc0RpcmVjdG9yeSgpKSB7CisJCQlyZXR1cm4gZm9sZGVyOworCQl9CQkKKwkJdHJ5IHsKKwkJCUZpbGUgdG1wRmlsZSA9IEZpbGUuY3JlYXRlVGVtcEZpbGUoInRlc3QiLCAiLmttbCIpOworCQkJZm9sZGVyID0gdG1wRmlsZS5nZXRQYXJlbnQoKTsKKwkJCXRtcEZpbGUuZGVsZXRlKCk7CisJCX0gY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKKwkJCUdFTG9nLmVycm9yKCJVbmFibGUgdG8gZ2VuZXJhdGUgS01MIERpc3BsYXlBcmVhIGZpbGUuIiwgZSk7CisJCQlmb2xkZXIgPSBudWxsOworCQl9CisJCQorCQlyZXR1cm4gZm9sZGVyOworCX0KK30KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5nZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9nZS92aWV3cy9tZXNzYWdlcy5wcm9wZXJ0aWVzIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLmdlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL2dlL3ZpZXdzL21lc3NhZ2VzLnByb3BlcnRpZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjUzYmRhMAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5nZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9nZS92aWV3cy9tZXNzYWdlcy5wcm9wZXJ0aWVzCkBAIC0wLDAgKzEsMzMgQEAKK0dFVmlldy4yPVNlbGVjdCBBc3BlY3QgRGlzcGxheQorR0VWaWV3LjM9QXNwZWN0IERpc3BsYXkKK0dFVmlldy40PVNpbXVsYXRpb24gUHJvY2Vzc2luZyBPRkYKK0dFVmlldy41PVNldCBQcm9jZXNzaW5nIE9GRgorR0VWaWV3LjY9VGhpcyB3aWxsIHN0b3AgcHJvY2Vzc2luZyBvZiBTVEVNIGN5Y2xlIHJlc3VsdHMgc28gcmVzdWx0cyBhcmUgc2VudCB0byBHb29nbGVFYXJ0aAorR0VWaWV3Ljc9U2V0IFByb2Nlc3NpbmcgT04KK0dFVmlldy44PVRoaXMgd2lsbCBzdGFydCBwcm9jZXNzaW5nIG9mIFNURU0gY3ljbGUgcmVzdWx0cyBzbyByZXN1bHRzIGFyZSBzZW50IHRvIEdvb2dsZUVhcnRoCitHRVZpZXcuOT1Hb29nbGVFYXJ0aCBTdGFydAorR0VWaWV3LjEwPVN0YXJ0IEdvb2dsZUVhcnRoIGlmIG5vdCBhbHJlYWR5IHN0YXJ0ZWQKK0dFVmlldy45YT1Hb29nbGVFYXJ0aCBSZXN0YXJ0CitHRVZpZXcuMTBhPVJlc3RhcnQgR29vZ2xlRWFydGggd2l0aCBjdXJyZW50IHN0YXR1cworR0VWaWV3LjExPUdvb2dsZUVhcnRoIFJ1bgorR0VWaWV3LjEyPVJ1biBHb29nbGVFYXJ0aCB3aXRoIGV4aXN0aW5nIEtNTCBmaWxlcworR0VWaWV3LjEzPUdvb2dsZUVhcnRoIFN0b3AKK0dFVmlldy4xND1EZWFjdGl2YXRlIHRoZSBjdXJyZW50IEdvb2dsZUVhcnRoIGRpc3BsYXkgb2YgU1RFTSByZXN1bHRzCitHRVZpZXcuMTU9VW5hYmxlIHRvIERpc3BsYXkgTWFwCitHRVZpZXcuMTY9RGlzcGxheSBNYXAKK0dFVmlldy4xNz1UaGlzIHdpbGwgd3JpdGUgS01MIGZvciB0aGUgY3VycmVudCBzaW11bGF0aW9uIHNvIGl0IGNhbiBiZSBkaXNwbGF5ZWQgYnkgR29vZ2xlRWFydGgKK0dFVmlldy4xNW49VW5hYmxlIHRvIERpc3BsYXkgTWFwIGZvciBBZG1pbmlzdHJhdGlvbiBBcmVhCitHRVZpZXcuMTZuPURpc3BsYXkgQWRtaW4gQXJlYQorR0VWaWV3LjE3bj1UaGlzIHdpbGwgd3JpdGUgS01MIGZvciBhIHNwZWNpZmljIEFkbWluaXN0cmF0aW9uIGFyZWEgc28gaXQgY2FuIGJlIGRpc3BsYXllZCBieSBHb29nbGVFYXJ0aAorR0VWaWV3LjE4PURpc3BsYXkgU3RhdHVzCitHRVZpZXcuMTk9RGlzcGxheSBzdGF0dXMgb2YgdGhpcyBhcHBsaWNhdGlvbgorR0VWaWV3LjIwT2ZmPURlYnVnIG9mZgorR0VWaWV3LjIwT249RGVidWcgb24KK0dFVmlldy4yMT1EaXNwbGF5IGRlYnVnIGluZm8gb24gRWNsaXBzZSBjb25zb2xlCitHRVZpZXcuMjI9RGlzcGxheSAlcyBTdGF0dXMKK0dFVmlldy4yNz1HRVZpZXc6IEdvb2dsZUVhcnRoIFZpZXcKK0dFVmlldy4zMD1Hb29nbGVFYXJ0aCBjb250cm9sIEZvbGRlcgorR0VWaWV3LjMxPVNlbGVjdCBhIGZvbGRlciB0byBzdG9yZSBHb29nbGVFYXJ0aCBLTUwgY29udHJvbCBmaWxlcworR0VWaWV3LjMyPVJlbW92ZSBleGlzdGluZyBLTUwgZmlsZXMgaW4gJXMKK0dFVmlldy4zMz1UaGVyZSBhcmUgbm8gZXhpc3RpbmcgS01MIGZpbGVzIGluICVzLCBcbiBDb250aW51ZToKK0dFVmlldy4zND1TZWxlY3QgYSBmb2xkZXIgY29udGFpbmluZyBHb29nbGVFYXJ0aCBLTUwgY29udHJvbCBmaWxlcwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5nZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9nZS92aWV3cy9tZXNzYWdlc19kZS5wcm9wZXJ0aWVzIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLmdlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL2dlL3ZpZXdzL21lc3NhZ2VzX2RlLnByb3BlcnRpZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjQ1MGViOAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5nZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9nZS92aWV3cy9tZXNzYWdlc19kZS5wcm9wZXJ0aWVzCkBAIC0wLDAgKzEsMzMgQEAKK0dFVmlldy4yPUFzcGVrdGFuemVpZ2Ugd1x1MDBlNGhsZW4KK0dFVmlldy4zPUFzcGVjdCBEaXNwbGF5CitHRVZpZXcuND1TaW11bGF0aW9uIFByb2Nlc3NpbmcgT0ZGCitHRVZpZXcuNT1Qcm96ZXNzIEFVUyBzY2hhbHRlbgorR0VWaWV3LjY9RGllcyBzdG9wcHQgZGllIFZlcmFyYmVpdHVuZyB2b24gU3RlbS1aeWtsdXMgRXJnZWJuaXNzZW4sIGR1cmNoIHdlbGNoZSBFcmdlYm5pc3NlIGFuIEdvb2dsZUVhcnRoIGdlc2NoaWNrdCB3ZXJkZW4uCitHRVZpZXcuNz1Qcm96ZXNzIEFOIHNjaGFsdGVuCitHRVZpZXcuOD1EaWVzIHN0YXJ0ZXQgZGllIFZlcmFyYmVpdHVuZyB2b24gU3RlbS1aeWtsdXMgRXJnZWJuaXNzZW4sIGR1cmNoIHdlbGNoZSBFcmdlYm5pc3NlIGFuIEdvb2dsZUVhcnRoIGdlc2NoaWNrdCB3ZXJkZW4uCitHRVZpZXcuOT1Hb29nbGVFYXJ0aCBTdGFydAorR0VWaWV3LjEwPUdvb2dsZUVhcnRoIHN0YXJ0ZW4gd2VubiBuaWNodCBiZXJlaXRzIGdlc3RhcnRldAorR0VWaWV3LjlhPUdvb2dsZUVhcnRoIE5ldXN0YXJ0CitHRVZpZXcuMTBhPUdvb2dsZUVhcnRoIG1pdCBha3R1ZWxsZW0gU3RhdHVzIG5ldXN0YXJ0ZW4KK0dFVmlldy4xMT1Hb29nbGVFYXJ0aCBMYXVmCitHRVZpZXcuMTI9R29vZ2xlRWFydGggbWl0IHZvcmhhbmRlbmVuIEtNTC1EYXRlaWVuIGF1c2ZcdTAwZmNocmVuCitHRVZpZXcuMTM9R29vZ2xlRWFydGggU3RvcAorR0VWaWV3LjE0PUFrdHVlbGxlIEdvb2dsZUVhcnRoIEFuemVpZ2Ugdm9uIFNURU0gRXJnZWJuaXNzZW4gZGVha3RpdmllcmVuCitHRVZpZXcuMTU9S2FydGUga2FubiBuaWNodCBhbmdlemVpZ3Qgd2VyZGVuCitHRVZpZXcuMTY9S2FydGUgYW56ZWlnZW4KK0dFVmlldy4xNz1EaWVzIHNjaHJlaWJ0IEtNTCBmXHUwMGZjciBkaWUgZGVyemVpdGlnZSBTaW11bGF0aW9uLCBkYW1pdCBlcyB2b24gR29vZ2xlRWFydGggYW5nZXplaWd0IHdlcmRlbiBrYW5uLgorR0VWaWV3LjE1bj1LYXJ0ZSBmXHUwMGZjciBWZXJ3YWx0dW5nc2JlemlyayBrYW5uIG5pY2h0IGFuZ2V6ZWlndCB3ZXJkZW4KK0dFVmlldy4xNm49QWRtaW4tQXJlYSBhbnplaWdlbgorR0VWaWV3LjE3bj1EaWVzIHNjaHJlaWJ0IEtNTCBmXHUwMGZjciBlaW5lbiBiZXN0aW1tdGVuIFZlcndhbHR1bmdzYmVyZWljaCwgZGFtaXQgZXMgdm9uIEdvb2dsZUVhcnRoIGFuZ2V6ZWlndCB3ZXJkZW4ga2Fubi4KK0dFVmlldy4xOD1TdGF0dXMgYW56ZWlnZW4KK0dFVmlldy4xOT1TdGF0dXNpbmZvcm1hdGlvbmVuIGRpZXNlciBBbndlbmR1bmcgYW56ZWlnZW4KK0dFVmlldy4yME9mZj1EZWJ1ZyBkZWFrdGl2aWVydAorR0VWaWV3LjIwT249RGVidWcgYWt0aXZpZXJ0CitHRVZpZXcuMjE9RGVidWctSW5mb3JtYXRpb25lbiBcdTAwZmNiZXIgRWNsaXBzZS1Lb25zb2xlIGFuemVpZ2VuCitHRVZpZXcuMjI9QW56ZWlnZSAlcyBTdGF0dXMKK0dFVmlldy4yNz1HRVZpZXc6IEdvb2dsZUVhcnRoIGFuemVpZ2VuCitHRVZpZXcuMzA9R29vZ2xlRWFydGggS29udHJvbGx2ZXJ6ZWljaG5pcworR0VWaWV3LjMxPU9yZG5lciB3XHUwMGU0aGxlbiB1bSBHb29nbGVFYXJ0aCBLTUwgU3RldWVydW5ncy1EYXRlaWVuIHp1IHNwZWljaGVybgorR0VWaWV3LjMyPVZvcmhhbmRlbmUgS01MLURhdGVpZW4gaW4gJXMgZW50ZmVybmVuCitHRVZpZXcuMzM9RXMgZ2lidCBrZWluZSBLTUwtRGF0ZWllbiBpbiAlcywgXG4gV2VpdGVyOgorR0VWaWV3LjM0PU9yZG5lciBtaXQgR29vZ2xlRWFydGggS01MIFN0ZXVlcnVuZ3MtRGF0ZWllbiB3XHUwMGU0aGxlbgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLmdlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL2dlL3ZpZXdzL21lc3NhZ2VzX2tyLnByb3BlcnRpZXMgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkuZ2Uvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvZ2Uvdmlld3MvbWVzc2FnZXNfa3IucHJvcGVydGllcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNjg2ZmVkCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLmdlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL2dlL3ZpZXdzL21lc3NhZ2VzX2tyLnByb3BlcnRpZXMKQEAgLTAsMCArMSwzMyBAQAorR0VWaWV3LjI9XHVkNjU0XHViYTc0IFx1ZDQ1Y1x1YzJkY1x1Yjk3YyBcdWMxMjBcdWQwZGRcdWQ1NThcdWMyZWRcdWMyZGNcdWM2MjQKK0dFVmlldy4zPURpc3BsYXkgQXNwZWN0IFJhdGlvCitHRVZpZXcuND1cdWMyZGNcdWJiYWNcdWI4MDhcdWM3NzRcdWMxNTggXHVjYzk4XHViOWFjIE9GRgorR0VWaWV3LjU9XHVjYzk4XHViOWFjIE9GRiBcdWMxMjRcdWM4MTUKK0dFVmlldy42PVx1Yzc3NFx1YWM4M1x1Yzc0MCBTVEVNIFx1YzBhY1x1Yzc3NFx1ZDA3NCBcdWFjYjBcdWFjZmMgXHVjYzk4XHViOWFjXHViOTdjIFx1Yzg4NVx1YjhjY1x1ZDU1OFx1YzVlYyBcdWFjYjBcdWFjZmNcdWI5N2MgR29vZ2xlIEVhcnRoXHViODVjIFx1YmNmNFx1YjBiYyBcdWFjODNcdWM3ODQKK0dFVmlldy43PVx1Y2M5OFx1YjlhYyBPTiBcdWMxMjRcdWM4MTUKK0dFVmlldy44PVx1Yzc3NFx1YWM4M1x1Yzc0MCBTVEVNIFx1YzBhY1x1Yzc3NFx1ZDA3NCBcdWFjYjBcdWFjZmMgXHVjYzk4XHViOWFjXHViOTdjIFx1YzJkY1x1Yzc5MVx1ZDU1OFx1YzVlYyBcdWFjYjBcdWFjZmNcdWI5N2MgR29vZ2xlIEVhcnRoXHViODVjIFx1YmNmNFx1YjBiYyBcdWFjODNcdWM3ODQKK0dFVmlldy45PUdvb2dsZSBFYXJ0aCBcdWMyZGNcdWM3OTEKK0dFVmlldy4xMD1cdWM1NDRcdWM5YzEgXHVjMmRjXHVjNzkxXHVkNTU4XHVjOWMwIFx1YzU0YVx1YzU1OFx1YzczY1x1YmE3NCBHb29nbGUgRWFydGhcdWI5N2MgXHVjMmRjXHVjNzkxXHVkNTY4CitHRVZpZXcuOWE9R29vZ2xlIEVhcnRoIFx1YjJlNFx1YzJkYyBcdWMyZGNcdWM3OTEKK0dFVmlldy4xMGE9XHVkNjA0XHVjN2FjIFx1YzBjMVx1ZDBkY1x1YzY0MCBcdWQ1NjhcdWFlZDggR29vZ2xlIEVhcnRoXHViOTdjIFx1YjJlNFx1YzJkYyBcdWMyZGNcdWM3OTFcdWQ1NjgKK0dFVmlldy4xMT1Hb29nbGUgRWFydGggXHVjMmU0XHVkNTg5CitHRVZpZXcuMTI9XHVhZTMwXHVjODc0XHVjNzU4IEtNTCBcdWQzMGNcdWM3N2NcdWFjZmMgXHVkNTY4XHVhZWQ4IEdvb2dsZSBFYXJ0aFx1Yjk3YyBcdWMyZTRcdWQ1ODkKK0dFVmlldy4xMz1Hb29nbGUgRWFydGggXHVjOTExXHVjOWMwCitHRVZpZXcuMTQ9XHVkNjA0XHVjN2FjIEdvb2dsZSBFYXJ0aCBcdWQ2NTRcdWJhNzRcdWM1ZDBcdWMxMWMgU1RFTSBcdWFjYjBcdWFjZmNcdWI5N2MgXHViZTQ0XHVkNjVjXHVjMTMxXHVkNjU0CitHRVZpZXcuMTU9XHVjOWMwXHViM2M0XHViOTdjIFx1ZDQ1Y1x1YzJkY1x1ZDU2MCBcdWMyMTggXHVjNWM2XHVjNzRjCitHRVZpZXcuMTY9XHVjOWMwXHViM2M0IFx1ZDQ1Y1x1YzJkYworR0VWaWV3LjE3PVx1Yzc3NFx1YWM4M1x1Yzc0MCBHb29nbGUgRWFydGhcdWI4NWMgXHVkNDVjXHVjMmRjXHVkNTYwIFx1YzIxOCBcdWM3ODhcdWIzYzRcdWI4NWQgXHVkNjA0XHVjN2FjXHVjMmRjXHViYmFjXHViODA4XHVjNzc0XHVjMTU4XHVjNWQwIFx1YjMwMFx1ZDU1YyBLTUxcdWM3NDQgXHVjNzkxXHVjMTMxXHVkNTYwIFx1YWM4M1x1Yzc4NAorR0VWaWV3LjE1bj1cdWFkMDBcdWI5YWMgXHVjNjAxXHVjNWVkXHVjNWQwIFx1YjMwMFx1ZDU1YyBcdWM5YzBcdWIzYzRcdWI5N2MgXHVkNDVjXHVjMmRjXHVkNTYwIFx1YzIxOCBcdWM1YzZcdWM3NGMKK0dFVmlldy4xNm49XHVhZDAwXHViOWFjXHVjNzkwIFx1YzYwMVx1YzVlZCBcdWQ0NWNcdWMyZGMKK0dFVmlldy4xN249XHVjNzc0XHVhYzgzXHVjNzQwIEdvb2dsZSBFYXJ0aFx1Yjg1YyBcdWQ0NWNcdWMyZGNcdWQ1NjAgXHVjMjE4IFx1Yzc4OFx1YjNjNFx1Yjg1ZCBcdWQyYjlcdWM4MTUgXHVhZDAwXHViOWFjIFx1YzYwMVx1YzVlZFx1YzVkMCBcdWIzMDBcdWQ1NWMgS01MXHVjNzQ0IFx1Yzc5MVx1YzEzMVx1ZDU2MCBcdWFjODNcdWM3ODQKK0dFVmlldy4xOD1cdWMwYzFcdWQwZGMgXHVkNDVjXHVjMmRjCitHRVZpZXcuMTk9XHVjNzc0IFx1Yzc1MVx1YzZhOSBcdWQ1MDRcdWI4NWNcdWFkZjhcdWI3YThcdWM3NTggXHVkNDVjXHVjMmRjIFx1YzBjMVx1ZDBkYworR0VWaWV3LjIwT2ZmPVx1YjUxNFx1YmM4NFx1YWRmOCBcdWIwNDRcdWFlMzAKK0dFVmlldy4yME9uPVx1YjUxNFx1YmM4NFx1YWRmOCBcdWNmMWNcdWFlMzAKK0dFVmlldy4yMT1cdWM3NzRcdWQwNzRcdWI5YmRcdWMyYTQgXHVjZjU4XHVjMTk0XHVjNWQwIFx1YjUxNFx1YmM4NFx1YWRmOCBcdWM4MTVcdWJjZjRcdWI5N2MgXHVkNDVjXHVjMmRjCitHRVZpZXcuMjI9XHViNTE0XHVjMmE0XHVkNTBjXHViODA4XHVjNzc0ICUgc1x1Yzc1OCBcdWMwYzFcdWQwZGMKK0dFVmlldy4yNz1HRVZpZXcgOiBHb29nbGUgRWFydGggXHViZGYwCitHRVZpZXcuMzA9R29vZ2xlIEVhcnRoIFx1YzgxY1x1YzViNCBcdWQzZjRcdWIzNTQKK0dFVmlldy4zMT1Hb29nbGUgRWFydGggS01MIFx1YzgxY1x1YzViNCBcdWQzMGNcdWM3N2NcdWM3NDQgXHVjODAwXHVjN2E1XHVkNTYwIFx1ZDNmNFx1YjM1NCBcdWMxMjBcdWQwZGQKK0dFVmlldy4zMj0lIHNcdWM3NTggXHVhZTMwXHVjODc0IEtNTCBcdWQzMGNcdWM3N2NcdWM3NDQgXHVjODFjXHVhYzcwCitHRVZpZXcuMzM9JSBTXHVjNWQwIFx1YWUzMFx1Yzg3NCBLTUwgXHVkMzBjXHVjNzdjXHVjNzc0IFx1YzVjNlx1Yzc0YyBcIG4gXHVhY2M0XHVjMThkIDoKK0dFVmlldy4zND1Hb29nbGUgRWFydGggS01MIFx1YzgxY1x1YzViNCBcdWQzMGNcdWM3N2NcdWM3NzQgXHVkM2VjXHVkNTY4XHViNDFjIFx1ZDNmNFx1YjM1NCBcdWMxMjBcdWQwZGQKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5nZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9nZS92aWV3cy9tZXNzYWdlc196aC5wcm9wZXJ0aWVzIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLmdlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL2dlL3ZpZXdzL21lc3NhZ2VzX3poLnByb3BlcnRpZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjMwYTAyMgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5nZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9nZS92aWV3cy9tZXNzYWdlc196aC5wcm9wZXJ0aWVzCkBAIC0wLDAgKzEsMzMgQEAKK0dFVmlldy4yPVx1OTAwOVx1NjJlOVx1NjYzZVx1NzkzYVx1NzcwYlx1NzBiOQorR0VWaWV3LjM9XHU3Mjc5XHU2MDI3XHU3Njg0XHU2NjNlXHU3OTNhCitHRVZpZXcuND1cdTUxNzNcdTk1ZWRcdTRlZmZcdTc3MWZcdTU5MDRcdTc0MDYKK0dFVmlldy41PVx1NTE3M1x1OTVlZFx1OGJiZVx1N2Y2ZVx1NTkwNFx1NzQwNgorR0VWaWV3LjY9XHU4ZmQ5XHU1YzA2XHU1MDVjXHU2YjYyU1RFTVx1NzY4NFx1NWZhYVx1NzNhZlx1N2VkM1x1Njc5Y1x1ZmYwY1x1NGVlNVx1NGZiZlx1NTkwNFx1NzQwNlx1N2VkM1x1Njc5Y1x1NTNkMVx1OTAwMVx1NTIzMEdvb2dsZUVhcnRoXHU3Njg0CitHRVZpZXcuNz1cdTVmMDBcdTU0MmZcdThiYmVcdTdmNmVcdTU5MDRcdTc0MDYKK0dFVmlldy44PVx1OGZkOVx1NWMwNlx1NTQyZlx1NTJhOFNURU1cdTc2ODRcdTVmYWFcdTczYWZcdTdlZDNcdTY3OWNcdWZmMGNcdTRlZTVcdTRmYmZcdTU5MDRcdTc0MDZcdTdlZDNcdTY3OWNcdTUzZDFcdTkwMDFcdTUyMzBHb29nbGVFYXJ0aFx1NzY4NAorR0VWaWV3Ljk9R29vZ2xlRWFydGhcdTc2ODRcdTVmMDBcdTU5Y2IKK0dFVmlldy4xMD1cdTU5ODJcdTY3OWNcdTVjMWFcdTY3MmFcdTU0MmZcdTUyYThcdWZmMGMgXHU1ZjAwXHU1OWNiR29vZ2xlRWFydGgKK0dFVmlldy45YT1Hb29nbGVFYXJ0aFx1NzY4NFx1OTFjZFx1NjViMFx1NTQyZlx1NTJhOAorR0VWaWV3LjEwYT1cdTRlZTVcdTVmNTNcdTUyNGRcdTcyYjZcdTYwMDFcdTY3NjVcdTkxY2RcdTY1YjBcdTU0MmZcdTUyYThHb29nbGVFYXJ0aAorR0VWaWV3LjExPUdvb2dsZUVhcnRoXHU3Njg0XHU4ZmQwXHU4ODRjCitHRVZpZXcuMTI9XHU3NTI4XHU3M2IwXHU2NzA5XHU3Njg0S01MXHU2NTg3XHU0ZWY2XHU2NzY1XHU4ZmQwXHU4ODRjR29vZ2xlRWFydGgKK0dFVmlldy4xMz1Hb29nbGVFYXJ0aFx1NzY4NFx1NTA1Y1x1NmI2MgorR0VWaWV3LjE0PVx1NTA1Y1x1NzUyOFx1NWY1M1x1NTI0ZFx1NzY4NEdvb2dsZUVhcnRoXHU2NjNlXHU3OTNhU1RFTVx1NzY4NFx1N2VkM1x1Njc5YyAKK0dFVmlldy4xNT1cdTY1ZTBcdTZjZDVcdTY2M2VcdTc5M2FcdTU3MzBcdTU2ZmUKK0dFVmlldy4xNj1cdTY2M2VcdTc5M2FcdTU3MzBcdTU2ZmUKK0dFVmlldy4xNz1cdThmZDlcdTVjMDZcdTUxOTlcdTUxNjVcdTVmNTNcdTUyNGRcdTc2ODRcdTRlZmZcdTc3MWZLTUxcdTU2ZTBcdTZiNjRcdTViODNcdTUzZWZcdTRlZTVcdTkwMWFcdThmYzdHb29nbGVFYXJ0aFx1NzY4NFx1NjYzZVx1NzkzYQorR0VWaWV3LjE1bj1cdTY1ZTBcdTZjZDVcdTY2M2VcdTc5M2FcdTg4NGNcdTY1M2ZcdTUzM2FcdTU3ZGZcdTU3MzBcdTU2ZmUKK0dFVmlldy4xNm49XHU2NjNlXHU3OTNhXHU3YmExXHU3NDA2XHU1MzNhCitHRVZpZXcuMTduPVx1OGZkOVx1NWMwNlx1N2YxNlx1NTE5OVx1NzI3OVx1NWI5YVx1ODg0Y1x1NjUzZlx1NTMzYVx1NTdkZktNTFx1NTZlMFx1NmI2NFx1NWI4M1x1NTNlZlx1NGVlNVx1OTAxYVx1OGZjN0dvb2dsZUVhcnRoXHU3Njg0XHU2NjNlXHU3OTNhCitHRVZpZXcuMTg9XHU2NjNlXHU3OTNhXHU3MmI2XHU2MDAxCitHRVZpZXcuMTk9XHU2NjNlXHU3OTNhXHU2YjY0XHU1ZTk0XHU3NTI4XHU3YTBiXHU1ZThmXHU3Njg0XHU3MmI2XHU2MDAxCitHRVZpZXcuMjBPZmY9XHU4YzAzXHU4YmQ1XHU1MTczXHU5NWVkCitHRVZpZXcuMjBPbj1cdThjMDNcdThiZDVcdTVmMDBcdTU0MmYKK0dFVmlldy4yMT1cdTU3MjhFY2xpcHNlXHU3Njg0XHU2M2E3XHU1MjM2XHU1M2YwXHU0ZTBhXHU2NjNlXHU3OTNhXHU4YzAzXHU4YmQ1XHU0ZmUxXHU2MDZmCitHRVZpZXcuMjI9XHU2NjNlXHU3OTNhXHVmZjA1c1x1NzJiNlx1NjAwMQorR0VWaWV3LjI3PUdFVmlld1x1ZmYxYUdvb2dsZUVhcnRoXHU3Njg0XHU4OWM2XHU1NmZlCitHRVZpZXcuMzA9R29vZ2xlRWFydGhcdTc2ODRcdTYzYTdcdTUyMzZcdTY1ODdcdTRlZjZcdTU5MzkKK0dFVmlldy4zMT1cdTkwMDlcdTYyZTlcdTRlMDBcdTRlMmFcdTY1ODdcdTRlZjZcdTU5MzlcdTY3NjVcdTViNThcdTUwYThHb29nbGVFYXJ0aFx1NzY4NEtNTFx1NjNhN1x1NTIzNlx1NjU4N1x1NGVmNgorR0VWaWV3LjMyPVx1NTIyMFx1OTY2NFx1NzNiMFx1NjcwOVx1NzY4NEtNTFx1NjU4N1x1NGVmNgorR0VWaWV3LjMzPVx1NWU3Nlx1NmNhMVx1NjcwOUtNTFx1NjU4N1x1NGVmNlx1NzY4NFx1NWI1OFx1NTcyOFx1ZmYwY1x1N2VlN1x1N2VlZAorR0VWaWV3LjM0PVx1OTAwOVx1NjJlOVx1NGUwMFx1NGUyYVx1NjU4N1x1NGVmNlx1NTkzOVx1NTMwNVx1NTQyYkdvb2dsZUVhcnRoXHU3Njg0S01MXHU2M2E3XHU1MjM2XHU2NTg3XHU0ZWY2CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkuZ3JhcGhlZGl0b3IvLmNsYXNzcGF0aCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5ncmFwaGVkaXRvci8uY2xhc3NwYXRoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY0YzVlMzEKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkuZ3JhcGhlZGl0b3IvLmNsYXNzcGF0aApAQCAtMCwwICsxLDcgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8Y2xhc3NwYXRoPgorCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJjb24iIHBhdGg9Im9yZy5lY2xpcHNlLmpkdC5sYXVuY2hpbmcuSlJFX0NPTlRBSU5FUi9vcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwuZGVidWcudWkubGF1bmNoZXIuU3RhbmRhcmRWTVR5cGUvSjJTRS0xLjUiLz4KKwk8Y2xhc3NwYXRoZW50cnkga2luZD0iY29uIiBwYXRoPSJvcmcuZWNsaXBzZS5wZGUuY29yZS5yZXF1aXJlZFBsdWdpbnMiLz4KKwk8Y2xhc3NwYXRoZW50cnkga2luZD0ic3JjIiBwYXRoPSJzcmMiLz4KKwk8Y2xhc3NwYXRoZW50cnkga2luZD0ib3V0cHV0IiBwYXRoPSJiaW4iLz4KKzwvY2xhc3NwYXRoPgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLmdyYXBoZWRpdG9yLy5wcm9qZWN0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLmdyYXBoZWRpdG9yLy5wcm9qZWN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc1NjI4NzYKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkuZ3JhcGhlZGl0b3IvLnByb2plY3QKQEAgLTAsMCArMSwyOCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxwcm9qZWN0RGVzY3JpcHRpb24+CisJPG5hbWU+b3JnLmVjbGlwc2Uuc3RlbS51aS5ncmFwaGVkaXRvcjwvbmFtZT4KKwk8Y29tbWVudD48L2NvbW1lbnQ+CisJPHByb2plY3RzPgorCTwvcHJvamVjdHM+CisJPGJ1aWxkU3BlYz4KKwkJPGJ1aWxkQ29tbWFuZD4KKwkJCTxuYW1lPm9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFidWlsZGVyPC9uYW1lPgorCQkJPGFyZ3VtZW50cz4KKwkJCTwvYXJndW1lbnRzPgorCQk8L2J1aWxkQ29tbWFuZD4KKwkJPGJ1aWxkQ29tbWFuZD4KKwkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5NYW5pZmVzdEJ1aWxkZXI8L25hbWU+CisJCQk8YXJndW1lbnRzPgorCQkJPC9hcmd1bWVudHM+CisJCTwvYnVpbGRDb21tYW5kPgorCQk8YnVpbGRDb21tYW5kPgorCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLlNjaGVtYUJ1aWxkZXI8L25hbWU+CisJCQk8YXJndW1lbnRzPgorCQkJPC9hcmd1bWVudHM+CisJCTwvYnVpbGRDb21tYW5kPgorCTwvYnVpbGRTcGVjPgorCTxuYXR1cmVzPgorCQk8bmF0dXJlPm9yZy5lY2xpcHNlLnBkZS5QbHVnaW5OYXR1cmU8L25hdHVyZT4KKwkJPG5hdHVyZT5vcmcuZWNsaXBzZS5qZHQuY29yZS5qYXZhbmF0dXJlPC9uYXR1cmU+CisJPC9uYXR1cmVzPgorPC9wcm9qZWN0RGVzY3JpcHRpb24+CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkuZ3JhcGhlZGl0b3IvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLmdyYXBoZWRpdG9yLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMzcxZWNmCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLmdyYXBoZWRpdG9yLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcwpAQCAtMCwwICsxLDggQEAKKyNUaHUgTWFyIDAzIDExOjEwOjI4IFBTVCAyMDExCitlY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29kZWdlbi5pbmxpbmVKc3JCeXRlY29kZT1lbmFibGVkCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb2RlZ2VuLnRhcmdldFBsYXRmb3JtPTEuNQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29tcGxpYW5jZT0xLjUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uYXNzZXJ0SWRlbnRpZmllcj1lcnJvcgorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5lbnVtSWRlbnRpZmllcj1lcnJvcgorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuc291cmNlPTEuNQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLmdyYXBoZWRpdG9yL01FVEEtSU5GL01BTklGRVNULk1GIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLmdyYXBoZWRpdG9yL01FVEEtSU5GL01BTklGRVNULk1GCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU2YThkMmIKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkuZ3JhcGhlZGl0b3IvTUVUQS1JTkYvTUFOSUZFU1QuTUYKQEAgLTAsMCArMSwyNCBAQAorTWFuaWZlc3QtVmVyc2lvbjogMS4wCitCdW5kbGUtTWFuaWZlc3RWZXJzaW9uOiAyCitCdW5kbGUtTmFtZTogJXBsdWdpbk5hbWUKK0J1bmRsZS1TeW1ib2xpY05hbWU6IG9yZy5lY2xpcHNlLnN0ZW0udWkuZ3JhcGhlZGl0b3I7c2luZ2xldG9uOj10cnVlCitCdW5kbGUtVmVyc2lvbjogMS4yLjEKK0J1bmRsZS1BY3RpdmF0b3I6IG9yZy5lY2xpcHNlLnN0ZW0udWkuZ3JhcGhlZGl0b3IuQWN0aXZhdG9yCitCdW5kbGUtVmVuZG9yOiAlcHJvdmlkZXJOYW1lCitCdW5kbGUtTG9jYWxpemF0aW9uOiBwbHVnaW4KK0J1bmRsZS1BY3RpdmF0aW9uUG9saWN5OiBsYXp5CitFeHBvcnQtUGFja2FnZTogIG9yZy5lY2xpcHNlLnN0ZW0udWkuZ3JhcGhlZGl0b3IsCisgb3JnLmVjbGlwc2Uuc3RlbS51aS5ncmFwaGVkaXRvci5oYW5kbGVycworQnVuZGxlLUNsYXNzUGF0aDogLgorQnVuZGxlLVJlcXVpcmVkRXhlY3V0aW9uRW52aXJvbm1lbnQ6IEoyU0UtMS41CitSZXF1aXJlLUJ1bmRsZTogb3JnLmVjbGlwc2UuY29yZS5jb21tYW5kcztidW5kbGUtdmVyc2lvbj0iMy42LjAiLAorIG9yZy5lY2xpcHNlLmNvcmUucnVudGltZTtidW5kbGUtdmVyc2lvbj0iMy42LjAiLAorIG9yZy5lY2xpcHNlLmNvcmUuZXhwcmVzc2lvbnM7YnVuZGxlLXZlcnNpb249IjMuNC4yMDAiLAorIG9yZy5lY2xpcHNlLmVtZi5lY29yZS5lZGl0O2J1bmRsZS12ZXJzaW9uPSIyLjYuMCIsCisgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnhtaTtidW5kbGUtdmVyc2lvbj0iMi41LjAiLAorIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnM7YnVuZGxlLXZlcnNpb249IjEuMS4wIiwKKyBvcmcuZWNsaXBzZS5zdGVtLnVpO2J1bmRsZS12ZXJzaW9uPSIxLjEuMSIsCisgb3JnLmVjbGlwc2UuZHJhdzJkO2J1bmRsZS12ZXJzaW9uPSIzLjYuMSIsCisgb3JnLmVjbGlwc2UuemVzdC5jb3JlO2J1bmRsZS12ZXJzaW9uPSIxLjIuMCIsCisgb3JnLmVjbGlwc2UuemVzdC5sYXlvdXRzO2J1bmRsZS12ZXJzaW9uPSIxLjEuMCIKKwpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLmdyYXBoZWRpdG9yL2J1aWxkLnByb3BlcnRpZXMgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkuZ3JhcGhlZGl0b3IvYnVpbGQucHJvcGVydGllcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YTE2ZTJkCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLmdyYXBoZWRpdG9yL2J1aWxkLnByb3BlcnRpZXMKQEAgLTAsMCArMSw5IEBACitzb3VyY2UuLiA9IHNyYy8NCitvdXRwdXQuLiA9IGJpbi8NCitiaW4uaW5jbHVkZXMgPSBwbHVnaW4ueG1sLFwNCisgICAgICAgICAgICAgICBNRVRBLUlORi8sXA0KKyAgICAgICAgICAgICAgIC4sXA0KKyAgICAgICAgICAgICAgIHBsdWdpbi5wcm9wZXJ0aWVzLFwNCisgICAgICAgICAgICAgICBwbHVnaW5fa3IucHJvcGVydGllcyxcDQorICAgICAgICAgICAgICAgcGx1Z2luX2RlLnByb3BlcnRpZXMsXA0KKyAgICAgICAgICAgICAgIHBsdWdpbl96aC5wcm9wZXJ0aWVzDQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLmdyYXBoZWRpdG9yL3BsdWdpbi5wcm9wZXJ0aWVzIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLmdyYXBoZWRpdG9yL3BsdWdpbi5wcm9wZXJ0aWVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg0NWU5ZTIKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkuZ3JhcGhlZGl0b3IvcGx1Z2luLnByb3BlcnRpZXMKQEAgLTAsMCArMSwzMyBAQAorIw0KKyMgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisjICAqIENvcHlyaWdodCAoYykgMjAwNiwgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4NCisjICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMNCisjICAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMA0KKyMgICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQNCisjICAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sDQorIyAgKg0KKyMgICogQ29udHJpYnV0b3JzOg0KKyMgICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbg0KKyMgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCisNCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQorIyBUbyBjb2RlIGRldmVsb3BlcjoNCisjICAgRG8gTk9UIGNoYW5nZSB0aGUgcHJvcGVydGllcyBiZXR3ZWVuIHRoaXMgbGluZSBhbmQgdGhlDQorIyAgICIlJSUgRU5EIE9GIFRSQU5TTEFURUQgUFJPUEVSVElFUyAlJSUiIGxpbmUuDQorIyAgIE1ha2UgYSBuZXcgcHJvcGVydHkgbmFtZSwgYXBwZW5kIHRvIHRoZSBlbmQgb2YgdGhlIGZpbGUgYW5kIGNoYW5nZQ0KKyMgICB0aGUgY29kZSB0byB1c2UgdGhlIG5ldyBwcm9wZXJ0eS4NCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQorIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KKyMgJSUlIEVORCBPRiBUUkFOU0xBVEVEIFBST1BFUlRJRVMgJSUlDQorIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KKw0KK3BsdWdpbk5hbWUgPSBTVEVNIFVJIEdyYXBoIEVkaXRvcg0KKw0KK3Byb3ZpZGVyTmFtZSA9IEVjbGlwc2Uub3JnDQorDQorDQorX1VJX1NURU1fQ29tbWFuZF9EaXNwbGF5ID0gRGlzcGxheQ0KK19VSV9TVEVNX0NvbW1hbmRfRGlzcGxheVRUID0gT3BlbiBncmFwaCB2aWV3IGFuZCBtb2RpZnkgbm9kZXMNCisNCitfVUlfU1RFTV9Db21tYW5kX0Rpc3BsYXlDYW5vbmljYWwgPSBEaXNwbGF5IGNhbm9uaWNhbCBncmFwaA0KK19VSV9TVEVNX0NvbW1hbmRfRGlzcGxheUNhbm9uaWNhbFRUID0gT3BlbiBncmFwaCB2aWV3IGFuZCBtb2RpZnkgbm9kZXMKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkuZ3JhcGhlZGl0b3IvcGx1Z2luLnhtbCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5ncmFwaGVkaXRvci9wbHVnaW4ueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFlNjM3OTIKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkuZ3JhcGhlZGl0b3IvcGx1Z2luLnhtbApAQCAtMCwwICsxLDIyNiBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4NCis8P2VjbGlwc2UgdmVyc2lvbj0iMy4yIj8+DQorPHBsdWdpbj4NCisNCisgIA0KKyAgIDxleHRlbnNpb24NCisgICAgICAgICBwb2ludD0ib3JnLmVjbGlwc2UudWkuaGFuZGxlcnMiPg0KKyAgICAgIDxoYW5kbGVyDQorICAgICAgICAgICAgY29tbWFuZElkPSJvcmcuZWNsaXBzZS5zdGVtLnVpLmNvbW1hbmRzLmRpc3BsYXlpZGVudGlmaWFibGUiDQorICAgICAgICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLnN0ZW0udWkuZ3JhcGhlZGl0b3IuaGFuZGxlcnMuR3JhcGhEaXNwbGF5Ij4NCisgICAgICA8L2hhbmRsZXI+DQorICAgPC9leHRlbnNpb24+DQorICAgDQorICAgDQorICAgPGV4dGVuc2lvbg0KKyAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5zdGVtLnVpLmdyYXBoZWRpdG9yIg0KKyAgICAgICAgIG5hbWU9IiVnZVVudXNlZFBQYWdlIg0KKyAgICAgICAgIHBvaW50PSJvcmcuZWNsaXBzZS51aS5wcmVmZXJlbmNlUGFnZXMiPg0KKyAgIDwvZXh0ZW5zaW9uPg0KKyAgIA0KKyAgIA0KKyAgIDxleHRlbnNpb24NCisgICAgICAgIHBvaW50PSJvcmcuZWNsaXBzZS51aS5tZW51cyI+ICAgDQorICAgICANCisgICAgIDxtZW51Q29udHJpYnV0aW9uDQorICAgICAgICAgICBsb2NhdGlvblVSST0icG9wdXA6b3JnLmVjbGlwc2UudWkucG9wdXAuYW55P2FmdGVyPWFkZGl0aW9ucyI+DQorICAgICAgICA8Y29tbWFuZA0KKyAgICAgICAgICAgICAgY29tbWFuZElkPSJvcmcuZWNsaXBzZS5zdGVtLnVpLmNvbW1hbmQuZGlzcGxheWlkZW50aWZpYWJsZSINCisgICAgICAgICAgICAgDQorICAgICAgICAgICAgICBsYWJlbD0iJV9VSV9TVEVNX0NvbW1hbmRfRGlzcGxheSAiDQorICAgICAgICAgICAgICBzdHlsZT0icHVzaCINCisgICAgICAgICAgICAgIHRvb2x0aXA9IiVfVUlfU1RFTV9Db21tYW5kX0Rpc3BsYXlUVCI+DQorICAgICAgICAgICAgPHZpc2libGVXaGVuDQorICAgICAgICAgICAgICAgICBjaGVja0VuYWJsZWQ9ImZhbHNlIj4NCisgICAgICAgICAgICAgIDxyZWZlcmVuY2UNCisgICAgICAgICAgICAgICAgICAgIGRlZmluaXRpb25JZD0ib3JnLmVjbGlwc2Uuc3RlbS51aS5pc0Rpc3BsYXlhYmxlSWRlbnRpZmlhYmxlIj4NCisgICAgICAgICAgICAgIDwvcmVmZXJlbmNlPg0KKyAgICAgICAgICAgPC92aXNpYmxlV2hlbj4NCisgICAgICAgIDwvY29tbWFuZD4NCisgICAgIDwvbWVudUNvbnRyaWJ1dGlvbj4NCisgICAgIA0KKyAgICAgPG1lbnVDb250cmlidXRpb24NCisgICAgICAgICAgIGxvY2F0aW9uVVJJPSJwb3B1cDpvcmcuZWNsaXBzZS51aS5wb3B1cC5hbnk/YWZ0ZXI9YWRkaXRpb25zIj4NCisgICAgICAgIDxjb21tYW5kDQorICAgICAgICAgICAgICBjb21tYW5kSWQ9Im9yZy5lY2xpcHNlLnN0ZW0udWkuY29tbWFuZC5kaXNwbGF5Y2Fub25pY2FsaWRlbnRpZmlhYmxlIg0KKyAgICAgICAgICAgICANCisgICAgICAgICAgICAgIGxhYmVsPSIlX1VJX1NURU1fQ29tbWFuZF9EaXNwbGF5Q2Fub25pY2FsICINCisgICAgICAgICAgICAgIHN0eWxlPSJwdXNoIg0KKyAgICAgICAgICAgICAgdG9vbHRpcD0iJV9VSV9TVEVNX0NvbW1hbmRfRGlzcGxheUNhbm9uaWNhbFRUIj4NCisgICAgICAgICAgICA8dmlzaWJsZVdoZW4NCisgICAgICAgICAgICAgICAgIGNoZWNrRW5hYmxlZD0iZmFsc2UiPg0KKyAgICAgICAgICAgICAgPHJlZmVyZW5jZQ0KKyAgICAgICAgICAgICAgICAgICAgZGVmaW5pdGlvbklkPSJvcmcuZWNsaXBzZS5zdGVtLnVpLmlzRGlzcGxheWFibGVDYW5vbmljYWxJZGVudGlmaWFibGUiPg0KKyAgICAgICAgICAgICAgPC9yZWZlcmVuY2U+DQorICAgICAgICAgICA8L3Zpc2libGVXaGVuPg0KKyAgICAgICAgPC9jb21tYW5kPg0KKyAgICAgPC9tZW51Q29udHJpYnV0aW9uPg0KKyAgICAgDQorICA8L2V4dGVuc2lvbj4NCisgIA0KKyAgDQorDQorICANCisgIDxleHRlbnNpb24NCisgICAgICAgIHBvaW50PSJvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuYWRhcHRlcnMiPg0KKyAgICAgICAgICA8IS0tDQorICAgICAgICAgPGZhY3RvcnkgDQorICAgICAgICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLnN0ZW0udWkuYWRhcHRlcnMuZXhlY3V0YWJsZS5JZGVudGlmaWFibGVEZWxlZ2F0ZUV4ZWN1dGFibGVBZGFwdGVyRmFjdG9yeSIgDQorICAgICAgICAgICAgYWRhcHRhYmxlVHlwZT0ib3JnLmVjbGlwc2Uuc3RlbS51aS52aWV3cy5JZGVudGlmaWFibGVEZWxlZ2F0ZSI+DQorICAgICAgICAgICAgPGFkYXB0ZXIgdHlwZT0ib3JnLmVjbGlwc2Uuc3RlbS5qb2JzLmV4ZWN1dGlvbi5JRXhlY3V0YWJsZSIvPg0KKyAgICAgICAgIDwvZmFjdG9yeT4NCisgICAgICAgICANCisgICAgICAgICA8ZmFjdG9yeQ0KKyAgICAgICAgICAgICAgIGFkYXB0YWJsZVR5cGU9Im9yZy5lY2xpcHNlLnN0ZW0udWkudmlld3MuSWRlbnRpZmlhYmxlRGVsZWdhdGUiDQorICAgICAgICAgICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLnN0ZW0udWkuYWRhcHRlcnMuaWRlbnRpZmlhYmxlLklkZW50aWZpYWJsZURlbGVnYXRlSWRlbnRpZmlhYmxlQWRhcHRlckZhY3RvcnkiPg0KKyAgICAgICAgICAgIDxhZGFwdGVyDQorICAgICAgICAgICAgICAgICAgdHlwZT0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5JZGVudGlmaWFibGUiPg0KKyAgICAgICAgICAgIDwvYWRhcHRlcj4NCisgICAgICAgICA8L2ZhY3Rvcnk+DQorICAgICAgICAgDQorICAgICAgICAgPGZhY3RvcnkNCisgICAgICAgICAgICAgICBhZGFwdGFibGVUeXBlPSJvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5EZWxlZ2F0aW5nV3JhcHBlckl0ZW1Qcm92aWRlciINCisgICAgICAgICAgICAgICBjbGFzcz0ib3JnLmVjbGlwc2Uuc3RlbS51aS5hZGFwdGVycy5pZGVudGlmaWFibGUuRGVsZWdhdGluZ1dyYXBwZXJJdGVtUHJvdmlkZXJJZGVudGlmaWFibGVBZGFwdGVyRmFjdG9yeSI+DQorICAgICAgICAgICAgPGFkYXB0ZXINCisgICAgICAgICAgICAgICAgICB0eXBlPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLklkZW50aWZpYWJsZSI+DQorICAgICAgICAgICAgPC9hZGFwdGVyPg0KKyAgICAgICAgIDwvZmFjdG9yeT4NCisgICAgICAgICAtLT4NCisgICAgICAgICA8ZmFjdG9yeQ0KKyAgICAgICAgICAgICAgIGFkYXB0YWJsZVR5cGU9Im9yZy5lY2xpcHNlLnN0ZW0udWkudmlld3MuSWRlbnRpZmlhYmxlRGVsZWdhdGUiDQorICAgICAgICAgICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLnN0ZW0udWkuZ3JhcGhlZGl0b3IuYWRhcHRlcnMuSWRlbnRpZmlhYmxlRGVsZWdhdGVEaXNwbGF5YWJsZUFkYXB0ZXJGYWN0b3J5Ij4NCisgICAgICAgICAgICA8YWRhcHRlcg0KKyAgICAgICAgICAgICAgICAgIHR5cGU9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5EaXNwbGF5YWJsZSI+DQorICAgICAgICAgICAgPC9hZGFwdGVyPg0KKyAgICAgICAgIDwvZmFjdG9yeT4NCisgICAgICAgICANCisgICAgICAgICA8ZmFjdG9yeQ0KKyAgICAgICAgICAgICAgIGFkYXB0YWJsZVR5cGU9Im9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkRlbGVnYXRpbmdXcmFwcGVySXRlbVByb3ZpZGVyIg0KKyAgICAgICAgICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS5zdGVtLnVpLmdyYXBoZWRpdG9yLmFkYXB0ZXJzLkRlbGVnYXRpbmdXcmFwcGVySXRlbVByb3ZpZGVyRGlzcGxheWFibGVBZGFwdGVyRmFjdG9yeSI+DQorICAgICAgICAgICAgPGFkYXB0ZXINCisgICAgICAgICAgICAgICAgICB0eXBlPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguRGlzcGxheWFibGUiPg0KKyAgICAgICAgICAgIDwvYWRhcHRlcj4NCisgICAgICAgICA8L2ZhY3Rvcnk+DQorICAgICAgICAgDQorICAgICAgICAgDQorICAgICAgICAgPGZhY3RvcnkNCisgICAgICAgICAgICAgICBhZGFwdGFibGVUeXBlPSJvcmcuZWNsaXBzZS5zdGVtLnVpLnZpZXdzLklkZW50aWZpYWJsZURlbGVnYXRlIg0KKyAgICAgICAgICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS5zdGVtLnVpLmdyYXBoZWRpdG9yLmFkYXB0ZXJzLklkZW50aWZpYWJsZURlbGVnYXRlRGlzcGxheWFibGVDYW5vbmljYWxBZGFwdGVyRmFjdG9yeSI+DQorICAgICAgICAgICAgPGFkYXB0ZXINCisgICAgICAgICAgICAgICAgICB0eXBlPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuRGlzcGxheWFibGVDYW5vbmljYWwiPg0KKyAgICAgICAgICAgIDwvYWRhcHRlcj4NCisgICAgICAgICA8L2ZhY3Rvcnk+DQorICAgICAgICAgDQorICAgICAgICAgPGZhY3RvcnkNCisgICAgICAgICAgICAgICBhZGFwdGFibGVUeXBlPSJvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5EZWxlZ2F0aW5nV3JhcHBlckl0ZW1Qcm92aWRlciINCisgICAgICAgICAgICAgICBjbGFzcz0ib3JnLmVjbGlwc2Uuc3RlbS51aS5ncmFwaGVkaXRvci5hZGFwdGVycy5EZWxlZ2F0aW5nV3JhcHBlckl0ZW1Qcm92aWRlckRpc3BsYXlhYmxlQ2Fub25pY2FsQWRhcHRlckZhY3RvcnkiPg0KKyAgICAgICAgICAgIDxhZGFwdGVyDQorICAgICAgICAgICAgICAgICAgdHlwZT0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLkRpc3BsYXlhYmxlQ2Fub25pY2FsIj4NCisgICAgICAgICAgICA8L2FkYXB0ZXI+DQorICAgICAgICAgPC9mYWN0b3J5Pg0KKyAgPC9leHRlbnNpb24+DQorICANCisgIA0KKyAgDQorICANCisgIA0KKyAgDQorICA8ZXh0ZW5zaW9uDQorICAgICAgICBwb2ludD0ib3JnLmVjbGlwc2UudWkuY29tbWFuZHMiPg0KKyAgICAgPGNhdGVnb3J5DQorICAgICAgICAgICBkZXNjcmlwdGlvbj0iJV9VSV9TVEVNX1dpekNtZF9DYXRfRGVzYyINCisgICAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5zdGVtLnVpLndpemFyZHMiDQorICAgICAgICAgICBuYW1lPSIlX1VJX1NURU1fV2l6Q21kX0NhdF9OYW1lIj4NCisgICAgIDwvY2F0ZWdvcnk+DQorICAgICANCisgICAgIDxjb21tYW5kDQorICAgICAgICAgICBkZWZhdWx0SGFuZGxlcj0ib3JnLmVjbGlwc2Uuc3RlbS51aS5ncmFwaGVkaXRvci5oYW5kbGVycy5HcmFwaERpc3BsYXkiDQorICAgICAgICAgICBkZXNjcmlwdGlvbj0iJV9VSV9EaXNwbGF5X2Rlc2NyaXB0aW9uIg0KKyAgICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLnN0ZW0udWkuY29tbWFuZC5kaXNwbGF5aWRlbnRpZmlhYmxlIg0KKyAgICAgICAgICAgbmFtZT0iJV9VSV9EaXNwbGF5X2xhYmVsIj4NCisgICAgIDwvY29tbWFuZD4NCisgICAgICANCisgICAgICA8Y29tbWFuZA0KKyAgICAgICBkZWZhdWx0SGFuZGxlcj0ib3JnLmVjbGlwc2Uuc3RlbS51aS5ncmFwaGVkaXRvci5oYW5kbGVycy5DYW5vbmljYWxHcmFwaERpc3BsYXkiDQorICAgICAgIGRlc2NyaXB0aW9uPSIlX1VJX0Nhbm9uaWNhbERpc3BsYXlfZGVzY3JpcHRpb24iDQorICAgICAgIGlkPSJvcmcuZWNsaXBzZS5zdGVtLnVpLmNvbW1hbmQuZGlzcGxheWNhbm9uaWNhbGlkZW50aWZpYWJsZSINCisgICAgICAgbmFtZT0iJV9VSV9DYW5vbmljYWxEaXNwbGF5X2xhYmVsIj4NCisgCSA8L2NvbW1hbmQ+DQorDQorICA8L2V4dGVuc2lvbj4NCisgIA0KKyAgIA0KKyAgDQorICANCisgIA0KKyAgDQorICANCisgIDxleHRlbnNpb24NCisgICAgICAgIHBvaW50PSJvcmcuZWNsaXBzZS5jb3JlLmV4cHJlc3Npb25zLmRlZmluaXRpb25zIj4NCisgICAgIA0KKyAgICAgDQorICAgICA8ZGVmaW5pdGlvbg0KKyAgICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLnN0ZW0udWkuaXNEaXNwbGF5YWJsZUlkZW50aWZpYWJsZV9vbGQiPg0KKyAgICAgICAgPHdpdGgNCisgICAgICAgICAgICAgIHZhcmlhYmxlPSJzZWxlY3Rpb24iPg0KKyAgICAgICAgICAgPGl0ZXJhdGUNCisgICAgICAgICAgICAgICAgIG9wZXJhdG9yPSJhbmQiPg0KKyAgICAgICAgICAgICAgPGFuZD4NCisgICAgICAgICAgICAgICAgIDxhZGFwdA0KKwkJCQkgICB0eXBlPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguR3JhcGgiPiANCisJCQkJPCEtLQ0KKyAgICAgICAgICAgICAgICAgICAgICAgdHlwZT0ib3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuRGVsZWdhdGluZ1dyYXBwZXJJdGVtUHJvdmlkZXIiPiANCisgICAgICAgICAgICAgICAgIC0tPiAgICAgICAgICAgICAgIA0KKyAgICAgICAgICAgICAgICAgPC9hZGFwdD4NCisgICAgICAgICAgICAgIDwvYW5kPg0KKyAgICAgICAgICAgPC9pdGVyYXRlPg0KKyAgICAgICAgPC93aXRoPg0KKyAgICAgPC9kZWZpbml0aW9uPg0KKyAgICAgDQorICAgICANCisgICAgIDxkZWZpbml0aW9uDQorICAgICAgICAgICBpZD0ib3JnLmVjbGlwc2Uuc3RlbS51aS5pc0Rpc3BsYXlhYmxlSWRlbnRpZmlhYmxlIj4NCisgICAgICAgIDx3aXRoDQorICAgICAgICAgICAgICB2YXJpYWJsZT0ic2VsZWN0aW9uIj4NCisgICAgICAgICAgIDxpdGVyYXRlDQorICAgICAgICAgICAgICAgICBvcGVyYXRvcj0iYW5kIj4NCisgICAgICAgICAgICAgIDxhbmQ+DQorICAgICAgICAgICAgICAgICA8YWRhcHQNCisgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5EaXNwbGF5YWJsZSI+DQorICAgICAgICAgICAgICAgICA8L2FkYXB0Pg0KKyAgICAgICAgICAgICAgICAgPG5vdD4NCisgICAgICAgICAgICAgICAgICAgIDxyZWZlcmVuY2UNCisgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmluaXRpb25JZD0ib3JnLmVjbGlwc2Uuc3RlbS51aS5pc2V4ZWN1dGFibGUiPg0KKyAgICAgICAgICAgICAgICAgICAgPC9yZWZlcmVuY2U+DQorICAgICAgICAgICAgICAgICA8L25vdD4NCisgICAgICAgICAgICAgIDwvYW5kPg0KKyAgICAgICAgICAgICAgDQorICAgICAgICAgICA8L2l0ZXJhdGU+DQorICAgICAgICA8L3dpdGg+DQorICAgICA8L2RlZmluaXRpb24+DQorICAgICANCisgICAgIA0KKyAgICAgPGRlZmluaXRpb24gaWQ9Im9yZy5lY2xpcHNlLnN0ZW0udWkuaXNEaXNwbGF5YWJsZUNhbm9uaWNhbElkZW50aWZpYWJsZSI+DQorICAgICAgICA8d2l0aCB2YXJpYWJsZT0ic2VsZWN0aW9uIj4NCisgICAgICAgICAgIDxpdGVyYXRlIG9wZXJhdG9yPSJvciI+DQorICAgICAgICAgICAgICA8b3I+DQorICAgICAgICAgICAgICAgICA8IS0tDQorICAgICAgICAgICAgICAgICA8YWRhcHQNCisgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9Im9yZy5lY2xpcHNlLnN0ZW0udWkudmlld3MuZXhwbG9yZXIuSWRlbnRpZmlhYmxlVHJlZU5vZGUkTW9kZWxzVHJlZU5vZGUiPiAgICAgICAgICAgICAgIA0KKyAgICAgICAgICAgICAgICAgPC9hZGFwdD4NCisgICAgICAgICAgICAgICAgIC0tPg0KKyAgICAgICAgICAgICAgCSA8YWRhcHQNCisgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5Nb2RlbCI+ICAgICAgICAgICAgICAgDQorICAgICAgICAgICAgICAgICA8L2FkYXB0Pg0KKyAgICAgICAgICAgICAgICAgPGFkYXB0DQorICAgICAgICAgICAgICAgICAgICAgICB0eXBlPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuRGlzcGxheWFibGVDYW5vbmljYWwiPiAgICAgICAgICAgICAgIA0KKyAgICAgICAgICAgICAgICAgPC9hZGFwdD4NCisgICAgICAgICAgICAgIDwvb3I+DQorICAgICAgICAgICA8L2l0ZXJhdGU+DQorICAgICAgICA8L3dpdGg+DQorICAgICA8L2RlZmluaXRpb24+DQorICAgICANCisgICAgIA0KKyAgICAgDQorICA8L2V4dGVuc2lvbj4gICAgIA0KKzwvcGx1Z2luPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5ncmFwaGVkaXRvci9wbHVnaW5fZGUucHJvcGVydGllcyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5ncmFwaGVkaXRvci9wbHVnaW5fZGUucHJvcGVydGllcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMjViMDY2Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLmdyYXBoZWRpdG9yL3BsdWdpbl9kZS5wcm9wZXJ0aWVzCkBAIC0wLDAgKzEsMzMgQEAKKyMKKyMgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyMgICogQ29weXJpZ2h0IChjKSAyMDA2LCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorIyAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisjICAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorIyAgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorIyAgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorIyAgKgorIyAgKiBDb250cmlidXRvcnM6CisjICAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyMgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorIyBUbyBjb2RlIGRldmVsb3BlcjoKKyMgICBEbyBOT1QgY2hhbmdlIHRoZSBwcm9wZXJ0aWVzIGJldHdlZW4gdGhpcyBsaW5lIGFuZCB0aGUKKyMgICAiJSUlIEVORCBPRiBUUkFOU0xBVEVEIFBST1BFUlRJRVMgJSUlIiBsaW5lLgorIyAgIE1ha2UgYSBuZXcgcHJvcGVydHkgbmFtZSwgYXBwZW5kIHRvIHRoZSBlbmQgb2YgdGhlIGZpbGUgYW5kIGNoYW5nZQorIyAgIHRoZSBjb2RlIHRvIHVzZSB0aGUgbmV3IHByb3BlcnR5LgorIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorIyAlJSUgRU5EIE9GIFRSQU5TTEFURUQgUFJPUEVSVElFUyAlJSUKKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworcGx1Z2luTmFtZT1TVEVNIEJlbnV0emVyb2JlcmZsXHUwMGU0Y2hlbi1HcmFwaGVkaXRvcgorCitwcm92aWRlck5hbWU9RWNsaXBzZS5vcmcKKworCitfVUlfU1RFTV9Db21tYW5kX0Rpc3BsYXk9QW56ZWlnZQorX1VJX1NURU1fQ29tbWFuZF9EaXNwbGF5VFQ9R3JhcGhhbnplaWdlIFx1MDBmNmZmbmVuIHVuZCBLbm90ZW4gXHUwMGU0bmRlcm4KKworX1VJX1NURU1fQ29tbWFuZF9EaXNwbGF5Q2Fub25pY2FsPUthbm9uaXNjaGVuIEdyYXBoIGFuemVpZ2VuCitfVUlfU1RFTV9Db21tYW5kX0Rpc3BsYXlDYW5vbmljYWxUVD1HcmFwaGFuemVpZ2UgXHUwMGY2ZmZuZW4gdW5kIEtub3RlbiBcdTAwZTRuZGVybgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLmdyYXBoZWRpdG9yL3BsdWdpbl9rci5wcm9wZXJ0aWVzIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLmdyYXBoZWRpdG9yL3BsdWdpbl9rci5wcm9wZXJ0aWVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNiYTViOGYKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkuZ3JhcGhlZGl0b3IvcGx1Z2luX2tyLnByb3BlcnRpZXMKQEAgLTAsMCArMSwzMyBAQAorIworIyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIyAgKiBDb3B5cmlnaHQgKGMpIDIwMDYsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisjICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyMgICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisjICAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisjICAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisjICAqCisjICAqIENvbnRyaWJ1dG9yczoKKyMgICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorIyAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisjIFRvIGNvZGUgZGV2ZWxvcGVyOgorIyAgIERvIE5PVCBjaGFuZ2UgdGhlIHByb3BlcnRpZXMgYmV0d2VlbiB0aGlzIGxpbmUgYW5kIHRoZQorIyAgICIlJSUgRU5EIE9GIFRSQU5TTEFURUQgUFJPUEVSVElFUyAlJSUiIGxpbmUuCisjICAgTWFrZSBhIG5ldyBwcm9wZXJ0eSBuYW1lLCBhcHBlbmQgdG8gdGhlIGVuZCBvZiB0aGUgZmlsZSBhbmQgY2hhbmdlCisjICAgdGhlIGNvZGUgdG8gdXNlIHRoZSBuZXcgcHJvcGVydHkuCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisjICUlJSBFTkQgT0YgVFJBTlNMQVRFRCBQUk9QRVJUSUVTICUlJQorIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitwbHVnaW5OYW1lPVNURU0gVUkgXHVhZGY4XHViNzk4XHVkNTA0IFx1ZDNiOFx1YzlkMVx1YWUzMAorCitwcm92aWRlck5hbWU9RWNsaXBzZS5vcmcKKworCitfVUlfU1RFTV9Db21tYW5kX0Rpc3BsYXk9XHViNTE0XHVjMmE0XHVkNTBjXHViODA4XHVjNzc0CitfVUlfU1RFTV9Db21tYW5kX0Rpc3BsYXlUVD1cdWM2MjRcdWQ1MDggXHVhZGY4XHViNzk4XHVkNTA0IFx1YjE3OFx1YjRkY1x1Yjk3YyBcdWQ2NTVcdWM3NzhcdWQ1NThcdWFjZTAgXHVjMjE4XHVjODE1CisKK19VSV9TVEVNX0NvbW1hbmRfRGlzcGxheUNhbm9uaWNhbD1cdWQ0NWNcdWM5MDAgXHVhZGY4XHViNzk4XHVkNTA0IFx1ZDQ1Y1x1YzJkYworX1VJX1NURU1fQ29tbWFuZF9EaXNwbGF5Q2Fub25pY2FsVFQ9XHVjNjI0XHVkNTA4IFx1YWRmOFx1Yjc5OFx1ZDUwNCBcdWIxNzhcdWI0ZGNcdWI5N2MgXHVkNjU1XHVjNzc4XHVkNTU4XHVhY2UwIFx1YzIxOFx1YzgxNQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLmdyYXBoZWRpdG9yL3BsdWdpbl96aC5wcm9wZXJ0aWVzIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLmdyYXBoZWRpdG9yL3BsdWdpbl96aC5wcm9wZXJ0aWVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM3NGIyODIKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkuZ3JhcGhlZGl0b3IvcGx1Z2luX3poLnByb3BlcnRpZXMKQEAgLTAsMCArMSwzMyBAQAorIworIyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIyAgKiBDb3B5cmlnaHQgKGMpIDIwMDYsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisjICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyMgICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisjICAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisjICAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisjICAqCisjICAqIENvbnRyaWJ1dG9yczoKKyMgICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorIyAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisjIFRvIGNvZGUgZGV2ZWxvcGVyOgorIyAgIERvIE5PVCBjaGFuZ2UgdGhlIHByb3BlcnRpZXMgYmV0d2VlbiB0aGlzIGxpbmUgYW5kIHRoZQorIyAgICIlJSUgRU5EIE9GIFRSQU5TTEFURUQgUFJPUEVSVElFUyAlJSUiIGxpbmUuCisjICAgTWFrZSBhIG5ldyBwcm9wZXJ0eSBuYW1lLCBhcHBlbmQgdG8gdGhlIGVuZCBvZiB0aGUgZmlsZSBhbmQgY2hhbmdlCisjICAgdGhlIGNvZGUgdG8gdXNlIHRoZSBuZXcgcHJvcGVydHkuCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisjICUlJSBFTkQgT0YgVFJBTlNMQVRFRCBQUk9QRVJUSUVTICUlJQorIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitwbHVnaW5OYW1lPVNURU0gVUlcdTU2ZmVcdTVmNjJcdTdmMTZcdThmOTFcdTU2NjgKKworcHJvdmlkZXJOYW1lPUVjbGlwc2Uub3JnCisKKworX1VJX1NURU1fQ29tbWFuZF9EaXNwbGF5PVx1NjYzZVx1NzkzYQorX1VJX1NURU1fQ29tbWFuZF9EaXNwbGF5VFQ9XHU2MjUzXHU1ZjAwXHU1NmZlXHU1ZjYyXHU2N2U1XHU3NzBiXHU1NDhjXHU0ZmVlXHU2NTM5XHU4MjgyXHU3MGI5CisKK19VSV9TVEVNX0NvbW1hbmRfRGlzcGxheUNhbm9uaWNhbD1cdTY2M2VcdTc5M2FcdTg5YzRcdTgzMDNcdTU2ZmUKK19VSV9TVEVNX0NvbW1hbmRfRGlzcGxheUNhbm9uaWNhbFRUPVx1NjI1M1x1NWYwMFx1NTZmZVx1NWY2Mlx1NjdlNVx1NzcwYlx1NTQ4Y1x1NGZlZVx1NjUzOVx1ODI4Mlx1NzBiOQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLmdyYXBoZWRpdG9yL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL2dyYXBoZWRpdG9yL0FjdGl2YXRvci5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLmdyYXBoZWRpdG9yL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL2dyYXBoZWRpdG9yL0FjdGl2YXRvci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQwNWYxNWUKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkuZ3JhcGhlZGl0b3Ivc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvZ3JhcGhlZGl0b3IvQWN0aXZhdG9yLmphdmEKQEAgLTAsMCArMSwxMzAgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS51aS5ncmFwaGVkaXRvcjsNCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyAqIENvcHlyaWdodCAoYykgMjAwOSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4NCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzDQorICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wDQorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQNCisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbA0KKyAqDQorICogQ29udHJpYnV0b3JzOg0KKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24NCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCisNCitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TdGF0dXM7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnJlc291cmNlLkltYWdlRGVzY3JpcHRvcjsNCitpbXBvcnQgb3JnLmVjbGlwc2UudWkucGx1Z2luLkFic3RyYWN0VUlQbHVnaW47DQoraW1wb3J0IG9yZy5vc2dpLmZyYW1ld29yay5CdW5kbGVDb250ZXh0Ow0KKw0KKy8qKg0KKyAqIFRoZSBhY3RpdmF0b3IgY2xhc3MgY29udHJvbHMgdGhlIHBsdWctaW4gbGlmZSBjeWNsZQ0KKyAqLw0KK3B1YmxpYyBjbGFzcyBBY3RpdmF0b3IgZXh0ZW5kcyBBYnN0cmFjdFVJUGx1Z2luIHsNCisNCisJLyoqDQorCSAqIFRoZSBwbHVnLWluIElEDQorCSAqLyANCisJcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUExVR0lOX0lEID0gIm9yZy5lY2xpcHNlLnN0ZW0udWkuZ2UiOw0KKw0KKwkvLyBUaGUgc2hhcmVkIGluc3RhbmNlDQorCXByaXZhdGUgc3RhdGljIEFjdGl2YXRvciBwbHVnaW47DQorCQ0KKwkvKioNCisJICogVGhlIGNvbnN0cnVjdG9yDQorCSAqLw0KKwlwdWJsaWMgQWN0aXZhdG9yKCkgew0KKwkJcGx1Z2luID0gdGhpczsNCisJfQ0KKw0KKwkvKg0KKwkgKiAobm9uLUphdmFkb2MpDQorCSAqIEBzZWUgb3JnLmVjbGlwc2UudWkucGx1Z2luLkFic3RyYWN0VUlQbHVnaW4jc3RhcnQob3JnLm9zZ2kuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHQpDQorCSAqLw0KKwlAT3ZlcnJpZGUNCisJcHVibGljIHZvaWQgc3RhcnQoQnVuZGxlQ29udGV4dCBjb250ZXh0KSB0aHJvd3MgRXhjZXB0aW9uIHsNCisJCXN1cGVyLnN0YXJ0KGNvbnRleHQpOw0KKwl9DQorDQorCS8qDQorCSAqIChub24tSmF2YWRvYykNCisJICogQHNlZSBvcmcuZWNsaXBzZS51aS5wbHVnaW4uQWJzdHJhY3RVSVBsdWdpbiNzdG9wKG9yZy5vc2dpLmZyYW1ld29yay5CdW5kbGVDb250ZXh0KQ0KKwkgKi8NCisJQE92ZXJyaWRlDQorCXB1YmxpYyB2b2lkIHN0b3AoQnVuZGxlQ29udGV4dCBjb250ZXh0KSB0aHJvd3MgRXhjZXB0aW9uIHsNCisJCXBsdWdpbiA9IG51bGw7DQorCQlzdXBlci5zdG9wKGNvbnRleHQpOw0KKwl9DQorDQorCS8qKg0KKwkgKiBSZXR1cm5zIHRoZSBzaGFyZWQgaW5zdGFuY2UNCisJICoNCisJICogQHJldHVybiB0aGUgc2hhcmVkIGluc3RhbmNlDQorCSAqLw0KKwlwdWJsaWMgc3RhdGljIEFjdGl2YXRvciBnZXREZWZhdWx0KCkgew0KKwkJcmV0dXJuIHBsdWdpbjsNCisJfQ0KKw0KKwkvKioNCisJICogUmV0dXJucyBhbiBpbWFnZSBkZXNjcmlwdG9yIGZvciB0aGUgaW1hZ2UgZmlsZSBhdCB0aGUgZ2l2ZW4NCisJICogcGx1Zy1pbiByZWxhdGl2ZSBwYXRoDQorCSAqDQorCSAqIEBwYXJhbSBwYXRoIHRoZSBwYXRoDQorCSAqIEByZXR1cm4gdGhlIGltYWdlIGRlc2NyaXB0b3INCisJICovDQorCXB1YmxpYyBzdGF0aWMgSW1hZ2VEZXNjcmlwdG9yIGdldEltYWdlRGVzY3JpcHRvcihTdHJpbmcgcGF0aCkgew0KKwkJcmV0dXJuIGltYWdlRGVzY3JpcHRvckZyb21QbHVnaW4oUExVR0lOX0lELCBwYXRoKTsNCisJfQ0KKwkNCisJLyoqDQorCSAqIExvZyBhbiBlcnJvciB0byB0aGUgSUxvZyBmb3IgdGhpcyBwbHVnaW4NCisJICogDQorCSAqIEBwYXJhbSBtZXNzYWdlDQorCSAqICAgICAgICAgICAgdGhlIGxvY2FsaXplZCBlcnJvciBtZXNzYWdlIHRleHQNCisJICogQHBhcmFtIGV4Y2VwdGlvbg0KKwkgKiAgICAgICAgICAgIHRoZSBhc3NvY2lhdGVkIGV4Y2VwdGlvbiwgb3IgbnVsbA0KKwkgKi8NCisJcHVibGljIHN0YXRpYyB2b2lkIGxvZ0Vycm9yKFN0cmluZyBtZXNzYWdlLCBUaHJvd2FibGUgZXhjZXB0aW9uKSB7DQorCQlpZiAocGx1Z2luICE9IG51bGwpIHsNCisJCQlwbHVnaW4uZ2V0TG9nKCkubG9nKA0KKwkJCQluZXcgU3RhdHVzKElTdGF0dXMuRVJST1IsIHBsdWdpbi5nZXRCdW5kbGUoKS5nZXRTeW1ib2xpY05hbWUoKSwNCisJCQkJCQkwLCBtZXNzYWdlLCBleGNlcHRpb24pKTsNCisJICAgIH0NCisJfSAvLyBsb2dFcnJvcg0KKw0KKwkvKioNCisJICogTG9nIGluZm9ybWF0aW9uIHRvIHRoZSBJTG9nIGZvciB0aGlzIHBsdWdpbg0KKwkgKiANCisJICogQHBhcmFtIG1lc3NhZ2UNCisJICogICAgICAgICAgICB0aGUgbG9jYWxpemVkIGluZm9ybWF0aW9uIG1lc3NhZ2UgdGV4dA0KKwkgKiBAcGFyYW0gZXhjZXB0aW9uDQorCSAqICAgICAgICAgICAgdGhlIGFzc29jaWF0ZWQgZXhjZXB0aW9uLCBvciBudWxsDQorCSAqLw0KKwlwdWJsaWMgc3RhdGljIHZvaWQgbG9nSW5mbyhTdHJpbmcgbWVzc2FnZSwgVGhyb3dhYmxlIGV4Y2VwdGlvbikgew0KKwkJaWYgKHBsdWdpbiAhPSBudWxsKSB7DQorCQlwbHVnaW4uZ2V0TG9nKCkubG9nKA0KKwkJCQluZXcgU3RhdHVzKElTdGF0dXMuSU5GTywgcGx1Z2luLmdldEJ1bmRsZSgpLmdldFN5bWJvbGljTmFtZSgpLA0KKwkJCQkJCTAsIG1lc3NhZ2UsIGV4Y2VwdGlvbikpOw0KKwkJfQ0KKwl9IC8vIGxvZ0luZm9ybWF0aW9uDQorCQ0KKwkvKioNCisJICogTG9nIGluZm9ybWF0aW9uIHRvIHRoZSBJTG9nIGZvciB0aGlzIHBsdWdpbg0KKwkgKiBUaGUgbWV0aG9kIGlzIG92ZXJsb2FkZWQgdG8gYWxsb3cgZm9yIGxvZ0luZm9ybWF0aW9uIHdpdGhvdXQgYW4gZXJyb3IgDQorCSAqIG1ldGhvZCBzZXRzIHRoZSBlcnJvciB0byBudWxsLiBUaGlzIHNob3VsZCBiZSB1c2VkIGluc3RlYWQgb2YgU3lzdGVtLm91dC5wcmludGxuDQorCSAqIHRocm91Z2hvdXQgdGhlIGNvZGUuDQorCSAqIEBwYXJhbSBtZXNzYWdlDQorCSAqICAgICAgICAgICAgdGhlIGxvY2FsaXplZCBpbmZvcm1hdGlvbiBtZXNzYWdlIHRleHQNCisJICoNCisJICovDQorCXB1YmxpYyBzdGF0aWMgdm9pZCBsb2dJbmZvcm1hdGlvbihTdHJpbmcgbWVzc2FnZSkgew0KKwkJaWYocGx1Z2luICE9IG51bGwpIA0KKwkJCXBsdWdpbi5nZXRMb2coKS5sb2coDQorCQkJCW5ldyBTdGF0dXMoSVN0YXR1cy5JTkZPLCBwbHVnaW4uZ2V0QnVuZGxlKCkuZ2V0U3ltYm9saWNOYW1lKCksDQorCQkJCQkJMCwgbWVzc2FnZSwgbnVsbCkpOw0KKwkJCWVsc2UgDQorCQkJCS8vIE5vDQorCQkJCVN5c3RlbS5vdXQucHJpbnRsbihtZXNzYWdlKTsNCisJfSAvLyBsb2dJbmZvcm1hdGlvbg0KKw0KKw0KK30NCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkuZ3JhcGhlZGl0b3Ivc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvZ3JhcGhlZGl0b3IvQ29tYm9MaXN0ZW5lclR5cGUuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5ncmFwaGVkaXRvci9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9ncmFwaGVkaXRvci9Db21ib0xpc3RlbmVyVHlwZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM4YzA5YzMKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkuZ3JhcGhlZGl0b3Ivc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvZ3JhcGhlZGl0b3IvQ29tYm9MaXN0ZW5lclR5cGUuamF2YQpAQCAtMCwwICsxLDkyIEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0udWkuZ3JhcGhlZGl0b3I7DQorDQoraW1wb3J0IGphdmEudXRpbC5MaXN0Ow0KKw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuRUxpc3Q7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLkFyZWFMYWJlbDsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuUG9wdWxhdGlvbkxhYmVsOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLlNlbGVjdGlvbkV2ZW50Ow0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLlNlbGVjdGlvbkxpc3RlbmVyOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21ibzsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuTGFiZWw7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnplc3QuY29yZS53aWRnZXRzLkdyYXBoOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS56ZXN0LmNvcmUud2lkZ2V0cy5HcmFwaEl0ZW07DQoraW1wb3J0IG9yZy5lY2xpcHNlLnplc3QuY29yZS53aWRnZXRzLkdyYXBoTm9kZTsNCisNCitwdWJsaWMgY2xhc3MgQ29tYm9MaXN0ZW5lclR5cGUgaW1wbGVtZW50cyBTZWxlY3Rpb25MaXN0ZW5lcg0KK3sgDQorCQ0KKwkNCisJTm9kZURhdGEgbm9kZURhdGE7DQorCS8vY29ubmVjdGVkQ29tYm8gPSBWYWx1ZSBvZiBMYWJlbA0KKwlDb21ibyBjb25uZWN0ZWRDb21ibzsNCisJTGFiZWwgY29ubmVjdGVkTGFiZWw7DQorCUdyYXBoIHplc3RHcmFwaDsNCisJDQorCUNvbWJvTGlzdGVuZXJUeXBlKEdyYXBoIHplc3RHcmFwaCwgQ29tYm8gY29ubmVjdGVkQ29tYm8sIExhYmVsIGNvbm5lY3RlZExhYmVsKQ0KKwl7DQorCQkNCisJCXRoaXMuemVzdEdyYXBoID0gemVzdEdyYXBoOw0KKwkJdGhpcy5jb25uZWN0ZWRDb21ibyA9IGNvbm5lY3RlZENvbWJvOw0KKwkJdGhpcy5jb25uZWN0ZWRMYWJlbCA9IGNvbm5lY3RlZExhYmVsOw0KKwl9DQorCQ0KKwlwdWJsaWMgdm9pZCB3aWRnZXREZWZhdWx0U2VsZWN0ZWQoZmluYWwgU2VsZWN0aW9uRXZlbnQgZSkge30NCisJDQorCXB1YmxpYyB2b2lkIHdpZGdldFNlbGVjdGVkKGZpbmFsIFNlbGVjdGlvbkV2ZW50IGUpIHsNCisJCQ0KKwkJY29ubmVjdGVkQ29tYm8ucmVtb3ZlQWxsKCk7DQorCQlDb21ibyB0eXBlQ29tYm8gPSAoQ29tYm8pIGUud2lkZ2V0Ow0KKw0KKwkJDQorCQlMaXN0PEdyYXBoSXRlbT4gc2VsZWN0ZWRJdGVtcyA9IHplc3RHcmFwaC5nZXRTZWxlY3Rpb24oKTsNCisJCWlmIChzZWxlY3RlZEl0ZW1zLnNpemUoKSA9PSAxKQ0KKwkJew0KKwkJCWlmIChzZWxlY3RlZEl0ZW1zLmdldCgwKSBpbnN0YW5jZW9mIEdyYXBoTm9kZSkNCisJCQl7DQorCQkJCUdyYXBoTm9kZSBzZWxlY3RlZE5vZGUgPSAoR3JhcGhOb2RlKSBzZWxlY3RlZEl0ZW1zLmdldCgwKTsNCisJCQkJTm9kZURhdGEgbm9kZURhdGEgPSAoTm9kZURhdGEpIHNlbGVjdGVkTm9kZS5nZXREYXRhKCk7DQorCQkJCXRoaXMubm9kZURhdGEgPSBub2RlRGF0YTsNCisJCQkJDQorCQkJfQkJCQ0KKwkJfQ0KKwkJDQorCQlpZiAgKHRoaXMubm9kZURhdGEgPT0gbnVsbCkNCisJCQlyZXR1cm47DQorCQkNCisJCWludCBzZWxlY3RlZCA9IHR5cGVDb21iby5nZXRTZWxlY3Rpb25JbmRleCgpOw0KKwkJDQorCQkNCisJCWlmIChzZWxlY3RlZCA+PSAwKQ0KKwkJewkJCQkJCQ0KKwkJCQ0KKwkJCUVMaXN0PG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5Ob2RlTGFiZWw+IG5vZGVMYWJlbHMgPSBub2RlRGF0YS5nZXROb2RlTGFiZWxzKCk7DQorCQkJb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLk5vZGVMYWJlbCBub2RlTGFiZWwgPSBub2RlTGFiZWxzLmdldChzZWxlY3RlZCk7DQorCQkJTGlzdDxJbnRlZ2VyPiBsYWJlbFR5cGVzID0gbm9kZURhdGEuZ2V0Tm9kZUxhYmVsVHlwZXMoKTsNCisJCQkNCisJCQlzd2l0Y2gobGFiZWxUeXBlcy5nZXQoc2VsZWN0ZWQpKQ0KKwkJCXsNCisJCQljYXNlIEdyYXBoRGVmcy5BUkVBX0xBQkVMOiANCisJCQkJQXJlYUxhYmVsIGFyZWFMYWJlbCA9IChBcmVhTGFiZWwpIG5vZGVMYWJlbDsNCisJCQkJY29ubmVjdGVkQ29tYm8uYWRkKFN0cmluZy52YWx1ZU9mKGFyZWFMYWJlbC5nZXRDdXJyZW50QXJlYVZhbHVlKCkuZ2V0QXJlYSgpKSk7DQorCQkJCWNvbm5lY3RlZExhYmVsLnNldFRleHQoIlZhbHVlIChBcmVhIGttXjIpOiAiKTsNCisJCQkJY29ubmVjdGVkQ29tYm8uc2VsZWN0KDApOw0KKwkJCQlicmVhazsNCisJCQkNCisJCQkNCisJCQljYXNlIEdyYXBoRGVmcy5QT1BVTEFUSU9OX0xBQkVMOiANCisJCQkJUG9wdWxhdGlvbkxhYmVsIHBvcHVsYXRpb25MYWJlbCA9IChQb3B1bGF0aW9uTGFiZWwpIG5vZGVMYWJlbDsNCisJCQkJY29ubmVjdGVkQ29tYm8uYWRkKHBvcHVsYXRpb25MYWJlbC5nZXROYW1lKCkpOw0KKwkJCQljb25uZWN0ZWRDb21iby5hZGQoU3RyaW5nLnZhbHVlT2YocG9wdWxhdGlvbkxhYmVsLmdldEN1cnJlbnRQb3B1bGF0aW9uVmFsdWUoKS5nZXRDb3VudCgpKSk7DQorCQkJCWNvbm5lY3RlZENvbWJvLmFkZChTdHJpbmcudmFsdWVPZihwb3B1bGF0aW9uTGFiZWwuZ2V0UG9wdWxhdGVkQXJlYSgpKSk7DQorCQkJCWNvbm5lY3RlZExhYmVsLnNldFRleHQoIlZhbHVlIChQb3B1bGF0aW9uIG5hbWUpOiAiKTsNCisJCQkJY29ubmVjdGVkQ29tYm8uc2VsZWN0KDApOw0KKwkJCQlicmVhazsgDQorCQkJCQ0KKwkJCX0NCisJCQkNCisJCQkNCisJCX0NCisJCQkNCisJfQ0KK30NCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkuZ3JhcGhlZGl0b3Ivc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvZ3JhcGhlZGl0b3IvQ29tYm9MaXN0ZW5lclZhbHVlLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkuZ3JhcGhlZGl0b3Ivc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvZ3JhcGhlZGl0b3IvQ29tYm9MaXN0ZW5lclZhbHVlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTM0NWViMQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5ncmFwaGVkaXRvci9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9ncmFwaGVkaXRvci9Db21ib0xpc3RlbmVyVmFsdWUuamF2YQpAQCAtMCwwICsxLDE1MiBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnVpLmdyYXBoZWRpdG9yOw0KKw0KK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsNCisNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLkVMaXN0Ow0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5BcmVhTGFiZWw7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLlBvcHVsYXRpb25MYWJlbDsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LlNXVDsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5LZXlFdmVudDsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5LZXlMaXN0ZW5lcjsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5TZWxlY3Rpb25FdmVudDsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tYm87DQoraW1wb3J0IG9yZy5lY2xpcHNlLnplc3QuY29yZS53aWRnZXRzLkdyYXBoOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS56ZXN0LmNvcmUud2lkZ2V0cy5HcmFwaEl0ZW07DQoraW1wb3J0IG9yZy5lY2xpcHNlLnplc3QuY29yZS53aWRnZXRzLkdyYXBoTm9kZTsNCisNCisNCisvL2ZvciBtb2RpZmljYXRpb25zICh3aGVuIHR5cGVkIGluIHdpdGgga2V5Ym9hcmQpDQorcHVibGljIGNsYXNzIENvbWJvTGlzdGVuZXJWYWx1ZSBpbXBsZW1lbnRzIEtleUxpc3RlbmVyDQoreyANCisJDQorCQ0KKwlOb2RlRGF0YSBub2RlRGF0YTsNCisJR3JhcGggemVzdEdyYXBoOw0KKwlDb21ibyBjb25uZWN0ZWRDb21ibzsNCisJaW50IHNlbGVjdGVkVmFsdWUgPSAtMTsNCisJDQorCUNvbWJvTGlzdGVuZXJWYWx1ZShHcmFwaCB6ZXN0R3JhcGgsIENvbWJvIGNvbm5lY3RlZENvbWJvKQ0KKwl7CQkNCisJCXRoaXMuemVzdEdyYXBoID0gemVzdEdyYXBoOw0KKwkJdGhpcy5jb25uZWN0ZWRDb21ibyA9IGNvbm5lY3RlZENvbWJvOwkJDQorCX0NCisJDQorCQ0KKwlwdWJsaWMgdm9pZCB3aWRnZXREZWZhdWx0U2VsZWN0ZWQoZmluYWwgU2VsZWN0aW9uRXZlbnQgZSkge30NCisJDQorDQorCXB1YmxpYyB2b2lkIGtleVJlbGVhc2VkKGZpbmFsIEtleUV2ZW50IGUpIHsNCisJCQ0KKwkJaWYgKGUuY2hhcmFjdGVyPT1TV1QuQ1IgfHwgZS5jaGFyYWN0ZXI9PVNXVC5MRikNCisJCXsJDQorCQkgIGNvbm5lY3RlZENvbWJvLnNldEZvY3VzKCk7DQorCQl9DQorCQkNCisJCUNvbWJvIHZhbHVlQ29tYm8gPSAoQ29tYm8pIGUud2lkZ2V0Ow0KKwkJDQorCQkvL1N5c3RlbS5lcnIucHJpbnRsbigibmV3OiAiICsgdmFsdWVDb21iby5nZXRUZXh0KCkpOw0KKwkJDQorCQlpbnQgc2VsZWN0ZWRUeXBlID0gY29ubmVjdGVkQ29tYm8uZ2V0U2VsZWN0aW9uSW5kZXgoKTsgDQorLy8JCWlmIChlLmNoYXJhY3Rlcj09U1dULkNSIHx8IGUuY2hhcmFjdGVyPT1TV1QuTEYpDQorCQl7DQorCQkJDQorCQkJIA0KKwkJCUxpc3Q8R3JhcGhJdGVtPiBzZWxlY3RlZEl0ZW1zID0gemVzdEdyYXBoLmdldFNlbGVjdGlvbigpOw0KKwkJCWlmIChzZWxlY3RlZEl0ZW1zLnNpemUoKSA9PSAxKQ0KKwkJCXsNCisJCQkJaWYgKHNlbGVjdGVkSXRlbXMuZ2V0KDApIGluc3RhbmNlb2YgR3JhcGhOb2RlKQ0KKwkJCQl7DQorCQkJCQlHcmFwaE5vZGUgc2VsZWN0ZWROb2RlID0gKEdyYXBoTm9kZSkgc2VsZWN0ZWRJdGVtcy5nZXQoMCk7DQorCQkJCQlOb2RlRGF0YSBub2RlRGF0YSA9IChOb2RlRGF0YSkgc2VsZWN0ZWROb2RlLmdldERhdGEoKTsNCisJCQkJCXRoaXMubm9kZURhdGEgPSBub2RlRGF0YTsNCisJCQkJCQ0KKwkJCQl9CQkJDQorCQkJfQ0KKwkJCQ0KKwkJCWlmICAodGhpcy5ub2RlRGF0YSA9PSBudWxsKQ0KKwkJCQlyZXR1cm47DQorCQkJDQorCQkJDQorCQkJDQorCQkJaWYgKHNlbGVjdGVkVmFsdWUgPj0gMCkNCisJCQl7DQorCQkJCVN0cmluZyBvbGRWYWx1ZVN0cmluZyA9IHZhbHVlQ29tYm8uZ2V0SXRlbShzZWxlY3RlZFZhbHVlKTsJCQkNCisJCQkJU3RyaW5nIG5ld1ZhbHVlU3RyaW5nID0gdmFsdWVDb21iby5nZXRUZXh0KCkgOw0KKwkJCQkNCisJCQkJRUxpc3Q8b3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLk5vZGVMYWJlbD4gbm9kZUxhYmVscyA9IG5vZGVEYXRhLmdldE5vZGVMYWJlbHMoKTsNCisJCQkJb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLk5vZGVMYWJlbCBub2RlTGFiZWwgPSBub2RlTGFiZWxzLmdldChzZWxlY3RlZFR5cGUpOw0KKwkJCQlMaXN0PEludGVnZXI+IGxhYmVsVHlwZXMgPSBub2RlRGF0YS5nZXROb2RlTGFiZWxUeXBlcygpOw0KKwkJCQkNCisJCQkJc3dpdGNoKGxhYmVsVHlwZXMuZ2V0KHNlbGVjdGVkVHlwZSkpDQorCQkJCXsNCisJCQkJCWNhc2UgR3JhcGhEZWZzLkFSRUFfTEFCRUw6ICANCisJCQkJCQkJQXJlYUxhYmVsIGFyZWFMYWJlbCA9IChBcmVhTGFiZWwpIG5vZGVMYWJlbDsJCQkJCQkJDQorCQkJCQkJCWRvdWJsZSBuZXdBcmVhOw0KKwkJCQkJCQl0cnkgew0KKwkJCQkJCQkJbmV3QXJlYSA9IERvdWJsZS5wYXJzZURvdWJsZShuZXdWYWx1ZVN0cmluZyk7DQorCQkJCQkJCQl2YWx1ZUNvbWJvLnNldEl0ZW0oc2VsZWN0ZWRWYWx1ZSwgbmV3VmFsdWVTdHJpbmcpOw0KKwkJCQkJCQl9IGNhdGNoIChOdW1iZXJGb3JtYXRFeGNlcHRpb24gZXgpew0KKwkJCQkJCQkJbmV3QXJlYSA9IGFyZWFMYWJlbC5nZXRDdXJyZW50QXJlYVZhbHVlKCkuZ2V0QXJlYSgpOw0KKwkJCQkJCQkJdmFsdWVDb21iby5zZXRJdGVtKHNlbGVjdGVkVmFsdWUsIG9sZFZhbHVlU3RyaW5nKTsNCisJCQkJCQkJCXZhbHVlQ29tYm8uc2V0VGV4dChvbGRWYWx1ZVN0cmluZyk7DQorCQkJCQkJCX0NCisJCQkJCQkJDQorCQkJCQkJCWFyZWFMYWJlbC5nZXRDdXJyZW50QXJlYVZhbHVlKCkuc2V0QXJlYShuZXdBcmVhKTsJCQkJCQkNCisJCQkJCQkJYnJlYWs7DQorCQkJCQkNCisJCQkJCWNhc2UgR3JhcGhEZWZzLlBPUFVMQVRJT05fTEFCRUw6IAkNCisJCQkJCQlQb3B1bGF0aW9uTGFiZWwgcG9wdWxhdGlvbkxhYmVsID0gKFBvcHVsYXRpb25MYWJlbCkgbm9kZUxhYmVsOw0KKwkJCQkJCQkJCQkJDQorCQkJCQkJLy9vcmRlciBkZWZpbmVkIGluIG90aGVyIGxpc3RlbmVyDQorCQkJCQkJaWYgKHRoaXMuc2VsZWN0ZWRWYWx1ZSA9PSAwKSAvLyBwb3B1bGF0aW9uIG5hbWUNCisJCQkJCQl7DQorCQkJCQkJCXBvcHVsYXRpb25MYWJlbC5zZXROYW1lKG5ld1ZhbHVlU3RyaW5nKTsNCisJCQkJCQkJcG9wdWxhdGlvbkxhYmVsLnNldFBvcHVsYXRpb25JZGVudGlmaWVyKG5ld1ZhbHVlU3RyaW5nKTsNCisJCQkJCQkJdmFsdWVDb21iby5zZXRJdGVtKHNlbGVjdGVkVmFsdWUsIG5ld1ZhbHVlU3RyaW5nKTsNCisJCQkJCQl9DQorCQkJCQkJaWYgKHRoaXMuc2VsZWN0ZWRWYWx1ZSA9PSAxKSAvLyBwb3Agc2l6ZQ0KKwkJCQkJCXsNCisJCQkJCQkJZG91YmxlIG5ld0NvdW50Ow0KKwkJCQkJCQl0cnkgew0KKwkJCQkJCQkJbmV3Q291bnQgPSBEb3VibGUucGFyc2VEb3VibGUobmV3VmFsdWVTdHJpbmcpOw0KKwkJCQkJCQkJdmFsdWVDb21iby5zZXRJdGVtKHNlbGVjdGVkVmFsdWUsIG5ld1ZhbHVlU3RyaW5nKTsNCisJCQkJCQkJfSBjYXRjaCAoTnVtYmVyRm9ybWF0RXhjZXB0aW9uIGV4KXsNCisJCQkJCQkJCW5ld0NvdW50ID0gcG9wdWxhdGlvbkxhYmVsLmdldEN1cnJlbnRQb3B1bGF0aW9uVmFsdWUoKS5nZXRDb3VudCgpOw0KKwkJCQkJCQkJdmFsdWVDb21iby5zZXRJdGVtKHNlbGVjdGVkVmFsdWUsIG9sZFZhbHVlU3RyaW5nKTsNCisJCQkJCQkJCXZhbHVlQ29tYm8uc2V0VGV4dChvbGRWYWx1ZVN0cmluZyk7DQorCQkJCQkJCX0NCisJCQkJCQkJcG9wdWxhdGlvbkxhYmVsLmdldEN1cnJlbnRQb3B1bGF0aW9uVmFsdWUoKS5zZXRDb3VudChuZXdDb3VudCk7DQorCQkJCQkJfQ0KKwkJCQkJCWlmICh0aGlzLnNlbGVjdGVkVmFsdWUgPT0gMikgLy9wb3B1bGF0aW9uIGFyZWENCisJCQkJCQl7CWRvdWJsZSBuZXdQb3B1bGF0ZWRBcmVhOw0KKwkJCQkJCQl0cnkgew0KKwkJCQkJCQkJbmV3UG9wdWxhdGVkQXJlYSA9IERvdWJsZS5wYXJzZURvdWJsZShuZXdWYWx1ZVN0cmluZyk7DQorCQkJCQkJCQl2YWx1ZUNvbWJvLnNldEl0ZW0oc2VsZWN0ZWRWYWx1ZSwgbmV3VmFsdWVTdHJpbmcpOw0KKwkJCQkJCQl9IGNhdGNoIChOdW1iZXJGb3JtYXRFeGNlcHRpb24gZXgpew0KKwkJCQkJCQkJbmV3UG9wdWxhdGVkQXJlYSA9IHBvcHVsYXRpb25MYWJlbC5nZXRQb3B1bGF0ZWRBcmVhKCk7DQorCQkJCQkJCQl2YWx1ZUNvbWJvLnNldEl0ZW0oc2VsZWN0ZWRWYWx1ZSwgb2xkVmFsdWVTdHJpbmcpOw0KKwkJCQkJCQkJdmFsdWVDb21iby5zZXRUZXh0KG9sZFZhbHVlU3RyaW5nKTsNCisJCQkJCQkJfQkJCQkJCQ0KKwkJCQkJCQlwb3B1bGF0aW9uTGFiZWwuc2V0UG9wdWxhdGVkQXJlYShuZXdQb3B1bGF0ZWRBcmVhKTsNCisJCQkJCQl9CQkJCQkJDQorCQkJCQkJYnJlYWs7DQorCQkJCX0gLy9lbmQgc3dpdGNoDQorDQorCQkJfSAvLyBzZWxlY3RlZCB2YWx1ZSBpbmRleCBpbiBjb21ibyA+PSAwDQorCQl9IC8vIGlmIGtleT09RU5URVIJCQkJCQ0KKwl9DQorCQ0KKwkNCisJDQorCXB1YmxpYyB2b2lkIGtleVByZXNzZWQoZmluYWwgS2V5RXZlbnQgZSkgewkJDQorCQlDb21ibyB2YWx1ZUNvbWJvID0gKENvbWJvKSBlLndpZGdldDsJDQorCQkNCisJCS8vbm8gaWRlYSBidXQgc2VlbXMgdG8gYmUgbmVjZXNzYXJ5IGluIHNvbWUgY2FzZXMNCisJCWlmICh2YWx1ZUNvbWJvLmdldFNlbGVjdGlvbkluZGV4KCkgIT0gLTEpDQorCQl7IA0KKwkJCXRoaXMuc2VsZWN0ZWRWYWx1ZSA9IHZhbHVlQ29tYm8uZ2V0U2VsZWN0aW9uSW5kZXgoKTsgDQorCQl9DQorCQkNCisJCQ0KKwl9IC8vIGtleVByZXNzZWQgZm9yIGRhdGEgaW5wdXQNCit9IC8vZW5kIGNvbWJvIGxpc3RlbmVyIGZvciBOb2RlIExhYmVsIFZhbHVlcwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5ncmFwaGVkaXRvci9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9ncmFwaGVkaXRvci9Db21ib1NlbGVjdGlvbkxpc3RlbmVyVmFsdWUuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5ncmFwaGVkaXRvci9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9ncmFwaGVkaXRvci9Db21ib1NlbGVjdGlvbkxpc3RlbmVyVmFsdWUuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YTE1ZjJhCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLmdyYXBoZWRpdG9yL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL2dyYXBoZWRpdG9yL0NvbWJvU2VsZWN0aW9uTGlzdGVuZXJWYWx1ZS5qYXZhCkBAIC0wLDAgKzEsOTkgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS51aS5ncmFwaGVkaXRvcjsNCisNCitpbXBvcnQgamF2YS51dGlsLkxpc3Q7DQorDQoraW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuU2VsZWN0aW9uRXZlbnQ7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuU2VsZWN0aW9uTGlzdGVuZXI7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbWJvOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5MYWJlbDsNCitpbXBvcnQgb3JnLmVjbGlwc2UuemVzdC5jb3JlLndpZGdldHMuR3JhcGg7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnplc3QuY29yZS53aWRnZXRzLkdyYXBoSXRlbTsNCitpbXBvcnQgb3JnLmVjbGlwc2UuemVzdC5jb3JlLndpZGdldHMuR3JhcGhOb2RlOw0KKw0KKw0KKy8vIHdoZW4gc2VsZWN0aW9uIG9mIGxhYmVsIGNvbnRlbnRzIGNoYW5nZXMNCitwdWJsaWMgY2xhc3MgQ29tYm9TZWxlY3Rpb25MaXN0ZW5lclZhbHVlIGltcGxlbWVudHMgU2VsZWN0aW9uTGlzdGVuZXIgew0KKw0KKw0KKwlOb2RlRGF0YSBub2RlRGF0YTsNCisJR3JhcGggemVzdEdyYXBoOw0KKwlMYWJlbCBjb25uZWN0ZWRMYWJlbDsNCisJQ29tYm8gY29ubmVjdGVkQ29tYm87DQorCWludCBzZWxlY3RlZFZhbHVlID0gLTE7DQorCQ0KKwlDb21ib1NlbGVjdGlvbkxpc3RlbmVyVmFsdWUoR3JhcGggemVzdEdyYXBoLCBDb21ibyBjb25uZWN0ZWRDb21ibywgTGFiZWwgY29ubmVjdGVkTGFiZWwpDQorCXsNCisJCQ0KKwkJdGhpcy56ZXN0R3JhcGggPSB6ZXN0R3JhcGg7DQorCQl0aGlzLmNvbm5lY3RlZENvbWJvID0gY29ubmVjdGVkQ29tYm87DQorCQl0aGlzLmNvbm5lY3RlZExhYmVsID0gY29ubmVjdGVkTGFiZWw7DQorCQkNCisJfQ0KKwkNCisJDQorCXB1YmxpYyB2b2lkIHdpZGdldERlZmF1bHRTZWxlY3RlZChmaW5hbCBTZWxlY3Rpb25FdmVudCBlKSB7fQ0KKwkNCisNCisJcHVibGljIHZvaWQgd2lkZ2V0U2VsZWN0ZWQob3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5TZWxlY3Rpb25FdmVudCBlKSB7CQkJCQ0KKwkJQ29tYm8gdmFsdWVDb21ibyA9IChDb21ibykgZS53aWRnZXQ7CQ0KKwkJLy9ubyBpZGVhIGJ1dCBzZWVtcyB0byBiZSBuZWNlc3NhcnkgaW4gc29tZSBjYXNlcw0KKwkJaWYgKHZhbHVlQ29tYm8uZ2V0U2VsZWN0aW9uSW5kZXgoKSAhPSAtMSkNCisJCXsgDQorCQkJdGhpcy5zZWxlY3RlZFZhbHVlID0gdmFsdWVDb21iby5nZXRTZWxlY3Rpb25JbmRleCgpOyANCisJCX0NCisJCWludCBzZWxlY3RlZFR5cGUgPSBjb25uZWN0ZWRDb21iby5nZXRTZWxlY3Rpb25JbmRleCgpOyANCisJCQ0KKwkJTGlzdDxHcmFwaEl0ZW0+IHNlbGVjdGVkSXRlbXMgPSB6ZXN0R3JhcGguZ2V0U2VsZWN0aW9uKCk7DQorCQlpZiAoc2VsZWN0ZWRJdGVtcy5zaXplKCkgPT0gMSkNCisJCXsNCisJCQlpZiAoc2VsZWN0ZWRJdGVtcy5nZXQoMCkgaW5zdGFuY2VvZiBHcmFwaE5vZGUpDQorCQkJew0KKwkJCQlHcmFwaE5vZGUgc2VsZWN0ZWROb2RlID0gKEdyYXBoTm9kZSkgc2VsZWN0ZWRJdGVtcy5nZXQoMCk7DQorCQkJCU5vZGVEYXRhIG5vZGVEYXRhID0gKE5vZGVEYXRhKSBzZWxlY3RlZE5vZGUuZ2V0RGF0YSgpOw0KKwkJCQl0aGlzLm5vZGVEYXRhID0gbm9kZURhdGE7DQorCQkJCQ0KKwkJCX0JCQkNCisJCX0NCisJCQ0KKwkJaWYgICh0aGlzLm5vZGVEYXRhID09IG51bGwpDQorCQkJcmV0dXJuOw0KKwkJDQorCQkNCisJCWlmIChzZWxlY3RlZFZhbHVlID49IDApDQorCQl7DQorCQkJLypTdHJpbmcgb2xkVmFsdWVTdHJpbmcgPSB2YWx1ZUNvbWJvLmdldEl0ZW0oc2VsZWN0ZWRWYWx1ZSk7CQkJCQkJDQorCQkJU3RyaW5nIG5ld1ZhbHVlU3RyaW5nID0gdmFsdWVDb21iby5nZXRUZXh0KCk7DQorCQkJDQorCQkJRUxpc3Q8b3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLk5vZGVMYWJlbD4gbm9kZUxhYmVscyA9IG5vZGVEYXRhLmdldE5vZGVMYWJlbHMoKTsNCisJCQlvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguTm9kZUxhYmVsIG5vZGVMYWJlbCA9IG5vZGVMYWJlbHMuZ2V0KHNlbGVjdGVkVHlwZSk7Ki8NCisJCQlMaXN0PEludGVnZXI+IGxhYmVsVHlwZXMgPSBub2RlRGF0YS5nZXROb2RlTGFiZWxUeXBlcygpOw0KKwkJCQkNCisJCQlzd2l0Y2gobGFiZWxUeXBlcy5nZXQoc2VsZWN0ZWRUeXBlKSkNCisJCQl7DQorCQkJCWNhc2UgR3JhcGhEZWZzLkFSRUFfTEFCRUw6ICANCisJCQkJCQljb25uZWN0ZWRMYWJlbC5zZXRUZXh0KCJWYWx1ZSAoQXJlYSBrbV4yKTogIik7CQkJCQkJDQorCQkJCQkJYnJlYWs7DQorCQkJCQ0KKwkJCQljYXNlIEdyYXBoRGVmcy5QT1BVTEFUSU9OX0xBQkVMOiAJDQorCQkJCQkNCisJCQkJCQkJCQkJDQorCQkJCQkvL29yZGVyIGRlZmluZWQgaW4gb3RoZXIgbGlzdGVuZXINCisJCQkJCWlmICh0aGlzLnNlbGVjdGVkVmFsdWUgPT0gMCkgLy8gcG9wdWxhdGlvbiBuYW1lDQorCQkJCQl7DQorCQkJCQkJY29ubmVjdGVkTGFiZWwuc2V0VGV4dCgiVmFsdWUgKFBvcHVsYXRpb24gTmFtZSk6ICIpOwkNCisJCQkJCX0NCisJCQkJCWlmICh0aGlzLnNlbGVjdGVkVmFsdWUgPT0gMSkgLy8gcG9wIHNpemUNCisJCQkJCXsNCisJCQkJCQljb25uZWN0ZWRMYWJlbC5zZXRUZXh0KCJWYWx1ZSAoUG9wdWxhdGlvbiBTaXplKTogIik7CQ0KKwkJCQkJfQ0KKwkJCQkJaWYgKHRoaXMuc2VsZWN0ZWRWYWx1ZSA9PSAyKSAvL3BvcHVsYXRpb24gYXJlYQ0KKwkJCQkJewkNCisJCQkJCQljb25uZWN0ZWRMYWJlbC5zZXRUZXh0KCJWYWx1ZSAoUG9wdWxhdGlvbiBBcmVhKTogIik7CQ0KKwkJCQkJfQkJCQkJCQ0KKwkJCQkJYnJlYWs7DQorCQkJfSAvL2VuZCBzd2l0Y2gNCisNCisJCX0gLy8gc2VsZWN0ZWQgdmFsdWUgaW5kZXggaW4gY29tYm8gPj0gMA0KKwkJCQkJCQ0KKwl9IC8vIHdpZGdldCBzZWxlY3RlZA0KK30gLy9lbmQgY29tYm8gbGlzdGVuZXIgZm9yIE5vZGUgTGFiZWwgVmFsdWVzClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLmdyYXBoZWRpdG9yL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL2dyYXBoZWRpdG9yL0Nvbm5lY3Rpb25EYXRhLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkuZ3JhcGhlZGl0b3Ivc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvZ3JhcGhlZGl0b3IvQ29ubmVjdGlvbkRhdGEuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZWMwMWZhCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLmdyYXBoZWRpdG9yL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL2dyYXBoZWRpdG9yL0Nvbm5lY3Rpb25EYXRhLmphdmEKQEAgLTAsMCArMSwxMTEgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS51aS5ncmFwaGVkaXRvcjsNCisNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlVSSTsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkVkZ2VMYWJlbDsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5lZGdlcy5NaWdyYXRpb25FZGdlTGFiZWw7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLkNvbW1vbkJvcmRlclJlbGF0aW9uc2hpcExhYmVsOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5SZWxhdGl2ZVBoeXNpY2FsUmVsYXRpb25zaGlwTGFiZWw7DQorDQorcHVibGljIGNsYXNzIENvbm5lY3Rpb25EYXRhDQorew0KKwkNCisJVVJJIG5vZGVBVVJJOw0KKwlVUkkgbm9kZUJVUkk7DQorCVVSSSBlZGdlVVJJOw0KKwlFZGdlTGFiZWwgZWRnZUxhYmVsOw0KKwlTdHJpbmcgZWRnZVRpdGxlOw0KKwlTdHJpbmcgZWRnZUlkZW50aWZpZXI7DQorCQ0KKwlDb25uZWN0aW9uRGF0YShVUkkgbm9kZUFVUkksIFVSSSBub2RlQlVSSSwgVVJJIGVkZ2VVUkksIEVkZ2VMYWJlbCBlZGdlTGFiZWwsIFN0cmluZyBlZGdlVGl0bGUsIFN0cmluZyBlZGdlSWRlbnRpZmllcikNCisJew0KKwkJdGhpcy5ub2RlQVVSSSA9IG5vZGVBVVJJOw0KKwkJdGhpcy5ub2RlQlVSSSA9IG5vZGVCVVJJOw0KKwkJdGhpcy5lZGdlVVJJID0gZWRnZVVSSTsNCisJCXRoaXMuZWRnZUxhYmVsID0gZWRnZUxhYmVsOw0KKwkJdGhpcy5lZGdlSWRlbnRpZmllciA9IGVkZ2VJZGVudGlmaWVyOw0KKwkJdGhpcy5lZGdlVGl0bGUgPSBlZGdlVGl0bGU7DQorCX0NCisJDQorCVVSSSBnZXROb2RlQVVSSSgpDQorCXsNCisJCXJldHVybiB0aGlzLm5vZGVBVVJJOw0KKwl9DQorCQ0KKwlVUkkgZ2V0Tm9kZUJVUkkoKQ0KKwl7DQorCQlyZXR1cm4gdGhpcy5ub2RlQlVSSTsNCisJfQ0KKwkNCisJVVJJIGdldEVkZ2VVUkkoKQ0KKwl7DQorCQlyZXR1cm4gdGhpcy5lZGdlVVJJOw0KKwl9DQorCQ0KKwlFZGdlTGFiZWwgZ2V0RWRnZUxhYmVsKCkNCisJew0KKwkJcmV0dXJuIHRoaXMuZWRnZUxhYmVsOw0KKwl9DQorCQ0KKwlpbnQgZ2V0RWRnZUxhYmVsVHlwZSgpDQorCXsNCisJCWlmICh0aGlzLmVkZ2VMYWJlbCBpbnN0YW5jZW9mIE1pZ3JhdGlvbkVkZ2VMYWJlbCkNCisJCQlyZXR1cm4gR3JhcGhEZWZzLk1JR1JBVElPTl9FREdFOw0KKwkJaWYgKHRoaXMuZWRnZUxhYmVsIGluc3RhbmNlb2YgUmVsYXRpdmVQaHlzaWNhbFJlbGF0aW9uc2hpcExhYmVsKQ0KKwkJCXJldHVybiBHcmFwaERlZnMuQ09OVEFJTk1FTlRfRURHRTsJDQorCQlpZiAodGhpcy5lZGdlTGFiZWwgaW5zdGFuY2VvZiBDb21tb25Cb3JkZXJSZWxhdGlvbnNoaXBMYWJlbCkNCisJCQlyZXR1cm4gR3JhcGhEZWZzLkNPTU1PTl9CT1JERVJfRURHRTsNCisJCXJldHVybiBHcmFwaERlZnMuVU5ERUZJTkVEOw0KKwl9CQkNCisJDQorCVN0cmluZyBnZXRFZGdlSWRlbnRpZmllcigpDQorCXsNCisJCXJldHVybiB0aGlzLmVkZ2VJZGVudGlmaWVyOw0KKwl9DQorCQ0KKwlTdHJpbmcgZ2V0RWRnZVRpdGxlKCkNCisJew0KKwkJcmV0dXJuIHRoaXMuZWRnZVRpdGxlOw0KKwl9DQorCQ0KKwkNCisJdm9pZCBzZXRFZGdlTGFiZWxWYWx1ZShTdHJpbmcgdmFsdWUpDQorCXsNCisJCQ0KKwkJc3dpdGNoICh0aGlzLmdldEVkZ2VMYWJlbFR5cGUoKSkNCisJCXsNCisJCWNhc2UgR3JhcGhEZWZzLk1JR1JBVElPTl9FREdFOiANCisJCQlkb3VibGUgbmV3UmF0ZTsNCisJCQl0cnkgew0KKwkJCQluZXdSYXRlID0gRG91YmxlLnBhcnNlRG91YmxlKHZhbHVlKTsNCisJCQkJDQorCQkJfSBjYXRjaCAoTnVtYmVyRm9ybWF0RXhjZXB0aW9uIGV4KXsNCisJCQkJbmV3UmF0ZSA9ICgoTWlncmF0aW9uRWRnZUxhYmVsKXRoaXMuZWRnZUxhYmVsKS5nZXRDdXJyZW50VmFsdWUoKS5nZXRNaWdyYXRpb25SYXRlKCk7DQorCQkJfQ0KKwkJCSgoTWlncmF0aW9uRWRnZUxhYmVsKXRoaXMuZWRnZUxhYmVsKS5nZXRDdXJyZW50VmFsdWUoKS5zZXRNaWdyYXRpb25SYXRlKG5ld1JhdGUpOw0KKwkJCWJyZWFrOw0KKwkJfQ0KKwl9DQorCQ0KKwl2b2lkIHNldEVkZ2VUaXRsZShTdHJpbmcgZWRnZVRpdGxlKQ0KKwl7DQorCQl0aGlzLmVkZ2VUaXRsZSA9IGVkZ2VUaXRsZTsNCisJfQ0KKwkNCisJdm9pZCBzZXROb2RlQVVSSShTdHJpbmcgbm9kZUFVUkkpDQorCXsNCisJCXRoaXMubm9kZUFVUkkgPSBVUkkuY3JlYXRlVVJJKG5vZGVBVVJJKTsNCisJfQ0KKwkNCisJdm9pZCBzZXROb2RlQlVSSShTdHJpbmcgbm9kZUJVUkkpDQorCXsNCisJCXRoaXMubm9kZUJVUkkgPSBVUkkuY3JlYXRlVVJJKG5vZGVCVVJJKTsNCisJfQ0KKwkNCisJdm9pZCBzZXRFZGdlVVJJKFN0cmluZyBlZGdlVVJJKQ0KKwl7DQorCQl0aGlzLmVkZ2VVUkkgPSBVUkkuY3JlYXRlVVJJKGVkZ2VVUkkpOw0KKwl9DQorCQ0KKwkNCisJDQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5ncmFwaGVkaXRvci9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9ncmFwaGVkaXRvci9EaXNwbGF5UG9seWdvbi5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLmdyYXBoZWRpdG9yL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL2dyYXBoZWRpdG9yL0Rpc3BsYXlQb2x5Z29uLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTU0ODJhMwotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5ncmFwaGVkaXRvci9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9ncmFwaGVkaXRvci9EaXNwbGF5UG9seWdvbi5qYXZhCkBAIC0wLDAgKzEsMTIyIEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0udWkuZ3JhcGhlZGl0b3I7DQorDQoraW1wb3J0IGphdmEuYXd0LlBvbHlnb247DQoraW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7DQoraW1wb3J0IGphdmEudXRpbC5MaXN0Ow0KKw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmFkYXB0ZXJzLnNwYXRpYWwuZ2VvLkxhdExvbmcuU2VnbWVudDsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS51aS5BY3RpdmF0b3I7DQorDQorcHVibGljIGNsYXNzIERpc3BsYXlQb2x5Z29uIGV4dGVuZHMgUG9seWdvbiANCit7DQorCQ0KKwlQb2x5Z29uIHRyYW5zZm9ybWVkUG9seWdvbjsNCisJUG9seWdvbiBvcmlnaW5hbFBvbHlnb247DQorCWludCBucG9pbnRzOw0KKwlTdHJpbmcgbmFtZT0ibm8iOw0KKwkNCisJcHVibGljIERpc3BsYXlQb2x5Z29uIChTZWdtZW50IHNlZ21lbnQpDQorCXsNCisJCXRoaXMudHJhbnNmb3JtZWRQb2x5Z29uID0gZ2V0UG9seWdvbihzZWdtZW50KTsNCisJCXRoaXMub3JpZ2luYWxQb2x5Z29uID0gZ2V0UG9seWdvbihzZWdtZW50KTsNCisJCWlmICh0aGlzLm9yaWdpbmFsUG9seWdvbiA9PSBudWxsKSB0aGlzLm5wb2ludHM9MDsNCisJCWVsc2UgdGhpcy5ucG9pbnRzID0gdGhpcy5vcmlnaW5hbFBvbHlnb24ubnBvaW50czsNCisJCQ0KKwkJZm9yIChpbnQgaT0wOyBpPHRoaXMubnBvaW50czsgaSsrKQ0KKwkJew0KKwkJCXRoaXMudHJhbnNmb3JtZWRQb2x5Z29uLnhwb2ludHNbaV0gLz0gR3JhcGhEZWZzLlI7DQorCQkJdGhpcy50cmFuc2Zvcm1lZFBvbHlnb24ueXBvaW50c1tpXSAvPSBHcmFwaERlZnMuUjsNCisJCX0NCisJCQ0KKwl9DQorCQ0KKwlwdWJsaWMgRGlzcGxheVBvbHlnb24gKFN0cmluZyBuYW1lLCBTZWdtZW50IHNlZ21lbnQpDQorCXsNCisJCXRoaXMoc2VnbWVudCk7DQorCQl0aGlzLm5hbWUgPSBuYW1lOwkJDQorCQkNCisJfQ0KKwkNCisJZG91YmxlIGdldEFyZWEoKQ0KKwl7DQorCQkNCisJCQlkb3VibGUgYXJlYSA9IDA7DQorCQkJaW50W10geCA9IHRoaXMub3JpZ2luYWxQb2x5Z29uLnhwb2ludHM7DQorCQkJaW50W10geSA9IHRoaXMub3JpZ2luYWxQb2x5Z29uLnlwb2ludHM7DQorCQkJDQorDQorCQkJZm9yIChpbnQgaSA9IDA7IGkgPCB4Lmxlbmd0aC0xOyBpICsrKSB7DQorCQkJCWFyZWEgKz0gKCgoZG91YmxlKXhbaV0qKGRvdWJsZSl5W2krMV0pIC0gKChkb3VibGUpeFtpKzFdKihkb3VibGUpeVtpXSkpOw0KKwkJCX0NCisJCQlhcmVhIC89IDIuMDsNCisJCQlyZXR1cm4gYXJlYTsNCisJCQ0KKwl9DQorCQ0KKwkNCisJcHJpdmF0ZSBzdGF0aWMgUG9seWdvbiBnZXRQb2x5Z29uKFNlZ21lbnQgc2VnbWVudCkNCisJew0KKwkJIA0KKwkJIAkJCQ0KKwkJIGludCBzaXplID0gc2VnbWVudC5zaXplKCk7DQorCQkgaW50W10gbHQgPSBuZXcgaW50W3NpemVdOw0KKwkJIGludFtdIGxnID0gbmV3IGludFtzaXplXTsNCisJCSBmb3IgKGludCBpID0gMDsgaSA8IHNpemU7IGkgKyspIHsNCisJCQkgCQ0KKwkJCSAJaWYgKChzZWdtZW50LmxhdGl0dWRlKGkpID4gSW50ZWdlci5NQVhfVkFMVUUpIHx8IA0KKwkJCSAJCShzZWdtZW50LmxvbmdpdHVkZShpKSA+IEludGVnZXIuTUFYX1ZBTFVFKSkNCisJCQkgCQlBY3RpdmF0b3IubG9nRXJyb3IoIkNvb3JkaW5hdGUgcmFuZ2UgdG9vIGxhcmdlLi4uIEV4aXRpbmchIiwgbnVsbCk7DQorCQkJIAkNCisJCQkJbHRbaV0gPSAtKGludCkgTWF0aC5yb3VuZChzZWdtZW50LmxhdGl0dWRlKGkpKiAoaW50KSBHcmFwaERlZnMuUiAgKTsgDQorCQkJCWxnW2ldID0gKGludCkgTWF0aC5yb3VuZChzZWdtZW50LmxvbmdpdHVkZShpKSogKGludCkgR3JhcGhEZWZzLlIgKTsgDQorCQkgfQ0KKwkJDQorCQkgDQorCQkgIC8vIGNoZWNrIGlmIGl0IGlzIGEgcG9seWdvbiwgcmVwYWlyIGlmIG5lY2Vzc2FyeQ0KKwkJICBpZighKHNpemUgPiAyICYmIGx0WzBdID09IGx0W3NpemUtMV0gJiYgbGdbMF0gPT0gbGdbc2l6ZSAtIDFdDQorCQkJICkpIA0KKwkJICB7DQorCQkJICBpZiAoc2l6ZSA+IDIpIHsgDQorCQkJCSAgc2l6ZSsrOw0KKwkJCQkgIGludFtdIGx0X25ldyA9IG5ldyBpbnRbc2l6ZV07DQorCQkJCSAgaW50W10gbGdfbmV3ID0gbmV3IGludFtzaXplXTsNCisJCQkJICBmb3IgKGludCBpPTA7IGk8c2l6ZS0xOyBpKyspDQorCQkJCSAgew0KKwkJCQkJICBsdF9uZXdbaV0gPSBsdFtpXTsNCisJCQkJCSAgbGdfbmV3W2ldID0gbGdbaV07DQorCQkJCSAgfQ0KKwkJCQkgIGx0X25ld1tzaXplLTFdID0gbHRbMF07DQorCQkJCSAgbGdfbmV3W3NpemUtMV0gPSBsZ1swXTsNCisJCQkJICBpZihzaXplID4gMiAmJiBsdF9uZXdbMF0gPT0gbHRfbmV3W3NpemUtMV0gJiYgbGdfbmV3WzBdID09IGxnX25ld1tzaXplIC0gMV0pDQorCQkJCQkgcmV0dXJuIG5ldyBQb2x5Z29uKGxnX25ldywgbHRfbmV3LCBzaXplKTsNCisJCQkgIH0NCisJCQkgIGVsc2UgcmV0dXJuIG51bGw7DQorCQkgIH0NCisJCSANCisJCQ0KKwkJICByZXR1cm4gbmV3IFBvbHlnb24obGcsIGx0LCBzaXplKTsNCisJfQ0KKwkNCisJcHVibGljIFN0cmluZyBnZXROYW1lKCkNCisJew0KKwkJcmV0dXJuIHRoaXMubmFtZTsNCisJfQ0KKwkNCisJR21sUG9seWdvbiBnZXRVbnNjYWxlZEdtbFBvbHlnb24oKQ0KKwl7DQorCQkNCisJCUxpc3Q8RG91YmxlPiBsYXQgPSBuZXcgQXJyYXlMaXN0PERvdWJsZT4oKTsNCisJCUxpc3Q8RG91YmxlPiBsbmcgPSBuZXcgQXJyYXlMaXN0PERvdWJsZT4oKTsNCisJCQ0KKw0KKwkJZm9yIChpbnQgaT0wOyBpPHRoaXMub3JpZ2luYWxQb2x5Z29uLm5wb2ludHM7IGkrKykNCisJCXsNCisJCQlsYXQuYWRkKChkb3VibGUpdGhpcy5vcmlnaW5hbFBvbHlnb24ueHBvaW50c1tpXS9HcmFwaERlZnMuUik7DQorCQkJbG5nLmFkZCgoZG91YmxlKS10aGlzLm9yaWdpbmFsUG9seWdvbi55cG9pbnRzW2ldL0dyYXBoRGVmcy5SKTsNCisJCX0NCisJCQkJDQorCQlyZXR1cm4gbmV3IEdtbFBvbHlnb24odGhpcy5uYW1lLCBsYXQsIGxuZyk7DQorCX0NCisJDQorCQ0KK30NCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkuZ3JhcGhlZGl0b3Ivc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvZ3JhcGhlZGl0b3IvR21sUG9seWdvbi5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLmdyYXBoZWRpdG9yL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL2dyYXBoZWRpdG9yL0dtbFBvbHlnb24uamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYzQ0NzY1Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLmdyYXBoZWRpdG9yL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL2dyYXBoZWRpdG9yL0dtbFBvbHlnb24uamF2YQpAQCAtMCwwICsxLDEyOCBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnVpLmdyYXBoZWRpdG9yOw0KKw0KKy8qIENvcHlyaWdodCAoYykgMjAxMSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4NCisqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMNCisqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMA0KKyogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQNCisqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sDQorKg0KKyogQ29udHJpYnV0b3JzOg0KKyogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbg0KKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQorDQoraW1wb3J0IGphdmEuYXd0LlBvbHlnb247DQoraW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7DQoraW1wb3J0IGphdmEudXRpbC5MaXN0Ow0KK2ltcG9ydCBqYXZhLnV0aWwuU3RyaW5nVG9rZW5pemVyOw0KKw0KKw0KKw0KKy8qKg0KKyogSGVscGVyIENsYXNzIGZvciBjcmVhdGluZyBHTUwgZmlsZXMNCisqIA0KKyovDQorcHVibGljIGNsYXNzIEdtbFBvbHlnb24gew0KKwkNCisJDQorCVN0cmluZyBuYW1lID0gInVuZGVmaW5lZCI7Ly8kTk9OLU5MUy0xJA0KKwkNCisJTGlzdDxEb3VibGU+IGxhdCA9IG5ldyBBcnJheUxpc3Q8RG91YmxlPigpOw0KKwlMaXN0PERvdWJsZT4gbG5nID0gbmV3IEFycmF5TGlzdDxEb3VibGU+KCk7DQorCQ0KKw0KKwkvKioNCisJICogDQorCSAqIEBwYXJhbSBuYW1lDQorCSAqIA0KKwkgKi8NCisJcHVibGljIEdtbFBvbHlnb24oU3RyaW5nIG5hbWUpIHsNCisJCXRoaXMubmFtZSA9IG5hbWU7DQorCX0NCisJDQorCXB1YmxpYyBHbWxQb2x5Z29uKFN0cmluZyBuYW1lLCBMaXN0PERvdWJsZT4gbGF0LCBMaXN0PERvdWJsZT4gbG5nKSB7DQorCQl0aGlzLm5hbWUgPSBuYW1lOw0KKwkJdGhpcy5sYXQgPSBsYXQ7DQorCQl0aGlzLmxuZyA9IGxuZzsNCisJfQ0KKwkNCisJcHVibGljIEdtbFBvbHlnb24oU3RyaW5nIG5hbWUsIFBvbHlnb24gcG9seWdvbikgew0KKwkJdGhpcy5uYW1lID0gbmFtZTsNCisJCWZvciAoaW50IGk9MDsgaTxwb2x5Z29uLm5wb2ludHM7IGkrKykNCisJCXsNCisJCQlsYXQuYWRkKChkb3VibGUpcG9seWdvbi54cG9pbnRzW2ldKTsNCisJCQlsbmcuYWRkKChkb3VibGUpcG9seWdvbi55cG9pbnRzW2ldKTsJCQkNCisJCX0NCisJfQ0KKwkvKioNCisJICogDQorCSAqIEBwYXJhbSBkbGF0DQorCSAqIEBwYXJhbSBkbG5nDQorCSAqLw0KKwlwdWJsaWMgdm9pZCBhZGRQb2ludChkb3VibGUgZGxhdCwgZG91YmxlIGRsbmcpIHsNCisJCS8vQWN0aXZhdG9yLmxvZ0luZm9ybWF0aW9uKCJSRUFEICIrZGxhdCsiLCAiK2RsbmcpOw0KKwkJZG91YmxlIGZhY3RvciA9IEdyYXBoRGVmcy5SOw0KKwkJZGxhdCAqPSBmYWN0b3I7DQorCQlkbG5nICo9IGZhY3RvcjsNCisJCWxvbmcgaWxhdCA9IE1hdGgucm91bmQoZGxhdCk7DQorCQlsb25nIGlsbmcgPSBNYXRoLnJvdW5kKGRsbmcpOw0KKwkJZGxhdCA9IGlsYXQ7DQorCQlkbG5nID0gaWxuZzsNCisJCWRsYXQgLz0gZmFjdG9yOw0KKwkJZGxuZyAvPSBmYWN0b3I7DQorCQkvL0FjdGl2YXRvci5sb2dJbmZvcm1hdGlvbigicm91bmRlZCB0byAiK2RsYXQrIiwgIitkbG5nKTsNCisJCWxhdC5hZGQobmV3IERvdWJsZShkbGF0KSk7DQorCQlsbmcuYWRkKG5ldyBEb3VibGUoZGxuZykpOw0KKwl9Ly8gYWRkcG9pbnQNCisJDQorCS8qKg0KKwkgKiANCisJICogQHBhcmFtIHRva2Vuc0tNTA0KKwkgKi8NCisJcHVibGljIHZvaWQgYWRkUG9pbnQoU3RyaW5nIHRva2Vuc0tNTCkgew0KKwkJU3RyaW5nVG9rZW5pemVyIHN0ID0gbmV3IFN0cmluZ1Rva2VuaXplcih0b2tlbnNLTUwpOw0KKwkJU3RyaW5nIGRlbGltID0gIlxyXG4iOy8vJE5PTi1OTFMtMSQNCisJCWlmICh0b2tlbnNLTUwuaW5kZXhPZihkZWxpbSkgPD0gLTEpDQorCQkJZGVsaW0gPSAiXG4iOy8vJE5PTi1OTFMtMSQNCisJCXdoaWxlIChzdC5oYXNNb3JlVG9rZW5zKCkpIHsNCisJCQlTdHJpbmcgdmFseHl6ID0gc3QubmV4dFRva2VuKGRlbGltKS50cmltKCk7DQorCQkJU3RyaW5nVG9rZW5pemVyIHN0MiA9IG5ldyBTdHJpbmdUb2tlbml6ZXIodmFseHl6KTsNCisJCQl3aGlsZSAoc3QyLmhhc01vcmVUb2tlbnMoKSkgew0KKwkJCQlTdHJpbmcgbGF0ID0gc3QyLm5leHRUb2tlbigiLCIpOy8vJE5PTi1OTFMtMSQNCisJCQkJU3RyaW5nIGxuZyA9IHN0Mi5uZXh0VG9rZW4oIiwiKTsvLyROT04tTkxTLTEkDQorCQkJCUBTdXBwcmVzc1dhcm5pbmdzKCJ1bnVzZWQiKQ0KKwkJCQlTdHJpbmcgeiA9IHN0Mi5uZXh0VG9rZW4oIiwiKTsvLyROT04tTkxTLTEkDQorDQorCQkJCWRvdWJsZSBsdCA9IChuZXcgRG91YmxlKGxhdCkpLmRvdWJsZVZhbHVlKCk7DQorCQkJCWRvdWJsZSBsZyA9IChuZXcgRG91YmxlKGxuZykpLmRvdWJsZVZhbHVlKCk7DQorCQkJCWx0ICo9IEdyYXBoRGVmcy5SOw0KKwkJCQlsZyAqPSBHcmFwaERlZnMuUjsNCisJCQkJaW50IGlsdCA9IChpbnQpTWF0aC5yb3VuZChsdCk7DQorCQkJCWludCBpbGcgPSAoaW50KU1hdGgucm91bmQobGcpOw0KKwkJCQlsdCA9IChkb3VibGUpIGlsdDsNCisJCQkJbGcgPSAoZG91YmxlKSBpbGc7DQorCQkJCWx0IC89IEdyYXBoRGVmcy5SOw0KKwkJCQlsZyAvPSBHcmFwaERlZnMuUjsNCisJCQkJdGhpcy5hZGRQb2ludChsdCwgbGcpOw0KKwkJCX0NCisJCX0NCisJfS8vIGFkZHBvaW50DQorDQorCQ0KKwkvKioNCisJICogYWxsIGxhdCBsb25nIGRhdGEgYXMgYSBzaW5nbGUgc3RyaW5nIGZvciBmaWxlIG91dHB1dA0KKwkgKiBAcmV0dXJuIGFsbCBsYXQgbG9uZyBkYXRhIGFzIGEgc2luZ2xlIHN0cmluZw0KKwkgKi8NCisJcHVibGljIFN0cmluZyBnZXREYXRhKCkgew0KKwkJU3RyaW5nIHJldFZhbCA9ICIiOy8vJE5PTi1OTFMtMSQNCisJCWZvciAoaW50IGkgPSAwOyBpIDwgbGF0LnNpemUoKTsgaSArKykgew0KKwkJCWRvdWJsZSBsdCA9IGxhdC5nZXQoaSkuZG91YmxlVmFsdWUoKTsNCisJCQlkb3VibGUgbGcgPSBsbmcuZ2V0KGkpLmRvdWJsZVZhbHVlKCk7DQorCQkJLy8gdGhpcyBGSVhFUyB0aGUgb3JkZXIgdG8gd2hhdCBTVEVNIGV4cGVjdHMgdnMgS01MDQorCQkJcmV0VmFsICs9IGxnKyIgIitsdDsvLyROT04tTkxTLTEkDQorCQkJaWYgKGkgPCBsYXQuc2l6ZSgpLTEpIHJldFZhbCArPSAiICI7Ly8kTk9OLU5MUy0xJA0KKwkJfQ0KKwkJcmV0dXJuIHJldFZhbDsNCisJfQ0KKwkNCisJDQorfS8vIGdtbFBvbHlnb24NCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkuZ3JhcGhlZGl0b3Ivc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvZ3JhcGhlZGl0b3IvR3JhcGhDYW52YXMuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5ncmFwaGVkaXRvci9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9ncmFwaGVkaXRvci9HcmFwaENhbnZhcy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYxNDUxY2UKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkuZ3JhcGhlZGl0b3Ivc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvZ3JhcGhlZGl0b3IvR3JhcGhDYW52YXMuamF2YQpAQCAtMCwwICsxLDIyNDggQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS51aS5ncmFwaGVkaXRvcjsNCisNCitpbXBvcnQgamF2YS5hd3QuUG9seWdvbjsNCitpbXBvcnQgamF2YS50ZXh0LkRlY2ltYWxGb3JtYXQ7DQoraW1wb3J0IGphdmEudGV4dC5EZWNpbWFsRm9ybWF0U3ltYm9sczsNCitpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsNCitpbXBvcnQgamF2YS51dGlsLkNhbGVuZGFyOw0KK2ltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsNCitpbXBvcnQgamF2YS51dGlsLkhhc2hTZXQ7DQoraW1wb3J0IGphdmEudXRpbC5MaXN0Ow0KK2ltcG9ydCBqYXZhLnV0aWwuTG9jYWxlOw0KK2ltcG9ydCBqYXZhLnV0aWwuTWFwOw0KK2ltcG9ydCBqYXZhLnV0aWwuU2V0Ow0KKw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JQ29udGFpbmVyOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JRmlsZTsNCitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUZvbGRlcjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3Q7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklSZXNvdXJjZTsNCitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuUmVzb3VyY2VzUGx1Z2luOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQ29yZUV4Y2VwdGlvbjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQYXRoOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVByb2dyZXNzTW9uaXRvcjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLk51bGxQcm9ncmVzc01vbml0b3I7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmRyYXcyZC5Db2xvckNvbnN0YW50czsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLkVNYXA7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5VUkk7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0Ow0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUudXRpbC5FY29yZVV0aWw7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uYWRhcHRlcnMuZmlsZS5GaWxlOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuVXRpbGl0eTsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5JZGVudGlmaWFibGU7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5FZGdlOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguRWRnZUxhYmVsOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguTm9kZTsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLk5vZGVMYWJlbDsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLk1vZGVsOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmFkYXB0ZXJzLnNwYXRpYWwuU3BhdGlhbFByb3ZpZGVyQWRhcHRlcjsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5hZGFwdGVycy5zcGF0aWFsLmdlby5MYXRMb25nLlNlZ21lbnQ7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuYWRhcHRlcnMuc3BhdGlhbC5nZW8uTGF0TG9uZy5TZWdtZW50QnVpbGRlcjsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5hZGFwdGVycy5zcGF0aWFsLmdlby5MYXRMb25nUHJvdmlkZXI7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuYWRhcHRlcnMuc3BhdGlhbC5nZW8uTGF0TG9uZ1Byb3ZpZGVyQWRhcHRlckZhY3Rvcnk7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuYWRhcHRlcnMuc3BhdGlhbC5nZW8uUGxhdGZvcm1MYXRMb25nRGF0YVByb3ZpZGVyOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmVkZ2VzLk1pZ3JhdGlvbkVkZ2VMYWJlbDsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuQXJlYUxhYmVsOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5Db21tb25Cb3JkZXJSZWxhdGlvbnNoaXBMYWJlbDsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuTGFiZWxzRmFjdG9yeTsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuUG9wdWxhdGlvbkxhYmVsOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5SZWxhdGl2ZVBoeXNpY2FsUmVsYXRpb25zaGlwTGFiZWw7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLmltcGwuQXJlYUxhYmVsSW1wbDsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuaW1wbC5Qb3B1bGF0aW9uTGFiZWxJbXBsOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnVpLkFjdGl2YXRvcjsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS51aS5ncmFwaGVkaXRvci5oYW5kbGVycy5TYXZlSW5Qcm9qZWN0RGlhbG9nOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuU1dUOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLk1lbnVMaXN0ZW5lcjsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5Nb3VzZUV2ZW50Ow0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLk1vdXNlTGlzdGVuZXI7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuTW91c2VNb3ZlTGlzdGVuZXI7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuTW91c2VXaGVlbExpc3RlbmVyOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLlBhaW50RXZlbnQ7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuUGFpbnRMaXN0ZW5lcjsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5TZWxlY3Rpb25MaXN0ZW5lcjsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmdyYXBoaWNzLlBvaW50Ow0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZ3JhcGhpY3MuUmVjdGFuZ2xlOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QubGF5b3V0LkZpbGxMYXlvdXQ7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5sYXlvdXQuRm9ybUF0dGFjaG1lbnQ7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5sYXlvdXQuRm9ybURhdGE7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5sYXlvdXQuRm9ybUxheW91dDsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5HcmlkRGF0YTsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5Sb3dEYXRhOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QubGF5b3V0LlJvd0xheW91dDsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tYm87DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZTsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuRGlzcGxheTsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuTGFiZWw7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkxpc3RlbmVyOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5NZW51Ow0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5NZW51SXRlbTsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuU2hlbGw7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlRleHQ7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlRvb2xCYXI7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlRvb2xJdGVtOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS56ZXN0LmNvcmUud2lkZ2V0cy5HcmFwaDsNCitpbXBvcnQgb3JnLmVjbGlwc2UuemVzdC5jb3JlLndpZGdldHMuR3JhcGhDb25uZWN0aW9uOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS56ZXN0LmNvcmUud2lkZ2V0cy5HcmFwaEl0ZW07DQoraW1wb3J0IG9yZy5lY2xpcHNlLnplc3QuY29yZS53aWRnZXRzLkdyYXBoTm9kZTsNCisNCitwdWJsaWMgY2xhc3MgR3JhcGhDYW52YXMgew0KKwkNCisJLy9zZXQgc29tZSBnbG9iYWwgdmFyaWFibGVzIHRoYXQgYXJlIG5lY2Vzc2FyeSB0byBiZSBhY2Nlc3NlZCBmcm9tIHNldmVyYWwgbWV0aG9kcw0KKwlvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguR3JhcGggc3RlbUdyYXBoOw0KKwlEZWNpbWFsRm9ybWF0IGRmID0gbmV3IERlY2ltYWxGb3JtYXQoIjAuMDAiLCAgRGVjaW1hbEZvcm1hdFN5bWJvbHMuZ2V0SW5zdGFuY2UoTG9jYWxlLlVTKSk7DQorCS8vVE9ETyB3aGVuIGphdmEgMS42IGlzIHNldCANCisJLy9kZi5zZXRSb3VuZGluZ01vZGUoUm91bmRpbmdNb2RlLkhBTEZfVVApOw0KKw0KKwlkb3VibGUgem9vbUZhY3RvciA9IDEuMDsNCisJZG91YmxlIFpPT01JTkdfRkFDVE9SID0gMS4xOw0KKwlkb3VibGUgVU5aT09NSU5HX0ZBQ1RPUiA9IDEgLyBaT09NSU5HX0ZBQ1RPUjsNCisJZG91YmxlIG9mZnNldFg9MDsNCisJZG91YmxlIG9mZnNldFk9MDsNCisJZG91YmxlIHNjYWxlRmFjdG9yPTA7DQorCWludCBsYXN0T2Zmc2V0WD0wOw0KKwlpbnQgbGFzdE9mZnNldFk9MDsNCisJZmluYWwgaW50IE1BUkdJTiA9IDU7DQorCWJvb2xlYW4gY2FuY2VsPWZhbHNlOw0KKwkNCisJYm9vbGVhbiBsZWZ0TW91c2VCdXR0b25QcmVzc2VkPWZhbHNlOw0KKwlkb3VibGUgeFRyYW5zbGF0aW9uID0gMC4wLCB5VHJhbnNsYXRpb24gPSAwLjA7DQorCWZpbmFsIHN0YXRpYyBpbnQgCVVOREVGSU5FRCA9IEdyYXBoRGVmcy5VTkRFRklORUQgLCANCisJCQkJCQlNSUdSQVRJT05fRURHRSA9IEdyYXBoRGVmcy5NSUdSQVRJT05fRURHRSwgDQorCQkJCQkJQ09OVEFJTk1FTlRfRURHRSA9IEdyYXBoRGVmcy5DT05UQUlOTUVOVF9FREdFLA0KKwkJCQkJCUNPTU1PTl9CT1JERVJfRURHRSA9IEdyYXBoRGVmcy5DT01NT05fQk9SREVSX0VER0UsDQorCQkJCQkJQVJFQV9MQUJFTCA9IEdyYXBoRGVmcy5BUkVBX0xBQkVMLA0KKwkJCQkJCVBPUFVMQVRJT05fTEFCRUwgPSBHcmFwaERlZnMuUE9QVUxBVElPTl9MQUJFTCwNCisJIAkJCQkJTk9ERV9USVRMRT0gR3JhcGhEZWZzLk5PREVfVElUTEUsDQorCSAJCQkJCU5PREVfVVJJPSBHcmFwaERlZnMuTk9ERV9VUkksDQorCSAJCQkJCU5PREVfTEFCRUw9IEdyYXBoRGVmcy5OT0RFX0xBQkVMLA0KKwkgCQkJCQlFREdFX1RJVExFPSBHcmFwaERlZnMuRURHRV9USVRMRSwNCisJIAkJCQkJRURHRV9BVVJJPSBHcmFwaERlZnMuRURHRV9BVVJJLA0KKwkgCQkJCQlFREdFX0JVUkk9IEdyYXBoRGVmcy5FREdFX0JVUkksDQorCSAJCQkJCUVER0VfTEFCRUxfVkFMVUU9IEdyYXBoRGVmcy5FREdFX0xBQkVMX1ZBTFVFOw0KKwkNCisJLy9UT0RPIDogaGFuZGxlIGNvb3JkaW5hdGVzICogUiA+IGludGVnZXIgcmFuZ2UNCisJLy9SZXNjYWxlIGZvciBEYXRhDQorCXN0YXRpYyBkb3VibGUgUkZEID0gR3JhcGhEZWZzLlI7CQ0KKwkNCisJZG91YmxlIG1heExUPURvdWJsZS5ORUdBVElWRV9JTkZJTklUWSwgDQorCSAgIG1heExHPURvdWJsZS5ORUdBVElWRV9JTkZJTklUWSwNCisJICAgbWluTFQ9RG91YmxlLk1BWF9WQUxVRSwNCisJICAgbWluTEc9RG91YmxlLk1BWF9WQUxVRTsNCisJDQorCVJlY3RhbmdsZSB6ZXN0R3JhcGhCb3VuZHMgPSBudWxsOw0KKwlSZWN0YW5nbGUgZ3JhcGhCb3VuZHMgPSBudWxsOw0KKwkNCisNCisJTGlzdDxEaXNwbGF5UG9seWdvbj4gcG9seWdvbnNUb0RyYXcgPSBuZXcgQXJyYXlMaXN0PERpc3BsYXlQb2x5Z29uPigpOw0KKwlNYXA8U3RyaW5nLEdyYXBoTm9kZT4gR3JhcGhOb2RlcyA9IG5ldyBIYXNoTWFwPFN0cmluZywgR3JhcGhOb2RlPigpOw0KKw0KKwlNYXA8U3RyaW5nLEdyYXBoQ29ubmVjdGlvbj4gR3JhcGhDb25uZWN0aW9ucyA9IG5ldyBIYXNoTWFwPFN0cmluZywgR3JhcGhDb25uZWN0aW9uPigpOw0KKwkNCisJDQorCUxpc3Q8ZG91YmxlW10+IGNlbnRlcnMgPSBuZXcgQXJyYXlMaXN0PGRvdWJsZVtdPigpOw0KKwlNYXA8U3RyaW5nLFNldDxEaXNwbGF5UG9seWdvbj4+IG5vZGVJRDJQb2x5ID0gbmV3IEhhc2hNYXA8U3RyaW5nLCBTZXQ8RGlzcGxheVBvbHlnb24+PigpOw0KKw0KKw0KKw0KKw0KKwlNYXA8VVJJLExpc3Q8b3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLk5vZGVMYWJlbD4+IG5vZGVVUkkyTGFiZWwgPSBuZXcgSGFzaE1hcDxVUkksTGlzdDxvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguTm9kZUxhYmVsPj4oKTsNCisNCisJDQorDQorCUxpc3Q8b3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkdyYXBoPiBncmFwaExpc3Q7DQorDQorCQ0KKwkNCisJDQorCQ0KKwkNCisJcHVibGljIHZvaWQgZGlzcGxheShMaXN0PG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5HcmFwaD4gZ3JhcGhMaXN0LCBGaWxlIGZpbGUsIElQcm9qZWN0IHByb2plY3QpDQorCXsNCisJCWRpc3BsYXkoZ3JhcGhMaXN0LCBmaWxlLCBwcm9qZWN0LCBudWxsICk7DQorCX0NCisJDQorCQ0KKwlwdWJsaWMgdm9pZCBkaXNwbGF5KExpc3Q8b3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkdyYXBoPiBncmFwaExpc3QsIEZpbGUgZmlsZSwgSVByb2plY3QgcHJvamVjdCwgTW9kZWwgbW9kZWwpDQorCXsJDQorCQkNCisJCQ0KKwkJdGhpcy5ncmFwaExpc3QgPSBncmFwaExpc3Q7DQorCQkNCisJCS8vcmVsb2FkPw0KKwkJLypmaW5hbCBSZXNvdXJjZVNldCByZXNvdXJjZVNldCA9IG5ldyBSZXNvdXJjZVNldEltcGwoKTsNCisJCVJlc291cmNlIHJlc291cmNlOw0KKwkJZm9yIChvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguR3JhcGggZ3JhcGggOiBncmFwaExpc3QpDQorCQl7DQorCQkgIHJlc291cmNlID0gcmVzb3VyY2VTZXQuY3JlYXRlUmVzb3VyY2UoZ3JhcGguZ2V0VVJJKCkpOw0KKwkJICByZXNvdXJjZS5zZXRNb2RpZmllZCh0cnVlKTsNCisJCSAgSWRlbnRpZmlhYmxlIGlkID0gVXRpbGl0eS5nZXRJZGVudGlmaWFibGUocmVzb3VyY2UuZ2V0VVJJKCkpOwkJCQkNCisJCSAgaWYgKGlkIGluc3RhbmNlb2YgR3JhcGgpIGdyYXBoID0gKG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5HcmFwaCkgaWQ7DQorCQl9Ki8NCisJCQ0KKwkJDQorCQlvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguR3JhcGggY2Fub25pY2FsR3JhcGggPSBudWxsOw0KKwkJZm9yIChvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguR3JhcGggZ3JhcGggOiBncmFwaExpc3QpDQorCQl7DQorCQkJaWYgKGNhbm9uaWNhbEdyYXBoID09IG51bGwpDQorCQkJew0KKwkJCQljYW5vbmljYWxHcmFwaCA9IChvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguR3JhcGgpIEVjb3JlVXRpbC5jb3B5KGdyYXBoKTsNCisJCQl9DQorCQkJZWxzZQ0KKwkJCXsNCisJCQkJY2Fub25pY2FsR3JhcGguYWRkR3JhcGgoKG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5HcmFwaCkgRWNvcmVVdGlsLmNvcHkoZ3JhcGgpLCBudWxsKTsNCisJCQl9DQorCQl9DQorCQl0aGlzLnN0ZW1HcmFwaCA9IGNhbm9uaWNhbEdyYXBoOw0KKwkJDQorCQkNCisNCisNCisJCWZpbmFsIERpc3BsYXkgZGlzcGxheSA9IEFjdGl2YXRvci5nZXREZWZhdWx0KCkuZ2V0V29ya2JlbmNoKCkuZ2V0RGlzcGxheSgpOw0KKwkJZmluYWwgU2hlbGwgc2hlbGwgPSBuZXcgU2hlbGwoZGlzcGxheSk7CQkNCisJCXNoZWxsLnNldFRleHQoIlNURU0gR3JhcGggRWRpdG9yIik7DQorCQkNCisJCVN0cmluZyB0b3BDb21wb3NpdGVUZXh0ID0gIiI7DQorCQlpZiAoZ3JhcGhMaXN0LnNpemUoKSA+IDEpIA0KKwkJew0KKwkJIAl0b3BDb21wb3NpdGVUZXh0ID0gIkNhbm9uaWNhbCBHcmFwaCBvZiAiOw0KKwkJCWlmIChwcm9qZWN0ICE9IG51bGwpIHRvcENvbXBvc2l0ZVRleHQgKz0gIlwiIiArIHByb2plY3QuZ2V0TmFtZSgpICsgIlwiIjsNCisJCQlpZiAobW9kZWwgIT0gbnVsbCkgdG9wQ29tcG9zaXRlVGV4dCArPSAiXCIiICsgbW9kZWwuZ2V0RHVibGluQ29yZSgpLmdldFRpdGxlKCkrIlwiIjsNCisJCQlpZiAodG9wQ29tcG9zaXRlVGV4dC5lcXVhbHMoIiIpKSB0b3BDb21wb3NpdGVUZXh0ID0gc3RlbUdyYXBoLmdldFVSSSgpLmxhc3RTZWdtZW50KCk7DQorCQl9DQorCQllbHNlIHRvcENvbXBvc2l0ZVRleHQgPSBzdGVtR3JhcGguZ2V0VVJJKCkubGFzdFNlZ21lbnQoKTsNCisJCWZpbmFsIENvbXBvc2l0ZSB0b3BDb21wb3NpdGUgPSBjcmVhdGVUb3BDb21wb3NpdGUoc2hlbGwsIHRvcENvbXBvc2l0ZVRleHQpOwkJDQorCQlmaW5hbCBHcmFwaCB6ZXN0R3JhcGggPSBuZXcgR3JhcGgoc2hlbGwsIFNXVC5OT05FKTsNCisJCWZpbmFsIENvbXBvc2l0ZSBkYXRhQ29tcG9zaXRlID0gY3JlYXRlRGF0YUNvbXBvc2l0ZShzaGVsbCwgemVzdEdyYXBoKTsNCisJCWZpbmFsIENvbXBvc2l0ZSBib3R0b21Db21wb3NpdGUgPSBjcmVhdGVCb3R0b21Db21wb3NpdGUoc2hlbGwsIHplc3RHcmFwaCwgZmlsZSwgcHJvamVjdCk7DQorCQkNCisJCQ0KKwkJDQorCQkNCisJCWZpbmFsIEZvcm1MYXlvdXQgbGF5b3V0ID0gbmV3IEZvcm1MYXlvdXQoKTsNCisJCWxheW91dC5tYXJnaW5IZWlnaHQgPSBNQVJHSU47IA0KKwkJbGF5b3V0Lm1hcmdpbldpZHRoID0gTUFSR0lOOyANCisJCXNoZWxsLnNldExheW91dChsYXlvdXQpOw0KKwkJDQorCQkNCisJCWZpbmFsIEZvcm1EYXRhIHRvcENvbXBvc2l0ZUZvcm1EYXRhID0gbmV3IEZvcm1EYXRhKCk7DQorCQl0b3BDb21wb3NpdGUuc2V0TGF5b3V0RGF0YSh0b3BDb21wb3NpdGVGb3JtRGF0YSk7DQorCQl0b3BDb21wb3NpdGVGb3JtRGF0YS50b3AgPSBuZXcgRm9ybUF0dGFjaG1lbnQoMCwgMCk7DQorCQl0b3BDb21wb3NpdGVGb3JtRGF0YS5sZWZ0ID0gbmV3IEZvcm1BdHRhY2htZW50KDAsIDApOw0KKwkJdG9wQ29tcG9zaXRlRm9ybURhdGEucmlnaHQgPSBuZXcgRm9ybUF0dGFjaG1lbnQoMTAwLCAwKTsNCisJDQorCQkvL2dyYXBoIGNvbXBvc2l0ZQ0KKwkJZmluYWwgRm9ybURhdGEgZ3JhcGhSZW5kZXJlckZvcm1EYXRhID0gbmV3IEZvcm1EYXRhKDEwMDAsNjAwKTsNCisJCXplc3RHcmFwaC5zZXRMYXlvdXREYXRhKGdyYXBoUmVuZGVyZXJGb3JtRGF0YSk7DQorCQlncmFwaFJlbmRlcmVyRm9ybURhdGEudG9wID0gbmV3IEZvcm1BdHRhY2htZW50KHRvcENvbXBvc2l0ZSwgMCk7DQorCQlncmFwaFJlbmRlcmVyRm9ybURhdGEuYm90dG9tID0gbmV3IEZvcm1BdHRhY2htZW50KGRhdGFDb21wb3NpdGUsIDApOw0KKwkJZ3JhcGhSZW5kZXJlckZvcm1EYXRhLmxlZnQgPSBuZXcgRm9ybUF0dGFjaG1lbnQoMCwgMCk7DQorCQlncmFwaFJlbmRlcmVyRm9ybURhdGEucmlnaHQgPSBuZXcgRm9ybUF0dGFjaG1lbnQoMTAwLCAwKTsNCisJDQorCQlmaW5hbCBGb3JtRGF0YSBkYXRhQ29tcG9zaXRlRm9ybURhdGEgPSBuZXcgRm9ybURhdGEoKTsNCisJCWRhdGFDb21wb3NpdGUuc2V0TGF5b3V0RGF0YShkYXRhQ29tcG9zaXRlRm9ybURhdGEpOw0KKwkJZGF0YUNvbXBvc2l0ZUZvcm1EYXRhLmJvdHRvbSA9IG5ldyBGb3JtQXR0YWNobWVudChib3R0b21Db21wb3NpdGUsIDApOw0KKwkJZGF0YUNvbXBvc2l0ZUZvcm1EYXRhLmxlZnQgPSBuZXcgRm9ybUF0dGFjaG1lbnQoMCwgMCk7DQorCQlkYXRhQ29tcG9zaXRlRm9ybURhdGEucmlnaHQgPSBuZXcgRm9ybUF0dGFjaG1lbnQoMTAwLCAwKTsNCisJCQ0KKwkJDQorCQkvLyBCb3R0b20gQ29tcG9zaXRlDQorCQlmaW5hbCBGb3JtRGF0YSBib3R0b21Db21wb3NpdGVGb3JtRGF0YSA9IG5ldyBGb3JtRGF0YSgpOw0KKwkJYm90dG9tQ29tcG9zaXRlLnNldExheW91dERhdGEoYm90dG9tQ29tcG9zaXRlRm9ybURhdGEpOw0KKwkJYm90dG9tQ29tcG9zaXRlRm9ybURhdGEuYm90dG9tID0gbmV3IEZvcm1BdHRhY2htZW50KDEwMCwgMCk7DQorCQlib3R0b21Db21wb3NpdGVGb3JtRGF0YS5sZWZ0ID0gbmV3IEZvcm1BdHRhY2htZW50KDAsIDApOw0KKwkJYm90dG9tQ29tcG9zaXRlRm9ybURhdGEucmlnaHQgPSBuZXcgRm9ybUF0dGFjaG1lbnQoMTAwLCAwKTsNCisJCQ0KKwkNCisJCQ0KKwkJc2hlbGwucGFjaygpOw0KKwkNCisJDQorCQkNCisJCS8vYXNzaWduIG1hcDogVVJJIC0+IGxhYmVscyB0aGF0IGhhdmUgdGhpcyBVUkkgYXMgdGFyZ2V0DQorCQlFTWFwPFVSSSxvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguTm9kZUxhYmVsPiBncmFwaE5vZGVMYWJlbExpc3QgPSBzdGVtR3JhcGguZ2V0Tm9kZUxhYmVscygpOw0KKwkJZm9yKE1hcC5FbnRyeTxVUkksb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLk5vZGVMYWJlbD4gbm9kZUxhYmVsIDogZ3JhcGhOb2RlTGFiZWxMaXN0LmVudHJ5U2V0KCkpIA0KKwkJew0KKwkJCVVSSSBsYWJlbFVSSSA9IG5vZGVMYWJlbC5nZXRLZXkoKTsNCisJCQlvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguTm9kZUxhYmVsIHRtcExhYmVsID0gbm9kZUxhYmVsLmdldFZhbHVlKCk7CQkJCQkNCisJCQkNCisJCQlpZiAodG1wTGFiZWwgIT0gbnVsbCkNCisJCQl7DQorCQkJCWlmKG5vZGVVUkkyTGFiZWwuZ2V0KHRtcExhYmVsLmdldFVSSU9mSWRlbnRpZmlhYmxlVG9CZUxhYmVsZWQoKSkgPT0gbnVsbCkNCisJCQkJew0KKwkJCQkJTGlzdDxvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguTm9kZUxhYmVsPiBsYWJlbHMgPSBuZXcgQXJyYXlMaXN0PG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5Ob2RlTGFiZWw+KCk7DQorCQkJCQlsYWJlbHMuYWRkKHRtcExhYmVsKTsNCisJCQkJCW5vZGVVUkkyTGFiZWwucHV0KHRtcExhYmVsLmdldFVSSU9mSWRlbnRpZmlhYmxlVG9CZUxhYmVsZWQoKSwgbGFiZWxzKTsNCisJCQkJfQ0KKwkJCQllbHNlIA0KKwkJCQl7DQorCQkJCQlub2RlVVJJMkxhYmVsLmdldCh0bXBMYWJlbC5nZXRVUklPZklkZW50aWZpYWJsZVRvQmVMYWJlbGVkKCkpLmFkZCh0bXBMYWJlbCk7DQorCQkJCX0NCisJCQl9DQorCQkJDQorCQl9DQorCQkNCisNCisJCQ0KKwkJDQorDQorCQkvL2Fzc2lnbiBub2RlcyB0byBpbmRleCBpbiBsaXN0IG9mIGdyYXBocyB0aGF0IHdlcmUgZ2l2ZW4gdG8gdGhpcyBncmFwaENhbnZhcyBJbnN0YW5jZQkNCisNCisJCWludCBudW1ub2RlcyA9IHN0ZW1HcmFwaC5nZXROb2RlcygpLnNpemUoKTsNCisJCWZpbmFsIE1hcDxVUkksIEdyYXBoTm9kZT4gVVJJMkdyYXBobm9kZXMgPSBuZXcgSGFzaE1hcDxVUkksIEdyYXBoTm9kZT4oKTsNCisJCWludFtdIGFzc2lnbiA9IG5ldyBpbnRbbnVtbm9kZXNdOyANCisJCWlmIChncmFwaExpc3QgIT0gbnVsbCkgIA0KKwkJewkNCisJCQlpZiAoZ3JhcGhMaXN0LnNpemUoKSA+IDApIHsJCQ0KKwkJCQlmb3IgKGludCBpPTA7IGk8bnVtbm9kZXM7IGkrKykNCisJCQkJewkNCisJCQkJCVVSSSBVUklfaSA9IHN0ZW1HcmFwaC5nZXROb2RlcygpLmdldChpKS5nZXRLZXkoKTsNCisJCQkJCQ0KKwkJCQkJZm9yIChpbnQgaj0wOyBqPGdyYXBoTGlzdC5zaXplKCk7IGorKykNCisJCQkJCXsNCisJCQkJCQlpZiAoZ3JhcGhMaXN0LmdldChqKS5nZXROb2RlcygpLmdldChVUklfaSkgIT0gbnVsbCkNCisJCQkJCQl7IA0KKwkJCQkJCQlhc3NpZ25baV0gPSBqOwkJCQkJCQkNCisJCQkJCQl9DQorCQkJCQl9DQorCQkJCX0NCisJCQl9DQorCQl9DQorCQkNCisJCQ0KKwkJDQorCQkNCisJCQ0KKwkJLy8gRmlsbCBHcmFwaERpc3BsYXkgd2l0aCBub2Rlcw0KKwkJDQorCQkNCisJCS8vIFRoZSBzcGF0aWFsIGluZm9ybWF0aW9uIGluIHRyYW5zbGF0ZWQgaW50byBwb2x5Z29ucy4gRWFjaCBwb2x5Z29uIGhhcyBhIHplc3Qgbm9kZSANCisJCS8vIGluIGl0cyBjZW50ZXIuIFZpYSB0aGUgbGlzdHMgIm5vZGVJRDJQb2x5IiBhbmQgIkdyYXBoTm9kZXMiIFNURU0gbm9kZXMgYW5kIHBvbHlnb25zL3plc3Qgbm9kZXMNCisJCS8vIGFyZSBtYXBwZWQNCisJCQ0KKwkJZm9yIChpbnQgaT0wOyBpPG51bW5vZGVzOyBpKyspDQorCQl7CQ0KKwkJCU5vZGUgbiA9IHN0ZW1HcmFwaC5nZXROb2RlcygpLmdldChpKS5nZXRWYWx1ZSgpOw0KKwkJCQkJCQkJCQ0KKwkJCS8vYWRhcHROZXcgaXMgbmVjZXNzYXJ5LCBvdGhlcndpc2Ugb3BlbmluZyB0d28gdGltZXMgcmVzdWx0cyBpbiBlcnJhdGljIHNlZ21lbnQgcmVhZGluZw0KKwkJCS8vTGF0TG9uZ1Byb3ZpZGVyQWRhcHRlckZhY3RvcnkuSU5TVEFOQ0UuYWRhcHRBbGxOZXcobik7CQkJCQ0KKwkJCUxhdExvbmdQcm92aWRlciBsYXRMb25nUHJvdmlkZXIgPSAoTGF0TG9uZ1Byb3ZpZGVyKSBMYXRMb25nUHJvdmlkZXJBZGFwdGVyRmFjdG9yeS5JTlNUQU5DRQ0KKwkJICAgIC5hZGFwdE5ldyhuLCBMYXRMb25nUHJvdmlkZXIuY2xhc3MpOwkJCQkNCisJCQkNCisJCQkNCisJCQkNCisJCQkvL2lmIG5vZGUgaGFzIG5vIGxhYmVscywgYWRkIHRoZW0gZnJvbSBjYW5vbmljYWwgZ3JhcGggaW5mbyBpZiBhdmFpbGFibGUgDQorCQkJLy9pZiAobi5nZXRMYWJlbHMoKS5zaXplKCkgPT0gMCkNCisJCQkvL05PISBvdGhlcndpc2Ugc2V2ZXJhbCBsYWJlbHMgZnJvbSBkaWZmZXJlbnQgc291cmNlcyB3b250IGJlIHNob3duDQorCQkJew0KKwkJCQlVUkkgblVSSSA9IG4uZ2V0VVJJKCk7CQkJCQ0KKwkJCQlpZiAobm9kZVVSSTJMYWJlbC5nZXQoblVSSSkgIT0gbnVsbCkNCisJCQkJewlMaXN0PG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5Ob2RlTGFiZWw+IGxhYmVsTGlzdCA9IG5vZGVVUkkyTGFiZWwuZ2V0KG5VUkkpOyAgDQorCQkJCQlmb3IgKG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5Ob2RlTGFiZWwgbGFiZWw6IGxhYmVsTGlzdCkNCisJCQkJCXsJDQorCQkJCQkJaWYgKCFuLmdldExhYmVscygpLmNvbnRhaW5zKGxhYmVsKSkNCisJCQkJCQkJbi5nZXRMYWJlbHMoKS5hZGQobGFiZWwpOwkJCQkJDQorCQkJCQl9DQorCQkJCX0NCisJCQl9DQorCQkJDQorCQkJDQorCQkJDQorDQorCQkJTGlzdDxTZWdtZW50PiBzZWdtZW50cyA9IGxhdExvbmdQcm92aWRlci5nZXRMYXRMb25nKCkuZ2V0U2VnbWVudHMoKTsNCisJCQkNCisJCQlTZWdtZW50IHNlZ21lbnQgPSBudWxsOw0KKwkJCWlmIChzZWdtZW50cyAhPSBudWxsKQ0KKwkJCXsgDQorCQkJCVNldDxEaXNwbGF5UG9seWdvbj4gZGlzcGxheVBvbHlzID0gbmV3IEhhc2hTZXQ8RGlzcGxheVBvbHlnb24+KCk7IAkJDQorCQkJCS8vc3BhdGlhbCBpbmZvcm1hdGlvbiBjYW4gY29udGFpbiBzZXZlcmFsIGRpc2p1bmN0IGFyZWFzLCBzZWxlY3QgbGFyZ2VzdCBhcmVhIHRvDQorCQkJCS8vY2FsY3VsYXRlIGNlbnRlcg0KKwkJCQlpZiAoc2VnbWVudHMuc2l6ZSgpID49IDEpIA0KKwkJCQl7CWRvdWJsZSBsYXJnZXN0QXJlYSA9IC0xLjA7DQorCQkJCQlmb3IgKFNlZ21lbnQgc2VnbWVudF90bXA6IHNlZ21lbnRzKQ0KKwkJCQkJewkNCisJCQkJCQlEaXNwbGF5UG9seWdvbiBkUG9seWdvbiA9IG5ldyBEaXNwbGF5UG9seWdvbihuLmdldFVSSSgpLmxhc3RTZWdtZW50KCksIHNlZ21lbnRfdG1wKTsJCQkJDQorCQkJCSAgICAJcG9seWdvbnNUb0RyYXcuYWRkKGRQb2x5Z29uKTsNCisJCQkJICAgIAlkaXNwbGF5UG9seXMuYWRkKGRQb2x5Z29uKTsNCisJCQkJCQlkb3VibGUgYXJlYSA9IE1hdGguYWJzKGRQb2x5Z29uLmdldEFyZWEoKSk7DQorCQkJCQkJaWYoYXJlYSA+PSBsYXJnZXN0QXJlYSkgew0KKwkJCQkJCQlsYXJnZXN0QXJlYSA9IGFyZWE7DQorCQkJCQkJCXNlZ21lbnQgPSBzZWdtZW50X3RtcDsNCisJCQkJCQl9DQorCQkJCQkJDQorCQkJCQkJZm9yIChpbnQgej0wOyB6IDwgc2VnbWVudF90bXAuc2l6ZSgpOyB6KyspIAkJCQkNCisJCQkJICAgIAl7CQkJICAgIAkgIA0KKwkJCQkJCSAgbWluTFQgPSAoc2VnbWVudF90bXAubGF0aXR1ZGUoeikqUkZEIDwgbWluTFQpPyAgc2VnbWVudF90bXAubGF0aXR1ZGUoeikqUkZEIDogbWluTFQgOw0KKwkJCQkJCSAgbWF4TFQgPSAoc2VnbWVudF90bXAubGF0aXR1ZGUoeikqUkZEID4gbWF4TFQpPyAgc2VnbWVudF90bXAubGF0aXR1ZGUoeikqUkZEIDogbWF4TFQgOw0KKwkJCQkJCSAgbWluTEcgPSAoc2VnbWVudF90bXAubG9uZ2l0dWRlKHopKlJGRCA8IG1pbkxHKSA/IHNlZ21lbnRfdG1wLmxvbmdpdHVkZSh6KSpSRkQgOm1pbkxHIDsNCisJCQkJCQkgIG1heExHID0gKHNlZ21lbnRfdG1wLmxvbmdpdHVkZSh6KSpSRkQgPiBtYXhMRykgPyBzZWdtZW50X3RtcC5sb25naXR1ZGUoeikqUkZEIDptYXhMRyA7CQkJCQkgCQkJICAJCQkJCSAgDQorCQkJCSAgICAgICAgICANCisJCQkJICAgIAl9DQorCQkJCQl9DQorCQkJCQlub2RlSUQyUG9seS5wdXQobi5nZXREdWJsaW5Db3JlKCkuZ2V0SWRlbnRpZmllcigpLCBkaXNwbGF5UG9seXMpOw0KKwkJCQl9DQorCQkJCQ0KKwkJCQkNCisJCSAgICAJaWYgKChzZWdtZW50ICE9IG51bGwpICYmIChzZWdtZW50LnNpemUoKSA+IDApKQ0KKwkJCQl7DQorDQorCQkgICAgCQlkb3VibGVbXSBjID0gbGF0TG9uZ1Byb3ZpZGVyLmdldENlbnRlcigpOwkNCisJCSAgICAJCWNlbnRlcnMuYWRkKG5ldyBkb3VibGVbXXtjWzFdKlJGRCwgLWNbMF0qUkZEfSk7DQorCQkJCX0JCSAgICAJCQ0KKwkJCX0gLy8gaWYgc2VnbWVudHMgIT0gbnVsbAkNCisJCQkJCQkJCQkJDQorCQkJCQkJCQ0KKwkJCWZvciAoZG91YmxlW10gY2VudGVyIDogY2VudGVycykNCisJCQl7CQ0KKwkJCQlHcmFwaE5vZGUgZ3JhcGhDZW50ZXJOb2RlID0gbmV3IEdyYXBoTm9kZSh6ZXN0R3JhcGgsIFNXVC5OT05FLCAiIik7CQkJCQ0KKwkJCQlncmFwaENlbnRlck5vZGUuc2V0RGF0YShuZXcgTm9kZURhdGEobiwgDQorCQkJCQkJCQkJCWNlbnRlclswXSwNCisJCQkJCQkJCQkJY2VudGVyWzFdDQorCQkJCQkJCQkJCSkpOw0KKwkJCQlncmFwaENlbnRlck5vZGUuc2V0QmFja2dyb3VuZENvbG9yKGRpc3BsYXkuZ2V0U3lzdGVtQ29sb3IoKGFzc2lnbltpXSAlIDE0KSsyKSk7DQorCQkJCUdyYXBoTm9kZXMucHV0KG4uZ2V0RHVibGluQ29yZSgpLmdldElkZW50aWZpZXIoKSwgZ3JhcGhDZW50ZXJOb2RlKTsNCisJCQkJVVJJMkdyYXBobm9kZXMucHV0KG4uZ2V0VVJJKCksIGdyYXBoQ2VudGVyTm9kZSApOwkNCisJCQkJDQorCQkJfQ0KKwkJCWNlbnRlcnMuY2xlYXIoKTsNCisJCQkNCisJCQkNCisJCQluLmVBZGFwdGVycygpLnJlbW92ZShsYXRMb25nUHJvdmlkZXIpOw0KKwkJCWxhdExvbmdQcm92aWRlciA9IG51bGw7DQorCQl9IC8vIGVuZCBwdXR0aW5nIG5vZGVzIGludG8gZ3JhcGgsIHVudHJhbnNsYXRlZA0KKwkJDQorCQkNCisJCS8vIEZpbGwgR3JhcGhEaXNwbGF5IHdpdGggRWRnZXMNCisJCWludCBudW1lZGdlcyA9IHN0ZW1HcmFwaC5nZXRFZGdlcygpLnNpemUoKTsNCisJCWZvciAoaW50IGk9MDsgaTxudW1lZGdlczsgaSsrKQ0KKwkJew0KKwkJCUVkZ2UgZSA9IHN0ZW1HcmFwaC5nZXRFZGdlcygpLmdldChpKS5nZXRWYWx1ZSgpOw0KKwkJCVVSSSBub2RlQVVSSSA9IGUuZ2V0Tm9kZUFVUkkoKTsNCisJCQlVUkkgbm9kZUJVUkkgPSBlLmdldE5vZGVCVVJJKCk7DQorCQkJVVJJIGVkZ2VVUkkgPSBlLmdldFVSSSgpOw0KKwkJCQ0KKwkJCQ0KKwkJCUVkZ2VMYWJlbCBlZGdlTGFiZWwgPQllLmdldExhYmVsKCk7DQorCQkJU3RyaW5nIGVkZ2VJZGVudGlmaWVyID0gZS5nZXREdWJsaW5Db3JlKCkuZ2V0SWRlbnRpZmllcigpOw0KKwkJCVN0cmluZyBlZGdlVGl0bGU7DQorCQkJaWYgKGUuZ2V0RHVibGluQ29yZSgpLmdldFRpdGxlKCkgIT0gbnVsbCkgZWRnZVRpdGxlID0gZS5nZXREdWJsaW5Db3JlKCkuZ2V0VGl0bGUoKTsNCisJCQllbHNlIGVkZ2VUaXRsZSA9ICIiOw0KKwkJCQ0KKwkJCQkNCisJCQlpZiAoKFVSSTJHcmFwaG5vZGVzLmdldChub2RlQVVSSSkgIT0gbnVsbCkgJiYgDQorCQkJCQkoVVJJMkdyYXBobm9kZXMuZ2V0KG5vZGVCVVJJKSAhPSBudWxsKSkNCisJCQl7DQorCQkJICBHcmFwaENvbm5lY3Rpb24gZ2MgPSBuZXcgR3JhcGhDb25uZWN0aW9uKHplc3RHcmFwaCwgU1dULk5PTkUsIA0KKwkJCQkJVVJJMkdyYXBobm9kZXMuZ2V0KG5vZGVBVVJJKSwgVVJJMkdyYXBobm9kZXMuZ2V0KG5vZGVCVVJJKSk7DQorCQkJICBnYy5zZXREYXRhKG5ldyBDb25uZWN0aW9uRGF0YShub2RlQVVSSSwgbm9kZUJVUkksIGVkZ2VVUkksIGVkZ2VMYWJlbCwgZWRnZVRpdGxlLCBlZGdlSWRlbnRpZmllcikpOw0KKwkJCSAgR3JhcGhDb25uZWN0aW9ucy5wdXQoZWRnZUlkZW50aWZpZXIsIGdjKTsNCisJCQl9DQorCQkNCisJCX0NCisJCQ0KKwkJDQorCQkvL0Rpc3BsYXlCb3VuZHMNCisJCXplc3RHcmFwaEJvdW5kcyA9IHplc3RHcmFwaC5nZXRCb3VuZHMoKTsgDQorCQkNCisJCS8vQm91bmRzIG9mIGFjY3VtdWxhdGVkIHBvbHlnb25zDQorCQkvL29sZC0gIHRyYW5zcG9zZWQ6IGdyYXBoQm91bmRzID0gbmV3IFJlY3RhbmdsZSgoaW50KShtaW5MVCksIChpbnQpKG1pbkxHKSAsIChpbnQpKG1heExULW1pbkxUKSwgKGludCkobWF4TEctbWluTEcpKTsNCisJCWdyYXBoQm91bmRzID0gbmV3IFJlY3RhbmdsZSgoaW50KShtaW5MRyksIC0oaW50KShtaW5MVCttYXhMVC1taW5MVCkgLCAoaW50KShtYXhMRy1taW5MRyksIChpbnQpKG1heExULW1pbkxUKSk7DQorCQkvLyBjb21wdXRlIHRoZSBvZmZzZXQgYW5kIHNjYWxlIHNvIHRoYXQgc3RlbSBncmFwaCBmaXRzIHdlbGwgaW50byBkaXNwbGF5DQorCQljb21wdXRlVHJhbnNmb3JtKCk7CQ0KKwkJDQorCQ0KKwkJLy8gZHJhdyBQb2x5Z29ucw0KKwkJZmluYWwgUGFpbnRMaXN0ZW5lciBwb2x5Z29uUGFpbnRlciA9IG5ldyBQYWludExpc3RlbmVyKCkgew0KKwkJICAgICAgcHVibGljIHZvaWQgcGFpbnRDb250cm9sKFBhaW50RXZlbnQgZSkgew0KKwkJICAgIAkJDQorCQkJICAgIAkNCisJCQkgICAgCWUuZ2Muc2V0Q2xpcHBpbmcoemVzdEdyYXBoLmdldEJvdW5kcygpKTsgDQorCQkJICAgIAllLmdjLnNldEJhY2tncm91bmQoZGlzcGxheS5nZXRTeXN0ZW1Db2xvcihTV1QuQ09MT1JfR1JFRU4pKTsNCisJCQkJCWUuZ2Muc2V0Rm9yZWdyb3VuZChDb2xvckNvbnN0YW50cy5saWdodEdyYXkpOw0KKwkJCQkJZm9yIChmaW5hbCBEaXNwbGF5UG9seWdvbiBkaXNwbGF5UG9seWdvbiA6IHBvbHlnb25zVG9EcmF3KSANCisJCQkJCQkJZS5nYy5kcmF3UG9seWdvbihwb2x5QWRhcHRlcihkaXNwbGF5UG9seWdvbi50cmFuc2Zvcm1lZFBvbHlnb24pKTsNCisJCQkgICAgICAgIA0KKwkJCSAgICAgIH0NCisJCQkgICAgfTsNCisJCQ0KKwkJemVzdEdyYXBoLmFkZFBhaW50TGlzdGVuZXIocG9seWdvblBhaW50ZXIpOw0KKwkJDQorCQlyZWRyYXcoKTsNCisJDQorCQkNCisJCQ0KKwkJLy9yZW1vdmUgYXV0b21hdGljIHNjcm9sbCBiYXJzIHdoZW4gbm9kZXMgbGVhdmUgZGlzcGxheSwgcmVtb3ZlIG1vdXNlIHdoZWVsIHNjcm9sbGluZw0KKwkJemVzdEdyYXBoLnNldFZlcnRpY2FsU2Nyb2xsQmFyVmlzaWJpbGl0eSgwKTsgDQorCQl6ZXN0R3JhcGguc2V0SG9yaXpvbnRhbFNjcm9sbEJhclZpc2liaWxpdHkoMCk7DQorCQl6ZXN0R3JhcGguZ2V0Vmlld3BvcnQoKS5zZXRJZ25vcmVTY3JvbGwodHJ1ZSk7DQorCQ0KKwkJTGlzdGVuZXJbXSBsaXN0ZW5lcnMgPSB6ZXN0R3JhcGguZ2V0VmVydGljYWxCYXIoKS5nZXRMaXN0ZW5lcnMoU1dULlNlbGVjdGlvbik7DQorCQlmb3IgKGludCBpPTA7IGk8bGlzdGVuZXJzLmxlbmd0aDsgaSsrKQ0KKwkJew0KKwkJCXplc3RHcmFwaC5nZXRWZXJ0aWNhbEJhcigpLnJlbW92ZUxpc3RlbmVyKFNXVC5TZWxlY3Rpb24sIGxpc3RlbmVyc1swXSk7DQorCQkJemVzdEdyYXBoLmdldFZlcnRpY2FsQmFyKCkucmVtb3ZlTGlzdGVuZXIoU1dULlNlbGVjdGlvbiwgbGlzdGVuZXJzWzFdKTsNCisJCQkNCisJCX0NCisJCQ0KKwkJbGlzdGVuZXJzID0gemVzdEdyYXBoLmdldEhvcml6b250YWxCYXIoKS5nZXRMaXN0ZW5lcnMoU1dULlNlbGVjdGlvbik7DQorCQlmb3IgKGludCBpPTA7IGk8bGlzdGVuZXJzLmxlbmd0aDsgaSsrKQ0KKwkJew0KKwkJCXplc3RHcmFwaC5nZXRIb3Jpem9udGFsQmFyKCkucmVtb3ZlTGlzdGVuZXIoU1dULlNlbGVjdGlvbiwgbGlzdGVuZXJzWzBdKTsNCisJCQl6ZXN0R3JhcGguZ2V0SG9yaXpvbnRhbEJhcigpLnJlbW92ZUxpc3RlbmVyKFNXVC5TZWxlY3Rpb24sIGxpc3RlbmVyc1sxXSk7DQorCQl9DQorCQkNCisJCQkgICAgCSAgIA0KKwkgICAgDQorCQlzaGVsbC5vcGVuKCk7DQorCQkNCisJCXdoaWxlICghc2hlbGwuaXNEaXNwb3NlZCgpKSB7DQorCQkJd2hpbGUgKCFkaXNwbGF5LnJlYWRBbmREaXNwYXRjaCgpKSB7DQorCQkJCWRpc3BsYXkuc2xlZXAoKTsNCisJCQl9DQorCQl9IA0KKwkJLy9zaGVsbC5jbG9zZSgpOw0KKwkgDQorCQ0KKwkJDQorCQkNCisJCQ0KKwl9IC8vIGRpc3BsYXkNCisNCisNCisNCisNCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorKiAJR3JhcGhpYyBmdW5jdGlvbnMNCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQorCQ0KKw0KK3ByaXZhdGUgZG91YmxlW10gRDJOKGRvdWJsZSB4LCBkb3VibGUgeSkNCit7CSAJDQorICAgIGRvdWJsZSB4X2JhY2sgPSAoKHgvem9vbUZhY3RvcikgLSB4VHJhbnNsYXRpb24gLSBvZmZzZXRYKSAgLyBzY2FsZUZhY3RvcjsNCisJZG91YmxlIHlfYmFjayA9ICgoeS96b29tRmFjdG9yKSAtIHlUcmFuc2xhdGlvbiAtIG9mZnNldFkpICAvIHNjYWxlRmFjdG9yOyAgIA0KKwlyZXR1cm4gbmV3IGRvdWJsZVtde3hfYmFjayx5X2JhY2t9Ow0KK30NCisNCitwcml2YXRlIHZvaWQgem9vbU91dCgpIHsNCisJem9vbUZhY3RvciAqPSBVTlpPT01JTkdfRkFDVE9SOw0KKwlyZWRyYXcoKTsNCit9DQorDQorcHJpdmF0ZSB2b2lkIHpvb21JbigpIHsNCisJem9vbUZhY3RvciAqPSBaT09NSU5HX0ZBQ1RPUjsNCisJcmVkcmF3KCk7DQorfQ0KKw0KK3ByaXZhdGUgdm9pZCBhZGRUcmFuc2xhdGlvbiAoZmluYWwgZG91YmxlIHhUcmFuc2xhdGlvbkFkZGl0aW9uLCBmaW5hbCBkb3VibGUgeVRyYW5zbGF0aW9uQWRkaXRpb24pIA0KK3sNCit0aGlzLnhUcmFuc2xhdGlvbiArPSAoeFRyYW5zbGF0aW9uQWRkaXRpb24pIC96b29tRmFjdG9yOw0KK3RoaXMueVRyYW5zbGF0aW9uICs9ICh5VHJhbnNsYXRpb25BZGRpdGlvbikgLyB6b29tRmFjdG9yOw0KKw0KK3JlZHJhdygpOw0KK30gLy8gYWRkVHJhbnNsYXRpb24NCisNCisNCitwcml2YXRlIHZvaWQgYWRkVHJhbnNsYXRpb25Ub1BvbHkoRGlzcGxheVBvbHlnb24gcG9seWdvbiwgZmluYWwgZG91YmxlIHhUcmFuc2xhdGlvbkFkZGl0aW9uLCBmaW5hbCBkb3VibGUgeVRyYW5zbGF0aW9uQWRkaXRpb24pIA0KK3sgICAJDQorCQ0KKwlmb3IgKGludCBpPTA7IGk8cG9seWdvbi5ucG9pbnRzOyBpKyspDQorCXsNCisJCQ0KKwkJcG9seWdvbi50cmFuc2Zvcm1lZFBvbHlnb24ueHBvaW50c1tpXSArPSAoaW50KSAgeFRyYW5zbGF0aW9uQWRkaXRpb24gOw0KKwkJcG9seWdvbi50cmFuc2Zvcm1lZFBvbHlnb24ueXBvaW50c1tpXSArPSAoaW50KSAgeVRyYW5zbGF0aW9uQWRkaXRpb24gOw0KKwkJcG9seWdvbi5vcmlnaW5hbFBvbHlnb24ueHBvaW50c1tpXSArPSAoaW50KSAgeFRyYW5zbGF0aW9uQWRkaXRpb24qUkZEL3NjYWxlRmFjdG9yIC96b29tRmFjdG9yOw0KKwkJcG9seWdvbi5vcmlnaW5hbFBvbHlnb24ueXBvaW50c1tpXSArPSAoaW50KSAgeVRyYW5zbGF0aW9uQWRkaXRpb24qUkZEL3NjYWxlRmFjdG9yIC96b29tRmFjdG9yOw0KKwl9DQorCQ0KKwkNCit9DQorDQorcHJpdmF0ZSB2b2lkIGFkZFRyYW5zbGF0aW9uVG9Ob2RlKEdyYXBoTm9kZSBub2RlLCBmaW5hbCBkb3VibGUgeFRyYW5zbGF0aW9uLCBmaW5hbCBkb3VibGUgeVRyYW5zbGF0aW9uKSANCit7ICAgCQkJCQ0KKwkJTm9kZURhdGEgbm9kZURhdGEgPSAoTm9kZURhdGEpIG5vZGUuZ2V0RGF0YSgpOw0KKwkJbm9kZURhdGEub3JpZ1ggKz0geFRyYW5zbGF0aW9uKlJGRC9zY2FsZUZhY3RvciAvem9vbUZhY3RvcjsgDQorCQlub2RlRGF0YS5vcmlnWSArPSB5VHJhbnNsYXRpb24qUkZEL3NjYWxlRmFjdG9yIC96b29tRmFjdG9yOw0KKw0KK30NCisNCisNCisNCitwcml2YXRlIHZvaWQgcmVkcmF3KCkNCit7IA0KKwlkb3VibGUgb3JpZ1gsIG9yaWdZLCBkaXNwbGF5WCwgZGlzcGxheVk7DQorCQkNCisJZm9yIChEaXNwbGF5UG9seWdvbiBkaXNwbGF5UG9seWdvbiA6IHBvbHlnb25zVG9EcmF3KSB7CQkJDQorCQlmb3IgKGludCBpPTA7IGk8ZGlzcGxheVBvbHlnb24ubnBvaW50czsgaSsrKQ0KKwkJew0KKwkJCWRpc3BsYXlQb2x5Z29uLnRyYW5zZm9ybWVkUG9seWdvbi54cG9pbnRzW2ldID0gDQorCQkJCShpbnQpICgoZGlzcGxheVBvbHlnb24ub3JpZ2luYWxQb2x5Z29uLnhwb2ludHNbaV0vUkZEICogc2NhbGVGYWN0b3IgKyBvZmZzZXRYICsgeFRyYW5zbGF0aW9uKSAqIHpvb21GYWN0b3IpOw0KKwkJCQ0KKwkJCWRpc3BsYXlQb2x5Z29uLnRyYW5zZm9ybWVkUG9seWdvbi55cG9pbnRzW2ldID0gDQorCQkJCShpbnQpICgoZGlzcGxheVBvbHlnb24ub3JpZ2luYWxQb2x5Z29uLnlwb2ludHNbaV0vUkZEICogc2NhbGVGYWN0b3IgKyBvZmZzZXRZICsgeVRyYW5zbGF0aW9uKSAqIHpvb21GYWN0b3IpOwkJCQ0KKwkJfQkJDQorCX0NCisJDQorCQkNCisJZm9yIChNYXAuRW50cnk8U3RyaW5nLCBHcmFwaE5vZGU+IGVudHJ5IDogR3JhcGhOb2Rlcy5lbnRyeVNldCgpKQ0KKwl7IA0KKwkJR3JhcGhOb2RlIGduID0gZW50cnkuZ2V0VmFsdWUoKTsNCisJCU5vZGVEYXRhIG5vZGVEYXRhID0gKE5vZGVEYXRhKSBnbi5nZXREYXRhKCk7DQorCQlvcmlnWCA9IG5vZGVEYXRhLmdldE9yaWdYKCk7DQorCQlvcmlnWSA9IG5vZGVEYXRhLmdldE9yaWdZKCk7DQorCQkNCisJCWRpc3BsYXlYID0gKG9yaWdYL1JGRCAqIHNjYWxlRmFjdG9yICsgb2Zmc2V0WCArIHhUcmFuc2xhdGlvbikgKiB6b29tRmFjdG9yOw0KKwkJZGlzcGxheVkgPSAob3JpZ1kvUkZEICogc2NhbGVGYWN0b3IgKyBvZmZzZXRZICsgeVRyYW5zbGF0aW9uKSAqIHpvb21GYWN0b3I7DQorCQkNCisJCS8vVE9ETyBzY2FsaW5nIG9mIG5vZGUgc2l6ZSB3aXRoIHpvb20gZmFjdG9yDQorCQlpbnQgc2l6ZSA9IDEwOw0KKwkJZ24uc2V0U2l6ZShzaXplLCBzaXplKTsgDQorCQlnbi5zZXRMb2NhdGlvbiggZGlzcGxheVggLSBzaXplLzIsIGRpc3BsYXlZLSBzaXplLzIpOwkJCQkJCQ0KKwl9CQkJDQorfQ0KKw0KKw0KKw0KKw0KKy8vY29tcHV0ZXMgb2Zmc2V0cyBhbmQgc2NhbGluZw0KK3ByaXZhdGUgdm9pZCBjb21wdXRlVHJhbnNmb3JtKCkgew0KKwkNCisJUmVjdGFuZ2xlIHBvbHlnb25zQm91bmRzUmVjdCA9IGdyYXBoQm91bmRzOw0KKw0KKwkJaWYgKHBvbHlnb25zQm91bmRzUmVjdCA9PSBudWxsKSB7DQorCQkJcmV0dXJuOw0KKwkJfQ0KKw0KKwlmaW5hbCBSZWN0YW5nbGUgY2FudmFzQm91bmRzID0gemVzdEdyYXBoQm91bmRzOw0KKw0KKwlmaW5hbCBpbnQgZWZmZWN0aXZlQ2FudmFzV2lkdGggPSBjYW52YXNCb3VuZHMud2lkdGggLSAgTUFSR0lOOw0KKwlmaW5hbCBpbnQgZWZmZWN0aXZlQ2FudmFzSGVpZ2h0ID0gY2FudmFzQm91bmRzLmhlaWdodCAtIE1BUkdJTjsNCisJZmluYWwgZG91YmxlIHdpZHRoID0gcG9seWdvbnNCb3VuZHNSZWN0LndpZHRoL1JGRDsNCisJZmluYWwgZG91YmxlIGhlaWdodCA9IHBvbHlnb25zQm91bmRzUmVjdC5oZWlnaHQvUkZEOw0KKwlmaW5hbCBkb3VibGUgV0lEVEhfUkFUSU8gPSBlZmZlY3RpdmVDYW52YXNXaWR0aCAvIHdpZHRoOw0KKwlmaW5hbCBkb3VibGUgSEVJR0hUX1JBVElPID0gZWZmZWN0aXZlQ2FudmFzSGVpZ2h0IC8gaGVpZ2h0Ow0KKwlzY2FsZUZhY3RvciA9IE1hdGgubWluKFdJRFRIX1JBVElPLCBIRUlHSFRfUkFUSU8pICogem9vbUZhY3RvciAqIDAuOTsNCisJDQorCQ0KKwkNCisJLy8gRmlndXJlIG91dCB0aGUgZXh0cmEgdHJhbnNsYXRpb24gbmVlZGVkIHRvIGNlbnRlciB0aGUgaW1hZ2UgZWl0aGVyDQorCS8vIHZlcnRpY2FsbHkgb3IgaG9yaXpvbnRhbGx5IGluIHRoZSBjYW52YXMNCisJaW50IHhDZW50ZXJpbmdUcmFuc2xhdGlvbiA9IDA7DQorCWludCB5Q2VudGVyaW5nVHJhbnNsYXRpb24gPSAwOw0KKwkvLyBBbnl0aGluZyB0byBjZW50ZXI/DQorCWlmICh3aWR0aCA+IDAgJiYgaGVpZ2h0ID4gMCkgew0KKwkJLy8gWWVzDQorCQl4Q2VudGVyaW5nVHJhbnNsYXRpb24gPSAoaW50KShlZmZlY3RpdmVDYW52YXNXaWR0aCAtICAod2lkdGggKiBzY2FsZUZhY3RvcikpIC8gMiAtIGNhbnZhc0JvdW5kcy54LzI7DQorCQl5Q2VudGVyaW5nVHJhbnNsYXRpb24gPSAoaW50KShlZmZlY3RpdmVDYW52YXNIZWlnaHQgLSAoaGVpZ2h0ICogc2NhbGVGYWN0b3IpKSAvIDIgLSBjYW52YXNCb3VuZHMueS8yOw0KKwl9IC8vIGlmIGFueXRoaW5nIHRvIGNlbnRlcg0KKwkJDQorCW9mZnNldFggPSAtcG9seWdvbnNCb3VuZHNSZWN0LnggKiBzY2FsZUZhY3Rvci9SRkQgKyAgeENlbnRlcmluZ1RyYW5zbGF0aW9uOyANCisJb2Zmc2V0WSA9IC1wb2x5Z29uc0JvdW5kc1JlY3QueSAqIHNjYWxlRmFjdG9yL1JGRCArICB5Q2VudGVyaW5nVHJhbnNsYXRpb247DQorfSAvLyBjb21wdXRlVHJhbnNmb3JtDQorDQorCQ0KKw0KKw0KKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgU0FWSU5HIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorDQorcHJpdmF0ZSB2b2lkIHNhdmVHcmFwaChMaXN0PG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5HcmFwaD4gZ3JhcGhMaXN0LCBib29sZWFuIHNhdmVBcywgSVByb2plY3QgcHJvamVjdCkNCisNCit7DQorCQ0KKwlib29sZWFuIGNhbm9uaWNhbCA9IGdyYXBoTGlzdC5zaXplKCkgPiAxOw0KKw0KKwlVUkkgbmV3VVJJID0gbnVsbDsNCisJDQorCWlmIChzYXZlQXMgPT0gdHJ1ZSkgDQorCXsNCisJCS8vZmluYWwgU2F2ZUFzRGlhbG9nIHNhdmVBc0RpYWxvZyA9IG5ldyBTYXZlQXNEaWFsb2coQWN0aXZhdG9yLmdldERlZmF1bHQoKS5nZXRXb3JrYmVuY2goKS5nZXREaXNwbGF5KCkuZ2V0QWN0aXZlU2hlbGwoKSk7DQorCQlmaW5hbCBTYXZlSW5Qcm9qZWN0RGlhbG9nIHNhdmVBc0RpYWxvZyA9IG5ldyBTYXZlSW5Qcm9qZWN0RGlhbG9nKEFjdGl2YXRvci5nZXREZWZhdWx0KCkuZ2V0V29ya2JlbmNoKCkuZ2V0RGlzcGxheSgpLmdldEFjdGl2ZVNoZWxsKCkpOw0KKwkJc2F2ZUFzRGlhbG9nLm9wZW4oKTsNCisJCWZpbmFsIElQYXRoIHBhdGggPSBzYXZlQXNEaWFsb2cuZ2V0UmVzdWx0KCk7DQorCQkNCisJCS8vIERpZCB3ZSBnZXQgYSBwYXRoPw0KKwkJaWYgKHBhdGggIT0gbnVsbCkgew0KKwkJCS8vIFllcw0KKwkJCWZpbmFsIElGaWxlIHNhdmVBc0ZpbGUgPSBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuZ2V0Um9vdCgpDQorCQkJCQkuZ2V0RmlsZShwYXRoKTsNCisJCQkvLyBEaWQgd2UgZ2V0IGEgdmFsaWQgZmlsZT8NCisJCQlwcm9qZWN0ID0gc2F2ZUFzRmlsZS5nZXRQcm9qZWN0KCk7DQorCQkJaWYgKHNhdmVBc0ZpbGUgIT0gbnVsbCkgewkJCQ0KKw0KKwkJCQluZXdVUkkgPSBVUkkuY3JlYXRlUGxhdGZvcm1SZXNvdXJjZVVSSShzYXZlQXNGaWxlLmdldEZ1bGxQYXRoKCkudG9TdHJpbmcoKSk7CQkJCQkJCQkNCisJCQl9CQkJCQkJDQorCQkJCQkJDQorDQorCQl9DQorCQkJCQ0KKwl9DQorDQorCQ0KKwkNCisJTWFwPFVSSSxVUkk+IG9yaWcybmV3R3JhcGhVUkkgPSBuZXcgSGFzaE1hcDxVUkksVVJJPigpOw0KKwlNYXA8VVJJLFVSST4gb3JpZzJuZXdNb2RlbFVSSSA9IG5ldyBIYXNoTWFwPFVSSSxVUkk+KCk7DQorCQ0KKwlpZiAoIWNhbm9uaWNhbCkgLy9laXRoZXIgc2luZ2xlIGdyYXBoIG9yIGNhbm9uaWNhbCBncmFwaCAod2l0aCBzYXZlIGFzKQ0KKwl7CQ0KKwkJb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkdyYXBoIGdyYXBoID0gZ3JhcGhMaXN0LmdldCgwKTsNCisJCVVSSSBvcmlnVVJJID0gZ3JhcGguZ2V0VVJJKCk7DQorCQlpZiAobmV3VVJJID09bnVsbCkNCisJCXsNCisJCQkvL3RyYW5zZm9ybSBmaWxlcGF0aHMgdG8gcGxhdGZvcm0gcmVzb3VyY2UgVVJJIA0KKwkJCW5ld1VSSSA9IFVSSS5jcmVhdGVQbGF0Zm9ybVJlc291cmNlVVJJKHByb2plY3QuZ2V0TmFtZSgpICsgIi9ncmFwaHMvIiArIA0KKwkJCQkJZ3JhcGguZ2V0VVJJKCkubGFzdFNlZ21lbnQoKSk7DQorCQl9DQorCQlzYXZpbmcoZ3JhcGgsIHByb2plY3QsIG5ld1VSSSk7DQorCQkvL2xhdGVyIHNldCBuZXcgcmVmZXJlbmNlIGluIG1vZGVscyB3aGVuIHNhdmVkIChub3Qgc2F2ZSBhcyksIHNhdmUgaW5mbyBpbiBsaXN0CQ0KKwkJb3JpZzJuZXdHcmFwaFVSSS5wdXQob3JpZ1VSSSwgbmV3VVJJKTsNCisJCXRyeSB7IHByb2plY3QucmVmcmVzaExvY2FsKElSZXNvdXJjZS5ERVBUSF9JTkZJTklURSwgbnVsbCk7IH0NCisJCWNhdGNoIChFeGNlcHRpb24gZXgpIHsgQWN0aXZhdG9yLmxvZ0Vycm9yKGV4LmdldE1lc3NhZ2UoKSwgZXgpOyB9DQorDQorCQkNCisJfQ0KKw0KKwllbHNlIC8vaWYgKGNhbm9uaWNhbCk6IGl0IGlzIGEgY29sbGVjdGlvbiBvZiBncmFwaHMgdG8gYmUgc2F2ZWQ6IHNhdmUgYWxsIGdyYXBocyBpbiB0aGVpciBzcGVjaWZpYyBmaWxlcw0KKwl7DQorCQlmb3IgKG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5HcmFwaCBncmFwaCA6IGdyYXBoTGlzdCkNCisJCXsNCisJCQlVUkkgb3JpZ1VSSSA9IGdyYXBoLmdldFVSSSgpOw0KKwkJCWlmICghc2F2ZUFzKSAvL2V2ZXJ5IGdyYXBoIGdldHMgaXRzIG93biBmaWxlIFVSSSwgd2hlbiBzYXZlIGFzLCANCisJCQl7DQorCQkJCS8vdHJhbnNmb3JtIGZpbGVwYXRocyB0byBwbGF0Zm9ybSByZXNvdXJjZSBVUkkgDQorCQkJCW5ld1VSSSA9IFVSSS5jcmVhdGVQbGF0Zm9ybVJlc291cmNlVVJJKHByb2plY3QuZ2V0TmFtZSgpICsgIi9ncmFwaHMvIiArIA0KKwkJCQkJCWdyYXBoLmdldFVSSSgpLmxhc3RTZWdtZW50KCkpOw0KKwkJCX0NCisJCQlzYXZpbmcoZ3JhcGgsIHByb2plY3QsIG5ld1VSSSk7DQorCQkJLy9zZXQgbmV3IHJlZmVyZW5jZSBpbiBtb2RlbHMgd2hlbiBzYXZlZCAobm90IHNhdmUgYXMpDQorCQkJb3JpZzJuZXdHcmFwaFVSSS5wdXQob3JpZ1VSSSwgbmV3VVJJKTsNCisJCQl0cnkgeyBwcm9qZWN0LnJlZnJlc2hMb2NhbChJUmVzb3VyY2UuREVQVEhfSU5GSU5JVEUsIG51bGwpOyB9CQkNCisJCQljYXRjaCAoRXhjZXB0aW9uIGV4KSB7IA0KKwkJCQlBY3RpdmF0b3IubG9nRXJyb3IoZXguZ2V0TWVzc2FnZSgpLCBleCk7DQorCQkJfQ0KKwkJfSANCisJfQ0KKwkNCisNCisJDQorDQorCWlmICghc2F2ZUFzKSANCisJCXsJDQorCQkJLyogb2xkDQorCQkJTWFwPFN0cmluZywgTW9kZWw+IHByb2plY3RNb2RlbHMgPSBuZXcgSGFzaE1hcDxTdHJpbmcsIE1vZGVsPigpOwkJCQ0KKwkJCXByb2plY3RNb2RlbHMgPSBhZGRQcm9qZWN0TW9kZWxzKHByb2plY3RNb2RlbHMsIHByb2plY3QpOw0KKwkJCXByb2plY3RNb2RlbHMgPSBnZXRNb2RlbHMocHJvamVjdE1vZGVscyk7DQorCQkJCQkNCisJCQlmb3IgKE1hcC5FbnRyeTxTdHJpbmcsIE1vZGVsPiBlbnRyeSA6IHByb2plY3RNb2RlbHMuZW50cnlTZXQoKSkgew0KKwkJCQlNb2RlbCBtb2RlbCA9IGVudHJ5LmdldFZhbHVlKCk7CQkJCQ0KKwkJCQlzYXZlTW9kZWwobW9kZWwsIHByb2plY3QsIG9yaWcybmV3TW9kZWxVUkkpOw0KKwkJCX0JCQkNCisJCQl0cnkgeyBwcm9qZWN0LnJlZnJlc2hMb2NhbChJUmVzb3VyY2UuREVQVEhfSU5GSU5JVEUsIG51bGwpOyB9CQkNCisJCQljYXRjaCAoRXhjZXB0aW9uIGV4KSB7IEFjdGl2YXRvci5sb2dFcnJvcihleC5nZXRNZXNzYWdlKCksIGV4KTsgfQ0KKwkJCQkJCQkJCQkJCQ0KKwkJCXByb2plY3RNb2RlbHMgPSBuZXcgSGFzaE1hcDxTdHJpbmcsIE1vZGVsPigpOwkJCQ0KKwkJCXByb2plY3RNb2RlbHMgPSBhZGRQcm9qZWN0TW9kZWxzKHByb2plY3RNb2RlbHMsIHByb2plY3QpOw0KKwkJCXByb2plY3RNb2RlbHMgPSBnZXRNb2RlbHMocHJvamVjdE1vZGVscyk7DQorCQkJDQorCQkJZm9yIChNYXAuRW50cnk8U3RyaW5nLCBNb2RlbD4gZW50cnkgOiBwcm9qZWN0TW9kZWxzLmVudHJ5U2V0KCkpIHsNCisJCQkJTW9kZWwgbW9kZWwgPSBlbnRyeS5nZXRWYWx1ZSgpOw0KKwkJCQlvdXRwdXQobW9kZWwpOw0KKwkJCQl1cGRhdGVNb2RlbFJlZmVyZW5jZUFuZFNhdmUobW9kZWwsIHByb2plY3QsIG9yaWcybmV3R3JhcGhVUkksIG9yaWcybmV3TW9kZWxVUkkgKTsNCisJCQl9DQorCQkJKi8NCisJCQlMaXN0PE1vZGVsPiBwcm9qZWN0TW9kZWxzID0gbmV3IEFycmF5TGlzdDxNb2RlbD4oKTsJCQkNCisJCQlwcm9qZWN0TW9kZWxzID0gYWRkUHJvamVjdE1vZGVscyhwcm9qZWN0TW9kZWxzLCBwcm9qZWN0KTsNCisJCQlwcm9qZWN0TW9kZWxzID0gZ2V0TW9kZWxzKHByb2plY3RNb2RlbHMpOw0KKwkJCQ0KKwkJCWZvciAoTW9kZWwgbW9kZWwgOiBwcm9qZWN0TW9kZWxzKSB7IA0KKwkJCQlzYXZlTW9kZWwobW9kZWwsIHByb2plY3QsIG9yaWcybmV3TW9kZWxVUkkpOw0KKwkJCX0JCQkNCisJCQl0cnkgeyBwcm9qZWN0LnJlZnJlc2hMb2NhbChJUmVzb3VyY2UuREVQVEhfSU5GSU5JVEUsIG51bGwpOyB9CQkNCisJCQljYXRjaCAoRXhjZXB0aW9uIGV4KSB7fQ0KKwkJCQ0KKwkJCXByb2plY3RNb2RlbHMgPSBuZXcgQXJyYXlMaXN0PE1vZGVsPigpOwkJCQ0KKwkJCXByb2plY3RNb2RlbHMgPSBhZGRQcm9qZWN0TW9kZWxzKHByb2plY3RNb2RlbHMsIHByb2plY3QpOw0KKwkJCXByb2plY3RNb2RlbHMgPSBnZXRNb2RlbHMocHJvamVjdE1vZGVscyk7DQorCQkJDQorCQkJDQorCQkJZm9yIChNb2RlbCBtb2RlbCA6IHByb2plY3RNb2RlbHMpIHsgDQorCQkJCXVwZGF0ZU1vZGVsUmVmZXJlbmNlQW5kU2F2ZShtb2RlbCwgcHJvamVjdCwgb3JpZzJuZXdHcmFwaFVSSSwgb3JpZzJuZXdNb2RlbFVSSSApOw0KKwkJCX0NCisNCisJCQ0KKw0KKwkJCXRyeSB7DQorCQkJCXByb2plY3QudG91Y2gobnVsbCk7DQorCQkJCXByb2plY3QucmVmcmVzaExvY2FsKElSZXNvdXJjZS5ERVBUSF9JTkZJTklURSwgbnVsbCk7IA0KKwkJCQkvL3Byb2plY3QuY2xvc2UobnVsbCk7DQorCQkJCS8vcHJvamVjdC5vcGVuKG51bGwpOw0KKwkJCQl9CQkNCisJCQljYXRjaCAoRXhjZXB0aW9uIGV4KSB7IEFjdGl2YXRvci5sb2dFcnJvcihleC5nZXRNZXNzYWdlKCksIGV4KTsgfQ0KKwkNCisJCQlQbGF0Zm9ybUxhdExvbmdEYXRhUHJvdmlkZXIgcGxsZHAgPSBuZXcgUGxhdGZvcm1MYXRMb25nRGF0YVByb3ZpZGVyKCk7DQorCQkJcGxsZHAuZmx1c2goKTsNCisJCX0NCisJCQ0KKwkJDQorCQ0KK30NCisNCisNCitwcml2YXRlIHZvaWQgc2F2aW5nKG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5HcmFwaCBncmFwaCwgSVByb2plY3QgcHJvamVjdCwgVVJJIG5ld1VSSSkNCit7DQorCQ0KKwlTdHJpbmcgcHJvamVjdE5hbWUgPSBwcm9qZWN0LmdldE5hbWUoKTsJDQorCQkNCisJLy9tYWtlIGEgZGVlcCBjb3B5IG9mIHRoZSBncmFwaCB3aGVyZSBhbGwgY2hhbmdlcyBhcmUgbWFkZQ0KKwkNCisJQXJyYXlMaXN0PElkZW50aWZpYWJsZT4gbmV3bGlzdCA9IG5ldyBBcnJheUxpc3Q8SWRlbnRpZmlhYmxlPigpOw0KKwkNCisJLy9ub3Qgd29ya2luZywga2VlcCBmb3IgdGVzdGluZw0KKwkvKklkZW50aWZpYWJsZSBpZCA9IChJZGVudGlmaWFibGUpIEVjb3JlVXRpbC5jb3B5KGdyYXBoKTsgCQkNCisJaWQuc2V0VVJJKG5ld1VSSSk7DQorCW9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5HcmFwaCBncmFwaGNvcHkgPSAob3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkdyYXBoKSBpZDsNCisJKi8NCisJDQorCS8vdGhpcyBzZWVtcyB0byB3b3JrDQorCW9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5HcmFwaCBncmFwaGNvcHkgPSBncmFwaDsNCisJZ3JhcGhjb3B5LnNldFVSSShuZXdVUkkpOw0KKw0KKwkJDQorCVN0cmluZyBmaWxlQmFzZU5hbWUgPSBncmFwaGNvcHkuZ2V0VVJJKCkubGFzdFNlZ21lbnQoKS4NCisJCQlzdWJzdHJpbmcoMCwgZ3JhcGhjb3B5LmdldFVSSSgpLmxhc3RTZWdtZW50KCkubGFzdEluZGV4T2YoIi4iKSk7CQkJDQorDQorCVN0cmluZyAgdGFpbCA9IHByb2plY3ROYW1lICsgIi8uZ21sLyIgKyBmaWxlQmFzZU5hbWUgKyAiX01BUC54bWwiOw0KKwkNCisJDQorCQ0KKwkNCisJaWYoIXByb2plY3QuZ2V0Rm9sZGVyKCIuZ21sIikuZXhpc3RzKCkpDQorCXsNCisJCUlQcm9ncmVzc01vbml0b3IgbW9uaXRvciA9IG5ldyBOdWxsUHJvZ3Jlc3NNb25pdG9yKCk7DQorCQl0cnkgew0KKwkJCXByb2plY3QuZ2V0Rm9sZGVyKCIuZ21sIikuY3JlYXRlKGZhbHNlLCB0cnVlLCBtb25pdG9yKTsNCisJCX0gY2F0Y2ggKENvcmVFeGNlcHRpb24gZSkgDQorCQl7DQorCQkJQWN0aXZhdG9yLmxvZ0Vycm9yKGUuZ2V0TWVzc2FnZSgpLCBlKTsNCisJCX0gZmluYWxseSB7DQorCQkJbW9uaXRvci5kb25lKCk7DQorCQl9DQorCQkNCisJfQ0KKwkNCisJDQorCS8vTEFCRUxTDQorCUVNYXA8VVJJLCBOb2RlTGFiZWw+IHN0ZW1MYWJlbHMgPSBncmFwaGNvcHkuZ2V0Tm9kZUxhYmVscygpOw0KKwlFTWFwPFVSSSwgTm9kZUxhYmVsPiBzdGVtTGFiZWxzX3N0ZW1HcmFwaCA9IHN0ZW1HcmFwaC5nZXROb2RlTGFiZWxzKCk7DQorCQ0KKwkNCisJDQorDQorCWZvciAoTWFwLkVudHJ5PFVSSSxOb2RlTGFiZWw+IGVudHJ5IDogc3RlbUxhYmVsc19zdGVtR3JhcGguZW50cnlTZXQoKSkNCisJew0KKwkJVVJJIHVyaSA9IGVudHJ5LmdldEtleSgpOw0KKwkJTm9kZUxhYmVsIG5vZGVMYWJlbCA9IGVudHJ5LmdldFZhbHVlKCk7DQorCQkNCisJCWlmKHN0ZW1MYWJlbHMuY29udGFpbnNLZXkodXJpKSkgDQorCQl7CQ0KKwkJCQ0KKwkJCU5vZGVMYWJlbCBjb3B5R3JhcGhOb2RlTGFiZWwgPSBzdGVtTGFiZWxzLmdldCh1cmkpOw0KKwkJCWlmICgobm9kZUxhYmVsICE9IG51bGwpICYmIChjb3B5R3JhcGhOb2RlTGFiZWwgIT0gbnVsbCkpIA0KKwkJCQlpZiAoIWNvcHlHcmFwaE5vZGVMYWJlbC50b1N0cmluZygpLmVxdWFscyhub2RlTGFiZWwudG9TdHJpbmcoKSkpCQkJCQkNCisJCQkJLy9UT0RPIGlmIChjb3B5R3JhcGhOb2RlTGFiZWwgIT0gbm9kZUxhYmVsKSANCisJCQkJew0KKwkJCQkJDQorCQkJCQkvL1N5c3RlbS5lcnIucHJpbnRsbigiQ2hhbmdlIExhYmVsIHdpdGggVVJJICIgKyB1cmkgKyAiIGZyb20gIg0KKwkJCQkJLy8JCSsgY29weUdyYXBoTm9kZUxhYmVsLnRvU3RyaW5nKCkgKyAiIHRvICIgKyBub2RlTGFiZWwudG9TdHJpbmcoKSk7DQorCQkJCQkJCQkJCQ0KKwkJCQkJaWYgKHN0ZW1MYWJlbHMuZ2V0KHVyaSkgaW5zdGFuY2VvZiBQb3B1bGF0aW9uTGFiZWwpIA0KKwkJCQkJewkNCisJCQkJCQkoKFBvcHVsYXRpb25MYWJlbClzdGVtTGFiZWxzLmdldCh1cmkpKS4NCisJCQkJCQkJc2V0UG9wdWxhdGlvbklkZW50aWZpZXIoKChQb3B1bGF0aW9uTGFiZWwpbm9kZUxhYmVsKS5nZXRQb3B1bGF0aW9uSWRlbnRpZmllcigpKTsNCisJCQkJCQkoKFBvcHVsYXRpb25MYWJlbClzdGVtTGFiZWxzLmdldCh1cmkpKS4NCisJCQkJCQlzZXROYW1lKCgoUG9wdWxhdGlvbkxhYmVsKW5vZGVMYWJlbCkuZ2V0TmFtZSgpKTsNCisJCQkJCQkNCisJCQkJCX0JDQorCQkJCQlpZiAoc3RlbUxhYmVscy5nZXQodXJpKSBpbnN0YW5jZW9mIEFyZWFMYWJlbCkNCisJCQkJCQkoKEFyZWFMYWJlbClzdGVtTGFiZWxzLmdldCh1cmkpKQ0KKwkJCQkJCS8vLnNldEN1cnJlbnRWYWx1ZSgoKEFyZWFMYWJlbClub2RlTGFiZWwpLmdldEN1cnJlbnRBcmVhVmFsdWUoKSk7DQorCQkJCQkgICAgLmdldEN1cnJlbnRBcmVhVmFsdWUoKS5zZXRBcmVhKCgoQXJlYUxhYmVsKW5vZGVMYWJlbCkuZ2V0Q3VycmVudEFyZWFWYWx1ZSgpLmdldEFyZWEoKSk7DQorCQkJCQ0KKwkJCQl9DQorCQl9DQorCQkNCisJCQ0KKwkJCQ0KKwl9CQ0KKwkNCisNCisJDQorCS8vRURHRVMNCisJRU1hcDxVUkksIEVkZ2U+IHN0ZW1FZGdlcyA9IGdyYXBoY29weS5nZXRFZGdlcygpOw0KKwlmb3IgKE1hcC5FbnRyeTxVUkksRWRnZT4gZW50cnkgOiBzdGVtRWRnZXMuZW50cnlTZXQoKSkNCisJew0KKwkJVVJJIHVyaSA9IGVudHJ5LmdldEtleSgpOw0KKwkJRWRnZSBlID0gZW50cnkuZ2V0VmFsdWUoKTsNCisJCVN0cmluZyBlZGdlSUQgPSBlLmdldER1YmxpbkNvcmUoKS5nZXRJZGVudGlmaWVyKCk7DQorCQlHcmFwaENvbm5lY3Rpb24gZ2MgPSBHcmFwaENvbm5lY3Rpb25zLmdldChlZGdlSUQpOw0KKwkJaWYgKGdjICE9IG51bGwpIA0KKwkJew0KKwkJCUNvbm5lY3Rpb25EYXRhIGVkZ2VEYXRhID0gKENvbm5lY3Rpb25EYXRhKSBnYy5nZXREYXRhKCk7DQorCQkJLy9UaXRsZQ0KKwkJCWUuZ2V0RHVibGluQ29yZSgpLnNldFRpdGxlKGVkZ2VEYXRhLmdldEVkZ2VUaXRsZSgpKTsJDQorCQkJDQorCQkJaWYgKGUuZ2V0TGFiZWwoKSBpbnN0YW5jZW9mIE1pZ3JhdGlvbkVkZ2VMYWJlbCkNCisJCQl7DQorCQkJCUVkZ2VMYWJlbCBlZGdlTGFiZWwgPSBlZGdlRGF0YS5nZXRFZGdlTGFiZWwoKTsNCisJCQkJZG91YmxlIG1pZ1JhdGUgPSAoKE1pZ3JhdGlvbkVkZ2VMYWJlbCllZGdlTGFiZWwpLmdldEN1cnJlbnRWYWx1ZSgpLmdldE1pZ3JhdGlvblJhdGUoKTsNCisJCQkJDQorCQkJCSgoTWlncmF0aW9uRWRnZUxhYmVsKWUuZ2V0TGFiZWwoKSkNCisJCQkJLmdldEN1cnJlbnRWYWx1ZSgpLnNldE1pZ3JhdGlvblJhdGUobWlnUmF0ZSk7DQorCQkJCQkJCQkJCQkJDQorCQkJfQ0KKwkJCQ0KKwkJfQkJCQ0KKwl9DQorCQ0KKwkNCisJTWFwPE5vZGUsIE5vZGVMYWJlbD4gYWRkMkdyYXBoTWFwID0gbmV3IEhhc2hNYXA8Tm9kZSxOb2RlTGFiZWw+KCk7DQorCS8vTk9ERVMNCisJRU1hcDxVUkksIE5vZGU+IHN0ZW1Ob2RlcyA9IGdyYXBoY29weS5nZXROb2RlcygpOw0KKw0KKwlNYXA8U3RyaW5nLFNldDxHbWxQb2x5Z29uPj4gcG9seWdvbk1hcCA9IG5ldyBIYXNoTWFwPFN0cmluZyxTZXQ8R21sUG9seWdvbj4+KCk7CQ0KKwlTcGF0aWFsR21sRXhwb3J0ZXIgc2dtbGUgPSBuZXcgU3BhdGlhbEdtbEV4cG9ydGVyKCk7DQorCQ0KKwlmb3IgKE1hcC5FbnRyeTxVUkksTm9kZT4gZW50cnkgOiBzdGVtTm9kZXMuZW50cnlTZXQoKSkNCisJewkNCisJCU5vZGUgbiA9IGVudHJ5LmdldFZhbHVlKCk7CQkNCisJCVN0cmluZyBub2RlSUQgPSBuLmdldER1YmxpbkNvcmUoKS5nZXRJZGVudGlmaWVyKCk7DQorCQlHcmFwaE5vZGUgZ24gPSBHcmFwaE5vZGVzLmdldChub2RlSUQpOw0KKwkJaWYgKGduICE9IG51bGwpIA0KKwkJew0KKwkJCU5vZGVEYXRhIG5vZGVEYXRhID0gKE5vZGVEYXRhKSBnbi5nZXREYXRhKCk7DQorCQkJLy9UaXRsZQ0KKwkJCW4uZ2V0RHVibGluQ29yZSgpLnNldFRpdGxlKG5vZGVEYXRhLmdldE5vZGVUaXRsZSgpKTsJDQorCQkJLy9ncmFwaC5nZXROb2RlKG4uZ2V0VVJJKCkpLmdldER1YmxpbkNvcmUoKS5zZXRUaXRsZShub2RlRGF0YS5nZXROb2RlVGl0bGUoKSk7DQorDQorCQkJDQorCQkJaWYgKG5vZGVVUkkyTGFiZWwuY29udGFpbnNLZXkobm9kZURhdGEuZ2V0Tm9kZVVSSSgpKSkNCisJCQl7DQorCQkJCS8vaW4gdGhlIGxpc3Qgbm9kZVVSSTJMYWJlbCB0aGUgbGFiZWxzIG9mIHRoZSBjYW5vbmljYWwgZ3JhcGgNCisJCQkJLy9oYXZlIGJlZW4gYXNzaWduZWQgdG8gdGhlaXIgdGFyZ2V0IG5vZGVzLiBJZiBtZWFud2hpbGUgDQorCQkJCS8vbmV3IGxhYmVscyBoYXZlIGJlZW4gYWRkZWQgaW4gdGhlIGVkaXRvciwgdGhlIGxpc3QgbGVuZ3RocyBzaG91bGQNCisJCQkJLy9kaWZmZXINCisJCQkJaWYgKG5vZGVVUkkyTGFiZWwuZ2V0KG5vZGVEYXRhLmdldE5vZGVVUkkoKSkuc2l6ZSgpICE9IG5vZGVEYXRhLmdldE5vZGVMYWJlbHMoKS5zaXplKCkpDQorCQkJCXsNCisJCQkJCUxpc3Q8Tm9kZUxhYmVsPiBvcmlnaW5hbExhYmVsTGlzdCA9IG5vZGVVUkkyTGFiZWwuZ2V0KG5vZGVEYXRhLmdldE5vZGVVUkkoKSk7CQkJDQorCQkJCQlmb3IgKE5vZGVMYWJlbCBub2RlTGFiZWwgOiBub2RlRGF0YS5nZXROb2RlTGFiZWxzKCkpDQorCQkJCQl7CQ0KKwkJCQkJCQ0KKwkJCQkJCQ0KKwkJCQkJCWlmICghb3JpZ2luYWxMYWJlbExpc3QuY29udGFpbnMobm9kZUxhYmVsKSkNCisJCQkJCQl7CQ0KKwkJCQkJCQlncmFwaGNvcHkuZ2V0Tm9kZUxhYmVscygpLnB1dChub2RlTGFiZWwuZ2V0VVJJKCksIG5vZGVMYWJlbCk7DQorCQkJCQkJCWFkZDJHcmFwaE1hcC5wdXQoZ3JhcGguZ2V0Tm9kZShub2RlTGFiZWwuZ2V0VVJJT2ZJZGVudGlmaWFibGVUb0JlTGFiZWxlZCgpKSwgbm9kZUxhYmVsKTsNCisJCQkJCQl9CQkJCQkNCisJCQkJCX0NCisJCQkJfQ0KKwkJCX0NCisJCQllbHNlIC8vIHRoZXJlIHdlcmUgbm8gYXNzaWdubWVudHMgb2YgbGFiZWxzIHRvIHRoaXMgbm9kZSBpbiBhZHZhbmNlDQorCQkJew0KKwkJCQlpZiAobm9kZURhdGEuZ2V0Tm9kZUxhYmVscygpICE9IG51bGwpDQorCQkJCXsNCisJCQkJCWZvciAoTm9kZUxhYmVsIG5vZGVMYWJlbCA6IG5vZGVEYXRhLmdldE5vZGVMYWJlbHMoKSkNCisJCQkJCXsJCQkJCQkJDQorCQkJCQkJCWdyYXBoY29weS5nZXROb2RlTGFiZWxzKCkucHV0KG5vZGVMYWJlbC5nZXRVUkkoKSwgbm9kZUxhYmVsKTsNCisJCQkJCX0NCisJCQkJfQ0KKwkJCX0JCQkJCQ0KKwkJfSANCisNCisJCQ0KKw0KKwkJZm9yIChNYXAuRW50cnk8Tm9kZSxOb2RlTGFiZWw+IFVSSU5vZGVFbnRyeSA6IGFkZDJHcmFwaE1hcC5lbnRyeVNldCgpKSANCisJCXsNCisNCisNCisJCQ0KKwkJCU5vZGVMYWJlbCBubCA9IFVSSU5vZGVFbnRyeS5nZXRWYWx1ZSgpOw0KKwkJCU5vZGUgbm9kZSA9IFVSSU5vZGVFbnRyeS5nZXRLZXkoKTsNCisJCQlncmFwaC5nZXROb2RlKG5vZGUuZ2V0VVJJKCkpLmdldExhYmVscygpLmFkZChubCk7DQorCQkJDQorCQl9DQorCQkNCisJCQ0KKwkJCQkJCQkJDQorCQkvL1NwYXRpYWwgCQ0KKwkJU2V0PERpc3BsYXlQb2x5Z29uPiBkaXNwbGF5UG9seWdvbnMgPSBub2RlSUQyUG9seS5nZXQobi5nZXREdWJsaW5Db3JlKCkuZ2V0SWRlbnRpZmllcigpKTsJCQkNCisJCWlmIChkaXNwbGF5UG9seWdvbnMgIT0gbnVsbCkNCisJCXsNCisJCQlpZiAobi5nZXREdWJsaW5Db3JlKCkuZ2V0U3BhdGlhbCgpLmluZGV4T2YoU3BhdGlhbFByb3ZpZGVyQWRhcHRlci5TVEVNX1NQQVRJQUxfU0NIRU1FX1BSRUZJWCsiaW5saW5lIikgPj0gMCkNCisJCQl7IA0KKwkJCQlTdHJpbmcgc3BhdGlhbFVSSVN0cmluZyA9IHBvbHlnb24yTGF0TG9uZyhkaXNwbGF5UG9seWdvbnMpOyAJCQkNCisJCQkJbi5nZXREdWJsaW5Db3JlKCkuc2V0U3BhdGlhbChzcGF0aWFsVVJJU3RyaW5nKTsJDQorCQkJfQ0KKwkJCQ0KKwkJCWlmIChuLmdldER1YmxpbkNvcmUoKS5nZXRTcGF0aWFsKCkuaW5kZXhPZihTcGF0aWFsUHJvdmlkZXJBZGFwdGVyLlNURU1fU1BBVElBTF9TQ0hFTUVfUFJFRklYKyJwbGF0Zm9ybSIpID49IDApDQorCQkJewkNCisJCQkJU2V0PEdtbFBvbHlnb24+IGdtbFBvbHlnb25zID0gbmV3IEhhc2hTZXQ8R21sUG9seWdvbj4oKTsNCisJCQkJZm9yIChEaXNwbGF5UG9seWdvbiBkUG9seWdvbiA6IGRpc3BsYXlQb2x5Z29ucykNCisJCQkJewkJCQkNCisJCQkJCWdtbFBvbHlnb25zLmFkZChkUG9seWdvbi5nZXRVbnNjYWxlZEdtbFBvbHlnb24oKSk7DQorCQkJCX0NCisJCQkJcG9seWdvbk1hcC5wdXQobi5nZXRVUkkoKS5sYXN0U2VnbWVudCgpLCBnbWxQb2x5Z29ucyk7CQkNCisJDQorCQkJCVN0cmluZyBub2RlU3BhdGlhbFN0cmluZyA9IFNwYXRpYWxQcm92aWRlckFkYXB0ZXIuU1RFTV9TUEFUSUFMX1NDSEVNRV9QUkVGSVgrInBsYXRmb3JtOi9yZXNvdXJjZS8iICsgDQorCQkJCQkJCQkJCQl0YWlsICsgIiMiICsgbi5nZXRVUkkoKS5sYXN0U2VnbWVudCgpOwkJCQ0KKwkJCQluLmdldER1YmxpbkNvcmUoKS5zZXRTcGF0aWFsKG5vZGVTcGF0aWFsU3RyaW5nKTsJCQkJCQkNCisJCQl9DQorCQl9DQorCX0vL25vZGUgbG9vcA0KKw0KKwkNCisNCisNCisJDQorCWlmIChwb2x5Z29uTWFwLnNpemUoKSA+IDApDQorCQ0KKwl7IA0KKwkJDQorCQlzZ21sZS53cml0ZVNwYXRpYWxEYXRhKAlwb2x5Z29uTWFwLCANCisJCVJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5nZXRSb290KCkuZ2V0TG9jYXRpb24oKS50b1N0cmluZygpLmNvbmNhdCgiLyIgKyB0YWlsICksDQorCQlncmFwaGNvcHkuZ2V0VVJJKCkubGFzdFNlZ21lbnQoKSwgDQorCQktMSk7IAkJDQorCQlTdHJpbmcgc3BhdGlhbFN0cmluZyA9IFNwYXRpYWxQcm92aWRlckFkYXB0ZXIuU1RFTV9TUEFUSUFMX1NDSEVNRV9QUkVGSVgrInBsYXRmb3JtOi9yZXNvdXJjZS8iICsgdGFpbDsJCQ0KKwkJZ3JhcGhjb3B5LmdldER1YmxpbkNvcmUoKS5zZXRTcGF0aWFsKHNwYXRpYWxTdHJpbmcpOw0KKwkJDQorCQkNCisJfQ0KKwkNCisJDQorDQorCS8vIHNhdmluZyBHcmFwaCANCisNCisJdHJ5IHsJDQorCQlncmFwaGNvcHkuZ2V0RHVibGluQ29yZSgpLnNldFRpdGxlKCIiKTsNCisJCQ0KKwkJLy9tYWtlIGFub3RoZXIgY29weSBoZXJlLCBvciBwcm9ibGVtcyB3aXRoIHNhdmUgYXMuLi4NCisJCUlkZW50aWZpYWJsZSBncmFwaENvcHlDb3B5ID0gKElkZW50aWZpYWJsZSkgRWNvcmVVdGlsLmNvcHkoZ3JhcGhjb3B5KTsgCQkNCisJCWdyYXBoQ29weUNvcHkuc2V0VVJJKG5ld1VSSSk7DQorCQluZXdsaXN0LmFkZChncmFwaENvcHlDb3B5KTsJDQorDQorCQlVdGlsaXR5LnNlcmlhbGl6ZUlkZW50aWZpYWJsZXMobmV3bGlzdCwgbmV3VVJJKTsNCisJCW5ld2xpc3QgPSBudWxsOw0KKwkJCQkNCisJCQ0KKwl9IGNhdGNoKEV4Y2VwdGlvbiBlKSB7DQorCQlBY3RpdmF0b3IubG9nRXJyb3IoZS5nZXRNZXNzYWdlKCksIGUpOw0KKw0KKwl9DQorDQorCQ0KKw0KKwkNCit9DQorDQorDQorDQorDQorDQorcHJpdmF0ZSBTdHJpbmcgcG9seWdvbjJMYXRMb25nKFNldDxEaXNwbGF5UG9seWdvbj4gZGlzcGxheVBvbHlnb25zKSANCit7DQorCS8vTGF0TG9uZyBsYXRMb25nID0gbmV3IExhdExvbmcoKTsNCisJTGlzdDxTZWdtZW50PiBzZWdtZW50cyA9IG5ldyBBcnJheUxpc3Q8U2VnbWVudD4oKTsNCisJCQ0KKwlmb3IgKERpc3BsYXlQb2x5Z29uIGRpc3BsYXlQb2x5Z29uIDogZGlzcGxheVBvbHlnb25zKQ0KKwl7DQorCQlTZWdtZW50QnVpbGRlciBzYiA9IG5ldyBTZWdtZW50QnVpbGRlcigpOw0KKwkJZm9yIChpbnQgaT0wOyBpPGRpc3BsYXlQb2x5Z29uLm5wb2ludHM7IGkrKykNCisJCXsJLy90cmFuc2Zvcm0gdG8gb2xkIGNvb3JkaW5hdGUgU3lzdGVtIA0KKwkJCXNiLmFkZCggLWRpc3BsYXlQb2x5Z29uLm9yaWdpbmFsUG9seWdvbi55cG9pbnRzW2ldIC8gUkZELCANCisJCQkJCWRpc3BsYXlQb2x5Z29uLm9yaWdpbmFsUG9seWdvbi54cG9pbnRzW2ldIC8gUkZEKTsJCQkJCQ0KKwkJfQ0KKw0KKwkJc2VnbWVudHMuYWRkKHNiLnRvU2VnbWVudCgpKTsNCisJCS8vc29tZXRpbWVzLCB2YWx1ZXMgb2Ygc2VnbWVudCBzaG93IHNvbWV0aGluZyBkaWZmZXJlbnQNCisJCS8vU3lzdGVtLmVyci5wcmludGxuKCJTMlM6ICIgKyBzYi50b1N0cmluZygpKTsgDQorCX0NCisJDQorCS8vbWFudWFsbHkgY3JlYXRlIGlubGluZSBzcGF0aWFsIHN0cmluZywgYmVjYXVzZSB0b1NUcmluZyBvZiBzZWdtZW50IGdpdmVzIHdyb25nIHZhbHVlcyBzb21ldGltZXMNCisJZmluYWwgU3RyaW5nQnVpbGRlciBzYiA9IG5ldyBTdHJpbmdCdWlsZGVyKFNwYXRpYWxQcm92aWRlckFkYXB0ZXIuU1RFTV9TUEFUSUFMX1NDSEVNRV9QUkVGSVgpOw0KKwlzYi5hcHBlbmQoImlubGluZSIpOw0KKwlzYi5hcHBlbmQoIjovLyIpOw0KKwlmb3IgKGZpbmFsIFNlZ21lbnQgc2VnbWVudCA6IHNlZ21lbnRzKSB7DQorCQlzYi5hcHBlbmQoIi8iKTsNCisJCWZvciAoaW50IHM9MDsgczxzZWdtZW50LnNpemUoKTsgcysrKQ0KKwkJew0KKwkJCXNiLmFwcGVuZChzZWdtZW50LmxhdGl0dWRlKHMpKTsNCisJCQlzYi5hcHBlbmQoIiwiKTsNCisJCQlzYi5hcHBlbmQoc2VnbWVudC5sb25naXR1ZGUocykpOw0KKwkJCS8vIEFueSBtb3JlIHZhbHVlcz8NCisJCQlpZiAocyA8IHNlZ21lbnQuc2l6ZSgpIC0gMSkgew0KKwkJCQkvLyBZZXMNCisJCQkJc2IuYXBwZW5kKCIsIik7DQorCQkJfQ0KKwkJfQ0KKwl9IC8vIGZvciBlYWNoIHNlZ21lbnQNCisJDQorCXJldHVybiBzYi50b1N0cmluZygpOw0KKwkNCisJDQorCQ0KKwkNCisJLy90aGlzIHNvbWV0aW1lcyBnaXZlcyB3cm9uZyB2YWx1ZXMhDQorCS8vbGF0TG9uZy5hZGQoc2VnbWVudHMpOw0KKwkvL1N0cmluZyBzcGF0aWFsU3RyaW5nID0gSW5saW5lTGF0TG9uZ0RhdGFQcm92aWRlci5jcmVhdGVTcGF0aWFsSW5saW5lVVJJU3RyaW5nKGxhdExvbmcpOw0KKwkvL3JldHVybiBzcGF0aWFsU3RyaW5nOw0KK30NCisNCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorKiAgICBDb21wb3NpdGVzDQorKiANCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQorDQorDQorcHJpdmF0ZSBDb21wb3NpdGUgY3JlYXRlQm90dG9tQ29tcG9zaXRlKGZpbmFsIENvbXBvc2l0ZSBwYXJlbnQsIGZpbmFsIEdyYXBoIHplc3RHcmFwaCwgZmluYWwgRmlsZSBmaWxlLCBmaW5hbCBJUHJvamVjdCBwcm9qZWN0KSB7DQorCQ0KKwlHcmlkRGF0YSB0b29sYmFyR3JpZERhdGEgPSBuZXcgR3JpZERhdGEoR3JpZERhdGEuSE9SSVpPTlRBTF9BTElHTl9DRU5URVIsIEdyaWREYXRhLkhPUklaT05UQUxfQUxJR05fQkVHSU5OSU5HLCBmYWxzZSwgZmFsc2UpOw0KKwkNCisJVG9vbEJhciB0b29sQmFyID0gbmV3IFRvb2xCYXIocGFyZW50LCBTV1QuSE9SSVpPTlRBTCk7DQorCXRvb2xCYXIuc2V0TGF5b3V0RGF0YSh0b29sYmFyR3JpZERhdGEpOw0KKwl0b29sQmFyLnNldExheW91dChuZXcgRmlsbExheW91dChTV1QuSE9SSVpPTlRBTCkpOw0KKwkNCisJDQorCWlmIChncmFwaExpc3Quc2l6ZSgpID49IDEpIC8vPT0gLy8gaWYgZmlsZSA9PSBudWxsIGl0IGlzIGEgY2Fub25pY2FsIGdyYXBoIA0KKwl7DQorCQlUb29sSXRlbSBzYXZlQnV0dG9uID0gbmV3IFRvb2xJdGVtKHRvb2xCYXIsIFNXVC5QVVNIKTsNCisJCXNhdmVCdXR0b24uc2V0VGV4dCgiU2F2ZSBHcmFwaCBhbmQgUXVpdCIpOw0KKwkJc2F2ZUJ1dHRvbi5hZGRTZWxlY3Rpb25MaXN0ZW5lcihuZXcgU2VsZWN0aW9uTGlzdGVuZXIoKSB7DQorCQkJcHVibGljIHZvaWQgd2lkZ2V0U2VsZWN0ZWQob3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5TZWxlY3Rpb25FdmVudCBlKSB7CQkJCQ0KKwkJCQlzYXZlR3JhcGgoZ3JhcGhMaXN0LCBmYWxzZSwgcHJvamVjdCk7DQorCQkJCXRyeSB7IHByb2plY3QucmVmcmVzaExvY2FsKElSZXNvdXJjZS5ERVBUSF9JTkZJTklURSwgbnVsbCk7IH0JCQ0KKwkJCQljYXRjaCAoRXhjZXB0aW9uIGV4KSB7IEFjdGl2YXRvci5sb2dFcnJvcihleC5nZXRNZXNzYWdlKCksIGV4KTsgfQ0KKwkJCQkNCisJCQkJDQorCQkJCS8vZGlzcGxheShncmFwaExpc3QsIG51bGwsIHByb2plY3QsIG51bGwpOyAvL1RPRE8gY2hlY2sgdG8gZ2l2ZSBtb2RlbA0KKwkJCQlBY3RpdmF0b3IuZ2V0RGVmYXVsdCgpLmdldFdvcmtiZW5jaCgpLmdldERpc3BsYXkoKS5nZXRBY3RpdmVTaGVsbCgpLmRpc3Bvc2UoKTsNCisJCQkJLy9jbGVhbihncmFwaExpc3QsIHByb2plY3QpOw0KKwkJCQkNCisJCQkJDQorCQkJCQ0KKwkJCQkNCisNCisJCQl9DQorCQkJDQorCQkJcHVibGljIHZvaWQgd2lkZ2V0RGVmYXVsdFNlbGVjdGVkKG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuU2VsZWN0aW9uRXZlbnQgZSkgew0KKwkJCX0NCisJCX0pOw0KKwl9DQorCQ0KKwlUb29sSXRlbSBzZXBhcmF0b3IgPSBuZXcgVG9vbEl0ZW0odG9vbEJhciwgU1dULlNFUEFSQVRPUik7DQorCQ0KKwkNCisJVG9vbEl0ZW0gc2F2ZUFzQnV0dG9uID0gbmV3IFRvb2xJdGVtKHRvb2xCYXIsIFNXVC5QVVNIKTsNCisJc2F2ZUFzQnV0dG9uLnNldFRleHQoIlNhdmUgR3JhcGggQXMgLi4uIik7DQorCXNhdmVBc0J1dHRvbi5hZGRTZWxlY3Rpb25MaXN0ZW5lcihuZXcgU2VsZWN0aW9uTGlzdGVuZXIoKSB7DQorCQlwdWJsaWMgdm9pZCB3aWRnZXRTZWxlY3RlZChvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLlNlbGVjdGlvbkV2ZW50IGUpIHsJCQkNCisJCQlMaXN0PG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5HcmFwaD4gc2F2ZUdyYXBoTGlzdCA9DQorCQkJCW5ldyBBcnJheUxpc3Q8b3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkdyYXBoPigpOw0KKwkJCXNhdmVHcmFwaExpc3QuYWRkKHN0ZW1HcmFwaCk7DQorCQkJc2F2ZUdyYXBoKHNhdmVHcmFwaExpc3QsIHRydWUsIHByb2plY3QpOw0KKwkJCXRyeSB7IHByb2plY3QucmVmcmVzaExvY2FsKElSZXNvdXJjZS5ERVBUSF9JTkZJTklURSwgbnVsbCk7IH0JCQ0KKwkJCWNhdGNoIChFeGNlcHRpb24gZXgpIHsgQWN0aXZhdG9yLmxvZ0Vycm9yKGV4LmdldE1lc3NhZ2UoKSwgZXgpOyB9DQorCQkJLy9BY3RpdmF0b3IuZ2V0RGVmYXVsdCgpLmdldFdvcmtiZW5jaCgpLmdldERpc3BsYXkoKS5nZXRBY3RpdmVTaGVsbCgpLmRpc3Bvc2UoKTsNCisNCisJCX0NCisJCQ0KKwkJcHVibGljIHZvaWQgd2lkZ2V0RGVmYXVsdFNlbGVjdGVkKG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuU2VsZWN0aW9uRXZlbnQgZSkgew0KKwkJfQ0KKwl9KTsNCisJDQorCQ0KKwkNCisJLyogVE9ETyBSZXNldCBCdXR0b24NCisJVG9vbEl0ZW0gcmVzZXRCdXR0b24gPSBuZXcgVG9vbEl0ZW0odG9vbEJhciwgU1dULlBVU0gpOw0KKwlyZXNldEJ1dHRvbi5zZXRUZXh0KCJSZXNldCIpOw0KKwlyZXNldEJ1dHRvbi5hZGRTZWxlY3Rpb25MaXN0ZW5lcihuZXcgU2VsZWN0aW9uTGlzdGVuZXIoKSB7DQorCQlwdWJsaWMgdm9pZCB3aWRnZXRTZWxlY3RlZChvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLlNlbGVjdGlvbkV2ZW50IGUpIHsNCisJCQkNCisJCQl4VHJhbnNsYXRpb24gPSAwOw0KKwkJCXlUcmFuc2xhdGlvbiA9IDA7DQorCQkJem9vbUZhY3RvciA9IDA7DQorCQkJcmVkcmF3KCk7DQorCQkJDQorCQl9DQorCQkNCisJCXB1YmxpYyB2b2lkIHdpZGdldERlZmF1bHRTZWxlY3RlZChvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLlNlbGVjdGlvbkV2ZW50IGUpIHsNCisJCX0NCisJfSk7DQorCSovDQorCVRvb2xJdGVtIHNlcGFyYXRvcjIgPSBuZXcgVG9vbEl0ZW0odG9vbEJhciwgU1dULlNFUEFSQVRPUik7DQorCQ0KKwlUb29sSXRlbSBxdWl0QnV0dG9uID0gbmV3IFRvb2xJdGVtKHRvb2xCYXIsIFNXVC5QVVNIKTsNCisJcXVpdEJ1dHRvbi5zZXRUZXh0KCJRdWl0Iik7DQorCXF1aXRCdXR0b24uYWRkU2VsZWN0aW9uTGlzdGVuZXIobmV3IFNlbGVjdGlvbkxpc3RlbmVyKCkgew0KKwkJcHVibGljIHZvaWQgd2lkZ2V0U2VsZWN0ZWQob3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5TZWxlY3Rpb25FdmVudCBlKSB7CQkJDQorCQkJQWN0aXZhdG9yLmdldERlZmF1bHQoKS5nZXRXb3JrYmVuY2goKS5nZXREaXNwbGF5KCkuZ2V0QWN0aXZlU2hlbGwoKS5kaXNwb3NlKCk7DQorCQl9DQorCQkNCisJCXB1YmxpYyB2b2lkIHdpZGdldERlZmF1bHRTZWxlY3RlZChvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLlNlbGVjdGlvbkV2ZW50IGUpIHsNCisJCX0NCisJfSk7DQorCQ0KKwkNCisJDQorCXJldHVybiB0b29sQmFyOw0KK30gLy8gY3JlYXRlQm90dG9tQ29tcG9zaXRlDQorDQorDQorDQorDQorDQorcHJpdmF0ZSBDb21wb3NpdGUgY3JlYXRlRGF0YUNvbXBvc2l0ZShmaW5hbCBDb21wb3NpdGUgcGFyZW50LCBmaW5hbCBHcmFwaCB6ZXN0R3JhcGgpIHsNCisJDQorCQ0KKwlmaW5hbCBDb21wb3NpdGUgZGF0YUNvbXBvc2l0ZSA9IG5ldyBDb21wb3NpdGUocGFyZW50LCBTV1QuQ0VOVEVSKTsNCisJCQkJCQkNCisJZmluYWwgQ29tcG9zaXRlIHByb3BlcnRpZXNDb21wb3NpdGVfbm9kZXMgPSBuZXcgQ29tcG9zaXRlKGRhdGFDb21wb3NpdGUsIFNXVC5DRU5URVIpOw0KKwlmaW5hbCBDb21wb3NpdGUgcHJvcGVydGllc0NvbXBvc2l0ZV9lZGdlcyA9IG5ldyBDb21wb3NpdGUoZGF0YUNvbXBvc2l0ZSwgU1dULkNFTlRFUik7CQ0KKwlmaW5hbCBDb21wb3NpdGUgaW5mb0NvbXBvc2l0ZSA9IG5ldyBDb21wb3NpdGUoZGF0YUNvbXBvc2l0ZSwgU1dULkNFTlRFUik7DQorCQ0KKwkNCisJDQorCWZpbmFsIFJvd0xheW91dCBkYXRhQ29tcG9zaXRlTGF5b3V0ID0gbmV3IFJvd0xheW91dChTV1QuVkVSVElDQUwpOw0KKwlkYXRhQ29tcG9zaXRlLnNldExheW91dChkYXRhQ29tcG9zaXRlTGF5b3V0KTsNCisNCisJZmluYWwgUm93TGF5b3V0IHByb3BlcnRpZXNDb21wb3NpdGVOb2Rlc0xheW91dCA9IG5ldyBSb3dMYXlvdXQoU1dULkhPUklaT05UQUwpOw0KKwlwcm9wZXJ0aWVzQ29tcG9zaXRlX25vZGVzLnNldExheW91dChwcm9wZXJ0aWVzQ29tcG9zaXRlTm9kZXNMYXlvdXQpOw0KKwkNCisJZmluYWwgUm93TGF5b3V0IHByb3BlcnRpZXNDb21wb3NpdGVFZGdlc0xheW91dCA9IG5ldyBSb3dMYXlvdXQoU1dULkhPUklaT05UQUwpOw0KKwlwcm9wZXJ0aWVzQ29tcG9zaXRlX2VkZ2VzLnNldExheW91dChwcm9wZXJ0aWVzQ29tcG9zaXRlRWRnZXNMYXlvdXQpOw0KKwkNCisJZmluYWwgUm93TGF5b3V0IGluZm9Db21wb3NpdGVMYXlvdXQgPSBuZXcgUm93TGF5b3V0KFNXVC5IT1JJWk9OVEFMKTsNCisJaW5mb0NvbXBvc2l0ZS5zZXRMYXlvdXQoaW5mb0NvbXBvc2l0ZUxheW91dCk7DQorCQ0KKwkNCisJZmluYWwgTGFiZWwgbm9kZVRpdGxlOw0KKwlmaW5hbCBUZXh0IG5vZGVUaXRsZV9lZGl0Ow0KKwlmaW5hbCBMYWJlbCBub2RlVVJJOw0KKwlmaW5hbCBMYWJlbCBub2RlVVJJX2VkaXQ7DQorCWZpbmFsIExhYmVsIG5vZGVMYWJlbFR5cGU7DQorCWZpbmFsIENvbWJvIG5vZGVMYWJlbFR5cGVfZWRpdDsNCisJZmluYWwgTGFiZWwgbm9kZUxhYmVsVmFsdWU7DQorCWZpbmFsIENvbWJvIG5vZGVMYWJlbFZhbHVlX2VkaXQ7DQorCWZpbmFsIExhYmVsIG5vZGVYWTsNCisJZmluYWwgTGFiZWwgbm9kZVhZX2VkaXQ7IA0KKwkNCisJZmluYWwgTGFiZWwgbm9kZUFVUkk7DQorCWZpbmFsIExhYmVsIG5vZGVBVVJJX2VkaXQ7DQorCWZpbmFsIExhYmVsIG5vZGVCVVJJOw0KKwlmaW5hbCBMYWJlbCBub2RlQlVSSV9lZGl0Ow0KKwkvL2ZpbmFsIExhYmVsIGVkZ2VVUkk7DQorCS8vZmluYWwgTGFiZWwgZWRnZVVSSV9lZGl0Ow0KKwlmaW5hbCBMYWJlbCBlZGdlVGl0bGU7DQorCWZpbmFsIFRleHQgZWRnZVRpdGxlX2VkaXQ7DQorCWZpbmFsIExhYmVsIGVkZ2VMYWJlbFR5cGU7DQorCWZpbmFsIExhYmVsIGVkZ2VMYWJlbFR5cGVfZWRpdDsNCisJZmluYWwgTGFiZWwgZWRnZUxhYmVsVmFsdWU7DQorCWZpbmFsIFRleHQgZWRnZUxhYmVsVmFsdWVfZWRpdDsNCisgIA0KKwkJDQorCW5vZGVUaXRsZSA9IG5ldyBMYWJlbChwcm9wZXJ0aWVzQ29tcG9zaXRlX25vZGVzLCBTV1QuTk9ORSk7DQorCW5vZGVUaXRsZS5zZXRMYXlvdXREYXRhKG5ldyBSb3dEYXRhKDMwLCBTV1QuREVGQVVMVCkpOw0KKwlub2RlVGl0bGUuc2V0VGV4dCgiVGl0bGU6ICIpOw0KKwlub2RlVGl0bGVfZWRpdCA9IG5ldyBUZXh0KHByb3BlcnRpZXNDb21wb3NpdGVfbm9kZXMsIFNXVC5OT05FKTsNCisJbm9kZVRpdGxlX2VkaXQuc2V0TGF5b3V0RGF0YShuZXcgUm93RGF0YSgyNTAsIFNXVC5ERUZBVUxUKSk7DQorCW5vZGVUaXRsZV9lZGl0LmFkZE1vZGlmeUxpc3RlbmVyKG5ldyBUZXh0TW9kaWZ5TGlzdGVuZXIoemVzdEdyYXBoLCBOT0RFX1RJVExFKSk7DQorCQ0KKwkNCisJbm9kZVVSSSA9IG5ldyBMYWJlbChwcm9wZXJ0aWVzQ29tcG9zaXRlX25vZGVzLCBTV1QuTk9ORSk7DQorCW5vZGVVUkkuc2V0TGF5b3V0RGF0YShuZXcgUm93RGF0YSgzMCwgU1dULkRFRkFVTFQpKTsNCisJbm9kZVVSSS5zZXRUZXh0KCJVUkk6ICAgICAiKTsNCisJbm9kZVVSSV9lZGl0ID0gbmV3IExhYmVsKHByb3BlcnRpZXNDb21wb3NpdGVfbm9kZXMsIFNXVC5OT05FKTsNCisJbm9kZVVSSV9lZGl0LnNldExheW91dERhdGEobmV3IFJvd0RhdGEoMjAwLCBTV1QuREVGQVVMVCkpOw0KKwkNCisJbm9kZUxhYmVsVHlwZSA9IG5ldyBMYWJlbChwcm9wZXJ0aWVzQ29tcG9zaXRlX25vZGVzLCBTV1QuTk9ORSk7DQorCW5vZGVMYWJlbFR5cGUuc2V0TGF5b3V0RGF0YShuZXcgUm93RGF0YSg1MCwgU1dULkRFRkFVTFQpKTsNCisJbm9kZUxhYmVsVHlwZS5zZXRUZXh0KCJMYWJlbFR5cGU6ICIpOw0KKwlub2RlTGFiZWxUeXBlX2VkaXQgPSBuZXcgQ29tYm8ocHJvcGVydGllc0NvbXBvc2l0ZV9ub2RlcywgU1dULlJFQURfT05MWSk7DQorCW5vZGVMYWJlbFR5cGVfZWRpdC5zZXRMYXlvdXREYXRhKG5ldyBSb3dEYXRhKDk1LCBTV1QuREVGQVVMVCkpOw0KKw0KKwkNCisJbm9kZUxhYmVsVmFsdWUgPSBuZXcgTGFiZWwocHJvcGVydGllc0NvbXBvc2l0ZV9ub2RlcywgU1dULk5PTkUpOw0KKwlub2RlTGFiZWxWYWx1ZS5zZXRMYXlvdXREYXRhKG5ldyBSb3dEYXRhKDEzMCwgU1dULkRFRkFVTFQpKTsNCisJbm9kZUxhYmVsVmFsdWUuc2V0VGV4dCgiVmFsdWU6ICIpOw0KKwlub2RlTGFiZWxWYWx1ZV9lZGl0ID0gbmV3IENvbWJvKHByb3BlcnRpZXNDb21wb3NpdGVfbm9kZXMsIFNXVC5OT05FKTsNCisJbm9kZUxhYmVsVmFsdWVfZWRpdC5zZXRMYXlvdXREYXRhKG5ldyBSb3dEYXRhKDgwLCBTV1QuREVGQVVMVCkpOw0KKwlub2RlTGFiZWxUeXBlX2VkaXQuYWRkU2VsZWN0aW9uTGlzdGVuZXIobmV3IENvbWJvTGlzdGVuZXJUeXBlKHplc3RHcmFwaCwgbm9kZUxhYmVsVmFsdWVfZWRpdCwgbm9kZUxhYmVsVmFsdWUpKTsNCisJDQorCW5vZGVMYWJlbFZhbHVlX2VkaXQuYWRkS2V5TGlzdGVuZXIobmV3IENvbWJvTGlzdGVuZXJWYWx1ZSh6ZXN0R3JhcGgsIG5vZGVMYWJlbFR5cGVfZWRpdCkpOw0KKwlub2RlTGFiZWxWYWx1ZV9lZGl0LmFkZFNlbGVjdGlvbkxpc3RlbmVyKG5ldyBDb21ib1NlbGVjdGlvbkxpc3RlbmVyVmFsdWUoemVzdEdyYXBoLCBub2RlTGFiZWxUeXBlX2VkaXQsIG5vZGVMYWJlbFZhbHVlKSk7DQorCQ0KKyAgICBub2RlWFkgPSBuZXcgTGFiZWwocHJvcGVydGllc0NvbXBvc2l0ZV9ub2RlcywgU1dULk5PTkUpOw0KKwlub2RlWFkuc2V0VGV4dCgiWFk6ICIpOw0KKwlub2RlWFkuc2V0TGF5b3V0RGF0YShuZXcgUm93RGF0YSgyMCwgU1dULkRFRkFVTFQpKTsNCisJbm9kZVhZX2VkaXQgPSBuZXcgTGFiZWwocHJvcGVydGllc0NvbXBvc2l0ZV9ub2RlcywgU1dULk5PTkUpOw0KKwlub2RlWFlfZWRpdC5zZXRMYXlvdXREYXRhKG5ldyBSb3dEYXRhKDcwLCBTV1QuREVGQVVMVCkpOw0KKwkNCisJDQorCWVkZ2VUaXRsZSA9IG5ldyBMYWJlbChwcm9wZXJ0aWVzQ29tcG9zaXRlX2VkZ2VzLCBTV1QuTk9ORSk7DQorICAgIGVkZ2VUaXRsZS5zZXRMYXlvdXREYXRhKG5ldyBSb3dEYXRhKDMwLCBTV1QuREVGQVVMVCkpOw0KKyAgICBlZGdlVGl0bGUuc2V0VGV4dCgiVGl0bGU6ICIpOw0KKyAgICBlZGdlVGl0bGVfZWRpdCA9IG5ldyBUZXh0KHByb3BlcnRpZXNDb21wb3NpdGVfZWRnZXMsIFNXVC5OT05FKTsNCisgICAgZWRnZVRpdGxlX2VkaXQuc2V0TGF5b3V0RGF0YShuZXcgUm93RGF0YSg0MDAsIFNXVC5ERUZBVUxUKSk7DQorICAgIGVkZ2VUaXRsZV9lZGl0LmFkZE1vZGlmeUxpc3RlbmVyKG5ldyBUZXh0TW9kaWZ5TGlzdGVuZXIoemVzdEdyYXBoLCBFREdFX1RJVExFKSk7DQorCQ0KKyAgICBlZGdlTGFiZWxUeXBlID0gbmV3IExhYmVsKHByb3BlcnRpZXNDb21wb3NpdGVfZWRnZXMsIFNXVC5OT05FKTsNCisgICAgZWRnZUxhYmVsVHlwZS5zZXRMYXlvdXREYXRhKG5ldyBSb3dEYXRhKDYwLCBTV1QuREVGQVVMVCkpOw0KKyAgICBlZGdlTGFiZWxUeXBlLnNldFRleHQoIkVkZ2VUeXBlOiAiKTsNCisgICAgZWRnZUxhYmVsVHlwZV9lZGl0ID0gbmV3IExhYmVsKHByb3BlcnRpZXNDb21wb3NpdGVfZWRnZXMsIFNXVC5OT05FKTsNCisgICAgZWRnZUxhYmVsVHlwZV9lZGl0LnNldExheW91dERhdGEobmV3IFJvd0RhdGEoMTIwLCBTV1QuREVGQVVMVCkpOw0KKyAgICANCisgICAgZWRnZUxhYmVsVmFsdWUgPSBuZXcgTGFiZWwocHJvcGVydGllc0NvbXBvc2l0ZV9lZGdlcywgU1dULk5PTkUpOw0KKyAgICBlZGdlTGFiZWxWYWx1ZS5zZXRMYXlvdXREYXRhKG5ldyBSb3dEYXRhKDMwLCBTV1QuREVGQVVMVCkpOw0KKyAgICBlZGdlTGFiZWxWYWx1ZS5zZXRUZXh0KCJWYWx1ZTogIik7DQorICAgIGVkZ2VMYWJlbFZhbHVlX2VkaXQgPSBuZXcgVGV4dChwcm9wZXJ0aWVzQ29tcG9zaXRlX2VkZ2VzLCBTV1QuTk9ORSk7DQorICAgIGVkZ2VMYWJlbFZhbHVlX2VkaXQuc2V0TGF5b3V0RGF0YShuZXcgUm93RGF0YSgzMCwgU1dULkRFRkFVTFQpKTsNCisgICAgZWRnZUxhYmVsVmFsdWVfZWRpdC5hZGRNb2RpZnlMaXN0ZW5lcihuZXcgVGV4dE1vZGlmeUxpc3RlbmVyKHplc3RHcmFwaCwgRURHRV9MQUJFTF9WQUxVRSkpOw0KKwkNCisJbm9kZUFVUkkgPSBuZXcgTGFiZWwocHJvcGVydGllc0NvbXBvc2l0ZV9lZGdlcywgU1dULk5PTkUpOw0KKyAgICBub2RlQVVSSS5zZXRMYXlvdXREYXRhKG5ldyBSb3dEYXRhKDQwLCBTV1QuREVGQVVMVCkpOw0KKyAgICBub2RlQVVSSS5zZXRUZXh0KCJOb2RlQTogIik7DQorICAgIG5vZGVBVVJJX2VkaXQgPSBuZXcgTGFiZWwocHJvcGVydGllc0NvbXBvc2l0ZV9lZGdlcywgU1dULk5PTkUpOw0KKyAgICBub2RlQVVSSV9lZGl0LnNldExheW91dERhdGEobmV3IFJvd0RhdGEoMTUwLCBTV1QuREVGQVVMVCkpOw0KKyAgICANCisgICAgbm9kZUJVUkkgPSBuZXcgTGFiZWwocHJvcGVydGllc0NvbXBvc2l0ZV9lZGdlcywgU1dULk5PTkUpOw0KKyAgICBub2RlQlVSSS5zZXRMYXlvdXREYXRhKG5ldyBSb3dEYXRhKDQwLCBTV1QuREVGQVVMVCkpOw0KKyAgICBub2RlQlVSSS5zZXRUZXh0KCJOb2RlQjogIik7DQorICAgIG5vZGVCVVJJX2VkaXQgPSBuZXcgTGFiZWwocHJvcGVydGllc0NvbXBvc2l0ZV9lZGdlcywgU1dULk5PTkUpOw0KKyAgICBub2RlQlVSSV9lZGl0LnNldExheW91dERhdGEobmV3IFJvd0RhdGEoMTUwLCBTV1QuREVGQVVMVCkpOw0KKyAgICANCisgICAgbm9kZUFVUklfZWRpdC5zZXRWaXNpYmxlKGZhbHNlKTsNCisJbm9kZUJVUklfZWRpdC5zZXRWaXNpYmxlKGZhbHNlKTsNCisJZWRnZUxhYmVsVHlwZV9lZGl0LnNldFZpc2libGUoZmFsc2UpOw0KKwllZGdlTGFiZWxWYWx1ZV9lZGl0LnNldFZpc2libGUoZmFsc2UpOw0KKwllZGdlVGl0bGVfZWRpdC5zZXRWaXNpYmxlKGZhbHNlKTsNCisJbm9kZVVSSV9lZGl0LnNldFZpc2libGUoZmFsc2UpOw0KKwlub2RlVGl0bGVfZWRpdC5zZXRWaXNpYmxlKGZhbHNlKTsNCisJbm9kZUxhYmVsVHlwZV9lZGl0LnNldFZpc2libGUoZmFsc2UpOw0KKwlub2RlTGFiZWxWYWx1ZV9lZGl0LnNldFZpc2libGUoZmFsc2UpOw0KKwlub2RlWFlfZWRpdC5zZXRWaXNpYmxlKGZhbHNlKTsNCisgICAgDQorICAgIA0KKyAgDQorICAgIGZpbmFsIExhYmVsIGNvb3JkaW5hdGVfdHJhbnMgPSBuZXcgTGFiZWwoaW5mb0NvbXBvc2l0ZSwgU1dULk5PTkUpOw0KKyAgICBjb29yZGluYXRlX3RyYW5zLnNldExheW91dERhdGEobmV3IFJvd0RhdGEoMjAwLCBTV1QuREVGQVVMVCkpOw0KKyAgICBjb29yZGluYXRlX3RyYW5zLnNldFRleHQoIlhZOiAiKTsNCisgICAgICAgICAgCSAgICANCisgICAgZmluYWwgTGFiZWwgem9vbSA9IG5ldyBMYWJlbChpbmZvQ29tcG9zaXRlLCBTV1QuTk9ORSk7DQorICAgIHpvb20uc2V0TGF5b3V0RGF0YShuZXcgUm93RGF0YSgxMDAsIFNXVC5ERUZBVUxUKSk7DQorICAgIHpvb20uc2V0VGV4dCgiWm9vbTogIiArIHpvb21GYWN0b3IpOw0KKw0KKwkNCisgICAgLy8gTW91c2VDbGljayBMaXN0ZW5lcg0KKyAgICB6ZXN0R3JhcGguYWRkTW91c2VMaXN0ZW5lciggbmV3IE1vdXNlTGlzdGVuZXIoKSB7DQorICAgIA0KKyAgICAJDQorCSAgICBwdWJsaWMgdm9pZCBtb3VzZURvd24oZmluYWwgTW91c2VFdmVudCBlKSB7DQorCQkJaW50IHggPSBEaXNwbGF5LmdldEN1cnJlbnQoKS5nZXRDdXJzb3JMb2NhdGlvbigpLng7DQorCQkJaW50IHkgPSBEaXNwbGF5LmdldEN1cnJlbnQoKS5nZXRDdXJzb3JMb2NhdGlvbigpLnk7DQorCQkJLy8gSXMgdGhlIGxlZnQgbW91c2UgYnV0dG9uPw0KKwkJCWlmICgoZS5idXR0b24gPT0gMSkgJiYgKHplc3RHcmFwaC5nZXRTZWxlY3Rpb24oKS5zaXplKCkgPT0gMCkpDQorCQkJew0KKw0KKwkJCQlsYXN0T2Zmc2V0WCA9IHg7DQorCQkJCWxhc3RPZmZzZXRZID0geTsNCisJCQkJbGVmdE1vdXNlQnV0dG9uUHJlc3NlZCA9IHRydWU7DQorCQkJfSAvLyBpZg0KKwkJCQ0KKwkJCQ0KKwkJCWlmICgoZS5idXR0b24gPT0gMSkgJiYgKHplc3RHcmFwaC5nZXRTZWxlY3Rpb24oKS5zaXplKCkgPiAwKSkNCisJCQl7DQorCQkJCWxlZnRNb3VzZUJ1dHRvblByZXNzZWQgPSB0cnVlOw0KKwkJCQlsYXN0T2Zmc2V0WCA9IHg7DQorCQkJCWxhc3RPZmZzZXRZID0geTsNCisJCQl9DQorCQkJemVzdEdyYXBoLnJlZHJhdygpOw0KKwkJfSAvLyBtb3VzZURvd24NCisNCisJCQ0KKwkJCQkgDQorCQlwdWJsaWMgdm9pZCBtb3VzZVVwKGZpbmFsIE1vdXNlRXZlbnQgZSkgew0KKwkJCS8vIElzIGl0IHRoZSBsZWZ0IG1vdXNlIGJ1dHRvbj8NCisJCQkJCQ0KKwkJCWlmICgoZS5idXR0b24gPT0gMSkgJiYgKHplc3RHcmFwaC5nZXRTZWxlY3Rpb24oKS5zaXplKCkgPT0gMCkpDQorCQkJew0KKwkJCQlpbnQgeCA9IERpc3BsYXkuZ2V0Q3VycmVudCgpLmdldEN1cnNvckxvY2F0aW9uKCkueDsNCisJCQkJaW50IHkgPSBEaXNwbGF5LmdldEN1cnJlbnQoKS5nZXRDdXJzb3JMb2NhdGlvbigpLnk7DQorCQkJCS8vIFllcw0KKwkJCQkvLyBuZXcgeCBhbmQgeSBhcmUgZGVmaW5lZCBieSBjdXJyZW50IG1vdXNlIGxvY2F0aW9uIHN1YnRyYWN0ZWQNCisJCQkJLy8gYnkgcHJldmlvdXNseSBwcm9jZXNzZWQgbW91c2UgbG9jYXRpb24NCisJCQkJCQkJDQorCQkJCWludCBuZXdYID0geCAtIGxhc3RPZmZzZXRYOw0KKwkJCQlpbnQgbmV3WSA9IHkgLSBsYXN0T2Zmc2V0WTsNCisJCQkJDQorCQkJCS8vIERpZCB3ZSBtb3ZlIGZyb20gdGhlIHNwb3Qgd2hlcmUgdGhlIG1vdXNlIHdlbnQgZG93bj8NCisJCQkJaWYgKG5ld1ggIT0gMCB8fCBuZXdZICE9IDApIHsNCisJCQkJCS8vIFllcw0KKwkJCQkJYWRkVHJhbnNsYXRpb24obmV3WCwgbmV3WSk7DQorCQkJCX0gLy8gaWYgbW92ZWQNCisNCisJCQlsZWZ0TW91c2VCdXR0b25QcmVzc2VkID0gZmFsc2U7DQorCQkJfQ0KKw0KKw0KKwkJCWlmICgoZS5idXR0b24gPT0gMSkgJiYgKHplc3RHcmFwaC5nZXRTZWxlY3Rpb24oKS5zaXplKCkgPiAwKSkNCisJCQl7DQorCQkJCWludCB4ID0gRGlzcGxheS5nZXRDdXJyZW50KCkuZ2V0Q3Vyc29yTG9jYXRpb24oKS54Ow0KKwkJCQlpbnQgeSA9IERpc3BsYXkuZ2V0Q3VycmVudCgpLmdldEN1cnNvckxvY2F0aW9uKCkueTsNCisJCQkJDQorCQkJCWZvciAoaW50IGk9MDsgaTx6ZXN0R3JhcGguZ2V0U2VsZWN0aW9uKCkuc2l6ZSgpOyBpKyspDQorCQkJCXsNCisJCQkJCUdyYXBoSXRlbSBzZWxlY3RlZEl0ZW0gPSAoR3JhcGhJdGVtKSB6ZXN0R3JhcGguZ2V0U2VsZWN0aW9uKCkuZ2V0KDApOw0KKwkJCQkJaWYgKHNlbGVjdGVkSXRlbSBpbnN0YW5jZW9mIEdyYXBoTm9kZSkNCisJCQkJCXsNCisJCQkJCQkJCQkJCQkJCQkJDQorCQkJCQkJZmluYWwgaW50IG5ld1ggPSB4IC0gbGFzdE9mZnNldFg7DQorCQkJCQkJZmluYWwgaW50IG5ld1kgPSB5IC0gbGFzdE9mZnNldFk7DQorCQkJCQkJbGFzdE9mZnNldFggPSB4Ow0KKwkJCQkJCWxhc3RPZmZzZXRZID0geTsNCisJCQkJCQlpZiAobmV3WCAhPSAwIHx8IG5ld1kgIT0gMCkgew0KKwkJCQkJCQl6ZXN0R3JhcGgucmVkcmF3KCk7DQorCQkJCQkJfQ0KKwkJCQkJfQkJCQkNCisJCQkJfSANCisJCQkJbGVmdE1vdXNlQnV0dG9uUHJlc3NlZCA9IGZhbHNlOw0KKwkJCX0NCisJCQl6ZXN0R3JhcGgucmVkcmF3KCk7DQorCQkJcmVkcmF3KCk7CQ0KKwkJfQ0KKwkJDQorCQkNCisJCXB1YmxpYyB2b2lkIG1vdXNlRG91YmxlQ2xpY2soZmluYWwgTW91c2VFdmVudCBlKSB7fSAgICAgICANCisgICAgfSk7DQorICAgIA0KKyAgICANCisgICAgDQorICAgIC8vTW91c2VNb3ZlIExpc3RlbmVyDQorCXplc3RHcmFwaC5hZGRNb3VzZU1vdmVMaXN0ZW5lcihuZXcgTW91c2VNb3ZlTGlzdGVuZXIoKSB7DQorDQorCQlwdWJsaWMgdm9pZCBtb3VzZU1vdmUoTW91c2VFdmVudCBlKSB7DQorCQkJDQorCQkJaW50IHggPSBEaXNwbGF5LmdldEN1cnJlbnQoKS5nZXRDdXJzb3JMb2NhdGlvbigpLng7DQorCQkJaW50IHkgPSBEaXNwbGF5LmdldEN1cnJlbnQoKS5nZXRDdXJzb3JMb2NhdGlvbigpLnk7DQorCQkJCQkJDQorCQkJDQorCQkJUG9pbnQgeHkgPSB6ZXN0R3JhcGgudG9Db250cm9sKERpc3BsYXkuZ2V0Q3VycmVudCgpLmdldEN1cnNvckxvY2F0aW9uKCkpOw0KKwkJCWRvdWJsZVtdIHh5X3RyYW5zID0gRDJOKHh5LngseHkueSk7DQorCQkJY29vcmRpbmF0ZV90cmFucy5zZXRUZXh0KCJDb29yZGluYXRlczogIiArIGRmLmZvcm1hdCgteHlfdHJhbnNbMV0pICsgIiAiICsgZGYuZm9ybWF0KHh5X3RyYW5zWzBdKSApOw0KKwkJCQ0KKwkJCS8vb3RoZXIgY29vcmQgc3lzdGVtcw0KKwkJCS8vY29vcmRpbmF0ZTIuc2V0VGV4dCgieHkyOiAiICsgZS54ICsgIiAiICsgZS55KTsNCisJCQkvL2Nvb3JkaW5hdGUyLnNldFRleHQoInh5MjogIiArIHh5LnRvU3RyaW5nKCkgKTsNCisJCQkNCisJCQlpZiAoKGxlZnRNb3VzZUJ1dHRvblByZXNzZWQpICYmICh6ZXN0R3JhcGguZ2V0U2VsZWN0aW9uKCkuc2l6ZSgpID09IDApKSB7DQorCQkJCS8vIFllcw0KKwkJCQkvLyBuZXcgeCBhbmQgeSBhcmUgZGVmaW5lZCBieSBjdXJyZW50IG1vdXNlIGxvY2F0aW9uIHN1YnRyYWN0ZWQNCisJCQkJLy8gYnkgcHJldmlvdXNseSBwcm9jZXNzZWQgbW91c2UgbG9jYXRpb24JCQkJCQ0KKwkJCQlmaW5hbCBpbnQgbmV3WCA9IHggLSBsYXN0T2Zmc2V0WDsNCisJCQkJZmluYWwgaW50IG5ld1kgPSB5IC0gbGFzdE9mZnNldFk7CQkJCQkJCQkJDQorCQkJCWxhc3RPZmZzZXRYID0geDsNCisJCQkJbGFzdE9mZnNldFkgPSB5Ow0KKwkJCQkNCisJCQkJLy8gRGlkIHdlIG1vdmUgZnJvbSB0aGUgc3BvdCB3aGVyZSB0aGUgbW91c2Ugd2VudCBkb3duPw0KKwkJCQlpZiAobmV3WCAhPSAwIHx8IG5ld1kgIT0gMCkgew0KKwkJCQkJLy8gWWVzDQorCQkJCQkvLyBUaGlzIGlzIGEgdHJhbnNsYXRpb24gb2YgdGhlIG1hcCB0aGVuDQorCQkJCQkvLyB1cGRhdGUgdGhlIGNhbnZhcyB0cmFuc2xhdGlvbg0KKwkJCQkJYWRkVHJhbnNsYXRpb24obmV3WCwgbmV3WSk7CQkJCQkJDQorCQkJCX0gLy8gaWYgbW92ZWQNCisJCQkJemVzdEdyYXBoLnJlZHJhdygpOw0KKwkJCQlyZWRyYXcoKTsNCisJCQkJDQorCQkJfQ0KKwkJCQ0KKwkJCQ0KKwkJCWlmICgobGVmdE1vdXNlQnV0dG9uUHJlc3NlZCkgJiYgKHplc3RHcmFwaC5nZXRTZWxlY3Rpb24oKS5zaXplKCkgPiAwKSkgew0KKwkJCQlmb3IgKGludCBpPTA7IGk8emVzdEdyYXBoLmdldFNlbGVjdGlvbigpLnNpemUoKTsgaSsrKQ0KKwkJCQl7DQorCQkJCQlHcmFwaEl0ZW0gc2VsZWN0ZWRJdGVtID0gKEdyYXBoSXRlbSkgemVzdEdyYXBoLmdldFNlbGVjdGlvbigpLmdldCgwKTsNCisJCQkJCWlmIChzZWxlY3RlZEl0ZW0gaW5zdGFuY2VvZiBHcmFwaE5vZGUpDQorCQkJCQl7DQorCQkJCQkJR3JhcGhOb2RlIHNlbGVjdGVkTm9kZSA9IChHcmFwaE5vZGUpIHNlbGVjdGVkSXRlbTsNCisJCQkJCQlOb2RlRGF0YSBub2RlRGF0YSA9IChOb2RlRGF0YSkgc2VsZWN0ZWROb2RlLmdldERhdGEoKTsNCisJCQkJCQlTdHJpbmcgbm9kZUlEID0gbm9kZURhdGEuZ2V0Tm9kZUlkZW50aWZpZXIoKTsNCisJCQkJCQlTZXQ8RGlzcGxheVBvbHlnb24+IERpc3BsYXlQb2x5Z29ucyA9IG5vZGVJRDJQb2x5LmdldChub2RlSUQpOw0KKwkJCQkJCWZpbmFsIGludCBuZXdYID0geCAtIGxhc3RPZmZzZXRYOw0KKwkJCQkJCWZpbmFsIGludCBuZXdZID0geSAtIGxhc3RPZmZzZXRZOw0KKwkJCQkJCWxhc3RPZmZzZXRYID0geDsNCisJCQkJCQlsYXN0T2Zmc2V0WSA9IHk7DQorCQkJCQkJaWYgKG5ld1ggIT0gMCB8fCBuZXdZICE9IDApIHsNCisJCQkJCQkJZm9yIChEaXNwbGF5UG9seWdvbiBkaXNwbGF5UG9seWdvbiA6IERpc3BsYXlQb2x5Z29ucykNCisJCQkJCQkJewlhZGRUcmFuc2xhdGlvblRvUG9seShkaXNwbGF5UG9seWdvbiwgbmV3WCwgbmV3WSk7IH0NCisJCQkJCQkJYWRkVHJhbnNsYXRpb25Ub05vZGUoc2VsZWN0ZWROb2RlLCBuZXdYLCBuZXdZKTsNCisJCQkJCQkJZG91YmxlW10gbm9kZXh5X3RyYW5zID0gbmV3IGRvdWJsZVtdeygoTm9kZURhdGEpc2VsZWN0ZWROb2RlLmdldERhdGEoKSkuZ2V0T3JpZ1goKS9SRkQsICgoTm9kZURhdGEpc2VsZWN0ZWROb2RlLmdldERhdGEoKSkuZ2V0T3JpZ1koKS9SRkR9Ow0KKwkJCQkJCQlub2RlWFlfZWRpdC5zZXRUZXh0KCBkZi5mb3JtYXQoLW5vZGV4eV90cmFuc1sxXSkgKyAiICIgKyBkZi5mb3JtYXQobm9kZXh5X3RyYW5zWzBdKSk7DQorCQkJCQkJCQ0KKwkJCQkJCQl6ZXN0R3JhcGgucmVkcmF3KCk7DQorCQkJCQkJfQ0KKwkJCQkJfQ0KKwkJCQl9CQkJCQ0KKwkJCQkvL3VwZGF0ZSgpOwkNCisJCQl9IC8vIGlmIG1vdXNlIHByZXNzZWQgYW5kIHNlbGVjdGlvbg0KKwkJCQ0KKwkJfSAvL2VuZCBNb3VzZU1vdmUNCisJCQ0KKwkJfSk7DQorCQ0KKwkNCisJLy9TZWxlY3Rpb24gb2YgTm9kZXMgLyBFZGdlcw0KKwl6ZXN0R3JhcGguYWRkU2VsZWN0aW9uTGlzdGVuZXIobmV3IFNlbGVjdGlvbkxpc3RlbmVyKCkgew0KKwkJcHVibGljIHZvaWQgd2lkZ2V0U2VsZWN0ZWQob3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5TZWxlY3Rpb25FdmVudCBlKSB7DQorCQkJDQorDQorCQkJTGlzdDxHcmFwaEl0ZW0+IHNlbGVjdGVkSXRlbXMgPSB6ZXN0R3JhcGguZ2V0U2VsZWN0aW9uKCk7DQorCQkJaWYgKHNlbGVjdGVkSXRlbXMuc2l6ZSgpID09IDEpDQorCQkJewkNCisJCQkJbm9kZUFVUklfZWRpdC5zZXRWaXNpYmxlKHRydWUpOw0KKwkJCQlub2RlQlVSSV9lZGl0LnNldFZpc2libGUodHJ1ZSk7DQorCQkJCWVkZ2VMYWJlbFR5cGVfZWRpdC5zZXRWaXNpYmxlKHRydWUpOw0KKwkJCQllZGdlTGFiZWxWYWx1ZV9lZGl0LnNldFZpc2libGUodHJ1ZSk7DQorCQkJCWVkZ2VUaXRsZV9lZGl0LnNldFZpc2libGUodHJ1ZSk7DQorCQkJCW5vZGVVUklfZWRpdC5zZXRWaXNpYmxlKHRydWUpOw0KKwkJCQlub2RlVGl0bGVfZWRpdC5zZXRWaXNpYmxlKHRydWUpOw0KKwkJCQlub2RlTGFiZWxUeXBlX2VkaXQuc2V0VmlzaWJsZSh0cnVlKTsNCisJCQkJbm9kZUxhYmVsVmFsdWVfZWRpdC5zZXRWaXNpYmxlKHRydWUpOw0KKwkJCQlub2RlWFlfZWRpdC5zZXRWaXNpYmxlKHRydWUpOw0KKwkJCQkNCisJCQkJDQorCQkJCUdyYXBoSXRlbSBzZWxlY3RlZEl0ZW0gPSBzZWxlY3RlZEl0ZW1zLmdldCgwKTsNCisJCQkJDQorCQkJCQ0KKwkJCQlpZiAoc2VsZWN0ZWRJdGVtIGluc3RhbmNlb2YgR3JhcGhOb2RlKQ0KKwkJCQl7CQkJCQkJCQ0KKwkJCQkJbm9kZUFVUklfZWRpdC5zZXRWaXNpYmxlKGZhbHNlKTsNCisJCQkJCW5vZGVCVVJJX2VkaXQuc2V0VmlzaWJsZShmYWxzZSk7DQorCQkJCQllZGdlTGFiZWxUeXBlX2VkaXQuc2V0VmlzaWJsZShmYWxzZSk7DQorCQkJCQllZGdlTGFiZWxWYWx1ZV9lZGl0LnNldFZpc2libGUoZmFsc2UpOw0KKwkJCQkJZWRnZVRpdGxlX2VkaXQuc2V0VmlzaWJsZShmYWxzZSk7DQorCQkJCQlHcmFwaE5vZGUgc2VsZWN0ZWROb2RlID0gKEdyYXBoTm9kZSkgc2VsZWN0ZWRJdGVtOw0KKwkJCQkJTm9kZURhdGEgbm9kZURhdGEgPSAoTm9kZURhdGEpIHNlbGVjdGVkTm9kZS5nZXREYXRhKCk7CQkJCQkNCisJCQkJCWlmIChzZWxlY3RlZE5vZGUuZ2V0RGF0YSgpICE9IG51bGwpDQorCQkJCQl7CQkJCQkJCQkJCQkJCQ0KKwkJCQkJCW5vZGVVUklfZWRpdC5zZXRUZXh0KCgoTm9kZURhdGEpc2VsZWN0ZWROb2RlLmdldERhdGEoKSkuZ2V0Tm9kZVVSSSgpLmxhc3RTZWdtZW50KCkudG9TdHJpbmcoKSk7DQorCQkJCQkJbm9kZVRpdGxlX2VkaXQuc2V0VGV4dCgoKE5vZGVEYXRhKXNlbGVjdGVkTm9kZS5nZXREYXRhKCkpLmdldE5vZGVUaXRsZSgpLnRvU3RyaW5nKCkpOw0KKwkJCQkJCQ0KKwkJCQkJCUxpc3Q8b3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLk5vZGVMYWJlbD4gbm9kZUxhYmVscyA9IG5vZGVEYXRhLmdldE5vZGVMYWJlbHMoKTsJIA0KKwkJCQkJCQkJCQkJCQ0KKwkJCQkJCQ0KKwkJCQkJCUxpc3Q8SW50ZWdlcj4gbm9kZUxhYmVsVHlwZXMgPSBub2RlRGF0YS5nZXROb2RlTGFiZWxUeXBlcygpOw0KKwkJCQkJCQkNCisJCQkJCQlub2RlTGFiZWxUeXBlX2VkaXQucmVtb3ZlQWxsKCk7CQ0KKwkJCQkJCW5vZGVMYWJlbFZhbHVlX2VkaXQucmVtb3ZlQWxsKCk7DQorCQkJCQkJZm9yKGludCBpPTA7IGk8bm9kZUxhYmVsVHlwZXMuc2l6ZSgpOyBpKyspIAkJCQkJCQkgIA0KKwkJCQkJCXsJCQkJCQkJCQkJCQkJCQkJDQorCQkJCQkJCXN3aXRjaChub2RlTGFiZWxUeXBlcy5nZXQoaSkpDQorCQkJCQkJCXsNCisJCQkJCQkJCWNhc2UgQVJFQV9MQUJFTDogIAlub2RlTGFiZWxUeXBlX2VkaXQuYWRkKCJBcmVhIExhYmVsIixpKTsJCQkJCQkJCQkJIA0KKwkJCQkJCQkJCQkJCQlicmVhazsNCisJCQkJCQkJCQkJCQkgIA0KKwkJCQkJCQkJY2FzZSBQT1BVTEFUSU9OX0xBQkVMOiAJbm9kZUxhYmVsVHlwZV9lZGl0LmFkZCgiUG9wdWxhdGlvbiBMYWJlbCIsaSk7CQkJCQkJCQkJCQkJCQ0KKwkJCQkJCQkJCQkJCQkJYnJlYWs7DQorCQkJCQkJCQkJCQkJICANCisJCQkJCQkJfQ0KKwkJCQkJCQkJCQkJCQ0KKwkJCQkJCX0NCisJCQkJCQkNCisJCQkJCQkNCisJCQkJCQkvLyBpbml0aWFsaXplIGxhYmVsIHZhbHVlcyBmb3IgZmlyc3QgbGFiZWwgd2hlbiBub2RlIGlzIHNlbGVjdGVkDQorCQkJCQkJaWYgKG5vZGVMYWJlbFR5cGVfZWRpdC5nZXRJdGVtQ291bnQoKSA+MCkNCisJCQkJCQl7CQ0KKwkJCQkJCQlub2RlTGFiZWxUeXBlX2VkaXQuc2VsZWN0KDApOw0KKwkJCQkJCQkNCisJCQkJCQkJTm9kZUxhYmVsIG5vZGVMYWJlbCA9IG5vZGVMYWJlbHMuZ2V0KDApOw0KKwkJCQkJCQkNCisJCQkJCQkJc3dpdGNoKG5vZGVMYWJlbFR5cGVzLmdldCgwKSkNCisJCQkJCQkJew0KKwkJCQkJCQljYXNlIEFSRUFfTEFCRUw6IAlBcmVhTGFiZWwgYXJlYUxhYmVsID0gKEFyZWFMYWJlbCkgbm9kZUxhYmVsOyANCisJCQkJCQkJCQkJCQlub2RlTGFiZWxWYWx1ZV9lZGl0LmFkZChTdHJpbmcudmFsdWVPZihhcmVhTGFiZWwuZ2V0Q3VycmVudEFyZWFWYWx1ZSgpLmdldEFyZWEoKSkpOw0KKwkJCQkJCQkJCQkJCW5vZGVMYWJlbFZhbHVlLnNldFRleHQoIlZhbHVlIChBcmVhIGttXjIpOiAiKTsNCisJCQkJCQkJCQkJCQlicmVhazsNCisJCQkJCQkJY2FzZSBQT1BVTEFUSU9OX0xBQkVMOglQb3B1bGF0aW9uTGFiZWwgcG9wdWxhdGlvbkxhYmVsID0gKFBvcHVsYXRpb25MYWJlbCkgbm9kZUxhYmVsOw0KKwkJCQkJCQkJCQkJCQlub2RlTGFiZWxWYWx1ZV9lZGl0LmFkZChwb3B1bGF0aW9uTGFiZWwuZ2V0TmFtZSgpKTsNCisJCQkJCQkJCQkJCQkJbm9kZUxhYmVsVmFsdWVfZWRpdC5hZGQoU3RyaW5nLnZhbHVlT2YocG9wdWxhdGlvbkxhYmVsLmdldEN1cnJlbnRQb3B1bGF0aW9uVmFsdWUoKS5nZXRDb3VudCgpKSk7DQorCQkJCQkJCQkJCQkJCW5vZGVMYWJlbFZhbHVlX2VkaXQuYWRkKFN0cmluZy52YWx1ZU9mKHBvcHVsYXRpb25MYWJlbC5nZXRQb3B1bGF0ZWRBcmVhKCkpKTsNCisJCQkJCQkJCQkJCQkJbm9kZUxhYmVsVmFsdWUuc2V0VGV4dCgiVmFsdWUgKFBvcHVsYXRpb24gbmFtZSk6ICIpOw0KKwkJCQkJCQkJCQkJCQlicmVhazsNCisJCQkJCQkJfQ0KKwkJCQkJCQlub2RlTGFiZWxWYWx1ZV9lZGl0LnNlbGVjdCgwKTsJCQkJCQkJDQorCQkJCQkJfQkJDQorCQkJCQl9CQkJCQkJCQkJCQ0KKwkJCQkJZG91YmxlW10geHlfdHJhbnMgPSBuZXcgZG91YmxlW117KChOb2RlRGF0YSlzZWxlY3RlZE5vZGUuZ2V0RGF0YSgpKS5nZXRPcmlnWCgpL1JGRCwgKChOb2RlRGF0YSlzZWxlY3RlZE5vZGUuZ2V0RGF0YSgpKS5nZXRPcmlnWSgpL1JGRH07DQorCQkJCQlub2RlWFlfZWRpdC5zZXRUZXh0KCBkZi5mb3JtYXQoLXh5X3RyYW5zWzFdKSArICIgIiArIGRmLmZvcm1hdCh4eV90cmFuc1swXSkpOw0KKwkJCQl9DQorCQkJCQ0KKwkJCQkNCisJCQkJZWxzZSBpZiAoc2VsZWN0ZWRJdGVtIGluc3RhbmNlb2YgR3JhcGhDb25uZWN0aW9uKQ0KKwkJCQl7CQ0KKwkJCQkJbm9kZVVSSV9lZGl0LnNldFZpc2libGUoZmFsc2UpOw0KKwkJCQkJbm9kZVRpdGxlX2VkaXQuc2V0VmlzaWJsZShmYWxzZSk7DQorCQkJCQlub2RlTGFiZWxUeXBlX2VkaXQuc2V0VmlzaWJsZShmYWxzZSk7DQorCQkJCQlub2RlTGFiZWxWYWx1ZV9lZGl0LnNldFZpc2libGUoZmFsc2UpOw0KKwkJCQkJbm9kZVhZX2VkaXQuc2V0VmlzaWJsZShmYWxzZSk7DQorCQkJCQlHcmFwaENvbm5lY3Rpb24gc2VsZWN0ZWRFZGdlID0gKEdyYXBoQ29ubmVjdGlvbikgc2VsZWN0ZWRJdGVtOw0KKwkJCQkJaWYgKHNlbGVjdGVkRWRnZS5nZXREYXRhKCkgIT0gbnVsbCkNCisJCQkJCXsNCisJCQkJCQllZGdlVGl0bGVfZWRpdC5zZXRUZXh0KCgoQ29ubmVjdGlvbkRhdGEpc2VsZWN0ZWRFZGdlLmdldERhdGEoKSkuZ2V0RWRnZVRpdGxlKCkpOw0KKwkJCQkJCW5vZGVBVVJJX2VkaXQuc2V0VGV4dCgoKENvbm5lY3Rpb25EYXRhKXNlbGVjdGVkRWRnZS5nZXREYXRhKCkpLmdldE5vZGVBVVJJKCkubGFzdFNlZ21lbnQoKS50b1N0cmluZygpKTsNCisJCQkJCQlub2RlQlVSSV9lZGl0LnNldFRleHQoKChDb25uZWN0aW9uRGF0YSlzZWxlY3RlZEVkZ2UuZ2V0RGF0YSgpKS5nZXROb2RlQlVSSSgpLmxhc3RTZWdtZW50KCkudG9TdHJpbmcoKSk7DQorCQkJCQkJDQorCQkJCQkJDQorCQkJCQkJc3dpdGNoICggICgoQ29ubmVjdGlvbkRhdGEpc2VsZWN0ZWRFZGdlLmdldERhdGEoKSkuZ2V0RWRnZUxhYmVsVHlwZSgpICkNCisJCQkJCQl7DQorCQkJCQkJY2FzZSBNSUdSQVRJT05fRURHRToJTWlncmF0aW9uRWRnZUxhYmVsIG1pZ3JhdGlvbkVkZ2VMYWJlbCA9IChNaWdyYXRpb25FZGdlTGFiZWwpKChDb25uZWN0aW9uRGF0YSlzZWxlY3RlZEVkZ2UuZ2V0RGF0YSgpKS5nZXRFZGdlTGFiZWwoKTsNCisJCQkJCQkJCQkJCQllZGdlTGFiZWxUeXBlX2VkaXQuc2V0VGV4dCgiTWlncmF0aW9uIEVkZ2UiKTsNCisJCQkJCQkJCQkJCQllZGdlTGFiZWxWYWx1ZV9lZGl0LnNldFRleHQobWlncmF0aW9uRWRnZUxhYmVsLmdldEN1cnJlbnRWYWx1ZSgpLmdldE1pZ3JhdGlvblJhdGUoKSsiIik7DQorCQkJCQkJCQkJCQkJYnJlYWs7DQorCQkJCQkJY2FzZSBDT05UQUlOTUVOVF9FREdFOiAgUmVsYXRpdmVQaHlzaWNhbFJlbGF0aW9uc2hpcExhYmVsIHJwcmwgPSAoUmVsYXRpdmVQaHlzaWNhbFJlbGF0aW9uc2hpcExhYmVsKSAoKENvbm5lY3Rpb25EYXRhKXNlbGVjdGVkRWRnZS5nZXREYXRhKCkpLmdldEVkZ2VMYWJlbCgpOw0KKwkJCQkJCQkJCQkJCWVkZ2VMYWJlbFR5cGVfZWRpdC5zZXRUZXh0KCJDb250YWlubWVudCBFZGdlIik7DQorCQkJCQkJCQkJCQkJLy9lZGdlTGFiZWxWYWx1ZV9lZGl0LnNldFRleHQocnBybC5nZXRDdXJyZW50VmFsdWUoKS50b1N0cmluZygpKTsNCisJCQkJCQkJCQkJCQllZGdlTGFiZWxWYWx1ZV9lZGl0LnNldFZpc2libGUoZmFsc2UpOwkJCQkJCQkJCQkJDQorCQkJCQkJCQkJCQkJYnJlYWs7DQorCQkJCQkJY2FzZSBDT01NT05fQk9SREVSX0VER0U6Q29tbW9uQm9yZGVyUmVsYXRpb25zaGlwTGFiZWwgY2JybCA9IChDb21tb25Cb3JkZXJSZWxhdGlvbnNoaXBMYWJlbCkgKChDb25uZWN0aW9uRGF0YSlzZWxlY3RlZEVkZ2UuZ2V0RGF0YSgpKS5nZXRFZGdlTGFiZWwoKTsNCisJCQkJCQkJCQkJCQllZGdlTGFiZWxUeXBlX2VkaXQuc2V0VGV4dCgiQ29tbW9uIEJvcmRlciBFZGdlIik7DQorCQkJCQkJCQkJCQkJZWRnZUxhYmVsVmFsdWVfZWRpdC5zZXRWaXNpYmxlKGZhbHNlKTsNCisJCQkJCQkJCQkJCQlicmVhazsNCisJCQkJCQljYXNlIFVOREVGSU5FRDoJCQllZGdlTGFiZWxUeXBlX2VkaXQuc2V0VGV4dCgiIik7DQorCQkJCQkJCQkJCQkJZWRnZUxhYmVsVmFsdWVfZWRpdC5zZXRUZXh0KCIiKTsNCisJCQkJCQkJCQkJCQkNCisJCQkJCQl9CQkJCQkJCQkJCQkJDQorCQkJCQl9DQorCQkJCX0NCisJCQl9IC8vIFNlbGVjdGlvbiBzaXplIG9mIHplc3QgR3JhcGggPT0gMQ0KKwkJCWVsc2UgLy8gc2VsZWN0aW9uIHNpemUgPSAwIG9yID4gMQ0KKwkJCXsNCisJCQkJbm9kZUFVUklfZWRpdC5zZXRWaXNpYmxlKGZhbHNlKTsNCisJCQkJbm9kZUJVUklfZWRpdC5zZXRWaXNpYmxlKGZhbHNlKTsJCQkJDQorCQkJCWVkZ2VMYWJlbFR5cGVfZWRpdC5zZXRWaXNpYmxlKGZhbHNlKTsNCisJCQkJZWRnZUxhYmVsVmFsdWVfZWRpdC5zZXRWaXNpYmxlKGZhbHNlKTsNCisJCQkJZWRnZVRpdGxlX2VkaXQuc2V0VmlzaWJsZShmYWxzZSk7DQorCQkJCW5vZGVVUklfZWRpdC5zZXRWaXNpYmxlKGZhbHNlKTsNCisJCQkJbm9kZVRpdGxlX2VkaXQuc2V0VmlzaWJsZShmYWxzZSk7DQorCQkJCW5vZGVMYWJlbFR5cGVfZWRpdC5zZXRWaXNpYmxlKGZhbHNlKTsNCisJCQkJbm9kZUxhYmVsVmFsdWUuc2V0VGV4dCgiVmFsdWU6ICIpOw0KKwkJCQlub2RlTGFiZWxWYWx1ZV9lZGl0LnNldFZpc2libGUoZmFsc2UpOw0KKwkJCQlub2RlWFlfZWRpdC5zZXRWaXNpYmxlKGZhbHNlKTsNCisJCQkJDQorCQkJCQ0KKwkJCX0NCisNCisJDQorCQl9DQorDQorCQlwdWJsaWMgdm9pZCB3aWRnZXREZWZhdWx0U2VsZWN0ZWQob3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5TZWxlY3Rpb25FdmVudCBlKSB7DQorCQl9DQorCX0pOw0KKw0KKwkNCisJDQorCS8vWm9vbSB3aXRoIG1vdXNlIHdoZWVsDQorICAgIHplc3RHcmFwaC5hZGRNb3VzZVdoZWVsTGlzdGVuZXIoDQorICAgIAkJbmV3IE1vdXNlV2hlZWxMaXN0ZW5lcigpew0KKyAgICAJCQkNCisgICAgCQkJcHVibGljIHZvaWQgbW91c2VTY3JvbGxlZChmaW5hbCBNb3VzZUV2ZW50IGUpIHsNCisgICAgCQkJCS8vIFpvb20gT3V0Pw0KKyAgICAJCQkJDQorICAgIAkJCQlpZiAoZS5jb3VudCA+PSAwKSANCisJCQkJCXsJDQorICAgIAkJCQkJem9vbUluKCk7DQorICAgIAkJCQkJemVzdEdyYXBoLnJlZHJhdygpOyAgDQorICAgIAkJCQkJZG91YmxlIHpvb21GYWN0b3JfZGlzcGxheSA9ICgoaW50KSh6b29tRmFjdG9yKjEwMCkpLzEwMC4wOw0KKyAgICAJCQkJCXpvb20uc2V0VGV4dCgiWm9vbTogIiArIHpvb21GYWN0b3JfZGlzcGxheSk7DQorCQkJCQl9DQorICAgIAkJCSAgICBlbHNlIHsJICAgIAkJCSAgICAJDQorICAgIAkJCSAgICAJem9vbU91dCgpOw0KKyAgICAJCQkgICAgCXplc3RHcmFwaC5yZWRyYXcoKTsNCisgICAgCQkJICAgIAlkb3VibGUgem9vbUZhY3Rvcl9kaXNwbGF5ID0gKChpbnQpKHpvb21GYWN0b3IqMTAwKSkvMTAwLjA7DQorICAgIAkJCSAgICAJem9vbS5zZXRUZXh0KCJab29tOiAiICsgem9vbUZhY3Rvcl9kaXNwbGF5KTsNCisgICAgCQkJICAgIH0JICAgIAkJCQ0KKyAgICAJCX0JICAgIA0KKyAgICB9KTsNCisgICAgDQorICAgIA0KKyAgICANCisgICAgDQorCS8vIENyZWF0ZSBjb250ZXh0IG1lbnUNCisJTWVudSBtZW51ID0gbmV3IE1lbnUoemVzdEdyYXBoLmdldFNoZWxsKCksU1dULlBPUF9VUCApOw0KKwkNCisJDQorCQ0KKwlmaW5hbCBNZW51SXRlbSBhZGRMYWJlbCA9IG5ldyBNZW51SXRlbShtZW51LCBTV1QuQ0FTQ0FERSk7DQorCWZpbmFsIE1lbnUgbGFiZWxNZW51ID0gbmV3IE1lbnUoemVzdEdyYXBoLmdldFNoZWxsKCksIFNXVC5EUk9QX0RPV04pOw0KKwlmaW5hbCBNZW51SXRlbSBhZGRBcmVhTGFiZWwgPSBuZXcgTWVudUl0ZW0obGFiZWxNZW51LCBTV1QuUFVTSCk7DQorCWZpbmFsIE1lbnVJdGVtIGFkZFBvcHVsYXRpb25MYWJlbCA9IG5ldyBNZW51SXRlbShsYWJlbE1lbnUsIFNXVC5QVVNIKTsNCisJYWRkTGFiZWwuc2V0TWVudShsYWJlbE1lbnUpOw0KKwlhZGRMYWJlbC5zZXRUZXh0KCJBZGQgTGFiZWwiKTsgICAgDQorICAgIGFkZEFyZWFMYWJlbC5zZXRUZXh0KCJBZGQgQXJlYSBMYWJlbCIpOw0KKyAgICBhZGRQb3B1bGF0aW9uTGFiZWwuc2V0VGV4dCgiQWRkIFBvcHVsYXRpb24gTGFiZWwiKTsNCisJDQorICAgIC8qDQorICAgIC8vVE9ETyBhZGQgZWRnZXMgdG8gZ3JhcGgNCisJTWVudUl0ZW0gYWRkRWRnZSA9IG5ldyBNZW51SXRlbShtZW51LCBTV1QuQ0FTQ0FERSk7DQorCU1lbnUgZWRnZU1lbnUgPSBuZXcgTWVudSh6ZXN0R3JhcGguZ2V0U2hlbGwoKSwgU1dULkRST1BfRE9XTik7DQorCU1lbnVJdGVtIGFkZE1pZ3JhdGlvbkVkZ2UgPSBuZXcgTWVudUl0ZW0oZWRnZU1lbnUsIFNXVC5DQVNDQURFKTsNCisJTWVudUl0ZW0gYWRkQ29udGFpbm1lbnRFZGdlID0gbmV3IE1lbnVJdGVtKGVkZ2VNZW51LCBTV1QuQ0FTQ0FERSk7DQorCWFkZEVkZ2Uuc2V0VGV4dCgiQWRkIEVkZ2UiKTsNCisJYWRkRWRnZS5zZXRNZW51KGVkZ2VNZW51KTsNCisJYWRkTWlncmF0aW9uRWRnZS5zZXRUZXh0KCJBZGQgTWlncmF0aW9uIEVkZ2UiKTsNCisgICAgYWRkQ29udGFpbm1lbnRFZGdlLnNldFRleHQoIkFkZCBDb250YWlubWVudCBFZGdlIik7DQorCSovDQorICAgIA0KK21lbnUuYWRkTWVudUxpc3RlbmVyKG5ldyBNZW51TGlzdGVuZXIoKSB7DQorICAgIAkNCisJCXB1YmxpYyB2b2lkIG1lbnVIaWRkZW4ob3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5NZW51RXZlbnQgZSkgew0KKyAgICAJDQorICAgIAl9DQorICAgIAkNCisJCQ0KKwkJcHVibGljIHZvaWQgbWVudVNob3duKG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuTWVudUV2ZW50IGUpIHsNCisJCQkNCisJCQlMaXN0PEdyYXBoSXRlbT4gc2VsZWN0ZWRJdGVtcyA9IHplc3RHcmFwaC5nZXRTZWxlY3Rpb24oKTsNCisJCQlpZiAoc2VsZWN0ZWRJdGVtcy5zaXplKCkgPT0gMSkgDQorCQkJeyANCisJCQkJaWYgKHNlbGVjdGVkSXRlbXMuZ2V0KDApIGluc3RhbmNlb2YgR3JhcGhOb2RlKQ0KKwkJCQl7DQorCQkJCQkvL2FkZEFyZWFMYWJlbC5zZXRFbmFibGVkKHRydWUpOw0KKwkJCQkJYWRkTGFiZWwuc2V0RW5hYmxlZCh0cnVlKTsNCisJCQkJfQ0KKwkJCQllbHNlIA0KKwkJCQl7DQorCQkJCQlhZGRMYWJlbC5zZXRFbmFibGVkKGZhbHNlKTsNCisJCQkJCS8vYWRkQXJlYUxhYmVsLnNldEVuYWJsZWQoZmFsc2UpOw0KKwkJCQl9DQorCQkJfQ0KKwkJCWVsc2UgDQorCQkJew0KKwkJCQlhZGRMYWJlbC5zZXRFbmFibGVkKGZhbHNlKTsNCisJCQkJLy9hZGRBcmVhTGFiZWwuc2V0RW5hYmxlZChmYWxzZSk7DQorCQkJfSAgIAkNCisJCX0NCisgICAgfSk7DQorICAgIA0KKyAgICANCisgICANCisgICAgDQorICAgIGFkZEFyZWFMYWJlbC5hZGRTZWxlY3Rpb25MaXN0ZW5lcihuZXcgU2VsZWN0aW9uTGlzdGVuZXIoKSB7DQorCQlwdWJsaWMgdm9pZCB3aWRnZXRTZWxlY3RlZChvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLlNlbGVjdGlvbkV2ZW50IGUpIHsNCisJCQlMaXN0PEdyYXBoSXRlbT4gc2VsZWN0ZWRJdGVtcyA9IHplc3RHcmFwaC5nZXRTZWxlY3Rpb24oKTsNCisJCQlpZiAoc2VsZWN0ZWRJdGVtcy5zaXplKCkgPT0gMSkgDQorCQkJeyANCisJCQkJaWYgKHNlbGVjdGVkSXRlbXMuZ2V0KDApIGluc3RhbmNlb2YgR3JhcGhJdGVtKQ0KKwkJCQl7CQkJCQkNCisJCQkJCUdyYXBoSXRlbSBzZWxlY3RlZE5vZGUgPSAoR3JhcGhJdGVtKSBzZWxlY3RlZEl0ZW1zLmdldCgwKTsNCisJCQkJCU5vZGVEYXRhIG5vZGVEYXRhID0gKE5vZGVEYXRhKSBzZWxlY3RlZE5vZGUuZ2V0RGF0YSgpOw0KKwkJCQkJDQorCQkJCQlmaW5hbCBBcmVhTGFiZWwgYXJlYUxhYmVsID0gTGFiZWxzRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlQXJlYUxhYmVsKCk7DQorCQkJCQlhcmVhTGFiZWwuZ2V0Q3VycmVudEFyZWFWYWx1ZSgpLnNldEFyZWEoMC4wKTsJCQkJDQorCQkJCQlhcmVhTGFiZWwuc2V0VVJJT2ZJZGVudGlmaWFibGVUb0JlTGFiZWxlZChub2RlRGF0YS5nZXROb2RlVVJJKCkpOw0KKwkJCQkJYXJlYUxhYmVsLnNldE5vZGUobm9kZURhdGEuZ2V0Tm9kZSgpKTsNCisJCQkJCVVSSSBuZXdVUkkgPSBjcmVhdGVBcmVhTGFiZWxVUkkobm9kZURhdGEuZ2V0Tm9kZSgpKTsNCisJCQkJCS8vcHJldmVudHMgbXVsdGlwbGUgbGFiZWxzLCBpbXBvcnRhbnQgZm9yIHBvcHVsYXRpb24gYWxyZWFkeQ0KKwkJCQkJLy9hcmVhTGFiZWwuc2V0VVJJKG5ld1VSSSk7DQorCQkJCQkvL3N0ZW1HcmFwaC5nZXROb2RlTGFiZWxzKCkucHV0KG5ld1VSSSwgYXJlYUxhYmVsKTsNCisJCQkJCXN0ZW1HcmFwaC5nZXROb2RlTGFiZWxzKCkucHV0KGFyZWFMYWJlbC5nZXRVUkkoKSwgYXJlYUxhYmVsKTsNCisJCQkJCQ0KKwkJCQkJbm9kZURhdGEuZ2V0Tm9kZUxhYmVscygpLmFkZChhcmVhTGFiZWwpOw0KKwkJCQkJbm9kZURhdGEuZ2V0Tm9kZUxhYmVsVHlwZXMoKS5hZGQoQVJFQV9MQUJFTCk7DQorCQkJCQlub2RlTGFiZWxUeXBlX2VkaXQuYWRkKCJBcmVhIExhYmVsIik7DQorCQkJCQlub2RlTGFiZWxUeXBlX2VkaXQuc2VsZWN0KG5vZGVMYWJlbFR5cGVfZWRpdC5nZXRJdGVtQ291bnQoKS0xKTsNCisJCQkJCW5vZGVMYWJlbFZhbHVlX2VkaXQuc2V0SXRlbXMobmV3IFN0cmluZ1tdeyIwLjAifSk7DQorCQkJCQlub2RlTGFiZWxWYWx1ZV9lZGl0LnNlbGVjdCgwKTsNCisJCQkJCQ0KKwkJCQl9DQorCQkJfQ0KKw0KKwkJfQ0KKwkJcHVibGljIHZvaWQgd2lkZ2V0RGVmYXVsdFNlbGVjdGVkKG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuU2VsZWN0aW9uRXZlbnQgZSkgew0KKwkJfQ0KKwl9KTsNCisgICAgDQorICAgIA0KKyAgICANCisgICAgYWRkUG9wdWxhdGlvbkxhYmVsLmFkZFNlbGVjdGlvbkxpc3RlbmVyKG5ldyBTZWxlY3Rpb25MaXN0ZW5lcigpIHsNCisJCXB1YmxpYyB2b2lkIHdpZGdldFNlbGVjdGVkKG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuU2VsZWN0aW9uRXZlbnQgZSkgew0KKwkJCUxpc3Q8R3JhcGhJdGVtPiBzZWxlY3RlZEl0ZW1zID0gemVzdEdyYXBoLmdldFNlbGVjdGlvbigpOw0KKwkJCWlmIChzZWxlY3RlZEl0ZW1zLnNpemUoKSA9PSAxKSANCisJCQl7IA0KKwkJCQlpZiAoc2VsZWN0ZWRJdGVtcy5nZXQoMCkgaW5zdGFuY2VvZiBHcmFwaEl0ZW0pDQorCQkJCXsJCQkNCisJCQkJCVN0cmluZyBpbml0UG9wID0gInBvcHVsYXRpb24gbmFtZSI7DQorCQkJCQlHcmFwaEl0ZW0gc2VsZWN0ZWROb2RlID0gKEdyYXBoSXRlbSkgc2VsZWN0ZWRJdGVtcy5nZXQoMCk7DQorCQkJCQlOb2RlRGF0YSBub2RlRGF0YSA9IChOb2RlRGF0YSkgc2VsZWN0ZWROb2RlLmdldERhdGEoKTsNCisJCQkJCVBvcHVsYXRpb25MYWJlbCBwb3B1bGF0aW9uTGFiZWwgPSBMYWJlbHNGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVQb3B1bGF0aW9uTGFiZWwoKTsNCisJCQkJCXBvcHVsYXRpb25MYWJlbC5zZXRQb3B1bGF0aW9uSWRlbnRpZmllcihpbml0UG9wKTsNCisJCQkJCXBvcHVsYXRpb25MYWJlbC5zZXRQb3B1bGF0ZWRBcmVhKDAuMCk7DQorCQkJCQlwb3B1bGF0aW9uTGFiZWwuZ2V0Q3VycmVudFBvcHVsYXRpb25WYWx1ZSgpLnNldENvdW50KDApOw0KKwkJCQkJcG9wdWxhdGlvbkxhYmVsLnNldE5hbWUoaW5pdFBvcCk7DQorCQkJCQlwb3B1bGF0aW9uTGFiZWwuc2V0VVJJT2ZJZGVudGlmaWFibGVUb0JlTGFiZWxlZChub2RlRGF0YS5nZXROb2RlVVJJKCkpOw0KKwkJCQkJcG9wdWxhdGlvbkxhYmVsLnNldE5vZGUobm9kZURhdGEuZ2V0Tm9kZSgpKTsNCisJCQkJCVVSSSBuZXdVUkkgPSBjcmVhdGVQb3B1bGF0aW9uTGFiZWxVUkkobm9kZURhdGEuZ2V0Tm9kZSgpLCBpbml0UG9wKTsNCisJCQkJCQ0KKwkJCQkJLy90aGlzIHdvdWxkIHByZXZlbnQgbXVsdGlwbGUgbGFiZWxzLCBpbXBvcnRhbnQgZm9yIHBvcHVsYXRpb24gYWxyZWFkeQ0KKwkJCQkJLy9wb3B1bGF0aW9uTGFiZWwuc2V0VVJJKG5ld1VSSSk7DQorCQkJCQkNCisJCQkJCS8vc3RlbUdyYXBoLmdldE5vZGVMYWJlbHMoKS5wdXQobmV3VVJJLCBwb3B1bGF0aW9uTGFiZWwpOwkJCQkJDQorCQkJCQlzdGVtR3JhcGguZ2V0Tm9kZUxhYmVscygpLnB1dChwb3B1bGF0aW9uTGFiZWwuZ2V0VVJJKCksIHBvcHVsYXRpb25MYWJlbCk7DQorCQkJCQkNCisJCQkJCQ0KKwkJCQkJbm9kZURhdGEuZ2V0Tm9kZUxhYmVscygpLmFkZChwb3B1bGF0aW9uTGFiZWwpOw0KKwkJCQkJbm9kZURhdGEuZ2V0Tm9kZUxhYmVsVHlwZXMoKS5hZGQoUE9QVUxBVElPTl9MQUJFTCk7DQorCQkJCQlub2RlTGFiZWxUeXBlX2VkaXQuYWRkKCJQb3B1bGF0aW9uIExhYmVsIik7DQorCQkJCQlub2RlTGFiZWxUeXBlX2VkaXQuc2VsZWN0KG5vZGVMYWJlbFR5cGVfZWRpdC5nZXRJdGVtQ291bnQoKS0xKTsNCisJCQkJCW5vZGVMYWJlbFZhbHVlX2VkaXQuc2V0SXRlbXMobmV3IFN0cmluZ1tde2luaXRQb3AsICIwIiwgIjAuMCJ9KTsNCisJCQkJCW5vZGVMYWJlbFZhbHVlX2VkaXQuc2VsZWN0KDApOw0KKwkJDQorCQkJCX0NCisJCQl9DQorDQorCQl9DQorCQlwdWJsaWMgdm9pZCB3aWRnZXREZWZhdWx0U2VsZWN0ZWQob3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5TZWxlY3Rpb25FdmVudCBlKSB7DQorCQl9DQorCX0pOw0KKyAgICAgICAgIA0KKyAgICB6ZXN0R3JhcGguc2V0TWVudShtZW51KTsNCisNCisgICAgDQorICAgIHJldHVybiBkYXRhQ29tcG9zaXRlOyAJICAgIAkgICAgCQkNCisNCit9IC8vIGNyZWF0ZVRvcENvbXBvc2l0ZQ0KKw0KKw0KKw0KK3ByaXZhdGUgQ29tcG9zaXRlIGNyZWF0ZVRvcENvbXBvc2l0ZShmaW5hbCBDb21wb3NpdGUgcGFyZW50LCBTdHJpbmcgdGV4dCkgew0KKwlmaW5hbCBDb21wb3NpdGUgdG9wQ29tcG9zaXRlID0gbmV3IENvbXBvc2l0ZShwYXJlbnQsIFNXVC5DRU5URVIpOw0KKw0KKwlmaW5hbCBGaWxsTGF5b3V0IHRvcENvbXBvc2l0ZUxheW91dCA9IG5ldyBGaWxsTGF5b3V0KFNXVC5WRVJUSUNBTCk7DQorCXRvcENvbXBvc2l0ZS5zZXRMYXlvdXQodG9wQ29tcG9zaXRlTGF5b3V0KTsNCisNCisJTGFiZWwgdGl0bGUgPSBuZXcgTGFiZWwodG9wQ29tcG9zaXRlLCBTV1QuQ0VOVEVSKTsNCisJdGl0bGUuc2V0VGV4dCh0ZXh0KTsNCisJDQorCQ0KKwlyZXR1cm4gdG9wQ29tcG9zaXRlOw0KK30gLy8gY3JlYXRlVG9wQ29tcG9zaXRlDQorDQorDQorDQorDQorDQorDQorDQorLyoNCisgUG9seWdvbiBmdW5jdGlvbnMgYW5kIGNsYXNzDQorKi8NCisNCisNCisNCisNCisNCisNCitwcml2YXRlIGludFtdIHBvbHlBZGFwdGVyKFBvbHlnb24gcG9seWdvbikNCit7DQorICBpZiAocG9seWdvbiA9PSBudWxsKSByZXR1cm4gbmV3IGludFtdezAsMH07DQorICBpbnRbXSBwb2ludHMgPSBuZXcgaW50W3BvbHlnb24ubnBvaW50cyoyXTsNCisgIGZvciAoaW50IGk9MDsgaTwgcG9seWdvbi5ucG9pbnRzOyBpKysgKQ0KKyAgew0KKwkgIHBvaW50c1tpKjJdID0gcG9seWdvbi54cG9pbnRzW2ldOy8vamZ3DQorICAgICAgcG9pbnRzWyhpKjIpKzFdID0gcG9seWdvbi55cG9pbnRzW2ldOw0KKyAgfQ0KKyAgcmV0dXJuIHBvaW50czsNCit9DQorDQorDQorDQorDQorDQorDQorcHJpdmF0ZSBVUkkgY3JlYXRlQXJlYUxhYmVsVVJJKE5vZGUgbikgew0KKwkNCisJU3RyaW5nIGNvZGUgPSBuLmdldFVSSSgpLmxhc3RTZWdtZW50KCk7DQorCWludCBhZG1pbkxldmVsID0gVXRpbGl0eS5rZXlMZXZlbChuLmdldFVSSSgpLmxhc3RTZWdtZW50KCkpOwkNCisJU3RyaW5nIGNvdW50cnlDb2RlID0gZ2V0Q291bnRyeUNvZGUobik7DQorCQkNCisJcmV0dXJuIEFyZWFMYWJlbEltcGwuY3JlYXRlQXJlYUxhYmVsVVJJKGFkbWluTGV2ZWwsIGNvdW50cnlDb2RlLCBjb2RlKTsNCit9DQorDQorcHJpdmF0ZSBVUkkgY3JlYXRlUG9wdWxhdGlvbkxhYmVsVVJJKE5vZGUgbiwgU3RyaW5nIHBvcHVsYXRpb24pIHsNCisJDQorCUNhbGVuZGFyIGNhbCA9IENhbGVuZGFyLmdldEluc3RhbmNlKCk7DQorCWludCB5ZWFyID0gY2FsLmdldChDYWxlbmRhci5ZRUFSKTsNCisJU3RyaW5nIGNvZGUgPSBuLmdldFVSSSgpLmxhc3RTZWdtZW50KCk7DQorCWludCBhZG1pbkxldmVsID0gVXRpbGl0eS5rZXlMZXZlbChuLmdldFVSSSgpLmxhc3RTZWdtZW50KCkpOw0KKwkNCisJU3RyaW5nIGNvdW50cnlDb2RlID0gZ2V0Q291bnRyeUNvZGUobik7CQ0KKwlyZXR1cm4gUG9wdWxhdGlvbkxhYmVsSW1wbC5jcmVhdGVQb3B1bGF0aW9uTGFiZWxVUkkoYWRtaW5MZXZlbCwgY291bnRyeUNvZGUsIHBvcHVsYXRpb24sIHllYXIrIiIsIGNvZGUpOw0KK30NCisNCitwcml2YXRlIFN0cmluZyBnZXRDb3VudHJ5Q29kZShOb2RlIG4pIHsNCisJaWYoVXRpbGl0eS5rZXlMZXZlbChuLmdldFVSSSgpLmxhc3RTZWdtZW50KCkpID09IDApIHJldHVybiBuLmdldFVSSSgpLmxhc3RTZWdtZW50KCk7DQorCWVsc2UgZm9yKEVkZ2UgZTpuLmdldEVkZ2VzKCkpIA0KKwkJaWYoVXRpbGl0eS5rZXlMZXZlbChlLmdldEEoKS5nZXRVUkkoKS5sYXN0U2VnbWVudCgpKSA8IFV0aWxpdHkua2V5TGV2ZWwobi5nZXRVUkkoKS5sYXN0U2VnbWVudCgpKSkNCisJCXJldHVybiBnZXRDb3VudHJ5Q29kZShlLmdldEEoKSk7DQorCQ0KKwlyZXR1cm4gIlpaWiI7IC8vIE5vdCBmb3VuZCwgYnV0IFpaWiBpcyB0aGUgcGFyZW50IG9mIGV2ZXJ5dGhpbmcNCit9DQorDQorDQorDQorDQorDQorcHJpdmF0ZSBMaXN0PE1vZGVsPiBhZGRQcm9qZWN0TW9kZWxzKExpc3Q8TW9kZWw+IHByb2plY3RNb2RlbHMsIElQcm9qZWN0IHByb2plY3QpDQorew0KKwlJRm9sZGVyIG1vZGVsRm9sZGVyID0gcHJvamVjdC5nZXRGb2xkZXIoIm1vZGVscyIpOw0KKwlJUmVzb3VyY2VbXSBtb2RlbHMgPSBudWxsOw0KKwl0cnkgew0KKwkJbW9kZWxzID0gbW9kZWxGb2xkZXIubWVtYmVycygpOw0KKwl9IGNhdGNoKEV4Y2VwdGlvbiBlKSB7DQorCQllLnByaW50U3RhY2tUcmFjZSgpOw0KKwl9DQorCWlmIChtb2RlbHMgIT0gbnVsbCkgew0KKwkJZm9yKElSZXNvdXJjZSByOm1vZGVscykgewkJCQkJDQorCQkJDQorCQkJLy8gaWdub3JlIHN5c3RlbSBmaWxlcw0KKwkJCWlmKHIuZ2V0TmFtZSgpLnN0YXJ0c1dpdGgoIi4iKSkgY29udGludWU7DQorCQkJDQorCQkJdHJ5IHsNCisJCQkJVVJJIHVyaSA9IFVSSS5jcmVhdGVVUkkoci5nZXRMb2NhdGlvblVSSSgpLnRvU3RyaW5nKCkpOw0KKwkJCQlJZGVudGlmaWFibGUgaWQgPSBVdGlsaXR5LmdldElkZW50aWZpYWJsZSh1cmkpOwkJCQkNCisJCQkJaWYoaWQgaW5zdGFuY2VvZiBNb2RlbCkgDQorCQkJCXsNCisJCQkJCXByb2plY3RNb2RlbHMuYWRkKChNb2RlbClpZCk7DQorCQkJCX0NCisJCQl9DQorCQkJY2F0Y2goRXhjZXB0aW9uIGV4KSB7IH0NCisJCX0NCisJfQ0KKwlyZXR1cm4gcHJvamVjdE1vZGVsczsNCit9DQorcHJpdmF0ZSBMaXN0PE1vZGVsPiBnZXRNb2RlbHMgKExpc3Q8TW9kZWw+IHBhcmVudE1vZGVsKQ0KK3sNCisJDQorCUxpc3Q8TW9kZWw+IG1vZGVsc0NvbGxlY3RvciA9IG5ldyBBcnJheUxpc3Q8TW9kZWw+KCk7DQorCQ0KKwlmb3IgKE1vZGVsIG1vZGVsIDogcGFyZW50TW9kZWwpDQorCXsJDQorCQlMaXN0PE1vZGVsPiBtb2RlbHMgPSBnZXRNb2RlbHMobW9kZWwuZ2V0TW9kZWxzKCkpOw0KKwkJbW9kZWxzQ29sbGVjdG9yLmFkZEFsbChtb2RlbHMpOw0KKwl9DQorCQ0KKwlwYXJlbnRNb2RlbC5hZGRBbGwobW9kZWxzQ29sbGVjdG9yKTsNCisJDQorCXJldHVybiBwYXJlbnRNb2RlbDsNCit9DQorDQorcHJpdmF0ZSB2b2lkIHNhdmVNb2RlbCAoTW9kZWwgbW9kZWwsIElQcm9qZWN0IHByb2plY3QsIE1hcDxVUkksVVJJPiBvcmlnMm5ld01vZGVsVVJJKQ0KK3sNCisJDQorCVVSSSBtb2RlbFVSSSA9IG1vZGVsLmdldFVSSSgpOw0KKwlVUkkgbmV3TW9kZWxVUkkgPSBVUkkuY3JlYXRlUGxhdGZvcm1SZXNvdXJjZVVSSQ0KKwkocHJvamVjdC5nZXROYW1lKCkgKyAiL21vZGVscy8iICsgbW9kZWxVUkkubGFzdFNlZ21lbnQoKSk7IA0KKwlvcmlnMm5ld01vZGVsVVJJLnB1dChtb2RlbFVSSSwgbmV3TW9kZWxVUkkpOw0KKwkNCisJaWYgKCFuZXdNb2RlbFVSSS5lcXVhbHMobW9kZWxVUkkpICkNCisJewlBcnJheUxpc3Q8SWRlbnRpZmlhYmxlPiBuZXdsaXN0ID0gbmV3IEFycmF5TGlzdDxJZGVudGlmaWFibGU+KCk7DQorCQlJZGVudGlmaWFibGUgbW9kZWxDb3B5ID0gKE1vZGVsKSBFY29yZVV0aWwuY29weShtb2RlbCk7IAkJDQorCQltb2RlbENvcHkuc2V0VVJJKG5ld01vZGVsVVJJKTsNCisJCW5ld2xpc3QuYWRkKG1vZGVsQ29weSk7CQ0KKwkJdHJ5IHsNCisJCQkNCisJCQlVdGlsaXR5LnNlcmlhbGl6ZUlkZW50aWZpYWJsZXMobmV3bGlzdCwgbmV3TW9kZWxVUkkpOwkJCQ0KKwkJfSANCisJCWNhdGNoIChFeGNlcHRpb24gZXgpIHsgQWN0aXZhdG9yLmxvZ0Vycm9yKGV4LmdldE1lc3NhZ2UoKSwgZXgpOyANCisJCX0gDQorCX0NCit9DQorDQorDQorDQorcHJpdmF0ZSB2b2lkIHVwZGF0ZU1vZGVsUmVmZXJlbmNlQW5kU2F2ZShNb2RlbCBtb2RlbCwgSVByb2plY3QgcHJvamVjdCwgIE1hcDxVUkksVVJJPiBvcmlnMm5ld0dyYXBoVVJJLCBNYXA8VVJJLFVSST4gb3JpZzJuZXdNb2RlbFVSSSkNCit7DQorCXRyeSB7DQorCQkJCQkJCQkJCQkNCisJCQlVUkkgbW9kZWxVUkkgPSBtb2RlbC5nZXRVUkkoKTsNCisJCQkJCQkJCQ0KKwkJCWZvciAob3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkdyYXBoIGdyYXBoIDogbW9kZWwuZ2V0R3JhcGhzKCkpDQorCQkJewkNCisJCQkJVVJJIGdyYXBoVVJJID0gZ3JhcGguZ2V0VVJJKCk7DQorCQkJCWlmIChvcmlnMm5ld0dyYXBoVVJJLmNvbnRhaW5zS2V5KGdyYXBoVVJJKSkNCisJCQkJewkJCQkJCQ0KKwkJCQkJaWYoIWdyYXBoVVJJLmVxdWFscyhvcmlnMm5ld0dyYXBoVVJJLmdldChncmFwaFVSSSkpKQkJCQkJCQ0KKwkJCQkJew0KKwkJCQkJIGdyYXBoLnNldFVSSShvcmlnMm5ld0dyYXBoVVJJLmdldChncmFwaFVSSSkpOwkJCQkNCisJCQkJCX0NCisJCQkJfQ0KKwkJCQkNCisJCQl9DQorCQkJDQorCQkJZm9yIChNb2RlbCBjaGlsZE1vZGVsIDogbW9kZWwuZ2V0TW9kZWxzKCkpDQorCQkJewkNCisJCQkJVVJJIGNoaWxkTW9kZWxVUkkgPSBjaGlsZE1vZGVsLmdldFVSSSgpOw0KKwkJCQlpZiAob3JpZzJuZXdNb2RlbFVSSS5jb250YWluc0tleShjaGlsZE1vZGVsVVJJKSkNCisJCQkJewkJCQkJCQ0KKwkJCQkJaWYoIWNoaWxkTW9kZWxVUkkuZXF1YWxzKG9yaWcybmV3TW9kZWxVUkkuZ2V0KGNoaWxkTW9kZWxVUkkpKSkJCQkJCQkNCisJCQkJCXsNCisJCQkJCWNoaWxkTW9kZWwuc2V0VVJJKG9yaWcybmV3TW9kZWxVUkkuZ2V0KGNoaWxkTW9kZWxVUkkpKTsJCQkJDQorCQkJCQl9DQorCQkJCX0NCisJCQkJDQorCQkJfQ0KKwkJCQ0KKw0KKwkJCVVSSSBuZXdNb2RlbFVSSSA9IFVSSS5jcmVhdGVQbGF0Zm9ybVJlc291cmNlVVJJDQorCQkJKHByb2plY3QuZ2V0TmFtZSgpICsgIi9tb2RlbHMvIiArIG1vZGVsVVJJLmxhc3RTZWdtZW50KCkpOyANCisJCQkvL1RPRE8gdmlyZ2luIHRlc3Q/DQorCQkJewlBcnJheUxpc3Q8SWRlbnRpZmlhYmxlPiBuZXdsaXN0ID0gbmV3IEFycmF5TGlzdDxJZGVudGlmaWFibGU+KCk7DQorCQkJCUlkZW50aWZpYWJsZSBtb2RlbENvcHkgPSAoSWRlbnRpZmlhYmxlKSBFY29yZVV0aWwuY29weShtb2RlbCk7IAkJDQorCQkJCW1vZGVsQ29weS5zZXRVUkkobmV3TW9kZWxVUkkpOw0KKwkJCQluZXdsaXN0LmFkZChtb2RlbENvcHkpOwkNCisJCQkJVXRpbGl0eS5zZXJpYWxpemVJZGVudGlmaWFibGVzKG5ld2xpc3QsIG5ld01vZGVsVVJJKTsNCisJCQl9CQkJCQkJCQ0KKwl9IGNhdGNoKEV4Y2VwdGlvbiBlKSB7IEFjdGl2YXRvci5sb2dFcnJvcihlLmdldE1lc3NhZ2UoKSwgZSk7IH0NCit9DQorDQorDQorcHJpdmF0ZSB2b2lkIGNsZWFuKExpc3Q8b3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkdyYXBoPiBncmFwaExpc3QsIElQcm9qZWN0IHByb2plY3QpDQorew0KKwkvKg0KKwl6b29tRmFjdG9yID0gMS4wOw0KKwlaT09NSU5HX0ZBQ1RPUiA9IDEuMTsNCisJVU5aT09NSU5HX0ZBQ1RPUiA9IDEgLyBaT09NSU5HX0ZBQ1RPUjsNCisJb2Zmc2V0WD0wOw0KKwlvZmZzZXRZPTA7DQorCXNjYWxlRmFjdG9yPTA7DQorCWxhc3RPZmZzZXRYPTA7DQorCWxhc3RPZmZzZXRZPTA7CQ0KKwlsZWZ0TW91c2VCdXR0b25QcmVzc2VkPWZhbHNlOw0KKwl4VHJhbnNsYXRpb24gPSAwLjA7IA0KKwl5VHJhbnNsYXRpb24gPSAwLjA7CQ0KKwltYXhMVD1Eb3VibGUuTkVHQVRJVkVfSU5GSU5JVFk7IA0KKwltYXhMRz1Eb3VibGUuTkVHQVRJVkVfSU5GSU5JVFk7DQorCW1pbkxUPURvdWJsZS5NQVhfVkFMVUU7DQorCW1pbkxHPURvdWJsZS5NQVhfVkFMVUU7DQorCQ0KKwl6ZXN0R3JhcGhCb3VuZHMgPSBudWxsOw0KKwlncmFwaEJvdW5kcyA9IG51bGw7DQorCXBvbHlnb25zVG9EcmF3ID0gbmV3IEFycmF5TGlzdDxEaXNwbGF5UG9seWdvbj4oKTsNCisJR3JhcGhOb2RlcyA9IG5ldyBIYXNoTWFwPFN0cmluZywgR3JhcGhOb2RlPigpOw0KKwlHcmFwaENvbm5lY3Rpb25zID0gbmV3IEhhc2hNYXA8U3RyaW5nLCBHcmFwaENvbm5lY3Rpb24+KCk7CQkNCisJY2VudGVycyA9IG5ldyBBcnJheUxpc3Q8ZG91YmxlW10+KCk7DQorCW5vZGVJRDJQb2x5ID0gbmV3IEhhc2hNYXA8U3RyaW5nLCBTZXQ8RGlzcGxheVBvbHlnb24+PigpOw0KKwlub2RlVVJJMkxhYmVsID0gbmV3IEhhc2hNYXA8VVJJLExpc3Q8b3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLk5vZGVMYWJlbD4+KCk7DQorCSovDQorCQ0KKwkNCisJDQorCQ0KKwkvKg0KKwkgZm9yIChvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguR3JhcGggZ3JhcGggOiBncmFwaExpc3QpIA0KKwl7DQorCQlFTWFwPFVSSSxOb2RlPiBub2RlTGlzdCA9IGdyYXBoLmdldE5vZGVzKCk7DQorCQlmb3IgKE1hcC5FbnRyeTxVUkksTm9kZT4gZW50cnkgOiBub2RlTGlzdC5lbnRyeVNldCgpKQ0KKwkJew0KKwkJCVVSSSB1cmkgPSBlbnRyeS5nZXRLZXkoKTsNCisJCQlOb2RlIG5vZGUgPSBlbnRyeS5nZXRWYWx1ZSgpOw0KKwkJCUVMaXN0PEFkYXB0ZXI+IGFkYXB0ZXJMaXN0ID0gbm9kZS5lQWRhcHRlcnMoKTsNCisJCQlub2RlLmVBZGFwdGVycygpLnJlbW92ZUFsbChub2RlLmVBZGFwdGVycygpKTsNCisJCQlTdHJpbmcgYSA9ICIiOw0KKwkJfQ0KKwkJDQorCX0NCisJDQorCQ0KKwkgDQorCSANCisJTGlzdDxVUkk+IGdyYXBoVVJJcyA9IG5ldyBBcnJheUxpc3Q8VVJJPigpOw0KKwlmb3IgKG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5HcmFwaCBncmFwaCA6IGdyYXBoTGlzdCkNCisJew0KKwkJZ3JhcGhVUklzLmFkZChncmFwaC5nZXRVUkkoKSk7DQorCX0NCisJZ3JhcGhMaXN0ID0gbmV3IEFycmF5TGlzdDxvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguR3JhcGg+KCk7DQorCQ0KKwkqLw0KKwkNCisJDQorCUlDb250YWluZXIgZ3JhcGhzRm9sZGVyID0gcHJvamVjdC5nZXRGb2xkZXIoImdyYXBocyIpOyANCisJSVJlc291cmNlW10gZ3JhcGhzID0gbnVsbDsNCisJdHJ5IHsNCisJCWdyYXBocyA9IGdyYXBoc0ZvbGRlci5tZW1iZXJzKCk7DQorCX0gY2F0Y2goRXhjZXB0aW9uIGUpIHsNCisJCWUucHJpbnRTdGFja1RyYWNlKCk7DQorCX0NCisJaWYgKGdyYXBocyAhPSBudWxsKSB7DQorCQlmb3IoSVJlc291cmNlIHI6Z3JhcGhzKSB7DQorCQkJLy8gaWdub3JlIHN5c3RlbSBmaWxlcw0KKwkJCWlmKHIuZ2V0TmFtZSgpLnN0YXJ0c1dpdGgoIi4iKSkgY29udGludWU7DQorDQorCQkJdHJ5IHsNCisJCQkJDQorCQkJCVVSSSB1cmkgPSBVUkkuY3JlYXRlVVJJKHIuZ2V0TG9jYXRpb25VUkkoKS50b1N0cmluZygpKTsNCisJCQkJSWRlbnRpZmlhYmxlIGlkID0gVXRpbGl0eS5nZXRJZGVudGlmaWFibGUodXJpKTsJCQkJDQorCQkJCWlmIChpZCBpbnN0YW5jZW9mIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5HcmFwaCkNCisJCQkJewkNCisJCQkJCS8qaWYgKGdyYXBoVVJJcy5jb250YWlucyggKChvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguR3JhcGgpaWQpLmdldFVSSSgpKSkNCisJCQkJCXsNCisJCQkJCQlncmFwaExpc3QuYWRkKChvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguR3JhcGgpaWQpOw0KKwkJCQkJCVN5c3RlbS5lcnIucHJpbnRsbigiQWRkIGdyYXBoICIgKyAoKG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5HcmFwaClpZCkuZ2V0VVJJKCkpOw0KKwkJCQkJfSovDQorCQkJCQkNCisJCQkJCW9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5HcmFwaCBncmFwaCA9IChvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguR3JhcGgpIGlkOw0KKwkJCQkJDQorCQkJCQlmb3IgKE1hcC5FbnRyeTxVUkksTm9kZT4gZW50cnkgOiBncmFwaC5nZXROb2RlcygpLmVudHJ5U2V0KCkpDQorCQkJCQl7DQorCQkJCQkJVVJJIG5vZGVVUkkgPSBlbnRyeS5nZXRLZXkoKTsNCisJCQkJCQlOb2RlIG5vZGUgPSBlbnRyeS5nZXRWYWx1ZSgpOw0KKwkJCQkJCWlmIChub2RlLmVDb250YWluZXIoKS5lSXNQcm94eSgpKQ0KKwkJCQkJCXsNCisJCQkJCQkJRWNvcmVVdGlsLnJlc29sdmUobm9kZSwgKEVPYmplY3QpIG5vZGUpOw0KKwkJCQkJCX0NCisJCQkJCQlmb3IgKE5vZGVMYWJlbCBsYWJlbCA6IG5vZGUuZ2V0TGFiZWxzKCkpDQorCQkJCQkJew0KKwkJCQkJCQlpZiAobGFiZWwuZUNvbnRhaW5lcigpLmVJc1Byb3h5KCkpDQorCQkJCQkJCXsNCisJCQkJCQkJCUVjb3JlVXRpbC5yZXNvbHZlKGxhYmVsLCAoRU9iamVjdCkgbGFiZWwpOw0KKwkJCQkJCQl9DQorCQkJCQkJfQ0KKwkJCQkJfQ0KKwkJCQkJDQorCQkJCX0JCQkJDQorCQkJfSBjYXRjaChFeGNlcHRpb24gZSkgew0KKwkJCQkvLyBTa2lwIGJhZCBmaWxlDQorCQkJfQ0KKwkJfQ0KKwl9DQorCS8qDQorCUlDb250YWluZXIgbW9kZWxzRm9sZGVyID0gcHJvamVjdC5nZXRGb2xkZXIoIm1vZGVscyIpOyANCisJSVJlc291cmNlW10gbW9kZWxzID0gbnVsbDsNCisJdHJ5IHsNCisJCW1vZGVscyA9IG1vZGVsc0ZvbGRlci5tZW1iZXJzKCk7DQorCX0gY2F0Y2goRXhjZXB0aW9uIGUpIHsNCisJCWUucHJpbnRTdGFja1RyYWNlKCk7DQorCX0NCisJaWYgKG1vZGVscyAhPSBudWxsKSB7DQorCQlmb3IoSVJlc291cmNlIHI6bW9kZWxzKSB7DQorCQkJLy8gaWdub3JlIHN5c3RlbSBmaWxlcw0KKwkJCWlmKHIuZ2V0TmFtZSgpLnN0YXJ0c1dpdGgoIi4iKSkgY29udGludWU7DQorDQorCQkJdHJ5IHsNCisJCQkJDQorCQkJCVVSSSB1cmkgPSBVUkkuY3JlYXRlVVJJKHIuZ2V0TG9jYXRpb25VUkkoKS50b1N0cmluZygpKTsNCisJCQkJSWRlbnRpZmlhYmxlIGlkID0gVXRpbGl0eS5nZXRJZGVudGlmaWFibGUodXJpKTsJCQkJDQorCQkJCWlmIChpZCBpbnN0YW5jZW9mIE1vZGVsKQ0KKwkJCQl7CQ0KKwkJCQkJZm9yIChvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguR3JhcGggZ3JhcGggOiAoKE1vZGVsKWlkKS5nZXRHcmFwaHMoKSkNCisJCQkJCWlmIChncmFwaFVSSXMuY29udGFpbnMoIGdyYXBoLmdldFVSSSgpKSkNCisJCQkJCXsNCisJCQkJCQlpZiAoIWdyYXBoTGlzdC5jb250YWlucyhncmFwaC5nZXRVUkkoKSkpDQorCQkJCQkJew0KKwkJCQkJCQlncmFwaExpc3QuYWRkKChvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguR3JhcGgpaWQpOw0KKwkJCQkJCQlTeXN0ZW0uZXJyLnByaW50bG4oIkFkZCBncmFwaCAiICsgKChvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguR3JhcGgpaWQpLmdldFVSSSgpKTsNCisJCQkJCQl9DQorCQkJCQl9DQorCQkJCX0JCQkJDQorCQkJfSBjYXRjaChFeGNlcHRpb24gZSkgew0KKwkJCQkvLyBTa2lwIGJhZCBmaWxlDQorCQkJfQ0KKwkJfQ0KKwl9DQorCSovDQorfQ0KKwkNCisvKiBtYXliZSB1c2VmdWwgb25lIGRheSANCisNCitwcml2YXRlIE1hcDxTdHJpbmcsIE1vZGVsPiBhZGRQcm9qZWN0TW9kZWxzKE1hcDxTdHJpbmcsIE1vZGVsPiBwcm9qZWN0TW9kZWxzLCBJUHJvamVjdCBwcm9qZWN0KQ0KK3sNCisJSUZvbGRlciBtb2RlbEZvbGRlciA9IHByb2plY3QuZ2V0Rm9sZGVyKCJtb2RlbHMiKTsNCisJSVJlc291cmNlW10gbW9kZWxzID0gbnVsbDsNCisJdHJ5IHsNCisJCW1vZGVscyA9IG1vZGVsRm9sZGVyLm1lbWJlcnMoKTsNCisJfSBjYXRjaChFeGNlcHRpb24gZSkgew0KKwkJQWN0aXZhdG9yLmxvZ0Vycm9yKGUuZ2V0TWVzc2FnZSgpLCBlKTsNCisJfQ0KKwlpZiAobW9kZWxzICE9IG51bGwpIHsNCisJCWZvcihJUmVzb3VyY2Ugcjptb2RlbHMpIHsJCQkJCQ0KKwkJCQ0KKwkJCS8vIGlnbm9yZSBzeXN0ZW0gZmlsZXMNCisJCQlpZihyLmdldE5hbWUoKS5zdGFydHNXaXRoKCIuIikpIGNvbnRpbnVlOw0KKwkJCQ0KKwkJCXRyeSB7DQorCQkJCVVSSSB1cmkgPSBVUkkuY3JlYXRlVVJJKHIuZ2V0TG9jYXRpb25VUkkoKS50b1N0cmluZygpKTsNCisJCQkJSWRlbnRpZmlhYmxlIGlkID0gVXRpbGl0eS5nZXRJZGVudGlmaWFibGUodXJpKTsJCQkJDQorCQkJCWlmKGlkIGluc3RhbmNlb2YgTW9kZWwpIA0KKwkJCQl7CU1vZGVsIG1vZGVsID0gKE1vZGVsKWlkOw0KKwkJCQkJcHJvamVjdE1vZGVscy5wdXQobW9kZWwuZ2V0VVJJKCkubGFzdFNlZ21lbnQoKSwgbW9kZWwpOw0KKwkJCQl9DQorCQkJfQ0KKwkJCWNhdGNoKEV4Y2VwdGlvbiBleCkgeyANCisJCQkJQWN0aXZhdG9yLmxvZ0Vycm9yKGV4LmdldE1lc3NhZ2UoKSwgZXgpOw0KKwkJCX0NCisJCX0NCisJfQ0KKwlyZXR1cm4gcHJvamVjdE1vZGVsczsNCit9DQorDQorDQorDQorDQorcHJpdmF0ZSBNYXA8U3RyaW5nLCBNb2RlbD4gZ2V0TW9kZWxzIChNYXA8U3RyaW5nLCBNb2RlbD4gcGFyZW50TW9kZWxzKQ0KK3sNCisJDQorCU1hcDxTdHJpbmcsIE1vZGVsPiBtb2RlbHNDb2xsZWN0b3IgPSBuZXcgSGFzaE1hcDxTdHJpbmcsIE1vZGVsPigpOwkNCisJDQorCQ0KKwlmb3IgKE1hcC5FbnRyeTxTdHJpbmcsIE1vZGVsPiBwYXJlbnRFbnRyeSA6IHBhcmVudE1vZGVscy5lbnRyeVNldCgpKQ0KKwl7CQ0KKwkJTW9kZWwgcGFyZW50TW9kZWwgPSBwYXJlbnRFbnRyeS5nZXRWYWx1ZSgpOw0KKwkJDQorCQkNCisJCU1hcDxTdHJpbmcsIE1vZGVsPiBjaGlsZE1vZGVsc0xpc3RNYXAgPSBuZXcgSGFzaE1hcDxTdHJpbmcsIE1vZGVsPigpOwkJDQorCQlMaXN0PE1vZGVsPiBjaGlsZE1vZGVsc0xpc3QgPSBwYXJlbnRNb2RlbC5nZXRNb2RlbHMoKTsNCisJCS8vdHJhbnNmb3JtIHRvIG1hcA0KKwkJZm9yIChNb2RlbCBjaGlsZE1vZGVsIDogY2hpbGRNb2RlbHNMaXN0KQ0KKwkJewkNCisJCQljaGlsZE1vZGVsc0xpc3RNYXAucHV0KGNoaWxkTW9kZWwuZ2V0VVJJKCkubGFzdFNlZ21lbnQoKSwgY2hpbGRNb2RlbCk7DQorCQl9DQorCQkNCisJCU1hcDxTdHJpbmcsIE1vZGVsPiBjaGlsZE1vZGVsc0xpc3RNYXAyID0gZ2V0TW9kZWxzKGNoaWxkTW9kZWxzTGlzdE1hcCk7DQorCQkNCisJCWZvciAoTWFwLkVudHJ5PFN0cmluZywgTW9kZWw+IGVudHJ5IDogY2hpbGRNb2RlbHNMaXN0TWFwMi5lbnRyeVNldCgpKQ0KKwkJew0KKwkJCU1vZGVsIG1vZGVsID0gZW50cnkuZ2V0VmFsdWUoKTsNCisJCQltb2RlbHNDb2xsZWN0b3IucHV0KG1vZGVsLmdldFVSSSgpLmxhc3RTZWdtZW50KCksIG1vZGVsKTsNCisJCX0NCisJCQ0KKwkJDQorCQkNCisJfQ0KKwkNCisJZm9yIChNYXAuRW50cnk8U3RyaW5nLCBNb2RlbD4gZW50cnkgOiBtb2RlbHNDb2xsZWN0b3IuZW50cnlTZXQoKSkNCisJew0KKwkJTW9kZWwgbW9kZWwgPSBlbnRyeS5nZXRWYWx1ZSgpOw0KKwkJU3RyaW5nIGtleSA9IGVudHJ5LmdldEtleSgpOw0KKwkJcGFyZW50TW9kZWxzLnB1dChrZXksIG1vZGVsKTsNCisJfQ0KKwkNCisJcmV0dXJuIHBhcmVudE1vZGVsczsNCisJDQorfQ0KKw0KKw0KKyBwdWJsaWMgdm9pZCBvdXRwdXQoTW9kZWwgbW9kZWwpDQorIHsNCisJIFN5c3RlbS5lcnIucHJpbnRsbihtb2RlbC5nZXRVUkkoKSk7DQorCSBmb3IgKG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5HcmFwaCBncmFwaCA6IG1vZGVsLmdldEdyYXBocygpKQ0KKwkgew0KKwkJIFN5c3RlbS5lcnIucHJpbnRsbigiLS0tLT4iICsgZ3JhcGguZ2V0VVJJKCkpOw0KKwkgfQ0KKyB9DQorKi8NCisNCisNCisNCit9IC8vZW5kIG9mIGdyYXBoIGNhbnZhcyANCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkuZ3JhcGhlZGl0b3Ivc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvZ3JhcGhlZGl0b3IvR3JhcGhEZWZzLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkuZ3JhcGhlZGl0b3Ivc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvZ3JhcGhlZGl0b3IvR3JhcGhEZWZzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWQ4M2YyYgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5ncmFwaGVkaXRvci9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9ncmFwaGVkaXRvci9HcmFwaERlZnMuamF2YQpAQCAtMCwwICsxLDE5IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0udWkuZ3JhcGhlZGl0b3I7DQorDQorcHVibGljIGNsYXNzIEdyYXBoRGVmcyB7DQorDQorCXB1YmxpYyBzdGF0aWMgZG91YmxlIFIgPSAxMDAwMDA7DQorCWZpbmFsIHN0YXRpYyBpbnQgCVVOREVGSU5FRCA9IC0xICwgDQorCQkJCQkJTUlHUkFUSU9OX0VER0UgPSAwLCANCisJCQkJCQlDT05UQUlOTUVOVF9FREdFID0gMSwNCisJCQkJCQlDT01NT05fQk9SREVSX0VER0UgPSAyLA0KKwkJCQkJCUFSRUFfTEFCRUwgPSAyLCANCisJCQkJCQlQT1BVTEFUSU9OX0xBQkVMID0gMywJDQorCQkJCQkJTk9ERV9USVRMRT00LCANCisJCQkJCQlOT0RFX1VSST01LCANCisJCQkJCQlOT0RFX0xBQkVMPTYsIA0KKwkJCQkJCUVER0VfVElUTEU9NywgDQorCQkJCQkJRURHRV9BVVJJPTgsIA0KKwkJCQkJCUVER0VfQlVSST05LCANCisJCQkJCQlFREdFX0xBQkVMX1ZBTFVFPTEwOw0KK30NCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkuZ3JhcGhlZGl0b3Ivc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvZ3JhcGhlZGl0b3IvTm9kZURhdGEuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5ncmFwaGVkaXRvci9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9ncmFwaGVkaXRvci9Ob2RlRGF0YS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE3ZjljNzgKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkuZ3JhcGhlZGl0b3Ivc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvZ3JhcGhlZGl0b3IvTm9kZURhdGEuamF2YQpAQCAtMCwwICsxLDEyOCBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnVpLmdyYXBoZWRpdG9yOw0KKw0KK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0Ow0KK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsNCisNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLkVMaXN0Ow0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuVVJJOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguTm9kZTsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuQXJlYUxhYmVsOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5Qb3B1bGF0aW9uTGFiZWw7DQorDQorcHVibGljIGNsYXNzIE5vZGVEYXRhDQorew0KKwkNCisJDQorCUVMaXN0PG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5Ob2RlTGFiZWw+IG5vZGVMYWJlbHM7DQorCVN0cmluZyBub2RlU3BhdGlhbDsNCisJVVJJIG5vZGVVUkk7DQorCVN0cmluZyBub2RlSWRlbnRpZmllcjsNCisJU3RyaW5nIG5vZGVUaXRsZTsNCisJTm9kZSBub2RlOw0KKwlkb3VibGUgb3JpZ1g7DQorCWRvdWJsZSBvcmlnWTsNCisJDQorCU5vZGVEYXRhKE5vZGUgbiwgZG91YmxlIG9yaWdYLCBkb3VibGUgb3JpZ1kgKQ0KKwl7CQkNCisJCQ0KKwkJIA0KKwkJLy9UT0RPDQorICAgICAgICAvKnRoaXMubm9kZUxhYmVscyA9IG5ldyBBcnJheUxpc3Q8b3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLk5vZGVMYWJlbD4oKTsNCisJCWZvciAob3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLk5vZGVMYWJlbCBub2RlTGFiZWwgOiBub2RlTGFiZWxMaXN0KQ0KKwkJZm9yIChpbnQgaT0wOyBpPCBubGEubGVuZ3RoOyBpKyspDQorICAgICAgICB7DQorCQkJDQorCQkJb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLk5vZGVMYWJlbCBubCA9DQorCQkJCShvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguTm9kZUxhYmVsKSBFY29yZVV0aWwuY29weShubGEyW2ldKTsNCisJCQkodGhpcy5ub2RlTGFiZWxzKS5hZGQobmwpOw0KKwkJfSovDQorCQl0aGlzLm5vZGVMYWJlbHMgPSBuLmdldExhYmVscygpOw0KKwkJdGhpcy5ub2RlVGl0bGUgPSBuLmdldER1YmxpbkNvcmUoKS5nZXRUaXRsZSgpOw0KKwkJdGhpcy5ub2RlU3BhdGlhbCA9IG4uZ2V0RHVibGluQ29yZSgpLmdldFNwYXRpYWwoKTsNCisJCXRoaXMubm9kZVVSSSA9IG4uZ2V0VVJJKCk7DQorCQl0aGlzLm5vZGVJZGVudGlmaWVyID0gbi5nZXREdWJsaW5Db3JlKCkuZ2V0SWRlbnRpZmllcigpOw0KKwkJdGhpcy5vcmlnWCA9IG9yaWdYOw0KKwkJdGhpcy5vcmlnWSA9IG9yaWdZOw0KKwkJdGhpcy5ub2RlID0gbjsNCisJfQ0KKwkNCisJDQorCQ0KKwlMaXN0PEludGVnZXI+IGdldE5vZGVMYWJlbFR5cGVzKCkNCisJew0KKwkJTGlzdDxJbnRlZ2VyPiBsYWJlbFR5cGVzID0gbmV3IEFycmF5TGlzdDxJbnRlZ2VyPigpOyANCisJCQkvL25ldyBpbnRbdGhpcy5ub2RlTGFiZWxzLnNpemUoKV07IEpGVw0KKwkJZm9yIChpbnQgaT0wOyBpPHRoaXMubm9kZUxhYmVscy5zaXplKCk7IGkrKykNCisJCXsNCisJCQlpZiAodGhpcy5ub2RlTGFiZWxzLmdldChpKSBpbnN0YW5jZW9mIEFyZWFMYWJlbCkNCisJCQkJbGFiZWxUeXBlcy5hZGQoaSxHcmFwaERlZnMuQVJFQV9MQUJFTCk7DQorCQkJZWxzZSBpZiAodGhpcy5ub2RlTGFiZWxzLmdldChpKSBpbnN0YW5jZW9mIFBvcHVsYXRpb25MYWJlbCkNCisJCQkJbGFiZWxUeXBlcy5hZGQoaSxHcmFwaERlZnMuUE9QVUxBVElPTl9MQUJFTCk7CQ0KKwkJCWVsc2UgbGFiZWxUeXBlcy5hZGQoaSxHcmFwaERlZnMuVU5ERUZJTkVEKTsNCisJCQkNCisJCX0NCisJCXJldHVybiBsYWJlbFR5cGVzOw0KKwl9DQorCQ0KKwlOb2RlIGdldE5vZGUoKQ0KKwl7DQorCQlyZXR1cm4gdGhpcy5ub2RlOw0KKwl9DQorCQ0KKwlTdHJpbmcgZ2V0U3BhY2lhbCgpIA0KKwl7DQorCQlyZXR1cm4gdGhpcy5ub2RlU3BhdGlhbDsNCisJfQ0KKwkNCisJU3RyaW5nIGdldE5vZGVJZGVudGlmaWVyKCkgDQorCXsNCisJCXJldHVybiB0aGlzLm5vZGVJZGVudGlmaWVyOw0KKwl9DQorCQ0KKwlTdHJpbmcgZ2V0Tm9kZVRpdGxlKCkgDQorCXsNCisJCXJldHVybiB0aGlzLm5vZGVUaXRsZTsNCisJfQ0KKwkNCisJRUxpc3Q8b3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLk5vZGVMYWJlbD4gZ2V0Tm9kZUxhYmVscygpDQorCXsNCisJCXJldHVybiB0aGlzLm5vZGVMYWJlbHM7DQorCX0NCisJDQorCVVSSSBnZXROb2RlVVJJKCkNCisJew0KKwkJcmV0dXJuIHRoaXMubm9kZVVSSTsNCisJfQ0KKwkNCisJZG91YmxlIGdldE9yaWdYKCkNCisJew0KKwkJcmV0dXJuIHRoaXMub3JpZ1g7DQorCX0NCisJDQorCWRvdWJsZSBnZXRPcmlnWSgpDQorCXsNCisJCXJldHVybiB0aGlzLm9yaWdZOw0KKwl9DQorCQ0KKwl2b2lkIHNldE5vZGVUaXRsZShTdHJpbmcgbm9kZVRpdGxlKQ0KKwl7DQorCQl0aGlzLm5vZGVUaXRsZSA9IG5vZGVUaXRsZTsNCisJfQ0KKwkNCisJdm9pZCBzZXROb2RlVVJJKFN0cmluZyBub2RlVVJJKQ0KKwl7DQorCQl0aGlzLm5vZGVVUkkgPSBVUkkuY3JlYXRlVVJJKG5vZGVVUkkpOw0KKwl9DQorCXZvaWQgc2V0Tm9kZUxhYmVscyhFTGlzdDxvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguTm9kZUxhYmVsPiBub2RlTGFiZWxzKQ0KKwl7DQorCQl0aGlzLm5vZGVMYWJlbHM9bm9kZUxhYmVsczsNCisJfQ0KKwkNCisJdm9pZCBzZXROb2RlKE5vZGUgbikNCisJew0KKwkgICAgdGhpcy5ub2RlPW47DQorCX0NCisJDQorCQ0KK30NCisNCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkuZ3JhcGhlZGl0b3Ivc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvZ3JhcGhlZGl0b3IvU3BhdGlhbEdtbEV4cG9ydGVyLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkuZ3JhcGhlZGl0b3Ivc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvZ3JhcGhlZGl0b3IvU3BhdGlhbEdtbEV4cG9ydGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGQwNTFkOAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5ncmFwaGVkaXRvci9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9ncmFwaGVkaXRvci9TcGF0aWFsR21sRXhwb3J0ZXIuamF2YQpAQCAtMCwwICsxLDIyNiBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnVpLmdyYXBoZWRpdG9yOw0KKw0KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorICogQ29weXJpZ2h0IChjKSAyMDExIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLg0KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMNCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjANCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdA0KKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sDQorICoNCisgKiBDb250cmlidXRvcnM6DQorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbg0KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KKw0KK2ltcG9ydCBqYXZhLmlvLkZpbGU7DQoraW1wb3J0IGphdmEuaW8uRmlsZVdyaXRlcjsNCitpbXBvcnQgamF2YS51dGlsLkNhbGVuZGFyOw0KK2ltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7DQoraW1wb3J0IGphdmEudXRpbC5NYXA7DQoraW1wb3J0IGphdmEudXRpbC5TZXQ7DQorDQoraW1wb3J0IGphdmF4LnhtbC5wYXJzZXJzLkRvY3VtZW50QnVpbGRlcjsNCitpbXBvcnQgamF2YXgueG1sLnBhcnNlcnMuRG9jdW1lbnRCdWlsZGVyRmFjdG9yeTsNCitpbXBvcnQgamF2YXgueG1sLnRyYW5zZm9ybS5PdXRwdXRLZXlzOw0KK2ltcG9ydCBqYXZheC54bWwudHJhbnNmb3JtLlRyYW5zZm9ybWVyOw0KK2ltcG9ydCBqYXZheC54bWwudHJhbnNmb3JtLlRyYW5zZm9ybWVyRmFjdG9yeTsNCitpbXBvcnQgamF2YXgueG1sLnRyYW5zZm9ybS5kb20uRE9NU291cmNlOw0KK2ltcG9ydCBqYXZheC54bWwudHJhbnNmb3JtLnN0cmVhbS5TdHJlYW1SZXN1bHQ7DQorDQoraW1wb3J0IG9yZy53M2MuZG9tLkRvY3VtZW50Ow0KK2ltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50Ow0KKw0KKw0KKy8qKg0KKyAqIEdpdmVuIGEgbWFwIG9mIGdtbFBvbHlnb25zLCBleHBvcnQgdGhlIHNwYXRpYWwgZGF0YSB0byBhIGdtbCBmaWxlDQorICovDQorcHVibGljIGNsYXNzIFNwYXRpYWxHbWxFeHBvcnRlciB7DQorCQ0KKwlzdGF0aWMgRG9jdW1lbnQgZG9jOw0KKwkNCisJDQorCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBNQVAgPSAiTWFwIjsgLy8kTk9OLU5MUy0xJA0KKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgVElUTEUgPSAidGl0bGUiOyAvLyROT04tTkxTLTEkDQorCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBTVUJUSVRMRSA9ICJzdWJUaXRsZSI7IC8vJE5PTi1OTFMtMSQNCisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFVQREFURUQgPSAidXBkYXRlZCI7Ly8kTk9OLU5MUy0xJA0KKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgRU5UUlkgPSAiZW50cnkiOy8vJE5PTi1OTFMtMSQNCisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFdIRVJFID0gImdlb3Jzczp3aGVyZSI7Ly8kTk9OLU5MUy0xJA0KKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgUE9MWUdPTiA9ICJnbWw6UG9seWdvbiI7Ly8kTk9OLU5MUy0xJA0KKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgSUQgPSAiZ21sOmlkIjsvLyROT04tTkxTLTEkDQorDQorCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBCT1VOREFSWSA9ICJnbWw6b3V0ZXJCb3VuZGFyeUlzIjsvLyROT04tTkxTLTEkDQorCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBSSU5HID0gImdtbDpMaW5lYXJSaW5nIjsvLyROT04tTkxTLTEkDQorCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBQT1NMSVNUID0gImdtbDpwb3NMaXN0IjsvLyROT04tTkxTLTEkDQorCQ0KKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgSVNPX0NPREUgPSAiSVNPLTg4NTktMSI7IC8vJE5PTi1OTFMtMSQNCisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIElOREVOVCA9ICJ5ZXMiOyAvLyROT04tTkxTLTEkDQorCQ0KKwkNCisJLyoqDQorCSAqIA0KKwkgKi8NCisJcHVibGljIFNwYXRpYWxHbWxFeHBvcnRlcigpIHsNCisJCS8vIFRPRE8gQXV0by1nZW5lcmF0ZWQgY29uc3RydWN0b3Igc3R1Yg0KKwl9DQorDQorCS8qKg0KKwkgKiBAcGFyYW0gYXJncw0KKwkgKi8NCisJLy9wdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7DQorCQkvL3Rlc3QoKTsNCisJLy99DQorCQ0KKwkNCisvLwkvKiogDQorLy8JICogVGVzdCB0aGUgZ21sRXhwb3J0ZXIgdXNpbmcgZGF0YSBmcm9tIGEga21sIGZpbGUuDQorLy8JICovDQorLy8JcHVibGljIHN0YXRpYyB2b2lkIHRlc3QoKSB7DQorLy8JCVNwYXRpYWxHbWxFeHBvcnRlciBzZWxmID0gbmV3IFNwYXRpYWxHbWxFeHBvcnRlcigpOw0KKy8vCQlTdHJpbmcgZGlyID0gIkk6Ly9XaWdnZXJKLyI7IC8vJE5PTi1OTFMtMSQNCisvLwkJLy9LbWxSZWFkZXIga21sUmVhZGVyID0gbmV3IEttbFJlYWRlcigpOw0KKy8vCQkNCisvLwkJU2V0PEdtbFBvbHlnb24+IGdtbFBvbHlTZXQgPSBuZXcgSGFzaFNldDxHbWxQb2x5Z29uPigpOw0KKy8vCQlnbWxQb2x5U2V0LmFkZChuZXcgR21sUG9seWdvbigidHN0IikpOw0KKy8vCQlNYXA8U3RyaW5nLFNldDxHbWxQb2x5Z29uPj4gcG9seWdvbk1hcCA9IG5ldyBIYXNoTWFwPFN0cmluZyxTZXQ8R21sUG9seWdvbj4+KCk7DQorLy8JCQkvL2ttbFJlYWRlci5yZWFkS01MKGRpcisidGVzdDIuS01MIiwxKTsgLy8kTk9OLU5MUy0xJA0KKy8vCQkvL25hbWVUb0lETWFwID0ga21sUmVhZGVyLmdldE5hbWVUb0lETWFwKCk7DQorLy8JCXBvbHlnb25NYXAucHV0KCJ0ZXN0IiwgZ21sUG9seVNldCk7DQorLy8JCVN0cmluZyBvdXRGaWxlID0gZGlyKyIvVEVTVF8yX01BUC54bWwiOyAvLyROT04tTkxTLTEkDQorLy8JCVN0cmluZyB0aHJlZUxldHRlckNvZGUgPSAiQ0FOIjsgLy8kTk9OLU5MUy0xJA0KKy8vCQlzZWxmLndyaXRlU3BhdGlhbERhdGEocG9seWdvbk1hcCwgb3V0RmlsZSwgdGhyZWVMZXR0ZXJDb2RlLCAxKTsNCisvLwl9Ly8gdGVzdCANCisvLwkNCisJDQorCQ0KKwkvKioNCisJICogR2l2ZW4gYSBtYXAgb2YgZ21sUG9seWdvbnMsIHdyaXRlcyB0aGUgR01MIGRhdGEgdG8gYW4geG1sIGZpbGUNCisJICogQHBhcmFtIHBvbHlnb25NYXANCisJICogQHBhcmFtIG91dHB1dEZpbGUNCisJICogQHBhcmFtIHRocmVlTGV0dGVyQ29kZQ0KKwkgKiBAcGFyYW0gYWRtaW5MZXZlbA0KKwkgKi8NCisJcHVibGljIHZvaWQgd3JpdGVTcGF0aWFsRGF0YShNYXA8U3RyaW5nLFNldDxHbWxQb2x5Z29uPj4gcG9seWdvbk1hcCwgU3RyaW5nIG91dHB1dEZpbGUsIFN0cmluZyBtYXBOYW1lLCBpbnQgYWRtaW5MZXZlbCkgew0KKwkJd3JpdGVHTUwob3V0cHV0RmlsZSwgbWFwTmFtZSwgYWRtaW5MZXZlbCwgcG9seWdvbk1hcCk7IA0KKwl9DQorCQ0KKwlwdWJsaWMgdm9pZCB3cml0ZVNwYXRpYWxEYXRhKE1hcDxTdHJpbmcsU2V0PEdtbFBvbHlnb24+PiBwb2x5Z29uTWFwLCBTdHJpbmcgb3V0cHV0RmlsZSwgU3RyaW5nIG1hcE5hbWUpIHsNCisJCXdyaXRlR01MKG91dHB1dEZpbGUsIG1hcE5hbWUgLCAtMSwgcG9seWdvbk1hcCk7IA0KKwl9DQorCQ0KKwkNCisJDQorCS8qKg0KKwkgKiBXcml0ZSB0aGUgR01MDQorCSAqIEBwYXJhbSBmaWxlTmFtZQ0KKwkgKiBAcGFyYW0gY291bnRyeUNvZGUNCisJICogQHBhcmFtIGxldmVsDQorCSAqLw0KKwlAU3VwcHJlc3NXYXJuaW5ncygiZGVwcmVjYXRpb24iKQ0KKwlwcml2YXRlIHZvaWQgd3JpdGVHTUwoU3RyaW5nIGZpbGVOYW1lLCBTdHJpbmcgbWFwTmFtZSwgaW50IGxldmVsLCBNYXA8U3RyaW5nLFNldDxHbWxQb2x5Z29uPj4gcG9seWdvbk1hcCkgew0KKwkJRG9jdW1lbnRCdWlsZGVyRmFjdG9yeSBmYWN0b3J5ID0gRG9jdW1lbnRCdWlsZGVyRmFjdG9yeS5uZXdJbnN0YW5jZSgpOw0KKwkJRG9jdW1lbnQgZG9jdW1lbnQgPSBudWxsOw0KKw0KKwkJdHJ5IHsNCisJCQlEb2N1bWVudEJ1aWxkZXIgYnVpbGRlciA9IGZhY3RvcnkubmV3RG9jdW1lbnRCdWlsZGVyKCk7DQorCQkJZG9jdW1lbnQgPSBidWlsZGVyLm5ld0RvY3VtZW50KCk7DQorCQl9IGNhdGNoIChFeGNlcHRpb24gZSkgew0KKwkJCUFjdGl2YXRvci5sb2dJbmZvcm1hdGlvbigiRXJyb3IgcGFyc2luZyBmaWxlICIgKyBlLmdldE1lc3NhZ2UoKSk7IC8vJE5PTi1OTFMtMSQNCisJCX0NCisJCQ0KKwkJLy9NYXAgRWxlbWVudA0KKwkJRWxlbWVudCByb290ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChNQVApOw0KKwkJZG9jdW1lbnQuYXBwZW5kQ2hpbGQocm9vdCk7DQorCQlyb290LnNldEF0dHJpYnV0ZSgieG1sbnM6Z21sIiwgImh0dHA6Ly93d3cub3Blbmdpcy5uZXQvZ21sIik7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJA0KKwkJcm9vdC5zZXRBdHRyaWJ1dGUoInhtbG5zOmdlb3JzcyIsICJodHRwOi8vd3d3Lmdlb3Jzcy5vcmcvZ2VvcnNzIik7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJA0KKwkJLy8gdGl0bGUNCisJCUVsZW1lbnQgdGl0bGVFbHQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFRJVExFKTsNCisJCQ0KKwkJaWYgKGxldmVsID4wKSB0aXRsZUVsdC5zZXRUZXh0Q29udGVudChtYXBOYW1lICsgIiBMZXZlbCAiK2xldmVsKyIgbWFwIik7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJA0KKwkJZWxzZSB0aXRsZUVsdC5zZXRUZXh0Q29udGVudChtYXBOYW1lICsgIiAgbWFwIik7IC8vJE5PTi1OTFMtMSQgDQorCQlyb290LmFwcGVuZENoaWxkKHRpdGxlRWx0KTsNCisJCS8vIHN1YnRpdGxlDQorCQlFbGVtZW50IHN1YlRpdGxlRWx0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChTVUJUSVRMRSk7DQorCQlzdWJUaXRsZUVsdC5zZXRUZXh0Q29udGVudCgiQWRtaW5pc3RyYXRpdmUgQm91bmRhcmllcyIpOyAvLyROT04tTkxTLTEkDQorCQlyb290LmFwcGVuZENoaWxkKHN1YlRpdGxlRWx0KTsNCisJCS8vIHVwZGF0ZWQNCisJCUVsZW1lbnQgdXBkYXRlZEVsdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoVVBEQVRFRCk7DQorCQlDYWxlbmRhciBjYWwgPSBDYWxlbmRhci5nZXRJbnN0YW5jZSgpOw0KKwkJU3RyaW5nIGRhdGUgPSBjYWwuZ2V0VGltZSgpLnRvTG9jYWxlU3RyaW5nKCk7DQorCQl1cGRhdGVkRWx0LnNldFRleHRDb250ZW50KGRhdGUpOw0KKwkJcm9vdC5hcHBlbmRDaGlsZCh1cGRhdGVkRWx0KTsNCisJCQ0KKwkJLy8gRU5UUlkNCisJCUVsZW1lbnQgZW50cnlFbHQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KEVOVFJZKTsNCisJCXJvb3QuYXBwZW5kQ2hpbGQoZW50cnlFbHQpOw0KKwkJLy8gV0hFUkUNCisJCUVsZW1lbnQgd2hlcmVFbHQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFdIRVJFKTsNCisJCWVudHJ5RWx0LmFwcGVuZENoaWxkKHdoZXJlRWx0KTsNCisJCQ0KKwkNCisJCUl0ZXJhdG9yPFN0cmluZz4gaXRlciA9IHBvbHlnb25NYXAua2V5U2V0KCkuaXRlcmF0b3IoKTsNCisJCQkJDQorCQl3aGlsZShpdGVyLmhhc05leHQoKSkgew0KKwkJCQ0KKwkJCVN0cmluZyBpZCA9IGl0ZXIubmV4dCgpOwkJCQ0KKwkJCVNldDxHbWxQb2x5Z29uPiBwb2x5U2V0ID0gcG9seWdvbk1hcC5nZXQoaWQpOw0KKwkJCUVsZW1lbnQgcG9seUVsdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoUE9MWUdPTik7DQorCQkJcG9seUVsdC5zZXRBdHRyaWJ1dGUoSUQsIGlkKTsgLy9pZCk7DQorCQkJd2hlcmVFbHQuYXBwZW5kQ2hpbGQocG9seUVsdCk7DQorCQkJRWxlbWVudCBib3VuZGFyeUVsdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoQk9VTkRBUlkpOw0KKwkJCXBvbHlFbHQuYXBwZW5kQ2hpbGQoYm91bmRhcnlFbHQpOw0KKwkJCQ0KKwkJCUl0ZXJhdG9yPEdtbFBvbHlnb24+IHJpbmdzID0gcG9seVNldC5pdGVyYXRvcigpOw0KKwkJCXdoaWxlKChyaW5ncyE9bnVsbCkgJiYgKHJpbmdzLmhhc05leHQoKSkpIHsNCisJCQkJR21sUG9seWdvbiBwID0gcmluZ3MubmV4dCgpOw0KKwkJCQlFbGVtZW50IHJpbmdFbHQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFJJTkcpOw0KKwkJCQlib3VuZGFyeUVsdC5hcHBlbmRDaGlsZChyaW5nRWx0KTsNCisJCQkJRWxlbWVudCBwb3NMaXN0RWx0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChQT1NMSVNUKTsNCisJCQkJU3RyaW5nIGRhdGEgPSBwLmdldERhdGEoKTsNCisJCQkJcG9zTGlzdEVsdC5zZXRUZXh0Q29udGVudChkYXRhKTsNCisJCQkJcmluZ0VsdC5hcHBlbmRDaGlsZChwb3NMaXN0RWx0KTsNCisJCQl9DQorCQkNCisJCX0vLyBhbGwgcG9seWdvbnMNCisJCQ0KKwkJd3JpdGUoZG9jdW1lbnQsZmlsZU5hbWUpOw0KKwkJDQorCQkNCisJfS8vIHdyaXRlR01MDQorCQ0KKwkNCisJLyoqDQorCSAqIEEgc3RhbmRhcmQgSkFYUCB3YXkgdG8gd3JpdGUgYSBET00gZG9jdW1lbnQNCisJICogQHBhcmFtIGRvY3VtZW50IA0KKwkgKiBAcGFyYW0gZmlsZU5hbWUgDQorCSAqIA0KKwkgKi8NCisJcHJpdmF0ZSBzdGF0aWMgc3luY2hyb25pemVkIHZvaWQgd3JpdGUoRG9jdW1lbnQgZG9jdW1lbnQsIFN0cmluZyBmaWxlTmFtZSkgDQorCXsNCisJCS8vaWYobG9nLmxvZ0ZsYWcpIGxvZy5sb2dFbnRlcigiWG1sVXRpbGl0aWVzLndyaXRlKCIgKyBkb2N1bWVudCArICIsICIgKyB4bWxGaWxlICsgIikiKTsNCisJCXRyeSANCisJCXsJDQorCQkJRmlsZSBmaWxlID0gbmV3IEZpbGUoZmlsZU5hbWUpOw0KKwkJCWZpbGUuZGVsZXRlKCk7DQorCQkJDQorCQkJRmlsZVdyaXRlciBmdyA9IG5ldyBGaWxlV3JpdGVyKGZpbGVOYW1lKTsNCisJCQkNCisJCQlET01Tb3VyY2UgZG9tU291cmNlID0gbmV3IERPTVNvdXJjZShkb2N1bWVudCk7DQorCQkJU3RyZWFtUmVzdWx0IHN0cmVhbVJlc3VsdCA9IG5ldyBTdHJlYW1SZXN1bHQoZncpOw0KKwkJCVRyYW5zZm9ybWVyRmFjdG9yeSB0ZiA9IFRyYW5zZm9ybWVyRmFjdG9yeS5uZXdJbnN0YW5jZSgpOw0KKwkJCVRyYW5zZm9ybWVyIHNlcmlhbGl6ZXIgPSB0Zi5uZXdUcmFuc2Zvcm1lcigpOw0KKwkJCXNlcmlhbGl6ZXIuc2V0T3V0cHV0UHJvcGVydHkoT3V0cHV0S2V5cy5FTkNPRElORywgSVNPX0NPREUpOw0KKwkJCXNlcmlhbGl6ZXIuc2V0T3V0cHV0UHJvcGVydHkoT3V0cHV0S2V5cy5JTkRFTlQsSU5ERU5UKTsNCisJCQlzZXJpYWxpemVyLnRyYW5zZm9ybShkb21Tb3VyY2UsIHN0cmVhbVJlc3VsdCk7IA0KKwkJCQ0KKwkJCWZ3LmNsb3NlKCk7DQorCQl9IA0KKwkJY2F0Y2goRXhjZXB0aW9uIGUpDQorCQl7DQorCQkJZS5wcmludFN0YWNrVHJhY2UoKTsNCisJCX0NCisJCS8vaWYobG9nLmxvZ0ZsYWcpIGxvZy5sb2dFeGl0KCJYbWxVdGlsaXRpZXMud3JpdGUiKTsNCisJCXJldHVybjsNCisJfQkJCQkJCQkJCQkJLy8gZW5kIHdyaXRlDQorDQorCQ0KKw0KK30gLy8gU3BhdGlhbEdtbEV4cG9ydGVyDQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLmdyYXBoZWRpdG9yL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL2dyYXBoZWRpdG9yL1RleHRNb2RpZnlMaXN0ZW5lci5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLmdyYXBoZWRpdG9yL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL2dyYXBoZWRpdG9yL1RleHRNb2RpZnlMaXN0ZW5lci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ1ODU3NzEKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkuZ3JhcGhlZGl0b3Ivc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvZ3JhcGhlZGl0b3IvVGV4dE1vZGlmeUxpc3RlbmVyLmphdmEKQEAgLTAsMCArMSw3NCBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnVpLmdyYXBoZWRpdG9yOw0KKw0KK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsNCisNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5Nb2RpZnlFdmVudDsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5Nb2RpZnlMaXN0ZW5lcjsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuVGV4dDsNCitpbXBvcnQgb3JnLmVjbGlwc2UuemVzdC5jb3JlLndpZGdldHMuR3JhcGg7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnplc3QuY29yZS53aWRnZXRzLkdyYXBoQ29ubmVjdGlvbjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuemVzdC5jb3JlLndpZGdldHMuR3JhcGhJdGVtOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS56ZXN0LmNvcmUud2lkZ2V0cy5HcmFwaE5vZGU7DQorDQorcHVibGljIGNsYXNzIFRleHRNb2RpZnlMaXN0ZW5lciBpbXBsZW1lbnRzIE1vZGlmeUxpc3RlbmVyDQoreyANCisJZmluYWwgc3RhdGljIGludCAJTk9ERV9USVRMRT1HcmFwaERlZnMuTk9ERV9USVRMRSwgDQorCQkJCQkJTk9ERV9VUkk9R3JhcGhEZWZzLk5PREVfVVJJLCANCisJCQkJCQlOT0RFX0xBQkVMPUdyYXBoRGVmcy5OT0RFX0xBQkVMLCANCisJCQkJCQlFREdFX1RJVExFPUdyYXBoRGVmcy5FREdFX1RJVExFLCANCisJCQkJCQlFREdFX0FVUkk9R3JhcGhEZWZzLkVER0VfQVVSSSwgDQorCQkJCQkJRURHRV9CVVJJPUdyYXBoRGVmcy5FREdFX0JVUkksIA0KKwkJCQkJCUVER0VfTEFCRUxfVkFMVUU9R3JhcGhEZWZzLkVER0VfTEFCRUxfVkFMVUU7DQorCU5vZGVEYXRhIG5vZGVEYXRhOw0KKwlDb25uZWN0aW9uRGF0YSBjb25uZWN0aW9uRGF0YTsNCisJaW50IGF0dHJpYnV0ZTsNCisJR3JhcGggemVzdEdyYXBoOw0KKwkNCisJVGV4dE1vZGlmeUxpc3RlbmVyKEdyYXBoIHplc3RHcmFwaCwgaW50IGF0dHJpYnV0ZSkNCisJew0KKwkJdGhpcy5hdHRyaWJ1dGUgPSBhdHRyaWJ1dGU7DQorCQl0aGlzLnplc3RHcmFwaCA9IHplc3RHcmFwaDsNCisJCQ0KKwl9DQorCQ0KKwlwdWJsaWMgdm9pZCBtb2RpZnlUZXh0KGZpbmFsIE1vZGlmeUV2ZW50IGUpIHsNCisJCVRleHQgdGV4dCA9IChUZXh0KSBlLndpZGdldDsNCisJCWlmICghdGV4dC5pc0ZvY3VzQ29udHJvbCgpKQ0KKwkJICAgICAgcmV0dXJuOw0KKwkJDQorCQlMaXN0PEdyYXBoSXRlbT4gc2VsZWN0ZWRJdGVtcyA9IHplc3RHcmFwaC5nZXRTZWxlY3Rpb24oKTsNCisJCWlmIChzZWxlY3RlZEl0ZW1zLnNpemUoKSA9PSAxKQ0KKwkJew0KKwkJCWlmIChzZWxlY3RlZEl0ZW1zLmdldCgwKSBpbnN0YW5jZW9mIEdyYXBoTm9kZSkNCisJCQl7DQorCQkJCUdyYXBoTm9kZSBzZWxlY3RlZE5vZGUgPSAoR3JhcGhOb2RlKSBzZWxlY3RlZEl0ZW1zLmdldCgwKTsNCisJCQkJTm9kZURhdGEgbm9kZURhdGEgPSAoTm9kZURhdGEpIHNlbGVjdGVkTm9kZS5nZXREYXRhKCk7DQorCQkJCXRoaXMubm9kZURhdGEgPSBub2RlRGF0YTsNCisJCQkJDQorCQkJfQ0KKwkJCWlmIChzZWxlY3RlZEl0ZW1zLmdldCgwKSBpbnN0YW5jZW9mIEdyYXBoQ29ubmVjdGlvbikNCisJCQl7DQorCQkJCUdyYXBoQ29ubmVjdGlvbiBzZWxlY3RlZENvbm5lY3Rpb24gPSAoR3JhcGhDb25uZWN0aW9uKSBzZWxlY3RlZEl0ZW1zLmdldCgwKTsNCisJCQkJQ29ubmVjdGlvbkRhdGEgY29ubmVjdGlvbkRhdGEgPSAoQ29ubmVjdGlvbkRhdGEpIHNlbGVjdGVkQ29ubmVjdGlvbi5nZXREYXRhKCk7DQorCQkJCXRoaXMuY29ubmVjdGlvbkRhdGEgPSBjb25uZWN0aW9uRGF0YTsNCisJCQkJDQorCQkJfQ0KKwkJfQ0KKwkJDQorCQlpZiAoICh0aGlzLm5vZGVEYXRhID09IG51bGwpICYmICh0aGlzLmNvbm5lY3Rpb25EYXRhID09IG51bGwpKQ0KKwkJCXJldHVybjsNCisJCQ0KKwkJc3dpdGNoKGF0dHJpYnV0ZSkNCisJCXsNCisJCWNhc2UgTk9ERV9USVRMRTogbm9kZURhdGEuc2V0Tm9kZVRpdGxlKHRleHQuZ2V0VGV4dCgpKTsgYnJlYWs7DQorCQljYXNlIE5PREVfVVJJOiBub2RlRGF0YS5zZXROb2RlVVJJKHRleHQuZ2V0VGV4dCgpKTsgYnJlYWs7DQorCQljYXNlIE5PREVfTEFCRUw6IGJyZWFrOw0KKwkJY2FzZSBFREdFX1RJVExFOiBjb25uZWN0aW9uRGF0YS5zZXRFZGdlVGl0bGUodGV4dC5nZXRUZXh0KCkpOyBicmVhazsNCisJCWNhc2UgRURHRV9BVVJJOiBjb25uZWN0aW9uRGF0YS5zZXROb2RlQVVSSSh0ZXh0LmdldFRleHQoKSk7IGJyZWFrOw0KKwkJY2FzZSBFREdFX0JVUkk6IGNvbm5lY3Rpb25EYXRhLnNldE5vZGVCVVJJKHRleHQuZ2V0VGV4dCgpKTsgYnJlYWs7DQorCQljYXNlIEVER0VfTEFCRUxfVkFMVUU6IGNvbm5lY3Rpb25EYXRhLnNldEVkZ2VMYWJlbFZhbHVlKHRleHQuZ2V0VGV4dCgpKTsgYnJlYWs7DQorCQkNCisJCX0NCisJCQkNCisJfQ0KK30NCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkuZ3JhcGhlZGl0b3Ivc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvZ3JhcGhlZGl0b3IvYWRhcHRlcnMvRGVsZWdhdGluZ1dyYXBwZXJJdGVtUHJvdmlkZXJEaXNwbGF5YWJsZUFkYXB0ZXJGYWN0b3J5LmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkuZ3JhcGhlZGl0b3Ivc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvZ3JhcGhlZGl0b3IvYWRhcHRlcnMvRGVsZWdhdGluZ1dyYXBwZXJJdGVtUHJvdmlkZXJEaXNwbGF5YWJsZUFkYXB0ZXJGYWN0b3J5LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGZkZDY0YQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5ncmFwaGVkaXRvci9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9ncmFwaGVkaXRvci9hZGFwdGVycy9EZWxlZ2F0aW5nV3JhcHBlckl0ZW1Qcm92aWRlckRpc3BsYXlhYmxlQWRhcHRlckZhY3RvcnkuamF2YQpAQCAtMCwwICsxLDU4IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0udWkuZ3JhcGhlZGl0b3IuYWRhcHRlcnM7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBsYXRmb3JtOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkRlbGVnYXRpbmdXcmFwcGVySXRlbVByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uSWRlbnRpZmlhYmxlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5EaXNwbGF5YWJsZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmpvYnMuYWRhcHRlcnMuaWRlbnRpZmlhYmxlLklkZW50aWZpYWJsZUFkYXB0ZXJGYWN0b3J5OworCisvKioKKyAqIFRoaXMgY2xhc3MgaXMgYW4ge0BsaW5rIElkZW50aWZpYWJsZUFkYXB0ZXJGYWN0b3J5fSB0aGF0IGFkYXB0cworICoge0BsaW5rIERlbGVnYXRpbmdXcmFwcGVySXRlbVByb3ZpZGVyfXMgdG8ge0BsaW5rIERpc3BsYXlhYmxlfXMuCisgKi8KK3B1YmxpYyBjbGFzcyBEZWxlZ2F0aW5nV3JhcHBlckl0ZW1Qcm92aWRlckRpc3BsYXlhYmxlQWRhcHRlckZhY3RvcnkgZXh0ZW5kcworCQlJZGVudGlmaWFibGVBZGFwdGVyRmFjdG9yeSB7CisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JQWRhcHRlckZhY3RvcnkjZ2V0QWRhcHRlcihqYXZhLmxhbmcuT2JqZWN0LAorCSAqICAgICAgamF2YS5sYW5nLkNsYXNzKQorCSAqLworCXB1YmxpYyBPYmplY3QgZ2V0QWRhcHRlcihPYmplY3QgYWRhcHRhYmxlT2JqZWN0LCBDbGFzcyBhZGFwdGVyVHlwZSkgeworCQlEaXNwbGF5YWJsZSByZXRWYWx1ZSA9IG51bGw7CisKKwkJLy8gSXQgaXQgd2hhdCB3ZSdyZSBsb29raW5nIGZvcj8KKwkJaWYgKGFkYXB0YWJsZU9iamVjdCBpbnN0YW5jZW9mIERlbGVnYXRpbmdXcmFwcGVySXRlbVByb3ZpZGVyCisJCQkJJiYgYWRhcHRlclR5cGUuZXF1YWxzKERpc3BsYXlhYmxlLmNsYXNzKSkgeworCQkJLy8gWWVzCisJCQlmaW5hbCBEZWxlZ2F0aW5nV3JhcHBlckl0ZW1Qcm92aWRlciBkd2lwID0gKERlbGVnYXRpbmdXcmFwcGVySXRlbVByb3ZpZGVyKSBhZGFwdGFibGVPYmplY3Q7CisJCQkvLyBJcyB0aGlzIGFuIElkZW50aWZpYWJsZT8KKwkJCWlmIChkd2lwLmdldFZhbHVlKCkgaW5zdGFuY2VvZiBJZGVudGlmaWFibGUpIHsKKwkJCQkvLyBZZXMKKwkJCQkvLyAuLi5hbmQgaXMgaXQgTW9kaWZpYWJsZT8KKwkJCQlpZiAoZHdpcC5nZXRWYWx1ZSgpIGluc3RhbmNlb2YgRGlzcGxheWFibGUpIHsKKwkJCQkJLy8gWWVzCisJCQkJCXJldFZhbHVlID0gKERpc3BsYXlhYmxlKSBkd2lwLmdldFZhbHVlKCk7CisJCQkJfQorCQkJCS8vIGVsc2UgTk8KKwkJCX0gLy8gaWYgSWRlbnRpZmlhYmxlIAorCQkJZWxzZSB7CisJCQkJLy8gTm8KKwkJCQkvLyBLZWVwIGFkYXB0aW5nLi4uCisJCQkJcmV0VmFsdWUgPSAoRGlzcGxheWFibGUpIFBsYXRmb3JtLmdldEFkYXB0ZXJNYW5hZ2VyKCkKKwkJCQkJCS5nZXRBZGFwdGVyKGR3aXAuZ2V0VmFsdWUoKSwgRGlzcGxheWFibGUuY2xhc3MpOworCQkJfQorCQl9IC8vIGlmCisJCXJldHVybiByZXRWYWx1ZTsKKwl9IC8vIGdldEFkYXB0ZXIKK30gLy8gRGVsZWdhdGluZ1dyYXBwZXJJdGVtUHJvdmlkZXJNb2RpZmlhYmxlQWRhcHRlckZhY3RvcnkKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5ncmFwaGVkaXRvci9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9ncmFwaGVkaXRvci9hZGFwdGVycy9EZWxlZ2F0aW5nV3JhcHBlckl0ZW1Qcm92aWRlckRpc3BsYXlhYmxlQ2Fub25pY2FsQWRhcHRlckZhY3RvcnkuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5ncmFwaGVkaXRvci9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9ncmFwaGVkaXRvci9hZGFwdGVycy9EZWxlZ2F0aW5nV3JhcHBlckl0ZW1Qcm92aWRlckRpc3BsYXlhYmxlQ2Fub25pY2FsQWRhcHRlckZhY3RvcnkuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMTc1MDA3Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLmdyYXBoZWRpdG9yL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL2dyYXBoZWRpdG9yL2FkYXB0ZXJzL0RlbGVnYXRpbmdXcmFwcGVySXRlbVByb3ZpZGVyRGlzcGxheWFibGVDYW5vbmljYWxBZGFwdGVyRmFjdG9yeS5qYXZhCkBAIC0wLDAgKzEsNTkgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS51aS5ncmFwaGVkaXRvci5hZGFwdGVyczsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGxhdGZvcm07CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuRGVsZWdhdGluZ1dyYXBwZXJJdGVtUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5JZGVudGlmaWFibGU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkRpc3BsYXlhYmxlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5EaXNwbGF5YWJsZUNhbm9uaWNhbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmpvYnMuYWRhcHRlcnMuaWRlbnRpZmlhYmxlLklkZW50aWZpYWJsZUFkYXB0ZXJGYWN0b3J5OworCisvKioKKyAqIFRoaXMgY2xhc3MgaXMgYW4ge0BsaW5rIElkZW50aWZpYWJsZUFkYXB0ZXJGYWN0b3J5fSB0aGF0IGFkYXB0cworICoge0BsaW5rIERlbGVnYXRpbmdXcmFwcGVySXRlbVByb3ZpZGVyfXMgdG8ge0BsaW5rIERpc3BsYXlhYmxlfXMuCisgKi8KK3B1YmxpYyBjbGFzcyBEZWxlZ2F0aW5nV3JhcHBlckl0ZW1Qcm92aWRlckRpc3BsYXlhYmxlQ2Fub25pY2FsQWRhcHRlckZhY3RvcnkgZXh0ZW5kcworCQlJZGVudGlmaWFibGVBZGFwdGVyRmFjdG9yeSB7CisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JQWRhcHRlckZhY3RvcnkjZ2V0QWRhcHRlcihqYXZhLmxhbmcuT2JqZWN0LAorCSAqICAgICAgamF2YS5sYW5nLkNsYXNzKQorCSAqLworCXB1YmxpYyBPYmplY3QgZ2V0QWRhcHRlcihPYmplY3QgYWRhcHRhYmxlT2JqZWN0LCBDbGFzcyBhZGFwdGVyVHlwZSkgeworCQlEaXNwbGF5YWJsZUNhbm9uaWNhbCByZXRWYWx1ZSA9IG51bGw7CisKKwkJLy8gSXQgaXQgd2hhdCB3ZSdyZSBsb29raW5nIGZvcj8KKwkJaWYgKGFkYXB0YWJsZU9iamVjdCBpbnN0YW5jZW9mIERlbGVnYXRpbmdXcmFwcGVySXRlbVByb3ZpZGVyCisJCQkJJiYgYWRhcHRlclR5cGUuZXF1YWxzKERpc3BsYXlhYmxlQ2Fub25pY2FsLmNsYXNzKSkgeworCQkJLy8gWWVzCisJCQlmaW5hbCBEZWxlZ2F0aW5nV3JhcHBlckl0ZW1Qcm92aWRlciBkd2lwID0gKERlbGVnYXRpbmdXcmFwcGVySXRlbVByb3ZpZGVyKSBhZGFwdGFibGVPYmplY3Q7CisJCQkvLyBJcyB0aGlzIGFuIElkZW50aWZpYWJsZT8KKwkJCWlmIChkd2lwLmdldFZhbHVlKCkgaW5zdGFuY2VvZiBJZGVudGlmaWFibGUpIHsKKwkJCQkvLyBZZXMKKwkJCQkvLyAuLi5hbmQgaXMgaXQgTW9kaWZpYWJsZT8KKwkJCQlpZiAoZHdpcC5nZXRWYWx1ZSgpIGluc3RhbmNlb2YgRGlzcGxheWFibGVDYW5vbmljYWwpIHsKKwkJCQkJLy8gWWVzCisJCQkJCXJldFZhbHVlID0gKERpc3BsYXlhYmxlQ2Fub25pY2FsKSBkd2lwLmdldFZhbHVlKCk7CisJCQkJfQorCQkJCS8vIGVsc2UgTk8KKwkJCX0gLy8gaWYgSWRlbnRpZmlhYmxlIAorCQkJZWxzZSB7CisJCQkJLy8gTm8KKwkJCQkvLyBLZWVwIGFkYXB0aW5nLi4uCisJCQkJcmV0VmFsdWUgPSAoRGlzcGxheWFibGVDYW5vbmljYWwpIFBsYXRmb3JtLmdldEFkYXB0ZXJNYW5hZ2VyKCkKKwkJCQkJCS5nZXRBZGFwdGVyKGR3aXAuZ2V0VmFsdWUoKSwgRGlzcGxheWFibGVDYW5vbmljYWwuY2xhc3MpOworCQkJfQorCQl9IC8vIGlmCisJCXJldHVybiByZXRWYWx1ZTsKKwl9IC8vIGdldEFkYXB0ZXIKK30gLy8gRGVsZWdhdGluZ1dyYXBwZXJJdGVtUHJvdmlkZXJNb2RpZmlhYmxlQWRhcHRlckZhY3RvcnkKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5ncmFwaGVkaXRvci9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9ncmFwaGVkaXRvci9hZGFwdGVycy9JZGVudGlmaWFibGVEZWxlZ2F0ZURpc3BsYXlhYmxlQWRhcHRlckZhY3RvcnkuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5ncmFwaGVkaXRvci9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9ncmFwaGVkaXRvci9hZGFwdGVycy9JZGVudGlmaWFibGVEZWxlZ2F0ZURpc3BsYXlhYmxlQWRhcHRlckZhY3RvcnkuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZTMxNDhkCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLmdyYXBoZWRpdG9yL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL2dyYXBoZWRpdG9yL2FkYXB0ZXJzL0lkZW50aWZpYWJsZURlbGVnYXRlRGlzcGxheWFibGVBZGFwdGVyRmFjdG9yeS5qYXZhCkBAIC0wLDAgKzEsNDQgQEAKKy8vIElkZW50aWZpYWJsZURlbGVnYXRlTW9kaWZpYWJsZUFkYXB0ZXJGYWN0b3J5LmphdmEKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS51aS5ncmFwaGVkaXRvci5hZGFwdGVyczsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLklkZW50aWZpYWJsZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguRGlzcGxheWFibGU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5qb2JzLmFkYXB0ZXJzLmlkZW50aWZpYWJsZS5JZGVudGlmaWFibGVBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnVpLnZpZXdzLklkZW50aWZpYWJsZURlbGVnYXRlOworCisvKioKKyAqIFRoaXMgY2xhc3MgaXMgYW4ge0BsaW5rIElkZW50aWZpYWJsZUFkYXB0ZXJGYWN0b3J5fSB0aGF0IGFkYXB0cworICoge0BsaW5rIElkZW50aWZpYWJsZURlbGVnYXRlfXMgdG8ge0BsaW5rIElkZW50aWZpYWJsZX1zLgorICovCitwdWJsaWMgY2xhc3MgSWRlbnRpZmlhYmxlRGVsZWdhdGVEaXNwbGF5YWJsZUFkYXB0ZXJGYWN0b3J5IGV4dGVuZHMKKwkJSWRlbnRpZmlhYmxlQWRhcHRlckZhY3RvcnkgeworCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSUFkYXB0ZXJGYWN0b3J5I2dldEFkYXB0ZXIoamF2YS5sYW5nLk9iamVjdCwKKwkgKiAgICAgIGphdmEubGFuZy5DbGFzcykKKwkgKi8KKwlwdWJsaWMgT2JqZWN0IGdldEFkYXB0ZXIoT2JqZWN0IGFkYXB0YWJsZU9iamVjdCwgQ2xhc3MgYWRhcHRlclR5cGUpIHsKKwkJSWRlbnRpZmlhYmxlIHJldFZhbHVlID0gbnVsbDsKKwkJLy8gSXQgaXQgd2hhdCB3ZSdyZSBsb29raW5nIGZvcj8KKwkJaWYgKGFkYXB0YWJsZU9iamVjdCBpbnN0YW5jZW9mIElkZW50aWZpYWJsZURlbGVnYXRlCisJCQkJJiYgYWRhcHRlclR5cGUuZXF1YWxzKERpc3BsYXlhYmxlLmNsYXNzKSkgeworCQkJLy8gWWVzCisJCQlmaW5hbCBJZGVudGlmaWFibGUgdGVtcCA9ICgoSWRlbnRpZmlhYmxlRGVsZWdhdGUpIGFkYXB0YWJsZU9iamVjdCkuZ2V0SWRlbnRpZmlhYmxlKCk7CisJCQkKKwkJCXJldFZhbHVlID0gdGVtcCAhPSBudWxsICYmIHRlbXAgaW5zdGFuY2VvZiBEaXNwbGF5YWJsZSA/IHRlbXAgOiBudWxsOworCQl9IC8vIGlmCisJCXJldHVybiByZXRWYWx1ZTsKKwl9IC8vIGdldEFkYXB0ZXIKKworfSAvLyBJZGVudGlmaWFibGVEZWxlZ2F0ZU1vZGlmaWFibGVBZGFwdGVyRmFjdG9yeQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLmdyYXBoZWRpdG9yL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL2dyYXBoZWRpdG9yL2FkYXB0ZXJzL0lkZW50aWZpYWJsZURlbGVnYXRlRGlzcGxheWFibGVDYW5vbmljYWxBZGFwdGVyRmFjdG9yeS5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLmdyYXBoZWRpdG9yL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL2dyYXBoZWRpdG9yL2FkYXB0ZXJzL0lkZW50aWZpYWJsZURlbGVnYXRlRGlzcGxheWFibGVDYW5vbmljYWxBZGFwdGVyRmFjdG9yeS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU1Y2YzNjcKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkuZ3JhcGhlZGl0b3Ivc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvZ3JhcGhlZGl0b3IvYWRhcHRlcnMvSWRlbnRpZmlhYmxlRGVsZWdhdGVEaXNwbGF5YWJsZUNhbm9uaWNhbEFkYXB0ZXJGYWN0b3J5LmphdmEKQEAgLTAsMCArMSw0NCBAQAorLy8gSWRlbnRpZmlhYmxlRGVsZWdhdGVNb2RpZmlhYmxlQWRhcHRlckZhY3RvcnkuamF2YQorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnVpLmdyYXBoZWRpdG9yLmFkYXB0ZXJzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uSWRlbnRpZmlhYmxlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5EaXNwbGF5YWJsZUNhbm9uaWNhbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmpvYnMuYWRhcHRlcnMuaWRlbnRpZmlhYmxlLklkZW50aWZpYWJsZUFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udWkudmlld3MuSWRlbnRpZmlhYmxlRGVsZWdhdGU7CisKKy8qKgorICogVGhpcyBjbGFzcyBpcyBhbiB7QGxpbmsgSWRlbnRpZmlhYmxlQWRhcHRlckZhY3Rvcnl9IHRoYXQgYWRhcHRzCisgKiB7QGxpbmsgSWRlbnRpZmlhYmxlRGVsZWdhdGV9cyB0byB7QGxpbmsgSWRlbnRpZmlhYmxlfXMuCisgKi8KK3B1YmxpYyBjbGFzcyBJZGVudGlmaWFibGVEZWxlZ2F0ZURpc3BsYXlhYmxlQ2Fub25pY2FsQWRhcHRlckZhY3RvcnkgZXh0ZW5kcworCQlJZGVudGlmaWFibGVBZGFwdGVyRmFjdG9yeSB7CisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JQWRhcHRlckZhY3RvcnkjZ2V0QWRhcHRlcihqYXZhLmxhbmcuT2JqZWN0LAorCSAqICAgICAgamF2YS5sYW5nLkNsYXNzKQorCSAqLworCXB1YmxpYyBPYmplY3QgZ2V0QWRhcHRlcihPYmplY3QgYWRhcHRhYmxlT2JqZWN0LCBDbGFzcyBhZGFwdGVyVHlwZSkgeworCQlJZGVudGlmaWFibGUgcmV0VmFsdWUgPSBudWxsOworCQkvLyBJdCBpdCB3aGF0IHdlJ3JlIGxvb2tpbmcgZm9yPworCQlpZiAoYWRhcHRhYmxlT2JqZWN0IGluc3RhbmNlb2YgSWRlbnRpZmlhYmxlRGVsZWdhdGUKKwkJCQkmJiBhZGFwdGVyVHlwZS5lcXVhbHMoRGlzcGxheWFibGVDYW5vbmljYWwuY2xhc3MpKSB7CisJCQkvLyBZZXMKKwkJCWZpbmFsIElkZW50aWZpYWJsZSB0ZW1wID0gKChJZGVudGlmaWFibGVEZWxlZ2F0ZSkgYWRhcHRhYmxlT2JqZWN0KS5nZXRJZGVudGlmaWFibGUoKTsKKwkJCQorCQkJcmV0VmFsdWUgPSB0ZW1wICE9IG51bGwgJiYgdGVtcCBpbnN0YW5jZW9mIERpc3BsYXlhYmxlQ2Fub25pY2FsID8gdGVtcCA6IG51bGw7CisJCX0gLy8gaWYKKwkJcmV0dXJuIHJldFZhbHVlOworCX0gLy8gZ2V0QWRhcHRlcgorCit9IC8vIElkZW50aWZpYWJsZURlbGVnYXRlTW9kaWZpYWJsZUFkYXB0ZXJGYWN0b3J5CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkuZ3JhcGhlZGl0b3Ivc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvZ3JhcGhlZGl0b3IvaGFuZGxlcnMvQ2Fub25pY2FsR3JhcGhEaXNwbGF5LmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkuZ3JhcGhlZGl0b3Ivc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvZ3JhcGhlZGl0b3IvaGFuZGxlcnMvQ2Fub25pY2FsR3JhcGhEaXNwbGF5LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODhjNTg3NgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5ncmFwaGVkaXRvci9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9ncmFwaGVkaXRvci9oYW5kbGVycy9DYW5vbmljYWxHcmFwaERpc3BsYXkuamF2YQpAQCAtMCwwICsxLDI3OCBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnVpLmdyYXBoZWRpdG9yLmhhbmRsZXJzOw0KKw0KKw0KKw0KK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0Ow0KK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsNCisNCitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5jb21tYW5kcy5BYnN0cmFjdEhhbmRsZXI7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUuY29tbWFuZHMuRXhlY3V0aW9uRXZlbnQ7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUuY29tbWFuZHMuRXhlY3V0aW9uRXhjZXB0aW9uOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLmNvbW1hbmRzLklIYW5kbGVyOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JQ29udGFpbmVyOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdDsNCitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVJlc291cmNlOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5SZXNvdXJjZXNQbHVnaW47DQoraW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QbGF0Zm9ybTsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLkVMaXN0Ow0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuVVJJOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5EZWxlZ2F0aW5nV3JhcHBlckl0ZW1Qcm92aWRlcjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlN0cnVjdHVyZWRTZWxlY3Rpb247DQoraW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuVHJlZVBhdGg7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuVHJlZVNlbGVjdGlvbjsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5hZGFwdGVycy5maWxlLkZpbGU7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5VdGlsaXR5Ow0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLklkZW50aWZpYWJsZTsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkdyYXBoOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuTW9kZWw7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5pbXBsLk1vZGVsSW1wbDsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS51aS5BY3RpdmF0b3I7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udWkuZ3JhcGhlZGl0b3IuR3JhcGhDYW52YXM7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udWkudmlld3MuZXhwbG9yZXIuSWRlbnRpZmlhYmxlVHJlZU5vZGU7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnVpLmhhbmRsZXJzLkhhbmRsZXJVdGlsOw0KKw0KKw0KKwlwdWJsaWMgY2xhc3MgQ2Fub25pY2FsR3JhcGhEaXNwbGF5IGV4dGVuZHMgQWJzdHJhY3RIYW5kbGVyDQorCWltcGxlbWVudHMgSUhhbmRsZXIgew0KKw0KKwkJDQorCQlJUHJvamVjdCBwcm9qZWN0Ow0KKwkJDQorCQlwdWJsaWMgT2JqZWN0IGV4ZWN1dGUoZmluYWwgRXhlY3V0aW9uRXZlbnQgZXhlY3V0aW9uRXZlbnQpDQorCQl0aHJvd3MgRXhlY3V0aW9uRXhjZXB0aW9uIHsNCisJCQkNCisJCQlmaW5hbCBJU2VsZWN0aW9uIHNlbGVjdGlvbiA9IEhhbmRsZXJVdGlsDQorCQkJLmdldEN1cnJlbnRTZWxlY3Rpb25DaGVja2VkKGV4ZWN1dGlvbkV2ZW50KTsNCisJCQ0KKwkJCQ0KKwkJCQ0KKwkJCQ0KKwkJCWlmKHNlbGVjdGlvbiBpbnN0YW5jZW9mIFRyZWVTZWxlY3Rpb24pIHsNCisJCQkJVHJlZVNlbGVjdGlvbiB0cyA9IChUcmVlU2VsZWN0aW9uKXNlbGVjdGlvbjsNCisJCQkJVHJlZVBhdGhbXSBwYXRocyA9ICB0cy5nZXRQYXRocygpOw0KKwkJCQlpZihwYXRocy5sZW5ndGggPiAwKSB7DQorCQkJCQlUcmVlUGF0aCBwYXJlbnQgPSBwYXRoc1swXS5nZXRQYXJlbnRQYXRoKCk7DQorCQkJCQlPYmplY3QgcHJvamVjdFNlZ21lbnQgPSBwYXJlbnQuZ2V0Rmlyc3RTZWdtZW50KCk7DQorCQkJCQkNCisJCQkJCS8vT2JqZWN0IHBhcmVudFNlZyA9IHBhcmVudC5nZXRMYXN0U2VnbWVudCgpOw0KKwkJCQkJaWYocHJvamVjdFNlZ21lbnQgIT0gbnVsbCkgew0KKwkJCQkJCXByb2plY3QgPSBudWxsOwkJCQkJDQorCQkJCQkJaWYocHJvamVjdFNlZ21lbnQgaW5zdGFuY2VvZiBJZGVudGlmaWFibGVUcmVlTm9kZSkgIA0KKwkJCQkJCQlwcm9qZWN0ID0oKElkZW50aWZpYWJsZVRyZWVOb2RlKXByb2plY3RTZWdtZW50KS5nZXRQcm9qZWN0KCk7CQkJCQkgDQorCQkJCQkJaWYocHJvamVjdFNlZ21lbnQgaW5zdGFuY2VvZiBJUHJvamVjdCkgDQorCQkJCQkJCXByb2plY3QgPSAoSVByb2plY3QpcHJvamVjdFNlZ21lbnQ7DQorCQkJCQkJDQorCQkJCQl9DQorCQkJCX0NCisJCQl9DQorCQkJDQorCQkJDQorCQkJLy8gU3RydWN0dXJlZCBTZWxlY3Rpb24/DQorCQkJaWYgKHNlbGVjdGlvbiBpbnN0YW5jZW9mIFN0cnVjdHVyZWRTZWxlY3Rpb24pIHsNCisJCQkJDQorCQkJCS8vIFllcw0KKwkJCQkvLyBJdGVyYXRlIHRocm91Z2ggZXZlcnl0aGluZyB0aGF0J3MgaW4gdGhlIHNlbGVjdGlvbiBhbmQgcHV0IGVhY2gNCisJCQkJLy8gb2JqZWN0IGludG8gdGhlIGFwcHJvcHJpYXRlIGNvbGxlY3Rpb24uDQorCQkJCWZvciAoZmluYWwgT2JqZWN0IG9iaiA6ICgoU3RydWN0dXJlZFNlbGVjdGlvbikgc2VsZWN0aW9uKS50b0xpc3QoKSkgew0KKwkJCQkJLy8gSUV4ZWN1dGFibGUgZXhlY3V0YWJsZSA9IChJRXhlY3V0YWJsZSkgRXhlY3V0YWJsZUFkYXB0ZXJGYWN0b3J5LklOU1RBTkNFDQorCQkJCQkvLyAuYWRhcHQob2JqLCBJRXhlY3V0YWJsZS5jbGFzcyk7DQorCQkJCQkNCisJCQkJCUZpbGUgZmlsZSA9IChGaWxlKSBQbGF0Zm9ybQ0KKwkJCQkJLmdldEFkYXB0ZXJNYW5hZ2VyKCkuZ2V0QWRhcHRlcihvYmosIEZpbGUuY2xhc3MpOyANCisJCQkJCQ0KKwkJCQkJaWYgKG9iaiBpbnN0YW5jZW9mIE1vZGVsSW1wbCkNCisJCQkJCXsJDQorCQkJCQkJCQkJCQ0KKwkJCQkJCU1vZGVsSW1wbCBtb2RlbCA9DQorCQkJCQkJKE1vZGVsSW1wbCkgUGxhdGZvcm0uZ2V0QWRhcHRlck1hbmFnZXIoKS5nZXRBZGFwdGVyKG9iaiwgTW9kZWxJbXBsLmNsYXNzKTsNCisJCQkJCQ0KKwkJCQkJCWlmIChtb2RlbCAhPSBudWxsKQ0KKwkJCQkJCXsNCisJCQkJCQkJZG9pdChtb2RlbCk7DQorCQkJCQkJfQ0KKwkJCQkJCWVsc2UNCisJCQkJCQl7DQorCQkJCQkJCS8vIEludGVybmFsIGVycm9yDQorCQkJCQkJCUFjdGl2YXRvci5sb2dFcnJvcigNCisJCQkJCQkJCQkiU1RFTSBJbnRlcm5hbCBlcnJvciBkaXNwbGF5IGNvbW1hbmQgYXBwbGllZCB0byBcIiINCisJCQkJCQkJCQkJCSsgb2JqLmdldENsYXNzKCkuZ2V0TmFtZSgpICsgIlwiIiwgbnVsbCk7DQorCQkJCQkJfQ0KKwkJCQkJfQ0KKwkJCQkJZWxzZSBpZiAob2JqIGluc3RhbmNlb2YgRGVsZWdhdGluZ1dyYXBwZXJJdGVtUHJvdmlkZXIpDQorCQkJCQl7DQorCQkJCQkJCQkJCQkNCisJCQkJCQlJZGVudGlmaWFibGUgcmV0VmFsdWUgPSBudWxsOw0KKwkJCQkJCURlbGVnYXRpbmdXcmFwcGVySXRlbVByb3ZpZGVyIGRXSVAgPSAoRGVsZWdhdGluZ1dyYXBwZXJJdGVtUHJvdmlkZXIpIG9iajsJCQkNCisJCQkJCQkNCisJCQkJCQlpZiAoZFdJUC5nZXRWYWx1ZSgpIGluc3RhbmNlb2YgSWRlbnRpZmlhYmxlKSB7DQorCQkJCQkJCS8vIFllcw0KKwkJCQkJCQlyZXRWYWx1ZSA9IChJZGVudGlmaWFibGUpIGRXSVAuZ2V0VmFsdWUoKTsNCisJCQkJCQl9IC8vIGlmIElkZW50aWZpYWJsZQ0KKwkJCQkJCWVsc2Ugew0KKwkJCQkJCQkvLyBObw0KKwkJCQkJCQkvLyBLZWVwIGFkYXB0aW5nLi4uDQorCQkJCQkJCXJldFZhbHVlID0gKElkZW50aWZpYWJsZSkgUGxhdGZvcm0uZ2V0QWRhcHRlck1hbmFnZXIoKQ0KKwkJCQkJCQkJCS5nZXRBZGFwdGVyKGRXSVAuZ2V0VmFsdWUoKSwgSWRlbnRpZmlhYmxlLmNsYXNzKTsNCisJCQkJCQl9DQorCQkJCQkJTW9kZWxJbXBsIG1vZGVsID0NCisJCQkJCQkJKE1vZGVsSW1wbCkgUGxhdGZvcm0uZ2V0QWRhcHRlck1hbmFnZXIoKS5nZXRBZGFwdGVyKHJldFZhbHVlLCBNb2RlbEltcGwuY2xhc3MpOw0KKwkJCQkJCQkJCQ0KKwkJCQkJCQ0KKwkJCQkJCWlmIChtb2RlbCAhPSBudWxsKQ0KKwkJCQkJCXsNCisJCQkJCQkJZG9pdChtb2RlbCk7CQkJCQkJCQ0KKwkJCQkJCX0NCisJCQkJCQllbHNlDQorCQkJCQkJew0KKwkJCQkJCQkvLyBJbnRlcm5hbCBlcnJvcg0KKwkJCQkJCQlBY3RpdmF0b3IubG9nRXJyb3IoDQorCQkJCQkJCQkJIlNURU0gSW50ZXJuYWwgZXJyb3IgZGlzcGxheSBjb21tYW5kIGFwcGxpZWQgdG8gXCIiDQorCQkJCQkJCQkJCQkrIG9iai5nZXRDbGFzcygpLmdldE5hbWUoKSArICJcIiIsIG51bGwpOw0KKwkJCQkJCX0NCisJCQkJCX0NCisJCQkJCWVsc2UgaWYgKG9iaiBpbnN0YW5jZW9mIG9yZy5lY2xpcHNlLnN0ZW0udWkudmlld3MuZXhwbG9yZXIuSWRlbnRpZmlhYmxlVHJlZU5vZGUpDQorCQkJCQl7DQorCQkJCQkJDQorCQkJCQkJb3JnLmVjbGlwc2Uuc3RlbS51aS52aWV3cy5leHBsb3Jlci5JZGVudGlmaWFibGVUcmVlTm9kZSBpZFRyZWVOb2RlID0gCQkJCQ0KKwkJCQkJCShvcmcuZWNsaXBzZS5zdGVtLnVpLnZpZXdzLmV4cGxvcmVyLklkZW50aWZpYWJsZVRyZWVOb2RlKSBQbGF0Zm9ybS4NCisJCQkJCQlnZXRBZGFwdGVyTWFuYWdlcigpLmdldEFkYXB0ZXIoDQorCQkJCQkJCQlvYmosIG9yZy5lY2xpcHNlLnN0ZW0udWkudmlld3MuZXhwbG9yZXIuSWRlbnRpZmlhYmxlVHJlZU5vZGUuY2xhc3MpOw0KKwkJCQkJDQorCQkJCQkNCisJCQkJCQkvLyBXZXJlIHdlIHN1Y2Nlc3NmdWwgaW4gYWRhcHRpbmc/DQorCQkJCQkJaWYgKGlkVHJlZU5vZGUgIT0gbnVsbCkgew0KKwkJCQkJCQkvLyBZZXMNCisJCQkJCQkJZG9pdChpZFRyZWVOb2RlKTsNCisJCQkJCQl9IC8vIGlmDQorCQkJCQkJZWxzZSB7DQorCQkJCQkJCS8vIEludGVybmFsIGVycm9yDQorCQkJCQkJCUFjdGl2YXRvci5sb2dFcnJvcigNCisJCQkJCQkJCQkiU1RFTSBJbnRlcm5hbCBlcnJvciBkaXNwbGF5IGNvbW1hbmQgYXBwbGllZCB0byBcIiINCisJCQkJCQkJCQkJCSsgb2JqLmdldENsYXNzKCkuZ2V0TmFtZSgpICsgIlwiIiwgbnVsbCk7DQorCQkJCQkJfQ0KKwkJCQkJfQ0KKwkJCQkJDQorCQkJCX0gLy8gZm9yIGVhY2ggc2VsZWN0aW9uDQorCQkJCQ0KKwkJCQkNCisJCQl9IC8vIGlmIFN0cnVjdHVyZWRTZWxlY3Rpb24NCisJDQorCQkJcmV0dXJuIG51bGw7DQorCQl9DQorCQkNCisJCQ0KKwkJDQorCQlwcm90ZWN0ZWQgdm9pZCBkb2l0KG9yZy5lY2xpcHNlLnN0ZW0udWkudmlld3MuZXhwbG9yZXIuSWRlbnRpZmlhYmxlVHJlZU5vZGUgaWRUcmVlTm9kZSkgDQorCQl7IA0KKwkJCQ0KKwkJCUxpc3Q8R3JhcGg+IGdyYXBoTGlzdCA9IG5ldyBBcnJheUxpc3Q8R3JhcGg+KCk7CQkJCQkJCQkJCQkJCQkJCQ0KKwkJCWlmIChwcm9qZWN0ID09IG51bGwpIHByb2plY3QgPSBpZFRyZWVOb2RlLmdldFByb2plY3QoKTsNCisJCQkJCQ0KKwkJCUlDb250YWluZXIgZ3JhcGhzRm9sZGVyID0gcHJvamVjdC5nZXRGb2xkZXIoIm1vZGVscyIpOyAvL2JlZm9yZTogZ3JhcGhzDQorCQkJSVJlc291cmNlW10gZ3JhcGhzID0gbnVsbDsNCisJCQl0cnkgew0KKwkJCQlncmFwaHMgPSBncmFwaHNGb2xkZXIubWVtYmVycygpOw0KKwkJCX0gY2F0Y2goRXhjZXB0aW9uIGUpIHsNCisJCQkJZS5wcmludFN0YWNrVHJhY2UoKTsNCisJCQl9DQorCQkJaWYgKGdyYXBocyAhPSBudWxsKSB7DQorCQkJCWZvcihJUmVzb3VyY2UgcjpncmFwaHMpIHsNCisJCQkJCS8vIGlnbm9yZSBzeXN0ZW0gZmlsZXMNCisJCQkJCWlmKHIuZ2V0TmFtZSgpLnN0YXJ0c1dpdGgoIi4iKSkgY29udGludWU7DQorDQorCQkJCQl0cnkgew0KKwkJCQkJCQ0KKwkJCQkJCVVSSSB1cmkgPSBVUkkuY3JlYXRlVVJJKHIuZ2V0TG9jYXRpb25VUkkoKS50b1N0cmluZygpKTsNCisJCQkJCQlJZGVudGlmaWFibGUgaWQgPSBVdGlsaXR5LmdldElkZW50aWZpYWJsZSh1cmkpOwkJCQkNCisJCQkJCQlpZiAoaWQgaW5zdGFuY2VvZiBNb2RlbCkNCisJCQkJCQl7CQ0KKwkJCQkJCQlncmFwaExpc3QgPSBnZXRHcmFwaHMoZ3JhcGhMaXN0LCAoTW9kZWwpaWQpOw0KKwkJCQkJCQkNCisJCQkJCQl9DQorCQkJCQkJZWxzZSBpZiAoaWQgaW5zdGFuY2VvZiBHcmFwaCkgZ3JhcGhMaXN0LmFkZCgoR3JhcGgpaWQpOw0KKwkJCQkJfSBjYXRjaChFeGNlcHRpb24gZSkgew0KKwkJCQkJCS8vIFNraXAgYmFkIGZpbGUNCisJCQkJCX0NCisJCQkJfQ0KKwkJCX0NCisJCQkNCisJCQkvL2ZpbmFsIEdyYXBoIGNvcHlHcmFwaCA9IChHcmFwaCkgRWNvcmVVdGlsLmNvcHkoY2Fub25pY2FsR3JhcGgpOw0KKwkJCWlmIChncmFwaExpc3Quc2l6ZSgpICE9IDApIHsNCisJCQkJR3JhcGhDYW52YXMgZ3JhcGhDYW52YXMgPSBuZXcgR3JhcGhDYW52YXMoKTsJCQkNCisJCQkJZ3JhcGhDYW52YXMuZGlzcGxheShncmFwaExpc3QsIG51bGwsIHByb2plY3QpOw0KKwkJCX0NCisJCQkJCQkNCisJCQkNCisJCQkvL3VwZGF0ZSBhbGwgbW9kZWxzIGluIHRoZSBwcm9qZWN0IHRoYXQgdXNlZCB0aGlzIGdyYXBoDQorCQkJLy9UT0RPDQorCQkJICAgIAkJCQ0KKwkJfSAvL2VuZCBkb2l0IHdpdGggRXhwbG9yZXJUcmVlTGVhZg0KKwkJDQorCQkNCisJCQ0KKwkJDQorCQkNCisJCXByb3RlY3RlZCB2b2lkIGRvaXQoTW9kZWwgbW9kZWwpIA0KKwkJeyAJDQorCQkJTGlzdDxHcmFwaD4gZ3JhcGhMaXN0ID0gbmV3IEFycmF5TGlzdDxHcmFwaD4oKTsJDQorCQkJZ3JhcGhMaXN0ID0gZ2V0R3JhcGhzKGdyYXBoTGlzdCwgbW9kZWwpOw0KKwkJCQ0KKwkJCWlmIChwcm9qZWN0ID09IG51bGwpIC8vc2hvdWxkIG5vdCBoYXBwZW4uLi4NCisJCQl7DQorCQkJCUxpc3Q8SVByb2plY3Q+IHByb2plY3RzID0gb3JnLmVjbGlwc2Uuc3RlbS51aS5VdGlsaXR5LmdldFNURU1Qcm9qZWN0c0Zyb21Xb3Jrc3BhY2UoUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpKTsNCisJCQkJZm9yIChJUHJvamVjdCBzdGVtUHJvamVjdCA6IHByb2plY3RzKQ0KKwkJCQl7CQkNCisJCQkJCS8vU3lzdGVtLmVyci5wcmludGxuKCJwcm9qZWN0OiAiICsgcHJvamVjdC5nZXROYW1lKCkrICIgZ3JhcGg6IiArIHN0ZW1HcmFwaC5nZXRVUkkoKSk7DQorCQkJCQkvL1RPRE8gY29udGFpbiBpcyBub3QgZW5vdWdoLCBtdXN0IGJlIGlkZW50aWNhbCBzZWdtZW50IQ0KKwkJCQkJLy9ub3RlOiB3aGVuIHByb2plY3QgY2Fubm90IGJlIGZvdW5kLCBpdCBpcyBhIHJlZmVyZW5jZSB0byBTVEVNIHJlcG9zaXRvcnkNCisJCQkJCWlmIChtb2RlbC5nZXRVUkkoKS50b1N0cmluZygpLmNvbnRhaW5zKHN0ZW1Qcm9qZWN0LmdldE5hbWUoKSkgKQ0KKwkJCQkJew0KKwkJCQkJCXByb2plY3QgPSBzdGVtUHJvamVjdDsNCisJCQkJCX0NCisJCQkJfQkJDQorCQkJfQ0KKwkJCWlmIChncmFwaExpc3Quc2l6ZSgpICE9IDApIHsNCisJCQkJR3JhcGhDYW52YXMgZ3JhcGhDYW52YXMgPSBuZXcgR3JhcGhDYW52YXMoKTsNCisJCQkJZ3JhcGhDYW52YXMuZGlzcGxheShncmFwaExpc3QsIG51bGwsIHByb2plY3QsIG1vZGVsKTsNCisJCQkJDQorCQkJfQ0KKwkJfQ0KKwkJDQorCQkNCisJCQ0KKwkJDQorCQlwcm90ZWN0ZWQgTGlzdDxHcmFwaD4gZ2V0R3JhcGhzKExpc3Q8R3JhcGg+IHBhcmVudGdyYXBocywgTW9kZWwgcGFyZW50bW9kZWwpDQorCQl7DQorCQkJRUxpc3Q8TW9kZWw+IG1vZGVscyA9IHBhcmVudG1vZGVsLmdldE1vZGVscygpOw0KKwkJCUxpc3Q8R3JhcGg+IGdyYXBocyA9IG5ldyBBcnJheUxpc3Q8R3JhcGg+KCk7DQorCQkNCisJCQlmb3IgKE1vZGVsIG1vZGVsIDogbW9kZWxzKQ0KKwkJCXsJDQorCQkJCWdyYXBocy5hZGRBbGwoZ2V0R3JhcGhzKGdyYXBocywgbW9kZWwpKTsNCisJCQl9DQorCQkJDQorCQkJZm9yIChHcmFwaCBncmFwaCA6IGdyYXBocykNCisJCQl7DQorCQkJCWlmICghcGFyZW50Z3JhcGhzLmNvbnRhaW5zKGdyYXBoKSkNCisJCQkJew0KKwkJCQkJcGFyZW50Z3JhcGhzLmFkZChncmFwaCk7DQorCQkJCX0NCisJCQl9DQorCQkJZm9yIChHcmFwaCBncmFwaCA6IHBhcmVudG1vZGVsLmdldEdyYXBocygpKQ0KKwkJCXsNCisJCQkJaWYgKCFwYXJlbnRncmFwaHMuY29udGFpbnMoZ3JhcGgpKQ0KKwkJCQl7DQorCQkJCQlwYXJlbnRncmFwaHMuYWRkKGdyYXBoKTsNCisJCQkJfQ0KKwkJCX0NCisJCQkvL3BhcmVudGdyYXBocy5hZGRBbGwoZ3JhcGhzKTsNCisJCQkvL3BhcmVudGdyYXBocy5hZGRBbGwocGFyZW50bW9kZWwuZ2V0R3JhcGhzKCkpOw0KKwkJCXJldHVybiBwYXJlbnRncmFwaHM7DQorCQl9DQorCQkNCisJCQ0KKwkNCisJCQ0KKwl9DQorDQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLmdyYXBoZWRpdG9yL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL2dyYXBoZWRpdG9yL2hhbmRsZXJzL0dyYXBoRGlzcGxheS5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLmdyYXBoZWRpdG9yL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL2dyYXBoZWRpdG9yL2hhbmRsZXJzL0dyYXBoRGlzcGxheS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY2MTdlM2QKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkuZ3JhcGhlZGl0b3Ivc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvZ3JhcGhlZGl0b3IvaGFuZGxlcnMvR3JhcGhEaXNwbGF5LmphdmEKQEAgLTAsMCArMSwyMzEgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS51aS5ncmFwaGVkaXRvci5oYW5kbGVyczsNCisNCisNCitpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsNCitpbXBvcnQgamF2YS51dGlsLkxpc3Q7DQorDQoraW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUuY29tbWFuZHMuQWJzdHJhY3RIYW5kbGVyOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLmNvbW1hbmRzLkV4ZWN1dGlvbkV2ZW50Ow0KK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLmNvbW1hbmRzLkV4ZWN1dGlvbkV4Y2VwdGlvbjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5jb21tYW5kcy5JSGFuZGxlcjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3Q7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLlJlc291cmNlc1BsdWdpbjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBsYXRmb3JtOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuRUxpc3Q7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkRlbGVnYXRpbmdXcmFwcGVySXRlbVByb3ZpZGVyOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb247DQoraW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuU3RydWN0dXJlZFNlbGVjdGlvbjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5UcmVlUGF0aDsNCitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5UcmVlU2VsZWN0aW9uOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmFkYXB0ZXJzLmZpbGUuRmlsZTsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5JZGVudGlmaWFibGU7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5HcmFwaDsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmltcGwuR3JhcGhJbXBsOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuTW9kZWw7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udWkuQWN0aXZhdG9yOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnVpLmdyYXBoZWRpdG9yLkdyYXBoQ2FudmFzOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnVpLnZpZXdzLmV4cGxvcmVyLklkZW50aWZpYWJsZVRyZWVOb2RlOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5oYW5kbGVycy5IYW5kbGVyVXRpbDsNCisNCisNCitwdWJsaWMgY2xhc3MgR3JhcGhEaXNwbGF5IGV4dGVuZHMgQWJzdHJhY3RIYW5kbGVyDQoraW1wbGVtZW50cyBJSGFuZGxlciB7DQorCQ0KKwlJUHJvamVjdCBwcm9qZWN0Ow0KKwkNCisJDQorDQorCXB1YmxpYyBPYmplY3QgZXhlY3V0ZShmaW5hbCBFeGVjdXRpb25FdmVudCBleGVjdXRpb25FdmVudCkNCisJdGhyb3dzIEV4ZWN1dGlvbkV4Y2VwdGlvbiB7DQorCQkNCisJCWZpbmFsIElTZWxlY3Rpb24gc2VsZWN0aW9uID0gSGFuZGxlclV0aWwNCisJCS5nZXRDdXJyZW50U2VsZWN0aW9uQ2hlY2tlZChleGVjdXRpb25FdmVudCk7DQorCQkNCisJCQ0KKwkJaWYoc2VsZWN0aW9uIGluc3RhbmNlb2YgVHJlZVNlbGVjdGlvbikgew0KKwkJCVRyZWVTZWxlY3Rpb24gdHMgPSAoVHJlZVNlbGVjdGlvbilzZWxlY3Rpb247DQorCQkJVHJlZVBhdGhbXSBwYXRocyA9ICB0cy5nZXRQYXRocygpOw0KKwkJCWlmKHBhdGhzLmxlbmd0aCA+IDApIHsNCisJCQkJVHJlZVBhdGggcGFyZW50ID0gcGF0aHNbMF0uZ2V0UGFyZW50UGF0aCgpOw0KKwkJCQlPYmplY3QgcHJvamVjdFNlZ21lbnQgPSBwYXJlbnQuZ2V0Rmlyc3RTZWdtZW50KCk7DQorCQkJCQ0KKwkJCQkvL09iamVjdCBwYXJlbnRTZWcgPSBwYXJlbnQuZ2V0TGFzdFNlZ21lbnQoKTsNCisJCQkJaWYocHJvamVjdFNlZ21lbnQgIT0gbnVsbCkgew0KKwkJCQkJcHJvamVjdCA9IG51bGw7CQkJCQkNCisJCQkJCWlmKHByb2plY3RTZWdtZW50IGluc3RhbmNlb2YgSWRlbnRpZmlhYmxlVHJlZU5vZGUpICANCisJCQkJCQlwcm9qZWN0ID0oKElkZW50aWZpYWJsZVRyZWVOb2RlKXByb2plY3RTZWdtZW50KS5nZXRQcm9qZWN0KCk7CQkJCQkgDQorCQkJCQlpZihwcm9qZWN0U2VnbWVudCBpbnN0YW5jZW9mIElQcm9qZWN0KSANCisJCQkJCQlwcm9qZWN0ID0gKElQcm9qZWN0KXByb2plY3RTZWdtZW50Ow0KKwkJCQkJDQorCQkJCX0NCisJCQl9DQorCQl9DQorCQ0KKwkJLy8gU3RydWN0dXJlZCBTZWxlY3Rpb24/DQorCQlpZiAoc2VsZWN0aW9uIGluc3RhbmNlb2YgU3RydWN0dXJlZFNlbGVjdGlvbikgDQorCQl7DQorCQkJSWRlbnRpZmlhYmxlIHJldFZhbHVlID0gbnVsbDsNCisJCQkvLyBZZXMNCisJCQkvLyBJdGVyYXRlIHRocm91Z2ggZXZlcnl0aGluZyB0aGF0J3MgaW4gdGhlIHNlbGVjdGlvbiBhbmQgcHV0IGVhY2gNCisJCQkvLyBvYmplY3QgaW50byB0aGUgYXBwcm9wcmlhdGUgY29sbGVjdGlvbi4NCisJCQlmb3IgKGZpbmFsIE9iamVjdCBvYmogOiAoKFN0cnVjdHVyZWRTZWxlY3Rpb24pIHNlbGVjdGlvbikudG9MaXN0KCkpIHsNCisJCQkJLy8gSUV4ZWN1dGFibGUgZXhlY3V0YWJsZSA9IChJRXhlY3V0YWJsZSkgRXhlY3V0YWJsZUFkYXB0ZXJGYWN0b3J5LklOU1RBTkNFDQorCQkJCS8vIC5hZGFwdChvYmosIElFeGVjdXRhYmxlLmNsYXNzKQ0KKwkJCQlpZiAob2JqIGluc3RhbmNlb2YgR3JhcGhJbXBsKQ0KKwkJCQl7DQorCQkJCQlyZXRWYWx1ZSA9IChHcmFwaEltcGwpIG9iajsNCisJCQkJfQ0KKwkJCQllbHNlDQorCQkJCXsNCisJCQkJCURlbGVnYXRpbmdXcmFwcGVySXRlbVByb3ZpZGVyIGRXSVAgPSAoRGVsZWdhdGluZ1dyYXBwZXJJdGVtUHJvdmlkZXIpIG9iajsJCQkNCisJCQkJCQ0KKwkJCQkJaWYgKGRXSVAuZ2V0VmFsdWUoKSBpbnN0YW5jZW9mIElkZW50aWZpYWJsZSkgew0KKwkJCQkJCS8vIFllcw0KKwkJCQkJCXJldFZhbHVlID0gKElkZW50aWZpYWJsZSkgZFdJUC5nZXRWYWx1ZSgpOw0KKwkJCQkJfSAvLyBpZiBJZGVudGlmaWFibGUNCisJCQkJCWVsc2Ugew0KKwkJCQkJCS8vIE5vDQorCQkJCQkJLy8gS2VlcCBhZGFwdGluZy4uLg0KKwkJCQkJCXJldFZhbHVlID0gKElkZW50aWZpYWJsZSkgUGxhdGZvcm0uZ2V0QWRhcHRlck1hbmFnZXIoKQ0KKwkJCQkJCQkJLmdldEFkYXB0ZXIoZFdJUC5nZXRWYWx1ZSgpLCBJZGVudGlmaWFibGUuY2xhc3MpOw0KKwkJCQkJfQ0KKwkJCQl9DQorCQkJCQ0KKwkJCQkNCisJCQkJRmlsZSBmaWxlID0gKEZpbGUpIFBsYXRmb3JtDQorCQkJCS5nZXRBZGFwdGVyTWFuYWdlcigpLmdldEFkYXB0ZXIocmV0VmFsdWUsIEZpbGUuY2xhc3MpOyAJCQ0KKwkJCQkNCisJCQkJR3JhcGggc3RlbUdyYXBoID0gKEdyYXBoKSBQbGF0Zm9ybQ0KKwkJCQkuZ2V0QWRhcHRlck1hbmFnZXIoKS5nZXRBZGFwdGVyKHJldFZhbHVlLCBHcmFwaC5jbGFzcyk7DQorCQkJCQ0KKwkJCQkvL0ZpbGUgZmlsZSA9IChGaWxlKSBQbGF0Zm9ybQ0KKwkJCQkvLy5nZXRBZGFwdGVyTWFuYWdlcigpLmdldEFkYXB0ZXIob2JqLCBGaWxlLmNsYXNzKTsgDQorCQkJCQ0KKwkJCQkvL0dyYXBoIHN0ZW1HcmFwaCA9IChHcmFwaCkgUGxhdGZvcm0NCisJCQkJLy8uZ2V0QWRhcHRlck1hbmFnZXIoKS5nZXRBZGFwdGVyKG9iaiwgR3JhcGguY2xhc3MpOw0KKwkJDQorCQkJCS8vIFdlcmUgd2Ugc3VjY2Vzc2Z1bCBpbiBhZGFwdGluZz8NCisJCQkJaWYgKHN0ZW1HcmFwaCA9PSBudWxsKSB7DQorCQkJCQkvL05vOiBJbnRlcm5hbCBlcnJvcg0KKwkJCQkJQWN0aXZhdG9yLmxvZ0Vycm9yKA0KKwkJCQkJCQkiU1RFTSBJbnRlcm5hbCBlcnJvciBkaXNwbGF5IGNvbW1hbmQgYXBwbGllZCB0byBcIiINCisJCQkJCQkJCQkrIG9iai5nZXRDbGFzcygpLmdldE5hbWUoKSArICJcIiIsIG51bGwpOw0KKwkJCQl9IC8vIFllcywgc3VjY2Vzc2Z1bGx5IGFkYXB0ZWQgR3JhcGgNCisJCQkJZWxzZSANCisJCQkJCXsNCisJCQkJCWlmIChwcm9qZWN0ID09IG51bGwpewkNCisJCQkJCQlMaXN0PElQcm9qZWN0PiBwcm9qZWN0cyA9IG9yZy5lY2xpcHNlLnN0ZW0udWkuVXRpbGl0eS5nZXRTVEVNUHJvamVjdHNGcm9tV29ya3NwYWNlKFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKSk7DQorCQkJCQkJZm9yIChJUHJvamVjdCBzdGVtUHJvamVjdCA6IHByb2plY3RzKQ0KKwkJCQkJCXsJCQ0KKwkJCQkJCQkvL1N5c3RlbS5lcnIucHJpbnRsbigicHJvamVjdDogIiArIHByb2plY3QuZ2V0TmFtZSgpKyAiIGdyYXBoOiIgKyBzdGVtR3JhcGguZ2V0VVJJKCkpOw0KKwkJCQkJCQkvL1RPRE8gY29udGFpbiBpcyBub3QgZW5vdWdoLCBtdXN0IGJlIGlkZW50aWNhbCBzZWdtZW50IQ0KKwkJCQkJCQlpZiAoc3RlbUdyYXBoLmdldFVSSSgpLnRvU3RyaW5nKCkuY29udGFpbnMoc3RlbVByb2plY3QuZ2V0TmFtZSgpKSApDQorCQkJCQkJCXsNCisJCQkJCQkJCXByb2plY3QgPSBzdGVtUHJvamVjdDsNCisJCQkJCQkJfQ0KKwkJCQkJCX0JDQorCQkJCQl9DQorCQkJCQkNCisJCQkJCS8vc3RhcnQgRGlzcGxheQ0KKwkJCQkJZG9pdChzdGVtR3JhcGgsIGZpbGUsIHByb2plY3QpOwkJCQkJCQkJCQkJCQ0KKwkJCQkJDQorCQkJCQkvL3VwZGF0ZSBncmFwaHMgaW4gYWxsIG1vZGVscyBvZiB0aGUgcHJvamVjdCANCisJCQkJCQ0KKwkJCQkJLyoNCisJCQkJCUlDb250YWluZXIgbW9kZWxGb2xkZXIgPSBudWxsOw0KKwkJCQkJSVJlc291cmNlW10gbW9kZWxzID0gbnVsbDsNCisJCQkJCQ0KKwkJCQkJdHJ5IHsNCisJCQkJCQlpZiAocHJvamVjdCAhPSBudWxsKSANCisJCQkJCQkJeyAJbW9kZWxGb2xkZXIgPSBwcm9qZWN0LmdldEZvbGRlcigibW9kZWxzIik7CQ0KKwkJCQkJCQkJbW9kZWxzID0gbW9kZWxGb2xkZXIubWVtYmVycygpOw0KKwkJCQkJCQl9DQorCQkJCQl9IGNhdGNoKEV4Y2VwdGlvbiBlKSB7DQorCQkJCQkJZS5wcmludFN0YWNrVHJhY2UoKTsNCisJCQkJCX0NCisJCQkJCQ0KKwkJCQkJDQorCQkJCQkNCisJCQkJCWlmIChtb2RlbHMgIT0gbnVsbCkgew0KKwkJCQkJCQ0KKwkJCQkJCWZvcihJUmVzb3VyY2Ugcjptb2RlbHMpIHsNCisJCQkJCQkJLy8gaWdub3JlIHN5c3RlbSBmaWxlcw0KKwkJCQkJCQlpZihyLmdldE5hbWUoKS5zdGFydHNXaXRoKCIuIikpIGNvbnRpbnVlOw0KKwkJCQkJCQkNCisJCQkJCQkJdHJ5IHsNCisJCQkJCQkJCVVSSSB1cmkgPSBVUkkuY3JlYXRlVVJJKHIuZ2V0TG9jYXRpb25VUkkoKS50b1N0cmluZygpKTsNCisJCQkJCQkJCUlkZW50aWZpYWJsZSBpZCA9IFV0aWxpdHkuZ2V0SWRlbnRpZmlhYmxlKHVyaSk7CQkJCQ0KKwkJCQkJCQkJaWYoaWQgaW5zdGFuY2VvZiBNb2RlbCkNCisJCQkJCQkJCXsgDQorCQkJCQkJCQkJTGlzdDxHcmFwaD4gbW9kZWxHcmFwaHMgPSBuZXcgQXJyYXlMaXN0PEdyYXBoPigpOw0KKwkJCQkJCQkJCU1vZGVsIG1vZGVsID0gKE1vZGVsKSBpZDsJCQkJCQkJDQorCQkJCQkJCQkJbW9kZWxHcmFwaHMgPSBnZXRHcmFwaHMobW9kZWxHcmFwaHMsIG1vZGVsKTsNCisJCQkJCQkJCQlmb3IgKEdyYXBoIG1vZGVsR3JhcGggOiBtb2RlbEdyYXBocykNCisJCQkJCQkJCQl7DQorCQkJCQkJCQkJCWlmIChtb2RlbEdyYXBoLmdldFVSSSgpLmxhc3RTZWdtZW50KCkuZXF1YWxzKHN0ZW1HcmFwaC5nZXRVUkkoKS5sYXN0U2VnbWVudCgpKSkNCisJCQkJCQkJCQkJewkJCQkJDQorCQkJCQkJCQkJCQltb2RlbEdyYXBoID0gc3RlbUdyYXBoOw0KKwkJCQkJCQkJCQl9DQorCQkJCQkJCQkJfQ0KKwkJCQkJCQkJCQ0KKwkJCQkJCQkJCQ0KKwkJCQkJCQkJfQ0KKw0KKwkJCQkJCQkJLy9HcmFwaCBnID0gKChNb2RlbClpZCkuZ2V0Q2Fub25pY2FsR3JhcGgoU1RFTVVSSS5jcmVhdGVVUkkoIiIpLCBudWxsLCBudWxsKTsNCisJCQkJCQkJCS8vaWYoaWQgaW5zdGFuY2VvZiBNb2RlbCkgbGF0bG9uZ3MucHV0QWxsKGdldEdyYXBoU3BhY2lhbHMoZywgbG9jYXRpb24pKTsNCisJCQkJCQkJCQkNCisJCQkJCQkJfQ0KKwkJCQkJCQkvLyBTa2lwIGJhZCBmaWxlDQorCQkJCQkJCWNhdGNoKEV4Y2VwdGlvbiBlKSB7IGUucHJpbnRTdGFja1RyYWNlKCk7IH0JCQkJCQkJCQkJCQkJCQkNCisJCQkJCQl9IC8vIG1vZGVscyBpdGVyYXRvcg0KKwkJCQkJfSAvLyBtb2RlbHMgIT0gbnVsbCwgZW5kIHVwZGF0aW5nIGdyYXBocw0KKwkJCQkJKi8NCisJCQkJCQ0KKwkJCQl9IC8vIEdyYXBoIHN1Y2Nlc3NmdWxseSBhZGFwdGVkLCAiZG9pdCIgY2FsbGVkLCBwcm9qZWN0IG1vZGVscyB1cGRhdGVkDQorCQkJCQ0KKwkJCX0gLy8gZm9yIGVhY2ggc2VsZWN0aW9uDQorCQkJDQorCQkJDQorCQl9IC8vIGlmIFN0cnVjdHVyZWRTZWxlY3Rpb24gDQorCQkJCQkNCisJCXJldHVybiBudWxsOw0KKwl9DQorCQ0KKwkNCisJDQorCXByb3RlY3RlZCB2b2lkIGRvaXQoR3JhcGggc3RlbUdyYXBoLCBGaWxlIGZpbGUsIElQcm9qZWN0IHByb2plY3QpIHsNCisJCQ0KKwkJaWYgKHN0ZW1HcmFwaCAhPSBudWxsKQ0KKwkJew0KKwkJCUdyYXBoQ2FudmFzIGdyYXBoQ2FudmFzID0gbmV3IEdyYXBoQ2FudmFzKCk7DQorCQkJTGlzdDxHcmFwaD4gZ3JhcGhMaXN0ID0gbmV3IEFycmF5TGlzdDxHcmFwaD4oKTsNCisJCQlncmFwaExpc3QuYWRkKHN0ZW1HcmFwaCk7DQorCQkJZ3JhcGhDYW52YXMuZGlzcGxheShncmFwaExpc3QsIGZpbGUsIHByb2plY3QpOwkNCisJCX0NCisNCisJCQ0KKwl9DQorCQ0KKwkNCisNCisJDQorCXByb3RlY3RlZCBMaXN0PEdyYXBoPiBnZXRHcmFwaHMoTGlzdDxHcmFwaD4gcGFyZW50Z3JhcGhzLCBNb2RlbCBwYXJlbnRtb2RlbCkNCisJew0KKwkJRUxpc3Q8TW9kZWw+IG1vZGVscyA9IHBhcmVudG1vZGVsLmdldE1vZGVscygpOw0KKwkJTGlzdDxHcmFwaD4gZ3JhcGhzID0gcGFyZW50bW9kZWwuZ2V0R3JhcGhzKCk7DQorCQ0KKwkJZm9yIChNb2RlbCBtb2RlbCA6IG1vZGVscykNCisJCXsJDQorCQkJZ3JhcGhzLmFkZEFsbChnZXRHcmFwaHMoZ3JhcGhzLCBtb2RlbCkpOw0KKwkJfQ0KKw0KKwkJcGFyZW50Z3JhcGhzLmFkZEFsbChncmFwaHMpOw0KKwkJcmV0dXJuIHBhcmVudGdyYXBoczsNCisJfQ0KKwkNCisJDQorDQorCQkJCQ0KK30NCisNCisNCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkuZ3JhcGhlZGl0b3Ivc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvZ3JhcGhlZGl0b3IvaGFuZGxlcnMvU2F2ZUluUHJvamVjdERpYWxvZy5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLmdyYXBoZWRpdG9yL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL2dyYXBoZWRpdG9yL2hhbmRsZXJzL1NhdmVJblByb2plY3REaWFsb2cuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MDQ2NDQwCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLmdyYXBoZWRpdG9yL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL2dyYXBoZWRpdG9yL2hhbmRsZXJzL1NhdmVJblByb2plY3REaWFsb2cuamF2YQpAQCAtMCwwICsxLDQ0MyBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnVpLmdyYXBoZWRpdG9yLmhhbmRsZXJzOw0KKw0KKw0KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorICogQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA5IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLg0KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMNCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjANCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdA0KKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sDQorICoNCisgKiBDb250cmlidXRvcnM6DQorICogICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIA0KKyAqICAgIEJvYiBGb3N0ZXIgPGJvYkBvYmpmYWMuY29tPg0KKyAqICAgICAtIEZpeCBmb3IgYnVnIDIzMDI1IC0gU2F2ZUFzRGlhbG9nIHNob3VsZCBub3QgYXNzdW1lIHdoYXQgaXMgYmVpbmcgc2F2ZWQgaXMgYW4gSUZpbGUNCisgKiAgICBCZW5qYW1pbiBNdXNrYWxsYSA8Yi5tdXNrYWxsYUBnbXgubmV0Pg0KKyAqICAgICAtIEZpeCBmb3IgYnVnIDgyNTQxIC0gW0RpYWxvZ3NdIFNhdmVBc0RpYWxvZyBzaG91bGQgYmV0dGVyIGhhbmRsZSBjbG9zZWQgcHJvamVjdHMNCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCisNCisNCitpbXBvcnQgamF2YS51dGlsLkxpc3Q7DQorDQoraW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklGaWxlOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdDsNCitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVJlc291cmNlOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5SZXNvdXJjZXNQbHVnaW47DQoraW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUGF0aDsNCitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBhdGg7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmRpYWxvZ3MuSURpYWxvZ0NvbnN0YW50czsNCitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuZGlhbG9ncy5JRGlhbG9nU2V0dGluZ3M7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmRpYWxvZ3MuTWVzc2FnZURpYWxvZzsNCitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuZGlhbG9ncy5UaXRsZUFyZWFEaWFsb2c7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnJlc291cmNlLkltYWdlRGVzY3JpcHRvcjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTdHJ1Y3R1cmVkU2VsZWN0aW9uOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5vc2dpLnV0aWwuTkxTOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5vc2dpLnV0aWwuVGV4dFByb2Nlc3NvcjsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5JZGVudGlmaWFibGU7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udWkuQWN0aXZhdG9yOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnVpLlV0aWxpdHk7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udWkudmlld3MuZXhwbG9yZXIuSWRlbnRpZmlhYmxlVHJlZU5vZGU7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5TV1Q7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ncmFwaGljcy5JbWFnZTsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5HcmlkRGF0YTsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5HcmlkTGF5b3V0Ow0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5CdXR0b247DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbWJvOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGU7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbnRyb2w7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkV2ZW50Ow0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5MYWJlbDsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuTGlzdGVuZXI7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlNoZWxsOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5UZXh0Ow0KK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5QbGF0Zm9ybVVJOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5pZGUuSURFSW50ZXJuYWxXb3JrYmVuY2hJbWFnZXM7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLmlkZS5JREVXb3JrYmVuY2hNZXNzYWdlczsNCitpbXBvcnQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuaWRlLklERVdvcmtiZW5jaFBsdWdpbjsNCitpbXBvcnQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuaWRlLklJREVIZWxwQ29udGV4dElkczsNCisNCisvKioNCisgKiBBIHN0YW5kYXJkICJTYXZlIEFzIiBkaWFsb2cgd2hpY2ggc29saWNpdHMgYSBwYXRoIGZyb20gdGhlIHVzZXIuIFRoZQ0KKyAqIDxjb2RlPmdldFJlc3VsdDwvY29kZT4gbWV0aG9kIHJldHVybnMgdGhlIHBhdGguIE5vdGUgdGhhdCB0aGUgZm9sZGVyDQorICogYXQgdGhlIHNwZWNpZmllZCBwYXRoIG1pZ2h0IG5vdCBleGlzdCBhbmQgbWlnaHQgbmVlZCB0byBiZSBjcmVhdGVkLg0KKyAqIDxwPg0KKyAqIFRoaXMgY2xhc3MgbWF5IGJlIGluc3RhbnRpYXRlZDsgaXQgaXMgbm90IGludGVuZGVkIHRvIGJlIHN1YmNsYXNzZWQuDQorICogPC9wPg0KKyAqDQorICogQHNlZSBvcmcuZWNsaXBzZS51aS5kaWFsb2dzLkNvbnRhaW5lckdlbmVyYXRvcg0KKyAqIEBub2V4dGVuZCBUaGlzIGNsYXNzIGlzIG5vdCBpbnRlbmRlZCB0byBiZSBzdWJjbGFzc2VkIGJ5IGNsaWVudHMuDQorICovDQorcHVibGljIGNsYXNzIFNhdmVJblByb2plY3REaWFsb2cgZXh0ZW5kcyBUaXRsZUFyZWFEaWFsb2cgew0KKwkNCisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIERJQUxPR19TRVRUSU5HU19TRUNUSU9OID0gIlNhdmVBc0RpYWxvZ1NldHRpbmdzIjsgLy8kTk9OLU5MUy0xJA0KKwkNCisJcHJpdmF0ZSBJRmlsZSBvcmlnaW5hbEZpbGUgPSBudWxsOw0KKw0KKyAgICBwcml2YXRlIFN0cmluZyBvcmlnaW5hbE5hbWUgPSBudWxsOw0KKw0KKyAgICBwcml2YXRlIElQYXRoIHJlc3VsdDsNCisNCisgICAgLy8gd2lkZ2V0cw0KKyAgICAvL3ByaXZhdGUgUmVzb3VyY2VBbmRDb250YWluZXJHcm91cCByZXNvdXJjZUdyb3VwOw0KKyAgICBwcml2YXRlIFRleHQgcmVzb3VyY2VOYW1lRmllbGQ7DQorICAgIHByaXZhdGUgQnV0dG9uIG9rQnV0dG9uOw0KKyAgICBwcml2YXRlIENvbWJvIHByb2plY3RDb21ibzsNCisNCisgICAgLyoqDQorICAgICAqIEltYWdlIGZvciB0aXRsZSBhcmVhDQorICAgICAqLw0KKyAgICBwcml2YXRlIEltYWdlIGRsZ1RpdGxlSW1hZ2UgPSBudWxsOw0KKw0KKyAgICAvKioNCisgICAgICogQ3JlYXRlcyBhIG5ldyBTYXZlIEFzIGRpYWxvZyBmb3Igbm8gc3BlY2lmaWMgZmlsZS4NCisgICAgICoNCisgICAgICogQHBhcmFtIHBhcmVudFNoZWxsIHRoZSBwYXJlbnQgc2hlbGwNCisgICAgICovDQorICAgIHB1YmxpYyBTYXZlSW5Qcm9qZWN0RGlhbG9nKFNoZWxsIHBhcmVudFNoZWxsKSB7DQorICAgICAgICBzdXBlcihwYXJlbnRTaGVsbCk7DQorICAgICAgICBzZXRTaGVsbFN0eWxlKGdldFNoZWxsU3R5bGUoKSB8IFNXVC5TSEVFVCk7DQorICAgIH0NCisNCisgICAgLyogKG5vbi1KYXZhZG9jKQ0KKyAgICAgKiBNZXRob2QgZGVjbGFyZWQgaW4gV2luZG93Lg0KKyAgICAgKi8NCisgICAgcHJvdGVjdGVkIHZvaWQgY29uZmlndXJlU2hlbGwoU2hlbGwgc2hlbGwpIHsNCisgICAgICAgIHN1cGVyLmNvbmZpZ3VyZVNoZWxsKHNoZWxsKTsNCisgICAgICAgIHNoZWxsLnNldFRleHQoSURFV29ya2JlbmNoTWVzc2FnZXMuU2F2ZUFzRGlhbG9nX3RleHQpOw0KKyAgICAgICAgUGxhdGZvcm1VSS5nZXRXb3JrYmVuY2goKS5nZXRIZWxwU3lzdGVtKCkuc2V0SGVscChzaGVsbCwNCisJCQkJSUlERUhlbHBDb250ZXh0SWRzLlNBVkVfQVNfRElBTE9HKTsNCisgICAgfQ0KKw0KKyAgICAvKiAobm9uLUphdmFkb2MpDQorICAgICAqIE1ldGhvZCBkZWNsYXJlZCBpbiBXaW5kb3cuDQorICAgICAqLw0KKyAgICBwcm90ZWN0ZWQgQ29udHJvbCBjcmVhdGVDb250ZW50cyhDb21wb3NpdGUgcGFyZW50KSB7DQorDQorICAgICAgICBDb250cm9sIGNvbnRlbnRzID0gc3VwZXIuY3JlYXRlQ29udGVudHMocGFyZW50KTsgICAgIA0KKyAgICAgICAgdmFsaWRhdGVQYWdlKCk7DQorICAgICAgICAvL0pGVyByZXNvdXJjZUdyb3VwLnNldEZvY3VzKCk7DQorICAgICAgICBzZXRUaXRsZShJREVXb3JrYmVuY2hNZXNzYWdlcy5TYXZlQXNEaWFsb2dfdGl0bGUpOw0KKyAgICAgICAgSW1hZ2VEZXNjcmlwdG9yIGRlc2NyaXB0b3IgPSBJREVJbnRlcm5hbFdvcmtiZW5jaEltYWdlcy5nZXRJbWFnZURlc2NyaXB0b3IoDQorICAgICAgICAgICAgICAgIElERUludGVybmFsV29ya2JlbmNoSW1hZ2VzLklNR19ETEdCQU5fU0FWRUFTX0RMRyk7DQorICAgICAgICBpZihkZXNjcmlwdG9yICE9IG51bGwpIHsNCisgICAgICAgIAlkbGdUaXRsZUltYWdlID0gZGVzY3JpcHRvci5jcmVhdGVJbWFnZSgpOw0KKyAgICAgICAgCXNldFRpdGxlSW1hZ2UoZGxnVGl0bGVJbWFnZSk7DQorICAgICAgICB9DQorICAgICAgICBzZXRNZXNzYWdlKElERVdvcmtiZW5jaE1lc3NhZ2VzLlNhdmVBc0RpYWxvZ19tZXNzYWdlKTsNCisNCisgICAgICAgIHJldHVybiBjb250ZW50czsNCisgICAgfQ0KKw0KKyAgICAvKiogDQorICAgICAqIFRoZSA8Y29kZT5TYXZlQXNEaWFsb2c8L2NvZGU+IGltcGxlbWVudGF0aW9uIG9mIHRoaXMgPGNvZGU+V2luZG93PC9jb2RlPg0KKyAgICAgKiBtZXRob2QgZGlzcG9zZXMgb2YgdGhlIGJhbm5lciBpbWFnZSB3aGVuIHRoZSBkaWFsb2cgaXMgY2xvc2VkLg0KKyAgICAgKi8NCisgICAgcHVibGljIGJvb2xlYW4gY2xvc2UoKSB7DQorICAgICAgICBpZiAoZGxnVGl0bGVJbWFnZSAhPSBudWxsKSB7DQorCQkJZGxnVGl0bGVJbWFnZS5kaXNwb3NlKCk7DQorCQl9DQorICAgICAgICByZXR1cm4gc3VwZXIuY2xvc2UoKTsNCisgICAgfQ0KKw0KKyAgICAvKiAobm9uLUphdmFkb2MpDQorICAgICAqIE1ldGhvZCBkZWNsYXJlZCBvbiBEaWFsb2cuDQorICAgICAqLw0KKyAgICBwcm90ZWN0ZWQgdm9pZCBjcmVhdGVCdXR0b25zRm9yQnV0dG9uQmFyKENvbXBvc2l0ZSBwYXJlbnQpIHsNCisgICAgICAgIG9rQnV0dG9uID0gY3JlYXRlQnV0dG9uKHBhcmVudCwgSURpYWxvZ0NvbnN0YW50cy5PS19JRCwNCisgICAgICAgICAgICAgICAgSURpYWxvZ0NvbnN0YW50cy5PS19MQUJFTCwgdHJ1ZSk7DQorICAgICAgICBva0J1dHRvbi5zZXRFbmFibGVkKHRydWUpOw0KKyAgICAgICAgY3JlYXRlQnV0dG9uKHBhcmVudCwgSURpYWxvZ0NvbnN0YW50cy5DQU5DRUxfSUQsDQorICAgICAgICAgICAgICAgIElEaWFsb2dDb25zdGFudHMuQ0FOQ0VMX0xBQkVMLCBmYWxzZSk7DQorICAgIH0NCisNCisgICAgLyogKG5vbi1KYXZhZG9jKQ0KKyAgICAgKiBNZXRob2QgZGVjbGFyZWQgb24gRGlhbG9nLg0KKyAgICAgKi8NCisgICAgcHJvdGVjdGVkIENvbnRyb2wgY3JlYXRlRGlhbG9nQXJlYShDb21wb3NpdGUgcGFyZW50KSB7DQorICAgICAgICAvLyB0b3AgbGV2ZWwgY29tcG9zaXRlDQorICAgICAgICBDb21wb3NpdGUgcGFyZW50Q29tcG9zaXRlID0gKENvbXBvc2l0ZSkgc3VwZXIuY3JlYXRlRGlhbG9nQXJlYShwYXJlbnQpOw0KKw0KKyAgICAgICAgLy8gY3JlYXRlIGEgY29tcG9zaXRlIHdpdGggc3RhbmRhcmQgbWFyZ2lucyBhbmQgc3BhY2luZw0KKyAgICAgICAgQ29tcG9zaXRlIGNvbXBvc2l0ZSA9IG5ldyBDb21wb3NpdGUocGFyZW50Q29tcG9zaXRlLCBTV1QuTk9ORSk7DQorICAgICAgICANCisgICAgICAgIEdyaWRMYXlvdXQgbGF5b3V0ID0gbmV3IEdyaWRMYXlvdXQoKTsNCisgICAgICAgIGxheW91dC5tYXJnaW5IZWlnaHQgPSBjb252ZXJ0VmVydGljYWxETFVzVG9QaXhlbHMoSURpYWxvZ0NvbnN0YW50cy5WRVJUSUNBTF9NQVJHSU4pOw0KKyAgICAgICAgbGF5b3V0Lm1hcmdpbldpZHRoID0gY29udmVydEhvcml6b250YWxETFVzVG9QaXhlbHMoSURpYWxvZ0NvbnN0YW50cy5IT1JJWk9OVEFMX01BUkdJTik7DQorICAgICAgICBsYXlvdXQudmVydGljYWxTcGFjaW5nID0gY29udmVydFZlcnRpY2FsRExVc1RvUGl4ZWxzKElEaWFsb2dDb25zdGFudHMuVkVSVElDQUxfU1BBQ0lORyk7DQorICAgICAgICBsYXlvdXQuaG9yaXpvbnRhbFNwYWNpbmcgPSBjb252ZXJ0SG9yaXpvbnRhbERMVXNUb1BpeGVscyhJRGlhbG9nQ29uc3RhbnRzLkhPUklaT05UQUxfU1BBQ0lORyk7DQorICAgICAgICBjb21wb3NpdGUuc2V0TGF5b3V0KGxheW91dCk7DQorICAgICAgICBjb21wb3NpdGUuc2V0TGF5b3V0RGF0YShuZXcgR3JpZERhdGEoR3JpZERhdGEuRklMTF9CT1RIKSk7DQorICAgICAgICBjb21wb3NpdGUuc2V0Rm9udChwYXJlbnRDb21wb3NpdGUuZ2V0Rm9udCgpKTsNCisgICAgICAgIA0KKyAgICAgICAgTGlzdGVuZXIgbGlzdGVuZXIgPSBuZXcgTGlzdGVuZXIoKSB7DQorICAgICAgICAgICAgcHVibGljIHZvaWQgaGFuZGxlRXZlbnQoRXZlbnQgZXZlbnQpIHsNCisgICAgICAgICAgICAgICAgc2V0RGlhbG9nQ29tcGxldGUodmFsaWRhdGVQYWdlKCkpOw0KKyAgICAgICAgICAgIH0NCisgICAgICAgIH07DQorICAgICAgICANCisJCUdyaWREYXRhIGRhdGEgPSBuZXcgR3JpZERhdGEoR3JpZERhdGEuSE9SSVpPTlRBTF9BTElHTl9GSUxMDQorCQkJCXwgR3JpZERhdGEuR1JBQl9IT1JJWk9OVEFMKTsNCisJCWRhdGEud2lkdGhIaW50ID0gMjUwOw0KKyAgICAgICAgDQorICAgICAgICBMYWJlbCBzZWxlY3RQcm9qZWN0ID0gbmV3IExhYmVsKGNvbXBvc2l0ZSwgU1dULk5vbmUpOw0KKyAgICAgICAgc2VsZWN0UHJvamVjdC5zZXRUZXh0KCJTZWxlY3QgUHJvamVjdCAiKTsNCisgICAgICAgIA0KKyAgICAgICAgcHJvamVjdENvbWJvID0gbmV3IENvbWJvKGNvbXBvc2l0ZSwgU1dULlJFQURfT05MWSk7DQorICAgICAgICBpbml0aWFsaXplUHJvamVjdENvbWJvKHByb2plY3RDb21ibyk7DQorICAgICAgICBwcm9qZWN0Q29tYm8uc2V0TGF5b3V0RGF0YShkYXRhKTsNCisgICAgICAgIA0KKyAgICAgICAgTGFiZWwgc2VwID0gbmV3IExhYmVsKGNvbXBvc2l0ZSwgU1dULk5PTkUpOw0KKyAgICAgICAgDQorICAgICAgICBMYWJlbCBmaWxlTGFiZWwgPSBuZXcgTGFiZWwoY29tcG9zaXRlLCBTV1QuTm9uZSk7DQorICAgICAgICBmaWxlTGFiZWwuc2V0VGV4dCgiTmFtZSBvZiBuZXcgR3JhcGggRmlsZSAiKTsNCisJCQkJDQorCQlyZXNvdXJjZU5hbWVGaWVsZCA9IG5ldyBUZXh0KGNvbXBvc2l0ZSwgU1dULkJPUkRFUik7DQorCQlyZXNvdXJjZU5hbWVGaWVsZC5zZXRMYXlvdXREYXRhKGRhdGEpOw0KKw0KKyAgICAgICAgDQorICAgICAgICAgDQorICAgICAgICByZXR1cm4gcGFyZW50Q29tcG9zaXRlOw0KKyAgICB9DQorDQorICAgIC8qKg0KKyAgICAgKiBSZXR1cm5zIHRoZSBmdWxsIHBhdGggZW50ZXJlZCBieSB0aGUgdXNlci4NCisgICAgICogPHA+DQorICAgICAqIE5vdGUgdGhhdCB0aGUgZmlsZSBhbmQgY29udGFpbmVyIG1pZ2h0IG5vdCBleGlzdCBhbmQgd291bGQgbmVlZCB0byBiZSBjcmVhdGVkLg0KKyAgICAgKiBTZWUgdGhlIDxjb2RlPklGaWxlLmNyZWF0ZTwvY29kZT4gbWV0aG9kIGFuZCB0aGUgDQorICAgICAqIDxjb2RlPkNvbnRhaW5lckdlbmVyYXRvcjwvY29kZT4gY2xhc3MuDQorICAgICAqIDwvcD4NCisgICAgICoNCisgICAgICogQHJldHVybiB0aGUgcGF0aCwgb3IgPGNvZGU+bnVsbDwvY29kZT4gaWYgQ2FuY2VsIHdhcyBwcmVzc2VkDQorICAgICAqLw0KKyAgICBwdWJsaWMgSVBhdGggZ2V0UmVzdWx0KCkgew0KKyAgICAgICAgcmV0dXJuIHJlc3VsdDsNCisgICAgfQ0KKw0KKyAgICAvKioNCisgICAgICogSW5pdGlhbGl6ZXMgdGhlIGNvbnRyb2xzIG9mIHRoaXMgZGlhbG9nLg0KKyAgICAgKi8NCisNCisNCisgICAgLyogKG5vbi1KYXZhZG9jKQ0KKyAgICAgKiBNZXRob2QgZGVjbGFyZWQgb24gRGlhbG9nLg0KKyAgICAgKi8NCisgICAgcHJvdGVjdGVkIHZvaWQgb2tQcmVzc2VkKCkgew0KKyAgICAgICAgLy8gR2V0IG5ldyBwYXRoLg0KKyAgICAgICAgSVByb2plY3QgcHJvID0gZ2V0U1RFTVByb2plY3RzKCkuZ2V0KHByb2plY3RDb21iby5nZXRTZWxlY3Rpb25JbmRleCgpKTsNCisgICAgICAgIFN0cmluZyBwcm9qZWN0UGF0aCA9IHByby5nZXRGdWxsUGF0aCgpLnRvUG9ydGFibGVTdHJpbmcoKTsNCisgICAgICAgIFN0cmluZyBmaWxlUGF0aCA9IHJlc291cmNlTmFtZUZpZWxkLmdldFRleHQoKTsNCisgICAgICAgIElQYXRoIHBhdGggPSANCisgICAgICAgIAluZXcgUGF0aChUZXh0UHJvY2Vzc29yLmRlcHJvY2Vzcyhwcm9qZWN0UGF0aCArICIvZ3JhcGhzLyIgKyBmaWxlUGF0aCkpLm1ha2VBYnNvbHV0ZSgpOw0KKyAgICAgICAgDQorICAgICAgICANCisgICAgICAgIC8vSWYgdGhlIHVzZXIgZG9lcyBub3Qgc3VwcGx5IGEgZmlsZSBleHRlbnNpb24gYW5kIGlmIHRoZSBzYXZlIA0KKyAgICAgICAgLy9hcyBkaWFsb2cgd2FzIHByb3ZpZGVkIGEgZGVmYXVsdCBmaWxlIG5hbWUgYXBwZW5kIHRoZSBleHRlbnNpb24gDQorICAgICAgICAvL29mIHRoZSBkZWZhdWx0IGZpbGVuYW1lIHRvIHRoZSBuZXcgbmFtZQ0KKyAgICAgICAgaWYgKHBhdGguZ2V0RmlsZUV4dGVuc2lvbigpID09IG51bGwpIHsgDQorICAgICAgICAJcGF0aCA9IHBhdGguYWRkRmlsZUV4dGVuc2lvbigiZ3JhcGgiKTsJCQkNCisgICAgICAgIH0NCisNCisgICAgICAgDQorICAgICAgICAvLyBJZiB0aGUgcGF0aCBhbHJlYWR5IGV4aXN0cyB0aGVuIGNvbmZpcm0gb3ZlcndyaXRlLg0KKyAgICAgICAgSUZpbGUgZmlsZSA9IFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5nZXRSb290KCkuZ2V0RmlsZShwYXRoKTsNCisgICAgICAgIGlmIChmaWxlLmV4aXN0cygpKSB7DQorICAgICAgICAgICAgU3RyaW5nW10gYnV0dG9ucyA9IG5ldyBTdHJpbmdbXSB7IElEaWFsb2dDb25zdGFudHMuWUVTX0xBQkVMLA0KKyAgICAgICAgICAgICAgICAgICAgSURpYWxvZ0NvbnN0YW50cy5OT19MQUJFTCwgSURpYWxvZ0NvbnN0YW50cy5DQU5DRUxfTEFCRUwgfTsNCisgICAgICAgICAgICBTdHJpbmcgcXVlc3Rpb24gPSBOTFMuYmluZCgNCisJCQkJCUlERVdvcmtiZW5jaE1lc3NhZ2VzLlNhdmVBc0RpYWxvZ19vdmVyd3JpdGVRdWVzdGlvbiwgcGF0aA0KKwkJCQkJCQkudG9TdHJpbmcoKSk7DQorCQkJTWVzc2FnZURpYWxvZyBkID0gbmV3IE1lc3NhZ2VEaWFsb2coZ2V0U2hlbGwoKSwNCisgICAgICAgICAgICAgICAgICAgIElERVdvcmtiZW5jaE1lc3NhZ2VzLlF1ZXN0aW9uLA0KKyAgICAgICAgICAgICAgICAgICAgbnVsbCwgcXVlc3Rpb24sIE1lc3NhZ2VEaWFsb2cuUVVFU1RJT04sIGJ1dHRvbnMsIDApIHsNCisJCQkJcHJvdGVjdGVkIGludCBnZXRTaGVsbFN0eWxlKCkgew0KKwkJCQkJcmV0dXJuIHN1cGVyLmdldFNoZWxsU3R5bGUoKSB8IFNXVC5TSEVFVDsNCisJCQkJfQ0KKwkJCX07DQorICAgICAgICAgICAgaW50IG92ZXJ3cml0ZSA9IGQub3BlbigpOw0KKyAgICAgICAgICAgIHN3aXRjaCAob3ZlcndyaXRlKSB7DQorICAgICAgICAgICAgY2FzZSAwOiAvLyBZZXMNCisgICAgICAgICAgICAgICAgYnJlYWs7DQorICAgICAgICAgICAgY2FzZSAxOiAvLyBObw0KKyAgICAgICAgICAgICAgICByZXR1cm47DQorICAgICAgICAgICAgY2FzZSAyOiAvLyBDYW5jZWwNCisgICAgICAgICAgICBkZWZhdWx0Og0KKyAgICAgICAgICAgICAgICBjYW5jZWxQcmVzc2VkKCk7DQorICAgICAgICAgICAgICAgIHJldHVybjsNCisgICAgICAgICAgICB9DQorICAgICAgICB9DQorDQorICAgICAgICAvLyBTdG9yZSBwYXRoIGFuZCBjbG9zZS4NCisgICAgICAgIHJlc3VsdCA9IHBhdGg7IA0KKyAgICAgICAgY2xvc2UoKTsNCisgICAgfQ0KKw0KKyAgICAvKioNCisgICAgICogU2V0cyB0aGUgY29tcGxldGlvbiBzdGF0ZSBvZiB0aGlzIGRpYWxvZyBhbmQgYWRqdXN0cyB0aGUgZW5hYmxlIHN0YXRlIG9mDQorICAgICAqIHRoZSBPayBidXR0b24gYWNjb3JkaW5nbHkuDQorICAgICAqDQorICAgICAqIEBwYXJhbSB2YWx1ZSA8Y29kZT50cnVlPC9jb2RlPiBpZiB0aGlzIGRpYWxvZyBpcyBjb21wZWxldGUsIGFuZA0KKyAgICAgKiAgPGNvZGU+ZmFsc2U8L2NvZGU+IG90aGVyd2lzZQ0KKyAgICAgKi8NCisgICAgcHJvdGVjdGVkIHZvaWQgc2V0RGlhbG9nQ29tcGxldGUoYm9vbGVhbiB2YWx1ZSkgew0KKyAgICAgICAgDQorICAgIH0NCisNCisgICAgLyoqDQorICAgICAqIFNldHMgdGhlIG9yaWdpbmFsIGZpbGUgdG8gdXNlLg0KKyAgICAgKg0KKyAgICAgKiBAcGFyYW0gb3JpZ2luYWxGaWxlIHRoZSBvcmlnaW5hbCBmaWxlDQorICAgICAqLw0KKyAgICBwdWJsaWMgdm9pZCBzZXRPcmlnaW5hbEZpbGUoSUZpbGUgb3JpZ2luYWxGaWxlKSB7DQorICAgICAgICB0aGlzLm9yaWdpbmFsRmlsZSA9IG9yaWdpbmFsRmlsZTsNCisgICAgfQ0KKw0KKyAgICAvKioNCisgICAgICogU2V0IHRoZSBvcmlnaW5hbCBmaWxlIG5hbWUgdG8gdXNlLg0KKyAgICAgKiBVc2VkIGluc3RlYWQgb2YgPGNvZGU+c2V0T3JpZ2luYWxGaWxlPC9jb2RlPg0KKyAgICAgKiB3aGVuIHRoZSBvcmlnaW5hbCByZXNvdXJjZSBpcyBub3QgYW4gSUZpbGUuDQorICAgICAqIE11c3QgYmUgY2FsbGVkIGJlZm9yZSA8Y29kZT5jcmVhdGU8L2NvZGU+Lg0KKyAgICAgKiBAcGFyYW0gb3JpZ2luYWxOYW1lIGRlZmF1bHQgZmlsZSBuYW1lDQorICAgICAqLw0KKyAgICBwdWJsaWMgdm9pZCBzZXRPcmlnaW5hbE5hbWUoU3RyaW5nIG9yaWdpbmFsTmFtZSkgew0KKyAgICAgICAgdGhpcy5vcmlnaW5hbE5hbWUgPSBvcmlnaW5hbE5hbWU7DQorICAgIH0NCisNCisgICAgLyoqDQorICAgICAqIFJldHVybnMgd2hldGhlciB0aGlzIHBhZ2UncyB2aXN1YWwgY29tcG9uZW50cyBhbGwgY29udGFpbiB2YWxpZCB2YWx1ZXMuDQorICAgICAqDQorICAgICAqIEByZXR1cm4gPGNvZGU+dHJ1ZTwvY29kZT4gaWYgdmFsaWQsIGFuZCA8Y29kZT5mYWxzZTwvY29kZT4gb3RoZXJ3aXNlDQorICAgICAqLw0KKyAgICBwcml2YXRlIGJvb2xlYW4gdmFsaWRhdGVQYWdlKCkgew0KKyAgICAgICAgLypKRlcgaWYgKCFyZXNvdXJjZUdyb3VwLmFyZUFsbFZhbHVlc1ZhbGlkKCkpIHsNCisgICAgICAgICAgICBpZiAoIXJlc291cmNlR3JvdXAuZ2V0UmVzb3VyY2UoKS5lcXVhbHMoIiIpKSB7IC8vJE5PTi1OTFMtMSQNCisJCQkJc2V0RXJyb3JNZXNzYWdlKHJlc291cmNlR3JvdXAuZ2V0UHJvYmxlbU1lc3NhZ2UoKSk7DQorCQkJfSBlbHNlIHsNCisgICAgICAgICAgICAJc2V0RXJyb3JNZXNzYWdlKG51bGwpOw0KKyAgICAgICAgICAgIH0NCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7DQorICAgICAgICB9DQorICAgICAgICANCisgICAgICAgIFN0cmluZyByZXNvdXJjZU5hbWUgPSByZXNvdXJjZUdyb3VwLmdldFJlc291cmNlKCk7DQorICAgICAgICBJV29ya3NwYWNlIHdvcmtzcGFjZSA9IFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKTsNCisgICAgICAgIA0KKyAgICAgICAgLy8gRG8gbm90IGFsbG93IGEgY2xvc2VkIHByb2plY3QgdG8gYmUgc2VsZWN0ZWQNCisgICAgICAgIElQYXRoIGZ1bGxQYXRoID0gcmVzb3VyY2VHcm91cC5nZXRDb250YWluZXJGdWxsUGF0aCgpOw0KKyAgICAgICAgaWYgKGZ1bGxQYXRoICE9IG51bGwpIHsNCisgICAgICAgIAlTdHJpbmcgcHJvamVjdE5hbWUgPSBmdWxsUGF0aC5zZWdtZW50KDApOw0KKwkgICAgICAgIElTdGF0dXMgaXNWYWxpZFByb2plY3ROYW1lID0gd29ya3NwYWNlLnZhbGlkYXRlTmFtZShwcm9qZWN0TmFtZSwgSVJlc291cmNlLlBST0pFQ1QpOw0KKwkgICAgICAgIGlmKGlzVmFsaWRQcm9qZWN0TmFtZS5pc09LKCkpIHsNCisJICAgICAgICAJSVByb2plY3QgcHJvamVjdCA9IHdvcmtzcGFjZS5nZXRSb290KCkuZ2V0UHJvamVjdChwcm9qZWN0TmFtZSk7DQorCSAgICAgICAgCWlmKCFwcm9qZWN0LmlzT3BlbigpKSB7DQorCSAgICAgICAgCQlzZXRFcnJvck1lc3NhZ2UoSURFV29ya2JlbmNoTWVzc2FnZXMuU2F2ZUFzRGlhbG9nX2Nsb3NlZFByb2plY3RNZXNzYWdlKTsNCisJICAgICAgICAJCXJldHVybiBmYWxzZTsNCisJICAgICAgICAJfQ0KKwkgICAgICAgIH0NCisgICAgICAgIH0NCisgICAgICAgIA0KKyAgICAgICAgSVN0YXR1cyByZXN1bHQgPSB3b3Jrc3BhY2UudmFsaWRhdGVOYW1lKHJlc291cmNlTmFtZSwgSVJlc291cmNlLkZJTEUpOw0KKyAgICAgICAgaWYgKCFyZXN1bHQuaXNPSygpKXsNCisgICAgICAgIAlzZXRFcnJvck1lc3NhZ2UocmVzdWx0LmdldE1lc3NhZ2UoKSk7DQorICAgICAgICAJcmV0dXJuIGZhbHNlOw0KKyAgICAgICAgfQ0KKyAgICAgICAgDQorICAgICAgICBzZXRFcnJvck1lc3NhZ2UobnVsbCk7DQorICAgICAgICBKRlcgRU5EKi8NCisgICAgICAgIHJldHVybiB0cnVlOw0KKyAgICB9DQorICAgIA0KKwkvKiAobm9uLUphdmFkb2MpDQorICAgICAqIEBzZWUgb3JnLmVjbGlwc2UuamZhY2Uud2luZG93LkRpYWxvZyNnZXREaWFsb2dCb3VuZHNTZXR0aW5ncygpDQorICAgICAqIA0KKyAgICAgKiBAc2luY2UgMy4yDQorICAgICAqLw0KKwlwcm90ZWN0ZWQgSURpYWxvZ1NldHRpbmdzIGdldERpYWxvZ0JvdW5kc1NldHRpbmdzKCkgew0KKyAgICAgICAgSURpYWxvZ1NldHRpbmdzIHNldHRpbmdzID0gSURFV29ya2JlbmNoUGx1Z2luLmdldERlZmF1bHQoKS5nZXREaWFsb2dTZXR0aW5ncygpOw0KKyAgICAgICAgSURpYWxvZ1NldHRpbmdzIHNlY3Rpb24gPSBzZXR0aW5ncy5nZXRTZWN0aW9uKERJQUxPR19TRVRUSU5HU19TRUNUSU9OKTsNCisgICAgICAgIGlmIChzZWN0aW9uID09IG51bGwpIHsNCisgICAgICAgICAgICBzZWN0aW9uID0gc2V0dGluZ3MuYWRkTmV3U2VjdGlvbihESUFMT0dfU0VUVElOR1NfU0VDVElPTik7DQorICAgICAgICB9IA0KKyAgICAgICAgcmV0dXJuIHNlY3Rpb247DQorCX0NCisJDQorICAgIC8qDQorICAgICAqIChub24tSmF2YWRvYykNCisgICAgICogQHNlZSBvcmcuZWNsaXBzZS5qZmFjZS5kaWFsb2dzLkRpYWxvZyNpc1Jlc2l6YWJsZSgpDQorICAgICAqLw0KKyAgICBwcm90ZWN0ZWQgYm9vbGVhbiBpc1Jlc2l6YWJsZSgpIHsNCisgICAgCXJldHVybiB0cnVlOw0KKyAgICB9DQorICAgIA0KKyAgICBwcml2YXRlIHZvaWQgaW5pdGlhbGl6ZVByb2plY3RDb21ibyhmaW5hbCBDb21ibyBwcm9qZWN0Q29tYm8pIHsNCisNCisJCUlQcm9qZWN0IHNlbGVjdGVkUHJvamVjdCA9IGdldFdvcmtTcGFjZVNlbGVjdGVkUHJvamVjdCgpOw0KKw0KKwkJaWYoc2VsZWN0ZWRQcm9qZWN0ID09IG51bGwpIHNlbGVjdGVkUHJvamVjdCA9IGdldFNURU1Qcm9qZWN0cygpLmdldCgwKTsNCisJCQ0KKwkJLy8gR2V0IHRoZSBQcm9qZWN0cyB0aGF0IGFyZSBTVEVNIHByb2plY3RzDQorCQlpbnQgaW5kZXggPSAwOw0KKwkJaW50IGkgPSAwOw0KKwkJZm9yIChmaW5hbCBJUHJvamVjdCBwcm9qZWN0IDogZ2V0U1RFTVByb2plY3RzKCkpIHsNCisJCQkvLyBJcyB0aGUgU1RFTSBwcm9qZWN0IHNlbGVjdGVkPw0KKwkJCWlmIChwcm9qZWN0LmVxdWFscyhzZWxlY3RlZFByb2plY3QpKSB7DQorCQkJCS8vIFllcw0KKwkJCQlpbmRleCA9IGk7DQorCQkJfQ0KKw0KKwkJCWZpbmFsIFN0cmluZyBwcm9qZWN0TmFtZSA9IHByb2plY3QuZ2V0TmFtZSgpOw0KKwkJCXByb2plY3RDb21iby5hZGQocHJvamVjdE5hbWUpOw0KKwkJCWkrKzsNCisJCX0gLy8gZm9yIGVhY2ggU1RFTSBwcm9qZWN0DQorCQlwcm9qZWN0Q29tYm8uc2V0Rm9jdXMoKTsNCisJCXByb2plY3RDb21iby5zZWxlY3QoaW5kZXgpOw0KKwkJLy9OZXdJZGVudGlmaWFibGVQYWdlLmxhc3RQcm9qZWN0ID0gdGhpcy5nZXRTZWxlY3RlZFByb2plY3QoKTsNCisJfSAvLyBpbml0aWFsaXplUHJvamVjdEZpZWxkDQorICAgIA0KKyAgICANCisgICAgDQorICAgIHByaXZhdGUgTGlzdDxJUHJvamVjdD4gZ2V0U1RFTVByb2plY3RzKCkgew0KKwkJLy8gUmVmcmVzaA0KKyAgICAJTGlzdDxJUHJvamVjdD4gc3RlbVByb2plY3RzID0gVXRpbGl0eS5nZXRTVEVNUHJvamVjdHNGcm9tV29ya3NwYWNlKCk7DQorCQlyZXR1cm4gc3RlbVByb2plY3RzOw0KKwl9IC8vIGdldFNURU1Qcm9qZWN0cw0KKyAgICANCisgICAgcHJpdmF0ZSBJUHJvamVjdCBnZXRXb3JrU3BhY2VTZWxlY3RlZFByb2plY3QoKSB7DQorCQlJUHJvamVjdCByZXRWYWx1ZSA9IG51bGw7DQorCQkvLyBGaW5kIHRoZSBuYW1lIG9mIHRoZSBjdXJyZW50bHkgc2VsZWN0ZWQgcHJvamVjdCwgaWYgdGhlcmUgaXMgb25lDQorCQlmaW5hbCBJU2VsZWN0aW9uIHNlbGVjdGlvbiA9IEFjdGl2YXRvci5nZXREZWZhdWx0KCkuZ2V0V29ya2JlbmNoKCkNCisJCQkJLmdldEFjdGl2ZVdvcmtiZW5jaFdpbmRvdygpLmdldFNlbGVjdGlvblNlcnZpY2UoKQ0KKwkJCQkuZ2V0U2VsZWN0aW9uKCk7DQorCQkvLyBTdHJ1Y3R1cmVkIFNlbGVjdGlvbiB0aGF0IG1pZ2h0IGhhdmUgYSBwcm9qZWN0Pw0KKwkJaWYgKHNlbGVjdGlvbiBpbnN0YW5jZW9mIElTdHJ1Y3R1cmVkU2VsZWN0aW9uKSB7DQorCQkJZm9yIChPYmplY3Qgb2JqIDogKChJU3RydWN0dXJlZFNlbGVjdGlvbikgc2VsZWN0aW9uKS50b0xpc3QoKSkgew0KKwkJCQkvLyBQcm9qZWN0Pw0KKwkJCQlpZiAob2JqIGluc3RhbmNlb2YgSVByb2plY3QpIHsNCisJCQkJCXJldFZhbHVlID0gKElQcm9qZWN0KSBvYmo7DQorCQkJCQlicmVhazsNCisJCQkJfQ0KKwkJCQkvLyBGaWxlIG9yIEZvbGRlcj8gKGluIGEgUHJvamVjdCkNCisJCQkJZWxzZSBpZiAob2JqIGluc3RhbmNlb2YgSVJlc291cmNlKSB7DQorCQkJCQkvLyBZZXMNCisJCQkJCXJldFZhbHVlID0gKChJUmVzb3VyY2UpIG9iaikuZ2V0UHJvamVjdCgpOw0KKwkJCQkJYnJlYWs7DQorCQkJCX0gLy8gZWxzZSBpZiBGaWxlIG9yIEZvbGRlcg0KKwkJCQkvLyBJZGVudGlmaWFibGU/DQorCQkJCWVsc2UgaWYgKG9iaiBpbnN0YW5jZW9mIElkZW50aWZpYWJsZSkgew0KKwkJCQkJZmluYWwgSVBhdGggcGF0aCA9IG5ldyBQYXRoKCgoSWRlbnRpZmlhYmxlKSBvYmopLmdldFVSSSgpDQorCQkJCQkJCS50b1BsYXRmb3JtU3RyaW5nKHRydWUpKTsNCisJCQkJCXJldFZhbHVlID0gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmdldFJvb3QoKQ0KKwkJCQkJCQkuZ2V0RmlsZShwYXRoKS5nZXRQcm9qZWN0KCk7DQorCQkJCQlicmVhazsNCisJCQkJfSAvLyBlbHNlIGlmIElkZW50aWZpYWJsZQ0KKwkJCQkvLyBJZGVudGlmaWFibGVUcmVlTm9kZT8NCisJCQkJZWxzZSBpZiAob2JqIGluc3RhbmNlb2YgSWRlbnRpZmlhYmxlVHJlZU5vZGUpIHsNCisJCQkJCXJldFZhbHVlID0gKChJZGVudGlmaWFibGVUcmVlTm9kZSkgb2JqKS5nZXRQcm9qZWN0KCk7DQorCQkJCQlicmVhazsNCisJCQkJfSAvLyBlbHNlIGlmIElkZW50aWZpYWJsZVRyZWVOb2RlDQorDQorCQkJfSAvLyBmb3IgZWFjaCBzZWxlY3RlZCBvYmplY3QNCisJCX0gLy8gaWYgc3RydWN0dXJlZCBzZWxlY3Rpb24NCisNCisJCXJldHVybiByZXRWYWx1ZTsNCisJfSAvLyBnZXRXb3JrU3BhY2VTZWxlY3RlZFByb2plY3QNCit9DQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLmdyYXBoZ2VuZXJhdG9ycy8uY2xhc3NwYXRoIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLmdyYXBoZ2VuZXJhdG9ycy8uY2xhc3NwYXRoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMwNGU4NjEKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkuZ3JhcGhnZW5lcmF0b3JzLy5jbGFzc3BhdGgKQEAgLTAsMCArMSw3IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPGNsYXNzcGF0aD4KKwk8Y2xhc3NwYXRoZW50cnkga2luZD0ic3JjIiBwYXRoPSJzcmMiLz4KKwk8Y2xhc3NwYXRoZW50cnkga2luZD0iY29uIiBwYXRoPSJvcmcuZWNsaXBzZS5qZHQubGF1bmNoaW5nLkpSRV9DT05UQUlORVIvb3JnLmVjbGlwc2UuamR0LmludGVybmFsLmRlYnVnLnVpLmxhdW5jaGVyLlN0YW5kYXJkVk1UeXBlL0oyU0UtMS41Ii8+CisJPGNsYXNzcGF0aGVudHJ5IGtpbmQ9ImNvbiIgcGF0aD0ib3JnLmVjbGlwc2UucGRlLmNvcmUucmVxdWlyZWRQbHVnaW5zIi8+CisJPGNsYXNzcGF0aGVudHJ5IGtpbmQ9Im91dHB1dCIgcGF0aD0iYmluIi8+Cis8L2NsYXNzcGF0aD4KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5ncmFwaGdlbmVyYXRvcnMvLnByb2plY3QgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkuZ3JhcGhnZW5lcmF0b3JzLy5wcm9qZWN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhlMzRjNWIKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkuZ3JhcGhnZW5lcmF0b3JzLy5wcm9qZWN0CkBAIC0wLDAgKzEsMjggQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8cHJvamVjdERlc2NyaXB0aW9uPgorCTxuYW1lPm9yZy5lY2xpcHNlLnN0ZW0udWkuZ3JhcGhnZW5lcmF0b3JzPC9uYW1lPgorCTxjb21tZW50PjwvY29tbWVudD4KKwk8cHJvamVjdHM+CisJPC9wcm9qZWN0cz4KKwk8YnVpbGRTcGVjPgorCQk8YnVpbGRDb21tYW5kPgorCQkJPG5hbWU+b3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YWJ1aWxkZXI8L25hbWU+CisJCQk8YXJndW1lbnRzPgorCQkJPC9hcmd1bWVudHM+CisJCTwvYnVpbGRDb21tYW5kPgorCQk8YnVpbGRDb21tYW5kPgorCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLk1hbmlmZXN0QnVpbGRlcjwvbmFtZT4KKwkJCTxhcmd1bWVudHM+CisJCQk8L2FyZ3VtZW50cz4KKwkJPC9idWlsZENvbW1hbmQ+CisJCTxidWlsZENvbW1hbmQ+CisJCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuU2NoZW1hQnVpbGRlcjwvbmFtZT4KKwkJCTxhcmd1bWVudHM+CisJCQk8L2FyZ3VtZW50cz4KKwkJPC9idWlsZENvbW1hbmQ+CisJPC9idWlsZFNwZWM+CisJPG5hdHVyZXM+CisJCTxuYXR1cmU+b3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YW5hdHVyZTwvbmF0dXJlPgorCQk8bmF0dXJlPm9yZy5lY2xpcHNlLnBkZS5QbHVnaW5OYXR1cmU8L25hdHVyZT4KKwk8L25hdHVyZXM+Cis8L3Byb2plY3REZXNjcmlwdGlvbj4KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5ncmFwaGdlbmVyYXRvcnMvTUVUQS1JTkYvTUFOSUZFU1QuTUYgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkuZ3JhcGhnZW5lcmF0b3JzL01FVEEtSU5GL01BTklGRVNULk1GCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY2MzdkMWMKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkuZ3JhcGhnZW5lcmF0b3JzL01FVEEtSU5GL01BTklGRVNULk1GCkBAIC0wLDAgKzEsMjUgQEAKK01hbmlmZXN0LVZlcnNpb246IDEuMAorQnVuZGxlLU1hbmlmZXN0VmVyc2lvbjogMgorQnVuZGxlLU5hbWU6ICVwbHVnaW5OYW1lCitCdW5kbGUtU3ltYm9saWNOYW1lOiBvcmcuZWNsaXBzZS5zdGVtLnVpLmdyYXBoZ2VuZXJhdG9ycztzaW5nbGV0b246PXRydWUKK0J1bmRsZS1WZXJzaW9uOiAxLjIuMQorQnVuZGxlLUNsYXNzUGF0aDogLgorQnVuZGxlLUFjdGl2YXRvcjogb3JnLmVjbGlwc2Uuc3RlbS51aS5ncmFwaGdlbmVyYXRvcnMucHJlc2VudGF0aW9uLkdyYXBoZ2VuZXJhdG9yRWRpdG9yUGx1Z2luJEltcGxlbWVudGF0aW9uCitCdW5kbGUtVmVuZG9yOiAlcHJvdmlkZXJOYW1lCitCdW5kbGUtTG9jYWxpemF0aW9uOiBwbHVnaW4KK0J1bmRsZS1SZXF1aXJlZEV4ZWN1dGlvbkVudmlyb25tZW50OiBKMlNFLTEuNQorRXhwb3J0LVBhY2thZ2U6IG9yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhnZW5lcmF0b3JzLnByZXNlbnRhdGlvbiwKKyBvcmcuZWNsaXBzZS5zdGVtLnVpLmdyYXBoZ2VuZXJhdG9ycy5hZGFwdGVycy5ncmFwaGdlbmVyYXRvcnByb3BlcnR5ZWRpdG9yLAorIG9yZy5lY2xpcHNlLnN0ZW0udWkuZ3JhcGhnZW5lcmF0b3JzLnByZXNlbnRhdGlvbiwKKyBvcmcuZWNsaXBzZS5zdGVtLnVpLmdyYXBoZ2VuZXJhdG9ycy53aXphcmRzCitSZXF1aXJlLUJ1bmRsZTogb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLAorIG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzO3Zpc2liaWxpdHk6PXJlZXhwb3J0LAorIG9yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhnZW5lcmF0b3JzO3Zpc2liaWxpdHk6PXJlZXhwb3J0LAorIG9yZy5lY2xpcHNlLmVtZi5lY29yZS54bWk7dmlzaWJpbGl0eTo9cmVleHBvcnQsCisgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWk7dmlzaWJpbGl0eTo9cmVleHBvcnQsCisgb3JnLmVjbGlwc2UudWkuaWRlO3Zpc2liaWxpdHk6PXJlZXhwb3J0LAorIG9yZy5lY2xpcHNlLnN0ZW0uY29yZTt2aXNpYmlsaXR5Oj1yZWV4cG9ydCwKKyBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuZWRpdDt2aXNpYmlsaXR5Oj1yZWV4cG9ydCwKKyBvcmcuZWNsaXBzZS5zdGVtLnVpO3Zpc2liaWxpdHk6PXJlZXhwb3J0LAorIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnM7dmlzaWJpbGl0eTo9cmVleHBvcnQKK0J1bmRsZS1BY3RpdmF0aW9uUG9saWN5OiBsYXp5CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkuZ3JhcGhnZW5lcmF0b3JzL2J1aWxkLnByb3BlcnRpZXMgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkuZ3JhcGhnZW5lcmF0b3JzL2J1aWxkLnByb3BlcnRpZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmE5NmQyMAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5ncmFwaGdlbmVyYXRvcnMvYnVpbGQucHJvcGVydGllcwpAQCAtMCwwICsxLDE3IEBACisKKyMgPGNvcHlyaWdodD4KKyMgPC9jb3B5cmlnaHQ+CisjCisjICRJZCQKKworYmluLmluY2x1ZGVzID0gLixcCisgICAgICAgICAgICAgICBpY29ucy8sXAorICAgICAgICAgICAgICAgTUVUQS1JTkYvLFwKKyAgICAgICAgICAgICAgIHBsdWdpbi54bWwsXAorICAgICAgICAgICAgICAgcGx1Z2luLnByb3BlcnRpZXMsXAorICAgICAgICAgICAgICAgcGx1Z2luX2RlLnByb3BlcnRpZXMsXAorICAgICAgICAgICAgICAgcGx1Z2luX2tyLnByb3BlcnRpZXMsXAorICAgICAgICAgICAgICAgcGx1Z2luX3poLnByb3BlcnRpZXMKK2phcnMuY29tcGlsZS5vcmRlciA9IC4KK3NvdXJjZS4uID0gc3JjLworb3V0cHV0Li4gPSBiaW4vCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkuZ3JhcGhnZW5lcmF0b3JzL2ljb25zL2Z1bGwvY3VzdG9tb2JqMTYvR3JhcGguZ2lmIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLmdyYXBoZ2VuZXJhdG9ycy9pY29ucy9mdWxsL2N1c3RvbW9iajE2L0dyYXBoLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NzBiMzU1Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLmdyYXBoZ2VuZXJhdG9ycy9pY29ucy9mdWxsL2N1c3RvbW9iajE2L0dyYXBoLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkuZ3JhcGhnZW5lcmF0b3JzL2ljb25zL2Z1bGwvb2JqMTYvR3JhcGhnZW5lcmF0b3JzTW9kZWxGaWxlLmdpZiBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5ncmFwaGdlbmVyYXRvcnMvaWNvbnMvZnVsbC9vYmoxNi9HcmFwaGdlbmVyYXRvcnNNb2RlbEZpbGUuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkzNWQ0MDEKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkuZ3JhcGhnZW5lcmF0b3JzL2ljb25zL2Z1bGwvb2JqMTYvR3JhcGhnZW5lcmF0b3JzTW9kZWxGaWxlLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkuZ3JhcGhnZW5lcmF0b3JzL2ljb25zL2Z1bGwvd2l6YmFuL05ld0dyYXBoZ2VuZXJhdG9ycy5naWYgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkuZ3JhcGhnZW5lcmF0b3JzL2ljb25zL2Z1bGwvd2l6YmFuL05ld0dyYXBoZ2VuZXJhdG9ycy5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGFjNjQ1NwotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5ncmFwaGdlbmVyYXRvcnMvaWNvbnMvZnVsbC93aXpiYW4vTmV3R3JhcGhnZW5lcmF0b3JzLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkuZ3JhcGhnZW5lcmF0b3JzL3BsdWdpbi5wcm9wZXJ0aWVzIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLmdyYXBoZ2VuZXJhdG9ycy9wbHVnaW4ucHJvcGVydGllcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMzA2ZDM2Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLmdyYXBoZ2VuZXJhdG9ycy9wbHVnaW4ucHJvcGVydGllcwpAQCAtMCwwICsxLDU5IEBACisKKyMgPGNvcHlyaWdodD4KKyMgPC9jb3B5cmlnaHQ+CisjCisjICRJZCQKKworcGx1Z2luTmFtZSA9IEdyYXBoZ2VuZXJhdG9yIEVkaXRvcgorcHJvdmlkZXJOYW1lID0gRWNsaXBzZS5vcmcKKworX1VJX0dyYXBoZ2VuZXJhdG9yc0VkaXRvcl9tZW51ID0gJkdyYXBoZ2VuZXJhdG9ycyBFZGl0b3IKKworX1VJX0NyZWF0ZUNoaWxkX21lbnVfaXRlbSA9ICZOZXcgQ2hpbGQKK19VSV9DcmVhdGVTaWJsaW5nX21lbnVfaXRlbSA9IE4mZXcgU2libGluZworCitfVUlfU2hvd1Byb3BlcnRpZXNWaWV3X21lbnVfaXRlbSA9IFNob3cgJlByb3BlcnRpZXMgVmlldworX1VJX1JlZnJlc2hWaWV3ZXJfbWVudV9pdGVtID0gJlJlZnJlc2gKKworX1VJX1NlbGVjdGlvblBhZ2VfbGFiZWwgPSBTZWxlY3Rpb24KK19VSV9QYXJlbnRQYWdlX2xhYmVsID0gUGFyZW50CitfVUlfTGlzdFBhZ2VfbGFiZWwgPSBMaXN0CitfVUlfVHJlZVBhZ2VfbGFiZWwgPSBUcmVlCitfVUlfVGFibGVQYWdlX2xhYmVsID0gVGFibGUKK19VSV9UcmVlV2l0aENvbHVtbnNQYWdlX2xhYmVsID0gVHJlZSB3aXRoIENvbHVtbnMKK19VSV9PYmplY3RDb2x1bW5fbGFiZWwgPSBPYmplY3QKK19VSV9TZWxmQ29sdW1uX2xhYmVsID0gU2VsZgorCitfVUlfTm9PYmplY3RTZWxlY3RlZCA9IFNlbGVjdGVkIE5vdGhpbmcKK19VSV9TaW5nbGVPYmplY3RTZWxlY3RlZCA9IFNlbGVjdGVkIE9iamVjdDogezB9CitfVUlfTXVsdGlPYmplY3RTZWxlY3RlZCA9IFNlbGVjdGVkIHswfSBPYmplY3RzCisKK19VSV9PcGVuRWRpdG9yRXJyb3JfbGFiZWwgPSBPcGVuIEVkaXRvcgorCitfVUlfV2l6YXJkX2NhdGVnb3J5ID0gRXhhbXBsZSBFTUYgTW9kZWwgQ3JlYXRpb24gV2l6YXJkcworCitfVUlfQ3JlYXRlTW9kZWxFcnJvcl9tZXNzYWdlID0gUHJvYmxlbXMgZW5jb3VudGVyZWQgaW4gZmlsZSAiezB9IgorCitfVUlfR3JhcGhnZW5lcmF0b3JzTW9kZWxXaXphcmRfbGFiZWwgPSBHcmFwaGdlbmVyYXRvcnMgTW9kZWwKK19VSV9HcmFwaGdlbmVyYXRvcnNNb2RlbFdpemFyZF9kZXNjcmlwdGlvbiA9IENyZWF0ZSBhIG5ldyBHcmFwaGdlbmVyYXRvcnMgbW9kZWwKKworX1VJX0dyYXBoZ2VuZXJhdG9yc0VkaXRvcl9sYWJlbCA9IEdyYXBoZ2VuZXJhdG9ycyBNb2RlbCBFZGl0b3IKKworX1VJX0dyYXBoZ2VuZXJhdG9yc0VkaXRvckZpbGVuYW1lRGVmYXVsdEJhc2UgPSBNeQorX1VJX0dyYXBoZ2VuZXJhdG9yc0VkaXRvckZpbGVuYW1lRXh0ZW5zaW9ucyA9IGdyYXBoZ2VuZXJhdG9ycworCitfVUlfV2l6YXJkX2xhYmVsID0gTmV3CisKK19XQVJOX0ZpbGVuYW1lRXh0ZW5zaW9uID0gVGhlIGZpbGUgbmFtZSBtdXN0IGVuZCBpbiAnJy57MH0nJworX1dBUk5fRmlsZW5hbWVFeHRlbnNpb25zID0gVGhlIGZpbGUgbmFtZSBtdXN0IGhhdmUgb25lIG9mIHRoZSBmb2xsb3dpbmcgZXh0ZW5zaW9uczogezB9CisKK19VSV9Nb2RlbE9iamVjdCA9ICZNb2RlbCBPYmplY3QKK19VSV9YTUxFbmNvZGluZyA9ICZYTUwgRW5jb2RpbmcKK19VSV9YTUxFbmNvZGluZ0Nob2ljZXMgPSBVVEYtOCBBU0NJSSBVVEYtMTYgVVRGLTE2QkUgVVRGLTE2TEUgSVNPLTg4NTktMQorX1VJX1dpemFyZF9pbml0aWFsX29iamVjdF9kZXNjcmlwdGlvbiA9IFNlbGVjdCBhIG1vZGVsIG9iamVjdCB0byBjcmVhdGUKKworX1VJX0ZpbGVDb25mbGljdF9sYWJlbCA9IEZpbGUgQ29uZmxpY3QKK19XQVJOX0ZpbGVDb25mbGljdCA9IFRoZXJlIGFyZSB1bnNhdmVkIGNoYW5nZXMgdGhhdCBjb25mbGljdCB3aXRoIGNoYW5nZXMgbWFkZSBvdXRzaWRlIHRoZSBlZGl0b3IuICBEbyB5b3Ugd2lzaCB0byBkaXNjYXJkIHRoaXMgZWRpdG9yJ3MgY2hhbmdlcz8KKworX1VJX0dyYXBoTW9kZWxXaXphcmRfbGFiZWwgPSBHcmFwaAorX1VJX0dyYXBoTW9kZWxXaXphcmRfZGVzY3JpcHRpb24gPSBEZWZpbmUgYSBuZXcgZ3JhcGgKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5ncmFwaGdlbmVyYXRvcnMvcGx1Z2luLnhtbCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5ncmFwaGdlbmVyYXRvcnMvcGx1Z2luLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNDFkYThmCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLmdyYXBoZ2VuZXJhdG9ycy9wbHVnaW4ueG1sCkBAIC0wLDAgKzEsODcgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8P2VjbGlwc2UgdmVyc2lvbj0iMy4wIj8+CisKKzwhLS0KKyA8Y29weXJpZ2h0PgorIDwvY29weXJpZ2h0PgorCisgJElkJAorLS0+CisKKzxwbHVnaW4+CisKKworICAgPGV4dGVuc2lvbiBwb2ludD0ib3JnLmVjbGlwc2UudWkubmV3V2l6YXJkcyI+CisgICAgICA8Y2F0ZWdvcnkgCisgICAgICAgICAgICBpZD0ib3JnLmVjbGlwc2Uuc3RlbS51aS53aXphcmRzLnN0ZW1jYXRlZ29yeSIKKyAgICAgICAgICAgIG5hbWU9IiVfVUlfU1RFTSIKKyAgICAgICAgICAgIHBhcmVudENhdGVnb3J5PSIvIi8+CisgICAgICA8d2l6YXJkCisgICAgICAgICAgICBpZD0ib3JnLmVjbGlwc2Uuc3RlbS5ncmFwaGdlbmVyYXRvcnMucHJlc2VudGF0aW9uLkdyYXBoZ2VuZXJhdG9yc01vZGVsV2l6YXJkSUQiCisgICAgICAgICAgICBuYW1lPSIlX1VJX0dyYXBoZ2VuZXJhdG9yc01vZGVsV2l6YXJkX2xhYmVsIgorICAgICAgICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhnZW5lcmF0b3JzLnByZXNlbnRhdGlvbi5HcmFwaGdlbmVyYXRvcnNNb2RlbFdpemFyZCIKKyAgICAgICAgICAgIGNhdGVnb3J5PSJvcmcuZWNsaXBzZS5lbWYuZWNvcmUuV2l6YXJkLmNhdGVnb3J5LklEIgorICAgICAgICAgICAgaWNvbj0iaWNvbnMvZnVsbC9vYmoxNi9HcmFwaGdlbmVyYXRvcnNNb2RlbEZpbGUuZ2lmIj4KKyAgICAgICAgIDxkZXNjcmlwdGlvbj4lX1VJX0dyYXBoZ2VuZXJhdG9yc01vZGVsV2l6YXJkX2Rlc2NyaXB0aW9uPC9kZXNjcmlwdGlvbj4KKyAgICAgICAgIDxzZWxlY3Rpb24gY2xhc3M9Im9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklSZXNvdXJjZSIvPgorICAgICAgPC93aXphcmQ+CisgICA8L2V4dGVuc2lvbj4KKworICAgPGV4dGVuc2lvbiBwb2ludD0ib3JnLmVjbGlwc2UudWkuZWRpdG9ycyI+CisgICAgICA8ZWRpdG9yCisgICAgICAgICAgICBpZD0ib3JnLmVjbGlwc2Uuc3RlbS5ncmFwaGdlbmVyYXRvcnMucHJlc2VudGF0aW9uLkdyYXBoZ2VuZXJhdG9yc0VkaXRvcklEIgorICAgICAgICAgICAgbmFtZT0iJV9VSV9HcmFwaGdlbmVyYXRvcnNFZGl0b3JfbGFiZWwiCisgICAgICAgICAgICBpY29uPSJpY29ucy9mdWxsL29iajE2L0dyYXBoZ2VuZXJhdG9yc01vZGVsRmlsZS5naWYiCisgICAgICAgICAgICBleHRlbnNpb25zPSJncmFwaGdlbmVyYXRvcnMiCisgICAgICAgICAgICBjbGFzcz0ib3JnLmVjbGlwc2Uuc3RlbS5ncmFwaGdlbmVyYXRvcnMucHJlc2VudGF0aW9uLkdyYXBoZ2VuZXJhdG9yc0VkaXRvciIKKyAgICAgICAgICAgIGNvbnRyaWJ1dG9yQ2xhc3M9Im9yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhnZW5lcmF0b3JzLnByZXNlbnRhdGlvbi5HcmFwaGdlbmVyYXRvcnNBY3Rpb25CYXJDb250cmlidXRvciI+CisgICAgICA8L2VkaXRvcj4KKyAgIDwvZXh0ZW5zaW9uPgorCisgIDxleHRlbnNpb24KKyAgICAgICAgcG9pbnQ9Im9yZy5lY2xpcHNlLnVpLm1lbnVzIj4KKyAgICAgIDxtZW51Q29udHJpYnV0aW9uCisgICAgICAgICAgICBsb2NhdGlvblVSST0ibWVudTpvcmcuZWNsaXBzZS51aS5tYWluLm1lbnU/YWZ0ZXI9ZWRpdCI+CisgICAgICAgICA8bWVudQorICAgICAgICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLnN0ZW0udWkubWVudS5uZXd3aXphcmRzIgorICAgICAgICAgICAgICAgbGFiZWw9IiVfVUlfU1RFTV9OZXdBY3Rpb25TZXRfTWVudSI+CisgICAgICAgICAgICA8Y29tbWFuZAorICAgICAgICAgICAgICAgICAgY29tbWFuZElkPSJvcmcuZWNsaXBzZS5zdGVtLnVpLmNvbW1hbmQud2l6LmdyYXBoIgorICAgICAgICAgICAgICAgICAgaWNvbj0iaWNvbnMvZnVsbC9jdXN0b21vYmoxNi9HcmFwaC5naWYiCisgICAgICAgICAgICAgICAgICBsYWJlbD0iJV9VSV9HcmFwaE1vZGVsV2l6YXJkX2xhYmVsIgorICAgICAgICAgICAgICAgICAgc3R5bGU9InB1c2giCisgICAgICAgICAgICAgICAgICB0b29sdGlwPSIlX1VJX0dyYXBoTW9kZWxXaXphcmRfZGVzY3JpcHRpb24iPgorICAgICAgICAgICAgPC9jb21tYW5kPgorICAgICAgICA8L21lbnU+CisgICAgIDwvbWVudUNvbnRyaWJ1dGlvbj4KKyAgICAgICAgICAgPG1lbnVDb250cmlidXRpb24KKyAgICAgICAgICAgIGxvY2F0aW9uVVJJPSJ0b29sYmFyOm9yZy5lY2xpcHNlLnVpLm1haW4udG9vbGJhcj9hZnRlcj1hZGRpdGlvbnMiPgorICAgICAgICAgPHRvb2xiYXIKKyAgICAgICAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5zdGVtLnVpLnRvb2xiYXIubmV3d2l6YXJkcyI+CisgICAgICAgICAgICA8Y29tbWFuZAorICAgICAgICAgICAgICAgICAgY29tbWFuZElkPSJvcmcuZWNsaXBzZS5zdGVtLnVpLmNvbW1hbmQud2l6LmdyYXBoIgorICAgICAgICAgICAgICAgICAgaWNvbj0iaWNvbnMvZnVsbC9jdXN0b21vYmoxNi9HcmFwaC5naWYiCisgICAgICAgICAgICAgICAgICBsYWJlbD0iJV9VSV9HcmFwaE1vZGVsV2l6YXJkX2xhYmVsIgorICAgICAgICAgICAgICAgICAgc3R5bGU9InB1c2giCisgICAgICAgICAgICAgICAgICB0b29sdGlwPSIlX1VJX0dyYXBoTW9kZWxXaXphcmRfZGVzY3JpcHRpb24iPgorICAgICAgICAgICAgPC9jb21tYW5kPgorICAgICAgICA8L3Rvb2xiYXI+CisgICAgIDwvbWVudUNvbnRyaWJ1dGlvbj4KKyAgPC9leHRlbnNpb24+CisgIAorICAgPGV4dGVuc2lvbgorICAgICAgICBwb2ludD0ib3JnLmVjbGlwc2UudWkuY29tbWFuZHMiPgorICAgICA8Y2F0ZWdvcnkKKyAgICAgICAgICAgZGVzY3JpcHRpb249IiVfVUlfU1RFTV9XaXpDbWRfQ2F0X0Rlc2MiCisgICAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5zdGVtLnVpLndpemFyZHMiCisgICAgICAgICAgIG5hbWU9IiVfVUlfU1RFTV9XaXpDbWRfQ2F0X05hbWUiPgorICAgICA8L2NhdGVnb3J5PgorICAgICAgPGNvbW1hbmQKKyAgICAgICAgICAgY2F0ZWdvcnlJZD0ib3JnLmVjbGlwc2Uuc3RlbS51aS53aXphcmRzIgorICAgICAgICAgICBkZWZhdWx0SGFuZGxlcj0ib3JnLmVjbGlwc2Uuc3RlbS51aS5ncmFwaGdlbmVyYXRvcnMud2l6YXJkcy5OZXdHcmFwaFdpemFyZCROZXdHcmFwaFdpemFyZENvbW1hbmRIYW5kbGVyIgorICAgICAgICAgICBkZXNjcmlwdGlvbj0iJV9VSV9HcmFwaE1vZGVsV2l6YXJkX2Rlc2NyaXB0aW9uIgorICAgICAgICAgICBpZD0ib3JnLmVjbGlwc2Uuc3RlbS51aS5jb21tYW5kLndpei5ncmFwaCIKKyAgICAgICAgICAgbmFtZT0iJV9VSV9HcmFwaE1vZGVsV2l6YXJkX2xhYmVsIj4KKyAgICAgPC9jb21tYW5kPgorICAgPC9leHRlbnNpb24+Cis8L3BsdWdpbj4KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5ncmFwaGdlbmVyYXRvcnMvcGx1Z2luX2RlLnByb3BlcnRpZXMgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkuZ3JhcGhnZW5lcmF0b3JzL3BsdWdpbl9kZS5wcm9wZXJ0aWVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM3OTYxNzEKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkuZ3JhcGhnZW5lcmF0b3JzL3BsdWdpbl9kZS5wcm9wZXJ0aWVzCkBAIC0wLDAgKzEsNTkgQEAKKworIyA8Y29weXJpZ2h0PgorIyA8L2NvcHlyaWdodD4KKyMKKyMgJElkJAorCitwbHVnaW5OYW1lPUdyYXBoZ2VuZXJhdG9yIEVkaXRvcgorcHJvdmlkZXJOYW1lPUVjbGlwc2Uub3JnCisKK19VSV9HcmFwaGdlbmVyYXRvcnNFZGl0b3JfbWVudT0mR3JhcGhnZW5lcmF0b3JzIEVkaXRvcgorCitfVUlfQ3JlYXRlQ2hpbGRfbWVudV9pdGVtPSZOZXcgQ2hpbGQKK19VSV9DcmVhdGVTaWJsaW5nX21lbnVfaXRlbT1OJmV1ZXMgR2VzY2h3aXN0ZXJ0ZWlsCisKK19VSV9TaG93UHJvcGVydGllc1ZpZXdfbWVudV9pdGVtPVNob3cgJiBQcm9wZXJ0aWVzIFZpZXcKK19VSV9SZWZyZXNoVmlld2VyX21lbnVfaXRlbT0mUmVmcmVzaAorCitfVUlfU2VsZWN0aW9uUGFnZV9sYWJlbD1BdXN3YWhsCitfVUlfUGFyZW50UGFnZV9sYWJlbD1FbHRlcm50ZWlsCitfVUlfTGlzdFBhZ2VfbGFiZWw9TGlzdGUKK19VSV9UcmVlUGFnZV9sYWJlbD1CYXVtCitfVUlfVGFibGVQYWdlX2xhYmVsPVRhYmVsbGUKK19VSV9UcmVlV2l0aENvbHVtbnNQYWdlX2xhYmVsPUJhdW0gbWl0IFNwYWx0ZW4KK19VSV9PYmplY3RDb2x1bW5fbGFiZWw9T2JqZWt0CitfVUlfU2VsZkNvbHVtbl9sYWJlbD1TZWxic3QKKworX1VJX05vT2JqZWN0U2VsZWN0ZWQ9TmljaHRzIGF1c2dld1x1MDBlNGhsdAorX1VJX1NpbmdsZU9iamVjdFNlbGVjdGVkPUF1c2dld1x1MDBlNGhsdGVzIE9iamVrdDogezB9CitfVUlfTXVsdGlPYmplY3RTZWxlY3RlZD1BdXNnZXdcdTAwZTRobHRlIHswfSBPYmpla3RlCisKK19VSV9PcGVuRWRpdG9yRXJyb3JfbGFiZWw9RWRpdG9yIFx1MDBmNmZmbmVuCisKK19VSV9XaXphcmRfY2F0ZWdvcnk9QmVpc3BpZWwgRU1GIE1vZGVsbCBFcnN0ZWxsdW5nc2Fzc2lzdGVudAorCitfVUlfQ3JlYXRlTW9kZWxFcnJvcl9tZXNzYWdlPUF1ZmdldHJldGVuZSBQcm9ibGVtZSBpbiBkZXIgRGF0ZWkgInswfSIKKworX1VJX0dyYXBoZ2VuZXJhdG9yc01vZGVsV2l6YXJkX2xhYmVsPUdyYXBoZ2VuZXJhdG9yZW4gTW9kZWxsCitfVUlfR3JhcGhnZW5lcmF0b3JzTW9kZWxXaXphcmRfZGVzY3JpcHRpb249TmV1ZXMgR3JhcGhnZW5lcmF0b3JzLU1vZGVsbCBlcnN0ZWxsZW4KKworX1VJX0dyYXBoZ2VuZXJhdG9yc0VkaXRvcl9sYWJlbD1HcmFwaGdlbmVyYXRvcmVuIE1vZGVsbCBFZGl0b3IKKworX1VJX0dyYXBoZ2VuZXJhdG9yc0VkaXRvckZpbGVuYW1lRGVmYXVsdEJhc2U9TWVpbgorX1VJX0dyYXBoZ2VuZXJhdG9yc0VkaXRvckZpbGVuYW1lRXh0ZW5zaW9ucz1HcmFwaGdlbmVyYXRvcmVuCisKK19VSV9XaXphcmRfbGFiZWw9TmV1CisKK19XQVJOX0ZpbGVuYW1lRXh0ZW5zaW9uPURlciBEYXRlaW5hbWUgbXVzcyBhdWYgIi57MH0iIGVuZGVuCitfV0FSTl9GaWxlbmFtZUV4dGVuc2lvbnM9RGVyIERhdGVpbmFtZSBtdXNzIGVpbmUgZGVyIGZvbGdlbmRlbiBFbmR1bmdlbiBoYWJlbjogezB9CisKK19VSV9Nb2RlbE9iamVjdD0mTW9kZWwgT2JqZWN0CitfVUlfWE1MRW5jb2Rpbmc9JlhNTCBFbmNvZGluZworX1VJX1hNTEVuY29kaW5nQ2hvaWNlcz1VVEYtOCBBU0NJSSBVVEYtMTYgVVRGLTE2QkUgVVRGLTE2TEUgSVNPLTg4NTktMQorX1VJX1dpemFyZF9pbml0aWFsX29iamVjdF9kZXNjcmlwdGlvbj1adSBlcnpldWdlbmRlcyBNb2RlbGxvYmpla3Qgd1x1MDBlNGhsZW4KKworX1VJX0ZpbGVDb25mbGljdF9sYWJlbD1EYXRlaWtvbmZsaWt0CitfV0FSTl9GaWxlQ29uZmxpY3Q9RXMgZ2lidCBuaWNodCBnZXNwZWljaGVydGUgXHUwMGM0bmRlcnVuZ2VuLCBkaWUgS29uZmxpa3RlIG1pdCBcdTAwYzRuZGVydW5nZW4gYXVcdTAwZGZlcmhhbGIgZGVzIEVkaXRvcnMgZXJ6ZXVnZW4uIE1cdTAwZjZjaHRlbiBTaWUgZGllIFx1MDBjNG5kZXJ1bmdlbiBpbSBFZGl0b3IgdmVyd2VyZmVuPworCitfVUlfR3JhcGhNb2RlbFdpemFyZF9sYWJlbD1HcmFwaAorX1VJX0dyYXBoTW9kZWxXaXphcmRfZGVzY3JpcHRpb249TmV1ZW4gR3JhcGhlbiBkZWZpbmllcmVuCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkuZ3JhcGhnZW5lcmF0b3JzL3BsdWdpbl9rci5wcm9wZXJ0aWVzIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLmdyYXBoZ2VuZXJhdG9ycy9wbHVnaW5fa3IucHJvcGVydGllcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45M2FmMmY5Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLmdyYXBoZ2VuZXJhdG9ycy9wbHVnaW5fa3IucHJvcGVydGllcwpAQCAtMCwwICsxLDU5IEBACisKKyMgPGNvcHlyaWdodD4KKyMgPC9jb3B5cmlnaHQ+CisjCisjICRJZCQKKworcGx1Z2luTmFtZT1cdWFkZjhcdWI3OThcdWQ1MDRcdWMwZGRcdWMxMzFcdWFlMzAgXHVkM2I4XHVjOWQxXHVhZTMwCitwcm92aWRlck5hbWU9RWNsaXBzZS5vcmcKKworX1VJX0dyYXBoZ2VuZXJhdG9yc0VkaXRvcl9tZW51PSZHcmFwaGdlbmVyYXRvcnMgRWRpdG9yCisKK19VSV9DcmVhdGVDaGlsZF9tZW51X2l0ZW09Jk5ldyBDaGlsZAorX1VJX0NyZWF0ZVNpYmxpbmdfbWVudV9pdGVtPU4mICBcdWQ2MTVcdWM4MWMgXHVjNzkwXHViOWU0CisKK19VSV9TaG93UHJvcGVydGllc1ZpZXdfbWVudV9pdGVtPVx1ZDQ1Y1x1YzJkYyBcdWJjMGYgXHVjMThkXHVjMTMxXHViY2Y0XHVhZTMwCitfVUlfUmVmcmVzaFZpZXdlcl9tZW51X2l0ZW09JlJlZnJlc2gKKworX1VJX1NlbGVjdGlvblBhZ2VfbGFiZWw9XHVjMTIwXHVkMGRkCitfVUlfUGFyZW50UGFnZV9sYWJlbD1cdWJkODBcdWJhYTgKK19VSV9MaXN0UGFnZV9sYWJlbD1cdWJhYTlcdWI4NWQKK19VSV9UcmVlUGFnZV9sYWJlbD1cdWIwOThcdWJiMzQKK19VSV9UYWJsZVBhZ2VfbGFiZWw9XHVkMTRjXHVjNzc0XHViZTE0CitfVUlfVHJlZVdpdGhDb2x1bW5zUGFnZV9sYWJlbD1cdWIwOThcdWJiMzRcdWM2NDAgXHVjNWY0CitfVUlfT2JqZWN0Q29sdW1uX2xhYmVsPVx1YWMxY1x1Y2NiNAorX1VJX1NlbGZDb2x1bW5fbGFiZWw9XHVjMTQwXHVkNTA0CisKK19VSV9Ob09iamVjdFNlbGVjdGVkPVx1YzU0NFx1YmIzNFx1YWM4M1x1YjNjNCBcdWM1NDggXHVjMTIwXHVkMGRkXHVkNTY4CitfVUlfU2luZ2xlT2JqZWN0U2VsZWN0ZWQ9XHVjMTIwXHVkMGRkXHVkNTVjIFx1YWMxZFx1Y2NiNCA6IHswfQorX1VJX011bHRpT2JqZWN0U2VsZWN0ZWQ9XHVjMTIwXHVkMGRkXHViNDFjIHswfSBcdWFjMWRcdWNjYjQKKworX1VJX09wZW5FZGl0b3JFcnJvcl9sYWJlbD1cdWM2MjRcdWQ1MDggXHVjNWQwXHViNTE0XHVkMTMwCisKK19VSV9XaXphcmRfY2F0ZWdvcnk9XHVjNjA4XHVjODFjIEVNRiBcdWJhYThcdWIzNzggXHVjMGRkXHVjMTMxIFx1YjljOFx1YmM5NVx1YzBhYworCitfVUlfQ3JlYXRlTW9kZWxFcnJvcl9tZXNzYWdlPVx1ZDMwY1x1Yzc3YyAnezB9ICJcdWM1ZDBcdWMxMWMgXHViYjM4XHVjODFjIFx1YmMxY1x1YzBkZAorCitfVUlfR3JhcGhnZW5lcmF0b3JzTW9kZWxXaXphcmRfbGFiZWw9XHVhZGY4XHViNzk4XHVkNTA0XHVjMGRkXHVjMTMxXHVhZTMwIFx1YmFhOFx1YjM3OAorX1VJX0dyYXBoZ2VuZXJhdG9yc01vZGVsV2l6YXJkX2Rlc2NyaXB0aW9uPVx1YzBjOFx1Yjg1Y1x1YzZiNCBcdWFkZjhcdWI3OThcdWQ1MDRcdWMwZGRcdWMxMzFcdWM3OTAgXHViYWE4XHViMzc4IFx1YjljY1x1YjRlNFx1YWUzMAorCitfVUlfR3JhcGhnZW5lcmF0b3JzRWRpdG9yX2xhYmVsPVx1YWRmOFx1Yjc5OFx1ZDUwNFx1YzBkZFx1YzEzMVx1YWUzMCBcdWJhYThcdWIzNzggXHVkM2I4XHVjOWQxXHVhZTMwCisKK19VSV9HcmFwaGdlbmVyYXRvcnNFZGl0b3JGaWxlbmFtZURlZmF1bHRCYXNlPVx1YjA5OFx1Yzc1OAorX1VJX0dyYXBoZ2VuZXJhdG9yc0VkaXRvckZpbGVuYW1lRXh0ZW5zaW9ucz1cdWFkZjhcdWI3OThcdWQ1MDRcdWMwZGRcdWMxMzFcdWFlMzAKKworX1VJX1dpemFyZF9sYWJlbD1cdWMwYzhcdWI4NWNcdWM2YjQKKworX1dBUk5fRmlsZW5hbWVFeHRlbnNpb249XHVkMzBjXHVjNzdjIFx1Yzc3NFx1Yjk4NFx1Yzc0MCAiLnswfSJcdWI4NWMgXHViMDVkXHViMDk4XHVjNTdjXHVkNTY4LgorX1dBUk5fRmlsZW5hbWVFeHRlbnNpb25zPVx1ZDMwY1x1Yzc3YyBcdWM3NzRcdWI5ODRcdWM3NDAgXHViMmU0XHVjNzRjIFx1ZDY1NVx1YzdhNVx1Yzc5MCBcdWM5MTEgXHVkNTU4XHViMDk4XHViOTdjIFx1YWMwMFx1YzgzOFx1YzU3Y1x1ZDU2OCA6IHswfQorCitfVUlfTW9kZWxPYmplY3Q9Jk1vZGVsIE9iamVjdAorX1VJX1hNTEVuY29kaW5nPSZYTUwgRW5jb2RpbmcKK19VSV9YTUxFbmNvZGluZ0Nob2ljZXM9VVRGIC0gOCBBU0NJSSBVVEYgLSAxNiBVVEYgLSAxNkJFIFVURiAtIDE2TEUgSVNPIC0gODg1OSAtIDEKK19VSV9XaXphcmRfaW5pdGlhbF9vYmplY3RfZGVzY3JpcHRpb249XHVjMGRkXHVjMTMxXHVkNTYwIFx1YmFhOFx1YjM3OCBcdWFjMWNcdWNjYjQgXHVjMTIwXHVkMGRkCisKK19VSV9GaWxlQ29uZmxpY3RfbGFiZWw9XHVkMzBjXHVjNzdjIFx1Y2RhOVx1YjNjYworX1dBUk5fRmlsZUNvbmZsaWN0PVx1YzgwMFx1YzdhNVx1YjQxOFx1YzljMCBcdWM1NGFcdWM3NDAgXHVjMGFjXHVkNTZkXHViNGU0XHVjNzc0IFx1ZDNiOFx1YzlkMVx1YWUzMCBcdWM2NzhcdWJkODBcdWM3NTggXHViY2MwXHVhY2JkIFx1YzBhY1x1ZDU2ZFx1YjRlNFx1YWNmYyBcdWNkYTlcdWIzY2NcdWQ1NjguIFx1Yzc3NCBcdWQzYjhcdWM5ZDFcdWFlMzBcdWM3NTggXHViY2MwXHVhY2JkIFx1YzBhY1x1ZDU2ZFx1YjRlNFx1Yzc0NCBcdWNkZThcdWMxOGMgXHVkNTU4XHVjMmRjXHVhY2EwXHVjMmI1XHViMmM4XHVhZTRjPworCitfVUlfR3JhcGhNb2RlbFdpemFyZF9sYWJlbD1cdWFkZjhcdWI3OThcdWQ1MDQKK19VSV9HcmFwaE1vZGVsV2l6YXJkX2Rlc2NyaXB0aW9uPVx1YzBjOFx1Yjg1Y1x1YzZiNCBcdWFkZjhcdWI3OThcdWQ1MDRcdWI5N2MgXHVjODE1XHVjNzU4CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkuZ3JhcGhnZW5lcmF0b3JzL3BsdWdpbl96aC5wcm9wZXJ0aWVzIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLmdyYXBoZ2VuZXJhdG9ycy9wbHVnaW5femgucHJvcGVydGllcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZTUxZWUyCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLmdyYXBoZ2VuZXJhdG9ycy9wbHVnaW5femgucHJvcGVydGllcwpAQCAtMCwwICsxLDU5IEBACisKKyMgPGNvcHlyaWdodD4KKyMgPC9jb3B5cmlnaHQ+CisjCisjICRJZCQKKworcGx1Z2luTmFtZT1cdTU2ZmVcdTc1MWZcdTYyMTBcdTU2NjgKK3Byb3ZpZGVyTmFtZT1FY2xpcHNlLm9yZworCitfVUlfR3JhcGhnZW5lcmF0b3JzRWRpdG9yX21lbnU9JkdyYXBoZ2VuZXJhdG9ycyBFZGl0b3IKKworX1VJX0NyZWF0ZUNoaWxkX21lbnVfaXRlbT0mTmV3IENoaWxkCitfVUlfQ3JlYXRlU2libGluZ19tZW51X2l0ZW09XHU2NWIwXHU3NTFmXHU2MjEwXHU0ZTAwXHU0ZTJhXHU1MTQ0XHU1ZjFmXHU3YzdiCisKK19VSV9TaG93UHJvcGVydGllc1ZpZXdfbWVudV9pdGVtPVx1NjYzZVx1NzkzYVx1NTQ4Y1x1NWM1ZVx1NjAyN1x1NjdlNVx1NzcwYgorX1VJX1JlZnJlc2hWaWV3ZXJfbWVudV9pdGVtPSZSZWZyZXNoCisKK19VSV9TZWxlY3Rpb25QYWdlX2xhYmVsPVx1OTAwOVx1NjJlOQorX1VJX1BhcmVudFBhZ2VfbGFiZWw9XHU1YmI2XHU5NTdmCitfVUlfTGlzdFBhZ2VfbGFiZWw9XHU3NmVlXHU1ZjU1CitfVUlfVHJlZVBhZ2VfbGFiZWw9XHU2ODExCitfVUlfVGFibGVQYWdlX2xhYmVsPVx1ODg2OAorX1VJX1RyZWVXaXRoQ29sdW1uc1BhZ2VfbGFiZWw9XHU1MjA2XHU1MjE3XHU3Njg0XHU2ODExCitfVUlfT2JqZWN0Q29sdW1uX2xhYmVsPVx1NWJmOVx1OGM2MQorX1VJX1NlbGZDb2x1bW5fbGFiZWw9XHU4MWVhXHU1ZGYxCisKK19VSV9Ob09iamVjdFNlbGVjdGVkPVx1NjVlMFx1OTAwOVx1NWI5YVx1NTE4NVx1NWJiOQorX1VJX1NpbmdsZU9iamVjdFNlbGVjdGVkPVx1OTAwOVx1NjJlOVx1NWJmOVx1OGM2MVx1ZmYxYXswfQorX1VJX011bHRpT2JqZWN0U2VsZWN0ZWQ9XHU5MDA5XHU2MmU5ezB9XHU1YmY5XHU4YzYxCisKK19VSV9PcGVuRWRpdG9yRXJyb3JfbGFiZWw9XHU2MjUzXHU1ZjAwXHU3ZjE2XHU4ZjkxXHU1NjY4CisKK19VSV9XaXphcmRfY2F0ZWdvcnk9XHU0ZjhiXHU1OTgyRU1GXHU2YTIxXHU1NzhiXHU1MjFiXHU1ZWZhXHU1NDExXHU1YmZjCisKK19VSV9DcmVhdGVNb2RlbEVycm9yX21lc3NhZ2U9XHU1NzI4XHU2NTg3XHU0ZWY2XHUyMDFjezB9XHUyMDFkXHU0ZTJkXHU5MDQ3XHU1MjMwXHU3Njg0XHU5NWVlXHU5ODk4CisKK19VSV9HcmFwaGdlbmVyYXRvcnNNb2RlbFdpemFyZF9sYWJlbD1cdTU2ZmVcdTc1MWZcdTYyMTBcdTU2NjhcdTZhMjFcdTU3OGIKK19VSV9HcmFwaGdlbmVyYXRvcnNNb2RlbFdpemFyZF9kZXNjcmlwdGlvbj1cdTUyMWJcdTVlZmFcdTRlMDBcdTRlMmFcdTY1YjBcdTc2ODRcdTU2ZmVcdTVmNjJcdTc1MWZcdTYyMTBcdTU2NjhcdTZhMjFcdTU3OGIKKworX1VJX0dyYXBoZ2VuZXJhdG9yc0VkaXRvcl9sYWJlbD1cdTU2ZmVcdTc1MWZcdTYyMTBcdTU2NjhcdTZhMjFcdTU3OGJcdTdmMTZcdThmOTFcdTU2NjgKKworX1VJX0dyYXBoZ2VuZXJhdG9yc0VkaXRvckZpbGVuYW1lRGVmYXVsdEJhc2U9XHU2MjExXHU3Njg0CitfVUlfR3JhcGhnZW5lcmF0b3JzRWRpdG9yRmlsZW5hbWVFeHRlbnNpb25zPVx1NTZmZVx1NWY2Mlx1NzUxZlx1NjIxMFx1NTY2OAorCitfVUlfV2l6YXJkX2xhYmVsPVx1NjViMFx1NWVmYQorCitfV0FSTl9GaWxlbmFtZUV4dGVuc2lvbj1cdTY1ODdcdTRlZjZcdTU0MGRcdTVmYzVcdTk4N2JcdTRlZTUnezB9ICcnXHU3ZWQzXHU1YzNlCitfV0FSTl9GaWxlbmFtZUV4dGVuc2lvbnM9XHU2NTg3XHU0ZWY2XHU1NDBkXHU1ZmM1XHU5ODdiXHU1MTc3XHU2NzA5XHU0ZWU1XHU0ZTBiXHU2MjY5XHU1YzU1XHU1NDBkXHU0ZTRiXHU0ZTAwXHVmZjFhezB9CisKK19VSV9Nb2RlbE9iamVjdD0mTW9kZWwgT2JqZWN0CitfVUlfWE1MRW5jb2Rpbmc9JlhNTCBFbmNvZGluZworX1VJX1hNTEVuY29kaW5nQ2hvaWNlcz1VVEYtOCBBU0NJSSBVVEYtMTYgVVRGLTE2QkUgVVRGLTE2TEUgSVNPLTg4NTktMQorX1VJX1dpemFyZF9pbml0aWFsX29iamVjdF9kZXNjcmlwdGlvbj1cdTkwMDlcdTYyZTlcdTUyMWJcdTVlZmFcdTRlMDBcdTRlMmFcdTZhMjFcdTU3OGJcdTViZjlcdThjNjEKKworX1VJX0ZpbGVDb25mbGljdF9sYWJlbD1cdTY1ODdcdTRlZjZcdTUxYjJcdTdhODEKK19XQVJOX0ZpbGVDb25mbGljdD1cdTY3MDlcdTY3MmFcdTRmZGRcdTViNThcdTc2ODRcdTY2ZjRcdTY1MzlcdTRlMGVcdTdmMTZcdThmOTFcdTU2NjhcdTU5MTZcdTc2ODRcdTY2ZjRcdTY1MzlcdTUxYjJcdTdhODFcdTMwMDJcdTRmNjBcdTYwZjNcdTY1M2VcdTVmMDNcdThmZDlcdTRlMmFcdTdmMTZcdThmOTFcdTU2NjhcdTc2ODRcdTY2ZjRcdTY1MzlcdTU0MTdcdWZmMWYKKworX1VJX0dyYXBoTW9kZWxXaXphcmRfbGFiZWw9XHU1NmZlCitfVUlfR3JhcGhNb2RlbFdpemFyZF9kZXNjcmlwdGlvbj1cdTViOWFcdTRlNDlcdTRlMDBcdTRlMmFcdTY1YjBcdTc2ODRcdTU2ZmUKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5ncmFwaGdlbmVyYXRvcnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZ3JhcGhnZW5lcmF0b3JzL3ByZXNlbnRhdGlvbi9HcmFwaGdlbmVyYXRvcnNBY3Rpb25CYXJDb250cmlidXRvci5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLmdyYXBoZ2VuZXJhdG9ycy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9ncmFwaGdlbmVyYXRvcnMvcHJlc2VudGF0aW9uL0dyYXBoZ2VuZXJhdG9yc0FjdGlvbkJhckNvbnRyaWJ1dG9yLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTFjYzQ3NAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5ncmFwaGdlbmVyYXRvcnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZ3JhcGhnZW5lcmF0b3JzL3ByZXNlbnRhdGlvbi9HcmFwaGdlbmVyYXRvcnNBY3Rpb25CYXJDb250cmlidXRvci5qYXZhCkBAIC0wLDAgKzEsNDI3IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA5LDIwMTAgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmdyYXBoZ2VuZXJhdG9ycy5wcmVzZW50YXRpb247CisKK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OworaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51aS52aWV3ZXIuSVZpZXdlclByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LmRvbWFpbi5FZGl0aW5nRG9tYWluOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LmRvbWFpbi5JRWRpdGluZ0RvbWFpblByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmFjdGlvbi5Db250cm9sQWN0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmFjdGlvbi5DcmVhdGVDaGlsZEFjdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5hY3Rpb24uQ3JlYXRlU2libGluZ0FjdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5hY3Rpb24uRWRpdGluZ0RvbWFpbkFjdGlvbkJhckNvbnRyaWJ1dG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmFjdGlvbi5Mb2FkUmVzb3VyY2VBY3Rpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkuYWN0aW9uLlZhbGlkYXRlQWN0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5BY3Rpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLkFjdGlvbkNvbnRyaWJ1dGlvbkl0ZW07CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklBY3Rpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklDb250cmlidXRpb25JdGVtOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JQ29udHJpYnV0aW9uTWFuYWdlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSU1lbnVMaXN0ZW5lcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSU1lbnVNYW5hZ2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JVG9vbEJhck1hbmFnZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLk1lbnVNYW5hZ2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5TZXBhcmF0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLlN1YkNvbnRyaWJ1dGlvbkl0ZW07CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb25Qcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTdHJ1Y3R1cmVkU2VsZWN0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuU2VsZWN0aW9uQ2hhbmdlZEV2ZW50OworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuVmlld2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udWkuZ3JhcGhnZW5lcmF0b3JzLnByZXNlbnRhdGlvbi5HcmFwaGdlbmVyYXRvckVkaXRvclBsdWdpbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5JRWRpdG9yUGFydDsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5QYXJ0SW5pdEV4Y2VwdGlvbjsKKworLyoqCisgKiBUaGlzIGlzIHRoZSBhY3Rpb24gYmFyIGNvbnRyaWJ1dG9yIGZvciB0aGUgR3JhcGhnZW5lcmF0b3JzIG1vZGVsIGVkaXRvci4KKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIEdyYXBoZ2VuZXJhdG9yc0FjdGlvbkJhckNvbnRyaWJ1dG9yCisJZXh0ZW5kcyBFZGl0aW5nRG9tYWluQWN0aW9uQmFyQ29udHJpYnV0b3IKKwlpbXBsZW1lbnRzIElTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIgeworCS8qKgorCSAqIFRoaXMga2VlcHMgdHJhY2sgb2YgdGhlIGFjdGl2ZSBlZGl0b3IuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIElFZGl0b3JQYXJ0IGFjdGl2ZUVkaXRvclBhcnQ7CisKKwkvKioKKwkgKiBUaGlzIGtlZXBzIHRyYWNrIG9mIHRoZSBjdXJyZW50IHNlbGVjdGlvbiBwcm92aWRlci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgSVNlbGVjdGlvblByb3ZpZGVyIHNlbGVjdGlvblByb3ZpZGVyOworCisJLyoqCisJICogVGhpcyBhY3Rpb24gb3BlbnMgdGhlIFByb3BlcnRpZXMgdmlldy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgSUFjdGlvbiBzaG93UHJvcGVydGllc1ZpZXdBY3Rpb24gPQorCQluZXcgQWN0aW9uKEdyYXBoZ2VuZXJhdG9yRWRpdG9yUGx1Z2luLklOU1RBTkNFLmdldFN0cmluZygiX1VJX1Nob3dQcm9wZXJ0aWVzVmlld19tZW51X2l0ZW0iKSkgeworCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgdm9pZCBydW4oKSB7CisJCQkJdHJ5IHsKKwkJCQkJZ2V0UGFnZSgpLnNob3dWaWV3KCJvcmcuZWNsaXBzZS51aS52aWV3cy5Qcm9wZXJ0eVNoZWV0Iik7CisJCQkJfQorCQkJCWNhdGNoIChQYXJ0SW5pdEV4Y2VwdGlvbiBleGNlcHRpb24pIHsKKwkJCQkJR3JhcGhnZW5lcmF0b3JFZGl0b3JQbHVnaW4uSU5TVEFOQ0UubG9nKGV4Y2VwdGlvbik7CisJCQkJfQorCQkJfQorCQl9OworCisJLyoqCisJICogVGhpcyBhY3Rpb24gcmVmcmVzaGVzIHRoZSB2aWV3ZXIgb2YgdGhlIGN1cnJlbnQgZWRpdG9yIGlmIHRoZSBlZGl0b3IKKwkgKiBpbXBsZW1lbnRzIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnVpLnZpZXdlci5JVmlld2VyUHJvdmlkZXJ9LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBJQWN0aW9uIHJlZnJlc2hWaWV3ZXJBY3Rpb24gPQorCQluZXcgQWN0aW9uKEdyYXBoZ2VuZXJhdG9yRWRpdG9yUGx1Z2luLklOU1RBTkNFLmdldFN0cmluZygiX1VJX1JlZnJlc2hWaWV3ZXJfbWVudV9pdGVtIikpIHsKKwkJCUBPdmVycmlkZQorCQkJcHVibGljIGJvb2xlYW4gaXNFbmFibGVkKCkgeworCQkJCXJldHVybiBhY3RpdmVFZGl0b3JQYXJ0IGluc3RhbmNlb2YgSVZpZXdlclByb3ZpZGVyOworCQkJfQorCisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyB2b2lkIHJ1bigpIHsKKwkJCQlpZiAoYWN0aXZlRWRpdG9yUGFydCBpbnN0YW5jZW9mIElWaWV3ZXJQcm92aWRlcikgeworCQkJCQlWaWV3ZXIgdmlld2VyID0gKChJVmlld2VyUHJvdmlkZXIpYWN0aXZlRWRpdG9yUGFydCkuZ2V0Vmlld2VyKCk7CisJCQkJCWlmICh2aWV3ZXIgIT0gbnVsbCkgeworCQkJCQkJdmlld2VyLnJlZnJlc2goKTsKKwkJCQkJfQorCQkJCX0KKwkJCX0KKwkJfTsKKworCS8qKgorCSAqIFRoaXMgd2lsbCBjb250YWluIG9uZSB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkuYWN0aW9uLkNyZWF0ZUNoaWxkQWN0aW9ufSBjb3JyZXNwb25kaW5nIHRvIGVhY2ggZGVzY3JpcHRvcgorCSAqIGdlbmVyYXRlZCBmb3IgdGhlIGN1cnJlbnQgc2VsZWN0aW9uIGJ5IHRoZSBpdGVtIHByb3ZpZGVyLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBDb2xsZWN0aW9uPElBY3Rpb24+IGNyZWF0ZUNoaWxkQWN0aW9uczsKKworCS8qKgorCSAqIFRoaXMgaXMgdGhlIG1lbnUgbWFuYWdlciBpbnRvIHdoaWNoIG1lbnUgY29udHJpYnV0aW9uIGl0ZW1zIHNob3VsZCBiZSBhZGRlZCBmb3IgQ3JlYXRlQ2hpbGQgYWN0aW9ucy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgSU1lbnVNYW5hZ2VyIGNyZWF0ZUNoaWxkTWVudU1hbmFnZXI7CisKKwkvKioKKwkgKiBUaGlzIHdpbGwgY29udGFpbiBvbmUge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmFjdGlvbi5DcmVhdGVTaWJsaW5nQWN0aW9ufSBjb3JyZXNwb25kaW5nIHRvIGVhY2ggZGVzY3JpcHRvcgorCSAqIGdlbmVyYXRlZCBmb3IgdGhlIGN1cnJlbnQgc2VsZWN0aW9uIGJ5IHRoZSBpdGVtIHByb3ZpZGVyLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBDb2xsZWN0aW9uPElBY3Rpb24+IGNyZWF0ZVNpYmxpbmdBY3Rpb25zOworCisJLyoqCisJICogVGhpcyBpcyB0aGUgbWVudSBtYW5hZ2VyIGludG8gd2hpY2ggbWVudSBjb250cmlidXRpb24gaXRlbXMgc2hvdWxkIGJlIGFkZGVkIGZvciBDcmVhdGVTaWJsaW5nIGFjdGlvbnMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIElNZW51TWFuYWdlciBjcmVhdGVTaWJsaW5nTWVudU1hbmFnZXI7CisKKwkvKioKKwkgKiBUaGlzIGNyZWF0ZXMgYW4gaW5zdGFuY2Ugb2YgdGhlIGNvbnRyaWJ1dG9yLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBHcmFwaGdlbmVyYXRvcnNBY3Rpb25CYXJDb250cmlidXRvcigpIHsKKwkJc3VwZXIoQURESVRJT05TX0xBU1RfU1RZTEUpOworCQlsb2FkUmVzb3VyY2VBY3Rpb24gPSBuZXcgTG9hZFJlc291cmNlQWN0aW9uKCk7CisJCXZhbGlkYXRlQWN0aW9uID0gbmV3IFZhbGlkYXRlQWN0aW9uKCk7CisJCWNvbnRyb2xBY3Rpb24gPSBuZXcgQ29udHJvbEFjdGlvbigpOworCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyBTZXBhcmF0b3JzIGZvciBlZGl0b3IgYWRkaXRpb25zIHRvIHRoZSB0b29sIGJhci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBjb250cmlidXRlVG9Ub29sQmFyKElUb29sQmFyTWFuYWdlciB0b29sQmFyTWFuYWdlcikgeworCQl0b29sQmFyTWFuYWdlci5hZGQobmV3IFNlcGFyYXRvcigiZ3JhcGhnZW5lcmF0b3JzLXNldHRpbmdzIikpOworCQl0b29sQmFyTWFuYWdlci5hZGQobmV3IFNlcGFyYXRvcigiZ3JhcGhnZW5lcmF0b3JzLWFkZGl0aW9ucyIpKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFkZHMgdG8gdGhlIG1lbnUgYmFyIGEgbWVudSBhbmQgc29tZSBzZXBhcmF0b3JzIGZvciBlZGl0b3IgYWRkaXRpb25zLAorCSAqIGFzIHdlbGwgYXMgdGhlIHN1Yi1tZW51cyBmb3Igb2JqZWN0IGNyZWF0aW9uIGl0ZW1zLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGNvbnRyaWJ1dGVUb01lbnUoSU1lbnVNYW5hZ2VyIG1lbnVNYW5hZ2VyKSB7CisJCXN1cGVyLmNvbnRyaWJ1dGVUb01lbnUobWVudU1hbmFnZXIpOworCisJCUlNZW51TWFuYWdlciBzdWJtZW51TWFuYWdlciA9IG5ldyBNZW51TWFuYWdlcihHcmFwaGdlbmVyYXRvckVkaXRvclBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoIl9VSV9HcmFwaGdlbmVyYXRvcnNFZGl0b3JfbWVudSIpLCAib3JnLmVjbGlwc2Uuc3RlbS5ncmFwaGdlbmVyYXRvcnNNZW51SUQiKTsKKwkJbWVudU1hbmFnZXIuaW5zZXJ0QWZ0ZXIoImFkZGl0aW9ucyIsIHN1Ym1lbnVNYW5hZ2VyKTsKKwkJc3VibWVudU1hbmFnZXIuYWRkKG5ldyBTZXBhcmF0b3IoInNldHRpbmdzIikpOworCQlzdWJtZW51TWFuYWdlci5hZGQobmV3IFNlcGFyYXRvcigiYWN0aW9ucyIpKTsKKwkJc3VibWVudU1hbmFnZXIuYWRkKG5ldyBTZXBhcmF0b3IoImFkZGl0aW9ucyIpKTsKKwkJc3VibWVudU1hbmFnZXIuYWRkKG5ldyBTZXBhcmF0b3IoImFkZGl0aW9ucy1lbmQiKSk7CisKKwkJLy8gUHJlcGFyZSBmb3IgQ3JlYXRlQ2hpbGQgaXRlbSBhZGRpdGlvbiBvciByZW1vdmFsLgorCQkvLworCQljcmVhdGVDaGlsZE1lbnVNYW5hZ2VyID0gbmV3IE1lbnVNYW5hZ2VyKEdyYXBoZ2VuZXJhdG9yRWRpdG9yUGx1Z2luLklOU1RBTkNFLmdldFN0cmluZygiX1VJX0NyZWF0ZUNoaWxkX21lbnVfaXRlbSIpKTsKKwkJc3VibWVudU1hbmFnZXIuaW5zZXJ0QmVmb3JlKCJhZGRpdGlvbnMiLCBjcmVhdGVDaGlsZE1lbnVNYW5hZ2VyKTsKKworCQkvLyBQcmVwYXJlIGZvciBDcmVhdGVTaWJsaW5nIGl0ZW0gYWRkaXRpb24gb3IgcmVtb3ZhbC4KKwkJLy8KKwkJY3JlYXRlU2libGluZ01lbnVNYW5hZ2VyID0gbmV3IE1lbnVNYW5hZ2VyKEdyYXBoZ2VuZXJhdG9yRWRpdG9yUGx1Z2luLklOU1RBTkNFLmdldFN0cmluZygiX1VJX0NyZWF0ZVNpYmxpbmdfbWVudV9pdGVtIikpOworCQlzdWJtZW51TWFuYWdlci5pbnNlcnRCZWZvcmUoImFkZGl0aW9ucyIsIGNyZWF0ZVNpYmxpbmdNZW51TWFuYWdlcik7CisKKwkJLy8gRm9yY2UgYW4gdXBkYXRlIGJlY2F1c2UgRWNsaXBzZSBoaWRlcyBlbXB0eSBtZW51cyBub3cuCisJCS8vCisJCXN1Ym1lbnVNYW5hZ2VyLmFkZE1lbnVMaXN0ZW5lcgorCQkJKG5ldyBJTWVudUxpc3RlbmVyKCkgeworCQkJCSBwdWJsaWMgdm9pZCBtZW51QWJvdXRUb1Nob3coSU1lbnVNYW5hZ2VyIG1lbnVNYW5hZ2VyKSB7CisJCQkJCSBtZW51TWFuYWdlci51cGRhdGVBbGwodHJ1ZSk7CisJCQkJIH0KKwkJCSB9KTsKKworCQlhZGRHbG9iYWxBY3Rpb25zKHN1Ym1lbnVNYW5hZ2VyKTsKKwl9CisKKwkvKioKKwkgKiBXaGVuIHRoZSBhY3RpdmUgZWRpdG9yIGNoYW5nZXMsIHRoaXMgcmVtZW1iZXJzIHRoZSBjaGFuZ2UgYW5kIHJlZ2lzdGVycyB3aXRoIGl0IGFzIGEgc2VsZWN0aW9uIHByb3ZpZGVyLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIHNldEFjdGl2ZUVkaXRvcihJRWRpdG9yUGFydCBwYXJ0KSB7CisJCXN1cGVyLnNldEFjdGl2ZUVkaXRvcihwYXJ0KTsKKwkJYWN0aXZlRWRpdG9yUGFydCA9IHBhcnQ7CisKKwkJLy8gU3dpdGNoIHRvIHRoZSBuZXcgc2VsZWN0aW9uIHByb3ZpZGVyLgorCQkvLworCQlpZiAoc2VsZWN0aW9uUHJvdmlkZXIgIT0gbnVsbCkgeworCQkJc2VsZWN0aW9uUHJvdmlkZXIucmVtb3ZlU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyKHRoaXMpOworCQl9CisJCWlmIChwYXJ0ID09IG51bGwpIHsKKwkJCXNlbGVjdGlvblByb3ZpZGVyID0gbnVsbDsKKwkJfQorCQllbHNlIHsKKwkJCXNlbGVjdGlvblByb3ZpZGVyID0gcGFydC5nZXRTaXRlKCkuZ2V0U2VsZWN0aW9uUHJvdmlkZXIoKTsKKwkJCXNlbGVjdGlvblByb3ZpZGVyLmFkZFNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcih0aGlzKTsKKworCQkJLy8gRmFrZSBhIHNlbGVjdGlvbiBjaGFuZ2VkIGV2ZW50IHRvIHVwZGF0ZSB0aGUgbWVudXMuCisJCQkvLworCQkJaWYgKHNlbGVjdGlvblByb3ZpZGVyLmdldFNlbGVjdGlvbigpICE9IG51bGwpIHsKKwkJCQlzZWxlY3Rpb25DaGFuZ2VkKG5ldyBTZWxlY3Rpb25DaGFuZ2VkRXZlbnQoc2VsZWN0aW9uUHJvdmlkZXIsIHNlbGVjdGlvblByb3ZpZGVyLmdldFNlbGVjdGlvbigpKSk7CisJCQl9CisJCX0KKwl9CisKKwkvKioKKwkgKiBUaGlzIGltcGxlbWVudHMge0BsaW5rIG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcn0sCisJICogaGFuZGxpbmcge0BsaW5rIG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuU2VsZWN0aW9uQ2hhbmdlZEV2ZW50fXMgYnkgcXVlcnlpbmcgZm9yIHRoZSBjaGlsZHJlbiBhbmQgc2libGluZ3MKKwkgKiB0aGF0IGNhbiBiZSBhZGRlZCB0byB0aGUgc2VsZWN0ZWQgb2JqZWN0IGFuZCB1cGRhdGluZyB0aGUgbWVudXMgYWNjb3JkaW5nbHkuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgc2VsZWN0aW9uQ2hhbmdlZChTZWxlY3Rpb25DaGFuZ2VkRXZlbnQgZXZlbnQpIHsKKwkJLy8gUmVtb3ZlIGFueSBtZW51IGl0ZW1zIGZvciBvbGQgc2VsZWN0aW9uLgorCQkvLworCQlpZiAoY3JlYXRlQ2hpbGRNZW51TWFuYWdlciAhPSBudWxsKSB7CisJCQlkZXBvcHVsYXRlTWFuYWdlcihjcmVhdGVDaGlsZE1lbnVNYW5hZ2VyLCBjcmVhdGVDaGlsZEFjdGlvbnMpOworCQl9CisJCWlmIChjcmVhdGVTaWJsaW5nTWVudU1hbmFnZXIgIT0gbnVsbCkgeworCQkJZGVwb3B1bGF0ZU1hbmFnZXIoY3JlYXRlU2libGluZ01lbnVNYW5hZ2VyLCBjcmVhdGVTaWJsaW5nQWN0aW9ucyk7CisJCX0KKworCQkvLyBRdWVyeSB0aGUgbmV3IHNlbGVjdGlvbiBmb3IgYXBwcm9wcmlhdGUgbmV3IGNoaWxkL3NpYmxpbmcgZGVzY3JpcHRvcnMKKwkJLy8KKwkJQ29sbGVjdGlvbjw/PiBuZXdDaGlsZERlc2NyaXB0b3JzID0gbnVsbDsKKwkJQ29sbGVjdGlvbjw/PiBuZXdTaWJsaW5nRGVzY3JpcHRvcnMgPSBudWxsOworCisJCUlTZWxlY3Rpb24gc2VsZWN0aW9uID0gZXZlbnQuZ2V0U2VsZWN0aW9uKCk7CisJCWlmIChzZWxlY3Rpb24gaW5zdGFuY2VvZiBJU3RydWN0dXJlZFNlbGVjdGlvbiAmJiAoKElTdHJ1Y3R1cmVkU2VsZWN0aW9uKXNlbGVjdGlvbikuc2l6ZSgpID09IDEpIHsKKwkJCU9iamVjdCBvYmplY3QgPSAoKElTdHJ1Y3R1cmVkU2VsZWN0aW9uKXNlbGVjdGlvbikuZ2V0Rmlyc3RFbGVtZW50KCk7CisKKwkJCUVkaXRpbmdEb21haW4gZG9tYWluID0gKChJRWRpdGluZ0RvbWFpblByb3ZpZGVyKWFjdGl2ZUVkaXRvclBhcnQpLmdldEVkaXRpbmdEb21haW4oKTsKKworCQkJbmV3Q2hpbGREZXNjcmlwdG9ycyA9IGRvbWFpbi5nZXROZXdDaGlsZERlc2NyaXB0b3JzKG9iamVjdCwgbnVsbCk7CisJCQluZXdTaWJsaW5nRGVzY3JpcHRvcnMgPSBkb21haW4uZ2V0TmV3Q2hpbGREZXNjcmlwdG9ycyhudWxsLCBvYmplY3QpOworCQl9CisKKwkJLy8gR2VuZXJhdGUgYWN0aW9ucyBmb3Igc2VsZWN0aW9uOyBwb3B1bGF0ZSBhbmQgcmVkcmF3IHRoZSBtZW51cy4KKwkJLy8KKwkJY3JlYXRlQ2hpbGRBY3Rpb25zID0gZ2VuZXJhdGVDcmVhdGVDaGlsZEFjdGlvbnMobmV3Q2hpbGREZXNjcmlwdG9ycywgc2VsZWN0aW9uKTsKKwkJY3JlYXRlU2libGluZ0FjdGlvbnMgPSBnZW5lcmF0ZUNyZWF0ZVNpYmxpbmdBY3Rpb25zKG5ld1NpYmxpbmdEZXNjcmlwdG9ycywgc2VsZWN0aW9uKTsKKworCQlpZiAoY3JlYXRlQ2hpbGRNZW51TWFuYWdlciAhPSBudWxsKSB7CisJCQlwb3B1bGF0ZU1hbmFnZXIoY3JlYXRlQ2hpbGRNZW51TWFuYWdlciwgY3JlYXRlQ2hpbGRBY3Rpb25zLCBudWxsKTsKKwkJCWNyZWF0ZUNoaWxkTWVudU1hbmFnZXIudXBkYXRlKHRydWUpOworCQl9CisJCWlmIChjcmVhdGVTaWJsaW5nTWVudU1hbmFnZXIgIT0gbnVsbCkgeworCQkJcG9wdWxhdGVNYW5hZ2VyKGNyZWF0ZVNpYmxpbmdNZW51TWFuYWdlciwgY3JlYXRlU2libGluZ0FjdGlvbnMsIG51bGwpOworCQkJY3JlYXRlU2libGluZ01lbnVNYW5hZ2VyLnVwZGF0ZSh0cnVlKTsKKwkJfQorCX0KKworCS8qKgorCSAqIFRoaXMgZ2VuZXJhdGVzIGEge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmFjdGlvbi5DcmVhdGVDaGlsZEFjdGlvbn0gZm9yIGVhY2ggb2JqZWN0IGluIDxjb2RlPmRlc2NyaXB0b3JzPC9jb2RlPiwKKwkgKiBhbmQgcmV0dXJucyB0aGUgY29sbGVjdGlvbiBvZiB0aGVzZSBhY3Rpb25zLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBDb2xsZWN0aW9uPElBY3Rpb24+IGdlbmVyYXRlQ3JlYXRlQ2hpbGRBY3Rpb25zKENvbGxlY3Rpb248Pz4gZGVzY3JpcHRvcnMsIElTZWxlY3Rpb24gc2VsZWN0aW9uKSB7CisJCUNvbGxlY3Rpb248SUFjdGlvbj4gYWN0aW9ucyA9IG5ldyBBcnJheUxpc3Q8SUFjdGlvbj4oKTsKKwkJaWYgKGRlc2NyaXB0b3JzICE9IG51bGwpIHsKKwkJCWZvciAoT2JqZWN0IGRlc2NyaXB0b3IgOiBkZXNjcmlwdG9ycykgeworCQkJCWFjdGlvbnMuYWRkKG5ldyBDcmVhdGVDaGlsZEFjdGlvbihhY3RpdmVFZGl0b3JQYXJ0LCBzZWxlY3Rpb24sIGRlc2NyaXB0b3IpKTsKKwkJCX0KKwkJfQorCQlyZXR1cm4gYWN0aW9uczsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGdlbmVyYXRlcyBhIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5hY3Rpb24uQ3JlYXRlU2libGluZ0FjdGlvbn0gZm9yIGVhY2ggb2JqZWN0IGluIDxjb2RlPmRlc2NyaXB0b3JzPC9jb2RlPiwKKwkgKiBhbmQgcmV0dXJucyB0aGUgY29sbGVjdGlvbiBvZiB0aGVzZSBhY3Rpb25zLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBDb2xsZWN0aW9uPElBY3Rpb24+IGdlbmVyYXRlQ3JlYXRlU2libGluZ0FjdGlvbnMoQ29sbGVjdGlvbjw/PiBkZXNjcmlwdG9ycywgSVNlbGVjdGlvbiBzZWxlY3Rpb24pIHsKKwkJQ29sbGVjdGlvbjxJQWN0aW9uPiBhY3Rpb25zID0gbmV3IEFycmF5TGlzdDxJQWN0aW9uPigpOworCQlpZiAoZGVzY3JpcHRvcnMgIT0gbnVsbCkgeworCQkJZm9yIChPYmplY3QgZGVzY3JpcHRvciA6IGRlc2NyaXB0b3JzKSB7CisJCQkJYWN0aW9ucy5hZGQobmV3IENyZWF0ZVNpYmxpbmdBY3Rpb24oYWN0aXZlRWRpdG9yUGFydCwgc2VsZWN0aW9uLCBkZXNjcmlwdG9yKSk7CisJCQl9CisJCX0KKwkJcmV0dXJuIGFjdGlvbnM7CisJfQorCisJLyoqCisJICogVGhpcyBwb3B1bGF0ZXMgdGhlIHNwZWNpZmllZCA8Y29kZT5tYW5hZ2VyPC9jb2RlPiB3aXRoIHtAbGluayBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uQWN0aW9uQ29udHJpYnV0aW9uSXRlbX1zCisJICogYmFzZWQgb24gdGhlIHtAbGluayBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSUFjdGlvbn1zIGNvbnRhaW5lZCBpbiB0aGUgPGNvZGU+YWN0aW9uczwvY29kZT4gY29sbGVjdGlvbiwKKwkgKiBieSBpbnNlcnRpbmcgdGhlbSBiZWZvcmUgdGhlIHNwZWNpZmllZCBjb250cmlidXRpb24gaXRlbSA8Y29kZT5jb250cmlidXRpb25JRDwvY29kZT4uCisJICogSWYgPGNvZGU+Y29udHJpYnV0aW9uSUQ8L2NvZGU+IGlzIDxjb2RlPm51bGw8L2NvZGU+LCB0aGV5IGFyZSBzaW1wbHkgYWRkZWQuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgcG9wdWxhdGVNYW5hZ2VyKElDb250cmlidXRpb25NYW5hZ2VyIG1hbmFnZXIsIENvbGxlY3Rpb248PyBleHRlbmRzIElBY3Rpb24+IGFjdGlvbnMsIFN0cmluZyBjb250cmlidXRpb25JRCkgeworCQlpZiAoYWN0aW9ucyAhPSBudWxsKSB7CisJCQlmb3IgKElBY3Rpb24gYWN0aW9uIDogYWN0aW9ucykgeworCQkJCWlmIChjb250cmlidXRpb25JRCAhPSBudWxsKSB7CisJCQkJCW1hbmFnZXIuaW5zZXJ0QmVmb3JlKGNvbnRyaWJ1dGlvbklELCBhY3Rpb24pOworCQkJCX0KKwkJCQllbHNlIHsKKwkJCQkJbWFuYWdlci5hZGQoYWN0aW9uKTsKKwkJCQl9CisJCQl9CisJCX0KKwl9CisJCQorCS8qKgorCSAqIFRoaXMgcmVtb3ZlcyBmcm9tIHRoZSBzcGVjaWZpZWQgPGNvZGU+bWFuYWdlcjwvY29kZT4gYWxsIHtAbGluayBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uQWN0aW9uQ29udHJpYnV0aW9uSXRlbX1zCisJICogYmFzZWQgb24gdGhlIHtAbGluayBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSUFjdGlvbn1zIGNvbnRhaW5lZCBpbiB0aGUgPGNvZGU+YWN0aW9uczwvY29kZT4gY29sbGVjdGlvbi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBkZXBvcHVsYXRlTWFuYWdlcihJQ29udHJpYnV0aW9uTWFuYWdlciBtYW5hZ2VyLCBDb2xsZWN0aW9uPD8gZXh0ZW5kcyBJQWN0aW9uPiBhY3Rpb25zKSB7CisJCWlmIChhY3Rpb25zICE9IG51bGwpIHsKKwkJCUlDb250cmlidXRpb25JdGVtW10gaXRlbXMgPSBtYW5hZ2VyLmdldEl0ZW1zKCk7CisJCQlmb3IgKGludCBpID0gMDsgaSA8IGl0ZW1zLmxlbmd0aDsgaSsrKSB7CisJCQkJLy8gTG9vayBpbnRvIFN1YkNvbnRyaWJ1dGlvbkl0ZW1zCisJCQkJLy8KKwkJCQlJQ29udHJpYnV0aW9uSXRlbSBjb250cmlidXRpb25JdGVtID0gaXRlbXNbaV07CisJCQkJd2hpbGUgKGNvbnRyaWJ1dGlvbkl0ZW0gaW5zdGFuY2VvZiBTdWJDb250cmlidXRpb25JdGVtKSB7CisJCQkJCWNvbnRyaWJ1dGlvbkl0ZW0gPSAoKFN1YkNvbnRyaWJ1dGlvbkl0ZW0pY29udHJpYnV0aW9uSXRlbSkuZ2V0SW5uZXJJdGVtKCk7CisJCQkJfQorCisJCQkJLy8gRGVsZXRlIHRoZSBBY3Rpb25Db250cmlidXRpb25JdGVtcyB3aXRoIG1hdGNoaW5nIGFjdGlvbi4KKwkJCQkvLworCQkJCWlmIChjb250cmlidXRpb25JdGVtIGluc3RhbmNlb2YgQWN0aW9uQ29udHJpYnV0aW9uSXRlbSkgeworCQkJCQlJQWN0aW9uIGFjdGlvbiA9ICgoQWN0aW9uQ29udHJpYnV0aW9uSXRlbSljb250cmlidXRpb25JdGVtKS5nZXRBY3Rpb24oKTsKKwkJCQkJaWYgKGFjdGlvbnMuY29udGFpbnMoYWN0aW9uKSkgeworCQkJCQkJbWFuYWdlci5yZW1vdmUoY29udHJpYnV0aW9uSXRlbSk7CisJCQkJCX0KKwkJCQl9CisJCQl9CisJCX0KKwl9CisKKwkvKioKKwkgKiBUaGlzIHBvcHVsYXRlcyB0aGUgcG9wLXVwIG1lbnUgYmVmb3JlIGl0IGFwcGVhcnMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgbWVudUFib3V0VG9TaG93KElNZW51TWFuYWdlciBtZW51TWFuYWdlcikgeworCQlzdXBlci5tZW51QWJvdXRUb1Nob3cobWVudU1hbmFnZXIpOworCQlNZW51TWFuYWdlciBzdWJtZW51TWFuYWdlciA9IG51bGw7CisKKwkJc3VibWVudU1hbmFnZXIgPSBuZXcgTWVudU1hbmFnZXIoR3JhcGhnZW5lcmF0b3JFZGl0b3JQbHVnaW4uSU5TVEFOQ0UuZ2V0U3RyaW5nKCJfVUlfQ3JlYXRlQ2hpbGRfbWVudV9pdGVtIikpOworCQlwb3B1bGF0ZU1hbmFnZXIoc3VibWVudU1hbmFnZXIsIGNyZWF0ZUNoaWxkQWN0aW9ucywgbnVsbCk7CisJCW1lbnVNYW5hZ2VyLmluc2VydEJlZm9yZSgiZWRpdCIsIHN1Ym1lbnVNYW5hZ2VyKTsKKworCQlzdWJtZW51TWFuYWdlciA9IG5ldyBNZW51TWFuYWdlcihHcmFwaGdlbmVyYXRvckVkaXRvclBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoIl9VSV9DcmVhdGVTaWJsaW5nX21lbnVfaXRlbSIpKTsKKwkJcG9wdWxhdGVNYW5hZ2VyKHN1Ym1lbnVNYW5hZ2VyLCBjcmVhdGVTaWJsaW5nQWN0aW9ucywgbnVsbCk7CisJCW1lbnVNYW5hZ2VyLmluc2VydEJlZm9yZSgiZWRpdCIsIHN1Ym1lbnVNYW5hZ2VyKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGluc2VydHMgZ2xvYmFsIGFjdGlvbnMgYmVmb3JlIHRoZSAiYWRkaXRpb25zLWVuZCIgc2VwYXJhdG9yLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIGFkZEdsb2JhbEFjdGlvbnMoSU1lbnVNYW5hZ2VyIG1lbnVNYW5hZ2VyKSB7CisJCW1lbnVNYW5hZ2VyLmluc2VydEFmdGVyKCJhZGRpdGlvbnMtZW5kIiwgbmV3IFNlcGFyYXRvcigidWktYWN0aW9ucyIpKTsKKwkJbWVudU1hbmFnZXIuaW5zZXJ0QWZ0ZXIoInVpLWFjdGlvbnMiLCBzaG93UHJvcGVydGllc1ZpZXdBY3Rpb24pOworCisJCXJlZnJlc2hWaWV3ZXJBY3Rpb24uc2V0RW5hYmxlZChyZWZyZXNoVmlld2VyQWN0aW9uLmlzRW5hYmxlZCgpKTsJCQorCQltZW51TWFuYWdlci5pbnNlcnRBZnRlcigidWktYWN0aW9ucyIsIHJlZnJlc2hWaWV3ZXJBY3Rpb24pOworCisJCXN1cGVyLmFkZEdsb2JhbEFjdGlvbnMobWVudU1hbmFnZXIpOworCX0KKworCS8qKgorCSAqIFRoaXMgZW5zdXJlcyB0aGF0IGEgZGVsZXRlIGFjdGlvbiB3aWxsIGNsZWFuIHVwIGFsbCByZWZlcmVuY2VzIHRvIGRlbGV0ZWQgb2JqZWN0cy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgYm9vbGVhbiByZW1vdmVBbGxSZWZlcmVuY2VzT25EZWxldGUoKSB7CisJCXJldHVybiB0cnVlOworCX0KKworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5ncmFwaGdlbmVyYXRvcnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZ3JhcGhnZW5lcmF0b3JzL3ByZXNlbnRhdGlvbi9HcmFwaGdlbmVyYXRvcnNFZGl0b3IuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5ncmFwaGdlbmVyYXRvcnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZ3JhcGhnZW5lcmF0b3JzL3ByZXNlbnRhdGlvbi9HcmFwaGdlbmVyYXRvcnNFZGl0b3IuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZTA2YzAzCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLmdyYXBoZ2VuZXJhdG9ycy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9ncmFwaGdlbmVyYXRvcnMvcHJlc2VudGF0aW9uL0dyYXBoZ2VuZXJhdG9yc0VkaXRvci5qYXZhCkBAIC0wLDAgKzEsMTc5OSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOSwyMDEwIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaGdlbmVyYXRvcnMucHJlc2VudGF0aW9uOworCisKK2ltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOworaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW07CitpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbnM7CitpbXBvcnQgamF2YS51dGlsLkV2ZW50T2JqZWN0OworaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOworaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKK2ltcG9ydCBqYXZhLnV0aWwuTGlua2VkSGFzaE1hcDsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuTWFwOworCitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUZpbGU7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSU1hcmtlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUmVzb3VyY2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVJlc291cmNlQ2hhbmdlRXZlbnQ7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVJlc291cmNlQ2hhbmdlTGlzdGVuZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVJlc291cmNlRGVsdGE7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVJlc291cmNlRGVsdGFWaXNpdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLlJlc291cmNlc1BsdWdpbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQ29yZUV4Y2VwdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVBhdGg7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQcm9ncmVzc01vbml0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLk51bGxQcm9ncmVzc01vbml0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5jb21tYW5kLkJhc2ljQ29tbWFuZFN0YWNrOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24uY29tbWFuZC5Db21tYW5kOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24uY29tbWFuZC5Db21tYW5kU3RhY2s7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5jb21tYW5kLkNvbW1hbmRTdGFja0xpc3RlbmVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LkFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnVpLk1hcmtlckhlbHBlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnVpLlZpZXdlclBhbmU7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51aS5lZGl0b3IuUHJvYmxlbUVkaXRvclBhcnQ7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51aS52aWV3ZXIuSVZpZXdlclByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5CYXNpY0RpYWdub3N0aWM7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLkRpYWdub3N0aWM7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlVSSTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRVZhbGlkYXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUucHJvdmlkZXIuRWNvcmVJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUucmVzb3VyY2UuUmVzb3VyY2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnJlc291cmNlLlJlc291cmNlU2V0OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS51dGlsLkVDb250ZW50QWRhcHRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUudXRpbC5FY29yZVV0aWw7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQuZG9tYWluLkFkYXB0ZXJGYWN0b3J5RWRpdGluZ0RvbWFpbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5kb21haW4uRWRpdGluZ0RvbWFpbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5kb21haW4uSUVkaXRpbmdEb21haW5Qcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5BZGFwdGVyRmFjdG9yeUl0ZW1EZWxlZ2F0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuQ29tcG9zZWRBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5SZWZsZWN0aXZlSXRlbVByb3ZpZGVyQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIucmVzb3VyY2UuUmVzb3VyY2VJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5hY3Rpb24uRWRpdGluZ0RvbWFpbkFjdGlvbkJhckNvbnRyaWJ1dG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmNlbGxlZGl0b3IuQWRhcHRlckZhY3RvcnlUcmVlRWRpdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmRuZC5FZGl0aW5nRG9tYWluVmlld2VyRHJvcEFkYXB0ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkuZG5kLkxvY2FsVHJhbnNmZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkuZG5kLlZpZXdlckRyYWdBZGFwdGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLnByb3ZpZGVyLkFkYXB0ZXJGYWN0b3J5Q29udGVudFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLnByb3ZpZGVyLkFkYXB0ZXJGYWN0b3J5TGFiZWxQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5wcm92aWRlci5VbndyYXBwaW5nU2VsZWN0aW9uUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkudXRpbC5FZGl0VUlNYXJrZXJIZWxwZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkudXRpbC5FZGl0VUlVdGlsOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLnZpZXcuRXh0ZW5kZWRQcm9wZXJ0eVNoZWV0UGFnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSU1lbnVMaXN0ZW5lcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSU1lbnVNYW5hZ2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JU3RhdHVzTGluZU1hbmFnZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklUb29sQmFyTWFuYWdlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uTWVudU1hbmFnZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLlNlcGFyYXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5kaWFsb2dzLk1lc3NhZ2VEaWFsb2c7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuZGlhbG9ncy5Qcm9ncmVzc01vbml0b3JEaWFsb2c7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5Db2x1bW5XZWlnaHREYXRhOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU3RydWN0dXJlZFNlbGVjdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLkxpc3RWaWV3ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5TZWxlY3Rpb25DaGFuZ2VkRXZlbnQ7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5TdHJ1Y3R1cmVkU2VsZWN0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuU3RydWN0dXJlZFZpZXdlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlRhYmxlTGF5b3V0OworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuVGFibGVWaWV3ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5UcmVlVmlld2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuVmlld2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24ucHJvdmlkZXIuQ29tbW9uSXRlbVByb3ZpZGVyQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLnByb3ZpZGVyLkdyYXBoSXRlbVByb3ZpZGVyQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLnByb3ZpZGVyLk1vZGVsSXRlbVByb3ZpZGVyQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLnByb3ZpZGVyLk1vZGlmaWVySXRlbVByb3ZpZGVyQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNjZW5hcmlvLnByb3ZpZGVyLlNjZW5hcmlvSXRlbVByb3ZpZGVyQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNlcXVlbmNlci5wcm92aWRlci5TZXF1ZW5jZXJJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc29sdmVyLnByb3ZpZGVyLlNvbHZlckl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhnZW5lcmF0b3JzLnByb3ZpZGVyLkdyYXBoZ2VuZXJhdG9yc0l0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udWkuZ3JhcGhnZW5lcmF0b3JzLnByZXNlbnRhdGlvbi5HcmFwaGdlbmVyYXRvckVkaXRvclBsdWdpbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuU1dUOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5jdXN0b20uQ1RhYkZvbGRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZG5kLkRORDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZG5kLlRyYW5zZmVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuQ29udHJvbEFkYXB0ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5Db250cm9sRXZlbnQ7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmdyYXBoaWNzLlBvaW50OworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5sYXlvdXQuRmlsbExheW91dDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuTWVudTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5UYWJsZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5UYWJsZUNvbHVtbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5UcmVlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlRyZWVDb2x1bW47CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuSUFjdGlvbkJhcnM7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuSUVkaXRvcklucHV0OworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklFZGl0b3JQYXJ0OworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklFZGl0b3JTaXRlOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklQYXJ0TGlzdGVuZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaFBhcnQ7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuUGFydEluaXRFeGNlcHRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuYWN0aW9ucy5Xb3Jrc3BhY2VNb2RpZnlPcGVyYXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuZGlhbG9ncy5TYXZlQXNEaWFsb2c7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuaWRlLklHb3RvTWFya2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLnBhcnQuRmlsZUVkaXRvcklucHV0OworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLnBhcnQuTXVsdGlQYWdlRWRpdG9yUGFydDsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS52aWV3cy5jb250ZW50b3V0bGluZS5Db250ZW50T3V0bGluZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS52aWV3cy5jb250ZW50b3V0bGluZS5Db250ZW50T3V0bGluZVBhZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkudmlld3MuY29udGVudG91dGxpbmUuSUNvbnRlbnRPdXRsaW5lUGFnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS52aWV3cy5wcm9wZXJ0aWVzLklQcm9wZXJ0eVNoZWV0UGFnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS52aWV3cy5wcm9wZXJ0aWVzLlByb3BlcnR5U2hlZXQ7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkudmlld3MucHJvcGVydGllcy5Qcm9wZXJ0eVNoZWV0UGFnZTsKKworCisvKioKKyAqIFRoaXMgaXMgYW4gZXhhbXBsZSBvZiBhIEdyYXBoZ2VuZXJhdG9ycyBtb2RlbCBlZGl0b3IuCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBHcmFwaGdlbmVyYXRvcnNFZGl0b3IKKwlleHRlbmRzIE11bHRpUGFnZUVkaXRvclBhcnQKKwlpbXBsZW1lbnRzIElFZGl0aW5nRG9tYWluUHJvdmlkZXIsIElTZWxlY3Rpb25Qcm92aWRlciwgSU1lbnVMaXN0ZW5lciwgSVZpZXdlclByb3ZpZGVyLCBJR290b01hcmtlciB7CisJLyoqCisJICogVGhpcyBrZWVwcyB0cmFjayBvZiB0aGUgZWRpdGluZyBkb21haW4gdGhhdCBpcyB1c2VkIHRvIHRyYWNrIGFsbCBjaGFuZ2VzIHRvIHRoZSBtb2RlbC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgQWRhcHRlckZhY3RvcnlFZGl0aW5nRG9tYWluIGVkaXRpbmdEb21haW47CisKKwkvKioKKwkgKiBUaGlzIGlzIHRoZSBvbmUgYWRhcHRlciBmYWN0b3J5IHVzZWQgZm9yIHByb3ZpZGluZyB2aWV3cyBvZiB0aGUgbW9kZWwuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIENvbXBvc2VkQWRhcHRlckZhY3RvcnkgYWRhcHRlckZhY3Rvcnk7CisKKwkvKioKKwkgKiBUaGlzIGlzIHRoZSBjb250ZW50IG91dGxpbmUgcGFnZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgSUNvbnRlbnRPdXRsaW5lUGFnZSBjb250ZW50T3V0bGluZVBhZ2U7CisKKwkvKioKKwkgKiBUaGlzIGlzIGEga2x1ZGdlLi4uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIElTdGF0dXNMaW5lTWFuYWdlciBjb250ZW50T3V0bGluZVN0YXR1c0xpbmVNYW5hZ2VyOworCisJLyoqCisJICogVGhpcyBpcyB0aGUgY29udGVudCBvdXRsaW5lIHBhZ2UncyB2aWV3ZXIuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIFRyZWVWaWV3ZXIgY29udGVudE91dGxpbmVWaWV3ZXI7CisKKwkvKioKKwkgKiBUaGlzIGlzIHRoZSBwcm9wZXJ0eSBzaGVldCBwYWdlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBQcm9wZXJ0eVNoZWV0UGFnZSBwcm9wZXJ0eVNoZWV0UGFnZTsKKworCS8qKgorCSAqIFRoaXMgaXMgdGhlIHZpZXdlciB0aGF0IHNoYWRvd3MgdGhlIHNlbGVjdGlvbiBpbiB0aGUgY29udGVudCBvdXRsaW5lLgorCSAqIFRoZSBwYXJlbnQgcmVsYXRpb24gbXVzdCBiZSBjb3JyZWN0bHkgZGVmaW5lZCBmb3IgdGhpcyB0byB3b3JrLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBUcmVlVmlld2VyIHNlbGVjdGlvblZpZXdlcjsKKworCS8qKgorCSAqIFRoaXMgaW52ZXJ0cyB0aGUgcm9sbCBvZiBwYXJlbnQgYW5kIGNoaWxkIGluIHRoZSBjb250ZW50IHByb3ZpZGVyIGFuZCBzaG93IHBhcmVudHMgYXMgYSB0cmVlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBUcmVlVmlld2VyIHBhcmVudFZpZXdlcjsKKworCS8qKgorCSAqIFRoaXMgc2hvd3MgaG93IGEgdHJlZSB2aWV3IHdvcmtzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBUcmVlVmlld2VyIHRyZWVWaWV3ZXI7CisKKwkvKioKKwkgKiBUaGlzIHNob3dzIGhvdyBhIGxpc3QgdmlldyB3b3Jrcy4KKwkgKiBBIGxpc3Qgdmlld2VyIGRvZXNuJ3Qgc3VwcG9ydCBpY29ucy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgTGlzdFZpZXdlciBsaXN0Vmlld2VyOworCisJLyoqCisJICogVGhpcyBzaG93cyBob3cgYSB0YWJsZSB2aWV3IHdvcmtzLgorCSAqIEEgdGFibGUgY2FuIGJlIHVzZWQgYXMgYSBsaXN0IHdpdGggaWNvbnMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIFRhYmxlVmlld2VyIHRhYmxlVmlld2VyOworCisJLyoqCisJICogVGhpcyBzaG93cyBob3cgYSB0cmVlIHZpZXcgd2l0aCBjb2x1bW5zIHdvcmtzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBUcmVlVmlld2VyIHRyZWVWaWV3ZXJXaXRoQ29sdW1uczsKKworCS8qKgorCSAqIFRoaXMga2VlcHMgdHJhY2sgb2YgdGhlIGFjdGl2ZSB2aWV3ZXIgcGFuZSwgaW4gdGhlIGJvb2suCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIFZpZXdlclBhbmUgY3VycmVudFZpZXdlclBhbmU7CisKKwkvKioKKwkgKiBUaGlzIGtlZXBzIHRyYWNrIG9mIHRoZSBhY3RpdmUgY29udGVudCB2aWV3ZXIsIHdoaWNoIG1heSBiZSBlaXRoZXIgb25lIG9mIHRoZSB2aWV3ZXJzIGluIHRoZSBwYWdlcyBvciB0aGUgY29udGVudCBvdXRsaW5lIHZpZXdlci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgVmlld2VyIGN1cnJlbnRWaWV3ZXI7CisKKwkvKioKKwkgKiBUaGlzIGxpc3RlbnMgdG8gd2hpY2ggZXZlciB2aWV3ZXIgaXMgYWN0aXZlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBJU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyIHNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcjsKKworCS8qKgorCSAqIFRoaXMga2VlcHMgdHJhY2sgb2YgYWxsIHRoZSB7QGxpbmsgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyfXMgdGhhdCBhcmUgbGlzdGVuaW5nIHRvIHRoaXMgZWRpdG9yLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBDb2xsZWN0aW9uPElTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXI+IHNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcnMgPSBuZXcgQXJyYXlMaXN0PElTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXI+KCk7CisKKwkvKioKKwkgKiBUaGlzIGtlZXBzIHRyYWNrIG9mIHRoZSBzZWxlY3Rpb24gb2YgdGhlIGVkaXRvciBhcyBhIHdob2xlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBJU2VsZWN0aW9uIGVkaXRvclNlbGVjdGlvbiA9IFN0cnVjdHVyZWRTZWxlY3Rpb24uRU1QVFk7CisKKwkvKioKKwkgKiBUaGUgTWFya2VySGVscGVyIGlzIHJlc3BvbnNpYmxlIGZvciBjcmVhdGluZyB3b3Jrc3BhY2UgcmVzb3VyY2UgbWFya2VycyBwcmVzZW50ZWQKKwkgKiBpbiBFY2xpcHNlJ3MgUHJvYmxlbXMgVmlldy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgTWFya2VySGVscGVyIG1hcmtlckhlbHBlciA9IG5ldyBFZGl0VUlNYXJrZXJIZWxwZXIoKTsKKworCS8qKgorCSAqIFRoaXMgbGlzdGVucyBmb3Igd2hlbiB0aGUgb3V0bGluZSBiZWNvbWVzIGFjdGl2ZQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBJUGFydExpc3RlbmVyIHBhcnRMaXN0ZW5lciA9CisJCW5ldyBJUGFydExpc3RlbmVyKCkgeworCQkJcHVibGljIHZvaWQgcGFydEFjdGl2YXRlZChJV29ya2JlbmNoUGFydCBwKSB7CisJCQkJaWYgKHAgaW5zdGFuY2VvZiBDb250ZW50T3V0bGluZSkgeworCQkJCQlpZiAoKChDb250ZW50T3V0bGluZSlwKS5nZXRDdXJyZW50UGFnZSgpID09IGNvbnRlbnRPdXRsaW5lUGFnZSkgeworCQkJCQkJZ2V0QWN0aW9uQmFyQ29udHJpYnV0b3IoKS5zZXRBY3RpdmVFZGl0b3IoR3JhcGhnZW5lcmF0b3JzRWRpdG9yLnRoaXMpOworCisJCQkJCQlzZXRDdXJyZW50Vmlld2VyKGNvbnRlbnRPdXRsaW5lVmlld2VyKTsKKwkJCQkJfQorCQkJCX0KKwkJCQllbHNlIGlmIChwIGluc3RhbmNlb2YgUHJvcGVydHlTaGVldCkgeworCQkJCQlpZiAoKChQcm9wZXJ0eVNoZWV0KXApLmdldEN1cnJlbnRQYWdlKCkgPT0gcHJvcGVydHlTaGVldFBhZ2UpIHsKKwkJCQkJCWdldEFjdGlvbkJhckNvbnRyaWJ1dG9yKCkuc2V0QWN0aXZlRWRpdG9yKEdyYXBoZ2VuZXJhdG9yc0VkaXRvci50aGlzKTsKKwkJCQkJCWhhbmRsZUFjdGl2YXRlKCk7CisJCQkJCX0KKwkJCQl9CisJCQkJZWxzZSBpZiAocCA9PSBHcmFwaGdlbmVyYXRvcnNFZGl0b3IudGhpcykgeworCQkJCQloYW5kbGVBY3RpdmF0ZSgpOworCQkJCX0KKwkJCX0KKwkJCXB1YmxpYyB2b2lkIHBhcnRCcm91Z2h0VG9Ub3AoSVdvcmtiZW5jaFBhcnQgcCkgeworCQkJCS8vIElnbm9yZS4KKwkJCX0KKwkJCXB1YmxpYyB2b2lkIHBhcnRDbG9zZWQoSVdvcmtiZW5jaFBhcnQgcCkgeworCQkJCS8vIElnbm9yZS4KKwkJCX0KKwkJCXB1YmxpYyB2b2lkIHBhcnREZWFjdGl2YXRlZChJV29ya2JlbmNoUGFydCBwKSB7CisJCQkJLy8gSWdub3JlLgorCQkJfQorCQkJcHVibGljIHZvaWQgcGFydE9wZW5lZChJV29ya2JlbmNoUGFydCBwKSB7CisJCQkJLy8gSWdub3JlLgorCQkJfQorCQl9OworCisJLyoqCisJICogUmVzb3VyY2VzIHRoYXQgaGF2ZSBiZWVuIHJlbW92ZWQgc2luY2UgbGFzdCBhY3RpdmF0aW9uLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBDb2xsZWN0aW9uPFJlc291cmNlPiByZW1vdmVkUmVzb3VyY2VzID0gbmV3IEFycmF5TGlzdDxSZXNvdXJjZT4oKTsKKworCS8qKgorCSAqIFJlc291cmNlcyB0aGF0IGhhdmUgYmVlbiBjaGFuZ2VkIHNpbmNlIGxhc3QgYWN0aXZhdGlvbi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgQ29sbGVjdGlvbjxSZXNvdXJjZT4gY2hhbmdlZFJlc291cmNlcyA9IG5ldyBBcnJheUxpc3Q8UmVzb3VyY2U+KCk7CisKKwkvKioKKwkgKiBSZXNvdXJjZXMgdGhhdCBoYXZlIGJlZW4gc2F2ZWQuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIENvbGxlY3Rpb248UmVzb3VyY2U+IHNhdmVkUmVzb3VyY2VzID0gbmV3IEFycmF5TGlzdDxSZXNvdXJjZT4oKTsKKworCS8qKgorCSAqIE1hcCB0byBzdG9yZSB0aGUgZGlhZ25vc3RpYyBhc3NvY2lhdGVkIHdpdGggYSByZXNvdXJjZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgTWFwPFJlc291cmNlLCBEaWFnbm9zdGljPiByZXNvdXJjZVRvRGlhZ25vc3RpY01hcCA9IG5ldyBMaW5rZWRIYXNoTWFwPFJlc291cmNlLCBEaWFnbm9zdGljPigpOworCisJLyoqCisJICogQ29udHJvbHMgd2hldGhlciB0aGUgcHJvYmxlbSBpbmRpY2F0aW9uIHNob3VsZCBiZSB1cGRhdGVkLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBib29sZWFuIHVwZGF0ZVByb2JsZW1JbmRpY2F0aW9uID0gdHJ1ZTsKKworCS8qKgorCSAqIEFkYXB0ZXIgdXNlZCB0byB1cGRhdGUgdGhlIHByb2JsZW0gaW5kaWNhdGlvbiB3aGVuIHJlc291cmNlcyBhcmUgZGVtYW5kZWQgbG9hZGVkLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBFQ29udGVudEFkYXB0ZXIgcHJvYmxlbUluZGljYXRpb25BZGFwdGVyID0gCisJCW5ldyBFQ29udGVudEFkYXB0ZXIoKSB7CisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyB2b2lkIG5vdGlmeUNoYW5nZWQoTm90aWZpY2F0aW9uIG5vdGlmaWNhdGlvbikgeworCQkJCWlmIChub3RpZmljYXRpb24uZ2V0Tm90aWZpZXIoKSBpbnN0YW5jZW9mIFJlc291cmNlKSB7CisJCQkJCXN3aXRjaCAobm90aWZpY2F0aW9uLmdldEZlYXR1cmVJRChSZXNvdXJjZS5jbGFzcykpIHsKKwkJCQkJCWNhc2UgUmVzb3VyY2UuUkVTT1VSQ0VfX0lTX0xPQURFRDoKKwkJCQkJCWNhc2UgUmVzb3VyY2UuUkVTT1VSQ0VfX0VSUk9SUzoKKwkJCQkJCWNhc2UgUmVzb3VyY2UuUkVTT1VSQ0VfX1dBUk5JTkdTOiB7CisJCQkJCQkJUmVzb3VyY2UgcmVzb3VyY2UgPSAoUmVzb3VyY2Upbm90aWZpY2F0aW9uLmdldE5vdGlmaWVyKCk7CisJCQkJCQkJRGlhZ25vc3RpYyBkaWFnbm9zdGljID0gYW5hbHl6ZVJlc291cmNlUHJvYmxlbXMocmVzb3VyY2UsIG51bGwpOworCQkJCQkJCWlmIChkaWFnbm9zdGljLmdldFNldmVyaXR5KCkgIT0gRGlhZ25vc3RpYy5PSykgeworCQkJCQkJCQlyZXNvdXJjZVRvRGlhZ25vc3RpY01hcC5wdXQocmVzb3VyY2UsIGRpYWdub3N0aWMpOworCQkJCQkJCX0KKwkJCQkJCQllbHNlIHsKKwkJCQkJCQkJcmVzb3VyY2VUb0RpYWdub3N0aWNNYXAucmVtb3ZlKHJlc291cmNlKTsKKwkJCQkJCQl9CisKKwkJCQkJCQlpZiAodXBkYXRlUHJvYmxlbUluZGljYXRpb24pIHsKKwkJCQkJCQkJZ2V0U2l0ZSgpLmdldFNoZWxsKCkuZ2V0RGlzcGxheSgpLmFzeW5jRXhlYworCQkJCQkJCQkJKG5ldyBSdW5uYWJsZSgpIHsKKwkJCQkJCQkJCQkgcHVibGljIHZvaWQgcnVuKCkgeworCQkJCQkJCQkJCQkgdXBkYXRlUHJvYmxlbUluZGljYXRpb24oKTsKKwkJCQkJCQkJCQkgfQorCQkJCQkJCQkJIH0pOworCQkJCQkJCX0KKwkJCQkJCQlicmVhazsKKwkJCQkJCX0KKwkJCQkJfQorCQkJCX0KKwkJCQllbHNlIHsKKwkJCQkJc3VwZXIubm90aWZ5Q2hhbmdlZChub3RpZmljYXRpb24pOworCQkJCX0KKwkJCX0KKworCQkJQE92ZXJyaWRlCisJCQlwcm90ZWN0ZWQgdm9pZCBzZXRUYXJnZXQoUmVzb3VyY2UgdGFyZ2V0KSB7CisJCQkJYmFzaWNTZXRUYXJnZXQodGFyZ2V0KTsKKwkJCX0KKworCQkJQE92ZXJyaWRlCisJCQlwcm90ZWN0ZWQgdm9pZCB1bnNldFRhcmdldChSZXNvdXJjZSB0YXJnZXQpIHsKKwkJCQliYXNpY1Vuc2V0VGFyZ2V0KHRhcmdldCk7CisJCQl9CisJCX07CisKKwkvKioKKwkgKiBUaGlzIGxpc3RlbnMgZm9yIHdvcmtzcGFjZSBjaGFuZ2VzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBJUmVzb3VyY2VDaGFuZ2VMaXN0ZW5lciByZXNvdXJjZUNoYW5nZUxpc3RlbmVyID0KKwkJbmV3IElSZXNvdXJjZUNoYW5nZUxpc3RlbmVyKCkgeworCQkJcHVibGljIHZvaWQgcmVzb3VyY2VDaGFuZ2VkKElSZXNvdXJjZUNoYW5nZUV2ZW50IGV2ZW50KSB7CisJCQkJSVJlc291cmNlRGVsdGEgZGVsdGEgPSBldmVudC5nZXREZWx0YSgpOworCQkJCXRyeSB7CisJCQkJCWNsYXNzIFJlc291cmNlRGVsdGFWaXNpdG9yIGltcGxlbWVudHMgSVJlc291cmNlRGVsdGFWaXNpdG9yIHsKKwkJCQkJCXByb3RlY3RlZCBSZXNvdXJjZVNldCByZXNvdXJjZVNldCA9IGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKTsKKwkJCQkJCXByb3RlY3RlZCBDb2xsZWN0aW9uPFJlc291cmNlPiBjaGFuZ2VkUmVzb3VyY2VzID0gbmV3IEFycmF5TGlzdDxSZXNvdXJjZT4oKTsKKwkJCQkJCXByb3RlY3RlZCBDb2xsZWN0aW9uPFJlc291cmNlPiByZW1vdmVkUmVzb3VyY2VzID0gbmV3IEFycmF5TGlzdDxSZXNvdXJjZT4oKTsKKworCQkJCQkJcHVibGljIGJvb2xlYW4gdmlzaXQoSVJlc291cmNlRGVsdGEgZGVsdGEpIHsKKwkJCQkJCQlpZiAoZGVsdGEuZ2V0UmVzb3VyY2UoKS5nZXRUeXBlKCkgPT0gSVJlc291cmNlLkZJTEUpIHsKKwkJCQkJCQkJaWYgKGRlbHRhLmdldEtpbmQoKSA9PSBJUmVzb3VyY2VEZWx0YS5SRU1PVkVEIHx8CisJCQkJCQkJCSAgICBkZWx0YS5nZXRLaW5kKCkgPT0gSVJlc291cmNlRGVsdGEuQ0hBTkdFRCAmJiBkZWx0YS5nZXRGbGFncygpICE9IElSZXNvdXJjZURlbHRhLk1BUktFUlMpIHsKKwkJCQkJCQkJCVJlc291cmNlIHJlc291cmNlID0gcmVzb3VyY2VTZXQuZ2V0UmVzb3VyY2UoVVJJLmNyZWF0ZVBsYXRmb3JtUmVzb3VyY2VVUkkoZGVsdGEuZ2V0RnVsbFBhdGgoKS50b1N0cmluZygpLCB0cnVlKSwgZmFsc2UpOworCQkJCQkJCQkJaWYgKHJlc291cmNlICE9IG51bGwpIHsKKwkJCQkJCQkJCQlpZiAoZGVsdGEuZ2V0S2luZCgpID09IElSZXNvdXJjZURlbHRhLlJFTU9WRUQpIHsKKwkJCQkJCQkJCQkJcmVtb3ZlZFJlc291cmNlcy5hZGQocmVzb3VyY2UpOworCQkJCQkJCQkJCX0KKwkJCQkJCQkJCQllbHNlIGlmICghc2F2ZWRSZXNvdXJjZXMucmVtb3ZlKHJlc291cmNlKSkgeworCQkJCQkJCQkJCQljaGFuZ2VkUmVzb3VyY2VzLmFkZChyZXNvdXJjZSk7CisJCQkJCQkJCQkJfQorCQkJCQkJCQkJfQorCQkJCQkJCQl9CisJCQkJCQkJfQorCisJCQkJCQkJcmV0dXJuIHRydWU7CisJCQkJCQl9CisKKwkJCQkJCXB1YmxpYyBDb2xsZWN0aW9uPFJlc291cmNlPiBnZXRDaGFuZ2VkUmVzb3VyY2VzKCkgeworCQkJCQkJCXJldHVybiBjaGFuZ2VkUmVzb3VyY2VzOworCQkJCQkJfQorCisJCQkJCQlwdWJsaWMgQ29sbGVjdGlvbjxSZXNvdXJjZT4gZ2V0UmVtb3ZlZFJlc291cmNlcygpIHsKKwkJCQkJCQlyZXR1cm4gcmVtb3ZlZFJlc291cmNlczsKKwkJCQkJCX0KKwkJCQkJfQorCisJCQkJCWZpbmFsIFJlc291cmNlRGVsdGFWaXNpdG9yIHZpc2l0b3IgPSBuZXcgUmVzb3VyY2VEZWx0YVZpc2l0b3IoKTsKKwkJCQkJZGVsdGEuYWNjZXB0KHZpc2l0b3IpOworCisJCQkJCWlmICghdmlzaXRvci5nZXRSZW1vdmVkUmVzb3VyY2VzKCkuaXNFbXB0eSgpKSB7CisJCQkJCQlnZXRTaXRlKCkuZ2V0U2hlbGwoKS5nZXREaXNwbGF5KCkuYXN5bmNFeGVjCisJCQkJCQkJKG5ldyBSdW5uYWJsZSgpIHsKKwkJCQkJCQkJIHB1YmxpYyB2b2lkIHJ1bigpIHsKKwkJCQkJCQkJCSByZW1vdmVkUmVzb3VyY2VzLmFkZEFsbCh2aXNpdG9yLmdldFJlbW92ZWRSZXNvdXJjZXMoKSk7CisJCQkJCQkJCQkgaWYgKCFpc0RpcnR5KCkpIHsKKwkJCQkJCQkJCQkgZ2V0U2l0ZSgpLmdldFBhZ2UoKS5jbG9zZUVkaXRvcihHcmFwaGdlbmVyYXRvcnNFZGl0b3IudGhpcywgZmFsc2UpOworCQkJCQkJCQkJIH0KKwkJCQkJCQkJIH0KKwkJCQkJCQkgfSk7CisJCQkJCX0KKworCQkJCQlpZiAoIXZpc2l0b3IuZ2V0Q2hhbmdlZFJlc291cmNlcygpLmlzRW1wdHkoKSkgeworCQkJCQkJZ2V0U2l0ZSgpLmdldFNoZWxsKCkuZ2V0RGlzcGxheSgpLmFzeW5jRXhlYworCQkJCQkJCShuZXcgUnVubmFibGUoKSB7CisJCQkJCQkJCSBwdWJsaWMgdm9pZCBydW4oKSB7CisJCQkJCQkJCQkgY2hhbmdlZFJlc291cmNlcy5hZGRBbGwodmlzaXRvci5nZXRDaGFuZ2VkUmVzb3VyY2VzKCkpOworCQkJCQkJCQkJIGlmIChnZXRTaXRlKCkuZ2V0UGFnZSgpLmdldEFjdGl2ZUVkaXRvcigpID09IEdyYXBoZ2VuZXJhdG9yc0VkaXRvci50aGlzKSB7CisJCQkJCQkJCQkJIGhhbmRsZUFjdGl2YXRlKCk7CisJCQkJCQkJCQkgfQorCQkJCQkJCQkgfQorCQkJCQkJCSB9KTsKKwkJCQkJfQorCQkJCX0KKwkJCQljYXRjaCAoQ29yZUV4Y2VwdGlvbiBleGNlcHRpb24pIHsKKwkJCQkJR3JhcGhnZW5lcmF0b3JFZGl0b3JQbHVnaW4uSU5TVEFOQ0UubG9nKGV4Y2VwdGlvbik7CisJCQkJfQorCQkJfQorCQl9OworCisJLyoqCisJICogSGFuZGxlcyBhY3RpdmF0aW9uIG9mIHRoZSBlZGl0b3Igb3IgaXQncyBhc3NvY2lhdGVkIHZpZXdzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIGhhbmRsZUFjdGl2YXRlKCkgeworCQkvLyBSZWNvbXB1dGUgdGhlIHJlYWQgb25seSBzdGF0ZS4KKwkJLy8KKwkJaWYgKGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VUb1JlYWRPbmx5TWFwKCkgIT0gbnVsbCkgeworCQkgIGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VUb1JlYWRPbmx5TWFwKCkuY2xlYXIoKTsKKworCQkgIC8vIFJlZnJlc2ggYW55IGFjdGlvbnMgdGhhdCBtYXkgYmVjb21lIGVuYWJsZWQgb3IgZGlzYWJsZWQuCisJCSAgLy8KKwkJICBzZXRTZWxlY3Rpb24oZ2V0U2VsZWN0aW9uKCkpOworCQl9CisKKwkJaWYgKCFyZW1vdmVkUmVzb3VyY2VzLmlzRW1wdHkoKSkgeworCQkJaWYgKGhhbmRsZURpcnR5Q29uZmxpY3QoKSkgeworCQkJCWdldFNpdGUoKS5nZXRQYWdlKCkuY2xvc2VFZGl0b3IoR3JhcGhnZW5lcmF0b3JzRWRpdG9yLnRoaXMsIGZhbHNlKTsKKwkJCX0KKwkJCWVsc2UgeworCQkJCXJlbW92ZWRSZXNvdXJjZXMuY2xlYXIoKTsKKwkJCQljaGFuZ2VkUmVzb3VyY2VzLmNsZWFyKCk7CisJCQkJc2F2ZWRSZXNvdXJjZXMuY2xlYXIoKTsKKwkJCX0KKwkJfQorCQllbHNlIGlmICghY2hhbmdlZFJlc291cmNlcy5pc0VtcHR5KCkpIHsKKwkJCWNoYW5nZWRSZXNvdXJjZXMucmVtb3ZlQWxsKHNhdmVkUmVzb3VyY2VzKTsKKwkJCWhhbmRsZUNoYW5nZWRSZXNvdXJjZXMoKTsKKwkJCWNoYW5nZWRSZXNvdXJjZXMuY2xlYXIoKTsKKwkJCXNhdmVkUmVzb3VyY2VzLmNsZWFyKCk7CisJCX0KKwl9CisKKwkvKioKKwkgKiBIYW5kbGVzIHdoYXQgdG8gZG8gd2l0aCBjaGFuZ2VkIHJlc291cmNlcyBvbiBhY3RpdmF0aW9uLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIGhhbmRsZUNoYW5nZWRSZXNvdXJjZXMoKSB7CisJCWlmICghY2hhbmdlZFJlc291cmNlcy5pc0VtcHR5KCkgJiYgKCFpc0RpcnR5KCkgfHwgaGFuZGxlRGlydHlDb25mbGljdCgpKSkgeworCQkJaWYgKGlzRGlydHkoKSkgeworCQkJCWNoYW5nZWRSZXNvdXJjZXMuYWRkQWxsKGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKS5nZXRSZXNvdXJjZXMoKSk7CisJCQl9CisJCQllZGl0aW5nRG9tYWluLmdldENvbW1hbmRTdGFjaygpLmZsdXNoKCk7CisKKwkJCXVwZGF0ZVByb2JsZW1JbmRpY2F0aW9uID0gZmFsc2U7CisJCQlmb3IgKFJlc291cmNlIHJlc291cmNlIDogY2hhbmdlZFJlc291cmNlcykgeworCQkJCWlmIChyZXNvdXJjZS5pc0xvYWRlZCgpKSB7CisJCQkJCXJlc291cmNlLnVubG9hZCgpOworCQkJCQl0cnkgeworCQkJCQkJcmVzb3VyY2UubG9hZChDb2xsZWN0aW9ucy5FTVBUWV9NQVApOworCQkJCQl9CisJCQkJCWNhdGNoIChJT0V4Y2VwdGlvbiBleGNlcHRpb24pIHsKKwkJCQkJCWlmICghcmVzb3VyY2VUb0RpYWdub3N0aWNNYXAuY29udGFpbnNLZXkocmVzb3VyY2UpKSB7CisJCQkJCQkJcmVzb3VyY2VUb0RpYWdub3N0aWNNYXAucHV0KHJlc291cmNlLCBhbmFseXplUmVzb3VyY2VQcm9ibGVtcyhyZXNvdXJjZSwgZXhjZXB0aW9uKSk7CisJCQkJCQl9CisJCQkJCX0KKwkJCQl9CisJCQl9CisKKwkJCWlmIChBZGFwdGVyRmFjdG9yeUVkaXRpbmdEb21haW4uaXNTdGFsZShlZGl0b3JTZWxlY3Rpb24pKSB7CisJCQkJc2V0U2VsZWN0aW9uKFN0cnVjdHVyZWRTZWxlY3Rpb24uRU1QVFkpOworCQkJfQorCisJCQl1cGRhdGVQcm9ibGVtSW5kaWNhdGlvbiA9IHRydWU7CisJCQl1cGRhdGVQcm9ibGVtSW5kaWNhdGlvbigpOworCQl9CisJfQorICAKKwkvKioKKwkgKiBVcGRhdGVzIHRoZSBwcm9ibGVtcyBpbmRpY2F0aW9uIHdpdGggdGhlIGluZm9ybWF0aW9uIGRlc2NyaWJlZCBpbiB0aGUgc3BlY2lmaWVkIGRpYWdub3N0aWMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgdXBkYXRlUHJvYmxlbUluZGljYXRpb24oKSB7CisJCWlmICh1cGRhdGVQcm9ibGVtSW5kaWNhdGlvbikgeworCQkJQmFzaWNEaWFnbm9zdGljIGRpYWdub3N0aWMgPQorCQkJCW5ldyBCYXNpY0RpYWdub3N0aWMKKwkJCQkJKERpYWdub3N0aWMuT0ssCisJCQkJCSAib3JnLmVjbGlwc2Uuc3RlbS51aS5ncmFwaGdlbmVyYXRvcnMiLAorCQkJCQkgMCwKKwkJCQkJIG51bGwsCisJCQkJCSBuZXcgT2JqZWN0IFtdIHsgZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpIH0pOworCQkJZm9yIChEaWFnbm9zdGljIGNoaWxkRGlhZ25vc3RpYyA6IHJlc291cmNlVG9EaWFnbm9zdGljTWFwLnZhbHVlcygpKSB7CisJCQkJaWYgKGNoaWxkRGlhZ25vc3RpYy5nZXRTZXZlcml0eSgpICE9IERpYWdub3N0aWMuT0spIHsKKwkJCQkJZGlhZ25vc3RpYy5hZGQoY2hpbGREaWFnbm9zdGljKTsKKwkJCQl9CisJCQl9CisKKwkJCWludCBsYXN0RWRpdG9yUGFnZSA9IGdldFBhZ2VDb3VudCgpIC0gMTsKKwkJCWlmIChsYXN0RWRpdG9yUGFnZSA+PSAwICYmIGdldEVkaXRvcihsYXN0RWRpdG9yUGFnZSkgaW5zdGFuY2VvZiBQcm9ibGVtRWRpdG9yUGFydCkgeworCQkJCSgoUHJvYmxlbUVkaXRvclBhcnQpZ2V0RWRpdG9yKGxhc3RFZGl0b3JQYWdlKSkuc2V0RGlhZ25vc3RpYyhkaWFnbm9zdGljKTsKKwkJCQlpZiAoZGlhZ25vc3RpYy5nZXRTZXZlcml0eSgpICE9IERpYWdub3N0aWMuT0spIHsKKwkJCQkJc2V0QWN0aXZlUGFnZShsYXN0RWRpdG9yUGFnZSk7CisJCQkJfQorCQkJfQorCQkJZWxzZSBpZiAoZGlhZ25vc3RpYy5nZXRTZXZlcml0eSgpICE9IERpYWdub3N0aWMuT0spIHsKKwkJCQlQcm9ibGVtRWRpdG9yUGFydCBwcm9ibGVtRWRpdG9yUGFydCA9IG5ldyBQcm9ibGVtRWRpdG9yUGFydCgpOworCQkJCXByb2JsZW1FZGl0b3JQYXJ0LnNldERpYWdub3N0aWMoZGlhZ25vc3RpYyk7CisJCQkJcHJvYmxlbUVkaXRvclBhcnQuc2V0TWFya2VySGVscGVyKG1hcmtlckhlbHBlcik7CisJCQkJdHJ5IHsKKwkJCQkJYWRkUGFnZSgrK2xhc3RFZGl0b3JQYWdlLCBwcm9ibGVtRWRpdG9yUGFydCwgZ2V0RWRpdG9ySW5wdXQoKSk7CisJCQkJCXNldFBhZ2VUZXh0KGxhc3RFZGl0b3JQYWdlLCBwcm9ibGVtRWRpdG9yUGFydC5nZXRQYXJ0TmFtZSgpKTsKKwkJCQkJc2V0QWN0aXZlUGFnZShsYXN0RWRpdG9yUGFnZSk7CisJCQkJCXNob3dUYWJzKCk7CisJCQkJfQorCQkJCWNhdGNoIChQYXJ0SW5pdEV4Y2VwdGlvbiBleGNlcHRpb24pIHsKKwkJCQkJR3JhcGhnZW5lcmF0b3JFZGl0b3JQbHVnaW4uSU5TVEFOQ0UubG9nKGV4Y2VwdGlvbik7CisJCQkJfQorCQkJfQorCisJCQlpZiAobWFya2VySGVscGVyLmhhc01hcmtlcnMoZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpKSkgeworCQkJCW1hcmtlckhlbHBlci5kZWxldGVNYXJrZXJzKGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKSk7CisJCQkJaWYgKGRpYWdub3N0aWMuZ2V0U2V2ZXJpdHkoKSAhPSBEaWFnbm9zdGljLk9LKSB7CisJCQkJCXRyeSB7CisJCQkJCQltYXJrZXJIZWxwZXIuY3JlYXRlTWFya2VycyhkaWFnbm9zdGljKTsKKwkJCQkJfQorCQkJCQljYXRjaCAoQ29yZUV4Y2VwdGlvbiBleGNlcHRpb24pIHsKKwkJCQkJCUdyYXBoZ2VuZXJhdG9yRWRpdG9yUGx1Z2luLklOU1RBTkNFLmxvZyhleGNlcHRpb24pOworCQkJCQl9CisJCQkJfQorCQkJfQorCQl9CisJfQorCisJLyoqCisJICogU2hvd3MgYSBkaWFsb2cgdGhhdCBhc2tzIGlmIGNvbmZsaWN0aW5nIGNoYW5nZXMgc2hvdWxkIGJlIGRpc2NhcmRlZC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgYm9vbGVhbiBoYW5kbGVEaXJ0eUNvbmZsaWN0KCkgeworCQlyZXR1cm4KKwkJCU1lc3NhZ2VEaWFsb2cub3BlblF1ZXN0aW9uCisJCQkJKGdldFNpdGUoKS5nZXRTaGVsbCgpLAorCQkJCSBnZXRTdHJpbmcoIl9VSV9GaWxlQ29uZmxpY3RfbGFiZWwiKSwKKwkJCQkgZ2V0U3RyaW5nKCJfV0FSTl9GaWxlQ29uZmxpY3QiKSk7CisJfQorCisJLyoqCisJICogVGhpcyBjcmVhdGVzIGEgbW9kZWwgZWRpdG9yLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBHcmFwaGdlbmVyYXRvcnNFZGl0b3IoKSB7CisJCXN1cGVyKCk7CisJCWluaXRpYWxpemVFZGl0aW5nRG9tYWluKCk7CisJfQorCisJLyoqCisJICogVGhpcyBzZXRzIHVwIHRoZSBlZGl0aW5nIGRvbWFpbiBmb3IgdGhlIG1vZGVsIGVkaXRvci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBpbml0aWFsaXplRWRpdGluZ0RvbWFpbigpIHsKKwkJLy8gQ3JlYXRlIGFuIGFkYXB0ZXIgZmFjdG9yeSB0aGF0IHlpZWxkcyBpdGVtIHByb3ZpZGVycy4KKwkJLy8KKwkJYWRhcHRlckZhY3RvcnkgPSBuZXcgQ29tcG9zZWRBZGFwdGVyRmFjdG9yeShDb21wb3NlZEFkYXB0ZXJGYWN0b3J5LkRlc2NyaXB0b3IuUmVnaXN0cnkuSU5TVEFOQ0UpOworCisJCWFkYXB0ZXJGYWN0b3J5LmFkZEFkYXB0ZXJGYWN0b3J5KG5ldyBSZXNvdXJjZUl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5KCkpOworCQlhZGFwdGVyRmFjdG9yeS5hZGRBZGFwdGVyRmFjdG9yeShuZXcgR3JhcGhnZW5lcmF0b3JzSXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkoKSk7CisJCWFkYXB0ZXJGYWN0b3J5LmFkZEFkYXB0ZXJGYWN0b3J5KG5ldyBDb21tb25JdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSgpKTsKKwkJYWRhcHRlckZhY3RvcnkuYWRkQWRhcHRlckZhY3RvcnkobmV3IEVjb3JlSXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkoKSk7CisJCWFkYXB0ZXJGYWN0b3J5LmFkZEFkYXB0ZXJGYWN0b3J5KG5ldyBHcmFwaEl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5KCkpOworCQlhZGFwdGVyRmFjdG9yeS5hZGRBZGFwdGVyRmFjdG9yeShuZXcgTW9kZWxJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSgpKTsKKwkJYWRhcHRlckZhY3RvcnkuYWRkQWRhcHRlckZhY3RvcnkobmV3IE1vZGlmaWVySXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkoKSk7CisJCWFkYXB0ZXJGYWN0b3J5LmFkZEFkYXB0ZXJGYWN0b3J5KG5ldyBTY2VuYXJpb0l0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5KCkpOworCQlhZGFwdGVyRmFjdG9yeS5hZGRBZGFwdGVyRmFjdG9yeShuZXcgU2VxdWVuY2VySXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkoKSk7CisJCWFkYXB0ZXJGYWN0b3J5LmFkZEFkYXB0ZXJGYWN0b3J5KG5ldyBTb2x2ZXJJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSgpKTsKKwkJYWRhcHRlckZhY3RvcnkuYWRkQWRhcHRlckZhY3RvcnkobmV3IFJlZmxlY3RpdmVJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSgpKTsKKworCQkvLyBDcmVhdGUgdGhlIGNvbW1hbmQgc3RhY2sgdGhhdCB3aWxsIG5vdGlmeSB0aGlzIGVkaXRvciBhcyBjb21tYW5kcyBhcmUgZXhlY3V0ZWQuCisJCS8vCisJCUJhc2ljQ29tbWFuZFN0YWNrIGNvbW1hbmRTdGFjayA9IG5ldyBCYXNpY0NvbW1hbmRTdGFjaygpOworCisJCS8vIEFkZCBhIGxpc3RlbmVyIHRvIHNldCB0aGUgbW9zdCByZWNlbnQgY29tbWFuZCdzIGFmZmVjdGVkIG9iamVjdHMgdG8gYmUgdGhlIHNlbGVjdGlvbiBvZiB0aGUgdmlld2VyIHdpdGggZm9jdXMuCisJCS8vCisJCWNvbW1hbmRTdGFjay5hZGRDb21tYW5kU3RhY2tMaXN0ZW5lcgorCQkJKG5ldyBDb21tYW5kU3RhY2tMaXN0ZW5lcigpIHsKKwkJCQkgcHVibGljIHZvaWQgY29tbWFuZFN0YWNrQ2hhbmdlZChmaW5hbCBFdmVudE9iamVjdCBldmVudCkgeworCQkJCQkgZ2V0Q29udGFpbmVyKCkuZ2V0RGlzcGxheSgpLmFzeW5jRXhlYworCQkJCQkJIChuZXcgUnVubmFibGUoKSB7CisJCQkJCQkJICBwdWJsaWMgdm9pZCBydW4oKSB7CisJCQkJCQkJCSAgZmlyZVByb3BlcnR5Q2hhbmdlKElFZGl0b3JQYXJ0LlBST1BfRElSVFkpOworCisJCQkJCQkJCSAgLy8gVHJ5IHRvIHNlbGVjdCB0aGUgYWZmZWN0ZWQgb2JqZWN0cy4KKwkJCQkJCQkJICAvLworCQkJCQkJCQkgIENvbW1hbmQgbW9zdFJlY2VudENvbW1hbmQgPSAoKENvbW1hbmRTdGFjaylldmVudC5nZXRTb3VyY2UoKSkuZ2V0TW9zdFJlY2VudENvbW1hbmQoKTsKKwkJCQkJCQkJICBpZiAobW9zdFJlY2VudENvbW1hbmQgIT0gbnVsbCkgeworCQkJCQkJCQkJICBzZXRTZWxlY3Rpb25Ub1ZpZXdlcihtb3N0UmVjZW50Q29tbWFuZC5nZXRBZmZlY3RlZE9iamVjdHMoKSk7CisJCQkJCQkJCSAgfQorCQkJCQkJCQkgIGlmIChwcm9wZXJ0eVNoZWV0UGFnZSAhPSBudWxsICYmICFwcm9wZXJ0eVNoZWV0UGFnZS5nZXRDb250cm9sKCkuaXNEaXNwb3NlZCgpKSB7CisJCQkJCQkJCQkgIHByb3BlcnR5U2hlZXRQYWdlLnJlZnJlc2goKTsKKwkJCQkJCQkJICB9CisJCQkJCQkJICB9CisJCQkJCQkgIH0pOworCQkJCSB9CisJCQkgfSk7CisKKwkJLy8gQ3JlYXRlIHRoZSBlZGl0aW5nIGRvbWFpbiB3aXRoIGEgc3BlY2lhbCBjb21tYW5kIHN0YWNrLgorCQkvLworCQllZGl0aW5nRG9tYWluID0gbmV3IEFkYXB0ZXJGYWN0b3J5RWRpdGluZ0RvbWFpbihhZGFwdGVyRmFjdG9yeSwgY29tbWFuZFN0YWNrLCBuZXcgSGFzaE1hcDxSZXNvdXJjZSwgQm9vbGVhbj4oKSk7CisJfQorCisJLyoqCisJICogVGhpcyBpcyBoZXJlIGZvciB0aGUgbGlzdGVuZXIgdG8gYmUgYWJsZSB0byBjYWxsIGl0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCQkJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgZmlyZVByb3BlcnR5Q2hhbmdlKGludCBhY3Rpb24pIHsKKwkJc3VwZXIuZmlyZVByb3BlcnR5Q2hhbmdlKGFjdGlvbik7CisJfQorCisJLyoqCisJICogVGhpcyBzZXRzIHRoZSBzZWxlY3Rpb24gaW50byB3aGljaGV2ZXIgdmlld2VyIGlzIGFjdGl2ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRTZWxlY3Rpb25Ub1ZpZXdlcihDb2xsZWN0aW9uPD8+IGNvbGxlY3Rpb24pIHsKKwkJZmluYWwgQ29sbGVjdGlvbjw/PiB0aGVTZWxlY3Rpb24gPSBjb2xsZWN0aW9uOworCQkvLyBNYWtlIHN1cmUgaXQncyBva2F5LgorCQkvLworCQlpZiAodGhlU2VsZWN0aW9uICE9IG51bGwgJiYgIXRoZVNlbGVjdGlvbi5pc0VtcHR5KCkpIHsKKwkJCVJ1bm5hYmxlIHJ1bm5hYmxlID0KKwkJCQluZXcgUnVubmFibGUoKSB7CisJCQkJCXB1YmxpYyB2b2lkIHJ1bigpIHsKKwkJCQkJCS8vIFRyeSB0byBzZWxlY3QgdGhlIGl0ZW1zIGluIHRoZSBjdXJyZW50IGNvbnRlbnQgdmlld2VyIG9mIHRoZSBlZGl0b3IuCisJCQkJCQkvLworCQkJCQkJaWYgKGN1cnJlbnRWaWV3ZXIgIT0gbnVsbCkgeworCQkJCQkJCWN1cnJlbnRWaWV3ZXIuc2V0U2VsZWN0aW9uKG5ldyBTdHJ1Y3R1cmVkU2VsZWN0aW9uKHRoZVNlbGVjdGlvbi50b0FycmF5KCkpLCB0cnVlKTsKKwkJCQkJCX0KKwkJCQkJfQorCQkJCX07CisJCQlnZXRTaXRlKCkuZ2V0U2hlbGwoKS5nZXREaXNwbGF5KCkuYXN5bmNFeGVjKHJ1bm5hYmxlKTsKKwkJfQorCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyB0aGUgZWRpdGluZyBkb21haW4gYXMgcmVxdWlyZWQgYnkgdGhlIHtAbGluayBJRWRpdGluZ0RvbWFpblByb3ZpZGVyfSBpbnRlcmZhY2UuCisJICogVGhpcyBpcyBpbXBvcnRhbnQgZm9yIGltcGxlbWVudGluZyB0aGUgc3RhdGljIG1ldGhvZHMgb2Yge0BsaW5rIEFkYXB0ZXJGYWN0b3J5RWRpdGluZ0RvbWFpbn0KKwkgKiBhbmQgZm9yIHN1cHBvcnRpbmcge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmFjdGlvbi5Db21tYW5kQWN0aW9ufS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRWRpdGluZ0RvbWFpbiBnZXRFZGl0aW5nRG9tYWluKCkgeworCQlyZXR1cm4gZWRpdGluZ0RvbWFpbjsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgY2xhc3MgUmV2ZXJzZUFkYXB0ZXJGYWN0b3J5Q29udGVudFByb3ZpZGVyIGV4dGVuZHMgQWRhcHRlckZhY3RvcnlDb250ZW50UHJvdmlkZXIgeworCQkvKioKKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCXB1YmxpYyBSZXZlcnNlQWRhcHRlckZhY3RvcnlDb250ZW50UHJvdmlkZXIoQWRhcHRlckZhY3RvcnkgYWRhcHRlckZhY3RvcnkpIHsKKwkJCXN1cGVyKGFkYXB0ZXJGYWN0b3J5KTsKKwkJfQorCisJCS8qKgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJQE92ZXJyaWRlCisJCXB1YmxpYyBPYmplY3QgW10gZ2V0RWxlbWVudHMoT2JqZWN0IG9iamVjdCkgeworCQkJT2JqZWN0IHBhcmVudCA9IHN1cGVyLmdldFBhcmVudChvYmplY3QpOworCQkJcmV0dXJuIChwYXJlbnQgPT0gbnVsbCA/IENvbGxlY3Rpb25zLkVNUFRZX1NFVCA6IENvbGxlY3Rpb25zLnNpbmdsZXRvbihwYXJlbnQpKS50b0FycmF5KCk7CisJCX0KKworCQkvKioKKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUBPdmVycmlkZQorCQlwdWJsaWMgT2JqZWN0IFtdIGdldENoaWxkcmVuKE9iamVjdCBvYmplY3QpIHsKKwkJCU9iamVjdCBwYXJlbnQgPSBzdXBlci5nZXRQYXJlbnQob2JqZWN0KTsKKwkJCXJldHVybiAocGFyZW50ID09IG51bGwgPyBDb2xsZWN0aW9ucy5FTVBUWV9TRVQgOiBDb2xsZWN0aW9ucy5zaW5nbGV0b24ocGFyZW50KSkudG9BcnJheSgpOworCQl9CisKKwkJLyoqCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlAT3ZlcnJpZGUKKwkJcHVibGljIGJvb2xlYW4gaGFzQ2hpbGRyZW4oT2JqZWN0IG9iamVjdCkgeworCQkJT2JqZWN0IHBhcmVudCA9IHN1cGVyLmdldFBhcmVudChvYmplY3QpOworCQkJcmV0dXJuIHBhcmVudCAhPSBudWxsOworCQl9CisKKwkJLyoqCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlAT3ZlcnJpZGUKKwkJcHVibGljIE9iamVjdCBnZXRQYXJlbnQoT2JqZWN0IG9iamVjdCkgeworCQkJcmV0dXJuIG51bGw7CisJCX0KKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRDdXJyZW50Vmlld2VyUGFuZShWaWV3ZXJQYW5lIHZpZXdlclBhbmUpIHsKKwkJaWYgKGN1cnJlbnRWaWV3ZXJQYW5lICE9IHZpZXdlclBhbmUpIHsKKwkJCWlmIChjdXJyZW50Vmlld2VyUGFuZSAhPSBudWxsKSB7CisJCQkJY3VycmVudFZpZXdlclBhbmUuc2hvd0ZvY3VzKGZhbHNlKTsKKwkJCX0KKwkJCWN1cnJlbnRWaWV3ZXJQYW5lID0gdmlld2VyUGFuZTsKKwkJfQorCQlzZXRDdXJyZW50Vmlld2VyKGN1cnJlbnRWaWV3ZXJQYW5lLmdldFZpZXdlcigpKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIG1ha2VzIHN1cmUgdGhhdCBvbmUgY29udGVudCB2aWV3ZXIsIGVpdGhlciBmb3IgdGhlIGN1cnJlbnQgcGFnZSBvciB0aGUgb3V0bGluZSB2aWV3LCBpZiBpdCBoYXMgZm9jdXMsCisJICogaXMgdGhlIGN1cnJlbnQgb25lLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIHNldEN1cnJlbnRWaWV3ZXIoVmlld2VyIHZpZXdlcikgeworCQkvLyBJZiBpdCBpcyBjaGFuZ2luZy4uLgorCQkvLworCQlpZiAoY3VycmVudFZpZXdlciAhPSB2aWV3ZXIpIHsKKwkJCWlmIChzZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIgPT0gbnVsbCkgeworCQkJCS8vIENyZWF0ZSB0aGUgbGlzdGVuZXIgb24gZGVtYW5kLgorCQkJCS8vCisJCQkJc2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyID0KKwkJCQkJbmV3IElTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIoKSB7CisJCQkJCQkvLyBUaGlzIGp1c3Qgbm90aWZpZXMgdGhvc2UgdGhpbmdzIHRoYXQgYXJlIGFmZmVjdGVkIGJ5IHRoZSBzZWN0aW9uLgorCQkJCQkJLy8KKwkJCQkJCXB1YmxpYyB2b2lkIHNlbGVjdGlvbkNoYW5nZWQoU2VsZWN0aW9uQ2hhbmdlZEV2ZW50IHNlbGVjdGlvbkNoYW5nZWRFdmVudCkgeworCQkJCQkJCXNldFNlbGVjdGlvbihzZWxlY3Rpb25DaGFuZ2VkRXZlbnQuZ2V0U2VsZWN0aW9uKCkpOworCQkJCQkJfQorCQkJCQl9OworCQkJfQorCisJCQkvLyBTdG9wIGxpc3RlbmluZyB0byB0aGUgb2xkIG9uZS4KKwkJCS8vCisJCQlpZiAoY3VycmVudFZpZXdlciAhPSBudWxsKSB7CisJCQkJY3VycmVudFZpZXdlci5yZW1vdmVTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIoc2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyKTsKKwkJCX0KKworCQkJLy8gU3RhcnQgbGlzdGVuaW5nIHRvIHRoZSBuZXcgb25lLgorCQkJLy8KKwkJCWlmICh2aWV3ZXIgIT0gbnVsbCkgeworCQkJCXZpZXdlci5hZGRTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIoc2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyKTsKKwkJCX0KKworCQkJLy8gUmVtZW1iZXIgaXQuCisJCQkvLworCQkJY3VycmVudFZpZXdlciA9IHZpZXdlcjsKKworCQkJLy8gU2V0IHRoZSBlZGl0b3JzIHNlbGVjdGlvbiBiYXNlZCBvbiB0aGUgY3VycmVudCB2aWV3ZXIncyBzZWxlY3Rpb24uCisJCQkvLworCQkJc2V0U2VsZWN0aW9uKGN1cnJlbnRWaWV3ZXIgPT0gbnVsbCA/IFN0cnVjdHVyZWRTZWxlY3Rpb24uRU1QVFkgOiBjdXJyZW50Vmlld2VyLmdldFNlbGVjdGlvbigpKTsKKwkJfQorCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyB0aGUgdmlld2VyIGFzIHJlcXVpcmVkIGJ5IHRoZSB7QGxpbmsgSVZpZXdlclByb3ZpZGVyfSBpbnRlcmZhY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFZpZXdlciBnZXRWaWV3ZXIoKSB7CisJCXJldHVybiBjdXJyZW50Vmlld2VyOworCX0KKworCS8qKgorCSAqIFRoaXMgY3JlYXRlcyBhIGNvbnRleHQgbWVudSBmb3IgdGhlIHZpZXdlciBhbmQgYWRkcyBhIGxpc3RlbmVyIGFzIHdlbGwgcmVnaXN0ZXJpbmcgdGhlIG1lbnUgZm9yIGV4dGVuc2lvbi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBjcmVhdGVDb250ZXh0TWVudUZvcihTdHJ1Y3R1cmVkVmlld2VyIHZpZXdlcikgeworCQlNZW51TWFuYWdlciBjb250ZXh0TWVudSA9IG5ldyBNZW51TWFuYWdlcigiI1BvcFVwIik7CisJCWNvbnRleHRNZW51LmFkZChuZXcgU2VwYXJhdG9yKCJhZGRpdGlvbnMiKSk7CisJCWNvbnRleHRNZW51LnNldFJlbW92ZUFsbFdoZW5TaG93bih0cnVlKTsKKwkJY29udGV4dE1lbnUuYWRkTWVudUxpc3RlbmVyKHRoaXMpOworCQlNZW51IG1lbnU9IGNvbnRleHRNZW51LmNyZWF0ZUNvbnRleHRNZW51KHZpZXdlci5nZXRDb250cm9sKCkpOworCQl2aWV3ZXIuZ2V0Q29udHJvbCgpLnNldE1lbnUobWVudSk7CisJCWdldFNpdGUoKS5yZWdpc3RlckNvbnRleHRNZW51KGNvbnRleHRNZW51LCBuZXcgVW53cmFwcGluZ1NlbGVjdGlvblByb3ZpZGVyKHZpZXdlcikpOworCisJCWludCBkbmRPcGVyYXRpb25zID0gRE5ELkRST1BfQ09QWSB8IERORC5EUk9QX01PVkUgfCBETkQuRFJPUF9MSU5LOworCQlUcmFuc2ZlcltdIHRyYW5zZmVycyA9IG5ldyBUcmFuc2ZlcltdIHsgTG9jYWxUcmFuc2Zlci5nZXRJbnN0YW5jZSgpIH07CisJCXZpZXdlci5hZGREcmFnU3VwcG9ydChkbmRPcGVyYXRpb25zLCB0cmFuc2ZlcnMsIG5ldyBWaWV3ZXJEcmFnQWRhcHRlcih2aWV3ZXIpKTsKKwkJdmlld2VyLmFkZERyb3BTdXBwb3J0KGRuZE9wZXJhdGlvbnMsIHRyYW5zZmVycywgbmV3IEVkaXRpbmdEb21haW5WaWV3ZXJEcm9wQWRhcHRlcihlZGl0aW5nRG9tYWluLCB2aWV3ZXIpKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGlzIHRoZSBtZXRob2QgY2FsbGVkIHRvIGxvYWQgYSByZXNvdXJjZSBpbnRvIHRoZSBlZGl0aW5nIGRvbWFpbidzIHJlc291cmNlIHNldCBiYXNlZCBvbiB0aGUgZWRpdG9yJ3MgaW5wdXQuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgY3JlYXRlTW9kZWwoKSB7CisJCVVSSSByZXNvdXJjZVVSSSA9IEVkaXRVSVV0aWwuZ2V0VVJJKGdldEVkaXRvcklucHV0KCkpOworCQlFeGNlcHRpb24gZXhjZXB0aW9uID0gbnVsbDsKKwkJUmVzb3VyY2UgcmVzb3VyY2UgPSBudWxsOworCQl0cnkgeworCQkJLy8gTG9hZCB0aGUgcmVzb3VyY2UgdGhyb3VnaCB0aGUgZWRpdGluZyBkb21haW4uCisJCQkvLworCQkJcmVzb3VyY2UgPSBlZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkuZ2V0UmVzb3VyY2UocmVzb3VyY2VVUkksIHRydWUpOworCQl9CisJCWNhdGNoIChFeGNlcHRpb24gZSkgeworCQkJZXhjZXB0aW9uID0gZTsKKwkJCXJlc291cmNlID0gZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpLmdldFJlc291cmNlKHJlc291cmNlVVJJLCBmYWxzZSk7CisJCX0KKworCQlEaWFnbm9zdGljIGRpYWdub3N0aWMgPSBhbmFseXplUmVzb3VyY2VQcm9ibGVtcyhyZXNvdXJjZSwgZXhjZXB0aW9uKTsKKwkJaWYgKGRpYWdub3N0aWMuZ2V0U2V2ZXJpdHkoKSAhPSBEaWFnbm9zdGljLk9LKSB7CisJCQlyZXNvdXJjZVRvRGlhZ25vc3RpY01hcC5wdXQocmVzb3VyY2UsICBhbmFseXplUmVzb3VyY2VQcm9ibGVtcyhyZXNvdXJjZSwgZXhjZXB0aW9uKSk7CisJCX0KKwkJZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpLmVBZGFwdGVycygpLmFkZChwcm9ibGVtSW5kaWNhdGlvbkFkYXB0ZXIpOworCX0KKworCS8qKgorCSAqIFJldHVybnMgYSBkaWFnbm9zdGljIGRlc2NyaWJpbmcgdGhlIGVycm9ycyBhbmQgd2FybmluZ3MgbGlzdGVkIGluIHRoZSByZXNvdXJjZQorCSAqIGFuZCB0aGUgc3BlY2lmaWVkIGV4Y2VwdGlvbiAoaWYgYW55KS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRGlhZ25vc3RpYyBhbmFseXplUmVzb3VyY2VQcm9ibGVtcyhSZXNvdXJjZSByZXNvdXJjZSwgRXhjZXB0aW9uIGV4Y2VwdGlvbikgeworCQlpZiAoIXJlc291cmNlLmdldEVycm9ycygpLmlzRW1wdHkoKSB8fCAhcmVzb3VyY2UuZ2V0V2FybmluZ3MoKS5pc0VtcHR5KCkpIHsKKwkJCUJhc2ljRGlhZ25vc3RpYyBiYXNpY0RpYWdub3N0aWMgPQorCQkJCW5ldyBCYXNpY0RpYWdub3N0aWMKKwkJCQkJKERpYWdub3N0aWMuRVJST1IsCisJCQkJCSAib3JnLmVjbGlwc2Uuc3RlbS51aS5ncmFwaGdlbmVyYXRvcnMiLAorCQkJCQkgMCwKKwkJCQkJIGdldFN0cmluZygiX1VJX0NyZWF0ZU1vZGVsRXJyb3JfbWVzc2FnZSIsIHJlc291cmNlLmdldFVSSSgpKSwKKwkJCQkJIG5ldyBPYmplY3QgW10geyBleGNlcHRpb24gPT0gbnVsbCA/IChPYmplY3QpcmVzb3VyY2UgOiBleGNlcHRpb24gfSk7CisJCQliYXNpY0RpYWdub3N0aWMubWVyZ2UoRWNvcmVVdGlsLmNvbXB1dGVEaWFnbm9zdGljKHJlc291cmNlLCB0cnVlKSk7CisJCQlyZXR1cm4gYmFzaWNEaWFnbm9zdGljOworCQl9CisJCWVsc2UgaWYgKGV4Y2VwdGlvbiAhPSBudWxsKSB7CisJCQlyZXR1cm4KKwkJCQluZXcgQmFzaWNEaWFnbm9zdGljCisJCQkJCShEaWFnbm9zdGljLkVSUk9SLAorCQkJCQkgIm9yZy5lY2xpcHNlLnN0ZW0udWkuZ3JhcGhnZW5lcmF0b3JzIiwKKwkJCQkJIDAsCisJCQkJCSBnZXRTdHJpbmcoIl9VSV9DcmVhdGVNb2RlbEVycm9yX21lc3NhZ2UiLCByZXNvdXJjZS5nZXRVUkkoKSksCisJCQkJCSBuZXcgT2JqZWN0W10geyBleGNlcHRpb24gfSk7CisJCX0KKwkJZWxzZSB7CisJCQlyZXR1cm4gRGlhZ25vc3RpYy5PS19JTlNUQU5DRTsKKwkJfQorCX0KKworCS8qKgorCSAqIFRoaXMgaXMgdGhlIG1ldGhvZCB1c2VkIGJ5IHRoZSBmcmFtZXdvcmsgdG8gaW5zdGFsbCB5b3VyIG93biBjb250cm9scy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBjcmVhdGVQYWdlcygpIHsKKwkJLy8gQ3JlYXRlcyB0aGUgbW9kZWwgZnJvbSB0aGUgZWRpdG9yIGlucHV0CisJCS8vCisJCWNyZWF0ZU1vZGVsKCk7CisKKwkJLy8gT25seSBjcmVhdGVzIHRoZSBvdGhlciBwYWdlcyBpZiB0aGVyZSBpcyBzb21ldGhpbmcgdGhhdCBjYW4gYmUgZWRpdGVkCisJCS8vCisJCWlmICghZ2V0RWRpdGluZ0RvbWFpbigpLmdldFJlc291cmNlU2V0KCkuZ2V0UmVzb3VyY2VzKCkuaXNFbXB0eSgpKSB7CisJCQkvLyBDcmVhdGUgYSBwYWdlIGZvciB0aGUgc2VsZWN0aW9uIHRyZWUgdmlldy4KKwkJCS8vCisJCQl7CisJCQkJVmlld2VyUGFuZSB2aWV3ZXJQYW5lID0KKwkJCQkJbmV3IFZpZXdlclBhbmUoZ2V0U2l0ZSgpLmdldFBhZ2UoKSwgR3JhcGhnZW5lcmF0b3JzRWRpdG9yLnRoaXMpIHsKKwkJCQkJCUBPdmVycmlkZQorCQkJCQkJcHVibGljIFZpZXdlciBjcmVhdGVWaWV3ZXIoQ29tcG9zaXRlIGNvbXBvc2l0ZSkgeworCQkJCQkJCVRyZWUgdHJlZSA9IG5ldyBUcmVlKGNvbXBvc2l0ZSwgU1dULk1VTFRJKTsKKwkJCQkJCQlUcmVlVmlld2VyIG5ld1RyZWVWaWV3ZXIgPSBuZXcgVHJlZVZpZXdlcih0cmVlKTsKKwkJCQkJCQlyZXR1cm4gbmV3VHJlZVZpZXdlcjsKKwkJCQkJCX0KKwkJCQkJCUBPdmVycmlkZQorCQkJCQkJcHVibGljIHZvaWQgcmVxdWVzdEFjdGl2YXRpb24oKSB7CisJCQkJCQkJc3VwZXIucmVxdWVzdEFjdGl2YXRpb24oKTsKKwkJCQkJCQlzZXRDdXJyZW50Vmlld2VyUGFuZSh0aGlzKTsKKwkJCQkJCX0KKwkJCQkJfTsKKwkJCQl2aWV3ZXJQYW5lLmNyZWF0ZUNvbnRyb2woZ2V0Q29udGFpbmVyKCkpOworCisJCQkJc2VsZWN0aW9uVmlld2VyID0gKFRyZWVWaWV3ZXIpdmlld2VyUGFuZS5nZXRWaWV3ZXIoKTsKKwkJCQlzZWxlY3Rpb25WaWV3ZXIuc2V0Q29udGVudFByb3ZpZGVyKG5ldyBBZGFwdGVyRmFjdG9yeUNvbnRlbnRQcm92aWRlcihhZGFwdGVyRmFjdG9yeSkpOworCisJCQkJc2VsZWN0aW9uVmlld2VyLnNldExhYmVsUHJvdmlkZXIobmV3IEFkYXB0ZXJGYWN0b3J5TGFiZWxQcm92aWRlcihhZGFwdGVyRmFjdG9yeSkpOworCQkJCXNlbGVjdGlvblZpZXdlci5zZXRJbnB1dChlZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkpOworCQkJCXNlbGVjdGlvblZpZXdlci5zZXRTZWxlY3Rpb24obmV3IFN0cnVjdHVyZWRTZWxlY3Rpb24oZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpLmdldFJlc291cmNlcygpLmdldCgwKSksIHRydWUpOworCQkJCXZpZXdlclBhbmUuc2V0VGl0bGUoZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpKTsKKworCQkJCW5ldyBBZGFwdGVyRmFjdG9yeVRyZWVFZGl0b3Ioc2VsZWN0aW9uVmlld2VyLmdldFRyZWUoKSwgYWRhcHRlckZhY3RvcnkpOworCisJCQkJY3JlYXRlQ29udGV4dE1lbnVGb3Ioc2VsZWN0aW9uVmlld2VyKTsKKwkJCQlpbnQgcGFnZUluZGV4ID0gYWRkUGFnZSh2aWV3ZXJQYW5lLmdldENvbnRyb2woKSk7CisJCQkJc2V0UGFnZVRleHQocGFnZUluZGV4LCBnZXRTdHJpbmcoIl9VSV9TZWxlY3Rpb25QYWdlX2xhYmVsIikpOworCQkJfQorCisJCQkvLyBDcmVhdGUgYSBwYWdlIGZvciB0aGUgcGFyZW50IHRyZWUgdmlldy4KKwkJCS8vCisJCQl7CisJCQkJVmlld2VyUGFuZSB2aWV3ZXJQYW5lID0KKwkJCQkJbmV3IFZpZXdlclBhbmUoZ2V0U2l0ZSgpLmdldFBhZ2UoKSwgR3JhcGhnZW5lcmF0b3JzRWRpdG9yLnRoaXMpIHsKKwkJCQkJCUBPdmVycmlkZQorCQkJCQkJcHVibGljIFZpZXdlciBjcmVhdGVWaWV3ZXIoQ29tcG9zaXRlIGNvbXBvc2l0ZSkgeworCQkJCQkJCVRyZWUgdHJlZSA9IG5ldyBUcmVlKGNvbXBvc2l0ZSwgU1dULk1VTFRJKTsKKwkJCQkJCQlUcmVlVmlld2VyIG5ld1RyZWVWaWV3ZXIgPSBuZXcgVHJlZVZpZXdlcih0cmVlKTsKKwkJCQkJCQlyZXR1cm4gbmV3VHJlZVZpZXdlcjsKKwkJCQkJCX0KKwkJCQkJCUBPdmVycmlkZQorCQkJCQkJcHVibGljIHZvaWQgcmVxdWVzdEFjdGl2YXRpb24oKSB7CisJCQkJCQkJc3VwZXIucmVxdWVzdEFjdGl2YXRpb24oKTsKKwkJCQkJCQlzZXRDdXJyZW50Vmlld2VyUGFuZSh0aGlzKTsKKwkJCQkJCX0KKwkJCQkJfTsKKwkJCQl2aWV3ZXJQYW5lLmNyZWF0ZUNvbnRyb2woZ2V0Q29udGFpbmVyKCkpOworCisJCQkJcGFyZW50Vmlld2VyID0gKFRyZWVWaWV3ZXIpdmlld2VyUGFuZS5nZXRWaWV3ZXIoKTsKKwkJCQlwYXJlbnRWaWV3ZXIuc2V0QXV0b0V4cGFuZExldmVsKDMwKTsKKwkJCQlwYXJlbnRWaWV3ZXIuc2V0Q29udGVudFByb3ZpZGVyKG5ldyBSZXZlcnNlQWRhcHRlckZhY3RvcnlDb250ZW50UHJvdmlkZXIoYWRhcHRlckZhY3RvcnkpKTsKKwkJCQlwYXJlbnRWaWV3ZXIuc2V0TGFiZWxQcm92aWRlcihuZXcgQWRhcHRlckZhY3RvcnlMYWJlbFByb3ZpZGVyKGFkYXB0ZXJGYWN0b3J5KSk7CisKKwkJCQljcmVhdGVDb250ZXh0TWVudUZvcihwYXJlbnRWaWV3ZXIpOworCQkJCWludCBwYWdlSW5kZXggPSBhZGRQYWdlKHZpZXdlclBhbmUuZ2V0Q29udHJvbCgpKTsKKwkJCQlzZXRQYWdlVGV4dChwYWdlSW5kZXgsIGdldFN0cmluZygiX1VJX1BhcmVudFBhZ2VfbGFiZWwiKSk7CisJCQl9CisKKwkJCS8vIFRoaXMgaXMgdGhlIHBhZ2UgZm9yIHRoZSBsaXN0IHZpZXdlcgorCQkJLy8KKwkJCXsKKwkJCQlWaWV3ZXJQYW5lIHZpZXdlclBhbmUgPQorCQkJCQluZXcgVmlld2VyUGFuZShnZXRTaXRlKCkuZ2V0UGFnZSgpLCBHcmFwaGdlbmVyYXRvcnNFZGl0b3IudGhpcykgeworCQkJCQkJQE92ZXJyaWRlCisJCQkJCQlwdWJsaWMgVmlld2VyIGNyZWF0ZVZpZXdlcihDb21wb3NpdGUgY29tcG9zaXRlKSB7CisJCQkJCQkJcmV0dXJuIG5ldyBMaXN0Vmlld2VyKGNvbXBvc2l0ZSk7CisJCQkJCQl9CisJCQkJCQlAT3ZlcnJpZGUKKwkJCQkJCXB1YmxpYyB2b2lkIHJlcXVlc3RBY3RpdmF0aW9uKCkgeworCQkJCQkJCXN1cGVyLnJlcXVlc3RBY3RpdmF0aW9uKCk7CisJCQkJCQkJc2V0Q3VycmVudFZpZXdlclBhbmUodGhpcyk7CisJCQkJCQl9CisJCQkJCX07CisJCQkJdmlld2VyUGFuZS5jcmVhdGVDb250cm9sKGdldENvbnRhaW5lcigpKTsKKwkJCQlsaXN0Vmlld2VyID0gKExpc3RWaWV3ZXIpdmlld2VyUGFuZS5nZXRWaWV3ZXIoKTsKKwkJCQlsaXN0Vmlld2VyLnNldENvbnRlbnRQcm92aWRlcihuZXcgQWRhcHRlckZhY3RvcnlDb250ZW50UHJvdmlkZXIoYWRhcHRlckZhY3RvcnkpKTsKKwkJCQlsaXN0Vmlld2VyLnNldExhYmVsUHJvdmlkZXIobmV3IEFkYXB0ZXJGYWN0b3J5TGFiZWxQcm92aWRlcihhZGFwdGVyRmFjdG9yeSkpOworCisJCQkJY3JlYXRlQ29udGV4dE1lbnVGb3IobGlzdFZpZXdlcik7CisJCQkJaW50IHBhZ2VJbmRleCA9IGFkZFBhZ2Uodmlld2VyUGFuZS5nZXRDb250cm9sKCkpOworCQkJCXNldFBhZ2VUZXh0KHBhZ2VJbmRleCwgZ2V0U3RyaW5nKCJfVUlfTGlzdFBhZ2VfbGFiZWwiKSk7CisJCQl9CisKKwkJCS8vIFRoaXMgaXMgdGhlIHBhZ2UgZm9yIHRoZSB0cmVlIHZpZXdlcgorCQkJLy8KKwkJCXsKKwkJCQlWaWV3ZXJQYW5lIHZpZXdlclBhbmUgPQorCQkJCQluZXcgVmlld2VyUGFuZShnZXRTaXRlKCkuZ2V0UGFnZSgpLCBHcmFwaGdlbmVyYXRvcnNFZGl0b3IudGhpcykgeworCQkJCQkJQE92ZXJyaWRlCisJCQkJCQlwdWJsaWMgVmlld2VyIGNyZWF0ZVZpZXdlcihDb21wb3NpdGUgY29tcG9zaXRlKSB7CisJCQkJCQkJcmV0dXJuIG5ldyBUcmVlVmlld2VyKGNvbXBvc2l0ZSk7CisJCQkJCQl9CisJCQkJCQlAT3ZlcnJpZGUKKwkJCQkJCXB1YmxpYyB2b2lkIHJlcXVlc3RBY3RpdmF0aW9uKCkgeworCQkJCQkJCXN1cGVyLnJlcXVlc3RBY3RpdmF0aW9uKCk7CisJCQkJCQkJc2V0Q3VycmVudFZpZXdlclBhbmUodGhpcyk7CisJCQkJCQl9CisJCQkJCX07CisJCQkJdmlld2VyUGFuZS5jcmVhdGVDb250cm9sKGdldENvbnRhaW5lcigpKTsKKwkJCQl0cmVlVmlld2VyID0gKFRyZWVWaWV3ZXIpdmlld2VyUGFuZS5nZXRWaWV3ZXIoKTsKKwkJCQl0cmVlVmlld2VyLnNldENvbnRlbnRQcm92aWRlcihuZXcgQWRhcHRlckZhY3RvcnlDb250ZW50UHJvdmlkZXIoYWRhcHRlckZhY3RvcnkpKTsKKwkJCQl0cmVlVmlld2VyLnNldExhYmVsUHJvdmlkZXIobmV3IEFkYXB0ZXJGYWN0b3J5TGFiZWxQcm92aWRlcihhZGFwdGVyRmFjdG9yeSkpOworCisJCQkJbmV3IEFkYXB0ZXJGYWN0b3J5VHJlZUVkaXRvcih0cmVlVmlld2VyLmdldFRyZWUoKSwgYWRhcHRlckZhY3RvcnkpOworCisJCQkJY3JlYXRlQ29udGV4dE1lbnVGb3IodHJlZVZpZXdlcik7CisJCQkJaW50IHBhZ2VJbmRleCA9IGFkZFBhZ2Uodmlld2VyUGFuZS5nZXRDb250cm9sKCkpOworCQkJCXNldFBhZ2VUZXh0KHBhZ2VJbmRleCwgZ2V0U3RyaW5nKCJfVUlfVHJlZVBhZ2VfbGFiZWwiKSk7CisJCQl9CisKKwkJCS8vIFRoaXMgaXMgdGhlIHBhZ2UgZm9yIHRoZSB0YWJsZSB2aWV3ZXIuCisJCQkvLworCQkJeworCQkJCVZpZXdlclBhbmUgdmlld2VyUGFuZSA9CisJCQkJCW5ldyBWaWV3ZXJQYW5lKGdldFNpdGUoKS5nZXRQYWdlKCksIEdyYXBoZ2VuZXJhdG9yc0VkaXRvci50aGlzKSB7CisJCQkJCQlAT3ZlcnJpZGUKKwkJCQkJCXB1YmxpYyBWaWV3ZXIgY3JlYXRlVmlld2VyKENvbXBvc2l0ZSBjb21wb3NpdGUpIHsKKwkJCQkJCQlyZXR1cm4gbmV3IFRhYmxlVmlld2VyKGNvbXBvc2l0ZSk7CisJCQkJCQl9CisJCQkJCQlAT3ZlcnJpZGUKKwkJCQkJCXB1YmxpYyB2b2lkIHJlcXVlc3RBY3RpdmF0aW9uKCkgeworCQkJCQkJCXN1cGVyLnJlcXVlc3RBY3RpdmF0aW9uKCk7CisJCQkJCQkJc2V0Q3VycmVudFZpZXdlclBhbmUodGhpcyk7CisJCQkJCQl9CisJCQkJCX07CisJCQkJdmlld2VyUGFuZS5jcmVhdGVDb250cm9sKGdldENvbnRhaW5lcigpKTsKKwkJCQl0YWJsZVZpZXdlciA9IChUYWJsZVZpZXdlcil2aWV3ZXJQYW5lLmdldFZpZXdlcigpOworCisJCQkJVGFibGUgdGFibGUgPSB0YWJsZVZpZXdlci5nZXRUYWJsZSgpOworCQkJCVRhYmxlTGF5b3V0IGxheW91dCA9IG5ldyBUYWJsZUxheW91dCgpOworCQkJCXRhYmxlLnNldExheW91dChsYXlvdXQpOworCQkJCXRhYmxlLnNldEhlYWRlclZpc2libGUodHJ1ZSk7CisJCQkJdGFibGUuc2V0TGluZXNWaXNpYmxlKHRydWUpOworCisJCQkJVGFibGVDb2x1bW4gb2JqZWN0Q29sdW1uID0gbmV3IFRhYmxlQ29sdW1uKHRhYmxlLCBTV1QuTk9ORSk7CisJCQkJbGF5b3V0LmFkZENvbHVtbkRhdGEobmV3IENvbHVtbldlaWdodERhdGEoMywgMTAwLCB0cnVlKSk7CisJCQkJb2JqZWN0Q29sdW1uLnNldFRleHQoZ2V0U3RyaW5nKCJfVUlfT2JqZWN0Q29sdW1uX2xhYmVsIikpOworCQkJCW9iamVjdENvbHVtbi5zZXRSZXNpemFibGUodHJ1ZSk7CisKKwkJCQlUYWJsZUNvbHVtbiBzZWxmQ29sdW1uID0gbmV3IFRhYmxlQ29sdW1uKHRhYmxlLCBTV1QuTk9ORSk7CisJCQkJbGF5b3V0LmFkZENvbHVtbkRhdGEobmV3IENvbHVtbldlaWdodERhdGEoMiwgMTAwLCB0cnVlKSk7CisJCQkJc2VsZkNvbHVtbi5zZXRUZXh0KGdldFN0cmluZygiX1VJX1NlbGZDb2x1bW5fbGFiZWwiKSk7CisJCQkJc2VsZkNvbHVtbi5zZXRSZXNpemFibGUodHJ1ZSk7CisKKwkJCQl0YWJsZVZpZXdlci5zZXRDb2x1bW5Qcm9wZXJ0aWVzKG5ldyBTdHJpbmcgW10geyJhIiwgImIifSk7CisJCQkJdGFibGVWaWV3ZXIuc2V0Q29udGVudFByb3ZpZGVyKG5ldyBBZGFwdGVyRmFjdG9yeUNvbnRlbnRQcm92aWRlcihhZGFwdGVyRmFjdG9yeSkpOworCQkJCXRhYmxlVmlld2VyLnNldExhYmVsUHJvdmlkZXIobmV3IEFkYXB0ZXJGYWN0b3J5TGFiZWxQcm92aWRlcihhZGFwdGVyRmFjdG9yeSkpOworCisJCQkJY3JlYXRlQ29udGV4dE1lbnVGb3IodGFibGVWaWV3ZXIpOworCQkJCWludCBwYWdlSW5kZXggPSBhZGRQYWdlKHZpZXdlclBhbmUuZ2V0Q29udHJvbCgpKTsKKwkJCQlzZXRQYWdlVGV4dChwYWdlSW5kZXgsIGdldFN0cmluZygiX1VJX1RhYmxlUGFnZV9sYWJlbCIpKTsKKwkJCX0KKworCQkJLy8gVGhpcyBpcyB0aGUgcGFnZSBmb3IgdGhlIHRhYmxlIHRyZWUgdmlld2VyLgorCQkJLy8KKwkJCXsKKwkJCQlWaWV3ZXJQYW5lIHZpZXdlclBhbmUgPQorCQkJCQluZXcgVmlld2VyUGFuZShnZXRTaXRlKCkuZ2V0UGFnZSgpLCBHcmFwaGdlbmVyYXRvcnNFZGl0b3IudGhpcykgeworCQkJCQkJQE92ZXJyaWRlCisJCQkJCQlwdWJsaWMgVmlld2VyIGNyZWF0ZVZpZXdlcihDb21wb3NpdGUgY29tcG9zaXRlKSB7CisJCQkJCQkJcmV0dXJuIG5ldyBUcmVlVmlld2VyKGNvbXBvc2l0ZSk7CisJCQkJCQl9CisJCQkJCQlAT3ZlcnJpZGUKKwkJCQkJCXB1YmxpYyB2b2lkIHJlcXVlc3RBY3RpdmF0aW9uKCkgeworCQkJCQkJCXN1cGVyLnJlcXVlc3RBY3RpdmF0aW9uKCk7CisJCQkJCQkJc2V0Q3VycmVudFZpZXdlclBhbmUodGhpcyk7CisJCQkJCQl9CisJCQkJCX07CisJCQkJdmlld2VyUGFuZS5jcmVhdGVDb250cm9sKGdldENvbnRhaW5lcigpKTsKKworCQkJCXRyZWVWaWV3ZXJXaXRoQ29sdW1ucyA9IChUcmVlVmlld2VyKXZpZXdlclBhbmUuZ2V0Vmlld2VyKCk7CisKKwkJCQlUcmVlIHRyZWUgPSB0cmVlVmlld2VyV2l0aENvbHVtbnMuZ2V0VHJlZSgpOworCQkJCXRyZWUuc2V0TGF5b3V0RGF0YShuZXcgRmlsbExheW91dCgpKTsKKwkJCQl0cmVlLnNldEhlYWRlclZpc2libGUodHJ1ZSk7CisJCQkJdHJlZS5zZXRMaW5lc1Zpc2libGUodHJ1ZSk7CisKKwkJCQlUcmVlQ29sdW1uIG9iamVjdENvbHVtbiA9IG5ldyBUcmVlQ29sdW1uKHRyZWUsIFNXVC5OT05FKTsKKwkJCQlvYmplY3RDb2x1bW4uc2V0VGV4dChnZXRTdHJpbmcoIl9VSV9PYmplY3RDb2x1bW5fbGFiZWwiKSk7CisJCQkJb2JqZWN0Q29sdW1uLnNldFJlc2l6YWJsZSh0cnVlKTsKKwkJCQlvYmplY3RDb2x1bW4uc2V0V2lkdGgoMjUwKTsKKworCQkJCVRyZWVDb2x1bW4gc2VsZkNvbHVtbiA9IG5ldyBUcmVlQ29sdW1uKHRyZWUsIFNXVC5OT05FKTsKKwkJCQlzZWxmQ29sdW1uLnNldFRleHQoZ2V0U3RyaW5nKCJfVUlfU2VsZkNvbHVtbl9sYWJlbCIpKTsKKwkJCQlzZWxmQ29sdW1uLnNldFJlc2l6YWJsZSh0cnVlKTsKKwkJCQlzZWxmQ29sdW1uLnNldFdpZHRoKDIwMCk7CisKKwkJCQl0cmVlVmlld2VyV2l0aENvbHVtbnMuc2V0Q29sdW1uUHJvcGVydGllcyhuZXcgU3RyaW5nIFtdIHsiYSIsICJiIn0pOworCQkJCXRyZWVWaWV3ZXJXaXRoQ29sdW1ucy5zZXRDb250ZW50UHJvdmlkZXIobmV3IEFkYXB0ZXJGYWN0b3J5Q29udGVudFByb3ZpZGVyKGFkYXB0ZXJGYWN0b3J5KSk7CisJCQkJdHJlZVZpZXdlcldpdGhDb2x1bW5zLnNldExhYmVsUHJvdmlkZXIobmV3IEFkYXB0ZXJGYWN0b3J5TGFiZWxQcm92aWRlcihhZGFwdGVyRmFjdG9yeSkpOworCisJCQkJY3JlYXRlQ29udGV4dE1lbnVGb3IodHJlZVZpZXdlcldpdGhDb2x1bW5zKTsKKwkJCQlpbnQgcGFnZUluZGV4ID0gYWRkUGFnZSh2aWV3ZXJQYW5lLmdldENvbnRyb2woKSk7CisJCQkJc2V0UGFnZVRleHQocGFnZUluZGV4LCBnZXRTdHJpbmcoIl9VSV9UcmVlV2l0aENvbHVtbnNQYWdlX2xhYmVsIikpOworCQkJfQorCisJCQlnZXRTaXRlKCkuZ2V0U2hlbGwoKS5nZXREaXNwbGF5KCkuYXN5bmNFeGVjCisJCQkJKG5ldyBSdW5uYWJsZSgpIHsKKwkJCQkJIHB1YmxpYyB2b2lkIHJ1bigpIHsKKwkJCQkJCSBzZXRBY3RpdmVQYWdlKDApOworCQkJCQkgfQorCQkJCSB9KTsKKwkJfQorCisJCS8vIEVuc3VyZXMgdGhhdCB0aGlzIGVkaXRvciB3aWxsIG9ubHkgZGlzcGxheSB0aGUgcGFnZSdzIHRhYgorCQkvLyBhcmVhIGlmIHRoZXJlIGFyZSBtb3JlIHRoYW4gb25lIHBhZ2UKKwkJLy8KKwkJZ2V0Q29udGFpbmVyKCkuYWRkQ29udHJvbExpc3RlbmVyCisJCQkobmV3IENvbnRyb2xBZGFwdGVyKCkgeworCQkJCWJvb2xlYW4gZ3VhcmQgPSBmYWxzZTsKKwkJCQlAT3ZlcnJpZGUKKwkJCQlwdWJsaWMgdm9pZCBjb250cm9sUmVzaXplZChDb250cm9sRXZlbnQgZXZlbnQpIHsKKwkJCQkJaWYgKCFndWFyZCkgeworCQkJCQkJZ3VhcmQgPSB0cnVlOworCQkJCQkJaGlkZVRhYnMoKTsKKwkJCQkJCWd1YXJkID0gZmFsc2U7CisJCQkJCX0KKwkJCQl9CisJCQkgfSk7CisKKwkJZ2V0U2l0ZSgpLmdldFNoZWxsKCkuZ2V0RGlzcGxheSgpLmFzeW5jRXhlYworCQkJKG5ldyBSdW5uYWJsZSgpIHsKKwkJCQkgcHVibGljIHZvaWQgcnVuKCkgeworCQkJCQkgdXBkYXRlUHJvYmxlbUluZGljYXRpb24oKTsKKwkJCQkgfQorCQkJIH0pOworCX0KKworCS8qKgorCSAqIElmIHRoZXJlIGlzIGp1c3Qgb25lIHBhZ2UgaW4gdGhlIG11bHRpLXBhZ2UgZWRpdG9yIHBhcnQsCisJICogdGhpcyBoaWRlcyB0aGUgc2luZ2xlIHRhYiBhdCB0aGUgYm90dG9tLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIGhpZGVUYWJzKCkgeworCQlpZiAoZ2V0UGFnZUNvdW50KCkgPD0gMSkgeworCQkJc2V0UGFnZVRleHQoMCwgIiIpOworCQkJaWYgKGdldENvbnRhaW5lcigpIGluc3RhbmNlb2YgQ1RhYkZvbGRlcikgeworCQkJCSgoQ1RhYkZvbGRlcilnZXRDb250YWluZXIoKSkuc2V0VGFiSGVpZ2h0KDEpOworCQkJCVBvaW50IHBvaW50ID0gZ2V0Q29udGFpbmVyKCkuZ2V0U2l6ZSgpOworCQkJCWdldENvbnRhaW5lcigpLnNldFNpemUocG9pbnQueCwgcG9pbnQueSArIDYpOworCQkJfQorCQl9CisJfQorCisJLyoqCisJICogSWYgdGhlcmUgaXMgbW9yZSB0aGFuIG9uZSBwYWdlIGluIHRoZSBtdWx0aS1wYWdlIGVkaXRvciBwYXJ0LAorCSAqIHRoaXMgc2hvd3MgdGhlIHRhYnMgYXQgdGhlIGJvdHRvbS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBzaG93VGFicygpIHsKKwkJaWYgKGdldFBhZ2VDb3VudCgpID4gMSkgeworCQkJc2V0UGFnZVRleHQoMCwgZ2V0U3RyaW5nKCJfVUlfU2VsZWN0aW9uUGFnZV9sYWJlbCIpKTsKKwkJCWlmIChnZXRDb250YWluZXIoKSBpbnN0YW5jZW9mIENUYWJGb2xkZXIpIHsKKwkJCQkoKENUYWJGb2xkZXIpZ2V0Q29udGFpbmVyKCkpLnNldFRhYkhlaWdodChTV1QuREVGQVVMVCk7CisJCQkJUG9pbnQgcG9pbnQgPSBnZXRDb250YWluZXIoKS5nZXRTaXplKCk7CisJCQkJZ2V0Q29udGFpbmVyKCkuc2V0U2l6ZShwb2ludC54LCBwb2ludC55IC0gNik7CisJCQl9CisJCX0KKwl9CisKKwkvKioKKwkgKiBUaGlzIGlzIHVzZWQgdG8gdHJhY2sgdGhlIGFjdGl2ZSB2aWV3ZXIuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgcGFnZUNoYW5nZShpbnQgcGFnZUluZGV4KSB7CisJCXN1cGVyLnBhZ2VDaGFuZ2UocGFnZUluZGV4KTsKKworCQlpZiAoY29udGVudE91dGxpbmVQYWdlICE9IG51bGwpIHsKKwkJCWhhbmRsZUNvbnRlbnRPdXRsaW5lU2VsZWN0aW9uKGNvbnRlbnRPdXRsaW5lUGFnZS5nZXRTZWxlY3Rpb24oKSk7CisJCX0KKwl9CisKKwkvKioKKwkgKiBUaGlzIGlzIGhvdyB0aGUgZnJhbWV3b3JrIGRldGVybWluZXMgd2hpY2ggaW50ZXJmYWNlcyB3ZSBpbXBsZW1lbnQuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQFN1cHByZXNzV2FybmluZ3MoInVuY2hlY2tlZCIpCisJQE92ZXJyaWRlCisJcHVibGljIE9iamVjdCBnZXRBZGFwdGVyKENsYXNzIGtleSkgeworCQlpZiAoa2V5LmVxdWFscyhJQ29udGVudE91dGxpbmVQYWdlLmNsYXNzKSkgeworCQkJcmV0dXJuIHNob3dPdXRsaW5lVmlldygpID8gZ2V0Q29udGVudE91dGxpbmVQYWdlKCkgOiBudWxsOworCQl9CisJCWVsc2UgaWYgKGtleS5lcXVhbHMoSVByb3BlcnR5U2hlZXRQYWdlLmNsYXNzKSkgeworCQkJcmV0dXJuIGdldFByb3BlcnR5U2hlZXRQYWdlKCk7CisJCX0KKwkJZWxzZSBpZiAoa2V5LmVxdWFscyhJR290b01hcmtlci5jbGFzcykpIHsKKwkJCXJldHVybiB0aGlzOworCQl9CisJCWVsc2UgeworCQkJcmV0dXJuIHN1cGVyLmdldEFkYXB0ZXIoa2V5KTsKKwkJfQorCX0KKworCS8qKgorCSAqIFRoaXMgYWNjZXNzZXMgYSBjYWNoZWQgdmVyc2lvbiBvZiB0aGUgY29udGVudCBvdXRsaW5lci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgSUNvbnRlbnRPdXRsaW5lUGFnZSBnZXRDb250ZW50T3V0bGluZVBhZ2UoKSB7CisJCWlmIChjb250ZW50T3V0bGluZVBhZ2UgPT0gbnVsbCkgeworCQkJLy8gVGhlIGNvbnRlbnQgb3V0bGluZSBpcyBqdXN0IGEgdHJlZS4KKwkJCS8vCisJCQljbGFzcyBNeUNvbnRlbnRPdXRsaW5lUGFnZSBleHRlbmRzIENvbnRlbnRPdXRsaW5lUGFnZSB7CisJCQkJQE92ZXJyaWRlCisJCQkJcHVibGljIHZvaWQgY3JlYXRlQ29udHJvbChDb21wb3NpdGUgcGFyZW50KSB7CisJCQkJCXN1cGVyLmNyZWF0ZUNvbnRyb2wocGFyZW50KTsKKwkJCQkJY29udGVudE91dGxpbmVWaWV3ZXIgPSBnZXRUcmVlVmlld2VyKCk7CisJCQkJCWNvbnRlbnRPdXRsaW5lVmlld2VyLmFkZFNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcih0aGlzKTsKKworCQkJCQkvLyBTZXQgdXAgdGhlIHRyZWUgdmlld2VyLgorCQkJCQkvLworCQkJCQljb250ZW50T3V0bGluZVZpZXdlci5zZXRDb250ZW50UHJvdmlkZXIobmV3IEFkYXB0ZXJGYWN0b3J5Q29udGVudFByb3ZpZGVyKGFkYXB0ZXJGYWN0b3J5KSk7CisJCQkJCWNvbnRlbnRPdXRsaW5lVmlld2VyLnNldExhYmVsUHJvdmlkZXIobmV3IEFkYXB0ZXJGYWN0b3J5TGFiZWxQcm92aWRlcihhZGFwdGVyRmFjdG9yeSkpOworCQkJCQljb250ZW50T3V0bGluZVZpZXdlci5zZXRJbnB1dChlZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkpOworCisJCQkJCS8vIE1ha2Ugc3VyZSBvdXIgcG9wdXBzIHdvcmsuCisJCQkJCS8vCisJCQkJCWNyZWF0ZUNvbnRleHRNZW51Rm9yKGNvbnRlbnRPdXRsaW5lVmlld2VyKTsKKworCQkJCQlpZiAoIWVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKS5nZXRSZXNvdXJjZXMoKS5pc0VtcHR5KCkpIHsKKwkJCQkJICAvLyBTZWxlY3QgdGhlIHJvb3Qgb2JqZWN0IGluIHRoZSB2aWV3LgorCQkJCQkgIC8vCisJCQkJCSAgY29udGVudE91dGxpbmVWaWV3ZXIuc2V0U2VsZWN0aW9uKG5ldyBTdHJ1Y3R1cmVkU2VsZWN0aW9uKGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKS5nZXRSZXNvdXJjZXMoKS5nZXQoMCkpLCB0cnVlKTsKKwkJCQkJfQorCQkJCX0KKworCQkJCUBPdmVycmlkZQorCQkJCXB1YmxpYyB2b2lkIG1ha2VDb250cmlidXRpb25zKElNZW51TWFuYWdlciBtZW51TWFuYWdlciwgSVRvb2xCYXJNYW5hZ2VyIHRvb2xCYXJNYW5hZ2VyLCBJU3RhdHVzTGluZU1hbmFnZXIgc3RhdHVzTGluZU1hbmFnZXIpIHsKKwkJCQkJc3VwZXIubWFrZUNvbnRyaWJ1dGlvbnMobWVudU1hbmFnZXIsIHRvb2xCYXJNYW5hZ2VyLCBzdGF0dXNMaW5lTWFuYWdlcik7CisJCQkJCWNvbnRlbnRPdXRsaW5lU3RhdHVzTGluZU1hbmFnZXIgPSBzdGF0dXNMaW5lTWFuYWdlcjsKKwkJCQl9CisKKwkJCQlAT3ZlcnJpZGUKKwkJCQlwdWJsaWMgdm9pZCBzZXRBY3Rpb25CYXJzKElBY3Rpb25CYXJzIGFjdGlvbkJhcnMpIHsKKwkJCQkJc3VwZXIuc2V0QWN0aW9uQmFycyhhY3Rpb25CYXJzKTsKKwkJCQkJZ2V0QWN0aW9uQmFyQ29udHJpYnV0b3IoKS5zaGFyZUdsb2JhbEFjdGlvbnModGhpcywgYWN0aW9uQmFycyk7CisJCQkJfQorCQkJfQorCisJCQljb250ZW50T3V0bGluZVBhZ2UgPSBuZXcgTXlDb250ZW50T3V0bGluZVBhZ2UoKTsKKworCQkJLy8gTGlzdGVuIHRvIHNlbGVjdGlvbiBzbyB0aGF0IHdlIGNhbiBoYW5kbGUgaXQgaXMgYSBzcGVjaWFsIHdheS4KKwkJCS8vCisJCQljb250ZW50T3V0bGluZVBhZ2UuYWRkU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyCisJCQkJKG5ldyBJU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyKCkgeworCQkJCQkgLy8gVGhpcyBlbnN1cmVzIHRoYXQgd2UgaGFuZGxlIHNlbGVjdGlvbnMgY29ycmVjdGx5LgorCQkJCQkgLy8KKwkJCQkJIHB1YmxpYyB2b2lkIHNlbGVjdGlvbkNoYW5nZWQoU2VsZWN0aW9uQ2hhbmdlZEV2ZW50IGV2ZW50KSB7CisJCQkJCQkgaGFuZGxlQ29udGVudE91dGxpbmVTZWxlY3Rpb24oZXZlbnQuZ2V0U2VsZWN0aW9uKCkpOworCQkJCQkgfQorCQkJCSB9KTsKKwkJfQorCisJCXJldHVybiBjb250ZW50T3V0bGluZVBhZ2U7CisJfQorCisJLyoqCisJICogVGhpcyBhY2Nlc3NlcyBhIGNhY2hlZCB2ZXJzaW9uIG9mIHRoZSBwcm9wZXJ0eSBzaGVldC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgSVByb3BlcnR5U2hlZXRQYWdlIGdldFByb3BlcnR5U2hlZXRQYWdlKCkgeworCQlpZiAocHJvcGVydHlTaGVldFBhZ2UgPT0gbnVsbCkgeworCQkJcHJvcGVydHlTaGVldFBhZ2UgPQorCQkJCW5ldyBFeHRlbmRlZFByb3BlcnR5U2hlZXRQYWdlKGVkaXRpbmdEb21haW4pIHsKKwkJCQkJQE92ZXJyaWRlCisJCQkJCXB1YmxpYyB2b2lkIHNldFNlbGVjdGlvblRvVmlld2VyKExpc3Q8Pz4gc2VsZWN0aW9uKSB7CisJCQkJCQlHcmFwaGdlbmVyYXRvcnNFZGl0b3IudGhpcy5zZXRTZWxlY3Rpb25Ub1ZpZXdlcihzZWxlY3Rpb24pOworCQkJCQkJR3JhcGhnZW5lcmF0b3JzRWRpdG9yLnRoaXMuc2V0Rm9jdXMoKTsKKwkJCQkJfQorCisJCQkJCUBPdmVycmlkZQorCQkJCQlwdWJsaWMgdm9pZCBzZXRBY3Rpb25CYXJzKElBY3Rpb25CYXJzIGFjdGlvbkJhcnMpIHsKKwkJCQkJCXN1cGVyLnNldEFjdGlvbkJhcnMoYWN0aW9uQmFycyk7CisJCQkJCQlnZXRBY3Rpb25CYXJDb250cmlidXRvcigpLnNoYXJlR2xvYmFsQWN0aW9ucyh0aGlzLCBhY3Rpb25CYXJzKTsKKwkJCQkJfQorCQkJCX07CisJCQlwcm9wZXJ0eVNoZWV0UGFnZS5zZXRQcm9wZXJ0eVNvdXJjZVByb3ZpZGVyKG5ldyBBZGFwdGVyRmFjdG9yeUNvbnRlbnRQcm92aWRlcihhZGFwdGVyRmFjdG9yeSkpOworCQl9CisKKwkJcmV0dXJuIHByb3BlcnR5U2hlZXRQYWdlOworCX0KKworCS8qKgorCSAqIFRoaXMgZGVhbHMgd2l0aCBob3cgd2Ugd2FudCBzZWxlY3Rpb24gaW4gdGhlIG91dGxpbmVyIHRvIGFmZmVjdCB0aGUgb3RoZXIgdmlld3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgaGFuZGxlQ29udGVudE91dGxpbmVTZWxlY3Rpb24oSVNlbGVjdGlvbiBzZWxlY3Rpb24pIHsKKwkJaWYgKGN1cnJlbnRWaWV3ZXJQYW5lICE9IG51bGwgJiYgIXNlbGVjdGlvbi5pc0VtcHR5KCkgJiYgc2VsZWN0aW9uIGluc3RhbmNlb2YgSVN0cnVjdHVyZWRTZWxlY3Rpb24pIHsKKwkJCUl0ZXJhdG9yPD8+IHNlbGVjdGVkRWxlbWVudHMgPSAoKElTdHJ1Y3R1cmVkU2VsZWN0aW9uKXNlbGVjdGlvbikuaXRlcmF0b3IoKTsKKwkJCWlmIChzZWxlY3RlZEVsZW1lbnRzLmhhc05leHQoKSkgeworCQkJCS8vIEdldCB0aGUgZmlyc3Qgc2VsZWN0ZWQgZWxlbWVudC4KKwkJCQkvLworCQkJCU9iamVjdCBzZWxlY3RlZEVsZW1lbnQgPSBzZWxlY3RlZEVsZW1lbnRzLm5leHQoKTsKKworCQkJCS8vIElmIGl0J3MgdGhlIHNlbGVjdGlvbiB2aWV3ZXIsIHRoZW4gd2Ugd2FudCBpdCB0byBzZWxlY3QgdGhlIHNhbWUgc2VsZWN0aW9uIGFzIHRoaXMgc2VsZWN0aW9uLgorCQkJCS8vCisJCQkJaWYgKGN1cnJlbnRWaWV3ZXJQYW5lLmdldFZpZXdlcigpID09IHNlbGVjdGlvblZpZXdlcikgeworCQkJCQlBcnJheUxpc3Q8T2JqZWN0PiBzZWxlY3Rpb25MaXN0ID0gbmV3IEFycmF5TGlzdDxPYmplY3Q+KCk7CisJCQkJCXNlbGVjdGlvbkxpc3QuYWRkKHNlbGVjdGVkRWxlbWVudCk7CisJCQkJCXdoaWxlIChzZWxlY3RlZEVsZW1lbnRzLmhhc05leHQoKSkgeworCQkJCQkJc2VsZWN0aW9uTGlzdC5hZGQoc2VsZWN0ZWRFbGVtZW50cy5uZXh0KCkpOworCQkJCQl9CisKKwkJCQkJLy8gU2V0IHRoZSBzZWxlY3Rpb24gdG8gdGhlIHdpZGdldC4KKwkJCQkJLy8KKwkJCQkJc2VsZWN0aW9uVmlld2VyLnNldFNlbGVjdGlvbihuZXcgU3RydWN0dXJlZFNlbGVjdGlvbihzZWxlY3Rpb25MaXN0KSk7CisJCQkJfQorCQkJCWVsc2UgeworCQkJCQkvLyBTZXQgdGhlIGlucHV0IHRvIHRoZSB3aWRnZXQuCisJCQkJCS8vCisJCQkJCWlmIChjdXJyZW50Vmlld2VyUGFuZS5nZXRWaWV3ZXIoKS5nZXRJbnB1dCgpICE9IHNlbGVjdGVkRWxlbWVudCkgeworCQkJCQkJY3VycmVudFZpZXdlclBhbmUuZ2V0Vmlld2VyKCkuc2V0SW5wdXQoc2VsZWN0ZWRFbGVtZW50KTsKKwkJCQkJCWN1cnJlbnRWaWV3ZXJQYW5lLnNldFRpdGxlKHNlbGVjdGVkRWxlbWVudCk7CisJCQkJCX0KKwkJCQl9CisJCQl9CisJCX0KKwl9CisKKwkvKioKKwkgKiBUaGlzIGlzIGZvciBpbXBsZW1lbnRpbmcge0BsaW5rIElFZGl0b3JQYXJ0fSBhbmQgc2ltcGx5IHRlc3RzIHRoZSBjb21tYW5kIHN0YWNrLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBib29sZWFuIGlzRGlydHkoKSB7CisJCXJldHVybiAoKEJhc2ljQ29tbWFuZFN0YWNrKWVkaXRpbmdEb21haW4uZ2V0Q29tbWFuZFN0YWNrKCkpLmlzU2F2ZU5lZWRlZCgpOworCX0KKworCS8qKgorCSAqIFRoaXMgaXMgZm9yIGltcGxlbWVudGluZyB7QGxpbmsgSUVkaXRvclBhcnR9IGFuZCBzaW1wbHkgc2F2ZXMgdGhlIG1vZGVsIGZpbGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgZG9TYXZlKElQcm9ncmVzc01vbml0b3IgcHJvZ3Jlc3NNb25pdG9yKSB7CisJCS8vIFNhdmUgb25seSByZXNvdXJjZXMgdGhhdCBoYXZlIGFjdHVhbGx5IGNoYW5nZWQuCisJCS8vCisJCWZpbmFsIE1hcDxPYmplY3QsIE9iamVjdD4gc2F2ZU9wdGlvbnMgPSBuZXcgSGFzaE1hcDxPYmplY3QsIE9iamVjdD4oKTsKKwkJc2F2ZU9wdGlvbnMucHV0KFJlc291cmNlLk9QVElPTl9TQVZFX09OTFlfSUZfQ0hBTkdFRCwgUmVzb3VyY2UuT1BUSU9OX1NBVkVfT05MWV9JRl9DSEFOR0VEX01FTU9SWV9CVUZGRVIpOworCisJCS8vIERvIHRoZSB3b3JrIHdpdGhpbiBhbiBvcGVyYXRpb24gYmVjYXVzZSB0aGlzIGlzIGEgbG9uZyBydW5uaW5nIGFjdGl2aXR5IHRoYXQgbW9kaWZpZXMgdGhlIHdvcmtiZW5jaC4KKwkJLy8KKwkJV29ya3NwYWNlTW9kaWZ5T3BlcmF0aW9uIG9wZXJhdGlvbiA9CisJCQluZXcgV29ya3NwYWNlTW9kaWZ5T3BlcmF0aW9uKCkgeworCQkJCS8vIFRoaXMgaXMgdGhlIG1ldGhvZCB0aGF0IGdldHMgaW52b2tlZCB3aGVuIHRoZSBvcGVyYXRpb24gcnVucy4KKwkJCQkvLworCQkJCUBPdmVycmlkZQorCQkJCXB1YmxpYyB2b2lkIGV4ZWN1dGUoSVByb2dyZXNzTW9uaXRvciBtb25pdG9yKSB7CisJCQkJCS8vIFNhdmUgdGhlIHJlc291cmNlcyB0byB0aGUgZmlsZSBzeXN0ZW0uCisJCQkJCS8vCisJCQkJCWJvb2xlYW4gZmlyc3QgPSB0cnVlOworCQkJCQlmb3IgKFJlc291cmNlIHJlc291cmNlIDogZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpLmdldFJlc291cmNlcygpKSB7CisJCQkJCQlpZiAoKGZpcnN0IHx8ICFyZXNvdXJjZS5nZXRDb250ZW50cygpLmlzRW1wdHkoKSB8fCBpc1BlcnNpc3RlZChyZXNvdXJjZSkpICYmICFlZGl0aW5nRG9tYWluLmlzUmVhZE9ubHkocmVzb3VyY2UpKSB7CisJCQkJCQkJdHJ5IHsKKwkJCQkJCQkJbG9uZyB0aW1lU3RhbXAgPSByZXNvdXJjZS5nZXRUaW1lU3RhbXAoKTsKKwkJCQkJCQkJcmVzb3VyY2Uuc2F2ZShzYXZlT3B0aW9ucyk7CisJCQkJCQkJCWlmIChyZXNvdXJjZS5nZXRUaW1lU3RhbXAoKSAhPSB0aW1lU3RhbXApIHsKKwkJCQkJCQkJCXNhdmVkUmVzb3VyY2VzLmFkZChyZXNvdXJjZSk7CisJCQkJCQkJCX0KKwkJCQkJCQl9CisJCQkJCQkJY2F0Y2ggKEV4Y2VwdGlvbiBleGNlcHRpb24pIHsKKwkJCQkJCQkJcmVzb3VyY2VUb0RpYWdub3N0aWNNYXAucHV0KHJlc291cmNlLCBhbmFseXplUmVzb3VyY2VQcm9ibGVtcyhyZXNvdXJjZSwgZXhjZXB0aW9uKSk7CisJCQkJCQkJfQorCQkJCQkJCWZpcnN0ID0gZmFsc2U7CisJCQkJCQl9CisJCQkJCX0KKwkJCQl9CisJCQl9OworCisJCXVwZGF0ZVByb2JsZW1JbmRpY2F0aW9uID0gZmFsc2U7CisJCXRyeSB7CisJCQkvLyBUaGlzIHJ1bnMgdGhlIG9wdGlvbnMsIGFuZCBzaG93cyBwcm9ncmVzcy4KKwkJCS8vCisJCQluZXcgUHJvZ3Jlc3NNb25pdG9yRGlhbG9nKGdldFNpdGUoKS5nZXRTaGVsbCgpKS5ydW4odHJ1ZSwgZmFsc2UsIG9wZXJhdGlvbik7CisKKwkJCS8vIFJlZnJlc2ggdGhlIG5lY2Vzc2FyeSBzdGF0ZS4KKwkJCS8vCisJCQkoKEJhc2ljQ29tbWFuZFN0YWNrKWVkaXRpbmdEb21haW4uZ2V0Q29tbWFuZFN0YWNrKCkpLnNhdmVJc0RvbmUoKTsKKwkJCWZpcmVQcm9wZXJ0eUNoYW5nZShJRWRpdG9yUGFydC5QUk9QX0RJUlRZKTsKKwkJfQorCQljYXRjaCAoRXhjZXB0aW9uIGV4Y2VwdGlvbikgeworCQkJLy8gU29tZXRoaW5nIHdlbnQgd3JvbmcgdGhhdCBzaG91bGRuJ3QuCisJCQkvLworCQkJR3JhcGhnZW5lcmF0b3JFZGl0b3JQbHVnaW4uSU5TVEFOQ0UubG9nKGV4Y2VwdGlvbik7CisJCX0KKwkJdXBkYXRlUHJvYmxlbUluZGljYXRpb24gPSB0cnVlOworCQl1cGRhdGVQcm9ibGVtSW5kaWNhdGlvbigpOworCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyB3aGV0aGVyIHNvbWV0aGluZyBoYXMgYmVlbiBwZXJzaXN0ZWQgdG8gdGhlIFVSSSBvZiB0aGUgc3BlY2lmaWVkIHJlc291cmNlLgorCSAqIFRoZSBpbXBsZW1lbnRhdGlvbiB1c2VzIHRoZSBVUkkgY29udmVydGVyIGZyb20gdGhlIGVkaXRvcidzIHJlc291cmNlIHNldCB0byB0cnkgdG8gb3BlbiBhbiBpbnB1dCBzdHJlYW0uIAorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBib29sZWFuIGlzUGVyc2lzdGVkKFJlc291cmNlIHJlc291cmNlKSB7CisJCWJvb2xlYW4gcmVzdWx0ID0gZmFsc2U7CisJCXRyeSB7CisJCQlJbnB1dFN0cmVhbSBzdHJlYW0gPSBlZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkuZ2V0VVJJQ29udmVydGVyKCkuY3JlYXRlSW5wdXRTdHJlYW0ocmVzb3VyY2UuZ2V0VVJJKCkpOworCQkJaWYgKHN0cmVhbSAhPSBudWxsKSB7CisJCQkJcmVzdWx0ID0gdHJ1ZTsKKwkJCQlzdHJlYW0uY2xvc2UoKTsKKwkJCX0KKwkJfQorCQljYXRjaCAoSU9FeGNlcHRpb24gZSkgeworCQkJLy8gSWdub3JlCisJCX0KKwkJcmV0dXJuIHJlc3VsdDsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFsd2F5cyByZXR1cm5zIHRydWUgYmVjYXVzZSBpdCBpcyBub3QgY3VycmVudGx5IHN1cHBvcnRlZC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgYm9vbGVhbiBpc1NhdmVBc0FsbG93ZWQoKSB7CisJCXJldHVybiB0cnVlOworCX0KKworCS8qKgorCSAqIFRoaXMgYWxzbyBjaGFuZ2VzIHRoZSBlZGl0b3IncyBpbnB1dC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBkb1NhdmVBcygpIHsKKwkJU2F2ZUFzRGlhbG9nIHNhdmVBc0RpYWxvZyA9IG5ldyBTYXZlQXNEaWFsb2coZ2V0U2l0ZSgpLmdldFNoZWxsKCkpOworCQlzYXZlQXNEaWFsb2cub3BlbigpOworCQlJUGF0aCBwYXRoID0gc2F2ZUFzRGlhbG9nLmdldFJlc3VsdCgpOworCQlpZiAocGF0aCAhPSBudWxsKSB7CisJCQlJRmlsZSBmaWxlID0gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmdldFJvb3QoKS5nZXRGaWxlKHBhdGgpOworCQkJaWYgKGZpbGUgIT0gbnVsbCkgeworCQkJCWRvU2F2ZUFzKFVSSS5jcmVhdGVQbGF0Zm9ybVJlc291cmNlVVJJKGZpbGUuZ2V0RnVsbFBhdGgoKS50b1N0cmluZygpLCB0cnVlKSwgbmV3IEZpbGVFZGl0b3JJbnB1dChmaWxlKSk7CisJCQl9CisJCX0KKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBkb1NhdmVBcyhVUkkgdXJpLCBJRWRpdG9ySW5wdXQgZWRpdG9ySW5wdXQpIHsKKwkJKGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKS5nZXRSZXNvdXJjZXMoKS5nZXQoMCkpLnNldFVSSSh1cmkpOworCQlzZXRJbnB1dFdpdGhOb3RpZnkoZWRpdG9ySW5wdXQpOworCQlzZXRQYXJ0TmFtZShlZGl0b3JJbnB1dC5nZXROYW1lKCkpOworCQlJUHJvZ3Jlc3NNb25pdG9yIHByb2dyZXNzTW9uaXRvciA9CisJCQlnZXRBY3Rpb25CYXJzKCkuZ2V0U3RhdHVzTGluZU1hbmFnZXIoKSAhPSBudWxsID8KKwkJCQlnZXRBY3Rpb25CYXJzKCkuZ2V0U3RhdHVzTGluZU1hbmFnZXIoKS5nZXRQcm9ncmVzc01vbml0b3IoKSA6CisJCQkJbmV3IE51bGxQcm9ncmVzc01vbml0b3IoKTsKKwkJZG9TYXZlKHByb2dyZXNzTW9uaXRvcik7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgZ290b01hcmtlcihJTWFya2VyIG1hcmtlcikgeworCQl0cnkgeworCQkJaWYgKG1hcmtlci5nZXRUeXBlKCkuZXF1YWxzKEVWYWxpZGF0b3IuTUFSS0VSKSkgeworCQkJCVN0cmluZyB1cmlBdHRyaWJ1dGUgPSBtYXJrZXIuZ2V0QXR0cmlidXRlKEVWYWxpZGF0b3IuVVJJX0FUVFJJQlVURSwgbnVsbCk7CisJCQkJaWYgKHVyaUF0dHJpYnV0ZSAhPSBudWxsKSB7CisJCQkJCVVSSSB1cmkgPSBVUkkuY3JlYXRlVVJJKHVyaUF0dHJpYnV0ZSk7CisJCQkJCUVPYmplY3QgZU9iamVjdCA9IGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKS5nZXRFT2JqZWN0KHVyaSwgdHJ1ZSk7CisJCQkJCWlmIChlT2JqZWN0ICE9IG51bGwpIHsKKwkJCQkJICBzZXRTZWxlY3Rpb25Ub1ZpZXdlcihDb2xsZWN0aW9ucy5zaW5nbGV0b24oZWRpdGluZ0RvbWFpbi5nZXRXcmFwcGVyKGVPYmplY3QpKSk7CisJCQkJCX0KKwkJCQl9CisJCQl9CisJCX0KKwkJY2F0Y2ggKENvcmVFeGNlcHRpb24gZXhjZXB0aW9uKSB7CisJCQlHcmFwaGdlbmVyYXRvckVkaXRvclBsdWdpbi5JTlNUQU5DRS5sb2coZXhjZXB0aW9uKTsKKwkJfQorCX0KKworCS8qKgorCSAqIFRoaXMgaXMgY2FsbGVkIGR1cmluZyBzdGFydHVwLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGluaXQoSUVkaXRvclNpdGUgc2l0ZSwgSUVkaXRvcklucHV0IGVkaXRvcklucHV0KSB7CisJCXNldFNpdGUoc2l0ZSk7CisJCXNldElucHV0V2l0aE5vdGlmeShlZGl0b3JJbnB1dCk7CisJCXNldFBhcnROYW1lKGVkaXRvcklucHV0LmdldE5hbWUoKSk7CisJCXNpdGUuc2V0U2VsZWN0aW9uUHJvdmlkZXIodGhpcyk7CisJCXNpdGUuZ2V0UGFnZSgpLmFkZFBhcnRMaXN0ZW5lcihwYXJ0TGlzdGVuZXIpOworCQlSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuYWRkUmVzb3VyY2VDaGFuZ2VMaXN0ZW5lcihyZXNvdXJjZUNoYW5nZUxpc3RlbmVyLCBJUmVzb3VyY2VDaGFuZ2VFdmVudC5QT1NUX0NIQU5HRSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgc2V0Rm9jdXMoKSB7CisJCWlmIChjdXJyZW50Vmlld2VyUGFuZSAhPSBudWxsKSB7CisJCQljdXJyZW50Vmlld2VyUGFuZS5zZXRGb2N1cygpOworCQl9CisJCWVsc2UgeworCQkJZ2V0Q29udHJvbChnZXRBY3RpdmVQYWdlKCkpLnNldEZvY3VzKCk7CisJCX0KKwl9CisKKwkvKioKKwkgKiBUaGlzIGltcGxlbWVudHMge0BsaW5rIG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvblByb3ZpZGVyfS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBhZGRTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIoSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lciBsaXN0ZW5lcikgeworCQlzZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXJzLmFkZChsaXN0ZW5lcik7CisJfQorCisJLyoqCisJICogVGhpcyBpbXBsZW1lbnRzIHtAbGluayBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb25Qcm92aWRlcn0uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgcmVtb3ZlU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyKElTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIgbGlzdGVuZXIpIHsKKwkJc2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVycy5yZW1vdmUobGlzdGVuZXIpOworCX0KKworCS8qKgorCSAqIFRoaXMgaW1wbGVtZW50cyB7QGxpbmsgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uUHJvdmlkZXJ9IHRvIHJldHVybiB0aGlzIGVkaXRvcidzIG92ZXJhbGwgc2VsZWN0aW9uLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBJU2VsZWN0aW9uIGdldFNlbGVjdGlvbigpIHsKKwkJcmV0dXJuIGVkaXRvclNlbGVjdGlvbjsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGltcGxlbWVudHMge0BsaW5rIG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvblByb3ZpZGVyfSB0byBzZXQgdGhpcyBlZGl0b3IncyBvdmVyYWxsIHNlbGVjdGlvbi4KKwkgKiBDYWxsaW5nIHRoaXMgcmVzdWx0IHdpbGwgbm90aWZ5IHRoZSBsaXN0ZW5lcnMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgc2V0U2VsZWN0aW9uKElTZWxlY3Rpb24gc2VsZWN0aW9uKSB7CisJCWVkaXRvclNlbGVjdGlvbiA9IHNlbGVjdGlvbjsKKworCQlmb3IgKElTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIgbGlzdGVuZXIgOiBzZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXJzKSB7CisJCQlsaXN0ZW5lci5zZWxlY3Rpb25DaGFuZ2VkKG5ldyBTZWxlY3Rpb25DaGFuZ2VkRXZlbnQodGhpcywgc2VsZWN0aW9uKSk7CisJCX0KKwkJc2V0U3RhdHVzTGluZU1hbmFnZXIoc2VsZWN0aW9uKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRTdGF0dXNMaW5lTWFuYWdlcihJU2VsZWN0aW9uIHNlbGVjdGlvbikgeworCQlJU3RhdHVzTGluZU1hbmFnZXIgc3RhdHVzTGluZU1hbmFnZXIgPSBjdXJyZW50Vmlld2VyICE9IG51bGwgJiYgY3VycmVudFZpZXdlciA9PSBjb250ZW50T3V0bGluZVZpZXdlciA/CisJCQljb250ZW50T3V0bGluZVN0YXR1c0xpbmVNYW5hZ2VyIDogZ2V0QWN0aW9uQmFycygpLmdldFN0YXR1c0xpbmVNYW5hZ2VyKCk7CisKKwkJaWYgKHN0YXR1c0xpbmVNYW5hZ2VyICE9IG51bGwpIHsKKwkJCWlmIChzZWxlY3Rpb24gaW5zdGFuY2VvZiBJU3RydWN0dXJlZFNlbGVjdGlvbikgeworCQkJCUNvbGxlY3Rpb248Pz4gY29sbGVjdGlvbiA9ICgoSVN0cnVjdHVyZWRTZWxlY3Rpb24pc2VsZWN0aW9uKS50b0xpc3QoKTsKKwkJCQlzd2l0Y2ggKGNvbGxlY3Rpb24uc2l6ZSgpKSB7CisJCQkJCWNhc2UgMDogeworCQkJCQkJc3RhdHVzTGluZU1hbmFnZXIuc2V0TWVzc2FnZShnZXRTdHJpbmcoIl9VSV9Ob09iamVjdFNlbGVjdGVkIikpOworCQkJCQkJYnJlYWs7CisJCQkJCX0KKwkJCQkJY2FzZSAxOiB7CisJCQkJCQlTdHJpbmcgdGV4dCA9IG5ldyBBZGFwdGVyRmFjdG9yeUl0ZW1EZWxlZ2F0b3IoYWRhcHRlckZhY3RvcnkpLmdldFRleHQoY29sbGVjdGlvbi5pdGVyYXRvcigpLm5leHQoKSk7CisJCQkJCQlzdGF0dXNMaW5lTWFuYWdlci5zZXRNZXNzYWdlKGdldFN0cmluZygiX1VJX1NpbmdsZU9iamVjdFNlbGVjdGVkIiwgdGV4dCkpOworCQkJCQkJYnJlYWs7CisJCQkJCX0KKwkJCQkJZGVmYXVsdDogeworCQkJCQkJc3RhdHVzTGluZU1hbmFnZXIuc2V0TWVzc2FnZShnZXRTdHJpbmcoIl9VSV9NdWx0aU9iamVjdFNlbGVjdGVkIiwgSW50ZWdlci50b1N0cmluZyhjb2xsZWN0aW9uLnNpemUoKSkpKTsKKwkJCQkJCWJyZWFrOworCQkJCQl9CisJCQkJfQorCQkJfQorCQkJZWxzZSB7CisJCQkJc3RhdHVzTGluZU1hbmFnZXIuc2V0TWVzc2FnZSgiIik7CisJCQl9CisJCX0KKwl9CisKKwkvKioKKwkgKiBUaGlzIGxvb2tzIHVwIGEgc3RyaW5nIGluIHRoZSBwbHVnaW4ncyBwbHVnaW4ucHJvcGVydGllcyBmaWxlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByaXZhdGUgc3RhdGljIFN0cmluZyBnZXRTdHJpbmcoU3RyaW5nIGtleSkgeworCQlyZXR1cm4gR3JhcGhnZW5lcmF0b3JFZGl0b3JQbHVnaW4uSU5TVEFOQ0UuZ2V0U3RyaW5nKGtleSk7CisJfQorCisJLyoqCisJICogVGhpcyBsb29rcyB1cCBhIHN0cmluZyBpbiBwbHVnaW4ucHJvcGVydGllcywgbWFraW5nIGEgc3Vic3RpdHV0aW9uLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByaXZhdGUgc3RhdGljIFN0cmluZyBnZXRTdHJpbmcoU3RyaW5nIGtleSwgT2JqZWN0IHMxKSB7CisJCXJldHVybiBHcmFwaGdlbmVyYXRvckVkaXRvclBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoa2V5LCBuZXcgT2JqZWN0IFtdIHsgczEgfSk7CisJfQorCisJLyoqCisJICogVGhpcyBpbXBsZW1lbnRzIHtAbGluayBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSU1lbnVMaXN0ZW5lcn0gdG8gaGVscCBmaWxsIHRoZSBjb250ZXh0IG1lbnVzIHdpdGggY29udHJpYnV0aW9ucyBmcm9tIHRoZSBFZGl0IG1lbnUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgbWVudUFib3V0VG9TaG93KElNZW51TWFuYWdlciBtZW51TWFuYWdlcikgeworCQkoKElNZW51TGlzdGVuZXIpZ2V0RWRpdG9yU2l0ZSgpLmdldEFjdGlvbkJhckNvbnRyaWJ1dG9yKCkpLm1lbnVBYm91dFRvU2hvdyhtZW51TWFuYWdlcik7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVkaXRpbmdEb21haW5BY3Rpb25CYXJDb250cmlidXRvciBnZXRBY3Rpb25CYXJDb250cmlidXRvcigpIHsKKwkJcmV0dXJuIChFZGl0aW5nRG9tYWluQWN0aW9uQmFyQ29udHJpYnV0b3IpZ2V0RWRpdG9yU2l0ZSgpLmdldEFjdGlvbkJhckNvbnRyaWJ1dG9yKCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIElBY3Rpb25CYXJzIGdldEFjdGlvbkJhcnMoKSB7CisJCXJldHVybiBnZXRBY3Rpb25CYXJDb250cmlidXRvcigpLmdldEFjdGlvbkJhcnMoKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQWRhcHRlckZhY3RvcnkgZ2V0QWRhcHRlckZhY3RvcnkoKSB7CisJCXJldHVybiBhZGFwdGVyRmFjdG9yeTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBkaXNwb3NlKCkgeworCQl1cGRhdGVQcm9ibGVtSW5kaWNhdGlvbiA9IGZhbHNlOworCisJCVJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5yZW1vdmVSZXNvdXJjZUNoYW5nZUxpc3RlbmVyKHJlc291cmNlQ2hhbmdlTGlzdGVuZXIpOworCisJCWdldFNpdGUoKS5nZXRQYWdlKCkucmVtb3ZlUGFydExpc3RlbmVyKHBhcnRMaXN0ZW5lcik7CisKKwkJYWRhcHRlckZhY3RvcnkuZGlzcG9zZSgpOworCisJCWlmIChnZXRBY3Rpb25CYXJDb250cmlidXRvcigpLmdldEFjdGl2ZUVkaXRvcigpID09IHRoaXMpIHsKKwkJCWdldEFjdGlvbkJhckNvbnRyaWJ1dG9yKCkuc2V0QWN0aXZlRWRpdG9yKG51bGwpOworCQl9CisKKwkJaWYgKHByb3BlcnR5U2hlZXRQYWdlICE9IG51bGwpIHsKKwkJCXByb3BlcnR5U2hlZXRQYWdlLmRpc3Bvc2UoKTsKKwkJfQorCisJCWlmIChjb250ZW50T3V0bGluZVBhZ2UgIT0gbnVsbCkgeworCQkJY29udGVudE91dGxpbmVQYWdlLmRpc3Bvc2UoKTsKKwkJfQorCisJCXN1cGVyLmRpc3Bvc2UoKTsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHdoZXRoZXIgdGhlIG91dGxpbmUgdmlldyBzaG91bGQgYmUgcHJlc2VudGVkIHRvIHRoZSB1c2VyLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBib29sZWFuIHNob3dPdXRsaW5lVmlldygpIHsKKwkJcmV0dXJuIHRydWU7CisJfQorfQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLmdyYXBoZ2VuZXJhdG9ycy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9ncmFwaGdlbmVyYXRvcnMvcHJlc2VudGF0aW9uL0dyYXBoZ2VuZXJhdG9yc01vZGVsV2l6YXJkLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkuZ3JhcGhnZW5lcmF0b3JzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2dyYXBoZ2VuZXJhdG9ycy9wcmVzZW50YXRpb24vR3JhcGhnZW5lcmF0b3JzTW9kZWxXaXphcmQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMzIyYmZkMQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5ncmFwaGdlbmVyYXRvcnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZ3JhcGhnZW5lcmF0b3JzL3ByZXNlbnRhdGlvbi9HcmFwaGdlbmVyYXRvcnNNb2RlbFdpemFyZC5qYXZhCkBAIC0wLDAgKzEsNjExIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA5LDIwMTAgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmdyYXBoZ2VuZXJhdG9ycy5wcmVzZW50YXRpb247CisKKworaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7CitpbXBvcnQgamF2YS51dGlsLkFycmF5czsKK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbnM7CitpbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CitpbXBvcnQgamF2YS51dGlsLk1hcDsKK2ltcG9ydCBqYXZhLnV0aWwuTWlzc2luZ1Jlc291cmNlRXhjZXB0aW9uOworaW1wb3J0IGphdmEudXRpbC5TdHJpbmdUb2tlbml6ZXI7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JQ29udGFpbmVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklGaWxlOworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklGb2xkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3Q7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVJlc291cmNlOworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLlJlc291cmNlc1BsdWdpbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVByb2dyZXNzTW9uaXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGF0aDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLkNvbW1vblBsdWdpbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuVVJJOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzc2lmaWVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5yZXNvdXJjZS5SZXNvdXJjZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUucmVzb3VyY2UuUmVzb3VyY2VTZXQ7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnJlc291cmNlLmltcGwuUmVzb3VyY2VTZXRJbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS54bWkuWE1MUmVzb3VyY2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkucHJvdmlkZXIuRXh0ZW5kZWRJbWFnZVJlZ2lzdHJ5OworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmRpYWxvZ3MuTWVzc2FnZURpYWxvZzsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU3RydWN0dXJlZFNlbGVjdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlN0cnVjdHVyZWRTZWxlY3Rpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uud2l6YXJkLldpemFyZDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS53aXphcmQuV2l6YXJkUGFnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmdyYXBoZ2VuZXJhdG9ycy5HcmFwaGdlbmVyYXRvcnNGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhnZW5lcmF0b3JzLkdyYXBoZ2VuZXJhdG9yc1BhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaGdlbmVyYXRvcnMucHJvdmlkZXIuR3JhcGhnZW5lcmF0b3JFZGl0UGx1Z2luOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udWkuZ3JhcGhnZW5lcmF0b3JzLnByZXNlbnRhdGlvbi5HcmFwaGdlbmVyYXRvckVkaXRvclBsdWdpbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuU1dUOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuTW9kaWZ5RXZlbnQ7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5Nb2RpZnlMaXN0ZW5lcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QubGF5b3V0LkdyaWREYXRhOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5sYXlvdXQuR3JpZExheW91dDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21ibzsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuTGFiZWw7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuSU5ld1dpemFyZDsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5JV29ya2JlbmNoOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2hQYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2hQYXJ0OworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2hXaW5kb3c7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuUGFydEluaXRFeGNlcHRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuYWN0aW9ucy5Xb3Jrc3BhY2VNb2RpZnlPcGVyYXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuZGlhbG9ncy5XaXphcmROZXdGaWxlQ3JlYXRpb25QYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLnBhcnQuRmlsZUVkaXRvcklucHV0OworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLnBhcnQuSVNldFNlbGVjdGlvblRhcmdldDsKKworCisvKioKKyAqIFRoaXMgaXMgYSBzaW1wbGUgd2l6YXJkIGZvciBjcmVhdGluZyBhIG5ldyBtb2RlbCBmaWxlLgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgR3JhcGhnZW5lcmF0b3JzTW9kZWxXaXphcmQgZXh0ZW5kcyBXaXphcmQgaW1wbGVtZW50cyBJTmV3V2l6YXJkIHsKKwkvKioKKwkgKiBUaGUgc3VwcG9ydGVkIGV4dGVuc2lvbnMgZm9yIGNyZWF0ZWQgZmlsZXMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBMaXN0PFN0cmluZz4gRklMRV9FWFRFTlNJT05TID0KKwkJQ29sbGVjdGlvbnMudW5tb2RpZmlhYmxlTGlzdChBcnJheXMuYXNMaXN0KEdyYXBoZ2VuZXJhdG9yRWRpdG9yUGx1Z2luLklOU1RBTkNFLmdldFN0cmluZygiX1VJX0dyYXBoZ2VuZXJhdG9yc0VkaXRvckZpbGVuYW1lRXh0ZW5zaW9ucyIpLnNwbGl0KCJcXHMqLFxccyoiKSkpOworCisJLyoqCisJICogQSBmb3JtYXR0ZWQgbGlzdCBvZiBzdXBwb3J0ZWQgZmlsZSBleHRlbnNpb25zLCBzdWl0YWJsZSBmb3IgZGlzcGxheS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBGT1JNQVRURURfRklMRV9FWFRFTlNJT05TID0KKwkJR3JhcGhnZW5lcmF0b3JFZGl0b3JQbHVnaW4uSU5TVEFOQ0UuZ2V0U3RyaW5nKCJfVUlfR3JhcGhnZW5lcmF0b3JzRWRpdG9yRmlsZW5hbWVFeHRlbnNpb25zIikucmVwbGFjZUFsbCgiXFxzKixcXHMqIiwgIiwgIik7CisKKwkvKioKKwkgKiBUaGlzIGNhY2hlcyBhbiBpbnN0YW5jZSBvZiB0aGUgbW9kZWwgcGFja2FnZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgR3JhcGhnZW5lcmF0b3JzUGFja2FnZSBncmFwaGdlbmVyYXRvcnNQYWNrYWdlID0gR3JhcGhnZW5lcmF0b3JzUGFja2FnZS5lSU5TVEFOQ0U7CisKKwkvKioKKwkgKiBUaGlzIGNhY2hlcyBhbiBpbnN0YW5jZSBvZiB0aGUgbW9kZWwgZmFjdG9yeS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgR3JhcGhnZW5lcmF0b3JzRmFjdG9yeSBncmFwaGdlbmVyYXRvcnNGYWN0b3J5ID0gZ3JhcGhnZW5lcmF0b3JzUGFja2FnZS5nZXRHcmFwaGdlbmVyYXRvcnNGYWN0b3J5KCk7CisKKwkvKioKKwkgKiBUaGlzIGlzIHRoZSBmaWxlIGNyZWF0aW9uIHBhZ2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIEdyYXBoZ2VuZXJhdG9yc01vZGVsV2l6YXJkTmV3RmlsZUNyZWF0aW9uUGFnZSBuZXdGaWxlQ3JlYXRpb25QYWdlOworCisJLyoqCisJICogVGhpcyBpcyB0aGUgaW5pdGlhbCBvYmplY3QgY3JlYXRpb24gcGFnZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgR3JhcGhnZW5lcmF0b3JzTW9kZWxXaXphcmRJbml0aWFsT2JqZWN0Q3JlYXRpb25QYWdlIGluaXRpYWxPYmplY3RDcmVhdGlvblBhZ2U7CisKKwkvKioKKwkgKiBSZW1lbWJlciB0aGUgc2VsZWN0aW9uIGR1cmluZyBpbml0aWFsaXphdGlvbiBmb3IgcG9wdWxhdGluZyB0aGUgZGVmYXVsdCBjb250YWluZXIuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIElTdHJ1Y3R1cmVkU2VsZWN0aW9uIHNlbGVjdGlvbjsKKworCS8qKgorCSAqIFJlbWVtYmVyIHRoZSB3b3JrYmVuY2ggZHVyaW5nIGluaXRpYWxpemF0aW9uLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBJV29ya2JlbmNoIHdvcmtiZW5jaDsKKworCS8qKgorCSAqIENhY2hlcyB0aGUgbmFtZXMgb2YgdGhlIHR5cGVzIHRoYXQgY2FuIGJlIGNyZWF0ZWQgYXMgdGhlIHJvb3Qgb2JqZWN0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBMaXN0PFN0cmluZz4gaW5pdGlhbE9iamVjdE5hbWVzOworCisJLyoqCisJICogVGhpcyBqdXN0IHJlY29yZHMgdGhlIGluZm9ybWF0aW9uLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIGluaXQoSVdvcmtiZW5jaCB3b3JrYmVuY2gsIElTdHJ1Y3R1cmVkU2VsZWN0aW9uIHNlbGVjdGlvbikgeworCQl0aGlzLndvcmtiZW5jaCA9IHdvcmtiZW5jaDsKKwkJdGhpcy5zZWxlY3Rpb24gPSBzZWxlY3Rpb247CisJCXNldFdpbmRvd1RpdGxlKEdyYXBoZ2VuZXJhdG9yRWRpdG9yUGx1Z2luLklOU1RBTkNFLmdldFN0cmluZygiX1VJX1dpemFyZF9sYWJlbCIpKTsKKwkJc2V0RGVmYXVsdFBhZ2VJbWFnZURlc2NyaXB0b3IoRXh0ZW5kZWRJbWFnZVJlZ2lzdHJ5LklOU1RBTkNFLmdldEltYWdlRGVzY3JpcHRvcihHcmFwaGdlbmVyYXRvckVkaXRvclBsdWdpbi5JTlNUQU5DRS5nZXRJbWFnZSgiZnVsbC93aXpiYW4vTmV3R3JhcGhnZW5lcmF0b3JzIikpKTsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBuYW1lcyBvZiB0aGUgdHlwZXMgdGhhdCBjYW4gYmUgY3JlYXRlZCBhcyB0aGUgcm9vdCBvYmplY3QuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIENvbGxlY3Rpb248U3RyaW5nPiBnZXRJbml0aWFsT2JqZWN0TmFtZXMoKSB7CisJCWlmIChpbml0aWFsT2JqZWN0TmFtZXMgPT0gbnVsbCkgeworCQkJaW5pdGlhbE9iamVjdE5hbWVzID0gbmV3IEFycmF5TGlzdDxTdHJpbmc+KCk7CisJCQlmb3IgKEVDbGFzc2lmaWVyIGVDbGFzc2lmaWVyIDogZ3JhcGhnZW5lcmF0b3JzUGFja2FnZS5nZXRFQ2xhc3NpZmllcnMoKSkgeworCQkJCWlmIChlQ2xhc3NpZmllciBpbnN0YW5jZW9mIEVDbGFzcykgeworCQkJCQlFQ2xhc3MgZUNsYXNzID0gKEVDbGFzcyllQ2xhc3NpZmllcjsKKwkJCQkJaWYgKCFlQ2xhc3MuaXNBYnN0cmFjdCgpKSB7CisJCQkJCQlpbml0aWFsT2JqZWN0TmFtZXMuYWRkKGVDbGFzcy5nZXROYW1lKCkpOworCQkJCQl9CisJCQkJfQorCQkJfQorCQkJQ29sbGVjdGlvbnMuc29ydChpbml0aWFsT2JqZWN0TmFtZXMsIENvbW1vblBsdWdpbi5JTlNUQU5DRS5nZXRDb21wYXJhdG9yKCkpOworCQl9CisJCXJldHVybiBpbml0aWFsT2JqZWN0TmFtZXM7CisJfQorCisJLyoqCisJICogQ3JlYXRlIGEgbmV3IG1vZGVsLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBFT2JqZWN0IGNyZWF0ZUluaXRpYWxNb2RlbCgpIHsKKwkJRUNsYXNzIGVDbGFzcyA9IChFQ2xhc3MpZ3JhcGhnZW5lcmF0b3JzUGFja2FnZS5nZXRFQ2xhc3NpZmllcihpbml0aWFsT2JqZWN0Q3JlYXRpb25QYWdlLmdldEluaXRpYWxPYmplY3ROYW1lKCkpOworCQlFT2JqZWN0IHJvb3RPYmplY3QgPSBncmFwaGdlbmVyYXRvcnNGYWN0b3J5LmNyZWF0ZShlQ2xhc3MpOworCQlyZXR1cm4gcm9vdE9iamVjdDsKKwl9CisKKwkvKioKKwkgKiBEbyB0aGUgd29yayBhZnRlciBldmVyeXRoaW5nIGlzIHNwZWNpZmllZC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgYm9vbGVhbiBwZXJmb3JtRmluaXNoKCkgeworCQl0cnkgeworCQkJLy8gUmVtZW1iZXIgdGhlIGZpbGUuCisJCQkvLworCQkJZmluYWwgSUZpbGUgbW9kZWxGaWxlID0gZ2V0TW9kZWxGaWxlKCk7CisKKwkJCS8vIERvIHRoZSB3b3JrIHdpdGhpbiBhbiBvcGVyYXRpb24uCisJCQkvLworCQkJV29ya3NwYWNlTW9kaWZ5T3BlcmF0aW9uIG9wZXJhdGlvbiA9CisJCQkJbmV3IFdvcmtzcGFjZU1vZGlmeU9wZXJhdGlvbigpIHsKKwkJCQkJQE92ZXJyaWRlCisJCQkJCXByb3RlY3RlZCB2b2lkIGV4ZWN1dGUoSVByb2dyZXNzTW9uaXRvciBwcm9ncmVzc01vbml0b3IpIHsKKwkJCQkJCXRyeSB7CisJCQkJCQkJLy8gQ3JlYXRlIGEgcmVzb3VyY2Ugc2V0CisJCQkJCQkJLy8KKwkJCQkJCQlSZXNvdXJjZVNldCByZXNvdXJjZVNldCA9IG5ldyBSZXNvdXJjZVNldEltcGwoKTsKKworCQkJCQkJCS8vIEdldCB0aGUgVVJJIG9mIHRoZSBtb2RlbCBmaWxlLgorCQkJCQkJCS8vCisJCQkJCQkJVVJJIGZpbGVVUkkgPSBVUkkuY3JlYXRlUGxhdGZvcm1SZXNvdXJjZVVSSShtb2RlbEZpbGUuZ2V0RnVsbFBhdGgoKS50b1N0cmluZygpLCB0cnVlKTsKKworCQkJCQkJCS8vIENyZWF0ZSBhIHJlc291cmNlIGZvciB0aGlzIGZpbGUuCisJCQkJCQkJLy8KKwkJCQkJCQlSZXNvdXJjZSByZXNvdXJjZSA9IHJlc291cmNlU2V0LmNyZWF0ZVJlc291cmNlKGZpbGVVUkkpOworCisJCQkJCQkJLy8gQWRkIHRoZSBpbml0aWFsIG1vZGVsIG9iamVjdCB0byB0aGUgY29udGVudHMuCisJCQkJCQkJLy8KKwkJCQkJCQlFT2JqZWN0IHJvb3RPYmplY3QgPSBjcmVhdGVJbml0aWFsTW9kZWwoKTsKKwkJCQkJCQlpZiAocm9vdE9iamVjdCAhPSBudWxsKSB7CisJCQkJCQkJCXJlc291cmNlLmdldENvbnRlbnRzKCkuYWRkKHJvb3RPYmplY3QpOworCQkJCQkJCX0KKworCQkJCQkJCS8vIFNhdmUgdGhlIGNvbnRlbnRzIG9mIHRoZSByZXNvdXJjZSB0byB0aGUgZmlsZSBzeXN0ZW0uCisJCQkJCQkJLy8KKwkJCQkJCQlNYXA8T2JqZWN0LCBPYmplY3Q+IG9wdGlvbnMgPSBuZXcgSGFzaE1hcDxPYmplY3QsIE9iamVjdD4oKTsKKwkJCQkJCQlvcHRpb25zLnB1dChYTUxSZXNvdXJjZS5PUFRJT05fRU5DT0RJTkcsIGluaXRpYWxPYmplY3RDcmVhdGlvblBhZ2UuZ2V0RW5jb2RpbmcoKSk7CisJCQkJCQkJcmVzb3VyY2Uuc2F2ZShvcHRpb25zKTsKKwkJCQkJCX0KKwkJCQkJCWNhdGNoIChFeGNlcHRpb24gZXhjZXB0aW9uKSB7CisJCQkJCQkJR3JhcGhnZW5lcmF0b3JFZGl0b3JQbHVnaW4uSU5TVEFOQ0UubG9nKGV4Y2VwdGlvbik7CisJCQkJCQl9CisJCQkJCQlmaW5hbGx5IHsKKwkJCQkJCQlwcm9ncmVzc01vbml0b3IuZG9uZSgpOworCQkJCQkJfQorCQkJCQl9CisJCQkJfTsKKworCQkJZ2V0Q29udGFpbmVyKCkucnVuKGZhbHNlLCBmYWxzZSwgb3BlcmF0aW9uKTsKKworCQkJLy8gU2VsZWN0IHRoZSBuZXcgZmlsZSByZXNvdXJjZSBpbiB0aGUgY3VycmVudCB2aWV3LgorCQkJLy8KKwkJCUlXb3JrYmVuY2hXaW5kb3cgd29ya2JlbmNoV2luZG93ID0gd29ya2JlbmNoLmdldEFjdGl2ZVdvcmtiZW5jaFdpbmRvdygpOworCQkJSVdvcmtiZW5jaFBhZ2UgcGFnZSA9IHdvcmtiZW5jaFdpbmRvdy5nZXRBY3RpdmVQYWdlKCk7CisJCQlmaW5hbCBJV29ya2JlbmNoUGFydCBhY3RpdmVQYXJ0ID0gcGFnZS5nZXRBY3RpdmVQYXJ0KCk7CisJCQlpZiAoYWN0aXZlUGFydCBpbnN0YW5jZW9mIElTZXRTZWxlY3Rpb25UYXJnZXQpIHsKKwkJCQlmaW5hbCBJU2VsZWN0aW9uIHRhcmdldFNlbGVjdGlvbiA9IG5ldyBTdHJ1Y3R1cmVkU2VsZWN0aW9uKG1vZGVsRmlsZSk7CisJCQkJZ2V0U2hlbGwoKS5nZXREaXNwbGF5KCkuYXN5bmNFeGVjCisJCQkJCShuZXcgUnVubmFibGUoKSB7CisJCQkJCQkgcHVibGljIHZvaWQgcnVuKCkgeworCQkJCQkJCSAoKElTZXRTZWxlY3Rpb25UYXJnZXQpYWN0aXZlUGFydCkuc2VsZWN0UmV2ZWFsKHRhcmdldFNlbGVjdGlvbik7CisJCQkJCQkgfQorCQkJCQkgfSk7CisJCQl9CisKKwkJCS8vIE9wZW4gYW4gZWRpdG9yIG9uIHRoZSBuZXcgZmlsZS4KKwkJCS8vCisJCQl0cnkgeworCQkJCXBhZ2Uub3BlbkVkaXRvcgorCQkJCQkobmV3IEZpbGVFZGl0b3JJbnB1dChtb2RlbEZpbGUpLAorCQkJCQkgd29ya2JlbmNoLmdldEVkaXRvclJlZ2lzdHJ5KCkuZ2V0RGVmYXVsdEVkaXRvcihtb2RlbEZpbGUuZ2V0RnVsbFBhdGgoKS50b1N0cmluZygpKS5nZXRJZCgpKTsJCQkJCSAJIAorCQkJfQorCQkJY2F0Y2ggKFBhcnRJbml0RXhjZXB0aW9uIGV4Y2VwdGlvbikgeworCQkJCU1lc3NhZ2VEaWFsb2cub3BlbkVycm9yKHdvcmtiZW5jaFdpbmRvdy5nZXRTaGVsbCgpLCBHcmFwaGdlbmVyYXRvckVkaXRvclBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoIl9VSV9PcGVuRWRpdG9yRXJyb3JfbGFiZWwiKSwgZXhjZXB0aW9uLmdldE1lc3NhZ2UoKSk7CisJCQkJcmV0dXJuIGZhbHNlOworCQkJfQorCisJCQlyZXR1cm4gdHJ1ZTsKKwkJfQorCQljYXRjaCAoRXhjZXB0aW9uIGV4Y2VwdGlvbikgeworCQkJR3JhcGhnZW5lcmF0b3JFZGl0b3JQbHVnaW4uSU5TVEFOQ0UubG9nKGV4Y2VwdGlvbik7CisJCQlyZXR1cm4gZmFsc2U7CisJCX0KKwl9CisKKwkvKioKKwkgKiBUaGlzIGlzIHRoZSBvbmUgcGFnZSBvZiB0aGUgd2l6YXJkLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBjbGFzcyBHcmFwaGdlbmVyYXRvcnNNb2RlbFdpemFyZE5ld0ZpbGVDcmVhdGlvblBhZ2UgZXh0ZW5kcyBXaXphcmROZXdGaWxlQ3JlYXRpb25QYWdlIHsKKwkJLyoqCisJCSAqIFBhc3MgaW4gdGhlIHNlbGVjdGlvbi4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCXB1YmxpYyBHcmFwaGdlbmVyYXRvcnNNb2RlbFdpemFyZE5ld0ZpbGVDcmVhdGlvblBhZ2UoU3RyaW5nIHBhZ2VJZCwgSVN0cnVjdHVyZWRTZWxlY3Rpb24gc2VsZWN0aW9uKSB7CisJCQlzdXBlcihwYWdlSWQsIHNlbGVjdGlvbik7CisJCX0KKworCQkvKioKKwkJICogVGhlIGZyYW1ld29yayBjYWxscyB0aGlzIHRvIHNlZSBpZiB0aGUgZmlsZSBpcyBjb3JyZWN0LgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJQE92ZXJyaWRlCisJCXByb3RlY3RlZCBib29sZWFuIHZhbGlkYXRlUGFnZSgpIHsKKwkJCWlmIChzdXBlci52YWxpZGF0ZVBhZ2UoKSkgeworCQkJCVN0cmluZyBleHRlbnNpb24gPSBuZXcgUGF0aChnZXRGaWxlTmFtZSgpKS5nZXRGaWxlRXh0ZW5zaW9uKCk7CisJCQkJaWYgKGV4dGVuc2lvbiA9PSBudWxsIHx8ICFGSUxFX0VYVEVOU0lPTlMuY29udGFpbnMoZXh0ZW5zaW9uKSkgeworCQkJCQlTdHJpbmcga2V5ID0gRklMRV9FWFRFTlNJT05TLnNpemUoKSA+IDEgPyAiX1dBUk5fRmlsZW5hbWVFeHRlbnNpb25zIiA6ICJfV0FSTl9GaWxlbmFtZUV4dGVuc2lvbiI7CisJCQkJCXNldEVycm9yTWVzc2FnZShHcmFwaGdlbmVyYXRvckVkaXRvclBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoa2V5LCBuZXcgT2JqZWN0IFtdIHsgRk9STUFUVEVEX0ZJTEVfRVhURU5TSU9OUyB9KSk7CisJCQkJCXJldHVybiBmYWxzZTsKKwkJCQl9CisJCQkJcmV0dXJuIHRydWU7CisJCQl9CisJCQlyZXR1cm4gZmFsc2U7CisJCX0KKworCQkvKioKKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCXB1YmxpYyBJRmlsZSBnZXRNb2RlbEZpbGUoKSB7CisJCQlyZXR1cm4gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmdldFJvb3QoKS5nZXRGaWxlKGdldENvbnRhaW5lckZ1bGxQYXRoKCkuYXBwZW5kKGdldEZpbGVOYW1lKCkpKTsKKwkJfQorCX0KKworCS8qKgorCSAqIFRoaXMgaXMgdGhlIHBhZ2Ugd2hlcmUgdGhlIHR5cGUgb2Ygb2JqZWN0IHRvIGNyZWF0ZSBpcyBzZWxlY3RlZC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgY2xhc3MgR3JhcGhnZW5lcmF0b3JzTW9kZWxXaXphcmRJbml0aWFsT2JqZWN0Q3JlYXRpb25QYWdlIGV4dGVuZHMgV2l6YXJkUGFnZSB7CisJCS8qKgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJcHJvdGVjdGVkIENvbWJvIGluaXRpYWxPYmplY3RGaWVsZDsKKworCQkvKioKKwkJICogQGdlbmVyYXRlZAorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICovCisJCXByb3RlY3RlZCBMaXN0PFN0cmluZz4gZW5jb2RpbmdzOworCisJCS8qKgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJcHJvdGVjdGVkIENvbWJvIGVuY29kaW5nRmllbGQ7CisKKwkJLyoqCisJCSAqIFBhc3MgaW4gdGhlIHNlbGVjdGlvbi4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCXB1YmxpYyBHcmFwaGdlbmVyYXRvcnNNb2RlbFdpemFyZEluaXRpYWxPYmplY3RDcmVhdGlvblBhZ2UoU3RyaW5nIHBhZ2VJZCkgeworCQkJc3VwZXIocGFnZUlkKTsKKwkJfQorCisJCS8qKgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJcHVibGljIHZvaWQgY3JlYXRlQ29udHJvbChDb21wb3NpdGUgcGFyZW50KSB7CisJCQlDb21wb3NpdGUgY29tcG9zaXRlID0gbmV3IENvbXBvc2l0ZShwYXJlbnQsIFNXVC5OT05FKTsgeworCQkJCUdyaWRMYXlvdXQgbGF5b3V0ID0gbmV3IEdyaWRMYXlvdXQoKTsKKwkJCQlsYXlvdXQubnVtQ29sdW1ucyA9IDE7CisJCQkJbGF5b3V0LnZlcnRpY2FsU3BhY2luZyA9IDEyOworCQkJCWNvbXBvc2l0ZS5zZXRMYXlvdXQobGF5b3V0KTsKKworCQkJCUdyaWREYXRhIGRhdGEgPSBuZXcgR3JpZERhdGEoKTsKKwkJCQlkYXRhLnZlcnRpY2FsQWxpZ25tZW50ID0gR3JpZERhdGEuRklMTDsKKwkJCQlkYXRhLmdyYWJFeGNlc3NWZXJ0aWNhbFNwYWNlID0gdHJ1ZTsKKwkJCQlkYXRhLmhvcml6b250YWxBbGlnbm1lbnQgPSBHcmlkRGF0YS5GSUxMOworCQkJCWNvbXBvc2l0ZS5zZXRMYXlvdXREYXRhKGRhdGEpOworCQkJfQorCisJCQlMYWJlbCBjb250YWluZXJMYWJlbCA9IG5ldyBMYWJlbChjb21wb3NpdGUsIFNXVC5MRUZUKTsKKwkJCXsKKwkJCQljb250YWluZXJMYWJlbC5zZXRUZXh0KEdyYXBoZ2VuZXJhdG9yRWRpdG9yUGx1Z2luLklOU1RBTkNFLmdldFN0cmluZygiX1VJX01vZGVsT2JqZWN0IikpOworCisJCQkJR3JpZERhdGEgZGF0YSA9IG5ldyBHcmlkRGF0YSgpOworCQkJCWRhdGEuaG9yaXpvbnRhbEFsaWdubWVudCA9IEdyaWREYXRhLkZJTEw7CisJCQkJY29udGFpbmVyTGFiZWwuc2V0TGF5b3V0RGF0YShkYXRhKTsKKwkJCX0KKworCQkJaW5pdGlhbE9iamVjdEZpZWxkID0gbmV3IENvbWJvKGNvbXBvc2l0ZSwgU1dULkJPUkRFUik7CisJCQl7CisJCQkJR3JpZERhdGEgZGF0YSA9IG5ldyBHcmlkRGF0YSgpOworCQkJCWRhdGEuaG9yaXpvbnRhbEFsaWdubWVudCA9IEdyaWREYXRhLkZJTEw7CisJCQkJZGF0YS5ncmFiRXhjZXNzSG9yaXpvbnRhbFNwYWNlID0gdHJ1ZTsKKwkJCQlpbml0aWFsT2JqZWN0RmllbGQuc2V0TGF5b3V0RGF0YShkYXRhKTsKKwkJCX0KKworCQkJZm9yIChTdHJpbmcgb2JqZWN0TmFtZSA6IGdldEluaXRpYWxPYmplY3ROYW1lcygpKSB7CisJCQkJaW5pdGlhbE9iamVjdEZpZWxkLmFkZChnZXRMYWJlbChvYmplY3ROYW1lKSk7CisJCQl9CisKKwkJCWlmIChpbml0aWFsT2JqZWN0RmllbGQuZ2V0SXRlbUNvdW50KCkgPT0gMSkgeworCQkJCWluaXRpYWxPYmplY3RGaWVsZC5zZWxlY3QoMCk7CisJCQl9CisJCQlpbml0aWFsT2JqZWN0RmllbGQuYWRkTW9kaWZ5TGlzdGVuZXIodmFsaWRhdG9yKTsKKworCQkJTGFiZWwgZW5jb2RpbmdMYWJlbCA9IG5ldyBMYWJlbChjb21wb3NpdGUsIFNXVC5MRUZUKTsKKwkJCXsKKwkJCQllbmNvZGluZ0xhYmVsLnNldFRleHQoR3JhcGhnZW5lcmF0b3JFZGl0b3JQbHVnaW4uSU5TVEFOQ0UuZ2V0U3RyaW5nKCJfVUlfWE1MRW5jb2RpbmciKSk7CisKKwkJCQlHcmlkRGF0YSBkYXRhID0gbmV3IEdyaWREYXRhKCk7CisJCQkJZGF0YS5ob3Jpem9udGFsQWxpZ25tZW50ID0gR3JpZERhdGEuRklMTDsKKwkJCQllbmNvZGluZ0xhYmVsLnNldExheW91dERhdGEoZGF0YSk7CisJCQl9CisJCQllbmNvZGluZ0ZpZWxkID0gbmV3IENvbWJvKGNvbXBvc2l0ZSwgU1dULkJPUkRFUik7CisJCQl7CisJCQkJR3JpZERhdGEgZGF0YSA9IG5ldyBHcmlkRGF0YSgpOworCQkJCWRhdGEuaG9yaXpvbnRhbEFsaWdubWVudCA9IEdyaWREYXRhLkZJTEw7CisJCQkJZGF0YS5ncmFiRXhjZXNzSG9yaXpvbnRhbFNwYWNlID0gdHJ1ZTsKKwkJCQllbmNvZGluZ0ZpZWxkLnNldExheW91dERhdGEoZGF0YSk7CisJCQl9CisKKwkJCWZvciAoU3RyaW5nIGVuY29kaW5nIDogZ2V0RW5jb2RpbmdzKCkpIHsKKwkJCQllbmNvZGluZ0ZpZWxkLmFkZChlbmNvZGluZyk7CisJCQl9CisKKwkJCWVuY29kaW5nRmllbGQuc2VsZWN0KDApOworCQkJZW5jb2RpbmdGaWVsZC5hZGRNb2RpZnlMaXN0ZW5lcih2YWxpZGF0b3IpOworCisJCQlzZXRQYWdlQ29tcGxldGUodmFsaWRhdGVQYWdlKCkpOworCQkJc2V0Q29udHJvbChjb21wb3NpdGUpOworCQl9CisKKwkJLyoqCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlwcm90ZWN0ZWQgTW9kaWZ5TGlzdGVuZXIgdmFsaWRhdG9yID0KKwkJCW5ldyBNb2RpZnlMaXN0ZW5lcigpIHsKKwkJCQlwdWJsaWMgdm9pZCBtb2RpZnlUZXh0KE1vZGlmeUV2ZW50IGUpIHsKKwkJCQkJc2V0UGFnZUNvbXBsZXRlKHZhbGlkYXRlUGFnZSgpKTsKKwkJCQl9CisJCQl9OworCisJCS8qKgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJcHJvdGVjdGVkIGJvb2xlYW4gdmFsaWRhdGVQYWdlKCkgeworCQkJcmV0dXJuIGdldEluaXRpYWxPYmplY3ROYW1lKCkgIT0gbnVsbCAmJiBnZXRFbmNvZGluZ3MoKS5jb250YWlucyhlbmNvZGluZ0ZpZWxkLmdldFRleHQoKSk7CisJCX0KKworCQkvKioKKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUBPdmVycmlkZQorCQlwdWJsaWMgdm9pZCBzZXRWaXNpYmxlKGJvb2xlYW4gdmlzaWJsZSkgeworCQkJc3VwZXIuc2V0VmlzaWJsZSh2aXNpYmxlKTsKKwkJCWlmICh2aXNpYmxlKSB7CisJCQkJaWYgKGluaXRpYWxPYmplY3RGaWVsZC5nZXRJdGVtQ291bnQoKSA9PSAxKSB7CisJCQkJCWluaXRpYWxPYmplY3RGaWVsZC5jbGVhclNlbGVjdGlvbigpOworCQkJCQllbmNvZGluZ0ZpZWxkLnNldEZvY3VzKCk7CisJCQkJfQorCQkJCWVsc2UgeworCQkJCQllbmNvZGluZ0ZpZWxkLmNsZWFyU2VsZWN0aW9uKCk7CisJCQkJCWluaXRpYWxPYmplY3RGaWVsZC5zZXRGb2N1cygpOworCQkJCX0KKwkJCX0KKwkJfQorCisJCS8qKgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJcHVibGljIFN0cmluZyBnZXRJbml0aWFsT2JqZWN0TmFtZSgpIHsKKwkJCVN0cmluZyBsYWJlbCA9IGluaXRpYWxPYmplY3RGaWVsZC5nZXRUZXh0KCk7CisKKwkJCWZvciAoU3RyaW5nIG5hbWUgOiBnZXRJbml0aWFsT2JqZWN0TmFtZXMoKSkgeworCQkJCWlmIChnZXRMYWJlbChuYW1lKS5lcXVhbHMobGFiZWwpKSB7CisJCQkJCXJldHVybiBuYW1lOworCQkJCX0KKwkJCX0KKwkJCXJldHVybiBudWxsOworCQl9CisKKwkJLyoqCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlwdWJsaWMgU3RyaW5nIGdldEVuY29kaW5nKCkgeworCQkJcmV0dXJuIGVuY29kaW5nRmllbGQuZ2V0VGV4dCgpOworCQl9CisKKwkJLyoqCisJCSAqIFJldHVybnMgdGhlIGxhYmVsIGZvciB0aGUgc3BlY2lmaWVkIHR5cGUgbmFtZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCXByb3RlY3RlZCBTdHJpbmcgZ2V0TGFiZWwoU3RyaW5nIHR5cGVOYW1lKSB7CisJCQl0cnkgeworCQkJCXJldHVybiBHcmFwaGdlbmVyYXRvckVkaXRQbHVnaW4uSU5TVEFOQ0UuZ2V0U3RyaW5nKCJfVUlfIiArIHR5cGVOYW1lICsgIl90eXBlIik7CisJCQl9CisJCQljYXRjaChNaXNzaW5nUmVzb3VyY2VFeGNlcHRpb24gbXJlKSB7CisJCQkJR3JhcGhnZW5lcmF0b3JFZGl0b3JQbHVnaW4uSU5TVEFOQ0UubG9nKG1yZSk7CisJCQl9CisJCQlyZXR1cm4gdHlwZU5hbWU7CisJCX0KKworCQkvKioKKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCXByb3RlY3RlZCBDb2xsZWN0aW9uPFN0cmluZz4gZ2V0RW5jb2RpbmdzKCkgeworCQkJaWYgKGVuY29kaW5ncyA9PSBudWxsKSB7CisJCQkJZW5jb2RpbmdzID0gbmV3IEFycmF5TGlzdDxTdHJpbmc+KCk7CisJCQkJZm9yIChTdHJpbmdUb2tlbml6ZXIgc3RyaW5nVG9rZW5pemVyID0gbmV3IFN0cmluZ1Rva2VuaXplcihHcmFwaGdlbmVyYXRvckVkaXRvclBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoIl9VSV9YTUxFbmNvZGluZ0Nob2ljZXMiKSk7IHN0cmluZ1Rva2VuaXplci5oYXNNb3JlVG9rZW5zKCk7ICkgeworCQkJCQllbmNvZGluZ3MuYWRkKHN0cmluZ1Rva2VuaXplci5uZXh0VG9rZW4oKSk7CisJCQkJfQorCQkJfQorCQkJcmV0dXJuIGVuY29kaW5nczsKKwkJfQorCX0KKworCS8qKgorCSAqIFRoZSBmcmFtZXdvcmsgY2FsbHMgdGhpcyB0byBjcmVhdGUgdGhlIGNvbnRlbnRzIG9mIHRoZSB3aXphcmQuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGFkZFBhZ2VzKCkgeworCQkvLyBDcmVhdGUgYSBwYWdlLCBzZXQgdGhlIHRpdGxlLCBhbmQgdGhlIGluaXRpYWwgbW9kZWwgZmlsZSBuYW1lLgorCQkvLworCQluZXdGaWxlQ3JlYXRpb25QYWdlID0gbmV3IEdyYXBoZ2VuZXJhdG9yc01vZGVsV2l6YXJkTmV3RmlsZUNyZWF0aW9uUGFnZSgiV2hhdGV2ZXIiLCBzZWxlY3Rpb24pOworCQluZXdGaWxlQ3JlYXRpb25QYWdlLnNldFRpdGxlKEdyYXBoZ2VuZXJhdG9yRWRpdG9yUGx1Z2luLklOU1RBTkNFLmdldFN0cmluZygiX1VJX0dyYXBoZ2VuZXJhdG9yc01vZGVsV2l6YXJkX2xhYmVsIikpOworCQluZXdGaWxlQ3JlYXRpb25QYWdlLnNldERlc2NyaXB0aW9uKEdyYXBoZ2VuZXJhdG9yRWRpdG9yUGx1Z2luLklOU1RBTkNFLmdldFN0cmluZygiX1VJX0dyYXBoZ2VuZXJhdG9yc01vZGVsV2l6YXJkX2Rlc2NyaXB0aW9uIikpOworCQluZXdGaWxlQ3JlYXRpb25QYWdlLnNldEZpbGVOYW1lKEdyYXBoZ2VuZXJhdG9yRWRpdG9yUGx1Z2luLklOU1RBTkNFLmdldFN0cmluZygiX1VJX0dyYXBoZ2VuZXJhdG9yc0VkaXRvckZpbGVuYW1lRGVmYXVsdEJhc2UiKSArICIuIiArIEZJTEVfRVhURU5TSU9OUy5nZXQoMCkpOworCQlhZGRQYWdlKG5ld0ZpbGVDcmVhdGlvblBhZ2UpOworCisJCS8vIFRyeSBhbmQgZ2V0IHRoZSByZXNvdXJjZSBzZWxlY3Rpb24gdG8gZGV0ZXJtaW5lIGEgY3VycmVudCBkaXJlY3RvcnkgZm9yIHRoZSBmaWxlIGRpYWxvZy4KKwkJLy8KKwkJaWYgKHNlbGVjdGlvbiAhPSBudWxsICYmICFzZWxlY3Rpb24uaXNFbXB0eSgpKSB7CisJCQkvLyBHZXQgdGhlIHJlc291cmNlLi4uCisJCQkvLworCQkJT2JqZWN0IHNlbGVjdGVkRWxlbWVudCA9IHNlbGVjdGlvbi5pdGVyYXRvcigpLm5leHQoKTsKKwkJCWlmIChzZWxlY3RlZEVsZW1lbnQgaW5zdGFuY2VvZiBJUmVzb3VyY2UpIHsKKwkJCQkvLyBHZXQgdGhlIHJlc291cmNlIHBhcmVudCwgaWYgaXRzIGEgZmlsZS4KKwkJCQkvLworCQkJCUlSZXNvdXJjZSBzZWxlY3RlZFJlc291cmNlID0gKElSZXNvdXJjZSlzZWxlY3RlZEVsZW1lbnQ7CisJCQkJaWYgKHNlbGVjdGVkUmVzb3VyY2UuZ2V0VHlwZSgpID09IElSZXNvdXJjZS5GSUxFKSB7CisJCQkJCXNlbGVjdGVkUmVzb3VyY2UgPSBzZWxlY3RlZFJlc291cmNlLmdldFBhcmVudCgpOworCQkJCX0KKworCQkJCS8vIFRoaXMgZ2l2ZXMgdXMgYSBkaXJlY3RvcnkuLi4KKwkJCQkvLworCQkJCWlmIChzZWxlY3RlZFJlc291cmNlIGluc3RhbmNlb2YgSUZvbGRlciB8fCBzZWxlY3RlZFJlc291cmNlIGluc3RhbmNlb2YgSVByb2plY3QpIHsKKwkJCQkJLy8gU2V0IHRoaXMgZm9yIHRoZSBjb250YWluZXIuCisJCQkJCS8vCisJCQkJCW5ld0ZpbGVDcmVhdGlvblBhZ2Uuc2V0Q29udGFpbmVyRnVsbFBhdGgoc2VsZWN0ZWRSZXNvdXJjZS5nZXRGdWxsUGF0aCgpKTsKKworCQkJCQkvLyBNYWtlIHVwIGEgdW5pcXVlIG5ldyBuYW1lIGhlcmUuCisJCQkJCS8vCisJCQkJCVN0cmluZyBkZWZhdWx0TW9kZWxCYXNlRmlsZW5hbWUgPSBHcmFwaGdlbmVyYXRvckVkaXRvclBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoIl9VSV9HcmFwaGdlbmVyYXRvcnNFZGl0b3JGaWxlbmFtZURlZmF1bHRCYXNlIik7CisJCQkJCVN0cmluZyBkZWZhdWx0TW9kZWxGaWxlbmFtZUV4dGVuc2lvbiA9IEZJTEVfRVhURU5TSU9OUy5nZXQoMCk7CisJCQkJCVN0cmluZyBtb2RlbEZpbGVuYW1lID0gZGVmYXVsdE1vZGVsQmFzZUZpbGVuYW1lICsgIi4iICsgZGVmYXVsdE1vZGVsRmlsZW5hbWVFeHRlbnNpb247CisJCQkJCWZvciAoaW50IGkgPSAxOyAoKElDb250YWluZXIpc2VsZWN0ZWRSZXNvdXJjZSkuZmluZE1lbWJlcihtb2RlbEZpbGVuYW1lKSAhPSBudWxsOyArK2kpIHsKKwkJCQkJCW1vZGVsRmlsZW5hbWUgPSBkZWZhdWx0TW9kZWxCYXNlRmlsZW5hbWUgKyBpICsgIi4iICsgZGVmYXVsdE1vZGVsRmlsZW5hbWVFeHRlbnNpb247CisJCQkJCX0KKwkJCQkJbmV3RmlsZUNyZWF0aW9uUGFnZS5zZXRGaWxlTmFtZShtb2RlbEZpbGVuYW1lKTsKKwkJCQl9CisJCQl9CisJCX0KKwkJaW5pdGlhbE9iamVjdENyZWF0aW9uUGFnZSA9IG5ldyBHcmFwaGdlbmVyYXRvcnNNb2RlbFdpemFyZEluaXRpYWxPYmplY3RDcmVhdGlvblBhZ2UoIldoYXRldmVyMiIpOworCQlpbml0aWFsT2JqZWN0Q3JlYXRpb25QYWdlLnNldFRpdGxlKEdyYXBoZ2VuZXJhdG9yRWRpdG9yUGx1Z2luLklOU1RBTkNFLmdldFN0cmluZygiX1VJX0dyYXBoZ2VuZXJhdG9yc01vZGVsV2l6YXJkX2xhYmVsIikpOworCQlpbml0aWFsT2JqZWN0Q3JlYXRpb25QYWdlLnNldERlc2NyaXB0aW9uKEdyYXBoZ2VuZXJhdG9yRWRpdG9yUGx1Z2luLklOU1RBTkNFLmdldFN0cmluZygiX1VJX1dpemFyZF9pbml0aWFsX29iamVjdF9kZXNjcmlwdGlvbiIpKTsKKwkJYWRkUGFnZShpbml0aWFsT2JqZWN0Q3JlYXRpb25QYWdlKTsKKwl9CisKKwkvKioKKwkgKiBHZXQgdGhlIGZpbGUgZnJvbSB0aGUgcGFnZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgSUZpbGUgZ2V0TW9kZWxGaWxlKCkgeworCQlyZXR1cm4gbmV3RmlsZUNyZWF0aW9uUGFnZS5nZXRNb2RlbEZpbGUoKTsKKwl9CisKK30KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5ncmFwaGdlbmVyYXRvcnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvZ3JhcGhnZW5lcmF0b3JzL2FkYXB0ZXJzL2dyYXBoZ2VuZXJhdG9ycHJvcGVydHllZGl0b3IvR3JhcGhHZW5lcmF0b3JQcm9wZXJ0eUVkaXRvci5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLmdyYXBoZ2VuZXJhdG9ycy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9ncmFwaGdlbmVyYXRvcnMvYWRhcHRlcnMvZ3JhcGhnZW5lcmF0b3Jwcm9wZXJ0eWVkaXRvci9HcmFwaEdlbmVyYXRvclByb3BlcnR5RWRpdG9yLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWNhYjZkMAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5ncmFwaGdlbmVyYXRvcnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvZ3JhcGhnZW5lcmF0b3JzL2FkYXB0ZXJzL2dyYXBoZ2VuZXJhdG9ycHJvcGVydHllZGl0b3IvR3JhcGhHZW5lcmF0b3JQcm9wZXJ0eUVkaXRvci5qYXZhCkBAIC0wLDAgKzEsNDEwIEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0udWkuZ3JhcGhnZW5lcmF0b3JzLmFkYXB0ZXJzLmdyYXBoZ2VuZXJhdG9ycHJvcGVydHllZGl0b3I7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgamF2YS5pby5GaWxlOworaW1wb3J0IGphdmEudXRpbC5NYXA7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FU3RydWN0dXJhbEZlYXR1cmU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLlNURU1VUkk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5JZGVudGlmaWFibGU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkdyYXBoOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGF0dGljZS5pbXBsLkxhdHRpY2VHZW5lcmF0b3JVdGlsaXR5SW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmdyYXBoZ2VuZXJhdG9ycy5HcmFwaEdlbmVyYXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmdyYXBoZ2VuZXJhdG9ycy5HcmFwaGdlbmVyYXRvcnNQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhnZW5lcmF0b3JzLkxhdHRpY2VHcmFwaEdlbmVyYXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmdyYXBoZ2VuZXJhdG9ycy5NaWdyYXRpb25FZGdlR3JhcGhHZW5lcmF0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaGdlbmVyYXRvcnMuUGFqZWtOZXRHcmFwaEdlbmVyYXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmdyYXBoZ2VuZXJhdG9ycy5QbGF0ZUNhcnJlZUdsb2JlR3JhcGhHZW5lcmF0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaGdlbmVyYXRvcnMuU3F1YXJlTGF0dGljZUdyYXBoR2VuZXJhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udWkuZ3JhcGhnZW5lcmF0b3JzLndpemFyZHMuTWVzc2FnZXM7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5Nb2RpZnlMaXN0ZW5lcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5CdXR0b247CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlRleHQ7CisKK3B1YmxpYyBjbGFzcyBHcmFwaEdlbmVyYXRvclByb3BlcnR5RWRpdG9yIGV4dGVuZHMgb3JnLmVjbGlwc2Uuc3RlbS51aS5lZGl0b3JzLkdlbmVyaWNQcm9wZXJ0eUVkaXRvciB7CisKKwlwdWJsaWMgR3JhcGhHZW5lcmF0b3JQcm9wZXJ0eUVkaXRvcihDb21wb3NpdGUgcGFyZW50LCBpbnQgc3R5bGUsIElQcm9qZWN0IHByb2plY3QpIHsKKwkJc3VwZXIocGFyZW50LHN0eWxlLCBwcm9qZWN0KTsKKwl9CisKKwkvKioKKwkgKiBDcmVhdGUgdGhlIGNvbXBvc2l0ZQorCSAqIAorCSAqIEBwYXJhbSBwYXJlbnQKKwkgKiBAcGFyYW0gc3R5bGUKKwkgKiBAcGFyYW0gcHJvamVjdFZhbGlkYXRvcgorCSAqLworCXB1YmxpYyBHcmFwaEdlbmVyYXRvclByb3BlcnR5RWRpdG9yKGZpbmFsIENvbXBvc2l0ZSBwYXJlbnQsIGZpbmFsIGludCBzdHlsZSwKKwkJCWZpbmFsIEdyYXBoR2VuZXJhdG9yIGdyYXBoR2VuZXJhdG9yLAorCQkJZmluYWwgTW9kaWZ5TGlzdGVuZXIgcHJvamVjdFZhbGlkYXRvciwgSVByb2plY3QgcHJvamVjdCkgeworCQlzdXBlcihwYXJlbnQsIHN0eWxlLCAoSWRlbnRpZmlhYmxlKWdyYXBoR2VuZXJhdG9yLCBwcm9qZWN0VmFsaWRhdG9yLCBwcm9qZWN0KTsKKwl9IC8vIEdyYXBoR2VuZXJhdG9yUHJvcGVydHlFZGl0b3IKKworCisKKwkvKioKKwkgKiBAcGFyYW0gZ3JhcGhHZW5lcmF0b3IKKwkgKiAgICAgICAgICAgIHRoZSB7QGxpbmsgR3JhcGhHZW5lcmF0b3J9IGluc3RhbmNlIHRvIHBvcHVsYXRlLgorCSAqLworCXB1YmxpYyBHcmFwaCBnZXRHcmFwaChmaW5hbCBHcmFwaEdlbmVyYXRvciBncmFwaEdlbmVyYXRvcikgeworCQlmb3IgKGZpbmFsIE1hcC5FbnRyeTxFU3RydWN0dXJhbEZlYXR1cmUsIFRleHQ+IGVudHJ5IDogbWFwLmVudHJ5U2V0KCkpIHsKKwkJCWlmKGVudHJ5LmdldEtleSgpLmdldEVDb250YWluaW5nQ2xhc3MoKS5nZXRDbGFzc2lmaWVySUQoKSA9PSBHcmFwaGdlbmVyYXRvcnNQYWNrYWdlLlNRVUFSRV9MQVRUSUNFX0dSQVBIX0dFTkVSQVRPUiB8fAorCQkJCQllbnRyeS5nZXRLZXkoKS5nZXRFQ29udGFpbmluZ0NsYXNzKCkuZ2V0Q2xhc3NpZmllcklEKCkgPT0gR3JhcGhnZW5lcmF0b3JzUGFja2FnZS5MQVRUSUNFX0dSQVBIX0dFTkVSQVRPUikgeworCQkJCXN3aXRjaCAoZW50cnkuZ2V0S2V5KCkuZ2V0RmVhdHVyZUlEKCkpIHsKKwkJCQkJY2FzZSBHcmFwaGdlbmVyYXRvcnNQYWNrYWdlLlNRVUFSRV9MQVRUSUNFX0dSQVBIX0dFTkVSQVRPUl9fWFNJWkU6CisJCQkJCQkoKFNxdWFyZUxhdHRpY2VHcmFwaEdlbmVyYXRvcilncmFwaEdlbmVyYXRvcikuc2V0WFNpemUoSW50ZWdlci5wYXJzZUludChlbnRyeS5nZXRWYWx1ZSgpLmdldFRleHQoKSkpOworCQkJCQkJYnJlYWs7CisJCQkJCWNhc2UgR3JhcGhnZW5lcmF0b3JzUGFja2FnZS5TUVVBUkVfTEFUVElDRV9HUkFQSF9HRU5FUkFUT1JfX1lTSVpFOgorCQkJCQkJKChTcXVhcmVMYXR0aWNlR3JhcGhHZW5lcmF0b3IpZ3JhcGhHZW5lcmF0b3IpLnNldFlTaXplKEludGVnZXIucGFyc2VJbnQoZW50cnkuZ2V0VmFsdWUoKS5nZXRUZXh0KCkpKTsKKwkJCQkJCWJyZWFrOworCQkJCQljYXNlIEdyYXBoZ2VuZXJhdG9yc1BhY2thZ2UuU1FVQVJFX0xBVFRJQ0VfR1JBUEhfR0VORVJBVE9SX19BUkVBOgorCQkJCQkJKChTcXVhcmVMYXR0aWNlR3JhcGhHZW5lcmF0b3IpZ3JhcGhHZW5lcmF0b3IpLnNldEFyZWEoRG91YmxlLnBhcnNlRG91YmxlKGVudHJ5LmdldFZhbHVlKCkuZ2V0VGV4dCgpKSk7CisJCQkJCQlicmVhazsKKwkJCQl9CisJCQl9IGVsc2UgaWYoZW50cnkuZ2V0S2V5KCkuZ2V0RUNvbnRhaW5pbmdDbGFzcygpLmdldENsYXNzaWZpZXJJRCgpID09IEdyYXBoZ2VuZXJhdG9yc1BhY2thZ2UuUExBVEVfQ0FSUkVFX0dMT0JFX0dSQVBIX0dFTkVSQVRPUikgeworCQkJCXN3aXRjaCAoZW50cnkuZ2V0S2V5KCkuZ2V0RmVhdHVyZUlEKCkpIHsKKwkJCQkJY2FzZSBHcmFwaGdlbmVyYXRvcnNQYWNrYWdlLlBMQVRFX0NBUlJFRV9HTE9CRV9HUkFQSF9HRU5FUkFUT1JfX0FOR1VMQVJfU1RFUDoKKwkJCQkJCSgoUGxhdGVDYXJyZWVHbG9iZUdyYXBoR2VuZXJhdG9yKWdyYXBoR2VuZXJhdG9yKS5zZXRBbmd1bGFyU3RlcChJbnRlZ2VyLnBhcnNlSW50KGVudHJ5LmdldFZhbHVlKCkuZ2V0VGV4dCgpKSk7CisJCQkJCQlicmVhazsJCisJCQkJCWNhc2UgR3JhcGhnZW5lcmF0b3JzUGFja2FnZS5QTEFURV9DQVJSRUVfR0xPQkVfR1JBUEhfR0VORVJBVE9SX19SQURJVVM6CisJCQkJCQkoKFBsYXRlQ2FycmVlR2xvYmVHcmFwaEdlbmVyYXRvcilncmFwaEdlbmVyYXRvcikuc2V0UmFkaXVzKERvdWJsZS5wYXJzZURvdWJsZShlbnRyeS5nZXRWYWx1ZSgpLmdldFRleHQoKSkpOworCQkJCQkJYnJlYWs7CQorCQkJCQljYXNlIEdyYXBoZ2VuZXJhdG9yc1BhY2thZ2UuU1FVQVJFX0xBVFRJQ0VfR1JBUEhfR0VORVJBVE9SX19BUkVBOgorCQkJCQkJKChTcXVhcmVMYXR0aWNlR3JhcGhHZW5lcmF0b3IpZ3JhcGhHZW5lcmF0b3IpLnNldEFyZWEoRG91YmxlLnBhcnNlRG91YmxlKGVudHJ5LmdldFZhbHVlKCkuZ2V0VGV4dCgpKSk7CisJCQkJCQlicmVhazsKKwkJCQl9IC8vIHN3aXRjaAorCQkJfSBlbHNlIGlmKGVudHJ5LmdldEtleSgpLmdldEVDb250YWluaW5nQ2xhc3MoKS5nZXRDbGFzc2lmaWVySUQoKSA9PSBHcmFwaGdlbmVyYXRvcnNQYWNrYWdlLk1JR1JBVElPTl9FREdFX0dSQVBIX0dFTkVSQVRPUikgeworCQkJCXN3aXRjaCAoZW50cnkuZ2V0S2V5KCkuZ2V0RmVhdHVyZUlEKCkpIHsKKwkJCQkJY2FzZSBHcmFwaGdlbmVyYXRvcnNQYWNrYWdlLk1JR1JBVElPTl9FREdFX0dSQVBIX0dFTkVSQVRPUl9fTE9DQVRJT046CisJCQkJCQlTdHJpbmcgbG9jID0gZW50cnkuZ2V0VmFsdWUoKS5nZXRUZXh0KCk7CisJCQkJCQlpZihsb2MgIT0gbnVsbCAmJiAhbG9jLnRyaW0oKS5lcXVhbHMoIiIpKQorCQkJCQkJCSgoTWlncmF0aW9uRWRnZUdyYXBoR2VuZXJhdG9yKWdyYXBoR2VuZXJhdG9yKS5zZXRMb2NhdGlvbihTVEVNVVJJLmNyZWF0ZVVSSShsb2MpKTsKKwkJCQkJCWJyZWFrOworCQkJCQljYXNlIEdyYXBoZ2VuZXJhdG9yc1BhY2thZ2UuTUlHUkFUSU9OX0VER0VfR1JBUEhfR0VORVJBVE9SX19NSUdSQVRJT05fUkFURToKKwkJCQkJCQkoKE1pZ3JhdGlvbkVkZ2VHcmFwaEdlbmVyYXRvcilncmFwaEdlbmVyYXRvcikuc2V0TWlncmF0aW9uUmF0ZShEb3VibGUucGFyc2VEb3VibGUoZW50cnkuZ2V0VmFsdWUoKS5nZXRUZXh0KCkpKTsKKwkJCQkJCWJyZWFrOworCQkJCQljYXNlIEdyYXBoZ2VuZXJhdG9yc1BhY2thZ2UuTUlHUkFUSU9OX0VER0VfR1JBUEhfR0VORVJBVE9SX19QT1BVTEFUSU9OOgorCQkJCQkJU3RyaW5nIHBvcCA9IGVudHJ5LmdldFZhbHVlKCkuZ2V0VGV4dCgpOworCQkJCQkJaWYocG9wICE9IG51bGwgJiYgIXBvcC50cmltKCkuZXF1YWxzKCIiKSkKKwkJCQkJCQkoKE1pZ3JhdGlvbkVkZ2VHcmFwaEdlbmVyYXRvcilncmFwaEdlbmVyYXRvcikuc2V0UG9wdWxhdGlvbihwb3ApOworCQkJCQkJYnJlYWs7CisJCQkJCQkKKwkJCQl9IC8vIHN3aXRjaAorCQkJfSBlbHNlIGlmKGVudHJ5LmdldEtleSgpLmdldEVDb250YWluaW5nQ2xhc3MoKS5nZXRDbGFzc2lmaWVySUQoKSA9PSBHcmFwaGdlbmVyYXRvcnNQYWNrYWdlLlBBSkVLX05FVF9HUkFQSF9HRU5FUkFUT1IpIHsKKwkJCQlzd2l0Y2ggKGVudHJ5LmdldEtleSgpLmdldEZlYXR1cmVJRCgpKSB7CisJCQkJCWNhc2UgR3JhcGhnZW5lcmF0b3JzUGFja2FnZS5QQUpFS19ORVRfR1JBUEhfR0VORVJBVE9SX19EQVRBX0ZJTEVfTkVUOgorCQkJCQkJU3RyaW5nIGZpbGVuYW1lID0gZW50cnkuZ2V0VmFsdWUoKS5nZXRUZXh0KCk7CisJCQkJCQlpZiAoZmlsZW5hbWUgIT0gbnVsbCAmJiBmaWxlbmFtZS50cmltKCkubGVuZ3RoKCkgPiAwKSB7CisJCQkJCQkJKChQYWpla05ldEdyYXBoR2VuZXJhdG9yKWdyYXBoR2VuZXJhdG9yKS5zZXREYXRhRmlsZV9uZXQoZmlsZW5hbWUpOworCQkJCQkJfQorCQkJCQkJYnJlYWs7CQkJCQkKKwkJCQkJY2FzZSBHcmFwaGdlbmVyYXRvcnNQYWNrYWdlLlBBSkVLX05FVF9HUkFQSF9HRU5FUkFUT1JfX0FSRUE6CisJCQkJCQkoKFBhamVrTmV0R3JhcGhHZW5lcmF0b3IpZ3JhcGhHZW5lcmF0b3IpLnNldEFyZWEoRG91YmxlLnBhcnNlRG91YmxlKGVudHJ5LmdldFZhbHVlKCkuZ2V0VGV4dCgpKSk7CisJCQkJCQlicmVhazsKKwkJCQkJY2FzZSBHcmFwaGdlbmVyYXRvcnNQYWNrYWdlLlBBSkVLX05FVF9HUkFQSF9HRU5FUkFUT1JfX0NPTlRBSU5FUjoKKwkJCQkJCVN0cmluZyBsb2MgPSBlbnRyeS5nZXRWYWx1ZSgpLmdldFRleHQoKTsKKwkJCQkJCWlmKGxvYyAhPSBudWxsICYmICFsb2MudHJpbSgpLmVxdWFscygiIikpCisJCQkJCQkJKChQYWpla05ldEdyYXBoR2VuZXJhdG9yKWdyYXBoR2VuZXJhdG9yKS5zZXRDb250YWluZXIoU1RFTVVSSS5jcmVhdGVVUkkobG9jKSk7CisJCQkJCQlicmVhazsJCisJCQkJCWNhc2UgR3JhcGhnZW5lcmF0b3JzUGFja2FnZS5QQUpFS19ORVRfR1JBUEhfR0VORVJBVE9SX19TQ0FMSU5HX0ZBQ1RPUjoKKwkJCQkJCSgoUGFqZWtOZXRHcmFwaEdlbmVyYXRvcilncmFwaEdlbmVyYXRvcikuc2V0U2NhbGluZ0ZhY3RvcihEb3VibGUucGFyc2VEb3VibGUoZW50cnkuZ2V0VmFsdWUoKS5nZXRUZXh0KCkpKTsKKwkJCQkJCWJyZWFrOworCQkJCQkKKwkJCQkJCisJCQkJCQkKKwkJCQl9IC8vIHN3aXRjaAorCQkJfQorCQl9CisKKwkJZm9yIChmaW5hbCBNYXAuRW50cnk8RVN0cnVjdHVyYWxGZWF0dXJlLCBCdXR0b24+IGVudHJ5IDogYm9vbGVhbk1hcC5lbnRyeVNldCgpKSB7CisKKwkJCXN3aXRjaCAoZW50cnkuZ2V0S2V5KCkuZ2V0RmVhdHVyZUlEKCkpIHsKKwkJCWNhc2UgR3JhcGhnZW5lcmF0b3JzUGFja2FnZS5MQVRUSUNFX0dSQVBIX0dFTkVSQVRPUl9fVVNFX05FQVJFU1RfTkVJR0hCT1JTOgorCQkJCSgoTGF0dGljZUdyYXBoR2VuZXJhdG9yKWdyYXBoR2VuZXJhdG9yKS5zZXRVc2VOZWFyZXN0TmVpZ2hib3JzKGVudHJ5LmdldFZhbHVlKCkuZ2V0U2VsZWN0aW9uKCkpOworCQkJCWJyZWFrOworCQkJY2FzZSBHcmFwaGdlbmVyYXRvcnNQYWNrYWdlLkxBVFRJQ0VfR1JBUEhfR0VORVJBVE9SX19VU0VfTkVYVF9ORUFSRVNUX05FSUdIQk9SUzoKKwkJCQkoKExhdHRpY2VHcmFwaEdlbmVyYXRvcilncmFwaEdlbmVyYXRvcikuc2V0VXNlTmV4dE5lYXJlc3ROZWlnaGJvcnMoZW50cnkuZ2V0VmFsdWUoKS5nZXRTZWxlY3Rpb24oKSk7CisJCQkJYnJlYWs7CisJCQljYXNlIEdyYXBoZ2VuZXJhdG9yc1BhY2thZ2UuTEFUVElDRV9HUkFQSF9HRU5FUkFUT1JfX1BFUklPRElDX0JPVU5EQVJJRVM6CisJCQkJKChMYXR0aWNlR3JhcGhHZW5lcmF0b3IpZ3JhcGhHZW5lcmF0b3IpLnNldFBlcmlvZGljQm91bmRhcmllcyhlbnRyeS5nZXRWYWx1ZSgpLmdldFNlbGVjdGlvbigpKTsKKwkJCQlicmVhazsKKwkJCWNhc2UgR3JhcGhnZW5lcmF0b3JzUGFja2FnZS5QQUpFS19ORVRfR1JBUEhfR0VORVJBVE9SX19GSVQ6CisJCQkJKChQYWpla05ldEdyYXBoR2VuZXJhdG9yKWdyYXBoR2VuZXJhdG9yKS5zZXRGaXQoZW50cnkuZ2V0VmFsdWUoKS5nZXRTZWxlY3Rpb24oKSk7CisJCQkJYnJlYWs7CisJCQljYXNlIEdyYXBoZ2VuZXJhdG9yc1BhY2thZ2UuUEFKRUtfTkVUX0dSQVBIX0dFTkVSQVRPUl9fRU5GT1JDRV9DT05UQUlOTUVOVDoKKwkJCQkoKFBhamVrTmV0R3JhcGhHZW5lcmF0b3IpZ3JhcGhHZW5lcmF0b3IpLnNldEVuZm9yY2VDb250YWlubWVudChlbnRyeS5nZXRWYWx1ZSgpLmdldFNlbGVjdGlvbigpKTsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorIAorCSBpZihncmFwaEdlbmVyYXRvci5lQ2xhc3MoKS5nZXRDbGFzc2lmaWVySUQoKSA9PSBHcmFwaGdlbmVyYXRvcnNQYWNrYWdlLk1JR1JBVElPTl9FREdFX0dSQVBIX0dFTkVSQVRPUikgCisJCSAoKE1pZ3JhdGlvbkVkZ2VHcmFwaEdlbmVyYXRvcilncmFwaEdlbmVyYXRvcikuc2V0UHJvamVjdChwcm9qZWN0KTsKKwkJCisJIGlmKGdyYXBoR2VuZXJhdG9yLmVDbGFzcygpLmdldENsYXNzaWZpZXJJRCgpID09IEdyYXBoZ2VuZXJhdG9yc1BhY2thZ2UuUEFKRUtfTkVUX0dSQVBIX0dFTkVSQVRPUikgCisJCSAoKFBhamVrTmV0R3JhcGhHZW5lcmF0b3IpZ3JhcGhHZW5lcmF0b3IpLnNldFByb2plY3QocHJvamVjdCk7CisJIC8vIERvIGl0IQorCQlyZXR1cm4gZ3JhcGhHZW5lcmF0b3IuZ2V0R3JhcGgoKTsKKwl9IC8vIHBvcHVsYXRlCisKKwkvKioKKwkgKiBAcmV0dXJuIDxjb2RlPnRydWU8L2NvZGU+IGlmIHRoZSBjb250ZW50cyBhcmUgdmFsaWQsIDxjb2RlPmZhbHNlPC9jb2RlPgorCSAqICAgICAgICAgb3RoZXJ3aXNlLgorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBib29sZWFuIHZhbGlkYXRlKCkgeworCQlib29sZWFuIHJldFZhbHVlID0gdHJ1ZTsKKwkJaWYgKHJldFZhbHVlKSB7CisJCQkvLyBZZXMKKwkJCWZpbmFsIFRleHQgdGV4dCA9IG1hcAorCQkJCQkuZ2V0KEdyYXBoZ2VuZXJhdG9yc1BhY2thZ2UuTGl0ZXJhbHMuU1FVQVJFX0xBVFRJQ0VfR1JBUEhfR0VORVJBVE9SX19YU0laRSk7CisJCQlpZiAodGV4dCAhPSBudWxsKSB7CisJCQkJLy8gWWVzCisJCQkJcmV0VmFsdWUgPSAhdGV4dC5nZXRUZXh0KCkuZXF1YWxzKCIiKTsgLy8kTk9OLU5MUy0xJAorCQkJCS8vIG5vdGhpbmc/CisJCQkJaWYgKCFyZXRWYWx1ZSkgeworCQkJCQkvLyBZZXMKKwkJCQkJZXJyb3JNZXNzYWdlID0gTWVzc2FnZXMKKwkJCQkJCQkuZ2V0U3RyaW5nKCJOR0dXaXpFcnIxIik7IC8vJE5PTi1OTFMtMSQKKwkJCQl9IC8vIGlmCisJCQkJZWxzZSB7CisJCQkJCS8vIE5vCisJCQkJCS8vIElzIGl0IGEgdmFsaWQgdmFsdWU/CisJCQkJCXJldFZhbHVlID0gaXNWYWxpZEludFZhbHVlKHRleHQuZ2V0VGV4dCgpLCAxKTsKKwkJCQkJaWYgKCFyZXRWYWx1ZSkgeworCQkJCQkJLy8gTm8KKwkJCQkJCWVycm9yTWVzc2FnZSA9IE1lc3NhZ2VzCisJCQkJCQkJCS5nZXRTdHJpbmcoIk5HR1dpekVycjIiKTsgLy8kTk9OLU5MUy0xJAorCQkJCQl9IC8vIGlmCisJCQkJfQorCQkJfSAvLyBpZiB0ZXh0ICE9IG51bGwKKwkJfSAvLyBpZiBUcmFuc21pc3Npb24gUmF0ZQorCisJCWlmIChyZXRWYWx1ZSkgeworCQkJLy8gWWVzCisJCQlmaW5hbCBUZXh0IHRleHQgPSBtYXAKKwkJCQkJLmdldChHcmFwaGdlbmVyYXRvcnNQYWNrYWdlLkxpdGVyYWxzLlNRVUFSRV9MQVRUSUNFX0dSQVBIX0dFTkVSQVRPUl9fWVNJWkUpOworCQkJaWYgKHRleHQgIT0gbnVsbCkgeworCQkJCS8vIFllcworCQkJCXJldFZhbHVlID0gIXRleHQuZ2V0VGV4dCgpLmVxdWFscygiIik7IC8vJE5PTi1OTFMtMSQKKwkJCQkvLyBub3RoaW5nPworCQkJCWlmICghcmV0VmFsdWUpIHsKKwkJCQkJLy8gWWVzCisJCQkJCWVycm9yTWVzc2FnZSA9IE1lc3NhZ2VzCisJCQkJCQkJLmdldFN0cmluZygiTkdHV2l6RXJyMyIpOyAvLyROT04tTkxTLTEkCisJCQkJfSAvLyBpZgorCQkJCWVsc2UgeworCQkJCQkvLyBObworCQkJCQkvLyBJcyBpdCBhIHZhbGlkIHZhbHVlPworCQkJCQlyZXRWYWx1ZSA9IGlzVmFsaWRJbnRWYWx1ZSh0ZXh0LmdldFRleHQoKSwgMSk7CisJCQkJCWlmICghcmV0VmFsdWUpIHsKKwkJCQkJCS8vIE5vCisJCQkJCQllcnJvck1lc3NhZ2UgPSBNZXNzYWdlcworCQkJCQkJCQkuZ2V0U3RyaW5nKCJOR0dXaXpFcnI0Iik7IC8vJE5PTi1OTFMtMSQKKwkJCQkJfSAvLyBpZgorCQkJCX0KKwkJCX0gLy8gaWYgdGV4dCAhPSBudWxsCisJCX0gLy8gCisJCQorCQlpZiAocmV0VmFsdWUpIHsKKwkJCS8vIFllcworCQkJZmluYWwgVGV4dCB0ZXh0ID0gbWFwCisJCQkJCS5nZXQoR3JhcGhnZW5lcmF0b3JzUGFja2FnZS5MaXRlcmFscy5TUVVBUkVfTEFUVElDRV9HUkFQSF9HRU5FUkFUT1JfX0FSRUEpOworCQkJaWYgKHRleHQgIT0gbnVsbCkgeworCQkJCS8vIFllcworCQkJCXJldFZhbHVlID0gIXRleHQuZ2V0VGV4dCgpLmVxdWFscygiIik7IC8vJE5PTi1OTFMtMSQKKwkJCQkvLyBub3RoaW5nPworCQkJCWlmICghcmV0VmFsdWUpIHsKKwkJCQkJLy8gWWVzCisJCQkJCWVycm9yTWVzc2FnZSA9IE1lc3NhZ2VzCisJCQkJCQkJLmdldFN0cmluZygiTkdHV2l6RXJyOCIpOyAvLyROT04tTkxTLTEkCisJCQkJfSAvLyBpZgorCQkJCWVsc2UgeworCQkJCQkvLyBObworCQkJCQkvLyBJcyBpdCBhIHZhbGlkIHZhbHVlPworCQkJCQlyZXRWYWx1ZSA9IGlzVmFsaWRWYWx1ZSh0ZXh0LmdldFRleHQoKSwgMCk7CisJCQkJCWlmICghcmV0VmFsdWUpIHsKKwkJCQkJCS8vIE5vCisJCQkJCQllcnJvck1lc3NhZ2UgPSBNZXNzYWdlcworCQkJCQkJCQkuZ2V0U3RyaW5nKCJOR0dXaXpFcnI5Iik7IC8vJE5PTi1OTFMtMSQKKwkJCQkJfSAvLyBpZgorCQkJCX0KKwkJCX0gLy8gaWYgdGV4dCAhPSBudWxsCisJCX0gLy8gaWYgTm9uLUxpbmVhcml0eSBDb2VmZmljaWVudAorCisKKwkJaWYgKHJldFZhbHVlKSB7CisJCQkvLyBZZXMKKwkJCVRleHQgdGV4dCA9IG1hcAorCQkJCQkuZ2V0KEdyYXBoZ2VuZXJhdG9yc1BhY2thZ2UuTGl0ZXJhbHMuU1FVQVJFX0xBVFRJQ0VfR1JBUEhfR0VORVJBVE9SX19YU0laRSk7CisJCQlpZih0ZXh0ICE9IG51bGwpIHsKKwkJCQlpbnQgeHNpemUgPSBJbnRlZ2VyLnBhcnNlSW50KHRleHQuZ2V0VGV4dCgpKTsKKwkJCQl0ZXh0ID0gbWFwLmdldChHcmFwaGdlbmVyYXRvcnNQYWNrYWdlLkxpdGVyYWxzLlNRVUFSRV9MQVRUSUNFX0dSQVBIX0dFTkVSQVRPUl9fWVNJWkUpOworCQkJCWludCB5c2l6ZSA9IEludGVnZXIucGFyc2VJbnQodGV4dC5nZXRUZXh0KCkpOworCQkJCXRleHQgPSBtYXAuZ2V0KEdyYXBoZ2VuZXJhdG9yc1BhY2thZ2UuTGl0ZXJhbHMuU1FVQVJFX0xBVFRJQ0VfR1JBUEhfR0VORVJBVE9SX19BUkVBKTsKKwkJCQlkb3VibGUgYXJlYSA9IERvdWJsZS5wYXJzZURvdWJsZSh0ZXh0LmdldFRleHQoKSk7CisJCQkJCisJCQkJZG91YmxlIHNjYWxlID0gTWF0aC5zcXJ0KGFyZWEpOworCQkJCWlmKHhzaXplICogc2NhbGUgLyBMYXR0aWNlR2VuZXJhdG9yVXRpbGl0eUltcGwuS01fUEVSX0RFR19MT04gPiAzNjAuMCB8fAorCQkJCQl5c2l6ZSAqIHNjYWxlIC8gTGF0dGljZUdlbmVyYXRvclV0aWxpdHlJbXBsLktNX1BFUl9ERUdfTEFUID4gMTgwLjApIHsKKwkJCQkJcmV0VmFsdWUgPSBmYWxzZTsKKwkJCQkJLy8gWWVzCisJCQkJCWVycm9yTWVzc2FnZSA9IE1lc3NhZ2VzCisJCQkJCQkuZ2V0U3RyaW5nKCJOR0dXaXpFcnIxMCIpOyAvLyROT04tTkxTLTEkCisJCQkJfQorCQkJfQorCQl9CisJCWlmKHJldFZhbHVlKSB7CisJCQlmaW5hbCBUZXh0IHRleHQgPSBtYXAuZ2V0KEdyYXBoZ2VuZXJhdG9yc1BhY2thZ2UuTGl0ZXJhbHMuTUlHUkFUSU9OX0VER0VfR1JBUEhfR0VORVJBVE9SX19QT1BVTEFUSU9OKTsKKwkJCWlmICh0ZXh0ICE9IG51bGwpIHsKKwkJCQkvLyBZZXMKKwkJCQlyZXRWYWx1ZSA9ICF0ZXh0LmdldFRleHQoKS5lcXVhbHMoIiIpOyAvLyROT04tTkxTLTEkCisJCQkJLy8gbm90aGluZz8KKwkJCQlpZiAoIXJldFZhbHVlKSB7CisJCQkJCS8vIFllcworCQkJCQllcnJvck1lc3NhZ2UgPSBNZXNzYWdlcworCQkJCQkJLmdldFN0cmluZygiTkdHV2l6RXJyNSIpOyAvLyROT04tTkxTLTEkCisJCQkJfSAvLyBpZgorCQkJfQorCQl9CisJCQorCQkKKwkJaWYocmV0VmFsdWUpIHsKKwkJCWZpbmFsIFRleHQgdGV4dCA9IG1hcC5nZXQoR3JhcGhnZW5lcmF0b3JzUGFja2FnZS5MaXRlcmFscy5QTEFURV9DQVJSRUVfR0xPQkVfR1JBUEhfR0VORVJBVE9SX19BTkdVTEFSX1NURVApOworCQkJLy8gSXMgaXQgYSB2YWxpZCB2YWx1ZT8KKwkJCWlmKHRleHQhPW51bGwpIHsKKwkJCQlyZXRWYWx1ZSA9IGlzVmFsaWRJbnRWYWx1ZSh0ZXh0LmdldFRleHQoKSwgMSk7CisJCQkJaWYgKCFyZXRWYWx1ZSkgeworCQkJCQkvLyBObworCQkJCQllcnJvck1lc3NhZ2UgPSBNZXNzYWdlcworCQkJCQkJCS5nZXRTdHJpbmcoIk5HR1dpekVycjExIik7IC8vJE5PTi1OTFMtMSQKKwkJCQl9IC8vIGlmCisJCQl9CisJCX0KKwkJaWYocmV0VmFsdWUpIHsKKwkJCWZpbmFsIFRleHQgdGV4dCA9IG1hcC5nZXQoR3JhcGhnZW5lcmF0b3JzUGFja2FnZS5MaXRlcmFscy5QTEFURV9DQVJSRUVfR0xPQkVfR1JBUEhfR0VORVJBVE9SX19SQURJVVMpOworCQkJLy8gSXMgaXQgYSB2YWxpZCB2YWx1ZT8KKwkJCWlmKHRleHQhPW51bGwpIHsKKwkJCQlyZXRWYWx1ZSA9IGlzVmFsaWREb3VibGVWYWx1ZSh0ZXh0LmdldFRleHQoKSwgMSk7CisJCQkJaWYgKCFyZXRWYWx1ZSkgeworCQkJCQkvLyBObworCQkJCQllcnJvck1lc3NhZ2UgPSBNZXNzYWdlcworCQkJCQkJCS5nZXRTdHJpbmcoIk5HR1dpekVycjEyIik7IC8vJE5PTi1OTFMtMSQKKwkJCQl9IC8vIGlmCisJCQl9CisJCX0KKwkJCisJCWlmKHJldFZhbHVlKSB7CisJCQlmaW5hbCBUZXh0IHRleHQgPSBtYXAuZ2V0KEdyYXBoZ2VuZXJhdG9yc1BhY2thZ2UuTGl0ZXJhbHMuTUlHUkFUSU9OX0VER0VfR1JBUEhfR0VORVJBVE9SX19QT1BVTEFUSU9OKTsKKwkJCWlmICh0ZXh0ICE9IG51bGwpIHsKKwkJCQkvLyBZZXMKKwkJCQlyZXRWYWx1ZSA9ICF0ZXh0LmdldFRleHQoKS5lcXVhbHMoIiIpOyAvLyROT04tTkxTLTEkCisJCQkJLy8gbm90aGluZz8KKwkJCQlpZiAoIXJldFZhbHVlKSB7CisJCQkJCS8vIFllcworCQkJCQllcnJvck1lc3NhZ2UgPSBNZXNzYWdlcworCQkJCQkJLmdldFN0cmluZygiTkdHV2l6RXJyNSIpOyAvLyROT04tTkxTLTEkCisJCQkJfSAvLyBpZgorCQkJfQorCQl9CisJCWlmKHJldFZhbHVlKSB7CisJCQlmaW5hbCBUZXh0IHRleHQgPSBtYXAuZ2V0KEdyYXBoZ2VuZXJhdG9yc1BhY2thZ2UuTGl0ZXJhbHMuTUlHUkFUSU9OX0VER0VfR1JBUEhfR0VORVJBVE9SX19NSUdSQVRJT05fUkFURSk7CisJCQlpZiAodGV4dCAhPSBudWxsKSB7CisJCQkJLy8gWWVzCisJCQkJdHJ5IHsKKwkJCQkJZG91YmxlIHJhdGUgPSBEb3VibGUucGFyc2VEb3VibGUodGV4dC5nZXRUZXh0KCkpOworCQkJCQlpZihyYXRlIDwgMC4wKSB7CisJCQkJCQlyZXRWYWx1ZSA9IGZhbHNlOworCQkJCQkJZXJyb3JNZXNzYWdlID0gTWVzc2FnZXMKKwkJCQkJCS5nZXRTdHJpbmcoIk5HR1dpekVycjciKTsKKwkJCQkJfQorCQkJCX0gY2F0Y2goRXhjZXB0aW9uIGUpIHsKKwkJCQkJcmV0VmFsdWUgPSBmYWxzZTsKKwkJCQkJZXJyb3JNZXNzYWdlID0gTWVzc2FnZXMKKwkJCQkJLmdldFN0cmluZygiTkdHV2l6RXJyNiIpOworCQkJCX0KKwkJCQlyZXRWYWx1ZSA9ICF0ZXh0LmdldFRleHQoKS5lcXVhbHMoIiIpOyAvLyROT04tTkxTLTEkCisJCQkJLy8gbm90aGluZz8KKwkJCQlpZiAoIXJldFZhbHVlKSB7CisJCQkJCS8vIFllcworCQkJCQllcnJvck1lc3NhZ2UgPSBNZXNzYWdlcworCQkJCQkJLmdldFN0cmluZygiTkdHV2l6RXJyNSIpOyAvLyROT04tTkxTLTEkCisJCQkJfSAvLyBpZgorCQkJfQorCQl9CisJCWlmIChyZXRWYWx1ZSkgeworCQkJZmluYWwgVGV4dCB0ZXh0ID0gbWFwLmdldChHcmFwaGdlbmVyYXRvcnNQYWNrYWdlLkxpdGVyYWxzLlBBSkVLX05FVF9HUkFQSF9HRU5FUkFUT1JfX0RBVEFfRklMRV9ORVQpOworCQkJaWYgKHRleHQgIT0gbnVsbCkgeworCQkJCS8vIFllcworCQkgICAgICAgIEZpbGUgZmlsZSA9IG5ldyBGaWxlKHRleHQuZ2V0VGV4dCgpKTsKKwkJICAgICAgICByZXRWYWx1ZSA9IGZpbGUgIT0gbnVsbCAmJiAhZmlsZS5pc0RpcmVjdG9yeSgpICYmIGZpbGUuZXhpc3RzKCk7CQorCQkgICAgICAgIGlmICghcmV0VmFsdWUpIGVycm9yTWVzc2FnZSA9IE1lc3NhZ2VzLmdldFN0cmluZygiTkdHV2l6RXJyMTMiKTsKKwkJCX0KKwkJfQorCQlpZiAocmV0VmFsdWUpIHsKKwkJCWZpbmFsIFRleHQgdGV4dCA9IG1hcC5nZXQoR3JhcGhnZW5lcmF0b3JzUGFja2FnZS5MaXRlcmFscy5QQUpFS19ORVRfR1JBUEhfR0VORVJBVE9SX19BUkVBKTsKKwkJCWlmICh0ZXh0ICE9IG51bGwpIHsKKwkJCQlyZXRWYWx1ZSA9IHRleHQuZ2V0VGV4dCgpLmxlbmd0aCgpID4gMDsgLy8kTk9OLU5MUy0xJAorCQkJCS8vIG5vdGhpbmc/CisJCQkJaWYgKCFyZXRWYWx1ZSkgeworCQkJCQllcnJvck1lc3NhZ2UgPSBNZXNzYWdlcy5nZXRTdHJpbmcoIk5HR1dpekVycjE0Iik7IC8vJE5PTi1OTFMtMSQKKwkJCQl9IC8vIGlmCisJCQkJZWxzZSB7CisJCQkJCXRyeSB7CisJCQkJCQlkb3VibGUgcmF0ZSA9IERvdWJsZS5wYXJzZURvdWJsZSh0ZXh0LmdldFRleHQoKSk7CisJCQkJCQlpZihyYXRlIDwgMC4wKSB7CisJCQkJCQkJcmV0VmFsdWUgPSBmYWxzZTsKKwkJCQkJCQllcnJvck1lc3NhZ2UgPSBNZXNzYWdlcy5nZXRTdHJpbmcoIk5HR1dpekVycjkiKTsKKwkJCQkJCX0KKwkJCQkJfSBjYXRjaChFeGNlcHRpb24gZSkgeworCQkJCQkJcmV0VmFsdWUgPSBmYWxzZTsKKwkJCQkJCWVycm9yTWVzc2FnZSA9IE1lc3NhZ2VzLmdldFN0cmluZygiTkdHV2l6RXJyOSIpOworCQkJCQl9CisJCQkJfQorCQkJfQorCQl9CisJCXJldHVybiByZXRWYWx1ZTsKKwl9IC8vIHZhbGlkYXRlCisKKworCS8qKgorCSAqIEBwYXJhbSBmZWF0dXJlCisJICogQHJldHVybiA8Y29kZT50cnVlPC9jb2RlPiBpZiB0aGUgZmVhdHVyZSBpcyBhIGR1YmxpbiBjb3JlIGZlYXR1cmUgdGhhdAorCSAqICAgICAgICAgaXMgc3BlY2lmaWVkIGJ5IGEgdXNlci4KKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgYm9vbGVhbiBpc1VzZXJTcGVjaWZpZWRQcm9wZXJ0eShmaW5hbCBFU3RydWN0dXJhbEZlYXR1cmUgZmVhdHVyZSkgeworCQlib29sZWFuIHJldFZhbHVlID0gZmFsc2U7CisJCWZpbmFsIEVDbGFzcyBjb250YWluaW5nQ2xhc3MgPSBmZWF0dXJlLmdldEVDb250YWluaW5nQ2xhc3MoKTsKKwkJaWYgKGNvbnRhaW5pbmdDbGFzcy5lcXVhbHMoR3JhcGhnZW5lcmF0b3JzUGFja2FnZS5lSU5TVEFOQ0UuZ2V0R3JhcGhHZW5lcmF0b3IoKSkKKwkJCQl8fCBjb250YWluaW5nQ2xhc3MuZ2V0RUFsbFN1cGVyVHlwZXMoKS5jb250YWlucygKKwkJCQkJCUdyYXBoZ2VuZXJhdG9yc1BhY2thZ2UuZUlOU1RBTkNFLmdldEdyYXBoR2VuZXJhdG9yKCkpKSB7CisJCQkvLyBZZXMKKwkJCXJldFZhbHVlID0gdHJ1ZTsKKwkJfSAvLyAKKwkJcmV0dXJuIHJldFZhbHVlOworCX0gLy8gaXNVc2VyU3BlY2lmaWVkR3JhcGhHZW5lcmF0b3JQcm9wZXJ0eQorCQorCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGRpc3Bvc2UoKSB7CisJCXN1cGVyLmRpc3Bvc2UoKTsKKwl9CisKKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgdm9pZCBjaGVja1N1YmNsYXNzKCkgeworCQkvLyBEaXNhYmxlIHRoZSBjaGVjayB0aGF0IHByZXZlbnRzIHN1Yi1jbGFzc2luZyBvZiBTV1QgY29tcG9uZW50cworCX0KKworfSAvLyBHcmFwaEdlbmVyYXRvclByb3BlcnR5RWRpdG9yCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkuZ3JhcGhnZW5lcmF0b3JzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL2dyYXBoZ2VuZXJhdG9ycy9hZGFwdGVycy9ncmFwaGdlbmVyYXRvcnByb3BlcnR5ZWRpdG9yL0dyYXBoR2VuZXJhdG9yUHJvcGVydHlFZGl0b3JBZGFwdGVyLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkuZ3JhcGhnZW5lcmF0b3JzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL2dyYXBoZ2VuZXJhdG9ycy9hZGFwdGVycy9ncmFwaGdlbmVyYXRvcnByb3BlcnR5ZWRpdG9yL0dyYXBoR2VuZXJhdG9yUHJvcGVydHlFZGl0b3JBZGFwdGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTVkMzMxNgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5ncmFwaGdlbmVyYXRvcnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvZ3JhcGhnZW5lcmF0b3JzL2FkYXB0ZXJzL2dyYXBoZ2VuZXJhdG9ycHJvcGVydHllZGl0b3IvR3JhcGhHZW5lcmF0b3JQcm9wZXJ0eUVkaXRvckFkYXB0ZXIuamF2YQpAQCAtMCwwICsxLDMwIEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0udWkuZ3JhcGhnZW5lcmF0b3JzLmFkYXB0ZXJzLmdyYXBoZ2VuZXJhdG9ycHJvcGVydHllZGl0b3I7CisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5BZGFwdGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LmltcGwuQWRhcHRlckltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaGdlbmVyYXRvcnMuR3JhcGhHZW5lcmF0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS51aS5ncmFwaGdlbmVyYXRvcnMud2l6YXJkcy5HcmFwaEdlbmVyYXRvclByb3BlcnR5Q29tcG9zaXRlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuTW9kaWZ5TGlzdGVuZXI7CisKK3B1YmxpYyBjbGFzcyBHcmFwaEdlbmVyYXRvclByb3BlcnR5RWRpdG9yQWRhcHRlciBleHRlbmRzIEFkYXB0ZXJJbXBsCisJCWltcGxlbWVudHMgQWRhcHRlciB7CisKKwlwdWJsaWMgR3JhcGhHZW5lcmF0b3JQcm9wZXJ0eUVkaXRvciBjcmVhdGVHcmFwaEdlbmVyYXRvclByb3BlcnR5RWRpdG9yKAorCQkJZmluYWwgR3JhcGhHZW5lcmF0b3JQcm9wZXJ0eUNvbXBvc2l0ZSBncmFwaEdlbmVyYXRvclByb3BlcnR5Q29tcG9zaXRlLAorCQkJZmluYWwgaW50IHN0eWxlLCBmaW5hbCBNb2RpZnlMaXN0ZW5lciBwcm9qZWN0VmFsaWRhdG9yLCBJUHJvamVjdCBwcm9qZWN0KSB7CisJCXJldHVybiBuZXcgR3JhcGhHZW5lcmF0b3JQcm9wZXJ0eUVkaXRvcigKKwkJCQlncmFwaEdlbmVyYXRvclByb3BlcnR5Q29tcG9zaXRlLCBzdHlsZSwKKwkJCQkoR3JhcGhHZW5lcmF0b3IpIGdldFRhcmdldCgpLCBwcm9qZWN0VmFsaWRhdG9yLCBwcm9qZWN0KTsKKwl9IC8vIGNyZWF0ZUdyYXBoR2VuZXJhdG9yUHJvcGVydHlFZGl0b3IKKwkKK30gLy8gR3JhcGhHZW5lcmF0b3JQcm9wZXJ0eUVkaXRvckFkYXB0ZXIKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5ncmFwaGdlbmVyYXRvcnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvZ3JhcGhnZW5lcmF0b3JzL2FkYXB0ZXJzL2dyYXBoZ2VuZXJhdG9ycHJvcGVydHllZGl0b3IvR3JhcGhHZW5lcmF0b3JQcm9wZXJ0eUVkaXRvckFkYXB0ZXJGYWN0b3J5LmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkuZ3JhcGhnZW5lcmF0b3JzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL2dyYXBoZ2VuZXJhdG9ycy9hZGFwdGVycy9ncmFwaGdlbmVyYXRvcnByb3BlcnR5ZWRpdG9yL0dyYXBoR2VuZXJhdG9yUHJvcGVydHlFZGl0b3JBZGFwdGVyRmFjdG9yeS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjViNTAyYmUKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkuZ3JhcGhnZW5lcmF0b3JzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL2dyYXBoZ2VuZXJhdG9ycy9hZGFwdGVycy9ncmFwaGdlbmVyYXRvcnByb3BlcnR5ZWRpdG9yL0dyYXBoR2VuZXJhdG9yUHJvcGVydHlFZGl0b3JBZGFwdGVyRmFjdG9yeS5qYXZhCkBAIC0wLDAgKzEsMzYgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS51aS5ncmFwaGdlbmVyYXRvcnMuYWRhcHRlcnMuZ3JhcGhnZW5lcmF0b3Jwcm9wZXJ0eWVkaXRvcjsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuQWRhcHRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmdyYXBoZ2VuZXJhdG9ycy51dGlsLkdyYXBoZ2VuZXJhdG9yc0FkYXB0ZXJGYWN0b3J5OworCitwdWJsaWMgY2xhc3MgR3JhcGhHZW5lcmF0b3JQcm9wZXJ0eUVkaXRvckFkYXB0ZXJGYWN0b3J5IGV4dGVuZHMKKwkJR3JhcGhnZW5lcmF0b3JzQWRhcHRlckZhY3RvcnkgaW1wbGVtZW50cworCQlJR3JhcGhHZW5lcmF0b3JQcm9wZXJ0eUVkaXRvckFkYXB0ZXJGYWN0b3J5IHsKKworCXB1YmxpYyBHcmFwaEdlbmVyYXRvclByb3BlcnR5RWRpdG9yQWRhcHRlckZhY3RvcnkoKSB7CisJCXN1cGVyKCk7CisJCUdyYXBoR2VuZXJhdG9yUHJvcGVydHlFZGl0b3JBZGFwdGVyRmFjdG9yeS5JTlNUQU5DRQorCQkJCS5hZGRBZGFwdGVyRmFjdG9yeSh0aGlzKTsKKwl9CisKKwlAT3ZlcnJpZGUKKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVHcmFwaEdlbmVyYXRvckFkYXB0ZXIoKSB7CisJCXJldHVybiBuZXcgR3JhcGhHZW5lcmF0b3JQcm9wZXJ0eUVkaXRvckFkYXB0ZXIoKTsKKwl9CisKKwlwdWJsaWMgYm9vbGVhbiBpc0ZhY3RvcnlGb3JUeXBlKE9iamVjdCB0eXBlKSB7CisJCXJldHVybiB0eXBlID09IEdyYXBoR2VuZXJhdG9yUHJvcGVydHlFZGl0b3JBZGFwdGVyLmNsYXNzCisJCQkJfHwgc3VwZXIuaXNGYWN0b3J5Rm9yVHlwZSh0eXBlKTsKKwl9CisKK30gLy8gU3RhbmRhcmRHcmFwaEdlbmVyYXRvclByb3BlcnR5RWRpdG9yQWRhcHRlckZhY3RvcnkKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5ncmFwaGdlbmVyYXRvcnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvZ3JhcGhnZW5lcmF0b3JzL2FkYXB0ZXJzL2dyYXBoZ2VuZXJhdG9ycHJvcGVydHllZGl0b3IvSUdyYXBoR2VuZXJhdG9yUHJvcGVydHlFZGl0b3JBZGFwdGVyRmFjdG9yeS5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLmdyYXBoZ2VuZXJhdG9ycy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9ncmFwaGdlbmVyYXRvcnMvYWRhcHRlcnMvZ3JhcGhnZW5lcmF0b3Jwcm9wZXJ0eWVkaXRvci9JR3JhcGhHZW5lcmF0b3JQcm9wZXJ0eUVkaXRvckFkYXB0ZXJGYWN0b3J5LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzMwZGZhZQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5ncmFwaGdlbmVyYXRvcnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvZ3JhcGhnZW5lcmF0b3JzL2FkYXB0ZXJzL2dyYXBoZ2VuZXJhdG9ycHJvcGVydHllZGl0b3IvSUdyYXBoR2VuZXJhdG9yUHJvcGVydHlFZGl0b3JBZGFwdGVyRmFjdG9yeS5qYXZhCkBAIC0wLDAgKzEsMzQgQEAKKy8vIERpc2Vhc2VNb2RlbFByb3BlcnR5RWRpdG9yQWRhcHRlckZhY3RvcnkuamF2YQorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnVpLmdyYXBoZ2VuZXJhdG9ycy5hZGFwdGVycy5ncmFwaGdlbmVyYXRvcnByb3BlcnR5ZWRpdG9yOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuQ29tcG9zZWRBZGFwdGVyRmFjdG9yeTsKKworLyoqCisgKiBUaGlzIGNsYXNzIHJlcHJlc2VudHMKKyAqLworcHVibGljIGludGVyZmFjZSBJR3JhcGhHZW5lcmF0b3JQcm9wZXJ0eUVkaXRvckFkYXB0ZXJGYWN0b3J5IHsKKworCUdyYXBoR2VuZXJhdG9yUHJvcGVydHlFZGl0b3JBZGFwdGVyRmFjdG9yeUltcGwgSU5TVEFOQ0UgPSBuZXcgR3JhcGhHZW5lcmF0b3JQcm9wZXJ0eUVkaXRvckFkYXB0ZXJGYWN0b3J5SW1wbCgpOworCisJcHVibGljIGNsYXNzIEdyYXBoR2VuZXJhdG9yUHJvcGVydHlFZGl0b3JBZGFwdGVyRmFjdG9yeUltcGwgZXh0ZW5kcworCQkJQ29tcG9zZWRBZGFwdGVyRmFjdG9yeSBpbXBsZW1lbnRzCisJCQlJR3JhcGhHZW5lcmF0b3JQcm9wZXJ0eUVkaXRvckFkYXB0ZXJGYWN0b3J5IHsKKworCQlAT3ZlcnJpZGUKKwkJcHVibGljIGJvb2xlYW4gaXNGYWN0b3J5Rm9yVHlwZShPYmplY3QgdHlwZSkgeworCQkJcmV0dXJuIHR5cGUgPT0gR3JhcGhHZW5lcmF0b3JQcm9wZXJ0eUVkaXRvckFkYXB0ZXIuY2xhc3M7CisJCX0KKworCX0gLy8gR3JhcGhHZW5lcmF0b3JQcm9wZXJ0eUVkaXRvckFkYXB0ZXJGYWN0b3J5SW1wbAorfSAvLyBJR3JhcGhHZW5lcmF0b3JQcm9wZXJ0eUVkaXRvckFkYXB0ZXJGYWN0b3J5CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkuZ3JhcGhnZW5lcmF0b3JzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL2dyYXBoZ2VuZXJhdG9ycy9wcmVzZW50YXRpb24vR3JhcGhnZW5lcmF0b3JFZGl0b3JQbHVnaW4uamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5ncmFwaGdlbmVyYXRvcnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvZ3JhcGhnZW5lcmF0b3JzL3ByZXNlbnRhdGlvbi9HcmFwaGdlbmVyYXRvckVkaXRvclBsdWdpbi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQyNTFlNWUKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkuZ3JhcGhnZW5lcmF0b3JzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL2dyYXBoZ2VuZXJhdG9ycy9wcmVzZW50YXRpb24vR3JhcGhnZW5lcmF0b3JFZGl0b3JQbHVnaW4uamF2YQpAQCAtMCwwICsxLDEwNiBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOSwyMDEwIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS51aS5ncmFwaGdlbmVyYXRvcnMucHJlc2VudGF0aW9uOworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5FTUZQbHVnaW47CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51aS5FY2xpcHNlVUlQbHVnaW47CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlJlc291cmNlTG9jYXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUucHJvdmlkZXIuRWNvcmVFZGl0UGx1Z2luOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24ucHJvdmlkZXIuQ29yZUVkaXRQbHVnaW47CisKKy8qKgorICogVGhpcyBpcyB0aGUgY2VudHJhbCBzaW5nbGV0b24gZm9yIHRoZSBHcmFwaGdlbmVyYXRvciBlZGl0b3IgcGx1Z2luLgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgZmluYWwgY2xhc3MgR3JhcGhnZW5lcmF0b3JFZGl0b3JQbHVnaW4gZXh0ZW5kcyBFTUZQbHVnaW4geworCS8qKgorCSAqIEtlZXAgdHJhY2sgb2YgdGhlIHNpbmdsZXRvbi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIEdyYXBoZ2VuZXJhdG9yRWRpdG9yUGx1Z2luIElOU1RBTkNFID0gbmV3IEdyYXBoZ2VuZXJhdG9yRWRpdG9yUGx1Z2luKCk7CisJCisJLyoqCisJICogS2VlcCB0cmFjayBvZiB0aGUgc2luZ2xldG9uLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByaXZhdGUgc3RhdGljIEltcGxlbWVudGF0aW9uIHBsdWdpbjsKKworCS8qKgorCSAqIENyZWF0ZSB0aGUgaW5zdGFuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEdyYXBoZ2VuZXJhdG9yRWRpdG9yUGx1Z2luKCkgeworCQlzdXBlcgorCQkJKG5ldyBSZXNvdXJjZUxvY2F0b3IgW10geworCQkJCUNvcmVFZGl0UGx1Z2luLklOU1RBTkNFLAorCQkJCUVjb3JlRWRpdFBsdWdpbi5JTlNUQU5DRSwKKwkJCX0pOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIHNpbmdsZXRvbiBpbnN0YW5jZSBvZiB0aGUgRWNsaXBzZSBwbHVnaW4uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBzaW5nbGV0b24gaW5zdGFuY2UuCisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBSZXNvdXJjZUxvY2F0b3IgZ2V0UGx1Z2luUmVzb3VyY2VMb2NhdG9yKCkgeworCQlyZXR1cm4gcGx1Z2luOworCX0KKwkKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBzaW5nbGV0b24gaW5zdGFuY2Ugb2YgdGhlIEVjbGlwc2UgcGx1Z2luLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgc2luZ2xldG9uIGluc3RhbmNlLgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgc3RhdGljIEltcGxlbWVudGF0aW9uIGdldFBsdWdpbigpIHsKKwkJcmV0dXJuIHBsdWdpbjsKKwl9CisJCisJLyoqCisJICogVGhlIGFjdHVhbCBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgRWNsaXBzZSA8Yj5QbHVnaW48L2I+LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBzdGF0aWMgY2xhc3MgSW1wbGVtZW50YXRpb24gZXh0ZW5kcyBFY2xpcHNlVUlQbHVnaW4geworCQkvKioKKwkJICogQ3JlYXRlcyBhbiBpbnN0YW5jZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQgIE5PVAorCQkgKi8KKwkJcHVibGljIEltcGxlbWVudGF0aW9uKCkgeworCQkJc3VwZXIoKTsKKwkKKwkJCS8vIFJlbWVtYmVyIHRoZSBzdGF0aWMgaW5zdGFuY2UuCisJCQkvLworCQkJcGx1Z2luID0gdGhpczsKKwkJCQorCQkJLy8gUmVnaXN0ZXIKKwkJCW5ldyBvcmcuZWNsaXBzZS5zdGVtLnVpLmdyYXBoZ2VuZXJhdG9ycy53aXphcmRzLkdyYXBoR2VuZXJhdG9yUHJvcGVydHlTdHJpbmdQcm92aWRlckFkYXB0ZXJGYWN0b3J5KCk7CisJCQluZXcgb3JnLmVjbGlwc2Uuc3RlbS51aS5ncmFwaGdlbmVyYXRvcnMuYWRhcHRlcnMuZ3JhcGhnZW5lcmF0b3Jwcm9wZXJ0eWVkaXRvci5HcmFwaEdlbmVyYXRvclByb3BlcnR5RWRpdG9yQWRhcHRlckZhY3RvcnkoKTsKKworCQl9CisJfQorCit9CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkuZ3JhcGhnZW5lcmF0b3JzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL2dyYXBoZ2VuZXJhdG9ycy93aXphcmRzL0dyYXBoR2VuZXJhdG9yRGVmaW5pdGlvbkNvbnRyb2wuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5ncmFwaGdlbmVyYXRvcnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvZ3JhcGhnZW5lcmF0b3JzL3dpemFyZHMvR3JhcGhHZW5lcmF0b3JEZWZpbml0aW9uQ29udHJvbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkyMjk1ZmYKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkuZ3JhcGhnZW5lcmF0b3JzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL2dyYXBoZ2VuZXJhdG9ycy93aXphcmRzL0dyYXBoR2VuZXJhdG9yRGVmaW5pdGlvbkNvbnRyb2wuamF2YQpAQCAtMCwwICsxLDIzMSBAQAorLy8gRGlzZWFzZURlZmluaXRpb25Db250cm9sLmphdmEKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS51aS5ncmFwaGdlbmVyYXRvcnMud2l6YXJkczsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OworaW1wb3J0IGphdmEudXRpbC5MaXN0OworCitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3Q7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkNvcmVFeGNlcHRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklDb25maWd1cmF0aW9uRWxlbWVudDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSUV4dGVuc2lvblJlZ2lzdHJ5OworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QbGF0Zm9ybTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUudXRpbC5FY29yZVV0aWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5EdWJsaW5Db3JlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5HcmFwaDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmdyYXBoZ2VuZXJhdG9ycy5Db25zdGFudHM7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaGdlbmVyYXRvcnMuR3JhcGhHZW5lcmF0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS51aS5BY3RpdmF0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LlNXVDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLk1vZGlmeUxpc3RlbmVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuU2VsZWN0aW9uQWRhcHRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLlNlbGVjdGlvbkV2ZW50OworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5sYXlvdXQuR3JpZERhdGE7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5HcmlkTGF5b3V0OworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbWJvOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5MYWJlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5QbGF0Zm9ybVVJOworCisvKioKKyAqIFRoaXMgY2xhc3MgcmVwcmVzZW50cyB0aGUgU1dUIGNvbnRyb2wgZm9yIGRlZmluaW5nIGEgZGlzZWFzZS4KKyAqLworcHVibGljIGNsYXNzIEdyYXBoR2VuZXJhdG9yRGVmaW5pdGlvbkNvbnRyb2wgZXh0ZW5kcyBDb21wb3NpdGUgeworCisJcHJpdmF0ZSBzdGF0aWMgb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaGdlbmVyYXRvcnMuR3JhcGhHZW5lcmF0b3JbXSBncmFwaEdlbmVyYXRvcnMgPSBudWxsOworCisJcHJpdmF0ZSBmaW5hbCBDb21ibyBjb21ibzsKKworCXByaXZhdGUgZmluYWwgR3JhcGhHZW5lcmF0b3JQcm9wZXJ0eUNvbXBvc2l0ZSBncmFwaEdlbmVyYXRvclByb3BlcnR5Q29tcG9zaXRlOworCQorCS8qKgorCSAqIHRoZSBOZXdHcmFwaERlZmluaXRpb25Db250cm9sIGNvbWJvIG11c3QgYmUgYWJsZSB0byB1cGRhdGUgdGhlIE5ld0dyYXBoV2l6YXJkCisJICovCisJcHJpdmF0ZSBOZXdHcmFwaFdpemFyZCBuZXdHcmFwaFdpemFyZCA9IG51bGw7CisKKwkvKioKKwkgKiBDcmVhdGUgdGhlIGNvbXBvc2l0ZQorCSAqIAorCSAqIEBwYXJhbSBwYXJlbnQKKwkgKiBAcGFyYW0gc3R5bGUKKwkgKiBAcGFyYW0gcHJvamVjdFZhbGlkYXRvcgorCSAqIEBwYXJhbSBuZ3cgYSBOZXdHcmFwaFdpemFyZAorCSAqLworCXB1YmxpYyBHcmFwaEdlbmVyYXRvckRlZmluaXRpb25Db250cm9sKGZpbmFsIENvbXBvc2l0ZSBwYXJlbnQsIGZpbmFsIGludCBzdHlsZSwKKwkJCU1vZGlmeUxpc3RlbmVyIHByb2plY3RWYWxpZGF0b3IsIElQcm9qZWN0IHByb2plY3QsIE5ld0dyYXBoV2l6YXJkIG5ndykgeworCQlzdXBlcihwYXJlbnQsIHN0eWxlKTsKKwkJbmV3R3JhcGhXaXphcmQgPSBuZ3c7CisJCWZpbmFsIEdyaWRMYXlvdXQgZ3JpZExheW91dCA9IG5ldyBHcmlkTGF5b3V0KCk7CisJCWdyaWRMYXlvdXQubWFyZ2luV2lkdGggPSAwOworCQlncmlkTGF5b3V0Lm51bUNvbHVtbnMgPSAyOworCQlzZXRMYXlvdXQoZ3JpZExheW91dCk7CisKKwkJZmluYWwgTGFiZWwgZ3JhcGhHZW5lcmF0b3JMYWJlbCA9IG5ldyBMYWJlbCh0aGlzLCBTV1QuTk9ORSk7CisJCWZpbmFsIEdyaWREYXRhIGdkX2dyYXBoR2VuZXJhdG9yTGFiZWwgPSBuZXcgR3JpZERhdGEoU1dULkZJTEwsIFNXVC5DRU5URVIsIHRydWUsIGZhbHNlKTsKKwkJZ2RfZ3JhcGhHZW5lcmF0b3JMYWJlbC53aWR0aEhpbnQgPSAxMDA7CisJCWdyYXBoR2VuZXJhdG9yTGFiZWwuc2V0TGF5b3V0RGF0YShnZF9ncmFwaEdlbmVyYXRvckxhYmVsKTsKKwkJZ3JhcGhHZW5lcmF0b3JMYWJlbC5zZXRUZXh0KE1lc3NhZ2VzLmdldFN0cmluZygiR0dEQy4wIikpOyAvLyROT04tTkxTLTEkCisKKwkJY29tYm8gPSBuZXcgQ29tYm8odGhpcywgU1dULlJFQURfT05MWSk7CisJCWNvbWJvLnNldFRleHRMaW1pdCgzMCk7CisJCWZpbmFsIEdyaWREYXRhIGdkX2NvbWJvID0gbmV3IEdyaWREYXRhKFNXVC5GSUxMLCBTV1QuQ0VOVEVSLCB0cnVlLAorCQkJCWZhbHNlKTsKKwkJZ2RfY29tYm8ud2lkdGhIaW50ID0gMzAzOworCQljb21iby5zZXRMYXlvdXREYXRhKGdkX2NvbWJvKTsKKworCQljb21iby5zZXRUb29sVGlwVGV4dChNZXNzYWdlcy5nZXRTdHJpbmcoIkdHREMuMSIpKTsgLy8kTk9OLU5MUy0xJAorCQkvLyBJbml0aWFsaXplIHRoZSBsaXN0IG9mIGRpc2Vhc2UgbW9kZWxzIGF2YWlsYWJsZQorCQljb21iby5zZXRJdGVtcyhnZXRHcmFwaEdlbmVyYXRvck5hbWVzKGdldEdyYXBoR2VuZXJhdG9ycygpKSk7CisJCWNvbWJvLnNlbGVjdCgwKTsKKwkJY29tYm8uYWRkTW9kaWZ5TGlzdGVuZXIocHJvamVjdFZhbGlkYXRvcik7CisJCQorCQkKKwkJZ3JhcGhHZW5lcmF0b3JQcm9wZXJ0eUNvbXBvc2l0ZSA9IG5ldyBHcmFwaEdlbmVyYXRvclByb3BlcnR5Q29tcG9zaXRlKHRoaXMsCisJCQkJU1dULk5PTkUsIGdldEdyYXBoR2VuZXJhdG9ycygpLCBwcm9qZWN0VmFsaWRhdG9yLCBwcm9qZWN0KTsKKwkJZmluYWwgR3JpZERhdGEgZ2RfZ3JhcGhHZW5lcmF0b3JQcm9wZXJ0eUNvbnRyb2wgPSBuZXcgR3JpZERhdGEoU1dULkZJTEwsCisJCQkJU1dULkNFTlRFUiwgdHJ1ZSwgZmFsc2UsIDIsIDEpOworCQlncmFwaEdlbmVyYXRvclByb3BlcnR5Q29tcG9zaXRlCisJCQkJLnNldExheW91dERhdGEoZ2RfZ3JhcGhHZW5lcmF0b3JQcm9wZXJ0eUNvbnRyb2wpOworCisJCWNvbWJvLmFkZFNlbGVjdGlvbkxpc3RlbmVyKG5ldyBTZWxlY3Rpb25BZGFwdGVyKCkgeworCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgdm9pZCB3aWRnZXRTZWxlY3RlZChTZWxlY3Rpb25FdmVudCBlKSB7CisJCQkJZ3JhcGhHZW5lcmF0b3JQcm9wZXJ0eUNvbXBvc2l0ZQorCQkJCQkJLmRpc3BsYXlHcmFwaEdlbmVyYXRvcihnZXRHcmFwaEdlbmVyYXRvcnMoKVtjb21ibworCQkJCQkJCQkuZ2V0U2VsZWN0aW9uSW5kZXgoKV0pOworCQkJCQorCQkJCS8vIHVwZGF0ZSB0aGUgZHVibGluIGNvcmUgZnJvbSB0aGUgcGx1Z2luIGRlZmF1bHRzIGZvciB0aGUKKwkJCQkvLyBuZXdseSBzZWxlY3RlZCBkaXNlYXNlIG1vZGVsOworCQkJCW5ld0dyYXBoV2l6YXJkLm5ld0R1YmxpbkNvcmVQYWdlLnVwZGF0ZUR1YmxpbkNvcmVQYWdlKGdldFNlbGVjdGVkR3JhcGhHZW5lcmF0b3IoKS5nZXREdWJsaW5Db3JlKCkpOworCQkJCQorCQkJCQorCQkJfSAvLyB3aWRnZXRTZWxlY3RlZAorCisJCX0pOworCQkvL2ZpbmFsIEdyYXBoR2VuZXJhdG9yRGVmaW5pdGlvbkNvbnRyb2wgc2VsZiA9IHRoaXM7CisJCQorCQlQbGF0Zm9ybVVJLmdldFdvcmtiZW5jaCgpLmdldEhlbHBTeXN0ZW0oKS5zZXRIZWxwKHBhcmVudCwgIm9yZy5lY2xpcHNlLnN0ZW0uZG9jLm5ld2dyYXBoX2NvbnRleHRpZCIpOworCisJfSAvLyBEaXNlYXNlRGVmaW5pdGlvbkNvbnRyb2wKKworCS8qKgorCSAqIEByZXR1cm4gYW4gYXJyYXkgb2YgdGhlIHtAbGluayBHcmFwaEdlbmVyYXRvcnN9cyBkZWZpbmVkIGluIHRoZSBzeXN0ZW0uCisJICovCisJcHJpdmF0ZSBHcmFwaEdlbmVyYXRvcltdIGdldEdyYXBoR2VuZXJhdG9ycygpIHsKKwkJaWYgKGdyYXBoR2VuZXJhdG9ycyA9PSBudWxsKSB7CisJCQlmaW5hbCBJRXh0ZW5zaW9uUmVnaXN0cnkgcmVnaXN0cnkgPSBQbGF0Zm9ybS5nZXRFeHRlbnNpb25SZWdpc3RyeSgpOworCQkJZmluYWwgSUNvbmZpZ3VyYXRpb25FbGVtZW50W10gZ3JhcGhHZW5lcmF0b3JDb25maWdFbGVtZW50cyA9IHJlZ2lzdHJ5CisJCQkJCS5nZXRDb25maWd1cmF0aW9uRWxlbWVudHNGb3IoQ29uc3RhbnRzLklEX0dSQVBIX0dFTkVSQVRPUl9FWFRFTlNJT05fUE9JTlQpOworCisJCQlmaW5hbCBMaXN0PEdyYXBoR2VuZXJhdG9yPiB0ZW1wID0gbmV3IEFycmF5TGlzdDxHcmFwaEdlbmVyYXRvcj4oKTsKKworCQkJZ3JhcGhHZW5lcmF0b3JzID0gbmV3IEdyYXBoR2VuZXJhdG9yW2dyYXBoR2VuZXJhdG9yQ29uZmlnRWxlbWVudHMubGVuZ3RoXTsKKworCQkJZm9yIChpbnQgaSA9IDA7IGkgPCBncmFwaEdlbmVyYXRvckNvbmZpZ0VsZW1lbnRzLmxlbmd0aDsgaSsrKSB7CisJCQkJZmluYWwgSUNvbmZpZ3VyYXRpb25FbGVtZW50IGVsZW1lbnQgPSBncmFwaEdlbmVyYXRvckNvbmZpZ0VsZW1lbnRzW2ldOworCQkJCS8vIERvZXMgdGhlIGVsZW1lbnQgc3BlY2lmeSB0aGUgY2xhc3Mgb2YgdGhlIGRpc2Vhc2UgbW9kZWw/CisJCQkJaWYgKGVsZW1lbnQuZ2V0TmFtZSgpLmVxdWFscyhDb25zdGFudHMuR1JBUEhfR0VORVJBVE9SX0VMRU1FTlQpKSB7CisJCQkJCS8vIFllcworCQkJCQl0cnkgeworCQkJCQkJdGVtcC5hZGQoKEdyYXBoR2VuZXJhdG9yKSBlbGVtZW50CisJCQkJCQkJCS5jcmVhdGVFeGVjdXRhYmxlRXh0ZW5zaW9uKCJjbGFzcyIpKTsgLy8kTk9OLU5MUy0xJAorCQkJCQl9IGNhdGNoIChmaW5hbCBDb3JlRXhjZXB0aW9uIGUpIHsKKwkJCQkJCUFjdGl2YXRvci5sb2dFcnJvcigKKwkJCQkJCQkJTWVzc2FnZXMuZ2V0U3RyaW5nKCJHR0RDLjMiKSwgZSk7IC8vJE5PTi1OTFMtMSQKKwkJCQkJfQorCQkJCX0gLy8gaWYKKwkJCX0gLy8gZm9yIGVhY2ggY29uZmlndXJhdGlvbiBlbGVtZW50CisKKwkJCWdyYXBoR2VuZXJhdG9ycyA9IHRlbXAudG9BcnJheShuZXcgR3JhcGhHZW5lcmF0b3JbXSB7fSk7CisJCX0gLy8gaWYgZGlzZXNhZU1vZGVscyBub3QgY3JlYXRlZAorCQkKKworCQkKKwkJLy8gbm93IHVwZGF0ZSB0aGUgZHVibGluIGNvcmVzIHdpdGggdGhlIGRlZmF1bHQgcGx1Z2luLnhtbCBpbmZvCisJCWZvcihHcmFwaEdlbmVyYXRvciBncmFwaEdlbmVyYXRvcjogZ3JhcGhHZW5lcmF0b3JzKSB7CisJCQlpZihncmFwaEdlbmVyYXRvciAhPSBudWxsKSB7CisJCQkJLy8gSkhLIGdldHRpbmcgREMgaW5mbyBmcm9tIHRoZSBwbHVnZ2luLnhtbAorCQkJCUR1YmxpbkNvcmUgZHVibGluQ29yZSA9IG9yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhnZW5lcmF0b3JzLkFjdGl2YXRvci5nZXRQbHVnaW5EdWJsaW5Db3JlKGdyYXBoR2VuZXJhdG9yKTsKKwkJCQlpZihkdWJsaW5Db3JlICE9IG51bGwpIHsKKwkJCQkJZ3JhcGhHZW5lcmF0b3Iuc2V0RHVibGluQ29yZShkdWJsaW5Db3JlKTsKKwkJCQl9CisJCQl9CisJCX0KKworCQlyZXR1cm4gZ3JhcGhHZW5lcmF0b3JzOworCX0gLy8gZ2V0R3JhcGhHZW5lcmF0b3JzCisKKwkvKioKKwkgKiBAcmV0dXJuIHRoZSBuYW1lcyBvZiB0aGUgZGlzZWFzZSBtb2RlbHMKKwkgKi8KKwlwcml2YXRlIFN0cmluZ1tdIGdldEdyYXBoR2VuZXJhdG9yTmFtZXMoZmluYWwgR3JhcGhHZW5lcmF0b3JbXSBncmFwaEdlbmVyYXRvcnMpIHsKKwkJZmluYWwgU3RyaW5nW10gcmV0VmFsdWUgPSBuZXcgU3RyaW5nW2dyYXBoR2VuZXJhdG9ycy5sZW5ndGhdOworCQlmb3IgKGludCBpID0gMDsgaSA8IGdyYXBoR2VuZXJhdG9ycy5sZW5ndGg7IGkrKykgeworCQkJU3RyaW5nIG5hbWUgPSBncmFwaEdlbmVyYXRvcnNbaV0uZ2V0RHVibGluQ29yZSgpLmdldFRpdGxlKCk7CisJCQkvLyBXYXMgYSBuYW1lIHNwZWNpZmllZD8KKwkJCWlmICgobmFtZSA9PSBudWxsKSB8fCBuYW1lLmVxdWFscygiIikpIHsgLy8kTk9OLU5MUy0xJAorCQkJCS8vIE5vCisJCQkJbmFtZSA9IGdyYXBoR2VuZXJhdG9yc1tpXS5nZXRDbGFzcygpLmdldFNpbXBsZU5hbWUoKTsKKwkJCX0gLy8gaWYKKworCQkJcmV0VmFsdWVbaV0gPSBuYW1lOworCQl9IC8vIGZvciBpCisJCXJldHVybiByZXRWYWx1ZTsKKwl9IC8vIGdldEdyYXBoR2VuZXJhdG9yTmFtZXMKKwkKKwkvKioKKwkgKiAKKwkgKiBAcmV0dXJuCisJICovCisJR3JhcGhHZW5lcmF0b3IgZ2V0U2VsZWN0ZWRHcmFwaEdlbmVyYXRvcigpIHsKKwkJZmluYWwgR3JhcGhHZW5lcmF0b3IgcmV0VmFsdWUgPSBFY29yZVV0aWwuY29weShnZXRHcmFwaEdlbmVyYXRvcnMoKVtjb21iby5nZXRTZWxlY3Rpb25JbmRleCgpXSk7CisJCXJldHVybiByZXRWYWx1ZTsKKwl9IC8vIGdldFNlbGVjdGVkRGlzZWFzZU1vZGVsCisKKwkKKworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGRpc3Bvc2UoKSB7CisJCXN1cGVyLmRpc3Bvc2UoKTsKKwl9CisKKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgdm9pZCBjaGVja1N1YmNsYXNzKCkgeworCQkvLyBEaXNhYmxlIHRoZSBjaGVjayB0aGF0IHByZXZlbnRzIHN1Yi1jbGFzc2luZyBvZiBTV1QgY29tcG9uZW50cworCX0KKworCS8qKgorCSAqIEByZXR1cm4gPGNvZGU+dHJ1ZTwvY29kZT4gaWYgdGhlIGNvbnRlbnRzIG9mIHRoZSBjb250cm9sIGFyZSB2YWxpZCwKKwkgKiAgICAgICAgIDxjb2RlPmZhbHNlPC9jb2RlPiBvdGhlcndpc2UuCisJICovCisJcHVibGljIGJvb2xlYW4gdmFsaWRhdGUoKSB7CisJCXJldHVybiBncmFwaEdlbmVyYXRvclByb3BlcnR5Q29tcG9zaXRlLnZhbGlkYXRlKCk7CisJfSAvLyB2YWxpZGF0ZQorCisJLyoqCisJICogQHJldHVybiB0aGUgZXJyb3IgbWVzc2FnZSBzZXQgYnkge0BsaW5rICN2YWxpZGF0ZSgpfQorCSAqLworCXB1YmxpYyBTdHJpbmcgZ2V0RXJyb3JNZXNzYWdlKCkgeworCQlyZXR1cm4gZ3JhcGhHZW5lcmF0b3JQcm9wZXJ0eUNvbXBvc2l0ZS5nZXRFcnJvck1lc3NhZ2UoKTsKKwl9CisKKwkvKioKKwkgKiByZXR1cm4gdGhlIG5ldyBncmFwaAorCSAqLworCXB1YmxpYyBHcmFwaCBnZXRHcmFwaCgpIHsKKwkJZmluYWwgR3JhcGhHZW5lcmF0b3IgZ2cgPSAoR3JhcGhHZW5lcmF0b3IpRWNvcmVVdGlsCisJCQkuY29weShnZXRHcmFwaEdlbmVyYXRvcnMoKVtjb21iby5nZXRTZWxlY3Rpb25JbmRleCgpXSk7CisJCUdyYXBoIHJldFZhbHVlID0gZ3JhcGhHZW5lcmF0b3JQcm9wZXJ0eUNvbXBvc2l0ZS5nZXRHcmFwaChnZyk7CisJCXJldHVybiByZXRWYWx1ZTsKKwl9Cit9IC8vIEdyYXBoR2VuZXJhdG9yRGVmaW5pdGlvbkNvbnRyb2wKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5ncmFwaGdlbmVyYXRvcnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvZ3JhcGhnZW5lcmF0b3JzL3dpemFyZHMvR3JhcGhHZW5lcmF0b3JQcm9wZXJ0eUNvbXBvc2l0ZS5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLmdyYXBoZ2VuZXJhdG9ycy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9ncmFwaGdlbmVyYXRvcnMvd2l6YXJkcy9HcmFwaEdlbmVyYXRvclByb3BlcnR5Q29tcG9zaXRlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDI3YjliMgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5ncmFwaGdlbmVyYXRvcnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvZ3JhcGhnZW5lcmF0b3JzL3dpemFyZHMvR3JhcGhHZW5lcmF0b3JQcm9wZXJ0eUNvbXBvc2l0ZS5qYXZhCkBAIC0wLDAgKzEsMTMwIEBACisvLyBEaXNlYXNlTW9kZWxQcm9wZXJ0eUNvbXBvc2l0ZS5qYXZhCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0udWkuZ3JhcGhnZW5lcmF0b3JzLndpemFyZHM7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7CitpbXBvcnQgamF2YS51dGlsLk1hcDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5HcmFwaDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmdyYXBoZ2VuZXJhdG9ycy5HcmFwaEdlbmVyYXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnVpLkFjdGl2YXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnVpLmdyYXBoZ2VuZXJhdG9ycy5hZGFwdGVycy5ncmFwaGdlbmVyYXRvcnByb3BlcnR5ZWRpdG9yLkdyYXBoR2VuZXJhdG9yUHJvcGVydHlFZGl0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS51aS5ncmFwaGdlbmVyYXRvcnMuYWRhcHRlcnMuZ3JhcGhnZW5lcmF0b3Jwcm9wZXJ0eWVkaXRvci5HcmFwaEdlbmVyYXRvclByb3BlcnR5RWRpdG9yQWRhcHRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnVpLmdyYXBoZ2VuZXJhdG9ycy5hZGFwdGVycy5ncmFwaGdlbmVyYXRvcnByb3BlcnR5ZWRpdG9yLkdyYXBoR2VuZXJhdG9yUHJvcGVydHlFZGl0b3JBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuU1dUOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5jdXN0b20uU3RhY2tMYXlvdXQ7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5Nb2RpZnlMaXN0ZW5lcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuTGFiZWw7CisKKy8qKgorICogVGhpcyBjbGFzcyByZXByZXNlbnRzCisgKi8KK3B1YmxpYyBjbGFzcyBHcmFwaEdlbmVyYXRvclByb3BlcnR5Q29tcG9zaXRlIGV4dGVuZHMgQ29tcG9zaXRlIHsKKworCXByaXZhdGUgTWFwPG9yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhnZW5lcmF0b3JzLkdyYXBoR2VuZXJhdG9yLCBHcmFwaEdlbmVyYXRvclByb3BlcnR5RWRpdG9yPiBtb2RlbE1hcCA9IG5ldyBIYXNoTWFwPEdyYXBoR2VuZXJhdG9yLCBHcmFwaEdlbmVyYXRvclByb3BlcnR5RWRpdG9yPigpOworCisJcHJpdmF0ZSBTdGFja0xheW91dCBzdGFja0xheW91dCA9IG51bGw7CisKKwkvKioKKwkgKiBDcmVhdGUgdGhlIGNvbXBvc2l0ZQorCSAqIAorCSAqIEBwYXJhbSBwYXJlbnQKKwkgKiBAcGFyYW0gc3R5bGUKKwkgKiBAcGFyYW0gcHJvamVjdFZhbGlkYXRvcgorCSAqLworCXB1YmxpYyBHcmFwaEdlbmVyYXRvclByb3BlcnR5Q29tcG9zaXRlKGZpbmFsIENvbXBvc2l0ZSBwYXJlbnQsCisJCQlmaW5hbCBpbnQgc3R5bGUsIGZpbmFsIEdyYXBoR2VuZXJhdG9yW10gZ3JhcGhHZW5lcmF0b3JzLAorCQkJTW9kaWZ5TGlzdGVuZXIgcHJvamVjdFZhbGlkYXRvciwgSVByb2plY3QgcHJvamVjdCkgeworCQlzdXBlcihwYXJlbnQsIHN0eWxlKTsKKwkJc3RhY2tMYXlvdXQgPSBuZXcgU3RhY2tMYXlvdXQoKTsKKwkJc2V0TGF5b3V0KHN0YWNrTGF5b3V0KTsKKworCQlMYWJlbCBsYWJlbDsKKwkJbGFiZWwgPSBuZXcgTGFiZWwodGhpcywgU1dULk5PTkUpOworCQlsYWJlbC5zZXRUZXh0KE1lc3NhZ2VzLmdldFN0cmluZygiR0dQQzEiKSk7IC8vJE5PTi1OTFMtMSQKKwkJR3JhcGhHZW5lcmF0b3JQcm9wZXJ0eUVkaXRvciBmaXJzdE9uZSA9IG51bGw7CisJCS8vIEFueSBkaXNlYXNlIG1vZGVscz8KKwkJaWYgKGdyYXBoR2VuZXJhdG9ycyAhPSBudWxsKSB7CisJCQkvLyBZZXMKKwkJCWZvciAoaW50IGkgPSAwOyBpIDwgZ3JhcGhHZW5lcmF0b3JzLmxlbmd0aDsgaSsrKSB7CisKKwkJCQlHcmFwaEdlbmVyYXRvclByb3BlcnR5RWRpdG9yQWRhcHRlciBkbXBlYSA9IChHcmFwaEdlbmVyYXRvclByb3BlcnR5RWRpdG9yQWRhcHRlcikgR3JhcGhHZW5lcmF0b3JQcm9wZXJ0eUVkaXRvckFkYXB0ZXJGYWN0b3J5LklOU1RBTkNFCisJCQkJCQkuYWRhcHQoZ3JhcGhHZW5lcmF0b3JzW2ldLAorCQkJCQkJCQlHcmFwaEdlbmVyYXRvclByb3BlcnR5RWRpdG9yQWRhcHRlci5jbGFzcyk7CisKKwkJCQlmaW5hbCBHcmFwaEdlbmVyYXRvclByb3BlcnR5RWRpdG9yIGRtcGUgPSBkbXBlYQorCQkJCQkJLmNyZWF0ZUdyYXBoR2VuZXJhdG9yUHJvcGVydHlFZGl0b3IodGhpcywgU1dULk5PTkUsCisJCQkJCQkJCXByb2plY3RWYWxpZGF0b3IsIHByb2plY3QpOworCisJCQkJbW9kZWxNYXAucHV0KGdyYXBoR2VuZXJhdG9yc1tpXSwgZG1wZSk7CisJCQkJaWYgKGZpcnN0T25lID09IG51bGwpIHsKKwkJCQkJLy8gWWVzCisJCQkJCWZpcnN0T25lID0gZG1wZTsKKwkJCQl9IC8vIGlmCisJCQl9IC8vIGZvciBpCisJCX0gLy8gaWYgYW55IGRpc2Vhc2UgbW9kZWxzPworCisJCXN0YWNrTGF5b3V0LnRvcENvbnRyb2wgPSBmaXJzdE9uZTsKKwl9IC8vIEdyYXBoR2VuZXJhdG9yUHJvcGVydHlDb21wb3NpdGUKKworCXZvaWQgZGlzcGxheUdyYXBoR2VuZXJhdG9yKGZpbmFsIEdyYXBoR2VuZXJhdG9yIGdyYXBoR2VuZXJhdG9yKSB7CisJCWZpbmFsIEdyYXBoR2VuZXJhdG9yUHJvcGVydHlFZGl0b3IgZG1wZSA9IG1vZGVsTWFwLmdldChncmFwaEdlbmVyYXRvcik7CisJCS8vIERpZCB3ZSBmaW5kIGl0PworCQlpZiAoZG1wZSAhPSBudWxsKSB7CisJCQkvLyBZZXMKKwkJCXN0YWNrTGF5b3V0LnRvcENvbnRyb2wgPSBkbXBlOworCQkJbGF5b3V0KCk7CisJCX0gLy8gaWYKKwkJZWxzZSB7CisJCQlBY3RpdmF0b3IubG9nRXJyb3IoTWVzc2FnZXMuZ2V0U3RyaW5nKCJHR1BDMiIpIC8vJE5PTi1OTFMtMSQKKwkJCQkJKyBncmFwaEdlbmVyYXRvci5nZXRDbGFzcygpLmdldE5hbWUoKSArICJcIiIsIG51bGwpOyAvLyROT04tTkxTLTEkCisJCX0KKwl9IC8vIGRpc3BsYXlHcmFwaEdlbmVyYXRvcgorCQorCXB1YmxpYyB2b2lkIGRpc3Bvc2UoKSB7CisJCXN1cGVyLmRpc3Bvc2UoKTsKKwl9CisKKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgdm9pZCBjaGVja1N1YmNsYXNzKCkgeworCQkvLyBEaXNhYmxlIHRoZSBjaGVjayB0aGF0IHByZXZlbnRzIHN1Yi1jbGFzc2luZyBvZiBTV1QgY29tcG9uZW50cworCX0KKworCS8qKgorCSAqIEByZXR1cm4gPGNvZGU+dHJ1ZTwvY29kZT4gaWYgdGhlIGNvbnRlbnRzIG9mIHRoZSBjb21wb3NpdGUgYXJlIHZhbGlkLAorCSAqICAgICAgICAgPGNvZGU+ZmFsc2U8L2NvZGU+IG90aGVyd2lzZS4KKwkgKi8KKwlwdWJsaWMgYm9vbGVhbiB2YWxpZGF0ZSgpIHsKKwkJcmV0dXJuICgoR3JhcGhHZW5lcmF0b3JQcm9wZXJ0eUVkaXRvcikgKHN0YWNrTGF5b3V0LnRvcENvbnRyb2wpKQorCQkJCS52YWxpZGF0ZSgpOworCX0gLy8gdmFsaWRhdGUKKworCS8qKgorCSAqIEByZXR1cm4KKwkgKi8KKwlwdWJsaWMgU3RyaW5nIGdldEVycm9yTWVzc2FnZSgpIHsKKwkJcmV0dXJuICgoR3JhcGhHZW5lcmF0b3JQcm9wZXJ0eUVkaXRvcikgKHN0YWNrTGF5b3V0LnRvcENvbnRyb2wpKQorCQkJCS5nZXRFcnJvck1lc3NhZ2UoKTsKKwl9CisKKwkvKioKKwkgKiBAcGFyYW0gZ3JhcGhHZW5lcmF0b3IKKwkgKi8KKwlwdWJsaWMgR3JhcGggZ2V0R3JhcGgoR3JhcGhHZW5lcmF0b3IgZ2cpIHsKKwkJcmV0dXJuICgoR3JhcGhHZW5lcmF0b3JQcm9wZXJ0eUVkaXRvcikgKHN0YWNrTGF5b3V0LnRvcENvbnRyb2wpKQorCQkJCS5nZXRHcmFwaChnZyk7CisJfSAvLyAKKworfSAvLyBHcmFwaEdlbmVyYXRvclByb3BlcnR5Q29tcG9zaXRlCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkuZ3JhcGhnZW5lcmF0b3JzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL2dyYXBoZ2VuZXJhdG9ycy93aXphcmRzL0dyYXBoR2VuZXJhdG9yUHJvcGVydHlTdHJpbmdQcm92aWRlckFkYXB0ZXJGYWN0b3J5LmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkuZ3JhcGhnZW5lcmF0b3JzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL2dyYXBoZ2VuZXJhdG9ycy93aXphcmRzL0dyYXBoR2VuZXJhdG9yUHJvcGVydHlTdHJpbmdQcm92aWRlckFkYXB0ZXJGYWN0b3J5LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGYzNGUzMgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5ncmFwaGdlbmVyYXRvcnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvZ3JhcGhnZW5lcmF0b3JzL3dpemFyZHMvR3JhcGhHZW5lcmF0b3JQcm9wZXJ0eVN0cmluZ1Byb3ZpZGVyQWRhcHRlckZhY3RvcnkuamF2YQpAQCAtMCwwICsxLDEwMCBAQAorLy8gU3RhbmRhcmRQcm9wZXJ0eVN0cmluZ1Byb3ZpZGVyQWRhcHRlckZhY3RvcnkuamF2YQorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnVpLmdyYXBoZ2VuZXJhdG9ycy53aXphcmRzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuQWRhcHRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRVN0cnVjdHVyYWxGZWF0dXJlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtUHJvcGVydHlEZXNjcmlwdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhnZW5lcmF0b3JzLnV0aWwuR3JhcGhnZW5lcmF0b3JzQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS51aS5hZGFwdGVycy5wcm9wZXJ0eXN0cmluZ3MuUHJvcGVydHlTdHJpbmdQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnVpLmFkYXB0ZXJzLnByb3BlcnR5c3RyaW5ncy5Qcm9wZXJ0eVN0cmluZ1Byb3ZpZGVyQWRhcHRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnVpLmFkYXB0ZXJzLnByb3BlcnR5c3RyaW5ncy5Qcm9wZXJ0eVN0cmluZ1Byb3ZpZGVyQWRhcHRlckZhY3Rvcnk7CisKKy8qKgorICogVGhpcyBjbGFzcyBpcyB1c2VkIHRvIE5MUydkIHN0cmluZ3MgZm9yIEdyYXBoIEdlbmVyYXRvciBwcm9wZXJ0aWVzLiAKKyAqLworcHVibGljIGNsYXNzIEdyYXBoR2VuZXJhdG9yUHJvcGVydHlTdHJpbmdQcm92aWRlckFkYXB0ZXJGYWN0b3J5IGV4dGVuZHMKKwkJR3JhcGhnZW5lcmF0b3JzQWRhcHRlckZhY3RvcnkgaW1wbGVtZW50cyBQcm9wZXJ0eVN0cmluZ1Byb3ZpZGVyQWRhcHRlckZhY3RvcnkgeworCisJCisJUHJvcGVydHlTdHJpbmdQcm92aWRlckFkYXB0ZXIgYWRhcHRlciA9IG51bGw7CisKKwkvKioKKwkgKiBEZWZhdWx0IENvbnN0cnVjdG9yCisJICovCisJcHVibGljIEdyYXBoR2VuZXJhdG9yUHJvcGVydHlTdHJpbmdQcm92aWRlckFkYXB0ZXJGYWN0b3J5KCkgeworCQlzdXBlcigpOworCQlQcm9wZXJ0eVN0cmluZ1Byb3ZpZGVyQWRhcHRlckZhY3RvcnkuSU5TVEFOQ0UuYWRkQWRhcHRlckZhY3RvcnkodGhpcyk7CisJfQorCQorCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuaW1wbC5BZGFwdGVyRmFjdG9yeUltcGwjaXNGYWN0b3J5Rm9yVHlwZShqYXZhLmxhbmcuT2JqZWN0KQorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBib29sZWFuIGlzRmFjdG9yeUZvclR5cGUoT2JqZWN0IHR5cGUpIHsKKwkJcmV0dXJuICBzdXBlci5pc0ZhY3RvcnlGb3JUeXBlKHR5cGUpIHx8IHR5cGUgPT0gUHJvcGVydHlTdHJpbmdQcm92aWRlci5jbGFzczsKKwl9CisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC51dGlsLlN0YW5kYXJkQWRhcHRlckZhY3RvcnkjY3JlYXRlRGlzZWFzZU1vZGVsQWRhcHRlcigpCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlR3JhcGhHZW5lcmF0b3JBZGFwdGVyKCkgeworCQkvLyBIYXZlIHdlIGNyZWF0ZWQgb25lIGJlZm9yZT8KKwkJaWYgKGFkYXB0ZXIgPT0gbnVsbCkgeworCQkJLy8gTm8KKwkJCWFkYXB0ZXIgPSBuZXcgR3JhcGhHZW5lcmF0b3JQcm9wZXJ0eVN0cmluZ1Byb3ZpZGVyQWRhcHRlcigpOworCQl9IC8vIGlmIHdlIGRpZG4ndCBjcmVhdGUgb25lIGJlZm9yZQorCQlyZXR1cm4gYWRhcHRlcjsKKwl9IC8vIGNyZWF0ZURpc2Vhc2VNb2RlbEFkYXB0ZXIKKwkKKwlwdWJsaWMgc3RhdGljIGNsYXNzIEdyYXBoR2VuZXJhdG9yUHJvcGVydHlTdHJpbmdQcm92aWRlckFkYXB0ZXIgZXh0ZW5kcworCQkJUHJvcGVydHlTdHJpbmdQcm92aWRlckFkYXB0ZXIgeworCisJCS8qKgorCQkgKiBAcGFyYW0gZGVzY3JpcHRvcgorCQkgKiBAcmV0dXJuIHRoZSBOTFMnZCBuYW1lIG9mIHRoZSBwcm9wZXJ0eSB0byBkaXNwbGF5IHRvIHRoZSB1c2VyCisJCSAqLworCQlwdWJsaWMgU3RyaW5nIGdldFByb3BlcnR5TmFtZShJSXRlbVByb3BlcnR5RGVzY3JpcHRvciBkZXNjcmlwdG9yKSB7CisJCQlyZXR1cm4gTWVzc2FnZXMKKwkJCQkJLmdldFN0cmluZygoKEVTdHJ1Y3R1cmFsRmVhdHVyZSkgZGVzY3JpcHRvcgorCQkJCQkJCS5nZXRGZWF0dXJlKG51bGwpKS5nZXROYW1lKCkpOworCQl9IC8vIGdldFByb3BlcnR5TmFtZQorCisJCS8qKgorCQkgKiBAcGFyYW0gZGVzY3JpcHRvcgorCQkgKiBAcmV0dXJuIHRoZSBOTFMnZCB0b29sIHRpcCB0ZXh0IHRoYXQgZGVzY3JpYmVzIHRoZSBwcm9wZXJ0eQorCQkgKi8KKwkJcHVibGljIFN0cmluZyBnZXRQcm9wZXJ0eVRvb2xUaXAoCisJCQkJSUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IgZGVzY3JpcHRvcikgeworCQkJZmluYWwgRVN0cnVjdHVyYWxGZWF0dXJlIGZlYXR1cmUgPSAoRVN0cnVjdHVyYWxGZWF0dXJlKSBkZXNjcmlwdG9yCisJCQkJCS5nZXRGZWF0dXJlKG51bGwpOworCQkJcmV0dXJuIE1lc3NhZ2VzLmdldFN0cmluZyhmZWF0dXJlLmdldE5hbWUoKQorCQkJCQkrIFRUX1NVRkZJWCk7CisJCX0gLy8gZ2V0UHJvcGVydHlUb29sVGlwCisKKwkJLyoqCisJCSAqIEBwYXJhbSBkZXNjcmlwdG9yCisJCSAqIEByZXR1cm4gdGhlIE5MUydkIHRleHQgdGhhdCByZXByZXNlbnRzIHRoZSB1bml0cyBvZiB0aGUKKwkJICogICAgICAgICBwcm9wZXJ0eQorCQkgKi8KKwkJcHVibGljIFN0cmluZyBnZXRQcm9wZXJ0eVVuaXRzKAorCQkJCUlJdGVtUHJvcGVydHlEZXNjcmlwdG9yIGRlc2NyaXB0b3IpIHsKKwkJCWZpbmFsIEVTdHJ1Y3R1cmFsRmVhdHVyZSBmZWF0dXJlID0gKEVTdHJ1Y3R1cmFsRmVhdHVyZSkgZGVzY3JpcHRvcgorCQkJCQkuZ2V0RmVhdHVyZShudWxsKTsKKwkJCXJldHVybiBNZXNzYWdlcy5nZXRTdHJpbmcoZmVhdHVyZS5nZXROYW1lKCkKKwkJCQkJKyBVTklUX1NVRkZJWCk7CisJCX0gLy8gZ2V0UHJvcGVydHlVbml0cworCisJfSAKK30gCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkuZ3JhcGhnZW5lcmF0b3JzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL2dyYXBoZ2VuZXJhdG9ycy93aXphcmRzL01lc3NhZ2VzLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkuZ3JhcGhnZW5lcmF0b3JzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL2dyYXBoZ2VuZXJhdG9ycy93aXphcmRzL01lc3NhZ2VzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGJkMjYzNwotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5ncmFwaGdlbmVyYXRvcnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvZ3JhcGhnZW5lcmF0b3JzL3dpemFyZHMvTWVzc2FnZXMuamF2YQpAQCAtMCwwICsxLDQ3IEBACisvLyBNZXNzYWdlcy5qYXZhCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0udWkuZ3JhcGhnZW5lcmF0b3JzLndpemFyZHM7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgamF2YS51dGlsLk1pc3NpbmdSZXNvdXJjZUV4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLnV0aWwuUmVzb3VyY2VCdW5kbGU7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuQ29uc3RhbnRzOworCisKKy8qKgorICogVGhpcyBjbGFzcyBpcyB0aGUgUmVzb3VyY2UgQnVuZGxlIGZvciB0aGlzIHBhY2thZ2UuCisgKi8KK3B1YmxpYyBjbGFzcyBNZXNzYWdlcyB7CisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEJVTkRMRV9OQU1FID0gQ29uc3RhbnRzLklEX1JPT1QKKwkJCSsgIi51aS5ncmFwaGdlbmVyYXRvcnMud2l6YXJkcy5tZXNzYWdlcyI7IC8vJE5PTi1OTFMtMSQKKworCXByaXZhdGUgc3RhdGljIGZpbmFsIFJlc291cmNlQnVuZGxlIFJFU09VUkNFX0JVTkRMRSA9IFJlc291cmNlQnVuZGxlCisJCQkuZ2V0QnVuZGxlKEJVTkRMRV9OQU1FKTsKKworCXByaXZhdGUgTWVzc2FnZXMoKSB7CisJCS8vIGVtcHR5CisJfQorCisJLyoqCisJICogQHBhcmFtIGtleQorCSAqICAgICAgICAgICAgdGhlIGtleSBmb3IgdGhlIG1lc3NhZ2UKKwkgKiBAcmV0dXJuIHRoZSBzdHJpbmcgdGhhdCBtYXRjaGVzIHRoZSBrZXkKKwkgKi8KKwlwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRTdHJpbmcoU3RyaW5nIGtleSkgeworCQl0cnkgeworCQkJcmV0dXJuIFJFU09VUkNFX0JVTkRMRS5nZXRTdHJpbmcoa2V5KTsKKwkJfSBjYXRjaCAoTWlzc2luZ1Jlc291cmNlRXhjZXB0aW9uIGUpIHsKKwkJCXJldHVybiAnIScgKyBrZXkgKyAnISc7CisJCX0KKwl9IC8vIGdldFN0cmluZworfSAvLyBXaXphcmRNZXNzYWdlcwpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLmdyYXBoZ2VuZXJhdG9ycy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9ncmFwaGdlbmVyYXRvcnMvd2l6YXJkcy9OZXdHcmFwaFdpemFyZC5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLmdyYXBoZ2VuZXJhdG9ycy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9ncmFwaGdlbmVyYXRvcnMvd2l6YXJkcy9OZXdHcmFwaFdpemFyZC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJhYmMzMzMKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkuZ3JhcGhnZW5lcmF0b3JzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL2dyYXBoZ2VuZXJhdG9ycy93aXphcmRzL05ld0dyYXBoV2l6YXJkLmphdmEKQEAgLTAsMCArMSwyMzEgQEAKKy8vIE5ld0dyYXBoV2l6YXJkLmphdmEKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS51aS5ncmFwaGdlbmVyYXRvcnMud2l6YXJkczsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNywgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqYXZhLnRleHQuU2ltcGxlRGF0ZUZvcm1hdDsKK2ltcG9ydCBqYXZhLnV0aWwuQ2FsZW5kYXI7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLmNvbW1hbmRzLkFic3RyYWN0SGFuZGxlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLmNvbW1hbmRzLkV4ZWN1dGlvbkV2ZW50OworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUuY29tbWFuZHMuRXhlY3V0aW9uRXhjZXB0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUuY29tbWFuZHMuSUhhbmRsZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5TdHJ1Y3R1cmVkU2VsZWN0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLndpemFyZC5XaXphcmREaWFsb2c7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLlNURU1VUkk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5EdWJsaW5Db3JlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uSWRlbnRpZmlhYmxlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5HcmFwaDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguR3JhcGhQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhnZW5lcmF0b3JzLkdyYXBoR2VuZXJhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udWkud2l6YXJkcy5EdWJsaW5Db3JlUGFnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnVpLndpemFyZHMuTmV3SWRlbnRpZmlhYmxlUGFnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnVpLndpemFyZHMuTmV3SWRlbnRpZmlhYmxlV2l6YXJkOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udWkud2l6YXJkcy5OZXdTVEVNUHJvamVjdFdpemFyZDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnVpLndpemFyZHMuU1RFTVdpemFyZERpYWxvZzsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuU1dUOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5JV29ya2JlbmNoV2luZG93OworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLmhhbmRsZXJzLkhhbmRsZXJVdGlsOworCisvKioKKyAqIFRoaXMgY2xhc3MgaXMgYSB7QGxpbmsgTmV3SWRlbnRpZmlhYmxlV2l6YXJkfSBmb3IgdGhhdCBjcmVhdGVzIG5ldyBTVEVNCisgKiB7QGxpbmsgR3JhcGh9cy4KKyAqLworcHVibGljIGNsYXNzIE5ld0dyYXBoV2l6YXJkIGV4dGVuZHMgTmV3SWRlbnRpZmlhYmxlV2l6YXJkIHsKKworCXByaXZhdGUgTmV3R3JhcGhQYWdlIG5ncCA9IG51bGw7CisKKwkKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0udWkud2l6YXJkcy5OZXdJZGVudGlmaWFibGVXaXphcmQjZ2V0V2l6YXJkVGl0bGUoKQorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCBTdHJpbmcgZ2V0V2l6YXJkVGl0bGUoKSB7CisJCXJldHVybiBNZXNzYWdlcy5nZXRTdHJpbmcoIk5HcmFwaFdpei53aXphcmRfdGl0bGUiKTsgLy8kTk9OLU5MUy0xJAorCX0gLy8gZ2V0V2l6YXJkVGl0bGUKKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS51aS53aXphcmRzLk5ld0lkZW50aWZpYWJsZVdpemFyZCNjcmVhdGVOZXdJZGVudGlmaWFibGVQYWdlKCkKKwkgKi8KKwlAU3VwcHJlc3NXYXJuaW5ncygibmxzIikKKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgTmV3SWRlbnRpZmlhYmxlUGFnZSBjcmVhdGVOZXdJZGVudGlmaWFibGVQYWdlKCkgeworCQluZ3AgPSBuZXcgTmV3R3JhcGhQYWdlKE1lc3NhZ2VzCisJCQkJLmdldFN0cmluZygiTkdyYXBoV2l6LnBhZ2VfdGl0bGUiKSwgdGhpcyk7IC8vJE5PTi1OTFMtMSQKKwkJbmdwLnNldFRpdGxlKE1lc3NhZ2VzLmdldFN0cmluZygiTkdyYXBoV2l6LnBhZ2VfdGl0bGUiKSk7IC8vJE5PTi1OTFMtMSQKKwkJbmdwLnNldERlc2NyaXB0aW9uKE1lc3NhZ2VzCisJCQkJLmdldFN0cmluZygiTkdyYXBoV2l6LnBhZ2VfZGVzY3JpcHRpb24iKSk7IC8vJE5PTi1OTFMtMSQKKworCQl0aGlzLnNldEhlbHBDb250ZXh0SWQoIm9yZy5lY2xpcHNlLnN0ZW0uZG9jLm5ld2dyYXBoX2NvbnRleHRpZCIpOworCQlyZXR1cm4gbmdwOworCisJfSAvLyBjcmVhdGVOZXdJZGVudGlmaWFibGVQYWdlCisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0udWkud2l6YXJkcy5OZXdJZGVudGlmaWFibGVXaXphcmQjY3JlYXRlRHVibGluQ29yZVBhZ2UoKQorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCBEdWJsaW5Db3JlUGFnZSBjcmVhdGVEdWJsaW5Db3JlUGFnZSgpIHsKKwkJCisJCXJldHVybiBuZXcgRHVibGluQ29yZVBhZ2UoKSB7CisJCQlAU3VwcHJlc3NXYXJuaW5ncygibmxzIikKKwkJCUBPdmVycmlkZQorCQkJcHJvdGVjdGVkIHZvaWQgaW5pdGlhbGl6ZURDQXR0cmlidXRlcygpIHsKKwkJCQlzdXBlci5pbml0aWFsaXplRENBdHRyaWJ1dGVzKCk7CisJCQkJZm9ybWF0LnNldFRleHQoR3JhcGhQYWNrYWdlLmVOU19VUkkpOworCQkJCWZvcm1hdC5zZXRFbmFibGVkKGZhbHNlKTsKKwkJCQl0eXBlLnNldFRleHQoU1RFTVVSSS5HUkFQSF9UWVBFX1VSSS50b1N0cmluZygpKTsKKwkJCQl0eXBlLnNldEVuYWJsZWQoZmFsc2UpOworCQkJCQorCQkJCUNhbGVuZGFyIGMgPSBDYWxlbmRhci5nZXRJbnN0YW5jZSgpOworCQkgICAgICAgIFNpbXBsZURhdGVGb3JtYXQgZGF0ZUZvcm1hdHRlciA9IG5ldyBTaW1wbGVEYXRlRm9ybWF0KCJ5eXl5LU1NLWRkIik7IAorCQkgICAgICAgIFN0cmluZyBkYXRlU3RyID0gZGF0ZUZvcm1hdHRlci5mb3JtYXQoYy5nZXRUaW1lKCkpOworCQkKKwkJCQl0aXRsZVRleHRGaWVsZC5zZXRUZXh0KE1lc3NhZ2VzLmdldFN0cmluZygiTkdHV2l6LkRDX1RJVExFIikpOworCQkJCXRpdGxlVGV4dEZpZWxkLnNldEVuYWJsZWQodHJ1ZSk7CisJCQkJCisJCQkJZGVzY3JpcHRpb25UZXh0RmllbGQuc2V0VGV4dChNZXNzYWdlcy5nZXRTdHJpbmcoIk5HR1dpei5EQ19ERVNDUklQVElPTiIpKTsKKwkJCQlkZXNjcmlwdGlvblRleHRGaWVsZC5zZXRFbmFibGVkKHRydWUpOworCQkJCQorCQkJCS8vIFRPRE8gdGhlIFNPVVJDRSBzaG91bGQgcmVhbGx5IHJldHVybiB0aGUgc3BlY2lmaWMgZ2VuZXJhdG9yIENMQVNTIGUuZy4sIFNxdWFyZSBmb3IgU3F1YXJlCisJCQkJc291cmNlLnNldFRleHQoTWVzc2FnZXMuZ2V0U3RyaW5nKCJOR0dXaXouRENfU09VUkNFIikpOworCQkJCXNvdXJjZS5zZXRFbmFibGVkKHRydWUpOworCQkJCWRhdGUuc2V0VGV4dChkYXRlU3RyKTsKKwkJCQlkYXRlLnNldEVuYWJsZWQodHJ1ZSk7CisKKworCQkJCS8vIEpISyBnZXQgdGhlIHByZXNldCBEdWJsaW4gQ29yZSBmaWVsZHMgZnJvbSB0aGUgcGx1Z2luLnhtbAorCQkJCWZpbmFsIEdyYXBoR2VuZXJhdG9yIGdyYXBoR2VuZXJhdG9yID0gbmdwLmdldFNlbGVjdGVkR3JhcGhHZW5lcmF0b3IoKTsKKwkJCQlEdWJsaW5Db3JlIHBsdWdnaW5EdWJsaW5Db3JlID0gZ3JhcGhHZW5lcmF0b3IuZ2V0RHVibGluQ29yZSgpOworCQkJCXRoaXMudXBkYXRlRHVibGluQ29yZVBhZ2UocGx1Z2dpbkR1YmxpbkNvcmUpOworCQkJCQorCQkJCQorCQkJfQorCQl9OworCX0gLy8gY3JlYXRlRHVibGluQ29yZVBhZ2UKKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS51aS53aXphcmRzLk5ld0lkZW50aWZpYWJsZVdpemFyZCNjcmVhdGVJZGVudGlmaWFibGUoKQorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCBJZGVudGlmaWFibGUgY3JlYXRlSWRlbnRpZmlhYmxlKCkgeworCQlmaW5hbCBHcmFwaCByZXRWYWx1ZSA9IG5ncC5nZXRHcmFwaCgpOworCQlyZXRWYWx1ZS5zZXREdWJsaW5Db3JlKG5ld0R1YmxpbkNvcmVQYWdlLmNyZWF0ZUR1YmxpbkNvcmUoKSk7CisJCQorCQlyZXR1cm4gcmV0VmFsdWU7CisJfSAvLyBjcmVhdGVJZGVudGlmaWFibGUKKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS51aS53aXphcmRzLk5ld0lkZW50aWZpYWJsZVdpemFyZCNnZXRTZXJpYWxpemF0aW9uRm9sZGVyTmFtZSgpCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIFN0cmluZyBnZXRTZXJpYWxpemF0aW9uRm9sZGVyTmFtZSgpIHsKKwkJcmV0dXJuIE5ld1NURU1Qcm9qZWN0V2l6YXJkLkdSQVBIU19GT0xERVJfTkFNRTsKKwl9CisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0udWkud2l6YXJkcy5OZXdJZGVudGlmaWFibGVXaXphcmQjZ2V0U2VyaWFsaXphdGlvbkZpbGVOYW1lRXh0ZW5zaW9uKCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgU3RyaW5nIGdldFNlcmlhbGl6YXRpb25GaWxlTmFtZUV4dGVuc2lvbigpIHsKKwkJcmV0dXJuIEdyYXBoUGFja2FnZS5lTkFNRTsKKwl9IC8vIGdldFNlcmlhbGl6YXRpb25GaWxlTmFtZUV4dGVuc2lvbgorCisJLyoqCisJICogVGhpcyBjbGFzcyBpcyBhIHtAbGluayBOZXdJZGVudGlmaWFibGVQYWdlfSB0aGF0IGNvbnRhaW5zIHRoZSBpbnRlcmZhY2UKKwkgKiBjb21wb25lbnRzIG5lZWRlZCB0byBkZWZpbmUgYSBuZXcge0BsaW5rIEdyYXBofS4KKwkgKi8KKwlwcm90ZWN0ZWQgc3RhdGljIGNsYXNzIE5ld0dyYXBoUGFnZSBleHRlbmRzIE5ld0lkZW50aWZpYWJsZVBhZ2UgeworCisJCUdyYXBoR2VuZXJhdG9yRGVmaW5pdGlvbkNvbnRyb2wgZ2dkYyA9IG51bGw7CisJCU5ld0dyYXBoV2l6YXJkIHBhcmVudFdpemFyZCA9IG51bGw7CisKKwkJLyoqCisJCSAqIEBwYXJhbSBwYWdlTmFtZQorCQkgKiBAcGFyYW0gbmd3IHRoZSBOZXdHcmFwaFdpemFyZAorCQkgKi8KKwkJcHJvdGVjdGVkIE5ld0dyYXBoUGFnZShmaW5hbCBTdHJpbmcgcGFnZU5hbWUsIE5ld0dyYXBoV2l6YXJkIG5ndykgeworCQkJc3VwZXIocGFnZU5hbWUpOworCQkJcGFyZW50V2l6YXJkID0gbmd3OworCQl9CisJCQorCQlHcmFwaEdlbmVyYXRvciBnZXRTZWxlY3RlZEdyYXBoR2VuZXJhdG9yKCkgeworCQkJcmV0dXJuIGdnZGMuZ2V0U2VsZWN0ZWRHcmFwaEdlbmVyYXRvcigpOworCQl9IC8vIGdldFNlbGVjdGVkRGlzZWFzZU1vZGVsCisKKwkJLyoqCisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS51aS53aXphcmRzLk5ld0lkZW50aWZpYWJsZVdpemFyZC5OZXdJZGVudGlmaWFibGVQYWdlI2dldERDRGVzY3JpcHRpb24oKQorCQkgKi8KKwkJQE92ZXJyaWRlCisJCXByb3RlY3RlZCBTdHJpbmcgZ2V0RENEZXNjcmlwdGlvbigpIHsKKwkJCS8vIExlYXZlIGRlc2NyaXB0aW9uL3RpdGxlIGJsYW5rCisJCQlyZXR1cm4gIiI7IC8vJE5PTi1OTFMtMSQKKy8vCQkJcmV0dXJuIE1lc3NhZ2VGb3JtYXQuZm9ybWF0KE1lc3NhZ2VzCisvLwkJCQkJLmdldFN0cmluZygiTkdyYXBoV2l6LkRDX0RFU0NSSVBUSU9OIiksIC8vJE5PTi1OTFMtMSQKKy8vCQkJCQluZXcgT2JqZWN0W10geyBzZXJpYWxpemF0aW9uRmlsZU5hbWVGaWVsZC5nZXRUZXh0KCkgfSk7CisJCX0gLy8gZ2V0RENEZXNjcmlwdGlvbgorCisJCUBPdmVycmlkZQorCQlwcm90ZWN0ZWQgQ29tcG9zaXRlIGNyZWF0ZVNwZWNpZmljQ29tcG9zaXRlKGZpbmFsIENvbXBvc2l0ZSBwYXJlbnQpIHsKKwkJCWdnZGMgPSBuZXcgR3JhcGhHZW5lcmF0b3JEZWZpbml0aW9uQ29udHJvbChwYXJlbnQsIFNXVC5OT05FLAorCQkJCQlwcm9qZWN0VmFsaWRhdG9yLCB0aGlzLmdldFNlbGVjdGVkUHJvamVjdCgpLCBwYXJlbnRXaXphcmQpOworCQkJcmV0dXJuIGdnZGM7CisJCX0gLy8gY3JlYXRlU3BlY2lmaWNDb21wb3NpdGUKKworCQlAT3ZlcnJpZGUKKwkJcHJvdGVjdGVkIGJvb2xlYW4gdmFsaWRhdGVQYWdlKCkgeworCQkJYm9vbGVhbiByZXRWYWx1ZSA9IHN1cGVyLnZhbGlkYXRlUGFnZSgpOworCQkJaWYgKHJldFZhbHVlKSB7CisJCQkJc2V0RXJyb3JNZXNzYWdlKG51bGwpOworCQkJCXJldFZhbHVlID0gZ2dkYy52YWxpZGF0ZSgpOworCQkJCS8vIEVycm9yPworCQkJCWlmICghcmV0VmFsdWUpIHsKKwkJCQkJLy8gWWVzCisJCQkJCXNldEVycm9yTWVzc2FnZShnZ2RjLmdldEVycm9yTWVzc2FnZSgpKTsKKwkJCQl9IC8vIGlmCisJCQl9CisJCQlyZXR1cm4gcmV0VmFsdWU7CisJCX0gLy8gdmFsaWRhdGVQYWdlCisKKwkJR3JhcGggZ2V0R3JhcGgoKSB7CisJCQlyZXR1cm4gZ2dkYy5nZXRHcmFwaCgpOworCQl9IC8vIGdldFNlbGVjdGVkRGlzZWFzZU1vZGVsCisKKwl9IC8vIE5ld0dyYXBoUGFnZQorCisJCisJCisJLyoqCisJICogVGhpcyBjbGFzcyBpcyBhIHtAbGluayBJSGFuZGxlcn0gZm9yIHRoZSBjb21tYW5kIHRoYXQgY3JlYXRlcyBhCisJICoge0BsaW5rIE5ld0dyYXBoV2l6YXJkfQorCSAqLworCXB1YmxpYyBzdGF0aWMgY2xhc3MgTmV3R3JhcGhXaXphcmRDb21tYW5kSGFuZGxlciBleHRlbmRzIEFic3RyYWN0SGFuZGxlcgorCQkJaW1wbGVtZW50cyBJSGFuZGxlciB7CisKKwkJLyoqCisJCSAqIEBzZWUgb3JnLmVjbGlwc2UuY29yZS5jb21tYW5kcy5BYnN0cmFjdEhhbmRsZXIjZXhlY3V0ZShvcmcuZWNsaXBzZS5jb3JlLmNvbW1hbmRzLkV4ZWN1dGlvbkV2ZW50KQorCQkgKi8KKwkJcHVibGljIE9iamVjdCBleGVjdXRlKGZpbmFsIEV4ZWN1dGlvbkV2ZW50IGV4ZWN1dGlvbkV2ZW50KQorCQkJCXRocm93cyBFeGVjdXRpb25FeGNlcHRpb24geworCQkJZmluYWwgSVdvcmtiZW5jaFdpbmRvdyB3aW5kb3cgPSBIYW5kbGVyVXRpbAorCQkJCQkuZ2V0QWN0aXZlV29ya2JlbmNoV2luZG93Q2hlY2tlZChleGVjdXRpb25FdmVudCk7CisJCQlmaW5hbCBOZXdHcmFwaFdpemFyZCB3aXphcmQgPSBuZXcgTmV3R3JhcGhXaXphcmQoKTsKKwkJCXdpemFyZC5pbml0KHdpbmRvdy5nZXRXb3JrYmVuY2goKSwgU3RydWN0dXJlZFNlbGVjdGlvbi5FTVBUWSk7CisJCQlmaW5hbCBXaXphcmREaWFsb2cgd2l6YXJkRGlhbG9nID0gbmV3IFNURU1XaXphcmREaWFsb2cod2luZG93CisJCQkJCS5nZXRTaGVsbCgpLCB3aXphcmQpOworCQkJd2l6YXJkRGlhbG9nLm9wZW4oKTsKKwkJCXJldHVybiBudWxsOworCQl9IC8vIGV4ZWN1dGUKKwl9IC8vIE5ld0dyYXBoV2l6YXJkQ29tbWFuZEhhbmRsZXIKKworfSAvLyBOZXdHcmFwaFdpemFyZApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5ncmFwaGdlbmVyYXRvcnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvZ3JhcGhnZW5lcmF0b3JzL3dpemFyZHMvbWVzc2FnZXMucHJvcGVydGllcyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5ncmFwaGdlbmVyYXRvcnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvZ3JhcGhnZW5lcmF0b3JzL3dpemFyZHMvbWVzc2FnZXMucHJvcGVydGllcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYzJkOGFlCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLmdyYXBoZ2VuZXJhdG9ycy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9ncmFwaGdlbmVyYXRvcnMvd2l6YXJkcy9tZXNzYWdlcy5wcm9wZXJ0aWVzCkBAIC0wLDAgKzEsMTA3IEBACisjIFdpemFyZE1lc3NhZ2VzLnByb3BlcnRpZXMKKyMKKyMvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIyAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyMgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisjICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisjICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyMgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorIyAqCisjICogQ29udHJpYnV0b3JzOgorIyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworIyBHcmFwaCBXaXphcmQKK05HcmFwaFdpei53aXphcmRfdGl0bGUgPSBOZXcgR3JhcGgKK05HcmFwaFdpei5wYWdlX3RpdGxlID0gR3JhcGgKK05HcmFwaFdpei5wYWdlX2Rlc2NyaXB0aW9uID0gQ3JlYXRlIGEgbmV3IFNURU0gR3JhcGggaW4gYSBwcm9qZWN0LgorTkdyYXBoV2l6LkRDX0RFU0NSSVBUSU9OID0gR3JhcGggInswfSIKK05HR1dpei5EQ19ERVNDUklQVElPTiA9IEdlbmVyYXRlZCBHcmFwaAorTkdHV2l6LkRDX1RJVExFID0gR2VuZXJhdGVkIGdyYXBoCitOR0dXaXouRENfU09VUkNFID0gR2VuZXJhdGVkCisKKworIyBHcmFwaCBHZW5lcmF0b3JzCitHR0RDLjA9U291cmNlCitHR0RDLjI9Y2xhc3MKK0dHREMuMz1Qcm9ibGVtIGNyZWF0aW5nIEdyYXBoIEdlbmVyYXRvciBpbnN0YW5jZQorWUVTID0gWWVzCitOTyA9IE5vCisKKworCisjIExhdHRpY2UgZ3JhcGggZ2VuZXJhdG9yCit4U2l6ZSA9IFggU2l6ZQoreVNpemUgPSBZIFNpemUKK3hTaXplVU5JVCA9IFVuaXRzCit5U2l6ZVVOSVQgPSBVbml0cworeFNpemVUVCA9IE51bWJlciBvZiBncmlkcyBhbG9uZyBYIGF4aXMKK3lTaXplVFQgPSBOdW1iZXIgb2YgZ3JpZHMgYWxvbmcgWSBheGlzCit1c2VOZWFyZXN0TmVpZ2hib3JzID0gTmVhcmVzdCBOZWlnaGJvcnMKK3VzZU5lYXJlc3ROZWlnaGJvcnNVTklUID0gCit1c2VOZWFyZXN0TmVpZ2hib3JzVFQgPSBDb25uZWN0IGdyaWRzIHdpdGggbmVhcmVzdCBuZWlnaGJvciBlZGdlcwordXNlTmV4dE5lYXJlc3ROZWlnaGJvcnMgPSBOZXh0IE5lYXJlc3QgTmVpZ2hib3JzCit1c2VOZXh0TmVhcmVzdE5laWdoYm9yc1VOSVQgPSAKK3VzZU5leHROZWFyZXN0TmVpZ2hib3JzVFQgPSBDb25uZWN0IGdyaWRzIHVzaW5nIG5leHQgbmVhcmVzdCBuZWlnaGJvciBlZGdlcworcGVyaW9kaWNCb3VuZGFyaWVzID0gUGVyaW9kaWMgQm91bmRhcmllcworcGVyaW9kaWNCb3VuZGFyaWVzVU5JVCA9IAorcGVyaW9kaWNCb3VuZGFyaWVzVFQgPSBVc2UgUGVyaW9kaWMgQm91bmRhcmllcworYXJlYSA9IEFyZWEKK2FyZWFVTklUID0ga21eMgorYXJlYVRUID0gVGhlIGFyZWEgKGluIGttXjIpIG9mIGVhY2ggZ3JpZAorCisjUGxhdGVDYXJyZWUgZ2VuZXJhdG9yCithbmd1bGFyU3RlcCA9IEFuZ2x1bGFyIEludGVydmFsCithbmd1bGFyU3RlcFVOSVQgPSBkZWdyZWVzCithbmd1bGFyU3RlcFRUID0gRXF1aS1hbmd1bGFyIHN0ZXAgKGludGVnZXIgZGVncmVlcykKKworcmFkaXVzID0gUmFkaXVzIG9mIFNwaGVyZQorcmFkaXVzVU5JVCA9IGttCityYWRpdXNUVCA9IGUuZy4sIEVhcnRoIFJhZGl1cworCisjTWlncmF0aW9uIGVkZ2UgZ2VuZXJhdG9yCitsb2NhdGlvbiA9IExvY2F0aW9uCittaWdyYXRpb25SYXRlID0gTWlncmF0aW9uIFJhdGUKK21pZ3JhdGlvblJhdGVVTklUPUZyYWN0aW9uIG9mIHBvcHVsYXRpb24vVFAKK21pZ3JhdGlvblJhdGVUVD1TcGVjaWZ5IGEgbWlncmF0aW9uIHJhdGUgZm9yIHRoZSBlZGdlcyBnZW5lcmF0ZWQKK3BvcHVsYXRpb249UG9wdWxhdGlvbgorcG9wdWxhdGlvblVOSVQ9Citwb3B1bGF0aW9uVFQ9VGhlIHBvcHVsYXRpb24gdG8gbWlncmF0ZQorCisjUGFqZWtOZXQgZ2VuZXJhdG9yCitkYXRhRmlsZV9uZXQgPSBQYWplayBGaWxlCitkYXRhRmlsZV9uZXRUVCA9IENob29zZSBhIGZpbGUgaW4gUGFqZWsgZm9ybWF0CithcmVhID0gRGVmYXVsdCBBcmVhCithcmVhVFQgPSBEZWZhdWx0IEFyZWEgb2YgZWFjaCBub2RlIGlmIHVuZGVmaW5lZAorYXJlYVVOSVQgPSBrbV4yCitjb2xBcmVhID0gQXJlYQorY29sQXJlYVRUID0gRmllbGQgdGhhdCBkZWZpbmVzIHRoZSBpbmRpdmlkdWFsIGFyZWEgZm9yIGVhY2ggbm9kZS4gSWYgbWlzc2luZyB0aGUgZGVmYXVsdCBhcmVhIGlzIHVzZWQuIFZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuIDQgYXMgdGhlIGZpcnN0IGZvdXIgY29sdW1ucyBhcmUgcHJlZGVmaW5lZC4KK2NvbEFyZWFVTklUID0KK2NvbnRhaW5lciA9IENvbnRhaW5pbmcgTG9jYXRpb24KK2NvbnRhaW5lclRUID0gU3BlY2lmeSBub2RlIHRoYXQgY29udGFpbnMgUEFKRUsgbm9kZXMKK3NjYWxpbmdGYWN0b3IgPSBTY2FsaW5nIEZhY3Rvcgorc2NhbGluZ0ZhY3RvclRUID0gU3BlY2lmeSBtYWduaWZpY2F0aW9uIG9mIHRoZSBQQUpFSyBjb29yZGluYXRlcyAKK3NjYWxpbmdGYWN0b3JVTklUID0gCitmaXQgPSBmaXQgaW50byBjb250YWluaW5nIGFyZWEgCitmaXRVTklUID0KK2VuZm9yY2VDb250YWlubWVudCA9IGRyYXcgY29udGFpbm1lbnQgZWRnZXMgZnJvbSBcbm91dGx5aW5nIG5vZGVzCitlbmZvcmNlQ29udGFpbm1lbnRUVCA9CitlbmZvcmNlQ29udGFpbm1lbnRVTklUID0KKyNFcnJvcnMKK05HR1dpekVycjEgPSBYU2l6ZSBjYW5ub3QgYmUgZW1wdHkKK05HR1dpekVycjIgPSBJbnZhbGlkIFhTaXplIHZhbHVlCitOR0dXaXpFcnIzID0gWVNpemUgY2Fubm90IGJlIGVtcHR5CitOR0dXaXpFcnI0ID0gSW52YWxpZCBZU2l6ZSB2YWx1ZQorTkdHV2l6RXJyNSA9IE1pc3NpbmcgcG9wdWxhdGlvbiBpZGVudGlmaWVyCitOR0dXaXpFcnI2ID0gSW52YWxpZCByYXRlCitOR0dXaXpFcnI3ID0gUmF0ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAwCitOR0dXaXpFcnI4ID0gQXJlYSByZXF1aXJlZAorTkdHV2l6RXJyOSA9IEludmFsaWQgYXJlYQorTkdHV2l6RXJyMTAgPSBUaGUgdG90YWwgYXJlYSBvZiB0aGUgZ3JhcGggaXMgdG9vIGxhcmdlLCByZWR1Y2UgdGhlIHNpemUgb3IgYXJlYQorTkdHV2l6RXJyMTEgPSBJbnZhbGlkIE5vbnplcm8gSW50ZWdlciBWYWx1ZQorTkdHV2l6RXJyMTIgPSBJbnZhbGlkIE5vbnplcm8gRG91YmxlIFZhbHVlCitOR0dXaXpFcnIxMyA9IEZpbGUgY2Fubm90IGJlIGZvdW5kCitOR0dXaXpFcnIxNCA9IERlZmF1bHQgQXJlYSByZXF1aXJlZAorCisKKwpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLmdyYXBoZ2VuZXJhdG9ycy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9ncmFwaGdlbmVyYXRvcnMvd2l6YXJkcy9tZXNzYWdlc19kZS5wcm9wZXJ0aWVzIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLmdyYXBoZ2VuZXJhdG9ycy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9ncmFwaGdlbmVyYXRvcnMvd2l6YXJkcy9tZXNzYWdlc19kZS5wcm9wZXJ0aWVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY4OWM2ZWIKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkuZ3JhcGhnZW5lcmF0b3JzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL2dyYXBoZ2VuZXJhdG9ycy93aXphcmRzL21lc3NhZ2VzX2RlLnByb3BlcnRpZXMKQEAgLTAsMCArMSwxMDcgQEAKKyMgV2l6YXJkTWVzc2FnZXMucHJvcGVydGllcworIworIy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorIyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyMgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyMgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorIyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisjICoKKyMgKiBDb250cmlidXRvcnM6CisjICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorIyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjIEdyYXBoIFdpemFyZAorTkdyYXBoV2l6LndpemFyZF90aXRsZT1OZXVlIEdyYWZpaworTkdyYXBoV2l6LnBhZ2VfdGl0bGU9R3JhcGgKK05HcmFwaFdpei5wYWdlX2Rlc2NyaXB0aW9uPU5ldWVuIFNURU0gR3JhcGggaW4gZWluZW0gUHJvamVrdCBlcnN0ZWxsZW4KK05HcmFwaFdpei5EQ19ERVNDUklQVElPTj1HcmFwaCAiezB9IgorTkdHV2l6LkRDX0RFU0NSSVBUSU9OPUVyc3RlbGx0ZXIgR3JhcGgKK05HR1dpei5EQ19USVRMRT1FcnN0ZWxsdGVyIEdyYXBoCitOR0dXaXouRENfU09VUkNFPUVyc3RlbGx0CisKKworIyBHcmFwaCBHZW5lcmF0b3JzCitHR0RDLjA9UXVlbGxlCitHR0RDLjI9S2xhc3NlCitHR0RDLjM9UHJvYmxlbSBiZWltIEVyc3RlbGxlbiB2b24gR3JhcGgtR2VuZXJhdG9yLUluc3RhbnoKK1lFUz1KYQorTk89TmVpbgorCisKKworIyBMYXR0aWNlIGdyYXBoIGdlbmVyYXRvcgoreFNpemU9WC1Hclx1MDBmNlx1MDBkZmUKK3lTaXplPVktR3JcdTAwZjZcdTAwZGZlCit4U2l6ZVVOSVQ9RWluaGVpdGVuCit5U2l6ZVVOSVQ9RWluaGVpdGVuCit4U2l6ZVRUPUFuemFobCBkZXIgR2l0dGVyIGVudGxhbmcgZGVyIFgtQWNoc2UKK3lTaXplVFQ9QW56YWhsIGRlciBHaXR0ZXIgZW50bGFuZyBkZXIgWS1BY2hzZQordXNlTmVhcmVzdE5laWdoYm9ycz1OXHUwMGU0Y2hzdGUgTmFjaGJhcm4KK3VzZU5lYXJlc3ROZWlnaGJvcnNVTklUPQordXNlTmVhcmVzdE5laWdoYm9yc1RUPUdpdHRlciB2ZXJiaW5kZW4gbWl0IFx1MjAxZU5cdTAwZTRjaHN0ZSBOYWNoYmFyblx1MjAxYy1LYW50ZW4KK3VzZU5leHROZWFyZXN0TmVpZ2hib3JzPU5cdTAwZTRjaHN0ZSBOXHUwMGU0Y2hzdGUgTmFjaGJhcm4KK3VzZU5leHROZWFyZXN0TmVpZ2hib3JzVU5JVD0KK3VzZU5leHROZWFyZXN0TmVpZ2hib3JzVFQ9R2l0dGVyIHZlcmJpbmRlbiBtaXRoaWxmZSBcdTIwMWVOXHUwMGU0Y2hzdGUgTmFjaGJhcm5cdTIwMWMtS2FudGVuCitwZXJpb2RpY0JvdW5kYXJpZXM9UGVyaW9kaXNjaGUgR3JlbnplbgorcGVyaW9kaWNCb3VuZGFyaWVzVU5JVD0KK3BlcmlvZGljQm91bmRhcmllc1RUPVBlcmlvZGlzY2hlIEdyZW56ZW4gYmVudXR6ZW4KK2FyZWE9RmxcdTAwZTRjaGUKK2FyZWFVTklUPWttXjIKK2FyZWFUVD1EaWUgRmxcdTAwZTRjaGUgKGluIGttIF4gMikgZWluZXMgZWluemVsbmVuIEdpdHRlcnMKKworI1BsYXRlQ2FycmVlIGdlbmVyYXRvcgorYW5ndWxhclN0ZXA9V2lua2VsaW50ZXJ2YWwKK2FuZ3VsYXJTdGVwVU5JVD1HcmFkCithbmd1bGFyU3RlcFRUPUtvbnN0YW50ZXIgV2lua2Vsc2Nocml0dCAoR2FuenphaGxpZyBpbiBHcmFkKQorCityYWRpdXM9UmFkaXVzIGRlciBLdWdlbAorcmFkaXVzVU5JVD1rbQorcmFkaXVzVFQ9ei5CLiBFcmRyYWRpdXMKKworI01pZ3JhdGlvbiBlZGdlIGdlbmVyYXRvcgorbG9jYXRpb249T3J0CittaWdyYXRpb25SYXRlPU1pZ3JhdGlvbnNyYXRlCittaWdyYXRpb25SYXRlVU5JVD1CcnVjaHRlaWwgZGVyIEJldlx1MDBmNmxrZXJ1bmcgLyBUUAorbWlncmF0aW9uUmF0ZVRUPU1pZ3JhdGlvbnNyYXRlIGZcdTAwZmNyIGRpZSBlcnpldWd0ZW4gS2FudGVuIGFuZ2ViZW4KK3BvcHVsYXRpb249QmV2XHUwMGY2bGtlcnVuZworcG9wdWxhdGlvblVOSVQ9Citwb3B1bGF0aW9uVFQ9RGllIG1pZ3JpZXJlbmRlIEJldlx1MDBmNmxrZXJ1bmcKKworI1BhamVrTmV0IGdlbmVyYXRvcgorZGF0YUZpbGVfbmV0PVBhamVrIERhdGVpCitkYXRhRmlsZV9uZXRUVD1EYXRlaSBpbiBQYWplayBGb3JtYXQgd1x1MDBlNGhsZW4KK2FyZWE9U3RhbmRhcmR3ZXJ0IGZcdTAwZmNyIEdlYmlldAorYXJlYVRUPVN0YW5kYXJkd2VydCBmXHUwMGZjciBHZWJpZXQgZGVyIGVpbnplbG5lbiBLbm90ZW4sIHdlbm4gbmljaHQgZGVmaW5pZXJ0CithcmVhVU5JVD1rbV4yCitjb2xBcmVhPUZsXHUwMGU0Y2hlCitjb2xBcmVhVFQ9RmVsZCwgZGFzcyBkZW4gQmVyZWljaCBmXHUwMGZjciBqZWRlbiBLbm90ZW4gZGVmaW5pZXJ0LiBXZW5uIGZlaGxlbmQgd2lyZCBkZXIgU3RhbmRhcmQtQmVyZWljaCB2ZXJ3ZW5kZXQuIERlciBXZXJ0IG11c3MgZ3JcdTAwZjZcdTAwZGZlciBhbHMgNCBzZWluLCBkYSBkaWUgZXJzdGVuIHZpZXIgU3BhbHRlbiB2b3JnZWdlYmVuIHNpbmQuCitjb2xBcmVhVU5JVD0KK2NvbnRhaW5lcj1FbnRoXHUwMGU0bHQgT3J0Citjb250YWluZXJUVD1Lbm90ZW4gYW5nZWJlbiwgd2VsY2hlciBQQUpFSyBLbm90ZW4gZW50aFx1MDBlNGx0CitzY2FsaW5nRmFjdG9yPVNrYWxpZXJ1bmdzZmFrdG9yCitzY2FsaW5nRmFjdG9yVFQ9VmVyZ3JcdTAwZjZcdTAwZGZlcnVuZyBkZXMgUEFKRUsgS29vcmRpbmF0ZW4gYW5nZWJlbgorc2NhbGluZ0ZhY3RvclVOSVQ9CitmaXQ9aW4gYmVpbmhhbHRlbmRlIEZsXHUwMGU0Y2hlIGFucGFzc2VuCitmaXRVTklUPQorZW5mb3JjZUNvbnRhaW5tZW50PUNvbnRhaW5tZW50LUthbnRlbiB6aWVoZW4gdm9uIFxub3V0bHlpbmcgS25vdGVuCitlbmZvcmNlQ29udGFpbm1lbnRUVD0KK2VuZm9yY2VDb250YWlubWVudFVOSVQ9CisjRXJyb3JzCitOR0dXaXpFcnIxPVgtR3JcdTAwZjZcdTAwZGZlIGRhcmYgbmljaHQgbGVlciBzZWluCitOR0dXaXpFcnIyPVVuZ1x1MDBmY2x0aWdlciBYU2l6ZSBXZXJ0CitOR0dXaXpFcnIzPVktR3JcdTAwZjZcdTAwZGZlIGRhcmYgbmljaHQgbGVlciBzZWluCitOR0dXaXpFcnI0PVVuZ1x1MDBmY2x0aWdlciBZU2l6ZSBXZXJ0CitOR0dXaXpFcnI1PUJldlx1MDBmNmxrZXJ1bmdzYmV6ZWljaG5lciBmZWhsdC4KK05HR1dpekVycjY9VW5nXHUwMGZjbHRpZ2UgUmF0ZQorTkdHV2l6RXJyNz1SYXRlIG11c3MgZ3JcdTAwZjZcdTAwZGZlciBhbHMgMCBzZWluCitOR0dXaXpFcnI4PUZsXHUwMGU0Y2hlIGVyZm9yZGVybGljaAorTkdHV2l6RXJyOT1VbmdcdTAwZmNsdGlnZXIgQmVyZWljaAorTkdHV2l6RXJyMTA9RGllIGdlc2FtdGUgRmxcdTAwZTRjaGUgZGVzIEdyYXBoZW4genUgZ3JvXHUwMGRmIGlzdCwgcmVkdXppZXJlbiBTaWUgZGllIEdyXHUwMGY2XHUwMGRmZSBvZGVyIEZsXHUwMGU0Y2hlCitOR0dXaXpFcnIxMT1VbmdcdTAwZmNsdGlnZXIgTmljaHRudWxsIEludGVnZXIgV2VydAorTkdHV2l6RXJyMTI9VW5nXHUwMGZjbHRpZ2VyIE5pY2h0bnVsbCBEb3VibGUgV2VydAorTkdHV2l6RXJyMTM9RGF0ZWkga2FubiBuaWNodCBnZWZ1bmRlbiB3ZXJkZW4KK05HR1dpekVycjE0PVN0YW5kYXJkd2VydCBmXHUwMGZjciBHZWJpZXQgZXJmb3JkZXJsaWNoCisKKworCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkuZ3JhcGhnZW5lcmF0b3JzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL2dyYXBoZ2VuZXJhdG9ycy93aXphcmRzL21lc3NhZ2VzX2tyLnByb3BlcnRpZXMgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkuZ3JhcGhnZW5lcmF0b3JzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL2dyYXBoZ2VuZXJhdG9ycy93aXphcmRzL21lc3NhZ2VzX2tyLnByb3BlcnRpZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmNkYzg2NwotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5ncmFwaGdlbmVyYXRvcnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvZ3JhcGhnZW5lcmF0b3JzL3dpemFyZHMvbWVzc2FnZXNfa3IucHJvcGVydGllcwpAQCAtMCwwICsxLDEwNyBAQAorIyBXaXphcmRNZXNzYWdlcy5wcm9wZXJ0aWVzCisjCisjLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyMgKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisjICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworIyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorIyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisjICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyMgKgorIyAqIENvbnRyaWJ1dG9yczoKKyMgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisjICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyMgR3JhcGggV2l6YXJkCitOR3JhcGhXaXoud2l6YXJkX3RpdGxlPVx1YzBjOFx1Yjg1Y1x1YzZiNCBcdWFkZjhcdWI3OThcdWQ1MDQKK05HcmFwaFdpei5wYWdlX3RpdGxlPVx1YWRmOFx1Yjc5OFx1ZDUwNAorTkdyYXBoV2l6LnBhZ2VfZGVzY3JpcHRpb249XHVkNTA0XHViODVjXHVjODFkXHVkMmI4XHVjNWQwXHVjMTFjIFx1YzBjOCBTVEVNIFx1YWRmOFx1Yjc5OFx1ZDUwNFx1Yjk3YyBcdWI5Y2NcdWI0ZTRcdWFlMzAuCitOR3JhcGhXaXouRENfREVTQ1JJUFRJT049XHVhZGY4XHViNzk4XHVkNTA0ICJ7MH0iCitOR0dXaXouRENfREVTQ1JJUFRJT049XHVjMGRkXHVjMTMxXHViNDFjIFx1YWRmOFx1Yjc5OFx1ZDUwNAorTkdHV2l6LkRDX1RJVExFPVx1YzBkZFx1YzEzMVx1YjQxYyBcdWFkZjhcdWI3OThcdWQ1MDQKK05HR1dpei5EQ19TT1VSQ0U9XHVjMGRkXHVjMTMxXHViNDFjCisKKworIyBHcmFwaCBHZW5lcmF0b3JzCitHR0RDLjA9XHVjZDljXHVjYzk4CitHR0RDLjI9XHVkMDc0XHViNzk4XHVjMmE0CitHR0RDLjM9XHVhZGY4XHViNzk4XHVkNTA0IFx1YzBkZFx1YzEzMVx1YWUzMCBcdWMwYWNcdWI4NDAgXHVjMGRkXHVjMTMxIFx1YzkxMSBcdWJiMzhcdWM4MWMgXHViYzFjXHVjMGRkCitZRVM9WWVzCitOTz1ObworCisKKworIyBMYXR0aWNlIGdyYXBoIGdlbmVyYXRvcgoreFNpemU9WCBcdWQwNmNcdWFlMzAKK3lTaXplPVkgXHVkMDZjXHVhZTMwCit4U2l6ZVVOSVQ9XHViMmU4XHVjNzA0Cit5U2l6ZVVOSVQ9XHViMmU4XHVjNzA0Cit4U2l6ZVRUPVggXHVjZDk1IFx1YWNhOVx1Yzc5MFx1Yzc1OCBcdWFjMWNcdWMyMTgKK3lTaXplVFQ9WSBcdWNkOTUgXHVhY2E5XHVjNzkwXHVjNzU4IFx1YWMxY1x1YzIxOAordXNlTmVhcmVzdE5laWdoYm9ycz1cdWFjMDBcdWFlNGNcdWM2YjQgXHVjNzc0XHVjNmMzCit1c2VOZWFyZXN0TmVpZ2hib3JzVU5JVD0KK3VzZU5lYXJlc3ROZWlnaGJvcnNUVD1cdWFjMDBcdWM3YTUgXHVhYzAwXHVhZTRjXHVjNmI0IFx1Yzc3NFx1YzZjM1x1Yzc1OCBcdWFjMDBcdWM3YTVcdWM3OTBcdWI5YWNcdWM2NDAgXHVhZGY4XHViOWFjXHViNGRjXHVjNWQwIFx1YzVmMFx1YWNiMAordXNlTmV4dE5lYXJlc3ROZWlnaGJvcnM9XHViMmU0XHVjNzRjXHVjNzNjXHViODVjIFx1YWMwMFx1YWU0Y1x1YzZiNCBcdWM3NzRcdWM2YzMKK3VzZU5leHROZWFyZXN0TmVpZ2hib3JzVU5JVD0KK3VzZU5leHROZWFyZXN0TmVpZ2hib3JzVFQ9XHVhYzAwXHVjN2E1IFx1YWMwMFx1YWU0Y1x1YzZiNCBcdWM3NzRcdWM2YzMgXHViMmU0XHVjNzRjXHVjNzNjXHViODVjIFx1YWMwMFx1YWU0Y1x1YzZiNCBcdWFjMDBcdWM3YTVcdWM3OTBcdWI5YWNcdWI5N2MgXHVjMGFjXHVjNmE5XHVkNTU4XHVjNWVjIFx1YWRmOFx1YjlhY1x1YjRkY1x1Yjk3YyBcdWM1ZjBcdWFjYjAKK3BlcmlvZGljQm91bmRhcmllcz1cdWMyZGNcdWFjMDQgXHViMmU4XHVjNzA0IFx1YWNiZFx1YWNjNAorcGVyaW9kaWNCb3VuZGFyaWVzVU5JVD0KK3BlcmlvZGljQm91bmRhcmllc1RUPVx1YzgxNVx1YWUzMFx1YzgwMSBcdWFjYmRcdWFjYzRcdWI5N2MgXHVjMGFjXHVjNmE5CithcmVhPVx1YzljMFx1YzVlZAorYXJlYVVOSVQ9a20gXiAyCithcmVhVFQ9XHVhYzAxIFx1YWNhOVx1Yzc5MFx1Yzc1OCBcdWJhNzRcdWM4MDEgKGttIF4gMikKKworI1BsYXRlQ2FycmVlIGdlbmVyYXRvcgorYW5ndWxhclN0ZXA9XHVhYzAxXHViM2M0IFx1YWMwNFx1YWNhOQorYW5ndWxhclN0ZXBVTklUPVx1YjNjNAorYW5ndWxhclN0ZXBUVD1cdWIzZDlcdWI0ZjEgXHVhYzAxXHViM2M0IFx1YjJlOFx1YWNjNCAoXHVjODE1XHVjMjE4KQorCityYWRpdXM9XHVhZDZjXHVjNzU4IFx1YmMxOFx1YzljMFx1Yjk4NAorcmFkaXVzVU5JVD1rbQorcmFkaXVzVFQ9XHVjNjA4OiBcdWM5YzBcdWFkNmMgXHViYzE4XHVhY2JkCisKKyNNaWdyYXRpb24gZWRnZSBnZW5lcmF0b3IKK2xvY2F0aW9uPVx1YzcwNFx1Y2U1OAorbWlncmF0aW9uUmF0ZT1cdWM3NzRcdWIzZDlcdWM3MjgKK21pZ3JhdGlvblJhdGVVTklUPVx1Yzc3OFx1YWQ2YyAvIFRQXHVjNzU4IFx1YmQ4NFx1YzIxOFx1YWMxMgorbWlncmF0aW9uUmF0ZVRUPVx1YzBkZFx1YzEzMSBcdWFjMDBcdWM3YTVcdWM3OTBcdWI5YWNcdWM1ZDAgXHViMzAwXHVkNTVjIFx1Yzc3NFx1YjNkOSBcdWMxOGRcdWIzYzQgXHVjOWMwXHVjODE1Citwb3B1bGF0aW9uPVx1Yzc3OFx1YWQ2YworcG9wdWxhdGlvblVOSVQ9Citwb3B1bGF0aW9uVFQ9XHVjNzc0XHViM2Q5XHVkNTU4XHViMjk0IFx1Yzc3OFx1YWQ2YworCisjUGFqZWtOZXQgZ2VuZXJhdG9yCitkYXRhRmlsZV9uZXQ9UGFqZWsgXHVkMzBjXHVjNzdjCitkYXRhRmlsZV9uZXRUVD1QYWplayBcdWQ2MTVcdWMyZGRcdWM3NTggXHVkMzBjXHVjNzdjXHVjNzQ0IFx1YzEyMFx1ZDBkZAorYXJlYT1cdWFlMzBcdWJjZjggXHVjOWMwXHVjNWVkCithcmVhVFQ9XHVjODE1XHVjNzU4XHViNDE4XHVjOWMwIFx1YzU0YVx1Yzc0MCBcdWFjYmRcdWM2YjAgXHVhYzAxIFx1YjE3OFx1YjRkY1x1Yzc1OCBcdWFlMzBcdWJjZjggXHVjOWMwXHVjNWVkCithcmVhVU5JVD1rbSBeIDIKK2NvbEFyZWE9XHVjOWMwXHVjNWVkCitjb2xBcmVhVFQ9XHVhYzAxIFx1YjE3OFx1YjRkY1x1YzVkMCBcdWIzMDBcdWQ1NWMgXHVhYzFjXHViY2M0IFx1YzYwMVx1YzVlZFx1Yzc0NCBcdWM4MTVcdWM3NThcdWQ1NThcdWIyOTQgXHVkNTQ0XHViNGRjLiBcdWFlMzBcdWM3YWMgXHVjNTQ4IFx1ZDU1OFx1YmE3NCBcdWFlMzBcdWJjZjggXHVjNjAxXHVjNWVkIFx1YjBiNFx1YzZhOSBcdWM4MDFcdWM2YTkuIFx1Y2M5OFx1Yzc0YyBcdWIxMjRcdWFjMWMgXHVjNWY0XHViNGU0XHVjNzc0IFx1YmJmOFx1YjlhYyBcdWM4MTVcdWM3NThcdWI0MThcdWM1YjQgXHVjNzg4XHVhZTMwIFx1YjU0Y1x1YmIzOFx1YzVkMCBcdWFjMTJcdWM3NzQgNFx1YmNmNFx1YjJlNCBcdWNlZTRcdWM1N2NcdWQ1NjguCitjb2xBcmVhVU5JVD0KK2NvbnRhaW5lcj1cdWM3MDRcdWNlNThcdWI5N2MgXHVkM2VjXHVkNTY4XHVkNTU4XHViMjk0Citjb250YWluZXJUVD1QQUpFSyBcdWIxNzhcdWI0ZGNcdWI5N2MgXHVkM2VjXHVkNTY4XHVkNTVjIFx1YjE3OFx1YjRkYyBcdWM5YzBcdWM4MTUKK3NjYWxpbmdGYWN0b3I9XHVkNjU1XHVjN2E1XHVjMTMxIFx1YzY5NFx1YzE4Yworc2NhbGluZ0ZhY3RvclRUPVBBSkVLIFx1Yzg4Y1x1ZDQ1Y1x1Yzc1OCBcdWQ2NTVcdWIzMDAgXHVjOWMwXHVjODE1CitzY2FsaW5nRmFjdG9yVU5JVD0KK2ZpdD1cdWM2MDFcdWM1ZWRcdWM1ZDAgXHViOWRlXHVhYzhjIFx1ZDU2OAorZml0VU5JVD0KK2VuZm9yY2VDb250YWlubWVudD1cdWJkMDlcdWMxYzQgXHViYWE4XHVjMTFjXHViOWFjXHViOTdjIFwgblx1YzY3OFx1YmQ4MCBcdWIxNzhcdWI0ZGNcdWM1ZDBcdWMxMWMgXHVhZGY4XHViOWJjCitlbmZvcmNlQ29udGFpbm1lbnRUVD0KK2VuZm9yY2VDb250YWlubWVudFVOSVQ9CisjRXJyb3JzCitOR0dXaXpFcnIxPVhcdWQwNmNcdWFlMzBcdWIyOTQgXHViZTQ0XHVjNmNjXHViNDU4IFx1YzIxOCBcdWM1YzZcdWM3NGMKK05HR1dpekVycjI9XHVjNzk4XHViYWJiXHViNDFjIFhTaXplIFx1YWMxMgorTkdHV2l6RXJyMz1ZXHVkMDZjXHVhZTMwXHViMjk0IFx1YmU0NFx1YzZjY1x1YjQ1OCBcdWMyMTggXHVjNWM2XHVjNzRjCitOR0dXaXpFcnI0PVx1Yzc5OFx1YmFiYlx1YjQxYyBZU2l6ZSBcdWFjMTIKK05HR1dpekVycjU9XHVjNzc4XHVhZDZjIFx1YzJkZFx1YmNjNFx1Yzc5MCBcdWM1YzZcdWM3NGMKK05HR1dpekVycjY9XHVjNzk4XHViYWJiXHViNDFjIFx1YzE4ZFx1YjNjNAorTkdHV2l6RXJyNz1cdWFjMTJcdWM3NDAgMFx1YmNmNFx1YjJlNCBcdWNlZTRcdWM1N2MgXHVkNTY4CitOR0dXaXpFcnI4PVx1ZDU0NFx1YzY5NCBcdWM5YzBcdWM1ZWQKK05HR1dpekVycjk9XHVjNzk4XHViYWJiXHViNDFjIFx1YzljMFx1YzVlZAorTkdHV2l6RXJyMTA9XHVhZGY4XHViNzk4XHVkNTA0XHVjNzU4IFx1YmE3NFx1YzgwMVx1Yzc3NCBcdWIxMDhcdWJiMzQgXHVkMDdjLCBcdWQwNmNcdWFlMzAgXHViNjEwXHViMjk0IFx1YzYwMVx1YzVlZFx1Yzc0NCBcdWM5MDRcdWM1ZWNcdWM1N2MgXHVkNTY4CitOR0dXaXpFcnIxMT1cdWM3OThcdWJhYmJcdWI0MWMgTm9uemVybyBcdWM4MTVcdWMyMTggXHVhYzEyCitOR0dXaXpFcnIxMj1cdWM3OThcdWJhYmJcdWI0MWMgTm9uemVybyBEb3VibGUgXHVhYzEyCitOR0dXaXpFcnIxMz1cdWQzMGNcdWM3N2NcdWM3NDQgXHVjYzNlXHVjNzQ0IFx1YzIxOCBcdWM1YzZcdWM3NGMKK05HR1dpekVycjE0PVx1ZDU0NFx1YzY5NFx1ZDU1YyBcdWFlMzBcdWJjZjggXHVjOWMwXHVjNWVkCisKKworCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkuZ3JhcGhnZW5lcmF0b3JzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL2dyYXBoZ2VuZXJhdG9ycy93aXphcmRzL21lc3NhZ2VzX3poLnByb3BlcnRpZXMgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkuZ3JhcGhnZW5lcmF0b3JzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL2dyYXBoZ2VuZXJhdG9ycy93aXphcmRzL21lc3NhZ2VzX3poLnByb3BlcnRpZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTE3NzQ1MwotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5ncmFwaGdlbmVyYXRvcnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvZ3JhcGhnZW5lcmF0b3JzL3dpemFyZHMvbWVzc2FnZXNfemgucHJvcGVydGllcwpAQCAtMCwwICsxLDEwNyBAQAorIyBXaXphcmRNZXNzYWdlcy5wcm9wZXJ0aWVzCisjCisjLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyMgKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisjICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworIyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorIyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisjICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyMgKgorIyAqIENvbnRyaWJ1dG9yczoKKyMgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisjICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyMgR3JhcGggV2l6YXJkCitOR3JhcGhXaXoud2l6YXJkX3RpdGxlPVx1NjViMFx1NWVmYVx1NTZmZQorTkdyYXBoV2l6LnBhZ2VfdGl0bGU9XHU1NmZlCitOR3JhcGhXaXoucGFnZV9kZXNjcmlwdGlvbj1cdTU3MjhcdTk4NzlcdTc2ZWVcdTRlMmRcdTUyMWJcdTVlZmFcdTRlMDBcdTRlMmFcdTY1YjBcdTc2ODRTVEVNXHU1NmZlXHUzMDAyCitOR3JhcGhXaXouRENfREVTQ1JJUFRJT049XHU1NmZlXHUyMDFjezB9XHUyMDFkCitOR0dXaXouRENfREVTQ1JJUFRJT049XHU3NTFmXHU2MjEwXHU1NmZlXHU4ODY4CitOR0dXaXouRENfVElUTEU9XHU3NTFmXHU2MjEwXHU1NmZlXHU4ODY4CitOR0dXaXouRENfU09VUkNFPVx1NzUxZlx1NjIxMAorCisKKyMgR3JhcGggR2VuZXJhdG9ycworR0dEQy4wPVx1Njc2NVx1NmU5MAorR0dEQy4yPVx1N2M3YgorR0dEQy4zPVx1NTIxYlx1NWVmYVx1NTZmZVx1ODg2OFx1NzUxZlx1NjIxMFx1NTY2OFx1NWI5ZVx1NGY4Ylx1NzY4NFx1OTVlZVx1OTg5OAorWUVTPVx1NjYyZlx1NzY4NAorTk89XHU2NWUwCisKKworCisjIExhdHRpY2UgZ3JhcGggZ2VuZXJhdG9yCit4U2l6ZT1YXHU1YzNhXHU1YmY4Cit5U2l6ZT15XHU1OTI3XHU1YzBmCit4U2l6ZVVOSVQ9XHU1MzU1XHU0ZjRkCit5U2l6ZVVOSVQ9XHU1MzU1XHU0ZjRkCit4U2l6ZVRUPVx1NmNiZlhcdThmNzRcdTc2ODRcdTdmNTFcdTY4M2NcdTY1NzAKK3lTaXplVFQ9XHU2Y2JmWVx1OGY3NFx1NzY4NFx1N2Y1MVx1NjgzY1x1NjU3MAordXNlTmVhcmVzdE5laWdoYm9ycz1cdTY3MDBcdThmZDFcdTc2ODRcdTkwYmJcdTVjNDUKK3VzZU5lYXJlc3ROZWlnaGJvcnNVTklUPQordXNlTmVhcmVzdE5laWdoYm9yc1RUPVx1NzUyOFx1NjcwMFx1NGUzNFx1OGZkMVx1NzY4NFx1OGZiOVx1NzU0Y1x1Njc2NVx1OGZkZVx1NjNhNVx1N2Y1MVx1NjgzYwordXNlTmV4dE5lYXJlc3ROZWlnaGJvcnM9XHU0ZTBiXHU0ZTAwXHU0ZTJhXHU2NzAwXHU4ZmQxXHU3Njg0XHU5MGJiXHU1YzQ1Cit1c2VOZXh0TmVhcmVzdE5laWdoYm9yc1VOSVQ9Cit1c2VOZXh0TmVhcmVzdE5laWdoYm9yc1RUPVx1NzUyOFx1NGUwYlx1NGUwMFx1NGUyYVx1NjcwMFx1NGUzNFx1OGZkMVx1NzY4NFx1OGZiOVx1NzU0Y1x1Njc2NVx1OGZkZVx1NjNhNVx1N2Y1MVx1NjgzYworcGVyaW9kaWNCb3VuZGFyaWVzPVx1NTQ2OFx1NjcxZlx1OGZiOVx1NzU0YworcGVyaW9kaWNCb3VuZGFyaWVzVU5JVD0KK3BlcmlvZGljQm91bmRhcmllc1RUPVx1NGY3Zlx1NzUyOFx1NTQ2OFx1NjcxZlx1N2VhNlx1Njc1ZgorYXJlYT1cdTk3NjJcdTc5ZWYKK2FyZWFVTklUPVx1NWU3M1x1NjViOVx1NTE2Y1x1OTFjYworYXJlYVRUPVx1NmJjZlx1NGUyYVx1N2Y1MVx1NjgzY1x1NzY4NFx1NTMzYVx1NTdkZlx1ZmYwOFx1NTM1NVx1NGY0ZFx1ZmYxYVx1NWU3M1x1NjViOVx1NTE2Y1x1OTFjY1x1ZmYwOQorCisjUGxhdGVDYXJyZWUgZ2VuZXJhdG9yCithbmd1bGFyU3RlcD1cdTg5ZDJcdTk1ZjRcdTk2OTQKK2FuZ3VsYXJTdGVwVU5JVD1cdTVlYTYKK2FuZ3VsYXJTdGVwVFQ9XHU1NDBjXHU3YjQ5XHU4OWQyXHU2YjY1XHVmZjA4XHU2NTc0XHUyMDBiXHUyMDBiXHU2NTcwXHU1ZWE2XHVmZjA5CisKK3JhZGl1cz1cdTUzNGFcdTVmODRcdTc2ODRcdTc0MDMKK3JhZGl1c1VOSVQ9XHU1MTZjXHU5MWNjCityYWRpdXNUVD1cdTRmOGJcdTU5ODJcdWZmMGNcdTU3MzBcdTc0MDNcdTUzNGFcdTVmODQKKworI01pZ3JhdGlvbiBlZGdlIGdlbmVyYXRvcgorbG9jYXRpb249XHU1NzMwXHU3MGI5CittaWdyYXRpb25SYXRlPVx1OGZjMVx1NzlmYlx1NzM4NworbWlncmF0aW9uUmF0ZVVOSVQ9XHU3OWNkXHU3ZmE0XHU3Njg0XHU0ZTAwXHU5MGU4XHU1MjA2CittaWdyYXRpb25SYXRlVFQ9XHU2MzA3XHU1YjlhXHU3NTFmXHU2MjEwXHU3Njg0XHU4ZmI5XHU3ZjE4XHU3Njg0XHU4ZmMxXHU3OWZiXHU3Mzg3Citwb3B1bGF0aW9uPVx1NzljZFx1N2ZhNAorcG9wdWxhdGlvblVOSVQ9Citwb3B1bGF0aW9uVFQ9XHU3OWNkXHU3ZmE0XHU4ZmMxXHU3OWZiCisKKyNQYWpla05ldCBnZW5lcmF0b3IKK2RhdGFGaWxlX25ldD1QYWpla1x1NjU4N1x1NGVmNgorZGF0YUZpbGVfbmV0VFQ9XHU5MDA5XHU2MmU5XHU0ZTAwXHU0ZTJhUGFqZWtcdTY4M2NcdTVmMGZcdTc2ODRcdTY1ODdcdTRlZjYKK2FyZWE9XHU5ZWQ4XHU4YmE0XHU1MzNhXHU1N2RmCithcmVhVFQ9XHU5ZWQ4XHU4YmE0XHU1MzNhXHU1N2RmXHU3Njg0XHU2YmNmXHU0ZTJhXHU4MjgyXHU3MGI5XHVmZjBjXHU1OTgyXHU2NzljXHU2NzJhXHU1YjlhXHU0ZTQ5CithcmVhVU5JVD1cdTVlNzNcdTY1YjlcdTUxNmNcdTkxY2MKK2NvbEFyZWE9XHU5NzYyXHU3OWVmCitjb2xBcmVhVFQ9XHU1YjU3XHU2YmI1XHU1YjlhXHU0ZTQ5XHU0ZTg2XHU2YmNmXHU0ZTJhXHU4MjgyXHU3MGI5XHU3Njg0XHU3MmVjXHU3YWNiXHU1MzNhXHU1N2RmXHUzMDAyXHU1OTgyXHU2NzljXHU0ZTIyXHU1OTMxXHU3Njg0XHU5ZWQ4XHU4YmE0XHU1MzNhXHU1N2RmXHU4OGFiXHU1MzYwXHU3NTI4XHUzMDAyXHU2NTcwXHU1MDNjXHU1ZmM1XHU5ODdiXHU1OTI3XHU0ZThlNFx1NTZlMFx1NGUzYVx1NTkzNFx1NTZkYlx1NTIxN1x1NjYyZlx1OTg4NFx1NTE0OFx1NWI5YVx1NGU0OVx1NTk3ZFx1NzY4NFx1MzAwMgorY29sQXJlYVVOSVQ9Citjb250YWluZXI9XHU2M2E3XHU1MjM2XHU3Njg0XHU0ZjRkXHU3ZjZlCitjb250YWluZXJUVD1cdTYzMDdcdTViOWFcdTgyODJcdTcwYjlcdWZmMGNcdTUxNzZcdTRlMmRcdTUzMDVcdTU0MmJQQUpFS1x1ODI4Mlx1NzBiOQorc2NhbGluZ0ZhY3Rvcj1cdTdmMjlcdTY1M2VcdTU2ZTBcdTViNTAKK3NjYWxpbmdGYWN0b3JUVD1cdTYzMDdcdTViOWFcdTc2ODRQQUpFS1x1NTc1MFx1NjgwN1x1NjUzZVx1NTkyNworc2NhbGluZ0ZhY3RvclVOSVQ9CitmaXQ9XHU2NTNlXHU1MTY1XHU2M2E3XHU1MjM2XHU1MzNhXHU1N2RmCitmaXRVTklUPQorZW5mb3JjZUNvbnRhaW5tZW50PVx1NGVjZVx1NTkxNlx1NGZhN1x1ODI4Mlx1NzUzNVx1NTIxMlx1NTIwNlx1NjNhN1x1NTIzNlx1OGZiOVx1NzU0YworZW5mb3JjZUNvbnRhaW5tZW50VFQ9CitlbmZvcmNlQ29udGFpbm1lbnRVTklUPQorI0Vycm9ycworTkdHV2l6RXJyMT1YXHU3Njg0XHU1OTI3XHU1YzBmXHU0ZTBkXHU4MGZkXHU0ZTNhXHU3YTdhCitOR0dXaXpFcnIyPVx1NjVlMFx1NjU0OFx1NzY4NFhcdTVjM2FcdTViZjhcdTUwM2MKK05HR1dpekVycjM9WVx1NzY4NFx1NTkyN1x1NWMwZlx1NGUwZFx1ODBmZFx1NGUzYVx1N2E3YQorTkdHV2l6RXJyND1cdTY1ZTBcdTY1NDhcdTc2ODRZXHU1YzNhXHU1YmY4XHU1MDNjCitOR0dXaXpFcnI1PVx1NTkzMVx1OGUyYVx1NzljZFx1N2ZhNFx1NjgwN1x1OGJjNlx1N2IyNgorTkdHV2l6RXJyNj1cdTY1ZTBcdTY1NDhcdTc2ODRcdTkwMWZcdTczODcKK05HR1dpekVycjc9XHU5MDFmXHU3Mzg3XHU1ZmM1XHU5ODdiXHU1OTI3XHU0ZThlMAorTkdHV2l6RXJyOD1cdTk3MDBcdTg5ODFcdTc2ODRcdTk3NjJcdTc5ZWYKK05HR1dpekVycjk9XHU2NWUwXHU2NTQ4XHU3Njg0XHU1NzMwXHU1MzNhCitOR0dXaXpFcnIxMD1cdTU2ZmVcdTc2ODRcdTYwM2JcdTk3NjJcdTc5ZWZcdThmYzdcdTU5MjdcdWZmMGNcdTdmMjlcdTVjMGZcdTU5MjdcdTVjMGZcdTYyMTZcdTUzM2FcdTU3ZGYKK05HR1dpekVycjExPVx1NjVlMFx1NjU0OFx1NzY4NFx1OTc1ZVx1OTZmNlx1NjU3NFx1NjU3MFx1NTAzYworTkdHV2l6RXJyMTI9XHU2NWUwXHU2NTQ4XHU3Njg0XHU5NzVlXHU5NmY2XHU1M2NjXHU3Y2JlXHU1ZWE2XHU1MDNjCitOR0dXaXpFcnIxMz1cdTY1ODdcdTRlZjZcdTY1ZTBcdTZjZDVcdTYyN2VcdTUyMzAKK05HR1dpekVycjE0PVx1OWVkOFx1OGJhNFx1NTMzYVx1NTdkZlx1ODk4MVx1NmM0MgorCisKKwpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLmhlYWRsZXNzLy5jbGFzc3BhdGggYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkuaGVhZGxlc3MvLmNsYXNzcGF0aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NGM1ZTMxCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLmhlYWRsZXNzLy5jbGFzc3BhdGgKQEAgLTAsMCArMSw3IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPGNsYXNzcGF0aD4KKwk8Y2xhc3NwYXRoZW50cnkga2luZD0iY29uIiBwYXRoPSJvcmcuZWNsaXBzZS5qZHQubGF1bmNoaW5nLkpSRV9DT05UQUlORVIvb3JnLmVjbGlwc2UuamR0LmludGVybmFsLmRlYnVnLnVpLmxhdW5jaGVyLlN0YW5kYXJkVk1UeXBlL0oyU0UtMS41Ii8+CisJPGNsYXNzcGF0aGVudHJ5IGtpbmQ9ImNvbiIgcGF0aD0ib3JnLmVjbGlwc2UucGRlLmNvcmUucmVxdWlyZWRQbHVnaW5zIi8+CisJPGNsYXNzcGF0aGVudHJ5IGtpbmQ9InNyYyIgcGF0aD0ic3JjIi8+CisJPGNsYXNzcGF0aGVudHJ5IGtpbmQ9Im91dHB1dCIgcGF0aD0iYmluIi8+Cis8L2NsYXNzcGF0aD4KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5oZWFkbGVzcy8ucHJvamVjdCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5oZWFkbGVzcy8ucHJvamVjdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NzI5ZGJkCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLmhlYWRsZXNzLy5wcm9qZWN0CkBAIC0wLDAgKzEsMjggQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8cHJvamVjdERlc2NyaXB0aW9uPgorCTxuYW1lPm9yZy5lY2xpcHNlLnN0ZW0udWkuaGVhZGxlc3M8L25hbWU+CisJPGNvbW1lbnQ+PC9jb21tZW50PgorCTxwcm9qZWN0cz4KKwk8L3Byb2plY3RzPgorCTxidWlsZFNwZWM+CisJCTxidWlsZENvbW1hbmQ+CisJCQk8bmFtZT5vcmcuZWNsaXBzZS5qZHQuY29yZS5qYXZhYnVpbGRlcjwvbmFtZT4KKwkJCTxhcmd1bWVudHM+CisJCQk8L2FyZ3VtZW50cz4KKwkJPC9idWlsZENvbW1hbmQ+CisJCTxidWlsZENvbW1hbmQ+CisJCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuTWFuaWZlc3RCdWlsZGVyPC9uYW1lPgorCQkJPGFyZ3VtZW50cz4KKwkJCTwvYXJndW1lbnRzPgorCQk8L2J1aWxkQ29tbWFuZD4KKwkJPGJ1aWxkQ29tbWFuZD4KKwkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5TY2hlbWFCdWlsZGVyPC9uYW1lPgorCQkJPGFyZ3VtZW50cz4KKwkJCTwvYXJndW1lbnRzPgorCQk8L2J1aWxkQ29tbWFuZD4KKwk8L2J1aWxkU3BlYz4KKwk8bmF0dXJlcz4KKwkJPG5hdHVyZT5vcmcuZWNsaXBzZS5wZGUuUGx1Z2luTmF0dXJlPC9uYXR1cmU+CisJCTxuYXR1cmU+b3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YW5hdHVyZTwvbmF0dXJlPgorCTwvbmF0dXJlcz4KKzwvcHJvamVjdERlc2NyaXB0aW9uPgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLmhlYWRsZXNzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5oZWFkbGVzcy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTIxMzQwZgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5oZWFkbGVzcy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMKQEAgLTAsMCArMSw4IEBACisjV2VkIE1hciAzMCAxNToyODo1NiBQRFQgMjAxMQorZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvZGVnZW4uaW5saW5lSnNyQnl0ZWNvZGU9ZW5hYmxlZAorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29kZWdlbi50YXJnZXRQbGF0Zm9ybT0xLjUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvbXBsaWFuY2U9MS41CitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmFzc2VydElkZW50aWZpZXI9ZXJyb3IKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZW51bUlkZW50aWZpZXI9ZXJyb3IKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnNvdXJjZT0xLjUKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5oZWFkbGVzcy9NRVRBLUlORi9NQU5JRkVTVC5NRiBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5oZWFkbGVzcy9NRVRBLUlORi9NQU5JRkVTVC5NRgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNmFiMGU3Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLmhlYWRsZXNzL01FVEEtSU5GL01BTklGRVNULk1GCkBAIC0wLDAgKzEsMTUgQEAKK01hbmlmZXN0LVZlcnNpb246IDEuMAorQnVuZGxlLU1hbmlmZXN0VmVyc2lvbjogMgorQnVuZGxlLU5hbWU6IEhlYWRsZXNzIFNURU0gU2ltdWxhdGlvbiBSdW5uZXIKK0J1bmRsZS1TeW1ib2xpY05hbWU6IG9yZy5lY2xpcHNlLnN0ZW0udWkuaGVhZGxlc3M7c2luZ2xldG9uOj10cnVlCitCdW5kbGUtVmVyc2lvbjogMS4yLjEKK0J1bmRsZS1BY3RpdmF0b3I6IG9yZy5lY2xpcHNlLnN0ZW0udWkuaGVhZGxlc3MuQWN0aXZhdG9yCitCdW5kbGUtVmVuZG9yOiBJQk0gQ29ycG9yYXRpb24KK1JlcXVpcmUtQnVuZGxlOiBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUsCisgb3JnLmVjbGlwc2Uuc3RlbS5qb2JzLAorIG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLAorIG9yZy5lY2xpcHNlLnN0ZW0udXRpbC5sb2dnZXJzLAorIG9yZy5lY2xpcHNlLnN0ZW0udWkKK0J1bmRsZS1SZXF1aXJlZEV4ZWN1dGlvbkVudmlyb25tZW50OiBKMlNFLTEuNQorQnVuZGxlLUFjdGl2YXRpb25Qb2xpY3k6IGxhenkKK0V4cG9ydC1QYWNrYWdlOiBvcmcuZWNsaXBzZS5zdGVtLnVpLmhlYWRsZXNzCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkuaGVhZGxlc3MvYnVpbGQucHJvcGVydGllcyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5oZWFkbGVzcy9idWlsZC5wcm9wZXJ0aWVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU5ODYzZTIKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkuaGVhZGxlc3MvYnVpbGQucHJvcGVydGllcwpAQCAtMCwwICsxLDUgQEAKK3NvdXJjZS4uID0gc3JjLworb3V0cHV0Li4gPSBiaW4vCitiaW4uaW5jbHVkZXMgPSBNRVRBLUlORi8sXAorICAgICAgICAgICAgICAgLixcCisgICAgICAgICAgICAgICBwbHVnaW4ueG1sCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkuaGVhZGxlc3MvcGx1Z2luLnhtbCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5oZWFkbGVzcy9wbHVnaW4ueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRiMzY2NjAKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkuaGVhZGxlc3MvcGx1Z2luLnhtbApAQCAtMCwwICsxLDEyIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPD9lY2xpcHNlIHZlcnNpb249IjMuNCI/PgorPHBsdWdpbj4KKyAgIDxleHRlbnNpb24KKyAgICAgICAgIHBvaW50PSJvcmcuZWNsaXBzZS5zdGVtLnVpLmxhdW5jaGVycyI+CisgICAgICA8bGF1bmNoZXIKKyAgICAgICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS5zdGVtLnVpLmhlYWRsZXNzLkhlYWRsZXNzTGF1bmNoZXIiCisgICAgICAgICAgICBuYW1lPSJoZWFkbGVzcyI+CisgICAgICA8L2xhdW5jaGVyPgorICAgPC9leHRlbnNpb24+CisKKzwvcGx1Z2luPgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLmhlYWRsZXNzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL2hlYWRsZXNzL0FjdGl2YXRvci5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLmhlYWRsZXNzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL2hlYWRsZXNzL0FjdGl2YXRvci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU1MTM4NTMKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkuaGVhZGxlc3Mvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvaGVhZGxlc3MvQWN0aXZhdG9yLmphdmEKQEAgLTAsMCArMSw0MCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAxMSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0udWkuaGVhZGxlc3M7CisKK2ltcG9ydCBvcmcub3NnaS5mcmFtZXdvcmsuQnVuZGxlQWN0aXZhdG9yOworaW1wb3J0IG9yZy5vc2dpLmZyYW1ld29yay5CdW5kbGVDb250ZXh0OworCitwdWJsaWMgY2xhc3MgQWN0aXZhdG9yIGltcGxlbWVudHMgQnVuZGxlQWN0aXZhdG9yIHsKKworCXByaXZhdGUgc3RhdGljIEJ1bmRsZUNvbnRleHQgY29udGV4dDsKKworCXN0YXRpYyBCdW5kbGVDb250ZXh0IGdldENvbnRleHQoKSB7CisJCXJldHVybiBjb250ZXh0OworCX0KKworCS8qCisJICogKG5vbi1KYXZhZG9jKQorCSAqIEBzZWUgb3JnLm9zZ2kuZnJhbWV3b3JrLkJ1bmRsZUFjdGl2YXRvciNzdGFydChvcmcub3NnaS5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dCkKKwkgKi8KKwlwdWJsaWMgdm9pZCBzdGFydChCdW5kbGVDb250ZXh0IGJ1bmRsZUNvbnRleHQpIHRocm93cyBFeGNlcHRpb24geworCQlBY3RpdmF0b3IuY29udGV4dCA9IGJ1bmRsZUNvbnRleHQ7CisJfQorCisJLyoKKwkgKiAobm9uLUphdmFkb2MpCisJICogQHNlZSBvcmcub3NnaS5mcmFtZXdvcmsuQnVuZGxlQWN0aXZhdG9yI3N0b3Aob3JnLm9zZ2kuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHQpCisJICovCisJcHVibGljIHZvaWQgc3RvcChCdW5kbGVDb250ZXh0IGJ1bmRsZUNvbnRleHQpIHRocm93cyBFeGNlcHRpb24geworCQlBY3RpdmF0b3IuY29udGV4dCA9IG51bGw7CisJfQorCit9CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkuaGVhZGxlc3Mvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvaGVhZGxlc3MvSGVhZGxlc3NMYXVuY2hlci5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLmhlYWRsZXNzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL2hlYWRsZXNzL0hlYWRsZXNzTGF1bmNoZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNGY0MWNiCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLmhlYWRsZXNzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL2hlYWRsZXNzL0hlYWRsZXNzTGF1bmNoZXIuamF2YQpAQCAtMCwwICsxLDE2NyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAxMSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0udWkuaGVhZGxlc3M7CisKK2ltcG9ydCBqYXZhLmlvLk91dHB1dFN0cmVhbTsKK2ltcG9ydCBqYXZhLmlvLlByaW50U3RyZWFtOworCitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBsYXRmb3JtOworaW1wb3J0IG9yZy5lY2xpcHNlLmVxdWlub3guYXBwLklBcHBsaWNhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmpvYnMuRGlzcGxheVNhZmVFeGVjdXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnVpLmxhdW5jaGVyLkxhdW5jaGVyOworaW1wb3J0IG9yZy5vc2dpLmZyYW1ld29yay5CdW5kbGU7CisKKy8qKgorICogTGF1bmNoZXIgdGhhdCBzdGFydHMgU1RFTSBpbiBhIG5vbi1HVUkgImhlYWRsZXNzIiBtb2RlLiAgVGhlIHB1cnBvc2UKKyAqIG9mIHRoaXMgY2xhc3MgaXMgdG8gZW5hYmxlIGNvbW1hbmQgbGluZSBleGVjdXRpb24gb2Ygc3BlY2lmaWMgCisgKiBTVEVNIG9wZXJhdGlvbnMsIHN1Y2ggYXMgcnVubmluZyBpbmRpdmlkdWFsIHNpbXVsYXRpb25zIGFuZCBleHBlcmltZW50cy4KKyAqCisgKi8KK3B1YmxpYyBjbGFzcyBIZWFkbGVzc0xhdW5jaGVyIGV4dGVuZHMgTGF1bmNoZXIKK3sKKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgRElTVFJJQlVURURfQ09OVFJPTExFUl9QTFVHSU5fTkFNRSA9ICJvcmcuZWNsaXBzZS5zdGVtLmdyYXBoc3luY2hyb25pemVyIjsKKwkKKwkvKioKKwkgKiBTVEVNIExhdW5jaGVyIGZvciBoZWFkbGVzcyBtb2RlLgorCSAqIEBwYXJhbSBjdHggRWNsaXBzZSBBcHBsaWNhdGlvbiBDb250ZXh0CisJICogQHBhcmFtIGFyZ3MgQ29tbWFuZCBsaW5lIGFyZ3VtZW50cworCSAqLworCXB1YmxpYyBIZWFkbGVzc0xhdW5jaGVyKCkKKwl7CisJCXN1cGVyKCk7CisJfQorCQorCS8qKgorCSAqIENoZWNrcyBmb3IgdGhlIHByZXNlbmNlIG9mIHRoZSAtZGlzdHJpYnV0ZWQgY29tbWFuZCBsaW5lIG9wdGlvbgorCSAqIGFuZCBlbmFibGVzIGRpc3RyaWJ1dGVkIFNURU0gYnkgaXNzdWUgYSB0cmFuc2llbnQgc3RhcnQgdG8gdGhlCisJICogaW1wbGVtZW50aW5nIE9TR2kgYnVuZGxlLgorCSAqLworCXByb3RlY3RlZCB2b2lkIGNoZWNrRGlzdHJpYnV0ZWQoKQorCXsKKwkJaWYgKGFyZ3MuY29udGFpbnNLZXkoImRpc3RyaWJ1dGVkIikpIHsKKwkJCXRyeSB7CisJCQkJU3lzdGVtLm91dC5wcmludGxuKCJFbmFibGluZyBTVEVNIGRpc3RyaWJ1dGVkIG1vZGUuIik7CisJCQkJQnVuZGxlIGRpc3RCdW5kbGUgPSBQbGF0Zm9ybS5nZXRCdW5kbGUoRElTVFJJQlVURURfQ09OVFJPTExFUl9QTFVHSU5fTkFNRSk7CisJCQkJaWYgKGRpc3RCdW5kbGUgIT0gbnVsbCkgeworCQkJCQlkaXN0QnVuZGxlLnN0YXJ0KEJ1bmRsZS5TVEFSVF9UUkFOU0lFTlQpOworCQkJCX0gZWxzZSB7CisJCQkJCVN5c3RlbS5lcnIucHJpbnRsbigiRGlzdHJpYnV0ZWQgU1RFTSBwbHVnaW4gbm90IGZvdW5kLiAgRGlzdHJpYnV0ZWQgbW9kZSBub3QgZW5hYmxlZC4iKTsKKwkJCQl9CisJCQl9IGNhdGNoIChFeGNlcHRpb24gZSkgeworCQkJCVN5c3RlbS5lcnIucHJpbnRsbigiRXJyb3IgbGF1bmNoaW5nIGRpc3RyaWJ1dGVkIFNURU0gcGx1Z2luLiAgV2lsbCBjb250aW51ZSBpbiBzdGFuZGFsb25lLiIpOworCQkJCWUucHJpbnRTdGFja1RyYWNlKFN5c3RlbS5lcnIpOworCQkJfQorCQl9CisJfQorCQorCS8qKgorCSAqIFNldHMgdGhlIGNvcnJlY3QgU3lzdGVtIHN0cmVhbXMgYmFzZWQgb24gY29tbWFuZCBsaW5lIG9wdGlvbnMKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBzZXRTdHJlYW1zKCkKKwl7CisJCWlmIChhcmdzLmNvbnRhaW5zS2V5KCJxdWlldCIpKSB7CisJCQlTeXN0ZW0uc2V0T3V0KG5ldyBQcmludFN0cmVhbShuZXcgTnVsbE91dHB1dFN0cmVhbSgpKSk7CisJCX0KKwl9CisJCisJLyogKG5vbi1KYXZhZG9jKQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmxhdW5jaGVyLkxhdW5jaGVyI2xhdW5jaCgpCisJICovCisJcHVibGljIE9iamVjdCBsYXVuY2goKQorCXsJCisJCS8vIERyb3AgdGhlIHNwbGFzaCBzY3JlZW4KKwkJY29udGV4dC5hcHBsaWNhdGlvblJ1bm5pbmcoKTsKKwkJCisJCS8vIFRlbGwgdGhlIGRpc3BsYXkgZXhlY3V0b3IgdG8gdXNlIG5vbi1VSSBleGVjdXRpb24gY29udHJvbHMKKwkJRGlzcGxheVNhZmVFeGVjdXRvci5mb3JjZUhlYWRsZXNzKCk7CisJCQorCQlzZXRTdHJlYW1zKCk7CisKKwkJdHJ5IHsKKwkJCS8vIENoZWNrIGZvciBhbmQgZW5hYmxlIGRpc3RyaWJ1dGVkIG1vZGUgaWYgcmVxdWVzdGVkCisJCQljaGVja0Rpc3RyaWJ1dGVkKCk7CisJCQkKKwkJCS8vIENoZWNrIGlmIHdlIHNob3VsZCBlbmFibGUgdGhlIHNpbXVsYXRpb24gbG9nZ2VyCisJCQlib29sZWFuIGxvZyA9IGFyZ3MuY29udGFpbnNLZXkoImxvZyIpOworCQkJU3RyaW5nIGxvZ0RpciA9IG51bGw7CisJCQlpZiAobG9nICYmIGFyZ3MuZ2V0KCJsb2ciKS5zaXplKCkgPiAwKSB7CisJCQkJbG9nRGlyID0gYXJncy5nZXQoImxvZyIpLmdldCgwKTsKKwkJCX0KKwkJCQorCQkJLy8gQ29sbGVjdCBzY2VuYXJpb3MgdG8gc2ltdWxhdGUgYW5kIHJ1bgorCQkJSGVhZGxlc3NTaW11bGF0aW9uUnVubmVyIHJ1bm5lciA9IG5ldyBIZWFkbGVzc1NpbXVsYXRpb25SdW5uZXIobG9nLCBsb2dEaXIpOworCQkJcnVubmVyLnJ1bihhcmdzKTsKKwkJCisJCQlyZXR1cm4gSUFwcGxpY2F0aW9uLkVYSVRfT0s7CisJCX0gZmluYWxseSB7CisJCQkvL2Rpc3BsYXkuZGlzcG9zZSgpOworCQl9CisJCQorCQkKKwl9CisJCisJLyoqCisJICogU1dUIERpc3BsYXkgc3luY2hyb25pemVyIHRvIGZpeCBpc3N1ZXMgd2l0aCB1c2luZyBEaXNwbGF5LnN5bmNFeGVjCisJICogYW5kIERpc3BsYXkuYXN5bmNFeGVjIHdoZW4gbm8gVUkgaXMgcHJlc2VudC4gIEhpZ2hseSBub24ta29zaGVyLgorCSAqCisJICovCisvLwlwcml2YXRlIGNsYXNzIEhlYWRsZXNzRGlzcGxheVN5bmNocm9uaXplciBleHRlbmRzIFN5bmNocm9uaXplcgorLy8JeworLy8JCXB1YmxpYyBIZWFkbGVzc0Rpc3BsYXlTeW5jaHJvbml6ZXIoRGlzcGxheSBkKQorLy8JCXsKKy8vCQkJc3VwZXIoZCk7CisvLwkJfQorLy8JCQorLy8JCS8qIChub24tSmF2YWRvYykKKy8vCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlN5bmNocm9uaXplciNhc3luY0V4ZWMoamF2YS5sYW5nLlJ1bm5hYmxlKQorLy8JCSAqLworLy8JCXByb3RlY3RlZCB2b2lkIGFzeW5jRXhlYyhmaW5hbCBSdW5uYWJsZSBydW5uYWJsZSkgCisvLwkJeworLy8JCQkvLyBGb3IgYXN5bmNocm9ub3VzIGV4ZWN1dGlvbiwgc2NoZWR1bGUgYW5kIHJ1bgorLy8JCQkvLyBhbiBhc3luY2hyb25vdXMgam9iIHRvIGV4ZWN1dGUgdGhlIHJ1bm5hYmxlIGluc3RhbmNlLgorLy8JCQlpZiAocnVubmFibGUgIT0gbnVsbCkgeworLy8JCQkJbmV3IEpvYihydW5uYWJsZS50b1N0cmluZygpKSB7CQkKKy8vCQkJCQlwcm90ZWN0ZWQgSVN0YXR1cyBydW4oSVByb2dyZXNzTW9uaXRvciBtb25pdG9yKSB7CisvLwkJCQkJCXJ1bm5hYmxlLnJ1bigpOworLy8JCQkJCQlyZXR1cm4gU3RhdHVzLk9LX1NUQVRVUzsKKy8vCQkJCQl9CisvLwkJCQl9LnNjaGVkdWxlKCk7CisvLwkJCX0KKy8vCQl9CisvLworLy8JCS8qIChub24tSmF2YWRvYykKKy8vCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlN5bmNocm9uaXplciNzeW5jRXhlYyhqYXZhLmxhbmcuUnVubmFibGUpCisvLwkJICovCisvLwkJcHJvdGVjdGVkIHZvaWQgc3luY0V4ZWMoZmluYWwgUnVubmFibGUgcnVubmFibGUpIAorLy8JCXsKKy8vCQkJLy8gRm9yIHN5bmNocm9ub3VzIGV4ZWN1dGlvbiwganVzdCBjYWxsIHRoZSAKKy8vCQkJLy8gcnVubmFibGUgaW5zdGFuY2UgZGlyZWN0bHkuICBTaG91bGQgYmxvY2sKKy8vCQkJLy8gb24gZXhlY3V0aW9uIHRvIGNvbXBsZXRlLgorLy8JCQlpZiAocnVubmFibGUgIT0gbnVsbCkgeworLy8JCQkJcnVubmFibGUucnVuKCk7CisvLwkJCX0KKy8vCQl9CisvLwkJCisvLwl9CisJCisJLyoqCisJICogTnVsbCBvdXRwdXQgc3RyZWFtIGZvciBpZ25vcmluZyBhbGwgb3V0cHV0CisJICovCisJcHJpdmF0ZSBjbGFzcyBOdWxsT3V0cHV0U3RyZWFtIGV4dGVuZHMgT3V0cHV0U3RyZWFtCisJeworCQlOdWxsT3V0cHV0U3RyZWFtKCkge30KKwkJcHVibGljIHZvaWQgY2xvc2UoKSB7fQorCQlwdWJsaWMgdm9pZCBmbHVzaCgpIHt9CisJCXB1YmxpYyB2b2lkIHdyaXRlKCBieXRlW10gYiwgaW50IG9mZiwgaW50IGxlbikge30KKwkJcHVibGljIHZvaWQgd3JpdGUoYnl0ZVtdIGIpIHt9CisJCXB1YmxpYyB2b2lkIHdyaXRlKGludCBiKSB7fQorCX0KK30KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5oZWFkbGVzcy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9oZWFkbGVzcy9IZWFkbGVzc1NpbXVsYXRpb25SdW5uZXIuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5oZWFkbGVzcy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9oZWFkbGVzcy9IZWFkbGVzc1NpbXVsYXRpb25SdW5uZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNTg4ODkwCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLmhlYWRsZXNzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL2hlYWRsZXNzL0hlYWRsZXNzU2ltdWxhdGlvblJ1bm5lci5qYXZhCkBAIC0wLDAgKzEsMjg5IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDExIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS51aS5oZWFkbGVzczsKKworaW1wb3J0IGphdmEuaW8uRmlsZTsKK2ltcG9ydCBqYXZhLnV0aWwuSGFzaFNldDsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuTWFwOworaW1wb3J0IGphdmEudXRpbC5TZXQ7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JRm9sZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0OworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklSZXNvdXJjZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5SZXNvdXJjZXNQbHVnaW47CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkNvcmVFeGNlcHRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLk51bGxQcm9ncmVzc01vbml0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLkVMaXN0OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5VUkk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLlV0aWxpdHk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLkRlY29yYXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuSW50ZWdyYXRpb25EZWNvcmF0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNjZW5hcmlvLlNjZW5hcmlvOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zZXF1ZW5jZXIuU2VxdWVuY2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uam9icy5zaW11bGF0aW9uLklTaW11bGF0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uam9icy5zaW11bGF0aW9uLklTaW11bGF0aW9uTGlzdGVuZXJTeW5jOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uam9icy5zaW11bGF0aW9uLlNpbXVsYXRpb25FdmVudDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmpvYnMuc2ltdWxhdGlvbi5TaW11bGF0aW9uTWFuYWdlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnV0aWwubG9nZ2Vycy51dGlsLlV0aWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS51dGlsLmxvZ2dlcnMudmlld3MuQ3VzdG9tQ1NWTG9nZ2VyOworCisvKioKKyAqIFJ1bnMgc2ltdWxhdGlvbnMgZm9yIHNjZW5hcmlvcyBwYXNzZWQgaW4gYXMgY29tbWFuZCBsaW5lIG9wdGlvbnMuIFRoZSBydW4KKyAqIG1ldGhvZCBmaW5kIHRoZSBjb3JyZWN0IHNjZW5hcmlvcywgY3JlYXRlcyBzaW11bGF0aW9ucyBmb3IgdGhlIHNjZW5hcmlvcywKKyAqIHJ1bnMgdGhlIHNpbXVsYXRpb25zLCBhbmQgYXR0ZW1wdHMgdG8gd2FpdCBmb3IgdGhlbSB0byBmaW5pc2guCisgKiAKKyAqLworcHVibGljIGNsYXNzIEhlYWRsZXNzU2ltdWxhdGlvblJ1bm5lciB7CisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFBST0pFQ1RfU0NFTkFSSU9TX0ZPTERFUl9OQU1FID0gInNjZW5hcmlvcyI7CisKKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgU0NFTkFSSU9fRklMRV9FWFRFTlNJT04gPSAiLnNjZW5hcmlvIjsKKworCXByaXZhdGUgc3RhdGljIGZpbmFsIFNpbXVsYXRpb25NYW5hZ2VyIE1BTkFHRVIgPSBTaW11bGF0aW9uTWFuYWdlcgorCQkJLmdldE1hbmFnZXIoKTsKKworCXByaXZhdGUgZmluYWwgSGVhZGxlc3NTaW11bGF0aW9uU3RhdHVzTG9nZ2VyIGxvZ2dlciA9IG5ldyBIZWFkbGVzc1NpbXVsYXRpb25TdGF0dXNMb2dnZXIoKTsKKworCXByaXZhdGUgZmluYWwgU2V0PFVSST4gc2NlbmFyaW9zVXJpc1RvUnVuID0gbmV3IEhhc2hTZXQ8VVJJPigpOworCisJcHJpdmF0ZSBib29sZWFuIGxvZyA9IGZhbHNlOworCisJcHJpdmF0ZSBTdHJpbmcgbG9nRGlyZWN0b3J5ID0gbnVsbDsKKworCS8qKgorCSAqIAorCSAqLworCXB1YmxpYyBIZWFkbGVzc1NpbXVsYXRpb25SdW5uZXIoYm9vbGVhbiBsb2csIFN0cmluZyBsb2dEaXJlY3RvcnkpIAorCXsKKwkJdGhpcy5sb2cgPSBsb2c7CisJCXRoaXMubG9nRGlyZWN0b3J5ID0gbG9nRGlyZWN0b3J5OworCisJCXJlZnJlc2hXb3Jrc3BhY2UoKTsKKwl9CisKKwkvKioKKwkgKiBSZWZyZXNoZXMgdGhlIHdvcmtzcGFjZSwgbG9hZGluZyBleHRlcm5hbCByZXNvdXJjZXMKKwkgKi8KKwlwcml2YXRlIHZvaWQgcmVmcmVzaFdvcmtzcGFjZSgpIAorCXsKKwkJV29ya3NwYWNlSW1wb3J0ZXIuaW1wb3J0UHJvamVjdHMoKTsKKwl9CisKKwkvKioKKwkgKiBDb2xsZWN0cyB0aGUgc2NlbmFyaW9zIGJhc2VkIG9uIGNvbW1hbmQgbGluZSBvcHRpb25zLCBjcmVhdGVzIGFuZCBydW5zIGEKKwkgKiBzaW11bGF0aW9uIGZvciBlYWNoIHNjZW5hcmlvLCBhbmQgd2FpdHMgZm9yIHRoZSBzaW11bGF0aW9ucyB0byBmaW5pc2guCisJICogCisJICogQHBhcmFtIGFyZ3MKKwkgKi8KKwlwdWJsaWMgdm9pZCBydW4oTWFwPFN0cmluZywgTGlzdDxTdHJpbmc+PiBhcmdzKSAKKwl7CisJCWNvbGxlY3RTY2VuYXJpb3NUb1J1bihhcmdzKTsKKwkJcnVuU2NlbmFyaW9zKCk7CisJCXdhaXRGb3JTaW11bGF0aW9ucygpOworCX0KKworCXByaXZhdGUgdm9pZCBjb2xsZWN0U2NlbmFyaW9zVG9SdW4oTWFwPFN0cmluZywgTGlzdDxTdHJpbmc+PiBhcmdzKSAKKwl7CisJCWlmIChhcmdzLmNvbnRhaW5zS2V5KCJ1cmkiKSkgeworCQkJYWRkU2NlbmFyaW9zRm9yVXJpcyhhcmdzLmdldCgidXJpIikpOworCQl9CisJCWlmIChhcmdzLmNvbnRhaW5zS2V5KCJwcm9qZWN0IikgJiYgYXJncy5nZXQoInByb2plY3QiKS5zaXplKCkgPiAwKSB7CisJCQlpZiAoYXJncy5jb250YWluc0tleSgic2NlbmFyaW8iKSkgeworCQkJCWFkZFNjZW5hcmlvcyhhcmdzLmdldCgicHJvamVjdCIpLmdldCgwKSwgYXJncy5nZXQoInNjZW5hcmlvIikpOworCQkJfSBlbHNlIHsKKwkJCQlhZGRTY2VuYXJpb3NGb3JQcm9qZWN0KGFyZ3MuZ2V0KCJwcm9qZWN0IikuZ2V0KDApKTsKKwkJCX0KKwkJfQorCisJfQorCisJcHJpdmF0ZSB2b2lkIGFkZFNjZW5hcmlvcyhTdHJpbmcgcHJvamVjdE5hbWUsIExpc3Q8U3RyaW5nPiBzY2VuYXJpb05hbWVzKSB7CisJCWZvciAoU3RyaW5nIHNjZW5hcmlvTmFtZSA6IHNjZW5hcmlvTmFtZXMpIHsKKwkJCWlmICghc2NlbmFyaW9OYW1lLmVuZHNXaXRoKFNDRU5BUklPX0ZJTEVfRVhURU5TSU9OKSkgeworCQkJCXNjZW5hcmlvTmFtZSA9IHNjZW5hcmlvTmFtZS5jb25jYXQoU0NFTkFSSU9fRklMRV9FWFRFTlNJT04pOworCQkJfQorCisJCQlzY2VuYXJpb3NVcmlzVG9SdW4uYWRkKGNyZWF0ZVVyaUZvclNjZW5hcmlvKHByb2plY3ROYW1lLAorCQkJCQlzY2VuYXJpb05hbWUpKTsKKwkJfQorCX0KKworCXByaXZhdGUgdm9pZCBhZGRTY2VuYXJpb3NGb3JVcmlzKExpc3Q8U3RyaW5nPiB1cmlzKSB7CisJCWZvciAoU3RyaW5nIHVyaSA6IHVyaXMpIHsKKwkJCXRyeSB7CisJCQkJc2NlbmFyaW9zVXJpc1RvUnVuLmFkZChVUkkuY3JlYXRlVVJJKHVyaSkpOworCQkJfSBjYXRjaCAoSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uIGlhZSkgeworCQkJCVN5c3RlbS5lcnIucHJpbnRsbigiVVJJICIgKyB1cmkgKyAiIGlzIGludmFsaWQiKTsKKwkJCX0KKwkJfQorCX0KKworCS8qKgorCSAqIEF0dGFjaCBhIGxvZ2dlciB0byB0aGUgc2ltdWxhdGlvbgorCSAqIAorCSAqIEBwYXJhbSBzaW0KKwkgKiAgICAgICAgICAgIFNpbXVsYXRpb24gdG8gYXR0YWNoIGxvZ2dlciB0bworCSAqLworCXByaXZhdGUgdm9pZCBhZGRMb2dnZXIoSVNpbXVsYXRpb24gc2ltKSB7CisJCVN0cmluZyBsb2dEaXIgPSB0aGlzLmxvZ0RpcmVjdG9yeTsKKwkJaWYgKGxvZ0RpciA9PSBudWxsKSB7CisJCQlsb2dEaXIgPSBVdGlsLmdldExvZ2dpbmdGb2xkZXIoc2ltLmdldFNjZW5hcmlvKCkuZ2V0VVJJKCkKKwkJCQkJLnRvU3RyaW5nKCkpOworCQl9CisKKwkJU3RyaW5nIHVuaXF1ZUlEID0gbnVsbDsKKwkJCisJCWlmIChzaW0gIT0gbnVsbCkgIHVuaXF1ZUlEID0gc2ltLmdldFVuaXF1ZUlEU3RyaW5nKCk7CisJCVN0cmluZyBkaXJlY3RvcnlOYW1lID0gbG9nRGlyICsgRmlsZS5zZXBhcmF0b3IrdW5pcXVlSUQgKyBGaWxlLnNlcGFyYXRvcjsKKwkJCisJCUZpbGUgZGlyID0gbmV3IEZpbGUoZGlyZWN0b3J5TmFtZSk7CisJCWlmKCFkaXIuZXhpc3RzKCkpCisJCQlkaXIubWtkaXJzKCk7CisJCQorCQlFTGlzdDxEZWNvcmF0b3I+IGRlY29yYXRvcnMgPSBzaW0uZ2V0U2NlbmFyaW8oKS5nZXRDYW5vbmljYWxHcmFwaCgpCisJCQkJLmdldERlY29yYXRvcnMoKTsKKwkJZm9yIChEZWNvcmF0b3IgZGVjIDogZGVjb3JhdG9ycykgeworCQkJaWYgKGRlYyBpbnN0YW5jZW9mIEludGVncmF0aW9uRGVjb3JhdG9yKSB7CisJCQkJQFN1cHByZXNzV2FybmluZ3MoInVudXNlZCIpCisJCQkJQ3VzdG9tQ1NWTG9nZ2VyIGxvZ2dlciA9IG5ldyBDdXN0b21DU1ZMb2dnZXIoZGlyZWN0b3J5TmFtZSwgc2ltLAorCQkJCQkJKEludGVncmF0aW9uRGVjb3JhdG9yKSBkZWMpOworCQkJfQorCQl9CisJfQorCisJcHJpdmF0ZSB2b2lkIHJ1blNjZW5hcmlvcygpIHsKKwkJU3lzdGVtLm91dC5wcmludGxuKCJTY2VuYXJpb3Mgc2VsZWN0ZWQ6ICIgKyBzY2VuYXJpb3NVcmlzVG9SdW4pOworCisJCS8vIExvb3AgdGhyb3VnaCB0aGUgbGlzdCBvZiBzY2VuYXJpbyBVUklzIGZvdW5kCisJCWZvciAoVVJJIHNjZW5hcmlvVXJpIDogc2NlbmFyaW9zVXJpc1RvUnVuKSB7CisJCQl0cnkgeworCQkJCS8vIEF0dGVtcHQgdG8gbG9hZCB0aGUgc2NlbmFyaW8gYnkgaXRzIFVSSQorCQkJCVN5c3RlbS5vdXQucHJpbnRsbigiQ3JlYXRpbmcgc2ltdWxhdGlvbiBmb3IgIiArIHNjZW5hcmlvVXJpKTsKKwkJCQlTY2VuYXJpbyBzaW11bGF0aW9uU2NlbmFyaW8gPSAoU2NlbmFyaW8pIFV0aWxpdHkKKwkJCQkJCS5nZXRJZGVudGlmaWFibGUoc2NlbmFyaW9VcmkpOworCQkJCWlmIChzaW11bGF0aW9uU2NlbmFyaW8gIT0gbnVsbCkgeworCQkJCQkvLyBDcmVhdGUgdGhlIHNpbXVsYXRpb24gZnJvbSB0aGUgc2NlbmFyaW8KKwkJCQkJSVNpbXVsYXRpb24gc2ltID0gTUFOQUdFUi5jcmVhdGVTaW11bGF0aW9uKAorCQkJCQkJCXNpbXVsYXRpb25TY2VuYXJpbywgbmV3IE51bGxQcm9ncmVzc01vbml0b3IoKSk7CisJCQkJCWlmIChsb2cpIHsKKwkJCQkJCWFkZExvZ2dlcihzaW0pOworCQkJCQl9CisKKwkJCQkJU3lzdGVtLm91dC5wcmludGxuKCJSdW5uaW5nIHNpbXVsYXRpb24gIgorCQkJCQkJCSsgc2ltLmdldFVuaXF1ZUlEU3RyaW5nKCkgKyAiIGZvciAiICsgc2NlbmFyaW9VcmkpOworCisJCQkJCS8vIEFkZCB0aGUgbG9jYWwgc2ltdWxhdGlvbiBsb2dnZXIKKwkJCQkJc2ltLmFkZFNpbXVsYXRpb25MaXN0ZW5lclN5bmMobG9nZ2VyKTsKKworCQkJCQkvLyBSdW4gdGhlIHNpbXVsYXRpb24KKwkJCQkJc2ltLnJ1bigpOworCQkJCX0gZWxzZSB7CisJCQkJCVN5c3RlbS5lcnIucHJpbnRsbigiU2NlbmFyaW8gIiArIHNjZW5hcmlvVXJpICsgIiBub3QgZm9uZCIpOworCQkJCX0KKwkJCX0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CisJCQkJU3lzdGVtLmVyci5wcmludGxuKCJFcnJvciBjcmVhdGluZyBzaW11bGF0aW9uIGZvciBVUkkgIgorCQkJCQkJKyBzY2VuYXJpb1VyaSk7CisJCQkJZS5wcmludFN0YWNrVHJhY2UoU3lzdGVtLmVycik7CisJCQl9CisJCX0KKwl9CisKKwlwcml2YXRlIHN0YXRpYyBVUkkgY3JlYXRlVXJpRm9yU2NlbmFyaW8oU3RyaW5nIHByb2plY3ROYW1lLAorCQkJU3RyaW5nIHNjZW5hcmlvTmFtZSkgeworCQlyZXR1cm4gVVJJLmNyZWF0ZVVSSSgicGxhdGZvcm06L3Jlc291cmNlLyIgKyBwcm9qZWN0TmFtZSArICIvIgorCQkJCSsgUFJPSkVDVF9TQ0VOQVJJT1NfRk9MREVSX05BTUUgKyAiLyIgKyBzY2VuYXJpb05hbWUpOworCX0KKworCXByaXZhdGUgdm9pZCBhZGRTY2VuYXJpb3NGb3JQcm9qZWN0KFN0cmluZyBwcm9qZWN0TmFtZSkgeworCQkvLyBHZXQgdGhlIHByb2plY3QgZnJvbSB0aGUgd29ya3NwYWNlCisJCUlQcm9qZWN0IHByb2plY3QgPSBnZXRQcm9qZWN0Rm9yTmFtZShwcm9qZWN0TmFtZSk7CisKKwkJdHJ5IHsKKwkJCS8vIEdldCB0aGUgInNjZW5hcmlvcyIgZm9sZGVyIGFuZCBjaGVjayBleGlzdGVuY2UKKwkJCUlGb2xkZXIgc2NuZWFyaW9zRm9sZGVyID0gcHJvamVjdAorCQkJCQkuZ2V0Rm9sZGVyKFBST0pFQ1RfU0NFTkFSSU9TX0ZPTERFUl9OQU1FKTsKKwkJCWlmIChzY25lYXJpb3NGb2xkZXIuZXhpc3RzKCkpIHsKKwkJCQkvLyBHZXQgdGhlIG1lbWJlcnMgb2YgdGhlICJzY2VuYXJpb3MiIGZvbGRlciBhbmQKKwkJCQlJUmVzb3VyY2VbXSBmb2xkZXJNZW1iZXJzID0gc2NuZWFyaW9zRm9sZGVyLm1lbWJlcnMoKTsKKwkJCQlmb3IgKElSZXNvdXJjZSByIDogZm9sZGVyTWVtYmVycykgeworCQkJCQkvLyBJZiBpcyBhIGZpbGUgdGhhdCBlbmRzIHdpdGggIi5zY2VuYXJpbyIsIHRoZW4gYWRkIHRvIHRoZQorCQkJCQkvLyBsaXN0IG9mIFVSSXMgdG8gcnVuCisJCQkJCWlmIChyLmdldE5hbWUoKS5lbmRzV2l0aChTQ0VOQVJJT19GSUxFX0VYVEVOU0lPTikpIHsKKwkJCQkJCS8vIEZvdW5kIGEgc2NlbmFyaW8KKwkJCQkJCXNjZW5hcmlvc1VyaXNUb1J1bi5hZGQoY3JlYXRlVXJpRm9yU2NlbmFyaW8oCisJCQkJCQkJCXByb2plY3ROYW1lLCByLmdldE5hbWUoKSkpOworCQkJCQl9CisJCQkJfQorCQkJfSBlbHNlIHsKKwkJCQlTeXN0ZW0uZXJyLnByaW50bG4oIlByb2plY3QgIiArIHByb2plY3ROYW1lCisJCQkJCQkrICIgaXMgbm90IGEgdmFsaWQgU1RFTSBwcm9qZWN0Iik7CisJCQl9CisJCX0gY2F0Y2ggKENvcmVFeGNlcHRpb24gY2UpIHsKKwkJCWNlLnByaW50U3RhY2tUcmFjZShTeXN0ZW0uZXJyKTsKKwkJfQorCX0KKworCXByaXZhdGUgc3RhdGljIElQcm9qZWN0IGdldFByb2plY3RGb3JOYW1lKFN0cmluZyBwcm9qZWN0TmFtZSkgeworCQlyZXR1cm4gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmdldFJvb3QoKS5nZXRQcm9qZWN0KHByb2plY3ROYW1lKTsKKwl9CisKKwlwcml2YXRlIHZvaWQgd2FpdEZvclNpbXVsYXRpb25zKCkgeworCQlmb3IgKElTaW11bGF0aW9uIHNpbSA6IE1BTkFHRVIuZ2V0QWN0aXZlU2ltdWxhdGlvbnMoKSkgeworCQkJdHJ5IHsKKwkJCQlzaW0uam9pbigpOworCQkJCXNpbS5zdG9wKCk7CisJCQl9IGNhdGNoIChJbnRlcnJ1cHRlZEV4Y2VwdGlvbiBlKSB7CisJCQkJU3lzdGVtLmVyci5wcmludGxuKCJTaW11bGF0aW9uIGludGVycnVwdGVkLiIpOworCQkJfQorCQl9CisJfQorCisJLyoqCisJICogU2ltdWxhdGlvbiBsaXN0ZW5lciB0aGF0IGxvZ3MgdGhlIG91dHB1dCBvZiBzaW11bGF0aW9ucyB0byBzdGFuZGFyZCBvdXQKKwkgKiBhdCB0aGUgZW5kIG9mIGVhY2ggY3ljbGUgYW5kIGF0IHRoZSBlbmQgb2YgdGhlIHNlcXVlbmNlLgorCSAqIAorCSAqLworCXByaXZhdGUgY2xhc3MgSGVhZGxlc3NTaW11bGF0aW9uU3RhdHVzTG9nZ2VyIGltcGxlbWVudHMKKwkJCUlTaW11bGF0aW9uTGlzdGVuZXJTeW5jIHsKKwkJSGVhZGxlc3NTaW11bGF0aW9uU3RhdHVzTG9nZ2VyKCkgeworCQkJLy8gbm90aGluZworCQl9CisKKwkJLyoKKwkJICogKG5vbi1KYXZhZG9jKQorCQkgKiAKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmpvYnMuc2ltdWxhdGlvbi5JU2ltdWxhdGlvbkxpc3RlbmVyU3luYyMKKwkJICogc2ltdWxhdGlvbkNoYW5nZWRTeW5jCisJCSAqIChvcmcuZWNsaXBzZS5zdGVtLmpvYnMuc2ltdWxhdGlvbi5TaW11bGF0aW9uRXZlbnQpCisJCSAqLworCQlwdWJsaWMgdm9pZCBzaW11bGF0aW9uQ2hhbmdlZFN5bmMoU2ltdWxhdGlvbkV2ZW50IGV2ZW50KSB7CisJCQlTZXF1ZW5jZXIgc2VxdWVuY2VyID0gZXZlbnQuZ2V0U2ltdWxhdGlvbigpLmdldFNjZW5hcmlvKCkKKwkJCQkJLmdldFNlcXVlbmNlcigpOworCisJCQlzd2l0Y2ggKGV2ZW50LmdldFNpbXVsYXRpb25TdGF0ZSgpKSB7CisJCQljYXNlIENPTVBMRVRFRF9DWUNMRToKKwkJCQlTeXN0ZW0ub3V0LnByaW50bG4oIlsiCisJCQkJCQkrIGV2ZW50LmdldFNpbXVsYXRpb24oKS5nZXRVbmlxdWVJRFN0cmluZygpICsgIl0gIgorCQkJCQkJKyBzZXF1ZW5jZXIuZ2V0V29ya0NvbXBsZXRlKCkgKyAiJSAiCisJCQkJCQkrIHNlcXVlbmNlci5nZXRDdXJyZW50VGltZSgpICsgIi8iCisJCQkJCQkrIHNlcXVlbmNlci5nZXRFbmRUaW1lKCkpOworCQkJCWJyZWFrOworCQkJY2FzZSBDT01QTEVURURfU0VRVUVOQ0U6CisJCQkJU3lzdGVtLm91dC5wcmludGxuKCJbIgorCQkJCQkJKyBldmVudC5nZXRTaW11bGF0aW9uKCkuZ2V0VW5pcXVlSURTdHJpbmcoKQorCQkJCQkJKyAiXSBGaW5pc2hlZCIpOworCQkJCWJyZWFrOworCQkJZGVmYXVsdDoKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCX0KK30KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5oZWFkbGVzcy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9oZWFkbGVzcy9Xb3Jrc3BhY2VJbXBvcnRlci5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLmhlYWRsZXNzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL2hlYWRsZXNzL1dvcmtzcGFjZUltcG9ydGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTFiYTI3YgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5oZWFkbGVzcy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9oZWFkbGVzcy9Xb3Jrc3BhY2VJbXBvcnRlci5qYXZhCkBAIC0wLDAgKzEsMTM2IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDExIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS51aS5oZWFkbGVzczsKKworaW1wb3J0IGphdmEuaW8uRmlsZTsKK2ltcG9ydCBqYXZhLmlvLkZpbGVGaWx0ZXI7CitpbXBvcnQgamF2YS51dGlsLkhhc2hTZXQ7CitpbXBvcnQgamF2YS51dGlsLlNldDsKK2ltcG9ydCBqYXZhLnV0aWwuY29uY3VycmVudC5TZW1hcGhvcmU7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdERlc2NyaXB0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklSZXNvdXJjZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JV29ya3NwYWNlUm9vdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5SZXNvdXJjZXNQbHVnaW47CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkNvcmVFeGNlcHRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQcm9ncmVzc01vbml0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLk51bGxQcm9ncmVzc01vbml0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBhdGg7CisKKy8qKgorICogU2ltcGxlIHByb2plY3QgaW1wb3J0ZXIgdGhhdCBzY2FucyB0aGUgcm9vdCB3b3Jrc3BhY2UKKyAqIGZvbGRlciwgZGV0ZXJtaW5lcyB3aGljaCBjaGlsZCBmb2xkZXJzIGFyZSB3ZWxsLWZvcm1lZAorICogcHJvamVjdHMgdGhhdCBoYXZlIG5vdCBiZWVuIGltcG9ydGVkLCBhbmQgaW1wb3J0cyB0aGUgcHJvamVjdAorICogYW5kIGZvbGRlciB0byB0aGUgd29ya3NwYWNlLgorICoKKyAqLworcHVibGljIGNsYXNzIFdvcmtzcGFjZUltcG9ydGVyIAoreworCXB1YmxpYyBzdGF0aWMgdm9pZCBpbXBvcnRQcm9qZWN0cygpCisJeworCQlyZWZyZXNoV29ya3NwYWNlKCk7CisJCQorCQlGaWxlW10gcHJvamVjdEZvbGRlcnMgPSBnZXRVbmltcG9ydGVkUHJvamVjdEZvbGRlcnNGcm9tUm9vdCgpOworCQlmb3IgKEZpbGUgcHJvamVjdEZvbGRlciA6IHByb2plY3RGb2xkZXJzKSB7CQkJCisJCQlpbXBvcnRQcm9qZWN0Rm9yRm9sZGVyKHByb2plY3RGb2xkZXIpOworCQl9CisJfQorCQorCXB1YmxpYyBzdGF0aWMgU2V0PEZpbGU+IGdldEV4aXN0aW5nUHJvamVjdEZvbGRlcnMoKQorCXsKKwkJU2V0PEZpbGU+IGZpbGVzID0gbmV3IEhhc2hTZXQ8RmlsZT4oKTsKKwkJSVByb2plY3RbXSBwcm9qZWN0cyA9IGdldFdvcmtzcGFjZVJvb3QoKS5nZXRQcm9qZWN0cygpOworCQlmb3IgKElQcm9qZWN0IHByb2plY3QgOiBwcm9qZWN0cykgeworCQkJZmlsZXMuYWRkKHByb2plY3QuZ2V0TG9jYXRpb24oKS50b0ZpbGUoKSk7CisJCX0KKwkJCisJCXJldHVybiBmaWxlczsKKwl9CisJCisJcHVibGljIHN0YXRpYyBJV29ya3NwYWNlUm9vdCBnZXRXb3Jrc3BhY2VSb290KCkKKwl7CisJCXJldHVybiBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuZ2V0Um9vdCgpOworCX0KKwkKKwlwdWJsaWMgc3RhdGljIEZpbGVbXSBnZXRVbmltcG9ydGVkUHJvamVjdEZvbGRlcnNGcm9tUm9vdCgpCisJeworCQlGaWxlW10gZmlsZXMgPSBudWxsOworCQlmaW5hbCBGaWxlIGRpciA9IGdldFdvcmtzcGFjZVJvb3QoKS5nZXRMb2NhdGlvbigpLnRvRmlsZSgpOworCQlmaW5hbCBTZXQ8RmlsZT4gcHJvamVjdERpcnMgPSBnZXRFeGlzdGluZ1Byb2plY3RGb2xkZXJzKCk7CisJCWlmIChkaXIgIT0gbnVsbCAmJiBkaXIuaXNEaXJlY3RvcnkoKSkgeworCQkJZmlsZXMgPSBkaXIubGlzdEZpbGVzKG5ldyBGaWxlRmlsdGVyKCkgeworCQkJCXB1YmxpYyBib29sZWFuIGFjY2VwdChGaWxlIGYpIHsKKwkJCQkJaWYgKCFmLmlzRGlyZWN0b3J5KCkgCisJCQkJCQkJfHwgZi5nZXROYW1lKCkuZXF1YWxzKCIubWV0YWRhdGEiKSAKKwkJCQkJCQl8fCBwcm9qZWN0RGlycy5jb250YWlucyhmKQorCQkJCQkJCXx8ICFnZXRNZXRhZGF0YUZpbGVGb3JQcm9qZWN0KGYpLmlzRmlsZSgpKSB7CisJCQkJCQlyZXR1cm4gZmFsc2U7CisJCQkJCX0KKwkJCQkJcmV0dXJuIHRydWU7CisJCQkJfX0pOworCisJCX0KKwkJcmV0dXJuIGZpbGVzOworCX0KKwkKKwlwdWJsaWMgc3RhdGljIEZpbGUgZ2V0TWV0YWRhdGFGaWxlRm9yUHJvamVjdChGaWxlIGRpcikKKwl7CisJCXJldHVybiBuZXcgRmlsZShkaXIsICIucHJvamVjdCIpOworCX0KKworCXB1YmxpYyBzdGF0aWMgSVByb2plY3QgaW1wb3J0UHJvamVjdEZvckZvbGRlcihGaWxlIGZvbGRlcikKKwl7CisJCXRyeSB7CisJCQlGaWxlIHByb2plY3RGaWxlID0gZ2V0TWV0YWRhdGFGaWxlRm9yUHJvamVjdChmb2xkZXIpOworCQkJCisJICAgICAgICBJUHJvamVjdERlc2NyaXB0aW9uIGRlc2NyaXB0aW9uID0gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmxvYWRQcm9qZWN0RGVzY3JpcHRpb24obmV3IFBhdGgocHJvamVjdEZpbGUuZ2V0QWJzb2x1dGVQYXRoKCkpKTsKKwkgICAgICAgIElQcm9qZWN0IHByb2plY3QgPSBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuZ2V0Um9vdCgpLmdldFByb2plY3QoZGVzY3JpcHRpb24uZ2V0TmFtZSgpKTsKKwkgICAgICAgIHByb2plY3QuY3JlYXRlKGRlc2NyaXB0aW9uLCBudWxsKTsKKwkgICAgICAgIHByb2plY3Qub3BlbihudWxsKTsKKwkgICAgICAgIAorCSAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbXBvcnRlZCBwcm9qZWN0ICIrIHByb2plY3QuZ2V0TmFtZSgpKTsKKwkgICAgICAgIAorCSAgICAgICAgcmV0dXJuIHByb2plY3Q7CisJCX0gY2F0Y2ggKENvcmVFeGNlcHRpb24gY2UpIHsKKwkJCS8vY2UucHJpbnRTdGFja1RyYWNlKFN5c3RlbS5lcnIpOworCQl9CisgICAgICAgIHJldHVybiBudWxsOworCX0KKwkKKwlwdWJsaWMgc3RhdGljIHZvaWQgcmVmcmVzaFdvcmtzcGFjZSgpCisJeworCQkKKwkJZmluYWwgU2VtYXBob3JlIHMgPSBuZXcgU2VtYXBob3JlKDEpOworCQkKKwkJdHJ5IHsgcy5hY3F1aXJlKCk7IH0gCisJCWNhdGNoIChJbnRlcnJ1cHRlZEV4Y2VwdGlvbiBlMSkgeyB9CisJCQorCQkKKwkJSVByb2dyZXNzTW9uaXRvciBwbSA9IG5ldyBOdWxsUHJvZ3Jlc3NNb25pdG9yKCkgeworCQkJcHVibGljIHZvaWQgZG9uZSgpIHsKKwkJCQlzLnJlbGVhc2UoKTsKKwkJCX0KKwkJfTsKKworCQl0cnkgeworCQkJUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmdldFJvb3QoKQorCQkJCS5yZWZyZXNoTG9jYWwoSVJlc291cmNlLkRFUFRIX0lORklOSVRFLCBwbSk7CisJCX0gY2F0Y2ggKENvcmVFeGNlcHRpb24gY2UpIHsKKwkJCQorCQl9CisJCQorCQl0cnkgeyBzLmFjcXVpcmUoKTsgfSAKKwkJY2F0Y2ggKEludGVycnVwdGVkRXhjZXB0aW9uIGUpIHsgfQorCQkKKwl9CisJCit9CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkubG9nZ2Vycy8uY2xhc3NwYXRoIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLmxvZ2dlcnMvLmNsYXNzcGF0aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZDMyYzgzCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLmxvZ2dlcnMvLmNsYXNzcGF0aApAQCAtMCwwICsxLDcgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8Y2xhc3NwYXRoPgorCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJjb24iIHBhdGg9Im9yZy5lY2xpcHNlLmpkdC5sYXVuY2hpbmcuSlJFX0NPTlRBSU5FUi9vcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwuZGVidWcudWkubGF1bmNoZXIuU3RhbmRhcmRWTVR5cGUvSmF2YVNFLTEuNiIvPgorCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJjb24iIHBhdGg9Im9yZy5lY2xpcHNlLnBkZS5jb3JlLnJlcXVpcmVkUGx1Z2lucyIvPgorCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJzcmMiIHBhdGg9InNyYyIvPgorCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJvdXRwdXQiIHBhdGg9ImJpbiIvPgorPC9jbGFzc3BhdGg+CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkubG9nZ2Vycy8ucHJvamVjdCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5sb2dnZXJzLy5wcm9qZWN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYwNmI2YTcKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkubG9nZ2Vycy8ucHJvamVjdApAQCAtMCwwICsxLDI4IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPHByb2plY3REZXNjcmlwdGlvbj4KKwk8bmFtZT5vcmcuZWNsaXBzZS5zdGVtLnVpLmxvZ2dlcnM8L25hbWU+CisJPGNvbW1lbnQ+PC9jb21tZW50PgorCTxwcm9qZWN0cz4KKwk8L3Byb2plY3RzPgorCTxidWlsZFNwZWM+CisJCTxidWlsZENvbW1hbmQ+CisJCQk8bmFtZT5vcmcuZWNsaXBzZS5qZHQuY29yZS5qYXZhYnVpbGRlcjwvbmFtZT4KKwkJCTxhcmd1bWVudHM+CisJCQk8L2FyZ3VtZW50cz4KKwkJPC9idWlsZENvbW1hbmQ+CisJCTxidWlsZENvbW1hbmQ+CisJCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuTWFuaWZlc3RCdWlsZGVyPC9uYW1lPgorCQkJPGFyZ3VtZW50cz4KKwkJCTwvYXJndW1lbnRzPgorCQk8L2J1aWxkQ29tbWFuZD4KKwkJPGJ1aWxkQ29tbWFuZD4KKwkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5TY2hlbWFCdWlsZGVyPC9uYW1lPgorCQkJPGFyZ3VtZW50cz4KKwkJCTwvYXJndW1lbnRzPgorCQk8L2J1aWxkQ29tbWFuZD4KKwk8L2J1aWxkU3BlYz4KKwk8bmF0dXJlcz4KKwkJPG5hdHVyZT5vcmcuZWNsaXBzZS5wZGUuUGx1Z2luTmF0dXJlPC9uYXR1cmU+CisJCTxuYXR1cmU+b3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YW5hdHVyZTwvbmF0dXJlPgorCTwvbmF0dXJlcz4KKzwvcHJvamVjdERlc2NyaXB0aW9uPgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLmxvZ2dlcnMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLmxvZ2dlcnMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYxMzNjYzgKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkubG9nZ2Vycy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMKQEAgLTAsMCArMSw4IEBACisjRnJpIEp1biAxMCAwOToxMjoxNSBQRFQgMjAxMQorZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvZGVnZW4uaW5saW5lSnNyQnl0ZWNvZGU9ZW5hYmxlZAorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29kZWdlbi50YXJnZXRQbGF0Zm9ybT0xLjYKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvbXBsaWFuY2U9MS42CitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmFzc2VydElkZW50aWZpZXI9ZXJyb3IKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZW51bUlkZW50aWZpZXI9ZXJyb3IKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnNvdXJjZT0xLjYKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5sb2dnZXJzL01FVEEtSU5GL01BTklGRVNULk1GIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLmxvZ2dlcnMvTUVUQS1JTkYvTUFOSUZFU1QuTUYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmYyZWJmZAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5sb2dnZXJzL01FVEEtSU5GL01BTklGRVNULk1GCkBAIC0wLDAgKzEsMjAgQEAKK01hbmlmZXN0LVZlcnNpb246IDEuMAorQnVuZGxlLU1hbmlmZXN0VmVyc2lvbjogMgorQnVuZGxlLU5hbWU6IFNURU0gTG9nZ2luZyBGYWNpbGl0eQorQnVuZGxlLVN5bWJvbGljTmFtZTogb3JnLmVjbGlwc2Uuc3RlbS51aS5sb2dnZXJzO3NpbmdsZXRvbjo9dHJ1ZQorQnVuZGxlLVZlcnNpb246IDEuMi4xCitCdW5kbGUtQWN0aXZhdG9yOiBvcmcuZWNsaXBzZS5zdGVtLnVpLmxvZ2dlcnMuQWN0aXZhdG9yCitCdW5kbGUtVmVuZG9yOiBFY2xpcHNlLm9yZworQnVuZGxlLUxvY2FsaXphdGlvbjogcGx1Z2luCitSZXF1aXJlLUJ1bmRsZTogb3JnLmVjbGlwc2UudWksCisgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLAorIG9yZy5lY2xpcHNlLnN0ZW0ubG9nZ2VycywKKyBvcmcuZWNsaXBzZS5zdGVtLmNvcmUsCisgb3JnLmVjbGlwc2Uuc3RlbS51aSwKKyBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcywKKyBvcmcuZWNsaXBzZS5jb3JlLmV4cHJlc3Npb25zCitCdW5kbGUtUmVxdWlyZWRFeGVjdXRpb25FbnZpcm9ubWVudDogSmF2YVNFLTEuNgorQnVuZGxlLUFjdGl2YXRpb25Qb2xpY3k6IGxhenkKK0V4cG9ydC1QYWNrYWdlOiBvcmcuZWNsaXBzZS5zdGVtLnVpLmxvZ2dlcnMsCisgb3JnLmVjbGlwc2Uuc3RlbS51aS52aWV3cywKKyBvcmcuZWNsaXBzZS5zdGVtLnVpLndpemFyZHMKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5sb2dnZXJzL2Jpbi9vcmcvZWNsaXBzZS9zdGVtL3VpL2FkYXB0ZXJzL2xvZ2dlcnByb3BlcnR5ZWRpdG9yL0xvZ2dlclByb3BlcnR5RWRpdG9yLmNsYXNzIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLmxvZ2dlcnMvYmluL29yZy9lY2xpcHNlL3N0ZW0vdWkvYWRhcHRlcnMvbG9nZ2VycHJvcGVydHllZGl0b3IvTG9nZ2VyUHJvcGVydHlFZGl0b3IuY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGMxNTE4NgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5sb2dnZXJzL2Jpbi9vcmcvZWNsaXBzZS9zdGVtL3VpL2FkYXB0ZXJzL2xvZ2dlcnByb3BlcnR5ZWRpdG9yL0xvZ2dlclByb3BlcnR5RWRpdG9yLmNsYXNzCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5sb2dnZXJzL2Jpbi9vcmcvZWNsaXBzZS9zdGVtL3VpL2FkYXB0ZXJzL2xvZ2dlcnByb3BlcnR5ZWRpdG9yL0xvZ2dlclByb3BlcnR5RWRpdG9yQWRhcHRlci5jbGFzcyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5sb2dnZXJzL2Jpbi9vcmcvZWNsaXBzZS9zdGVtL3VpL2FkYXB0ZXJzL2xvZ2dlcnByb3BlcnR5ZWRpdG9yL0xvZ2dlclByb3BlcnR5RWRpdG9yQWRhcHRlci5jbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MWEzNjJiCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLmxvZ2dlcnMvYmluL29yZy9lY2xpcHNlL3N0ZW0vdWkvYWRhcHRlcnMvbG9nZ2VycHJvcGVydHllZGl0b3IvTG9nZ2VyUHJvcGVydHlFZGl0b3JBZGFwdGVyLmNsYXNzCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5sb2dnZXJzL2Jpbi9vcmcvZWNsaXBzZS9zdGVtL3VpL2FkYXB0ZXJzL2xvZ2dlcnByb3BlcnR5ZWRpdG9yL0xvZ2dlclByb3BlcnR5RWRpdG9yQWRhcHRlckZhY3RvcnkkTG9nZ2VyUHJvcGVydHlFZGl0b3JBZGFwdGVyRmFjdG9yeUltcGwuY2xhc3MgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkubG9nZ2Vycy9iaW4vb3JnL2VjbGlwc2Uvc3RlbS91aS9hZGFwdGVycy9sb2dnZXJwcm9wZXJ0eWVkaXRvci9Mb2dnZXJQcm9wZXJ0eUVkaXRvckFkYXB0ZXJGYWN0b3J5JExvZ2dlclByb3BlcnR5RWRpdG9yQWRhcHRlckZhY3RvcnlJbXBsLmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYyZDA5OTEKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkubG9nZ2Vycy9iaW4vb3JnL2VjbGlwc2Uvc3RlbS91aS9hZGFwdGVycy9sb2dnZXJwcm9wZXJ0eWVkaXRvci9Mb2dnZXJQcm9wZXJ0eUVkaXRvckFkYXB0ZXJGYWN0b3J5JExvZ2dlclByb3BlcnR5RWRpdG9yQWRhcHRlckZhY3RvcnlJbXBsLmNsYXNzCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5sb2dnZXJzL2Jpbi9vcmcvZWNsaXBzZS9zdGVtL3VpL2FkYXB0ZXJzL2xvZ2dlcnByb3BlcnR5ZWRpdG9yL0xvZ2dlclByb3BlcnR5RWRpdG9yQWRhcHRlckZhY3RvcnkuY2xhc3MgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkubG9nZ2Vycy9iaW4vb3JnL2VjbGlwc2Uvc3RlbS91aS9hZGFwdGVycy9sb2dnZXJwcm9wZXJ0eWVkaXRvci9Mb2dnZXJQcm9wZXJ0eUVkaXRvckFkYXB0ZXJGYWN0b3J5LmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJiNTZjMmEKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkubG9nZ2Vycy9iaW4vb3JnL2VjbGlwc2Uvc3RlbS91aS9hZGFwdGVycy9sb2dnZXJwcm9wZXJ0eWVkaXRvci9Mb2dnZXJQcm9wZXJ0eUVkaXRvckFkYXB0ZXJGYWN0b3J5LmNsYXNzCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5sb2dnZXJzL2Jpbi9vcmcvZWNsaXBzZS9zdGVtL3VpL2FkYXB0ZXJzL2xvZ2dlcnByb3BlcnR5ZWRpdG9yL1NpbXVsYXRpb25Mb2dnZXJQcm9wZXJ0eUVkaXRvci5jbGFzcyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5sb2dnZXJzL2Jpbi9vcmcvZWNsaXBzZS9zdGVtL3VpL2FkYXB0ZXJzL2xvZ2dlcnByb3BlcnR5ZWRpdG9yL1NpbXVsYXRpb25Mb2dnZXJQcm9wZXJ0eUVkaXRvci5jbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZjRhMzAzCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLmxvZ2dlcnMvYmluL29yZy9lY2xpcHNlL3N0ZW0vdWkvYWRhcHRlcnMvbG9nZ2VycHJvcGVydHllZGl0b3IvU2ltdWxhdGlvbkxvZ2dlclByb3BlcnR5RWRpdG9yLmNsYXNzCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5sb2dnZXJzL2Jpbi9vcmcvZWNsaXBzZS9zdGVtL3VpL2FkYXB0ZXJzL2xvZ2dlcnByb3BlcnR5ZWRpdG9yL1NpbXVsYXRpb25Mb2dnZXJQcm9wZXJ0eUVkaXRvckFkYXB0ZXIuY2xhc3MgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkubG9nZ2Vycy9iaW4vb3JnL2VjbGlwc2Uvc3RlbS91aS9hZGFwdGVycy9sb2dnZXJwcm9wZXJ0eWVkaXRvci9TaW11bGF0aW9uTG9nZ2VyUHJvcGVydHlFZGl0b3JBZGFwdGVyLmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYxM2JlNmYKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkubG9nZ2Vycy9iaW4vb3JnL2VjbGlwc2Uvc3RlbS91aS9hZGFwdGVycy9sb2dnZXJwcm9wZXJ0eWVkaXRvci9TaW11bGF0aW9uTG9nZ2VyUHJvcGVydHlFZGl0b3JBZGFwdGVyLmNsYXNzCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5sb2dnZXJzL2Jpbi9vcmcvZWNsaXBzZS9zdGVtL3VpL2FkYXB0ZXJzL2xvZ2dlcnByb3BlcnR5ZWRpdG9yL1NpbXVsYXRpb25Mb2dnZXJQcm9wZXJ0eUVkaXRvckFkYXB0ZXJGYWN0b3J5LmNsYXNzIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLmxvZ2dlcnMvYmluL29yZy9lY2xpcHNlL3N0ZW0vdWkvYWRhcHRlcnMvbG9nZ2VycHJvcGVydHllZGl0b3IvU2ltdWxhdGlvbkxvZ2dlclByb3BlcnR5RWRpdG9yQWRhcHRlckZhY3RvcnkuY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGVlNWFjYgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5sb2dnZXJzL2Jpbi9vcmcvZWNsaXBzZS9zdGVtL3VpL2FkYXB0ZXJzL2xvZ2dlcnByb3BlcnR5ZWRpdG9yL1NpbXVsYXRpb25Mb2dnZXJQcm9wZXJ0eUVkaXRvckFkYXB0ZXJGYWN0b3J5LmNsYXNzCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5sb2dnZXJzL2Jpbi9vcmcvZWNsaXBzZS9zdGVtL3VpL2FkYXB0ZXJzL2xvZ2dlcnByb3BlcnR5ZWRpdG9yL1NpbXVsYXRpb25Mb2dnZXJQcm9wZXJ0eVN0cmluZ1Byb3ZpZGVyQWRhcHRlckZhY3RvcnkkU2ltdWxhdGlvbkxvZ2dlclByb3BlcnR5U3RyaW5nUHJvdmlkZXJBZGFwdGVyLmNsYXNzIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLmxvZ2dlcnMvYmluL29yZy9lY2xpcHNlL3N0ZW0vdWkvYWRhcHRlcnMvbG9nZ2VycHJvcGVydHllZGl0b3IvU2ltdWxhdGlvbkxvZ2dlclByb3BlcnR5U3RyaW5nUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSRTaW11bGF0aW9uTG9nZ2VyUHJvcGVydHlTdHJpbmdQcm92aWRlckFkYXB0ZXIuY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzk5NjQ4YgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5sb2dnZXJzL2Jpbi9vcmcvZWNsaXBzZS9zdGVtL3VpL2FkYXB0ZXJzL2xvZ2dlcnByb3BlcnR5ZWRpdG9yL1NpbXVsYXRpb25Mb2dnZXJQcm9wZXJ0eVN0cmluZ1Byb3ZpZGVyQWRhcHRlckZhY3RvcnkkU2ltdWxhdGlvbkxvZ2dlclByb3BlcnR5U3RyaW5nUHJvdmlkZXJBZGFwdGVyLmNsYXNzCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5sb2dnZXJzL2Jpbi9vcmcvZWNsaXBzZS9zdGVtL3VpL2FkYXB0ZXJzL2xvZ2dlcnByb3BlcnR5ZWRpdG9yL1NpbXVsYXRpb25Mb2dnZXJQcm9wZXJ0eVN0cmluZ1Byb3ZpZGVyQWRhcHRlckZhY3RvcnkuY2xhc3MgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkubG9nZ2Vycy9iaW4vb3JnL2VjbGlwc2Uvc3RlbS91aS9hZGFwdGVycy9sb2dnZXJwcm9wZXJ0eWVkaXRvci9TaW11bGF0aW9uTG9nZ2VyUHJvcGVydHlTdHJpbmdQcm92aWRlckFkYXB0ZXJGYWN0b3J5LmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMxOWQyMTAKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkubG9nZ2Vycy9iaW4vb3JnL2VjbGlwc2Uvc3RlbS91aS9hZGFwdGVycy9sb2dnZXJwcm9wZXJ0eWVkaXRvci9TaW11bGF0aW9uTG9nZ2VyUHJvcGVydHlTdHJpbmdQcm92aWRlckFkYXB0ZXJGYWN0b3J5LmNsYXNzCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5sb2dnZXJzL2Jpbi9vcmcvZWNsaXBzZS9zdGVtL3VpL2hhbmRsZXJzL0xvZ2dlckNvbW1hbmRIYW5kbGVyJERpc2FibGVMb2dnZXJDb21tYW5kSGFuZGxlci5jbGFzcyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5sb2dnZXJzL2Jpbi9vcmcvZWNsaXBzZS9zdGVtL3VpL2hhbmRsZXJzL0xvZ2dlckNvbW1hbmRIYW5kbGVyJERpc2FibGVMb2dnZXJDb21tYW5kSGFuZGxlci5jbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43N2QyMThkCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLmxvZ2dlcnMvYmluL29yZy9lY2xpcHNlL3N0ZW0vdWkvaGFuZGxlcnMvTG9nZ2VyQ29tbWFuZEhhbmRsZXIkRGlzYWJsZUxvZ2dlckNvbW1hbmRIYW5kbGVyLmNsYXNzCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5sb2dnZXJzL2Jpbi9vcmcvZWNsaXBzZS9zdGVtL3VpL2hhbmRsZXJzL0xvZ2dlckNvbW1hbmRIYW5kbGVyJEVuYWJsZUxvZ2dlckNvbW1hbmRIYW5kbGVyLmNsYXNzIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLmxvZ2dlcnMvYmluL29yZy9lY2xpcHNlL3N0ZW0vdWkvaGFuZGxlcnMvTG9nZ2VyQ29tbWFuZEhhbmRsZXIkRW5hYmxlTG9nZ2VyQ29tbWFuZEhhbmRsZXIuY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzZkNTVjOQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5sb2dnZXJzL2Jpbi9vcmcvZWNsaXBzZS9zdGVtL3VpL2hhbmRsZXJzL0xvZ2dlckNvbW1hbmRIYW5kbGVyJEVuYWJsZUxvZ2dlckNvbW1hbmRIYW5kbGVyLmNsYXNzCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5sb2dnZXJzL2Jpbi9vcmcvZWNsaXBzZS9zdGVtL3VpL2hhbmRsZXJzL0xvZ2dlckNvbW1hbmRIYW5kbGVyLmNsYXNzIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLmxvZ2dlcnMvYmluL29yZy9lY2xpcHNlL3N0ZW0vdWkvaGFuZGxlcnMvTG9nZ2VyQ29tbWFuZEhhbmRsZXIuY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDQzODhkYQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5sb2dnZXJzL2Jpbi9vcmcvZWNsaXBzZS9zdGVtL3VpL2hhbmRsZXJzL0xvZ2dlckNvbW1hbmRIYW5kbGVyLmNsYXNzCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5sb2dnZXJzL2Jpbi9vcmcvZWNsaXBzZS9zdGVtL3VpL2hhbmRsZXJzL0xvZ2dlclByb3BlcnR5VGVzdGVyLmNsYXNzIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLmxvZ2dlcnMvYmluL29yZy9lY2xpcHNlL3N0ZW0vdWkvaGFuZGxlcnMvTG9nZ2VyUHJvcGVydHlUZXN0ZXIuY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODZkZmZmMAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5sb2dnZXJzL2Jpbi9vcmcvZWNsaXBzZS9zdGVtL3VpL2hhbmRsZXJzL0xvZ2dlclByb3BlcnR5VGVzdGVyLmNsYXNzCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5sb2dnZXJzL2Jpbi9vcmcvZWNsaXBzZS9zdGVtL3VpL2xvZ2dlcnMvQWN0aXZhdG9yLmNsYXNzIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLmxvZ2dlcnMvYmluL29yZy9lY2xpcHNlL3N0ZW0vdWkvbG9nZ2Vycy9BY3RpdmF0b3IuY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTJlOTZkMAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5sb2dnZXJzL2Jpbi9vcmcvZWNsaXBzZS9zdGVtL3VpL2xvZ2dlcnMvQWN0aXZhdG9yLmNsYXNzCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5sb2dnZXJzL2Jpbi9vcmcvZWNsaXBzZS9zdGVtL3VpL3ZpZXdzL0FjdGl2ZUxvZ2dlcnNWaWV3JDEuY2xhc3MgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkubG9nZ2Vycy9iaW4vb3JnL2VjbGlwc2Uvc3RlbS91aS92aWV3cy9BY3RpdmVMb2dnZXJzVmlldyQxLmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFkNmFhZTIKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkubG9nZ2Vycy9iaW4vb3JnL2VjbGlwc2Uvc3RlbS91aS92aWV3cy9BY3RpdmVMb2dnZXJzVmlldyQxLmNsYXNzCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5sb2dnZXJzL2Jpbi9vcmcvZWNsaXBzZS9zdGVtL3VpL3ZpZXdzL0FjdGl2ZUxvZ2dlcnNWaWV3JEFjdGl2ZUxvZ2dlcnNDb250ZW50UHJvdmlkZXIuY2xhc3MgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkubG9nZ2Vycy9iaW4vb3JnL2VjbGlwc2Uvc3RlbS91aS92aWV3cy9BY3RpdmVMb2dnZXJzVmlldyRBY3RpdmVMb2dnZXJzQ29udGVudFByb3ZpZGVyLmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJkM2U5N2MKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkubG9nZ2Vycy9iaW4vb3JnL2VjbGlwc2Uvc3RlbS91aS92aWV3cy9BY3RpdmVMb2dnZXJzVmlldyRBY3RpdmVMb2dnZXJzQ29udGVudFByb3ZpZGVyLmNsYXNzCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5sb2dnZXJzL2Jpbi9vcmcvZWNsaXBzZS9zdGVtL3VpL3ZpZXdzL0FjdGl2ZUxvZ2dlcnNWaWV3JEFjdGl2ZUxvZ2dlcnNMYWJlbFByb3ZpZGVyLmNsYXNzIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLmxvZ2dlcnMvYmluL29yZy9lY2xpcHNlL3N0ZW0vdWkvdmlld3MvQWN0aXZlTG9nZ2Vyc1ZpZXckQWN0aXZlTG9nZ2Vyc0xhYmVsUHJvdmlkZXIuY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzQyZmUzMAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5sb2dnZXJzL2Jpbi9vcmcvZWNsaXBzZS9zdGVtL3VpL3ZpZXdzL0FjdGl2ZUxvZ2dlcnNWaWV3JEFjdGl2ZUxvZ2dlcnNMYWJlbFByb3ZpZGVyLmNsYXNzCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5sb2dnZXJzL2Jpbi9vcmcvZWNsaXBzZS9zdGVtL3VpL3ZpZXdzL0FjdGl2ZUxvZ2dlcnNWaWV3LmNsYXNzIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLmxvZ2dlcnMvYmluL29yZy9lY2xpcHNlL3N0ZW0vdWkvdmlld3MvQWN0aXZlTG9nZ2Vyc1ZpZXcuY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGFlNGFjZAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5sb2dnZXJzL2Jpbi9vcmcvZWNsaXBzZS9zdGVtL3VpL3ZpZXdzL0FjdGl2ZUxvZ2dlcnNWaWV3LmNsYXNzCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5sb2dnZXJzL2Jpbi9vcmcvZWNsaXBzZS9zdGVtL3VpL3dpemFyZHMvTG9nZ2VyRGVmaW5pdGlvbkNvbnRyb2wkMS5jbGFzcyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5sb2dnZXJzL2Jpbi9vcmcvZWNsaXBzZS9zdGVtL3VpL3dpemFyZHMvTG9nZ2VyRGVmaW5pdGlvbkNvbnRyb2wkMS5jbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ODUyNTFjCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLmxvZ2dlcnMvYmluL29yZy9lY2xpcHNlL3N0ZW0vdWkvd2l6YXJkcy9Mb2dnZXJEZWZpbml0aW9uQ29udHJvbCQxLmNsYXNzCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5sb2dnZXJzL2Jpbi9vcmcvZWNsaXBzZS9zdGVtL3VpL3dpemFyZHMvTG9nZ2VyRGVmaW5pdGlvbkNvbnRyb2wuY2xhc3MgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkubG9nZ2Vycy9iaW4vb3JnL2VjbGlwc2Uvc3RlbS91aS93aXphcmRzL0xvZ2dlckRlZmluaXRpb25Db250cm9sLmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJkMDE3YjgKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkubG9nZ2Vycy9iaW4vb3JnL2VjbGlwc2Uvc3RlbS91aS93aXphcmRzL0xvZ2dlckRlZmluaXRpb25Db250cm9sLmNsYXNzCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5sb2dnZXJzL2Jpbi9vcmcvZWNsaXBzZS9zdGVtL3VpL3dpemFyZHMvTG9nZ2VyUHJvcGVydHlDb21wb3NpdGUuY2xhc3MgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkubG9nZ2Vycy9iaW4vb3JnL2VjbGlwc2Uvc3RlbS91aS93aXphcmRzL0xvZ2dlclByb3BlcnR5Q29tcG9zaXRlLmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRjZjIxNGMKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkubG9nZ2Vycy9iaW4vb3JnL2VjbGlwc2Uvc3RlbS91aS93aXphcmRzL0xvZ2dlclByb3BlcnR5Q29tcG9zaXRlLmNsYXNzCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5sb2dnZXJzL2Jpbi9vcmcvZWNsaXBzZS9zdGVtL3VpL3dpemFyZHMvTG9nZ2VyV2l6YXJkTWVzc2FnZXMuY2xhc3MgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkubG9nZ2Vycy9iaW4vb3JnL2VjbGlwc2Uvc3RlbS91aS93aXphcmRzL0xvZ2dlcldpemFyZE1lc3NhZ2VzLmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNkZmU3ZDcKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkubG9nZ2Vycy9iaW4vb3JnL2VjbGlwc2Uvc3RlbS91aS93aXphcmRzL0xvZ2dlcldpemFyZE1lc3NhZ2VzLmNsYXNzCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5sb2dnZXJzL2Jpbi9vcmcvZWNsaXBzZS9zdGVtL3VpL3dpemFyZHMvTmV3TG9nZ2VyV2l6YXJkJDEuY2xhc3MgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkubG9nZ2Vycy9iaW4vb3JnL2VjbGlwc2Uvc3RlbS91aS93aXphcmRzL05ld0xvZ2dlcldpemFyZCQxLmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIyMjJkZjAKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkubG9nZ2Vycy9iaW4vb3JnL2VjbGlwc2Uvc3RlbS91aS93aXphcmRzL05ld0xvZ2dlcldpemFyZCQxLmNsYXNzCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5sb2dnZXJzL2Jpbi9vcmcvZWNsaXBzZS9zdGVtL3VpL3dpemFyZHMvTmV3TG9nZ2VyV2l6YXJkJE5ld0xvZ2dlclBhZ2UuY2xhc3MgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkubG9nZ2Vycy9iaW4vb3JnL2VjbGlwc2Uvc3RlbS91aS93aXphcmRzL05ld0xvZ2dlcldpemFyZCROZXdMb2dnZXJQYWdlLmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRmMDM4NTIKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkubG9nZ2Vycy9iaW4vb3JnL2VjbGlwc2Uvc3RlbS91aS93aXphcmRzL05ld0xvZ2dlcldpemFyZCROZXdMb2dnZXJQYWdlLmNsYXNzCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5sb2dnZXJzL2Jpbi9vcmcvZWNsaXBzZS9zdGVtL3VpL3dpemFyZHMvTmV3TG9nZ2VyV2l6YXJkJE5ld0xvZ2dlcldpemFyZENvbW1hbmRIYW5kbGVyLmNsYXNzIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLmxvZ2dlcnMvYmluL29yZy9lY2xpcHNlL3N0ZW0vdWkvd2l6YXJkcy9OZXdMb2dnZXJXaXphcmQkTmV3TG9nZ2VyV2l6YXJkQ29tbWFuZEhhbmRsZXIuY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGE0YjBhYQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5sb2dnZXJzL2Jpbi9vcmcvZWNsaXBzZS9zdGVtL3VpL3dpemFyZHMvTmV3TG9nZ2VyV2l6YXJkJE5ld0xvZ2dlcldpemFyZENvbW1hbmRIYW5kbGVyLmNsYXNzCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5sb2dnZXJzL2Jpbi9vcmcvZWNsaXBzZS9zdGVtL3VpL3dpemFyZHMvTmV3TG9nZ2VyV2l6YXJkLmNsYXNzIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLmxvZ2dlcnMvYmluL29yZy9lY2xpcHNlL3N0ZW0vdWkvd2l6YXJkcy9OZXdMb2dnZXJXaXphcmQuY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjgwNjQ5NQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5sb2dnZXJzL2Jpbi9vcmcvZWNsaXBzZS9zdGVtL3VpL3dpemFyZHMvTmV3TG9nZ2VyV2l6YXJkLmNsYXNzCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5sb2dnZXJzL2Jpbi9vcmcvZWNsaXBzZS9zdGVtL3VpL3dpemFyZHMvbG9nZ2Vyd2l6YXJkbWVzc2FnZXMucHJvcGVydGllcyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5sb2dnZXJzL2Jpbi9vcmcvZWNsaXBzZS9zdGVtL3VpL3dpemFyZHMvbG9nZ2Vyd2l6YXJkbWVzc2FnZXMucHJvcGVydGllcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40OTdhNjUyCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLmxvZ2dlcnMvYmluL29yZy9lY2xpcHNlL3N0ZW0vdWkvd2l6YXJkcy9sb2dnZXJ3aXphcmRtZXNzYWdlcy5wcm9wZXJ0aWVzCkBAIC0wLDAgKzEsMTEyIEBACisjLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyMgKiBDb3B5cmlnaHQgKGMpIDIwMDgsMjAxMSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyMgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisjICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisjICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyMgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorIyAqCisjICogQ29udHJpYnV0b3JzOgorIyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworIyBOZXcgTG9nZ2VyIFdpemFyZAorTkxvZ2dlcldpei53aXphcmRfdGl0bGUgPSBOZXcgTG9nZ2VyCitOTG9nZ2VyV2l6LnBhZ2VfdGl0bGUgPSBMb2dnZXIKK05Mb2dnZXJXaXoucGFnZV9kZXNjcmlwdGlvbiA9IERlZmluZSBhIG5ldyBsb2dnZXIgaW4gYSBwcm9qZWN0CisKKworTERDLjA9TG9nZ2VyIFR5cGU6CitMREMuMT1Mb2dnZXIgaW1wbGVtZW50YXRpb24gdHlwZQorTERDLjI9Y2xhc3MKK0xEQy4zPVByb2JsZW0gY3JlYXRpbmcgTG9nZ2VyIGluc3RhbmNlCitMREMuND1Qcm9ibGVtIGNyZWF0aW5nIER1YmxpbiBDb3JlIGluc3RhbmNlCisKKworIyBOZXcgRGlzZWFzZSBXaXphcmQKKworTkRpc2Vhc2VXaXoud2l6YXJkX3RpdGxlID0gTmV3IERpc2Vhc2UKK05EaXNlYXNlV2l6LnBhZ2VfdGl0bGUgPSBEaXNlYXNlCitORGlzZWFzZVdpei5wYWdlX2Rlc2NyaXB0aW9uID0gRGVmaW5lIGEgbmV3IGRpc2Vhc2UgaW4gYSBwcm9qZWN0LgorTkRpc2Vhc2VXaXouRENfREVTQ1JJUFRJT04gPSBEaXNlYXNlICJ7MH0iCisKKyMgTmV3IEluZmVjdG9yIFdpemFyZAorTkluZmVjdG9yV2l6LndpemFyZF90aXRsZSA9IE5ldyBJbmZlY3Rpb24vSW5vY3VsYXRpb24gUG9pbnQKK05JbmZlY3Rvcldpei5wYWdlX3RpdGxlID0gSW5mZWN0b3IvSW5vY3VsYXRvcgorTkluZmVjdG9yV2l6LnBhZ2VfZGVzY3JpcHRpb24gPSBEZWZpbmUgYSBuZXcgaW5mZWN0aW9uIG9yIGlub2N1bGF0aW9uIHBvaW50IGluIGEgcHJvamVjdC4KK05JbmZlY3Rvcldpei5EQ19ERVNDUklQVElPTiA9IEluZmVjdCB7MH0gInsxfSIgcG9wdWxhdGlvbiBtZW1iZXJzIHdpdGggdGhlIGRpc2Vhc2UgInsyfSIgYXQgdGhlIGxvY2F0aW9uICJ7M30iICh7NH0pLgorTkluZmVjdG9yV2l6LkRDX0RFU0NSSVBUSU9OMiA9IElub2N1bGF0ZSB7MH0gInsxfSIgcGVyY2VudCBvZiBwb3B1bGF0aW9uIGFnYWluc3QgdGhlIGRpc2Vhc2UgInsyfSIgYXQgdGhlIGxvY2F0aW9uICJ7M30iICh7NH0pLgorTkluZmVjdG9yV2l6LkRDX0RFU0NSSVBUSU9OX0ZST01fRklMRSA9IEluZmVjdCBmcm9tIGxvZyBmaWxlcyBhdCB7MH0KK05JbmZlY3Rvcldpei5EQ19ERVNDUklQVElPTjJfRlJPTV9GSUxFID0gSW5vY3VsYXRlIGZyb20gbG9nIGZpbGVzIGF0IHswfQorTkluZmVjdG9yV2l6LmluZmVjdCA9IENyZWF0ZSBhIE5ldyBJbmZlY3RvcgorTkluZmVjdG9yV2l6Lmlub2N1bGF0ZSA9IENyZWF0ZSBhIE5ldyBJbm9jdWxhdG9yCisKK05EaXNlYXNlV2l6LmRpc2Vhc2VfZm9sZGVyID0gRGlzZWFzZXMKKworTkRpeldpekVycjA9TWlzc2luZyBEaXNlYXNlIE5hbWUuCitORGl6V2l6RXJyMT1NaXNzaW5nIFBvcHVsYXRpb24gaWRlbnRpZmllci4KK05EaXpXaXpFcnIyPU1pc3NpbmcgVGltZSBQZXJpb2QuCitORGl6V2l6RXJyMz1UaGUgVGltZSBQZXJpb2QgaXMgaW52YWxpZC4KK05EaXpXaXpFcnI0PU1pc3NpbmcgQmFja2dyb3VuZCBNb3J0YWxpdHkgUmF0ZS4KK05EaXpXaXpFcnI1PUJhY2tncm91bmQgbW9ydGFsaXR5IHJhdGUgaXMgaW52YWxpZC4KK05EaXpXaXpFcnI2PU1pc3NpbmcgVHJhbnNtaXNzaW9uIFJhdGUuCitORGl6V2l6RXJyNz1UaGUgVHJhbnNtaXNzaW9uIFJhdGUgaXMgaW52YWxpZC4KK05EaXpXaXpFcnI4PU1pc3NpbmcgTm9uLUxpbmVhcml0eSBDb2VmZmljaWVudC4KK05EaXpXaXpFcnI5PVRoZSBOb24tTGluZWFyaXR5IENvZWZmaWNpZW50IGlzIGludmFsaWQuCitORGl6V2l6RXJyMTA9TWlzc2luZyBJbmZlY3Rpb3VzIFJlY292ZXJ5IFJhdGUuCitORGl6V2l6RXJyMTE9VGhlIEluZmVjdGlvdXMgUmVjb3ZlcnkgUmF0ZSBpcyBpbnZhbGlkLgorTkRpeldpekVycjEyPU1pc3NpbmcgSW5mZWN0aW91cyBNb3J0YWxpdHkgUmF0ZS4KK05EaXpXaXpFcnIxMz1UaGUgSW5mZWN0aW91cyBNb3J0YWxpdHkgUmF0ZSBpcyBpbnZhbGlkLgorTkRpeldpekVycjE2PU1pc3NpbmcgSW1tdW5pdHkgTG9zcyBSYXRlLgorTkRpeldpekVycjE3PVRoZSBJbW11bml0eSBMb3NzIFJhdGUgaXMgaW52YWxpZC4KK05EaXpXaXpFcnIxOD1NaXNzaW5nIEluY3ViYXRpb24gUmF0ZS4KK05EaXpXaXpFcnIxOT1UaGUgSW5jdWJhdGlvbiBSYXRlIFJhdGUgaXMgaW52YWxpZC4KK05EaXpXaXpFcnIyMD1EaXJlY3Rvcnkgb3IgRmlsZSBkb2VzIG5vdCBleGlzdC4KK05EaXpXaXpFcnIyMT1JbnZhbGlkIERhdGEgVHlwZS4KK05EaXpXaXpFcnIyMj1NaXNzaW5nIHJlbGF0aXZlIHRvbGVyYW5jZQorTkRpeldpekVycjIzPVJlbGF0aXZlIHRvbGVyYW5jZSBpcyBsZXNzIG9yIGVxdWFsIHRvIDAgb3IgdG9vIGxhcmdlCitETVBDMT1EaXNlYXNlIE1vZGVsIFByb3BlcnR5IENvbnRyb2wKK0RNUEMyPU1pc3NpbmcgRGlzZWFzZSBQcm9wZXJ0eSBFZGl0b3IgZm9yICIKK0REQy4wPURpc2Vhc2UgTW9kZWw6CitEREMuMT1VbmRlcmx5aW5nIE1hdGhlbWF0aWNhbCBEaXNlYXNlIE1vZGVsCitEREMuMj1jbGFzcworRERDLjM9UHJvYmxlbSBjcmVhdGluZyBEaXNlYXNlIE1vZGVsIGluc3RhbmNlCitEREMuND1Qcm9ibGVtIGNyZWF0aW5nIER1YmxpbiBDb3JlIGluc3RhbmNlCitOSW5mV2l6RXJyb3IuMT1NaXNzaW5nIHRoZSBuYW1lIG9mIHRoZSBkaXNlYXNlIGNhdXNpbmcgdGhlIGluZmVjdGlvbi4KK05JbmZXaXpFcnJvci4yPU1pc3NpbmcgdGhlIG5hbWUgb2YgdGhlIHBvcHVsYXRpb24gdG8gaW5mZWN0LgorTkluZldpekVycm9yLjM9VGhlIG51bWJlciBvZiBpbmZlY3Rpb25zIGlzIG1pc3NpbmcuCitOSW5mV2l6RXJyb3IuND1UaGUgbnVtYmVyIG9mIGluZmVjdGlvbnMgbXVzdCBiZSBncmVhdGVyIHRoYW4gemVyby4KK05JbmZXaXpFcnJvci41PVRoZSBudW1iZXIgb2YgaW5mZWN0aW9ucyBpcyBpbnZhbGlkLgorTkluZldpekVycm9yLjY9TWlzc2luZyB0aGUgbG9jYXRpb24gc3BlY2lmaWNhdGlvbgorTkluZldpekVycm9yLjc9VGhlIG51bWJlciBvZiBpbmZlY3Rpb25zIHdhcyBub3QgYSB2YWxpZCBudW1iZXIKK05JbmZXaXpFcnJvci44PVBlcmNlbnRhZ2Ugbm90IFZhbGlkLiBNdXN0IGJlIDwgMTAwLjAlCitOSW5mV2l6RXJyb3IuOT1FbnRlciBhIGZvbGRlciBjb250YWluaW5nIFNURU0gbG9nIGZpbGVzCitOSW5mV2l6RXJyb3IuMTA9Rm9sZGVyIGRvZXMgbm90IGV4aXN0IQorTkluZldpekVycm9yLjExPUJhZCByb3cgbnVtYmVyCisKK05JbmZXaXpETj1EaXNlYXNlIE5hbWU6CitOSW5mV2l6RE5UVD1UaGUgbmFtZSBvZiB0aGUgRGlzZWFzZSB0byB0aGF0IGluZmVjdHMgKGUuZy4sIEluZmx1ZW56YSkuCitOSW5mV2l6UE9QPVBvcHVsYXRpb246CitOSW5mV2l6UE9QVFQ9VGhlIG5hbWUgb2YgdGhlIHBvcHVsYXRpb24gaW5mZWN0ZWQgKGUuZy4sIGh1bWFuKS4KK05JbmZXaXpOSUlORj1OdW1iZXIgdG8gaW5mZWN0OgorTkluZldpek5JSU5PPU51bWJlciB0byBpbm9jdWxhdGU6CitOSW5mV2l6UElJTkY9UGVyY2VudCB0byBpbmZlY3Q6CitOSW5mV2l6UElJTk89UGVyY2VudCB0byBpbm9jdWxhdGU6CitOSW5mV2l6LmFic251bWJlcj1Vc2UgYW4gYWJzb2x1dGUgbnVtYmVyCitOSW5mV2l6LnBlcmNlbnRhZ2U9VXNlIGEgcGVyY2VudGFnZQorTkluZldpek5JVFQ9VGhlIG51bWJlciBvZiBwb3B1bGF0aW9uIG1lbWJlcnMgdG8gYmUgaW5mZWN0ZWQuCitOSW5mV2l6UGlja0xvYz1TZWxlY3QgTG9jYXRpb24KK05JbmZXaXpQaWNrTG9jVGl0bGU9U2VsZWN0IGEgbG9jYXRpb24gdG8gaW5mZWN0IChvciBpbm9jdWxhdGUpCitOSW5mV2l6SVNPSz1Mb2NhdGlvbiBJU08gS2V5OgorTkluZmVjdG9yV2l6LmVudGVyPUVudGVyIG1hbnVhbGx5IChhYm92ZSkKK05JbmZlY3Rvcldpei5pbXBvcnQ9SW1wb3J0IGZyb20gU1RFTSBsb2cgZmlsZXMgKGJlbG93KQorTkluZldpekltcG9ydD1TZWxlY3QgU1RFTSBMb2cgRm9sZGVyCitOSW5mV2l6TG9nRGlyTGFiZWw9TG9nIEZvbGRlcgorTkluZldpekxvZ0RpckRlc2M9U2VsZWN0IGEgU1RFTSBsb2cgZmlsZSBmb2xkZXIKK05JbmZlY3Rvcldpei5maXJzdHJvdz1GaXJzdCByb3cKK05JbmZlY3Rvcldpei5sYXN0cm93PUxhc3Qgcm93CitOSW5mZWN0b3JXaXouc2VsZWN0ZWRyb3c9U2VsZWN0ZWQgcm93CisKK0FMRy4wPVNvbHZlciBhbGdvcml0aG06CitBTEcuMT1VbmRlcmx5aW5nIGRpZmZlcmVudGlhbCBlcXVhdGlvbiBzb2x2ZXIgYWxnb3JpdGhtCitBTEcuMj1GaW5pdGUgRGlmZmVyZW5jZQorQUxHLjM9UnVuZ2UgS3V0dGEgQWRhcHRpdmUgU3RlcCBTaXplCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkubG9nZ2Vycy9idWlsZC5wcm9wZXJ0aWVzIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLmxvZ2dlcnMvYnVpbGQucHJvcGVydGllcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMDkyNjViCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLmxvZ2dlcnMvYnVpbGQucHJvcGVydGllcwpAQCAtMCwwICsxLDcgQEAKK3NvdXJjZS4uID0gc3JjLworb3V0cHV0Li4gPSBiaW4vCitiaW4uaW5jbHVkZXMgPSBNRVRBLUlORi8sXAorICAgICAgICAgICAgICAgLixcCisgICAgICAgICAgICAgICBwbHVnaW4ueG1sLFwKKyAgICAgICAgICAgICAgIHBsdWdpbi5wcm9wZXJ0aWVzLFwKKyAgICAgICAgICAgICAgIGljb25zLwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5sb2dnZXJzL2ljb25zL2ZpbGUuZ2lmIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLmxvZ2dlcnMvaWNvbnMvZmlsZS5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2NjYzZhNwotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5sb2dnZXJzL2ljb25zL2ZpbGUuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5sb2dnZXJzL3BsdWdpbi5wcm9wZXJ0aWVzIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLmxvZ2dlcnMvcGx1Z2luLnByb3BlcnRpZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjJmNTRjYgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5sb2dnZXJzL3BsdWdpbi5wcm9wZXJ0aWVzCkBAIC0wLDAgKzEsMTYgQEAKKworcGx1Z2luTmFtZSA9IFNURU0gTG9nZ2luZyBVdGlsaXR5Citwcm92aWRlck5hbWUgPSBFY2xpcHNlLm9yZworCisjIEFjdGlvbnMKKworCitfVUlfTG9nZ2VyTW9kZWxXaXphcmRfbGFiZWwgPSBMb2dnZXIKK19VSV9Mb2dnZXJNb2RlbFdpemFyZF9kZXNjcmlwdGlvbiA9IE5ldyBMb2dnZXIKKworX1VJX0xvZ2dlcl9Qcm9wZXJ0eSA9IEFjdGl2ZSBMb2dnZXJzCitfVUlfTG9nZ2luZyA9IExvZ2dpbmcKKworCitfVUlfTG9nZ2VyV2l6YXJkX2xhYmVsID0gTG9nZ2VyCitfVUlfTG9nZ2VyV2l6YXJkX2Rlc2NyaXB0aW9uID0gQ3JlYXRlIGEgbmV3IExvZ2dlcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLmxvZ2dlcnMvcGx1Z2luLnhtbCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5sb2dnZXJzL3BsdWdpbi54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmVkZTliYQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5sb2dnZXJzL3BsdWdpbi54bWwKQEAgLTAsMCArMSwxOTggQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8P2VjbGlwc2UgdmVyc2lvbj0iMy4yIj8+Cis8cGx1Z2luPgorCisgICA8ZXh0ZW5zaW9uCisgICAgICAgICBwb2ludD0ib3JnLmVjbGlwc2UudWkudmlld3MiPgorICAgICAgPHZpZXcKKyAgICAgICAgICAgIGFsbG93TXVsdGlwbGU9ImZhbHNlIgorICAgICAgICAgICAgY2F0ZWdvcnk9Im9yZy5lY2xpcHNlLnN0ZW0udWkudmlld3MiCisgICAgICAgICAgICBjbGFzcz0ib3JnLmVjbGlwc2Uuc3RlbS51aS52aWV3cy5BY3RpdmVMb2dnZXJzVmlldyIKKyAgICAgICAgICAgIGljb249Imljb25zL2ZpbGUuZ2lmIgorICAgICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLnN0ZW0udWkudmlld3MuYWN0aXZlbG9nZ2VycyIKKyAgICAgICAgICAgIG5hbWU9IiVfVUlfTG9nZ2VyX1Byb3BlcnR5IiAvPgorICAgPC9leHRlbnNpb24+CisgICAKKyAgIAorICAgPGV4dGVuc2lvbgorICAgICAgICAgcG9pbnQ9Im9yZy5lY2xpcHNlLnVpLm5ld1dpemFyZHMiPgorICAgICAgPHdpemFyZAorICAgICAgICAgICAgY2F0ZWdvcnk9Im9yZy5lY2xpcHNlLnN0ZW0udWkud2l6YXJkcy5zdGVtY2F0ZWdvcnkiCisgICAgICAgICAgICBjbGFzcz0ib3JnLmVjbGlwc2Uuc3RlbS51aS53aXphcmRzLk5ld0xvZ2dlcldpemFyZCIKKyAgICAgICAgICAgIGhhc1BhZ2VzPSJ0cnVlIgorICAgICAgICAgICAgaWNvbj0iaWNvbnMvZnVsbC9jdXN0b21vYmoxNi9Mb2dnZXIuZ2lmIgorICAgICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLnN0ZW0udWkud2l6YXJkcy5uZXdsb2dnZXIiCisgICAgICAgICAgICBuYW1lPSIlX1VJX0xvZ2dlck1vZGVsV2l6YXJkX2xhYmVsIi8+CisgICAgICAgICAgICAgICAgICAKKyAgIDwvZXh0ZW5zaW9uPgorICAgCisgICAgPGV4dGVuc2lvbgorICAgICAgICBwb2ludD0ib3JnLmVjbGlwc2UudWkubWVudXMiPiAKKyAgIDxtZW51Q29udHJpYnV0aW9uCisgICAgICAgICAgICBsb2NhdGlvblVSST0icG9wdXA6b3JnLmVjbGlwc2Uuc3RlbS51aS52aWV3cy5hY3RpdmVsb2dnZXJzIj4KKyAgICAgICAgIDxjb21tYW5kCisgICAgICAgICAgICAgICBjb21tYW5kSWQ9Im9yZy5lY2xpcHNlLnN0ZW0udWkubG9nZ2Vycy5lbmFibGUiCisgICAgICAgICAgICAgICBtbmVtb25pYz0iRW5hYmxlIExvZ2dlciI+CisgICAgICAgICAJPHZpc2libGVXaGVuCisgICAgICAgICAgICAgICAgIGNoZWNrRW5hYmxlZD0idHJ1ZSI+CisgICAgICAgICAgICAgIDxyZWZlcmVuY2UKKyAgICAgICAgICAgICAgICAgICAgZGVmaW5pdGlvbklkPSJvcmcuZWNsaXBzZS5zdGVtLnVpLmxvZ2dlcnMubG9nZ2VyRGlzYWJsZWQiPgorICAgICAgICAgICAgICA8L3JlZmVyZW5jZT4KKyAgICAgICAgICAgPC92aXNpYmxlV2hlbj4gICAgICAgICAgICAgICAKKyAgICAgICAgIDwvY29tbWFuZD4KKyAgICAgICAgIAorICAgICAgPC9tZW51Q29udHJpYnV0aW9uPgorICAgICAgICA8bWVudUNvbnRyaWJ1dGlvbgorICAgICAgICAgICAgbG9jYXRpb25VUkk9InBvcHVwOm9yZy5lY2xpcHNlLnN0ZW0udWkudmlld3MuYWN0aXZlbG9nZ2VycyI+CisgICAgICAgICA8Y29tbWFuZAorICAgICAgICAgICAgICAgY29tbWFuZElkPSJvcmcuZWNsaXBzZS5zdGVtLnVpLmxvZ2dlcnMuZGlzYWJsZSIKKyAgICAgICAgICAgICAgIG1uZW1vbmljPSJEaXNhYmxlIExvZ2dlciI+CisgICAgICAgICAgIAk8dmlzaWJsZVdoZW4KKyAgICAgICAgICAgICAgICAgY2hlY2tFbmFibGVkPSJ0cnVlIj4KKyAgICAgICAgICAgICAgPHJlZmVyZW5jZQorICAgICAgICAgICAgICAgICAgICBkZWZpbml0aW9uSWQ9Im9yZy5lY2xpcHNlLnN0ZW0udWkubG9nZ2Vycy5sb2dnZXJFbmFibGVkIj4KKyAgICAgICAgICAgICAgPC9yZWZlcmVuY2U+CisgICAgICAgICAgIDwvdmlzaWJsZVdoZW4+CisgICAgICAgICA8L2NvbW1hbmQ+CisgICAgICA8L21lbnVDb250cmlidXRpb24+IAorICAgICAgCisgICAgICA8L2V4dGVuc2lvbj4gCisgICAgICAKKyAgIAorICAgPGV4dGVuc2lvbgorICAgICAgICBwb2ludD0ib3JnLmVjbGlwc2UudWkuY29tbWFuZHMiPgorICAgICA8Y29tbWFuZAorICAgICAgICAgICBjYXRlZ29yeUlkPSJvcmcuZWNsaXBzZS5zdGVtLnVpLndpemFyZHMiCisgICAgICAgICAgIGRlZmF1bHRIYW5kbGVyPSJvcmcuZWNsaXBzZS5zdGVtLnVpLndpemFyZHMuTmV3TG9nZ2VyV2l6YXJkJE5ld0xvZ2dlcldpemFyZENvbW1hbmRIYW5kbGVyIgorICAgICAgICAgICBkZXNjcmlwdGlvbj0iJV9VSV9Mb2dnZXJNb2RlbFdpemFyZF9kZXNjcmlwdGlvbiIKKyAgICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLnN0ZW0udWkuY29tbWFuZC53aXoubG9nZ2VyIgorICAgICAgICAgICBuYW1lPSIlX1VJX0xvZ2dlck1vZGVsV2l6YXJkX2xhYmVsIj4gCisgICAgIDwvY29tbWFuZD4KKyAgICAgCisJPGNvbW1hbmQKKyAgICAgICAgICAgZGVmYXVsdEhhbmRsZXI9Im9yZy5lY2xpcHNlLnN0ZW0udWkuaGFuZGxlcnMuTG9nZ2VyQ29tbWFuZEhhbmRsZXIkRW5hYmxlTG9nZ2VyQ29tbWFuZEhhbmRsZXIiCisgICAgICAgICAgIGRlc2NyaXB0aW9uPSIlX1VJX05ld19TVEVNX1Byb2plY3RfV2l6YXJkX1RUICIKKyAgICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLnN0ZW0udWkubG9nZ2Vycy5lbmFibGUiCisgICAgICAgICAgIG5hbWU9IkVuYWJsZSBMb2dnZXIiPgorCisgICAgIDwvY29tbWFuZD4KKyAgICAgCisJPGNvbW1hbmQKKyAgICAgICAgICAgZGVmYXVsdEhhbmRsZXI9Im9yZy5lY2xpcHNlLnN0ZW0udWkuaGFuZGxlcnMuTG9nZ2VyQ29tbWFuZEhhbmRsZXIkRGlzYWJsZUxvZ2dlckNvbW1hbmRIYW5kbGVyIgorICAgICAgICAgICBkZXNjcmlwdGlvbj0iJV9VSV9OZXdfU1RFTV9Qcm9qZWN0X1dpemFyZF9UVCAiCisgICAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5zdGVtLnVpLmxvZ2dlcnMuZGlzYWJsZSIKKyAgICAgICAgICAgbmFtZT0iRGlzYWJsZSBMb2dnZXIiPiAgICAgICAgCisgICAgIDwvY29tbWFuZD4gICAgIAorICAgPC9leHRlbnNpb24+ICAgCisgCisgIDxleHRlbnNpb24KKyAgICAgICAgcG9pbnQ9Im9yZy5lY2xpcHNlLnVpLm1lbnVzIj4gICAKKyAgICAgIDxtZW51Q29udHJpYnV0aW9uCisgICAgICAgICAgICBsb2NhdGlvblVSST0idG9vbGJhcjpvcmcuZWNsaXBzZS51aS5tYWluLnRvb2xiYXI/YWZ0ZXI9YWRkaXRpb25zIj4KKyAgICAgICAgIDx0b29sYmFyCisgICAgICAgICAgICAgICBpZD0ib3JnLmVjbGlwc2Uuc3RlbS51aS50b29sYmFyLm5ld3dpemFyZHMiPgorICAgICAgICAgICAgPGNvbW1hbmQKKyAgICAgICAgICAgICAgICAgIGNvbW1hbmRJZD0ib3JnLmVjbGlwc2Uuc3RlbS51aS5jb21tYW5kLndpei5sb2dnZXIiCisgICAgICAgICAgICAgICAgICBpY29uPSJpY29ucy9mdWxsL2N1c3RvbW9iajE2L0xvZ2dlci5naWYiCisgICAgICAgICAgICAgICAgICBsYWJlbD0iJV9VSV9Mb2dnZXJXaXphcmRfbGFiZWwiCisgICAgICAgICAgICAgICAgICBzdHlsZT0icHVzaCIKKyAgICAgICAgICAgICAgICAgIHRvb2x0aXA9IiVfVUlfTG9nZ2VyV2l6YXJkX2Rlc2NyaXB0aW9uICI+CisgICAgICAgICAgICA8L2NvbW1hbmQ+CisgICAJCSA8L3Rvb2xiYXI+CisgICAJPC9tZW51Q29udHJpYnV0aW9uPgorICA8L2V4dGVuc2lvbj4KKyAKKyAgIDxleHRlbnNpb24KKyAgICAgICAgcG9pbnQ9Im9yZy5lY2xpcHNlLmNvcmUuZXhwcmVzc2lvbnMucHJvcGVydHlUZXN0ZXJzIj4KKyAgICAgPHByb3BlcnR5VGVzdGVyCisgICAgICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS5zdGVtLnVpLmhhbmRsZXJzLkxvZ2dlclByb3BlcnR5VGVzdGVyIgorICAgICAgICAgICBpZD0ib3JnLmVjbGlwc2Uuc3RlbS51aS5sb2dnZXJzLmxvZ2dlcmVwcm9wZXJ0eXRlc3RlciIKKyAgICAgICAgICAgbmFtZXNwYWNlPSJvcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMuc2ltdWxhdGlvbmxvZ2dlciIKKyAgICAgICAgICAgcHJvcGVydGllcz0iZW5hYmxlZCIKKyAgICAgICAgICAgdHlwZT0ib3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzLlNpbXVsYXRpb25Mb2dnZXIiPgorICAgICA8L3Byb3BlcnR5VGVzdGVyPgorICA8L2V4dGVuc2lvbj4KKyAKKyAKKyAgPGV4dGVuc2lvbgorICAgICAgICBwb2ludD0ib3JnLmVjbGlwc2UuY29yZS5leHByZXNzaW9ucy5kZWZpbml0aW9ucyI+CisgCisgICA8ZGVmaW5pdGlvbgorICAgICAgICAgICBpZD0ib3JnLmVjbGlwc2Uuc3RlbS51aS5sb2dnZXJzLmxvZ2dlckVuYWJsZWQiPgorICAgICAgICA8d2l0aAorICAgICAgICAgICAgICB2YXJpYWJsZT0ic2VsZWN0aW9uIj4KKyAgICAgICAgICAgPGl0ZXJhdGUKKyAgICAgICAgICAgICAgICAgaWZFbXB0eT0iZmFsc2UiCisgICAgICAgICAgICAgICAgIG9wZXJhdG9yPSJhbmQiPgorICAgICAgICAgICAgICA8YWRhcHQKKyAgICAgICAgICAgICAgICAgICAgdHlwZT0ib3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzLlNpbXVsYXRpb25Mb2dnZXIiPgorICAgICAgICAgICAgICAgICA8dGVzdAorICAgICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eT0ib3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzLnNpbXVsYXRpb25sb2dnZXIuZW5hYmxlZCI+CisgICAgICAgICAgICAgICAgIDwvdGVzdD4KKyAgICAgICAgICAgICAgPC9hZGFwdD4KKyAgICAgICAgICAgPC9pdGVyYXRlPgorICAgICAgICA8L3dpdGg+CisgICAgIDwvZGVmaW5pdGlvbj4KKyAgICAgPGRlZmluaXRpb24KKyAgICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLnN0ZW0udWkubG9nZ2Vycy5sb2dnZXJEaXNhYmxlZCI+CisgICAgICAgIDx3aXRoCisgICAgICAgICAgICAgIHZhcmlhYmxlPSJzZWxlY3Rpb24iPgorICAgICAgICAgICA8aXRlcmF0ZQorICAgICAgICAgICAgICAgICBpZkVtcHR5PSJmYWxzZSIKKyAgICAgICAgICAgICAgICAgb3BlcmF0b3I9ImFuZCI+CisgICAgICAgICAgICAgIDxhZGFwdAorICAgICAgICAgICAgICAgICAgICB0eXBlPSJvcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMuU2ltdWxhdGlvbkxvZ2dlciI+CisgICAgICAgICAgICAgICAgIDxub3Q+CisgICAgICAgICAgICAgICAgICAgIDx0ZXN0CisgICAgICAgICAgICAgICAgICAgICAgICAgIHByb3BlcnR5PSJvcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMuc2ltdWxhdGlvbmxvZ2dlci5lbmFibGVkIj4KKyAgICAgICAgICAgICAgICAgICAgPC90ZXN0PgorICAgICAgICAgICAgICAgICA8L25vdD4KKyAgICAgICAgICAgICAgPC9hZGFwdD4KKyAgICAgICAgICAgPC9pdGVyYXRlPgorICAgICAgICA8L3dpdGg+CisgICAgIDwvZGVmaW5pdGlvbj4KKyAKKyAKKyAgICAgPGRlZmluaXRpb24KKyAgICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLnN0ZW0udWkubG9nZ2Vycy5pc2xvZ2dlciI+CisgICAgICAgIDx3aXRoCisgICAgICAgICAgICAgIHZhcmlhYmxlPSJzZWxlY3Rpb24iPgorICAgICAgICAgICA8aXRlcmF0ZQorICAgICAgICAgICAgICAgICBpZkVtcHR5PSJmYWxzZSIKKyAgICAgICAgICAgICAgICAgb3BlcmF0b3I9ImFuZCI+CisgICAgICAgICAgICAgIDxhZGFwdCB0eXBlPSJvcmcuZWNsaXBzZS5zdGVtLmxvZ2dlcnMuU2ltdWxhdGlvbkxvZ2dlciI+CisgICAgICAgICAgICAgIDwvYWRhcHQ+CisgICAgICAgICAgIDwvaXRlcmF0ZT4KKyAgICAgICAgPC93aXRoPgorICAgICA8L2RlZmluaXRpb24+CisgICAgIAorICAgPC9leHRlbnNpb24+CisgICAKKyAgIDwhLS08ZXh0ZW5zaW9uCisgICAgICAgICBwb2ludD0ib3JnLmVjbGlwc2UudWkucG9wdXBNZW51cyI+CisgICAgICA8dmlld2VyQ29udHJpYnV0aW9uCisgICAgICAgICAgICBpZD0ib3JnLmVjbGlwc2Uuc3RlbS51dGlsLmxvZ2dlcnMudmlld3MiCisgICAgICAgICAgICB0YXJnZXRJRD0ib3JnLmVjbGlwc2Uuc3RlbS51aS52aWV3cy5nZW9ncmFwaGljLm1hcC5jb250ZXh0Ij4KKyAgICAgICAgIDxhY3Rpb24KKyAgICAgICAgICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS5zdGVtLnV0aWwubG9nZ2Vycy52aWV3cy5SZXBvcnRzQ29udGV4dE1lbnVBY3Rpb24iCisgICAgICAgICAgICAgICBpZD0iQ1NWTG9nZ2VyIgorICAgICAgICAgICAgICAgbGFiZWw9IiVfVUlfQ1NWX0xvZ2dlciIKKyAgICAgICAgICAgICAgIG1lbnViYXJQYXRoPSJyZXBvcnRzL2FkZGl0aW9ucyIKKyAgICAgICAgICAgICAgIHN0YXRlPSJ0cnVlIj4KKyAgICAgICAgIDwvYWN0aW9uPgorICAgICAgPC92aWV3ZXJDb250cmlidXRpb24+CisgICA8L2V4dGVuc2lvbj4KKworCisKKwk8ZXh0ZW5zaW9uCisgICAgICAgICBwb2ludD0ib3JnLmVjbGlwc2UudWkucHJlZmVyZW5jZVBhZ2VzIj4KKyAgICAgIDxwYWdlCisgICAgIAkgICAgY2F0ZWdvcnk9Im9yZy5lY2xpcHNlLnN0ZW0udWkucHJlZmVyZW5jZXMuU1RFTVByZWZlcmVuY2VQYWdlIgorICAgICAgICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLnN0ZW0udXRpbC5sb2dnZXJzLnByZWZlcmVuY2VzLkxvZ2dpbmdQcmVmZXJlbmNlUGFnZSIKKyAgICAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5zdGVtLnV0aWwubG9nZ2Vycy5wcmVmZXJlbmNlcy5Mb2dnaW5nUHJlZmVyZW5jZVBhZ2UiCisgICAgICAgICAgICBuYW1lPSIlX1VJX0xvZ2dpbmciLz4KKyAgICA8L2V4dGVuc2lvbj4KKy0tPgorCis8L3BsdWdpbj4KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5sb2dnZXJzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL2FkYXB0ZXJzL2xvZ2dlcnByb3BlcnR5ZWRpdG9yL0xvZ2dlclByb3BlcnR5RWRpdG9yLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkubG9nZ2Vycy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9hZGFwdGVycy9sb2dnZXJwcm9wZXJ0eWVkaXRvci9Mb2dnZXJQcm9wZXJ0eUVkaXRvci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZjNWM5ZmUKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkubG9nZ2Vycy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9hZGFwdGVycy9sb2dnZXJwcm9wZXJ0eWVkaXRvci9Mb2dnZXJQcm9wZXJ0eUVkaXRvci5qYXZhCkBAIC0wLDAgKzEsMTAxIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA4LDIwMTEgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnVpLmFkYXB0ZXJzLmxvZ2dlcnByb3BlcnR5ZWRpdG9yOworCitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3Q7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzczsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRVN0cnVjdHVyYWxGZWF0dXJlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5sb2dnZXIuTG9nZ2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy5TaW11bGF0aW9uTG9nZ2VyUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnVpLmVkaXRvcnMuR2VuZXJpY1Byb3BlcnR5RWRpdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuTW9kaWZ5TGlzdGVuZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlOworCithYnN0cmFjdCBwdWJsaWMgY2xhc3MgTG9nZ2VyUHJvcGVydHlFZGl0b3IgZXh0ZW5kcyBHZW5lcmljUHJvcGVydHlFZGl0b3IgeworCisJLyoqCisJICogQHBhcmFtIGZlYXR1cmUKKwkgKiBAcmV0dXJuIDxjb2RlPnRydWU8L2NvZGU+IGlmIHRoZSBmZWF0dXJlIGlzIGEgZHVibGluIGNvcmUgZmVhdHVyZSB0aGF0CisJICogICAgICAgICBpcyBzcGVjaWZpZWQgYnkgYSB1c2VyLgorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBib29sZWFuIGlzVXNlclNwZWNpZmllZFByb3BlcnR5KGZpbmFsIEVTdHJ1Y3R1cmFsRmVhdHVyZSBmZWF0dXJlKSB7CisJCWJvb2xlYW4gcmV0VmFsdWUgPSBmYWxzZTsKKwkJZmluYWwgRUNsYXNzIGNvbnRhaW5pbmdDbGFzcyA9IGZlYXR1cmUuZ2V0RUNvbnRhaW5pbmdDbGFzcygpOworCQlpZiAoY29udGFpbmluZ0NsYXNzLmVxdWFscyhTaW11bGF0aW9uTG9nZ2VyUGFja2FnZS5lSU5TVEFOQ0UuZ2V0U2ltdWxhdGlvbkxvZ2dlcigpKQorCQkJCXx8IGNvbnRhaW5pbmdDbGFzcy5nZXRFQWxsU3VwZXJUeXBlcygpLmNvbnRhaW5zKAorCQkJCQkJU2ltdWxhdGlvbkxvZ2dlclBhY2thZ2UuZUlOU1RBTkNFLmdldFNpbXVsYXRpb25Mb2dnZXIoKSkpIHsKKworCQkJcmV0VmFsdWUgPSB0cnVlOworCQl9IAorCQlyZXR1cm4gcmV0VmFsdWU7CisJfSAKKworCisJcHVibGljIExvZ2dlclByb3BlcnR5RWRpdG9yKENvbXBvc2l0ZSBwYXJlbnQsIGludCBzdHlsZSwgSVByb2plY3QgcHJvamVjdCkgeworCQlzdXBlcihwYXJlbnQsc3R5bGUsIHByb2plY3QpOworCX0KKworCS8qKgorCSAqIENyZWF0ZSB0aGUgY29tcG9zaXRlCisJICogCisJICogQHBhcmFtIHBhcmVudAorCSAqIEBwYXJhbSBzdHlsZQorCSAqIEBwYXJhbSBwcm9qZWN0VmFsaWRhdG9yCisJICovCisJcHVibGljIExvZ2dlclByb3BlcnR5RWRpdG9yKGZpbmFsIENvbXBvc2l0ZSBwYXJlbnQsIGZpbmFsIGludCBzdHlsZSwKKwkJCWZpbmFsIExvZ2dlciBkaXNlYXNlTW9kZWwsCisJCQlmaW5hbCBNb2RpZnlMaXN0ZW5lciBwcm9qZWN0VmFsaWRhdG9yLCBJUHJvamVjdCBwcm9qZWN0KSB7CisJCXN1cGVyKHBhcmVudCwgc3R5bGUsIGRpc2Vhc2VNb2RlbCwgcHJvamVjdFZhbGlkYXRvciwgcHJvamVjdCk7CisJfQorCQorCXB1YmxpYyB2b2lkIHBvcHVsYXRlKExvZ2dlciBsb2dnZXIpIHsKKy8vCQlmb3IgKGZpbmFsIE1hcC5FbnRyeTxFU3RydWN0dXJhbEZlYXR1cmUsIFRleHQ+IGVudHJ5IDogbWFwLmVudHJ5U2V0KCkpIHsKKy8vCQkJc3dpdGNoIChlbnRyeS5nZXRLZXkoKS5nZXRGZWF0dXJlSUQoKSkgeworLy8JCQljYXNlIExvZ2dlclBhY2thZ2UuLkRJU0VBU0VfTU9ERUxfX0RJU0VBU0VfTkFNRToKKy8vCQkJCWRpc2Vhc2VNb2RlbC5zZXREaXNlYXNlTmFtZShlbnRyeS5nZXRWYWx1ZSgpLmdldFRleHQoKSk7CisvLwkJCQlicmVhazsKKy8vCQkJY2FzZSBTdGFuZGFyZFBhY2thZ2UuRElTRUFTRV9NT0RFTF9fUE9QVUxBVElPTl9JREVOVElGSUVSOgorLy8JCQkJZGlzZWFzZU1vZGVsCisvLwkJCQkJCS5zZXRQb3B1bGF0aW9uSWRlbnRpZmllcihlbnRyeS5nZXRWYWx1ZSgpLmdldFRleHQoKSk7CisvLwkJCQlicmVhazsKKy8vCQkJY2FzZSBTdGFuZGFyZFBhY2thZ2UuRElTRUFTRV9NT0RFTF9fVElNRV9QRVJJT0Q6CisvLwkJCQlkaXNlYXNlTW9kZWwuc2V0VGltZVBlcmlvZChMb25nLnBhcnNlTG9uZyhlbnRyeS5nZXRWYWx1ZSgpCisvLwkJCQkJCS5nZXRUZXh0KCkpKTsKKy8vCQkJCWJyZWFrOworLy8KKy8vCQkJZGVmYXVsdDoKKy8vCQkJCWJyZWFrOworLy8JCQl9IC8vIHN3aXRjaAorLy8JCX0gLy8gZm9yIGVhY2ggTWFwLmVudHJ5CisJfQorCisJQE92ZXJyaWRlCisJcHVibGljIGJvb2xlYW4gdmFsaWRhdGUoKSB7CisJCS8vIE5vdGhpbmcgdG8gdmFsaWRhdGUgaW4gdGhlIGJhc2UgbG9nZ2VyCisJCXJldHVybiB0cnVlOworCX0gLy8gdmFsaWRhdGUKKworCQorCQorCQorCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGRpc3Bvc2UoKSB7CisJCXN1cGVyLmRpc3Bvc2UoKTsKKwl9CisKKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgdm9pZCBjaGVja1N1YmNsYXNzKCkgeworCQkvLyBEaXNhYmxlIHRoZSBjaGVjayB0aGF0IHByZXZlbnRzIHN1Yi1jbGFzc2luZyBvZiBTV1QgY29tcG9uZW50cworCX0KKworCit9IC8vIERpc2Vhc2VNb2RlbFByb3BlcnR5RWRpdG9yCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkubG9nZ2Vycy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9hZGFwdGVycy9sb2dnZXJwcm9wZXJ0eWVkaXRvci9Mb2dnZXJQcm9wZXJ0eUVkaXRvckFkYXB0ZXIuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5sb2dnZXJzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL2FkYXB0ZXJzL2xvZ2dlcnByb3BlcnR5ZWRpdG9yL0xvZ2dlclByb3BlcnR5RWRpdG9yQWRhcHRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQwMjU3NWYKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkubG9nZ2Vycy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9hZGFwdGVycy9sb2dnZXJwcm9wZXJ0eWVkaXRvci9Mb2dnZXJQcm9wZXJ0eUVkaXRvckFkYXB0ZXIuamF2YQpAQCAtMCwwICsxLDI0IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0udWkuYWRhcHRlcnMubG9nZ2VycHJvcGVydHllZGl0b3I7CisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5BZGFwdGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LmltcGwuQWRhcHRlckltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS51aS53aXphcmRzLkxvZ2dlclByb3BlcnR5Q29tcG9zaXRlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuTW9kaWZ5TGlzdGVuZXI7CisKK2Fic3RyYWN0IHB1YmxpYyBjbGFzcyBMb2dnZXJQcm9wZXJ0eUVkaXRvckFkYXB0ZXIgZXh0ZW5kcyBBZGFwdGVySW1wbAorCQlpbXBsZW1lbnRzIEFkYXB0ZXIgeworCisJYWJzdHJhY3QgcHVibGljIExvZ2dlclByb3BlcnR5RWRpdG9yIGNyZWF0ZUxvZ2dlclByb3BlcnR5RWRpdG9yKAorCQkJTG9nZ2VyUHJvcGVydHlDb21wb3NpdGUgZGlzZWFzZU1vZGVsUHJvcGVydHlDb21wb3NpdGUsCisJCQlpbnQgc3R5bGUsIE1vZGlmeUxpc3RlbmVyIHByb2plY3RWYWxpZGF0b3IsIElQcm9qZWN0IHByb2plY3QpOworfQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLmxvZ2dlcnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvYWRhcHRlcnMvbG9nZ2VycHJvcGVydHllZGl0b3IvTG9nZ2VyUHJvcGVydHlFZGl0b3JBZGFwdGVyRmFjdG9yeS5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLmxvZ2dlcnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvYWRhcHRlcnMvbG9nZ2VycHJvcGVydHllZGl0b3IvTG9nZ2VyUHJvcGVydHlFZGl0b3JBZGFwdGVyRmFjdG9yeS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAyNGJiM2EKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkubG9nZ2Vycy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9hZGFwdGVycy9sb2dnZXJwcm9wZXJ0eWVkaXRvci9Mb2dnZXJQcm9wZXJ0eUVkaXRvckFkYXB0ZXJGYWN0b3J5LmphdmEKQEAgLTAsMCArMSwzNCBAQAorLy8gRGlzZWFzZU1vZGVsUHJvcGVydHlFZGl0b3JBZGFwdGVyRmFjdG9yeS5qYXZhCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0udWkuYWRhcHRlcnMubG9nZ2VycHJvcGVydHllZGl0b3I7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5Db21wb3NlZEFkYXB0ZXJGYWN0b3J5OworCisvKioKKyAqIFRoaXMgY2xhc3MgcmVwcmVzZW50cworICovCitwdWJsaWMgaW50ZXJmYWNlIExvZ2dlclByb3BlcnR5RWRpdG9yQWRhcHRlckZhY3RvcnkgeworCisJTG9nZ2VyUHJvcGVydHlFZGl0b3JBZGFwdGVyRmFjdG9yeUltcGwgSU5TVEFOQ0UgPSBuZXcgTG9nZ2VyUHJvcGVydHlFZGl0b3JBZGFwdGVyRmFjdG9yeUltcGwoKTsKKworCXB1YmxpYyBjbGFzcyBMb2dnZXJQcm9wZXJ0eUVkaXRvckFkYXB0ZXJGYWN0b3J5SW1wbCBleHRlbmRzCisJCQlDb21wb3NlZEFkYXB0ZXJGYWN0b3J5IGltcGxlbWVudHMKKwkJCUxvZ2dlclByb3BlcnR5RWRpdG9yQWRhcHRlckZhY3RvcnkgeworCisJCUBPdmVycmlkZQorCQlwdWJsaWMgYm9vbGVhbiBpc0ZhY3RvcnlGb3JUeXBlKE9iamVjdCB0eXBlKSB7CisJCQlyZXR1cm4gdHlwZSA9PSBMb2dnZXJQcm9wZXJ0eUVkaXRvckFkYXB0ZXIuY2xhc3M7CisJCX0KKworCX0gLy8gRGlzZWFzZU1vZGVsUHJvcGVydHlFZGl0b3JBZGFwdGVyRmFjdG9yeUltcGwKK30gLy8gRGlzZWFzZU1vZGVsUHJvcGVydHlFZGl0b3JBZGFwdGVyRmFjdG9yeQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLmxvZ2dlcnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvYWRhcHRlcnMvbG9nZ2VycHJvcGVydHllZGl0b3IvU2ltdWxhdGlvbkxvZ2dlclByb3BlcnR5RWRpdG9yLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkubG9nZ2Vycy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9hZGFwdGVycy9sb2dnZXJwcm9wZXJ0eWVkaXRvci9TaW11bGF0aW9uTG9nZ2VyUHJvcGVydHlFZGl0b3IuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNjVlMDEyCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLmxvZ2dlcnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvYWRhcHRlcnMvbG9nZ2VycHJvcGVydHllZGl0b3IvU2ltdWxhdGlvbkxvZ2dlclByb3BlcnR5RWRpdG9yLmphdmEKQEAgLTAsMCArMSwzNDQgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDcsIDIwMDExIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS51aS5hZGFwdGVycy5sb2dnZXJwcm9wZXJ0eWVkaXRvcjsKKworaW1wb3J0IGphdmEudXRpbC5NYXA7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRVN0cnVjdHVyYWxGZWF0dXJlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5sb2dnZXIuTG9nZ2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy5TaW11bGF0aW9uTG9nZ2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy5TaW11bGF0aW9uTG9nZ2VyUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLk1vZGlmeUxpc3RlbmVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkJ1dHRvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGU7CisKKy8qKgorICogVGhpcyBjbGFzcyBpcyBhIHtAbGluayBDb21wb3NpdGV9IHRoYXQgcHJlc2VudHMgdGhlIHByb3BlcnRpZXMgb2YgYQorICoge0BsaW5rIERpc2Vhc2VNb2RlbH0gZm9yIGVkaXRpbmcuCisgKi8KK3B1YmxpYyBjbGFzcyBTaW11bGF0aW9uTG9nZ2VyUHJvcGVydHlFZGl0b3IgZXh0ZW5kcyBMb2dnZXJQcm9wZXJ0eUVkaXRvciB7CisKKwkvKioKKwkgKiBDcmVhdGUgdGhlIGNvbXBvc2l0ZQorCSAqIAorCSAqIEBwYXJhbSBwYXJlbnQKKwkgKiBAcGFyYW0gc3R5bGUKKwkgKiBAcGFyYW0gcHJvamVjdFZhbGlkYXRvcgorCSAqLworCXB1YmxpYyBTaW11bGF0aW9uTG9nZ2VyUHJvcGVydHlFZGl0b3IoZmluYWwgQ29tcG9zaXRlIHBhcmVudCwgZmluYWwgaW50IHN0eWxlLAorCQkJZmluYWwgTG9nZ2VyIGxvZ2dlciwKKwkJCWZpbmFsIE1vZGlmeUxpc3RlbmVyIHByb2plY3RWYWxpZGF0b3IsIElQcm9qZWN0IHByb2plY3QpIHsKKwkJc3VwZXIocGFyZW50LCBzdHlsZSwgbG9nZ2VyLCBwcm9qZWN0VmFsaWRhdG9yLCBwcm9qZWN0KTsKKworCX0KKworCQorCisJLyoqCisJICogQHBhcmFtIGxvZ2dlcgorCSAqICAgICAgICAgICAgdGhlIHtAbGluayBMb2dnZXJ9IGluc3RhbmNlIHRvIHBvcHVsYXRlLgorCSAqLworCXB1YmxpYyB2b2lkIHBvcHVsYXRlKGZpbmFsIExvZ2dlciBsb2dnZXIpIHsKKwkJc3VwZXIucG9wdWxhdGUobG9nZ2VyKTsKKwkJaWYgKGxvZ2dlciBpbnN0YW5jZW9mIFNpbXVsYXRpb25Mb2dnZXIpIHsKKwkJCVNpbXVsYXRpb25Mb2dnZXIgb2JqID0gKFNpbXVsYXRpb25Mb2dnZXIpbG9nZ2VyOworCQkJZm9yIChmaW5hbCBNYXAuRW50cnk8RVN0cnVjdHVyYWxGZWF0dXJlLCBCdXR0b24+IGVudHJ5IDogYm9vbGVhbk1hcC5lbnRyeVNldCgpKSB7CisJCQkJc3dpdGNoIChlbnRyeS5nZXRLZXkoKS5nZXRGZWF0dXJlSUQoKSkgeworCQkJCWNhc2UgU2ltdWxhdGlvbkxvZ2dlclBhY2thZ2UuU0lNVUxBVElPTl9MT0dHRVJfX0VOQUJMRUQ6CisJCQkJCS8vYm9vbGVhbiB2YWwgPSBlbnRyeS5nZXRWYWx1ZSgpLmJvb2xlYW5WYWx1ZSgpOworCQkJCQkvL29iai5zZXRFbmFibGVkKHZhbCk7CisJCQkJCWJyZWFrOworCQkJCWRlZmF1bHQ6IGJyZWFrOworCQkJCQorCQkJCX0KKwkJCQkKKwkJCX0KKwkJfQorCQkKKwkJCisvLwkJaWYoZGlzZWFzZU1vZGVsIGluc3RhbmNlb2YgU3RhbmRhcmREaXNlYXNlTW9kZWwpIHsKKy8vCQkJZm9yIChmaW5hbCBNYXAuRW50cnk8RVN0cnVjdHVyYWxGZWF0dXJlLCBUZXh0PiBlbnRyeSA6IG1hcC5lbnRyeVNldCgpKSB7CisvLwkJCQlzd2l0Y2ggKGVudHJ5LmdldEtleSgpLmdldEZlYXR1cmVJRCgpKSB7CisvLwkJCQljYXNlIFN0YW5kYXJkUGFja2FnZS5TVEFOREFSRF9ESVNFQVNFX01PREVMX19SRUZFUkVOQ0VfUE9QVUxBVElPTl9ERU5TSVRZOgorLy8JCQkJCSgoU3RhbmRhcmREaXNlYXNlTW9kZWwpIGRpc2Vhc2VNb2RlbCkKKy8vCQkJCQkuc2V0UmVmZXJlbmNlUG9wdWxhdGlvbkRlbnNpdHkoRG91YmxlLnBhcnNlRG91YmxlKGVudHJ5CisvLwkJCQkJCQkuZ2V0VmFsdWUoKS5nZXRUZXh0KCkpKTsKKy8vCQkJCQlicmVhazsKKy8vCQkJCWNhc2UgU3RhbmRhcmRQYWNrYWdlLlNUQU5EQVJEX0RJU0VBU0VfTU9ERUxfX1JPQURfTkVUV09SS19JTkZFQ1RJT1VTX1BST1BPUlRJT046CisvLwkJCQkJZFZhbCA9IChuZXcgRG91YmxlKGVudHJ5LmdldFZhbHVlKCkuZ2V0VGV4dCgpKSkuZG91YmxlVmFsdWUoKTsKKy8vCQkJCQkoKFN0YW5kYXJkRGlzZWFzZU1vZGVsKSBkaXNlYXNlTW9kZWwpLnNldFJvYWROZXR3b3JrSW5mZWN0aW91c1Byb3BvcnRpb24oZFZhbCk7CisvLwkJCQkJYnJlYWs7CQorLy8JCQkJY2FzZSBTdGFuZGFyZFBhY2thZ2UuU1RBTkRBUkRfRElTRUFTRV9NT0RFTF9fQ0hBUkFDVEVSSVNUSUNfTUlYSU5HX0RJU1RBTkNFOgorLy8JCQkJCWRWYWwgPSAobmV3IERvdWJsZShlbnRyeS5nZXRWYWx1ZSgpLmdldFRleHQoKSkpLmRvdWJsZVZhbHVlKCk7CisvLwkJCQkJKChTdGFuZGFyZERpc2Vhc2VNb2RlbCkgZGlzZWFzZU1vZGVsKS5zZXRDaGFyYWN0ZXJpc3RpY01peGluZ0Rpc3RhbmNlKGRWYWwpOworLy8JCQkJCWJyZWFrOwkKKy8vCQkJCX0KKy8vCQkJfS8vIGZvciBlYWNoIG1hcCBlbnRyeQorLy8JCX0KKy8vCisvLwkJaWYoZGlzZWFzZU1vZGVsIGluc3RhbmNlb2YgU3RhbmRhcmRTdG9jaGFzdGljRGlzZWFzZU1vZGVsKSB7CisvLwkJCWZvciAoZmluYWwgTWFwLkVudHJ5PEVTdHJ1Y3R1cmFsRmVhdHVyZSwgVGV4dD4gZW50cnkgOiBtYXAuZW50cnlTZXQoKSkgeworLy8JCQkJc3dpdGNoIChlbnRyeS5nZXRLZXkoKS5nZXRGZWF0dXJlSUQoKSkgewkKKy8vCisvLwkJCQljYXNlIFN0YW5kYXJkUGFja2FnZS5TVEFOREFSRF9TVE9DSEFTVElDX0RJU0VBU0VfTU9ERUxfX0dBSU46CisvLwkJCQkJKChTdGFuZGFyZFN0b2NoYXN0aWNEaXNlYXNlTW9kZWwpIGRpc2Vhc2VNb2RlbCkuc2V0R2FpbihEb3VibGUKKy8vCQkJCQkJCS5wYXJzZURvdWJsZShlbnRyeS5nZXRWYWx1ZSgpLmdldFRleHQoKSkpOworLy8JCQkJCWJyZWFrOworLy8JCQkJY2FzZSBTdGFuZGFyZFBhY2thZ2UuU1RPQ0hBU1RJQ19ESVNFQVNFX01PREVMX19TRUVEOgorLy8JCQkJCSgoU3RvY2hhc3RpY0Rpc2Vhc2VNb2RlbCkgZGlzZWFzZU1vZGVsKS5zZXRTZWVkKExvbmcKKy8vCQkJCQkJCS5wYXJzZUxvbmcoZW50cnkuZ2V0VmFsdWUoKS5nZXRUZXh0KCkpKTsKKy8vCQkJCQlicmVhazsKKy8vCQkJCWRlZmF1bHQ6CisvLwkJCQkJYnJlYWs7CisvLwkJCQl9IC8vIHN3aXRjaAorLy8JCQl9IC8vIGZvciBlYWNoIE1hcC5lbnRyeQorLy8JCX0KKy8vCisvLworLy8JCWlmKGRpc2Vhc2VNb2RlbCBpbnN0YW5jZW9mIFNJKQorLy8JCQlmb3IgKGZpbmFsIE1hcC5FbnRyeTxFU3RydWN0dXJhbEZlYXR1cmUsIFRleHQ+IGVudHJ5IDogbWFwLmVudHJ5U2V0KCkpIHsKKy8vCQkJCXN3aXRjaCAoZW50cnkuZ2V0S2V5KCkuZ2V0RmVhdHVyZUlEKCkpIHsJCisvLworLy8KKy8vCQkJCWNhc2UgU3RhbmRhcmRQYWNrYWdlLlNJX19UUkFOU01JU1NJT05fUkFURToKKy8vCQkJCQkoKFNJKSBkaXNlYXNlTW9kZWwpLnNldFRyYW5zbWlzc2lvblJhdGUoRG91YmxlCisvLwkJCQkJCQkucGFyc2VEb3VibGUoZW50cnkuZ2V0VmFsdWUoKS5nZXRUZXh0KCkpKTsKKy8vCQkJCQlicmVhazsKKy8vCQkJCWNhc2UgU3RhbmRhcmRQYWNrYWdlLlNJX19OT05fTElORUFSSVRZX0NPRUZGSUNJRU5UOgorLy8JCQkJCSgoU0kpIGRpc2Vhc2VNb2RlbCkuc2V0Tm9uTGluZWFyaXR5Q29lZmZpY2llbnQoRG91YmxlCisvLwkJCQkJCQkucGFyc2VEb3VibGUoZW50cnkuZ2V0VmFsdWUoKS5nZXRUZXh0KCkpKTsKKy8vCQkJCQlicmVhazsKKy8vCQkJCWNhc2UgU3RhbmRhcmRQYWNrYWdlLlNJX19SRUNPVkVSWV9SQVRFOgorLy8JCQkJCSgoU0kpIGRpc2Vhc2VNb2RlbCkuc2V0UmVjb3ZlcnlSYXRlKERvdWJsZS5wYXJzZURvdWJsZShlbnRyeQorLy8JCQkJCQkJLmdldFZhbHVlKCkuZ2V0VGV4dCgpKSk7CisvLwkJCQkJYnJlYWs7CisvLwkJCQljYXNlIFN0YW5kYXJkUGFja2FnZS5TSV9fSU5GRUNUSU9VU19NT1JUQUxJVFlfUkFURToKKy8vCQkJCQkoKFNJKSBkaXNlYXNlTW9kZWwpLnNldEluZmVjdGlvdXNNb3J0YWxpdHlSYXRlKERvdWJsZQorLy8JCQkJCQkJLnBhcnNlRG91YmxlKGVudHJ5LmdldFZhbHVlKCkuZ2V0VGV4dCgpKSk7CisvLwkJCQkJYnJlYWs7CisvLworLy8JCQkJY2FzZSBTdGFuZGFyZFBhY2thZ2UuU0lfX0NIQVJBQ1RFUklTVElDX01JWElOR19ESVNUQU5DRToKKy8vCQkJCQkoKFNJKSBkaXNlYXNlTW9kZWwpCisvLwkJCQkJLnNldENoYXJhY3RlcmlzdGljTWl4aW5nRGlzdGFuY2UoRG91YmxlCisvLwkJCQkJCQkucGFyc2VEb3VibGUoZW50cnkuZ2V0VmFsdWUoKS5nZXRUZXh0KCkpKTsKKy8vCQkJCQlicmVhazsKKy8vCQkJCWNhc2UgU3RhbmRhcmRQYWNrYWdlLlNJX19ST0FEX05FVFdPUktfSU5GRUNUSU9VU19QUk9QT1JUSU9OOgorLy8JCQkJCSgoU0kpIGRpc2Vhc2VNb2RlbCkKKy8vCQkJCQkuc2V0Um9hZE5ldHdvcmtJbmZlY3Rpb3VzUHJvcG9ydGlvbihEb3VibGUKKy8vCQkJCQkJCS5wYXJzZURvdWJsZShlbnRyeS5nZXRWYWx1ZSgpLmdldFRleHQoKSkpOworLy8JCQkJCWJyZWFrOworLy8JCQkJfQorLy8JCQl9CisvLworLy8KKy8vCQlpZihkaXNlYXNlTW9kZWwgaW5zdGFuY2VvZiBTSVIpCisvLwkJCWZvciAoZmluYWwgTWFwLkVudHJ5PEVTdHJ1Y3R1cmFsRmVhdHVyZSwgVGV4dD4gZW50cnkgOiBtYXAuZW50cnlTZXQoKSkgeworLy8JCQkJc3dpdGNoIChlbnRyeS5nZXRLZXkoKS5nZXRGZWF0dXJlSUQoKSkgewkKKy8vCQkJCWNhc2UgU3RhbmRhcmRQYWNrYWdlLlNJUl9fSU1NVU5JVFlfTE9TU19SQVRFOgorLy8JCQkJCSgoU0lSKSBkaXNlYXNlTW9kZWwpLnNldEltbXVuaXR5TG9zc1JhdGUoRG91YmxlCisvLwkJCQkJCQkucGFyc2VEb3VibGUoZW50cnkuZ2V0VmFsdWUoKS5nZXRUZXh0KCkpKTsKKy8vCQkJCQlicmVhazsKKy8vCQkJCX0KKy8vCQkJfQorLy8KKy8vCQlpZihkaXNlYXNlTW9kZWwgaW5zdGFuY2VvZiBTRUlSKQorLy8JCQlmb3IgKGZpbmFsIE1hcC5FbnRyeTxFU3RydWN0dXJhbEZlYXR1cmUsIFRleHQ+IGVudHJ5IDogbWFwLmVudHJ5U2V0KCkpIHsKKy8vCQkJCXN3aXRjaCAoZW50cnkuZ2V0S2V5KCkuZ2V0RmVhdHVyZUlEKCkpIHsJCisvLwkJCQljYXNlIFN0YW5kYXJkUGFja2FnZS5TRUlSX19JTkNVQkFUSU9OX1JBVEU6CisvLwkJCQkJKChTRUlSKSBkaXNlYXNlTW9kZWwpLnNldEluY3ViYXRpb25SYXRlKERvdWJsZQorLy8JCQkJCQkJLnBhcnNlRG91YmxlKGVudHJ5LmdldFZhbHVlKCkuZ2V0VGV4dCgpKSk7CisvLwkJCQkJYnJlYWs7CisvLwkJCQlkZWZhdWx0OgorLy8JCQkJCWJyZWFrOworLy8JCQkJfSAvLyBzd2l0Y2gKKy8vCQkJfSAvLyBmb3IgZWFjaCBNYXAuZW50cnkKKworCisJfSAvLyBwb3B1bGF0ZQorCisJLyoqCisJICogQHJldHVybiA8Y29kZT50cnVlPC9jb2RlPiBpZiB0aGUgY29udGVudHMgYXJlIHZhbGlkLCA8Y29kZT5mYWxzZTwvY29kZT4KKwkgKiAgICAgICAgIG90aGVyd2lzZS4KKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgYm9vbGVhbiB2YWxpZGF0ZSgpIHsKKwkJYm9vbGVhbiByZXRWYWx1ZSA9IHN1cGVyLnZhbGlkYXRlKCk7CisvLworLy8JCS8vIFRyYW5zbWlzc2lvbiBSYXRlCisvLwkJaWYgKHJldFZhbHVlKSB7CisvLwkJCS8vIFllcworLy8JCQlmaW5hbCBUZXh0IHRleHQgPSBtYXAKKy8vCQkJCQkuZ2V0KFN0YW5kYXJkUGFja2FnZS5MaXRlcmFscy5TSV9fVFJBTlNNSVNTSU9OX1JBVEUpOworLy8JCQlpZiAodGV4dCAhPSBudWxsKSB7CisvLwkJCQkvLyBZZXMKKy8vCQkJCXJldFZhbHVlID0gIXRleHQuZ2V0VGV4dCgpLmVxdWFscygiIik7IC8vJE5PTi1OTFMtMSQKKy8vCQkJCS8vIG5vdGhpbmc/CisvLwkJCQlpZiAoIXJldFZhbHVlKSB7CisvLwkJCQkJLy8gWWVzCisvLwkJCQkJZXJyb3JNZXNzYWdlID0gRGlzZWFzZVdpemFyZE1lc3NhZ2VzCisvLwkJCQkJCQkuZ2V0U3RyaW5nKCJORGl6V2l6RXJyNiIpOyAvLyROT04tTkxTLTEkCisvLwkJCQl9IC8vIGlmCisvLwkJCQllbHNlIHsKKy8vCQkJCQkvLyBObworLy8JCQkJCS8vIElzIGl0IGEgdmFsaWQgdmFsdWU/CisvLwkJCQkJcmV0VmFsdWUgPSBpc1ZhbGlkVmFsdWUodGV4dC5nZXRUZXh0KCksIDAuMCk7CisvLwkJCQkJaWYgKCFyZXRWYWx1ZSkgeworLy8JCQkJCQkvLyBObworLy8JCQkJCQllcnJvck1lc3NhZ2UgPSBEaXNlYXNlV2l6YXJkTWVzc2FnZXMKKy8vCQkJCQkJCQkuZ2V0U3RyaW5nKCJORGl6V2l6RXJyNyIpOyAvLyROT04tTkxTLTEkCisvLwkJCQkJfSAvLyBpZgorLy8JCQkJfQorLy8JCQl9IC8vIGlmIHRleHQgIT0gbnVsbAorLy8JCX0gLy8gaWYgVHJhbnNtaXNzaW9uIFJhdGUKKy8vCisvLwkJLy8gTm9uLUxpbmVhcml0eSBDb2VmZmljaWVudAorLy8JCWlmIChyZXRWYWx1ZSkgeworLy8JCQkvLyBZZXMKKy8vCQkJZmluYWwgVGV4dCB0ZXh0ID0gbWFwCisvLwkJCQkJLmdldChTdGFuZGFyZFBhY2thZ2UuTGl0ZXJhbHMuU0lfX05PTl9MSU5FQVJJVFlfQ09FRkZJQ0lFTlQpOworLy8JCQlpZiAodGV4dCAhPSBudWxsKSB7CisvLwkJCQkvLyBZZXMKKy8vCisvLwkJCQlyZXRWYWx1ZSA9ICF0ZXh0LmdldFRleHQoKS5lcXVhbHMoIiIpOyAvLyROT04tTkxTLTEkCisvLwkJCQkvLyBub3RoaW5nPworLy8JCQkJaWYgKCFyZXRWYWx1ZSkgeworLy8JCQkJCS8vIFllcworLy8JCQkJCWVycm9yTWVzc2FnZSA9IERpc2Vhc2VXaXphcmRNZXNzYWdlcworLy8JCQkJCQkJLmdldFN0cmluZygiTkRpeldpekVycjgiKTsgLy8kTk9OLU5MUy0xJAorLy8JCQkJfSAvLyBpZgorLy8JCQkJZWxzZSB7CisvLwkJCQkJLy8gTm8KKy8vCQkJCQkvLyBJcyBpdCBhIHZhbGlkIHZhbHVlPworLy8JCQkJCXJldFZhbHVlID0gaXNWYWxpZFZhbHVlKHRleHQuZ2V0VGV4dCgpLCAwLjApOworLy8JCQkJCWlmICghcmV0VmFsdWUpIHsKKy8vCQkJCQkJLy8gTm8KKy8vCQkJCQkJZXJyb3JNZXNzYWdlID0gRGlzZWFzZVdpemFyZE1lc3NhZ2VzCisvLwkJCQkJCQkJLmdldFN0cmluZygiTkRpeldpekVycjkiKTsgLy8kTk9OLU5MUy0xJAorLy8JCQkJCX0gLy8gaWYKKy8vCQkJCX0KKy8vCQkJfSAvLyBpZiB0ZXh0ICE9IG51bGwKKy8vCQl9IC8vIGlmIE5vbi1MaW5lYXJpdHkgQ29lZmZpY2llbnQKKy8vCisvLwkJLy8gSW5mZWN0aW91cyBSZWNvdmVyeSBSYXRlCisvLwkJaWYgKHJldFZhbHVlKSB7CisvLwkJCS8vIFllcworLy8JCQlmaW5hbCBUZXh0IHRleHQgPSBtYXAKKy8vCQkJCQkuZ2V0KFN0YW5kYXJkUGFja2FnZS5MaXRlcmFscy5TSV9fUkVDT1ZFUllfUkFURSk7CisvLwkJCWlmICh0ZXh0ICE9IG51bGwpIHsKKy8vCQkJCS8vIFllcworLy8JCQkJcmV0VmFsdWUgPSAhdGV4dC5nZXRUZXh0KCkuZXF1YWxzKCIiKTsgLy8kTk9OLU5MUy0xJAorLy8JCQkJLy8gbm90aGluZz8KKy8vCQkJCWlmICghcmV0VmFsdWUpIHsKKy8vCQkJCQkvLyBZZXMKKy8vCQkJCQllcnJvck1lc3NhZ2UgPSBEaXNlYXNlV2l6YXJkTWVzc2FnZXMKKy8vCQkJCQkJCS5nZXRTdHJpbmcoIk5EaXpXaXpFcnIxMCIpOyAvLyROT04tTkxTLTEkCisvLwkJCQl9IC8vIGlmCisvLwkJCQllbHNlIHsKKy8vCQkJCQkvLyBObworLy8JCQkJCS8vIElzIGl0IGEgdmFsaWQgdmFsdWU/CisvLwkJCQkJcmV0VmFsdWUgPSBpc1ZhbGlkVmFsdWUodGV4dC5nZXRUZXh0KCksIDAuMCk7CisvLwkJCQkJaWYgKCFyZXRWYWx1ZSkgeworLy8JCQkJCQkvLyBObworLy8JCQkJCQllcnJvck1lc3NhZ2UgPSBEaXNlYXNlV2l6YXJkTWVzc2FnZXMKKy8vCQkJCQkJCQkuZ2V0U3RyaW5nKCJORGl6V2l6RXJyMTEiKTsgLy8kTk9OLU5MUy0xJAorLy8JCQkJCX0gLy8gaWYKKy8vCQkJCX0KKy8vCQkJfSAvLyBpZgorLy8JCX0gLy8gaWYgSW5mZWN0aW91cyBSZWNvdmVyeSBSYXRlCisvLworLy8JCS8vIEluZmVjdGlvdXMgTW9ydGFsaXR5IFJhdGUKKy8vCQlpZiAocmV0VmFsdWUpIHsKKy8vCQkJLy8gWWVzCisvLwkJCWZpbmFsIFRleHQgdGV4dCA9IG1hcAorLy8JCQkJCS5nZXQoU3RhbmRhcmRQYWNrYWdlLkxpdGVyYWxzLlNJX19JTkZFQ1RJT1VTX01PUlRBTElUWV9SQVRFKTsKKy8vCQkJaWYgKHRleHQgIT0gbnVsbCkgeworLy8JCQkJLy8gWWVzCisvLwkJCQlyZXRWYWx1ZSA9ICF0ZXh0LmdldFRleHQoKS5lcXVhbHMoIiIpOyAvLyROT04tTkxTLTEkCisvLwkJCQkvLyBub3RoaW5nPworLy8JCQkJaWYgKCFyZXRWYWx1ZSkgeworLy8JCQkJCS8vIFllcworLy8JCQkJCWVycm9yTWVzc2FnZSA9IERpc2Vhc2VXaXphcmRNZXNzYWdlcworLy8JCQkJCQkJLmdldFN0cmluZygiTkRpeldpekVycjEyIik7IC8vJE5PTi1OTFMtMSQKKy8vCQkJCX0gLy8gaWYKKy8vCQkJCWVsc2UgeworLy8JCQkJCS8vIE5vCisvLwkJCQkJLy8gSXMgaXQgYSB2YWxpZCB2YWx1ZT8KKy8vCQkJCQlyZXRWYWx1ZSA9IGlzVmFsaWRWYWx1ZSh0ZXh0LmdldFRleHQoKSwgMC4wKTsKKy8vCQkJCQlpZiAoIXJldFZhbHVlKSB7CisvLwkJCQkJCS8vIE5vCisvLwkJCQkJCWVycm9yTWVzc2FnZSA9IERpc2Vhc2VXaXphcmRNZXNzYWdlcworLy8JCQkJCQkJCS5nZXRTdHJpbmcoIk5EaXpXaXpFcnIxMyIpOyAvLyROT04tTkxTLTEkCisvLwkJCQkJfSAvLyBpZgorLy8JCQkJfQorLy8JCQl9IC8vIGlmCisvLwkJfSAvLyBpZiBJbmZlY3Rpb3VzIE1vcnRhbGl0eSBSYXRlCisvLworLy8JCS8vIEltbXVuaXR5IExvc3MgUmF0ZQorLy8JCWlmIChyZXRWYWx1ZSkgeworLy8JCQkvLyBZZXMKKy8vCQkJZmluYWwgVGV4dCB0ZXh0ID0gbWFwCisvLwkJCQkJLmdldChTdGFuZGFyZFBhY2thZ2UuTGl0ZXJhbHMuU0lSX19JTU1VTklUWV9MT1NTX1JBVEUpOworLy8JCQkvLyBzcGVjaWZpZWQ/CisvLwkJCWlmICh0ZXh0ICE9IG51bGwpIHsKKy8vCQkJCS8vIFllcworLy8JCQkJcmV0VmFsdWUgPSAhdGV4dC5nZXRUZXh0KCkuZXF1YWxzKCIiKTsgLy8kTk9OLU5MUy0xJAorLy8JCQkJLy8gbm90aGluZz8KKy8vCQkJCWlmICghcmV0VmFsdWUpIHsKKy8vCQkJCQkvLyBZZXMKKy8vCQkJCQllcnJvck1lc3NhZ2UgPSBEaXNlYXNlV2l6YXJkTWVzc2FnZXMKKy8vCQkJCQkJCS5nZXRTdHJpbmcoIk5EaXpXaXpFcnIxNiIpOyAvLyROT04tTkxTLTEkCisvLwkJCQl9IC8vIGlmCisvLwkJCQllbHNlIHsKKy8vCQkJCQkvLyBObworLy8JCQkJCS8vIElzIGl0IGEgdmFsaWQgdmFsdWU/CisvLwkJCQkJcmV0VmFsdWUgPSBpc1ZhbGlkVmFsdWUodGV4dC5nZXRUZXh0KCksIDAuMCk7CisvLwkJCQkJaWYgKCFyZXRWYWx1ZSkgeworLy8JCQkJCQkvLyBObworLy8JCQkJCQllcnJvck1lc3NhZ2UgPSBEaXNlYXNlV2l6YXJkTWVzc2FnZXMKKy8vCQkJCQkJCQkuZ2V0U3RyaW5nKCJORGl6V2l6RXJyMTciKTsgLy8kTk9OLU5MUy0xJAorLy8JCQkJCX0gLy8gaWYKKy8vCQkJCX0KKy8vCQkJfSAvLyBpZgorLy8JCX0gLy8gaWYgSW1tdW5pdHkgTG9zcyBSYXRlCisvLworLy8JCS8vIEluY3ViYXRpb24gUmF0ZQorLy8JCWlmIChyZXRWYWx1ZSkgeworLy8JCQkvLyBZZXMKKy8vCQkJZmluYWwgVGV4dCB0ZXh0ID0gbWFwCisvLwkJCQkJLmdldChTdGFuZGFyZFBhY2thZ2UuTGl0ZXJhbHMuU0VJUl9fSU5DVUJBVElPTl9SQVRFKTsKKy8vCQkJaWYgKHRleHQgIT0gbnVsbCkgeworLy8JCQkJLy8gWWVzCisvLworLy8JCQkJcmV0VmFsdWUgPSAhdGV4dC5nZXRUZXh0KCkuZXF1YWxzKCIiKTsgLy8kTk9OLU5MUy0xJAorLy8JCQkJLy8gbm90aGluZz8KKy8vCQkJCWlmICghcmV0VmFsdWUpIHsKKy8vCQkJCQkvLyBZZXMKKy8vCQkJCQllcnJvck1lc3NhZ2UgPSBEaXNlYXNlV2l6YXJkTWVzc2FnZXMKKy8vCQkJCQkJCS5nZXRTdHJpbmcoIk5EaXpXaXpFcnIxOCIpOyAvLyROT04tTkxTLTEkCisvLwkJCQl9IC8vIGlmCisvLwkJCQllbHNlIHsKKy8vCQkJCQkvLyBObworLy8JCQkJCS8vIElzIGl0IGEgdmFsaWQgdmFsdWU/CisvLwkJCQkJcmV0VmFsdWUgPSBpc1ZhbGlkVmFsdWUodGV4dC5nZXRUZXh0KCksIDAuMCk7CisvLwkJCQkJaWYgKCFyZXRWYWx1ZSkgeworLy8JCQkJCQkvLyBObworLy8JCQkJCQllcnJvck1lc3NhZ2UgPSBEaXNlYXNlV2l6YXJkTWVzc2FnZXMKKy8vCQkJCQkJCQkuZ2V0U3RyaW5nKCJORGl6V2l6RXJyMTkiKTsgLy8kTk9OLU5MUy0xJAorLy8JCQkJCX0gLy8gaWYKKy8vCQkJCX0KKy8vCQkJfSAvLyBpZgorLy8JCX0gLy8gaWYgSW5jdWJhdGlvbiBSYXRlCisKKwkJcmV0dXJuIHJldFZhbHVlOworCX0gLy8gdmFsaWRhdGUKKworfSAvLyBTdGFuZGFyZERpc2Vhc2VNb2RlbFByb3BlcnR5RWRpdG9yCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkubG9nZ2Vycy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9hZGFwdGVycy9sb2dnZXJwcm9wZXJ0eWVkaXRvci9TaW11bGF0aW9uTG9nZ2VyUHJvcGVydHlFZGl0b3JBZGFwdGVyLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkubG9nZ2Vycy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9hZGFwdGVycy9sb2dnZXJwcm9wZXJ0eWVkaXRvci9TaW11bGF0aW9uTG9nZ2VyUHJvcGVydHlFZGl0b3JBZGFwdGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODQ3NzUzMAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5sb2dnZXJzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL2FkYXB0ZXJzL2xvZ2dlcnByb3BlcnR5ZWRpdG9yL1NpbXVsYXRpb25Mb2dnZXJQcm9wZXJ0eUVkaXRvckFkYXB0ZXIuamF2YQpAQCAtMCwwICsxLDMwIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA4LDIwMTEgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnVpLmFkYXB0ZXJzLmxvZ2dlcnByb3BlcnR5ZWRpdG9yOworCitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3Q7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmxvZ2dlci5Mb2dnZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS51aS53aXphcmRzLkxvZ2dlclByb3BlcnR5Q29tcG9zaXRlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuTW9kaWZ5TGlzdGVuZXI7CisKK3B1YmxpYyBjbGFzcyBTaW11bGF0aW9uTG9nZ2VyUHJvcGVydHlFZGl0b3JBZGFwdGVyIGV4dGVuZHMKKwkJTG9nZ2VyUHJvcGVydHlFZGl0b3JBZGFwdGVyIHsKKworCUBPdmVycmlkZQorCXB1YmxpYyBMb2dnZXJQcm9wZXJ0eUVkaXRvciBjcmVhdGVMb2dnZXJQcm9wZXJ0eUVkaXRvcigKKwkJCWZpbmFsIExvZ2dlclByb3BlcnR5Q29tcG9zaXRlIGxvZ2dlclByb3BlcnR5Q29tcG9zaXRlLAorCQkJZmluYWwgaW50IHN0eWxlLCBmaW5hbCBNb2RpZnlMaXN0ZW5lciBwcm9qZWN0VmFsaWRhdG9yLCBJUHJvamVjdCBwcm9qZWN0KSB7CisJCXJldHVybiBuZXcgU2ltdWxhdGlvbkxvZ2dlclByb3BlcnR5RWRpdG9yKAorCQkJCWxvZ2dlclByb3BlcnR5Q29tcG9zaXRlLCBzdHlsZSwKKwkJCQkoTG9nZ2VyKSBnZXRUYXJnZXQoKSwgcHJvamVjdFZhbGlkYXRvciwgcHJvamVjdCk7CisJfQorCit9CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkubG9nZ2Vycy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9hZGFwdGVycy9sb2dnZXJwcm9wZXJ0eWVkaXRvci9TaW11bGF0aW9uTG9nZ2VyUHJvcGVydHlFZGl0b3JBZGFwdGVyRmFjdG9yeS5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLmxvZ2dlcnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvYWRhcHRlcnMvbG9nZ2VycHJvcGVydHllZGl0b3IvU2ltdWxhdGlvbkxvZ2dlclByb3BlcnR5RWRpdG9yQWRhcHRlckZhY3RvcnkuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ODM2NDcwCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLmxvZ2dlcnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvYWRhcHRlcnMvbG9nZ2VycHJvcGVydHllZGl0b3IvU2ltdWxhdGlvbkxvZ2dlclByb3BlcnR5RWRpdG9yQWRhcHRlckZhY3RvcnkuamF2YQpAQCAtMCwwICsxLDQxIEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0udWkuYWRhcHRlcnMubG9nZ2VycHJvcGVydHllZGl0b3I7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LkFkYXB0ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzLnV0aWwuU2ltdWxhdGlvbkxvZ2dlckFkYXB0ZXJGYWN0b3J5OworCitwdWJsaWMgY2xhc3MgU2ltdWxhdGlvbkxvZ2dlclByb3BlcnR5RWRpdG9yQWRhcHRlckZhY3RvcnkgZXh0ZW5kcworCQlTaW11bGF0aW9uTG9nZ2VyQWRhcHRlckZhY3RvcnkgaW1wbGVtZW50cworCQlMb2dnZXJQcm9wZXJ0eUVkaXRvckFkYXB0ZXJGYWN0b3J5IHsKKworCXB1YmxpYyBTaW11bGF0aW9uTG9nZ2VyUHJvcGVydHlFZGl0b3JBZGFwdGVyRmFjdG9yeSgpIHsKKwkJc3VwZXIoKTsKKwkJTG9nZ2VyUHJvcGVydHlFZGl0b3JBZGFwdGVyRmFjdG9yeS5JTlNUQU5DRQorCQkJCS5hZGRBZGFwdGVyRmFjdG9yeSh0aGlzKTsKKwl9CisKKy8vCUBPdmVycmlkZQorLy8JcHVibGljIEFkYXB0ZXIgY3JlYXRlU3RhbmRhcmREaXNlYXNlTW9kZWxBZGFwdGVyKCkgeworLy8JCXJldHVybiBuZXcgU2ltdWxhdGlvbkxvZ2dlclByb3BlcnR5RWRpdG9yQWRhcHRlcigpOworLy8JfQorCisJQE92ZXJyaWRlCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlU2ltdWxhdGlvbkxvZ2dlckFkYXB0ZXIoKSB7CisJCXJldHVybiBuZXcgU2ltdWxhdGlvbkxvZ2dlclByb3BlcnR5RWRpdG9yQWRhcHRlcigpOworCX0KKworCXB1YmxpYyBib29sZWFuIGlzRmFjdG9yeUZvclR5cGUoT2JqZWN0IHR5cGUpIHsKKwkJcmV0dXJuIHR5cGUgPT0gTG9nZ2VyUHJvcGVydHlFZGl0b3JBZGFwdGVyLmNsYXNzCisJCQkJfHwgc3VwZXIuaXNGYWN0b3J5Rm9yVHlwZSh0eXBlKTsKKwl9CisKK30gLy8gU3RhbmRhcmREaXNlYXNlTW9kZWxQcm9wZXJ0eUVkaXRvckFkYXB0ZXJGYWN0b3J5CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkubG9nZ2Vycy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9hZGFwdGVycy9sb2dnZXJwcm9wZXJ0eWVkaXRvci9TaW11bGF0aW9uTG9nZ2VyUHJvcGVydHlTdHJpbmdQcm92aWRlckFkYXB0ZXJGYWN0b3J5LmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkubG9nZ2Vycy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9hZGFwdGVycy9sb2dnZXJwcm9wZXJ0eWVkaXRvci9TaW11bGF0aW9uTG9nZ2VyUHJvcGVydHlTdHJpbmdQcm92aWRlckFkYXB0ZXJGYWN0b3J5LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWYyYjBjMQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5sb2dnZXJzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL2FkYXB0ZXJzL2xvZ2dlcnByb3BlcnR5ZWRpdG9yL1NpbXVsYXRpb25Mb2dnZXJQcm9wZXJ0eVN0cmluZ1Byb3ZpZGVyQWRhcHRlckZhY3RvcnkuamF2YQpAQCAtMCwwICsxLDEwNiBAQAorLy8gU3RhbmRhcmRQcm9wZXJ0eVN0cmluZ1Byb3ZpZGVyQWRhcHRlckZhY3RvcnkuamF2YQorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnVpLmFkYXB0ZXJzLmxvZ2dlcnByb3BlcnR5ZWRpdG9yOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuQWRhcHRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRVN0cnVjdHVyYWxGZWF0dXJlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtUHJvcGVydHlEZXNjcmlwdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5sb2dnZXIudXRpbC5Mb2dnZXJBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnVpLmFkYXB0ZXJzLnByb3BlcnR5c3RyaW5ncy5Qcm9wZXJ0eVN0cmluZ1Byb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udWkuYWRhcHRlcnMucHJvcGVydHlzdHJpbmdzLlByb3BlcnR5U3RyaW5nUHJvdmlkZXJBZGFwdGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udWkuYWRhcHRlcnMucHJvcGVydHlzdHJpbmdzLlByb3BlcnR5U3RyaW5nUHJvdmlkZXJBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnVpLndpemFyZHMuTG9nZ2VyV2l6YXJkTWVzc2FnZXM7CisKKy8qKgorICogVGhpcyBjbGFzcyBpcyB1c2VkIHRvIE5MUydkIHN0cmluZ3MgZm9yIHtAbGluayBEaXNlYXNlTW9kZWx9IHByb3BlcnRpZXMuIAorICovCitwdWJsaWMgY2xhc3MgU2ltdWxhdGlvbkxvZ2dlclByb3BlcnR5U3RyaW5nUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSBleHRlbmRzCisJCUxvZ2dlckFkYXB0ZXJGYWN0b3J5IGltcGxlbWVudHMgUHJvcGVydHlTdHJpbmdQcm92aWRlckFkYXB0ZXJGYWN0b3J5IHsKKworCQorCVByb3BlcnR5U3RyaW5nUHJvdmlkZXJBZGFwdGVyIGFkYXB0ZXIgPSBudWxsOworCisJLyoqCisJICogRGVmYXVsdCBDb25zdHJ1Y3RvcgorCSAqLworCXB1YmxpYyBTaW11bGF0aW9uTG9nZ2VyUHJvcGVydHlTdHJpbmdQcm92aWRlckFkYXB0ZXJGYWN0b3J5KCkgeworCQlzdXBlcigpOworCQlQcm9wZXJ0eVN0cmluZ1Byb3ZpZGVyQWRhcHRlckZhY3RvcnkuSU5TVEFOQ0UuYWRkQWRhcHRlckZhY3RvcnkodGhpcyk7CisJfQorCQorCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuaW1wbC5BZGFwdGVyRmFjdG9yeUltcGwjaXNGYWN0b3J5Rm9yVHlwZShqYXZhLmxhbmcuT2JqZWN0KQorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBib29sZWFuIGlzRmFjdG9yeUZvclR5cGUoT2JqZWN0IHR5cGUpIHsKKwkJcmV0dXJuICBzdXBlci5pc0ZhY3RvcnlGb3JUeXBlKHR5cGUpIHx8IHR5cGUgPT0gUHJvcGVydHlTdHJpbmdQcm92aWRlci5jbGFzczsKKwl9CisKKwkKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC51dGlsLlN0YW5kYXJkQWRhcHRlckZhY3RvcnkjY3JlYXRlRGlzZWFzZU1vZGVsQWRhcHRlcigpCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlTG9nZ2VyQWRhcHRlcigpIHsKKwkJLy8gSGF2ZSB3ZSBjcmVhdGVkIG9uZSBiZWZvcmU/CisJCWlmIChhZGFwdGVyID09IG51bGwpIHsKKwkJCS8vIE5vCisJCQlhZGFwdGVyID0gbmV3IFNpbXVsYXRpb25Mb2dnZXJQcm9wZXJ0eVN0cmluZ1Byb3ZpZGVyQWRhcHRlcigpOworCQl9IC8vIGlmIHdlIGRpZG4ndCBjcmVhdGUgb25lIGJlZm9yZQorCQlyZXR1cm4gYWRhcHRlcjsKKwl9IC8vIGNyZWF0ZURpc2Vhc2VNb2RlbEFkYXB0ZXIKKworCisJLyoqCisJICogVGhpcyBjbGFzcyByZXByZXNlbnRzIAorCSAqLworCXB1YmxpYyBzdGF0aWMgY2xhc3MgU2ltdWxhdGlvbkxvZ2dlclByb3BlcnR5U3RyaW5nUHJvdmlkZXJBZGFwdGVyIGV4dGVuZHMKKwkJCVByb3BlcnR5U3RyaW5nUHJvdmlkZXJBZGFwdGVyIHsKKworCQkvKioKKwkJICogQHBhcmFtIGRlc2NyaXB0b3IKKwkJICogQHJldHVybiB0aGUgTkxTJ2QgbmFtZSBvZiB0aGUgcHJvcGVydHkgdG8gZGlzcGxheSB0byB0aGUgdXNlcgorCQkgKi8KKwkJcHVibGljIFN0cmluZyBnZXRQcm9wZXJ0eU5hbWUoSUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IgZGVzY3JpcHRvcikgeworCQkJcmV0dXJuIExvZ2dlcldpemFyZE1lc3NhZ2VzCisJCQkJCS5nZXRTdHJpbmcoKChFU3RydWN0dXJhbEZlYXR1cmUpIGRlc2NyaXB0b3IKKwkJCQkJCQkuZ2V0RmVhdHVyZShudWxsKSkuZ2V0TmFtZSgpKTsKKwkJfSAvLyBnZXRQcm9wZXJ0eU5hbWUKKworCQkvKioKKwkJICogQHBhcmFtIGRlc2NyaXB0b3IKKwkJICogQHJldHVybiB0aGUgTkxTJ2QgdG9vbCB0aXAgdGV4dCB0aGF0IGRlc2NyaWJlcyB0aGUgcHJvcGVydHkKKwkJICovCisJCXB1YmxpYyBTdHJpbmcgZ2V0UHJvcGVydHlUb29sVGlwKAorCQkJCUlJdGVtUHJvcGVydHlEZXNjcmlwdG9yIGRlc2NyaXB0b3IpIHsKKwkJCWZpbmFsIEVTdHJ1Y3R1cmFsRmVhdHVyZSBmZWF0dXJlID0gKEVTdHJ1Y3R1cmFsRmVhdHVyZSkgZGVzY3JpcHRvcgorCQkJCQkuZ2V0RmVhdHVyZShudWxsKTsKKwkJCXJldHVybiBMb2dnZXJXaXphcmRNZXNzYWdlcy5nZXRTdHJpbmcoZmVhdHVyZS5nZXROYW1lKCkKKwkJCQkJKyBUVF9TVUZGSVgpOworCQl9IC8vIGdldFByb3BlcnR5VG9vbFRpcAorCisJCS8qKgorCQkgKiBAcGFyYW0gZGVzY3JpcHRvcgorCQkgKiBAcmV0dXJuIHRoZSBOTFMnZCB0ZXh0IHRoYXQgcmVwcmVzZW50cyB0aGUgdW5pdHMgb2YgdGhlCisJCSAqICAgICAgICAgcHJvcGVydHkKKwkJICovCisJCXB1YmxpYyBTdHJpbmcgZ2V0UHJvcGVydHlVbml0cygKKwkJCQlJSXRlbVByb3BlcnR5RGVzY3JpcHRvciBkZXNjcmlwdG9yKSB7CisJCQlmaW5hbCBFU3RydWN0dXJhbEZlYXR1cmUgZmVhdHVyZSA9IChFU3RydWN0dXJhbEZlYXR1cmUpIGRlc2NyaXB0b3IKKwkJCQkJLmdldEZlYXR1cmUobnVsbCk7CisJCQlyZXR1cm4gTG9nZ2VyV2l6YXJkTWVzc2FnZXMuZ2V0U3RyaW5nKGZlYXR1cmUuZ2V0TmFtZSgpCisJCQkJCSsgVU5JVF9TVUZGSVgpOworCQl9IC8vIGdldFByb3BlcnR5VW5pdHMKKworCX0gCit9CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkubG9nZ2Vycy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9oYW5kbGVycy9Mb2dnZXJDb21tYW5kSGFuZGxlci5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLmxvZ2dlcnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvaGFuZGxlcnMvTG9nZ2VyQ29tbWFuZEhhbmRsZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMDA3MmIxCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLmxvZ2dlcnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvaGFuZGxlcnMvTG9nZ2VyQ29tbWFuZEhhbmRsZXIuamF2YQpAQCAtMCwwICsxLDcxIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDExIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS51aS5oYW5kbGVyczsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUuY29tbWFuZHMuQWJzdHJhY3RIYW5kbGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUuY29tbWFuZHMuRXhlY3V0aW9uRXZlbnQ7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5jb21tYW5kcy5FeGVjdXRpb25FeGNlcHRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5jb21tYW5kcy5JSGFuZGxlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5TdHJ1Y3R1cmVkU2VsZWN0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy5TaW11bGF0aW9uTG9nZ2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLmhhbmRsZXJzLkhhbmRsZXJVdGlsOworCitwdWJsaWMgY2xhc3MgTG9nZ2VyQ29tbWFuZEhhbmRsZXIgeworCisJcHJpdmF0ZSBzdGF0aWMgU2ltdWxhdGlvbkxvZ2dlciBnZXRTZWxlY3Rpb24oRXhlY3V0aW9uRXZlbnQgZXhlY3V0aW9uRXZlbnQpCisJCQl0aHJvd3MgRXhlY3V0aW9uRXhjZXB0aW9uIHsKKwkJZmluYWwgSVNlbGVjdGlvbiBzZWxlY3Rpb24gPSBIYW5kbGVyVXRpbAorCQkJCS5nZXRDdXJyZW50U2VsZWN0aW9uQ2hlY2tlZChleGVjdXRpb25FdmVudCk7CisKKwkJaWYgKHNlbGVjdGlvbiBpbnN0YW5jZW9mIFN0cnVjdHVyZWRTZWxlY3Rpb24pIHsKKwkJCVN0cnVjdHVyZWRTZWxlY3Rpb24gc2VsZWN0aW9uMiA9IChTdHJ1Y3R1cmVkU2VsZWN0aW9uKSBzZWxlY3Rpb247CisJCQlPYmplY3Qgc2VsZWN0ZWQgPSBzZWxlY3Rpb24yLmdldEZpcnN0RWxlbWVudCgpOworCQkJaWYgKHNlbGVjdGVkIGluc3RhbmNlb2YgU2ltdWxhdGlvbkxvZ2dlcikgeworCQkJCXJldHVybiAoU2ltdWxhdGlvbkxvZ2dlcikgc2VsZWN0ZWQ7CisJCQl9CisKKwkJfQorCQlyZXR1cm4gbnVsbDsKKwl9CisJCisJCisJcHJpdmF0ZSBzdGF0aWMgdm9pZCBzZXRMb2dnZXJTdGF0ZShmaW5hbCBFeGVjdXRpb25FdmVudCBleGVjdXRpb25FdmVudCwgYm9vbGVhbiBlbmFibGVkKSB0aHJvd3MgRXhlY3V0aW9uRXhjZXB0aW9uCisJeworCQlTaW11bGF0aW9uTG9nZ2VyIGxvZ2dlciA9IGdldFNlbGVjdGlvbihleGVjdXRpb25FdmVudCk7CisJCWlmIChsb2dnZXIgIT0gbnVsbCkgeworCQkJbG9nZ2VyLnNldEVuYWJsZWQoZW5hYmxlZCk7CisJCX0KKwl9CisKKwlwdWJsaWMgc3RhdGljIGNsYXNzIEVuYWJsZUxvZ2dlckNvbW1hbmRIYW5kbGVyIGV4dGVuZHMgQWJzdHJhY3RIYW5kbGVyIGltcGxlbWVudHMgSUhhbmRsZXIgCisJeworCQkvKioKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5jb3JlLmNvbW1hbmRzLkFic3RyYWN0SGFuZGxlciNleGVjdXRlKG9yZy5lY2xpcHNlLmNvcmUuY29tbWFuZHMuRXhlY3V0aW9uRXZlbnQpCisJCSAqLworCQlwdWJsaWMgT2JqZWN0IGV4ZWN1dGUoZmluYWwgRXhlY3V0aW9uRXZlbnQgZXhlY3V0aW9uRXZlbnQpIHRocm93cyBFeGVjdXRpb25FeGNlcHRpb24geworCQkJc2V0TG9nZ2VyU3RhdGUoZXhlY3V0aW9uRXZlbnQsdHJ1ZSk7CisJCQlyZXR1cm4gbnVsbDsKKwkJfSAvLyBleGVjdXRlCisJfQorCisJcHVibGljIHN0YXRpYyBjbGFzcyBEaXNhYmxlTG9nZ2VyQ29tbWFuZEhhbmRsZXIgZXh0ZW5kcyBBYnN0cmFjdEhhbmRsZXIgaW1wbGVtZW50cyBJSGFuZGxlciAKKwl7CisJCS8qKgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLmNvcmUuY29tbWFuZHMuQWJzdHJhY3RIYW5kbGVyI2V4ZWN1dGUob3JnLmVjbGlwc2UuY29yZS5jb21tYW5kcy5FeGVjdXRpb25FdmVudCkKKwkJICovCisJCXB1YmxpYyBPYmplY3QgZXhlY3V0ZShmaW5hbCBFeGVjdXRpb25FdmVudCBleGVjdXRpb25FdmVudCkgdGhyb3dzIEV4ZWN1dGlvbkV4Y2VwdGlvbiB7CisJCQlzZXRMb2dnZXJTdGF0ZShleGVjdXRpb25FdmVudCxmYWxzZSk7CisJCQlyZXR1cm4gbnVsbDsKKwkJfSAvLyBleGVjdXRlCisKKwl9Cit9CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkubG9nZ2Vycy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9oYW5kbGVycy9Mb2dnZXJQcm9wZXJ0eVRlc3Rlci5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLmxvZ2dlcnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvaGFuZGxlcnMvTG9nZ2VyUHJvcGVydHlUZXN0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NTZjMjMyCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLmxvZ2dlcnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvaGFuZGxlcnMvTG9nZ2VyUHJvcGVydHlUZXN0ZXIuamF2YQpAQCAtMCwwICsxLDQ0IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDExIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS51aS5oYW5kbGVyczsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUuZXhwcmVzc2lvbnMuSVByb3BlcnR5VGVzdGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUuZXhwcmVzc2lvbnMuUHJvcGVydHlUZXN0ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5sb2dnZXJzLlNpbXVsYXRpb25Mb2dnZXI7CisKKy8qKgorICogUHJvcGVydHkgdGVzdGVyIHRvIGRldGVybWluZSB3aGV0aGVyIGEgZ2l2ZW4gbG9nZ2VyIGlzIGN1cnJlbnRseSBlbmFibGVkIG9yIG5vdC4gIAorICoKKyAqLworcHVibGljIGNsYXNzIExvZ2dlclByb3BlcnR5VGVzdGVyIGV4dGVuZHMgUHJvcGVydHlUZXN0ZXIgaW1wbGVtZW50cworCQlJUHJvcGVydHlUZXN0ZXIgeworCisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIElTX0VOQUJMRURfVkFMVUUgPSAiZW5hYmxlZCI7CisKKwkvKgorCSAqIChub24tSmF2YWRvYykKKwkgKiAKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLmNvcmUuZXhwcmVzc2lvbnMuSVByb3BlcnR5VGVzdGVyI3Rlc3QoamF2YS5sYW5nLk9iamVjdCwKKwkgKiBqYXZhLmxhbmcuU3RyaW5nLCBqYXZhLmxhbmcuT2JqZWN0W10sIGphdmEubGFuZy5PYmplY3QpCisJICovCisJcHVibGljIGJvb2xlYW4gdGVzdChmaW5hbCBPYmplY3QgcmVjZWl2ZXIsIGZpbmFsIFN0cmluZyBwcm9wZXJ0eSwKKwkJCWZpbmFsIE9iamVjdFtdIGFyZ3MsIGZpbmFsIE9iamVjdCBleHBlY3RlZFZhbHVlKSB7CisKKwkJYm9vbGVhbiByZXRWYWx1ZSA9IGZhbHNlOworCQlpZiAocmVjZWl2ZXIgaW5zdGFuY2VvZiBTaW11bGF0aW9uTG9nZ2VyKSB7CisJCQlpZiAoSVNfRU5BQkxFRF9WQUxVRS5lcXVhbHMocHJvcGVydHkpKSB7CisJCQkJcmV0VmFsdWUgPSAoKFNpbXVsYXRpb25Mb2dnZXIpIHJlY2VpdmVyKS5pc0VuYWJsZWQoKTsKKwkJCX0KKwkJfQorCQlyZXR1cm4gcmV0VmFsdWU7CisJfQorCit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLmxvZ2dlcnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvbG9nZ2Vycy9BY3RpdmF0b3IuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5sb2dnZXJzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL2xvZ2dlcnMvQWN0aXZhdG9yLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWQ4MGNmOQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5sb2dnZXJzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL2xvZ2dlcnMvQWN0aXZhdG9yLmphdmEKQEAgLTAsMCArMSw2NSBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnVpLmxvZ2dlcnM7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSUNvbmZpZ3VyYXRpb25FbGVtZW50OworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JRXh0ZW5zaW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JRXh0ZW5zaW9uUG9pbnQ7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklFeHRlbnNpb25SZWdpc3RyeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGxhdGZvcm07CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVTdHJ1Y3R1cmFsRmVhdHVyZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLkR1YmxpbkNvcmU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmxvZ2dlci5Mb2dnZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS51aS5hZGFwdGVycy5sb2dnZXJwcm9wZXJ0eWVkaXRvci5TaW11bGF0aW9uTG9nZ2VyUHJvcGVydHlFZGl0b3JBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnVpLmFkYXB0ZXJzLmxvZ2dlcnByb3BlcnR5ZWRpdG9yLlNpbXVsYXRpb25Mb2dnZXJQcm9wZXJ0eVN0cmluZ1Byb3ZpZGVyQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkucGx1Z2luLkFic3RyYWN0VUlQbHVnaW47CitpbXBvcnQgb3JnLm9zZ2kuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHQ7CisKKy8qKgorICogVGhlIGFjdGl2YXRvciBjbGFzcyBjb250cm9scyB0aGUgcGx1Zy1pbiBsaWZlIGN5Y2xlCisgKi8KK3B1YmxpYyBjbGFzcyBBY3RpdmF0b3IgZXh0ZW5kcyBBYnN0cmFjdFVJUGx1Z2luIHsKKworCS8vIFRoZSBwbHVnLWluIElECisJcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUExVR0lOX0lEID0gIm9yZy5lY2xpcHNlLnN0ZW0udWkubG9nZ2VycyI7IC8vJE5PTi1OTFMtMSQKKworCS8vIFRoZSBzaGFyZWQgaW5zdGFuY2UKKwlwcml2YXRlIHN0YXRpYyBBY3RpdmF0b3IgcGx1Z2luOworCQorCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIENMQVNTX0ZJRUxEID0gImNsYXNzIjsKKwkKKwkvKioKKwkgKiBUaGUgY29uc3RydWN0b3IKKwkgKi8KKwlwdWJsaWMgQWN0aXZhdG9yKCkgeworCX0KKworCS8qCisJICogKG5vbi1KYXZhZG9jKQorCSAqIEBzZWUgb3JnLmVjbGlwc2UudWkucGx1Z2luLkFic3RyYWN0VUlQbHVnaW4jc3RhcnQob3JnLm9zZ2kuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHQpCisJICovCisJcHVibGljIHZvaWQgc3RhcnQoQnVuZGxlQ29udGV4dCBjb250ZXh0KSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJc3VwZXIuc3RhcnQoY29udGV4dCk7CisJCXBsdWdpbiA9IHRoaXM7CisJCQorCQluZXcgU2ltdWxhdGlvbkxvZ2dlclByb3BlcnR5RWRpdG9yQWRhcHRlckZhY3RvcnkoKTsKKwkJbmV3IFNpbXVsYXRpb25Mb2dnZXJQcm9wZXJ0eVN0cmluZ1Byb3ZpZGVyQWRhcHRlckZhY3RvcnkoKTsKKwl9CisKKwkvKgorCSAqIChub24tSmF2YWRvYykKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnVpLnBsdWdpbi5BYnN0cmFjdFVJUGx1Z2luI3N0b3Aob3JnLm9zZ2kuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHQpCisJICovCisJcHVibGljIHZvaWQgc3RvcChCdW5kbGVDb250ZXh0IGNvbnRleHQpIHRocm93cyBFeGNlcHRpb24geworCQlwbHVnaW4gPSBudWxsOworCQlzdXBlci5zdG9wKGNvbnRleHQpOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIHNoYXJlZCBpbnN0YW5jZQorCSAqCisJICogQHJldHVybiB0aGUgc2hhcmVkIGluc3RhbmNlCisJICovCisJcHVibGljIHN0YXRpYyBBY3RpdmF0b3IgZ2V0RGVmYXVsdCgpIHsKKwkJcmV0dXJuIHBsdWdpbjsKKwl9CQorCQorfQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLmxvZ2dlcnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvdmlld3MvQWN0aXZlTG9nZ2Vyc1ZpZXcuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5sb2dnZXJzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3ZpZXdzL0FjdGl2ZUxvZ2dlcnNWaWV3LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjg5YTYwOAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5sb2dnZXJzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3ZpZXdzL0FjdGl2ZUxvZ2dlcnNWaWV3LmphdmEKQEAgLTAsMCArMSwyOTEgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTEgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnVpLnZpZXdzOworCitpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5BZGFwdGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5pbXBsLkFkYXB0ZXJJbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0OworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5NZW51TWFuYWdlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklMYWJlbFByb3ZpZGVyTGlzdGVuZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JVGFibGVMYWJlbFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVRyZWVDb250ZW50UHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5UcmVlVmlld2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuVmlld2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uam9icy5zaW11bGF0aW9uLklTaW11bGF0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy5MT0dHRVJfRVZFTlRTOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy5TaW11bGF0aW9uTG9nZ2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy5tYW5hZ2VyLklTaW11bGF0aW9uTG9nZ2VyTWFuYWdlckxpc3RlbmVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0ubG9nZ2Vycy5tYW5hZ2VyLlNpbXVsYXRpb25Mb2dnZXJNYW5hZ2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5TV1Q7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmdyYXBoaWNzLkltYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5UcmVlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlRyZWVDb2x1bW47CitpbXBvcnQgb3JnLmVjbGlwc2UudWkucGFydC5WaWV3UGFydDsKKworLyoqCisgKiBTVEVNIFVJIFZpZXcgdG8gZGlzcGxheSBhbGwgbG9nZ2VycyBjdXJyZW50bHkgYXR0YWNoZWQgdG8gCisgKiBhY3RpdmUgc2ltdWxhdGlvbnMuICBUaGUgdHJlZSB2aWV3IGFsbG93cyBmb3IgdXNlcnMgdG8gCisgKiBlbmFibGUvZGlzYWJsZSBhIGxvZ2dlciB3aGlsZSBydW5uaW5nLgorICoKKyAqLworcHVibGljIGNsYXNzIEFjdGl2ZUxvZ2dlcnNWaWV3IGV4dGVuZHMgVmlld1BhcnQgaW1wbGVtZW50cyBJU2ltdWxhdGlvbkxvZ2dlck1hbmFnZXJMaXN0ZW5lcgoreworCXByaXZhdGUgc3RhdGljIGZpbmFsIFNpbXVsYXRpb25Mb2dnZXJNYW5hZ2VyIExPR0dFUl9NQU5BR0VSID0gU2ltdWxhdGlvbkxvZ2dlck1hbmFnZXIuZ2V0TWFuYWdlcigpOworCXByaXZhdGUgVHJlZVZpZXdlciB2aWV3ZXI7CisJCisJLyoqCisJICogRU1GIG5vdGlmaWVyIGZvciBoYW5kbGluZyBVSSB1cGRhdGVzIHRvIHJlZmxlY3QgY2hhbmdlcyBpbiB0aGUgdW5kZXJseWluZworCSAqIGxvZ2dlciBtb2RlbHMsIHN1Y2ggYXMgZW5hYmxlL2Rpc2FibGUuCisJICovCisJcHJpdmF0ZSBmaW5hbCBBZGFwdGVyIGxhYmVsVXBkYXRlQWRhcHRlciA9IG5ldyBBZGFwdGVySW1wbCgpCisJeworCQlAT3ZlcnJpZGUKKwkJcHVibGljIHZvaWQgbm90aWZ5Q2hhbmdlZChOb3RpZmljYXRpb24gbm90aWZpY2F0aW9uKSB7CisJCQlpZiAodmlld2VyID09IG51bGwgfHwgdmlld2VyLmdldFRyZWUoKS5pc0Rpc3Bvc2VkKCkpIHsKKwkJCQkoKEVPYmplY3Qpbm90aWZpY2F0aW9uLmdldE5vdGlmaWVyKCkpLmVBZGFwdGVycygpLnJlbW92ZSh0aGlzKTsKKwkJCQlyZXR1cm47CisJCQl9CisJCQl2aWV3ZXIucmVmcmVzaChub3RpZmljYXRpb24uZ2V0Tm90aWZpZXIoKSwgdHJ1ZSk7CisJCX0KKwl9OworCisKKwlwdWJsaWMgQWN0aXZlTG9nZ2Vyc1ZpZXcoKSB7CisJfQorCQorCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGNyZWF0ZVBhcnRDb250cm9sKENvbXBvc2l0ZSBwYXJlbnQpIAorCXsKKwkJdmlld2VyID0gbmV3IFRyZWVWaWV3ZXIocGFyZW50KTsKKwkJdmlld2VyLnNldFVzZUhhc2hsb29rdXAodHJ1ZSk7CisJCQorCQlUcmVlIGJhc2VUcmVlID0gdmlld2VyLmdldFRyZWUoKTsKKworCQl2aWV3ZXIuZ2V0VHJlZSgpLnNldEhlYWRlclZpc2libGUodHJ1ZSk7CisJCXZpZXdlci5nZXRUcmVlKCkuc2V0TGluZXNWaXNpYmxlKHRydWUpOwkJCisJCQorCQlUcmVlQ29sdW1uIGNvbDEgPSBuZXcgVHJlZUNvbHVtbih2aWV3ZXIuZ2V0VHJlZSgpLCBTV1QuTEVGVCk7CisJCWNvbDEuc2V0VGV4dCgiTG9nZ2VyIik7CisJCWNvbDEuc2V0V2lkdGgoMjAwKTsKKwkJCisJCVRyZWVDb2x1bW4gY29sMiA9IG5ldyBUcmVlQ29sdW1uKGJhc2VUcmVlLCBTV1QuTEVGVCk7CisJCWNvbDIuc2V0VGV4dCgiVHlwZSIpOworCQljb2wyLnNldFdpZHRoKDE1MCk7CisJCQorCQlUcmVlQ29sdW1uIGNvbDMgPSBuZXcgVHJlZUNvbHVtbihiYXNlVHJlZSwgU1dULkxFRlQpOworCQljb2wzLnNldFRleHQoIlN0YXR1cyIpOworCQljb2wzLnNldFdpZHRoKDEwMCk7CisJCQkJCisJCWdldFNpdGUoKS5zZXRTZWxlY3Rpb25Qcm92aWRlcih2aWV3ZXIpOworCisJCWZpbmFsIE1lbnVNYW5hZ2VyIGNvbnRleHRNZW51TWFuYWdlciA9IG5ldyBNZW51TWFuYWdlcigpOworCQljb250ZXh0TWVudU1hbmFnZXIuc2V0UmVtb3ZlQWxsV2hlblNob3duKHRydWUpOworCisJCQorCQl2aWV3ZXIuZ2V0Q29udHJvbCgpLnNldE1lbnUoCisJCQkJY29udGV4dE1lbnVNYW5hZ2VyLmNyZWF0ZUNvbnRleHRNZW51KHZpZXdlci5nZXRDb250cm9sKCkpKTsKKwkJZ2V0U2l0ZSgpLnJlZ2lzdGVyQ29udGV4dE1lbnUoY29udGV4dE1lbnVNYW5hZ2VyLCB2aWV3ZXIpOworCisJCQorCQl2aWV3ZXIuc2V0Q29udGVudFByb3ZpZGVyKG5ldyBBY3RpdmVMb2dnZXJzQ29udGVudFByb3ZpZGVyKCkpOworCQl2aWV3ZXIuc2V0TGFiZWxQcm92aWRlcihuZXcgQWN0aXZlTG9nZ2Vyc0xhYmVsUHJvdmlkZXIoKSk7CisJCXZpZXdlci5zZXRJbnB1dChTaW11bGF0aW9uTG9nZ2VyTWFuYWdlci5nZXRNYW5hZ2VyKCkuZ2V0QWN0aXZlU2ltdWxhdGlvbnMoKSk7CisJCXZpZXdlci5leHBhbmRBbGwoKTsKKwkJCisJCQorCQkvLyBwb3B1bGF0ZSB0aGUgbG9nZ2VyIHdpdGggZXhpc3Rpbmcgc2ltdWxhdGlvbnMKKwkJZm9yIChJU2ltdWxhdGlvbiBzaW0gOiBTaW11bGF0aW9uTG9nZ2VyTWFuYWdlci5nZXRNYW5hZ2VyKCkuZ2V0QWN0aXZlU2ltdWxhdGlvbnMoKSkgeworCQkJYWRkU2ltdWxhdGlvbihzaW0pOworCQl9CisJCisJCUxPR0dFUl9NQU5BR0VSLmFkZExpc3RlbmVyKHRoaXMpOworCX0KKwkKKwlwcml2YXRlIHZvaWQgYWRkU2ltdWxhdGlvbihJU2ltdWxhdGlvbiBzaW11bGF0aW9uKQorCXsKKwkJQ29sbGVjdGlvbjxTaW11bGF0aW9uTG9nZ2VyPiBsb2dnZXJzID0gTE9HR0VSX01BTkFHRVIuZ2V0TG9nZ2Vyc0ZvclNpbXVsYXRpb24oc2ltdWxhdGlvbik7CisJCWlmIChsb2dnZXJzICE9IG51bGwpIHsKKwkJCWZvciAoZmluYWwgU2ltdWxhdGlvbkxvZ2dlciBsb2dnZXIgOiBsb2dnZXJzKSB7CisJCQkJbG9nZ2VyLmVBZGFwdGVycygpLmFkZChsYWJlbFVwZGF0ZUFkYXB0ZXIpOworCQkJfQorCQl9CisJfQorCQorCXByaXZhdGUgdm9pZCByZW1vdmVTaW11bGF0aW9uKElTaW11bGF0aW9uIHNpbXVsYXRpb24pCisJewkKKwkJQ29sbGVjdGlvbjxTaW11bGF0aW9uTG9nZ2VyPiBsb2dnZXJzID0gTE9HR0VSX01BTkFHRVIuZ2V0TG9nZ2Vyc0ZvclNpbXVsYXRpb24oc2ltdWxhdGlvbik7CisJCWlmIChzaW11bGF0aW9uICE9IG51bGwpIHsKKwkJCWZvciAoZmluYWwgU2ltdWxhdGlvbkxvZ2dlciBsb2dnZXIgOiBsb2dnZXJzKSB7CisJCQkJbG9nZ2VyLmVBZGFwdGVycygpLnJlbW92ZShsYWJlbFVwZGF0ZUFkYXB0ZXIpOworCQkJfQorCQl9CisJfQorCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgc2V0Rm9jdXMoKSAKKwl7CisKKwl9CisJCisJcHVibGljIHZvaWQgZGlzcG9zZSgpCisJeworCQlmb3IgKElTaW11bGF0aW9uIHNpbSA6IFNpbXVsYXRpb25Mb2dnZXJNYW5hZ2VyLmdldE1hbmFnZXIoKS5nZXRBY3RpdmVTaW11bGF0aW9ucygpKSB7CisJCQlyZW1vdmVTaW11bGF0aW9uKHNpbSk7CisJCX0KKwkJCisJCUxPR0dFUl9NQU5BR0VSLnJlbW92ZUxpc3RlbmVyKHRoaXMpOworCisJCXN1cGVyLmRpc3Bvc2UoKTsKKwl9CisJCisKKwlwdWJsaWMgdm9pZCBzaW11bGF0aW9uTG9nZ2VyRXZlbnQoTE9HR0VSX0VWRU5UUyBldmVudCwgT2JqZWN0W10gdGFyZ2V0cykgCisJeworCQkvLyBIYW5kbGUgdGhlIGFkZGl0aW9uL3JlbW92YWwgb2YgbG9nZ2VycyBmcm9tIHRoZSBhY3RpdmUgbG9nZ2VycyB2aWV3CisJCWlmIChMT0dHRVJfRVZFTlRTLlNJTVVMQVRJT05TX0FEREVELmVxdWFscyhldmVudCkpIHsKKwkJCUlTaW11bGF0aW9uW10gc2ltcyA9IChJU2ltdWxhdGlvbltdKSB0YXJnZXRzOworCQkJZm9yIChJU2ltdWxhdGlvbiBzaW0gOiBzaW1zKSB7CisJCQkJYWRkU2ltdWxhdGlvbihzaW0pOworCQkJfQorCQl9CisJCQorCQlpZiAoTE9HR0VSX0VWRU5UUy5TSU1VTEFUSU9OU19SRU1PVkVELmVxdWFscyhldmVudCkpIHsKKwkJCUlTaW11bGF0aW9uW10gc2ltcyA9IChJU2ltdWxhdGlvbltdKSB0YXJnZXRzOworCQkJZm9yIChJU2ltdWxhdGlvbiBzaW0gOiBzaW1zKSB7CisJCQkJcmVtb3ZlU2ltdWxhdGlvbihzaW0pOworCQkJfQorCQl9CisJCQorCQl2aWV3ZXIucmVmcmVzaCgpOworCX0KKwkKKwkKKwkvKioKKwkgKiBDb250ZW50IHByb3ZpZGVyIHRvIHBvcHVsYXRlIHRoZSBhY3RpdmUgbG9nZ2VycyB0cmVlIHZpZXcKKwkgKgorCSAqLworCXByaXZhdGUgY2xhc3MgQWN0aXZlTG9nZ2Vyc0NvbnRlbnRQcm92aWRlciBpbXBsZW1lbnRzIElUcmVlQ29udGVudFByb3ZpZGVyCisJeworCisJCUBPdmVycmlkZQorCQlwdWJsaWMgdm9pZCBkaXNwb3NlKCkgCisJCXsKKwkJCQorCQl9CisKKwkJQE92ZXJyaWRlCisJCXB1YmxpYyB2b2lkIGlucHV0Q2hhbmdlZChWaWV3ZXIgdmlld2VyLCBPYmplY3Qgb2xkSW5wdXQsIE9iamVjdCBuZXdJbnB1dCkgeworCQl9CisKKwkJQE92ZXJyaWRlCisJCXB1YmxpYyBPYmplY3RbXSBnZXRFbGVtZW50cyhPYmplY3QgaW5wdXRFbGVtZW50KSAKKwkJeworCQkJaWYgKGlucHV0RWxlbWVudCBpbnN0YW5jZW9mIENvbGxlY3Rpb24pIHsKKwkJCQlyZXR1cm4gKChDb2xsZWN0aW9uPD8+KSBpbnB1dEVsZW1lbnQpLnRvQXJyYXkoKTsKKwkJCX0gZWxzZSBpZiAoaW5wdXRFbGVtZW50IGluc3RhbmNlb2YgSVNpbXVsYXRpb24pIHsKKwkJCQlDb2xsZWN0aW9uPD8+IGxvZ2dlcnMgPSBMT0dHRVJfTUFOQUdFUi5nZXRMb2dnZXJzRm9yU2ltdWxhdGlvbigoSVNpbXVsYXRpb24paW5wdXRFbGVtZW50KTsKKwkJCQlpZiAobG9nZ2VycyAhPSBudWxsKSB7CisJCQkJCXJldHVybiBsb2dnZXJzLnRvQXJyYXkoKTsKKwkJCQl9CisJCQl9CisKKwkJCXJldHVybiBuZXcgT2JqZWN0WzBdOworCQl9CisKKwkJQE92ZXJyaWRlCisJCXB1YmxpYyBPYmplY3RbXSBnZXRDaGlsZHJlbihPYmplY3QgcGFyZW50RWxlbWVudCkgCisJCXsJCQkJCisJCQlpZiAocGFyZW50RWxlbWVudCBpbnN0YW5jZW9mIElTaW11bGF0aW9uKSB7CisJCQkJQ29sbGVjdGlvbjw/PiBsb2dnZXJzID0gTE9HR0VSX01BTkFHRVIuZ2V0TG9nZ2Vyc0ZvclNpbXVsYXRpb24oKElTaW11bGF0aW9uKXBhcmVudEVsZW1lbnQpOworCQkJCWlmIChsb2dnZXJzICE9IG51bGwpIHsKKwkJCQkJcmV0dXJuIGxvZ2dlcnMudG9BcnJheSgpOworCQkJCX0KKwkJCX0KKworCQkJcmV0dXJuIG5ldyBPYmplY3RbMF07CisJCX0KKworCQlAT3ZlcnJpZGUKKwkJcHVibGljIE9iamVjdCBnZXRQYXJlbnQoT2JqZWN0IGVsZW1lbnQpIAorCQl7CisJCQlyZXR1cm4gbnVsbDsKKwkJfQorCisJCUBPdmVycmlkZQorCQlwdWJsaWMgYm9vbGVhbiBoYXNDaGlsZHJlbihPYmplY3QgZWxlbWVudCkgCisJCXsKKwkJCWlmIChlbGVtZW50IGluc3RhbmNlb2YgSVNpbXVsYXRpb24pIHsKKwkJCQlDb2xsZWN0aW9uPD8+IGxvZ2dlcnMgPSBMT0dHRVJfTUFOQUdFUi5nZXRMb2dnZXJzRm9yU2ltdWxhdGlvbigoSVNpbXVsYXRpb24pZWxlbWVudCk7CisJCQkJcmV0dXJuIGxvZ2dlcnMgIT0gbnVsbCAmJiBsb2dnZXJzLnNpemUoKSA+IDA7CisJCQl9CisJCQlyZXR1cm4gZmFsc2U7CisJCX0KKwkJCisJfQorCQorCS8qKgorCSAqIExhYmVsIHByb3ZpZGVyIHRvIHBvcHVsYXRlIHRoZSBhY3RpdmUgbG9nZ2VycyB0cmVlIHZpZXcKKwkgKgorCSAqLworCXByaXZhdGUgY2xhc3MgQWN0aXZlTG9nZ2Vyc0xhYmVsUHJvdmlkZXIgaW1wbGVtZW50cyBJVGFibGVMYWJlbFByb3ZpZGVyCisJeworCisJCS8qIChub24tSmF2YWRvYykKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklCYXNlTGFiZWxQcm92aWRlciNhZGRMaXN0ZW5lcihvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklMYWJlbFByb3ZpZGVyTGlzdGVuZXIpCisJCSAqLworCQlwdWJsaWMgdm9pZCBhZGRMaXN0ZW5lcihJTGFiZWxQcm92aWRlckxpc3RlbmVyIGxpc3RlbmVyKSAKKwkJeworCQkJCisJCX0KKworCQkvKiAobm9uLUphdmFkb2MpCisJCSAqIEBzZWUgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JQmFzZUxhYmVsUHJvdmlkZXIjZGlzcG9zZSgpCisJCSAqLworCQlwdWJsaWMgdm9pZCBkaXNwb3NlKCkgewl9CisKKwkJLyogKG5vbi1KYXZhZG9jKQorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSUJhc2VMYWJlbFByb3ZpZGVyI2lzTGFiZWxQcm9wZXJ0eShqYXZhLmxhbmcuT2JqZWN0LCBqYXZhLmxhbmcuU3RyaW5nKQorCQkgKi8KKwkJcHVibGljIGJvb2xlYW4gaXNMYWJlbFByb3BlcnR5KE9iamVjdCBlbGVtZW50LCBTdHJpbmcgcHJvcGVydHkpIAorCQl7CisJCQlyZXR1cm4gZmFsc2U7CisJCX0KKworCQlwdWJsaWMgdm9pZCByZW1vdmVMaXN0ZW5lcihJTGFiZWxQcm92aWRlckxpc3RlbmVyIGxpc3RlbmVyKSB7IH0KKworCQlAT3ZlcnJpZGUKKwkJcHVibGljIEltYWdlIGdldENvbHVtbkltYWdlKE9iamVjdCBlbGVtZW50LCBpbnQgY29sdW1uSW5kZXgpIAorCQl7CisJCQlyZXR1cm4gbnVsbDsKKwkJfQorCisJCXB1YmxpYyBTdHJpbmcgZ2V0Q29sdW1uVGV4dChPYmplY3QgZWxlbWVudCwgaW50IGNvbHVtbkluZGV4KSAKKwkJeworCQkJaWYgKGVsZW1lbnQgaW5zdGFuY2VvZiBJU2ltdWxhdGlvbiAmJiBjb2x1bW5JbmRleCA9PSAwKSB7CisJCQkJSVNpbXVsYXRpb24gc2ltID0gKElTaW11bGF0aW9uKWVsZW1lbnQ7CisJCQkJcmV0dXJuIHNpbS5nZXROYW1lV2l0aFNlcXVlbmNlTnVtYmVyKCk7CisJCQl9IGVsc2UgaWYgKGVsZW1lbnQgaW5zdGFuY2VvZiBTaW11bGF0aW9uTG9nZ2VyKSB7CisJCQkJU2ltdWxhdGlvbkxvZ2dlciBsb2dnZXIgPSAoU2ltdWxhdGlvbkxvZ2dlcillbGVtZW50OworCQkJCXN3aXRjaCAoY29sdW1uSW5kZXgpIHsKKwkJCQljYXNlIDA6IHJldHVybiBsb2dnZXIuZ2V0VVJJKCkubGFzdFNlZ21lbnQoKTsKKwkJCQljYXNlIDE6IHJldHVybiBsb2dnZXIuZUNsYXNzKCkuZ2V0TmFtZSgpOworCQkJCWNhc2UgMjogcmV0dXJuIGxvZ2dlci5pc0VuYWJsZWQoKSA/ICJlbmFibGVkIiA6ICJkaXNhYmxlZCI7CisJCQkJfQorCQkJfQorCisJCQlyZXR1cm4gIiI7CisJCX0KKwl9Cit9CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkubG9nZ2Vycy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS93aXphcmRzL0xvZ2dlckRlZmluaXRpb25Db250cm9sLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkubG9nZ2Vycy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS93aXphcmRzL0xvZ2dlckRlZmluaXRpb25Db250cm9sLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTFiZTRlYwotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5sb2dnZXJzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3dpemFyZHMvTG9nZ2VyRGVmaW5pdGlvbkNvbnRyb2wuamF2YQpAQCAtMCwwICsxLDIxNSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNywgMjAxMSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0udWkud2l6YXJkczsKKworaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQ29yZUV4Y2VwdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSUNvbmZpZ3VyYXRpb25FbGVtZW50OworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JRXh0ZW5zaW9uUmVnaXN0cnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBsYXRmb3JtOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS51dGlsLkVjb3JlVXRpbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubG9nZ2VyLkxvZ2dlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnVpLkFjdGl2YXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuU1dUOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuTW9kaWZ5TGlzdGVuZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5TZWxlY3Rpb25BZGFwdGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuU2VsZWN0aW9uRXZlbnQ7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5HcmlkRGF0YTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QubGF5b3V0LkdyaWRMYXlvdXQ7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tYm87CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkxhYmVsOworCisvKioKKyAqIFRoaXMgY2xhc3MgcmVwcmVzZW50cyB0aGUgU1dUIGNvbnRyb2wgZm9yIGRlZmluaW5nIGEgbG9nZ2VyLgorICovCitwdWJsaWMgY2xhc3MgTG9nZ2VyRGVmaW5pdGlvbkNvbnRyb2wgZXh0ZW5kcyBDb21wb3NpdGUgeworCisJcHJpdmF0ZSBzdGF0aWMgTG9nZ2VyW10gbG9nZ2VycyA9IG51bGw7CisKKwlwcml2YXRlIGZpbmFsIENvbWJvIGNvbWJvOworCisJcHJpdmF0ZSBmaW5hbCBMb2dnZXJQcm9wZXJ0eUNvbXBvc2l0ZSBsb2dnZXJQcm9wZXJ0eUNvbXBvc2l0ZTsKKwkKKwkvKioKKwkgKiB0aGUgRGlzZWFzZURlZmluaXRpb25Db250cm9sIGNvbWJvIG11c3QgYmUgYWJsZSB0byB1cGRhdGUgdGhlIE5ld0Rpc2Vhc2VXaXphcmQKKwkgKi8KKwlwcml2YXRlIE5ld0xvZ2dlcldpemFyZCBuZXdMb2dnZXJXaXphcmQgPSBudWxsOworCisJLyoqCisJICogQ3JlYXRlIHRoZSBjb21wb3NpdGUKKwkgKiAKKwkgKiBAcGFyYW0gcGFyZW50CisJICogQHBhcmFtIHN0eWxlCisJICogQHBhcmFtIHByb2plY3RWYWxpZGF0b3IKKwkgKiBAcGFyYW0gbmR3IGEgTmV3RGlzZWFzZVdpemFyZAorCSAqLworCXB1YmxpYyBMb2dnZXJEZWZpbml0aW9uQ29udHJvbChmaW5hbCBDb21wb3NpdGUgcGFyZW50LCBmaW5hbCBpbnQgc3R5bGUsCisJCQlNb2RpZnlMaXN0ZW5lciBwcm9qZWN0VmFsaWRhdG9yLCBJUHJvamVjdCBwcm9qZWN0LCBOZXdMb2dnZXJXaXphcmQgbmx3KSB7CisJCXN1cGVyKHBhcmVudCwgc3R5bGUpOworCQluZXdMb2dnZXJXaXphcmQgPSBubHc7CisJCWZpbmFsIEdyaWRMYXlvdXQgZ3JpZExheW91dCA9IG5ldyBHcmlkTGF5b3V0KCk7CisJCWdyaWRMYXlvdXQubWFyZ2luV2lkdGggPSAwOworCQlncmlkTGF5b3V0Lm51bUNvbHVtbnMgPSAyOworCQlzZXRMYXlvdXQoZ3JpZExheW91dCk7CisKKwkJZmluYWwgTGFiZWwgZGlzZWFzZU1vZGVsTGFiZWwgPSBuZXcgTGFiZWwodGhpcywgU1dULk5PTkUpOworCQlmaW5hbCBHcmlkRGF0YSBnZF9kaXNlYXNlTW9kZWxMYWJlbCA9IG5ldyBHcmlkRGF0YShTV1QuRklMTCwgU1dULkNFTlRFUiwgdHJ1ZSwgZmFsc2UpOworCQlnZF9kaXNlYXNlTW9kZWxMYWJlbC53aWR0aEhpbnQgPSAxMDA7CisJCWRpc2Vhc2VNb2RlbExhYmVsLnNldExheW91dERhdGEoZ2RfZGlzZWFzZU1vZGVsTGFiZWwpOworCQlkaXNlYXNlTW9kZWxMYWJlbC5zZXRUZXh0KExvZ2dlcldpemFyZE1lc3NhZ2VzLmdldFN0cmluZygiTERDLjAiKSk7IC8vJE5PTi1OTFMtMSQKKworCQljb21ibyA9IG5ldyBDb21ibyh0aGlzLCBTV1QuUkVBRF9PTkxZKTsKKwkJY29tYm8uc2V0VGV4dExpbWl0KDMwKTsKKwkJZmluYWwgR3JpZERhdGEgZ2RfY29tYm8gPSBuZXcgR3JpZERhdGEoU1dULkZJTEwsIFNXVC5DRU5URVIsIHRydWUsCisJCQkJZmFsc2UpOworCQlnZF9jb21iby53aWR0aEhpbnQgPSAzMDM7CisJCWNvbWJvLnNldExheW91dERhdGEoZ2RfY29tYm8pOworCisJCWNvbWJvLnNldFRvb2xUaXBUZXh0KExvZ2dlcldpemFyZE1lc3NhZ2VzLmdldFN0cmluZygiTERDLjEiKSk7IC8vJE5PTi1OTFMtMSQKKwkJLy8gSW5pdGlhbGl6ZSB0aGUgbGlzdCBvZiBkaXNlYXNlIG1vZGVscyBhdmFpbGFibGUKKwkJY29tYm8uc2V0SXRlbXMoZ2V0TG9nZ2VyTmFtZXMoZ2V0TG9nZ2VycygpKSk7CisJCWNvbWJvLnNlbGVjdCgwKTsKKwkJY29tYm8uYWRkTW9kaWZ5TGlzdGVuZXIocHJvamVjdFZhbGlkYXRvcik7CisKKworCQlsb2dnZXJQcm9wZXJ0eUNvbXBvc2l0ZSA9IG5ldyBMb2dnZXJQcm9wZXJ0eUNvbXBvc2l0ZSh0aGlzLAorCQkJCVNXVC5OT05FLCBnZXRMb2dnZXJzKCksIHByb2plY3RWYWxpZGF0b3IsIHByb2plY3QpOworCQlmaW5hbCBHcmlkRGF0YSBnZF9kaXNlYXNlTW9kZWxQcm9wZXJ0eUNvbnRyb2wgPSBuZXcgR3JpZERhdGEoU1dULkZJTEwsCisJCQkJU1dULkNFTlRFUiwgdHJ1ZSwgZmFsc2UsIDIsIDEpOworCQlsb2dnZXJQcm9wZXJ0eUNvbXBvc2l0ZQorCQkJCS5zZXRMYXlvdXREYXRhKGdkX2Rpc2Vhc2VNb2RlbFByb3BlcnR5Q29udHJvbCk7CisKKwkJY29tYm8uYWRkU2VsZWN0aW9uTGlzdGVuZXIobmV3IFNlbGVjdGlvbkFkYXB0ZXIoKSB7CisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyB2b2lkIHdpZGdldFNlbGVjdGVkKFNlbGVjdGlvbkV2ZW50IGUpIHsKKwkJCQlsb2dnZXJQcm9wZXJ0eUNvbXBvc2l0ZQorCQkJCQkJLmRpc3BsYXlMb2dnZXIoZ2V0TG9nZ2VycygpW2NvbWJvCisJCQkJCQkJCS5nZXRTZWxlY3Rpb25JbmRleCgpXSk7CisJCQkJCisJCQkJLy8gdXBkYXRlIHRoZSBkdWJsaW4gY29yZSBmcm9tIHRoZSBwbHVnaW4gZGVmYXVsdHMgZm9yIHRoZQorCQkJCS8vIG5ld2x5IHNlbGVjdGVkIGRpc2Vhc2UgbW9kZWw7CisJCQkJbmV3TG9nZ2VyV2l6YXJkLm5ld0R1YmxpbkNvcmVQYWdlLnVwZGF0ZUR1YmxpbkNvcmVQYWdlKGdldFNlbGVjdGVkTG9nZ2VyKCkuZ2V0RHVibGluQ29yZSgpKTsKKwkJCQkKKwkJCQkvLyBsYXlvdXQoKTsKKwkJCX0gLy8gd2lkZ2V0U2VsZWN0ZWQKKworCQl9KTsKKwkJCisJCS8vUGxhdGZvcm1VSS5nZXRXb3JrYmVuY2goKS5nZXRIZWxwU3lzdGVtKCkuc2V0SGVscChwYXJlbnQsICJvcmcuZWNsaXBzZS5zdGVtLmRvYy5uZXdkaXNlYXNlX2NvbnRleHRpZCIpOworCX0KKworCisJCisJLyoqCisJICogQHJldHVybiBhbiBhcnJheSBvZiB0aGUge0BsaW5rIERpc2Vhc2VNb2RlbHN9cyBkZWZpbmVkIGluIHRoZSBzeXN0ZW0uCisJICovCisJcHJpdmF0ZSBMb2dnZXJbXSBnZXRMb2dnZXJzKCkgeworCQlpZiAobG9nZ2VycyA9PSBudWxsKSB7CisJCQlmaW5hbCBJRXh0ZW5zaW9uUmVnaXN0cnkgcmVnaXN0cnkgPSBQbGF0Zm9ybS5nZXRFeHRlbnNpb25SZWdpc3RyeSgpOworCQkJZmluYWwgSUNvbmZpZ3VyYXRpb25FbGVtZW50W10gbG9nZ2VyQ29uZmlnRWxlbWVudHMgPSByZWdpc3RyeQorCQkJCQkuZ2V0Q29uZmlndXJhdGlvbkVsZW1lbnRzRm9yKG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5Db25zdGFudHMuSURfTE9HR0VSX0VYVEVOU0lPTl9QT0lOVCk7CisKKwkJCWZpbmFsIExpc3Q8TG9nZ2VyPiB0ZW1wID0gbmV3IEFycmF5TGlzdDxMb2dnZXI+KCk7CisKKwkJCWxvZ2dlcnMgPSBuZXcgTG9nZ2VyW2xvZ2dlckNvbmZpZ0VsZW1lbnRzLmxlbmd0aF07CisKKwkJCWZvciAoSUNvbmZpZ3VyYXRpb25FbGVtZW50IGVsZW1lbnQgOiBsb2dnZXJDb25maWdFbGVtZW50cykgeworCQkJCS8vZmluYWwgSUNvbmZpZ3VyYXRpb25FbGVtZW50IGVsZW1lbnQgPSBsb2dnZXJDb25maWdFbGVtZW50c1tpXTsKKwkJCQlMb2dnZXIgbG9nZ2VyID0gbnVsbDsKKwkJCQkvLyBEb2VzIHRoZSBlbGVtZW50IHNwZWNpZnkgdGhlIGNsYXNzIG9mIHRoZSBkaXNlYXNlIG1vZGVsPworCQkJCWlmIChlbGVtZW50LmdldE5hbWUoKS5lcXVhbHMob3JnLmVjbGlwc2Uuc3RlbS5jb3JlLkNvbnN0YW50cy5MT0dHRVJfRUxFTUVOVCkpIHsKKwkJCQkJLy8gWWVzCisJCQkJCXRyeSB7CisJCQkJCQlsb2dnZXIgPSAoTG9nZ2VyKSBlbGVtZW50LmNyZWF0ZUV4ZWN1dGFibGVFeHRlbnNpb24oImNsYXNzIik7CisJCQkJCQl0ZW1wLmFkZChsb2dnZXIpOyAvLyROT04tTkxTLTEkCisJCQkJCX0gY2F0Y2ggKGZpbmFsIENvcmVFeGNlcHRpb24gZSkgeworCQkJCQkJQWN0aXZhdG9yLmxvZ0Vycm9yKAorCQkJCQkJCQlMb2dnZXJXaXphcmRNZXNzYWdlcy5nZXRTdHJpbmcoIkxEQy4zIiksIGUpOyAvLyROT04tTkxTLTEkCisJCQkJCX0KKwkJCQl9IC8vIGlmCisJCQl9IC8vIGZvciBlYWNoIGNvbmZpZ3VyYXRpb24gZWxlbWVudAorCQkJbG9nZ2VycyA9IHRlbXAudG9BcnJheShuZXcgTG9nZ2VyW10ge30pOworCQl9IC8vIGlmIGRpc2VzYWVNb2RlbHMgbm90IGNyZWF0ZWQKKwkJCisJCQorCQkKKwkJLy8gbm93IHVwZGF0ZSB0aGUgZHVibGluIGNvcmVzIHdpdGggdGhlIGRlZmF1bHQgcGx1Z2luLnhtbCBpbmZvCisvLwkJZm9yKExvZ2dlciBsb2dnZXI6IGxvZ2dlcnMpIHsKKy8vCQkJaWYobG9nZ2VycyAhPSBudWxsKSB7CisvLwkJCQkgSkhLIGdldHRpbmcgREMgaW5mbyBmcm9tIHRoZSBwbHVnZ2luLnhtbAorLy8JCQkJRHVibGluQ29yZSBkdWJsaW5Db3JlID0gb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLkFjdGl2YXRvci5nZXRQbHVnaW5EdWJsaW5Db3JlKGRpc2Vhc2VNb2RlbCk7CisvLwkJCQlpZihkdWJsaW5Db3JlICE9IG51bGwpIHsKKy8vCQkJCQlkaXNlYXNlTW9kZWwuc2V0RHVibGluQ29yZShkdWJsaW5Db3JlKTsKKy8vCQkJCX0KKy8vCQkJfQorLy8JCX0KKworCQlyZXR1cm4gbG9nZ2VyczsKKwl9IAorCisJLyoqCisJICogQHJldHVybiB0aGUgbmFtZXMgb2YgdGhlIGxvZ2dlcnMKKwkgKi8KKwlwcml2YXRlIFN0cmluZ1tdIGdldExvZ2dlck5hbWVzKGZpbmFsIExvZ2dlcltdIGxvZ2dlcnMpIHsKKwkJZmluYWwgU3RyaW5nW10gcmV0VmFsdWUgPSBuZXcgU3RyaW5nW2xvZ2dlcnMubGVuZ3RoXTsKKwkJZm9yIChpbnQgaSA9IDA7IGkgPCBsb2dnZXJzLmxlbmd0aDsgaSsrKSB7CisJCQlTdHJpbmcgbmFtZSA9IGxvZ2dlcnNbaV0uZ2V0RHVibGluQ29yZSgpLmdldFRpdGxlKCk7CisJCQkvLyBXYXMgYSBuYW1lIHNwZWNpZmllZD8KKwkJCWlmICgobmFtZSA9PSBudWxsKSB8fCBuYW1lLmVxdWFscygiIikpIHsgLy8kTk9OLU5MUy0xJAorCQkJCS8vIE5vCisJCQkJbmFtZSA9IGxvZ2dlcnNbaV0uZ2V0Q2xhc3MoKS5nZXRTaW1wbGVOYW1lKCk7CisJCQl9IC8vIGlmCisKKwkJCXJldFZhbHVlW2ldID0gbmFtZTsKKwkJfSAvLyBmb3IgaQorCQlyZXR1cm4gcmV0VmFsdWU7CisJfSAvLyBnZXREaXNlYXNlTW9kZWxOYW1lcworCisJLyoqCisJICogCisJICogQHJldHVybgorCSAqLworCUxvZ2dlciBnZXRTZWxlY3RlZExvZ2dlcigpIHsKKwkJZmluYWwgTG9nZ2VyIHJldFZhbHVlID0gRWNvcmVVdGlsLmNvcHkoZ2V0TG9nZ2VycygpW2NvbWJvLmdldFNlbGVjdGlvbkluZGV4KCldKTsKKwkJbG9nZ2VyUHJvcGVydHlDb21wb3NpdGUucG9wdWxhdGVMb2dnZXIocmV0VmFsdWUpOworCQlyZXR1cm4gcmV0VmFsdWU7CisJfSAvLyBnZXRTZWxlY3RlZERpc2Vhc2VNb2RlbAorCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgZGlzcG9zZSgpIHsKKwkJc3VwZXIuZGlzcG9zZSgpOworCX0KKworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIGNoZWNrU3ViY2xhc3MoKSB7CisJCS8vIERpc2FibGUgdGhlIGNoZWNrIHRoYXQgcHJldmVudHMgc3ViLWNsYXNzaW5nIG9mIFNXVCBjb21wb25lbnRzCisJfQorCisJLyoqCisJICogQHJldHVybiA8Y29kZT50cnVlPC9jb2RlPiBpZiB0aGUgY29udGVudHMgb2YgdGhlIGNvbnRyb2wgYXJlIHZhbGlkLAorCSAqICAgICAgICAgPGNvZGU+ZmFsc2U8L2NvZGU+IG90aGVyd2lzZS4KKwkgKi8KKwlwdWJsaWMgYm9vbGVhbiB2YWxpZGF0ZSgpIHsKKwkJcmV0dXJuIGxvZ2dlclByb3BlcnR5Q29tcG9zaXRlLnZhbGlkYXRlKCk7CisJfSAvLyB2YWxpZGF0ZQorCisJLyoqCisJICogQHJldHVybiB0aGUgZXJyb3IgbWVzc2FnZSBzZXQgYnkge0BsaW5rICN2YWxpZGF0ZSgpfQorCSAqLworCXB1YmxpYyBTdHJpbmcgZ2V0RXJyb3JNZXNzYWdlKCkgeworCQlyZXR1cm4gbG9nZ2VyUHJvcGVydHlDb21wb3NpdGUuZ2V0RXJyb3JNZXNzYWdlKCk7CisJfQorCit9CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkubG9nZ2Vycy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS93aXphcmRzL0xvZ2dlclByb3BlcnR5Q29tcG9zaXRlLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkubG9nZ2Vycy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS93aXphcmRzL0xvZ2dlclByb3BlcnR5Q29tcG9zaXRlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODA3Mjc3NgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5sb2dnZXJzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3dpemFyZHMvTG9nZ2VyUHJvcGVydHlDb21wb3NpdGUuamF2YQpAQCAtMCwwICsxLDEyNyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAxMSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0udWkud2l6YXJkczsKKworaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOworaW1wb3J0IGphdmEudXRpbC5NYXA7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubG9nZ2VyLkxvZ2dlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnVpLkFjdGl2YXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnVpLmFkYXB0ZXJzLmxvZ2dlcnByb3BlcnR5ZWRpdG9yLkxvZ2dlclByb3BlcnR5RWRpdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udWkuYWRhcHRlcnMubG9nZ2VycHJvcGVydHllZGl0b3IuTG9nZ2VyUHJvcGVydHlFZGl0b3JBZGFwdGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udWkuYWRhcHRlcnMubG9nZ2VycHJvcGVydHllZGl0b3IuTG9nZ2VyUHJvcGVydHlFZGl0b3JBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuU1dUOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5jdXN0b20uU3RhY2tMYXlvdXQ7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5Nb2RpZnlMaXN0ZW5lcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuTGFiZWw7CisKKy8qKgorICogVGhpcyBjbGFzcyByZXByZXNlbnRzIHRoZSBlZGl0b3Igc2NyZWVuIG9mIHRoZSBuZXcgbG9nZ2VyIHdpemFyZAorICovCitwdWJsaWMgY2xhc3MgTG9nZ2VyUHJvcGVydHlDb21wb3NpdGUgZXh0ZW5kcyBDb21wb3NpdGUgeworCisJcHJpdmF0ZSBNYXA8TG9nZ2VyLCBMb2dnZXJQcm9wZXJ0eUVkaXRvcj4gbW9kZWxNYXAgPSBuZXcgSGFzaE1hcDxMb2dnZXIsIExvZ2dlclByb3BlcnR5RWRpdG9yPigpOworCisJcHJpdmF0ZSBTdGFja0xheW91dCBzdGFja0xheW91dCA9IG51bGw7CisKKwkvKioKKwkgKiBDcmVhdGUgdGhlIGNvbXBvc2l0ZQorCSAqIAorCSAqIEBwYXJhbSBwYXJlbnQKKwkgKiBAcGFyYW0gc3R5bGUKKwkgKiBAcGFyYW0gcHJvamVjdFZhbGlkYXRvcgorCSAqLworCXB1YmxpYyBMb2dnZXJQcm9wZXJ0eUNvbXBvc2l0ZShmaW5hbCBDb21wb3NpdGUgcGFyZW50LAorCQkJZmluYWwgaW50IHN0eWxlLCBmaW5hbCBMb2dnZXJbXSBsb2dnZXJzLAorCQkJTW9kaWZ5TGlzdGVuZXIgcHJvamVjdFZhbGlkYXRvciwgSVByb2plY3QgcHJvamVjdCkgeworCQlzdXBlcihwYXJlbnQsIHN0eWxlKTsKKwkJc3RhY2tMYXlvdXQgPSBuZXcgU3RhY2tMYXlvdXQoKTsKKwkJc2V0TGF5b3V0KHN0YWNrTGF5b3V0KTsKKworCQlMYWJlbCBsYWJlbDsKKwkJbGFiZWwgPSBuZXcgTGFiZWwodGhpcywgU1dULk5PTkUpOworCQlsYWJlbC5zZXRUZXh0KExvZ2dlcldpemFyZE1lc3NhZ2VzLmdldFN0cmluZygiRE1QQzEiKSk7IC8vJE5PTi1OTFMtMSQKKwkJTG9nZ2VyUHJvcGVydHlFZGl0b3IgZmlyc3RPbmUgPSBudWxsOworCQkvLyBBbnkgZGlzZWFzZSBtb2RlbHM/CisJCWlmIChsb2dnZXJzICE9IG51bGwpIHsKKwkJCS8vIFllcworCQkJZm9yIChpbnQgaSA9IDA7IGkgPCBsb2dnZXJzLmxlbmd0aDsgaSsrKSB7CisKKwkJCQlMb2dnZXJQcm9wZXJ0eUVkaXRvckFkYXB0ZXIgZG1wZWEgPSAoTG9nZ2VyUHJvcGVydHlFZGl0b3JBZGFwdGVyKSBMb2dnZXJQcm9wZXJ0eUVkaXRvckFkYXB0ZXJGYWN0b3J5LklOU1RBTkNFCisJCQkJCQkuYWRhcHQobG9nZ2Vyc1tpXSwKKwkJCQkJCQkJTG9nZ2VyUHJvcGVydHlFZGl0b3JBZGFwdGVyLmNsYXNzKTsKKworCQkJCWZpbmFsIExvZ2dlclByb3BlcnR5RWRpdG9yIGRtcGUgPSBkbXBlYQorCQkJCQkJLmNyZWF0ZUxvZ2dlclByb3BlcnR5RWRpdG9yKHRoaXMsIFNXVC5OT05FLAorCQkJCQkJCQlwcm9qZWN0VmFsaWRhdG9yLCBwcm9qZWN0KTsKKworCQkJCW1vZGVsTWFwLnB1dChsb2dnZXJzW2ldLCBkbXBlKTsKKwkJCQlpZiAoZmlyc3RPbmUgPT0gbnVsbCkgeworCQkJCQkvLyBZZXMKKwkJCQkJZmlyc3RPbmUgPSBkbXBlOworCQkJCX0gLy8gaWYKKwkJCX0gLy8gZm9yIGkKKwkJfSAvLyBpZiBhbnkgZGlzZWFzZSBtb2RlbHM/CisKKwkJc3RhY2tMYXlvdXQudG9wQ29udHJvbCA9IGZpcnN0T25lOworCX0gLy8gRGlzZWFzZU1vZGVsUHJvcGVydHlDb21wb3NpdGUKKworCXZvaWQgZGlzcGxheUxvZ2dlcihmaW5hbCBMb2dnZXIgZGlzZWFzZU1vZGVsKSB7CisJCWZpbmFsIExvZ2dlclByb3BlcnR5RWRpdG9yIGRtcGUgPSBtb2RlbE1hcC5nZXQoZGlzZWFzZU1vZGVsKTsKKwkJLy8gRGlkIHdlIGZpbmQgaXQ/CisJCWlmIChkbXBlICE9IG51bGwpIHsKKwkJCS8vIFllcworCQkJc3RhY2tMYXlvdXQudG9wQ29udHJvbCA9IGRtcGU7CisJCQlsYXlvdXQoKTsKKwkJfSAvLyBpZgorCQllbHNlIHsKKwkJCUFjdGl2YXRvci5sb2dFcnJvcihMb2dnZXJXaXphcmRNZXNzYWdlcy5nZXRTdHJpbmcoIkRNUEMyIikgLy8kTk9OLU5MUy0xJAorCQkJCQkrIGRpc2Vhc2VNb2RlbC5nZXRDbGFzcygpLmdldE5hbWUoKSArICJcIiIsIG51bGwpOyAvLyROT04tTkxTLTEkCisJCX0KKwl9IC8vIGRpc3BsYXlEaXNlYXNlTW9kZWwKKwkKKwlwdWJsaWMgdm9pZCBkaXNwb3NlKCkgeworCQlzdXBlci5kaXNwb3NlKCk7CisJfQorCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgY2hlY2tTdWJjbGFzcygpIHsKKwkJLy8gRGlzYWJsZSB0aGUgY2hlY2sgdGhhdCBwcmV2ZW50cyBzdWItY2xhc3Npbmcgb2YgU1dUIGNvbXBvbmVudHMKKwl9CisKKwkvKioKKwkgKiBAcmV0dXJuIDxjb2RlPnRydWU8L2NvZGU+IGlmIHRoZSBjb250ZW50cyBvZiB0aGUgY29tcG9zaXRlIGFyZSB2YWxpZCwKKwkgKiAgICAgICAgIDxjb2RlPmZhbHNlPC9jb2RlPiBvdGhlcndpc2UuCisJICovCisJcHVibGljIGJvb2xlYW4gdmFsaWRhdGUoKSB7CisJCXJldHVybiAoKExvZ2dlclByb3BlcnR5RWRpdG9yKSAoc3RhY2tMYXlvdXQudG9wQ29udHJvbCkpCisJCQkJLnZhbGlkYXRlKCk7CisJfSAvLyB2YWxpZGF0ZQorCisJLyoqCisJICogQHJldHVybgorCSAqLworCXB1YmxpYyBTdHJpbmcgZ2V0RXJyb3JNZXNzYWdlKCkgeworCQlyZXR1cm4gKChMb2dnZXJQcm9wZXJ0eUVkaXRvcikgKHN0YWNrTGF5b3V0LnRvcENvbnRyb2wpKQorCQkJCS5nZXRFcnJvck1lc3NhZ2UoKTsKKwl9CisKKwkvKioKKwkgKiBAcGFyYW0gZGlzZWFzZU1vZGVsCisJICovCisJcHVibGljIHZvaWQgcG9wdWxhdGVMb2dnZXIoTG9nZ2VyIGxvZ2dlcikgeworCQkoKExvZ2dlclByb3BlcnR5RWRpdG9yKSAoc3RhY2tMYXlvdXQudG9wQ29udHJvbCkpCisJCQkJLnBvcHVsYXRlKGxvZ2dlcik7CisJfQorCit9IApkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLmxvZ2dlcnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvd2l6YXJkcy9Mb2dnZXJXaXphcmRNZXNzYWdlcy5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLmxvZ2dlcnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvd2l6YXJkcy9Mb2dnZXJXaXphcmRNZXNzYWdlcy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg2MDYwM2UKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkubG9nZ2Vycy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS93aXphcmRzL0xvZ2dlcldpemFyZE1lc3NhZ2VzLmphdmEKQEAgLTAsMCArMSw0NCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0udWkud2l6YXJkczsKKworaW1wb3J0IGphdmEudXRpbC5NaXNzaW5nUmVzb3VyY2VFeGNlcHRpb247CitpbXBvcnQgamF2YS51dGlsLlJlc291cmNlQnVuZGxlOworCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLkNvbnN0YW50czsKKworLyoqCisgKiBUaGlzIGNsYXNzIGlzIHRoZSBSZXNvdXJjZSBCdW5kbGUgZm9yIHRoaXMgcGFja2FnZS4KKyAqLworcHVibGljIGNsYXNzIExvZ2dlcldpemFyZE1lc3NhZ2VzIHsKKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgQlVORExFX05BTUUgPSBDb25zdGFudHMuSURfUk9PVAorCQkJKyAiLnVpLndpemFyZHMubG9nZ2Vyd2l6YXJkbWVzc2FnZXMiOyAvLyROT04tTkxTLTEkCisKKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBSZXNvdXJjZUJ1bmRsZSBSRVNPVVJDRV9CVU5ETEUgPSBSZXNvdXJjZUJ1bmRsZQorCQkJLmdldEJ1bmRsZShCVU5ETEVfTkFNRSk7CisKKwlwcml2YXRlIExvZ2dlcldpemFyZE1lc3NhZ2VzKCkgeworCQkvLyBlbXB0eQorCX0KKworCS8qKgorCSAqIEBwYXJhbSBrZXkKKwkgKiAgICAgICAgICAgIHRoZSBrZXkgZm9yIHRoZSBtZXNzYWdlCisJICogQHJldHVybiB0aGUgc3RyaW5nIHRoYXQgbWF0Y2hlcyB0aGUga2V5CisJICovCisJcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0U3RyaW5nKGZpbmFsIFN0cmluZyBrZXkpIHsKKwkJdHJ5IHsKKwkJCXJldHVybiBSRVNPVVJDRV9CVU5ETEUuZ2V0U3RyaW5nKGtleSk7CisJCX0gY2F0Y2ggKGZpbmFsIE1pc3NpbmdSZXNvdXJjZUV4Y2VwdGlvbiBlKSB7CisJCQlyZXR1cm4gJyEnICsga2V5ICsgJyEnOworCQl9CisJfSAvLyBnZXRTdHJpbmcKK30gLy8gRGlzZWFzZVdpemFyZE1lc3NhZ2VzCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkubG9nZ2Vycy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS93aXphcmRzL05ld0xvZ2dlcldpemFyZC5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLmxvZ2dlcnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvd2l6YXJkcy9OZXdMb2dnZXJXaXphcmQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNmFhMmI4Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLmxvZ2dlcnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvd2l6YXJkcy9OZXdMb2dnZXJXaXphcmQuamF2YQpAQCAtMCwwICsxLDE4MSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAxMSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0udWkud2l6YXJkczsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUuY29tbWFuZHMuQWJzdHJhY3RIYW5kbGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUuY29tbWFuZHMuRXhlY3V0aW9uRXZlbnQ7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5jb21tYW5kcy5FeGVjdXRpb25FeGNlcHRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5jb21tYW5kcy5JSGFuZGxlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlN0cnVjdHVyZWRTZWxlY3Rpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uud2l6YXJkLldpemFyZERpYWxvZzsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuU1RFTVVSSTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLklkZW50aWZpYWJsZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubG9nZ2VyLkxvZ2dlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubG9nZ2VyLkxvZ2dlclBhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LlNXVDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGU7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaFdpbmRvdzsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5oYW5kbGVycy5IYW5kbGVyVXRpbDsKKworLyoqCisgKiBUaGlzIGNsYXNzIGlzIGEgV2l6YXJkIGZvciBtYWtpbmcgbmV3IFNURU0ge0BsaW5rIExvZ2dlcn0gaW5zdGFuY2VzLgorICovCitwdWJsaWMgY2xhc3MgTmV3TG9nZ2VyV2l6YXJkIGV4dGVuZHMgTmV3SWRlbnRpZmlhYmxlV2l6YXJkIHsKKworCXByaXZhdGUgTmV3TG9nZ2VyUGFnZSBubHAgPSBudWxsOworCQorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnVpLndpemFyZHMuTmV3SWRlbnRpZmlhYmxlV2l6YXJkI2dldFdpemFyZFRpdGxlKCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgU3RyaW5nIGdldFdpemFyZFRpdGxlKCkgeworCQlyZXR1cm4gTG9nZ2VyV2l6YXJkTWVzc2FnZXMuZ2V0U3RyaW5nKCJOTG9nZ2VyV2l6LndpemFyZF90aXRsZSIpOyAvLyROT04tTkxTLTEkCisJfQorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnVpLndpemFyZHMuTmV3SWRlbnRpZmlhYmxlV2l6YXJkI2NyZWF0ZU5ld0lkZW50aWZpYWJsZVBhZ2UoKQorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCBOZXdJZGVudGlmaWFibGVQYWdlIGNyZWF0ZU5ld0lkZW50aWZpYWJsZVBhZ2UoKSB7CisJCW5scCA9IG5ldyBOZXdMb2dnZXJQYWdlKExvZ2dlcldpemFyZE1lc3NhZ2VzCisJCQkJLmdldFN0cmluZygiTkxvZ2dlcldpei5wYWdlX3RpdGxlIiksIHRoaXMpOyAvLyROT04tTkxTLTEkCisJCW5scC5zZXRUaXRsZShMb2dnZXJXaXphcmRNZXNzYWdlcy5nZXRTdHJpbmcoIk5Mb2dnZXJXaXoucGFnZV90aXRsZSIpKTsgLy8kTk9OLU5MUy0xJAorCQlubHAuc2V0RGVzY3JpcHRpb24oTG9nZ2VyV2l6YXJkTWVzc2FnZXMKKwkJCQkuZ2V0U3RyaW5nKCJOTG9nZ2VyV2l6LnBhZ2VfZGVzY3JpcHRpb24iKSk7IC8vJE5PTi1OTFMtMSQKKwkJCisJCXJldHVybiBubHA7CisJfSAvLyBjcmVhdGVOZXdJZGVudGlmaWFibGVQYWdlCisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0udWkud2l6YXJkcy5OZXdJZGVudGlmaWFibGVXaXphcmQjY3JlYXRlRHVibGluQ29yZVBhZ2UoKQorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCBEdWJsaW5Db3JlUGFnZSBjcmVhdGVEdWJsaW5Db3JlUGFnZSgpIHsKKwkJcmV0dXJuIG5ldyBEdWJsaW5Db3JlUGFnZSgpIHsKKwkJCUBPdmVycmlkZQorCQkJcHJvdGVjdGVkIHZvaWQgaW5pdGlhbGl6ZURDQXR0cmlidXRlcygpIHsKKwkJCQlzdXBlci5pbml0aWFsaXplRENBdHRyaWJ1dGVzKCk7CisJCQkJZm9ybWF0LnNldFRleHQoTG9nZ2VyUGFja2FnZS5lTlNfVVJJKTsKKwkJCQlmb3JtYXQuc2V0RW5hYmxlZChmYWxzZSk7CisJCQkJdHlwZS5zZXRUZXh0KFNURU1VUkkuTE9HR0VSX1RZUEVfVVJJLnRvU3RyaW5nKCkpOworCQkJCXR5cGUuc2V0RW5hYmxlZChmYWxzZSk7CisKKwkJCQl0aXRsZVRleHRGaWVsZC5zZXRUZXh0KExvZ2dlcldpemFyZE1lc3NhZ2VzLmdldFN0cmluZygiZGNfdGl0bGVfbG9nZ2VyIikpOworCQkJCXNvdXJjZS5zZXRUZXh0KExvZ2dlcldpemFyZE1lc3NhZ2VzLmdldFN0cmluZygiZGNfc291cmNlX2xvZ2dlciIpKTsKKwkJCQlkZXNjcmlwdGlvblRleHRGaWVsZC5zZXRUZXh0KExvZ2dlcldpemFyZE1lc3NhZ2VzLmdldFN0cmluZygiZGNfZGVzY19sb2dnZXIiKSk7CisJCQl9CisJCX07CisJfSAvLyBjcmVhdGVEdWJsaW5Db3JlUGFnZQorCisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0udWkud2l6YXJkcy5OZXdJZGVudGlmaWFibGVXaXphcmQjY3JlYXRlSWRlbnRpZmlhYmxlKCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgSWRlbnRpZmlhYmxlIGNyZWF0ZUlkZW50aWZpYWJsZSgpIHsKKwkJZmluYWwgTG9nZ2VyIHJldFZhbHVlID0gbmxwLmdldFNlbGVjdGVkTG9nZ2VyKCk7CisJCXJldFZhbHVlLnNldER1YmxpbkNvcmUobmV3RHVibGluQ29yZVBhZ2UuY3JlYXRlRHVibGluQ29yZSgpKTsKKwkJcmV0dXJuIHJldFZhbHVlOworCX0gLy8gY3JlYXRlU3BlY2lmaWNJZGVudGlmaWFibGUKKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS51aS53aXphcmRzLk5ld0lkZW50aWZpYWJsZVdpemFyZCNnZXRTZXJpYWxpemF0aW9uRm9sZGVyTmFtZSgpCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIFN0cmluZyBnZXRTZXJpYWxpemF0aW9uRm9sZGVyTmFtZSgpIHsKKwkJcmV0dXJuIE5ld1NURU1Qcm9qZWN0V2l6YXJkLkxPR0dFUlNfRk9MREVSX05BTUU7CisJfQorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnVpLndpemFyZHMuTmV3SWRlbnRpZmlhYmxlV2l6YXJkI2dldFNlcmlhbGl6YXRpb25GaWxlTmFtZUV4dGVuc2lvbigpCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIFN0cmluZyBnZXRTZXJpYWxpemF0aW9uRmlsZU5hbWVFeHRlbnNpb24oKSB7CisJCXJldHVybiBMb2dnZXJQYWNrYWdlLmVOQU1FOworCX0gLy8gZ2V0SWRlbnRpZmlhYmxlU2VyaWFsaXphdGlvbkZpbGVFeHRlbnNpb24KKworCXByb3RlY3RlZCBzdGF0aWMgY2xhc3MgTmV3TG9nZ2VyUGFnZSBleHRlbmRzIE5ld0lkZW50aWZpYWJsZVBhZ2UgeworCisJCUxvZ2dlckRlZmluaXRpb25Db250cm9sIGxkYyA9IG51bGw7CisJCU5ld0xvZ2dlcldpemFyZCBwYXJlbnRXaXphcmQgPSBudWxsOworCisJCS8qKgorCQkgKiBAcGFyYW0gcGFnZU5hbWUKKwkJICovCisJCXByb3RlY3RlZCBOZXdMb2dnZXJQYWdlKGZpbmFsIFN0cmluZyBwYWdlTmFtZSwgTmV3TG9nZ2VyV2l6YXJkIG5ld0xvZ2dlcldpemFyZCkgeworCQkJc3VwZXIocGFnZU5hbWUpOworCQkJcGFyZW50V2l6YXJkID0gbmV3TG9nZ2VyV2l6YXJkOworCQl9CisKKwkJLyoqCisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS51aS53aXphcmRzLk5ld0lkZW50aWZpYWJsZVdpemFyZC5OZXdJZGVudGlmaWFibGVQYWdlI2dldERDRGVzY3JpcHRpb24oKQorCQkgKi8KKwkJQE92ZXJyaWRlCisJCXByb3RlY3RlZCBTdHJpbmcgZ2V0RENEZXNjcmlwdGlvbigpIHsKKwkJCS8vIExlYXZlIGRlc2NyaXB0aW9uL3RpdGxlIGJsYW5rCisJCQlyZXR1cm4gIiI7CisvLwkJCXJldHVybiBNZXNzYWdlRm9ybWF0LmZvcm1hdChEaXNlYXNlV2l6YXJkTWVzc2FnZXMKKy8vCQkJCQkuZ2V0U3RyaW5nKCJOTG9nZ2VyV2l6LkRDX0RFU0NSSVBUSU9OIiksIC8vJE5PTi1OTFMtMSQKKy8vCQkJCQluZXcgT2JqZWN0W10geyBzZXJpYWxpemF0aW9uRmlsZU5hbWVGaWVsZC5nZXRUZXh0KCkgfSk7CisJCX0gLy8gZ2V0RENEZXNjcmlwdGlvbgorCisJCUBPdmVycmlkZQorCQlwcm90ZWN0ZWQgQ29tcG9zaXRlIGNyZWF0ZVNwZWNpZmljQ29tcG9zaXRlKGZpbmFsIENvbXBvc2l0ZSBwYXJlbnQpIHsKKwkJCWxkYyA9IG5ldyBMb2dnZXJEZWZpbml0aW9uQ29udHJvbChwYXJlbnQsIFNXVC5OT05FLAorCQkJCQlwcm9qZWN0VmFsaWRhdG9yLCB0aGlzLmdldFNlbGVjdGVkUHJvamVjdCgpLCBwYXJlbnRXaXphcmQpOworCQkJcmV0dXJuIGxkYzsKKwkJfSAvLyBjcmVhdGVTcGVjaWZpY0NvbXBvc2l0ZQorCisJCUBPdmVycmlkZQorCQlwcm90ZWN0ZWQgYm9vbGVhbiB2YWxpZGF0ZVBhZ2UoKSB7CisJCQlib29sZWFuIHJldFZhbHVlID0gc3VwZXIudmFsaWRhdGVQYWdlKCk7CisJCQlpZiAocmV0VmFsdWUpIHsKKwkJCQlzZXRFcnJvck1lc3NhZ2UobnVsbCk7CisJCQkJcmV0VmFsdWUgPSBsZGMudmFsaWRhdGUoKTsKKwkJCQkvLyBFcnJvcj8KKwkJCQlpZiAoIXJldFZhbHVlKSB7CisJCQkJCS8vIFllcworCQkJCQlzZXRFcnJvck1lc3NhZ2UobGRjLmdldEVycm9yTWVzc2FnZSgpKTsKKwkJCQl9IC8vIGlmCisJCQl9CisJCQlyZXR1cm4gcmV0VmFsdWU7CisJCX0gCisKKwkJTG9nZ2VyIGdldFNlbGVjdGVkTG9nZ2VyKCkgeworCQkJcmV0dXJuIGxkYy5nZXRTZWxlY3RlZExvZ2dlcigpOworCQl9IAorCisJfQorCisJLyoqCisJICogVGhpcyBjbGFzcyBpcyBhIHtAbGluayBJSGFuZGxlcn0gZm9yIHRoZSBjb21tYW5kIHRoYXQgY3JlYXRlcyBhCisJICoge0BsaW5rIE5ld0Rpc2Vhc2VXaXphcmR9CisJICovCisJcHVibGljIHN0YXRpYyBjbGFzcyBOZXdMb2dnZXJXaXphcmRDb21tYW5kSGFuZGxlciBleHRlbmRzIEFic3RyYWN0SGFuZGxlcgorCQkJaW1wbGVtZW50cyBJSGFuZGxlciB7CisKKwkJLyoqCisJCSAqIEBzZWUgb3JnLmVjbGlwc2UuY29yZS5jb21tYW5kcy5BYnN0cmFjdEhhbmRsZXIjZXhlY3V0ZShvcmcuZWNsaXBzZS5jb3JlLmNvbW1hbmRzLkV4ZWN1dGlvbkV2ZW50KQorCQkgKi8KKwkJcHVibGljIE9iamVjdCBleGVjdXRlKGZpbmFsIEV4ZWN1dGlvbkV2ZW50IGV4ZWN1dGlvbkV2ZW50KQorCQkJCXRocm93cyBFeGVjdXRpb25FeGNlcHRpb24geworCQkJZmluYWwgSVdvcmtiZW5jaFdpbmRvdyB3aW5kb3cgPSBIYW5kbGVyVXRpbAorCQkJCQkuZ2V0QWN0aXZlV29ya2JlbmNoV2luZG93Q2hlY2tlZChleGVjdXRpb25FdmVudCk7CisJCQlmaW5hbCBOZXdMb2dnZXJXaXphcmQgd2l6YXJkID0gbmV3IE5ld0xvZ2dlcldpemFyZCgpOworCQkJd2l6YXJkLmluaXQod2luZG93LmdldFdvcmtiZW5jaCgpLCBTdHJ1Y3R1cmVkU2VsZWN0aW9uLkVNUFRZKTsKKwkJCWZpbmFsIFdpemFyZERpYWxvZyB3aXphcmREaWFsb2cgPSBuZXcgU1RFTVdpemFyZERpYWxvZyh3aW5kb3cKKwkJCQkJLmdldFNoZWxsKCksIHdpemFyZCk7CisJCQl3aXphcmREaWFsb2cub3BlbigpOworCQkJcmV0dXJuIG51bGw7CisJCX0gLy8gZXhlY3V0ZQorCX0gCit9IApkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLmxvZ2dlcnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvd2l6YXJkcy9sb2dnZXJ3aXphcmRtZXNzYWdlcy5wcm9wZXJ0aWVzIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLmxvZ2dlcnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvd2l6YXJkcy9sb2dnZXJ3aXphcmRtZXNzYWdlcy5wcm9wZXJ0aWVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ5N2E2NTIKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkubG9nZ2Vycy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS93aXphcmRzL2xvZ2dlcndpemFyZG1lc3NhZ2VzLnByb3BlcnRpZXMKQEAgLTAsMCArMSwxMTIgQEAKKyMvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIyAqIENvcHlyaWdodCAoYykgMjAwOCwyMDExIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorIyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyMgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyMgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorIyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisjICoKKyMgKiBDb250cmlidXRvcnM6CisjICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorIyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjIE5ldyBMb2dnZXIgV2l6YXJkCitOTG9nZ2VyV2l6LndpemFyZF90aXRsZSA9IE5ldyBMb2dnZXIKK05Mb2dnZXJXaXoucGFnZV90aXRsZSA9IExvZ2dlcgorTkxvZ2dlcldpei5wYWdlX2Rlc2NyaXB0aW9uID0gRGVmaW5lIGEgbmV3IGxvZ2dlciBpbiBhIHByb2plY3QKKworCitMREMuMD1Mb2dnZXIgVHlwZToKK0xEQy4xPUxvZ2dlciBpbXBsZW1lbnRhdGlvbiB0eXBlCitMREMuMj1jbGFzcworTERDLjM9UHJvYmxlbSBjcmVhdGluZyBMb2dnZXIgaW5zdGFuY2UKK0xEQy40PVByb2JsZW0gY3JlYXRpbmcgRHVibGluIENvcmUgaW5zdGFuY2UKKworCisjIE5ldyBEaXNlYXNlIFdpemFyZAorCitORGlzZWFzZVdpei53aXphcmRfdGl0bGUgPSBOZXcgRGlzZWFzZQorTkRpc2Vhc2VXaXoucGFnZV90aXRsZSA9IERpc2Vhc2UKK05EaXNlYXNlV2l6LnBhZ2VfZGVzY3JpcHRpb24gPSBEZWZpbmUgYSBuZXcgZGlzZWFzZSBpbiBhIHByb2plY3QuCitORGlzZWFzZVdpei5EQ19ERVNDUklQVElPTiA9IERpc2Vhc2UgInswfSIKKworIyBOZXcgSW5mZWN0b3IgV2l6YXJkCitOSW5mZWN0b3JXaXoud2l6YXJkX3RpdGxlID0gTmV3IEluZmVjdGlvbi9Jbm9jdWxhdGlvbiBQb2ludAorTkluZmVjdG9yV2l6LnBhZ2VfdGl0bGUgPSBJbmZlY3Rvci9Jbm9jdWxhdG9yCitOSW5mZWN0b3JXaXoucGFnZV9kZXNjcmlwdGlvbiA9IERlZmluZSBhIG5ldyBpbmZlY3Rpb24gb3IgaW5vY3VsYXRpb24gcG9pbnQgaW4gYSBwcm9qZWN0LgorTkluZmVjdG9yV2l6LkRDX0RFU0NSSVBUSU9OID0gSW5mZWN0IHswfSAiezF9IiBwb3B1bGF0aW9uIG1lbWJlcnMgd2l0aCB0aGUgZGlzZWFzZSAiezJ9IiBhdCB0aGUgbG9jYXRpb24gInszfSIgKHs0fSkuCitOSW5mZWN0b3JXaXouRENfREVTQ1JJUFRJT04yID0gSW5vY3VsYXRlIHswfSAiezF9IiBwZXJjZW50IG9mIHBvcHVsYXRpb24gYWdhaW5zdCB0aGUgZGlzZWFzZSAiezJ9IiBhdCB0aGUgbG9jYXRpb24gInszfSIgKHs0fSkuCitOSW5mZWN0b3JXaXouRENfREVTQ1JJUFRJT05fRlJPTV9GSUxFID0gSW5mZWN0IGZyb20gbG9nIGZpbGVzIGF0IHswfQorTkluZmVjdG9yV2l6LkRDX0RFU0NSSVBUSU9OMl9GUk9NX0ZJTEUgPSBJbm9jdWxhdGUgZnJvbSBsb2cgZmlsZXMgYXQgezB9CitOSW5mZWN0b3JXaXouaW5mZWN0ID0gQ3JlYXRlIGEgTmV3IEluZmVjdG9yCitOSW5mZWN0b3JXaXouaW5vY3VsYXRlID0gQ3JlYXRlIGEgTmV3IElub2N1bGF0b3IKKworTkRpc2Vhc2VXaXouZGlzZWFzZV9mb2xkZXIgPSBEaXNlYXNlcworCitORGl6V2l6RXJyMD1NaXNzaW5nIERpc2Vhc2UgTmFtZS4KK05EaXpXaXpFcnIxPU1pc3NpbmcgUG9wdWxhdGlvbiBpZGVudGlmaWVyLgorTkRpeldpekVycjI9TWlzc2luZyBUaW1lIFBlcmlvZC4KK05EaXpXaXpFcnIzPVRoZSBUaW1lIFBlcmlvZCBpcyBpbnZhbGlkLgorTkRpeldpekVycjQ9TWlzc2luZyBCYWNrZ3JvdW5kIE1vcnRhbGl0eSBSYXRlLgorTkRpeldpekVycjU9QmFja2dyb3VuZCBtb3J0YWxpdHkgcmF0ZSBpcyBpbnZhbGlkLgorTkRpeldpekVycjY9TWlzc2luZyBUcmFuc21pc3Npb24gUmF0ZS4KK05EaXpXaXpFcnI3PVRoZSBUcmFuc21pc3Npb24gUmF0ZSBpcyBpbnZhbGlkLgorTkRpeldpekVycjg9TWlzc2luZyBOb24tTGluZWFyaXR5IENvZWZmaWNpZW50LgorTkRpeldpekVycjk9VGhlIE5vbi1MaW5lYXJpdHkgQ29lZmZpY2llbnQgaXMgaW52YWxpZC4KK05EaXpXaXpFcnIxMD1NaXNzaW5nIEluZmVjdGlvdXMgUmVjb3ZlcnkgUmF0ZS4KK05EaXpXaXpFcnIxMT1UaGUgSW5mZWN0aW91cyBSZWNvdmVyeSBSYXRlIGlzIGludmFsaWQuCitORGl6V2l6RXJyMTI9TWlzc2luZyBJbmZlY3Rpb3VzIE1vcnRhbGl0eSBSYXRlLgorTkRpeldpekVycjEzPVRoZSBJbmZlY3Rpb3VzIE1vcnRhbGl0eSBSYXRlIGlzIGludmFsaWQuCitORGl6V2l6RXJyMTY9TWlzc2luZyBJbW11bml0eSBMb3NzIFJhdGUuCitORGl6V2l6RXJyMTc9VGhlIEltbXVuaXR5IExvc3MgUmF0ZSBpcyBpbnZhbGlkLgorTkRpeldpekVycjE4PU1pc3NpbmcgSW5jdWJhdGlvbiBSYXRlLgorTkRpeldpekVycjE5PVRoZSBJbmN1YmF0aW9uIFJhdGUgUmF0ZSBpcyBpbnZhbGlkLgorTkRpeldpekVycjIwPURpcmVjdG9yeSBvciBGaWxlIGRvZXMgbm90IGV4aXN0LgorTkRpeldpekVycjIxPUludmFsaWQgRGF0YSBUeXBlLgorTkRpeldpekVycjIyPU1pc3NpbmcgcmVsYXRpdmUgdG9sZXJhbmNlCitORGl6V2l6RXJyMjM9UmVsYXRpdmUgdG9sZXJhbmNlIGlzIGxlc3Mgb3IgZXF1YWwgdG8gMCBvciB0b28gbGFyZ2UKK0RNUEMxPURpc2Vhc2UgTW9kZWwgUHJvcGVydHkgQ29udHJvbAorRE1QQzI9TWlzc2luZyBEaXNlYXNlIFByb3BlcnR5IEVkaXRvciBmb3IgIgorRERDLjA9RGlzZWFzZSBNb2RlbDoKK0REQy4xPVVuZGVybHlpbmcgTWF0aGVtYXRpY2FsIERpc2Vhc2UgTW9kZWwKK0REQy4yPWNsYXNzCitEREMuMz1Qcm9ibGVtIGNyZWF0aW5nIERpc2Vhc2UgTW9kZWwgaW5zdGFuY2UKK0REQy40PVByb2JsZW0gY3JlYXRpbmcgRHVibGluIENvcmUgaW5zdGFuY2UKK05JbmZXaXpFcnJvci4xPU1pc3NpbmcgdGhlIG5hbWUgb2YgdGhlIGRpc2Vhc2UgY2F1c2luZyB0aGUgaW5mZWN0aW9uLgorTkluZldpekVycm9yLjI9TWlzc2luZyB0aGUgbmFtZSBvZiB0aGUgcG9wdWxhdGlvbiB0byBpbmZlY3QuCitOSW5mV2l6RXJyb3IuMz1UaGUgbnVtYmVyIG9mIGluZmVjdGlvbnMgaXMgbWlzc2luZy4KK05JbmZXaXpFcnJvci40PVRoZSBudW1iZXIgb2YgaW5mZWN0aW9ucyBtdXN0IGJlIGdyZWF0ZXIgdGhhbiB6ZXJvLgorTkluZldpekVycm9yLjU9VGhlIG51bWJlciBvZiBpbmZlY3Rpb25zIGlzIGludmFsaWQuCitOSW5mV2l6RXJyb3IuNj1NaXNzaW5nIHRoZSBsb2NhdGlvbiBzcGVjaWZpY2F0aW9uCitOSW5mV2l6RXJyb3IuNz1UaGUgbnVtYmVyIG9mIGluZmVjdGlvbnMgd2FzIG5vdCBhIHZhbGlkIG51bWJlcgorTkluZldpekVycm9yLjg9UGVyY2VudGFnZSBub3QgVmFsaWQuIE11c3QgYmUgPCAxMDAuMCUKK05JbmZXaXpFcnJvci45PUVudGVyIGEgZm9sZGVyIGNvbnRhaW5pbmcgU1RFTSBsb2cgZmlsZXMKK05JbmZXaXpFcnJvci4xMD1Gb2xkZXIgZG9lcyBub3QgZXhpc3QhCitOSW5mV2l6RXJyb3IuMTE9QmFkIHJvdyBudW1iZXIKKworTkluZldpekROPURpc2Vhc2UgTmFtZToKK05JbmZXaXpETlRUPVRoZSBuYW1lIG9mIHRoZSBEaXNlYXNlIHRvIHRoYXQgaW5mZWN0cyAoZS5nLiwgSW5mbHVlbnphKS4KK05JbmZXaXpQT1A9UG9wdWxhdGlvbjoKK05JbmZXaXpQT1BUVD1UaGUgbmFtZSBvZiB0aGUgcG9wdWxhdGlvbiBpbmZlY3RlZCAoZS5nLiwgaHVtYW4pLgorTkluZldpek5JSU5GPU51bWJlciB0byBpbmZlY3Q6CitOSW5mV2l6TklJTk89TnVtYmVyIHRvIGlub2N1bGF0ZToKK05JbmZXaXpQSUlORj1QZXJjZW50IHRvIGluZmVjdDoKK05JbmZXaXpQSUlOTz1QZXJjZW50IHRvIGlub2N1bGF0ZToKK05JbmZXaXouYWJzbnVtYmVyPVVzZSBhbiBhYnNvbHV0ZSBudW1iZXIKK05JbmZXaXoucGVyY2VudGFnZT1Vc2UgYSBwZXJjZW50YWdlCitOSW5mV2l6TklUVD1UaGUgbnVtYmVyIG9mIHBvcHVsYXRpb24gbWVtYmVycyB0byBiZSBpbmZlY3RlZC4KK05JbmZXaXpQaWNrTG9jPVNlbGVjdCBMb2NhdGlvbgorTkluZldpelBpY2tMb2NUaXRsZT1TZWxlY3QgYSBsb2NhdGlvbiB0byBpbmZlY3QgKG9yIGlub2N1bGF0ZSkKK05JbmZXaXpJU09LPUxvY2F0aW9uIElTTyBLZXk6CitOSW5mZWN0b3JXaXouZW50ZXI9RW50ZXIgbWFudWFsbHkgKGFib3ZlKQorTkluZmVjdG9yV2l6LmltcG9ydD1JbXBvcnQgZnJvbSBTVEVNIGxvZyBmaWxlcyAoYmVsb3cpCitOSW5mV2l6SW1wb3J0PVNlbGVjdCBTVEVNIExvZyBGb2xkZXIKK05JbmZXaXpMb2dEaXJMYWJlbD1Mb2cgRm9sZGVyCitOSW5mV2l6TG9nRGlyRGVzYz1TZWxlY3QgYSBTVEVNIGxvZyBmaWxlIGZvbGRlcgorTkluZmVjdG9yV2l6LmZpcnN0cm93PUZpcnN0IHJvdworTkluZmVjdG9yV2l6Lmxhc3Ryb3c9TGFzdCByb3cKK05JbmZlY3Rvcldpei5zZWxlY3RlZHJvdz1TZWxlY3RlZCByb3cKKworQUxHLjA9U29sdmVyIGFsZ29yaXRobToKK0FMRy4xPVVuZGVybHlpbmcgZGlmZmVyZW50aWFsIGVxdWF0aW9uIHNvbHZlciBhbGdvcml0aG0KK0FMRy4yPUZpbml0ZSBEaWZmZXJlbmNlCitBTEcuMz1SdW5nZSBLdXR0YSBBZGFwdGl2ZSBTdGVwIFNpemUKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5ubDEvLmNsYXNzcGF0aCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5ubDEvLmNsYXNzcGF0aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMDRlODYxCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLm5sMS8uY2xhc3NwYXRoCkBAIC0wLDAgKzEsNyBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxjbGFzc3BhdGg+CisJPGNsYXNzcGF0aGVudHJ5IGtpbmQ9InNyYyIgcGF0aD0ic3JjIi8+CisJPGNsYXNzcGF0aGVudHJ5IGtpbmQ9ImNvbiIgcGF0aD0ib3JnLmVjbGlwc2UuamR0LmxhdW5jaGluZy5KUkVfQ09OVEFJTkVSL29yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC5kZWJ1Zy51aS5sYXVuY2hlci5TdGFuZGFyZFZNVHlwZS9KMlNFLTEuNSIvPgorCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJjb24iIHBhdGg9Im9yZy5lY2xpcHNlLnBkZS5jb3JlLnJlcXVpcmVkUGx1Z2lucyIvPgorCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJvdXRwdXQiIHBhdGg9ImJpbiIvPgorPC9jbGFzc3BhdGg+CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkubmwxLy5wcm9qZWN0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLm5sMS8ucHJvamVjdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNTJiMTA2Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLm5sMS8ucHJvamVjdApAQCAtMCwwICsxLDI4IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPHByb2plY3REZXNjcmlwdGlvbj4KKwk8bmFtZT5vcmcuZWNsaXBzZS5zdGVtLnVpLm5sMTwvbmFtZT4KKwk8Y29tbWVudD48L2NvbW1lbnQ+CisJPHByb2plY3RzPgorCTwvcHJvamVjdHM+CisJPGJ1aWxkU3BlYz4KKwkJPGJ1aWxkQ29tbWFuZD4KKwkJCTxuYW1lPm9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFidWlsZGVyPC9uYW1lPgorCQkJPGFyZ3VtZW50cz4KKwkJCTwvYXJndW1lbnRzPgorCQk8L2J1aWxkQ29tbWFuZD4KKwkJPGJ1aWxkQ29tbWFuZD4KKwkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5NYW5pZmVzdEJ1aWxkZXI8L25hbWU+CisJCQk8YXJndW1lbnRzPgorCQkJPC9hcmd1bWVudHM+CisJCTwvYnVpbGRDb21tYW5kPgorCQk8YnVpbGRDb21tYW5kPgorCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLlNjaGVtYUJ1aWxkZXI8L25hbWU+CisJCQk8YXJndW1lbnRzPgorCQkJPC9hcmd1bWVudHM+CisJCTwvYnVpbGRDb21tYW5kPgorCTwvYnVpbGRTcGVjPgorCTxuYXR1cmVzPgorCQk8bmF0dXJlPm9yZy5lY2xpcHNlLnBkZS5QbHVnaW5OYXR1cmU8L25hdHVyZT4KKwkJPG5hdHVyZT5vcmcuZWNsaXBzZS5qZHQuY29yZS5qYXZhbmF0dXJlPC9uYXR1cmU+CisJPC9uYXR1cmVzPgorPC9wcm9qZWN0RGVzY3JpcHRpb24+CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkubmwxLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5ubDEvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE0MWJhZDEKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkubmwxLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcwpAQCAtMCwwICsxLDcgQEAKKyNNb24gSmFuIDIxIDEyOjUyOjM4IEVTVCAyMDA4CitlY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29kZWdlbi50YXJnZXRQbGF0Zm9ybT0xLjUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvbXBsaWFuY2U9MS41CitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmFzc2VydElkZW50aWZpZXI9ZXJyb3IKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZW51bUlkZW50aWZpZXI9ZXJyb3IKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnNvdXJjZT0xLjUKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5ubDEvTUVUQS1JTkYvTUFOSUZFU1QuTUYgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkubmwxL01FVEEtSU5GL01BTklGRVNULk1GCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYwMjZiNmYKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkubmwxL01FVEEtSU5GL01BTklGRVNULk1GCkBAIC0wLDAgKzEsMTQgQEAKK01hbmlmZXN0LVZlcnNpb246IDEuMAorQnVuZGxlLU1hbmlmZXN0VmVyc2lvbjogMgorQnVuZGxlLU5hbWU6ICVwbHVnaW5OYW1lCitCdW5kbGUtU3ltYm9saWNOYW1lOiBvcmcuZWNsaXBzZS5zdGVtLnVpLm5sMQorQnVuZGxlLVZlcnNpb246IDEuMi4xCitCdW5kbGUtVmVuZG9yOiAlcHJvdmlkZXJOYW1lCitGcmFnbWVudC1Ib3N0OiBvcmcuZWNsaXBzZS5zdGVtLnVpCitCdW5kbGUtTG9jYWxpemF0aW9uOiBwbHVnaW4KK0J1bmRsZS1DbGFzc1BhdGg6IC4sCisgYmluLworRXhwb3J0LVBhY2thZ2U6IG9yZy5lY2xpcHNlLnN0ZW0udWkudmlld3MsCisgb3JnLmVjbGlwc2Uuc3RlbS51aS52aWV3cy5tYXAsCisgb3JnLmVjbGlwc2Uuc3RlbS51aS53aXphcmRzCitCdW5kbGUtUmVxdWlyZWRFeGVjdXRpb25FbnZpcm9ubWVudDogSjJTRS0xLjUKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5ubDEvYnVpbGQucHJvcGVydGllcyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5ubDEvYnVpbGQucHJvcGVydGllcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMDg1YzQxCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLm5sMS9idWlsZC5wcm9wZXJ0aWVzCkBAIC0wLDAgKzEsMTYgQEAKK3NvdXJjZS4uID0gc3JjLworb3V0cHV0Li4gPSBiaW4vCitiaW4uaW5jbHVkZXMgPSBNRVRBLUlORi8sXAorICAgICAgICAgICAgICAgLixcCisgICAgICAgICAgICAgICBwbHVnaW5fZW5fQ0EucHJvcGVydGllcyxcCisgICAgICAgICAgICAgICBwbHVnaW5fZW5fVVNfQ0EucHJvcGVydGllcyxcCisgICAgICAgICAgICAgICBwbHVnaW5fZXMucHJvcGVydGllcyxcCisgICAgICAgICAgICAgICBwbHVnaW5faGUucHJvcGVydGllcyxcCisgICAgICAgICAgICAgICBwbHVnaW5fdGEucHJvcGVydGllcyxcCisgICAgICAgICAgICAgICBwbHVnaW5femgucHJvcGVydGllcyxcCisgICAgICAgICAgICAgICBiaW4vLFwKKyAgICAgICAgICAgICAgIG5vdGljZS5odG1sLFwKKyAgICAgICAgICAgICAgIGVwbC12MTAuaHRtbCxcCisgICAgICAgICAgICAgICBwbHVnaW5fa3IucHJvcGVydGllcyxcCisgICAgICAgICAgICAgICBwbHVnaW5fZGUucHJvcGVydGllcyxcCisgICAgICAgICAgICAgICBwbHVnaW4ucHJvcGVydGllcwpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLm5sMS9lcGwtdjEwLmh0bWwgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkubmwxL2VwbC12MTAuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZDRiMTk2Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLm5sMS9lcGwtdjEwLmh0bWwKQEAgLTAsMCArMSwzMjggQEAKKzxodG1sIHhtbG5zOm89InVybjpzY2hlbWFzLW1pY3Jvc29mdC1jb206b2ZmaWNlOm9mZmljZSIKK3htbG5zOnc9InVybjpzY2hlbWFzLW1pY3Jvc29mdC1jb206b2ZmaWNlOndvcmQiCit4bWxucz0iaHR0cDovL3d3dy53My5vcmcvVFIvUkVDLWh0bWw0MCI+CisKKzxoZWFkPgorPG1ldGEgaHR0cC1lcXVpdj1Db250ZW50LVR5cGUgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PXdpbmRvd3MtMTI1MiI+Cis8bWV0YSBuYW1lPVByb2dJZCBjb250ZW50PVdvcmQuRG9jdW1lbnQ+Cis8bWV0YSBuYW1lPUdlbmVyYXRvciBjb250ZW50PSJNaWNyb3NvZnQgV29yZCA5Ij4KKzxtZXRhIG5hbWU9T3JpZ2luYXRvciBjb250ZW50PSJNaWNyb3NvZnQgV29yZCA5Ij4KKzxsaW5rIHJlbD1GaWxlLUxpc3QKK2hyZWY9Ii4vRWNsaXBzZSUyMEVQTCUyMDIwMDNfMTFfMTAlMjBGaW5hbF9maWxlcy9maWxlbGlzdC54bWwiPgorPHRpdGxlPkVjbGlwc2UgUHVibGljIExpY2Vuc2UgLSBWZXJzaW9uIDEuMDwvdGl0bGU+Cis8IS0tW2lmIGd0ZSBtc28gOV0+PHhtbD4KKyA8bzpEb2N1bWVudFByb3BlcnRpZXM+CisgIDxvOlJldmlzaW9uPjI8L286UmV2aXNpb24+CisgIDxvOlRvdGFsVGltZT4zPC9vOlRvdGFsVGltZT4KKyAgPG86Q3JlYXRlZD4yMDA0LTAzLTA1VDIzOjAzOjAwWjwvbzpDcmVhdGVkPgorICA8bzpMYXN0U2F2ZWQ+MjAwNC0wMy0wNVQyMzowMzowMFo8L286TGFzdFNhdmVkPgorICA8bzpQYWdlcz40PC9vOlBhZ2VzPgorICA8bzpXb3Jkcz4xNjI2PC9vOldvcmRzPgorICA8bzpDaGFyYWN0ZXJzPjkyNzA8L286Q2hhcmFjdGVycz4KKyAgIDxvOkxpbmVzPjc3PC9vOkxpbmVzPgorICA8bzpQYXJhZ3JhcGhzPjE4PC9vOlBhcmFncmFwaHM+CisgIDxvOkNoYXJhY3RlcnNXaXRoU3BhY2VzPjExMzg0PC9vOkNoYXJhY3RlcnNXaXRoU3BhY2VzPgorICA8bzpWZXJzaW9uPjkuNDQwMjwvbzpWZXJzaW9uPgorIDwvbzpEb2N1bWVudFByb3BlcnRpZXM+Cis8L3htbD48IVtlbmRpZl0tLT48IS0tW2lmIGd0ZSBtc28gOV0+PHhtbD4KKyA8dzpXb3JkRG9jdW1lbnQ+CisgIDx3OlRyYWNrUmV2aXNpb25zLz4KKyA8L3c6V29yZERvY3VtZW50PgorPC94bWw+PCFbZW5kaWZdLS0+Cis8c3R5bGU+Cis8IS0tCisgLyogRm9udCBEZWZpbml0aW9ucyAqLworQGZvbnQtZmFjZQorCXtmb250LWZhbWlseTpUYWhvbWE7CisJcGFub3NlLTE6MiAxMSA2IDQgMyA1IDQgNCAyIDQ7CisJbXNvLWZvbnQtY2hhcnNldDowOworCW1zby1nZW5lcmljLWZvbnQtZmFtaWx5OnN3aXNzOworCW1zby1mb250LXBpdGNoOnZhcmlhYmxlOworCW1zby1mb250LXNpZ25hdHVyZTo1NTM2Nzk0OTUgLTIxNDc0ODM2NDggOCAwIDY2MDQ3IDA7fQorIC8qIFN0eWxlIERlZmluaXRpb25zICovCitwLk1zb05vcm1hbCwgbGkuTXNvTm9ybWFsLCBkaXYuTXNvTm9ybWFsCisJe21zby1zdHlsZS1wYXJlbnQ6IiI7CisJbWFyZ2luOjBpbjsKKwltYXJnaW4tYm90dG9tOi4wMDAxcHQ7CisJbXNvLXBhZ2luYXRpb246d2lkb3ctb3JwaGFuOworCWZvbnQtc2l6ZToxMi4wcHQ7CisJZm9udC1mYW1pbHk6IlRpbWVzIE5ldyBSb21hbiI7CisJbXNvLWZhcmVhc3QtZm9udC1mYW1pbHk6IlRpbWVzIE5ldyBSb21hbiI7fQorcAorCXttYXJnaW4tcmlnaHQ6MGluOworCW1zby1tYXJnaW4tdG9wLWFsdDphdXRvOworCW1zby1tYXJnaW4tYm90dG9tLWFsdDphdXRvOworCW1hcmdpbi1sZWZ0OjBpbjsKKwltc28tcGFnaW5hdGlvbjp3aWRvdy1vcnBoYW47CisJZm9udC1zaXplOjEyLjBwdDsKKwlmb250LWZhbWlseToiVGltZXMgTmV3IFJvbWFuIjsKKwltc28tZmFyZWFzdC1mb250LWZhbWlseToiVGltZXMgTmV3IFJvbWFuIjt9CitwLkJhbGxvb25UZXh0LCBsaS5CYWxsb29uVGV4dCwgZGl2LkJhbGxvb25UZXh0CisJe21zby1zdHlsZS1uYW1lOiJCYWxsb29uIFRleHQiOworCW1hcmdpbjowaW47CisJbWFyZ2luLWJvdHRvbTouMDAwMXB0OworCW1zby1wYWdpbmF0aW9uOndpZG93LW9ycGhhbjsKKwlmb250LXNpemU6OC4wcHQ7CisJZm9udC1mYW1pbHk6VGFob21hOworCW1zby1mYXJlYXN0LWZvbnQtZmFtaWx5OiJUaW1lcyBOZXcgUm9tYW4iO30KK0BwYWdlIFNlY3Rpb24xCisJe3NpemU6OC41aW4gMTEuMGluOworCW1hcmdpbjoxLjBpbiAxLjI1aW4gMS4waW4gMS4yNWluOworCW1zby1oZWFkZXItbWFyZ2luOi41aW47CisJbXNvLWZvb3Rlci1tYXJnaW46LjVpbjsKKwltc28tcGFwZXItc291cmNlOjA7fQorZGl2LlNlY3Rpb24xCisJe3BhZ2U6U2VjdGlvbjE7fQorLS0+Cis8L3N0eWxlPgorPC9oZWFkPgorCis8Ym9keSBsYW5nPUVOLVVTIHN0eWxlPSd0YWItaW50ZXJ2YWw6LjVpbic+CisKKzxkaXYgY2xhc3M9U2VjdGlvbjE+CisKKzxwIGFsaWduPWNlbnRlciBzdHlsZT0ndGV4dC1hbGlnbjpjZW50ZXInPjxiPkVjbGlwc2UgUHVibGljIExpY2Vuc2UgLSB2IDEuMDwvYj4KKzwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPlRIRSBBQ0NPTVBBTllJTkcgUFJPR1JBTSBJUyBQUk9WSURFRCBVTkRFUgorVEhFIFRFUk1TIE9GIFRISVMgRUNMSVBTRSBQVUJMSUMgTElDRU5TRSAoJnF1b3Q7QUdSRUVNRU5UJnF1b3Q7KS4gQU5ZIFVTRSwKK1JFUFJPRFVDVElPTiBPUiBESVNUUklCVVRJT04gT0YgVEhFIFBST0dSQU0gQ09OU1RJVFVURVMgUkVDSVBJRU5UJ1MgQUNDRVBUQU5DRQorT0YgVEhJUyBBR1JFRU1FTlQuPC9zcGFuPiA8L3A+CisKKzxwPjxiPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4xLiBERUZJTklUSU9OUzwvc3Bhbj48L2I+IDwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPiZxdW90O0NvbnRyaWJ1dGlvbiZxdW90OyBtZWFuczo8L3NwYW4+IDwvcD4KKworPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YSkKK2luIHRoZSBjYXNlIG9mIHRoZSBpbml0aWFsIENvbnRyaWJ1dG9yLCB0aGUgaW5pdGlhbCBjb2RlIGFuZCBkb2N1bWVudGF0aW9uCitkaXN0cmlidXRlZCB1bmRlciB0aGlzIEFncmVlbWVudCwgYW5kPGJyIGNsZWFyPWxlZnQ+CitiKSBpbiB0aGUgY2FzZSBvZiBlYWNoIHN1YnNlcXVlbnQgQ29udHJpYnV0b3I6PC9zcGFuPjwvcD4KKworPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+aSkKK2NoYW5nZXMgdG8gdGhlIFByb2dyYW0sIGFuZDwvc3Bhbj48L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmlpKQorYWRkaXRpb25zIHRvIHRoZSBQcm9ncmFtOzwvc3Bhbj48L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPndoZXJlCitzdWNoIGNoYW5nZXMgYW5kL29yIGFkZGl0aW9ucyB0byB0aGUgUHJvZ3JhbSBvcmlnaW5hdGUgZnJvbSBhbmQgYXJlIGRpc3RyaWJ1dGVkCitieSB0aGF0IHBhcnRpY3VsYXIgQ29udHJpYnV0b3IuIEEgQ29udHJpYnV0aW9uICdvcmlnaW5hdGVzJyBmcm9tIGEgQ29udHJpYnV0b3IKK2lmIGl0IHdhcyBhZGRlZCB0byB0aGUgUHJvZ3JhbSBieSBzdWNoIENvbnRyaWJ1dG9yIGl0c2VsZiBvciBhbnlvbmUgYWN0aW5nIG9uCitzdWNoIENvbnRyaWJ1dG9yJ3MgYmVoYWxmLiBDb250cmlidXRpb25zIGRvIG5vdCBpbmNsdWRlIGFkZGl0aW9ucyB0byB0aGUKK1Byb2dyYW0gd2hpY2g6IChpKSBhcmUgc2VwYXJhdGUgbW9kdWxlcyBvZiBzb2Z0d2FyZSBkaXN0cmlidXRlZCBpbiBjb25qdW5jdGlvbgord2l0aCB0aGUgUHJvZ3JhbSB1bmRlciB0aGVpciBvd24gbGljZW5zZSBhZ3JlZW1lbnQsIGFuZCAoaWkpIGFyZSBub3QgZGVyaXZhdGl2ZQord29ya3Mgb2YgdGhlIFByb2dyYW0uIDwvc3Bhbj48L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4mcXVvdDtDb250cmlidXRvciZxdW90OyBtZWFucyBhbnkgcGVyc29uIG9yCitlbnRpdHkgdGhhdCBkaXN0cmlidXRlcyB0aGUgUHJvZ3JhbS48L3NwYW4+IDwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPiZxdW90O0xpY2Vuc2VkIFBhdGVudHMgJnF1b3Q7IG1lYW4gcGF0ZW50CitjbGFpbXMgbGljZW5zYWJsZSBieSBhIENvbnRyaWJ1dG9yIHdoaWNoIGFyZSBuZWNlc3NhcmlseSBpbmZyaW5nZWQgYnkgdGhlIHVzZQorb3Igc2FsZSBvZiBpdHMgQ29udHJpYnV0aW9uIGFsb25lIG9yIHdoZW4gY29tYmluZWQgd2l0aCB0aGUgUHJvZ3JhbS4gPC9zcGFuPjwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPiZxdW90O1Byb2dyYW0mcXVvdDsgbWVhbnMgdGhlIENvbnRyaWJ1dGlvbnMKK2Rpc3RyaWJ1dGVkIGluIGFjY29yZGFuY2Ugd2l0aCB0aGlzIEFncmVlbWVudC48L3NwYW4+IDwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPiZxdW90O1JlY2lwaWVudCZxdW90OyBtZWFucyBhbnlvbmUgd2hvCityZWNlaXZlcyB0aGUgUHJvZ3JhbSB1bmRlciB0aGlzIEFncmVlbWVudCwgaW5jbHVkaW5nIGFsbCBDb250cmlidXRvcnMuPC9zcGFuPiA8L3A+CisKKzxwPjxiPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4yLiBHUkFOVCBPRiBSSUdIVFM8L3NwYW4+PC9iPiA8L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmEpCitTdWJqZWN0IHRvIHRoZSB0ZXJtcyBvZiB0aGlzIEFncmVlbWVudCwgZWFjaCBDb250cmlidXRvciBoZXJlYnkgZ3JhbnRzIFJlY2lwaWVudAorYSBub24tZXhjbHVzaXZlLCB3b3JsZHdpZGUsIHJveWFsdHktZnJlZSBjb3B5cmlnaHQgbGljZW5zZSB0bzxzcGFuCitzdHlsZT0nY29sb3I6cmVkJz4gPC9zcGFuPnJlcHJvZHVjZSwgcHJlcGFyZSBkZXJpdmF0aXZlIHdvcmtzIG9mLCBwdWJsaWNseQorZGlzcGxheSwgcHVibGljbHkgcGVyZm9ybSwgZGlzdHJpYnV0ZSBhbmQgc3VibGljZW5zZSB0aGUgQ29udHJpYnV0aW9uIG9mIHN1Y2gKK0NvbnRyaWJ1dG9yLCBpZiBhbnksIGFuZCBzdWNoIGRlcml2YXRpdmUgd29ya3MsIGluIHNvdXJjZSBjb2RlIGFuZCBvYmplY3QgY29kZQorZm9ybS48L3NwYW4+PC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5iKQorU3ViamVjdCB0byB0aGUgdGVybXMgb2YgdGhpcyBBZ3JlZW1lbnQsIGVhY2ggQ29udHJpYnV0b3IgaGVyZWJ5IGdyYW50cworUmVjaXBpZW50IGEgbm9uLWV4Y2x1c2l2ZSwgd29ybGR3aWRlLDxzcGFuIHN0eWxlPSdjb2xvcjpncmVlbic+IDwvc3Bhbj5yb3lhbHR5LWZyZWUKK3BhdGVudCBsaWNlbnNlIHVuZGVyIExpY2Vuc2VkIFBhdGVudHMgdG8gbWFrZSwgdXNlLCBzZWxsLCBvZmZlciB0byBzZWxsLCBpbXBvcnQKK2FuZCBvdGhlcndpc2UgdHJhbnNmZXIgdGhlIENvbnRyaWJ1dGlvbiBvZiBzdWNoIENvbnRyaWJ1dG9yLCBpZiBhbnksIGluIHNvdXJjZQorY29kZSBhbmQgb2JqZWN0IGNvZGUgZm9ybS4gVGhpcyBwYXRlbnQgbGljZW5zZSBzaGFsbCBhcHBseSB0byB0aGUgY29tYmluYXRpb24KK29mIHRoZSBDb250cmlidXRpb24gYW5kIHRoZSBQcm9ncmFtIGlmLCBhdCB0aGUgdGltZSB0aGUgQ29udHJpYnV0aW9uIGlzIGFkZGVkCitieSB0aGUgQ29udHJpYnV0b3IsIHN1Y2ggYWRkaXRpb24gb2YgdGhlIENvbnRyaWJ1dGlvbiBjYXVzZXMgc3VjaCBjb21iaW5hdGlvbgordG8gYmUgY292ZXJlZCBieSB0aGUgTGljZW5zZWQgUGF0ZW50cy4gVGhlIHBhdGVudCBsaWNlbnNlIHNoYWxsIG5vdCBhcHBseSB0bworYW55IG90aGVyIGNvbWJpbmF0aW9ucyB3aGljaCBpbmNsdWRlIHRoZSBDb250cmlidXRpb24uIE5vIGhhcmR3YXJlIHBlciBzZSBpcworbGljZW5zZWQgaGVyZXVuZGVyLiA8L3NwYW4+PC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5jKQorUmVjaXBpZW50IHVuZGVyc3RhbmRzIHRoYXQgYWx0aG91Z2ggZWFjaCBDb250cmlidXRvciBncmFudHMgdGhlIGxpY2Vuc2VzIHRvIGl0cworQ29udHJpYnV0aW9ucyBzZXQgZm9ydGggaGVyZWluLCBubyBhc3N1cmFuY2VzIGFyZSBwcm92aWRlZCBieSBhbnkgQ29udHJpYnV0b3IKK3RoYXQgdGhlIFByb2dyYW0gZG9lcyBub3QgaW5mcmluZ2UgdGhlIHBhdGVudCBvciBvdGhlciBpbnRlbGxlY3R1YWwgcHJvcGVydHkKK3JpZ2h0cyBvZiBhbnkgb3RoZXIgZW50aXR5LiBFYWNoIENvbnRyaWJ1dG9yIGRpc2NsYWltcyBhbnkgbGlhYmlsaXR5IHRvIFJlY2lwaWVudAorZm9yIGNsYWltcyBicm91Z2h0IGJ5IGFueSBvdGhlciBlbnRpdHkgYmFzZWQgb24gaW5mcmluZ2VtZW50IG9mIGludGVsbGVjdHVhbAorcHJvcGVydHkgcmlnaHRzIG9yIG90aGVyd2lzZS4gQXMgYSBjb25kaXRpb24gdG8gZXhlcmNpc2luZyB0aGUgcmlnaHRzIGFuZAorbGljZW5zZXMgZ3JhbnRlZCBoZXJldW5kZXIsIGVhY2ggUmVjaXBpZW50IGhlcmVieSBhc3N1bWVzIHNvbGUgcmVzcG9uc2liaWxpdHkKK3RvIHNlY3VyZSBhbnkgb3RoZXIgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBuZWVkZWQsIGlmIGFueS4gRm9yIGV4YW1wbGUsCitpZiBhIHRoaXJkIHBhcnR5IHBhdGVudCBsaWNlbnNlIGlzIHJlcXVpcmVkIHRvIGFsbG93IFJlY2lwaWVudCB0byBkaXN0cmlidXRlCit0aGUgUHJvZ3JhbSwgaXQgaXMgUmVjaXBpZW50J3MgcmVzcG9uc2liaWxpdHkgdG8gYWNxdWlyZSB0aGF0IGxpY2Vuc2UgYmVmb3JlCitkaXN0cmlidXRpbmcgdGhlIFByb2dyYW0uPC9zcGFuPjwvcD4KKworPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+ZCkKK0VhY2ggQ29udHJpYnV0b3IgcmVwcmVzZW50cyB0aGF0IHRvIGl0cyBrbm93bGVkZ2UgaXQgaGFzIHN1ZmZpY2llbnQgY29weXJpZ2h0CityaWdodHMgaW4gaXRzIENvbnRyaWJ1dGlvbiwgaWYgYW55LCB0byBncmFudCB0aGUgY29weXJpZ2h0IGxpY2Vuc2Ugc2V0IGZvcnRoIGluCit0aGlzIEFncmVlbWVudC4gPC9zcGFuPjwvcD4KKworPHA+PGI+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPjMuIFJFUVVJUkVNRU5UUzwvc3Bhbj48L2I+IDwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkEgQ29udHJpYnV0b3IgbWF5IGNob29zZSB0byBkaXN0cmlidXRlIHRoZQorUHJvZ3JhbSBpbiBvYmplY3QgY29kZSBmb3JtIHVuZGVyIGl0cyBvd24gbGljZW5zZSBhZ3JlZW1lbnQsIHByb3ZpZGVkIHRoYXQ6PC9zcGFuPgorPC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5hKQoraXQgY29tcGxpZXMgd2l0aCB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhpcyBBZ3JlZW1lbnQ7IGFuZDwvc3Bhbj48L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmIpCitpdHMgbGljZW5zZSBhZ3JlZW1lbnQ6PC9zcGFuPjwvcD4KKworPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+aSkKK2VmZmVjdGl2ZWx5IGRpc2NsYWltcyBvbiBiZWhhbGYgb2YgYWxsIENvbnRyaWJ1dG9ycyBhbGwgd2FycmFudGllcyBhbmQKK2NvbmRpdGlvbnMsIGV4cHJlc3MgYW5kIGltcGxpZWQsIGluY2x1ZGluZyB3YXJyYW50aWVzIG9yIGNvbmRpdGlvbnMgb2YgdGl0bGUKK2FuZCBub24taW5mcmluZ2VtZW50LCBhbmQgaW1wbGllZCB3YXJyYW50aWVzIG9yIGNvbmRpdGlvbnMgb2YgbWVyY2hhbnRhYmlsaXR5CithbmQgZml0bmVzcyBmb3IgYSBwYXJ0aWN1bGFyIHB1cnBvc2U7IDwvc3Bhbj48L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmlpKQorZWZmZWN0aXZlbHkgZXhjbHVkZXMgb24gYmVoYWxmIG9mIGFsbCBDb250cmlidXRvcnMgYWxsIGxpYWJpbGl0eSBmb3IgZGFtYWdlcywKK2luY2x1ZGluZyBkaXJlY3QsIGluZGlyZWN0LCBzcGVjaWFsLCBpbmNpZGVudGFsIGFuZCBjb25zZXF1ZW50aWFsIGRhbWFnZXMsIHN1Y2gKK2FzIGxvc3QgcHJvZml0czsgPC9zcGFuPjwvcD4KKworPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+aWlpKQorc3RhdGVzIHRoYXQgYW55IHByb3Zpc2lvbnMgd2hpY2ggZGlmZmVyIGZyb20gdGhpcyBBZ3JlZW1lbnQgYXJlIG9mZmVyZWQgYnkgdGhhdAorQ29udHJpYnV0b3IgYWxvbmUgYW5kIG5vdCBieSBhbnkgb3RoZXIgcGFydHk7IGFuZDwvc3Bhbj48L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPml2KQorc3RhdGVzIHRoYXQgc291cmNlIGNvZGUgZm9yIHRoZSBQcm9ncmFtIGlzIGF2YWlsYWJsZSBmcm9tIHN1Y2ggQ29udHJpYnV0b3IsIGFuZAoraW5mb3JtcyBsaWNlbnNlZXMgaG93IHRvIG9idGFpbiBpdCBpbiBhIHJlYXNvbmFibGUgbWFubmVyIG9uIG9yIHRocm91Z2ggYQorbWVkaXVtIGN1c3RvbWFyaWx5IHVzZWQgZm9yIHNvZnR3YXJlIGV4Y2hhbmdlLjxzcGFuIHN0eWxlPSdjb2xvcjpibHVlJz4gPC9zcGFuPjwvc3Bhbj48L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5XaGVuIHRoZSBQcm9ncmFtIGlzIG1hZGUgYXZhaWxhYmxlIGluIHNvdXJjZQorY29kZSBmb3JtOjwvc3Bhbj4gPC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5hKQoraXQgbXVzdCBiZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGlzIEFncmVlbWVudDsgYW5kIDwvc3Bhbj48L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmIpIGEKK2NvcHkgb2YgdGhpcyBBZ3JlZW1lbnQgbXVzdCBiZSBpbmNsdWRlZCB3aXRoIGVhY2ggY29weSBvZiB0aGUgUHJvZ3JhbS4gPC9zcGFuPjwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkNvbnRyaWJ1dG9ycyBtYXkgbm90IHJlbW92ZSBvciBhbHRlciBhbnkKK2NvcHlyaWdodCBub3RpY2VzIGNvbnRhaW5lZCB3aXRoaW4gdGhlIFByb2dyYW0uIDwvc3Bhbj48L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5FYWNoIENvbnRyaWJ1dG9yIG11c3QgaWRlbnRpZnkgaXRzZWxmIGFzIHRoZQorb3JpZ2luYXRvciBvZiBpdHMgQ29udHJpYnV0aW9uLCBpZiBhbnksIGluIGEgbWFubmVyIHRoYXQgcmVhc29uYWJseSBhbGxvd3MKK3N1YnNlcXVlbnQgUmVjaXBpZW50cyB0byBpZGVudGlmeSB0aGUgb3JpZ2luYXRvciBvZiB0aGUgQ29udHJpYnV0aW9uLiA8L3NwYW4+PC9wPgorCis8cD48Yj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+NC4gQ09NTUVSQ0lBTCBESVNUUklCVVRJT048L3NwYW4+PC9iPiA8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5Db21tZXJjaWFsIGRpc3RyaWJ1dG9ycyBvZiBzb2Z0d2FyZSBtYXkKK2FjY2VwdCBjZXJ0YWluIHJlc3BvbnNpYmlsaXRpZXMgd2l0aCByZXNwZWN0IHRvIGVuZCB1c2VycywgYnVzaW5lc3MgcGFydG5lcnMKK2FuZCB0aGUgbGlrZS4gV2hpbGUgdGhpcyBsaWNlbnNlIGlzIGludGVuZGVkIHRvIGZhY2lsaXRhdGUgdGhlIGNvbW1lcmNpYWwgdXNlCitvZiB0aGUgUHJvZ3JhbSwgdGhlIENvbnRyaWJ1dG9yIHdobyBpbmNsdWRlcyB0aGUgUHJvZ3JhbSBpbiBhIGNvbW1lcmNpYWwKK3Byb2R1Y3Qgb2ZmZXJpbmcgc2hvdWxkIGRvIHNvIGluIGEgbWFubmVyIHdoaWNoIGRvZXMgbm90IGNyZWF0ZSBwb3RlbnRpYWwKK2xpYWJpbGl0eSBmb3Igb3RoZXIgQ29udHJpYnV0b3JzLiBUaGVyZWZvcmUsIGlmIGEgQ29udHJpYnV0b3IgaW5jbHVkZXMgdGhlCitQcm9ncmFtIGluIGEgY29tbWVyY2lhbCBwcm9kdWN0IG9mZmVyaW5nLCBzdWNoIENvbnRyaWJ1dG9yICgmcXVvdDtDb21tZXJjaWFsCitDb250cmlidXRvciZxdW90OykgaGVyZWJ5IGFncmVlcyB0byBkZWZlbmQgYW5kIGluZGVtbmlmeSBldmVyeSBvdGhlcgorQ29udHJpYnV0b3IgKCZxdW90O0luZGVtbmlmaWVkIENvbnRyaWJ1dG9yJnF1b3Q7KSBhZ2FpbnN0IGFueSBsb3NzZXMsIGRhbWFnZXMgYW5kCitjb3N0cyAoY29sbGVjdGl2ZWx5ICZxdW90O0xvc3NlcyZxdW90OykgYXJpc2luZyBmcm9tIGNsYWltcywgbGF3c3VpdHMgYW5kIG90aGVyCitsZWdhbCBhY3Rpb25zIGJyb3VnaHQgYnkgYSB0aGlyZCBwYXJ0eSBhZ2FpbnN0IHRoZSBJbmRlbW5pZmllZCBDb250cmlidXRvciB0bwordGhlIGV4dGVudCBjYXVzZWQgYnkgdGhlIGFjdHMgb3Igb21pc3Npb25zIG9mIHN1Y2ggQ29tbWVyY2lhbCBDb250cmlidXRvciBpbgorY29ubmVjdGlvbiB3aXRoIGl0cyBkaXN0cmlidXRpb24gb2YgdGhlIFByb2dyYW0gaW4gYSBjb21tZXJjaWFsIHByb2R1Y3QKK29mZmVyaW5nLiBUaGUgb2JsaWdhdGlvbnMgaW4gdGhpcyBzZWN0aW9uIGRvIG5vdCBhcHBseSB0byBhbnkgY2xhaW1zIG9yIExvc3NlcworcmVsYXRpbmcgdG8gYW55IGFjdHVhbCBvciBhbGxlZ2VkIGludGVsbGVjdHVhbCBwcm9wZXJ0eSBpbmZyaW5nZW1lbnQuIEluIG9yZGVyCit0byBxdWFsaWZ5LCBhbiBJbmRlbW5pZmllZCBDb250cmlidXRvciBtdXN0OiBhKSBwcm9tcHRseSBub3RpZnkgdGhlIENvbW1lcmNpYWwKK0NvbnRyaWJ1dG9yIGluIHdyaXRpbmcgb2Ygc3VjaCBjbGFpbSwgYW5kIGIpIGFsbG93IHRoZSBDb21tZXJjaWFsIENvbnRyaWJ1dG9yCit0byBjb250cm9sLCBhbmQgY29vcGVyYXRlIHdpdGggdGhlIENvbW1lcmNpYWwgQ29udHJpYnV0b3IgaW4sIHRoZSBkZWZlbnNlIGFuZAorYW55IHJlbGF0ZWQgc2V0dGxlbWVudCBuZWdvdGlhdGlvbnMuIFRoZSBJbmRlbW5pZmllZCBDb250cmlidXRvciBtYXkgcGFydGljaXBhdGUKK2luIGFueSBzdWNoIGNsYWltIGF0IGl0cyBvd24gZXhwZW5zZS48L3NwYW4+IDwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkZvciBleGFtcGxlLCBhIENvbnRyaWJ1dG9yIG1pZ2h0IGluY2x1ZGUgdGhlCitQcm9ncmFtIGluIGEgY29tbWVyY2lhbCBwcm9kdWN0IG9mZmVyaW5nLCBQcm9kdWN0IFguIFRoYXQgQ29udHJpYnV0b3IgaXMgdGhlbiBhCitDb21tZXJjaWFsIENvbnRyaWJ1dG9yLiBJZiB0aGF0IENvbW1lcmNpYWwgQ29udHJpYnV0b3IgdGhlbiBtYWtlcyBwZXJmb3JtYW5jZQorY2xhaW1zLCBvciBvZmZlcnMgd2FycmFudGllcyByZWxhdGVkIHRvIFByb2R1Y3QgWCwgdGhvc2UgcGVyZm9ybWFuY2UgY2xhaW1zIGFuZAord2FycmFudGllcyBhcmUgc3VjaCBDb21tZXJjaWFsIENvbnRyaWJ1dG9yJ3MgcmVzcG9uc2liaWxpdHkgYWxvbmUuIFVuZGVyIHRoaXMKK3NlY3Rpb24sIHRoZSBDb21tZXJjaWFsIENvbnRyaWJ1dG9yIHdvdWxkIGhhdmUgdG8gZGVmZW5kIGNsYWltcyBhZ2FpbnN0IHRoZQorb3RoZXIgQ29udHJpYnV0b3JzIHJlbGF0ZWQgdG8gdGhvc2UgcGVyZm9ybWFuY2UgY2xhaW1zIGFuZCB3YXJyYW50aWVzLCBhbmQgaWYgYQorY291cnQgcmVxdWlyZXMgYW55IG90aGVyIENvbnRyaWJ1dG9yIHRvIHBheSBhbnkgZGFtYWdlcyBhcyBhIHJlc3VsdCwgdGhlCitDb21tZXJjaWFsIENvbnRyaWJ1dG9yIG11c3QgcGF5IHRob3NlIGRhbWFnZXMuPC9zcGFuPiA8L3A+CisKKzxwPjxiPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz41LiBOTyBXQVJSQU5UWTwvc3Bhbj48L2I+IDwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkVYQ0VQVCBBUyBFWFBSRVNTTFkgU0VUIEZPUlRIIElOIFRISVMKK0FHUkVFTUVOVCwgVEhFIFBST0dSQU0gSVMgUFJPVklERUQgT04gQU4gJnF1b3Q7QVMgSVMmcXVvdDsgQkFTSVMsIFdJVEhPVVQKK1dBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgRUlUSEVSIEVYUFJFU1MgT1IgSU1QTElFRCBJTkNMVURJTkcsCitXSVRIT1VUIExJTUlUQVRJT04sIEFOWSBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgVElUTEUsIE5PTi1JTkZSSU5HRU1FTlQsCitNRVJDSEFOVEFCSUxJVFkgT1IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIEVhY2ggUmVjaXBpZW50IGlzIHNvbGVseQorcmVzcG9uc2libGUgZm9yIGRldGVybWluaW5nIHRoZSBhcHByb3ByaWF0ZW5lc3Mgb2YgdXNpbmcgYW5kIGRpc3RyaWJ1dGluZyB0aGUKK1Byb2dyYW0gYW5kIGFzc3VtZXMgYWxsIHJpc2tzIGFzc29jaWF0ZWQgd2l0aCBpdHMgZXhlcmNpc2Ugb2YgcmlnaHRzIHVuZGVyIHRoaXMKK0FncmVlbWVudCAsIGluY2x1ZGluZyBidXQgbm90IGxpbWl0ZWQgdG8gdGhlIHJpc2tzIGFuZCBjb3N0cyBvZiBwcm9ncmFtIGVycm9ycywKK2NvbXBsaWFuY2Ugd2l0aCBhcHBsaWNhYmxlIGxhd3MsIGRhbWFnZSB0byBvciBsb3NzIG9mIGRhdGEsIHByb2dyYW1zIG9yCitlcXVpcG1lbnQsIGFuZCB1bmF2YWlsYWJpbGl0eSBvciBpbnRlcnJ1cHRpb24gb2Ygb3BlcmF0aW9ucy4gPC9zcGFuPjwvcD4KKworPHA+PGI+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPjYuIERJU0NMQUlNRVIgT0YgTElBQklMSVRZPC9zcGFuPjwvYj4gPC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+RVhDRVBUIEFTIEVYUFJFU1NMWSBTRVQgRk9SVEggSU4gVEhJUworQUdSRUVNRU5ULCBORUlUSEVSIFJFQ0lQSUVOVCBOT1IgQU5ZIENPTlRSSUJVVE9SUyBTSEFMTCBIQVZFIEFOWSBMSUFCSUxJVFkgRk9SCitBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyhJTkNMVURJTkcgV0lUSE9VVCBMSU1JVEFUSU9OIExPU1QgUFJPRklUUyksIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCitPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORworTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPUiBESVNUUklCVVRJT04gT0YKK1RIRSBQUk9HUkFNIE9SIFRIRSBFWEVSQ0lTRSBPRiBBTlkgUklHSFRTIEdSQU5URUQgSEVSRVVOREVSLCBFVkVOIElGIEFEVklTRUQgT0YKK1RIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRVMuPC9zcGFuPiA8L3A+CisKKzxwPjxiPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz43LiBHRU5FUkFMPC9zcGFuPjwvYj4gPC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+SWYgYW55IHByb3Zpc2lvbiBvZiB0aGlzIEFncmVlbWVudCBpcyBpbnZhbGlkCitvciB1bmVuZm9yY2VhYmxlIHVuZGVyIGFwcGxpY2FibGUgbGF3LCBpdCBzaGFsbCBub3QgYWZmZWN0IHRoZSB2YWxpZGl0eSBvcgorZW5mb3JjZWFiaWxpdHkgb2YgdGhlIHJlbWFpbmRlciBvZiB0aGUgdGVybXMgb2YgdGhpcyBBZ3JlZW1lbnQsIGFuZCB3aXRob3V0CitmdXJ0aGVyIGFjdGlvbiBieSB0aGUgcGFydGllcyBoZXJldG8sIHN1Y2ggcHJvdmlzaW9uIHNoYWxsIGJlIHJlZm9ybWVkIHRvIHRoZQorbWluaW11bSBleHRlbnQgbmVjZXNzYXJ5IHRvIG1ha2Ugc3VjaCBwcm92aXNpb24gdmFsaWQgYW5kIGVuZm9yY2VhYmxlLjwvc3Bhbj4gPC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+SWYgUmVjaXBpZW50IGluc3RpdHV0ZXMgcGF0ZW50IGxpdGlnYXRpb24KK2FnYWluc3QgYW55IGVudGl0eSAoaW5jbHVkaW5nIGEgY3Jvc3MtY2xhaW0gb3IgY291bnRlcmNsYWltIGluIGEgbGF3c3VpdCkKK2FsbGVnaW5nIHRoYXQgdGhlIFByb2dyYW0gaXRzZWxmIChleGNsdWRpbmcgY29tYmluYXRpb25zIG9mIHRoZSBQcm9ncmFtIHdpdGgKK290aGVyIHNvZnR3YXJlIG9yIGhhcmR3YXJlKSBpbmZyaW5nZXMgc3VjaCBSZWNpcGllbnQncyBwYXRlbnQocyksIHRoZW4gc3VjaAorUmVjaXBpZW50J3MgcmlnaHRzIGdyYW50ZWQgdW5kZXIgU2VjdGlvbiAyKGIpIHNoYWxsIHRlcm1pbmF0ZSBhcyBvZiB0aGUgZGF0ZQorc3VjaCBsaXRpZ2F0aW9uIGlzIGZpbGVkLiA8L3NwYW4+PC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+QWxsIFJlY2lwaWVudCdzIHJpZ2h0cyB1bmRlciB0aGlzIEFncmVlbWVudAorc2hhbGwgdGVybWluYXRlIGlmIGl0IGZhaWxzIHRvIGNvbXBseSB3aXRoIGFueSBvZiB0aGUgbWF0ZXJpYWwgdGVybXMgb3IKK2NvbmRpdGlvbnMgb2YgdGhpcyBBZ3JlZW1lbnQgYW5kIGRvZXMgbm90IGN1cmUgc3VjaCBmYWlsdXJlIGluIGEgcmVhc29uYWJsZQorcGVyaW9kIG9mIHRpbWUgYWZ0ZXIgYmVjb21pbmcgYXdhcmUgb2Ygc3VjaCBub25jb21wbGlhbmNlLiBJZiBhbGwgUmVjaXBpZW50J3MKK3JpZ2h0cyB1bmRlciB0aGlzIEFncmVlbWVudCB0ZXJtaW5hdGUsIFJlY2lwaWVudCBhZ3JlZXMgdG8gY2Vhc2UgdXNlIGFuZAorZGlzdHJpYnV0aW9uIG9mIHRoZSBQcm9ncmFtIGFzIHNvb24gYXMgcmVhc29uYWJseSBwcmFjdGljYWJsZS4gSG93ZXZlciwKK1JlY2lwaWVudCdzIG9ibGlnYXRpb25zIHVuZGVyIHRoaXMgQWdyZWVtZW50IGFuZCBhbnkgbGljZW5zZXMgZ3JhbnRlZCBieQorUmVjaXBpZW50IHJlbGF0aW5nIHRvIHRoZSBQcm9ncmFtIHNoYWxsIGNvbnRpbnVlIGFuZCBzdXJ2aXZlLiA8L3NwYW4+PC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+RXZlcnlvbmUgaXMgcGVybWl0dGVkIHRvIGNvcHkgYW5kIGRpc3RyaWJ1dGUKK2NvcGllcyBvZiB0aGlzIEFncmVlbWVudCwgYnV0IGluIG9yZGVyIHRvIGF2b2lkIGluY29uc2lzdGVuY3kgdGhlIEFncmVlbWVudCBpcworY29weXJpZ2h0ZWQgYW5kIG1heSBvbmx5IGJlIG1vZGlmaWVkIGluIHRoZSBmb2xsb3dpbmcgbWFubmVyLiBUaGUgQWdyZWVtZW50CitTdGV3YXJkIHJlc2VydmVzIHRoZSByaWdodCB0byBwdWJsaXNoIG5ldyB2ZXJzaW9ucyAoaW5jbHVkaW5nIHJldmlzaW9ucykgb2YKK3RoaXMgQWdyZWVtZW50IGZyb20gdGltZSB0byB0aW1lLiBObyBvbmUgb3RoZXIgdGhhbiB0aGUgQWdyZWVtZW50IFN0ZXdhcmQgaGFzCit0aGUgcmlnaHQgdG8gbW9kaWZ5IHRoaXMgQWdyZWVtZW50LiBUaGUgRWNsaXBzZSBGb3VuZGF0aW9uIGlzIHRoZSBpbml0aWFsCitBZ3JlZW1lbnQgU3Rld2FyZC4gVGhlIEVjbGlwc2UgRm91bmRhdGlvbiBtYXkgYXNzaWduIHRoZSByZXNwb25zaWJpbGl0eSB0bworc2VydmUgYXMgdGhlIEFncmVlbWVudCBTdGV3YXJkIHRvIGEgc3VpdGFibGUgc2VwYXJhdGUgZW50aXR5LiBFYWNoIG5ldyB2ZXJzaW9uCitvZiB0aGUgQWdyZWVtZW50IHdpbGwgYmUgZ2l2ZW4gYSBkaXN0aW5ndWlzaGluZyB2ZXJzaW9uIG51bWJlci4gVGhlIFByb2dyYW0KKyhpbmNsdWRpbmcgQ29udHJpYnV0aW9ucykgbWF5IGFsd2F5cyBiZSBkaXN0cmlidXRlZCBzdWJqZWN0IHRvIHRoZSB2ZXJzaW9uIG9mCit0aGUgQWdyZWVtZW50IHVuZGVyIHdoaWNoIGl0IHdhcyByZWNlaXZlZC4gSW4gYWRkaXRpb24sIGFmdGVyIGEgbmV3IHZlcnNpb24gb2YKK3RoZSBBZ3JlZW1lbnQgaXMgcHVibGlzaGVkLCBDb250cmlidXRvciBtYXkgZWxlY3QgdG8gZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbQorKGluY2x1ZGluZyBpdHMgQ29udHJpYnV0aW9ucykgdW5kZXIgdGhlIG5ldyB2ZXJzaW9uLiBFeGNlcHQgYXMgZXhwcmVzc2x5IHN0YXRlZAoraW4gU2VjdGlvbnMgMihhKSBhbmQgMihiKSBhYm92ZSwgUmVjaXBpZW50IHJlY2VpdmVzIG5vIHJpZ2h0cyBvciBsaWNlbnNlcyB0bwordGhlIGludGVsbGVjdHVhbCBwcm9wZXJ0eSBvZiBhbnkgQ29udHJpYnV0b3IgdW5kZXIgdGhpcyBBZ3JlZW1lbnQsIHdoZXRoZXIKK2V4cHJlc3NseSwgYnkgaW1wbGljYXRpb24sIGVzdG9wcGVsIG9yIG90aGVyd2lzZS4gQWxsIHJpZ2h0cyBpbiB0aGUgUHJvZ3JhbSBub3QKK2V4cHJlc3NseSBncmFudGVkIHVuZGVyIHRoaXMgQWdyZWVtZW50IGFyZSByZXNlcnZlZC48L3NwYW4+IDwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPlRoaXMgQWdyZWVtZW50IGlzIGdvdmVybmVkIGJ5IHRoZSBsYXdzIG9mIHRoZQorU3RhdGUgb2YgTmV3IFlvcmsgYW5kIHRoZSBpbnRlbGxlY3R1YWwgcHJvcGVydHkgbGF3cyBvZiB0aGUgVW5pdGVkIFN0YXRlcyBvZgorQW1lcmljYS4gTm8gcGFydHkgdG8gdGhpcyBBZ3JlZW1lbnQgd2lsbCBicmluZyBhIGxlZ2FsIGFjdGlvbiB1bmRlciB0aGlzCitBZ3JlZW1lbnQgbW9yZSB0aGFuIG9uZSB5ZWFyIGFmdGVyIHRoZSBjYXVzZSBvZiBhY3Rpb24gYXJvc2UuIEVhY2ggcGFydHkgd2FpdmVzCitpdHMgcmlnaHRzIHRvIGEganVyeSB0cmlhbCBpbiBhbnkgcmVzdWx0aW5nIGxpdGlnYXRpb24uPC9zcGFuPiA8L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbD48IVtpZiAhc3VwcG9ydEVtcHR5UGFyYXNdPiZuYnNwOzwhW2VuZGlmXT48bzpwPjwvbzpwPjwvcD4KKworPC9kaXY+CisKKzwvYm9keT4KKworPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5ubDEvbm90aWNlLmh0bWwgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkubmwxL25vdGljZS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM2YWY5NjYKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkubmwxL25vdGljZS5odG1sCkBAIC0wLDAgKzEsNzkgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAvL0VOIj4KKzxodG1sPgorPGhlYWQ+Cis8bWV0YSBodHRwLWVxdWl2PUNvbnRlbnQtVHlwZSBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9aXNvLTg4NTktMSI+Cis8dGl0bGU+RWNsaXBzZS5vcmcgU29mdHdhcmUgVXNlciBBZ3JlZW1lbnQ8L3RpdGxlPgorPC9oZWFkPgorCis8Ym9keSBsYW5nPSJFTi1VUyIgbGluaz1ibHVlIHZsaW5rPXB1cnBsZT4KKzxoMj5FY2xpcHNlIEZvdW5kYXRpb24gU29mdHdhcmUgVXNlciBBZ3JlZW1lbnQ8L2gyPgorPHA+TWFyY2ggMTcsIDIwMDU8L3A+CisKKzxoMz5Vc2FnZSBPZiBDb250ZW50PC9oMz4KKworPHA+VEhFIEVDTElQU0UgRk9VTkRBVElPTiBNQUtFUyBBVkFJTEFCTEUgU09GVFdBUkUsIERPQ1VNRU5UQVRJT04sIElORk9STUFUSU9OIEFORC9PUiBPVEhFUiBNQVRFUklBTFMgRk9SIE9QRU4gU09VUkNFIFBST0pFQ1RTCisgICAoQ09MTEVDVElWRUxZICZxdW90O0NPTlRFTlQmcXVvdDspLiAgVVNFIE9GIFRIRSBDT05URU5UIElTIEdPVkVSTkVEIEJZIFRIRSBURVJNUyBBTkQgQ09ORElUSU9OUyBPRiBUSElTIEFHUkVFTUVOVCBBTkQvT1IgVEhFIFRFUk1TIEFORAorICAgQ09ORElUSU9OUyBPRiBMSUNFTlNFIEFHUkVFTUVOVFMgT1IgTk9USUNFUyBJTkRJQ0FURUQgT1IgUkVGRVJFTkNFRCBCRUxPVy4gIEJZIFVTSU5HIFRIRSBDT05URU5ULCBZT1UgQUdSRUUgVEhBVCBZT1VSIFVTRQorICAgT0YgVEhFIENPTlRFTlQgSVMgR09WRVJORUQgQlkgVEhJUyBBR1JFRU1FTlQgQU5EL09SIFRIRSBURVJNUyBBTkQgQ09ORElUSU9OUyBPRiBBTlkgQVBQTElDQUJMRSBMSUNFTlNFIEFHUkVFTUVOVFMgT1IKKyAgIE5PVElDRVMgSU5ESUNBVEVEIE9SIFJFRkVSRU5DRUQgQkVMT1cuICBJRiBZT1UgRE8gTk9UIEFHUkVFIFRPIFRIRSBURVJNUyBBTkQgQ09ORElUSU9OUyBPRiBUSElTIEFHUkVFTUVOVCBBTkQgVEhFIFRFUk1TIEFORAorICAgQ09ORElUSU9OUyBPRiBBTlkgQVBQTElDQUJMRSBMSUNFTlNFIEFHUkVFTUVOVFMgT1IgTk9USUNFUyBJTkRJQ0FURUQgT1IgUkVGRVJFTkNFRCBCRUxPVywgVEhFTiBZT1UgTUFZIE5PVCBVU0UgVEhFIENPTlRFTlQuPC9wPgorICAgCis8aDM+QXBwbGljYWJsZSBMaWNlbnNlczwvaDM+ICAgCisgICAKKzxwPlVubGVzcyBvdGhlcndpc2UgaW5kaWNhdGVkLCBhbGwgQ29udGVudCBtYWRlIGF2YWlsYWJsZSBieSB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uIGlzIHByb3ZpZGVkIHRvIHlvdSB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjAKKyAgICgmcXVvdDtFUEwmcXVvdDspLiAgQSBjb3B5IG9mIHRoZSBFUEwgaXMgcHJvdmlkZWQgd2l0aCB0aGlzIENvbnRlbnQgYW5kIGlzIGFsc28gYXZhaWxhYmxlIGF0IDxhIGhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sIj5odHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbDwvYT4uCisgICBGb3IgcHVycG9zZXMgb2YgdGhlIEVQTCwgJnF1b3Q7UHJvZ3JhbSZxdW90OyB3aWxsIG1lYW4gdGhlIENvbnRlbnQuPC9wPgorCis8cD5Db250ZW50IGluY2x1ZGVzLCBidXQgaXMgbm90IGxpbWl0ZWQgdG8sIHNvdXJjZSBjb2RlLCBvYmplY3QgY29kZSwgZG9jdW1lbnRhdGlvbiBhbmQgb3RoZXIgZmlsZXMgbWFpbnRhaW5lZCBpbiB0aGUgRWNsaXBzZS5vcmcgQ1ZTIHJlcG9zaXRvcnkgKCZxdW90O1JlcG9zaXRvcnkmcXVvdDspIGluIENWUworICAgbW9kdWxlcyAoJnF1b3Q7TW9kdWxlcyZxdW90OykgYW5kIG1hZGUgYXZhaWxhYmxlIGFzIGRvd25sb2FkYWJsZSBhcmNoaXZlcyAoJnF1b3Q7RG93bmxvYWRzJnF1b3Q7KS48L3A+CisgICAKKzx1bD4KKwk8bGk+Q29udGVudCBtYXkgYmUgc3RydWN0dXJlZCBhbmQgcGFja2FnZWQgaW50byBtb2R1bGVzIHRvIGZhY2lsaXRhdGUgZGVsaXZlcmluZywgZXh0ZW5kaW5nLCBhbmQgdXBncmFkaW5nIHRoZSBDb250ZW50LiAgVHlwaWNhbCBtb2R1bGVzIG1heSBpbmNsdWRlIHBsdWctaW5zICgmcXVvdDtQbHVnLWlucyZxdW90OyksIHBsdWctaW4gZnJhZ21lbnRzICgmcXVvdDtGcmFnbWVudHMmcXVvdDspLCBhbmQgZmVhdHVyZXMgKCZxdW90O0ZlYXR1cmVzJnF1b3Q7KS48L2xpPgorCTxsaT5FYWNoIFBsdWctaW4gb3IgRnJhZ21lbnQgbWF5IGJlIHBhY2thZ2VkIGFzIGEgc3ViLWRpcmVjdG9yeSBvciBKQVIgKEphdmEmdHJhZGU7IEFSY2hpdmUpIGluIGEgZGlyZWN0b3J5IG5hbWVkICZxdW90O3BsdWdpbnMmcXVvdDsuPC9saT4KKwk8bGk+QSBGZWF0dXJlIGlzIGEgYnVuZGxlIG9mIG9uZSBvciBtb3JlIFBsdWctaW5zIGFuZC9vciBGcmFnbWVudHMgYW5kIGFzc29jaWF0ZWQgbWF0ZXJpYWwuICBFYWNoIEZlYXR1cmUgbWF5IGJlIHBhY2thZ2VkIGFzIGEgc3ViLWRpcmVjdG9yeSBpbiBhIGRpcmVjdG9yeSBuYW1lZCAmcXVvdDtmZWF0dXJlcyZxdW90Oy4gIFdpdGhpbiBhIEZlYXR1cmUsIGZpbGVzIG5hbWVkICZxdW90O2ZlYXR1cmUueG1sJnF1b3Q7IG1heSBjb250YWluIGEgbGlzdCBvZiB0aGUgbmFtZXMgYW5kIHZlcnNpb24gbnVtYmVycyBvZiB0aGUgUGx1Zy1pbnMKKyAgICAgIGFuZC9vciBGcmFnbWVudHMgYXNzb2NpYXRlZCB3aXRoIHRoYXQgRmVhdHVyZS48L2xpPgorCTxsaT5GZWF0dXJlcyBtYXkgYWxzbyBpbmNsdWRlIG90aGVyIEZlYXR1cmVzICgmcXVvdDtJbmNsdWRlZCBGZWF0dXJlcyZxdW90OykuIFdpdGhpbiBhIEZlYXR1cmUsIGZpbGVzIG5hbWVkICZxdW90O2ZlYXR1cmUueG1sJnF1b3Q7IG1heSBjb250YWluIGEgbGlzdCBvZiB0aGUgbmFtZXMgYW5kIHZlcnNpb24gbnVtYmVycyBvZiBJbmNsdWRlZCBGZWF0dXJlcy48L2xpPgorPC91bD4gICAKKyAKKzxwPlRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBnb3Zlcm5pbmcgUGx1Zy1pbnMgYW5kIEZyYWdtZW50cyBzaG91bGQgYmUgY29udGFpbmVkIGluIGZpbGVzIG5hbWVkICZxdW90O2Fib3V0Lmh0bWwmcXVvdDsgKCZxdW90O0Fib3V0cyZxdW90OykuIFRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBnb3Zlcm5pbmcgRmVhdHVyZXMgYW5kCitJbmNsdWRlZCBGZWF0dXJlcyBzaG91bGQgYmUgY29udGFpbmVkIGluIGZpbGVzIG5hbWVkICZxdW90O2xpY2Vuc2UuaHRtbCZxdW90OyAoJnF1b3Q7RmVhdHVyZSBMaWNlbnNlcyZxdW90OykuICBBYm91dHMgYW5kIEZlYXR1cmUgTGljZW5zZXMgbWF5IGJlIGxvY2F0ZWQgaW4gYW55IGRpcmVjdG9yeSBvZiBhIERvd25sb2FkIG9yIE1vZHVsZQoraW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG8gdGhlIGZvbGxvd2luZyBsb2NhdGlvbnM6PC9wPgorCis8dWw+CisJPGxpPlRoZSB0b3AtbGV2ZWwgKHJvb3QpIGRpcmVjdG9yeTwvbGk+CisJPGxpPlBsdWctaW4gYW5kIEZyYWdtZW50IGRpcmVjdG9yaWVzPC9saT4KKwk8bGk+SW5zaWRlIFBsdWctaW5zIGFuZCBGcmFnbWVudHMgcGFja2FnZWQgYXMgSkFSczwvbGk+CisJPGxpPlN1Yi1kaXJlY3RvcmllcyBvZiB0aGUgZGlyZWN0b3J5IG5hbWVkICZxdW90O3NyYyZxdW90OyBvZiBjZXJ0YWluIFBsdWctaW5zPC9saT4KKwk8bGk+RmVhdHVyZSBkaXJlY3RvcmllczwvbGk+Cis8L3VsPgorCQkKKzxwPk5vdGU6IGlmIGEgRmVhdHVyZSBtYWRlIGF2YWlsYWJsZSBieSB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uIGlzIGluc3RhbGxlZCB1c2luZyB0aGUgRWNsaXBzZSBVcGRhdGUgTWFuYWdlciwgeW91IG11c3QgYWdyZWUgdG8gYSBsaWNlbnNlICgmcXVvdDtGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlJnF1b3Q7KSBkdXJpbmcgdGhlCitpbnN0YWxsYXRpb24gcHJvY2Vzcy4gIElmIHRoZSBGZWF0dXJlIGNvbnRhaW5zIEluY2x1ZGVkIEZlYXR1cmVzLCB0aGUgRmVhdHVyZSBVcGRhdGUgTGljZW5zZSBzaG91bGQgZWl0aGVyIHByb3ZpZGUgeW91IHdpdGggdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIGdvdmVybmluZyB0aGUgSW5jbHVkZWQgRmVhdHVyZXMgb3IKK2luZm9ybSB5b3Ugd2hlcmUgeW91IGNhbiBsb2NhdGUgdGhlbS4gIEZlYXR1cmUgVXBkYXRlIExpY2Vuc2VzIG1heSBiZSBmb3VuZCBpbiB0aGUgJnF1b3Q7bGljZW5zZSZxdW90OyBwcm9wZXJ0eSBvZiBmaWxlcyBuYW1lZCAmcXVvdDtmZWF0dXJlLnByb3BlcnRpZXMmcXVvdDsgZm91bmQgd2l0aGluIGEgRmVhdHVyZS4KK1N1Y2ggQWJvdXRzLCBGZWF0dXJlIExpY2Vuc2VzLCBhbmQgRmVhdHVyZSBVcGRhdGUgTGljZW5zZXMgY29udGFpbiB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgKG9yIHJlZmVyZW5jZXMgdG8gc3VjaCB0ZXJtcyBhbmQgY29uZGl0aW9ucykgdGhhdCBnb3Zlcm4geW91ciB1c2Ugb2YgdGhlIGFzc29jaWF0ZWQgQ29udGVudCBpbgordGhhdCBkaXJlY3RvcnkuPC9wPgorCis8cD5USEUgQUJPVVRTLCBGRUFUVVJFIExJQ0VOU0VTLCBBTkQgRkVBVFVSRSBVUERBVEUgTElDRU5TRVMgTUFZIFJFRkVSIFRPIFRIRSBFUEwgT1IgT1RIRVIgTElDRU5TRSBBR1JFRU1FTlRTLCBOT1RJQ0VTIE9SIFRFUk1TIEFORCBDT05ESVRJT05TLiAgU09NRSBPRiBUSEVTRQorT1RIRVIgTElDRU5TRSBBR1JFRU1FTlRTIE1BWSBJTkNMVURFIChCVVQgQVJFIE5PVCBMSU1JVEVEIFRPKTo8L3A+CisKKzx1bD4KKwk8bGk+Q29tbW9uIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4wIChhdmFpbGFibGUgYXQgPGEgaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9jcGwtdjEwLmh0bWwiPmh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvY3BsLXYxMC5odG1sPC9hPik8L2xpPgorCTxsaT5BcGFjaGUgU29mdHdhcmUgTGljZW5zZSAxLjEgKGF2YWlsYWJsZSBhdCA8YSBocmVmPSJodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRSI+aHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0U8L2E+KTwvbGk+CisJPGxpPkFwYWNoZSBTb2Z0d2FyZSBMaWNlbnNlIDIuMCAoYXZhaWxhYmxlIGF0IDxhIGhyZWY9Imh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMCI+aHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wPC9hPik8L2xpPgorCTxsaT5JQk0gUHVibGljIExpY2Vuc2UgMS4wIChhdmFpbGFibGUgYXQgPGEgaHJlZj0iaHR0cDovL29zcy5zb2Z0d2FyZS5pYm0uY29tL2RldmVsb3BlcndvcmtzL29wZW5zb3VyY2UvbGljZW5zZTEwLmh0bWwiPmh0dHA6Ly9vc3Muc29mdHdhcmUuaWJtLmNvbS9kZXZlbG9wZXJ3b3Jrcy9vcGVuc291cmNlL2xpY2Vuc2UxMC5odG1sPC9hPik8L2xpPgkKKwk8bGk+TWV0cm8gTGluayBQdWJsaWMgTGljZW5zZSAxLjAwIChhdmFpbGFibGUgYXQgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuZ3JvdXAub3JnL29wZW5tb3RpZi9zdXBwb3J0ZXJzL21ldHJvbGluay9saWNlbnNlLmh0bWwiPmh0dHA6Ly93d3cub3Blbmdyb3VwLm9yZy9vcGVubW90aWYvc3VwcG9ydGVycy9tZXRyb2xpbmsvbGljZW5zZS5odG1sPC9hPik8L2xpPgorCTxsaT5Nb3ppbGxhIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4xIChhdmFpbGFibGUgYXQgPGEgaHJlZj0iaHR0cDovL3d3dy5tb3ppbGxhLm9yZy9NUEwvTVBMLTEuMS5odG1sIj5odHRwOi8vd3d3Lm1vemlsbGEub3JnL01QTC9NUEwtMS4xLmh0bWw8L2E+KTwvbGk+Cis8L3VsPgorCis8cD5JVCBJUyBZT1VSIE9CTElHQVRJT04gVE8gUkVBRCBBTkQgQUNDRVBUIEFMTCBTVUNIIFRFUk1TIEFORCBDT05ESVRJT05TIFBSSU9SIFRPIFVTRSBPRiBUSEUgQ09OVEVOVC4gIElmIG5vIEFib3V0LCBGZWF0dXJlIExpY2Vuc2UsIG9yIEZlYXR1cmUgVXBkYXRlIExpY2Vuc2UgaXMgcHJvdmlkZWQsIHBsZWFzZQorY29udGFjdCB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uIHRvIGRldGVybWluZSB3aGF0IHRlcm1zIGFuZCBjb25kaXRpb25zIGdvdmVybiB0aGF0IHBhcnRpY3VsYXIgQ29udGVudC48L3A+CisKKzxoMz5DcnlwdG9ncmFwaHk8L2gzPgorCis8cD5Db250ZW50IG1heSBjb250YWluIGVuY3J5cHRpb24gc29mdHdhcmUuIFRoZSBjb3VudHJ5IGluIHdoaWNoIHlvdSBhcmUgY3VycmVudGx5IG1heSBoYXZlIHJlc3RyaWN0aW9ucyBvbiB0aGUgaW1wb3J0LCBwb3NzZXNzaW9uLCBhbmQgdXNlLCBhbmQvb3IgcmUtZXhwb3J0IHRvCisgICBhbm90aGVyIGNvdW50cnksIG9mIGVuY3J5cHRpb24gc29mdHdhcmUuIEJFRk9SRSB1c2luZyBhbnkgZW5jcnlwdGlvbiBzb2Z0d2FyZSwgcGxlYXNlIGNoZWNrIHRoZSBjb3VudHJ5J3MgbGF3cywgcmVndWxhdGlvbnMgYW5kIHBvbGljaWVzIGNvbmNlcm5pbmcgdGhlIGltcG9ydCwKKyAgIHBvc3Nlc3Npb24sIG9yIHVzZSwgYW5kIHJlLWV4cG9ydCBvZiBlbmNyeXB0aW9uIHNvZnR3YXJlLCB0byBzZWUgaWYgdGhpcyBpcyBwZXJtaXR0ZWQuPC9wPgorICAgCis8c21hbGw+SmF2YSBhbmQgYWxsIEphdmEtYmFzZWQgdHJhZGVtYXJrcyBhcmUgdHJhZGVtYXJrcyBvZiBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuIGluIHRoZSBVbml0ZWQgU3RhdGVzLCBvdGhlciBjb3VudHJpZXMsIG9yIGJvdGguPC9zbWFsbD4gICAKKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5ubDEvcGx1Z2luLnByb3BlcnRpZXMgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkubmwxL3BsdWdpbi5wcm9wZXJ0aWVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRlZWE5MDQKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkubmwxL3BsdWdpbi5wcm9wZXJ0aWVzCkBAIC0wLDAgKzEsMTUgQEAKKyMvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIyAqIENvcHlyaWdodCAoYykgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyMgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisjICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisjICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyMgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorIyAqCisjICogQ29udHJpYnV0b3JzOgorIyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCitwbHVnaW5OYW1lID0gU1RFTSBVSSBObDEgRnJhZ21lbnQKK3Byb3ZpZGVyTmFtZSA9IEVjbGlwc2Uub3JnCisKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5ubDEvcGx1Z2luX2RlLnByb3BlcnRpZXMgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkubmwxL3BsdWdpbl9kZS5wcm9wZXJ0aWVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc1N2NjNTgKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkubmwxL3BsdWdpbl9kZS5wcm9wZXJ0aWVzCkBAIC0wLDAgKzEsMTUgQEAKKyMvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIyAqIENvcHlyaWdodCAoYykgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyMgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisjICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisjICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyMgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorIyAqCisjICogQ29udHJpYnV0b3JzOgorIyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCitwbHVnaW5OYW1lPVNURU0gQmVudXR6ZXJvYmVyZmxcdTAwZTRjaGVuLU5MMS1GcmFnbWVudAorcHJvdmlkZXJOYW1lPUVjbGlwc2Uub3JnCisKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5ubDEvcGx1Z2luX2VuX0NBLnByb3BlcnRpZXMgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkubmwxL3BsdWdpbl9lbl9DQS5wcm9wZXJ0aWVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJhNmJlMjIKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkubmwxL3BsdWdpbl9lbl9DQS5wcm9wZXJ0aWVzCkBAIC0wLDAgKzEsNTkgQEAKKyMgQ2FuYWRpYW4gRW5nbGlzaAorIworIyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIyAgKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisjICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyMgICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisjICAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisjICAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisjICAqCisjICAqIENvbnRyaWJ1dG9yczoKKyMgICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorIyAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisjIFRvIGNvZGUgZGV2ZWxvcGVyOgorIyAgIERvIE5PVCBjaGFuZ2UgdGhlIHByb3BlcnRpZXMgYmV0d2VlbiB0aGlzIGxpbmUgYW5kIHRoZQorIyAgICIlJSUgRU5EIE9GIFRSQU5TTEFURUQgUFJPUEVSVElFUyAlJSUiIGxpbmUuCisjICAgTWFrZSBhIG5ldyBwcm9wZXJ0eSBuYW1lLCBhcHBlbmQgdG8gdGhlIGVuZCBvZiB0aGUgZmlsZSBhbmQgY2hhbmdlCisjICAgdGhlIGNvZGUgdG8gdXNlIHRoZSBuZXcgcHJvcGVydHkuCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisjICUlJSBFTkQgT0YgVFJBTlNMQVRFRCBQUk9QRVJUSUVTICUlJQorIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitwbHVnaW5OYW1lID0gU1RFTSBVSQorCisjIENvbW1vbiBLZXlzCitfVUlfQ29tbW9uX1NURU0gPSBTVEVNCisKKyMgU1RFTSBOZXcgUHJvamVjdCBXaXphcmQKK19VSV9OZXdfU1RFTV9Qcm9qZWN0X1dpemFyZCA9IFNURU0gUHJvamVjdAorCisjIFZpZXdzCitfVUlfR3JhcGhzX1ZpZXcgPSBHcmFwaHMKK19VSV9Nb2RlbHNfVmlldyA9IE1vZGVscworX1VJX1NjZW5hcmlvc19WaWV3ID0gU2NlbmFyaW9zIGVoPworX1VJX09ic2VydmVyc19WaWV3ID0gT2JzZXJ2ZXJzCitfVUlfU2VxdWVuY2Vyc19WaWV3ID0gU2VxdWVuY2VycworX1VJX0RlY29yYXRvcnNfVmlldyA9IERlY29yYXRvcnMKK19VSV9TVEVNX1Byb2plY3RfRXhwbG9yZXIgPSBTVEVNIFByb2plY3QgRXhwbG9yZXIKK19VSV9BY3RpdmVfU2ltdWxhdGlvbnNfVmlldyA9IEFjdGl2ZSBTaW11bGF0aW9ucworCisjIE1lbnUKK19VSV9TVEVNX1dvcmtCZW5jaF9NZW51ID0gU1RFTQorX1VJX1NURU1fQWN0aW9uX1J1biA9IFJ1bgorX1VJX1NURU1fQWN0aW9uX1J1bl9UVCA9IFN0YXJ0IGV4ZWN1dGlvbiBvZiB0aGUgc2ltdWxhdGlvbgorX1VJX1NURU1fQWN0aW9uX1N0b3AgPSBTdG9wCitfVUlfU1RFTV9BY3Rpb25fU3RvcF9UVCA9IFN0b3AgdGhlIHNpbXVsYXRpb24gYW5kIG1ha2UgaXQgaW5hY3RpdmUKK19VSV9TVEVNX0FjdGlvbl9QYXVzZSA9IFBhdXNlCitfVUlfU1RFTV9BY3Rpb25fUGF1c2VfVFQgPSBQYXVzZSB0aGUgc2ltdWxhdGlvbgorX1VJX1NURU1fQWN0aW9uX1N0ZXAgPSBTdGVwIAorX1VJX1NURU1fQWN0aW9uX1N0ZXBfVFQgPSBBZHZhbmNlIHRoZSBzaW11bGF0aW9uIGJ5IG9uZSB0aW1lIHN0ZXAKK19VSV9TVEVNX0FjdGlvbl9SZXNldCA9IFJlc2V0CitfVUlfU1RFTV9BY3Rpb25fUmVzZXRfVFQgPSBSZXN0b3JlIHRoZSBzaW11bGF0aW9uIHRvIGl0cyBzdGFydGluZyBzdGF0ZQorCisKKworCisKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5ubDEvcGx1Z2luX2VuX1VTX0NBLnByb3BlcnRpZXMgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkubmwxL3BsdWdpbl9lbl9VU19DQS5wcm9wZXJ0aWVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNjMThjYzkKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkubmwxL3BsdWdpbl9lbl9VU19DQS5wcm9wZXJ0aWVzCkBAIC0wLDAgKzEsNTkgQEAKKyMgQ2FsaWZvcm5pYW4gRW5nbGlzaAorIworIyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIyAgKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisjICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyMgICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisjICAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisjICAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisjICAqCisjICAqIENvbnRyaWJ1dG9yczoKKyMgICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorIyAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisjIFRvIGNvZGUgZGV2ZWxvcGVyOgorIyAgIERvIE5PVCBjaGFuZ2UgdGhlIHByb3BlcnRpZXMgYmV0d2VlbiB0aGlzIGxpbmUgYW5kIHRoZQorIyAgICIlJSUgRU5EIE9GIFRSQU5TTEFURUQgUFJPUEVSVElFUyAlJSUiIGxpbmUuCisjICAgTWFrZSBhIG5ldyBwcm9wZXJ0eSBuYW1lLCBhcHBlbmQgdG8gdGhlIGVuZCBvZiB0aGUgZmlsZSBhbmQgY2hhbmdlCisjICAgdGhlIGNvZGUgdG8gdXNlIHRoZSBuZXcgcHJvcGVydHkuCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisjICUlJSBFTkQgT0YgVFJBTlNMQVRFRCBQUk9QRVJUSUVTICUlJQorIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitwbHVnaW5OYW1lID0gU1RFTSBVSQorCisjIENvbW1vbiBLZXlzCitfVUlfQ29tbW9uX1NURU0gPSBTVEVNCisKKyMgU1RFTSBOZXcgUHJvamVjdCBXaXphcmQKK19VSV9OZXdfU1RFTV9Qcm9qZWN0X1dpemFyZCA9IFNURU0gUHJvamVjdAorCisjIFZpZXdzCitfVUlfR3JhcGhzX1ZpZXcgPSBHcmFwaHMKK19VSV9Nb2RlbHNfVmlldyA9IE1vZGVscworX1VJX1NjZW5hcmlvc19WaWV3ID0gU2NlbmFyaW9zCitfVUlfT2JzZXJ2ZXJzX1ZpZXcgPSBPYnNlcnZlcnMKK19VSV9TZXF1ZW5jZXJzX1ZpZXcgPSBTZXF1ZW5jZXJzCitfVUlfRGVjb3JhdG9yc19WaWV3ID0gRGVjb3JhdG9ycworX1VJX1NURU1fUHJvamVjdF9FeHBsb3JlciA9IFNURU0gUHJvamVjdCBFeHBsb3JlcgorX1VJX0FjdGl2ZV9TaW11bGF0aW9uc19WaWV3ID0gVG90YWxseSBTdG9rZWQgU2ltdWxhdGlvbnMKKworIyBNZW51CitfVUlfU1RFTV9Xb3JrQmVuY2hfTWVudSA9IFNURU0KK19VSV9TVEVNX0FjdGlvbl9SdW4gPSBSdW4KK19VSV9TVEVNX0FjdGlvbl9SdW5fVFQgPSBEdWRlLCBzdGFydCB0aGUgc2ltdWxhdGlvbgorX1VJX1NURU1fQWN0aW9uX1N0b3AgPSBTdG9wCitfVUlfU1RFTV9BY3Rpb25fU3RvcF9UVCA9IFdpcGUgb3V0IQorX1VJX1NURU1fQWN0aW9uX1BhdXNlID0gUGF1c2UKK19VSV9TVEVNX0FjdGlvbl9QYXVzZV9UVCA9IENoaWxsCitfVUlfU1RFTV9BY3Rpb25fU3RlcCA9IFN0ZXAgCitfVUlfU1RFTV9BY3Rpb25fU3RlcF9UVCA9IExpa2UsIHNsb29vdyBtb3Rpb24sIHlvdSBrbm93LgorX1VJX1NURU1fQWN0aW9uX1Jlc2V0ID0gUmVzZXQKK19VSV9TVEVNX0FjdGlvbl9SZXNldF9UVCA9IExpa2UsIFJlc2V0LCB5b3Uga25vdy4KKworCisKKworCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkubmwxL3BsdWdpbl9lcy5wcm9wZXJ0aWVzIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLm5sMS9wbHVnaW5fZXMucHJvcGVydGllcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZTM0NjA4Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLm5sMS9wbHVnaW5fZXMucHJvcGVydGllcwpAQCAtMCwwICsxLDU1IEBACisjIFNwYW5pc2gKKyMKKyMgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyMgICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorIyAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisjICAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorIyAgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorIyAgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorIyAgKgorIyAgKiBDb250cmlidXRvcnM6CisjICAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyMgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorIyBUbyBjb2RlIGRldmVsb3BlcjoKKyMgICBEbyBOT1QgY2hhbmdlIHRoZSBwcm9wZXJ0aWVzIGJldHdlZW4gdGhpcyBsaW5lIGFuZCB0aGUKKyMgICAiJSUlIEVORCBPRiBUUkFOU0xBVEVEIFBST1BFUlRJRVMgJSUlIiBsaW5lLgorIyAgIE1ha2UgYSBuZXcgcHJvcGVydHkgbmFtZSwgYXBwZW5kIHRvIHRoZSBlbmQgb2YgdGhlIGZpbGUgYW5kIGNoYW5nZQorIyAgIHRoZSBjb2RlIHRvIHVzZSB0aGUgbmV3IHByb3BlcnR5LgorIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorIyAlJSUgRU5EIE9GIFRSQU5TTEFURUQgUFJPUEVSVElFUyAlJSUKKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworcGx1Z2luTmFtZSA9IFNURU0gVUkKKworIyBDb21tb24gS2V5cworX1VJX0NvbW1vbl9TVEVNID0gU1RFTQorCisjIFNURU0gTmV3IFByb2plY3QgV2l6YXJkCitfVUlfTmV3X1NURU1fUHJvamVjdF9XaXphcmQgPSBQcm95ZWN0byBTVEVNCisKKyMgVmlld3MKK19VSV9HcmFwaHNfVmlldyA9IEdyYWZvcworX1VJX01vZGVsc19WaWV3ID0gTW9kZWxvcworX1VJX1NjZW5hcmlvc19WaWV3ID0gRXNjZW5hcmlvcworX1VJX09ic2VydmVyc19WaWV3ID0gRXNwZWN0YWRvcmVzIChPYnNlcnZlcnMpCitfVUlfU2VxdWVuY2Vyc19WaWV3ID0gU2VjdWVuY2lhZG9yZXMKK19VSV9EZWNvcmF0b3JzX1ZpZXcgPSBNb2RpZmljYWRvcmVzIGRlIEdyYWZvcyAoRGVjb3JhdG9ycykKK19VSV9TVEVNX1Byb2plY3RfRXhwbG9yZXIgPSBFeHBsb3JhZG9yIGRlIFByb3llY3RvcworX1VJX0FjdGl2ZV9TaW11bGF0aW9uc19WaWV3ID0gU2ltdWxhY2lvbmVzIEFjdGl2YXMKKworIyBNZW51CitfVUlfU1RFTV9Xb3JrQmVuY2hfTWVudSA9IFNURU0KK19VSV9TVEVNX0FjdGlvbl9SdW4gPSBDb3JyZXIKK19VSV9TVEVNX0FjdGlvbl9SdW5fVFQgPSBDb3JyZXIgc2ltdWxhY2nzbgorX1VJX1NURU1fQWN0aW9uX1N0b3AgPSBEZXRlbmVyCitfVUlfU1RFTV9BY3Rpb25fU3RvcF9UVCA9IERldGVuZXIgc2ltdWxhY2nzbgorX1VJX1NURU1fQWN0aW9uX1BhdXNlID0gUGF1c2EKK19VSV9TVEVNX0FjdGlvbl9QYXVzZV9UVCA9IFBvbmVyIHNpbXVsYWNp824gZW4gcGF1c2EKK19VSV9TVEVNX0FjdGlvbl9TdGVwID0gQ29ycmVyIHBvciB1bmlkYWQgCitfVUlfU1RFTV9BY3Rpb25fU3RlcF9UVCA9IEF2YW56YXIgc2ltdWxhY2nzbiB1bmEgdW5pZGFkIGRlIHRpZW1wbworX1VJX1NURU1fQWN0aW9uX1Jlc2V0ID0gUmVpbmljaWFyCitfVUlfU1RFTV9BY3Rpb25fUmVzZXRfVFQgPSBSZXN0YXVyYXIgc2ltdWxhY2nzbiBhIHN1IGVzdGFkbyBpbmljaWFsCisKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5ubDEvcGx1Z2luX2hlLnByb3BlcnRpZXMgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkubmwxL3BsdWdpbl9oZS5wcm9wZXJ0aWVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNhNmZiY2EKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkubmwxL3BsdWdpbl9oZS5wcm9wZXJ0aWVzCkBAIC0wLDAgKzEsNTkgQEAKKyMgSGVicmV3CisjCisjIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjICAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyMgICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworIyAgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyMgICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyMgICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyMgICoKKyMgICogQ29udHJpYnV0b3JzOgorIyAgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisjICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyMgVG8gY29kZSBkZXZlbG9wZXI6CisjICAgRG8gTk9UIGNoYW5nZSB0aGUgcHJvcGVydGllcyBiZXR3ZWVuIHRoaXMgbGluZSBhbmQgdGhlCisjICAgIiUlJSBFTkQgT0YgVFJBTlNMQVRFRCBQUk9QRVJUSUVTICUlJSIgbGluZS4KKyMgICBNYWtlIGEgbmV3IHByb3BlcnR5IG5hbWUsIGFwcGVuZCB0byB0aGUgZW5kIG9mIHRoZSBmaWxlIGFuZCBjaGFuZ2UKKyMgICB0aGUgY29kZSB0byB1c2UgdGhlIG5ldyBwcm9wZXJ0eS4KKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyMgJSUlIEVORCBPRiBUUkFOU0xBVEVEIFBST1BFUlRJRVMgJSUlCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK3BsdWdpbk5hbWUgPSBTVEVNIFVJCisKKyMgQ29tbW9uIEtleXMKK19VSV9Db21tb25fU1RFTSA9IFNURU0KKworIyBTVEVNIE5ldyBQcm9qZWN0IFdpemFyZAorX1VJX05ld19TVEVNX1Byb2plY3RfV2l6YXJkID0gU1RFTSBQcm9qZWN0CisKKyMgVmlld3MKK19VSV9HcmFwaHNfVmlldyA9IEdyYXBocworX1VJX01vZGVsc19WaWV3ID0gTW9kZWxzCitfVUlfU2NlbmFyaW9zX1ZpZXcgPSBTY2VuYXJpb3MKK19VSV9PYnNlcnZlcnNfVmlldyA9IE9ic2VydmVycworX1VJX1NlcXVlbmNlcnNfVmlldyA9IFNlcXVlbmNlcnMKK19VSV9EZWNvcmF0b3JzX1ZpZXcgPSBEZWNvcmF0b3JzCitfVUlfU1RFTV9Qcm9qZWN0X0V4cGxvcmVyID0gU1RFTSBQcm9qZWN0IEV4cGxvcmVyCitfVUlfQWN0aXZlX1NpbXVsYXRpb25zX1ZpZXcgPSBBY3RpdmUgU2ltdWxhdGlvbnMKKworIyBNZW51CitfVUlfU1RFTV9Xb3JrQmVuY2hfTWVudSA9IFNURU0KK19VSV9TVEVNX0FjdGlvbl9SdW4gPSBSdW4KK19VSV9TVEVNX0FjdGlvbl9SdW5fVFQgPSBTdGFydCBleGVjdXRpb24gb2YgdGhlIHNpbXVsYXRpb24KK19VSV9TVEVNX0FjdGlvbl9TdG9wID0gU3RvcAorX1VJX1NURU1fQWN0aW9uX1N0b3BfVFQgPSBTdG9wIHRoZSBzaW11bGF0aW9uIGFuZCBtYWtlIGl0IGluYWN0aXZlCitfVUlfU1RFTV9BY3Rpb25fUGF1c2UgPSBQYXVzZQorX1VJX1NURU1fQWN0aW9uX1BhdXNlX1RUID0gUGF1c2UgdGhlIHNpbXVsYXRpb24KK19VSV9TVEVNX0FjdGlvbl9TdGVwID0gU3RlcCAKK19VSV9TVEVNX0FjdGlvbl9TdGVwX1RUID0gQWR2YW5jZSB0aGUgc2ltdWxhdGlvbiBieSBvbmUgdGltZSBzdGVwCitfVUlfU1RFTV9BY3Rpb25fUmVzZXQgPSBSZXNldAorX1VJX1NURU1fQWN0aW9uX1Jlc2V0X1RUID0gUmVzdG9yZSB0aGUgc2ltdWxhdGlvbiB0byBpdHMgc3RhcnRpbmcgc3RhdGUKKworCisKKworCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkubmwxL3BsdWdpbl9rci5wcm9wZXJ0aWVzIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLm5sMS9wbHVnaW5fa3IucHJvcGVydGllcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNDU2YTkzCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLm5sMS9wbHVnaW5fa3IucHJvcGVydGllcwpAQCAtMCwwICsxLDE1IEBACisjLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyMgKiBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisjICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworIyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorIyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisjICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyMgKgorIyAqIENvbnRyaWJ1dG9yczoKKyMgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisjICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworcGx1Z2luTmFtZT1TVEVNIFVJIE5sMSBcdWM4NzBcdWFjMDEKK3Byb3ZpZGVyTmFtZT1FY2xpcHNlLm9yZworCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkubmwxL3BsdWdpbl90YS5wcm9wZXJ0aWVzIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLm5sMS9wbHVnaW5fdGEucHJvcGVydGllcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MmVlNmU2Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLm5sMS9wbHVnaW5fdGEucHJvcGVydGllcwpAQCAtMCwwICsxLDU4IEBACisjIFRhbWlsCisjCisjIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjICAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyMgICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworIyAgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyMgICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyMgICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyMgICoKKyMgICogQ29udHJpYnV0b3JzOgorIyAgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisjICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyMgVG8gY29kZSBkZXZlbG9wZXI6CisjICAgRG8gTk9UIGNoYW5nZSB0aGUgcHJvcGVydGllcyBiZXR3ZWVuIHRoaXMgbGluZSBhbmQgdGhlCisjICAgIiUlJSBFTkQgT0YgVFJBTlNMQVRFRCBQUk9QRVJUSUVTICUlJSIgbGluZS4KKyMgICBNYWtlIGEgbmV3IHByb3BlcnR5IG5hbWUsIGFwcGVuZCB0byB0aGUgZW5kIG9mIHRoZSBmaWxlIGFuZCBjaGFuZ2UKKyMgICB0aGUgY29kZSB0byB1c2UgdGhlIG5ldyBwcm9wZXJ0eS4KKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyMgJSUlIEVORCBPRiBUUkFOU0xBVEVEIFBST1BFUlRJRVMgJSUlCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK3BsdWdpbk5hbWUgPSBTVEVNIFVJCisKKyMgQ29tbW9uIEtleXMKK19VSV9Db21tb25fU1RFTSA9IFNURU2Kp7z1CisKKyMgU1RFTSBOZXcgUHJvamVjdCBXaXphcmQKK19VSV9OZXdfU1RFTV9Qcm9qZWN0X1dpemFyZCA9IIqnvPUgvqLwvPUKKworIyBWaWV3cworX1VJX0dyYXBoc19WaWV3ID0gxajD9MC87bj7CitfVUlfTW9kZWxzX1ZpZXcgPSDBob6horj7CitfVUlfU2NlbmFyaW9zX1ZpZXcgPSCnuKG97bj7CitfVUlfT2JzZXJ2ZXJzX1ZpZXcgPSC48bihyaL0wMX3uPsKK19VSV9TZXF1ZW5jZXJzX1ZpZXcgPSDFoaKouvTAzvLQwMX3uPsKK19VSV9EZWNvcmF0b3JzX1ZpZXcgPSCrxO24oaL0wMX3uPsKK19VSV9TVEVNX1Byb2plY3RfRXhwbG9yZXIgPSCKp7z1IL6i8LwgrMOh9sWh/QorX1VJX0FjdGl2ZV9TaW11bGF0aW9uc19WaWV3ID0grs7A8M77qiCnwKHEorj7CisKKyMgTWVudQorX1VJX1NURU1fV29ya0JlbmNoX01lbnUgPSCKp7z1CitfVUlfU1RFTV9BY3Rpb25fUnVuID0gtfDOCitfVUlfU1RFTV9BY3Rpb25fUnVuX1RUID0gp8ChxKIgprr2xai+IKzD9cCiCitfVUlfU1RFTV9BY3Rpb25fU3RvcCA9IL+i2vLQIAorX1VJX1NURU1fQWN0aW9uX1N0b3BfVFQgPSCnwKHEoiCmuvbFqL4gv6La8r6iIKuoviCmusLEosbsuO4gprr2CitfVUlfU1RFTV9BY3Rpb25fUGF1c2UgPSC+ocG+7yCmuvYKK19VSV9TVEVNX0FjdGlvbl9QYXVzZV9UVCA9IKfAocSiIKa69sWoviC+ocG+7yCmuvYKK19VSV9TVEVNX0FjdGlvbl9TdGVwID0gq87yviDAygorX1VJX1NURU1fQWN0aW9uX1N0ZXBfVFQgPSCnwKHEoiCmuvbFqL4gtJAgwMog0/2nyfzaCitfVUlfU1RFTV9BY3Rpb25fUmVzZXQgPSDSvqK+obggq6jBCitfVUlfU1RFTV9BY3Rpb25fUmVzZXRfVFQgPSCnwKHEoqjCIKzD9cAgv6KoxOzMINLQ9MCiCisKKworCisKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5ubDEvcGx1Z2luX3poLnByb3BlcnRpZXMgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkubmwxL3BsdWdpbl96aC5wcm9wZXJ0aWVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNkMGQ3OGIKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkubmwxL3BsdWdpbl96aC5wcm9wZXJ0aWVzCkBAIC0wLDAgKzEsMTUgQEAKKyMvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIyAqIENvcHlyaWdodCAoYykgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyMgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisjICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisjICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyMgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorIyAqCisjICogQ29udHJpYnV0b3JzOgorIyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCitwbHVnaW5OYW1lPVNURU0gVUkgTkwxXHU3MjQ3XHU2YmI1Citwcm92aWRlck5hbWU9RWNsaXBzZS5vcmcKKwpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLm5sMS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS92aWV3cy9tYXAvbWVzc2FnZXNfZW5fVVNfQ0EucHJvcGVydGllcyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5ubDEvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvdmlld3MvbWFwL21lc3NhZ2VzX2VuX1VTX0NBLnByb3BlcnRpZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzE0YmNiOAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5ubDEvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvdmlld3MvbWFwL21lc3NhZ2VzX2VuX1VTX0NBLnByb3BlcnRpZXMKQEAgLTAsMCArMSw0OCBAQAorIyBtZXNzYWdlc19lbl9VU19DQS5wcm9wZXJ0aWVzCisjIENhbGlmb3JuaWFuCisjIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorIyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyMgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyMgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorIyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisjICoKKyMgKiBDb250cmlidXRvcnM6CisjICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorIyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitDb21tb24uQUlUT0ZGPUFpdG9mZgorQ29tbW9uLlNBTlNPTl9GTEFNU1RFRUQ9U2Fuc29uLUZsYW1zdGVlZAorQ29tbW9uLkNob29zZV9Qcm9qZWN0aW9uPTwgQ2hvb3NlIFByb2plY3Rpb24gPgorCisjIFN0ZW0gUG9seWdvbgorIyBOb3RoaW5nLCBhbGwgY29tbW9uCisKKyMgSW50ZXJuYWwgTWFwIFZpZXcKK0lNVmlldy5DaG9vc2VfUHJvcGVydHk9PCBDaG9vc2UgUHJvcGVydHkgPgorSU1WaWV3LkNob29zZV9EZWNvcmF0b3I9PCBDaG9vc2UgRGVjb3JhdG9yID4KK0lNVmlldy5HYWluX0ZhY3Rvcj08IEdhaW4gRmFjdG9yID4gCisKK0lNVmlldy5Qb2x5Z29uX0JvcmRlcnM9RHJhdyBQb2x5Z29ucyBCb3JkZXJzCitJTVZpZXcuUG9seWdvbl9DZW50ZXJzPUNvbm5lY3QgUG9seWdvbnMgQ2VudGVycworCitJTVZpZXcuTG9ncml0aG1pY19TY2FsaW5nPUxvZ2FyaXRobWljIFNjYWxpbmcKK0lNVmlldy5PTkVfVEhPVVNBTkQ9MC4wMDEKK0lNVmlldy5PTkVfSFVORFJFRFRIPTAuMDEKK0lNVmlldy5PTkVfVEVOVEg9MC4xCitJTVZpZXcuT05FPTEKK0lNVmlldy5URU49MTAKK0lNVmlldy5PTkVfSFVORFJFRD0xMDAKK0lNVmlldy5PTkVfVEhPVVNBTkQ9MTAwMAorCitJTVZpZXcuRkdDb2xvcj1Gb3JlZ3JvdW5kIENvbG9yCitJTVZpZXcuQkdDb2xvcj1CYWNrZ3JvdW5kIENvbG9yCisKK0lNVmlldy5Qcm9Qcm9wPVByb2plY3Rpb24gUHJvcGVydGllcworSU1WaWV3LkdQcm9wPUdlbmVyYWwgUHJvcGVydGllcworSU1WaWV3LlBQcm9wPVBvbHlnb25zIFByb3BlcnRpZXMKK0lNVmlldy5NUHJvcD1Nb2RlbCBQcm9wZXJ0aWVzCisKKworSU1WaWV3LkNlbnRlcl9NYXA9Q2VudGVyIE1hcAorCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkubmwxL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3ZpZXdzL21hcC9tZXNzYWdlc19lcy5wcm9wZXJ0aWVzIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLm5sMS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS92aWV3cy9tYXAvbWVzc2FnZXNfZXMucHJvcGVydGllcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMmFjN2Q0Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLm5sMS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS92aWV3cy9tYXAvbWVzc2FnZXNfZXMucHJvcGVydGllcwpAQCAtMCwwICsxLDQ4IEBACisjIG1lc3NhZ2VzX2VzLnByb3BlcnRpZXMKKyMKKyMgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyMgKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisjICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworIyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorIyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisjICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyMgKgorIyAqIENvbnRyaWJ1dG9yczoKKyMgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisjICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK0NvbW1vbi5BSVRPRkY9QWl0b2ZmCitDb21tb24uU0FOU09OX0ZMQU1TVEVFRD1TYW5zb24tRmxhbXN0ZWVkCitDb21tb24uQ2hvb3NlX1Byb2plY3Rpb249PCBTZWxlY2Npb25hciBN6XRvZG8gZGUgUHJveWVjY2nzbiA+CisKKyMgU3RlbSBQb2x5Z29uCisjIE5vdGhpbmcsIGFsbCBjb21tb24KKworIyBJbnRlcm5hbCBNYXAgVmlldworSU1WaWV3LkNob29zZV9Qcm9wZXJ0eT08IFNlbGVjY2lvbmFyIEF0cmlidXRvID4KK0lNVmlldy5DaG9vc2VfRGVjb3JhdG9yPTwgU2VsZWNjaW9uYXIgRGVjb3JhZG9yID4KK0lNVmlldy5HYWluX0ZhY3Rvcj08IEZhY3RvciBkZSBHYW5hbmNpYSA+IAorCitJTVZpZXcuUG9seWdvbl9Cb3JkZXJzPU1vc3RyYXIgQm9yZGVzIGRlIFBvbO1nb25vcworSU1WaWV3LlBvbHlnb25fQ2VudGVycz1Db25lY3RhciBDZW50cm9zIGRlIFBvbO1nb25vcworCitJTVZpZXcuTG9ncml0aG1pY19TY2FsaW5nPUVzY2FsYSBMb2dhcu10bWljYQorSU1WaWV3Lk9ORV9USE9VU0FORD0wLjAwMQorSU1WaWV3Lk9ORV9IVU5EUkVEVEg9MC4wMQorSU1WaWV3Lk9ORV9URU5USD0wLjEKK0lNVmlldy5PTkU9MQorSU1WaWV3LlRFTj0xMAorSU1WaWV3Lk9ORV9IVU5EUkVEPTEwMAorSU1WaWV3Lk9ORV9USE9VU0FORD0xMDAwCisKK0lNVmlldy5GR0NvbG9yPUNvbG9yIGRlIFByaW1lciBQbGFubworSU1WaWV3LkJHQ29sb3I9Q29sb3IgZGUgRm9uZG8KKworSU1WaWV3LlByb1Byb3A9QXRyaWJ1dG9zIGRlIFByb3llY2Np824KK0lNVmlldy5HUHJvcD1BdHJpYnV0b3MgR2VuZXJhbGVzCitJTVZpZXcuUFByb3A9QXRyaWJ1dG9zIGRlIFBvbO1nb25vcworSU1WaWV3Lk1Qcm9wPUF0cmlidXRvcyBkZSBNb2RlbG9zCisKKworSU1WaWV3LkNlbnRlcl9NYXA9TW9zdHJhciBDZW50cm8KKwpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLm5sMS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS92aWV3cy9tYXAvbWVzc2FnZXNfaGUucHJvcGVydGllcyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5ubDEvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvdmlld3MvbWFwL21lc3NhZ2VzX2hlLnByb3BlcnRpZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDEwNTI1MQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5ubDEvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvdmlld3MvbWFwL21lc3NhZ2VzX2hlLnByb3BlcnRpZXMKQEAgLTAsMCArMSw0OCBAQAorIyBtZXNzYWdlc19oZS5wcm9wZXJ0aWVzCisjCisjIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorIyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyMgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyMgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorIyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisjICoKKyMgKiBDb250cmlidXRvcnM6CisjICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorIyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitDb21tb24uQUlUT0ZGPUFpdG9mZgorQ29tbW9uLlNBTlNPTl9GTEFNU1RFRUQ9U2Fuc29uLUZsYW1zdGVlZAorQ29tbW9uLkNob29zZV9Qcm9qZWN0aW9uPTwgQ2hvb3NlIFByb2plY3Rpb24gPgorCisjIFN0ZW0gUG9seWdvbgorIyBOb3RoaW5nLCBhbGwgY29tbW9uCisKKyMgSW50ZXJuYWwgTWFwIFZpZXcKK0lNVmlldy5DaG9vc2VfUHJvcGVydHk9PCBDaG9vc2UgUHJvcGVydHkgPgorSU1WaWV3LkNob29zZV9EZWNvcmF0b3I9PCBDaG9vc2UgRGVjb3JhdG9yID4KK0lNVmlldy5HYWluX0ZhY3Rvcj08IEdhaW4gRmFjdG9yID4gCisKK0lNVmlldy5Qb2x5Z29uX0JvcmRlcnM9RHJhdyBQb2x5Z29ucyBCb3JkZXJzCitJTVZpZXcuUG9seWdvbl9DZW50ZXJzPUNvbm5lY3QgUG9seWdvbnMgQ2VudGVycworCitJTVZpZXcuTG9ncml0aG1pY19TY2FsaW5nPUxvZ2FyaXRobWljIFNjYWxpbmcKK0lNVmlldy5PTkVfVEhPVVNBTkQ9MC4wMDEKK0lNVmlldy5PTkVfSFVORFJFRFRIPTAuMDEKK0lNVmlldy5PTkVfVEVOVEg9MC4xCitJTVZpZXcuT05FPTEKK0lNVmlldy5URU49MTAKK0lNVmlldy5PTkVfSFVORFJFRD0xMDAKK0lNVmlldy5PTkVfVEhPVVNBTkQ9MTAwMAorCitJTVZpZXcuRkdDb2xvcj1Gb3JlZ3JvdW5kIENvbG9yCitJTVZpZXcuQkdDb2xvcj1CYWNrZ3JvdW5kIENvbG9yCisKK0lNVmlldy5Qcm9Qcm9wPVByb2plY3Rpb24gUHJvcGVydGllcworSU1WaWV3LkdQcm9wPUdlbmVyYWwgUHJvcGVydGllcworSU1WaWV3LlBQcm9wPVBvbHlnb25zIFByb3BlcnRpZXMKK0lNVmlldy5NUHJvcD1Nb2RlbCBQcm9wZXJ0aWVzCisKKworSU1WaWV3LkNlbnRlcl9NYXA9Q2VudGVyIE1hcAorCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkubmwxL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3ZpZXdzL21hcC9tZXNzYWdlc190YS5wcm9wZXJ0aWVzIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLm5sMS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS92aWV3cy9tYXAvbWVzc2FnZXNfdGEucHJvcGVydGllcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MjYxMGJjCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLm5sMS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS92aWV3cy9tYXAvbWVzc2FnZXNfdGEucHJvcGVydGllcwpAQCAtMCwwICsxLDQ4IEBACisjIG1lc3NhZ2VzX3RhLnByb3BlcnRpZXMKKyMKKyMgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyMgKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisjICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworIyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorIyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisjICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyMgKgorIyAqIENvbnRyaWJ1dG9yczoKKyMgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisjICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK0NvbW1vbi5BSVRPRkY9QWl0b2ZmCitDb21tb24uU0FOU09OX0ZMQU1TVEVFRD1TYW5zb24tRmxhbXN0ZWVkCitDb21tb24uQ2hvb3NlX1Byb2plY3Rpb249PCBDaG9vc2UgUHJvamVjdGlvbiA+CisKKyMgU3RlbSBQb2x5Z29uCisjIE5vdGhpbmcsIGFsbCBjb21tb24KKworIyBJbnRlcm5hbCBNYXAgVmlldworSU1WaWV3LkNob29zZV9Qcm9wZXJ0eT08IENob29zZSBQcm9wZXJ0eSA+CitJTVZpZXcuQ2hvb3NlX0RlY29yYXRvcj08IENob29zZSBEZWNvcmF0b3IgPgorSU1WaWV3LkdhaW5fRmFjdG9yPTwgR2FpbiBGYWN0b3IgPiAKKworSU1WaWV3LlBvbHlnb25fQm9yZGVycz1EcmF3IFBvbHlnb25zIEJvcmRlcnMKK0lNVmlldy5Qb2x5Z29uX0NlbnRlcnM9Q29ubmVjdCBQb2x5Z29ucyBDZW50ZXJzCisKK0lNVmlldy5Mb2dyaXRobWljX1NjYWxpbmc9TG9nYXJpdGhtaWMgU2NhbGluZworSU1WaWV3Lk9ORV9USE9VU0FORD0wLjAwMQorSU1WaWV3Lk9ORV9IVU5EUkVEVEg9MC4wMQorSU1WaWV3Lk9ORV9URU5USD0wLjEKK0lNVmlldy5PTkU9MQorSU1WaWV3LlRFTj0xMAorSU1WaWV3Lk9ORV9IVU5EUkVEPTEwMAorSU1WaWV3Lk9ORV9USE9VU0FORD0xMDAwCisKK0lNVmlldy5GR0NvbG9yPUZvcmVncm91bmQgQ29sb3IKK0lNVmlldy5CR0NvbG9yPUJhY2tncm91bmQgQ29sb3IKKworSU1WaWV3LlByb1Byb3A9UHJvamVjdGlvbiBQcm9wZXJ0aWVzCitJTVZpZXcuR1Byb3A9R2VuZXJhbCBQcm9wZXJ0aWVzCitJTVZpZXcuUFByb3A9UG9seWdvbnMgUHJvcGVydGllcworSU1WaWV3Lk1Qcm9wPU1vZGVsIFByb3BlcnRpZXMKKworCitJTVZpZXcuQ2VudGVyX01hcD1DZW50ZXIgTWFwCisKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5ubDEvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvdmlld3MvbWFwL21lc3NhZ2VzX3poLnByb3BlcnRpZXMgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkubmwxL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3ZpZXdzL21hcC9tZXNzYWdlc196aC5wcm9wZXJ0aWVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU3ZTNjMGYKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkubmwxL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3ZpZXdzL21hcC9tZXNzYWdlc196aC5wcm9wZXJ0aWVzCkBAIC0wLDAgKzEsNDggQEAKKyMgbWVzc2FnZXNfemgucHJvcGVydGllcworIworIyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIyAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyMgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisjICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisjICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyMgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorIyAqCisjICogQ29udHJpYnV0b3JzOgorIyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworQ29tbW9uLkFJVE9GRj1BaXRvZmYKK0NvbW1vbi5TQU5TT05fRkxBTVNURUVEPVNhbnNvbi1GbGFtc3RlZWQKK0NvbW1vbi5DaG9vc2VfUHJvamVjdGlvbj08IENob29zZSBQcm9qZWN0aW9uID4KKworIyBTdGVtIFBvbHlnb24KKyMgTm90aGluZywgYWxsIGNvbW1vbgorCisjIEludGVybmFsIE1hcCBWaWV3CitJTVZpZXcuQ2hvb3NlX1Byb3BlcnR5PTwgQ2hvb3NlIFByb3BlcnR5ID4KK0lNVmlldy5DaG9vc2VfRGVjb3JhdG9yPTwgQ2hvb3NlIERlY29yYXRvciA+CitJTVZpZXcuR2Fpbl9GYWN0b3I9PCBHYWluIEZhY3RvciA+IAorCitJTVZpZXcuUG9seWdvbl9Cb3JkZXJzPURyYXcgUG9seWdvbnMgQm9yZGVycworSU1WaWV3LlBvbHlnb25fQ2VudGVycz1Db25uZWN0IFBvbHlnb25zIENlbnRlcnMKKworSU1WaWV3LkxvZ3JpdGhtaWNfU2NhbGluZz1Mb2dhcml0aG1pYyBTY2FsaW5nCitJTVZpZXcuT05FX1RIT1VTQU5EPTAuMDAxCitJTVZpZXcuT05FX0hVTkRSRURUSD0wLjAxCitJTVZpZXcuT05FX1RFTlRIPTAuMQorSU1WaWV3Lk9ORT0xCitJTVZpZXcuVEVOPTEwCitJTVZpZXcuT05FX0hVTkRSRUQ9MTAwCitJTVZpZXcuT05FX1RIT1VTQU5EPTEwMDAKKworSU1WaWV3LkZHQ29sb3I9Rm9yZWdyb3VuZCBDb2xvcgorSU1WaWV3LkJHQ29sb3I9QmFja2dyb3VuZCBDb2xvcgorCitJTVZpZXcuUHJvUHJvcD1Qcm9qZWN0aW9uIFByb3BlcnRpZXMKK0lNVmlldy5HUHJvcD1HZW5lcmFsIFByb3BlcnRpZXMKK0lNVmlldy5QUHJvcD1Qb2x5Z29ucyBQcm9wZXJ0aWVzCitJTVZpZXcuTVByb3A9TW9kZWwgUHJvcGVydGllcworCisKK0lNVmlldy5DZW50ZXJfTWFwPUNlbnRlciBNYXAKKwpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLm5sMS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS92aWV3cy9tZXNzYWdlc19lbl9VU19DQS5wcm9wZXJ0aWVzIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLm5sMS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS92aWV3cy9tZXNzYWdlc19lbl9VU19DQS5wcm9wZXJ0aWVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM3MjYxOTQKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkubmwxL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3ZpZXdzL21lc3NhZ2VzX2VuX1VTX0NBLnByb3BlcnRpZXMKQEAgLTAsMCArMSwyMyBAQAorIyBtZXNzYWdlc19lbl9VU19DQS5wcm9wZXJ0aWVzCisjIENhbGlmb3JuaWFuIEVuZ2xpc2gKKyMvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIyAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyMgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisjICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisjICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyMgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorIyAqCisjICogQ29udHJpYnV0b3JzOgorIyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworTlNURU1Qcm9XaXouY3JlYXRpbmdfZGlyZWN0b3JpZXMgPSBDcmVhdGluZyBwcm9qZWN0IGRpcmVjdG9yaWVzCitOU1RFTVByb1dpei5jcmVhdGluZ19wcm9qZWN0ID0gQ3JlYXRpbmcgbmV3IFNURU0gcHJvamVjdAorTlNURU1Qcm9XaXoucGFnZV90aXRsZSA9IFNwZWNpZnkgdGhlIG5hbWUgb2YgdGhlIG5ldyBTVEVNIFByb2plY3QKK05TVEVNUHJvV2l6LnRpdGxlID0gQ3JlYXRlIGEgU1RFTSBwcm9qZWN0CitOU1RFTVByb1dpei5wYWdlX2Rlc2NyaXB0aW9uID0gQ3JlYXRlIGEgbmV3IFNURU0gcHJvamVjdCBpbiB0aGUgd29ya3NwYWNlIG9yIGluIGFuIGV4dGVybmFsIGxvY2F0aW9uLgorCitOU1RFTVByb1dpei5ncmFwaF9mb2xkZXIgPSBHcmFwaHMKK05TVEVNUHJvV2l6Lm1vZGVsX2ZvbGRlciA9IE1vZGVscworTlNURU1Qcm9XaXouc2NlbmFyaW9fZm9sZGVyID0gU2NlbmFyaW9zCitOU1RFTVByb1dpei5kZWNvcmF0b3JfZm9sZGVyID0gRGVjb3JhdG9ycwpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLm5sMS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS92aWV3cy9tZXNzYWdlc19lcy5wcm9wZXJ0aWVzIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLm5sMS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS92aWV3cy9tZXNzYWdlc19lcy5wcm9wZXJ0aWVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJjZDFkZDcKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkubmwxL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3ZpZXdzL21lc3NhZ2VzX2VzLnByb3BlcnRpZXMKQEAgLTAsMCArMSwyMyBAQAorIyBtZXNzYWdlc19lcy5wcm9wZXJ0aWVzCisjIFNwYW5pc2gKKyMvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIyAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyMgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisjICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisjICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyMgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorIyAqCisjICogQ29udHJpYnV0b3JzOgorIyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworTlNURU1Qcm9XaXouY3JlYXRpbmdfZGlyZWN0b3JpZXMgPSBDb21vIGNyZWFyIGRpcmVjdG9yaW9zIGRlIHByb3llY3RvCitOU1RFTVByb1dpei5jcmVhdGluZ19wcm9qZWN0ID0gQ29tbyBjcmVhciB1biBudWV2byBwcm95ZWN0bworTlNURU1Qcm9XaXoucGFnZV90aXRsZSA9IE5vbWJyZSBkZWwgcHJveWVjdG8KK05TVEVNUHJvV2l6LnRpdGxlID0gQ3JlYXIgdW4gbnVldm8gcHJveWVjdG8KK05TVEVNUHJvV2l6LnBhZ2VfZGVzY3JpcHRpb24gPSBDcmVhciB1biBwcm95ZWN0byBudWV2byBlbiBlbCDhcmVhIGRlIHRyYWJham8gbyBlbiBvdHJhIHViaWNhY2nzbiAKKworTlNURU1Qcm9XaXouZ3JhcGhfZm9sZGVyID0gR3JhZm9zCitOU1RFTVByb1dpei5tb2RlbF9mb2xkZXIgPSBNb2RlbG9zCitOU1RFTVByb1dpei5zY2VuYXJpb19mb2xkZXIgPSBFc2NlbmFyaW9zCitOU1RFTVByb1dpei5kZWNvcmF0b3JfZm9sZGVyID0gTW9kaWZpY2Fkb3JlcyBkZSBHcmFmb3MKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkubmwxL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3ZpZXdzL21lc3NhZ2VzX2hlLnByb3BlcnRpZXMgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkubmwxL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3ZpZXdzL21lc3NhZ2VzX2hlLnByb3BlcnRpZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTA0MzljZQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5ubDEvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvdmlld3MvbWVzc2FnZXNfaGUucHJvcGVydGllcwpAQCAtMCwwICsxLDIzIEBACisjIG1lc3NhZ2VzX2hlLnByb3BlcnRpZXMKKyMgSGVicmV3CisjLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyMgKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisjICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworIyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorIyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisjICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyMgKgorIyAqIENvbnRyaWJ1dG9yczoKKyMgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisjICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK05TVEVNUHJvV2l6LmNyZWF0aW5nX2RpcmVjdG9yaWVzID0gQ3JlYXRpbmcgcHJvamVjdCBkaXJlY3RvcmllcworTlNURU1Qcm9XaXouY3JlYXRpbmdfcHJvamVjdCA9IENyZWF0aW5nIG5ldyBTVEVNIHByb2plY3QKK05TVEVNUHJvV2l6LnBhZ2VfdGl0bGUgPSBTcGVjaWZ5IHRoZSBuYW1lIG9mIHRoZSBuZXcgU1RFTSBQcm9qZWN0CitOU1RFTVByb1dpei50aXRsZSA9IENyZWF0ZSBhIFNURU0gcHJvamVjdAorTlNURU1Qcm9XaXoucGFnZV9kZXNjcmlwdGlvbiA9IENyZWF0ZSBhIG5ldyBTVEVNIHByb2plY3QgaW4gdGhlIHdvcmtzcGFjZSBvciBpbiBhbiBleHRlcm5hbCBsb2NhdGlvbi4KKworTlNURU1Qcm9XaXouZ3JhcGhfZm9sZGVyID0gR3JhcGhzCitOU1RFTVByb1dpei5tb2RlbF9mb2xkZXIgPSBNb2RlbHMKK05TVEVNUHJvV2l6LnNjZW5hcmlvX2ZvbGRlciA9IFNjZW5hcmlvcworTlNURU1Qcm9XaXouZGVjb3JhdG9yX2ZvbGRlciA9IERlY29yYXRvcnMKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5ubDEvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvdmlld3MvbWVzc2FnZXNfdGEucHJvcGVydGllcyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5ubDEvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvdmlld3MvbWVzc2FnZXNfdGEucHJvcGVydGllcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYzcxOThiCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLm5sMS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS92aWV3cy9tZXNzYWdlc190YS5wcm9wZXJ0aWVzCkBAIC0wLDAgKzEsMjMgQEAKKyMgbWVzc2FnZXNfdGEucHJvcGVydGllcworIyBUYW1pbAorIy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorIyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyMgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyMgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorIyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisjICoKKyMgKiBDb250cmlidXRvcnM6CisjICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorIyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitOU1RFTVByb1dpei5jcmVhdGluZ19kaXJlY3RvcmllcyA9IENyZWF0aW5nIHByb2plY3QgZGlyZWN0b3JpZXMKK05TVEVNUHJvV2l6LmNyZWF0aW5nX3Byb2plY3QgPSBDcmVhdGluZyBuZXcgU1RFTSBwcm9qZWN0CitOU1RFTVByb1dpei5wYWdlX3RpdGxlID0gU3BlY2lmeSB0aGUgbmFtZSBvZiB0aGUgbmV3IFNURU0gUHJvamVjdAorTlNURU1Qcm9XaXoudGl0bGUgPSBDcmVhdGUgYSBTVEVNIHByb2plY3QKK05TVEVNUHJvV2l6LnBhZ2VfZGVzY3JpcHRpb24gPSBDcmVhdGUgYSBuZXcgU1RFTSBwcm9qZWN0IGluIHRoZSB3b3Jrc3BhY2Ugb3IgaW4gYW4gZXh0ZXJuYWwgbG9jYXRpb24uCisKK05TVEVNUHJvV2l6LmdyYXBoX2ZvbGRlciA9IEdyYXBocworTlNURU1Qcm9XaXoubW9kZWxfZm9sZGVyID0gTW9kZWxzCitOU1RFTVByb1dpei5zY2VuYXJpb19mb2xkZXIgPSBTY2VuYXJpb3MKK05TVEVNUHJvV2l6LmRlY29yYXRvcl9mb2xkZXIgPSBEZWNvcmF0b3JzCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkubmwxL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3ZpZXdzL21lc3NhZ2VzX3poLnByb3BlcnRpZXMgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkubmwxL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3ZpZXdzL21lc3NhZ2VzX3poLnByb3BlcnRpZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGFjYzU1NAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5ubDEvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvdmlld3MvbWVzc2FnZXNfemgucHJvcGVydGllcwpAQCAtMCwwICsxLDIzIEBACisjIG1lc3NhZ2VzLnByb3BlcnRpZXMKKyMgQ2hpbmVzZQorIy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorIyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyMgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyMgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorIyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisjICoKKyMgKiBDb250cmlidXRvcnM6CisjICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorIyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitOU1RFTVByb1dpei5jcmVhdGluZ19kaXJlY3RvcmllcyA9IENyZWF0aW5nIHByb2plY3QgZGlyZWN0b3JpZXMKK05TVEVNUHJvV2l6LmNyZWF0aW5nX3Byb2plY3QgPSBDcmVhdGluZyBuZXcgU1RFTSBwcm9qZWN0CitOU1RFTVByb1dpei5wYWdlX3RpdGxlID0gU3BlY2lmeSB0aGUgbmFtZSBvZiB0aGUgbmV3IFNURU0gUHJvamVjdAorTlNURU1Qcm9XaXoudGl0bGUgPSBDcmVhdGUgYSBTVEVNIHByb2plY3QKK05TVEVNUHJvV2l6LnBhZ2VfZGVzY3JpcHRpb24gPSBDcmVhdGUgYSBuZXcgU1RFTSBwcm9qZWN0IGluIHRoZSB3b3Jrc3BhY2Ugb3IgaW4gYW4gZXh0ZXJuYWwgbG9jYXRpb24uCisKK05TVEVNUHJvV2l6LmdyYXBoX2ZvbGRlciA9IEdyYXBocworTlNURU1Qcm9XaXoubW9kZWxfZm9sZGVyID0gTW9kZWxzCitOU1RFTVByb1dpei5zY2VuYXJpb19mb2xkZXIgPSBTY2VuYXJpb3MKK05TVEVNUHJvV2l6LmRlY29yYXRvcl9mb2xkZXIgPSBEZWNvcmF0b3JzCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkubmwxL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3dpemFyZHMvbWVzc2FnZXNfZW5fQ0EucHJvcGVydGllcyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5ubDEvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvd2l6YXJkcy9tZXNzYWdlc19lbl9DQS5wcm9wZXJ0aWVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIxM2FkNDYKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkubmwxL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3dpemFyZHMvbWVzc2FnZXNfZW5fQ0EucHJvcGVydGllcwpAQCAtMCwwICsxLDI0IEBACisjIFdpemFyZE1lc3NhZ2VzX2VuX0NBLnByb3BlcnRpZXMKKyMgQ2FuYWRpYW4gRW5nbGlzaAorIy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorIyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyMgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyMgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorIyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisjICoKKyMgKiBDb250cmlidXRvcnM6CisjICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorIyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitOU1RFTVByb1dpei5jcmVhdGluZ19kaXJlY3RvcmllcyA9IENyZWF0aW5nIHByb2plY3QgZGlyZWN0b3JpZXMKK05TVEVNUHJvV2l6LmNyZWF0aW5nX3Byb2plY3QgPSBDcmVhdGluZyBuZXcgU1RFTSBwcm9qZWN0CitOU1RFTVByb1dpei5wYWdlX3RpdGxlID0gU3BlY2lmeSB0aGUgbmFtZSBvZiB0aGUgbmV3IFNURU0gUHJvamVjdAorTlNURU1Qcm9XaXoudGl0bGUgPSBDcmVhdGUgYSBTVEVNIHByb2plY3QKK05TVEVNUHJvV2l6LnBhZ2VfZGVzY3JpcHRpb24gPSBDcmVhdGUgYSBuZXcgU1RFTSBwcm9qZWN0IGluIHRoZSB3b3Jrc3BhY2Ugb3IgaW4gYW4gZXh0ZXJuYWwgbG9jYXRpb24uCisKK05TVEVNUHJvV2l6LmdyYXBoX2ZvbGRlciA9IEdyYXBocworTlNURU1Qcm9XaXoubW9kZWxfZm9sZGVyID0gTW9kZWxzCitOU1RFTVByb1dpei5zY2VuYXJpb19mb2xkZXIgPSBTY2VuYXJpb3MKK05TVEVNUHJvV2l6LmRlY29yYXRvcl9mb2xkZXIgPSBEZWNvcmF0b3JzCisKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5ubDEvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvd2l6YXJkcy9tZXNzYWdlc19lbl9VU19DQS5wcm9wZXJ0aWVzIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLm5sMS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS93aXphcmRzL21lc3NhZ2VzX2VuX1VTX0NBLnByb3BlcnRpZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDA3OTA1YgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5ubDEvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvd2l6YXJkcy9tZXNzYWdlc19lbl9VU19DQS5wcm9wZXJ0aWVzCkBAIC0wLDAgKzEsMjMgQEAKKyMgV2l6YXJkTWVzc2FnZXNfZW5fVVNfQ0EucHJvcGVydGllcworIyBDYWxpZm9ybmlhbgorIy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorIyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyMgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyMgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorIyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisjICoKKyMgKiBDb250cmlidXRvcnM6CisjICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorIyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitOU1RFTVByb1dpei5jcmVhdGluZ19kaXJlY3RvcmllcyA9IENyZWF0aW5nIHNvbWUga25hcmxleSBwcm9qZWN0IGRpcmVjdG9yaWVzLCBEdWRlIQorTlNURU1Qcm9XaXouY3JlYXRpbmdfcHJvamVjdCA9IENyZWF0aW5nIGEgdG90YWxseSBhd2Vzb21lIFNURU0gcHJvamVjdCwgRHVkZSEKK05TVEVNUHJvV2l6LnBhZ2VfdGl0bGUgPSBMaWtlLCB3aGF0J3MgdGhlIG5hbWUgb2YgdGhlIG5ldyBTVEVNIFByb2plY3QKK05TVEVNUHJvV2l6LnRpdGxlID0gQ3JlYXRlIG9uZSB0b3RhbGx5IGF3ZXNvbWUgU1RFTSBwcm9qZWN0IQorTlNURU1Qcm9XaXoucGFnZV9kZXNjcmlwdGlvbiA9IENyZWF0ZSBhIG5ldyBTVEVNIHByb2plY3QgaW4gdGhlIHdvcmtzcGFjZSBvciBpbiBhbiBleHRlcm5hbCBsb2NhdGlvbi4KKworTlNURU1Qcm9XaXouZ3JhcGhfZm9sZGVyID0gR3JhcGhzCitOU1RFTVByb1dpei5tb2RlbF9mb2xkZXIgPSBNb2RlbHMKK05TVEVNUHJvV2l6LnNjZW5hcmlvX2ZvbGRlciA9IFNjZW5hcmlvcworTlNURU1Qcm9XaXouZGVjb3JhdG9yX2ZvbGRlciA9IERlY29yYXRvcnMKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5ubDEvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvd2l6YXJkcy9tZXNzYWdlc19lcy5wcm9wZXJ0aWVzIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLm5sMS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS93aXphcmRzL21lc3NhZ2VzX2VzLnByb3BlcnRpZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzM3YWVlNwotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5ubDEvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvd2l6YXJkcy9tZXNzYWdlc19lcy5wcm9wZXJ0aWVzCkBAIC0wLDAgKzEsMjQgQEAKKyMgV2l6YXJkTWVzc2FnZXNfZXMucHJvcGVydGllcworIyBTcGFuaXNoCisjLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyMgKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisjICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworIyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorIyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisjICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyMgKgorIyAqIENvbnRyaWJ1dG9yczoKKyMgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisjICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK05TVEVNUHJvV2l6LmNyZWF0aW5nX2RpcmVjdG9yaWVzID0gQ29tbyBjcmVhciBkaXJlY3RvcmlvcyBkZSBwcm95ZWN0bworTlNURU1Qcm9XaXouY3JlYXRpbmdfcHJvamVjdCA9IENvbW8gY3JlYXIgdW4gbnVldm8gcHJveWVjdG8KK05TVEVNUHJvV2l6LnBhZ2VfdGl0bGUgPSBOb21icmUgZGVsIHByb3llY3RvCitOU1RFTVByb1dpei50aXRsZSA9IENyZWFyIHVuIG51ZXZvIHByb3llY3RvCitOU1RFTVByb1dpei5wYWdlX2Rlc2NyaXB0aW9uID0gQ3JlYXIgdW4gcHJveWVjdG8gbnVldm8gZW4gZWwg4XJlYSBkZSB0cmFiYWpvIG8gZW4gb3RyYSB1YmljYWNp824KKworTlNURU1Qcm9XaXouZ3JhcGhfZm9sZGVyID0gR3JhZm9zCitOU1RFTVByb1dpei5tb2RlbF9mb2xkZXIgPSBNb2RlbG9zCitOU1RFTVByb1dpei5zY2VuYXJpb19mb2xkZXIgPSBFc2NlbmFyaW9zCitOU1RFTVByb1dpei5kZWNvcmF0b3JfZm9sZGVyID0gTW9kaWZpY2Fkb3JlcyBkZSBHcmFmb3MKKwpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLm5sMS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS93aXphcmRzL21lc3NhZ2VzX2hlLnByb3BlcnRpZXMgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkubmwxL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3dpemFyZHMvbWVzc2FnZXNfaGUucHJvcGVydGllcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZDVmZjMxCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLm5sMS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS93aXphcmRzL21lc3NhZ2VzX2hlLnByb3BlcnRpZXMKQEAgLTAsMCArMSwyMyBAQAorIyBXaXphcmRNZXNzYWdlc19oZS5wcm9wZXJ0aWVzCisjIEhlYnJldworIy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorIyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyMgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyMgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorIyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisjICoKKyMgKiBDb250cmlidXRvcnM6CisjICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorIyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitOU1RFTVByb1dpei5jcmVhdGluZ19kaXJlY3RvcmllcyA9IENyZWF0aW5nIHByb2plY3QgZGlyZWN0b3JpZXMKK05TVEVNUHJvV2l6LmNyZWF0aW5nX3Byb2plY3QgPSBDcmVhdGluZyBuZXcgU1RFTSBwcm9qZWN0CitOU1RFTVByb1dpei5wYWdlX3RpdGxlID0gU3BlY2lmeSB0aGUgbmFtZSBvZiB0aGUgbmV3IFNURU0gUHJvamVjdAorTlNURU1Qcm9XaXoudGl0bGUgPSBDcmVhdGUgYSBTVEVNIHByb2plY3QKK05TVEVNUHJvV2l6LnBhZ2VfZGVzY3JpcHRpb24gPSBDcmVhdGUgYSBuZXcgU1RFTSBwcm9qZWN0IGluIHRoZSB3b3Jrc3BhY2Ugb3IgaW4gYW4gZXh0ZXJuYWwgbG9jYXRpb24uCisKK05TVEVNUHJvV2l6LmdyYXBoX2ZvbGRlciA9IEdyYXBocworTlNURU1Qcm9XaXoubW9kZWxfZm9sZGVyID0gTW9kZWxzCitOU1RFTVByb1dpei5zY2VuYXJpb19mb2xkZXIgPSBTY2VuYXJpb3MKK05TVEVNUHJvV2l6LmRlY29yYXRvcl9mb2xkZXIgPSBEZWNvcmF0b3JzCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkubmwxL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3dpemFyZHMvbWVzc2FnZXNfdGEucHJvcGVydGllcyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5ubDEvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvd2l6YXJkcy9tZXNzYWdlc190YS5wcm9wZXJ0aWVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY1ZjgwYjcKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkubmwxL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3dpemFyZHMvbWVzc2FnZXNfdGEucHJvcGVydGllcwpAQCAtMCwwICsxLDI0IEBACisjIG1lc3NhZ2VzX3RhLnByb3BlcnRpZXMKKyMgVGFtaWwKKyMvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIyAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyMgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisjICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisjICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyMgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorIyAqCisjICogQ29udHJpYnV0b3JzOgorIyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworTlNURU1Qcm9XaXouY3JlYXRpbmdfZGlyZWN0b3JpZXMgPSC+ovC88r6i/SCrqLzXuPsgr9XFoey49MDOuKLI0AorTlNURU1Qcm9XaXouY3JlYXRpbmdfcHJvamVjdCA9INK+osIgiqe89SC+ovC89SCv1cWh7Lj0wM64osjQCitOU1RFTVByb1dpei5wYWdlX3RpdGxlID0g0r6iwiCKp7z1IL6i8LzyvqL9IKbAwqjDIMzIovTAos4KK05TVEVNUHJvV2l6LnRpdGxlID0g0r6iwiCKp7z1IL6i8LzyqL4gr9XFoezMCitOU1RFTVByb1dpei5wYWdlX2Rlc2NyaXB0aW9uID0g0r6iwiCKp7z1IL6i8LzyqL4gwL2iwqL0IMDD9MCi+CCr+MTQINLIxaK88r6i+CCv1cWh7MwKKworTlNURU1Qcm9XaXouZ3JhcGhfZm9sZGVyID0gxajDwLztuPsKK05TVEVNUHJvV2l6Lm1vZGVsX2ZvbGRlciA9IMGhvqGiuPsKK05TVEVNUHJvV2l6LnNjZW5hcmlvX2ZvbGRlciA9IKe4ob3tuPsKK05TVEVNUHJvV2l6LmRlY29yYXRvcl9mb2xkZXIgPSCrxO24oaL0wMX3uPsKKwpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLm5sMS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS93aXphcmRzL21lc3NhZ2VzX3poLnByb3BlcnRpZXMgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkubmwxL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3dpemFyZHMvbWVzc2FnZXNfemgucHJvcGVydGllcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNjhmODNlCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLm5sMS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS93aXphcmRzL21lc3NhZ2VzX3poLnByb3BlcnRpZXMKQEAgLTAsMCArMSwyNCBAQAorIyBXaXphcmRNZXNzYWdlc196aC5wcm9wZXJ0aWVzCisjIENoaW5lc2UKKyMvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIyAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyMgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisjICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisjICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyMgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorIyAqCisjICogQ29udHJpYnV0b3JzOgorIyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworTlNURU1Qcm9XaXouY3JlYXRpbmdfZGlyZWN0b3JpZXMgPSBDcmVhdGluZyBwcm9qZWN0IGRpcmVjdG9yaWVzCitOU1RFTVByb1dpei5jcmVhdGluZ19wcm9qZWN0ID0gQ3JlYXRpbmcgbmV3IFNURU0gcHJvamVjdAorTlNURU1Qcm9XaXoucGFnZV90aXRsZSA9IFNwZWNpZnkgdGhlIG5hbWUgb2YgdGhlIG5ldyBTVEVNIFByb2plY3QKK05TVEVNUHJvV2l6LnRpdGxlID0gQ3JlYXRlIGEgU1RFTSBwcm9qZWN0CitOU1RFTVByb1dpei5wYWdlX2Rlc2NyaXB0aW9uID0gQ3JlYXRlIGEgbmV3IFNURU0gcHJvamVjdCBpbiB0aGUgd29ya3NwYWNlIG9yIGluIGFuIGV4dGVybmFsIGxvY2F0aW9uLgorCitOU1RFTVByb1dpei5ncmFwaF9mb2xkZXIgPSBHcmFwaHMKK05TVEVNUHJvV2l6Lm1vZGVsX2ZvbGRlciA9IE1vZGVscworTlNURU1Qcm9XaXouc2NlbmFyaW9fZm9sZGVyID0gU2NlbmFyaW9zCitOU1RFTVByb1dpei5kZWNvcmF0b3JfZm9sZGVyID0gRGVjb3JhdG9ycworCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkucmVwb3J0cy8uY2R0cHJvamVjdCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5yZXBvcnRzLy5jZHRwcm9qZWN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFiMmVhODMKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkucmVwb3J0cy8uY2R0cHJvamVjdApAQCAtMCwwICsxLDQgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8P2VjbGlwc2UtY2R0IHZlcnNpb249IjIuMCI/PgorCis8Y2R0cHJvamVjdC8+CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkucmVwb3J0cy8uY2xhc3NwYXRoIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLnJlcG9ydHMvLmNsYXNzcGF0aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMDRlODYxCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLnJlcG9ydHMvLmNsYXNzcGF0aApAQCAtMCwwICsxLDcgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8Y2xhc3NwYXRoPgorCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJzcmMiIHBhdGg9InNyYyIvPgorCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJjb24iIHBhdGg9Im9yZy5lY2xpcHNlLmpkdC5sYXVuY2hpbmcuSlJFX0NPTlRBSU5FUi9vcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwuZGVidWcudWkubGF1bmNoZXIuU3RhbmRhcmRWTVR5cGUvSjJTRS0xLjUiLz4KKwk8Y2xhc3NwYXRoZW50cnkga2luZD0iY29uIiBwYXRoPSJvcmcuZWNsaXBzZS5wZGUuY29yZS5yZXF1aXJlZFBsdWdpbnMiLz4KKwk8Y2xhc3NwYXRoZW50cnkga2luZD0ib3V0cHV0IiBwYXRoPSJiaW4iLz4KKzwvY2xhc3NwYXRoPgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLnJlcG9ydHMvLmNwcm9qZWN0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLnJlcG9ydHMvLmNwcm9qZWN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI2MTljNTYKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkucmVwb3J0cy8uY3Byb2plY3QKQEAgLTAsMCArMSwxMyBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzw/ZmlsZVZlcnNpb24gNC4wLjA/PgorCis8Y3Byb2plY3Q+Cis8c3RvcmFnZU1vZHVsZSBtb2R1bGVJZD0ib3JnLmVjbGlwc2UuY2R0LmNvcmUuc2V0dGluZ3MiPgorPGNjb25maWd1cmF0aW9uIGlkPSJjb252ZXJ0ZWQuY29uZmlnLjkwNzg0NTI2NCI+Cis8c3RvcmFnZU1vZHVsZSBidWlsZFN5c3RlbUlkPSJvcmcuZWNsaXBzZS5jZHQuY29yZS5kZWZhdWx0Q29uZmlnRGF0YVByb3ZpZGVyIiBpZD0iY29udmVydGVkLmNvbmZpZy45MDc4NDUyNjQiIG1vZHVsZUlkPSJvcmcuZWNsaXBzZS5jZHQuY29yZS5zZXR0aW5ncyIgbmFtZT0iY29udmVydGVkQ29uZmlnIj4KKzxleHRlcm5hbFNldHRpbmdzLz4KKzxleHRlbnNpb25zLz4KKzwvc3RvcmFnZU1vZHVsZT4KKzwvY2NvbmZpZ3VyYXRpb24+Cis8L3N0b3JhZ2VNb2R1bGU+Cis8L2Nwcm9qZWN0PgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLnJlcG9ydHMvLnByb2plY3QgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkucmVwb3J0cy8ucHJvamVjdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYTQ4NDY5Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLnJlcG9ydHMvLnByb2plY3QKQEAgLTAsMCArMSwyOCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxwcm9qZWN0RGVzY3JpcHRpb24+CisJPG5hbWU+b3JnLmVjbGlwc2Uuc3RlbS51aS5yZXBvcnRzPC9uYW1lPgorCTxjb21tZW50PjwvY29tbWVudD4KKwk8cHJvamVjdHM+CisJPC9wcm9qZWN0cz4KKwk8YnVpbGRTcGVjPgorCQk8YnVpbGRDb21tYW5kPgorCQkJPG5hbWU+b3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YWJ1aWxkZXI8L25hbWU+CisJCQk8YXJndW1lbnRzPgorCQkJPC9hcmd1bWVudHM+CisJCTwvYnVpbGRDb21tYW5kPgorCQk8YnVpbGRDb21tYW5kPgorCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLk1hbmlmZXN0QnVpbGRlcjwvbmFtZT4KKwkJCTxhcmd1bWVudHM+CisJCQk8L2FyZ3VtZW50cz4KKwkJPC9idWlsZENvbW1hbmQ+CisJCTxidWlsZENvbW1hbmQ+CisJCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuU2NoZW1hQnVpbGRlcjwvbmFtZT4KKwkJCTxhcmd1bWVudHM+CisJCQk8L2FyZ3VtZW50cz4KKwkJPC9idWlsZENvbW1hbmQ+CisJPC9idWlsZFNwZWM+CisJPG5hdHVyZXM+CisJCTxuYXR1cmU+b3JnLmVjbGlwc2UucGRlLlBsdWdpbk5hdHVyZTwvbmF0dXJlPgorCQk8bmF0dXJlPm9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFuYXR1cmU8L25hdHVyZT4KKwk8L25hdHVyZXM+Cis8L3Byb2plY3REZXNjcmlwdGlvbj4KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5yZXBvcnRzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5yZXBvcnRzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZTJhZTk2Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLnJlcG9ydHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzCkBAIC0wLDAgKzEsNzQgQEAKKyNNb24gSmFuIDIxIDEyOjUzOjA1IEVTVCAyMDA4CitlY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29kZWdlbi5pbmxpbmVKc3JCeXRlY29kZT1lbmFibGVkCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb2RlZ2VuLnRhcmdldFBsYXRmb3JtPTEuNQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29kZWdlbi51bnVzZWRMb2NhbD1wcmVzZXJ2ZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29tcGxpYW5jZT0xLjUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmRlYnVnLmxpbmVOdW1iZXI9Z2VuZXJhdGUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmRlYnVnLmxvY2FsVmFyaWFibGU9Z2VuZXJhdGUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmRlYnVnLnNvdXJjZUZpbGU9Z2VuZXJhdGUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmRvYy5jb21tZW50LnN1cHBvcnQ9ZW5hYmxlZAorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5hbm5vdGF0aW9uU3VwZXJJbnRlcmZhY2U9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5hc3NlcnRJZGVudGlmaWVyPWVycm9yCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmF1dG9ib3hpbmc9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5kZXByZWNhdGlvbj13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRlcHJlY2F0aW9uSW5EZXByZWNhdGVkQ29kZT1kaXNhYmxlZAorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5kZXByZWNhdGlvbldoZW5PdmVycmlkaW5nRGVwcmVjYXRlZE1ldGhvZD1kaXNhYmxlZAorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5kaXNjb3VyYWdlZFJlZmVyZW5jZT13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmVtcHR5U3RhdGVtZW50PXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZW51bUlkZW50aWZpZXI9ZXJyb3IKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZmFsbHRocm91Z2hDYXNlPWlnbm9yZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5maWVsZEhpZGluZz1pZ25vcmUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZmluYWxQYXJhbWV0ZXJCb3VuZD13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZpbmFsbHlCbG9ja05vdENvbXBsZXRpbmdOb3JtYWxseT13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZvcmJpZGRlblJlZmVyZW5jZT1lcnJvcgorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5oaWRkZW5DYXRjaEJsb2NrPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW5jb21wYXRpYmxlTm9uSW5oZXJpdGVkSW50ZXJmYWNlTWV0aG9kPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW5jb21wbGV0ZUVudW1Td2l0Y2g9aWdub3JlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmluZGlyZWN0U3RhdGljQWNjZXNzPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW52YWxpZEphdmFkb2M9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbnZhbGlkSmF2YWRvY1RhZ3M9ZW5hYmxlZAorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbnZhbGlkSmF2YWRvY1RhZ3NEZXByZWNhdGVkUmVmPWVuYWJsZWQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW52YWxpZEphdmFkb2NUYWdzTm90VmlzaWJsZVJlZj1lbmFibGVkCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmludmFsaWRKYXZhZG9jVGFnc1Zpc2liaWxpdHk9cHVibGljCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmxvY2FsVmFyaWFibGVIaWRpbmc9aWdub3JlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1ldGhvZFdpdGhDb25zdHJ1Y3Rvck5hbWU9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nRGVwcmVjYXRlZEFubm90YXRpb249d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nSmF2YWRvY0NvbW1lbnRzPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0phdmFkb2NDb21tZW50c092ZXJyaWRpbmc9ZW5hYmxlZAorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nSmF2YWRvY0NvbW1lbnRzVmlzaWJpbGl0eT1wdWJsaWMKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0phdmFkb2NUYWdzPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0phdmFkb2NUYWdzT3ZlcnJpZGluZz1lbmFibGVkCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdKYXZhZG9jVGFnc1Zpc2liaWxpdHk9cHVibGljCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdPdmVycmlkZUFubm90YXRpb249aWdub3JlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdTZXJpYWxWZXJzaW9uPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubm9FZmZlY3RBc3NpZ25tZW50PXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubm9JbXBsaWNpdFN0cmluZ0NvbnZlcnNpb249d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5ub25FeHRlcm5hbGl6ZWRTdHJpbmdMaXRlcmFsPWlnbm9yZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5udWxsUmVmZXJlbmNlPWlnbm9yZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5vdmVycmlkaW5nUGFja2FnZURlZmF1bHRNZXRob2Q9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5wYXJhbWV0ZXJBc3NpZ25tZW50PWlnbm9yZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5wb3NzaWJsZUFjY2lkZW50YWxCb29sZWFuQXNzaWdubWVudD13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnJhd1R5cGVSZWZlcmVuY2U9aWdub3JlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnNwZWNpYWxQYXJhbWV0ZXJIaWRpbmdGaWVsZD1kaXNhYmxlZAorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5zdGF0aWNBY2Nlc3NSZWNlaXZlcj13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnN1cHByZXNzV2FybmluZ3M9ZW5hYmxlZAorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5zeW50aGV0aWNBY2Nlc3NFbXVsYXRpb249d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS50eXBlUGFyYW1ldGVySGlkaW5nPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5jaGVja2VkVHlwZU9wZXJhdGlvbj1pZ25vcmUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5kb2N1bWVudGVkRW1wdHlCbG9jaz13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVuaGFuZGxlZFdhcm5pbmdUb2tlbj13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVubmVjZXNzYXJ5RWxzZT13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVubmVjZXNzYXJ5VHlwZUNoZWNrPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5xdWFsaWZpZWRGaWVsZEFjY2Vzcz1pZ25vcmUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkRGVjbGFyZWRUaHJvd25FeGNlcHRpb249d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWREZWNsYXJlZFRocm93bkV4Y2VwdGlvbldoZW5PdmVycmlkaW5nPWVuYWJsZWQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkSW1wb3J0PXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkTGFiZWw9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRMb2NhbD13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZFBhcmFtZXRlcj13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZFBhcmFtZXRlcldoZW5JbXBsZW1lbnRpbmdBYnN0cmFjdD1lbmFibGVkCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZFBhcmFtZXRlcldoZW5PdmVycmlkaW5nQ29uY3JldGU9ZW5hYmxlZAorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRQcml2YXRlTWVtYmVyPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udmFyYXJnc0FyZ3VtZW50TmVlZENhc3Q9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuc291cmNlPTEuNQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLnJlcG9ydHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC51aS5wcmVmcyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5yZXBvcnRzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQudWkucHJlZnMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTRjOTQ4NwotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5yZXBvcnRzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQudWkucHJlZnMKQEAgLTAsMCArMSw1MCBAQAorI1RodSBOb3YgMDEgMTQ6NTA6NTMgRURUIDIwMDcKK2NsZWFudXAuYWRkX2RlZmF1bHRfc2VyaWFsX3ZlcnNpb25faWQ9dHJ1ZQorY2xlYW51cC5hZGRfZ2VuZXJhdGVkX3NlcmlhbF92ZXJzaW9uX2lkPWZhbHNlCitjbGVhbnVwLmFkZF9taXNzaW5nX2Fubm90YXRpb25zPXRydWUKK2NsZWFudXAuYWRkX21pc3NpbmdfZGVwcmVjYXRlZF9hbm5vdGF0aW9ucz10cnVlCitjbGVhbnVwLmFkZF9taXNzaW5nX25sc190YWdzPWZhbHNlCitjbGVhbnVwLmFkZF9taXNzaW5nX292ZXJyaWRlX2Fubm90YXRpb25zPXRydWUKK2NsZWFudXAuYWRkX3NlcmlhbF92ZXJzaW9uX2lkPWZhbHNlCitjbGVhbnVwLmFsd2F5c191c2VfYmxvY2tzPXRydWUKK2NsZWFudXAuYWx3YXlzX3VzZV9wYXJlbnRoZXNlc19pbl9leHByZXNzaW9ucz10cnVlCitjbGVhbnVwLmFsd2F5c191c2VfdGhpc19mb3Jfbm9uX3N0YXRpY19maWVsZF9hY2Nlc3M9ZmFsc2UKK2NsZWFudXAuYWx3YXlzX3VzZV90aGlzX2Zvcl9ub25fc3RhdGljX21ldGhvZF9hY2Nlc3M9ZmFsc2UKK2NsZWFudXAuY29udmVydF90b19lbmhhbmNlZF9mb3JfbG9vcD10cnVlCitjbGVhbnVwLmZvcm1hdF9zb3VyY2VfY29kZT10cnVlCitjbGVhbnVwLm1ha2VfbG9jYWxfdmFyaWFibGVfZmluYWw9dHJ1ZQorY2xlYW51cC5tYWtlX3BhcmFtZXRlcnNfZmluYWw9dHJ1ZQorY2xlYW51cC5tYWtlX3ByaXZhdGVfZmllbGRzX2ZpbmFsPXRydWUKK2NsZWFudXAubWFrZV92YXJpYWJsZV9kZWNsYXJhdGlvbnNfZmluYWw9dHJ1ZQorY2xlYW51cC5uZXZlcl91c2VfYmxvY2tzPWZhbHNlCitjbGVhbnVwLm5ldmVyX3VzZV9wYXJlbnRoZXNlc19pbl9leHByZXNzaW9ucz1mYWxzZQorY2xlYW51cC5vcmdhbml6ZV9pbXBvcnRzPXRydWUKK2NsZWFudXAucXVhbGlmeV9zdGF0aWNfZmllbGRfYWNjZXNzZXNfd2l0aF9kZWNsYXJpbmdfY2xhc3M9ZmFsc2UKK2NsZWFudXAucXVhbGlmeV9zdGF0aWNfbWVtYmVyX2FjY2Vzc2VzX3Rocm91Z2hfaW5zdGFuY2VzX3dpdGhfZGVjbGFyaW5nX2NsYXNzPXRydWUKK2NsZWFudXAucXVhbGlmeV9zdGF0aWNfbWVtYmVyX2FjY2Vzc2VzX3Rocm91Z2hfc3VidHlwZXNfd2l0aF9kZWNsYXJpbmdfY2xhc3M9dHJ1ZQorY2xlYW51cC5xdWFsaWZ5X3N0YXRpY19tZW1iZXJfYWNjZXNzZXNfd2l0aF9kZWNsYXJpbmdfY2xhc3M9dHJ1ZQorY2xlYW51cC5xdWFsaWZ5X3N0YXRpY19tZXRob2RfYWNjZXNzZXNfd2l0aF9kZWNsYXJpbmdfY2xhc3M9ZmFsc2UKK2NsZWFudXAucmVtb3ZlX3ByaXZhdGVfY29uc3RydWN0b3JzPXRydWUKK2NsZWFudXAucmVtb3ZlX3RyYWlsaW5nX3doaXRlc3BhY2VzPXRydWUKK2NsZWFudXAucmVtb3ZlX3RyYWlsaW5nX3doaXRlc3BhY2VzX2FsbD10cnVlCitjbGVhbnVwLnJlbW92ZV90cmFpbGluZ193aGl0ZXNwYWNlc19pZ25vcmVfZW1wdHk9ZmFsc2UKK2NsZWFudXAucmVtb3ZlX3VubmVjZXNzYXJ5X2Nhc3RzPXRydWUKK2NsZWFudXAucmVtb3ZlX3VubmVjZXNzYXJ5X25sc190YWdzPXRydWUKK2NsZWFudXAucmVtb3ZlX3VudXNlZF9pbXBvcnRzPXRydWUKK2NsZWFudXAucmVtb3ZlX3VudXNlZF9sb2NhbF92YXJpYWJsZXM9dHJ1ZQorY2xlYW51cC5yZW1vdmVfdW51c2VkX3ByaXZhdGVfZmllbGRzPXRydWUKK2NsZWFudXAucmVtb3ZlX3VudXNlZF9wcml2YXRlX21lbWJlcnM9dHJ1ZQorY2xlYW51cC5yZW1vdmVfdW51c2VkX3ByaXZhdGVfbWV0aG9kcz10cnVlCitjbGVhbnVwLnJlbW92ZV91bnVzZWRfcHJpdmF0ZV90eXBlcz10cnVlCitjbGVhbnVwLnNvcnRfbWVtYmVycz1mYWxzZQorY2xlYW51cC5zb3J0X21lbWJlcnNfYWxsPWZhbHNlCitjbGVhbnVwLnVzZV9ibG9ja3M9dHJ1ZQorY2xlYW51cC51c2VfYmxvY2tzX29ubHlfZm9yX3JldHVybl9hbmRfdGhyb3c9ZmFsc2UKK2NsZWFudXAudXNlX3BhcmVudGhlc2VzX2luX2V4cHJlc3Npb25zPWZhbHNlCitjbGVhbnVwLnVzZV90aGlzX2Zvcl9ub25fc3RhdGljX2ZpZWxkX2FjY2Vzcz1mYWxzZQorY2xlYW51cC51c2VfdGhpc19mb3Jfbm9uX3N0YXRpY19maWVsZF9hY2Nlc3Nfb25seV9pZl9uZWNlc3Nhcnk9dHJ1ZQorY2xlYW51cC51c2VfdGhpc19mb3Jfbm9uX3N0YXRpY19tZXRob2RfYWNjZXNzPWZhbHNlCitjbGVhbnVwLnVzZV90aGlzX2Zvcl9ub25fc3RhdGljX21ldGhvZF9hY2Nlc3Nfb25seV9pZl9uZWNlc3Nhcnk9dHJ1ZQorY2xlYW51cF9wcm9maWxlPV9jbGVhbnVwCitjbGVhbnVwX3NldHRpbmdzX3ZlcnNpb249MgorZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5yZXBvcnRzL01FVEEtSU5GL01BTklGRVNULk1GIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLnJlcG9ydHMvTUVUQS1JTkYvTUFOSUZFU1QuTUYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDNjYjdhOQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5yZXBvcnRzL01FVEEtSU5GL01BTklGRVNULk1GCkBAIC0wLDAgKzEsMjAgQEAKK01hbmlmZXN0LVZlcnNpb246IDEuMAorQnVuZGxlLU1hbmlmZXN0VmVyc2lvbjogMgorQnVuZGxlLU5hbWU6ICVwbHVnaW5OYW1lCitCdW5kbGUtU3ltYm9saWNOYW1lOiBvcmcuZWNsaXBzZS5zdGVtLnVpLnJlcG9ydHM7c2luZ2xldG9uOj10cnVlCitCdW5kbGUtVmVyc2lvbjogMS4yLjEKK0J1bmRsZS1BY3RpdmF0b3I6IG9yZy5lY2xpcHNlLnN0ZW0udWkucmVwb3J0cy5BY3RpdmF0b3IKK0J1bmRsZS1WZW5kb3I6ICVwcm92aWRlck5hbWUKK0J1bmRsZS1Mb2NhbGl6YXRpb246IHBsdWdpbgorUmVxdWlyZS1CdW5kbGU6IG9yZy5lY2xpcHNlLmJpcnQuY2hhcnQuZW5naW5lO3Zpc2liaWxpdHk6PXJlZXhwb3J0LAorIG9yZy5lY2xpcHNlLmJpcnQuY2hhcnQuZW5naW5lLmV4dGVuc2lvbiwKKyBvcmcuZWNsaXBzZS5iaXJ0LmNvcmUudWksCisgb3JnLmVjbGlwc2UuYmlydC5jaGFydC5kZXZpY2Uuc3d0LAorIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMsCisgb3JnLmVjbGlwc2Uuc3RlbS51aSwKKyBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMsCisgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzCitCdW5kbGUtQWN0aXZhdGlvblBvbGljeTogbGF6eQorRXhwb3J0LVBhY2thZ2U6IG9yZy5lY2xpcHNlLnN0ZW0udWkucmVwb3J0cywKKyBvcmcuZWNsaXBzZS5zdGVtLnVpLnJlcG9ydHMudmlld3MKK0J1bmRsZS1SZXF1aXJlZEV4ZWN1dGlvbkVudmlyb25tZW50OiBKMlNFLTEuNQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLnJlcG9ydHMvYnVpbGQucHJvcGVydGllcyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5yZXBvcnRzL2J1aWxkLnByb3BlcnRpZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjZiYzljNQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5yZXBvcnRzL2J1aWxkLnByb3BlcnRpZXMKQEAgLTAsMCArMSwxMiBAQAorc291cmNlLi4gPSBzcmMvCitvdXRwdXQuLiA9IGJpbi8KK2Jpbi5pbmNsdWRlcyA9IHBsdWdpbi54bWwsXAorICAgICAgICAgICAgICAgTUVUQS1JTkYvLFwKKyAgICAgICAgICAgICAgIC4sXAorICAgICAgICAgICAgICAgaWNvbnMvLFwKKyAgICAgICAgICAgICAgIHBsdWdpbi5wcm9wZXJ0aWVzLFwKKyAgICAgICAgICAgICAgIG5vdGljZS5odG1sLFwKKyAgICAgICAgICAgICAgIGVwbC12MTAuaHRtbCxcCisgICAgICAgICAgICAgICBwbHVnaW5fZGUucHJvcGVydGllcyxcCisgICAgICAgICAgICAgICBwbHVnaW5femgucHJvcGVydGllcyxcCisgICAgICAgICAgICAgICBwbHVnaW5fa3IucHJvcGVydGllcwpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLnJlcG9ydHMvZXBsLXYxMC5odG1sIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLnJlcG9ydHMvZXBsLXYxMC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVkNGIxOTYKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkucmVwb3J0cy9lcGwtdjEwLmh0bWwKQEAgLTAsMCArMSwzMjggQEAKKzxodG1sIHhtbG5zOm89InVybjpzY2hlbWFzLW1pY3Jvc29mdC1jb206b2ZmaWNlOm9mZmljZSIKK3htbG5zOnc9InVybjpzY2hlbWFzLW1pY3Jvc29mdC1jb206b2ZmaWNlOndvcmQiCit4bWxucz0iaHR0cDovL3d3dy53My5vcmcvVFIvUkVDLWh0bWw0MCI+CisKKzxoZWFkPgorPG1ldGEgaHR0cC1lcXVpdj1Db250ZW50LVR5cGUgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PXdpbmRvd3MtMTI1MiI+Cis8bWV0YSBuYW1lPVByb2dJZCBjb250ZW50PVdvcmQuRG9jdW1lbnQ+Cis8bWV0YSBuYW1lPUdlbmVyYXRvciBjb250ZW50PSJNaWNyb3NvZnQgV29yZCA5Ij4KKzxtZXRhIG5hbWU9T3JpZ2luYXRvciBjb250ZW50PSJNaWNyb3NvZnQgV29yZCA5Ij4KKzxsaW5rIHJlbD1GaWxlLUxpc3QKK2hyZWY9Ii4vRWNsaXBzZSUyMEVQTCUyMDIwMDNfMTFfMTAlMjBGaW5hbF9maWxlcy9maWxlbGlzdC54bWwiPgorPHRpdGxlPkVjbGlwc2UgUHVibGljIExpY2Vuc2UgLSBWZXJzaW9uIDEuMDwvdGl0bGU+Cis8IS0tW2lmIGd0ZSBtc28gOV0+PHhtbD4KKyA8bzpEb2N1bWVudFByb3BlcnRpZXM+CisgIDxvOlJldmlzaW9uPjI8L286UmV2aXNpb24+CisgIDxvOlRvdGFsVGltZT4zPC9vOlRvdGFsVGltZT4KKyAgPG86Q3JlYXRlZD4yMDA0LTAzLTA1VDIzOjAzOjAwWjwvbzpDcmVhdGVkPgorICA8bzpMYXN0U2F2ZWQ+MjAwNC0wMy0wNVQyMzowMzowMFo8L286TGFzdFNhdmVkPgorICA8bzpQYWdlcz40PC9vOlBhZ2VzPgorICA8bzpXb3Jkcz4xNjI2PC9vOldvcmRzPgorICA8bzpDaGFyYWN0ZXJzPjkyNzA8L286Q2hhcmFjdGVycz4KKyAgIDxvOkxpbmVzPjc3PC9vOkxpbmVzPgorICA8bzpQYXJhZ3JhcGhzPjE4PC9vOlBhcmFncmFwaHM+CisgIDxvOkNoYXJhY3RlcnNXaXRoU3BhY2VzPjExMzg0PC9vOkNoYXJhY3RlcnNXaXRoU3BhY2VzPgorICA8bzpWZXJzaW9uPjkuNDQwMjwvbzpWZXJzaW9uPgorIDwvbzpEb2N1bWVudFByb3BlcnRpZXM+Cis8L3htbD48IVtlbmRpZl0tLT48IS0tW2lmIGd0ZSBtc28gOV0+PHhtbD4KKyA8dzpXb3JkRG9jdW1lbnQ+CisgIDx3OlRyYWNrUmV2aXNpb25zLz4KKyA8L3c6V29yZERvY3VtZW50PgorPC94bWw+PCFbZW5kaWZdLS0+Cis8c3R5bGU+Cis8IS0tCisgLyogRm9udCBEZWZpbml0aW9ucyAqLworQGZvbnQtZmFjZQorCXtmb250LWZhbWlseTpUYWhvbWE7CisJcGFub3NlLTE6MiAxMSA2IDQgMyA1IDQgNCAyIDQ7CisJbXNvLWZvbnQtY2hhcnNldDowOworCW1zby1nZW5lcmljLWZvbnQtZmFtaWx5OnN3aXNzOworCW1zby1mb250LXBpdGNoOnZhcmlhYmxlOworCW1zby1mb250LXNpZ25hdHVyZTo1NTM2Nzk0OTUgLTIxNDc0ODM2NDggOCAwIDY2MDQ3IDA7fQorIC8qIFN0eWxlIERlZmluaXRpb25zICovCitwLk1zb05vcm1hbCwgbGkuTXNvTm9ybWFsLCBkaXYuTXNvTm9ybWFsCisJe21zby1zdHlsZS1wYXJlbnQ6IiI7CisJbWFyZ2luOjBpbjsKKwltYXJnaW4tYm90dG9tOi4wMDAxcHQ7CisJbXNvLXBhZ2luYXRpb246d2lkb3ctb3JwaGFuOworCWZvbnQtc2l6ZToxMi4wcHQ7CisJZm9udC1mYW1pbHk6IlRpbWVzIE5ldyBSb21hbiI7CisJbXNvLWZhcmVhc3QtZm9udC1mYW1pbHk6IlRpbWVzIE5ldyBSb21hbiI7fQorcAorCXttYXJnaW4tcmlnaHQ6MGluOworCW1zby1tYXJnaW4tdG9wLWFsdDphdXRvOworCW1zby1tYXJnaW4tYm90dG9tLWFsdDphdXRvOworCW1hcmdpbi1sZWZ0OjBpbjsKKwltc28tcGFnaW5hdGlvbjp3aWRvdy1vcnBoYW47CisJZm9udC1zaXplOjEyLjBwdDsKKwlmb250LWZhbWlseToiVGltZXMgTmV3IFJvbWFuIjsKKwltc28tZmFyZWFzdC1mb250LWZhbWlseToiVGltZXMgTmV3IFJvbWFuIjt9CitwLkJhbGxvb25UZXh0LCBsaS5CYWxsb29uVGV4dCwgZGl2LkJhbGxvb25UZXh0CisJe21zby1zdHlsZS1uYW1lOiJCYWxsb29uIFRleHQiOworCW1hcmdpbjowaW47CisJbWFyZ2luLWJvdHRvbTouMDAwMXB0OworCW1zby1wYWdpbmF0aW9uOndpZG93LW9ycGhhbjsKKwlmb250LXNpemU6OC4wcHQ7CisJZm9udC1mYW1pbHk6VGFob21hOworCW1zby1mYXJlYXN0LWZvbnQtZmFtaWx5OiJUaW1lcyBOZXcgUm9tYW4iO30KK0BwYWdlIFNlY3Rpb24xCisJe3NpemU6OC41aW4gMTEuMGluOworCW1hcmdpbjoxLjBpbiAxLjI1aW4gMS4waW4gMS4yNWluOworCW1zby1oZWFkZXItbWFyZ2luOi41aW47CisJbXNvLWZvb3Rlci1tYXJnaW46LjVpbjsKKwltc28tcGFwZXItc291cmNlOjA7fQorZGl2LlNlY3Rpb24xCisJe3BhZ2U6U2VjdGlvbjE7fQorLS0+Cis8L3N0eWxlPgorPC9oZWFkPgorCis8Ym9keSBsYW5nPUVOLVVTIHN0eWxlPSd0YWItaW50ZXJ2YWw6LjVpbic+CisKKzxkaXYgY2xhc3M9U2VjdGlvbjE+CisKKzxwIGFsaWduPWNlbnRlciBzdHlsZT0ndGV4dC1hbGlnbjpjZW50ZXInPjxiPkVjbGlwc2UgUHVibGljIExpY2Vuc2UgLSB2IDEuMDwvYj4KKzwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPlRIRSBBQ0NPTVBBTllJTkcgUFJPR1JBTSBJUyBQUk9WSURFRCBVTkRFUgorVEhFIFRFUk1TIE9GIFRISVMgRUNMSVBTRSBQVUJMSUMgTElDRU5TRSAoJnF1b3Q7QUdSRUVNRU5UJnF1b3Q7KS4gQU5ZIFVTRSwKK1JFUFJPRFVDVElPTiBPUiBESVNUUklCVVRJT04gT0YgVEhFIFBST0dSQU0gQ09OU1RJVFVURVMgUkVDSVBJRU5UJ1MgQUNDRVBUQU5DRQorT0YgVEhJUyBBR1JFRU1FTlQuPC9zcGFuPiA8L3A+CisKKzxwPjxiPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4xLiBERUZJTklUSU9OUzwvc3Bhbj48L2I+IDwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPiZxdW90O0NvbnRyaWJ1dGlvbiZxdW90OyBtZWFuczo8L3NwYW4+IDwvcD4KKworPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YSkKK2luIHRoZSBjYXNlIG9mIHRoZSBpbml0aWFsIENvbnRyaWJ1dG9yLCB0aGUgaW5pdGlhbCBjb2RlIGFuZCBkb2N1bWVudGF0aW9uCitkaXN0cmlidXRlZCB1bmRlciB0aGlzIEFncmVlbWVudCwgYW5kPGJyIGNsZWFyPWxlZnQ+CitiKSBpbiB0aGUgY2FzZSBvZiBlYWNoIHN1YnNlcXVlbnQgQ29udHJpYnV0b3I6PC9zcGFuPjwvcD4KKworPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+aSkKK2NoYW5nZXMgdG8gdGhlIFByb2dyYW0sIGFuZDwvc3Bhbj48L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmlpKQorYWRkaXRpb25zIHRvIHRoZSBQcm9ncmFtOzwvc3Bhbj48L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPndoZXJlCitzdWNoIGNoYW5nZXMgYW5kL29yIGFkZGl0aW9ucyB0byB0aGUgUHJvZ3JhbSBvcmlnaW5hdGUgZnJvbSBhbmQgYXJlIGRpc3RyaWJ1dGVkCitieSB0aGF0IHBhcnRpY3VsYXIgQ29udHJpYnV0b3IuIEEgQ29udHJpYnV0aW9uICdvcmlnaW5hdGVzJyBmcm9tIGEgQ29udHJpYnV0b3IKK2lmIGl0IHdhcyBhZGRlZCB0byB0aGUgUHJvZ3JhbSBieSBzdWNoIENvbnRyaWJ1dG9yIGl0c2VsZiBvciBhbnlvbmUgYWN0aW5nIG9uCitzdWNoIENvbnRyaWJ1dG9yJ3MgYmVoYWxmLiBDb250cmlidXRpb25zIGRvIG5vdCBpbmNsdWRlIGFkZGl0aW9ucyB0byB0aGUKK1Byb2dyYW0gd2hpY2g6IChpKSBhcmUgc2VwYXJhdGUgbW9kdWxlcyBvZiBzb2Z0d2FyZSBkaXN0cmlidXRlZCBpbiBjb25qdW5jdGlvbgord2l0aCB0aGUgUHJvZ3JhbSB1bmRlciB0aGVpciBvd24gbGljZW5zZSBhZ3JlZW1lbnQsIGFuZCAoaWkpIGFyZSBub3QgZGVyaXZhdGl2ZQord29ya3Mgb2YgdGhlIFByb2dyYW0uIDwvc3Bhbj48L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4mcXVvdDtDb250cmlidXRvciZxdW90OyBtZWFucyBhbnkgcGVyc29uIG9yCitlbnRpdHkgdGhhdCBkaXN0cmlidXRlcyB0aGUgUHJvZ3JhbS48L3NwYW4+IDwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPiZxdW90O0xpY2Vuc2VkIFBhdGVudHMgJnF1b3Q7IG1lYW4gcGF0ZW50CitjbGFpbXMgbGljZW5zYWJsZSBieSBhIENvbnRyaWJ1dG9yIHdoaWNoIGFyZSBuZWNlc3NhcmlseSBpbmZyaW5nZWQgYnkgdGhlIHVzZQorb3Igc2FsZSBvZiBpdHMgQ29udHJpYnV0aW9uIGFsb25lIG9yIHdoZW4gY29tYmluZWQgd2l0aCB0aGUgUHJvZ3JhbS4gPC9zcGFuPjwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPiZxdW90O1Byb2dyYW0mcXVvdDsgbWVhbnMgdGhlIENvbnRyaWJ1dGlvbnMKK2Rpc3RyaWJ1dGVkIGluIGFjY29yZGFuY2Ugd2l0aCB0aGlzIEFncmVlbWVudC48L3NwYW4+IDwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPiZxdW90O1JlY2lwaWVudCZxdW90OyBtZWFucyBhbnlvbmUgd2hvCityZWNlaXZlcyB0aGUgUHJvZ3JhbSB1bmRlciB0aGlzIEFncmVlbWVudCwgaW5jbHVkaW5nIGFsbCBDb250cmlidXRvcnMuPC9zcGFuPiA8L3A+CisKKzxwPjxiPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4yLiBHUkFOVCBPRiBSSUdIVFM8L3NwYW4+PC9iPiA8L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmEpCitTdWJqZWN0IHRvIHRoZSB0ZXJtcyBvZiB0aGlzIEFncmVlbWVudCwgZWFjaCBDb250cmlidXRvciBoZXJlYnkgZ3JhbnRzIFJlY2lwaWVudAorYSBub24tZXhjbHVzaXZlLCB3b3JsZHdpZGUsIHJveWFsdHktZnJlZSBjb3B5cmlnaHQgbGljZW5zZSB0bzxzcGFuCitzdHlsZT0nY29sb3I6cmVkJz4gPC9zcGFuPnJlcHJvZHVjZSwgcHJlcGFyZSBkZXJpdmF0aXZlIHdvcmtzIG9mLCBwdWJsaWNseQorZGlzcGxheSwgcHVibGljbHkgcGVyZm9ybSwgZGlzdHJpYnV0ZSBhbmQgc3VibGljZW5zZSB0aGUgQ29udHJpYnV0aW9uIG9mIHN1Y2gKK0NvbnRyaWJ1dG9yLCBpZiBhbnksIGFuZCBzdWNoIGRlcml2YXRpdmUgd29ya3MsIGluIHNvdXJjZSBjb2RlIGFuZCBvYmplY3QgY29kZQorZm9ybS48L3NwYW4+PC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5iKQorU3ViamVjdCB0byB0aGUgdGVybXMgb2YgdGhpcyBBZ3JlZW1lbnQsIGVhY2ggQ29udHJpYnV0b3IgaGVyZWJ5IGdyYW50cworUmVjaXBpZW50IGEgbm9uLWV4Y2x1c2l2ZSwgd29ybGR3aWRlLDxzcGFuIHN0eWxlPSdjb2xvcjpncmVlbic+IDwvc3Bhbj5yb3lhbHR5LWZyZWUKK3BhdGVudCBsaWNlbnNlIHVuZGVyIExpY2Vuc2VkIFBhdGVudHMgdG8gbWFrZSwgdXNlLCBzZWxsLCBvZmZlciB0byBzZWxsLCBpbXBvcnQKK2FuZCBvdGhlcndpc2UgdHJhbnNmZXIgdGhlIENvbnRyaWJ1dGlvbiBvZiBzdWNoIENvbnRyaWJ1dG9yLCBpZiBhbnksIGluIHNvdXJjZQorY29kZSBhbmQgb2JqZWN0IGNvZGUgZm9ybS4gVGhpcyBwYXRlbnQgbGljZW5zZSBzaGFsbCBhcHBseSB0byB0aGUgY29tYmluYXRpb24KK29mIHRoZSBDb250cmlidXRpb24gYW5kIHRoZSBQcm9ncmFtIGlmLCBhdCB0aGUgdGltZSB0aGUgQ29udHJpYnV0aW9uIGlzIGFkZGVkCitieSB0aGUgQ29udHJpYnV0b3IsIHN1Y2ggYWRkaXRpb24gb2YgdGhlIENvbnRyaWJ1dGlvbiBjYXVzZXMgc3VjaCBjb21iaW5hdGlvbgordG8gYmUgY292ZXJlZCBieSB0aGUgTGljZW5zZWQgUGF0ZW50cy4gVGhlIHBhdGVudCBsaWNlbnNlIHNoYWxsIG5vdCBhcHBseSB0bworYW55IG90aGVyIGNvbWJpbmF0aW9ucyB3aGljaCBpbmNsdWRlIHRoZSBDb250cmlidXRpb24uIE5vIGhhcmR3YXJlIHBlciBzZSBpcworbGljZW5zZWQgaGVyZXVuZGVyLiA8L3NwYW4+PC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5jKQorUmVjaXBpZW50IHVuZGVyc3RhbmRzIHRoYXQgYWx0aG91Z2ggZWFjaCBDb250cmlidXRvciBncmFudHMgdGhlIGxpY2Vuc2VzIHRvIGl0cworQ29udHJpYnV0aW9ucyBzZXQgZm9ydGggaGVyZWluLCBubyBhc3N1cmFuY2VzIGFyZSBwcm92aWRlZCBieSBhbnkgQ29udHJpYnV0b3IKK3RoYXQgdGhlIFByb2dyYW0gZG9lcyBub3QgaW5mcmluZ2UgdGhlIHBhdGVudCBvciBvdGhlciBpbnRlbGxlY3R1YWwgcHJvcGVydHkKK3JpZ2h0cyBvZiBhbnkgb3RoZXIgZW50aXR5LiBFYWNoIENvbnRyaWJ1dG9yIGRpc2NsYWltcyBhbnkgbGlhYmlsaXR5IHRvIFJlY2lwaWVudAorZm9yIGNsYWltcyBicm91Z2h0IGJ5IGFueSBvdGhlciBlbnRpdHkgYmFzZWQgb24gaW5mcmluZ2VtZW50IG9mIGludGVsbGVjdHVhbAorcHJvcGVydHkgcmlnaHRzIG9yIG90aGVyd2lzZS4gQXMgYSBjb25kaXRpb24gdG8gZXhlcmNpc2luZyB0aGUgcmlnaHRzIGFuZAorbGljZW5zZXMgZ3JhbnRlZCBoZXJldW5kZXIsIGVhY2ggUmVjaXBpZW50IGhlcmVieSBhc3N1bWVzIHNvbGUgcmVzcG9uc2liaWxpdHkKK3RvIHNlY3VyZSBhbnkgb3RoZXIgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBuZWVkZWQsIGlmIGFueS4gRm9yIGV4YW1wbGUsCitpZiBhIHRoaXJkIHBhcnR5IHBhdGVudCBsaWNlbnNlIGlzIHJlcXVpcmVkIHRvIGFsbG93IFJlY2lwaWVudCB0byBkaXN0cmlidXRlCit0aGUgUHJvZ3JhbSwgaXQgaXMgUmVjaXBpZW50J3MgcmVzcG9uc2liaWxpdHkgdG8gYWNxdWlyZSB0aGF0IGxpY2Vuc2UgYmVmb3JlCitkaXN0cmlidXRpbmcgdGhlIFByb2dyYW0uPC9zcGFuPjwvcD4KKworPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+ZCkKK0VhY2ggQ29udHJpYnV0b3IgcmVwcmVzZW50cyB0aGF0IHRvIGl0cyBrbm93bGVkZ2UgaXQgaGFzIHN1ZmZpY2llbnQgY29weXJpZ2h0CityaWdodHMgaW4gaXRzIENvbnRyaWJ1dGlvbiwgaWYgYW55LCB0byBncmFudCB0aGUgY29weXJpZ2h0IGxpY2Vuc2Ugc2V0IGZvcnRoIGluCit0aGlzIEFncmVlbWVudC4gPC9zcGFuPjwvcD4KKworPHA+PGI+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPjMuIFJFUVVJUkVNRU5UUzwvc3Bhbj48L2I+IDwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkEgQ29udHJpYnV0b3IgbWF5IGNob29zZSB0byBkaXN0cmlidXRlIHRoZQorUHJvZ3JhbSBpbiBvYmplY3QgY29kZSBmb3JtIHVuZGVyIGl0cyBvd24gbGljZW5zZSBhZ3JlZW1lbnQsIHByb3ZpZGVkIHRoYXQ6PC9zcGFuPgorPC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5hKQoraXQgY29tcGxpZXMgd2l0aCB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhpcyBBZ3JlZW1lbnQ7IGFuZDwvc3Bhbj48L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmIpCitpdHMgbGljZW5zZSBhZ3JlZW1lbnQ6PC9zcGFuPjwvcD4KKworPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+aSkKK2VmZmVjdGl2ZWx5IGRpc2NsYWltcyBvbiBiZWhhbGYgb2YgYWxsIENvbnRyaWJ1dG9ycyBhbGwgd2FycmFudGllcyBhbmQKK2NvbmRpdGlvbnMsIGV4cHJlc3MgYW5kIGltcGxpZWQsIGluY2x1ZGluZyB3YXJyYW50aWVzIG9yIGNvbmRpdGlvbnMgb2YgdGl0bGUKK2FuZCBub24taW5mcmluZ2VtZW50LCBhbmQgaW1wbGllZCB3YXJyYW50aWVzIG9yIGNvbmRpdGlvbnMgb2YgbWVyY2hhbnRhYmlsaXR5CithbmQgZml0bmVzcyBmb3IgYSBwYXJ0aWN1bGFyIHB1cnBvc2U7IDwvc3Bhbj48L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmlpKQorZWZmZWN0aXZlbHkgZXhjbHVkZXMgb24gYmVoYWxmIG9mIGFsbCBDb250cmlidXRvcnMgYWxsIGxpYWJpbGl0eSBmb3IgZGFtYWdlcywKK2luY2x1ZGluZyBkaXJlY3QsIGluZGlyZWN0LCBzcGVjaWFsLCBpbmNpZGVudGFsIGFuZCBjb25zZXF1ZW50aWFsIGRhbWFnZXMsIHN1Y2gKK2FzIGxvc3QgcHJvZml0czsgPC9zcGFuPjwvcD4KKworPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+aWlpKQorc3RhdGVzIHRoYXQgYW55IHByb3Zpc2lvbnMgd2hpY2ggZGlmZmVyIGZyb20gdGhpcyBBZ3JlZW1lbnQgYXJlIG9mZmVyZWQgYnkgdGhhdAorQ29udHJpYnV0b3IgYWxvbmUgYW5kIG5vdCBieSBhbnkgb3RoZXIgcGFydHk7IGFuZDwvc3Bhbj48L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPml2KQorc3RhdGVzIHRoYXQgc291cmNlIGNvZGUgZm9yIHRoZSBQcm9ncmFtIGlzIGF2YWlsYWJsZSBmcm9tIHN1Y2ggQ29udHJpYnV0b3IsIGFuZAoraW5mb3JtcyBsaWNlbnNlZXMgaG93IHRvIG9idGFpbiBpdCBpbiBhIHJlYXNvbmFibGUgbWFubmVyIG9uIG9yIHRocm91Z2ggYQorbWVkaXVtIGN1c3RvbWFyaWx5IHVzZWQgZm9yIHNvZnR3YXJlIGV4Y2hhbmdlLjxzcGFuIHN0eWxlPSdjb2xvcjpibHVlJz4gPC9zcGFuPjwvc3Bhbj48L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5XaGVuIHRoZSBQcm9ncmFtIGlzIG1hZGUgYXZhaWxhYmxlIGluIHNvdXJjZQorY29kZSBmb3JtOjwvc3Bhbj4gPC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5hKQoraXQgbXVzdCBiZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGlzIEFncmVlbWVudDsgYW5kIDwvc3Bhbj48L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmIpIGEKK2NvcHkgb2YgdGhpcyBBZ3JlZW1lbnQgbXVzdCBiZSBpbmNsdWRlZCB3aXRoIGVhY2ggY29weSBvZiB0aGUgUHJvZ3JhbS4gPC9zcGFuPjwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkNvbnRyaWJ1dG9ycyBtYXkgbm90IHJlbW92ZSBvciBhbHRlciBhbnkKK2NvcHlyaWdodCBub3RpY2VzIGNvbnRhaW5lZCB3aXRoaW4gdGhlIFByb2dyYW0uIDwvc3Bhbj48L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5FYWNoIENvbnRyaWJ1dG9yIG11c3QgaWRlbnRpZnkgaXRzZWxmIGFzIHRoZQorb3JpZ2luYXRvciBvZiBpdHMgQ29udHJpYnV0aW9uLCBpZiBhbnksIGluIGEgbWFubmVyIHRoYXQgcmVhc29uYWJseSBhbGxvd3MKK3N1YnNlcXVlbnQgUmVjaXBpZW50cyB0byBpZGVudGlmeSB0aGUgb3JpZ2luYXRvciBvZiB0aGUgQ29udHJpYnV0aW9uLiA8L3NwYW4+PC9wPgorCis8cD48Yj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+NC4gQ09NTUVSQ0lBTCBESVNUUklCVVRJT048L3NwYW4+PC9iPiA8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5Db21tZXJjaWFsIGRpc3RyaWJ1dG9ycyBvZiBzb2Z0d2FyZSBtYXkKK2FjY2VwdCBjZXJ0YWluIHJlc3BvbnNpYmlsaXRpZXMgd2l0aCByZXNwZWN0IHRvIGVuZCB1c2VycywgYnVzaW5lc3MgcGFydG5lcnMKK2FuZCB0aGUgbGlrZS4gV2hpbGUgdGhpcyBsaWNlbnNlIGlzIGludGVuZGVkIHRvIGZhY2lsaXRhdGUgdGhlIGNvbW1lcmNpYWwgdXNlCitvZiB0aGUgUHJvZ3JhbSwgdGhlIENvbnRyaWJ1dG9yIHdobyBpbmNsdWRlcyB0aGUgUHJvZ3JhbSBpbiBhIGNvbW1lcmNpYWwKK3Byb2R1Y3Qgb2ZmZXJpbmcgc2hvdWxkIGRvIHNvIGluIGEgbWFubmVyIHdoaWNoIGRvZXMgbm90IGNyZWF0ZSBwb3RlbnRpYWwKK2xpYWJpbGl0eSBmb3Igb3RoZXIgQ29udHJpYnV0b3JzLiBUaGVyZWZvcmUsIGlmIGEgQ29udHJpYnV0b3IgaW5jbHVkZXMgdGhlCitQcm9ncmFtIGluIGEgY29tbWVyY2lhbCBwcm9kdWN0IG9mZmVyaW5nLCBzdWNoIENvbnRyaWJ1dG9yICgmcXVvdDtDb21tZXJjaWFsCitDb250cmlidXRvciZxdW90OykgaGVyZWJ5IGFncmVlcyB0byBkZWZlbmQgYW5kIGluZGVtbmlmeSBldmVyeSBvdGhlcgorQ29udHJpYnV0b3IgKCZxdW90O0luZGVtbmlmaWVkIENvbnRyaWJ1dG9yJnF1b3Q7KSBhZ2FpbnN0IGFueSBsb3NzZXMsIGRhbWFnZXMgYW5kCitjb3N0cyAoY29sbGVjdGl2ZWx5ICZxdW90O0xvc3NlcyZxdW90OykgYXJpc2luZyBmcm9tIGNsYWltcywgbGF3c3VpdHMgYW5kIG90aGVyCitsZWdhbCBhY3Rpb25zIGJyb3VnaHQgYnkgYSB0aGlyZCBwYXJ0eSBhZ2FpbnN0IHRoZSBJbmRlbW5pZmllZCBDb250cmlidXRvciB0bwordGhlIGV4dGVudCBjYXVzZWQgYnkgdGhlIGFjdHMgb3Igb21pc3Npb25zIG9mIHN1Y2ggQ29tbWVyY2lhbCBDb250cmlidXRvciBpbgorY29ubmVjdGlvbiB3aXRoIGl0cyBkaXN0cmlidXRpb24gb2YgdGhlIFByb2dyYW0gaW4gYSBjb21tZXJjaWFsIHByb2R1Y3QKK29mZmVyaW5nLiBUaGUgb2JsaWdhdGlvbnMgaW4gdGhpcyBzZWN0aW9uIGRvIG5vdCBhcHBseSB0byBhbnkgY2xhaW1zIG9yIExvc3NlcworcmVsYXRpbmcgdG8gYW55IGFjdHVhbCBvciBhbGxlZ2VkIGludGVsbGVjdHVhbCBwcm9wZXJ0eSBpbmZyaW5nZW1lbnQuIEluIG9yZGVyCit0byBxdWFsaWZ5LCBhbiBJbmRlbW5pZmllZCBDb250cmlidXRvciBtdXN0OiBhKSBwcm9tcHRseSBub3RpZnkgdGhlIENvbW1lcmNpYWwKK0NvbnRyaWJ1dG9yIGluIHdyaXRpbmcgb2Ygc3VjaCBjbGFpbSwgYW5kIGIpIGFsbG93IHRoZSBDb21tZXJjaWFsIENvbnRyaWJ1dG9yCit0byBjb250cm9sLCBhbmQgY29vcGVyYXRlIHdpdGggdGhlIENvbW1lcmNpYWwgQ29udHJpYnV0b3IgaW4sIHRoZSBkZWZlbnNlIGFuZAorYW55IHJlbGF0ZWQgc2V0dGxlbWVudCBuZWdvdGlhdGlvbnMuIFRoZSBJbmRlbW5pZmllZCBDb250cmlidXRvciBtYXkgcGFydGljaXBhdGUKK2luIGFueSBzdWNoIGNsYWltIGF0IGl0cyBvd24gZXhwZW5zZS48L3NwYW4+IDwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkZvciBleGFtcGxlLCBhIENvbnRyaWJ1dG9yIG1pZ2h0IGluY2x1ZGUgdGhlCitQcm9ncmFtIGluIGEgY29tbWVyY2lhbCBwcm9kdWN0IG9mZmVyaW5nLCBQcm9kdWN0IFguIFRoYXQgQ29udHJpYnV0b3IgaXMgdGhlbiBhCitDb21tZXJjaWFsIENvbnRyaWJ1dG9yLiBJZiB0aGF0IENvbW1lcmNpYWwgQ29udHJpYnV0b3IgdGhlbiBtYWtlcyBwZXJmb3JtYW5jZQorY2xhaW1zLCBvciBvZmZlcnMgd2FycmFudGllcyByZWxhdGVkIHRvIFByb2R1Y3QgWCwgdGhvc2UgcGVyZm9ybWFuY2UgY2xhaW1zIGFuZAord2FycmFudGllcyBhcmUgc3VjaCBDb21tZXJjaWFsIENvbnRyaWJ1dG9yJ3MgcmVzcG9uc2liaWxpdHkgYWxvbmUuIFVuZGVyIHRoaXMKK3NlY3Rpb24sIHRoZSBDb21tZXJjaWFsIENvbnRyaWJ1dG9yIHdvdWxkIGhhdmUgdG8gZGVmZW5kIGNsYWltcyBhZ2FpbnN0IHRoZQorb3RoZXIgQ29udHJpYnV0b3JzIHJlbGF0ZWQgdG8gdGhvc2UgcGVyZm9ybWFuY2UgY2xhaW1zIGFuZCB3YXJyYW50aWVzLCBhbmQgaWYgYQorY291cnQgcmVxdWlyZXMgYW55IG90aGVyIENvbnRyaWJ1dG9yIHRvIHBheSBhbnkgZGFtYWdlcyBhcyBhIHJlc3VsdCwgdGhlCitDb21tZXJjaWFsIENvbnRyaWJ1dG9yIG11c3QgcGF5IHRob3NlIGRhbWFnZXMuPC9zcGFuPiA8L3A+CisKKzxwPjxiPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz41LiBOTyBXQVJSQU5UWTwvc3Bhbj48L2I+IDwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkVYQ0VQVCBBUyBFWFBSRVNTTFkgU0VUIEZPUlRIIElOIFRISVMKK0FHUkVFTUVOVCwgVEhFIFBST0dSQU0gSVMgUFJPVklERUQgT04gQU4gJnF1b3Q7QVMgSVMmcXVvdDsgQkFTSVMsIFdJVEhPVVQKK1dBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgRUlUSEVSIEVYUFJFU1MgT1IgSU1QTElFRCBJTkNMVURJTkcsCitXSVRIT1VUIExJTUlUQVRJT04sIEFOWSBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgVElUTEUsIE5PTi1JTkZSSU5HRU1FTlQsCitNRVJDSEFOVEFCSUxJVFkgT1IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIEVhY2ggUmVjaXBpZW50IGlzIHNvbGVseQorcmVzcG9uc2libGUgZm9yIGRldGVybWluaW5nIHRoZSBhcHByb3ByaWF0ZW5lc3Mgb2YgdXNpbmcgYW5kIGRpc3RyaWJ1dGluZyB0aGUKK1Byb2dyYW0gYW5kIGFzc3VtZXMgYWxsIHJpc2tzIGFzc29jaWF0ZWQgd2l0aCBpdHMgZXhlcmNpc2Ugb2YgcmlnaHRzIHVuZGVyIHRoaXMKK0FncmVlbWVudCAsIGluY2x1ZGluZyBidXQgbm90IGxpbWl0ZWQgdG8gdGhlIHJpc2tzIGFuZCBjb3N0cyBvZiBwcm9ncmFtIGVycm9ycywKK2NvbXBsaWFuY2Ugd2l0aCBhcHBsaWNhYmxlIGxhd3MsIGRhbWFnZSB0byBvciBsb3NzIG9mIGRhdGEsIHByb2dyYW1zIG9yCitlcXVpcG1lbnQsIGFuZCB1bmF2YWlsYWJpbGl0eSBvciBpbnRlcnJ1cHRpb24gb2Ygb3BlcmF0aW9ucy4gPC9zcGFuPjwvcD4KKworPHA+PGI+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPjYuIERJU0NMQUlNRVIgT0YgTElBQklMSVRZPC9zcGFuPjwvYj4gPC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+RVhDRVBUIEFTIEVYUFJFU1NMWSBTRVQgRk9SVEggSU4gVEhJUworQUdSRUVNRU5ULCBORUlUSEVSIFJFQ0lQSUVOVCBOT1IgQU5ZIENPTlRSSUJVVE9SUyBTSEFMTCBIQVZFIEFOWSBMSUFCSUxJVFkgRk9SCitBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyhJTkNMVURJTkcgV0lUSE9VVCBMSU1JVEFUSU9OIExPU1QgUFJPRklUUyksIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCitPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORworTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPUiBESVNUUklCVVRJT04gT0YKK1RIRSBQUk9HUkFNIE9SIFRIRSBFWEVSQ0lTRSBPRiBBTlkgUklHSFRTIEdSQU5URUQgSEVSRVVOREVSLCBFVkVOIElGIEFEVklTRUQgT0YKK1RIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRVMuPC9zcGFuPiA8L3A+CisKKzxwPjxiPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz43LiBHRU5FUkFMPC9zcGFuPjwvYj4gPC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+SWYgYW55IHByb3Zpc2lvbiBvZiB0aGlzIEFncmVlbWVudCBpcyBpbnZhbGlkCitvciB1bmVuZm9yY2VhYmxlIHVuZGVyIGFwcGxpY2FibGUgbGF3LCBpdCBzaGFsbCBub3QgYWZmZWN0IHRoZSB2YWxpZGl0eSBvcgorZW5mb3JjZWFiaWxpdHkgb2YgdGhlIHJlbWFpbmRlciBvZiB0aGUgdGVybXMgb2YgdGhpcyBBZ3JlZW1lbnQsIGFuZCB3aXRob3V0CitmdXJ0aGVyIGFjdGlvbiBieSB0aGUgcGFydGllcyBoZXJldG8sIHN1Y2ggcHJvdmlzaW9uIHNoYWxsIGJlIHJlZm9ybWVkIHRvIHRoZQorbWluaW11bSBleHRlbnQgbmVjZXNzYXJ5IHRvIG1ha2Ugc3VjaCBwcm92aXNpb24gdmFsaWQgYW5kIGVuZm9yY2VhYmxlLjwvc3Bhbj4gPC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+SWYgUmVjaXBpZW50IGluc3RpdHV0ZXMgcGF0ZW50IGxpdGlnYXRpb24KK2FnYWluc3QgYW55IGVudGl0eSAoaW5jbHVkaW5nIGEgY3Jvc3MtY2xhaW0gb3IgY291bnRlcmNsYWltIGluIGEgbGF3c3VpdCkKK2FsbGVnaW5nIHRoYXQgdGhlIFByb2dyYW0gaXRzZWxmIChleGNsdWRpbmcgY29tYmluYXRpb25zIG9mIHRoZSBQcm9ncmFtIHdpdGgKK290aGVyIHNvZnR3YXJlIG9yIGhhcmR3YXJlKSBpbmZyaW5nZXMgc3VjaCBSZWNpcGllbnQncyBwYXRlbnQocyksIHRoZW4gc3VjaAorUmVjaXBpZW50J3MgcmlnaHRzIGdyYW50ZWQgdW5kZXIgU2VjdGlvbiAyKGIpIHNoYWxsIHRlcm1pbmF0ZSBhcyBvZiB0aGUgZGF0ZQorc3VjaCBsaXRpZ2F0aW9uIGlzIGZpbGVkLiA8L3NwYW4+PC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+QWxsIFJlY2lwaWVudCdzIHJpZ2h0cyB1bmRlciB0aGlzIEFncmVlbWVudAorc2hhbGwgdGVybWluYXRlIGlmIGl0IGZhaWxzIHRvIGNvbXBseSB3aXRoIGFueSBvZiB0aGUgbWF0ZXJpYWwgdGVybXMgb3IKK2NvbmRpdGlvbnMgb2YgdGhpcyBBZ3JlZW1lbnQgYW5kIGRvZXMgbm90IGN1cmUgc3VjaCBmYWlsdXJlIGluIGEgcmVhc29uYWJsZQorcGVyaW9kIG9mIHRpbWUgYWZ0ZXIgYmVjb21pbmcgYXdhcmUgb2Ygc3VjaCBub25jb21wbGlhbmNlLiBJZiBhbGwgUmVjaXBpZW50J3MKK3JpZ2h0cyB1bmRlciB0aGlzIEFncmVlbWVudCB0ZXJtaW5hdGUsIFJlY2lwaWVudCBhZ3JlZXMgdG8gY2Vhc2UgdXNlIGFuZAorZGlzdHJpYnV0aW9uIG9mIHRoZSBQcm9ncmFtIGFzIHNvb24gYXMgcmVhc29uYWJseSBwcmFjdGljYWJsZS4gSG93ZXZlciwKK1JlY2lwaWVudCdzIG9ibGlnYXRpb25zIHVuZGVyIHRoaXMgQWdyZWVtZW50IGFuZCBhbnkgbGljZW5zZXMgZ3JhbnRlZCBieQorUmVjaXBpZW50IHJlbGF0aW5nIHRvIHRoZSBQcm9ncmFtIHNoYWxsIGNvbnRpbnVlIGFuZCBzdXJ2aXZlLiA8L3NwYW4+PC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+RXZlcnlvbmUgaXMgcGVybWl0dGVkIHRvIGNvcHkgYW5kIGRpc3RyaWJ1dGUKK2NvcGllcyBvZiB0aGlzIEFncmVlbWVudCwgYnV0IGluIG9yZGVyIHRvIGF2b2lkIGluY29uc2lzdGVuY3kgdGhlIEFncmVlbWVudCBpcworY29weXJpZ2h0ZWQgYW5kIG1heSBvbmx5IGJlIG1vZGlmaWVkIGluIHRoZSBmb2xsb3dpbmcgbWFubmVyLiBUaGUgQWdyZWVtZW50CitTdGV3YXJkIHJlc2VydmVzIHRoZSByaWdodCB0byBwdWJsaXNoIG5ldyB2ZXJzaW9ucyAoaW5jbHVkaW5nIHJldmlzaW9ucykgb2YKK3RoaXMgQWdyZWVtZW50IGZyb20gdGltZSB0byB0aW1lLiBObyBvbmUgb3RoZXIgdGhhbiB0aGUgQWdyZWVtZW50IFN0ZXdhcmQgaGFzCit0aGUgcmlnaHQgdG8gbW9kaWZ5IHRoaXMgQWdyZWVtZW50LiBUaGUgRWNsaXBzZSBGb3VuZGF0aW9uIGlzIHRoZSBpbml0aWFsCitBZ3JlZW1lbnQgU3Rld2FyZC4gVGhlIEVjbGlwc2UgRm91bmRhdGlvbiBtYXkgYXNzaWduIHRoZSByZXNwb25zaWJpbGl0eSB0bworc2VydmUgYXMgdGhlIEFncmVlbWVudCBTdGV3YXJkIHRvIGEgc3VpdGFibGUgc2VwYXJhdGUgZW50aXR5LiBFYWNoIG5ldyB2ZXJzaW9uCitvZiB0aGUgQWdyZWVtZW50IHdpbGwgYmUgZ2l2ZW4gYSBkaXN0aW5ndWlzaGluZyB2ZXJzaW9uIG51bWJlci4gVGhlIFByb2dyYW0KKyhpbmNsdWRpbmcgQ29udHJpYnV0aW9ucykgbWF5IGFsd2F5cyBiZSBkaXN0cmlidXRlZCBzdWJqZWN0IHRvIHRoZSB2ZXJzaW9uIG9mCit0aGUgQWdyZWVtZW50IHVuZGVyIHdoaWNoIGl0IHdhcyByZWNlaXZlZC4gSW4gYWRkaXRpb24sIGFmdGVyIGEgbmV3IHZlcnNpb24gb2YKK3RoZSBBZ3JlZW1lbnQgaXMgcHVibGlzaGVkLCBDb250cmlidXRvciBtYXkgZWxlY3QgdG8gZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbQorKGluY2x1ZGluZyBpdHMgQ29udHJpYnV0aW9ucykgdW5kZXIgdGhlIG5ldyB2ZXJzaW9uLiBFeGNlcHQgYXMgZXhwcmVzc2x5IHN0YXRlZAoraW4gU2VjdGlvbnMgMihhKSBhbmQgMihiKSBhYm92ZSwgUmVjaXBpZW50IHJlY2VpdmVzIG5vIHJpZ2h0cyBvciBsaWNlbnNlcyB0bwordGhlIGludGVsbGVjdHVhbCBwcm9wZXJ0eSBvZiBhbnkgQ29udHJpYnV0b3IgdW5kZXIgdGhpcyBBZ3JlZW1lbnQsIHdoZXRoZXIKK2V4cHJlc3NseSwgYnkgaW1wbGljYXRpb24sIGVzdG9wcGVsIG9yIG90aGVyd2lzZS4gQWxsIHJpZ2h0cyBpbiB0aGUgUHJvZ3JhbSBub3QKK2V4cHJlc3NseSBncmFudGVkIHVuZGVyIHRoaXMgQWdyZWVtZW50IGFyZSByZXNlcnZlZC48L3NwYW4+IDwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPlRoaXMgQWdyZWVtZW50IGlzIGdvdmVybmVkIGJ5IHRoZSBsYXdzIG9mIHRoZQorU3RhdGUgb2YgTmV3IFlvcmsgYW5kIHRoZSBpbnRlbGxlY3R1YWwgcHJvcGVydHkgbGF3cyBvZiB0aGUgVW5pdGVkIFN0YXRlcyBvZgorQW1lcmljYS4gTm8gcGFydHkgdG8gdGhpcyBBZ3JlZW1lbnQgd2lsbCBicmluZyBhIGxlZ2FsIGFjdGlvbiB1bmRlciB0aGlzCitBZ3JlZW1lbnQgbW9yZSB0aGFuIG9uZSB5ZWFyIGFmdGVyIHRoZSBjYXVzZSBvZiBhY3Rpb24gYXJvc2UuIEVhY2ggcGFydHkgd2FpdmVzCitpdHMgcmlnaHRzIHRvIGEganVyeSB0cmlhbCBpbiBhbnkgcmVzdWx0aW5nIGxpdGlnYXRpb24uPC9zcGFuPiA8L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbD48IVtpZiAhc3VwcG9ydEVtcHR5UGFyYXNdPiZuYnNwOzwhW2VuZGlmXT48bzpwPjwvbzpwPjwvcD4KKworPC9kaXY+CisKKzwvYm9keT4KKworPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5yZXBvcnRzL2ljb25zL3NhbXBsZS5naWYgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkucmVwb3J0cy9pY29ucy9zYW1wbGUuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM0ZmIzYzkKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkucmVwb3J0cy9pY29ucy9zYW1wbGUuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5yZXBvcnRzL25vdGljZS5odG1sIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLnJlcG9ydHMvbm90aWNlLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzZhZjk2NgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5yZXBvcnRzL25vdGljZS5odG1sCkBAIC0wLDAgKzEsNzkgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAvL0VOIj4KKzxodG1sPgorPGhlYWQ+Cis8bWV0YSBodHRwLWVxdWl2PUNvbnRlbnQtVHlwZSBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9aXNvLTg4NTktMSI+Cis8dGl0bGU+RWNsaXBzZS5vcmcgU29mdHdhcmUgVXNlciBBZ3JlZW1lbnQ8L3RpdGxlPgorPC9oZWFkPgorCis8Ym9keSBsYW5nPSJFTi1VUyIgbGluaz1ibHVlIHZsaW5rPXB1cnBsZT4KKzxoMj5FY2xpcHNlIEZvdW5kYXRpb24gU29mdHdhcmUgVXNlciBBZ3JlZW1lbnQ8L2gyPgorPHA+TWFyY2ggMTcsIDIwMDU8L3A+CisKKzxoMz5Vc2FnZSBPZiBDb250ZW50PC9oMz4KKworPHA+VEhFIEVDTElQU0UgRk9VTkRBVElPTiBNQUtFUyBBVkFJTEFCTEUgU09GVFdBUkUsIERPQ1VNRU5UQVRJT04sIElORk9STUFUSU9OIEFORC9PUiBPVEhFUiBNQVRFUklBTFMgRk9SIE9QRU4gU09VUkNFIFBST0pFQ1RTCisgICAoQ09MTEVDVElWRUxZICZxdW90O0NPTlRFTlQmcXVvdDspLiAgVVNFIE9GIFRIRSBDT05URU5UIElTIEdPVkVSTkVEIEJZIFRIRSBURVJNUyBBTkQgQ09ORElUSU9OUyBPRiBUSElTIEFHUkVFTUVOVCBBTkQvT1IgVEhFIFRFUk1TIEFORAorICAgQ09ORElUSU9OUyBPRiBMSUNFTlNFIEFHUkVFTUVOVFMgT1IgTk9USUNFUyBJTkRJQ0FURUQgT1IgUkVGRVJFTkNFRCBCRUxPVy4gIEJZIFVTSU5HIFRIRSBDT05URU5ULCBZT1UgQUdSRUUgVEhBVCBZT1VSIFVTRQorICAgT0YgVEhFIENPTlRFTlQgSVMgR09WRVJORUQgQlkgVEhJUyBBR1JFRU1FTlQgQU5EL09SIFRIRSBURVJNUyBBTkQgQ09ORElUSU9OUyBPRiBBTlkgQVBQTElDQUJMRSBMSUNFTlNFIEFHUkVFTUVOVFMgT1IKKyAgIE5PVElDRVMgSU5ESUNBVEVEIE9SIFJFRkVSRU5DRUQgQkVMT1cuICBJRiBZT1UgRE8gTk9UIEFHUkVFIFRPIFRIRSBURVJNUyBBTkQgQ09ORElUSU9OUyBPRiBUSElTIEFHUkVFTUVOVCBBTkQgVEhFIFRFUk1TIEFORAorICAgQ09ORElUSU9OUyBPRiBBTlkgQVBQTElDQUJMRSBMSUNFTlNFIEFHUkVFTUVOVFMgT1IgTk9USUNFUyBJTkRJQ0FURUQgT1IgUkVGRVJFTkNFRCBCRUxPVywgVEhFTiBZT1UgTUFZIE5PVCBVU0UgVEhFIENPTlRFTlQuPC9wPgorICAgCis8aDM+QXBwbGljYWJsZSBMaWNlbnNlczwvaDM+ICAgCisgICAKKzxwPlVubGVzcyBvdGhlcndpc2UgaW5kaWNhdGVkLCBhbGwgQ29udGVudCBtYWRlIGF2YWlsYWJsZSBieSB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uIGlzIHByb3ZpZGVkIHRvIHlvdSB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjAKKyAgICgmcXVvdDtFUEwmcXVvdDspLiAgQSBjb3B5IG9mIHRoZSBFUEwgaXMgcHJvdmlkZWQgd2l0aCB0aGlzIENvbnRlbnQgYW5kIGlzIGFsc28gYXZhaWxhYmxlIGF0IDxhIGhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sIj5odHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbDwvYT4uCisgICBGb3IgcHVycG9zZXMgb2YgdGhlIEVQTCwgJnF1b3Q7UHJvZ3JhbSZxdW90OyB3aWxsIG1lYW4gdGhlIENvbnRlbnQuPC9wPgorCis8cD5Db250ZW50IGluY2x1ZGVzLCBidXQgaXMgbm90IGxpbWl0ZWQgdG8sIHNvdXJjZSBjb2RlLCBvYmplY3QgY29kZSwgZG9jdW1lbnRhdGlvbiBhbmQgb3RoZXIgZmlsZXMgbWFpbnRhaW5lZCBpbiB0aGUgRWNsaXBzZS5vcmcgQ1ZTIHJlcG9zaXRvcnkgKCZxdW90O1JlcG9zaXRvcnkmcXVvdDspIGluIENWUworICAgbW9kdWxlcyAoJnF1b3Q7TW9kdWxlcyZxdW90OykgYW5kIG1hZGUgYXZhaWxhYmxlIGFzIGRvd25sb2FkYWJsZSBhcmNoaXZlcyAoJnF1b3Q7RG93bmxvYWRzJnF1b3Q7KS48L3A+CisgICAKKzx1bD4KKwk8bGk+Q29udGVudCBtYXkgYmUgc3RydWN0dXJlZCBhbmQgcGFja2FnZWQgaW50byBtb2R1bGVzIHRvIGZhY2lsaXRhdGUgZGVsaXZlcmluZywgZXh0ZW5kaW5nLCBhbmQgdXBncmFkaW5nIHRoZSBDb250ZW50LiAgVHlwaWNhbCBtb2R1bGVzIG1heSBpbmNsdWRlIHBsdWctaW5zICgmcXVvdDtQbHVnLWlucyZxdW90OyksIHBsdWctaW4gZnJhZ21lbnRzICgmcXVvdDtGcmFnbWVudHMmcXVvdDspLCBhbmQgZmVhdHVyZXMgKCZxdW90O0ZlYXR1cmVzJnF1b3Q7KS48L2xpPgorCTxsaT5FYWNoIFBsdWctaW4gb3IgRnJhZ21lbnQgbWF5IGJlIHBhY2thZ2VkIGFzIGEgc3ViLWRpcmVjdG9yeSBvciBKQVIgKEphdmEmdHJhZGU7IEFSY2hpdmUpIGluIGEgZGlyZWN0b3J5IG5hbWVkICZxdW90O3BsdWdpbnMmcXVvdDsuPC9saT4KKwk8bGk+QSBGZWF0dXJlIGlzIGEgYnVuZGxlIG9mIG9uZSBvciBtb3JlIFBsdWctaW5zIGFuZC9vciBGcmFnbWVudHMgYW5kIGFzc29jaWF0ZWQgbWF0ZXJpYWwuICBFYWNoIEZlYXR1cmUgbWF5IGJlIHBhY2thZ2VkIGFzIGEgc3ViLWRpcmVjdG9yeSBpbiBhIGRpcmVjdG9yeSBuYW1lZCAmcXVvdDtmZWF0dXJlcyZxdW90Oy4gIFdpdGhpbiBhIEZlYXR1cmUsIGZpbGVzIG5hbWVkICZxdW90O2ZlYXR1cmUueG1sJnF1b3Q7IG1heSBjb250YWluIGEgbGlzdCBvZiB0aGUgbmFtZXMgYW5kIHZlcnNpb24gbnVtYmVycyBvZiB0aGUgUGx1Zy1pbnMKKyAgICAgIGFuZC9vciBGcmFnbWVudHMgYXNzb2NpYXRlZCB3aXRoIHRoYXQgRmVhdHVyZS48L2xpPgorCTxsaT5GZWF0dXJlcyBtYXkgYWxzbyBpbmNsdWRlIG90aGVyIEZlYXR1cmVzICgmcXVvdDtJbmNsdWRlZCBGZWF0dXJlcyZxdW90OykuIFdpdGhpbiBhIEZlYXR1cmUsIGZpbGVzIG5hbWVkICZxdW90O2ZlYXR1cmUueG1sJnF1b3Q7IG1heSBjb250YWluIGEgbGlzdCBvZiB0aGUgbmFtZXMgYW5kIHZlcnNpb24gbnVtYmVycyBvZiBJbmNsdWRlZCBGZWF0dXJlcy48L2xpPgorPC91bD4gICAKKyAKKzxwPlRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBnb3Zlcm5pbmcgUGx1Zy1pbnMgYW5kIEZyYWdtZW50cyBzaG91bGQgYmUgY29udGFpbmVkIGluIGZpbGVzIG5hbWVkICZxdW90O2Fib3V0Lmh0bWwmcXVvdDsgKCZxdW90O0Fib3V0cyZxdW90OykuIFRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBnb3Zlcm5pbmcgRmVhdHVyZXMgYW5kCitJbmNsdWRlZCBGZWF0dXJlcyBzaG91bGQgYmUgY29udGFpbmVkIGluIGZpbGVzIG5hbWVkICZxdW90O2xpY2Vuc2UuaHRtbCZxdW90OyAoJnF1b3Q7RmVhdHVyZSBMaWNlbnNlcyZxdW90OykuICBBYm91dHMgYW5kIEZlYXR1cmUgTGljZW5zZXMgbWF5IGJlIGxvY2F0ZWQgaW4gYW55IGRpcmVjdG9yeSBvZiBhIERvd25sb2FkIG9yIE1vZHVsZQoraW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG8gdGhlIGZvbGxvd2luZyBsb2NhdGlvbnM6PC9wPgorCis8dWw+CisJPGxpPlRoZSB0b3AtbGV2ZWwgKHJvb3QpIGRpcmVjdG9yeTwvbGk+CisJPGxpPlBsdWctaW4gYW5kIEZyYWdtZW50IGRpcmVjdG9yaWVzPC9saT4KKwk8bGk+SW5zaWRlIFBsdWctaW5zIGFuZCBGcmFnbWVudHMgcGFja2FnZWQgYXMgSkFSczwvbGk+CisJPGxpPlN1Yi1kaXJlY3RvcmllcyBvZiB0aGUgZGlyZWN0b3J5IG5hbWVkICZxdW90O3NyYyZxdW90OyBvZiBjZXJ0YWluIFBsdWctaW5zPC9saT4KKwk8bGk+RmVhdHVyZSBkaXJlY3RvcmllczwvbGk+Cis8L3VsPgorCQkKKzxwPk5vdGU6IGlmIGEgRmVhdHVyZSBtYWRlIGF2YWlsYWJsZSBieSB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uIGlzIGluc3RhbGxlZCB1c2luZyB0aGUgRWNsaXBzZSBVcGRhdGUgTWFuYWdlciwgeW91IG11c3QgYWdyZWUgdG8gYSBsaWNlbnNlICgmcXVvdDtGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlJnF1b3Q7KSBkdXJpbmcgdGhlCitpbnN0YWxsYXRpb24gcHJvY2Vzcy4gIElmIHRoZSBGZWF0dXJlIGNvbnRhaW5zIEluY2x1ZGVkIEZlYXR1cmVzLCB0aGUgRmVhdHVyZSBVcGRhdGUgTGljZW5zZSBzaG91bGQgZWl0aGVyIHByb3ZpZGUgeW91IHdpdGggdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIGdvdmVybmluZyB0aGUgSW5jbHVkZWQgRmVhdHVyZXMgb3IKK2luZm9ybSB5b3Ugd2hlcmUgeW91IGNhbiBsb2NhdGUgdGhlbS4gIEZlYXR1cmUgVXBkYXRlIExpY2Vuc2VzIG1heSBiZSBmb3VuZCBpbiB0aGUgJnF1b3Q7bGljZW5zZSZxdW90OyBwcm9wZXJ0eSBvZiBmaWxlcyBuYW1lZCAmcXVvdDtmZWF0dXJlLnByb3BlcnRpZXMmcXVvdDsgZm91bmQgd2l0aGluIGEgRmVhdHVyZS4KK1N1Y2ggQWJvdXRzLCBGZWF0dXJlIExpY2Vuc2VzLCBhbmQgRmVhdHVyZSBVcGRhdGUgTGljZW5zZXMgY29udGFpbiB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgKG9yIHJlZmVyZW5jZXMgdG8gc3VjaCB0ZXJtcyBhbmQgY29uZGl0aW9ucykgdGhhdCBnb3Zlcm4geW91ciB1c2Ugb2YgdGhlIGFzc29jaWF0ZWQgQ29udGVudCBpbgordGhhdCBkaXJlY3RvcnkuPC9wPgorCis8cD5USEUgQUJPVVRTLCBGRUFUVVJFIExJQ0VOU0VTLCBBTkQgRkVBVFVSRSBVUERBVEUgTElDRU5TRVMgTUFZIFJFRkVSIFRPIFRIRSBFUEwgT1IgT1RIRVIgTElDRU5TRSBBR1JFRU1FTlRTLCBOT1RJQ0VTIE9SIFRFUk1TIEFORCBDT05ESVRJT05TLiAgU09NRSBPRiBUSEVTRQorT1RIRVIgTElDRU5TRSBBR1JFRU1FTlRTIE1BWSBJTkNMVURFIChCVVQgQVJFIE5PVCBMSU1JVEVEIFRPKTo8L3A+CisKKzx1bD4KKwk8bGk+Q29tbW9uIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4wIChhdmFpbGFibGUgYXQgPGEgaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9jcGwtdjEwLmh0bWwiPmh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvY3BsLXYxMC5odG1sPC9hPik8L2xpPgorCTxsaT5BcGFjaGUgU29mdHdhcmUgTGljZW5zZSAxLjEgKGF2YWlsYWJsZSBhdCA8YSBocmVmPSJodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRSI+aHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0U8L2E+KTwvbGk+CisJPGxpPkFwYWNoZSBTb2Z0d2FyZSBMaWNlbnNlIDIuMCAoYXZhaWxhYmxlIGF0IDxhIGhyZWY9Imh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMCI+aHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wPC9hPik8L2xpPgorCTxsaT5JQk0gUHVibGljIExpY2Vuc2UgMS4wIChhdmFpbGFibGUgYXQgPGEgaHJlZj0iaHR0cDovL29zcy5zb2Z0d2FyZS5pYm0uY29tL2RldmVsb3BlcndvcmtzL29wZW5zb3VyY2UvbGljZW5zZTEwLmh0bWwiPmh0dHA6Ly9vc3Muc29mdHdhcmUuaWJtLmNvbS9kZXZlbG9wZXJ3b3Jrcy9vcGVuc291cmNlL2xpY2Vuc2UxMC5odG1sPC9hPik8L2xpPgkKKwk8bGk+TWV0cm8gTGluayBQdWJsaWMgTGljZW5zZSAxLjAwIChhdmFpbGFibGUgYXQgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuZ3JvdXAub3JnL29wZW5tb3RpZi9zdXBwb3J0ZXJzL21ldHJvbGluay9saWNlbnNlLmh0bWwiPmh0dHA6Ly93d3cub3Blbmdyb3VwLm9yZy9vcGVubW90aWYvc3VwcG9ydGVycy9tZXRyb2xpbmsvbGljZW5zZS5odG1sPC9hPik8L2xpPgorCTxsaT5Nb3ppbGxhIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4xIChhdmFpbGFibGUgYXQgPGEgaHJlZj0iaHR0cDovL3d3dy5tb3ppbGxhLm9yZy9NUEwvTVBMLTEuMS5odG1sIj5odHRwOi8vd3d3Lm1vemlsbGEub3JnL01QTC9NUEwtMS4xLmh0bWw8L2E+KTwvbGk+Cis8L3VsPgorCis8cD5JVCBJUyBZT1VSIE9CTElHQVRJT04gVE8gUkVBRCBBTkQgQUNDRVBUIEFMTCBTVUNIIFRFUk1TIEFORCBDT05ESVRJT05TIFBSSU9SIFRPIFVTRSBPRiBUSEUgQ09OVEVOVC4gIElmIG5vIEFib3V0LCBGZWF0dXJlIExpY2Vuc2UsIG9yIEZlYXR1cmUgVXBkYXRlIExpY2Vuc2UgaXMgcHJvdmlkZWQsIHBsZWFzZQorY29udGFjdCB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uIHRvIGRldGVybWluZSB3aGF0IHRlcm1zIGFuZCBjb25kaXRpb25zIGdvdmVybiB0aGF0IHBhcnRpY3VsYXIgQ29udGVudC48L3A+CisKKzxoMz5DcnlwdG9ncmFwaHk8L2gzPgorCis8cD5Db250ZW50IG1heSBjb250YWluIGVuY3J5cHRpb24gc29mdHdhcmUuIFRoZSBjb3VudHJ5IGluIHdoaWNoIHlvdSBhcmUgY3VycmVudGx5IG1heSBoYXZlIHJlc3RyaWN0aW9ucyBvbiB0aGUgaW1wb3J0LCBwb3NzZXNzaW9uLCBhbmQgdXNlLCBhbmQvb3IgcmUtZXhwb3J0IHRvCisgICBhbm90aGVyIGNvdW50cnksIG9mIGVuY3J5cHRpb24gc29mdHdhcmUuIEJFRk9SRSB1c2luZyBhbnkgZW5jcnlwdGlvbiBzb2Z0d2FyZSwgcGxlYXNlIGNoZWNrIHRoZSBjb3VudHJ5J3MgbGF3cywgcmVndWxhdGlvbnMgYW5kIHBvbGljaWVzIGNvbmNlcm5pbmcgdGhlIGltcG9ydCwKKyAgIHBvc3Nlc3Npb24sIG9yIHVzZSwgYW5kIHJlLWV4cG9ydCBvZiBlbmNyeXB0aW9uIHNvZnR3YXJlLCB0byBzZWUgaWYgdGhpcyBpcyBwZXJtaXR0ZWQuPC9wPgorICAgCis8c21hbGw+SmF2YSBhbmQgYWxsIEphdmEtYmFzZWQgdHJhZGVtYXJrcyBhcmUgdHJhZGVtYXJrcyBvZiBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuIGluIHRoZSBVbml0ZWQgU3RhdGVzLCBvdGhlciBjb3VudHJpZXMsIG9yIGJvdGguPC9zbWFsbD4gICAKKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5yZXBvcnRzL3BsdWdpbi5wcm9wZXJ0aWVzIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLnJlcG9ydHMvcGx1Z2luLnByb3BlcnRpZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGI2MzAyYgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5yZXBvcnRzL3BsdWdpbi5wcm9wZXJ0aWVzCkBAIC0wLDAgKzEsMTggQEAKKyMvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIyAqIENvcHlyaWdodCAoYykgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyMgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisjICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisjICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyMgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorIyAqCisjICogQ29udHJpYnV0b3JzOgorIyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCitwbHVnaW5OYW1lID0gU1RFTSBDaGFydHMgYW5kIFJlcG9ydHMgVUkKK3Byb3ZpZGVyTmFtZSA9IEVjbGlwc2Uub3JnCisKK1RTX1ZpZXcgPSBUaW1lIFNlcmllcworUFNfVmlldyA9IFBoYXNlIFNwYWNlCitBU19WaWV3ID0gQWdncmVnYXRlIFRpbWUgU2VyaWVzClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLnJlcG9ydHMvcGx1Z2luLnhtbCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5yZXBvcnRzL3BsdWdpbi54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDNmZjNmMAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5yZXBvcnRzL3BsdWdpbi54bWwKQEAgLTAsMCArMSw2NiBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzw/ZWNsaXBzZSB2ZXJzaW9uPSIzLjIiPz4KKzxwbHVnaW4+CisgICA8ZXh0ZW5zaW9uCisgICAgICAgICBpZD0ib3JnLmVjbGlwc2Uuc3RlbS51aS5TVEVNUGVyc3BlY3RpdmUiCisgICAgICAgICBwb2ludD0ib3JnLmVjbGlwc2UudWkucGVyc3BlY3RpdmVzIj4KKyAgIDwvZXh0ZW5zaW9uPgorCisgICA8ZXh0ZW5zaW9uCisgICAgICAgICBwb2ludD0ib3JnLmVjbGlwc2UudWkudmlld3MiPgorICAgICAgPHZpZXcKKyAgICAgICAgICAgIGFsbG93TXVsdGlwbGU9InRydWUiCisgICAgICAgICAgICBjYXRlZ29yeT0ib3JnLmVjbGlwc2Uuc3RlbS51aS52aWV3cyIKKyAgICAgICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS5zdGVtLnVpLnJlcG9ydHMudmlld3MuVGltZVNlcmllc1ZpZXciCisgICAgICAgICAgICBpY29uPSJpY29ucy9zYW1wbGUuZ2lmIgorICAgICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLnN0ZW0udWkudmlld3MucmVwb3J0cyIKKyAgICAgICAgICAgIG5hbWU9IiVUU19WaWV3Ij4KKyAgICAgICAgIFJlcG9ydHMKKyAgICAgIDwvdmlldz4KKyAgICAgIDx2aWV3CisgICAgICAgICAgICBhbGxvd011bHRpcGxlPSJ0cnVlIgorICAgICAgICAgICAgY2F0ZWdvcnk9Im9yZy5lY2xpcHNlLnN0ZW0udWkudmlld3MiCisgICAgICAgICAgICBjbGFzcz0ib3JnLmVjbGlwc2Uuc3RlbS51aS5yZXBvcnRzLnZpZXdzLlBoYXNlU3BhY2VWaWV3IgorICAgICAgICAgICAgaWNvbj0iaWNvbnMvc2FtcGxlLmdpZiIKKyAgICAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5zdGVtLnVpLnZpZXdzLnJlcG9ydHMucGhhc2VTcGFjZSIKKyAgICAgICAgICAgIG5hbWU9IiVQU19WaWV3Ij4KKyAgICAgIDwvdmlldz4KKyAgICAgIDx2aWV3CisgICAgICAJCWFsbG93TXVsdGlwbGU9InRydWUiCisgICAgICAgICAgICBjYXRlZ29yeT0ib3JnLmVjbGlwc2Uuc3RlbS51aS52aWV3cyIKKyAgICAgICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS5zdGVtLnVpLnJlcG9ydHMudmlld3MuQWdncmVnYXRlVGltZVNlcmllc1ZpZXciCisgICAgICAgICAgICBpY29uPSJpY29ucy9zYW1wbGUuZ2lmIgorICAgICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLnN0ZW0udWkudmlld3MucmVwb3J0cy5hZ2dyZWdhdGUiCisgICAgICAgICAgICBuYW1lPSIlQVNfVmlldyI+CisgICAgICA8L3ZpZXc+CisgICA8L2V4dGVuc2lvbj4KKyAgIAorICAgPGV4dGVuc2lvbiBwb2ludD0ib3JnLmVjbGlwc2UudWkucG9wdXBNZW51cyI+CisJCTx2aWV3ZXJDb250cmlidXRpb24KKyAgICAgICAgCWlkPSJvcmcuZWNsaXBzZS5zdGVtLnVpLnJlcG9ydHMudmlld3MiCisgICAgICAgIAl0YXJnZXRJRD0ib3JnLmVjbGlwc2Uuc3RlbS51aS52aWV3cy5nZW9ncmFwaGljLm1hcC5jb250ZXh0Ij4KKwkgICAgCTxhY3Rpb24gCisJCSAgICAJaWQ9IlRpbWVTZXJpZXMiCisJCSAgICAJc3RhdGU9InRydWUiCisJICAgICAgIAkJbGFiZWw9IiVUU19WaWV3IgkgICAgICAgCQkKKwkgICAgICAgCQltZW51YmFyUGF0aD0icmVwb3J0cy9hZGRpdGlvbnMiCisJICAgICAgIAkJY2xhc3M9Im9yZy5lY2xpcHNlLnN0ZW0udWkucmVwb3J0cy52aWV3cy5SZXBvcnRzQ29udGV4dE1lbnVBY3Rpb24iPgkKKwkgICAgCTwvYWN0aW9uPgorCSAgICAJPGFjdGlvbiAKKwkJICAgIAlpZD0iUGhhc2VTcGFjZSIKKwkJICAgIAlzdGF0ZT0idHJ1ZSIKKwkgICAgICAgCQlsYWJlbD0iJVBTX1ZpZXciCisJICAgICAgIAkJbWVudWJhclBhdGg9InJlcG9ydHMvYWRkaXRpb25zIgorCSAgICAgICAJCWNsYXNzPSJvcmcuZWNsaXBzZS5zdGVtLnVpLnJlcG9ydHMudmlld3MuUmVwb3J0c0NvbnRleHRNZW51QWN0aW9uIj4JCisJICAgIAk8L2FjdGlvbj4KKwkgICAgCTxhY3Rpb24gCisJCSAgICAJaWQ9IkFnZ3JlZ2F0ZVRpbWVTZXJpZXMiCisJCSAgICAJc3RhdGU9InRydWUiCisJICAgICAgIAkJbGFiZWw9IiVBU19WaWV3IgorCSAgICAgICAJCW1lbnViYXJQYXRoPSJyZXBvcnRzL2FkZGl0aW9ucyIKKwkgICAgICAgCQljbGFzcz0ib3JnLmVjbGlwc2Uuc3RlbS51aS5yZXBvcnRzLnZpZXdzLlJlcG9ydHNDb250ZXh0TWVudUFjdGlvbiI+CQorCSAgICAJPC9hY3Rpb24+CisgICAgICAgPC92aWV3ZXJDb250cmlidXRpb24+CisgIDwvZXh0ZW5zaW9uPgorCis8L3BsdWdpbj4KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5yZXBvcnRzL3BsdWdpbl9kZS5wcm9wZXJ0aWVzIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLnJlcG9ydHMvcGx1Z2luX2RlLnByb3BlcnRpZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDViNTVjNwotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5yZXBvcnRzL3BsdWdpbl9kZS5wcm9wZXJ0aWVzCkBAIC0wLDAgKzEsMTggQEAKKyMvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIyAqIENvcHlyaWdodCAoYykgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyMgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisjICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisjICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyMgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorIyAqCisjICogQ29udHJpYnV0b3JzOgorIyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCitwbHVnaW5OYW1lPVNURU0gR3JhZmlrLSB1bmQgQmVyaWNodC1CZW51dHplcm9iZXJmbFx1MDBlNGNoZQorcHJvdmlkZXJOYW1lPUVjbGlwc2Uub3JnCisKK1RTX1ZpZXc9WmVpdHNlcmllCitQU19WaWV3PVBoYXNlbnJhdW0KK0FTX1ZpZXc9WmVpdHJlaWhlIGF1ZnN1bW1pZXJlbgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLnJlcG9ydHMvcGx1Z2luX2tyLnByb3BlcnRpZXMgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkucmVwb3J0cy9wbHVnaW5fa3IucHJvcGVydGllcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNTFlZGU2Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLnJlcG9ydHMvcGx1Z2luX2tyLnByb3BlcnRpZXMKQEAgLTAsMCArMSwxOCBAQAorIy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjICogQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorIyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyMgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyMgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorIyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisjICoKKyMgKiBDb250cmlidXRvcnM6CisjICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorIyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKK3BsdWdpbk5hbWU9U1RFTSBcdWNjMjhcdWQyYjggXHViYzBmIFx1YmNmNFx1YWNlMFx1YzExY1x1Yzc1OCBVSQorcHJvdmlkZXJOYW1lPUVjbGlwc2Uub3JnCisKK1RTX1ZpZXc9XHVkMGMwXHVjNzg0IFx1YzJkY1x1YjlhY1x1Yzk4OAorUFNfVmlldz1cdWIyZThcdWFjYzQgXHVhY2Y1XHVhYzA0CitBU19WaWV3PVx1YjIwNFx1YWNjNCBcdWMyZGNcdWFjMDQgXHVjMmRjXHViOWFjXHVjOTg4CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkucmVwb3J0cy9wbHVnaW5femgucHJvcGVydGllcyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5yZXBvcnRzL3BsdWdpbl96aC5wcm9wZXJ0aWVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE4NmIxNmUKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkucmVwb3J0cy9wbHVnaW5femgucHJvcGVydGllcwpAQCAtMCwwICsxLDE4IEBACisjLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyMgKiBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisjICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworIyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorIyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisjICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyMgKgorIyAqIENvbnRyaWJ1dG9yczoKKyMgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisjICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworcGx1Z2luTmFtZT1TVEVNXHU1NmZlXHU4ODY4XHU1NDhjXHU2MmE1XHU1NDRhXHU3NTRjXHU5NzYyCitwcm92aWRlck5hbWU9RWNsaXBzZS5vcmcKKworVFNfVmlldz1cdTY1ZjZcdTk1ZjRcdTVlOGZcdTUyMTcKK1BTX1ZpZXc9XHU3NmY4XHU3YTdhXHU5NWY0CitBU19WaWV3PVx1N2QyZlx1NTJhMFx1NzY4NFx1NjVmNlx1NWU4ZgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLnJlcG9ydHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvcmVwb3J0cy9BY3RpdmF0b3IuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5yZXBvcnRzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3JlcG9ydHMvQWN0aXZhdG9yLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTU1NGE4MQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5yZXBvcnRzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3JlcG9ydHMvQWN0aXZhdG9yLmphdmEKQEAgLTAsMCArMSwxNDYgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS51aS5yZXBvcnRzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TdGF0dXM7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UucmVzb3VyY2UuSW1hZ2VEZXNjcmlwdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLnBsdWdpbi5BYnN0cmFjdFVJUGx1Z2luOworaW1wb3J0IG9yZy5vc2dpLmZyYW1ld29yay5CdW5kbGVDb250ZXh0OworCisvKioKKyAqIFRoZSBhY3RpdmF0b3IgY2xhc3MgY29udHJvbHMgdGhlIHBsdWctaW4gbGlmZSBjeWNsZQorICovCitwdWJsaWMgY2xhc3MgQWN0aXZhdG9yIGV4dGVuZHMgQWJzdHJhY3RVSVBsdWdpbiB7CisKKwkvKioKKwkgKiBUaGUgcGx1Zy1pbiBJRAorCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFBMVUdJTl9JRCA9ICJvcmcuZWNsaXBzZS5zdGVtLnVpLnJlcG9ydHMiOyAvLyROT04tTkxTLTEkCisKKwkvLyBUaGUgc2hhcmVkIGluc3RhbmNlCisJcHJpdmF0ZSBzdGF0aWMgQWN0aXZhdG9yIHBsdWdpbjsKKworCS8qKgorCSAqIFRoZSBjb25zdHJ1Y3RvcgorCSAqLworCXB1YmxpYyBBY3RpdmF0b3IoKSB7CisJCXBsdWdpbiA9IHRoaXM7CisJfQorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS51aS5wbHVnaW4uQWJzdHJhY3RVSVBsdWdpbiNzdGFydChvcmcub3NnaS5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dCkKKwkgKi8KKwlwdWJsaWMgdm9pZCBzdGFydChCdW5kbGVDb250ZXh0IGNvbnRleHQpIHRocm93cyBFeGNlcHRpb24geworCQlzdXBlci5zdGFydChjb250ZXh0KTsKKwl9CisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnVpLnBsdWdpbi5BYnN0cmFjdFVJUGx1Z2luI3N0b3Aob3JnLm9zZ2kuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHQpCisJICovCisJcHVibGljIHZvaWQgc3RvcChCdW5kbGVDb250ZXh0IGNvbnRleHQpIHRocm93cyBFeGNlcHRpb24geworCQlwbHVnaW4gPSBudWxsOworCQlzdXBlci5zdG9wKGNvbnRleHQpOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIHNoYXJlZCBpbnN0YW5jZQorCSAqIAorCSAqIEByZXR1cm4gdGhlIHNoYXJlZCBpbnN0YW5jZQorCSAqLworCXB1YmxpYyBzdGF0aWMgQWN0aXZhdG9yIGdldERlZmF1bHQoKSB7CisJCXJldHVybiBwbHVnaW47CisJfQorCisJLyoqCisJICogUmV0dXJucyBhbiBpbWFnZSBkZXNjcmlwdG9yIGZvciB0aGUgaW1hZ2UgZmlsZSBhdCB0aGUgZ2l2ZW4gcGx1Zy1pbgorCSAqIHJlbGF0aXZlIHBhdGgKKwkgKiAKKwkgKiBAcGFyYW0gcGF0aAorCSAqICAgICAgICAgICAgdGhlIHBhdGgKKwkgKiBAcmV0dXJuIHRoZSBpbWFnZSBkZXNjcmlwdG9yCisJICovCisJcHVibGljIHN0YXRpYyBJbWFnZURlc2NyaXB0b3IgZ2V0SW1hZ2VEZXNjcmlwdG9yKFN0cmluZyBwYXRoKSB7CisJCXJldHVybiBpbWFnZURlc2NyaXB0b3JGcm9tUGx1Z2luKFBMVUdJTl9JRCwgcGF0aCk7CisJfQorCisJLyoqCisJICogTG9nIGFuIGVycm9yIHRvIHRoZSBJTG9nIGZvciB0aGlzIHBsdWdpbgorCSAqIAorCSAqIEBwYXJhbSBtZXNzYWdlCisJICogICAgICAgICAgICB0aGUgbG9jYWxpemVkIGVycm9yIG1lc3NhZ2UgdGV4dAorCSAqIEBwYXJhbSBleGNlcHRpb24KKwkgKiAgICAgICAgICAgIHRoZSBhc3NvY2lhdGVkIGV4Y2VwdGlvbiwgb3IgbnVsbAorCSAqLworCXB1YmxpYyBzdGF0aWMgdm9pZCBsb2dFcnJvcihTdHJpbmcgbWVzc2FnZSwgVGhyb3dhYmxlIGV4Y2VwdGlvbikgeworCQkvLyBEbyB3ZSBoYXZlIGEgcGx1Z2luPworCQlpZiAocGx1Z2luICE9IG51bGwpIHsKKwkJCS8vIFllcworCQkJcGx1Z2luLmdldExvZygpLmxvZygKKwkJCQkJbmV3IFN0YXR1cyhJU3RhdHVzLkVSUk9SLCBwbHVnaW4uZ2V0QnVuZGxlKCkKKwkJCQkJCQkuZ2V0U3ltYm9saWNOYW1lKCksIDAsIG1lc3NhZ2UsIGV4Y2VwdGlvbikpOworCQl9IGVsc2UgeworCQkJLy8gTm8KKwkJCVN5c3RlbS5vdXQucHJpbnRsbihtZXNzYWdlKTsKKwkJCS8vIEV4Y2VwdGlvbj8KKwkJCWlmIChleGNlcHRpb24gIT0gbnVsbCkgeworCQkJCS8vIFllcworCQkJCVN5c3RlbS5vdXQucHJpbnRsbihleGNlcHRpb24uZ2V0TWVzc2FnZSgpKTsKKwkJCX0gLy8gaWYKKwkJfQorCX0gLy8gbG9nRXJyb3IKKworCS8qKgorCSAqIExvZyBpbmZvcm1hdGlvbiB0byB0aGUgSUxvZyBmb3IgdGhpcyBwbHVnaW4KKwkgKiAKKwkgKiBAcGFyYW0gbWVzc2FnZQorCSAqICAgICAgICAgICAgdGhlIGxvY2FsaXplZCBpbmZvcm1hdGlvbiBtZXNzYWdlIHRleHQKKwkgKiBAcGFyYW0gZXhjZXB0aW9uCisJICogICAgICAgICAgICB0aGUgYXNzb2NpYXRlZCBleGNlcHRpb24sIG9yIG51bGwKKwkgKi8KKwlwdWJsaWMgc3RhdGljIHZvaWQgbG9nSW5mb3JtYXRpb24oU3RyaW5nIG1lc3NhZ2UsIFRocm93YWJsZSBleGNlcHRpb24pIHsKKwkJLy8gRG8gd2UgaGF2ZSBhIHBsdWdpbj8KKwkJaWYgKHBsdWdpbiAhPSBudWxsKSB7CisJCQkvLyBZZXMKKwkJCXBsdWdpbi5nZXRMb2coKS5sb2coCisJCQkJCW5ldyBTdGF0dXMoSVN0YXR1cy5JTkZPLCBwbHVnaW4uZ2V0QnVuZGxlKCkKKwkJCQkJCQkuZ2V0U3ltYm9saWNOYW1lKCksIDAsIG1lc3NhZ2UsIGV4Y2VwdGlvbikpOworCQl9IGVsc2UgeworCQkJLy8gTm8KKwkJCVN5c3RlbS5vdXQucHJpbnRsbihtZXNzYWdlKTsKKwkJCS8vIEV4Y2VwdGlvbj8KKwkJCWlmIChleGNlcHRpb24gIT0gbnVsbCkgeworCQkJCS8vIFllcworCQkJCVN5c3RlbS5vdXQucHJpbnRsbihleGNlcHRpb24uZ2V0TWVzc2FnZSgpKTsKKwkJCX0gLy8gaWYKKwkJfQorCX0gLy8gbG9nSW5mb3JtYXRpb24KKwkvKioKKwkgKiBMb2cgaW5mb3JtYXRpb24gdG8gdGhlIElMb2cgZm9yIHRoaXMgcGx1Z2luCisJICogVGhlIG1ldGhvZCBpcyBvdmVybG9hZGVkIHRvIGFsbG93IGZvciBsb2dJbmZvcm1hdGlvbiB3aXRob3V0IGFuIGVycm9yIAorCSAqIG1ldGhvZCBzZXRzIHRoZSBlcnJvciB0byBudWxsLiBUaGlzIHNob3VsZCBiZSB1c2VkIGluc3RlYWQgb2YgU3lzdGVtLm91dC5wcmludGxuCisJICogdGhyb3VnaG91dCB0aGUgY29kZS4KKwkgKiBAcGFyYW0gbWVzc2FnZQorCSAqICAgICAgICAgICAgdGhlIGxvY2FsaXplZCBpbmZvcm1hdGlvbiBtZXNzYWdlIHRleHQKKwkgKgorCSAqLworCXB1YmxpYyBzdGF0aWMgdm9pZCBsb2dJbmZvcm1hdGlvbihTdHJpbmcgbWVzc2FnZSkgeworCQlpZihwbHVnaW4gIT0gbnVsbCkgCisJCQlwbHVnaW4uZ2V0TG9nKCkubG9nKAorCQkJCW5ldyBTdGF0dXMoSVN0YXR1cy5JTkZPLCBwbHVnaW4uZ2V0QnVuZGxlKCkuZ2V0U3ltYm9saWNOYW1lKCksCisJCQkJCQkwLCBtZXNzYWdlLCBudWxsKSk7CisJCQllbHNlIAorCQkJCS8vIE5vCisJCQkJU3lzdGVtLm91dC5wcmludGxuKG1lc3NhZ2UpOworCX0gLy8gbG9nSW5mb3JtYXRpb24KKwkKK30gLy8gQWN0aXZhdG9yCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkucmVwb3J0cy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9yZXBvcnRzL01vbml0b3JQcmVmZXJlbmNlcy5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLnJlcG9ydHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvcmVwb3J0cy9Nb25pdG9yUHJlZmVyZW5jZXMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MGFjY2QzCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLnJlcG9ydHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvcmVwb3J0cy9Nb25pdG9yUHJlZmVyZW5jZXMuamF2YQpAQCAtMCwwICsxLDE3NyBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnVpLnJlcG9ydHM7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgamF2YS51dGlsLkhhc2hTZXQ7CitpbXBvcnQgamF2YS51dGlsLlNldDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QbHVnaW47CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlByZWZlcmVuY2VzOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5VUkk7CisKKy8qKgorICogVGhpcyBjbGFzcyByZXByZXNlbnRzCisgKi8KK3B1YmxpYyBjbGFzcyBNb25pdG9yUHJlZmVyZW5jZXMgeworCisJUGx1Z2luIHBsdWdpbiA9IEFjdGl2YXRvci5nZXREZWZhdWx0KCk7CisKKwkvKioKKwkgKiB0aGUgdXNlcnMgcHJlZmVyZW5jZXMKKwkgKi8KKwlQcmVmZXJlbmNlcyBwcmVmcyA9IHBsdWdpbi5nZXRQbHVnaW5QcmVmZXJlbmNlcygpOworCisJLyoqCisJICogVGhpcyBpcyBhIGxpc3Qgb2YgbG9jYXRpb24gSURzIGZyb20gdGhlIHVzZXIgcnVudGltZSBwcmVmZXJlbmNlcyB0aGF0CisJICogcmVtZW1iZXIgd2hhdCBsb2NhdGlvbnMgdGhlIHVzZXIgd2FudHMgdG8gbW9uaXRvci4gSWYgbm8gcHJlZmVyZW5jZXMKKwkgKiBleGlzdCBpdCB3aWxsIGNyZWF0ZSBvbmUgZm9yIHRoZSBhZ2dyZWdhdGVkIGRhdGEgYXQgdGhlIHdvcmxkIGxldmVsCisJICovCisJcHJpdmF0ZSBTZXQ8U3RyaW5nPiBtb25pdG9yTG9jYXRpb25QcmVmZXJlbmNlcyA9IG5ldyBIYXNoU2V0PFN0cmluZz4oKTsKKworCS8qKgorCSAqIHRoZSBJRCBvZiB0aGUgZGVmYXVsdCBsb2NhdGlvbiB0aGUgbG9jYXRpb24gSUQgZm9yIHRoZSBhZ2dyZWdhdGVkIGRhdGEgYXQKKwkgKiB0aGUgd29ybGQgbGV2ZWwKKwkgKi8KKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgREVGQVVMVF9MT0NBVElPTl9JRCA9ICJzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9ub2RlL2dlby9yZWdpb24vWlpaIjsKKworCS8qKgorCSAqIFByZWZpeCB0byBhbGwgbm9kZSBVUkkncworCSAqLworCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBVUklfUFJFRklYID0gInN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL25vZGUvZ2VvL3JlZ2lvbi8iOworCisJLyoqCisJICogYW55IHByZWZlcmVuY2UgbG9jYXRpb24ga2V5IG11c3QgY29udGFpbiB0aGlzIHN1YnN0cmluZworCSAqIAorCSAqLworCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBMT0NBVElPTl9LRVlfU1VCU1RSSU5HID0gImxvY2F0aW9uLiI7CisKKwkvKioKKwkgKiB0aGUga2V5IHRvIHRoZSBkZWZhdWx0IGxvY2F0aW9uIHNob3VsZCBhbHdheXMgYmUgZGVmaW5lZCBhbmQgc2hvdWxkIHBvaW50CisJICogdG8gdGhlIGxvY2F0aW9uIElEIGZvciB0aGUgYWdncmVnYXRlZCBkYXRhIGF0IHRoZSB3b3JsZCBsZXZlbAorCSAqLworCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBERUZBVUxUX0xPQ0FUSU9OX0tFWSA9ICJkZWZhdWx0LmxvY2F0aW9uSUQiOworCisJLyoqCisJICogVGhlIGtleSB0byB0aGUgcmVmZXJlbmNlIGZpbGUgbmFtZSBmb3IgdGhlIGFnZ3JlZ2F0ZSB2aWV3IHJlcG9ydAorCSAqLworCQorCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFJFRkVSRU5DRV9GSUxFX0tFWSA9ICJyZWZlcmVuY2UuZmlsZSI7CisJCisJLyoqCisJICogCisJICovCisJcHVibGljIE1vbml0b3JQcmVmZXJlbmNlcygpIHsKKworCQlpZiAocHJlZnMuY29udGFpbnMoREVGQVVMVF9MT0NBVElPTl9LRVkpKSB7CisJCQlTdHJpbmcgdXJpID0gcHJlZnMuZ2V0U3RyaW5nKERFRkFVTFRfTE9DQVRJT05fS0VZKTsKKwkJCWlmICh1cmkgIT0gREVGQVVMVF9MT0NBVElPTl9JRCkgeworCQkJCXNldERlZmF1bHRMb2NhdGlvbigpOworCQkJfSBlbHNlIHsKKwkJCQltb25pdG9yTG9jYXRpb25QcmVmZXJlbmNlcy5hZGQodXJpKTsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCS8vIHNldCB0aGUgZGVmYXVsdCBJRAorCQkJc2V0RGVmYXVsdExvY2F0aW9uKCk7CisJCX0KKworCQkvLyBub3cgY2hlY2sgdGhlIG90aGVyIFVSSSdzCisJCVN0cmluZ1tdIGFsbEtleXMgPSBwcmVmcy5wcm9wZXJ0eU5hbWVzKCk7CisJCWZvciAoaW50IGkgPSAwOyBpIDwgYWxsS2V5cy5sZW5ndGg7IGkrKykgeworCQkJaWYgKGFsbEtleXNbaV0uY29udGFpbnMoTE9DQVRJT05fS0VZX1NVQlNUUklORykKKwkJCQkJfHwgYWxsS2V5c1tpXS5jb250YWlucyhERUZBVUxUX0xPQ0FUSU9OX0tFWSkpIHsKKwkJCQlTdHJpbmcgbmV4dElEID0gcHJlZnMuZ2V0U3RyaW5nKGFsbEtleXNbaV0pOworCQkJCW1vbml0b3JMb2NhdGlvblByZWZlcmVuY2VzLmFkZChuZXh0SUQpOworCQkJfQorCQl9IC8vIGZvciBhbGwga2V5cworCisJfSAvLyBjb25zdHJ1Y3RvcgorCisJLyoqCisJICogCisJICovCisJcHVibGljIHZvaWQgc2V0RGVmYXVsdExvY2F0aW9uKCkgeworCQlwcmVmcy5zZXRWYWx1ZShERUZBVUxUX0xPQ0FUSU9OX0tFWSwgREVGQVVMVF9MT0NBVElPTl9JRCk7CisJCW1vbml0b3JMb2NhdGlvblByZWZlcmVuY2VzLmFkZChERUZBVUxUX0xPQ0FUSU9OX0lEKTsKKwkJcGx1Z2luLnNhdmVQbHVnaW5QcmVmZXJlbmNlcygpOworCX0KKworCS8qKgorCSAqIAorCSAqIEByZXR1cm4gYSBzZXQgb2YgcHJlZmVycmVkIGxvY2F0aW9ucyB0byBtb25pdG9yCisJICovCisJcHVibGljIFNldDxTdHJpbmc+IGdldE1vbml0b3JMb2NhdGlvblByZWZlcmVuY2VzKCkgeworCQlyZXR1cm4gbW9uaXRvckxvY2F0aW9uUHJlZmVyZW5jZXM7CisJfQorCisJLyoqCisJICogQHBhcmFtIG1vbml0b3JMb2NhdGlvblByZWZlcmVuY2VzCisJICovCisJcHVibGljIHZvaWQgc2V0TW9uaXRvckxvY2F0aW9uUHJlZmVyZW5jZXMoCisJCQlTZXQ8U3RyaW5nPiBtb25pdG9yTG9jYXRpb25QcmVmZXJlbmNlcykgeworCQl0aGlzLm1vbml0b3JMb2NhdGlvblByZWZlcmVuY2VzID0gbW9uaXRvckxvY2F0aW9uUHJlZmVyZW5jZXM7CisJfQorCisJLyoqCisJICogQHBhcmFtIG5ld0lECisJICovCisJcHVibGljIHZvaWQgYWRkTG9jYXRpb25QcmVmKFN0cmluZyBuZXdJRCkgeworCQlpZiAocHJlZnMgIT0gbnVsbCkgeworCQkJLy8gaXMgaXQgcmVhbGx5IG5ldz8KKworCQkJaWYgKCFtb25pdG9yTG9jYXRpb25QcmVmZXJlbmNlcy5jb250YWlucyhuZXdJRCkpIHsKKwkJCQkvLyB3ZSB1c2UgdGhlIHVyaSBiZWluZyBhZGRlZCB0byBnZW5lcmF0ZSBhIHVuaXF1ZSBrZXkKKwkJCQkvLyBieSBjb25jYXRlbmF0aW5nICJsb2NhdGlvbi4iK25ld1VSSQorCQkJCS8vIHByZWZlcmVuY2VzIGtleXMgbXVzdCBiZSB1bmlxdWUKKwkJCQkvLyB0aGlzIGFsc28gZ3VhcmFudGVlcyB3ZSBuZXZlciBkdXBsaWNhdGUgdGhlIHNhbWUgbG9jYXRpb24KKwkJCQlwcmVmcy5zZXRWYWx1ZShMT0NBVElPTl9LRVlfU1VCU1RSSU5HICsgbmV3SUQsIG5ld0lEKTsKKwkJCQl0aGlzLm1vbml0b3JMb2NhdGlvblByZWZlcmVuY2VzLmFkZChuZXdJRCk7CisJCQkJcGx1Z2luLnNhdmVQbHVnaW5QcmVmZXJlbmNlcygpOworCQkJfSAvLyBpdCBJRCBpcyByZWFsbHkgbmV3CisJCX0gLy8gaWYgcHJlZnMgbm90IG51bGwKKwl9IC8vIGFkZExvY2F0aW9uUHJlZgorCisJLyoqCisJICogQHBhcmFtIG9sZElECisJICovCisJcHVibGljIHZvaWQgcmVtb3ZlTG9jYXRpb25QcmVmKFN0cmluZyBvbGRJRCkgeworCQlpZiAocHJlZnMgIT0gbnVsbCkgeworCQkJLy8gaXMgaXQgcmVhbGx5IG5ldz8KKwkJCWlmICghbW9uaXRvckxvY2F0aW9uUHJlZmVyZW5jZXMuY29udGFpbnMob2xkSUQpKQorCQkJCXRoaXMubW9uaXRvckxvY2F0aW9uUHJlZmVyZW5jZXMucmVtb3ZlKG9sZElEKTsKKworCQkJLy8gZG9lcyBub3Qgd29yay4gTm8gcmVtb3ZlIG1ldGhvZD8KKwkJCS8vIHByZWZzLnNldFRvRGVmYXVsdChvbGRJRCk7CisJCQkvLyBwcmVmcy5zZXRWYWx1ZShvbGRJRCwgIiIpOworCQkJcGx1Z2luLnNhdmVQbHVnaW5QcmVmZXJlbmNlcygpOworCQl9IC8vIGlmIHByZWZzIG5vdCBudWxsCisJfSAvLyByZW1vdmVMb2NhdGlvblByZWYKKworCS8qKgorCSAqIHJlbW92ZXMgdGhlIHVyaSBwcmVmaXggZnJvbSBhbiBzdHJpbmcgSUQKKwkgKiAKKwkgKiBAcGFyYW0gdXJpCisJICogQHJldHVybiBVUklzdWZmaXggLSB0aGUgZ2VvZ3JhcGhpYyBjb2RlIHBhcnQgb2YgdGhlIHVyaQorCSAqLworCXB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldFVSSXN1ZmZpeChTdHJpbmcgdXJpKSB7CisJCVN0cmluZyByZXRWYWwgPSB1cmkucmVwbGFjZUFsbChVUklfUFJFRklYLCAiIik7CisJCXJldHVybiByZXRWYWw7CisJfS8vIGdldCB1cmkgc3VmZml4CisKKwkvKioKKwkgKiByZXR1cm5zIHRoZSBkZWZhdWx0IGxvY2F0aW9uIElEIGFzIGEgVVJJCisJICogCisJICogQHJldHVybiB0aGUgVVJJCisJICovCisJcHVibGljIHN0YXRpYyBVUkkgZ2V0RGVmYXVsdFVSSSgpIHsKKwkJcmV0dXJuIFVSSS5jcmVhdGVVUkkoREVGQVVMVF9MT0NBVElPTl9JRCk7CisJfQorfQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLnJlcG9ydHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvcmVwb3J0cy92aWV3cy9BZ2dyZWdhdGVGaWxlSW5pdGlhbGl6YXRpb25FeGNlcHRpb24uamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5yZXBvcnRzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3JlcG9ydHMvdmlld3MvQWdncmVnYXRlRmlsZUluaXRpYWxpemF0aW9uRXhjZXB0aW9uLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjZjYTc3MwotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5yZXBvcnRzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3JlcG9ydHMvdmlld3MvQWdncmVnYXRlRmlsZUluaXRpYWxpemF0aW9uRXhjZXB0aW9uLmphdmEKQEAgLTAsMCArMSwzNSBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnVpLnJlcG9ydHMudmlld3M7CisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA3LCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqCisgKiBUaHJvd24gd2hlbiB3ZSBmYWlsIHRvIGxvYWQgYSBzY2VuYXJpbyBmb3IgYW55IHJlYXNvbgorICovCisKK3B1YmxpYyBjbGFzcyBBZ2dyZWdhdGVGaWxlSW5pdGlhbGl6YXRpb25FeGNlcHRpb24gZXh0ZW5kcyBFeGNlcHRpb24geworCXByaXZhdGUgc3RhdGljIGZpbmFsIGxvbmcgc2VyaWFsVmVyc2lvblVJRCA9IDFMOworCisJLyoqCisJICogQ29uc3RydWN0b3IKKwkgKiAKKwkgKiBAcGFyYW0gbWVzc2FnZQorCSAqLworCXB1YmxpYyBBZ2dyZWdhdGVGaWxlSW5pdGlhbGl6YXRpb25FeGNlcHRpb24oU3RyaW5nIG1lc3NhZ2UpIHtzdXBlcihtZXNzYWdlKTt9CisJCisKKwkvKioKKwkgKiBDb25zdHJ1Y3RvcgorCSAqIAorCSAqIEBwYXJhbSB0CisJICovCisJcHVibGljIEFnZ3JlZ2F0ZUZpbGVJbml0aWFsaXphdGlvbkV4Y2VwdGlvbihUaHJvd2FibGUgdCkge3N1cGVyKHQpO30KKworfQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLnJlcG9ydHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvcmVwb3J0cy92aWV3cy9BZ2dyZWdhdGVSZWZlcmVuY2VGaWxlTG9hZGVyLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkucmVwb3J0cy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9yZXBvcnRzL3ZpZXdzL0FnZ3JlZ2F0ZVJlZmVyZW5jZUZpbGVMb2FkZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wOTEwNTM2Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLnJlcG9ydHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvcmVwb3J0cy92aWV3cy9BZ2dyZWdhdGVSZWZlcmVuY2VGaWxlTG9hZGVyLmphdmEKQEAgLTAsMCArMSwzMTcgQEAKKy8qKgorICogCisgKi8KK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS51aS5yZXBvcnRzLnZpZXdzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA3LCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGphdmEuaW8uQnVmZmVyZWRSZWFkZXI7CitpbXBvcnQgamF2YS5pby5GaWxlOworaW1wb3J0IGphdmEuaW8uRmlsZVJlYWRlcjsKK2ltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOworaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7CitpbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7CitpbXBvcnQgamF2YS51dGlsLkhhc2hTZXQ7CitpbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOworaW1wb3J0IGphdmEudXRpbC5MaXN0OworaW1wb3J0IGphdmEudXRpbC5NYXA7CitpbXBvcnQgamF2YS51dGlsLlNldDsKK2ltcG9ydCBqYXZhLnV0aWwuU3RyaW5nVG9rZW5pemVyOworCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS51aS5yZXBvcnRzLkFjdGl2YXRvcjsKKworCisvKioKKyAqIEBhdXRob3IgamFtZXMKKyAqCisgKi8KK3B1YmxpYyBjbGFzcyBBZ2dyZWdhdGVSZWZlcmVuY2VGaWxlTG9hZGVyIHsKKworCXByaXZhdGUgU3RyaW5nIGRhdGFGaWxlPSIiOworCisKKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgQ1NWX0VYVEVOU0lPTiA9ICIuY3N2IjsKKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgVFhUX0VYVEVOU0lPTiA9ICIudHh0IjsKKwlwcml2YXRlIExpc3Q8RG91YmxlPiBhZ2dyZWdhdGVEYXRhID0gbmV3IEFycmF5TGlzdDxEb3VibGU+KCk7CisJcHJpdmF0ZSBTZXQ8U3RyaW5nPiBpZFNldCA9IG5ldyBIYXNoU2V0PFN0cmluZz4oKTsKKwlwcml2YXRlIEZpbGUgc2NlbmFyaW9EYXRhID0gbnVsbDsKKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmdbXSBpZ25vcmVLZXlzID0geyJ0aW1lIiwiaXRlcmF0aW9uIn07CisKKworCS8qKgorCSAqIFRoaXMgY2xhc3MgbG9hZHMgZGF0YSBmcm9tIGEgZm9sZGVyIGNvbnRhaW5pbmcgYSBzYXZlZCBzY2VuYXJpbyBydW4gZGF0YS4KKwkgKiBUaGUgZGF0YSBpbiB0aGUgZm9sZGVyIGlzIGEgc2V0IG9mIGNzdiBmaWxlcywgb25lIHBlciBsb2NhdGlvbi4KKwkgKiBAcGFyYW0gc2NlbmFyaW9GaWxlIAorCSAqIEB0aHJvd3MgQWdncmVnYXRlRmlsZUluaXRpYWxpemF0aW9uRXhjZXB0aW9uIAorCSAqIAorCSAqLworCXB1YmxpYyBBZ2dyZWdhdGVSZWZlcmVuY2VGaWxlTG9hZGVyKFN0cmluZyBzY2VuYXJpb0ZpbGUpIHRocm93cyAgQWdncmVnYXRlRmlsZUluaXRpYWxpemF0aW9uRXhjZXB0aW9uIHsKKwkJZGF0YUZpbGUgPSBzY2VuYXJpb0ZpbGU7CisJCXNjZW5hcmlvRGF0YSA9IG5ldyBGaWxlKGRhdGFGaWxlKTsKKwkJaWYoIWlzRGF0YUZpbGUoc2NlbmFyaW9EYXRhKSkgeworCQkJdGhyb3cgbmV3IEFnZ3JlZ2F0ZUZpbGVJbml0aWFsaXphdGlvbkV4Y2VwdGlvbigiTm90IGEgdmFsaWQgZGF0YSBmaWxlLCBtdXN0IGJlIC5jc3Ygb3IgLnR4dCAiK2RhdGFGaWxlKTsKKwkJfSAKKwkJYWdncmVnYXRlRGF0YSA9IHByb2Nlc3NGaWxlKCk7CisJfQorCisKKworCisKKwkvKioKKwkgKiB0ZXN0IGZpbGUgbmFtZSB0byBzZWUgaWYgaXQgaXMgYSBkYXRhIGZpbGUuIE11c3QgaGF2ZSBleHRlbnNpb24gLnR4dCBvciAuY3N2CisJICogCisJICogQHBhcmFtIGZpbGUKKwkgKiBAcmV0dXJuIHRydWUgaWYgZGF0YSBmaWxlCisJICovCisJcHJpdmF0ZSBib29sZWFuIGlzRGF0YUZpbGUoRmlsZSBmaWxlKSB7CisJCWJvb2xlYW4gcmV0VmFsID0gdHJ1ZTsKKwkJU3RyaW5nIG5hbWUgPSBmaWxlLmdldE5hbWUoKTsKKwkJaWYoKG5hbWUuaW5kZXhPZihUWFRfRVhURU5TSU9OKSA8IDApICYmIChuYW1lLmluZGV4T2YoQ1NWX0VYVEVOU0lPTikgPCAwKSkgcmV0VmFsID0gZmFsc2U7CisJCXJldHVybiByZXRWYWw7CisJfQorCisKKworCS8qKgorCSAqIHByb2Nlc3MgdGhlIGlucHV0IGZpbGUKKwkgKiBAcmV0dXJuIGEgbWFwIG9mIHNjZW5hcmlvIGRhdGEga2V5ZWQgYnkgbG9jYXRpb24gSUQKKwkgKiBAdGhyb3dzIEFnZ3JlZ2F0ZUZpbGVJbml0aWFsaXphdGlvbkV4Y2VwdGlvbiAKKwkgKi8KKwlwdWJsaWMgTGlzdDxEb3VibGU+IHByb2Nlc3NGaWxlKCkgdGhyb3dzIEFnZ3JlZ2F0ZUZpbGVJbml0aWFsaXphdGlvbkV4Y2VwdGlvbiB7CisKKwkJaW50IG1heFRpbWUgPSAwOworCQlIYXNoTWFwPFN0cmluZywgTGlzdDxEb3VibGU+PiBkYXRhID0gbmV3IEhhc2hNYXA8U3RyaW5nLExpc3Q8RG91YmxlPj4oKTsKKworCQlCdWZmZXJlZFJlYWRlciByZWFkZXIgPSBudWxsOworCQl0cnkgeworCQkJU3RyaW5nIHJlY29yZDsgIAorCQkJU3RyaW5nIGhlYWRlcjsKKwkJCWludCByZWNDb3VudCA9IDA7CisJCQlMaXN0PFN0cmluZz4gaGVhZGVyRWxlbWVudHMgPSBuZXcgQXJyYXlMaXN0PFN0cmluZz4oKTsKKwkJCS8vRmlsZUlucHV0U3RyZWFtIGZpcyA9IG5ldyBGaWxlSW5wdXRTdHJlYW0oc2NlbmFyaW9EYXRhKTsgCisJCQlyZWFkZXIgPSBuZXcgQnVmZmVyZWRSZWFkZXIobmV3IEZpbGVSZWFkZXIoc2NlbmFyaW9EYXRhKSk7CisKKwkJCS8vCisJCQkvLyBSZWFkIHRoZSBmaWxlIGhlYWRlcgorCQkJLy8KKwkJCWlmICggKGhlYWRlcj1yZWFkZXIucmVhZExpbmUoKSkgIT0gbnVsbCApIHsgCisKKwkJCQlTdHJpbmdUb2tlbml6ZXIgc3QgPSBuZXcgU3RyaW5nVG9rZW5pemVyKGhlYWRlciApOworCisJCQkJd2hpbGUgKHN0Lmhhc01vcmVUb2tlbnMoKSkgeworCQkJCQlTdHJpbmcgdmFsID0gc3QubmV4dFRva2VuKCIsIik7CisJCQkJCWhlYWRlckVsZW1lbnRzLmFkZCh2YWwudHJpbSgpKTsKKwkJCQl9CisJCQl9IC8vIHJlYWQgdGhlIGhlYWRlcgorCQkJLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKKwkJCS8vIHNldCB1cCB0aGUgZW1wdHkgbGlzdHMKKwkJCWludCBudW1Db2x1bW5zID0gaGVhZGVyRWxlbWVudHMuc2l6ZSgpOworCQkJZm9yIChpbnQgaSA9IDA7IGkgPCBudW1Db2x1bW5zOyBpICsrKSB7CisJCQkJU3RyaW5nIGtleSA9IGhlYWRlckVsZW1lbnRzLmdldChpKTsKKwkJCQlpZih2YWxpZGF0ZShrZXkpKSB7CisJCQkJCWRhdGEucHV0KGtleSwgbmV3IEFycmF5TGlzdDxEb3VibGU+KCkpOworCQkJCX0KKworCQkJfQorCisJCQkvLyBIZXJlIHdlIGNoZWNrIHRoZSB0eXBlIG9mIHRoZSBkYXRhIGZpbGUKKwkJCS8vIGJ5IGNoZWNraW5nIHRoZSBoZWFkZXIgZWxlbWVudHMKKworCisKKwkJCS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKwkJCS8vIFJlYWQgdGhlIGRhdGEKKwkJCS8vCisJCQl3aGlsZSAoIChyZWNvcmQ9cmVhZGVyLnJlYWRMaW5lKCkpICE9IG51bGwgKSB7IAorCQkJCXJlY0NvdW50Kys7IAorCisJCQkJU3RyaW5nVG9rZW5pemVyIHN0ID0gbmV3IFN0cmluZ1Rva2VuaXplcihyZWNvcmQgKTsKKwkJCQlpbnQgdGNvdW50ID0gMDsKKwkJCQl3aGlsZSAoc3QuaGFzTW9yZVRva2VucygpKSB7CisJCQkJCVN0cmluZyB2YWwgPSBzdC5uZXh0VG9rZW4oIiwiKTsKKwkJCQkJU3RyaW5nIGtleSA9IGhlYWRlckVsZW1lbnRzLmdldCh0Y291bnQpOworCQkJCQlpZih2YWxpZGF0ZShrZXkpKSB7CisJCQkJCQlpZFNldC5hZGQoa2V5KTsKKwkJCQkJCUxpc3Q8RG91YmxlPiBkYXRhTGlzdCA9IGRhdGEuZ2V0KGtleSk7CisJCQkJCQl0cnkgeworCQkJCQkJCURvdWJsZSBkVmFsID0gbmV3IERvdWJsZSh2YWwudHJpbSgpKTsKKwkJCQkJCQlkYXRhTGlzdC5hZGQoZFZhbCk7CisJCQkJCQkJaWYgKGRhdGFMaXN0LnNpemUoKSA+PSBtYXhUaW1lKSBtYXhUaW1lID0gZGF0YUxpc3Quc2l6ZSgpOworCQkJCQkJCWRhdGEucHV0KGtleSxkYXRhTGlzdCk7CisJCQkJCQl9IGNhdGNoKE51bWJlckZvcm1hdEV4Y2VwdGlvbiBuZmUpIHsKKwkJCQkJCQlkYXRhLnJlbW92ZShrZXkpOworCQkJCQkJCWlkU2V0LnJlbW92ZShrZXkpOworCQkJCQkJCUFjdGl2YXRvci5sb2dJbmZvcm1hdGlvbigiTm90IGEgdmFsaWQgbnVtYmVyICgiK3ZhbCsiKSAuLi4gUmVtb3Zpbmcga2V5ICIra2V5LCBudWxsKTsKKwkJCQkJCX0KKwkJCQkJfQkJCQorCQkJCQl0Y291bnQgKys7CisJCQkJfQorCQkJfSAvLyB3aGlsZSBmaWxlIGhhcyBkYXRhCisJCX0gY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsgCisJCQkvLyBjYXRjaCBpbyBlcnJvcnMgZnJvbSBGaWxlSW5wdXRTdHJlYW0gb3IgcmVhZExpbmUoKQorCQkJQWN0aXZhdG9yLmxvZ0Vycm9yKCIgSU9FeGNlcHRpb24gZXJyb3IhIiwgZSk7CisJCQl0aHJvdyBuZXcgQWdncmVnYXRlRmlsZUluaXRpYWxpemF0aW9uRXhjZXB0aW9uKGUpOworCQl9IGZpbmFsbHkgeworCQkJdHJ5IHsKKwkJCQlyZWFkZXIuY2xvc2UoKTsKKwkJCX0gY2F0Y2ggKGZpbmFsIEV4Y2VwdGlvbiBlKSB7CisJCQkJLy8gSWdub3JlIGV4Y2VwdGlvbiBvbiByZXNvdXJjZSBjbG9zZQorCQkJfQorCQl9CisKKwkJTGlzdDxEb3VibGU+IGFnZ3JlZ2F0ZSA9IG5ldyBBcnJheUxpc3Q8RG91YmxlPigpOworCQlmb3IgKGludCBpID0gMDsgaSA8IG1heFRpbWU7IGkgKyspIHsKKwkJCWFnZ3JlZ2F0ZS5hZGQoaSwgbmV3IERvdWJsZSgwLjApKTsKKwkJfQorCQkvLyBsb29wIG92ZXIgYWxsIGxvY2F0aW9uIGlkcworCQlJdGVyYXRvcjxTdHJpbmc+IGl0ZXIgPSBpZFNldC5pdGVyYXRvcigpOworCQl3aGlsZSgoaXRlciE9bnVsbCkmJihpdGVyLmhhc05leHQoKSkpIHsKKwkJCVN0cmluZyBrZXkgPSBpdGVyLm5leHQoKTsKKwkJCUxpc3Q8RG91YmxlPiBkYXRhTGlzdCA9IGRhdGEuZ2V0KGtleSk7CisJCQlmb3IgKGludCBpID0gMDsgaSA8IG1heFRpbWU7IGkgKyspIHsKKwkJCQlkb3VibGUgdmFsID0gYWdncmVnYXRlLmdldChpKS5kb3VibGVWYWx1ZSgpOworCQkJCXZhbCArPSBkYXRhTGlzdC5nZXQoaSkuZG91YmxlVmFsdWUoKTsKKwkJCQlhZ2dyZWdhdGUuc2V0KGksbmV3IERvdWJsZSh2YWwpKTsKKwkJCX0KKwkJfQorCisJCXJldHVybiBhZ2dyZWdhdGU7CisJfSAvLyBwcm9jZXNzIGZpbGUKKworCisJLyoqCisJICogcHJvY2VzcyBhbiBpbmNpZGVuY2UgZmlsZQorCSAqIEFuIGluY2lkZW5jZSBmaWxlIGRvZXMgbm90IGNvbnRhaW4gU0kgZGF0YSBzbyBpdCBjYW4gbm90IHJldHVybiAKKwkgKiBhIFJlZmVyZW5jZVNjZW5hcmlvRGF0YUluc3RhbmNlIChpdCBpcyBub3QgdXNlZCB0byBlc3RpbWF0ZSBwYXJhbWV0ZXJzKS4KKwkgKiBJbnN0ZWFkIHRoaXMgbWV0aG9kIHJldHVybnMgdGhlIHJhdyBkYXRhIGluIGEgbWFwCisJICogCisJICogQHBhcmFtIGZpbGVOYW1lCisJICogQHJldHVybiBhIG1hcCBvZiBzY2VuYXJpbyBkYXRhIGtleWVkIGJ5IGxvY2F0aW9uIElECisJICogQHRocm93cyBBZ2dyZWdhdGVGaWxlSW5pdGlhbGl6YXRpb25FeGNlcHRpb24gCisJICovCisJcHVibGljIE1hcDxTdHJpbmcsIExpc3Q8U3RyaW5nPj4gcHJvY2Vzc0luY2lkZW5jZUZpbGUoU3RyaW5nIGZpbGVOYW1lKSB0aHJvd3MgQWdncmVnYXRlRmlsZUluaXRpYWxpemF0aW9uRXhjZXB0aW9uIHsKKwkJRmlsZSBmaWxlID0gbmV3IEZpbGUoZmlsZU5hbWUpOworCQlIYXNoTWFwPFN0cmluZywgTGlzdDxTdHJpbmc+PiBkYXRhID0gbmV3IEhhc2hNYXA8U3RyaW5nLExpc3Q8U3RyaW5nPj4oKTsKKwkJQnVmZmVyZWRSZWFkZXIgcmVhZGVyID0gbnVsbDsKKwkJdHJ5IHsKKwkJCVN0cmluZyByZWNvcmQ7ICAKKwkJCVN0cmluZyBoZWFkZXI7CisJCQlpbnQgcmVjQ291bnQgPSAwOworCQkJTGlzdDxTdHJpbmc+IGhlYWRlckVsZW1lbnRzID0gbmV3IEFycmF5TGlzdDxTdHJpbmc+KCk7CisJCQkvL0ZpbGVJbnB1dFN0cmVhbSBmaXMgPSBuZXcgRmlsZUlucHV0U3RyZWFtKGZpbGUpOyAKKwkJCXJlYWRlciA9IG5ldyBCdWZmZXJlZFJlYWRlcihuZXcgRmlsZVJlYWRlcihmaWxlKSk7CisKKwkJCS8vCisJCQkvLyBSZWFkIHRoZSBmaWxlIGhlYWRlcgorCQkJLy8KKwkJCWlmICggKGhlYWRlcj1yZWFkZXIucmVhZExpbmUoKSkgIT0gbnVsbCApIHsgCisKKwkJCQlTdHJpbmdUb2tlbml6ZXIgc3QgPSBuZXcgU3RyaW5nVG9rZW5pemVyKGhlYWRlciApOworCisJCQkJd2hpbGUgKHN0Lmhhc01vcmVUb2tlbnMoKSkgeworCQkJCQlTdHJpbmcgdmFsID0gc3QubmV4dFRva2VuKCIsIik7CisJCQkJCWhlYWRlckVsZW1lbnRzLmFkZCh2YWwudHJpbSgpKTsKKwkJCQl9CisJCQl9IC8vIHJlYWQgdGhlIGhlYWRlcgorCQkJLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKKwkJCS8vIHNldCB1cCB0aGUgZW1wdHkgbGlzdHMKKwkJCWludCBudW1Db2x1bW5zID0gaGVhZGVyRWxlbWVudHMuc2l6ZSgpOworCQkJZm9yIChpbnQgaSA9IDA7IGkgPCBudW1Db2x1bW5zOyBpICsrKSB7CisJCQkJU3RyaW5nIGtleSA9IGhlYWRlckVsZW1lbnRzLmdldChpKTsKKwkJCQlkYXRhLnB1dChrZXksIG5ldyBBcnJheUxpc3Q8U3RyaW5nPigpKTsKKwkJCX0KKworCQkJLy8gSGVyZSB3ZSBjaGVjayB0aGUgdHlwZSBvZiB0aGUgZGF0YSBmaWxlCisJCQkvLyBieSBjaGVja2luZyB0aGUgaGVhZGVyIGVsZW1lbnRzCisKKworCisKKwkJCS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKwkJCS8vIFJlYWQgdGhlIGRhdGEKKwkJCS8vCisJCQl3aGlsZSAoIChyZWNvcmQ9cmVhZGVyLnJlYWRMaW5lKCkpICE9IG51bGwgKSB7IAorCQkJCXJlY0NvdW50Kys7IAorCisJCQkJU3RyaW5nVG9rZW5pemVyIHN0ID0gbmV3IFN0cmluZ1Rva2VuaXplcihyZWNvcmQgKTsKKwkJCQlpbnQgdGNvdW50ID0gMDsKKwkJCQl3aGlsZSAoc3QuaGFzTW9yZVRva2VucygpKSB7CisJCQkJCVN0cmluZyB2YWwgPSBzdC5uZXh0VG9rZW4oIiwiKTsKKwkJCQkJU3RyaW5nIGtleSA9IGhlYWRlckVsZW1lbnRzLmdldCh0Y291bnQpOworCQkJCQkoZGF0YS5nZXQoa2V5KSkuYWRkKHZhbC50cmltKCkpOworCQkJCQl0Y291bnQgKys7CisJCQkJfQorCQkJfSAvLyB3aGlsZSBmaWxlIGhhcyBkYXRhCisJCX0gY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsgCisJCQkvLyBjYXRjaCBpbyBlcnJvcnMgZnJvbSBGaWxlSW5wdXRTdHJlYW0gb3IgcmVhZExpbmUoKQorCQkJQWN0aXZhdG9yLmxvZ0Vycm9yKCIgSU9FeGNlcHRpb24gZXJyb3IhIiwgZSk7CisJCQl0aHJvdyBuZXcgQWdncmVnYXRlRmlsZUluaXRpYWxpemF0aW9uRXhjZXB0aW9uKGUpOworCQl9IGZpbmFsbHkgeworCQkJdHJ5IHsKKwkJCQlyZWFkZXIuY2xvc2UoKTsKKwkJCX0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CisJCQkJLy8gSWdub3JlIGV4Y2VwdGlvbiBvbiByZXNvdXJjZSBjbG9zZQorCQkJfQorCQl9CisJCXJldHVybiBkYXRhOworCX0KKworCS8qKgorCSAqIGNlcnRhaW4ga2V5cyB3ZSBtdXN0IGlnbm9yZQorCSAqIEBwYXJhbSBrZXkKKwkgKiBAcmV0dXJuCisJICovCisJcHJpdmF0ZSBib29sZWFuIHZhbGlkYXRlKFN0cmluZyBrZXkpIHsKKwkJZm9yIChpbnQgaSA9IDA7IGkgPCBpZ25vcmVLZXlzLmxlbmd0aDsgaSArKykgeworCQkJU3RyaW5nIHRlc3QgPSBrZXkudHJpbSgpOworCQkJaWYodGVzdC5lcXVhbHNJZ25vcmVDYXNlKGlnbm9yZUtleXNbaV0pKSByZXR1cm4gZmFsc2U7CisJCX0KKwkJcmV0dXJuIHRydWU7CisJfQorCisKKwkvKioKKwkgKiBJbmRpY2F0ZSBFbmQtT2YtRmlsZQorCSAqIAorCSAqIEBwYXJhbSBidWZmZXIKKwkgKiAgICAgICAgICAgIEEgYnVmZmVyIG9mIGRpdmEgZGF0YQorCSAqIAorCSAqIEByZXR1cm4gVHJ1ZSBpZiB3ZSBoYXZlIHJlYWNoZWQgRW5kLU9mLUZpbGUKKwkgKi8KKwlzdGF0aWMgcHJvdGVjdGVkIGJvb2xlYW4gRU9GKFN0cmluZyBidWZmZXIpIHsKKwkJaWYgKGJ1ZmZlciA9PSBudWxsIHx8IGJ1ZmZlci5sZW5ndGgoKSA9PSAwKQorCQkJcmV0dXJuIHRydWU7CisJCXJldHVybiBmYWxzZTsKKwl9CisKKwkvKioKKwkgKiAKKwkgKiBAcmV0dXJuIGFnZ3JlZ2F0ZSBkYXRhIGFzIGFycmF5CisJICovCisJcHVibGljIExpc3Q8RG91YmxlPiBnZXRBZ2dyZWdhdGVEYXRhKCkgeworCQlyZXR1cm4gYWdncmVnYXRlRGF0YTsKKwl9CisKKwkvKioKKwkgKiAKKwkgKiBAcmV0dXJuIGlkcyBvZiBsb2NhdGlvbnMgdGhhdCB3ZXJlIGFnZ3JlZ2F0ZWQKKwkgKi8KKwlwdWJsaWMgU2V0PFN0cmluZz4gZ2V0SWRTZXQoKSB7CisJCXJldHVybiBpZFNldDsKKwl9CisKKworCit9IC8vIEFnZ3JlZ2F0ZVJlZmVyZW5jZUZpbGUKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5yZXBvcnRzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3JlcG9ydHMvdmlld3MvQWdncmVnYXRlU2VyaWVzRmFjdG9yeS5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLnJlcG9ydHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvcmVwb3J0cy92aWV3cy9BZ2dyZWdhdGVTZXJpZXNGYWN0b3J5LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzQ1OWYxZQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5yZXBvcnRzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3JlcG9ydHMvdmlld3MvQWdncmVnYXRlU2VyaWVzRmFjdG9yeS5qYXZhCkBAIC0wLDAgKzEsNTUgQEAKKy8vIFRpbWVTZXJpZXNGYWN0b3J5LmphdmEKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS51aS5yZXBvcnRzLnZpZXdzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZTsKKworLyoqCisgKiBUaGlzIGNsYXNzIGlzIGEgZmFjdG9yeSBmb3IgY3JlYXRpbmcge0BsaW5rIFJlcG9ydENvbnRyb2x9IGluc3RhbmNlcy4KKyAqLworcHVibGljIGNsYXNzIEFnZ3JlZ2F0ZVNlcmllc0ZhY3RvcnkgaW1wbGVtZW50cyBSZXBvcnRDb250cm9sRmFjdG9yeSB7CisKKwlzdGF0aWMgQWdncmVnYXRlU2VyaWVzRmFjdG9yeSBJTlNUQU5DRSA9IG5ldyBBZ2dyZWdhdGVTZXJpZXNGYWN0b3J5KCk7CisKKwkvKioKKwkgKiBDb25zdGFudHMgZm9yIHNhdmluZyBSZXBvcnRWaWV3UHJlZmVyZW5jZXMKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBBR0dSRUdBVEVfU0VSSUVTX1RZUEUgPSAiQWdncmVnYXRlVGltZVNlcmllcyI7CisKKwkvKioKKwkgKiBAcGFyYW0gcGFyZW50CisJICogICAgICAgICAgICB0aGUgcGFyZW50IG9mIHRoZSB7QGxpbmsgUmVsYXRpdmVWYWx1ZUhpc3RvcnlQbG90dGVyfQorCSAqIEByZXR1cm4gYSB7QGxpbmsgUmVsYXRpdmVWYWx1ZUhpc3RvcnlQbG90dGVyfQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS51aS52aWV3cy5nZW9ncmFwaGljLkdlb2dyYXBoaWNDb250cm9sRmFjdG9yeSNjcmVhdGUob3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlKQorCSAqLworCXB1YmxpYyBSZXBvcnRDb250cm9sIGNyZWF0ZShmaW5hbCBDb21wb3NpdGUgcGFyZW50KSB7CisJCXJldHVybiBuZXcgQWdncmVnYXRlVmFsdWVIaXN0b3J5UGxvdHRlcihwYXJlbnQpOworCX0KKworCS8qKgorCSAqIEByZXR1cm4gVE9ETyBKRksKKwkgKiAKKwkgKi8KKwlwdWJsaWMgU3RyaW5nIGdldFVuaXF1ZUNvbnRyb2xOYW1lKCkgeworCQlyZXR1cm4gQUdHUkVHQVRFX1NFUklFU19UWVBFOworCX0KKwkKKwkvKioKKwkgKiBUaGlzIEZhY3RvcnkgY3JlYXRlcyBhIGNvbnRyb2wgYXNzb2NpYXRlZCB3aXRoIGFuIFNpbXVsYXRpb24KKwkgKiBAcmV0dXJuIHR5cGUgb2YgZmFjdG9yeQorCSAqLworCXB1YmxpYyBTdHJpbmcgZ2V0RmFjdG9yeVR5cGUoKSB7CisJCXJldHVybiBTSU1VTEFUSU9OX1RZUEU7CisJfQorCit9IC8vIFRpbWVTZXJpZXNGYWN0b3J5CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkucmVwb3J0cy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9yZXBvcnRzL3ZpZXdzL0FnZ3JlZ2F0ZVRpbWVTZXJpZXNDYW52YXMuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5yZXBvcnRzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3JlcG9ydHMvdmlld3MvQWdncmVnYXRlVGltZVNlcmllc0NhbnZhcy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJkNjIyMTYKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkucmVwb3J0cy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9yZXBvcnRzL3ZpZXdzL0FnZ3JlZ2F0ZVRpbWVTZXJpZXNDYW52YXMuamF2YQpAQCAtMCwwICsxLDEwOTYgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS51aS5yZXBvcnRzLnZpZXdzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7CitpbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7CitpbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOworaW1wb3J0IGphdmEudXRpbC5MaXN0OworaW1wb3J0IGphdmEudXRpbC5NYXA7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5iaXJ0LmNoYXJ0LmRldmljZS5JRGV2aWNlUmVuZGVyZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuYmlydC5jaGFydC5leGNlcHRpb24uQ2hhcnRFeGNlcHRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuYmlydC5jaGFydC5mYWN0b3J5LkdlbmVyYXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5iaXJ0LmNoYXJ0Lm1vZGVsLkNoYXJ0OworaW1wb3J0IG9yZy5lY2xpcHNlLmJpcnQuY2hhcnQubW9kZWwuQ2hhcnRXaXRoQXhlczsKK2ltcG9ydCBvcmcuZWNsaXBzZS5iaXJ0LmNoYXJ0Lm1vZGVsLmF0dHJpYnV0ZS5BbmNob3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuYmlydC5jaGFydC5tb2RlbC5hdHRyaWJ1dGUuQXhpc1R5cGU7CitpbXBvcnQgb3JnLmVjbGlwc2UuYmlydC5jaGFydC5tb2RlbC5hdHRyaWJ1dGUuQm91bmRzOworaW1wb3J0IG9yZy5lY2xpcHNlLmJpcnQuY2hhcnQubW9kZWwuYXR0cmlidXRlLkNvbG9yRGVmaW5pdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5iaXJ0LmNoYXJ0Lm1vZGVsLmF0dHJpYnV0ZS5JbnRlcnNlY3Rpb25UeXBlOworaW1wb3J0IG9yZy5lY2xpcHNlLmJpcnQuY2hhcnQubW9kZWwuYXR0cmlidXRlLkxpbmVBdHRyaWJ1dGVzOworaW1wb3J0IG9yZy5lY2xpcHNlLmJpcnQuY2hhcnQubW9kZWwuYXR0cmlidXRlLkxpbmVTdHlsZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5iaXJ0LmNoYXJ0Lm1vZGVsLmF0dHJpYnV0ZS5NYXJrZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuYmlydC5jaGFydC5tb2RlbC5hdHRyaWJ1dGUuUG9zaXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuYmlydC5jaGFydC5tb2RlbC5hdHRyaWJ1dGUuVGlja1N0eWxlOworaW1wb3J0IG9yZy5lY2xpcHNlLmJpcnQuY2hhcnQubW9kZWwuYXR0cmlidXRlLmltcGwuQm91bmRzSW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5iaXJ0LmNoYXJ0Lm1vZGVsLmF0dHJpYnV0ZS5pbXBsLkNvbG9yRGVmaW5pdGlvbkltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2UuYmlydC5jaGFydC5tb2RlbC5jb21wb25lbnQuQXhpczsKK2ltcG9ydCBvcmcuZWNsaXBzZS5iaXJ0LmNoYXJ0Lm1vZGVsLmNvbXBvbmVudC5TZXJpZXM7CitpbXBvcnQgb3JnLmVjbGlwc2UuYmlydC5jaGFydC5tb2RlbC5jb21wb25lbnQuaW1wbC5TZXJpZXNJbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLmJpcnQuY2hhcnQubW9kZWwuZGF0YS5OdW1iZXJEYXRhU2V0OworaW1wb3J0IG9yZy5lY2xpcHNlLmJpcnQuY2hhcnQubW9kZWwuZGF0YS5TZXJpZXNEZWZpbml0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmJpcnQuY2hhcnQubW9kZWwuZGF0YS5pbXBsLk51bWJlckRhdGFFbGVtZW50SW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5iaXJ0LmNoYXJ0Lm1vZGVsLmRhdGEuaW1wbC5OdW1iZXJEYXRhU2V0SW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5iaXJ0LmNoYXJ0Lm1vZGVsLmRhdGEuaW1wbC5TZXJpZXNEZWZpbml0aW9uSW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5iaXJ0LmNoYXJ0Lm1vZGVsLmltcGwuQ2hhcnRXaXRoQXhlc0ltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2UuYmlydC5jaGFydC5tb2RlbC5sYXlvdXQuTGVnZW5kOworaW1wb3J0IG9yZy5lY2xpcHNlLmJpcnQuY2hhcnQubW9kZWwubGF5b3V0LlBsb3Q7CitpbXBvcnQgb3JnLmVjbGlwc2UuYmlydC5jaGFydC5tb2RlbC50eXBlLkxpbmVTZXJpZXM7CitpbXBvcnQgb3JnLmVjbGlwc2UuYmlydC5jaGFydC5tb2RlbC50eXBlLmltcGwuU2NhdHRlclNlcmllc0ltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2UuYmlydC5jaGFydC51dGlsLlBsdWdpblNldHRpbmdzOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5BY3Rpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklBY3Rpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLk1lbnVNYW5hZ2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5TZXBhcmF0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS51aS5wcmVmZXJlbmNlcy5WaXN1YWxpemF0aW9uUHJlZmVyZW5jZVBhZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS51aS5yZXBvcnRzLkFjdGl2YXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuU1dUOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuUGFpbnRFdmVudDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLlBhaW50TGlzdGVuZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmdyYXBoaWNzLkNvbG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ncmFwaGljcy5HQzsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZ3JhcGhpY3MuSW1hZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ2FudmFzOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5NZW51OworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2hBY3Rpb25Db25zdGFudHM7CisKKy8qKgorICogQWdncmVnYXRlVGltZVNlcmllc0NhbnZhcyBpcyBhIHN1YmNsYXNzIG9mIHtAbGluayBDYW52YXN9IHN1aXRhYmxlIGZvciBjaGFydCBkcmF3aW5ncy4KKyAqLworcHVibGljIGNsYXNzIEFnZ3JlZ2F0ZVRpbWVTZXJpZXNDYW52YXMgZXh0ZW5kcyBDYW52YXMgeworCisJcHJvdGVjdGVkIElEZXZpY2VSZW5kZXJlciBpZHIgPSBudWxsOworCisJLyoqCisJICogVGhpcyBpcyB0aGUge0BsaW5rIENoYXJ0fSB0aGF0IHBsb3RzIHRoZSByZWxhdGl2ZSB2YWx1ZXMuCisJICovCisJcHJvdGVjdGVkIENoYXJ0IGNtID0gbnVsbDsKKworCS8qKgorCSAqIFRoZSBwcm92aWRlciBvZiByZWxhdGl2ZSB2YWx1ZXMuCisJICovCisJLy9wcml2YXRlIFJlbGF0aXZlVmFsdWVIaXN0b3J5UHJvdmlkZXIgcnZocDsKKworCXByaXZhdGUgQWdncmVnYXRlVmFsdWVIaXN0b3J5UGxvdHRlciBjb250cm9sID0gbnVsbDsKKwkKKyAgICAvLyBUT0RPIGdldCByaWQgb2YgdGhpcworCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBkZWZhdWx0S2V5ID0gQWdncmVnYXRlVmFsdWVIaXN0b3J5UGxvdHRlci5SRUZFUkVOQ0VfUFJPUEVSVFk7CisKKwkvKioKKwkgKiBTdGFydCB3aXRoIHRoaXMgdmlzaWJsZQorCSAqLworCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBERUZBVUxUX1BST1BFUlRZID0gIkkiOworCS8qKgorCSAqIHVzZWQgaWYgd2UgbmVlZCB0byBvdmVybGF5IHRyYWNlcyBpbiBkaWZmZXJlbnQgY29sb3JzCisJICovCisJcHJpdmF0ZSBib29sZWFuIG92ZXJsYXlNb2RlID0gZmFsc2U7CisJCQorCisJLyoqCisJICogQSBjb250ZXh0IG1lbnUgZm9yIHRoaXMgdmlldworCSAqLworCU1lbnUgcG9wVXBNZW51ID0gbnVsbDsKKwkKKwkvKioKKwkgKiBzZXQgeSBheGlzIHRvIGEgbGluZWFyIHNjYWxlCisJICovCisJcHJpdmF0ZSBMaW5lYXJTY2FsZUFjdGlvbiBsaW5lYXJUaW1lQWN0aW9uOworCS8qKgorCSAqIHNldCB5IGF4aXMgdG8gYSBsb2cgc2NhbGUKKwkgKi8KKwlwcml2YXRlIExvZ1NjYWxlQWN0aW9uIGxvZ1RpbWVBY3Rpb247CisJcHJvdGVjdGVkIGJvb2xlYW4gdXNlTGluZWFyVGltZVNjYWxlID0gdHJ1ZTsKKwkKKworCS8qKgorCSAqIHNob3cgdGhlIGxlZ2VuZCAodHJ1ZSBieSBkZWZhdWx0KQorCSAqLworCXByaXZhdGUgTGVnZW5kVmlld0FjdGlvbiB2aWV3TGVnZW5kOworCisJLyoqCisJICogaGlkZSB0aGUgbGVnZW5kIAorCSAqLworCXByaXZhdGUgTGVnZW5kSGlkZUFjdGlvbiBoaWRlTGVnZW5kOworCXByb3RlY3RlZCBib29sZWFuIHNob3dMZWdlbmQgPSB0cnVlOworCisJcHJvdGVjdGVkIExlZ2VuZCBsZWdlbmQgPSBudWxsOworCQorCisJLyoqCisJICogdGhpcyBpcyBhIG1hcCBvZiB0aGUgRGF0YVNlcmllcyBvYmplY3QgKGtleWVkIGJ5IHByb3BlcnR5IG5hbWUpCisJICovCisJcHJvdGVjdGVkIGZpbmFsIE1hcDxTdHJpbmcsRGF0YVNlcmllcz4gZGF0YVNlcmllc01hcCA9IG5ldyBIYXNoTWFwPFN0cmluZyxEYXRhU2VyaWVzPigpOworCQorCisJLyoqCisJICogVGhlc2UgYXJlIHRoZSBjeWNsZSBudW1iZXJzIHRoYXQgbWF0Y2ggdGhlIHJlbGF0aXZlIHZhbHVlcyB0aGF0IHdpbGwgYmUKKwkgKiBwbG90dGVkCisJICogCisJICogQHNlZSAjcmVsYXRpdmVWYWx1ZXMKKwkgKi8KKwlwcml2YXRlIGZpbmFsIExpc3Q8SW50ZWdlcj4gY3ljbGVOdW1iZXJzID0gbmV3IEFycmF5TGlzdDxJbnRlZ2VyPigpOworCisJLyoqCisJICogQ2hhcnQgZ2VuZXJhdG9yIGluc3RhbmNlIChyZWZlcmVuY2UgdG8gYSBzaW5nbGV0b24pCisJICovCisJR2VuZXJhdG9yIGdyOworCisJQXhpcyB5QXhpc1ByaW1hcnk7CisJQXhpcyB4QXhpc1ByaW1hcnk7CisJLyoqCisJICogdGhlIG1heFkgdmFsdWUgZm9yIHNjYWxpbmcKKwkgKi8KKwlkb3VibGUgbWF4WSA9IC0xLjA7CisKKwkvKioKKwkgKiBMb2cgb2YgemVybyBpcyBuZWdhdGl2ZSBpbmZpbml0eSBzbyBmb3IgZWFjaCBsb2NhdGlvbiB3ZSB3aWxsIGN1dCBvZmYgdGhlIG1pbmltdW0gCisJICogYXQgdGhlIG1pbiBOT05aRVJPIFkgdmFsdWUKKwkgKi8KKwlwcml2YXRlIGRvdWJsZSBtaW5Zc2NhbGUgPSAwLjAwMDAwMDE7CisJCisJCisKKworCS8qKgorCSAqIExhYmVsIGZvciBsaW5lIHNlcmllcyBMRUdFTkQKKwkgKi8KKwlwdWJsaWMgU3RyaW5nIE9yZGluYXRlX0xFR0VORCA9ICJZIjsKKwkKKwkvKioKKwkgKiBMYWJlbCBmb3IgbGluZSBzZXJpZXMgWSBheGlzIGxhYmVsCisJICoqLworCXB1YmxpYyBTdHJpbmcgT3JkaW5hdGVfQVhJUyA9ICJZIjsKKwkKKwkvKiogCisJICogY3VzdG9taXphYmxlIGNvbG9yIGRlZmluaXRpb25zCisJICovCisJcHJpdmF0ZSBDb2xvckRlZmluaXRpb24gZm9yZUdyb3VuZCA9IENvbG9yRGVmaW5pdGlvbkltcGwuV0hJVEUoKTsKKwlwcml2YXRlIENvbG9yRGVmaW5pdGlvbiBiYWNrZ3JvdW5kR3JvdW5kID0gQ29sb3JEZWZpbml0aW9uSW1wbC5CTEFDSygpOworCXByaXZhdGUgQ29sb3JEZWZpbml0aW9uIGZyYW1lQ29sb3IgPSBDb2xvckRlZmluaXRpb25JbXBsLmNyZWF0ZSgxODAsIDE4MCwgMjAwKTsKKworCUltYWdlIGltZ0NoYXJ0ID0gbnVsbDsKKwkKKwkKKwkvKioKKwkgKiBUaGlzIENvbnN0cnVjdG9yIGlzIHVzZWQgd2hlbiB3ZSB3YW50IHRvIHBsYWNlIHRoZSB0aW1lIHNlcmllcyBpbiBhIGNvbnRhaW5lcgorCSAqIHdoaWNoIGlzIGEgc3ViIGNvbXBvbmVudCBvZiB0aGUgYWN0dWFsIFJlcG9ydENvbnRyb2wKKwkgKiBAcGFyYW0gcmVwb3J0Q29udHJvbCAKKwkgKi8KKwlwdWJsaWMgQWdncmVnYXRlVGltZVNlcmllc0NhbnZhcyhmaW5hbCBBZ2dyZWdhdGVWYWx1ZUhpc3RvcnlQbG90dGVyIHJlcG9ydENvbnRyb2wpIHsKKwkJCisJCXN1cGVyKHJlcG9ydENvbnRyb2wsIFNXVC5ET1VCTEVfQlVGRkVSRUQgfCBTV1QuQk9SREVSKTsKKwkJT3JkaW5hdGVfTEVHRU5EID0gIlRpbWUiOyAvLyBUT0RPIE5MUworCQlPcmRpbmF0ZV9BWElTID0gIiI7CisJCWZvcmVHcm91bmQgCQkJPSBDb2xvckRlZmluaXRpb25JbXBsLldISVRFKCk7CisJCWJhY2tncm91bmRHcm91bmQgCT0gQ29sb3JEZWZpbml0aW9uSW1wbC5CTEFDSygpOworCQlmcmFtZUNvbG9yIAkJCT0gQ29sb3JEZWZpbml0aW9uSW1wbC5HUkVZKCk7CisJCXRoaXMub3ZlcmxheU1vZGUgPSBmYWxzZTsKKwkJCisJCWdyID0gR2VuZXJhdG9yLmluc3RhbmNlKCk7CisKKwkJdHJ5IHsKKwkJCWlkciA9IFBsdWdpblNldHRpbmdzLmluc3RhbmNlKCkuZ2V0RGV2aWNlKCJkdi5TV1QiKTsgLy8kTk9OLU5MUy0xJAkJCQorCQl9IGNhdGNoIChmaW5hbCBDaGFydEV4Y2VwdGlvbiBwZXgpIHsKKwkJCUFjdGl2YXRvci5sb2dFcnJvcigiUHJvYmxlbSBpbml0aWFsaXppbmcgY2hhcnQiLCBwZXgpOyAvLyROT04tTkxTLTEkCisJCQlyZXR1cm47CisJCX0KKworCQljb250cm9sID0gcmVwb3J0Q29udHJvbDsJCisJCWNtID0gY3JlYXRlU2ltcGxlTGluZUNoYXJ0KGRhdGFTZXJpZXNNYXAsIGN5Y2xlTnVtYmVycywgTWVzc2FnZXMKKwkJCQkuZ2V0U3RyaW5nKCJDQy50aXRsZSIpKTsgLy8kTk9OLU5MUy0xJAorCQkKKwkJcmVzZXREYXRhKCk7CisJCQorCQlhZGRQYWludExpc3RlbmVyKG5ldyBQYWludExpc3RlbmVyKCkgeworCQkJcHVibGljIHZvaWQgcGFpbnRDb250cm9sKGZpbmFsIFBhaW50RXZlbnQgcGUpIHsKKworCQkJCWZpbmFsIENvbXBvc2l0ZSBzb3VyY2UgPSAoQ29tcG9zaXRlKSBwZS5nZXRTb3VyY2UoKTsKKwkJCQlmaW5hbCBvcmcuZWNsaXBzZS5zd3QuZ3JhcGhpY3MuUmVjdGFuZ2xlIGQgPSBzb3VyY2UKKwkJCQkJCS5nZXRDbGllbnRBcmVhKCk7CisKKwkJCQlpZihpbWdDaGFydCAhPSBudWxsKSBpbWdDaGFydC5kaXNwb3NlKCk7CisJCQkJaW1nQ2hhcnQgPSBuZXcgSW1hZ2Uoc291cmNlLmdldERpc3BsYXkoKSwgZCk7CisJCQkJCisJCQkJaWRyLnNldFByb3BlcnR5KElEZXZpY2VSZW5kZXJlci5HUkFQSElDU19DT05URVhULCBuZXcgR0MoCisJCQkJCQlpbWdDaGFydCkpOworCQkJCWZpbmFsIEJvdW5kcyBib3VuZHMgPSBCb3VuZHNJbXBsLmNyZWF0ZShkLngsIGQueSwgZC53aWR0aCwKKwkJCQkJCWQuaGVpZ2h0KTsKKwkJCQlib3VuZHMuc2NhbGUoNzJkIC8gaWRyLmdldERpc3BsYXlTZXJ2ZXIoKS5nZXREcGlSZXNvbHV0aW9uKCkpOworCQkJCS8vIEJPVU5EUyBNVVNUIEJFIFNQRUNJRklFRCBJTiBQT0lOVFMKKworCQkJCXRyeSB7CisJCQkJCWdyLnJlbmRlcihpZHIsIGdyLmJ1aWxkKGlkci5nZXREaXNwbGF5U2VydmVyKCksIGNtLCBib3VuZHMsCisJCQkJCQkJbnVsbCwgbnVsbCwgbnVsbCkpOworCQkJCQlwZS5nYy5kcmF3SW1hZ2UoaW1nQ2hhcnQsIGQueCwgZC55KTsKKwkJCQl9IGNhdGNoIChmaW5hbCBDaGFydEV4Y2VwdGlvbiBjZSkgeworCQkJCQlBY3RpdmF0b3IubG9nRXJyb3IoIlByb2JsZW0gcmVuZGVyaW5nIGNoYXJ0IiwgY2UpOyAvLyROT04tTkxTLTEkCisJCQkJfQorCQkJfSAvLyBwYWludENvbnRyb2wKKwkJfSAvLyBQYWludExpc3RlbmVyCisJCSk7CisJCQorCQkvL0NyZWF0ZSBhIGNvbnRleHQgbWVudSBmb3IgdGhlIGNhbnZhcworCQljcmVhdGVDb250ZXh0TWVudSh0aGlzKTsKKwl9IC8vIGNvbnN0cnVjdG9yIDEKKwkKKwkKKwkKKwkKKwkvKioKKwkgKiBUaGUgbWV0aG9kIHdoaWNoIGdldHMgdGhlIHtAbGluayBBZ2dyZWdhdGVUaW1lU2VyaWVzQ2FudmFzfScgcmVwb3J0cyBsaXN0LCBhbmQKKwkgKiBkcmF3cyBpdCBvbiB0aGUge0BsaW5rIEFnZ3JlZ2F0ZVRpbWVTZXJpZXNDYW52YXN9LgorCSAqIAorCSAqLworCXB1YmxpYyB2b2lkIGRyYXcoKSB7CisJCQorCQlpbnQgbWF4TGluZXMgPSBjb250cm9sLmdldE51bVByb3BlcnRpZXMoKTsKKwkJCisJCS8vIGFkZCBhbGwgdGhlIHJlc3Qgb2YgdGhlIGxpbmUgc2VyaWVzIG5vdworCQlmb3IgKGludCBpID0gMDsgaSA8IG1heExpbmVzOyBpICsrKSB7CisJCQlTdHJpbmcgcHJvcGVydHkgPSBjb250cm9sLmdldFByb3BlcnR5KGkpOworCQkJCisJCQlpZighZGF0YVNlcmllc01hcC5jb250YWluc0tleShwcm9wZXJ0eSkpIHsKKwkJCQkvLyBuZXcgcHJvcGVydHkKKwkJCQlEYXRhU2VyaWVzIHNlcmllcyA9IG5ldyBEYXRhU2VyaWVzKHByb3BlcnR5LCBvdmVybGF5TW9kZSk7CisJCQkJZGF0YVNlcmllc01hcC5wdXQocHJvcGVydHksIHNlcmllcyk7CisJCQl9CisJCQlEYXRhU2VyaWVzIHNlcmllcyA9IGRhdGFTZXJpZXNNYXAuZ2V0KHByb3BlcnR5KTsKKwkJCWlmKHNlcmllcy5pc1Zpc2libGUoKSkgeworCQkJCXNlcmllcy5zaG93KCk7CisJCQl9IGVsc2UgeworCQkJCXNlcmllcy5oaWRlKCk7CisJCQl9CisJCX0KKwkJcmVzZXREYXRhKCk7CisJCS8vIHVwZGF0ZSB0aGUgY29udGV4dCBtZW51IHdpdGggdGhlIG5ldyBwcm9wZXJ0aWVzIHRvIHBsb3QKKwkJdXBkYXRlQ29udGV4dE1lbnUodGhpcyk7CisJCW1heFkgPSAtMS4wOworCQkJYm9vbGVhbiBzZXRDeWNsZXMgPSBmYWxzZTsKKwkJCS8vIEdldCB0aGUgdmFsdWVzIGZvciB0aGUgcHJvcGVydHkgdG8gYmUgcGxvdHRlZAorCQkJaW50IG1heFBvaW50cyA9IDA7CisJCQkKKwkJCWZvciAoaW50IGkgPSAwOyBpIDwgbWF4TGluZXM7IGkrKykgeworCQkJCVN0cmluZyBwcm9wZXJ0eSA9IGNvbnRyb2wuZ2V0UHJvcGVydHkoaSk7CisJCQkKKwkJCQlmaW5hbCBkb3VibGVbXSBkb3VibGVWYWx1ZXMgPSBjb250cm9sLmdldFZhbHVlcyhwcm9wZXJ0eSk7CisJCQkJCisJCQkJRGF0YVNlcmllcyBzZXJpZXMgPSBkYXRhU2VyaWVzTWFwLmdldChwcm9wZXJ0eSk7CisJCQkJCisJCQkJZm9yIChpbnQgaiA9IDA7IGogPCBkb3VibGVWYWx1ZXMubGVuZ3RoOyBqKyspIHsKKwkJCQkJCisJCQkJCWlmKGRvdWJsZVZhbHVlc1tqXSA8PSBtaW5Zc2NhbGUpIHsKKwkJCQkJCWlmKGRvdWJsZVZhbHVlc1tqXSA+IDAuMCkgbWluWXNjYWxlID0gZG91YmxlVmFsdWVzW2pdOworCQkJCQl9CisJCQkJCQorCQkJCQlpZihkb3VibGVWYWx1ZXNbal0gPj0gbWF4WSkgeworCQkJCQkJaWYoc2VyaWVzLmlzVmlzaWJsZSgpKSBtYXhZID0gZG91YmxlVmFsdWVzW2pdOworCQkJCQkJZG91YmxlIGxvZyA9IE1hdGguZmxvb3IoTWF0aC5sb2cxMChtYXhZKSk7CisJCQkJCQlkb3VibGUgYWRqdXN0ZWRNYXggPSAoTWF0aC5jZWlsKG1heFkvTWF0aC5wb3coMTAsIGxvZykpKSpNYXRoLnBvdygxMCwgbG9nKTsKKwkJCQkJICAvLyAgaWYoYWRqdXN0ZWRNYXggPD0gMS4wKSBhZGp1c3RlZE1heCA9IDEuMDsKKwkJCQkJCWlmICh1c2VMaW5lYXJUaW1lU2NhbGUpIHsKKwkJCQkJCQl5QXhpc1ByaW1hcnkuZ2V0U2NhbGUoKS5zZXRNYXgoTnVtYmVyRGF0YUVsZW1lbnRJbXBsLmNyZWF0ZShhZGp1c3RlZE1heCkpOworCQkJCQkJCWRvdWJsZSBzdGVwID0gYWRqdXN0ZWRNYXggLyAxMC4wOworCQkJCQkJCXlBeGlzUHJpbWFyeS5nZXRTY2FsZSgpLnNldFN0ZXAoc3RlcCk7CisJCQkJCQl9IGVsc2UgeworCQkJCQkJCS8vIGtlZXAgMiBzaWduaWZpY2FudCBmaWd1cmVzIG9uIHNjYWxlIGF4aXMKKwkJCQkJCQlkb3VibGUgeW1heCA9IE1hdGgubG9nKGFkanVzdGVkTWF4KTsKKwkJCQkJCQlpZihhZGp1c3RlZE1heCA+IDEuMCkgeworCQkJCQkJCQl5bWF4ICs9IDAuNDk5OworCQkJCQkJCQlsb25nIGltYXggPSBNYXRoLnJvdW5kKHltYXgpOworCQkJCQkJCQl5bWF4ID0gaW1heDsKKwkJCQkJCQl9CisJCQkJCQkJeUF4aXNQcmltYXJ5LmdldFNjYWxlKCkuc2V0TWF4KE51bWJlckRhdGFFbGVtZW50SW1wbC5jcmVhdGUoeW1heCkpOworCQkJCQkJCWRvdWJsZSBzdGVwID0geW1heC8xMC4wOworCQkJCQkJCWlmIChzdGVwID4gMC4wKSB5QXhpc1ByaW1hcnkuZ2V0U2NhbGUoKS5zZXRTdGVwKHN0ZXApOworCQkJCQkJfQorCQkJCQkJCisJCQkJCQkKKwkJCQkJfQorCQkJCX0KKwkJCQorCQkJCQkvLyBBbnkgdmFsdWVzPworCQkJCQlpZiAoZG91YmxlVmFsdWVzLmxlbmd0aCA+IDApIHsKKwkJCQkJCWlmIChtYXhQb2ludHMgPCBkb3VibGVWYWx1ZXMubGVuZ3RoKSB7CisJCQkJCQkJbWF4UG9pbnRzID0gZG91YmxlVmFsdWVzLmxlbmd0aDsKKwkJCQkJCX0KKwkJCQkJCQorCQkJCQkJZm9yIChpbnQgY3ljbGVOdW1iZXIgPSAwOyBjeWNsZU51bWJlciA8IG1heFBvaW50czsgY3ljbGVOdW1iZXIrKykgeworCQkJCQkJCQorCQkJCQkJCURvdWJsZSB2YWx1ZTsKKwkJCQkJCQlkb3VibGUgZGlzcGxheVZhbHVlID0gZG91YmxlVmFsdWVzW2N5Y2xlTnVtYmVyXTsKKwkJCQkJCQlpZiAoZGlzcGxheVZhbHVlIDw9IG1pbllzY2FsZSkgeworCQkJCQkJCQkvLyBMb2coMC4wKSBpcyBuZWdhdGl2ZSBpbmZpbml0eSBzbyBmb3IgZGlzcGxheSBwdXJwb3NlcyBvbmx5CisJCQkJCQkJCS8vIHdlIHNldCB0aGUgbWluaW11bSBheGlzIHZhbHVlIGF0IDAuMS9QT1BVTEFUSU9OCisJCQkJCQkJCWRpc3BsYXlWYWx1ZSA9IG1pbllzY2FsZTsKKwkJCQkJCQl9CisJCQkJCQkJaWYgKHVzZUxpbmVhclRpbWVTY2FsZSkgeworCQkJCQkJCQl2YWx1ZSA9IG5ldyBEb3VibGUoZGlzcGxheVZhbHVlKTsKKwkJCQkJCQl9IGVsc2UgeworCQkJCQkJCQl2YWx1ZSA9IG5ldyBEb3VibGUoTWF0aC5sb2coZGlzcGxheVZhbHVlKSk7CisJCQkJCQkJfQorCQkJCQkJCQorCisJCQkJCQkJc2VyaWVzLmFkZFZhbHVlKHZhbHVlKTsKKwkJCQkJCQkKKwkJCQkJCQkvLyBvbmx5IGRvIG9uY2UgZm9yIGZpcnN0IGxpbmUgc2VyaWVzCisJCQkJCQkJaWYgKCFzZXRDeWNsZXMpIHsKKwkJCQkJCQkJY3ljbGVOdW1iZXJzLmFkZChJbnRlZ2VyLnZhbHVlT2YoY3ljbGVOdW1iZXIpKTsJCisJCQkJCQkJCX0KKwkJCQkJCX0gLy8gZm9yIGN5Y2xlTnVtYmVyCisJCQkJCQkKKwkJCQkJCQorCQkJCQkJCisJCQkJCQlzZXRDeWNsZXMgPSB0cnVlOyAvLyB3ZSBzZXQgdGhlbSBvbmx5IG9uY2UKKwkJCQkJCQorCQkJCQl9IGVsc2UgeworCQkJCQkJLy9yZXNldERhdGEoKTsKKwkJCQkJfQorCQkJfSAvLyBmb3IgaSBwcm9wZXJ0aWVzCisKKworCQlpZiAoIXRoaXMuaXNEaXNwb3NlZCgpKSB7CisJCQlyZWRyYXcoKTsKKwkJfQorCQkKKwkJcmV0dXJuIDsKKwl9IC8vIHBhaW50Q29udHJvbAorCisJLyoqCisJICogQHBhcmFtIGRhdGFTZXJpZXNNYXAKKwkgKiAgICAgICAgICAgIHRoZSB7QGxpbmsgTGlzdH0gdGhhdCB3aWxsIGNvbnRhaW4gdGhlIHJlbGF0aXZlIHZhbHVlcworCSAqICAgICAgICAgICAgKDAuMC0xLjApIHRvIHBsb3QKKwkgKiBAcGFyYW0gY3ljbGVOdW1iZXJzCisJICogICAgICAgICAgICB0aGUge0BsaW5rIExpc3R9IG9mIHNpbXVsYXRpb24gY3ljbGUgbnVtYmVycyB0aGF0IG1hdGNoIHRoZQorCSAqICAgICAgICAgICAgcmVsYXRpdmUgdmFsdWVzCisJICogQHBhcmFtIHNlcmllc0lkZW50aWZpZXIKKwkgKiAgICAgICAgICAgIHRoZSB0aXRsZSBvZiB0aGUgY2hhcnQKKwkgKiBAcmV0dXJuIGEgPGNvZGU+Q2hhcnQ8L2NvZGU+CisJICovCisJcHVibGljIGZpbmFsIENoYXJ0IGNyZWF0ZVNpbXBsZUxpbmVDaGFydCgKKwkJCWZpbmFsIE1hcDxTdHJpbmcsIERhdGFTZXJpZXM+IGRhdGFTZXJpZXNNYXAsCisJCQlmaW5hbCBMaXN0PEludGVnZXI+IGN5Y2xlTnVtYmVycywgZmluYWwgU3RyaW5nIHNlcmllc0lkZW50aWZpZXIpIHsKKwkJCisJCWZpbmFsIENoYXJ0V2l0aEF4ZXMgcmV0VmFsdWUgPSBDaGFydFdpdGhBeGVzSW1wbC5jcmVhdGUoKTsKKworCQkKKwkJLy8gUGxvdAorCQlyZXRWYWx1ZS5nZXRCbG9jaygpLnNldEJhY2tncm91bmQoZnJhbWVDb2xvcik7CisJCWZpbmFsIFBsb3QgcCA9IHJldFZhbHVlLmdldFBsb3QoKTsKKwkJcC5nZXRDbGllbnRBcmVhKCkuc2V0QmFja2dyb3VuZChiYWNrZ3JvdW5kR3JvdW5kKTsKKworCQkvLyBUaXRsZQorCQkvLyBjd2FMaW5lLmdldFRpdGxlKCApLmdldExhYmVsKCApLmdldENhcHRpb24oICkuc2V0VmFsdWUoICJMaW5lIENoYXJ0IgorCQkvLyApOy8vJE5PTi1OTFMtMSQKKwkJcmV0VmFsdWUuZ2V0VGl0bGUoKS5zZXRWaXNpYmxlKGZhbHNlKTsKKworCQkvLyBMZWdlbmQKKwkJbGVnZW5kID0gcmV0VmFsdWUuZ2V0TGVnZW5kKCk7CisJCWZpbmFsIExpbmVBdHRyaWJ1dGVzIGxpYSA9IGxlZ2VuZC5nZXRPdXRsaW5lKCk7CisJCWxlZ2VuZC5nZXRUZXh0KCkuZ2V0Rm9udCgpLnNldFNpemUoOCk7CisJCWxpYS5zZXRTdHlsZShMaW5lU3R5bGUuU09MSURfTElURVJBTCk7CisJCWxlZ2VuZC5nZXRJbnNldHMoKS5zZXQoMTAsIDUsIDAsIDApOworCQlsZWdlbmQuZ2V0T3V0bGluZSgpLnNldFZpc2libGUoZmFsc2UpOworCQlsZWdlbmQuc2V0QW5jaG9yKEFuY2hvci5OT1JUSF9MSVRFUkFMKTsKKwkJbGVnZW5kLnNldFBvc2l0aW9uKFBvc2l0aW9uLkJFTE9XX0xJVEVSQUwpOworCQlsZWdlbmQuZ2V0VGV4dCgpLnNldENvbG9yKGZvcmVHcm91bmQpOworCQlsZWdlbmQuZ2V0T3V0bGluZSgpLnNldENvbG9yKGZvcmVHcm91bmQpOworCQkKKwkJLy8gY3dhTGluZS5nZXRMZWdlbmQoICkuZ2V0VGV4dCgpLmdldEZvbnQoKS5zZXRTaXplKDE2KTs7CisJCS8vIGN3YUxpbmUuZ2V0TGVnZW5kKCApLnNldFZpc2libGUoIHRydWUgKTsKKworCQkvLyAvLy8vLy8vLy8KKwkJLy8gWC1BeGlzCisJCXhBeGlzUHJpbWFyeSA9IHJldFZhbHVlLmdldFByaW1hcnlCYXNlQXhlcygpWzBdOworCQl4QXhpc1ByaW1hcnkuc2V0VHlwZShBeGlzVHlwZS5URVhUX0xJVEVSQUwpOworCQl4QXhpc1ByaW1hcnkuZ2V0TWFqb3JHcmlkKCkuc2V0VGlja1N0eWxlKFRpY2tTdHlsZS5CRUxPV19MSVRFUkFMKTsKKwkJeEF4aXNQcmltYXJ5LmdldE9yaWdpbigpLnNldFR5cGUoSW50ZXJzZWN0aW9uVHlwZS5WQUxVRV9MSVRFUkFMKTsKKwkJeEF4aXNQcmltYXJ5LmdldFRpdGxlKCkuc2V0VmlzaWJsZShmYWxzZSk7CisJCXhBeGlzUHJpbWFyeS5nZXRUaXRsZSgpLmdldENhcHRpb24oKS5nZXRGb250KCkuc2V0U2l6ZSg5KTsKKwkJeEF4aXNQcmltYXJ5LmdldFRpdGxlKCkuZ2V0Q2FwdGlvbigpLnNldENvbG9yKGZvcmVHcm91bmQpOworCQl4QXhpc1ByaW1hcnkuZ2V0TGFiZWwoKS5nZXRDYXB0aW9uKCkuc2V0Q29sb3IoZm9yZUdyb3VuZCk7CisKKwkJZmluYWwgU2VyaWVzIHhBeGlzU2VyaWVzID0gU2VyaWVzSW1wbC5jcmVhdGUoKTsKKworCQkvLyBuZXcgY29sb3JzCisJCXhBeGlzU2VyaWVzLmdldExhYmVsKCkuZ2V0Q2FwdGlvbigpLnNldENvbG9yKGZvcmVHcm91bmQpOworCQl4QXhpc1Nlcmllcy5nZXRMYWJlbCgpLmdldE91dGxpbmUoKS5zZXRDb2xvcihmb3JlR3JvdW5kKTsKKwkJLy8JCisKKwkJZmluYWwgTnVtYmVyRGF0YVNldCB4VmFsdWVzID0gTnVtYmVyRGF0YVNldEltcGwuY3JlYXRlKGN5Y2xlTnVtYmVycyk7CisJCXhBeGlzU2VyaWVzLnNldERhdGFTZXQoeFZhbHVlcyk7CisJCWZpbmFsIFNlcmllc0RlZmluaXRpb24gc2RYID0gU2VyaWVzRGVmaW5pdGlvbkltcGwuY3JlYXRlKCk7CisKKwkJeEF4aXNQcmltYXJ5LmdldFNlcmllc0RlZmluaXRpb25zKCkuYWRkKHNkWCk7CisJCXNkWC5nZXRTZXJpZXMoKS5hZGQoeEF4aXNTZXJpZXMpOworCisJCS8vIC8vLy8vLy8vCisJCS8vIFktQXhpcworCQl5QXhpc1ByaW1hcnkgPSByZXRWYWx1ZS5nZXRQcmltYXJ5T3J0aG9nb25hbEF4aXMoeEF4aXNQcmltYXJ5KTsKKwkJeUF4aXNQcmltYXJ5LmdldE1ham9yR3JpZCgpLnNldFRpY2tTdHlsZShUaWNrU3R5bGUuTEVGVF9MSVRFUkFMKTsKKworCQkvLyBOdW1iZXJEYXRhU2V0W10gb3J0aG9WYWx1ZXMgPSBuZXcgTnVtYmVyRGF0YVNldFtNQVhfTElORVNdOworCQkvLyBTZXJpZXNEZWZpbml0aW9uW10gc2RZID0gbmV3IFNlcmllc0RlZmluaXRpb25bTUFYX0xJTkVTXTsKKworCQkvLyBlbmQgWS1TZXJpZXMKKworCQl4QXhpc1ByaW1hcnkuZ2V0U2NhbGUoKS5zZXRNaW4oTnVtYmVyRGF0YUVsZW1lbnRJbXBsLmNyZWF0ZSgwLjApKTsKKwkJLy8geEF4aXNQcmltYXJ5LmdldFNjYWxlKCApLnNldE1heCggTnVtYmVyRGF0YUVsZW1lbnRJbXBsLmNyZWF0ZSggMTAuMCApCisJCS8vICk7CisJCS8vIHhBeGlzUHJpbWFyeS5nZXRTY2FsZSggKS5zZXRTdGVwKCAxICk7CisJCXhBeGlzUHJpbWFyeS5nZXRMYWJlbCgpLmdldENhcHRpb24oKS5nZXRGb250KCkuc2V0U2l6ZSg5KTsKKwkJeEF4aXNQcmltYXJ5LmdldExhYmVsKCkuZ2V0Q2FwdGlvbigpLnNldENvbG9yKGZvcmVHcm91bmQpOworCQl4QXhpc1ByaW1hcnkuZ2V0VGl0bGUoKS5zZXRWaXNpYmxlKHRydWUpOworCQl4QXhpc1ByaW1hcnkuZ2V0VGl0bGUoKS5nZXRDYXB0aW9uKCkuc2V0VmFsdWUoTWVzc2FnZXMuZ2V0U3RyaW5nKCJUUy5USU1FTEFCRUwiKSk7CisKKwkJeUF4aXNQcmltYXJ5LmdldFNjYWxlKCkuc2V0TWluKE51bWJlckRhdGFFbGVtZW50SW1wbC5jcmVhdGUoMC4wKSk7CisJCXlBeGlzUHJpbWFyeS5nZXRTY2FsZSgpLnNldE1heChOdW1iZXJEYXRhRWxlbWVudEltcGwuY3JlYXRlKDEuMCkpOworCQl5QXhpc1ByaW1hcnkuZ2V0U2NhbGUoKS5zZXRTdGVwKDAuMjUpOworCQl5QXhpc1ByaW1hcnkuZ2V0TGFiZWwoKS5nZXRDYXB0aW9uKCkuZ2V0Rm9udCgpLnNldFNpemUoOSk7CisJCXlBeGlzUHJpbWFyeS5nZXRMYWJlbCgpLmdldENhcHRpb24oKS5zZXRDb2xvcihmb3JlR3JvdW5kKTsKKwkJeUF4aXNQcmltYXJ5LmdldFRpdGxlKCApLmdldENhcHRpb24oICkuc2V0VmFsdWUoIE9yZGluYXRlX0FYSVMgKTsKKwkJeUF4aXNQcmltYXJ5LmdldFRpdGxlKCApLnNldFZpc2libGUodHJ1ZSk7CisJCS8vIHlBeGlzUHJpbWFyeS5nZXRNYWpvckdyaWQoKS5nZXRMaW5lQXR0cmlidXRlcygpLnNldENvbG9yKGZvcmVHcm91bmQpOworCQkKKwkJLy8gZm9yIG5vdyBnZXQgcmVhZHkgdG8gY3JlYXRlIG9ubHkgb25lIGxpbmUgLSB3ZSBoYXZlIG5vIGRhdGEgeWV0LgorCQkvLyB3ZSB3aWxsIGFkZCBtb3JlIGxpbmVzIGFzIHdlIG5lZWQgdGhlbQorCQkvLyBoYW5kbGUgbnVsbAorCQlpZighZGF0YVNlcmllc01hcC5jb250YWluc0tleShkZWZhdWx0S2V5KSkgeworCQkJRGF0YVNlcmllcyBzZXJpZXMgPSBuZXcgRGF0YVNlcmllcyhkZWZhdWx0S2V5LCBvdmVybGF5TW9kZSk7CisJCQlkYXRhU2VyaWVzTWFwLnB1dChkZWZhdWx0S2V5LCBzZXJpZXMpOworCQl9CisKKwkJcmV0dXJuIHJldFZhbHVlOworCX0gLy8gY3JlYXRlU2ltcGxlTGluZUNoYXJ0CisKKwkKKwkvKioKKwkgKiBDcmVhdGUgdGhlIHZpZXcncyBjb250ZXh0IG1lbnUgYW5kIGFkZCB0aGUgYWN0aW9uIGhhbmRsZXJzIHRvIGl0LgorCSAqLworCXByb3RlY3RlZCB2b2lkIGNyZWF0ZUNvbnRleHRNZW51KGZpbmFsIENvbXBvc2l0ZSBwYXJlbnQpIHsKKworCQkvLyBJbml0IGEgQ29udGV4dCBNZW51IE1hbmFnZXIKKwkJZmluYWwgTWVudU1hbmFnZXIgY29udGV4dE1lbnVNYW5hZ2VyID0gbmV3IE1lbnVNYW5hZ2VyKCk7CisKKwkJLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKwkJbGluZWFyVGltZUFjdGlvbiA9IG5ldyBMaW5lYXJTY2FsZUFjdGlvbigpOworCQlsb2dUaW1lQWN0aW9uID0gbmV3IExvZ1NjYWxlQWN0aW9uKCk7CisJCWNvbnRleHRNZW51TWFuYWdlci5hZGQobGluZWFyVGltZUFjdGlvbik7CisJCWNvbnRleHRNZW51TWFuYWdlci5hZGQobG9nVGltZUFjdGlvbik7CisKKworCQkKKwkJLy8gUGxhY2UgSG9sZGVyIGZvciBNZW51IEFkZGl0aW9ucworCQljb250ZXh0TWVudU1hbmFnZXIuYWRkKG5ldyBTZXBhcmF0b3IoCisJCQkJSVdvcmtiZW5jaEFjdGlvbkNvbnN0YW50cy5NQl9BRERJVElPTlMpKTsKKworCQkvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwkJCisJCXZpZXdMZWdlbmQgPSBuZXcgTGVnZW5kVmlld0FjdGlvbigpOworCQloaWRlTGVnZW5kID0gbmV3IExlZ2VuZEhpZGVBY3Rpb24oKTsKKwkJY29udGV4dE1lbnVNYW5hZ2VyLmFkZCh2aWV3TGVnZW5kKTsKKwkJY29udGV4dE1lbnVNYW5hZ2VyLmFkZChoaWRlTGVnZW5kKTsKKwkJCisJCS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCQkKKwkJCisJCS8vIFBsYWNlIEhvbGRlciBmb3IgTWVudSBBZGRpdGlvbnMKKwkJY29udGV4dE1lbnVNYW5hZ2VyLmFkZChuZXcgU2VwYXJhdG9yKAorCQkJCUlXb3JrYmVuY2hBY3Rpb25Db25zdGFudHMuTUJfQURESVRJT05TKSk7CisKKwkJcG9wVXBNZW51ID0gY29udGV4dE1lbnVNYW5hZ2VyLmNyZWF0ZUNvbnRleHRNZW51KHBhcmVudCk7CisKKwkJLy8gU2V0IHRoZSBjb250ZXh0IG1lbnUgZm9yIHRoZSB2aWV3ZXIKKwkJcGFyZW50LnNldE1lbnUocG9wVXBNZW51KTsKKworCX0gLy8gY3JlYXRlQ29udGV4dE1lbnUKKwkKKwkvKioKKwkgKiBVcGRhdGUgdGhlIHZpZXcncyBjb250ZXh0IG1lbnUgYW5kIGFkZCB0aGUgYWN0aW9uIGhhbmRsZXJzIHRvIGl0LgorCSAqLworCXByaXZhdGUgdm9pZCB1cGRhdGVDb250ZXh0TWVudShmaW5hbCBDb21wb3NpdGUgcGFyZW50KSB7CisKKwkJaWYgKHBvcFVwTWVudSAhPSBudWxsKSB7CisJCQlwb3BVcE1lbnUuZGlzcG9zZSgpOworCQl9IGVsc2UgeworCQkJcmV0dXJuOworCQl9CisKKwkJLy8gSW5pdCBhIENvbnRleHQgTWVudSBNYW5hZ2VyCisJCWZpbmFsIE1lbnVNYW5hZ2VyIGNvbnRleHRNZW51TWFuYWdlciA9IG5ldyBNZW51TWFuYWdlcigpOworCisJCS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisJCWxpbmVhclRpbWVBY3Rpb24gPSBuZXcgTGluZWFyU2NhbGVBY3Rpb24oKTsKKwkJbG9nVGltZUFjdGlvbiA9IG5ldyBMb2dTY2FsZUFjdGlvbigpOworCQljb250ZXh0TWVudU1hbmFnZXIuYWRkKGxpbmVhclRpbWVBY3Rpb24pOworCQljb250ZXh0TWVudU1hbmFnZXIuYWRkKGxvZ1RpbWVBY3Rpb24pOworCQkKKwkJLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKworCQkvLyBQbGFjZSBIb2xkZXIgZm9yIE1lbnUgQWRkaXRpb25zCisJCWNvbnRleHRNZW51TWFuYWdlci5hZGQobmV3IFNlcGFyYXRvcigKKwkJCQlJV29ya2JlbmNoQWN0aW9uQ29uc3RhbnRzLk1CX0FERElUSU9OUykpOworCisJCS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCQkKKwkJdmlld0xlZ2VuZCA9IG5ldyBMZWdlbmRWaWV3QWN0aW9uKCk7CisJCWhpZGVMZWdlbmQgPSBuZXcgTGVnZW5kSGlkZUFjdGlvbigpOworCQljb250ZXh0TWVudU1hbmFnZXIuYWRkKHZpZXdMZWdlbmQpOworCQljb250ZXh0TWVudU1hbmFnZXIuYWRkKGhpZGVMZWdlbmQpOworCQkKKwkJLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJCQorCQkKKwkJLy8gUGxhY2UgSG9sZGVyIGZvciBNZW51IEFkZGl0aW9ucworCQljb250ZXh0TWVudU1hbmFnZXIuYWRkKG5ldyBTZXBhcmF0b3IoCisJCQkJSVdvcmtiZW5jaEFjdGlvbkNvbnN0YW50cy5NQl9BRERJVElPTlMpKTsKKworCQkKKwkJLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJCS8vIGFkZCB0aGUgZGlzcGxheWFibGUgcHJvcGVydGllcworCQlmb3IgKGludCBpID0gMDsgaSA8IGNvbnRyb2wuZ2V0TnVtUHJvcGVydGllcygpOyBpICsrKSB7CisJCQkKKwkJCVN0cmluZyBuZXh0UHJvcCA9IGNvbnRyb2wuZ2V0UHJvcGVydHkoaSk7CisJCQlEYXRhU2VyaWVzIHNlcmllcyA9IGRhdGFTZXJpZXNNYXAuZ2V0KG5leHRQcm9wKTsKKwkJCURpc3BsYXlhYmxlUHJvcGVydHkgcHJvcGVydHkgPSBuZXcgRGlzcGxheWFibGVQcm9wZXJ0eShuZXh0UHJvcCwgc2VyaWVzLmlzVmlzaWJsZSgpKTsKKwkJCWNvbnRleHRNZW51TWFuYWdlci5hZGQocHJvcGVydHkpOworCQl9CisKKwkJLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKwkJLy8gUGxhY2UgSG9sZGVyIGZvciBNZW51IEFkZGl0aW9ucworCQljb250ZXh0TWVudU1hbmFnZXIuYWRkKG5ldyBTZXBhcmF0b3IoCisJCQkJSVdvcmtiZW5jaEFjdGlvbkNvbnN0YW50cy5NQl9BRERJVElPTlMpKTsKKworCQkvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworCQlmaW5hbCBNZW51IHBvcFVwTWVudSA9IGNvbnRleHRNZW51TWFuYWdlci5jcmVhdGVDb250ZXh0TWVudShwYXJlbnQpOworCisJCS8vIFNldCB0aGUgY29udGV4dCBtZW51IGZvciB0aGUgdmlld2VyCisJCXBhcmVudC5zZXRNZW51KHBvcFVwTWVudSk7CisKKworCX0gLy8gdXBkYXRlQ29udGV4dE1lbnUKKworCisJCisJLyoqCisJICogU2V0cyB0aGUgY29sb3JzIGZvciBhIG4gYXJyYXkgb2YgTGluZVNlcmllcyBnaXZlbiB0aGUgcHJvcGVydHkgdG8gUGxvdAorCSAqIGZvciBlYWNoLiBUcnkgdG8gc2V0IGNvbG9yIGZyb20gdGhlIHByZWZlcmVuY2VzIChpZiBzcGVjaWZpZWQgZm9yIHRoYXQKKwkgKiBwcm9wZXJ0eSkgb3RoZXJ3aXNlIHNldHMgbGluZSBjb2xvciB0byB3aGl0ZS4KKwkgKiAKKwkgKiBAcGFyYW0gcHJvcGVydGllc1RvUGxvdAorCSAqIEBwYXJhbSBsc0xpc3QKKwkgKi8KKwlwdWJsaWMgc3RhdGljIHZvaWQgc2V0Q29sb3JEZWZzKAorCQkJZmluYWwgTGlzdDxTdHJpbmc+IHByb3BlcnRpZXNUb1Bsb3QsCisJCQlmaW5hbCBMaXN0PExpbmVTZXJpZXM+IGxzTGlzdCkgeworCQkvLyB0aGUgZGVmYXVsdCBsaW5lIGNvbG9yCisKKwkJLy8gaWYgcG9zc2libGUgZ2V0IGNvbG9yIGZyb20gcHJlZmVyZW5jZXMKKwkJZmluYWwgTWFwPFN0cmluZywgQ29sb3I+IGNvbG9yTWFwID0gVmlzdWFsaXphdGlvblByZWZlcmVuY2VQYWdlCisJCQkJLmdldENvbG9yTWFwcGluZygpOworCQlmb3IgKGludCBpID0gMDsgaSA8IGxzTGlzdC5zaXplKCk7IGkrKykgeworCQkJQ29sb3JEZWZpbml0aW9uIGNvbG9yID0gQ29sb3JEZWZpbml0aW9uSW1wbC5XSElURSgpOworCisJCQlpZiAoKHByb3BlcnRpZXNUb1Bsb3QgIT0gbnVsbCkgJiYgKHByb3BlcnRpZXNUb1Bsb3Quc2l6ZSgpID4gaSkpIHsKKwkJCQlmaW5hbCBTdHJpbmcga2V5ID0gcHJvcGVydGllc1RvUGxvdC5nZXQoaSk7CisJCQkJLy8gbG9vayBvciB0aGUgcHJlZmVyZW5jZSBjb2xvciBieSBuYW1lCisJCQkJaWYgKGNvbG9yTWFwLmNvbnRhaW5zS2V5KGtleSkpIHsKKwkJCQkJZmluYWwgQ29sb3IgYyA9IGNvbG9yTWFwLmdldChrZXkpOworCQkJCQljb2xvciA9IENvbG9yRGVmaW5pdGlvbkltcGwuY3JlYXRlKGMuZ2V0UmVkKCksCisJCQkJCQkJYy5nZXRHcmVlbigpLCBjLmdldEJsdWUoKSk7CisJCQkJfQorCQkJCWxzTGlzdC5nZXQoaSkuc2V0U2VyaWVzSWRlbnRpZmllcihrZXkpOworCQkJCWxzTGlzdC5nZXQoaSkuZ2V0TGluZUF0dHJpYnV0ZXMoKS5zZXRDb2xvcihjb2xvcik7CisJCQl9IGVsc2UgeworCisJCQkJaWYgKGxzTGlzdC5nZXQoaSkgIT0gbnVsbCkgeworCQkJCQlsc0xpc3QuZ2V0KGkpLnNldFNlcmllc0lkZW50aWZpZXIoIiAiKTsKKwkJCQkJbHNMaXN0LmdldChpKS5nZXRMaW5lQXR0cmlidXRlcygpLnNldENvbG9yKGNvbG9yKTsKKwkJCQl9CisJCQl9CisJCX0KKwkJcmV0dXJuOworCX0vLyBnZXRDb2xvckRlZgorCisKKwkKKworCS8qKgorCSAqIERpc3Bvc2VzIHRoZSBDb2xvciBvYmplY3RzCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgZGlzcG9zZSgpIHsKKwkJc3VwZXIuZGlzcG9zZSgpOworCX0KKworCS8qKgorCSAqIHJlc2V0CisJICovCisJcHVibGljIHZvaWQgcmVzZXQoKSB7CisJCXJlc2V0RGF0YSgpOworCQlyZWRyYXcoKTsKKwl9CisKKwlwcm90ZWN0ZWQgdm9pZCByZXNldERhdGEoKSB7CisJCWNsZWFyRGF0YSgpOworCQorCQljeWNsZU51bWJlcnMuYWRkKEludGVnZXIudmFsdWVPZigwKSk7CisJfQorCisJcHJpdmF0ZSB2b2lkIGNsZWFyRGF0YSgpIHsKKwkJCisJCUl0ZXJhdG9yPFN0cmluZz4gaXRlciA9IGRhdGFTZXJpZXNNYXAua2V5U2V0KCkuaXRlcmF0b3IoKTsKKwkJd2hpbGUoKGl0ZXIhPW51bGwpJiYoaXRlci5oYXNOZXh0KCkpKSB7CisJCQlTdHJpbmcga2V5ID0gaXRlci5uZXh0KCk7CisJCQlEYXRhU2VyaWVzIHNlcmllcyA9IGRhdGFTZXJpZXNNYXAuZ2V0KGtleSk7CisJCQlzZXJpZXMucmVsYXRpdmVWYWx1ZXMuY2xlYXIoKTsKKwkJCXNlcmllcy5hZGRWYWx1ZShuZXcgRG91YmxlKDAuMCkpOworCQl9CisJCWN5Y2xlTnVtYmVycy5jbGVhcigpOworCX0KKworCQorCS8qKgorCSAqIHRvZ2dsZSB0aGUgc2NhbGUgZnJvbSBsb2dhcml0aG1pYyB0byBsaW5lYXIKKwkgKi8KKwl2b2lkIHRvZ2dsZUF4aXNTY2FsZSgpIHsKKwkJaWYgKHVzZUxpbmVhclRpbWVTY2FsZSkgeyAvL1N3aXRjaCB0byBsb2dhcml0aG1pYyBzY2FsZQorCQkJbG9nVGltZUFjdGlvbi5zZXRDaGVja2VkKHRydWUpOworCQkJbGluZWFyVGltZUFjdGlvbi5zZXRDaGVja2VkKGZhbHNlKTsKKwkJCS8vSnVzdCB1c2luZyB0aGUgZm9sbG93aW5nIGF4aXMgdHlwZSwgdG8gbW92ZSB0byBsb2cgc2NhbGUsIGRpZG4ndCB3b3JrCisJCQkvL3lBeGlzUHJpbWFyeS5zZXRUeXBlKEF4aXNUeXBlLkxPR0FSSVRITUlDX0xJVEVSQUwpOworCQkJeUF4aXNQcmltYXJ5LmdldFNjYWxlKCkuc2V0TWluKG51bGwpOworCQkJeUF4aXNQcmltYXJ5LmdldFNjYWxlKCkuc2V0TWF4KG51bGwpOworCQkJeUF4aXNQcmltYXJ5LmdldFNjYWxlKCkudW5zZXRTdGVwKCk7CisJCQl5QXhpc1ByaW1hcnkuZ2V0U2NhbGUoKS51bnNldFN0ZXBOdW1iZXIoKTsKKwkJfQorCQllbHNlIHsgLy9Td2l0Y2ggdG8gbGluZWFyIHNjYWxlCisJCQlsb2dUaW1lQWN0aW9uLnNldENoZWNrZWQoZmFsc2UpOworCQkJbGluZWFyVGltZUFjdGlvbi5zZXRDaGVja2VkKHRydWUpOworCQkJLy95QXhpc1ByaW1hcnkuc2V0VHlwZShBeGlzVHlwZS5MSU5FQVJfTElURVJBTCk7CisJCQl5QXhpc1ByaW1hcnkuZ2V0U2NhbGUoKS5zZXRNaW4oTnVtYmVyRGF0YUVsZW1lbnRJbXBsLmNyZWF0ZSgwLjApKTsKKwkJCXlBeGlzUHJpbWFyeS5nZXRTY2FsZSgpLnNldE1heChOdW1iZXJEYXRhRWxlbWVudEltcGwuY3JlYXRlKDEuMCkpOworCQkJeUF4aXNQcmltYXJ5LmdldFNjYWxlKCkuc2V0U3RlcCgwLjI1KTsKKwkJfQorCQl1c2VMaW5lYXJUaW1lU2NhbGUgPSAhdXNlTGluZWFyVGltZVNjYWxlOworCQlkcmF3KCk7CisJfQorCQorCisJLyoqCisJICogdG9nZ2xlIHRoZSBzY2FsZSBmcm9tIGxvZ2FyaXRobWljIHRvIGxpbmVhcgorCSAqLworCXZvaWQgdG9nZ2xlTGVnZW5kKCkgeworCQlpZiAoc2hvd0xlZ2VuZCkgeyAvL1N3aXRjaCB0byBoaWRlCisJCQl2aWV3TGVnZW5kLnNldENoZWNrZWQoZmFsc2UpOworCQkJaGlkZUxlZ2VuZC5zZXRDaGVja2VkKHRydWUpOworCQkJbGVnZW5kLnNldFZpc2libGUoZmFsc2UpOworCQl9CisJCWVsc2UgeyAvL1N3aXRjaCB0byB2aWV3CisJCQl2aWV3TGVnZW5kLnNldENoZWNrZWQodHJ1ZSk7CisJCQloaWRlTGVnZW5kLnNldENoZWNrZWQoZmFsc2UpOworCQkJbGVnZW5kLnNldFZpc2libGUodHJ1ZSk7CisJCX0KKwkJc2hvd0xlZ2VuZCA9ICFzaG93TGVnZW5kOworCQlkcmF3KCk7CisJfQorCQorCS8qKgorCSAqIAorCSAqIEBwYXJhbSBtaW5Zc2NhbGUKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRNaW5Zc2NhbGUoZG91YmxlIG1pbllzY2FsZSkgeworCQl0aGlzLm1pbllzY2FsZSA9IG1pbllzY2FsZTsKKwl9CisKKworCS8qKgorCSAqIEFjdGlvbiB0byBzaG93IHRoZSBsZWdlbmQKKwkgKi8KKwlwcm90ZWN0ZWQgY2xhc3MgTGVnZW5kVmlld0FjdGlvbiBleHRlbmRzIEFjdGlvbiB7CisJCXB1YmxpYyBMZWdlbmRWaWV3QWN0aW9uKCkKKwkJeworCQkJc3VwZXIoTWVzc2FnZXMuZ2V0U3RyaW5nKCJDb250ZXh0TWVudS5TaG93TGVnZW5kIiksIElBY3Rpb24uQVNfQ0hFQ0tfQk9YKTsKKwkJCXNldENoZWNrZWQoc2hvd0xlZ2VuZCk7CisJCX0KKworCQkvKioKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uQWN0aW9uI2dldFRleHQoKQorCQkgKi8KKwkJQE92ZXJyaWRlCisJCXB1YmxpYyBTdHJpbmcgZ2V0VGV4dCgpIHsKKwkJCXJldHVybiBNZXNzYWdlcy5nZXRTdHJpbmcoIkNvbnRleHRNZW51LlNob3dMZWdlbmQiKTsKKwkJfQorCisJCS8qKgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5BY3Rpb24jcnVuKCkKKwkJICovCisJCUBPdmVycmlkZQorCQlwdWJsaWMgdm9pZCBydW4oKSB7CisJCQlpZiAoc2hvd0xlZ2VuZCkgeworCQkJCXNldENoZWNrZWQodHJ1ZSk7CisJCQkJLy9Ob3RoaW5nIHRvIGRvLiBJdCdzIGFscmVhZHkgbGluZWFyLXRpbWUuCisJCQl9CisJCQllbHNlIHsKKwkJCQl0b2dnbGVMZWdlbmQoKTsKKwkJCX0KKwkJCWRyYXcoKTsKKwkJfQorCX0gLy9MZWdlbmRWaWV3QWN0aW9uCisJCisJLyoqCisJICogQWN0aW9uIHRvIGhpZGUgdGhlIGxlZ2VuZAorCSAqLworCWNsYXNzIExlZ2VuZEhpZGVBY3Rpb24gZXh0ZW5kcyBBY3Rpb24gCXsKKwkJcHVibGljIExlZ2VuZEhpZGVBY3Rpb24oKQorCQl7CisJCQlzdXBlcihNZXNzYWdlcy5nZXRTdHJpbmcoIkNvbnRleHRNZW51LkhpZGVMZWdlbmQiKSwgSUFjdGlvbi5BU19DSEVDS19CT1gpOworCQkJc2V0Q2hlY2tlZCghc2hvd0xlZ2VuZCk7CisJCX0KKworCQkvKioKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uQWN0aW9uI2dldFRleHQoKQorCQkgKi8KKwkJQE92ZXJyaWRlCisJCXB1YmxpYyBTdHJpbmcgZ2V0VGV4dCgpIHsKKwkJCXJldHVybiBNZXNzYWdlcy5nZXRTdHJpbmcoIkNvbnRleHRNZW51LkhpZGVMZWdlbmQiKTsKKwkJfQorCisJCS8qKgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5BY3Rpb24jcnVuKCkKKwkJICovCisJCUBPdmVycmlkZQorCQlwdWJsaWMgdm9pZCBydW4oKSB7CisJCQlpZiAoIXNob3dMZWdlbmQpIHsKKwkJCQlzZXRDaGVja2VkKHRydWUpOworCQkJCS8vTm90aGluZyB0byBkby4gSXQncyBhbHJlYWR5IGxvZy10aW1lLgorCQkJfQorCQkJZWxzZSB7CisJCQkJdG9nZ2xlTGVnZW5kKCk7CisJCQl9CisJCQlkcmF3KCk7CisJCX0KKwl9Ly9MZWdlbmRIaWRlQWN0aW9uCisKKwkKKwkvKioKKwkgKiBzd2l0Y2ggdG8gbGluZWFyIHBsb3QgCisJICogCisJICovCisJcHJvdGVjdGVkIGNsYXNzIExpbmVhclNjYWxlQWN0aW9uIGV4dGVuZHMgQWN0aW9uIHsKKwkJcHVibGljIExpbmVhclNjYWxlQWN0aW9uKCkKKwkJeworCQkJc3VwZXIoTWVzc2FnZXMuZ2V0U3RyaW5nKCJDb250ZXh0TWVudS5MaW5lYXJUaW1lU2NhbGUiKSwgSUFjdGlvbi5BU19DSEVDS19CT1gpOworCQkJc2V0Q2hlY2tlZCh1c2VMaW5lYXJUaW1lU2NhbGUpOworCQl9CisKKwkJLyoqCisJCSAqIEBzZWUgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLkFjdGlvbiNnZXRUZXh0KCkKKwkJICovCisJCUBPdmVycmlkZQorCQlwdWJsaWMgU3RyaW5nIGdldFRleHQoKSB7CisJCQlyZXR1cm4gTWVzc2FnZXMuZ2V0U3RyaW5nKCJDb250ZXh0TWVudS5MaW5lYXJUaW1lU2NhbGUiKTsKKwkJfQorCisJCS8qKgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5BY3Rpb24jcnVuKCkKKwkJICovCisJCUBPdmVycmlkZQorCQlwdWJsaWMgdm9pZCBydW4oKSB7CisJCQlpZiAodXNlTGluZWFyVGltZVNjYWxlKSB7CisJCQkJc2V0Q2hlY2tlZCh0cnVlKTsKKwkJCQkvL05vdGhpbmcgdG8gZG8uIEl0J3MgYWxyZWFkeSBsaW5lYXItdGltZS4KKwkJCX0KKwkJCWVsc2UgeworCQkJCXRvZ2dsZUF4aXNTY2FsZSgpOworCQkJfQorCQkJZHJhdygpOworCQl9CisJfSAvL0xpbmVhclNjYWxlQWN0aW9uCisKKwkvKioKKwkgKiBzd2l0Y2ggdG8gc2VtaS1sb2cgcGxvdCAobG9nIHNjYWxlIG9uIHkgYXhpcykKKwkgKiAKKwkgKi8KKwljbGFzcyBMb2dTY2FsZUFjdGlvbiBleHRlbmRzIEFjdGlvbiAJeworCQlwdWJsaWMgTG9nU2NhbGVBY3Rpb24oKQorCQl7CisJCQlzdXBlcihNZXNzYWdlcy5nZXRTdHJpbmcoIkNvbnRleHRNZW51LkxvZ1RpbWVTY2FsZSIpLCBJQWN0aW9uLkFTX0NIRUNLX0JPWCk7CisJCQlzZXRDaGVja2VkKCF1c2VMaW5lYXJUaW1lU2NhbGUpOworCQl9CisKKwkJLyoqCisJCSAqIEBzZWUgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLkFjdGlvbiNnZXRUZXh0KCkKKwkJICovCisJCUBPdmVycmlkZQorCQlwdWJsaWMgU3RyaW5nIGdldFRleHQoKSB7CisJCQlyZXR1cm4gTWVzc2FnZXMuZ2V0U3RyaW5nKCJDb250ZXh0TWVudS5Mb2dUaW1lU2NhbGUiKTsKKwkJfQorCisJCS8qKgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5BY3Rpb24jcnVuKCkKKwkJICovCisJCUBPdmVycmlkZQorCQlwdWJsaWMgdm9pZCBydW4oKSB7CisJCQlpZiAoIXVzZUxpbmVhclRpbWVTY2FsZSkgeworCQkJCXNldENoZWNrZWQodHJ1ZSk7CisJCQkJLy9Ob3RoaW5nIHRvIGRvLiBJdCdzIGFscmVhZHkgbG9nLXRpbWUuCisJCQl9CisJCQllbHNlIHsKKwkJCQl0b2dnbGVBeGlzU2NhbGUoKTsKKwkJCX0KKwkJCWRyYXcoKTsKKwkJfQorCX0vL0xvZ1NjYWxlQWN0aW9uCisJCisJLyoqCisJICogRGlzcGxheWFibGVQcm9wZXJ0eQorCSAqCisJICovCisJcHJvdGVjdGVkIGNsYXNzIERpc3BsYXlhYmxlUHJvcGVydHkgZXh0ZW5kcyBBY3Rpb24KKwl7CisJCVN0cmluZyBwcm9wZXJ0eSA9IG51bGw7CisJCXB1YmxpYyBEaXNwbGF5YWJsZVByb3BlcnR5KFN0cmluZyBwcm9wZXJ0eSwgYm9vbGVhbiB2aXNpYmlsaXR5KQorCQl7CisJCQkJCXN1cGVyKHByb3BlcnR5LCBJQWN0aW9uLkFTX0NIRUNLX0JPWCk7CisJCQkJCXRoaXMucHJvcGVydHkgPSBwcm9wZXJ0eTsKKwkJCQkJc2V0Q2hlY2tlZCh2aXNpYmlsaXR5KTsKKwkJfQorCQkKKwkKKworCQkvKioKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uQWN0aW9uI2dldFRleHQoKQorCQkgKi8KKwkJQE92ZXJyaWRlCisJCXB1YmxpYyBTdHJpbmcgZ2V0VGV4dCgpIHsKKwkJCXJldHVybiBwcm9wZXJ0eTsKKwkJfQorCisJCS8qKgorCQkgKiBUb2dnbGUgdGhlIHN0YXRlCisJCSAqIEBzZWUgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLkFjdGlvbiNydW4oKQorCQkgKi8KKwkJQE92ZXJyaWRlCisJCXB1YmxpYyB2b2lkIHJ1bigpIHsKKwkJCQlEYXRhU2VyaWVzIHNlcmllcyA9IGRhdGFTZXJpZXNNYXAuZ2V0KHByb3BlcnR5KTsKKwkJCQlzZXJpZXMudG9nZ2xlVmlzaWJsZSgpOworCQkJCWRhdGFTZXJpZXNNYXAucHV0KHByb3BlcnR5LHNlcmllcyk7CisJCQkJc2V0Q2hlY2tlZChzZXJpZXMuaXNWaXNpYmxlKCkpOworCQkJCWRyYXcoKTsKKwkJfQorCX0vLyBEaXNwbGF5YWJsZVByb3BlcnR5CisJCisJCisJLyoqCisJICogSW5uZXIgY2xhc3MgRGF0YVNlcmllcworCSAqIGFsbCB0aGUgZGF0YSBvYmplY3RzIGZvciBhIHBsb3QKKwkgKgorCSAqLworCXByb3RlY3RlZCBjbGFzcyBEYXRhU2VyaWVzIAorCXsKKwkJcHVibGljIFN0cmluZyBwcm9wZXJ0eU5hbWUgPSAiIjsKKwkJCisJCXB1YmxpYyBMaXN0PERvdWJsZT4gcmVsYXRpdmVWYWx1ZXMgPSBuZXcgQXJyYXlMaXN0PERvdWJsZT4oKTsKKwkJcHVibGljIFNlcmllcyBsaW5lU2VyaWVzID0gbnVsbDsKKwkJcHJpdmF0ZSBib29sZWFuIHZpc2libGUgPSB0cnVlOworCQlwcml2YXRlIFNlcmllc0RlZmluaXRpb24gc2RZID0gbnVsbDsKKwkJcHJpdmF0ZSBib29sZWFuIG92ZXJsYXlNb2RlID0gZmFsc2U7CisJCQorCQkKKwkJcHVibGljIGJvb2xlYW4gaXNWaXNpYmxlKCkgeworCQkJcmV0dXJuIHZpc2libGU7CisJCX0KKwkJcHVibGljIHZvaWQgc2V0VmlzaWJsZShib29sZWFuIHN0YXRlKSB7CisJCQl2aXNpYmxlID0gc3RhdGU7CisJCX0KKwkJCisJCXB1YmxpYyB2b2lkIHRvZ2dsZVZpc2libGUoKSB7CisJCQl2aXNpYmxlID0gIXZpc2libGU7CisJCX0KKworCQkvKioKKwkJICogCisJCSAqIEBwYXJhbSBwcm9wZXJ0eU5hbWUKKwkJICogQHBhcmFtIG92ZXJsYXkgCisJCSAqLworCQlwdWJsaWMgRGF0YVNlcmllcyhTdHJpbmcgcHJvcGVydHlOYW1lLCBib29sZWFuIG92ZXJsYXkpIHsKKwkJCXRoaXMucHJvcGVydHlOYW1lID0gcHJvcGVydHlOYW1lOworCQkJdGhpcy5vdmVybGF5TW9kZSA9IG92ZXJsYXk7CisJCQlyZWxhdGl2ZVZhbHVlcyA9IG5ldyBBcnJheUxpc3Q8RG91YmxlPigpOworCQkJcmVsYXRpdmVWYWx1ZXMuYWRkKG5ldyBEb3VibGUoMC4wKSk7CisJCQlhZGRMaW5lU2VyaWVzKHByb3BlcnR5TmFtZSk7CisJCQkvLyBmb3IgdGhlIEFnZ3JlZ2F0ZVRpbWVTZXJpZXMgQ2FudmFzLCBieSBkZWZhdWx0CisJCQkvLyB3ZSB3aWxsIHN0YXJ0IHdpdGggb25seSB0aGUgcmVmZXJlbmNlIHNlcmllcyBhbmQgdGhlIEkgc2VyaWVzIHZpc2libGUKKwkJCWlmKCghKHRoaXMucHJvcGVydHlOYW1lLmVxdWFsc0lnbm9yZUNhc2UoQWdncmVnYXRlVmFsdWVIaXN0b3J5UGxvdHRlci5SRUZFUkVOQ0VfUFJPUEVSVFkpKSkmJighdGhpcy5wcm9wZXJ0eU5hbWUuZXF1YWxzSWdub3JlQ2FzZShERUZBVUxUX1BST1BFUlRZKSkpIHsKKwkJCQl2aXNpYmxlID0gZmFsc2U7CisJCQl9CisJCX0KKwkJCisJCXB1YmxpYyB2b2lkIGFkZFZhbHVlKERvdWJsZSB2YWwpIHsKKwkJCWlmKHJlbGF0aXZlVmFsdWVzPT1udWxsKSByZWxhdGl2ZVZhbHVlcyA9IG5ldyBBcnJheUxpc3Q8RG91YmxlPigpOworCQkJcmVsYXRpdmVWYWx1ZXMuYWRkKHZhbCk7CisJCX0KKwkJCisJCQorCQlwdWJsaWMgdm9pZCBhZGRWYWx1ZShpbnQgdGltZSwgRG91YmxlIHZhbCkgeworCQkJaWYocmVsYXRpdmVWYWx1ZXM9PW51bGwpIHJlbGF0aXZlVmFsdWVzID0gbmV3IEFycmF5TGlzdDxEb3VibGU+KCk7CisJCQlyZWxhdGl2ZVZhbHVlcy5hZGQodGltZSwgdmFsKTsKKwkJfQorCQkKKwkJLyoqCisJCSAqIEBwYXJhbSBwcm9wZXJ0eU5hbWUKKwkJICogCisJCSAqLworCQlAU3VwcHJlc3NXYXJuaW5ncygiZGVwcmVjYXRpb24iKQorCQlwdWJsaWMgdm9pZCBhZGRMaW5lU2VyaWVzKGZpbmFsIFN0cmluZyBwcm9wZXJ0eU5hbWUpIHsKKwkJCQorCQkJZmluYWwgTnVtYmVyRGF0YVNldCBvcnRob1ZhbHVlcyA9IE51bWJlckRhdGFTZXRJbXBsCisJCQkJCS5jcmVhdGUocmVsYXRpdmVWYWx1ZXMpOworCQkJaWYobGluZVNlcmllcyA9PSBudWxsKSB7CisJCQkJbGluZVNlcmllcyA9IFNjYXR0ZXJTZXJpZXNJbXBsLmNyZWF0ZSgpOworCQkJCS8qCisJCQkJICogCisJCQkJICogQmFyIGNoYXJ0IHN0eWxlIGlzIHRvbyBzbG93IGZvciBnZW5lcmF0aW9uIG9mIGEgZmlsbAorCQkJCSAqIGlmIHdlIHdhbnQgYSBmaWxsIHdlIGNhbiB0cnkgdXNpbmcgdGhlIGRpZmZlcmVuY2UgcGxvdAorCQkJCSAqIHRvIGEgc3RyYWlnaHQgbGluZSBhdCB5PTAKKwkJCQkgKiAKKwkJCQkKKwkJCQlpZihwcm9wZXJ0eU5hbWUuaW5kZXhPZigiKiIpPj0xKSB7CisJCQkJCS8vIGJhcnNlcmllcyBtZXRob2RzCisJCQkJCWxpbmVTZXJpZXMgPSAoQmFyU2VyaWVzKSBCYXJTZXJpZXNJbXBsLmNyZWF0ZSgpOworCQkJCX0gZWxzZSB7CisJCQkJCWxpbmVTZXJpZXMgPSAoU2NhdHRlclNlcmllcykgU2NhdHRlclNlcmllc0ltcGwuY3JlYXRlKCk7CisJCQkJfQorCQkJCQorCQkJCSoKKwkJCQkqLworCQkJfSAvLyBpZiBsaW5lU2VyaWVzPT1udWxsCisJCQlsaW5lU2VyaWVzLnNldERhdGFTZXQob3J0aG9WYWx1ZXMpOworCQkJKChMaW5lU2VyaWVzKSBsaW5lU2VyaWVzKS5nZXRMaW5lQXR0cmlidXRlcygpLnNldFZpc2libGUodHJ1ZSk7CisJCQkKKwkJCS8vIHJlcGxhY2VzIGRlcHJlY2F0ZWQgY29kZTogbGluZVNlcmllcy5nZXRNYXJrZXIoKS5zZXRWaXNpYmxlKGZhbHNlKTsKKwkJCWlmICghKChMaW5lU2VyaWVzKSBsaW5lU2VyaWVzKS5nZXRNYXJrZXJzKCkuaXNFbXB0eSgpKSB7CisJCQkJTWFya2VyIG1hcmtlciA9ICgoTGluZVNlcmllcykgbGluZVNlcmllcykuZ2V0TWFya2VycygpLmdldCgwKTsKKwkJCQltYXJrZXIuc2V0VmlzaWJsZShmYWxzZSk7CisJCQl9CisJCQkKKwkJCS8vIEFzc2lnbiB0aGUgbGluZSBjb2xvcgorCQkJLy8gYmFzZWQgb24gc2VsZWN0ZWQgcHJvcGVydHkuIERlZmF1bHQgaXMgQmx1ZQorCQkJc2V0Q29sb3JEZWZzKHByb3BlcnR5TmFtZSk7CisJCQkvLyBJZiB0aGlzIGlzIHRoZSAic2VsZWN0ZWQiIHJlZ2lvbiBvZiBhIGdyYXBoIHNldCB0aGUgbWFya2VyIHR5cGUKKwkJCisJCQkvLyB0aGUgc2VyaWVzIGRlZgorCQkJc2RZID0gU2VyaWVzRGVmaW5pdGlvbkltcGwuY3JlYXRlKCk7CisJCQlzZFkuZ2V0U2VyaWVzUGFsZXR0ZSgpLnVwZGF0ZSgtMik7CisJCQlzZFkuZ2V0U2VyaWVzKCkuYWRkKGxpbmVTZXJpZXMpOworCQkJeUF4aXNQcmltYXJ5LmdldFNlcmllc0RlZmluaXRpb25zKCkuYWRkKHNkWSk7CisJCQkKKwkJCXJldHVybjsKKwkJfS8vIGFkZExpbmVTZXJpZXMKKwkJCisJCS8qKiAKKwkJICogaW4gcmVzcG9uc2UgdG8gdXNlciBhY3Rpb24gdGVtcG9yYXJpbHkgcmVtb3ZlIHRoZSBsaW5lIHNlcmllcyBmcm9tIHRoZSBncmFwaAorCQkgKi8KKwkJcHVibGljIHZvaWQgaGlkZSgpIHsKKwkJCWxpbmVTZXJpZXMuc2V0VmlzaWJsZShmYWxzZSk7CisJCQl2aXNpYmxlID0gZmFsc2U7CisJCX0vLyBoaWRlCisJCQorCQkvKiogCisJCSAqIGluIHJlc3BvbnNlIHRvIHVzZXIgYWN0aW9uIGFkZCBiYWNrIHRoZSBsaW5lIHNlcmllcyB0byB0aGUgZ3JhcGgKKwkJICovCisJCXB1YmxpYyB2b2lkIHNob3coKSB7CisJCQlsaW5lU2VyaWVzLnNldFZpc2libGUodHJ1ZSk7CisJCQl2aXNpYmxlID0gdHJ1ZTsKKwkJfS8vIHNob3cKKwkJCisKKwkJLyoqCisJCSAqIFNldHMgdGhlIGNvbG9ycyBmb3IgYSBuIGFycmF5IG9mIExpbmVTZXJpZXMgZ2l2ZW4gdGhlIHByb3BlcnR5IHRvIFBsb3QKKwkJICogZm9yIGVhY2guIFRyeSB0byBzZXQgY29sb3IgZnJvbSB0aGUgcHJlZmVyZW5jZXMgKGlmIHNwZWNpZmllZCBmb3IgdGhhdAorCQkgKiBwcm9wZXJ0eSkgb3RoZXJ3aXNlIHNldHMgbGluZSBjb2xvciB0byBibHVlLgorCQkgKiBAcGFyYW0gcHJvcGVydHlOYW1lIAorCQkgKgorCQkgKi8KKwkJcHVibGljIHZvaWQgc2V0Q29sb3JEZWZzKFN0cmluZyBwcm9wZXJ0eU5hbWUpIHsKKwkJCS8vIHRoZSBkZWZhdWx0IGxpbmUgY29sb3IKKworCQkJLy8gaWYgcG9zc2libGUgZ2V0IGNvbG9yIGZyb20gcHJlZmVyZW5jZXMKKwkJCWZpbmFsIE1hcDxTdHJpbmcsIENvbG9yPiBjb2xvck1hcCA9IFZpc3VhbGl6YXRpb25QcmVmZXJlbmNlUGFnZS5nZXRDb2xvck1hcHBpbmcoKTsKKworCQkJLy8gZGVmYXVsdCBjb2xvcgorCQkJQ29sb3JEZWZpbml0aW9uIGNvbG9yID0gQ29sb3JEZWZpbml0aW9uSW1wbC5XSElURSgpOworCisJCQkvLyBwcmVmZXJyZWQgY29sb3IgYnkgbmFtZQorCQkJU3RyaW5nIGtleSA9IHByb3BlcnR5TmFtZS5zdWJzdHJpbmcoMCwxKTsKKwkJCQorCQkJaWYgKGNvbG9yTWFwLmNvbnRhaW5zS2V5KGtleSkpIHsKKwkJCQlmaW5hbCBDb2xvciBjID0gY29sb3JNYXAuZ2V0KGtleSk7CisJCQkJY29sb3IgPSBDb2xvckRlZmluaXRpb25JbXBsLmNyZWF0ZShjLmdldFJlZCgpLCBjLmdldEdyZWVuKCksIGMuZ2V0Qmx1ZSgpKTsKKwkJCX0KKwkJCQorCQkJdGhpcy5saW5lU2VyaWVzLnNldFNlcmllc0lkZW50aWZpZXIocHJvcGVydHlOYW1lKTsKKwkJCWlmIChvdmVybGF5TW9kZSkgeworCQkJCWlmKHByb3BlcnR5TmFtZS5pbmRleE9mKCIqIik+PTEpIHsKKwkJCQkJLy8gYmFyc2VyaWVzIG1ldGhvZHMKKwkJCQkJKChMaW5lU2VyaWVzKXRoaXMubGluZVNlcmllcykuZ2V0TGluZUF0dHJpYnV0ZXMoKS5zZXRDb2xvcihjb2xvcik7CisJCQkJfSBlbHNlIHsKKwkJCQkJKChMaW5lU2VyaWVzKXRoaXMubGluZVNlcmllcykuZ2V0TGluZUF0dHJpYnV0ZXMoKS5zZXRDb2xvcihDb2xvckRlZmluaXRpb25JbXBsLkdSRVkoKSk7CisJCQkJCSgoTGluZVNlcmllcyl0aGlzLmxpbmVTZXJpZXMpLmdldExpbmVBdHRyaWJ1dGVzKCkuc2V0U3R5bGUoTGluZVN0eWxlLkRPVFRFRF9MSVRFUkFMKTsKKwkJCQl9CisJCQl9IGVsc2UgeworCQkJCSgoTGluZVNlcmllcyl0aGlzLmxpbmVTZXJpZXMpLmdldExpbmVBdHRyaWJ1dGVzKCkuc2V0Q29sb3IoY29sb3IpOworCQkJfQorCQkJCisJCQkKKwkJfS8vIGdldENvbG9yRGVmcworCisJCS8qKgorCQkgKiBsZW5ndGggb2YgdGhlIHNlcmllcworCQkgKiBAcmV0dXJuIG51bWJlciBvZiBkYXRhIHBvaW50cworCQkgKi8KKwkJcHVibGljIGludCBnZXREYXRhU2l6ZSgpIHsKKwkJCXJldHVybiByZWxhdGl2ZVZhbHVlcy5zaXplKCk7CisJCX0KKwkJLy8gQWNjZXNzb3JzCisJCXB1YmxpYyBTdHJpbmcgZ2V0UHJvcGVydHlOYW1lKCkgeworCQkJcmV0dXJuIHByb3BlcnR5TmFtZTsKKwkJfQorCisJCXB1YmxpYyB2b2lkIHNldFByb3BlcnR5TmFtZShTdHJpbmcgcHJvcGVydHlOYW1lKSB7CisJCQl0aGlzLnByb3BlcnR5TmFtZSA9IHByb3BlcnR5TmFtZTsKKwkJfQorCisJCXB1YmxpYyBMaXN0PERvdWJsZT4gZ2V0UmVsYXRpdmVWYWx1ZXMoKSB7CisJCQlyZXR1cm4gcmVsYXRpdmVWYWx1ZXM7CisJCX0KKworCQlwdWJsaWMgdm9pZCBzZXRSZWxhdGl2ZVZhbHVlcyhMaXN0PERvdWJsZT4gcmVsYXRpdmVWYWx1ZXMpIHsKKwkJCXRoaXMucmVsYXRpdmVWYWx1ZXMgPSByZWxhdGl2ZVZhbHVlczsKKwkJfQorCisJCQorCisJCXB1YmxpYyB2b2lkIHNldExpbmVTZXJpZXMoTGluZVNlcmllcyBsaW5lU2VyaWVzKSB7CisJCQl0aGlzLmxpbmVTZXJpZXMgPSBsaW5lU2VyaWVzOworCQl9CisJfS8vIERhdGFTZXJpZXMKKwkvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworCQorfSAvLyBBZ2dyZWdhdGVUaW1lU2VyaWVzQ2FudmFzCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkucmVwb3J0cy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9yZXBvcnRzL3ZpZXdzL0FnZ3JlZ2F0ZVRpbWVTZXJpZXNWaWV3LmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkucmVwb3J0cy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9yZXBvcnRzL3ZpZXdzL0FnZ3JlZ2F0ZVRpbWVTZXJpZXNWaWV3LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmUwNmRmYQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5yZXBvcnRzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3JlcG9ydHMvdmlld3MvQWdncmVnYXRlVGltZVNlcmllc1ZpZXcuamF2YQpAQCAtMCwwICsxLDk2IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0udWkucmVwb3J0cy52aWV3czsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb247CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLkRlY29yYXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmpvYnMuc2ltdWxhdGlvbi5TaW11bGF0aW9uTWFuYWdlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGU7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuSVNlbGVjdGlvbkxpc3RlbmVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2hQYXJ0OworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLnBhcnQuVmlld1BhcnQ7CisKKy8qKgorICogVGhpcyB2aWV3IGNvbnRhaW5zIEJJUlQgb3V0cHV0IHRoYXQgcGxvdHMgdmFsdWVzIG9mIHZhcmlhYmxlcyBpbiBTVEVNCisgKiBzaW11bGF0aW9ucy4KKyAqLworCitwdWJsaWMgY2xhc3MgQWdncmVnYXRlVGltZVNlcmllc1ZpZXcgZXh0ZW5kcyBWaWV3UGFydCBpbXBsZW1lbnRzIElTZWxlY3Rpb25MaXN0ZW5lciB7CisKKwkvKioKKwkgKiBUaGUgaWRlbnRpZmllciBvZiB0aGUgVGltZSBTZXJpZXMgVmlldworCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIElEX0FHR1JFR0FURV9WSUVXID0gIm9yZy5lY2xpcHNlLnN0ZW0udWkucmVwb3J0cy52aWV3cy5BZ2dyZWdhdGVUaW1lU2VyaWVzVmlldyI7IC8vJE5PTi1OTFMtMSQKKwkKKwlAU3VwcHJlc3NXYXJuaW5ncygidW51c2VkIikKKwkvL3ByaXZhdGUgTGlzdDxJZGVudGlmaWFibGU+IHNlbGVjdGVkSWRlbnRpZmlhYmxlcyA9IG51bGw7CisKKwkvKioKKwkgKiBUaGlzIGlzIHRoZSBkZWNvcmF0b3IgdGhhdCBoYXMgYmVlbiBzZWxlY3RlZCBieSB0aGUgY29tYm8gYm94LgorCSAqLworCXByb3RlY3RlZCBEZWNvcmF0b3Igc2VsZWN0ZWREZWNvcmF0b3I7CisKKwlwcml2YXRlIFJlcG9ydFZpZXdlciByZXBvcnRWaWV3ZXI7CisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnVpLnBhcnQuV29ya2JlbmNoUGFydCNjcmVhdGVQYXJ0Q29udHJvbChvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGUpCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgY3JlYXRlUGFydENvbnRyb2woZmluYWwgQ29tcG9zaXRlIHBhcmVudCkgeworCisJCXJlcG9ydFZpZXdlciA9IG5ldyBSZXBvcnRWaWV3ZXIocGFyZW50LCBBZ2dyZWdhdGVTZXJpZXNGYWN0b3J5LklOU1RBTkNFKTsKKwkJcmVwb3J0Vmlld2VyLnNldElucHV0KFNpbXVsYXRpb25NYW5hZ2VyLmdldE1hbmFnZXIoKSk7CisKKwkJZ2V0U2l0ZSgpLnNldFNlbGVjdGlvblByb3ZpZGVyKHJlcG9ydFZpZXdlcik7CisKKwkJLy8gUmVnaXN0ZXIgd2l0aCB0aGUgU2VsZWN0aW9uU2VydmljZQorCQlnZXRTaXRlKCkuZ2V0V29ya2JlbmNoV2luZG93KCkuZ2V0U2VsZWN0aW9uU2VydmljZSgpCisJCQkJLmFkZFNlbGVjdGlvbkxpc3RlbmVyKHRoaXMpOworCisJfSAvLyBjcmVhdGVQYXJ0Q29udHJvbAorCisJLyoqCisJICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIHdoZW5ldmVyIEFOWVRISU5HIGlzIHNlbGVjdGVkIGluIHRoZSBFY2xpcHNlCisJICogd29ya2JlbmNoLiBJdCdzIGpvYiBpcyB0byBmaWx0ZXIgb3V0IHNlbGVjdGlvbnMgb2YgSVNpbXVsYXRpb24gaW5zdGFuY2VzCisJICogYW5kIHVwZGF0ZSB0aGUgY2hhcnQgaW4gdGhlIFRpbWVTZXJpZXNDYW52YXMKKwkgKiAKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnVpLklTZWxlY3Rpb25MaXN0ZW5lciNzZWxlY3Rpb25DaGFuZ2VkKG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2hQYXJ0LAorCSAqICAgICAgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uKQorCSAqLworCUBTdXBwcmVzc1dhcm5pbmdzKCJ1bmNoZWNrZWQiKQorCXB1YmxpYyB2b2lkIHNlbGVjdGlvbkNoYW5nZWQoQFN1cHByZXNzV2FybmluZ3MoInVudXNlZCIpIGZpbmFsIElXb3JrYmVuY2hQYXJ0IHBhcnQsCisJCQlAU3VwcHJlc3NXYXJuaW5ncygidW51c2VkIikgZmluYWwgSVNlbGVjdGlvbiBzZWxlY3Rpb24pIHsKKwkJLy8gTm90aGluZworCX0gLy8gc2VsZWN0aW9uQ2hhbmdlZAorCisJCisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnVpLnBhcnQuV29ya2JlbmNoUGFydCNkaXNwb3NlKCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBkaXNwb3NlKCkgeworCQlnZXRTaXRlKCkuZ2V0V29ya2JlbmNoV2luZG93KCkuZ2V0U2VsZWN0aW9uU2VydmljZSgpCisJCQkJLnJlbW92ZVNlbGVjdGlvbkxpc3RlbmVyKHRoaXMpOworCX0gLy8gZGlzcG9zZQorCisJLyoqCisJICogVGhpcyBpcyByZXF1aXJlZCBieSB0aGUgaW50ZXJmYWNlLCBidXQgd2UncmUgbm90IHVzaW5nIGl0LgorCSAqIAorCSAqIEBzZWUgb3JnLmVjbGlwc2UudWkucGFydC5Xb3JrYmVuY2hQYXJ0I3NldEZvY3VzKCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBzZXRGb2N1cygpIHsKKwkJLy8gTm90aGluZworCX0gLy8gc2V0Rm9jdXMKKworfSAvLyBUaW1lU2VyaWVzVmlldwpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLnJlcG9ydHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvcmVwb3J0cy92aWV3cy9BZ2dyZWdhdGVWYWx1ZUhpc3RvcnlQbG90dGVyLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkucmVwb3J0cy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9yZXBvcnRzL3ZpZXdzL0FnZ3JlZ2F0ZVZhbHVlSGlzdG9yeVBsb3R0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZGM3MzE2Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLnJlcG9ydHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvcmVwb3J0cy92aWV3cy9BZ2dyZWdhdGVWYWx1ZUhpc3RvcnlQbG90dGVyLmphdmEKQEAgLTAsMCArMSw3NjEgQEAKKy8vIFJlbGF0aXZlVmFsdWVIaXN0b3J5UGxvdHRlci5qYXZhCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0udWkucmVwb3J0cy52aWV3czsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OworaW1wb3J0IGphdmEudXRpbC5BcnJheXM7CitpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247CitpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb25zOworaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOworaW1wb3J0IGphdmEudXRpbC5IYXNoU2V0OworaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuTWFwOworaW1wb3J0IGphdmEudXRpbC5NYXAuRW50cnk7CitpbXBvcnQgamF2YS51dGlsLlNldDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5FTGlzdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuRU1hcDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuVVJJOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5JZGVudGlmaWFibGU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkR5bmFtaWNMYWJlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguR3JhcGg7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLk5vZGU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLk5vZGVMYWJlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuRGVjb3JhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuYWRhcHRlcnMucmVsYXRpdmV2YWx1ZS5SZWxhdGl2ZVZhbHVlUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5hZGFwdGVycy5yZWxhdGl2ZXZhbHVlLlJlbGF0aXZlVmFsdWVQcm92aWRlckFkYXB0ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5hZGFwdGVycy5yZWxhdGl2ZXZhbHVlLlJlbGF0aXZlVmFsdWVQcm92aWRlckFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuYWRhcHRlcnMucmVsYXRpdmV2YWx1ZS5oaXN0b3J5LlJlbGF0aXZlVmFsdWVIaXN0b3J5UHJvdmlkZXJBZGFwdGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5EaXNlYXNlTW9kZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLkRpc2Vhc2VNb2RlbExhYmVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uam9icy5zaW11bGF0aW9uLklTaW11bGF0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uam9icy5zaW11bGF0aW9uLklTaW11bGF0aW9uTGlzdGVuZXJTeW5jOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uam9icy5zaW11bGF0aW9uLlNpbXVsYXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5qb2JzLnNpbXVsYXRpb24uU2ltdWxhdGlvbkV2ZW50OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uam9icy5zaW11bGF0aW9uLlNpbXVsYXRpb25TdGF0ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnVpLnJlcG9ydHMuQWN0aXZhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udWkucmVwb3J0cy5Nb25pdG9yUHJlZmVyZW5jZXM7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS51aS53aWRnZXRzLlByb3BlcnR5U2VsZWN0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS51aS53aWRnZXRzLlByb3BlcnR5U2VsZWN0b3IuUHJvcGVydHlTZWxlY3Rpb25FdmVudDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuU1dUOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuU2VsZWN0aW9uQWRhcHRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLlNlbGVjdGlvbkV2ZW50OworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5sYXlvdXQuRm9ybUF0dGFjaG1lbnQ7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5Gb3JtRGF0YTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QubGF5b3V0LkZvcm1MYXlvdXQ7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQnV0dG9uOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5GaWxlRGlhbG9nOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkxhYmVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlNoZWxsOworCisvKioKKyAqIFRoaXMgY2xhc3MgaXMgYSBTV1QgR1VJIGNvbXBvbmVudCB0aGF0IHVzZXMgQklSVCB0byBwbG90CisgKi8KK3B1YmxpYyBjbGFzcyBBZ2dyZWdhdGVWYWx1ZUhpc3RvcnlQbG90dGVyIGV4dGVuZHMgUmVwb3J0Q29udHJvbCBpbXBsZW1lbnRzIElTaW11bGF0aW9uTGlzdGVuZXJTeW5jIHsKKworCUFnZ3JlZ2F0ZVRpbWVTZXJpZXNDYW52YXMgYWdncmVnYXRlU2VyaWVzQ2FudmFzOworCVByb3BlcnR5U2VsZWN0b3IgcHJvcGVydHlTZWxlY3RvcjsKKwlMaXN0PEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I+IHNlbGVjdGVkUHJvcGVydGllczsKKwlTZXQ8SXRlbVByb3BlcnR5RGVzY3JpcHRvcj4gYWxsUHJvcGVydGllcyA9IG5ldyBIYXNoU2V0PEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I+KCk7CisJTWFwPFN0cmluZyxMaXN0PERvdWJsZT4+IGRhdGFNYXAgPSBuZXcgSGFzaE1hcDxTdHJpbmcsTGlzdDxEb3VibGU+PigpOworCQorCUxpc3Q8RG91YmxlPiBhZ2dyZWdhdGVSZWZlcmVuY2UgPSBuZXcgQXJyYXlMaXN0PERvdWJsZT4oKTsKKwlTZXQ8U3RyaW5nPiByZWZlcmVuY2VJRHMgPSBuZXcgSGFzaFNldDxTdHJpbmc+KCk7CisJCisJU3RyaW5nIHNlbGVjdGVkUmVmZXJlbmNlRmlsZTsKKwkKKwlIYXNoTWFwPFN0cmluZywgU2V0PFJlbGF0aXZlVmFsdWVQcm92aWRlckFkYXB0ZXI+PiByZWxhdGl2ZVZhbHVlUHJvdmlkZXJTZXQgPSBuZXcgSGFzaE1hcDxTdHJpbmcsIFNldDxSZWxhdGl2ZVZhbHVlUHJvdmlkZXJBZGFwdGVyPj4oKTsKKwlIYXNoTWFwPFN0cmluZywgRG91YmxlPiB0b3RhbFBvcHVsYXRpb24gPSBuZXcgSGFzaE1hcDxTdHJpbmcsIERvdWJsZT4oKTsgLy8ga2V5IGlzIHBvcHVsYXRpb24gaWQKKwkvKioKKwkgKiB0aGlzIHNpbXVsYXRpb25zIGdyYXBoCisJICovCisJR3JhcGggZ3JhcGggPSBudWxsOworCWludCB0aW1lQ291bnQgPSAwOworCQorCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgU3RyaW5nIFJFRkVSRU5DRV9QUk9QRVJUWSA9InJlZiI7CisJU2V0PElTaW11bGF0aW9uPiBhY3RpdmVTaW11bGF0aW9ucyA9IG5ldyBIYXNoU2V0PElTaW11bGF0aW9uPigpOworCQorCVN0cmluZyBwb3B1bGF0aW9uSWQ7CisJCisJLyoqCisJICogVGhpcyBpbnRlcmZhY2UgaXMgaW1wbGVtZW50ZWQgYnkgY2xhc3NlcyB0aGF0IHNlbGVjdCBvdXQgdGhlIHByb3BlcnRpZXMKKwkgKiB0byBiZSBkaXNwbGF5ZWQuCisJICovCisJcHVibGljIGludGVyZmFjZSBQcm9wZXJ0eVNpZXZlIHsKKwkJLyoqCisJCSAqIEBwYXJhbSBkeW5hbWljTGFiZWwKKwkJICogICAgICAgICAgICB0aGUgbGFiZWwgdGhhdCBjb250YWlucyB0aGUgY2FuZGlkYXRlIHByb3BlcnRpZXMgdG8gYmUKKwkJICogICAgICAgICAgICBkaXNwbGF5ZWQuCisJCSAqIEByZXR1cm4gYSA8Y29kZT5MaXN0PC9jb2RlPiBvZiB0aGUgcHJvcGVydGllcyB0aGF0IHNob3VsZCBiZQorCQkgKiAgICAgICAgIGRpc3BsYXllZCBpbiB0aGUgb3JkZXIgdGhhdCB0aGV5IHNob3VsZCBiZSBkaXNwbGF5ZWQuCisJCSAqLworCQlMaXN0PEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I+IHNpZXZlKGZpbmFsIER5bmFtaWNMYWJlbCBkeW5hbWljTGFiZWwpOworCX0gLy8gUHJvcGVydHlTaWV2ZQorCisJLyoqCisJICogVGhpcyBzaWV2ZSBzZWxlY3RzIGFsbCBvZiB0aG9zZSBwcm9wZXJ0aWVzIHRoYXQgaGF2ZSByZWxhdGl2ZSB2YWx1ZXMuCisJICovCisJcHJpdmF0ZSBmaW5hbCBQcm9wZXJ0eVNpZXZlIHByb3BlcnR5U2lldmUgPSBuZXcgUHJvcGVydHlTaWV2ZSgpIHsKKwkJLyoqCisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS51aS53aWRnZXRzLlByb3BlcnR5U2VsZWN0b3IuUHJvcGVydHlTaWV2ZSNzaWV2ZShvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguRHluYW1pY0xhYmVsKQorCQkgKi8KKwkJcHVibGljIExpc3Q8SXRlbVByb3BlcnR5RGVzY3JpcHRvcj4gc2lldmUoCisJCQkJZmluYWwgRHluYW1pY0xhYmVsIGR5bmFtaWNMYWJlbCkgeworCQkJZmluYWwgTGlzdDxJdGVtUHJvcGVydHlEZXNjcmlwdG9yPiByZXRWYWx1ZSA9IG5ldyBBcnJheUxpc3Q8SXRlbVByb3BlcnR5RGVzY3JpcHRvcj4oKTsKKwkJCWZpbmFsIFJlbGF0aXZlVmFsdWVQcm92aWRlckFkYXB0ZXIgcnZwID0gKFJlbGF0aXZlVmFsdWVQcm92aWRlckFkYXB0ZXIpIFJlbGF0aXZlVmFsdWVQcm92aWRlckFkYXB0ZXJGYWN0b3J5LklOU1RBTkNFCisJCQkJCS5hZGFwdChkeW5hbWljTGFiZWwsIFJlbGF0aXZlVmFsdWVQcm92aWRlci5jbGFzcyk7CisKKwkJCS8vIERvZXMgdGhlIGxhYmVsIGhhdmUgcmVsYXRpdmUgdmFsdWVzPworCQkJaWYgKHJ2cCAhPSBudWxsKSB7CisJCQkJLy8gWWVzCisJCQkJcnZwLnNldFRhcmdldChkeW5hbWljTGFiZWwpOworCisJCQkJZm9yIChmaW5hbCBPYmplY3QgZWxlbWVudCA6IHJ2cC5nZXRQcm9wZXJ0aWVzKCkpIHsKKwkJCQkJZmluYWwgSXRlbVByb3BlcnR5RGVzY3JpcHRvciBwcm9wZXJ0eSA9IChJdGVtUHJvcGVydHlEZXNjcmlwdG9yKSBlbGVtZW50OworCQkJCQlyZXRWYWx1ZS5hZGQocHJvcGVydHkpOworCQkJCX0gLy8gZm9yIGVhY2ggcHJvcGVydHkKKwkJCX0gLy8gaWYgdGhlIGxhYmVsIGhhcyByZWxhdGl2ZSB2YWx1ZXMKKwkJCXJldHVybiByZXRWYWx1ZTsKKwkJfSAvLyBzaWV2ZQorCX07CisKKwkvKioKKwkgKiBAcGFyYW0gcGFyZW50CisJICovCisJcHVibGljIEFnZ3JlZ2F0ZVZhbHVlSGlzdG9yeVBsb3R0ZXIoZmluYWwgQ29tcG9zaXRlIHBhcmVudCkgeworCQlzdXBlcihwYXJlbnQsIFNXVC5Ob25lKTsKKwkJc2ltdWxhdGlvbiA9IG51bGw7CisJCWRhdGFNYXAucHV0KFJFRkVSRU5DRV9QUk9QRVJUWSwgYWdncmVnYXRlUmVmZXJlbmNlKTsgLy8gcHV0IHplcm9zIGZvciBub3cKKwkJY3JlYXRlQ29udGVudHMoKTsKKwl9IC8vIFJlbGF0aXZlVmFsdWVIaXN0b3J5UGxvdHRlcgorCisJLyoqCisJICogQ3JlYXRlIHRoZSBjb250ZW50cyBvZiB0aGUgcGxvdHRlcgorCSAqLworCXByaXZhdGUgdm9pZCBjcmVhdGVDb250ZW50cygpIHsKKwkJc2V0TGF5b3V0KG5ldyBGb3JtTGF5b3V0KCkpOworCQl0aW1lQ291bnQgPSAwOworCQlpZGVudGlmaWFibGVUaXRsZSA9IG5ldyBMYWJlbCh0aGlzLCBTV1QuTk9ORSk7CisJCWFnZ3JlZ2F0ZVNlcmllc0NhbnZhcyA9IG5ldyBBZ2dyZWdhdGVUaW1lU2VyaWVzQ2FudmFzKHRoaXMpOworCQlhZ2dyZWdhdGVTZXJpZXNDYW52YXMucmVzZXQoKTsKKwkJcHJvcGVydHlTZWxlY3RvciA9IG5ldyBQcm9wZXJ0eVNlbGVjdG9yKHRoaXMsIFNXVC5OT05FLCB0cnVlKTsKKworCQkKKwkJcmVtb3ZlQnV0dG9uID0gbmV3IEJ1dHRvbih0aGlzLCBTV1QuTk9ORSk7CisJCXJlbW92ZUJ1dHRvbi5zZXRUZXh0KFJFTU9WRV9URVhUKTsKKwkJCisJCWFkZFJlZmVyZW5jZUxhYmVsID0gbmV3IExhYmVsKHRoaXMsU1dULkJPUkRFUik7CisJCVN0cmluZyByZWZGaWxlID0gQWN0aXZhdG9yLmdldERlZmF1bHQoKS5nZXRQcmVmZXJlbmNlU3RvcmUoKS5nZXRTdHJpbmcoTW9uaXRvclByZWZlcmVuY2VzLlJFRkVSRU5DRV9GSUxFX0tFWSk7CisJCWlmKHJlZkZpbGUgPT0gbnVsbCkgcmVmRmlsZSA9ICIiOworCQl0aGlzLnNlbGVjdGVkUmVmZXJlbmNlRmlsZSA9IHJlZkZpbGU7CisJCWFkZFJlZmVyZW5jZUxhYmVsLnNldFRleHQocmVmRmlsZSk7CisJCQorCQlhZGRSZWZlcmVuY2VCdXR0b24gPSBuZXcgQnV0dG9uKHRoaXMsIFNXVC5OT05FKTsKKwkJYWRkUmVmZXJlbmNlQnV0dG9uLnNldFRleHQoQUREX1JFRkVSRU5DRV9URVhUKTsKKwkJZmluYWwgU2hlbGwgc2hlbGwgPSB0aGlzLmdldFNoZWxsKCk7CisJCWZpbmFsIEFnZ3JlZ2F0ZVZhbHVlSGlzdG9yeVBsb3R0ZXIgc2VsZiA9IHRoaXM7CisJICAgIGFkZFJlZmVyZW5jZUJ1dHRvbi5hZGRTZWxlY3Rpb25MaXN0ZW5lcihuZXcgU2VsZWN0aW9uQWRhcHRlcigpIHsKKwkJCUBPdmVycmlkZQorCQkJcHVibGljIHZvaWQgd2lkZ2V0U2VsZWN0ZWQoQFN1cHByZXNzV2FybmluZ3MoInVudXNlZCIpCisJCQlmaW5hbCBTZWxlY3Rpb25FdmVudCBlKSB7CisJCQkJZmluYWwgRmlsZURpYWxvZyBkZCA9IG5ldyBGaWxlRGlhbG9nKAorCQkJCQkJc2hlbGwsIFNXVC5PUEVOKTsKKwkJCQkJZGQuc2V0VGV4dChNZXNzYWdlcy5nZXRTdHJpbmcoIlJFUE9SVFZJRVcuU0VMRUNUUkVGRU5DRUZPTERFUiIpKTsgLy8kTk9OLU5MUy0xJAorCQkJCQlkZC5zZXRGaWx0ZXJQYXRoKGFkZFJlZmVyZW5jZUxhYmVsLmdldFRleHQoKSk7CisJCQkJCWZpbmFsIFN0cmluZyBzZWxlY3RlZCA9IGRkLm9wZW4oKTsKKwkJCQkJc2VsZi5zZWxlY3RlZFJlZmVyZW5jZUZpbGUgPSBzZWxlY3RlZDsKKwkJCQkJYWRkUmVmZXJlbmNlTGFiZWwuc2V0VGV4dChzZWxlY3RlZCk7CisJCQkJCUFjdGl2YXRvci5nZXREZWZhdWx0KCkuZ2V0UHJlZmVyZW5jZVN0b3JlKCkuc2V0VmFsdWUoTW9uaXRvclByZWZlcmVuY2VzLlJFRkVSRU5DRV9GSUxFX0tFWSwgc2VsZWN0ZWQpOworCQkJCQl0cnkgeworCQkJCQkJQWdncmVnYXRlUmVmZXJlbmNlRmlsZUxvYWRlciByZWZMb2FkZXIgPSBuZXcgQWdncmVnYXRlUmVmZXJlbmNlRmlsZUxvYWRlcihzZWxlY3RlZCk7CisJCQkJCQlhZ2dyZWdhdGVSZWZlcmVuY2UgPSByZWZMb2FkZXIuZ2V0QWdncmVnYXRlRGF0YSgpOworCQkJCQkJZGF0YU1hcC5wdXQoUkVGRVJFTkNFX1BST1BFUlRZLCBhZ2dyZWdhdGVSZWZlcmVuY2UpOworCQkJCQkJLy9yZWZlcmVuY2VJRHMgPSByZWZMb2FkZXIuZ2V0SWRTZXQoKTsKKwkJCQkJCQorCQkJCQl9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKKwkJCQkJCWV4LnByaW50U3RhY2tUcmFjZSgpOworCQkJCQkJQWN0aXZhdG9yLmxvZ0Vycm9yKGV4LmdldE1lc3NhZ2UoKSwgZXgpOworCQkJCQl9CQorCQkJfQorCQl9KTsKKwkJCisJCQorCQlmaW5hbCBGb3JtRGF0YSB0aXRsZUZvcm1EYXRhID0gbmV3IEZvcm1EYXRhKCk7CisJCWlkZW50aWZpYWJsZVRpdGxlLnNldExheW91dERhdGEodGl0bGVGb3JtRGF0YSk7CisJCXRpdGxlRm9ybURhdGEudG9wID0gbmV3IEZvcm1BdHRhY2htZW50KDAsIDApOworCQl0aXRsZUZvcm1EYXRhLmxlZnQgPSBuZXcgRm9ybUF0dGFjaG1lbnQoMCwgMCk7CisJCXRpdGxlRm9ybURhdGEucmlnaHQgPSBuZXcgRm9ybUF0dGFjaG1lbnQoMTAwLCAwKTsKKworCQlmaW5hbCBGb3JtRGF0YSBjaGFydEZvcm1EYXRhID0gbmV3IEZvcm1EYXRhKCk7CisJCWFnZ3JlZ2F0ZVNlcmllc0NhbnZhcy5zZXRMYXlvdXREYXRhKGNoYXJ0Rm9ybURhdGEpOworCQljaGFydEZvcm1EYXRhLnRvcCA9IG5ldyBGb3JtQXR0YWNobWVudChpZGVudGlmaWFibGVUaXRsZSwgMCk7CisJCWNoYXJ0Rm9ybURhdGEuYm90dG9tID0gbmV3IEZvcm1BdHRhY2htZW50KHByb3BlcnR5U2VsZWN0b3IsIDApOworCQljaGFydEZvcm1EYXRhLmxlZnQgPSBuZXcgRm9ybUF0dGFjaG1lbnQoMCwgMCk7CisJCWNoYXJ0Rm9ybURhdGEucmlnaHQgPSBuZXcgRm9ybUF0dGFjaG1lbnQoMTAwLCAwKTsKKworCQkvLyBQcm9wZXJ0eSBTZWxlY3RvcgorCQlmaW5hbCBGb3JtRGF0YSBwcm9wZXJ0eVNlbGVjdG9yRm9ybURhdGEgPSBuZXcgRm9ybURhdGEoKTsKKwkJLy8gcHJvcGVydHlTZWxlY3RvckZvcm1EYXRhLnRvcCA9IG5ldyBGb3JtQXR0YWNobWVudChhZ2dyZWdhdGVTZXJpZXNDYW52YXMsCisJCS8vIDApOworCQlwcm9wZXJ0eVNlbGVjdG9yRm9ybURhdGEuYm90dG9tID0gbmV3IEZvcm1BdHRhY2htZW50KDEwMCwgMCk7CisJCXByb3BlcnR5U2VsZWN0b3JGb3JtRGF0YS5sZWZ0ID0gbmV3IEZvcm1BdHRhY2htZW50KDAsIDApOworCQlwcm9wZXJ0eVNlbGVjdG9yRm9ybURhdGEucmlnaHQgPSBuZXcgRm9ybUF0dGFjaG1lbnQoMzAsIDApOworCQlwcm9wZXJ0eVNlbGVjdG9yLnNldExheW91dERhdGEocHJvcGVydHlTZWxlY3RvckZvcm1EYXRhKTsKKworCQkvLyBSZW1vdmVCdXR0b24KKwkJZmluYWwgRm9ybURhdGEgcmVtb3ZlQnV0dG9uRm9ybURhdGEgPSBuZXcgRm9ybURhdGEoKTsKKwkJcmVtb3ZlQnV0dG9uRm9ybURhdGEuYm90dG9tID0gbmV3IEZvcm1BdHRhY2htZW50KDEwMCwgMCk7CisJCXJlbW92ZUJ1dHRvbkZvcm1EYXRhLmxlZnQgPSBuZXcgRm9ybUF0dGFjaG1lbnQocHJvcGVydHlTZWxlY3RvciwgMCk7CisJCXJlbW92ZUJ1dHRvbkZvcm1EYXRhLnJpZ2h0ID0gbmV3IEZvcm1BdHRhY2htZW50KDYwLCAwKTsKKwkJcmVtb3ZlQnV0dG9uLnNldExheW91dERhdGEocmVtb3ZlQnV0dG9uRm9ybURhdGEpOworCQkKKwkJLy8gQWRkUmVmZXJlbmNlQnV0dG9uCisJCWZpbmFsIEZvcm1EYXRhIGFkZFJlZmVyZW5jZUJ1dHRvbkZvcm1EYXRhID0gbmV3IEZvcm1EYXRhKCk7CisJCWFkZFJlZmVyZW5jZUJ1dHRvbkZvcm1EYXRhLmJvdHRvbSA9IG5ldyBGb3JtQXR0YWNobWVudChyZW1vdmVCdXR0b24sIDApOworCQlhZGRSZWZlcmVuY2VCdXR0b25Gb3JtRGF0YS5sZWZ0ID0gbmV3IEZvcm1BdHRhY2htZW50KHJlbW92ZUJ1dHRvbiwgMCk7CisJCWFkZFJlZmVyZW5jZUJ1dHRvbkZvcm1EYXRhLnJpZ2h0ID0gbmV3IEZvcm1BdHRhY2htZW50KDEwMCwgMCk7CisJCWFkZFJlZmVyZW5jZUJ1dHRvbi5zZXRMYXlvdXREYXRhKGFkZFJlZmVyZW5jZUJ1dHRvbkZvcm1EYXRhKTsKKwkJCisJCS8vIEFkZFJlZmVyZW5jZUxhYmVsCisJCWZpbmFsIEZvcm1EYXRhIGFkZFJlZmVyZW5jZUxhYmVsRm9ybURhdGEgPSBuZXcgRm9ybURhdGEoKTsKKwkJYWRkUmVmZXJlbmNlTGFiZWxGb3JtRGF0YS50b3AgPSBuZXcgRm9ybUF0dGFjaG1lbnQoYWRkUmVmZXJlbmNlQnV0dG9uLCAwKTsKKwkJYWRkUmVmZXJlbmNlTGFiZWxGb3JtRGF0YS5sZWZ0ID0gbmV3IEZvcm1BdHRhY2htZW50KHJlbW92ZUJ1dHRvbiwgMCk7CisJCWFkZFJlZmVyZW5jZUxhYmVsRm9ybURhdGEucmlnaHQgPSBuZXcgRm9ybUF0dGFjaG1lbnQoMTAwLCAwKTsKKwkJYWRkUmVmZXJlbmNlTGFiZWwuc2V0TGF5b3V0RGF0YShhZGRSZWZlcmVuY2VMYWJlbEZvcm1EYXRhKTsKKworCQlwcm9wZXJ0eVNlbGVjdG9yCisJCQkJLmFkZFByb3BlcnR5U2VsZWN0aW9uTGlzdGVuZXIobmV3IFByb3BlcnR5U2VsZWN0b3IuUHJvcGVydHlTZWxlY3Rpb25MaXN0ZW5lcigpIHsKKworCQkJCQkvKioKKwkJCQkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnVpLndpZGdldHMuUHJvcGVydHlTZWxlY3Rvci5Qcm9wZXJ0eVNlbGVjdGlvbkxpc3RlbmVyI3Byb3BlcnR5U2VsZWN0ZWQob3JnLmVjbGlwc2Uuc3RlbS51aS53aWRnZXRzLlByb3BlcnR5U2VsZWN0b3IuUHJvcGVydHlTZWxlY3Rpb25FdmVudCkKKwkJCQkJICovCisJCQkJCXB1YmxpYyB2b2lkIHByb3BlcnR5U2VsZWN0ZWQoCisJCQkJCQkJZmluYWwgUHJvcGVydHlTZWxlY3Rpb25FdmVudCBwcm9wZXJ0eVNlbGVjdGlvbkV2ZW50KSB7CisJCQkJCQlzZWxlY3RlZERlY29yYXRvciA9IHByb3BlcnR5U2VsZWN0aW9uRXZlbnQKKwkJCQkJCQkJLmdldERlY29yYXRvcigpOworCisJCQkJCQlzZWxlY3RlZFByb3BlcnRpZXMgPSBnZXRQcm9wZXJ0aWVzVG9EaXNwbGF5KHNlbGVjdGVkRGVjb3JhdG9yKTsKKwkJCQkJCXBvcHVsYXRpb25JZCA9IHByb3BlcnR5U2VsZWN0aW9uRXZlbnQuZ2V0SWQoKTsKKwkJCQkJCQorCQkJCQl9CisJCQkJfSk7CisKKwkJcmVtb3ZlQnV0dG9uLmFkZFNlbGVjdGlvbkxpc3RlbmVyKG5ldyBTZWxlY3Rpb25BZGFwdGVyKCkgeworCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgdm9pZCB3aWRnZXRTZWxlY3RlZCgKKwkJCQkJQFN1cHByZXNzV2FybmluZ3MoInVudXNlZCIpIGZpbmFsIFNlbGVjdGlvbkV2ZW50IGUpIHsKKwkJCQlmaXJlUmVtb3ZlRXZlbnQoaWRlbnRpZmlhYmxlKTsKKwkJCQlyZW1vdmUoKTsKKwkJCX0KKwkJfSk7CisKKwl9IC8vIGNyZWF0ZUNvbnRlbnRzCisKKwkvKioKKwkgKiB0byByZW1vdmUgdGhlIGNvbnRyb2wgZS5nLiBieSBhIHJlbW92ZSBidXR0b24gZXZlbnQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlAU3VwcHJlc3NXYXJuaW5ncygiY2FzdCIpCisJcHVibGljIHZvaWQgcmVtb3ZlKCkgeworCQlyZW1vdmVMaXN0ZW5lcnMuY2xlYXIoKTsKKwkJc3dpdGNoVG9SVkhQKG51bGwpOworCQlyZWxhdGl2ZVZhbHVlSGlzdG9yeUV4dGVuZGVkKG51bGwpOworCQlpZGVudGlmaWFibGVUaXRsZS5zZXRUZXh0KCIiKTsKKwkJcHJvcGVydHlTZWxlY3RvcgorCQkJCS5zZXREZWNvcmF0b3JzKChMaXN0PERlY29yYXRvcj4pIENvbGxlY3Rpb25zLkVNUFRZX0xJU1QpOworCQlkaXNwb3NlKCk7CisJfQorCisJLyoqCisJICogU2V0dGluZyB0aGUge0BsaW5rIFNpbXVsYXRpb259IGhhcyB0aGUgc2lkZS1lZmZlY3Qgb2YgY2F1c2luZyB0aGUgY29udHJvbAorCSAqIHRvIHJlbW92ZSBpdHNlbGYgYXMgYSBsaXN0ZW5lciBmcm9tIGFueSBwcmV2aW91c2x5IHNldCB7QGxpbmsgU2ltdWxhdGlvbn0KKwkgKiBhbmQgYWRkaW5nIGl0c2VsZiBhcyBhIGxpc3RlbmVyIHRvIHRoZSBuZXcgb25lLiBJdCB3aWxsIGFsc28gY2F1c2UgdGhlCisJICogaW1hZ2UgdG8gYmUgaW5pdGlhbGl6ZWQgZnJvbSB0aGUgY29udGVudHMgb2YgdGhlIG5ldyB7QGxpbmsgU2ltdWxhdGlvbn0KKwkgKiBhcyBhcHByb3ByaWF0ZS4KKwkgKiAKKwkgKiBAcGFyYW0gc2ltdWxhdGlvbiB0aGUgc2ltdWxhdGlvbiB3aG9zZSBhZ2dyZWdhdGUgd2Ugd2lsbCBwbG90LgorCSAqLworCXB1YmxpYyBmaW5hbCB2b2lkIHNldFNpbXVsYXRpb24oZmluYWwgSVNpbXVsYXRpb24gc2ltdWxhdGlvbikgeworCQkvLyBBbnkgbmVlZCB0byBzd2l0Y2g/CisJCWlmICh0aGlzLnNpbXVsYXRpb24gPT0gc2ltdWxhdGlvbikgeworCQkJLy8gTm8KKwkJCXJldHVybjsKKwkJfSAvLyBpZiBubyBuZWVkIHRvIHN3aXRjaD8KKworCQkvLyBTaG91bGQgd2UgcmVtb3ZlIG91cnNlbHZlcyBhcyBsaXN0ZW5lcnMgZnJvbSB0aGUgY3VycmVudCBzaW11bGF0aW9uPworCQlpZiAodGhpcy5zaW11bGF0aW9uICE9IG51bGwpIHsKKwkJCS8vIFllcworCQkJdGhpcy5zaW11bGF0aW9uLnJlbW92ZVNpbXVsYXRpb25MaXN0ZW5lclN5bmModGhpcyk7CisJCX0KKworCQl0aGlzLnNpbXVsYXRpb24gPSBzaW11bGF0aW9uOworCisJCXNlbGVjdGlvbiA9IG51bGw7CisJCS8vIFdhcyB0aGVyZSBhIG5ldyBzaW11bGF0aW9uIHRvIHN3aXRjaCB0bz8KKwkJaWYgKHRoaXMuc2ltdWxhdGlvbiAhPSBudWxsKSB7CisJCQkvLyBZZXMKKwkJCXRoaXMuc2ltdWxhdGlvbi5hZGRTaW11bGF0aW9uTGlzdGVuZXJTeW5jKHRoaXMpOworCQkJaW5pdGlhbGl6ZUZyb21TaW11bGF0aW9uKHRoaXMuc2ltdWxhdGlvbik7CisKKwkJCUFycmF5TGlzdDxEZWNvcmF0b3I+ZGVjb3JhdG9ycyA9IG5ldyBBcnJheUxpc3Q8RGVjb3JhdG9yPigpOworCQkJZm9yKERlY29yYXRvciBkOmdyYXBoLmdldERlY29yYXRvcnMoKSkKKwkJCQlpZihkIGluc3RhbmNlb2YgRGlzZWFzZU1vZGVsKWRlY29yYXRvcnMuYWRkKGQpOworCQkJcHJvcGVydHlTZWxlY3Rvci5zZXREZWNvcmF0b3JzKGRlY29yYXRvcnMpOworCQkJCisJCQkvLyBjb2xsZWN0IHRoZSBzZXQgb2YgcmVsYXRpdmVWYWx1ZVByb3ZpZGVyQWRhcHRlcnMgZnJvbSB0aGlzCisJCQkvLyBzaW11bGF0aW9uCisJCQkvLyAxLiBnZXQgdGhlIG5vZGVzCisJCQlNYXA8Tm9kZSwgSW50ZWdlcj4gbm9kZUxldmVsc01hcCA9IGdldE5vZGVMZXZlbHMoc2ltdWxhdGlvbik7CisKKwkJCS8vIDIuIGdldCB0aGUgbGV2ZWwgdG8gc3VtCisJCQlpbnQgbGV2ZWwgPSBnZXRIaWdoZXN0UmVzb2x1dGlvbihub2RlTGV2ZWxzTWFwKTsKKwkJCQorCQkJLy8gMy4gaXRlcmF0ZSBvdmVyIGFsbCB0aGUgbm9kZXMgYXQgdGhpcyBsZXZlbCBpbiB0aGUgbWFwIGFuZCBnZXQgYQorCQkJLy8gc2V0IG9mIHJlbGF0aXZlIHZhbHVlIHByb3ZpZGVycworCQkJSXRlcmF0b3I8Tm9kZT4gaXRlciA9IGdldE5vZGVJdGVyYXRvcihsZXZlbCwgbm9kZUxldmVsc01hcCk7CisJCQl3aGlsZSAoKGl0ZXIgIT0gbnVsbCkgJiYgKGl0ZXIuaGFzTmV4dCgpKSkgeworCQkJCU5vZGUgbm9kZSA9IGl0ZXIubmV4dCgpOworCQkJCUVMaXN0PE5vZGVMYWJlbD4gbGFiZWxzID0gbm9kZS5nZXRMYWJlbHMoKTsKKwkJCQlmb3IgKGludCBpID0gMDsgaSA8IGxhYmVscy5zaXplKCk7ICsraSkgeworCQkJCQlOb2RlTGFiZWwgbGFiZWwgPSBsYWJlbHMuZ2V0KGkpOworCisJCQkJCWlmIChsYWJlbCBpbnN0YW5jZW9mIERpc2Vhc2VNb2RlbExhYmVsKSB7CisJCQkJCQlEaXNlYXNlTW9kZWxMYWJlbCBkeW5hbWljTGFiZWwgPSAoRGlzZWFzZU1vZGVsTGFiZWwpIGxhYmVsOworCQkJCQkJZmluYWwgUmVsYXRpdmVWYWx1ZVByb3ZpZGVyQWRhcHRlciBydnAgPSAoUmVsYXRpdmVWYWx1ZVByb3ZpZGVyQWRhcHRlcikgUmVsYXRpdmVWYWx1ZVByb3ZpZGVyQWRhcHRlckZhY3RvcnkuSU5TVEFOQ0UKKwkJCQkJCQkJLmFkYXB0KGR5bmFtaWNMYWJlbCwKKwkJCQkJCQkJCQlSZWxhdGl2ZVZhbHVlUHJvdmlkZXIuY2xhc3MpOworCQkJCQkJCisJCQkJCQkKKwkJCQkJCS8vIERvZXMgdGhlIGxhYmVsIGhhdmUgcmVsYXRpdmUgdmFsdWVzPworCQkJCQkJaWYgKHJ2cCAhPSBudWxsKSB7CisJCQkJCQkJLy8gWWVzCisJCQkJCQkJcnZwLnNldFRhcmdldChkeW5hbWljTGFiZWwpOworCQkJCQkJCQorCQkJCQkJCS8vIEdldCB0aGUgcG9wdWxhdGlvbiBpZGVudGlmaWVyIGZvciB0aGUgbGFiZWwKKwkJCQkJCQlTdHJpbmcgcG9wdWxhdGlvbklkZW50aWZpZXIgPSBkeW5hbWljTGFiZWwuZ2V0UG9wdWxhdGlvbk1vZGVsTGFiZWwoKS5nZXRQb3B1bGF0aW9uSWRlbnRpZmllcigpOworCQkJCQkJCWlmKHRvdGFsUG9wdWxhdGlvbi5nZXQocG9wdWxhdGlvbklkZW50aWZpZXIpICE9IG51bGwpCisJCQkJCQkJCXRvdGFsUG9wdWxhdGlvbi5wdXQocG9wdWxhdGlvbklkZW50aWZpZXIsIHRvdGFsUG9wdWxhdGlvbi5nZXQocG9wdWxhdGlvbklkZW50aWZpZXIpK3J2cC5nZXREZW5vbWluYXRvcihudWxsKSk7CisJCQkJCQkJZWxzZSB0b3RhbFBvcHVsYXRpb24ucHV0KHBvcHVsYXRpb25JZGVudGlmaWVyLCBydnAuZ2V0RGVub21pbmF0b3IobnVsbCkpOworCQkJCQkJCS8vIHJlbWVtYmVyIHRoaXMgcnZwIHRvIHVzZSBmb3IgYWdncmVnYXRpb24gbGF0ZXIKKwkJCQkJCQlpZihyZWxhdGl2ZVZhbHVlUHJvdmlkZXJTZXQuY29udGFpbnNLZXkocG9wdWxhdGlvbklkZW50aWZpZXIpKQorCQkJCQkJCQlyZWxhdGl2ZVZhbHVlUHJvdmlkZXJTZXQuZ2V0KHBvcHVsYXRpb25JZGVudGlmaWVyKS5hZGQocnZwKTsKKwkJCQkJCQllbHNlIHsKKwkJCQkJCQkJcmVsYXRpdmVWYWx1ZVByb3ZpZGVyU2V0LnB1dChwb3B1bGF0aW9uSWRlbnRpZmllciwgbmV3IEhhc2hTZXQ8UmVsYXRpdmVWYWx1ZVByb3ZpZGVyQWRhcHRlcj4oKSk7CisJCQkJCQkJCXJlbGF0aXZlVmFsdWVQcm92aWRlclNldC5nZXQocG9wdWxhdGlvbklkZW50aWZpZXIpLmFkZChydnApOworCQkJCQkJCX0KKwkJCQkJCQlmb3IgKGZpbmFsIE9iamVjdCBlbGVtZW50IDogcnZwLmdldFByb3BlcnRpZXMoKSkgeworCQkJCQkJCQlmaW5hbCBJdGVtUHJvcGVydHlEZXNjcmlwdG9yIHByb3BlcnR5ID0gKEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IpIGVsZW1lbnQ7CisJCQkJCQkJCWFsbFByb3BlcnRpZXMuYWRkKHByb3BlcnR5KTsKKwkJCQkJCQl9IC8vIGZvciBlYWNoIHByb3BlcnR5CisKKwkJCQkJCX0vLyBpZiBydnAgIW51bGwKKworCQkJCQl9IC8vIGlmIGR5YW5taWNMYWJlbAorCQkJCX0vLyBGb3IgZWFjaCBub2RlIGxhYmVsCisJCQl9IC8vIHdoaWxlIGhhdmUgbm9kZXMKKwkJCQorCQkJZm9yKFN0cmluZyBwOnRvdGFsUG9wdWxhdGlvbi5rZXlTZXQoKSkKKwkJCQlpZih0b3RhbFBvcHVsYXRpb24uZ2V0KHApIDw9IDAuMCkgeworCQkJCQl0b3RhbFBvcHVsYXRpb24ucHV0KHAsIDEuMCk7CisJCQkJfQorCQl9IGVsc2UgeworCQkJLy8gTm8KKwkJCS8vIEp1c3QgZGlzcGxheSBhIGJsYW5rIHNjcmVlbgorCQkJLy9pbml0aWFsaXplRnJvbVNpbXVsYXRpb24obnVsbCk7CisJCQlyZWxhdGl2ZVZhbHVlUHJvdmlkZXJTZXQuY2xlYXIoKTsKKwkJCWFsbFByb3BlcnRpZXMuY2xlYXIoKTsKKwkJfQorCisJfSAvLyBzZXRTaW11bGF0aW9uCisKKwkKKwkvKioKKwkgKiBAcGFyYW0gaWRlbnRpZmlhYmxlCisJICogICAgICAgICAgICB0aGUge0BsaW5rIElkZW50aWZpYWJsZX0gdG8gYmUgdGhlIHNvdXJjZSBvZiB0aGUgZGF0YSB0byBiZQorCSAqICAgICAgICAgICAgcGxvdHRlZC4KKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBzZXRJZGVudGlmaWFibGUoZmluYWwgSWRlbnRpZmlhYmxlIGlkZW50aWZpYWJsZSkgeworCisJCS8vICBkbyBub3RoaW5nLiBBZ2dyZWdhdGUgdmFsdWVzIGFnZ3JlZ2F0ZSBvdmVyIGEgc2V0IG9mIGlkZW50aWZpYWJsZXMuCisJCS8vICBTZWUgc2ltdWxhdGlvbkNoYW5nZWRTeW5jCisJfSAvLyBzZXRJZGVudGlmaWFibGUKKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5hZGFwdGVycy5yZWxhdGl2ZXZhbHVlLmhpc3RvcnkuUmVsYXRpdmVWYWx1ZUhpc3RvcnlFeHRlbmRlZExpc3RlbmVyI3JlbGF0aXZlVmFsdWVIaXN0b3J5RXh0ZW5kZWQob3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5hZGFwdGVycy5yZWxhdGl2ZXZhbHVlLmhpc3RvcnkuUmVsYXRpdmVWYWx1ZUhpc3RvcnlQcm92aWRlckFkYXB0ZXIpCisJICovCisJcHVibGljIHZvaWQgcmVsYXRpdmVWYWx1ZUhpc3RvcnlFeHRlbmRlZCgKKwkJCUBTdXBwcmVzc1dhcm5pbmdzKCJ1bnVzZWQiKSBmaW5hbCBSZWxhdGl2ZVZhbHVlSGlzdG9yeVByb3ZpZGVyQWRhcHRlciBydmhwKSB7CisJCS8vbm90IHVzZWQKKwl9IC8vIHJlbGF0aXZlVmFsdWVIaXN0b3J5RXh0ZW5kZWQKKworCS8qKgorCSAqIEluaXRpYWxpemUgdGhlIGNvbnRyb2wgZnJvbSBhCisJICoge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uam9icy5zaW11bGF0aW9uLlNpbXVsYXRpb259IGluc3RhbmNlLgorCSAqIAorCSAqIEBwYXJhbSBzaW11bGF0aW9uCisJICogICAgICAgICAgICB0aGUge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uam9icy5zaW11bGF0aW9uLlNpbXVsYXRpb259CisJICogICAgICAgICAgICB3aG9zZSBzdGF0ZSB3aWxsIGJlIHZpc3VhbGl6ZWQgaW4gdGhlIGNvbnRyb2wuCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgaW5pdGlhbGl6ZUZyb21TaW11bGF0aW9uKGZpbmFsIElTaW11bGF0aW9uIHNpbXVsYXRpb24pIHsKKwkJZ3JhcGggPSBzaW11bGF0aW9uLmdldFNjZW5hcmlvKCkuZ2V0Q2Fub25pY2FsR3JhcGgoKTsKKwkJLy90aW1lUHJvdmlkZXIgPSAoVGltZVByb3ZpZGVyKSBUaW1lUHJvdmlkZXJBZGFwdGVyRmFjdG9yeS5JTlNUQU5DRS5hZGFwdChncmFwaCwgVGltZVByb3ZpZGVyLmNsYXNzKTsKKwkJdGltZUNvdW50ID0gMDsKKwkJcmVkcmF3KCk7CisJfSAvLyBpbml0aWFsaXplRnJvbVNpbXVsYXRpb24KKworCS8qKgorCSAqIAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIHJlZnJlc2gyKCkgeworCQkvLyBub3RoaW5nCisJfSAvLyByZWZyZXNoMgorCQorCS8qKgorCSAqIFRoZSBudW1iZXIgb2YgcHJvcGVydGllcyB0byBwbG90CisJICogQHJldHVybiB0aGUgbnVtYmVyIG9mIHByb3BlcnRpZXMKKwkgKi8KKwlwdWJsaWMgaW50IGdldE51bVByb3BlcnRpZXMoKSB7CisJCXJldHVybiBkYXRhTWFwLmtleVNldCgpLnNpemUoKTsKKwl9CisKKwkvKioKKwkgKiBUT0RPIGltcGxlbWVudCB0aGlzCisJICogQHBhcmFtIGluZGV4IAorCSAqIEByZXR1cm4gdGhlIHByb3BlcnR5IHRvIHBsb3QKKwkgKi8KKwlwdWJsaWMgU3RyaW5nIGdldFByb3BlcnR5KGludCBpbmRleCkgeworCQlPYmplY3RbXSBrZXlzID0gZGF0YU1hcC5rZXlTZXQoKS50b0FycmF5KCk7CisJCUFycmF5cy5zb3J0KGtleXMpOworCQlyZXR1cm4gKFN0cmluZykga2V5c1tpbmRleF07CisJfQorCQorCS8qKgorCSAqIFRPRE8gaW1wbGVtZW50IHRoaXMKKwkgKiBAcGFyYW0gcHJvcGVydHkgCisJICogQHJldHVybiB0aGUgYWdncmVnYXRlIHZhbHVlcyB0byBwbG90IGFzIGFuIGFycmF5IG9mIGRvdWJsZQorCSAqLworCXB1YmxpYyBkb3VibGVbXSBnZXRWYWx1ZXMoU3RyaW5nIHByb3BlcnR5KSB7CisJCWlmKHBvcHVsYXRpb25JZCA9PSBudWxsKSB7CisJCQlkb3VibGUgW10gcmV0ID0gbmV3IGRvdWJsZVsxXTsKKwkJCXJldFswXT0xOworCQkJcmV0dXJuIHJldDsKKwkJfQorCQlMaXN0PERvdWJsZT4gdmFsTGlzdCA9IGRhdGFNYXAuZ2V0KHByb3BlcnR5KTsKKwkJZG91YmxlW10gZGF0YSA9IG5ldyBkb3VibGVbdGltZUNvdW50XTsKKwkJZm9yIChpbnQgaSA9IDA7IGkgPCB0aW1lQ291bnQ7IGkgKyspIHsKKwkJCWlmICgodmFsTGlzdCE9bnVsbCkmJihpIDwgdmFsTGlzdC5zaXplKCkpICl7CisJCQkJZGF0YVtpXSA9IHZhbExpc3QuZ2V0KGkpLmRvdWJsZVZhbHVlKCk7CisJCQkJaWYocHJvcGVydHkuZXF1YWxzSWdub3JlQ2FzZShSRUZFUkVOQ0VfUFJPUEVSVFkpKSB7CQorCQkJCQlkYXRhW2ldIC89IHRvdGFsUG9wdWxhdGlvbi5nZXQocG9wdWxhdGlvbklkKTsKKwkJCQl9CisJCQl9IGVsc2UgeworCQkJCS8vIG5ldmVyIGFkZCB6ZXJvIChuZWVkIG1pbiBub256ZXJvIHZhbHVlIGZvciBsb2cgZGlzcGxheSkKKwkJCQlkYXRhW2ldID0gMS4wL3RvdGFsUG9wdWxhdGlvbi5nZXQocG9wdWxhdGlvbklkKTsKKwkJCX0KKwkJfQorCQlyZXR1cm4gZGF0YTsKKwl9CisKKwkKKwkvKioKKwkgKiBAcGFyYW0gZGVjb3JhdG9yCisJICogICAgICAgICAgICBhIHtAbGluayBEZWNvcmF0b3J9IHRoYXQgbW9kaWZpZXMgdGhlIHN0YXRlIG9mIHRoZSBjYW5vbmljYWwKKwkgKiAgICAgICAgICAgIHtAbGluayBHcmFwaH0gaW4gdGhlCisJICogICAgICAgICAgICB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5qb2JzLnNpbXVsYXRpb24uU2ltdWxhdGlvbn0uCisJICogQHBhcmFtIHNpbXVsYXRpb24KKwkgKiAgICAgICAgICAgIHRoZSB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5qb2JzLnNpbXVsYXRpb24uU2ltdWxhdGlvbn0KKwkgKiBAcmV0dXJuIGEge0BsaW5rIExpc3R9IG9mIHRoZSBwcm9wZXJ0aWVzIG9mIHRoZSB7QGxpbmsgRGVjb3JhdG9yfSB0aGF0CisJICogICAgICAgICBjYW4gc2hvdWxkIGJlIGRpc3BsYXllZC4KKwkgKi8KKwlMaXN0PEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I+IGdldFByb3BlcnRpZXNUb0Rpc3BsYXkoCisJCQlmaW5hbCBEZWNvcmF0b3IgZGVjb3JhdG9yKSB7CisJCWZpbmFsIExpc3Q8SXRlbVByb3BlcnR5RGVzY3JpcHRvcj4gcmV0VmFsdWUgPSBuZXcgQXJyYXlMaXN0PEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I+KCk7CisJCS8vIEdvdCBEZWNvcmF0b3I/CisJCWlmIChkZWNvcmF0b3IgIT0gbnVsbCkgeworCQkJLy8gWWVzCisJCQkvLyBBcmUgdGhlcmUgYW55IGxhYmVscyB0byB1cGRhdGU/CisJCQlpZiAoIWRlY29yYXRvci5nZXRMYWJlbHNUb1VwZGF0ZSgpLmlzRW1wdHkoKSkgeworCQkJCS8vIFllcworCQkJCS8vIFRoZSBmaXJzdCBvbmUgaXMgZ29vZCBlbm91Z2gKKwkJCQlyZXRWYWx1ZS5hZGRBbGwocHJvcGVydHlTaWV2ZS5zaWV2ZShkZWNvcmF0b3IKKwkJCQkJCS5nZXRMYWJlbHNUb1VwZGF0ZSgpLmdldCgwKSkpOworCQkJfSAvLyBpZiBsYWJlbHMgdG8gdXBkYXRlCisJCX0gLy8gaWYgZ290IGRlY29yYXRvcgorCQlyZXR1cm4gcmV0VmFsdWU7CisJfSAvLyBnZXRQcm9wZXJ0aWVzVG9EaXNwbGF5CisKKwkvKioKKwkgKiAKKwkgKiBAcGFyYW0gbm9kZQorCSAqIEByZXR1cm4KKwkgKi8KKwlAU3VwcHJlc3NXYXJuaW5ncygidW51c2VkIikKKwlwcml2YXRlIEdyYXBoIGdldEdyYXBoKGZpbmFsIE5vZGUgbm9kZSkgeworCQlyZXR1cm4gKEdyYXBoKSBub2RlLmVDb250YWluZXIoKS5lQ29udGFpbmVyKCk7CisJfSAvLyBnZXRHcmFwaAorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmpvYnMuc2ltdWxhdGlvbi5JU2ltdWxhdGlvbkxpc3RlbmVyU3luYyNzaW11bGF0aW9uQ2hhbmdlZFN5bmMob3JnLmVjbGlwc2Uuc3RlbS5qb2JzLnNpbXVsYXRpb24uU2ltdWxhdGlvbkV2ZW50KQorCSAqLworCXB1YmxpYyB2b2lkIHNpbXVsYXRpb25DaGFuZ2VkU3luYyhmaW5hbCBTaW11bGF0aW9uRXZlbnQgZXZlbnQpIHsKKwkJLy8gRGF0YSB0byBsb2cgPworCQkKKwkJaWYgKGV2ZW50LmdldFNpbXVsYXRpb25TdGF0ZSgpID09IFNpbXVsYXRpb25TdGF0ZS5SVU5OSU5HKSB7CisJCQkvLyBUaGUgc2ltdWxhdGlvbiBqdXN0IHN0YXJ0ZWQuIE1ha2Ugc3VyZSB3ZSBoYXZlIGRhdGEuIElmIG5vdCwgcmVsb2FkIGFnYWluCisJCQlpZih0aGlzLnNlbGVjdGVkUmVmZXJlbmNlRmlsZSA9PSBudWxsKQorCQkJCXRoaXMuc2VsZWN0ZWRSZWZlcmVuY2VGaWxlID0gQWN0aXZhdG9yLmdldERlZmF1bHQoKS5nZXRQcmVmZXJlbmNlU3RvcmUoKS5nZXRTdHJpbmcoTW9uaXRvclByZWZlcmVuY2VzLlJFRkVSRU5DRV9GSUxFX0tFWSk7CisJCQlpZihhZ2dyZWdhdGVSZWZlcmVuY2UgPT0gbnVsbCB8fCBhZ2dyZWdhdGVSZWZlcmVuY2Uuc2l6ZSgpID09IDApIHsgCisJCQkJdHJ5IHsgCisJCQkJCUFnZ3JlZ2F0ZVJlZmVyZW5jZUZpbGVMb2FkZXIgcmVmTG9hZGVyID0gbmV3IEFnZ3JlZ2F0ZVJlZmVyZW5jZUZpbGVMb2FkZXIodGhpcy5zZWxlY3RlZFJlZmVyZW5jZUZpbGUpOworCQkJCQlhZ2dyZWdhdGVSZWZlcmVuY2UgPSByZWZMb2FkZXIuZ2V0QWdncmVnYXRlRGF0YSgpOworCQkJCQlkYXRhTWFwLnB1dChSRUZFUkVOQ0VfUFJPUEVSVFksIGFnZ3JlZ2F0ZVJlZmVyZW5jZSk7CisJCQkJCXJlZmVyZW5jZUlEcyA9IHJlZkxvYWRlci5nZXRJZFNldCgpOworCQkJCX0gY2F0Y2goRXhjZXB0aW9uIGUpIHsKKwkJCQkJQWN0aXZhdG9yLmxvZ0Vycm9yKGUuZ2V0TWVzc2FnZSgpLCBlKTsKKwkJCQl9CisJCQl9CisvLwkJCWlmICgobG9nV3JpdGVyICE9IG51bGwpICYmIChsb2dXcml0ZXIubmVlZHNIZWFkZXIpKSB7CisvLwkJCQkvLyBUaGlzIHdpbGwgd3JpdGUgdGhlIGhlYWRlcnMgYW5kIHRoZSBmaXJzdCBsaW5lIG9mIGRhdGEgYmVmb3JlIGZpcnN0IGN5Y2xlCisvLwkJCQlsb2dXcml0ZXIubG9nSGVhZGVyKHRoaXMuc2ltdWxhdGlvbiwgdGhpcy5kaXNlYXNlTW9kZWwsIHRoaXMubm9kZUxldmVscywgdGltZVByb3ZpZGVyKTsKKy8vCQkJfQorCQl9IGVsc2UgaWYoZXZlbnQuZ2V0U2ltdWxhdGlvblN0YXRlKCkgPT0gU2ltdWxhdGlvblN0YXRlLkNPTVBMRVRFRF9DWUNMRSkgeworCQkJLy8gY3ljbGUgY29tcGxldGUKKwkJCXN1bURhdGEoKTsKKwkJCWFnZ3JlZ2F0ZVNlcmllc0NhbnZhcy5kcmF3KCk7CisJCQlyZWRyYXcoKTsKKwkJCXRpbWVDb3VudCArKzsKKwkJfSBlbHNlIAorCQkvLyBJcyB0aGUgU2ltdWxhdGlvbiBzdG9wcGluZyAoaS5lLiBiZWluZyBkZWxldGVkPykKKwkJaWYgKGV2ZW50LmdldFNpbXVsYXRpb25TdGF0ZSgpID09IFNpbXVsYXRpb25TdGF0ZS5TVE9QUEVEKSB7CisJCQkvLyBZZXMKKwkJCWlmKHNpbXVsYXRpb249PWV2ZW50LmdldFNpbXVsYXRpb24oKSkgeworCQkJCWFjdGl2ZVNpbXVsYXRpb25zLnJlbW92ZShzaW11bGF0aW9uKTsKKwkJCQlzaW11bGF0aW9uLnJlbW92ZVNpbXVsYXRpb25MaXN0ZW5lcih0aGlzKTsKKwkJCQlzaW11bGF0aW9uLnJlbW92ZVNpbXVsYXRpb25MaXN0ZW5lclN5bmModGhpcyk7CisJCQkJc2ltdWxhdGlvbiA9IG51bGw7CisJCQkJaWRlbnRpZmlhYmxlVGl0bGUuc2V0VGV4dCgiIik7CisJCQkJcHJvcGVydHlTZWxlY3Rvci5zZXREZWNvcmF0b3JzKENvbGxlY3Rpb25zLkVNUFRZX0xJU1QpOworCQkJCXRpbWVDb3VudCA9IDA7CisJCQl9CisvLwkJCWRpc3Bvc2UoKTsKKwkJfSBlbHNlIGlmICgoc2ltdWxhdGlvbiA9PSBldmVudC5nZXRTaW11bGF0aW9uKCkpJiYoZXZlbnQuZ2V0U2ltdWxhdGlvblN0YXRlKCkgPT0gU2ltdWxhdGlvblN0YXRlLlJFU0VUKSkgeworCQkJLy8gWWVzCisJCQlhZ2dyZWdhdGVTZXJpZXNDYW52YXMucmVzZXREYXRhKCk7CisJCQl0aW1lQ291bnQgPSAwOworCQl9IC8vIGlmCisKKwl9IC8vIHNpbXVsYXRpb25DaGFuZ2VkU3luYworCQorCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5qb2JzLnNpbXVsYXRpb24uSVNpbXVsYXRpb25MaXN0ZW5lciNzaW11bGF0aW9uQ2hhbmdlZChvcmcuZWNsaXBzZS5zdGVtLmpvYnMuc2ltdWxhdGlvbi5TaW11bGF0aW9uRXZlbnQpCisJICovCisJQFN1cHByZXNzV2FybmluZ3MoImNhc3QiKQorCXB1YmxpYyB2b2lkIHNpbXVsYXRpb25DaGFuZ2VkKGZpbmFsIFNpbXVsYXRpb25FdmVudCBldmVudCkgeworCQlpZiAoKHNpbXVsYXRpb24gPT0gZXZlbnQuZ2V0U2ltdWxhdGlvbigpKSYmKGV2ZW50LmdldFNpbXVsYXRpb25TdGF0ZSgpID09IFNpbXVsYXRpb25TdGF0ZS5SRVNFVCkpIHsKKwkJCS8vIFllcworCQkJYWdncmVnYXRlU2VyaWVzQ2FudmFzLnJlc2V0RGF0YSgpOworCQkJdGltZUNvdW50ID0gMDsKKwkJfSAvLyBpZgorCQkvLyBJcyB0aGUgU2ltdWxhdGlvbiBzdG9wcGluZyAoaS5lLiBiZWluZyBkZWxldGVkPykKKwkJaWYgKGV2ZW50LmdldFNpbXVsYXRpb25TdGF0ZSgpID09IFNpbXVsYXRpb25TdGF0ZS5TVE9QUEVEKSB7CisJCQkvLyBZZXMKKwkJCWlmKHNpbXVsYXRpb249PWV2ZW50LmdldFNpbXVsYXRpb24oKSkgeworCQkJCWFjdGl2ZVNpbXVsYXRpb25zLnJlbW92ZShzaW11bGF0aW9uKTsKKwkJCQlzaW11bGF0aW9uLnJlbW92ZVNpbXVsYXRpb25MaXN0ZW5lcih0aGlzKTsKKwkJCQlzaW11bGF0aW9uLnJlbW92ZVNpbXVsYXRpb25MaXN0ZW5lclN5bmModGhpcyk7CisJCQkJc2ltdWxhdGlvbiA9IG51bGw7CisJCQkJaWRlbnRpZmlhYmxlVGl0bGUuc2V0VGV4dCgiIik7CisJCQkJcHJvcGVydHlTZWxlY3Rvci5zZXREZWNvcmF0b3JzKChMaXN0PERlY29yYXRvcj4pIENvbGxlY3Rpb25zLkVNUFRZX0xJU1QpOworCQkJCXRpbWVDb3VudCA9IDA7CisJCQl9CisJCQkKKwkJfSAvLyBpZgorCQkKKwkJaWYgKGV2ZW50LmdldFNpbXVsYXRpb25TdGF0ZSgpID09IFNpbXVsYXRpb25TdGF0ZS5TVE9QUEVEKSB7CisJCQkvLyBZZXMKKwkJCWlmKHNpbXVsYXRpb249PWV2ZW50LmdldFNpbXVsYXRpb24oKSkgeworCQkJCWFjdGl2ZVNpbXVsYXRpb25zLnJlbW92ZShzaW11bGF0aW9uKTsKKwkJCQlzaW11bGF0aW9uLnJlbW92ZVNpbXVsYXRpb25MaXN0ZW5lcih0aGlzKTsKKwkJCQlzaW11bGF0aW9uLnJlbW92ZVNpbXVsYXRpb25MaXN0ZW5lclN5bmModGhpcyk7CisJCQkJc2ltdWxhdGlvbiA9IG51bGw7CisJCQkJaWRlbnRpZmlhYmxlVGl0bGUuc2V0VGV4dCgiIik7CisJCQkJcHJvcGVydHlTZWxlY3Rvci5zZXREZWNvcmF0b3JzKChMaXN0PERlY29yYXRvcj4pIENvbGxlY3Rpb25zLkVNUFRZX0xJU1QpOworCQkJCXRpbWVDb3VudCA9IDA7CisJCQl9CisJCQkKKwkJfSAvLyBpZgorCisJfSAvLyBzaW11bGF0aW9uQ2hhbmdlZAorCisKKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuV2lkZ2V0I2Rpc3Bvc2UoKQorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGRpc3Bvc2UoKSB7CisJCXN1cGVyLmRpc3Bvc2UoKTsKKwkJaWYgKHRoaXMucnZocCAhPSBudWxsKSB7CisJCQkvLyBZZXMKKwkJCXJ2aHAucmVtb3ZlRXh0ZW5zaW9uTGlzdGVuZXIodGhpcyk7CisJCX0gLy8gaWYKKwkJaWYgKHNpbXVsYXRpb24gIT0gbnVsbCkgeworCQkJLy8gWWVzCisJCQlzaW11bGF0aW9uLnJlbW92ZVNpbXVsYXRpb25MaXN0ZW5lcih0aGlzKTsKKwkJfSAvLyBpZgorCX0gLy8gZGlzcG9zZQorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnVpLnJlcG9ydHMudmlld3MuUmVwb3J0Q29udHJvbCNnZXRJZGVudGlmaWFibGUoKQorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBJZGVudGlmaWFibGUgZ2V0SWRlbnRpZmlhYmxlKCkgeworCQkvLyBUaGlzIHJlcG9ydCBjb250cm9sIGlzIGxpbmtlZCB0byBhIHNpbXVsYXRpb24gTk9UIHRvIGFuIGlkZW50aWZpYWJsZQorCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBUaGlzIENvbnRyb2wgaXMgYXNzb2NpYXRlZCB3aXRoIGEgU2ltdWxhdGlvbgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS51aS5yZXBvcnRzLnZpZXdzLlJlcG9ydENvbnRyb2wjZ2V0Q29udHJvbFR5cGUoKQorCSAqLworCXB1YmxpYyBTdHJpbmcgZ2V0Q29udHJvbFR5cGUoKSB7CisJCXJldHVybiBSZXBvcnRDb250cm9sRmFjdG9yeS5TSU1VTEFUSU9OX1RZUEU7CisJfQorCQorCQorCisJLyoqCisJICogTXVzdCBpbXBsZW1lbnQgdGhpcyBtZXRob2QgdG8gYWdncmVnYXRlIGRhdGEgaW4gcnVuIHRocmVhZAorCSAqIAorCSAqLworCXB1YmxpYyB2b2lkIHN1bURhdGEoKSB7CisJCQorCQlJdGVyYXRvcjxJdGVtUHJvcGVydHlEZXNjcmlwdG9yPiBpdGVyID0gYWxsUHJvcGVydGllcy5pdGVyYXRvcigpOworCQl3aGlsZSgoaXRlciE9bnVsbCkmJihpdGVyLmhhc05leHQoKSkpIHsKKwkJCUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IgcHJvcGVydHkgPSBpdGVyLm5leHQoKTsKKwkJCVN0cmluZyBwcm9wZXJ0eUtleSA9IHByb3BlcnR5LmdldERpc3BsYXlOYW1lKHByb3BlcnR5KTsKKwkJCWlmKCFkYXRhTWFwLmNvbnRhaW5zS2V5KHByb3BlcnR5S2V5KSkgeworCQkJCUxpc3Q8RG91YmxlPiBuZXdEYXRhID0gbmV3IEFycmF5TGlzdDxEb3VibGU+KCk7CisJCQkJLy8ganVzdCBpbiBjYXNlLCBwb3B1bGF0ZSB0aGUgZGF0YSBsaXN0CisJCQkJZm9yIChpbnQgaSA9IDA7IGkgPCB0aW1lQ291bnQ7IGkgKyspIHsKKwkJCQkJbmV3RGF0YS5hZGQoaSxuZXcgRG91YmxlKDAuMCkpOworCQkJCX0KKwkJCQlkYXRhTWFwLnB1dChwcm9wZXJ0eUtleSxuZXdEYXRhKTsKKwkJCX0KKwkJCQorCQkJLy8gbm93IGxvb3AgdGhyb3VnaCBhbGwgbm9kZXMgYW5kIGludGVncmF0ZSB0aGUgZGF0YSBmb3IgdGhpcyBwcm9wZXJ0eQorCQkJZG91YmxlIHRvdFBvcCA9IDAuMDsKKwkJCWRvdWJsZSBzdW0gPSAwLjA7CisJCQlpZihyZWxhdGl2ZVZhbHVlUHJvdmlkZXJTZXQuZ2V0KHBvcHVsYXRpb25JZCkgIT0gbnVsbCkgeworCQkJCUl0ZXJhdG9yPFJlbGF0aXZlVmFsdWVQcm92aWRlckFkYXB0ZXI+IGl0ZXIyID0gcmVsYXRpdmVWYWx1ZVByb3ZpZGVyU2V0LmdldChwb3B1bGF0aW9uSWQpLml0ZXJhdG9yKCk7CisJCQkJd2hpbGUoKGl0ZXIyICE9bnVsbCkgJiYgKGl0ZXIyLmhhc05leHQoKSkpIHsKKwkJCQkJUmVsYXRpdmVWYWx1ZVByb3ZpZGVyQWRhcHRlciBydnAgPSBpdGVyMi5uZXh0KCk7CisJCQkJCWRvdWJsZSBub2RlUG9wdWxhdGlvbiA9IHJ2cC5nZXREZW5vbWluYXRvcihudWxsKTsKKwkJCQkJdG90UG9wICs9IG5vZGVQb3B1bGF0aW9uOworCQkJCQlzdW0gKz0gKG5vZGVQb3B1bGF0aW9uICogcnZwLmdldFJlbGF0aXZlVmFsdWUocHJvcGVydHkpKTsKKwkJCQl9CisJCQl9CisJCQlpZih0b3RQb3A8PSAwLjApIHRvdFBvcCA9IDEuMDsgLy8gYXZvaWQgZGl2aWRlIGJ5IHplcm9zCisJCQl0b3RhbFBvcHVsYXRpb24ucHV0KHBvcHVsYXRpb25JZCwgdG90UG9wKTsKKwkJCWFnZ3JlZ2F0ZVNlcmllc0NhbnZhcy5zZXRNaW5Zc2NhbGUoMS4wL3RvdGFsUG9wdWxhdGlvbi5nZXQocG9wdWxhdGlvbklkKSk7CisJCQlzdW0gLz0gdG90UG9wOworCQkJTGlzdDxEb3VibGU+IGFnZ3JlZ2F0ZUxpc3QgPSBkYXRhTWFwLmdldChwcm9wZXJ0eUtleSk7CisJCQkvLyBhZGQgdGhlIG5ldyBkYXRhIHBvaW50CisJCQlhZ2dyZWdhdGVMaXN0LmFkZCh0aW1lQ291bnQsbmV3IERvdWJsZShzdW0pKTsKKwkJCWRhdGFNYXAucHV0KHByb3BlcnR5S2V5LCBhZ2dyZWdhdGVMaXN0KTsKKwkJfQorCX0vLyBzdW1kYXRhCisJCisJCisJCisJLyoqCisJICogCisJICogQHBhcmFtIG5vZGVMZXZlbHMKKwkgKiBAcmV0dXJuIGhpZ2hlc3QgcmVzb2x1dGlvbiBsZXZlbCBpbiBtYXAKKwkgKi8KKwlwcml2YXRlIGludCBnZXRIaWdoZXN0UmVzb2x1dGlvbihNYXA8Tm9kZSwgSW50ZWdlcj5ub2RlTGV2ZWxzKSB7CisJCWludCByZXRWYWwgPSAtMTsKKwkJQ29sbGVjdGlvbjxJbnRlZ2VyPnZhbHMgPSBub2RlTGV2ZWxzLnZhbHVlcygpOworCQlmb3IoaW50IGxldmVsOnZhbHMpIHsKKwkJCWlmKGxldmVsID49IHJldFZhbCkgcmV0VmFsID0gbGV2ZWw7CisJCX0KKwkJcmV0dXJuIHJldFZhbDsKKwl9CisJCisKKwkKKwkvKgorCSAqIFJldHVybiBhbGwgbm9kZXMgYXQgdGhlIHNhbWUgbGV2ZWwKKwkgKi8KKwlAU3VwcHJlc3NXYXJuaW5ncygiYm94aW5nIikKKwlwcml2YXRlIEl0ZXJhdG9yPE5vZGU+IGdldE5vZGVJdGVyYXRvcihpbnQgbGV2ZWwsIE1hcDxOb2RlLCBJbnRlZ2VyPm5vZGVMZXZlbHMpIHsKKwkJQXJyYXlMaXN0PE5vZGU+IGxpc3QgPSBuZXcgQXJyYXlMaXN0KCk7CisJCS8vU2V0PE5vZGU+bnMgPSBub2RlTGV2ZWxzLmtleVNldCgpOworCQkvL2ZvcihOb2RlIG46bnMpIHsKKwkJZm9yIChFbnRyeTxOb2RlLEludGVnZXI+IGVudHJ5IDogbm9kZUxldmVscy5lbnRyeVNldCgpKSB7CisJCQlpZihlbnRyeS5nZXRWYWx1ZSgpID09IGxldmVsKSB7CisJCQkJbGlzdC5hZGQoZW50cnkuZ2V0S2V5KCkpOworCQkJfQorCQl9CisJCXJldHVybiBsaXN0Lml0ZXJhdG9yKCk7CisJfQorCQorCQorCQorCS8qKgorCSAqIFJldHVybiBhbGwgbm9kZXMgYW5kIHRoZWlyIGNvcnJlc3BvbmRpbmcgbGV2ZWwuIFdlIHVzZSB0aGlzIHRvIGxvZyBkYXRhIHVzaW5nIAorCSAqIGRpZmZlcmVudCByZXNvbHV0aW9ucy4KKwkgKiAKKwkgKiBAcGFyYW0gc2ltdWxhdGlvbgorCSAqIEByZXR1cm4gTWFwIHdpdGggbm9kZSBhbmQgbGV2ZWwKKwkgKi8KKwlAU3VwcHJlc3NXYXJuaW5ncygiYm94aW5nIikKKwlwdWJsaWMgTWFwPE5vZGUsIEludGVnZXI+IGdldE5vZGVMZXZlbHMoSVNpbXVsYXRpb24gc2ltdWxhdGlvbikgeworCQlNYXA8Tm9kZSwgSW50ZWdlcj4gcmVzdWx0ID0gbmV3IEhhc2hNYXA8Tm9kZSwgSW50ZWdlcj4oKTsKKwkJZmluYWwgR3JhcGggZ3JhcGggPSBzaW11bGF0aW9uLmdldFNjZW5hcmlvKCkuZ2V0Q2Fub25pY2FsR3JhcGgoKTsKKwkJaWYgKGdyYXBoICE9IG51bGwpIHsKKwkJCWZpbmFsIEVNYXA8VVJJLE5vZGU+IGFsbE5vZGVzID0gZ3JhcGguZ2V0Tm9kZXMoKTsKKwkJCWZpbmFsIFNldDxVUkk+IGFsbEdyYXBoVVJJcyA9IGFsbE5vZGVzLmtleVNldCgpOworCQkgICAgSXRlcmF0b3I8VVJJPiBncmFwaEl0ZXIyID0gYWxsR3JhcGhVUklzLml0ZXJhdG9yKCk7CisJCSAgCisJCSAgICB3aGlsZSgoZ3JhcGhJdGVyMiE9bnVsbCkmJihncmFwaEl0ZXIyLmhhc05leHQoKSkpIHsKKwkJICAgIAlVUkkgdXJpID0gZ3JhcGhJdGVyMi5uZXh0KCk7CisJCSAgICAJTm9kZSBub2RlID0gYWxsTm9kZXMuZ2V0KHVyaSk7CisJCSAgICAJU3RyaW5nIGlkID0gIG5vZGUuZ2V0VVJJKCkudG9TdHJpbmcoKTsKKwkJICAgIAlpbnQgbGV2ZWwgPSBnZXRBZG1pbkxldmVsKGlkKTsKKwkJICAgIAlyZXN1bHQucHV0KG5vZGUsIGxldmVsKTsKKwkJICAgIH0KKwkJfSAvLyBncmFwaCBub3QgbnVsbAorCQlyZXR1cm4gcmVzdWx0OworCX0KKwkKKworCXByaXZhdGUgaW50IGdldEFkbWluTGV2ZWwoU3RyaW5nIHVyaUtleSkgeworCQlpbnQgcmV0VmFsID0gMDsKKwkJU3RyaW5nIHRlc3QgPSB1cmlLZXk7CisJCXdoaWxlKHRlc3QuY29udGFpbnMoIi0iKSkgeworCQkJcmV0VmFsICsrOworCQkJaW50IGlkeDEgPSB0ZXN0LmluZGV4T2YoIi0iKTsKKwkJCVN0cmluZyB0ZXN0MiA9IHRlc3Quc3Vic3RyaW5nKGlkeDErMSwgdGVzdC5sZW5ndGgoKSk7CisJCQl0ZXN0ID0gdGVzdDI7CisJCX0KKwkJcmV0dXJuIHJldFZhbDsKKwl9CisJCit9IC8vIFJlbGF0aXZlVmFsdWVIaXN0b3J5UGxvdHRlcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLnJlcG9ydHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvcmVwb3J0cy92aWV3cy9JUmVtb3ZlTGlzdGVuZXIuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5yZXBvcnRzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3JlcG9ydHMvdmlld3MvSVJlbW92ZUxpc3RlbmVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzdjOGNkMQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5yZXBvcnRzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3JlcG9ydHMvdmlld3MvSVJlbW92ZUxpc3RlbmVyLmphdmEKQEAgLTAsMCArMSwyOSBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnVpLnJlcG9ydHMudmlld3M7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDkgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5JZGVudGlmaWFibGU7CisKKy8qKgorICogV2hlbiB0aGUgcmVtb3ZlIGJ1dHRvbiBpcyBwcmVzc2VkIGJ5IHRoZSB1c2VyCisgKiBAYXV0aG9yIEphbWVzCisgKgorICovCitwdWJsaWMgaW50ZXJmYWNlIElSZW1vdmVMaXN0ZW5lciB7CisJLyoqCisJICogCisJICogQHBhcmFtIGlkZW50aWZpYWJsZQorCSAqLworCXZvaWQgaWRlbnRpZmlhYmxlUmVtb3ZlZChJZGVudGlmaWFibGUgaWRlbnRpZmlhYmxlKSA7CisJCisKK30KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5yZXBvcnRzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3JlcG9ydHMvdmlld3MvTWVzc2FnZXMuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5yZXBvcnRzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3JlcG9ydHMvdmlld3MvTWVzc2FnZXMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42OTBiMTUwCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLnJlcG9ydHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvcmVwb3J0cy92aWV3cy9NZXNzYWdlcy5qYXZhCkBAIC0wLDAgKzEsNDIgQEAKKy8vIE1lc3NhZ2VzLmphdmEKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS51aS5yZXBvcnRzLnZpZXdzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGphdmEudXRpbC5NaXNzaW5nUmVzb3VyY2VFeGNlcHRpb247CitpbXBvcnQgamF2YS51dGlsLlJlc291cmNlQnVuZGxlOworCisvKioKKyAqIFRoaXMgY2xhc3MgcmVwcmVzZW50cworICovCitwdWJsaWMgY2xhc3MgTWVzc2FnZXMgeworCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBCVU5ETEVfTkFNRSA9ICJvcmcuZWNsaXBzZS5zdGVtLnVpLnJlcG9ydHMudmlld3MubWVzc2FnZXMiOyAvLyROT04tTkxTLTEkCisKKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBSZXNvdXJjZUJ1bmRsZSBSRVNPVVJDRV9CVU5ETEUgPSBSZXNvdXJjZUJ1bmRsZQorCQkJLmdldEJ1bmRsZShCVU5ETEVfTkFNRSk7CisKKwlwcml2YXRlIE1lc3NhZ2VzKCkgeworCQkvLyBOb3RoaW5nCisJfQorCisJLyoqCisJICogQHBhcmFtIGtleQorCSAqIEByZXR1cm4gdGhlIHN0cmluZyBtYXRjaGluZyB0aGUga2V5CisJICovCisJcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0U3RyaW5nKGZpbmFsIFN0cmluZyBrZXkpIHsKKwkJdHJ5IHsKKwkJCXJldHVybiBSRVNPVVJDRV9CVU5ETEUuZ2V0U3RyaW5nKGtleSk7CisJCX0gY2F0Y2ggKGZpbmFsIE1pc3NpbmdSZXNvdXJjZUV4Y2VwdGlvbiBlKSB7CisJCQlyZXR1cm4gJyEnICsga2V5ICsgJyEnOworCQl9CisJfQorfSAvLyBNZXNzYWdlcwpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLnJlcG9ydHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvcmVwb3J0cy92aWV3cy9QaGFzZVNwYWNlQ2FudmFzLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkucmVwb3J0cy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9yZXBvcnRzL3ZpZXdzL1BoYXNlU3BhY2VDYW52YXMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZDYyYjViCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLnJlcG9ydHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvcmVwb3J0cy92aWV3cy9QaGFzZVNwYWNlQ2FudmFzLmphdmEKQEAgLTAsMCArMSw2MzAgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS51aS5yZXBvcnRzLnZpZXdzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5iaXJ0LmNoYXJ0LmRldmljZS5JRGV2aWNlUmVuZGVyZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuYmlydC5jaGFydC5leGNlcHRpb24uQ2hhcnRFeGNlcHRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuYmlydC5jaGFydC5mYWN0b3J5LkdlbmVyYXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5iaXJ0LmNoYXJ0Lm1vZGVsLkNoYXJ0OworaW1wb3J0IG9yZy5lY2xpcHNlLmJpcnQuY2hhcnQubW9kZWwuQ2hhcnRXaXRoQXhlczsKK2ltcG9ydCBvcmcuZWNsaXBzZS5iaXJ0LmNoYXJ0Lm1vZGVsLmF0dHJpYnV0ZS5BeGlzVHlwZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5iaXJ0LmNoYXJ0Lm1vZGVsLmF0dHJpYnV0ZS5Cb3VuZHM7CitpbXBvcnQgb3JnLmVjbGlwc2UuYmlydC5jaGFydC5tb2RlbC5hdHRyaWJ1dGUuSW50ZXJzZWN0aW9uVHlwZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5iaXJ0LmNoYXJ0Lm1vZGVsLmF0dHJpYnV0ZS5NYXJrZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuYmlydC5jaGFydC5tb2RlbC5hdHRyaWJ1dGUuVGlja1N0eWxlOworaW1wb3J0IG9yZy5lY2xpcHNlLmJpcnQuY2hhcnQubW9kZWwuYXR0cmlidXRlLmltcGwuQm91bmRzSW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5iaXJ0LmNoYXJ0Lm1vZGVsLmF0dHJpYnV0ZS5pbXBsLkNvbG9yRGVmaW5pdGlvbkltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2UuYmlydC5jaGFydC5tb2RlbC5jb21wb25lbnQuQXhpczsKK2ltcG9ydCBvcmcuZWNsaXBzZS5iaXJ0LmNoYXJ0Lm1vZGVsLmNvbXBvbmVudC5TZXJpZXM7CitpbXBvcnQgb3JnLmVjbGlwc2UuYmlydC5jaGFydC5tb2RlbC5jb21wb25lbnQuaW1wbC5TZXJpZXNJbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLmJpcnQuY2hhcnQubW9kZWwuZGF0YS5OdW1iZXJEYXRhU2V0OworaW1wb3J0IG9yZy5lY2xpcHNlLmJpcnQuY2hhcnQubW9kZWwuZGF0YS5TZXJpZXNEZWZpbml0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmJpcnQuY2hhcnQubW9kZWwuZGF0YS5pbXBsLk51bWJlckRhdGFFbGVtZW50SW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5iaXJ0LmNoYXJ0Lm1vZGVsLmRhdGEuaW1wbC5OdW1iZXJEYXRhU2V0SW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5iaXJ0LmNoYXJ0Lm1vZGVsLmRhdGEuaW1wbC5TZXJpZXNEZWZpbml0aW9uSW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5iaXJ0LmNoYXJ0Lm1vZGVsLmltcGwuQ2hhcnRXaXRoQXhlc0ltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2UuYmlydC5jaGFydC5tb2RlbC5sYXlvdXQuTGVnZW5kOworaW1wb3J0IG9yZy5lY2xpcHNlLmJpcnQuY2hhcnQubW9kZWwubGF5b3V0LlBsb3Q7CitpbXBvcnQgb3JnLmVjbGlwc2UuYmlydC5jaGFydC5tb2RlbC50eXBlLlNjYXR0ZXJTZXJpZXM7CitpbXBvcnQgb3JnLmVjbGlwc2UuYmlydC5jaGFydC5tb2RlbC50eXBlLmltcGwuU2NhdHRlclNlcmllc0ltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2UuYmlydC5jaGFydC51dGlsLlBsdWdpblNldHRpbmdzOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLkFjdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSUFjdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uTWVudU1hbmFnZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLlNlcGFyYXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuU1RFTVRpbWU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5hZGFwdGVycy5yZWxhdGl2ZXZhbHVlLmhpc3RvcnkuUmVsYXRpdmVWYWx1ZUhpc3RvcnlQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmFkYXB0ZXJzLnJlbGF0aXZldmFsdWUuaGlzdG9yeS5SZWxhdGl2ZVZhbHVlSGlzdG9yeVByb3ZpZGVyQWRhcHRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnVpLnJlcG9ydHMuQWN0aXZhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5TV1Q7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5QYWludEV2ZW50OworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuUGFpbnRMaXN0ZW5lcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZ3JhcGhpY3MuR0M7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmdyYXBoaWNzLkltYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNhbnZhczsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuTWVudTsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5JV29ya2JlbmNoQWN0aW9uQ29uc3RhbnRzOworCisvKioKKyAqIFRpbWVTZXJpZXNDYW52YXMgaXMgYSBzdWJjbGFzcyBvZiBDYW52YXMgc3VpdGFibGUgZm9yIGNoYXJ0IGRyYXdpbmdzLgorICovCitwdWJsaWMgY2xhc3MgUGhhc2VTcGFjZUNhbnZhcyBleHRlbmRzIENhbnZhcyB7CisKKwlwcm90ZWN0ZWQgSURldmljZVJlbmRlcmVyIGlkciA9IG51bGw7CisKKwkvKioKKwkgKiBUaGlzIGlzIHRoZSA8Y29kZT5DaGFydDwvY29kZT4gdGhhdCBwbG90cyB0aGUgcmVsYXRpdmUgdmFsdWVzLgorCSAqLworCXByb3RlY3RlZCBDaGFydCBjbSA9IG51bGw7CisKKwkvKioKKwkgKiBUaGUgcHJvdmlkZXIgb2YgcmVsYXRpdmUgdmFsdWVzLgorCSAqLworCXByaXZhdGUgUmVsYXRpdmVWYWx1ZUhpc3RvcnlQcm92aWRlciBydmhwOworCisJLyoqCisJICogVGhpcyBpcyB0aGUgcHJvcGVydHkgb2YgdGhlIGxhYmVsIHVwZGF0ZWQgYnkgdGhlIHNlbGVjdGVkIGRlY29yYXRvciB3aG9zZQorCSAqIHJlbGF0aXZlIHZhbHVlIHdpbGwgYmUgcGxvdHRlZCBhbG9uZyBYCisJICovCisJcHJpdmF0ZSBJdGVtUHJvcGVydHlEZXNjcmlwdG9yIHByb3BlcnR5VG9QbG90WDsKKworCS8qKgorCSAqIFRoaXMgaXMgdGhlIHByb3BlcnR5IG9mIHRoZSBsYWJlbCB1cGRhdGVkIGJ5IHRoZSBzZWxlY3RlZCBkZWNvcmF0b3Igd2hvc2UKKwkgKiByZWxhdGl2ZSB2YWx1ZSB3aWxsIGJlIHBsb3R0ZWQgYWxvbmcgWQorCSAqLworCXByaXZhdGUgSXRlbVByb3BlcnR5RGVzY3JpcHRvciBwcm9wZXJ0eVRvUGxvdFk7CisKKwkvKioKKwkgKiBUaGVzZSBhcmUgdGhlIHZhbHVlcyB0aGF0IHdpbGwgYmUgcGxvdHRlZCBpbiBYCisJICogCisJICovCisJcHJpdmF0ZSBmaW5hbCBMaXN0PERvdWJsZT4gcmVsYXRpdmVWYWx1ZXNYID0gbmV3IEFycmF5TGlzdDxEb3VibGU+KCk7CisKKwkvKioKKwkgKiBUaGVzZSBhcmUgdGhlIHZhbHVlcyB0aGF0IHdpbGwgYmUgcGxvdHRlZCBpbiBZCisJICogCisJICovCisJcHJpdmF0ZSBmaW5hbCBMaXN0PERvdWJsZT4gcmVsYXRpdmVWYWx1ZXNZID0gbmV3IEFycmF5TGlzdDxEb3VibGU+KCk7CisJCisJLyoqCisJICogTG9nIG9mIHplcm8gaXMgbmVnYXRpdmUgaW5maW5pdHkgc28gZm9yIGVhY2ggbG9jYXRpb24gd2Ugd2lsbCBjdXQgb2ZmIHRoZSBtaW5pbXVtIHZhbHVlCisJICogb2YgbG9nKHkpIG9yIGxvZyh4KSBhdCAwLjUvUE9QVUxBVElPTiBmb3IgZGlzcGxheSBwdXJwb3NlcyBvbmx5CisJICovCisJcHJpdmF0ZSBkb3VibGUgbWluTG9nU2NhbGVWYWx1ZSA9IDEuMDsKKworCisJLyoqCisJICogQ2hhcnQgZ2VuZXJhdG9yIGluc3RhbmNlIChyZWZlcmVuY2UgdG8gYSBzaW5nbGV0b24pCisJICovCisJR2VuZXJhdG9yIGdyOworCQorCS8qKgorCSAqIFRoZSB4QXhpcyBpbiB0aGUgUGhhc2UgU3BhY2UgUGxvdAorCSAqLworCXByaXZhdGUgQXhpcyB4QXhpc1ByaW1hcnk7CisJCisJLyoqCisJICogVGhlIHlBeGlzIGluIHRoZSBQaGFzZSBTcGFjZSBQbG90CisJICovCisJcHJpdmF0ZSBBeGlzIHlBeGlzUHJpbWFyeTsKKwkKKwkvKioKKwkgKiBkZWZhdWx0IHkgYXhpcyBsYWJlbC4gVGhpcyB2YWx1ZSBpcyByZWFkIGZyb20KKwkgKiBtZXNzYWdlcy5wcm9wZXJ0aWVzIChOTFMpCisJICovCisJcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIGRlZmF1bHRBeGlzTGFiZWxfWT0iWSBBeGlzIjsKKwkKKwkvKioKKwkgKiBkZWZhdWx0IHggYXhpcyBsYWJlbC4gVGhpcyB2YWx1ZSBpcyByZWFkIGZyb20KKwkgKiBtZXNzYWdlcy5wcm9wZXJ0aWVzIChOTFMpCisJICovCisJcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIGRlZmF1bHRBeGlzTGFiZWxfWD0iWCBBeGlzIjsKKwkKKwlib29sZWFuIHVzZUxpbmVhclNjYWxlcyA9IHRydWU7CisKKwlwcml2YXRlIExpbmVhclNjYWxlc0FjdGlvbiBsaW5lYXJTY2FsZXNBY3Rpb247CisKKwlwcml2YXRlIExvZ2FyaXRobWljU2NhbGVzQWN0aW9uIGxvZ1RpbWVTY2FsZXNBY3Rpb247CisKKwlwcml2YXRlIFN0cmluZyB4QXhpc0xhYmVsOworCisJcHJpdmF0ZSBTdHJpbmcgeUF4aXNMYWJlbDsKKwkKKwlJbWFnZSBpbWdDaGFydCA9IG51bGw7CisKKwkvKioKKwkgKiBDb25zdHJ1Y3Rvci4KKwkgKiAKKwkgKiBAcGFyYW0gcGFyZW50CisJICogICAgICAgICAgICB0aGUgU1dUIHBhcmVudCBvZiB0aGUgV2lkZ2V0CisJICovCisJcHVibGljIFBoYXNlU3BhY2VDYW52YXMoZmluYWwgQ29tcG9zaXRlIHBhcmVudCkgeworCQlzdXBlcihwYXJlbnQsIFNXVC5ET1VCTEVfQlVGRkVSRUQgfCBTV1QuQk9SREVSKTsKKworCQlnciA9IEdlbmVyYXRvci5pbnN0YW5jZSgpOworCisJCXRyeSB7CisJCQlpZHIgPSBQbHVnaW5TZXR0aW5ncy5pbnN0YW5jZSgpLmdldERldmljZSgiZHYuU1dUIik7IC8vJE5PTi1OTFMtMSQJCQkKKwkJfSBjYXRjaCAoZmluYWwgQ2hhcnRFeGNlcHRpb24gcGV4KSB7CisJCQlBY3RpdmF0b3IubG9nRXJyb3IoIlByb2JsZW0gaW5pdGlhbGl6aW5nIGNoYXJ0IiwgcGV4KTsgLy8kTk9OLU5MUy0xJAorCQkJcmV0dXJuOworCQl9CisKKwkJcmVzZXREYXRhKCk7CisJCWNtID0gY3JlYXRlUGhhc2VTcGFjZUxpbmVDaGFydChyZWxhdGl2ZVZhbHVlc1gsIHJlbGF0aXZlVmFsdWVzWSwKKwkJCQlNZXNzYWdlcy5nZXRTdHJpbmcoIlBILnRpdGxlIikpOyAvLyROT04tTkxTLTEkCisKKwkJCisJCWFkZFBhaW50TGlzdGVuZXIobmV3IFBhaW50TGlzdGVuZXIoKSB7CisJCQlwdWJsaWMgdm9pZCBwYWludENvbnRyb2woZmluYWwgUGFpbnRFdmVudCBwZSkgeworCisJCQkJZmluYWwgQ29tcG9zaXRlIHNvdXJjZSA9IChDb21wb3NpdGUpIHBlLmdldFNvdXJjZSgpOworCQkJCWZpbmFsIG9yZy5lY2xpcHNlLnN3dC5ncmFwaGljcy5SZWN0YW5nbGUgZCA9IHNvdXJjZQorCQkJCQkJLmdldENsaWVudEFyZWEoKTsKKworCQkJCWlmKGltZ0NoYXJ0ICE9IG51bGwpIGltZ0NoYXJ0LmRpc3Bvc2UoKTsKKwkJCQlpbWdDaGFydCA9IG5ldyBJbWFnZShzb3VyY2UuZ2V0RGlzcGxheSgpLCBkKTsKKwkJCQlpZHIuc2V0UHJvcGVydHkoSURldmljZVJlbmRlcmVyLkdSQVBISUNTX0NPTlRFWFQsIG5ldyBHQygKKwkJCQkJCWltZ0NoYXJ0KSk7CisJCQkJZmluYWwgQm91bmRzIGJvdW5kcyA9IEJvdW5kc0ltcGwuY3JlYXRlKGQueCwgZC55LCBkLndpZHRoLAorCQkJCQkJZC5oZWlnaHQpOworCQkJCWJvdW5kcy5zY2FsZSg3MmQgLyBpZHIuZ2V0RGlzcGxheVNlcnZlcigpLmdldERwaVJlc29sdXRpb24oKSk7CisJCQkJLy8gQk9VTkRTIE1VU1QgQkUgU1BFQ0lGSUVEIElOIFBPSU5UUworCisJCQkJdHJ5IHsKKwkJCQkJZ3IucmVuZGVyKGlkciwgZ3IuYnVpbGQoaWRyLmdldERpc3BsYXlTZXJ2ZXIoKSwgY20sIGJvdW5kcywKKwkJCQkJCQludWxsLCBudWxsLCBudWxsKSk7CisJCQkJCXBlLmdjLmRyYXdJbWFnZShpbWdDaGFydCwgZC54LCBkLnkpOworCQkJCX0gY2F0Y2ggKGZpbmFsIENoYXJ0RXhjZXB0aW9uIGNlKSB7CisJCQkJCUFjdGl2YXRvci5sb2dFcnJvcigiUHJvYmxlbSByZW5kZXJpbmcgY2hhcnQiLCBjZSk7IC8vJE5PTi1OTFMtMSQKKwkJCQl9CisKKwkJCX0gLy8gcGFpbnRDb250cm9sCisJCX0gLy8gUGFpbnRMaXN0ZW5lcgorCisJCSk7CisJCQorCQkvL0NyZWF0ZSBhIGNvbnRleHQgbWVudSBmb3IgdGhlIGNhbnZhcworCQljcmVhdGVDb250ZXh0TWVudSh0aGlzKTsKKworCX0gLy8gVGltZVNlcmllc0NhbnZhcworCisJLyoqCisJICogVGhlIG1ldGhvZCB3aGljaCBnZXRzIHRoZSBUaW1lU2VyaWVzQ2FudmFzJyByZXBvcnRzIGxpc3QsIGFuZCBkcmF3cyBpdCBvbgorCSAqIHRoZSBUaW1lU2VyaWVzQ2FudmFzLgorCSAqIAorCSAqLworCXB1YmxpYyB2b2lkIGRyYXcoKSB7CisJCS8vIEhhcyBhIHJlbGF0aXZlIHZhbHVlIHByb3ZpZGVyIGJlZW4gcHJvdmlkZWQ/CisJCWlmIChydmhwICE9IG51bGwpIHsKKwkJCS8vIFllcworCQkJCisJCQkvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisJCQkvLyBMb2coMC4wKSBpcyBuZWdhdGl2ZSBpbmZpbml0eSBzbyBmb3IgZGlzcGxheSBwdXJwb3NlcyBvbmx5CisJCQkvLyB3ZSBzZXQgdGhlIG1pbmltdW0gYXhpcyB2YWx1ZSBhdCAwLjUvUE9QVUxBVElPTgorCQkJZG91YmxlIGRlbm9tID0gcnZocC5nZXREZW5vbWluYXRvcihudWxsKTsKKwkJCWlmKGRlbm9tIDw9MC4wKSBkZW5vbSA9IDEuMDsKKwkJCW1pbkxvZ1NjYWxlVmFsdWUgPSAwLjUvZGVub207CisJCQkvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisJCQkKKwkJCWlmKHByb3BlcnR5VG9QbG90WCA9PSBudWxsIHx8IHByb3BlcnR5VG9QbG90WT09bnVsbCkgcmV0dXJuOworCQkJLy8gdGltZQorCQkJU1RFTVRpbWVbXSB0aW1lID0gcnZocC5nZXRBbGxIaXN0b3JpY1RpbWVWYWx1ZXMoKTsKKwkJCS8vIEdldCB0aGUgdmFsdWVzIGZvciB0aGUgcHJvcGVydHkgdG8gYmUgcGxvdHRlZAorCQkJZmluYWwgZG91YmxlW10gcmVsYXRpdmVWYWx1ZXNYID0gcnZocAorCQkJCQkuZ2V0SGlzdG9yaWNJbnN0YW5jZXMocHJvcGVydHlUb1Bsb3RYLHRpbWUpOworCQkJZmluYWwgZG91YmxlW10gcmVsYXRpdmVWYWx1ZXNZID0gcnZocAorCQkJCQkuZ2V0SGlzdG9yaWNJbnN0YW5jZXMocHJvcGVydHlUb1Bsb3RZLHRpbWUpOworCQkJLy8gQW55IHZhbHVlcz8KKwkJCWlmICgocmVsYXRpdmVWYWx1ZXNYLmxlbmd0aCA+IDApICYmICgocmVsYXRpdmVWYWx1ZXNZLmxlbmd0aCA+IDApKSkgeworCQkJCS8vIFllcworCQkJCWNsZWFyRGF0YSgpOworCQkJCWZvciAoaW50IGN5Y2xlTnVtYmVyID0gMDsgY3ljbGVOdW1iZXIgPCByZWxhdGl2ZVZhbHVlc1gubGVuZ3RoOyBjeWNsZU51bWJlcisrKSB7CisJCQkJCURvdWJsZSB2YWx1ZVggPSBudWxsLCB2YWx1ZVkgPSBudWxsOworCQkJCQlkb3VibGUgZGlzcGxheVZhbHVlWCA9IHJlbGF0aXZlVmFsdWVzWFtjeWNsZU51bWJlcl07CisJCQkJCWRvdWJsZSBkaXNwbGF5VmFsdWVZID0gcmVsYXRpdmVWYWx1ZXNZW2N5Y2xlTnVtYmVyXTsKKwkJCQkJCisJCQkJCWlmIChkaXNwbGF5VmFsdWVYIDw9IG1pbkxvZ1NjYWxlVmFsdWUpIHsKKwkJCQkJCS8vIExvZygwLjApIGlzIG5lZ2F0aXZlIGluZmluaXR5IHNvIGZvciBkaXNwbGF5IHB1cnBvc2VzIG9ubHkKKwkJCQkJCS8vIHdlIHNldCB0aGUgbWluaW11bSBheGlzIHZhbHVlIGF0IDAuNS9QT1BVTEFUSU9OCisJCQkJCQlkaXNwbGF5VmFsdWVYID0gbWluTG9nU2NhbGVWYWx1ZTsKKwkJCQkJfQorCQkJCQkKKwkJCQkJaWYgKGRpc3BsYXlWYWx1ZVkgPD0gbWluTG9nU2NhbGVWYWx1ZSkgeworCQkJCQkJLy8gTG9nKDAuMCkgaXMgbmVnYXRpdmUgaW5maW5pdHkgc28gZm9yIGRpc3BsYXkgcHVycG9zZXMgb25seQorCQkJCQkJLy8gd2Ugc2V0IHRoZSBtaW5pbXVtIGF4aXMgdmFsdWUgYXQgMC41L1BPUFVMQVRJT04KKwkJCQkJCWRpc3BsYXlWYWx1ZVkgPSBtaW5Mb2dTY2FsZVZhbHVlOworCQkJCQl9CisJCQkJCQorCQkJCQkKKwkJCQkJaWYgKHVzZUxpbmVhclNjYWxlcykgeworCQkJCQkJdmFsdWVYID0gbmV3IERvdWJsZShkaXNwbGF5VmFsdWVYKTsKKwkJCQkJCXZhbHVlWSA9IG5ldyBEb3VibGUoZGlzcGxheVZhbHVlWSk7CisJCQkJCX0KKwkJCQkJZWxzZSB7IAorCQkJCQkJCXZhbHVlWCA9IG5ldyBEb3VibGUoTWF0aC5sb2coZGlzcGxheVZhbHVlWCkpOworCQkJCQkJCXZhbHVlWSA9IG5ldyBEb3VibGUoTWF0aC5sb2coZGlzcGxheVZhbHVlWSkpOworCQkJCQl9CisJCQkJCXRoaXMucmVsYXRpdmVWYWx1ZXNYLmFkZCh2YWx1ZVgpOworCQkJCQl0aGlzLnJlbGF0aXZlVmFsdWVzWS5hZGQodmFsdWVZKTsKKwkJCQl9IC8vIGZvcgorCQkJfSAvLyBpZgorCQkJZWxzZSB7CisJCQkJcmVzZXREYXRhKCk7CisJCQl9CisJCQlpZiAoIXRoaXMuaXNEaXNwb3NlZCgpKSByZWRyYXcoKTsKKwkJfSAvLyBpZiBhIHJlbGF0aXZlIHZhbHVlIHByb3ZpZGVyIGhhcyBiZWVuIHByb3ZpZGVkCisKKwl9IC8vIHBhaW50Q29udHJvbAorCQorCS8qKgorCSAqIENyZWF0ZSB0aGUgdmlldydzIGNvbnRleHQgbWVudSBhbmQgYWRkIHRoZSBhY3Rpb24gaGFuZGxlcnMgdG8gaXQuCisJICovCisJcHJpdmF0ZSB2b2lkIGNyZWF0ZUNvbnRleHRNZW51KGZpbmFsIENvbXBvc2l0ZSBwYXJlbnQpIHsKKworCQkvLyBDb250ZXh0IE1lbnUKKwkJZmluYWwgTWVudU1hbmFnZXIgY29udGV4dE1lbnVNYW5hZ2VyID0gbmV3IE1lbnVNYW5hZ2VyKCk7CisKKwkJLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKwkJbGluZWFyU2NhbGVzQWN0aW9uID0gbmV3IExpbmVhclNjYWxlc0FjdGlvbigpOworCQlsb2dUaW1lU2NhbGVzQWN0aW9uID0gbmV3IExvZ2FyaXRobWljU2NhbGVzQWN0aW9uKCk7CisJCWNvbnRleHRNZW51TWFuYWdlci5hZGQobGluZWFyU2NhbGVzQWN0aW9uKTsKKwkJY29udGV4dE1lbnVNYW5hZ2VyLmFkZChsb2dUaW1lU2NhbGVzQWN0aW9uKTsKKwkJCisKKwkJLy8gUGxhY2UgSG9sZGVyIGZvciBNZW51IEFkZGl0aW9ucworCQljb250ZXh0TWVudU1hbmFnZXIuYWRkKG5ldyBTZXBhcmF0b3IoCisJCQkJSVdvcmtiZW5jaEFjdGlvbkNvbnN0YW50cy5NQl9BRERJVElPTlMpKTsKKworCQkvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworCQlmaW5hbCBNZW51IHBvcFVwTWVudSA9IGNvbnRleHRNZW51TWFuYWdlci5jcmVhdGVDb250ZXh0TWVudShwYXJlbnQpOworCisJCS8vIFNldCB0aGUgY29udGV4dCBtZW51IGZvciB0aGUgdmlld2VyCisJCXBhcmVudC5zZXRNZW51KHBvcFVwTWVudSk7CisKKwl9IC8vIGNyZWF0ZUNvbnRleHRNZW51CisKKwkvKioKKwkgKiBAcGFyYW0gcmVsYXRpdmVWYWx1ZXNYCisJICogICAgICAgICAgICB0aGUgPGNvZGU+TGlzdDwvY29kZT4gdGhhdCB3aWxsIGNvbnRhaW4gdGhlIHJlbGF0aXZlIFggYXhpcworCSAqICAgICAgICAgICAgdmFsdWVzICgwLjAtMS4wKSB0byBwbG90CisJICogQHBhcmFtIHJlbGF0aXZlVmFsdWVzWQorCSAqICAgICAgICAgICAgdGhhdCB3aWxsIGNvbnRhaW4gdGhlIHJlbGF0aXZlIFkgYXhpcyB2YWx1ZXMgKDAuMC0xLjApIHRvIHBsb3QKKwkgKiBAcGFyYW0gc2VyaWVzSWRlbnRpZmllcgorCSAqICAgICAgICAgICAgdGhlIHRpdGxlIG9mIHRoZSBncmFwaAorCSAqIEByZXR1cm4gYSA8Y29kZT5DaGFydDwvY29kZT4KKwkgKi8KKwlAU3VwcHJlc3NXYXJuaW5ncygiZGVwcmVjYXRpb24iKQorCXB1YmxpYyBmaW5hbCBDaGFydCBjcmVhdGVQaGFzZVNwYWNlTGluZUNoYXJ0KAorCQkJZmluYWwgTGlzdDxEb3VibGU+IHJlbGF0aXZlVmFsdWVzWCwKKwkJCWZpbmFsIExpc3Q8RG91YmxlPiByZWxhdGl2ZVZhbHVlc1ksIGZpbmFsIFN0cmluZyBzZXJpZXNJZGVudGlmaWVyKSB7CisJCWZpbmFsIENoYXJ0V2l0aEF4ZXMgcmV0VmFsdWUgPSBDaGFydFdpdGhBeGVzSW1wbC5jcmVhdGUoKTsKKworICAgICAgICAvLyBnZXQgdGhlIE5MUyBkZWZhdWx0IGxhYmVscworCQlkZWZhdWx0QXhpc0xhYmVsX1ggPSBNZXNzYWdlcy5nZXRTdHJpbmcoIlhBWElTREVGLnRpdGxlIik7CisJCWRlZmF1bHRBeGlzTGFiZWxfWSA9IE1lc3NhZ2VzLmdldFN0cmluZygiWUFYSVNERUYudGl0bGUiKTsKKwkJLy8gUGxvdAorCQlyZXRWYWx1ZS5nZXRCbG9jaygpLnNldEJhY2tncm91bmQoQ29sb3JEZWZpbml0aW9uSW1wbC5XSElURSgpKTsKKwkJZmluYWwgUGxvdCBwID0gcmV0VmFsdWUuZ2V0UGxvdCgpOworCQlwLmdldENsaWVudEFyZWEoKS5zZXRCYWNrZ3JvdW5kKAorCQkJCUNvbG9yRGVmaW5pdGlvbkltcGwuY3JlYXRlKDI1NSwgMjU1LCAyMjUpKTsKKworCQkvLyBUaXRsZQorCQkvLyBjd2FMaW5lLmdldFRpdGxlKCApLmdldExhYmVsKCApLmdldENhcHRpb24oICkuc2V0VmFsdWUoICJMaW5lIENoYXJ0IgorCQkvLyApOy8vJE5PTi1OTFMtMSQKKwkJcmV0VmFsdWUuZ2V0VGl0bGUoKS5zZXRWaXNpYmxlKGZhbHNlKTsKKworCQkvLyBMZWdlbmQKKwkJZmluYWwgTGVnZW5kIGxnID0gcmV0VmFsdWUuZ2V0TGVnZW5kKCk7CisJCWxnLnNldFZpc2libGUoZmFsc2UpOworCQkvKgorCQlmaW5hbCBMaW5lQXR0cmlidXRlcyBsaWEgPSBsZy5nZXRPdXRsaW5lKCk7CisJCWxnLmdldFRleHQoKS5nZXRGb250KCkuc2V0U2l6ZSg4KTsKKwkJbGlhLnNldFN0eWxlKExpbmVTdHlsZS5TT0xJRF9MSVRFUkFMKTsKKwkJbGcuZ2V0SW5zZXRzKCkuc2V0KDEwLCA1LCAwLCAwKTsKKwkJbGcuZ2V0T3V0bGluZSgpLnNldFZpc2libGUoZmFsc2UpOworCQlsZy5zZXRBbmNob3IoQW5jaG9yLk5PUlRIX0xJVEVSQUwpOworCQlsZy5zZXRQb3NpdGlvbihQb3NpdGlvbi5CRUxPV19MSVRFUkFMKTsKKwkJKi8KKwkJLy8gY3dhTGluZS5nZXRMZWdlbmQoICkuZ2V0VGV4dCgpLmdldEZvbnQoKS5zZXRTaXplKDE2KTs7CisJCS8vIGN3YUxpbmUuZ2V0TGVnZW5kKCApLnNldFZpc2libGUoIHRydWUgKTsKKworCQkvLyBYLUF4aXMKKwkJeEF4aXNQcmltYXJ5ID0gcmV0VmFsdWUuZ2V0UHJpbWFyeUJhc2VBeGVzKClbMF07CisJCXhBeGlzUHJpbWFyeS5zZXRUeXBlKEF4aXNUeXBlLkxJTkVBUl9MSVRFUkFMKTsKKwkJLy8gWS1BeGlzCisJCXlBeGlzUHJpbWFyeSA9IHJldFZhbHVlLmdldFByaW1hcnlPcnRob2dvbmFsQXhpcyh4QXhpc1ByaW1hcnkpOworCisJCS8vIHhBeGlzUHJpbWFyeS5zZXRUeXBlKEF4aXNUeXBlLlRFWFRfTElURVJBTCk7CisKKwkJeEF4aXNQcmltYXJ5LmdldE1ham9yR3JpZCgpLnNldFRpY2tTdHlsZShUaWNrU3R5bGUuQkVMT1dfTElURVJBTCk7CisJCXlBeGlzUHJpbWFyeS5nZXRNYWpvckdyaWQoKS5zZXRUaWNrU3R5bGUoVGlja1N0eWxlLkxFRlRfTElURVJBTCk7CisKKwkJeEF4aXNQcmltYXJ5LmdldE9yaWdpbigpLnNldFR5cGUoSW50ZXJzZWN0aW9uVHlwZS5WQUxVRV9MSVRFUkFMKTsKKworCisJCXhBeGlzUHJpbWFyeS5nZXRUaXRsZSggKS5nZXRDYXB0aW9uKCApLmdldEZvbnQoICkuc2V0U2l6ZSggOCApOworCQl4QXhpc0xhYmVsID0gZGVmYXVsdEF4aXNMYWJlbF9YOworCQlpZiAocHJvcGVydHlUb1Bsb3RYIT0gbnVsbCkgeworCQkJeEF4aXNMYWJlbCA9IHRoaXMucHJvcGVydHlUb1Bsb3RYLmdldERpc3BsYXlOYW1lKHByb3BlcnR5VG9QbG90WCk7CisJCX0KKwkJeEF4aXNQcmltYXJ5LmdldFRpdGxlKCApLmdldENhcHRpb24oICkuc2V0VmFsdWUoIHhBeGlzTGFiZWwgKTsKKwkJeEF4aXNQcmltYXJ5LmdldFRpdGxlKCApLnNldFZpc2libGUodHJ1ZSk7CisJCQorCisJCXlBeGlzUHJpbWFyeS5nZXRUaXRsZSggKS5nZXRDYXB0aW9uKCApLmdldEZvbnQoICkuc2V0U2l6ZSggOCApOworCQl5QXhpc0xhYmVsID0gZGVmYXVsdEF4aXNMYWJlbF9ZOworCQlpZiAocHJvcGVydHlUb1Bsb3RZIT0gbnVsbCkgeworCQkJeUF4aXNMYWJlbCA9IHRoaXMucHJvcGVydHlUb1Bsb3RZLmdldERpc3BsYXlOYW1lKHByb3BlcnR5VG9QbG90WSk7CisJCX0KKwkJeUF4aXNQcmltYXJ5LmdldFRpdGxlKCApLmdldENhcHRpb24oICkuc2V0VmFsdWUoIHlBeGlzTGFiZWwgKTsKKwkJeUF4aXNQcmltYXJ5LmdldFRpdGxlKCApLnNldFZpc2libGUodHJ1ZSk7CisKKwkJZmluYWwgTnVtYmVyRGF0YVNldCBvcnRob1ZhbHVlc1ggPSBOdW1iZXJEYXRhU2V0SW1wbAorCQkJCS5jcmVhdGUocmVsYXRpdmVWYWx1ZXNYKTsKKwkJZmluYWwgTnVtYmVyRGF0YVNldCBvcnRob1ZhbHVlc1kgPSBOdW1iZXJEYXRhU2V0SW1wbAorCQkJCS5jcmVhdGUocmVsYXRpdmVWYWx1ZXNZKTsKKworCQkvLyBYLVNlcmllcworCQlmaW5hbCBTZXJpZXMgbHN4ID0gU2VyaWVzSW1wbC5jcmVhdGUoKTsKKwkJLy8gZmluYWwgTGluZVNlcmllcyBsc3ggPSAoU2NhdHRlclNlcmllcykgU2NhdHRlclNlcmllc0ltcGwuY3JlYXRlKCk7CisJCS8vIHNlQ2F0ZWdvcnkuc2V0RGF0YVNldChvcnRob1ZhbHVlc1gpOworCQlsc3guc2V0RGF0YVNldChvcnRob1ZhbHVlc1gpOworCisJCS8vIFktU2VyaWVzCisJCWZpbmFsIFNjYXR0ZXJTZXJpZXMgbHN5ID0gKFNjYXR0ZXJTZXJpZXMpIFNjYXR0ZXJTZXJpZXNJbXBsLmNyZWF0ZSgpOworCQlsc3kuc2V0RGF0YVNldChvcnRob1ZhbHVlc1kpOworCQlsc3kuZ2V0TGluZUF0dHJpYnV0ZXMoKS5zZXRWaXNpYmxlKHRydWUpOworCQlsc3kuZ2V0TGluZUF0dHJpYnV0ZXMoKS5zZXRDb2xvcihDb2xvckRlZmluaXRpb25JbXBsLkJMVUUoKSk7CisJCWxzeS5zZXRTZXJpZXNJZGVudGlmaWVyKHNlcmllc0lkZW50aWZpZXIpOworCQkKKwkJLy9sc3kuZ2V0TWFya2VyKCkuc2V0VmlzaWJsZShmYWxzZSk7CisJCS8vIHJlcGxhY2VzIGRlcHJlY2F0ZWQgY29kZTogbGluZVNlcmllcy5nZXRNYXJrZXIoKS5zZXRWaXNpYmxlKGZhbHNlKTsKKwkJaWYgKCFsc3kuZ2V0TWFya2VycygpLmlzRW1wdHkoKSkgeworCQkJTWFya2VyIG1hcmtlciA9IGxzeS5nZXRNYXJrZXJzKCkuZ2V0KDApOworCQkJbWFya2VyLnNldFZpc2libGUoZmFsc2UpOworCQl9CisJCQorCQlmaW5hbCBTZXJpZXNEZWZpbml0aW9uIHNkWCA9IFNlcmllc0RlZmluaXRpb25JbXBsLmNyZWF0ZSgpOworCQlmaW5hbCBTZXJpZXNEZWZpbml0aW9uIHNkWSA9IFNlcmllc0RlZmluaXRpb25JbXBsLmNyZWF0ZSgpOworCisJCXNkWS5nZXRTZXJpZXNQYWxldHRlKCkudXBkYXRlKC0yKTsKKworCQl4QXhpc1ByaW1hcnkuZ2V0U2VyaWVzRGVmaW5pdGlvbnMoKS5hZGQoc2RYKTsKKwkJeUF4aXNQcmltYXJ5LmdldFNlcmllc0RlZmluaXRpb25zKCkuYWRkKHNkWSk7CisKKwkJLy8gc2RYLmdldFNlcmllcygpLmFkZChzZUNhdGVnb3J5KTsKKwkJc2RYLmdldFNlcmllcygpLmFkZChsc3gpOworCQlzZFkuZ2V0U2VyaWVzKCkuYWRkKGxzeSk7CisKKwkJeEF4aXNQcmltYXJ5LmdldFNjYWxlKCkuc2V0TWluKE51bWJlckRhdGFFbGVtZW50SW1wbC5jcmVhdGUoMC4wKSk7CisJCXhBeGlzUHJpbWFyeS5nZXRTY2FsZSgpLnNldE1heChOdW1iZXJEYXRhRWxlbWVudEltcGwuY3JlYXRlKDEuMCkpOworCQl4QXhpc1ByaW1hcnkuZ2V0U2NhbGUoKS5zZXRTdGVwKDAuMjUpOworCQl4QXhpc1ByaW1hcnkuZ2V0TGFiZWwoKS5nZXRDYXB0aW9uKCkuZ2V0Rm9udCgpLnNldFNpemUoOSk7CisKKwkJeUF4aXNQcmltYXJ5LmdldFNjYWxlKCkuc2V0TWluKE51bWJlckRhdGFFbGVtZW50SW1wbC5jcmVhdGUoMC4wKSk7CisJCXlBeGlzUHJpbWFyeS5nZXRTY2FsZSgpLnNldE1heChOdW1iZXJEYXRhRWxlbWVudEltcGwuY3JlYXRlKDEuMCkpOworCQl5QXhpc1ByaW1hcnkuZ2V0U2NhbGUoKS5zZXRTdGVwKDAuMjUpOworCQl5QXhpc1ByaW1hcnkuZ2V0TGFiZWwoKS5nZXRDYXB0aW9uKCkuZ2V0Rm9udCgpLnNldFNpemUoOSk7CisKKwkJcmV0dXJuIHJldFZhbHVlOworCX0gLy8gY3JlYXRlUGhhc2VTcGFjZUxpbmVDaGFydAorCisJLyoqCisJICogQHBhcmFtIHJ2aHAKKwkgKiBAcGFyYW0gcHJvcGVydHlUb1Bsb3RYCisJICogQHBhcmFtIHByb3BlcnR5VG9QbG90WQorCSAqLworCXB1YmxpYyB2b2lkIHNldERhdGFTb3VyY2VBbmRSZWRyYXcoCisJCQlmaW5hbCBSZWxhdGl2ZVZhbHVlSGlzdG9yeVByb3ZpZGVyQWRhcHRlciBydmhwLAorCQkJZmluYWwgSXRlbVByb3BlcnR5RGVzY3JpcHRvciBwcm9wZXJ0eVRvUGxvdFgsCisJCQlmaW5hbCBJdGVtUHJvcGVydHlEZXNjcmlwdG9yIHByb3BlcnR5VG9QbG90WSkgeworCQl0aGlzLnJ2aHAgPSBydmhwOworCQl0aGlzLnByb3BlcnR5VG9QbG90WCA9IHByb3BlcnR5VG9QbG90WDsKKwkJdGhpcy5wcm9wZXJ0eVRvUGxvdFkgPSBwcm9wZXJ0eVRvUGxvdFk7CisJCQorCQl4QXhpc0xhYmVsID0gZGVmYXVsdEF4aXNMYWJlbF9YOworCQlpZiAocHJvcGVydHlUb1Bsb3RYIT0gbnVsbCkgeworCQkJeEF4aXNMYWJlbCA9IHRoaXMucHJvcGVydHlUb1Bsb3RYLmdldERpc3BsYXlOYW1lKHByb3BlcnR5VG9QbG90WCk7CisJCQlpZighdXNlTGluZWFyU2NhbGVzKSB4QXhpc0xhYmVsID0gIkxvZygiK3hBeGlzTGFiZWwrIikiOworCQl9CisJCXhBeGlzUHJpbWFyeS5nZXRUaXRsZSggKS5nZXRDYXB0aW9uKCApLnNldFZhbHVlKCB4QXhpc0xhYmVsICk7CisJCXhBeGlzUHJpbWFyeS5nZXRUaXRsZSggKS5zZXRWaXNpYmxlKHRydWUpOworCQkJCisJCXlBeGlzUHJpbWFyeS5nZXRUaXRsZSggKS5nZXRDYXB0aW9uKCApLmdldEZvbnQoICkuc2V0U2l6ZSggOCApOworCQl5QXhpc0xhYmVsID0gZGVmYXVsdEF4aXNMYWJlbF9ZOworCQlpZiAocHJvcGVydHlUb1Bsb3RZIT0gbnVsbCkgeworCQkJeUF4aXNMYWJlbCA9IHRoaXMucHJvcGVydHlUb1Bsb3RZLmdldERpc3BsYXlOYW1lKHByb3BlcnR5VG9QbG90WSk7CisJCQlpZighdXNlTGluZWFyU2NhbGVzKSB5QXhpc0xhYmVsID0gIkxvZygiK3lBeGlzTGFiZWwrIikiOworCQl9CisJCXlBeGlzUHJpbWFyeS5nZXRUaXRsZSggKS5nZXRDYXB0aW9uKCApLnNldFZhbHVlKCB5QXhpc0xhYmVsICk7CisJCXlBeGlzUHJpbWFyeS5nZXRUaXRsZSggKS5zZXRWaXNpYmxlKHRydWUpOworCQkKKwkJZHJhdygpOworCX0gLy8gc2V0RGF0YVNvdXJjZUFuZFJlZHJhdworCisJLyoqCisJICogU2V0IHRoZSBwcm92aWRlciBvZiByZWxhdGl2ZSB2YWx1ZXMuIEl0IHdpbGwgYmUgY29uc3VsdGVkIHRvIHByb2R1Y2UgYQorCSAqIHNlcXVlbmNlIG9mIHJlbGF0aXZlIHZhbHVlcyAoMC4wIHRvIDEuMCkgdGhhdCB3aWxsIGJlIHBsb3R0ZWQuCisJICogCisJICogQHBhcmFtIHJ2aHAKKwkgKiAgICAgICAgICAgIHRoZSBwcm92aWRlciBvZiByZWxhdGl2ZSB2YWx1ZXMuCisJICovCisJcHVibGljIHZvaWQgc2V0UmVsYXRpdmVWYWx1ZUhpc3RvcnlQcm92aWRlcigKKwkJCWZpbmFsIFJlbGF0aXZlVmFsdWVIaXN0b3J5UHJvdmlkZXIgcnZocCkgeworCQl0aGlzLnJ2aHAgPSBydmhwOworCX0gLy8gc2V0UmVsYXRpdmVWYWx1ZUhpc3RvcnlQcm92aWRlcgorCisJLyoqCisJICogQHJldHVybiB0aGUgcHJvcGVydHlUb1Bsb3RYCisJICovCisJcHVibGljIGZpbmFsIEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IgZ2V0UHJvcGVydHlUb1Bsb3RYKCkgeworCQlyZXR1cm4gcHJvcGVydHlUb1Bsb3RYOworCX0KKworCS8qKgorCSAqIEByZXR1cm4gdGhlIHByb3BlcnR5VG9QbG90WQorCSAqLworCXB1YmxpYyBmaW5hbCBJdGVtUHJvcGVydHlEZXNjcmlwdG9yIGdldFByb3BlcnR5VG9QbG90WSgpIHsKKwkJcmV0dXJuIHByb3BlcnR5VG9QbG90WTsKKwl9CisKKwkvKioKKwkgKiBAcGFyYW0gcHJvcGVydHlUb1Bsb3RYCisJICogICAgICAgICAgICB0aGUgcHJvcGVydHlUb1Bsb3RYIHRvIHNldAorCSAqLworCXB1YmxpYyBmaW5hbCB2b2lkIHNldFByb3BlcnR5VG9QbG90WCgKKwkJCWZpbmFsIEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IgcHJvcGVydHlUb1Bsb3RYKSB7CisJCXRoaXMucHJvcGVydHlUb1Bsb3RYID0gcHJvcGVydHlUb1Bsb3RYOworCX0KKworCS8qKgorCSAqIEBwYXJhbSBwcm9wZXJ0eVRvUGxvdFkKKwkgKiAgICAgICAgICAgIHRoZSBwcm9wZXJ0eVRvUGxvdFkgdG8gc2V0CisJICovCisJcHVibGljIGZpbmFsIHZvaWQgc2V0UHJvcGVydHlUb1Bsb3RZKAorCQkJZmluYWwgSXRlbVByb3BlcnR5RGVzY3JpcHRvciBwcm9wZXJ0eVRvUGxvdFkpIHsKKwkJdGhpcy5wcm9wZXJ0eVRvUGxvdFkgPSBwcm9wZXJ0eVRvUGxvdFk7CisJfQorCisJLyoqCisJICogRGlzcG9zZXMgdGhlIENvbG9yIG9iamVjdHMKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBkaXNwb3NlKCkgeworCQlzdXBlci5kaXNwb3NlKCk7CisJfQorCisJLyoqCisJICogcmVzZXQKKwkgKi8KKwlwdWJsaWMgdm9pZCByZXNldCgpIHsKKwkJcmVzZXREYXRhKCk7CisJCXJ2aHAgPSBudWxsOworCQlyZWRyYXcoKTsKKwl9CisKKwlwcm90ZWN0ZWQgdm9pZCByZXNldERhdGEoKSB7CisJCWNsZWFyRGF0YSgpOworCQlyZWxhdGl2ZVZhbHVlc1guYWRkKG5ldyBEb3VibGUoMS4wKSk7CisJCXJlbGF0aXZlVmFsdWVzWS5hZGQobmV3IERvdWJsZSgwLjApKTsKKwl9CisKKwlwcml2YXRlIHZvaWQgY2xlYXJEYXRhKCkgeworCQlyZWxhdGl2ZVZhbHVlc1guY2xlYXIoKTsKKwkJcmVsYXRpdmVWYWx1ZXNZLmNsZWFyKCk7CisJfQorCQorCXZvaWQgdG9nZ2xlU2NhbGVzKCkgeworCQlpZiAodXNlTGluZWFyU2NhbGVzKSB7IC8vU3dpdGNoIHRvIGxvZ2FyaXRobWljIHNjYWxlCisJCQlsb2dUaW1lU2NhbGVzQWN0aW9uLnNldENoZWNrZWQodHJ1ZSk7CisJCQlsaW5lYXJTY2FsZXNBY3Rpb24uc2V0Q2hlY2tlZChmYWxzZSk7CisJCQkKKwkJCXhBeGlzUHJpbWFyeS5nZXRTY2FsZSgpLnNldE1pbihudWxsKTsKKwkJCXhBeGlzUHJpbWFyeS5nZXRTY2FsZSgpLnNldE1heChudWxsKTsKKwkJCXhBeGlzUHJpbWFyeS5nZXRTY2FsZSgpLnVuc2V0U3RlcCgpOworCQkJeEF4aXNQcmltYXJ5LmdldFNjYWxlKCkudW5zZXRTdGVwTnVtYmVyKCk7CQkJCisJCQl4QXhpc1ByaW1hcnkuZ2V0VGl0bGUoKS5nZXRDYXB0aW9uKCkuc2V0VmFsdWUoIkxvZygiICsgeEF4aXNMYWJlbCArICIpIik7CQkJCisJCQkKKwkJCXlBeGlzUHJpbWFyeS5nZXRTY2FsZSgpLnNldE1pbihudWxsKTsKKwkJCXlBeGlzUHJpbWFyeS5nZXRTY2FsZSgpLnNldE1heChudWxsKTsKKwkJCXlBeGlzUHJpbWFyeS5nZXRTY2FsZSgpLnVuc2V0U3RlcCgpOworCQkJeUF4aXNQcmltYXJ5LmdldFNjYWxlKCkudW5zZXRTdGVwTnVtYmVyKCk7CisJCQl5QXhpc1ByaW1hcnkuZ2V0VGl0bGUoKS5nZXRDYXB0aW9uKCkuc2V0VmFsdWUoIkxvZygiICsgeUF4aXNMYWJlbCArICIpIik7CisJCX0KKwkJZWxzZSB7IC8vU3dpdGNoIHRvIGxpbmVhciBzY2FsZQkJCQorCQkJbG9nVGltZVNjYWxlc0FjdGlvbi5zZXRDaGVja2VkKGZhbHNlKTsKKwkJCWxpbmVhclNjYWxlc0FjdGlvbi5zZXRDaGVja2VkKHRydWUpOworCQkJCisJCQl4QXhpc1ByaW1hcnkuZ2V0U2NhbGUoKS5zZXRNaW4oTnVtYmVyRGF0YUVsZW1lbnRJbXBsLmNyZWF0ZSgwLjApKTsKKwkJCXhBeGlzUHJpbWFyeS5nZXRTY2FsZSgpLnNldE1heChOdW1iZXJEYXRhRWxlbWVudEltcGwuY3JlYXRlKDEuMCkpOworCQkJeEF4aXNQcmltYXJ5LmdldFNjYWxlKCkuc2V0U3RlcCgwLjI1KTsKKwkJCXhBeGlzUHJpbWFyeS5nZXRUaXRsZSgpLmdldENhcHRpb24oKS5zZXRWYWx1ZSh4QXhpc0xhYmVsKTsKKworCQkJeUF4aXNQcmltYXJ5LmdldFNjYWxlKCkuc2V0TWluKE51bWJlckRhdGFFbGVtZW50SW1wbC5jcmVhdGUoMC4wKSk7CisJCQl5QXhpc1ByaW1hcnkuZ2V0U2NhbGUoKS5zZXRNYXgoTnVtYmVyRGF0YUVsZW1lbnRJbXBsLmNyZWF0ZSgxLjApKTsKKwkJCXlBeGlzUHJpbWFyeS5nZXRTY2FsZSgpLnNldFN0ZXAoMC4yNSk7CisJCQl5QXhpc1ByaW1hcnkuZ2V0VGl0bGUoKS5nZXRDYXB0aW9uKCkuc2V0VmFsdWUoeUF4aXNMYWJlbCk7CQkJCisJCX0JCQorCQl1c2VMaW5lYXJTY2FsZXMgPSAhdXNlTGluZWFyU2NhbGVzOworCQlyZWRyYXcoKTsKKwl9CisJCisJcHJvdGVjdGVkIGNsYXNzIExpbmVhclNjYWxlc0FjdGlvbiBleHRlbmRzIEFjdGlvbgorCXsKKwkJcHVibGljIExpbmVhclNjYWxlc0FjdGlvbigpCisJCXsKKwkJCXN1cGVyKE1lc3NhZ2VzLmdldFN0cmluZygiQ29udGV4dE1lbnUuTGluZWFyU2NhbGluZyIpLCBJQWN0aW9uLkFTX0NIRUNLX0JPWCk7CisJCQlzZXRDaGVja2VkKHVzZUxpbmVhclNjYWxlcyk7CisJCX0KKwkJCisJCS8qKgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5BY3Rpb24jZ2V0VGV4dCgpCisJCSAqLworCQlAT3ZlcnJpZGUKKwkJcHVibGljIFN0cmluZyBnZXRUZXh0KCkgewkJCQorCQkJcmV0dXJuIE1lc3NhZ2VzLmdldFN0cmluZygiQ29udGV4dE1lbnUuTGluZWFyU2NhbGluZyIpOworCQl9CisJCQorCQkvKioKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uQWN0aW9uI3J1bigpCisJCSAqLworCQlAT3ZlcnJpZGUKKwkJcHVibGljIHZvaWQgcnVuKCkgeworCQkJaWYgKHVzZUxpbmVhclNjYWxlcykgeworCQkJCXNldENoZWNrZWQodHJ1ZSk7CisJCQkJLy9Ob3RoaW5nIHRvIGRvLiBJdCdzIGFscmVhZHkgbGluZWFyLXRpbWUuCisJCQl9CisJCQllbHNlIHsKKwkJCQl0b2dnbGVTY2FsZXMoKTsKKwkJCX0KKwkJfQorCX0KKwkKKwljbGFzcyBMb2dhcml0aG1pY1NjYWxlc0FjdGlvbiBleHRlbmRzIEFjdGlvbgorCXsKKwkJcHVibGljIExvZ2FyaXRobWljU2NhbGVzQWN0aW9uKCkKKwkJeworCQkJc3VwZXIoTWVzc2FnZXMuZ2V0U3RyaW5nKCJDb250ZXh0TWVudS5Mb2dTY2FsaW5nIiksIElBY3Rpb24uQVNfQ0hFQ0tfQk9YKTsKKwkJCXNldENoZWNrZWQoIXVzZUxpbmVhclNjYWxlcyk7CisJCX0KKwkJCisJCS8qKgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5BY3Rpb24jZ2V0VGV4dCgpCisJCSAqLworCQlAT3ZlcnJpZGUKKwkJcHVibGljIFN0cmluZyBnZXRUZXh0KCkgewkJCQorCQkJcmV0dXJuIE1lc3NhZ2VzLmdldFN0cmluZygiQ29udGV4dE1lbnUuTG9nU2NhbGluZyIpOworCQl9CisJCQorCQkvKioKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uQWN0aW9uI3J1bigpCisJCSAqLworCQlAT3ZlcnJpZGUKKwkJcHVibGljIHZvaWQgcnVuKCkgeworCQkJaWYgKCF1c2VMaW5lYXJTY2FsZXMpIHsKKwkJCQlzZXRDaGVja2VkKHRydWUpOworCQkJCS8vTm90aGluZyB0byBkby4gSXQncyBhbHJlYWR5IGxvZy10aW1lLgorCQkJfQorCQkJZWxzZSB7CisJCQkJdG9nZ2xlU2NhbGVzKCk7CisJCQl9CisJCX0KKwl9Cit9IC8vIFBoYXNlU3BhY2VDYW52YXMKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5yZXBvcnRzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3JlcG9ydHMvdmlld3MvUGhhc2VTcGFjZUZhY3RvcnkuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5yZXBvcnRzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3JlcG9ydHMvdmlld3MvUGhhc2VTcGFjZUZhY3RvcnkuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNzU0YzhjCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLnJlcG9ydHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvcmVwb3J0cy92aWV3cy9QaGFzZVNwYWNlRmFjdG9yeS5qYXZhCkBAIC0wLDAgKzEsNTUgQEAKKy8vIFBoYXNlU3BhY2VGYWN0b3J5LmphdmEKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS51aS5yZXBvcnRzLnZpZXdzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZTsKKworLyoqCisgKiBUaGlzIGNsYXNzIGlzIGEgZmFjdG9yeSBmb3IgY3JlYXRpbmcge0BsaW5rIFJlcG9ydENvbnRyb2x9IGluc3RhbmNlcy4KKyAqLworcHVibGljIGNsYXNzIFBoYXNlU3BhY2VGYWN0b3J5IGltcGxlbWVudHMgUmVwb3J0Q29udHJvbEZhY3RvcnkgeworCisJc3RhdGljIFBoYXNlU3BhY2VGYWN0b3J5IElOU1RBTkNFID0gbmV3IFBoYXNlU3BhY2VGYWN0b3J5KCk7CisKKwkvKioKKwkgKiBDb25zdGFudHMgZm9yIHNhdmluZyBSZXBvcnRWaWV3UHJlZmVyZW5jZXMKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBQSEFTRV9TUEFDRV9UWVBFID0gIlBoYXNlU3BhY2UiOworCisJLyoqCisJICogQHBhcmFtIHBhcmVudAorCSAqICAgICAgICAgICAgdGhlIHBhcmVudCBvZiB0aGUge0BsaW5rIFBoYXNlU3BhY2VIaXN0b3J5UGxvdHRlcn0KKwkgKiBAcmV0dXJuIGEge0BsaW5rIFBoYXNlU3BhY2VIaXN0b3J5UGxvdHRlcn0KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0udWkudmlld3MuZ2VvZ3JhcGhpYy5HZW9ncmFwaGljQ29udHJvbEZhY3RvcnkjY3JlYXRlKG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZSkKKwkgKi8KKwlwdWJsaWMgUmVwb3J0Q29udHJvbCBjcmVhdGUoZmluYWwgQ29tcG9zaXRlIHBhcmVudCkgeworCQlyZXR1cm4gbmV3IFBoYXNlU3BhY2VIaXN0b3J5UGxvdHRlcihwYXJlbnQpOworCX0KKworCS8qKgorCSAqIEByZXR1cm4gVE9ETyBKRksKKwkgKiAKKwkgKi8KKwlwdWJsaWMgU3RyaW5nIGdldFVuaXF1ZUNvbnRyb2xOYW1lKCkgeworCQlyZXR1cm4gUEhBU0VfU1BBQ0VfVFlQRTsKKwl9CisJCisJLyoqCisJICogVGhpcyBGYWN0b3J5IGNyZWF0ZXMgYSBjb250cm9sIGFzc29jaWF0ZWQgd2l0aCBhbiBJZGVuZmlhYmxlCisJICogQHJldHVybiB0eXBlIG9mIGZhY3RvcnkKKwkgKi8KKwlwdWJsaWMgU3RyaW5nIGdldEZhY3RvcnlUeXBlKCkgeworCQlyZXR1cm4gSURFTlRJRkFCTEVfVFlQRTsKKwl9CisKK30gLy8gUGhhc2VTcGFjZUZhY3RvcnkKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5yZXBvcnRzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3JlcG9ydHMvdmlld3MvUGhhc2VTcGFjZUhpc3RvcnlQbG90dGVyLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkucmVwb3J0cy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9yZXBvcnRzL3ZpZXdzL1BoYXNlU3BhY2VIaXN0b3J5UGxvdHRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMwNmU0MTYKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkucmVwb3J0cy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9yZXBvcnRzL3ZpZXdzL1BoYXNlU3BhY2VIaXN0b3J5UGxvdHRlci5qYXZhCkBAIC0wLDAgKzEsNDQyIEBACisvLyBSZWxhdGl2ZVZhbHVlSGlzdG9yeVBsb3R0ZXIuamF2YQorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnVpLnJlcG9ydHMudmlld3M7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbnM7CitpbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUHJlZmVyZW5jZXM7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSXRlbVByb3BlcnR5RGVzY3JpcHRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLklkZW50aWZpYWJsZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguRHluYW1pY0xhYmVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5EeW5hbWljTm9kZUxhYmVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5Ob2RlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5Ob2RlTGFiZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLkRlY29yYXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmFkYXB0ZXJzLnJlbGF0aXZldmFsdWUuaGlzdG9yeS5SZWxhdGl2ZVZhbHVlSGlzdG9yeUV4dGVuZGVkTGlzdGVuZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5hZGFwdGVycy5yZWxhdGl2ZXZhbHVlLmhpc3RvcnkuUmVsYXRpdmVWYWx1ZUhpc3RvcnlQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmFkYXB0ZXJzLnJlbGF0aXZldmFsdWUuaGlzdG9yeS5SZWxhdGl2ZVZhbHVlSGlzdG9yeVByb3ZpZGVyQWRhcHRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmFkYXB0ZXJzLnJlbGF0aXZldmFsdWUuaGlzdG9yeS5SZWxhdGl2ZVZhbHVlSGlzdG9yeVByb3ZpZGVyQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLkRpc2Vhc2VNb2RlbExhYmVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uam9icy5zaW11bGF0aW9uLklTaW11bGF0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uam9icy5zaW11bGF0aW9uLklTaW11bGF0aW9uTGlzdGVuZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5qb2JzLnNpbXVsYXRpb24uU2ltdWxhdGlvbkV2ZW50OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uam9icy5zaW11bGF0aW9uLlNpbXVsYXRpb25TdGF0ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnVpLnByZWZlcmVuY2VzLlByZWZlcmVuY2VDb25zdGFudHM7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS51aS5yZXBvcnRzLkFjdGl2YXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnVpLndpZGdldHMuUHJvcGVydHlTZWxlY3RvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnVpLndpZGdldHMuUHJvcGVydHlTZWxlY3Rvci5Qcm9wZXJ0eVNlbGVjdGlvbkV2ZW50OworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5TV1Q7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5TZWxlY3Rpb25BZGFwdGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuU2VsZWN0aW9uRXZlbnQ7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5Gb3JtQXR0YWNobWVudDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QubGF5b3V0LkZvcm1EYXRhOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5sYXlvdXQuRm9ybUxheW91dDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5CdXR0b247CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkRpc3BsYXk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuTGFiZWw7CisKKy8qKgorICogVGhpcyBjbGFzcyByZXByZXNlbnRzCisgKi8KK3B1YmxpYyBjbGFzcyBQaGFzZVNwYWNlSGlzdG9yeVBsb3R0ZXIgZXh0ZW5kcyBSZXBvcnRDb250cm9sIGltcGxlbWVudHMKKwkJUmVsYXRpdmVWYWx1ZUhpc3RvcnlFeHRlbmRlZExpc3RlbmVyLCBJU2ltdWxhdGlvbkxpc3RlbmVyIHsKKworCVBoYXNlU3BhY2VDYW52YXMgcGhhc2VTcGFjZUNhbnZhczsKKwlQcm9wZXJ0eVNlbGVjdG9yIHByb3BlcnR5U2VsZWN0b3JYOworCVByb3BlcnR5U2VsZWN0b3IgcHJvcGVydHlTZWxlY3Rvclk7CisKKwlJdGVtUHJvcGVydHlEZXNjcmlwdG9yIHNlbGVjdGVkUHJvcGVydHkxOworCUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3Igc2VsZWN0ZWRQcm9wZXJ0eTI7CisKKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgWF9BWElTX0xBQkVMID0gIlggQXhpcyI7CisKKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgWV9BWElTX0xBQkVMID0gIlkgQXhpcyI7CisJCisJYm9vbGVhbiBwbG90VXBkYXRlU2NoZWR1bGVkID0gZmFsc2U7CisKKwkvKioKKwkgKiBAcGFyYW0gcGFyZW50CisJICovCisJcHVibGljIFBoYXNlU3BhY2VIaXN0b3J5UGxvdHRlcihmaW5hbCBDb21wb3NpdGUgcGFyZW50KSB7CisJCXN1cGVyKHBhcmVudCwgU1dULk5vbmUpOworCQljcmVhdGVDb250ZW50cygpOworCX0gLy8gUmVsYXRpdmVWYWx1ZUhpc3RvcnlQbG90dGVyCisKKwkvKioKKwkgKiBDcmVhdGUgdGhlIGNvbnRlbnRzIG9mIHRoZSBwbG90dGVyCisJICovCisJcHJpdmF0ZSB2b2lkIGNyZWF0ZUNvbnRlbnRzKCkgeworCQlzZXRMYXlvdXQobmV3IEZvcm1MYXlvdXQoKSk7CisKKwkJaWRlbnRpZmlhYmxlVGl0bGUgPSBuZXcgTGFiZWwodGhpcywgU1dULk5PTkUpOworCQlwaGFzZVNwYWNlQ2FudmFzID0gbmV3IFBoYXNlU3BhY2VDYW52YXModGhpcyk7CisJCXByb3BlcnR5U2VsZWN0b3JYID0gbmV3IFByb3BlcnR5U2VsZWN0b3IodGhpcywgU1dULk5PTkUsIHRydWUpOworCQlwcm9wZXJ0eVNlbGVjdG9yWC5zZXREaXNwbGF5TGFiZWwoWF9BWElTX0xBQkVMKTsKKwkJcHJvcGVydHlTZWxlY3RvclkgPSBuZXcgUHJvcGVydHlTZWxlY3Rvcih0aGlzLCBTV1QuTk9ORSwgdHJ1ZSk7CisJCXByb3BlcnR5U2VsZWN0b3JZLnNldERpc3BsYXlMYWJlbChZX0FYSVNfTEFCRUwpOworCisJCXJlbW92ZUJ1dHRvbiA9IG5ldyBCdXR0b24odGhpcywgU1dULk5PTkUpOworCQlyZW1vdmVCdXR0b24uc2V0VGV4dChSRU1PVkVfVEVYVCk7CisKKwkJZmluYWwgRm9ybURhdGEgdGl0bGVGb3JtRGF0YSA9IG5ldyBGb3JtRGF0YSgpOworCQlpZGVudGlmaWFibGVUaXRsZS5zZXRMYXlvdXREYXRhKHRpdGxlRm9ybURhdGEpOworCQl0aXRsZUZvcm1EYXRhLnRvcCA9IG5ldyBGb3JtQXR0YWNobWVudCgwLCAwKTsKKwkJdGl0bGVGb3JtRGF0YS5sZWZ0ID0gbmV3IEZvcm1BdHRhY2htZW50KDAsIDApOworCQl0aXRsZUZvcm1EYXRhLnJpZ2h0ID0gbmV3IEZvcm1BdHRhY2htZW50KDEwMCwgMCk7CisKKwkJZmluYWwgRm9ybURhdGEgY2hhcnRGb3JtRGF0YSA9IG5ldyBGb3JtRGF0YSgpOworCQlwaGFzZVNwYWNlQ2FudmFzLnNldExheW91dERhdGEoY2hhcnRGb3JtRGF0YSk7CisJCWNoYXJ0Rm9ybURhdGEudG9wID0gbmV3IEZvcm1BdHRhY2htZW50KGlkZW50aWZpYWJsZVRpdGxlLCAwKTsKKwkJY2hhcnRGb3JtRGF0YS5ib3R0b20gPSBuZXcgRm9ybUF0dGFjaG1lbnQocHJvcGVydHlTZWxlY3RvclksIDApOworCQljaGFydEZvcm1EYXRhLmxlZnQgPSBuZXcgRm9ybUF0dGFjaG1lbnQoMCwgMCk7CisJCWNoYXJ0Rm9ybURhdGEucmlnaHQgPSBuZXcgRm9ybUF0dGFjaG1lbnQoMTAwLCAwKTsKKworCQkvLyBQcm9wZXJ0eSBTZWxlY3RvcgorCQlmaW5hbCBGb3JtRGF0YSBwcm9wZXJ0eVNlbGVjdG9yRm9ybURhdGFZID0gbmV3IEZvcm1EYXRhKCk7CisJCS8vIHByb3BlcnR5U2VsZWN0b3JGb3JtRGF0YS50b3AgPSBuZXcgRm9ybUF0dGFjaG1lbnQodGltZVNlcmllc0NhbnZhcywKKwkJLy8gMCk7CisJCXByb3BlcnR5U2VsZWN0b3JGb3JtRGF0YVkuYm90dG9tID0gbmV3IEZvcm1BdHRhY2htZW50KDEwMCwgMCk7CisJCXByb3BlcnR5U2VsZWN0b3JGb3JtRGF0YVkubGVmdCA9IG5ldyBGb3JtQXR0YWNobWVudCgwLCAwKTsKKwkJcHJvcGVydHlTZWxlY3RvckZvcm1EYXRhWS5yaWdodCA9IG5ldyBGb3JtQXR0YWNobWVudCgzMCwgMCk7CisJCXByb3BlcnR5U2VsZWN0b3JZLnNldExheW91dERhdGEocHJvcGVydHlTZWxlY3RvckZvcm1EYXRhWSk7CisKKwkJLy8gUHJvcGVydHkgU2VsZWN0b3IKKwkJZmluYWwgRm9ybURhdGEgcHJvcGVydHlTZWxlY3RvckZvcm1EYXRhWCA9IG5ldyBGb3JtRGF0YSgpOworCQkvLyBwcm9wZXJ0eVNlbGVjdG9yRm9ybURhdGFYLnRvcCA9IG5ldyBGb3JtQXR0YWNobWVudChwcm9wZXJ0eVNlbGVjdG9yWSwKKwkJLy8gMCk7CisJCXByb3BlcnR5U2VsZWN0b3JGb3JtRGF0YVguYm90dG9tID0gbmV3IEZvcm1BdHRhY2htZW50KDEwMCwgMCk7CisJCXByb3BlcnR5U2VsZWN0b3JGb3JtRGF0YVgubGVmdCA9IG5ldyBGb3JtQXR0YWNobWVudChwcm9wZXJ0eVNlbGVjdG9yWSwKKwkJCQkwKTsKKwkJcHJvcGVydHlTZWxlY3RvckZvcm1EYXRhWC5yaWdodCA9IG5ldyBGb3JtQXR0YWNobWVudCg2MCwgMCk7CisJCXByb3BlcnR5U2VsZWN0b3JYLnNldExheW91dERhdGEocHJvcGVydHlTZWxlY3RvckZvcm1EYXRhWCk7CisKKwkJLy8gUmVtb3ZlQnV0dG9uCisJCWZpbmFsIEZvcm1EYXRhIHJlbW92ZUJ1dHRvbkZvcm1EYXRhID0gbmV3IEZvcm1EYXRhKCk7CisJCS8vIHByb3BlcnR5U2VsZWN0b3JGb3JtRGF0YVgudG9wID0gbmV3IEZvcm1BdHRhY2htZW50KHByb3BlcnR5U2VsZWN0b3JZLAorCQkvLyAwKTsKKwkJcmVtb3ZlQnV0dG9uRm9ybURhdGEuYm90dG9tID0gbmV3IEZvcm1BdHRhY2htZW50KDEwMCwgMCk7CisJCXJlbW92ZUJ1dHRvbkZvcm1EYXRhLmxlZnQgPSBuZXcgRm9ybUF0dGFjaG1lbnQocHJvcGVydHlTZWxlY3RvclgsIDApOworCQlyZW1vdmVCdXR0b25Gb3JtRGF0YS5yaWdodCA9IG5ldyBGb3JtQXR0YWNobWVudCg5MCwgMCk7CisJCXJlbW92ZUJ1dHRvbi5zZXRMYXlvdXREYXRhKHJlbW92ZUJ1dHRvbkZvcm1EYXRhKTsKKworCQlmaW5hbCBQaGFzZVNwYWNlSGlzdG9yeVBsb3R0ZXIgc2VsZiA9IHRoaXM7CisJCQorCQkvLyBYIGxpc3RlbmVyCisJCXByb3BlcnR5U2VsZWN0b3JYCisJCQkJLmFkZFByb3BlcnR5U2VsZWN0aW9uTGlzdGVuZXIobmV3IFByb3BlcnR5U2VsZWN0b3IuUHJvcGVydHlTZWxlY3Rpb25MaXN0ZW5lcigpIHsKKworCQkJCQkvKioKKwkJCQkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnVpLndpZGdldHMuUHJvcGVydHlTZWxlY3Rvci5Qcm9wZXJ0eVNlbGVjdGlvbkxpc3RlbmVyI3Byb3BlcnR5U2VsZWN0ZWQob3JnLmVjbGlwc2Uuc3RlbS51aS53aWRnZXRzLlByb3BlcnR5U2VsZWN0b3IuUHJvcGVydHlTZWxlY3Rpb25FdmVudCkKKwkJCQkJICovCisJCQkJCXB1YmxpYyB2b2lkIHByb3BlcnR5U2VsZWN0ZWQoCisJCQkJCQkJZmluYWwgUHJvcGVydHlTZWxlY3Rpb25FdmVudCBwcm9wZXJ0eVNlbGVjdGlvbkV2ZW50KSB7CisJCQkJCQlzZWxlY3RlZERlY29yYXRvciA9IHByb3BlcnR5U2VsZWN0aW9uRXZlbnQKKwkJCQkJCQkJLmdldERlY29yYXRvcigpOworCisJCQkJCQkvLyBnZXQgdGhlIFggcHJvcGVydHkgZnJvbSB0aGUgZXZlbnQKKwkJCQkJCXNlbGVjdGVkUHJvcGVydHkyID0gcHJvcGVydHlTZWxlY3Rpb25FdmVudAorCQkJCQkJCQkuZ2V0UHJvcGVydHkoKTsKKworCQkJCQkJU3RyaW5nIHNlbGVjdGVkSWQgPSBwcm9wZXJ0eVNlbGVjdGlvbkV2ZW50LmdldElkKCk7CisJCQkJCQkKKwkJCQkJCUxpc3Q8RHluYW1pY0xhYmVsPmFsbExhYmVscyA9IGRlY29yYXRvclRvTGFiZWxzTWFwLmdldChzZWxlY3RlZERlY29yYXRvcik7CisJCQkJCQlmb3IoRHluYW1pY0xhYmVsIGxhYjphbGxMYWJlbHMpIHsKKwkJCQkJCQlpZihsYWIgaW5zdGFuY2VvZiBEaXNlYXNlTW9kZWxMYWJlbCAmJgorCQkJCQkJCQkJKChEaXNlYXNlTW9kZWxMYWJlbClsYWIpLmdldFBvcHVsYXRpb25Nb2RlbExhYmVsKCkuZ2V0UG9wdWxhdGlvbklkZW50aWZpZXIoKS5lcXVhbHMoc2VsZWN0ZWRJZCkpCisJCQkJCQkJe3NlbGVjdGVkRHluYW1pY0xhYmVsID0gbGFiO2JyZWFrO30KKwkJCQkJCX0KKwkJCQkKKwkJCQkJCWlmKHNlbGVjdGVkRHluYW1pY0xhYmVsICE9IG51bGwpIHsKKwkJCQkJCQlSZWxhdGl2ZVZhbHVlSGlzdG9yeVByb3ZpZGVyQWRhcHRlciByaHZwID0gKFJlbGF0aXZlVmFsdWVIaXN0b3J5UHJvdmlkZXJBZGFwdGVyKSBSZWxhdGl2ZVZhbHVlSGlzdG9yeVByb3ZpZGVyQWRhcHRlckZhY3RvcnkuSU5TVEFOQ0UKKwkJCQkJCQkuYWRhcHQoc2VsZWN0ZWREeW5hbWljTGFiZWwsUmVsYXRpdmVWYWx1ZUhpc3RvcnlQcm92aWRlci5jbGFzcyk7CisJCQkJCQkJc3dpdGNoVG9SVkhQKHJodnApOworCQkJCQkJCXNlbGYucGhhc2VTcGFjZUNhbnZhcy5zZXREYXRhU291cmNlQW5kUmVkcmF3KHJodnAsIHNlbGVjdGVkUHJvcGVydHkyLCBzZWxlY3RlZFByb3BlcnR5MSk7CisJCQkJCQl9CisJCQkJCX0KKwkJCQl9KTsKKworCQkvLyBZIGxpc3RlbmVyCisJCXByb3BlcnR5U2VsZWN0b3JZCisJCQkJLmFkZFByb3BlcnR5U2VsZWN0aW9uTGlzdGVuZXIobmV3IFByb3BlcnR5U2VsZWN0b3IuUHJvcGVydHlTZWxlY3Rpb25MaXN0ZW5lcigpIHsKKworCQkJCQkvKioKKwkJCQkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnVpLndpZGdldHMuUHJvcGVydHlTZWxlY3Rvci5Qcm9wZXJ0eVNlbGVjdGlvbkxpc3RlbmVyI3Byb3BlcnR5U2VsZWN0ZWQob3JnLmVjbGlwc2Uuc3RlbS51aS53aWRnZXRzLlByb3BlcnR5U2VsZWN0b3IuUHJvcGVydHlTZWxlY3Rpb25FdmVudCkKKwkJCQkJICovCisJCQkJCXB1YmxpYyB2b2lkIHByb3BlcnR5U2VsZWN0ZWQoCisJCQkJCQkJZmluYWwgUHJvcGVydHlTZWxlY3Rpb25FdmVudCBwcm9wZXJ0eVNlbGVjdGlvbkV2ZW50KSB7CisJCQkJCQlzZWxlY3RlZERlY29yYXRvciA9IHByb3BlcnR5U2VsZWN0aW9uRXZlbnQKKwkJCQkJCQkJLmdldERlY29yYXRvcigpOworCisJCQkJCQkvLyBnZXQgdGhlIFkgcHJvcGVydHkgZnJvbSB0aGUgZXZlbnQKKwkJCQkJCXNlbGVjdGVkUHJvcGVydHkxID0gcHJvcGVydHlTZWxlY3Rpb25FdmVudAorCQkJCQkJCQkuZ2V0UHJvcGVydHkoKTsKKworCQkJCQkJU3RyaW5nIHNlbGVjdGVkSWQgPSBwcm9wZXJ0eVNlbGVjdGlvbkV2ZW50LmdldElkKCk7CisJCQkJCQkKKwkJCQkJCQorCQkJCQkJTGlzdDxEeW5hbWljTGFiZWw+YWxsTGFiZWxzID0gZGVjb3JhdG9yVG9MYWJlbHNNYXAuZ2V0KHNlbGVjdGVkRGVjb3JhdG9yKTsKKwkJCQkJCWZvcihEeW5hbWljTGFiZWwgbGFiOmFsbExhYmVscykgeworCQkJCQkJCWlmKGxhYiBpbnN0YW5jZW9mIERpc2Vhc2VNb2RlbExhYmVsICYmCisJCQkJCQkJCQkoKERpc2Vhc2VNb2RlbExhYmVsKWxhYikuZ2V0UG9wdWxhdGlvbk1vZGVsTGFiZWwoKS5nZXRQb3B1bGF0aW9uSWRlbnRpZmllcigpLmVxdWFscyhzZWxlY3RlZElkKSkKKwkJCQkJCQl7c2VsZWN0ZWREeW5hbWljTGFiZWwgPSBsYWI7YnJlYWs7fQorCQkJCQkJfQorCQkJCQorCQkJCQkJaWYoc2VsZWN0ZWREeW5hbWljTGFiZWwgIT0gbnVsbCkgeworCQkJCQkJCVJlbGF0aXZlVmFsdWVIaXN0b3J5UHJvdmlkZXJBZGFwdGVyIHJodnAgPSAoUmVsYXRpdmVWYWx1ZUhpc3RvcnlQcm92aWRlckFkYXB0ZXIpIFJlbGF0aXZlVmFsdWVIaXN0b3J5UHJvdmlkZXJBZGFwdGVyRmFjdG9yeS5JTlNUQU5DRQorCQkJCQkJCS5hZGFwdChzZWxlY3RlZER5bmFtaWNMYWJlbCwKKwkJCQkJCQkJCVJlbGF0aXZlVmFsdWVIaXN0b3J5UHJvdmlkZXIuY2xhc3MpOworCQkJCQkJCXN3aXRjaFRvUlZIUChyaHZwKTsKKwkJCQkJCQlzZWxmLnBoYXNlU3BhY2VDYW52YXMuc2V0RGF0YVNvdXJjZUFuZFJlZHJhdyhyaHZwLCBzZWxlY3RlZFByb3BlcnR5Miwgc2VsZWN0ZWRQcm9wZXJ0eTEpOworCQkJCQkJfQorCQkJCQl9CisJCQkJfSk7CisKKwkJcmVtb3ZlQnV0dG9uLmFkZFNlbGVjdGlvbkxpc3RlbmVyKG5ldyBTZWxlY3Rpb25BZGFwdGVyKCkgeworCisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyB2b2lkIHdpZGdldFNlbGVjdGVkKAorCQkJCQlAU3VwcHJlc3NXYXJuaW5ncygidW51c2VkIikgZmluYWwgU2VsZWN0aW9uRXZlbnQgZSkgeworCisJCQkJZmlyZVJlbW92ZUV2ZW50KGlkZW50aWZpYWJsZSk7CisJCQkJcmVtb3ZlKCk7CisJCQl9CisJCX0pOworCisJfSAvLyBjcmVhdGVDb250ZW50cworCisJLyoqCisJICogdG8gcmVtb3ZlIHRoZSBjb250cm9sIGUuZy4gYnkgYSByZW1vdmUgYnV0dG9uIGV2ZW50CisJICovCisJQE92ZXJyaWRlCisJQFN1cHByZXNzV2FybmluZ3MoImNhc3QiKQorCXB1YmxpYyB2b2lkIHJlbW92ZSgpIHsKKwkJcmVtb3ZlTGlzdGVuZXJzLmNsZWFyKCk7CisJCXN3aXRjaFRvUlZIUChudWxsKTsKKwkJcmVsYXRpdmVWYWx1ZUhpc3RvcnlFeHRlbmRlZChudWxsKTsKKwkJaWRlbnRpZmlhYmxlVGl0bGUuc2V0VGV4dCgiIik7CisJCXByb3BlcnR5U2VsZWN0b3JYCisJCQkJLnNldERlY29yYXRvcnMoKExpc3Q8RGVjb3JhdG9yPikgQ29sbGVjdGlvbnMuRU1QVFlfTElTVCk7CisJCXByb3BlcnR5U2VsZWN0b3JZCisJCQkJLnNldERlY29yYXRvcnMoKExpc3Q8RGVjb3JhdG9yPikgQ29sbGVjdGlvbnMuRU1QVFlfTElTVCk7CisJCWRpc3Bvc2UoKTsKKwl9CisKKwkvKioKKwkgKiBAcGFyYW0gaWRlbnRpZmlhYmxlCisJICogICAgICAgICAgICB0aGUge0BsaW5rIElkZW50aWZpYWJsZX0gdG8gYmUgdGhlIHNvdXJjZSBvZiB0aGUgZGF0YSB0byBiZQorCSAqICAgICAgICAgICAgcGxvdHRlZC4KKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBzZXRJZGVudGlmaWFibGUoZmluYWwgSWRlbnRpZmlhYmxlIGlkZW50aWZpYWJsZSkgeworCisJCS8vIFNhbWUgSWRlbnRpZmlhYmxlPworCQlpZiAodGhpcy5pZGVudGlmaWFibGUgPT0gaWRlbnRpZmlhYmxlKSB7CisJCQkvLyBZZXMKKwkJCXJldHVybjsKKwkJfSAvLyBpZgorCisJCXRoaXMuaWRlbnRpZmlhYmxlID0gaWRlbnRpZmlhYmxlOworCisJCWZpbmFsIExpc3Q8RGVjb3JhdG9yPiBkZWNvcmF0b3JzID0gbmV3IEFycmF5TGlzdDxEZWNvcmF0b3I+KCk7CisJCWRlY29yYXRvclRvTGFiZWxzTWFwID0gbmV3IEhhc2hNYXA8RGVjb3JhdG9yLCBMaXN0PER5bmFtaWNMYWJlbD4+KCk7CisKKwkJaWRlbnRpZmlhYmxlVGl0bGUuc2V0VGV4dChpZGVudGlmaWFibGUuZ2V0RHVibGluQ29yZSgpLmdldFRpdGxlKCkpOworCQkvLyBHZXQgdGhlIGR5bmFtaWMgbGFiZWxzIGFzc29jaWF0ZWQgd2l0aCB0aGlzIElkZW50aWZpYWJsZQorCQkvLyBBIG5vZGU/CisJCWlmIChpZGVudGlmaWFibGUgaW5zdGFuY2VvZiBOb2RlKSB7CisJCQkvLyBZZXMKKwkJCWZpbmFsIE5vZGUgbm9kZSA9IChOb2RlKSBpZGVudGlmaWFibGU7CisJCQlmb3IgKGZpbmFsIE5vZGVMYWJlbCBub2RlTGFiZWwgOiBub2RlLmdldExhYmVscygpKSB7CisJCQkJLy8gVXBkYXRlZCBieSBhIGRlY29yYXRvcj8KKwkJCQlpZiAobm9kZUxhYmVsIGluc3RhbmNlb2YgRHluYW1pY05vZGVMYWJlbCkgeworCQkJCQkvLyBZZXMKKwkJCQkJZmluYWwgRHluYW1pY05vZGVMYWJlbCBkeW5hbWljTm9kZUxhYmVsID0gKER5bmFtaWNOb2RlTGFiZWwpIG5vZGVMYWJlbDsKKwkJCQkJLy8gQ2FuIGl0IHByb3ZpZGUgcmVsYXRpdmUgdmFsdWVzPworCQkJCQlmaW5hbCBSZWxhdGl2ZVZhbHVlSGlzdG9yeVByb3ZpZGVyQWRhcHRlciBydmhwID0gKFJlbGF0aXZlVmFsdWVIaXN0b3J5UHJvdmlkZXJBZGFwdGVyKSBSZWxhdGl2ZVZhbHVlSGlzdG9yeVByb3ZpZGVyQWRhcHRlckZhY3RvcnkuSU5TVEFOQ0UKKwkJCQkJCQkuYWRhcHQobm9kZUxhYmVsLAorCQkJCQkJCQkJUmVsYXRpdmVWYWx1ZUhpc3RvcnlQcm92aWRlci5jbGFzcyk7CisJCQkJCWlmIChydmhwICE9IG51bGwpIHsKKwkJCQkJCS8vIFllcworCQkJCQkJZmluYWwgRGVjb3JhdG9yIGRlY29yYXRvciA9IGR5bmFtaWNOb2RlTGFiZWwKKwkJCQkJCQkJLmdldERlY29yYXRvcigpOworCQkJCQkJaWYgKGRlY29yYXRvciAhPSBudWxsKSB7CisJCQkJCQkJaWYoZGVjb3JhdG9yVG9MYWJlbHNNYXAuZ2V0KGRlY29yYXRvcikhPW51bGwpIHsKKwkJCQkJCQkJTGlzdDxEeW5hbWljTGFiZWw+bGlzdCA9IGRlY29yYXRvclRvTGFiZWxzTWFwLmdldChkZWNvcmF0b3IpOworCQkJCQkJCQlsaXN0LmFkZChkeW5hbWljTm9kZUxhYmVsKTsKKwkJCQkJCQl9IGVsc2UgeworCQkJCQkJCQlBcnJheUxpc3Q8RHluYW1pY0xhYmVsPm5ld0xpc3QgPSBuZXcgQXJyYXlMaXN0PER5bmFtaWNMYWJlbD4oKTsKKwkJCQkJCQkJbmV3TGlzdC5hZGQoZHluYW1pY05vZGVMYWJlbCk7CisJCQkJCQkJCWRlY29yYXRvclRvTGFiZWxzTWFwLnB1dChkZWNvcmF0b3IsIG5ld0xpc3QpOworCQkJCQkJCX0KKwkJCQkJCQlpZiAoIWRlY29yYXRvcnMuY29udGFpbnMoZGVjb3JhdG9yKSkgeworCQkJCQkJCQlkZWNvcmF0b3JzLmFkZChkZWNvcmF0b3IpOworCQkJCQkJCX0KKwkJCQkJCX0gZWxzZSB7CisJCQkJCQkJQWN0aXZhdG9yLmxvZ0Vycm9yKCJEeW5hbWljTGFiZWwgXCIiCisJCQkJCQkJCQkrIGR5bmFtaWNOb2RlTGFiZWwuZ2V0RHVibGluQ29yZSgpCisJCQkJCQkJCQkJCS5nZXRUaXRsZSgpCisJCQkJCQkJCQkrICJcIiBkb2VzIG5vdCBoYXZlIGEgRGVjb3JhdG9yIiwgbnVsbCk7CisJCQkJCQl9CisKKwkJCQkJfSAvLyBpZiBSZWxhdGl2ZVZhbHVlSGlzdG9yeVByb3ZpZGVyQWRhcHRlcgorCQkJCX0gLy8gaWYgRHluYW1pY05vZGVMYWJlbAorCQkJfSAvLyBmb3IgZWFjaCBOb2RlTGFiZWwKKwkJfSAvLyBpZiBOb2RlCisKKwkJLy8gbmV3IG5vZGUuLi4gdXBkYXRlIHRoZSBkZWNvcmF0b3JzCisJCXByb3BlcnR5U2VsZWN0b3JYLnNldERlY29yYXRvcnMoZGVjb3JhdG9ycyk7CisJCXByb3BlcnR5U2VsZWN0b3JZLnNldERlY29yYXRvcnMoZGVjb3JhdG9ycyk7CisKKwkJdHJ5IHsKKwkJCS8vIHRyeSB0byBzZXQgdGhlIGRpc3BsYXllZCBkZWNvcmF0b3IgYnkgdGhlIHVzZXJzIHVpIGxhYmVsCisJCQkvLyBwcmVmZXJlbmNlcworCQkJZmluYWwgUHJlZmVyZW5jZXMgcHJlZmVyZW5jZXMgPSBvcmcuZWNsaXBzZS5zdGVtLnVpLkFjdGl2YXRvcgorCQkJCQkuZ2V0RGVmYXVsdCgpLmdldFBsdWdpblByZWZlcmVuY2VzKCk7CisJCQlmaW5hbCBTdHJpbmcgeVByZWZlcmVuY2UgPSBwcmVmZXJlbmNlcworCQkJCQkuZ2V0U3RyaW5nKFByZWZlcmVuY2VDb25zdGFudHMuSU5JVElBTF9BVFRSSUJVVEVfTkFNRV9TVFJJTkdfUFJFRkVSRU5DRSk7CisJCQlmaW5hbCBTdHJpbmcgeFByZWZlcmVuY2UgPSBwcmVmZXJlbmNlcworCQkJCQkuZ2V0U3RyaW5nKFByZWZlcmVuY2VDb25zdGFudHMuSU5JVElBTF9BVFRSSUJVVEVfTkFNRV9TVFJJTkdfUFJFRkVSRU5DRTIpOworCisJCQkvLyB3ZSBkbyBub3QgY2FyZSBhYm91dCB0aGUgcmV0dXJuIHZhbHVlLCBpdCdzIG9rIGlmIHRoZSBwcmVmZXJlbmNlCisJCQkvLyBpcyBub3QgdGhlcmUuCisJCQlwcm9wZXJ0eVNlbGVjdG9yWS5zZXREaXNwbGF5ZWRQcm9wZXJ0eSh5UHJlZmVyZW5jZSk7CisJCQlwcm9wZXJ0eVNlbGVjdG9yWC5zZXREaXNwbGF5ZWRQcm9wZXJ0eSh4UHJlZmVyZW5jZSk7CisKKwkJfSBjYXRjaCAoZmluYWwgRXhjZXB0aW9uIGUpIHsKKwkJCS8vIGlmIGl0IGZhaWxzIGRvIG5vdGhpbmcKKwkJfQorCisJfSAvLyBzZXRJZGVudGlmaWFibGUKKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5hZGFwdGVycy5yZWxhdGl2ZXZhbHVlLmhpc3RvcnkuUmVsYXRpdmVWYWx1ZUhpc3RvcnlFeHRlbmRlZExpc3RlbmVyI3JlbGF0aXZlVmFsdWVIaXN0b3J5RXh0ZW5kZWQob3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5hZGFwdGVycy5yZWxhdGl2ZXZhbHVlLmhpc3RvcnkuUmVsYXRpdmVWYWx1ZUhpc3RvcnlQcm92aWRlckFkYXB0ZXIpCisJICovCisJcHVibGljIHZvaWQgcmVsYXRpdmVWYWx1ZUhpc3RvcnlFeHRlbmRlZCgKKwkJCWZpbmFsIFJlbGF0aXZlVmFsdWVIaXN0b3J5UHJvdmlkZXJBZGFwdGVyIHJ2aHApIHsKKwkJLy8gVGhlIGV2ZW50IG5vdGlmaWNhdGlvbiBkb2Vzbid0IGNvbWUgZnJvbSB0aGUgVUkgdGhyZWFkIHNvIHdlIG5lZWQgdG8KKwkJLy8gYWRkIGEgUnVubmFibGUgdG8gdGhlIFVJIHRocmVhZCdzIGV4ZWN1dGlvbiBxdWV1ZSB0byBnaXZlIHRoZSBuZXcKKwkJLy8gc291cmNlIHRvIHRoZSBjaGFydAorCQkKKwkJLy8gSWYgYSBwbG90IHVwZGF0ZSBpcyBhbHJlYWR5IHNjaGVkdWxlZCwgdGhlbiBkb24ndCBhZGQgYW5vdGhlciB0byB0aGUgcXVldWUKKwkJaWYgKHBsb3RVcGRhdGVTY2hlZHVsZWQpIHsKKwkJCXJldHVybjsKKwkJfQorCisJCQorCQlmaW5hbCBEaXNwbGF5IGRpc3BsYXkgPSBEaXNwbGF5LmdldERlZmF1bHQoKTsKKwkJaWYgKCFkaXNwbGF5LmlzRGlzcG9zZWQoKSkgeworCQkJLy8gWWVzCisJCQl0cnkgeworCQkJCXBsb3RVcGRhdGVTY2hlZHVsZWQgPSB0cnVlOworCQkJCWRpc3BsYXkuYXN5bmNFeGVjKG5ldyBSdW5uYWJsZSgpIHsKKwkJCQkJcHVibGljIHZvaWQgcnVuKCkgeworCQkJCQkJdHJ5IHsKKwkJCQkJCXBoYXNlU3BhY2VDYW52YXMuc2V0RGF0YVNvdXJjZUFuZFJlZHJhdyhydmhwLAorCQkJCQkJCQlzZWxlY3RlZFByb3BlcnR5Miwgc2VsZWN0ZWRQcm9wZXJ0eTEpOworCQkJCQkJCisJCQkJCQl9IGZpbmFsbHkgeworCQkJCQkJCXBsb3RVcGRhdGVTY2hlZHVsZWQgPSBmYWxzZTsKKwkJCQkJCX0KKwkJCQkJfSAvLyBydW4KKwkJCQl9KTsgLy8gZGlzcGxheS5hc3luY0V4ZWMKKwkJCX0gLy8gdHJ5CisJCQljYXRjaCAoZmluYWwgRXhjZXB0aW9uIGUpIHsKKwkJCQkvLyBJZ25vcmUgdGhlcmUgY291bGQgYmUgYSByYWNlIGNvbmRpdGlvbiB3aXRoIHRoZSBkaXNwbGF5IGJlaW5nCisJCQkJLy8gZGlzcG9zZWQgd2hlbiB0aGUgc3lzdGVtIGlzIHNodXQgZG93biB3aXRoIGEgcnVubmluZworCQkJCS8vIHNpbXVsYXRpb24uCisJCQl9IC8vIGNhdGNoIEV4Y2VwdGlvbgorCQl9IC8vIGlmCisJfS8vIHJlbGF0aXZlVmFsdWVIaXN0b3J5RXh0ZW5kZWQKKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5qb2JzLnNpbXVsYXRpb24uSVNpbXVsYXRpb25MaXN0ZW5lciNzaW11bGF0aW9uQ2hhbmdlZChvcmcuZWNsaXBzZS5zdGVtLmpvYnMuc2ltdWxhdGlvbi5TaW11bGF0aW9uRXZlbnQpCisJICovCisJQFN1cHByZXNzV2FybmluZ3MoImNhc3QiKQorCXB1YmxpYyB2b2lkIHNpbXVsYXRpb25DaGFuZ2VkKGZpbmFsIFNpbXVsYXRpb25FdmVudCBldmVudCkgeworCQkvLyByZXNldCBldmVudAorCQlpZiAoZXZlbnQuZ2V0U2ltdWxhdGlvblN0YXRlKCkgPT0gU2ltdWxhdGlvblN0YXRlLlJFU0VUKSB7CisJCQkvLyBZZXMKKwkJCXBoYXNlU3BhY2VDYW52YXMucmVzZXREYXRhKCk7CisJCX0gLy8gaWYKKwkJLy8gSXMgdGhlIFNpbXVsYXRpb24gc3RvcHBpbmcgKGkuZS4gYmVpbmcgZGVsZXRlZD8pCisJCWlmIChldmVudC5nZXRTaW11bGF0aW9uU3RhdGUoKSA9PSBTaW11bGF0aW9uU3RhdGUuU1RPUFBFRCkgeworCQkJLy8gWWVzCisJCQlzaW11bGF0aW9uLnJlbW92ZVNpbXVsYXRpb25MaXN0ZW5lcih0aGlzKTsKKwkJCXNpbXVsYXRpb24gPSBudWxsOworCQkJc3dpdGNoVG9SVkhQKG51bGwpOworCQkJcmVsYXRpdmVWYWx1ZUhpc3RvcnlFeHRlbmRlZChudWxsKTsKKwkJCWlkZW50aWZpYWJsZVRpdGxlLnNldFRleHQoIiIpOworCQkJcHJvcGVydHlTZWxlY3RvclgKKwkJCQkJLnNldERlY29yYXRvcnMoKExpc3Q8RGVjb3JhdG9yPikgQ29sbGVjdGlvbnMuRU1QVFlfTElTVCk7CisJCQlwcm9wZXJ0eVNlbGVjdG9yWQorCQkJCQkuc2V0RGVjb3JhdG9ycygoTGlzdDxEZWNvcmF0b3I+KSBDb2xsZWN0aW9ucy5FTVBUWV9MSVNUKTsKKworCQl9IC8vIGlmCisJfSAvLyBzaW11bGF0aW9uQ2hhbmdlZAorCisJLyoqCisJICogSW5pdGlhbGl6ZSB0aGUgY29udHJvbCBmcm9tIGEKKwkgKiB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5qb2JzLnNpbXVsYXRpb24uU2ltdWxhdGlvbn0gaW5zdGFuY2UuCisJICogCisJICogQHBhcmFtIHNpbXVsYXRpb24KKwkgKiAgICAgICAgICAgIHRoZSB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5qb2JzLnNpbXVsYXRpb24uU2ltdWxhdGlvbn0KKwkgKiAgICAgICAgICAgIHdob3NlIHN0YXRlIHdpbGwgYmUgdmlzdWFsaXplZCBpbiB0aGUgY29udHJvbC4KKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgdm9pZCBpbml0aWFsaXplRnJvbVNpbXVsYXRpb24oZmluYWwgSVNpbXVsYXRpb24gc2ltdWxhdGlvbikgeworCQlzaW11bGF0aW9uTmFtZUxhYmVsLnNldFRleHQoc2ltdWxhdGlvbi5nZXROYW1lKCkpOworCQlwcm9wZXJ0eVNlbGVjdG9yWC5zZXRTaW11bGF0aW9uKHNpbXVsYXRpb24pOworCQlwcm9wZXJ0eVNlbGVjdG9yWS5zZXRTaW11bGF0aW9uKHNpbXVsYXRpb24pOworCX0gLy8gaW5pdGlhbGl6ZUZyb21TaW11bGF0aW9uCisKKwkvKioKKwkgKiAKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCByZWZyZXNoMigpIHsKKwkJLy8gbm90aGluZworCX0gLy8gcmVmcmVzaDIKKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuV2lkZ2V0I2Rpc3Bvc2UoKQorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGRpc3Bvc2UoKSB7CisJCXN1cGVyLmRpc3Bvc2UoKTsKKwkJaWYgKHRoaXMucnZocCAhPSBudWxsKSB7CisJCQkvLyBZZXMKKwkJCXJ2aHAucmVtb3ZlRXh0ZW5zaW9uTGlzdGVuZXIodGhpcyk7CisJCX0gLy8gaWYKKwl9IC8vIGRpc3Bvc2UKKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS51aS5yZXBvcnRzLnZpZXdzLlJlcG9ydENvbnRyb2wjZ2V0SWRlbnRpZmlhYmxlKCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgSWRlbnRpZmlhYmxlIGdldElkZW50aWZpYWJsZSgpIHsKKwkJcmV0dXJuIGlkZW50aWZpYWJsZTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIENvbnRyb2wgaXMgYXNzb2NpYXRlZCB3aXRoIGFuIElkZW50aWZpYWJsZQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS51aS5yZXBvcnRzLnZpZXdzLlJlcG9ydENvbnRyb2wjZ2V0Q29udHJvbFR5cGUoKQorCSAqLworCXB1YmxpYyBTdHJpbmcgZ2V0Q29udHJvbFR5cGUoKSB7CisJCXJldHVybiBSZXBvcnRDb250cm9sRmFjdG9yeS5JREVOVElGQUJMRV9UWVBFOworCX0KKwkKK30gLy8gUmVsYXRpdmVWYWx1ZUhpc3RvcnlQbG90dGVyCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkucmVwb3J0cy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9yZXBvcnRzL3ZpZXdzL1BoYXNlU3BhY2VWaWV3LmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkucmVwb3J0cy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9yZXBvcnRzL3ZpZXdzL1BoYXNlU3BhY2VWaWV3LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWY2NWNjNAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5yZXBvcnRzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3JlcG9ydHMvdmlld3MvUGhhc2VTcGFjZVZpZXcuamF2YQpAQCAtMCwwICsxLDE1MSBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnVpLnJlcG9ydHMudmlld3M7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU3RydWN0dXJlZFNlbGVjdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLklkZW50aWZpYWJsZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuRGVjb3JhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uam9icy5zaW11bGF0aW9uLlNpbXVsYXRpb25NYW5hZ2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udWkudmlld3MuZ2VvZ3JhcGhpYy5tYXAuU2VsZWN0ZWRSZXBvcnRzTWFuYWdlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21ibzsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGU7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuSVNlbGVjdGlvbkxpc3RlbmVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2hQYXJ0OworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLnBhcnQuVmlld1BhcnQ7CisKKy8qKgorICogVGhpcyB2aWV3IGNvbnRhaW5zIEJJUlQgb3V0cHV0IHRoYXQgcGxvdHMgdmFsdWVzIG9mIHZhcmlhYmxlcyBpbiBTVEVNCisgKiBzaW11bGF0aW9ucy4KKyAqLworCitwdWJsaWMgY2xhc3MgUGhhc2VTcGFjZVZpZXcgZXh0ZW5kcyBWaWV3UGFydCBpbXBsZW1lbnRzIElTZWxlY3Rpb25MaXN0ZW5lciB7CisKKwkvKioKKwkgKiBUaGUgaWRlbnRpZmllciBvZiB0aGUgUGhhc2UgU3BhY2UgVmlldworCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIElEX1BIQVNFX1NQQUNFX1ZJRVcgPSAib3JnLmVjbGlwc2Uuc3RlbS51aS5yZXBvcnRzLnZpZXdzLlBoYXNlU3BhY2UiOyAvLyROT04tTkxTLTEkCisKKwlwcml2YXRlIExpc3Q8SWRlbnRpZmlhYmxlPiBzZWxlY3RlZElkZW50aWZpYWJsZXMgPSBudWxsOworCisJLyoqCisJICogVGhpcyBpcyB0aGUgZGVjb3JhdG9yIHRoYXQgaGFzIGJlZW4gc2VsZWN0ZWQgYnkgdGhlIGNvbWJvIGJveC4KKwkgKi8KKwlwcm90ZWN0ZWQgRGVjb3JhdG9yIHNlbGVjdGVkRGVjb3JhdG9yOworCisJLyoqCisJICogVGhpcyBpcyB0aGUgY29tYm8gYm94IHRoYXQgZGlzcGxheXMgdGhlIERlY29yYXRvcnMgdGhhdCBjYW4gYmUgc2VsZWN0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgQ29tYm8gZGVjb3JhdG9yQ29tYm87CisKKwkvKioKKwkgKiBUaGlzIGlzIHRoZSBjb21ibyBib3ggdGhhdCBkaXNwbGF5cyB0aGUgWCBheGlzIHByb3BlcnRpZXMgb2YgdGhlIHNlbGVjdGVkCisJICogRGVjb3JhdG9yCisJICovCisJcHJvdGVjdGVkIENvbWJvIHByb3BlcnRpZXNDb21ib1g7CisKKwkvKioKKwkgKiBUaGlzIGlzIHRoZSBjb21ibyBib3ggdGhhdCBkaXNwbGF5cyB0aGUgWSBheGlzIHByb3BlcnRpZXMgb2YgdGhlIHNlbGVjdGVkCisJICogRGVjb3JhdG9yCisJICovCisJcHJvdGVjdGVkIENvbWJvIHByb3BlcnRpZXNDb21ib1k7CisKKwlwcml2YXRlIFJlcG9ydFZpZXdlciByZXBvcnRWaWV3ZXI7CisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnVpLnBhcnQuV29ya2JlbmNoUGFydCNjcmVhdGVQYXJ0Q29udHJvbChvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGUpCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgY3JlYXRlUGFydENvbnRyb2woZmluYWwgQ29tcG9zaXRlIHBhcmVudCkgeworCisJCS8vIHBoYXNlU3BhY2VIaXN0b3J5UGxvdHRlciA9IG5ldyBQaGFzZVNwYWNlSGlzdG9yeVBsb3R0ZXIocGFyZW50KTsKKworCQlyZXBvcnRWaWV3ZXIgPSBuZXcgUmVwb3J0Vmlld2VyKHBhcmVudCwgUGhhc2VTcGFjZUZhY3RvcnkuSU5TVEFOQ0UpOworCQlyZXBvcnRWaWV3ZXIuc2V0SW5wdXQoU2ltdWxhdGlvbk1hbmFnZXIuZ2V0TWFuYWdlcigpKTsKKworCQlnZXRTaXRlKCkuc2V0U2VsZWN0aW9uUHJvdmlkZXIocmVwb3J0Vmlld2VyKTsKKworCQkvLyBSZWdpc3RlciB3aXRoIHRoZSBTZWxlY3Rpb25TZXJ2aWNlCisJCWdldFNpdGUoKS5nZXRXb3JrYmVuY2hXaW5kb3coKS5nZXRTZWxlY3Rpb25TZXJ2aWNlKCkKKwkJCQkuYWRkU2VsZWN0aW9uTGlzdGVuZXIodGhpcyk7CisKKwl9IC8vIGNyZWF0ZVBhcnRDb250cm9sCisKKwkvKioKKwkgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgd2hlbmV2ZXIgQU5ZVEhJTkcgaXMgc2VsZWN0ZWQgaW4gdGhlIEVjbGlwc2UKKwkgKiB3b3JrYmVuY2guIEl0J3Mgam9iIGlzIHRvIGZpbHRlciBvdXQgc2VsZWN0aW9ucyBvZiBJU2ltdWxhdGlvbiBpbnN0YW5jZXMKKwkgKiBhbmQgdXBkYXRlIHRoZSBjaGFydCBpbiB0aGUgVGltZVNlcmllc0NhbnZhcworCSAqIAorCSAqIEBzZWUgb3JnLmVjbGlwc2UudWkuSVNlbGVjdGlvbkxpc3RlbmVyI3NlbGVjdGlvbkNoYW5nZWQob3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaFBhcnQsCisJICogICAgICBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb24pCisJICovCisJQFN1cHByZXNzV2FybmluZ3MoInVuY2hlY2tlZCIpCisJcHVibGljIHZvaWQgc2VsZWN0aW9uQ2hhbmdlZChmaW5hbCBJV29ya2JlbmNoUGFydCBwYXJ0LAorCQkJZmluYWwgSVNlbGVjdGlvbiBzZWxlY3Rpb24pIHsKKworCQkvLyBJcyB0aGlzIHNlbGVjdGlvbiBjaGFuZ2VkIGV2ZW50IGNvbWluZyBmcm9tIG91ciB2aWV3PworCQlpZiAocGFydCAhPSBQaGFzZVNwYWNlVmlldy50aGlzKSB7CisJCQkvLyBObworCQkJaWYgKHNlbGVjdGVkSWRlbnRpZmlhYmxlcyA9PSBudWxsKSB7CisJCQkJLy8gWWVzCisJCQkJc2VsZWN0ZWRJZGVudGlmaWFibGVzID0gbmV3IEFycmF5TGlzdDxJZGVudGlmaWFibGU+KCk7CisJCQl9IC8vIGlmCisJCQlzZWxlY3RlZElkZW50aWZpYWJsZXMuY2xlYXIoKTsKKworCQkJLy8gSXMgaXQgYSBzdHJ1Y3R1cmVkIHNlbGVjdGlvbj8KKwkJCWlmIChzZWxlY3Rpb24gaW5zdGFuY2VvZiBJU3RydWN0dXJlZFNlbGVjdGlvbikgeworCQkJCS8vIFllcworCQkJCWZpbmFsIExpc3QgbGlzdCA9ICgoSVN0cnVjdHVyZWRTZWxlY3Rpb24pIHNlbGVjdGlvbikudG9MaXN0KCk7CisKKwkJCQkvLyBHbyB0aHJvdWdoIGV2ZXJ5dGhpbmcgaW4gdGhlIGxpc3Qgb2YgdGhpbmdzIHRoYXQgd2VyZQorCQkJCS8vIHNlbGVjdGVkIGFuZCBwaWNrIG91dCB0aGUgb25lcyB0aGF0IGFyZSBJU2ltdWxhdGlvbnMuCisJCQkJZm9yIChmaW5hbCBJdGVyYXRvciBzZWxlY3Rpb25JdGVyID0gbGlzdC5pdGVyYXRvcigpOyBzZWxlY3Rpb25JdGVyCisJCQkJCQkuaGFzTmV4dCgpOykgeworCQkJCQlmaW5hbCBPYmplY3Qgb2JqID0gc2VsZWN0aW9uSXRlci5uZXh0KCk7CisKKwkJCQkJaWYgKG9iaiBpbnN0YW5jZW9mIElkZW50aWZpYWJsZSkgeworCQkJCQkJLy8gTWFrZSBzdXJlIHRoYXQgdGhlIHJlcG9ydCBpcyBpbmRlZWQgZW5hYmxlZCBpbiB0aGUgY29udGV4dCBtZW51CQkJCQkJCisJCQkJCQlpZiAoU2VsZWN0ZWRSZXBvcnRzTWFuYWdlci5nZXRJbnN0YW5jZSgpLmlzUmVwb3J0RW5hYmxlZChQaGFzZVNwYWNlRmFjdG9yeS5QSEFTRV9TUEFDRV9UWVBFKSkgeworCQkJCQkJCXJlcG9ydFZpZXdlci5hZGRNb25pdG9yKChJZGVudGlmaWFibGUpb2JqKTsKKwkJCQkJCX0KKwkJCQkJfSAvLyBpZgorCQkJCX0gLy8gZm9yIGVhY2ggc2VsZWN0ZWQgaXRlbQorCQkJfSAvLyBpZiBzdHJ1Y3R1cmVkIHNlbGVjdGlvbgorCisJCX0gLy8gaWYgc2VsZWN0aW9uIGNoYW5nZWQgZXZlbnQgY29taW5nIGZyb20gb3VyIHZpZXc/CisJfSAvLyBzZWxlY3Rpb25DaGFuZ2VkCisKKwkKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnVpLnBhcnQuV29ya2JlbmNoUGFydCNkaXNwb3NlKCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBkaXNwb3NlKCkgeworCQlnZXRTaXRlKCkuZ2V0V29ya2JlbmNoV2luZG93KCkuZ2V0U2VsZWN0aW9uU2VydmljZSgpCisJCQkJLnJlbW92ZVNlbGVjdGlvbkxpc3RlbmVyKHRoaXMpOworCX0gLy8gZGlzcG9zZQorCisJLyoqCisJICogVGhpcyBpcyByZXF1aXJlZCBieSB0aGUgaW50ZXJmYWNlLCBidXQgd2UncmUgbm90IHVzaW5nIGl0LgorCSAqIAorCSAqIEBzZWUgb3JnLmVjbGlwc2UudWkucGFydC5Xb3JrYmVuY2hQYXJ0I3NldEZvY3VzKCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBzZXRGb2N1cygpIHsKKwkJLy8gTm90aGluZworCX0gLy8gc2V0Rm9jdXMKKworfSAvLyBQaGFzZVNwYWNlVmlldwpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLnJlcG9ydHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvcmVwb3J0cy92aWV3cy9SZWxhdGl2ZVZhbHVlSGlzdG9yeVBsb3R0ZXIuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5yZXBvcnRzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3JlcG9ydHMvdmlld3MvUmVsYXRpdmVWYWx1ZUhpc3RvcnlQbG90dGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzgwYmU0ZQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5yZXBvcnRzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3JlcG9ydHMvdmlld3MvUmVsYXRpdmVWYWx1ZUhpc3RvcnlQbG90dGVyLmphdmEKQEAgLTAsMCArMSw0NzQgQEAKKy8vIFJlbGF0aXZlVmFsdWVIaXN0b3J5UGxvdHRlci5qYXZhCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0udWkucmVwb3J0cy52aWV3czsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OworaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uczsKK2ltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtUHJvcGVydHlEZXNjcmlwdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5JZGVudGlmaWFibGU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkR5bmFtaWNMYWJlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguRHluYW1pY05vZGVMYWJlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguR3JhcGg7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLk5vZGU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLk5vZGVMYWJlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuRGVjb3JhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuYWRhcHRlcnMucmVsYXRpdmV2YWx1ZS5SZWxhdGl2ZVZhbHVlUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5hZGFwdGVycy5yZWxhdGl2ZXZhbHVlLlJlbGF0aXZlVmFsdWVQcm92aWRlckFkYXB0ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5hZGFwdGVycy5yZWxhdGl2ZXZhbHVlLlJlbGF0aXZlVmFsdWVQcm92aWRlckFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuYWRhcHRlcnMucmVsYXRpdmV2YWx1ZS5oaXN0b3J5LlJlbGF0aXZlVmFsdWVIaXN0b3J5RXh0ZW5kZWRMaXN0ZW5lcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmFkYXB0ZXJzLnJlbGF0aXZldmFsdWUuaGlzdG9yeS5SZWxhdGl2ZVZhbHVlSGlzdG9yeVByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuYWRhcHRlcnMucmVsYXRpdmV2YWx1ZS5oaXN0b3J5LlJlbGF0aXZlVmFsdWVIaXN0b3J5UHJvdmlkZXJBZGFwdGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuYWRhcHRlcnMucmVsYXRpdmV2YWx1ZS5oaXN0b3J5LlJlbGF0aXZlVmFsdWVIaXN0b3J5UHJvdmlkZXJBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuRGlzZWFzZU1vZGVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5EaXNlYXNlTW9kZWxMYWJlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmpvYnMuc2ltdWxhdGlvbi5JU2ltdWxhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmpvYnMuc2ltdWxhdGlvbi5JU2ltdWxhdGlvbkxpc3RlbmVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uam9icy5zaW11bGF0aW9uLlNpbXVsYXRpb25FdmVudDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmpvYnMuc2ltdWxhdGlvbi5TaW11bGF0aW9uTWFuYWdlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmpvYnMuc2ltdWxhdGlvbi5TaW11bGF0aW9uU3RhdGU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS51aS53aWRnZXRzLkRlY29yYXRvclNlbGVjdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udWkud2lkZ2V0cy5EZWNvcmF0b3JTZWxlY3Rvci5EZWNvcmF0b3JTZWxlY3Rpb25FdmVudDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuU1dUOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuU2VsZWN0aW9uQWRhcHRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLlNlbGVjdGlvbkV2ZW50OworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5sYXlvdXQuRm9ybUF0dGFjaG1lbnQ7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5Gb3JtRGF0YTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QubGF5b3V0LkZvcm1MYXlvdXQ7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQnV0dG9uOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5EaXNwbGF5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkxhYmVsOworCisvKioKKyAqIFRoaXMgY2xhc3MgaXMgYSBTV1QgR1VJIGNvbXBvbmVudCB0aGF0IHVzZXMgQklSVCB0byBwbG90CisgKi8KK3B1YmxpYyBjbGFzcyBSZWxhdGl2ZVZhbHVlSGlzdG9yeVBsb3R0ZXIgZXh0ZW5kcyBSZXBvcnRDb250cm9sIGltcGxlbWVudHMKKwkJUmVsYXRpdmVWYWx1ZUhpc3RvcnlFeHRlbmRlZExpc3RlbmVyLCBJU2ltdWxhdGlvbkxpc3RlbmVyIHsKKworCVRpbWVTZXJpZXNDYW52YXMgdGltZVNlcmllc0NhbnZhczsKKwlEZWNvcmF0b3JTZWxlY3RvciBkZWNvcmF0b3JTZWxlY3RvcjsKKwlMaXN0PElJdGVtUHJvcGVydHlEZXNjcmlwdG9yPiBzZWxlY3RlZFByb3BlcnRpZXM7CisKKwlib29sZWFuIHBsb3RVcGRhdGVTY2hlZHVsZWQgPSBmYWxzZTsKKwkKKwkvKioKKwkgKiBUaGlzIGludGVyZmFjZSBpcyBpbXBsZW1lbnRlZCBieSBjbGFzc2VzIHRoYXQgc2VsZWN0IG91dCB0aGUgcHJvcGVydGllcworCSAqIHRvIGJlIGRpc3BsYXllZC4KKwkgKi8KKwlwdWJsaWMgaW50ZXJmYWNlIFByb3BlcnR5U2lldmUgeworCQkvKioKKwkJICogQHBhcmFtIGR5bmFtaWNMYWJlbAorCQkgKiAgICAgICAgICAgIHRoZSBsYWJlbCB0aGF0IGNvbnRhaW5zIHRoZSBjYW5kaWRhdGUgcHJvcGVydGllcyB0byBiZQorCQkgKiAgICAgICAgICAgIGRpc3BsYXllZC4KKwkJICogQHJldHVybiBhIDxjb2RlPkxpc3Q8L2NvZGU+IG9mIHRoZSBwcm9wZXJ0aWVzIHRoYXQgc2hvdWxkIGJlCisJCSAqICAgICAgICAgZGlzcGxheWVkIGluIHRoZSBvcmRlciB0aGF0IHRoZXkgc2hvdWxkIGJlIGRpc3BsYXllZC4KKwkJICovCisJCUxpc3Q8SXRlbVByb3BlcnR5RGVzY3JpcHRvcj4gc2lldmUoZmluYWwgRHluYW1pY0xhYmVsIGR5bmFtaWNMYWJlbCk7CisJfSAvLyBQcm9wZXJ0eVNpZXZlCisKKwkvKioKKwkgKiBUaGlzIHNpZXZlIHNlbGVjdHMgYWxsIG9mIHRob3NlIHByb3BlcnRpZXMgdGhhdCBoYXZlIHJlbGF0aXZlIHZhbHVlcy4KKwkgKi8KKwlwcml2YXRlIGZpbmFsIFByb3BlcnR5U2lldmUgcHJvcGVydHlTaWV2ZSA9IG5ldyBQcm9wZXJ0eVNpZXZlKCkgeworCQkvKioKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnVpLndpZGdldHMuRGVjb3JhdG9yU2VsZWN0b3IuUHJvcGVydHlTaWV2ZSNzaWV2ZShvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguRHluYW1pY0xhYmVsKQorCQkgKi8KKwkJcHVibGljIExpc3Q8SXRlbVByb3BlcnR5RGVzY3JpcHRvcj4gc2lldmUoCisJCQkJZmluYWwgRHluYW1pY0xhYmVsIGR5bmFtaWNMYWJlbCkgeworCQkJZmluYWwgTGlzdDxJdGVtUHJvcGVydHlEZXNjcmlwdG9yPiByZXRWYWx1ZSA9IG5ldyBBcnJheUxpc3Q8SXRlbVByb3BlcnR5RGVzY3JpcHRvcj4oKTsKKwkJCWZpbmFsIFJlbGF0aXZlVmFsdWVQcm92aWRlckFkYXB0ZXIgcnZwID0gKFJlbGF0aXZlVmFsdWVQcm92aWRlckFkYXB0ZXIpIFJlbGF0aXZlVmFsdWVQcm92aWRlckFkYXB0ZXJGYWN0b3J5LklOU1RBTkNFCisJCQkJCS5hZGFwdChkeW5hbWljTGFiZWwsIFJlbGF0aXZlVmFsdWVQcm92aWRlci5jbGFzcyk7CisKKwkJCS8vIERvZXMgdGhlIGxhYmVsIGhhdmUgcmVsYXRpdmUgdmFsdWVzPworCQkJaWYgKHJ2cCAhPSBudWxsKSB7CisJCQkJLy8gWWVzCisJCQkJcnZwLnNldFRhcmdldChkeW5hbWljTGFiZWwpOworCisJCQkJZm9yIChmaW5hbCBPYmplY3QgZWxlbWVudCA6IHJ2cC5nZXRQcm9wZXJ0aWVzKCkpIHsKKwkJCQkJZmluYWwgSXRlbVByb3BlcnR5RGVzY3JpcHRvciBwcm9wZXJ0eSA9IChJdGVtUHJvcGVydHlEZXNjcmlwdG9yKSBlbGVtZW50OworCQkJCQlyZXRWYWx1ZS5hZGQocHJvcGVydHkpOworCQkJCX0gLy8gZm9yIGVhY2ggcHJvcGVydHkKKwkJCX0gLy8gaWYgdGhlIGxhYmVsIGhhcyByZWxhdGl2ZSB2YWx1ZXMKKwkJCXJldHVybiByZXRWYWx1ZTsKKwkJfSAvLyBzaWV2ZQorCX07CisKKwkvKioKKwkgKiBAcGFyYW0gcGFyZW50CisJICovCisJcHVibGljIFJlbGF0aXZlVmFsdWVIaXN0b3J5UGxvdHRlcihmaW5hbCBDb21wb3NpdGUgcGFyZW50KSB7CisJCXN1cGVyKHBhcmVudCwgU1dULk5vbmUpOworCQljcmVhdGVDb250ZW50cygpOworCX0gLy8gUmVsYXRpdmVWYWx1ZUhpc3RvcnlQbG90dGVyCisKKwkvKioKKwkgKiBDcmVhdGUgdGhlIGNvbnRlbnRzIG9mIHRoZSBwbG90dGVyCisJICovCisJcHJpdmF0ZSB2b2lkIGNyZWF0ZUNvbnRlbnRzKCkgeworCQlzZXRMYXlvdXQobmV3IEZvcm1MYXlvdXQoKSk7CisKKwkJaWRlbnRpZmlhYmxlVGl0bGUgPSBuZXcgTGFiZWwodGhpcywgU1dULk5PTkUpOworCQl0aW1lU2VyaWVzQ2FudmFzID0gbmV3IFRpbWVTZXJpZXNDYW52YXModGhpcyk7CisJCWRlY29yYXRvclNlbGVjdG9yID0gbmV3IERlY29yYXRvclNlbGVjdG9yKHRoaXMsIFNXVC5OT05FLCB0cnVlKTsKKworCQlyZW1vdmVCdXR0b24gPSBuZXcgQnV0dG9uKHRoaXMsIFNXVC5OT05FKTsKKwkJcmVtb3ZlQnV0dG9uLnNldFRleHQoUkVNT1ZFX1RFWFQpOworCisJCWZpbmFsIEZvcm1EYXRhIHRpdGxlRm9ybURhdGEgPSBuZXcgRm9ybURhdGEoKTsKKwkJaWRlbnRpZmlhYmxlVGl0bGUuc2V0TGF5b3V0RGF0YSh0aXRsZUZvcm1EYXRhKTsKKwkJdGl0bGVGb3JtRGF0YS50b3AgPSBuZXcgRm9ybUF0dGFjaG1lbnQoMCwgMCk7CisJCXRpdGxlRm9ybURhdGEubGVmdCA9IG5ldyBGb3JtQXR0YWNobWVudCgwLCAwKTsKKwkJdGl0bGVGb3JtRGF0YS5yaWdodCA9IG5ldyBGb3JtQXR0YWNobWVudCgxMDAsIDApOworCisJCWZpbmFsIEZvcm1EYXRhIGNoYXJ0Rm9ybURhdGEgPSBuZXcgRm9ybURhdGEoKTsKKwkJdGltZVNlcmllc0NhbnZhcy5zZXRMYXlvdXREYXRhKGNoYXJ0Rm9ybURhdGEpOworCQljaGFydEZvcm1EYXRhLnRvcCA9IG5ldyBGb3JtQXR0YWNobWVudChpZGVudGlmaWFibGVUaXRsZSwgMCk7CisJCWNoYXJ0Rm9ybURhdGEuYm90dG9tID0gbmV3IEZvcm1BdHRhY2htZW50KGRlY29yYXRvclNlbGVjdG9yLCAwKTsKKwkJY2hhcnRGb3JtRGF0YS5sZWZ0ID0gbmV3IEZvcm1BdHRhY2htZW50KDAsIDApOworCQljaGFydEZvcm1EYXRhLnJpZ2h0ID0gbmV3IEZvcm1BdHRhY2htZW50KDEwMCwgMCk7CisKKwkJLy8gUHJvcGVydHkgU2VsZWN0b3IKKwkJZmluYWwgRm9ybURhdGEgZGVjb3JhdG9yU2VsZWN0b3JGb3JtRGF0YSA9IG5ldyBGb3JtRGF0YSgpOworCQkvLyBkZWNvcmF0b3JTZWxlY3RvckZvcm1EYXRhLnRvcCA9IG5ldyBGb3JtQXR0YWNobWVudCh0aW1lU2VyaWVzQ2FudmFzLAorCQkvLyAwKTsKKwkJZGVjb3JhdG9yU2VsZWN0b3JGb3JtRGF0YS5ib3R0b20gPSBuZXcgRm9ybUF0dGFjaG1lbnQoMTAwLCAwKTsKKwkJZGVjb3JhdG9yU2VsZWN0b3JGb3JtRGF0YS5sZWZ0ID0gbmV3IEZvcm1BdHRhY2htZW50KDAsIDApOworCQlkZWNvcmF0b3JTZWxlY3RvckZvcm1EYXRhLnJpZ2h0ID0gbmV3IEZvcm1BdHRhY2htZW50KDMwLCAwKTsKKwkJZGVjb3JhdG9yU2VsZWN0b3Iuc2V0TGF5b3V0RGF0YShkZWNvcmF0b3JTZWxlY3RvckZvcm1EYXRhKTsKKworCQkvLyBSZW1vdmVCdXR0b24KKwkJZmluYWwgRm9ybURhdGEgcmVtb3ZlQnV0dG9uRm9ybURhdGEgPSBuZXcgRm9ybURhdGEoKTsKKwkJLy8gZGVjb3JhdG9yU2VsZWN0b3JGb3JtRGF0YVgudG9wID0gbmV3IEZvcm1BdHRhY2htZW50KGRlY29yYXRvclNlbGVjdG9yWSwKKwkJLy8gMCk7CisJCXJlbW92ZUJ1dHRvbkZvcm1EYXRhLmJvdHRvbSA9IG5ldyBGb3JtQXR0YWNobWVudCgxMDAsIDApOworCQlyZW1vdmVCdXR0b25Gb3JtRGF0YS5sZWZ0ID0gbmV3IEZvcm1BdHRhY2htZW50KGRlY29yYXRvclNlbGVjdG9yLCAwKTsKKwkJcmVtb3ZlQnV0dG9uRm9ybURhdGEucmlnaHQgPSBuZXcgRm9ybUF0dGFjaG1lbnQoNjAsIDApOworCQlyZW1vdmVCdXR0b24uc2V0TGF5b3V0RGF0YShyZW1vdmVCdXR0b25Gb3JtRGF0YSk7CisKKwkJZGVjb3JhdG9yU2VsZWN0b3IKKwkJCQkuYWRkRGVjb3JhdG9yU2VsZWN0aW9uTGlzdGVuZXIobmV3IERlY29yYXRvclNlbGVjdG9yLkRlY29yYXRvclNlbGVjdGlvbkxpc3RlbmVyKCkgeworCisJCQkJCS8qKgorCQkJCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0udWkud2lkZ2V0cy5EZWNvcmF0b3JTZWxlY3Rvci5Qcm9wZXJ0eVNlbGVjdGlvbkxpc3RlbmVyI3Byb3BlcnR5U2VsZWN0ZWQob3JnLmVjbGlwc2Uuc3RlbS51aS53aWRnZXRzLkRlY29yYXRvclNlbGVjdG9yLlByb3BlcnR5U2VsZWN0aW9uRXZlbnQpCisJCQkJCSAqLworCQkJCQlwdWJsaWMgdm9pZCBkZWNvcmF0b3JTZWxlY3RlZCgKKwkJCQkJCQlmaW5hbCBEZWNvcmF0b3JTZWxlY3Rpb25FdmVudCBkZWNvcmF0b3JTZWxlY3Rpb25FdmVudCkgeworCQkJCQkJc2VsZWN0ZWREZWNvcmF0b3IgPSBkZWNvcmF0b3JTZWxlY3Rpb25FdmVudAorCQkJCQkJCQkuZ2V0RGVjb3JhdG9yKCk7CisJCQkJCQlpZihzZWxlY3RlZERlY29yYXRvciE9bnVsbCkgeworCQkJCQkJCXN5bmNocm9uaXplZCh0aW1lU2VyaWVzQ2FudmFzKSB7CisJCQkJCQkJCQorCQkJCQkJCQlTdHJpbmcgc2VsZWN0ZWRQb3BJZCA9IGRlY29yYXRvclNlbGVjdGlvbkV2ZW50LmdldElkKCk7CisJCQkJCQkJCUxpc3Q8RHluYW1pY0xhYmVsPmFsbExhYmVscyA9IGRlY29yYXRvclRvTGFiZWxzTWFwLmdldChzZWxlY3RlZERlY29yYXRvcik7CisJCQkJCQkJCWlmKGFsbExhYmVscyAhPSBudWxsKSAKKwkJCQkJCQkJCWZvcihEeW5hbWljTGFiZWwgbGFiOmFsbExhYmVscykgeworCQkJCQkJCQkJaWYobGFiIGluc3RhbmNlb2YgRGlzZWFzZU1vZGVsTGFiZWwgJiYgKChEaXNlYXNlTW9kZWxMYWJlbClsYWIpLmdldFBvcHVsYXRpb25Nb2RlbExhYmVsKCkuZ2V0UG9wdWxhdGlvbklkZW50aWZpZXIoKS5lcXVhbHMoc2VsZWN0ZWRQb3BJZCkpIHsKKwkJCQkJCQkJCQlzZWxlY3RlZER5bmFtaWNMYWJlbCA9IGxhYjsKKwkJCQkJCQkJCQlicmVhazsKKwkJCQkJCQkJCX0KKwkJCQkJCQkJCWlmKGxhYiBpbnN0YW5jZW9mIFN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWwgJiYgKChTdGFuZGFyZFBvcHVsYXRpb25Nb2RlbExhYmVsKWxhYikuZ2V0UG9wdWxhdGlvbklkZW50aWZpZXIoKS5lcXVhbHMoc2VsZWN0ZWRQb3BJZCkpIHsKKwkJCQkJCQkJCQlzZWxlY3RlZER5bmFtaWNMYWJlbCA9IGxhYjsKKwkJCQkJCQkJCQlicmVhazsKKwkJCQkJCQkJCX0KKwkJCQkJCQkJfQorCQkJCQkJCQkvLyBUaGlzIHdpbGwgYWxzbyByZW1vdmUgdGhlIG9sZCBydmhwIGFzIGEgbGlzdGVuZXIKKwkJCQkJCQkJaWYoc2VsZWN0ZWREeW5hbWljTGFiZWwgIT0gbnVsbCkKKwkJCQkJCQkJCXN3aXRjaFRvUlZIUCgoUmVsYXRpdmVWYWx1ZUhpc3RvcnlQcm92aWRlckFkYXB0ZXIpIFJlbGF0aXZlVmFsdWVIaXN0b3J5UHJvdmlkZXJBZGFwdGVyRmFjdG9yeS5JTlNUQU5DRQorCQkJCQkJCQkJCS5hZGFwdChzZWxlY3RlZER5bmFtaWNMYWJlbCwKKwkJCQkJCQkJCQkJCVJlbGF0aXZlVmFsdWVIaXN0b3J5UHJvdmlkZXIuY2xhc3MpKTsKKwkJCQkJCQkJc2VsZWN0ZWRQcm9wZXJ0aWVzID0gZ2V0UHJvcGVydGllc1RvRGlzcGxheShzZWxlY3RlZERlY29yYXRvciwgc2VsZWN0ZWRQb3BJZCk7CisJCQkJCQkJCXRpbWVTZXJpZXNDYW52YXMuc2V0RGF0YVNvdXJjZUFuZFJlZHJhdyhydmhwLCBzZWxlY3RlZFByb3BlcnRpZXMpOworCQkJCQkJCX0KKwkJCQkJCX0vLyBpZiBkZWNvcmF0b3Igbm90IG51bGwKKwkJCQkJfQorCQkJCX0pOworCisJCXJlbW92ZUJ1dHRvbi5hZGRTZWxlY3Rpb25MaXN0ZW5lcihuZXcgU2VsZWN0aW9uQWRhcHRlcigpIHsKKwkJCUBPdmVycmlkZQorCQkJcHVibGljIHZvaWQgd2lkZ2V0U2VsZWN0ZWQoCisJCQkJCUBTdXBwcmVzc1dhcm5pbmdzKCJ1bnVzZWQiKSBmaW5hbCBTZWxlY3Rpb25FdmVudCBlKSB7CisJCQkJZmlyZVJlbW92ZUV2ZW50KGlkZW50aWZpYWJsZSk7CisJCQkJcmVtb3ZlKCk7CisJCQl9CisJCX0pOworCisJfSAvLyBjcmVhdGVDb250ZW50cworCisJLyoqCisJICogdG8gcmVtb3ZlIHRoZSBjb250cm9sIGUuZy4gYnkgYSByZW1vdmUgYnV0dG9uIGV2ZW50CisJICovCisJQE92ZXJyaWRlCisJQFN1cHByZXNzV2FybmluZ3MoImNhc3QiKQorCXB1YmxpYyB2b2lkIHJlbW92ZSgpIHsKKwkJcmVtb3ZlTGlzdGVuZXJzLmNsZWFyKCk7CisJCXN3aXRjaFRvUlZIUChudWxsKTsKKwkJcmVsYXRpdmVWYWx1ZUhpc3RvcnlFeHRlbmRlZChudWxsKTsKKwkJaWRlbnRpZmlhYmxlVGl0bGUuc2V0VGV4dCgiIik7CisJCWRlY29yYXRvclNlbGVjdG9yCisJCQkJLnNldERlY29yYXRvcnMoKExpc3Q8RGVjb3JhdG9yPikgQ29sbGVjdGlvbnMuRU1QVFlfTElTVCk7CisJCWRpc3Bvc2UoKTsKKwl9CisKKwkvKioKKwkgKiBAcGFyYW0gaWRlbnRpZmlhYmxlCisJICogICAgICAgICAgICB0aGUge0BsaW5rIElkZW50aWZpYWJsZX0gdG8gYmUgdGhlIHNvdXJjZSBvZiB0aGUgZGF0YSB0byBiZQorCSAqICAgICAgICAgICAgcGxvdHRlZC4KKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBzZXRJZGVudGlmaWFibGUoZmluYWwgSWRlbnRpZmlhYmxlIGlkZW50aWZpYWJsZSkgeworCisJCS8vIFNhbWUgSWRlbnRpZmlhYmxlPworCQlpZiAodGhpcy5pZGVudGlmaWFibGUgPT0gaWRlbnRpZmlhYmxlKSB7CisJCQkvLyBZZXMKKwkJCXJldHVybjsKKwkJfSAvLyBpZgorCisJCXRoaXMuaWRlbnRpZmlhYmxlID0gaWRlbnRpZmlhYmxlOworCisJCWZpbmFsIExpc3Q8RGVjb3JhdG9yPiBkZWNvcmF0b3JzID0gbmV3IEFycmF5TGlzdDxEZWNvcmF0b3I+KCk7CisJCWRlY29yYXRvclRvTGFiZWxzTWFwID0gbmV3IEhhc2hNYXA8RGVjb3JhdG9yLCBMaXN0PER5bmFtaWNMYWJlbD4+KCk7CisKKwkJaWRlbnRpZmlhYmxlVGl0bGUuc2V0VGV4dChpZGVudGlmaWFibGUuZ2V0RHVibGluQ29yZSgpLmdldFRpdGxlKCkpOworCQkvLyBHZXQgdGhlIGR5bmFtaWMgbGFiZWxzIGFzc29jaWF0ZWQgd2l0aCB0aGlzIElkZW50aWZpYWJsZQorCQkvLyBBIG5vZGU/CisJCWlmIChpZGVudGlmaWFibGUgaW5zdGFuY2VvZiBOb2RlKSB7CisJCQkvLyBZZXMKKwkJCWZpbmFsIE5vZGUgbm9kZSA9IChOb2RlKSBpZGVudGlmaWFibGU7CisJCQlmb3IgKGZpbmFsIE5vZGVMYWJlbCBub2RlTGFiZWwgOiBub2RlLmdldExhYmVscygpKSB7CisJCQkJLy8gVXBkYXRlZCBieSBhIGRlY29yYXRvcj8KKwkJCQlpZiAobm9kZUxhYmVsIGluc3RhbmNlb2YgRHluYW1pY05vZGVMYWJlbCkgeworCQkJCQkvLyBZZXMKKwkJCQkJZmluYWwgRHluYW1pY05vZGVMYWJlbCBkeW5hbWljTm9kZUxhYmVsID0gKER5bmFtaWNOb2RlTGFiZWwpIG5vZGVMYWJlbDsKKwkJCQkJLy8gQ2FuIGl0IHByb3ZpZGUgcmVsYXRpdmUgdmFsdWVzPworCQkJCQlmaW5hbCBSZWxhdGl2ZVZhbHVlSGlzdG9yeVByb3ZpZGVyQWRhcHRlciBydmhwID0gKFJlbGF0aXZlVmFsdWVIaXN0b3J5UHJvdmlkZXJBZGFwdGVyKSBSZWxhdGl2ZVZhbHVlSGlzdG9yeVByb3ZpZGVyQWRhcHRlckZhY3RvcnkuSU5TVEFOQ0UKKwkJCQkJCQkuYWRhcHQobm9kZUxhYmVsLCBSZWxhdGl2ZVZhbHVlSGlzdG9yeVByb3ZpZGVyLmNsYXNzKTsKKwkJCQkJaWYgKHJ2aHAgIT0gbnVsbCkgeworCQkJCQkJLy8gWWVzCisJCQkJCQlmaW5hbCBEZWNvcmF0b3IgZGVjb3JhdG9yID0gZHluYW1pY05vZGVMYWJlbAorCQkJCQkJCQkuZ2V0RGVjb3JhdG9yKCk7CisJCQkJCQkKKwkJCQkJCWlmKGRlY29yYXRvciAhPSBudWxsKSB7CisJCQkJCQkJaWYoZGVjb3JhdG9yVG9MYWJlbHNNYXAuZ2V0KGRlY29yYXRvcikhPW51bGwpIHsKKwkJCQkJCQkJTGlzdDxEeW5hbWljTGFiZWw+bGlzdCA9IGRlY29yYXRvclRvTGFiZWxzTWFwLmdldChkZWNvcmF0b3IpOworCQkJCQkJCQlsaXN0LmFkZChkeW5hbWljTm9kZUxhYmVsKTsKKwkJCQkJCQl9IGVsc2UgeworCQkJCQkJCQlBcnJheUxpc3Q8RHluYW1pY0xhYmVsPm5ld0xpc3QgPSBuZXcgQXJyYXlMaXN0PER5bmFtaWNMYWJlbD4oKTsKKwkJCQkJCQkJbmV3TGlzdC5hZGQoZHluYW1pY05vZGVMYWJlbCk7CisJCQkJCQkJCWRlY29yYXRvclRvTGFiZWxzTWFwLnB1dChkZWNvcmF0b3IsIG5ld0xpc3QpOworCQkJCQkJCX0KKwkJCQkJCQlpZiAoIWRlY29yYXRvcnMuY29udGFpbnMoZGVjb3JhdG9yKSkgeworCQkJCQkJCQlkZWNvcmF0b3JzLmFkZChkZWNvcmF0b3IpOworCQkJCQkJCX0KKwkJCQkJCX0KKwkJCQkJfSAvLyBpZgorCQkJCX0gLy8gaWYgRHluYW1pY05vZGVMYWJlbAorCQkJfSAvLyBmb3IgZWFjaCBOb2RlTGFiZWwKKworCQkJLy8gQXJlIHRoZXJlIGFueSBEZWNvcmF0b3JzIHRoYXQgd2UnbGwgcGxvdD8KKwkJCWlmIChkZWNvcmF0b3JzLnNpemUoKSA+IDApIHsKKwkJCQkvLyBZZXMKKwkJCQkvLyBXZSBuZWVkIHRvIGxpc3RlbiB0byB0aGUgbGlmZS1jeWNsZSBvZiB0aGUgU2ltdWxhdGlvbgorCQkJCS8vIGFzc29jaWF0ZWQgd2l0aCB0aGUgR3JhcGggdGhhdCBjb250YWlucyB0aGUgSWRlbnRpZmFibGUgdGhhdAorCQkJCS8vIHdhcyBwYXNzZWQgaW4uIFdoZW4gaXQgZGlzYXBwZWFycywgd2UgbmVlZCB0byAidW4taG9vayIKKwkJCQkvLyBvdXJzZWx2ZXMgZnJvbSB0aGUgUmVsYXRpdmVWYWx1ZUhpc3RvcnlQcm92aWRlckFkYXB0ZXIKKwkJCQkvLyBpbnN0YW5jZSBzbyB0aGF0IHRoZSBHcmFwaCB0aGF0IGl0IGlzIGF0dGFjaGVkIHRvIGNhbiBiZQorCQkJCS8vIGdhcmJhZ2UgY29sbGVjdGVkIGFuZCB3ZSBuZWVkIHRvIHJlc2V0IG91cnNlbHZlcyBzbyB0aGF0IHdlCisJCQkJLy8gZG9uJ3QgZGlzcGxheSBhIHBsb3QgZm9yIGEgU2ltdWxhdGlvbiB0aGF0IGRvZXNuJ3QgZXhpc3QgYW55CisJCQkJLy8gbW9yZS4KKwkJCQlmaW5hbCBJU2ltdWxhdGlvbiBuZXdTaW11bGF0aW9uID0gU2ltdWxhdGlvbk1hbmFnZXIKKwkJCQkJCS5nZXRNYW5hZ2VyKCkubWFwR3JhcGhUb1NpbXVsYXRpb24oZ2V0R3JhcGgobm9kZSkpOworCisJCQkJLy8gU3RvcCBsaXN0ZW5pbmcgdG8gdGhlIG9sZCBvbmU/CisJCQkJaWYgKHNpbXVsYXRpb24gIT0gbnVsbCkgeworCQkJCQkvLyBZZXMKKwkJCQkJc2ltdWxhdGlvbi5yZW1vdmVTaW11bGF0aW9uTGlzdGVuZXIodGhpcyk7CisJCQkJfSAvLyBpZgorCQkJCXNpbXVsYXRpb24gPSBuZXdTaW11bGF0aW9uOworCisJCQkJLy8gTGlzdGVuIHRvIHRoZSBuZXcgb25lPworCQkJCWlmIChzaW11bGF0aW9uICE9IG51bGwpIHsKKwkJCQkJLy8gWWVzCisJCQkJCXNpbXVsYXRpb24uYWRkU2ltdWxhdGlvbkxpc3RlbmVyKHRoaXMpOworCQkJCX0gLy8gaWYKKwkJCX0gLy8gaWYgYW55IERlY29yYXRvcnMgdG8gcGxvdAorCisJCX0gLy8gaWYgTm9kZQorCQlkZWNvcmF0b3JTZWxlY3Rvci5zZXREZWNvcmF0b3JzKGRlY29yYXRvcnMpOworCX0gLy8gc2V0SWRlbnRpZmlhYmxlCisKKwkKKworCQorCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5hZGFwdGVycy5yZWxhdGl2ZXZhbHVlLmhpc3RvcnkuUmVsYXRpdmVWYWx1ZUhpc3RvcnlFeHRlbmRlZExpc3RlbmVyI3JlbGF0aXZlVmFsdWVIaXN0b3J5RXh0ZW5kZWQob3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5hZGFwdGVycy5yZWxhdGl2ZXZhbHVlLmhpc3RvcnkuUmVsYXRpdmVWYWx1ZUhpc3RvcnlQcm92aWRlckFkYXB0ZXIpCisJICovCisJcHVibGljIHZvaWQgcmVsYXRpdmVWYWx1ZUhpc3RvcnlFeHRlbmRlZCgKKwkJCWZpbmFsIFJlbGF0aXZlVmFsdWVIaXN0b3J5UHJvdmlkZXJBZGFwdGVyIHJ2aHApIHsKKwkJLy8gVGhlIGV2ZW50IG5vdGlmaWNhdGlvbiBkb2Vzbid0IGNvbWUgZnJvbSB0aGUgVUkgdGhyZWFkIHNvIHdlIG5lZWQgdG8KKwkJLy8gYWRkIGEgUnVubmFibGUgdG8gdGhlIFVJIHRocmVhZCdzIGV4ZWN1dGlvbiBxdWV1ZSB0byBnaXZlIHRoZSBuZXcKKwkJLy8gc291cmNlIHRvIHRoZSBjaGFydAorCQkKKwkJLy8gSWYgYSBwbG90IHVwZGF0ZSBpcyBhbHJlYWR5IHNjaGVkdWxlZCwgdGhlbiBkb24ndCBhZGQgYW5vdGhlciB0byB0aGUgcXVldWUKKwkJaWYgKHBsb3RVcGRhdGVTY2hlZHVsZWQpIHsKKwkJCXJldHVybjsKKwkJfQorCQlmaW5hbCBEaXNwbGF5IGRpc3BsYXkgPSBEaXNwbGF5LmdldERlZmF1bHQoKTsKKwkJaWYgKCFkaXNwbGF5LmlzRGlzcG9zZWQoKSkgeworCQkJLy8gWWVzCisJCQl0cnkgeworCQkJCXBsb3RVcGRhdGVTY2hlZHVsZWQgPSB0cnVlOworCQkJCWRpc3BsYXkuYXN5bmNFeGVjKG5ldyBSdW5uYWJsZSgpIHsKKwkJCQkJcHVibGljIHZvaWQgcnVuKCkgeworCQkJCQkJdHJ5IHsKKwkJCQkJCQlpZiAoIXRpbWVTZXJpZXNDYW52YXMuaXNEaXNwb3NlZCgpKSB7CisJCQkJCQkJCXN5bmNocm9uaXplZCh0aW1lU2VyaWVzQ2FudmFzKSB7CisJCQkJCQkJCQl0aW1lU2VyaWVzQ2FudmFzLmRyYXcoKTsKKwkJCQkJCQkJfQorCQkJCQkJCX0KKwkJCQkJCX0gZmluYWxseSB7CisJCQkJCQkJcGxvdFVwZGF0ZVNjaGVkdWxlZCA9IGZhbHNlOworCQkJCQkJfQorCQkJCQl9IC8vIHJ1bgorCQkJCX0pOyAvLyBkaXNwbGF5LmFzeW5jRXhlYworCQkJfSAvLyB0cnkKKwkJCWNhdGNoIChmaW5hbCBFeGNlcHRpb24gZSkgeworCQkJCS8vIElnbm9yZSB0aGVyZSBjb3VsZCBiZSBhIHJhY2UgY29uZGl0aW9uIHdpdGggdGhlIGRpc3BsYXkgYmVpbmcKKwkJCQkvLyBkaXNwb3NlZCB3aGVuIHRoZSBzeXN0ZW0gaXMgc2h1dCBkb3duIHdpdGggYSBydW5uaW5nCisJCQkJLy8gc2ltdWxhdGlvbi4KKwkJCX0gLy8gY2F0Y2ggRXhjZXB0aW9uCisJCX0gLy8gaWYKKwl9IC8vIHJlbGF0aXZlVmFsdWVIaXN0b3J5RXh0ZW5kZWQKKworCS8qKgorCSAqIEluaXRpYWxpemUgdGhlIGNvbnRyb2wgZnJvbSBhCisJICoge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uam9icy5zaW11bGF0aW9uLlNpbXVsYXRpb259IGluc3RhbmNlLgorCSAqIAorCSAqIEBwYXJhbSBzaW11bGF0aW9uCisJICogICAgICAgICAgICB0aGUge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uam9icy5zaW11bGF0aW9uLlNpbXVsYXRpb259CisJICogICAgICAgICAgICB3aG9zZSBzdGF0ZSB3aWxsIGJlIHZpc3VhbGl6ZWQgaW4gdGhlIGNvbnRyb2wuCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgaW5pdGlhbGl6ZUZyb21TaW11bGF0aW9uKGZpbmFsIElTaW11bGF0aW9uIHNpbXVsYXRpb24pIHsKKwkJc2ltdWxhdGlvbk5hbWVMYWJlbC5zZXRUZXh0KHNpbXVsYXRpb24uZ2V0TmFtZSgpKTsKKwkJZGVjb3JhdG9yU2VsZWN0b3Iuc2V0U2ltdWxhdGlvbihzaW11bGF0aW9uKTsKKworCX0gLy8gaW5pdGlhbGl6ZUZyb21TaW11bGF0aW9uCisKKwkvKioKKwkgKiAKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCByZWZyZXNoMigpIHsKKwkJLy8gbm90aGluZworCX0gLy8gcmVmcmVzaDIKKworCS8qKgorCSAqIEBwYXJhbSBkZWNvcmF0b3IKKwkgKiAgICAgICAgICAgIGEge0BsaW5rIERlY29yYXRvcn0gdGhhdCBtb2RpZmllcyB0aGUgc3RhdGUgb2YgdGhlIGNhbm9uaWNhbAorCSAqICAgICAgICAgICAge0BsaW5rIEdyYXBofSBpbiB0aGUKKwkgKiAgICAgICAgICAgIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmpvYnMuc2ltdWxhdGlvbi5TaW11bGF0aW9ufS4KKwkgKiBAcGFyYW0gc2ltdWxhdGlvbgorCSAqICAgICAgICAgICAgdGhlIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmpvYnMuc2ltdWxhdGlvbi5TaW11bGF0aW9ufQorCSAqIEByZXR1cm4gYSB7QGxpbmsgTGlzdH0gb2YgdGhlIHByb3BlcnRpZXMgb2YgdGhlIHtAbGluayBEZWNvcmF0b3J9IHRoYXQKKwkgKiAgICAgICAgIGNhbiBzaG91bGQgYmUgZGlzcGxheWVkLgorCSAqLworCUxpc3Q8SUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I+IGdldFByb3BlcnRpZXNUb0Rpc3BsYXkoCisJCQlmaW5hbCBEZWNvcmF0b3IgZGVjb3JhdG9yLCBmaW5hbCBTdHJpbmcgcG9wdWxhdGlvbklkZW50aWZpZXIpIHsKKwkJZmluYWwgTGlzdDxJSXRlbVByb3BlcnR5RGVzY3JpcHRvcj4gcmV0VmFsdWUgPSBuZXcgQXJyYXlMaXN0PElJdGVtUHJvcGVydHlEZXNjcmlwdG9yPigpOworCQkvLyBHb3QgRGVjb3JhdG9yPworCQlpZiAoZGVjb3JhdG9yICE9IG51bGwpIHsKKwkJCS8vIFllcworCQkJLy8gQXJlIHRoZXJlIGFueSBsYWJlbHMgdG8gdXBkYXRlPworCQkJaWYgKCFkZWNvcmF0b3IuZ2V0TGFiZWxzVG9VcGRhdGUoKS5pc0VtcHR5KCkpIHsKKwkJCQkvLyBZZXMKKwkJCQlpZiAoZGVjb3JhdG9yIGluc3RhbmNlb2YgRGlzZWFzZU1vZGVsKSB7CisJCQkJCS8vIERpZmZlcmVudCBsYWJlbHMgZXhpc3QgZm9yIGRpZmZlcmVudCBwb3B1bGF0aW9ucworCQkJCQlyZXRWYWx1ZS5hZGRBbGwocHJvcGVydHlTaWV2ZS5zaWV2ZSgoKERpc2Vhc2VNb2RlbCkgZGVjb3JhdG9yKQorCQkJCQkJCS5jcmVhdGVEaXNlYXNlTW9kZWxMYWJlbChwb3B1bGF0aW9uSWRlbnRpZmllcikpKTsKKwkJCQl9IGVsc2UgeworCQkJCQkvLyBUaGUgZmlyc3Qgb25lIGlzIGdvb2QgZW5vdWdoCisJCQkJCXJldFZhbHVlLmFkZEFsbChwcm9wZXJ0eVNpZXZlLnNpZXZlKGRlY29yYXRvcgorCQkJCQkJCS5nZXRMYWJlbHNUb1VwZGF0ZSgpLmdldCgwKSkpOworCQkJCX0KKwkJCX0gLy8gaWYgbGFiZWxzIHRvIHVwZGF0ZQorCQl9IC8vIGlmIGdvdCBkZWNvcmF0b3IKKwkJcmV0dXJuIHJldFZhbHVlOworCX0gLy8gZ2V0UHJvcGVydGllc1RvRGlzcGxheQorCisJcHJpdmF0ZSBHcmFwaCBnZXRHcmFwaChmaW5hbCBOb2RlIG5vZGUpIHsKKwkJcmV0dXJuIChHcmFwaCkgbm9kZS5lQ29udGFpbmVyKCkuZUNvbnRhaW5lcigpOworCX0gLy8gZ2V0R3JhcGgKKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5qb2JzLnNpbXVsYXRpb24uSVNpbXVsYXRpb25MaXN0ZW5lciNzaW11bGF0aW9uQ2hhbmdlZChvcmcuZWNsaXBzZS5zdGVtLmpvYnMuc2ltdWxhdGlvbi5TaW11bGF0aW9uRXZlbnQpCisJICovCisJQFN1cHByZXNzV2FybmluZ3MoImNhc3QiKQorCXB1YmxpYyB2b2lkIHNpbXVsYXRpb25DaGFuZ2VkKGZpbmFsIFNpbXVsYXRpb25FdmVudCBldmVudCkgeworCQlpZiAoZXZlbnQuZ2V0U2ltdWxhdGlvblN0YXRlKCkgPT0gU2ltdWxhdGlvblN0YXRlLlJFU0VUKSB7CisJCQkvLyBZZXMKKwkJCXRpbWVTZXJpZXNDYW52YXMucmVzZXREYXRhKCk7CisJCX0gLy8gaWYKKwkJLy8gSXMgdGhlIFNpbXVsYXRpb24gc3RvcHBpbmcgKGkuZS4gYmVpbmcgZGVsZXRlZD8pCisJCWlmIChldmVudC5nZXRTaW11bGF0aW9uU3RhdGUoKSA9PSBTaW11bGF0aW9uU3RhdGUuU1RPUFBFRCkgeworCQkJLy8gWWVzCisJCQlpZihzaW11bGF0aW9uICE9bnVsbCkgeworCQkJCXNpbXVsYXRpb24ucmVtb3ZlU2ltdWxhdGlvbkxpc3RlbmVyKHRoaXMpOworCQkJCXNpbXVsYXRpb24gPSBudWxsOworCQkJCXN3aXRjaFRvUlZIUChudWxsKTsKKwkJCQlyZWxhdGl2ZVZhbHVlSGlzdG9yeUV4dGVuZGVkKG51bGwpOworCQkJCWlkZW50aWZpYWJsZVRpdGxlLnNldFRleHQoIiIpOworCQkJCWRlY29yYXRvclNlbGVjdG9yLnNldERlY29yYXRvcnMoKExpc3Q8RGVjb3JhdG9yPikgQ29sbGVjdGlvbnMuRU1QVFlfTElTVCk7CisJCQl9IAorCQkJCisJCX0gLy8gaWYKKworCX0gLy8gc2ltdWxhdGlvbkNoYW5nZWQKKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuV2lkZ2V0I2Rpc3Bvc2UoKQorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGRpc3Bvc2UoKSB7CisJCXN1cGVyLmRpc3Bvc2UoKTsKKwkJaWYgKHRoaXMucnZocCAhPSBudWxsKSB7CisJCQkvLyBZZXMKKwkJCXJ2aHAucmVtb3ZlRXh0ZW5zaW9uTGlzdGVuZXIodGhpcyk7CisJCX0gLy8gaWYKKwkJaWYgKHNpbXVsYXRpb24gIT0gbnVsbCkgeworCQkJLy8gWWVzCisJCQlzaW11bGF0aW9uLnJlbW92ZVNpbXVsYXRpb25MaXN0ZW5lcih0aGlzKTsKKwkJfSAvLyBpZgorCX0gLy8gZGlzcG9zZQorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnVpLnJlcG9ydHMudmlld3MuUmVwb3J0Q29udHJvbCNnZXRJZGVudGlmaWFibGUoKQorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBJZGVudGlmaWFibGUgZ2V0SWRlbnRpZmlhYmxlKCkgeworCQlyZXR1cm4gaWRlbnRpZmlhYmxlOworCX0KKwkKKwkvKioKKwkgKiBUaGlzIENvbnRyb2wgaXMgYXNzb2NpYXRlZCB3aXRoIGFuIElkZW50aWZpYWJsZQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS51aS5yZXBvcnRzLnZpZXdzLlJlcG9ydENvbnRyb2wjZ2V0Q29udHJvbFR5cGUoKQorCSAqLworCXB1YmxpYyBTdHJpbmcgZ2V0Q29udHJvbFR5cGUoKSB7CisJCXJldHVybiBSZXBvcnRDb250cm9sRmFjdG9yeS5JREVOVElGQUJMRV9UWVBFOworCX0KKworfSAvLyBSZWxhdGl2ZVZhbHVlSGlzdG9yeVBsb3R0ZXIKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5yZXBvcnRzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3JlcG9ydHMvdmlld3MvUmVwb3J0Q29udHJvbC5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLnJlcG9ydHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvcmVwb3J0cy92aWV3cy9SZXBvcnRDb250cm9sLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTJkNDQxMgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5yZXBvcnRzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3JlcG9ydHMvdmlld3MvUmVwb3J0Q29udHJvbC5qYXZhCkBAIC0wLDAgKzEsMzIzIEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0udWkucmVwb3J0cy52aWV3czsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuTWFwOworaW1wb3J0IGphdmEudXRpbC5jb25jdXJyZW50LkNvcHlPbldyaXRlQXJyYXlMaXN0OworCitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb25Qcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlNlbGVjdGlvbkNoYW5nZWRFdmVudDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLklkZW50aWZpYWJsZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguRHluYW1pY0xhYmVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5EZWNvcmF0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5hZGFwdGVycy5yZWxhdGl2ZXZhbHVlLmhpc3RvcnkuUmVsYXRpdmVWYWx1ZUhpc3RvcnlFeHRlbmRlZExpc3RlbmVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuYWRhcHRlcnMucmVsYXRpdmV2YWx1ZS5oaXN0b3J5LlJlbGF0aXZlVmFsdWVIaXN0b3J5UHJvdmlkZXJBZGFwdGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uam9icy5zaW11bGF0aW9uLklTaW11bGF0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uam9icy5zaW11bGF0aW9uLklTaW11bGF0aW9uTGlzdGVuZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LlNXVDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLkRpc3Bvc2VFdmVudDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLkRpc3Bvc2VMaXN0ZW5lcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QubGF5b3V0LkZpbGxMYXlvdXQ7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5Gb3JtTGF5b3V0OworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkJ1dHRvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuTGFiZWw7CisKKy8qKgorICogUmVwb3J0Q29udHJvbCBpcyBhIHN1YmNsYXNzIG9mIENhbnZhcyBzdWl0YWJsZSBmb3IgY2hhcnQgZHJhd2luZ3MuCisgKi8KK2Fic3RyYWN0IHB1YmxpYyBjbGFzcyBSZXBvcnRDb250cm9sIGV4dGVuZHMgQ29tcG9zaXRlIGltcGxlbWVudHMKKwkJUmVsYXRpdmVWYWx1ZUhpc3RvcnlFeHRlbmRlZExpc3RlbmVyLCBJU2ltdWxhdGlvbkxpc3RlbmVyLAorCQlJU2VsZWN0aW9uUHJvdmlkZXIgeworCisJcHJvdGVjdGVkIFJlbGF0aXZlVmFsdWVIaXN0b3J5UHJvdmlkZXJBZGFwdGVyIHJ2aHA7CisKKwlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIFN0cmluZyBSRU1PVkVfVEVYVCA9ICJyZW1vdmUiOworCQorCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgU3RyaW5nIEFERF9SRUZFUkVOQ0VfVEVYVCA9ICJBZGQgUmVmZXJlbmNlIjsKKworCXByb3RlY3RlZCBMYWJlbCBzaW11bGF0aW9uTmFtZUxhYmVsOworCisJLyoqCisJICogVGhlIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmpvYnMuc2ltdWxhdGlvbi5TaW11bGF0aW9ufSBhc3NvY2lhdGVkCisJICogd2l0aCB0aGUgdmFsdWVzIGJlaW5nIHBsb3R0ZWQuCisJICovCisJcHJvdGVjdGVkIElTaW11bGF0aW9uIHNpbXVsYXRpb24gPSBudWxsOworCisJLyoqCisJICogVGhlIHtAbGluayBJZGVudGlmaWFibGV9IHRoYXQgd2UncmUgcGxvdHRpbmcuCisJICovCisJcHJvdGVjdGVkIElkZW50aWZpYWJsZSBpZGVudGlmaWFibGU7CisJcHJvdGVjdGVkIERlY29yYXRvciBzZWxlY3RlZERlY29yYXRvcjsKKwlwcm90ZWN0ZWQgRHluYW1pY0xhYmVsIHNlbGVjdGVkRHluYW1pY0xhYmVsOworCXByb3RlY3RlZCBNYXA8RGVjb3JhdG9yLCBMaXN0PER5bmFtaWNMYWJlbD4+IGRlY29yYXRvclRvTGFiZWxzTWFwOworCisJLyoqCisJICogYnV0dG9uIHRvIHJlbW92ZSB0aGlzIGNvbnRyb2xsZXIgYW5kIHZpZXcKKwkgKi8KKwlwcm90ZWN0ZWQgQnV0dG9uIHJlbW92ZUJ1dHRvbiA9IG51bGw7CisJCisJLyoqCisJICogYnV0dG9uIHRvIGFkZCBhIHJlZmVyZW5jZSBkYXRhIHNldCB0byB0aGlzIHZpZXcKKwkgKi8KKwlwcm90ZWN0ZWQgQnV0dG9uIGFkZFJlZmVyZW5jZUJ1dHRvbiA9IG51bGw7CisJCisJLyoqCisJICogYnV0dG9uIHRvIGFkZCBhIHJlZmVyZW5jZSBkYXRhIHNldCB0byB0aGlzIHZpZXcKKwkgKi8KKwlwcm90ZWN0ZWQgTGFiZWwgYWRkUmVmZXJlbmNlTGFiZWwgPSBudWxsOworCisJLyoqCisJICogVGhlIGNvbGxlY3Rpb24gb2YgSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lciB3YWl0aW5nIHRvIGJlIHRvbGQgYWJvdXQKKwkgKiBzZWxlY3Rpb25zLgorCSAqLworCXByb3RlY3RlZCBmaW5hbCBMaXN0PElTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXI+IGxpc3RlbmVycyA9IG5ldyBDb3B5T25Xcml0ZUFycmF5TGlzdDxJU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyPigpOworCisJLyoqCisJICogVGhlIGNvbGxlY3Rpb24gb2YgSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lciB3YWl0aW5nIHRvIGJlIHRvbGQgYWJvdXQKKwkgKiBzZWxlY3Rpb25zLgorCSAqLworCXByb3RlY3RlZCBmaW5hbCBMaXN0PElSZW1vdmVMaXN0ZW5lcj4gcmVtb3ZlTGlzdGVuZXJzID0gbmV3IENvcHlPbldyaXRlQXJyYXlMaXN0PElSZW1vdmVMaXN0ZW5lcj4oKTsKKworCS8qKgorCSAqIFRoZSA8Y29kZT5JZGVudGlmaWFibGU8L2NvZGU+IHRoYXQgd2FzIG1vc3QgcmVjZW50bHkgc2VsZWN0ZWQsIG9yCisJICogPGNvZGU+bnVsbDwvY29kZT4gaWYgbm9uZSBoYXMgYmVlbiBzZWxlY3RlZC4KKwkgKi8KKwlJU2VsZWN0aW9uIHNlbGVjdGlvbiA9IG51bGw7CisKKwlwcm90ZWN0ZWQgTGFiZWwgaWRlbnRpZmlhYmxlVGl0bGU7CisKKwkvKioKKwkgKiBUaGUgd2lkdGggb2YgdGhlIGxheW91dCBtYXJnaW4uCisJICovCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBpbnQgTUFSR0lOX1dJRFRIID0gNTsKKworCS8qKgorCSAqIFRoZSBoZWlnaHQgb2YgdGhlIGxheW91dCBtYXJnaW4uCisJICovCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBpbnQgTUFSR0lOX0hFSUdIVCA9IDU7CisKKwkvKioKKwkgKiBAcGFyYW0gcGFyZW50CisJICogQHBhcmFtIHN0eWxlCisJICovCisJcHVibGljIFJlcG9ydENvbnRyb2woZmluYWwgQ29tcG9zaXRlIHBhcmVudCwgZmluYWwgaW50IHN0eWxlKSB7CisJCXN1cGVyKHBhcmVudCwgc3R5bGUpOworCisJCXRoaXMuYWRkRGlzcG9zZUxpc3RlbmVyKG5ldyBEaXNwb3NlTGlzdGVuZXIoKSB7CisJCQkvKioKKwkJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5EaXNwb3NlTGlzdGVuZXIjd2lkZ2V0RGlzcG9zZWQob3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5EaXNwb3NlRXZlbnQpCisJCQkgKi8KKwkJCXB1YmxpYyB2b2lkIHdpZGdldERpc3Bvc2VkKEBTdXBwcmVzc1dhcm5pbmdzKCJ1bnVzZWQiKQorCQkJZmluYWwgRGlzcG9zZUV2ZW50IGUpIHsKKwkJCQlkaXNwb3NlKCk7CisJCQl9CisJCX0pOworCisJCWZpbmFsIEZvcm1MYXlvdXQgbGF5b3V0ID0gbmV3IEZvcm1MYXlvdXQoKTsKKwkJbGF5b3V0Lm1hcmdpbkhlaWdodCA9IE1BUkdJTl9IRUlHSFQ7CisJCWxheW91dC5tYXJnaW5XaWR0aCA9IE1BUkdJTl9XSURUSDsKKwkJc2V0TGF5b3V0KGxheW91dCk7CisKKwl9IC8vIFJlcG9ydENvbnRyb2wKKworCS8qKgorCSAqIEBwYXJhbSBwYXJlbnQKKwkgKiAgICAgICAgICAgIHRoZSBwYXJlbnQgU1dUIGNvbnRyb2wgdGhhdCB0aGlzIGNvbXBvc2l0ZSB3aWxsIGJlIGEgY2hpbGQgb2YKKwkgKiBAcmV0dXJuIHRoZSBTV1QgQ29tcG9zaXRlIHRvIGJlIGRpc3BsYXllZCBhYm92ZSB0aGUgTWFwQ2FudmFzIGluIHRoZQorCSAqICAgICAgICAgY29udHJvbAorCSAqLworCXByb3RlY3RlZCBDb21wb3NpdGUgY3JlYXRlVG9wQ29tcG9zaXRlKGZpbmFsIENvbXBvc2l0ZSBwYXJlbnQpIHsKKwkJZmluYWwgQ29tcG9zaXRlIHRvcENvbXBvc2l0ZSA9IG5ldyBDb21wb3NpdGUocGFyZW50LCBTV1QuTk9ORSk7CisKKwkJZmluYWwgRmlsbExheW91dCB0b3BDb21wb3NpdGVMYXlvdXQgPSBuZXcgRmlsbExheW91dChTV1QuVkVSVElDQUwpOworCQl0b3BDb21wb3NpdGUuc2V0TGF5b3V0KHRvcENvbXBvc2l0ZUxheW91dCk7CisKKwkJc2ltdWxhdGlvbk5hbWVMYWJlbCA9IG5ldyBMYWJlbCh0b3BDb21wb3NpdGUsIFNXVC5DRU5URVIpOworCQlzaW11bGF0aW9uTmFtZUxhYmVsLnNldFRleHQoIiIpOworCisJCXJldHVybiB0b3BDb21wb3NpdGU7CisJfSAvLyBjcmVhdGVUb3BDb21wb3NpdGUKKworCXByb3RlY3RlZCB2b2lkIHN3aXRjaFRvUlZIUChmaW5hbCBSZWxhdGl2ZVZhbHVlSGlzdG9yeVByb3ZpZGVyQWRhcHRlciBydmhwKSB7CisJCS8vIElzIHRoZXJlIGFuIGV4aXN0aW5nIFJWSFAgdG8gc3RvcCBsaXN0ZW5pbmcgdG8/CisJCWlmICh0aGlzLnJ2aHAgIT0gbnVsbCAmJiB0aGlzLnJ2aHAgIT0gcnZocCkgeworCQkJLy8gWWVzCisJCQl0aGlzLnJ2aHAucmVtb3ZlRXh0ZW5zaW9uTGlzdGVuZXIodGhpcyk7CisJCX0gLy8gaWYKKworCQkvLyBTaG91bGQgd2Ugc3RhcnQgbGlzdGVuaW5nIHRvIHRoZSBuZXcgb25lPworCQlpZiAodGhpcy5ydmhwICE9IHJ2aHAgJiYgcnZocCAhPSBudWxsKSB7CisJCQkvLyBZZXMKKwkJCXJ2aHAuYWRkRXh0ZW5zaW9uTGlzdGVuZXIodGhpcyk7CisJCX0gLy8gaWYKKworCQl0aGlzLnJ2aHAgPSBydmhwOworCX0gLy8gc3dpdGNoVG9SVkhQCisKKwkvKioKKwkgKiBBbGwgY29udHJvbGxlcnMgbXVzdCBpbXBsZW1lbnQgdGhpcyB0byByZW1vdmUgdGhlIGNvbnRyb2wgZS5nLiBieSBhCisJICogcmVtb3ZlIGJ1dHRvbiBldmVudAorCSAqLworCXB1YmxpYyBhYnN0cmFjdCB2b2lkIHJlbW92ZSgpOworCisJLyoqCisJICogCisJICogQHBhcmFtIGxpc3RlbmVyCisJICovCisJcHVibGljIHZvaWQgYWRkSVJlbW92ZUxpc3RlbmVyKGZpbmFsIElSZW1vdmVMaXN0ZW5lciBsaXN0ZW5lcikgeworCQlyZW1vdmVMaXN0ZW5lcnMuYWRkKGxpc3RlbmVyKTsKKwl9CisKKwkvKioKKwkgKiAKKwkgKiBAcGFyYW0gbGlzdGVuZXIKKwkgKi8KKwlwdWJsaWMgdm9pZCByZW1vdmVJUmVtb3ZlTGlzdGVuZXIoZmluYWwgSVJlbW92ZUxpc3RlbmVyIGxpc3RlbmVyKSB7CisJCXJlbW92ZUxpc3RlbmVycy5yZW1vdmUobGlzdGVuZXIpOworCX0KKworCS8qKgorCSAqIAorCSAqIEBwYXJhbSBpZGVudAorCSAqLworCXB1YmxpYyB2b2lkIGZpcmVSZW1vdmVFdmVudChmaW5hbCBJZGVudGlmaWFibGUgaWRlbnQpIHsKKwkJZm9yIChmaW5hbCBJUmVtb3ZlTGlzdGVuZXIgbGlzdGVuZXIgOiByZW1vdmVMaXN0ZW5lcnMpIHsKKwkJCWxpc3RlbmVyLmlkZW50aWZpYWJsZVJlbW92ZWQoaWRlbnQpOworCQl9IC8vIGZvciBlYWNoIElTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIKKwl9CisKKwkvKioKKwkgKiBTZXR0aW5nIHRoZSB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5qb2JzLnNpbXVsYXRpb24uU2ltdWxhdGlvbn0gaGFzCisJICogdGhlIHNpZGUtZWZmZWN0IG9mIGNhdXNpbmcgdGhlIGNvbnRyb2wgdG8gcmVtb3ZlIGl0c2VsZiBhcyBhIGxpc3RlbmVyCisJICogZnJvbSBhbnkgcHJldmlvdXNseSBzZXQKKwkgKiB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5qb2JzLnNpbXVsYXRpb24uU2ltdWxhdGlvbn0gYW5kIGFkZGluZyBpdHNlbGYKKwkgKiBhcyBhIGxpc3RlbmVyIHRvIHRoZSBuZXcgb25lLiBJdCB3aWxsIGFsc28gY2F1c2UgdGhlIGltYWdlIHRvIGJlCisJICogaW5pdGlhbGl6ZWQgZnJvbSB0aGUgY29udGVudHMgb2YgdGhlIG5ldworCSAqIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmpvYnMuc2ltdWxhdGlvbi5TaW11bGF0aW9ufSBhcyBhcHByb3ByaWF0ZS4KKwkgKiAKKwkgKiBAcGFyYW0gc2ltdWxhdGlvbgorCSAqICAgICAgICAgICAgdGhlIHNpbXVsYXRpb24gd2hvc2UgTGF0L0xvbmcgZGF0YSB3aWxsIGJlIHJlbmRlcmVkLgorCSAqLworCXB1YmxpYyB2b2lkIHNldFNpbXVsYXRpb24oZmluYWwgSVNpbXVsYXRpb24gc2ltdWxhdGlvbikgeworCQkvLyBBbnkgbmVlZCB0byBzd2l0Y2g/CisJCWlmICh0aGlzLnNpbXVsYXRpb24gPT0gc2ltdWxhdGlvbikgeworCQkJLy8gTm8KKwkJCXJldHVybjsKKwkJfSAvLyBpZiBubyBuZWVkIHRvIHN3aXRjaD8KKworCQkvLyBTaG91bGQgd2UgcmVtb3ZlIG91cnNlbHZlcyBhcyBsaXN0ZW5lcnMgZnJvbSB0aGUgY3VycmVudCBzaW11bGF0aW9uPworCQlpZiAodGhpcy5zaW11bGF0aW9uICE9IG51bGwpIHsKKwkJCS8vIFllcworCQkJdGhpcy5zaW11bGF0aW9uLnJlbW92ZVNpbXVsYXRpb25MaXN0ZW5lcih0aGlzKTsKKwkJfQorCisJCXRoaXMuc2ltdWxhdGlvbiA9IHNpbXVsYXRpb247CisJCXNlbGVjdGlvbiA9IG51bGw7CisJCS8vIFdhcyB0aGVyZSBhIG5ldyBzaW11bGF0aW9uIHRvIHN3aXRjaCB0bz8KKwkJaWYgKHRoaXMuc2ltdWxhdGlvbiAhPSBudWxsKSB7CisJCQkvLyBZZXMKKwkJCXRoaXMuc2ltdWxhdGlvbi5hZGRTaW11bGF0aW9uTGlzdGVuZXIodGhpcyk7CisJCQlpbml0aWFsaXplRnJvbVNpbXVsYXRpb24odGhpcy5zaW11bGF0aW9uKTsKKwkJfSBlbHNlIHsKKwkJCS8vIE5vCisJCQkvLyBKdXN0IGRpc3BsYXkgYSBibGFuayBzY3JlZW4KKwkJCWluaXRpYWxpemVGcm9tU2ltdWxhdGlvbihudWxsKTsKKwkJfQorCisJCXJlZnJlc2gyKCk7CisJfSAvLyBzZXRTaW11bGF0aW9uCisKKwkvKioKKwkgKiAKKwkgKiBAcGFyYW0gc2ltdWxhdGlvbgorCSAqLworCXByb3RlY3RlZCBhYnN0cmFjdCB2b2lkIGluaXRpYWxpemVGcm9tU2ltdWxhdGlvbigKKwkJCWZpbmFsIElTaW11bGF0aW9uIHNpbXVsYXRpb24pOworCisJLyoqCisJICogCisJICovCisJcHJvdGVjdGVkIGFic3RyYWN0IHZvaWQgcmVmcmVzaDIoKTsKKworCS8qKgorCSAqIEByZXR1cm4gdGhlIHNlbGVjdGlvbgorCSAqLworCXB1YmxpYyBmaW5hbCBJU2VsZWN0aW9uIGdldFNlbGVjdGlvbigpIHsKKwkJcmV0dXJuIHNlbGVjdGlvbjsKKwl9CisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvblByb3ZpZGVyI3NldFNlbGVjdGlvbihvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb24pCisJICovCisJcHVibGljIHZvaWQgc2V0U2VsZWN0aW9uKGZpbmFsIElTZWxlY3Rpb24gc2VsZWN0aW9uKSB7CisJCXRoaXMuc2VsZWN0aW9uID0gc2VsZWN0aW9uOworCQlmaXJlU2VsZWN0aW9uKHNlbGVjdGlvbik7CisJfQorCisJLyoqCisJICogCisJICogQHBhcmFtIGlkZW50aWZpYWJsZQorCSAqLworCXB1YmxpYyBhYnN0cmFjdCB2b2lkIHNldElkZW50aWZpYWJsZShJZGVudGlmaWFibGUgaWRlbnRpZmlhYmxlKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIElkZW50aWZpYWJsZSBiZWluZyBkaXNwbGF5ZWQKKwkgKiAKKwkgKiBAcmV0dXJuIFRoZSBpZGVudGlmaWFibGUgdG8gYmUgbW9uaXRvcmVkCisJICogCisJICovCisJcHVibGljIGFic3RyYWN0IElkZW50aWZpYWJsZSBnZXRJZGVudGlmaWFibGUoKTsKKworCS8qKgorCSAqIFBhc3MgYSB7QGxpbmsgU2VsZWN0aW9uQ2hhbmdlZEV2ZW50fSBhbG9uZyB0byBsaXN0ZW5lcnMuCisJICogCisJICogQHBhcmFtIHNlbGVjdGlvbgorCSAqICAgICAgICAgICAgdGhlIHtAbGluayBJU2VsZWN0aW9ufSB0byBiZSBnaXZpbmcgdG8gdGhlIGxpc3RlbmVycy4KKwkgKi8KKwlwdWJsaWMgdm9pZCBmaXJlU2VsZWN0aW9uKGZpbmFsIElTZWxlY3Rpb24gc2VsZWN0aW9uKSB7CisKKwkJZmluYWwgU2VsZWN0aW9uQ2hhbmdlZEV2ZW50IGV2ZW50ID0gbmV3IFNlbGVjdGlvbkNoYW5nZWRFdmVudCh0aGlzLAorCQkJCXNlbGVjdGlvbik7CisJCWZvciAoZmluYWwgSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lciBsaXN0ZW5lciA6IGxpc3RlbmVycykgeworCQkJbGlzdGVuZXIuc2VsZWN0aW9uQ2hhbmdlZChldmVudCk7CisJCX0gLy8gZm9yIGVhY2ggSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcgorCisJfSAvLyBmaXJlU2VsZWN0aW9uCisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvblByb3ZpZGVyI2FkZFNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcihvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIpCisJICovCisJcHVibGljIHZvaWQgYWRkU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyKAorCQkJZmluYWwgSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lciBsaXN0ZW5lcikgeworCQlsaXN0ZW5lcnMuYWRkKGxpc3RlbmVyKTsKKwl9CisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvblByb3ZpZGVyI3JlbW92ZVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcihvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIpCisJICovCisJcHVibGljIHZvaWQgcmVtb3ZlU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyKAorCQkJZmluYWwgSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lciBsaXN0ZW5lcikgeworCQlsaXN0ZW5lcnMucmVtb3ZlKGxpc3RlbmVyKTsKKwl9CisJCisJLyoqCisJICogT25lIG9mIHR3byBDb250cm9sIHR5cGVzLiBDb250cm9scyBhcmUgYXNzb2NpYXRlZCB3aXRoIGVpdGhlciBhbiBpbmRpdmlkdWFsCisJICogSWRlbnRpZmlhYmxlIG9yIGEgU2ltdWxhdGlvbgorCSAqIEByZXR1cm4gdGhlIGNvbnRyb2wgdHlwZQorCSAqLworCXB1YmxpYyBhYnN0cmFjdCBTdHJpbmcgZ2V0Q29udHJvbFR5cGUoKSA7CisKK30gLy8gUmVwb3J0Q29udHJvbApkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLnJlcG9ydHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvcmVwb3J0cy92aWV3cy9SZXBvcnRDb250cm9sRmFjdG9yeS5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLnJlcG9ydHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvcmVwb3J0cy92aWV3cy9SZXBvcnRDb250cm9sRmFjdG9yeS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNmMTBhNjcKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkucmVwb3J0cy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9yZXBvcnRzL3ZpZXdzL1JlcG9ydENvbnRyb2xGYWN0b3J5LmphdmEKQEAgLTAsMCArMSw1MyBAQAorLy8gUmVwb3J0Q29udHJvbEZhY3RvcnkuamF2YQorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnVpLnJlcG9ydHMudmlld3M7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGU7CisKKy8qKgorICogVGhpcyBpbnRlcmZhY2UgaXMgaW1wbGVtZW50ZWQgYnkgZmFjdG9yaWVzIHRoYXQgY3JlYXRlIGluc3RhbmNlcyBvZgorICoge0BsaW5rIFJlcG9ydENvbnRyb2x9LgorICovCitwdWJsaWMgaW50ZXJmYWNlIFJlcG9ydENvbnRyb2xGYWN0b3J5IHsKKwkKKwkvKioKKwkgKiBPbmUgb2YgdHdvIGZhY3RvcnkgdHlwZXMuIFRoaXMgZmFjdG9yeSB0eXBlIGNyZWF0ZXMgYSBjb250cm9sIGFzc29jaWF0ZWQgd2l0aCBhbiBpbmRpdmlkdWFsCisJICogaWRlbnRpZmlhYmxlCisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgSURFTlRJRkFCTEVfVFlQRSA9ICJJREVOVElGSUFCTEVfQ09OVFJPTF9GQUNUT1JZIjsKKwkvKioKKwkgKiBPbmUgb2YgdHdvIGZhY3RvcnkgdHlwZXMuIFRoaXMgZmFjdG9yeSB0eXBlIGNyZWF0ZXMgYSBjb250cm9sIGFzc29jaWF0ZWQgd2l0aCBhbiBpbmRpdmlkdWFsCisJICogU2ltdWxhdGlvbgorCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFNJTVVMQVRJT05fVFlQRSA9ICJTSU1VTEFUSU9OX0NPTlRST0xfRkFDVE9SWSI7CisJCisJCisJLyoqCisJICogQHBhcmFtIHBhcmVudAorCSAqICAgICAgICAgICAgdGhlIHBhcmVudCBvZiB0aGUgY29udHJvbAorCSAqIEByZXR1cm4gYSBuZXcge0BsaW5rIFJlcG9ydENvbnRyb2x9IGluc3RhbmNlLgorCSAqLworCVJlcG9ydENvbnRyb2wgY3JlYXRlKGZpbmFsIENvbXBvc2l0ZSBwYXJlbnQpOworCisJLyoqCisJICogQHJldHVybiB0aGUgdW5pcXVlIHR5cGUgb2YgY29udHJvbAorCSAqLworCXB1YmxpYyBTdHJpbmcgZ2V0VW5pcXVlQ29udHJvbE5hbWUoKTsKKwkKKwkvKioKKwkgKiBAcmV0dXJuIHRoZSB1bmlxdWUgZmFjdG9yeSB0eXBlCisJICovCisJcHVibGljIFN0cmluZyBnZXRGYWN0b3J5VHlwZSgpOworCit9IC8vIFJlcG9ydENvbnRyb2xGYWN0b3J5CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkucmVwb3J0cy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9yZXBvcnRzL3ZpZXdzL1JlcG9ydFZpZXdlci5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLnJlcG9ydHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvcmVwb3J0cy92aWV3cy9SZXBvcnRWaWV3ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42Y2UxYWNjCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLnJlcG9ydHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvcmVwb3J0cy92aWV3cy9SZXBvcnRWaWV3ZXIuamF2YQpAQCAtMCwwICsxLDk2NiBAQAorLy8gUmVwb3J0Vmlld2VyLmphdmEKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS51aS5yZXBvcnRzLnZpZXdzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGphdmEuaW8uRmlsZTsKK2ltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOworaW1wb3J0IGphdmEudXRpbC5BcnJheXM7CitpbXBvcnQgamF2YS51dGlsLkhhc2hTZXQ7CitpbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOworaW1wb3J0IGphdmEudXRpbC5MaW5rZWRIYXNoU2V0OworaW1wb3J0IGphdmEudXRpbC5MaXN0OworaW1wb3J0IGphdmEudXRpbC5TZXQ7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVBhdGg7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlVSSTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5kaWFsb2dzLkRpYWxvZ1NldHRpbmdzOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmRpYWxvZ3MuSURpYWxvZ1NldHRpbmdzOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5TZWxlY3Rpb25DaGFuZ2VkRXZlbnQ7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5WaWV3ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5JZGVudGlmaWFibGU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkdyYXBoOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5Ob2RlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uam9icy5zaW11bGF0aW9uLklTaW11bGF0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uam9icy5zaW11bGF0aW9uLklTaW11bGF0aW9uTWFuYWdlckxpc3RlbmVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uam9icy5zaW11bGF0aW9uLlNpbXVsYXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5qb2JzLnNpbXVsYXRpb24uU2ltdWxhdGlvbk1hbmFnZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5qb2JzLnNpbXVsYXRpb24uU2ltdWxhdGlvbk1hbmFnZXJFdmVudDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnVpLnJlcG9ydHMuQWN0aXZhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udWkudmlld3MuZ2VvZ3JhcGhpYy5tYXAuTWFwQ29udHJvbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuU1dUOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuRGlzcG9zZUV2ZW50OworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuRGlzcG9zZUxpc3RlbmVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5sYXlvdXQuRmlsbExheW91dDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29udHJvbDsKKworLyoqCisgKiBUaGlzIGNsYXNzIHByZXNlbnRzICJ2aWV3cyIgb2YgdGhlIHJ1bm5pbmcgc2ltdWxhdGlvbnMuCisgKi8KK3B1YmxpYyBjbGFzcyBSZXBvcnRWaWV3ZXIgZXh0ZW5kcyBWaWV3ZXIgaW1wbGVtZW50cyBJU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyLAorCQlJU2ltdWxhdGlvbk1hbmFnZXJMaXN0ZW5lciB7CisKKwkvKioKKwkgKiBUaGlzIGlzIHRoZSBjb2xsZWN0aW9uIG9mIHtAbGluayBJZGVudGlmaWFibGV9cyB0byBkaXNwbGF5ICgKKwkgKiB7QGxpbmsgTm9kZX1zIGZvciBub3cpCisJICoge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uam9icy5zaW11bGF0aW9uLlNpbXVsYXRpb259cyB0aGF0IHNob3VsZCBiZQorCSAqIGRpc3BsYXllZC4KKwkgKi8KKwlwcml2YXRlIGZpbmFsIFNldDxJZGVudGlmaWFibGU+IGlkZW50aWZpYWJsZXNUb0Rpc3BsYXkgPSBuZXcgTGlua2VkSGFzaFNldDxJZGVudGlmaWFibGU+KCk7CisKKwkvKioKKwkgKiBUaGlzIGlzIHRoZSB7QGxpbmsgU2ltdWxhdGlvbk1hbmFnZXJ9IHRoYXQgaXMgdGhlIGlucHV0IHRvIHRoZSB2aWV3ZXIuIEl0CisJICogbWFpbnRhaW5zIGEgY29sbGVjdGlvbiBvZiBhY3RpdmUKKwkgKiB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5qb2JzLnNpbXVsYXRpb24uU2ltdWxhdGlvbn1zIGluIHRoZSBzeXN0ZW0uCisJICogVGhpcyB2aWV3ZXIgbGlzdGVucyB0byBpdCB0byBkaXNjb3ZlciB3aGVuIG5ldworCSAqIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmpvYnMuc2ltdWxhdGlvbi5TaW11bGF0aW9ufXMgYXJlIGNyZWF0ZWQgYW5kCisJICogb2xkIG9uZXMgZGlzYXBwZWFyLgorCSAqIAorCSAqIEBzZWUgI3NpbXVsYXRpb25zQ2hhbmdlZChTaW11bGF0aW9uTWFuYWdlckV2ZW50KQorCSAqLworCXByaXZhdGUgU2ltdWxhdGlvbk1hbmFnZXIgc2ltdWxhdGlvbk1hbmFnZXI7CisKKwkvKioKKwkgKiBUaGUge0BsaW5rIElkZW50aWZpYWJsZX0gdGhhdCB3YXMgbW9zdCByZWNlbnRseSBzZWxlY3RlZCBieSBhIHVzZXIKKwkgKiBjbGlja2luZyBvbiBvbmUgb2YgdGhlCisJICoge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0udWkudmlld3MuZ2VvZ3JhcGhpYy5tYXAuTWFwQ29udHJvbH1zLCBvcgorCSAqIDxjb2RlPm51bGw8L2NvZGU+IGlmIG5vbmUgaGFzIGJlZW4gc2VsZWN0ZWQuCisJICovCisJcHJpdmF0ZSBJU2VsZWN0aW9uIHNlbGVjdGlvbiA9IG51bGw7CisKKwkvKioKKwkgKiBUaGlzIGlzIHRoZSB0b3AtbGV2ZWwgY29udHJvbCBvZiB0aGUgdmlld2VyLiBJdCBjb250YWlucyB0aGUKKwkgKiB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS51aS52aWV3cy5nZW9ncmFwaGljLm1hcC5NYXBDb250cm9sfXMgdGhhdAorCSAqIGRpc3BsYXkgdGhlIGN1cnJlbnQgc3RhdGUgb2YgdGhlCisJICoge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uam9icy5zaW11bGF0aW9uLlNpbXVsYXRpb259cy4KKwkgKi8KKwlmaW5hbCBDb21wb3NpdGUgY29tcG9zaXRlOworCisJLyoqCisJICogdGhlIHVzZXIncyBwcmVmZXJlbmNlcyBhcmUgc3RvcmVkIGluIHtAbGluayBEaWFsb2dTZXR0aW5nc30KKwkgKi8KKwlwcml2YXRlIERpYWxvZ1NldHRpbmdzIG1hc3RlclNldHRpbmdzID0gbnVsbDsKKworCS8qKgorCSAqIFNldCBvZiBwcmVmZXJyZWQgTG9jYXRpb25zIHRvIG1vbml0b3IgcmVhZCBmcm9tIHRoZQorCSAqIHtAbGluayBEaWFsb2dTZXR0aW5nc30KKwkgKi8KKwlwcml2YXRlIGZpbmFsIFNldDxTdHJpbmc+IG1vbml0b3JTZXQgPSBuZXcgSGFzaFNldDxTdHJpbmc+KCk7CisKKwkvKioKKwkgKiByb290IGtleSBlbGVtZW50IGZvciB0aGUge0BsaW5rIERpYWxvZ1NldHRpbmdzfSB4bWwgZmlsZQorCSAqLworCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBST09UX0tFWSA9ICJyb290IjsKKworCS8qKgorCSAqIENvbnN0YW50cyBmb3Igc2F2aW5nIFJlcG9ydFZpZXdQcmVmZXJlbmNlcworCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFJFUE9SVFZJRVdQUkVGRVJFTkNFU19GSUxFTkFNRSA9ICJQcmVmZXJlbmNlcy50eHQiOworCisJLyoqCisJICogVE9ETyBKRksKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBMT0NBVElPTl9QUkVGRVJFTkNFX0tFWSA9ICJsb2NhdGlvbi5pZHMiOworCisJLy8gZ2V0IHRoZSBwYXRoCisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgSVBhdGggUEFUSCA9IEFjdGl2YXRvci5nZXREZWZhdWx0KCkuZ2V0U3RhdGVMb2NhdGlvbigpOworCisJLyoqCisJICogVGhpcyBmYWN0b3J5IGlzIHVzZWQgdG8gY3JlYXRlIGluc3RhbmNlcyBvZiB7QGxpbmsgUmVwb3J0Q29udHJvbH0gaW4gdGhlCisJICogbWV0aG9kIHtAbGluayAjcG9wdWxhdGVWaWV3KCl9CisJICovCisJcHJpdmF0ZSBmaW5hbCBSZXBvcnRDb250cm9sRmFjdG9yeSByY2Y7CisKKwkvKioKKwkgKiBAcGFyYW0gcGFyZW50CisJICogICAgICAgICAgICB0aGUgU1dUIHBhcmVudCBvZiB0aGUgY29udHJvbCB0aGF0IG1ha2VzIHVwIHRoZSB2aWV3ZXIKKwkgKiBAcGFyYW0gcmNmCisJICogICAgICAgICAgICB0aGUgZmFjdG9yeSB0aGF0IGNyZWF0ZXMgaW5zdGFuY2Ugb2Yge0BsaW5rIFJlcG9ydENvbnRyb2x9CisJICovCisJcHVibGljIFJlcG9ydFZpZXdlcihmaW5hbCBDb21wb3NpdGUgcGFyZW50LCBmaW5hbCBSZXBvcnRDb250cm9sRmFjdG9yeSByY2YpIHsKKworCQljb21wb3NpdGUgPSBuZXcgQ29tcG9zaXRlKHBhcmVudCwgU1dULk5PTkUpOworCQlmaW5hbCBGaWxsTGF5b3V0IGNvbXBvc2l0ZUxheW91dCA9IG5ldyBGaWxsTGF5b3V0KFNXVC5IT1JJWk9OVEFMKTsKKwkJY29tcG9zaXRlLnNldExheW91dChjb21wb3NpdGVMYXlvdXQpOworCisJCS8vIFJlbWVtYmVyIHRoZSBmYWN0b3J5IHRoYXQgd2UnbGwgdXNlIHRvIGNyZWF0ZSBpbnN0YW5jZXMgb2YKKwkJLy8gUmVwb3J0Q29udHJvbAorCQl0aGlzLnJjZiA9IHJjZjsKKwkJcmVmcmVzaCgpOworCQljb21wb3NpdGUucGFjaygpOworCisJfSAvLyBSZXBvcnRWaWV3ZXIKKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5WaWV3ZXIjZ2V0Q29udHJvbCgpCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIENvbnRyb2wgZ2V0Q29udHJvbCgpIHsKKwkJcmV0dXJuIGNvbXBvc2l0ZTsKKwl9IC8vIGdldENvbnRyb2wKKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5WaWV3ZXIjZ2V0U2VsZWN0aW9uKCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgSVNlbGVjdGlvbiBnZXRTZWxlY3Rpb24oKSB7CisJCXJldHVybiBzZWxlY3Rpb247CisJfQorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlZpZXdlciNyZWZyZXNoKCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCByZWZyZXNoKCkgeworCQlpZiAoc2ltdWxhdGlvbk1hbmFnZXIgIT0gbnVsbCkgeworCQkJLy8gWWVzCisJCQlMaXN0PElTaW11bGF0aW9uPiBhbGxTaW11bGF0aW9ucyA9IG51bGw7CisJCQlMaXN0PElTaW11bGF0aW9uPiBhY3RpdmVTaW11bGF0aW9ucyA9IHNpbXVsYXRpb25NYW5hZ2VyLmdldEFjdGl2ZVNpbXVsYXRpb25zKCk7CisJCQlpZigoYWN0aXZlU2ltdWxhdGlvbnMhPW51bGwpJiYoYWN0aXZlU2ltdWxhdGlvbnMuc2l6ZSgpPj0xKSkgeworCQkJCWZvciAoaW50IGk9MCA7IGkgPCBhY3RpdmVTaW11bGF0aW9ucy5zaXplKCk7IGkgKyspIHsKKwkJCQkJSVNpbXVsYXRpb24gc2ltID0gYWN0aXZlU2ltdWxhdGlvbnMuZ2V0KGkpOworCQkJCQl1cGRhdGVQcmVmZXJlbmNlU3RhdGUoc2ltKTsKKwkJCQl9CisJCQl9CisJCQkKKwkJCWFsbFNpbXVsYXRpb25zID0gc2ltdWxhdGlvbk1hbmFnZXIuZ2V0QWN0aXZlU2ltdWxhdGlvbnMoKTsKKwkJCWFkZFRvRGlzcGxheWVkSWRlbnRpZmlhYmxlU2V0KGFsbFNpbXVsYXRpb25zKTsKKworCQkJaWRlbnRpZmlhYmxlc1RvRGlzcGxheS5jbGVhcigpOworCQkJaWRlbnRpZmlhYmxlc1RvRGlzcGxheS5hZGRBbGwoZ2V0SWRlbnRpZmlhYmxlc0luU2ltdWxhdGlvbihhbGxTaW11bGF0aW9ucykpOworCQl9IC8vIGlmCisJCS8vIGNhbGxpbmcgd2l0aCBudWxsIG1lYW5zIHRoaXMgaXMgYSBuZXcgaWRlbnRpZmlhYmxlIGZvciBhbiAKKwkJLy8gYWN0aXZlIHNpbXVsYXRpb24gYnV0IG5vdCBhIG5ldyBzaW11bGF0aW9uCisJCWlmKHJjZi5nZXRGYWN0b3J5VHlwZSgpLmVxdWFscyhSZXBvcnRDb250cm9sRmFjdG9yeS5JREVOVElGQUJMRV9UWVBFKSl7CisJCQlwb3B1bGF0ZVZpZXcoKTsKKwkJfSBlbHNlIHsKKwkJCXBvcHVsYXRlVmlldyhudWxsKTsKKwkJfQorCQkKKwl9IC8vIHJlZnJlc2gKKworCS8qKgorCSAqIAorCSAqIEBwYXJhbSBpZGVudAorCSAqLworCXB1YmxpYyB2b2lkIGFkZE1vbml0b3IoZmluYWwgSWRlbnRpZmlhYmxlIGlkZW50KSB7CisKKwkJLy8gdGhpcyBmaXhlcyBhIGJ1ZyB3aGVyZSBjbGlja3MgaW4gdGhlCisJCS8vIERlc2lnbmVyIHBlcnNwZWN0aXZlIHdlcmUgY3JlYXRpbmcgbmV3IFJlcG9ydFZpZXdzCisJCWlmICghKGlkZW50IGluc3RhbmNlb2YgTm9kZSkpIHsKKwkJCXJldHVybjsKKwkJfQorCQlpZGVudGlmaWFibGVzVG9EaXNwbGF5LmFkZChpZGVudCk7CisJCXBvcHVsYXRlVmlldygpOworCQkvLyBwcmVmZXJlbmNlIHN0YXRlIGhhcyBjaGFuZ2VkCisJCXNhdmVQcmVmZXJlbmNlU3RhdGUoKTsKKwkJLy8gYWRkICB0byBtb25pdG9yIHNldAorCQltb25pdG9yU2V0LmFkZChpZGVudC5nZXRVUkkoKS50b1N0cmluZygpKTsKKwl9IC8vIGFkZE1vbml0b3IKKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5WaWV3ZXIjZ2V0SW5wdXQoKQorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBPYmplY3QgZ2V0SW5wdXQoKSB7CisJCXJldHVybiBzaW11bGF0aW9uTWFuYWdlcjsKKwl9CisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuVmlld2VyI3NldElucHV0KGphdmEubGFuZy5PYmplY3QpCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgc2V0SW5wdXQoZmluYWwgT2JqZWN0IGlucHV0KSB7CisJCWZpbmFsIE9iamVjdCBvbGRJbnB1dCA9IHNpbXVsYXRpb25NYW5hZ2VyOworCQlzaW11bGF0aW9uTWFuYWdlciA9IChTaW11bGF0aW9uTWFuYWdlcikgaW5wdXQ7CisJCWlucHV0Q2hhbmdlZChpbnB1dCwgb2xkSW5wdXQpOworCX0gLy8gc2V0SW5wdXQKKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5WaWV3ZXIjaW5wdXRDaGFuZ2VkKGphdmEubGFuZy5PYmplY3QsCisJICogICAgICBqYXZhLmxhbmcuT2JqZWN0KQorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIGlucHV0Q2hhbmdlZChmaW5hbCBPYmplY3QgaW5wdXQsIGZpbmFsIE9iamVjdCBvbGRJbnB1dCkgeworCQkvLyBJcyB0aGVyZSBhbHJlYWR5IGEgc2ltdWxhdGlvbiBtYW5hZ2VyPworCQlpZiAob2xkSW5wdXQgIT0gbnVsbCkgeworCQkJLy8gWWVzCisJCQkoKFNpbXVsYXRpb25NYW5hZ2VyKSBvbGRJbnB1dCkucmVtb3ZlTGlzdGVuZXIodGhpcyk7CisJCX0gLy8gaWYKKworCQkvLyBSZWdpc3RlciB3aXRoIHRoZSBTaW11bGF0aW9uTWFuYWdlciB0byBsaXN0ZW4gZm9yIGNoYW5nZXMgaW4gdGhlIHNldAorCQkvLyBvZiBhY3RpdmUgU2ltdWxhdGlvbnMuCisJCS8vIEdvdCBpbnB1dD8KKwkJaWYgKGlucHV0ICE9IG51bGwpIHsKKwkJCS8vIFllcworCQkJKChTaW11bGF0aW9uTWFuYWdlcikgaW5wdXQpLmFkZFNpbXVsYXRpb25NYW5hZ2VyTGlzdGVuZXIodGhpcyk7CisJCX0gLy8gaWYKKworCQkvLyBVcGRhdGUgdGhlIHZpZXdlciB3aXRoIHRoZSBjb250ZW50cyBvZiB0aGUgbmV3IGlucHV0IHNvdXJjZQorCQlyZWZyZXNoKCk7CisJfSAvLyBpbnB1dENoYW5nZWQKKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5WaWV3ZXIjc2V0U2VsZWN0aW9uKG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvbiwKKwkgKiAgICAgIGJvb2xlYW4pCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgc2V0U2VsZWN0aW9uKGZpbmFsIElTZWxlY3Rpb24gc2VsZWN0aW9uLAorCQkJQFN1cHByZXNzV2FybmluZ3MoInVudXNlZCIpIGZpbmFsIGJvb2xlYW4gcmV2ZWFsKSB7CisJCXRoaXMuc2VsZWN0aW9uID0gc2VsZWN0aW9uOworCX0KKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyI3NlbGVjdGlvbkNoYW5nZWQob3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5TZWxlY3Rpb25DaGFuZ2VkRXZlbnQpCisJICovCisJcHVibGljIHZvaWQgc2VsZWN0aW9uQ2hhbmdlZChmaW5hbCBTZWxlY3Rpb25DaGFuZ2VkRXZlbnQgZXZlbnQpIHsKKworCQkvLyBEaWQgdGhlIGV2ZW50IGNvbWUgZnJvbSBhIFJlcG9ydENvbnRyb2w/CisJCWlmIChldmVudC5nZXRTZWxlY3Rpb25Qcm92aWRlcigpIGluc3RhbmNlb2YgUmVwb3J0Q29udHJvbCkgeworCQkJLy8gWWVzCisJCQkvLyBKdXN0IHBhc3MgaXQgYWxvbmcKKwkJCXNlbGVjdGlvbiA9IGV2ZW50LmdldFNlbGVjdGlvbigpOworCQkJZmlyZVNlbGVjdGlvbkNoYW5nZWQoZXZlbnQpOworCQl9IC8vIGlmCisJfSAvLyBzZWxlY3Rpb25DaGFuZ2VkCisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uam9icy5zaW11bGF0aW9uLklTaW11bGF0aW9uTWFuYWdlckxpc3RlbmVyI3NpbXVsYXRpb25zQ2hhbmdlZChvcmcuZWNsaXBzZS5zdGVtLmpvYnMuc2ltdWxhdGlvbi5TaW11bGF0aW9uTWFuYWdlckV2ZW50KQorCSAqLworCXB1YmxpYyB2b2lkIHNpbXVsYXRpb25zQ2hhbmdlZChmaW5hbCBTaW11bGF0aW9uTWFuYWdlckV2ZW50IGV2ZW50KSB7CisJCQorCQkvLyBJbml0IHRoZSBwcmVmZXJlbmNlCisJCXJlbW92ZUZyb21EaXNwbGF5ZWRTaW11bGF0aW9uU2V0KEFycmF5cy5hc0xpc3QoZXZlbnQuZ2V0U2ltdWxhdGlvbnNSZW1vdmVkKCkpKTsKKwkJTGlzdDxJU2ltdWxhdGlvbj4gbmV3U2ltdWxhdGlvbkxpc3QgPSBBcnJheXMuYXNMaXN0KGV2ZW50LmdldFNpbXVsYXRpb25zQWRkZWQoKSk7CisJCWlmKChuZXdTaW11bGF0aW9uTGlzdCE9bnVsbCkmJihuZXdTaW11bGF0aW9uTGlzdC5zaXplKCkgPj0xKSkgeworCQkJZm9yIChpbnQgaSA9IDA7ICBpIDwgbmV3U2ltdWxhdGlvbkxpc3Quc2l6ZSgpOyBpICsrKSB7CisJCQkJSVNpbXVsYXRpb24gc2ltID0gbmV3U2ltdWxhdGlvbkxpc3QuZ2V0KGkpOworCQkJCXVwZGF0ZVByZWZlcmVuY2VTdGF0ZShzaW0pOworCQkJCWFkZFRvRGlzcGxheWVkSWRlbnRpZmlhYmxlU2V0KHNpbSk7CisJCQkJcG9wdWxhdGVWaWV3KCk7IC8vIHRoZSB0aW1lIHNlcmllcyBjaGFydHMKKwkJCQkvLyBuZXcgc2ltdWxhdGlvbiAhIQorCQkJCXBvcHVsYXRlVmlldyhzaW0pOy8vIHRoZSBhZ2dyZWdhdGUgY2hhcnRzCisJCQl9CisJCX0KKwkJCisJfSAvLyBzaW11bGF0aW9uc0NoYW5nZWQKKworCS8qKgorCSAqIEBwYXJhbSBzaW11bGF0aW9ucworCSAqICAgICAgICAgICAgdGhlIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmpvYnMuc2ltdWxhdGlvbi5TaW11bGF0aW9ufXMKKwkgKiAgICAgICAgICAgIHRvIGFkZCB0byB0aGUgc2V0IGJlaW5nIGRpc3BsYXllZC4KKwkgKi8KKwlwcml2YXRlIHZvaWQgYWRkVG9EaXNwbGF5ZWRJZGVudGlmaWFibGVTZXQoCisJCQlmaW5hbCBMaXN0PElTaW11bGF0aW9uPiBzaW11bGF0aW9ucykgeworCQkvLyBBbnkgc2ltdWxhdGlvbnMgdG8gYWRkPworCQlpZiAoIXNpbXVsYXRpb25zLmlzRW1wdHkoKSkgeworCQkJLy8gWWVzCisJCQlpZGVudGlmaWFibGVzVG9EaXNwbGF5CisJCQkJCS5hZGRBbGwoZ2V0SWRlbnRpZmlhYmxlc0luU2ltdWxhdGlvbihzaW11bGF0aW9ucykpOworCQl9IC8vIGlmIGFueSBzaW11bGF0aW9ucworCX0gLy8gYWRkVG9EaXNwbGF5ZWRTaW11bGF0aW9uU2V0CisKKwkvKioKKwkgKiBAcGFyYW0gc2ltdWxhdGlvbnMKKwkgKiAgICAgICAgICAgIHRoZSB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5qb2JzLnNpbXVsYXRpb24uU2ltdWxhdGlvbn1zCisJICogICAgICAgICAgICB0byBhZGQgdG8gdGhlIHNldCBiZWluZyBkaXNwbGF5ZWQuCisJICovCisJcHJpdmF0ZSB2b2lkIGFkZFRvRGlzcGxheWVkSWRlbnRpZmlhYmxlU2V0KElTaW11bGF0aW9uIHNpbSkgewkJCisJCQlpZGVudGlmaWFibGVzVG9EaXNwbGF5LmFkZEFsbChnZXRJZGVudGlmaWFibGVzSW5TaW11bGF0aW9uKHNpbSkpOworCX0gLy8gYWRkVG9EaXNwbGF5ZWRTaW11bGF0aW9uU2V0CisKKwkKKwkvKioKKwkgKiBAcGFyYW0gc2ltdWxhdGlvbnMKKwkgKiAgICAgICAgICAgIHRoZSB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5qb2JzLnNpbXVsYXRpb24uU2ltdWxhdGlvbn1zCisJICogICAgICAgICAgICB0byByZW1vdmUgZnJvbSB0aGUgc2V0IGJlaW5nIGRpc3BsYXllZC4KKwkgKi8KKwlwcml2YXRlIHZvaWQgcmVtb3ZlRnJvbURpc3BsYXllZFNpbXVsYXRpb25TZXQoCisJCQlmaW5hbCBMaXN0PElTaW11bGF0aW9uPiBzaW11bGF0aW9ucykgeworCQkvLyBBbnkgc2ltdWxhdGlvbnMgdG8gcmVtb3ZlPworCQlpZiAoIXNpbXVsYXRpb25zLmlzRW1wdHkoKSkgeworCQkJLy8gWWVzCisJCQlmaW5hbCBTZXQ8SWRlbnRpZmlhYmxlPiBkZWZ1bmN0SWRlbnRpZmlhYmxlcyA9IGdldElkZW50aWZpYWJsZXNJblNpbXVsYXRpb24oc2ltdWxhdGlvbnMpOworCQkJaWRlbnRpZmlhYmxlc1RvRGlzcGxheS5yZW1vdmVBbGwoZGVmdW5jdElkZW50aWZpYWJsZXMpOworCQkJY2xlYW51cChkZWZ1bmN0SWRlbnRpZmlhYmxlcyk7CisJCX0gLy8gaWYKKwl9IC8vIHJlbW92ZUZyb21EaXNwbGF5ZWRTaW11bGF0aW9uU2V0CisKKwkvKioKKwkgKiBjbGVhbnMgdXAgb2xkIGRpc3BsYXlzCisJICogCisJICogQHBhcmFtIGRlZnVuY3RJZGVudGlmaWFibGVzCisJICovCisJcHJpdmF0ZSB2b2lkIGNsZWFudXAoZmluYWwgU2V0PElkZW50aWZpYWJsZT4gZGVmdW5jdElkZW50aWZpYWJsZXMpIHsKKwkJaWYgKGRlZnVuY3RJZGVudGlmaWFibGVzICE9IG51bGwpIHsKKwkJCWZpbmFsIEl0ZXJhdG9yPElkZW50aWZpYWJsZT4gaXRlciA9IGRlZnVuY3RJZGVudGlmaWFibGVzLml0ZXJhdG9yKCk7CisJCQl3aGlsZSAoKGl0ZXIgIT0gbnVsbCkgJiYgKGl0ZXIuaGFzTmV4dCgpKSkgeworCQkJCWZpbmFsIElkZW50aWZpYWJsZSBpZGVudCA9IGl0ZXIubmV4dCgpOworCQkJCW1vbml0b3JTZXQucmVtb3ZlKGlkZW50LmdldFVSSSgpLnRvU3RyaW5nKCkpOworCQkJfSAvLyB3aGlsZQorCisJCQlpZighY29tcG9zaXRlLmlzRGlzcG9zZWQoKSkgeworCQkJCWZpbmFsIENvbnRyb2xbXSBhbGxDb250cm9scyA9IGNvbXBvc2l0ZS5nZXRDaGlsZHJlbigpOworCQkJCQorCQkJCWZvciAoZmluYWwgQ29udHJvbCBlbGVtZW50IDogYWxsQ29udHJvbHMpIHsKKwkJCQkJZmluYWwgUmVwb3J0Q29udHJvbCByZXBvcnRDb250cm9sID0gKFJlcG9ydENvbnRyb2wpIGVsZW1lbnQ7CisJCQkJCXRyeSB7CisJCQkJCQlmaW5hbCBJZGVudGlmaWFibGUgdGVzdElkZW50aWZpYWJsZSA9IHJlcG9ydENvbnRyb2wKKwkJCQkJCQkJLmdldElkZW50aWZpYWJsZSgpOworCQkJCQkJaWYgKCh0ZXN0SWRlbnRpZmlhYmxlID09IG51bGwpCisJCQkJCQkJCXx8ICghaWRlbnRpZmlhYmxlc1RvRGlzcGxheQorCQkJCQkJCQkJCS5jb250YWlucyh0ZXN0SWRlbnRpZmlhYmxlKSkpIHsKKwkJCQkJCQkvLyBkaXNwb3NlIGlmIHdlIGtub3cgaXQgaXMgZGVmdW5jdAorCQkJCQkJCXJlcG9ydENvbnRyb2wucmVtb3ZlKCk7CisJCQkJCQl9IC8vIGlmCisJCQkJCX0gY2F0Y2ggKG9yZy5lY2xpcHNlLnN3dC5TV1RFeGNlcHRpb24gc3d0ZSkgeworCQkJCQkJLy8gaWYgV2lkZ2V0IGlzIGFscmVhZHkgZGlzcG9zZWQganVzdCBkbyBub3RoaW5nCisJCQkJCQkvLyBBY3RpdmF0b3IubG9nSW5mb3JtYXRpb24oInN3dGU6ICIrc3d0ZS5nZXRNZXNzYWdlKCkpOworCQkJCQl9CisJCisJCQkJfSAvLyBmb3IgZWFjaCBSZXBvcnRDb250cm9sCisJCQl9CisKKwkJfS8vIGlmIHNldCBub3QgbnVsbAorCX0vLyBjbGVhbnVwCisKKwlwcm90ZWN0ZWQgdm9pZCByZW1vdmVJZGVudGlmaWFibGUoZmluYWwgSWRlbnRpZmlhYmxlIGlkZW50KSB7CisJCS8vIEFueSBzaW11bGF0aW9ucyB0byByZW1vdmU/CisJCWlmIChpZGVudCAhPSBudWxsKSB7CisJCQkvLyBZZXMKKwkJCWlkZW50aWZpYWJsZXNUb0Rpc3BsYXkucmVtb3ZlKGlkZW50KTsKKworCQkJLy8gcHJlZmVyZW5jZSBzdGF0ZSBoYXMgY2hhbmdlZAorCQkJc2F2ZVByZWZlcmVuY2VTdGF0ZSgpOworCisJCX0gLy8gaWYKKwl9IC8vIHJlbW92ZUZyb21EaXNwbGF5ZWRTaW11bGF0aW9uU2V0CisKKwkvKioKKwkgKiBDcmVhdGUgYW5kIGRpc3Bvc2Ugb2Yge0BsaW5rIE1hcENvbnRyb2x9cyBhcyBuZWNlc3NhcnkgdG8gZGlzcGxheSB0aGUKKwkgKiBzZWxlY3RlZCB7QGxpbmsgU2ltdWxhdGlvbn1zLgorCSAqLworCXByaXZhdGUgdm9pZCBwb3B1bGF0ZVZpZXcoSVNpbXVsYXRpb24gc2ltKSB7CisJCS8vIFRIRSBBZ2dyZWdhdGUgY29udHJvbCBpcyBhIHNwZWNpYWwgY2FzZS4gQWxsIG90aGVycyBoYW5kbGVkIGJ5IHRoZSBvdGhlciBwb3B1bGF0ZVZpZXcgbWV0aG9kCisJCWlmKCAhICh0aGlzLnJjZi5nZXRGYWN0b3J5VHlwZSgpLmVxdWFscyhSZXBvcnRDb250cm9sRmFjdG9yeS5TSU1VTEFUSU9OX1RZUEUpKSkgcmV0dXJuOworCQlib29sZWFuIGZvdW5kQ29udHJvbCA9IGZhbHNlOworCQkvLyBwcm9ibGVtIGhlcmUgd2hlbiB3ZSBzdGFydCB1cAorCQkvLyBBcmUgd2UgZG9uZT8KKwkJaWYgKGNvbXBvc2l0ZS5pc0Rpc3Bvc2VkKCkpIHsKKwkJCS8vIFllcworCQkJcmV0dXJuOworCQl9IC8vIGlmCisKKwkJc2VsZWN0aW9uID0gbnVsbDsKKwkJCisJCUxpc3Q8SVNpbXVsYXRpb24+IGFjdGl2ZVNpbUxpc3QgPSBTaW11bGF0aW9uTWFuYWdlci5nZXRNYW5hZ2VyKCkuZ2V0QWN0aXZlU2ltdWxhdGlvbnMoKTsKKwkJU2V0PElTaW11bGF0aW9uPiBhY3RpdmVTaW1TZXQgPSBuZXcgSGFzaFNldDxJU2ltdWxhdGlvbj4oKTsKKwkJYWN0aXZlU2ltU2V0LmFkZEFsbChhY3RpdmVTaW1MaXN0KTsKKworCQlpZihzaW0gIT0gbnVsbCkgeworCQkJLy8gR28gdGhyb3VnaCB0aGUgY3VycmVudCBzZXQgb2YgQ29udHJvbHMgbG9va2luZyBmb3Igb25lcyB0aGF0CisJCQkvLyB3ZSBjYW4gcmVhc3NpZ24KKwkJCWZpbmFsIENvbnRyb2xbXSBjb250cm9scyA9IGNvbXBvc2l0ZS5nZXRDaGlsZHJlbigpOworCQkJZm9yIChmaW5hbCBDb250cm9sIGVsZW1lbnQgOiBjb250cm9scykgeworCQkJCS8vIERvZXMgdGhpcyBSZXBvcnRDb250cm9sIGhhdmUgYSBzaW11bGF0aW9uIHRoYXQgaXMgc3RpbGwgdmFsaWQKKwkJCQkvLyB0byBkaXNwbGF5PworCQkJCWZpbmFsIFJlcG9ydENvbnRyb2wgcmVwb3J0Q29udHJvbCA9IChSZXBvcnRDb250cm9sKSBlbGVtZW50OworCQkJCS8vIFRIRSBBZ2dyZWdhdGUgY29udHJvbCBpcyBhIHNwZWNpYWwgY2FzZQorCQkJCWlmKHJlcG9ydENvbnRyb2wuZ2V0Q29udHJvbFR5cGUoKS5lcXVhbHMoUmVwb3J0Q29udHJvbEZhY3RvcnkuU0lNVUxBVElPTl9UWVBFKSkgeworCQkJCQlpZihyZXBvcnRDb250cm9sLnNpbXVsYXRpb249PW51bGwpIHsKKwkJCQkJCXJlcG9ydENvbnRyb2wuc2V0U2ltdWxhdGlvbihzaW0pOworCQkJCQkJcmVwb3J0Q29udHJvbC5yZWRyYXcoKTsKKwkJCQkJCWZvdW5kQ29udHJvbCA9IHRydWU7CisJCQkJCX0KKwkJCQl9IAorCQkJfSAvLyBmb3IgZWFjaCBNYXBDb250cm9sCisKKwkJCS8vIEF0IHRoaXMgcG9pbnQgd2Ugc3RpbGwgY291bGQgaGF2ZSBtYXAgY29udHJvbHMgd2l0aCBpbnZhbGlkCisJCQkvLyBpZGVudGlmaWFibGVzLCBsZXQncyBnZXQgcmlkIG9mIHRoZW0KKwkJCWZvciAoZmluYWwgQ29udHJvbCBlbGVtZW50IDogY29udHJvbHMpIHsKKwkJCQlmaW5hbCBSZXBvcnRDb250cm9sIHJlcG9ydENvbnRyb2wgPSAoUmVwb3J0Q29udHJvbCkgZWxlbWVudDsKKwkJCQkKKwkJCQlpZihyZXBvcnRDb250cm9sLmdldENvbnRyb2xUeXBlKCkuZXF1YWxzKFJlcG9ydENvbnRyb2xGYWN0b3J5LlNJTVVMQVRJT05fVFlQRSkpIHsKKwkJCQkJLy8gRG9lcyB0aGlzIE1hcENvbnRyb2wgaGF2ZSBhIHNpbXVsYXRpb24gdGhhdCBpcyBzdGlsbCB2YWxpZCB0bworCQkJCQkvLyBkaXNwbGF5PworCQkJCQkvLyBUSEUgQWdncmVnYXRlIGNvbnRyb2wgaXMgYSBzcGVjaWFsIGNhc2UKKwkJCQkJaWYocmVwb3J0Q29udHJvbC5zaW11bGF0aW9uIT1udWxsKSB7CisJCQkJCQlpZighYWN0aXZlU2ltU2V0LmNvbnRhaW5zKHJlcG9ydENvbnRyb2wuc2ltdWxhdGlvbikpIHsKKwkJCQkJCQlyZXBvcnRDb250cm9sLnJlbW92ZVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcih0aGlzKTsKKwkJCQkJCQlyZXBvcnRDb250cm9sLmRpc3Bvc2UoKTsKKwkJCQkJCX0KKwkJCQkJfQkKKwkJCQl9IAorCQkJfS8vIGZvciBlYWNoIE1hcENvbnRyb2wKKwkJCQorCQkJaWYoIWZvdW5kQ29udHJvbCkgeworCQkJCS8vIFdlIG5lZWQgYSBuZXcgY29udHJvbCBmb3IgdGhpcyBzaW11bGF0aW9uCisJCQkJZmluYWwgUmVwb3J0Q29udHJvbCByZXBvcnRDb250cm9sID0gcmNmLmNyZWF0ZShjb21wb3NpdGUpOworCQkJCXJlcG9ydENvbnRyb2wuYWRkU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyKHRoaXMpOworCQkJCXJlcG9ydENvbnRyb2wuc2V0U2ltdWxhdGlvbihzaW0pOworCQkJCQorCQkJCS8vIG11c3QgbGlzdGVuIC0gd2hlbiB0aGUgY2hpbGRyZW4gZ28gYXdheSB3ZSBubyBsb25nZXIgd2FudCB0bworCQkJCS8vIG1vbml0b3IgdGhlbQorCisJCQkJLyoqCisJCQkJICogY2FsbGVkIHdoZW4gYSByZW1vdmUgd2lkZ2V0IGlzIHByZXNzZWQKKwkJCQkgKi8KKwkJCQlyZXBvcnRDb250cm9sLmFkZElSZW1vdmVMaXN0ZW5lcihuZXcgSVJlbW92ZUxpc3RlbmVyKCkgeworCQkJCQkvKioKKwkJCQkJICogQHNlZSBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLkRpc3Bvc2VMaXN0ZW5lciN3aWRnZXREaXNwb3NlZChvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLkRpc3Bvc2VFdmVudCkKKwkJCQkJICovCisJCQkJCXB1YmxpYyB2b2lkIGlkZW50aWZpYWJsZVJlbW92ZWQoZmluYWwgSWRlbnRpZmlhYmxlIGlkZW50KSB7CisJCQkJCQlyZW1vdmVJZGVudGlmaWFibGUoaWRlbnQpOworCQkJCQl9CisJCQkJfSk7CisJCQkJcmVwb3J0Q29udHJvbC5hZGREaXNwb3NlTGlzdGVuZXIobmV3IERpc3Bvc2VMaXN0ZW5lcigpIHsKKwkJCQkJLyoqCisJCQkJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5EaXNwb3NlTGlzdGVuZXIjd2lkZ2V0RGlzcG9zZWQob3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5EaXNwb3NlRXZlbnQpCisJCQkJCSAqLworCQkJCQlwdWJsaWMgdm9pZCB3aWRnZXREaXNwb3NlZCgKKwkJCQkJCQlAU3VwcHJlc3NXYXJuaW5ncygidW51c2VkIikgZmluYWwgRGlzcG9zZUV2ZW50IGUpIHsKKwkJCQkJCWNvbXBvc2l0ZS5sYXlvdXQodHJ1ZSwgdHJ1ZSk7CisJCQkJCQljb21wb3NpdGUucmVkcmF3KCk7CisJCQkJCX0KKwkJCQl9KTsKKwkJCX0gLy8gbm90IGZvdW5kIGNvbnRyb2wKKwkJfSAvLyBzaW0gbm90IG51bGwKKwkJZWxzZSB7CisJCQkvLyBJZiB0aGVyZSBhcmUgbm8gc2ltdWxhdGlvbnMgdG8gZGlzcGxheSwgd2UganVzdCBwdXQgdXAgYSAiYmxhbmsiCisJCQkvLyBSZXBvcnRDb250cm9sCisJCQlpZiAoY29tcG9zaXRlLmdldENoaWxkcmVuKCkubGVuZ3RoID09IDApIHsKKwkJCQkvLyBZZXMKKwkJCQlmaW5hbCBSZXBvcnRDb250cm9sIHJlcG9ydENvbnRyb2wgPSByY2YuY3JlYXRlKGNvbXBvc2l0ZSk7CisJCQkJcmVwb3J0Q29udHJvbC5hZGRTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIodGhpcyk7CisKKwkJCQkvKioKKwkJCQkgKiBjYWxsZWQgd2hlbiBhIHJlbW92ZSB3aWRnZXQgaXMgcHJlc3NlZAorCQkJCSAqLworCQkJCXJlcG9ydENvbnRyb2wuYWRkSVJlbW92ZUxpc3RlbmVyKG5ldyBJUmVtb3ZlTGlzdGVuZXIoKSB7CisJCQkJCS8qKgorCQkJCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuRGlzcG9zZUxpc3RlbmVyI3dpZGdldERpc3Bvc2VkKG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuRGlzcG9zZUV2ZW50KQorCQkJCQkgKi8KKwkJCQkJcHVibGljIHZvaWQgaWRlbnRpZmlhYmxlUmVtb3ZlZChmaW5hbCBJZGVudGlmaWFibGUgaWRlbnQpIHsKKwkJCQkJCXJlbW92ZUlkZW50aWZpYWJsZShpZGVudCk7CisJCQkJCX0KKwkJCQl9KTsKKwkJCQlyZXBvcnRDb250cm9sLmFkZERpc3Bvc2VMaXN0ZW5lcihuZXcgRGlzcG9zZUxpc3RlbmVyKCkgeworCQkJCQkvKioKKwkJCQkJICogQHNlZSBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLkRpc3Bvc2VMaXN0ZW5lciN3aWRnZXREaXNwb3NlZChvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLkRpc3Bvc2VFdmVudCkKKwkJCQkJICovCisJCQkJCXB1YmxpYyB2b2lkIHdpZGdldERpc3Bvc2VkKAorCQkJCQkJCUBTdXBwcmVzc1dhcm5pbmdzKCJ1bnVzZWQiKSBmaW5hbCBEaXNwb3NlRXZlbnQgZSkgeworCQkJCQkJY29tcG9zaXRlLmxheW91dCh0cnVlLCB0cnVlKTsKKwkJCQkJCWNvbXBvc2l0ZS5yZWRyYXcoKTsKKwkJCQkJfQorCQkJCX0pOworCQkJfSAvLyBpZgorCQl9CisJCQorCQkKKwkJY29tcG9zaXRlLmxheW91dCh0cnVlLCB0cnVlKTsKKwkJY29tcG9zaXRlLnJlZHJhdygpOworCX0gLy8gcG9wdWxhdGVWaWV3KElTaW11bGF0aW9uKQorCQorCQorCQorCQorCQorCQorCQorCQorCQorCS8qKgorCSAqIENyZWF0ZSBhbmQgZGlzcG9zZSBvZiB7QGxpbmsgTWFwQ29udHJvbH1zIGFzIG5lY2Vzc2FyeSB0byBkaXNwbGF5IHRoZQorCSAqIHNlbGVjdGVkIHtAbGluayBTaW11bGF0aW9ufXMuCisJICovCisJcHJpdmF0ZSB2b2lkIHBvcHVsYXRlVmlldygpIHsKKwkJLy8gVEhFIEFnZ3JlZ2F0ZSBjb250cm9sIGlzIGEgc3BlY2lhbCBjYXNlIGhhbmRsZWQgYnkgdGhlIG90aGVyIHBvcHVsYXRlVmlldyBtZXRob2QKKwkJCisJCWlmKHRoaXMucmNmLmdldEZhY3RvcnlUeXBlKCkuZXF1YWxzKFJlcG9ydENvbnRyb2xGYWN0b3J5LlNJTVVMQVRJT05fVFlQRSkgKSByZXR1cm47CisJCQorCQkvLyBwcm9ibGVtIGhlcmUgd2hlbiB3ZSBzdGFydCB1cAorCQkvLyBBcmUgd2UgZG9uZT8KKwkJaWYgKGNvbXBvc2l0ZS5pc0Rpc3Bvc2VkKCkpIHsKKwkJCS8vIFllcworCQkJcmV0dXJuOworCQl9IC8vIGlmCisKKwkJc2VsZWN0aW9uID0gbnVsbDsKKwkJCisJCS8vIEZpbmQgdGhlIFNpbXVsYXRpb25zIHRoYXQgYXJlIG5vdCBjdXJyZW50bHkgYmVpbmcgZGlzcGxheWVkIGFuZCBwdXQKKwkJLy8gdGhlbSBpbnRvIHRoZSBTZXQgdW5kaXNwbGF5ZWRTaW11bGF0aW9ucy4KKwkJZmluYWwgU2V0PElkZW50aWZpYWJsZT4gdW5kaXNwbGF5ZWRJZGVudGlmaWFibGVzID0gbmV3IEhhc2hTZXQ8SWRlbnRpZmlhYmxlPigpOworCQlmb3IgKGZpbmFsIElkZW50aWZpYWJsZSBub2RlIDogaWRlbnRpZmlhYmxlc1RvRGlzcGxheSkgeworCQkJLy8gSXMgdGhpcyBvbmUgYXNzb2NpYXRlZCB3aXRoIGEgUmVwb3J0Q29udHJvbCBhbHJlYWR5PworCQkJaWYgKCFpc0Rpc3BsYXllZChub2RlKSkgeworCQkJCS8vIE5vCisJCQkJdW5kaXNwbGF5ZWRJZGVudGlmaWFibGVzLmFkZChub2RlKTsKKwkJCX0gLy8gaWYgbm90IGRpc3BsYXllZAorCQl9IC8vIGZvciBlYWNoIElTaW11bGF0aW9uCisKKwkJLy8gR28gdGhyb3VnaCB0aGUgY3VycmVudCBzZXQgb2YgQ29udHJvbHMgbG9va2luZyBmb3Igb25lcyB0aGF0CisJCS8vIHdlIGNhbiByZWFzc2lnbgorCQlmaW5hbCBDb250cm9sW10gY29udHJvbHMgPSBjb21wb3NpdGUuZ2V0Q2hpbGRyZW4oKTsKKwkJZm9yIChmaW5hbCBDb250cm9sIGVsZW1lbnQgOiBjb250cm9scykgeworCQkJLy8gRG9lcyB0aGlzIFJlcG9ydENvbnRyb2wgaGF2ZSBhIHNpbXVsYXRpb24gdGhhdCBpcyBzdGlsbCB2YWxpZAorCQkJLy8gdG8gZGlzcGxheT8KKwkJCWZpbmFsIFJlcG9ydENvbnRyb2wgcmVwb3J0Q29udHJvbCA9IChSZXBvcnRDb250cm9sKSBlbGVtZW50OworCQkJaWYocmVwb3J0Q29udHJvbC5nZXRDb250cm9sVHlwZSgpLmVxdWFscyhSZXBvcnRDb250cm9sRmFjdG9yeS5JREVOVElGQUJMRV9UWVBFKSkgeworCQkJCS8vIGFsbCBvdGhlciBjb250cm9scworCQkJCWlmICghdW5kaXNwbGF5ZWRJZGVudGlmaWFibGVzLmlzRW1wdHkoKQorCQkJCQkJJiYgIWlkZW50aWZpYWJsZXNUb0Rpc3BsYXkuY29udGFpbnMocmVwb3J0Q29udHJvbAorCQkJCQkJCQkuZ2V0SWRlbnRpZmlhYmxlKCkpKSB7CisJCQkJCS8vIE5vCisJCQkJCS8vIFJlYXNzaWduIGl0IHRvIG9uZSB0aGF0IGlzIHZhbGlkCisJCQkJCWZpbmFsIElkZW50aWZpYWJsZSBpZGVudCA9IChJZGVudGlmaWFibGUpIHVuZGlzcGxheWVkSWRlbnRpZmlhYmxlcworCQkJCQkJCS50b0FycmF5KClbMF07CisJCQkJCXJlcG9ydENvbnRyb2wuc2V0SWRlbnRpZmlhYmxlKGlkZW50KTsKKwkJCQkJdW5kaXNwbGF5ZWRJZGVudGlmaWFibGVzLnJlbW92ZShpZGVudCk7CisJCQkJfQorCQkJfQorCQl9IC8vIGZvciBlYWNoIE1hcENvbnRyb2wKKworCisJCS8vIEF0IHRoaXMgcG9pbnQgd2Ugc3RpbGwgY291bGQgaGF2ZSBtYXAgY29udHJvbHMgd2l0aCBpbnZhbGlkCisJCS8vIGlkZW50aWZpYWJsZXMsIGxldCdzIGdldCByaWQgb2YgdGhlbQorCQlmb3IgKGZpbmFsIENvbnRyb2wgZWxlbWVudCA6IGNvbnRyb2xzKSB7CisJCQlmaW5hbCBSZXBvcnRDb250cm9sIHJlcG9ydENvbnRyb2wgPSAoUmVwb3J0Q29udHJvbCkgZWxlbWVudDsKKwkJCWlmKHJlcG9ydENvbnRyb2wuZ2V0Q29udHJvbFR5cGUoKS5lcXVhbHMoUmVwb3J0Q29udHJvbEZhY3RvcnkuSURFTlRJRkFCTEVfVFlQRSkpIHsKKwkJCQkvLyBEb2VzIHRoaXMgTWFwQ29udHJvbCBoYXZlIGEgaWRlbnRpZmlhYmxlIHRoYXQgaXMgc3RpbGwgdmFsaWQgdG8KKwkJCQkvLyBkaXNwbGF5PworCQkJCWZpbmFsIElkZW50aWZpYWJsZSBpZGVudCA9IHJlcG9ydENvbnRyb2wuZ2V0SWRlbnRpZmlhYmxlKCk7CisJCQkJaWYgKGlkZW50ICE9IG51bGwgJiYgIWlkZW50aWZpYWJsZXNUb0Rpc3BsYXkuY29udGFpbnMoaWRlbnQpKSB7CisJCQkJCS8vIE5vCisJCQkJCXJlcG9ydENvbnRyb2wucmVtb3ZlU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyKHRoaXMpOworCQkJCQlyZXBvcnRDb250cm9sLmRpc3Bvc2UoKTsKKwkJCQl9CisJCQl9CisJCX0vLyBmb3IgZWFjaCBNYXBDb250cm9sCisJCQorCQkvLyBJZiB0aGVyZSdyZSBhbnkgTm9kZXMgbm90IGFzc2lnbmVkIHRvIGEgUmVwb3J0Q29udHJvbCwKKwkJLy8gbGV0J3MgdGFrZSBjYXJlIG9mIHRoYXQgbm93LgorCQorCQlmb3IgKGZpbmFsIElkZW50aWZpYWJsZSBpZGVudCA6IHVuZGlzcGxheWVkSWRlbnRpZmlhYmxlcykgeworCQkJaWYoaWRlbnQhPSBudWxsKSB7CisJCQkJZmluYWwgUmVwb3J0Q29udHJvbCByZXBvcnRDb250cm9sID0gcmNmLmNyZWF0ZShjb21wb3NpdGUpOworCQkJCXJlcG9ydENvbnRyb2wuYWRkU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyKHRoaXMpOworCQkJCXJlcG9ydENvbnRyb2wuc2V0SWRlbnRpZmlhYmxlKGlkZW50KTsKKwkJCQkvLyBtdXN0IGxpc3RlbiAtIHdoZW4gdGhlIGNoaWxkcmVuIGdvIGF3YXkgd2Ugbm8gbG9uZ2VyIHdhbnQgdG8KKwkJCQkvLyBtb25pdG9yIHRoZW0KKworCQkJCS8qKgorCQkJCSAqIGNhbGxlZCB3aGVuIGEgcmVtb3ZlIHdpZGdldCBpcyBwcmVzc2VkCisJCQkJICovCisJCQkJcmVwb3J0Q29udHJvbC5hZGRJUmVtb3ZlTGlzdGVuZXIobmV3IElSZW1vdmVMaXN0ZW5lcigpIHsKKwkJCQkJLyoqCisJCQkJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5EaXNwb3NlTGlzdGVuZXIjd2lkZ2V0RGlzcG9zZWQob3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5EaXNwb3NlRXZlbnQpCisJCQkJCSAqLworCQkJCQlwdWJsaWMgdm9pZCBpZGVudGlmaWFibGVSZW1vdmVkKGZpbmFsIElkZW50aWZpYWJsZSBpZGVudCkgeworCQkJCQkJcmVtb3ZlSWRlbnRpZmlhYmxlKGlkZW50KTsKKwkJCQkJfQorCQkJCX0pOworCQkJCXJlcG9ydENvbnRyb2wuYWRkRGlzcG9zZUxpc3RlbmVyKG5ldyBEaXNwb3NlTGlzdGVuZXIoKSB7CisJCQkJCS8qKgorCQkJCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuRGlzcG9zZUxpc3RlbmVyI3dpZGdldERpc3Bvc2VkKG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuRGlzcG9zZUV2ZW50KQorCQkJCQkgKi8KKwkJCQkJcHVibGljIHZvaWQgd2lkZ2V0RGlzcG9zZWQoCisJCQkJCQkJQFN1cHByZXNzV2FybmluZ3MoInVudXNlZCIpIGZpbmFsIERpc3Bvc2VFdmVudCBlKSB7CisJCQkJCQljb21wb3NpdGUubGF5b3V0KHRydWUsIHRydWUpOworCQkJCQkJY29tcG9zaXRlLnJlZHJhdygpOworCQkJCQl9CisJCQkJfSk7CisJCQl9Ly8gbm90IG51bGwKKwkJfSAvLyBmb3IgZWFjaCBJZGVudGlmaWFibGUKKworCQkvLyBJZiB0aGVyZSBhcmUgbm8gc2ltdWxhdGlvbnMgdG8gZGlzcGxheSwgd2UganVzdCBwdXQgdXAgYSAiYmxhbmsiCisJCS8vIFJlcG9ydENvbnRyb2wKKwkJaWYgKGNvbXBvc2l0ZS5nZXRDaGlsZHJlbigpLmxlbmd0aCA9PSAwKSB7CisJCQkvLyBZZXMKKwkJCWZpbmFsIFJlcG9ydENvbnRyb2wgcmVwb3J0Q29udHJvbCA9IHJjZi5jcmVhdGUoY29tcG9zaXRlKTsKKwkJCXJlcG9ydENvbnRyb2wuYWRkU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyKHRoaXMpOworCisJCQkvKioKKwkJCSAqIGNhbGxlZCB3aGVuIGEgcmVtb3ZlIHdpZGdldCBpcyBwcmVzc2VkCisJCQkgKi8KKwkJCXJlcG9ydENvbnRyb2wuYWRkSVJlbW92ZUxpc3RlbmVyKG5ldyBJUmVtb3ZlTGlzdGVuZXIoKSB7CisJCQkJLyoqCisJCQkJICogQHNlZSBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLkRpc3Bvc2VMaXN0ZW5lciN3aWRnZXREaXNwb3NlZChvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLkRpc3Bvc2VFdmVudCkKKwkJCQkgKi8KKwkJCQlwdWJsaWMgdm9pZCBpZGVudGlmaWFibGVSZW1vdmVkKGZpbmFsIElkZW50aWZpYWJsZSBpZGVudCkgeworCQkJCQlyZW1vdmVJZGVudGlmaWFibGUoaWRlbnQpOworCQkJCX0KKwkJCX0pOworCQkJcmVwb3J0Q29udHJvbC5hZGREaXNwb3NlTGlzdGVuZXIobmV3IERpc3Bvc2VMaXN0ZW5lcigpIHsKKwkJCQkvKioKKwkJCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuRGlzcG9zZUxpc3RlbmVyI3dpZGdldERpc3Bvc2VkKG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuRGlzcG9zZUV2ZW50KQorCQkJCSAqLworCQkJCXB1YmxpYyB2b2lkIHdpZGdldERpc3Bvc2VkKAorCQkJCQkJQFN1cHByZXNzV2FybmluZ3MoInVudXNlZCIpIGZpbmFsIERpc3Bvc2VFdmVudCBlKSB7CisJCQkJCWNvbXBvc2l0ZS5sYXlvdXQodHJ1ZSwgdHJ1ZSk7CisJCQkJCWNvbXBvc2l0ZS5yZWRyYXcoKTsKKwkJCQl9CisJCQl9KTsKKworCQl9IC8vIGlmCisJCWNvbXBvc2l0ZS5sYXlvdXQodHJ1ZSwgdHJ1ZSk7CisJCWNvbXBvc2l0ZS5yZWRyYXcoKTsKKwkJCisJfSAvLyBwb3B1bGF0ZVZpZXcoKQorCQorCQorCQorCisJLyoqCisJICogCisJICogQHBhcmFtIHNpbXVsYXRpb25zCisJICogQHJldHVybgorCSAqLworCXByaXZhdGUgU2V0PElkZW50aWZpYWJsZT4gZ2V0SWRlbnRpZmlhYmxlc0luU2ltdWxhdGlvbigKKwkJCWZpbmFsIExpc3Q8SVNpbXVsYXRpb24+IHNpbXVsYXRpb25MaXN0KSB7CisJCWZpbmFsIFNldDxJZGVudGlmaWFibGU+IHJldFZhbCA9IG5ldyBMaW5rZWRIYXNoU2V0PElkZW50aWZpYWJsZT4oKTsKKwkJZm9yIChpbnQgaSA9IDA7IGkgPCBzaW11bGF0aW9uTGlzdC5zaXplKCk7IGkrKykgeworCQkJZmluYWwgSVNpbXVsYXRpb24gc2ltdWxhdGlvbiA9IHNpbXVsYXRpb25MaXN0LmdldChpKTsKKwkJCS8qCisJCQkgKiBUaGUgZGVmYXVsdCBtb25pdG9yIGxvY2F0aW9ucyBhbHdheXMgY29udGFpbnMgdGhlIHdvcmtzCisJCQkgKiAoVVJJc3VmZml4ID0gWlpaLCBvciBNb25pdG9yUHJlZmVyZW5jZXMuREVGQVVMVF9MT0NBVElPTl9JRAorCQkJICogSG93ZXZlciwgaWYgYSBzY2VuYXJpbyBjb250YWlucyBvbmx5IG9uZSBjb3VudHJ5IHRoZW4gdGhlIFpaWgorCQkJICogbm9kZXMgZG9lcyBub3QgZXhpc3QgYW5kIHRoZSB0b3AgbGV2ZWwgbm9kZSB3aWxsIGJlIHRoZSBjb3VudHJ5CisJCQkgKiBjb2RlLiBTbyBoZXJlIHdlIGNoZWNrIHRoYXQgdGhlIFpaWiBub2RlIGV4aXN0cy4gSWYgaXQgZG9lcyBub3QKKwkJCSAqIGV4aXN0IHdlIGxvb2sgZm9yIHRocmVlIGxldHRlciBjb3VudHJ5IGNvZGUocykgYW5kIGFkZCB0aGF0CisJCQkgKiAodGhvc2UgLSBidXQgdGhlcmUgc2hvdWxkIGJlIG9ubHkgb25lKSB0byB0aGUgbGlzdC4KKwkJCSAqLworCQkJZmluYWwgR3JhcGggZ3JhcGggPSBzaW11bGF0aW9uLmdldFNjZW5hcmlvKCkuZ2V0Q2Fub25pY2FsR3JhcGgoKTsKKwkJCS8qCisJCQkgKiB0aGlzIGNvZGUgd2FzIHVzZWQgdG8gYXZvaWQgYSBidWcgdGhhdCBzaG91bGQgbm93IGJlIGZpeGVkCisJCQkgKiAKKwkJCSAqIGlmIChncmFwaCA9PSBudWxsKSB7IEFjdGl2YXRvci5sb2dJbmZvcm1hdGlvbigiZ3JhcGggaXMgbnVsbCIpOyAvLyB0cnkKKwkJCSAqIHNldmVyYWwgdGltZXMgZm9yIChpbnQgaWkgPSAwIDsgaWkgPCA1MDsgaWkgKyspIHsgdHJ5IHsKKwkJCSAqIFRocmVhZC5zbGVlcCgxMDApOyB9IGNhdGNoIChFeGNlcHRpb24gZSkgeyAvLyBub3RoaW5nIH0gZ3JhcGggPQorCQkJICogc2ltdWxhdGlvbi5nZXRTY2VuYXJpbygpLmdldENhbm9uaWNhbEdyYXBoKCk7IGlmIChncmFwaCAhPSBudWxsKQorCQkJICogYnJlYWs7IH0vLyBmb3IgMTAgdHJpZXMgfSAvL2lmIGdyYXBoIG51bGwKKwkJCSAqLworCisJCQlpZiAoZ3JhcGggIT0gbnVsbCkgeworCQkJCS8vIGZpbmFsIEVNYXA8VVJJLCBOb2RlPiBhbGxOb2RlcyA9IGdyYXBoLmdldE5vZGVzKCk7CisJCQkJLy8gZmluYWwgU2V0PFVSST4gYWxsR3JhcGhVUklzID0gYWxsTm9kZXMua2V5U2V0KCk7CisJCQkJLy8gZmluYWwgVVJJIGRlZmF1bHRVUkkgPSBNb25pdG9yUHJlZmVyZW5jZXMuZ2V0RGVmYXVsdFVSSSgpOworCisJCQkJLyoKKwkJCQkgKiBXZSB3b24ndCB1c2UgdGhlIGZvbGxvd2luZyBjb2RlLiBJdCBjcmVhdGVzIHRvbyBtYW55CisJCQkJICogY291bnRyaWVzIHdoZW4gc2NlbmFyaW8gaW5jbHVkZXMgYW4gZW50aXJlIGNvbnRpbmVudAorCQkJCSAqICAvLyBpZiB0aGUgd29ybGQgVVJJPS4uWlpaIGRvZXMgTk9UIGV4aXN0IGlmCisJCQkJICogKCFhbGxHcmFwaFVSSXMuY29udGFpbnMoZGVmYXVsdFVSSSkpIHsgZmluYWwgSXRlcmF0b3I8VVJJPgorCQkJCSAqIGl0ZXIgPSBhbGxHcmFwaFVSSXMuaXRlcmF0b3IoKTsgd2hpbGUgKChpdGVyICE9IG51bGwpICYmCisJCQkJICogKGl0ZXIuaGFzTmV4dCgpKSkgeyBmaW5hbCBTdHJpbmcgdXJpU3RyaW5nID0KKwkJCQkgKiAoaXRlci5uZXh0KCkpLnRvU3RyaW5nKCk7IGZpbmFsIFN0cmluZyBzdWYgPQorCQkJCSAqIE1vbml0b3JQcmVmZXJlbmNlcyAuZ2V0VVJJc3VmZml4KHVyaVN0cmluZyk7IGlmCisJCQkJICogKChzdWYubGVuZ3RoKCkgPT0gMykgJiYgKHN1Zi5pbmRleE9mKCItIikgPT0gLTEpKSB7IC8vIGFkZAorCQkJCSAqIHRoZSBub2RlIG1vbml0b3JTZXQuYWRkKHVyaVN0cmluZyk7IH0gLy8gaWYgYWRtaW4wPWNvdW50cnkKKwkJCQkgKiBsZXZlbCAzIGxldHRlciB1cmkgfSAvLyBhbGwgdXJpJ3MgaW4gR3JhcGggfSAvLyBpZiB3b3JsZCB1cmkKKwkJCQkgKiBkb2VzIG5vdCBleGlzdAorCQkJCSAqLworCisJCQkJZmluYWwgSXRlcmF0b3I8U3RyaW5nPiBpdGVyID0gbW9uaXRvclNldC5pdGVyYXRvcigpOworCQkJCXdoaWxlICgoaXRlciAhPSBudWxsKSAmJiAoaXRlci5oYXNOZXh0KCkpKSB7CisJCQkJCWZpbmFsIFN0cmluZyBrZXkgPSBpdGVyLm5leHQoKTsKKwkJCQkJSWRlbnRpZmlhYmxlIG5vZGUgPSBudWxsOworCQkJCQlVUkkgbG9jVVJJID0gbnVsbDsKKwkJCQkJdHJ5IHsKKwkJCQkJCWxvY1VSSSA9IFVSSS5jcmVhdGVVUkkoa2V5KTsKKwkJCQkJCW5vZGUgPSBncmFwaC5nZXROb2RlKGxvY1VSSSk7CisJCQkJCQlpZiAobm9kZSAhPSBudWxsKSB7CisJCQkJCQkJcmV0VmFsLmFkZChub2RlKTsKKwkJCQkJCX0KKwkJCQkJfSBjYXRjaCAoZmluYWwgRXhjZXB0aW9uIGUpIHsKKwkJCQkJCW9yZy5lY2xpcHNlLnN0ZW0udWkucmVwb3J0cy5BY3RpdmF0b3IubG9nRXJyb3IoCisJCQkJCQkJCSJSZXBvcnRWaWV3ZXIuZ2V0SWRlbnRpZmlhYmxlc0luU2ltdWxhdGlvbigpIEVycm9yIHNldHRpbmcgSWRlbnRpZmlhYmxlIHRvICIKKwkJCQkJCQkJCQkrIGtleSArICIgIiwgZSk7CisJCQkJCX0KKwkJCQl9Ly8gd2hpbGUgbG9jYXRpb25zIHRvIG1vbml0b3IKKworCQkJfS8vIGdyYXBoIG5vdCBudWxsCisKKwkJfSAvLyBmb3IgYWxsIHNpbXVsYXRpb25zCisKKwkJcmV0dXJuIHJldFZhbDsKKwl9CisJCisJLyoqCisJICogCisJICogQHBhcmFtIHNpbXVsYXRpb24gb25lIHNpbXVsYXRpb24KKwkgKiBAcmV0dXJuCisJICovCisJcHJpdmF0ZSBTZXQ8SWRlbnRpZmlhYmxlPiBnZXRJZGVudGlmaWFibGVzSW5TaW11bGF0aW9uKElTaW11bGF0aW9uIHNpbXVsYXRpb24pIHsKKwkJZmluYWwgU2V0PElkZW50aWZpYWJsZT4gcmV0VmFsID0gbmV3IExpbmtlZEhhc2hTZXQ8SWRlbnRpZmlhYmxlPigpOworCQkJLyoKKwkJCSAqIFRoZSBkZWZhdWx0IG1vbml0b3IgbG9jYXRpb25zIGFsd2F5cyBjb250YWlucyB0aGUgd29ya3MKKwkJCSAqIChVUklzdWZmaXggPSBaWlosIG9yIE1vbml0b3JQcmVmZXJlbmNlcy5ERUZBVUxUX0xPQ0FUSU9OX0lECisJCQkgKiBIb3dldmVyLCBpZiBhIHNjZW5hcmlvIGNvbnRhaW5zIG9ubHkgb25lIGNvdW50cnkgdGhlbiB0aGUgWlpaCisJCQkgKiBub2RlcyBkb2VzIG5vdCBleGlzdCBhbmQgdGhlIHRvcCBsZXZlbCBub2RlIHdpbGwgYmUgdGhlIGNvdW50cnkKKwkJCSAqIGNvZGUuIFNvIGhlcmUgd2UgY2hlY2sgdGhhdCB0aGUgWlpaIG5vZGUgZXhpc3RzLiBJZiBpdCBkb2VzIG5vdAorCQkJICogZXhpc3Qgd2UgbG9vayBmb3IgdGhyZWUgbGV0dGVyIGNvdW50cnkgY29kZShzKSBhbmQgYWRkIHRoYXQKKwkJCSAqICh0aG9zZSAtIGJ1dCB0aGVyZSBzaG91bGQgYmUgb25seSBvbmUpIHRvIHRoZSBsaXN0LgorCQkJICovCisJCQlmaW5hbCBHcmFwaCBncmFwaCA9IHNpbXVsYXRpb24uZ2V0U2NlbmFyaW8oKS5nZXRDYW5vbmljYWxHcmFwaCgpOworCQkJLyoKKwkJCSAqIHRoaXMgY29kZSB3YXMgdXNlZCB0byBhdm9pZCBhIGJ1ZyB0aGF0IHNob3VsZCBub3cgYmUgZml4ZWQKKwkJCSAqIAorCQkJICogaWYgKGdyYXBoID09IG51bGwpIHsgQWN0aXZhdG9yLmxvZ0luZm9ybWF0aW9uKCJncmFwaCBpcyBudWxsIik7IC8vIHRyeQorCQkJICogc2V2ZXJhbCB0aW1lcyBmb3IgKGludCBpaSA9IDAgOyBpaSA8IDUwOyBpaSArKykgeyB0cnkgeworCQkJICogVGhyZWFkLnNsZWVwKDEwMCk7IH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7IC8vIG5vdGhpbmcgfSBncmFwaCA9CisJCQkgKiBzaW11bGF0aW9uLmdldFNjZW5hcmlvKCkuZ2V0Q2Fub25pY2FsR3JhcGgoKTsgaWYgKGdyYXBoICE9IG51bGwpCisJCQkgKiBicmVhazsgfS8vIGZvciAxMCB0cmllcyB9IC8vaWYgZ3JhcGggbnVsbAorCQkJICovCisKKwkJCWlmIChncmFwaCAhPSBudWxsKSB7CisJCQkJLy8gZmluYWwgRU1hcDxVUkksIE5vZGU+IGFsbE5vZGVzID0gZ3JhcGguZ2V0Tm9kZXMoKTsKKwkJCQkvLyBmaW5hbCBTZXQ8VVJJPiBhbGxHcmFwaFVSSXMgPSBhbGxOb2Rlcy5rZXlTZXQoKTsKKwkJCQkvLyBmaW5hbCBVUkkgZGVmYXVsdFVSSSA9IE1vbml0b3JQcmVmZXJlbmNlcy5nZXREZWZhdWx0VVJJKCk7CisKKwkJCQkvKgorCQkJCSAqIFdlIHdvbid0IHVzZSB0aGUgZm9sbG93aW5nIGNvZGUuIEl0IGNyZWF0ZXMgdG9vIG1hbnkKKwkJCQkgKiBjb3VudHJpZXMgd2hlbiBzY2VuYXJpbyBpbmNsdWRlcyBhbiBlbnRpcmUgY29udGluZW50CisJCQkJICogIC8vIGlmIHRoZSB3b3JsZCBVUkk9Li5aWlogZG9lcyBOT1QgZXhpc3QgaWYKKwkJCQkgKiAoIWFsbEdyYXBoVVJJcy5jb250YWlucyhkZWZhdWx0VVJJKSkgeyBmaW5hbCBJdGVyYXRvcjxVUkk+CisJCQkJICogaXRlciA9IGFsbEdyYXBoVVJJcy5pdGVyYXRvcigpOyB3aGlsZSAoKGl0ZXIgIT0gbnVsbCkgJiYKKwkJCQkgKiAoaXRlci5oYXNOZXh0KCkpKSB7IGZpbmFsIFN0cmluZyB1cmlTdHJpbmcgPQorCQkJCSAqIChpdGVyLm5leHQoKSkudG9TdHJpbmcoKTsgZmluYWwgU3RyaW5nIHN1ZiA9CisJCQkJICogTW9uaXRvclByZWZlcmVuY2VzIC5nZXRVUklzdWZmaXgodXJpU3RyaW5nKTsgaWYKKwkJCQkgKiAoKHN1Zi5sZW5ndGgoKSA9PSAzKSAmJiAoc3VmLmluZGV4T2YoIi0iKSA9PSAtMSkpIHsgLy8gYWRkCisJCQkJICogdGhlIG5vZGUgbW9uaXRvclNldC5hZGQodXJpU3RyaW5nKTsgfSAvLyBpZiBhZG1pbjA9Y291bnRyeQorCQkJCSAqIGxldmVsIDMgbGV0dGVyIHVyaSB9IC8vIGFsbCB1cmkncyBpbiBHcmFwaCB9IC8vIGlmIHdvcmxkIHVyaQorCQkJCSAqIGRvZXMgbm90IGV4aXN0CisJCQkJICovCisKKwkJCQlmaW5hbCBJdGVyYXRvcjxTdHJpbmc+IGl0ZXIgPSBtb25pdG9yU2V0Lml0ZXJhdG9yKCk7CisJCQkJd2hpbGUgKChpdGVyICE9IG51bGwpICYmIChpdGVyLmhhc05leHQoKSkpIHsKKwkJCQkJZmluYWwgU3RyaW5nIGtleSA9IGl0ZXIubmV4dCgpOworCQkJCQlJZGVudGlmaWFibGUgbm9kZSA9IG51bGw7CisJCQkJCVVSSSBsb2NVUkkgPSBudWxsOworCQkJCQl0cnkgeworCQkJCQkJbG9jVVJJID0gVVJJLmNyZWF0ZVVSSShrZXkpOworCQkJCQkJbm9kZSA9IGdyYXBoLmdldE5vZGUobG9jVVJJKTsKKwkJCQkJCWlmIChub2RlICE9IG51bGwpIHsKKwkJCQkJCQlyZXRWYWwuYWRkKG5vZGUpOworCQkJCQkJfQorCQkJCQl9IGNhdGNoIChmaW5hbCBFeGNlcHRpb24gZSkgeworCQkJCQkJb3JnLmVjbGlwc2Uuc3RlbS51aS5yZXBvcnRzLkFjdGl2YXRvci5sb2dFcnJvcigKKwkJCQkJCQkJIlJlcG9ydFZpZXdlci5nZXRJZGVudGlmaWFibGVzSW5TaW11bGF0aW9uKCkgRXJyb3Igc2V0dGluZyBJZGVudGlmaWFibGUgdG8gIgorCQkJCQkJCQkJCSsga2V5ICsgIiAiLCBlKTsKKwkJCQkJfQorCQkJCX0vLyB3aGlsZSBsb2NhdGlvbnMgdG8gbW9uaXRvcgorCQkJfS8vIGdyYXBoIG5vdCBudWxsCisJCXJldHVybiByZXRWYWw7CisJfQorCisJLyoqCisJICogQHBhcmFtIHNpbXVsYXRpb24KKwkgKiBAcmV0dXJuCisJICovCisJcHJpdmF0ZSBib29sZWFuIGlzRGlzcGxheWVkKGZpbmFsIElkZW50aWZpYWJsZSBpZGVudGlmaWFibGUpIHsKKwkJYm9vbGVhbiByZXRWYWx1ZSA9IGZhbHNlOworCQlmaW5hbCBDb250cm9sW10gYWxsQ29udHJvbHMgPSBjb21wb3NpdGUuZ2V0Q2hpbGRyZW4oKTsKKwkJZm9yIChmaW5hbCBDb250cm9sIGVsZW1lbnQgOiBhbGxDb250cm9scykgeworCQkJZmluYWwgUmVwb3J0Q29udHJvbCByZXBvcnRDb250cm9sID0gKFJlcG9ydENvbnRyb2wpIGVsZW1lbnQ7CisJCQlmaW5hbCBJZGVudGlmaWFibGUgdGVzdElkZW50aWZpYWJsZSA9IHJlcG9ydENvbnRyb2wKKwkJCQkJLmdldElkZW50aWZpYWJsZSgpOworCQkJaWYgKHRlc3RJZGVudGlmaWFibGUgIT0gbnVsbAorCQkJCQkmJiB0ZXN0SWRlbnRpZmlhYmxlLmVxdWFscyhpZGVudGlmaWFibGUpKSB7CisJCQkJcmV0VmFsdWUgPSB0cnVlOworCQkJCWJyZWFrOworCQkJfSAvLyBpZgorCQl9IC8vIGZvciBlYWNoIFJlcG9ydENvbnRyb2wKKwkJcmV0dXJuIHJldFZhbHVlOworCX0gLy8gaXNEaXNwbGF5ZWQKKworCS8qKgorCSAqIHNhdmUgdGhlIHN0YXRlIG9mIHByZWZlcnJlZCBsb2NhdGlvbnMgdG8gbW9uaXRvcgorCSAqLworCXByaXZhdGUgdm9pZCBzYXZlUHJlZmVyZW5jZVN0YXRlKCkgeworCisJCS8vIHdlIG5lZWQgdG8gd3JpdGUgcHJlZmVyZW5jZXMgYnkgYWN0aXZlIHNpbXVsYXRpb24KKwkJTGlzdDxJU2ltdWxhdGlvbj4gYWxsU2ltdWxhdGlvbnMgPSBudWxsOworCQlmaW5hbCBTZXQ8U3RyaW5nPiBub2Rlc0luU2ltdWxhdGlvbiA9IG5ldyBIYXNoU2V0PFN0cmluZz4oKTsKKwkJaWYgKHNpbXVsYXRpb25NYW5hZ2VyICE9IG51bGwpIHsKKwkJCWFsbFNpbXVsYXRpb25zID0gc2ltdWxhdGlvbk1hbmFnZXIuZ2V0QWN0aXZlU2ltdWxhdGlvbnMoKTsKKwkJfQorCQlpZiAoKGFsbFNpbXVsYXRpb25zICE9IG51bGwpICYmIChhbGxTaW11bGF0aW9ucy5zaXplKCkgPj0gMSkpIHsKKwkJCWZvciAoaW50IGkgPSAwOyBpIDwgYWxsU2ltdWxhdGlvbnMuc2l6ZSgpOyBpKyspIHsKKwkJCQlub2Rlc0luU2ltdWxhdGlvbi5jbGVhcigpOworCQkJCWZpbmFsIElTaW11bGF0aW9uIHNpbSA9IGFsbFNpbXVsYXRpb25zLmdldChpKTsKKwkJCQlmaW5hbCBTdHJpbmcgc2NlbmFyaW9OYW1lID0gc2ltLmdldFNjZW5hcmlvKCkuZ2V0VVJJKCkKKwkJCQkJCS50b1N0cmluZygpOworCisJCQkJLy8gcmVjcmVhdGUgdGhlIHN1YnNlY3Rpb24gZm9yIHRoaXMgc2NlbmFyaW8gdXNpbmcgdGhlIGxvY2F0aW9ucworCQkJCS8vIG5vdyBiZWluZyBtb25pdG9yZWQKKwkJCQlmaW5hbCBJRGlhbG9nU2V0dGluZ3Mgc2VjdGlvbiA9IG5ldyBEaWFsb2dTZXR0aW5ncyhzY2VuYXJpb05hbWUpOworCisJCQkJZmluYWwgR3JhcGggZ3JhcGggPSBzaW0uZ2V0U2NlbmFyaW8oKS5nZXRDYW5vbmljYWxHcmFwaCgpOworCQkJCWZpbmFsIEl0ZXJhdG9yPElkZW50aWZpYWJsZT4gaXRlciA9IGlkZW50aWZpYWJsZXNUb0Rpc3BsYXkKKwkJCQkJCS5pdGVyYXRvcigpOworCQkJCXdoaWxlICgoaXRlciAhPSBudWxsKSAmJiAoaXRlci5oYXNOZXh0KCkpKSB7CisJCQkJCWZpbmFsIElkZW50aWZpYWJsZSBpZGVudCA9IGl0ZXIubmV4dCgpOworCQkJCQlpZiAoaWRlbnQgIT0gbnVsbCkgeworCQkJCQkJLy8gaXMgdGhpcyBub2RlIGluIHRoaXMgc2ltdWxhdGlvbj8KKwkJCQkJCWZpbmFsIElkZW50aWZpYWJsZSBub2RlID0gZ3JhcGguZ2V0Tm9kZShpZGVudC5nZXRVUkkoKSk7CisJCQkJCQlpZiAobm9kZSAhPSBudWxsKSB7CisJCQkJCQkJZmluYWwgU3RyaW5nIGlkID0gaWRlbnQuZ2V0VVJJKCkudG9TdHJpbmcoKTsKKwkJCQkJCQlpZiAoaWQgIT0gbnVsbCkgeworCQkJCQkJCQlub2Rlc0luU2ltdWxhdGlvbi5hZGQoaWQpOworCQkJCQkJCX0KKwkJCQkJCX0gLy8gaWYgbm9kZSBpbiBzaW11bGF0aW9uCisJCQkJCX0KKworCQkJCX0vLyBhbGwgY3VycmVudGx5IGRpc3BsYXllZCBub2RlcworCisJCQkJZmluYWwgU3RyaW5nW10gbmV3UHJlZnMgPSBuZXcgU3RyaW5nW25vZGVzSW5TaW11bGF0aW9uLnNpemUoKV07CisJCQkJZmluYWwgSXRlcmF0b3I8U3RyaW5nPiBpdGVyMiA9IG5vZGVzSW5TaW11bGF0aW9uLml0ZXJhdG9yKCk7CisJCQkJaW50IGljb3VudCA9IDA7CisJCQkJd2hpbGUgKChpdGVyMiAhPSBudWxsKSAmJiAoaXRlcjIuaGFzTmV4dCgpKSkgeworCQkJCQluZXdQcmVmc1tpY291bnRdID0gaXRlcjIubmV4dCgpOworCQkJCQlpY291bnQrKzsKKwkJCQl9CisKKwkJCQlzZWN0aW9uLnB1dChMT0NBVElPTl9QUkVGRVJFTkNFX0tFWSwgbmV3UHJlZnMpOworCQkJCWlmIChtYXN0ZXJTZXR0aW5ncyA9PSBudWxsKSB7CisJCQkJCW1hc3RlclNldHRpbmdzID0gbmV3IERpYWxvZ1NldHRpbmdzKFJPT1RfS0VZKTsKKwkJCQl9CisJCQkJbWFzdGVyU2V0dGluZ3MuYWRkU2VjdGlvbihzZWN0aW9uKTsKKwkJCQl0cnkgeworCQkJCQltYXN0ZXJTZXR0aW5ncy5zYXZlKGdldFByZWZGaWxlTmFtZSgpKTsKKwkJCQl9IGNhdGNoIChmaW5hbCBJT0V4Y2VwdGlvbiBpb2UpIHsKKwkJCQkJb3JnLmVjbGlwc2Uuc3RlbS51aS5yZXBvcnRzLkFjdGl2YXRvcgorCQkJCQkJCS5sb2dFcnJvcigiZXhjZXB0aW9uIHdyaXRpbmcgZmlsZSBbIgorCQkJCQkJCQkJKyBpb2UuZ2V0TWVzc2FnZSgpICsgIl0iLCBpb2UpOworCQkJCX0KKworCQkJfSAvLyBmb3IgYWxsIHNpbXVsYXRpb25zCisJCX0vLyBpZiBub3QgbnVsbAorCisJfS8vIHNhdmVQcmVmZXJlbmNlU3RhdGUKKworCS8qKgorCSAqIFRoaXMgbWV0aG9kIHVzZXMge0BsaW5rIERpYWxvZ1NldHRpbmdzfSB0byBsb2FkIGFuZCB1cGRhdGUgdGhlIG1vbml0b3JTZXQKKwkgKiB3aGljaCBjb250YWlucyAoZmlsdGVycykgdGhlIHZhbGlkIGxpc3Qgb2YgcHJlZmVycmVkIHtAbGluayBJZGVudGlmaWFibGV9cworCSAqIHRvIGRpc3BsYXkgZnJvbSB0aGUgdGhlIHN0YXRlIG9mIHRoZSBwcmV2aW91c2x5IHNhdmVkIHByZWZlcmVuY2Ugc3RhdGUuCisJICogZm9yIHtAbGluayBTaW11bGF0aW9ufXMgdGhhdCBhcmUgcnVubmluZworCSAqIAorCSAqIEBwYXJhbSBydW5uaW5nU2ltdWxhdGlvbnMKKwkgKi8KKwlwcml2YXRlIHZvaWQgdXBkYXRlUHJlZmVyZW5jZVN0YXRlKElTaW11bGF0aW9uIHNpbSkgeworCQkvLyB3aGF0IHR5cGUgb2Ygdmlld2VyPyBUaW1lU2VyaWVzLCBQaGFzZVNwYWNlIGV0YworCQlpZiAobWFzdGVyU2V0dGluZ3MgPT0gbnVsbCkgeworCQkJcmVhZE1hc3RlclNldHRpbmdzRnJvbUZpbGUoKTsKKwkJfQorCQlmaW5hbCBTdHJpbmcgc2NlbmFyaW9OYW1lID0gc2ltLmdldFNjZW5hcmlvKCkuZ2V0VVJJKCkudG9TdHJpbmcoKTsKKwkJSURpYWxvZ1NldHRpbmdzIHNlY3Rpb24gPSBtYXN0ZXJTZXR0aW5ncy5nZXRTZWN0aW9uKHNjZW5hcmlvTmFtZSk7CisJCWlmIChzZWN0aW9uID09IG51bGwpIHsKKwkJCXNlY3Rpb24gPSBuZXcgRGlhbG9nU2V0dGluZ3Moc2NlbmFyaW9OYW1lKTsKKwkJCW1hc3RlclNldHRpbmdzLmFkZFNlY3Rpb24oc2VjdGlvbik7CisJCX0KKwkJLy8gbm93IGFkZCB0aGUgcHJlZmVyZW5jZXMgdG8gdGhlIG1vbml0b3JTZXQKKwkJZmluYWwgU3RyaW5nW10gYWxsSURzID0gc2VjdGlvbi5nZXRBcnJheShMT0NBVElPTl9QUkVGRVJFTkNFX0tFWSk7CisJCWlmIChhbGxJRHMgIT0gbnVsbCkgeworCQkJZm9yIChmaW5hbCBTdHJpbmcgZWxlbWVudCA6IGFsbElEcykgeworCQkJCW1vbml0b3JTZXQuYWRkKGVsZW1lbnQpOworCQkJfS8vIGZvciBhbGxJRHMKKworCQl9Ly8gbm90IG51bGwKKwl9Ly8gdXBkYXRlUHJlZmVyZW5jZVN0YXRlCisKKwkvKioKKwkgKiBnZXQgdGhlIHtAbGluayBEaWFsb2dTZXR0aW5nc30gZnJvbSB0aGUgZmlsZQorCSAqLworCXB1YmxpYyB2b2lkIHJlYWRNYXN0ZXJTZXR0aW5nc0Zyb21GaWxlKCkgeworCQltYXN0ZXJTZXR0aW5ncyA9IG5ldyBEaWFsb2dTZXR0aW5ncyhST09UX0tFWSk7CisKKwkJZmluYWwgU3RyaW5nIGZpbGVuYW1lID0gZ2V0UHJlZkZpbGVOYW1lKCk7CisJCWZpbmFsIEZpbGUgZiA9IG5ldyBGaWxlKGZpbGVuYW1lKTsKKwkJaWYgKGYuZXhpc3RzKCkpIHsKKwkJCXRyeSB7CisJCQkJbWFzdGVyU2V0dGluZ3MubG9hZChmaWxlbmFtZSk7CisJCQl9IGNhdGNoIChmaW5hbCBJT0V4Y2VwdGlvbiBpb2UpIHsKKwkJCQlvcmcuZWNsaXBzZS5zdGVtLnVpLnJlcG9ydHMuQWN0aXZhdG9yLmxvZ0Vycm9yKAorCQkJCQkJImV4Y2VwdGlvbiBsb2FkaW5nIGZpbGUgWyIgKyBpb2UuZ2V0TWVzc2FnZSgpICsgIl0iLAorCQkJCQkJaW9lKTsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCS8vIGVsc2UgY3JlYXRlIGl0CisJCQl0cnkgeworCQkJCW1hc3RlclNldHRpbmdzLnNhdmUoZmlsZW5hbWUpOworCQkJfSBjYXRjaCAoZmluYWwgSU9FeGNlcHRpb24gaW9lKSB7CisJCQkJb3JnLmVjbGlwc2Uuc3RlbS51aS5yZXBvcnRzLkFjdGl2YXRvci5sb2dFcnJvcigKKwkJCQkJCSJleGNlcHRpb24gY3JlYXRpbmcgZmlsZSBbIiArIGlvZS5nZXRNZXNzYWdlKCkgKyAiXSIsCisJCQkJCQlpb2UpOworCQkJfQorCQl9IC8vIGVsc2UgaWYgZiAhZXhpc3RzCisJfS8vIHJlYWQgbWFzdGVyIHNldHR0aW5ncworCisJLyoqCisJICogZ2V0cyB0aGUgcHJlZmVyZW5jZXMgZmlsZSBuYW1lCisJICogCisJICogQHJldHVybiBmaWxlIG5hbWUgY29udGFpbmluZyB0aGUgdXNlcnMgcHJlZmVyZW5jZXMKKwkgKi8KKwlwdWJsaWMgU3RyaW5nIGdldFByZWZGaWxlTmFtZSgpIHsKKwkJZmluYWwgU3RyaW5nIGNvbnRyb2xDYXRlZ29yeSA9IHJjZi5nZXRVbmlxdWVDb250cm9sTmFtZSgpOworCQkvLyBHZXQgdGhlIHJpZ2h0IHByZWZlcmVuY2UgZmlsZQorCQlmaW5hbCBTdHJpbmcgZmlsZW5hbWUgPSBQQVRILmFwcGVuZCgKKwkJCQljb250cm9sQ2F0ZWdvcnkgKyAiXyIgKyBSRVBPUlRWSUVXUFJFRkVSRU5DRVNfRklMRU5BTUUpCisJCQkJLnRvT1NTdHJpbmcoKTsKKwkJcmV0dXJuIGZpbGVuYW1lOworCX0KKworfSAvLyBSZXBvcnRWaWV3ZXIKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5yZXBvcnRzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3JlcG9ydHMvdmlld3MvUmVwb3J0c0NvbnRleHRNZW51QWN0aW9uLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkucmVwb3J0cy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9yZXBvcnRzL3ZpZXdzL1JlcG9ydHNDb250ZXh0TWVudUFjdGlvbi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJmNmE0NDUKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkucmVwb3J0cy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9yZXBvcnRzL3ZpZXdzL1JlcG9ydHNDb250ZXh0TWVudUFjdGlvbi5qYXZhCkBAIC0wLDAgKzEsNjMgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS51aS5yZXBvcnRzLnZpZXdzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udWkudmlld3MuZ2VvZ3JhcGhpYy5tYXAuU2VsZWN0ZWRSZXBvcnRzTWFuYWdlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5JVmlld0FjdGlvbkRlbGVnYXRlOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklWaWV3UGFydDsKKworLyoqCisgKiBUaGUgY2xhc3MgaXMgYSBkZWxlZ2F0aW9uIGZvciB0aGUgcG9wdXAgbWVudSBvZiB0aGUKKyAqIDxjb2RlPkdlb2dyYXBoaWNSZW5kZXJlcjwvY29kZT4uIFRoZSBwdXJwb3NlIG9mIHRoaXMgY2xhc3MgaXMgdG8gaGFuZGxlCisgKiB0aGUgYWN0aXZpdHkgaW4gdGhlIHJlcG9ydHMgY29udGV4dCBtZW51IGFuZCBrZWVwIHRoZSBjdXJyZW50IHN0YXRlIG9mIGFsbAorICogZW5hYmxlZC9kaXNhYmxlZCByZXBvcnRzIGZyb20gdGhhdCBtZW51LiBUaGUgcmVwb3J0J3MgPGNvZGU+Vmlld1BhcnQ8L2NvZGU+CisgKiBvYmplY3Qgd2lsbCB1c2UgdGhpcyBjbGFzcyBmb3IgY2hlY2tpbmcgd2hldGhlciB0byBnZW5lcmF0ZSBhIHJlcG9ydCBvciBub3QuCisgKi8KK3B1YmxpYyBjbGFzcyBSZXBvcnRzQ29udGV4dE1lbnVBY3Rpb24gCisJaW1wbGVtZW50cyBJVmlld0FjdGlvbkRlbGVnYXRlIHsKKwkKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnVpLklBY3Rpb25EZWxlZ2F0ZSNydW4ob3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklBY3Rpb24pCisJICovCisJcHVibGljIHZvaWQgcnVuKG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JQWN0aW9uIGFjdGlvbikgeworCQlTdHJpbmcgcmVwb3J0SWQgPSBhY3Rpb24uZ2V0SWQoKTsKKwkJCisJCWlmIChTZWxlY3RlZFJlcG9ydHNNYW5hZ2VyLmdldEluc3RhbmNlKCkuaXNSZXBvcnRFbmFibGVkKHJlcG9ydElkKSkgeyAvLyBUaGUgcmVwb3J0IHdhcyBwcmV2aW91c2x5IGVuYWJsZWQgc28gZGlzYWJsZSBpdAorCQkJU2VsZWN0ZWRSZXBvcnRzTWFuYWdlci5nZXRJbnN0YW5jZSgpLmRpc2FibGVSZXBvcnRGb3JJZGVudGlmaWFibGUocmVwb3J0SWQpOworCQkJYWN0aW9uLnNldENoZWNrZWQoZmFsc2UpOworCQl9CisJCWVsc2UKKwkJeworCQkJU2VsZWN0ZWRSZXBvcnRzTWFuYWdlci5nZXRJbnN0YW5jZSgpLmVuYWJsZVJlcG9ydEZvcklkZW50aWZpYWJsZShyZXBvcnRJZCk7CisJCQlhY3Rpb24uc2V0Q2hlY2tlZCh0cnVlKTsKKwkJfQorCX0KKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2UudWkuSUFjdGlvbkRlbGVnYXRlI3NlbGVjdGlvbkNoYW5nZWQob3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklBY3Rpb24sCisJICogICAgICBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb24pCisJICovCisJcHVibGljIHZvaWQgc2VsZWN0aW9uQ2hhbmdlZChAU3VwcHJlc3NXYXJuaW5ncygidW51c2VkIikKKwlvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSUFjdGlvbiBhY3Rpb24sCisJCQlAU3VwcHJlc3NXYXJuaW5ncygidW51c2VkIikKKwkJCW9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvbiBzZWxlY3Rpb24pIHsKKwkJLy8gRG8gTm90aGluZworCX0KKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2UudWkuSVZpZXdBY3Rpb25EZWxlZ2F0ZSNpbml0KG9yZy5lY2xpcHNlLnVpLklWaWV3UGFydCkKKwkgKi8KKwlwdWJsaWMgdm9pZCBpbml0KEBTdXBwcmVzc1dhcm5pbmdzKCJ1bnVzZWQiKQorCUlWaWV3UGFydCBhcmcwKSB7CisJCS8vIERvIE5vdGhpbmcKKwl9Cit9CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkucmVwb3J0cy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9yZXBvcnRzL3ZpZXdzL1RpbWVTZXJpZXNDYW52YXMuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5yZXBvcnRzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3JlcG9ydHMvdmlld3MvVGltZVNlcmllc0NhbnZhcy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUyNGIyZjUKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkucmVwb3J0cy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9yZXBvcnRzL3ZpZXdzL1RpbWVTZXJpZXNDYW52YXMuamF2YQpAQCAtMCwwICsxLDEzNzYgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS51aS5yZXBvcnRzLnZpZXdzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7CitpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb25zOworaW1wb3J0IGphdmEudXRpbC5Db21wYXJhdG9yOworaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOworaW1wb3J0IGphdmEudXRpbC5IYXNoU2V0OworaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuTWFwOworaW1wb3J0IGphdmEudXRpbC5TZXQ7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5iaXJ0LmNoYXJ0LmRldmljZS5JRGV2aWNlUmVuZGVyZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuYmlydC5jaGFydC5leGNlcHRpb24uQ2hhcnRFeGNlcHRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuYmlydC5jaGFydC5mYWN0b3J5LkdlbmVyYXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5iaXJ0LmNoYXJ0Lm1vZGVsLkNoYXJ0OworaW1wb3J0IG9yZy5lY2xpcHNlLmJpcnQuY2hhcnQubW9kZWwuQ2hhcnRXaXRoQXhlczsKK2ltcG9ydCBvcmcuZWNsaXBzZS5iaXJ0LmNoYXJ0Lm1vZGVsLmF0dHJpYnV0ZS5BbmNob3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuYmlydC5jaGFydC5tb2RlbC5hdHRyaWJ1dGUuQXhpc1R5cGU7CitpbXBvcnQgb3JnLmVjbGlwc2UuYmlydC5jaGFydC5tb2RlbC5hdHRyaWJ1dGUuQm91bmRzOworaW1wb3J0IG9yZy5lY2xpcHNlLmJpcnQuY2hhcnQubW9kZWwuYXR0cmlidXRlLkNvbG9yRGVmaW5pdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5iaXJ0LmNoYXJ0Lm1vZGVsLmF0dHJpYnV0ZS5JbnRlcnNlY3Rpb25UeXBlOworaW1wb3J0IG9yZy5lY2xpcHNlLmJpcnQuY2hhcnQubW9kZWwuYXR0cmlidXRlLkphdmFOdW1iZXJGb3JtYXRTcGVjaWZpZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuYmlydC5jaGFydC5tb2RlbC5hdHRyaWJ1dGUuTGluZUF0dHJpYnV0ZXM7CitpbXBvcnQgb3JnLmVjbGlwc2UuYmlydC5jaGFydC5tb2RlbC5hdHRyaWJ1dGUuTGluZVN0eWxlOworaW1wb3J0IG9yZy5lY2xpcHNlLmJpcnQuY2hhcnQubW9kZWwuYXR0cmlidXRlLk1hcmtlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5iaXJ0LmNoYXJ0Lm1vZGVsLmF0dHJpYnV0ZS5OdW1iZXJGb3JtYXRTcGVjaWZpZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuYmlydC5jaGFydC5tb2RlbC5hdHRyaWJ1dGUuUG9zaXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuYmlydC5jaGFydC5tb2RlbC5hdHRyaWJ1dGUuVGlja1N0eWxlOworaW1wb3J0IG9yZy5lY2xpcHNlLmJpcnQuY2hhcnQubW9kZWwuYXR0cmlidXRlLmltcGwuQm91bmRzSW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5iaXJ0LmNoYXJ0Lm1vZGVsLmF0dHJpYnV0ZS5pbXBsLkNvbG9yRGVmaW5pdGlvbkltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2UuYmlydC5jaGFydC5tb2RlbC5hdHRyaWJ1dGUuaW1wbC5KYXZhTnVtYmVyRm9ybWF0U3BlY2lmaWVySW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5iaXJ0LmNoYXJ0Lm1vZGVsLmF0dHJpYnV0ZS5pbXBsLk51bWJlckZvcm1hdFNwZWNpZmllckltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2UuYmlydC5jaGFydC5tb2RlbC5jb21wb25lbnQuQXhpczsKK2ltcG9ydCBvcmcuZWNsaXBzZS5iaXJ0LmNoYXJ0Lm1vZGVsLmNvbXBvbmVudC5TZXJpZXM7CitpbXBvcnQgb3JnLmVjbGlwc2UuYmlydC5jaGFydC5tb2RlbC5jb21wb25lbnQuaW1wbC5TZXJpZXNJbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLmJpcnQuY2hhcnQubW9kZWwuZGF0YS5OdW1iZXJEYXRhU2V0OworaW1wb3J0IG9yZy5lY2xpcHNlLmJpcnQuY2hhcnQubW9kZWwuZGF0YS5TZXJpZXNEZWZpbml0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmJpcnQuY2hhcnQubW9kZWwuZGF0YS5pbXBsLk51bWJlckRhdGFFbGVtZW50SW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5iaXJ0LmNoYXJ0Lm1vZGVsLmRhdGEuaW1wbC5OdW1iZXJEYXRhU2V0SW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5iaXJ0LmNoYXJ0Lm1vZGVsLmRhdGEuaW1wbC5TZXJpZXNEZWZpbml0aW9uSW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5iaXJ0LmNoYXJ0Lm1vZGVsLmltcGwuQ2hhcnRXaXRoQXhlc0ltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2UuYmlydC5jaGFydC5tb2RlbC5sYXlvdXQuTGVnZW5kOworaW1wb3J0IG9yZy5lY2xpcHNlLmJpcnQuY2hhcnQubW9kZWwubGF5b3V0LlBsb3Q7CitpbXBvcnQgb3JnLmVjbGlwc2UuYmlydC5jaGFydC5tb2RlbC50eXBlLkxpbmVTZXJpZXM7CitpbXBvcnQgb3JnLmVjbGlwc2UuYmlydC5jaGFydC5tb2RlbC50eXBlLlNjYXR0ZXJTZXJpZXM7CitpbXBvcnQgb3JnLmVjbGlwc2UuYmlydC5jaGFydC5tb2RlbC50eXBlLmltcGwuU2NhdHRlclNlcmllc0ltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2UuYmlydC5jaGFydC51dGlsLlBsdWdpblNldHRpbmdzOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtUHJvcGVydHlEZXNjcmlwdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLkFjdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSUFjdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uTWVudU1hbmFnZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLlNlcGFyYXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuRGVjb3JhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5TVEVNVGltZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmFkYXB0ZXJzLnJlbGF0aXZldmFsdWUuaGlzdG9yeS5SZWxhdGl2ZVZhbHVlSGlzdG9yeVByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuYWRhcHRlcnMucmVsYXRpdmV2YWx1ZS5oaXN0b3J5LlJlbGF0aXZlVmFsdWVIaXN0b3J5UHJvdmlkZXJBZGFwdGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uam9icy5zaW11bGF0aW9uLklTaW11bGF0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udWkucHJlZmVyZW5jZXMuVmlzdWFsaXphdGlvblByZWZlcmVuY2VQYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udWkucmVwb3J0cy5BY3RpdmF0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LlNXVDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLlBhaW50RXZlbnQ7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5QYWludExpc3RlbmVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ncmFwaGljcy5Db2xvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZ3JhcGhpY3MuR0M7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmdyYXBoaWNzLkltYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNhbnZhczsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuTWVudTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5XaWRnZXQ7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaEFjdGlvbkNvbnN0YW50czsKKworLyoqCisgKiBUaW1lU2VyaWVzQ2FudmFzIGlzIGEgc3ViY2xhc3Mgb2Yge0BsaW5rIENhbnZhc30gc3VpdGFibGUgZm9yIGNoYXJ0IGRyYXdpbmdzLgorICovCitwdWJsaWMgY2xhc3MgVGltZVNlcmllc0NhbnZhcyBleHRlbmRzIENhbnZhcyB7CisKKwlwcm90ZWN0ZWQgSURldmljZVJlbmRlcmVyIGlkciA9IG51bGw7CisKKwkvKioKKwkgKiBUaGlzIGlzIHRoZSB7QGxpbmsgQ2hhcnR9IHRoYXQgcGxvdHMgdGhlIHJlbGF0aXZlIHZhbHVlcy4KKwkgKi8KKwlwcm90ZWN0ZWQgQ2hhcnQgY20gPSBudWxsOworCisJLyoqCisJICogVGhlIHByb3ZpZGVyIG9mIHJlbGF0aXZlIHZhbHVlcy4KKwkgKi8KKwlwcml2YXRlIFJlbGF0aXZlVmFsdWVIaXN0b3J5UHJvdmlkZXIgcnZocDsKKworCXByaXZhdGUgUmVwb3J0Q29udHJvbCBjb250cm9sID0gbnVsbDsKKwkKKwkvKioKKwkgKiBzb21lIGV4dHJhIGNvbG9ycworCSAqLworCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgQ29sb3JEZWZpbml0aW9uW10gY29sb3JEZWZhdWx0ID0geworCQkJCQkJCQkJCQkJCQkJQ29sb3JEZWZpbml0aW9uSW1wbC5CTFVFKCksIAorCQkJCQkJCQkJCQkJCQkJQ29sb3JEZWZpbml0aW9uSW1wbC5CTEFDSygpLCAKKwkJCQkJCQkJCQkJCQkJCUNvbG9yRGVmaW5pdGlvbkltcGwuR1JFWSgpLAorCQkJCQkJCQkJCQkJCQkJQ29sb3JEZWZpbml0aW9uSW1wbC5DWUFOKCksCisJCQkJCQkJCQkJCQkJCQlDb2xvckRlZmluaXRpb25JbXBsLk9SQU5HRSgpIAorCQkJCQkJCQkJCQkJCQkJfTsKKwkKKwkvKioKKwkgKiB1c2VkIHRvIGluZGV4IHRoZSBsaW5lIHNlcmllcyBzbyB3ZSBjYW4gc3RlcCB0aHJvdWdoIGRlZmF1bHQgY29sb3JzCisJICogd2hlbiBhIHVzZXIgY3VzdG9tIGNvbG9yIGlzIG5vdCB5ZXQgYXNzaWduZWQKKwkgKi8KKwlwcm90ZWN0ZWQgaW50IHNlcmllc0NvdW50ICA9IDA7CisKKwkvKioKKwkgKiBMb2cgb2YgemVybyBpcyBuZWdhdGl2ZSBpbmZpbml0eSBzbyBmb3IgZWFjaCBsb2NhdGlvbiB3ZSB3aWxsIGN1dCBvZmYgdGhlIG1pbmltdW0gdmFsdWUKKwkgKiBvZiBsb2coeSkgYXQgMC4xL1BPUFVMQVRJT04gZm9yIGRpc3BsYXkgcHVycG9zZXMgb25seQorCSAqLworCXByaXZhdGUgZG91YmxlIG1pbkxvZ1NjYWxlVmFsdWUgPSAxLjA7CisJCisJLyoqCisJICogb25jZSB0aW1lID4gREVGQVVMVF9BVVRPQVhJU19USFJFU0hPTEQgd2Ugc3RhcnQgdG8gYXV0b3Jlc2V0IHRoZSB0aW1lIGF4aXMgCisJICogdGljayBtYXJrcyBhbmQgc2NhbGUgc28gd2UgZG9uJ3QgaGF2ZSB0b28gbWFueSB0aWNrIG1hcmtzCisJICovCisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IERFRkFVTFRfQVVUT0FYSVNfVEhSRVNIT0xEID0gNTsKKwkKKwkvKioKKwkgKiB0aGUgbWF4IHZhbHVlIGZvciB0aGUgdGltZSAoeCkgYXhpcworCSAqLworCXByaXZhdGUgaW50IG1heFRpbWVBeGlzVmFsdWUgPSBERUZBVUxUX0FVVE9BWElTX1RIUkVTSE9MRDsKKwkKKwkvKioKKwkgKiB0aGUgbWluaW11bSBudW1iZXIgb2YgdGltZSBheGlzIHRpY2tzIAorCSAqLworCXByaXZhdGUgc3RhdGljIGZpbmFsIGludCBNSU5fVElDS1MgPSA1OworCQorCS8qKgorCSAqIHRoZSBtYXhpbXVtIG51bWJlciBvZiB0aW1lIGF4aXMgdGlja3MgIGFmdGVyIHRpbWU9REVGQVVMVF9BVVRPQVhJU19USFJFU0hPTEQ7CisJICovCisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IE1BWF9USUNLUyA9IDEwOworCQorCS8qKgorCSAqIHVzZWQgdG8gc2V0IHRoZSBhdXRvYXhpcyB0aWNrCisJICovCisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IFRJQ0tfVFJJR0dFUiA9IE1BWF9USUNLUy9NSU5fVElDS1M7CisKKwkvKioKKwkgKiBUaGlzIGlzIGEgbWFwIG9mIHByb3BlcnRpZXMgb2YgdGhlIGxhYmVsIHVwZGF0ZWQgYnkgdGhlIHNlbGVjdGVkCisJICoge0BsaW5rIERlY29yYXRvcn0gd2hvc2UgcmVsYXRpdmUgdmFsdWUgbWlnaHQgYmUgcGxvdHRlZCAoY29udGV4dCBtZW51IGFsbG93cyB1cyB0byB0b2dnbGUgdGhlIGluZGl2aWR1YWwKKwkgKiBwcm9wZXJ0aWVzIHRvIHBsb3QKKwkgKi8KKwlwcm90ZWN0ZWQgTWFwPEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IsQm9vbGVhbj4gcHJvcGVydGllc1RvUGxvdCA9IG5ldyBIYXNoTWFwPEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IsQm9vbGVhbj4oKTsKKworCS8qKgorCSAqIFRPRE8gdGhpcyBpcyB0ZW1wb3JhcnkgY29kZSBhbmQgc2hvdWxkIGJlIGluIHVzZXIgcHJlZmVyZW5jZXMKKwkgKiB3ZSB3YW50IHRvIGhpZGUgYSBmZXcgb2YgdGhlIHBvc3NpYmxlIGxpbmUtc2VyaWVzIG9uIHN0YXJ0IHVwCisJICovCisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nW10gSElERV9PTl9TVEFSVFVQID0geyJJUiIsIklGIiwiSW5jaWRlbmNlIiwiQmlydGhzIiwiRGVhdGhzIiwiUG9wdWxhdGlvbiBDb3VudCIsICJEaXNlYXNlIERlYXRocyJ9OworCXByaXZhdGUgc3RhdGljIGZpbmFsIFNldDxTdHJpbmc+IGRlZmF1bHRIaWRlU2V0ID0gbmV3IEhhc2hTZXQ8U3RyaW5nPigpOworCisJLyoqCisJICogdGhpcyBpcyBhIG1hcCBvZiB0aGUgRGF0YVNlcmllcyBvYmplY3QgKGtleWVkIGJ5IHByb3BlcnR5IG5hbWUpCisJICovCisJcHJvdGVjdGVkIGZpbmFsIE1hcDxTdHJpbmcsRGF0YVNlcmllcz4gZGF0YVNlcmllc01hcCA9IG5ldyBIYXNoTWFwPFN0cmluZyxEYXRhU2VyaWVzPigpOworCQorCQorCS8qKgorCSAqIFRoZXNlIGFyZSB0aGUgY3ljbGUgbnVtYmVycyB0aGF0IG1hdGNoIHRoZSByZWxhdGl2ZSB2YWx1ZXMgdGhhdCB3aWxsIGJlCisJICogcGxvdHRlZAorCSAqCisJICogQHNlZSAjcmVsYXRpdmVWYWx1ZXMKKwkgKi8KKwlwcml2YXRlIGZpbmFsIExpc3Q8SW50ZWdlcj4gY3ljbGVOdW1iZXJzID0gbmV3IEFycmF5TGlzdDxJbnRlZ2VyPigpOworCisJLyoqCisJICogQ2hhcnQgZ2VuZXJhdG9yIGluc3RhbmNlIChyZWZlcmVuY2UgdG8gYSBzaW5nbGV0b24pCisJICovCisJR2VuZXJhdG9yIGdyOworCisJCisJQXhpcyB5QXhpc1ByaW1hcnk7CisJQXhpcyB4QXhpc1ByaW1hcnk7CisKKwkKKwkvKioKKwkgKiBBIGNvbnRleHQgbWVudSBmb3IgdGhpcyB2aWV3CisJICovCisJTWVudSBwb3BVcE1lbnUgPSBudWxsOworCQorCS8vIEluaXQgYSBDb250ZXh0IE1lbnUgTWFuYWdlcgorCWZpbmFsIE1lbnVNYW5hZ2VyIGNvbnRleHRNZW51TWFuYWdlciA9IG5ldyBNZW51TWFuYWdlcigpOworCisJLyoqCisJICogc2V0IHkgYXhpcyB0byBhIGxpbmVhciBzY2FsZQorCSAqLworCXByaXZhdGUgTGluZWFyU2NhbGVBY3Rpb24gbGluZWFyVGltZUFjdGlvbjsKKwkvKioKKwkgKiBzZXQgeSBheGlzIHRvIGEgbG9nIHNjYWxlCisJICovCisJcHJpdmF0ZSBMb2dTY2FsZUFjdGlvbiBsb2dUaW1lQWN0aW9uOworCXByb3RlY3RlZCBib29sZWFuIHVzZUxpbmVhclRpbWVTY2FsZSA9IHRydWU7CisJCisJLyoqCisJICogc2hvdyB0aGUgbGVnZW5kICh0cnVlIGJ5IGRlZmF1bHQpCisJICovCisJcHJpdmF0ZSBMZWdlbmRWaWV3QWN0aW9uIHZpZXdMZWdlbmQ7CisKKwkvKioKKwkgKiBDbGVhciB0aGUgcHJvcGVydGllcyBmcm9tIHRoZSB0aW1lIHNlcmllcworCSAqLworCQorCXByaXZhdGUgQ2xlYXJBY3Rpb24gY2xlYXJBY3Rpb247CisJCisJTGlzdDxEaXNwbGF5YWJsZVByb3BlcnR5PiBkaXNwbGF5YWJsZVByb3BlcnRpZXM7CisJCisJLyoqCisJICogaGlkZSB0aGUgbGVnZW5kIAorCSAqLworCXByaXZhdGUgTGVnZW5kSGlkZUFjdGlvbiBoaWRlTGVnZW5kOworCXByb3RlY3RlZCBib29sZWFuIHNob3dMZWdlbmQgPSB0cnVlOworCQorCXByb3RlY3RlZCBMZWdlbmQgbGVnZW5kID0gbnVsbDsKKwkKKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgZGVmYXVsdEtleSA9ICIiOworCisJSW1hZ2UgaW1nQ2hhcnQgPSBudWxsOworCQorCS8qKgorCSAqIENvbnN0cnVjdG9yLgorCSAqCisJICogQHBhcmFtIHBhcmVudAorCSAqICAgICAgICAgICAgdGhlIFNXVCBwYXJlbnQgb2YgdGhlIHtAbGluayBXaWRnZXR9CisJICovCisJcHVibGljIFRpbWVTZXJpZXNDYW52YXMoZmluYWwgQ29tcG9zaXRlIHBhcmVudCkgeworCQlzdXBlcihwYXJlbnQsIFNXVC5ET1VCTEVfQlVGRkVSRUQgfCBTV1QuQk9SREVSKTsKKwkJCisJCS8vIGluaXQKKwkgCWZvciAoaW50IGkgPSAwOyBpIDwgSElERV9PTl9TVEFSVFVQLmxlbmd0aDsgaSArKykgeworCSAJCWRlZmF1bHRIaWRlU2V0LmFkZChISURFX09OX1NUQVJUVVBbaV0pOworCSAJfQorCQorCisJCWdyID0gR2VuZXJhdG9yLmluc3RhbmNlKCk7CisKKwkJdHJ5IHsKKwkJCWlkciA9IFBsdWdpblNldHRpbmdzLmluc3RhbmNlKCkuZ2V0RGV2aWNlKCJkdi5TV1QiKTsgLy8kTk9OLU5MUy0xJAorCQl9IGNhdGNoIChmaW5hbCBDaGFydEV4Y2VwdGlvbiBwZXgpIHsKKwkJCUFjdGl2YXRvci5sb2dFcnJvcigiUHJvYmxlbSBpbml0aWFsaXppbmcgY2hhcnQiLCBwZXgpOyAvLyROT04tTkxTLTEkCisJCQlyZXR1cm47CisJCX0KKworCQljb250cm9sID0gKFJlcG9ydENvbnRyb2wpIHBhcmVudDsKKwkJcnZocCA9IGNvbnRyb2wucnZocDsKKwkJCisJCWNtID0gY3JlYXRlU2ltcGxlTGluZUNoYXJ0KGRhdGFTZXJpZXNNYXAsIGN5Y2xlTnVtYmVycywgTWVzc2FnZXMKKwkJCQkuZ2V0U3RyaW5nKCJDQy50aXRsZSIpKTsgLy8kTk9OLU5MUy0xJAorCQlyZXNldERhdGEoKTsKKwkJYWRkUGFpbnRMaXN0ZW5lcihuZXcgUGFpbnRMaXN0ZW5lcigpIHsKKwkJCXB1YmxpYyB2b2lkIHBhaW50Q29udHJvbChmaW5hbCBQYWludEV2ZW50IHBlKSB7CisJCQkJZmluYWwgQ29tcG9zaXRlIHNvdXJjZSA9IChDb21wb3NpdGUpIHBlLmdldFNvdXJjZSgpOworCQkJCWZpbmFsIG9yZy5lY2xpcHNlLnN3dC5ncmFwaGljcy5SZWN0YW5nbGUgZCA9IHNvdXJjZQorCQkJCQkJLmdldENsaWVudEFyZWEoKTsKKwkJCQkKKwkJCQlpZihpbWdDaGFydCAhPSBudWxsKSBpbWdDaGFydC5kaXNwb3NlKCk7CisJCQkJaW1nQ2hhcnQgPSBuZXcgSW1hZ2Uoc291cmNlLmdldERpc3BsYXkoKSwgZCk7CisJCQkJaWRyLnNldFByb3BlcnR5KElEZXZpY2VSZW5kZXJlci5HUkFQSElDU19DT05URVhULCBuZXcgR0MoCisJCQkJCQlpbWdDaGFydCkpOworCQkJCWZpbmFsIEJvdW5kcyBib3VuZHMgPSBCb3VuZHNJbXBsLmNyZWF0ZShkLngsIGQueSwgZC53aWR0aCwKKwkJCQkJCWQuaGVpZ2h0KTsKKwkJCQlib3VuZHMuc2NhbGUoNzJkIC8gaWRyLmdldERpc3BsYXlTZXJ2ZXIoKS5nZXREcGlSZXNvbHV0aW9uKCkpOworCQkJCS8vIEJPVU5EUyBNVVNUIEJFIFNQRUNJRklFRCBJTiBQT0lOVFMKKworCQkJCXRyeSB7CisJCQkJCWdyLnJlbmRlcihpZHIsIGdyLmJ1aWxkKGlkci5nZXREaXNwbGF5U2VydmVyKCksIGNtLCBib3VuZHMsCisJCQkJCQkJbnVsbCwgbnVsbCwgbnVsbCkpOworCQkJCQlwZS5nYy5kcmF3SW1hZ2UoaW1nQ2hhcnQsIGQueCwgZC55KTsKKwkJCQl9IGNhdGNoIChmaW5hbCBDaGFydEV4Y2VwdGlvbiBjZSkgeworCQkJCQlBY3RpdmF0b3IubG9nRXJyb3IoIlByb2JsZW0gcmVuZGVyaW5nIGNoYXJ0IiwgY2UpOyAvLyROT04tTkxTLTEkCisJCQkJfQorCisJCQl9IC8vIHBhaW50Q29udHJvbAorCQl9IC8vIFBhaW50TGlzdGVuZXIKKworCQkpOworCisJCS8vQ3JlYXRlIGEgY29udGV4dCBtZW51IGZvciB0aGUgY2FudmFzCisJCWNyZWF0ZUNvbnRleHRNZW51KHRoaXMpOworCisJfSAvLyBUaW1lU2VyaWVzQ2FudmFzCisKKwkvKioKKwkgKiBUaGUgbWV0aG9kIHdoaWNoIGdldHMgdGhlIHtAbGluayBUaW1lU2VyaWVzQ2FudmFzfScgcmVwb3J0cyBsaXN0LCBhbmQKKwkgKiBkcmF3cyBpdCBvbiB0aGUge0BsaW5rIFRpbWVTZXJpZXNDYW52YXN9LgorCSAqCisJICovCisJcHVibGljIHN5bmNocm9uaXplZCB2b2lkIGRyYXcoKSB7CisKKwkJCisJCS8vIEhhcyBhIHJlbGF0aXZlIHZhbHVlIHByb3ZpZGVyIGJlZW4gcHJvdmlkZWQ/CisJCWlmIChydmhwICE9IG51bGwpIHsKKwkJCWRvdWJsZSBtYXhZID0gRG91YmxlLk1JTl9WQUxVRTsKKwkJCWRvdWJsZSBtaW5ZID0gRG91YmxlLk1BWF9WQUxVRTsKKworCQkJLy8gWWVzCisJCQkvLyBidWlsZCB1cCB0aGUgc2V0IG9mIHByb3BlcnRpZXMgdG8gcGxvdAorCQkJCisJCQkvLyBGaXJzdCB3ZSBkaXNhYmxlIGFsbCBzZXJpZXMgc28gdGhhdCB3ZSBvbmx5IHR1cm4gb24gdGhlIG9uZXMgdGhhdCBhcmUgZW5hYmxlZC4KKwkJCWZvcihEYXRhU2VyaWVzIGQ6IGRhdGFTZXJpZXNNYXAudmFsdWVzKCkpCisJCQkJZC5oaWRlKCk7CisJCQkJCQorCQkJTGlzdDxJdGVtUHJvcGVydHlEZXNjcmlwdG9yPiBpdGVtTGlzdCA9IG5ldyBBcnJheUxpc3Q8SXRlbVByb3BlcnR5RGVzY3JpcHRvcj4oKTsKKwkJCWl0ZW1MaXN0LmFkZEFsbChwcm9wZXJ0aWVzVG9QbG90LmtleVNldCgpKTsJCQorCQkJQ29sbGVjdGlvbnMuc29ydChpdGVtTGlzdCwgbmV3IENvbXBhcmF0b3I8SXRlbVByb3BlcnR5RGVzY3JpcHRvcj4oKSB7CisKKwkJCQlwdWJsaWMgaW50IGNvbXBhcmUoSXRlbVByb3BlcnR5RGVzY3JpcHRvciBvMSwKKwkJCQkJCUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IgbzIpIHsKKwkJCQkJcmV0dXJuIG8xLmdldERpc3BsYXlOYW1lKG8xKS5jb21wYXJlVG8obzIuZ2V0RGlzcGxheU5hbWUobzIpKTsKKwkJCQl9CisJCQl9KTsKKwkJCQkKKwkJCQorCQkJTGlzdDxJdGVtUHJvcGVydHlEZXNjcmlwdG9yPiBkaXNwbGF5ZWRQcm9wZXJ0eUxpc3QgPSBuZXcgQXJyYXlMaXN0PEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I+KCk7CisJCQlmb3IoSXRlbVByb3BlcnR5RGVzY3JpcHRvciBwcm9wZXJ0eTogaXRlbUxpc3QpeworCQkJCWJvb2xlYW4gdmlzaWJsZSA9IHByb3BlcnRpZXNUb1Bsb3QuZ2V0KHByb3BlcnR5KS5ib29sZWFuVmFsdWUoKTsKKwkJCQlkaXNwbGF5ZWRQcm9wZXJ0eUxpc3QuYWRkKHByb3BlcnR5KTsKKwkJCQlpZih2aXNpYmxlKSB7CisJCQkJCWlmKGRhdGFTZXJpZXNNYXAuY29udGFpbnNLZXkocHJvcGVydHkuZ2V0RGlzcGxheU5hbWUocHJvcGVydHkpKSkgeworCQkJCQkJRGF0YVNlcmllcyBzZXJpZXMgPSBkYXRhU2VyaWVzTWFwLmdldChwcm9wZXJ0eS5nZXREaXNwbGF5TmFtZShwcm9wZXJ0eSkpOworCQkJCQkJLy8gcmVtb3ZlIGl0CisJCQkJCQlpZighc2VyaWVzLmlzVmlzaWJsZSgpKSB7CisJCQkJCQkJc2VyaWVzLnNob3coKTsKKwkJCQkJCX0KKwkJCQkJfQorCQkJCX0gZWxzZSB7CisJCQkJCWlmKGRhdGFTZXJpZXNNYXAuY29udGFpbnNLZXkocHJvcGVydHkuZ2V0RGlzcGxheU5hbWUocHJvcGVydHkpKSkgeworCQkJCQkJRGF0YVNlcmllcyBzZXJpZXMgPSBkYXRhU2VyaWVzTWFwLmdldChwcm9wZXJ0eS5nZXREaXNwbGF5TmFtZShwcm9wZXJ0eSkpOworCQkJCQkJLy8gcmVtb3ZlIGl0CisJCQkJCQlpZihzZXJpZXMuaXNWaXNpYmxlKCkpIHsKKwkJCQkJCQlzZXJpZXMuaGlkZSgpOworCQkJCQkJfQorCQkJCQl9CisJCQkJfS8vIHZpc2libGU/CisJCQl9Ly8gYWxsIGRpc3BsYXllZFByb3BlcnRpZXMKKworCisJCQkvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisJCQkvLyBMb2coMC4wKSBpcyBuZWdhdGl2ZSBpbmZpbml0eSBzbyBmb3IgZGlzcGxheSBwdXJwb3NlcyBvbmx5CisJCQkvLyB3ZSBzZXQgdGhlIG1pbmltdW0gYXhpcyB2YWx1ZSBhdCAwLjEvUE9QVUxBVElPTgorCQkJZG91YmxlIGRlbm9tID0gcnZocC5nZXREZW5vbWluYXRvcihudWxsKTsKKwkJCWlmKGRlbm9tIDw9MC4wKSBkZW5vbSA9IDEuMDsKKwkJCW1pbkxvZ1NjYWxlVmFsdWUgPSAwLjEvZGVub207CisJCQkvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKKwkJCS8vIGNsZWFyCisJCQlyZXNldERhdGEoKTsKKwkJCQorCQkJCisJCQkKKwkJCWJvb2xlYW4gc2V0Q3ljbGVzID0gZmFsc2U7CisJCQkvLyBHZXQgdGhlIHZhbHVlcyBmb3IgdGhlIHByb3BlcnR5IHRvIGJlIHBsb3R0ZWQKKwkJCWludCBtYXhQb2ludHMgPSAwOworCQkJU1RFTVRpbWVbXSB0aW1lID0gcnZocC5nZXRBbGxIaXN0b3JpY1RpbWVWYWx1ZXMoKTsKKwkJCWN5Y2xlTnVtYmVycy5jbGVhcigpOworCQkJY3ljbGVOdW1iZXJzLmFkZChJbnRlZ2VyLnZhbHVlT2YoMCkpOworCQkJCisJCQkKKwkJCWZvciAoaW50IGkgPSAwOyBpIDwgZGlzcGxheWVkUHJvcGVydHlMaXN0LnNpemUoKTsgaSsrKSB7CisJCQkJSXRlbVByb3BlcnR5RGVzY3JpcHRvciBwcm9wZXJ0eSA9IGRpc3BsYXllZFByb3BlcnR5TGlzdC5nZXQoaSk7CisJCQkJU3RyaW5nIHByb3BlcnR5TmFtZSA9IHByb3BlcnR5LmdldERpc3BsYXlOYW1lKHByb3BlcnR5KTsKKwkJCQkKKwkJCQkvL1RFU1RJTkcKKwkJCQkvL1N5c3RlbS5vdXQucHJpbnRsbigibG9va2luZyBmb3IgIitwcm9wZXJ0eS5nZXREaXNwbGF5TmFtZShwcm9wZXJ0eSkpOworCQkJCWZpbmFsIGRvdWJsZVtdIGRvdWJsZVZhbHVlcyA9IHJ2aHAuZ2V0SGlzdG9yaWNJbnN0YW5jZXMocHJvcGVydHksdGltZSk7CisKKwkJCQkvLyBBbnkgdmFsdWVzPworCQkJCWlmIChkb3VibGVWYWx1ZXMubGVuZ3RoID4gMCkgeworCQkJCQlpZiAobWF4UG9pbnRzIDwgZG91YmxlVmFsdWVzLmxlbmd0aCkgeworCQkJCQkJbWF4UG9pbnRzID0gZG91YmxlVmFsdWVzLmxlbmd0aDsKKwkJCQkJfQorCisJCQkJCS8vIHRoaXMgbWlnaHQgYmUgYSBuZXcgZGlzcGxheQorCQkJCQkvLyBzbyB3ZSBoYXZlIHRvIGZpbGwgYW55IGVtcHR5IGRhdGEgc2V0CisJCQkJCWlmICghZGF0YVNlcmllc01hcC5jb250YWluc0tleShwcm9wZXJ0eS5nZXREaXNwbGF5TmFtZShwcm9wZXJ0eSkpKSB7CisJCQkJCQkKKwkJCQkJCURhdGFTZXJpZXMgc2VyaWVzID0gbmV3IERhdGFTZXJpZXMocHJvcGVydHlOYW1lLCBzZXJpZXNDb3VudCk7CisJCQkJCQkvLyB3ZSBhcmUgb3V0IG9mIGRhdGEgKHByb3BlcnRpZXMpIHNvIHdlIG5lZWQgdG8gZmlsbCBpbgorCQkJCQkJLy8gemVyb3MgZm9yIGFueSB1bnVzZWQgbGluZXMKKwkJCQkJCS8vIGZpbGwgaW4gdGhlIGVtcHR5IGFycmF5cworCQkJCQkJaWYoZG91YmxlVmFsdWVzLmxlbmd0aCA8IG1heFBvaW50cykgeworCQkJCQkJCWZvcihpbnQgaWkgPSBkb3VibGVWYWx1ZXMubGVuZ3RoOyBpaSA8IG1heFBvaW50cy0xOyBpaSArKykgeworCQkJCQkJCQkvLyBwYWQgd2l0aCB6ZXJvcworCQkJCQkJCQlzZXJpZXMuYWRkVmFsdWUobmV3IERvdWJsZSgwLjApKTsKKwkJCQkJCQl9CisJCQkJCQl9CisJCQkJCQkKKwkJCQkJCWRhdGFTZXJpZXNNYXAucHV0KHByb3BlcnR5TmFtZSwgc2VyaWVzKTsKKwkJCQkJfQorCisJCQkJCQorCQkJCQlmaW5hbCBpbnQgZWFybGllc3RDeWNsZU51bWJlciA9IHJ2aHAuZ2V0RWFybGllc3RDeWNsZU51bWJlcigpOworCQkJCQlEYXRhU2VyaWVzIHNlcmllcyA9IGRhdGFTZXJpZXNNYXAuZ2V0KHByb3BlcnR5LmdldERpc3BsYXlOYW1lKHByb3BlcnR5KSk7CisJCQkJCXNlcmllcy5zZXRDb2xvckRlZnMocHJvcGVydHkuZ2V0RGlzcGxheU5hbWUocHJvcGVydHkpKTsKKwkJCQkJCisJCQkJCQorCQkJCQlmb3IgKGludCBjeWNsZU51bWJlciA9IDA7IGN5Y2xlTnVtYmVyIDwgZG91YmxlVmFsdWVzLmxlbmd0aDsgY3ljbGVOdW1iZXIrKykgeworCQkJCQkJRG91YmxlIHZhbHVlOworCQkJCQkJZG91YmxlIGRpc3BsYXlWYWx1ZSA9IGRvdWJsZVZhbHVlc1tjeWNsZU51bWJlcl07CisJCQkJCQlpZiAoZGlzcGxheVZhbHVlIDw9IG1pbkxvZ1NjYWxlVmFsdWUgJiYgIXVzZUxpbmVhclRpbWVTY2FsZSkgeworCQkJCQkJCS8vIExvZygwLjApIGlzIG5lZ2F0aXZlIGluZmluaXR5IHNvIGZvciBkaXNwbGF5IHB1cnBvc2VzIG9ubHkKKwkJCQkJCQkvLyB3ZSBzZXQgdGhlIG1pbmltdW0gYXhpcyB2YWx1ZSBhdCAwLjEvUE9QVUxBVElPTgorCQkJCQkJCWRpc3BsYXlWYWx1ZSA9IG1pbkxvZ1NjYWxlVmFsdWU7CisJCQkJCQl9CisJCQkJCQlpZiAodXNlTGluZWFyVGltZVNjYWxlKSB7CisJCQkJCQkJdmFsdWUgPSBuZXcgRG91YmxlKGRpc3BsYXlWYWx1ZSk7CisJCQkJCQl9IGVsc2UgeworCQkJCQkJCXZhbHVlID0gbmV3IERvdWJsZShNYXRoLmxvZyhkaXNwbGF5VmFsdWUpKTsKKwkJCQkJCX0KKwkJCQkJCWlmKG1heFkgPCBkaXNwbGF5VmFsdWUgJiYgc2VyaWVzLmlzVmlzaWJsZSgpKSB7CisJCQkJCQkJbWF4WSA9IGRpc3BsYXlWYWx1ZTsKKwkJCQkJCX0KKwkJCQkJCQorCQkJCQkJaWYobWluWSA+IGRpc3BsYXlWYWx1ZSAmJiBzZXJpZXMuaXNWaXNpYmxlKCkpIHsKKwkJCQkJCQltaW5ZID0gZGlzcGxheVZhbHVlOworCQkJCQkJfQorCQkJCQkKKwkJCQkJCXNlcmllcy5hZGRWYWx1ZSh2YWx1ZSk7CisJCQkJCQkKKwkJCQkJCWlmICghc2V0Q3ljbGVzKSB7CisJCQkJCQkJdGhpcy5jeWNsZU51bWJlcnMuYWRkKEludGVnZXIudmFsdWVPZigKKwkJCQkJCQkJCWVhcmxpZXN0Q3ljbGVOdW1iZXIgKyBjeWNsZU51bWJlciArIDEpKTsKKwkJCQkJCQkKKwkJCQkJCQkvKgorCQkJCQkJCSAqIFdlIGRvbid0IHdhbnQgdG8gYWRkIHggKHRpbWUpIGF4aXMgdGlja3MgYWQgaW5maW5pdHVtIHNvIHdlIHdlIG5lZWQgdG8gZHluYW1pY2FsbHkKKwkJCQkJCQkgKiBjaGFuZ2UgdGhlIHNjYWxlLiBUaGlzIHdpbGwgdG9nZ2xlIGJldHdlZW4gNS0xMCB0aWNrcyBldmVyeSB0aW1lIHRoZSBtYXggdGltZSBkb3VibGVzCisJCQkJCQkJICogcGFzdCBhbiBpbml0aWFsIHZhbHVlIG9mIG1heFRpbWVBeGlzVmFsdWUgPSBERUZBVUxUX0FVVE9BWElTX1RIUkVTSE9MRCAoPSAyNSkKKwkJCQkJCQkgKi8KKwkJCQkJCQlpZih0aGlzLmN5Y2xlTnVtYmVycy5zaXplKCk+VElDS19UUklHR0VSKm1heFRpbWVBeGlzVmFsdWUpIHsKKwkJCQkJCQkJbWF4VGltZUF4aXNWYWx1ZSA9IHRoaXMuY3ljbGVOdW1iZXJzLnNpemUoKSsxIDsKKwkJCQkJCQkJaW50IHN0ZXBYID0gbWF4VGltZUF4aXNWYWx1ZSAvIE1JTl9USUNLUzsKKwkJCQkJCQkJeEF4aXNQcmltYXJ5LmdldFNjYWxlKCkuc2V0U3RlcChzdGVwWCk7CisJCQkJCQkJfQorCQkJCQkJfQorCQkJCQkJCisJCQkJCQkKKwkJCQkJfSAvLyBmb3IgY3ljbGVOdW1iZXIKKwkJCQkJLy9BY3RpdmF0b3IubG9nSW5mb3JtYXRpb24oIiAgIitzZXJpZXMucHJvcGVydHlOYW1lKyJjeWNsZXMgPSAiK3RoaXMuY3ljbGVOdW1iZXJzLnNpemUoKSsiIGRhdGFzaXplID0gIitzZXJpZXMuZ2V0RGF0YVNpemUoKSk7CisJCQkJCXNldEN5Y2xlcyA9IHRydWU7IC8vIHdlIHNldCB0aGVtIG9ubHkgb25jZQorCQkJCX0gZWxzZSB7CisJCQkJCXJlc2V0RGF0YSgpOworCQkJCX0KKworCQkJCQorCQkJfSAvLyBmb3IgaSBwcm9wZXJ0aWVzCisKKworCQkJLy8gU2V0IHRoZSBuZXcgbWluL21heCBidXQgb25seSBmb3IgbGluZWFyIHNjYWxlCisJCQlpZih1c2VMaW5lYXJUaW1lU2NhbGUpIHsKKwkJCQlpZihtYXhZID09IERvdWJsZS5NSU5fVkFMVUUpIHsKKwkJCQkJLy8gTm8gcGxvdHMKKwkJCQkJeUF4aXNQcmltYXJ5LmdldFNjYWxlKCkuc2V0TWF4KE51bWJlckRhdGFFbGVtZW50SW1wbC5jcmVhdGUoMS4wKSk7CisJCQkJCXlBeGlzUHJpbWFyeS5nZXRTY2FsZSgpLnNldE1pbihOdW1iZXJEYXRhRWxlbWVudEltcGwuY3JlYXRlKDAuMCkpOworCQkJCQl5QXhpc1ByaW1hcnkuZ2V0U2NhbGUoKS5zZXRTdGVwKDAuMjUpOworCQkJCQlzZXRZQXhpc051bWJlckZvcm1hdEZyb21NYXhZKDEuMCk7CisJCQkJfSBlbHNlIGlmKG1heFktbWluWSAhPSAwLjApIHsKKwkJCQkJeUF4aXNQcmltYXJ5LmdldFNjYWxlKCkuc2V0TWF4KE51bWJlckRhdGFFbGVtZW50SW1wbC5jcmVhdGUobWF4WSkpOworCQkJCQl5QXhpc1ByaW1hcnkuZ2V0U2NhbGUoKS5zZXRNaW4oTnVtYmVyRGF0YUVsZW1lbnRJbXBsLmNyZWF0ZSgwLjApKTsKKwkJCQkJeUF4aXNQcmltYXJ5LmdldFNjYWxlKCkuc2V0U3RlcCgobWF4WS1taW5ZKS9NSU5fVElDS1MpOworCQkJCQlzZXRZQXhpc051bWJlckZvcm1hdEZyb21NYXhZKG1heFkpOworIAkJCQl9IGVsc2UgaWYobWF4WSA9PSBtaW5ZICYmIG1heFkgPiAwLjApIHsKKwkJCQkJeUF4aXNQcmltYXJ5LmdldFNjYWxlKCkuc2V0TWF4KE51bWJlckRhdGFFbGVtZW50SW1wbC5jcmVhdGUobWF4WSkpOworCQkJCQl5QXhpc1ByaW1hcnkuZ2V0U2NhbGUoKS5zZXRNaW4oTnVtYmVyRGF0YUVsZW1lbnRJbXBsLmNyZWF0ZSgwLjApKTsKKwkJCQkJeUF4aXNQcmltYXJ5LmdldFNjYWxlKCkuc2V0U3RlcCgobWF4WSkvTUlOX1RJQ0tTKTsKKwkJCQkJc2V0WUF4aXNOdW1iZXJGb3JtYXRGcm9tTWF4WShtYXhZKTsKKwkJCQl9IGVsc2UgeworCQkJCQl5QXhpc1ByaW1hcnkuZ2V0U2NhbGUoKS5zZXRNYXgoTnVtYmVyRGF0YUVsZW1lbnRJbXBsLmNyZWF0ZSgxLjApKTsKKwkJCQkJeUF4aXNQcmltYXJ5LmdldFNjYWxlKCkuc2V0TWluKE51bWJlckRhdGFFbGVtZW50SW1wbC5jcmVhdGUoMC4wKSk7CisJCQkJCXlBeGlzUHJpbWFyeS5nZXRTY2FsZSgpLnNldFN0ZXAoMC4yNSk7CisJCQkJCXNldFlBeGlzTnVtYmVyRm9ybWF0RnJvbU1heFkoMS4wKTsKKwkJCQl9CisJCQl9IGVsc2Ugc2V0WUF4aXNMb2dOdW1iZXJGb3JtYXQoKTsKKwkJCQorCQl9IC8vIGlmIGEgcmVsYXRpdmUgdmFsdWUgcHJvdmlkZXIgaGFzIGJlZW4gcHJvdmlkZWQKKwkJZWxzZSB7CisJCQkvLyBObworCQkJLy8gTmVlZCB0byBjbGVhciBldmVyeXRoaW5nCisJCQlyZXNldERhdGEoKTsKKwkJfQorCisJCS8vIENoZWNrIGVhY2ggZGF0YSBzZXJpZXMgaW4gdGhlIG1hcCB0byBtYWtlIHN1cmUgdGhleSBoYXZlIGVub3VnaCBZIHZhbHVlcyBpbiB0aGVtIAorCQlmb3IoRGF0YVNlcmllcyBkczp0aGlzLmRhdGFTZXJpZXNNYXAudmFsdWVzKCkpIHsKKwkJCWlmKGRzLnJlbGF0aXZlVmFsdWVzLnNpemUoKSA8IHRoaXMuY3ljbGVOdW1iZXJzLnNpemUoKSkgeworCQkJCWRzLnJlbGF0aXZlVmFsdWVzLmNsZWFyKCk7CisJCQkJZm9yKGludCBuPTA7bjx0aGlzLmN5Y2xlTnVtYmVycy5zaXplKCk7KytuKSBkcy5hZGRWYWx1ZShuZXcgRG91YmxlKDAuMCkpOworCQkJfQorCQl9CisJCQorCQlpZiAoIXRoaXMuaXNEaXNwb3NlZCgpKSB7CisJCQlyZWRyYXcoKTsKKwkJfQorCX0gLy8gcGFpbnRDb250cm9sCisKKwlwcml2YXRlIHZvaWQgc2V0WUF4aXNMb2dOdW1iZXJGb3JtYXQoKSB7CisJCU51bWJlckZvcm1hdFNwZWNpZmllciBqbmZzID0gbnVsbDsKKwkJam5mcyA9IE51bWJlckZvcm1hdFNwZWNpZmllckltcGwuY3JlYXRlKCk7CisJCXlBeGlzUHJpbWFyeS5zZXRGb3JtYXRTcGVjaWZpZXIoam5mcyk7CisJfQorCisJLyoqCisJICogQ3JlYXRlIHRoZSB2aWV3J3MgY29udGV4dCBtZW51IGFuZCBhZGQgdGhlIGFjdGlvbiBoYW5kbGVycyB0byBpdC4KKwkgKi8KKwlwcml2YXRlIHZvaWQgY3JlYXRlQ29udGV4dE1lbnUoZmluYWwgQ29tcG9zaXRlIHBhcmVudCkgeworCisJCQorCisJCS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCQlsaW5lYXJUaW1lQWN0aW9uID0gbmV3IExpbmVhclNjYWxlQWN0aW9uKCk7CisJCWxvZ1RpbWVBY3Rpb24gPSBuZXcgTG9nU2NhbGVBY3Rpb24oKTsKKwkJY29udGV4dE1lbnVNYW5hZ2VyLmFkZChsaW5lYXJUaW1lQWN0aW9uKTsKKwkJY29udGV4dE1lbnVNYW5hZ2VyLmFkZChsb2dUaW1lQWN0aW9uKTsKKwkJLy8gUGxhY2UgSG9sZGVyIGZvciBNZW51IEFkZGl0aW9ucworCQljb250ZXh0TWVudU1hbmFnZXIuYWRkKG5ldyBTZXBhcmF0b3IoSVdvcmtiZW5jaEFjdGlvbkNvbnN0YW50cy5NQl9BRERJVElPTlMpKTsKKwkJLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJCXZpZXdMZWdlbmQgPSBuZXcgTGVnZW5kVmlld0FjdGlvbigpOworCQloaWRlTGVnZW5kID0gbmV3IExlZ2VuZEhpZGVBY3Rpb24oKTsKKwkJY29udGV4dE1lbnVNYW5hZ2VyLmFkZCh2aWV3TGVnZW5kKTsKKwkJY29udGV4dE1lbnVNYW5hZ2VyLmFkZChoaWRlTGVnZW5kKTsKKwkJLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJCS8vIFBsYWNlIEhvbGRlciBmb3IgTWVudSBBZGRpdGlvbnMKKwkJY29udGV4dE1lbnVNYW5hZ2VyLmFkZChuZXcgU2VwYXJhdG9yKAorCQkJCUlXb3JrYmVuY2hBY3Rpb25Db25zdGFudHMuTUJfQURESVRJT05TKSk7CisJCXBvcFVwTWVudSA9IGNvbnRleHRNZW51TWFuYWdlci5jcmVhdGVDb250ZXh0TWVudShwYXJlbnQpOworCQkvLyBTZXQgdGhlIGNvbnRleHQgbWVudSBmb3IgdGhlIHZpZXdlcgorCQlwYXJlbnQuc2V0TWVudShwb3BVcE1lbnUpOworCisJfSAvLyBjcmVhdGVDb250ZXh0TWVudQorCisKKwkvKioKKwkgKiBVcGRhdGUgdGhlIHZpZXcncyBjb250ZXh0IG1lbnUgYW5kIGFkZCB0aGUgYWN0aW9uIGhhbmRsZXJzIHRvIGl0LgorCSAqLworCXByaXZhdGUgdm9pZCB1cGRhdGVDb250ZXh0TWVudShmaW5hbCBDb21wb3NpdGUgcGFyZW50KSB7CisKKwkJcG9wVXBNZW51LmRpc3Bvc2UoKTsKKwkJCisJCS8vIEluaXQgYSBDb250ZXh0IE1lbnUgTWFuYWdlcgorCQorCQljb250ZXh0TWVudU1hbmFnZXIucmVtb3ZlQWxsKCk7CisJCS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCQlpZihsaW5lYXJUaW1lQWN0aW9uPT1udWxsKSBsaW5lYXJUaW1lQWN0aW9uID0gbmV3IExpbmVhclNjYWxlQWN0aW9uKCk7CisJCWlmKGxvZ1RpbWVBY3Rpb249PW51bGwpIGxvZ1RpbWVBY3Rpb24gPSBuZXcgTG9nU2NhbGVBY3Rpb24oKTsKKwkJY29udGV4dE1lbnVNYW5hZ2VyLmFkZChsaW5lYXJUaW1lQWN0aW9uKTsKKwkJY29udGV4dE1lbnVNYW5hZ2VyLmFkZChsb2dUaW1lQWN0aW9uKTsKKwkJY29udGV4dE1lbnVNYW5hZ2VyLnVwZGF0ZSgpOworCQkKKwkJLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJCS8vIFBsYWNlIEhvbGRlciBmb3IgTWVudSBBZGRpdGlvbnMKKwkJY29udGV4dE1lbnVNYW5hZ2VyLmFkZChuZXcgU2VwYXJhdG9yKElXb3JrYmVuY2hBY3Rpb25Db25zdGFudHMuTUJfQURESVRJT05TKSk7CisJCS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCQl2aWV3TGVnZW5kID0gbmV3IExlZ2VuZFZpZXdBY3Rpb24oKTsKKwkJaGlkZUxlZ2VuZCA9IG5ldyBMZWdlbmRIaWRlQWN0aW9uKCk7CisJCWNvbnRleHRNZW51TWFuYWdlci5hZGQodmlld0xlZ2VuZCk7CisJCWNvbnRleHRNZW51TWFuYWdlci5hZGQoaGlkZUxlZ2VuZCk7CisJCS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCQkvLyBQbGFjZSBIb2xkZXIgZm9yIE1lbnUgQWRkaXRpb25zCisJCWNvbnRleHRNZW51TWFuYWdlci5hZGQobmV3IFNlcGFyYXRvcihJV29ya2JlbmNoQWN0aW9uQ29uc3RhbnRzLk1CX0FERElUSU9OUykpOworCQkvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwkJLy8gYWRkIHRoZSBkaXNwbGF5YWJsZSBwcm9wZXJ0aWVzCisJCWlmKGRpc3BsYXlhYmxlUHJvcGVydGllcyA9PSBudWxsKSB7CisJCQlkaXNwbGF5YWJsZVByb3BlcnRpZXMgPSBuZXcgQXJyYXlMaXN0PERpc3BsYXlhYmxlUHJvcGVydHk+KCk7CisJCX0KKwkJZWxzZSB7CisJCQlkaXNwbGF5YWJsZVByb3BlcnRpZXMuY2xlYXIoKTsKKwkJfQorCQlpZihydmhwIT0gbnVsbCkgeworCQkJCQkvL0xpc3Q8SUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I+ICBwcm9wZXJ0aWVzID0gcnZocC5nZXRQcm9wZXJ0aWVzKCk7CisJCQkJCWNvbnRleHRNZW51TWFuYWdlci51cGRhdGUoKTsKKwkJCQkJSXRlcmF0b3I8SXRlbVByb3BlcnR5RGVzY3JpcHRvcj4gaXRlciA9IHByb3BlcnRpZXNUb1Bsb3Qua2V5U2V0KCkuaXRlcmF0b3IoKTsKKwkJCQkJCisJCQkJCS8vZm9yKGludCBpID0gMDsgaSA8IHByb3BlcnRpZXMuc2l6ZSgpOyBpICsrKSB7CisJCQkJCXdoaWxlKChpdGVyIT1udWxsKSYmKGl0ZXIuaGFzTmV4dCgpKSkgIHsKKwkJCQkJCUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IgbmV4dFByb3AgPSBpdGVyLm5leHQoKTsKKwkJCQkJCURpc3BsYXlhYmxlUHJvcGVydHkgcHJvcGVydHkgPSBuZXcgRGlzcGxheWFibGVQcm9wZXJ0eShuZXh0UHJvcCk7CisJCQkJCQlkaXNwbGF5YWJsZVByb3BlcnRpZXMuYWRkKHByb3BlcnR5KTsKKwkJCQkJCWNvbnRleHRNZW51TWFuYWdlci5hZGQocHJvcGVydHkpOworCQkJCQl9Ly8gZm9yIGFsbCBwcm9wZXJ0aWVzCisJCQkJCWNvbnRleHRNZW51TWFuYWdlci51cGRhdGVBbGwodHJ1ZSk7CisJCQkJfS8vIHJ2aHAgbm90IG51bGwKKwkJCisJCS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisJCS8vIFBsYWNlIEhvbGRlciBmb3IgTWVudSBBZGRpdGlvbnMKKwkJY29udGV4dE1lbnVNYW5hZ2VyLmFkZChuZXcgU2VwYXJhdG9yKAorCQkJCUlXb3JrYmVuY2hBY3Rpb25Db25zdGFudHMuTUJfQURESVRJT05TKSk7CisKKwkJLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJCQorCQljbGVhckFjdGlvbiA9IG5ldyBDbGVhckFjdGlvbigpOworCQkKKwkJY29udGV4dE1lbnVNYW5hZ2VyLmFkZChjbGVhckFjdGlvbik7CisJCWNvbnRleHRNZW51TWFuYWdlci51cGRhdGUoKTsKKwkJY29udGV4dE1lbnVNYW5hZ2VyLmFkZChuZXcgU2VwYXJhdG9yKElXb3JrYmVuY2hBY3Rpb25Db25zdGFudHMuTUJfQURESVRJT05TKSk7CisJCWZpbmFsIE1lbnUgcG9wVXBNZW51ID0gY29udGV4dE1lbnVNYW5hZ2VyLmNyZWF0ZUNvbnRleHRNZW51KHBhcmVudCk7CisKKwkJLy8gU2V0IHRoZSBjb250ZXh0IG1lbnUgZm9yIHRoZSB2aWV3ZXIKKwkJcGFyZW50LnNldE1lbnUocG9wVXBNZW51KTsKKworCisJfSAvLyB1cGRhdGVDb250ZXh0TWVudQorCisKKwkvKioKKwkgKiBAcGFyYW0gZGF0YVNlcmllc01hcCB0aGUge0BsaW5rIE1hcH0gdGhhdCB3aWxsIGNvbnRhaW4gdGhlIHJlbGF0aXZlIHZhbHVlcworCSAqICAgICAgICAgICAgKDAuMC0xLjApIHRvIHBsb3QKKwkgKiBAcGFyYW0gY3ljbGVOdW1iZXJzCisJICogICAgICAgICAgICB0aGUge0BsaW5rIExpc3R9IG9mIHNpbXVsYXRpb24gY3ljbGUgbnVtYmVycyB0aGF0IG1hdGNoIHRoZQorCSAqICAgICAgICAgICAgcmVsYXRpdmUgdmFsdWVzCisJICogQHBhcmFtIHNlcmllc0lkZW50aWZpZXIKKwkgKiAgICAgICAgICAgIHRoZSB0aXRsZSBvZiB0aGUgY2hhcnQKKwkgKiBAcmV0dXJuIGEgPGNvZGU+Q2hhcnQ8L2NvZGU+CisJICovCisJcHVibGljIGZpbmFsIENoYXJ0IGNyZWF0ZVNpbXBsZUxpbmVDaGFydCgKKwkJCWZpbmFsIE1hcDxTdHJpbmcsIERhdGFTZXJpZXM+IGRhdGFTZXJpZXNNYXAsCisJCQlmaW5hbCBMaXN0PEludGVnZXI+IGN5Y2xlTnVtYmVycywgZmluYWwgU3RyaW5nIHNlcmllc0lkZW50aWZpZXIpIHsKKwkJCisJCWZpbmFsIENoYXJ0V2l0aEF4ZXMgY2hhcnRXaXRoQXhlcyA9IENoYXJ0V2l0aEF4ZXNJbXBsLmNyZWF0ZSgpOworCisJCisJCS8vIFBsb3QKKwkJY2hhcnRXaXRoQXhlcy5nZXRCbG9jaygpLnNldEJhY2tncm91bmQoQ29sb3JEZWZpbml0aW9uSW1wbC5jcmVhdGUoNTAsIDUwLDUwKSk7CisJCWZpbmFsIFBsb3QgcCA9IGNoYXJ0V2l0aEF4ZXMuZ2V0UGxvdCgpOworCQlwLmdldENsaWVudEFyZWEoKS5zZXRCYWNrZ3JvdW5kKCBDb2xvckRlZmluaXRpb25JbXBsLmNyZWF0ZSgwLCAwLCAwKSk7CisKKwkJLy8gVGl0bGUKKwkJLy8gY3dhTGluZS5nZXRUaXRsZSggKS5nZXRMYWJlbCggKS5nZXRDYXB0aW9uKCApLnNldFZhbHVlKCAiTGluZSBDaGFydCIKKwkJLy8gKTsvLyROT04tTkxTLTEkCisJCWNoYXJ0V2l0aEF4ZXMuZ2V0VGl0bGUoKS5zZXRWaXNpYmxlKGZhbHNlKTsKKworCQkvLyBMZWdlbmQKKwkJbGVnZW5kID0gY2hhcnRXaXRoQXhlcy5nZXRMZWdlbmQoKTsKKwkJZmluYWwgTGluZUF0dHJpYnV0ZXMgbGlhID0gbGVnZW5kLmdldE91dGxpbmUoKTsKKwkJbGVnZW5kLmdldFRleHQoKS5nZXRGb250KCkuc2V0U2l6ZSg4KTsKKwkJbGlhLnNldFN0eWxlKExpbmVTdHlsZS5TT0xJRF9MSVRFUkFMKTsKKwkJbGVnZW5kLmdldEluc2V0cygpLnNldCgxMCwgNSwgMCwgMCk7CisJCWxlZ2VuZC5nZXRPdXRsaW5lKCkuc2V0VmlzaWJsZShmYWxzZSk7CisJCWxlZ2VuZC5zZXRBbmNob3IoQW5jaG9yLk5PUlRIX0xJVEVSQUwpOworCQlsZWdlbmQuc2V0UG9zaXRpb24oUG9zaXRpb24uQkVMT1dfTElURVJBTCk7CisJCWxlZ2VuZC5nZXRUZXh0KCkuc2V0Q29sb3IoQ29sb3JEZWZpbml0aW9uSW1wbC5jcmVhdGUoMjU1LCAyNTUsIDI1NSkpOworCQlsZWdlbmQuZ2V0T3V0bGluZSgpLnNldENvbG9yKENvbG9yRGVmaW5pdGlvbkltcGwuY3JlYXRlKDI1NSwgMjU1LCAyNTUpKTsKKworCQkvLyAvLy8vLy8vLy8KKwkJLy8gWC1BeGlzCisJCXhBeGlzUHJpbWFyeSA9IGNoYXJ0V2l0aEF4ZXMuZ2V0UHJpbWFyeUJhc2VBeGVzKClbMF07CisJCXhBeGlzUHJpbWFyeS5nZXRNYWpvckdyaWQoKS5zZXRUaWNrU3R5bGUoVGlja1N0eWxlLkJFTE9XX0xJVEVSQUwpOworCQl4QXhpc1ByaW1hcnkuZ2V0T3JpZ2luKCkuc2V0VHlwZShJbnRlcnNlY3Rpb25UeXBlLlZBTFVFX0xJVEVSQUwpOworCQl4QXhpc1ByaW1hcnkuZ2V0VGl0bGUoKS5zZXRWaXNpYmxlKGZhbHNlKTsKKwkJeEF4aXNQcmltYXJ5LmdldFRpdGxlKCkuZ2V0Q2FwdGlvbigpLmdldEZvbnQoKS5zZXRTaXplKDkpOworCQl4QXhpc1ByaW1hcnkuZ2V0VGl0bGUoKS5nZXRDYXB0aW9uKCkuc2V0Q29sb3IoQ29sb3JEZWZpbml0aW9uSW1wbC5jcmVhdGUoMjU1LCAyNTUsIDI1NSkpOworCQl4QXhpc1ByaW1hcnkuZ2V0TGFiZWwoKS5nZXRDYXB0aW9uKCkuc2V0Q29sb3IoQ29sb3JEZWZpbml0aW9uSW1wbC5jcmVhdGUoMjU1LCAyNTUsIDI1NSkpOworCQl4QXhpc1ByaW1hcnkuc2V0VHlwZShBeGlzVHlwZS5MSU5FQVJfTElURVJBTCk7CisJCisJCWZpbmFsIFNlcmllcyBzZUNhdGVnb3J5ID0gU2VyaWVzSW1wbC5jcmVhdGUoKTsKKworCQkvLyBuZXcgY29sb3JzCisJCXNlQ2F0ZWdvcnkuZ2V0TGFiZWwoKS5nZXRDYXB0aW9uKCkuc2V0Q29sb3IoQ29sb3JEZWZpbml0aW9uSW1wbC5jcmVhdGUoMjU1LCAyNTUsIDI1NSkpOworCQlzZUNhdGVnb3J5LmdldExhYmVsKCkuZ2V0T3V0bGluZSgpLnNldENvbG9yKENvbG9yRGVmaW5pdGlvbkltcGwuY3JlYXRlKDI1NSwgMjU1LCAyNTUpKTsKKwkJLy8KKworCQlmaW5hbCBOdW1iZXJEYXRhU2V0IGNhdGVnb3J5VmFsdWVzID0gTnVtYmVyRGF0YVNldEltcGwKKwkJCQkuY3JlYXRlKGN5Y2xlTnVtYmVycyk7CisJCXNlQ2F0ZWdvcnkuc2V0RGF0YVNldChjYXRlZ29yeVZhbHVlcyk7CisJCWZpbmFsIFNlcmllc0RlZmluaXRpb24gc2RYID0gU2VyaWVzRGVmaW5pdGlvbkltcGwuY3JlYXRlKCk7CisKKwkJeEF4aXNQcmltYXJ5LmdldFNlcmllc0RlZmluaXRpb25zKCkuYWRkKHNkWCk7CisJCXNkWC5nZXRTZXJpZXMoKS5hZGQoc2VDYXRlZ29yeSk7CisKKwkJLy8gLy8vLy8vLy8KKwkJLy8gWS1BeGlzCisJCXRoaXMueUF4aXNQcmltYXJ5ID0gY2hhcnRXaXRoQXhlcy5nZXRQcmltYXJ5T3J0aG9nb25hbEF4aXMoeEF4aXNQcmltYXJ5KTsKKwkJeUF4aXNQcmltYXJ5LmdldE1ham9yR3JpZCgpLnNldFRpY2tTdHlsZShUaWNrU3R5bGUuTEVGVF9MSVRFUkFMKTsKKwkJLy8gZW5kIFktU2VyaWVzCisKKwkJeEF4aXNQcmltYXJ5LmdldFNjYWxlKCkuc2V0TWluKE51bWJlckRhdGFFbGVtZW50SW1wbC5jcmVhdGUoMC4wKSk7CisJCXhBeGlzUHJpbWFyeS5nZXRTY2FsZSgpLnNldFN0ZXAoMSk7CisJCQorCQkvL3hBeGlzUHJpbWFyeS5nZXRTY2FsZSgpLnNldE1heChOdW1iZXJEYXRhRWxlbWVudEltcGwuY3JlYXRlKFRJQ0tfVFJJR0dFUipERUZBVUxUX0FVVE9BWElTX1RIUkVTSE9MRCkpOworCQkvL2ludCBudW1UaWNrcyA9IFRJQ0tfVFJJR0dFUipERUZBVUxUX0FVVE9BWElTX1RIUkVTSE9MRC9NSU5fVElDS1M7CisJCS8vCisJCQorCQkKKwkJCisJCXhBeGlzUHJpbWFyeS5nZXRMYWJlbCgpLmdldENhcHRpb24oKS5nZXRGb250KCkuc2V0U2l6ZSg5KTsKKy8vCQl4QXhpc1ByaW1hcnkuZ2V0TGFiZWwoKS5nZXRDYXB0aW9uKCkuc2V0Q29sb3IoZm9yZUdyb3VuZCk7CisJCXNldFRpbWVMYWJlbCgpOworCisJCXlBeGlzUHJpbWFyeS5nZXRTY2FsZSgpLnNldE1pbihOdW1iZXJEYXRhRWxlbWVudEltcGwuY3JlYXRlKDAuMCkpOworCQl5QXhpc1ByaW1hcnkuZ2V0U2NhbGUoKS5zZXRNYXgoTnVtYmVyRGF0YUVsZW1lbnRJbXBsLmNyZWF0ZSgxLjApKTsKKwkJeUF4aXNQcmltYXJ5LmdldFNjYWxlKCkuc2V0U3RlcCgwLjI1KTsKKwkJeUF4aXNQcmltYXJ5LmdldExhYmVsKCkuZ2V0Q2FwdGlvbigpLmdldEZvbnQoKS5zZXRTaXplKDkpOworCQl5QXhpc1ByaW1hcnkuZ2V0TGFiZWwoKS5nZXRDYXB0aW9uKCkuc2V0Q29sb3IoQ29sb3JEZWZpbml0aW9uSW1wbC5jcmVhdGUoMjU1LCAyNTUsIDI1NSkpOworCQl5QXhpc1ByaW1hcnkuZ2V0VGl0bGUoKS5nZXRDYXB0aW9uKCkuc2V0Q29sb3IoQ29sb3JEZWZpbml0aW9uSW1wbC5jcmVhdGUoMjU1LCAyNTUsIDI1NSkpOworCQlzZXRZQXhpc051bWJlckZvcm1hdEZyb21NYXhZKDEuMCk7CisJCQorCQkKKwkJLy8geUF4aXNQcmltYXJ5LmdldE1ham9yR3JpZCgpLmdldExpbmVBdHRyaWJ1dGVzKCkuc2V0Q29sb3IoZm9yZUdyb3VuZCk7CisJCQorCQkvLyBmb3Igbm93IGdldCByZWFkeSB0byBjcmVhdGUgb25seSBvbmUgbGluZSAtIHdlIGhhdmUgbm8gZGF0YSB5ZXQuCisJCS8vIHdlIHdpbGwgYWRkIG1vcmUgbGluZXMgYXMgd2UgbmVlZCB0aGVtCisJCS8vIGhhbmRsZSBudWxsCisJCWlmKCFkYXRhU2VyaWVzTWFwLmNvbnRhaW5zS2V5KGRlZmF1bHRLZXkpKSB7CisJCQlEYXRhU2VyaWVzIHNlcmllcyA9IG5ldyBEYXRhU2VyaWVzKGRlZmF1bHRLZXksIHNlcmllc0NvdW50KTsKKwkJCWRhdGFTZXJpZXNNYXAucHV0KGRlZmF1bHRLZXksIHNlcmllcyk7CisJCX0KKworCQlyZXR1cm4gY2hhcnRXaXRoQXhlczsKKwl9IC8vIGNyZWF0ZVNpbXBsZUxpbmVDaGFydAorCisJcHJpdmF0ZSB2b2lkIHNldFlBeGlzTnVtYmVyRm9ybWF0RnJvbU1heFkoZG91YmxlIG1heFkpIHsKKwkJSmF2YU51bWJlckZvcm1hdFNwZWNpZmllciBqbmZzID0gbnVsbDsKKwkJaWYobWF4WSA8IDAuMDAxKSAKKwkJCWpuZnMgPSBKYXZhTnVtYmVyRm9ybWF0U3BlY2lmaWVySW1wbC5jcmVhdGUoIjAuIyMjI0UwIik7CisJCWVsc2UKKwkJCWpuZnMgPSBKYXZhTnVtYmVyRm9ybWF0U3BlY2lmaWVySW1wbC5jcmVhdGUoIjAuIyMjIyMiKTsKKwkJeUF4aXNQcmltYXJ5LnNldEZvcm1hdFNwZWNpZmllcihqbmZzKTsKKwkJCisJfQorCisJdm9pZCBzZXRUaW1lTGFiZWwoKSB7CisJCVN0cmluZyB2YWwgPSAiIjsKKwkJaWYgKGNvbnRyb2wgIT0gbnVsbCkgeworCQkJZmluYWwgSVNpbXVsYXRpb24gc2ltID0gY29udHJvbC5zaW11bGF0aW9uOworCQkJaWYgKHNpbSAhPSBudWxsKSB7CisJCQkJZmluYWwgbG9uZyB0aW1lRGVsdGEgPSBzaW0uZ2V0U2NlbmFyaW8oKS5nZXRTZXF1ZW5jZXIoKQorCQkJCQkJLmdldFRpbWVEZWx0YSgpOworCisJCQkJaWYgKHRpbWVEZWx0YSA8IFNURU1UaW1lLlVuaXRzLk1JTlVURS5nZXRNaWxsaXNlY29uZHMoKSkgeworCQkJCQl2YWwgPSAic2VjcyI7CisJCQkJCXhBeGlzUHJpbWFyeS5nZXRUaXRsZSgpLnNldFZpc2libGUodHJ1ZSk7CisJCQkJCXhBeGlzUHJpbWFyeS5nZXRUaXRsZSgpLmdldENhcHRpb24oKS5zZXRWYWx1ZSh2YWwpOworCQkJCQlyZXR1cm47CisJCQkJfSBlbHNlIGlmICh0aW1lRGVsdGEgPCBTVEVNVGltZS5Vbml0cy5IT1VSLmdldE1pbGxpc2Vjb25kcygpKSB7CisJCQkJCXZhbCA9ICJtaW5zIjsKKwkJCQkJeEF4aXNQcmltYXJ5LmdldFRpdGxlKCkuc2V0VmlzaWJsZSh0cnVlKTsKKwkJCQkJeEF4aXNQcmltYXJ5LmdldFRpdGxlKCkuZ2V0Q2FwdGlvbigpLnNldFZhbHVlKHZhbCk7CisJCQkJCXJldHVybjsKKwkJCQl9IGVsc2UgaWYgKHRpbWVEZWx0YSA8IFNURU1UaW1lLlVuaXRzLkRBWS5nZXRNaWxsaXNlY29uZHMoKSkgeworCQkJCQl2YWwgPSAiaHJzIjsKKwkJCQkJeEF4aXNQcmltYXJ5LmdldFRpdGxlKCkuc2V0VmlzaWJsZSh0cnVlKTsKKwkJCQkJeEF4aXNQcmltYXJ5LmdldFRpdGxlKCkuZ2V0Q2FwdGlvbigpLnNldFZhbHVlKHZhbCk7CisJCQkJCXJldHVybjsKKworCQkJCX0gZWxzZSBpZiAodGltZURlbHRhIDw9IFNURU1UaW1lLlVuaXRzLldFRUsuZ2V0TWlsbGlzZWNvbmRzKCkpIHsKKwkJCQkJdmFsID0gImRheXMiOworCQkJCQl4QXhpc1ByaW1hcnkuZ2V0VGl0bGUoKS5zZXRWaXNpYmxlKHRydWUpOworCQkJCQl4QXhpc1ByaW1hcnkuZ2V0VGl0bGUoKS5nZXRDYXB0aW9uKCkuc2V0VmFsdWUodmFsKTsKKwkJCQkJcmV0dXJuOworCisJCQkJfSBlbHNlIGlmICh0aW1lRGVsdGEgPCA0ICogU1RFTVRpbWUuVW5pdHMuV0VFSworCQkJCQkJLmdldE1pbGxpc2Vjb25kcygpKSB7CisJCQkJCXZhbCA9ICJ3ZWVrcyI7CisJCQkJCXhBeGlzUHJpbWFyeS5nZXRUaXRsZSgpLnNldFZpc2libGUodHJ1ZSk7CisJCQkJCXhBeGlzUHJpbWFyeS5nZXRUaXRsZSgpLmdldENhcHRpb24oKS5zZXRWYWx1ZSh2YWwpOworCQkJCQlyZXR1cm47CisJCQkJfSBlbHNlIGlmICh0aW1lRGVsdGEgPCBTVEVNVGltZS5Vbml0cy5ZRUFSLmdldE1pbGxpc2Vjb25kcygpKSB7CisJCQkJCXZhbCA9ICJtb250aHMiOworCQkJCQl4QXhpc1ByaW1hcnkuZ2V0VGl0bGUoKS5zZXRWaXNpYmxlKHRydWUpOworCQkJCQl4QXhpc1ByaW1hcnkuZ2V0VGl0bGUoKS5nZXRDYXB0aW9uKCkuc2V0VmFsdWUodmFsKTsKKwkJCQkJcmV0dXJuOworCQkJCX0gZWxzZSB7CisJCQkJCXZhbCA9ICJ5ZWFycyI7CisJCQkJCXhBeGlzUHJpbWFyeS5nZXRUaXRsZSgpLnNldFZpc2libGUodHJ1ZSk7CisJCQkJCXhBeGlzUHJpbWFyeS5nZXRUaXRsZSgpLmdldENhcHRpb24oKS5zZXRWYWx1ZSh2YWwpOworCQkJCQlyZXR1cm47CisJCQkJfQorCisJCQl9IC8vIHNpbSAhIG51bGwKKwkJfS8vIGNvbnRyb2wgISBudWxsCisKKwl9IC8vIHNldFRpbWVMYWJlbCgpCisKKwkKKwkKKwkKKwkvKioKKwkgKiBAcGFyYW0gcnZocAorCSAqIEBwYXJhbSBwcm9wZXJ0aWVzVG9QbG90TGlzdAorCSAqLworCXB1YmxpYyBzeW5jaHJvbml6ZWQgdm9pZCBzZXREYXRhU291cmNlQW5kUmVkcmF3KAorCQkJZmluYWwgUmVsYXRpdmVWYWx1ZUhpc3RvcnlQcm92aWRlckFkYXB0ZXIgcnZocCwKKwkJCWZpbmFsIExpc3Q8SUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I+IHByb3BlcnRpZXNUb1Bsb3RMaXN0KSB7CisJCQorCQkKKwkJCisJCWlmKHJ2aHAhPXRoaXMucnZocCkgeworCQkJdGhpcy5ydmhwPSBydmhwOworCQkJcmVtb3ZlRGF0YVNlcmllcygpOworCQkJdGhpcy5wcm9wZXJ0aWVzVG9QbG90LmNsZWFyKCk7CisJCQl0aGlzLnByb3BlcnRpZXNUb1Bsb3QgPSBhZGRQcm9wZXJ0aWVzKHByb3BlcnRpZXNUb1Bsb3RMaXN0KTsKKwkJfQorCQkKKwkJdXBkYXRlQ29udGV4dE1lbnUodGhpcyk7CisJCWRyYXcoKTsKKwl9IC8vIHNldERhdGFTb3VyY2VBbmRSZWRyYXcKKworCS8qKgorCSAqIEZpbHRlcnMgYSBsaXN0IG9mIEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzIHRvIHNob3cgcHJlZmVycmVkIHByb3BlcnRpZXMgaWYKKwkgKiBhdCBsZWFzdCBvbmUgZXhpc3RzLiBJZiBub3QsIGp1c3QgcmV0dXJucyB0aGUgZW50aXJlIGxpc3QuCisJICoKKwkgKiBAcmV0dXJuIGZpbHRlcmVkTGlzdDxJdGVtUHJvcGVydHlEZXNjcmlwdG9yPgorCSAqLworCXByb3RlY3RlZCBMaXN0PEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I+IGZpbHRlclByZWZlcnJlZFByb3BlcnRpZXMoCisJCQlmaW5hbCBMaXN0PEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I+IGZ1bGxMaXN0KSB7CisJCWZpbmFsIExpc3Q8SXRlbVByb3BlcnR5RGVzY3JpcHRvcj4gcHJvcGVydHlMaXN0ID0gbmV3IEFycmF5TGlzdDxJdGVtUHJvcGVydHlEZXNjcmlwdG9yPigpOworCQkvLyBBcmUgYW55IG9mIHRoZSBsYWJlbHMgaW4gdGhlIHByZWZlcmVuY2Ugc2V0PworCQlmaW5hbCBTZXQ8U3RyaW5nPiBwcmVmU2V0ID0gVmlzdWFsaXphdGlvblByZWZlcmVuY2VQYWdlCisJCQkJLmdldFByZWZlcmVuY2VTZXQoKTsKKworCQlmb3IgKGludCBpID0gMDsgaSA8IGZ1bGxMaXN0LnNpemUoKTsgaSsrKSB7CisJCQlmaW5hbCBJdGVtUHJvcGVydHlEZXNjcmlwdG9yIHByb3BlcnR5ID0gZnVsbExpc3QuZ2V0KGkpOworCQkJaWYgKHByZWZTZXQuY29udGFpbnMocHJvcGVydHkuZ2V0RGlzcGxheU5hbWUocHJvcGVydHkpKSkgeworCQkJCXByb3BlcnR5TGlzdC5hZGQocHJvcGVydHkpOworCQkJfQorCQl9CisJCS8vIGlmIHdlIGRpZG4ndCBmaW5kIGFueSBpbiB0aGUgcHJlZmVyZW5jZXMgdGhlbiBqdXN0IGFkZCB0aGVtIGFsbAorCQlpZiAocHJvcGVydHlMaXN0LnNpemUoKSA9PSAwKSB7CisJCQlwcm9wZXJ0eUxpc3QuYWRkQWxsKGZ1bGxMaXN0KTsKKwkJfQorCQlyZXR1cm4gcHJvcGVydHlMaXN0OworCX0KKworCisJLyoqCisJICogRmlsdGVycyBhIGxpc3Qgb2YgSXRlbVByb3BlcnR5RGVzY3JpcHRvcnMgdG8gc2hvdyBwcmVmZXJyZWQgcHJvcGVydGllcyBpZgorCSAqIGF0IGxlYXN0IG9uZSBleGlzdHMuIElmIG5vdCwganVzdCByZXR1cm5zIHRoZSBlbnRpcmUgbGlzdC4KKwkgKgorCSAqIEByZXR1cm4gZmlsdGVyZWRMaXN0PEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I+CisJICovCisJcHJvdGVjdGVkIE1hcDxJdGVtUHJvcGVydHlEZXNjcmlwdG9yLEJvb2xlYW4+IGFkZFByb3BlcnRpZXMoZmluYWwgTGlzdDxJSXRlbVByb3BlcnR5RGVzY3JpcHRvcj4gcHJvcGVydGllc1RvUGxvdExpc3QpIHsKKworCQlmb3IgKGludCBpID0gMDsgaSA8IHByb3BlcnRpZXNUb1Bsb3RMaXN0LnNpemUoKTsgaSsrKSB7CisJCQlmaW5hbCBJdGVtUHJvcGVydHlEZXNjcmlwdG9yIHByb3BlcnR5ID0gKEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IpcHJvcGVydGllc1RvUGxvdExpc3QuZ2V0KGkpOworCQkJaWYoIXByb3BlcnRpZXNUb1Bsb3QuY29udGFpbnNLZXkocHJvcGVydHkpKSB7CisJCQkJYm9vbGVhbiB2aXNpYmxlID0gdHJ1ZTsKKwkJCQlpZihkZWZhdWx0SGlkZVNldC5jb250YWlucyhwcm9wZXJ0eS5nZXREaXNwbGF5TmFtZShwcm9wZXJ0eSkpKSB2aXNpYmxlID0gZmFsc2U7CisJCQkJQm9vbGVhbiBiT2JqID0gQm9vbGVhbi52YWx1ZU9mKHZpc2libGUpOyAvL2RlZmF1bHQgdmlzaWJpbGl0eQorCQkJCXRoaXMucHJvcGVydGllc1RvUGxvdC5wdXQocHJvcGVydHksYk9iaik7CisJCQl9CisJCX0KKworCQlyZXR1cm4gdGhpcy5wcm9wZXJ0aWVzVG9QbG90OworCX0KKworCS8qKgorCSAqIERpc3Bvc2VzIHRoZSBDb2xvciBvYmplY3RzCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgZGlzcG9zZSgpIHsKKwkJc3VwZXIuZGlzcG9zZSgpOworCX0KKworCXByb3RlY3RlZCB2b2lkIHJlc2V0RGF0YSgpIHsKKwkJY2xlYXJEYXRhKCk7CisJCS8vIGZvciBub3cgZ2V0IHJlYWR5IHRvIGNyZWF0ZSBvbmx5IG9uZSBsaW5lIC0gd2UgaGF2ZSBubyBkYXRhIHlldC4KKwkJLy8gd2Ugd2lsbCBhZGQgbW9yZSBsaW5lcyBhcyB3ZSBuZWVkIHRoZW0KKwkJCisJCWlmKCFkYXRhU2VyaWVzTWFwLmNvbnRhaW5zS2V5KGRlZmF1bHRLZXkpKSB7CisJCQlEYXRhU2VyaWVzIHNlcmllcyA9IG5ldyBEYXRhU2VyaWVzKGRlZmF1bHRLZXksIHNlcmllc0NvdW50KTsKKwkJCQorCQkJZGF0YVNlcmllc01hcC5wdXQoZGVmYXVsdEtleSwgc2VyaWVzKTsKKwkJfSAKKwkJLy8gaGFuZGxlIG51bGwKKwkJCisJCWN5Y2xlTnVtYmVycy5hZGQoSW50ZWdlci52YWx1ZU9mKDApKTsKKwl9CisKKwkvKioKKwkgKiBjbGVhcnNBbGxEYXRhCisJICovCisJcHJpdmF0ZSB2b2lkIGNsZWFyRGF0YSgpIHsKKwkJCisJCUl0ZXJhdG9yPFN0cmluZz4gaXRlciA9IGRhdGFTZXJpZXNNYXAua2V5U2V0KCkuaXRlcmF0b3IoKTsKKwkJd2hpbGUoKGl0ZXIhPW51bGwpJiYoaXRlci5oYXNOZXh0KCkpKSB7CisJCQlTdHJpbmcga2V5ID0gaXRlci5uZXh0KCk7CisJCQlEYXRhU2VyaWVzIHNlcmllcyA9IGRhdGFTZXJpZXNNYXAuZ2V0KGtleSk7CisJCQlzZXJpZXMucmVsYXRpdmVWYWx1ZXMuY2xlYXIoKTsKKwkJCXNlcmllcy5hZGRWYWx1ZShuZXcgRG91YmxlKDAuMCkpOworCQkJeEF4aXNQcmltYXJ5LmdldFNjYWxlKCkuc2V0TWluKE51bWJlckRhdGFFbGVtZW50SW1wbC5jcmVhdGUoMC4wKSk7CisJCQltYXhUaW1lQXhpc1ZhbHVlID0gREVGQVVMVF9BVVRPQVhJU19USFJFU0hPTEQ7CisJCQkvL3hBeGlzUHJpbWFyeS5nZXRTY2FsZSgpLnNldE1heChOdW1iZXJEYXRhRWxlbWVudEltcGwuY3JlYXRlKFRJQ0tfVFJJR0dFUipERUZBVUxUX0FVVE9BWElTX1RIUkVTSE9MRCkpOworCQkJLy9pbnQgbnVtVGlja3MgPSBUSUNLX1RSSUdHRVIqREVGQVVMVF9BVVRPQVhJU19USFJFU0hPTEQvTUlOX1RJQ0tTOworCQkJeEF4aXNQcmltYXJ5LmdldFNjYWxlKCkuc2V0U3RlcCgxKTsKKwkJfQorCQljeWNsZU51bWJlcnMuY2xlYXIoKTsKKwl9CisJCisJLyoqCisJICogcmVtb3ZlRGF0YSBpcyBjYWxsZWQgd2hlbiBzd2l0Y2hpbmcgYmV0d2VlbiBkZWNvcmF0b3JzLiBGb3IgZXhhbXBsZSwgd2hlbiBzd2l0Y2hpbmcgZnJvbSBkaXNwbGF5IG9mIGEgZGlzZWFzZSB0byBkaXNwYWx5IG9mIGEgcG9wdWxhdGlvbiwKKwkgKiB0aGUgcHJvcGVydGllcyBhcmUgZGlmZmVyZW50IGFuZCB0aGUgbGluZVNlcmllcywgcHJvcGV0cmllcywgYW5kIGF4aXMgbGFiZWxzIG11c3QgYmUgcmVtb3ZlZC4gU0VFIGFsc286IERhdGFTZXJpZXMucmVtb3ZlTGluZVNlcmllcygpCisJICovCisJcHJpdmF0ZSB2b2lkIHJlbW92ZURhdGFTZXJpZXMoKSB7CisJCWlmKGRpc3BsYXlhYmxlUHJvcGVydGllcyE9bnVsbCkgZGlzcGxheWFibGVQcm9wZXJ0aWVzLmNsZWFyKCk7CisJCUl0ZXJhdG9yPEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I+IGl0ZXIgPSBwcm9wZXJ0aWVzVG9QbG90LmtleVNldCgpLml0ZXJhdG9yKCk7CisJCXdoaWxlKChpdGVyIT1udWxsKSYmKGl0ZXIuaGFzTmV4dCgpKSkgeworCQkJSXRlbVByb3BlcnR5RGVzY3JpcHRvciBwcm9wZXJ0eVRvUmVtb3ZlID0gaXRlci5uZXh0KCk7CisJCQlTdHJpbmcga2V5ID0gcHJvcGVydHlUb1JlbW92ZS5nZXREaXNwbGF5TmFtZShwcm9wZXJ0eVRvUmVtb3ZlKTsKKwkJCURhdGFTZXJpZXMgc2VyaWVzID0gZGF0YVNlcmllc01hcC5nZXQoa2V5KTsKKwkJICAgIC8vc2VyaWVzLmhpZGUoKTsKKwkJCWlmKHNlcmllcyAhPSBudWxsKSB7CisJCQkJIHNlcmllcy5yZW1vdmVMaW5lU2VyaWVzKGtleSk7CisJCQkgICAgLy9zZXJpZXMubGluZVNlcmllcy5zZXRWaXNpYmxlKGZhbHNlKTsKKwkJCQkgZGF0YVNlcmllc01hcC5yZW1vdmUoa2V5KTsKKwkJCSAgICBzZXJpZXMgPSBudWxsOworCQkJfSAvLyBpZiBzZXJpZXMgbm90IG51bGwKKwkJfQorCQlwcm9wZXJ0aWVzVG9QbG90LmNsZWFyKCk7CisJfS8vcmVtb3ZlRGF0YVNlcmllcworCQorCQorCisJLyoqCisJICogdG9nZ2xlIHRoZSBzY2FsZSBmcm9tIGxvZ2FyaXRobWljIHRvIGxpbmVhcgorCSAqLworCXZvaWQgdG9nZ2xlQXhpc1NjYWxlKCkgeworCQlpZiAodXNlTGluZWFyVGltZVNjYWxlKSB7IC8vU3dpdGNoIHRvIGxvZ2FyaXRobWljIHNjYWxlCisJCQlsb2dUaW1lQWN0aW9uLnNldENoZWNrZWQodHJ1ZSk7CisJCQlsaW5lYXJUaW1lQWN0aW9uLnNldENoZWNrZWQoZmFsc2UpOworCQkJLy9KdXN0IHVzaW5nIHRoZSBmb2xsb3dpbmcgYXhpcyB0eXBlLCB0byBtb3ZlIHRvIGxvZyBzY2FsZSwgZGlkbid0IHdvcmsKKwkJCS8veUF4aXNQcmltYXJ5LnNldFR5cGUoQXhpc1R5cGUuTE9HQVJJVEhNSUNfTElURVJBTCk7CisJCQl5QXhpc1ByaW1hcnkuZ2V0U2NhbGUoKS5zZXRNaW4obnVsbCk7CisJCQl5QXhpc1ByaW1hcnkuZ2V0U2NhbGUoKS5zZXRNYXgobnVsbCk7CisJCQl5QXhpc1ByaW1hcnkuZ2V0U2NhbGUoKS51bnNldFN0ZXAoKTsKKwkJCXlBeGlzUHJpbWFyeS5nZXRTY2FsZSgpLnVuc2V0U3RlcE51bWJlcigpOworCQl9CisJCWVsc2UgeyAvL1N3aXRjaCB0byBsaW5lYXIgc2NhbGUKKwkJCWxvZ1RpbWVBY3Rpb24uc2V0Q2hlY2tlZChmYWxzZSk7CisJCQlsaW5lYXJUaW1lQWN0aW9uLnNldENoZWNrZWQodHJ1ZSk7CisJCQkvL3lBeGlzUHJpbWFyeS5zZXRUeXBlKEF4aXNUeXBlLkxJTkVBUl9MSVRFUkFMKTsKKwkJCXlBeGlzUHJpbWFyeS5nZXRTY2FsZSgpLnNldE1pbihOdW1iZXJEYXRhRWxlbWVudEltcGwuY3JlYXRlKDAuMCkpOworCQkJeUF4aXNQcmltYXJ5LmdldFNjYWxlKCkuc2V0TWF4KE51bWJlckRhdGFFbGVtZW50SW1wbC5jcmVhdGUoMS4wKSk7CisJCQl5QXhpc1ByaW1hcnkuZ2V0U2NhbGUoKS5zZXRTdGVwKDAuMjUpOworCQl9CisJCXVzZUxpbmVhclRpbWVTY2FsZSA9ICF1c2VMaW5lYXJUaW1lU2NhbGU7CisJCXRoaXMuZHJhdygpOworCX0KKwkKKwkKKwkvKioKKwkgKiB0b2dnbGUgdGhlIHNjYWxlIGZyb20gbG9nYXJpdGhtaWMgdG8gbGluZWFyCisJICovCisJdm9pZCB0b2dnbGVMZWdlbmQoKSB7CisJCWlmIChzaG93TGVnZW5kKSB7IC8vU3dpdGNoIHRvIGhpZGUKKwkJCXZpZXdMZWdlbmQuc2V0Q2hlY2tlZChmYWxzZSk7CisJCQloaWRlTGVnZW5kLnNldENoZWNrZWQodHJ1ZSk7CisJCQlsZWdlbmQuc2V0VmlzaWJsZShmYWxzZSk7CisJCX0KKwkJZWxzZSB7IC8vU3dpdGNoIHRvIHZpZXcKKwkJCXZpZXdMZWdlbmQuc2V0Q2hlY2tlZCh0cnVlKTsKKwkJCWhpZGVMZWdlbmQuc2V0Q2hlY2tlZChmYWxzZSk7CisJCQlsZWdlbmQuc2V0VmlzaWJsZSh0cnVlKTsKKwkJfQorCQlzaG93TGVnZW5kID0gIXNob3dMZWdlbmQ7CisJCXRoaXMuZHJhdygpOworCX0KKworCS8qKgorCSAqIHN3aXRjaCB0byBsaW5lYXIgcGxvdCAKKwkgKiAKKwkgKi8KKwlwcm90ZWN0ZWQgY2xhc3MgTGluZWFyU2NhbGVBY3Rpb24gZXh0ZW5kcyBBY3Rpb24geworCQlwdWJsaWMgTGluZWFyU2NhbGVBY3Rpb24oKQorCQl7CisJCQlzdXBlcihNZXNzYWdlcy5nZXRTdHJpbmcoIkNvbnRleHRNZW51LkxpbmVhclRpbWVTY2FsZSIpLCBJQWN0aW9uLkFTX0NIRUNLX0JPWCk7CisJCQlzZXRDaGVja2VkKHVzZUxpbmVhclRpbWVTY2FsZSk7CisJCX0KKworCQkvKioKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uQWN0aW9uI2dldFRleHQoKQorCQkgKi8KKwkJQE92ZXJyaWRlCisJCXB1YmxpYyBTdHJpbmcgZ2V0VGV4dCgpIHsKKwkJCXJldHVybiBNZXNzYWdlcy5nZXRTdHJpbmcoIkNvbnRleHRNZW51LkxpbmVhclRpbWVTY2FsZSIpOworCQl9CisKKwkJLyoqCisJCSAqIEBzZWUgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLkFjdGlvbiNydW4oKQorCQkgKi8KKwkJQE92ZXJyaWRlCisJCXB1YmxpYyB2b2lkIHJ1bigpIHsKKwkJCWlmICh1c2VMaW5lYXJUaW1lU2NhbGUpIHsKKwkJCQlzZXRDaGVja2VkKHRydWUpOworCQkJCS8vTm90aGluZyB0byBkby4gSXQncyBhbHJlYWR5IGxpbmVhci10aW1lLgorCQkJfQorCQkJZWxzZSB7CisJCQkJdG9nZ2xlQXhpc1NjYWxlKCk7CisJCQl9CisJCX0KKwl9IC8vTGluZWFyU2NhbGVBY3Rpb24KKworCS8qKgorCSAqIHN3aXRjaCB0byBzZW1pLWxvZyBwbG90IChsb2cgc2NhbGUgb24geSBheGlzKQorCSAqIAorCSAqLworCWNsYXNzIExvZ1NjYWxlQWN0aW9uIGV4dGVuZHMgQWN0aW9uIAl7CisJCXB1YmxpYyBMb2dTY2FsZUFjdGlvbigpCisJCXsKKwkJCXN1cGVyKE1lc3NhZ2VzLmdldFN0cmluZygiQ29udGV4dE1lbnUuTG9nVGltZVNjYWxlIiksIElBY3Rpb24uQVNfQ0hFQ0tfQk9YKTsKKwkJCXNldENoZWNrZWQoIXVzZUxpbmVhclRpbWVTY2FsZSk7CisJCX0KKworCQkvKioKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uQWN0aW9uI2dldFRleHQoKQorCQkgKi8KKwkJQE92ZXJyaWRlCisJCXB1YmxpYyBTdHJpbmcgZ2V0VGV4dCgpIHsKKwkJCXJldHVybiBNZXNzYWdlcy5nZXRTdHJpbmcoIkNvbnRleHRNZW51LkxvZ1RpbWVTY2FsZSIpOworCQl9CisKKwkJLyoqCisJCSAqIEBzZWUgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLkFjdGlvbiNydW4oKQorCQkgKi8KKwkJQE92ZXJyaWRlCisJCXB1YmxpYyB2b2lkIHJ1bigpIHsKKwkJCWlmICghdXNlTGluZWFyVGltZVNjYWxlKSB7CisJCQkJc2V0Q2hlY2tlZCh0cnVlKTsKKwkJCQkvL05vdGhpbmcgdG8gZG8uIEl0J3MgYWxyZWFkeSBsb2ctdGltZS4KKwkJCX0KKwkJCWVsc2UgeworCQkJCXRvZ2dsZUF4aXNTY2FsZSgpOworCQkJfQorCQl9CisJfS8vTG9nU2NhbGVBY3Rpb24KKworCS8qKgorCSAqIEFjdGlvbiB0byBzaG93IHRoZSBsZWdlbmQKKwkgKi8KKwlwcm90ZWN0ZWQgY2xhc3MgTGVnZW5kVmlld0FjdGlvbiBleHRlbmRzIEFjdGlvbiB7CisJCXB1YmxpYyBMZWdlbmRWaWV3QWN0aW9uKCkKKwkJeworCQkJc3VwZXIoTWVzc2FnZXMuZ2V0U3RyaW5nKCJDb250ZXh0TWVudS5TaG93TGVnZW5kIiksIElBY3Rpb24uQVNfQ0hFQ0tfQk9YKTsKKwkJCXNldENoZWNrZWQoc2hvd0xlZ2VuZCk7CisJCX0KKworCQkvKioKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uQWN0aW9uI2dldFRleHQoKQorCQkgKi8KKwkJQE92ZXJyaWRlCisJCXB1YmxpYyBTdHJpbmcgZ2V0VGV4dCgpIHsKKwkJCXJldHVybiBNZXNzYWdlcy5nZXRTdHJpbmcoIkNvbnRleHRNZW51LlNob3dMZWdlbmQiKTsKKwkJfQorCisJCS8qKgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5BY3Rpb24jcnVuKCkKKwkJICovCisJCUBPdmVycmlkZQorCQlwdWJsaWMgdm9pZCBydW4oKSB7CisJCQlpZiAoc2hvd0xlZ2VuZCkgeworCQkJCXNldENoZWNrZWQodHJ1ZSk7CisJCQkJLy9Ob3RoaW5nIHRvIGRvLiBJdCdzIGFscmVhZHkgbGluZWFyLXRpbWUuCisJCQl9CisJCQllbHNlIHsKKwkJCQl0b2dnbGVMZWdlbmQoKTsKKwkJCX0KKwkJfQorCX0gLy9MZWdlbmRWaWV3QWN0aW9uCisJCisJLyoqCisJICogQWN0aW9uIHRvIGhpZGUgdGhlIGxlZ2VuZAorCSAqLworCWNsYXNzIExlZ2VuZEhpZGVBY3Rpb24gZXh0ZW5kcyBBY3Rpb24gCXsKKwkJcHVibGljIExlZ2VuZEhpZGVBY3Rpb24oKQorCQl7CisJCQlzdXBlcihNZXNzYWdlcy5nZXRTdHJpbmcoIkNvbnRleHRNZW51LkhpZGVMZWdlbmQiKSwgSUFjdGlvbi5BU19DSEVDS19CT1gpOworCQkJc2V0Q2hlY2tlZCghc2hvd0xlZ2VuZCk7CisJCX0KKworCQkvKioKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uQWN0aW9uI2dldFRleHQoKQorCQkgKi8KKwkJQE92ZXJyaWRlCisJCXB1YmxpYyBTdHJpbmcgZ2V0VGV4dCgpIHsKKwkJCXJldHVybiBNZXNzYWdlcy5nZXRTdHJpbmcoIkNvbnRleHRNZW51LkhpZGVMZWdlbmQiKTsKKwkJfQorCisJCS8qKgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5BY3Rpb24jcnVuKCkKKwkJICovCisJCUBPdmVycmlkZQorCQlwdWJsaWMgdm9pZCBydW4oKSB7CisJCQlpZiAoIXNob3dMZWdlbmQpIHsKKwkJCQlzZXRDaGVja2VkKHRydWUpOworCQkJCS8vTm90aGluZyB0byBkby4gSXQncyBhbHJlYWR5IGxvZy10aW1lLgorCQkJfQorCQkJZWxzZSB7CisJCQkJdG9nZ2xlTGVnZW5kKCk7CisJCQl9CisJCX0KKwl9Ly9MZWdlbmRIaWRlQWN0aW9uCisKKworCS8qKgorCSAqIERpc3BsYXlhYmxlUHJvcGVydHkKKwkgKgorCSAqLworCXByb3RlY3RlZCBjbGFzcyBEaXNwbGF5YWJsZVByb3BlcnR5IGV4dGVuZHMgQWN0aW9uCisJeworCQlJdGVtUHJvcGVydHlEZXNjcmlwdG9yIHByb3BlcnR5ID0gbnVsbDsKKwkJcHVibGljIERpc3BsYXlhYmxlUHJvcGVydHkoSXRlbVByb3BlcnR5RGVzY3JpcHRvciBwcm9wZXJ0eSkKKwkJeworCQkJCQlzdXBlcihwcm9wZXJ0eS5nZXREaXNwbGF5TmFtZShwcm9wZXJ0eSksIElBY3Rpb24uQVNfQ0hFQ0tfQk9YKTsKKwkJCQkJdGhpcy5wcm9wZXJ0eSA9IHByb3BlcnR5OworCQkJCQlpZihwcm9wZXJ0aWVzVG9QbG90LmNvbnRhaW5zS2V5KHByb3BlcnR5KSkgeworCQkJCQkJc2V0Q2hlY2tlZChwcm9wZXJ0aWVzVG9QbG90LmdldChwcm9wZXJ0eSkuYm9vbGVhblZhbHVlKCkpOworCQkJCQl9IGVsc2UgeworCQkJCQkJcHJvcGVydGllc1RvUGxvdC5wdXQocHJvcGVydHksbmV3IEJvb2xlYW4odHJ1ZSkpOworCQkJCQkJc2V0Q2hlY2tlZChwcm9wZXJ0aWVzVG9QbG90LmdldChwcm9wZXJ0eSkuYm9vbGVhblZhbHVlKCkpOworCQkJCQl9CisJCQkJCQorCQl9CisKKwkJLyoqCisJCSAqIEBzZWUgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLkFjdGlvbiNnZXRUZXh0KCkKKwkJICovCisJCUBPdmVycmlkZQorCQlwdWJsaWMgU3RyaW5nIGdldFRleHQoKSB7CisJCQlyZXR1cm4gcHJvcGVydHkuZ2V0RGlzcGxheU5hbWUocHJvcGVydHkpOworCQl9CisKKwkJLyoqCisJCSAqIFRvZ2dsZSB0aGUgc3RhdGUKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uQWN0aW9uI3J1bigpCisJCSAqLworCQlAT3ZlcnJpZGUKKwkJcHVibGljIHZvaWQgcnVuKCkgeworCQkJICAgIGJvb2xlYW4gc3RhdGUgPSAhcHJvcGVydGllc1RvUGxvdC5nZXQocHJvcGVydHkpLmJvb2xlYW5WYWx1ZSgpOworCQkJICAgIHByb3BlcnRpZXNUb1Bsb3QucHV0KHByb3BlcnR5LCBCb29sZWFuLnZhbHVlT2Yoc3RhdGUpKTsKKwkJCQlzZXRDaGVja2VkKHN0YXRlKTsKKwkJCQkKKwkJCQlkcmF3KCk7CisJCX0KKwkJcHVibGljIEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IgZ2V0UHJvcGVydHkoKSB7CisJCQlyZXR1cm4gcHJvcGVydHk7CisJCX0KKwl9Ly8gRGlzcGxheWFibGVQcm9wZXJ0eQorCQorCisJLyoqCisJICogQWN0aW9uIHRvIHNob3cgdGhlIGxlZ2VuZAorCSAqLworCXByb3RlY3RlZCBjbGFzcyBDbGVhckFjdGlvbiBleHRlbmRzIEFjdGlvbiB7CisJCXB1YmxpYyBDbGVhckFjdGlvbigpCisJCXsKKwkJCXN1cGVyKE1lc3NhZ2VzLmdldFN0cmluZygiQ29udGV4dE1lbnUuQ2xlYXIiKSwgSUFjdGlvbi5BU19QVVNIX0JVVFRPTik7CisJCX0KKworCQkvKioKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uQWN0aW9uI2dldFRleHQoKQorCQkgKi8KKwkJQE92ZXJyaWRlCisJCXB1YmxpYyBTdHJpbmcgZ2V0VGV4dCgpIHsKKwkJCXJldHVybiBNZXNzYWdlcy5nZXRTdHJpbmcoIkNvbnRleHRNZW51LkNsZWFyIik7CisJCX0KKworCQkvKioKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uQWN0aW9uI3J1bigpCisJCSAqLworCQlAU3VwcHJlc3NXYXJuaW5ncygiYm94aW5nIikKKwkJQE92ZXJyaWRlCisJCXB1YmxpYyB2b2lkIHJ1bigpIHsKKwkJCWZvcihJdGVtUHJvcGVydHlEZXNjcmlwdG9yIGlwZDpwcm9wZXJ0aWVzVG9QbG90LmtleVNldCgpKSB7CisJCQkJYm9vbGVhbiBzdGF0ZSA9ICFwcm9wZXJ0aWVzVG9QbG90LmdldChpcGQpLmJvb2xlYW5WYWx1ZSgpOworCQkJICAgIHByb3BlcnRpZXNUb1Bsb3QucHV0KGlwZCwgZmFsc2UpOworCQkJICAgIGZvcihEaXNwbGF5YWJsZVByb3BlcnR5IGRwOmRpc3BsYXlhYmxlUHJvcGVydGllcykgCisJCQkgICAgCWlmKGRwLmdldFByb3BlcnR5KCkuZXF1YWxzKGlwZCkpIHtkcC5zZXRDaGVja2VkKGZhbHNlKTticmVhazt9CisJCQkJZHJhdygpOworCQkJfQorCQl9CisJfSAvL0NsZWFyQWN0aW9uCisJCisJCisJcHJvdGVjdGVkIGNsYXNzIERhdGFTZXJpZXMgCisJeworCQlwdWJsaWMgU3RyaW5nIHByb3BlcnR5TmFtZSA9ICIiOworCQkKKworCQlwdWJsaWMgTGlzdDxEb3VibGU+IHJlbGF0aXZlVmFsdWVzID0gbmV3IEFycmF5TGlzdDxEb3VibGU+KCk7CisJCXB1YmxpYyBMaW5lU2VyaWVzIGxpbmVTZXJpZXMgPSBudWxsOworCQlwcml2YXRlIGJvb2xlYW4gdmlzaWJsZSA9IHRydWU7CisJCXByaXZhdGUgU2VyaWVzRGVmaW5pdGlvbiBzZFkgPSBudWxsOworCQkKKwkJcHJpdmF0ZSBpbnQgc2VyaWVzSW5kZXggPSAwOworCQkKKwkJCisJCXB1YmxpYyBib29sZWFuIGlzVmlzaWJsZSgpIHsKKwkJCXJldHVybiB2aXNpYmxlOworCQl9CisKKwkJLyoqCisJCSAqIAorCQkgKiBAcGFyYW0gcHJvcGVydHlOYW1lCisJCSAqIEBwYXJhbSBpbmRleAorCQkgKi8KKwkJcHVibGljIERhdGFTZXJpZXMoU3RyaW5nIHByb3BlcnR5TmFtZSwgaW50IGluZGV4KSB7CisJCQl0aGlzLnByb3BlcnR5TmFtZSA9IHByb3BlcnR5TmFtZTsKKwkJCXRoaXMuc2VyaWVzSW5kZXggPSBpbmRleDsKKwkJCXNlcmllc0NvdW50ICsrOworCQkJcmVsYXRpdmVWYWx1ZXMgPSBuZXcgQXJyYXlMaXN0PERvdWJsZT4oKTsKKwkJCXJlbGF0aXZlVmFsdWVzLmFkZChuZXcgRG91YmxlKDAuMCkpOworCQkJYWRkTGluZVNlcmllcyhwcm9wZXJ0eU5hbWUpOworCQl9CisJCQorCQlwdWJsaWMgdm9pZCBhZGRWYWx1ZShEb3VibGUgdmFsKSB7CisJCQlpZihyZWxhdGl2ZVZhbHVlcz09bnVsbCkgcmVsYXRpdmVWYWx1ZXMgPSBuZXcgQXJyYXlMaXN0PERvdWJsZT4oKTsKKwkJCXJlbGF0aXZlVmFsdWVzLmFkZCh2YWwpOworCQl9CisJCQorCQkvKioKKwkJICogQHBhcmFtIHByb3BlcnR5TmFtZQorCQkgKiAKKwkJICovCisJCUBTdXBwcmVzc1dhcm5pbmdzKCJjYXN0IikKKwkJcHVibGljIHZvaWQgYWRkTGluZVNlcmllcyhmaW5hbCBTdHJpbmcgcHJvcGVydHlOYW1lKSB7CisJCQlmaW5hbCBOdW1iZXJEYXRhU2V0IG9ydGhvVmFsdWVzID0gTnVtYmVyRGF0YVNldEltcGwKKwkJCQkJLmNyZWF0ZShyZWxhdGl2ZVZhbHVlcyk7CisJCQlpZihsaW5lU2VyaWVzID09IG51bGwpIGxpbmVTZXJpZXMgPSAoU2NhdHRlclNlcmllcykgU2NhdHRlclNlcmllc0ltcGwuY3JlYXRlKCk7CisJCQlsaW5lU2VyaWVzLnNldERhdGFTZXQob3J0aG9WYWx1ZXMpOworCisJCQlsaW5lU2VyaWVzLmdldExpbmVBdHRyaWJ1dGVzKCkuc2V0VmlzaWJsZSh0cnVlKTsKKwkJCQorCQkJLy8gQXNzaWduIHRoZSBsaW5lIGNvbG9yCisJCQkvLyBiYXNlZCBvbiBzZWxlY3RlZCBwcm9wZXJ0eS4gRGVmYXVsdCBpcyBCbHVlCisJCQlzZXRDb2xvckRlZnMocHJvcGVydHlOYW1lKTsKKwkJCQorCQkJLy8gcmVwbGFjZXMgZGVwcmVjYXRlZCBjb2RlOiBsaW5lU2VyaWVzLmdldE1hcmtlcigpLnNldFZpc2libGUoZmFsc2UpOworCQkJaWYgKCFsaW5lU2VyaWVzLmdldE1hcmtlcnMoKS5pc0VtcHR5KCkpIHsKKwkJCQlNYXJrZXIgbWFya2VyID0gKE1hcmtlcilsaW5lU2VyaWVzLmdldE1hcmtlcnMoKS5nZXQoMCk7CisJCQkJbWFya2VyLnNldFZpc2libGUoZmFsc2UpOworCQkJfQorCQkJCisJCQkvLyB0aGUgc2VyaWVzIGRlZgorCQkJc2RZID0gU2VyaWVzRGVmaW5pdGlvbkltcGwuY3JlYXRlKCk7CisJCQkvL3NkWS5nZXRTZXJpZXNQYWxldHRlKCkudXBkYXRlKC0yKTsKKwkJCXNkWS5nZXRTZXJpZXMoKS5hZGQobGluZVNlcmllcyk7CisJCQl5QXhpc1ByaW1hcnkuZ2V0U2VyaWVzRGVmaW5pdGlvbnMoKS5hZGQoc2RZKTsKKwkJCXNldFRpbWVMYWJlbCgpOworCQkJcmV0dXJuOworCQl9CisJCQorCQkvKioKKwkJICogCisJCSAqIEBwYXJhbSBwcm9wZXJ0eU5hbWUKKwkJICovCisJCXB1YmxpYyB2b2lkIHJlbW92ZUxpbmVTZXJpZXMoZmluYWwgU3RyaW5nIHByb3BlcnR5TmFtZSkgeworCQkJLy92aXNpYmxlID0gZmFsc2U7CisJCQlzZXJpZXNJbmRleCA9IDA7CisJCQkvLyA/PyByZWxhdGl2ZVZhbHVlcy5jbGVhcigpOworCQkJaWYobGluZVNlcmllcyE9bnVsbCkgbGluZVNlcmllcy5nZXRMaW5lQXR0cmlidXRlcygpLnNldFZpc2libGUoZmFsc2UpOworCQkJaWYoeUF4aXNQcmltYXJ5ICE9bnVsbCkgeUF4aXNQcmltYXJ5LmdldFNlcmllc0RlZmluaXRpb25zKCkucmVtb3ZlKHNkWSk7CisJCQlpZihzZFkgIT0gbnVsbCkgc2RZLmdldFNlcmllcygpLnJlbW92ZShsaW5lU2VyaWVzKTsKKwkJCWxpbmVTZXJpZXMgPSBudWxsOworCQkJc2RZID0gbnVsbDsKKwkJCQorCQkJcmV0dXJuOworCQl9CisJCQorCQkKKwkJCisJCS8qKiAKKwkJICogaW4gcmVzcG9uc2UgdG8gdXNlciBhY3Rpb24gdGVtcG9yYXJpbHkgcmVtb3ZlIHRoZSBsaW5lIHNlcmllcyBmcm9tIHRoZSBncmFwaAorCQkgKi8KKwkJcHVibGljIHZvaWQgaGlkZSgpIHsKKwkJCWxpbmVTZXJpZXMuc2V0VmlzaWJsZShmYWxzZSk7CisJCQl2aXNpYmxlID0gZmFsc2U7CisJCX0vLyBoaWRlCisJCQorCQkvKiogCisJCSAqIGluIHJlc3BvbnNlIHRvIHVzZXIgYWN0aW9uIGFkZCBiYWNrIHRoZSBsaW5lIHNlcmllcyB0byB0aGUgZ3JhcGgKKwkJICovCisJCXB1YmxpYyB2b2lkIHNob3coKSB7CisJCQlsaW5lU2VyaWVzLnNldFZpc2libGUodHJ1ZSk7CisJCQl2aXNpYmxlID0gdHJ1ZTsKKwkJfS8vIHNob3cKKwkJCisKKwkJLyoqCisJCSAqIFNldHMgdGhlIGNvbG9ycyBmb3IgYSBuIGFycmF5IG9mIExpbmVTZXJpZXMgZ2l2ZW4gdGhlIHByb3BlcnR5IHRvIFBsb3QKKwkJICogZm9yIGVhY2guIFRyeSB0byBzZXQgY29sb3IgZnJvbSB0aGUgcHJlZmVyZW5jZXMgKGlmIHNwZWNpZmllZCBmb3IgdGhhdAorCQkgKiBwcm9wZXJ0eSkgb3RoZXJ3aXNlIHNldHMgbGluZSBjb2xvciB0byBibHVlLgorCQkgKiBAcGFyYW0gcHJvcGVydHlOYW1lIAorCQkgKgorCQkgKi8KKwkJcHVibGljIHZvaWQgc2V0Q29sb3JEZWZzKFN0cmluZyBwcm9wZXJ0eU5hbWUpIHsKKwkJCS8vIHRoZSBkZWZhdWx0IGxpbmUgY29sb3IKKworCQkJLy8gaWYgcG9zc2libGUgZ2V0IGNvbG9yIGZyb20gcHJlZmVyZW5jZXMKKwkJCWZpbmFsIE1hcDxTdHJpbmcsIENvbG9yPiBjb2xvck1hcCA9IFZpc3VhbGl6YXRpb25QcmVmZXJlbmNlUGFnZS5nZXRDb2xvck1hcHBpbmcoKTsKKwkJCS8vIHBpY2sgYSBkZWZhdWx0IGNvbG9yCisJCQlpbnQgY29sb3JJbmRleCA9IHNlcmllc0luZGV4ICUgY29sb3JEZWZhdWx0Lmxlbmd0aDsKKwkJCUNvbG9yRGVmaW5pdGlvbiBjb2xvciA9IGNvbG9yRGVmYXVsdFtjb2xvckluZGV4XTsKKworCQkJLy8gQ2hlY2sgZm9yIGEgcHJlZml4IG1hdGNoCisJCQlmb3IgKFN0cmluZyBrZXkgOiBjb2xvck1hcC5rZXlTZXQoKSkgeworCQkJCWlmKChwcm9wZXJ0eU5hbWUuc3RhcnRzV2l0aChrZXkpKSYmKGtleS5sZW5ndGgoKT49MSkpIHsKKwkJCQkJLy8gbWlnaHQgYmUgcmlnaHQKKwkJCQkJU3RyaW5nIHRhaWwgPSBwcm9wZXJ0eU5hbWUuc3Vic3RyaW5nKGtleS5sZW5ndGgoKSwgcHJvcGVydHlOYW1lLmxlbmd0aCgpKTsKKwkJCQkJaWYoKHRhaWw9PW51bGwpfHwodGFpbC5sZW5ndGgoKT09MCkpIHsKKwkJCQkJCWZpbmFsIENvbG9yIGMgPSBjb2xvck1hcC5nZXQoa2V5KTsKKwkJCQkJCWNvbG9yID0gQ29sb3JEZWZpbml0aW9uSW1wbC5jcmVhdGUoYy5nZXRSZWQoKSwgYy5nZXRHcmVlbigpLCBjLmdldEJsdWUoKSk7CisJCQkJCQlicmVhazsKKwkJCQkJfQorCQkJCQkKKwkJCQkJYm9vbGVhbiBoaXQgPSB0cnVlOworCQkJCQlmb3IgKGNoYXIgYyA6IHRhaWwudG9DaGFyQXJyYXkoKSkgeworCQkJCQkJaWYgKCFDaGFyYWN0ZXIuaXNEaWdpdChjKSkgeworCQkJCQkJCWhpdCA9IGZhbHNlOworCQkJCQkJCWJyZWFrOworCQkJCQkJfQorCQkJCQl9Ly8gYWxsIGNoYXJhY3RlcnMgaW4gdGFpbAorCQkJCQlpZihoaXQpeworCQkJCQkJZmluYWwgQ29sb3IgYyA9IGNvbG9yTWFwLmdldChrZXkpOworCQkJCQkJY29sb3IgPSBDb2xvckRlZmluaXRpb25JbXBsLmNyZWF0ZShjLmdldFJlZCgpLCBjLmdldEdyZWVuKCksIGMuZ2V0Qmx1ZSgpKTsKKwkJCQkJCWJyZWFrOworCQkJCQl9CisJCQkJfQorCQkJfQorCQkJCisvLwkJCWlmIChjb2xvck1hcC5jb250YWluc0tleShwcm9wZXJ0eU5hbWUpKSB7CisvLwkJCQlmaW5hbCBDb2xvciBjID0gY29sb3JNYXAuZ2V0KHByb3BlcnR5TmFtZSk7CisvLwkJCQljb2xvciA9IENvbG9yRGVmaW5pdGlvbkltcGwuY3JlYXRlKGMuZ2V0UmVkKCksIGMuZ2V0R3JlZW4oKSwgYy5nZXRCbHVlKCkpOworLy8JCQl9CisJCQkKKwkJCXRoaXMubGluZVNlcmllcy5zZXRTZXJpZXNJZGVudGlmaWVyKHByb3BlcnR5TmFtZSk7CisJCQl0aGlzLmxpbmVTZXJpZXMuZ2V0TGluZUF0dHJpYnV0ZXMoKS5zZXRDb2xvcihjb2xvcik7CisJCQlyZXR1cm47CisJCX0vLyBnZXRDb2xvckRlZgorCisJCS8qKgorCQkgKiBsZW5ndGggb2YgdGhlIHNlcmllcworCQkgKiBAcmV0dXJuIG51bWJlciBvZiBkYXRhIHBvaW50cworCQkgKi8KKwkJcHVibGljIGludCBnZXREYXRhU2l6ZSgpIHsKKwkJCXJldHVybiByZWxhdGl2ZVZhbHVlcy5zaXplKCk7CisJCX0KKwkJLy8gQWNjZXNzb3JzCisJCXB1YmxpYyBTdHJpbmcgZ2V0UHJvcGVydHlOYW1lKCkgeworCQkJcmV0dXJuIHByb3BlcnR5TmFtZTsKKwkJfQorCisJCXB1YmxpYyB2b2lkIHNldFByb3BlcnR5TmFtZShTdHJpbmcgcHJvcGVydHlOYW1lKSB7CisJCQl0aGlzLnByb3BlcnR5TmFtZSA9IHByb3BlcnR5TmFtZTsKKwkJfQorCisJCXB1YmxpYyBMaXN0PERvdWJsZT4gZ2V0UmVsYXRpdmVWYWx1ZXMoKSB7CisJCQlyZXR1cm4gcmVsYXRpdmVWYWx1ZXM7CisJCX0KKworCQlwdWJsaWMgdm9pZCBzZXRSZWxhdGl2ZVZhbHVlcyhMaXN0PERvdWJsZT4gcmVsYXRpdmVWYWx1ZXMpIHsKKwkJCXRoaXMucmVsYXRpdmVWYWx1ZXMgPSByZWxhdGl2ZVZhbHVlczsKKwkJfQorCisJCXB1YmxpYyBMaW5lU2VyaWVzIGdldExpbmVTZXJpZXMoKSB7CisJCQlyZXR1cm4gbGluZVNlcmllczsKKwkJfQorCisJCXB1YmxpYyB2b2lkIHNldExpbmVTZXJpZXMoTGluZVNlcmllcyBsaW5lU2VyaWVzKSB7CisJCQl0aGlzLmxpbmVTZXJpZXMgPSBsaW5lU2VyaWVzOworCQl9CisKKwkKKwl9Ly8gRGF0YVNlcmllcworCQorfSAvLyBUaW1lU2VyaWVzQ2FudmFzCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkucmVwb3J0cy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9yZXBvcnRzL3ZpZXdzL1RpbWVTZXJpZXNGYWN0b3J5LmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkucmVwb3J0cy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9yZXBvcnRzL3ZpZXdzL1RpbWVTZXJpZXNGYWN0b3J5LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmFmNmI2YwotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5yZXBvcnRzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3JlcG9ydHMvdmlld3MvVGltZVNlcmllc0ZhY3RvcnkuamF2YQpAQCAtMCwwICsxLDU1IEBACisvLyBUaW1lU2VyaWVzRmFjdG9yeS5qYXZhCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0udWkucmVwb3J0cy52aWV3czsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGU7CisKKy8qKgorICogVGhpcyBjbGFzcyBpcyBhIGZhY3RvcnkgZm9yIGNyZWF0aW5nIHtAbGluayBSZXBvcnRDb250cm9sfSBpbnN0YW5jZXMuCisgKi8KK3B1YmxpYyBjbGFzcyBUaW1lU2VyaWVzRmFjdG9yeSBpbXBsZW1lbnRzIFJlcG9ydENvbnRyb2xGYWN0b3J5IHsKKworCXN0YXRpYyBUaW1lU2VyaWVzRmFjdG9yeSBJTlNUQU5DRSA9IG5ldyBUaW1lU2VyaWVzRmFjdG9yeSgpOworCisJLyoqCisJICogQ29uc3RhbnRzIGZvciBzYXZpbmcgUmVwb3J0Vmlld1ByZWZlcmVuY2VzCisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgVElNRV9TRVJJRVNfVFlQRSA9ICJUaW1lU2VyaWVzIjsKKworCS8qKgorCSAqIEBwYXJhbSBwYXJlbnQKKwkgKiAgICAgICAgICAgIHRoZSBwYXJlbnQgb2YgdGhlIHtAbGluayBSZWxhdGl2ZVZhbHVlSGlzdG9yeVBsb3R0ZXJ9IAorCSAqIEByZXR1cm4gYSB7QGxpbmsgUmVsYXRpdmVWYWx1ZUhpc3RvcnlQbG90dGVyfQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS51aS52aWV3cy5nZW9ncmFwaGljLkdlb2dyYXBoaWNDb250cm9sRmFjdG9yeSNjcmVhdGUob3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlKQorCSAqLworCXB1YmxpYyBSZXBvcnRDb250cm9sIGNyZWF0ZShmaW5hbCBDb21wb3NpdGUgcGFyZW50KSB7CisJCXJldHVybiBuZXcgUmVsYXRpdmVWYWx1ZUhpc3RvcnlQbG90dGVyKHBhcmVudCk7CisJfQorCisJLyoqCisJICogQHJldHVybiBUT0RPIEpGSworCSAqIAorCSAqLworCXB1YmxpYyBTdHJpbmcgZ2V0VW5pcXVlQ29udHJvbE5hbWUoKSB7CisJCXJldHVybiBUSU1FX1NFUklFU19UWVBFOworCX0KKwkKKwkvKioKKwkgKiBUaGlzIEZhY3RvcnkgY3JlYXRlcyBhIGNvbnRyb2wgYXNzb2NpYXRlZCB3aXRoIGFuIElkZW5maWFibGUKKwkgKiBAcmV0dXJuIHR5cGUgb2YgZmFjdG9yeQorCSAqLworCXB1YmxpYyBTdHJpbmcgZ2V0RmFjdG9yeVR5cGUoKSB7CisJCXJldHVybiBJREVOVElGQUJMRV9UWVBFOworCX0KKworfSAvLyBUaW1lU2VyaWVzRmFjdG9yeQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLnJlcG9ydHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvcmVwb3J0cy92aWV3cy9UaW1lU2VyaWVzVmlldy5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLnJlcG9ydHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvcmVwb3J0cy92aWV3cy9UaW1lU2VyaWVzVmlldy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA4ZDQwNGYKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkucmVwb3J0cy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9yZXBvcnRzL3ZpZXdzL1RpbWVTZXJpZXNWaWV3LmphdmEKQEAgLTAsMCArMSwxMzkgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS51aS5yZXBvcnRzLnZpZXdzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7CitpbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOworaW1wb3J0IGphdmEudXRpbC5MaXN0OworCitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVN0cnVjdHVyZWRTZWxlY3Rpb247CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5JZGVudGlmaWFibGU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLkRlY29yYXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmpvYnMuc2ltdWxhdGlvbi5TaW11bGF0aW9uTWFuYWdlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnVpLnZpZXdzLmdlb2dyYXBoaWMubWFwLlNlbGVjdGVkUmVwb3J0c01hbmFnZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklTZWxlY3Rpb25MaXN0ZW5lcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5JV29ya2JlbmNoUGFydDsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5wYXJ0LlZpZXdQYXJ0OworCisvKioKKyAqIFRoaXMgdmlldyBjb250YWlucyBCSVJUIG91dHB1dCB0aGF0IHBsb3RzIHZhbHVlcyBvZiB2YXJpYWJsZXMgaW4gU1RFTQorICogc2ltdWxhdGlvbnMuCisgKi8KKworcHVibGljIGNsYXNzIFRpbWVTZXJpZXNWaWV3IGV4dGVuZHMgVmlld1BhcnQgaW1wbGVtZW50cyBJU2VsZWN0aW9uTGlzdGVuZXIgeworCisJLyoqCisJICogVGhlIGlkZW50aWZpZXIgb2YgdGhlIFRpbWUgU2VyaWVzIFZpZXcKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBJRF9USU1FX1NFUklFU19WSUVXID0gIm9yZy5lY2xpcHNlLnN0ZW0udWkucmVwb3J0cy52aWV3cy5UaW1lU2VyaWVzIjsgLy8kTk9OLU5MUy0xJAorCQorCXByaXZhdGUgTGlzdDxJZGVudGlmaWFibGU+IHNlbGVjdGVkSWRlbnRpZmlhYmxlcyA9IG51bGw7CisKKwkvKioKKwkgKiBUaGlzIGlzIHRoZSBzZXQgb2YgZGVjb3JhdG9ycyBleHRyYWN0ZWQgZnJvbSB0aGUgY3VycmVudAorCSAqIFNjZW5hcmlvL1NpbXVsYXRpb24gdXBkYXRlIGxhYmVscyB0aGF0IGNhbiBiZSBhZGFwdGVkIHRvIHByb2R1Y2UgYQorCSAqIGhpc3Rvcnkgb2YgcmVsYXRpdmUgdmFsdWVzIHRoYXQgY2FuIGJlIHBsb3R0ZWQuCisJICovCisJLy8gcHJpdmF0ZSBmaW5hbCBMaXN0PERlY29yYXRvcj4gZGVjb3JhdG9yc1dpdGhIaXN0b3J5T2ZSZWxhdGl2ZVZhbHVlcyA9IG5ldworCS8vIEFycmF5TGlzdDxEZWNvcmF0b3I+KCk7CisJLyoqCisJICogVGhpcyBpcyB0aGUgZGVjb3JhdG9yIHRoYXQgaGFzIGJlZW4gc2VsZWN0ZWQgYnkgdGhlIGNvbWJvIGJveC4KKwkgKi8KKwlwcm90ZWN0ZWQgRGVjb3JhdG9yIHNlbGVjdGVkRGVjb3JhdG9yOworCisJcHJpdmF0ZSBSZXBvcnRWaWV3ZXIgcmVwb3J0Vmlld2VyOworCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS51aS5wYXJ0LldvcmtiZW5jaFBhcnQjY3JlYXRlUGFydENvbnRyb2wob3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlKQorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGNyZWF0ZVBhcnRDb250cm9sKGZpbmFsIENvbXBvc2l0ZSBwYXJlbnQpIHsKKworCQlyZXBvcnRWaWV3ZXIgPSBuZXcgUmVwb3J0Vmlld2VyKHBhcmVudCwgVGltZVNlcmllc0ZhY3RvcnkuSU5TVEFOQ0UpOworCQlyZXBvcnRWaWV3ZXIuc2V0SW5wdXQoU2ltdWxhdGlvbk1hbmFnZXIuZ2V0TWFuYWdlcigpKTsKKworCQlnZXRTaXRlKCkuc2V0U2VsZWN0aW9uUHJvdmlkZXIocmVwb3J0Vmlld2VyKTsKKworCQkvLyBSZWdpc3RlciB3aXRoIHRoZSBTZWxlY3Rpb25TZXJ2aWNlCisJCWdldFNpdGUoKS5nZXRXb3JrYmVuY2hXaW5kb3coKS5nZXRTZWxlY3Rpb25TZXJ2aWNlKCkKKwkJCQkuYWRkU2VsZWN0aW9uTGlzdGVuZXIodGhpcyk7CisKKwl9IC8vIGNyZWF0ZVBhcnRDb250cm9sCisKKwkvKioKKwkgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgd2hlbmV2ZXIgQU5ZVEhJTkcgaXMgc2VsZWN0ZWQgaW4gdGhlIEVjbGlwc2UKKwkgKiB3b3JrYmVuY2guIEl0J3Mgam9iIGlzIHRvIGZpbHRlciBvdXQgc2VsZWN0aW9ucyBvZiBJU2ltdWxhdGlvbiBpbnN0YW5jZXMKKwkgKiBhbmQgdXBkYXRlIHRoZSBjaGFydCBpbiB0aGUgVGltZVNlcmllc0NhbnZhcworCSAqIAorCSAqIEBzZWUgb3JnLmVjbGlwc2UudWkuSVNlbGVjdGlvbkxpc3RlbmVyI3NlbGVjdGlvbkNoYW5nZWQob3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaFBhcnQsCisJICogICAgICBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb24pCisJICovCisJQFN1cHByZXNzV2FybmluZ3MoInVuY2hlY2tlZCIpCisJcHVibGljIHZvaWQgc2VsZWN0aW9uQ2hhbmdlZChmaW5hbCBJV29ya2JlbmNoUGFydCBwYXJ0LAorCQkJZmluYWwgSVNlbGVjdGlvbiBzZWxlY3Rpb24pIHsKKworCQkvLyBJcyB0aGlzIHNlbGVjdGlvbiBjaGFuZ2VkIGV2ZW50IGNvbWluZyBmcm9tIG91ciB2aWV3PworCQlpZiAocGFydCAhPSBUaW1lU2VyaWVzVmlldy50aGlzKSB7CisJCQkvLyBObworCQkJaWYgKHNlbGVjdGVkSWRlbnRpZmlhYmxlcyA9PSBudWxsKSB7CisJCQkJLy8gWWVzCisJCQkJc2VsZWN0ZWRJZGVudGlmaWFibGVzID0gbmV3IEFycmF5TGlzdDxJZGVudGlmaWFibGU+KCk7CisJCQl9IC8vIGlmCisJCQlzZWxlY3RlZElkZW50aWZpYWJsZXMuY2xlYXIoKTsKKworCQkJLy8gSXMgaXQgYSBzdHJ1Y3R1cmVkIHNlbGVjdGlvbj8KKwkJCWlmIChzZWxlY3Rpb24gaW5zdGFuY2VvZiBJU3RydWN0dXJlZFNlbGVjdGlvbikgeworCQkJCS8vIFllcworCQkJCWZpbmFsIExpc3QgbGlzdCA9ICgoSVN0cnVjdHVyZWRTZWxlY3Rpb24pIHNlbGVjdGlvbikudG9MaXN0KCk7CisKKwkJCQkvLyBHbyB0aHJvdWdoIGV2ZXJ5dGhpbmcgaW4gdGhlIGxpc3Qgb2YgdGhpbmdzIHRoYXQgd2VyZQorCQkJCS8vIHNlbGVjdGVkIGFuZCBwaWNrIG91dCB0aGUgb25lcyB0aGF0IGFyZSBJU2ltdWxhdGlvbnMuCisJCQkJZm9yIChmaW5hbCBJdGVyYXRvciBzZWxlY3Rpb25JdGVyID0gbGlzdC5pdGVyYXRvcigpOyBzZWxlY3Rpb25JdGVyCisJCQkJCQkuaGFzTmV4dCgpOykgeworCQkJCQlmaW5hbCBPYmplY3Qgb2JqID0gc2VsZWN0aW9uSXRlci5uZXh0KCk7CisKKwkJCQkJaWYgKG9iaiBpbnN0YW5jZW9mIElkZW50aWZpYWJsZSkgeworCQkJCQkJLy8gTWFrZSBzdXJlIHRoYXQgdGhlIHJlcG9ydCBpcyBpbmRlZWQgZW5hYmxlZCBpbiB0aGUgY29udGV4dCBtZW51CQkJCQkJCisJCQkJCQlpZiAoU2VsZWN0ZWRSZXBvcnRzTWFuYWdlci5nZXRJbnN0YW5jZSgpLmlzUmVwb3J0RW5hYmxlZChUaW1lU2VyaWVzRmFjdG9yeS5USU1FX1NFUklFU19UWVBFKSkgeworCQkJCQkJCXJlcG9ydFZpZXdlci5hZGRNb25pdG9yKChJZGVudGlmaWFibGUpb2JqKTsKKwkJCQkJCX0KKwkJCQkJfSAvLyBpZgorCQkJCX0gLy8gZm9yIGVhY2ggc2VsZWN0ZWQgaXRlbQorCQkJfSAvLyBpZiBzdHJ1Y3R1cmVkIHNlbGVjdGlvbgorCisJCX0gLy8gaWYgc2VsZWN0aW9uIGNoYW5nZWQgZXZlbnQgY29taW5nIGZyb20gb3VyIHZpZXc/CisJfSAvLyBzZWxlY3Rpb25DaGFuZ2VkCisKKwkKKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2UudWkucGFydC5Xb3JrYmVuY2hQYXJ0I2Rpc3Bvc2UoKQorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGRpc3Bvc2UoKSB7CisJCWdldFNpdGUoKS5nZXRXb3JrYmVuY2hXaW5kb3coKS5nZXRTZWxlY3Rpb25TZXJ2aWNlKCkKKwkJCQkucmVtb3ZlU2VsZWN0aW9uTGlzdGVuZXIodGhpcyk7CisJfSAvLyBkaXNwb3NlCisKKwkvKioKKwkgKiBUaGlzIGlzIHJlcXVpcmVkIGJ5IHRoZSBpbnRlcmZhY2UsIGJ1dCB3ZSdyZSBub3QgdXNpbmcgaXQuCisJICogCisJICogQHNlZSBvcmcuZWNsaXBzZS51aS5wYXJ0LldvcmtiZW5jaFBhcnQjc2V0Rm9jdXMoKQorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIHNldEZvY3VzKCkgeworCQkvLyBOb3RoaW5nCisJfSAvLyBzZXRGb2N1cworCit9IC8vIFRpbWVTZXJpZXNWaWV3CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkucmVwb3J0cy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9yZXBvcnRzL3ZpZXdzL21lc3NhZ2VzLnByb3BlcnRpZXMgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkucmVwb3J0cy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9yZXBvcnRzL3ZpZXdzL21lc3NhZ2VzLnByb3BlcnRpZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTI2YjVlZQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5yZXBvcnRzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3JlcG9ydHMvdmlld3MvbWVzc2FnZXMucHJvcGVydGllcwpAQCAtMCwwICsxLDM4IEBACisjIG1lc3NhZ2VzLnByb3BlcnRpZXMKKyMKKyMgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyMgKiBDb3B5cmlnaHQgKGMpIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisjICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworIyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorIyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisjICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyMgKgorIyAqIENvbnRyaWJ1dG9yczoKKyMgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisjICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyMgQ2hhcnQgQ2FudmFzCitDQy50aXRsZT1SZWxhdGl2ZSBWYWx1ZQorCisjIFBoYXNlIFNwYWNlCitQSC50aXRsZT1QaGFzZSBTcGFjZQorCisjIFRpbWUgU2VyaWVzIGFuZCBBZ2dyZWdhdGUgVGltZSBTZXJpZXMKK1RTLlRJTUVMQUJFTD10aW1lCisKKyMgQXhpcyBsYWJlbHMKK1hBWElTREVGLnRpdGxlPVggQXhpcworWUFYSVNERUYudGl0bGU9WSBBeGlzCisKKyMgQ29udGV4dCBtZW51IGVudHJpZXMKK0NvbnRleHRNZW51LkxpbmVhclRpbWVTY2FsZT1MaW5lYXIgU2NhbGUKK0NvbnRleHRNZW51LkxvZ1RpbWVTY2FsZT1Mb2cgU2NhbGUKK0NvbnRleHRNZW51LkxpbmVhclNjYWxpbmc9TGluZWFyIFNjYWxlCitDb250ZXh0TWVudS5Mb2dTY2FsaW5nPUxvZyBTY2FsZQorQ29udGV4dE1lbnUuU2hvd0xlZ2VuZD1TaG93IExlZ2VuZAorQ29udGV4dE1lbnUuSGlkZUxlZ2VuZD1IaWRlIExlZ2VuZAorQ29udGV4dE1lbnUuQ2xlYXI9Q2xlYXIKKworIyBsYWJlbHMKK1JFUE9SVFZJRVcuU0VMRUNUUkVGRU5DRUZPTERFUj1TZWxlY3QgUmVmZXJlbmNlIEZvbGRlcgorCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkucmVwb3J0cy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9yZXBvcnRzL3ZpZXdzL21lc3NhZ2VzX2RlLnByb3BlcnRpZXMgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkucmVwb3J0cy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9yZXBvcnRzL3ZpZXdzL21lc3NhZ2VzX2RlLnByb3BlcnRpZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2M2MzVmNwotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5yZXBvcnRzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3JlcG9ydHMvdmlld3MvbWVzc2FnZXNfZGUucHJvcGVydGllcwpAQCAtMCwwICsxLDM4IEBACisjIG1lc3NhZ2VzLnByb3BlcnRpZXMKKyMKKyMgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyMgKiBDb3B5cmlnaHQgKGMpIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisjICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworIyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorIyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisjICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyMgKgorIyAqIENvbnRyaWJ1dG9yczoKKyMgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisjICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyMgQ2hhcnQgQ2FudmFzCitDQy50aXRsZT1SZWxhdGl2ZXIgV2VydAorCisjIFBoYXNlIFNwYWNlCitQSC50aXRsZT1QaGFzZW5yYXVtCisKKyMgVGltZSBTZXJpZXMgYW5kIEFnZ3JlZ2F0ZSBUaW1lIFNlcmllcworVFMuVElNRUxBQkVMPVplaXQKKworIyBBeGlzIGxhYmVscworWEFYSVNERUYudGl0bGU9WC1BY2hzZQorWUFYSVNERUYudGl0bGU9WS1BY2hzZQorCisjIENvbnRleHQgbWVudSBlbnRyaWVzCitDb250ZXh0TWVudS5MaW5lYXJUaW1lU2NhbGU9TGluZWFyZSBTa2FsaWVydW5nCitDb250ZXh0TWVudS5Mb2dUaW1lU2NhbGU9TG9nLVNrYWxhCitDb250ZXh0TWVudS5MaW5lYXJTY2FsaW5nPUxpbmVhcmUgU2thbGllcnVuZworQ29udGV4dE1lbnUuTG9nU2NhbGluZz1Mb2ctU2thbGEKK0NvbnRleHRNZW51LlNob3dMZWdlbmQ9U2hvdyBMZWdlbmQKK0NvbnRleHRNZW51LkhpZGVMZWdlbmQ9TGVnZW5kZSBhdXNibGVuZGVuCitDb250ZXh0TWVudS5DbGVhcj1FbnRmZXJuZW4KKworIyBsYWJlbHMKK1JFUE9SVFZJRVcuU0VMRUNUUkVGRU5DRUZPTERFUj1SZWZlcmVuem9yZG5lciB3XHUwMGU0aGxlbgorCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkucmVwb3J0cy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9yZXBvcnRzL3ZpZXdzL21lc3NhZ2VzX2tyLnByb3BlcnRpZXMgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkucmVwb3J0cy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9yZXBvcnRzL3ZpZXdzL21lc3NhZ2VzX2tyLnByb3BlcnRpZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjA4M2ZmZQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5yZXBvcnRzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3JlcG9ydHMvdmlld3MvbWVzc2FnZXNfa3IucHJvcGVydGllcwpAQCAtMCwwICsxLDM4IEBACisjIG1lc3NhZ2VzLnByb3BlcnRpZXMKKyMKKyMgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyMgKiBDb3B5cmlnaHQgKGMpIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisjICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworIyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorIyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisjICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyMgKgorIyAqIENvbnRyaWJ1dG9yczoKKyMgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisjICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyMgQ2hhcnQgQ2FudmFzCitDQy50aXRsZT1cdWMwYzFcdWIzMDAgXHVhYzAwXHVjZTU4CisKKyMgUGhhc2UgU3BhY2UKK1BILnRpdGxlPVx1YjJlOFx1YWNjNCBcdWFjZjVcdWFjMDQKKworIyBUaW1lIFNlcmllcyBhbmQgQWdncmVnYXRlIFRpbWUgU2VyaWVzCitUUy5USU1FTEFCRUw9XHVjMmRjXHVhYzA0CisKKyMgQXhpcyBsYWJlbHMKK1hBWElTREVGLnRpdGxlPVggXHVjZDk1CitZQVhJU0RFRi50aXRsZT1ZIFx1Y2Q5NQorCisjIENvbnRleHQgbWVudSBlbnRyaWVzCitDb250ZXh0TWVudS5MaW5lYXJUaW1lU2NhbGU9XHVjMTIwXHVkNjE1IFx1YzJhNFx1Y2YwMFx1Yzc3YworQ29udGV4dE1lbnUuTG9nVGltZVNjYWxlPVx1Yjg1Y1x1YWRmOCBcdWMyYTRcdWNmMDBcdWM3N2MKK0NvbnRleHRNZW51LkxpbmVhclNjYWxpbmc9XHVjMTIwXHVkNjE1IFx1YzJhNFx1Y2YwMFx1Yzc3YworQ29udGV4dE1lbnUuTG9nU2NhbGluZz1cdWI4NWNcdWFkZjggXHVjMmE0XHVjZjAwXHVjNzdjCitDb250ZXh0TWVudS5TaG93TGVnZW5kPVx1ZDQ1Y1x1YzJkYyBcdWJjOTRcdWI4NDAKK0NvbnRleHRNZW51LkhpZGVMZWdlbmQ9XHViYzk0XHViODQwIFx1YzIyOFx1YWUzMFx1YWUzMAorQ29udGV4dE1lbnUuQ2xlYXI9XHVjODE1XHViOWFjCisKKyMgbGFiZWxzCitSRVBPUlRWSUVXLlNFTEVDVFJFRkVOQ0VGT0xERVI9XHVjYzM4XHVjODcwIFx1ZDNmNFx1YjM1NCBcdWMxMjBcdWQwZGQKKwpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLnJlcG9ydHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvcmVwb3J0cy92aWV3cy9tZXNzYWdlc196aC5wcm9wZXJ0aWVzIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLnJlcG9ydHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvcmVwb3J0cy92aWV3cy9tZXNzYWdlc196aC5wcm9wZXJ0aWVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZmNjMwOGYKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkucmVwb3J0cy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9yZXBvcnRzL3ZpZXdzL21lc3NhZ2VzX3poLnByb3BlcnRpZXMKQEAgLTAsMCArMSwzOCBAQAorIyBtZXNzYWdlcy5wcm9wZXJ0aWVzCisjCisjIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjICogQ29weXJpZ2h0IChjKSAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorIyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyMgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyMgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorIyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisjICoKKyMgKiBDb250cmlidXRvcnM6CisjICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorIyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjIENoYXJ0IENhbnZhcworQ0MudGl0bGU9XHU3NmY4XHU1YmY5XHU1MDNjCisKKyMgUGhhc2UgU3BhY2UKK1BILnRpdGxlPVx1NzZmOFx1N2E3YVx1OTVmNAorCisjIFRpbWUgU2VyaWVzIGFuZCBBZ2dyZWdhdGUgVGltZSBTZXJpZXMKK1RTLlRJTUVMQUJFTD1cdTY1ZjZcdTk1ZjQKKworIyBBeGlzIGxhYmVscworWEFYSVNERUYudGl0bGU9WFx1OGY3NAorWUFYSVNERUYudGl0bGU9WVx1OGY3NAorCisjIENvbnRleHQgbWVudSBlbnRyaWVzCitDb250ZXh0TWVudS5MaW5lYXJUaW1lU2NhbGU9XHU3ZWJmXHU2MDI3XHU4OWM0XHU2YTIxCitDb250ZXh0TWVudS5Mb2dUaW1lU2NhbGU9XHU2NWU1XHU1ZmQ3XHU3YjQ5XHU3ZWE3CitDb250ZXh0TWVudS5MaW5lYXJTY2FsaW5nPVx1N2ViZlx1NjAyN1x1ODljNFx1NmEyMQorQ29udGV4dE1lbnUuTG9nU2NhbGluZz1cdTY1ZTVcdTVmZDdcdTdiNDlcdTdlYTcKK0NvbnRleHRNZW51LlNob3dMZWdlbmQ9XHU2NjNlXHU3OTNhXHU1NmZlXHU0ZjhiCitDb250ZXh0TWVudS5IaWRlTGVnZW5kPVx1OTY5MFx1ODVjZlx1NTZmZVx1NGY4YgorQ29udGV4dE1lbnUuQ2xlYXI9XHU2ZTA1XHU5NjY0CisKKyMgbGFiZWxzCitSRVBPUlRWSUVXLlNFTEVDVFJFRkVOQ0VGT0xERVI9XHU5MDA5XHU2MmU5XHU1M2MyXHU4MDAzXHU2NTg3XHU0ZWY2XHU1OTM5CisKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5zb2x2ZXJzLmZkLy5jbGFzc3BhdGggYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkuc29sdmVycy5mZC8uY2xhc3NwYXRoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ1ZjAyNGUKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkuc29sdmVycy5mZC8uY2xhc3NwYXRoCkBAIC0wLDAgKzEsNyBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4NCis8Y2xhc3NwYXRoPg0KKwk8Y2xhc3NwYXRoZW50cnkga2luZD0ic3JjIiBwYXRoPSJzcmMiLz4NCisJPGNsYXNzcGF0aGVudHJ5IGtpbmQ9ImNvbiIgcGF0aD0ib3JnLmVjbGlwc2UuamR0LmxhdW5jaGluZy5KUkVfQ09OVEFJTkVSL29yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC5kZWJ1Zy51aS5sYXVuY2hlci5TdGFuZGFyZFZNVHlwZS9KMlNFLTEuNSIvPg0KKwk8Y2xhc3NwYXRoZW50cnkga2luZD0iY29uIiBwYXRoPSJvcmcuZWNsaXBzZS5wZGUuY29yZS5yZXF1aXJlZFBsdWdpbnMiLz4NCisJPGNsYXNzcGF0aGVudHJ5IGtpbmQ9Im91dHB1dCIgcGF0aD0iYmluIi8+DQorPC9jbGFzc3BhdGg+DQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLnNvbHZlcnMuZmQvLnByb2plY3QgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkuc29sdmVycy5mZC8ucHJvamVjdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMmQ3ODk0Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLnNvbHZlcnMuZmQvLnByb2plY3QKQEAgLTAsMCArMSwyOCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4NCis8cHJvamVjdERlc2NyaXB0aW9uPg0KKwk8bmFtZT5vcmcuZWNsaXBzZS5zdGVtLnVpLnNvbHZlcnMuZmQ8L25hbWU+DQorCTxjb21tZW50PjwvY29tbWVudD4NCisJPHByb2plY3RzPg0KKwk8L3Byb2plY3RzPg0KKwk8YnVpbGRTcGVjPg0KKwkJPGJ1aWxkQ29tbWFuZD4NCisJCQk8bmFtZT5vcmcuZWNsaXBzZS5qZHQuY29yZS5qYXZhYnVpbGRlcjwvbmFtZT4NCisJCQk8YXJndW1lbnRzPg0KKwkJCTwvYXJndW1lbnRzPg0KKwkJPC9idWlsZENvbW1hbmQ+DQorCQk8YnVpbGRDb21tYW5kPg0KKwkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5NYW5pZmVzdEJ1aWxkZXI8L25hbWU+DQorCQkJPGFyZ3VtZW50cz4NCisJCQk8L2FyZ3VtZW50cz4NCisJCTwvYnVpbGRDb21tYW5kPg0KKwkJPGJ1aWxkQ29tbWFuZD4NCisJCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuU2NoZW1hQnVpbGRlcjwvbmFtZT4NCisJCQk8YXJndW1lbnRzPg0KKwkJCTwvYXJndW1lbnRzPg0KKwkJPC9idWlsZENvbW1hbmQ+DQorCTwvYnVpbGRTcGVjPg0KKwk8bmF0dXJlcz4NCisJCTxuYXR1cmU+b3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YW5hdHVyZTwvbmF0dXJlPg0KKwkJPG5hdHVyZT5vcmcuZWNsaXBzZS5wZGUuUGx1Z2luTmF0dXJlPC9uYXR1cmU+DQorCTwvbmF0dXJlcz4NCis8L3Byb2plY3REZXNjcmlwdGlvbj4NCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkuc29sdmVycy5mZC8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkuc29sdmVycy5mZC8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjhmNTM5NQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5zb2x2ZXJzLmZkLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcwpAQCAtMCwwICsxLDIxIEBACisjVHVlIFNlcCAwMSAxNjo1NTozNSBFRFQgMjAwOQorZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvZGVnZW4uaW5saW5lSnNyQnl0ZWNvZGU9ZW5hYmxlZAorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29kZWdlbi50YXJnZXRQbGF0Zm9ybT0xLjUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvbXBsaWFuY2U9MS41CitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5kb2MuY29tbWVudC5zdXBwb3J0PWRpc2FibGVkCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmFzc2VydElkZW50aWZpZXI9ZXJyb3IKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZW51bUlkZW50aWZpZXI9ZXJyb3IKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW52YWxpZEphdmFkb2M9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbnZhbGlkSmF2YWRvY1RhZ3M9ZW5hYmxlZAorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbnZhbGlkSmF2YWRvY1RhZ3NEZXByZWNhdGVkUmVmPWVuYWJsZWQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW52YWxpZEphdmFkb2NUYWdzTm90VmlzaWJsZVJlZj1lbmFibGVkCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmludmFsaWRKYXZhZG9jVGFnc1Zpc2liaWxpdHk9cHVibGljCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdKYXZhZG9jQ29tbWVudHM9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nSmF2YWRvY0NvbW1lbnRzT3ZlcnJpZGluZz1lbmFibGVkCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdKYXZhZG9jQ29tbWVudHNWaXNpYmlsaXR5PXB1YmxpYworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nSmF2YWRvY1RhZ0Rlc2NyaXB0aW9uPXJldHVybl90YWcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0phdmFkb2NUYWdzPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0phdmFkb2NUYWdzT3ZlcnJpZGluZz1lbmFibGVkCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdKYXZhZG9jVGFnc1Zpc2liaWxpdHk9cHVibGljCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5zb3VyY2U9MS41CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkuc29sdmVycy5mZC9NRVRBLUlORi9NQU5JRkVTVC5NRiBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5zb2x2ZXJzLmZkL01FVEEtSU5GL01BTklGRVNULk1GCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVjOWIxZGYKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkuc29sdmVycy5mZC9NRVRBLUlORi9NQU5JRkVTVC5NRgpAQCAtMCwwICsxLDIxIEBACitNYW5pZmVzdC1WZXJzaW9uOiAxLjANCitCdW5kbGUtTWFuaWZlc3RWZXJzaW9uOiAyDQorQnVuZGxlLU5hbWU6ICVwbHVnaW5OYW1lDQorQnVuZGxlLVN5bWJvbGljTmFtZTogb3JnLmVjbGlwc2Uuc3RlbS51aS5zb2x2ZXJzLmZkO3NpbmdsZXRvbjo9dHJ1ZQ0KK0J1bmRsZS1WZXJzaW9uOiAxLjIuMQ0KK0J1bmRsZS1DbGFzc1BhdGg6IC4NCitCdW5kbGUtQWN0aXZhdG9yOiBvcmcuZWNsaXBzZS5zdGVtLnVpLnNvbHZlcnMuZmQuQWN0aXZhdG9yDQorQnVuZGxlLVZlbmRvcjogJXByb3ZpZGVyTmFtZQ0KK0J1bmRsZS1Mb2NhbGl6YXRpb246IHBsdWdpbg0KK0J1bmRsZS1SZXF1aXJlZEV4ZWN1dGlvbkVudmlyb25tZW50OiBKMlNFLTEuNQ0KK0V4cG9ydC1QYWNrYWdlOiBvcmcuZWNsaXBzZS5zdGVtLnNvbHZlcnMuZmQucHJlc2VudGF0aW9uDQorUmVxdWlyZS1CdW5kbGU6IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZSwNCisgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXM7dmlzaWJpbGl0eTo9cmVleHBvcnQsDQorIG9yZy5lY2xpcHNlLnN0ZW0uc29sdmVycy5mZDt2aXNpYmlsaXR5Oj1yZWV4cG9ydCwNCisgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnhtaTt2aXNpYmlsaXR5Oj1yZWV4cG9ydCwNCisgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWk7dmlzaWJpbGl0eTo9cmVleHBvcnQsDQorIG9yZy5lY2xpcHNlLnVpLmlkZTt2aXNpYmlsaXR5Oj1yZWV4cG9ydCwNCisgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlO3Zpc2liaWxpdHk6PXJlZXhwb3J0LA0KKyBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuZWRpdDt2aXNpYmlsaXR5Oj1yZWV4cG9ydCwNCisgb3JnLmVjbGlwc2Uuc3RlbS51aQ0KK0J1bmRsZS1BY3RpdmF0aW9uUG9saWN5OiBsYXp5DQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLnNvbHZlcnMuZmQvYnVpbGQucHJvcGVydGllcyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5zb2x2ZXJzLmZkL2J1aWxkLnByb3BlcnRpZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTViOGJhNwotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5zb2x2ZXJzLmZkL2J1aWxkLnByb3BlcnRpZXMKQEAgLTAsMCArMSwxNyBAQAorDQorIyA8Y29weXJpZ2h0Pg0KKyMgPC9jb3B5cmlnaHQ+DQorIw0KKyMgJElkJA0KKw0KK2Jpbi5pbmNsdWRlcyA9IC4sXA0KKyAgICAgICAgICAgICAgIGljb25zLyxcDQorICAgICAgICAgICAgICAgTUVUQS1JTkYvLFwNCisgICAgICAgICAgICAgICBwbHVnaW4ueG1sLFwNCisgICAgICAgICAgICAgICBwbHVnaW4ucHJvcGVydGllcyxcDQorICAgICAgICAgICAgICAgcGx1Z2luX2RlLnByb3BlcnRpZXMsXA0KKyAgICAgICAgICAgICAgIHBsdWdpbl9rci5wcm9wZXJ0aWVzLFwNCisgICAgICAgICAgICAgICBwbHVnaW5femgucHJvcGVydGllcw0KK2phcnMuY29tcGlsZS5vcmRlciA9IC4NCitzb3VyY2UuLiA9IHNyYy8NCitvdXRwdXQuLiA9IGJpbi8NCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkuc29sdmVycy5mZC9pY29ucy9mdWxsL29iajE2L0ZkTW9kZWxGaWxlLmdpZiBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5zb2x2ZXJzLmZkL2ljb25zL2Z1bGwvb2JqMTYvRmRNb2RlbEZpbGUuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk2YTg4ZjgKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkuc29sdmVycy5mZC9pY29ucy9mdWxsL29iajE2L0ZkTW9kZWxGaWxlLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkuc29sdmVycy5mZC9pY29ucy9mdWxsL3dpemJhbi9OZXdGZC5naWYgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkuc29sdmVycy5mZC9pY29ucy9mdWxsL3dpemJhbi9OZXdGZC5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDI2MDEwNgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5zb2x2ZXJzLmZkL2ljb25zL2Z1bGwvd2l6YmFuL05ld0ZkLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkuc29sdmVycy5mZC9wbHVnaW4ucHJvcGVydGllcyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5zb2x2ZXJzLmZkL3BsdWdpbi5wcm9wZXJ0aWVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIxMTMzODQKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkuc29sdmVycy5mZC9wbHVnaW4ucHJvcGVydGllcwpAQCAtMCwwICsxLDc2IEBACisNCisjLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisjICogQ29weXJpZ2h0IChjKSAyMDA5IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLg0KKyMgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzDQorIyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMA0KKyMgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdA0KKyMgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbA0KKyMgKg0KKyMgKiBDb250cmlidXRvcnM6DQorIyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24NCisjICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQorDQorIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KKyMgVG8gY29kZSBkZXZlbG9wZXI6DQorIyAgIERvIE5PVCBjaGFuZ2UgdGhlIHByb3BlcnRpZXMgYmV0d2VlbiB0aGlzIGxpbmUgYW5kIHRoZQ0KKyMgICAiJSUlIEVORCBPRiBUUkFOU0xBVEVEIFBST1BFUlRJRVMgJSUlIiBsaW5lLg0KKyMgICBNYWtlIGEgbmV3IHByb3BlcnR5IG5hbWUsIGFwcGVuZCB0byB0aGUgZW5kIG9mIHRoZSBmaWxlIGFuZCBjaGFuZ2UNCisjICAgdGhlIGNvZGUgdG8gdXNlIHRoZSBuZXcgcHJvcGVydHkuDQorIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KKw0KKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCisjICUlJSBFTkQgT0YgVFJBTlNMQVRFRCBQUk9QRVJUSUVTICUlJQ0KKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCisNCisNCitwbHVnaW5OYW1lID0gU1RFTSBGaW5pdGUgRGlmZmVyZW5jZSBTb2x2ZXIgVUkNCitwcm92aWRlck5hbWUgPSBFY2xpcHNlLm9yZw0KKw0KK19VSV9GZEVkaXRvcl9tZW51ID0gJkZkIEVkaXRvcg0KKw0KK19VSV9DcmVhdGVDaGlsZF9tZW51X2l0ZW0gPSAmTmV3IENoaWxkDQorX1VJX0NyZWF0ZVNpYmxpbmdfbWVudV9pdGVtID0gTiZldyBTaWJsaW5nDQorDQorX1VJX1Nob3dQcm9wZXJ0aWVzVmlld19tZW51X2l0ZW0gPSBTaG93ICZQcm9wZXJ0aWVzIFZpZXcNCitfVUlfUmVmcmVzaFZpZXdlcl9tZW51X2l0ZW0gPSAmUmVmcmVzaA0KKw0KK19VSV9TZWxlY3Rpb25QYWdlX2xhYmVsID0gU2VsZWN0aW9uDQorX1VJX1BhcmVudFBhZ2VfbGFiZWwgPSBQYXJlbnQNCitfVUlfTGlzdFBhZ2VfbGFiZWwgPSBMaXN0DQorX1VJX1RyZWVQYWdlX2xhYmVsID0gVHJlZQ0KK19VSV9UYWJsZVBhZ2VfbGFiZWwgPSBUYWJsZQ0KK19VSV9UcmVlV2l0aENvbHVtbnNQYWdlX2xhYmVsID0gVHJlZSB3aXRoIENvbHVtbnMNCitfVUlfT2JqZWN0Q29sdW1uX2xhYmVsID0gT2JqZWN0DQorX1VJX1NlbGZDb2x1bW5fbGFiZWwgPSBTZWxmDQorDQorX1VJX05vT2JqZWN0U2VsZWN0ZWQgPSBTZWxlY3RlZCBOb3RoaW5nDQorX1VJX1NpbmdsZU9iamVjdFNlbGVjdGVkID0gU2VsZWN0ZWQgT2JqZWN0OiB7MH0NCitfVUlfTXVsdGlPYmplY3RTZWxlY3RlZCA9IFNlbGVjdGVkIHswfSBPYmplY3RzDQorDQorX1VJX09wZW5FZGl0b3JFcnJvcl9sYWJlbCA9IE9wZW4gRWRpdG9yDQorDQorX1VJX1dpemFyZF9jYXRlZ29yeSA9IEV4YW1wbGUgRU1GIE1vZGVsIENyZWF0aW9uIFdpemFyZHMNCisNCitfVUlfQ3JlYXRlTW9kZWxFcnJvcl9tZXNzYWdlID0gUHJvYmxlbXMgZW5jb3VudGVyZWQgaW4gZmlsZSAiezB9Ig0KKw0KK19VSV9GZE1vZGVsV2l6YXJkX2xhYmVsID0gRmQgTW9kZWwNCitfVUlfRmRNb2RlbFdpemFyZF9kZXNjcmlwdGlvbiA9IENyZWF0ZSBhIG5ldyBGZCBtb2RlbA0KKw0KK19VSV9GZEVkaXRvcl9sYWJlbCA9IEZkIE1vZGVsIEVkaXRvcg0KKw0KK19VSV9GZEVkaXRvckZpbGVuYW1lRGVmYXVsdEJhc2UgPSBNeQ0KK19VSV9GZEVkaXRvckZpbGVuYW1lRXh0ZW5zaW9ucyA9IGZkDQorDQorX1VJX1dpemFyZF9sYWJlbCA9IE5ldw0KKw0KK19XQVJOX0ZpbGVuYW1lRXh0ZW5zaW9uID0gVGhlIGZpbGUgbmFtZSBtdXN0IGVuZCBpbiAnJy57MH0nJw0KK19XQVJOX0ZpbGVuYW1lRXh0ZW5zaW9ucyA9IFRoZSBmaWxlIG5hbWUgbXVzdCBoYXZlIG9uZSBvZiB0aGUgZm9sbG93aW5nIGV4dGVuc2lvbnM6IHswfQ0KKw0KK19VSV9Nb2RlbE9iamVjdCA9ICZNb2RlbCBPYmplY3QNCitfVUlfWE1MRW5jb2RpbmcgPSAmWE1MIEVuY29kaW5nDQorX1VJX1hNTEVuY29kaW5nQ2hvaWNlcyA9IFVURi04IEFTQ0lJIFVURi0xNiBVVEYtMTZCRSBVVEYtMTZMRSBJU08tODg1OS0xDQorX1VJX1dpemFyZF9pbml0aWFsX29iamVjdF9kZXNjcmlwdGlvbiA9IFNlbGVjdCBhIG1vZGVsIG9iamVjdCB0byBjcmVhdGUNCisNCitfVUlfRmlsZUNvbmZsaWN0X2xhYmVsID0gRmlsZSBDb25mbGljdA0KK19XQVJOX0ZpbGVDb25mbGljdCA9IFRoZXJlIGFyZSB1bnNhdmVkIGNoYW5nZXMgdGhhdCBjb25mbGljdCB3aXRoIGNoYW5nZXMgbWFkZSBvdXRzaWRlIHRoZSBlZGl0b3IuICBEbyB5b3Ugd2lzaCB0byBkaXNjYXJkIHRoaXMgZWRpdG9yJ3MgY2hhbmdlcz8NCisNCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkuc29sdmVycy5mZC9wbHVnaW4ueG1sIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLnNvbHZlcnMuZmQvcGx1Z2luLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wOTVkYmQ0Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLnNvbHZlcnMuZmQvcGx1Z2luLnhtbApAQCAtMCwwICsxLDQ0IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/Pg0KKzw/ZWNsaXBzZSB2ZXJzaW9uPSIzLjAiPz4NCisNCis8IS0tDQorIDxjb3B5cmlnaHQ+DQorIDwvY29weXJpZ2h0Pg0KKw0KKyAkSWQkDQorLS0+DQorDQorPHBsdWdpbj4NCisNCisgICA8ZXh0ZW5zaW9uIHBvaW50PSJvcmcuZWNsaXBzZS51aS5uZXdXaXphcmRzIj4NCisgICAgICA8Y2F0ZWdvcnkNCisgICAgICAgICAgICBpZD0ib3JnLmVjbGlwc2UuZW1mLmVjb3JlLldpemFyZC5jYXRlZ29yeS5JRCINCisgICAgICAgICAgICBuYW1lPSIlX1VJX1dpemFyZF9jYXRlZ29yeSIvPg0KKyAgICAgIDx3aXphcmQNCisgICAgICAgICAgICBpZD0ib3JnLmVjbGlwc2Uuc3RlbS5zb2x2ZXJzLmZkLnByZXNlbnRhdGlvbi5GZE1vZGVsV2l6YXJkSUQiDQorICAgICAgICAgICAgbmFtZT0iJV9VSV9GZE1vZGVsV2l6YXJkX2xhYmVsIg0KKyAgICAgICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS5zdGVtLnNvbHZlcnMuZmQucHJlc2VudGF0aW9uLkZkTW9kZWxXaXphcmQiDQorICAgICAgICAgICAgY2F0ZWdvcnk9Im9yZy5lY2xpcHNlLmVtZi5lY29yZS5XaXphcmQuY2F0ZWdvcnkuSUQiDQorICAgICAgICAgICAgaWNvbj0iaWNvbnMvZnVsbC9vYmoxNi9GZE1vZGVsRmlsZS5naWYiPg0KKyAgICAgICAgIDxkZXNjcmlwdGlvbj4lX1VJX0ZkTW9kZWxXaXphcmRfZGVzY3JpcHRpb248L2Rlc2NyaXB0aW9uPg0KKyAgICAgICAgIDxzZWxlY3Rpb24gY2xhc3M9Im9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklSZXNvdXJjZSIvPg0KKyAgICAgIDwvd2l6YXJkPg0KKyAgIDwvZXh0ZW5zaW9uPg0KKw0KKyAgIDxleHRlbnNpb24gcG9pbnQ9Im9yZy5lY2xpcHNlLnVpLmVkaXRvcnMiPg0KKyAgICAgIDxlZGl0b3INCisgICAgICAgICAgICBpZD0ib3JnLmVjbGlwc2Uuc3RlbS5zb2x2ZXJzLmZkLnByZXNlbnRhdGlvbi5GZEVkaXRvcklEIg0KKyAgICAgICAgICAgIG5hbWU9IiVfVUlfRmRFZGl0b3JfbGFiZWwiDQorICAgICAgICAgICAgaWNvbj0iaWNvbnMvZnVsbC9vYmoxNi9GZE1vZGVsRmlsZS5naWYiDQorICAgICAgICAgICAgZXh0ZW5zaW9ucz0iZmQiDQorICAgICAgICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLnN0ZW0uc29sdmVycy5mZC5wcmVzZW50YXRpb24uRmRFZGl0b3IiDQorICAgICAgICAgICAgY29udHJpYnV0b3JDbGFzcz0ib3JnLmVjbGlwc2Uuc3RlbS5zb2x2ZXJzLmZkLnByZXNlbnRhdGlvbi5GZEFjdGlvbkJhckNvbnRyaWJ1dG9yIj4NCisgICAgICA8L2VkaXRvcj4NCisgICA8L2V4dGVuc2lvbj4NCisgPGV4dGVuc2lvbg0KKyAgICAgICAgcG9pbnQ9Im9yZy5lY2xpcHNlLnVpLnN0YXJ0dXAiPg0KKyAgICAgPHN0YXJ0dXANCisgICAgICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS5zdGVtLnNvbHZlcnMuZmQucHJlc2VudGF0aW9uLkZkU29sdmVyUHJvcGVydHlFZGl0b3JBZGFwdGVyRmFjdG9yeSI+DQorICAgICA8L3N0YXJ0dXA+DQorICA8L2V4dGVuc2lvbj4NCis8L3BsdWdpbj4NCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkuc29sdmVycy5mZC9wbHVnaW5fZGUucHJvcGVydGllcyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5zb2x2ZXJzLmZkL3BsdWdpbl9kZS5wcm9wZXJ0aWVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMzZTc1NmUKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkuc29sdmVycy5mZC9wbHVnaW5fZGUucHJvcGVydGllcwpAQCAtMCwwICsxLDc2IEBACisKKyMvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIyAqIENvcHlyaWdodCAoYykgMjAwOSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyMgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisjICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisjICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyMgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorIyAqCisjICogQ29udHJpYnV0b3JzOgorIyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorIyBUbyBjb2RlIGRldmVsb3BlcjoKKyMgICBEbyBOT1QgY2hhbmdlIHRoZSBwcm9wZXJ0aWVzIGJldHdlZW4gdGhpcyBsaW5lIGFuZCB0aGUKKyMgICAiJSUlIEVORCBPRiBUUkFOU0xBVEVEIFBST1BFUlRJRVMgJSUlIiBsaW5lLgorIyAgIE1ha2UgYSBuZXcgcHJvcGVydHkgbmFtZSwgYXBwZW5kIHRvIHRoZSBlbmQgb2YgdGhlIGZpbGUgYW5kIGNoYW5nZQorIyAgIHRoZSBjb2RlIHRvIHVzZSB0aGUgbmV3IHByb3BlcnR5LgorIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisjICUlJSBFTkQgT0YgVFJBTlNMQVRFRCBQUk9QRVJUSUVTICUlJQorIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisKK3BsdWdpbk5hbWU9U1RFTSBGaW5pdGUtRGlmZmVyZW56ZW4tR2xlaWNodW5nc2xcdTAwZjZzZXItQmVudXR6ZXJvYmVyZmxcdTAwZTRjaGUKK3Byb3ZpZGVyTmFtZT1FY2xpcHNlLm9yZworCitfVUlfRmRFZGl0b3JfbWVudT0mRmQgRWRpdG9yCisKK19VSV9DcmVhdGVDaGlsZF9tZW51X2l0ZW09Jk5ldyBDaGlsZAorX1VJX0NyZWF0ZVNpYmxpbmdfbWVudV9pdGVtPU4mZXVlcyBHZXNjaHdpc3RlcnRlaWwKKworX1VJX1Nob3dQcm9wZXJ0aWVzVmlld19tZW51X2l0ZW09U2hvdyAmIFByb3BlcnRpZXMgVmlldworX1VJX1JlZnJlc2hWaWV3ZXJfbWVudV9pdGVtPSZSZWZyZXNoCisKK19VSV9TZWxlY3Rpb25QYWdlX2xhYmVsPUF1c3dhaGwKK19VSV9QYXJlbnRQYWdlX2xhYmVsPUVsdGVybnRlaWwKK19VSV9MaXN0UGFnZV9sYWJlbD1MaXN0ZQorX1VJX1RyZWVQYWdlX2xhYmVsPUJhdW0KK19VSV9UYWJsZVBhZ2VfbGFiZWw9VGFiZWxsZQorX1VJX1RyZWVXaXRoQ29sdW1uc1BhZ2VfbGFiZWw9QmF1bSBtaXQgU3BhbHRlbgorX1VJX09iamVjdENvbHVtbl9sYWJlbD1PYmpla3QKK19VSV9TZWxmQ29sdW1uX2xhYmVsPVNlbGJzdAorCitfVUlfTm9PYmplY3RTZWxlY3RlZD1OaWNodHMgYXVzZ2V3XHUwMGU0aGx0CitfVUlfU2luZ2xlT2JqZWN0U2VsZWN0ZWQ9QXVzZ2V3XHUwMGU0aGx0ZXMgT2JqZWt0OiB7MH0KK19VSV9NdWx0aU9iamVjdFNlbGVjdGVkPUF1c2dld1x1MDBlNGhsdGUgezB9IE9iamVrdGUKKworX1VJX09wZW5FZGl0b3JFcnJvcl9sYWJlbD1FZGl0b3IgXHUwMGY2ZmZuZW4KKworX1VJX1dpemFyZF9jYXRlZ29yeT1CZWlzcGllbCBFTUYgTW9kZWxsIEVyc3RlbGx1bmdzYXNzaXN0ZW50CisKK19VSV9DcmVhdGVNb2RlbEVycm9yX21lc3NhZ2U9QXVmZ2V0cmV0ZW5lIFByb2JsZW1lIGluIGRlciBEYXRlaSAiezB9IgorCitfVUlfRmRNb2RlbFdpemFyZF9sYWJlbD1GZCBNb2RlbAorX1VJX0ZkTW9kZWxXaXphcmRfZGVzY3JpcHRpb249TmV1ZXMgRmQtTW9kZWxsIGVyc3RlbGxlbgorCitfVUlfRmRFZGl0b3JfbGFiZWw9RmQgTW9kZWwgRWRpdG9yCisKK19VSV9GZEVkaXRvckZpbGVuYW1lRGVmYXVsdEJhc2U9TWVpbgorX1VJX0ZkRWRpdG9yRmlsZW5hbWVFeHRlbnNpb25zPWZkCisKK19VSV9XaXphcmRfbGFiZWw9TmV1CisKK19XQVJOX0ZpbGVuYW1lRXh0ZW5zaW9uPURlciBEYXRlaW5hbWUgbXVzcyBhdWYgIi57MH0iIGVuZGVuCitfV0FSTl9GaWxlbmFtZUV4dGVuc2lvbnM9RGVyIERhdGVpbmFtZSBtdXNzIGVpbmUgZGVyIGZvbGdlbmRlbiBFbmR1bmdlbiBoYWJlbjogezB9CisKK19VSV9Nb2RlbE9iamVjdD0mTW9kZWwgT2JqZWN0CitfVUlfWE1MRW5jb2Rpbmc9JlhNTCBFbmNvZGluZworX1VJX1hNTEVuY29kaW5nQ2hvaWNlcz1VVEYtOCBBU0NJSSBVVEYtMTYgVVRGLTE2QkUgVVRGLTE2TEUgSVNPLTg4NTktMQorX1VJX1dpemFyZF9pbml0aWFsX29iamVjdF9kZXNjcmlwdGlvbj1adSBlcnpldWdlbmRlcyBNb2RlbGxvYmpla3Qgd1x1MDBlNGhsZW4KKworX1VJX0ZpbGVDb25mbGljdF9sYWJlbD1EYXRlaWtvbmZsaWt0CitfV0FSTl9GaWxlQ29uZmxpY3Q9RXMgZ2lidCBuaWNodCBnZXNwZWljaGVydGUgXHUwMGM0bmRlcnVuZ2VuLCBkaWUgS29uZmxpa3RlIG1pdCBcdTAwYzRuZGVydW5nZW4gYXVcdTAwZGZlcmhhbGIgZGVzIEVkaXRvcnMgZXJ6ZXVnZW4uIE1cdTAwZjZjaHRlbiBTaWUgZGllIFx1MDBjNG5kZXJ1bmdlbiBpbSBFZGl0b3IgdmVyd2VyZmVuPworCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkuc29sdmVycy5mZC9wbHVnaW5fa3IucHJvcGVydGllcyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5zb2x2ZXJzLmZkL3BsdWdpbl9rci5wcm9wZXJ0aWVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFiNTFiYTUKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkuc29sdmVycy5mZC9wbHVnaW5fa3IucHJvcGVydGllcwpAQCAtMCwwICsxLDc2IEBACisKKyMvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIyAqIENvcHlyaWdodCAoYykgMjAwOSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyMgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisjICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisjICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyMgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorIyAqCisjICogQ29udHJpYnV0b3JzOgorIyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorIyBUbyBjb2RlIGRldmVsb3BlcjoKKyMgICBEbyBOT1QgY2hhbmdlIHRoZSBwcm9wZXJ0aWVzIGJldHdlZW4gdGhpcyBsaW5lIGFuZCB0aGUKKyMgICAiJSUlIEVORCBPRiBUUkFOU0xBVEVEIFBST1BFUlRJRVMgJSUlIiBsaW5lLgorIyAgIE1ha2UgYSBuZXcgcHJvcGVydHkgbmFtZSwgYXBwZW5kIHRvIHRoZSBlbmQgb2YgdGhlIGZpbGUgYW5kIGNoYW5nZQorIyAgIHRoZSBjb2RlIHRvIHVzZSB0aGUgbmV3IHByb3BlcnR5LgorIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisjICUlJSBFTkQgT0YgVFJBTlNMQVRFRCBQUk9QRVJUSUVTICUlJQorIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisKK3BsdWdpbk5hbWU9U1RFTSBcdWM3MjBcdWQ1NWMgXHVjYzI4XHVjNzc0XHVjODEwIFx1ZDU3NFx1YWNiMFx1YzBhYyBVSQorcHJvdmlkZXJOYW1lPUVjbGlwc2Uub3JnCisKK19VSV9GZEVkaXRvcl9tZW51PSZGZCBFZGl0b3IKKworX1VJX0NyZWF0ZUNoaWxkX21lbnVfaXRlbT0mTmV3IENoaWxkCitfVUlfQ3JlYXRlU2libGluZ19tZW51X2l0ZW09TiYgIFx1ZDYxNVx1YzgxYyBcdWM3OTBcdWI5ZTQKKworX1VJX1Nob3dQcm9wZXJ0aWVzVmlld19tZW51X2l0ZW09XHVkNDVjXHVjMmRjIFx1YmMwZiBcdWMxOGRcdWMxMzFcdWJjZjRcdWFlMzAKK19VSV9SZWZyZXNoVmlld2VyX21lbnVfaXRlbT0mUmVmcmVzaAorCitfVUlfU2VsZWN0aW9uUGFnZV9sYWJlbD1cdWMxMjBcdWQwZGQKK19VSV9QYXJlbnRQYWdlX2xhYmVsPVx1YmQ4MFx1YmFhOAorX1VJX0xpc3RQYWdlX2xhYmVsPVx1YmFhOVx1Yjg1ZAorX1VJX1RyZWVQYWdlX2xhYmVsPVx1YjA5OFx1YmIzNAorX1VJX1RhYmxlUGFnZV9sYWJlbD1cdWQxNGNcdWM3NzRcdWJlMTQKK19VSV9UcmVlV2l0aENvbHVtbnNQYWdlX2xhYmVsPVx1YjA5OFx1YmIzNFx1YzY0MCBcdWM1ZjQKK19VSV9PYmplY3RDb2x1bW5fbGFiZWw9XHVhYzFjXHVjY2I0CitfVUlfU2VsZkNvbHVtbl9sYWJlbD1cdWMxNDBcdWQ1MDQKKworX1VJX05vT2JqZWN0U2VsZWN0ZWQ9XHVjNTQ0XHViYjM0XHVhYzgzXHViM2M0IFx1YzU0OCBcdWMxMjBcdWQwZGRcdWQ1NjgKK19VSV9TaW5nbGVPYmplY3RTZWxlY3RlZD1cdWMxMjBcdWQwZGRcdWQ1NWMgXHVhYzFkXHVjY2I0IDogezB9CitfVUlfTXVsdGlPYmplY3RTZWxlY3RlZD1cdWMxMjBcdWQwZGRcdWI0MWMgezB9IFx1YWMxZFx1Y2NiNAorCitfVUlfT3BlbkVkaXRvckVycm9yX2xhYmVsPVx1YzYyNFx1ZDUwOCBcdWM1ZDBcdWI1MTRcdWQxMzAKKworX1VJX1dpemFyZF9jYXRlZ29yeT1cdWM2MDhcdWM4MWMgRU1GIFx1YmFhOFx1YjM3OCBcdWMwZGRcdWMxMzEgXHViOWM4XHViYzk1XHVjMGFjCisKK19VSV9DcmVhdGVNb2RlbEVycm9yX21lc3NhZ2U9XHVkMzBjXHVjNzdjICd7MH0gIlx1YzVkMFx1YzExYyBcdWJiMzhcdWM4MWMgXHViYzFjXHVjMGRkCisKK19VSV9GZE1vZGVsV2l6YXJkX2xhYmVsPUZEIFx1YmFhOFx1YjM3OAorX1VJX0ZkTW9kZWxXaXphcmRfZGVzY3JpcHRpb249XHVjMGM4XHViODVjXHVjNmI0IEZEIFx1YmFhOFx1YjM3OCBcdWI5Y2NcdWI0ZTRcdWFlMzAKKworX1VJX0ZkRWRpdG9yX2xhYmVsPUZEIFx1YmFhOFx1YjM3OCBcdWQzYjhcdWM5ZDFcdWFlMzAKKworX1VJX0ZkRWRpdG9yRmlsZW5hbWVEZWZhdWx0QmFzZT1cdWIwOThcdWM3NTgKK19VSV9GZEVkaXRvckZpbGVuYW1lRXh0ZW5zaW9ucz1GRAorCitfVUlfV2l6YXJkX2xhYmVsPVx1YzBjOFx1Yjg1Y1x1YzZiNAorCitfV0FSTl9GaWxlbmFtZUV4dGVuc2lvbj1cdWQzMGNcdWM3N2MgXHVjNzc0XHViOTg0XHVjNzQwICIuezB9Ilx1Yjg1YyBcdWIwNWRcdWIwOThcdWM1N2NcdWQ1NjguCitfV0FSTl9GaWxlbmFtZUV4dGVuc2lvbnM9XHVkMzBjXHVjNzdjIFx1Yzc3NFx1Yjk4NFx1Yzc0MCBcdWIyZTRcdWM3NGMgXHVkNjU1XHVjN2E1XHVjNzkwIFx1YzkxMSBcdWQ1NThcdWIwOThcdWI5N2MgXHVhYzAwXHVjODM4XHVjNTdjXHVkNTY4IDogezB9CisKK19VSV9Nb2RlbE9iamVjdD0mTW9kZWwgT2JqZWN0CitfVUlfWE1MRW5jb2Rpbmc9JlhNTCBFbmNvZGluZworX1VJX1hNTEVuY29kaW5nQ2hvaWNlcz1VVEYgLSA4IEFTQ0lJIFVURiAtIDE2IFVURiAtIDE2QkUgVVRGIC0gMTZMRSBJU08gLSA4ODU5IC0gMQorX1VJX1dpemFyZF9pbml0aWFsX29iamVjdF9kZXNjcmlwdGlvbj1cdWMwZGRcdWMxMzFcdWQ1NjAgXHViYWE4XHViMzc4IFx1YWMxY1x1Y2NiNCBcdWMxMjBcdWQwZGQKKworX1VJX0ZpbGVDb25mbGljdF9sYWJlbD1cdWQzMGNcdWM3N2MgXHVjZGE5XHViM2NjCitfV0FSTl9GaWxlQ29uZmxpY3Q9XHVjODAwXHVjN2E1XHViNDE4XHVjOWMwIFx1YzU0YVx1Yzc0MCBcdWMwYWNcdWQ1NmRcdWI0ZTRcdWM3NzQgXHVkM2I4XHVjOWQxXHVhZTMwIFx1YzY3OFx1YmQ4MFx1Yzc1OCBcdWJjYzBcdWFjYmQgXHVjMGFjXHVkNTZkXHViNGU0XHVhY2ZjIFx1Y2RhOVx1YjNjY1x1ZDU2OC4gXHVjNzc0IFx1ZDNiOFx1YzlkMVx1YWUzMFx1Yzc1OCBcdWJjYzBcdWFjYmQgXHVjMGFjXHVkNTZkXHViNGU0XHVjNzQ0IFx1Y2RlOFx1YzE4YyBcdWQ1NThcdWMyZGNcdWFjYTBcdWMyYjVcdWIyYzhcdWFlNGM/CisKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5zb2x2ZXJzLmZkL3BsdWdpbl96aC5wcm9wZXJ0aWVzIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLnNvbHZlcnMuZmQvcGx1Z2luX3poLnByb3BlcnRpZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTdjZTkzYgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5zb2x2ZXJzLmZkL3BsdWdpbl96aC5wcm9wZXJ0aWVzCkBAIC0wLDAgKzEsNzYgQEAKKworIy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjICogQ29weXJpZ2h0IChjKSAyMDA5IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorIyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyMgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyMgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorIyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisjICoKKyMgKiBDb250cmlidXRvcnM6CisjICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorIyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisjIFRvIGNvZGUgZGV2ZWxvcGVyOgorIyAgIERvIE5PVCBjaGFuZ2UgdGhlIHByb3BlcnRpZXMgYmV0d2VlbiB0aGlzIGxpbmUgYW5kIHRoZQorIyAgICIlJSUgRU5EIE9GIFRSQU5TTEFURUQgUFJPUEVSVElFUyAlJSUiIGxpbmUuCisjICAgTWFrZSBhIG5ldyBwcm9wZXJ0eSBuYW1lLCBhcHBlbmQgdG8gdGhlIGVuZCBvZiB0aGUgZmlsZSBhbmQgY2hhbmdlCisjICAgdGhlIGNvZGUgdG8gdXNlIHRoZSBuZXcgcHJvcGVydHkuCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyMgJSUlIEVORCBPRiBUUkFOU0xBVEVEIFBST1BFUlRJRVMgJSUlCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKworcGx1Z2luTmFtZT1TVEVNXHU2NzA5XHU5NjUwXHU1ZGVlXHU1MjA2XHU2YzQyXHU4OWUzXHU1NjY4XHU3Njg0XHU3NTI4XHU2MjM3XHU3NTRjXHU5NzYyCitwcm92aWRlck5hbWU9RWNsaXBzZS5vcmcKKworX1VJX0ZkRWRpdG9yX21lbnU9JkZkIEVkaXRvcgorCitfVUlfQ3JlYXRlQ2hpbGRfbWVudV9pdGVtPSZOZXcgQ2hpbGQKK19VSV9DcmVhdGVTaWJsaW5nX21lbnVfaXRlbT1cdTY1YjBcdTc1MWZcdTYyMTBcdTRlMDBcdTRlMmFcdTUxNDRcdTVmMWZcdTdjN2IKKworX1VJX1Nob3dQcm9wZXJ0aWVzVmlld19tZW51X2l0ZW09XHU2NjNlXHU3OTNhXHU1NDhjXHU1YzVlXHU2MDI3XHU2N2U1XHU3NzBiCitfVUlfUmVmcmVzaFZpZXdlcl9tZW51X2l0ZW09JlJlZnJlc2gKKworX1VJX1NlbGVjdGlvblBhZ2VfbGFiZWw9XHU5MDA5XHU2MmU5CitfVUlfUGFyZW50UGFnZV9sYWJlbD1cdTViYjZcdTk1N2YKK19VSV9MaXN0UGFnZV9sYWJlbD1cdTc2ZWVcdTVmNTUKK19VSV9UcmVlUGFnZV9sYWJlbD1cdTY4MTEKK19VSV9UYWJsZVBhZ2VfbGFiZWw9XHU4ODY4CitfVUlfVHJlZVdpdGhDb2x1bW5zUGFnZV9sYWJlbD1cdTUyMDZcdTUyMTdcdTc2ODRcdTY4MTEKK19VSV9PYmplY3RDb2x1bW5fbGFiZWw9XHU1YmY5XHU4YzYxCitfVUlfU2VsZkNvbHVtbl9sYWJlbD1cdTgxZWFcdTVkZjEKKworX1VJX05vT2JqZWN0U2VsZWN0ZWQ9XHU2NWUwXHU5MDA5XHU1YjlhXHU1MTg1XHU1YmI5CitfVUlfU2luZ2xlT2JqZWN0U2VsZWN0ZWQ9XHU5MDA5XHU2MmU5XHU1YmY5XHU4YzYxXHVmZjFhezB9CitfVUlfTXVsdGlPYmplY3RTZWxlY3RlZD1cdTkwMDlcdTYyZTl7MH1cdTViZjlcdThjNjEKKworX1VJX09wZW5FZGl0b3JFcnJvcl9sYWJlbD1cdTYyNTNcdTVmMDBcdTdmMTZcdThmOTFcdTU2NjgKKworX1VJX1dpemFyZF9jYXRlZ29yeT1cdTRmOGJcdTU5ODJFTUZcdTZhMjFcdTU3OGJcdTUyMWJcdTVlZmFcdTU0MTFcdTViZmMKKworX1VJX0NyZWF0ZU1vZGVsRXJyb3JfbWVzc2FnZT1cdTU3MjhcdTY1ODdcdTRlZjZcdTIwMWN7MH1cdTIwMWRcdTRlMmRcdTkwNDdcdTUyMzBcdTc2ODRcdTk1ZWVcdTk4OTgKKworX1VJX0ZkTW9kZWxXaXphcmRfbGFiZWw9RkQgXHU2YTIxXHU1NzhiCitfVUlfRmRNb2RlbFdpemFyZF9kZXNjcmlwdGlvbj1cdTUyMWJcdTVlZmFcdTRlMDBcdTRlMmFcdTY1YjBcdTc2ODRGRFx1NmEyMVx1NTc4YgorCitfVUlfRmRFZGl0b3JfbGFiZWw9RkQgXHU2YTIxXHU1NzhiXHU3ZjE2XHU4ZjkxXHU1NjY4CisKK19VSV9GZEVkaXRvckZpbGVuYW1lRGVmYXVsdEJhc2U9XHU2MjExXHU3Njg0CitfVUlfRmRFZGl0b3JGaWxlbmFtZUV4dGVuc2lvbnM9ZmQKKworX1VJX1dpemFyZF9sYWJlbD1cdTY1YjBcdTVlZmEKKworX1dBUk5fRmlsZW5hbWVFeHRlbnNpb249XHU2NTg3XHU0ZWY2XHU1NDBkXHU1ZmM1XHU5ODdiXHU0ZWU1J3swfSAnJ1x1N2VkM1x1NWMzZQorX1dBUk5fRmlsZW5hbWVFeHRlbnNpb25zPVx1NjU4N1x1NGVmNlx1NTQwZFx1NWZjNVx1OTg3Ylx1NTE3N1x1NjcwOVx1NGVlNVx1NGUwYlx1NjI2OVx1NWM1NVx1NTQwZFx1NGU0Ylx1NGUwMFx1ZmYxYXswfQorCitfVUlfTW9kZWxPYmplY3Q9Jk1vZGVsIE9iamVjdAorX1VJX1hNTEVuY29kaW5nPSZYTUwgRW5jb2RpbmcKK19VSV9YTUxFbmNvZGluZ0Nob2ljZXM9VVRGLTggQVNDSUkgVVRGLTE2IFVURi0xNkJFIFVURi0xNkxFIElTTy04ODU5LTEKK19VSV9XaXphcmRfaW5pdGlhbF9vYmplY3RfZGVzY3JpcHRpb249XHU5MDA5XHU2MmU5XHU1MjFiXHU1ZWZhXHU0ZTAwXHU0ZTJhXHU2YTIxXHU1NzhiXHU1YmY5XHU4YzYxCisKK19VSV9GaWxlQ29uZmxpY3RfbGFiZWw9XHU2NTg3XHU0ZWY2XHU1MWIyXHU3YTgxCitfV0FSTl9GaWxlQ29uZmxpY3Q9XHU2NzA5XHU2NzJhXHU0ZmRkXHU1YjU4XHU3Njg0XHU2NmY0XHU2NTM5XHU0ZTBlXHU3ZjE2XHU4ZjkxXHU1NjY4XHU1OTE2XHU3Njg0XHU2NmY0XHU2NTM5XHU1MWIyXHU3YTgxXHUzMDAyXHU0ZjYwXHU2MGYzXHU2NTNlXHU1ZjAzXHU4ZmQ5XHU0ZTJhXHU3ZjE2XHU4ZjkxXHU1NjY4XHU3Njg0XHU2NmY0XHU2NTM5XHU1NDE3XHVmZjFmCisKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5zb2x2ZXJzLmZkL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3NvbHZlcnMvZmQvcHJlc2VudGF0aW9uL0ZkQWN0aW9uQmFyQ29udHJpYnV0b3IuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5zb2x2ZXJzLmZkL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3NvbHZlcnMvZmQvcHJlc2VudGF0aW9uL0ZkQWN0aW9uQmFyQ29udHJpYnV0b3IuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNTAxMDE2Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLnNvbHZlcnMuZmQvc3JjL29yZy9lY2xpcHNlL3N0ZW0vc29sdmVycy9mZC9wcmVzZW50YXRpb24vRmRBY3Rpb25CYXJDb250cmlidXRvci5qYXZhCkBAIC0wLDAgKzEsNDI3IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uc29sdmVycy5mZC5wcmVzZW50YXRpb247DQorDQorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisgKiBDb3B5cmlnaHQgKGMpIDIwMDkgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuDQorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscw0KKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMA0KKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0DQorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwNCisgKg0KKyAqIENvbnRyaWJ1dG9yczoNCisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uDQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQorDQoraW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7DQoraW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOw0KKw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnVpLnZpZXdlci5JVmlld2VyUHJvdmlkZXI7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LmRvbWFpbi5FZGl0aW5nRG9tYWluOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5kb21haW4uSUVkaXRpbmdEb21haW5Qcm92aWRlcjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkuYWN0aW9uLkNvbnRyb2xBY3Rpb247DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmFjdGlvbi5DcmVhdGVDaGlsZEFjdGlvbjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkuYWN0aW9uLkNyZWF0ZVNpYmxpbmdBY3Rpb247DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmFjdGlvbi5FZGl0aW5nRG9tYWluQWN0aW9uQmFyQ29udHJpYnV0b3I7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmFjdGlvbi5Mb2FkUmVzb3VyY2VBY3Rpb247DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmFjdGlvbi5WYWxpZGF0ZUFjdGlvbjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLkFjdGlvbjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLkFjdGlvbkNvbnRyaWJ1dGlvbkl0ZW07DQoraW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JQWN0aW9uOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSUNvbnRyaWJ1dGlvbkl0ZW07DQoraW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JQ29udHJpYnV0aW9uTWFuYWdlcjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklNZW51TGlzdGVuZXI7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JTWVudU1hbmFnZXI7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JVG9vbEJhck1hbmFnZXI7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5NZW51TWFuYWdlcjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLlNlcGFyYXRvcjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLlN1YkNvbnRyaWJ1dGlvbkl0ZW07DQoraW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvbjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb25Qcm92aWRlcjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU3RydWN0dXJlZFNlbGVjdGlvbjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5TZWxlY3Rpb25DaGFuZ2VkRXZlbnQ7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuVmlld2VyOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5JRWRpdG9yUGFydDsNCitpbXBvcnQgb3JnLmVjbGlwc2UudWkuUGFydEluaXRFeGNlcHRpb247DQorDQorLyoqDQorICogVGhpcyBpcyB0aGUgYWN0aW9uIGJhciBjb250cmlidXRvciBmb3IgdGhlIEZkIG1vZGVsIGVkaXRvci4NCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKyAqIEBnZW5lcmF0ZWQNCisgKi8NCitwdWJsaWMgY2xhc3MgRmRBY3Rpb25CYXJDb250cmlidXRvcg0KKwlleHRlbmRzIEVkaXRpbmdEb21haW5BY3Rpb25CYXJDb250cmlidXRvcg0KKwlpbXBsZW1lbnRzIElTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIgew0KKwkvKioNCisJICogVGhpcyBrZWVwcyB0cmFjayBvZiB0aGUgYWN0aXZlIGVkaXRvci4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCBJRWRpdG9yUGFydCBhY3RpdmVFZGl0b3JQYXJ0Ow0KKw0KKwkvKioNCisJICogVGhpcyBrZWVwcyB0cmFjayBvZiB0aGUgY3VycmVudCBzZWxlY3Rpb24gcHJvdmlkZXIuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgSVNlbGVjdGlvblByb3ZpZGVyIHNlbGVjdGlvblByb3ZpZGVyOw0KKw0KKwkvKioNCisJICogVGhpcyBhY3Rpb24gb3BlbnMgdGhlIFByb3BlcnRpZXMgdmlldy4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCBJQWN0aW9uIHNob3dQcm9wZXJ0aWVzVmlld0FjdGlvbiA9DQorCQluZXcgQWN0aW9uKEZkRWRpdG9yUGx1Z2luLklOU1RBTkNFLmdldFN0cmluZygiX1VJX1Nob3dQcm9wZXJ0aWVzVmlld19tZW51X2l0ZW0iKSkgew0KKwkJCUBPdmVycmlkZQ0KKwkJCXB1YmxpYyB2b2lkIHJ1bigpIHsNCisJCQkJdHJ5IHsNCisJCQkJCWdldFBhZ2UoKS5zaG93Vmlldygib3JnLmVjbGlwc2UudWkudmlld3MuUHJvcGVydHlTaGVldCIpOw0KKwkJCQl9DQorCQkJCWNhdGNoIChQYXJ0SW5pdEV4Y2VwdGlvbiBleGNlcHRpb24pIHsNCisJCQkJCUZkRWRpdG9yUGx1Z2luLklOU1RBTkNFLmxvZyhleGNlcHRpb24pOw0KKwkJCQl9DQorCQkJfQ0KKwkJfTsNCisNCisJLyoqDQorCSAqIFRoaXMgYWN0aW9uIHJlZnJlc2hlcyB0aGUgdmlld2VyIG9mIHRoZSBjdXJyZW50IGVkaXRvciBpZiB0aGUgZWRpdG9yDQorCSAqIGltcGxlbWVudHMge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5jb21tb24udWkudmlld2VyLklWaWV3ZXJQcm92aWRlcn0uDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgSUFjdGlvbiByZWZyZXNoVmlld2VyQWN0aW9uID0NCisJCW5ldyBBY3Rpb24oRmRFZGl0b3JQbHVnaW4uSU5TVEFOQ0UuZ2V0U3RyaW5nKCJfVUlfUmVmcmVzaFZpZXdlcl9tZW51X2l0ZW0iKSkgew0KKwkJCUBPdmVycmlkZQ0KKwkJCXB1YmxpYyBib29sZWFuIGlzRW5hYmxlZCgpIHsNCisJCQkJcmV0dXJuIGFjdGl2ZUVkaXRvclBhcnQgaW5zdGFuY2VvZiBJVmlld2VyUHJvdmlkZXI7DQorCQkJfQ0KKw0KKwkJCUBPdmVycmlkZQ0KKwkJCXB1YmxpYyB2b2lkIHJ1bigpIHsNCisJCQkJaWYgKGFjdGl2ZUVkaXRvclBhcnQgaW5zdGFuY2VvZiBJVmlld2VyUHJvdmlkZXIpIHsNCisJCQkJCVZpZXdlciB2aWV3ZXIgPSAoKElWaWV3ZXJQcm92aWRlcilhY3RpdmVFZGl0b3JQYXJ0KS5nZXRWaWV3ZXIoKTsNCisJCQkJCWlmICh2aWV3ZXIgIT0gbnVsbCkgew0KKwkJCQkJCXZpZXdlci5yZWZyZXNoKCk7DQorCQkJCQl9DQorCQkJCX0NCisJCQl9DQorCQl9Ow0KKw0KKwkvKioNCisJICogVGhpcyB3aWxsIGNvbnRhaW4gb25lIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5hY3Rpb24uQ3JlYXRlQ2hpbGRBY3Rpb259IGNvcnJlc3BvbmRpbmcgdG8gZWFjaCBkZXNjcmlwdG9yDQorCSAqIGdlbmVyYXRlZCBmb3IgdGhlIGN1cnJlbnQgc2VsZWN0aW9uIGJ5IHRoZSBpdGVtIHByb3ZpZGVyLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIENvbGxlY3Rpb248SUFjdGlvbj4gY3JlYXRlQ2hpbGRBY3Rpb25zOw0KKw0KKwkvKioNCisJICogVGhpcyBpcyB0aGUgbWVudSBtYW5hZ2VyIGludG8gd2hpY2ggbWVudSBjb250cmlidXRpb24gaXRlbXMgc2hvdWxkIGJlIGFkZGVkIGZvciBDcmVhdGVDaGlsZCBhY3Rpb25zLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIElNZW51TWFuYWdlciBjcmVhdGVDaGlsZE1lbnVNYW5hZ2VyOw0KKw0KKwkvKioNCisJICogVGhpcyB3aWxsIGNvbnRhaW4gb25lIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5hY3Rpb24uQ3JlYXRlU2libGluZ0FjdGlvbn0gY29ycmVzcG9uZGluZyB0byBlYWNoIGRlc2NyaXB0b3INCisJICogZ2VuZXJhdGVkIGZvciB0aGUgY3VycmVudCBzZWxlY3Rpb24gYnkgdGhlIGl0ZW0gcHJvdmlkZXIuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgQ29sbGVjdGlvbjxJQWN0aW9uPiBjcmVhdGVTaWJsaW5nQWN0aW9uczsNCisNCisJLyoqDQorCSAqIFRoaXMgaXMgdGhlIG1lbnUgbWFuYWdlciBpbnRvIHdoaWNoIG1lbnUgY29udHJpYnV0aW9uIGl0ZW1zIHNob3VsZCBiZSBhZGRlZCBmb3IgQ3JlYXRlU2libGluZyBhY3Rpb25zLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIElNZW51TWFuYWdlciBjcmVhdGVTaWJsaW5nTWVudU1hbmFnZXI7DQorDQorCS8qKg0KKwkgKiBUaGlzIGNyZWF0ZXMgYW4gaW5zdGFuY2Ugb2YgdGhlIGNvbnRyaWJ1dG9yLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIEZkQWN0aW9uQmFyQ29udHJpYnV0b3IoKSB7DQorCQlzdXBlcihBRERJVElPTlNfTEFTVF9TVFlMRSk7DQorCQlsb2FkUmVzb3VyY2VBY3Rpb24gPSBuZXcgTG9hZFJlc291cmNlQWN0aW9uKCk7DQorCQl2YWxpZGF0ZUFjdGlvbiA9IG5ldyBWYWxpZGF0ZUFjdGlvbigpOw0KKwkJY29udHJvbEFjdGlvbiA9IG5ldyBDb250cm9sQWN0aW9uKCk7DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgYWRkcyBTZXBhcmF0b3JzIGZvciBlZGl0b3IgYWRkaXRpb25zIHRvIHRoZSB0b29sIGJhci4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCUBPdmVycmlkZQ0KKwlwdWJsaWMgdm9pZCBjb250cmlidXRlVG9Ub29sQmFyKElUb29sQmFyTWFuYWdlciB0b29sQmFyTWFuYWdlcikgew0KKwkJdG9vbEJhck1hbmFnZXIuYWRkKG5ldyBTZXBhcmF0b3IoImZkLXNldHRpbmdzIikpOw0KKwkJdG9vbEJhck1hbmFnZXIuYWRkKG5ldyBTZXBhcmF0b3IoImZkLWFkZGl0aW9ucyIpKTsNCisJfQ0KKw0KKwkvKioNCisJICogVGhpcyBhZGRzIHRvIHRoZSBtZW51IGJhciBhIG1lbnUgYW5kIHNvbWUgc2VwYXJhdG9ycyBmb3IgZWRpdG9yIGFkZGl0aW9ucywNCisJICogYXMgd2VsbCBhcyB0aGUgc3ViLW1lbnVzIGZvciBvYmplY3QgY3JlYXRpb24gaXRlbXMuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlAT3ZlcnJpZGUNCisJcHVibGljIHZvaWQgY29udHJpYnV0ZVRvTWVudShJTWVudU1hbmFnZXIgbWVudU1hbmFnZXIpIHsNCisJCXN1cGVyLmNvbnRyaWJ1dGVUb01lbnUobWVudU1hbmFnZXIpOw0KKw0KKwkJSU1lbnVNYW5hZ2VyIHN1Ym1lbnVNYW5hZ2VyID0gbmV3IE1lbnVNYW5hZ2VyKEZkRWRpdG9yUGx1Z2luLklOU1RBTkNFLmdldFN0cmluZygiX1VJX0ZkRWRpdG9yX21lbnUiKSwgIm9yZy5lY2xpcHNlLnN0ZW0uc29sdmVycy5mZE1lbnVJRCIpOw0KKwkJbWVudU1hbmFnZXIuaW5zZXJ0QWZ0ZXIoImFkZGl0aW9ucyIsIHN1Ym1lbnVNYW5hZ2VyKTsNCisJCXN1Ym1lbnVNYW5hZ2VyLmFkZChuZXcgU2VwYXJhdG9yKCJzZXR0aW5ncyIpKTsNCisJCXN1Ym1lbnVNYW5hZ2VyLmFkZChuZXcgU2VwYXJhdG9yKCJhY3Rpb25zIikpOw0KKwkJc3VibWVudU1hbmFnZXIuYWRkKG5ldyBTZXBhcmF0b3IoImFkZGl0aW9ucyIpKTsNCisJCXN1Ym1lbnVNYW5hZ2VyLmFkZChuZXcgU2VwYXJhdG9yKCJhZGRpdGlvbnMtZW5kIikpOw0KKw0KKwkJLy8gUHJlcGFyZSBmb3IgQ3JlYXRlQ2hpbGQgaXRlbSBhZGRpdGlvbiBvciByZW1vdmFsLg0KKwkJLy8NCisJCWNyZWF0ZUNoaWxkTWVudU1hbmFnZXIgPSBuZXcgTWVudU1hbmFnZXIoRmRFZGl0b3JQbHVnaW4uSU5TVEFOQ0UuZ2V0U3RyaW5nKCJfVUlfQ3JlYXRlQ2hpbGRfbWVudV9pdGVtIikpOw0KKwkJc3VibWVudU1hbmFnZXIuaW5zZXJ0QmVmb3JlKCJhZGRpdGlvbnMiLCBjcmVhdGVDaGlsZE1lbnVNYW5hZ2VyKTsNCisNCisJCS8vIFByZXBhcmUgZm9yIENyZWF0ZVNpYmxpbmcgaXRlbSBhZGRpdGlvbiBvciByZW1vdmFsLg0KKwkJLy8NCisJCWNyZWF0ZVNpYmxpbmdNZW51TWFuYWdlciA9IG5ldyBNZW51TWFuYWdlcihGZEVkaXRvclBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoIl9VSV9DcmVhdGVTaWJsaW5nX21lbnVfaXRlbSIpKTsNCisJCXN1Ym1lbnVNYW5hZ2VyLmluc2VydEJlZm9yZSgiYWRkaXRpb25zIiwgY3JlYXRlU2libGluZ01lbnVNYW5hZ2VyKTsNCisNCisJCS8vIEZvcmNlIGFuIHVwZGF0ZSBiZWNhdXNlIEVjbGlwc2UgaGlkZXMgZW1wdHkgbWVudXMgbm93Lg0KKwkJLy8NCisJCXN1Ym1lbnVNYW5hZ2VyLmFkZE1lbnVMaXN0ZW5lcg0KKwkJCShuZXcgSU1lbnVMaXN0ZW5lcigpIHsNCisJCQkJIHB1YmxpYyB2b2lkIG1lbnVBYm91dFRvU2hvdyhJTWVudU1hbmFnZXIgbWVudU1hbmFnZXIpIHsNCisJCQkJCSBtZW51TWFuYWdlci51cGRhdGVBbGwodHJ1ZSk7DQorCQkJCSB9DQorCQkJIH0pOw0KKw0KKwkJYWRkR2xvYmFsQWN0aW9ucyhzdWJtZW51TWFuYWdlcik7DQorCX0NCisNCisJLyoqDQorCSAqIFdoZW4gdGhlIGFjdGl2ZSBlZGl0b3IgY2hhbmdlcywgdGhpcyByZW1lbWJlcnMgdGhlIGNoYW5nZSBhbmQgcmVnaXN0ZXJzIHdpdGggaXQgYXMgYSBzZWxlY3Rpb24gcHJvdmlkZXIuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlAT3ZlcnJpZGUNCisJcHVibGljIHZvaWQgc2V0QWN0aXZlRWRpdG9yKElFZGl0b3JQYXJ0IHBhcnQpIHsNCisJCXN1cGVyLnNldEFjdGl2ZUVkaXRvcihwYXJ0KTsNCisJCWFjdGl2ZUVkaXRvclBhcnQgPSBwYXJ0Ow0KKw0KKwkJLy8gU3dpdGNoIHRvIHRoZSBuZXcgc2VsZWN0aW9uIHByb3ZpZGVyLg0KKwkJLy8NCisJCWlmIChzZWxlY3Rpb25Qcm92aWRlciAhPSBudWxsKSB7DQorCQkJc2VsZWN0aW9uUHJvdmlkZXIucmVtb3ZlU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyKHRoaXMpOw0KKwkJfQ0KKwkJaWYgKHBhcnQgPT0gbnVsbCkgew0KKwkJCXNlbGVjdGlvblByb3ZpZGVyID0gbnVsbDsNCisJCX0NCisJCWVsc2Ugew0KKwkJCXNlbGVjdGlvblByb3ZpZGVyID0gcGFydC5nZXRTaXRlKCkuZ2V0U2VsZWN0aW9uUHJvdmlkZXIoKTsNCisJCQlzZWxlY3Rpb25Qcm92aWRlci5hZGRTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIodGhpcyk7DQorDQorCQkJLy8gRmFrZSBhIHNlbGVjdGlvbiBjaGFuZ2VkIGV2ZW50IHRvIHVwZGF0ZSB0aGUgbWVudXMuDQorCQkJLy8NCisJCQlpZiAoc2VsZWN0aW9uUHJvdmlkZXIuZ2V0U2VsZWN0aW9uKCkgIT0gbnVsbCkgew0KKwkJCQlzZWxlY3Rpb25DaGFuZ2VkKG5ldyBTZWxlY3Rpb25DaGFuZ2VkRXZlbnQoc2VsZWN0aW9uUHJvdmlkZXIsIHNlbGVjdGlvblByb3ZpZGVyLmdldFNlbGVjdGlvbigpKSk7DQorCQkJfQ0KKwkJfQ0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIGltcGxlbWVudHMge0BsaW5rIG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcn0sDQorCSAqIGhhbmRsaW5nIHtAbGluayBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlNlbGVjdGlvbkNoYW5nZWRFdmVudH1zIGJ5IHF1ZXJ5aW5nIGZvciB0aGUgY2hpbGRyZW4gYW5kIHNpYmxpbmdzDQorCSAqIHRoYXQgY2FuIGJlIGFkZGVkIHRvIHRoZSBzZWxlY3RlZCBvYmplY3QgYW5kIHVwZGF0aW5nIHRoZSBtZW51cyBhY2NvcmRpbmdseS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyB2b2lkIHNlbGVjdGlvbkNoYW5nZWQoU2VsZWN0aW9uQ2hhbmdlZEV2ZW50IGV2ZW50KSB7DQorCQkvLyBSZW1vdmUgYW55IG1lbnUgaXRlbXMgZm9yIG9sZCBzZWxlY3Rpb24uDQorCQkvLw0KKwkJaWYgKGNyZWF0ZUNoaWxkTWVudU1hbmFnZXIgIT0gbnVsbCkgew0KKwkJCWRlcG9wdWxhdGVNYW5hZ2VyKGNyZWF0ZUNoaWxkTWVudU1hbmFnZXIsIGNyZWF0ZUNoaWxkQWN0aW9ucyk7DQorCQl9DQorCQlpZiAoY3JlYXRlU2libGluZ01lbnVNYW5hZ2VyICE9IG51bGwpIHsNCisJCQlkZXBvcHVsYXRlTWFuYWdlcihjcmVhdGVTaWJsaW5nTWVudU1hbmFnZXIsIGNyZWF0ZVNpYmxpbmdBY3Rpb25zKTsNCisJCX0NCisNCisJCS8vIFF1ZXJ5IHRoZSBuZXcgc2VsZWN0aW9uIGZvciBhcHByb3ByaWF0ZSBuZXcgY2hpbGQvc2libGluZyBkZXNjcmlwdG9ycw0KKwkJLy8NCisJCUNvbGxlY3Rpb248Pz4gbmV3Q2hpbGREZXNjcmlwdG9ycyA9IG51bGw7DQorCQlDb2xsZWN0aW9uPD8+IG5ld1NpYmxpbmdEZXNjcmlwdG9ycyA9IG51bGw7DQorDQorCQlJU2VsZWN0aW9uIHNlbGVjdGlvbiA9IGV2ZW50LmdldFNlbGVjdGlvbigpOw0KKwkJaWYgKHNlbGVjdGlvbiBpbnN0YW5jZW9mIElTdHJ1Y3R1cmVkU2VsZWN0aW9uICYmICgoSVN0cnVjdHVyZWRTZWxlY3Rpb24pc2VsZWN0aW9uKS5zaXplKCkgPT0gMSkgew0KKwkJCU9iamVjdCBvYmplY3QgPSAoKElTdHJ1Y3R1cmVkU2VsZWN0aW9uKXNlbGVjdGlvbikuZ2V0Rmlyc3RFbGVtZW50KCk7DQorDQorCQkJRWRpdGluZ0RvbWFpbiBkb21haW4gPSAoKElFZGl0aW5nRG9tYWluUHJvdmlkZXIpYWN0aXZlRWRpdG9yUGFydCkuZ2V0RWRpdGluZ0RvbWFpbigpOw0KKw0KKwkJCW5ld0NoaWxkRGVzY3JpcHRvcnMgPSBkb21haW4uZ2V0TmV3Q2hpbGREZXNjcmlwdG9ycyhvYmplY3QsIG51bGwpOw0KKwkJCW5ld1NpYmxpbmdEZXNjcmlwdG9ycyA9IGRvbWFpbi5nZXROZXdDaGlsZERlc2NyaXB0b3JzKG51bGwsIG9iamVjdCk7DQorCQl9DQorDQorCQkvLyBHZW5lcmF0ZSBhY3Rpb25zIGZvciBzZWxlY3Rpb247IHBvcHVsYXRlIGFuZCByZWRyYXcgdGhlIG1lbnVzLg0KKwkJLy8NCisJCWNyZWF0ZUNoaWxkQWN0aW9ucyA9IGdlbmVyYXRlQ3JlYXRlQ2hpbGRBY3Rpb25zKG5ld0NoaWxkRGVzY3JpcHRvcnMsIHNlbGVjdGlvbik7DQorCQljcmVhdGVTaWJsaW5nQWN0aW9ucyA9IGdlbmVyYXRlQ3JlYXRlU2libGluZ0FjdGlvbnMobmV3U2libGluZ0Rlc2NyaXB0b3JzLCBzZWxlY3Rpb24pOw0KKw0KKwkJaWYgKGNyZWF0ZUNoaWxkTWVudU1hbmFnZXIgIT0gbnVsbCkgew0KKwkJCXBvcHVsYXRlTWFuYWdlcihjcmVhdGVDaGlsZE1lbnVNYW5hZ2VyLCBjcmVhdGVDaGlsZEFjdGlvbnMsIG51bGwpOw0KKwkJCWNyZWF0ZUNoaWxkTWVudU1hbmFnZXIudXBkYXRlKHRydWUpOw0KKwkJfQ0KKwkJaWYgKGNyZWF0ZVNpYmxpbmdNZW51TWFuYWdlciAhPSBudWxsKSB7DQorCQkJcG9wdWxhdGVNYW5hZ2VyKGNyZWF0ZVNpYmxpbmdNZW51TWFuYWdlciwgY3JlYXRlU2libGluZ0FjdGlvbnMsIG51bGwpOw0KKwkJCWNyZWF0ZVNpYmxpbmdNZW51TWFuYWdlci51cGRhdGUodHJ1ZSk7DQorCQl9DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgZ2VuZXJhdGVzIGEge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmFjdGlvbi5DcmVhdGVDaGlsZEFjdGlvbn0gZm9yIGVhY2ggb2JqZWN0IGluIDxjb2RlPmRlc2NyaXB0b3JzPC9jb2RlPiwNCisJICogYW5kIHJldHVybnMgdGhlIGNvbGxlY3Rpb24gb2YgdGhlc2UgYWN0aW9ucy4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCBDb2xsZWN0aW9uPElBY3Rpb24+IGdlbmVyYXRlQ3JlYXRlQ2hpbGRBY3Rpb25zKENvbGxlY3Rpb248Pz4gZGVzY3JpcHRvcnMsIElTZWxlY3Rpb24gc2VsZWN0aW9uKSB7DQorCQlDb2xsZWN0aW9uPElBY3Rpb24+IGFjdGlvbnMgPSBuZXcgQXJyYXlMaXN0PElBY3Rpb24+KCk7DQorCQlpZiAoZGVzY3JpcHRvcnMgIT0gbnVsbCkgew0KKwkJCWZvciAoT2JqZWN0IGRlc2NyaXB0b3IgOiBkZXNjcmlwdG9ycykgew0KKwkJCQlhY3Rpb25zLmFkZChuZXcgQ3JlYXRlQ2hpbGRBY3Rpb24oYWN0aXZlRWRpdG9yUGFydCwgc2VsZWN0aW9uLCBkZXNjcmlwdG9yKSk7DQorCQkJfQ0KKwkJfQ0KKwkJcmV0dXJuIGFjdGlvbnM7DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgZ2VuZXJhdGVzIGEge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmFjdGlvbi5DcmVhdGVTaWJsaW5nQWN0aW9ufSBmb3IgZWFjaCBvYmplY3QgaW4gPGNvZGU+ZGVzY3JpcHRvcnM8L2NvZGU+LA0KKwkgKiBhbmQgcmV0dXJucyB0aGUgY29sbGVjdGlvbiBvZiB0aGVzZSBhY3Rpb25zLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIENvbGxlY3Rpb248SUFjdGlvbj4gZ2VuZXJhdGVDcmVhdGVTaWJsaW5nQWN0aW9ucyhDb2xsZWN0aW9uPD8+IGRlc2NyaXB0b3JzLCBJU2VsZWN0aW9uIHNlbGVjdGlvbikgew0KKwkJQ29sbGVjdGlvbjxJQWN0aW9uPiBhY3Rpb25zID0gbmV3IEFycmF5TGlzdDxJQWN0aW9uPigpOw0KKwkJaWYgKGRlc2NyaXB0b3JzICE9IG51bGwpIHsNCisJCQlmb3IgKE9iamVjdCBkZXNjcmlwdG9yIDogZGVzY3JpcHRvcnMpIHsNCisJCQkJYWN0aW9ucy5hZGQobmV3IENyZWF0ZVNpYmxpbmdBY3Rpb24oYWN0aXZlRWRpdG9yUGFydCwgc2VsZWN0aW9uLCBkZXNjcmlwdG9yKSk7DQorCQkJfQ0KKwkJfQ0KKwkJcmV0dXJuIGFjdGlvbnM7DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgcG9wdWxhdGVzIHRoZSBzcGVjaWZpZWQgPGNvZGU+bWFuYWdlcjwvY29kZT4gd2l0aCB7QGxpbmsgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLkFjdGlvbkNvbnRyaWJ1dGlvbkl0ZW19cw0KKwkgKiBiYXNlZCBvbiB0aGUge0BsaW5rIG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JQWN0aW9ufXMgY29udGFpbmVkIGluIHRoZSA8Y29kZT5hY3Rpb25zPC9jb2RlPiBjb2xsZWN0aW9uLA0KKwkgKiBieSBpbnNlcnRpbmcgdGhlbSBiZWZvcmUgdGhlIHNwZWNpZmllZCBjb250cmlidXRpb24gaXRlbSA8Y29kZT5jb250cmlidXRpb25JRDwvY29kZT4uDQorCSAqIElmIDxjb2RlPmNvbnRyaWJ1dGlvbklEPC9jb2RlPiBpcyA8Y29kZT5udWxsPC9jb2RlPiwgdGhleSBhcmUgc2ltcGx5IGFkZGVkLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIHZvaWQgcG9wdWxhdGVNYW5hZ2VyKElDb250cmlidXRpb25NYW5hZ2VyIG1hbmFnZXIsIENvbGxlY3Rpb248PyBleHRlbmRzIElBY3Rpb24+IGFjdGlvbnMsIFN0cmluZyBjb250cmlidXRpb25JRCkgew0KKwkJaWYgKGFjdGlvbnMgIT0gbnVsbCkgew0KKwkJCWZvciAoSUFjdGlvbiBhY3Rpb24gOiBhY3Rpb25zKSB7DQorCQkJCWlmIChjb250cmlidXRpb25JRCAhPSBudWxsKSB7DQorCQkJCQltYW5hZ2VyLmluc2VydEJlZm9yZShjb250cmlidXRpb25JRCwgYWN0aW9uKTsNCisJCQkJfQ0KKwkJCQllbHNlIHsNCisJCQkJCW1hbmFnZXIuYWRkKGFjdGlvbik7DQorCQkJCX0NCisJCQl9DQorCQl9DQorCX0NCisJCQ0KKwkvKioNCisJICogVGhpcyByZW1vdmVzIGZyb20gdGhlIHNwZWNpZmllZCA8Y29kZT5tYW5hZ2VyPC9jb2RlPiBhbGwge0BsaW5rIG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5BY3Rpb25Db250cmlidXRpb25JdGVtfXMNCisJICogYmFzZWQgb24gdGhlIHtAbGluayBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSUFjdGlvbn1zIGNvbnRhaW5lZCBpbiB0aGUgPGNvZGU+YWN0aW9uczwvY29kZT4gY29sbGVjdGlvbi4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCB2b2lkIGRlcG9wdWxhdGVNYW5hZ2VyKElDb250cmlidXRpb25NYW5hZ2VyIG1hbmFnZXIsIENvbGxlY3Rpb248PyBleHRlbmRzIElBY3Rpb24+IGFjdGlvbnMpIHsNCisJCWlmIChhY3Rpb25zICE9IG51bGwpIHsNCisJCQlJQ29udHJpYnV0aW9uSXRlbVtdIGl0ZW1zID0gbWFuYWdlci5nZXRJdGVtcygpOw0KKwkJCWZvciAoaW50IGkgPSAwOyBpIDwgaXRlbXMubGVuZ3RoOyBpKyspIHsNCisJCQkJLy8gTG9vayBpbnRvIFN1YkNvbnRyaWJ1dGlvbkl0ZW1zDQorCQkJCS8vDQorCQkJCUlDb250cmlidXRpb25JdGVtIGNvbnRyaWJ1dGlvbkl0ZW0gPSBpdGVtc1tpXTsNCisJCQkJd2hpbGUgKGNvbnRyaWJ1dGlvbkl0ZW0gaW5zdGFuY2VvZiBTdWJDb250cmlidXRpb25JdGVtKSB7DQorCQkJCQljb250cmlidXRpb25JdGVtID0gKChTdWJDb250cmlidXRpb25JdGVtKWNvbnRyaWJ1dGlvbkl0ZW0pLmdldElubmVySXRlbSgpOw0KKwkJCQl9DQorDQorCQkJCS8vIERlbGV0ZSB0aGUgQWN0aW9uQ29udHJpYnV0aW9uSXRlbXMgd2l0aCBtYXRjaGluZyBhY3Rpb24uDQorCQkJCS8vDQorCQkJCWlmIChjb250cmlidXRpb25JdGVtIGluc3RhbmNlb2YgQWN0aW9uQ29udHJpYnV0aW9uSXRlbSkgew0KKwkJCQkJSUFjdGlvbiBhY3Rpb24gPSAoKEFjdGlvbkNvbnRyaWJ1dGlvbkl0ZW0pY29udHJpYnV0aW9uSXRlbSkuZ2V0QWN0aW9uKCk7DQorCQkJCQlpZiAoYWN0aW9ucy5jb250YWlucyhhY3Rpb24pKSB7DQorCQkJCQkJbWFuYWdlci5yZW1vdmUoY29udHJpYnV0aW9uSXRlbSk7DQorCQkJCQl9DQorCQkJCX0NCisJCQl9DQorCQl9DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgcG9wdWxhdGVzIHRoZSBwb3AtdXAgbWVudSBiZWZvcmUgaXQgYXBwZWFycy4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCUBPdmVycmlkZQ0KKwlwdWJsaWMgdm9pZCBtZW51QWJvdXRUb1Nob3coSU1lbnVNYW5hZ2VyIG1lbnVNYW5hZ2VyKSB7DQorCQlzdXBlci5tZW51QWJvdXRUb1Nob3cobWVudU1hbmFnZXIpOw0KKwkJTWVudU1hbmFnZXIgc3VibWVudU1hbmFnZXIgPSBudWxsOw0KKw0KKwkJc3VibWVudU1hbmFnZXIgPSBuZXcgTWVudU1hbmFnZXIoRmRFZGl0b3JQbHVnaW4uSU5TVEFOQ0UuZ2V0U3RyaW5nKCJfVUlfQ3JlYXRlQ2hpbGRfbWVudV9pdGVtIikpOw0KKwkJcG9wdWxhdGVNYW5hZ2VyKHN1Ym1lbnVNYW5hZ2VyLCBjcmVhdGVDaGlsZEFjdGlvbnMsIG51bGwpOw0KKwkJbWVudU1hbmFnZXIuaW5zZXJ0QmVmb3JlKCJlZGl0Iiwgc3VibWVudU1hbmFnZXIpOw0KKw0KKwkJc3VibWVudU1hbmFnZXIgPSBuZXcgTWVudU1hbmFnZXIoRmRFZGl0b3JQbHVnaW4uSU5TVEFOQ0UuZ2V0U3RyaW5nKCJfVUlfQ3JlYXRlU2libGluZ19tZW51X2l0ZW0iKSk7DQorCQlwb3B1bGF0ZU1hbmFnZXIoc3VibWVudU1hbmFnZXIsIGNyZWF0ZVNpYmxpbmdBY3Rpb25zLCBudWxsKTsNCisJCW1lbnVNYW5hZ2VyLmluc2VydEJlZm9yZSgiZWRpdCIsIHN1Ym1lbnVNYW5hZ2VyKTsNCisJfQ0KKw0KKwkvKioNCisJICogVGhpcyBpbnNlcnRzIGdsb2JhbCBhY3Rpb25zIGJlZm9yZSB0aGUgImFkZGl0aW9ucy1lbmQiIHNlcGFyYXRvci4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCUBPdmVycmlkZQ0KKwlwcm90ZWN0ZWQgdm9pZCBhZGRHbG9iYWxBY3Rpb25zKElNZW51TWFuYWdlciBtZW51TWFuYWdlcikgew0KKwkJbWVudU1hbmFnZXIuaW5zZXJ0QWZ0ZXIoImFkZGl0aW9ucy1lbmQiLCBuZXcgU2VwYXJhdG9yKCJ1aS1hY3Rpb25zIikpOw0KKwkJbWVudU1hbmFnZXIuaW5zZXJ0QWZ0ZXIoInVpLWFjdGlvbnMiLCBzaG93UHJvcGVydGllc1ZpZXdBY3Rpb24pOw0KKw0KKwkJcmVmcmVzaFZpZXdlckFjdGlvbi5zZXRFbmFibGVkKHJlZnJlc2hWaWV3ZXJBY3Rpb24uaXNFbmFibGVkKCkpOwkJDQorCQltZW51TWFuYWdlci5pbnNlcnRBZnRlcigidWktYWN0aW9ucyIsIHJlZnJlc2hWaWV3ZXJBY3Rpb24pOw0KKw0KKwkJc3VwZXIuYWRkR2xvYmFsQWN0aW9ucyhtZW51TWFuYWdlcik7DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgZW5zdXJlcyB0aGF0IGEgZGVsZXRlIGFjdGlvbiB3aWxsIGNsZWFuIHVwIGFsbCByZWZlcmVuY2VzIHRvIGRlbGV0ZWQgb2JqZWN0cy4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCUBPdmVycmlkZQ0KKwlwcm90ZWN0ZWQgYm9vbGVhbiByZW1vdmVBbGxSZWZlcmVuY2VzT25EZWxldGUoKSB7DQorCQlyZXR1cm4gdHJ1ZTsNCisJfQ0KKw0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkuc29sdmVycy5mZC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9zb2x2ZXJzL2ZkL3ByZXNlbnRhdGlvbi9GZEVkaXRvci5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLnNvbHZlcnMuZmQvc3JjL29yZy9lY2xpcHNlL3N0ZW0vc29sdmVycy9mZC9wcmVzZW50YXRpb24vRmRFZGl0b3IuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ODFiM2E5Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLnNvbHZlcnMuZmQvc3JjL29yZy9lY2xpcHNlL3N0ZW0vc29sdmVycy9mZC9wcmVzZW50YXRpb24vRmRFZGl0b3IuamF2YQpAQCAtMCwwICsxLDE4MDUgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5zb2x2ZXJzLmZkLnByZXNlbnRhdGlvbjsNCisNCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyAqIENvcHlyaWdodCAoYykgMjAwOSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4NCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzDQorICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wDQorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQNCisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbA0KKyAqDQorICogQ29udHJpYnV0b3JzOg0KKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24NCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCisNCisNCitpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsNCitpbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbTsNCitpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsNCitpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247DQoraW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uczsNCitpbXBvcnQgamF2YS51dGlsLkV2ZW50T2JqZWN0Ow0KK2ltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsNCitpbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOw0KK2ltcG9ydCBqYXZhLnV0aWwuTGlua2VkSGFzaE1hcDsNCitpbXBvcnQgamF2YS51dGlsLkxpc3Q7DQoraW1wb3J0IGphdmEudXRpbC5NYXA7DQorDQoraW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklGaWxlOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JTWFya2VyOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUmVzb3VyY2U7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklSZXNvdXJjZUNoYW5nZUV2ZW50Ow0KK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUmVzb3VyY2VDaGFuZ2VMaXN0ZW5lcjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVJlc291cmNlRGVsdGE7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklSZXNvdXJjZURlbHRhVmlzaXRvcjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuUmVzb3VyY2VzUGx1Z2luOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQ29yZUV4Y2VwdGlvbjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQYXRoOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVByb2dyZXNzTW9uaXRvcjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLk51bGxQcm9ncmVzc01vbml0b3I7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24uY29tbWFuZC5CYXNpY0NvbW1hbmRTdGFjazsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5jb21tYW5kLkNvbW1hbmQ7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24uY29tbWFuZC5Db21tYW5kU3RhY2s7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24uY29tbWFuZC5Db21tYW5kU3RhY2tMaXN0ZW5lcjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuQWRhcHRlckZhY3Rvcnk7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51aS5NYXJrZXJIZWxwZXI7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udWkuVmlld2VyUGFuZTsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51aS5lZGl0b3IuUHJvYmxlbUVkaXRvclBhcnQ7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udWkudmlld2VyLklWaWV3ZXJQcm92aWRlcjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLkJhc2ljRGlhZ25vc3RpYzsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLkRpYWdub3N0aWM7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5VUkk7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0Ow0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRVZhbGlkYXRvcjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnByb3ZpZGVyLkVjb3JlSXRlbVByb3ZpZGVyQWRhcHRlckZhY3Rvcnk7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5yZXNvdXJjZS5SZXNvdXJjZTsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnJlc291cmNlLlJlc291cmNlU2V0Ow0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUudXRpbC5FQ29udGVudEFkYXB0ZXI7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS51dGlsLkVjb3JlVXRpbDsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQuZG9tYWluLkFkYXB0ZXJGYWN0b3J5RWRpdGluZ0RvbWFpbjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQuZG9tYWluLkVkaXRpbmdEb21haW47DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LmRvbWFpbi5JRWRpdGluZ0RvbWFpblByb3ZpZGVyOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5BZGFwdGVyRmFjdG9yeUl0ZW1EZWxlZ2F0b3I7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkNvbXBvc2VkQWRhcHRlckZhY3Rvcnk7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLlJlZmxlY3RpdmVJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeTsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIucmVzb3VyY2UuUmVzb3VyY2VJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeTsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkuYWN0aW9uLkVkaXRpbmdEb21haW5BY3Rpb25CYXJDb250cmlidXRvcjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkuY2VsbGVkaXRvci5BZGFwdGVyRmFjdG9yeVRyZWVFZGl0b3I7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmRuZC5FZGl0aW5nRG9tYWluVmlld2VyRHJvcEFkYXB0ZXI7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmRuZC5Mb2NhbFRyYW5zZmVyOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5kbmQuVmlld2VyRHJhZ0FkYXB0ZXI7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLnByb3ZpZGVyLkFkYXB0ZXJGYWN0b3J5Q29udGVudFByb3ZpZGVyOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5wcm92aWRlci5BZGFwdGVyRmFjdG9yeUxhYmVsUHJvdmlkZXI7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLnByb3ZpZGVyLlVud3JhcHBpbmdTZWxlY3Rpb25Qcm92aWRlcjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkudXRpbC5FZGl0VUlNYXJrZXJIZWxwZXI7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLnV0aWwuRWRpdFVJVXRpbDsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkudmlldy5FeHRlbmRlZFByb3BlcnR5U2hlZXRQYWdlOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSU1lbnVMaXN0ZW5lcjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklNZW51TWFuYWdlcjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklTdGF0dXNMaW5lTWFuYWdlcjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklUb29sQmFyTWFuYWdlcjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLk1lbnVNYW5hZ2VyOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uU2VwYXJhdG9yOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5kaWFsb2dzLk1lc3NhZ2VEaWFsb2c7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmRpYWxvZ3MuUHJvZ3Jlc3NNb25pdG9yRGlhbG9nOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLkNvbHVtbldlaWdodERhdGE7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvbjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb25Qcm92aWRlcjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU3RydWN0dXJlZFNlbGVjdGlvbjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5MaXN0Vmlld2VyOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlNlbGVjdGlvbkNoYW5nZWRFdmVudDsNCitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5TdHJ1Y3R1cmVkU2VsZWN0aW9uOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlN0cnVjdHVyZWRWaWV3ZXI7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuVGFibGVMYXlvdXQ7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuVGFibGVWaWV3ZXI7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuVHJlZVZpZXdlcjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5WaWV3ZXI7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24ucHJvdmlkZXIuQ29tbW9uSXRlbVByb3ZpZGVyQWRhcHRlckZhY3Rvcnk7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5wcm92aWRlci5HcmFwaEl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5Ow0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwucHJvdmlkZXIuTW9kZWxJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeTsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLnByb3ZpZGVyLk1vZGlmaWVySXRlbVByb3ZpZGVyQWRhcHRlckZhY3Rvcnk7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zY2VuYXJpby5wcm92aWRlci5TY2VuYXJpb0l0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5Ow0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2VxdWVuY2VyLnByb3ZpZGVyLlNlcXVlbmNlckl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5Ow0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc29sdmVyLnByb3ZpZGVyLlNvbHZlckl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5Ow0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnNvbHZlcnMuZmQucHJvdmlkZXIuRmRJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeTsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LlNXVDsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmN1c3RvbS5DVGFiRm9sZGVyOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZG5kLkRORDsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmRuZC5UcmFuc2ZlcjsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5Db250cm9sQWRhcHRlcjsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5Db250cm9sRXZlbnQ7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ncmFwaGljcy5Qb2ludDsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5GaWxsTGF5b3V0Ow0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGU7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLk1lbnU7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlRhYmxlOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5UYWJsZUNvbHVtbjsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuVHJlZTsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuVHJlZUNvbHVtbjsNCitpbXBvcnQgb3JnLmVjbGlwc2UudWkuSUFjdGlvbkJhcnM7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnVpLklFZGl0b3JJbnB1dDsNCitpbXBvcnQgb3JnLmVjbGlwc2UudWkuSUVkaXRvclBhcnQ7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnVpLklFZGl0b3JTaXRlOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5JUGFydExpc3RlbmVyOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5JV29ya2JlbmNoUGFydDsNCitpbXBvcnQgb3JnLmVjbGlwc2UudWkuUGFydEluaXRFeGNlcHRpb247DQoraW1wb3J0IG9yZy5lY2xpcHNlLnVpLmFjdGlvbnMuV29ya3NwYWNlTW9kaWZ5T3BlcmF0aW9uOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5kaWFsb2dzLlNhdmVBc0RpYWxvZzsNCitpbXBvcnQgb3JnLmVjbGlwc2UudWkuaWRlLklHb3RvTWFya2VyOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5wYXJ0LkZpbGVFZGl0b3JJbnB1dDsNCitpbXBvcnQgb3JnLmVjbGlwc2UudWkucGFydC5NdWx0aVBhZ2VFZGl0b3JQYXJ0Ow0KK2ltcG9ydCBvcmcuZWNsaXBzZS51aS52aWV3cy5jb250ZW50b3V0bGluZS5Db250ZW50T3V0bGluZTsNCitpbXBvcnQgb3JnLmVjbGlwc2UudWkudmlld3MuY29udGVudG91dGxpbmUuQ29udGVudE91dGxpbmVQYWdlOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS51aS52aWV3cy5jb250ZW50b3V0bGluZS5JQ29udGVudE91dGxpbmVQYWdlOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS51aS52aWV3cy5wcm9wZXJ0aWVzLklQcm9wZXJ0eVNoZWV0UGFnZTsNCitpbXBvcnQgb3JnLmVjbGlwc2UudWkudmlld3MucHJvcGVydGllcy5Qcm9wZXJ0eVNoZWV0Ow0KK2ltcG9ydCBvcmcuZWNsaXBzZS51aS52aWV3cy5wcm9wZXJ0aWVzLlByb3BlcnR5U2hlZXRQYWdlOw0KKw0KKw0KKy8qKg0KKyAqIFRoaXMgaXMgYW4gZXhhbXBsZSBvZiBhIEZkIG1vZGVsIGVkaXRvci4NCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKyAqIEBnZW5lcmF0ZWQNCisgKi8NCitAU3VwcHJlc3NXYXJuaW5ncygidW51c2VkIikgDQorcHVibGljIGNsYXNzIEZkRWRpdG9yDQorCWV4dGVuZHMgTXVsdGlQYWdlRWRpdG9yUGFydA0KKwlpbXBsZW1lbnRzIElFZGl0aW5nRG9tYWluUHJvdmlkZXIsIElTZWxlY3Rpb25Qcm92aWRlciwgSU1lbnVMaXN0ZW5lciwgSVZpZXdlclByb3ZpZGVyLCBJR290b01hcmtlciB7DQorCS8qKg0KKwkgKiBUaGlzIGtlZXBzIHRyYWNrIG9mIHRoZSBlZGl0aW5nIGRvbWFpbiB0aGF0IGlzIHVzZWQgdG8gdHJhY2sgYWxsIGNoYW5nZXMgdG8gdGhlIG1vZGVsLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIEFkYXB0ZXJGYWN0b3J5RWRpdGluZ0RvbWFpbiBlZGl0aW5nRG9tYWluOw0KKw0KKwkvKioNCisJICogVGhpcyBpcyB0aGUgb25lIGFkYXB0ZXIgZmFjdG9yeSB1c2VkIGZvciBwcm92aWRpbmcgdmlld3Mgb2YgdGhlIG1vZGVsLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIENvbXBvc2VkQWRhcHRlckZhY3RvcnkgYWRhcHRlckZhY3Rvcnk7DQorDQorCS8qKg0KKwkgKiBUaGlzIGlzIHRoZSBjb250ZW50IG91dGxpbmUgcGFnZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCBJQ29udGVudE91dGxpbmVQYWdlIGNvbnRlbnRPdXRsaW5lUGFnZTsNCisNCisJLyoqDQorCSAqIFRoaXMgaXMgYSBrbHVkZ2UuLi4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCBJU3RhdHVzTGluZU1hbmFnZXIgY29udGVudE91dGxpbmVTdGF0dXNMaW5lTWFuYWdlcjsNCisNCisJLyoqDQorCSAqIFRoaXMgaXMgdGhlIGNvbnRlbnQgb3V0bGluZSBwYWdlJ3Mgdmlld2VyLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIFRyZWVWaWV3ZXIgY29udGVudE91dGxpbmVWaWV3ZXI7DQorDQorCS8qKg0KKwkgKiBUaGlzIGlzIHRoZSBwcm9wZXJ0eSBzaGVldCBwYWdlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIFByb3BlcnR5U2hlZXRQYWdlIHByb3BlcnR5U2hlZXRQYWdlOw0KKw0KKwkvKioNCisJICogVGhpcyBpcyB0aGUgdmlld2VyIHRoYXQgc2hhZG93cyB0aGUgc2VsZWN0aW9uIGluIHRoZSBjb250ZW50IG91dGxpbmUuDQorCSAqIFRoZSBwYXJlbnQgcmVsYXRpb24gbXVzdCBiZSBjb3JyZWN0bHkgZGVmaW5lZCBmb3IgdGhpcyB0byB3b3JrLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIFRyZWVWaWV3ZXIgc2VsZWN0aW9uVmlld2VyOw0KKw0KKwkvKioNCisJICogVGhpcyBpbnZlcnRzIHRoZSByb2xsIG9mIHBhcmVudCBhbmQgY2hpbGQgaW4gdGhlIGNvbnRlbnQgcHJvdmlkZXIgYW5kIHNob3cgcGFyZW50cyBhcyBhIHRyZWUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgVHJlZVZpZXdlciBwYXJlbnRWaWV3ZXI7DQorDQorCS8qKg0KKwkgKiBUaGlzIHNob3dzIGhvdyBhIHRyZWUgdmlldyB3b3Jrcy4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCBUcmVlVmlld2VyIHRyZWVWaWV3ZXI7DQorDQorCS8qKg0KKwkgKiBUaGlzIHNob3dzIGhvdyBhIGxpc3QgdmlldyB3b3Jrcy4NCisJICogQSBsaXN0IHZpZXdlciBkb2Vzbid0IHN1cHBvcnQgaWNvbnMuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgTGlzdFZpZXdlciBsaXN0Vmlld2VyOw0KKw0KKwkvKioNCisJICogVGhpcyBzaG93cyBob3cgYSB0YWJsZSB2aWV3IHdvcmtzLg0KKwkgKiBBIHRhYmxlIGNhbiBiZSB1c2VkIGFzIGEgbGlzdCB3aXRoIGljb25zLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIFRhYmxlVmlld2VyIHRhYmxlVmlld2VyOw0KKw0KKwkvKioNCisJICogVGhpcyBzaG93cyBob3cgYSB0cmVlIHZpZXcgd2l0aCBjb2x1bW5zIHdvcmtzLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIFRyZWVWaWV3ZXIgdHJlZVZpZXdlcldpdGhDb2x1bW5zOw0KKw0KKwkvKioNCisJICogVGhpcyBrZWVwcyB0cmFjayBvZiB0aGUgYWN0aXZlIHZpZXdlciBwYW5lLCBpbiB0aGUgYm9vay4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCBWaWV3ZXJQYW5lIGN1cnJlbnRWaWV3ZXJQYW5lOw0KKw0KKwkvKioNCisJICogVGhpcyBrZWVwcyB0cmFjayBvZiB0aGUgYWN0aXZlIGNvbnRlbnQgdmlld2VyLCB3aGljaCBtYXkgYmUgZWl0aGVyIG9uZSBvZiB0aGUgdmlld2VycyBpbiB0aGUgcGFnZXMgb3IgdGhlIGNvbnRlbnQgb3V0bGluZSB2aWV3ZXIuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgVmlld2VyIGN1cnJlbnRWaWV3ZXI7DQorDQorCS8qKg0KKwkgKiBUaGlzIGxpc3RlbnMgdG8gd2hpY2ggZXZlciB2aWV3ZXIgaXMgYWN0aXZlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIElTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIgc2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyOw0KKw0KKwkvKioNCisJICogVGhpcyBrZWVwcyB0cmFjayBvZiBhbGwgdGhlIHtAbGluayBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXJ9cyB0aGF0IGFyZSBsaXN0ZW5pbmcgdG8gdGhpcyBlZGl0b3IuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgQ29sbGVjdGlvbjxJU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyPiBzZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXJzID0gbmV3IEFycmF5TGlzdDxJU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyPigpOw0KKw0KKwkvKioNCisJICogVGhpcyBrZWVwcyB0cmFjayBvZiB0aGUgc2VsZWN0aW9uIG9mIHRoZSBlZGl0b3IgYXMgYSB3aG9sZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCBJU2VsZWN0aW9uIGVkaXRvclNlbGVjdGlvbiA9IFN0cnVjdHVyZWRTZWxlY3Rpb24uRU1QVFk7DQorDQorCS8qKg0KKwkgKiBUaGUgTWFya2VySGVscGVyIGlzIHJlc3BvbnNpYmxlIGZvciBjcmVhdGluZyB3b3Jrc3BhY2UgcmVzb3VyY2UgbWFya2VycyBwcmVzZW50ZWQNCisJICogaW4gRWNsaXBzZSdzIFByb2JsZW1zIFZpZXcuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgTWFya2VySGVscGVyIG1hcmtlckhlbHBlciA9IG5ldyBFZGl0VUlNYXJrZXJIZWxwZXIoKTsNCisNCisJLyoqDQorCSAqIFRoaXMgbGlzdGVucyBmb3Igd2hlbiB0aGUgb3V0bGluZSBiZWNvbWVzIGFjdGl2ZQ0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIElQYXJ0TGlzdGVuZXIgcGFydExpc3RlbmVyID0NCisJCW5ldyBJUGFydExpc3RlbmVyKCkgew0KKwkJCXB1YmxpYyB2b2lkIHBhcnRBY3RpdmF0ZWQoSVdvcmtiZW5jaFBhcnQgcCkgew0KKwkJCQlpZiAocCBpbnN0YW5jZW9mIENvbnRlbnRPdXRsaW5lKSB7DQorCQkJCQlpZiAoKChDb250ZW50T3V0bGluZSlwKS5nZXRDdXJyZW50UGFnZSgpID09IGNvbnRlbnRPdXRsaW5lUGFnZSkgew0KKwkJCQkJCWdldEFjdGlvbkJhckNvbnRyaWJ1dG9yKCkuc2V0QWN0aXZlRWRpdG9yKEZkRWRpdG9yLnRoaXMpOw0KKw0KKwkJCQkJCXNldEN1cnJlbnRWaWV3ZXIoY29udGVudE91dGxpbmVWaWV3ZXIpOw0KKwkJCQkJfQ0KKwkJCQl9DQorCQkJCWVsc2UgaWYgKHAgaW5zdGFuY2VvZiBQcm9wZXJ0eVNoZWV0KSB7DQorCQkJCQlpZiAoKChQcm9wZXJ0eVNoZWV0KXApLmdldEN1cnJlbnRQYWdlKCkgPT0gcHJvcGVydHlTaGVldFBhZ2UpIHsNCisJCQkJCQlnZXRBY3Rpb25CYXJDb250cmlidXRvcigpLnNldEFjdGl2ZUVkaXRvcihGZEVkaXRvci50aGlzKTsNCisJCQkJCQloYW5kbGVBY3RpdmF0ZSgpOw0KKwkJCQkJfQ0KKwkJCQl9DQorCQkJCWVsc2UgaWYgKHAgPT0gRmRFZGl0b3IudGhpcykgew0KKwkJCQkJaGFuZGxlQWN0aXZhdGUoKTsNCisJCQkJfQ0KKwkJCX0NCisJCQlwdWJsaWMgdm9pZCBwYXJ0QnJvdWdodFRvVG9wKElXb3JrYmVuY2hQYXJ0IHApIHsNCisJCQkJLy8gSWdub3JlLg0KKwkJCX0NCisJCQlwdWJsaWMgdm9pZCBwYXJ0Q2xvc2VkKElXb3JrYmVuY2hQYXJ0IHApIHsNCisJCQkJLy8gSWdub3JlLg0KKwkJCX0NCisJCQlwdWJsaWMgdm9pZCBwYXJ0RGVhY3RpdmF0ZWQoSVdvcmtiZW5jaFBhcnQgcCkgew0KKwkJCQkvLyBJZ25vcmUuDQorCQkJfQ0KKwkJCXB1YmxpYyB2b2lkIHBhcnRPcGVuZWQoSVdvcmtiZW5jaFBhcnQgcCkgew0KKwkJCQkvLyBJZ25vcmUuDQorCQkJfQ0KKwkJfTsNCisNCisJLyoqDQorCSAqIFJlc291cmNlcyB0aGF0IGhhdmUgYmVlbiByZW1vdmVkIHNpbmNlIGxhc3QgYWN0aXZhdGlvbi4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCBDb2xsZWN0aW9uPFJlc291cmNlPiByZW1vdmVkUmVzb3VyY2VzID0gbmV3IEFycmF5TGlzdDxSZXNvdXJjZT4oKTsNCisNCisJLyoqDQorCSAqIFJlc291cmNlcyB0aGF0IGhhdmUgYmVlbiBjaGFuZ2VkIHNpbmNlIGxhc3QgYWN0aXZhdGlvbi4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCBDb2xsZWN0aW9uPFJlc291cmNlPiBjaGFuZ2VkUmVzb3VyY2VzID0gbmV3IEFycmF5TGlzdDxSZXNvdXJjZT4oKTsNCisNCisJLyoqDQorCSAqIFJlc291cmNlcyB0aGF0IGhhdmUgYmVlbiBzYXZlZC4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCBDb2xsZWN0aW9uPFJlc291cmNlPiBzYXZlZFJlc291cmNlcyA9IG5ldyBBcnJheUxpc3Q8UmVzb3VyY2U+KCk7DQorDQorCS8qKg0KKwkgKiBNYXAgdG8gc3RvcmUgdGhlIGRpYWdub3N0aWMgYXNzb2NpYXRlZCB3aXRoIGEgcmVzb3VyY2UuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgTWFwPFJlc291cmNlLCBEaWFnbm9zdGljPiByZXNvdXJjZVRvRGlhZ25vc3RpY01hcCA9IG5ldyBMaW5rZWRIYXNoTWFwPFJlc291cmNlLCBEaWFnbm9zdGljPigpOw0KKw0KKwkvKioNCisJICogQ29udHJvbHMgd2hldGhlciB0aGUgcHJvYmxlbSBpbmRpY2F0aW9uIHNob3VsZCBiZSB1cGRhdGVkLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIGJvb2xlYW4gdXBkYXRlUHJvYmxlbUluZGljYXRpb24gPSB0cnVlOw0KKw0KKwkvKioNCisJICogQWRhcHRlciB1c2VkIHRvIHVwZGF0ZSB0aGUgcHJvYmxlbSBpbmRpY2F0aW9uIHdoZW4gcmVzb3VyY2VzIGFyZSBkZW1hbmRlZCBsb2FkZWQuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgRUNvbnRlbnRBZGFwdGVyIHByb2JsZW1JbmRpY2F0aW9uQWRhcHRlciA9IA0KKwkJbmV3IEVDb250ZW50QWRhcHRlcigpIHsNCisJCQlAT3ZlcnJpZGUNCisJCQlwdWJsaWMgdm9pZCBub3RpZnlDaGFuZ2VkKE5vdGlmaWNhdGlvbiBub3RpZmljYXRpb24pIHsNCisJCQkJaWYgKG5vdGlmaWNhdGlvbi5nZXROb3RpZmllcigpIGluc3RhbmNlb2YgUmVzb3VyY2UpIHsNCisJCQkJCXN3aXRjaCAobm90aWZpY2F0aW9uLmdldEZlYXR1cmVJRChSZXNvdXJjZS5jbGFzcykpIHsNCisJCQkJCQljYXNlIFJlc291cmNlLlJFU09VUkNFX19JU19MT0FERUQ6DQorCQkJCQkJY2FzZSBSZXNvdXJjZS5SRVNPVVJDRV9fRVJST1JTOg0KKwkJCQkJCWNhc2UgUmVzb3VyY2UuUkVTT1VSQ0VfX1dBUk5JTkdTOiB7DQorCQkJCQkJCVJlc291cmNlIHJlc291cmNlID0gKFJlc291cmNlKW5vdGlmaWNhdGlvbi5nZXROb3RpZmllcigpOw0KKwkJCQkJCQlEaWFnbm9zdGljIGRpYWdub3N0aWMgPSBhbmFseXplUmVzb3VyY2VQcm9ibGVtcyhyZXNvdXJjZSwgbnVsbCk7DQorCQkJCQkJCWlmIChkaWFnbm9zdGljLmdldFNldmVyaXR5KCkgIT0gRGlhZ25vc3RpYy5PSykgew0KKwkJCQkJCQkJcmVzb3VyY2VUb0RpYWdub3N0aWNNYXAucHV0KHJlc291cmNlLCBkaWFnbm9zdGljKTsNCisJCQkJCQkJfQ0KKwkJCQkJCQllbHNlIHsNCisJCQkJCQkJCXJlc291cmNlVG9EaWFnbm9zdGljTWFwLnJlbW92ZShyZXNvdXJjZSk7DQorCQkJCQkJCX0NCisNCisJCQkJCQkJaWYgKHVwZGF0ZVByb2JsZW1JbmRpY2F0aW9uKSB7DQorCQkJCQkJCQlnZXRTaXRlKCkuZ2V0U2hlbGwoKS5nZXREaXNwbGF5KCkuYXN5bmNFeGVjDQorCQkJCQkJCQkJKG5ldyBSdW5uYWJsZSgpIHsNCisJCQkJCQkJCQkJIHB1YmxpYyB2b2lkIHJ1bigpIHsNCisJCQkJCQkJCQkJCSB1cGRhdGVQcm9ibGVtSW5kaWNhdGlvbigpOw0KKwkJCQkJCQkJCQkgfQ0KKwkJCQkJCQkJCSB9KTsNCisJCQkJCQkJfQ0KKwkJCQkJCQlicmVhazsNCisJCQkJCQl9DQorCQkJCQl9DQorCQkJCX0NCisJCQkJZWxzZSB7DQorCQkJCQlzdXBlci5ub3RpZnlDaGFuZ2VkKG5vdGlmaWNhdGlvbik7DQorCQkJCX0NCisJCQl9DQorDQorCQkJQE92ZXJyaWRlDQorCQkJcHJvdGVjdGVkIHZvaWQgc2V0VGFyZ2V0KFJlc291cmNlIHRhcmdldCkgew0KKwkJCQliYXNpY1NldFRhcmdldCh0YXJnZXQpOw0KKwkJCX0NCisNCisJCQlAT3ZlcnJpZGUNCisJCQlwcm90ZWN0ZWQgdm9pZCB1bnNldFRhcmdldChSZXNvdXJjZSB0YXJnZXQpIHsNCisJCQkJYmFzaWNVbnNldFRhcmdldCh0YXJnZXQpOw0KKwkJCX0NCisJCX07DQorDQorCS8qKg0KKwkgKiBUaGlzIGxpc3RlbnMgZm9yIHdvcmtzcGFjZSBjaGFuZ2VzLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIElSZXNvdXJjZUNoYW5nZUxpc3RlbmVyIHJlc291cmNlQ2hhbmdlTGlzdGVuZXIgPQ0KKwkJbmV3IElSZXNvdXJjZUNoYW5nZUxpc3RlbmVyKCkgew0KKwkJCXB1YmxpYyB2b2lkIHJlc291cmNlQ2hhbmdlZChJUmVzb3VyY2VDaGFuZ2VFdmVudCBldmVudCkgew0KKwkJCQlJUmVzb3VyY2VEZWx0YSBkZWx0YSA9IGV2ZW50LmdldERlbHRhKCk7DQorCQkJCXRyeSB7DQorCQkJCQljbGFzcyBSZXNvdXJjZURlbHRhVmlzaXRvciBpbXBsZW1lbnRzIElSZXNvdXJjZURlbHRhVmlzaXRvciB7DQorCQkJCQkJcHJvdGVjdGVkIFJlc291cmNlU2V0IHJlc291cmNlU2V0ID0gZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpOw0KKwkJCQkJCXByb3RlY3RlZCBDb2xsZWN0aW9uPFJlc291cmNlPiBjaGFuZ2VkUmVzb3VyY2VzID0gbmV3IEFycmF5TGlzdDxSZXNvdXJjZT4oKTsNCisJCQkJCQlwcm90ZWN0ZWQgQ29sbGVjdGlvbjxSZXNvdXJjZT4gcmVtb3ZlZFJlc291cmNlcyA9IG5ldyBBcnJheUxpc3Q8UmVzb3VyY2U+KCk7DQorDQorCQkJCQkJcHVibGljIGJvb2xlYW4gdmlzaXQoSVJlc291cmNlRGVsdGEgZGVsdGEpIHsNCisJCQkJCQkJaWYgKGRlbHRhLmdldFJlc291cmNlKCkuZ2V0VHlwZSgpID09IElSZXNvdXJjZS5GSUxFKSB7DQorCQkJCQkJCQlpZiAoZGVsdGEuZ2V0S2luZCgpID09IElSZXNvdXJjZURlbHRhLlJFTU9WRUQgfHwNCisJCQkJCQkJCSAgICBkZWx0YS5nZXRLaW5kKCkgPT0gSVJlc291cmNlRGVsdGEuQ0hBTkdFRCAmJiBkZWx0YS5nZXRGbGFncygpICE9IElSZXNvdXJjZURlbHRhLk1BUktFUlMpIHsNCisJCQkJCQkJCQlSZXNvdXJjZSByZXNvdXJjZSA9IHJlc291cmNlU2V0LmdldFJlc291cmNlKFVSSS5jcmVhdGVVUkkoZGVsdGEuZ2V0RnVsbFBhdGgoKS50b1N0cmluZygpKSwgZmFsc2UpOw0KKwkJCQkJCQkJCWlmIChyZXNvdXJjZSAhPSBudWxsKSB7DQorCQkJCQkJCQkJCWlmIChkZWx0YS5nZXRLaW5kKCkgPT0gSVJlc291cmNlRGVsdGEuUkVNT1ZFRCkgew0KKwkJCQkJCQkJCQkJcmVtb3ZlZFJlc291cmNlcy5hZGQocmVzb3VyY2UpOw0KKwkJCQkJCQkJCQl9DQorCQkJCQkJCQkJCWVsc2UgaWYgKCFzYXZlZFJlc291cmNlcy5yZW1vdmUocmVzb3VyY2UpKSB7DQorCQkJCQkJCQkJCQljaGFuZ2VkUmVzb3VyY2VzLmFkZChyZXNvdXJjZSk7DQorCQkJCQkJCQkJCX0NCisJCQkJCQkJCQl9DQorCQkJCQkJCQl9DQorCQkJCQkJCX0NCisNCisJCQkJCQkJcmV0dXJuIHRydWU7DQorCQkJCQkJfQ0KKw0KKwkJCQkJCXB1YmxpYyBDb2xsZWN0aW9uPFJlc291cmNlPiBnZXRDaGFuZ2VkUmVzb3VyY2VzKCkgew0KKwkJCQkJCQlyZXR1cm4gY2hhbmdlZFJlc291cmNlczsNCisJCQkJCQl9DQorDQorCQkJCQkJcHVibGljIENvbGxlY3Rpb248UmVzb3VyY2U+IGdldFJlbW92ZWRSZXNvdXJjZXMoKSB7DQorCQkJCQkJCXJldHVybiByZW1vdmVkUmVzb3VyY2VzOw0KKwkJCQkJCX0NCisJCQkJCX0NCisNCisJCQkJCVJlc291cmNlRGVsdGFWaXNpdG9yIHZpc2l0b3IgPSBuZXcgUmVzb3VyY2VEZWx0YVZpc2l0b3IoKTsNCisJCQkJCWRlbHRhLmFjY2VwdCh2aXNpdG9yKTsNCisNCisJCQkJCWlmICghdmlzaXRvci5nZXRSZW1vdmVkUmVzb3VyY2VzKCkuaXNFbXB0eSgpKSB7DQorCQkJCQkJcmVtb3ZlZFJlc291cmNlcy5hZGRBbGwodmlzaXRvci5nZXRSZW1vdmVkUmVzb3VyY2VzKCkpOw0KKwkJCQkJCWlmICghaXNEaXJ0eSgpKSB7DQorCQkJCQkJCWdldFNpdGUoKS5nZXRTaGVsbCgpLmdldERpc3BsYXkoKS5hc3luY0V4ZWMNCisJCQkJCQkJCShuZXcgUnVubmFibGUoKSB7DQorCQkJCQkJCQkJIHB1YmxpYyB2b2lkIHJ1bigpIHsNCisJCQkJCQkJCQkJIGdldFNpdGUoKS5nZXRQYWdlKCkuY2xvc2VFZGl0b3IoRmRFZGl0b3IudGhpcywgZmFsc2UpOw0KKwkJCQkJCQkJCSB9DQorCQkJCQkJCQkgfSk7DQorCQkJCQkJfQ0KKwkJCQkJfQ0KKw0KKwkJCQkJaWYgKCF2aXNpdG9yLmdldENoYW5nZWRSZXNvdXJjZXMoKS5pc0VtcHR5KCkpIHsNCisJCQkJCQljaGFuZ2VkUmVzb3VyY2VzLmFkZEFsbCh2aXNpdG9yLmdldENoYW5nZWRSZXNvdXJjZXMoKSk7DQorCQkJCQkJaWYgKGdldFNpdGUoKS5nZXRQYWdlKCkuZ2V0QWN0aXZlRWRpdG9yKCkgPT0gRmRFZGl0b3IudGhpcykgew0KKwkJCQkJCQlnZXRTaXRlKCkuZ2V0U2hlbGwoKS5nZXREaXNwbGF5KCkuYXN5bmNFeGVjDQorCQkJCQkJCQkobmV3IFJ1bm5hYmxlKCkgew0KKwkJCQkJCQkJCSBwdWJsaWMgdm9pZCBydW4oKSB7DQorCQkJCQkJCQkJCSBoYW5kbGVBY3RpdmF0ZSgpOw0KKwkJCQkJCQkJCSB9DQorCQkJCQkJCQkgfSk7DQorCQkJCQkJfQ0KKwkJCQkJfQ0KKwkJCQl9DQorCQkJCWNhdGNoIChDb3JlRXhjZXB0aW9uIGV4Y2VwdGlvbikgew0KKwkJCQkJRmRFZGl0b3JQbHVnaW4uSU5TVEFOQ0UubG9nKGV4Y2VwdGlvbik7DQorCQkJCX0NCisJCQl9DQorCQl9Ow0KKw0KKwkvKioNCisJICogSGFuZGxlcyBhY3RpdmF0aW9uIG9mIHRoZSBlZGl0b3Igb3IgaXQncyBhc3NvY2lhdGVkIHZpZXdzLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIHZvaWQgaGFuZGxlQWN0aXZhdGUoKSB7DQorCQkvLyBSZWNvbXB1dGUgdGhlIHJlYWQgb25seSBzdGF0ZS4NCisJCS8vDQorCQlpZiAoZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVRvUmVhZE9ubHlNYXAoKSAhPSBudWxsKSB7DQorCQkgIGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VUb1JlYWRPbmx5TWFwKCkuY2xlYXIoKTsNCisNCisJCSAgLy8gUmVmcmVzaCBhbnkgYWN0aW9ucyB0aGF0IG1heSBiZWNvbWUgZW5hYmxlZCBvciBkaXNhYmxlZC4NCisJCSAgLy8NCisJCSAgc2V0U2VsZWN0aW9uKGdldFNlbGVjdGlvbigpKTsNCisJCX0NCisNCisJCWlmICghcmVtb3ZlZFJlc291cmNlcy5pc0VtcHR5KCkpIHsNCisJCQlpZiAoaGFuZGxlRGlydHlDb25mbGljdCgpKSB7DQorCQkJCWdldFNpdGUoKS5nZXRQYWdlKCkuY2xvc2VFZGl0b3IoRmRFZGl0b3IudGhpcywgZmFsc2UpOw0KKwkJCX0NCisJCQllbHNlIHsNCisJCQkJcmVtb3ZlZFJlc291cmNlcy5jbGVhcigpOw0KKwkJCQljaGFuZ2VkUmVzb3VyY2VzLmNsZWFyKCk7DQorCQkJCXNhdmVkUmVzb3VyY2VzLmNsZWFyKCk7DQorCQkJfQ0KKwkJfQ0KKwkJZWxzZSBpZiAoIWNoYW5nZWRSZXNvdXJjZXMuaXNFbXB0eSgpKSB7DQorCQkJY2hhbmdlZFJlc291cmNlcy5yZW1vdmVBbGwoc2F2ZWRSZXNvdXJjZXMpOw0KKwkJCWhhbmRsZUNoYW5nZWRSZXNvdXJjZXMoKTsNCisJCQljaGFuZ2VkUmVzb3VyY2VzLmNsZWFyKCk7DQorCQkJc2F2ZWRSZXNvdXJjZXMuY2xlYXIoKTsNCisJCX0NCisJfQ0KKw0KKwkvKioNCisJICogSGFuZGxlcyB3aGF0IHRvIGRvIHdpdGggY2hhbmdlZCByZXNvdXJjZXMgb24gYWN0aXZhdGlvbi4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCB2b2lkIGhhbmRsZUNoYW5nZWRSZXNvdXJjZXMoKSB7DQorCQlpZiAoIWNoYW5nZWRSZXNvdXJjZXMuaXNFbXB0eSgpICYmICghaXNEaXJ0eSgpIHx8IGhhbmRsZURpcnR5Q29uZmxpY3QoKSkpIHsNCisJCQlpZiAoaXNEaXJ0eSgpKSB7DQorCQkJCWNoYW5nZWRSZXNvdXJjZXMuYWRkQWxsKGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKS5nZXRSZXNvdXJjZXMoKSk7DQorCQkJfQ0KKwkJCWVkaXRpbmdEb21haW4uZ2V0Q29tbWFuZFN0YWNrKCkuZmx1c2goKTsNCisNCisJCQl1cGRhdGVQcm9ibGVtSW5kaWNhdGlvbiA9IGZhbHNlOw0KKwkJCWZvciAoUmVzb3VyY2UgcmVzb3VyY2UgOiBjaGFuZ2VkUmVzb3VyY2VzKSB7DQorCQkJCWlmIChyZXNvdXJjZS5pc0xvYWRlZCgpKSB7DQorCQkJCQlyZXNvdXJjZS51bmxvYWQoKTsNCisJCQkJCXRyeSB7DQorCQkJCQkJcmVzb3VyY2UubG9hZChDb2xsZWN0aW9ucy5FTVBUWV9NQVApOw0KKwkJCQkJfQ0KKwkJCQkJY2F0Y2ggKElPRXhjZXB0aW9uIGV4Y2VwdGlvbikgew0KKwkJCQkJCWlmICghcmVzb3VyY2VUb0RpYWdub3N0aWNNYXAuY29udGFpbnNLZXkocmVzb3VyY2UpKSB7DQorCQkJCQkJCXJlc291cmNlVG9EaWFnbm9zdGljTWFwLnB1dChyZXNvdXJjZSwgYW5hbHl6ZVJlc291cmNlUHJvYmxlbXMocmVzb3VyY2UsIGV4Y2VwdGlvbikpOw0KKwkJCQkJCX0NCisJCQkJCX0NCisJCQkJfQ0KKwkJCX0NCisNCisJCQlpZiAoQWRhcHRlckZhY3RvcnlFZGl0aW5nRG9tYWluLmlzU3RhbGUoZWRpdG9yU2VsZWN0aW9uKSkgew0KKwkJCQlzZXRTZWxlY3Rpb24oU3RydWN0dXJlZFNlbGVjdGlvbi5FTVBUWSk7DQorCQkJfQ0KKw0KKwkJCXVwZGF0ZVByb2JsZW1JbmRpY2F0aW9uID0gdHJ1ZTsNCisJCQl1cGRhdGVQcm9ibGVtSW5kaWNhdGlvbigpOw0KKwkJfQ0KKwl9DQorICANCisJLyoqDQorCSAqIFVwZGF0ZXMgdGhlIHByb2JsZW1zIGluZGljYXRpb24gd2l0aCB0aGUgaW5mb3JtYXRpb24gZGVzY3JpYmVkIGluIHRoZSBzcGVjaWZpZWQgZGlhZ25vc3RpYy4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCB2b2lkIHVwZGF0ZVByb2JsZW1JbmRpY2F0aW9uKCkgew0KKwkJaWYgKHVwZGF0ZVByb2JsZW1JbmRpY2F0aW9uKSB7DQorCQkJQmFzaWNEaWFnbm9zdGljIGRpYWdub3N0aWMgPQ0KKwkJCQluZXcgQmFzaWNEaWFnbm9zdGljDQorCQkJCQkoRGlhZ25vc3RpYy5PSywNCisJCQkJCSAib3JnLmVjbGlwc2Uuc3RlbS5zb2x2ZXJzLmZkLmVkaXRvciIsDQorCQkJCQkgMCwNCisJCQkJCSBudWxsLA0KKwkJCQkJIG5ldyBPYmplY3QgW10geyBlZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkgfSk7DQorCQkJZm9yIChEaWFnbm9zdGljIGNoaWxkRGlhZ25vc3RpYyA6IHJlc291cmNlVG9EaWFnbm9zdGljTWFwLnZhbHVlcygpKSB7DQorCQkJCWlmIChjaGlsZERpYWdub3N0aWMuZ2V0U2V2ZXJpdHkoKSAhPSBEaWFnbm9zdGljLk9LKSB7DQorCQkJCQlkaWFnbm9zdGljLmFkZChjaGlsZERpYWdub3N0aWMpOw0KKwkJCQl9DQorCQkJfQ0KKw0KKwkJCWludCBsYXN0RWRpdG9yUGFnZSA9IGdldFBhZ2VDb3VudCgpIC0gMTsNCisJCQlpZiAobGFzdEVkaXRvclBhZ2UgPj0gMCAmJiBnZXRFZGl0b3IobGFzdEVkaXRvclBhZ2UpIGluc3RhbmNlb2YgUHJvYmxlbUVkaXRvclBhcnQpIHsNCisJCQkJKChQcm9ibGVtRWRpdG9yUGFydClnZXRFZGl0b3IobGFzdEVkaXRvclBhZ2UpKS5zZXREaWFnbm9zdGljKGRpYWdub3N0aWMpOw0KKwkJCQlpZiAoZGlhZ25vc3RpYy5nZXRTZXZlcml0eSgpICE9IERpYWdub3N0aWMuT0spIHsNCisJCQkJCXNldEFjdGl2ZVBhZ2UobGFzdEVkaXRvclBhZ2UpOw0KKwkJCQl9DQorCQkJfQ0KKwkJCWVsc2UgaWYgKGRpYWdub3N0aWMuZ2V0U2V2ZXJpdHkoKSAhPSBEaWFnbm9zdGljLk9LKSB7DQorCQkJCVByb2JsZW1FZGl0b3JQYXJ0IHByb2JsZW1FZGl0b3JQYXJ0ID0gbmV3IFByb2JsZW1FZGl0b3JQYXJ0KCk7DQorCQkJCXByb2JsZW1FZGl0b3JQYXJ0LnNldERpYWdub3N0aWMoZGlhZ25vc3RpYyk7DQorCQkJCXByb2JsZW1FZGl0b3JQYXJ0LnNldE1hcmtlckhlbHBlcihtYXJrZXJIZWxwZXIpOw0KKwkJCQl0cnkgew0KKwkJCQkJYWRkUGFnZSgrK2xhc3RFZGl0b3JQYWdlLCBwcm9ibGVtRWRpdG9yUGFydCwgZ2V0RWRpdG9ySW5wdXQoKSk7DQorCQkJCQlzZXRQYWdlVGV4dChsYXN0RWRpdG9yUGFnZSwgcHJvYmxlbUVkaXRvclBhcnQuZ2V0UGFydE5hbWUoKSk7DQorCQkJCQlzZXRBY3RpdmVQYWdlKGxhc3RFZGl0b3JQYWdlKTsNCisJCQkJCXNob3dUYWJzKCk7DQorCQkJCX0NCisJCQkJY2F0Y2ggKFBhcnRJbml0RXhjZXB0aW9uIGV4Y2VwdGlvbikgew0KKwkJCQkJRmRFZGl0b3JQbHVnaW4uSU5TVEFOQ0UubG9nKGV4Y2VwdGlvbik7DQorCQkJCX0NCisJCQl9DQorDQorCQkJaWYgKG1hcmtlckhlbHBlci5oYXNNYXJrZXJzKGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKSkpIHsNCisJCQkJbWFya2VySGVscGVyLmRlbGV0ZU1hcmtlcnMoZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpKTsNCisJCQkJaWYgKGRpYWdub3N0aWMuZ2V0U2V2ZXJpdHkoKSAhPSBEaWFnbm9zdGljLk9LKSB7DQorCQkJCQl0cnkgew0KKwkJCQkJCW1hcmtlckhlbHBlci5jcmVhdGVNYXJrZXJzKGRpYWdub3N0aWMpOw0KKwkJCQkJfQ0KKwkJCQkJY2F0Y2ggKENvcmVFeGNlcHRpb24gZXhjZXB0aW9uKSB7DQorCQkJCQkJRmRFZGl0b3JQbHVnaW4uSU5TVEFOQ0UubG9nKGV4Y2VwdGlvbik7DQorCQkJCQl9DQorCQkJCX0NCisJCQl9DQorCQl9DQorCX0NCisNCisJLyoqDQorCSAqIFNob3dzIGEgZGlhbG9nIHRoYXQgYXNrcyBpZiBjb25mbGljdGluZyBjaGFuZ2VzIHNob3VsZCBiZSBkaXNjYXJkZWQuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgYm9vbGVhbiBoYW5kbGVEaXJ0eUNvbmZsaWN0KCkgew0KKwkJcmV0dXJuDQorCQkJTWVzc2FnZURpYWxvZy5vcGVuUXVlc3Rpb24NCisJCQkJKGdldFNpdGUoKS5nZXRTaGVsbCgpLA0KKwkJCQkgZ2V0U3RyaW5nKCJfVUlfRmlsZUNvbmZsaWN0X2xhYmVsIiksDQorCQkJCSBnZXRTdHJpbmcoIl9XQVJOX0ZpbGVDb25mbGljdCIpKTsNCisJfQ0KKw0KKwkvKioNCisJICogVGhpcyBjcmVhdGVzIGEgbW9kZWwgZWRpdG9yLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIEZkRWRpdG9yKCkgew0KKwkJc3VwZXIoKTsNCisJCWluaXRpYWxpemVFZGl0aW5nRG9tYWluKCk7DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgc2V0cyB1cCB0aGUgZWRpdGluZyBkb21haW4gZm9yIHRoZSBtb2RlbCBlZGl0b3IuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgdm9pZCBpbml0aWFsaXplRWRpdGluZ0RvbWFpbigpIHsNCisJCS8vIENyZWF0ZSBhbiBhZGFwdGVyIGZhY3RvcnkgdGhhdCB5aWVsZHMgaXRlbSBwcm92aWRlcnMuDQorCQkvLw0KKwkJYWRhcHRlckZhY3RvcnkgPSBuZXcgQ29tcG9zZWRBZGFwdGVyRmFjdG9yeShDb21wb3NlZEFkYXB0ZXJGYWN0b3J5LkRlc2NyaXB0b3IuUmVnaXN0cnkuSU5TVEFOQ0UpOw0KKw0KKwkJYWRhcHRlckZhY3RvcnkuYWRkQWRhcHRlckZhY3RvcnkobmV3IFJlc291cmNlSXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkoKSk7DQorCQlhZGFwdGVyRmFjdG9yeS5hZGRBZGFwdGVyRmFjdG9yeShuZXcgRmRJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSgpKTsNCisJCWFkYXB0ZXJGYWN0b3J5LmFkZEFkYXB0ZXJGYWN0b3J5KG5ldyBDb21tb25JdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSgpKTsNCisJCWFkYXB0ZXJGYWN0b3J5LmFkZEFkYXB0ZXJGYWN0b3J5KG5ldyBHcmFwaEl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5KCkpOw0KKwkJYWRhcHRlckZhY3RvcnkuYWRkQWRhcHRlckZhY3RvcnkobmV3IE1vZGVsSXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkoKSk7DQorCQlhZGFwdGVyRmFjdG9yeS5hZGRBZGFwdGVyRmFjdG9yeShuZXcgTW9kaWZpZXJJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSgpKTsNCisJCWFkYXB0ZXJGYWN0b3J5LmFkZEFkYXB0ZXJGYWN0b3J5KG5ldyBTY2VuYXJpb0l0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5KCkpOw0KKwkJYWRhcHRlckZhY3RvcnkuYWRkQWRhcHRlckZhY3RvcnkobmV3IFNlcXVlbmNlckl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5KCkpOw0KKwkJYWRhcHRlckZhY3RvcnkuYWRkQWRhcHRlckZhY3RvcnkobmV3IFNvbHZlckl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5KCkpOw0KKwkJYWRhcHRlckZhY3RvcnkuYWRkQWRhcHRlckZhY3RvcnkobmV3IEVjb3JlSXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkoKSk7DQorCQlhZGFwdGVyRmFjdG9yeS5hZGRBZGFwdGVyRmFjdG9yeShuZXcgUmVmbGVjdGl2ZUl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5KCkpOw0KKw0KKwkJLy8gQ3JlYXRlIHRoZSBjb21tYW5kIHN0YWNrIHRoYXQgd2lsbCBub3RpZnkgdGhpcyBlZGl0b3IgYXMgY29tbWFuZHMgYXJlIGV4ZWN1dGVkLg0KKwkJLy8NCisJCUJhc2ljQ29tbWFuZFN0YWNrIGNvbW1hbmRTdGFjayA9IG5ldyBCYXNpY0NvbW1hbmRTdGFjaygpOw0KKw0KKwkJLy8gQWRkIGEgbGlzdGVuZXIgdG8gc2V0IHRoZSBtb3N0IHJlY2VudCBjb21tYW5kJ3MgYWZmZWN0ZWQgb2JqZWN0cyB0byBiZSB0aGUgc2VsZWN0aW9uIG9mIHRoZSB2aWV3ZXIgd2l0aCBmb2N1cy4NCisJCS8vDQorCQljb21tYW5kU3RhY2suYWRkQ29tbWFuZFN0YWNrTGlzdGVuZXINCisJCQkobmV3IENvbW1hbmRTdGFja0xpc3RlbmVyKCkgew0KKwkJCQkgcHVibGljIHZvaWQgY29tbWFuZFN0YWNrQ2hhbmdlZChmaW5hbCBFdmVudE9iamVjdCBldmVudCkgew0KKwkJCQkJIGdldENvbnRhaW5lcigpLmdldERpc3BsYXkoKS5hc3luY0V4ZWMNCisJCQkJCQkgKG5ldyBSdW5uYWJsZSgpIHsNCisJCQkJCQkJICBwdWJsaWMgdm9pZCBydW4oKSB7DQorCQkJCQkJCQkgIGZpcmVQcm9wZXJ0eUNoYW5nZShJRWRpdG9yUGFydC5QUk9QX0RJUlRZKTsNCisNCisJCQkJCQkJCSAgLy8gVHJ5IHRvIHNlbGVjdCB0aGUgYWZmZWN0ZWQgb2JqZWN0cy4NCisJCQkJCQkJCSAgLy8NCisJCQkJCQkJCSAgQ29tbWFuZCBtb3N0UmVjZW50Q29tbWFuZCA9ICgoQ29tbWFuZFN0YWNrKWV2ZW50LmdldFNvdXJjZSgpKS5nZXRNb3N0UmVjZW50Q29tbWFuZCgpOw0KKwkJCQkJCQkJICBpZiAobW9zdFJlY2VudENvbW1hbmQgIT0gbnVsbCkgew0KKwkJCQkJCQkJCSAgc2V0U2VsZWN0aW9uVG9WaWV3ZXIobW9zdFJlY2VudENvbW1hbmQuZ2V0QWZmZWN0ZWRPYmplY3RzKCkpOw0KKwkJCQkJCQkJICB9DQorCQkJCQkJCQkgIGlmIChwcm9wZXJ0eVNoZWV0UGFnZSAhPSBudWxsICYmICFwcm9wZXJ0eVNoZWV0UGFnZS5nZXRDb250cm9sKCkuaXNEaXNwb3NlZCgpKSB7DQorCQkJCQkJCQkJICBwcm9wZXJ0eVNoZWV0UGFnZS5yZWZyZXNoKCk7DQorCQkJCQkJCQkgIH0NCisJCQkJCQkJICB9DQorCQkJCQkJICB9KTsNCisJCQkJIH0NCisJCQkgfSk7DQorDQorCQkvLyBDcmVhdGUgdGhlIGVkaXRpbmcgZG9tYWluIHdpdGggYSBzcGVjaWFsIGNvbW1hbmQgc3RhY2suDQorCQkvLw0KKwkJZWRpdGluZ0RvbWFpbiA9IG5ldyBBZGFwdGVyRmFjdG9yeUVkaXRpbmdEb21haW4oYWRhcHRlckZhY3RvcnksIGNvbW1hbmRTdGFjaywgbmV3IEhhc2hNYXA8UmVzb3VyY2UsIEJvb2xlYW4+KCkpOw0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIGlzIGhlcmUgZm9yIHRoZSBsaXN0ZW5lciB0byBiZSBhYmxlIHRvIGNhbGwgaXQuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwkJCUBPdmVycmlkZQ0KKwlwcm90ZWN0ZWQgdm9pZCBmaXJlUHJvcGVydHlDaGFuZ2UoaW50IGFjdGlvbikgew0KKwkJc3VwZXIuZmlyZVByb3BlcnR5Q2hhbmdlKGFjdGlvbik7DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgc2V0cyB0aGUgc2VsZWN0aW9uIGludG8gd2hpY2hldmVyIHZpZXdlciBpcyBhY3RpdmUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgdm9pZCBzZXRTZWxlY3Rpb25Ub1ZpZXdlcihDb2xsZWN0aW9uPD8+IGNvbGxlY3Rpb24pIHsNCisJCWZpbmFsIENvbGxlY3Rpb248Pz4gdGhlU2VsZWN0aW9uID0gY29sbGVjdGlvbjsNCisJCS8vIE1ha2Ugc3VyZSBpdCdzIG9rYXkuDQorCQkvLw0KKwkJaWYgKHRoZVNlbGVjdGlvbiAhPSBudWxsICYmICF0aGVTZWxlY3Rpb24uaXNFbXB0eSgpKSB7DQorCQkJLy8gSSBkb24ndCBrbm93IGlmIHRoaXMgc2hvdWxkIGJlIHJ1biB0aGlzIGRlZmVycmVkDQorCQkJLy8gYmVjYXVzZSB3ZSBtaWdodCBoYXZlIHRvIGdpdmUgdGhlIGVkaXRvciBhIGNoYW5jZSB0byBwcm9jZXNzIHRoZSB2aWV3ZXIgdXBkYXRlIGV2ZW50cw0KKwkJCS8vIGFuZCBoZW5jZSB0byB1cGRhdGUgdGhlIHZpZXdzIGZpcnN0Lg0KKwkJCS8vDQorCQkJLy8NCisJCQlSdW5uYWJsZSBydW5uYWJsZSA9DQorCQkJCW5ldyBSdW5uYWJsZSgpIHsNCisJCQkJCXB1YmxpYyB2b2lkIHJ1bigpIHsNCisJCQkJCQkvLyBUcnkgdG8gc2VsZWN0IHRoZSBpdGVtcyBpbiB0aGUgY3VycmVudCBjb250ZW50IHZpZXdlciBvZiB0aGUgZWRpdG9yLg0KKwkJCQkJCS8vDQorCQkJCQkJaWYgKGN1cnJlbnRWaWV3ZXIgIT0gbnVsbCkgew0KKwkJCQkJCQljdXJyZW50Vmlld2VyLnNldFNlbGVjdGlvbihuZXcgU3RydWN0dXJlZFNlbGVjdGlvbih0aGVTZWxlY3Rpb24udG9BcnJheSgpKSwgdHJ1ZSk7DQorCQkJCQkJfQ0KKwkJCQkJfQ0KKwkJCQl9Ow0KKwkJCXJ1bm5hYmxlLnJ1bigpOw0KKwkJfQ0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIHJldHVybnMgdGhlIGVkaXRpbmcgZG9tYWluIGFzIHJlcXVpcmVkIGJ5IHRoZSB7QGxpbmsgSUVkaXRpbmdEb21haW5Qcm92aWRlcn0gaW50ZXJmYWNlLg0KKwkgKiBUaGlzIGlzIGltcG9ydGFudCBmb3IgaW1wbGVtZW50aW5nIHRoZSBzdGF0aWMgbWV0aG9kcyBvZiB7QGxpbmsgQWRhcHRlckZhY3RvcnlFZGl0aW5nRG9tYWlufQ0KKwkgKiBhbmQgZm9yIHN1cHBvcnRpbmcge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmFjdGlvbi5Db21tYW5kQWN0aW9ufS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBFZGl0aW5nRG9tYWluIGdldEVkaXRpbmdEb21haW4oKSB7DQorCQlyZXR1cm4gZWRpdGluZ0RvbWFpbjsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBjbGFzcyBSZXZlcnNlQWRhcHRlckZhY3RvcnlDb250ZW50UHJvdmlkZXIgZXh0ZW5kcyBBZGFwdGVyRmFjdG9yeUNvbnRlbnRQcm92aWRlciB7DQorCQkvKioNCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJCSAqIEBnZW5lcmF0ZWQNCisJCSAqLw0KKwkJcHVibGljIFJldmVyc2VBZGFwdGVyRmFjdG9yeUNvbnRlbnRQcm92aWRlcihBZGFwdGVyRmFjdG9yeSBhZGFwdGVyRmFjdG9yeSkgew0KKwkJCXN1cGVyKGFkYXB0ZXJGYWN0b3J5KTsNCisJCX0NCisNCisJCS8qKg0KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkJICogQGdlbmVyYXRlZA0KKwkJICovDQorCQlAT3ZlcnJpZGUNCisJCXB1YmxpYyBPYmplY3QgW10gZ2V0RWxlbWVudHMoT2JqZWN0IG9iamVjdCkgew0KKwkJCU9iamVjdCBwYXJlbnQgPSBzdXBlci5nZXRQYXJlbnQob2JqZWN0KTsNCisJCQlyZXR1cm4gKHBhcmVudCA9PSBudWxsID8gQ29sbGVjdGlvbnMuRU1QVFlfU0VUIDogQ29sbGVjdGlvbnMuc2luZ2xldG9uKHBhcmVudCkpLnRvQXJyYXkoKTsNCisJCX0NCisNCisJCS8qKg0KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkJICogQGdlbmVyYXRlZA0KKwkJICovDQorCQlAT3ZlcnJpZGUNCisJCXB1YmxpYyBPYmplY3QgW10gZ2V0Q2hpbGRyZW4oT2JqZWN0IG9iamVjdCkgew0KKwkJCU9iamVjdCBwYXJlbnQgPSBzdXBlci5nZXRQYXJlbnQob2JqZWN0KTsNCisJCQlyZXR1cm4gKHBhcmVudCA9PSBudWxsID8gQ29sbGVjdGlvbnMuRU1QVFlfU0VUIDogQ29sbGVjdGlvbnMuc2luZ2xldG9uKHBhcmVudCkpLnRvQXJyYXkoKTsNCisJCX0NCisNCisJCS8qKg0KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkJICogQGdlbmVyYXRlZA0KKwkJICovDQorCQlAT3ZlcnJpZGUNCisJCXB1YmxpYyBib29sZWFuIGhhc0NoaWxkcmVuKE9iamVjdCBvYmplY3QpIHsNCisJCQlPYmplY3QgcGFyZW50ID0gc3VwZXIuZ2V0UGFyZW50KG9iamVjdCk7DQorCQkJcmV0dXJuIHBhcmVudCAhPSBudWxsOw0KKwkJfQ0KKw0KKwkJLyoqDQorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCQkgKiBAZ2VuZXJhdGVkDQorCQkgKi8NCisJCUBPdmVycmlkZQ0KKwkJcHVibGljIE9iamVjdCBnZXRQYXJlbnQoT2JqZWN0IG9iamVjdCkgew0KKwkJCXJldHVybiBudWxsOw0KKwkJfQ0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIHZvaWQgc2V0Q3VycmVudFZpZXdlclBhbmUoVmlld2VyUGFuZSB2aWV3ZXJQYW5lKSB7DQorCQlpZiAoY3VycmVudFZpZXdlclBhbmUgIT0gdmlld2VyUGFuZSkgew0KKwkJCWlmIChjdXJyZW50Vmlld2VyUGFuZSAhPSBudWxsKSB7DQorCQkJCWN1cnJlbnRWaWV3ZXJQYW5lLnNob3dGb2N1cyhmYWxzZSk7DQorCQkJfQ0KKwkJCWN1cnJlbnRWaWV3ZXJQYW5lID0gdmlld2VyUGFuZTsNCisJCX0NCisJCXNldEN1cnJlbnRWaWV3ZXIoY3VycmVudFZpZXdlclBhbmUuZ2V0Vmlld2VyKCkpOw0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIG1ha2VzIHN1cmUgdGhhdCBvbmUgY29udGVudCB2aWV3ZXIsIGVpdGhlciBmb3IgdGhlIGN1cnJlbnQgcGFnZSBvciB0aGUgb3V0bGluZSB2aWV3LCBpZiBpdCBoYXMgZm9jdXMsDQorCSAqIGlzIHRoZSBjdXJyZW50IG9uZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyB2b2lkIHNldEN1cnJlbnRWaWV3ZXIoVmlld2VyIHZpZXdlcikgew0KKwkJLy8gSWYgaXQgaXMgY2hhbmdpbmcuLi4NCisJCS8vDQorCQlpZiAoY3VycmVudFZpZXdlciAhPSB2aWV3ZXIpIHsNCisJCQlpZiAoc2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyID09IG51bGwpIHsNCisJCQkJLy8gQ3JlYXRlIHRoZSBsaXN0ZW5lciBvbiBkZW1hbmQuDQorCQkJCS8vDQorCQkJCXNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lciA9DQorCQkJCQluZXcgSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcigpIHsNCisJCQkJCQkvLyBUaGlzIGp1c3Qgbm90aWZpZXMgdGhvc2UgdGhpbmdzIHRoYXQgYXJlIGFmZmVjdGVkIGJ5IHRoZSBzZWN0aW9uLg0KKwkJCQkJCS8vDQorCQkJCQkJcHVibGljIHZvaWQgc2VsZWN0aW9uQ2hhbmdlZChTZWxlY3Rpb25DaGFuZ2VkRXZlbnQgc2VsZWN0aW9uQ2hhbmdlZEV2ZW50KSB7DQorCQkJCQkJCXNldFNlbGVjdGlvbihzZWxlY3Rpb25DaGFuZ2VkRXZlbnQuZ2V0U2VsZWN0aW9uKCkpOw0KKwkJCQkJCX0NCisJCQkJCX07DQorCQkJfQ0KKw0KKwkJCS8vIFN0b3AgbGlzdGVuaW5nIHRvIHRoZSBvbGQgb25lLg0KKwkJCS8vDQorCQkJaWYgKGN1cnJlbnRWaWV3ZXIgIT0gbnVsbCkgew0KKwkJCQljdXJyZW50Vmlld2VyLnJlbW92ZVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcihzZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIpOw0KKwkJCX0NCisNCisJCQkvLyBTdGFydCBsaXN0ZW5pbmcgdG8gdGhlIG5ldyBvbmUuDQorCQkJLy8NCisJCQlpZiAodmlld2VyICE9IG51bGwpIHsNCisJCQkJdmlld2VyLmFkZFNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcihzZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIpOw0KKwkJCX0NCisNCisJCQkvLyBSZW1lbWJlciBpdC4NCisJCQkvLw0KKwkJCWN1cnJlbnRWaWV3ZXIgPSB2aWV3ZXI7DQorDQorCQkJLy8gU2V0IHRoZSBlZGl0b3JzIHNlbGVjdGlvbiBiYXNlZCBvbiB0aGUgY3VycmVudCB2aWV3ZXIncyBzZWxlY3Rpb24uDQorCQkJLy8NCisJCQlzZXRTZWxlY3Rpb24oY3VycmVudFZpZXdlciA9PSBudWxsID8gU3RydWN0dXJlZFNlbGVjdGlvbi5FTVBUWSA6IGN1cnJlbnRWaWV3ZXIuZ2V0U2VsZWN0aW9uKCkpOw0KKwkJfQ0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIHJldHVybnMgdGhlIHZpZXdlciBhcyByZXF1aXJlZCBieSB0aGUge0BsaW5rIElWaWV3ZXJQcm92aWRlcn0gaW50ZXJmYWNlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIFZpZXdlciBnZXRWaWV3ZXIoKSB7DQorCQlyZXR1cm4gY3VycmVudFZpZXdlcjsNCisJfQ0KKw0KKwkvKioNCisJICogVGhpcyBjcmVhdGVzIGEgY29udGV4dCBtZW51IGZvciB0aGUgdmlld2VyIGFuZCBhZGRzIGEgbGlzdGVuZXIgYXMgd2VsbCByZWdpc3RlcmluZyB0aGUgbWVudSBmb3IgZXh0ZW5zaW9uLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIHZvaWQgY3JlYXRlQ29udGV4dE1lbnVGb3IoU3RydWN0dXJlZFZpZXdlciB2aWV3ZXIpIHsNCisJCU1lbnVNYW5hZ2VyIGNvbnRleHRNZW51ID0gbmV3IE1lbnVNYW5hZ2VyKCIjUG9wVXAiKTsNCisJCWNvbnRleHRNZW51LmFkZChuZXcgU2VwYXJhdG9yKCJhZGRpdGlvbnMiKSk7DQorCQljb250ZXh0TWVudS5zZXRSZW1vdmVBbGxXaGVuU2hvd24odHJ1ZSk7DQorCQljb250ZXh0TWVudS5hZGRNZW51TGlzdGVuZXIodGhpcyk7DQorCQlNZW51IG1lbnU9IGNvbnRleHRNZW51LmNyZWF0ZUNvbnRleHRNZW51KHZpZXdlci5nZXRDb250cm9sKCkpOw0KKwkJdmlld2VyLmdldENvbnRyb2woKS5zZXRNZW51KG1lbnUpOw0KKwkJZ2V0U2l0ZSgpLnJlZ2lzdGVyQ29udGV4dE1lbnUoY29udGV4dE1lbnUsIG5ldyBVbndyYXBwaW5nU2VsZWN0aW9uUHJvdmlkZXIodmlld2VyKSk7DQorDQorCQlpbnQgZG5kT3BlcmF0aW9ucyA9IERORC5EUk9QX0NPUFkgfCBETkQuRFJPUF9NT1ZFIHwgRE5ELkRST1BfTElOSzsNCisJCVRyYW5zZmVyW10gdHJhbnNmZXJzID0gbmV3IFRyYW5zZmVyW10geyBMb2NhbFRyYW5zZmVyLmdldEluc3RhbmNlKCkgfTsNCisJCXZpZXdlci5hZGREcmFnU3VwcG9ydChkbmRPcGVyYXRpb25zLCB0cmFuc2ZlcnMsIG5ldyBWaWV3ZXJEcmFnQWRhcHRlcih2aWV3ZXIpKTsNCisJCXZpZXdlci5hZGREcm9wU3VwcG9ydChkbmRPcGVyYXRpb25zLCB0cmFuc2ZlcnMsIG5ldyBFZGl0aW5nRG9tYWluVmlld2VyRHJvcEFkYXB0ZXIoZWRpdGluZ0RvbWFpbiwgdmlld2VyKSk7DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgaXMgdGhlIG1ldGhvZCBjYWxsZWQgdG8gbG9hZCBhIHJlc291cmNlIGludG8gdGhlIGVkaXRpbmcgZG9tYWluJ3MgcmVzb3VyY2Ugc2V0IGJhc2VkIG9uIHRoZSBlZGl0b3IncyBpbnB1dC4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyB2b2lkIGNyZWF0ZU1vZGVsKCkgew0KKwkJVVJJIHJlc291cmNlVVJJID0gRWRpdFVJVXRpbC5nZXRVUkkoZ2V0RWRpdG9ySW5wdXQoKSk7DQorCQlFeGNlcHRpb24gZXhjZXB0aW9uID0gbnVsbDsNCisJCVJlc291cmNlIHJlc291cmNlID0gbnVsbDsNCisJCXRyeSB7DQorCQkJLy8gTG9hZCB0aGUgcmVzb3VyY2UgdGhyb3VnaCB0aGUgZWRpdGluZyBkb21haW4uDQorCQkJLy8NCisJCQlyZXNvdXJjZSA9IGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKS5nZXRSZXNvdXJjZShyZXNvdXJjZVVSSSwgdHJ1ZSk7DQorCQl9DQorCQljYXRjaCAoRXhjZXB0aW9uIGUpIHsNCisJCQlleGNlcHRpb24gPSBlOw0KKwkJCXJlc291cmNlID0gZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpLmdldFJlc291cmNlKHJlc291cmNlVVJJLCBmYWxzZSk7DQorCQl9DQorDQorCQlEaWFnbm9zdGljIGRpYWdub3N0aWMgPSBhbmFseXplUmVzb3VyY2VQcm9ibGVtcyhyZXNvdXJjZSwgZXhjZXB0aW9uKTsNCisJCWlmIChkaWFnbm9zdGljLmdldFNldmVyaXR5KCkgIT0gRGlhZ25vc3RpYy5PSykgew0KKwkJCXJlc291cmNlVG9EaWFnbm9zdGljTWFwLnB1dChyZXNvdXJjZSwgIGFuYWx5emVSZXNvdXJjZVByb2JsZW1zKHJlc291cmNlLCBleGNlcHRpb24pKTsNCisJCX0NCisJCWVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKS5lQWRhcHRlcnMoKS5hZGQocHJvYmxlbUluZGljYXRpb25BZGFwdGVyKTsNCisJfQ0KKw0KKwkvKioNCisJICogUmV0dXJucyBhIGRpYWdub3N0aWMgZGVzY3JpYmluZyB0aGUgZXJyb3JzIGFuZCB3YXJuaW5ncyBsaXN0ZWQgaW4gdGhlIHJlc291cmNlDQorCSAqIGFuZCB0aGUgc3BlY2lmaWVkIGV4Y2VwdGlvbiAoaWYgYW55KS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBEaWFnbm9zdGljIGFuYWx5emVSZXNvdXJjZVByb2JsZW1zKFJlc291cmNlIHJlc291cmNlLCBFeGNlcHRpb24gZXhjZXB0aW9uKSB7DQorCQlpZiAoIXJlc291cmNlLmdldEVycm9ycygpLmlzRW1wdHkoKSB8fCAhcmVzb3VyY2UuZ2V0V2FybmluZ3MoKS5pc0VtcHR5KCkpIHsNCisJCQlCYXNpY0RpYWdub3N0aWMgYmFzaWNEaWFnbm9zdGljID0NCisJCQkJbmV3IEJhc2ljRGlhZ25vc3RpYw0KKwkJCQkJKERpYWdub3N0aWMuRVJST1IsDQorCQkJCQkgIm9yZy5lY2xpcHNlLnN0ZW0uc29sdmVycy5mZC5lZGl0b3IiLA0KKwkJCQkJIDAsDQorCQkJCQkgZ2V0U3RyaW5nKCJfVUlfQ3JlYXRlTW9kZWxFcnJvcl9tZXNzYWdlIiwgcmVzb3VyY2UuZ2V0VVJJKCkpLA0KKwkJCQkJIG5ldyBPYmplY3QgW10geyBleGNlcHRpb24gPT0gbnVsbCA/IChPYmplY3QpcmVzb3VyY2UgOiBleGNlcHRpb24gfSk7DQorCQkJYmFzaWNEaWFnbm9zdGljLm1lcmdlKEVjb3JlVXRpbC5jb21wdXRlRGlhZ25vc3RpYyhyZXNvdXJjZSwgdHJ1ZSkpOw0KKwkJCXJldHVybiBiYXNpY0RpYWdub3N0aWM7DQorCQl9DQorCQllbHNlIGlmIChleGNlcHRpb24gIT0gbnVsbCkgew0KKwkJCXJldHVybg0KKwkJCQluZXcgQmFzaWNEaWFnbm9zdGljDQorCQkJCQkoRGlhZ25vc3RpYy5FUlJPUiwNCisJCQkJCSAib3JnLmVjbGlwc2Uuc3RlbS5zb2x2ZXJzLmZkLmVkaXRvciIsDQorCQkJCQkgMCwNCisJCQkJCSBnZXRTdHJpbmcoIl9VSV9DcmVhdGVNb2RlbEVycm9yX21lc3NhZ2UiLCByZXNvdXJjZS5nZXRVUkkoKSksDQorCQkJCQkgbmV3IE9iamVjdFtdIHsgZXhjZXB0aW9uIH0pOw0KKwkJfQ0KKwkJZWxzZSB7DQorCQkJcmV0dXJuIERpYWdub3N0aWMuT0tfSU5TVEFOQ0U7DQorCQl9DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgaXMgdGhlIG1ldGhvZCB1c2VkIGJ5IHRoZSBmcmFtZXdvcmsgdG8gaW5zdGFsbCB5b3VyIG93biBjb250cm9scy4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCUBPdmVycmlkZQ0KKwlwdWJsaWMgdm9pZCBjcmVhdGVQYWdlcygpIHsNCisJCS8vIENyZWF0ZXMgdGhlIG1vZGVsIGZyb20gdGhlIGVkaXRvciBpbnB1dA0KKwkJLy8NCisJCWNyZWF0ZU1vZGVsKCk7DQorDQorCQkvLyBPbmx5IGNyZWF0ZXMgdGhlIG90aGVyIHBhZ2VzIGlmIHRoZXJlIGlzIHNvbWV0aGluZyB0aGF0IGNhbiBiZSBlZGl0ZWQNCisJCS8vDQorCQlpZiAoIWdldEVkaXRpbmdEb21haW4oKS5nZXRSZXNvdXJjZVNldCgpLmdldFJlc291cmNlcygpLmlzRW1wdHkoKSkgew0KKwkJCS8vIENyZWF0ZSBhIHBhZ2UgZm9yIHRoZSBzZWxlY3Rpb24gdHJlZSB2aWV3Lg0KKwkJCS8vDQorCQkJew0KKwkJCQlWaWV3ZXJQYW5lIHZpZXdlclBhbmUgPQ0KKwkJCQkJbmV3IFZpZXdlclBhbmUoZ2V0U2l0ZSgpLmdldFBhZ2UoKSwgRmRFZGl0b3IudGhpcykgew0KKwkJCQkJCUBPdmVycmlkZQ0KKwkJCQkJCXB1YmxpYyBWaWV3ZXIgY3JlYXRlVmlld2VyKENvbXBvc2l0ZSBjb21wb3NpdGUpIHsNCisJCQkJCQkJVHJlZSB0cmVlID0gbmV3IFRyZWUoY29tcG9zaXRlLCBTV1QuTVVMVEkpOw0KKwkJCQkJCQlUcmVlVmlld2VyIG5ld1RyZWVWaWV3ZXIgPSBuZXcgVHJlZVZpZXdlcih0cmVlKTsNCisJCQkJCQkJcmV0dXJuIG5ld1RyZWVWaWV3ZXI7DQorCQkJCQkJfQ0KKwkJCQkJCUBPdmVycmlkZQ0KKwkJCQkJCXB1YmxpYyB2b2lkIHJlcXVlc3RBY3RpdmF0aW9uKCkgew0KKwkJCQkJCQlzdXBlci5yZXF1ZXN0QWN0aXZhdGlvbigpOw0KKwkJCQkJCQlzZXRDdXJyZW50Vmlld2VyUGFuZSh0aGlzKTsNCisJCQkJCQl9DQorCQkJCQl9Ow0KKwkJCQl2aWV3ZXJQYW5lLmNyZWF0ZUNvbnRyb2woZ2V0Q29udGFpbmVyKCkpOw0KKw0KKwkJCQlzZWxlY3Rpb25WaWV3ZXIgPSAoVHJlZVZpZXdlcil2aWV3ZXJQYW5lLmdldFZpZXdlcigpOw0KKwkJCQlzZWxlY3Rpb25WaWV3ZXIuc2V0Q29udGVudFByb3ZpZGVyKG5ldyBBZGFwdGVyRmFjdG9yeUNvbnRlbnRQcm92aWRlcihhZGFwdGVyRmFjdG9yeSkpOw0KKw0KKwkJCQlzZWxlY3Rpb25WaWV3ZXIuc2V0TGFiZWxQcm92aWRlcihuZXcgQWRhcHRlckZhY3RvcnlMYWJlbFByb3ZpZGVyKGFkYXB0ZXJGYWN0b3J5KSk7DQorCQkJCXNlbGVjdGlvblZpZXdlci5zZXRJbnB1dChlZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkpOw0KKwkJCQlzZWxlY3Rpb25WaWV3ZXIuc2V0U2VsZWN0aW9uKG5ldyBTdHJ1Y3R1cmVkU2VsZWN0aW9uKGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKS5nZXRSZXNvdXJjZXMoKS5nZXQoMCkpLCB0cnVlKTsNCisJCQkJdmlld2VyUGFuZS5zZXRUaXRsZShlZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkpOw0KKw0KKwkJCQluZXcgQWRhcHRlckZhY3RvcnlUcmVlRWRpdG9yKHNlbGVjdGlvblZpZXdlci5nZXRUcmVlKCksIGFkYXB0ZXJGYWN0b3J5KTsNCisNCisJCQkJY3JlYXRlQ29udGV4dE1lbnVGb3Ioc2VsZWN0aW9uVmlld2VyKTsNCisJCQkJaW50IHBhZ2VJbmRleCA9IGFkZFBhZ2Uodmlld2VyUGFuZS5nZXRDb250cm9sKCkpOw0KKwkJCQlzZXRQYWdlVGV4dChwYWdlSW5kZXgsIGdldFN0cmluZygiX1VJX1NlbGVjdGlvblBhZ2VfbGFiZWwiKSk7DQorCQkJfQ0KKw0KKwkJCS8vIENyZWF0ZSBhIHBhZ2UgZm9yIHRoZSBwYXJlbnQgdHJlZSB2aWV3Lg0KKwkJCS8vDQorCQkJew0KKwkJCQlWaWV3ZXJQYW5lIHZpZXdlclBhbmUgPQ0KKwkJCQkJbmV3IFZpZXdlclBhbmUoZ2V0U2l0ZSgpLmdldFBhZ2UoKSwgRmRFZGl0b3IudGhpcykgew0KKwkJCQkJCUBPdmVycmlkZQ0KKwkJCQkJCXB1YmxpYyBWaWV3ZXIgY3JlYXRlVmlld2VyKENvbXBvc2l0ZSBjb21wb3NpdGUpIHsNCisJCQkJCQkJVHJlZSB0cmVlID0gbmV3IFRyZWUoY29tcG9zaXRlLCBTV1QuTVVMVEkpOw0KKwkJCQkJCQlUcmVlVmlld2VyIG5ld1RyZWVWaWV3ZXIgPSBuZXcgVHJlZVZpZXdlcih0cmVlKTsNCisJCQkJCQkJcmV0dXJuIG5ld1RyZWVWaWV3ZXI7DQorCQkJCQkJfQ0KKwkJCQkJCUBPdmVycmlkZQ0KKwkJCQkJCXB1YmxpYyB2b2lkIHJlcXVlc3RBY3RpdmF0aW9uKCkgew0KKwkJCQkJCQlzdXBlci5yZXF1ZXN0QWN0aXZhdGlvbigpOw0KKwkJCQkJCQlzZXRDdXJyZW50Vmlld2VyUGFuZSh0aGlzKTsNCisJCQkJCQl9DQorCQkJCQl9Ow0KKwkJCQl2aWV3ZXJQYW5lLmNyZWF0ZUNvbnRyb2woZ2V0Q29udGFpbmVyKCkpOw0KKw0KKwkJCQlwYXJlbnRWaWV3ZXIgPSAoVHJlZVZpZXdlcil2aWV3ZXJQYW5lLmdldFZpZXdlcigpOw0KKwkJCQlwYXJlbnRWaWV3ZXIuc2V0QXV0b0V4cGFuZExldmVsKDMwKTsNCisJCQkJcGFyZW50Vmlld2VyLnNldENvbnRlbnRQcm92aWRlcihuZXcgUmV2ZXJzZUFkYXB0ZXJGYWN0b3J5Q29udGVudFByb3ZpZGVyKGFkYXB0ZXJGYWN0b3J5KSk7DQorCQkJCXBhcmVudFZpZXdlci5zZXRMYWJlbFByb3ZpZGVyKG5ldyBBZGFwdGVyRmFjdG9yeUxhYmVsUHJvdmlkZXIoYWRhcHRlckZhY3RvcnkpKTsNCisNCisJCQkJY3JlYXRlQ29udGV4dE1lbnVGb3IocGFyZW50Vmlld2VyKTsNCisJCQkJaW50IHBhZ2VJbmRleCA9IGFkZFBhZ2Uodmlld2VyUGFuZS5nZXRDb250cm9sKCkpOw0KKwkJCQlzZXRQYWdlVGV4dChwYWdlSW5kZXgsIGdldFN0cmluZygiX1VJX1BhcmVudFBhZ2VfbGFiZWwiKSk7DQorCQkJfQ0KKw0KKwkJCS8vIFRoaXMgaXMgdGhlIHBhZ2UgZm9yIHRoZSBsaXN0IHZpZXdlcg0KKwkJCS8vDQorCQkJew0KKwkJCQlWaWV3ZXJQYW5lIHZpZXdlclBhbmUgPQ0KKwkJCQkJbmV3IFZpZXdlclBhbmUoZ2V0U2l0ZSgpLmdldFBhZ2UoKSwgRmRFZGl0b3IudGhpcykgew0KKwkJCQkJCUBPdmVycmlkZQ0KKwkJCQkJCXB1YmxpYyBWaWV3ZXIgY3JlYXRlVmlld2VyKENvbXBvc2l0ZSBjb21wb3NpdGUpIHsNCisJCQkJCQkJcmV0dXJuIG5ldyBMaXN0Vmlld2VyKGNvbXBvc2l0ZSk7DQorCQkJCQkJfQ0KKwkJCQkJCUBPdmVycmlkZQ0KKwkJCQkJCXB1YmxpYyB2b2lkIHJlcXVlc3RBY3RpdmF0aW9uKCkgew0KKwkJCQkJCQlzdXBlci5yZXF1ZXN0QWN0aXZhdGlvbigpOw0KKwkJCQkJCQlzZXRDdXJyZW50Vmlld2VyUGFuZSh0aGlzKTsNCisJCQkJCQl9DQorCQkJCQl9Ow0KKwkJCQl2aWV3ZXJQYW5lLmNyZWF0ZUNvbnRyb2woZ2V0Q29udGFpbmVyKCkpOw0KKwkJCQlsaXN0Vmlld2VyID0gKExpc3RWaWV3ZXIpdmlld2VyUGFuZS5nZXRWaWV3ZXIoKTsNCisJCQkJbGlzdFZpZXdlci5zZXRDb250ZW50UHJvdmlkZXIobmV3IEFkYXB0ZXJGYWN0b3J5Q29udGVudFByb3ZpZGVyKGFkYXB0ZXJGYWN0b3J5KSk7DQorCQkJCWxpc3RWaWV3ZXIuc2V0TGFiZWxQcm92aWRlcihuZXcgQWRhcHRlckZhY3RvcnlMYWJlbFByb3ZpZGVyKGFkYXB0ZXJGYWN0b3J5KSk7DQorDQorCQkJCWNyZWF0ZUNvbnRleHRNZW51Rm9yKGxpc3RWaWV3ZXIpOw0KKwkJCQlpbnQgcGFnZUluZGV4ID0gYWRkUGFnZSh2aWV3ZXJQYW5lLmdldENvbnRyb2woKSk7DQorCQkJCXNldFBhZ2VUZXh0KHBhZ2VJbmRleCwgZ2V0U3RyaW5nKCJfVUlfTGlzdFBhZ2VfbGFiZWwiKSk7DQorCQkJfQ0KKw0KKwkJCS8vIFRoaXMgaXMgdGhlIHBhZ2UgZm9yIHRoZSB0cmVlIHZpZXdlcg0KKwkJCS8vDQorCQkJew0KKwkJCQlWaWV3ZXJQYW5lIHZpZXdlclBhbmUgPQ0KKwkJCQkJbmV3IFZpZXdlclBhbmUoZ2V0U2l0ZSgpLmdldFBhZ2UoKSwgRmRFZGl0b3IudGhpcykgew0KKwkJCQkJCUBPdmVycmlkZQ0KKwkJCQkJCXB1YmxpYyBWaWV3ZXIgY3JlYXRlVmlld2VyKENvbXBvc2l0ZSBjb21wb3NpdGUpIHsNCisJCQkJCQkJcmV0dXJuIG5ldyBUcmVlVmlld2VyKGNvbXBvc2l0ZSk7DQorCQkJCQkJfQ0KKwkJCQkJCUBPdmVycmlkZQ0KKwkJCQkJCXB1YmxpYyB2b2lkIHJlcXVlc3RBY3RpdmF0aW9uKCkgew0KKwkJCQkJCQlzdXBlci5yZXF1ZXN0QWN0aXZhdGlvbigpOw0KKwkJCQkJCQlzZXRDdXJyZW50Vmlld2VyUGFuZSh0aGlzKTsNCisJCQkJCQl9DQorCQkJCQl9Ow0KKwkJCQl2aWV3ZXJQYW5lLmNyZWF0ZUNvbnRyb2woZ2V0Q29udGFpbmVyKCkpOw0KKwkJCQl0cmVlVmlld2VyID0gKFRyZWVWaWV3ZXIpdmlld2VyUGFuZS5nZXRWaWV3ZXIoKTsNCisJCQkJdHJlZVZpZXdlci5zZXRDb250ZW50UHJvdmlkZXIobmV3IEFkYXB0ZXJGYWN0b3J5Q29udGVudFByb3ZpZGVyKGFkYXB0ZXJGYWN0b3J5KSk7DQorCQkJCXRyZWVWaWV3ZXIuc2V0TGFiZWxQcm92aWRlcihuZXcgQWRhcHRlckZhY3RvcnlMYWJlbFByb3ZpZGVyKGFkYXB0ZXJGYWN0b3J5KSk7DQorDQorCQkJCW5ldyBBZGFwdGVyRmFjdG9yeVRyZWVFZGl0b3IodHJlZVZpZXdlci5nZXRUcmVlKCksIGFkYXB0ZXJGYWN0b3J5KTsNCisNCisJCQkJY3JlYXRlQ29udGV4dE1lbnVGb3IodHJlZVZpZXdlcik7DQorCQkJCWludCBwYWdlSW5kZXggPSBhZGRQYWdlKHZpZXdlclBhbmUuZ2V0Q29udHJvbCgpKTsNCisJCQkJc2V0UGFnZVRleHQocGFnZUluZGV4LCBnZXRTdHJpbmcoIl9VSV9UcmVlUGFnZV9sYWJlbCIpKTsNCisJCQl9DQorDQorCQkJLy8gVGhpcyBpcyB0aGUgcGFnZSBmb3IgdGhlIHRhYmxlIHZpZXdlci4NCisJCQkvLw0KKwkJCXsNCisJCQkJVmlld2VyUGFuZSB2aWV3ZXJQYW5lID0NCisJCQkJCW5ldyBWaWV3ZXJQYW5lKGdldFNpdGUoKS5nZXRQYWdlKCksIEZkRWRpdG9yLnRoaXMpIHsNCisJCQkJCQlAT3ZlcnJpZGUNCisJCQkJCQlwdWJsaWMgVmlld2VyIGNyZWF0ZVZpZXdlcihDb21wb3NpdGUgY29tcG9zaXRlKSB7DQorCQkJCQkJCXJldHVybiBuZXcgVGFibGVWaWV3ZXIoY29tcG9zaXRlKTsNCisJCQkJCQl9DQorCQkJCQkJQE92ZXJyaWRlDQorCQkJCQkJcHVibGljIHZvaWQgcmVxdWVzdEFjdGl2YXRpb24oKSB7DQorCQkJCQkJCXN1cGVyLnJlcXVlc3RBY3RpdmF0aW9uKCk7DQorCQkJCQkJCXNldEN1cnJlbnRWaWV3ZXJQYW5lKHRoaXMpOw0KKwkJCQkJCX0NCisJCQkJCX07DQorCQkJCXZpZXdlclBhbmUuY3JlYXRlQ29udHJvbChnZXRDb250YWluZXIoKSk7DQorCQkJCXRhYmxlVmlld2VyID0gKFRhYmxlVmlld2VyKXZpZXdlclBhbmUuZ2V0Vmlld2VyKCk7DQorDQorCQkJCVRhYmxlIHRhYmxlID0gdGFibGVWaWV3ZXIuZ2V0VGFibGUoKTsNCisJCQkJVGFibGVMYXlvdXQgbGF5b3V0ID0gbmV3IFRhYmxlTGF5b3V0KCk7DQorCQkJCXRhYmxlLnNldExheW91dChsYXlvdXQpOw0KKwkJCQl0YWJsZS5zZXRIZWFkZXJWaXNpYmxlKHRydWUpOw0KKwkJCQl0YWJsZS5zZXRMaW5lc1Zpc2libGUodHJ1ZSk7DQorDQorCQkJCVRhYmxlQ29sdW1uIG9iamVjdENvbHVtbiA9IG5ldyBUYWJsZUNvbHVtbih0YWJsZSwgU1dULk5PTkUpOw0KKwkJCQlsYXlvdXQuYWRkQ29sdW1uRGF0YShuZXcgQ29sdW1uV2VpZ2h0RGF0YSgzLCAxMDAsIHRydWUpKTsNCisJCQkJb2JqZWN0Q29sdW1uLnNldFRleHQoZ2V0U3RyaW5nKCJfVUlfT2JqZWN0Q29sdW1uX2xhYmVsIikpOw0KKwkJCQlvYmplY3RDb2x1bW4uc2V0UmVzaXphYmxlKHRydWUpOw0KKw0KKwkJCQlUYWJsZUNvbHVtbiBzZWxmQ29sdW1uID0gbmV3IFRhYmxlQ29sdW1uKHRhYmxlLCBTV1QuTk9ORSk7DQorCQkJCWxheW91dC5hZGRDb2x1bW5EYXRhKG5ldyBDb2x1bW5XZWlnaHREYXRhKDIsIDEwMCwgdHJ1ZSkpOw0KKwkJCQlzZWxmQ29sdW1uLnNldFRleHQoZ2V0U3RyaW5nKCJfVUlfU2VsZkNvbHVtbl9sYWJlbCIpKTsNCisJCQkJc2VsZkNvbHVtbi5zZXRSZXNpemFibGUodHJ1ZSk7DQorDQorCQkJCXRhYmxlVmlld2VyLnNldENvbHVtblByb3BlcnRpZXMobmV3IFN0cmluZyBbXSB7ImEiLCAiYiJ9KTsNCisJCQkJdGFibGVWaWV3ZXIuc2V0Q29udGVudFByb3ZpZGVyKG5ldyBBZGFwdGVyRmFjdG9yeUNvbnRlbnRQcm92aWRlcihhZGFwdGVyRmFjdG9yeSkpOw0KKwkJCQl0YWJsZVZpZXdlci5zZXRMYWJlbFByb3ZpZGVyKG5ldyBBZGFwdGVyRmFjdG9yeUxhYmVsUHJvdmlkZXIoYWRhcHRlckZhY3RvcnkpKTsNCisNCisJCQkJY3JlYXRlQ29udGV4dE1lbnVGb3IodGFibGVWaWV3ZXIpOw0KKwkJCQlpbnQgcGFnZUluZGV4ID0gYWRkUGFnZSh2aWV3ZXJQYW5lLmdldENvbnRyb2woKSk7DQorCQkJCXNldFBhZ2VUZXh0KHBhZ2VJbmRleCwgZ2V0U3RyaW5nKCJfVUlfVGFibGVQYWdlX2xhYmVsIikpOw0KKwkJCX0NCisNCisJCQkvLyBUaGlzIGlzIHRoZSBwYWdlIGZvciB0aGUgdGFibGUgdHJlZSB2aWV3ZXIuDQorCQkJLy8NCisJCQl7DQorCQkJCVZpZXdlclBhbmUgdmlld2VyUGFuZSA9DQorCQkJCQluZXcgVmlld2VyUGFuZShnZXRTaXRlKCkuZ2V0UGFnZSgpLCBGZEVkaXRvci50aGlzKSB7DQorCQkJCQkJQE92ZXJyaWRlDQorCQkJCQkJcHVibGljIFZpZXdlciBjcmVhdGVWaWV3ZXIoQ29tcG9zaXRlIGNvbXBvc2l0ZSkgew0KKwkJCQkJCQlyZXR1cm4gbmV3IFRyZWVWaWV3ZXIoY29tcG9zaXRlKTsNCisJCQkJCQl9DQorCQkJCQkJQE92ZXJyaWRlDQorCQkJCQkJcHVibGljIHZvaWQgcmVxdWVzdEFjdGl2YXRpb24oKSB7DQorCQkJCQkJCXN1cGVyLnJlcXVlc3RBY3RpdmF0aW9uKCk7DQorCQkJCQkJCXNldEN1cnJlbnRWaWV3ZXJQYW5lKHRoaXMpOw0KKwkJCQkJCX0NCisJCQkJCX07DQorCQkJCXZpZXdlclBhbmUuY3JlYXRlQ29udHJvbChnZXRDb250YWluZXIoKSk7DQorDQorCQkJCXRyZWVWaWV3ZXJXaXRoQ29sdW1ucyA9IChUcmVlVmlld2VyKXZpZXdlclBhbmUuZ2V0Vmlld2VyKCk7DQorDQorCQkJCVRyZWUgdHJlZSA9IHRyZWVWaWV3ZXJXaXRoQ29sdW1ucy5nZXRUcmVlKCk7DQorCQkJCXRyZWUuc2V0TGF5b3V0RGF0YShuZXcgRmlsbExheW91dCgpKTsNCisJCQkJdHJlZS5zZXRIZWFkZXJWaXNpYmxlKHRydWUpOw0KKwkJCQl0cmVlLnNldExpbmVzVmlzaWJsZSh0cnVlKTsNCisNCisJCQkJVHJlZUNvbHVtbiBvYmplY3RDb2x1bW4gPSBuZXcgVHJlZUNvbHVtbih0cmVlLCBTV1QuTk9ORSk7DQorCQkJCW9iamVjdENvbHVtbi5zZXRUZXh0KGdldFN0cmluZygiX1VJX09iamVjdENvbHVtbl9sYWJlbCIpKTsNCisJCQkJb2JqZWN0Q29sdW1uLnNldFJlc2l6YWJsZSh0cnVlKTsNCisJCQkJb2JqZWN0Q29sdW1uLnNldFdpZHRoKDI1MCk7DQorDQorCQkJCVRyZWVDb2x1bW4gc2VsZkNvbHVtbiA9IG5ldyBUcmVlQ29sdW1uKHRyZWUsIFNXVC5OT05FKTsNCisJCQkJc2VsZkNvbHVtbi5zZXRUZXh0KGdldFN0cmluZygiX1VJX1NlbGZDb2x1bW5fbGFiZWwiKSk7DQorCQkJCXNlbGZDb2x1bW4uc2V0UmVzaXphYmxlKHRydWUpOw0KKwkJCQlzZWxmQ29sdW1uLnNldFdpZHRoKDIwMCk7DQorDQorCQkJCXRyZWVWaWV3ZXJXaXRoQ29sdW1ucy5zZXRDb2x1bW5Qcm9wZXJ0aWVzKG5ldyBTdHJpbmcgW10geyJhIiwgImIifSk7DQorCQkJCXRyZWVWaWV3ZXJXaXRoQ29sdW1ucy5zZXRDb250ZW50UHJvdmlkZXIobmV3IEFkYXB0ZXJGYWN0b3J5Q29udGVudFByb3ZpZGVyKGFkYXB0ZXJGYWN0b3J5KSk7DQorCQkJCXRyZWVWaWV3ZXJXaXRoQ29sdW1ucy5zZXRMYWJlbFByb3ZpZGVyKG5ldyBBZGFwdGVyRmFjdG9yeUxhYmVsUHJvdmlkZXIoYWRhcHRlckZhY3RvcnkpKTsNCisNCisJCQkJY3JlYXRlQ29udGV4dE1lbnVGb3IodHJlZVZpZXdlcldpdGhDb2x1bW5zKTsNCisJCQkJaW50IHBhZ2VJbmRleCA9IGFkZFBhZ2Uodmlld2VyUGFuZS5nZXRDb250cm9sKCkpOw0KKwkJCQlzZXRQYWdlVGV4dChwYWdlSW5kZXgsIGdldFN0cmluZygiX1VJX1RyZWVXaXRoQ29sdW1uc1BhZ2VfbGFiZWwiKSk7DQorCQkJfQ0KKw0KKwkJCWdldFNpdGUoKS5nZXRTaGVsbCgpLmdldERpc3BsYXkoKS5hc3luY0V4ZWMNCisJCQkJKG5ldyBSdW5uYWJsZSgpIHsNCisJCQkJCSBwdWJsaWMgdm9pZCBydW4oKSB7DQorCQkJCQkJIHNldEFjdGl2ZVBhZ2UoMCk7DQorCQkJCQkgfQ0KKwkJCQkgfSk7DQorCQl9DQorDQorCQkvLyBFbnN1cmVzIHRoYXQgdGhpcyBlZGl0b3Igd2lsbCBvbmx5IGRpc3BsYXkgdGhlIHBhZ2UncyB0YWINCisJCS8vIGFyZWEgaWYgdGhlcmUgYXJlIG1vcmUgdGhhbiBvbmUgcGFnZQ0KKwkJLy8NCisJCWdldENvbnRhaW5lcigpLmFkZENvbnRyb2xMaXN0ZW5lcg0KKwkJCShuZXcgQ29udHJvbEFkYXB0ZXIoKSB7DQorCQkJCWJvb2xlYW4gZ3VhcmQgPSBmYWxzZTsNCisJCQkJQE92ZXJyaWRlDQorCQkJCXB1YmxpYyB2b2lkIGNvbnRyb2xSZXNpemVkKENvbnRyb2xFdmVudCBldmVudCkgew0KKwkJCQkJaWYgKCFndWFyZCkgew0KKwkJCQkJCWd1YXJkID0gdHJ1ZTsNCisJCQkJCQloaWRlVGFicygpOw0KKwkJCQkJCWd1YXJkID0gZmFsc2U7DQorCQkJCQl9DQorCQkJCX0NCisJCQkgfSk7DQorDQorCQlnZXRTaXRlKCkuZ2V0U2hlbGwoKS5nZXREaXNwbGF5KCkuYXN5bmNFeGVjDQorCQkJKG5ldyBSdW5uYWJsZSgpIHsNCisJCQkJIHB1YmxpYyB2b2lkIHJ1bigpIHsNCisJCQkJCSB1cGRhdGVQcm9ibGVtSW5kaWNhdGlvbigpOw0KKwkJCQkgfQ0KKwkJCSB9KTsNCisJfQ0KKw0KKwkvKioNCisJICogSWYgdGhlcmUgaXMganVzdCBvbmUgcGFnZSBpbiB0aGUgbXVsdGktcGFnZSBlZGl0b3IgcGFydCwNCisJICogdGhpcyBoaWRlcyB0aGUgc2luZ2xlIHRhYiBhdCB0aGUgYm90dG9tLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIHZvaWQgaGlkZVRhYnMoKSB7DQorCQlpZiAoZ2V0UGFnZUNvdW50KCkgPD0gMSkgew0KKwkJCXNldFBhZ2VUZXh0KDAsICIiKTsNCisJCQlpZiAoZ2V0Q29udGFpbmVyKCkgaW5zdGFuY2VvZiBDVGFiRm9sZGVyKSB7DQorCQkJCSgoQ1RhYkZvbGRlcilnZXRDb250YWluZXIoKSkuc2V0VGFiSGVpZ2h0KDEpOw0KKwkJCQlQb2ludCBwb2ludCA9IGdldENvbnRhaW5lcigpLmdldFNpemUoKTsNCisJCQkJZ2V0Q29udGFpbmVyKCkuc2V0U2l6ZShwb2ludC54LCBwb2ludC55ICsgNik7DQorCQkJfQ0KKwkJfQ0KKwl9DQorDQorCS8qKg0KKwkgKiBJZiB0aGVyZSBpcyBtb3JlIHRoYW4gb25lIHBhZ2UgaW4gdGhlIG11bHRpLXBhZ2UgZWRpdG9yIHBhcnQsDQorCSAqIHRoaXMgc2hvd3MgdGhlIHRhYnMgYXQgdGhlIGJvdHRvbS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCB2b2lkIHNob3dUYWJzKCkgew0KKwkJaWYgKGdldFBhZ2VDb3VudCgpID4gMSkgew0KKwkJCXNldFBhZ2VUZXh0KDAsIGdldFN0cmluZygiX1VJX1NlbGVjdGlvblBhZ2VfbGFiZWwiKSk7DQorCQkJaWYgKGdldENvbnRhaW5lcigpIGluc3RhbmNlb2YgQ1RhYkZvbGRlcikgew0KKwkJCQkoKENUYWJGb2xkZXIpZ2V0Q29udGFpbmVyKCkpLnNldFRhYkhlaWdodChTV1QuREVGQVVMVCk7DQorCQkJCVBvaW50IHBvaW50ID0gZ2V0Q29udGFpbmVyKCkuZ2V0U2l6ZSgpOw0KKwkJCQlnZXRDb250YWluZXIoKS5zZXRTaXplKHBvaW50LngsIHBvaW50LnkgLSA2KTsNCisJCQl9DQorCQl9DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgaXMgdXNlZCB0byB0cmFjayB0aGUgYWN0aXZlIHZpZXdlci4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCUBPdmVycmlkZQ0KKwlwcm90ZWN0ZWQgdm9pZCBwYWdlQ2hhbmdlKGludCBwYWdlSW5kZXgpIHsNCisJCXN1cGVyLnBhZ2VDaGFuZ2UocGFnZUluZGV4KTsNCisNCisJCWlmIChjb250ZW50T3V0bGluZVBhZ2UgIT0gbnVsbCkgew0KKwkJCWhhbmRsZUNvbnRlbnRPdXRsaW5lU2VsZWN0aW9uKGNvbnRlbnRPdXRsaW5lUGFnZS5nZXRTZWxlY3Rpb24oKSk7DQorCQl9DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgaXMgaG93IHRoZSBmcmFtZXdvcmsgZGV0ZXJtaW5lcyB3aGljaCBpbnRlcmZhY2VzIHdlIGltcGxlbWVudC4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCUBTdXBwcmVzc1dhcm5pbmdzKCJ1bmNoZWNrZWQiKQ0KKwlAT3ZlcnJpZGUNCisJcHVibGljIE9iamVjdCBnZXRBZGFwdGVyKENsYXNzIGtleSkgew0KKwkJaWYgKGtleS5lcXVhbHMoSUNvbnRlbnRPdXRsaW5lUGFnZS5jbGFzcykpIHsNCisJCQlyZXR1cm4gc2hvd091dGxpbmVWaWV3KCkgPyBnZXRDb250ZW50T3V0bGluZVBhZ2UoKSA6IG51bGw7DQorCQl9DQorCQllbHNlIGlmIChrZXkuZXF1YWxzKElQcm9wZXJ0eVNoZWV0UGFnZS5jbGFzcykpIHsNCisJCQlyZXR1cm4gZ2V0UHJvcGVydHlTaGVldFBhZ2UoKTsNCisJCX0NCisJCWVsc2UgaWYgKGtleS5lcXVhbHMoSUdvdG9NYXJrZXIuY2xhc3MpKSB7DQorCQkJcmV0dXJuIHRoaXM7DQorCQl9DQorCQllbHNlIHsNCisJCQlyZXR1cm4gc3VwZXIuZ2V0QWRhcHRlcihrZXkpOw0KKwkJfQ0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIGFjY2Vzc2VzIGEgY2FjaGVkIHZlcnNpb24gb2YgdGhlIGNvbnRlbnQgb3V0bGluZXIuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgSUNvbnRlbnRPdXRsaW5lUGFnZSBnZXRDb250ZW50T3V0bGluZVBhZ2UoKSB7DQorCQlpZiAoY29udGVudE91dGxpbmVQYWdlID09IG51bGwpIHsNCisJCQkvLyBUaGUgY29udGVudCBvdXRsaW5lIGlzIGp1c3QgYSB0cmVlLg0KKwkJCS8vDQorCQkJY2xhc3MgTXlDb250ZW50T3V0bGluZVBhZ2UgZXh0ZW5kcyBDb250ZW50T3V0bGluZVBhZ2Ugew0KKwkJCQlAT3ZlcnJpZGUNCisJCQkJcHVibGljIHZvaWQgY3JlYXRlQ29udHJvbChDb21wb3NpdGUgcGFyZW50KSB7DQorCQkJCQlzdXBlci5jcmVhdGVDb250cm9sKHBhcmVudCk7DQorCQkJCQljb250ZW50T3V0bGluZVZpZXdlciA9IGdldFRyZWVWaWV3ZXIoKTsNCisJCQkJCWNvbnRlbnRPdXRsaW5lVmlld2VyLmFkZFNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcih0aGlzKTsNCisNCisJCQkJCS8vIFNldCB1cCB0aGUgdHJlZSB2aWV3ZXIuDQorCQkJCQkvLw0KKwkJCQkJY29udGVudE91dGxpbmVWaWV3ZXIuc2V0Q29udGVudFByb3ZpZGVyKG5ldyBBZGFwdGVyRmFjdG9yeUNvbnRlbnRQcm92aWRlcihhZGFwdGVyRmFjdG9yeSkpOw0KKwkJCQkJY29udGVudE91dGxpbmVWaWV3ZXIuc2V0TGFiZWxQcm92aWRlcihuZXcgQWRhcHRlckZhY3RvcnlMYWJlbFByb3ZpZGVyKGFkYXB0ZXJGYWN0b3J5KSk7DQorCQkJCQljb250ZW50T3V0bGluZVZpZXdlci5zZXRJbnB1dChlZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkpOw0KKw0KKwkJCQkJLy8gTWFrZSBzdXJlIG91ciBwb3B1cHMgd29yay4NCisJCQkJCS8vDQorCQkJCQljcmVhdGVDb250ZXh0TWVudUZvcihjb250ZW50T3V0bGluZVZpZXdlcik7DQorDQorCQkJCQlpZiAoIWVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKS5nZXRSZXNvdXJjZXMoKS5pc0VtcHR5KCkpIHsNCisJCQkJCSAgLy8gU2VsZWN0IHRoZSByb290IG9iamVjdCBpbiB0aGUgdmlldy4NCisJCQkJCSAgLy8NCisJCQkJCSAgY29udGVudE91dGxpbmVWaWV3ZXIuc2V0U2VsZWN0aW9uKG5ldyBTdHJ1Y3R1cmVkU2VsZWN0aW9uKGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKS5nZXRSZXNvdXJjZXMoKS5nZXQoMCkpLCB0cnVlKTsNCisJCQkJCX0NCisJCQkJfQ0KKw0KKwkJCQlAT3ZlcnJpZGUNCisJCQkJcHVibGljIHZvaWQgbWFrZUNvbnRyaWJ1dGlvbnMoSU1lbnVNYW5hZ2VyIG1lbnVNYW5hZ2VyLCBJVG9vbEJhck1hbmFnZXIgdG9vbEJhck1hbmFnZXIsIElTdGF0dXNMaW5lTWFuYWdlciBzdGF0dXNMaW5lTWFuYWdlcikgew0KKwkJCQkJc3VwZXIubWFrZUNvbnRyaWJ1dGlvbnMobWVudU1hbmFnZXIsIHRvb2xCYXJNYW5hZ2VyLCBzdGF0dXNMaW5lTWFuYWdlcik7DQorCQkJCQljb250ZW50T3V0bGluZVN0YXR1c0xpbmVNYW5hZ2VyID0gc3RhdHVzTGluZU1hbmFnZXI7DQorCQkJCX0NCisNCisJCQkJQE92ZXJyaWRlDQorCQkJCXB1YmxpYyB2b2lkIHNldEFjdGlvbkJhcnMoSUFjdGlvbkJhcnMgYWN0aW9uQmFycykgew0KKwkJCQkJc3VwZXIuc2V0QWN0aW9uQmFycyhhY3Rpb25CYXJzKTsNCisJCQkJCWdldEFjdGlvbkJhckNvbnRyaWJ1dG9yKCkuc2hhcmVHbG9iYWxBY3Rpb25zKHRoaXMsIGFjdGlvbkJhcnMpOw0KKwkJCQl9DQorCQkJfQ0KKw0KKwkJCWNvbnRlbnRPdXRsaW5lUGFnZSA9IG5ldyBNeUNvbnRlbnRPdXRsaW5lUGFnZSgpOw0KKw0KKwkJCS8vIExpc3RlbiB0byBzZWxlY3Rpb24gc28gdGhhdCB3ZSBjYW4gaGFuZGxlIGl0IGlzIGEgc3BlY2lhbCB3YXkuDQorCQkJLy8NCisJCQljb250ZW50T3V0bGluZVBhZ2UuYWRkU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyDQorCQkJCShuZXcgSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcigpIHsNCisJCQkJCSAvLyBUaGlzIGVuc3VyZXMgdGhhdCB3ZSBoYW5kbGUgc2VsZWN0aW9ucyBjb3JyZWN0bHkuDQorCQkJCQkgLy8NCisJCQkJCSBwdWJsaWMgdm9pZCBzZWxlY3Rpb25DaGFuZ2VkKFNlbGVjdGlvbkNoYW5nZWRFdmVudCBldmVudCkgew0KKwkJCQkJCSBoYW5kbGVDb250ZW50T3V0bGluZVNlbGVjdGlvbihldmVudC5nZXRTZWxlY3Rpb24oKSk7DQorCQkJCQkgfQ0KKwkJCQkgfSk7DQorCQl9DQorDQorCQlyZXR1cm4gY29udGVudE91dGxpbmVQYWdlOw0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIGFjY2Vzc2VzIGEgY2FjaGVkIHZlcnNpb24gb2YgdGhlIHByb3BlcnR5IHNoZWV0Lg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIElQcm9wZXJ0eVNoZWV0UGFnZSBnZXRQcm9wZXJ0eVNoZWV0UGFnZSgpIHsNCisJCWlmIChwcm9wZXJ0eVNoZWV0UGFnZSA9PSBudWxsKSB7DQorCQkJcHJvcGVydHlTaGVldFBhZ2UgPQ0KKwkJCQluZXcgRXh0ZW5kZWRQcm9wZXJ0eVNoZWV0UGFnZShlZGl0aW5nRG9tYWluKSB7DQorCQkJCQlAT3ZlcnJpZGUNCisJCQkJCXB1YmxpYyB2b2lkIHNldFNlbGVjdGlvblRvVmlld2VyKExpc3Q8Pz4gc2VsZWN0aW9uKSB7DQorCQkJCQkJRmRFZGl0b3IudGhpcy5zZXRTZWxlY3Rpb25Ub1ZpZXdlcihzZWxlY3Rpb24pOw0KKwkJCQkJCUZkRWRpdG9yLnRoaXMuc2V0Rm9jdXMoKTsNCisJCQkJCX0NCisNCisJCQkJCUBPdmVycmlkZQ0KKwkJCQkJcHVibGljIHZvaWQgc2V0QWN0aW9uQmFycyhJQWN0aW9uQmFycyBhY3Rpb25CYXJzKSB7DQorCQkJCQkJc3VwZXIuc2V0QWN0aW9uQmFycyhhY3Rpb25CYXJzKTsNCisJCQkJCQlnZXRBY3Rpb25CYXJDb250cmlidXRvcigpLnNoYXJlR2xvYmFsQWN0aW9ucyh0aGlzLCBhY3Rpb25CYXJzKTsNCisJCQkJCX0NCisJCQkJfTsNCisJCQlwcm9wZXJ0eVNoZWV0UGFnZS5zZXRQcm9wZXJ0eVNvdXJjZVByb3ZpZGVyKG5ldyBBZGFwdGVyRmFjdG9yeUNvbnRlbnRQcm92aWRlcihhZGFwdGVyRmFjdG9yeSkpOw0KKwkJfQ0KKw0KKwkJcmV0dXJuIHByb3BlcnR5U2hlZXRQYWdlOw0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIGRlYWxzIHdpdGggaG93IHdlIHdhbnQgc2VsZWN0aW9uIGluIHRoZSBvdXRsaW5lciB0byBhZmZlY3QgdGhlIG90aGVyIHZpZXdzLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIHZvaWQgaGFuZGxlQ29udGVudE91dGxpbmVTZWxlY3Rpb24oSVNlbGVjdGlvbiBzZWxlY3Rpb24pIHsNCisJCWlmIChjdXJyZW50Vmlld2VyUGFuZSAhPSBudWxsICYmICFzZWxlY3Rpb24uaXNFbXB0eSgpICYmIHNlbGVjdGlvbiBpbnN0YW5jZW9mIElTdHJ1Y3R1cmVkU2VsZWN0aW9uKSB7DQorCQkJSXRlcmF0b3I8Pz4gc2VsZWN0ZWRFbGVtZW50cyA9ICgoSVN0cnVjdHVyZWRTZWxlY3Rpb24pc2VsZWN0aW9uKS5pdGVyYXRvcigpOw0KKwkJCWlmIChzZWxlY3RlZEVsZW1lbnRzLmhhc05leHQoKSkgew0KKwkJCQkvLyBHZXQgdGhlIGZpcnN0IHNlbGVjdGVkIGVsZW1lbnQuDQorCQkJCS8vDQorCQkJCU9iamVjdCBzZWxlY3RlZEVsZW1lbnQgPSBzZWxlY3RlZEVsZW1lbnRzLm5leHQoKTsNCisNCisJCQkJLy8gSWYgaXQncyB0aGUgc2VsZWN0aW9uIHZpZXdlciwgdGhlbiB3ZSB3YW50IGl0IHRvIHNlbGVjdCB0aGUgc2FtZSBzZWxlY3Rpb24gYXMgdGhpcyBzZWxlY3Rpb24uDQorCQkJCS8vDQorCQkJCWlmIChjdXJyZW50Vmlld2VyUGFuZS5nZXRWaWV3ZXIoKSA9PSBzZWxlY3Rpb25WaWV3ZXIpIHsNCisJCQkJCUFycmF5TGlzdDxPYmplY3Q+IHNlbGVjdGlvbkxpc3QgPSBuZXcgQXJyYXlMaXN0PE9iamVjdD4oKTsNCisJCQkJCXNlbGVjdGlvbkxpc3QuYWRkKHNlbGVjdGVkRWxlbWVudCk7DQorCQkJCQl3aGlsZSAoc2VsZWN0ZWRFbGVtZW50cy5oYXNOZXh0KCkpIHsNCisJCQkJCQlzZWxlY3Rpb25MaXN0LmFkZChzZWxlY3RlZEVsZW1lbnRzLm5leHQoKSk7DQorCQkJCQl9DQorDQorCQkJCQkvLyBTZXQgdGhlIHNlbGVjdGlvbiB0byB0aGUgd2lkZ2V0Lg0KKwkJCQkJLy8NCisJCQkJCXNlbGVjdGlvblZpZXdlci5zZXRTZWxlY3Rpb24obmV3IFN0cnVjdHVyZWRTZWxlY3Rpb24oc2VsZWN0aW9uTGlzdCkpOw0KKwkJCQl9DQorCQkJCWVsc2Ugew0KKwkJCQkJLy8gU2V0IHRoZSBpbnB1dCB0byB0aGUgd2lkZ2V0Lg0KKwkJCQkJLy8NCisJCQkJCWlmIChjdXJyZW50Vmlld2VyUGFuZS5nZXRWaWV3ZXIoKS5nZXRJbnB1dCgpICE9IHNlbGVjdGVkRWxlbWVudCkgew0KKwkJCQkJCWN1cnJlbnRWaWV3ZXJQYW5lLmdldFZpZXdlcigpLnNldElucHV0KHNlbGVjdGVkRWxlbWVudCk7DQorCQkJCQkJY3VycmVudFZpZXdlclBhbmUuc2V0VGl0bGUoc2VsZWN0ZWRFbGVtZW50KTsNCisJCQkJCX0NCisJCQkJfQ0KKwkJCX0NCisJCX0NCisJfQ0KKw0KKwkvKioNCisJICogVGhpcyBpcyBmb3IgaW1wbGVtZW50aW5nIHtAbGluayBJRWRpdG9yUGFydH0gYW5kIHNpbXBseSB0ZXN0cyB0aGUgY29tbWFuZCBzdGFjay4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCUBPdmVycmlkZQ0KKwlwdWJsaWMgYm9vbGVhbiBpc0RpcnR5KCkgew0KKwkJcmV0dXJuICgoQmFzaWNDb21tYW5kU3RhY2spZWRpdGluZ0RvbWFpbi5nZXRDb21tYW5kU3RhY2soKSkuaXNTYXZlTmVlZGVkKCk7DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgaXMgZm9yIGltcGxlbWVudGluZyB7QGxpbmsgSUVkaXRvclBhcnR9IGFuZCBzaW1wbHkgc2F2ZXMgdGhlIG1vZGVsIGZpbGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlAT3ZlcnJpZGUNCisJcHVibGljIHZvaWQgZG9TYXZlKElQcm9ncmVzc01vbml0b3IgcHJvZ3Jlc3NNb25pdG9yKSB7DQorCQkvLyBTYXZlIG9ubHkgcmVzb3VyY2VzIHRoYXQgaGF2ZSBhY3R1YWxseSBjaGFuZ2VkLg0KKwkJLy8NCisJCWZpbmFsIE1hcDxPYmplY3QsIE9iamVjdD4gc2F2ZU9wdGlvbnMgPSBuZXcgSGFzaE1hcDxPYmplY3QsIE9iamVjdD4oKTsNCisJCXNhdmVPcHRpb25zLnB1dChSZXNvdXJjZS5PUFRJT05fU0FWRV9PTkxZX0lGX0NIQU5HRUQsIFJlc291cmNlLk9QVElPTl9TQVZFX09OTFlfSUZfQ0hBTkdFRF9NRU1PUllfQlVGRkVSKTsNCisNCisJCS8vIERvIHRoZSB3b3JrIHdpdGhpbiBhbiBvcGVyYXRpb24gYmVjYXVzZSB0aGlzIGlzIGEgbG9uZyBydW5uaW5nIGFjdGl2aXR5IHRoYXQgbW9kaWZpZXMgdGhlIHdvcmtiZW5jaC4NCisJCS8vDQorCQlXb3Jrc3BhY2VNb2RpZnlPcGVyYXRpb24gb3BlcmF0aW9uID0NCisJCQluZXcgV29ya3NwYWNlTW9kaWZ5T3BlcmF0aW9uKCkgew0KKwkJCQkvLyBUaGlzIGlzIHRoZSBtZXRob2QgdGhhdCBnZXRzIGludm9rZWQgd2hlbiB0aGUgb3BlcmF0aW9uIHJ1bnMuDQorCQkJCS8vDQorCQkJCUBPdmVycmlkZQ0KKwkJCQlwdWJsaWMgdm9pZCBleGVjdXRlKElQcm9ncmVzc01vbml0b3IgbW9uaXRvcikgew0KKwkJCQkJLy8gU2F2ZSB0aGUgcmVzb3VyY2VzIHRvIHRoZSBmaWxlIHN5c3RlbS4NCisJCQkJCS8vDQorCQkJCQlib29sZWFuIGZpcnN0ID0gdHJ1ZTsNCisJCQkJCWZvciAoUmVzb3VyY2UgcmVzb3VyY2UgOiBlZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkuZ2V0UmVzb3VyY2VzKCkpIHsNCisJCQkJCQlpZiAoKGZpcnN0IHx8ICFyZXNvdXJjZS5nZXRDb250ZW50cygpLmlzRW1wdHkoKSB8fCBpc1BlcnNpc3RlZChyZXNvdXJjZSkpICYmICFlZGl0aW5nRG9tYWluLmlzUmVhZE9ubHkocmVzb3VyY2UpKSB7DQorCQkJCQkJCXRyeSB7DQorCQkJCQkJCQlsb25nIHRpbWVTdGFtcCA9IHJlc291cmNlLmdldFRpbWVTdGFtcCgpOw0KKwkJCQkJCQkJcmVzb3VyY2Uuc2F2ZShzYXZlT3B0aW9ucyk7DQorCQkJCQkJCQlpZiAocmVzb3VyY2UuZ2V0VGltZVN0YW1wKCkgIT0gdGltZVN0YW1wKSB7DQorCQkJCQkJCQkJc2F2ZWRSZXNvdXJjZXMuYWRkKHJlc291cmNlKTsNCisJCQkJCQkJCX0NCisJCQkJCQkJfQ0KKwkJCQkJCQljYXRjaCAoRXhjZXB0aW9uIGV4Y2VwdGlvbikgew0KKwkJCQkJCQkJcmVzb3VyY2VUb0RpYWdub3N0aWNNYXAucHV0KHJlc291cmNlLCBhbmFseXplUmVzb3VyY2VQcm9ibGVtcyhyZXNvdXJjZSwgZXhjZXB0aW9uKSk7DQorCQkJCQkJCX0NCisJCQkJCQkJZmlyc3QgPSBmYWxzZTsNCisJCQkJCQl9DQorCQkJCQl9DQorCQkJCX0NCisJCQl9Ow0KKw0KKwkJdXBkYXRlUHJvYmxlbUluZGljYXRpb24gPSBmYWxzZTsNCisJCXRyeSB7DQorCQkJLy8gVGhpcyBydW5zIHRoZSBvcHRpb25zLCBhbmQgc2hvd3MgcHJvZ3Jlc3MuDQorCQkJLy8NCisJCQluZXcgUHJvZ3Jlc3NNb25pdG9yRGlhbG9nKGdldFNpdGUoKS5nZXRTaGVsbCgpKS5ydW4odHJ1ZSwgZmFsc2UsIG9wZXJhdGlvbik7DQorDQorCQkJLy8gUmVmcmVzaCB0aGUgbmVjZXNzYXJ5IHN0YXRlLg0KKwkJCS8vDQorCQkJKChCYXNpY0NvbW1hbmRTdGFjayllZGl0aW5nRG9tYWluLmdldENvbW1hbmRTdGFjaygpKS5zYXZlSXNEb25lKCk7DQorCQkJZmlyZVByb3BlcnR5Q2hhbmdlKElFZGl0b3JQYXJ0LlBST1BfRElSVFkpOw0KKwkJfQ0KKwkJY2F0Y2ggKEV4Y2VwdGlvbiBleGNlcHRpb24pIHsNCisJCQkvLyBTb21ldGhpbmcgd2VudCB3cm9uZyB0aGF0IHNob3VsZG4ndC4NCisJCQkvLw0KKwkJCUZkRWRpdG9yUGx1Z2luLklOU1RBTkNFLmxvZyhleGNlcHRpb24pOw0KKwkJfQ0KKwkJdXBkYXRlUHJvYmxlbUluZGljYXRpb24gPSB0cnVlOw0KKwkJdXBkYXRlUHJvYmxlbUluZGljYXRpb24oKTsNCisJfQ0KKw0KKwkvKioNCisJICogVGhpcyByZXR1cm5zIHdoZXRoZXIgc29tZXRoaW5nIGhhcyBiZWVuIHBlcnNpc3RlZCB0byB0aGUgVVJJIG9mIHRoZSBzcGVjaWZpZWQgcmVzb3VyY2UuDQorCSAqIFRoZSBpbXBsZW1lbnRhdGlvbiB1c2VzIHRoZSBVUkkgY29udmVydGVyIGZyb20gdGhlIGVkaXRvcidzIHJlc291cmNlIHNldCB0byB0cnkgdG8gb3BlbiBhbiBpbnB1dCBzdHJlYW0uIA0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIGJvb2xlYW4gaXNQZXJzaXN0ZWQoUmVzb3VyY2UgcmVzb3VyY2UpIHsNCisJCWJvb2xlYW4gcmVzdWx0ID0gZmFsc2U7DQorCQl0cnkgew0KKwkJCUlucHV0U3RyZWFtIHN0cmVhbSA9IGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKS5nZXRVUklDb252ZXJ0ZXIoKS5jcmVhdGVJbnB1dFN0cmVhbShyZXNvdXJjZS5nZXRVUkkoKSk7DQorCQkJaWYgKHN0cmVhbSAhPSBudWxsKSB7DQorCQkJCXJlc3VsdCA9IHRydWU7DQorCQkJCXN0cmVhbS5jbG9zZSgpOw0KKwkJCX0NCisJCX0NCisJCWNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7DQorCQkJLy8gSWdub3JlDQorCQl9DQorCQlyZXR1cm4gcmVzdWx0Ow0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIGFsd2F5cyByZXR1cm5zIHRydWUgYmVjYXVzZSBpdCBpcyBub3QgY3VycmVudGx5IHN1cHBvcnRlZC4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCUBPdmVycmlkZQ0KKwlwdWJsaWMgYm9vbGVhbiBpc1NhdmVBc0FsbG93ZWQoKSB7DQorCQlyZXR1cm4gdHJ1ZTsNCisJfQ0KKw0KKwkvKioNCisJICogVGhpcyBhbHNvIGNoYW5nZXMgdGhlIGVkaXRvcidzIGlucHV0Lg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJQE92ZXJyaWRlDQorCXB1YmxpYyB2b2lkIGRvU2F2ZUFzKCkgew0KKwkJU2F2ZUFzRGlhbG9nIHNhdmVBc0RpYWxvZyA9IG5ldyBTYXZlQXNEaWFsb2coZ2V0U2l0ZSgpLmdldFNoZWxsKCkpOw0KKwkJc2F2ZUFzRGlhbG9nLm9wZW4oKTsNCisJCUlQYXRoIHBhdGggPSBzYXZlQXNEaWFsb2cuZ2V0UmVzdWx0KCk7DQorCQlpZiAocGF0aCAhPSBudWxsKSB7DQorCQkJSUZpbGUgZmlsZSA9IFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5nZXRSb290KCkuZ2V0RmlsZShwYXRoKTsNCisJCQlpZiAoZmlsZSAhPSBudWxsKSB7DQorCQkJCWRvU2F2ZUFzKFVSSS5jcmVhdGVQbGF0Zm9ybVJlc291cmNlVVJJKGZpbGUuZ2V0RnVsbFBhdGgoKS50b1N0cmluZygpLCB0cnVlKSwgbmV3IEZpbGVFZGl0b3JJbnB1dChmaWxlKSk7DQorCQkJfQ0KKwkJfQ0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIHZvaWQgZG9TYXZlQXMoVVJJIHVyaSwgSUVkaXRvcklucHV0IGVkaXRvcklucHV0KSB7DQorCQkoZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpLmdldFJlc291cmNlcygpLmdldCgwKSkuc2V0VVJJKHVyaSk7DQorCQlzZXRJbnB1dFdpdGhOb3RpZnkoZWRpdG9ySW5wdXQpOw0KKwkJc2V0UGFydE5hbWUoZWRpdG9ySW5wdXQuZ2V0TmFtZSgpKTsNCisJCUlQcm9ncmVzc01vbml0b3IgcHJvZ3Jlc3NNb25pdG9yID0NCisJCQlnZXRBY3Rpb25CYXJzKCkuZ2V0U3RhdHVzTGluZU1hbmFnZXIoKSAhPSBudWxsID8NCisJCQkJZ2V0QWN0aW9uQmFycygpLmdldFN0YXR1c0xpbmVNYW5hZ2VyKCkuZ2V0UHJvZ3Jlc3NNb25pdG9yKCkgOg0KKwkJCQluZXcgTnVsbFByb2dyZXNzTW9uaXRvcigpOw0KKwkJZG9TYXZlKHByb2dyZXNzTW9uaXRvcik7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgdm9pZCBnb3RvTWFya2VyKElNYXJrZXIgbWFya2VyKSB7DQorCQl0cnkgew0KKwkJCWlmIChtYXJrZXIuZ2V0VHlwZSgpLmVxdWFscyhFVmFsaWRhdG9yLk1BUktFUikpIHsNCisJCQkJU3RyaW5nIHVyaUF0dHJpYnV0ZSA9IG1hcmtlci5nZXRBdHRyaWJ1dGUoRVZhbGlkYXRvci5VUklfQVRUUklCVVRFLCBudWxsKTsNCisJCQkJaWYgKHVyaUF0dHJpYnV0ZSAhPSBudWxsKSB7DQorCQkJCQlVUkkgdXJpID0gVVJJLmNyZWF0ZVVSSSh1cmlBdHRyaWJ1dGUpOw0KKwkJCQkJRU9iamVjdCBlT2JqZWN0ID0gZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpLmdldEVPYmplY3QodXJpLCB0cnVlKTsNCisJCQkJCWlmIChlT2JqZWN0ICE9IG51bGwpIHsNCisJCQkJCSAgc2V0U2VsZWN0aW9uVG9WaWV3ZXIoQ29sbGVjdGlvbnMuc2luZ2xldG9uKGVkaXRpbmdEb21haW4uZ2V0V3JhcHBlcihlT2JqZWN0KSkpOw0KKwkJCQkJfQ0KKwkJCQl9DQorCQkJfQ0KKwkJfQ0KKwkJY2F0Y2ggKENvcmVFeGNlcHRpb24gZXhjZXB0aW9uKSB7DQorCQkJRmRFZGl0b3JQbHVnaW4uSU5TVEFOQ0UubG9nKGV4Y2VwdGlvbik7DQorCQl9DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgaXMgY2FsbGVkIGR1cmluZyBzdGFydHVwLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJQE92ZXJyaWRlDQorCXB1YmxpYyB2b2lkIGluaXQoSUVkaXRvclNpdGUgc2l0ZSwgSUVkaXRvcklucHV0IGVkaXRvcklucHV0KSB7DQorCQlzZXRTaXRlKHNpdGUpOw0KKwkJc2V0SW5wdXRXaXRoTm90aWZ5KGVkaXRvcklucHV0KTsNCisJCXNldFBhcnROYW1lKGVkaXRvcklucHV0LmdldE5hbWUoKSk7DQorCQlzaXRlLnNldFNlbGVjdGlvblByb3ZpZGVyKHRoaXMpOw0KKwkJc2l0ZS5nZXRQYWdlKCkuYWRkUGFydExpc3RlbmVyKHBhcnRMaXN0ZW5lcik7DQorCQlSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuYWRkUmVzb3VyY2VDaGFuZ2VMaXN0ZW5lcihyZXNvdXJjZUNoYW5nZUxpc3RlbmVyLCBJUmVzb3VyY2VDaGFuZ2VFdmVudC5QT1NUX0NIQU5HRSk7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlAT3ZlcnJpZGUNCisJcHVibGljIHZvaWQgc2V0Rm9jdXMoKSB7DQorCQlpZiAoY3VycmVudFZpZXdlclBhbmUgIT0gbnVsbCkgew0KKwkJCWN1cnJlbnRWaWV3ZXJQYW5lLnNldEZvY3VzKCk7DQorCQl9DQorCQllbHNlIHsNCisJCQlnZXRDb250cm9sKGdldEFjdGl2ZVBhZ2UoKSkuc2V0Rm9jdXMoKTsNCisJCX0NCisJfQ0KKw0KKwkvKioNCisJICogVGhpcyBpbXBsZW1lbnRzIHtAbGluayBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb25Qcm92aWRlcn0uDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgdm9pZCBhZGRTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIoSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lciBsaXN0ZW5lcikgew0KKwkJc2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVycy5hZGQobGlzdGVuZXIpOw0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIGltcGxlbWVudHMge0BsaW5rIG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvblByb3ZpZGVyfS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyB2b2lkIHJlbW92ZVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcihJU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyIGxpc3RlbmVyKSB7DQorCQlzZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXJzLnJlbW92ZShsaXN0ZW5lcik7DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgaW1wbGVtZW50cyB7QGxpbmsgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uUHJvdmlkZXJ9IHRvIHJldHVybiB0aGlzIGVkaXRvcidzIG92ZXJhbGwgc2VsZWN0aW9uLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIElTZWxlY3Rpb24gZ2V0U2VsZWN0aW9uKCkgew0KKwkJcmV0dXJuIGVkaXRvclNlbGVjdGlvbjsNCisJfQ0KKw0KKwkvKioNCisJICogVGhpcyBpbXBsZW1lbnRzIHtAbGluayBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb25Qcm92aWRlcn0gdG8gc2V0IHRoaXMgZWRpdG9yJ3Mgb3ZlcmFsbCBzZWxlY3Rpb24uDQorCSAqIENhbGxpbmcgdGhpcyByZXN1bHQgd2lsbCBub3RpZnkgdGhlIGxpc3RlbmVycy4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyB2b2lkIHNldFNlbGVjdGlvbihJU2VsZWN0aW9uIHNlbGVjdGlvbikgew0KKwkJZWRpdG9yU2VsZWN0aW9uID0gc2VsZWN0aW9uOw0KKw0KKwkJZm9yIChJU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyIGxpc3RlbmVyIDogc2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVycykgew0KKwkJCWxpc3RlbmVyLnNlbGVjdGlvbkNoYW5nZWQobmV3IFNlbGVjdGlvbkNoYW5nZWRFdmVudCh0aGlzLCBzZWxlY3Rpb24pKTsNCisJCX0NCisJCXNldFN0YXR1c0xpbmVNYW5hZ2VyKHNlbGVjdGlvbik7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgdm9pZCBzZXRTdGF0dXNMaW5lTWFuYWdlcihJU2VsZWN0aW9uIHNlbGVjdGlvbikgew0KKwkJSVN0YXR1c0xpbmVNYW5hZ2VyIHN0YXR1c0xpbmVNYW5hZ2VyID0gY3VycmVudFZpZXdlciAhPSBudWxsICYmIGN1cnJlbnRWaWV3ZXIgPT0gY29udGVudE91dGxpbmVWaWV3ZXIgPw0KKwkJCWNvbnRlbnRPdXRsaW5lU3RhdHVzTGluZU1hbmFnZXIgOiBnZXRBY3Rpb25CYXJzKCkuZ2V0U3RhdHVzTGluZU1hbmFnZXIoKTsNCisNCisJCWlmIChzdGF0dXNMaW5lTWFuYWdlciAhPSBudWxsKSB7DQorCQkJaWYgKHNlbGVjdGlvbiBpbnN0YW5jZW9mIElTdHJ1Y3R1cmVkU2VsZWN0aW9uKSB7DQorCQkJCUNvbGxlY3Rpb248Pz4gY29sbGVjdGlvbiA9ICgoSVN0cnVjdHVyZWRTZWxlY3Rpb24pc2VsZWN0aW9uKS50b0xpc3QoKTsNCisJCQkJc3dpdGNoIChjb2xsZWN0aW9uLnNpemUoKSkgew0KKwkJCQkJY2FzZSAwOiB7DQorCQkJCQkJc3RhdHVzTGluZU1hbmFnZXIuc2V0TWVzc2FnZShnZXRTdHJpbmcoIl9VSV9Ob09iamVjdFNlbGVjdGVkIikpOw0KKwkJCQkJCWJyZWFrOw0KKwkJCQkJfQ0KKwkJCQkJY2FzZSAxOiB7DQorCQkJCQkJU3RyaW5nIHRleHQgPSBuZXcgQWRhcHRlckZhY3RvcnlJdGVtRGVsZWdhdG9yKGFkYXB0ZXJGYWN0b3J5KS5nZXRUZXh0KGNvbGxlY3Rpb24uaXRlcmF0b3IoKS5uZXh0KCkpOw0KKwkJCQkJCXN0YXR1c0xpbmVNYW5hZ2VyLnNldE1lc3NhZ2UoZ2V0U3RyaW5nKCJfVUlfU2luZ2xlT2JqZWN0U2VsZWN0ZWQiLCB0ZXh0KSk7DQorCQkJCQkJYnJlYWs7DQorCQkJCQl9DQorCQkJCQlkZWZhdWx0OiB7DQorCQkJCQkJc3RhdHVzTGluZU1hbmFnZXIuc2V0TWVzc2FnZShnZXRTdHJpbmcoIl9VSV9NdWx0aU9iamVjdFNlbGVjdGVkIiwgSW50ZWdlci50b1N0cmluZyhjb2xsZWN0aW9uLnNpemUoKSkpKTsNCisJCQkJCQlicmVhazsNCisJCQkJCX0NCisJCQkJfQ0KKwkJCX0NCisJCQllbHNlIHsNCisJCQkJc3RhdHVzTGluZU1hbmFnZXIuc2V0TWVzc2FnZSgiIik7DQorCQkJfQ0KKwkJfQ0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIGxvb2tzIHVwIGEgc3RyaW5nIGluIHRoZSBwbHVnaW4ncyBwbHVnaW4ucHJvcGVydGllcyBmaWxlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIGdldFN0cmluZyhTdHJpbmcga2V5KSB7DQorCQlyZXR1cm4gRmRFZGl0b3JQbHVnaW4uSU5TVEFOQ0UuZ2V0U3RyaW5nKGtleSk7DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgbG9va3MgdXAgYSBzdHJpbmcgaW4gcGx1Z2luLnByb3BlcnRpZXMsIG1ha2luZyBhIHN1YnN0aXR1dGlvbi4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByaXZhdGUgc3RhdGljIFN0cmluZyBnZXRTdHJpbmcoU3RyaW5nIGtleSwgT2JqZWN0IHMxKSB7DQorCQlyZXR1cm4gRmRFZGl0b3JQbHVnaW4uSU5TVEFOQ0UuZ2V0U3RyaW5nKGtleSwgbmV3IE9iamVjdCBbXSB7IHMxIH0pOw0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIGltcGxlbWVudHMge0BsaW5rIG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JTWVudUxpc3RlbmVyfSB0byBoZWxwIGZpbGwgdGhlIGNvbnRleHQgbWVudXMgd2l0aCBjb250cmlidXRpb25zIGZyb20gdGhlIEVkaXQgbWVudS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyB2b2lkIG1lbnVBYm91dFRvU2hvdyhJTWVudU1hbmFnZXIgbWVudU1hbmFnZXIpIHsNCisJCSgoSU1lbnVMaXN0ZW5lcilnZXRFZGl0b3JTaXRlKCkuZ2V0QWN0aW9uQmFyQ29udHJpYnV0b3IoKSkubWVudUFib3V0VG9TaG93KG1lbnVNYW5hZ2VyKTsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBFZGl0aW5nRG9tYWluQWN0aW9uQmFyQ29udHJpYnV0b3IgZ2V0QWN0aW9uQmFyQ29udHJpYnV0b3IoKSB7DQorCQlyZXR1cm4gKEVkaXRpbmdEb21haW5BY3Rpb25CYXJDb250cmlidXRvcilnZXRFZGl0b3JTaXRlKCkuZ2V0QWN0aW9uQmFyQ29udHJpYnV0b3IoKTsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBJQWN0aW9uQmFycyBnZXRBY3Rpb25CYXJzKCkgew0KKwkJcmV0dXJuIGdldEFjdGlvbkJhckNvbnRyaWJ1dG9yKCkuZ2V0QWN0aW9uQmFycygpOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIEFkYXB0ZXJGYWN0b3J5IGdldEFkYXB0ZXJGYWN0b3J5KCkgew0KKwkJcmV0dXJuIGFkYXB0ZXJGYWN0b3J5Ow0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJQE92ZXJyaWRlDQorCXB1YmxpYyB2b2lkIGRpc3Bvc2UoKSB7DQorCQl1cGRhdGVQcm9ibGVtSW5kaWNhdGlvbiA9IGZhbHNlOw0KKw0KKwkJUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLnJlbW92ZVJlc291cmNlQ2hhbmdlTGlzdGVuZXIocmVzb3VyY2VDaGFuZ2VMaXN0ZW5lcik7DQorDQorCQlnZXRTaXRlKCkuZ2V0UGFnZSgpLnJlbW92ZVBhcnRMaXN0ZW5lcihwYXJ0TGlzdGVuZXIpOw0KKw0KKwkJYWRhcHRlckZhY3RvcnkuZGlzcG9zZSgpOw0KKw0KKwkJaWYgKGdldEFjdGlvbkJhckNvbnRyaWJ1dG9yKCkuZ2V0QWN0aXZlRWRpdG9yKCkgPT0gdGhpcykgew0KKwkJCWdldEFjdGlvbkJhckNvbnRyaWJ1dG9yKCkuc2V0QWN0aXZlRWRpdG9yKG51bGwpOw0KKwkJfQ0KKw0KKwkJaWYgKHByb3BlcnR5U2hlZXRQYWdlICE9IG51bGwpIHsNCisJCQlwcm9wZXJ0eVNoZWV0UGFnZS5kaXNwb3NlKCk7DQorCQl9DQorDQorCQlpZiAoY29udGVudE91dGxpbmVQYWdlICE9IG51bGwpIHsNCisJCQljb250ZW50T3V0bGluZVBhZ2UuZGlzcG9zZSgpOw0KKwkJfQ0KKw0KKwkJc3VwZXIuZGlzcG9zZSgpOw0KKwl9DQorDQorCS8qKg0KKwkgKiBSZXR1cm5zIHdoZXRoZXIgdGhlIG91dGxpbmUgdmlldyBzaG91bGQgYmUgcHJlc2VudGVkIHRvIHRoZSB1c2VyLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIGJvb2xlYW4gc2hvd091dGxpbmVWaWV3KCkgew0KKwkJcmV0dXJuIHRydWU7DQorCX0NCit9DQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLnNvbHZlcnMuZmQvc3JjL29yZy9lY2xpcHNlL3N0ZW0vc29sdmVycy9mZC9wcmVzZW50YXRpb24vRmRFZGl0b3JQbHVnaW4uamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5zb2x2ZXJzLmZkL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3NvbHZlcnMvZmQvcHJlc2VudGF0aW9uL0ZkRWRpdG9yUGx1Z2luLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzE3YjdlNgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5zb2x2ZXJzLmZkL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3NvbHZlcnMvZmQvcHJlc2VudGF0aW9uL0ZkRWRpdG9yUGx1Z2luLmphdmEKQEAgLTAsMCArMSwxMDQgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5zb2x2ZXJzLmZkLnByZXNlbnRhdGlvbjsNCisNCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyAqIENvcHlyaWdodCAoYykgMjAwOSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4NCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzDQorICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wDQorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQNCisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbA0KKyAqDQorICogQ29udHJpYnV0b3JzOg0KKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24NCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCisNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5FTUZQbHVnaW47DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udWkuRWNsaXBzZVVJUGx1Z2luOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuUmVzb3VyY2VMb2NhdG9yOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUucHJvdmlkZXIuRWNvcmVFZGl0UGx1Z2luOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLnByb3ZpZGVyLkNvcmVFZGl0UGx1Z2luOw0KKw0KKw0KKy8qKg0KKyAqIFRoaXMgaXMgdGhlIGNlbnRyYWwgc2luZ2xldG9uIGZvciB0aGUgRmQgZWRpdG9yIHBsdWdpbi4NCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKyAqIEBnZW5lcmF0ZWQNCisgKi8NCitAU3VwcHJlc3NXYXJuaW5ncygic3ludGhldGljLWFjY2VzcyIpDQorcHVibGljIGZpbmFsIGNsYXNzIEZkRWRpdG9yUGx1Z2luIGV4dGVuZHMgRU1GUGx1Z2luIHsNCisJLyoqDQorCSAqIEtlZXAgdHJhY2sgb2YgdGhlIHNpbmdsZXRvbi4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBzdGF0aWMgZmluYWwgRmRFZGl0b3JQbHVnaW4gSU5TVEFOQ0UgPSBuZXcgRmRFZGl0b3JQbHVnaW4oKTsNCisJDQorCS8qKg0KKwkgKiBLZWVwIHRyYWNrIG9mIHRoZSBzaW5nbGV0b24uDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcml2YXRlIHN0YXRpYyBJbXBsZW1lbnRhdGlvbiBwbHVnaW47DQorDQorCS8qKg0KKwkgKiBDcmVhdGUgdGhlIGluc3RhbmNlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIEZkRWRpdG9yUGx1Z2luKCkgew0KKwkJc3VwZXINCisJCQkobmV3IFJlc291cmNlTG9jYXRvciBbXSB7DQorCQkJCUNvcmVFZGl0UGx1Z2luLklOU1RBTkNFLA0KKwkJCQlFY29yZUVkaXRQbHVnaW4uSU5TVEFOQ0UsDQorCQkJfSk7DQorCX0NCisNCisJLyoqDQorCSAqIFJldHVybnMgdGhlIHNpbmdsZXRvbiBpbnN0YW5jZSBvZiB0aGUgRWNsaXBzZSBwbHVnaW4uDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcmV0dXJuIHRoZSBzaW5nbGV0b24gaW5zdGFuY2UuDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCUBPdmVycmlkZQ0KKwlwdWJsaWMgUmVzb3VyY2VMb2NhdG9yIGdldFBsdWdpblJlc291cmNlTG9jYXRvcigpIHsNCisJCXJldHVybiBwbHVnaW47DQorCX0NCisJDQorCS8qKg0KKwkgKiBSZXR1cm5zIHRoZSBzaW5nbGV0b24gaW5zdGFuY2Ugb2YgdGhlIEVjbGlwc2UgcGx1Z2luLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHJldHVybiB0aGUgc2luZ2xldG9uIGluc3RhbmNlLg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgc3RhdGljIEltcGxlbWVudGF0aW9uIGdldFBsdWdpbigpIHsNCisJCXJldHVybiBwbHVnaW47DQorCX0NCisJDQorCS8qKg0KKwkgKiBUaGUgYWN0dWFsIGltcGxlbWVudGF0aW9uIG9mIHRoZSBFY2xpcHNlIDxiPlBsdWdpbjwvYj4uDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgc3RhdGljIGNsYXNzIEltcGxlbWVudGF0aW9uIGV4dGVuZHMgRWNsaXBzZVVJUGx1Z2luIHsNCisJCS8qKg0KKwkJICogQ3JlYXRlcyBhbiBpbnN0YW5jZS4NCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJCSAqIEBnZW5lcmF0ZWQNCisJCSAqLw0KKwkJcHVibGljIEltcGxlbWVudGF0aW9uKCkgew0KKwkJCXN1cGVyKCk7DQorCQ0KKwkJCS8vIFJlbWVtYmVyIHRoZSBzdGF0aWMgaW5zdGFuY2UuDQorCQkJLy8NCisJCQlwbHVnaW4gPSB0aGlzOw0KKwkJfQ0KKwl9DQorDQorfQ0KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5zb2x2ZXJzLmZkL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3NvbHZlcnMvZmQvcHJlc2VudGF0aW9uL0ZkTW9kZWxXaXphcmQuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5zb2x2ZXJzLmZkL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3NvbHZlcnMvZmQvcHJlc2VudGF0aW9uL0ZkTW9kZWxXaXphcmQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YTJhYWY4Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLnNvbHZlcnMuZmQvc3JjL29yZy9lY2xpcHNlL3N0ZW0vc29sdmVycy9mZC9wcmVzZW50YXRpb24vRmRNb2RlbFdpemFyZC5qYXZhCkBAIC0wLDAgKzEsNjExIEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uc29sdmVycy5mZC5wcmVzZW50YXRpb247DQorDQorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisgKiBDb3B5cmlnaHQgKGMpIDIwMDkgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuDQorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscw0KKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMA0KKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0DQorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwNCisgKg0KKyAqIENvbnRyaWJ1dG9yczoNCisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uDQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQorDQorDQoraW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7DQoraW1wb3J0IGphdmEudXRpbC5BcnJheXM7DQoraW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOw0KK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbnM7DQoraW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOw0KK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsNCitpbXBvcnQgamF2YS51dGlsLk1hcDsNCitpbXBvcnQgamF2YS51dGlsLk1pc3NpbmdSZXNvdXJjZUV4Y2VwdGlvbjsNCitpbXBvcnQgamF2YS51dGlsLlN0cmluZ1Rva2VuaXplcjsNCisNCitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUNvbnRhaW5lcjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUZpbGU7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklGb2xkZXI7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0Ow0KK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUmVzb3VyY2U7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLlJlc291cmNlc1BsdWdpbjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQcm9ncmVzc01vbml0b3I7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QYXRoOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLkNvbW1vblBsdWdpbjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlVSSTsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzczsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzc2lmaWVyOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdDsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnJlc291cmNlLlJlc291cmNlOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUucmVzb3VyY2UuUmVzb3VyY2VTZXQ7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5yZXNvdXJjZS5pbXBsLlJlc291cmNlU2V0SW1wbDsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnhtaS5YTUxSZXNvdXJjZTsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkucHJvdmlkZXIuRXh0ZW5kZWRJbWFnZVJlZ2lzdHJ5Ow0KK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5kaWFsb2dzLk1lc3NhZ2VEaWFsb2c7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvbjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU3RydWN0dXJlZFNlbGVjdGlvbjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5TdHJ1Y3R1cmVkU2VsZWN0aW9uOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS53aXphcmQuV2l6YXJkOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS53aXphcmQuV2l6YXJkUGFnZTsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5zb2x2ZXJzLmZkLkZkRmFjdG9yeTsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5zb2x2ZXJzLmZkLkZkUGFja2FnZTsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5zb2x2ZXJzLmZkLnByb3ZpZGVyLkZkRWRpdFBsdWdpbjsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LlNXVDsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5Nb2RpZnlFdmVudDsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5Nb2RpZnlMaXN0ZW5lcjsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5HcmlkRGF0YTsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5HcmlkTGF5b3V0Ow0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21ibzsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5MYWJlbDsNCitpbXBvcnQgb3JnLmVjbGlwc2UudWkuSU5ld1dpemFyZDsNCitpbXBvcnQgb3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaDsNCitpbXBvcnQgb3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaFBhZ2U7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2hQYXJ0Ow0KK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5JV29ya2JlbmNoV2luZG93Ow0KK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5QYXJ0SW5pdEV4Y2VwdGlvbjsNCitpbXBvcnQgb3JnLmVjbGlwc2UudWkuYWN0aW9ucy5Xb3Jrc3BhY2VNb2RpZnlPcGVyYXRpb247DQoraW1wb3J0IG9yZy5lY2xpcHNlLnVpLmRpYWxvZ3MuV2l6YXJkTmV3RmlsZUNyZWF0aW9uUGFnZTsNCitpbXBvcnQgb3JnLmVjbGlwc2UudWkucGFydC5GaWxlRWRpdG9ySW5wdXQ7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnVpLnBhcnQuSVNldFNlbGVjdGlvblRhcmdldDsNCisNCisNCisvKioNCisgKiBUaGlzIGlzIGEgc2ltcGxlIHdpemFyZCBmb3IgY3JlYXRpbmcgYSBuZXcgbW9kZWwgZmlsZS4NCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKyAqIEBnZW5lcmF0ZWQNCisgKi8NCitwdWJsaWMgY2xhc3MgRmRNb2RlbFdpemFyZCBleHRlbmRzIFdpemFyZCBpbXBsZW1lbnRzIElOZXdXaXphcmQgew0KKwkvKioNCisJICogVGhlIHN1cHBvcnRlZCBleHRlbnNpb25zIGZvciBjcmVhdGVkIGZpbGVzLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIHN0YXRpYyBmaW5hbCBMaXN0PFN0cmluZz4gRklMRV9FWFRFTlNJT05TID0NCisJCUNvbGxlY3Rpb25zLnVubW9kaWZpYWJsZUxpc3QoQXJyYXlzLmFzTGlzdChGZEVkaXRvclBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoIl9VSV9GZEVkaXRvckZpbGVuYW1lRXh0ZW5zaW9ucyIpLnNwbGl0KCJcXHMqLFxccyoiKSkpOw0KKw0KKwkvKioNCisJICogQSBmb3JtYXR0ZWQgbGlzdCBvZiBzdXBwb3J0ZWQgZmlsZSBleHRlbnNpb25zLCBzdWl0YWJsZSBmb3IgZGlzcGxheS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEZPUk1BVFRFRF9GSUxFX0VYVEVOU0lPTlMgPQ0KKwkJRmRFZGl0b3JQbHVnaW4uSU5TVEFOQ0UuZ2V0U3RyaW5nKCJfVUlfRmRFZGl0b3JGaWxlbmFtZUV4dGVuc2lvbnMiKS5yZXBsYWNlQWxsKCJcXHMqLFxccyoiLCAiLCAiKTsNCisNCisJLyoqDQorCSAqIFRoaXMgY2FjaGVzIGFuIGluc3RhbmNlIG9mIHRoZSBtb2RlbCBwYWNrYWdlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIEZkUGFja2FnZSBmZFBhY2thZ2UgPSBGZFBhY2thZ2UuZUlOU1RBTkNFOw0KKw0KKwkvKioNCisJICogVGhpcyBjYWNoZXMgYW4gaW5zdGFuY2Ugb2YgdGhlIG1vZGVsIGZhY3RvcnkuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgRmRGYWN0b3J5IGZkRmFjdG9yeSA9IGZkUGFja2FnZS5nZXRGZEZhY3RvcnkoKTsNCisNCisJLyoqDQorCSAqIFRoaXMgaXMgdGhlIGZpbGUgY3JlYXRpb24gcGFnZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCBGZE1vZGVsV2l6YXJkTmV3RmlsZUNyZWF0aW9uUGFnZSBuZXdGaWxlQ3JlYXRpb25QYWdlOw0KKw0KKwkvKioNCisJICogVGhpcyBpcyB0aGUgaW5pdGlhbCBvYmplY3QgY3JlYXRpb24gcGFnZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCBGZE1vZGVsV2l6YXJkSW5pdGlhbE9iamVjdENyZWF0aW9uUGFnZSBpbml0aWFsT2JqZWN0Q3JlYXRpb25QYWdlOw0KKw0KKwkvKioNCisJICogUmVtZW1iZXIgdGhlIHNlbGVjdGlvbiBkdXJpbmcgaW5pdGlhbGl6YXRpb24gZm9yIHBvcHVsYXRpbmcgdGhlIGRlZmF1bHQgY29udGFpbmVyLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIElTdHJ1Y3R1cmVkU2VsZWN0aW9uIHNlbGVjdGlvbjsNCisNCisJLyoqDQorCSAqIFJlbWVtYmVyIHRoZSB3b3JrYmVuY2ggZHVyaW5nIGluaXRpYWxpemF0aW9uLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIElXb3JrYmVuY2ggd29ya2JlbmNoOw0KKw0KKwkvKioNCisJICogQ2FjaGVzIHRoZSBuYW1lcyBvZiB0aGUgdHlwZXMgdGhhdCBjYW4gYmUgY3JlYXRlZCBhcyB0aGUgcm9vdCBvYmplY3QuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgTGlzdDxTdHJpbmc+IGluaXRpYWxPYmplY3ROYW1lczsNCisNCisJLyoqDQorCSAqIFRoaXMganVzdCByZWNvcmRzIHRoZSBpbmZvcm1hdGlvbi4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyB2b2lkIGluaXQoSVdvcmtiZW5jaCB3b3JrYmVuY2gsIElTdHJ1Y3R1cmVkU2VsZWN0aW9uIHNlbGVjdGlvbikgew0KKwkJdGhpcy53b3JrYmVuY2ggPSB3b3JrYmVuY2g7DQorCQl0aGlzLnNlbGVjdGlvbiA9IHNlbGVjdGlvbjsNCisJCXNldFdpbmRvd1RpdGxlKEZkRWRpdG9yUGx1Z2luLklOU1RBTkNFLmdldFN0cmluZygiX1VJX1dpemFyZF9sYWJlbCIpKTsNCisJCXNldERlZmF1bHRQYWdlSW1hZ2VEZXNjcmlwdG9yKEV4dGVuZGVkSW1hZ2VSZWdpc3RyeS5JTlNUQU5DRS5nZXRJbWFnZURlc2NyaXB0b3IoRmRFZGl0b3JQbHVnaW4uSU5TVEFOQ0UuZ2V0SW1hZ2UoImZ1bGwvd2l6YmFuL05ld0ZkIikpKTsNCisJfQ0KKw0KKwkvKioNCisJICogUmV0dXJucyB0aGUgbmFtZXMgb2YgdGhlIHR5cGVzIHRoYXQgY2FuIGJlIGNyZWF0ZWQgYXMgdGhlIHJvb3Qgb2JqZWN0Lg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIENvbGxlY3Rpb248U3RyaW5nPiBnZXRJbml0aWFsT2JqZWN0TmFtZXMoKSB7DQorCQlpZiAoaW5pdGlhbE9iamVjdE5hbWVzID09IG51bGwpIHsNCisJCQlpbml0aWFsT2JqZWN0TmFtZXMgPSBuZXcgQXJyYXlMaXN0PFN0cmluZz4oKTsNCisJCQlmb3IgKEVDbGFzc2lmaWVyIGVDbGFzc2lmaWVyIDogZmRQYWNrYWdlLmdldEVDbGFzc2lmaWVycygpKSB7DQorCQkJCWlmIChlQ2xhc3NpZmllciBpbnN0YW5jZW9mIEVDbGFzcykgew0KKwkJCQkJRUNsYXNzIGVDbGFzcyA9IChFQ2xhc3MpZUNsYXNzaWZpZXI7DQorCQkJCQlpZiAoIWVDbGFzcy5pc0Fic3RyYWN0KCkpIHsNCisJCQkJCQlpbml0aWFsT2JqZWN0TmFtZXMuYWRkKGVDbGFzcy5nZXROYW1lKCkpOw0KKwkJCQkJfQ0KKwkJCQl9DQorCQkJfQ0KKwkJCUNvbGxlY3Rpb25zLnNvcnQoaW5pdGlhbE9iamVjdE5hbWVzLCBDb21tb25QbHVnaW4uSU5TVEFOQ0UuZ2V0Q29tcGFyYXRvcigpKTsNCisJCX0NCisJCXJldHVybiBpbml0aWFsT2JqZWN0TmFtZXM7DQorCX0NCisNCisJLyoqDQorCSAqIENyZWF0ZSBhIG5ldyBtb2RlbC4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCBFT2JqZWN0IGNyZWF0ZUluaXRpYWxNb2RlbCgpIHsNCisJCUVDbGFzcyBlQ2xhc3MgPSAoRUNsYXNzKWZkUGFja2FnZS5nZXRFQ2xhc3NpZmllcihpbml0aWFsT2JqZWN0Q3JlYXRpb25QYWdlLmdldEluaXRpYWxPYmplY3ROYW1lKCkpOw0KKwkJRU9iamVjdCByb290T2JqZWN0ID0gZmRGYWN0b3J5LmNyZWF0ZShlQ2xhc3MpOw0KKwkJcmV0dXJuIHJvb3RPYmplY3Q7DQorCX0NCisNCisJLyoqDQorCSAqIERvIHRoZSB3b3JrIGFmdGVyIGV2ZXJ5dGhpbmcgaXMgc3BlY2lmaWVkLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJQE92ZXJyaWRlDQorCXB1YmxpYyBib29sZWFuIHBlcmZvcm1GaW5pc2goKSB7DQorCQl0cnkgew0KKwkJCS8vIFJlbWVtYmVyIHRoZSBmaWxlLg0KKwkJCS8vDQorCQkJZmluYWwgSUZpbGUgbW9kZWxGaWxlID0gZ2V0TW9kZWxGaWxlKCk7DQorDQorCQkJLy8gRG8gdGhlIHdvcmsgd2l0aGluIGFuIG9wZXJhdGlvbi4NCisJCQkvLw0KKwkJCVdvcmtzcGFjZU1vZGlmeU9wZXJhdGlvbiBvcGVyYXRpb24gPQ0KKwkJCQluZXcgV29ya3NwYWNlTW9kaWZ5T3BlcmF0aW9uKCkgew0KKwkJCQkJQE92ZXJyaWRlDQorCQkJCQlwcm90ZWN0ZWQgdm9pZCBleGVjdXRlKElQcm9ncmVzc01vbml0b3IgcHJvZ3Jlc3NNb25pdG9yKSB7DQorCQkJCQkJdHJ5IHsNCisJCQkJCQkJLy8gQ3JlYXRlIGEgcmVzb3VyY2Ugc2V0DQorCQkJCQkJCS8vDQorCQkJCQkJCVJlc291cmNlU2V0IHJlc291cmNlU2V0ID0gbmV3IFJlc291cmNlU2V0SW1wbCgpOw0KKw0KKwkJCQkJCQkvLyBHZXQgdGhlIFVSSSBvZiB0aGUgbW9kZWwgZmlsZS4NCisJCQkJCQkJLy8NCisJCQkJCQkJVVJJIGZpbGVVUkkgPSBVUkkuY3JlYXRlUGxhdGZvcm1SZXNvdXJjZVVSSShtb2RlbEZpbGUuZ2V0RnVsbFBhdGgoKS50b1N0cmluZygpLCB0cnVlKTsNCisNCisJCQkJCQkJLy8gQ3JlYXRlIGEgcmVzb3VyY2UgZm9yIHRoaXMgZmlsZS4NCisJCQkJCQkJLy8NCisJCQkJCQkJUmVzb3VyY2UgcmVzb3VyY2UgPSByZXNvdXJjZVNldC5jcmVhdGVSZXNvdXJjZShmaWxlVVJJKTsNCisNCisJCQkJCQkJLy8gQWRkIHRoZSBpbml0aWFsIG1vZGVsIG9iamVjdCB0byB0aGUgY29udGVudHMuDQorCQkJCQkJCS8vDQorCQkJCQkJCUVPYmplY3Qgcm9vdE9iamVjdCA9IGNyZWF0ZUluaXRpYWxNb2RlbCgpOw0KKwkJCQkJCQlpZiAocm9vdE9iamVjdCAhPSBudWxsKSB7DQorCQkJCQkJCQlyZXNvdXJjZS5nZXRDb250ZW50cygpLmFkZChyb290T2JqZWN0KTsNCisJCQkJCQkJfQ0KKw0KKwkJCQkJCQkvLyBTYXZlIHRoZSBjb250ZW50cyBvZiB0aGUgcmVzb3VyY2UgdG8gdGhlIGZpbGUgc3lzdGVtLg0KKwkJCQkJCQkvLw0KKwkJCQkJCQlNYXA8T2JqZWN0LCBPYmplY3Q+IG9wdGlvbnMgPSBuZXcgSGFzaE1hcDxPYmplY3QsIE9iamVjdD4oKTsNCisJCQkJCQkJb3B0aW9ucy5wdXQoWE1MUmVzb3VyY2UuT1BUSU9OX0VOQ09ESU5HLCBpbml0aWFsT2JqZWN0Q3JlYXRpb25QYWdlLmdldEVuY29kaW5nKCkpOw0KKwkJCQkJCQlyZXNvdXJjZS5zYXZlKG9wdGlvbnMpOw0KKwkJCQkJCX0NCisJCQkJCQljYXRjaCAoRXhjZXB0aW9uIGV4Y2VwdGlvbikgew0KKwkJCQkJCQlGZEVkaXRvclBsdWdpbi5JTlNUQU5DRS5sb2coZXhjZXB0aW9uKTsNCisJCQkJCQl9DQorCQkJCQkJZmluYWxseSB7DQorCQkJCQkJCXByb2dyZXNzTW9uaXRvci5kb25lKCk7DQorCQkJCQkJfQ0KKwkJCQkJfQ0KKwkJCQl9Ow0KKw0KKwkJCWdldENvbnRhaW5lcigpLnJ1bihmYWxzZSwgZmFsc2UsIG9wZXJhdGlvbik7DQorDQorCQkJLy8gU2VsZWN0IHRoZSBuZXcgZmlsZSByZXNvdXJjZSBpbiB0aGUgY3VycmVudCB2aWV3Lg0KKwkJCS8vDQorCQkJSVdvcmtiZW5jaFdpbmRvdyB3b3JrYmVuY2hXaW5kb3cgPSB3b3JrYmVuY2guZ2V0QWN0aXZlV29ya2JlbmNoV2luZG93KCk7DQorCQkJSVdvcmtiZW5jaFBhZ2UgcGFnZSA9IHdvcmtiZW5jaFdpbmRvdy5nZXRBY3RpdmVQYWdlKCk7DQorCQkJZmluYWwgSVdvcmtiZW5jaFBhcnQgYWN0aXZlUGFydCA9IHBhZ2UuZ2V0QWN0aXZlUGFydCgpOw0KKwkJCWlmIChhY3RpdmVQYXJ0IGluc3RhbmNlb2YgSVNldFNlbGVjdGlvblRhcmdldCkgew0KKwkJCQlmaW5hbCBJU2VsZWN0aW9uIHRhcmdldFNlbGVjdGlvbiA9IG5ldyBTdHJ1Y3R1cmVkU2VsZWN0aW9uKG1vZGVsRmlsZSk7DQorCQkJCWdldFNoZWxsKCkuZ2V0RGlzcGxheSgpLmFzeW5jRXhlYw0KKwkJCQkJKG5ldyBSdW5uYWJsZSgpIHsNCisJCQkJCQkgcHVibGljIHZvaWQgcnVuKCkgew0KKwkJCQkJCQkgKChJU2V0U2VsZWN0aW9uVGFyZ2V0KWFjdGl2ZVBhcnQpLnNlbGVjdFJldmVhbCh0YXJnZXRTZWxlY3Rpb24pOw0KKwkJCQkJCSB9DQorCQkJCQkgfSk7DQorCQkJfQ0KKw0KKwkJCS8vIE9wZW4gYW4gZWRpdG9yIG9uIHRoZSBuZXcgZmlsZS4NCisJCQkvLw0KKwkJCXRyeSB7DQorCQkJCXBhZ2Uub3BlbkVkaXRvcg0KKwkJCQkJKG5ldyBGaWxlRWRpdG9ySW5wdXQobW9kZWxGaWxlKSwNCisJCQkJCSB3b3JrYmVuY2guZ2V0RWRpdG9yUmVnaXN0cnkoKS5nZXREZWZhdWx0RWRpdG9yKG1vZGVsRmlsZS5nZXRGdWxsUGF0aCgpLnRvU3RyaW5nKCkpLmdldElkKCkpOw0KKwkJCX0NCisJCQljYXRjaCAoUGFydEluaXRFeGNlcHRpb24gZXhjZXB0aW9uKSB7DQorCQkJCU1lc3NhZ2VEaWFsb2cub3BlbkVycm9yKHdvcmtiZW5jaFdpbmRvdy5nZXRTaGVsbCgpLCBGZEVkaXRvclBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoIl9VSV9PcGVuRWRpdG9yRXJyb3JfbGFiZWwiKSwgZXhjZXB0aW9uLmdldE1lc3NhZ2UoKSk7DQorCQkJCXJldHVybiBmYWxzZTsNCisJCQl9DQorDQorCQkJcmV0dXJuIHRydWU7DQorCQl9DQorCQljYXRjaCAoRXhjZXB0aW9uIGV4Y2VwdGlvbikgew0KKwkJCUZkRWRpdG9yUGx1Z2luLklOU1RBTkNFLmxvZyhleGNlcHRpb24pOw0KKwkJCXJldHVybiBmYWxzZTsNCisJCX0NCisJfQ0KKw0KKwkvKioNCisJICogVGhpcyBpcyB0aGUgb25lIHBhZ2Ugb2YgdGhlIHdpemFyZC4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBjbGFzcyBGZE1vZGVsV2l6YXJkTmV3RmlsZUNyZWF0aW9uUGFnZSBleHRlbmRzIFdpemFyZE5ld0ZpbGVDcmVhdGlvblBhZ2Ugew0KKwkJLyoqDQorCQkgKiBQYXNzIGluIHRoZSBzZWxlY3Rpb24uDQorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCQkgKiBAZ2VuZXJhdGVkDQorCQkgKi8NCisJCXB1YmxpYyBGZE1vZGVsV2l6YXJkTmV3RmlsZUNyZWF0aW9uUGFnZShTdHJpbmcgcGFnZUlkLCBJU3RydWN0dXJlZFNlbGVjdGlvbiBzZWxlY3Rpb24pIHsNCisJCQlzdXBlcihwYWdlSWQsIHNlbGVjdGlvbik7DQorCQl9DQorDQorCQkvKioNCisJCSAqIFRoZSBmcmFtZXdvcmsgY2FsbHMgdGhpcyB0byBzZWUgaWYgdGhlIGZpbGUgaXMgY29ycmVjdC4NCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJCSAqIEBnZW5lcmF0ZWQNCisJCSAqLw0KKwkJQE92ZXJyaWRlDQorCQlwcm90ZWN0ZWQgYm9vbGVhbiB2YWxpZGF0ZVBhZ2UoKSB7DQorCQkJaWYgKHN1cGVyLnZhbGlkYXRlUGFnZSgpKSB7DQorCQkJCVN0cmluZyBleHRlbnNpb24gPSBuZXcgUGF0aChnZXRGaWxlTmFtZSgpKS5nZXRGaWxlRXh0ZW5zaW9uKCk7DQorCQkJCWlmIChleHRlbnNpb24gPT0gbnVsbCB8fCAhRklMRV9FWFRFTlNJT05TLmNvbnRhaW5zKGV4dGVuc2lvbikpIHsNCisJCQkJCVN0cmluZyBrZXkgPSBGSUxFX0VYVEVOU0lPTlMuc2l6ZSgpID4gMSA/ICJfV0FSTl9GaWxlbmFtZUV4dGVuc2lvbnMiIDogIl9XQVJOX0ZpbGVuYW1lRXh0ZW5zaW9uIjsNCisJCQkJCXNldEVycm9yTWVzc2FnZShGZEVkaXRvclBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoa2V5LCBuZXcgT2JqZWN0IFtdIHsgRk9STUFUVEVEX0ZJTEVfRVhURU5TSU9OUyB9KSk7DQorCQkJCQlyZXR1cm4gZmFsc2U7DQorCQkJCX0NCisJCQkJcmV0dXJuIHRydWU7DQorCQkJfQ0KKwkJCXJldHVybiBmYWxzZTsNCisJCX0NCisNCisJCS8qKg0KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkJICogQGdlbmVyYXRlZA0KKwkJICovDQorCQlwdWJsaWMgSUZpbGUgZ2V0TW9kZWxGaWxlKCkgew0KKwkJCXJldHVybiBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuZ2V0Um9vdCgpLmdldEZpbGUoZ2V0Q29udGFpbmVyRnVsbFBhdGgoKS5hcHBlbmQoZ2V0RmlsZU5hbWUoKSkpOw0KKwkJfQ0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIGlzIHRoZSBwYWdlIHdoZXJlIHRoZSB0eXBlIG9mIG9iamVjdCB0byBjcmVhdGUgaXMgc2VsZWN0ZWQuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgY2xhc3MgRmRNb2RlbFdpemFyZEluaXRpYWxPYmplY3RDcmVhdGlvblBhZ2UgZXh0ZW5kcyBXaXphcmRQYWdlIHsNCisJCS8qKg0KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkJICogQGdlbmVyYXRlZA0KKwkJICovDQorCQlwcm90ZWN0ZWQgQ29tYm8gaW5pdGlhbE9iamVjdEZpZWxkOw0KKw0KKwkJLyoqDQorCQkgKiBAZ2VuZXJhdGVkDQorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCQkgKi8NCisJCXByb3RlY3RlZCBMaXN0PFN0cmluZz4gZW5jb2RpbmdzOw0KKw0KKwkJLyoqDQorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCQkgKiBAZ2VuZXJhdGVkDQorCQkgKi8NCisJCXByb3RlY3RlZCBDb21ibyBlbmNvZGluZ0ZpZWxkOw0KKw0KKwkJLyoqDQorCQkgKiBQYXNzIGluIHRoZSBzZWxlY3Rpb24uDQorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCQkgKiBAZ2VuZXJhdGVkDQorCQkgKi8NCisJCXB1YmxpYyBGZE1vZGVsV2l6YXJkSW5pdGlhbE9iamVjdENyZWF0aW9uUGFnZShTdHJpbmcgcGFnZUlkKSB7DQorCQkJc3VwZXIocGFnZUlkKTsNCisJCX0NCisNCisJCS8qKg0KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkJICogQGdlbmVyYXRlZA0KKwkJICovDQorCQlwdWJsaWMgdm9pZCBjcmVhdGVDb250cm9sKENvbXBvc2l0ZSBwYXJlbnQpIHsNCisJCQlDb21wb3NpdGUgY29tcG9zaXRlID0gbmV3IENvbXBvc2l0ZShwYXJlbnQsIFNXVC5OT05FKTsgew0KKwkJCQlHcmlkTGF5b3V0IGxheW91dCA9IG5ldyBHcmlkTGF5b3V0KCk7DQorCQkJCWxheW91dC5udW1Db2x1bW5zID0gMTsNCisJCQkJbGF5b3V0LnZlcnRpY2FsU3BhY2luZyA9IDEyOw0KKwkJCQljb21wb3NpdGUuc2V0TGF5b3V0KGxheW91dCk7DQorDQorCQkJCUdyaWREYXRhIGRhdGEgPSBuZXcgR3JpZERhdGEoKTsNCisJCQkJZGF0YS52ZXJ0aWNhbEFsaWdubWVudCA9IEdyaWREYXRhLkZJTEw7DQorCQkJCWRhdGEuZ3JhYkV4Y2Vzc1ZlcnRpY2FsU3BhY2UgPSB0cnVlOw0KKwkJCQlkYXRhLmhvcml6b250YWxBbGlnbm1lbnQgPSBHcmlkRGF0YS5GSUxMOw0KKwkJCQljb21wb3NpdGUuc2V0TGF5b3V0RGF0YShkYXRhKTsNCisJCQl9DQorDQorCQkJTGFiZWwgY29udGFpbmVyTGFiZWwgPSBuZXcgTGFiZWwoY29tcG9zaXRlLCBTV1QuTEVGVCk7DQorCQkJew0KKwkJCQljb250YWluZXJMYWJlbC5zZXRUZXh0KEZkRWRpdG9yUGx1Z2luLklOU1RBTkNFLmdldFN0cmluZygiX1VJX01vZGVsT2JqZWN0IikpOw0KKw0KKwkJCQlHcmlkRGF0YSBkYXRhID0gbmV3IEdyaWREYXRhKCk7DQorCQkJCWRhdGEuaG9yaXpvbnRhbEFsaWdubWVudCA9IEdyaWREYXRhLkZJTEw7DQorCQkJCWNvbnRhaW5lckxhYmVsLnNldExheW91dERhdGEoZGF0YSk7DQorCQkJfQ0KKw0KKwkJCWluaXRpYWxPYmplY3RGaWVsZCA9IG5ldyBDb21ibyhjb21wb3NpdGUsIFNXVC5CT1JERVIpOw0KKwkJCXsNCisJCQkJR3JpZERhdGEgZGF0YSA9IG5ldyBHcmlkRGF0YSgpOw0KKwkJCQlkYXRhLmhvcml6b250YWxBbGlnbm1lbnQgPSBHcmlkRGF0YS5GSUxMOw0KKwkJCQlkYXRhLmdyYWJFeGNlc3NIb3Jpem9udGFsU3BhY2UgPSB0cnVlOw0KKwkJCQlpbml0aWFsT2JqZWN0RmllbGQuc2V0TGF5b3V0RGF0YShkYXRhKTsNCisJCQl9DQorDQorCQkJZm9yIChTdHJpbmcgb2JqZWN0TmFtZSA6IGdldEluaXRpYWxPYmplY3ROYW1lcygpKSB7DQorCQkJCWluaXRpYWxPYmplY3RGaWVsZC5hZGQoZ2V0TGFiZWwob2JqZWN0TmFtZSkpOw0KKwkJCX0NCisNCisJCQlpZiAoaW5pdGlhbE9iamVjdEZpZWxkLmdldEl0ZW1Db3VudCgpID09IDEpIHsNCisJCQkJaW5pdGlhbE9iamVjdEZpZWxkLnNlbGVjdCgwKTsNCisJCQl9DQorCQkJaW5pdGlhbE9iamVjdEZpZWxkLmFkZE1vZGlmeUxpc3RlbmVyKHZhbGlkYXRvcik7DQorDQorCQkJTGFiZWwgZW5jb2RpbmdMYWJlbCA9IG5ldyBMYWJlbChjb21wb3NpdGUsIFNXVC5MRUZUKTsNCisJCQl7DQorCQkJCWVuY29kaW5nTGFiZWwuc2V0VGV4dChGZEVkaXRvclBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoIl9VSV9YTUxFbmNvZGluZyIpKTsNCisNCisJCQkJR3JpZERhdGEgZGF0YSA9IG5ldyBHcmlkRGF0YSgpOw0KKwkJCQlkYXRhLmhvcml6b250YWxBbGlnbm1lbnQgPSBHcmlkRGF0YS5GSUxMOw0KKwkJCQllbmNvZGluZ0xhYmVsLnNldExheW91dERhdGEoZGF0YSk7DQorCQkJfQ0KKwkJCWVuY29kaW5nRmllbGQgPSBuZXcgQ29tYm8oY29tcG9zaXRlLCBTV1QuQk9SREVSKTsNCisJCQl7DQorCQkJCUdyaWREYXRhIGRhdGEgPSBuZXcgR3JpZERhdGEoKTsNCisJCQkJZGF0YS5ob3Jpem9udGFsQWxpZ25tZW50ID0gR3JpZERhdGEuRklMTDsNCisJCQkJZGF0YS5ncmFiRXhjZXNzSG9yaXpvbnRhbFNwYWNlID0gdHJ1ZTsNCisJCQkJZW5jb2RpbmdGaWVsZC5zZXRMYXlvdXREYXRhKGRhdGEpOw0KKwkJCX0NCisNCisJCQlmb3IgKFN0cmluZyBlbmNvZGluZyA6IGdldEVuY29kaW5ncygpKSB7DQorCQkJCWVuY29kaW5nRmllbGQuYWRkKGVuY29kaW5nKTsNCisJCQl9DQorDQorCQkJZW5jb2RpbmdGaWVsZC5zZWxlY3QoMCk7DQorCQkJZW5jb2RpbmdGaWVsZC5hZGRNb2RpZnlMaXN0ZW5lcih2YWxpZGF0b3IpOw0KKw0KKwkJCXNldFBhZ2VDb21wbGV0ZSh2YWxpZGF0ZVBhZ2UoKSk7DQorCQkJc2V0Q29udHJvbChjb21wb3NpdGUpOw0KKwkJfQ0KKw0KKwkJLyoqDQorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCQkgKiBAZ2VuZXJhdGVkDQorCQkgKi8NCisJCXByb3RlY3RlZCBNb2RpZnlMaXN0ZW5lciB2YWxpZGF0b3IgPQ0KKwkJCW5ldyBNb2RpZnlMaXN0ZW5lcigpIHsNCisJCQkJcHVibGljIHZvaWQgbW9kaWZ5VGV4dChNb2RpZnlFdmVudCBlKSB7DQorCQkJCQlzZXRQYWdlQ29tcGxldGUodmFsaWRhdGVQYWdlKCkpOw0KKwkJCQl9DQorCQkJfTsNCisNCisJCS8qKg0KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkJICogQGdlbmVyYXRlZA0KKwkJICovDQorCQlwcm90ZWN0ZWQgYm9vbGVhbiB2YWxpZGF0ZVBhZ2UoKSB7DQorCQkJcmV0dXJuIGdldEluaXRpYWxPYmplY3ROYW1lKCkgIT0gbnVsbCAmJiBnZXRFbmNvZGluZ3MoKS5jb250YWlucyhlbmNvZGluZ0ZpZWxkLmdldFRleHQoKSk7DQorCQl9DQorDQorCQkvKioNCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJCSAqIEBnZW5lcmF0ZWQNCisJCSAqLw0KKwkJQE92ZXJyaWRlDQorCQlwdWJsaWMgdm9pZCBzZXRWaXNpYmxlKGJvb2xlYW4gdmlzaWJsZSkgew0KKwkJCXN1cGVyLnNldFZpc2libGUodmlzaWJsZSk7DQorCQkJaWYgKHZpc2libGUpIHsNCisJCQkJaWYgKGluaXRpYWxPYmplY3RGaWVsZC5nZXRJdGVtQ291bnQoKSA9PSAxKSB7DQorCQkJCQlpbml0aWFsT2JqZWN0RmllbGQuY2xlYXJTZWxlY3Rpb24oKTsNCisJCQkJCWVuY29kaW5nRmllbGQuc2V0Rm9jdXMoKTsNCisJCQkJfQ0KKwkJCQllbHNlIHsNCisJCQkJCWVuY29kaW5nRmllbGQuY2xlYXJTZWxlY3Rpb24oKTsNCisJCQkJCWluaXRpYWxPYmplY3RGaWVsZC5zZXRGb2N1cygpOw0KKwkJCQl9DQorCQkJfQ0KKwkJfQ0KKw0KKwkJLyoqDQorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCQkgKiBAZ2VuZXJhdGVkDQorCQkgKi8NCisJCXB1YmxpYyBTdHJpbmcgZ2V0SW5pdGlhbE9iamVjdE5hbWUoKSB7DQorCQkJU3RyaW5nIGxhYmVsID0gaW5pdGlhbE9iamVjdEZpZWxkLmdldFRleHQoKTsNCisNCisJCQlmb3IgKFN0cmluZyBuYW1lIDogZ2V0SW5pdGlhbE9iamVjdE5hbWVzKCkpIHsNCisJCQkJaWYgKGdldExhYmVsKG5hbWUpLmVxdWFscyhsYWJlbCkpIHsNCisJCQkJCXJldHVybiBuYW1lOw0KKwkJCQl9DQorCQkJfQ0KKwkJCXJldHVybiBudWxsOw0KKwkJfQ0KKw0KKwkJLyoqDQorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCQkgKiBAZ2VuZXJhdGVkDQorCQkgKi8NCisJCXB1YmxpYyBTdHJpbmcgZ2V0RW5jb2RpbmcoKSB7DQorCQkJcmV0dXJuIGVuY29kaW5nRmllbGQuZ2V0VGV4dCgpOw0KKwkJfQ0KKw0KKwkJLyoqDQorCQkgKiBSZXR1cm5zIHRoZSBsYWJlbCBmb3IgdGhlIHNwZWNpZmllZCB0eXBlIG5hbWUuDQorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCQkgKiBAZ2VuZXJhdGVkDQorCQkgKi8NCisJCXByb3RlY3RlZCBTdHJpbmcgZ2V0TGFiZWwoU3RyaW5nIHR5cGVOYW1lKSB7DQorCQkJdHJ5IHsNCisJCQkJcmV0dXJuIEZkRWRpdFBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoIl9VSV8iICsgdHlwZU5hbWUgKyAiX3R5cGUiKTsNCisJCQl9DQorCQkJY2F0Y2goTWlzc2luZ1Jlc291cmNlRXhjZXB0aW9uIG1yZSkgew0KKwkJCQlGZEVkaXRvclBsdWdpbi5JTlNUQU5DRS5sb2cobXJlKTsNCisJCQl9DQorCQkJcmV0dXJuIHR5cGVOYW1lOw0KKwkJfQ0KKw0KKwkJLyoqDQorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCQkgKiBAZ2VuZXJhdGVkDQorCQkgKi8NCisJCXByb3RlY3RlZCBDb2xsZWN0aW9uPFN0cmluZz4gZ2V0RW5jb2RpbmdzKCkgew0KKwkJCWlmIChlbmNvZGluZ3MgPT0gbnVsbCkgew0KKwkJCQllbmNvZGluZ3MgPSBuZXcgQXJyYXlMaXN0PFN0cmluZz4oKTsNCisJCQkJZm9yIChTdHJpbmdUb2tlbml6ZXIgc3RyaW5nVG9rZW5pemVyID0gbmV3IFN0cmluZ1Rva2VuaXplcihGZEVkaXRvclBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoIl9VSV9YTUxFbmNvZGluZ0Nob2ljZXMiKSk7IHN0cmluZ1Rva2VuaXplci5oYXNNb3JlVG9rZW5zKCk7ICkgew0KKwkJCQkJZW5jb2RpbmdzLmFkZChzdHJpbmdUb2tlbml6ZXIubmV4dFRva2VuKCkpOw0KKwkJCQl9DQorCQkJfQ0KKwkJCXJldHVybiBlbmNvZGluZ3M7DQorCQl9DQorCX0NCisNCisJLyoqDQorCSAqIFRoZSBmcmFtZXdvcmsgY2FsbHMgdGhpcyB0byBjcmVhdGUgdGhlIGNvbnRlbnRzIG9mIHRoZSB3aXphcmQuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwkJQE92ZXJyaWRlDQorCXB1YmxpYyB2b2lkIGFkZFBhZ2VzKCkgew0KKwkJLy8gQ3JlYXRlIGEgcGFnZSwgc2V0IHRoZSB0aXRsZSwgYW5kIHRoZSBpbml0aWFsIG1vZGVsIGZpbGUgbmFtZS4NCisJCS8vDQorCQluZXdGaWxlQ3JlYXRpb25QYWdlID0gbmV3IEZkTW9kZWxXaXphcmROZXdGaWxlQ3JlYXRpb25QYWdlKCJXaGF0ZXZlciIsIHNlbGVjdGlvbik7DQorCQluZXdGaWxlQ3JlYXRpb25QYWdlLnNldFRpdGxlKEZkRWRpdG9yUGx1Z2luLklOU1RBTkNFLmdldFN0cmluZygiX1VJX0ZkTW9kZWxXaXphcmRfbGFiZWwiKSk7DQorCQluZXdGaWxlQ3JlYXRpb25QYWdlLnNldERlc2NyaXB0aW9uKEZkRWRpdG9yUGx1Z2luLklOU1RBTkNFLmdldFN0cmluZygiX1VJX0ZkTW9kZWxXaXphcmRfZGVzY3JpcHRpb24iKSk7DQorCQluZXdGaWxlQ3JlYXRpb25QYWdlLnNldEZpbGVOYW1lKEZkRWRpdG9yUGx1Z2luLklOU1RBTkNFLmdldFN0cmluZygiX1VJX0ZkRWRpdG9yRmlsZW5hbWVEZWZhdWx0QmFzZSIpICsgIi4iICsgRklMRV9FWFRFTlNJT05TLmdldCgwKSk7DQorCQlhZGRQYWdlKG5ld0ZpbGVDcmVhdGlvblBhZ2UpOw0KKw0KKwkJLy8gVHJ5IGFuZCBnZXQgdGhlIHJlc291cmNlIHNlbGVjdGlvbiB0byBkZXRlcm1pbmUgYSBjdXJyZW50IGRpcmVjdG9yeSBmb3IgdGhlIGZpbGUgZGlhbG9nLg0KKwkJLy8NCisJCWlmIChzZWxlY3Rpb24gIT0gbnVsbCAmJiAhc2VsZWN0aW9uLmlzRW1wdHkoKSkgew0KKwkJCS8vIEdldCB0aGUgcmVzb3VyY2UuLi4NCisJCQkvLw0KKwkJCU9iamVjdCBzZWxlY3RlZEVsZW1lbnQgPSBzZWxlY3Rpb24uaXRlcmF0b3IoKS5uZXh0KCk7DQorCQkJaWYgKHNlbGVjdGVkRWxlbWVudCBpbnN0YW5jZW9mIElSZXNvdXJjZSkgew0KKwkJCQkvLyBHZXQgdGhlIHJlc291cmNlIHBhcmVudCwgaWYgaXRzIGEgZmlsZS4NCisJCQkJLy8NCisJCQkJSVJlc291cmNlIHNlbGVjdGVkUmVzb3VyY2UgPSAoSVJlc291cmNlKXNlbGVjdGVkRWxlbWVudDsNCisJCQkJaWYgKHNlbGVjdGVkUmVzb3VyY2UuZ2V0VHlwZSgpID09IElSZXNvdXJjZS5GSUxFKSB7DQorCQkJCQlzZWxlY3RlZFJlc291cmNlID0gc2VsZWN0ZWRSZXNvdXJjZS5nZXRQYXJlbnQoKTsNCisJCQkJfQ0KKw0KKwkJCQkvLyBUaGlzIGdpdmVzIHVzIGEgZGlyZWN0b3J5Li4uDQorCQkJCS8vDQorCQkJCWlmIChzZWxlY3RlZFJlc291cmNlIGluc3RhbmNlb2YgSUZvbGRlciB8fCBzZWxlY3RlZFJlc291cmNlIGluc3RhbmNlb2YgSVByb2plY3QpIHsNCisJCQkJCS8vIFNldCB0aGlzIGZvciB0aGUgY29udGFpbmVyLg0KKwkJCQkJLy8NCisJCQkJCW5ld0ZpbGVDcmVhdGlvblBhZ2Uuc2V0Q29udGFpbmVyRnVsbFBhdGgoc2VsZWN0ZWRSZXNvdXJjZS5nZXRGdWxsUGF0aCgpKTsNCisNCisJCQkJCS8vIE1ha2UgdXAgYSB1bmlxdWUgbmV3IG5hbWUgaGVyZS4NCisJCQkJCS8vDQorCQkJCQlTdHJpbmcgZGVmYXVsdE1vZGVsQmFzZUZpbGVuYW1lID0gRmRFZGl0b3JQbHVnaW4uSU5TVEFOQ0UuZ2V0U3RyaW5nKCJfVUlfRmRFZGl0b3JGaWxlbmFtZURlZmF1bHRCYXNlIik7DQorCQkJCQlTdHJpbmcgZGVmYXVsdE1vZGVsRmlsZW5hbWVFeHRlbnNpb24gPSBGSUxFX0VYVEVOU0lPTlMuZ2V0KDApOw0KKwkJCQkJU3RyaW5nIG1vZGVsRmlsZW5hbWUgPSBkZWZhdWx0TW9kZWxCYXNlRmlsZW5hbWUgKyAiLiIgKyBkZWZhdWx0TW9kZWxGaWxlbmFtZUV4dGVuc2lvbjsNCisJCQkJCWZvciAoaW50IGkgPSAxOyAoKElDb250YWluZXIpc2VsZWN0ZWRSZXNvdXJjZSkuZmluZE1lbWJlcihtb2RlbEZpbGVuYW1lKSAhPSBudWxsOyArK2kpIHsNCisJCQkJCQltb2RlbEZpbGVuYW1lID0gZGVmYXVsdE1vZGVsQmFzZUZpbGVuYW1lICsgaSArICIuIiArIGRlZmF1bHRNb2RlbEZpbGVuYW1lRXh0ZW5zaW9uOw0KKwkJCQkJfQ0KKwkJCQkJbmV3RmlsZUNyZWF0aW9uUGFnZS5zZXRGaWxlTmFtZShtb2RlbEZpbGVuYW1lKTsNCisJCQkJfQ0KKwkJCX0NCisJCX0NCisJCWluaXRpYWxPYmplY3RDcmVhdGlvblBhZ2UgPSBuZXcgRmRNb2RlbFdpemFyZEluaXRpYWxPYmplY3RDcmVhdGlvblBhZ2UoIldoYXRldmVyMiIpOw0KKwkJaW5pdGlhbE9iamVjdENyZWF0aW9uUGFnZS5zZXRUaXRsZShGZEVkaXRvclBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoIl9VSV9GZE1vZGVsV2l6YXJkX2xhYmVsIikpOw0KKwkJaW5pdGlhbE9iamVjdENyZWF0aW9uUGFnZS5zZXREZXNjcmlwdGlvbihGZEVkaXRvclBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoIl9VSV9XaXphcmRfaW5pdGlhbF9vYmplY3RfZGVzY3JpcHRpb24iKSk7DQorCQlhZGRQYWdlKGluaXRpYWxPYmplY3RDcmVhdGlvblBhZ2UpOw0KKwl9DQorDQorCS8qKg0KKwkgKiBHZXQgdGhlIGZpbGUgZnJvbSB0aGUgcGFnZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBJRmlsZSBnZXRNb2RlbEZpbGUoKSB7DQorCQlyZXR1cm4gbmV3RmlsZUNyZWF0aW9uUGFnZS5nZXRNb2RlbEZpbGUoKTsNCisJfQ0KKw0KK30NCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkuc29sdmVycy5mZC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9zb2x2ZXJzL2ZkL3ByZXNlbnRhdGlvbi9GZFNvbHZlckFkYXB0ZXIuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5zb2x2ZXJzLmZkL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3NvbHZlcnMvZmQvcHJlc2VudGF0aW9uL0ZkU29sdmVyQWRhcHRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlkMjQ4ZTIKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkuc29sdmVycy5mZC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9zb2x2ZXJzL2ZkL3ByZXNlbnRhdGlvbi9GZFNvbHZlckFkYXB0ZXIuamF2YQpAQCAtMCwwICsxLDM5IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uc29sdmVycy5mZC5wcmVzZW50YXRpb247CisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA3LCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zb2x2ZXIuU29sdmVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zb2x2ZXIuU29sdmVyUHJvcGVydHlDb21wb3NpdGU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNvbHZlci5Tb2x2ZXJQcm9wZXJ0eUVkaXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc29sdmVyLlNvbHZlclByb3BlcnR5RWRpdG9yQWRhcHRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLk1vZGlmeUxpc3RlbmVyOworCisvKioKKyAqICAKKyAqIEFkYXB0ZXIgZm9yIFByb3BlcnR5IEVkaXRvcgorICoKKyAqLworcHVibGljIGNsYXNzIEZkU29sdmVyQWRhcHRlciBleHRlbmRzCisJCVNvbHZlclByb3BlcnR5RWRpdG9yQWRhcHRlciB7CisKKwkvKioKKwkgKiAKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgU29sdmVyUHJvcGVydHlFZGl0b3IgY3JlYXRlU29sdmVyUHJvcGVydHlFZGl0b3IoCisJCQlTb2x2ZXJQcm9wZXJ0eUNvbXBvc2l0ZSBzb2x2ZXJQcm9wZXJ0eUNvbXBvc2l0ZSwKKwkJCWludCBzdHlsZSwgTW9kaWZ5TGlzdGVuZXIgcHJvamVjdFZhbGlkYXRvcikgeworCQlyZXR1cm4gbmV3IEZkU29sdmVyUHJvcGVydHlFZGl0b3IoCisJCQkJc29sdmVyUHJvcGVydHlDb21wb3NpdGUsIHN0eWxlLAorCQkJCShTb2x2ZXIpIGdldFRhcmdldCgpLCBwcm9qZWN0VmFsaWRhdG9yKTsKKwl9IC8vIGNyZWF0ZVNvbHZlclByb3BlcnR5RWRpdG9yCisKK30gLy8gRmRTb2x2ZXJBZGFwdGVyCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkuc29sdmVycy5mZC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9zb2x2ZXJzL2ZkL3ByZXNlbnRhdGlvbi9GZFNvbHZlclByb3BlcnR5RWRpdG9yLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkuc29sdmVycy5mZC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9zb2x2ZXJzL2ZkL3ByZXNlbnRhdGlvbi9GZFNvbHZlclByb3BlcnR5RWRpdG9yLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGFiYTg0YQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5zb2x2ZXJzLmZkL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3NvbHZlcnMvZmQvcHJlc2VudGF0aW9uL0ZkU29sdmVyUHJvcGVydHlFZGl0b3IuamF2YQpAQCAtMCwwICsxLDE3MyBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnNvbHZlcnMuZmQucHJlc2VudGF0aW9uOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA5IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOworaW1wb3J0IGphdmEudXRpbC5MaXN0OworaW1wb3J0IGphdmEudXRpbC5NYXA7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FU3RydWN0dXJhbEZlYXR1cmU7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuQ29tcG9zZWRBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbVByb3BlcnR5RGVzY3JpcHRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbVByb3BlcnR5U291cmNlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5TVEVNVVJJOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zb2x2ZXIuU29sdmVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uc29sdmVycy5mZC5GZEZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5zb2x2ZXJzLmZkLkZkUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnNvbHZlcnMuZmQuRmluaXRlRGlmZmVyZW5jZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnVpLmFkYXB0ZXJzLnByb3BlcnR5c3RyaW5ncy5Qcm9wZXJ0eVN0cmluZ1Byb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udWkuYWRhcHRlcnMucHJvcGVydHlzdHJpbmdzLlByb3BlcnR5U3RyaW5nUHJvdmlkZXJBZGFwdGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udWkuYWRhcHRlcnMucHJvcGVydHlzdHJpbmdzLlByb3BlcnR5U3RyaW5nUHJvdmlkZXJBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuU1dUOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuTW9kaWZ5TGlzdGVuZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5HcmlkRGF0YTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QubGF5b3V0LkdyaWRMYXlvdXQ7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkxhYmVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlRleHQ7CisKK3B1YmxpYyBjbGFzcyBGZFNvbHZlclByb3BlcnR5RWRpdG9yIGV4dGVuZHMgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNvbHZlci5Tb2x2ZXJQcm9wZXJ0eUVkaXRvciB7CisKKwkvKioKKwkgKiBAcGFyYW0gcGFyZW50CisJICogQHBhcmFtIHN0eWxlCisJICogQHBhcmFtIGRpc2Vhc2VNb2RlbAorCSAqIEBwYXJhbSBwcm9qZWN0VmFsaWRhdG9yCisJICovCisJcHVibGljIEZkU29sdmVyUHJvcGVydHlFZGl0b3IoQ29tcG9zaXRlIHBhcmVudCwKKwkJCWludCBzdHlsZSwgU29sdmVyIHNvbHZlciwKKwkJCU1vZGlmeUxpc3RlbmVyIHByb2plY3RWYWxpZGF0b3IpIHsKKwkJc3VwZXIocGFyZW50LCBzdHlsZSk7CisJCWZpbmFsIEdyaWRMYXlvdXQgZ3JpZExheW91dCA9IG5ldyBHcmlkTGF5b3V0KCk7CisJCWdyaWRMYXlvdXQubnVtQ29sdW1ucyA9IDM7CisJCXNldExheW91dChncmlkTGF5b3V0KTsKKworCQkvLyBHZXQgdGhlIGFkYXB0ZXIgdGhhdCB3aWxsIHByb3ZpZGUgTkxTJ2QgbmFtZXMgZm9yIHRoZQorCQkvLyBwcm9wZXJ0aWVzIG9mIHRoZSBkaXNlYXNlIG1vZGVsCisJCWZpbmFsIFByb3BlcnR5U3RyaW5nUHJvdmlkZXJBZGFwdGVyIHBzcGEgPSAoUHJvcGVydHlTdHJpbmdQcm92aWRlckFkYXB0ZXIpIFByb3BlcnR5U3RyaW5nUHJvdmlkZXJBZGFwdGVyRmFjdG9yeS5JTlNUQU5DRQorCQkJCS5hZGFwdChzb2x2ZXIsIFByb3BlcnR5U3RyaW5nUHJvdmlkZXIuY2xhc3MpOworCisJCWZpbmFsIENvbXBvc2VkQWRhcHRlckZhY3RvcnkgaXRlbVByb3ZpZGVyRmFjdG9yeSA9IG5ldyBDb21wb3NlZEFkYXB0ZXJGYWN0b3J5KAorCQkJCUNvbXBvc2VkQWRhcHRlckZhY3RvcnkuRGVzY3JpcHRvci5SZWdpc3RyeS5JTlNUQU5DRSk7CisJCQorCQlmaW5hbCBJSXRlbVByb3BlcnR5U291cmNlIHByb3BlcnR5U291cmNlID0gKElJdGVtUHJvcGVydHlTb3VyY2UpIGl0ZW1Qcm92aWRlckZhY3RvcnkKKwkJCQkuYWRhcHQoc29sdmVyLCBJSXRlbVByb3BlcnR5U291cmNlLmNsYXNzKTsKKwkJCisJCWZpbmFsIExpc3Q8SUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I+IHByb3BlcnRpZXMgPSBwcm9wZXJ0eVNvdXJjZQorCQkJCS5nZXRQcm9wZXJ0eURlc2NyaXB0b3JzKHNvbHZlcik7CisKKwkJZm9yIChmaW5hbCBJSXRlbVByb3BlcnR5RGVzY3JpcHRvciBkZXNjcmlwdG9yIDogcHJvcGVydGllcykgeworCQkJZmluYWwgRVN0cnVjdHVyYWxGZWF0dXJlIGZlYXR1cmUgPSAoRVN0cnVjdHVyYWxGZWF0dXJlKSBkZXNjcmlwdG9yCisJCQkJCS5nZXRGZWF0dXJlKG51bGwpOworCQkJLy8gSXMgdGhpcyBhIGRpc2Vhc2UgbW9kZWwgcHJvcGVydHkgdGhhdCB0aGUgdXNlciBzaG91bGQgc3BlY2lmeT8KKwkJCWlmIChpc1VzZXJTcGVjaWZpZWRTb2x2ZXJQcm9wZXJ0eShmZWF0dXJlKSkgeworCQkJCS8vIFllcworCQkJCWZpbmFsIExhYmVsIGxhYmVsID0gbmV3IExhYmVsKHRoaXMsIFNXVC5OT05FKTsKKwkJCQlsYWJlbC5zZXRUZXh0KHBzcGEuZ2V0UHJvcGVydHlOYW1lKGRlc2NyaXB0b3IpKTsKKworCQkJCWZpbmFsIEdyaWREYXRhIGxhYmVsR0QgPSBuZXcgR3JpZERhdGEoR3JpZERhdGEuQkVHSU5OSU5HKTsKKwkJCQlsYWJlbEdELmdyYWJFeGNlc3NIb3Jpem9udGFsU3BhY2UgPSB0cnVlOworCQkJCWxhYmVsR0QuaG9yaXpvbnRhbEFsaWdubWVudCA9IFNXVC5GSUxMOworCQkJCWxhYmVsR0QuaG9yaXpvbnRhbEluZGVudCA9IDA7CisJCQkJbGFiZWwuc2V0TGF5b3V0RGF0YShsYWJlbEdEKTsKKworCQkJCS8vIEdldCBhIHN0cmluZyB2YWx1ZSBmb3IgdGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlIGZlYXR1cmUKKworCQkJCWZpbmFsIFN0cmluZyBkZWZhdWx0VmFsdWVTdHJpbmcgPSBnZXRQcm9wZXJ0eURlZmF1bHRWYWx1ZVN0cmluZyhkZXNjcmlwdG9yKTsKKworCQkJCWZpbmFsIFRleHQgdGV4dCA9IG5ldyBUZXh0KHRoaXMsIFNXVC5CT1JERVIgfCBTV1QuVFJBSUwpOworCQkJCXRleHQuc2V0VGV4dChkZWZhdWx0VmFsdWVTdHJpbmcpOworCQkJCXRleHQuc2V0VG9vbFRpcFRleHQocHNwYS5nZXRQcm9wZXJ0eVRvb2xUaXAoZGVzY3JpcHRvcikpOworCQkJCW1hcC5wdXQoZmVhdHVyZSwgdGV4dCk7CisKKwkJCQlmaW5hbCBHcmlkRGF0YSB0ZXh0R0QgPSBuZXcgR3JpZERhdGEoR3JpZERhdGEuRU5EKTsKKwkJCQl0ZXh0R0QuZ3JhYkV4Y2Vzc0hvcml6b250YWxTcGFjZSA9IHRydWU7CisJCQkJdGV4dEdELmhvcml6b250YWxBbGlnbm1lbnQgPSBTV1QuRklMTDsKKwkJCQl0ZXh0LnNldExheW91dERhdGEodGV4dEdEKTsKKworCQkJCXRleHQuYWRkTW9kaWZ5TGlzdGVuZXIocHJvamVjdFZhbGlkYXRvcik7CisKKwkJCQlmaW5hbCBMYWJlbCB1bml0TGFiZWwgPSBuZXcgTGFiZWwodGhpcywgU1dULk5PTkUpOworCQkJCXVuaXRMYWJlbC5zZXRUZXh0KHBzcGEuZ2V0UHJvcGVydHlVbml0cyhkZXNjcmlwdG9yKSk7CisJCQkJZmluYWwgR3JpZERhdGEgdW5pdExhYmVsR0QgPSBuZXcgR3JpZERhdGEoR3JpZERhdGEuRU5EKTsKKwkJCQl1bml0TGFiZWxHRC52ZXJ0aWNhbEFsaWdubWVudCA9IEdyaWREYXRhLkNFTlRFUjsKKwkJCQl1bml0TGFiZWwuc2V0TGF5b3V0RGF0YSh1bml0TGFiZWxHRCk7CisKKwkJCX0gLy8gaWYgdXNlciBzcGVjaWZpZWQKKwkJfSAvLyBmb3IgZWFjaCBzb2x2ZXIgcHJvcGVydHkKKwl9CisJCisJLyoqCisJICogQHBhcmFtIGZlYXR1cmUKKwkgKiBAcmV0dXJuIDxjb2RlPnRydWU8L2NvZGU+IGlmIHRoZSBmZWF0dXJlIGlzIGEgZHVibGluIGNvcmUgZmVhdHVyZSAKKwkgKiB0aGF0IGlzIHNwZWNpZmllZCBieSBhIHVzZXIuCisJICovCisJcHVibGljIHN0YXRpYyBib29sZWFuIGlzVXNlclNwZWNpZmllZFNvbHZlclByb3BlcnR5KGZpbmFsIEVTdHJ1Y3R1cmFsRmVhdHVyZSBmZWF0dXJlKSB7CisJCWJvb2xlYW4gcmV0VmFsdWUgPSBmYWxzZTsKKwkJZmluYWwgRUNsYXNzIGNvbnRhaW5pbmdDbGFzcyA9IGZlYXR1cmUuZ2V0RUNvbnRhaW5pbmdDbGFzcygpOworCQkvLyBJcyBpdCBhIGRpc2Vhc2UgbW9kZWwgcHJvcGVydHk/CisJCWlmIChjb250YWluaW5nQ2xhc3MuZXF1YWxzKEZkUGFja2FnZS5lSU5TVEFOQ0UuZ2V0RmluaXRlRGlmZmVyZW5jZSgpKSkgeworCQkJcmV0VmFsdWUgPSB0cnVlOworCQl9IC8vIGlmIGEgZGlzZWFzZSBtb2RlbCBwcm9wZXJ0eQorCQlyZXR1cm4gcmV0VmFsdWU7CisJfSAvLyBpc1VzZXJTcGVjaWZpZWREaXNlYXNlTW9kZWxQcm9wZXJ0eQorCisJcHJvdGVjdGVkIGZpbmFsIE1hcDxFU3RydWN0dXJhbEZlYXR1cmUsIFRleHQ+IG1hcCA9IG5ldyBIYXNoTWFwPEVTdHJ1Y3R1cmFsRmVhdHVyZSwgVGV4dD4oKTsKKwlwcm90ZWN0ZWQgU3RyaW5nIGVycm9yTWVzc2FnZTsKKworCXB1YmxpYyBGZFNvbHZlclByb3BlcnR5RWRpdG9yKENvbXBvc2l0ZSBwYXJlbnQsIGludCBzdHlsZSkgeworCQlzdXBlcihwYXJlbnQsc3R5bGUpOworCX0KKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS51aS53aXphcmRzLlN0YW5kYXJkRGlzZWFzZU1vZGVsUHJvcGVydHlFZGl0b3IjcG9wdWxhdGUob3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLkRpc2Vhc2VNb2RlbCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBwb3B1bGF0ZShTb2x2ZXIgc29sdmVyKSB7CisJCXN1cGVyLnBvcHVsYXRlKHNvbHZlcik7CisJCWZvciAoZmluYWwgTWFwLkVudHJ5PEVTdHJ1Y3R1cmFsRmVhdHVyZSwgVGV4dD4gZW50cnkgOiBtYXAuZW50cnlTZXQoKSkgeworCQkKKwkJCXN3aXRjaCAoZW50cnkuZ2V0S2V5KCkuZ2V0RmVhdHVyZUlEKCkpIHsKKwkJCWRlZmF1bHQ6CisJCQkJYnJlYWs7CisJCQl9IC8vIHN3aXRjaAorCQl9IC8vIGZvciBlYWNoIE1hcC5lbnRyeQorCX0KKworCUBPdmVycmlkZQorCXB1YmxpYyBib29sZWFuIHZhbGlkYXRlKCkgeworCQlib29sZWFuIHJldFZhbHVlID0gdHJ1ZTsKKwkJcmV0dXJuIHJldFZhbHVlOworCX0gLy8gdmFsaWRhdGUKKworCQorCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGRpc3Bvc2UoKSB7CisJCXN1cGVyLmRpc3Bvc2UoKTsKKwl9CisKKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgdm9pZCBjaGVja1N1YmNsYXNzKCkgeworCQkvLyBEaXNhYmxlIHRoZSBjaGVjayB0aGF0IHByZXZlbnRzIHN1Yi1jbGFzc2luZyBvZiBTV1QgY29tcG9uZW50cworCX0KKworCUBPdmVycmlkZQorCXB1YmxpYyBTb2x2ZXIgY3JlYXRlQW5kUG9wdWxhdGVTb2x2ZXIoKSB7CisJCVNvbHZlciByZXRWYWx1ZSA9IEZkRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlRmluaXRlRGlmZmVyZW5jZSgpOworCQlyZXRWYWx1ZS5zZXRVUkkoU1RFTVVSSS5jcmVhdGVVUkkoRmluaXRlRGlmZmVyZW5jZS5VUklfVFlQRV9TT0xWRVJfU0VHTUVOVCsiLyIrU1RFTVVSSS5nZW5lcmF0ZVVuaXF1ZVBhcnQoKSkpOworCQl0aGlzLnBvcHVsYXRlKHJldFZhbHVlKTsKKwkJcmV0dXJuIHJldFZhbHVlOworCX0KKworCit9IC8vIFJrU29sdmVyUHJvcGVydHlFZGl0b3IKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5zb2x2ZXJzLmZkL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3NvbHZlcnMvZmQvcHJlc2VudGF0aW9uL0ZkU29sdmVyUHJvcGVydHlFZGl0b3JBZGFwdGVyLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkuc29sdmVycy5mZC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9zb2x2ZXJzL2ZkL3ByZXNlbnRhdGlvbi9GZFNvbHZlclByb3BlcnR5RWRpdG9yQWRhcHRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMxZGIxMzUKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkuc29sdmVycy5mZC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9zb2x2ZXJzL2ZkL3ByZXNlbnRhdGlvbi9GZFNvbHZlclByb3BlcnR5RWRpdG9yQWRhcHRlci5qYXZhCkBAIC0wLDAgKzEsMzMgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5zb2x2ZXJzLmZkLnByZXNlbnRhdGlvbjsKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LkFkYXB0ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNvbHZlci5Tb2x2ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNvbHZlci5Tb2x2ZXJQcm9wZXJ0eUNvbXBvc2l0ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc29sdmVyLlNvbHZlclByb3BlcnR5RWRpdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuTW9kaWZ5TGlzdGVuZXI7CisKK3B1YmxpYyBjbGFzcyBGZFNvbHZlclByb3BlcnR5RWRpdG9yQWRhcHRlciBleHRlbmRzIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zb2x2ZXIuU29sdmVyUHJvcGVydHlFZGl0b3JBZGFwdGVyCisJCWltcGxlbWVudHMgQWRhcHRlciB7CisKKwkvKioKKwkgKiAKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgU29sdmVyUHJvcGVydHlFZGl0b3IgY3JlYXRlU29sdmVyUHJvcGVydHlFZGl0b3IoCisJCQlTb2x2ZXJQcm9wZXJ0eUNvbXBvc2l0ZSBzb2x2ZXJQcm9wZXJ0eUNvbXBvc2l0ZSwKKwkJCWludCBzdHlsZSwgTW9kaWZ5TGlzdGVuZXIgcHJvamVjdFZhbGlkYXRvcikgeworCQlyZXR1cm4gbmV3IEZkU29sdmVyUHJvcGVydHlFZGl0b3IoCisJCQkJc29sdmVyUHJvcGVydHlDb21wb3NpdGUsIHN0eWxlLAorCQkJCShTb2x2ZXIpIGdldFRhcmdldCgpLCBwcm9qZWN0VmFsaWRhdG9yKTsKKwl9IC8vIGNyZWF0ZVNvbHZlclByb3BlcnR5RWRpdG9yCisKK30gLy8gU29sdmVyUHJvcGVydHlFZGl0b3JBZGFwdGVyCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkuc29sdmVycy5mZC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9zb2x2ZXJzL2ZkL3ByZXNlbnRhdGlvbi9GZFNvbHZlclByb3BlcnR5RWRpdG9yQWRhcHRlckZhY3RvcnkuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5zb2x2ZXJzLmZkL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3NvbHZlcnMvZmQvcHJlc2VudGF0aW9uL0ZkU29sdmVyUHJvcGVydHlFZGl0b3JBZGFwdGVyRmFjdG9yeS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFmZGY4YzcKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkuc29sdmVycy5mZC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9zb2x2ZXJzL2ZkL3ByZXNlbnRhdGlvbi9GZFNvbHZlclByb3BlcnR5RWRpdG9yQWRhcHRlckZhY3RvcnkuamF2YQpAQCAtMCwwICsxLDYwIEBACisvLyBEaXNlYXNlTW9kZWxQcm9wZXJ0eUVkaXRvckFkYXB0ZXJGYWN0b3J5LmphdmEKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5zb2x2ZXJzLmZkLnByZXNlbnRhdGlvbjsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA5IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LkFkYXB0ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNvbHZlci5Tb2x2ZXJQcm9wZXJ0eUVkaXRvckFkYXB0ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNvbHZlci5Tb2x2ZXJQcm9wZXJ0eUVkaXRvckFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uc29sdmVycy5mZC51dGlsLkZkQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuSVN0YXJ0dXA7CisKKy8qKgorICoKKyAqLworcHVibGljIGNsYXNzIEZkU29sdmVyUHJvcGVydHlFZGl0b3JBZGFwdGVyRmFjdG9yeSBleHRlbmRzIEZkQWRhcHRlckZhY3RvcnkgCisJaW1wbGVtZW50cyBTb2x2ZXJQcm9wZXJ0eUVkaXRvckFkYXB0ZXJGYWN0b3J5LCBJU3RhcnR1cCB7CisKKwkvKioKKwkgKiAKKwkgKi8KKwlwdWJsaWMgRmRTb2x2ZXJQcm9wZXJ0eUVkaXRvckFkYXB0ZXJGYWN0b3J5KCkgeworCQlzdXBlcigpOworCQlTb2x2ZXJQcm9wZXJ0eUVkaXRvckFkYXB0ZXJGYWN0b3J5LklOU1RBTkNFCisJCQkJLmFkZEFkYXB0ZXJGYWN0b3J5KHRoaXMpOworCX0KKwkKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnVpLklTdGFydHVwI2Vhcmx5U3RhcnR1cCgpCisJICovCisJcHVibGljIHZvaWQgZWFybHlTdGFydHVwKCkgeworCQkvLyBOb3RoaW5nIHRvIGRvIGhlcmUuIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBhZnRlciB0aGUgY29uc3RydWN0b3IgaGFzCisJCS8vIHJ1biB3aGljaCBpcyB0aGUgZW50aXJlIHBvaW50IG9mIGVhcmx5IGFjdGl2YXRpb24gd2hpY2ggY2F1c2VzIHRoZQorCQkvLyBmYWN0b3J5IHRvIGJlIGFkZGVkIHRvIHRoZSBQcm9wZXJ0eVN0cmluZ1Byb3ZpZGVyQWRhcHRlckZhY3RvcnkuSU5TVEFOQ0UKKwl9CisKKwkvKioKKwkgKiAKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVGaW5pdGVEaWZmZXJlbmNlQWRhcHRlcigpIHsKKwkJcmV0dXJuIG5ldyBGZFNvbHZlckFkYXB0ZXIoKTsKKwl9CisKKwkvKioKKwkgKiAKKwkgKi8KKwlwdWJsaWMgYm9vbGVhbiBpc0ZhY3RvcnlGb3JUeXBlKE9iamVjdCB0eXBlKSB7CisJCXJldHVybiB0eXBlID09IFNvbHZlclByb3BlcnR5RWRpdG9yQWRhcHRlci5jbGFzcworCQkJCXx8IHN1cGVyLmlzRmFjdG9yeUZvclR5cGUodHlwZSk7CisJfQorfSAKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5zb2x2ZXJzLmZkL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3NvbHZlcnMvZmQvcHJlc2VudGF0aW9uL0ZkU29sdmVyUHJvcGVydHlTdHJpbmdQcm92aWRlckFkYXB0ZXJGYWN0b3J5LmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkuc29sdmVycy5mZC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9zb2x2ZXJzL2ZkL3ByZXNlbnRhdGlvbi9GZFNvbHZlclByb3BlcnR5U3RyaW5nUHJvdmlkZXJBZGFwdGVyRmFjdG9yeS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhiNTYzNTkKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkuc29sdmVycy5mZC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9zb2x2ZXJzL2ZkL3ByZXNlbnRhdGlvbi9GZFNvbHZlclByb3BlcnR5U3RyaW5nUHJvdmlkZXJBZGFwdGVyRmFjdG9yeS5qYXZhCkBAIC0wLDAgKzEsMTA2IEBACisvLyBTdGFuZGFyZFByb3BlcnR5U3RyaW5nUHJvdmlkZXJBZGFwdGVyRmFjdG9yeS5qYXZhCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uc29sdmVycy5mZC5wcmVzZW50YXRpb247CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5BZGFwdGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FU3RydWN0dXJhbEZlYXR1cmU7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNvbHZlci51dGlsLlNvbHZlckFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uc29sdmVycy5mZC5GZFBhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS51aS5hZGFwdGVycy5wcm9wZXJ0eXN0cmluZ3MuUHJvcGVydHlTdHJpbmdQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnVpLmFkYXB0ZXJzLnByb3BlcnR5c3RyaW5ncy5Qcm9wZXJ0eVN0cmluZ1Byb3ZpZGVyQWRhcHRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnVpLmFkYXB0ZXJzLnByb3BlcnR5c3RyaW5ncy5Qcm9wZXJ0eVN0cmluZ1Byb3ZpZGVyQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS51aS5zb2x2ZXJzLmZkLlNvbHZlck1lc3NhZ2VzOworCisvKioKKyAqIFRoaXMgY2xhc3MgaXMgdXNlZCB0byBOTFMnZCBzdHJpbmdzIGZvciB7QGxpbmsgRGlzZWFzZU1vZGVsfSBwcm9wZXJ0aWVzLiAKKyAqLworcHVibGljIGNsYXNzIEZkU29sdmVyUHJvcGVydHlTdHJpbmdQcm92aWRlckFkYXB0ZXJGYWN0b3J5IGV4dGVuZHMKKwkgU29sdmVyQWRhcHRlckZhY3RvcnkgaW1wbGVtZW50cyBQcm9wZXJ0eVN0cmluZ1Byb3ZpZGVyQWRhcHRlckZhY3RvcnkgeworCisJCisJUHJvcGVydHlTdHJpbmdQcm92aWRlckFkYXB0ZXIgYWRhcHRlciA9IG51bGw7CisKKwkvKioKKwkgKiBEZWZhdWx0IENvbnN0cnVjdG9yCisJICovCisJcHVibGljIEZkU29sdmVyUHJvcGVydHlTdHJpbmdQcm92aWRlckFkYXB0ZXJGYWN0b3J5KCkgeworCQlzdXBlcigpOworCQlQcm9wZXJ0eVN0cmluZ1Byb3ZpZGVyQWRhcHRlckZhY3RvcnkuSU5TVEFOQ0UuYWRkQWRhcHRlckZhY3RvcnkodGhpcyk7CisJfQorCQorCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuaW1wbC5BZGFwdGVyRmFjdG9yeUltcGwjaXNGYWN0b3J5Rm9yVHlwZShqYXZhLmxhbmcuT2JqZWN0KQorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBib29sZWFuIGlzRmFjdG9yeUZvclR5cGUoT2JqZWN0IHR5cGUpIHsKKwkJaWYodHlwZSA9PSBGZFBhY2thZ2UuZUlOU1RBTkNFKSByZXR1cm4gdHJ1ZTsKKwkJcmV0dXJuICBzdXBlci5pc0ZhY3RvcnlGb3JUeXBlKHR5cGUpIHx8IHR5cGUgPT0gUHJvcGVydHlTdHJpbmdQcm92aWRlci5jbGFzczsKKwl9CisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC51dGlsLlN0YW5kYXJkQWRhcHRlckZhY3RvcnkjY3JlYXRlRGlzZWFzZU1vZGVsQWRhcHRlcigpCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlU29sdmVyQWRhcHRlcigpIHsKKwkJLy8gSGF2ZSB3ZSBjcmVhdGVkIG9uZSBiZWZvcmU/CisJCWlmIChhZGFwdGVyID09IG51bGwpIHsKKwkJCS8vIE5vCisJCQlhZGFwdGVyID0gbmV3IFNvbHZlclByb3BlcnR5U3RyaW5nUHJvdmlkZXJBZGFwdGVyKCk7CisJCX0gLy8gaWYgd2UgZGlkbid0IGNyZWF0ZSBvbmUgYmVmb3JlCisJCXJldHVybiBhZGFwdGVyOworCX0gLy8gY3JlYXRlRGlzZWFzZU1vZGVsQWRhcHRlcgorCisJLyoqCisJICogVGhpcyBjbGFzcyByZXByZXNlbnRzIAorCSAqLworCXB1YmxpYyBzdGF0aWMgY2xhc3MgU29sdmVyUHJvcGVydHlTdHJpbmdQcm92aWRlckFkYXB0ZXIgZXh0ZW5kcworCQkJUHJvcGVydHlTdHJpbmdQcm92aWRlckFkYXB0ZXIgeworCisJCS8qKgorCQkgKiBAcGFyYW0gZGVzY3JpcHRvcgorCQkgKiBAcmV0dXJuIHRoZSBOTFMnZCBuYW1lIG9mIHRoZSBwcm9wZXJ0eSB0byBkaXNwbGF5IHRvIHRoZSB1c2VyCisJCSAqLworCQlwdWJsaWMgU3RyaW5nIGdldFByb3BlcnR5TmFtZShJSXRlbVByb3BlcnR5RGVzY3JpcHRvciBkZXNjcmlwdG9yKSB7CQorCQkJcmV0dXJuIFNvbHZlck1lc3NhZ2VzCisJCQkJCS5nZXRTdHJpbmcoKChFU3RydWN0dXJhbEZlYXR1cmUpIGRlc2NyaXB0b3IKKwkJCQkJCQkuZ2V0RmVhdHVyZShudWxsKSkuZ2V0TmFtZSgpKTsKKwkJfSAvLyBnZXRQcm9wZXJ0eU5hbWUKKworCQkvKioKKwkJICogQHBhcmFtIGRlc2NyaXB0b3IKKwkJICogQHJldHVybiB0aGUgTkxTJ2QgdG9vbCB0aXAgdGV4dCB0aGF0IGRlc2NyaWJlcyB0aGUgcHJvcGVydHkKKwkJICovCisJCXB1YmxpYyBTdHJpbmcgZ2V0UHJvcGVydHlUb29sVGlwKAorCQkJCUlJdGVtUHJvcGVydHlEZXNjcmlwdG9yIGRlc2NyaXB0b3IpIHsKKwkJCWZpbmFsIEVTdHJ1Y3R1cmFsRmVhdHVyZSBmZWF0dXJlID0gKEVTdHJ1Y3R1cmFsRmVhdHVyZSkgZGVzY3JpcHRvcgorCQkJCQkuZ2V0RmVhdHVyZShudWxsKTsKKwkJCXJldHVybiBTb2x2ZXJNZXNzYWdlcy5nZXRTdHJpbmcoZmVhdHVyZS5nZXROYW1lKCkKKwkJCQkJKyBUVF9TVUZGSVgpOworCQl9IC8vIGdldFByb3BlcnR5VG9vbFRpcAorCisJCS8qKgorCQkgKiBAcGFyYW0gZGVzY3JpcHRvcgorCQkgKiBAcmV0dXJuIHRoZSBOTFMnZCB0ZXh0IHRoYXQgcmVwcmVzZW50cyB0aGUgdW5pdHMgb2YgdGhlCisJCSAqICAgICAgICAgcHJvcGVydHkKKwkJICovCisJCXB1YmxpYyBTdHJpbmcgZ2V0UHJvcGVydHlVbml0cygKKwkJCQlJSXRlbVByb3BlcnR5RGVzY3JpcHRvciBkZXNjcmlwdG9yKSB7CisJCQlmaW5hbCBFU3RydWN0dXJhbEZlYXR1cmUgZmVhdHVyZSA9IChFU3RydWN0dXJhbEZlYXR1cmUpIGRlc2NyaXB0b3IKKwkJCQkJLmdldEZlYXR1cmUobnVsbCk7CisJCQlyZXR1cm4gU29sdmVyTWVzc2FnZXMuZ2V0U3RyaW5nKGZlYXR1cmUuZ2V0TmFtZSgpCisJCQkJCSsgVU5JVF9TVUZGSVgpOworCQl9IC8vIGdldFByb3BlcnR5VW5pdHMKKworCX0gLy8gU3RhbmRhcmRQcm9wZXJ0eVN0cmluZ1Byb3ZpZGVyQWRhcHRlcgorfSAvLyBTdGFuZGFyZFByb3BlcnR5U3RyaW5nUHJvdmlkZXJBZGFwdGVyRmFjdG9yeQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLnNvbHZlcnMuZmQvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvc29sdmVycy9mZC9BY3RpdmF0b3IuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5zb2x2ZXJzLmZkL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3NvbHZlcnMvZmQvQWN0aXZhdG9yLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGJjZjA2ZAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5zb2x2ZXJzLmZkL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3NvbHZlcnMvZmQvQWN0aXZhdG9yLmphdmEKQEAgLTAsMCArMSwxMDYgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS51aS5zb2x2ZXJzLmZkOworCitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlN0YXR1czsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnNvbHZlcnMuZmQucHJlc2VudGF0aW9uLkZkRWRpdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uc29sdmVycy5mZC5wcmVzZW50YXRpb24uRmRTb2x2ZXJQcm9wZXJ0eVN0cmluZ1Byb3ZpZGVyQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkucGx1Z2luLkFic3RyYWN0VUlQbHVnaW47CitpbXBvcnQgb3JnLm9zZ2kuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHQ7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworLyoqCisgKiBUaGUgbWFpbiBwbHVnaW4gY2xhc3MgdG8gYmUgdXNlZCBpbiB0aGUgZGVza3RvcC4KKyAqLworcHVibGljIGNsYXNzIEFjdGl2YXRvciBleHRlbmRzIEFic3RyYWN0VUlQbHVnaW4geworCisJLyoqCisJICogVGhlIHN5bWJvbGljIGlkZW50aWZpZXIgZm9yIHRoaXMgcGx1Zy1pbgorCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFBMVUdJTl9JRCA9ICJvcmcuZWNsaXBzZS5zdGVtLnVpLnNvbHZlci5mZCI7IC8vJE5PTi1OTFMtMSQKKworCS8vIFRoZSBzaGFyZWQgaW5zdGFuY2UuCisJcHJpdmF0ZSBzdGF0aWMgQWN0aXZhdG9yIHBsdWdpbjsKKworCS8qKgorCSAqIFRoZSBjb25zdHJ1Y3Rvci4KKwkgKi8KKwlwdWJsaWMgQWN0aXZhdG9yKCkgeworCQlzdXBlcigpOworCQlwbHVnaW4gPSB0aGlzOworCX0KKworCS8qKgorCSAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCB1cG9uIHBsdWctaW4gYWN0aXZhdGlvbgorCSAqIAorCSAqIEBwYXJhbSBjb250ZXh0CisJICogQHRocm93cyBFeGNlcHRpb24KKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBzdGFydChCdW5kbGVDb250ZXh0IGNvbnRleHQpIHRocm93cyBFeGNlcHRpb24geworCQlzdXBlci5zdGFydChjb250ZXh0KTsKKwkJbmV3IEZkU29sdmVyUHJvcGVydHlTdHJpbmdQcm92aWRlckFkYXB0ZXJGYWN0b3J5KCk7CisJCW5ldyBGZEVkaXRvcigpOworCX0gLy8gc3RhcnQKKworCS8qKgorCSAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCB3aGVuIHRoZSBwbHVnLWluIGlzIHN0b3BwZWQKKwkgKiAKKwkgKiBAcGFyYW0gY29udGV4dAorCSAqIEB0aHJvd3MgRXhjZXB0aW9uCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgc3RvcChCdW5kbGVDb250ZXh0IGNvbnRleHQpIHRocm93cyBFeGNlcHRpb24geworCQlzdXBlci5zdG9wKGNvbnRleHQpOworCQlwbHVnaW4gPSBudWxsOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIHNoYXJlZCBpbnN0YW5jZS4KKwkgKiAKKwkgKiBAcmV0dXJuIHRoZSBzaGFyZWQgaW5zdGFuY2UuCisJICovCisJcHVibGljIHN0YXRpYyBBY3RpdmF0b3IgZ2V0RGVmYXVsdCgpIHsKKwkJcmV0dXJuIHBsdWdpbjsKKwl9CisKKwkKKwkvKioKKwkgKiBMb2cgYW4gZXJyb3IgdG8gdGhlIElMb2cgZm9yIHRoaXMgcGx1Z2luCisJICogCisJICogQHBhcmFtIG1lc3NhZ2UKKwkgKiAgICAgICAgICAgIHRoZSBsb2NhbGl6ZWQgZXJyb3IgbWVzc2FnZSB0ZXh0CisJICogQHBhcmFtIGV4Y2VwdGlvbgorCSAqICAgICAgICAgICAgdGhlIGFzc29jaWF0ZWQgZXhjZXB0aW9uLCBvciBudWxsCisJICovCisJcHVibGljIHN0YXRpYyB2b2lkIGxvZ0Vycm9yKFN0cmluZyBtZXNzYWdlLCBUaHJvd2FibGUgZXhjZXB0aW9uKSB7CisJCXBsdWdpbi5nZXRMb2coKS5sb2coCisJCQkJbmV3IFN0YXR1cyhJU3RhdHVzLkVSUk9SLCBwbHVnaW4uZ2V0QnVuZGxlKCkuZ2V0U3ltYm9saWNOYW1lKCksCisJCQkJCQkwLCBtZXNzYWdlLCBleGNlcHRpb24pKTsKKwl9IC8vIGxvZ0Vycm9yCisKKwkvKioKKwkgKiBMb2cgaW5mb3JtYXRpb24gdG8gdGhlIElMb2cgZm9yIHRoaXMgcGx1Z2luCisJICogCisJICogQHBhcmFtIG1lc3NhZ2UKKwkgKiAgICAgICAgICAgIHRoZSBsb2NhbGl6ZWQgaW5mb3JtYXRpb24gbWVzc2FnZSB0ZXh0CisJICogQHBhcmFtIGV4Y2VwdGlvbgorCSAqICAgICAgICAgICAgdGhlIGFzc29jaWF0ZWQgZXhjZXB0aW9uLCBvciBudWxsCisJICovCisJcHVibGljIHN0YXRpYyB2b2lkIGxvZ0luZm9ybWF0aW9uKFN0cmluZyBtZXNzYWdlLCBUaHJvd2FibGUgZXhjZXB0aW9uKSB7CisJCXBsdWdpbi5nZXRMb2coKS5sb2coCisJCQkJbmV3IFN0YXR1cyhJU3RhdHVzLklORk8sIHBsdWdpbi5nZXRCdW5kbGUoKS5nZXRTeW1ib2xpY05hbWUoKSwKKwkJCQkJCTAsIG1lc3NhZ2UsIGV4Y2VwdGlvbikpOworCX0gLy8gbG9nSW5mb3JtYXRpb24KKworfSAvLyBBY3RpdmF0b3IKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5zb2x2ZXJzLmZkL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3NvbHZlcnMvZmQvU29sdmVyTWVzc2FnZXMuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5zb2x2ZXJzLmZkL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3NvbHZlcnMvZmQvU29sdmVyTWVzc2FnZXMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMDlhNWFmCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLnNvbHZlcnMuZmQvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvc29sdmVycy9mZC9Tb2x2ZXJNZXNzYWdlcy5qYXZhCkBAIC0wLDAgKzEsNDYgQEAKKy8vIERpc2Vhc2VXaXphcmRNZXNzYWdlcy5qYXZhCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0udWkuc29sdmVycy5mZDsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqYXZhLnV0aWwuTWlzc2luZ1Jlc291cmNlRXhjZXB0aW9uOworaW1wb3J0IGphdmEudXRpbC5SZXNvdXJjZUJ1bmRsZTsKKworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5Db25zdGFudHM7CisKKy8qKgorICogVGhpcyBjbGFzcyBpcyB0aGUgUmVzb3VyY2UgQnVuZGxlIGZvciB0aGlzIHBhY2thZ2UuCisgKi8KK3B1YmxpYyBjbGFzcyBTb2x2ZXJNZXNzYWdlcyB7CisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEJVTkRMRV9OQU1FID0gQ29uc3RhbnRzLklEX1JPT1QKKwkJCSsgIi51aS5zb2x2ZXJzLmZkLm1lc3NhZ2VzIjsgLy8kTk9OLU5MUy0xJAorCisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgUmVzb3VyY2VCdW5kbGUgUkVTT1VSQ0VfQlVORExFID0gUmVzb3VyY2VCdW5kbGUKKwkJCS5nZXRCdW5kbGUoQlVORExFX05BTUUpOworCisJcHJpdmF0ZSBTb2x2ZXJNZXNzYWdlcygpIHsKKwkJLy8gZW1wdHkKKwl9CisKKwkvKioKKwkgKiBAcGFyYW0ga2V5CisJICogICAgICAgICAgICB0aGUga2V5IGZvciB0aGUgbWVzc2FnZQorCSAqIEByZXR1cm4gdGhlIHN0cmluZyB0aGF0IG1hdGNoZXMgdGhlIGtleQorCSAqLworCXB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldFN0cmluZyhmaW5hbCBTdHJpbmcga2V5KSB7CisJCXRyeSB7CisJCQlyZXR1cm4gUkVTT1VSQ0VfQlVORExFLmdldFN0cmluZyhrZXkpOworCQl9IGNhdGNoIChmaW5hbCBNaXNzaW5nUmVzb3VyY2VFeGNlcHRpb24gZSkgeworCQkJcmV0dXJuICchJyArIGtleSArICchJzsKKwkJfQorCX0gLy8gZ2V0U3RyaW5nCit9IC8vIFNvbHZlck1lc3NhZ2VzCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkuc29sdmVycy5mZC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9zb2x2ZXJzL2ZkL21lc3NhZ2VzLnByb3BlcnRpZXMgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkuc29sdmVycy5mZC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9zb2x2ZXJzL2ZkL21lc3NhZ2VzLnByb3BlcnRpZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmQ2MGNkZgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5zb2x2ZXJzLmZkL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3NvbHZlcnMvZmQvbWVzc2FnZXMucHJvcGVydGllcwpAQCAtMCwwICsxLDEwIEBACisjLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisjICogQ29weXJpZ2h0IChjKSAyMDA5IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLg0KKyMgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzDQorIyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMA0KKyMgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdA0KKyMgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbA0KKyMgKg0KKyMgKiBDb250cmlidXRvcnM6DQorIyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24NCisjICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLnNvbHZlcnMucmsvLmNsYXNzcGF0aCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5zb2x2ZXJzLnJrLy5jbGFzc3BhdGgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDVmMDI0ZQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5zb2x2ZXJzLnJrLy5jbGFzc3BhdGgKQEAgLTAsMCArMSw3IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/Pg0KKzxjbGFzc3BhdGg+DQorCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJzcmMiIHBhdGg9InNyYyIvPg0KKwk8Y2xhc3NwYXRoZW50cnkga2luZD0iY29uIiBwYXRoPSJvcmcuZWNsaXBzZS5qZHQubGF1bmNoaW5nLkpSRV9DT05UQUlORVIvb3JnLmVjbGlwc2UuamR0LmludGVybmFsLmRlYnVnLnVpLmxhdW5jaGVyLlN0YW5kYXJkVk1UeXBlL0oyU0UtMS41Ii8+DQorCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJjb24iIHBhdGg9Im9yZy5lY2xpcHNlLnBkZS5jb3JlLnJlcXVpcmVkUGx1Z2lucyIvPg0KKwk8Y2xhc3NwYXRoZW50cnkga2luZD0ib3V0cHV0IiBwYXRoPSJiaW4iLz4NCis8L2NsYXNzcGF0aD4NCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkuc29sdmVycy5yay8ucHJvamVjdCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5zb2x2ZXJzLnJrLy5wcm9qZWN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNhNzI5NmMKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkuc29sdmVycy5yay8ucHJvamVjdApAQCAtMCwwICsxLDI4IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/Pg0KKzxwcm9qZWN0RGVzY3JpcHRpb24+DQorCTxuYW1lPm9yZy5lY2xpcHNlLnN0ZW0udWkuc29sdmVycy5yazwvbmFtZT4NCisJPGNvbW1lbnQ+PC9jb21tZW50Pg0KKwk8cHJvamVjdHM+DQorCTwvcHJvamVjdHM+DQorCTxidWlsZFNwZWM+DQorCQk8YnVpbGRDb21tYW5kPg0KKwkJCTxuYW1lPm9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFidWlsZGVyPC9uYW1lPg0KKwkJCTxhcmd1bWVudHM+DQorCQkJPC9hcmd1bWVudHM+DQorCQk8L2J1aWxkQ29tbWFuZD4NCisJCTxidWlsZENvbW1hbmQ+DQorCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLk1hbmlmZXN0QnVpbGRlcjwvbmFtZT4NCisJCQk8YXJndW1lbnRzPg0KKwkJCTwvYXJndW1lbnRzPg0KKwkJPC9idWlsZENvbW1hbmQ+DQorCQk8YnVpbGRDb21tYW5kPg0KKwkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5TY2hlbWFCdWlsZGVyPC9uYW1lPg0KKwkJCTxhcmd1bWVudHM+DQorCQkJPC9hcmd1bWVudHM+DQorCQk8L2J1aWxkQ29tbWFuZD4NCisJPC9idWlsZFNwZWM+DQorCTxuYXR1cmVzPg0KKwkJPG5hdHVyZT5vcmcuZWNsaXBzZS5qZHQuY29yZS5qYXZhbmF0dXJlPC9uYXR1cmU+DQorCQk8bmF0dXJlPm9yZy5lY2xpcHNlLnBkZS5QbHVnaW5OYXR1cmU8L25hdHVyZT4NCisJPC9uYXR1cmVzPg0KKzwvcHJvamVjdERlc2NyaXB0aW9uPg0KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5zb2x2ZXJzLnJrLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5zb2x2ZXJzLnJrLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZTQ3ZGY0Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLnNvbHZlcnMucmsvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzCkBAIC0wLDAgKzEsMjEgQEAKKyNUdWUgU2VwIDAxIDE2OjUyOjU4IEVEVCAyMDA5CitlY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29kZWdlbi5pbmxpbmVKc3JCeXRlY29kZT1lbmFibGVkCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb2RlZ2VuLnRhcmdldFBsYXRmb3JtPTEuNQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29tcGxpYW5jZT0xLjUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmRvYy5jb21tZW50LnN1cHBvcnQ9ZGlzYWJsZWQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uYXNzZXJ0SWRlbnRpZmllcj1lcnJvcgorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5lbnVtSWRlbnRpZmllcj1lcnJvcgorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbnZhbGlkSmF2YWRvYz13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmludmFsaWRKYXZhZG9jVGFncz1lbmFibGVkCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmludmFsaWRKYXZhZG9jVGFnc0RlcHJlY2F0ZWRSZWY9ZW5hYmxlZAorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbnZhbGlkSmF2YWRvY1RhZ3NOb3RWaXNpYmxlUmVmPWVuYWJsZWQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW52YWxpZEphdmFkb2NUYWdzVmlzaWJpbGl0eT1wdWJsaWMKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0phdmFkb2NDb21tZW50cz13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdKYXZhZG9jQ29tbWVudHNPdmVycmlkaW5nPWVuYWJsZWQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0phdmFkb2NDb21tZW50c1Zpc2liaWxpdHk9cHVibGljCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdKYXZhZG9jVGFnRGVzY3JpcHRpb249cmV0dXJuX3RhZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nSmF2YWRvY1RhZ3M9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nSmF2YWRvY1RhZ3NPdmVycmlkaW5nPWVuYWJsZWQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0phdmFkb2NUYWdzVmlzaWJpbGl0eT1wdWJsaWMKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnNvdXJjZT0xLjUKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5zb2x2ZXJzLnJrL01FVEEtSU5GL01BTklGRVNULk1GIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLnNvbHZlcnMucmsvTUVUQS1JTkYvTUFOSUZFU1QuTUYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTM1OGYwOQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5zb2x2ZXJzLnJrL01FVEEtSU5GL01BTklGRVNULk1GCkBAIC0wLDAgKzEsMTggQEAKK01hbmlmZXN0LVZlcnNpb246IDEuMA0KK0J1bmRsZS1NYW5pZmVzdFZlcnNpb246IDINCitCdW5kbGUtTmFtZTogb3JnLmVjbGlwc2Uuc3RlbS51aS5zb2x2ZXJzLnJrIFBsdWctaW4NCitCdW5kbGUtU3ltYm9saWNOYW1lOiBvcmcuZWNsaXBzZS5zdGVtLnVpLnNvbHZlcnMucms7c2luZ2xldG9uOj10cnVlDQorQnVuZGxlLVZlcnNpb246IDEuMi4xDQorUmVxdWlyZS1CdW5kbGU6IG9yZy5lY2xpcHNlLmVtZi5lY29yZSwNCisgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLA0KKyBvcmcuZWNsaXBzZS5zdGVtLnNvbHZlcnMucms7dmlzaWJpbGl0eTo9cmVleHBvcnQsDQorIG9yZy5lY2xpcHNlLmVtZi5lY29yZS5lZGl0LA0KKyBvcmcuZWNsaXBzZS5vc2dpLA0KKyBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUsDQorIG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLA0KKyBvcmcuZWNsaXBzZS51aS5pZGUsDQorIG9yZy5lY2xpcHNlLnN0ZW0udWkNCitCdW5kbGUtQWN0aXZhdGlvblBvbGljeTogbGF6eQ0KK0J1bmRsZS1BY3RpdmF0b3I6IG9yZy5lY2xpcHNlLnN0ZW0udWkuc29sdmVycy5yay5BY3RpdmF0b3INCitCdW5kbGUtUmVxdWlyZWRFeGVjdXRpb25FbnZpcm9ubWVudDogSjJTRS0xLjUNCitFeHBvcnQtUGFja2FnZTogb3JnLmVjbGlwc2Uuc3RlbS5zb2x2ZXJzLnJrLnByZXNlbnRhdGlvbg0KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5zb2x2ZXJzLnJrL2J1aWxkLnByb3BlcnRpZXMgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkuc29sdmVycy5yay9idWlsZC5wcm9wZXJ0aWVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYwZDM2ODcKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkuc29sdmVycy5yay9idWlsZC5wcm9wZXJ0aWVzCkBAIC0wLDAgKzEsMTcgQEAKKw0KKyMgPGNvcHlyaWdodD4NCisjIDwvY29weXJpZ2h0Pg0KKyMNCisjICRJZCQNCisNCitiaW4uaW5jbHVkZXMgPSAuLFwNCisgICAgICAgICAgICAgICBpY29ucy8sXA0KKyAgICAgICAgICAgICAgIE1FVEEtSU5GLyxcDQorICAgICAgICAgICAgICAgcGx1Z2luLnhtbCxcDQorICAgICAgICAgICAgICAgcGx1Z2luLnByb3BlcnRpZXMsXA0KKyAgICAgICAgICAgICAgIHBsdWdpbl9rci5wcm9wZXJ0aWVzLFwNCisgICAgICAgICAgICAgICBwbHVnaW5fZGUucHJvcGVydGllcyxcDQorICAgICAgICAgICAgICAgcGx1Z2luX3poLnByb3BlcnRpZXMNCitqYXJzLmNvbXBpbGUub3JkZXIgPSAuDQorc291cmNlLi4gPSBzcmMvDQorb3V0cHV0Li4gPSBiaW4vDQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLnNvbHZlcnMucmsvaWNvbnMvZnVsbC9vYmoxNi9Sa01vZGVsRmlsZS5naWYgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkuc29sdmVycy5yay9pY29ucy9mdWxsL29iajE2L1JrTW9kZWxGaWxlLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZDRmYTBhCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLnNvbHZlcnMucmsvaWNvbnMvZnVsbC9vYmoxNi9Sa01vZGVsRmlsZS5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLnNvbHZlcnMucmsvaWNvbnMvZnVsbC93aXpiYW4vTmV3UmsuZ2lmIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLnNvbHZlcnMucmsvaWNvbnMvZnVsbC93aXpiYW4vTmV3UmsuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU1MmNiOTAKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkuc29sdmVycy5yay9pY29ucy9mdWxsL3dpemJhbi9OZXdSay5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLnNvbHZlcnMucmsvcGx1Z2luLnByb3BlcnRpZXMgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkuc29sdmVycy5yay9wbHVnaW4ucHJvcGVydGllcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMWZhMzg1Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLnNvbHZlcnMucmsvcGx1Z2luLnByb3BlcnRpZXMKQEAgLTAsMCArMSw3NiBAQAorDQorIy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorIyAqIENvcHlyaWdodCAoYykgMjAwOSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4NCisjICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscw0KKyMgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjANCisjICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQNCisjICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwNCisjICoNCisjICogQ29udHJpYnV0b3JzOg0KKyMgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uDQorIyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KKw0KKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCisjIFRvIGNvZGUgZGV2ZWxvcGVyOg0KKyMgICBEbyBOT1QgY2hhbmdlIHRoZSBwcm9wZXJ0aWVzIGJldHdlZW4gdGhpcyBsaW5lIGFuZCB0aGUNCisjICAgIiUlJSBFTkQgT0YgVFJBTlNMQVRFRCBQUk9QRVJUSUVTICUlJSIgbGluZS4NCisjICAgTWFrZSBhIG5ldyBwcm9wZXJ0eSBuYW1lLCBhcHBlbmQgdG8gdGhlIGVuZCBvZiB0aGUgZmlsZSBhbmQgY2hhbmdlDQorIyAgIHRoZSBjb2RlIHRvIHVzZSB0aGUgbmV3IHByb3BlcnR5Lg0KKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCisNCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQorIyAlJSUgRU5EIE9GIFRSQU5TTEFURUQgUFJPUEVSVElFUyAlJSUNCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQorDQorDQorcGx1Z2luTmFtZSA9IFNURU0gUnVuZ2UgS3V0dGEgU29sdmVyIFVJDQorcHJvdmlkZXJOYW1lID0gRWNsaXBzZS5vcmcNCisNCitfVUlfUmtFZGl0b3JfbWVudSA9ICZSayBFZGl0b3INCisNCitfVUlfQ3JlYXRlQ2hpbGRfbWVudV9pdGVtID0gJk5ldyBDaGlsZA0KK19VSV9DcmVhdGVTaWJsaW5nX21lbnVfaXRlbSA9IE4mZXcgU2libGluZw0KKw0KK19VSV9TaG93UHJvcGVydGllc1ZpZXdfbWVudV9pdGVtID0gU2hvdyAmUHJvcGVydGllcyBWaWV3DQorX1VJX1JlZnJlc2hWaWV3ZXJfbWVudV9pdGVtID0gJlJlZnJlc2gNCisNCitfVUlfU2VsZWN0aW9uUGFnZV9sYWJlbCA9IFNlbGVjdGlvbg0KK19VSV9QYXJlbnRQYWdlX2xhYmVsID0gUGFyZW50DQorX1VJX0xpc3RQYWdlX2xhYmVsID0gTGlzdA0KK19VSV9UcmVlUGFnZV9sYWJlbCA9IFRyZWUNCitfVUlfVGFibGVQYWdlX2xhYmVsID0gVGFibGUNCitfVUlfVHJlZVdpdGhDb2x1bW5zUGFnZV9sYWJlbCA9IFRyZWUgd2l0aCBDb2x1bW5zDQorX1VJX09iamVjdENvbHVtbl9sYWJlbCA9IE9iamVjdA0KK19VSV9TZWxmQ29sdW1uX2xhYmVsID0gU2VsZg0KKw0KK19VSV9Ob09iamVjdFNlbGVjdGVkID0gU2VsZWN0ZWQgTm90aGluZw0KK19VSV9TaW5nbGVPYmplY3RTZWxlY3RlZCA9IFNlbGVjdGVkIE9iamVjdDogezB9DQorX1VJX011bHRpT2JqZWN0U2VsZWN0ZWQgPSBTZWxlY3RlZCB7MH0gT2JqZWN0cw0KKw0KK19VSV9PcGVuRWRpdG9yRXJyb3JfbGFiZWwgPSBPcGVuIEVkaXRvcg0KKw0KK19VSV9XaXphcmRfY2F0ZWdvcnkgPSBFeGFtcGxlIEVNRiBNb2RlbCBDcmVhdGlvbiBXaXphcmRzDQorDQorX1VJX0NyZWF0ZU1vZGVsRXJyb3JfbWVzc2FnZSA9IFByb2JsZW1zIGVuY291bnRlcmVkIGluIGZpbGUgInswfSINCisNCitfVUlfUmtNb2RlbFdpemFyZF9sYWJlbCA9IFJrIE1vZGVsDQorX1VJX1JrTW9kZWxXaXphcmRfZGVzY3JpcHRpb24gPSBDcmVhdGUgYSBuZXcgUmsgbW9kZWwNCisNCitfVUlfUmtFZGl0b3JfbGFiZWwgPSBSayBNb2RlbCBFZGl0b3INCisNCitfVUlfUmtFZGl0b3JGaWxlbmFtZURlZmF1bHRCYXNlID0gTXkNCitfVUlfUmtFZGl0b3JGaWxlbmFtZUV4dGVuc2lvbnMgPSByaw0KKw0KK19VSV9XaXphcmRfbGFiZWwgPSBOZXcNCisNCitfV0FSTl9GaWxlbmFtZUV4dGVuc2lvbiA9IFRoZSBmaWxlIG5hbWUgbXVzdCBlbmQgaW4gJycuezB9JycNCitfV0FSTl9GaWxlbmFtZUV4dGVuc2lvbnMgPSBUaGUgZmlsZSBuYW1lIG11c3QgaGF2ZSBvbmUgb2YgdGhlIGZvbGxvd2luZyBleHRlbnNpb25zOiB7MH0NCisNCitfVUlfTW9kZWxPYmplY3QgPSAmTW9kZWwgT2JqZWN0DQorX1VJX1hNTEVuY29kaW5nID0gJlhNTCBFbmNvZGluZw0KK19VSV9YTUxFbmNvZGluZ0Nob2ljZXMgPSBVVEYtOCBBU0NJSSBVVEYtMTYgVVRGLTE2QkUgVVRGLTE2TEUgSVNPLTg4NTktMQ0KK19VSV9XaXphcmRfaW5pdGlhbF9vYmplY3RfZGVzY3JpcHRpb24gPSBTZWxlY3QgYSBtb2RlbCBvYmplY3QgdG8gY3JlYXRlDQorDQorX1VJX0ZpbGVDb25mbGljdF9sYWJlbCA9IEZpbGUgQ29uZmxpY3QNCitfV0FSTl9GaWxlQ29uZmxpY3QgPSBUaGVyZSBhcmUgdW5zYXZlZCBjaGFuZ2VzIHRoYXQgY29uZmxpY3Qgd2l0aCBjaGFuZ2VzIG1hZGUgb3V0c2lkZSB0aGUgZWRpdG9yLiAgRG8geW91IHdpc2ggdG8gZGlzY2FyZCB0aGlzIGVkaXRvcidzIGNoYW5nZXM/DQorDQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLnNvbHZlcnMucmsvcGx1Z2luLnhtbCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5zb2x2ZXJzLnJrL3BsdWdpbi54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjFhYTY1NQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5zb2x2ZXJzLnJrL3BsdWdpbi54bWwKQEAgLTAsMCArMSwxOCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzw/ZWNsaXBzZSB2ZXJzaW9uPSIzLjAiPz4KKworPCEtLQorIDxjb3B5cmlnaHQ+CisgPC9jb3B5cmlnaHQ+CisKKyAkSWQ6IHBsdWdpbi54bWwsdiAxLjQgMjAwOS8wMy8xMSAwMzo0NToyNiBzZWRsdW5kIEV4cCAkCistLT4KKworPHBsdWdpbj4KKyAgICA8ZXh0ZW5zaW9uCisgICAgICAgIHBvaW50PSJvcmcuZWNsaXBzZS51aS5zdGFydHVwIj4KKyAgICAgPHN0YXJ0dXAKKyAgICAgICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLnN0ZW0uc29sdmVycy5yay5wcmVzZW50YXRpb24uUmtTb2x2ZXJQcm9wZXJ0eUVkaXRvckFkYXB0ZXJGYWN0b3J5Ij4KKyAgICAgPC9zdGFydHVwPgorICA8L2V4dGVuc2lvbj4KKzwvcGx1Z2luPgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLnNvbHZlcnMucmsvcGx1Z2luX2RlLnByb3BlcnRpZXMgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkuc29sdmVycy5yay9wbHVnaW5fZGUucHJvcGVydGllcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZTgxMDgxCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLnNvbHZlcnMucmsvcGx1Z2luX2RlLnByb3BlcnRpZXMKQEAgLTAsMCArMSw3NiBAQAorCisjLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyMgKiBDb3B5cmlnaHQgKGMpIDIwMDkgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisjICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworIyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorIyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisjICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyMgKgorIyAqIENvbnRyaWJ1dG9yczoKKyMgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisjICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyMgVG8gY29kZSBkZXZlbG9wZXI6CisjICAgRG8gTk9UIGNoYW5nZSB0aGUgcHJvcGVydGllcyBiZXR3ZWVuIHRoaXMgbGluZSBhbmQgdGhlCisjICAgIiUlJSBFTkQgT0YgVFJBTlNMQVRFRCBQUk9QRVJUSUVTICUlJSIgbGluZS4KKyMgICBNYWtlIGEgbmV3IHByb3BlcnR5IG5hbWUsIGFwcGVuZCB0byB0aGUgZW5kIG9mIHRoZSBmaWxlIGFuZCBjaGFuZ2UKKyMgICB0aGUgY29kZSB0byB1c2UgdGhlIG5ldyBwcm9wZXJ0eS4KKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorIyAlJSUgRU5EIE9GIFRSQU5TTEFURUQgUFJPUEVSVElFUyAlJSUKKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworCitwbHVnaW5OYW1lPVNURU0gUnVuZ2UtS3V0dGEtR2xlaWNodW5nc2xcdTAwZjZzZXItQmVudXR6ZXJvYmVyZmxcdTAwZTRjaGUKK3Byb3ZpZGVyTmFtZT1FY2xpcHNlLm9yZworCitfVUlfUmtFZGl0b3JfbWVudT0mUmsgRWRpdG9yCisKK19VSV9DcmVhdGVDaGlsZF9tZW51X2l0ZW09Jk5ldyBDaGlsZAorX1VJX0NyZWF0ZVNpYmxpbmdfbWVudV9pdGVtPU4mZXVlcyBHZXNjaHdpc3RlcnRlaWwKKworX1VJX1Nob3dQcm9wZXJ0aWVzVmlld19tZW51X2l0ZW09U2hvdyAmIFByb3BlcnRpZXMgVmlldworX1VJX1JlZnJlc2hWaWV3ZXJfbWVudV9pdGVtPSZSZWZyZXNoCisKK19VSV9TZWxlY3Rpb25QYWdlX2xhYmVsPUF1c3dhaGwKK19VSV9QYXJlbnRQYWdlX2xhYmVsPUVsdGVybnRlaWwKK19VSV9MaXN0UGFnZV9sYWJlbD1MaXN0ZQorX1VJX1RyZWVQYWdlX2xhYmVsPUJhdW0KK19VSV9UYWJsZVBhZ2VfbGFiZWw9VGFiZWxsZQorX1VJX1RyZWVXaXRoQ29sdW1uc1BhZ2VfbGFiZWw9QmF1bSBtaXQgU3BhbHRlbgorX1VJX09iamVjdENvbHVtbl9sYWJlbD1PYmpla3QKK19VSV9TZWxmQ29sdW1uX2xhYmVsPVNlbGJzdAorCitfVUlfTm9PYmplY3RTZWxlY3RlZD1OaWNodHMgYXVzZ2V3XHUwMGU0aGx0CitfVUlfU2luZ2xlT2JqZWN0U2VsZWN0ZWQ9QXVzZ2V3XHUwMGU0aGx0ZXMgT2JqZWt0OiB7MH0KK19VSV9NdWx0aU9iamVjdFNlbGVjdGVkPUF1c2dld1x1MDBlNGhsdGUgezB9IE9iamVrdGUKKworX1VJX09wZW5FZGl0b3JFcnJvcl9sYWJlbD1FZGl0b3IgXHUwMGY2ZmZuZW4KKworX1VJX1dpemFyZF9jYXRlZ29yeT1CZWlzcGllbCBFTUYgTW9kZWxsIEVyc3RlbGx1bmdzYXNzaXN0ZW50CisKK19VSV9DcmVhdGVNb2RlbEVycm9yX21lc3NhZ2U9QXVmZ2V0cmV0ZW5lIFByb2JsZW1lIGluIGRlciBEYXRlaSAiezB9IgorCitfVUlfUmtNb2RlbFdpemFyZF9sYWJlbD1SayBNb2RlbGwKK19VSV9Sa01vZGVsV2l6YXJkX2Rlc2NyaXB0aW9uPU5ldWVzIFJrLU1vZGVsbCBlcnN0ZWxsZW4KKworX1VJX1JrRWRpdG9yX2xhYmVsPVJrIE1vZGVsbCBFZGl0b3IKKworX1VJX1JrRWRpdG9yRmlsZW5hbWVEZWZhdWx0QmFzZT1NZWluCitfVUlfUmtFZGl0b3JGaWxlbmFtZUV4dGVuc2lvbnM9cmsKKworX1VJX1dpemFyZF9sYWJlbD1OZXUKKworX1dBUk5fRmlsZW5hbWVFeHRlbnNpb249RGVyIERhdGVpbmFtZSBtdXNzIGF1ZiAiLnswfSIgZW5kZW4KK19XQVJOX0ZpbGVuYW1lRXh0ZW5zaW9ucz1EZXIgRGF0ZWluYW1lIG11c3MgZWluZSBkZXIgZm9sZ2VuZGVuIEVuZHVuZ2VuIGhhYmVuOiB7MH0KKworX1VJX01vZGVsT2JqZWN0PSZNb2RlbCBPYmplY3QKK19VSV9YTUxFbmNvZGluZz0mWE1MIEVuY29kaW5nCitfVUlfWE1MRW5jb2RpbmdDaG9pY2VzPVVURi04IEFTQ0lJIFVURi0xNiBVVEYtMTZCRSBVVEYtMTZMRSBJU08tODg1OS0xCitfVUlfV2l6YXJkX2luaXRpYWxfb2JqZWN0X2Rlc2NyaXB0aW9uPVp1IGVyemV1Z2VuZGVzIE1vZGVsbG9iamVrdCB3XHUwMGU0aGxlbgorCitfVUlfRmlsZUNvbmZsaWN0X2xhYmVsPURhdGVpa29uZmxpa3QKK19XQVJOX0ZpbGVDb25mbGljdD1FcyBnaWJ0IG5pY2h0IGdlc3BlaWNoZXJ0ZSBcdTAwYzRuZGVydW5nZW4sIGRpZSBLb25mbGlrdGUgbWl0IFx1MDBjNG5kZXJ1bmdlbiBhdVx1MDBkZmVyaGFsYiBkZXMgRWRpdG9ycyBlcnpldWdlbi4gTVx1MDBmNmNodGVuIFNpZSBkaWUgXHUwMGM0bmRlcnVuZ2VuIGltIEVkaXRvciB2ZXJ3ZXJmZW4/CisKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5zb2x2ZXJzLnJrL3BsdWdpbl9rci5wcm9wZXJ0aWVzIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLnNvbHZlcnMucmsvcGx1Z2luX2tyLnByb3BlcnRpZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTQ3MDkzMAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5zb2x2ZXJzLnJrL3BsdWdpbl9rci5wcm9wZXJ0aWVzCkBAIC0wLDAgKzEsNzYgQEAKKworIy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjICogQ29weXJpZ2h0IChjKSAyMDA5IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorIyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyMgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyMgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorIyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisjICoKKyMgKiBDb250cmlidXRvcnM6CisjICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorIyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisjIFRvIGNvZGUgZGV2ZWxvcGVyOgorIyAgIERvIE5PVCBjaGFuZ2UgdGhlIHByb3BlcnRpZXMgYmV0d2VlbiB0aGlzIGxpbmUgYW5kIHRoZQorIyAgICIlJSUgRU5EIE9GIFRSQU5TTEFURUQgUFJPUEVSVElFUyAlJSUiIGxpbmUuCisjICAgTWFrZSBhIG5ldyBwcm9wZXJ0eSBuYW1lLCBhcHBlbmQgdG8gdGhlIGVuZCBvZiB0aGUgZmlsZSBhbmQgY2hhbmdlCisjICAgdGhlIGNvZGUgdG8gdXNlIHRoZSBuZXcgcHJvcGVydHkuCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyMgJSUlIEVORCBPRiBUUkFOU0xBVEVEIFBST1BFUlRJRVMgJSUlCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKworcGx1Z2luTmFtZT1TVEVNIFx1YjdmMFx1YzljMCBLdXR0YSBcdWMxOTRcdWJjODQgVUkKK3Byb3ZpZGVyTmFtZT1FY2xpcHNlLm9yZworCitfVUlfUmtFZGl0b3JfbWVudT0mUmsgRWRpdG9yCisKK19VSV9DcmVhdGVDaGlsZF9tZW51X2l0ZW09Jk5ldyBDaGlsZAorX1VJX0NyZWF0ZVNpYmxpbmdfbWVudV9pdGVtPU4mICBcdWQ2MTVcdWM4MWMgXHVjNzkwXHViOWU0CisKK19VSV9TaG93UHJvcGVydGllc1ZpZXdfbWVudV9pdGVtPVx1ZDQ1Y1x1YzJkYyBcdWJjMGYgXHVjMThkXHVjMTMxXHViY2Y0XHVhZTMwCitfVUlfUmVmcmVzaFZpZXdlcl9tZW51X2l0ZW09JlJlZnJlc2gKKworX1VJX1NlbGVjdGlvblBhZ2VfbGFiZWw9XHVjMTIwXHVkMGRkCitfVUlfUGFyZW50UGFnZV9sYWJlbD1cdWJkODBcdWJhYTgKK19VSV9MaXN0UGFnZV9sYWJlbD1cdWJhYTlcdWI4NWQKK19VSV9UcmVlUGFnZV9sYWJlbD1cdWIwOThcdWJiMzQKK19VSV9UYWJsZVBhZ2VfbGFiZWw9XHVkMTRjXHVjNzc0XHViZTE0CitfVUlfVHJlZVdpdGhDb2x1bW5zUGFnZV9sYWJlbD1cdWIwOThcdWJiMzRcdWM2NDAgXHVjNWY0CitfVUlfT2JqZWN0Q29sdW1uX2xhYmVsPVx1YWMxY1x1Y2NiNAorX1VJX1NlbGZDb2x1bW5fbGFiZWw9XHVjMTQwXHVkNTA0CisKK19VSV9Ob09iamVjdFNlbGVjdGVkPVx1YzU0NFx1YmIzNFx1YWM4M1x1YjNjNCBcdWM1NDggXHVjMTIwXHVkMGRkXHVkNTY4CitfVUlfU2luZ2xlT2JqZWN0U2VsZWN0ZWQ9XHVjMTIwXHVkMGRkXHVkNTVjIFx1YWMxZFx1Y2NiNCA6IHswfQorX1VJX011bHRpT2JqZWN0U2VsZWN0ZWQ9XHVjMTIwXHVkMGRkXHViNDFjIHswfSBcdWFjMWRcdWNjYjQKKworX1VJX09wZW5FZGl0b3JFcnJvcl9sYWJlbD1cdWM2MjRcdWQ1MDggXHVjNWQwXHViNTE0XHVkMTMwCisKK19VSV9XaXphcmRfY2F0ZWdvcnk9XHVjNjA4XHVjODFjIEVNRiBcdWJhYThcdWIzNzggXHVjMGRkXHVjMTMxIFx1YjljOFx1YmM5NVx1YzBhYworCitfVUlfQ3JlYXRlTW9kZWxFcnJvcl9tZXNzYWdlPVx1ZDMwY1x1Yzc3YyAnezB9ICJcdWM1ZDBcdWMxMWMgXHViYjM4XHVjODFjIFx1YmMxY1x1YzBkZAorCitfVUlfUmtNb2RlbFdpemFyZF9sYWJlbD1SSyBcdWJhYThcdWIzNzgKK19VSV9Sa01vZGVsV2l6YXJkX2Rlc2NyaXB0aW9uPVx1YzBjOFx1Yjg1Y1x1YzZiNCBSSyBcdWJhYThcdWIzNzggXHViOWNjXHViNGU0XHVhZTMwCisKK19VSV9Sa0VkaXRvcl9sYWJlbD1SSyBcdWJhYThcdWIzNzggXHVkM2I4XHVjOWQxXHVhZTMwCisKK19VSV9Sa0VkaXRvckZpbGVuYW1lRGVmYXVsdEJhc2U9XHViMDk4XHVjNzU4CitfVUlfUmtFZGl0b3JGaWxlbmFtZUV4dGVuc2lvbnM9UksKKworX1VJX1dpemFyZF9sYWJlbD1cdWMwYzhcdWI4NWNcdWM2YjQKKworX1dBUk5fRmlsZW5hbWVFeHRlbnNpb249XHVkMzBjXHVjNzdjIFx1Yzc3NFx1Yjk4NFx1Yzc0MCAiLnswfSJcdWI4NWMgXHViMDVkXHViMDk4XHVjNTdjXHVkNTY4LgorX1dBUk5fRmlsZW5hbWVFeHRlbnNpb25zPVx1ZDMwY1x1Yzc3YyBcdWM3NzRcdWI5ODRcdWM3NDAgXHViMmU0XHVjNzRjIFx1ZDY1NVx1YzdhNVx1Yzc5MCBcdWM5MTEgXHVkNTU4XHViMDk4XHViOTdjIFx1YWMwMFx1YzgzOFx1YzU3Y1x1ZDU2OCA6IHswfQorCitfVUlfTW9kZWxPYmplY3Q9Jk1vZGVsIE9iamVjdAorX1VJX1hNTEVuY29kaW5nPSZYTUwgRW5jb2RpbmcKK19VSV9YTUxFbmNvZGluZ0Nob2ljZXM9VVRGIC0gOCBBU0NJSSBVVEYgLSAxNiBVVEYgLSAxNkJFIFVURiAtIDE2TEUgSVNPIC0gODg1OSAtIDEKK19VSV9XaXphcmRfaW5pdGlhbF9vYmplY3RfZGVzY3JpcHRpb249XHVjMGRkXHVjMTMxXHVkNTYwIFx1YmFhOFx1YjM3OCBcdWFjMWNcdWNjYjQgXHVjMTIwXHVkMGRkCisKK19VSV9GaWxlQ29uZmxpY3RfbGFiZWw9XHVkMzBjXHVjNzdjIFx1Y2RhOVx1YjNjYworX1dBUk5fRmlsZUNvbmZsaWN0PVx1YzgwMFx1YzdhNVx1YjQxOFx1YzljMCBcdWM1NGFcdWM3NDAgXHVjMGFjXHVkNTZkXHViNGU0XHVjNzc0IFx1ZDNiOFx1YzlkMVx1YWUzMCBcdWM2NzhcdWJkODBcdWM3NTggXHViY2MwXHVhY2JkIFx1YzBhY1x1ZDU2ZFx1YjRlNFx1YWNmYyBcdWNkYTlcdWIzY2NcdWQ1NjguIFx1Yzc3NCBcdWQzYjhcdWM5ZDFcdWFlMzBcdWM3NTggXHViY2MwXHVhY2JkIFx1YzBhY1x1ZDU2ZFx1YjRlNFx1Yzc0NCBcdWNkZThcdWMxOGMgXHVkNTU4XHVjMmRjXHVhY2EwXHVjMmI1XHViMmM4XHVhZTRjPworCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkuc29sdmVycy5yay9wbHVnaW5femgucHJvcGVydGllcyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5zb2x2ZXJzLnJrL3BsdWdpbl96aC5wcm9wZXJ0aWVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJiNjI4MmQKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkuc29sdmVycy5yay9wbHVnaW5femgucHJvcGVydGllcwpAQCAtMCwwICsxLDc2IEBACisKKyMvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIyAqIENvcHlyaWdodCAoYykgMjAwOSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyMgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisjICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisjICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyMgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorIyAqCisjICogQ29udHJpYnV0b3JzOgorIyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorIyBUbyBjb2RlIGRldmVsb3BlcjoKKyMgICBEbyBOT1QgY2hhbmdlIHRoZSBwcm9wZXJ0aWVzIGJldHdlZW4gdGhpcyBsaW5lIGFuZCB0aGUKKyMgICAiJSUlIEVORCBPRiBUUkFOU0xBVEVEIFBST1BFUlRJRVMgJSUlIiBsaW5lLgorIyAgIE1ha2UgYSBuZXcgcHJvcGVydHkgbmFtZSwgYXBwZW5kIHRvIHRoZSBlbmQgb2YgdGhlIGZpbGUgYW5kIGNoYW5nZQorIyAgIHRoZSBjb2RlIHRvIHVzZSB0aGUgbmV3IHByb3BlcnR5LgorIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisjICUlJSBFTkQgT0YgVFJBTlNMQVRFRCBQUk9QRVJUSUVTICUlJQorIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisKK3BsdWdpbk5hbWU9U1RFTVx1OWY5OVx1NjgzY1x1NWU5M1x1NTg1NFx1NmM0Mlx1ODllM1VJCitwcm92aWRlck5hbWU9RWNsaXBzZS5vcmcKKworX1VJX1JrRWRpdG9yX21lbnU9JlJrIEVkaXRvcgorCitfVUlfQ3JlYXRlQ2hpbGRfbWVudV9pdGVtPSZOZXcgQ2hpbGQKK19VSV9DcmVhdGVTaWJsaW5nX21lbnVfaXRlbT1cdTY1YjBcdTc1MWZcdTYyMTBcdTRlMDBcdTRlMmFcdTUxNDRcdTVmMWZcdTdjN2IKKworX1VJX1Nob3dQcm9wZXJ0aWVzVmlld19tZW51X2l0ZW09XHU2NjNlXHU3OTNhXHU1NDhjXHU1YzVlXHU2MDI3XHU2N2U1XHU3NzBiCitfVUlfUmVmcmVzaFZpZXdlcl9tZW51X2l0ZW09JlJlZnJlc2gKKworX1VJX1NlbGVjdGlvblBhZ2VfbGFiZWw9XHU5MDA5XHU2MmU5CitfVUlfUGFyZW50UGFnZV9sYWJlbD1cdTViYjZcdTk1N2YKK19VSV9MaXN0UGFnZV9sYWJlbD1cdTc2ZWVcdTVmNTUKK19VSV9UcmVlUGFnZV9sYWJlbD1cdTY4MTEKK19VSV9UYWJsZVBhZ2VfbGFiZWw9XHU4ODY4CitfVUlfVHJlZVdpdGhDb2x1bW5zUGFnZV9sYWJlbD1cdTUyMDZcdTUyMTdcdTc2ODRcdTY4MTEKK19VSV9PYmplY3RDb2x1bW5fbGFiZWw9XHU1YmY5XHU4YzYxCitfVUlfU2VsZkNvbHVtbl9sYWJlbD1cdTgxZWFcdTVkZjEKKworX1VJX05vT2JqZWN0U2VsZWN0ZWQ9XHU2NWUwXHU5MDA5XHU1YjlhXHU1MTg1XHU1YmI5CitfVUlfU2luZ2xlT2JqZWN0U2VsZWN0ZWQ9XHU5MDA5XHU2MmU5XHU1YmY5XHU4YzYxXHVmZjFhezB9CitfVUlfTXVsdGlPYmplY3RTZWxlY3RlZD1cdTkwMDlcdTYyZTl7MH1cdTViZjlcdThjNjEKKworX1VJX09wZW5FZGl0b3JFcnJvcl9sYWJlbD1cdTYyNTNcdTVmMDBcdTdmMTZcdThmOTFcdTU2NjgKKworX1VJX1dpemFyZF9jYXRlZ29yeT1cdTRmOGJcdTU5ODJFTUZcdTZhMjFcdTU3OGJcdTUyMWJcdTVlZmFcdTU0MTFcdTViZmMKKworX1VJX0NyZWF0ZU1vZGVsRXJyb3JfbWVzc2FnZT1cdTU3MjhcdTY1ODdcdTRlZjZcdTIwMWN7MH1cdTIwMWRcdTRlMmRcdTkwNDdcdTUyMzBcdTc2ODRcdTk1ZWVcdTk4OTgKKworX1VJX1JrTW9kZWxXaXphcmRfbGFiZWw9UktcdTZhMjFcdTU3OGIKK19VSV9Sa01vZGVsV2l6YXJkX2Rlc2NyaXB0aW9uPVx1NTIxYlx1NWVmYVx1NGUwMFx1NGUyYVx1NjViMFx1NzY4NFJ1bmdlIEt1dHRhXHU2YTIxXHU1NzhiCisKK19VSV9Sa0VkaXRvcl9sYWJlbD1SS1x1NmEyMVx1NTc4Ylx1N2YxNlx1OGY5MVx1NTY2OAorCitfVUlfUmtFZGl0b3JGaWxlbmFtZURlZmF1bHRCYXNlPVx1NjIxMVx1NzY4NAorX1VJX1JrRWRpdG9yRmlsZW5hbWVFeHRlbnNpb25zPVJLCisKK19VSV9XaXphcmRfbGFiZWw9XHU2NWIwXHU1ZWZhCisKK19XQVJOX0ZpbGVuYW1lRXh0ZW5zaW9uPVx1NjU4N1x1NGVmNlx1NTQwZFx1NWZjNVx1OTg3Ylx1NGVlNSd7MH0gJydcdTdlZDNcdTVjM2UKK19XQVJOX0ZpbGVuYW1lRXh0ZW5zaW9ucz1cdTY1ODdcdTRlZjZcdTU0MGRcdTVmYzVcdTk4N2JcdTUxNzdcdTY3MDlcdTRlZTVcdTRlMGJcdTYyNjlcdTVjNTVcdTU0MGRcdTRlNGJcdTRlMDBcdWZmMWF7MH0KKworX1VJX01vZGVsT2JqZWN0PSZNb2RlbCBPYmplY3QKK19VSV9YTUxFbmNvZGluZz0mWE1MIEVuY29kaW5nCitfVUlfWE1MRW5jb2RpbmdDaG9pY2VzPVVURi04IEFTQ0lJIFVURi0xNiBVVEYtMTZCRSBVVEYtMTZMRSBJU08tODg1OS0xCitfVUlfV2l6YXJkX2luaXRpYWxfb2JqZWN0X2Rlc2NyaXB0aW9uPVx1OTAwOVx1NjJlOVx1NTIxYlx1NWVmYVx1NGUwMFx1NGUyYVx1NmEyMVx1NTc4Ylx1NWJmOVx1OGM2MQorCitfVUlfRmlsZUNvbmZsaWN0X2xhYmVsPVx1NjU4N1x1NGVmNlx1NTFiMlx1N2E4MQorX1dBUk5fRmlsZUNvbmZsaWN0PVx1NjcwOVx1NjcyYVx1NGZkZFx1NWI1OFx1NzY4NFx1NjZmNFx1NjUzOVx1NGUwZVx1N2YxNlx1OGY5MVx1NTY2OFx1NTkxNlx1NzY4NFx1NjZmNFx1NjUzOVx1NTFiMlx1N2E4MVx1MzAwMlx1NGY2MFx1NjBmM1x1NjUzZVx1NWYwM1x1OGZkOVx1NGUyYVx1N2YxNlx1OGY5MVx1NTY2OFx1NzY4NFx1NjZmNFx1NjUzOVx1NTQxN1x1ZmYxZgorCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkuc29sdmVycy5yay9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9zb2x2ZXJzL3JrL3ByZXNlbnRhdGlvbi9Sa0FjdGlvbkJhckNvbnRyaWJ1dG9yLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkuc29sdmVycy5yay9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9zb2x2ZXJzL3JrL3ByZXNlbnRhdGlvbi9Sa0FjdGlvbkJhckNvbnRyaWJ1dG9yLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjFiZjM2ZQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5zb2x2ZXJzLnJrL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3NvbHZlcnMvcmsvcHJlc2VudGF0aW9uL1JrQWN0aW9uQmFyQ29udHJpYnV0b3IuamF2YQpAQCAtMCwwICsxLDQyNyBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnNvbHZlcnMucmsucHJlc2VudGF0aW9uOw0KKw0KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorICogQ29weXJpZ2h0IChjKSAyMDA5IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLg0KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMNCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjANCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdA0KKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sDQorICoNCisgKiBDb250cmlidXRvcnM6DQorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbg0KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KKw0KK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0Ow0KK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsNCisNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51aS52aWV3ZXIuSVZpZXdlclByb3ZpZGVyOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5kb21haW4uRWRpdGluZ0RvbWFpbjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQuZG9tYWluLklFZGl0aW5nRG9tYWluUHJvdmlkZXI7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmFjdGlvbi5Db250cm9sQWN0aW9uOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5hY3Rpb24uQ3JlYXRlQ2hpbGRBY3Rpb247DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmFjdGlvbi5DcmVhdGVTaWJsaW5nQWN0aW9uOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5hY3Rpb24uRWRpdGluZ0RvbWFpbkFjdGlvbkJhckNvbnRyaWJ1dG9yOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5hY3Rpb24uTG9hZFJlc291cmNlQWN0aW9uOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5hY3Rpb24uVmFsaWRhdGVBY3Rpb247DQoraW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5BY3Rpb247DQoraW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5BY3Rpb25Db250cmlidXRpb25JdGVtOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSUFjdGlvbjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklDb250cmlidXRpb25JdGVtOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSUNvbnRyaWJ1dGlvbk1hbmFnZXI7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JTWVudUxpc3RlbmVyOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSU1lbnVNYW5hZ2VyOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSVRvb2xCYXJNYW5hZ2VyOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uTWVudU1hbmFnZXI7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5TZXBhcmF0b3I7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5TdWJDb250cmlidXRpb25JdGVtOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb247DQoraW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uUHJvdmlkZXI7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVN0cnVjdHVyZWRTZWxlY3Rpb247DQoraW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuU2VsZWN0aW9uQ2hhbmdlZEV2ZW50Ow0KK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlZpZXdlcjsNCitpbXBvcnQgb3JnLmVjbGlwc2UudWkuSUVkaXRvclBhcnQ7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnVpLlBhcnRJbml0RXhjZXB0aW9uOw0KKw0KKy8qKg0KKyAqIFRoaXMgaXMgdGhlIGFjdGlvbiBiYXIgY29udHJpYnV0b3IgZm9yIHRoZSBSayBtb2RlbCBlZGl0b3IuDQorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisgKiBAZ2VuZXJhdGVkDQorICovDQorcHVibGljIGNsYXNzIFJrQWN0aW9uQmFyQ29udHJpYnV0b3INCisJZXh0ZW5kcyBFZGl0aW5nRG9tYWluQWN0aW9uQmFyQ29udHJpYnV0b3INCisJaW1wbGVtZW50cyBJU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyIHsNCisJLyoqDQorCSAqIFRoaXMga2VlcHMgdHJhY2sgb2YgdGhlIGFjdGl2ZSBlZGl0b3IuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgSUVkaXRvclBhcnQgYWN0aXZlRWRpdG9yUGFydDsNCisNCisJLyoqDQorCSAqIFRoaXMga2VlcHMgdHJhY2sgb2YgdGhlIGN1cnJlbnQgc2VsZWN0aW9uIHByb3ZpZGVyLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIElTZWxlY3Rpb25Qcm92aWRlciBzZWxlY3Rpb25Qcm92aWRlcjsNCisNCisJLyoqDQorCSAqIFRoaXMgYWN0aW9uIG9wZW5zIHRoZSBQcm9wZXJ0aWVzIHZpZXcuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgSUFjdGlvbiBzaG93UHJvcGVydGllc1ZpZXdBY3Rpb24gPQ0KKwkJbmV3IEFjdGlvbihSa0VkaXRvclBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoIl9VSV9TaG93UHJvcGVydGllc1ZpZXdfbWVudV9pdGVtIikpIHsNCisJCQlAT3ZlcnJpZGUNCisJCQlwdWJsaWMgdm9pZCBydW4oKSB7DQorCQkJCXRyeSB7DQorCQkJCQlnZXRQYWdlKCkuc2hvd1ZpZXcoIm9yZy5lY2xpcHNlLnVpLnZpZXdzLlByb3BlcnR5U2hlZXQiKTsNCisJCQkJfQ0KKwkJCQljYXRjaCAoUGFydEluaXRFeGNlcHRpb24gZXhjZXB0aW9uKSB7DQorCQkJCQlSa0VkaXRvclBsdWdpbi5JTlNUQU5DRS5sb2coZXhjZXB0aW9uKTsNCisJCQkJfQ0KKwkJCX0NCisJCX07DQorDQorCS8qKg0KKwkgKiBUaGlzIGFjdGlvbiByZWZyZXNoZXMgdGhlIHZpZXdlciBvZiB0aGUgY3VycmVudCBlZGl0b3IgaWYgdGhlIGVkaXRvcg0KKwkgKiBpbXBsZW1lbnRzIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnVpLnZpZXdlci5JVmlld2VyUHJvdmlkZXJ9Lg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIElBY3Rpb24gcmVmcmVzaFZpZXdlckFjdGlvbiA9DQorCQluZXcgQWN0aW9uKFJrRWRpdG9yUGx1Z2luLklOU1RBTkNFLmdldFN0cmluZygiX1VJX1JlZnJlc2hWaWV3ZXJfbWVudV9pdGVtIikpIHsNCisJCQlAT3ZlcnJpZGUNCisJCQlwdWJsaWMgYm9vbGVhbiBpc0VuYWJsZWQoKSB7DQorCQkJCXJldHVybiBhY3RpdmVFZGl0b3JQYXJ0IGluc3RhbmNlb2YgSVZpZXdlclByb3ZpZGVyOw0KKwkJCX0NCisNCisJCQlAT3ZlcnJpZGUNCisJCQlwdWJsaWMgdm9pZCBydW4oKSB7DQorCQkJCWlmIChhY3RpdmVFZGl0b3JQYXJ0IGluc3RhbmNlb2YgSVZpZXdlclByb3ZpZGVyKSB7DQorCQkJCQlWaWV3ZXIgdmlld2VyID0gKChJVmlld2VyUHJvdmlkZXIpYWN0aXZlRWRpdG9yUGFydCkuZ2V0Vmlld2VyKCk7DQorCQkJCQlpZiAodmlld2VyICE9IG51bGwpIHsNCisJCQkJCQl2aWV3ZXIucmVmcmVzaCgpOw0KKwkJCQkJfQ0KKwkJCQl9DQorCQkJfQ0KKwkJfTsNCisNCisJLyoqDQorCSAqIFRoaXMgd2lsbCBjb250YWluIG9uZSB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkuYWN0aW9uLkNyZWF0ZUNoaWxkQWN0aW9ufSBjb3JyZXNwb25kaW5nIHRvIGVhY2ggZGVzY3JpcHRvcg0KKwkgKiBnZW5lcmF0ZWQgZm9yIHRoZSBjdXJyZW50IHNlbGVjdGlvbiBieSB0aGUgaXRlbSBwcm92aWRlci4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCBDb2xsZWN0aW9uPElBY3Rpb24+IGNyZWF0ZUNoaWxkQWN0aW9uczsNCisNCisJLyoqDQorCSAqIFRoaXMgaXMgdGhlIG1lbnUgbWFuYWdlciBpbnRvIHdoaWNoIG1lbnUgY29udHJpYnV0aW9uIGl0ZW1zIHNob3VsZCBiZSBhZGRlZCBmb3IgQ3JlYXRlQ2hpbGQgYWN0aW9ucy4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCBJTWVudU1hbmFnZXIgY3JlYXRlQ2hpbGRNZW51TWFuYWdlcjsNCisNCisJLyoqDQorCSAqIFRoaXMgd2lsbCBjb250YWluIG9uZSB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkuYWN0aW9uLkNyZWF0ZVNpYmxpbmdBY3Rpb259IGNvcnJlc3BvbmRpbmcgdG8gZWFjaCBkZXNjcmlwdG9yDQorCSAqIGdlbmVyYXRlZCBmb3IgdGhlIGN1cnJlbnQgc2VsZWN0aW9uIGJ5IHRoZSBpdGVtIHByb3ZpZGVyLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIENvbGxlY3Rpb248SUFjdGlvbj4gY3JlYXRlU2libGluZ0FjdGlvbnM7DQorDQorCS8qKg0KKwkgKiBUaGlzIGlzIHRoZSBtZW51IG1hbmFnZXIgaW50byB3aGljaCBtZW51IGNvbnRyaWJ1dGlvbiBpdGVtcyBzaG91bGQgYmUgYWRkZWQgZm9yIENyZWF0ZVNpYmxpbmcgYWN0aW9ucy4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCBJTWVudU1hbmFnZXIgY3JlYXRlU2libGluZ01lbnVNYW5hZ2VyOw0KKw0KKwkvKioNCisJICogVGhpcyBjcmVhdGVzIGFuIGluc3RhbmNlIG9mIHRoZSBjb250cmlidXRvci4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBSa0FjdGlvbkJhckNvbnRyaWJ1dG9yKCkgew0KKwkJc3VwZXIoQURESVRJT05TX0xBU1RfU1RZTEUpOw0KKwkJbG9hZFJlc291cmNlQWN0aW9uID0gbmV3IExvYWRSZXNvdXJjZUFjdGlvbigpOw0KKwkJdmFsaWRhdGVBY3Rpb24gPSBuZXcgVmFsaWRhdGVBY3Rpb24oKTsNCisJCWNvbnRyb2xBY3Rpb24gPSBuZXcgQ29udHJvbEFjdGlvbigpOw0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIGFkZHMgU2VwYXJhdG9ycyBmb3IgZWRpdG9yIGFkZGl0aW9ucyB0byB0aGUgdG9vbCBiYXIuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlAT3ZlcnJpZGUNCisJcHVibGljIHZvaWQgY29udHJpYnV0ZVRvVG9vbEJhcihJVG9vbEJhck1hbmFnZXIgdG9vbEJhck1hbmFnZXIpIHsNCisJCXRvb2xCYXJNYW5hZ2VyLmFkZChuZXcgU2VwYXJhdG9yKCJyay1zZXR0aW5ncyIpKTsNCisJCXRvb2xCYXJNYW5hZ2VyLmFkZChuZXcgU2VwYXJhdG9yKCJyay1hZGRpdGlvbnMiKSk7DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgYWRkcyB0byB0aGUgbWVudSBiYXIgYSBtZW51IGFuZCBzb21lIHNlcGFyYXRvcnMgZm9yIGVkaXRvciBhZGRpdGlvbnMsDQorCSAqIGFzIHdlbGwgYXMgdGhlIHN1Yi1tZW51cyBmb3Igb2JqZWN0IGNyZWF0aW9uIGl0ZW1zLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJQE92ZXJyaWRlDQorCXB1YmxpYyB2b2lkIGNvbnRyaWJ1dGVUb01lbnUoSU1lbnVNYW5hZ2VyIG1lbnVNYW5hZ2VyKSB7DQorCQlzdXBlci5jb250cmlidXRlVG9NZW51KG1lbnVNYW5hZ2VyKTsNCisNCisJCUlNZW51TWFuYWdlciBzdWJtZW51TWFuYWdlciA9IG5ldyBNZW51TWFuYWdlcihSa0VkaXRvclBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoIl9VSV9Sa0VkaXRvcl9tZW51IiksICJvcmcuZWNsaXBzZS5zdGVtLnNvbHZlcnMucmtNZW51SUQiKTsNCisJCW1lbnVNYW5hZ2VyLmluc2VydEFmdGVyKCJhZGRpdGlvbnMiLCBzdWJtZW51TWFuYWdlcik7DQorCQlzdWJtZW51TWFuYWdlci5hZGQobmV3IFNlcGFyYXRvcigic2V0dGluZ3MiKSk7DQorCQlzdWJtZW51TWFuYWdlci5hZGQobmV3IFNlcGFyYXRvcigiYWN0aW9ucyIpKTsNCisJCXN1Ym1lbnVNYW5hZ2VyLmFkZChuZXcgU2VwYXJhdG9yKCJhZGRpdGlvbnMiKSk7DQorCQlzdWJtZW51TWFuYWdlci5hZGQobmV3IFNlcGFyYXRvcigiYWRkaXRpb25zLWVuZCIpKTsNCisNCisJCS8vIFByZXBhcmUgZm9yIENyZWF0ZUNoaWxkIGl0ZW0gYWRkaXRpb24gb3IgcmVtb3ZhbC4NCisJCS8vDQorCQljcmVhdGVDaGlsZE1lbnVNYW5hZ2VyID0gbmV3IE1lbnVNYW5hZ2VyKFJrRWRpdG9yUGx1Z2luLklOU1RBTkNFLmdldFN0cmluZygiX1VJX0NyZWF0ZUNoaWxkX21lbnVfaXRlbSIpKTsNCisJCXN1Ym1lbnVNYW5hZ2VyLmluc2VydEJlZm9yZSgiYWRkaXRpb25zIiwgY3JlYXRlQ2hpbGRNZW51TWFuYWdlcik7DQorDQorCQkvLyBQcmVwYXJlIGZvciBDcmVhdGVTaWJsaW5nIGl0ZW0gYWRkaXRpb24gb3IgcmVtb3ZhbC4NCisJCS8vDQorCQljcmVhdGVTaWJsaW5nTWVudU1hbmFnZXIgPSBuZXcgTWVudU1hbmFnZXIoUmtFZGl0b3JQbHVnaW4uSU5TVEFOQ0UuZ2V0U3RyaW5nKCJfVUlfQ3JlYXRlU2libGluZ19tZW51X2l0ZW0iKSk7DQorCQlzdWJtZW51TWFuYWdlci5pbnNlcnRCZWZvcmUoImFkZGl0aW9ucyIsIGNyZWF0ZVNpYmxpbmdNZW51TWFuYWdlcik7DQorDQorCQkvLyBGb3JjZSBhbiB1cGRhdGUgYmVjYXVzZSBFY2xpcHNlIGhpZGVzIGVtcHR5IG1lbnVzIG5vdy4NCisJCS8vDQorCQlzdWJtZW51TWFuYWdlci5hZGRNZW51TGlzdGVuZXINCisJCQkobmV3IElNZW51TGlzdGVuZXIoKSB7DQorCQkJCSBwdWJsaWMgdm9pZCBtZW51QWJvdXRUb1Nob3coSU1lbnVNYW5hZ2VyIG1lbnVNYW5hZ2VyKSB7DQorCQkJCQkgbWVudU1hbmFnZXIudXBkYXRlQWxsKHRydWUpOw0KKwkJCQkgfQ0KKwkJCSB9KTsNCisNCisJCWFkZEdsb2JhbEFjdGlvbnMoc3VibWVudU1hbmFnZXIpOw0KKwl9DQorDQorCS8qKg0KKwkgKiBXaGVuIHRoZSBhY3RpdmUgZWRpdG9yIGNoYW5nZXMsIHRoaXMgcmVtZW1iZXJzIHRoZSBjaGFuZ2UgYW5kIHJlZ2lzdGVycyB3aXRoIGl0IGFzIGEgc2VsZWN0aW9uIHByb3ZpZGVyLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJQE92ZXJyaWRlDQorCXB1YmxpYyB2b2lkIHNldEFjdGl2ZUVkaXRvcihJRWRpdG9yUGFydCBwYXJ0KSB7DQorCQlzdXBlci5zZXRBY3RpdmVFZGl0b3IocGFydCk7DQorCQlhY3RpdmVFZGl0b3JQYXJ0ID0gcGFydDsNCisNCisJCS8vIFN3aXRjaCB0byB0aGUgbmV3IHNlbGVjdGlvbiBwcm92aWRlci4NCisJCS8vDQorCQlpZiAoc2VsZWN0aW9uUHJvdmlkZXIgIT0gbnVsbCkgew0KKwkJCXNlbGVjdGlvblByb3ZpZGVyLnJlbW92ZVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcih0aGlzKTsNCisJCX0NCisJCWlmIChwYXJ0ID09IG51bGwpIHsNCisJCQlzZWxlY3Rpb25Qcm92aWRlciA9IG51bGw7DQorCQl9DQorCQllbHNlIHsNCisJCQlzZWxlY3Rpb25Qcm92aWRlciA9IHBhcnQuZ2V0U2l0ZSgpLmdldFNlbGVjdGlvblByb3ZpZGVyKCk7DQorCQkJc2VsZWN0aW9uUHJvdmlkZXIuYWRkU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyKHRoaXMpOw0KKw0KKwkJCS8vIEZha2UgYSBzZWxlY3Rpb24gY2hhbmdlZCBldmVudCB0byB1cGRhdGUgdGhlIG1lbnVzLg0KKwkJCS8vDQorCQkJaWYgKHNlbGVjdGlvblByb3ZpZGVyLmdldFNlbGVjdGlvbigpICE9IG51bGwpIHsNCisJCQkJc2VsZWN0aW9uQ2hhbmdlZChuZXcgU2VsZWN0aW9uQ2hhbmdlZEV2ZW50KHNlbGVjdGlvblByb3ZpZGVyLCBzZWxlY3Rpb25Qcm92aWRlci5nZXRTZWxlY3Rpb24oKSkpOw0KKwkJCX0NCisJCX0NCisJfQ0KKw0KKwkvKioNCisJICogVGhpcyBpbXBsZW1lbnRzIHtAbGluayBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXJ9LA0KKwkgKiBoYW5kbGluZyB7QGxpbmsgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5TZWxlY3Rpb25DaGFuZ2VkRXZlbnR9cyBieSBxdWVyeWluZyBmb3IgdGhlIGNoaWxkcmVuIGFuZCBzaWJsaW5ncw0KKwkgKiB0aGF0IGNhbiBiZSBhZGRlZCB0byB0aGUgc2VsZWN0ZWQgb2JqZWN0IGFuZCB1cGRhdGluZyB0aGUgbWVudXMgYWNjb3JkaW5nbHkuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgdm9pZCBzZWxlY3Rpb25DaGFuZ2VkKFNlbGVjdGlvbkNoYW5nZWRFdmVudCBldmVudCkgew0KKwkJLy8gUmVtb3ZlIGFueSBtZW51IGl0ZW1zIGZvciBvbGQgc2VsZWN0aW9uLg0KKwkJLy8NCisJCWlmIChjcmVhdGVDaGlsZE1lbnVNYW5hZ2VyICE9IG51bGwpIHsNCisJCQlkZXBvcHVsYXRlTWFuYWdlcihjcmVhdGVDaGlsZE1lbnVNYW5hZ2VyLCBjcmVhdGVDaGlsZEFjdGlvbnMpOw0KKwkJfQ0KKwkJaWYgKGNyZWF0ZVNpYmxpbmdNZW51TWFuYWdlciAhPSBudWxsKSB7DQorCQkJZGVwb3B1bGF0ZU1hbmFnZXIoY3JlYXRlU2libGluZ01lbnVNYW5hZ2VyLCBjcmVhdGVTaWJsaW5nQWN0aW9ucyk7DQorCQl9DQorDQorCQkvLyBRdWVyeSB0aGUgbmV3IHNlbGVjdGlvbiBmb3IgYXBwcm9wcmlhdGUgbmV3IGNoaWxkL3NpYmxpbmcgZGVzY3JpcHRvcnMNCisJCS8vDQorCQlDb2xsZWN0aW9uPD8+IG5ld0NoaWxkRGVzY3JpcHRvcnMgPSBudWxsOw0KKwkJQ29sbGVjdGlvbjw/PiBuZXdTaWJsaW5nRGVzY3JpcHRvcnMgPSBudWxsOw0KKw0KKwkJSVNlbGVjdGlvbiBzZWxlY3Rpb24gPSBldmVudC5nZXRTZWxlY3Rpb24oKTsNCisJCWlmIChzZWxlY3Rpb24gaW5zdGFuY2VvZiBJU3RydWN0dXJlZFNlbGVjdGlvbiAmJiAoKElTdHJ1Y3R1cmVkU2VsZWN0aW9uKXNlbGVjdGlvbikuc2l6ZSgpID09IDEpIHsNCisJCQlPYmplY3Qgb2JqZWN0ID0gKChJU3RydWN0dXJlZFNlbGVjdGlvbilzZWxlY3Rpb24pLmdldEZpcnN0RWxlbWVudCgpOw0KKw0KKwkJCUVkaXRpbmdEb21haW4gZG9tYWluID0gKChJRWRpdGluZ0RvbWFpblByb3ZpZGVyKWFjdGl2ZUVkaXRvclBhcnQpLmdldEVkaXRpbmdEb21haW4oKTsNCisNCisJCQluZXdDaGlsZERlc2NyaXB0b3JzID0gZG9tYWluLmdldE5ld0NoaWxkRGVzY3JpcHRvcnMob2JqZWN0LCBudWxsKTsNCisJCQluZXdTaWJsaW5nRGVzY3JpcHRvcnMgPSBkb21haW4uZ2V0TmV3Q2hpbGREZXNjcmlwdG9ycyhudWxsLCBvYmplY3QpOw0KKwkJfQ0KKw0KKwkJLy8gR2VuZXJhdGUgYWN0aW9ucyBmb3Igc2VsZWN0aW9uOyBwb3B1bGF0ZSBhbmQgcmVkcmF3IHRoZSBtZW51cy4NCisJCS8vDQorCQljcmVhdGVDaGlsZEFjdGlvbnMgPSBnZW5lcmF0ZUNyZWF0ZUNoaWxkQWN0aW9ucyhuZXdDaGlsZERlc2NyaXB0b3JzLCBzZWxlY3Rpb24pOw0KKwkJY3JlYXRlU2libGluZ0FjdGlvbnMgPSBnZW5lcmF0ZUNyZWF0ZVNpYmxpbmdBY3Rpb25zKG5ld1NpYmxpbmdEZXNjcmlwdG9ycywgc2VsZWN0aW9uKTsNCisNCisJCWlmIChjcmVhdGVDaGlsZE1lbnVNYW5hZ2VyICE9IG51bGwpIHsNCisJCQlwb3B1bGF0ZU1hbmFnZXIoY3JlYXRlQ2hpbGRNZW51TWFuYWdlciwgY3JlYXRlQ2hpbGRBY3Rpb25zLCBudWxsKTsNCisJCQljcmVhdGVDaGlsZE1lbnVNYW5hZ2VyLnVwZGF0ZSh0cnVlKTsNCisJCX0NCisJCWlmIChjcmVhdGVTaWJsaW5nTWVudU1hbmFnZXIgIT0gbnVsbCkgew0KKwkJCXBvcHVsYXRlTWFuYWdlcihjcmVhdGVTaWJsaW5nTWVudU1hbmFnZXIsIGNyZWF0ZVNpYmxpbmdBY3Rpb25zLCBudWxsKTsNCisJCQljcmVhdGVTaWJsaW5nTWVudU1hbmFnZXIudXBkYXRlKHRydWUpOw0KKwkJfQ0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIGdlbmVyYXRlcyBhIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5hY3Rpb24uQ3JlYXRlQ2hpbGRBY3Rpb259IGZvciBlYWNoIG9iamVjdCBpbiA8Y29kZT5kZXNjcmlwdG9yczwvY29kZT4sDQorCSAqIGFuZCByZXR1cm5zIHRoZSBjb2xsZWN0aW9uIG9mIHRoZXNlIGFjdGlvbnMuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgQ29sbGVjdGlvbjxJQWN0aW9uPiBnZW5lcmF0ZUNyZWF0ZUNoaWxkQWN0aW9ucyhDb2xsZWN0aW9uPD8+IGRlc2NyaXB0b3JzLCBJU2VsZWN0aW9uIHNlbGVjdGlvbikgew0KKwkJQ29sbGVjdGlvbjxJQWN0aW9uPiBhY3Rpb25zID0gbmV3IEFycmF5TGlzdDxJQWN0aW9uPigpOw0KKwkJaWYgKGRlc2NyaXB0b3JzICE9IG51bGwpIHsNCisJCQlmb3IgKE9iamVjdCBkZXNjcmlwdG9yIDogZGVzY3JpcHRvcnMpIHsNCisJCQkJYWN0aW9ucy5hZGQobmV3IENyZWF0ZUNoaWxkQWN0aW9uKGFjdGl2ZUVkaXRvclBhcnQsIHNlbGVjdGlvbiwgZGVzY3JpcHRvcikpOw0KKwkJCX0NCisJCX0NCisJCXJldHVybiBhY3Rpb25zOw0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIGdlbmVyYXRlcyBhIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5hY3Rpb24uQ3JlYXRlU2libGluZ0FjdGlvbn0gZm9yIGVhY2ggb2JqZWN0IGluIDxjb2RlPmRlc2NyaXB0b3JzPC9jb2RlPiwNCisJICogYW5kIHJldHVybnMgdGhlIGNvbGxlY3Rpb24gb2YgdGhlc2UgYWN0aW9ucy4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCBDb2xsZWN0aW9uPElBY3Rpb24+IGdlbmVyYXRlQ3JlYXRlU2libGluZ0FjdGlvbnMoQ29sbGVjdGlvbjw/PiBkZXNjcmlwdG9ycywgSVNlbGVjdGlvbiBzZWxlY3Rpb24pIHsNCisJCUNvbGxlY3Rpb248SUFjdGlvbj4gYWN0aW9ucyA9IG5ldyBBcnJheUxpc3Q8SUFjdGlvbj4oKTsNCisJCWlmIChkZXNjcmlwdG9ycyAhPSBudWxsKSB7DQorCQkJZm9yIChPYmplY3QgZGVzY3JpcHRvciA6IGRlc2NyaXB0b3JzKSB7DQorCQkJCWFjdGlvbnMuYWRkKG5ldyBDcmVhdGVTaWJsaW5nQWN0aW9uKGFjdGl2ZUVkaXRvclBhcnQsIHNlbGVjdGlvbiwgZGVzY3JpcHRvcikpOw0KKwkJCX0NCisJCX0NCisJCXJldHVybiBhY3Rpb25zOw0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIHBvcHVsYXRlcyB0aGUgc3BlY2lmaWVkIDxjb2RlPm1hbmFnZXI8L2NvZGU+IHdpdGgge0BsaW5rIG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5BY3Rpb25Db250cmlidXRpb25JdGVtfXMNCisJICogYmFzZWQgb24gdGhlIHtAbGluayBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSUFjdGlvbn1zIGNvbnRhaW5lZCBpbiB0aGUgPGNvZGU+YWN0aW9uczwvY29kZT4gY29sbGVjdGlvbiwNCisJICogYnkgaW5zZXJ0aW5nIHRoZW0gYmVmb3JlIHRoZSBzcGVjaWZpZWQgY29udHJpYnV0aW9uIGl0ZW0gPGNvZGU+Y29udHJpYnV0aW9uSUQ8L2NvZGU+Lg0KKwkgKiBJZiA8Y29kZT5jb250cmlidXRpb25JRDwvY29kZT4gaXMgPGNvZGU+bnVsbDwvY29kZT4sIHRoZXkgYXJlIHNpbXBseSBhZGRlZC4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCB2b2lkIHBvcHVsYXRlTWFuYWdlcihJQ29udHJpYnV0aW9uTWFuYWdlciBtYW5hZ2VyLCBDb2xsZWN0aW9uPD8gZXh0ZW5kcyBJQWN0aW9uPiBhY3Rpb25zLCBTdHJpbmcgY29udHJpYnV0aW9uSUQpIHsNCisJCWlmIChhY3Rpb25zICE9IG51bGwpIHsNCisJCQlmb3IgKElBY3Rpb24gYWN0aW9uIDogYWN0aW9ucykgew0KKwkJCQlpZiAoY29udHJpYnV0aW9uSUQgIT0gbnVsbCkgew0KKwkJCQkJbWFuYWdlci5pbnNlcnRCZWZvcmUoY29udHJpYnV0aW9uSUQsIGFjdGlvbik7DQorCQkJCX0NCisJCQkJZWxzZSB7DQorCQkJCQltYW5hZ2VyLmFkZChhY3Rpb24pOw0KKwkJCQl9DQorCQkJfQ0KKwkJfQ0KKwl9DQorCQkNCisJLyoqDQorCSAqIFRoaXMgcmVtb3ZlcyBmcm9tIHRoZSBzcGVjaWZpZWQgPGNvZGU+bWFuYWdlcjwvY29kZT4gYWxsIHtAbGluayBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uQWN0aW9uQ29udHJpYnV0aW9uSXRlbX1zDQorCSAqIGJhc2VkIG9uIHRoZSB7QGxpbmsgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklBY3Rpb259cyBjb250YWluZWQgaW4gdGhlIDxjb2RlPmFjdGlvbnM8L2NvZGU+IGNvbGxlY3Rpb24uDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgdm9pZCBkZXBvcHVsYXRlTWFuYWdlcihJQ29udHJpYnV0aW9uTWFuYWdlciBtYW5hZ2VyLCBDb2xsZWN0aW9uPD8gZXh0ZW5kcyBJQWN0aW9uPiBhY3Rpb25zKSB7DQorCQlpZiAoYWN0aW9ucyAhPSBudWxsKSB7DQorCQkJSUNvbnRyaWJ1dGlvbkl0ZW1bXSBpdGVtcyA9IG1hbmFnZXIuZ2V0SXRlbXMoKTsNCisJCQlmb3IgKGludCBpID0gMDsgaSA8IGl0ZW1zLmxlbmd0aDsgaSsrKSB7DQorCQkJCS8vIExvb2sgaW50byBTdWJDb250cmlidXRpb25JdGVtcw0KKwkJCQkvLw0KKwkJCQlJQ29udHJpYnV0aW9uSXRlbSBjb250cmlidXRpb25JdGVtID0gaXRlbXNbaV07DQorCQkJCXdoaWxlIChjb250cmlidXRpb25JdGVtIGluc3RhbmNlb2YgU3ViQ29udHJpYnV0aW9uSXRlbSkgew0KKwkJCQkJY29udHJpYnV0aW9uSXRlbSA9ICgoU3ViQ29udHJpYnV0aW9uSXRlbSljb250cmlidXRpb25JdGVtKS5nZXRJbm5lckl0ZW0oKTsNCisJCQkJfQ0KKw0KKwkJCQkvLyBEZWxldGUgdGhlIEFjdGlvbkNvbnRyaWJ1dGlvbkl0ZW1zIHdpdGggbWF0Y2hpbmcgYWN0aW9uLg0KKwkJCQkvLw0KKwkJCQlpZiAoY29udHJpYnV0aW9uSXRlbSBpbnN0YW5jZW9mIEFjdGlvbkNvbnRyaWJ1dGlvbkl0ZW0pIHsNCisJCQkJCUlBY3Rpb24gYWN0aW9uID0gKChBY3Rpb25Db250cmlidXRpb25JdGVtKWNvbnRyaWJ1dGlvbkl0ZW0pLmdldEFjdGlvbigpOw0KKwkJCQkJaWYgKGFjdGlvbnMuY29udGFpbnMoYWN0aW9uKSkgew0KKwkJCQkJCW1hbmFnZXIucmVtb3ZlKGNvbnRyaWJ1dGlvbkl0ZW0pOw0KKwkJCQkJfQ0KKwkJCQl9DQorCQkJfQ0KKwkJfQ0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIHBvcHVsYXRlcyB0aGUgcG9wLXVwIG1lbnUgYmVmb3JlIGl0IGFwcGVhcnMuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlAT3ZlcnJpZGUNCisJcHVibGljIHZvaWQgbWVudUFib3V0VG9TaG93KElNZW51TWFuYWdlciBtZW51TWFuYWdlcikgew0KKwkJc3VwZXIubWVudUFib3V0VG9TaG93KG1lbnVNYW5hZ2VyKTsNCisJCU1lbnVNYW5hZ2VyIHN1Ym1lbnVNYW5hZ2VyID0gbnVsbDsNCisNCisJCXN1Ym1lbnVNYW5hZ2VyID0gbmV3IE1lbnVNYW5hZ2VyKFJrRWRpdG9yUGx1Z2luLklOU1RBTkNFLmdldFN0cmluZygiX1VJX0NyZWF0ZUNoaWxkX21lbnVfaXRlbSIpKTsNCisJCXBvcHVsYXRlTWFuYWdlcihzdWJtZW51TWFuYWdlciwgY3JlYXRlQ2hpbGRBY3Rpb25zLCBudWxsKTsNCisJCW1lbnVNYW5hZ2VyLmluc2VydEJlZm9yZSgiZWRpdCIsIHN1Ym1lbnVNYW5hZ2VyKTsNCisNCisJCXN1Ym1lbnVNYW5hZ2VyID0gbmV3IE1lbnVNYW5hZ2VyKFJrRWRpdG9yUGx1Z2luLklOU1RBTkNFLmdldFN0cmluZygiX1VJX0NyZWF0ZVNpYmxpbmdfbWVudV9pdGVtIikpOw0KKwkJcG9wdWxhdGVNYW5hZ2VyKHN1Ym1lbnVNYW5hZ2VyLCBjcmVhdGVTaWJsaW5nQWN0aW9ucywgbnVsbCk7DQorCQltZW51TWFuYWdlci5pbnNlcnRCZWZvcmUoImVkaXQiLCBzdWJtZW51TWFuYWdlcik7DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgaW5zZXJ0cyBnbG9iYWwgYWN0aW9ucyBiZWZvcmUgdGhlICJhZGRpdGlvbnMtZW5kIiBzZXBhcmF0b3IuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlAT3ZlcnJpZGUNCisJcHJvdGVjdGVkIHZvaWQgYWRkR2xvYmFsQWN0aW9ucyhJTWVudU1hbmFnZXIgbWVudU1hbmFnZXIpIHsNCisJCW1lbnVNYW5hZ2VyLmluc2VydEFmdGVyKCJhZGRpdGlvbnMtZW5kIiwgbmV3IFNlcGFyYXRvcigidWktYWN0aW9ucyIpKTsNCisJCW1lbnVNYW5hZ2VyLmluc2VydEFmdGVyKCJ1aS1hY3Rpb25zIiwgc2hvd1Byb3BlcnRpZXNWaWV3QWN0aW9uKTsNCisNCisJCXJlZnJlc2hWaWV3ZXJBY3Rpb24uc2V0RW5hYmxlZChyZWZyZXNoVmlld2VyQWN0aW9uLmlzRW5hYmxlZCgpKTsJCQ0KKwkJbWVudU1hbmFnZXIuaW5zZXJ0QWZ0ZXIoInVpLWFjdGlvbnMiLCByZWZyZXNoVmlld2VyQWN0aW9uKTsNCisNCisJCXN1cGVyLmFkZEdsb2JhbEFjdGlvbnMobWVudU1hbmFnZXIpOw0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIGVuc3VyZXMgdGhhdCBhIGRlbGV0ZSBhY3Rpb24gd2lsbCBjbGVhbiB1cCBhbGwgcmVmZXJlbmNlcyB0byBkZWxldGVkIG9iamVjdHMuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlAT3ZlcnJpZGUNCisJcHJvdGVjdGVkIGJvb2xlYW4gcmVtb3ZlQWxsUmVmZXJlbmNlc09uRGVsZXRlKCkgew0KKwkJcmV0dXJuIHRydWU7DQorCX0NCisNCit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLnNvbHZlcnMucmsvc3JjL29yZy9lY2xpcHNlL3N0ZW0vc29sdmVycy9yay9wcmVzZW50YXRpb24vUmtFZGl0b3IuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5zb2x2ZXJzLnJrL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3NvbHZlcnMvcmsvcHJlc2VudGF0aW9uL1JrRWRpdG9yLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjRhNzBmNQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5zb2x2ZXJzLnJrL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3NvbHZlcnMvcmsvcHJlc2VudGF0aW9uL1JrRWRpdG9yLmphdmEKQEAgLTAsMCArMSwxODA1IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uc29sdmVycy5yay5wcmVzZW50YXRpb247DQorDQorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisgKiBDb3B5cmlnaHQgKGMpIDIwMDkgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuDQorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscw0KKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMA0KKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0DQorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwNCisgKg0KKyAqIENvbnRyaWJ1dG9yczoNCisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uDQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQorDQorDQoraW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247DQoraW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW07DQoraW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7DQoraW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOw0KK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbnM7DQoraW1wb3J0IGphdmEudXRpbC5FdmVudE9iamVjdDsNCitpbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7DQoraW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsNCitpbXBvcnQgamF2YS51dGlsLkxpbmtlZEhhc2hNYXA7DQoraW1wb3J0IGphdmEudXRpbC5MaXN0Ow0KK2ltcG9ydCBqYXZhLnV0aWwuTWFwOw0KKw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JRmlsZTsNCitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSU1hcmtlcjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVJlc291cmNlOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUmVzb3VyY2VDaGFuZ2VFdmVudDsNCitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVJlc291cmNlQ2hhbmdlTGlzdGVuZXI7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklSZXNvdXJjZURlbHRhOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUmVzb3VyY2VEZWx0YVZpc2l0b3I7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLlJlc291cmNlc1BsdWdpbjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkNvcmVFeGNlcHRpb247DQoraW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUGF0aDsNCitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQcm9ncmVzc01vbml0b3I7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5OdWxsUHJvZ3Jlc3NNb25pdG9yOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLmNvbW1hbmQuQmFzaWNDb21tYW5kU3RhY2s7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24uY29tbWFuZC5Db21tYW5kOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLmNvbW1hbmQuQ29tbWFuZFN0YWNrOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLmNvbW1hbmQuQ29tbWFuZFN0YWNrTGlzdGVuZXI7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LkFkYXB0ZXJGYWN0b3J5Ow0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb247DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udWkuTWFya2VySGVscGVyOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnVpLlZpZXdlclBhbmU7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udWkuZWRpdG9yLlByb2JsZW1FZGl0b3JQYXJ0Ow0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnVpLnZpZXdlci5JVmlld2VyUHJvdmlkZXI7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5CYXNpY0RpYWdub3N0aWM7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5EaWFnbm9zdGljOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuVVJJOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdDsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVWYWxpZGF0b3I7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5wcm92aWRlci5FY29yZUl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5Ow0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUucmVzb3VyY2UuUmVzb3VyY2U7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5yZXNvdXJjZS5SZXNvdXJjZVNldDsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnV0aWwuRUNvbnRlbnRBZGFwdGVyOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUudXRpbC5FY29yZVV0aWw7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LmRvbWFpbi5BZGFwdGVyRmFjdG9yeUVkaXRpbmdEb21haW47DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LmRvbWFpbi5FZGl0aW5nRG9tYWluOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5kb21haW4uSUVkaXRpbmdEb21haW5Qcm92aWRlcjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuQWRhcHRlckZhY3RvcnlJdGVtRGVsZWdhdG9yOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5Db21wb3NlZEFkYXB0ZXJGYWN0b3J5Ow0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5SZWZsZWN0aXZlSXRlbVByb3ZpZGVyQWRhcHRlckZhY3Rvcnk7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLnJlc291cmNlLlJlc291cmNlSXRlbVByb3ZpZGVyQWRhcHRlckZhY3Rvcnk7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmFjdGlvbi5FZGl0aW5nRG9tYWluQWN0aW9uQmFyQ29udHJpYnV0b3I7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmNlbGxlZGl0b3IuQWRhcHRlckZhY3RvcnlUcmVlRWRpdG9yOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5kbmQuRWRpdGluZ0RvbWFpblZpZXdlckRyb3BBZGFwdGVyOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5kbmQuTG9jYWxUcmFuc2ZlcjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkuZG5kLlZpZXdlckRyYWdBZGFwdGVyOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5wcm92aWRlci5BZGFwdGVyRmFjdG9yeUNvbnRlbnRQcm92aWRlcjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkucHJvdmlkZXIuQWRhcHRlckZhY3RvcnlMYWJlbFByb3ZpZGVyOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5wcm92aWRlci5VbndyYXBwaW5nU2VsZWN0aW9uUHJvdmlkZXI7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLnV0aWwuRWRpdFVJTWFya2VySGVscGVyOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS51dGlsLkVkaXRVSVV0aWw7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLnZpZXcuRXh0ZW5kZWRQcm9wZXJ0eVNoZWV0UGFnZTsNCitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklNZW51TGlzdGVuZXI7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JTWVudU1hbmFnZXI7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JU3RhdHVzTGluZU1hbmFnZXI7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JVG9vbEJhck1hbmFnZXI7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5NZW51TWFuYWdlcjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLlNlcGFyYXRvcjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuZGlhbG9ncy5NZXNzYWdlRGlhbG9nOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5kaWFsb2dzLlByb2dyZXNzTW9uaXRvckRpYWxvZzsNCitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5Db2x1bW5XZWlnaHREYXRhOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb247DQoraW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uUHJvdmlkZXI7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVN0cnVjdHVyZWRTZWxlY3Rpb247DQoraW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuTGlzdFZpZXdlcjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5TZWxlY3Rpb25DaGFuZ2VkRXZlbnQ7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuU3RydWN0dXJlZFNlbGVjdGlvbjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5TdHJ1Y3R1cmVkVmlld2VyOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlRhYmxlTGF5b3V0Ow0KK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlRhYmxlVmlld2VyOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlRyZWVWaWV3ZXI7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuVmlld2VyOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLnByb3ZpZGVyLkNvbW1vbkl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5Ow0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGgucHJvdmlkZXIuR3JhcGhJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeTsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLnByb3ZpZGVyLk1vZGVsSXRlbVByb3ZpZGVyQWRhcHRlckZhY3Rvcnk7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5wcm92aWRlci5Nb2RpZmllckl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5Ow0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2NlbmFyaW8ucHJvdmlkZXIuU2NlbmFyaW9JdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeTsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNlcXVlbmNlci5wcm92aWRlci5TZXF1ZW5jZXJJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeTsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNvbHZlci5wcm92aWRlci5Tb2x2ZXJJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeTsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5zb2x2ZXJzLnJrLnByb3ZpZGVyLlJrSXRlbVByb3ZpZGVyQWRhcHRlckZhY3Rvcnk7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5TV1Q7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5jdXN0b20uQ1RhYkZvbGRlcjsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmRuZC5ETkQ7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5kbmQuVHJhbnNmZXI7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuQ29udHJvbEFkYXB0ZXI7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuQ29udHJvbEV2ZW50Ow0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZ3JhcGhpY3MuUG9pbnQ7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5sYXlvdXQuRmlsbExheW91dDsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5NZW51Ow0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5UYWJsZTsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuVGFibGVDb2x1bW47DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlRyZWU7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlRyZWVDb2x1bW47DQoraW1wb3J0IG9yZy5lY2xpcHNlLnVpLklBY3Rpb25CYXJzOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5JRWRpdG9ySW5wdXQ7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnVpLklFZGl0b3JQYXJ0Ow0KK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5JRWRpdG9yU2l0ZTsNCitpbXBvcnQgb3JnLmVjbGlwc2UudWkuSVBhcnRMaXN0ZW5lcjsNCitpbXBvcnQgb3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaFBhcnQ7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnVpLlBhcnRJbml0RXhjZXB0aW9uOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5hY3Rpb25zLldvcmtzcGFjZU1vZGlmeU9wZXJhdGlvbjsNCitpbXBvcnQgb3JnLmVjbGlwc2UudWkuZGlhbG9ncy5TYXZlQXNEaWFsb2c7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnVpLmlkZS5JR290b01hcmtlcjsNCitpbXBvcnQgb3JnLmVjbGlwc2UudWkucGFydC5GaWxlRWRpdG9ySW5wdXQ7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnVpLnBhcnQuTXVsdGlQYWdlRWRpdG9yUGFydDsNCitpbXBvcnQgb3JnLmVjbGlwc2UudWkudmlld3MuY29udGVudG91dGxpbmUuQ29udGVudE91dGxpbmU7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnVpLnZpZXdzLmNvbnRlbnRvdXRsaW5lLkNvbnRlbnRPdXRsaW5lUGFnZTsNCitpbXBvcnQgb3JnLmVjbGlwc2UudWkudmlld3MuY29udGVudG91dGxpbmUuSUNvbnRlbnRPdXRsaW5lUGFnZTsNCitpbXBvcnQgb3JnLmVjbGlwc2UudWkudmlld3MucHJvcGVydGllcy5JUHJvcGVydHlTaGVldFBhZ2U7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnVpLnZpZXdzLnByb3BlcnRpZXMuUHJvcGVydHlTaGVldDsNCitpbXBvcnQgb3JnLmVjbGlwc2UudWkudmlld3MucHJvcGVydGllcy5Qcm9wZXJ0eVNoZWV0UGFnZTsNCisNCisNCisvKioNCisgKiBUaGlzIGlzIGFuIGV4YW1wbGUgb2YgYSBSayBtb2RlbCBlZGl0b3IuDQorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisgKiBAZ2VuZXJhdGVkDQorICovDQorQFN1cHByZXNzV2FybmluZ3MoInVudXNlZCIpIA0KK3B1YmxpYyBjbGFzcyBSa0VkaXRvcg0KKwlleHRlbmRzIE11bHRpUGFnZUVkaXRvclBhcnQNCisJaW1wbGVtZW50cyBJRWRpdGluZ0RvbWFpblByb3ZpZGVyLCBJU2VsZWN0aW9uUHJvdmlkZXIsIElNZW51TGlzdGVuZXIsIElWaWV3ZXJQcm92aWRlciwgSUdvdG9NYXJrZXIgew0KKwkvKioNCisJICogVGhpcyBrZWVwcyB0cmFjayBvZiB0aGUgZWRpdGluZyBkb21haW4gdGhhdCBpcyB1c2VkIHRvIHRyYWNrIGFsbCBjaGFuZ2VzIHRvIHRoZSBtb2RlbC4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCBBZGFwdGVyRmFjdG9yeUVkaXRpbmdEb21haW4gZWRpdGluZ0RvbWFpbjsNCisNCisJLyoqDQorCSAqIFRoaXMgaXMgdGhlIG9uZSBhZGFwdGVyIGZhY3RvcnkgdXNlZCBmb3IgcHJvdmlkaW5nIHZpZXdzIG9mIHRoZSBtb2RlbC4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCBDb21wb3NlZEFkYXB0ZXJGYWN0b3J5IGFkYXB0ZXJGYWN0b3J5Ow0KKw0KKwkvKioNCisJICogVGhpcyBpcyB0aGUgY29udGVudCBvdXRsaW5lIHBhZ2UuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgSUNvbnRlbnRPdXRsaW5lUGFnZSBjb250ZW50T3V0bGluZVBhZ2U7DQorDQorCS8qKg0KKwkgKiBUaGlzIGlzIGEga2x1ZGdlLi4uDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgSVN0YXR1c0xpbmVNYW5hZ2VyIGNvbnRlbnRPdXRsaW5lU3RhdHVzTGluZU1hbmFnZXI7DQorDQorCS8qKg0KKwkgKiBUaGlzIGlzIHRoZSBjb250ZW50IG91dGxpbmUgcGFnZSdzIHZpZXdlci4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCBUcmVlVmlld2VyIGNvbnRlbnRPdXRsaW5lVmlld2VyOw0KKw0KKwkvKioNCisJICogVGhpcyBpcyB0aGUgcHJvcGVydHkgc2hlZXQgcGFnZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCBQcm9wZXJ0eVNoZWV0UGFnZSBwcm9wZXJ0eVNoZWV0UGFnZTsNCisNCisJLyoqDQorCSAqIFRoaXMgaXMgdGhlIHZpZXdlciB0aGF0IHNoYWRvd3MgdGhlIHNlbGVjdGlvbiBpbiB0aGUgY29udGVudCBvdXRsaW5lLg0KKwkgKiBUaGUgcGFyZW50IHJlbGF0aW9uIG11c3QgYmUgY29ycmVjdGx5IGRlZmluZWQgZm9yIHRoaXMgdG8gd29yay4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCBUcmVlVmlld2VyIHNlbGVjdGlvblZpZXdlcjsNCisNCisJLyoqDQorCSAqIFRoaXMgaW52ZXJ0cyB0aGUgcm9sbCBvZiBwYXJlbnQgYW5kIGNoaWxkIGluIHRoZSBjb250ZW50IHByb3ZpZGVyIGFuZCBzaG93IHBhcmVudHMgYXMgYSB0cmVlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIFRyZWVWaWV3ZXIgcGFyZW50Vmlld2VyOw0KKw0KKwkvKioNCisJICogVGhpcyBzaG93cyBob3cgYSB0cmVlIHZpZXcgd29ya3MuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgVHJlZVZpZXdlciB0cmVlVmlld2VyOw0KKw0KKwkvKioNCisJICogVGhpcyBzaG93cyBob3cgYSBsaXN0IHZpZXcgd29ya3MuDQorCSAqIEEgbGlzdCB2aWV3ZXIgZG9lc24ndCBzdXBwb3J0IGljb25zLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIExpc3RWaWV3ZXIgbGlzdFZpZXdlcjsNCisNCisJLyoqDQorCSAqIFRoaXMgc2hvd3MgaG93IGEgdGFibGUgdmlldyB3b3Jrcy4NCisJICogQSB0YWJsZSBjYW4gYmUgdXNlZCBhcyBhIGxpc3Qgd2l0aCBpY29ucy4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCBUYWJsZVZpZXdlciB0YWJsZVZpZXdlcjsNCisNCisJLyoqDQorCSAqIFRoaXMgc2hvd3MgaG93IGEgdHJlZSB2aWV3IHdpdGggY29sdW1ucyB3b3Jrcy4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCBUcmVlVmlld2VyIHRyZWVWaWV3ZXJXaXRoQ29sdW1uczsNCisNCisJLyoqDQorCSAqIFRoaXMga2VlcHMgdHJhY2sgb2YgdGhlIGFjdGl2ZSB2aWV3ZXIgcGFuZSwgaW4gdGhlIGJvb2suDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgVmlld2VyUGFuZSBjdXJyZW50Vmlld2VyUGFuZTsNCisNCisJLyoqDQorCSAqIFRoaXMga2VlcHMgdHJhY2sgb2YgdGhlIGFjdGl2ZSBjb250ZW50IHZpZXdlciwgd2hpY2ggbWF5IGJlIGVpdGhlciBvbmUgb2YgdGhlIHZpZXdlcnMgaW4gdGhlIHBhZ2VzIG9yIHRoZSBjb250ZW50IG91dGxpbmUgdmlld2VyLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIFZpZXdlciBjdXJyZW50Vmlld2VyOw0KKw0KKwkvKioNCisJICogVGhpcyBsaXN0ZW5zIHRvIHdoaWNoIGV2ZXIgdmlld2VyIGlzIGFjdGl2ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCBJU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyIHNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcjsNCisNCisJLyoqDQorCSAqIFRoaXMga2VlcHMgdHJhY2sgb2YgYWxsIHRoZSB7QGxpbmsgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyfXMgdGhhdCBhcmUgbGlzdGVuaW5nIHRvIHRoaXMgZWRpdG9yLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIENvbGxlY3Rpb248SVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcj4gc2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVycyA9IG5ldyBBcnJheUxpc3Q8SVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcj4oKTsNCisNCisJLyoqDQorCSAqIFRoaXMga2VlcHMgdHJhY2sgb2YgdGhlIHNlbGVjdGlvbiBvZiB0aGUgZWRpdG9yIGFzIGEgd2hvbGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgSVNlbGVjdGlvbiBlZGl0b3JTZWxlY3Rpb24gPSBTdHJ1Y3R1cmVkU2VsZWN0aW9uLkVNUFRZOw0KKw0KKwkvKioNCisJICogVGhlIE1hcmtlckhlbHBlciBpcyByZXNwb25zaWJsZSBmb3IgY3JlYXRpbmcgd29ya3NwYWNlIHJlc291cmNlIG1hcmtlcnMgcHJlc2VudGVkDQorCSAqIGluIEVjbGlwc2UncyBQcm9ibGVtcyBWaWV3Lg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIE1hcmtlckhlbHBlciBtYXJrZXJIZWxwZXIgPSBuZXcgRWRpdFVJTWFya2VySGVscGVyKCk7DQorDQorCS8qKg0KKwkgKiBUaGlzIGxpc3RlbnMgZm9yIHdoZW4gdGhlIG91dGxpbmUgYmVjb21lcyBhY3RpdmUNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCBJUGFydExpc3RlbmVyIHBhcnRMaXN0ZW5lciA9DQorCQluZXcgSVBhcnRMaXN0ZW5lcigpIHsNCisJCQlwdWJsaWMgdm9pZCBwYXJ0QWN0aXZhdGVkKElXb3JrYmVuY2hQYXJ0IHApIHsNCisJCQkJaWYgKHAgaW5zdGFuY2VvZiBDb250ZW50T3V0bGluZSkgew0KKwkJCQkJaWYgKCgoQ29udGVudE91dGxpbmUpcCkuZ2V0Q3VycmVudFBhZ2UoKSA9PSBjb250ZW50T3V0bGluZVBhZ2UpIHsNCisJCQkJCQlnZXRBY3Rpb25CYXJDb250cmlidXRvcigpLnNldEFjdGl2ZUVkaXRvcihSa0VkaXRvci50aGlzKTsNCisNCisJCQkJCQlzZXRDdXJyZW50Vmlld2VyKGNvbnRlbnRPdXRsaW5lVmlld2VyKTsNCisJCQkJCX0NCisJCQkJfQ0KKwkJCQllbHNlIGlmIChwIGluc3RhbmNlb2YgUHJvcGVydHlTaGVldCkgew0KKwkJCQkJaWYgKCgoUHJvcGVydHlTaGVldClwKS5nZXRDdXJyZW50UGFnZSgpID09IHByb3BlcnR5U2hlZXRQYWdlKSB7DQorCQkJCQkJZ2V0QWN0aW9uQmFyQ29udHJpYnV0b3IoKS5zZXRBY3RpdmVFZGl0b3IoUmtFZGl0b3IudGhpcyk7DQorCQkJCQkJaGFuZGxlQWN0aXZhdGUoKTsNCisJCQkJCX0NCisJCQkJfQ0KKwkJCQllbHNlIGlmIChwID09IFJrRWRpdG9yLnRoaXMpIHsNCisJCQkJCWhhbmRsZUFjdGl2YXRlKCk7DQorCQkJCX0NCisJCQl9DQorCQkJcHVibGljIHZvaWQgcGFydEJyb3VnaHRUb1RvcChJV29ya2JlbmNoUGFydCBwKSB7DQorCQkJCS8vIElnbm9yZS4NCisJCQl9DQorCQkJcHVibGljIHZvaWQgcGFydENsb3NlZChJV29ya2JlbmNoUGFydCBwKSB7DQorCQkJCS8vIElnbm9yZS4NCisJCQl9DQorCQkJcHVibGljIHZvaWQgcGFydERlYWN0aXZhdGVkKElXb3JrYmVuY2hQYXJ0IHApIHsNCisJCQkJLy8gSWdub3JlLg0KKwkJCX0NCisJCQlwdWJsaWMgdm9pZCBwYXJ0T3BlbmVkKElXb3JrYmVuY2hQYXJ0IHApIHsNCisJCQkJLy8gSWdub3JlLg0KKwkJCX0NCisJCX07DQorDQorCS8qKg0KKwkgKiBSZXNvdXJjZXMgdGhhdCBoYXZlIGJlZW4gcmVtb3ZlZCBzaW5jZSBsYXN0IGFjdGl2YXRpb24uDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgQ29sbGVjdGlvbjxSZXNvdXJjZT4gcmVtb3ZlZFJlc291cmNlcyA9IG5ldyBBcnJheUxpc3Q8UmVzb3VyY2U+KCk7DQorDQorCS8qKg0KKwkgKiBSZXNvdXJjZXMgdGhhdCBoYXZlIGJlZW4gY2hhbmdlZCBzaW5jZSBsYXN0IGFjdGl2YXRpb24uDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgQ29sbGVjdGlvbjxSZXNvdXJjZT4gY2hhbmdlZFJlc291cmNlcyA9IG5ldyBBcnJheUxpc3Q8UmVzb3VyY2U+KCk7DQorDQorCS8qKg0KKwkgKiBSZXNvdXJjZXMgdGhhdCBoYXZlIGJlZW4gc2F2ZWQuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgQ29sbGVjdGlvbjxSZXNvdXJjZT4gc2F2ZWRSZXNvdXJjZXMgPSBuZXcgQXJyYXlMaXN0PFJlc291cmNlPigpOw0KKw0KKwkvKioNCisJICogTWFwIHRvIHN0b3JlIHRoZSBkaWFnbm9zdGljIGFzc29jaWF0ZWQgd2l0aCBhIHJlc291cmNlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIE1hcDxSZXNvdXJjZSwgRGlhZ25vc3RpYz4gcmVzb3VyY2VUb0RpYWdub3N0aWNNYXAgPSBuZXcgTGlua2VkSGFzaE1hcDxSZXNvdXJjZSwgRGlhZ25vc3RpYz4oKTsNCisNCisJLyoqDQorCSAqIENvbnRyb2xzIHdoZXRoZXIgdGhlIHByb2JsZW0gaW5kaWNhdGlvbiBzaG91bGQgYmUgdXBkYXRlZC4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCBib29sZWFuIHVwZGF0ZVByb2JsZW1JbmRpY2F0aW9uID0gdHJ1ZTsNCisNCisJLyoqDQorCSAqIEFkYXB0ZXIgdXNlZCB0byB1cGRhdGUgdGhlIHByb2JsZW0gaW5kaWNhdGlvbiB3aGVuIHJlc291cmNlcyBhcmUgZGVtYW5kZWQgbG9hZGVkLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIEVDb250ZW50QWRhcHRlciBwcm9ibGVtSW5kaWNhdGlvbkFkYXB0ZXIgPSANCisJCW5ldyBFQ29udGVudEFkYXB0ZXIoKSB7DQorCQkJQE92ZXJyaWRlDQorCQkJcHVibGljIHZvaWQgbm90aWZ5Q2hhbmdlZChOb3RpZmljYXRpb24gbm90aWZpY2F0aW9uKSB7DQorCQkJCWlmIChub3RpZmljYXRpb24uZ2V0Tm90aWZpZXIoKSBpbnN0YW5jZW9mIFJlc291cmNlKSB7DQorCQkJCQlzd2l0Y2ggKG5vdGlmaWNhdGlvbi5nZXRGZWF0dXJlSUQoUmVzb3VyY2UuY2xhc3MpKSB7DQorCQkJCQkJY2FzZSBSZXNvdXJjZS5SRVNPVVJDRV9fSVNfTE9BREVEOg0KKwkJCQkJCWNhc2UgUmVzb3VyY2UuUkVTT1VSQ0VfX0VSUk9SUzoNCisJCQkJCQljYXNlIFJlc291cmNlLlJFU09VUkNFX19XQVJOSU5HUzogew0KKwkJCQkJCQlSZXNvdXJjZSByZXNvdXJjZSA9IChSZXNvdXJjZSlub3RpZmljYXRpb24uZ2V0Tm90aWZpZXIoKTsNCisJCQkJCQkJRGlhZ25vc3RpYyBkaWFnbm9zdGljID0gYW5hbHl6ZVJlc291cmNlUHJvYmxlbXMocmVzb3VyY2UsIG51bGwpOw0KKwkJCQkJCQlpZiAoZGlhZ25vc3RpYy5nZXRTZXZlcml0eSgpICE9IERpYWdub3N0aWMuT0spIHsNCisJCQkJCQkJCXJlc291cmNlVG9EaWFnbm9zdGljTWFwLnB1dChyZXNvdXJjZSwgZGlhZ25vc3RpYyk7DQorCQkJCQkJCX0NCisJCQkJCQkJZWxzZSB7DQorCQkJCQkJCQlyZXNvdXJjZVRvRGlhZ25vc3RpY01hcC5yZW1vdmUocmVzb3VyY2UpOw0KKwkJCQkJCQl9DQorDQorCQkJCQkJCWlmICh1cGRhdGVQcm9ibGVtSW5kaWNhdGlvbikgew0KKwkJCQkJCQkJZ2V0U2l0ZSgpLmdldFNoZWxsKCkuZ2V0RGlzcGxheSgpLmFzeW5jRXhlYw0KKwkJCQkJCQkJCShuZXcgUnVubmFibGUoKSB7DQorCQkJCQkJCQkJCSBwdWJsaWMgdm9pZCBydW4oKSB7DQorCQkJCQkJCQkJCQkgdXBkYXRlUHJvYmxlbUluZGljYXRpb24oKTsNCisJCQkJCQkJCQkJIH0NCisJCQkJCQkJCQkgfSk7DQorCQkJCQkJCX0NCisJCQkJCQkJYnJlYWs7DQorCQkJCQkJfQ0KKwkJCQkJfQ0KKwkJCQl9DQorCQkJCWVsc2Ugew0KKwkJCQkJc3VwZXIubm90aWZ5Q2hhbmdlZChub3RpZmljYXRpb24pOw0KKwkJCQl9DQorCQkJfQ0KKw0KKwkJCUBPdmVycmlkZQ0KKwkJCXByb3RlY3RlZCB2b2lkIHNldFRhcmdldChSZXNvdXJjZSB0YXJnZXQpIHsNCisJCQkJYmFzaWNTZXRUYXJnZXQodGFyZ2V0KTsNCisJCQl9DQorDQorCQkJQE92ZXJyaWRlDQorCQkJcHJvdGVjdGVkIHZvaWQgdW5zZXRUYXJnZXQoUmVzb3VyY2UgdGFyZ2V0KSB7DQorCQkJCWJhc2ljVW5zZXRUYXJnZXQodGFyZ2V0KTsNCisJCQl9DQorCQl9Ow0KKw0KKwkvKioNCisJICogVGhpcyBsaXN0ZW5zIGZvciB3b3Jrc3BhY2UgY2hhbmdlcy4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCBJUmVzb3VyY2VDaGFuZ2VMaXN0ZW5lciByZXNvdXJjZUNoYW5nZUxpc3RlbmVyID0NCisJCW5ldyBJUmVzb3VyY2VDaGFuZ2VMaXN0ZW5lcigpIHsNCisJCQlwdWJsaWMgdm9pZCByZXNvdXJjZUNoYW5nZWQoSVJlc291cmNlQ2hhbmdlRXZlbnQgZXZlbnQpIHsNCisJCQkJSVJlc291cmNlRGVsdGEgZGVsdGEgPSBldmVudC5nZXREZWx0YSgpOw0KKwkJCQl0cnkgew0KKwkJCQkJY2xhc3MgUmVzb3VyY2VEZWx0YVZpc2l0b3IgaW1wbGVtZW50cyBJUmVzb3VyY2VEZWx0YVZpc2l0b3Igew0KKwkJCQkJCXByb3RlY3RlZCBSZXNvdXJjZVNldCByZXNvdXJjZVNldCA9IGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKTsNCisJCQkJCQlwcm90ZWN0ZWQgQ29sbGVjdGlvbjxSZXNvdXJjZT4gY2hhbmdlZFJlc291cmNlcyA9IG5ldyBBcnJheUxpc3Q8UmVzb3VyY2U+KCk7DQorCQkJCQkJcHJvdGVjdGVkIENvbGxlY3Rpb248UmVzb3VyY2U+IHJlbW92ZWRSZXNvdXJjZXMgPSBuZXcgQXJyYXlMaXN0PFJlc291cmNlPigpOw0KKw0KKwkJCQkJCXB1YmxpYyBib29sZWFuIHZpc2l0KElSZXNvdXJjZURlbHRhIGRlbHRhKSB7DQorCQkJCQkJCWlmIChkZWx0YS5nZXRSZXNvdXJjZSgpLmdldFR5cGUoKSA9PSBJUmVzb3VyY2UuRklMRSkgew0KKwkJCQkJCQkJaWYgKGRlbHRhLmdldEtpbmQoKSA9PSBJUmVzb3VyY2VEZWx0YS5SRU1PVkVEIHx8DQorCQkJCQkJCQkgICAgZGVsdGEuZ2V0S2luZCgpID09IElSZXNvdXJjZURlbHRhLkNIQU5HRUQgJiYgZGVsdGEuZ2V0RmxhZ3MoKSAhPSBJUmVzb3VyY2VEZWx0YS5NQVJLRVJTKSB7DQorCQkJCQkJCQkJUmVzb3VyY2UgcmVzb3VyY2UgPSByZXNvdXJjZVNldC5nZXRSZXNvdXJjZShVUkkuY3JlYXRlVVJJKGRlbHRhLmdldEZ1bGxQYXRoKCkudG9TdHJpbmcoKSksIGZhbHNlKTsNCisJCQkJCQkJCQlpZiAocmVzb3VyY2UgIT0gbnVsbCkgew0KKwkJCQkJCQkJCQlpZiAoZGVsdGEuZ2V0S2luZCgpID09IElSZXNvdXJjZURlbHRhLlJFTU9WRUQpIHsNCisJCQkJCQkJCQkJCXJlbW92ZWRSZXNvdXJjZXMuYWRkKHJlc291cmNlKTsNCisJCQkJCQkJCQkJfQ0KKwkJCQkJCQkJCQllbHNlIGlmICghc2F2ZWRSZXNvdXJjZXMucmVtb3ZlKHJlc291cmNlKSkgew0KKwkJCQkJCQkJCQkJY2hhbmdlZFJlc291cmNlcy5hZGQocmVzb3VyY2UpOw0KKwkJCQkJCQkJCQl9DQorCQkJCQkJCQkJfQ0KKwkJCQkJCQkJfQ0KKwkJCQkJCQl9DQorDQorCQkJCQkJCXJldHVybiB0cnVlOw0KKwkJCQkJCX0NCisNCisJCQkJCQlwdWJsaWMgQ29sbGVjdGlvbjxSZXNvdXJjZT4gZ2V0Q2hhbmdlZFJlc291cmNlcygpIHsNCisJCQkJCQkJcmV0dXJuIGNoYW5nZWRSZXNvdXJjZXM7DQorCQkJCQkJfQ0KKw0KKwkJCQkJCXB1YmxpYyBDb2xsZWN0aW9uPFJlc291cmNlPiBnZXRSZW1vdmVkUmVzb3VyY2VzKCkgew0KKwkJCQkJCQlyZXR1cm4gcmVtb3ZlZFJlc291cmNlczsNCisJCQkJCQl9DQorCQkJCQl9DQorDQorCQkJCQlSZXNvdXJjZURlbHRhVmlzaXRvciB2aXNpdG9yID0gbmV3IFJlc291cmNlRGVsdGFWaXNpdG9yKCk7DQorCQkJCQlkZWx0YS5hY2NlcHQodmlzaXRvcik7DQorDQorCQkJCQlpZiAoIXZpc2l0b3IuZ2V0UmVtb3ZlZFJlc291cmNlcygpLmlzRW1wdHkoKSkgew0KKwkJCQkJCXJlbW92ZWRSZXNvdXJjZXMuYWRkQWxsKHZpc2l0b3IuZ2V0UmVtb3ZlZFJlc291cmNlcygpKTsNCisJCQkJCQlpZiAoIWlzRGlydHkoKSkgew0KKwkJCQkJCQlnZXRTaXRlKCkuZ2V0U2hlbGwoKS5nZXREaXNwbGF5KCkuYXN5bmNFeGVjDQorCQkJCQkJCQkobmV3IFJ1bm5hYmxlKCkgew0KKwkJCQkJCQkJCSBwdWJsaWMgdm9pZCBydW4oKSB7DQorCQkJCQkJCQkJCSBnZXRTaXRlKCkuZ2V0UGFnZSgpLmNsb3NlRWRpdG9yKFJrRWRpdG9yLnRoaXMsIGZhbHNlKTsNCisJCQkJCQkJCQkgfQ0KKwkJCQkJCQkJIH0pOw0KKwkJCQkJCX0NCisJCQkJCX0NCisNCisJCQkJCWlmICghdmlzaXRvci5nZXRDaGFuZ2VkUmVzb3VyY2VzKCkuaXNFbXB0eSgpKSB7DQorCQkJCQkJY2hhbmdlZFJlc291cmNlcy5hZGRBbGwodmlzaXRvci5nZXRDaGFuZ2VkUmVzb3VyY2VzKCkpOw0KKwkJCQkJCWlmIChnZXRTaXRlKCkuZ2V0UGFnZSgpLmdldEFjdGl2ZUVkaXRvcigpID09IFJrRWRpdG9yLnRoaXMpIHsNCisJCQkJCQkJZ2V0U2l0ZSgpLmdldFNoZWxsKCkuZ2V0RGlzcGxheSgpLmFzeW5jRXhlYw0KKwkJCQkJCQkJKG5ldyBSdW5uYWJsZSgpIHsNCisJCQkJCQkJCQkgcHVibGljIHZvaWQgcnVuKCkgew0KKwkJCQkJCQkJCQkgaGFuZGxlQWN0aXZhdGUoKTsNCisJCQkJCQkJCQkgfQ0KKwkJCQkJCQkJIH0pOw0KKwkJCQkJCX0NCisJCQkJCX0NCisJCQkJfQ0KKwkJCQljYXRjaCAoQ29yZUV4Y2VwdGlvbiBleGNlcHRpb24pIHsNCisJCQkJCVJrRWRpdG9yUGx1Z2luLklOU1RBTkNFLmxvZyhleGNlcHRpb24pOw0KKwkJCQl9DQorCQkJfQ0KKwkJfTsNCisNCisJLyoqDQorCSAqIEhhbmRsZXMgYWN0aXZhdGlvbiBvZiB0aGUgZWRpdG9yIG9yIGl0J3MgYXNzb2NpYXRlZCB2aWV3cy4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCB2b2lkIGhhbmRsZUFjdGl2YXRlKCkgew0KKwkJLy8gUmVjb21wdXRlIHRoZSByZWFkIG9ubHkgc3RhdGUuDQorCQkvLw0KKwkJaWYgKGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VUb1JlYWRPbmx5TWFwKCkgIT0gbnVsbCkgew0KKwkJICBlZGl0aW5nRG9tYWluLmdldFJlc291cmNlVG9SZWFkT25seU1hcCgpLmNsZWFyKCk7DQorDQorCQkgIC8vIFJlZnJlc2ggYW55IGFjdGlvbnMgdGhhdCBtYXkgYmVjb21lIGVuYWJsZWQgb3IgZGlzYWJsZWQuDQorCQkgIC8vDQorCQkgIHNldFNlbGVjdGlvbihnZXRTZWxlY3Rpb24oKSk7DQorCQl9DQorDQorCQlpZiAoIXJlbW92ZWRSZXNvdXJjZXMuaXNFbXB0eSgpKSB7DQorCQkJaWYgKGhhbmRsZURpcnR5Q29uZmxpY3QoKSkgew0KKwkJCQlnZXRTaXRlKCkuZ2V0UGFnZSgpLmNsb3NlRWRpdG9yKFJrRWRpdG9yLnRoaXMsIGZhbHNlKTsNCisJCQl9DQorCQkJZWxzZSB7DQorCQkJCXJlbW92ZWRSZXNvdXJjZXMuY2xlYXIoKTsNCisJCQkJY2hhbmdlZFJlc291cmNlcy5jbGVhcigpOw0KKwkJCQlzYXZlZFJlc291cmNlcy5jbGVhcigpOw0KKwkJCX0NCisJCX0NCisJCWVsc2UgaWYgKCFjaGFuZ2VkUmVzb3VyY2VzLmlzRW1wdHkoKSkgew0KKwkJCWNoYW5nZWRSZXNvdXJjZXMucmVtb3ZlQWxsKHNhdmVkUmVzb3VyY2VzKTsNCisJCQloYW5kbGVDaGFuZ2VkUmVzb3VyY2VzKCk7DQorCQkJY2hhbmdlZFJlc291cmNlcy5jbGVhcigpOw0KKwkJCXNhdmVkUmVzb3VyY2VzLmNsZWFyKCk7DQorCQl9DQorCX0NCisNCisJLyoqDQorCSAqIEhhbmRsZXMgd2hhdCB0byBkbyB3aXRoIGNoYW5nZWQgcmVzb3VyY2VzIG9uIGFjdGl2YXRpb24uDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgdm9pZCBoYW5kbGVDaGFuZ2VkUmVzb3VyY2VzKCkgew0KKwkJaWYgKCFjaGFuZ2VkUmVzb3VyY2VzLmlzRW1wdHkoKSAmJiAoIWlzRGlydHkoKSB8fCBoYW5kbGVEaXJ0eUNvbmZsaWN0KCkpKSB7DQorCQkJaWYgKGlzRGlydHkoKSkgew0KKwkJCQljaGFuZ2VkUmVzb3VyY2VzLmFkZEFsbChlZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkuZ2V0UmVzb3VyY2VzKCkpOw0KKwkJCX0NCisJCQllZGl0aW5nRG9tYWluLmdldENvbW1hbmRTdGFjaygpLmZsdXNoKCk7DQorDQorCQkJdXBkYXRlUHJvYmxlbUluZGljYXRpb24gPSBmYWxzZTsNCisJCQlmb3IgKFJlc291cmNlIHJlc291cmNlIDogY2hhbmdlZFJlc291cmNlcykgew0KKwkJCQlpZiAocmVzb3VyY2UuaXNMb2FkZWQoKSkgew0KKwkJCQkJcmVzb3VyY2UudW5sb2FkKCk7DQorCQkJCQl0cnkgew0KKwkJCQkJCXJlc291cmNlLmxvYWQoQ29sbGVjdGlvbnMuRU1QVFlfTUFQKTsNCisJCQkJCX0NCisJCQkJCWNhdGNoIChJT0V4Y2VwdGlvbiBleGNlcHRpb24pIHsNCisJCQkJCQlpZiAoIXJlc291cmNlVG9EaWFnbm9zdGljTWFwLmNvbnRhaW5zS2V5KHJlc291cmNlKSkgew0KKwkJCQkJCQlyZXNvdXJjZVRvRGlhZ25vc3RpY01hcC5wdXQocmVzb3VyY2UsIGFuYWx5emVSZXNvdXJjZVByb2JsZW1zKHJlc291cmNlLCBleGNlcHRpb24pKTsNCisJCQkJCQl9DQorCQkJCQl9DQorCQkJCX0NCisJCQl9DQorDQorCQkJaWYgKEFkYXB0ZXJGYWN0b3J5RWRpdGluZ0RvbWFpbi5pc1N0YWxlKGVkaXRvclNlbGVjdGlvbikpIHsNCisJCQkJc2V0U2VsZWN0aW9uKFN0cnVjdHVyZWRTZWxlY3Rpb24uRU1QVFkpOw0KKwkJCX0NCisNCisJCQl1cGRhdGVQcm9ibGVtSW5kaWNhdGlvbiA9IHRydWU7DQorCQkJdXBkYXRlUHJvYmxlbUluZGljYXRpb24oKTsNCisJCX0NCisJfQ0KKyAgDQorCS8qKg0KKwkgKiBVcGRhdGVzIHRoZSBwcm9ibGVtcyBpbmRpY2F0aW9uIHdpdGggdGhlIGluZm9ybWF0aW9uIGRlc2NyaWJlZCBpbiB0aGUgc3BlY2lmaWVkIGRpYWdub3N0aWMuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgdm9pZCB1cGRhdGVQcm9ibGVtSW5kaWNhdGlvbigpIHsNCisJCWlmICh1cGRhdGVQcm9ibGVtSW5kaWNhdGlvbikgew0KKwkJCUJhc2ljRGlhZ25vc3RpYyBkaWFnbm9zdGljID0NCisJCQkJbmV3IEJhc2ljRGlhZ25vc3RpYw0KKwkJCQkJKERpYWdub3N0aWMuT0ssDQorCQkJCQkgIm9yZy5lY2xpcHNlLnN0ZW0uc29sdmVycy5yay5lZGl0b3IiLA0KKwkJCQkJIDAsDQorCQkJCQkgbnVsbCwNCisJCQkJCSBuZXcgT2JqZWN0IFtdIHsgZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpIH0pOw0KKwkJCWZvciAoRGlhZ25vc3RpYyBjaGlsZERpYWdub3N0aWMgOiByZXNvdXJjZVRvRGlhZ25vc3RpY01hcC52YWx1ZXMoKSkgew0KKwkJCQlpZiAoY2hpbGREaWFnbm9zdGljLmdldFNldmVyaXR5KCkgIT0gRGlhZ25vc3RpYy5PSykgew0KKwkJCQkJZGlhZ25vc3RpYy5hZGQoY2hpbGREaWFnbm9zdGljKTsNCisJCQkJfQ0KKwkJCX0NCisNCisJCQlpbnQgbGFzdEVkaXRvclBhZ2UgPSBnZXRQYWdlQ291bnQoKSAtIDE7DQorCQkJaWYgKGxhc3RFZGl0b3JQYWdlID49IDAgJiYgZ2V0RWRpdG9yKGxhc3RFZGl0b3JQYWdlKSBpbnN0YW5jZW9mIFByb2JsZW1FZGl0b3JQYXJ0KSB7DQorCQkJCSgoUHJvYmxlbUVkaXRvclBhcnQpZ2V0RWRpdG9yKGxhc3RFZGl0b3JQYWdlKSkuc2V0RGlhZ25vc3RpYyhkaWFnbm9zdGljKTsNCisJCQkJaWYgKGRpYWdub3N0aWMuZ2V0U2V2ZXJpdHkoKSAhPSBEaWFnbm9zdGljLk9LKSB7DQorCQkJCQlzZXRBY3RpdmVQYWdlKGxhc3RFZGl0b3JQYWdlKTsNCisJCQkJfQ0KKwkJCX0NCisJCQllbHNlIGlmIChkaWFnbm9zdGljLmdldFNldmVyaXR5KCkgIT0gRGlhZ25vc3RpYy5PSykgew0KKwkJCQlQcm9ibGVtRWRpdG9yUGFydCBwcm9ibGVtRWRpdG9yUGFydCA9IG5ldyBQcm9ibGVtRWRpdG9yUGFydCgpOw0KKwkJCQlwcm9ibGVtRWRpdG9yUGFydC5zZXREaWFnbm9zdGljKGRpYWdub3N0aWMpOw0KKwkJCQlwcm9ibGVtRWRpdG9yUGFydC5zZXRNYXJrZXJIZWxwZXIobWFya2VySGVscGVyKTsNCisJCQkJdHJ5IHsNCisJCQkJCWFkZFBhZ2UoKytsYXN0RWRpdG9yUGFnZSwgcHJvYmxlbUVkaXRvclBhcnQsIGdldEVkaXRvcklucHV0KCkpOw0KKwkJCQkJc2V0UGFnZVRleHQobGFzdEVkaXRvclBhZ2UsIHByb2JsZW1FZGl0b3JQYXJ0LmdldFBhcnROYW1lKCkpOw0KKwkJCQkJc2V0QWN0aXZlUGFnZShsYXN0RWRpdG9yUGFnZSk7DQorCQkJCQlzaG93VGFicygpOw0KKwkJCQl9DQorCQkJCWNhdGNoIChQYXJ0SW5pdEV4Y2VwdGlvbiBleGNlcHRpb24pIHsNCisJCQkJCVJrRWRpdG9yUGx1Z2luLklOU1RBTkNFLmxvZyhleGNlcHRpb24pOw0KKwkJCQl9DQorCQkJfQ0KKw0KKwkJCWlmIChtYXJrZXJIZWxwZXIuaGFzTWFya2VycyhlZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkpKSB7DQorCQkJCW1hcmtlckhlbHBlci5kZWxldGVNYXJrZXJzKGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKSk7DQorCQkJCWlmIChkaWFnbm9zdGljLmdldFNldmVyaXR5KCkgIT0gRGlhZ25vc3RpYy5PSykgew0KKwkJCQkJdHJ5IHsNCisJCQkJCQltYXJrZXJIZWxwZXIuY3JlYXRlTWFya2VycyhkaWFnbm9zdGljKTsNCisJCQkJCX0NCisJCQkJCWNhdGNoIChDb3JlRXhjZXB0aW9uIGV4Y2VwdGlvbikgew0KKwkJCQkJCVJrRWRpdG9yUGx1Z2luLklOU1RBTkNFLmxvZyhleGNlcHRpb24pOw0KKwkJCQkJfQ0KKwkJCQl9DQorCQkJfQ0KKwkJfQ0KKwl9DQorDQorCS8qKg0KKwkgKiBTaG93cyBhIGRpYWxvZyB0aGF0IGFza3MgaWYgY29uZmxpY3RpbmcgY2hhbmdlcyBzaG91bGQgYmUgZGlzY2FyZGVkLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIGJvb2xlYW4gaGFuZGxlRGlydHlDb25mbGljdCgpIHsNCisJCXJldHVybg0KKwkJCU1lc3NhZ2VEaWFsb2cub3BlblF1ZXN0aW9uDQorCQkJCShnZXRTaXRlKCkuZ2V0U2hlbGwoKSwNCisJCQkJIGdldFN0cmluZygiX1VJX0ZpbGVDb25mbGljdF9sYWJlbCIpLA0KKwkJCQkgZ2V0U3RyaW5nKCJfV0FSTl9GaWxlQ29uZmxpY3QiKSk7DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgY3JlYXRlcyBhIG1vZGVsIGVkaXRvci4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBSa0VkaXRvcigpIHsNCisJCXN1cGVyKCk7DQorCQlpbml0aWFsaXplRWRpdGluZ0RvbWFpbigpOw0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIHNldHMgdXAgdGhlIGVkaXRpbmcgZG9tYWluIGZvciB0aGUgbW9kZWwgZWRpdG9yLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIHZvaWQgaW5pdGlhbGl6ZUVkaXRpbmdEb21haW4oKSB7DQorCQkvLyBDcmVhdGUgYW4gYWRhcHRlciBmYWN0b3J5IHRoYXQgeWllbGRzIGl0ZW0gcHJvdmlkZXJzLg0KKwkJLy8NCisJCWFkYXB0ZXJGYWN0b3J5ID0gbmV3IENvbXBvc2VkQWRhcHRlckZhY3RvcnkoQ29tcG9zZWRBZGFwdGVyRmFjdG9yeS5EZXNjcmlwdG9yLlJlZ2lzdHJ5LklOU1RBTkNFKTsNCisNCisJCWFkYXB0ZXJGYWN0b3J5LmFkZEFkYXB0ZXJGYWN0b3J5KG5ldyBSZXNvdXJjZUl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5KCkpOw0KKwkJYWRhcHRlckZhY3RvcnkuYWRkQWRhcHRlckZhY3RvcnkobmV3IFJrSXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkoKSk7DQorCQlhZGFwdGVyRmFjdG9yeS5hZGRBZGFwdGVyRmFjdG9yeShuZXcgQ29tbW9uSXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkoKSk7DQorCQlhZGFwdGVyRmFjdG9yeS5hZGRBZGFwdGVyRmFjdG9yeShuZXcgR3JhcGhJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSgpKTsNCisJCWFkYXB0ZXJGYWN0b3J5LmFkZEFkYXB0ZXJGYWN0b3J5KG5ldyBNb2RlbEl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5KCkpOw0KKwkJYWRhcHRlckZhY3RvcnkuYWRkQWRhcHRlckZhY3RvcnkobmV3IE1vZGlmaWVySXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkoKSk7DQorCQlhZGFwdGVyRmFjdG9yeS5hZGRBZGFwdGVyRmFjdG9yeShuZXcgU2NlbmFyaW9JdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSgpKTsNCisJCWFkYXB0ZXJGYWN0b3J5LmFkZEFkYXB0ZXJGYWN0b3J5KG5ldyBTZXF1ZW5jZXJJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSgpKTsNCisJCWFkYXB0ZXJGYWN0b3J5LmFkZEFkYXB0ZXJGYWN0b3J5KG5ldyBTb2x2ZXJJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSgpKTsNCisJCWFkYXB0ZXJGYWN0b3J5LmFkZEFkYXB0ZXJGYWN0b3J5KG5ldyBFY29yZUl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5KCkpOw0KKwkJYWRhcHRlckZhY3RvcnkuYWRkQWRhcHRlckZhY3RvcnkobmV3IFJlZmxlY3RpdmVJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSgpKTsNCisNCisJCS8vIENyZWF0ZSB0aGUgY29tbWFuZCBzdGFjayB0aGF0IHdpbGwgbm90aWZ5IHRoaXMgZWRpdG9yIGFzIGNvbW1hbmRzIGFyZSBleGVjdXRlZC4NCisJCS8vDQorCQlCYXNpY0NvbW1hbmRTdGFjayBjb21tYW5kU3RhY2sgPSBuZXcgQmFzaWNDb21tYW5kU3RhY2soKTsNCisNCisJCS8vIEFkZCBhIGxpc3RlbmVyIHRvIHNldCB0aGUgbW9zdCByZWNlbnQgY29tbWFuZCdzIGFmZmVjdGVkIG9iamVjdHMgdG8gYmUgdGhlIHNlbGVjdGlvbiBvZiB0aGUgdmlld2VyIHdpdGggZm9jdXMuDQorCQkvLw0KKwkJY29tbWFuZFN0YWNrLmFkZENvbW1hbmRTdGFja0xpc3RlbmVyDQorCQkJKG5ldyBDb21tYW5kU3RhY2tMaXN0ZW5lcigpIHsNCisJCQkJIHB1YmxpYyB2b2lkIGNvbW1hbmRTdGFja0NoYW5nZWQoZmluYWwgRXZlbnRPYmplY3QgZXZlbnQpIHsNCisJCQkJCSBnZXRDb250YWluZXIoKS5nZXREaXNwbGF5KCkuYXN5bmNFeGVjDQorCQkJCQkJIChuZXcgUnVubmFibGUoKSB7DQorCQkJCQkJCSAgcHVibGljIHZvaWQgcnVuKCkgew0KKwkJCQkJCQkJICBmaXJlUHJvcGVydHlDaGFuZ2UoSUVkaXRvclBhcnQuUFJPUF9ESVJUWSk7DQorDQorCQkJCQkJCQkgIC8vIFRyeSB0byBzZWxlY3QgdGhlIGFmZmVjdGVkIG9iamVjdHMuDQorCQkJCQkJCQkgIC8vDQorCQkJCQkJCQkgIENvbW1hbmQgbW9zdFJlY2VudENvbW1hbmQgPSAoKENvbW1hbmRTdGFjaylldmVudC5nZXRTb3VyY2UoKSkuZ2V0TW9zdFJlY2VudENvbW1hbmQoKTsNCisJCQkJCQkJCSAgaWYgKG1vc3RSZWNlbnRDb21tYW5kICE9IG51bGwpIHsNCisJCQkJCQkJCQkgIHNldFNlbGVjdGlvblRvVmlld2VyKG1vc3RSZWNlbnRDb21tYW5kLmdldEFmZmVjdGVkT2JqZWN0cygpKTsNCisJCQkJCQkJCSAgfQ0KKwkJCQkJCQkJICBpZiAocHJvcGVydHlTaGVldFBhZ2UgIT0gbnVsbCAmJiAhcHJvcGVydHlTaGVldFBhZ2UuZ2V0Q29udHJvbCgpLmlzRGlzcG9zZWQoKSkgew0KKwkJCQkJCQkJCSAgcHJvcGVydHlTaGVldFBhZ2UucmVmcmVzaCgpOw0KKwkJCQkJCQkJICB9DQorCQkJCQkJCSAgfQ0KKwkJCQkJCSAgfSk7DQorCQkJCSB9DQorCQkJIH0pOw0KKw0KKwkJLy8gQ3JlYXRlIHRoZSBlZGl0aW5nIGRvbWFpbiB3aXRoIGEgc3BlY2lhbCBjb21tYW5kIHN0YWNrLg0KKwkJLy8NCisJCWVkaXRpbmdEb21haW4gPSBuZXcgQWRhcHRlckZhY3RvcnlFZGl0aW5nRG9tYWluKGFkYXB0ZXJGYWN0b3J5LCBjb21tYW5kU3RhY2ssIG5ldyBIYXNoTWFwPFJlc291cmNlLCBCb29sZWFuPigpKTsNCisJfQ0KKw0KKwkvKioNCisJICogVGhpcyBpcyBoZXJlIGZvciB0aGUgbGlzdGVuZXIgdG8gYmUgYWJsZSB0byBjYWxsIGl0Lg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJCQlAT3ZlcnJpZGUNCisJcHJvdGVjdGVkIHZvaWQgZmlyZVByb3BlcnR5Q2hhbmdlKGludCBhY3Rpb24pIHsNCisJCXN1cGVyLmZpcmVQcm9wZXJ0eUNoYW5nZShhY3Rpb24pOw0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIHNldHMgdGhlIHNlbGVjdGlvbiBpbnRvIHdoaWNoZXZlciB2aWV3ZXIgaXMgYWN0aXZlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIHZvaWQgc2V0U2VsZWN0aW9uVG9WaWV3ZXIoQ29sbGVjdGlvbjw/PiBjb2xsZWN0aW9uKSB7DQorCQlmaW5hbCBDb2xsZWN0aW9uPD8+IHRoZVNlbGVjdGlvbiA9IGNvbGxlY3Rpb247DQorCQkvLyBNYWtlIHN1cmUgaXQncyBva2F5Lg0KKwkJLy8NCisJCWlmICh0aGVTZWxlY3Rpb24gIT0gbnVsbCAmJiAhdGhlU2VsZWN0aW9uLmlzRW1wdHkoKSkgew0KKwkJCS8vIEkgZG9uJ3Qga25vdyBpZiB0aGlzIHNob3VsZCBiZSBydW4gdGhpcyBkZWZlcnJlZA0KKwkJCS8vIGJlY2F1c2Ugd2UgbWlnaHQgaGF2ZSB0byBnaXZlIHRoZSBlZGl0b3IgYSBjaGFuY2UgdG8gcHJvY2VzcyB0aGUgdmlld2VyIHVwZGF0ZSBldmVudHMNCisJCQkvLyBhbmQgaGVuY2UgdG8gdXBkYXRlIHRoZSB2aWV3cyBmaXJzdC4NCisJCQkvLw0KKwkJCS8vDQorCQkJUnVubmFibGUgcnVubmFibGUgPQ0KKwkJCQluZXcgUnVubmFibGUoKSB7DQorCQkJCQlwdWJsaWMgdm9pZCBydW4oKSB7DQorCQkJCQkJLy8gVHJ5IHRvIHNlbGVjdCB0aGUgaXRlbXMgaW4gdGhlIGN1cnJlbnQgY29udGVudCB2aWV3ZXIgb2YgdGhlIGVkaXRvci4NCisJCQkJCQkvLw0KKwkJCQkJCWlmIChjdXJyZW50Vmlld2VyICE9IG51bGwpIHsNCisJCQkJCQkJY3VycmVudFZpZXdlci5zZXRTZWxlY3Rpb24obmV3IFN0cnVjdHVyZWRTZWxlY3Rpb24odGhlU2VsZWN0aW9uLnRvQXJyYXkoKSksIHRydWUpOw0KKwkJCQkJCX0NCisJCQkJCX0NCisJCQkJfTsNCisJCQlydW5uYWJsZS5ydW4oKTsNCisJCX0NCisJfQ0KKw0KKwkvKioNCisJICogVGhpcyByZXR1cm5zIHRoZSBlZGl0aW5nIGRvbWFpbiBhcyByZXF1aXJlZCBieSB0aGUge0BsaW5rIElFZGl0aW5nRG9tYWluUHJvdmlkZXJ9IGludGVyZmFjZS4NCisJICogVGhpcyBpcyBpbXBvcnRhbnQgZm9yIGltcGxlbWVudGluZyB0aGUgc3RhdGljIG1ldGhvZHMgb2Yge0BsaW5rIEFkYXB0ZXJGYWN0b3J5RWRpdGluZ0RvbWFpbn0NCisJICogYW5kIGZvciBzdXBwb3J0aW5nIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5hY3Rpb24uQ29tbWFuZEFjdGlvbn0uDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgRWRpdGluZ0RvbWFpbiBnZXRFZGl0aW5nRG9tYWluKCkgew0KKwkJcmV0dXJuIGVkaXRpbmdEb21haW47DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgY2xhc3MgUmV2ZXJzZUFkYXB0ZXJGYWN0b3J5Q29udGVudFByb3ZpZGVyIGV4dGVuZHMgQWRhcHRlckZhY3RvcnlDb250ZW50UHJvdmlkZXIgew0KKwkJLyoqDQorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCQkgKiBAZ2VuZXJhdGVkDQorCQkgKi8NCisJCXB1YmxpYyBSZXZlcnNlQWRhcHRlckZhY3RvcnlDb250ZW50UHJvdmlkZXIoQWRhcHRlckZhY3RvcnkgYWRhcHRlckZhY3RvcnkpIHsNCisJCQlzdXBlcihhZGFwdGVyRmFjdG9yeSk7DQorCQl9DQorDQorCQkvKioNCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJCSAqIEBnZW5lcmF0ZWQNCisJCSAqLw0KKwkJQE92ZXJyaWRlDQorCQlwdWJsaWMgT2JqZWN0IFtdIGdldEVsZW1lbnRzKE9iamVjdCBvYmplY3QpIHsNCisJCQlPYmplY3QgcGFyZW50ID0gc3VwZXIuZ2V0UGFyZW50KG9iamVjdCk7DQorCQkJcmV0dXJuIChwYXJlbnQgPT0gbnVsbCA/IENvbGxlY3Rpb25zLkVNUFRZX1NFVCA6IENvbGxlY3Rpb25zLnNpbmdsZXRvbihwYXJlbnQpKS50b0FycmF5KCk7DQorCQl9DQorDQorCQkvKioNCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJCSAqIEBnZW5lcmF0ZWQNCisJCSAqLw0KKwkJQE92ZXJyaWRlDQorCQlwdWJsaWMgT2JqZWN0IFtdIGdldENoaWxkcmVuKE9iamVjdCBvYmplY3QpIHsNCisJCQlPYmplY3QgcGFyZW50ID0gc3VwZXIuZ2V0UGFyZW50KG9iamVjdCk7DQorCQkJcmV0dXJuIChwYXJlbnQgPT0gbnVsbCA/IENvbGxlY3Rpb25zLkVNUFRZX1NFVCA6IENvbGxlY3Rpb25zLnNpbmdsZXRvbihwYXJlbnQpKS50b0FycmF5KCk7DQorCQl9DQorDQorCQkvKioNCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJCSAqIEBnZW5lcmF0ZWQNCisJCSAqLw0KKwkJQE92ZXJyaWRlDQorCQlwdWJsaWMgYm9vbGVhbiBoYXNDaGlsZHJlbihPYmplY3Qgb2JqZWN0KSB7DQorCQkJT2JqZWN0IHBhcmVudCA9IHN1cGVyLmdldFBhcmVudChvYmplY3QpOw0KKwkJCXJldHVybiBwYXJlbnQgIT0gbnVsbDsNCisJCX0NCisNCisJCS8qKg0KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkJICogQGdlbmVyYXRlZA0KKwkJICovDQorCQlAT3ZlcnJpZGUNCisJCXB1YmxpYyBPYmplY3QgZ2V0UGFyZW50KE9iamVjdCBvYmplY3QpIHsNCisJCQlyZXR1cm4gbnVsbDsNCisJCX0NCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyB2b2lkIHNldEN1cnJlbnRWaWV3ZXJQYW5lKFZpZXdlclBhbmUgdmlld2VyUGFuZSkgew0KKwkJaWYgKGN1cnJlbnRWaWV3ZXJQYW5lICE9IHZpZXdlclBhbmUpIHsNCisJCQlpZiAoY3VycmVudFZpZXdlclBhbmUgIT0gbnVsbCkgew0KKwkJCQljdXJyZW50Vmlld2VyUGFuZS5zaG93Rm9jdXMoZmFsc2UpOw0KKwkJCX0NCisJCQljdXJyZW50Vmlld2VyUGFuZSA9IHZpZXdlclBhbmU7DQorCQl9DQorCQlzZXRDdXJyZW50Vmlld2VyKGN1cnJlbnRWaWV3ZXJQYW5lLmdldFZpZXdlcigpKTsNCisJfQ0KKw0KKwkvKioNCisJICogVGhpcyBtYWtlcyBzdXJlIHRoYXQgb25lIGNvbnRlbnQgdmlld2VyLCBlaXRoZXIgZm9yIHRoZSBjdXJyZW50IHBhZ2Ugb3IgdGhlIG91dGxpbmUgdmlldywgaWYgaXQgaGFzIGZvY3VzLA0KKwkgKiBpcyB0aGUgY3VycmVudCBvbmUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgdm9pZCBzZXRDdXJyZW50Vmlld2VyKFZpZXdlciB2aWV3ZXIpIHsNCisJCS8vIElmIGl0IGlzIGNoYW5naW5nLi4uDQorCQkvLw0KKwkJaWYgKGN1cnJlbnRWaWV3ZXIgIT0gdmlld2VyKSB7DQorCQkJaWYgKHNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lciA9PSBudWxsKSB7DQorCQkJCS8vIENyZWF0ZSB0aGUgbGlzdGVuZXIgb24gZGVtYW5kLg0KKwkJCQkvLw0KKwkJCQlzZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIgPQ0KKwkJCQkJbmV3IElTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIoKSB7DQorCQkJCQkJLy8gVGhpcyBqdXN0IG5vdGlmaWVzIHRob3NlIHRoaW5ncyB0aGF0IGFyZSBhZmZlY3RlZCBieSB0aGUgc2VjdGlvbi4NCisJCQkJCQkvLw0KKwkJCQkJCXB1YmxpYyB2b2lkIHNlbGVjdGlvbkNoYW5nZWQoU2VsZWN0aW9uQ2hhbmdlZEV2ZW50IHNlbGVjdGlvbkNoYW5nZWRFdmVudCkgew0KKwkJCQkJCQlzZXRTZWxlY3Rpb24oc2VsZWN0aW9uQ2hhbmdlZEV2ZW50LmdldFNlbGVjdGlvbigpKTsNCisJCQkJCQl9DQorCQkJCQl9Ow0KKwkJCX0NCisNCisJCQkvLyBTdG9wIGxpc3RlbmluZyB0byB0aGUgb2xkIG9uZS4NCisJCQkvLw0KKwkJCWlmIChjdXJyZW50Vmlld2VyICE9IG51bGwpIHsNCisJCQkJY3VycmVudFZpZXdlci5yZW1vdmVTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIoc2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyKTsNCisJCQl9DQorDQorCQkJLy8gU3RhcnQgbGlzdGVuaW5nIHRvIHRoZSBuZXcgb25lLg0KKwkJCS8vDQorCQkJaWYgKHZpZXdlciAhPSBudWxsKSB7DQorCQkJCXZpZXdlci5hZGRTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIoc2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyKTsNCisJCQl9DQorDQorCQkJLy8gUmVtZW1iZXIgaXQuDQorCQkJLy8NCisJCQljdXJyZW50Vmlld2VyID0gdmlld2VyOw0KKw0KKwkJCS8vIFNldCB0aGUgZWRpdG9ycyBzZWxlY3Rpb24gYmFzZWQgb24gdGhlIGN1cnJlbnQgdmlld2VyJ3Mgc2VsZWN0aW9uLg0KKwkJCS8vDQorCQkJc2V0U2VsZWN0aW9uKGN1cnJlbnRWaWV3ZXIgPT0gbnVsbCA/IFN0cnVjdHVyZWRTZWxlY3Rpb24uRU1QVFkgOiBjdXJyZW50Vmlld2VyLmdldFNlbGVjdGlvbigpKTsNCisJCX0NCisJfQ0KKw0KKwkvKioNCisJICogVGhpcyByZXR1cm5zIHRoZSB2aWV3ZXIgYXMgcmVxdWlyZWQgYnkgdGhlIHtAbGluayBJVmlld2VyUHJvdmlkZXJ9IGludGVyZmFjZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBWaWV3ZXIgZ2V0Vmlld2VyKCkgew0KKwkJcmV0dXJuIGN1cnJlbnRWaWV3ZXI7DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgY3JlYXRlcyBhIGNvbnRleHQgbWVudSBmb3IgdGhlIHZpZXdlciBhbmQgYWRkcyBhIGxpc3RlbmVyIGFzIHdlbGwgcmVnaXN0ZXJpbmcgdGhlIG1lbnUgZm9yIGV4dGVuc2lvbi4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCB2b2lkIGNyZWF0ZUNvbnRleHRNZW51Rm9yKFN0cnVjdHVyZWRWaWV3ZXIgdmlld2VyKSB7DQorCQlNZW51TWFuYWdlciBjb250ZXh0TWVudSA9IG5ldyBNZW51TWFuYWdlcigiI1BvcFVwIik7DQorCQljb250ZXh0TWVudS5hZGQobmV3IFNlcGFyYXRvcigiYWRkaXRpb25zIikpOw0KKwkJY29udGV4dE1lbnUuc2V0UmVtb3ZlQWxsV2hlblNob3duKHRydWUpOw0KKwkJY29udGV4dE1lbnUuYWRkTWVudUxpc3RlbmVyKHRoaXMpOw0KKwkJTWVudSBtZW51PSBjb250ZXh0TWVudS5jcmVhdGVDb250ZXh0TWVudSh2aWV3ZXIuZ2V0Q29udHJvbCgpKTsNCisJCXZpZXdlci5nZXRDb250cm9sKCkuc2V0TWVudShtZW51KTsNCisJCWdldFNpdGUoKS5yZWdpc3RlckNvbnRleHRNZW51KGNvbnRleHRNZW51LCBuZXcgVW53cmFwcGluZ1NlbGVjdGlvblByb3ZpZGVyKHZpZXdlcikpOw0KKw0KKwkJaW50IGRuZE9wZXJhdGlvbnMgPSBETkQuRFJPUF9DT1BZIHwgRE5ELkRST1BfTU9WRSB8IERORC5EUk9QX0xJTks7DQorCQlUcmFuc2ZlcltdIHRyYW5zZmVycyA9IG5ldyBUcmFuc2ZlcltdIHsgTG9jYWxUcmFuc2Zlci5nZXRJbnN0YW5jZSgpIH07DQorCQl2aWV3ZXIuYWRkRHJhZ1N1cHBvcnQoZG5kT3BlcmF0aW9ucywgdHJhbnNmZXJzLCBuZXcgVmlld2VyRHJhZ0FkYXB0ZXIodmlld2VyKSk7DQorCQl2aWV3ZXIuYWRkRHJvcFN1cHBvcnQoZG5kT3BlcmF0aW9ucywgdHJhbnNmZXJzLCBuZXcgRWRpdGluZ0RvbWFpblZpZXdlckRyb3BBZGFwdGVyKGVkaXRpbmdEb21haW4sIHZpZXdlcikpOw0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIGlzIHRoZSBtZXRob2QgY2FsbGVkIHRvIGxvYWQgYSByZXNvdXJjZSBpbnRvIHRoZSBlZGl0aW5nIGRvbWFpbidzIHJlc291cmNlIHNldCBiYXNlZCBvbiB0aGUgZWRpdG9yJ3MgaW5wdXQuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgdm9pZCBjcmVhdGVNb2RlbCgpIHsNCisJCVVSSSByZXNvdXJjZVVSSSA9IEVkaXRVSVV0aWwuZ2V0VVJJKGdldEVkaXRvcklucHV0KCkpOw0KKwkJRXhjZXB0aW9uIGV4Y2VwdGlvbiA9IG51bGw7DQorCQlSZXNvdXJjZSByZXNvdXJjZSA9IG51bGw7DQorCQl0cnkgew0KKwkJCS8vIExvYWQgdGhlIHJlc291cmNlIHRocm91Z2ggdGhlIGVkaXRpbmcgZG9tYWluLg0KKwkJCS8vDQorCQkJcmVzb3VyY2UgPSBlZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkuZ2V0UmVzb3VyY2UocmVzb3VyY2VVUkksIHRydWUpOw0KKwkJfQ0KKwkJY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7DQorCQkJZXhjZXB0aW9uID0gZTsNCisJCQlyZXNvdXJjZSA9IGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKS5nZXRSZXNvdXJjZShyZXNvdXJjZVVSSSwgZmFsc2UpOw0KKwkJfQ0KKw0KKwkJRGlhZ25vc3RpYyBkaWFnbm9zdGljID0gYW5hbHl6ZVJlc291cmNlUHJvYmxlbXMocmVzb3VyY2UsIGV4Y2VwdGlvbik7DQorCQlpZiAoZGlhZ25vc3RpYy5nZXRTZXZlcml0eSgpICE9IERpYWdub3N0aWMuT0spIHsNCisJCQlyZXNvdXJjZVRvRGlhZ25vc3RpY01hcC5wdXQocmVzb3VyY2UsICBhbmFseXplUmVzb3VyY2VQcm9ibGVtcyhyZXNvdXJjZSwgZXhjZXB0aW9uKSk7DQorCQl9DQorCQllZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkuZUFkYXB0ZXJzKCkuYWRkKHByb2JsZW1JbmRpY2F0aW9uQWRhcHRlcik7DQorCX0NCisNCisJLyoqDQorCSAqIFJldHVybnMgYSBkaWFnbm9zdGljIGRlc2NyaWJpbmcgdGhlIGVycm9ycyBhbmQgd2FybmluZ3MgbGlzdGVkIGluIHRoZSByZXNvdXJjZQ0KKwkgKiBhbmQgdGhlIHNwZWNpZmllZCBleGNlcHRpb24gKGlmIGFueSkuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgRGlhZ25vc3RpYyBhbmFseXplUmVzb3VyY2VQcm9ibGVtcyhSZXNvdXJjZSByZXNvdXJjZSwgRXhjZXB0aW9uIGV4Y2VwdGlvbikgew0KKwkJaWYgKCFyZXNvdXJjZS5nZXRFcnJvcnMoKS5pc0VtcHR5KCkgfHwgIXJlc291cmNlLmdldFdhcm5pbmdzKCkuaXNFbXB0eSgpKSB7DQorCQkJQmFzaWNEaWFnbm9zdGljIGJhc2ljRGlhZ25vc3RpYyA9DQorCQkJCW5ldyBCYXNpY0RpYWdub3N0aWMNCisJCQkJCShEaWFnbm9zdGljLkVSUk9SLA0KKwkJCQkJICJvcmcuZWNsaXBzZS5zdGVtLnNvbHZlcnMucmsuZWRpdG9yIiwNCisJCQkJCSAwLA0KKwkJCQkJIGdldFN0cmluZygiX1VJX0NyZWF0ZU1vZGVsRXJyb3JfbWVzc2FnZSIsIHJlc291cmNlLmdldFVSSSgpKSwNCisJCQkJCSBuZXcgT2JqZWN0IFtdIHsgZXhjZXB0aW9uID09IG51bGwgPyAoT2JqZWN0KXJlc291cmNlIDogZXhjZXB0aW9uIH0pOw0KKwkJCWJhc2ljRGlhZ25vc3RpYy5tZXJnZShFY29yZVV0aWwuY29tcHV0ZURpYWdub3N0aWMocmVzb3VyY2UsIHRydWUpKTsNCisJCQlyZXR1cm4gYmFzaWNEaWFnbm9zdGljOw0KKwkJfQ0KKwkJZWxzZSBpZiAoZXhjZXB0aW9uICE9IG51bGwpIHsNCisJCQlyZXR1cm4NCisJCQkJbmV3IEJhc2ljRGlhZ25vc3RpYw0KKwkJCQkJKERpYWdub3N0aWMuRVJST1IsDQorCQkJCQkgIm9yZy5lY2xpcHNlLnN0ZW0uc29sdmVycy5yay5lZGl0b3IiLA0KKwkJCQkJIDAsDQorCQkJCQkgZ2V0U3RyaW5nKCJfVUlfQ3JlYXRlTW9kZWxFcnJvcl9tZXNzYWdlIiwgcmVzb3VyY2UuZ2V0VVJJKCkpLA0KKwkJCQkJIG5ldyBPYmplY3RbXSB7IGV4Y2VwdGlvbiB9KTsNCisJCX0NCisJCWVsc2Ugew0KKwkJCXJldHVybiBEaWFnbm9zdGljLk9LX0lOU1RBTkNFOw0KKwkJfQ0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIGlzIHRoZSBtZXRob2QgdXNlZCBieSB0aGUgZnJhbWV3b3JrIHRvIGluc3RhbGwgeW91ciBvd24gY29udHJvbHMuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlAT3ZlcnJpZGUNCisJcHVibGljIHZvaWQgY3JlYXRlUGFnZXMoKSB7DQorCQkvLyBDcmVhdGVzIHRoZSBtb2RlbCBmcm9tIHRoZSBlZGl0b3IgaW5wdXQNCisJCS8vDQorCQljcmVhdGVNb2RlbCgpOw0KKw0KKwkJLy8gT25seSBjcmVhdGVzIHRoZSBvdGhlciBwYWdlcyBpZiB0aGVyZSBpcyBzb21ldGhpbmcgdGhhdCBjYW4gYmUgZWRpdGVkDQorCQkvLw0KKwkJaWYgKCFnZXRFZGl0aW5nRG9tYWluKCkuZ2V0UmVzb3VyY2VTZXQoKS5nZXRSZXNvdXJjZXMoKS5pc0VtcHR5KCkpIHsNCisJCQkvLyBDcmVhdGUgYSBwYWdlIGZvciB0aGUgc2VsZWN0aW9uIHRyZWUgdmlldy4NCisJCQkvLw0KKwkJCXsNCisJCQkJVmlld2VyUGFuZSB2aWV3ZXJQYW5lID0NCisJCQkJCW5ldyBWaWV3ZXJQYW5lKGdldFNpdGUoKS5nZXRQYWdlKCksIFJrRWRpdG9yLnRoaXMpIHsNCisJCQkJCQlAT3ZlcnJpZGUNCisJCQkJCQlwdWJsaWMgVmlld2VyIGNyZWF0ZVZpZXdlcihDb21wb3NpdGUgY29tcG9zaXRlKSB7DQorCQkJCQkJCVRyZWUgdHJlZSA9IG5ldyBUcmVlKGNvbXBvc2l0ZSwgU1dULk1VTFRJKTsNCisJCQkJCQkJVHJlZVZpZXdlciBuZXdUcmVlVmlld2VyID0gbmV3IFRyZWVWaWV3ZXIodHJlZSk7DQorCQkJCQkJCXJldHVybiBuZXdUcmVlVmlld2VyOw0KKwkJCQkJCX0NCisJCQkJCQlAT3ZlcnJpZGUNCisJCQkJCQlwdWJsaWMgdm9pZCByZXF1ZXN0QWN0aXZhdGlvbigpIHsNCisJCQkJCQkJc3VwZXIucmVxdWVzdEFjdGl2YXRpb24oKTsNCisJCQkJCQkJc2V0Q3VycmVudFZpZXdlclBhbmUodGhpcyk7DQorCQkJCQkJfQ0KKwkJCQkJfTsNCisJCQkJdmlld2VyUGFuZS5jcmVhdGVDb250cm9sKGdldENvbnRhaW5lcigpKTsNCisNCisJCQkJc2VsZWN0aW9uVmlld2VyID0gKFRyZWVWaWV3ZXIpdmlld2VyUGFuZS5nZXRWaWV3ZXIoKTsNCisJCQkJc2VsZWN0aW9uVmlld2VyLnNldENvbnRlbnRQcm92aWRlcihuZXcgQWRhcHRlckZhY3RvcnlDb250ZW50UHJvdmlkZXIoYWRhcHRlckZhY3RvcnkpKTsNCisNCisJCQkJc2VsZWN0aW9uVmlld2VyLnNldExhYmVsUHJvdmlkZXIobmV3IEFkYXB0ZXJGYWN0b3J5TGFiZWxQcm92aWRlcihhZGFwdGVyRmFjdG9yeSkpOw0KKwkJCQlzZWxlY3Rpb25WaWV3ZXIuc2V0SW5wdXQoZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpKTsNCisJCQkJc2VsZWN0aW9uVmlld2VyLnNldFNlbGVjdGlvbihuZXcgU3RydWN0dXJlZFNlbGVjdGlvbihlZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkuZ2V0UmVzb3VyY2VzKCkuZ2V0KDApKSwgdHJ1ZSk7DQorCQkJCXZpZXdlclBhbmUuc2V0VGl0bGUoZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpKTsNCisNCisJCQkJbmV3IEFkYXB0ZXJGYWN0b3J5VHJlZUVkaXRvcihzZWxlY3Rpb25WaWV3ZXIuZ2V0VHJlZSgpLCBhZGFwdGVyRmFjdG9yeSk7DQorDQorCQkJCWNyZWF0ZUNvbnRleHRNZW51Rm9yKHNlbGVjdGlvblZpZXdlcik7DQorCQkJCWludCBwYWdlSW5kZXggPSBhZGRQYWdlKHZpZXdlclBhbmUuZ2V0Q29udHJvbCgpKTsNCisJCQkJc2V0UGFnZVRleHQocGFnZUluZGV4LCBnZXRTdHJpbmcoIl9VSV9TZWxlY3Rpb25QYWdlX2xhYmVsIikpOw0KKwkJCX0NCisNCisJCQkvLyBDcmVhdGUgYSBwYWdlIGZvciB0aGUgcGFyZW50IHRyZWUgdmlldy4NCisJCQkvLw0KKwkJCXsNCisJCQkJVmlld2VyUGFuZSB2aWV3ZXJQYW5lID0NCisJCQkJCW5ldyBWaWV3ZXJQYW5lKGdldFNpdGUoKS5nZXRQYWdlKCksIFJrRWRpdG9yLnRoaXMpIHsNCisJCQkJCQlAT3ZlcnJpZGUNCisJCQkJCQlwdWJsaWMgVmlld2VyIGNyZWF0ZVZpZXdlcihDb21wb3NpdGUgY29tcG9zaXRlKSB7DQorCQkJCQkJCVRyZWUgdHJlZSA9IG5ldyBUcmVlKGNvbXBvc2l0ZSwgU1dULk1VTFRJKTsNCisJCQkJCQkJVHJlZVZpZXdlciBuZXdUcmVlVmlld2VyID0gbmV3IFRyZWVWaWV3ZXIodHJlZSk7DQorCQkJCQkJCXJldHVybiBuZXdUcmVlVmlld2VyOw0KKwkJCQkJCX0NCisJCQkJCQlAT3ZlcnJpZGUNCisJCQkJCQlwdWJsaWMgdm9pZCByZXF1ZXN0QWN0aXZhdGlvbigpIHsNCisJCQkJCQkJc3VwZXIucmVxdWVzdEFjdGl2YXRpb24oKTsNCisJCQkJCQkJc2V0Q3VycmVudFZpZXdlclBhbmUodGhpcyk7DQorCQkJCQkJfQ0KKwkJCQkJfTsNCisJCQkJdmlld2VyUGFuZS5jcmVhdGVDb250cm9sKGdldENvbnRhaW5lcigpKTsNCisNCisJCQkJcGFyZW50Vmlld2VyID0gKFRyZWVWaWV3ZXIpdmlld2VyUGFuZS5nZXRWaWV3ZXIoKTsNCisJCQkJcGFyZW50Vmlld2VyLnNldEF1dG9FeHBhbmRMZXZlbCgzMCk7DQorCQkJCXBhcmVudFZpZXdlci5zZXRDb250ZW50UHJvdmlkZXIobmV3IFJldmVyc2VBZGFwdGVyRmFjdG9yeUNvbnRlbnRQcm92aWRlcihhZGFwdGVyRmFjdG9yeSkpOw0KKwkJCQlwYXJlbnRWaWV3ZXIuc2V0TGFiZWxQcm92aWRlcihuZXcgQWRhcHRlckZhY3RvcnlMYWJlbFByb3ZpZGVyKGFkYXB0ZXJGYWN0b3J5KSk7DQorDQorCQkJCWNyZWF0ZUNvbnRleHRNZW51Rm9yKHBhcmVudFZpZXdlcik7DQorCQkJCWludCBwYWdlSW5kZXggPSBhZGRQYWdlKHZpZXdlclBhbmUuZ2V0Q29udHJvbCgpKTsNCisJCQkJc2V0UGFnZVRleHQocGFnZUluZGV4LCBnZXRTdHJpbmcoIl9VSV9QYXJlbnRQYWdlX2xhYmVsIikpOw0KKwkJCX0NCisNCisJCQkvLyBUaGlzIGlzIHRoZSBwYWdlIGZvciB0aGUgbGlzdCB2aWV3ZXINCisJCQkvLw0KKwkJCXsNCisJCQkJVmlld2VyUGFuZSB2aWV3ZXJQYW5lID0NCisJCQkJCW5ldyBWaWV3ZXJQYW5lKGdldFNpdGUoKS5nZXRQYWdlKCksIFJrRWRpdG9yLnRoaXMpIHsNCisJCQkJCQlAT3ZlcnJpZGUNCisJCQkJCQlwdWJsaWMgVmlld2VyIGNyZWF0ZVZpZXdlcihDb21wb3NpdGUgY29tcG9zaXRlKSB7DQorCQkJCQkJCXJldHVybiBuZXcgTGlzdFZpZXdlcihjb21wb3NpdGUpOw0KKwkJCQkJCX0NCisJCQkJCQlAT3ZlcnJpZGUNCisJCQkJCQlwdWJsaWMgdm9pZCByZXF1ZXN0QWN0aXZhdGlvbigpIHsNCisJCQkJCQkJc3VwZXIucmVxdWVzdEFjdGl2YXRpb24oKTsNCisJCQkJCQkJc2V0Q3VycmVudFZpZXdlclBhbmUodGhpcyk7DQorCQkJCQkJfQ0KKwkJCQkJfTsNCisJCQkJdmlld2VyUGFuZS5jcmVhdGVDb250cm9sKGdldENvbnRhaW5lcigpKTsNCisJCQkJbGlzdFZpZXdlciA9IChMaXN0Vmlld2VyKXZpZXdlclBhbmUuZ2V0Vmlld2VyKCk7DQorCQkJCWxpc3RWaWV3ZXIuc2V0Q29udGVudFByb3ZpZGVyKG5ldyBBZGFwdGVyRmFjdG9yeUNvbnRlbnRQcm92aWRlcihhZGFwdGVyRmFjdG9yeSkpOw0KKwkJCQlsaXN0Vmlld2VyLnNldExhYmVsUHJvdmlkZXIobmV3IEFkYXB0ZXJGYWN0b3J5TGFiZWxQcm92aWRlcihhZGFwdGVyRmFjdG9yeSkpOw0KKw0KKwkJCQljcmVhdGVDb250ZXh0TWVudUZvcihsaXN0Vmlld2VyKTsNCisJCQkJaW50IHBhZ2VJbmRleCA9IGFkZFBhZ2Uodmlld2VyUGFuZS5nZXRDb250cm9sKCkpOw0KKwkJCQlzZXRQYWdlVGV4dChwYWdlSW5kZXgsIGdldFN0cmluZygiX1VJX0xpc3RQYWdlX2xhYmVsIikpOw0KKwkJCX0NCisNCisJCQkvLyBUaGlzIGlzIHRoZSBwYWdlIGZvciB0aGUgdHJlZSB2aWV3ZXINCisJCQkvLw0KKwkJCXsNCisJCQkJVmlld2VyUGFuZSB2aWV3ZXJQYW5lID0NCisJCQkJCW5ldyBWaWV3ZXJQYW5lKGdldFNpdGUoKS5nZXRQYWdlKCksIFJrRWRpdG9yLnRoaXMpIHsNCisJCQkJCQlAT3ZlcnJpZGUNCisJCQkJCQlwdWJsaWMgVmlld2VyIGNyZWF0ZVZpZXdlcihDb21wb3NpdGUgY29tcG9zaXRlKSB7DQorCQkJCQkJCXJldHVybiBuZXcgVHJlZVZpZXdlcihjb21wb3NpdGUpOw0KKwkJCQkJCX0NCisJCQkJCQlAT3ZlcnJpZGUNCisJCQkJCQlwdWJsaWMgdm9pZCByZXF1ZXN0QWN0aXZhdGlvbigpIHsNCisJCQkJCQkJc3VwZXIucmVxdWVzdEFjdGl2YXRpb24oKTsNCisJCQkJCQkJc2V0Q3VycmVudFZpZXdlclBhbmUodGhpcyk7DQorCQkJCQkJfQ0KKwkJCQkJfTsNCisJCQkJdmlld2VyUGFuZS5jcmVhdGVDb250cm9sKGdldENvbnRhaW5lcigpKTsNCisJCQkJdHJlZVZpZXdlciA9IChUcmVlVmlld2VyKXZpZXdlclBhbmUuZ2V0Vmlld2VyKCk7DQorCQkJCXRyZWVWaWV3ZXIuc2V0Q29udGVudFByb3ZpZGVyKG5ldyBBZGFwdGVyRmFjdG9yeUNvbnRlbnRQcm92aWRlcihhZGFwdGVyRmFjdG9yeSkpOw0KKwkJCQl0cmVlVmlld2VyLnNldExhYmVsUHJvdmlkZXIobmV3IEFkYXB0ZXJGYWN0b3J5TGFiZWxQcm92aWRlcihhZGFwdGVyRmFjdG9yeSkpOw0KKw0KKwkJCQluZXcgQWRhcHRlckZhY3RvcnlUcmVlRWRpdG9yKHRyZWVWaWV3ZXIuZ2V0VHJlZSgpLCBhZGFwdGVyRmFjdG9yeSk7DQorDQorCQkJCWNyZWF0ZUNvbnRleHRNZW51Rm9yKHRyZWVWaWV3ZXIpOw0KKwkJCQlpbnQgcGFnZUluZGV4ID0gYWRkUGFnZSh2aWV3ZXJQYW5lLmdldENvbnRyb2woKSk7DQorCQkJCXNldFBhZ2VUZXh0KHBhZ2VJbmRleCwgZ2V0U3RyaW5nKCJfVUlfVHJlZVBhZ2VfbGFiZWwiKSk7DQorCQkJfQ0KKw0KKwkJCS8vIFRoaXMgaXMgdGhlIHBhZ2UgZm9yIHRoZSB0YWJsZSB2aWV3ZXIuDQorCQkJLy8NCisJCQl7DQorCQkJCVZpZXdlclBhbmUgdmlld2VyUGFuZSA9DQorCQkJCQluZXcgVmlld2VyUGFuZShnZXRTaXRlKCkuZ2V0UGFnZSgpLCBSa0VkaXRvci50aGlzKSB7DQorCQkJCQkJQE92ZXJyaWRlDQorCQkJCQkJcHVibGljIFZpZXdlciBjcmVhdGVWaWV3ZXIoQ29tcG9zaXRlIGNvbXBvc2l0ZSkgew0KKwkJCQkJCQlyZXR1cm4gbmV3IFRhYmxlVmlld2VyKGNvbXBvc2l0ZSk7DQorCQkJCQkJfQ0KKwkJCQkJCUBPdmVycmlkZQ0KKwkJCQkJCXB1YmxpYyB2b2lkIHJlcXVlc3RBY3RpdmF0aW9uKCkgew0KKwkJCQkJCQlzdXBlci5yZXF1ZXN0QWN0aXZhdGlvbigpOw0KKwkJCQkJCQlzZXRDdXJyZW50Vmlld2VyUGFuZSh0aGlzKTsNCisJCQkJCQl9DQorCQkJCQl9Ow0KKwkJCQl2aWV3ZXJQYW5lLmNyZWF0ZUNvbnRyb2woZ2V0Q29udGFpbmVyKCkpOw0KKwkJCQl0YWJsZVZpZXdlciA9IChUYWJsZVZpZXdlcil2aWV3ZXJQYW5lLmdldFZpZXdlcigpOw0KKw0KKwkJCQlUYWJsZSB0YWJsZSA9IHRhYmxlVmlld2VyLmdldFRhYmxlKCk7DQorCQkJCVRhYmxlTGF5b3V0IGxheW91dCA9IG5ldyBUYWJsZUxheW91dCgpOw0KKwkJCQl0YWJsZS5zZXRMYXlvdXQobGF5b3V0KTsNCisJCQkJdGFibGUuc2V0SGVhZGVyVmlzaWJsZSh0cnVlKTsNCisJCQkJdGFibGUuc2V0TGluZXNWaXNpYmxlKHRydWUpOw0KKw0KKwkJCQlUYWJsZUNvbHVtbiBvYmplY3RDb2x1bW4gPSBuZXcgVGFibGVDb2x1bW4odGFibGUsIFNXVC5OT05FKTsNCisJCQkJbGF5b3V0LmFkZENvbHVtbkRhdGEobmV3IENvbHVtbldlaWdodERhdGEoMywgMTAwLCB0cnVlKSk7DQorCQkJCW9iamVjdENvbHVtbi5zZXRUZXh0KGdldFN0cmluZygiX1VJX09iamVjdENvbHVtbl9sYWJlbCIpKTsNCisJCQkJb2JqZWN0Q29sdW1uLnNldFJlc2l6YWJsZSh0cnVlKTsNCisNCisJCQkJVGFibGVDb2x1bW4gc2VsZkNvbHVtbiA9IG5ldyBUYWJsZUNvbHVtbih0YWJsZSwgU1dULk5PTkUpOw0KKwkJCQlsYXlvdXQuYWRkQ29sdW1uRGF0YShuZXcgQ29sdW1uV2VpZ2h0RGF0YSgyLCAxMDAsIHRydWUpKTsNCisJCQkJc2VsZkNvbHVtbi5zZXRUZXh0KGdldFN0cmluZygiX1VJX1NlbGZDb2x1bW5fbGFiZWwiKSk7DQorCQkJCXNlbGZDb2x1bW4uc2V0UmVzaXphYmxlKHRydWUpOw0KKw0KKwkJCQl0YWJsZVZpZXdlci5zZXRDb2x1bW5Qcm9wZXJ0aWVzKG5ldyBTdHJpbmcgW10geyJhIiwgImIifSk7DQorCQkJCXRhYmxlVmlld2VyLnNldENvbnRlbnRQcm92aWRlcihuZXcgQWRhcHRlckZhY3RvcnlDb250ZW50UHJvdmlkZXIoYWRhcHRlckZhY3RvcnkpKTsNCisJCQkJdGFibGVWaWV3ZXIuc2V0TGFiZWxQcm92aWRlcihuZXcgQWRhcHRlckZhY3RvcnlMYWJlbFByb3ZpZGVyKGFkYXB0ZXJGYWN0b3J5KSk7DQorDQorCQkJCWNyZWF0ZUNvbnRleHRNZW51Rm9yKHRhYmxlVmlld2VyKTsNCisJCQkJaW50IHBhZ2VJbmRleCA9IGFkZFBhZ2Uodmlld2VyUGFuZS5nZXRDb250cm9sKCkpOw0KKwkJCQlzZXRQYWdlVGV4dChwYWdlSW5kZXgsIGdldFN0cmluZygiX1VJX1RhYmxlUGFnZV9sYWJlbCIpKTsNCisJCQl9DQorDQorCQkJLy8gVGhpcyBpcyB0aGUgcGFnZSBmb3IgdGhlIHRhYmxlIHRyZWUgdmlld2VyLg0KKwkJCS8vDQorCQkJew0KKwkJCQlWaWV3ZXJQYW5lIHZpZXdlclBhbmUgPQ0KKwkJCQkJbmV3IFZpZXdlclBhbmUoZ2V0U2l0ZSgpLmdldFBhZ2UoKSwgUmtFZGl0b3IudGhpcykgew0KKwkJCQkJCUBPdmVycmlkZQ0KKwkJCQkJCXB1YmxpYyBWaWV3ZXIgY3JlYXRlVmlld2VyKENvbXBvc2l0ZSBjb21wb3NpdGUpIHsNCisJCQkJCQkJcmV0dXJuIG5ldyBUcmVlVmlld2VyKGNvbXBvc2l0ZSk7DQorCQkJCQkJfQ0KKwkJCQkJCUBPdmVycmlkZQ0KKwkJCQkJCXB1YmxpYyB2b2lkIHJlcXVlc3RBY3RpdmF0aW9uKCkgew0KKwkJCQkJCQlzdXBlci5yZXF1ZXN0QWN0aXZhdGlvbigpOw0KKwkJCQkJCQlzZXRDdXJyZW50Vmlld2VyUGFuZSh0aGlzKTsNCisJCQkJCQl9DQorCQkJCQl9Ow0KKwkJCQl2aWV3ZXJQYW5lLmNyZWF0ZUNvbnRyb2woZ2V0Q29udGFpbmVyKCkpOw0KKw0KKwkJCQl0cmVlVmlld2VyV2l0aENvbHVtbnMgPSAoVHJlZVZpZXdlcil2aWV3ZXJQYW5lLmdldFZpZXdlcigpOw0KKw0KKwkJCQlUcmVlIHRyZWUgPSB0cmVlVmlld2VyV2l0aENvbHVtbnMuZ2V0VHJlZSgpOw0KKwkJCQl0cmVlLnNldExheW91dERhdGEobmV3IEZpbGxMYXlvdXQoKSk7DQorCQkJCXRyZWUuc2V0SGVhZGVyVmlzaWJsZSh0cnVlKTsNCisJCQkJdHJlZS5zZXRMaW5lc1Zpc2libGUodHJ1ZSk7DQorDQorCQkJCVRyZWVDb2x1bW4gb2JqZWN0Q29sdW1uID0gbmV3IFRyZWVDb2x1bW4odHJlZSwgU1dULk5PTkUpOw0KKwkJCQlvYmplY3RDb2x1bW4uc2V0VGV4dChnZXRTdHJpbmcoIl9VSV9PYmplY3RDb2x1bW5fbGFiZWwiKSk7DQorCQkJCW9iamVjdENvbHVtbi5zZXRSZXNpemFibGUodHJ1ZSk7DQorCQkJCW9iamVjdENvbHVtbi5zZXRXaWR0aCgyNTApOw0KKw0KKwkJCQlUcmVlQ29sdW1uIHNlbGZDb2x1bW4gPSBuZXcgVHJlZUNvbHVtbih0cmVlLCBTV1QuTk9ORSk7DQorCQkJCXNlbGZDb2x1bW4uc2V0VGV4dChnZXRTdHJpbmcoIl9VSV9TZWxmQ29sdW1uX2xhYmVsIikpOw0KKwkJCQlzZWxmQ29sdW1uLnNldFJlc2l6YWJsZSh0cnVlKTsNCisJCQkJc2VsZkNvbHVtbi5zZXRXaWR0aCgyMDApOw0KKw0KKwkJCQl0cmVlVmlld2VyV2l0aENvbHVtbnMuc2V0Q29sdW1uUHJvcGVydGllcyhuZXcgU3RyaW5nIFtdIHsiYSIsICJiIn0pOw0KKwkJCQl0cmVlVmlld2VyV2l0aENvbHVtbnMuc2V0Q29udGVudFByb3ZpZGVyKG5ldyBBZGFwdGVyRmFjdG9yeUNvbnRlbnRQcm92aWRlcihhZGFwdGVyRmFjdG9yeSkpOw0KKwkJCQl0cmVlVmlld2VyV2l0aENvbHVtbnMuc2V0TGFiZWxQcm92aWRlcihuZXcgQWRhcHRlckZhY3RvcnlMYWJlbFByb3ZpZGVyKGFkYXB0ZXJGYWN0b3J5KSk7DQorDQorCQkJCWNyZWF0ZUNvbnRleHRNZW51Rm9yKHRyZWVWaWV3ZXJXaXRoQ29sdW1ucyk7DQorCQkJCWludCBwYWdlSW5kZXggPSBhZGRQYWdlKHZpZXdlclBhbmUuZ2V0Q29udHJvbCgpKTsNCisJCQkJc2V0UGFnZVRleHQocGFnZUluZGV4LCBnZXRTdHJpbmcoIl9VSV9UcmVlV2l0aENvbHVtbnNQYWdlX2xhYmVsIikpOw0KKwkJCX0NCisNCisJCQlnZXRTaXRlKCkuZ2V0U2hlbGwoKS5nZXREaXNwbGF5KCkuYXN5bmNFeGVjDQorCQkJCShuZXcgUnVubmFibGUoKSB7DQorCQkJCQkgcHVibGljIHZvaWQgcnVuKCkgew0KKwkJCQkJCSBzZXRBY3RpdmVQYWdlKDApOw0KKwkJCQkJIH0NCisJCQkJIH0pOw0KKwkJfQ0KKw0KKwkJLy8gRW5zdXJlcyB0aGF0IHRoaXMgZWRpdG9yIHdpbGwgb25seSBkaXNwbGF5IHRoZSBwYWdlJ3MgdGFiDQorCQkvLyBhcmVhIGlmIHRoZXJlIGFyZSBtb3JlIHRoYW4gb25lIHBhZ2UNCisJCS8vDQorCQlnZXRDb250YWluZXIoKS5hZGRDb250cm9sTGlzdGVuZXINCisJCQkobmV3IENvbnRyb2xBZGFwdGVyKCkgew0KKwkJCQlib29sZWFuIGd1YXJkID0gZmFsc2U7DQorCQkJCUBPdmVycmlkZQ0KKwkJCQlwdWJsaWMgdm9pZCBjb250cm9sUmVzaXplZChDb250cm9sRXZlbnQgZXZlbnQpIHsNCisJCQkJCWlmICghZ3VhcmQpIHsNCisJCQkJCQlndWFyZCA9IHRydWU7DQorCQkJCQkJaGlkZVRhYnMoKTsNCisJCQkJCQlndWFyZCA9IGZhbHNlOw0KKwkJCQkJfQ0KKwkJCQl9DQorCQkJIH0pOw0KKw0KKwkJZ2V0U2l0ZSgpLmdldFNoZWxsKCkuZ2V0RGlzcGxheSgpLmFzeW5jRXhlYw0KKwkJCShuZXcgUnVubmFibGUoKSB7DQorCQkJCSBwdWJsaWMgdm9pZCBydW4oKSB7DQorCQkJCQkgdXBkYXRlUHJvYmxlbUluZGljYXRpb24oKTsNCisJCQkJIH0NCisJCQkgfSk7DQorCX0NCisNCisJLyoqDQorCSAqIElmIHRoZXJlIGlzIGp1c3Qgb25lIHBhZ2UgaW4gdGhlIG11bHRpLXBhZ2UgZWRpdG9yIHBhcnQsDQorCSAqIHRoaXMgaGlkZXMgdGhlIHNpbmdsZSB0YWIgYXQgdGhlIGJvdHRvbS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCB2b2lkIGhpZGVUYWJzKCkgew0KKwkJaWYgKGdldFBhZ2VDb3VudCgpIDw9IDEpIHsNCisJCQlzZXRQYWdlVGV4dCgwLCAiIik7DQorCQkJaWYgKGdldENvbnRhaW5lcigpIGluc3RhbmNlb2YgQ1RhYkZvbGRlcikgew0KKwkJCQkoKENUYWJGb2xkZXIpZ2V0Q29udGFpbmVyKCkpLnNldFRhYkhlaWdodCgxKTsNCisJCQkJUG9pbnQgcG9pbnQgPSBnZXRDb250YWluZXIoKS5nZXRTaXplKCk7DQorCQkJCWdldENvbnRhaW5lcigpLnNldFNpemUocG9pbnQueCwgcG9pbnQueSArIDYpOw0KKwkJCX0NCisJCX0NCisJfQ0KKw0KKwkvKioNCisJICogSWYgdGhlcmUgaXMgbW9yZSB0aGFuIG9uZSBwYWdlIGluIHRoZSBtdWx0aS1wYWdlIGVkaXRvciBwYXJ0LA0KKwkgKiB0aGlzIHNob3dzIHRoZSB0YWJzIGF0IHRoZSBib3R0b20uDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgdm9pZCBzaG93VGFicygpIHsNCisJCWlmIChnZXRQYWdlQ291bnQoKSA+IDEpIHsNCisJCQlzZXRQYWdlVGV4dCgwLCBnZXRTdHJpbmcoIl9VSV9TZWxlY3Rpb25QYWdlX2xhYmVsIikpOw0KKwkJCWlmIChnZXRDb250YWluZXIoKSBpbnN0YW5jZW9mIENUYWJGb2xkZXIpIHsNCisJCQkJKChDVGFiRm9sZGVyKWdldENvbnRhaW5lcigpKS5zZXRUYWJIZWlnaHQoU1dULkRFRkFVTFQpOw0KKwkJCQlQb2ludCBwb2ludCA9IGdldENvbnRhaW5lcigpLmdldFNpemUoKTsNCisJCQkJZ2V0Q29udGFpbmVyKCkuc2V0U2l6ZShwb2ludC54LCBwb2ludC55IC0gNik7DQorCQkJfQ0KKwkJfQ0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIGlzIHVzZWQgdG8gdHJhY2sgdGhlIGFjdGl2ZSB2aWV3ZXIuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlAT3ZlcnJpZGUNCisJcHJvdGVjdGVkIHZvaWQgcGFnZUNoYW5nZShpbnQgcGFnZUluZGV4KSB7DQorCQlzdXBlci5wYWdlQ2hhbmdlKHBhZ2VJbmRleCk7DQorDQorCQlpZiAoY29udGVudE91dGxpbmVQYWdlICE9IG51bGwpIHsNCisJCQloYW5kbGVDb250ZW50T3V0bGluZVNlbGVjdGlvbihjb250ZW50T3V0bGluZVBhZ2UuZ2V0U2VsZWN0aW9uKCkpOw0KKwkJfQ0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIGlzIGhvdyB0aGUgZnJhbWV3b3JrIGRldGVybWluZXMgd2hpY2ggaW50ZXJmYWNlcyB3ZSBpbXBsZW1lbnQuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlAU3VwcHJlc3NXYXJuaW5ncygidW5jaGVja2VkIikNCisJQE92ZXJyaWRlDQorCXB1YmxpYyBPYmplY3QgZ2V0QWRhcHRlcihDbGFzcyBrZXkpIHsNCisJCWlmIChrZXkuZXF1YWxzKElDb250ZW50T3V0bGluZVBhZ2UuY2xhc3MpKSB7DQorCQkJcmV0dXJuIHNob3dPdXRsaW5lVmlldygpID8gZ2V0Q29udGVudE91dGxpbmVQYWdlKCkgOiBudWxsOw0KKwkJfQ0KKwkJZWxzZSBpZiAoa2V5LmVxdWFscyhJUHJvcGVydHlTaGVldFBhZ2UuY2xhc3MpKSB7DQorCQkJcmV0dXJuIGdldFByb3BlcnR5U2hlZXRQYWdlKCk7DQorCQl9DQorCQllbHNlIGlmIChrZXkuZXF1YWxzKElHb3RvTWFya2VyLmNsYXNzKSkgew0KKwkJCXJldHVybiB0aGlzOw0KKwkJfQ0KKwkJZWxzZSB7DQorCQkJcmV0dXJuIHN1cGVyLmdldEFkYXB0ZXIoa2V5KTsNCisJCX0NCisJfQ0KKw0KKwkvKioNCisJICogVGhpcyBhY2Nlc3NlcyBhIGNhY2hlZCB2ZXJzaW9uIG9mIHRoZSBjb250ZW50IG91dGxpbmVyLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIElDb250ZW50T3V0bGluZVBhZ2UgZ2V0Q29udGVudE91dGxpbmVQYWdlKCkgew0KKwkJaWYgKGNvbnRlbnRPdXRsaW5lUGFnZSA9PSBudWxsKSB7DQorCQkJLy8gVGhlIGNvbnRlbnQgb3V0bGluZSBpcyBqdXN0IGEgdHJlZS4NCisJCQkvLw0KKwkJCWNsYXNzIE15Q29udGVudE91dGxpbmVQYWdlIGV4dGVuZHMgQ29udGVudE91dGxpbmVQYWdlIHsNCisJCQkJQE92ZXJyaWRlDQorCQkJCXB1YmxpYyB2b2lkIGNyZWF0ZUNvbnRyb2woQ29tcG9zaXRlIHBhcmVudCkgew0KKwkJCQkJc3VwZXIuY3JlYXRlQ29udHJvbChwYXJlbnQpOw0KKwkJCQkJY29udGVudE91dGxpbmVWaWV3ZXIgPSBnZXRUcmVlVmlld2VyKCk7DQorCQkJCQljb250ZW50T3V0bGluZVZpZXdlci5hZGRTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIodGhpcyk7DQorDQorCQkJCQkvLyBTZXQgdXAgdGhlIHRyZWUgdmlld2VyLg0KKwkJCQkJLy8NCisJCQkJCWNvbnRlbnRPdXRsaW5lVmlld2VyLnNldENvbnRlbnRQcm92aWRlcihuZXcgQWRhcHRlckZhY3RvcnlDb250ZW50UHJvdmlkZXIoYWRhcHRlckZhY3RvcnkpKTsNCisJCQkJCWNvbnRlbnRPdXRsaW5lVmlld2VyLnNldExhYmVsUHJvdmlkZXIobmV3IEFkYXB0ZXJGYWN0b3J5TGFiZWxQcm92aWRlcihhZGFwdGVyRmFjdG9yeSkpOw0KKwkJCQkJY29udGVudE91dGxpbmVWaWV3ZXIuc2V0SW5wdXQoZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpKTsNCisNCisJCQkJCS8vIE1ha2Ugc3VyZSBvdXIgcG9wdXBzIHdvcmsuDQorCQkJCQkvLw0KKwkJCQkJY3JlYXRlQ29udGV4dE1lbnVGb3IoY29udGVudE91dGxpbmVWaWV3ZXIpOw0KKw0KKwkJCQkJaWYgKCFlZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkuZ2V0UmVzb3VyY2VzKCkuaXNFbXB0eSgpKSB7DQorCQkJCQkgIC8vIFNlbGVjdCB0aGUgcm9vdCBvYmplY3QgaW4gdGhlIHZpZXcuDQorCQkJCQkgIC8vDQorCQkJCQkgIGNvbnRlbnRPdXRsaW5lVmlld2VyLnNldFNlbGVjdGlvbihuZXcgU3RydWN0dXJlZFNlbGVjdGlvbihlZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkuZ2V0UmVzb3VyY2VzKCkuZ2V0KDApKSwgdHJ1ZSk7DQorCQkJCQl9DQorCQkJCX0NCisNCisJCQkJQE92ZXJyaWRlDQorCQkJCXB1YmxpYyB2b2lkIG1ha2VDb250cmlidXRpb25zKElNZW51TWFuYWdlciBtZW51TWFuYWdlciwgSVRvb2xCYXJNYW5hZ2VyIHRvb2xCYXJNYW5hZ2VyLCBJU3RhdHVzTGluZU1hbmFnZXIgc3RhdHVzTGluZU1hbmFnZXIpIHsNCisJCQkJCXN1cGVyLm1ha2VDb250cmlidXRpb25zKG1lbnVNYW5hZ2VyLCB0b29sQmFyTWFuYWdlciwgc3RhdHVzTGluZU1hbmFnZXIpOw0KKwkJCQkJY29udGVudE91dGxpbmVTdGF0dXNMaW5lTWFuYWdlciA9IHN0YXR1c0xpbmVNYW5hZ2VyOw0KKwkJCQl9DQorDQorCQkJCUBPdmVycmlkZQ0KKwkJCQlwdWJsaWMgdm9pZCBzZXRBY3Rpb25CYXJzKElBY3Rpb25CYXJzIGFjdGlvbkJhcnMpIHsNCisJCQkJCXN1cGVyLnNldEFjdGlvbkJhcnMoYWN0aW9uQmFycyk7DQorCQkJCQlnZXRBY3Rpb25CYXJDb250cmlidXRvcigpLnNoYXJlR2xvYmFsQWN0aW9ucyh0aGlzLCBhY3Rpb25CYXJzKTsNCisJCQkJfQ0KKwkJCX0NCisNCisJCQljb250ZW50T3V0bGluZVBhZ2UgPSBuZXcgTXlDb250ZW50T3V0bGluZVBhZ2UoKTsNCisNCisJCQkvLyBMaXN0ZW4gdG8gc2VsZWN0aW9uIHNvIHRoYXQgd2UgY2FuIGhhbmRsZSBpdCBpcyBhIHNwZWNpYWwgd2F5Lg0KKwkJCS8vDQorCQkJY29udGVudE91dGxpbmVQYWdlLmFkZFNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcg0KKwkJCQkobmV3IElTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIoKSB7DQorCQkJCQkgLy8gVGhpcyBlbnN1cmVzIHRoYXQgd2UgaGFuZGxlIHNlbGVjdGlvbnMgY29ycmVjdGx5Lg0KKwkJCQkJIC8vDQorCQkJCQkgcHVibGljIHZvaWQgc2VsZWN0aW9uQ2hhbmdlZChTZWxlY3Rpb25DaGFuZ2VkRXZlbnQgZXZlbnQpIHsNCisJCQkJCQkgaGFuZGxlQ29udGVudE91dGxpbmVTZWxlY3Rpb24oZXZlbnQuZ2V0U2VsZWN0aW9uKCkpOw0KKwkJCQkJIH0NCisJCQkJIH0pOw0KKwkJfQ0KKw0KKwkJcmV0dXJuIGNvbnRlbnRPdXRsaW5lUGFnZTsNCisJfQ0KKw0KKwkvKioNCisJICogVGhpcyBhY2Nlc3NlcyBhIGNhY2hlZCB2ZXJzaW9uIG9mIHRoZSBwcm9wZXJ0eSBzaGVldC4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBJUHJvcGVydHlTaGVldFBhZ2UgZ2V0UHJvcGVydHlTaGVldFBhZ2UoKSB7DQorCQlpZiAocHJvcGVydHlTaGVldFBhZ2UgPT0gbnVsbCkgew0KKwkJCXByb3BlcnR5U2hlZXRQYWdlID0NCisJCQkJbmV3IEV4dGVuZGVkUHJvcGVydHlTaGVldFBhZ2UoZWRpdGluZ0RvbWFpbikgew0KKwkJCQkJQE92ZXJyaWRlDQorCQkJCQlwdWJsaWMgdm9pZCBzZXRTZWxlY3Rpb25Ub1ZpZXdlcihMaXN0PD8+IHNlbGVjdGlvbikgew0KKwkJCQkJCVJrRWRpdG9yLnRoaXMuc2V0U2VsZWN0aW9uVG9WaWV3ZXIoc2VsZWN0aW9uKTsNCisJCQkJCQlSa0VkaXRvci50aGlzLnNldEZvY3VzKCk7DQorCQkJCQl9DQorDQorCQkJCQlAT3ZlcnJpZGUNCisJCQkJCXB1YmxpYyB2b2lkIHNldEFjdGlvbkJhcnMoSUFjdGlvbkJhcnMgYWN0aW9uQmFycykgew0KKwkJCQkJCXN1cGVyLnNldEFjdGlvbkJhcnMoYWN0aW9uQmFycyk7DQorCQkJCQkJZ2V0QWN0aW9uQmFyQ29udHJpYnV0b3IoKS5zaGFyZUdsb2JhbEFjdGlvbnModGhpcywgYWN0aW9uQmFycyk7DQorCQkJCQl9DQorCQkJCX07DQorCQkJcHJvcGVydHlTaGVldFBhZ2Uuc2V0UHJvcGVydHlTb3VyY2VQcm92aWRlcihuZXcgQWRhcHRlckZhY3RvcnlDb250ZW50UHJvdmlkZXIoYWRhcHRlckZhY3RvcnkpKTsNCisJCX0NCisNCisJCXJldHVybiBwcm9wZXJ0eVNoZWV0UGFnZTsNCisJfQ0KKw0KKwkvKioNCisJICogVGhpcyBkZWFscyB3aXRoIGhvdyB3ZSB3YW50IHNlbGVjdGlvbiBpbiB0aGUgb3V0bGluZXIgdG8gYWZmZWN0IHRoZSBvdGhlciB2aWV3cy4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyB2b2lkIGhhbmRsZUNvbnRlbnRPdXRsaW5lU2VsZWN0aW9uKElTZWxlY3Rpb24gc2VsZWN0aW9uKSB7DQorCQlpZiAoY3VycmVudFZpZXdlclBhbmUgIT0gbnVsbCAmJiAhc2VsZWN0aW9uLmlzRW1wdHkoKSAmJiBzZWxlY3Rpb24gaW5zdGFuY2VvZiBJU3RydWN0dXJlZFNlbGVjdGlvbikgew0KKwkJCUl0ZXJhdG9yPD8+IHNlbGVjdGVkRWxlbWVudHMgPSAoKElTdHJ1Y3R1cmVkU2VsZWN0aW9uKXNlbGVjdGlvbikuaXRlcmF0b3IoKTsNCisJCQlpZiAoc2VsZWN0ZWRFbGVtZW50cy5oYXNOZXh0KCkpIHsNCisJCQkJLy8gR2V0IHRoZSBmaXJzdCBzZWxlY3RlZCBlbGVtZW50Lg0KKwkJCQkvLw0KKwkJCQlPYmplY3Qgc2VsZWN0ZWRFbGVtZW50ID0gc2VsZWN0ZWRFbGVtZW50cy5uZXh0KCk7DQorDQorCQkJCS8vIElmIGl0J3MgdGhlIHNlbGVjdGlvbiB2aWV3ZXIsIHRoZW4gd2Ugd2FudCBpdCB0byBzZWxlY3QgdGhlIHNhbWUgc2VsZWN0aW9uIGFzIHRoaXMgc2VsZWN0aW9uLg0KKwkJCQkvLw0KKwkJCQlpZiAoY3VycmVudFZpZXdlclBhbmUuZ2V0Vmlld2VyKCkgPT0gc2VsZWN0aW9uVmlld2VyKSB7DQorCQkJCQlBcnJheUxpc3Q8T2JqZWN0PiBzZWxlY3Rpb25MaXN0ID0gbmV3IEFycmF5TGlzdDxPYmplY3Q+KCk7DQorCQkJCQlzZWxlY3Rpb25MaXN0LmFkZChzZWxlY3RlZEVsZW1lbnQpOw0KKwkJCQkJd2hpbGUgKHNlbGVjdGVkRWxlbWVudHMuaGFzTmV4dCgpKSB7DQorCQkJCQkJc2VsZWN0aW9uTGlzdC5hZGQoc2VsZWN0ZWRFbGVtZW50cy5uZXh0KCkpOw0KKwkJCQkJfQ0KKw0KKwkJCQkJLy8gU2V0IHRoZSBzZWxlY3Rpb24gdG8gdGhlIHdpZGdldC4NCisJCQkJCS8vDQorCQkJCQlzZWxlY3Rpb25WaWV3ZXIuc2V0U2VsZWN0aW9uKG5ldyBTdHJ1Y3R1cmVkU2VsZWN0aW9uKHNlbGVjdGlvbkxpc3QpKTsNCisJCQkJfQ0KKwkJCQllbHNlIHsNCisJCQkJCS8vIFNldCB0aGUgaW5wdXQgdG8gdGhlIHdpZGdldC4NCisJCQkJCS8vDQorCQkJCQlpZiAoY3VycmVudFZpZXdlclBhbmUuZ2V0Vmlld2VyKCkuZ2V0SW5wdXQoKSAhPSBzZWxlY3RlZEVsZW1lbnQpIHsNCisJCQkJCQljdXJyZW50Vmlld2VyUGFuZS5nZXRWaWV3ZXIoKS5zZXRJbnB1dChzZWxlY3RlZEVsZW1lbnQpOw0KKwkJCQkJCWN1cnJlbnRWaWV3ZXJQYW5lLnNldFRpdGxlKHNlbGVjdGVkRWxlbWVudCk7DQorCQkJCQl9DQorCQkJCX0NCisJCQl9DQorCQl9DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgaXMgZm9yIGltcGxlbWVudGluZyB7QGxpbmsgSUVkaXRvclBhcnR9IGFuZCBzaW1wbHkgdGVzdHMgdGhlIGNvbW1hbmQgc3RhY2suDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlAT3ZlcnJpZGUNCisJcHVibGljIGJvb2xlYW4gaXNEaXJ0eSgpIHsNCisJCXJldHVybiAoKEJhc2ljQ29tbWFuZFN0YWNrKWVkaXRpbmdEb21haW4uZ2V0Q29tbWFuZFN0YWNrKCkpLmlzU2F2ZU5lZWRlZCgpOw0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIGlzIGZvciBpbXBsZW1lbnRpbmcge0BsaW5rIElFZGl0b3JQYXJ0fSBhbmQgc2ltcGx5IHNhdmVzIHRoZSBtb2RlbCBmaWxlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJQE92ZXJyaWRlDQorCXB1YmxpYyB2b2lkIGRvU2F2ZShJUHJvZ3Jlc3NNb25pdG9yIHByb2dyZXNzTW9uaXRvcikgew0KKwkJLy8gU2F2ZSBvbmx5IHJlc291cmNlcyB0aGF0IGhhdmUgYWN0dWFsbHkgY2hhbmdlZC4NCisJCS8vDQorCQlmaW5hbCBNYXA8T2JqZWN0LCBPYmplY3Q+IHNhdmVPcHRpb25zID0gbmV3IEhhc2hNYXA8T2JqZWN0LCBPYmplY3Q+KCk7DQorCQlzYXZlT3B0aW9ucy5wdXQoUmVzb3VyY2UuT1BUSU9OX1NBVkVfT05MWV9JRl9DSEFOR0VELCBSZXNvdXJjZS5PUFRJT05fU0FWRV9PTkxZX0lGX0NIQU5HRURfTUVNT1JZX0JVRkZFUik7DQorDQorCQkvLyBEbyB0aGUgd29yayB3aXRoaW4gYW4gb3BlcmF0aW9uIGJlY2F1c2UgdGhpcyBpcyBhIGxvbmcgcnVubmluZyBhY3Rpdml0eSB0aGF0IG1vZGlmaWVzIHRoZSB3b3JrYmVuY2guDQorCQkvLw0KKwkJV29ya3NwYWNlTW9kaWZ5T3BlcmF0aW9uIG9wZXJhdGlvbiA9DQorCQkJbmV3IFdvcmtzcGFjZU1vZGlmeU9wZXJhdGlvbigpIHsNCisJCQkJLy8gVGhpcyBpcyB0aGUgbWV0aG9kIHRoYXQgZ2V0cyBpbnZva2VkIHdoZW4gdGhlIG9wZXJhdGlvbiBydW5zLg0KKwkJCQkvLw0KKwkJCQlAT3ZlcnJpZGUNCisJCQkJcHVibGljIHZvaWQgZXhlY3V0ZShJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IpIHsNCisJCQkJCS8vIFNhdmUgdGhlIHJlc291cmNlcyB0byB0aGUgZmlsZSBzeXN0ZW0uDQorCQkJCQkvLw0KKwkJCQkJYm9vbGVhbiBmaXJzdCA9IHRydWU7DQorCQkJCQlmb3IgKFJlc291cmNlIHJlc291cmNlIDogZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpLmdldFJlc291cmNlcygpKSB7DQorCQkJCQkJaWYgKChmaXJzdCB8fCAhcmVzb3VyY2UuZ2V0Q29udGVudHMoKS5pc0VtcHR5KCkgfHwgaXNQZXJzaXN0ZWQocmVzb3VyY2UpKSAmJiAhZWRpdGluZ0RvbWFpbi5pc1JlYWRPbmx5KHJlc291cmNlKSkgew0KKwkJCQkJCQl0cnkgew0KKwkJCQkJCQkJbG9uZyB0aW1lU3RhbXAgPSByZXNvdXJjZS5nZXRUaW1lU3RhbXAoKTsNCisJCQkJCQkJCXJlc291cmNlLnNhdmUoc2F2ZU9wdGlvbnMpOw0KKwkJCQkJCQkJaWYgKHJlc291cmNlLmdldFRpbWVTdGFtcCgpICE9IHRpbWVTdGFtcCkgew0KKwkJCQkJCQkJCXNhdmVkUmVzb3VyY2VzLmFkZChyZXNvdXJjZSk7DQorCQkJCQkJCQl9DQorCQkJCQkJCX0NCisJCQkJCQkJY2F0Y2ggKEV4Y2VwdGlvbiBleGNlcHRpb24pIHsNCisJCQkJCQkJCXJlc291cmNlVG9EaWFnbm9zdGljTWFwLnB1dChyZXNvdXJjZSwgYW5hbHl6ZVJlc291cmNlUHJvYmxlbXMocmVzb3VyY2UsIGV4Y2VwdGlvbikpOw0KKwkJCQkJCQl9DQorCQkJCQkJCWZpcnN0ID0gZmFsc2U7DQorCQkJCQkJfQ0KKwkJCQkJfQ0KKwkJCQl9DQorCQkJfTsNCisNCisJCXVwZGF0ZVByb2JsZW1JbmRpY2F0aW9uID0gZmFsc2U7DQorCQl0cnkgew0KKwkJCS8vIFRoaXMgcnVucyB0aGUgb3B0aW9ucywgYW5kIHNob3dzIHByb2dyZXNzLg0KKwkJCS8vDQorCQkJbmV3IFByb2dyZXNzTW9uaXRvckRpYWxvZyhnZXRTaXRlKCkuZ2V0U2hlbGwoKSkucnVuKHRydWUsIGZhbHNlLCBvcGVyYXRpb24pOw0KKw0KKwkJCS8vIFJlZnJlc2ggdGhlIG5lY2Vzc2FyeSBzdGF0ZS4NCisJCQkvLw0KKwkJCSgoQmFzaWNDb21tYW5kU3RhY2spZWRpdGluZ0RvbWFpbi5nZXRDb21tYW5kU3RhY2soKSkuc2F2ZUlzRG9uZSgpOw0KKwkJCWZpcmVQcm9wZXJ0eUNoYW5nZShJRWRpdG9yUGFydC5QUk9QX0RJUlRZKTsNCisJCX0NCisJCWNhdGNoIChFeGNlcHRpb24gZXhjZXB0aW9uKSB7DQorCQkJLy8gU29tZXRoaW5nIHdlbnQgd3JvbmcgdGhhdCBzaG91bGRuJ3QuDQorCQkJLy8NCisJCQlSa0VkaXRvclBsdWdpbi5JTlNUQU5DRS5sb2coZXhjZXB0aW9uKTsNCisJCX0NCisJCXVwZGF0ZVByb2JsZW1JbmRpY2F0aW9uID0gdHJ1ZTsNCisJCXVwZGF0ZVByb2JsZW1JbmRpY2F0aW9uKCk7DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgcmV0dXJucyB3aGV0aGVyIHNvbWV0aGluZyBoYXMgYmVlbiBwZXJzaXN0ZWQgdG8gdGhlIFVSSSBvZiB0aGUgc3BlY2lmaWVkIHJlc291cmNlLg0KKwkgKiBUaGUgaW1wbGVtZW50YXRpb24gdXNlcyB0aGUgVVJJIGNvbnZlcnRlciBmcm9tIHRoZSBlZGl0b3IncyByZXNvdXJjZSBzZXQgdG8gdHJ5IHRvIG9wZW4gYW4gaW5wdXQgc3RyZWFtLiANCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCBib29sZWFuIGlzUGVyc2lzdGVkKFJlc291cmNlIHJlc291cmNlKSB7DQorCQlib29sZWFuIHJlc3VsdCA9IGZhbHNlOw0KKwkJdHJ5IHsNCisJCQlJbnB1dFN0cmVhbSBzdHJlYW0gPSBlZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkuZ2V0VVJJQ29udmVydGVyKCkuY3JlYXRlSW5wdXRTdHJlYW0ocmVzb3VyY2UuZ2V0VVJJKCkpOw0KKwkJCWlmIChzdHJlYW0gIT0gbnVsbCkgew0KKwkJCQlyZXN1bHQgPSB0cnVlOw0KKwkJCQlzdHJlYW0uY2xvc2UoKTsNCisJCQl9DQorCQl9DQorCQljYXRjaCAoSU9FeGNlcHRpb24gZSkgew0KKwkJCS8vIElnbm9yZQ0KKwkJfQ0KKwkJcmV0dXJuIHJlc3VsdDsNCisJfQ0KKw0KKwkvKioNCisJICogVGhpcyBhbHdheXMgcmV0dXJucyB0cnVlIGJlY2F1c2UgaXQgaXMgbm90IGN1cnJlbnRseSBzdXBwb3J0ZWQuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlAT3ZlcnJpZGUNCisJcHVibGljIGJvb2xlYW4gaXNTYXZlQXNBbGxvd2VkKCkgew0KKwkJcmV0dXJuIHRydWU7DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgYWxzbyBjaGFuZ2VzIHRoZSBlZGl0b3IncyBpbnB1dC4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCUBPdmVycmlkZQ0KKwlwdWJsaWMgdm9pZCBkb1NhdmVBcygpIHsNCisJCVNhdmVBc0RpYWxvZyBzYXZlQXNEaWFsb2cgPSBuZXcgU2F2ZUFzRGlhbG9nKGdldFNpdGUoKS5nZXRTaGVsbCgpKTsNCisJCXNhdmVBc0RpYWxvZy5vcGVuKCk7DQorCQlJUGF0aCBwYXRoID0gc2F2ZUFzRGlhbG9nLmdldFJlc3VsdCgpOw0KKwkJaWYgKHBhdGggIT0gbnVsbCkgew0KKwkJCUlGaWxlIGZpbGUgPSBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuZ2V0Um9vdCgpLmdldEZpbGUocGF0aCk7DQorCQkJaWYgKGZpbGUgIT0gbnVsbCkgew0KKwkJCQlkb1NhdmVBcyhVUkkuY3JlYXRlUGxhdGZvcm1SZXNvdXJjZVVSSShmaWxlLmdldEZ1bGxQYXRoKCkudG9TdHJpbmcoKSwgdHJ1ZSksIG5ldyBGaWxlRWRpdG9ySW5wdXQoZmlsZSkpOw0KKwkJCX0NCisJCX0NCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCB2b2lkIGRvU2F2ZUFzKFVSSSB1cmksIElFZGl0b3JJbnB1dCBlZGl0b3JJbnB1dCkgew0KKwkJKGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKS5nZXRSZXNvdXJjZXMoKS5nZXQoMCkpLnNldFVSSSh1cmkpOw0KKwkJc2V0SW5wdXRXaXRoTm90aWZ5KGVkaXRvcklucHV0KTsNCisJCXNldFBhcnROYW1lKGVkaXRvcklucHV0LmdldE5hbWUoKSk7DQorCQlJUHJvZ3Jlc3NNb25pdG9yIHByb2dyZXNzTW9uaXRvciA9DQorCQkJZ2V0QWN0aW9uQmFycygpLmdldFN0YXR1c0xpbmVNYW5hZ2VyKCkgIT0gbnVsbCA/DQorCQkJCWdldEFjdGlvbkJhcnMoKS5nZXRTdGF0dXNMaW5lTWFuYWdlcigpLmdldFByb2dyZXNzTW9uaXRvcigpIDoNCisJCQkJbmV3IE51bGxQcm9ncmVzc01vbml0b3IoKTsNCisJCWRvU2F2ZShwcm9ncmVzc01vbml0b3IpOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIHZvaWQgZ290b01hcmtlcihJTWFya2VyIG1hcmtlcikgew0KKwkJdHJ5IHsNCisJCQlpZiAobWFya2VyLmdldFR5cGUoKS5lcXVhbHMoRVZhbGlkYXRvci5NQVJLRVIpKSB7DQorCQkJCVN0cmluZyB1cmlBdHRyaWJ1dGUgPSBtYXJrZXIuZ2V0QXR0cmlidXRlKEVWYWxpZGF0b3IuVVJJX0FUVFJJQlVURSwgbnVsbCk7DQorCQkJCWlmICh1cmlBdHRyaWJ1dGUgIT0gbnVsbCkgew0KKwkJCQkJVVJJIHVyaSA9IFVSSS5jcmVhdGVVUkkodXJpQXR0cmlidXRlKTsNCisJCQkJCUVPYmplY3QgZU9iamVjdCA9IGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKS5nZXRFT2JqZWN0KHVyaSwgdHJ1ZSk7DQorCQkJCQlpZiAoZU9iamVjdCAhPSBudWxsKSB7DQorCQkJCQkgIHNldFNlbGVjdGlvblRvVmlld2VyKENvbGxlY3Rpb25zLnNpbmdsZXRvbihlZGl0aW5nRG9tYWluLmdldFdyYXBwZXIoZU9iamVjdCkpKTsNCisJCQkJCX0NCisJCQkJfQ0KKwkJCX0NCisJCX0NCisJCWNhdGNoIChDb3JlRXhjZXB0aW9uIGV4Y2VwdGlvbikgew0KKwkJCVJrRWRpdG9yUGx1Z2luLklOU1RBTkNFLmxvZyhleGNlcHRpb24pOw0KKwkJfQ0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIGlzIGNhbGxlZCBkdXJpbmcgc3RhcnR1cC4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCUBPdmVycmlkZQ0KKwlwdWJsaWMgdm9pZCBpbml0KElFZGl0b3JTaXRlIHNpdGUsIElFZGl0b3JJbnB1dCBlZGl0b3JJbnB1dCkgew0KKwkJc2V0U2l0ZShzaXRlKTsNCisJCXNldElucHV0V2l0aE5vdGlmeShlZGl0b3JJbnB1dCk7DQorCQlzZXRQYXJ0TmFtZShlZGl0b3JJbnB1dC5nZXROYW1lKCkpOw0KKwkJc2l0ZS5zZXRTZWxlY3Rpb25Qcm92aWRlcih0aGlzKTsNCisJCXNpdGUuZ2V0UGFnZSgpLmFkZFBhcnRMaXN0ZW5lcihwYXJ0TGlzdGVuZXIpOw0KKwkJUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmFkZFJlc291cmNlQ2hhbmdlTGlzdGVuZXIocmVzb3VyY2VDaGFuZ2VMaXN0ZW5lciwgSVJlc291cmNlQ2hhbmdlRXZlbnQuUE9TVF9DSEFOR0UpOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJQE92ZXJyaWRlDQorCXB1YmxpYyB2b2lkIHNldEZvY3VzKCkgew0KKwkJaWYgKGN1cnJlbnRWaWV3ZXJQYW5lICE9IG51bGwpIHsNCisJCQljdXJyZW50Vmlld2VyUGFuZS5zZXRGb2N1cygpOw0KKwkJfQ0KKwkJZWxzZSB7DQorCQkJZ2V0Q29udHJvbChnZXRBY3RpdmVQYWdlKCkpLnNldEZvY3VzKCk7DQorCQl9DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgaW1wbGVtZW50cyB7QGxpbmsgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uUHJvdmlkZXJ9Lg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIHZvaWQgYWRkU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyKElTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIgbGlzdGVuZXIpIHsNCisJCXNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcnMuYWRkKGxpc3RlbmVyKTsNCisJfQ0KKw0KKwkvKioNCisJICogVGhpcyBpbXBsZW1lbnRzIHtAbGluayBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb25Qcm92aWRlcn0uDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgdm9pZCByZW1vdmVTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIoSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lciBsaXN0ZW5lcikgew0KKwkJc2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVycy5yZW1vdmUobGlzdGVuZXIpOw0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIGltcGxlbWVudHMge0BsaW5rIG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvblByb3ZpZGVyfSB0byByZXR1cm4gdGhpcyBlZGl0b3IncyBvdmVyYWxsIHNlbGVjdGlvbi4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBJU2VsZWN0aW9uIGdldFNlbGVjdGlvbigpIHsNCisJCXJldHVybiBlZGl0b3JTZWxlY3Rpb247DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgaW1wbGVtZW50cyB7QGxpbmsgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uUHJvdmlkZXJ9IHRvIHNldCB0aGlzIGVkaXRvcidzIG92ZXJhbGwgc2VsZWN0aW9uLg0KKwkgKiBDYWxsaW5nIHRoaXMgcmVzdWx0IHdpbGwgbm90aWZ5IHRoZSBsaXN0ZW5lcnMuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgdm9pZCBzZXRTZWxlY3Rpb24oSVNlbGVjdGlvbiBzZWxlY3Rpb24pIHsNCisJCWVkaXRvclNlbGVjdGlvbiA9IHNlbGVjdGlvbjsNCisNCisJCWZvciAoSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lciBsaXN0ZW5lciA6IHNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcnMpIHsNCisJCQlsaXN0ZW5lci5zZWxlY3Rpb25DaGFuZ2VkKG5ldyBTZWxlY3Rpb25DaGFuZ2VkRXZlbnQodGhpcywgc2VsZWN0aW9uKSk7DQorCQl9DQorCQlzZXRTdGF0dXNMaW5lTWFuYWdlcihzZWxlY3Rpb24pOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIHZvaWQgc2V0U3RhdHVzTGluZU1hbmFnZXIoSVNlbGVjdGlvbiBzZWxlY3Rpb24pIHsNCisJCUlTdGF0dXNMaW5lTWFuYWdlciBzdGF0dXNMaW5lTWFuYWdlciA9IGN1cnJlbnRWaWV3ZXIgIT0gbnVsbCAmJiBjdXJyZW50Vmlld2VyID09IGNvbnRlbnRPdXRsaW5lVmlld2VyID8NCisJCQljb250ZW50T3V0bGluZVN0YXR1c0xpbmVNYW5hZ2VyIDogZ2V0QWN0aW9uQmFycygpLmdldFN0YXR1c0xpbmVNYW5hZ2VyKCk7DQorDQorCQlpZiAoc3RhdHVzTGluZU1hbmFnZXIgIT0gbnVsbCkgew0KKwkJCWlmIChzZWxlY3Rpb24gaW5zdGFuY2VvZiBJU3RydWN0dXJlZFNlbGVjdGlvbikgew0KKwkJCQlDb2xsZWN0aW9uPD8+IGNvbGxlY3Rpb24gPSAoKElTdHJ1Y3R1cmVkU2VsZWN0aW9uKXNlbGVjdGlvbikudG9MaXN0KCk7DQorCQkJCXN3aXRjaCAoY29sbGVjdGlvbi5zaXplKCkpIHsNCisJCQkJCWNhc2UgMDogew0KKwkJCQkJCXN0YXR1c0xpbmVNYW5hZ2VyLnNldE1lc3NhZ2UoZ2V0U3RyaW5nKCJfVUlfTm9PYmplY3RTZWxlY3RlZCIpKTsNCisJCQkJCQlicmVhazsNCisJCQkJCX0NCisJCQkJCWNhc2UgMTogew0KKwkJCQkJCVN0cmluZyB0ZXh0ID0gbmV3IEFkYXB0ZXJGYWN0b3J5SXRlbURlbGVnYXRvcihhZGFwdGVyRmFjdG9yeSkuZ2V0VGV4dChjb2xsZWN0aW9uLml0ZXJhdG9yKCkubmV4dCgpKTsNCisJCQkJCQlzdGF0dXNMaW5lTWFuYWdlci5zZXRNZXNzYWdlKGdldFN0cmluZygiX1VJX1NpbmdsZU9iamVjdFNlbGVjdGVkIiwgdGV4dCkpOw0KKwkJCQkJCWJyZWFrOw0KKwkJCQkJfQ0KKwkJCQkJZGVmYXVsdDogew0KKwkJCQkJCXN0YXR1c0xpbmVNYW5hZ2VyLnNldE1lc3NhZ2UoZ2V0U3RyaW5nKCJfVUlfTXVsdGlPYmplY3RTZWxlY3RlZCIsIEludGVnZXIudG9TdHJpbmcoY29sbGVjdGlvbi5zaXplKCkpKSk7DQorCQkJCQkJYnJlYWs7DQorCQkJCQl9DQorCQkJCX0NCisJCQl9DQorCQkJZWxzZSB7DQorCQkJCXN0YXR1c0xpbmVNYW5hZ2VyLnNldE1lc3NhZ2UoIiIpOw0KKwkJCX0NCisJCX0NCisJfQ0KKw0KKwkvKioNCisJICogVGhpcyBsb29rcyB1cCBhIHN0cmluZyBpbiB0aGUgcGx1Z2luJ3MgcGx1Z2luLnByb3BlcnRpZXMgZmlsZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByaXZhdGUgc3RhdGljIFN0cmluZyBnZXRTdHJpbmcoU3RyaW5nIGtleSkgew0KKwkJcmV0dXJuIFJrRWRpdG9yUGx1Z2luLklOU1RBTkNFLmdldFN0cmluZyhrZXkpOw0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIGxvb2tzIHVwIGEgc3RyaW5nIGluIHBsdWdpbi5wcm9wZXJ0aWVzLCBtYWtpbmcgYSBzdWJzdGl0dXRpb24uDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcml2YXRlIHN0YXRpYyBTdHJpbmcgZ2V0U3RyaW5nKFN0cmluZyBrZXksIE9iamVjdCBzMSkgew0KKwkJcmV0dXJuIFJrRWRpdG9yUGx1Z2luLklOU1RBTkNFLmdldFN0cmluZyhrZXksIG5ldyBPYmplY3QgW10geyBzMSB9KTsNCisJfQ0KKw0KKwkvKioNCisJICogVGhpcyBpbXBsZW1lbnRzIHtAbGluayBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSU1lbnVMaXN0ZW5lcn0gdG8gaGVscCBmaWxsIHRoZSBjb250ZXh0IG1lbnVzIHdpdGggY29udHJpYnV0aW9ucyBmcm9tIHRoZSBFZGl0IG1lbnUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgdm9pZCBtZW51QWJvdXRUb1Nob3coSU1lbnVNYW5hZ2VyIG1lbnVNYW5hZ2VyKSB7DQorCQkoKElNZW51TGlzdGVuZXIpZ2V0RWRpdG9yU2l0ZSgpLmdldEFjdGlvbkJhckNvbnRyaWJ1dG9yKCkpLm1lbnVBYm91dFRvU2hvdyhtZW51TWFuYWdlcik7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgRWRpdGluZ0RvbWFpbkFjdGlvbkJhckNvbnRyaWJ1dG9yIGdldEFjdGlvbkJhckNvbnRyaWJ1dG9yKCkgew0KKwkJcmV0dXJuIChFZGl0aW5nRG9tYWluQWN0aW9uQmFyQ29udHJpYnV0b3IpZ2V0RWRpdG9yU2l0ZSgpLmdldEFjdGlvbkJhckNvbnRyaWJ1dG9yKCk7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgSUFjdGlvbkJhcnMgZ2V0QWN0aW9uQmFycygpIHsNCisJCXJldHVybiBnZXRBY3Rpb25CYXJDb250cmlidXRvcigpLmdldEFjdGlvbkJhcnMoKTsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBBZGFwdGVyRmFjdG9yeSBnZXRBZGFwdGVyRmFjdG9yeSgpIHsNCisJCXJldHVybiBhZGFwdGVyRmFjdG9yeTsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCUBPdmVycmlkZQ0KKwlwdWJsaWMgdm9pZCBkaXNwb3NlKCkgew0KKwkJdXBkYXRlUHJvYmxlbUluZGljYXRpb24gPSBmYWxzZTsNCisNCisJCVJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5yZW1vdmVSZXNvdXJjZUNoYW5nZUxpc3RlbmVyKHJlc291cmNlQ2hhbmdlTGlzdGVuZXIpOw0KKw0KKwkJZ2V0U2l0ZSgpLmdldFBhZ2UoKS5yZW1vdmVQYXJ0TGlzdGVuZXIocGFydExpc3RlbmVyKTsNCisNCisJCWFkYXB0ZXJGYWN0b3J5LmRpc3Bvc2UoKTsNCisNCisJCWlmIChnZXRBY3Rpb25CYXJDb250cmlidXRvcigpLmdldEFjdGl2ZUVkaXRvcigpID09IHRoaXMpIHsNCisJCQlnZXRBY3Rpb25CYXJDb250cmlidXRvcigpLnNldEFjdGl2ZUVkaXRvcihudWxsKTsNCisJCX0NCisNCisJCWlmIChwcm9wZXJ0eVNoZWV0UGFnZSAhPSBudWxsKSB7DQorCQkJcHJvcGVydHlTaGVldFBhZ2UuZGlzcG9zZSgpOw0KKwkJfQ0KKw0KKwkJaWYgKGNvbnRlbnRPdXRsaW5lUGFnZSAhPSBudWxsKSB7DQorCQkJY29udGVudE91dGxpbmVQYWdlLmRpc3Bvc2UoKTsNCisJCX0NCisNCisJCXN1cGVyLmRpc3Bvc2UoKTsNCisJfQ0KKw0KKwkvKioNCisJICogUmV0dXJucyB3aGV0aGVyIHRoZSBvdXRsaW5lIHZpZXcgc2hvdWxkIGJlIHByZXNlbnRlZCB0byB0aGUgdXNlci4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCBib29sZWFuIHNob3dPdXRsaW5lVmlldygpIHsNCisJCXJldHVybiB0cnVlOw0KKwl9DQorfQ0KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5zb2x2ZXJzLnJrL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3NvbHZlcnMvcmsvcHJlc2VudGF0aW9uL1JrRWRpdG9yUGx1Z2luLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkuc29sdmVycy5yay9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9zb2x2ZXJzL3JrL3ByZXNlbnRhdGlvbi9Sa0VkaXRvclBsdWdpbi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZmYzYzOTIKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkuc29sdmVycy5yay9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9zb2x2ZXJzL3JrL3ByZXNlbnRhdGlvbi9Sa0VkaXRvclBsdWdpbi5qYXZhCkBAIC0wLDAgKzEsMTE0IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uc29sdmVycy5yay5wcmVzZW50YXRpb247DQorDQorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisgKiBDb3B5cmlnaHQgKGMpIDIwMDkgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuDQorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscw0KKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMA0KKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0DQorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwNCisgKg0KKyAqIENvbnRyaWJ1dG9yczoNCisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uDQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQorDQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24uRU1GUGx1Z2luOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnVpLkVjbGlwc2VVSVBsdWdpbjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlJlc291cmNlTG9jYXRvcjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnByb3ZpZGVyLkVjb3JlRWRpdFBsdWdpbjsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5wcm92aWRlci5Db3JlRWRpdFBsdWdpbjsNCitpbXBvcnQgb3JnLm9zZ2kuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHQ7DQorDQorLyoqDQorICogVGhpcyBpcyB0aGUgY2VudHJhbCBzaW5nbGV0b24gZm9yIHRoZSBSayBlZGl0b3IgcGx1Z2luLg0KKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorICogQGdlbmVyYXRlZA0KKyAqLw0KK0BTdXBwcmVzc1dhcm5pbmdzKCJzeW50aGV0aWMtYWNjZXNzIikNCitwdWJsaWMgZmluYWwgY2xhc3MgUmtFZGl0b3JQbHVnaW4gZXh0ZW5kcyBFTUZQbHVnaW4gew0KKwkvKioNCisJICogS2VlcCB0cmFjayBvZiB0aGUgc2luZ2xldG9uLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIHN0YXRpYyBmaW5hbCBSa0VkaXRvclBsdWdpbiBJTlNUQU5DRSA9IG5ldyBSa0VkaXRvclBsdWdpbigpOw0KKwkNCisJLyoqDQorCSAqIEtlZXAgdHJhY2sgb2YgdGhlIHNpbmdsZXRvbi4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByaXZhdGUgc3RhdGljIEltcGxlbWVudGF0aW9uIHBsdWdpbjsNCisNCisJLyoqDQorCSAqIENyZWF0ZSB0aGUgaW5zdGFuY2UuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgUmtFZGl0b3JQbHVnaW4oKSB7DQorCQlzdXBlcg0KKwkJCShuZXcgUmVzb3VyY2VMb2NhdG9yIFtdIHsNCisJCQkJQ29yZUVkaXRQbHVnaW4uSU5TVEFOQ0UsDQorCQkJCUVjb3JlRWRpdFBsdWdpbi5JTlNUQU5DRSwNCisJCQl9KTsNCisJfQ0KKw0KKwkvKioNCisJICogUmV0dXJucyB0aGUgc2luZ2xldG9uIGluc3RhbmNlIG9mIHRoZSBFY2xpcHNlIHBsdWdpbi4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEByZXR1cm4gdGhlIHNpbmdsZXRvbiBpbnN0YW5jZS4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJQE92ZXJyaWRlDQorCXB1YmxpYyBSZXNvdXJjZUxvY2F0b3IgZ2V0UGx1Z2luUmVzb3VyY2VMb2NhdG9yKCkgew0KKwkJcmV0dXJuIHBsdWdpbjsNCisJfQ0KKwkNCisJLyoqDQorCSAqIFJldHVybnMgdGhlIHNpbmdsZXRvbiBpbnN0YW5jZSBvZiB0aGUgRWNsaXBzZSBwbHVnaW4uDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcmV0dXJuIHRoZSBzaW5nbGV0b24gaW5zdGFuY2UuDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBzdGF0aWMgSW1wbGVtZW50YXRpb24gZ2V0UGx1Z2luKCkgew0KKwkJcmV0dXJuIHBsdWdpbjsNCisJfQ0KKwkNCisJLyoqDQorCSAqIFRoZSBhY3R1YWwgaW1wbGVtZW50YXRpb24gb2YgdGhlIEVjbGlwc2UgPGI+UGx1Z2luPC9iPi4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBzdGF0aWMgY2xhc3MgSW1wbGVtZW50YXRpb24gZXh0ZW5kcyBFY2xpcHNlVUlQbHVnaW4gew0KKwkJLyoqDQorCQkgKiBDcmVhdGVzIGFuIGluc3RhbmNlLg0KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkJICogQGdlbmVyYXRlZA0KKwkJICovDQorCQlwdWJsaWMgSW1wbGVtZW50YXRpb24oKSB7DQorCQkJc3VwZXIoKTsNCisJDQorCQkJLy8gUmVtZW1iZXIgdGhlIHN0YXRpYyBpbnN0YW5jZS4NCisJCQkvLw0KKwkJCXBsdWdpbiA9IHRoaXM7DQorCQl9DQorCQkNCisJCS8qKg0KKwkJICogDQorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnVpLnBsdWdpbi5BYnN0cmFjdFVJUGx1Z2luI3N0YXJ0KG9yZy5vc2dpLmZyYW1ld29yay5CdW5kbGVDb250ZXh0KQ0KKwkJICovDQorCQlAT3ZlcnJpZGUNCisJCXB1YmxpYyB2b2lkIHN0YXJ0KEJ1bmRsZUNvbnRleHQgY29udGV4dCkgdGhyb3dzIEV4Y2VwdGlvbiB7DQorCQkJc3VwZXIuc3RhcnQoY29udGV4dCk7DQorCQkJbmV3IFJrU29sdmVyUHJvcGVydHlFZGl0b3JBZGFwdGVyRmFjdG9yeSgpOw0KKwkJfQ0KKwl9DQorDQorfQ0KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5zb2x2ZXJzLnJrL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3NvbHZlcnMvcmsvcHJlc2VudGF0aW9uL1JrTW9kZWxXaXphcmQuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5zb2x2ZXJzLnJrL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3NvbHZlcnMvcmsvcHJlc2VudGF0aW9uL1JrTW9kZWxXaXphcmQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYTE4ZTBkCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLnNvbHZlcnMucmsvc3JjL29yZy9lY2xpcHNlL3N0ZW0vc29sdmVycy9yay9wcmVzZW50YXRpb24vUmtNb2RlbFdpemFyZC5qYXZhCkBAIC0wLDAgKzEsNjExIEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uc29sdmVycy5yay5wcmVzZW50YXRpb247DQorDQorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisgKiBDb3B5cmlnaHQgKGMpIDIwMDkgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuDQorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscw0KKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMA0KKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0DQorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwNCisgKg0KKyAqIENvbnRyaWJ1dG9yczoNCisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uDQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQorDQorDQoraW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7DQoraW1wb3J0IGphdmEudXRpbC5BcnJheXM7DQoraW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOw0KK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbnM7DQoraW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOw0KK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsNCitpbXBvcnQgamF2YS51dGlsLk1hcDsNCitpbXBvcnQgamF2YS51dGlsLk1pc3NpbmdSZXNvdXJjZUV4Y2VwdGlvbjsNCitpbXBvcnQgamF2YS51dGlsLlN0cmluZ1Rva2VuaXplcjsNCisNCitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUNvbnRhaW5lcjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUZpbGU7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklGb2xkZXI7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0Ow0KK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUmVzb3VyY2U7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLlJlc291cmNlc1BsdWdpbjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQcm9ncmVzc01vbml0b3I7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QYXRoOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLkNvbW1vblBsdWdpbjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlVSSTsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzczsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzc2lmaWVyOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdDsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnJlc291cmNlLlJlc291cmNlOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUucmVzb3VyY2UuUmVzb3VyY2VTZXQ7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5yZXNvdXJjZS5pbXBsLlJlc291cmNlU2V0SW1wbDsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnhtaS5YTUxSZXNvdXJjZTsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkucHJvdmlkZXIuRXh0ZW5kZWRJbWFnZVJlZ2lzdHJ5Ow0KK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5kaWFsb2dzLk1lc3NhZ2VEaWFsb2c7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvbjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU3RydWN0dXJlZFNlbGVjdGlvbjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5TdHJ1Y3R1cmVkU2VsZWN0aW9uOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS53aXphcmQuV2l6YXJkOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS53aXphcmQuV2l6YXJkUGFnZTsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5zb2x2ZXJzLnJrLlJrRmFjdG9yeTsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5zb2x2ZXJzLnJrLlJrUGFja2FnZTsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5zb2x2ZXJzLnJrLnByb3ZpZGVyLlJrRWRpdFBsdWdpbjsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LlNXVDsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5Nb2RpZnlFdmVudDsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5Nb2RpZnlMaXN0ZW5lcjsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5HcmlkRGF0YTsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5HcmlkTGF5b3V0Ow0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21ibzsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5MYWJlbDsNCitpbXBvcnQgb3JnLmVjbGlwc2UudWkuSU5ld1dpemFyZDsNCitpbXBvcnQgb3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaDsNCitpbXBvcnQgb3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaFBhZ2U7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2hQYXJ0Ow0KK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5JV29ya2JlbmNoV2luZG93Ow0KK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5QYXJ0SW5pdEV4Y2VwdGlvbjsNCitpbXBvcnQgb3JnLmVjbGlwc2UudWkuYWN0aW9ucy5Xb3Jrc3BhY2VNb2RpZnlPcGVyYXRpb247DQoraW1wb3J0IG9yZy5lY2xpcHNlLnVpLmRpYWxvZ3MuV2l6YXJkTmV3RmlsZUNyZWF0aW9uUGFnZTsNCitpbXBvcnQgb3JnLmVjbGlwc2UudWkucGFydC5GaWxlRWRpdG9ySW5wdXQ7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnVpLnBhcnQuSVNldFNlbGVjdGlvblRhcmdldDsNCisNCisNCisvKioNCisgKiBUaGlzIGlzIGEgc2ltcGxlIHdpemFyZCBmb3IgY3JlYXRpbmcgYSBuZXcgbW9kZWwgZmlsZS4NCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKyAqIEBnZW5lcmF0ZWQNCisgKi8NCitwdWJsaWMgY2xhc3MgUmtNb2RlbFdpemFyZCBleHRlbmRzIFdpemFyZCBpbXBsZW1lbnRzIElOZXdXaXphcmQgew0KKwkvKioNCisJICogVGhlIHN1cHBvcnRlZCBleHRlbnNpb25zIGZvciBjcmVhdGVkIGZpbGVzLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIHN0YXRpYyBmaW5hbCBMaXN0PFN0cmluZz4gRklMRV9FWFRFTlNJT05TID0NCisJCUNvbGxlY3Rpb25zLnVubW9kaWZpYWJsZUxpc3QoQXJyYXlzLmFzTGlzdChSa0VkaXRvclBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoIl9VSV9Sa0VkaXRvckZpbGVuYW1lRXh0ZW5zaW9ucyIpLnNwbGl0KCJcXHMqLFxccyoiKSkpOw0KKw0KKwkvKioNCisJICogQSBmb3JtYXR0ZWQgbGlzdCBvZiBzdXBwb3J0ZWQgZmlsZSBleHRlbnNpb25zLCBzdWl0YWJsZSBmb3IgZGlzcGxheS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEZPUk1BVFRFRF9GSUxFX0VYVEVOU0lPTlMgPQ0KKwkJUmtFZGl0b3JQbHVnaW4uSU5TVEFOQ0UuZ2V0U3RyaW5nKCJfVUlfUmtFZGl0b3JGaWxlbmFtZUV4dGVuc2lvbnMiKS5yZXBsYWNlQWxsKCJcXHMqLFxccyoiLCAiLCAiKTsNCisNCisJLyoqDQorCSAqIFRoaXMgY2FjaGVzIGFuIGluc3RhbmNlIG9mIHRoZSBtb2RlbCBwYWNrYWdlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIFJrUGFja2FnZSBya1BhY2thZ2UgPSBSa1BhY2thZ2UuZUlOU1RBTkNFOw0KKw0KKwkvKioNCisJICogVGhpcyBjYWNoZXMgYW4gaW5zdGFuY2Ugb2YgdGhlIG1vZGVsIGZhY3RvcnkuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgUmtGYWN0b3J5IHJrRmFjdG9yeSA9IHJrUGFja2FnZS5nZXRSa0ZhY3RvcnkoKTsNCisNCisJLyoqDQorCSAqIFRoaXMgaXMgdGhlIGZpbGUgY3JlYXRpb24gcGFnZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCBSa01vZGVsV2l6YXJkTmV3RmlsZUNyZWF0aW9uUGFnZSBuZXdGaWxlQ3JlYXRpb25QYWdlOw0KKw0KKwkvKioNCisJICogVGhpcyBpcyB0aGUgaW5pdGlhbCBvYmplY3QgY3JlYXRpb24gcGFnZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCBSa01vZGVsV2l6YXJkSW5pdGlhbE9iamVjdENyZWF0aW9uUGFnZSBpbml0aWFsT2JqZWN0Q3JlYXRpb25QYWdlOw0KKw0KKwkvKioNCisJICogUmVtZW1iZXIgdGhlIHNlbGVjdGlvbiBkdXJpbmcgaW5pdGlhbGl6YXRpb24gZm9yIHBvcHVsYXRpbmcgdGhlIGRlZmF1bHQgY29udGFpbmVyLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIElTdHJ1Y3R1cmVkU2VsZWN0aW9uIHNlbGVjdGlvbjsNCisNCisJLyoqDQorCSAqIFJlbWVtYmVyIHRoZSB3b3JrYmVuY2ggZHVyaW5nIGluaXRpYWxpemF0aW9uLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIElXb3JrYmVuY2ggd29ya2JlbmNoOw0KKw0KKwkvKioNCisJICogQ2FjaGVzIHRoZSBuYW1lcyBvZiB0aGUgdHlwZXMgdGhhdCBjYW4gYmUgY3JlYXRlZCBhcyB0aGUgcm9vdCBvYmplY3QuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgTGlzdDxTdHJpbmc+IGluaXRpYWxPYmplY3ROYW1lczsNCisNCisJLyoqDQorCSAqIFRoaXMganVzdCByZWNvcmRzIHRoZSBpbmZvcm1hdGlvbi4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyB2b2lkIGluaXQoSVdvcmtiZW5jaCB3b3JrYmVuY2gsIElTdHJ1Y3R1cmVkU2VsZWN0aW9uIHNlbGVjdGlvbikgew0KKwkJdGhpcy53b3JrYmVuY2ggPSB3b3JrYmVuY2g7DQorCQl0aGlzLnNlbGVjdGlvbiA9IHNlbGVjdGlvbjsNCisJCXNldFdpbmRvd1RpdGxlKFJrRWRpdG9yUGx1Z2luLklOU1RBTkNFLmdldFN0cmluZygiX1VJX1dpemFyZF9sYWJlbCIpKTsNCisJCXNldERlZmF1bHRQYWdlSW1hZ2VEZXNjcmlwdG9yKEV4dGVuZGVkSW1hZ2VSZWdpc3RyeS5JTlNUQU5DRS5nZXRJbWFnZURlc2NyaXB0b3IoUmtFZGl0b3JQbHVnaW4uSU5TVEFOQ0UuZ2V0SW1hZ2UoImZ1bGwvd2l6YmFuL05ld1JrIikpKTsNCisJfQ0KKw0KKwkvKioNCisJICogUmV0dXJucyB0aGUgbmFtZXMgb2YgdGhlIHR5cGVzIHRoYXQgY2FuIGJlIGNyZWF0ZWQgYXMgdGhlIHJvb3Qgb2JqZWN0Lg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIENvbGxlY3Rpb248U3RyaW5nPiBnZXRJbml0aWFsT2JqZWN0TmFtZXMoKSB7DQorCQlpZiAoaW5pdGlhbE9iamVjdE5hbWVzID09IG51bGwpIHsNCisJCQlpbml0aWFsT2JqZWN0TmFtZXMgPSBuZXcgQXJyYXlMaXN0PFN0cmluZz4oKTsNCisJCQlmb3IgKEVDbGFzc2lmaWVyIGVDbGFzc2lmaWVyIDogcmtQYWNrYWdlLmdldEVDbGFzc2lmaWVycygpKSB7DQorCQkJCWlmIChlQ2xhc3NpZmllciBpbnN0YW5jZW9mIEVDbGFzcykgew0KKwkJCQkJRUNsYXNzIGVDbGFzcyA9IChFQ2xhc3MpZUNsYXNzaWZpZXI7DQorCQkJCQlpZiAoIWVDbGFzcy5pc0Fic3RyYWN0KCkpIHsNCisJCQkJCQlpbml0aWFsT2JqZWN0TmFtZXMuYWRkKGVDbGFzcy5nZXROYW1lKCkpOw0KKwkJCQkJfQ0KKwkJCQl9DQorCQkJfQ0KKwkJCUNvbGxlY3Rpb25zLnNvcnQoaW5pdGlhbE9iamVjdE5hbWVzLCBDb21tb25QbHVnaW4uSU5TVEFOQ0UuZ2V0Q29tcGFyYXRvcigpKTsNCisJCX0NCisJCXJldHVybiBpbml0aWFsT2JqZWN0TmFtZXM7DQorCX0NCisNCisJLyoqDQorCSAqIENyZWF0ZSBhIG5ldyBtb2RlbC4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCBFT2JqZWN0IGNyZWF0ZUluaXRpYWxNb2RlbCgpIHsNCisJCUVDbGFzcyBlQ2xhc3MgPSAoRUNsYXNzKXJrUGFja2FnZS5nZXRFQ2xhc3NpZmllcihpbml0aWFsT2JqZWN0Q3JlYXRpb25QYWdlLmdldEluaXRpYWxPYmplY3ROYW1lKCkpOw0KKwkJRU9iamVjdCByb290T2JqZWN0ID0gcmtGYWN0b3J5LmNyZWF0ZShlQ2xhc3MpOw0KKwkJcmV0dXJuIHJvb3RPYmplY3Q7DQorCX0NCisNCisJLyoqDQorCSAqIERvIHRoZSB3b3JrIGFmdGVyIGV2ZXJ5dGhpbmcgaXMgc3BlY2lmaWVkLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJQE92ZXJyaWRlDQorCXB1YmxpYyBib29sZWFuIHBlcmZvcm1GaW5pc2goKSB7DQorCQl0cnkgew0KKwkJCS8vIFJlbWVtYmVyIHRoZSBmaWxlLg0KKwkJCS8vDQorCQkJZmluYWwgSUZpbGUgbW9kZWxGaWxlID0gZ2V0TW9kZWxGaWxlKCk7DQorDQorCQkJLy8gRG8gdGhlIHdvcmsgd2l0aGluIGFuIG9wZXJhdGlvbi4NCisJCQkvLw0KKwkJCVdvcmtzcGFjZU1vZGlmeU9wZXJhdGlvbiBvcGVyYXRpb24gPQ0KKwkJCQluZXcgV29ya3NwYWNlTW9kaWZ5T3BlcmF0aW9uKCkgew0KKwkJCQkJQE92ZXJyaWRlDQorCQkJCQlwcm90ZWN0ZWQgdm9pZCBleGVjdXRlKElQcm9ncmVzc01vbml0b3IgcHJvZ3Jlc3NNb25pdG9yKSB7DQorCQkJCQkJdHJ5IHsNCisJCQkJCQkJLy8gQ3JlYXRlIGEgcmVzb3VyY2Ugc2V0DQorCQkJCQkJCS8vDQorCQkJCQkJCVJlc291cmNlU2V0IHJlc291cmNlU2V0ID0gbmV3IFJlc291cmNlU2V0SW1wbCgpOw0KKw0KKwkJCQkJCQkvLyBHZXQgdGhlIFVSSSBvZiB0aGUgbW9kZWwgZmlsZS4NCisJCQkJCQkJLy8NCisJCQkJCQkJVVJJIGZpbGVVUkkgPSBVUkkuY3JlYXRlUGxhdGZvcm1SZXNvdXJjZVVSSShtb2RlbEZpbGUuZ2V0RnVsbFBhdGgoKS50b1N0cmluZygpLCB0cnVlKTsNCisNCisJCQkJCQkJLy8gQ3JlYXRlIGEgcmVzb3VyY2UgZm9yIHRoaXMgZmlsZS4NCisJCQkJCQkJLy8NCisJCQkJCQkJUmVzb3VyY2UgcmVzb3VyY2UgPSByZXNvdXJjZVNldC5jcmVhdGVSZXNvdXJjZShmaWxlVVJJKTsNCisNCisJCQkJCQkJLy8gQWRkIHRoZSBpbml0aWFsIG1vZGVsIG9iamVjdCB0byB0aGUgY29udGVudHMuDQorCQkJCQkJCS8vDQorCQkJCQkJCUVPYmplY3Qgcm9vdE9iamVjdCA9IGNyZWF0ZUluaXRpYWxNb2RlbCgpOw0KKwkJCQkJCQlpZiAocm9vdE9iamVjdCAhPSBudWxsKSB7DQorCQkJCQkJCQlyZXNvdXJjZS5nZXRDb250ZW50cygpLmFkZChyb290T2JqZWN0KTsNCisJCQkJCQkJfQ0KKw0KKwkJCQkJCQkvLyBTYXZlIHRoZSBjb250ZW50cyBvZiB0aGUgcmVzb3VyY2UgdG8gdGhlIGZpbGUgc3lzdGVtLg0KKwkJCQkJCQkvLw0KKwkJCQkJCQlNYXA8T2JqZWN0LCBPYmplY3Q+IG9wdGlvbnMgPSBuZXcgSGFzaE1hcDxPYmplY3QsIE9iamVjdD4oKTsNCisJCQkJCQkJb3B0aW9ucy5wdXQoWE1MUmVzb3VyY2UuT1BUSU9OX0VOQ09ESU5HLCBpbml0aWFsT2JqZWN0Q3JlYXRpb25QYWdlLmdldEVuY29kaW5nKCkpOw0KKwkJCQkJCQlyZXNvdXJjZS5zYXZlKG9wdGlvbnMpOw0KKwkJCQkJCX0NCisJCQkJCQljYXRjaCAoRXhjZXB0aW9uIGV4Y2VwdGlvbikgew0KKwkJCQkJCQlSa0VkaXRvclBsdWdpbi5JTlNUQU5DRS5sb2coZXhjZXB0aW9uKTsNCisJCQkJCQl9DQorCQkJCQkJZmluYWxseSB7DQorCQkJCQkJCXByb2dyZXNzTW9uaXRvci5kb25lKCk7DQorCQkJCQkJfQ0KKwkJCQkJfQ0KKwkJCQl9Ow0KKw0KKwkJCWdldENvbnRhaW5lcigpLnJ1bihmYWxzZSwgZmFsc2UsIG9wZXJhdGlvbik7DQorDQorCQkJLy8gU2VsZWN0IHRoZSBuZXcgZmlsZSByZXNvdXJjZSBpbiB0aGUgY3VycmVudCB2aWV3Lg0KKwkJCS8vDQorCQkJSVdvcmtiZW5jaFdpbmRvdyB3b3JrYmVuY2hXaW5kb3cgPSB3b3JrYmVuY2guZ2V0QWN0aXZlV29ya2JlbmNoV2luZG93KCk7DQorCQkJSVdvcmtiZW5jaFBhZ2UgcGFnZSA9IHdvcmtiZW5jaFdpbmRvdy5nZXRBY3RpdmVQYWdlKCk7DQorCQkJZmluYWwgSVdvcmtiZW5jaFBhcnQgYWN0aXZlUGFydCA9IHBhZ2UuZ2V0QWN0aXZlUGFydCgpOw0KKwkJCWlmIChhY3RpdmVQYXJ0IGluc3RhbmNlb2YgSVNldFNlbGVjdGlvblRhcmdldCkgew0KKwkJCQlmaW5hbCBJU2VsZWN0aW9uIHRhcmdldFNlbGVjdGlvbiA9IG5ldyBTdHJ1Y3R1cmVkU2VsZWN0aW9uKG1vZGVsRmlsZSk7DQorCQkJCWdldFNoZWxsKCkuZ2V0RGlzcGxheSgpLmFzeW5jRXhlYw0KKwkJCQkJKG5ldyBSdW5uYWJsZSgpIHsNCisJCQkJCQkgcHVibGljIHZvaWQgcnVuKCkgew0KKwkJCQkJCQkgKChJU2V0U2VsZWN0aW9uVGFyZ2V0KWFjdGl2ZVBhcnQpLnNlbGVjdFJldmVhbCh0YXJnZXRTZWxlY3Rpb24pOw0KKwkJCQkJCSB9DQorCQkJCQkgfSk7DQorCQkJfQ0KKw0KKwkJCS8vIE9wZW4gYW4gZWRpdG9yIG9uIHRoZSBuZXcgZmlsZS4NCisJCQkvLw0KKwkJCXRyeSB7DQorCQkJCXBhZ2Uub3BlbkVkaXRvcg0KKwkJCQkJKG5ldyBGaWxlRWRpdG9ySW5wdXQobW9kZWxGaWxlKSwNCisJCQkJCSB3b3JrYmVuY2guZ2V0RWRpdG9yUmVnaXN0cnkoKS5nZXREZWZhdWx0RWRpdG9yKG1vZGVsRmlsZS5nZXRGdWxsUGF0aCgpLnRvU3RyaW5nKCkpLmdldElkKCkpOw0KKwkJCX0NCisJCQljYXRjaCAoUGFydEluaXRFeGNlcHRpb24gZXhjZXB0aW9uKSB7DQorCQkJCU1lc3NhZ2VEaWFsb2cub3BlbkVycm9yKHdvcmtiZW5jaFdpbmRvdy5nZXRTaGVsbCgpLCBSa0VkaXRvclBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoIl9VSV9PcGVuRWRpdG9yRXJyb3JfbGFiZWwiKSwgZXhjZXB0aW9uLmdldE1lc3NhZ2UoKSk7DQorCQkJCXJldHVybiBmYWxzZTsNCisJCQl9DQorDQorCQkJcmV0dXJuIHRydWU7DQorCQl9DQorCQljYXRjaCAoRXhjZXB0aW9uIGV4Y2VwdGlvbikgew0KKwkJCVJrRWRpdG9yUGx1Z2luLklOU1RBTkNFLmxvZyhleGNlcHRpb24pOw0KKwkJCXJldHVybiBmYWxzZTsNCisJCX0NCisJfQ0KKw0KKwkvKioNCisJICogVGhpcyBpcyB0aGUgb25lIHBhZ2Ugb2YgdGhlIHdpemFyZC4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBjbGFzcyBSa01vZGVsV2l6YXJkTmV3RmlsZUNyZWF0aW9uUGFnZSBleHRlbmRzIFdpemFyZE5ld0ZpbGVDcmVhdGlvblBhZ2Ugew0KKwkJLyoqDQorCQkgKiBQYXNzIGluIHRoZSBzZWxlY3Rpb24uDQorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCQkgKiBAZ2VuZXJhdGVkDQorCQkgKi8NCisJCXB1YmxpYyBSa01vZGVsV2l6YXJkTmV3RmlsZUNyZWF0aW9uUGFnZShTdHJpbmcgcGFnZUlkLCBJU3RydWN0dXJlZFNlbGVjdGlvbiBzZWxlY3Rpb24pIHsNCisJCQlzdXBlcihwYWdlSWQsIHNlbGVjdGlvbik7DQorCQl9DQorDQorCQkvKioNCisJCSAqIFRoZSBmcmFtZXdvcmsgY2FsbHMgdGhpcyB0byBzZWUgaWYgdGhlIGZpbGUgaXMgY29ycmVjdC4NCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJCSAqIEBnZW5lcmF0ZWQNCisJCSAqLw0KKwkJQE92ZXJyaWRlDQorCQlwcm90ZWN0ZWQgYm9vbGVhbiB2YWxpZGF0ZVBhZ2UoKSB7DQorCQkJaWYgKHN1cGVyLnZhbGlkYXRlUGFnZSgpKSB7DQorCQkJCVN0cmluZyBleHRlbnNpb24gPSBuZXcgUGF0aChnZXRGaWxlTmFtZSgpKS5nZXRGaWxlRXh0ZW5zaW9uKCk7DQorCQkJCWlmIChleHRlbnNpb24gPT0gbnVsbCB8fCAhRklMRV9FWFRFTlNJT05TLmNvbnRhaW5zKGV4dGVuc2lvbikpIHsNCisJCQkJCVN0cmluZyBrZXkgPSBGSUxFX0VYVEVOU0lPTlMuc2l6ZSgpID4gMSA/ICJfV0FSTl9GaWxlbmFtZUV4dGVuc2lvbnMiIDogIl9XQVJOX0ZpbGVuYW1lRXh0ZW5zaW9uIjsNCisJCQkJCXNldEVycm9yTWVzc2FnZShSa0VkaXRvclBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoa2V5LCBuZXcgT2JqZWN0IFtdIHsgRk9STUFUVEVEX0ZJTEVfRVhURU5TSU9OUyB9KSk7DQorCQkJCQlyZXR1cm4gZmFsc2U7DQorCQkJCX0NCisJCQkJcmV0dXJuIHRydWU7DQorCQkJfQ0KKwkJCXJldHVybiBmYWxzZTsNCisJCX0NCisNCisJCS8qKg0KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkJICogQGdlbmVyYXRlZA0KKwkJICovDQorCQlwdWJsaWMgSUZpbGUgZ2V0TW9kZWxGaWxlKCkgew0KKwkJCXJldHVybiBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuZ2V0Um9vdCgpLmdldEZpbGUoZ2V0Q29udGFpbmVyRnVsbFBhdGgoKS5hcHBlbmQoZ2V0RmlsZU5hbWUoKSkpOw0KKwkJfQ0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIGlzIHRoZSBwYWdlIHdoZXJlIHRoZSB0eXBlIG9mIG9iamVjdCB0byBjcmVhdGUgaXMgc2VsZWN0ZWQuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgY2xhc3MgUmtNb2RlbFdpemFyZEluaXRpYWxPYmplY3RDcmVhdGlvblBhZ2UgZXh0ZW5kcyBXaXphcmRQYWdlIHsNCisJCS8qKg0KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkJICogQGdlbmVyYXRlZA0KKwkJICovDQorCQlwcm90ZWN0ZWQgQ29tYm8gaW5pdGlhbE9iamVjdEZpZWxkOw0KKw0KKwkJLyoqDQorCQkgKiBAZ2VuZXJhdGVkDQorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCQkgKi8NCisJCXByb3RlY3RlZCBMaXN0PFN0cmluZz4gZW5jb2RpbmdzOw0KKw0KKwkJLyoqDQorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCQkgKiBAZ2VuZXJhdGVkDQorCQkgKi8NCisJCXByb3RlY3RlZCBDb21ibyBlbmNvZGluZ0ZpZWxkOw0KKw0KKwkJLyoqDQorCQkgKiBQYXNzIGluIHRoZSBzZWxlY3Rpb24uDQorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCQkgKiBAZ2VuZXJhdGVkDQorCQkgKi8NCisJCXB1YmxpYyBSa01vZGVsV2l6YXJkSW5pdGlhbE9iamVjdENyZWF0aW9uUGFnZShTdHJpbmcgcGFnZUlkKSB7DQorCQkJc3VwZXIocGFnZUlkKTsNCisJCX0NCisNCisJCS8qKg0KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkJICogQGdlbmVyYXRlZA0KKwkJICovDQorCQlwdWJsaWMgdm9pZCBjcmVhdGVDb250cm9sKENvbXBvc2l0ZSBwYXJlbnQpIHsNCisJCQlDb21wb3NpdGUgY29tcG9zaXRlID0gbmV3IENvbXBvc2l0ZShwYXJlbnQsIFNXVC5OT05FKTsgew0KKwkJCQlHcmlkTGF5b3V0IGxheW91dCA9IG5ldyBHcmlkTGF5b3V0KCk7DQorCQkJCWxheW91dC5udW1Db2x1bW5zID0gMTsNCisJCQkJbGF5b3V0LnZlcnRpY2FsU3BhY2luZyA9IDEyOw0KKwkJCQljb21wb3NpdGUuc2V0TGF5b3V0KGxheW91dCk7DQorDQorCQkJCUdyaWREYXRhIGRhdGEgPSBuZXcgR3JpZERhdGEoKTsNCisJCQkJZGF0YS52ZXJ0aWNhbEFsaWdubWVudCA9IEdyaWREYXRhLkZJTEw7DQorCQkJCWRhdGEuZ3JhYkV4Y2Vzc1ZlcnRpY2FsU3BhY2UgPSB0cnVlOw0KKwkJCQlkYXRhLmhvcml6b250YWxBbGlnbm1lbnQgPSBHcmlkRGF0YS5GSUxMOw0KKwkJCQljb21wb3NpdGUuc2V0TGF5b3V0RGF0YShkYXRhKTsNCisJCQl9DQorDQorCQkJTGFiZWwgY29udGFpbmVyTGFiZWwgPSBuZXcgTGFiZWwoY29tcG9zaXRlLCBTV1QuTEVGVCk7DQorCQkJew0KKwkJCQljb250YWluZXJMYWJlbC5zZXRUZXh0KFJrRWRpdG9yUGx1Z2luLklOU1RBTkNFLmdldFN0cmluZygiX1VJX01vZGVsT2JqZWN0IikpOw0KKw0KKwkJCQlHcmlkRGF0YSBkYXRhID0gbmV3IEdyaWREYXRhKCk7DQorCQkJCWRhdGEuaG9yaXpvbnRhbEFsaWdubWVudCA9IEdyaWREYXRhLkZJTEw7DQorCQkJCWNvbnRhaW5lckxhYmVsLnNldExheW91dERhdGEoZGF0YSk7DQorCQkJfQ0KKw0KKwkJCWluaXRpYWxPYmplY3RGaWVsZCA9IG5ldyBDb21ibyhjb21wb3NpdGUsIFNXVC5CT1JERVIpOw0KKwkJCXsNCisJCQkJR3JpZERhdGEgZGF0YSA9IG5ldyBHcmlkRGF0YSgpOw0KKwkJCQlkYXRhLmhvcml6b250YWxBbGlnbm1lbnQgPSBHcmlkRGF0YS5GSUxMOw0KKwkJCQlkYXRhLmdyYWJFeGNlc3NIb3Jpem9udGFsU3BhY2UgPSB0cnVlOw0KKwkJCQlpbml0aWFsT2JqZWN0RmllbGQuc2V0TGF5b3V0RGF0YShkYXRhKTsNCisJCQl9DQorDQorCQkJZm9yIChTdHJpbmcgb2JqZWN0TmFtZSA6IGdldEluaXRpYWxPYmplY3ROYW1lcygpKSB7DQorCQkJCWluaXRpYWxPYmplY3RGaWVsZC5hZGQoZ2V0TGFiZWwob2JqZWN0TmFtZSkpOw0KKwkJCX0NCisNCisJCQlpZiAoaW5pdGlhbE9iamVjdEZpZWxkLmdldEl0ZW1Db3VudCgpID09IDEpIHsNCisJCQkJaW5pdGlhbE9iamVjdEZpZWxkLnNlbGVjdCgwKTsNCisJCQl9DQorCQkJaW5pdGlhbE9iamVjdEZpZWxkLmFkZE1vZGlmeUxpc3RlbmVyKHZhbGlkYXRvcik7DQorDQorCQkJTGFiZWwgZW5jb2RpbmdMYWJlbCA9IG5ldyBMYWJlbChjb21wb3NpdGUsIFNXVC5MRUZUKTsNCisJCQl7DQorCQkJCWVuY29kaW5nTGFiZWwuc2V0VGV4dChSa0VkaXRvclBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoIl9VSV9YTUxFbmNvZGluZyIpKTsNCisNCisJCQkJR3JpZERhdGEgZGF0YSA9IG5ldyBHcmlkRGF0YSgpOw0KKwkJCQlkYXRhLmhvcml6b250YWxBbGlnbm1lbnQgPSBHcmlkRGF0YS5GSUxMOw0KKwkJCQllbmNvZGluZ0xhYmVsLnNldExheW91dERhdGEoZGF0YSk7DQorCQkJfQ0KKwkJCWVuY29kaW5nRmllbGQgPSBuZXcgQ29tYm8oY29tcG9zaXRlLCBTV1QuQk9SREVSKTsNCisJCQl7DQorCQkJCUdyaWREYXRhIGRhdGEgPSBuZXcgR3JpZERhdGEoKTsNCisJCQkJZGF0YS5ob3Jpem9udGFsQWxpZ25tZW50ID0gR3JpZERhdGEuRklMTDsNCisJCQkJZGF0YS5ncmFiRXhjZXNzSG9yaXpvbnRhbFNwYWNlID0gdHJ1ZTsNCisJCQkJZW5jb2RpbmdGaWVsZC5zZXRMYXlvdXREYXRhKGRhdGEpOw0KKwkJCX0NCisNCisJCQlmb3IgKFN0cmluZyBlbmNvZGluZyA6IGdldEVuY29kaW5ncygpKSB7DQorCQkJCWVuY29kaW5nRmllbGQuYWRkKGVuY29kaW5nKTsNCisJCQl9DQorDQorCQkJZW5jb2RpbmdGaWVsZC5zZWxlY3QoMCk7DQorCQkJZW5jb2RpbmdGaWVsZC5hZGRNb2RpZnlMaXN0ZW5lcih2YWxpZGF0b3IpOw0KKw0KKwkJCXNldFBhZ2VDb21wbGV0ZSh2YWxpZGF0ZVBhZ2UoKSk7DQorCQkJc2V0Q29udHJvbChjb21wb3NpdGUpOw0KKwkJfQ0KKw0KKwkJLyoqDQorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCQkgKiBAZ2VuZXJhdGVkDQorCQkgKi8NCisJCXByb3RlY3RlZCBNb2RpZnlMaXN0ZW5lciB2YWxpZGF0b3IgPQ0KKwkJCW5ldyBNb2RpZnlMaXN0ZW5lcigpIHsNCisJCQkJcHVibGljIHZvaWQgbW9kaWZ5VGV4dChNb2RpZnlFdmVudCBlKSB7DQorCQkJCQlzZXRQYWdlQ29tcGxldGUodmFsaWRhdGVQYWdlKCkpOw0KKwkJCQl9DQorCQkJfTsNCisNCisJCS8qKg0KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkJICogQGdlbmVyYXRlZA0KKwkJICovDQorCQlwcm90ZWN0ZWQgYm9vbGVhbiB2YWxpZGF0ZVBhZ2UoKSB7DQorCQkJcmV0dXJuIGdldEluaXRpYWxPYmplY3ROYW1lKCkgIT0gbnVsbCAmJiBnZXRFbmNvZGluZ3MoKS5jb250YWlucyhlbmNvZGluZ0ZpZWxkLmdldFRleHQoKSk7DQorCQl9DQorDQorCQkvKioNCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJCSAqIEBnZW5lcmF0ZWQNCisJCSAqLw0KKwkJQE92ZXJyaWRlDQorCQlwdWJsaWMgdm9pZCBzZXRWaXNpYmxlKGJvb2xlYW4gdmlzaWJsZSkgew0KKwkJCXN1cGVyLnNldFZpc2libGUodmlzaWJsZSk7DQorCQkJaWYgKHZpc2libGUpIHsNCisJCQkJaWYgKGluaXRpYWxPYmplY3RGaWVsZC5nZXRJdGVtQ291bnQoKSA9PSAxKSB7DQorCQkJCQlpbml0aWFsT2JqZWN0RmllbGQuY2xlYXJTZWxlY3Rpb24oKTsNCisJCQkJCWVuY29kaW5nRmllbGQuc2V0Rm9jdXMoKTsNCisJCQkJfQ0KKwkJCQllbHNlIHsNCisJCQkJCWVuY29kaW5nRmllbGQuY2xlYXJTZWxlY3Rpb24oKTsNCisJCQkJCWluaXRpYWxPYmplY3RGaWVsZC5zZXRGb2N1cygpOw0KKwkJCQl9DQorCQkJfQ0KKwkJfQ0KKw0KKwkJLyoqDQorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCQkgKiBAZ2VuZXJhdGVkDQorCQkgKi8NCisJCXB1YmxpYyBTdHJpbmcgZ2V0SW5pdGlhbE9iamVjdE5hbWUoKSB7DQorCQkJU3RyaW5nIGxhYmVsID0gaW5pdGlhbE9iamVjdEZpZWxkLmdldFRleHQoKTsNCisNCisJCQlmb3IgKFN0cmluZyBuYW1lIDogZ2V0SW5pdGlhbE9iamVjdE5hbWVzKCkpIHsNCisJCQkJaWYgKGdldExhYmVsKG5hbWUpLmVxdWFscyhsYWJlbCkpIHsNCisJCQkJCXJldHVybiBuYW1lOw0KKwkJCQl9DQorCQkJfQ0KKwkJCXJldHVybiBudWxsOw0KKwkJfQ0KKw0KKwkJLyoqDQorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCQkgKiBAZ2VuZXJhdGVkDQorCQkgKi8NCisJCXB1YmxpYyBTdHJpbmcgZ2V0RW5jb2RpbmcoKSB7DQorCQkJcmV0dXJuIGVuY29kaW5nRmllbGQuZ2V0VGV4dCgpOw0KKwkJfQ0KKw0KKwkJLyoqDQorCQkgKiBSZXR1cm5zIHRoZSBsYWJlbCBmb3IgdGhlIHNwZWNpZmllZCB0eXBlIG5hbWUuDQorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCQkgKiBAZ2VuZXJhdGVkDQorCQkgKi8NCisJCXByb3RlY3RlZCBTdHJpbmcgZ2V0TGFiZWwoU3RyaW5nIHR5cGVOYW1lKSB7DQorCQkJdHJ5IHsNCisJCQkJcmV0dXJuIFJrRWRpdFBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoIl9VSV8iICsgdHlwZU5hbWUgKyAiX3R5cGUiKTsNCisJCQl9DQorCQkJY2F0Y2goTWlzc2luZ1Jlc291cmNlRXhjZXB0aW9uIG1yZSkgew0KKwkJCQlSa0VkaXRvclBsdWdpbi5JTlNUQU5DRS5sb2cobXJlKTsNCisJCQl9DQorCQkJcmV0dXJuIHR5cGVOYW1lOw0KKwkJfQ0KKw0KKwkJLyoqDQorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCQkgKiBAZ2VuZXJhdGVkDQorCQkgKi8NCisJCXByb3RlY3RlZCBDb2xsZWN0aW9uPFN0cmluZz4gZ2V0RW5jb2RpbmdzKCkgew0KKwkJCWlmIChlbmNvZGluZ3MgPT0gbnVsbCkgew0KKwkJCQllbmNvZGluZ3MgPSBuZXcgQXJyYXlMaXN0PFN0cmluZz4oKTsNCisJCQkJZm9yIChTdHJpbmdUb2tlbml6ZXIgc3RyaW5nVG9rZW5pemVyID0gbmV3IFN0cmluZ1Rva2VuaXplcihSa0VkaXRvclBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoIl9VSV9YTUxFbmNvZGluZ0Nob2ljZXMiKSk7IHN0cmluZ1Rva2VuaXplci5oYXNNb3JlVG9rZW5zKCk7ICkgew0KKwkJCQkJZW5jb2RpbmdzLmFkZChzdHJpbmdUb2tlbml6ZXIubmV4dFRva2VuKCkpOw0KKwkJCQl9DQorCQkJfQ0KKwkJCXJldHVybiBlbmNvZGluZ3M7DQorCQl9DQorCX0NCisNCisJLyoqDQorCSAqIFRoZSBmcmFtZXdvcmsgY2FsbHMgdGhpcyB0byBjcmVhdGUgdGhlIGNvbnRlbnRzIG9mIHRoZSB3aXphcmQuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwkJQE92ZXJyaWRlDQorCXB1YmxpYyB2b2lkIGFkZFBhZ2VzKCkgew0KKwkJLy8gQ3JlYXRlIGEgcGFnZSwgc2V0IHRoZSB0aXRsZSwgYW5kIHRoZSBpbml0aWFsIG1vZGVsIGZpbGUgbmFtZS4NCisJCS8vDQorCQluZXdGaWxlQ3JlYXRpb25QYWdlID0gbmV3IFJrTW9kZWxXaXphcmROZXdGaWxlQ3JlYXRpb25QYWdlKCJXaGF0ZXZlciIsIHNlbGVjdGlvbik7DQorCQluZXdGaWxlQ3JlYXRpb25QYWdlLnNldFRpdGxlKFJrRWRpdG9yUGx1Z2luLklOU1RBTkNFLmdldFN0cmluZygiX1VJX1JrTW9kZWxXaXphcmRfbGFiZWwiKSk7DQorCQluZXdGaWxlQ3JlYXRpb25QYWdlLnNldERlc2NyaXB0aW9uKFJrRWRpdG9yUGx1Z2luLklOU1RBTkNFLmdldFN0cmluZygiX1VJX1JrTW9kZWxXaXphcmRfZGVzY3JpcHRpb24iKSk7DQorCQluZXdGaWxlQ3JlYXRpb25QYWdlLnNldEZpbGVOYW1lKFJrRWRpdG9yUGx1Z2luLklOU1RBTkNFLmdldFN0cmluZygiX1VJX1JrRWRpdG9yRmlsZW5hbWVEZWZhdWx0QmFzZSIpICsgIi4iICsgRklMRV9FWFRFTlNJT05TLmdldCgwKSk7DQorCQlhZGRQYWdlKG5ld0ZpbGVDcmVhdGlvblBhZ2UpOw0KKw0KKwkJLy8gVHJ5IGFuZCBnZXQgdGhlIHJlc291cmNlIHNlbGVjdGlvbiB0byBkZXRlcm1pbmUgYSBjdXJyZW50IGRpcmVjdG9yeSBmb3IgdGhlIGZpbGUgZGlhbG9nLg0KKwkJLy8NCisJCWlmIChzZWxlY3Rpb24gIT0gbnVsbCAmJiAhc2VsZWN0aW9uLmlzRW1wdHkoKSkgew0KKwkJCS8vIEdldCB0aGUgcmVzb3VyY2UuLi4NCisJCQkvLw0KKwkJCU9iamVjdCBzZWxlY3RlZEVsZW1lbnQgPSBzZWxlY3Rpb24uaXRlcmF0b3IoKS5uZXh0KCk7DQorCQkJaWYgKHNlbGVjdGVkRWxlbWVudCBpbnN0YW5jZW9mIElSZXNvdXJjZSkgew0KKwkJCQkvLyBHZXQgdGhlIHJlc291cmNlIHBhcmVudCwgaWYgaXRzIGEgZmlsZS4NCisJCQkJLy8NCisJCQkJSVJlc291cmNlIHNlbGVjdGVkUmVzb3VyY2UgPSAoSVJlc291cmNlKXNlbGVjdGVkRWxlbWVudDsNCisJCQkJaWYgKHNlbGVjdGVkUmVzb3VyY2UuZ2V0VHlwZSgpID09IElSZXNvdXJjZS5GSUxFKSB7DQorCQkJCQlzZWxlY3RlZFJlc291cmNlID0gc2VsZWN0ZWRSZXNvdXJjZS5nZXRQYXJlbnQoKTsNCisJCQkJfQ0KKw0KKwkJCQkvLyBUaGlzIGdpdmVzIHVzIGEgZGlyZWN0b3J5Li4uDQorCQkJCS8vDQorCQkJCWlmIChzZWxlY3RlZFJlc291cmNlIGluc3RhbmNlb2YgSUZvbGRlciB8fCBzZWxlY3RlZFJlc291cmNlIGluc3RhbmNlb2YgSVByb2plY3QpIHsNCisJCQkJCS8vIFNldCB0aGlzIGZvciB0aGUgY29udGFpbmVyLg0KKwkJCQkJLy8NCisJCQkJCW5ld0ZpbGVDcmVhdGlvblBhZ2Uuc2V0Q29udGFpbmVyRnVsbFBhdGgoc2VsZWN0ZWRSZXNvdXJjZS5nZXRGdWxsUGF0aCgpKTsNCisNCisJCQkJCS8vIE1ha2UgdXAgYSB1bmlxdWUgbmV3IG5hbWUgaGVyZS4NCisJCQkJCS8vDQorCQkJCQlTdHJpbmcgZGVmYXVsdE1vZGVsQmFzZUZpbGVuYW1lID0gUmtFZGl0b3JQbHVnaW4uSU5TVEFOQ0UuZ2V0U3RyaW5nKCJfVUlfUmtFZGl0b3JGaWxlbmFtZURlZmF1bHRCYXNlIik7DQorCQkJCQlTdHJpbmcgZGVmYXVsdE1vZGVsRmlsZW5hbWVFeHRlbnNpb24gPSBGSUxFX0VYVEVOU0lPTlMuZ2V0KDApOw0KKwkJCQkJU3RyaW5nIG1vZGVsRmlsZW5hbWUgPSBkZWZhdWx0TW9kZWxCYXNlRmlsZW5hbWUgKyAiLiIgKyBkZWZhdWx0TW9kZWxGaWxlbmFtZUV4dGVuc2lvbjsNCisJCQkJCWZvciAoaW50IGkgPSAxOyAoKElDb250YWluZXIpc2VsZWN0ZWRSZXNvdXJjZSkuZmluZE1lbWJlcihtb2RlbEZpbGVuYW1lKSAhPSBudWxsOyArK2kpIHsNCisJCQkJCQltb2RlbEZpbGVuYW1lID0gZGVmYXVsdE1vZGVsQmFzZUZpbGVuYW1lICsgaSArICIuIiArIGRlZmF1bHRNb2RlbEZpbGVuYW1lRXh0ZW5zaW9uOw0KKwkJCQkJfQ0KKwkJCQkJbmV3RmlsZUNyZWF0aW9uUGFnZS5zZXRGaWxlTmFtZShtb2RlbEZpbGVuYW1lKTsNCisJCQkJfQ0KKwkJCX0NCisJCX0NCisJCWluaXRpYWxPYmplY3RDcmVhdGlvblBhZ2UgPSBuZXcgUmtNb2RlbFdpemFyZEluaXRpYWxPYmplY3RDcmVhdGlvblBhZ2UoIldoYXRldmVyMiIpOw0KKwkJaW5pdGlhbE9iamVjdENyZWF0aW9uUGFnZS5zZXRUaXRsZShSa0VkaXRvclBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoIl9VSV9Sa01vZGVsV2l6YXJkX2xhYmVsIikpOw0KKwkJaW5pdGlhbE9iamVjdENyZWF0aW9uUGFnZS5zZXREZXNjcmlwdGlvbihSa0VkaXRvclBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoIl9VSV9XaXphcmRfaW5pdGlhbF9vYmplY3RfZGVzY3JpcHRpb24iKSk7DQorCQlhZGRQYWdlKGluaXRpYWxPYmplY3RDcmVhdGlvblBhZ2UpOw0KKwl9DQorDQorCS8qKg0KKwkgKiBHZXQgdGhlIGZpbGUgZnJvbSB0aGUgcGFnZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBJRmlsZSBnZXRNb2RlbEZpbGUoKSB7DQorCQlyZXR1cm4gbmV3RmlsZUNyZWF0aW9uUGFnZS5nZXRNb2RlbEZpbGUoKTsNCisJfQ0KKw0KK30NCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkuc29sdmVycy5yay9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9zb2x2ZXJzL3JrL3ByZXNlbnRhdGlvbi9Sa1NvbHZlckFkYXB0ZXIuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5zb2x2ZXJzLnJrL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3NvbHZlcnMvcmsvcHJlc2VudGF0aW9uL1JrU29sdmVyQWRhcHRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZkYTVlMzMKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkuc29sdmVycy5yay9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9zb2x2ZXJzL3JrL3ByZXNlbnRhdGlvbi9Sa1NvbHZlckFkYXB0ZXIuamF2YQpAQCAtMCwwICsxLDM5IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uc29sdmVycy5yay5wcmVzZW50YXRpb247CisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA3LCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zb2x2ZXIuU29sdmVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zb2x2ZXIuU29sdmVyUHJvcGVydHlDb21wb3NpdGU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNvbHZlci5Tb2x2ZXJQcm9wZXJ0eUVkaXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc29sdmVyLlNvbHZlclByb3BlcnR5RWRpdG9yQWRhcHRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLk1vZGlmeUxpc3RlbmVyOworCisvKioKKyAqICAKKyAqIEFkYXB0ZXIgZm9yIFByb3BlcnR5IEVkaXRvcgorICoKKyAqLworcHVibGljIGNsYXNzIFJrU29sdmVyQWRhcHRlciBleHRlbmRzCisJCVNvbHZlclByb3BlcnR5RWRpdG9yQWRhcHRlciB7CisKKwkvKioKKwkgKiAKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgU29sdmVyUHJvcGVydHlFZGl0b3IgY3JlYXRlU29sdmVyUHJvcGVydHlFZGl0b3IoCisJCQlTb2x2ZXJQcm9wZXJ0eUNvbXBvc2l0ZSBzb2x2ZXJQcm9wZXJ0eUNvbXBvc2l0ZSwKKwkJCWludCBzdHlsZSwgTW9kaWZ5TGlzdGVuZXIgcHJvamVjdFZhbGlkYXRvcikgeworCQlyZXR1cm4gbmV3IFJrU29sdmVyUHJvcGVydHlFZGl0b3IoCisJCQkJc29sdmVyUHJvcGVydHlDb21wb3NpdGUsIHN0eWxlLAorCQkJCShTb2x2ZXIpIGdldFRhcmdldCgpLCBwcm9qZWN0VmFsaWRhdG9yKTsKKwl9IC8vIGNyZWF0ZVNvbHZlclByb3BlcnR5RWRpdG9yCisKK30gLy8gUmtTb2x2ZXJBZGFwdGVyCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkuc29sdmVycy5yay9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9zb2x2ZXJzL3JrL3ByZXNlbnRhdGlvbi9Sa1NvbHZlclByb3BlcnR5RWRpdG9yLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkuc29sdmVycy5yay9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9zb2x2ZXJzL3JrL3ByZXNlbnRhdGlvbi9Sa1NvbHZlclByb3BlcnR5RWRpdG9yLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWU2ZTc1MgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5zb2x2ZXJzLnJrL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3NvbHZlcnMvcmsvcHJlc2VudGF0aW9uL1JrU29sdmVyUHJvcGVydHlFZGl0b3IuamF2YQpAQCAtMCwwICsxLDE3NiBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnNvbHZlcnMucmsucHJlc2VudGF0aW9uOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA5IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOworaW1wb3J0IGphdmEudXRpbC5MaXN0OworaW1wb3J0IGphdmEudXRpbC5NYXA7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FU3RydWN0dXJhbEZlYXR1cmU7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuQ29tcG9zZWRBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbVByb3BlcnR5RGVzY3JpcHRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbVByb3BlcnR5U291cmNlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5TVEVNVVJJOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zb2x2ZXIuU29sdmVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uc29sdmVycy5yay5Sa0ZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5zb2x2ZXJzLnJrLlJrUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnNvbHZlcnMucmsuUnVuZ2VLdXR0YTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnVpLmFkYXB0ZXJzLnByb3BlcnR5c3RyaW5ncy5Qcm9wZXJ0eVN0cmluZ1Byb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udWkuYWRhcHRlcnMucHJvcGVydHlzdHJpbmdzLlByb3BlcnR5U3RyaW5nUHJvdmlkZXJBZGFwdGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udWkuYWRhcHRlcnMucHJvcGVydHlzdHJpbmdzLlByb3BlcnR5U3RyaW5nUHJvdmlkZXJBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuU1dUOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuTW9kaWZ5TGlzdGVuZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5HcmlkRGF0YTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QubGF5b3V0LkdyaWRMYXlvdXQ7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkxhYmVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlRleHQ7CisKK3B1YmxpYyBjbGFzcyBSa1NvbHZlclByb3BlcnR5RWRpdG9yIGV4dGVuZHMgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNvbHZlci5Tb2x2ZXJQcm9wZXJ0eUVkaXRvciB7CisKKwkvKioKKwkgKiBAcGFyYW0gcGFyZW50CisJICogQHBhcmFtIHN0eWxlCisJICogQHBhcmFtIGRpc2Vhc2VNb2RlbAorCSAqIEBwYXJhbSBwcm9qZWN0VmFsaWRhdG9yCisJICovCisJcHVibGljIFJrU29sdmVyUHJvcGVydHlFZGl0b3IoQ29tcG9zaXRlIHBhcmVudCwKKwkJCWludCBzdHlsZSwgU29sdmVyIHNvbHZlciwKKwkJCU1vZGlmeUxpc3RlbmVyIHByb2plY3RWYWxpZGF0b3IpIHsKKwkJc3VwZXIocGFyZW50LCBzdHlsZSk7CisJCWZpbmFsIEdyaWRMYXlvdXQgZ3JpZExheW91dCA9IG5ldyBHcmlkTGF5b3V0KCk7CisJCWdyaWRMYXlvdXQubnVtQ29sdW1ucyA9IDM7CisJCXNldExheW91dChncmlkTGF5b3V0KTsKKworCQkvLyBHZXQgdGhlIGFkYXB0ZXIgdGhhdCB3aWxsIHByb3ZpZGUgTkxTJ2QgbmFtZXMgZm9yIHRoZQorCQkvLyBwcm9wZXJ0aWVzIG9mIHRoZSBkaXNlYXNlIG1vZGVsCisJCWZpbmFsIFByb3BlcnR5U3RyaW5nUHJvdmlkZXJBZGFwdGVyIHBzcGEgPSAoUHJvcGVydHlTdHJpbmdQcm92aWRlckFkYXB0ZXIpIFByb3BlcnR5U3RyaW5nUHJvdmlkZXJBZGFwdGVyRmFjdG9yeS5JTlNUQU5DRQorCQkJCS5hZGFwdChzb2x2ZXIsIFByb3BlcnR5U3RyaW5nUHJvdmlkZXIuY2xhc3MpOworCisJCWZpbmFsIENvbXBvc2VkQWRhcHRlckZhY3RvcnkgaXRlbVByb3ZpZGVyRmFjdG9yeSA9IG5ldyBDb21wb3NlZEFkYXB0ZXJGYWN0b3J5KAorCQkJCUNvbXBvc2VkQWRhcHRlckZhY3RvcnkuRGVzY3JpcHRvci5SZWdpc3RyeS5JTlNUQU5DRSk7CisJCQorCQlmaW5hbCBJSXRlbVByb3BlcnR5U291cmNlIHByb3BlcnR5U291cmNlID0gKElJdGVtUHJvcGVydHlTb3VyY2UpIGl0ZW1Qcm92aWRlckZhY3RvcnkKKwkJCQkuYWRhcHQoc29sdmVyLCBJSXRlbVByb3BlcnR5U291cmNlLmNsYXNzKTsKKwkJCisJCWZpbmFsIExpc3Q8SUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I+IHByb3BlcnRpZXMgPSBwcm9wZXJ0eVNvdXJjZQorCQkJCS5nZXRQcm9wZXJ0eURlc2NyaXB0b3JzKHNvbHZlcik7CisKKwkJZm9yIChmaW5hbCBJSXRlbVByb3BlcnR5RGVzY3JpcHRvciBkZXNjcmlwdG9yIDogcHJvcGVydGllcykgeworCQkJZmluYWwgRVN0cnVjdHVyYWxGZWF0dXJlIGZlYXR1cmUgPSAoRVN0cnVjdHVyYWxGZWF0dXJlKSBkZXNjcmlwdG9yCisJCQkJCS5nZXRGZWF0dXJlKG51bGwpOworCQkJLy8gSXMgdGhpcyBhIGRpc2Vhc2UgbW9kZWwgcHJvcGVydHkgdGhhdCB0aGUgdXNlciBzaG91bGQgc3BlY2lmeT8KKwkJCWlmIChpc1VzZXJTcGVjaWZpZWRTb2x2ZXJQcm9wZXJ0eShmZWF0dXJlKSkgeworCQkJCS8vIFllcworCQkJCWZpbmFsIExhYmVsIGxhYmVsID0gbmV3IExhYmVsKHRoaXMsIFNXVC5OT05FKTsKKwkJCQlsYWJlbC5zZXRUZXh0KHBzcGEuZ2V0UHJvcGVydHlOYW1lKGRlc2NyaXB0b3IpKTsKKworCQkJCWZpbmFsIEdyaWREYXRhIGxhYmVsR0QgPSBuZXcgR3JpZERhdGEoR3JpZERhdGEuQkVHSU5OSU5HKTsKKwkJCQlsYWJlbEdELmdyYWJFeGNlc3NIb3Jpem9udGFsU3BhY2UgPSB0cnVlOworCQkJCWxhYmVsR0QuaG9yaXpvbnRhbEFsaWdubWVudCA9IFNXVC5GSUxMOworCQkJCWxhYmVsR0QuaG9yaXpvbnRhbEluZGVudCA9IDA7CisJCQkJbGFiZWwuc2V0TGF5b3V0RGF0YShsYWJlbEdEKTsKKworCQkJCS8vIEdldCBhIHN0cmluZyB2YWx1ZSBmb3IgdGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlIGZlYXR1cmUKKworCQkJCWZpbmFsIFN0cmluZyBkZWZhdWx0VmFsdWVTdHJpbmcgPSBnZXRQcm9wZXJ0eURlZmF1bHRWYWx1ZVN0cmluZyhkZXNjcmlwdG9yKTsKKworCQkJCWZpbmFsIFRleHQgdGV4dCA9IG5ldyBUZXh0KHRoaXMsIFNXVC5CT1JERVIgfCBTV1QuVFJBSUwpOworCQkJCXRleHQuc2V0VGV4dChkZWZhdWx0VmFsdWVTdHJpbmcpOworCQkJCXRleHQuc2V0VG9vbFRpcFRleHQocHNwYS5nZXRQcm9wZXJ0eVRvb2xUaXAoZGVzY3JpcHRvcikpOworCQkJCW1hcC5wdXQoZmVhdHVyZSwgdGV4dCk7CisKKwkJCQlmaW5hbCBHcmlkRGF0YSB0ZXh0R0QgPSBuZXcgR3JpZERhdGEoR3JpZERhdGEuRU5EKTsKKwkJCQl0ZXh0R0QuZ3JhYkV4Y2Vzc0hvcml6b250YWxTcGFjZSA9IHRydWU7CisJCQkJdGV4dEdELmhvcml6b250YWxBbGlnbm1lbnQgPSBTV1QuRklMTDsKKwkJCQl0ZXh0LnNldExheW91dERhdGEodGV4dEdEKTsKKworCQkJCXRleHQuYWRkTW9kaWZ5TGlzdGVuZXIocHJvamVjdFZhbGlkYXRvcik7CisKKwkJCQlmaW5hbCBMYWJlbCB1bml0TGFiZWwgPSBuZXcgTGFiZWwodGhpcywgU1dULk5PTkUpOworCQkJCXVuaXRMYWJlbC5zZXRUZXh0KHBzcGEuZ2V0UHJvcGVydHlVbml0cyhkZXNjcmlwdG9yKSk7CisJCQkJZmluYWwgR3JpZERhdGEgdW5pdExhYmVsR0QgPSBuZXcgR3JpZERhdGEoR3JpZERhdGEuRU5EKTsKKwkJCQl1bml0TGFiZWxHRC52ZXJ0aWNhbEFsaWdubWVudCA9IEdyaWREYXRhLkNFTlRFUjsKKwkJCQl1bml0TGFiZWwuc2V0TGF5b3V0RGF0YSh1bml0TGFiZWxHRCk7CisKKwkJCX0gLy8gaWYgdXNlciBzcGVjaWZpZWQKKwkJfSAvLyBmb3IgZWFjaCBzb2x2ZXIgcHJvcGVydHkKKwl9CisJCisJLyoqCisJICogQHBhcmFtIGZlYXR1cmUKKwkgKiBAcmV0dXJuIDxjb2RlPnRydWU8L2NvZGU+IGlmIHRoZSBmZWF0dXJlIGlzIGEgZHVibGluIGNvcmUgZmVhdHVyZSAKKwkgKiB0aGF0IGlzIHNwZWNpZmllZCBieSBhIHVzZXIuCisJICovCisJcHVibGljIHN0YXRpYyBib29sZWFuIGlzVXNlclNwZWNpZmllZFNvbHZlclByb3BlcnR5KGZpbmFsIEVTdHJ1Y3R1cmFsRmVhdHVyZSBmZWF0dXJlKSB7CisJCWJvb2xlYW4gcmV0VmFsdWUgPSBmYWxzZTsKKwkJZmluYWwgRUNsYXNzIGNvbnRhaW5pbmdDbGFzcyA9IGZlYXR1cmUuZ2V0RUNvbnRhaW5pbmdDbGFzcygpOworCQkvLyBJcyBpdCBhIGRpc2Vhc2UgbW9kZWwgcHJvcGVydHk/CisJCWlmIChjb250YWluaW5nQ2xhc3MuZXF1YWxzKFJrUGFja2FnZS5lSU5TVEFOQ0UuZ2V0UnVuZ2VLdXR0YSgpKSkgeworCQkJcmV0VmFsdWUgPSB0cnVlOworCQl9IC8vIGlmIGEgZGlzZWFzZSBtb2RlbCBwcm9wZXJ0eQorCQlyZXR1cm4gcmV0VmFsdWU7CisJfSAvLyBpc1VzZXJTcGVjaWZpZWREaXNlYXNlTW9kZWxQcm9wZXJ0eQorCisJcHJvdGVjdGVkIGZpbmFsIE1hcDxFU3RydWN0dXJhbEZlYXR1cmUsIFRleHQ+IG1hcCA9IG5ldyBIYXNoTWFwPEVTdHJ1Y3R1cmFsRmVhdHVyZSwgVGV4dD4oKTsKKwlwcm90ZWN0ZWQgU3RyaW5nIGVycm9yTWVzc2FnZTsKKworCXB1YmxpYyBSa1NvbHZlclByb3BlcnR5RWRpdG9yKENvbXBvc2l0ZSBwYXJlbnQsIGludCBzdHlsZSkgeworCQlzdXBlcihwYXJlbnQsc3R5bGUpOworCX0KKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS51aS53aXphcmRzLlN0YW5kYXJkRGlzZWFzZU1vZGVsUHJvcGVydHlFZGl0b3IjcG9wdWxhdGUob3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLkRpc2Vhc2VNb2RlbCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBwb3B1bGF0ZShTb2x2ZXIgc29sdmVyKSB7CisJCXN1cGVyLnBvcHVsYXRlKHNvbHZlcik7CisJCQorCQlmb3IgKGZpbmFsIE1hcC5FbnRyeTxFU3RydWN0dXJhbEZlYXR1cmUsIFRleHQ+IGVudHJ5IDogbWFwLmVudHJ5U2V0KCkpIHsKKwkJCWRvdWJsZSBkVmFsID0gMC4wOworCQkKKwkJCXN3aXRjaCAoZW50cnkuZ2V0S2V5KCkuZ2V0RmVhdHVyZUlEKCkpIHsKKwkJCWNhc2UgUmtQYWNrYWdlLlJVTkdFX0tVVFRBX19SRUxBVElWRV9UT0xFUkFOQ0U6CisJCQkJZFZhbCA9IChuZXcgRG91YmxlKGVudHJ5LmdldFZhbHVlKCkuZ2V0VGV4dCgpKSkuZG91YmxlVmFsdWUoKTsKKwkJCQkoKFJ1bmdlS3V0dGEpIHNvbHZlcikuc2V0UmVsYXRpdmVUb2xlcmFuY2UoZFZhbCk7CisJCQkJYnJlYWs7CisJCQlkZWZhdWx0OgorCQkJCWJyZWFrOworCQkJfSAvLyBzd2l0Y2gKKwkJfSAvLyBmb3IgZWFjaCBNYXAuZW50cnkKKwl9CisKKwlwdWJsaWMgYm9vbGVhbiB2YWxpZGF0ZSgpIHsKKwkJYm9vbGVhbiByZXRWYWx1ZSA9IHRydWU7CisJCXJldHVybiByZXRWYWx1ZTsKKwl9IC8vIHZhbGlkYXRlCisKKwkKKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBkaXNwb3NlKCkgeworCQlzdXBlci5kaXNwb3NlKCk7CisJfQorCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgY2hlY2tTdWJjbGFzcygpIHsKKwkJLy8gRGlzYWJsZSB0aGUgY2hlY2sgdGhhdCBwcmV2ZW50cyBzdWItY2xhc3Npbmcgb2YgU1dUIGNvbXBvbmVudHMKKwl9CisKKwlAT3ZlcnJpZGUKKwlwdWJsaWMgU29sdmVyIGNyZWF0ZUFuZFBvcHVsYXRlU29sdmVyKCkgeworCQlTb2x2ZXIgcmV0VmFsdWUgPSBSa0ZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZVJ1bmdlS3V0dGEoKTsKKwkJcmV0VmFsdWUuc2V0VVJJKFNURU1VUkkuY3JlYXRlVVJJKFJ1bmdlS3V0dGEuVVJJX1RZUEVfU09MVkVSX1NFR01FTlQrIi8iK1NURU1VUkkuZ2VuZXJhdGVVbmlxdWVQYXJ0KCkpKTsKKwkJcG9wdWxhdGUocmV0VmFsdWUpOworCQlyZXR1cm4gcmV0VmFsdWU7CisJfQorfSAvLyBSa1NvbHZlclByb3BlcnR5RWRpdG9yCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkuc29sdmVycy5yay9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9zb2x2ZXJzL3JrL3ByZXNlbnRhdGlvbi9Sa1NvbHZlclByb3BlcnR5RWRpdG9yQWRhcHRlci5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLnNvbHZlcnMucmsvc3JjL29yZy9lY2xpcHNlL3N0ZW0vc29sdmVycy9yay9wcmVzZW50YXRpb24vUmtTb2x2ZXJQcm9wZXJ0eUVkaXRvckFkYXB0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xODIxMDI5Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLnNvbHZlcnMucmsvc3JjL29yZy9lY2xpcHNlL3N0ZW0vc29sdmVycy9yay9wcmVzZW50YXRpb24vUmtTb2x2ZXJQcm9wZXJ0eUVkaXRvckFkYXB0ZXIuamF2YQpAQCAtMCwwICsxLDMzIEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uc29sdmVycy5yay5wcmVzZW50YXRpb247CisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5BZGFwdGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zb2x2ZXIuU29sdmVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zb2x2ZXIuU29sdmVyUHJvcGVydHlDb21wb3NpdGU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNvbHZlci5Tb2x2ZXJQcm9wZXJ0eUVkaXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLk1vZGlmeUxpc3RlbmVyOworCitwdWJsaWMgY2xhc3MgUmtTb2x2ZXJQcm9wZXJ0eUVkaXRvckFkYXB0ZXIgZXh0ZW5kcyBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc29sdmVyLlNvbHZlclByb3BlcnR5RWRpdG9yQWRhcHRlcgorCQlpbXBsZW1lbnRzIEFkYXB0ZXIgeworCisJLyoqCisJICogCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIFNvbHZlclByb3BlcnR5RWRpdG9yIGNyZWF0ZVNvbHZlclByb3BlcnR5RWRpdG9yKAorCQkJU29sdmVyUHJvcGVydHlDb21wb3NpdGUgc29sdmVyUHJvcGVydHlDb21wb3NpdGUsCisJCQlpbnQgc3R5bGUsIE1vZGlmeUxpc3RlbmVyIHByb2plY3RWYWxpZGF0b3IpIHsKKwkJcmV0dXJuIG5ldyBSa1NvbHZlclByb3BlcnR5RWRpdG9yKAorCQkJCXNvbHZlclByb3BlcnR5Q29tcG9zaXRlLCBzdHlsZSwKKwkJCQkoU29sdmVyKSBnZXRUYXJnZXQoKSwgcHJvamVjdFZhbGlkYXRvcik7CisJfSAvLyBjcmVhdGVTb2x2ZXJQcm9wZXJ0eUVkaXRvcgorCit9IC8vIFNvbHZlclByb3BlcnR5RWRpdG9yQWRhcHRlcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLnNvbHZlcnMucmsvc3JjL29yZy9lY2xpcHNlL3N0ZW0vc29sdmVycy9yay9wcmVzZW50YXRpb24vUmtTb2x2ZXJQcm9wZXJ0eUVkaXRvckFkYXB0ZXJGYWN0b3J5LmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkuc29sdmVycy5yay9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9zb2x2ZXJzL3JrL3ByZXNlbnRhdGlvbi9Sa1NvbHZlclByb3BlcnR5RWRpdG9yQWRhcHRlckZhY3RvcnkuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mOTNiNTljCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLnNvbHZlcnMucmsvc3JjL29yZy9lY2xpcHNlL3N0ZW0vc29sdmVycy9yay9wcmVzZW50YXRpb24vUmtTb2x2ZXJQcm9wZXJ0eUVkaXRvckFkYXB0ZXJGYWN0b3J5LmphdmEKQEAgLTAsMCArMSw2MCBAQAorLy8gRGlzZWFzZU1vZGVsUHJvcGVydHlFZGl0b3JBZGFwdGVyRmFjdG9yeS5qYXZhCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uc29sdmVycy5yay5wcmVzZW50YXRpb247CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5BZGFwdGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zb2x2ZXIuU29sdmVyUHJvcGVydHlFZGl0b3JBZGFwdGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zb2x2ZXIuU29sdmVyUHJvcGVydHlFZGl0b3JBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnNvbHZlcnMucmsudXRpbC5Sa0FkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklTdGFydHVwOworCisvKioKKyAqCisgKi8KK3B1YmxpYyBjbGFzcyBSa1NvbHZlclByb3BlcnR5RWRpdG9yQWRhcHRlckZhY3RvcnkgZXh0ZW5kcyBSa0FkYXB0ZXJGYWN0b3J5IAorCWltcGxlbWVudHMgU29sdmVyUHJvcGVydHlFZGl0b3JBZGFwdGVyRmFjdG9yeSwgSVN0YXJ0dXAgeworCisJLyoqCisJICogCisJICovCisJcHVibGljIFJrU29sdmVyUHJvcGVydHlFZGl0b3JBZGFwdGVyRmFjdG9yeSgpIHsKKwkJc3VwZXIoKTsKKwkJU29sdmVyUHJvcGVydHlFZGl0b3JBZGFwdGVyRmFjdG9yeS5JTlNUQU5DRQorCQkJCS5hZGRBZGFwdGVyRmFjdG9yeSh0aGlzKTsKKwl9CisJCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS51aS5JU3RhcnR1cCNlYXJseVN0YXJ0dXAoKQorCSAqLworCXB1YmxpYyB2b2lkIGVhcmx5U3RhcnR1cCgpIHsKKwkJLy8gTm90aGluZyB0byBkbyBoZXJlLiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgYWZ0ZXIgdGhlIGNvbnN0cnVjdG9yIGhhcworCQkvLyBydW4gd2hpY2ggaXMgdGhlIGVudGlyZSBwb2ludCBvZiBlYXJseSBhY3RpdmF0aW9uIHdoaWNoIGNhdXNlcyB0aGUKKwkJLy8gZmFjdG9yeSB0byBiZSBhZGRlZCB0byB0aGUgUHJvcGVydHlTdHJpbmdQcm92aWRlckFkYXB0ZXJGYWN0b3J5LklOU1RBTkNFCisJfQorCisJLyoqCisJICogCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlUnVuZ2VLdXR0YUFkYXB0ZXIoKSB7CisJCXJldHVybiBuZXcgUmtTb2x2ZXJBZGFwdGVyKCk7CisJfQorCisJLyoqCisJICogCisJICovCisJcHVibGljIGJvb2xlYW4gaXNGYWN0b3J5Rm9yVHlwZShPYmplY3QgdHlwZSkgeworCQlyZXR1cm4gdHlwZSA9PSBTb2x2ZXJQcm9wZXJ0eUVkaXRvckFkYXB0ZXIuY2xhc3MKKwkJCQl8fCBzdXBlci5pc0ZhY3RvcnlGb3JUeXBlKHR5cGUpOworCX0KK30gCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkuc29sdmVycy5yay9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9zb2x2ZXJzL3JrL3ByZXNlbnRhdGlvbi9Sa1NvbHZlclByb3BlcnR5U3RyaW5nUHJvdmlkZXJBZGFwdGVyRmFjdG9yeS5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLnNvbHZlcnMucmsvc3JjL29yZy9lY2xpcHNlL3N0ZW0vc29sdmVycy9yay9wcmVzZW50YXRpb24vUmtTb2x2ZXJQcm9wZXJ0eVN0cmluZ1Byb3ZpZGVyQWRhcHRlckZhY3RvcnkuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNWMyOGVkCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLnNvbHZlcnMucmsvc3JjL29yZy9lY2xpcHNlL3N0ZW0vc29sdmVycy9yay9wcmVzZW50YXRpb24vUmtTb2x2ZXJQcm9wZXJ0eVN0cmluZ1Byb3ZpZGVyQWRhcHRlckZhY3RvcnkuamF2YQpAQCAtMCwwICsxLDEwNiBAQAorLy8gU3RhbmRhcmRQcm9wZXJ0eVN0cmluZ1Byb3ZpZGVyQWRhcHRlckZhY3RvcnkuamF2YQorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnNvbHZlcnMucmsucHJlc2VudGF0aW9uOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuQWRhcHRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRVN0cnVjdHVyYWxGZWF0dXJlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtUHJvcGVydHlEZXNjcmlwdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zb2x2ZXIudXRpbC5Tb2x2ZXJBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnNvbHZlcnMucmsuUmtQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udWkuYWRhcHRlcnMucHJvcGVydHlzdHJpbmdzLlByb3BlcnR5U3RyaW5nUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS51aS5hZGFwdGVycy5wcm9wZXJ0eXN0cmluZ3MuUHJvcGVydHlTdHJpbmdQcm92aWRlckFkYXB0ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS51aS5hZGFwdGVycy5wcm9wZXJ0eXN0cmluZ3MuUHJvcGVydHlTdHJpbmdQcm92aWRlckFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udWkuc29sdmVycy5yay5Tb2x2ZXJNZXNzYWdlczsKKworLyoqCisgKiBUaGlzIGNsYXNzIGlzIHVzZWQgdG8gTkxTJ2Qgc3RyaW5ncyBmb3Ige0BsaW5rIERpc2Vhc2VNb2RlbH0gcHJvcGVydGllcy4gCisgKi8KK3B1YmxpYyBjbGFzcyBSa1NvbHZlclByb3BlcnR5U3RyaW5nUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSBleHRlbmRzCisJIFNvbHZlckFkYXB0ZXJGYWN0b3J5IGltcGxlbWVudHMgUHJvcGVydHlTdHJpbmdQcm92aWRlckFkYXB0ZXJGYWN0b3J5IHsKKworCQorCVByb3BlcnR5U3RyaW5nUHJvdmlkZXJBZGFwdGVyIGFkYXB0ZXIgPSBudWxsOworCisJLyoqCisJICogRGVmYXVsdCBDb25zdHJ1Y3RvcgorCSAqLworCXB1YmxpYyBSa1NvbHZlclByb3BlcnR5U3RyaW5nUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSgpIHsKKwkJc3VwZXIoKTsKKwkJUHJvcGVydHlTdHJpbmdQcm92aWRlckFkYXB0ZXJGYWN0b3J5LklOU1RBTkNFLmFkZEFkYXB0ZXJGYWN0b3J5KHRoaXMpOworCX0KKwkKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LmltcGwuQWRhcHRlckZhY3RvcnlJbXBsI2lzRmFjdG9yeUZvclR5cGUoamF2YS5sYW5nLk9iamVjdCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgYm9vbGVhbiBpc0ZhY3RvcnlGb3JUeXBlKE9iamVjdCB0eXBlKSB7CisJCWlmKHR5cGUgPT0gUmtQYWNrYWdlLmVJTlNUQU5DRSkgcmV0dXJuIHRydWU7CisJCXJldHVybiAgc3VwZXIuaXNGYWN0b3J5Rm9yVHlwZSh0eXBlKSB8fCB0eXBlID09IFByb3BlcnR5U3RyaW5nUHJvdmlkZXIuY2xhc3M7CisJfQorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQudXRpbC5TdGFuZGFyZEFkYXB0ZXJGYWN0b3J5I2NyZWF0ZURpc2Vhc2VNb2RlbEFkYXB0ZXIoKQorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZVNvbHZlckFkYXB0ZXIoKSB7CisJCS8vIEhhdmUgd2UgY3JlYXRlZCBvbmUgYmVmb3JlPworCQlpZiAoYWRhcHRlciA9PSBudWxsKSB7CisJCQkvLyBObworCQkJYWRhcHRlciA9IG5ldyBTb2x2ZXJQcm9wZXJ0eVN0cmluZ1Byb3ZpZGVyQWRhcHRlcigpOworCQl9IC8vIGlmIHdlIGRpZG4ndCBjcmVhdGUgb25lIGJlZm9yZQorCQlyZXR1cm4gYWRhcHRlcjsKKwl9IC8vIGNyZWF0ZURpc2Vhc2VNb2RlbEFkYXB0ZXIKKworCS8qKgorCSAqIFRoaXMgY2xhc3MgcmVwcmVzZW50cyAKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGNsYXNzIFNvbHZlclByb3BlcnR5U3RyaW5nUHJvdmlkZXJBZGFwdGVyIGV4dGVuZHMKKwkJCVByb3BlcnR5U3RyaW5nUHJvdmlkZXJBZGFwdGVyIHsKKworCQkvKioKKwkJICogQHBhcmFtIGRlc2NyaXB0b3IKKwkJICogQHJldHVybiB0aGUgTkxTJ2QgbmFtZSBvZiB0aGUgcHJvcGVydHkgdG8gZGlzcGxheSB0byB0aGUgdXNlcgorCQkgKi8KKwkJcHVibGljIFN0cmluZyBnZXRQcm9wZXJ0eU5hbWUoSUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IgZGVzY3JpcHRvcikgewkKKwkJCXJldHVybiBTb2x2ZXJNZXNzYWdlcworCQkJCQkuZ2V0U3RyaW5nKCgoRVN0cnVjdHVyYWxGZWF0dXJlKSBkZXNjcmlwdG9yCisJCQkJCQkJLmdldEZlYXR1cmUobnVsbCkpLmdldE5hbWUoKSk7CisJCX0gLy8gZ2V0UHJvcGVydHlOYW1lCisKKwkJLyoqCisJCSAqIEBwYXJhbSBkZXNjcmlwdG9yCisJCSAqIEByZXR1cm4gdGhlIE5MUydkIHRvb2wgdGlwIHRleHQgdGhhdCBkZXNjcmliZXMgdGhlIHByb3BlcnR5CisJCSAqLworCQlwdWJsaWMgU3RyaW5nIGdldFByb3BlcnR5VG9vbFRpcCgKKwkJCQlJSXRlbVByb3BlcnR5RGVzY3JpcHRvciBkZXNjcmlwdG9yKSB7CisJCQlmaW5hbCBFU3RydWN0dXJhbEZlYXR1cmUgZmVhdHVyZSA9IChFU3RydWN0dXJhbEZlYXR1cmUpIGRlc2NyaXB0b3IKKwkJCQkJLmdldEZlYXR1cmUobnVsbCk7CisJCQlyZXR1cm4gU29sdmVyTWVzc2FnZXMuZ2V0U3RyaW5nKGZlYXR1cmUuZ2V0TmFtZSgpCisJCQkJCSsgVFRfU1VGRklYKTsKKwkJfSAvLyBnZXRQcm9wZXJ0eVRvb2xUaXAKKworCQkvKioKKwkJICogQHBhcmFtIGRlc2NyaXB0b3IKKwkJICogQHJldHVybiB0aGUgTkxTJ2QgdGV4dCB0aGF0IHJlcHJlc2VudHMgdGhlIHVuaXRzIG9mIHRoZQorCQkgKiAgICAgICAgIHByb3BlcnR5CisJCSAqLworCQlwdWJsaWMgU3RyaW5nIGdldFByb3BlcnR5VW5pdHMoCisJCQkJSUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IgZGVzY3JpcHRvcikgeworCQkJZmluYWwgRVN0cnVjdHVyYWxGZWF0dXJlIGZlYXR1cmUgPSAoRVN0cnVjdHVyYWxGZWF0dXJlKSBkZXNjcmlwdG9yCisJCQkJCS5nZXRGZWF0dXJlKG51bGwpOworCQkJcmV0dXJuIFNvbHZlck1lc3NhZ2VzLmdldFN0cmluZyhmZWF0dXJlLmdldE5hbWUoKQorCQkJCQkrIFVOSVRfU1VGRklYKTsKKwkJfSAvLyBnZXRQcm9wZXJ0eVVuaXRzCisKKwl9IC8vIFN0YW5kYXJkUHJvcGVydHlTdHJpbmdQcm92aWRlckFkYXB0ZXIKK30gLy8gU3RhbmRhcmRQcm9wZXJ0eVN0cmluZ1Byb3ZpZGVyQWRhcHRlckZhY3RvcnkKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5zb2x2ZXJzLnJrL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3NvbHZlcnMvcmsvQWN0aXZhdG9yLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkuc29sdmVycy5yay9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9zb2x2ZXJzL3JrL0FjdGl2YXRvci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgyMmVjMjUKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkuc29sdmVycy5yay9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9zb2x2ZXJzL3JrL0FjdGl2YXRvci5qYXZhCkBAIC0wLDAgKzEsMTA2IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0udWkuc29sdmVycy5yazsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNiAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TdGF0dXM7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5zb2x2ZXJzLnJrLnByZXNlbnRhdGlvbi5Sa0VkaXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnNvbHZlcnMucmsucHJlc2VudGF0aW9uLlJrU29sdmVyUHJvcGVydHlTdHJpbmdQcm92aWRlckFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLnBsdWdpbi5BYnN0cmFjdFVJUGx1Z2luOworaW1wb3J0IG9yZy5vc2dpLmZyYW1ld29yay5CdW5kbGVDb250ZXh0OworCisKKy8qKgorICogVGhlIG1haW4gcGx1Z2luIGNsYXNzIHRvIGJlIHVzZWQgaW4gdGhlIGRlc2t0b3AuCisgKi8KK3B1YmxpYyBjbGFzcyBBY3RpdmF0b3IgZXh0ZW5kcyBBYnN0cmFjdFVJUGx1Z2luIHsKKworCS8qKgorCSAqIFRoZSBzeW1ib2xpYyBpZGVudGlmaWVyIGZvciB0aGlzIHBsdWctaW4KKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBQTFVHSU5fSUQgPSAib3JnLmVjbGlwc2Uuc3RlbS51aS5zb2x2ZXIucmsiOyAvLyROT04tTkxTLTEkCisKKwkvLyBUaGUgc2hhcmVkIGluc3RhbmNlLgorCXByaXZhdGUgc3RhdGljIEFjdGl2YXRvciBwbHVnaW47CisKKwkvKioKKwkgKiBUaGUgY29uc3RydWN0b3IuCisJICovCisJcHVibGljIEFjdGl2YXRvcigpIHsKKwkJc3VwZXIoKTsKKwkJcGx1Z2luID0gdGhpczsKKwl9CisKKwkvKioKKwkgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgdXBvbiBwbHVnLWluIGFjdGl2YXRpb24KKwkgKiAKKwkgKiBAcGFyYW0gY29udGV4dAorCSAqIEB0aHJvd3MgRXhjZXB0aW9uCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgc3RhcnQoQnVuZGxlQ29udGV4dCBjb250ZXh0KSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJc3VwZXIuc3RhcnQoY29udGV4dCk7CisJCW5ldyBSa1NvbHZlclByb3BlcnR5U3RyaW5nUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSgpOworCQluZXcgUmtFZGl0b3IoKTsKKwl9IC8vIHN0YXJ0CisKKwkvKioKKwkgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgd2hlbiB0aGUgcGx1Zy1pbiBpcyBzdG9wcGVkCisJICogCisJICogQHBhcmFtIGNvbnRleHQKKwkgKiBAdGhyb3dzIEV4Y2VwdGlvbgorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIHN0b3AoQnVuZGxlQ29udGV4dCBjb250ZXh0KSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJc3VwZXIuc3RvcChjb250ZXh0KTsKKwkJcGx1Z2luID0gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBzaGFyZWQgaW5zdGFuY2UuCisJICogCisJICogQHJldHVybiB0aGUgc2hhcmVkIGluc3RhbmNlLgorCSAqLworCXB1YmxpYyBzdGF0aWMgQWN0aXZhdG9yIGdldERlZmF1bHQoKSB7CisJCXJldHVybiBwbHVnaW47CisJfQorCisJCisJLyoqCisJICogTG9nIGFuIGVycm9yIHRvIHRoZSBJTG9nIGZvciB0aGlzIHBsdWdpbgorCSAqIAorCSAqIEBwYXJhbSBtZXNzYWdlCisJICogICAgICAgICAgICB0aGUgbG9jYWxpemVkIGVycm9yIG1lc3NhZ2UgdGV4dAorCSAqIEBwYXJhbSBleGNlcHRpb24KKwkgKiAgICAgICAgICAgIHRoZSBhc3NvY2lhdGVkIGV4Y2VwdGlvbiwgb3IgbnVsbAorCSAqLworCXB1YmxpYyBzdGF0aWMgdm9pZCBsb2dFcnJvcihTdHJpbmcgbWVzc2FnZSwgVGhyb3dhYmxlIGV4Y2VwdGlvbikgeworCQlwbHVnaW4uZ2V0TG9nKCkubG9nKAorCQkJCW5ldyBTdGF0dXMoSVN0YXR1cy5FUlJPUiwgcGx1Z2luLmdldEJ1bmRsZSgpLmdldFN5bWJvbGljTmFtZSgpLAorCQkJCQkJMCwgbWVzc2FnZSwgZXhjZXB0aW9uKSk7CisJfSAvLyBsb2dFcnJvcgorCisJLyoqCisJICogTG9nIGluZm9ybWF0aW9uIHRvIHRoZSBJTG9nIGZvciB0aGlzIHBsdWdpbgorCSAqIAorCSAqIEBwYXJhbSBtZXNzYWdlCisJICogICAgICAgICAgICB0aGUgbG9jYWxpemVkIGluZm9ybWF0aW9uIG1lc3NhZ2UgdGV4dAorCSAqIEBwYXJhbSBleGNlcHRpb24KKwkgKiAgICAgICAgICAgIHRoZSBhc3NvY2lhdGVkIGV4Y2VwdGlvbiwgb3IgbnVsbAorCSAqLworCXB1YmxpYyBzdGF0aWMgdm9pZCBsb2dJbmZvcm1hdGlvbihTdHJpbmcgbWVzc2FnZSwgVGhyb3dhYmxlIGV4Y2VwdGlvbikgeworCQlwbHVnaW4uZ2V0TG9nKCkubG9nKAorCQkJCW5ldyBTdGF0dXMoSVN0YXR1cy5JTkZPLCBwbHVnaW4uZ2V0QnVuZGxlKCkuZ2V0U3ltYm9saWNOYW1lKCksCisJCQkJCQkwLCBtZXNzYWdlLCBleGNlcHRpb24pKTsKKwl9IC8vIGxvZ0luZm9ybWF0aW9uCisKK30gLy8gQWN0aXZhdG9yCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkuc29sdmVycy5yay9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9zb2x2ZXJzL3JrL1NvbHZlck1lc3NhZ2VzLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkuc29sdmVycy5yay9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9zb2x2ZXJzL3JrL1NvbHZlck1lc3NhZ2VzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTI1OWY2NQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5zb2x2ZXJzLnJrL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3NvbHZlcnMvcmsvU29sdmVyTWVzc2FnZXMuamF2YQpAQCAtMCwwICsxLDQ2IEBACisvLyBEaXNlYXNlV2l6YXJkTWVzc2FnZXMuamF2YQorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnVpLnNvbHZlcnMucms7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDkgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgamF2YS51dGlsLk1pc3NpbmdSZXNvdXJjZUV4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLnV0aWwuUmVzb3VyY2VCdW5kbGU7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuQ29uc3RhbnRzOworCisvKioKKyAqIFRoaXMgY2xhc3MgaXMgdGhlIFJlc291cmNlIEJ1bmRsZSBmb3IgdGhpcyBwYWNrYWdlLgorICovCitwdWJsaWMgY2xhc3MgU29sdmVyTWVzc2FnZXMgeworCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBCVU5ETEVfTkFNRSA9IENvbnN0YW50cy5JRF9ST09UCisJCQkrICIudWkuc29sdmVycy5yay5tZXNzYWdlcyI7IC8vJE5PTi1OTFMtMSQKKworCXByaXZhdGUgc3RhdGljIGZpbmFsIFJlc291cmNlQnVuZGxlIFJFU09VUkNFX0JVTkRMRSA9IFJlc291cmNlQnVuZGxlCisJCQkuZ2V0QnVuZGxlKEJVTkRMRV9OQU1FKTsKKworCXByaXZhdGUgU29sdmVyTWVzc2FnZXMoKSB7CisJCS8vIGVtcHR5CisJfQorCisJLyoqCisJICogQHBhcmFtIGtleQorCSAqICAgICAgICAgICAgdGhlIGtleSBmb3IgdGhlIG1lc3NhZ2UKKwkgKiBAcmV0dXJuIHRoZSBzdHJpbmcgdGhhdCBtYXRjaGVzIHRoZSBrZXkKKwkgKi8KKwlwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRTdHJpbmcoZmluYWwgU3RyaW5nIGtleSkgeworCQl0cnkgeworCQkJcmV0dXJuIFJFU09VUkNFX0JVTkRMRS5nZXRTdHJpbmcoa2V5KTsKKwkJfSBjYXRjaCAoZmluYWwgTWlzc2luZ1Jlc291cmNlRXhjZXB0aW9uIGUpIHsKKwkJCXJldHVybiAnIScgKyBrZXkgKyAnISc7CisJCX0KKwl9IC8vIGdldFN0cmluZworfSAvLyBTb2x2ZXJNZXNzYWdlcwpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLnNvbHZlcnMucmsvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvc29sdmVycy9yay9tZXNzYWdlcy5wcm9wZXJ0aWVzIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLnNvbHZlcnMucmsvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvc29sdmVycy9yay9tZXNzYWdlcy5wcm9wZXJ0aWVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBmNDY3ZjkKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkuc29sdmVycy5yay9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9zb2x2ZXJzL3JrL21lc3NhZ2VzLnByb3BlcnRpZXMKQEAgLTAsMCArMSwxNCBAQAorIy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorIyAqIENvcHlyaWdodCAoYykgMjAwOSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4NCisjICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscw0KKyMgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjANCisjICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQNCisjICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwNCisjICoNCisjICogQ29udHJpYnV0b3JzOg0KKyMgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uDQorIyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KKw0KK3JlbGF0aXZlVG9sZXJhbmNlPVJlbGF0aXZlIFRvbGVyYW5jZQ0KK3JlbGF0aXZlVG9sZXJhbmNlVU5JVD0NCityZWxhdGl2ZVRvbGVyYW5jZVRUPVNwZWNpZnkgdGhlIHJlbGF0aXZlIHRvbGVyYW5jZSBmb3IgdGhlIFJ1bmdlIEt1dHRhIHNvbHZlcg0KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5zb2x2ZXJzLnJrL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3NvbHZlcnMvcmsvbWVzc2FnZXNfZGUucHJvcGVydGllcyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5zb2x2ZXJzLnJrL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3NvbHZlcnMvcmsvbWVzc2FnZXNfZGUucHJvcGVydGllcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYWFkMTMzCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLnNvbHZlcnMucmsvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvc29sdmVycy9yay9tZXNzYWdlc19kZS5wcm9wZXJ0aWVzCkBAIC0wLDAgKzEsMTQgQEAKKyMvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIyAqIENvcHlyaWdodCAoYykgMjAwOSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyMgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisjICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisjICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyMgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorIyAqCisjICogQ29udHJpYnV0b3JzOgorIyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworcmVsYXRpdmVUb2xlcmFuY2U9UmVsYXRpdmUgVG9sZXJhbnoKK3JlbGF0aXZlVG9sZXJhbmNlVU5JVD0KK3JlbGF0aXZlVG9sZXJhbmNlVFQ9UmVsYXRpdmUgVG9sZXJhbnogZlx1MDBmY3IgZGVuIFJ1bmdlLUt1dHRhLUxcdTAwZjZzZXIgYW5nZWJlbgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLnNvbHZlcnMucmsvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvc29sdmVycy9yay9tZXNzYWdlc19rci5wcm9wZXJ0aWVzIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLnNvbHZlcnMucmsvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvc29sdmVycy9yay9tZXNzYWdlc19rci5wcm9wZXJ0aWVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMwZDE3OTIKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkuc29sdmVycy5yay9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9zb2x2ZXJzL3JrL21lc3NhZ2VzX2tyLnByb3BlcnRpZXMKQEAgLTAsMCArMSwxNCBAQAorIy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjICogQ29weXJpZ2h0IChjKSAyMDA5IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorIyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyMgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyMgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorIyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisjICoKKyMgKiBDb250cmlidXRvcnM6CisjICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorIyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCityZWxhdGl2ZVRvbGVyYW5jZT1cdWMwYzFcdWIzMDBcdWM4MDEgXHViMGI0XHVjMTMxCityZWxhdGl2ZVRvbGVyYW5jZVVOSVQ9CityZWxhdGl2ZVRvbGVyYW5jZVRUPVJ1bmdlIEt1dHRhIFx1ZDU3NFx1YWNiMFx1YzBhY1x1YzVkMCBcdWIzMDBcdWQ1NWMgXHVjMGMxXHViMzAwXHVjODAxXHVjNzc4IFx1YjBiNFx1YzEzMSBcdWM5YzBcdWM4MTUKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5zb2x2ZXJzLnJrL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3NvbHZlcnMvcmsvbWVzc2FnZXNfemgucHJvcGVydGllcyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5zb2x2ZXJzLnJrL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3NvbHZlcnMvcmsvbWVzc2FnZXNfemgucHJvcGVydGllcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hY2JhZWY2Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLnNvbHZlcnMucmsvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvc29sdmVycy9yay9tZXNzYWdlc196aC5wcm9wZXJ0aWVzCkBAIC0wLDAgKzEsMTQgQEAKKyMvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIyAqIENvcHlyaWdodCAoYykgMjAwOSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyMgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisjICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisjICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyMgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorIyAqCisjICogQ29udHJpYnV0b3JzOgorIyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworcmVsYXRpdmVUb2xlcmFuY2U9XHU3NmY4XHU1YmY5XHU1MTZjXHU1ZGVlCityZWxhdGl2ZVRvbGVyYW5jZVVOSVQ9CityZWxhdGl2ZVRvbGVyYW5jZVRUPVx1NGUzYVx1OWY5OVx1NjgzY1x1NWU5M1x1NTg1NFx1NmM0Mlx1ODllM1x1NjMwN1x1NWI5YVx1NzZmOFx1NWJmOVx1NTE2Y1x1NWRlZQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLnRyYW5zcG9ydC8uY2xhc3NwYXRoIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLnRyYW5zcG9ydC8uY2xhc3NwYXRoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEyMWU1MjcKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkudHJhbnNwb3J0Ly5jbGFzc3BhdGgKQEAgLTAsMCArMSw3IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPGNsYXNzcGF0aD4KKwk8Y2xhc3NwYXRoZW50cnkga2luZD0ic3JjIiBwYXRoPSJzcmMiLz4KKwk8Y2xhc3NwYXRoZW50cnkga2luZD0iY29uIiBwYXRoPSJvcmcuZWNsaXBzZS5qZHQubGF1bmNoaW5nLkpSRV9DT05UQUlORVIvb3JnLmVjbGlwc2UuamR0LmludGVybmFsLmRlYnVnLnVpLmxhdW5jaGVyLlN0YW5kYXJkVk1UeXBlL0phdmFTRS0xLjYiLz4KKwk8Y2xhc3NwYXRoZW50cnkga2luZD0iY29uIiBwYXRoPSJvcmcuZWNsaXBzZS5wZGUuY29yZS5yZXF1aXJlZFBsdWdpbnMiLz4KKwk8Y2xhc3NwYXRoZW50cnkga2luZD0ib3V0cHV0IiBwYXRoPSJiaW4iLz4KKzwvY2xhc3NwYXRoPgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLnRyYW5zcG9ydC8ucHJvamVjdCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS50cmFuc3BvcnQvLnByb2plY3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2ZkYzcyNAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS50cmFuc3BvcnQvLnByb2plY3QKQEAgLTAsMCArMSwyOCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxwcm9qZWN0RGVzY3JpcHRpb24+CisJPG5hbWU+b3JnLmVjbGlwc2Uuc3RlbS51aS50cmFuc3BvcnQ8L25hbWU+CisJPGNvbW1lbnQ+PC9jb21tZW50PgorCTxwcm9qZWN0cz4KKwk8L3Byb2plY3RzPgorCTxidWlsZFNwZWM+CisJCTxidWlsZENvbW1hbmQ+CisJCQk8bmFtZT5vcmcuZWNsaXBzZS5qZHQuY29yZS5qYXZhYnVpbGRlcjwvbmFtZT4KKwkJCTxhcmd1bWVudHM+CisJCQk8L2FyZ3VtZW50cz4KKwkJPC9idWlsZENvbW1hbmQ+CisJCTxidWlsZENvbW1hbmQ+CisJCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuTWFuaWZlc3RCdWlsZGVyPC9uYW1lPgorCQkJPGFyZ3VtZW50cz4KKwkJCTwvYXJndW1lbnRzPgorCQk8L2J1aWxkQ29tbWFuZD4KKwkJPGJ1aWxkQ29tbWFuZD4KKwkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5TY2hlbWFCdWlsZGVyPC9uYW1lPgorCQkJPGFyZ3VtZW50cz4KKwkJCTwvYXJndW1lbnRzPgorCQk8L2J1aWxkQ29tbWFuZD4KKwk8L2J1aWxkU3BlYz4KKwk8bmF0dXJlcz4KKwkJPG5hdHVyZT5vcmcuZWNsaXBzZS5qZHQuY29yZS5qYXZhbmF0dXJlPC9uYXR1cmU+CisJCTxuYXR1cmU+b3JnLmVjbGlwc2UucGRlLlBsdWdpbk5hdHVyZTwvbmF0dXJlPgorCTwvbmF0dXJlcz4KKzwvcHJvamVjdERlc2NyaXB0aW9uPgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLnRyYW5zcG9ydC9NRVRBLUlORi9NQU5JRkVTVC5NRiBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS50cmFuc3BvcnQvTUVUQS1JTkYvTUFOSUZFU1QuTUYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDY0MTc3NgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS50cmFuc3BvcnQvTUVUQS1JTkYvTUFOSUZFU1QuTUYKQEAgLTAsMCArMSwyMiBAQAorTWFuaWZlc3QtVmVyc2lvbjogMS4wCitCdW5kbGUtTWFuaWZlc3RWZXJzaW9uOiAyCitCdW5kbGUtTmFtZTogJXBsdWdpbk5hbWUKK0J1bmRsZS1TeW1ib2xpY05hbWU6IG9yZy5lY2xpcHNlLnN0ZW0udWkudHJhbnNwb3J0O3NpbmdsZXRvbjo9dHJ1ZQorQnVuZGxlLVZlcnNpb246IDEuMi4xCitCdW5kbGUtQ2xhc3NQYXRoOiAuCitCdW5kbGUtQWN0aXZhdG9yOiBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLnRyYW5zcG9ydC5wcmVzZW50YXRpb24uVHJhbnNwb3J0RWRpdG9yUGx1Z2luJEltcGxlbWVudGF0aW9uCitCdW5kbGUtVmVuZG9yOiAlcHJvdmlkZXJOYW1lCitCdW5kbGUtTG9jYWxpemF0aW9uOiBwbHVnaW4KK0J1bmRsZS1SZXF1aXJlZEV4ZWN1dGlvbkVudmlyb25tZW50OiBKMlNFLTEuNQorRXhwb3J0LVBhY2thZ2U6IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMudHJhbnNwb3J0LnByZXNlbnRhdGlvbgorUmVxdWlyZS1CdW5kbGU6IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZSwKKyBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlczt2aXNpYmlsaXR5Oj1yZWV4cG9ydCwKKyBvcmcuZWNsaXBzZS5zdGVtLnRyYW5zcG9ydDt2aXNpYmlsaXR5Oj1yZWV4cG9ydCwKKyBvcmcuZWNsaXBzZS5lbWYuZWNvcmUueG1pO3Zpc2liaWxpdHk6PXJlZXhwb3J0LAorIG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpO3Zpc2liaWxpdHk6PXJlZXhwb3J0LAorIG9yZy5lY2xpcHNlLnVpLmlkZTt2aXNpYmlsaXR5Oj1yZWV4cG9ydCwKKyBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zO3Zpc2liaWxpdHk6PXJlZXhwb3J0LAorIG9yZy5lY2xpcHNlLnN0ZW0uY29yZTt2aXNpYmlsaXR5Oj1yZWV4cG9ydCwKKyBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuZWRpdDt2aXNpYmlsaXR5Oj1yZWV4cG9ydCwKKyBvcmcuZWNsaXBzZS5zdGVtLnVpCitCdW5kbGUtQWN0aXZhdGlvblBvbGljeTogbGF6eQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLnRyYW5zcG9ydC9idWlsZC5wcm9wZXJ0aWVzIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLnRyYW5zcG9ydC9idWlsZC5wcm9wZXJ0aWVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEwYzg3YTAKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkudHJhbnNwb3J0L2J1aWxkLnByb3BlcnRpZXMKQEAgLTAsMCArMSwxNCBAQAorCisjIDxjb3B5cmlnaHQ+CisjIDwvY29weXJpZ2h0PgorIworIyAkSWQkCisKK2Jpbi5pbmNsdWRlcyA9IC4sXAorICAgICAgICAgICAgICAgaWNvbnMvLFwKKyAgICAgICAgICAgICAgIE1FVEEtSU5GLyxcCisgICAgICAgICAgICAgICBwbHVnaW4ueG1sLFwKKyAgICAgICAgICAgICAgIHBsdWdpbi5wcm9wZXJ0aWVzCitqYXJzLmNvbXBpbGUub3JkZXIgPSAuCitzb3VyY2UuLiA9IHNyYy8KK291dHB1dC4uID0gYmluCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkudHJhbnNwb3J0L2ljb25zL2Z1bGwvb2JqMTYvVHJhbnNwb3J0TW9kZWxGaWxlLmdpZiBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS50cmFuc3BvcnQvaWNvbnMvZnVsbC9vYmoxNi9UcmFuc3BvcnRNb2RlbEZpbGUuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUzZWI3ZDQKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkudHJhbnNwb3J0L2ljb25zL2Z1bGwvb2JqMTYvVHJhbnNwb3J0TW9kZWxGaWxlLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkudHJhbnNwb3J0L3BsdWdpbi5wcm9wZXJ0aWVzIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLnRyYW5zcG9ydC9wbHVnaW4ucHJvcGVydGllcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MTk3YzcxCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLnRyYW5zcG9ydC9wbHVnaW4ucHJvcGVydGllcwpAQCAtMCwwICsxLDQ3IEBACisKKyMgPGNvcHlyaWdodD4KKyMgPC9jb3B5cmlnaHQ+CisjCisjICRJZCQKKworcGx1Z2luTmFtZSA9IFRyYW5zcG9ydCBFZGl0b3IKK3Byb3ZpZGVyTmFtZSA9IHd3dy5leGFtcGxlLm9yZworCitfVUlfVHJhbnNwb3J0RWRpdG9yX21lbnUgPSAmVHJhbnNwb3J0IEVkaXRvcgorCitfVUlfQ3JlYXRlQ2hpbGRfbWVudV9pdGVtID0gJk5ldyBDaGlsZAorX1VJX0NyZWF0ZVNpYmxpbmdfbWVudV9pdGVtID0gTiZldyBTaWJsaW5nCisKK19VSV9TaG93UHJvcGVydGllc1ZpZXdfbWVudV9pdGVtID0gU2hvdyAmUHJvcGVydGllcyBWaWV3CitfVUlfUmVmcmVzaFZpZXdlcl9tZW51X2l0ZW0gPSAmUmVmcmVzaAorCitfVUlfU2VsZWN0aW9uUGFnZV9sYWJlbCA9IFNlbGVjdGlvbgorCitfVUlfTm9PYmplY3RTZWxlY3RlZCA9IFNlbGVjdGVkIE5vdGhpbmcKK19VSV9TaW5nbGVPYmplY3RTZWxlY3RlZCA9IFNlbGVjdGVkIE9iamVjdDogezB9CitfVUlfTXVsdGlPYmplY3RTZWxlY3RlZCA9IFNlbGVjdGVkIHswfSBPYmplY3RzCisKK19VSV9PcGVuRWRpdG9yRXJyb3JfbGFiZWwgPSBPcGVuIEVkaXRvcgorCitfVUlfV2l6YXJkX2NhdGVnb3J5ID0gRXhhbXBsZSBFTUYgTW9kZWwgQ3JlYXRpb24gV2l6YXJkcworCitfVUlfQ3JlYXRlTW9kZWxFcnJvcl9tZXNzYWdlID0gUHJvYmxlbXMgZW5jb3VudGVyZWQgaW4gZmlsZSAiezB9IgorCitfVUlfVHJhbnNwb3J0RWRpdG9yX2xhYmVsID0gVHJhbnNwb3J0IE1vZGVsIEVkaXRvcgorCitfVUlfVHJhbnNwb3J0RWRpdG9yRmlsZW5hbWVEZWZhdWx0QmFzZSA9IE15CitfVUlfVHJhbnNwb3J0RWRpdG9yRmlsZW5hbWVFeHRlbnNpb25zID0gdHJhbnNwb3J0CisKK19VSV9XaXphcmRfbGFiZWwgPSBOZXcKKworX1dBUk5fRmlsZW5hbWVFeHRlbnNpb24gPSBUaGUgZmlsZSBuYW1lIG11c3QgZW5kIGluICcnLnswfScnCitfV0FSTl9GaWxlbmFtZUV4dGVuc2lvbnMgPSBUaGUgZmlsZSBuYW1lIG11c3QgaGF2ZSBvbmUgb2YgdGhlIGZvbGxvd2luZyBleHRlbnNpb25zOiB7MH0KKworX1VJX01vZGVsT2JqZWN0ID0gJk1vZGVsIE9iamVjdAorX1VJX1hNTEVuY29kaW5nID0gJlhNTCBFbmNvZGluZworX1VJX1hNTEVuY29kaW5nQ2hvaWNlcyA9IFVURi04IEFTQ0lJIFVURi0xNiBVVEYtMTZCRSBVVEYtMTZMRSBJU08tODg1OS0xCitfVUlfV2l6YXJkX2luaXRpYWxfb2JqZWN0X2Rlc2NyaXB0aW9uID0gU2VsZWN0IGEgbW9kZWwgb2JqZWN0IHRvIGNyZWF0ZQorCitfVUlfRmlsZUNvbmZsaWN0X2xhYmVsID0gRmlsZSBDb25mbGljdAorX1dBUk5fRmlsZUNvbmZsaWN0ID0gVGhlcmUgYXJlIHVuc2F2ZWQgY2hhbmdlcyB0aGF0IGNvbmZsaWN0IHdpdGggY2hhbmdlcyBtYWRlIG91dHNpZGUgdGhlIGVkaXRvci4gIERvIHlvdSB3aXNoIHRvIGRpc2NhcmQgdGhpcyBlZGl0b3IncyBjaGFuZ2VzPworCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkudHJhbnNwb3J0L3BsdWdpbi54bWwgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkudHJhbnNwb3J0L3BsdWdpbi54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjA3MzY5OAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS50cmFuc3BvcnQvcGx1Z2luLnhtbApAQCAtMCwwICsxLDI0IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPD9lY2xpcHNlIHZlcnNpb249IjMuMCI/PgorCis8IS0tCisgPGNvcHlyaWdodD4KKyA8L2NvcHlyaWdodD4KKworICRJZCQKKy0tPgorCis8cGx1Z2luPgorCisgICA8ZXh0ZW5zaW9uIHBvaW50PSJvcmcuZWNsaXBzZS51aS5lZGl0b3JzIj4KKyAgICAgIDxlZGl0b3IKKyAgICAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLnRyYW5zcG9ydC5wcmVzZW50YXRpb24uVHJhbnNwb3J0RWRpdG9ySUQiCisgICAgICAgICAgICBuYW1lPSIlX1VJX1RyYW5zcG9ydEVkaXRvcl9sYWJlbCIKKyAgICAgICAgICAgIGljb249Imljb25zL2Z1bGwvb2JqMTYvVHJhbnNwb3J0TW9kZWxGaWxlLmdpZiIKKyAgICAgICAgICAgIGV4dGVuc2lvbnM9InRyYW5zcG9ydCIKKyAgICAgICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLnRyYW5zcG9ydC5wcmVzZW50YXRpb24uVHJhbnNwb3J0RWRpdG9yIgorICAgICAgICAgICAgY29udHJpYnV0b3JDbGFzcz0ib3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy50cmFuc3BvcnQucHJlc2VudGF0aW9uLlRyYW5zcG9ydEFjdGlvbkJhckNvbnRyaWJ1dG9yIj4KKyAgICAgIDwvZWRpdG9yPgorICAgPC9leHRlbnNpb24+CisKKzwvcGx1Z2luPgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLnRyYW5zcG9ydC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy90cmFuc3BvcnQvYWRhcHRlcnMvVHJhbnNwb3J0TmV3TW9kaWZpZXJQYWdlQWRhcHRlckZhY3RvcnkuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS50cmFuc3BvcnQvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvdHJhbnNwb3J0L2FkYXB0ZXJzL1RyYW5zcG9ydE5ld01vZGlmaWVyUGFnZUFkYXB0ZXJGYWN0b3J5LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2ExZTkyOAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS50cmFuc3BvcnQvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvdHJhbnNwb3J0L2FkYXB0ZXJzL1RyYW5zcG9ydE5ld01vZGlmaWVyUGFnZUFkYXB0ZXJGYWN0b3J5LmphdmEKQEAgLTAsMCArMSw5NCBAQAorLy8gTGFiZWxzTmV3TW9kaWZpZXJQYWdlQWRhcHRlckZhY3RvcnkuamF2YQorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLnRyYW5zcG9ydC5hZGFwdGVyczsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAxMSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5BZGFwdGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FU3RydWN0dXJhbEZlYXR1cmU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5JZGVudGlmaWFibGU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5lZGdlcy5FZGdlc1BhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5lZGdlcy51dGlsLkVkZ2VzQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuTGFiZWxzUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy51dGlsLkxhYmVsc0FkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMudHJhbnNwb3J0LlRyYW5zcG9ydFBhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy50cmFuc3BvcnQudXRpbC5UcmFuc3BvcnRBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnVpLmFkYXB0ZXJzLm5ld21vZGlmaWVycGFnZS5HcmFwaE5ld01vZGlmaWVyUGFnZUFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udWkuYWRhcHRlcnMubmV3bW9kaWZpZXJwYWdlLkdyYXBoTmV3TW9kaWZpZXJQYWdlQWRhcHRlckZhY3RvcnkuU3RhdGljTGFiZWxOZXdNb2RpZmllclBhZ2VBZGFwdGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udWkuYWRhcHRlcnMubmV3bW9kaWZpZXJwYWdlLk5ld01vZGlmaWVyUGFnZUFkYXB0ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS51aS5hZGFwdGVycy5uZXdtb2RpZmllcnBhZ2UuTmV3TW9kaWZpZXJQYWdlQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS51aS53aXphcmRzLk5ld01vZGlmaWVyUGFnZTsKKworLyoqCisgKiBUaGlzIGNsYXNzIGlzIGFuIHtAbGluayBOZXdNb2RpZmllclBhZ2VBZGFwdGVyRmFjdG9yeX0gdGhhdCBhZGFwdHMgbWVtYmVycyBvZgorICogdGhlIExhYmVsIG1vZGVsIHRvIHtAbGluayBOZXdNb2RpZmllclBhZ2V9cy4KKyAqLworcHVibGljIGNsYXNzIFRyYW5zcG9ydE5ld01vZGlmaWVyUGFnZUFkYXB0ZXJGYWN0b3J5IGV4dGVuZHMgVHJhbnNwb3J0QWRhcHRlckZhY3RvcnkKKwkJaW1wbGVtZW50cyBOZXdNb2RpZmllclBhZ2VBZGFwdGVyRmFjdG9yeQorCQl7CisKKwkvKioKKwkgKiBEZWZhdWx0IGNvbnN0cnVjdG9yCisJICovCisJcHVibGljIFRyYW5zcG9ydE5ld01vZGlmaWVyUGFnZUFkYXB0ZXJGYWN0b3J5KCkgeworCQlzdXBlcigpOworCQlOZXdNb2RpZmllclBhZ2VBZGFwdGVyRmFjdG9yeS5JTlNUQU5DRS5hZGRBZGFwdGVyRmFjdG9yeSh0aGlzKTsKKwl9CisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC51dGlsLkdyYXBoQWRhcHRlckZhY3RvcnkjaXNGYWN0b3J5Rm9yVHlwZShqYXZhLmxhbmcuT2JqZWN0KQorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBib29sZWFuIGlzRmFjdG9yeUZvclR5cGUoT2JqZWN0IHR5cGUpIHsKKwkJcmV0dXJuIHR5cGUgPT0gTmV3TW9kaWZpZXJQYWdlQWRhcHRlci5jbGFzcworCQkJCXx8IHN1cGVyLmlzRmFjdG9yeUZvclR5cGUodHlwZSk7CisJfQorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy51dGlsLkxhYmVsc0FkYXB0ZXJGYWN0b3J5I2NyZWF0ZVBoeXNpY2FsUmVsYXRpb25zaGlwTGFiZWxBZGFwdGVyKCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVQaXBlVHJhbnNwb3J0RWRnZUxhYmVsQWRhcHRlcigpIHsKKwkJcmV0dXJuIG5ldyBQaXBlVHJhbnNwb3J0RWRnZUxhYmVsTmV3TW9kaWZpZXJQYWdlQWRhcHRlcigpOworCX0KKworCS8qKgorCSAqIFRoaXMgY2xhc3MgaXMgZXh0ZW5kZWQgYnkgY2xhc3NlcyB0aGF0IGFkYXB0CisJICoge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLlBoeXNpY2FsUmVsYXRpb25zaGlwTGFiZWx9cyB0byB7QGxpbmsgTmV3TW9kaWZpZXJQYWdlfXMuCisJICovCisJcHVibGljIGNsYXNzIFBpcGVUcmFuc3BvcnRFZGdlTGFiZWxOZXdNb2RpZmllclBhZ2VBZGFwdGVyIGV4dGVuZHMKKwkJCVN0YXRpY0xhYmVsTmV3TW9kaWZpZXJQYWdlQWRhcHRlciB7CisKKwkJLyoqCisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS51aS5hZGFwdGVycy5uZXdtb2RpZmllcnBhZ2UuR3JhcGhOZXdNb2RpZmllclBhZ2VBZGFwdGVyRmFjdG9yeS5TdGF0aWNMYWJlbE5ld01vZGlmaWVyUGFnZUFkYXB0ZXIjY3JlYXRlTmV3TW9kaWZpZXJQYWdlKCkKKwkJICovCisJCUBPdmVycmlkZQorCQlwdWJsaWMgTmV3TW9kaWZpZXJQYWdlIGNyZWF0ZU5ld01vZGlmaWVyUGFnZSgpIHsKKwkJCXJldHVybiBuZXcgR3JhcGhOZXdNb2RpZmllclBhZ2VBZGFwdGVyRmFjdG9yeS5TdGF0aWNMYWJlbE5ld01vZGlmaWVyUGFnZSgKKwkJCQkJKElkZW50aWZpYWJsZSkgZ2V0VGFyZ2V0KCkpIHsKKwkJCQlAT3ZlcnJpZGUKKwkJCQlwcm90ZWN0ZWQgYm9vbGVhbiBpc1VzZXJTcGVjaWZpZWRQcm9wZXJ0eSgKKwkJCQkJCUVTdHJ1Y3R1cmFsRmVhdHVyZSBmZWF0dXJlKSB7CisJCQkJCWJvb2xlYW4gcmV0VmFsdWUgPSBzdXBlci5pc1VzZXJTcGVjaWZpZWRQcm9wZXJ0eShmZWF0dXJlKTsKKworCQkJCQlyZXRWYWx1ZSA9IHJldFZhbHVlCisJCQkJCQkJJiYgKGZlYXR1cmUKKwkJCQkJCQkJCS5lcXVhbHMoVHJhbnNwb3J0UGFja2FnZS5MaXRlcmFscy5QSVBFX1RSQU5TUE9SVF9FREdFX0xBQkVMX1ZBTFVFX19NQVhfRkxPVykgfHwKKwkJCQkJCQkJCWZlYXR1cmUKKwkJCQkJCQkJCS5lcXVhbHMoVHJhbnNwb3J0UGFja2FnZS5MaXRlcmFscy5QSVBFX1RSQU5TUE9SVF9FREdFX0xBQkVMX1ZBTFVFX19USU1FX1BFUklPRCkpOworCisJCQkJCXJldHVybiByZXRWYWx1ZTsKKwkJCQl9IC8vIGlzVXNlclNwZWNpZmllZFByb3BlcnR5CisJCQl9OworCQl9IC8vIGNyZWF0ZU5ld01vZGlmaWVyUGFnZQorCQkKKwl9IC8vIE1pZ3JhdGlvbkVkZ2VMYWJlbE5ld01vZGlmaWVyUGFnZUFkYXB0ZXIKK30gLy8gRWRnZXNOZXdNb2RpZmllclBhZ2VBZGFwdGVyRmFjdG9yeQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLnRyYW5zcG9ydC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy90cmFuc3BvcnQvYWRhcHRlcnMvVHJhbnNwb3J0UHJvcGVydHlTdHJpbmdQcm92aWRlckFkYXB0ZXJGYWN0b3J5LmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkudHJhbnNwb3J0L3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL3RyYW5zcG9ydC9hZGFwdGVycy9UcmFuc3BvcnRQcm9wZXJ0eVN0cmluZ1Byb3ZpZGVyQWRhcHRlckZhY3RvcnkuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42OWQ3YjJkCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLnRyYW5zcG9ydC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy90cmFuc3BvcnQvYWRhcHRlcnMvVHJhbnNwb3J0UHJvcGVydHlTdHJpbmdQcm92aWRlckFkYXB0ZXJGYWN0b3J5LmphdmEKQEAgLTAsMCArMSwxMDIgQEAKKy8vIFN0YW5kYXJkUHJvcGVydHlTdHJpbmdQcm92aWRlckFkYXB0ZXJGYWN0b3J5LmphdmEKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy50cmFuc3BvcnQuYWRhcHRlcnM7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAxMSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5BZGFwdGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FU3RydWN0dXJhbEZlYXR1cmU7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy50cmFuc3BvcnQubmxzLk1lc3NhZ2VzOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMudHJhbnNwb3J0LnV0aWwuVHJhbnNwb3J0QWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS51aS5hZGFwdGVycy5wcm9wZXJ0eXN0cmluZ3MuUHJvcGVydHlTdHJpbmdQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnVpLmFkYXB0ZXJzLnByb3BlcnR5c3RyaW5ncy5Qcm9wZXJ0eVN0cmluZ1Byb3ZpZGVyQWRhcHRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnVpLmFkYXB0ZXJzLnByb3BlcnR5c3RyaW5ncy5Qcm9wZXJ0eVN0cmluZ1Byb3ZpZGVyQWRhcHRlckZhY3Rvcnk7CisKKy8qKgorICogVGhpcyBjbGFzcyBpcyB1c2VkIHRvIE5MUydkIHN0cmluZ3MgZm9yIEdyYXBoIEdlbmVyYXRvciBwcm9wZXJ0aWVzLiAKKyAqLworcHVibGljIGNsYXNzIFRyYW5zcG9ydFByb3BlcnR5U3RyaW5nUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSBleHRlbmRzCisJCVRyYW5zcG9ydEFkYXB0ZXJGYWN0b3J5IGltcGxlbWVudHMgUHJvcGVydHlTdHJpbmdQcm92aWRlckFkYXB0ZXJGYWN0b3J5IHsKKworCQorCVByb3BlcnR5U3RyaW5nUHJvdmlkZXJBZGFwdGVyIGFkYXB0ZXIgPSBudWxsOworCisJLyoqCisJICogRGVmYXVsdCBDb25zdHJ1Y3RvcgorCSAqLworCXB1YmxpYyBUcmFuc3BvcnRQcm9wZXJ0eVN0cmluZ1Byb3ZpZGVyQWRhcHRlckZhY3RvcnkoKSB7CisJCXN1cGVyKCk7CisJCVByb3BlcnR5U3RyaW5nUHJvdmlkZXJBZGFwdGVyRmFjdG9yeS5JTlNUQU5DRS5hZGRBZGFwdGVyRmFjdG9yeSh0aGlzKTsKKwl9CisJCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5pbXBsLkFkYXB0ZXJGYWN0b3J5SW1wbCNpc0ZhY3RvcnlGb3JUeXBlKGphdmEubGFuZy5PYmplY3QpCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIGJvb2xlYW4gaXNGYWN0b3J5Rm9yVHlwZShPYmplY3QgdHlwZSkgeworCQlyZXR1cm4gIHN1cGVyLmlzRmFjdG9yeUZvclR5cGUodHlwZSkgfHwgdHlwZSA9PSBQcm9wZXJ0eVN0cmluZ1Byb3ZpZGVyLmNsYXNzOworCX0KKworCQorCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLnV0aWwuU3RhbmRhcmRBZGFwdGVyRmFjdG9yeSNjcmVhdGVEaXNlYXNlTW9kZWxBZGFwdGVyKCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVQaXBlVHJhbnNwb3J0RWRnZUxhYmVsQWRhcHRlcigpIHsKKwkJLy8gSGF2ZSB3ZSBjcmVhdGVkIG9uZSBiZWZvcmU/CisJCWlmIChhZGFwdGVyID09IG51bGwpIHsKKwkJCS8vIE5vCisJCQlhZGFwdGVyID0gbmV3IFRyYW5zcG9ydFN0cmluZ1Byb3ZpZGVyQWRhcHRlcigpOworCQl9IC8vIGlmIHdlIGRpZG4ndCBjcmVhdGUgb25lIGJlZm9yZQorCQlyZXR1cm4gYWRhcHRlcjsKKwl9IC8vIGNyZWF0ZURpc2Vhc2VNb2RlbEFkYXB0ZXIKKwkKKwlwdWJsaWMgc3RhdGljIGNsYXNzIFRyYW5zcG9ydFN0cmluZ1Byb3ZpZGVyQWRhcHRlciBleHRlbmRzCisJCQlQcm9wZXJ0eVN0cmluZ1Byb3ZpZGVyQWRhcHRlciB7CisKKwkJLyoqCisJCSAqIEBwYXJhbSBkZXNjcmlwdG9yCisJCSAqIEByZXR1cm4gdGhlIE5MUydkIG5hbWUgb2YgdGhlIHByb3BlcnR5IHRvIGRpc3BsYXkgdG8gdGhlIHVzZXIKKwkJICovCisJCXB1YmxpYyBTdHJpbmcgZ2V0UHJvcGVydHlOYW1lKElJdGVtUHJvcGVydHlEZXNjcmlwdG9yIGRlc2NyaXB0b3IpIHsKKwkJCXJldHVybiBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLnRyYW5zcG9ydC5ubHMuTWVzc2FnZXMKKwkJCQkJLmdldFN0cmluZygoKEVTdHJ1Y3R1cmFsRmVhdHVyZSkgZGVzY3JpcHRvcgorCQkJCQkJCS5nZXRGZWF0dXJlKG51bGwpKS5nZXROYW1lKCkpOworCQl9IC8vIGdldFByb3BlcnR5TmFtZQorCisJCS8qKgorCQkgKiBAcGFyYW0gZGVzY3JpcHRvcgorCQkgKiBAcmV0dXJuIHRoZSBOTFMnZCB0b29sIHRpcCB0ZXh0IHRoYXQgZGVzY3JpYmVzIHRoZSBwcm9wZXJ0eQorCQkgKi8KKwkJcHVibGljIFN0cmluZyBnZXRQcm9wZXJ0eVRvb2xUaXAoCisJCQkJSUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IgZGVzY3JpcHRvcikgeworCQkJZmluYWwgRVN0cnVjdHVyYWxGZWF0dXJlIGZlYXR1cmUgPSAoRVN0cnVjdHVyYWxGZWF0dXJlKSBkZXNjcmlwdG9yCisJCQkJCS5nZXRGZWF0dXJlKG51bGwpOworCQkJcmV0dXJuIE1lc3NhZ2VzLmdldFN0cmluZyhmZWF0dXJlLmdldE5hbWUoKQorCQkJCQkrIFRUX1NVRkZJWCk7CisJCX0gLy8gZ2V0UHJvcGVydHlUb29sVGlwCisKKwkJLyoqCisJCSAqIEBwYXJhbSBkZXNjcmlwdG9yCisJCSAqIEByZXR1cm4gdGhlIE5MUydkIHRleHQgdGhhdCByZXByZXNlbnRzIHRoZSB1bml0cyBvZiB0aGUKKwkJICogICAgICAgICBwcm9wZXJ0eQorCQkgKi8KKwkJcHVibGljIFN0cmluZyBnZXRQcm9wZXJ0eVVuaXRzKAorCQkJCUlJdGVtUHJvcGVydHlEZXNjcmlwdG9yIGRlc2NyaXB0b3IpIHsKKwkJCWZpbmFsIEVTdHJ1Y3R1cmFsRmVhdHVyZSBmZWF0dXJlID0gKEVTdHJ1Y3R1cmFsRmVhdHVyZSkgZGVzY3JpcHRvcgorCQkJCQkuZ2V0RmVhdHVyZShudWxsKTsKKwkJCXJldHVybiBNZXNzYWdlcy5nZXRTdHJpbmcoZmVhdHVyZS5nZXROYW1lKCkKKwkJCQkJKyBVTklUX1NVRkZJWCk7CisJCX0gLy8gZ2V0UHJvcGVydHlVbml0cworCisJfSAKK30gCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkudHJhbnNwb3J0L3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL3RyYW5zcG9ydC9ubHMvTWVzc2FnZXMuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS50cmFuc3BvcnQvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvdHJhbnNwb3J0L25scy9NZXNzYWdlcy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNiMjUwYzIKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkudHJhbnNwb3J0L3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL3RyYW5zcG9ydC9ubHMvTWVzc2FnZXMuamF2YQpAQCAtMCwwICsxLDQ3IEBACisvLyBNZXNzYWdlcy5qYXZhCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMudHJhbnNwb3J0Lm5sczsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAxMSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqYXZhLnV0aWwuTWlzc2luZ1Jlc291cmNlRXhjZXB0aW9uOworaW1wb3J0IGphdmEudXRpbC5SZXNvdXJjZUJ1bmRsZTsKKworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5Db25zdGFudHM7CisKKworLyoqCisgKiBUaGlzIGNsYXNzIGlzIHRoZSBSZXNvdXJjZSBCdW5kbGUgZm9yIHRoaXMgcGFja2FnZS4KKyAqLworcHVibGljIGNsYXNzIE1lc3NhZ2VzIHsKKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgQlVORExFX05BTUUgPSBDb25zdGFudHMuSURfUk9PVAorCQkJKyAiLmRlZmluaXRpb25zLnRyYW5zcG9ydC5ubHMubWVzc2FnZXMiOyAvLyROT04tTkxTLTEkCisKKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBSZXNvdXJjZUJ1bmRsZSBSRVNPVVJDRV9CVU5ETEUgPSBSZXNvdXJjZUJ1bmRsZQorCQkJLmdldEJ1bmRsZShCVU5ETEVfTkFNRSk7CisKKwlwcml2YXRlIE1lc3NhZ2VzKCkgeworCQkvLyBlbXB0eQorCX0KKworCS8qKgorCSAqIEBwYXJhbSBrZXkKKwkgKiAgICAgICAgICAgIHRoZSBrZXkgZm9yIHRoZSBtZXNzYWdlCisJICogQHJldHVybiB0aGUgc3RyaW5nIHRoYXQgbWF0Y2hlcyB0aGUga2V5CisJICovCisJcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0U3RyaW5nKFN0cmluZyBrZXkpIHsKKwkJdHJ5IHsKKwkJCXJldHVybiBSRVNPVVJDRV9CVU5ETEUuZ2V0U3RyaW5nKGtleSk7CisJCX0gY2F0Y2ggKE1pc3NpbmdSZXNvdXJjZUV4Y2VwdGlvbiBlKSB7CisJCQlyZXR1cm4gJyEnICsga2V5ICsgJyEnOworCQl9CisJfSAvLyBnZXRTdHJpbmcKK30gLy8gTWVzc2FnZXMKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS50cmFuc3BvcnQvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvdHJhbnNwb3J0L25scy9tZXNzYWdlcy5wcm9wZXJ0aWVzIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLnRyYW5zcG9ydC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy90cmFuc3BvcnQvbmxzL21lc3NhZ2VzLnByb3BlcnRpZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGZlODA0ZgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS50cmFuc3BvcnQvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvdHJhbnNwb3J0L25scy9tZXNzYWdlcy5wcm9wZXJ0aWVzCkBAIC0wLDAgKzEsMjMgQEAKKyMgTWVzc2FnZXMucHJvcGVydGllcworIworIy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjICogQ29weXJpZ2h0IChjKSAyMDExIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorIyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyMgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyMgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorIyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisjICoKKyMgKiBDb250cmlidXRvcnM6CisjICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorIyAqCisKKworIyBGb3IgbW9kaWZ5aW5nIHBpcGUgdHJhbnNwb3J0IGVkZ2UgbGFiZWwgdmFsdWUKKworbWF4RmxvdyA9IE1heCBmbG93CittYXhGbG93VFQgPSBNYXhpbXVtIHBhc3NlbmdlcnMgLyBUUAorbWF4Rmxvd1VOSVQgPSBQYXNzZW5nZXJzL1RQCisKK3RpbWVQZXJpb2QgPSBUaW1lIFBlcmlvZCAobXMpCit0aW1lUGVyaW9kVFQgPSBUaGUgdGltZSBwZXJpb2QgdXNlZCAoZGVmYXVsdCBvbmUgZGF5KQordGltZVBlcmlvZFVOSVQgPSBtcwpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLnRyYW5zcG9ydC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy90cmFuc3BvcnQvcHJlc2VudGF0aW9uL1RyYW5zcG9ydEFjdGlvbkJhckNvbnRyaWJ1dG9yLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkudHJhbnNwb3J0L3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL3RyYW5zcG9ydC9wcmVzZW50YXRpb24vVHJhbnNwb3J0QWN0aW9uQmFyQ29udHJpYnV0b3IuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNTdmMDQyCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLnRyYW5zcG9ydC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy90cmFuc3BvcnQvcHJlc2VudGF0aW9uL1RyYW5zcG9ydEFjdGlvbkJhckNvbnRyaWJ1dG9yLmphdmEKQEAgLTAsMCArMSw0MzEgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy50cmFuc3BvcnQucHJlc2VudGF0aW9uOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDExIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OworaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51aS52aWV3ZXIuSVZpZXdlclByb3ZpZGVyOworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQuZG9tYWluLkVkaXRpbmdEb21haW47CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQuZG9tYWluLklFZGl0aW5nRG9tYWluUHJvdmlkZXI7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5hY3Rpb24uQ29udHJvbEFjdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5hY3Rpb24uQ3JlYXRlQ2hpbGRBY3Rpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkuYWN0aW9uLkNyZWF0ZVNpYmxpbmdBY3Rpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkuYWN0aW9uLkVkaXRpbmdEb21haW5BY3Rpb25CYXJDb250cmlidXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5hY3Rpb24uTG9hZFJlc291cmNlQWN0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmFjdGlvbi5WYWxpZGF0ZUFjdGlvbjsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5BY3Rpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLkFjdGlvbkNvbnRyaWJ1dGlvbkl0ZW07CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklBY3Rpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklDb250cmlidXRpb25JdGVtOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JQ29udHJpYnV0aW9uTWFuYWdlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSU1lbnVMaXN0ZW5lcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSU1lbnVNYW5hZ2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JVG9vbEJhck1hbmFnZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLk1lbnVNYW5hZ2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5TZXBhcmF0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLlN1YkNvbnRyaWJ1dGlvbkl0ZW07CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvblByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVN0cnVjdHVyZWRTZWxlY3Rpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5TZWxlY3Rpb25DaGFuZ2VkRXZlbnQ7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5WaWV3ZXI7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5JRWRpdG9yUGFydDsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5QYXJ0SW5pdEV4Y2VwdGlvbjsKKworLyoqCisgKiBUaGlzIGlzIHRoZSBhY3Rpb24gYmFyIGNvbnRyaWJ1dG9yIGZvciB0aGUgVHJhbnNwb3J0IG1vZGVsIGVkaXRvci4KKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIFRyYW5zcG9ydEFjdGlvbkJhckNvbnRyaWJ1dG9yCisJZXh0ZW5kcyBFZGl0aW5nRG9tYWluQWN0aW9uQmFyQ29udHJpYnV0b3IKKwlpbXBsZW1lbnRzIElTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIgeworCS8qKgorCSAqIFRoaXMga2VlcHMgdHJhY2sgb2YgdGhlIGFjdGl2ZSBlZGl0b3IuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIElFZGl0b3JQYXJ0IGFjdGl2ZUVkaXRvclBhcnQ7CisKKwkvKioKKwkgKiBUaGlzIGtlZXBzIHRyYWNrIG9mIHRoZSBjdXJyZW50IHNlbGVjdGlvbiBwcm92aWRlci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgSVNlbGVjdGlvblByb3ZpZGVyIHNlbGVjdGlvblByb3ZpZGVyOworCisJLyoqCisJICogVGhpcyBhY3Rpb24gb3BlbnMgdGhlIFByb3BlcnRpZXMgdmlldy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgSUFjdGlvbiBzaG93UHJvcGVydGllc1ZpZXdBY3Rpb24gPQorCQluZXcgQWN0aW9uKFRyYW5zcG9ydEVkaXRvclBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoIl9VSV9TaG93UHJvcGVydGllc1ZpZXdfbWVudV9pdGVtIikpIHsKKwkJCUBPdmVycmlkZQorCQkJcHVibGljIHZvaWQgcnVuKCkgeworCQkJCXRyeSB7CisJCQkJCWdldFBhZ2UoKS5zaG93Vmlldygib3JnLmVjbGlwc2UudWkudmlld3MuUHJvcGVydHlTaGVldCIpOworCQkJCX0KKwkJCQljYXRjaCAoUGFydEluaXRFeGNlcHRpb24gZXhjZXB0aW9uKSB7CisJCQkJCVRyYW5zcG9ydEVkaXRvclBsdWdpbi5JTlNUQU5DRS5sb2coZXhjZXB0aW9uKTsKKwkJCQl9CisJCQl9CisJCX07CisKKwkvKioKKwkgKiBUaGlzIGFjdGlvbiByZWZyZXNoZXMgdGhlIHZpZXdlciBvZiB0aGUgY3VycmVudCBlZGl0b3IgaWYgdGhlIGVkaXRvcgorCSAqIGltcGxlbWVudHMge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5jb21tb24udWkudmlld2VyLklWaWV3ZXJQcm92aWRlcn0uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIElBY3Rpb24gcmVmcmVzaFZpZXdlckFjdGlvbiA9CisJCW5ldyBBY3Rpb24oVHJhbnNwb3J0RWRpdG9yUGx1Z2luLklOU1RBTkNFLmdldFN0cmluZygiX1VJX1JlZnJlc2hWaWV3ZXJfbWVudV9pdGVtIikpIHsKKwkJCUBPdmVycmlkZQorCQkJcHVibGljIGJvb2xlYW4gaXNFbmFibGVkKCkgeworCQkJCXJldHVybiBhY3RpdmVFZGl0b3JQYXJ0IGluc3RhbmNlb2YgSVZpZXdlclByb3ZpZGVyOworCQkJfQorCisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyB2b2lkIHJ1bigpIHsKKwkJCQlpZiAoYWN0aXZlRWRpdG9yUGFydCBpbnN0YW5jZW9mIElWaWV3ZXJQcm92aWRlcikgeworCQkJCQlWaWV3ZXIgdmlld2VyID0gKChJVmlld2VyUHJvdmlkZXIpYWN0aXZlRWRpdG9yUGFydCkuZ2V0Vmlld2VyKCk7CisJCQkJCWlmICh2aWV3ZXIgIT0gbnVsbCkgeworCQkJCQkJdmlld2VyLnJlZnJlc2goKTsKKwkJCQkJfQorCQkJCX0KKwkJCX0KKwkJfTsKKworCS8qKgorCSAqIFRoaXMgd2lsbCBjb250YWluIG9uZSB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkuYWN0aW9uLkNyZWF0ZUNoaWxkQWN0aW9ufSBjb3JyZXNwb25kaW5nIHRvIGVhY2ggZGVzY3JpcHRvcgorCSAqIGdlbmVyYXRlZCBmb3IgdGhlIGN1cnJlbnQgc2VsZWN0aW9uIGJ5IHRoZSBpdGVtIHByb3ZpZGVyLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBDb2xsZWN0aW9uPElBY3Rpb24+IGNyZWF0ZUNoaWxkQWN0aW9uczsKKworCS8qKgorCSAqIFRoaXMgaXMgdGhlIG1lbnUgbWFuYWdlciBpbnRvIHdoaWNoIG1lbnUgY29udHJpYnV0aW9uIGl0ZW1zIHNob3VsZCBiZSBhZGRlZCBmb3IgQ3JlYXRlQ2hpbGQgYWN0aW9ucy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgSU1lbnVNYW5hZ2VyIGNyZWF0ZUNoaWxkTWVudU1hbmFnZXI7CisKKwkvKioKKwkgKiBUaGlzIHdpbGwgY29udGFpbiBvbmUge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmFjdGlvbi5DcmVhdGVTaWJsaW5nQWN0aW9ufSBjb3JyZXNwb25kaW5nIHRvIGVhY2ggZGVzY3JpcHRvcgorCSAqIGdlbmVyYXRlZCBmb3IgdGhlIGN1cnJlbnQgc2VsZWN0aW9uIGJ5IHRoZSBpdGVtIHByb3ZpZGVyLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBDb2xsZWN0aW9uPElBY3Rpb24+IGNyZWF0ZVNpYmxpbmdBY3Rpb25zOworCisJLyoqCisJICogVGhpcyBpcyB0aGUgbWVudSBtYW5hZ2VyIGludG8gd2hpY2ggbWVudSBjb250cmlidXRpb24gaXRlbXMgc2hvdWxkIGJlIGFkZGVkIGZvciBDcmVhdGVTaWJsaW5nIGFjdGlvbnMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIElNZW51TWFuYWdlciBjcmVhdGVTaWJsaW5nTWVudU1hbmFnZXI7CisKKwkvKioKKwkgKiBUaGlzIGNyZWF0ZXMgYW4gaW5zdGFuY2Ugb2YgdGhlIGNvbnRyaWJ1dG9yLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBUcmFuc3BvcnRBY3Rpb25CYXJDb250cmlidXRvcigpIHsKKwkJc3VwZXIoQURESVRJT05TX0xBU1RfU1RZTEUpOworCQlsb2FkUmVzb3VyY2VBY3Rpb24gPSBuZXcgTG9hZFJlc291cmNlQWN0aW9uKCk7CisJCXZhbGlkYXRlQWN0aW9uID0gbmV3IFZhbGlkYXRlQWN0aW9uKCk7CisJCWNvbnRyb2xBY3Rpb24gPSBuZXcgQ29udHJvbEFjdGlvbigpOworCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyBTZXBhcmF0b3JzIGZvciBlZGl0b3IgYWRkaXRpb25zIHRvIHRoZSB0b29sIGJhci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBjb250cmlidXRlVG9Ub29sQmFyKElUb29sQmFyTWFuYWdlciB0b29sQmFyTWFuYWdlcikgeworCQl0b29sQmFyTWFuYWdlci5hZGQobmV3IFNlcGFyYXRvcigidHJhbnNwb3J0LXNldHRpbmdzIikpOworCQl0b29sQmFyTWFuYWdlci5hZGQobmV3IFNlcGFyYXRvcigidHJhbnNwb3J0LWFkZGl0aW9ucyIpKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFkZHMgdG8gdGhlIG1lbnUgYmFyIGEgbWVudSBhbmQgc29tZSBzZXBhcmF0b3JzIGZvciBlZGl0b3IgYWRkaXRpb25zLAorCSAqIGFzIHdlbGwgYXMgdGhlIHN1Yi1tZW51cyBmb3Igb2JqZWN0IGNyZWF0aW9uIGl0ZW1zLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGNvbnRyaWJ1dGVUb01lbnUoSU1lbnVNYW5hZ2VyIG1lbnVNYW5hZ2VyKSB7CisJCXN1cGVyLmNvbnRyaWJ1dGVUb01lbnUobWVudU1hbmFnZXIpOworCisJCUlNZW51TWFuYWdlciBzdWJtZW51TWFuYWdlciA9IG5ldyBNZW51TWFuYWdlcihUcmFuc3BvcnRFZGl0b3JQbHVnaW4uSU5TVEFOQ0UuZ2V0U3RyaW5nKCJfVUlfVHJhbnNwb3J0RWRpdG9yX21lbnUiKSwgIm9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMudHJhbnNwb3J0TWVudUlEIik7CisJCW1lbnVNYW5hZ2VyLmluc2VydEFmdGVyKCJhZGRpdGlvbnMiLCBzdWJtZW51TWFuYWdlcik7CisJCXN1Ym1lbnVNYW5hZ2VyLmFkZChuZXcgU2VwYXJhdG9yKCJzZXR0aW5ncyIpKTsKKwkJc3VibWVudU1hbmFnZXIuYWRkKG5ldyBTZXBhcmF0b3IoImFjdGlvbnMiKSk7CisJCXN1Ym1lbnVNYW5hZ2VyLmFkZChuZXcgU2VwYXJhdG9yKCJhZGRpdGlvbnMiKSk7CisJCXN1Ym1lbnVNYW5hZ2VyLmFkZChuZXcgU2VwYXJhdG9yKCJhZGRpdGlvbnMtZW5kIikpOworCisJCS8vIFByZXBhcmUgZm9yIENyZWF0ZUNoaWxkIGl0ZW0gYWRkaXRpb24gb3IgcmVtb3ZhbC4KKwkJLy8KKwkJY3JlYXRlQ2hpbGRNZW51TWFuYWdlciA9IG5ldyBNZW51TWFuYWdlcihUcmFuc3BvcnRFZGl0b3JQbHVnaW4uSU5TVEFOQ0UuZ2V0U3RyaW5nKCJfVUlfQ3JlYXRlQ2hpbGRfbWVudV9pdGVtIikpOworCQlzdWJtZW51TWFuYWdlci5pbnNlcnRCZWZvcmUoImFkZGl0aW9ucyIsIGNyZWF0ZUNoaWxkTWVudU1hbmFnZXIpOworCisJCS8vIFByZXBhcmUgZm9yIENyZWF0ZVNpYmxpbmcgaXRlbSBhZGRpdGlvbiBvciByZW1vdmFsLgorCQkvLworCQljcmVhdGVTaWJsaW5nTWVudU1hbmFnZXIgPSBuZXcgTWVudU1hbmFnZXIoVHJhbnNwb3J0RWRpdG9yUGx1Z2luLklOU1RBTkNFLmdldFN0cmluZygiX1VJX0NyZWF0ZVNpYmxpbmdfbWVudV9pdGVtIikpOworCQlzdWJtZW51TWFuYWdlci5pbnNlcnRCZWZvcmUoImFkZGl0aW9ucyIsIGNyZWF0ZVNpYmxpbmdNZW51TWFuYWdlcik7CisKKwkJLy8gRm9yY2UgYW4gdXBkYXRlIGJlY2F1c2UgRWNsaXBzZSBoaWRlcyBlbXB0eSBtZW51cyBub3cuCisJCS8vCisJCXN1Ym1lbnVNYW5hZ2VyLmFkZE1lbnVMaXN0ZW5lcgorCQkJKG5ldyBJTWVudUxpc3RlbmVyKCkgeworCQkJCSBwdWJsaWMgdm9pZCBtZW51QWJvdXRUb1Nob3coSU1lbnVNYW5hZ2VyIG1lbnVNYW5hZ2VyKSB7CisJCQkJCSBtZW51TWFuYWdlci51cGRhdGVBbGwodHJ1ZSk7CisJCQkJIH0KKwkJCSB9KTsKKworCQlhZGRHbG9iYWxBY3Rpb25zKHN1Ym1lbnVNYW5hZ2VyKTsKKwl9CisKKwkvKioKKwkgKiBXaGVuIHRoZSBhY3RpdmUgZWRpdG9yIGNoYW5nZXMsIHRoaXMgcmVtZW1iZXJzIHRoZSBjaGFuZ2UgYW5kIHJlZ2lzdGVycyB3aXRoIGl0IGFzIGEgc2VsZWN0aW9uIHByb3ZpZGVyLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIHNldEFjdGl2ZUVkaXRvcihJRWRpdG9yUGFydCBwYXJ0KSB7CisJCXN1cGVyLnNldEFjdGl2ZUVkaXRvcihwYXJ0KTsKKwkJYWN0aXZlRWRpdG9yUGFydCA9IHBhcnQ7CisKKwkJLy8gU3dpdGNoIHRvIHRoZSBuZXcgc2VsZWN0aW9uIHByb3ZpZGVyLgorCQkvLworCQlpZiAoc2VsZWN0aW9uUHJvdmlkZXIgIT0gbnVsbCkgeworCQkJc2VsZWN0aW9uUHJvdmlkZXIucmVtb3ZlU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyKHRoaXMpOworCQl9CisJCWlmIChwYXJ0ID09IG51bGwpIHsKKwkJCXNlbGVjdGlvblByb3ZpZGVyID0gbnVsbDsKKwkJfQorCQllbHNlIHsKKwkJCXNlbGVjdGlvblByb3ZpZGVyID0gcGFydC5nZXRTaXRlKCkuZ2V0U2VsZWN0aW9uUHJvdmlkZXIoKTsKKwkJCXNlbGVjdGlvblByb3ZpZGVyLmFkZFNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcih0aGlzKTsKKworCQkJLy8gRmFrZSBhIHNlbGVjdGlvbiBjaGFuZ2VkIGV2ZW50IHRvIHVwZGF0ZSB0aGUgbWVudXMuCisJCQkvLworCQkJaWYgKHNlbGVjdGlvblByb3ZpZGVyLmdldFNlbGVjdGlvbigpICE9IG51bGwpIHsKKwkJCQlzZWxlY3Rpb25DaGFuZ2VkKG5ldyBTZWxlY3Rpb25DaGFuZ2VkRXZlbnQoc2VsZWN0aW9uUHJvdmlkZXIsIHNlbGVjdGlvblByb3ZpZGVyLmdldFNlbGVjdGlvbigpKSk7CisJCQl9CisJCX0KKwl9CisKKwkvKioKKwkgKiBUaGlzIGltcGxlbWVudHMge0BsaW5rIG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcn0sCisJICogaGFuZGxpbmcge0BsaW5rIG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuU2VsZWN0aW9uQ2hhbmdlZEV2ZW50fXMgYnkgcXVlcnlpbmcgZm9yIHRoZSBjaGlsZHJlbiBhbmQgc2libGluZ3MKKwkgKiB0aGF0IGNhbiBiZSBhZGRlZCB0byB0aGUgc2VsZWN0ZWQgb2JqZWN0IGFuZCB1cGRhdGluZyB0aGUgbWVudXMgYWNjb3JkaW5nbHkuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgc2VsZWN0aW9uQ2hhbmdlZChTZWxlY3Rpb25DaGFuZ2VkRXZlbnQgZXZlbnQpIHsKKwkJLy8gUmVtb3ZlIGFueSBtZW51IGl0ZW1zIGZvciBvbGQgc2VsZWN0aW9uLgorCQkvLworCQlpZiAoY3JlYXRlQ2hpbGRNZW51TWFuYWdlciAhPSBudWxsKSB7CisJCQlkZXBvcHVsYXRlTWFuYWdlcihjcmVhdGVDaGlsZE1lbnVNYW5hZ2VyLCBjcmVhdGVDaGlsZEFjdGlvbnMpOworCQl9CisJCWlmIChjcmVhdGVTaWJsaW5nTWVudU1hbmFnZXIgIT0gbnVsbCkgeworCQkJZGVwb3B1bGF0ZU1hbmFnZXIoY3JlYXRlU2libGluZ01lbnVNYW5hZ2VyLCBjcmVhdGVTaWJsaW5nQWN0aW9ucyk7CisJCX0KKworCQkvLyBRdWVyeSB0aGUgbmV3IHNlbGVjdGlvbiBmb3IgYXBwcm9wcmlhdGUgbmV3IGNoaWxkL3NpYmxpbmcgZGVzY3JpcHRvcnMKKwkJLy8KKwkJQ29sbGVjdGlvbjw/PiBuZXdDaGlsZERlc2NyaXB0b3JzID0gbnVsbDsKKwkJQ29sbGVjdGlvbjw/PiBuZXdTaWJsaW5nRGVzY3JpcHRvcnMgPSBudWxsOworCisJCUlTZWxlY3Rpb24gc2VsZWN0aW9uID0gZXZlbnQuZ2V0U2VsZWN0aW9uKCk7CisJCWlmIChzZWxlY3Rpb24gaW5zdGFuY2VvZiBJU3RydWN0dXJlZFNlbGVjdGlvbiAmJiAoKElTdHJ1Y3R1cmVkU2VsZWN0aW9uKXNlbGVjdGlvbikuc2l6ZSgpID09IDEpIHsKKwkJCU9iamVjdCBvYmplY3QgPSAoKElTdHJ1Y3R1cmVkU2VsZWN0aW9uKXNlbGVjdGlvbikuZ2V0Rmlyc3RFbGVtZW50KCk7CisKKwkJCUVkaXRpbmdEb21haW4gZG9tYWluID0gKChJRWRpdGluZ0RvbWFpblByb3ZpZGVyKWFjdGl2ZUVkaXRvclBhcnQpLmdldEVkaXRpbmdEb21haW4oKTsKKworCQkJbmV3Q2hpbGREZXNjcmlwdG9ycyA9IGRvbWFpbi5nZXROZXdDaGlsZERlc2NyaXB0b3JzKG9iamVjdCwgbnVsbCk7CisJCQluZXdTaWJsaW5nRGVzY3JpcHRvcnMgPSBkb21haW4uZ2V0TmV3Q2hpbGREZXNjcmlwdG9ycyhudWxsLCBvYmplY3QpOworCQl9CisKKwkJLy8gR2VuZXJhdGUgYWN0aW9ucyBmb3Igc2VsZWN0aW9uOyBwb3B1bGF0ZSBhbmQgcmVkcmF3IHRoZSBtZW51cy4KKwkJLy8KKwkJY3JlYXRlQ2hpbGRBY3Rpb25zID0gZ2VuZXJhdGVDcmVhdGVDaGlsZEFjdGlvbnMobmV3Q2hpbGREZXNjcmlwdG9ycywgc2VsZWN0aW9uKTsKKwkJY3JlYXRlU2libGluZ0FjdGlvbnMgPSBnZW5lcmF0ZUNyZWF0ZVNpYmxpbmdBY3Rpb25zKG5ld1NpYmxpbmdEZXNjcmlwdG9ycywgc2VsZWN0aW9uKTsKKworCQlpZiAoY3JlYXRlQ2hpbGRNZW51TWFuYWdlciAhPSBudWxsKSB7CisJCQlwb3B1bGF0ZU1hbmFnZXIoY3JlYXRlQ2hpbGRNZW51TWFuYWdlciwgY3JlYXRlQ2hpbGRBY3Rpb25zLCBudWxsKTsKKwkJCWNyZWF0ZUNoaWxkTWVudU1hbmFnZXIudXBkYXRlKHRydWUpOworCQl9CisJCWlmIChjcmVhdGVTaWJsaW5nTWVudU1hbmFnZXIgIT0gbnVsbCkgeworCQkJcG9wdWxhdGVNYW5hZ2VyKGNyZWF0ZVNpYmxpbmdNZW51TWFuYWdlciwgY3JlYXRlU2libGluZ0FjdGlvbnMsIG51bGwpOworCQkJY3JlYXRlU2libGluZ01lbnVNYW5hZ2VyLnVwZGF0ZSh0cnVlKTsKKwkJfQorCX0KKworCS8qKgorCSAqIFRoaXMgZ2VuZXJhdGVzIGEge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmFjdGlvbi5DcmVhdGVDaGlsZEFjdGlvbn0gZm9yIGVhY2ggb2JqZWN0IGluIDxjb2RlPmRlc2NyaXB0b3JzPC9jb2RlPiwKKwkgKiBhbmQgcmV0dXJucyB0aGUgY29sbGVjdGlvbiBvZiB0aGVzZSBhY3Rpb25zLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBDb2xsZWN0aW9uPElBY3Rpb24+IGdlbmVyYXRlQ3JlYXRlQ2hpbGRBY3Rpb25zKENvbGxlY3Rpb248Pz4gZGVzY3JpcHRvcnMsIElTZWxlY3Rpb24gc2VsZWN0aW9uKSB7CisJCUNvbGxlY3Rpb248SUFjdGlvbj4gYWN0aW9ucyA9IG5ldyBBcnJheUxpc3Q8SUFjdGlvbj4oKTsKKwkJaWYgKGRlc2NyaXB0b3JzICE9IG51bGwpIHsKKwkJCWZvciAoT2JqZWN0IGRlc2NyaXB0b3IgOiBkZXNjcmlwdG9ycykgeworCQkJCWFjdGlvbnMuYWRkKG5ldyBDcmVhdGVDaGlsZEFjdGlvbihhY3RpdmVFZGl0b3JQYXJ0LCBzZWxlY3Rpb24sIGRlc2NyaXB0b3IpKTsKKwkJCX0KKwkJfQorCQlyZXR1cm4gYWN0aW9uczsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGdlbmVyYXRlcyBhIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5hY3Rpb24uQ3JlYXRlU2libGluZ0FjdGlvbn0gZm9yIGVhY2ggb2JqZWN0IGluIDxjb2RlPmRlc2NyaXB0b3JzPC9jb2RlPiwKKwkgKiBhbmQgcmV0dXJucyB0aGUgY29sbGVjdGlvbiBvZiB0aGVzZSBhY3Rpb25zLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBDb2xsZWN0aW9uPElBY3Rpb24+IGdlbmVyYXRlQ3JlYXRlU2libGluZ0FjdGlvbnMoQ29sbGVjdGlvbjw/PiBkZXNjcmlwdG9ycywgSVNlbGVjdGlvbiBzZWxlY3Rpb24pIHsKKwkJQ29sbGVjdGlvbjxJQWN0aW9uPiBhY3Rpb25zID0gbmV3IEFycmF5TGlzdDxJQWN0aW9uPigpOworCQlpZiAoZGVzY3JpcHRvcnMgIT0gbnVsbCkgeworCQkJZm9yIChPYmplY3QgZGVzY3JpcHRvciA6IGRlc2NyaXB0b3JzKSB7CisJCQkJYWN0aW9ucy5hZGQobmV3IENyZWF0ZVNpYmxpbmdBY3Rpb24oYWN0aXZlRWRpdG9yUGFydCwgc2VsZWN0aW9uLCBkZXNjcmlwdG9yKSk7CisJCQl9CisJCX0KKwkJcmV0dXJuIGFjdGlvbnM7CisJfQorCisJLyoqCisJICogVGhpcyBwb3B1bGF0ZXMgdGhlIHNwZWNpZmllZCA8Y29kZT5tYW5hZ2VyPC9jb2RlPiB3aXRoIHtAbGluayBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uQWN0aW9uQ29udHJpYnV0aW9uSXRlbX1zCisJICogYmFzZWQgb24gdGhlIHtAbGluayBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSUFjdGlvbn1zIGNvbnRhaW5lZCBpbiB0aGUgPGNvZGU+YWN0aW9uczwvY29kZT4gY29sbGVjdGlvbiwKKwkgKiBieSBpbnNlcnRpbmcgdGhlbSBiZWZvcmUgdGhlIHNwZWNpZmllZCBjb250cmlidXRpb24gaXRlbSA8Y29kZT5jb250cmlidXRpb25JRDwvY29kZT4uCisJICogSWYgPGNvZGU+Y29udHJpYnV0aW9uSUQ8L2NvZGU+IGlzIDxjb2RlPm51bGw8L2NvZGU+LCB0aGV5IGFyZSBzaW1wbHkgYWRkZWQuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgcG9wdWxhdGVNYW5hZ2VyKElDb250cmlidXRpb25NYW5hZ2VyIG1hbmFnZXIsIENvbGxlY3Rpb248PyBleHRlbmRzIElBY3Rpb24+IGFjdGlvbnMsIFN0cmluZyBjb250cmlidXRpb25JRCkgeworCQlpZiAoYWN0aW9ucyAhPSBudWxsKSB7CisJCQlmb3IgKElBY3Rpb24gYWN0aW9uIDogYWN0aW9ucykgeworCQkJCWlmIChjb250cmlidXRpb25JRCAhPSBudWxsKSB7CisJCQkJCW1hbmFnZXIuaW5zZXJ0QmVmb3JlKGNvbnRyaWJ1dGlvbklELCBhY3Rpb24pOworCQkJCX0KKwkJCQllbHNlIHsKKwkJCQkJbWFuYWdlci5hZGQoYWN0aW9uKTsKKwkJCQl9CisJCQl9CisJCX0KKwl9CisJCQorCS8qKgorCSAqIFRoaXMgcmVtb3ZlcyBmcm9tIHRoZSBzcGVjaWZpZWQgPGNvZGU+bWFuYWdlcjwvY29kZT4gYWxsIHtAbGluayBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uQWN0aW9uQ29udHJpYnV0aW9uSXRlbX1zCisJICogYmFzZWQgb24gdGhlIHtAbGluayBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSUFjdGlvbn1zIGNvbnRhaW5lZCBpbiB0aGUgPGNvZGU+YWN0aW9uczwvY29kZT4gY29sbGVjdGlvbi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBkZXBvcHVsYXRlTWFuYWdlcihJQ29udHJpYnV0aW9uTWFuYWdlciBtYW5hZ2VyLCBDb2xsZWN0aW9uPD8gZXh0ZW5kcyBJQWN0aW9uPiBhY3Rpb25zKSB7CisJCWlmIChhY3Rpb25zICE9IG51bGwpIHsKKwkJCUlDb250cmlidXRpb25JdGVtW10gaXRlbXMgPSBtYW5hZ2VyLmdldEl0ZW1zKCk7CisJCQlmb3IgKGludCBpID0gMDsgaSA8IGl0ZW1zLmxlbmd0aDsgaSsrKSB7CisJCQkJLy8gTG9vayBpbnRvIFN1YkNvbnRyaWJ1dGlvbkl0ZW1zCisJCQkJLy8KKwkJCQlJQ29udHJpYnV0aW9uSXRlbSBjb250cmlidXRpb25JdGVtID0gaXRlbXNbaV07CisJCQkJd2hpbGUgKGNvbnRyaWJ1dGlvbkl0ZW0gaW5zdGFuY2VvZiBTdWJDb250cmlidXRpb25JdGVtKSB7CisJCQkJCWNvbnRyaWJ1dGlvbkl0ZW0gPSAoKFN1YkNvbnRyaWJ1dGlvbkl0ZW0pY29udHJpYnV0aW9uSXRlbSkuZ2V0SW5uZXJJdGVtKCk7CisJCQkJfQorCisJCQkJLy8gRGVsZXRlIHRoZSBBY3Rpb25Db250cmlidXRpb25JdGVtcyB3aXRoIG1hdGNoaW5nIGFjdGlvbi4KKwkJCQkvLworCQkJCWlmIChjb250cmlidXRpb25JdGVtIGluc3RhbmNlb2YgQWN0aW9uQ29udHJpYnV0aW9uSXRlbSkgeworCQkJCQlJQWN0aW9uIGFjdGlvbiA9ICgoQWN0aW9uQ29udHJpYnV0aW9uSXRlbSljb250cmlidXRpb25JdGVtKS5nZXRBY3Rpb24oKTsKKwkJCQkJaWYgKGFjdGlvbnMuY29udGFpbnMoYWN0aW9uKSkgeworCQkJCQkJbWFuYWdlci5yZW1vdmUoY29udHJpYnV0aW9uSXRlbSk7CisJCQkJCX0KKwkJCQl9CisJCQl9CisJCX0KKwl9CisKKwkvKioKKwkgKiBUaGlzIHBvcHVsYXRlcyB0aGUgcG9wLXVwIG1lbnUgYmVmb3JlIGl0IGFwcGVhcnMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgbWVudUFib3V0VG9TaG93KElNZW51TWFuYWdlciBtZW51TWFuYWdlcikgeworCQlzdXBlci5tZW51QWJvdXRUb1Nob3cobWVudU1hbmFnZXIpOworCQlNZW51TWFuYWdlciBzdWJtZW51TWFuYWdlciA9IG51bGw7CisKKwkJc3VibWVudU1hbmFnZXIgPSBuZXcgTWVudU1hbmFnZXIoVHJhbnNwb3J0RWRpdG9yUGx1Z2luLklOU1RBTkNFLmdldFN0cmluZygiX1VJX0NyZWF0ZUNoaWxkX21lbnVfaXRlbSIpKTsKKwkJcG9wdWxhdGVNYW5hZ2VyKHN1Ym1lbnVNYW5hZ2VyLCBjcmVhdGVDaGlsZEFjdGlvbnMsIG51bGwpOworCQltZW51TWFuYWdlci5pbnNlcnRCZWZvcmUoImVkaXQiLCBzdWJtZW51TWFuYWdlcik7CisKKwkJc3VibWVudU1hbmFnZXIgPSBuZXcgTWVudU1hbmFnZXIoVHJhbnNwb3J0RWRpdG9yUGx1Z2luLklOU1RBTkNFLmdldFN0cmluZygiX1VJX0NyZWF0ZVNpYmxpbmdfbWVudV9pdGVtIikpOworCQlwb3B1bGF0ZU1hbmFnZXIoc3VibWVudU1hbmFnZXIsIGNyZWF0ZVNpYmxpbmdBY3Rpb25zLCBudWxsKTsKKwkJbWVudU1hbmFnZXIuaW5zZXJ0QmVmb3JlKCJlZGl0Iiwgc3VibWVudU1hbmFnZXIpOworCX0KKworCS8qKgorCSAqIFRoaXMgaW5zZXJ0cyBnbG9iYWwgYWN0aW9ucyBiZWZvcmUgdGhlICJhZGRpdGlvbnMtZW5kIiBzZXBhcmF0b3IuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgYWRkR2xvYmFsQWN0aW9ucyhJTWVudU1hbmFnZXIgbWVudU1hbmFnZXIpIHsKKwkJbWVudU1hbmFnZXIuaW5zZXJ0QWZ0ZXIoImFkZGl0aW9ucy1lbmQiLCBuZXcgU2VwYXJhdG9yKCJ1aS1hY3Rpb25zIikpOworCQltZW51TWFuYWdlci5pbnNlcnRBZnRlcigidWktYWN0aW9ucyIsIHNob3dQcm9wZXJ0aWVzVmlld0FjdGlvbik7CisKKwkJcmVmcmVzaFZpZXdlckFjdGlvbi5zZXRFbmFibGVkKHJlZnJlc2hWaWV3ZXJBY3Rpb24uaXNFbmFibGVkKCkpOwkJCisJCW1lbnVNYW5hZ2VyLmluc2VydEFmdGVyKCJ1aS1hY3Rpb25zIiwgcmVmcmVzaFZpZXdlckFjdGlvbik7CisKKwkJc3VwZXIuYWRkR2xvYmFsQWN0aW9ucyhtZW51TWFuYWdlcik7CisJfQorCisJLyoqCisJICogVGhpcyBlbnN1cmVzIHRoYXQgYSBkZWxldGUgYWN0aW9uIHdpbGwgY2xlYW4gdXAgYWxsIHJlZmVyZW5jZXMgdG8gZGVsZXRlZCBvYmplY3RzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCBib29sZWFuIHJlbW92ZUFsbFJlZmVyZW5jZXNPbkRlbGV0ZSgpIHsKKwkJcmV0dXJuIHRydWU7CisJfQorCit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLnRyYW5zcG9ydC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy90cmFuc3BvcnQvcHJlc2VudGF0aW9uL1RyYW5zcG9ydEVkaXRvci5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLnRyYW5zcG9ydC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy90cmFuc3BvcnQvcHJlc2VudGF0aW9uL1RyYW5zcG9ydEVkaXRvci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNlMjZjNGQKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkudHJhbnNwb3J0L3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL3RyYW5zcG9ydC9wcmVzZW50YXRpb24vVHJhbnNwb3J0RWRpdG9yLmphdmEKQEAgLTAsMCArMSwxNTcxIEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMudHJhbnNwb3J0LnByZXNlbnRhdGlvbjsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAxMSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOworaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW07CisKK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OworaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOworaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uczsKK2ltcG9ydCBqYXZhLnV0aWwuRXZlbnRPYmplY3Q7CitpbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7CitpbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOworaW1wb3J0IGphdmEudXRpbC5MaW5rZWRIYXNoTWFwOworaW1wb3J0IGphdmEudXRpbC5MaXN0OworaW1wb3J0IGphdmEudXRpbC5NYXA7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JRmlsZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JTWFya2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklSZXNvdXJjZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUmVzb3VyY2VDaGFuZ2VFdmVudDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUmVzb3VyY2VDaGFuZ2VMaXN0ZW5lcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUmVzb3VyY2VEZWx0YTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUmVzb3VyY2VEZWx0YVZpc2l0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuUmVzb3VyY2VzUGx1Z2luOworCitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkNvcmVFeGNlcHRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQYXRoOworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUHJvZ3Jlc3NNb25pdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5OdWxsUHJvZ3Jlc3NNb25pdG9yOworCitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklNZW51TGlzdGVuZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklNZW51TWFuYWdlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSVN0YXR1c0xpbmVNYW5hZ2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JVG9vbEJhck1hbmFnZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLk1lbnVNYW5hZ2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5TZXBhcmF0b3I7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5kaWFsb2dzLk1lc3NhZ2VEaWFsb2c7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuZGlhbG9ncy5Qcm9ncmVzc01vbml0b3JEaWFsb2c7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvblByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVN0cnVjdHVyZWRTZWxlY3Rpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5TZWxlY3Rpb25DaGFuZ2VkRXZlbnQ7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5TdHJ1Y3R1cmVkU2VsZWN0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuU3RydWN0dXJlZFZpZXdlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlRyZWVWaWV3ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5WaWV3ZXI7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuU1dUOworCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmN1c3RvbS5DVGFiRm9sZGVyOworCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmRuZC5ETkQ7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmRuZC5UcmFuc2ZlcjsKKworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuQ29udHJvbEFkYXB0ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5Db250cm9sRXZlbnQ7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZ3JhcGhpY3MuUG9pbnQ7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuTWVudTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5UcmVlOworCitpbXBvcnQgb3JnLmVjbGlwc2UudWkuSUFjdGlvbkJhcnM7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuSUVkaXRvcklucHV0OworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklFZGl0b3JQYXJ0OworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklFZGl0b3JTaXRlOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklQYXJ0TGlzdGVuZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaFBhcnQ7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuUGFydEluaXRFeGNlcHRpb247CisKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5kaWFsb2dzLlNhdmVBc0RpYWxvZzsKKworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLmlkZS5JR290b01hcmtlcjsKKworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLnBhcnQuRmlsZUVkaXRvcklucHV0OworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLnBhcnQuTXVsdGlQYWdlRWRpdG9yUGFydDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLnZpZXdzLmNvbnRlbnRvdXRsaW5lLkNvbnRlbnRPdXRsaW5lOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLnZpZXdzLmNvbnRlbnRvdXRsaW5lLkNvbnRlbnRPdXRsaW5lUGFnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS52aWV3cy5jb250ZW50b3V0bGluZS5JQ29udGVudE91dGxpbmVQYWdlOworCitpbXBvcnQgb3JnLmVjbGlwc2UudWkudmlld3MucHJvcGVydGllcy5JUHJvcGVydHlTaGVldFBhZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkudmlld3MucHJvcGVydGllcy5Qcm9wZXJ0eVNoZWV0OworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLnZpZXdzLnByb3BlcnRpZXMuUHJvcGVydHlTaGVldFBhZ2U7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLmNvbW1hbmQuQmFzaWNDb21tYW5kU3RhY2s7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5jb21tYW5kLkNvbW1hbmQ7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5jb21tYW5kLkNvbW1hbmRTdGFjazsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLmNvbW1hbmQuQ29tbWFuZFN0YWNrTGlzdGVuZXI7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5BZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb247CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnVpLk1hcmtlckhlbHBlcjsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udWkuZWRpdG9yLlByb2JsZW1FZGl0b3JQYXJ0OworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51aS52aWV3ZXIuSVZpZXdlclByb3ZpZGVyOworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLkJhc2ljRGlhZ25vc3RpYzsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuRGlhZ25vc3RpYzsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuVVJJOworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3Q7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVWYWxpZGF0b3I7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUucmVzb3VyY2UuUmVzb3VyY2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnJlc291cmNlLlJlc291cmNlU2V0OworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnV0aWwuRUNvbnRlbnRBZGFwdGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS51dGlsLkVjb3JlVXRpbDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LmRvbWFpbi5BZGFwdGVyRmFjdG9yeUVkaXRpbmdEb21haW47CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQuZG9tYWluLkVkaXRpbmdEb21haW47CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQuZG9tYWluLklFZGl0aW5nRG9tYWluUHJvdmlkZXI7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5BZGFwdGVyRmFjdG9yeUl0ZW1EZWxlZ2F0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuQ29tcG9zZWRBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5SZWZsZWN0aXZlSXRlbVByb3ZpZGVyQWRhcHRlckZhY3Rvcnk7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5yZXNvdXJjZS5SZXNvdXJjZUl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5OworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkuYWN0aW9uLkVkaXRpbmdEb21haW5BY3Rpb25CYXJDb250cmlidXRvcjsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmNlbGxlZGl0b3IuQWRhcHRlckZhY3RvcnlUcmVlRWRpdG9yOworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkuZG5kLkVkaXRpbmdEb21haW5WaWV3ZXJEcm9wQWRhcHRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5kbmQuTG9jYWxUcmFuc2ZlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5kbmQuVmlld2VyRHJhZ0FkYXB0ZXI7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5wcm92aWRlci5BZGFwdGVyRmFjdG9yeUNvbnRlbnRQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5wcm92aWRlci5BZGFwdGVyRmFjdG9yeUxhYmVsUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkucHJvdmlkZXIuVW53cmFwcGluZ1NlbGVjdGlvblByb3ZpZGVyOworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkudXRpbC5FZGl0VUlNYXJrZXJIZWxwZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkudXRpbC5FZGl0VUlVdGlsOworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkudmlldy5FeHRlbmRlZFByb3BlcnR5U2hlZXRQYWdlOworCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy50cmFuc3BvcnQucHJvdmlkZXIuVHJhbnNwb3J0SXRlbVByb3ZpZGVyQWRhcHRlckZhY3Rvcnk7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUucHJvdmlkZXIuRWNvcmVJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeTsKKworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24ucHJvdmlkZXIuQ29tbW9uSXRlbVByb3ZpZGVyQWRhcHRlckZhY3Rvcnk7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGgucHJvdmlkZXIuR3JhcGhJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeTsKKworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5wcm92aWRlci5Nb2RlbEl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5OworCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLnByb3ZpZGVyLk1vZGlmaWVySXRlbVByb3ZpZGVyQWRhcHRlckZhY3Rvcnk7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2NlbmFyaW8ucHJvdmlkZXIuU2NlbmFyaW9JdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeTsKKworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zZXF1ZW5jZXIucHJvdmlkZXIuU2VxdWVuY2VySXRlbVByb3ZpZGVyQWRhcHRlckZhY3Rvcnk7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc29sdmVyLnByb3ZpZGVyLlNvbHZlckl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5OworCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5lZGdlcy5wcm92aWRlci5FZGdlc0l0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5OworCitpbXBvcnQgb3JnLmVjbGlwc2UudWkuYWN0aW9ucy5Xb3Jrc3BhY2VNb2RpZnlPcGVyYXRpb247CisKKworLyoqCisgKiBUaGlzIGlzIGFuIGV4YW1wbGUgb2YgYSBUcmFuc3BvcnQgbW9kZWwgZWRpdG9yLgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgVHJhbnNwb3J0RWRpdG9yCisJZXh0ZW5kcyBNdWx0aVBhZ2VFZGl0b3JQYXJ0CisJaW1wbGVtZW50cyBJRWRpdGluZ0RvbWFpblByb3ZpZGVyLCBJU2VsZWN0aW9uUHJvdmlkZXIsIElNZW51TGlzdGVuZXIsIElWaWV3ZXJQcm92aWRlciwgSUdvdG9NYXJrZXIgeworCS8qKgorCSAqIFRoaXMga2VlcHMgdHJhY2sgb2YgdGhlIGVkaXRpbmcgZG9tYWluIHRoYXQgaXMgdXNlZCB0byB0cmFjayBhbGwgY2hhbmdlcyB0byB0aGUgbW9kZWwuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIEFkYXB0ZXJGYWN0b3J5RWRpdGluZ0RvbWFpbiBlZGl0aW5nRG9tYWluOworCisJLyoqCisJICogVGhpcyBpcyB0aGUgb25lIGFkYXB0ZXIgZmFjdG9yeSB1c2VkIGZvciBwcm92aWRpbmcgdmlld3Mgb2YgdGhlIG1vZGVsLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBDb21wb3NlZEFkYXB0ZXJGYWN0b3J5IGFkYXB0ZXJGYWN0b3J5OworCisJLyoqCisJICogVGhpcyBpcyB0aGUgY29udGVudCBvdXRsaW5lIHBhZ2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIElDb250ZW50T3V0bGluZVBhZ2UgY29udGVudE91dGxpbmVQYWdlOworCisJLyoqCisJICogVGhpcyBpcyBhIGtsdWRnZS4uLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBJU3RhdHVzTGluZU1hbmFnZXIgY29udGVudE91dGxpbmVTdGF0dXNMaW5lTWFuYWdlcjsKKworCS8qKgorCSAqIFRoaXMgaXMgdGhlIGNvbnRlbnQgb3V0bGluZSBwYWdlJ3Mgdmlld2VyLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBUcmVlVmlld2VyIGNvbnRlbnRPdXRsaW5lVmlld2VyOworCisJLyoqCisJICogVGhpcyBpcyB0aGUgcHJvcGVydHkgc2hlZXQgcGFnZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgUHJvcGVydHlTaGVldFBhZ2UgcHJvcGVydHlTaGVldFBhZ2U7CisKKwkvKioKKwkgKiBUaGlzIGlzIHRoZSB2aWV3ZXIgdGhhdCBzaGFkb3dzIHRoZSBzZWxlY3Rpb24gaW4gdGhlIGNvbnRlbnQgb3V0bGluZS4KKwkgKiBUaGUgcGFyZW50IHJlbGF0aW9uIG11c3QgYmUgY29ycmVjdGx5IGRlZmluZWQgZm9yIHRoaXMgdG8gd29yay4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgVHJlZVZpZXdlciBzZWxlY3Rpb25WaWV3ZXI7CisKKwkvKioKKwkgKiBUaGlzIGtlZXBzIHRyYWNrIG9mIHRoZSBhY3RpdmUgY29udGVudCB2aWV3ZXIsIHdoaWNoIG1heSBiZSBlaXRoZXIgb25lIG9mIHRoZSB2aWV3ZXJzIGluIHRoZSBwYWdlcyBvciB0aGUgY29udGVudCBvdXRsaW5lIHZpZXdlci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgVmlld2VyIGN1cnJlbnRWaWV3ZXI7CisKKwkvKioKKwkgKiBUaGlzIGxpc3RlbnMgdG8gd2hpY2ggZXZlciB2aWV3ZXIgaXMgYWN0aXZlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBJU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyIHNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcjsKKworCS8qKgorCSAqIFRoaXMga2VlcHMgdHJhY2sgb2YgYWxsIHRoZSB7QGxpbmsgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyfXMgdGhhdCBhcmUgbGlzdGVuaW5nIHRvIHRoaXMgZWRpdG9yLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBDb2xsZWN0aW9uPElTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXI+IHNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcnMgPSBuZXcgQXJyYXlMaXN0PElTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXI+KCk7CisKKwkvKioKKwkgKiBUaGlzIGtlZXBzIHRyYWNrIG9mIHRoZSBzZWxlY3Rpb24gb2YgdGhlIGVkaXRvciBhcyBhIHdob2xlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBJU2VsZWN0aW9uIGVkaXRvclNlbGVjdGlvbiA9IFN0cnVjdHVyZWRTZWxlY3Rpb24uRU1QVFk7CisKKwkvKioKKwkgKiBUaGUgTWFya2VySGVscGVyIGlzIHJlc3BvbnNpYmxlIGZvciBjcmVhdGluZyB3b3Jrc3BhY2UgcmVzb3VyY2UgbWFya2VycyBwcmVzZW50ZWQKKwkgKiBpbiBFY2xpcHNlJ3MgUHJvYmxlbXMgVmlldy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgTWFya2VySGVscGVyIG1hcmtlckhlbHBlciA9IG5ldyBFZGl0VUlNYXJrZXJIZWxwZXIoKTsKKworCS8qKgorCSAqIFRoaXMgbGlzdGVucyBmb3Igd2hlbiB0aGUgb3V0bGluZSBiZWNvbWVzIGFjdGl2ZQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBJUGFydExpc3RlbmVyIHBhcnRMaXN0ZW5lciA9CisJCW5ldyBJUGFydExpc3RlbmVyKCkgeworCQkJcHVibGljIHZvaWQgcGFydEFjdGl2YXRlZChJV29ya2JlbmNoUGFydCBwKSB7CisJCQkJaWYgKHAgaW5zdGFuY2VvZiBDb250ZW50T3V0bGluZSkgeworCQkJCQlpZiAoKChDb250ZW50T3V0bGluZSlwKS5nZXRDdXJyZW50UGFnZSgpID09IGNvbnRlbnRPdXRsaW5lUGFnZSkgeworCQkJCQkJZ2V0QWN0aW9uQmFyQ29udHJpYnV0b3IoKS5zZXRBY3RpdmVFZGl0b3IoVHJhbnNwb3J0RWRpdG9yLnRoaXMpOworCisJCQkJCQlzZXRDdXJyZW50Vmlld2VyKGNvbnRlbnRPdXRsaW5lVmlld2VyKTsKKwkJCQkJfQorCQkJCX0KKwkJCQllbHNlIGlmIChwIGluc3RhbmNlb2YgUHJvcGVydHlTaGVldCkgeworCQkJCQlpZiAoKChQcm9wZXJ0eVNoZWV0KXApLmdldEN1cnJlbnRQYWdlKCkgPT0gcHJvcGVydHlTaGVldFBhZ2UpIHsKKwkJCQkJCWdldEFjdGlvbkJhckNvbnRyaWJ1dG9yKCkuc2V0QWN0aXZlRWRpdG9yKFRyYW5zcG9ydEVkaXRvci50aGlzKTsKKwkJCQkJCWhhbmRsZUFjdGl2YXRlKCk7CisJCQkJCX0KKwkJCQl9CisJCQkJZWxzZSBpZiAocCA9PSBUcmFuc3BvcnRFZGl0b3IudGhpcykgeworCQkJCQloYW5kbGVBY3RpdmF0ZSgpOworCQkJCX0KKwkJCX0KKwkJCXB1YmxpYyB2b2lkIHBhcnRCcm91Z2h0VG9Ub3AoSVdvcmtiZW5jaFBhcnQgcCkgeworCQkJCS8vIElnbm9yZS4KKwkJCX0KKwkJCXB1YmxpYyB2b2lkIHBhcnRDbG9zZWQoSVdvcmtiZW5jaFBhcnQgcCkgeworCQkJCS8vIElnbm9yZS4KKwkJCX0KKwkJCXB1YmxpYyB2b2lkIHBhcnREZWFjdGl2YXRlZChJV29ya2JlbmNoUGFydCBwKSB7CisJCQkJLy8gSWdub3JlLgorCQkJfQorCQkJcHVibGljIHZvaWQgcGFydE9wZW5lZChJV29ya2JlbmNoUGFydCBwKSB7CisJCQkJLy8gSWdub3JlLgorCQkJfQorCQl9OworCisJLyoqCisJICogUmVzb3VyY2VzIHRoYXQgaGF2ZSBiZWVuIHJlbW92ZWQgc2luY2UgbGFzdCBhY3RpdmF0aW9uLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBDb2xsZWN0aW9uPFJlc291cmNlPiByZW1vdmVkUmVzb3VyY2VzID0gbmV3IEFycmF5TGlzdDxSZXNvdXJjZT4oKTsKKworCS8qKgorCSAqIFJlc291cmNlcyB0aGF0IGhhdmUgYmVlbiBjaGFuZ2VkIHNpbmNlIGxhc3QgYWN0aXZhdGlvbi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgQ29sbGVjdGlvbjxSZXNvdXJjZT4gY2hhbmdlZFJlc291cmNlcyA9IG5ldyBBcnJheUxpc3Q8UmVzb3VyY2U+KCk7CisKKwkvKioKKwkgKiBSZXNvdXJjZXMgdGhhdCBoYXZlIGJlZW4gc2F2ZWQuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIENvbGxlY3Rpb248UmVzb3VyY2U+IHNhdmVkUmVzb3VyY2VzID0gbmV3IEFycmF5TGlzdDxSZXNvdXJjZT4oKTsKKworCS8qKgorCSAqIE1hcCB0byBzdG9yZSB0aGUgZGlhZ25vc3RpYyBhc3NvY2lhdGVkIHdpdGggYSByZXNvdXJjZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgTWFwPFJlc291cmNlLCBEaWFnbm9zdGljPiByZXNvdXJjZVRvRGlhZ25vc3RpY01hcCA9IG5ldyBMaW5rZWRIYXNoTWFwPFJlc291cmNlLCBEaWFnbm9zdGljPigpOworCisJLyoqCisJICogQ29udHJvbHMgd2hldGhlciB0aGUgcHJvYmxlbSBpbmRpY2F0aW9uIHNob3VsZCBiZSB1cGRhdGVkLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBib29sZWFuIHVwZGF0ZVByb2JsZW1JbmRpY2F0aW9uID0gdHJ1ZTsKKworCS8qKgorCSAqIEFkYXB0ZXIgdXNlZCB0byB1cGRhdGUgdGhlIHByb2JsZW0gaW5kaWNhdGlvbiB3aGVuIHJlc291cmNlcyBhcmUgZGVtYW5kZWQgbG9hZGVkLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBFQ29udGVudEFkYXB0ZXIgcHJvYmxlbUluZGljYXRpb25BZGFwdGVyID0gCisJCW5ldyBFQ29udGVudEFkYXB0ZXIoKSB7CisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyB2b2lkIG5vdGlmeUNoYW5nZWQoTm90aWZpY2F0aW9uIG5vdGlmaWNhdGlvbikgeworCQkJCWlmIChub3RpZmljYXRpb24uZ2V0Tm90aWZpZXIoKSBpbnN0YW5jZW9mIFJlc291cmNlKSB7CisJCQkJCXN3aXRjaCAobm90aWZpY2F0aW9uLmdldEZlYXR1cmVJRChSZXNvdXJjZS5jbGFzcykpIHsKKwkJCQkJCWNhc2UgUmVzb3VyY2UuUkVTT1VSQ0VfX0lTX0xPQURFRDoKKwkJCQkJCWNhc2UgUmVzb3VyY2UuUkVTT1VSQ0VfX0VSUk9SUzoKKwkJCQkJCWNhc2UgUmVzb3VyY2UuUkVTT1VSQ0VfX1dBUk5JTkdTOiB7CisJCQkJCQkJUmVzb3VyY2UgcmVzb3VyY2UgPSAoUmVzb3VyY2Upbm90aWZpY2F0aW9uLmdldE5vdGlmaWVyKCk7CisJCQkJCQkJRGlhZ25vc3RpYyBkaWFnbm9zdGljID0gYW5hbHl6ZVJlc291cmNlUHJvYmxlbXMocmVzb3VyY2UsIG51bGwpOworCQkJCQkJCWlmIChkaWFnbm9zdGljLmdldFNldmVyaXR5KCkgIT0gRGlhZ25vc3RpYy5PSykgeworCQkJCQkJCQlyZXNvdXJjZVRvRGlhZ25vc3RpY01hcC5wdXQocmVzb3VyY2UsIGRpYWdub3N0aWMpOworCQkJCQkJCX0KKwkJCQkJCQllbHNlIHsKKwkJCQkJCQkJcmVzb3VyY2VUb0RpYWdub3N0aWNNYXAucmVtb3ZlKHJlc291cmNlKTsKKwkJCQkJCQl9CisKKwkJCQkJCQlpZiAodXBkYXRlUHJvYmxlbUluZGljYXRpb24pIHsKKwkJCQkJCQkJZ2V0U2l0ZSgpLmdldFNoZWxsKCkuZ2V0RGlzcGxheSgpLmFzeW5jRXhlYworCQkJCQkJCQkJKG5ldyBSdW5uYWJsZSgpIHsKKwkJCQkJCQkJCQkgcHVibGljIHZvaWQgcnVuKCkgeworCQkJCQkJCQkJCQkgdXBkYXRlUHJvYmxlbUluZGljYXRpb24oKTsKKwkJCQkJCQkJCQkgfQorCQkJCQkJCQkJIH0pOworCQkJCQkJCX0KKwkJCQkJCQlicmVhazsKKwkJCQkJCX0KKwkJCQkJfQorCQkJCX0KKwkJCQllbHNlIHsKKwkJCQkJc3VwZXIubm90aWZ5Q2hhbmdlZChub3RpZmljYXRpb24pOworCQkJCX0KKwkJCX0KKworCQkJQE92ZXJyaWRlCisJCQlwcm90ZWN0ZWQgdm9pZCBzZXRUYXJnZXQoUmVzb3VyY2UgdGFyZ2V0KSB7CisJCQkJYmFzaWNTZXRUYXJnZXQodGFyZ2V0KTsKKwkJCX0KKworCQkJQE92ZXJyaWRlCisJCQlwcm90ZWN0ZWQgdm9pZCB1bnNldFRhcmdldChSZXNvdXJjZSB0YXJnZXQpIHsKKwkJCQliYXNpY1Vuc2V0VGFyZ2V0KHRhcmdldCk7CisJCQl9CisJCX07CisKKwkvKioKKwkgKiBUaGlzIGxpc3RlbnMgZm9yIHdvcmtzcGFjZSBjaGFuZ2VzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBJUmVzb3VyY2VDaGFuZ2VMaXN0ZW5lciByZXNvdXJjZUNoYW5nZUxpc3RlbmVyID0KKwkJbmV3IElSZXNvdXJjZUNoYW5nZUxpc3RlbmVyKCkgeworCQkJcHVibGljIHZvaWQgcmVzb3VyY2VDaGFuZ2VkKElSZXNvdXJjZUNoYW5nZUV2ZW50IGV2ZW50KSB7CisJCQkJSVJlc291cmNlRGVsdGEgZGVsdGEgPSBldmVudC5nZXREZWx0YSgpOworCQkJCXRyeSB7CisJCQkJCWNsYXNzIFJlc291cmNlRGVsdGFWaXNpdG9yIGltcGxlbWVudHMgSVJlc291cmNlRGVsdGFWaXNpdG9yIHsKKwkJCQkJCXByb3RlY3RlZCBSZXNvdXJjZVNldCByZXNvdXJjZVNldCA9IGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKTsKKwkJCQkJCXByb3RlY3RlZCBDb2xsZWN0aW9uPFJlc291cmNlPiBjaGFuZ2VkUmVzb3VyY2VzID0gbmV3IEFycmF5TGlzdDxSZXNvdXJjZT4oKTsKKwkJCQkJCXByb3RlY3RlZCBDb2xsZWN0aW9uPFJlc291cmNlPiByZW1vdmVkUmVzb3VyY2VzID0gbmV3IEFycmF5TGlzdDxSZXNvdXJjZT4oKTsKKworCQkJCQkJcHVibGljIGJvb2xlYW4gdmlzaXQoSVJlc291cmNlRGVsdGEgZGVsdGEpIHsKKwkJCQkJCQlpZiAoZGVsdGEuZ2V0UmVzb3VyY2UoKS5nZXRUeXBlKCkgPT0gSVJlc291cmNlLkZJTEUpIHsKKwkJCQkJCQkJaWYgKGRlbHRhLmdldEtpbmQoKSA9PSBJUmVzb3VyY2VEZWx0YS5SRU1PVkVEIHx8CisJCQkJCQkJCSAgICBkZWx0YS5nZXRLaW5kKCkgPT0gSVJlc291cmNlRGVsdGEuQ0hBTkdFRCAmJiBkZWx0YS5nZXRGbGFncygpICE9IElSZXNvdXJjZURlbHRhLk1BUktFUlMpIHsKKwkJCQkJCQkJCVJlc291cmNlIHJlc291cmNlID0gcmVzb3VyY2VTZXQuZ2V0UmVzb3VyY2UoVVJJLmNyZWF0ZVBsYXRmb3JtUmVzb3VyY2VVUkkoZGVsdGEuZ2V0RnVsbFBhdGgoKS50b1N0cmluZygpLCB0cnVlKSwgZmFsc2UpOworCQkJCQkJCQkJaWYgKHJlc291cmNlICE9IG51bGwpIHsKKwkJCQkJCQkJCQlpZiAoZGVsdGEuZ2V0S2luZCgpID09IElSZXNvdXJjZURlbHRhLlJFTU9WRUQpIHsKKwkJCQkJCQkJCQkJcmVtb3ZlZFJlc291cmNlcy5hZGQocmVzb3VyY2UpOworCQkJCQkJCQkJCX0KKwkJCQkJCQkJCQllbHNlIGlmICghc2F2ZWRSZXNvdXJjZXMucmVtb3ZlKHJlc291cmNlKSkgeworCQkJCQkJCQkJCQljaGFuZ2VkUmVzb3VyY2VzLmFkZChyZXNvdXJjZSk7CisJCQkJCQkJCQkJfQorCQkJCQkJCQkJfQorCQkJCQkJCQl9CisJCQkJCQkJfQorCisJCQkJCQkJcmV0dXJuIHRydWU7CisJCQkJCQl9CisKKwkJCQkJCXB1YmxpYyBDb2xsZWN0aW9uPFJlc291cmNlPiBnZXRDaGFuZ2VkUmVzb3VyY2VzKCkgeworCQkJCQkJCXJldHVybiBjaGFuZ2VkUmVzb3VyY2VzOworCQkJCQkJfQorCisJCQkJCQlwdWJsaWMgQ29sbGVjdGlvbjxSZXNvdXJjZT4gZ2V0UmVtb3ZlZFJlc291cmNlcygpIHsKKwkJCQkJCQlyZXR1cm4gcmVtb3ZlZFJlc291cmNlczsKKwkJCQkJCX0KKwkJCQkJfQorCisJCQkJCWZpbmFsIFJlc291cmNlRGVsdGFWaXNpdG9yIHZpc2l0b3IgPSBuZXcgUmVzb3VyY2VEZWx0YVZpc2l0b3IoKTsKKwkJCQkJZGVsdGEuYWNjZXB0KHZpc2l0b3IpOworCisJCQkJCWlmICghdmlzaXRvci5nZXRSZW1vdmVkUmVzb3VyY2VzKCkuaXNFbXB0eSgpKSB7CisJCQkJCQlnZXRTaXRlKCkuZ2V0U2hlbGwoKS5nZXREaXNwbGF5KCkuYXN5bmNFeGVjCisJCQkJCQkJKG5ldyBSdW5uYWJsZSgpIHsKKwkJCQkJCQkJIHB1YmxpYyB2b2lkIHJ1bigpIHsKKwkJCQkJCQkJCSByZW1vdmVkUmVzb3VyY2VzLmFkZEFsbCh2aXNpdG9yLmdldFJlbW92ZWRSZXNvdXJjZXMoKSk7CisJCQkJCQkJCQkgaWYgKCFpc0RpcnR5KCkpIHsKKwkJCQkJCQkJCQkgZ2V0U2l0ZSgpLmdldFBhZ2UoKS5jbG9zZUVkaXRvcihUcmFuc3BvcnRFZGl0b3IudGhpcywgZmFsc2UpOworCQkJCQkJCQkJIH0KKwkJCQkJCQkJIH0KKwkJCQkJCQkgfSk7CisJCQkJCX0KKworCQkJCQlpZiAoIXZpc2l0b3IuZ2V0Q2hhbmdlZFJlc291cmNlcygpLmlzRW1wdHkoKSkgeworCQkJCQkJZ2V0U2l0ZSgpLmdldFNoZWxsKCkuZ2V0RGlzcGxheSgpLmFzeW5jRXhlYworCQkJCQkJCShuZXcgUnVubmFibGUoKSB7CisJCQkJCQkJCSBwdWJsaWMgdm9pZCBydW4oKSB7CisJCQkJCQkJCQkgY2hhbmdlZFJlc291cmNlcy5hZGRBbGwodmlzaXRvci5nZXRDaGFuZ2VkUmVzb3VyY2VzKCkpOworCQkJCQkJCQkJIGlmIChnZXRTaXRlKCkuZ2V0UGFnZSgpLmdldEFjdGl2ZUVkaXRvcigpID09IFRyYW5zcG9ydEVkaXRvci50aGlzKSB7CisJCQkJCQkJCQkJIGhhbmRsZUFjdGl2YXRlKCk7CisJCQkJCQkJCQkgfQorCQkJCQkJCQkgfQorCQkJCQkJCSB9KTsKKwkJCQkJfQorCQkJCX0KKwkJCQljYXRjaCAoQ29yZUV4Y2VwdGlvbiBleGNlcHRpb24pIHsKKwkJCQkJVHJhbnNwb3J0RWRpdG9yUGx1Z2luLklOU1RBTkNFLmxvZyhleGNlcHRpb24pOworCQkJCX0KKwkJCX0KKwkJfTsKKworCS8qKgorCSAqIEhhbmRsZXMgYWN0aXZhdGlvbiBvZiB0aGUgZWRpdG9yIG9yIGl0J3MgYXNzb2NpYXRlZCB2aWV3cy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBoYW5kbGVBY3RpdmF0ZSgpIHsKKwkJLy8gUmVjb21wdXRlIHRoZSByZWFkIG9ubHkgc3RhdGUuCisJCS8vCisJCWlmIChlZGl0aW5nRG9tYWluLmdldFJlc291cmNlVG9SZWFkT25seU1hcCgpICE9IG51bGwpIHsKKwkJICBlZGl0aW5nRG9tYWluLmdldFJlc291cmNlVG9SZWFkT25seU1hcCgpLmNsZWFyKCk7CisKKwkJICAvLyBSZWZyZXNoIGFueSBhY3Rpb25zIHRoYXQgbWF5IGJlY29tZSBlbmFibGVkIG9yIGRpc2FibGVkLgorCQkgIC8vCisJCSAgc2V0U2VsZWN0aW9uKGdldFNlbGVjdGlvbigpKTsKKwkJfQorCisJCWlmICghcmVtb3ZlZFJlc291cmNlcy5pc0VtcHR5KCkpIHsKKwkJCWlmIChoYW5kbGVEaXJ0eUNvbmZsaWN0KCkpIHsKKwkJCQlnZXRTaXRlKCkuZ2V0UGFnZSgpLmNsb3NlRWRpdG9yKFRyYW5zcG9ydEVkaXRvci50aGlzLCBmYWxzZSk7CisJCQl9CisJCQllbHNlIHsKKwkJCQlyZW1vdmVkUmVzb3VyY2VzLmNsZWFyKCk7CisJCQkJY2hhbmdlZFJlc291cmNlcy5jbGVhcigpOworCQkJCXNhdmVkUmVzb3VyY2VzLmNsZWFyKCk7CisJCQl9CisJCX0KKwkJZWxzZSBpZiAoIWNoYW5nZWRSZXNvdXJjZXMuaXNFbXB0eSgpKSB7CisJCQljaGFuZ2VkUmVzb3VyY2VzLnJlbW92ZUFsbChzYXZlZFJlc291cmNlcyk7CisJCQloYW5kbGVDaGFuZ2VkUmVzb3VyY2VzKCk7CisJCQljaGFuZ2VkUmVzb3VyY2VzLmNsZWFyKCk7CisJCQlzYXZlZFJlc291cmNlcy5jbGVhcigpOworCQl9CisJfQorCisJLyoqCisJICogSGFuZGxlcyB3aGF0IHRvIGRvIHdpdGggY2hhbmdlZCByZXNvdXJjZXMgb24gYWN0aXZhdGlvbi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBoYW5kbGVDaGFuZ2VkUmVzb3VyY2VzKCkgeworCQlpZiAoIWNoYW5nZWRSZXNvdXJjZXMuaXNFbXB0eSgpICYmICghaXNEaXJ0eSgpIHx8IGhhbmRsZURpcnR5Q29uZmxpY3QoKSkpIHsKKwkJCWlmIChpc0RpcnR5KCkpIHsKKwkJCQljaGFuZ2VkUmVzb3VyY2VzLmFkZEFsbChlZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkuZ2V0UmVzb3VyY2VzKCkpOworCQkJfQorCQkJZWRpdGluZ0RvbWFpbi5nZXRDb21tYW5kU3RhY2soKS5mbHVzaCgpOworCisJCQl1cGRhdGVQcm9ibGVtSW5kaWNhdGlvbiA9IGZhbHNlOworCQkJZm9yIChSZXNvdXJjZSByZXNvdXJjZSA6IGNoYW5nZWRSZXNvdXJjZXMpIHsKKwkJCQlpZiAocmVzb3VyY2UuaXNMb2FkZWQoKSkgeworCQkJCQlyZXNvdXJjZS51bmxvYWQoKTsKKwkJCQkJdHJ5IHsKKwkJCQkJCXJlc291cmNlLmxvYWQoQ29sbGVjdGlvbnMuRU1QVFlfTUFQKTsKKwkJCQkJfQorCQkJCQljYXRjaCAoSU9FeGNlcHRpb24gZXhjZXB0aW9uKSB7CisJCQkJCQlpZiAoIXJlc291cmNlVG9EaWFnbm9zdGljTWFwLmNvbnRhaW5zS2V5KHJlc291cmNlKSkgeworCQkJCQkJCXJlc291cmNlVG9EaWFnbm9zdGljTWFwLnB1dChyZXNvdXJjZSwgYW5hbHl6ZVJlc291cmNlUHJvYmxlbXMocmVzb3VyY2UsIGV4Y2VwdGlvbikpOworCQkJCQkJfQorCQkJCQl9CisJCQkJfQorCQkJfQorCisJCQlpZiAoQWRhcHRlckZhY3RvcnlFZGl0aW5nRG9tYWluLmlzU3RhbGUoZWRpdG9yU2VsZWN0aW9uKSkgeworCQkJCXNldFNlbGVjdGlvbihTdHJ1Y3R1cmVkU2VsZWN0aW9uLkVNUFRZKTsKKwkJCX0KKworCQkJdXBkYXRlUHJvYmxlbUluZGljYXRpb24gPSB0cnVlOworCQkJdXBkYXRlUHJvYmxlbUluZGljYXRpb24oKTsKKwkJfQorCX0KKyAgCisJLyoqCisJICogVXBkYXRlcyB0aGUgcHJvYmxlbXMgaW5kaWNhdGlvbiB3aXRoIHRoZSBpbmZvcm1hdGlvbiBkZXNjcmliZWQgaW4gdGhlIHNwZWNpZmllZCBkaWFnbm9zdGljLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIHVwZGF0ZVByb2JsZW1JbmRpY2F0aW9uKCkgeworCQlpZiAodXBkYXRlUHJvYmxlbUluZGljYXRpb24pIHsKKwkJCUJhc2ljRGlhZ25vc3RpYyBkaWFnbm9zdGljID0KKwkJCQluZXcgQmFzaWNEaWFnbm9zdGljCisJCQkJCShEaWFnbm9zdGljLk9LLAorCQkJCQkgIm9yZy5lY2xpcHNlLnN0ZW0udHJhbnNwb3J0LmVkaXRvciIsCisJCQkJCSAwLAorCQkJCQkgbnVsbCwKKwkJCQkJIG5ldyBPYmplY3QgW10geyBlZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkgfSk7CisJCQlmb3IgKERpYWdub3N0aWMgY2hpbGREaWFnbm9zdGljIDogcmVzb3VyY2VUb0RpYWdub3N0aWNNYXAudmFsdWVzKCkpIHsKKwkJCQlpZiAoY2hpbGREaWFnbm9zdGljLmdldFNldmVyaXR5KCkgIT0gRGlhZ25vc3RpYy5PSykgeworCQkJCQlkaWFnbm9zdGljLmFkZChjaGlsZERpYWdub3N0aWMpOworCQkJCX0KKwkJCX0KKworCQkJaW50IGxhc3RFZGl0b3JQYWdlID0gZ2V0UGFnZUNvdW50KCkgLSAxOworCQkJaWYgKGxhc3RFZGl0b3JQYWdlID49IDAgJiYgZ2V0RWRpdG9yKGxhc3RFZGl0b3JQYWdlKSBpbnN0YW5jZW9mIFByb2JsZW1FZGl0b3JQYXJ0KSB7CisJCQkJKChQcm9ibGVtRWRpdG9yUGFydClnZXRFZGl0b3IobGFzdEVkaXRvclBhZ2UpKS5zZXREaWFnbm9zdGljKGRpYWdub3N0aWMpOworCQkJCWlmIChkaWFnbm9zdGljLmdldFNldmVyaXR5KCkgIT0gRGlhZ25vc3RpYy5PSykgeworCQkJCQlzZXRBY3RpdmVQYWdlKGxhc3RFZGl0b3JQYWdlKTsKKwkJCQl9CisJCQl9CisJCQllbHNlIGlmIChkaWFnbm9zdGljLmdldFNldmVyaXR5KCkgIT0gRGlhZ25vc3RpYy5PSykgeworCQkJCVByb2JsZW1FZGl0b3JQYXJ0IHByb2JsZW1FZGl0b3JQYXJ0ID0gbmV3IFByb2JsZW1FZGl0b3JQYXJ0KCk7CisJCQkJcHJvYmxlbUVkaXRvclBhcnQuc2V0RGlhZ25vc3RpYyhkaWFnbm9zdGljKTsKKwkJCQlwcm9ibGVtRWRpdG9yUGFydC5zZXRNYXJrZXJIZWxwZXIobWFya2VySGVscGVyKTsKKwkJCQl0cnkgeworCQkJCQlhZGRQYWdlKCsrbGFzdEVkaXRvclBhZ2UsIHByb2JsZW1FZGl0b3JQYXJ0LCBnZXRFZGl0b3JJbnB1dCgpKTsKKwkJCQkJc2V0UGFnZVRleHQobGFzdEVkaXRvclBhZ2UsIHByb2JsZW1FZGl0b3JQYXJ0LmdldFBhcnROYW1lKCkpOworCQkJCQlzZXRBY3RpdmVQYWdlKGxhc3RFZGl0b3JQYWdlKTsKKwkJCQkJc2hvd1RhYnMoKTsKKwkJCQl9CisJCQkJY2F0Y2ggKFBhcnRJbml0RXhjZXB0aW9uIGV4Y2VwdGlvbikgeworCQkJCQlUcmFuc3BvcnRFZGl0b3JQbHVnaW4uSU5TVEFOQ0UubG9nKGV4Y2VwdGlvbik7CisJCQkJfQorCQkJfQorCisJCQlpZiAobWFya2VySGVscGVyLmhhc01hcmtlcnMoZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpKSkgeworCQkJCW1hcmtlckhlbHBlci5kZWxldGVNYXJrZXJzKGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKSk7CisJCQkJaWYgKGRpYWdub3N0aWMuZ2V0U2V2ZXJpdHkoKSAhPSBEaWFnbm9zdGljLk9LKSB7CisJCQkJCXRyeSB7CisJCQkJCQltYXJrZXJIZWxwZXIuY3JlYXRlTWFya2VycyhkaWFnbm9zdGljKTsKKwkJCQkJfQorCQkJCQljYXRjaCAoQ29yZUV4Y2VwdGlvbiBleGNlcHRpb24pIHsKKwkJCQkJCVRyYW5zcG9ydEVkaXRvclBsdWdpbi5JTlNUQU5DRS5sb2coZXhjZXB0aW9uKTsKKwkJCQkJfQorCQkJCX0KKwkJCX0KKwkJfQorCX0KKworCS8qKgorCSAqIFNob3dzIGEgZGlhbG9nIHRoYXQgYXNrcyBpZiBjb25mbGljdGluZyBjaGFuZ2VzIHNob3VsZCBiZSBkaXNjYXJkZWQuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIGJvb2xlYW4gaGFuZGxlRGlydHlDb25mbGljdCgpIHsKKwkJcmV0dXJuCisJCQlNZXNzYWdlRGlhbG9nLm9wZW5RdWVzdGlvbgorCQkJCShnZXRTaXRlKCkuZ2V0U2hlbGwoKSwKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfRmlsZUNvbmZsaWN0X2xhYmVsIiksCisJCQkJIGdldFN0cmluZygiX1dBUk5fRmlsZUNvbmZsaWN0IikpOworCX0KKworCS8qKgorCSAqIFRoaXMgY3JlYXRlcyBhIG1vZGVsIGVkaXRvci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVHJhbnNwb3J0RWRpdG9yKCkgeworCQlzdXBlcigpOworCQlpbml0aWFsaXplRWRpdGluZ0RvbWFpbigpOworCX0KKworCS8qKgorCSAqIFRoaXMgc2V0cyB1cCB0aGUgZWRpdGluZyBkb21haW4gZm9yIHRoZSBtb2RlbCBlZGl0b3IuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgaW5pdGlhbGl6ZUVkaXRpbmdEb21haW4oKSB7CisJCS8vIENyZWF0ZSBhbiBhZGFwdGVyIGZhY3RvcnkgdGhhdCB5aWVsZHMgaXRlbSBwcm92aWRlcnMuCisJCS8vCisJCWFkYXB0ZXJGYWN0b3J5ID0gbmV3IENvbXBvc2VkQWRhcHRlckZhY3RvcnkoQ29tcG9zZWRBZGFwdGVyRmFjdG9yeS5EZXNjcmlwdG9yLlJlZ2lzdHJ5LklOU1RBTkNFKTsKKworCQlhZGFwdGVyRmFjdG9yeS5hZGRBZGFwdGVyRmFjdG9yeShuZXcgUmVzb3VyY2VJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSgpKTsKKwkJYWRhcHRlckZhY3RvcnkuYWRkQWRhcHRlckZhY3RvcnkobmV3IFRyYW5zcG9ydEl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5KCkpOworCQlhZGFwdGVyRmFjdG9yeS5hZGRBZGFwdGVyRmFjdG9yeShuZXcgRWRnZXNJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSgpKTsKKwkJYWRhcHRlckZhY3RvcnkuYWRkQWRhcHRlckZhY3RvcnkobmV3IEdyYXBoSXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkoKSk7CisJCWFkYXB0ZXJGYWN0b3J5LmFkZEFkYXB0ZXJGYWN0b3J5KG5ldyBDb21tb25JdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSgpKTsKKwkJYWRhcHRlckZhY3RvcnkuYWRkQWRhcHRlckZhY3RvcnkobmV3IE1vZGVsSXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkoKSk7CisJCWFkYXB0ZXJGYWN0b3J5LmFkZEFkYXB0ZXJGYWN0b3J5KG5ldyBNb2RpZmllckl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5KCkpOworCQlhZGFwdGVyRmFjdG9yeS5hZGRBZGFwdGVyRmFjdG9yeShuZXcgRWNvcmVJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSgpKTsKKwkJYWRhcHRlckZhY3RvcnkuYWRkQWRhcHRlckZhY3RvcnkobmV3IFNjZW5hcmlvSXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkoKSk7CisJCWFkYXB0ZXJGYWN0b3J5LmFkZEFkYXB0ZXJGYWN0b3J5KG5ldyBTZXF1ZW5jZXJJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSgpKTsKKwkJYWRhcHRlckZhY3RvcnkuYWRkQWRhcHRlckZhY3RvcnkobmV3IFNvbHZlckl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5KCkpOworCQlhZGFwdGVyRmFjdG9yeS5hZGRBZGFwdGVyRmFjdG9yeShuZXcgUmVmbGVjdGl2ZUl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5KCkpOworCisJCS8vIENyZWF0ZSB0aGUgY29tbWFuZCBzdGFjayB0aGF0IHdpbGwgbm90aWZ5IHRoaXMgZWRpdG9yIGFzIGNvbW1hbmRzIGFyZSBleGVjdXRlZC4KKwkJLy8KKwkJQmFzaWNDb21tYW5kU3RhY2sgY29tbWFuZFN0YWNrID0gbmV3IEJhc2ljQ29tbWFuZFN0YWNrKCk7CisKKwkJLy8gQWRkIGEgbGlzdGVuZXIgdG8gc2V0IHRoZSBtb3N0IHJlY2VudCBjb21tYW5kJ3MgYWZmZWN0ZWQgb2JqZWN0cyB0byBiZSB0aGUgc2VsZWN0aW9uIG9mIHRoZSB2aWV3ZXIgd2l0aCBmb2N1cy4KKwkJLy8KKwkJY29tbWFuZFN0YWNrLmFkZENvbW1hbmRTdGFja0xpc3RlbmVyCisJCQkobmV3IENvbW1hbmRTdGFja0xpc3RlbmVyKCkgeworCQkJCSBwdWJsaWMgdm9pZCBjb21tYW5kU3RhY2tDaGFuZ2VkKGZpbmFsIEV2ZW50T2JqZWN0IGV2ZW50KSB7CisJCQkJCSBnZXRDb250YWluZXIoKS5nZXREaXNwbGF5KCkuYXN5bmNFeGVjCisJCQkJCQkgKG5ldyBSdW5uYWJsZSgpIHsKKwkJCQkJCQkgIHB1YmxpYyB2b2lkIHJ1bigpIHsKKwkJCQkJCQkJICBmaXJlUHJvcGVydHlDaGFuZ2UoSUVkaXRvclBhcnQuUFJPUF9ESVJUWSk7CisKKwkJCQkJCQkJICAvLyBUcnkgdG8gc2VsZWN0IHRoZSBhZmZlY3RlZCBvYmplY3RzLgorCQkJCQkJCQkgIC8vCisJCQkJCQkJCSAgQ29tbWFuZCBtb3N0UmVjZW50Q29tbWFuZCA9ICgoQ29tbWFuZFN0YWNrKWV2ZW50LmdldFNvdXJjZSgpKS5nZXRNb3N0UmVjZW50Q29tbWFuZCgpOworCQkJCQkJCQkgIGlmIChtb3N0UmVjZW50Q29tbWFuZCAhPSBudWxsKSB7CisJCQkJCQkJCQkgIHNldFNlbGVjdGlvblRvVmlld2VyKG1vc3RSZWNlbnRDb21tYW5kLmdldEFmZmVjdGVkT2JqZWN0cygpKTsKKwkJCQkJCQkJICB9CisJCQkJCQkJCSAgaWYgKHByb3BlcnR5U2hlZXRQYWdlICE9IG51bGwgJiYgIXByb3BlcnR5U2hlZXRQYWdlLmdldENvbnRyb2woKS5pc0Rpc3Bvc2VkKCkpIHsKKwkJCQkJCQkJCSAgcHJvcGVydHlTaGVldFBhZ2UucmVmcmVzaCgpOworCQkJCQkJCQkgIH0KKwkJCQkJCQkgIH0KKwkJCQkJCSAgfSk7CisJCQkJIH0KKwkJCSB9KTsKKworCQkvLyBDcmVhdGUgdGhlIGVkaXRpbmcgZG9tYWluIHdpdGggYSBzcGVjaWFsIGNvbW1hbmQgc3RhY2suCisJCS8vCisJCWVkaXRpbmdEb21haW4gPSBuZXcgQWRhcHRlckZhY3RvcnlFZGl0aW5nRG9tYWluKGFkYXB0ZXJGYWN0b3J5LCBjb21tYW5kU3RhY2ssIG5ldyBIYXNoTWFwPFJlc291cmNlLCBCb29sZWFuPigpKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGlzIGhlcmUgZm9yIHRoZSBsaXN0ZW5lciB0byBiZSBhYmxlIHRvIGNhbGwgaXQuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJCQlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgdm9pZCBmaXJlUHJvcGVydHlDaGFuZ2UoaW50IGFjdGlvbikgeworCQlzdXBlci5maXJlUHJvcGVydHlDaGFuZ2UoYWN0aW9uKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHNldHMgdGhlIHNlbGVjdGlvbiBpbnRvIHdoaWNoZXZlciB2aWV3ZXIgaXMgYWN0aXZlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIHNldFNlbGVjdGlvblRvVmlld2VyKENvbGxlY3Rpb248Pz4gY29sbGVjdGlvbikgeworCQlmaW5hbCBDb2xsZWN0aW9uPD8+IHRoZVNlbGVjdGlvbiA9IGNvbGxlY3Rpb247CisJCS8vIE1ha2Ugc3VyZSBpdCdzIG9rYXkuCisJCS8vCisJCWlmICh0aGVTZWxlY3Rpb24gIT0gbnVsbCAmJiAhdGhlU2VsZWN0aW9uLmlzRW1wdHkoKSkgeworCQkJUnVubmFibGUgcnVubmFibGUgPQorCQkJCW5ldyBSdW5uYWJsZSgpIHsKKwkJCQkJcHVibGljIHZvaWQgcnVuKCkgeworCQkJCQkJLy8gVHJ5IHRvIHNlbGVjdCB0aGUgaXRlbXMgaW4gdGhlIGN1cnJlbnQgY29udGVudCB2aWV3ZXIgb2YgdGhlIGVkaXRvci4KKwkJCQkJCS8vCisJCQkJCQlpZiAoY3VycmVudFZpZXdlciAhPSBudWxsKSB7CisJCQkJCQkJY3VycmVudFZpZXdlci5zZXRTZWxlY3Rpb24obmV3IFN0cnVjdHVyZWRTZWxlY3Rpb24odGhlU2VsZWN0aW9uLnRvQXJyYXkoKSksIHRydWUpOworCQkJCQkJfQorCQkJCQl9CisJCQkJfTsKKwkJCWdldFNpdGUoKS5nZXRTaGVsbCgpLmdldERpc3BsYXkoKS5hc3luY0V4ZWMocnVubmFibGUpOworCQl9CisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIHRoZSBlZGl0aW5nIGRvbWFpbiBhcyByZXF1aXJlZCBieSB0aGUge0BsaW5rIElFZGl0aW5nRG9tYWluUHJvdmlkZXJ9IGludGVyZmFjZS4KKwkgKiBUaGlzIGlzIGltcG9ydGFudCBmb3IgaW1wbGVtZW50aW5nIHRoZSBzdGF0aWMgbWV0aG9kcyBvZiB7QGxpbmsgQWRhcHRlckZhY3RvcnlFZGl0aW5nRG9tYWlufQorCSAqIGFuZCBmb3Igc3VwcG9ydGluZyB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkuYWN0aW9uLkNvbW1hbmRBY3Rpb259LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFZGl0aW5nRG9tYWluIGdldEVkaXRpbmdEb21haW4oKSB7CisJCXJldHVybiBlZGl0aW5nRG9tYWluOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBjbGFzcyBSZXZlcnNlQWRhcHRlckZhY3RvcnlDb250ZW50UHJvdmlkZXIgZXh0ZW5kcyBBZGFwdGVyRmFjdG9yeUNvbnRlbnRQcm92aWRlciB7CisJCS8qKgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJcHVibGljIFJldmVyc2VBZGFwdGVyRmFjdG9yeUNvbnRlbnRQcm92aWRlcihBZGFwdGVyRmFjdG9yeSBhZGFwdGVyRmFjdG9yeSkgeworCQkJc3VwZXIoYWRhcHRlckZhY3RvcnkpOworCQl9CisKKwkJLyoqCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlAT3ZlcnJpZGUKKwkJcHVibGljIE9iamVjdCBbXSBnZXRFbGVtZW50cyhPYmplY3Qgb2JqZWN0KSB7CisJCQlPYmplY3QgcGFyZW50ID0gc3VwZXIuZ2V0UGFyZW50KG9iamVjdCk7CisJCQlyZXR1cm4gKHBhcmVudCA9PSBudWxsID8gQ29sbGVjdGlvbnMuRU1QVFlfU0VUIDogQ29sbGVjdGlvbnMuc2luZ2xldG9uKHBhcmVudCkpLnRvQXJyYXkoKTsKKwkJfQorCisJCS8qKgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJQE92ZXJyaWRlCisJCXB1YmxpYyBPYmplY3QgW10gZ2V0Q2hpbGRyZW4oT2JqZWN0IG9iamVjdCkgeworCQkJT2JqZWN0IHBhcmVudCA9IHN1cGVyLmdldFBhcmVudChvYmplY3QpOworCQkJcmV0dXJuIChwYXJlbnQgPT0gbnVsbCA/IENvbGxlY3Rpb25zLkVNUFRZX1NFVCA6IENvbGxlY3Rpb25zLnNpbmdsZXRvbihwYXJlbnQpKS50b0FycmF5KCk7CisJCX0KKworCQkvKioKKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUBPdmVycmlkZQorCQlwdWJsaWMgYm9vbGVhbiBoYXNDaGlsZHJlbihPYmplY3Qgb2JqZWN0KSB7CisJCQlPYmplY3QgcGFyZW50ID0gc3VwZXIuZ2V0UGFyZW50KG9iamVjdCk7CisJCQlyZXR1cm4gcGFyZW50ICE9IG51bGw7CisJCX0KKworCQkvKioKKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUBPdmVycmlkZQorCQlwdWJsaWMgT2JqZWN0IGdldFBhcmVudChPYmplY3Qgb2JqZWN0KSB7CisJCQlyZXR1cm4gbnVsbDsKKwkJfQorCX0KKworCS8qKgorCSAqIFRoaXMgbWFrZXMgc3VyZSB0aGF0IG9uZSBjb250ZW50IHZpZXdlciwgZWl0aGVyIGZvciB0aGUgY3VycmVudCBwYWdlIG9yIHRoZSBvdXRsaW5lIHZpZXcsIGlmIGl0IGhhcyBmb2N1cywKKwkgKiBpcyB0aGUgY3VycmVudCBvbmUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgc2V0Q3VycmVudFZpZXdlcihWaWV3ZXIgdmlld2VyKSB7CisJCS8vIElmIGl0IGlzIGNoYW5naW5nLi4uCisJCS8vCisJCWlmIChjdXJyZW50Vmlld2VyICE9IHZpZXdlcikgeworCQkJaWYgKHNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lciA9PSBudWxsKSB7CisJCQkJLy8gQ3JlYXRlIHRoZSBsaXN0ZW5lciBvbiBkZW1hbmQuCisJCQkJLy8KKwkJCQlzZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIgPQorCQkJCQluZXcgSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcigpIHsKKwkJCQkJCS8vIFRoaXMganVzdCBub3RpZmllcyB0aG9zZSB0aGluZ3MgdGhhdCBhcmUgYWZmZWN0ZWQgYnkgdGhlIHNlY3Rpb24uCisJCQkJCQkvLworCQkJCQkJcHVibGljIHZvaWQgc2VsZWN0aW9uQ2hhbmdlZChTZWxlY3Rpb25DaGFuZ2VkRXZlbnQgc2VsZWN0aW9uQ2hhbmdlZEV2ZW50KSB7CisJCQkJCQkJc2V0U2VsZWN0aW9uKHNlbGVjdGlvbkNoYW5nZWRFdmVudC5nZXRTZWxlY3Rpb24oKSk7CisJCQkJCQl9CisJCQkJCX07CisJCQl9CisKKwkJCS8vIFN0b3AgbGlzdGVuaW5nIHRvIHRoZSBvbGQgb25lLgorCQkJLy8KKwkJCWlmIChjdXJyZW50Vmlld2VyICE9IG51bGwpIHsKKwkJCQljdXJyZW50Vmlld2VyLnJlbW92ZVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcihzZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIpOworCQkJfQorCisJCQkvLyBTdGFydCBsaXN0ZW5pbmcgdG8gdGhlIG5ldyBvbmUuCisJCQkvLworCQkJaWYgKHZpZXdlciAhPSBudWxsKSB7CisJCQkJdmlld2VyLmFkZFNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcihzZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIpOworCQkJfQorCisJCQkvLyBSZW1lbWJlciBpdC4KKwkJCS8vCisJCQljdXJyZW50Vmlld2VyID0gdmlld2VyOworCisJCQkvLyBTZXQgdGhlIGVkaXRvcnMgc2VsZWN0aW9uIGJhc2VkIG9uIHRoZSBjdXJyZW50IHZpZXdlcidzIHNlbGVjdGlvbi4KKwkJCS8vCisJCQlzZXRTZWxlY3Rpb24oY3VycmVudFZpZXdlciA9PSBudWxsID8gU3RydWN0dXJlZFNlbGVjdGlvbi5FTVBUWSA6IGN1cnJlbnRWaWV3ZXIuZ2V0U2VsZWN0aW9uKCkpOworCQl9CisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIHRoZSB2aWV3ZXIgYXMgcmVxdWlyZWQgYnkgdGhlIHtAbGluayBJVmlld2VyUHJvdmlkZXJ9IGludGVyZmFjZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVmlld2VyIGdldFZpZXdlcigpIHsKKwkJcmV0dXJuIGN1cnJlbnRWaWV3ZXI7CisJfQorCisJLyoqCisJICogVGhpcyBjcmVhdGVzIGEgY29udGV4dCBtZW51IGZvciB0aGUgdmlld2VyIGFuZCBhZGRzIGEgbGlzdGVuZXIgYXMgd2VsbCByZWdpc3RlcmluZyB0aGUgbWVudSBmb3IgZXh0ZW5zaW9uLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIGNyZWF0ZUNvbnRleHRNZW51Rm9yKFN0cnVjdHVyZWRWaWV3ZXIgdmlld2VyKSB7CisJCU1lbnVNYW5hZ2VyIGNvbnRleHRNZW51ID0gbmV3IE1lbnVNYW5hZ2VyKCIjUG9wVXAiKTsKKwkJY29udGV4dE1lbnUuYWRkKG5ldyBTZXBhcmF0b3IoImFkZGl0aW9ucyIpKTsKKwkJY29udGV4dE1lbnUuc2V0UmVtb3ZlQWxsV2hlblNob3duKHRydWUpOworCQljb250ZXh0TWVudS5hZGRNZW51TGlzdGVuZXIodGhpcyk7CisJCU1lbnUgbWVudT0gY29udGV4dE1lbnUuY3JlYXRlQ29udGV4dE1lbnUodmlld2VyLmdldENvbnRyb2woKSk7CisJCXZpZXdlci5nZXRDb250cm9sKCkuc2V0TWVudShtZW51KTsKKwkJZ2V0U2l0ZSgpLnJlZ2lzdGVyQ29udGV4dE1lbnUoY29udGV4dE1lbnUsIG5ldyBVbndyYXBwaW5nU2VsZWN0aW9uUHJvdmlkZXIodmlld2VyKSk7CisKKwkJaW50IGRuZE9wZXJhdGlvbnMgPSBETkQuRFJPUF9DT1BZIHwgRE5ELkRST1BfTU9WRSB8IERORC5EUk9QX0xJTks7CisJCVRyYW5zZmVyW10gdHJhbnNmZXJzID0gbmV3IFRyYW5zZmVyW10geyBMb2NhbFRyYW5zZmVyLmdldEluc3RhbmNlKCkgfTsKKwkJdmlld2VyLmFkZERyYWdTdXBwb3J0KGRuZE9wZXJhdGlvbnMsIHRyYW5zZmVycywgbmV3IFZpZXdlckRyYWdBZGFwdGVyKHZpZXdlcikpOworCQl2aWV3ZXIuYWRkRHJvcFN1cHBvcnQoZG5kT3BlcmF0aW9ucywgdHJhbnNmZXJzLCBuZXcgRWRpdGluZ0RvbWFpblZpZXdlckRyb3BBZGFwdGVyKGVkaXRpbmdEb21haW4sIHZpZXdlcikpOworCX0KKworCS8qKgorCSAqIFRoaXMgaXMgdGhlIG1ldGhvZCBjYWxsZWQgdG8gbG9hZCBhIHJlc291cmNlIGludG8gdGhlIGVkaXRpbmcgZG9tYWluJ3MgcmVzb3VyY2Ugc2V0IGJhc2VkIG9uIHRoZSBlZGl0b3IncyBpbnB1dC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBjcmVhdGVNb2RlbCgpIHsKKwkJVVJJIHJlc291cmNlVVJJID0gRWRpdFVJVXRpbC5nZXRVUkkoZ2V0RWRpdG9ySW5wdXQoKSk7CisJCUV4Y2VwdGlvbiBleGNlcHRpb24gPSBudWxsOworCQlSZXNvdXJjZSByZXNvdXJjZSA9IG51bGw7CisJCXRyeSB7CisJCQkvLyBMb2FkIHRoZSByZXNvdXJjZSB0aHJvdWdoIHRoZSBlZGl0aW5nIGRvbWFpbi4KKwkJCS8vCisJCQlyZXNvdXJjZSA9IGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKS5nZXRSZXNvdXJjZShyZXNvdXJjZVVSSSwgdHJ1ZSk7CisJCX0KKwkJY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CisJCQlleGNlcHRpb24gPSBlOworCQkJcmVzb3VyY2UgPSBlZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkuZ2V0UmVzb3VyY2UocmVzb3VyY2VVUkksIGZhbHNlKTsKKwkJfQorCisJCURpYWdub3N0aWMgZGlhZ25vc3RpYyA9IGFuYWx5emVSZXNvdXJjZVByb2JsZW1zKHJlc291cmNlLCBleGNlcHRpb24pOworCQlpZiAoZGlhZ25vc3RpYy5nZXRTZXZlcml0eSgpICE9IERpYWdub3N0aWMuT0spIHsKKwkJCXJlc291cmNlVG9EaWFnbm9zdGljTWFwLnB1dChyZXNvdXJjZSwgIGFuYWx5emVSZXNvdXJjZVByb2JsZW1zKHJlc291cmNlLCBleGNlcHRpb24pKTsKKwkJfQorCQllZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkuZUFkYXB0ZXJzKCkuYWRkKHByb2JsZW1JbmRpY2F0aW9uQWRhcHRlcik7CisJfQorCisJLyoqCisJICogUmV0dXJucyBhIGRpYWdub3N0aWMgZGVzY3JpYmluZyB0aGUgZXJyb3JzIGFuZCB3YXJuaW5ncyBsaXN0ZWQgaW4gdGhlIHJlc291cmNlCisJICogYW5kIHRoZSBzcGVjaWZpZWQgZXhjZXB0aW9uIChpZiBhbnkpLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBEaWFnbm9zdGljIGFuYWx5emVSZXNvdXJjZVByb2JsZW1zKFJlc291cmNlIHJlc291cmNlLCBFeGNlcHRpb24gZXhjZXB0aW9uKSB7CisJCWlmICghcmVzb3VyY2UuZ2V0RXJyb3JzKCkuaXNFbXB0eSgpIHx8ICFyZXNvdXJjZS5nZXRXYXJuaW5ncygpLmlzRW1wdHkoKSkgeworCQkJQmFzaWNEaWFnbm9zdGljIGJhc2ljRGlhZ25vc3RpYyA9CisJCQkJbmV3IEJhc2ljRGlhZ25vc3RpYworCQkJCQkoRGlhZ25vc3RpYy5FUlJPUiwKKwkJCQkJICJvcmcuZWNsaXBzZS5zdGVtLnRyYW5zcG9ydC5lZGl0b3IiLAorCQkJCQkgMCwKKwkJCQkJIGdldFN0cmluZygiX1VJX0NyZWF0ZU1vZGVsRXJyb3JfbWVzc2FnZSIsIHJlc291cmNlLmdldFVSSSgpKSwKKwkJCQkJIG5ldyBPYmplY3QgW10geyBleGNlcHRpb24gPT0gbnVsbCA/IChPYmplY3QpcmVzb3VyY2UgOiBleGNlcHRpb24gfSk7CisJCQliYXNpY0RpYWdub3N0aWMubWVyZ2UoRWNvcmVVdGlsLmNvbXB1dGVEaWFnbm9zdGljKHJlc291cmNlLCB0cnVlKSk7CisJCQlyZXR1cm4gYmFzaWNEaWFnbm9zdGljOworCQl9CisJCWVsc2UgaWYgKGV4Y2VwdGlvbiAhPSBudWxsKSB7CisJCQlyZXR1cm4KKwkJCQluZXcgQmFzaWNEaWFnbm9zdGljCisJCQkJCShEaWFnbm9zdGljLkVSUk9SLAorCQkJCQkgIm9yZy5lY2xpcHNlLnN0ZW0udHJhbnNwb3J0LmVkaXRvciIsCisJCQkJCSAwLAorCQkJCQkgZ2V0U3RyaW5nKCJfVUlfQ3JlYXRlTW9kZWxFcnJvcl9tZXNzYWdlIiwgcmVzb3VyY2UuZ2V0VVJJKCkpLAorCQkJCQkgbmV3IE9iamVjdFtdIHsgZXhjZXB0aW9uIH0pOworCQl9CisJCWVsc2UgeworCQkJcmV0dXJuIERpYWdub3N0aWMuT0tfSU5TVEFOQ0U7CisJCX0KKwl9CisKKwkvKioKKwkgKiBUaGlzIGlzIHRoZSBtZXRob2QgdXNlZCBieSB0aGUgZnJhbWV3b3JrIHRvIGluc3RhbGwgeW91ciBvd24gY29udHJvbHMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgY3JlYXRlUGFnZXMoKSB7CisJCS8vIENyZWF0ZXMgdGhlIG1vZGVsIGZyb20gdGhlIGVkaXRvciBpbnB1dAorCQkvLworCQljcmVhdGVNb2RlbCgpOworCisJCS8vIE9ubHkgY3JlYXRlcyB0aGUgb3RoZXIgcGFnZXMgaWYgdGhlcmUgaXMgc29tZXRoaW5nIHRoYXQgY2FuIGJlIGVkaXRlZAorCQkvLworCQlpZiAoIWdldEVkaXRpbmdEb21haW4oKS5nZXRSZXNvdXJjZVNldCgpLmdldFJlc291cmNlcygpLmlzRW1wdHkoKSkgeworCQkJLy8gQ3JlYXRlIGEgcGFnZSBmb3IgdGhlIHNlbGVjdGlvbiB0cmVlIHZpZXcuCisJCQkvLworCQkJVHJlZSB0cmVlID0gbmV3IFRyZWUoZ2V0Q29udGFpbmVyKCksIFNXVC5NVUxUSSk7CisJCQlzZWxlY3Rpb25WaWV3ZXIgPSBuZXcgVHJlZVZpZXdlcih0cmVlKTsKKwkJCXNldEN1cnJlbnRWaWV3ZXIoc2VsZWN0aW9uVmlld2VyKTsKKworCQkJc2VsZWN0aW9uVmlld2VyLnNldENvbnRlbnRQcm92aWRlcihuZXcgQWRhcHRlckZhY3RvcnlDb250ZW50UHJvdmlkZXIoYWRhcHRlckZhY3RvcnkpKTsKKwkJCXNlbGVjdGlvblZpZXdlci5zZXRMYWJlbFByb3ZpZGVyKG5ldyBBZGFwdGVyRmFjdG9yeUxhYmVsUHJvdmlkZXIoYWRhcHRlckZhY3RvcnkpKTsKKwkJCXNlbGVjdGlvblZpZXdlci5zZXRJbnB1dChlZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkpOworCQkJc2VsZWN0aW9uVmlld2VyLnNldFNlbGVjdGlvbihuZXcgU3RydWN0dXJlZFNlbGVjdGlvbihlZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkuZ2V0UmVzb3VyY2VzKCkuZ2V0KDApKSwgdHJ1ZSk7CisKKwkJCW5ldyBBZGFwdGVyRmFjdG9yeVRyZWVFZGl0b3Ioc2VsZWN0aW9uVmlld2VyLmdldFRyZWUoKSwgYWRhcHRlckZhY3RvcnkpOworCisJCQljcmVhdGVDb250ZXh0TWVudUZvcihzZWxlY3Rpb25WaWV3ZXIpOworCQkJaW50IHBhZ2VJbmRleCA9IGFkZFBhZ2UodHJlZSk7CisJCQlzZXRQYWdlVGV4dChwYWdlSW5kZXgsIGdldFN0cmluZygiX1VJX1NlbGVjdGlvblBhZ2VfbGFiZWwiKSk7CisKKwkJCWdldFNpdGUoKS5nZXRTaGVsbCgpLmdldERpc3BsYXkoKS5hc3luY0V4ZWMKKwkJCQkobmV3IFJ1bm5hYmxlKCkgeworCQkJCQkgcHVibGljIHZvaWQgcnVuKCkgeworCQkJCQkJIHNldEFjdGl2ZVBhZ2UoMCk7CisJCQkJCSB9CisJCQkJIH0pOworCQl9CisKKwkJLy8gRW5zdXJlcyB0aGF0IHRoaXMgZWRpdG9yIHdpbGwgb25seSBkaXNwbGF5IHRoZSBwYWdlJ3MgdGFiCisJCS8vIGFyZWEgaWYgdGhlcmUgYXJlIG1vcmUgdGhhbiBvbmUgcGFnZQorCQkvLworCQlnZXRDb250YWluZXIoKS5hZGRDb250cm9sTGlzdGVuZXIKKwkJCShuZXcgQ29udHJvbEFkYXB0ZXIoKSB7CisJCQkJYm9vbGVhbiBndWFyZCA9IGZhbHNlOworCQkJCUBPdmVycmlkZQorCQkJCXB1YmxpYyB2b2lkIGNvbnRyb2xSZXNpemVkKENvbnRyb2xFdmVudCBldmVudCkgeworCQkJCQlpZiAoIWd1YXJkKSB7CisJCQkJCQlndWFyZCA9IHRydWU7CisJCQkJCQloaWRlVGFicygpOworCQkJCQkJZ3VhcmQgPSBmYWxzZTsKKwkJCQkJfQorCQkJCX0KKwkJCSB9KTsKKworCQlnZXRTaXRlKCkuZ2V0U2hlbGwoKS5nZXREaXNwbGF5KCkuYXN5bmNFeGVjCisJCQkobmV3IFJ1bm5hYmxlKCkgeworCQkJCSBwdWJsaWMgdm9pZCBydW4oKSB7CisJCQkJCSB1cGRhdGVQcm9ibGVtSW5kaWNhdGlvbigpOworCQkJCSB9CisJCQkgfSk7CisJfQorCisJLyoqCisJICogSWYgdGhlcmUgaXMganVzdCBvbmUgcGFnZSBpbiB0aGUgbXVsdGktcGFnZSBlZGl0b3IgcGFydCwKKwkgKiB0aGlzIGhpZGVzIHRoZSBzaW5nbGUgdGFiIGF0IHRoZSBib3R0b20uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgaGlkZVRhYnMoKSB7CisJCWlmIChnZXRQYWdlQ291bnQoKSA8PSAxKSB7CisJCQlzZXRQYWdlVGV4dCgwLCAiIik7CisJCQlpZiAoZ2V0Q29udGFpbmVyKCkgaW5zdGFuY2VvZiBDVGFiRm9sZGVyKSB7CisJCQkJKChDVGFiRm9sZGVyKWdldENvbnRhaW5lcigpKS5zZXRUYWJIZWlnaHQoMSk7CisJCQkJUG9pbnQgcG9pbnQgPSBnZXRDb250YWluZXIoKS5nZXRTaXplKCk7CisJCQkJZ2V0Q29udGFpbmVyKCkuc2V0U2l6ZShwb2ludC54LCBwb2ludC55ICsgNik7CisJCQl9CisJCX0KKwl9CisKKwkvKioKKwkgKiBJZiB0aGVyZSBpcyBtb3JlIHRoYW4gb25lIHBhZ2UgaW4gdGhlIG11bHRpLXBhZ2UgZWRpdG9yIHBhcnQsCisJICogdGhpcyBzaG93cyB0aGUgdGFicyBhdCB0aGUgYm90dG9tLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIHNob3dUYWJzKCkgeworCQlpZiAoZ2V0UGFnZUNvdW50KCkgPiAxKSB7CisJCQlzZXRQYWdlVGV4dCgwLCBnZXRTdHJpbmcoIl9VSV9TZWxlY3Rpb25QYWdlX2xhYmVsIikpOworCQkJaWYgKGdldENvbnRhaW5lcigpIGluc3RhbmNlb2YgQ1RhYkZvbGRlcikgeworCQkJCSgoQ1RhYkZvbGRlcilnZXRDb250YWluZXIoKSkuc2V0VGFiSGVpZ2h0KFNXVC5ERUZBVUxUKTsKKwkJCQlQb2ludCBwb2ludCA9IGdldENvbnRhaW5lcigpLmdldFNpemUoKTsKKwkJCQlnZXRDb250YWluZXIoKS5zZXRTaXplKHBvaW50LngsIHBvaW50LnkgLSA2KTsKKwkJCX0KKwkJfQorCX0KKworCS8qKgorCSAqIFRoaXMgaXMgdXNlZCB0byB0cmFjayB0aGUgYWN0aXZlIHZpZXdlci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgdm9pZCBwYWdlQ2hhbmdlKGludCBwYWdlSW5kZXgpIHsKKwkJc3VwZXIucGFnZUNoYW5nZShwYWdlSW5kZXgpOworCisJCWlmIChjb250ZW50T3V0bGluZVBhZ2UgIT0gbnVsbCkgeworCQkJaGFuZGxlQ29udGVudE91dGxpbmVTZWxlY3Rpb24oY29udGVudE91dGxpbmVQYWdlLmdldFNlbGVjdGlvbigpKTsKKwkJfQorCX0KKworCS8qKgorCSAqIFRoaXMgaXMgaG93IHRoZSBmcmFtZXdvcmsgZGV0ZXJtaW5lcyB3aGljaCBpbnRlcmZhY2VzIHdlIGltcGxlbWVudC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAU3VwcHJlc3NXYXJuaW5ncygicmF3dHlwZXMiKQorCUBPdmVycmlkZQorCXB1YmxpYyBPYmplY3QgZ2V0QWRhcHRlcihDbGFzcyBrZXkpIHsKKwkJaWYgKGtleS5lcXVhbHMoSUNvbnRlbnRPdXRsaW5lUGFnZS5jbGFzcykpIHsKKwkJCXJldHVybiBzaG93T3V0bGluZVZpZXcoKSA/IGdldENvbnRlbnRPdXRsaW5lUGFnZSgpIDogbnVsbDsKKwkJfQorCQllbHNlIGlmIChrZXkuZXF1YWxzKElQcm9wZXJ0eVNoZWV0UGFnZS5jbGFzcykpIHsKKwkJCXJldHVybiBnZXRQcm9wZXJ0eVNoZWV0UGFnZSgpOworCQl9CisJCWVsc2UgaWYgKGtleS5lcXVhbHMoSUdvdG9NYXJrZXIuY2xhc3MpKSB7CisJCQlyZXR1cm4gdGhpczsKKwkJfQorCQllbHNlIHsKKwkJCXJldHVybiBzdXBlci5nZXRBZGFwdGVyKGtleSk7CisJCX0KKwl9CisKKwkvKioKKwkgKiBUaGlzIGFjY2Vzc2VzIGEgY2FjaGVkIHZlcnNpb24gb2YgdGhlIGNvbnRlbnQgb3V0bGluZXIuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIElDb250ZW50T3V0bGluZVBhZ2UgZ2V0Q29udGVudE91dGxpbmVQYWdlKCkgeworCQlpZiAoY29udGVudE91dGxpbmVQYWdlID09IG51bGwpIHsKKwkJCS8vIFRoZSBjb250ZW50IG91dGxpbmUgaXMganVzdCBhIHRyZWUuCisJCQkvLworCQkJY2xhc3MgTXlDb250ZW50T3V0bGluZVBhZ2UgZXh0ZW5kcyBDb250ZW50T3V0bGluZVBhZ2UgeworCQkJCUBPdmVycmlkZQorCQkJCXB1YmxpYyB2b2lkIGNyZWF0ZUNvbnRyb2woQ29tcG9zaXRlIHBhcmVudCkgeworCQkJCQlzdXBlci5jcmVhdGVDb250cm9sKHBhcmVudCk7CisJCQkJCWNvbnRlbnRPdXRsaW5lVmlld2VyID0gZ2V0VHJlZVZpZXdlcigpOworCQkJCQljb250ZW50T3V0bGluZVZpZXdlci5hZGRTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIodGhpcyk7CisKKwkJCQkJLy8gU2V0IHVwIHRoZSB0cmVlIHZpZXdlci4KKwkJCQkJLy8KKwkJCQkJY29udGVudE91dGxpbmVWaWV3ZXIuc2V0Q29udGVudFByb3ZpZGVyKG5ldyBBZGFwdGVyRmFjdG9yeUNvbnRlbnRQcm92aWRlcihhZGFwdGVyRmFjdG9yeSkpOworCQkJCQljb250ZW50T3V0bGluZVZpZXdlci5zZXRMYWJlbFByb3ZpZGVyKG5ldyBBZGFwdGVyRmFjdG9yeUxhYmVsUHJvdmlkZXIoYWRhcHRlckZhY3RvcnkpKTsKKwkJCQkJY29udGVudE91dGxpbmVWaWV3ZXIuc2V0SW5wdXQoZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpKTsKKworCQkJCQkvLyBNYWtlIHN1cmUgb3VyIHBvcHVwcyB3b3JrLgorCQkJCQkvLworCQkJCQljcmVhdGVDb250ZXh0TWVudUZvcihjb250ZW50T3V0bGluZVZpZXdlcik7CisKKwkJCQkJaWYgKCFlZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkuZ2V0UmVzb3VyY2VzKCkuaXNFbXB0eSgpKSB7CisJCQkJCSAgLy8gU2VsZWN0IHRoZSByb290IG9iamVjdCBpbiB0aGUgdmlldy4KKwkJCQkJICAvLworCQkJCQkgIGNvbnRlbnRPdXRsaW5lVmlld2VyLnNldFNlbGVjdGlvbihuZXcgU3RydWN0dXJlZFNlbGVjdGlvbihlZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkuZ2V0UmVzb3VyY2VzKCkuZ2V0KDApKSwgdHJ1ZSk7CisJCQkJCX0KKwkJCQl9CisKKwkJCQlAT3ZlcnJpZGUKKwkJCQlwdWJsaWMgdm9pZCBtYWtlQ29udHJpYnV0aW9ucyhJTWVudU1hbmFnZXIgbWVudU1hbmFnZXIsIElUb29sQmFyTWFuYWdlciB0b29sQmFyTWFuYWdlciwgSVN0YXR1c0xpbmVNYW5hZ2VyIHN0YXR1c0xpbmVNYW5hZ2VyKSB7CisJCQkJCXN1cGVyLm1ha2VDb250cmlidXRpb25zKG1lbnVNYW5hZ2VyLCB0b29sQmFyTWFuYWdlciwgc3RhdHVzTGluZU1hbmFnZXIpOworCQkJCQljb250ZW50T3V0bGluZVN0YXR1c0xpbmVNYW5hZ2VyID0gc3RhdHVzTGluZU1hbmFnZXI7CisJCQkJfQorCisJCQkJQE92ZXJyaWRlCisJCQkJcHVibGljIHZvaWQgc2V0QWN0aW9uQmFycyhJQWN0aW9uQmFycyBhY3Rpb25CYXJzKSB7CisJCQkJCXN1cGVyLnNldEFjdGlvbkJhcnMoYWN0aW9uQmFycyk7CisJCQkJCWdldEFjdGlvbkJhckNvbnRyaWJ1dG9yKCkuc2hhcmVHbG9iYWxBY3Rpb25zKHRoaXMsIGFjdGlvbkJhcnMpOworCQkJCX0KKwkJCX0KKworCQkJY29udGVudE91dGxpbmVQYWdlID0gbmV3IE15Q29udGVudE91dGxpbmVQYWdlKCk7CisKKwkJCS8vIExpc3RlbiB0byBzZWxlY3Rpb24gc28gdGhhdCB3ZSBjYW4gaGFuZGxlIGl0IGlzIGEgc3BlY2lhbCB3YXkuCisJCQkvLworCQkJY29udGVudE91dGxpbmVQYWdlLmFkZFNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcgorCQkJCShuZXcgSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcigpIHsKKwkJCQkJIC8vIFRoaXMgZW5zdXJlcyB0aGF0IHdlIGhhbmRsZSBzZWxlY3Rpb25zIGNvcnJlY3RseS4KKwkJCQkJIC8vCisJCQkJCSBwdWJsaWMgdm9pZCBzZWxlY3Rpb25DaGFuZ2VkKFNlbGVjdGlvbkNoYW5nZWRFdmVudCBldmVudCkgeworCQkJCQkJIGhhbmRsZUNvbnRlbnRPdXRsaW5lU2VsZWN0aW9uKGV2ZW50LmdldFNlbGVjdGlvbigpKTsKKwkJCQkJIH0KKwkJCQkgfSk7CisJCX0KKworCQlyZXR1cm4gY29udGVudE91dGxpbmVQYWdlOworCX0KKworCS8qKgorCSAqIFRoaXMgYWNjZXNzZXMgYSBjYWNoZWQgdmVyc2lvbiBvZiB0aGUgcHJvcGVydHkgc2hlZXQuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIElQcm9wZXJ0eVNoZWV0UGFnZSBnZXRQcm9wZXJ0eVNoZWV0UGFnZSgpIHsKKwkJaWYgKHByb3BlcnR5U2hlZXRQYWdlID09IG51bGwpIHsKKwkJCXByb3BlcnR5U2hlZXRQYWdlID0KKwkJCQluZXcgRXh0ZW5kZWRQcm9wZXJ0eVNoZWV0UGFnZShlZGl0aW5nRG9tYWluKSB7CisJCQkJCUBPdmVycmlkZQorCQkJCQlwdWJsaWMgdm9pZCBzZXRTZWxlY3Rpb25Ub1ZpZXdlcihMaXN0PD8+IHNlbGVjdGlvbikgeworCQkJCQkJVHJhbnNwb3J0RWRpdG9yLnRoaXMuc2V0U2VsZWN0aW9uVG9WaWV3ZXIoc2VsZWN0aW9uKTsKKwkJCQkJCVRyYW5zcG9ydEVkaXRvci50aGlzLnNldEZvY3VzKCk7CisJCQkJCX0KKworCQkJCQlAT3ZlcnJpZGUKKwkJCQkJcHVibGljIHZvaWQgc2V0QWN0aW9uQmFycyhJQWN0aW9uQmFycyBhY3Rpb25CYXJzKSB7CisJCQkJCQlzdXBlci5zZXRBY3Rpb25CYXJzKGFjdGlvbkJhcnMpOworCQkJCQkJZ2V0QWN0aW9uQmFyQ29udHJpYnV0b3IoKS5zaGFyZUdsb2JhbEFjdGlvbnModGhpcywgYWN0aW9uQmFycyk7CisJCQkJCX0KKwkJCQl9OworCQkJcHJvcGVydHlTaGVldFBhZ2Uuc2V0UHJvcGVydHlTb3VyY2VQcm92aWRlcihuZXcgQWRhcHRlckZhY3RvcnlDb250ZW50UHJvdmlkZXIoYWRhcHRlckZhY3RvcnkpKTsKKwkJfQorCisJCXJldHVybiBwcm9wZXJ0eVNoZWV0UGFnZTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGRlYWxzIHdpdGggaG93IHdlIHdhbnQgc2VsZWN0aW9uIGluIHRoZSBvdXRsaW5lciB0byBhZmZlY3QgdGhlIG90aGVyIHZpZXdzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIGhhbmRsZUNvbnRlbnRPdXRsaW5lU2VsZWN0aW9uKElTZWxlY3Rpb24gc2VsZWN0aW9uKSB7CisJCWlmIChzZWxlY3Rpb25WaWV3ZXIgIT0gbnVsbCAmJiAhc2VsZWN0aW9uLmlzRW1wdHkoKSAmJiBzZWxlY3Rpb24gaW5zdGFuY2VvZiBJU3RydWN0dXJlZFNlbGVjdGlvbikgeworCQkJSXRlcmF0b3I8Pz4gc2VsZWN0ZWRFbGVtZW50cyA9ICgoSVN0cnVjdHVyZWRTZWxlY3Rpb24pc2VsZWN0aW9uKS5pdGVyYXRvcigpOworCQkJaWYgKHNlbGVjdGVkRWxlbWVudHMuaGFzTmV4dCgpKSB7CisJCQkJLy8gR2V0IHRoZSBmaXJzdCBzZWxlY3RlZCBlbGVtZW50LgorCQkJCS8vCisJCQkJT2JqZWN0IHNlbGVjdGVkRWxlbWVudCA9IHNlbGVjdGVkRWxlbWVudHMubmV4dCgpOworCisJCQkJQXJyYXlMaXN0PE9iamVjdD4gc2VsZWN0aW9uTGlzdCA9IG5ldyBBcnJheUxpc3Q8T2JqZWN0PigpOworCQkJCXNlbGVjdGlvbkxpc3QuYWRkKHNlbGVjdGVkRWxlbWVudCk7CisJCQkJd2hpbGUgKHNlbGVjdGVkRWxlbWVudHMuaGFzTmV4dCgpKSB7CisJCQkJCXNlbGVjdGlvbkxpc3QuYWRkKHNlbGVjdGVkRWxlbWVudHMubmV4dCgpKTsKKwkJCQl9CisKKwkJCQkvLyBTZXQgdGhlIHNlbGVjdGlvbiB0byB0aGUgd2lkZ2V0LgorCQkJCS8vCisJCQkJc2VsZWN0aW9uVmlld2VyLnNldFNlbGVjdGlvbihuZXcgU3RydWN0dXJlZFNlbGVjdGlvbihzZWxlY3Rpb25MaXN0KSk7CisJCQl9CisJCX0KKwl9CisKKwkvKioKKwkgKiBUaGlzIGlzIGZvciBpbXBsZW1lbnRpbmcge0BsaW5rIElFZGl0b3JQYXJ0fSBhbmQgc2ltcGx5IHRlc3RzIHRoZSBjb21tYW5kIHN0YWNrLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBib29sZWFuIGlzRGlydHkoKSB7CisJCXJldHVybiAoKEJhc2ljQ29tbWFuZFN0YWNrKWVkaXRpbmdEb21haW4uZ2V0Q29tbWFuZFN0YWNrKCkpLmlzU2F2ZU5lZWRlZCgpOworCX0KKworCS8qKgorCSAqIFRoaXMgaXMgZm9yIGltcGxlbWVudGluZyB7QGxpbmsgSUVkaXRvclBhcnR9IGFuZCBzaW1wbHkgc2F2ZXMgdGhlIG1vZGVsIGZpbGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgZG9TYXZlKElQcm9ncmVzc01vbml0b3IgcHJvZ3Jlc3NNb25pdG9yKSB7CisJCS8vIFNhdmUgb25seSByZXNvdXJjZXMgdGhhdCBoYXZlIGFjdHVhbGx5IGNoYW5nZWQuCisJCS8vCisJCWZpbmFsIE1hcDxPYmplY3QsIE9iamVjdD4gc2F2ZU9wdGlvbnMgPSBuZXcgSGFzaE1hcDxPYmplY3QsIE9iamVjdD4oKTsKKwkJc2F2ZU9wdGlvbnMucHV0KFJlc291cmNlLk9QVElPTl9TQVZFX09OTFlfSUZfQ0hBTkdFRCwgUmVzb3VyY2UuT1BUSU9OX1NBVkVfT05MWV9JRl9DSEFOR0VEX01FTU9SWV9CVUZGRVIpOworCisJCS8vIERvIHRoZSB3b3JrIHdpdGhpbiBhbiBvcGVyYXRpb24gYmVjYXVzZSB0aGlzIGlzIGEgbG9uZyBydW5uaW5nIGFjdGl2aXR5IHRoYXQgbW9kaWZpZXMgdGhlIHdvcmtiZW5jaC4KKwkJLy8KKwkJV29ya3NwYWNlTW9kaWZ5T3BlcmF0aW9uIG9wZXJhdGlvbiA9CisJCQluZXcgV29ya3NwYWNlTW9kaWZ5T3BlcmF0aW9uKCkgeworCQkJCS8vIFRoaXMgaXMgdGhlIG1ldGhvZCB0aGF0IGdldHMgaW52b2tlZCB3aGVuIHRoZSBvcGVyYXRpb24gcnVucy4KKwkJCQkvLworCQkJCUBPdmVycmlkZQorCQkJCXB1YmxpYyB2b2lkIGV4ZWN1dGUoSVByb2dyZXNzTW9uaXRvciBtb25pdG9yKSB7CisJCQkJCS8vIFNhdmUgdGhlIHJlc291cmNlcyB0byB0aGUgZmlsZSBzeXN0ZW0uCisJCQkJCS8vCisJCQkJCWJvb2xlYW4gZmlyc3QgPSB0cnVlOworCQkJCQlmb3IgKFJlc291cmNlIHJlc291cmNlIDogZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpLmdldFJlc291cmNlcygpKSB7CisJCQkJCQlpZiAoKGZpcnN0IHx8ICFyZXNvdXJjZS5nZXRDb250ZW50cygpLmlzRW1wdHkoKSB8fCBpc1BlcnNpc3RlZChyZXNvdXJjZSkpICYmICFlZGl0aW5nRG9tYWluLmlzUmVhZE9ubHkocmVzb3VyY2UpKSB7CisJCQkJCQkJdHJ5IHsKKwkJCQkJCQkJbG9uZyB0aW1lU3RhbXAgPSByZXNvdXJjZS5nZXRUaW1lU3RhbXAoKTsKKwkJCQkJCQkJcmVzb3VyY2Uuc2F2ZShzYXZlT3B0aW9ucyk7CisJCQkJCQkJCWlmIChyZXNvdXJjZS5nZXRUaW1lU3RhbXAoKSAhPSB0aW1lU3RhbXApIHsKKwkJCQkJCQkJCXNhdmVkUmVzb3VyY2VzLmFkZChyZXNvdXJjZSk7CisJCQkJCQkJCX0KKwkJCQkJCQl9CisJCQkJCQkJY2F0Y2ggKEV4Y2VwdGlvbiBleGNlcHRpb24pIHsKKwkJCQkJCQkJcmVzb3VyY2VUb0RpYWdub3N0aWNNYXAucHV0KHJlc291cmNlLCBhbmFseXplUmVzb3VyY2VQcm9ibGVtcyhyZXNvdXJjZSwgZXhjZXB0aW9uKSk7CisJCQkJCQkJfQorCQkJCQkJCWZpcnN0ID0gZmFsc2U7CisJCQkJCQl9CisJCQkJCX0KKwkJCQl9CisJCQl9OworCisJCXVwZGF0ZVByb2JsZW1JbmRpY2F0aW9uID0gZmFsc2U7CisJCXRyeSB7CisJCQkvLyBUaGlzIHJ1bnMgdGhlIG9wdGlvbnMsIGFuZCBzaG93cyBwcm9ncmVzcy4KKwkJCS8vCisJCQluZXcgUHJvZ3Jlc3NNb25pdG9yRGlhbG9nKGdldFNpdGUoKS5nZXRTaGVsbCgpKS5ydW4odHJ1ZSwgZmFsc2UsIG9wZXJhdGlvbik7CisKKwkJCS8vIFJlZnJlc2ggdGhlIG5lY2Vzc2FyeSBzdGF0ZS4KKwkJCS8vCisJCQkoKEJhc2ljQ29tbWFuZFN0YWNrKWVkaXRpbmdEb21haW4uZ2V0Q29tbWFuZFN0YWNrKCkpLnNhdmVJc0RvbmUoKTsKKwkJCWZpcmVQcm9wZXJ0eUNoYW5nZShJRWRpdG9yUGFydC5QUk9QX0RJUlRZKTsKKwkJfQorCQljYXRjaCAoRXhjZXB0aW9uIGV4Y2VwdGlvbikgeworCQkJLy8gU29tZXRoaW5nIHdlbnQgd3JvbmcgdGhhdCBzaG91bGRuJ3QuCisJCQkvLworCQkJVHJhbnNwb3J0RWRpdG9yUGx1Z2luLklOU1RBTkNFLmxvZyhleGNlcHRpb24pOworCQl9CisJCXVwZGF0ZVByb2JsZW1JbmRpY2F0aW9uID0gdHJ1ZTsKKwkJdXBkYXRlUHJvYmxlbUluZGljYXRpb24oKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgd2hldGhlciBzb21ldGhpbmcgaGFzIGJlZW4gcGVyc2lzdGVkIHRvIHRoZSBVUkkgb2YgdGhlIHNwZWNpZmllZCByZXNvdXJjZS4KKwkgKiBUaGUgaW1wbGVtZW50YXRpb24gdXNlcyB0aGUgVVJJIGNvbnZlcnRlciBmcm9tIHRoZSBlZGl0b3IncyByZXNvdXJjZSBzZXQgdG8gdHJ5IHRvIG9wZW4gYW4gaW5wdXQgc3RyZWFtLiAKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgYm9vbGVhbiBpc1BlcnNpc3RlZChSZXNvdXJjZSByZXNvdXJjZSkgeworCQlib29sZWFuIHJlc3VsdCA9IGZhbHNlOworCQl0cnkgeworCQkJSW5wdXRTdHJlYW0gc3RyZWFtID0gZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpLmdldFVSSUNvbnZlcnRlcigpLmNyZWF0ZUlucHV0U3RyZWFtKHJlc291cmNlLmdldFVSSSgpKTsKKwkJCWlmIChzdHJlYW0gIT0gbnVsbCkgeworCQkJCXJlc3VsdCA9IHRydWU7CisJCQkJc3RyZWFtLmNsb3NlKCk7CisJCQl9CisJCX0KKwkJY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKKwkJCS8vIElnbm9yZQorCQl9CisJCXJldHVybiByZXN1bHQ7CisJfQorCisJLyoqCisJICogVGhpcyBhbHdheXMgcmV0dXJucyB0cnVlIGJlY2F1c2UgaXQgaXMgbm90IGN1cnJlbnRseSBzdXBwb3J0ZWQuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIGJvb2xlYW4gaXNTYXZlQXNBbGxvd2VkKCkgeworCQlyZXR1cm4gdHJ1ZTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFsc28gY2hhbmdlcyB0aGUgZWRpdG9yJ3MgaW5wdXQuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgZG9TYXZlQXMoKSB7CisJCVNhdmVBc0RpYWxvZyBzYXZlQXNEaWFsb2cgPSBuZXcgU2F2ZUFzRGlhbG9nKGdldFNpdGUoKS5nZXRTaGVsbCgpKTsKKwkJc2F2ZUFzRGlhbG9nLm9wZW4oKTsKKwkJSVBhdGggcGF0aCA9IHNhdmVBc0RpYWxvZy5nZXRSZXN1bHQoKTsKKwkJaWYgKHBhdGggIT0gbnVsbCkgeworCQkJSUZpbGUgZmlsZSA9IFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5nZXRSb290KCkuZ2V0RmlsZShwYXRoKTsKKwkJCWlmIChmaWxlICE9IG51bGwpIHsKKwkJCQlkb1NhdmVBcyhVUkkuY3JlYXRlUGxhdGZvcm1SZXNvdXJjZVVSSShmaWxlLmdldEZ1bGxQYXRoKCkudG9TdHJpbmcoKSwgdHJ1ZSksIG5ldyBGaWxlRWRpdG9ySW5wdXQoZmlsZSkpOworCQkJfQorCQl9CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgZG9TYXZlQXMoVVJJIHVyaSwgSUVkaXRvcklucHV0IGVkaXRvcklucHV0KSB7CisJCShlZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkuZ2V0UmVzb3VyY2VzKCkuZ2V0KDApKS5zZXRVUkkodXJpKTsKKwkJc2V0SW5wdXRXaXRoTm90aWZ5KGVkaXRvcklucHV0KTsKKwkJc2V0UGFydE5hbWUoZWRpdG9ySW5wdXQuZ2V0TmFtZSgpKTsKKwkJSVByb2dyZXNzTW9uaXRvciBwcm9ncmVzc01vbml0b3IgPQorCQkJZ2V0QWN0aW9uQmFycygpLmdldFN0YXR1c0xpbmVNYW5hZ2VyKCkgIT0gbnVsbCA/CisJCQkJZ2V0QWN0aW9uQmFycygpLmdldFN0YXR1c0xpbmVNYW5hZ2VyKCkuZ2V0UHJvZ3Jlc3NNb25pdG9yKCkgOgorCQkJCW5ldyBOdWxsUHJvZ3Jlc3NNb25pdG9yKCk7CisJCWRvU2F2ZShwcm9ncmVzc01vbml0b3IpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIGdvdG9NYXJrZXIoSU1hcmtlciBtYXJrZXIpIHsKKwkJdHJ5IHsKKwkJCWlmIChtYXJrZXIuZ2V0VHlwZSgpLmVxdWFscyhFVmFsaWRhdG9yLk1BUktFUikpIHsKKwkJCQlTdHJpbmcgdXJpQXR0cmlidXRlID0gbWFya2VyLmdldEF0dHJpYnV0ZShFVmFsaWRhdG9yLlVSSV9BVFRSSUJVVEUsIG51bGwpOworCQkJCWlmICh1cmlBdHRyaWJ1dGUgIT0gbnVsbCkgeworCQkJCQlVUkkgdXJpID0gVVJJLmNyZWF0ZVVSSSh1cmlBdHRyaWJ1dGUpOworCQkJCQlFT2JqZWN0IGVPYmplY3QgPSBlZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkuZ2V0RU9iamVjdCh1cmksIHRydWUpOworCQkJCQlpZiAoZU9iamVjdCAhPSBudWxsKSB7CisJCQkJCSAgc2V0U2VsZWN0aW9uVG9WaWV3ZXIoQ29sbGVjdGlvbnMuc2luZ2xldG9uKGVkaXRpbmdEb21haW4uZ2V0V3JhcHBlcihlT2JqZWN0KSkpOworCQkJCQl9CisJCQkJfQorCQkJfQorCQl9CisJCWNhdGNoIChDb3JlRXhjZXB0aW9uIGV4Y2VwdGlvbikgeworCQkJVHJhbnNwb3J0RWRpdG9yUGx1Z2luLklOU1RBTkNFLmxvZyhleGNlcHRpb24pOworCQl9CisJfQorCisJLyoqCisJICogVGhpcyBpcyBjYWxsZWQgZHVyaW5nIHN0YXJ0dXAuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgaW5pdChJRWRpdG9yU2l0ZSBzaXRlLCBJRWRpdG9ySW5wdXQgZWRpdG9ySW5wdXQpIHsKKwkJc2V0U2l0ZShzaXRlKTsKKwkJc2V0SW5wdXRXaXRoTm90aWZ5KGVkaXRvcklucHV0KTsKKwkJc2V0UGFydE5hbWUoZWRpdG9ySW5wdXQuZ2V0TmFtZSgpKTsKKwkJc2l0ZS5zZXRTZWxlY3Rpb25Qcm92aWRlcih0aGlzKTsKKwkJc2l0ZS5nZXRQYWdlKCkuYWRkUGFydExpc3RlbmVyKHBhcnRMaXN0ZW5lcik7CisJCVJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5hZGRSZXNvdXJjZUNoYW5nZUxpc3RlbmVyKHJlc291cmNlQ2hhbmdlTGlzdGVuZXIsIElSZXNvdXJjZUNoYW5nZUV2ZW50LlBPU1RfQ0hBTkdFKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBzZXRGb2N1cygpIHsKKwkJZ2V0Q29udHJvbChnZXRBY3RpdmVQYWdlKCkpLnNldEZvY3VzKCk7CisJfQorCisJLyoqCisJICogVGhpcyBpbXBsZW1lbnRzIHtAbGluayBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb25Qcm92aWRlcn0uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgYWRkU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyKElTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIgbGlzdGVuZXIpIHsKKwkJc2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVycy5hZGQobGlzdGVuZXIpOworCX0KKworCS8qKgorCSAqIFRoaXMgaW1wbGVtZW50cyB7QGxpbmsgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uUHJvdmlkZXJ9LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIHJlbW92ZVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcihJU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyIGxpc3RlbmVyKSB7CisJCXNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcnMucmVtb3ZlKGxpc3RlbmVyKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGltcGxlbWVudHMge0BsaW5rIG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvblByb3ZpZGVyfSB0byByZXR1cm4gdGhpcyBlZGl0b3IncyBvdmVyYWxsIHNlbGVjdGlvbi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgSVNlbGVjdGlvbiBnZXRTZWxlY3Rpb24oKSB7CisJCXJldHVybiBlZGl0b3JTZWxlY3Rpb247CisJfQorCisJLyoqCisJICogVGhpcyBpbXBsZW1lbnRzIHtAbGluayBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb25Qcm92aWRlcn0gdG8gc2V0IHRoaXMgZWRpdG9yJ3Mgb3ZlcmFsbCBzZWxlY3Rpb24uCisJICogQ2FsbGluZyB0aGlzIHJlc3VsdCB3aWxsIG5vdGlmeSB0aGUgbGlzdGVuZXJzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIHNldFNlbGVjdGlvbihJU2VsZWN0aW9uIHNlbGVjdGlvbikgeworCQllZGl0b3JTZWxlY3Rpb24gPSBzZWxlY3Rpb247CisKKwkJZm9yIChJU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyIGxpc3RlbmVyIDogc2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVycykgeworCQkJbGlzdGVuZXIuc2VsZWN0aW9uQ2hhbmdlZChuZXcgU2VsZWN0aW9uQ2hhbmdlZEV2ZW50KHRoaXMsIHNlbGVjdGlvbikpOworCQl9CisJCXNldFN0YXR1c0xpbmVNYW5hZ2VyKHNlbGVjdGlvbik7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgc2V0U3RhdHVzTGluZU1hbmFnZXIoSVNlbGVjdGlvbiBzZWxlY3Rpb24pIHsKKwkJSVN0YXR1c0xpbmVNYW5hZ2VyIHN0YXR1c0xpbmVNYW5hZ2VyID0gY3VycmVudFZpZXdlciAhPSBudWxsICYmIGN1cnJlbnRWaWV3ZXIgPT0gY29udGVudE91dGxpbmVWaWV3ZXIgPworCQkJY29udGVudE91dGxpbmVTdGF0dXNMaW5lTWFuYWdlciA6IGdldEFjdGlvbkJhcnMoKS5nZXRTdGF0dXNMaW5lTWFuYWdlcigpOworCisJCWlmIChzdGF0dXNMaW5lTWFuYWdlciAhPSBudWxsKSB7CisJCQlpZiAoc2VsZWN0aW9uIGluc3RhbmNlb2YgSVN0cnVjdHVyZWRTZWxlY3Rpb24pIHsKKwkJCQlDb2xsZWN0aW9uPD8+IGNvbGxlY3Rpb24gPSAoKElTdHJ1Y3R1cmVkU2VsZWN0aW9uKXNlbGVjdGlvbikudG9MaXN0KCk7CisJCQkJc3dpdGNoIChjb2xsZWN0aW9uLnNpemUoKSkgeworCQkJCQljYXNlIDA6IHsKKwkJCQkJCXN0YXR1c0xpbmVNYW5hZ2VyLnNldE1lc3NhZ2UoZ2V0U3RyaW5nKCJfVUlfTm9PYmplY3RTZWxlY3RlZCIpKTsKKwkJCQkJCWJyZWFrOworCQkJCQl9CisJCQkJCWNhc2UgMTogeworCQkJCQkJU3RyaW5nIHRleHQgPSBuZXcgQWRhcHRlckZhY3RvcnlJdGVtRGVsZWdhdG9yKGFkYXB0ZXJGYWN0b3J5KS5nZXRUZXh0KGNvbGxlY3Rpb24uaXRlcmF0b3IoKS5uZXh0KCkpOworCQkJCQkJc3RhdHVzTGluZU1hbmFnZXIuc2V0TWVzc2FnZShnZXRTdHJpbmcoIl9VSV9TaW5nbGVPYmplY3RTZWxlY3RlZCIsIHRleHQpKTsKKwkJCQkJCWJyZWFrOworCQkJCQl9CisJCQkJCWRlZmF1bHQ6IHsKKwkJCQkJCXN0YXR1c0xpbmVNYW5hZ2VyLnNldE1lc3NhZ2UoZ2V0U3RyaW5nKCJfVUlfTXVsdGlPYmplY3RTZWxlY3RlZCIsIEludGVnZXIudG9TdHJpbmcoY29sbGVjdGlvbi5zaXplKCkpKSk7CisJCQkJCQlicmVhazsKKwkJCQkJfQorCQkJCX0KKwkJCX0KKwkJCWVsc2UgeworCQkJCXN0YXR1c0xpbmVNYW5hZ2VyLnNldE1lc3NhZ2UoIiIpOworCQkJfQorCQl9CisJfQorCisJLyoqCisJICogVGhpcyBsb29rcyB1cCBhIHN0cmluZyBpbiB0aGUgcGx1Z2luJ3MgcGx1Z2luLnByb3BlcnRpZXMgZmlsZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcml2YXRlIHN0YXRpYyBTdHJpbmcgZ2V0U3RyaW5nKFN0cmluZyBrZXkpIHsKKwkJcmV0dXJuIFRyYW5zcG9ydEVkaXRvclBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoa2V5KTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGxvb2tzIHVwIGEgc3RyaW5nIGluIHBsdWdpbi5wcm9wZXJ0aWVzLCBtYWtpbmcgYSBzdWJzdGl0dXRpb24uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIGdldFN0cmluZyhTdHJpbmcga2V5LCBPYmplY3QgczEpIHsKKwkJcmV0dXJuIFRyYW5zcG9ydEVkaXRvclBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoa2V5LCBuZXcgT2JqZWN0IFtdIHsgczEgfSk7CisJfQorCisJLyoqCisJICogVGhpcyBpbXBsZW1lbnRzIHtAbGluayBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSU1lbnVMaXN0ZW5lcn0gdG8gaGVscCBmaWxsIHRoZSBjb250ZXh0IG1lbnVzIHdpdGggY29udHJpYnV0aW9ucyBmcm9tIHRoZSBFZGl0IG1lbnUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgbWVudUFib3V0VG9TaG93KElNZW51TWFuYWdlciBtZW51TWFuYWdlcikgeworCQkoKElNZW51TGlzdGVuZXIpZ2V0RWRpdG9yU2l0ZSgpLmdldEFjdGlvbkJhckNvbnRyaWJ1dG9yKCkpLm1lbnVBYm91dFRvU2hvdyhtZW51TWFuYWdlcik7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVkaXRpbmdEb21haW5BY3Rpb25CYXJDb250cmlidXRvciBnZXRBY3Rpb25CYXJDb250cmlidXRvcigpIHsKKwkJcmV0dXJuIChFZGl0aW5nRG9tYWluQWN0aW9uQmFyQ29udHJpYnV0b3IpZ2V0RWRpdG9yU2l0ZSgpLmdldEFjdGlvbkJhckNvbnRyaWJ1dG9yKCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIElBY3Rpb25CYXJzIGdldEFjdGlvbkJhcnMoKSB7CisJCXJldHVybiBnZXRBY3Rpb25CYXJDb250cmlidXRvcigpLmdldEFjdGlvbkJhcnMoKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQWRhcHRlckZhY3RvcnkgZ2V0QWRhcHRlckZhY3RvcnkoKSB7CisJCXJldHVybiBhZGFwdGVyRmFjdG9yeTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBkaXNwb3NlKCkgeworCQl1cGRhdGVQcm9ibGVtSW5kaWNhdGlvbiA9IGZhbHNlOworCisJCVJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5yZW1vdmVSZXNvdXJjZUNoYW5nZUxpc3RlbmVyKHJlc291cmNlQ2hhbmdlTGlzdGVuZXIpOworCisJCWdldFNpdGUoKS5nZXRQYWdlKCkucmVtb3ZlUGFydExpc3RlbmVyKHBhcnRMaXN0ZW5lcik7CisKKwkJYWRhcHRlckZhY3RvcnkuZGlzcG9zZSgpOworCisJCWlmIChnZXRBY3Rpb25CYXJDb250cmlidXRvcigpLmdldEFjdGl2ZUVkaXRvcigpID09IHRoaXMpIHsKKwkJCWdldEFjdGlvbkJhckNvbnRyaWJ1dG9yKCkuc2V0QWN0aXZlRWRpdG9yKG51bGwpOworCQl9CisKKwkJaWYgKHByb3BlcnR5U2hlZXRQYWdlICE9IG51bGwpIHsKKwkJCXByb3BlcnR5U2hlZXRQYWdlLmRpc3Bvc2UoKTsKKwkJfQorCisJCWlmIChjb250ZW50T3V0bGluZVBhZ2UgIT0gbnVsbCkgeworCQkJY29udGVudE91dGxpbmVQYWdlLmRpc3Bvc2UoKTsKKwkJfQorCisJCXN1cGVyLmRpc3Bvc2UoKTsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHdoZXRoZXIgdGhlIG91dGxpbmUgdmlldyBzaG91bGQgYmUgcHJlc2VudGVkIHRvIHRoZSB1c2VyLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBib29sZWFuIHNob3dPdXRsaW5lVmlldygpIHsKKwkJcmV0dXJuIGZhbHNlOworCX0KK30KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS50cmFuc3BvcnQvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvdHJhbnNwb3J0L3ByZXNlbnRhdGlvbi9UcmFuc3BvcnRFZGl0b3JQbHVnaW4uamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS50cmFuc3BvcnQvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvdHJhbnNwb3J0L3ByZXNlbnRhdGlvbi9UcmFuc3BvcnRFZGl0b3JQbHVnaW4uamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NDEwY2MyCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLnRyYW5zcG9ydC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy90cmFuc3BvcnQvcHJlc2VudGF0aW9uL1RyYW5zcG9ydEVkaXRvclBsdWdpbi5qYXZhCkBAIC0wLDAgKzEsMTE1IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMudHJhbnNwb3J0LnByZXNlbnRhdGlvbjsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAxMSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLkVNRlBsdWdpbjsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udWkuRWNsaXBzZVVJUGx1Z2luOworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlJlc291cmNlTG9jYXRvcjsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5wcm92aWRlci5FY29yZUVkaXRQbHVnaW47CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLnByb3ZpZGVyLkNvcmVFZGl0UGx1Z2luOworCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5lZGdlcy5wcm92aWRlci5EZWZpbml0aW9uc0VkaXRQbHVnaW47CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy50cmFuc3BvcnQuYWRhcHRlcnMuVHJhbnNwb3J0TmV3TW9kaWZpZXJQYWdlQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy50cmFuc3BvcnQuYWRhcHRlcnMuVHJhbnNwb3J0UHJvcGVydHlTdHJpbmdQcm92aWRlckFkYXB0ZXJGYWN0b3J5OworCisvKioKKyAqIFRoaXMgaXMgdGhlIGNlbnRyYWwgc2luZ2xldG9uIGZvciB0aGUgVHJhbnNwb3J0IGVkaXRvciBwbHVnaW4uCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBmaW5hbCBjbGFzcyBUcmFuc3BvcnRFZGl0b3JQbHVnaW4gZXh0ZW5kcyBFTUZQbHVnaW4geworCS8qKgorCSAqIEtlZXAgdHJhY2sgb2YgdGhlIHNpbmdsZXRvbi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIFRyYW5zcG9ydEVkaXRvclBsdWdpbiBJTlNUQU5DRSA9IG5ldyBUcmFuc3BvcnRFZGl0b3JQbHVnaW4oKTsKKwkKKwkvKioKKwkgKiBLZWVwIHRyYWNrIG9mIHRoZSBzaW5nbGV0b24uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJpdmF0ZSBzdGF0aWMgSW1wbGVtZW50YXRpb24gcGx1Z2luOworCisJLyoqCisJICogQ3JlYXRlIHRoZSBpbnN0YW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVHJhbnNwb3J0RWRpdG9yUGx1Z2luKCkgeworCQlzdXBlcgorCQkJKG5ldyBSZXNvdXJjZUxvY2F0b3IgW10geworCQkJCURlZmluaXRpb25zRWRpdFBsdWdpbi5JTlNUQU5DRSwKKwkJCQlDb3JlRWRpdFBsdWdpbi5JTlNUQU5DRSwKKwkJCQlFY29yZUVkaXRQbHVnaW4uSU5TVEFOQ0UsCisJCQl9KTsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBzaW5nbGV0b24gaW5zdGFuY2Ugb2YgdGhlIEVjbGlwc2UgcGx1Z2luLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgc2luZ2xldG9uIGluc3RhbmNlLgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgUmVzb3VyY2VMb2NhdG9yIGdldFBsdWdpblJlc291cmNlTG9jYXRvcigpIHsKKwkJcmV0dXJuIHBsdWdpbjsKKwl9CisJCisJLyoqCisJICogUmV0dXJucyB0aGUgc2luZ2xldG9uIGluc3RhbmNlIG9mIHRoZSBFY2xpcHNlIHBsdWdpbi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIHNpbmdsZXRvbiBpbnN0YW5jZS4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHN0YXRpYyBJbXBsZW1lbnRhdGlvbiBnZXRQbHVnaW4oKSB7CisJCXJldHVybiBwbHVnaW47CisJfQorCQorCS8qKgorCSAqIFRoZSBhY3R1YWwgaW1wbGVtZW50YXRpb24gb2YgdGhlIEVjbGlwc2UgPGI+UGx1Z2luPC9iPi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGNsYXNzIEltcGxlbWVudGF0aW9uIGV4dGVuZHMgRWNsaXBzZVVJUGx1Z2luIHsKKwkJLyoqCisJCSAqIENyZWF0ZXMgYW4gaW5zdGFuY2UuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkIE5PVAorCQkgKi8KKwkJcHVibGljIEltcGxlbWVudGF0aW9uKCkgeworCQkJc3VwZXIoKTsKKwkKKwkJCS8vIFJlbWVtYmVyIHRoZSBzdGF0aWMgaW5zdGFuY2UuCisJCQkvLworCQkJcGx1Z2luID0gdGhpczsKKwkJCQorCQkJLy8gTmVlZCB0byByZWdpc3RlcgorCQkJbmV3IFRyYW5zcG9ydE5ld01vZGlmaWVyUGFnZUFkYXB0ZXJGYWN0b3J5KCk7CisJCQluZXcgVHJhbnNwb3J0UHJvcGVydHlTdHJpbmdQcm92aWRlckFkYXB0ZXJGYWN0b3J5KCk7CisJCX0KKwl9CisKK30KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS8uY2xhc3NwYXRoIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLy5jbGFzc3BhdGgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzA0ZTg2MQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS8uY2xhc3NwYXRoCkBAIC0wLDAgKzEsNyBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxjbGFzc3BhdGg+CisJPGNsYXNzcGF0aGVudHJ5IGtpbmQ9InNyYyIgcGF0aD0ic3JjIi8+CisJPGNsYXNzcGF0aGVudHJ5IGtpbmQ9ImNvbiIgcGF0aD0ib3JnLmVjbGlwc2UuamR0LmxhdW5jaGluZy5KUkVfQ09OVEFJTkVSL29yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC5kZWJ1Zy51aS5sYXVuY2hlci5TdGFuZGFyZFZNVHlwZS9KMlNFLTEuNSIvPgorCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJjb24iIHBhdGg9Im9yZy5lY2xpcHNlLnBkZS5jb3JlLnJlcXVpcmVkUGx1Z2lucyIvPgorCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJvdXRwdXQiIHBhdGg9ImJpbiIvPgorPC9jbGFzc3BhdGg+CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvLmN2c2lnbm9yZSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS8uY3ZzaWdub3JlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA4NWU4YmEKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvLmN2c2lnbm9yZQpAQCAtMCwwICsxIEBACitUaHVtYnMuZGIKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS8uZmJwcmVmcyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS8uZmJwcmVmcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kY2E5OWNmCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLy5mYnByZWZzCkBAIC0wLDAgKzEsMTQ3IEBACisjRmluZEJ1Z3MgVXNlciBQcmVmZXJlbmNlcworI1R1ZSBNYXkgMjcgMTY6MTA6NTggRURUIDIwMDgKK2RldGVjdG9yQXBwZW5kaW5nVG9Bbk9iamVjdE91dHB1dFN0cmVhbT1BcHBlbmRpbmdUb0FuT2JqZWN0T3V0cHV0U3RyZWFtfHRydWUKK2RldGVjdG9yQkNQTWV0aG9kUmV0dXJuQ2hlY2s9QkNQTWV0aG9kUmV0dXJuQ2hlY2t8ZmFsc2UKK2RldGVjdG9yQmFkQXBwbGV0Q29uc3RydWN0b3I9QmFkQXBwbGV0Q29uc3RydWN0b3J8ZmFsc2UKK2RldGVjdG9yQmFkUmVzdWx0U2V0QWNjZXNzPUJhZFJlc3VsdFNldEFjY2Vzc3x0cnVlCitkZXRlY3RvckJhZFN5bnRheEZvclJlZ3VsYXJFeHByZXNzaW9uPUJhZFN5bnRheEZvclJlZ3VsYXJFeHByZXNzaW9ufHRydWUKK2RldGVjdG9yQmFkVXNlT2ZSZXR1cm5WYWx1ZT1CYWRVc2VPZlJldHVyblZhbHVlfHRydWUKK2RldGVjdG9yQmFkbHlPdmVycmlkZGVuQWRhcHRlcj1CYWRseU92ZXJyaWRkZW5BZGFwdGVyfHRydWUKK2RldGVjdG9yQm9vbGVhblJldHVybk51bGw9Qm9vbGVhblJldHVybk51bGx8dHJ1ZQorZGV0ZWN0b3JDYWxsZWRNZXRob2RzPUNhbGxlZE1ldGhvZHN8dHJ1ZQorZGV0ZWN0b3JDaGVja0NhbGxzPUNoZWNrQ2FsbHN8ZmFsc2UKK2RldGVjdG9yQ2hlY2tJbW11dGFibGVBbm5vdGF0aW9uPUNoZWNrSW1tdXRhYmxlQW5ub3RhdGlvbnx0cnVlCitkZXRlY3RvckNoZWNrVHlwZVF1YWxpZmllcnM9Q2hlY2tUeXBlUXVhbGlmaWVyc3x0cnVlCitkZXRlY3RvckNsb25lSWRpb209Q2xvbmVJZGlvbXx0cnVlCitkZXRlY3RvckNvbXBhcmF0b3JJZGlvbT1Db21wYXJhdG9ySWRpb218dHJ1ZQorZGV0ZWN0b3JDb25mdXNlZEluaGVyaXRhbmNlPUNvbmZ1c2VkSW5oZXJpdGFuY2V8dHJ1ZQorZGV0ZWN0b3JDb25mdXNpb25CZXR3ZWVuSW5oZXJpdGVkQW5kT3V0ZXJNZXRob2Q9Q29uZnVzaW9uQmV0d2VlbkluaGVyaXRlZEFuZE91dGVyTWV0aG9kfHRydWUKK2RldGVjdG9yQ3Jvc3NTaXRlU2NyaXB0aW5nPUNyb3NzU2l0ZVNjcmlwdGluZ3x0cnVlCitkZXRlY3RvckRvSW5zaWRlRG9Qcml2aWxlZ2VkPURvSW5zaWRlRG9Qcml2aWxlZ2VkfHRydWUKK2RldGVjdG9yRG9udENhdGNoSWxsZWdhbE1vbml0b3JTdGF0ZUV4Y2VwdGlvbj1Eb250Q2F0Y2hJbGxlZ2FsTW9uaXRvclN0YXRlRXhjZXB0aW9ufHRydWUKK2RldGVjdG9yRG9udFVzZUVudW09RG9udFVzZUVudW18dHJ1ZQorZGV0ZWN0b3JEcm9wcGVkRXhjZXB0aW9uPURyb3BwZWRFeGNlcHRpb258dHJ1ZQorZGV0ZWN0b3JEdW1iTWV0aG9kSW52b2NhdGlvbnM9RHVtYk1ldGhvZEludm9jYXRpb25zfHRydWUKK2RldGVjdG9yRHVtYk1ldGhvZHM9RHVtYk1ldGhvZHN8dHJ1ZQorZGV0ZWN0b3JEdXBsaWNhdGVCcmFuY2hlcz1EdXBsaWNhdGVCcmFuY2hlc3x0cnVlCitkZXRlY3RvckVtcHR5WmlwRmlsZUVudHJ5PUVtcHR5WmlwRmlsZUVudHJ5fHRydWUKK2RldGVjdG9yRXFTdHJpbmdUZXN0PUVxU3RyaW5nVGVzdHxmYWxzZQorZGV0ZWN0b3JGaWVsZEl0ZW1TdW1tYXJ5PUZpZWxkSXRlbVN1bW1hcnl8dHJ1ZQorZGV0ZWN0b3JGaW5hbGl6ZXJOdWxsc0ZpZWxkcz1GaW5hbGl6ZXJOdWxsc0ZpZWxkc3x0cnVlCitkZXRlY3RvckZpbmRCYWRDYXN0PUZpbmRCYWRDYXN0fGZhbHNlCitkZXRlY3RvckZpbmRCYWRDYXN0Mj1GaW5kQmFkQ2FzdDJ8dHJ1ZQorZGV0ZWN0b3JGaW5kQmFkRXF1YWxzSW1wbGVtZW50YXRpb249RmluZEJhZEVxdWFsc0ltcGxlbWVudGF0aW9ufGZhbHNlCitkZXRlY3RvckZpbmRCYWRGb3JMb29wPUZpbmRCYWRGb3JMb29wfHRydWUKK2RldGVjdG9yRmluZEJ1Z3NTdW1tYXJ5U3RhdHM9RmluZEJ1Z3NTdW1tYXJ5U3RhdHN8dHJ1ZQorZGV0ZWN0b3JGaW5kQ2lyY3VsYXJEZXBlbmRlbmNpZXM9RmluZENpcmN1bGFyRGVwZW5kZW5jaWVzfGZhbHNlCitkZXRlY3RvckZpbmREZWFkTG9jYWxTdG9yZXM9RmluZERlYWRMb2NhbFN0b3Jlc3x0cnVlCitkZXRlY3RvckZpbmREb3VibGVDaGVjaz1GaW5kRG91YmxlQ2hlY2t8dHJ1ZQorZGV0ZWN0b3JGaW5kRW1wdHlTeW5jaHJvbml6ZWRCbG9jaz1GaW5kRW1wdHlTeW5jaHJvbml6ZWRCbG9ja3x0cnVlCitkZXRlY3RvckZpbmRGaWVsZFNlbGZBc3NpZ25tZW50PUZpbmRGaWVsZFNlbGZBc3NpZ25tZW50fHRydWUKK2RldGVjdG9yRmluZEZpbmFsaXplSW52b2NhdGlvbnM9RmluZEZpbmFsaXplSW52b2NhdGlvbnN8dHJ1ZQorZGV0ZWN0b3JGaW5kRmxvYXRFcXVhbGl0eT1GaW5kRmxvYXRFcXVhbGl0eXx0cnVlCitkZXRlY3RvckZpbmRGbG9hdE1hdGg9RmluZEZsb2F0TWF0aHxmYWxzZQorZGV0ZWN0b3JGaW5kSEVtaXNtYXRjaD1GaW5kSEVtaXNtYXRjaHx0cnVlCitkZXRlY3RvckZpbmRJbmNvbnNpc3RlbnRTeW5jMj1GaW5kSW5jb25zaXN0ZW50U3luYzJ8dHJ1ZQorZGV0ZWN0b3JGaW5kSlNSMTY2TG9ja01vbml0b3JlbnRlcj1GaW5kSlNSMTY2TG9ja01vbml0b3JlbnRlcnx0cnVlCitkZXRlY3RvckZpbmRMb2NhbFNlbGZBc3NpZ25tZW50Mj1GaW5kTG9jYWxTZWxmQXNzaWdubWVudDJ8dHJ1ZQorZGV0ZWN0b3JGaW5kTWFza2VkRmllbGRzPUZpbmRNYXNrZWRGaWVsZHN8dHJ1ZQorZGV0ZWN0b3JGaW5kTWlzbWF0Y2hlZFdhaXRPck5vdGlmeT1GaW5kTWlzbWF0Y2hlZFdhaXRPck5vdGlmeXx0cnVlCitkZXRlY3RvckZpbmROYWtlZE5vdGlmeT1GaW5kTmFrZWROb3RpZnl8dHJ1ZQorZGV0ZWN0b3JGaW5kTm9uU2VyaWFsaXphYmxlU3RvcmVJbnRvU2Vzc2lvbj1GaW5kTm9uU2VyaWFsaXphYmxlU3RvcmVJbnRvU2Vzc2lvbnx0cnVlCitkZXRlY3RvckZpbmROb25TZXJpYWxpemFibGVWYWx1ZVBhc3NlZFRvV3JpdGVPYmplY3Q9RmluZE5vblNlcmlhbGl6YWJsZVZhbHVlUGFzc2VkVG9Xcml0ZU9iamVjdHx0cnVlCitkZXRlY3RvckZpbmROb25TaG9ydENpcmN1aXQ9RmluZE5vblNob3J0Q2lyY3VpdHx0cnVlCitkZXRlY3RvckZpbmROdWxsRGVyZWY9RmluZE51bGxEZXJlZnx0cnVlCitkZXRlY3RvckZpbmRPcGVuU3RyZWFtPUZpbmRPcGVuU3RyZWFtfHRydWUKK2RldGVjdG9yRmluZFB1enpsZXJzPUZpbmRQdXp6bGVyc3x0cnVlCitkZXRlY3RvckZpbmRSZWZDb21wYXJpc29uPUZpbmRSZWZDb21wYXJpc29ufHRydWUKK2RldGVjdG9yRmluZFJldHVyblJlZj1GaW5kUmV0dXJuUmVmfHRydWUKK2RldGVjdG9yRmluZFJ1bkludm9jYXRpb25zPUZpbmRSdW5JbnZvY2F0aW9uc3x0cnVlCitkZXRlY3RvckZpbmRTZWxmQ29tcGFyaXNvbj1GaW5kU2VsZkNvbXBhcmlzb258dHJ1ZQorZGV0ZWN0b3JGaW5kU2VsZkNvbXBhcmlzb24yPUZpbmRTZWxmQ29tcGFyaXNvbjJ8dHJ1ZQorZGV0ZWN0b3JGaW5kU2xlZXBXaXRoTG9ja0hlbGQ9RmluZFNsZWVwV2l0aExvY2tIZWxkfHRydWUKK2RldGVjdG9yRmluZFNwaW5Mb29wPUZpbmRTcGluTG9vcHx0cnVlCitkZXRlY3RvckZpbmRTcWxJbmplY3Rpb249RmluZFNxbEluamVjdGlvbnx0cnVlCitkZXRlY3RvckZpbmRUd29Mb2NrV2FpdD1GaW5kVHdvTG9ja1dhaXR8dHJ1ZQorZGV0ZWN0b3JGaW5kVW5jYWxsZWRQcml2YXRlTWV0aG9kcz1GaW5kVW5jYWxsZWRQcml2YXRlTWV0aG9kc3x0cnVlCitkZXRlY3RvckZpbmRVbmNvbmRpdGlvbmFsV2FpdD1GaW5kVW5jb25kaXRpb25hbFdhaXR8dHJ1ZQorZGV0ZWN0b3JGaW5kVW5pbml0aWFsaXplZEdldD1GaW5kVW5pbml0aWFsaXplZEdldHx0cnVlCitkZXRlY3RvckZpbmRVbnJlbGF0ZWRUeXBlc0luR2VuZXJpY0NvbnRhaW5lcj1GaW5kVW5yZWxhdGVkVHlwZXNJbkdlbmVyaWNDb250YWluZXJ8dHJ1ZQorZGV0ZWN0b3JGaW5kVW5yZWxlYXNlZExvY2s9RmluZFVucmVsZWFzZWRMb2NrfHRydWUKK2RldGVjdG9yRmluZFVuc2F0aXNmaWVkT2JsaWdhdGlvbj1GaW5kVW5zYXRpc2ZpZWRPYmxpZ2F0aW9ufGZhbHNlCitkZXRlY3RvckZpbmRVbnN5bmNHZXQ9RmluZFVuc3luY0dldHx0cnVlCitkZXRlY3RvckZpbmRVc2VsZXNzQ29udHJvbEZsb3c9RmluZFVzZWxlc3NDb250cm9sRmxvd3x0cnVlCitkZXRlY3Rvckh1Z2VTaGFyZWRTdHJpbmdDb25zdGFudHM9SHVnZVNoYXJlZFN0cmluZ0NvbnN0YW50c3x0cnVlCitkZXRlY3RvcklEaXZSZXN1bHRDYXN0VG9Eb3VibGU9SURpdlJlc3VsdENhc3RUb0RvdWJsZXx0cnVlCitkZXRlY3RvckluY29tcGF0TWFzaz1JbmNvbXBhdE1hc2t8dHJ1ZQorZGV0ZWN0b3JJbmVmZmljaWVudE1lbWJlckFjY2Vzcz1JbmVmZmljaWVudE1lbWJlckFjY2Vzc3xmYWxzZQorZGV0ZWN0b3JJbmVmZmljaWVudFRvQXJyYXk9SW5lZmZpY2llbnRUb0FycmF5fHRydWUKK2RldGVjdG9ySW5maW5pdGVMb29wPUluZmluaXRlTG9vcHx0cnVlCitkZXRlY3RvckluZmluaXRlUmVjdXJzaXZlTG9vcD1JbmZpbml0ZVJlY3Vyc2l2ZUxvb3B8dHJ1ZQorZGV0ZWN0b3JJbmZpbml0ZVJlY3Vyc2l2ZUxvb3AyPUluZmluaXRlUmVjdXJzaXZlTG9vcDJ8ZmFsc2UKK2RldGVjdG9ySW5oZXJpdGFuY2VVbnNhZmVHZXRSZXNvdXJjZT1Jbmhlcml0YW5jZVVuc2FmZUdldFJlc291cmNlfHRydWUKK2RldGVjdG9ySW5pdGlhbGl6YXRpb25DaGFpbj1Jbml0aWFsaXphdGlvbkNoYWlufGZhbHNlCitkZXRlY3Rvckluc3RhbnRpYXRlU3RhdGljQ2xhc3M9SW5zdGFudGlhdGVTdGF0aWNDbGFzc3x0cnVlCitkZXRlY3RvckludmFsaWRKVW5pdFRlc3Q9SW52YWxpZEpVbml0VGVzdHx0cnVlCitkZXRlY3Rvckl0ZXJhdG9ySWRpb21zPUl0ZXJhdG9ySWRpb21zfHRydWUKK2RldGVjdG9yTGF6eUluaXQ9TGF6eUluaXR8dHJ1ZQorZGV0ZWN0b3JMb2FkT2ZLbm93bk51bGxWYWx1ZT1Mb2FkT2ZLbm93bk51bGxWYWx1ZXx0cnVlCitkZXRlY3RvckxvY2tlZEZpZWxkcz1Mb2NrZWRGaWVsZHN8ZmFsc2UKK2RldGVjdG9yTWV0aG9kUmV0dXJuQ2hlY2s9TWV0aG9kUmV0dXJuQ2hlY2t8dHJ1ZQorZGV0ZWN0b3JNZXRob2RzPU1ldGhvZHN8dHJ1ZQorZGV0ZWN0b3JNdWx0aXRocmVhZGVkSW5zdGFuY2VBY2Nlc3M9TXVsdGl0aHJlYWRlZEluc3RhbmNlQWNjZXNzfHRydWUKK2RldGVjdG9yTXV0YWJsZUxvY2s9TXV0YWJsZUxvY2t8dHJ1ZQorZGV0ZWN0b3JNdXRhYmxlU3RhdGljRmllbGRzPU11dGFibGVTdGF0aWNGaWVsZHN8dHJ1ZQorZGV0ZWN0b3JOYW1pbmc9TmFtaW5nfHRydWUKK2RldGVjdG9yTm90ZUFubm90YXRpb25SZXRlbnRpb249Tm90ZUFubm90YXRpb25SZXRlbnRpb258dHJ1ZQorZGV0ZWN0b3JOb3RlQ2hlY2tSZXR1cm5WYWx1ZT1Ob3RlQ2hlY2tSZXR1cm5WYWx1ZXx0cnVlCitkZXRlY3Rvck5vdGVDaGVja1JldHVyblZhbHVlQW5ub3RhdGlvbnM9Tm90ZUNoZWNrUmV0dXJuVmFsdWVBbm5vdGF0aW9uc3x0cnVlCitkZXRlY3Rvck5vdGVEaXJlY3RseVJlbGV2YW50VHlwZVF1YWxpZmllcnM9Tm90ZURpcmVjdGx5UmVsZXZhbnRUeXBlUXVhbGlmaWVyc3x0cnVlCitkZXRlY3Rvck5vdGVKQ0lQQW5ub3RhdGlvbj1Ob3RlSkNJUEFubm90YXRpb258dHJ1ZQorZGV0ZWN0b3JOb3RlTm9uTnVsbEFubm90YXRpb25zPU5vdGVOb25OdWxsQW5ub3RhdGlvbnN8dHJ1ZQorZGV0ZWN0b3JOb3RlTm9ubnVsbFJldHVyblZhbHVlcz1Ob3RlTm9ubnVsbFJldHVyblZhbHVlc3x0cnVlCitkZXRlY3Rvck5vdGVTdXBwcmVzc2VkV2FybmluZ3M9Tm90ZVN1cHByZXNzZWRXYXJuaW5nc3x0cnVlCitkZXRlY3Rvck5vdGVVbmNvbmRpdGlvbmFsUGFyYW1EZXJlZnM9Tm90ZVVuY29uZGl0aW9uYWxQYXJhbURlcmVmc3x0cnVlCitkZXRlY3Rvck51bWJlckNvbnN0cnVjdG9yPU51bWJlckNvbnN0cnVjdG9yfHRydWUKK2RldGVjdG9yT3ZlcnJpZGluZ0VxdWFsc05vdFN5bW1ldHJpY2FsPU92ZXJyaWRpbmdFcXVhbHNOb3RTeW1tZXRyaWNhbHx0cnVlCitkZXRlY3RvclByZWZlclplcm9MZW5ndGhBcnJheXM9UHJlZmVyWmVyb0xlbmd0aEFycmF5c3x0cnVlCitkZXRlY3RvclB1YmxpY1NlbWFwaG9yZXM9UHVibGljU2VtYXBob3Jlc3xmYWxzZQorZGV0ZWN0b3JRdWVzdGlvbmFibGVCb29sZWFuQXNzaWdubWVudD1RdWVzdGlvbmFibGVCb29sZWFuQXNzaWdubWVudHx0cnVlCitkZXRlY3RvclJlYWRSZXR1cm5TaG91bGRCZUNoZWNrZWQ9UmVhZFJldHVyblNob3VsZEJlQ2hlY2tlZHx0cnVlCitkZXRlY3RvclJlZHVuZGFudEludGVyZmFjZXM9UmVkdW5kYW50SW50ZXJmYWNlc3x0cnVlCitkZXRlY3RvclJlZmxlY3RpdmVDbGFzc2VzPVJlZmxlY3RpdmVDbGFzc2VzfHRydWUKK2RldGVjdG9yUmVzb2x2ZUFsbFJlZmVyZW5jZXM9UmVzb2x2ZUFsbFJlZmVyZW5jZXN8ZmFsc2UKK2RldGVjdG9yUnVudGltZUV4Y2VwdGlvbkNhcHR1cmU9UnVudGltZUV4Y2VwdGlvbkNhcHR1cmV8dHJ1ZQorZGV0ZWN0b3JTZXJpYWxpemFibGVJZGlvbT1TZXJpYWxpemFibGVJZGlvbXx0cnVlCitkZXRlY3RvclN0YXJ0SW5Db25zdHJ1Y3Rvcj1TdGFydEluQ29uc3RydWN0b3J8dHJ1ZQorZGV0ZWN0b3JTdGF0aWNDYWxlbmRhckRldGVjdG9yPVN0YXRpY0NhbGVuZGFyRGV0ZWN0b3J8dHJ1ZQorZGV0ZWN0b3JTdHJpbmdDb25jYXRlbmF0aW9uPVN0cmluZ0NvbmNhdGVuYXRpb258dHJ1ZQorZGV0ZWN0b3JTdXBlcmZsdW91c0luc3RhbmNlT2Y9U3VwZXJmbHVvdXNJbnN0YW5jZU9mfHRydWUKK2RldGVjdG9yU3VzcGljaW91c1RocmVhZEludGVycnVwdGVkPVN1c3BpY2lvdXNUaHJlYWRJbnRlcnJ1cHRlZHx0cnVlCitkZXRlY3RvclN3aXRjaEZhbGx0aHJvdWdoPVN3aXRjaEZhbGx0aHJvdWdofHRydWUKK2RldGVjdG9yU3luY2hyb25pemF0aW9uT25TaGFyZWRCdWlsdGluQ29uc3RhbnQ9U3luY2hyb25pemF0aW9uT25TaGFyZWRCdWlsdGluQ29uc3RhbnR8dHJ1ZQorZGV0ZWN0b3JTeW5jaHJvbml6ZUFuZE51bGxDaGVja0ZpZWxkPVN5bmNocm9uaXplQW5kTnVsbENoZWNrRmllbGR8dHJ1ZQorZGV0ZWN0b3JTeW5jaHJvbml6ZU9uQ2xhc3NMaXRlcmFsTm90R2V0Q2xhc3M9U3luY2hyb25pemVPbkNsYXNzTGl0ZXJhbE5vdEdldENsYXNzfHRydWUKK2RldGVjdG9yU3luY2hyb25pemluZ09uQ29udGVudHNPZkZpZWxkVG9Qcm90ZWN0RmllbGQ9U3luY2hyb25pemluZ09uQ29udGVudHNPZkZpZWxkVG9Qcm90ZWN0RmllbGR8dHJ1ZQorZGV0ZWN0b3JUZXN0QVNNPVRlc3RBU018ZmFsc2UKK2RldGVjdG9yVGVzdERhdGFmbG93QW5hbHlzaXM9VGVzdERhdGFmbG93QW5hbHlzaXN8ZmFsc2UKK2RldGVjdG9yVGVzdGluZ0dyb3VuZD1UZXN0aW5nR3JvdW5kfGZhbHNlCitkZXRlY3RvclRyYWluRmllbGRTdG9yZVR5cGVzPVRyYWluRmllbGRTdG9yZVR5cGVzfHRydWUKK2RldGVjdG9yVHJhaW5Ob25OdWxsQW5ub3RhdGlvbnM9VHJhaW5Ob25OdWxsQW5ub3RhdGlvbnN8dHJ1ZQorZGV0ZWN0b3JUcmFpblVuY29uZGl0aW9uYWxEZXJlZlBhcmFtcz1UcmFpblVuY29uZGl0aW9uYWxEZXJlZlBhcmFtc3x0cnVlCitkZXRlY3RvclVSTFByb2JsZW1zPVVSTFByb2JsZW1zfHRydWUKK2RldGVjdG9yVW5jYWxsYWJsZU1ldGhvZE9mQW5vbnltb3VzQ2xhc3M9VW5jYWxsYWJsZU1ldGhvZE9mQW5vbnltb3VzQ2xhc3N8dHJ1ZQorZGV0ZWN0b3JVbm5lY2Vzc2FyeU1hdGg9VW5uZWNlc3NhcnlNYXRofHRydWUKK2RldGVjdG9yVW5yZWFkRmllbGRzPVVucmVhZEZpZWxkc3x0cnVlCitkZXRlY3RvclVzZU9iamVjdEVxdWFscz1Vc2VPYmplY3RFcXVhbHN8ZmFsc2UKK2RldGVjdG9yVXNlbGVzc1N1YmNsYXNzTWV0aG9kPVVzZWxlc3NTdWJjbGFzc01ldGhvZHxmYWxzZQorZGV0ZWN0b3JWYXJBcmdzUHJvYmxlbXM9VmFyQXJnc1Byb2JsZW1zfHRydWUKK2RldGVjdG9yVm9sYXRpbGVVc2FnZT1Wb2xhdGlsZVVzYWdlfHRydWUKK2RldGVjdG9yV2FpdEluTG9vcD1XYWl0SW5Mb29wfHRydWUKK2RldGVjdG9yV3JvbmdNYXBJdGVyYXRvcj1Xcm9uZ01hcEl0ZXJhdG9yfHRydWUKK2RldGVjdG9yWE1MRmFjdG9yeUJ5cGFzcz1YTUxGYWN0b3J5QnlwYXNzfHRydWUKK2RldGVjdG9yX3RocmVzaG9sZD0yCitlZmZvcnQ9ZGVmYXVsdAorZXhjbHVkZWZpbHRlcjA9LnNldHRpbmdzL2ZpbmRidWdzLmV4Y2x1ZGUueG1sCitmaWx0ZXJfc2V0dGluZ3M9TWVkaXVtfEJBRF9QUkFDVElDRSxDT1JSRUNUTkVTUyxJMThOLE1BTElDSU9VU19DT0RFLE1UX0NPUlJFQ1RORVNTLFBFUkZPUk1BTkNFLFNFQ1VSSVRZLFNUWUxFfGZhbHNlCitmaWx0ZXJfc2V0dGluZ3NfbmVnPXwKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS8ucHJvamVjdCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS8ucHJvamVjdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNTMyN2YwCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLy5wcm9qZWN0CkBAIC0wLDAgKzEsMzQgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8cHJvamVjdERlc2NyaXB0aW9uPgorCTxuYW1lPm9yZy5lY2xpcHNlLnN0ZW0udWk8L25hbWU+CisJPGNvbW1lbnQ+PC9jb21tZW50PgorCTxwcm9qZWN0cz4KKwk8L3Byb2plY3RzPgorCTxidWlsZFNwZWM+CisJCTxidWlsZENvbW1hbmQ+CisJCQk8bmFtZT5vcmcuZWNsaXBzZS5qZHQuY29yZS5qYXZhYnVpbGRlcjwvbmFtZT4KKwkJCTxhcmd1bWVudHM+CisJCQk8L2FyZ3VtZW50cz4KKwkJPC9idWlsZENvbW1hbmQ+CisJCTxidWlsZENvbW1hbmQ+CisJCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuTWFuaWZlc3RCdWlsZGVyPC9uYW1lPgorCQkJPGFyZ3VtZW50cz4KKwkJCTwvYXJndW1lbnRzPgorCQk8L2J1aWxkQ29tbWFuZD4KKwkJPGJ1aWxkQ29tbWFuZD4KKwkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5TY2hlbWFCdWlsZGVyPC9uYW1lPgorCQkJPGFyZ3VtZW50cz4KKwkJCTwvYXJndW1lbnRzPgorCQk8L2J1aWxkQ29tbWFuZD4KKwkJPGJ1aWxkQ29tbWFuZD4KKwkJCTxuYW1lPmVkdS51bWQuY3MuZmluZGJ1Z3MucGx1Z2luLmVjbGlwc2UuZmluZGJ1Z3NCdWlsZGVyPC9uYW1lPgorCQkJPGFyZ3VtZW50cz4KKwkJCTwvYXJndW1lbnRzPgorCQk8L2J1aWxkQ29tbWFuZD4KKwk8L2J1aWxkU3BlYz4KKwk8bmF0dXJlcz4KKwkJPG5hdHVyZT5vcmcuZWNsaXBzZS5wZGUuUGx1Z2luTmF0dXJlPC9uYXR1cmU+CisJCTxuYXR1cmU+b3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YW5hdHVyZTwvbmF0dXJlPgorCQk8bmF0dXJlPmVkdS51bWQuY3MuZmluZGJ1Z3MucGx1Z2luLmVjbGlwc2UuZmluZGJ1Z3NOYXR1cmU8L25hdHVyZT4KKwk8L25hdHVyZXM+Cis8L3Byb2plY3REZXNjcmlwdGlvbj4KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS8uc2V0dGluZ3MvZmluZGJ1Z3MuZXhjbHVkZS54bWwgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvLnNldHRpbmdzL2ZpbmRidWdzLmV4Y2x1ZGUueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU3NDE5OTMKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvLnNldHRpbmdzL2ZpbmRidWdzLmV4Y2x1ZGUueG1sCkBAIC0wLDAgKzEsMTggQEAKKzxGaW5kQnVnc0ZpbHRlcj4KKyAgICA8TWF0Y2g+CisgICAgICAgIDxQYWNrYWdlIG5hbWU9In5vcmdcLmVjbGlwc2VcLnN0ZW1cLnVpLioiIC8+CisgICAgICAgIDxCdWcgY29kZT0iU1QiIC8+CisgICAgPC9NYXRjaD4KKyAgICA8TWF0Y2g+CisgICAgICAgIDxQYWNrYWdlIG5hbWU9In5vcmdcLmVjbGlwc2VcLnN0ZW1cLmNvcmUuKiIgLz4KKyAgICAgICAgPEJ1ZyBjb2RlPSJTSUMiIC8+CisgICAgPC9NYXRjaD4KKyAgICA8TWF0Y2g+CisgICAgICAgIDxDbGFzcyBuYW1lPSJvcmcuZWNsaXBzZS5zdGVtLnVpLkFjdGl2YXRvciIgLz4KKyAgICAgICAgPEJ1ZyBjb2RlPSJMSSIgLz4KKyAgICA8L01hdGNoPgorICAgICA8TWF0Y2g+CisgICAgICAgIDxDbGFzcyBuYW1lPSJvcmcuZWNsaXBzZS5zdGVtLnVpLmVkaXRvcnMuSWRlbnRpZmlhYmxlRWRpdG9yIiAvPgorICAgICAgICA8QnVnIGNvZGU9IkRMUyIgLz4KKyAgICA8L01hdGNoPgorPC9GaW5kQnVnc0ZpbHRlcj4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvLnNldHRpbmdzL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLnByZWZzIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5wcmVmcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42Mzc3YTllCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5wcmVmcwpAQCAtMCwwICsxLDUgQEAKKyNGcmkgU2VwIDA3IDA3OjIxOjQxIEVEVCAyMDA3CitlY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQorZW5jb2RpbmcvL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3ByZWZlcmVuY2VzL21lc3NhZ2VzLnByb3BlcnRpZXM9ODg1OV8xCitlbmNvZGluZy8vc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvdmlld3MvZ2VvZ3JhcGhpYy9tYXAvbWVzc2FnZXMucHJvcGVydGllcz04ODU5XzEKK2luc3RhbmNlL29yZy5lY2xpcHNlLmNvcmUubmV0L29yZy5lY2xpcHNlLmNvcmUubmV0Lmhhc01pZ3JhdGVkPXRydWUKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY3NTFhYjYKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzCkBAIC0wLDAgKzEsMTUgQEAKKyNXZWQgSnVuIDI5IDIzOjU5OjAyIFBEVCAyMDExDQorZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTENCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5kb2MuY29tbWVudC5zdXBwb3J0PWRpc2FibGVkDQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbnZhbGlkSmF2YWRvYz13YXJuaW5nDQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbnZhbGlkSmF2YWRvY1RhZ3M9ZW5hYmxlZA0KK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW52YWxpZEphdmFkb2NUYWdzRGVwcmVjYXRlZFJlZj1lbmFibGVkDQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbnZhbGlkSmF2YWRvY1RhZ3NOb3RWaXNpYmxlUmVmPWVuYWJsZWQNCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmludmFsaWRKYXZhZG9jVGFnc1Zpc2liaWxpdHk9cHVibGljDQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nSmF2YWRvY0NvbW1lbnRzPXdhcm5pbmcNCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdKYXZhZG9jQ29tbWVudHNPdmVycmlkaW5nPWVuYWJsZWQNCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdKYXZhZG9jQ29tbWVudHNWaXNpYmlsaXR5PXB1YmxpYw0KK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0phdmFkb2NUYWdEZXNjcmlwdGlvbj1yZXR1cm5fdGFnDQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nSmF2YWRvY1RhZ3M9d2FybmluZw0KK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0phdmFkb2NUYWdzT3ZlcnJpZGluZz1lbmFibGVkDQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nSmF2YWRvY1RhZ3NWaXNpYmlsaXR5PXB1YmxpYw0KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LnVpLnByZWZzIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQudWkucHJlZnMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzBiZmVhYgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LnVpLnByZWZzCkBAIC0wLDAgKzEsNTQgQEAKKyNUaHUgSmFuIDMxIDEzOjM4OjIxIEVTVCAyMDA4CitjbGVhbnVwLmFkZF9kZWZhdWx0X3NlcmlhbF92ZXJzaW9uX2lkPXRydWUKK2NsZWFudXAuYWRkX2dlbmVyYXRlZF9zZXJpYWxfdmVyc2lvbl9pZD1mYWxzZQorY2xlYW51cC5hZGRfbWlzc2luZ19hbm5vdGF0aW9ucz10cnVlCitjbGVhbnVwLmFkZF9taXNzaW5nX2RlcHJlY2F0ZWRfYW5ub3RhdGlvbnM9dHJ1ZQorY2xlYW51cC5hZGRfbWlzc2luZ19ubHNfdGFncz1mYWxzZQorY2xlYW51cC5hZGRfbWlzc2luZ19vdmVycmlkZV9hbm5vdGF0aW9ucz10cnVlCitjbGVhbnVwLmFkZF9zZXJpYWxfdmVyc2lvbl9pZD1mYWxzZQorY2xlYW51cC5hbHdheXNfdXNlX2Jsb2Nrcz10cnVlCitjbGVhbnVwLmFsd2F5c191c2VfcGFyZW50aGVzZXNfaW5fZXhwcmVzc2lvbnM9dHJ1ZQorY2xlYW51cC5hbHdheXNfdXNlX3RoaXNfZm9yX25vbl9zdGF0aWNfZmllbGRfYWNjZXNzPWZhbHNlCitjbGVhbnVwLmFsd2F5c191c2VfdGhpc19mb3Jfbm9uX3N0YXRpY19tZXRob2RfYWNjZXNzPWZhbHNlCitjbGVhbnVwLmNvbnZlcnRfdG9fZW5oYW5jZWRfZm9yX2xvb3A9dHJ1ZQorY2xlYW51cC5mb3JtYXRfc291cmNlX2NvZGU9dHJ1ZQorY2xlYW51cC5tYWtlX2xvY2FsX3ZhcmlhYmxlX2ZpbmFsPXRydWUKK2NsZWFudXAubWFrZV9wYXJhbWV0ZXJzX2ZpbmFsPXRydWUKK2NsZWFudXAubWFrZV9wcml2YXRlX2ZpZWxkc19maW5hbD10cnVlCitjbGVhbnVwLm1ha2VfdmFyaWFibGVfZGVjbGFyYXRpb25zX2ZpbmFsPXRydWUKK2NsZWFudXAubmV2ZXJfdXNlX2Jsb2Nrcz1mYWxzZQorY2xlYW51cC5uZXZlcl91c2VfcGFyZW50aGVzZXNfaW5fZXhwcmVzc2lvbnM9ZmFsc2UKK2NsZWFudXAub3JnYW5pemVfaW1wb3J0cz10cnVlCitjbGVhbnVwLnF1YWxpZnlfc3RhdGljX2ZpZWxkX2FjY2Vzc2VzX3dpdGhfZGVjbGFyaW5nX2NsYXNzPWZhbHNlCitjbGVhbnVwLnF1YWxpZnlfc3RhdGljX21lbWJlcl9hY2Nlc3Nlc190aHJvdWdoX2luc3RhbmNlc193aXRoX2RlY2xhcmluZ19jbGFzcz10cnVlCitjbGVhbnVwLnF1YWxpZnlfc3RhdGljX21lbWJlcl9hY2Nlc3Nlc190aHJvdWdoX3N1YnR5cGVzX3dpdGhfZGVjbGFyaW5nX2NsYXNzPXRydWUKK2NsZWFudXAucXVhbGlmeV9zdGF0aWNfbWVtYmVyX2FjY2Vzc2VzX3dpdGhfZGVjbGFyaW5nX2NsYXNzPXRydWUKK2NsZWFudXAucXVhbGlmeV9zdGF0aWNfbWV0aG9kX2FjY2Vzc2VzX3dpdGhfZGVjbGFyaW5nX2NsYXNzPWZhbHNlCitjbGVhbnVwLnJlbW92ZV9wcml2YXRlX2NvbnN0cnVjdG9ycz10cnVlCitjbGVhbnVwLnJlbW92ZV90cmFpbGluZ193aGl0ZXNwYWNlcz10cnVlCitjbGVhbnVwLnJlbW92ZV90cmFpbGluZ193aGl0ZXNwYWNlc19hbGw9dHJ1ZQorY2xlYW51cC5yZW1vdmVfdHJhaWxpbmdfd2hpdGVzcGFjZXNfaWdub3JlX2VtcHR5PWZhbHNlCitjbGVhbnVwLnJlbW92ZV91bm5lY2Vzc2FyeV9jYXN0cz10cnVlCitjbGVhbnVwLnJlbW92ZV91bm5lY2Vzc2FyeV9ubHNfdGFncz10cnVlCitjbGVhbnVwLnJlbW92ZV91bnVzZWRfaW1wb3J0cz10cnVlCitjbGVhbnVwLnJlbW92ZV91bnVzZWRfbG9jYWxfdmFyaWFibGVzPXRydWUKK2NsZWFudXAucmVtb3ZlX3VudXNlZF9wcml2YXRlX2ZpZWxkcz10cnVlCitjbGVhbnVwLnJlbW92ZV91bnVzZWRfcHJpdmF0ZV9tZW1iZXJzPXRydWUKK2NsZWFudXAucmVtb3ZlX3VudXNlZF9wcml2YXRlX21ldGhvZHM9dHJ1ZQorY2xlYW51cC5yZW1vdmVfdW51c2VkX3ByaXZhdGVfdHlwZXM9dHJ1ZQorY2xlYW51cC5zb3J0X21lbWJlcnM9ZmFsc2UKK2NsZWFudXAuc29ydF9tZW1iZXJzX2FsbD1mYWxzZQorY2xlYW51cC51c2VfYmxvY2tzPXRydWUKK2NsZWFudXAudXNlX2Jsb2Nrc19vbmx5X2Zvcl9yZXR1cm5fYW5kX3Rocm93PWZhbHNlCitjbGVhbnVwLnVzZV9wYXJlbnRoZXNlc19pbl9leHByZXNzaW9ucz1mYWxzZQorY2xlYW51cC51c2VfdGhpc19mb3Jfbm9uX3N0YXRpY19maWVsZF9hY2Nlc3M9ZmFsc2UKK2NsZWFudXAudXNlX3RoaXNfZm9yX25vbl9zdGF0aWNfZmllbGRfYWNjZXNzX29ubHlfaWZfbmVjZXNzYXJ5PXRydWUKK2NsZWFudXAudXNlX3RoaXNfZm9yX25vbl9zdGF0aWNfbWV0aG9kX2FjY2Vzcz1mYWxzZQorY2xlYW51cC51c2VfdGhpc19mb3Jfbm9uX3N0YXRpY19tZXRob2RfYWNjZXNzX29ubHlfaWZfbmVjZXNzYXJ5PXRydWUKK2NsZWFudXBfcHJvZmlsZT1fY2xlYW51cAorY2xlYW51cF9zZXR0aW5nc192ZXJzaW9uPTIKK2VjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xCitvcmcuZWNsaXBzZS5qZHQudWkuaWdub3JlbG93ZXJjYXNlbmFtZXM9dHJ1ZQorb3JnLmVjbGlwc2UuamR0LnVpLmltcG9ydG9yZGVyPWphdmE7amF2YXg7b3JnO2NvbTsKK29yZy5lY2xpcHNlLmpkdC51aS5vbmRlbWFuZHRocmVzaG9sZD05OQorb3JnLmVjbGlwc2UuamR0LnVpLnN0YXRpY29uZGVtYW5kdGhyZXNob2xkPTk5CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvTUVUQS1JTkYvTUFOSUZFU1QuTUYgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvTUVUQS1JTkYvTUFOSUZFU1QuTUYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmNlMjcwNgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9NRVRBLUlORi9NQU5JRkVTVC5NRgpAQCAtMCwwICsxLDUwIEBACitNYW5pZmVzdC1WZXJzaW9uOiAxLjAKK0J1bmRsZS1NYW5pZmVzdFZlcnNpb246IDIKK0J1bmRsZS1OYW1lOiAlcGx1Z2luTmFtZQorQnVuZGxlLVN5bWJvbGljTmFtZTogb3JnLmVjbGlwc2Uuc3RlbS51aTtzaW5nbGV0b246PXRydWUKK0J1bmRsZS1WZXJzaW9uOiAxLjIuMQorQnVuZGxlLUFjdGl2YXRvcjogb3JnLmVjbGlwc2Uuc3RlbS51aS5BY3RpdmF0b3IKK0J1bmRsZS1WZW5kb3I6ICVwcm92aWRlck5hbWUKK0J1bmRsZS1Mb2NhbGl6YXRpb246IHBsdWdpbgorUmVxdWlyZS1CdW5kbGU6IG9yZy5lY2xpcHNlLnN0ZW0uam9iczt2aXNpYmlsaXR5Oj1yZWV4cG9ydCwKKyBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLAorIG9yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHksCisgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLAorIG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscywKKyBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuZWRpdCwKKyBvcmcuZWNsaXBzZS51aS52aWV3cy5sb2csCisgb3JnLmVjbGlwc2UuY29yZS5leHByZXNzaW9ucywKKyBvcmcuZWNsaXBzZS51aS5uYXZpZ2F0b3IsCisgb3JnLmVjbGlwc2UudWkubmF2aWdhdG9yLnJlc291cmNlcywKKyBvcmcuZWNsaXBzZS51aS5pbnRybywKKyBvcmcuZWNsaXBzZS51aS5pbnRyby51bml2ZXJzYWwsCisgb3JnLmVjbGlwc2UuaGVscCwKKyBvcmcuZWNsaXBzZS51aS5mb3JtcworQnVuZGxlLUFjdGl2YXRpb25Qb2xpY3k6IGxhenkKK0V4cG9ydC1QYWNrYWdlOiBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLnByZXNlbnRhdGlvbiwKKyBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGgucHJlc2VudGF0aW9uLAorIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5wcmVzZW50YXRpb24sCisgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLnByZXNlbnRhdGlvbiwKKyBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2NlbmFyaW8ucHJlc2VudGF0aW9uLAorIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zZXF1ZW5jZXIucHJlc2VudGF0aW9uLAorIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zb2x2ZXIsCisgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNvbHZlci5wcmVzZW50YXRpb24sCisgb3JnLmVjbGlwc2Uuc3RlbS51aSwKKyBvcmcuZWNsaXBzZS5zdGVtLnVpLmFkYXB0ZXJzLmNvbG9yLAorIG9yZy5lY2xpcHNlLnN0ZW0udWkuYWRhcHRlcnMubmV3bW9kaWZpZXJwYWdlLAorIG9yZy5lY2xpcHNlLnN0ZW0udWkuYWRhcHRlcnMucHJvcGVydHlzdHJpbmdzLAorIG9yZy5lY2xpcHNlLnN0ZW0udWkuZWRpdG9ycywKKyBvcmcuZWNsaXBzZS5zdGVtLnVpLmxhdW5jaGVyLAorIG9yZy5lY2xpcHNlLnN0ZW0udWkucGVyc3BlY3RpdmVzLAorIG9yZy5lY2xpcHNlLnN0ZW0udWkucHJlZmVyZW5jZXMsCisgb3JnLmVjbGlwc2Uuc3RlbS51aS52aWV3cywKKyBvcmcuZWNsaXBzZS5zdGVtLnVpLnZpZXdzLmV4cGxvcmVyLAorIG9yZy5lY2xpcHNlLnN0ZW0udWkudmlld3MuZ2VvZ3JhcGhpYywKKyBvcmcuZWNsaXBzZS5zdGVtLnVpLnZpZXdzLmdlb2dyYXBoaWMubWFwLAorIG9yZy5lY2xpcHNlLnN0ZW0udWkudmlld3MuZ2VvZ3JhcGhpYy5tYXAucHJlZmVyZW5jZXMsCisgb3JnLmVjbGlwc2Uuc3RlbS51aS52aWV3cy5nZW9ncmFwaGljLnByZWZlcmVuY2VzLAorIG9yZy5lY2xpcHNlLnN0ZW0udWkud2lkZ2V0cywKKyBvcmcuZWNsaXBzZS5zdGVtLnVpLndpemFyZHMKK0J1bmRsZS1DbGFzc1BhdGg6IC4sCisgYmluLworQnVuZGxlLVJlcXVpcmVkRXhlY3V0aW9uRW52aXJvbm1lbnQ6IEoyU0UtMS41CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvYnJhbmRpbmcvU1RFTTEyOF8xMjhfMzIuaWNucyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9icmFuZGluZy9TVEVNMTI4XzEyOF8zMi5pY25zCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUyOWJlOTMKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvYnJhbmRpbmcvU1RFTTEyOF8xMjhfMzIuaWNucwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvYnJhbmRpbmcvU1RFTTEyOF8xMjhfMzIueHBtIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL2JyYW5kaW5nL1NURU0xMjhfMTI4XzMyLnhwbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZDQ1ZTFjCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL2JyYW5kaW5nL1NURU0xMjhfMTI4XzMyLnhwbQpAQCAtMCwwICsxLDM4NyBAQAorLyogWFBNICovCitzdGF0aWMgY2hhciAqIG9oZjEyOF8xMjhfMzJfeHBtW10gPSB7CisiMTI4IDEyOCAyNTYgMiIsCisiICAJYyBOb25lIiwKKyIuIAljICMxMDBBMDgiLAorIisgCWMgIzA3MEQwRSIsCisiQCAJYyAjMDgwRDE3IiwKKyIjIAljICMwRjBEMTEiLAorIiQgCWMgIzEyMEYwNSIsCisiJSAJYyAjMTYwQTNFIiwKKyImIAljICMxOTBFMEUiLAorIiogCWMgIzE5MDg0RCIsCisiPSAJYyAjMTQwRjFBIiwKKyItIAljICMxNzBBNDQiLAorIjsgCWMgIzE2MEQzQSIsCisiPiAJYyAjMTIxMDJCIiwKKyIsIAljICMyMDA5NDgiLAorIicgCWMgIzEyMEU0NSIsCisiKSAJYyAjMEYxNDFDIiwKKyIhIAljICMxQTEyMTUiLAorIn4gCWMgIzFFMEQzRCIsCisieyAJYyAjMUQwRTM4IiwKKyJdIAljICMyMDBDNDMiLAorIl4gCWMgIzE1MTIyOCIsCisiLyAJYyAjMTgxNDBDIiwKKyIoIAljICMxQzBGMzMiLAorIl8gCWMgIzE4MTEzOCIsCisiOiAJYyAjMTMxMjNEIiwKKyI8IAljICMwRTE2MjUiLAorIlsgCWMgIzE3MTIzMyIsCisifSAJYyAjMTYxNDI1IiwKKyJ8IAljICMxQjEwNDQiLAorIjEgCWMgIzEwMTYyQiIsCisiMiAJYyAjMTUxNzE1IiwKKyIzIAljICMxQjExM0YiLAorIjQgCWMgIzFBMTcxNiIsCisiNSAJYyAjMTQxOTFBIiwKKyI2IAljICMxQTE4MUIiLAorIjcgCWMgIzFEMTUzRCIsCisiOCAJYyAjMjExMTVDIiwKKyI5IAljICMxQTE4MzMiLAorIjAgCWMgIzIyMTM0RSIsCisiYSAJYyAjMUExQTIyIiwKKyJiIAljICMyMTE0NDkiLAorImMgCWMgIzI0MTI1NCIsCisiZCAJYyAjMjAxNTQ0IiwKKyJlIAljICMyMDE5MUQiLAorImYgCWMgIzFEMUExQyIsCisiZyAJYyAjMTUxQzIyIiwKKyJoIAljICMxMjFEMjciLAorImkgCWMgIzFEMTY0RiIsCisiaiAJYyAjMUYxQTIzIiwKKyJrIAljICMxQzE3NEEiLAorImwgCWMgIzE4MUMyOCIsCisibSAJYyAjMTkxRDFGIiwKKyJuIAljICMxODFCMzYiLAorIm8gCWMgIzFCMUQxQSIsCisicCAJYyAjMTUxRDJDIiwKKyJxIAljICMxQzE5NDUiLAorInIgCWMgIzFCMUMyRCIsCisicyAJYyAjMTkxQzM3IiwKKyJ0IAljICMxRjE3NTgiLAorInUgCWMgIzE4MUQzMiIsCisidiAJYyAjMUUxRTE3IiwKKyJ3IAljICMyNzE3NDIiLAorInggCWMgIzFGMUMyOSIsCisieSAJYyAjMjExOTQxIiwKKyJ6IAljICMyMDFBM0MiLAorIkEgCWMgIzFEMUMzMiIsCisiQiAJYyAjMUMxQjQxIiwKKyJDIAljICMxQTFEMzgiLAorIkQgCWMgIzE4MUYyRiIsCisiRSAJYyAjMUUxRDMzIiwKKyJGIAljICMxQzFEMzkiLAorIkcgCWMgIzIxMTk1MyIsCisiSCAJYyAjMjUxOTQ5IiwKKyJJIAljICMxQzFEM0QiLAorIkogCWMgIzFGMUI0OCIsCisiSyAJYyAjMUExRjM0IiwKKyJMIAljICMxQTFENEUiLAorIk0gCWMgIzIxMUQzQSIsCisiTiAJYyAjMjExQjRFIiwKKyJPIAljICMxODIyMjgiLAorIlAgCWMgIzFDMUYzQSIsCisiUSAJYyAjMUIxRDU0IiwKKyJSIAljICMxRDFDNUEiLAorIlMgCWMgIzE2MjMzNyIsCisiVCAJYyAjMUMyMjM3IiwKKyJVIAljICMyMTFENkEiLAorIlYgCWMgIzJBMUM1RSIsCisiVyAJYyAjMjEyMjNFIiwKKyJYIAljICMxQjI1M0YiLAorIlkgCWMgIzIyMjA1RiIsCisiWiAJYyAjMjQxRjY1IiwKKyJgIAljICMyQjFENjYiLAorIiAuCWMgIzIyMjE1QSIsCisiLi4JYyAjMjIyMjUzIiwKKyIrLgljICMxQzIyNjUiLAorIkAuCWMgIzFDMjM2MCIsCisiIy4JYyAjMjQyMzRBIiwKKyIkLgljICMyMDI2M0IiLAorIiUuCWMgIzFDMjQ1QiIsCisiJi4JYyAjMkUxRDZDIiwKKyIqLgljICMyNDI0NDYiLAorIj0uCWMgIzIyMjgyOCIsCisiLS4JYyAjMjkyNjI4IiwKKyI7LgljICMxRjI1NTIiLAorIj4uCWMgIzJBMjI1NiIsCisiLC4JYyAjMjgyNjNEIiwKKyInLgljICMyQzIyNUUiLAorIikuCWMgIzI4MjgzMyIsCisiIS4JYyAjMUYyQjMxIiwKKyJ+LgljICMyQzI3NDUiLAorInsuCWMgIzJBMjQ2QSIsCisiXS4JYyAjMzQyMDc3IiwKKyJeLgljICMyNzI5NDUiLAorIi8uCWMgIzI2MjU3MSIsCisiKC4JYyAjMzEyMzY2IiwKKyJfLgljICMyNDI3NkMiLAorIjouCWMgIzJBMjY2NiIsCisiPC4JYyAjMjEyQzQ2IiwKKyJbLgljICMxQzJCNjciLAorIn0uCWMgIzIzMjk2NyIsCisifC4JYyAjMjIyQTYxIiwKKyIxLgljICMyQTI4NjEiLAorIjIuCWMgIzI5MkE1QiIsCisiMy4JYyAjMkEyQzU0IiwKKyI0LgljICMyRDJDNEYiLAorIjUuCWMgIzNBMjU3RSIsCisiNi4JYyAjMkIzMjJGIiwKKyI3LgljICMzNjI4N0QiLAorIjguCWMgIzMwMkI3OSIsCisiOS4JYyAjMjcyRTc2IiwKKyIwLgljICMzNzJBNzMiLAorImEuCWMgIzIyMzE2RSIsCisiYi4JYyAjMkMyRjZFIiwKKyJjLgljICMzODJDNjkiLAorImQuCWMgIzMzMkQ2RSIsCisiZS4JYyAjMkYyRjY5IiwKKyJmLgljICMyNTMxNzUiLAorImcuCWMgIzI0MzM2QSIsCisiaC4JYyAjNEEyQzQ4IiwKKyJpLgljICMzODM0MzQiLAorImouCWMgIzI1Mzg0NyIsCisiay4JYyAjM0QyRDcwIiwKKyJsLgljICMzNzMxNUIiLAorIm0uCWMgIzMyMzI2MCIsCisibi4JYyAjMkMzNjRDIiwKKyJvLgljICMzMjM0NTYiLAorInAuCWMgIzNEMzA2NiIsCisicS4JYyAjMjIzQzNGIiwKKyJyLgljICMzMDM4M0YiLAorInMuCWMgIzM0MzY1MyIsCisidC4JYyAjMjUzNzc4IiwKKyJ1LgljICMyODNBNTQiLAorInYuCWMgIzNBMzE3QSIsCisidy4JYyAjMzYzNTZBIiwKKyJ4LgljICMzMzNCMzgiLAorInkuCWMgIzM1MzY3MSIsCisiei4JYyAjMjYzRjdGIiwKKyJBLgljICMzRjNBNzYiLAorIkIuCWMgIzNFMzk4MyIsCisiQy4JYyAjM0EzQzc1IiwKKyJELgljICM1NzM3NUUiLAorIkUuCWMgIzRGMzc4MCIsCisiRi4JYyAjNDE0MjQwIiwKKyJHLgljICM0RTM4OEQiLAorIkguCWMgIzMxNDQ3OCIsCisiSS4JYyAjMzY0MTg3IiwKKyJKLgljICM0MjQxNjkiLAorIksuCWMgIzNFNDA4MSIsCisiTC4JYyAjNDA0NTRGIiwKKyJNLgljICMyRjRBNTIiLAorIk4uCWMgIzRCM0Y3MCIsCisiTy4JYyAjNDgzRjgzIiwKKyJQLgljICMzOTQ4NjAiLAorIlEuCWMgIzVFM0I4OCIsCisiUi4JYyAjNDY0MjhCIiwKKyJTLgljICM1NzQxN0UiLAorIlQuCWMgIzM0NEI4QSIsCisiVS4JYyAjNEI0RTREIiwKKyJWLgljICM0QzRCNjgiLAorIlcuCWMgIzQ0NEI4MyIsCisiWC4JYyAjMzc0RjgzIiwKKyJZLgljICM0NTRBOEYiLAorIlouCWMgIzRDNEQ3OCIsCisiYC4JYyAjM0E1QTVGIiwKKyIgKwljICM1QzRFN0YiLAorIi4rCWMgIzRCNTU2QyIsCisiKysJYyAjNTQ1NzU1IiwKKyJAKwljICM1MTU3NUYiLAorIiMrCWMgIzVENTY5NSIsCisiJCsJYyAjNUY1ODg3IiwKKyIlKwljICM1RTVGNUUiLAorIiYrCWMgIzUyNjI3MCIsCisiKisJYyAjNEI2QTZGIiwKKyI9KwljICM1NjYzOUQiLAorIi0rCWMgIzY2NjQ4MCIsCisiOysJYyAjNjU2Njc0IiwKKyI+KwljICM2QzZCNjkiLAorIiwrCWMgIzY0NkY2OCIsCisiJysJYyAjNzI2OTk4IiwKKyIpKwljICM1Mzc4N0MiLAorIiErCWMgIzY2NzA5OCIsCisifisJYyAjNUQ3NjdGIiwKKyJ7KwljICM2OTczN0UiLAorIl0rCWMgIzcyNzI4QyIsCisiXisJYyAjNzI3NDgyIiwKKyIvKwljICM3Mzc2NzQiLAorIigrCWMgIzdGN0Q5NiIsCisiXysJYyAjODA4MDdDIiwKKyI6KwljICM2MThBOEIiLAorIjwrCWMgIzg2N0NBOSIsCisiWysJYyAjN0M4MjhGIiwKKyJ9KwljICM3RDgwQTciLAorInwrCWMgIzdGODQ4NyIsCisiMSsJYyAjNzA4ODhGIiwKKyIyKwljICM2QThDOUEiLAorIjMrCWMgIzg2ODg4NSIsCisiNCsJYyAjN0I4RUIyIiwKKyI1KwljICM4NThGQTMiLAorIjYrCWMgIzhBOTM5NCIsCisiNysJYyAjNkE5Q0EwIiwKKyI4KwljICM3RTk3OUMiLAorIjkrCWMgIzkwOTQ5MCIsCisiMCsJYyAjOTU5MUE5IiwKKyJhKwljICM5Mzk0OUUiLAorImIrCWMgIzg5OThBMSIsCisiYysJYyAjOUI5NEEwIiwKKyJkKwljICM5QTlGOUYiLAorImUrCWMgIzk0QTBBNyIsCisiZisJYyAjOEZBN0E5IiwKKyJnKwljICNBMkEwQjciLAorImgrCWMgIzk3QTVCRSIsCisiaSsJYyAjOUVBOUIzIiwKKyJqKwljICNBMkE5QTkiLAorImsrCWMgIzg3QkFCQiIsCisibCsJYyAjQUFCMENBIiwKKyJtKwljICM5REI2QjkiLAorIm4rCWMgI0I0QUZCRSIsCisibysJYyAjQUFCNUJEIiwKKyJwKwljICNBRkI1QjYiLAorInErCWMgI0I1QjdDMyIsCisicisJYyAjQkVCN0RBIiwKKyJzKwljICNCQkMyQzciLAorInQrCWMgI0JFQzNEMyIsCisidSsJYyAjQjlDN0M5IiwKKyJ2KwljICNBNUQzRDEiLAorIncrCWMgI0M0Q0JEMSIsCisieCsJYyAjQ0FDQ0M5IiwKKyJ5KwljICNEMEQzRDYiLAorInorCWMgI0NDRDRERCIsCisiQSsJYyAjQ0JEOURBIiwKKyJCKwljICNENUQ3RDQiLAorIkMrCWMgI0UzRTdFQiIsCisiRCsJYyAjRTdFOEU1IiwKKyJFKwljICNENkVERUUiLAorIkYrCWMgI0YxRjVGNiIsCisiRysJYyAjRkRGRkZEIiwKKyJFIHUgRSBuIHMgQyBFIEUgcyBuIEMgdSBuIG4gcyBuIHMgbiBFIEUgcyBuIG4gbiBuIHMgRSBzIHMgdSBzIHMgbiBzIEUgRSBuIHUgcyBzIHMgcyBFIHUgRSBuIEUgcyBuIEUgcyBFIHUgRSB1IEUgbiBzIG4gbiBFIEUgbiBzIEUgdSBFIG4gcyBDIEUgRSBzIG4gQyB1IG4gbiBzIG4gcyBuIEUgRSBzIG4gbiBuIG4gcyBFIHMgcyB1IHMgcyBuIHMgRSBFIG4gdSBzIHMgcyBzIEUgdSBFIG4gRSBzIG4gRSBzIEUgdSBFIHUgRSBuIHMgbiBuIEUgRSBuIHMgIiwKKyJFIEUgRSBFIEUgdSBFIEUgdSBuIEUgRSB1IG4gRSB1IEUgRSBFIEUgRSBFIG4gcyBDIHUgRSBFIHMgRSBBIEUgbiBuIEUgRSBuIEUgRSB1IG4gQSBFIEUgRSBFIEUgQSBFIEUgQSBFIEUgRSBFIEUgRSBFIG4gRSBFIEUgQSBFIEUgRSBFIEUgRSB1IEUgRSB1IG4gRSBFIHUgbiBFIHUgRSBFIEUgRSBFIEUgbiBzIEMgdSBFIEUgcyBFIEEgRSBuIG4gRSBFIG4gRSBFIHUgbiBBIEUgRSBFIEUgRSBBIEUgRSBBIEUgRSBFIEUgRSBFIEUgbiBFIEUgRSBBIEUgIiwKKyJFIHUgQyBuIEUgQyBFIEUgQyB1IEMgdSBuIHMgRSBDIEUgbiBFIEUgRSBuIG4gcyBzIEMgRSBFIEUgdSBFIEUgQyBDIEUgcyBDIHUgRSBDIEMgRSBBIHUgRSBuIEUgRSBuIEUgRSBFIHUgRSB1IEUgcyBFIHUgbiBFIEUgbiBFIEUgdSBDIG4gRSBDIEUgRSBDIHUgQyB1IG4gcyBFIEMgRSBuIEUgRSBFIG4gbiBzIHMgQyBFIEUgRSB1IEUgRSBDIEMgRSBzIEMgdSBFIEMgQyBFIEEgdSBFIG4gRSBFIG4gRSBFIEUgdSBFIHUgRSBzIEUgdSBuIEUgRSBuIEUgIiwKKyJFIHUgdSB1IHUgdSBFIEUgdSBuIEUgdSB1IEEgQyB1IHUgRSBFIEUgRSB1IG4gbiB1IHUgdSB1IEEgdSBuIEUgbiBuIHUgbiBuIHUgdSB1IG4gbiBBIEUgRSB1IEUgbiB1IEUgbiBFIHUgdSB1IHUgRSBFIG4gdSBFIHUgQSBFIEUgdSB1IHUgdSB1IEUgRSB1IG4gRSB1IHUgQSBDIHUgdSBFIEUgRSBFIHUgbiBuIHUgdSB1IHUgQSB1IG4gRSBuIG4gdSBuIG4gdSB1IHUgbiBuIEEgRSBFIHUgRSBuIHUgRSBuIEUgdSB1IHUgdSBFIEUgbiB1IEUgdSBBIEUgIiwKKyJFIG4gdSBuIEUgdSBFIEUgdSBuIHMgdSBuIEEgRSB1IEUgQSBFIEEgRSBuIG4gcyBzIHUgRSBFIHMgbiBBIEUgbiBuIEUgbiBuIG4gRSB1IG4gQSBBIEEgRSBuIEUgQSBuIEUgQSBFIG4gRSBuIEUgcyBFIG4gbiBBIHUgQSBFIEUgbiB1IG4gRSB1IEUgRSB1IG4gcyB1IG4gQSBFIHUgRSBBIEUgQSBFIG4gbiBzIHMgdSBFIEUgcyBuIEEgRSBuIG4gRSBuIG4gbiBFIHUgbiBBIEEgQSBFIG4gRSBBIG4gRSBBIEUgbiBFIG4gRSBzIEUgbiBuIEEgdSBBIEUgIiwKKyJFIEMgRSB1IHUgRSBFIEUgRSBuIEUgQyBFIG4gQyB1IEMgRSBDIHMgRSB1IEEgcyBFIEUgQyBDIHMgQyBzIEUgbiBzIEMgRSBuIHUgQyBFIHMgbiBBIEUgdSBDIEMgcyB1IEMgbiBDIEMgQyB1IEMgRSBFIG4gQyBzIEUgcyBFIEUgQyBFIHUgdSBFIEUgRSBFIG4gRSBDIEUgbiBDIHUgQyBFIEMgcyBFIHUgQSBzIEUgRSBDIEMgcyBDIHMgRSBuIHMgQyBFIG4gdSBDIEUgcyBuIEEgRSB1IEMgQyBzIHUgQyBuIEMgQyBDIHUgQyBFIEUgbiBDIHMgRSBzIEUgIiwKKyJFIG4gRSBuIEUgRSBFIEUgRSBuIHMgdSBuIEEgRSB1IEUgQSBFIEUgRSBuIG4gbiBuIEUgRSBFIEUgbiBFIEUgbiBFIEUgRSBuIG4gRSBFIEUgRSBFIEEgRSBuIEUgRSBuIEUgRSBFIG4gRSBuIEUgQSBFIG4gbiBFIEUgQSBFIEUgbiBFIG4gRSBFIEUgRSBFIG4gcyB1IG4gQSBFIHUgRSBBIEUgRSBFIG4gbiBuIG4gRSBFIEUgRSBuIEUgRSBuIEUgRSBFIG4gbiBFIEUgRSBFIEUgQSBFIG4gRSBFIG4gRSBFIEUgbiBFIG4gRSBBIEUgbiBuIEUgRSBBIEUgIiwKKyJFIEUgRSBFIEUgRSBFIEUgRSBFIEUgRSBDIHMgRSBFIEUgRSBFIEUgRSBFIG4gcyBDIEUgRSBFIEUgRSBFIEUgRSBFIEUgcyBDIEUgRSBFIEUgRSBzIEUgRSBFIEUgRSBFIEUgRSBFIEUgRSBFIEUgRSBFIHUgRSBFIEUgcyBFIEUgRSBFIEUgRSBFIEUgRSBFIEUgRSBFIEMgcyBFIEUgRSBFIEUgRSBFIEUgbiBzIEMgRSBFIEUgRSBFIEUgRSBFIEUgRSBzIEMgRSBFIEUgRSBFIHMgRSBFIEUgRSBFIEUgRSBFIEUgRSBFIEUgRSBFIEUgdSBFIEUgRSBzIEUgIiwKKyJFIEUgRSBBIEEgdSBFIEUgbiBuIEUgRSBuIEEgcyBuIHMgQSBFIEUgQSBBIG4gcyBzIG4gRSBBIHMgRSBBIEEgbiBuIEUgRSBuIEUgcyBuIG4gQSBzIEUgRSBBIEUgQSBBIEUgQSBFIEUgRSBFIEUgcyBBIG4gQSBFIEUgQSBBIEUgRSBFIEEgQSB1IEUgRSBuIG4gRSBFIG4gQSBzIG4gcyBBIEUgRSBBIEEgbiBzIHMgbiBFIEEgcyBFIEEgQSBuIG4gRSBFIG4gRSBzIG4gbiBBIHMgRSBFIEEgRSBBIEEgRSBBIEUgRSBFIEUgRSBzIEEgbiBBIEUgRSBBIEEgIiwKKyJuIG4gRSBuIG4gbiBFIEUgbiBuIHMgdSBuIG4gcyB1IG4gbiBFIEUgbiBuIG4gbiBuIG4gbiBuIG4gbiBuIG4gbiBuIG4gRSBuIG4gbiBuIG4gbiBFIG4gRSBuIEUgbiBuIEUgbiBFIG4gbiBuIG4gbiBuIG4gbiBFIEUgbiBuIG4gbiBFIG4gbiBuIEUgRSBuIG4gcyB1IG4gbiBzIHUgbiBuIEUgRSBuIG4gbiBuIG4gbiBuIG4gbiBuIG4gbiBuIG4gbiBFIG4gbiBuIG4gbiBuIEUgbiBFIG4gRSBuIG4gRSBuIEUgbiBuIG4gbiBuIG4gbiBuIEUgRSBuIG4gIiwKKyJFIEUgRSBzIHMgQyBFIEUgcyBuIEUgRSBzIG4gcyBuIHMgcyBFIEUgcyBzIHMgcyBzIHMgRSBzIHMgRSBzIHMgbiBzIEUgcyBuIEUgcyBzIHMgcyBzIEUgRSBzIEUgcyBzIEUgcyBFIEUgRSBFIEUgcyBzIG4gcyBFIEUgcyBzIEUgRSBFIHMgcyBDIEUgRSBzIG4gRSBFIHMgbiBzIG4gcyBzIEUgRSBzIHMgcyBzIHMgcyBFIHMgcyBFIHMgcyBuIHMgRSBzIG4gRSBzIHMgcyBzIHMgRSBFIHMgRSBzIHMgRSBzIEUgRSBFIEUgRSBzIHMgbiBzIEUgRSBzIHMgIiwKKyJFIHUgRSB1IHUgdSBFIEUgdSBuIEUgdSB1IG4gQyB1IEMgRSBFIEUgRSB1IG4gcyBDIHUgQyB1IHMgdSBuIEUgbiBuIHUgRSBuIHUgQyB1IG4gbiBFIEUgRSB1IEUgbiB1IEUgbiBFIHUgdSB1IHUgRSBFIG4gdSBFIEUgQSBFIEUgdSBFIHUgdSB1IEUgRSB1IG4gRSB1IHUgbiBDIHUgQyBFIEUgRSBFIHUgbiBzIEMgdSBDIHUgcyB1IG4gRSBuIG4gdSBFIG4gdSBDIHUgbiBuIEUgRSBFIHUgRSBuIHUgRSBuIEUgdSB1IHUgdSBFIEUgbiB1IEUgRSBBIEUgIiwKKyJ1IHUgQyBuIG4gdSBFIEUgbiB1IEMgdSBuIG4gcyB1IG4gbiBFIEUgbiBuIG4gbiBuIG4gdSBuIG4gdSBuIG4gbiBuIHUgRSB1IHUgbiBuIG4gbiBBIHUgRSBuIEUgbiBuIEUgbiBFIHUgdSB1IHUgbiBuIG4gbiBFIEUgbiBuIHUgdSBDIG4gbiB1IEUgRSBuIHUgQyB1IG4gbiBzIHUgbiBuIEUgRSBuIG4gbiBuIG4gbiB1IG4gbiB1IG4gbiBuIG4gdSBFIHUgdSBuIG4gbiBuIEEgdSBFIG4gRSBuIG4gRSBuIEUgdSB1IHUgdSBuIG4gbiBuIEUgRSBuIG4gIiwKKyJFIEUgQyBFIG4gQyBFIEUgcyBFIEUgRSBDIHMgcyBFIG4gRSBFIHMgcyBFIG4gcyBDIHMgdSBzIEEgRSBzIHMgRSBzIEMgRSBDIEUgbiBzIHMgbiBzIEUgRSBFIEUgcyBFIEUgbiBFIEUgQyBFIEMgRSBBIHUgRSBzIEUgcyBzIEUgRSBDIEUgbiBDIEUgRSBzIEUgRSBFIEMgcyBzIEUgbiBFIEUgcyBzIEUgbiBzIEMgcyB1IHMgQSBFIHMgcyBFIHMgQyBFIEMgRSBuIHMgcyBuIHMgRSBFIEUgRSBzIEUgRSBuIEUgRSBDIEUgQyBFIEEgdSBFIHMgRSBzIHMgIiwKKyJFIEUgRSBFIEUgQyBFIEUgQyBuIEUgRSBDIG4gRSB1IEUgRSBFIEUgRSBFIHMgcyBDIEMgRSBFIHMgRSBzIEUgbiBzIEUgcyBuIEUgRSBDIHMgcyBzIEUgRSBFIEUgcyBFIEUgcyBFIEUgRSBFIEUgRSBFIG4gRSBFIEUgcyBFIEUgRSBFIEUgRSBDIEUgRSBDIG4gRSBFIEMgbiBFIHUgRSBFIEUgRSBFIEUgcyBzIEMgQyBFIEUgcyBFIHMgRSBuIHMgRSBzIG4gRSBFIEMgcyBzIHMgRSBFIEUgRSBzIEUgRSBzIEUgRSBFIEUgRSBFIEUgbiBFIEUgRSBzIEUgIiwKKyJ1IHUgQyB1IHUgdSBFIEUgdSBuIEMgdSB1IG4gQyBuIHUgdSBFIEUgdSB1IG4gbiB1IHUgdSB1IG4gdSBuIHUgbiBuIHUgRSBuIHUgdSB1IG4gbiBFIHUgRSB1IEUgbiB1IEUgbiBFIHUgdSB1IHUgdSB1IG4gdSBFIEUgbiB1IHUgdSBDIHUgdSB1IEUgRSB1IG4gQyB1IHUgbiBDIG4gdSB1IEUgRSB1IHUgbiBuIHUgdSB1IHUgbiB1IG4gdSBuIG4gdSBFIG4gdSB1IHUgbiBuIEUgdSBFIHUgRSBuIHUgRSBuIEUgdSB1IHUgdSB1IHUgbiB1IEUgRSBuIHUgIiwKKyJFIEUgRSBFIEUgRSBFIEUgRSB1IEUgRSBFIG4gRSB1IEUgRSBFIEUgRSBFIHMgcyBFIEUgRSBFIHMgRSBzIEUgbiBzIEUgcyB1IEUgRSBFIHMgcyBFIEUgRSBFIEUgcyBFIEUgcyBFIEUgRSBFIEUgRSBFIG4gRSBFIEUgcyBFIEUgRSBFIEUgRSBFIEUgRSBFIHUgRSBFIEUgbiBFIHUgRSBFIEUgRSBFIEUgcyBzIEUgRSBFIEUgcyBFIHMgRSBuIHMgRSBzIHUgRSBFIEUgcyBzIEUgRSBFIEUgRSBzIEUgRSBzIEUgRSBFIEUgRSBFIEUgbiBFIEUgRSBzIEUgIiwKKyJFIHUgRSBuIG4gdSBFIEUgbiB1IEUgdSBuIEEgcyB1IHMgQSBFIEUgQSBuIG4gcyBzIG4gQyBuIHMgdSBuIEEgbiBuIHUgRSB1IHUgcyBuIG4gbiBFIEUgRSBuIEUgbiBuIEUgbiBFIHUgdSB1IHUgcyBBIG4gbiBFIEUgQSBBIEUgdSBFIG4gbiB1IEUgRSBuIHUgRSB1IG4gQSBzIHUgcyBBIEUgRSBBIG4gbiBzIHMgbiBDIG4gcyB1IG4gQSBuIG4gdSBFIHUgdSBzIG4gbiBuIEUgRSBFIG4gRSBuIG4gRSBuIEUgdSB1IHUgdSBzIEEgbiBuIEUgRSBBIEEgIiwKKyJFIHUgRSBuIEUgRSBFIEUgRSBuIEUgdSBuIEEgRSBuIEUgQSBFIEUgRSBuIG4gcyBzIEUgRSBFIEUgdSBFIEUgbiBFIEUgRSBuIHUgRSBFIEUgRSBFIEUgRSBuIEUgRSBuIEUgRSBFIHUgRSB1IEUgcyBFIG4gbiBFIEUgQSBFIEUgdSBFIG4gRSBFIEUgRSBFIG4gRSB1IG4gQSBFIG4gRSBBIEUgRSBFIG4gbiBzIHMgRSBFIEUgRSB1IEUgRSBuIEUgRSBFIG4gdSBFIEUgRSBFIEUgRSBFIG4gRSBFIG4gRSBFIEUgdSBFIHUgRSBzIEUgbiBuIEUgRSBBIEUgIiwKKyJFIEUgRSBBIEUgQyBFIEUgQyBFIEUgRSBuIEEgRSBFIEUgQSBFIEUgRSBBIG4gQSBuIEMgRSBFIEUgRSBFIEUgQSBDIEUgRSB1IEUgRSBDIEMgRSBFIEUgRSBBIEUgRSBBIEUgRSBFIEUgRSBFIEUgQSBFIG4gQSBFIEUgQSBFIEUgRSBFIEEgRSBDIEUgRSBDIEUgRSBFIG4gQSBFIEUgRSBBIEUgRSBFIEEgbiBBIG4gQyBFIEUgRSBFIEUgRSBBIEMgRSBFIHUgRSBFIEMgQyBFIEUgRSBFIEEgRSBFIEEgRSBFIEUgRSBFIEUgRSBBIEUgbiBBIEUgRSBBIEUgIiwKKyJFIG4gcyBuIHMgQyBzIEUgcyBuIHMgdSBuIG4gcyB1IHMgbiBzIHMgcyBuIG4gcyBzIHMgQyBzIHMgbiBzIHMgbiBzIEMgRSBuIG4gcyBzIHMgcyBzIG4gcyBuIHMgcyBuIHMgcyBzIG4gQyBuIEMgcyBzIG4gbiBzIEUgbiBzIEUgbiBzIG4gcyBDIHMgRSBzIG4gcyB1IG4gbiBzIHUgcyBuIHMgcyBzIG4gbiBzIHMgcyBDIHMgcyBuIHMgcyBuIHMgQyBFIG4gbiBzIHMgcyBzIHMgbiBzIG4gcyBzIG4gcyBzIHMgbiBDIG4gQyBzIHMgbiBuIHMgRSBuIHMgIiwKKyJ1IHUgRSBuIG4gdSBFIEUgbiB1IEMgdSBuIG4gcyB1IG4gbiBFIEUgbiBuIG4gbiBuIG4gdSBuIG4gdSBuIG4gbiBuIHUgRSB1IHUgbiBuIG4gbiBzIHUgRSBuIEUgbiBuIEUgbiBFIHUgdSB1IHUgbiBuIG4gbiBFIEUgbiBuIHUgdSBFIG4gbiB1IEUgRSBuIHUgQyB1IG4gbiBzIHUgbiBuIEUgRSBuIG4gbiBuIG4gbiB1IG4gbiB1IG4gbiBuIG4gdSBFIHUgdSBuIG4gbiBuIHMgdSBFIG4gRSBuIG4gRSBuIEUgdSB1IHUgdSBuIG4gbiBuIEUgRSBuIG4gIiwKKyJzIG4gRSBuIG4gbiBFIEUgbiBuIHMgdSBuIG4gcyB1IHMgbiBFIEUgbiBuIG4gcyBzIG4gcyBuIHMgbiBuIG4gbiBuIG4gRSBuIG4gcyBuIG4gbiBzIG4gRSBuIEUgbiBuIEUgbiBFIG4gbiBuIG4gcyBuIG4gbiBFIEUgbiBuIHMgbiBFIG4gbiBuIEUgRSBuIG4gcyB1IG4gbiBzIHUgcyBuIEUgRSBuIG4gbiBzIHMgbiBzIG4gcyBuIG4gbiBuIG4gbiBFIG4gbiBzIG4gbiBuIHMgbiBFIG4gRSBuIG4gRSBuIEUgbiBuIG4gbiBzIG4gbiBuIEUgRSBuIG4gIiwKKyJBIG4gQyBuIG4gbiBFIEUgbiBuIHMgdSBuIG4gcyBuIG4gQSBFIEUgQSBuIG4gbiBuIG4gbiBuIEEgbiBuIEEgbiBuIG4gRSBuIG4gbiBuIG4gbiBzIEEgRSBuIEUgbiBuIEUgbiBFIG4gbiBuIG4gQSBBIG4gbiBFIEUgQSBBIEEgbiBDIG4gbiBuIEUgRSBuIG4gcyB1IG4gbiBzIG4gbiBBIEUgRSBBIG4gbiBuIG4gbiBuIG4gQSBuIG4gQSBuIG4gbiBFIG4gbiBuIG4gbiBuIHMgQSBFIG4gRSBuIG4gRSBuIEUgbiBuIG4gbiBBIEEgbiBuIEUgRSBBIEEgIiwKKyJFIEMgQyBuIG4gQyBFIEUgcyB1IEUgQyBzIHMgcyBDIHMgcyBFIHMgcyBuIG4gcyBzIHMgQyBzIHMgQyBzIHMgcyBzIEMgRSBDIHUgcyBzIHMgbiBzIEUgRSBzIEUgcyBuIEUgbiBFIEMgQyB1IEMgcyBBIG4gcyBzIEUgcyBzIEUgQyBDIG4gbiBDIEUgRSBzIHUgRSBDIHMgcyBzIEMgcyBzIEUgcyBzIG4gbiBzIHMgcyBDIHMgcyBDIHMgcyBzIHMgQyBFIEMgdSBzIHMgcyBuIHMgRSBFIHMgRSBzIG4gRSBuIEUgQyBDIHUgQyBzIEEgbiBzIHMgRSBzIHMgIiwKKyJFIG4gRSBuIEUgRSBFIEUgRSBuIHMgdSBuIEEgRSB1IEUgQSBFIEUgRSBuIG4gcyBzIEUgRSBFIEUgbiBFIEUgbiBFIEUgRSBuIG4gRSBFIEUgRSBBIEEgRSBuIEUgRSBuIEUgRSBFIG4gRSBuIEUgcyBFIG4gbiBFIEUgQSBFIEUgbiBFIG4gRSBFIEUgRSBFIG4gcyB1IG4gQSBFIHUgRSBBIEUgRSBFIG4gbiBzIHMgRSBFIEUgRSBuIEUgRSBuIEUgRSBFIG4gbiBFIEUgRSBFIEEgQSBFIG4gRSBFIG4gRSBFIEUgbiBFIG4gRSBzIEUgbiBuIEUgRSBBIEUgIiwKKyJLIHUgSyBFIEsgRSBFIEUgRSBLIEsgRSBLIEUgRSBFIEUgRSBQIEUgRSBFIFAgRSBQIFAgUCBDIFAgQyBQIEMgUCBQIFAgUCBQIFAgUCBQIFAgUCBQIFAgTSBQIEkgUCBJIEkgSSBJIEkgSSBJIEkgSSBJIEkgSSBJIEkgSSBJIEIgQiBCIEIgQiBCIHkgQiBKIEogcSBKIEogSiBxIHEgSiBKIHEgcSBKIEogZCBkIHEgcSBxIGQgSiBKIHEgcSBKIGsgZCBkIGsgSCBxIDMgZCBxIHEgZCBKIEogMyA3IGQgayA3IDcgZCBkIDcgWyBCIEIgXyBbIDcgQiBbICggIiwKKyJLIEUgSyBBIHUgdSBLIEsgSyBLIEsgQyBDIEUgRSBFIEUgRSBFIEUgRSBFIFAgQyBDIEMgQyBDIEMgQyBQIFAgQyBQIFAgUCBDIEMgQyBQIFAgUCBDIFAgQyBNIEMgTSBNIEkgSSBJIEkgSSBJIEkgeiB6IHogeiBCIEkgSSBCIEIgQiBCIEIgQiB5IHEgcSBxIHEgcSBxIHEgcSBkIEogTCBMIGsgTCBMIC4uTCBkIC4uTCBkIEwgUSAlLlEgUSBALiUuTiBpIHwuMS5kIDMgfC5OIDMgUSBZIH0uUSBWIHsuWiBSIFkgLy57LlkgIC5hLnQuMi47IGcufC5fIE4gIiwKKyJLIEsgSyBFIEUgSyBLIHUgSyBLIEsgSyBDIEMgRSBFIEMgRSBFIEUgQyBDIEMgQyBDIFAgRSBQIFAgUCBQIFAgTSBQIFAgUCBQIFAgUCBDIFAgUCBQIFAgUCBNIE0gTSBNIE0gSSBJIEkgSSBJIEkgSSB6IEkgSSBCIEkgSSBCIEIgQiBCIEIgQiB5IHkgcSB5IHEgSiBKIHEgZCBkIEogTCBMIE4gLi5MIC4uLi5kIC4uTCAzICUuUSAlLkAuQC5ALnwuJS4wIGcuZS5rIDMgfC5HIHwgfC46LmcuYS5fLl8uey5mLmYuXy5fLmYueS5nLnouZy5+IFsuYS57IFsuIiwKKyJLIEsgSyBLIEsgSyBLIEsgRSBDIEsgSyBLIEsgRSBDIEUgRSBLIEUgRSBQIEMgQyBFIFAgUCBQIFAgUCBQIFAgTSBQIFAgUCBQIFAgUCBQIEMgUCBQIFAgTSBQIE0gSSBNIEMgSSBJIE0gSSBJIEkgSSBJIHogSSBJIEIgeiBCIEIgQiBCIEIgeSB5IHkgeSB5IHEgSiBKIGQgZCBkIEogTCBMIE4gLi4uLlEgTCBkIC4uTCAzIC4uIC4gLlIgIC5ALkAuLi58IDIuZS5kIDMgIC5RIH4gfC59Ln0ufS57LnsuXy5mLmYuZi57Ll8uYS56LmYuZy4oICUuYS5fIHwuIiwKKyJ1IHUgSyBLIEsgSyBLIEsgRSB1IEUgdSBLIEsgSyBFIEUgSyBDIEUgSyBFIEsgRSBFIFAgRSBQIFAgUCBQIE0gUCBQIFAgUCBQIFAgUCBQIFAgTSBQIFAgUCBNIEMgTSBDIEMgSSBJIEkgSSBJIEkgSSBJIHogeiBJIEIgSSBJIEIgQiBCIEIgQiBCIHkgcSBxIHEgcSBKIGQgZCBxIGQgSiBKIHEgSiBMIE4gcSBxIEogZCBkIEggTiBMIGsgayBRIFEgZCAzIGsgUSAzIDMgTiBrIDMgayBRIFEgayBiIFYgWiBpIGIgWSBSIGsgZCAuLiUuSiBbIEIgcSBbIDogIiwKKyJ1IHUgdSB1IHUgSyBLIEsgSyBLIEsgSyBDIHUgSyBLIEsgSyBDIEMgRSBLIEsgUCBQIFAgRSBQIFAgUCBXIFcgTSBXIFcgUCBQIFAgUCBQIFAgUCBQIE0gUCBQIEkgUCBQIEMgQyBDIEkgSSBJIEkgSSBJIEkgeiB6IEkgQiBJIEIgQiBCIEIgQiBCIHkgeSBxIHEgcSBKIEogSiBKIHEgcSBkIHEgcSBKIGsgZCBxIGQgZCBkIGQgZCBkIGQgZCBrIGsgZCBkIHQgaSBkIGQgZCBkIDMgMyBkIGQgNyA3IGsgayB7IHsgayBrIFsgXyBIIHEgWyBfIDcgNyAoIEogIiwKKyJBIHUgdSB1IHUgdSBLIEsgSyBDIEsgQyBLIHUgSyBLIEsgSyBLIEUgUCBQIEMgUCBUIFAgRSBXIFggVyBXIFcgVyBXIFcgVyBQIFAgUCBQIFAgUCBQIE0gTSBQIFAgSSBQIFAgQyBDIEMgSSBNIEkgSSBJIEkgSSBJIHogQiBJIEkgQiBCIEIgQiBCIEIgeSBxIHEgcSBKIEogSiBkIGQgTCBKIHEgTCBOIC4uayBrICUuTiBkIGQgJS5OIGQgUSBALkAuUSBiICsuRyBkIGIgfC5HIDMgfCBbLiUufiAgLmYuYS5ALkAudC55LiAuWSBULnkuNyB7IGcufC5xIFcuIiwKKyJ1IEEgdSB1IHUgdSBLIEsgSyBFIEsgSyBDIEsgSyBLIEUgRSBFIEsgRSBFIEUgUCBFIFQgVyBUIFcgWCBYIFcgVyBYIFcgVyBXIFcgUCBQIFAgTSBNIFAgUCBDIFAgUCBNIFAgUCBDIE0gTSBJIEkgSSBJIEkgSSB6IEkgeiBCIEkgSSBCIEIgQiBCIEIgeSB5IHkgcSBxIHEgSiBkIGQgTCBKIGQgLi5OIC4uTCBkICUuUSBkIGQgUSBRIGQgIC5ALkAuJS58IFIgIC4zIHwgIC5SIDMgMyBZICAufiBhLmEuYS5mLmYuYS50LmEuWiB6LksuSiAoIFsuQC4yLlguIiwKKyJ1IHUgdSB1IHUgSyBLIEsgSyBLIEsgSyBFIEsgSyBDIEsgSyBLIEUgSyBFIEUgRSBUIFQgWCBXICQuWCBYIFcgVyBXIFcgVyBXIFcgVyBQIFAgTSBQIFAgUCBNIE0gUCBQIEMgUCBDIEMgQyBJIEkgSSBJIEkgSSBJIHogeiBCIHogQiBJIEIgQiBCIHkgeSBxIHEgcSBxIHEgSiBkIGQgTCBKIGQgLi5RIFEgTCBkIC4uTCBkIGQgUSBRIGQgJS5ALlkgLi5+IFIgIC4zIDMgIC5HIGQgZCAgLiAufiB8LmYuXy46Ln0udC5kLiUuRyB6LnkucSBbICAuQC5kIEguIiwKKyJ1IHUgdSB1IHUgSyBLIEsgSyBLIEsgdSBLIEsgSyBLIEsgSyBQIEsgRSBFIEUgRSBXIFggWCBYIFggWCBYIF4uVyBYIFggWCBXIFggVyBXIE0gUCBQIFAgUCBQIFAgQyBQIFAgQyBQIFAgQyBJIE0gSSBJIEkgSSBJIHogeiBJIEIgeiBJIEIgQiBCIEIgQiB5IHEgcSBxIGQgZCBxIGQgSiBxIHEgSiBOIGsgcSBkIEggZCBkIGQgayBkIGQgZCBOIE4gayBkIGsgSCBkIGQgayBrIDMgZCBIIEggeyAzIE4gTiAzIDogLi5OIF8gKCAxLk4gKCBbIDcgcSBbIEogIiwKKyJ1IHUgQSB1IHUgSyBLIEsgSyBLIEsgSyBLIEsgSyBLIEsgSyBFIFggVCBUIEUgRSAsLiwuWCBYIDwuPC48Ll4uXi48LjwuWCBYIFggVyBNIFcgVyBQIFAgUCBQIEMgQyBDIFAgUCBDIFAgUCBDIEMgTSBJIEkgSSBJIEkgeiBJIEkgSSBCIEkgQiBCIEIgeSB5IHkgcSBxIGQgSiBKIGQgcSBKIHEgcSBkIEggcSBkIGQgSiBkIGQgayBpIGkgZCBkIE4gTiBrIGQgayBrIGQgayAgLnwuTiAzIGsgfC58LnwuaSAoIDcgTiBOIDcgKCBHIGsgKCBfIHEgcSBbICggIiwKKyJyIHUgdSB1IEsgSyBLIEsgSyBLIEsgdSBLIEsgdSB1IEsgSyBFIEsgVCBUIFQgWCBXICwuLC48LjwuPC48Ll4uXi48LjwuPC48Ll4ufi5XIFcgUCBuIFsgPiBbID4gPiA+ID4gPiA5IEMgUCBQIEMgQyBJIEkgSSBJIEkgSSB6IEkgeiB6IEkgQiBCIEIgQiB5IHkgcSBxIHEgSiBKIEogcSBMIEwgcSBkIC4uTiBkIGQgJS5OIGsgRyB0IFIgUiBALlIgfS5HIHwgfC5ALnwgMS53LnkuZy4wIH0uSC5ILlguYi47IHwuXy50LnwufiBhLisuXyB7IGcuYS5fIGQgIiwKKyJ1IHIgdSB1IEsgSyBLIEUgSyBLIEsgSyBLIEsgQyB1IEsgRSBLIEsgVCBUICQuJC4kLiQufi5eLjwubi51LnMucy51LjwuPC5eLk0gQyBuIDkgPC4uK3srMSs4KzgrOCsyKzIrJisuKzwuOSA5IDkgTSBJIEkgTSBJIEkgSSB6IHogeiBCIEIgSSBCIEIgQiBxIHEgeSBxIHEgSiBKIEogZCBMIEwgZCBkIE4gayBkIGQgUSBRIGIgQC50IFIgWSAxLkAufS5ALl0gIC5SIGIgeS4nLlogYS5ZIH0uSC5ILlguYS4lIGcuei50LmEufiBZICsuXyAoIEAuYi5fIE4gIiwKKyJyIHUgdSB1IEsgdSBLIHUgSyBLIEsgSyBLIEsgQyBLIEsgSyBLIEsgVCBUICQuJC4kLjwuPC5+LnMudS51LnMucy51LnUuXi5JIFcgbi5bK3MrQytFK0UrRSt2K3YrditrK2sraytrK2srNyt+K1AuUCBbIEkgTSBNIEkgSSBJIHogSSBJIEIgQiBCIEIgQiB5IHkgeSBxIHEgZCBKIEogcSBMIEwgZCBkIE4gayBkIGQgUSBOIGsgUiB0IFIgdCBZIFkgWSBRIH4gIC5HIGIgZS5lLn0uYS5pICAuSC5ILlguWy47ICUuZi4vLiUueyB8Ln0uXyBbICUufS5fIE4gIiwKKyJyIHUgciByIEsgdSB1IEsgdSBLIHUgdSBLIEsgSyBLIEUgSyBLIEsgVCBUICQuJC5YIDwuPC5zLnMuUC5QLi4rLitQLm8ufi5eK3MrRitHK0YrdSs2KyUrRi49LiEgLiAuIC4gNCBvIHguYC4pKzcrMismK0kgWyBNIEkgSSBJIEkgeiBJIEkgQiBJIEIgQiB5IHkgcSBxIHEgSiBkIGQgZCBxIHEgZCBkIGQgZCBkIGQgZCBrIGQgayBpIGkgayB+IGsgYiBrIGQgayBiIGQgayAgLjEuTiAzIGsgRyAgLiUuayBfIDMgTiBrIF8gWyBCIDcgWyBbIEIgNyAoIF8gIiwKKyJ1IHIgciByIHUgSyBLIEsgSyB1IEsgdSBLIEsgSyBLIEsgSyBLIFQgVCBUICQuJC4kLjwuPC51LlAuVi4tKygrKCstKygreitHK0crRCs2K1UuPS4jIC4gLiA0IDQgNCA0IDQgNCA0IDQgLiAuICEgeC4qK34rUC5JIFsgSSBJIEkgSSBJIEkgSSBCIEIgQiBCIHkgcSBxIHEgSiBIIGQgSiBOIE4gZCBkIEwgayBkIGsgUSBRIGsgYiBRIFEgYiBiIFEgUSBiIGIgdCBWIDAgYiBSIFIgYiBiICAuRyB8IDsgTiBMIF8gXyAuLj4uXyBfIC4uTCBfIDcgJS58LmsgIiwKKyJ1IHUgdSBLIHUgdSB1IHUgSyB1IHUgSyBLIEsgSyBLIEsgSyBLIFQgVCBUICQuJC4kLjwubi51LlAuLStjK3QrdCt5K0crRytEKzYrNi41ICsgMiBvIG8gMiA0IDQgNCA0IDQgNiA2IDQgNiA2IDYgIyAjIG0gTS4mK14ueiBJIEkgSSB6IEkgSSBCIEkgQiBCIHkgeSBxIEogZCBKIE4gTCBOIC4uTiBrICAuayBrICAuUiAgLkAuUiBZIFkgWSBZIFogfS5ZIFYgYCBaIFogWSBaIGYuXy5fLl8uZi59Ll0gfS5iLjsgayBLLksuSCBfIGEuYS5fICAuOS5mLnQuIiwKKyJ1IHIgciByIEsgSyB1IEEgQSBBIHUgSyBLIEsgSyBDIE0geiBCIEogSCBOID4uPi4nLmMuYy5OLiMrPCt0K0crRytHK0crcitOLjMgdyB5IHkgeiBNIDkgQSB9IHggYSA2IDYgNiA2IDYgNiA2IDYgNiA2IDYgIyBtIHIuPC5JIEkgSSBJIEkgeiB6IHogQiBCIHEgcSBxIEogSiBKIEwgTCBMIC4uTiBkIFEgayBiICAuQC4gLkAuQC5ZIFkgWSA6LkAuOi46LjouYCArLnsuXy59Ln0uXy5mLmIuXy59LnwgWSB9LnsgZCBXLlcuSCAoIFkgfS57IH0uei5mLmYuIiwKKyJyIHIgciBEIEQgRCBLIEsgSyB1IHUgdSBLIEsgSyBLIEMgUCBDIEkgSSAqLiouKi4zLjMuMy5KLlouXSt6K0crRytGKzgrdS5eLiwuLC5FIEEgQSB9IHggeCBhIGEgNiA2IDYgNiA2IDYgNiA2IDYgNiA2IDUgbSA2IDYgTyBUIEkgSSBJIHogSSB6IEIgQiBCIHkgeSBxIHEgSiBKIGsgTCBOIE4gayBkIE4gayBrIFEgIC4gLkcgRyBZIFkgdCBSIFkgWSB0IFYgWiBaIFogdCB9LjouViBWIDouXy4gLjMgUSB8Ll8gMyBDLnkuXyAoICAufC5fIEwgYS5mLjouIiwKKyJwIHIgcCBEIEQgciBEIEQgRCBwIEQgciBLIEsgSyBLIEsgSyBLIFQgVCBEIEQgJC4kLjwubi51LlAuaStHK0crRCtfK00ucS42Lj0uPS5tIG0gbyBvIG8gbyA1IDYgNiA2IDYgNiA2IDYgNiA2IDYgNiA2IGEgNiA2IDYgNiA1IHIgSSBJIEkgSSBJIEkgQiBCIEIgeSBKIHEgSiBxIGQgZCBrIGsgZCBrIGsgZCBkIGsgayBrIGIgYiBpIGIgYiBiIGkgYiBiIGIgMCBpIGIgYiAwIGIgfiB+IHwgYiAzIDMgMyBfIDcgXyBjIGIgWyBfIF8gKCBbIDMgYiAzIFsgIiwKKyJwIHIgciBEIEQgSyBEIEQgbCBoLkQucCBEIEsgSyBLIEsgSyBLIFQgVCBUICQuJC4kLjwubi5YIFsrRytHK3krKitgLkYuci4hLiEuTyBtIG0gbSBtIG0gbSA2IDYgNiA2IDYgNSA2IDYgNiA2IDYgNiA2IGEgYSA2IDYgYSBhIDUgcCBJIEkgeiBJIEkgQiBCIEIgeSBKIHEgcSBkIEogTCBOIGQgayBRIFEgYiBpIEcgUSBHICAufC58LkcgMCAxLnwuRyBHIFIgWSBpIGkgOi46LkcgfCAgLlEgMyBRIDouOi5OIDMgfC4vLmkgTCB9Ln0uTiBHIHsuLy5OIDMgIiwKKyJyIHIgciBEIEQgciBEIEsgbCBwLkUucCByIEsgSyBLIFMgSyBLIFQgVCBUIFQgJC4kLjwudSAuK0crRyt1K0wuci5NLnEuaS4hLiEuTyBPIG0gbSBtIG0gbSBtIDYgNSA2IDYgNiA1IDYgNiA2IGEgYSBhIG0gYSBhIGEgYSBhIGEgbSB4IEkgSSBJIEIgQiBCIEIgeSBxIEogSiBkIEogLi5OIGIgTiBHICAuUiBSIFIgQC58LnwuViBZIDEufS59LjEuZS5hLlogfS4rLlYgYi5mLicufCB9LkAufCB9LmYuZi5hLl0gfS45LjAgWy5mLnoudC44Li8uLy45LmIgIiwKKyJyIHIgcCBEIEQgSyBLIGwgbCAyLmMubCBwIEsgSyBLIFMgRCBLIEsgRCBTIFMgUyAkLksgbi5DK0creStxLiEuci5xLiEuIS4tLk8gTyBPIG0gbSBtIG0gbSA1IDUgbSA2IDYgNiA1IDYgNiA2IGEgYSBtIG0gbSBhIGEgYSBhIGEgYSA1IHIgSSBJIEkgSSBCIEIgQiBxIEogSiBkIGsgLi5OIGIgTiBRIFEgUiAgLlIgUiB8LnwuViBZIH0ufS5gIFYgZS5hLisuXy5aICgueS55LicufCArLiAufCB9LnQuLy5hLn4gQC46Ln4gYS56LjkuZi44LjkuLy44LmsgIiwKKyJyIHAgcCBwIEQgSyBnIH4ucC4gLmQucC5+LnAgSyBLIFMgUyBLIEsgUyBEIEQgUyBTIEUgcStHK0Mrci5PID0uIS4hLiEuTyBPIG0gTyBtIG0gbSBtIG0gbSBtIG0gNSA2IDUgYSA2IDYgYSBhIGEgbSBhIG0gbSBhIGEgYSBhIGEgYSBhIGEgQSBJIHogSSBCIEIgeSBxIEogSiBkIGQgTiBOIGsgayBRIEcgYiBHIFIgUiBpICcufS4nLnQgfS59LlsuMS5SIFogViBpIEcgZS5lLmIgYiBSIEcgMyBHIF8uWiBOIF8gUSA+Ll8gTiBmLn0uRyB0IC8uLy50IF8gIiwKKyJyIHIgciBwIHAgZyBNIEcuRS46Ll8uRy5FLlcgcCB1IEsgSyBEIEsgSyBEIFMgUyBeIDsrRytHKyUrKyAhLj0uPS5PID0uTyBPIE8gYSBtIG0gbSBtIG0gbSBtIG0gNiBtIGEgbSA1IGEgYSBhIG0gZyBnIGcgZyBhIGEgYSBhIGcgZyBhIGcgYSBDIHogSSBJIEIgQiB5IHEgcSBkIHEgayBrIGQgayBiIGsgYiBiIGIgYiBiIGIgaSBpIGkgYiBHIEcgaSBiIGIgaSBiIHwgRyBHIGIgayBkIHwgZCAzIDMgayBxIF8gNyA6IDcgXyA3IEogcSBfIDcgMyBfIF8gIiwKKyJwIHIgRCB4IEUgIy43LkcuRS52LjguOC5HLnYuIy5FIEsgSyBTIEsgSyBLIFQgSyBUIEIrRytqKysgbSBtIG0gbSBPIG0gTyBtIG0gbSBtIG0gbSA1ICsgKyA1IDYgNiBtIDUgNSBtIGEgZyBnIGcgYSBhIGEgZyBhIGEgZyBnIGEgbCBsIGwgZyBwIEkgQiBCIEIgQiBxIHEgZCBrIGsgaSBHIFEgaSBpIEcgaSBiIDAgWSBSIDAgdCBaIFogdCB0IFogWiB0IHQgWiBaIHQgViBfLl8uRyBdIF8uWSB+IEcgLy45LkAufiBbLjEuXyBIIEkueS57IF8gfS58LjsgIiwKKyJEIEQgcCB4IGMuRy5HLkcuUS5FLjcuUS5HLkcuRS5XIEQgSyBTIEsgSyBLIFQgXiBeK0crQytpLisgbSBtIG0gbSBtIG0gbSBtIG0gbSBtIDQgLiA9LiUrLytVLm0gKyAuIFUuVS4pIG0gNCA2IDYgbyA0IDQgNiA0IDQgNCA2IDQgNiA2IDQgZiA0IHggaiBhIGogYSBqIGogaiBqIHggeCB4IHggeCB4IHggaiBFIDAgeiBhID0gciBFIHggIy4vLmAgOi5fLl8uWiBfLl8uXy57LmYuXy5jICMubCB4ICkuJC4kLlcgJSB9LmIueyAuLkkueS4zIF8gOi5hLjsgIiwKKyJwIHAgRCBEIHIgbC5FLjcuNy43LjcuNy43LnAuLC5EIEQgRCBEIFMgSyBLIEsgVCB5K0crfCsuIDYgNiBtIG0gbSBtIG0gbSBtIG0gbSBvIDQgXytGK0crRitHK0YrfCtpLkIrcysrIDUgLS5qK3MrcCtwK3ArcCtwK3ArcCtwK3ArcCtwK2oraitwK3ArLytqK3graitqK2oraitqK2oraitqK2oraitkKzYrZCtqK2crXyBVLnArais5KzkrZCs0K3suWiBaIF8uOi57LlogXy5fLl8uWiBiICEgRi45KzMrMytfK2Qrbit9Ln0uXyAuLkkuZi4zICggIC50Ln4gIiwKKyJwIHAgRCBEIHAgaCByIC4uOC4vLnsuMC47LmggcCBEIFMgRCBEIEQgSyByIDEgJitHK0ErPS40IDQgNCA2IDYgbSBtIG0gbSBtIG0gbyAyIDkrRyt5Ky8rKyslK3ArRytGK0YrcytAIDUgeC55K3kreitDK0Irdyt3K3krcytzK3crcytzK3ordytlK28rYStdK2ErcytiKzEraStvK2kraStpK2kraStpK28rOCsqK28rViBwLigraitiKyorYC5wK0EudCAwIDAgViBWIHQgMCBWIFYgRyA3IC4gNitVLjYuNi58K1srWysuLi4uXyBkIGIuYi5fIF8gSiAuLl8gIiwKKyJwIEQgcCBwIHAgRCBoIEEgMC5jLmMuUy5DIEQgRCBEIEQgRCBEIEQgRCBEIDwgYStHKzYrLiA0IDQgNCA2IDYgNiA2IDYgbSBtIG0gLiAlK0crQys2LisgKyArICsgMytGK0MrcyspICMgaS53K3kreStAK3Iuci4tLl8reit5K0Arci5yLkwuPitzK2krZStbID4gVS5zKzErcStKLmwubC5wLnAucC5wLk4uNitmK2krJy4sICUgLS42K2UrKisxKyErLCBiIGIgMCBpIGsgYiBjIDAgaSBeIC0uMytqKzYuPit9K04gOyAzIHEgNyBfIEcgaSBfIF8gYiBrIF8gIiwKKyJsIGwgbCBsIGwgbCBwIGcgJy5HLlEucC5oIHAgcCBsIGggcCBsIHAgbCA8IHIuQStGK0YuLiA0IDQgNCAyIDQgNCAyIDIgMiAyIDIgMiB4K0crPisuIDUgNSBtICsgLiBkK0creStPICsgRi55K0MreC4rIEAgKSArID4reit3K3IuQCApICkgKyAlK3orZStUID4gIyBwKzgrcyt8ICUgJSAnIC0gLSAtICogKS42K3crWiBaIHQgIyAzK0MrcCtgLmwrYCBpIGkgOi5WIHwgUiB7Ll8uWiA9ICUrait5KzYuNitZLmIuJSBiLmEueyB7IH0uZi47IFEgOS5mLmYuIiwKKyIzLjMuNC40Ll4uNC40Ll4uTSBVIGkgMi5eLjMuMy4zLjQuNC40LjQuNC4jLkoubCtoKywuLC4sLiwuLC4sLiwuLC4sLl4uXi5eLnggPS5GK0crVi45IF4uXi5eLl4uTSBGLkQrQytzLn0gRi5DK3ErWyAqLiouKi4pID4reit3K1YuSSAqLiouSSAtLnMraSsjLkIgZSBkKzgrcSsnLjAgMCBWIFYgdCBjIFUgPiAsK0MrYCBgIC8uPSAzK0EraisqK2UrUy4sIDAgWiBgIGMgey4vLjguMi40ID4rcytkKzYuYStULksufCBZIGYufiB7IF8uOS5+IH0uSS45LkkuIiwKKyJSLlIuUi5SLlIuUi5SLksuKi46LjIuQi5ZLkkuSS5JLlIuUi5LLlIuUi5SLlkuIytSLlIuSy5SLksuSy5LLk8uTy5JLk8uUi5SLn4uRi5HK0crIyt2LkIuQi5CLkIuQi5eIGorRisjK3EgRi5GKzwrOC52LnYuOC5eID4reit5KyMrLy4wLjAuOC54IDkrdCswLlYgaiBkK2IrcSsmLiYuJi4mLiYuYCBgICYuOCAkK3orOC43LiYuPSAzK3ArfCsxK34rPCsqIGMgYCBVIDggVSA4LjcuSSBpLmorfCszK3guZSsjK0EuJyBaIF8ufCAzIFogOS5+IH0uQi44LkIuIiwKKyJUIFQgVCBUIFQgVCBUIFMgciAwLlEuWCBTIFQgVCBUIFQgVCBUIFQgVCB1IDIrRStAK0AgYSBhIGEgYSBqIGEgYSBhIGEgYSBsICEgVS5HK0crXitAIGwgbCBsIGwgciBAID4rRitAK0AgTC5DK0wufSBEIEQgSyAjID4reit5K1AuMSBLIEsgSyBAIHsrdytUIG4gNiBkKzgrcStiIDAgMCBjIGMgYyB0IHQgYyBjICcuViBgIGMgIyB8K28rKys4KykrMCswIDAgMCAwIGkgMCBaICcuPSBGLnUrJSsvK3guYStkLjMgMyBKIEogXyBfIGQgayBfIDMgIC58LmIgIiwKKyJoIGggaCBoIGggaCBoIGcgYSAoLmsubCBoIGggaCBoIGggaCBoIGggaCApIG0rRSt4Li4gLyAvIC8gLyAvIC8gLyAvIC8gMiAyIC4gRi5HK0crQys1ICsgbyAyIDUgNSA1IDYuRyslKysgTyByLmcgZyBnIGcgZyArID4reit5K0wuKSBoIGcgZyBoICEuci5oIGwgNCBkK2IrbytrIDAgYyBjIGMgOCBkIGogYyBjIGMgdCB0IGkgIyAzK3creCA5KyorYitOLi0gMCAwIGkgMCBgIEggLiA5K2UrVS4vK3guYStBLjsgNyBOIEogXyBfIGsgSiBfIF8gcSBrIF8gIiwKKyIzLjMuMy4zLjMuMy4zLjMuVyBWIHAubC4zLjMuMy4zLjMuMy4zLjMuMy4zLjQraCtzLk0gXi5eLl4uXi5eLl4uXi5eLl4uXi5eLiouKS5EK0crRytqK0kgKi40LiouKi4qLiouSi5vLiouKi5CICouKi4qLiouIy49ID4reit5K1YuQiAjLiMuIy4jLkIgNyAjLkkgZSBkK2IrcStWIGAgYCAmLlUgJi5bIDYudytTLiogLy5gIGMgPSAzK3QrSiAvK34rOCsnKyogey5VIGMgWiBVIHogdiBwKzUrciBfK3guYStULl8uLCB0LmYuOyAzIGYuZi4zIDMgZi5mLn4gIiwKKyJSLlIuUi5SLlIuUi5SLlIubS5OIEcuUi5SLlIuUi5SLlIuUi5SLlIuUi5SLlkuWS5LLkkuSS5LLkkuSS5LLlIuSS5PLk8uUi5LLlIuKi45K0crRytHK3IrQi52LkIuQi5CLkIudi52LnYudi52LnYudi52LnYuOC5eID4reit5KyMrOC4wLjAuMC4wLjAuOC44LiguaiBkK2IrcSs1Ll0uNy43LjcuJi59ICsreSsjKzggJi4mLjggPSAzK3QrZC5yLmYrYC5nKzggVSAmLjggLy44LiMgPitkKzwrfSBfK3guYStJLjguLCB7LjkufCAzIFogOS4zIDMgWiA5Ll0gIiwKKyJEIEQgRCBEIEQgRCBEIEQgciA6LjouVCBTIEsgSyBLIEsgSyBLIEsgSyB1IHYrZithICEgZSBmIGEgYSBhIGYgYSBhIGEgYSBhIGEgKSA2LkQrRytHK0crdyspLkAgbCBsIGwgRCBEIEQgRCBEIEQgRCBEIEQgRCAjID4reit6K1AuMSBLIEsgSyBLIEsgSyBLIHIgNiBkK2Irbys7ICUgJSAlICUgXiAuIDkrbysgKywgYCBgIGMgIyAzK3crMC45IGorYC5vK3AuWiBaIDAgVSAyLi4gMytvKycubCBfK3guYStCLisufiAlLlsueyBfIEAufS5fIF8gIC5iLjsgIiwKKyJnIGcgZyBnIGcgZyBnIGcgYSAnLmMuZyBnIGggaCBoIGggaCBoIGggaCApIHYrayskICQgJCAkICQgJCAvIC8gLyAvIC8gLyAvIDIgMiAuIEYuRCtHK0crRytEK1UuKyA1IDUgNSA1IDUgNSA1IDUgNSA1IDUgZyArID4reit6K0wuKSBnIGcgZyBnIGcgZyBnIGggNiBkK2IrcyslKysrKysrKysrKytfK28rZSsgKywgMCB0IDAgIyAzK3crJy4oICUrOCspK10rLSBpIGsgMCB9IEYuOSswKyUgaiAzK3guYSsnLjMgNyBkIHEgXyBfIHEgcSBfIF8gNyBxIF8gIiwKKyJtLm0ubS5tLm0ubS5tLm0uNC55IHYubS5tLm0ubS5tLm0ubS5tLm0ubS5tLjQrISs0LjQuNC40LjQuNC40LjQuNC40LjQuMy4zLjMuMy5sLkIgWi5DK0crRytHK0crXitxIDsuMy4yLjIuMi47LjsuOy47LjIuMi49ID4reit5K1ouLi4yLi4uLi4uLi4uLi4uLkogaiBkK2IrZStzK3UrbytvK20rbStmK34rZSsgKyogYyBjIHQgQCAzK3crViAtIGkuZitgLmcrKiBjIGMgaSAjICsreCtKLi0gaiAzK3guYStIIDMgMyAzIDsgeyA3IDMgeyA6IDcgeyB7IHsgIiwKKyJPLk8uTy5PLk8uTy5PLlIuQy5KIEUuTy5SLlIuSy5LLksuSy5LLksuSy5LLlkuWS5LLksuSy5LLksuSy5LLksuSy5LLksuSy5LLk8uSy5PLk8udi5OLnErRytHK0crRytsK3YuMC52LnYudi52LnYudi52LnYudi5eID4reit5KyMrMC4wLjAuMC4wLjAuMC4wLiguaiBkK2IrcytuK2crZytoK2craStvKzgrYisjKzggJi4mLiYuPSAzK3crKC44ICwuNispK2IrIytVIDguMyBmIF8rcStrLlUgeCBfK3guZStkLiUgYiAwLkIuOi5+IFkgWSAzIGIgXy5fLlkgIiwKKyJsIHAgcCBsIGwgbCBsIHAgZyAqLjIuaCBwIHAgbCBwIHAgcCBwIHAgcCA8IDcraytvIC4gNCA0IDQgNCA0IDQgMiA0IDIgMiAyIDIgNSA1IDUgNSApIEAgfCtHK0crRitHK2QrQCBnIGcgZyBnIGggaCBoIGwgaCAjID4reit5K0wuPCBsIHAgcCBEIHAgcCBwIHIgNiBkK2IrcSt8ICUgLSBjIGMgLSAsLmorbysgK2MgYCB7LlogPSAzK3crZC4qIDsgLysxKykrMCtaIGQuOSB2IHgrXSsvLl8ueCBfK3guZStBLjsgTiBLLnouQy47IH0uZi5+IEAuOS5mLnouIiwKKyJsIGwgbCBsIGwgbCBsIHAgZyAjLnAubCBsIGwgbCBwIGwgbCBwIHAgcCA8ICordis9Li4gNCAvIDQgNCA0IC8gNCA0IDIgNiA2IDUgNSA1IDUgNSA1IGcgKyAlK0QrRytDK0creytAIGcgZyBoIGwgaCBoIGwgbCAjID4reit3K0wuPCBsIHAgcCBwIEQgRCBwIHUgNiBkK2IrcStIIGsgayBHIEcgMCBeICwrcysgK3QgWiBaIFogPSAzK3crZC4sIGMgTC58KyorNStLLnAuPSArK3ArJytVIGEueCBfK3guZStBLjsgMS5XLlQuQy5fIEAuZi47IH0uSS45LnouIiwKKyJ3Lncudy53Lncudy53LncubC5wLkEudy53Lncudy53Lncudy53Lncudy53LlcufStOLm0ubS5tLm0ubS5tLm0ubS5tLm0ubS5tLm0ubS5tLm0ubS5tLm0uMi5OIFYuRCtGK0MrQytKLiAuMi4yLjIuMi4+Lj4uMS59ID4reit5K1ouIC4+LjEuPi4+LiAuIC4gLj4uaiBkK2IrcSsoLlYgViBgIGAgYCBiIFYuQysgKzggLy5VIGAgQCAzK3crKC5jIGAgPiA5K2AuZSsjK0ggJCBqK2Irdi44IF8ueCBfK3guZSt5LiUgaSBLLlcuJy47ICAufS4zIEcgZi45LnsuIiwKKyJBLkEuQS5BLkEuQS5BLkEuQS55LkEuQS5BLkEuQS5BLkEuQS5BLkEuQS5BLkEuPStXLncudy5DLkMuQy5DLkMuQy5DLkMuQy5tLmwuMS5lLkEueS55LnkueS5lLkcgTC5EK0MrRitnK1YgZC5lLmUuZC5kLmMuZC59ID4rQSt3KyArKC5kLjouOi4oLiguKC4oLicuaiBkK2IrcStgIGAgYCBgIGAgViA4IGAgJytrLjggOCA4IGMgQCAzK3crViBjIDggOyA+K34rOisnK30gaS5qKzArKiAwIDAgeCAzK3guYSsnLiUgMyBpIFIgOyA6IDMgMyA6IDogJSB8IDMgIiwKKyJwIHAgcCBwIHAgcCBwIHAgcCBwIHAgcCBwIHAgcCBwIHAgcCBwIHIgcCBwIH0gMis6Ky4gNCA0IDQgNCA0IDQgNCA0IDQgNiAyIGkufCs9LjUgNSA1IDUgZyBnIGcgIyBfK0YrQytwK08gKSBoIGggbCBsIGwgRCAjID4rQSt3K0wuPCBEIHIgdSB1IHUgciBBIEkgNiBkK2IrbytKIGsgayBrIEcgaSBiIHQgLCAwIHogJyBjIGkgQCAzK3crJy44IGAgWSApLmorTS5pKy4gLytwKyQrYyAwICAubCBfK3guYSt2LnQgMyBhLn0uXyA7IHwufC5fIDogeS5iLmQgIiwKKyJsIGwgbCBsIGwgbCBsIGggaCBsIGwgbCBsIHAgbCBsIHAgbCBsIGwgcCBsIEAgYC5rK3YgJCAvIC8gLyAvIC8gLyA0IDIgMiAuIEYuRisvKy4gbyAyIDUgNSA1IDUgKyBpLnkrQyt5K3IuKSBnIGggaCBoIGggaCAjID4reit3K0wuPCBwIHAgciByIHAgciBuIEkgNiBkKzgrbytKIEwgTCBrIE4gUSBiIEcgWSB5IC8gVi5wLmMgQCAzK3crYi4rLlogXy5YIDkrYC5kK2kuMytxK18uOi4sIFkgbCBfK3guYStCLi8uXSB9Ln0uXyBfIH0uZi5fIGIgVC5ULjouIiwKKyJ5LnkueS55LnkueS55LnkueS53LnkueS55LnkueS55LkMuQy5DLkMuQy5DLnkuQy49K3cudy53Lncudy53Lncudy53Lncudy5tLi0uRCt0KyAudy53LnAudy5wLmUubS4yIHMrQyt6K1ouWSBlLmUuMS4xLjEuZC59ID4reit3KyQrWSBjLicuJy4nLicuJy4oLicuaiBkKzgrcStgIGAgey5gIC8uYCBgIC8uOC5BIHYgRCs8KzggPSAzK3crdi4vLi8uNy5OICsrOCtgLmorait9KyYuLy5jIFogeCBfK3guYStCLi8uMCA6LmQufiB7ICsuOS57IDAgIytZLlYgIiwKKyJBLkEuQS5BLkEuQS5BLkEuQS5DLkEuQS5DLkEuQS5BLkEuQS5DLkEuQS5BLkEuQS5DLj0rcC53Lncudy53Lncudy53LncuQS5tLiEgeCtGKyQrMS55LmUuZS5lLmIuMy40IHMrQyt3K04uOi5jLmUuZS5jLmMuZC59ID4reit3KyArKC46LjouKC46LjouKC5gICcuaiBkKzgrcStgIGAgYCBgIGAgViBgICYuMS4uIC8rcysgKyogIyAzK3cray44IGAgVSBjIGkuNitNLnUrdStTLjggYCBjIDAgeCBfK3guYSs4LmMgfCBHICAuMyA3IE4gUSAzIDMgZC5kLjMgIiwKKyJwIHAgcCBwIHAgcCBwIHAgcCBwIHAgcCBwIHAgcCBwIHAgcCBwIHAgcCBwIHAgPCBEIDcrNi4uIC8gNCA0IDQgNCA0IDQgMiBmIC4gcCtHK2QrKyA1IG0gNSBnIGcgLiBGLnkrQytkKykgaCBoIGggbCBoIGggaCAjIC8rdyt1K0wuMSByIHUgdSB1IHUgTSBCIDkgNCBkKzgrbytIIGQgZCBrIGsgYiBiIHkgIyA2LnAraSs+LnwgLiAzK3MrbS4tIEcgaSAwIH0gXysqK2AuYSs+LnwgfiBiIEogZSAzKzYuYSs+LjsgeyBKIEwgeyBfIEogcSBfIFsgYyBpIFsgIiwKKyJyIHIgciByIHIgciByIHIgciByIHIgciByIHIgciByIHIgciByIHIgciB1IHIgdSBeICYrKSsuIDQgNCA0IDQgNCA0IDYgNiBmIC4gZCtDK0MrPisrICkgYSBnICMgLiBkK0MrQytAK0AgbCBsIHAgRCBEIHAgYSAuIGQrcytzK14rXiB1IG4gRSBLIEMgQiBCID0gNCBwKzErcytNIFsgXyBfIF8gWyB9ICMgLS5qKzgrZytjIEIgLiA2K20rJCsqIFogXy50IF8gLyt+KyorfSt0IFkgXSBSIEkgNCBkK28gNitZLnQgKy5fLmYufS5aIGYuZi59LjsgVSBVIDcgIiwKKyJyIHIgciByIHIgciByIHAgciByIHIgcCBwIHAgcCByIHIgciByIHIgciB1IHUgdSAxIDEgOit4LiYgNCA0IDQgNCA0IDYgNiBmICMgXytDK0MrRisvKy0uZiA0IC0uNitDK0MrfCtAIGwgbCBsIEQgbCBmIDYgZiArK3kraStvK3AraS4pLm4gRSBzIEMgYSA0IC0uPitvKzEraSt8K1UuVS5GLkYuRi5VLl8rcCsxK34rYStAIDQgVS5iKykraStuLlogfS4rLnwgci42K3wrICsqICAueCBhIC0uKyszKzIgVS5hK3MudC5mLnQuei5mLnQudC55Ll0gUiBfLjMgIiwKKyJyIHIgciByIHIgciByIHAgcCBwIHAgcCByIHAgciByIHIgdSB1IHUgdSB1IHUgciB1IDEgbi4pKzQgNCA0IDQgNCA0IDYgNiBmICMgPitGK3MrcCtHK0IrZCtkK3krRitDK2ErKSBoIGwgbCBsIHAgRCAjIHwrQitGK3crdStzK3crQyt5K14rPiBNIE0gPSBkK3grQStmK2YrZSt1K0ErQStBK0ErQSt1K20rOCsxK20rOytMLmordSsxKyorOCt4K2crQy50IGIgXyBvK3ErJSBWIC4uPSBfK2oraitVLngueC5fK2orbCtBLjkuZi5fLnouOS5hLjsgLi5hLjsgIiwKKyJyIHIgciByIHIgcCBwIHIgciByIHIgciByIHIgdSB1IHUgciByIHIgdSB1IHIgciByIEsgXiBQLmAuJiA0IDQgNCA0IDYgNiA2ICMgVS5DK0YuYSBAK2orQytGK3orZStAKykgaCBoIGggbCBsIHAgRCA8IF4rYStbK1srWytbK1srWythKzsrPiBJIEIgQiAoKygrXSsoKygrKCtdK10rXStdK10rXStdK10rKCsoKygrPi5aLjArKCsoKygrXSsoKzArdy58IGsgaSBaLi0rJSBOIE4gJSAoKzArLSteK14rXSs7K14rYyslLlEgZCA6IFEgIC5xICggNyBKIF8gIiwKKyJyIHIgciBwIHIgciByIHUgdSB1IHUgdSB1IHUgciByIHUgdSB1IHUgdSB1IHUgdSB1IHUgdSBeIE0ueC4mIDQgNCA0IDYgNiA2IDYgNiA1IDUgIyAjICkgZyBPIGwgKSBAIGwgaCBsIGggbCBsIHAgRCBEIDwgPCA8IDwgPCAxIDEgMSAxIF4gSSBJIEIgQiBfIDogOiAzIDMgMyAzIHwgayBrIHwgfCBrIGIgfCB8IGsgYiB8IHwgaSBHIGIgYiBHICcgfCBiICAuRyAlICUgTiBrIGQgYiBpIFIgYiBiIFYgViBrIGsgdCB0IDMgMyBOIEwgOiAoIHEgSiAoIDcgIiwKKyJwIHIgdSByIHUgdSB1IHUgdSB1IHUgdSByIHUgciB1IHIgciByIHIgdSB1IHUgdSB1IHUgdSBBIEEgai49LjQgNCA0IDYgNiA2IDYgNiBhIGEgYSBhIGEgYSBnIGggbCBoIGggbCBsIGggbCBsIHAgRCBEIEQgcCBwIHAgcCBwIHIgciB1IHMgSSBJIEIgQiBCIDcgcSBxIHEgcSBkIEwgTCBMIGsgTiBRIFEgTiBiICAuUSBrIFEgUiBALnQgUiBZIH0uRyB0IGIuYi5iIHwgfS5SIHwgQC57LmIuKy5VIC8uLy5aIFogLy4vLi8uXy5mLnQuYS5+IGEuYS57ICUuIiwKKyJyIHUgdSB1IHUgdSByIHUgdSB1IHUgdSB1IHIgciB1IHUgdSB1IHUgdSB1IHUgdSB1IEEgQSB1IEEgSyBqLm8gNCA0IDYgNiA2IDYgNiBhIGEgbSBhIGEgZyBnIGcgaCBoIGggbCBsIGggaCBsIGwgcCBEIEQgRCBEIEQgRCBEIHIgRCBDIEkgQiBCIEIgQiBCIHEgeSBxIEogcSBkIEwgTCBMIE4gLi5OICAuTiBkIFEgUSBiICUuWSBALlYgfS59LkAuIC5jIHkuZS5iIHwgQC5SIF0gfS5fLmEuZi5fLlogey5mLmQuLy4vLmYudC56LnQuZy47IFkgYi57IFsuIiwKKyJ1IHUgciB1IHUgdSB1IHUgdSB1IHUgdSB1IHUgdSB1IHUgdSB1IHUgdSB1IHUgQSB1IHUgdSB1IEsgQSBLIEQgNiA0IDQgNiA2IDYgNiBhIDYgbSBhIGEgZyBnIGcgbCBoIGggbCBsIGggbCBsIGwgcCBwIEQgRCBEIEQgRCBEIEQgQyBJIEkgSSBCIEIgQiBCIHkgeSBxIHEgSiBkIEogTCBMIGsgTCAuLlEgTiBkIFEgUSBrICAuUiBALlIgWSBZIFkgTiB8IDEuMS5kIH4gIC5HIHwgIC5fLn0uWSBaIC8uLy57LlogOS4vLlogfS5mLjkufC4oICUufC5fICAuIiwKKyJyIHIgciB1IHUgdSB1IHUgciByIHUgdSB1IHUgdSB1IHUgdSB1IEEgQSB1IHUgdSB1IHUgSyBLIEsgSyBLIEUgciA2IDQgNiA2IDYgNiA1IDYgYSBhIGEgZyBnIGcgaCBoIGggaCBsIGwgaCBsIGwgbCBwIEQgbCBEIEQgRCBEIEMgeiBJIEkgQiBCIEIgQiB5IHkgcSBxIHEgSiBkIGQgSiBKIGQgZCBMIEggZCBkIGQgZCBkIGsgayBrIGIgYiBiIGsgayBkIDAgRyBkIGQgayBrIGQgYiBOIE4gayAzIEcgRyBkIH4gRyBrIHsgXyBKIEogXyBbIF8gQiBbIHsgIiwKKyJ1IHUgdSB1IHUgdSB1IHUgdSB1IHUgdSBLIHUgdSB1IHUgdSBBIHUgdSB1IHUgSyBLIEsgSyB1IEsgSyBLIEsgQyB1IGogNiA2IDYgNiA2IGEgYSBtIGEgYSBnIGcgZyBsIGggaCBoIGwgaCBsIGwgcCBwIEQgRCBEIEQgdSBNIEIgSSBJIEkgQiBCIEIgQiB5IHEgeSBKIHEgSiBkIGQgSiBxIHEgayBOIEwgZCBkIE4gayBkIGQgTiBrIGQgayBHIEcgYiBrIHQgdCBkIGIgTiBiIGQgZCBRIE4gMyBrICAuWSBiIGsgIC4gLjogcSB3Lj4uWyBfIE4gSiBfIDIuIiwKKyJ1IHUgdSB1IHUgdSB1IHUgdSB1IHUgdSB1IHUgQSB1IEEgdSB1IHUgdSB1IEsgSyBLIHUgSyBLIEsgSyBFIEUgcyBDIEMgciBhIDYgNiA2IGEgNSBhIGEgYSBnIGcgbCBsIGggaCBoIGwgaCBsIGwgbCBsIHAgbCBEIHUgSSB6IEkgSSBCIEkgSSBCIEIgQiB5IHEgeSBxIHEgSiBkIGQgTCBrIGQgLi5RIC4uTCBrICUuTiBkIGsgQC5RIGsgIC5ZIH0uIC5dIFkgUiAzIGIgfS5SIH4gYiB9LiAufCBbLl8udC5mLmYuZi50LnwuViB6LkkuNyB7IGcuWy4uLlguIiwKKyJ1IHIgdSB1IHUgdSB1IHUgdSB1IHUgdSB1IHUgdSB1IHUgQSBLIHUgSyBLIHUgSyBLIEsgSyBLIEUgRSBzIG4gRSBuIG4gQyBLIHIgYSA2IDUgNiBhIGEgYSBnIGcgZyBoIGwgaCBoIGggbCBoIGggaCBoIHAgdSBDIEkgSSB6IEkgQiBCIEIgQiBCIEIgQiB5IHkgcSBxIHEgSiBKIGQgTCBMIHEgLi5RIC4uTiBkICUuTiBkIGQgQC5OIHwgJS5ALkAuIC5+IFIgIC4zIHwgQC5SIH4gZCBZICAufCBnLmEuZi5mLmYuei50LlsuViB6LkkucSAoICUuQC4uLlguIiwKKyJ1IHUgdSB1IHUgdSB1IHUgdSB1IHUgdSB1IEEgdSB1IHUgSyBLIEsgdSBLIEsgSyBLIEsgRSBBIEUgcyBBIEUgdSBDIEEgRSBFIEMgRSByIGwgYSBtIDUgNiBnIGcgZyBsIGwgZyBoIGggbCBoIGggRCBLIEMgSSBJIEkgeiBJIEkgSSBJIEkgQiBCIEIgeSBxIHEgcSBxIGQgSiBkIGQgSiBIIHEgTCBRIC4uayBkIEwgTiBkIGQgUSBOIGQgUSBALlkgTiB+IFEgPi5kIDMgIC5RIGQgZCAgLiAufiAlLn0uOi5SIEAuYS5fLkwgayB6LmIuNyAoIC4uJS5fIGcuIiwKKyJBIHUgdSB1IHUgdSBBIEEgQSB1IHUgdSB1IHUgdSBLIEsgSyBLIEsgSyBLIEsgSyBLIEEgcyBzIG4gRSBzIEMgRSBFIEEgQSBFIEUgQyBDIEMgQSByIHIgbCBsIGEgZyBnIGggaCBsIHAgciB1IEMgSSBJIEkgSSBJIEkgeiBJIEIgSSBCIEIgQiBCIEIgQiB5IHEgcSBxIGQgZCBkIHEgcSBxIHEgZCBkIGQgZCBkIGQgZCBkIGQgZCBkIGQgZCBrIGsgMyBkIGQgZCBkIGQgZCAzIHwgMyBkIGQgfCB8IGkgYiBfICggZCAzIFsgWyBpIGQgWyAoIFsgXyBbIF8gIiwKKyJ1IHUgdSB1IHUgdSB1IHUgdSB1IHUgdSBLIEsgSyBLIEUgRSBLIEsgSyBLIEsgRSBuIHMgRSBBIEMgQyBFIEEgQSBBIEUgRSBDIEUgRSBFIHMgQyBDIEMgQyBzIEUgSyBLIEUgRSBDIEMgQyBJIEkgSSBJIEkgSSB6IHogSSB6IEkgSSBCIEIgQiBCIHkgeSB5IHEgcSBxIHEgSiBKIGQgZCBMIEogcSBxIEwgSiBkIGQgLi5MIGQgYiBSIEcgaSBrICAuIC5rIH4gIC5OIDMgaSB8LncuMS58IFEgZy5ILkguIC5fIEogfC5bLkogXyB9LiAuWyBfICUuLi5fIF8gIiwKKyJ1IEEgdSB1IHUgdSBBIHUgdSBLIEsgSyBLIEsgSyBFIEsgSyBLIEsgSyBFIEUgcyBzIEMgRSB1IEUgQSBFIEEgQSBFIEMgQyBDIEMgcyBzIEMgQyBDIEMgQyBDIFAgUCBDIEMgQyBDIEMgTSBJIE0gSSBJIEkgSSBJIEkgeiBCIEkgSSBCIEIgQiBCIHkgcSBxIHEgcSBxIHEgSiBKIEogZCBMIEwgcSBkIC4uayBkIGQgJS5MIGQgIC5SIFIgUiBALlkgWy4gLnwgIC5ALmIgZS53LnwueS5SIH0uSC5ILlguYS5+IHwuZi56LlsufiB9LisuXyBfIFsuYS5fIEggIiwKKyJBIHUgdSB1IHUgdSB1IEsgSyBLIEsgSyB1IEsgSyBLIEsgSyBLIEUgRSBzIG4gbiBDIHUgdSBFIEEgRSBBIEUgRSBDIEMgQyBDIHMgRSBDIEMgQyBDIHMgQyBDIEMgQyBDIEMgQyBDIE0gSSBJIEkgSSBJIEkgeiBJIHogeiBJIHogQiBCIEIgQiBCIHkgeSB5IHEgcSBKIHEgSiBKIEogcSBMIEogcSBkIE4gayBkIGQgUSBMIGQgIC5SIFIgUiB8LiUuQC4gLn4gIC5RIGsgZy59LlogYS5SIH0uSC5ILlguYS5+IGcudC50LmEuOyBALisuXyAoICUuYS4oIEwgIiwKKyJ1IHUgdSB1IHUgSyBLIEsgdSBLIEsgSyB1IEsgSyBLIEsgRSBFIHMgbiBFIEMgcyBDIEUgRSBFIEEgQSBFIEMgRSBFIEUgcyBzIHMgQyBDIEMgQyBzIEMgQyBDIEMgQyBDIEMgQyBDIEkgTSBJIEkgSSBJIEkgeiB6IEkgQiBJIEIgSSBCIEIgQiBCIHkgeSBxIHEgcSBKIHEgSiBKIGQgcSBMIEogcSBxIEwgayBkIGQgTiBMIGQgUSBHIFIgaSBRICAuIC5OIDMgLi5RIGQgfC5nLmcufC58ICAuSC5ILkgufC5fIEwgYS5iLkwgKCA7LiUuXyAoIDsuMi4oIHEgIiwKKyJBIHUgSyBLIEsgSyBLIEsgSyB1IEsgRSBLIEsgSyBFIEUgcyBzIG4gRSBzIG4gQSBzIEUgRSBBIEUgRSBDIEUgRSBzIHMgcyBDIEMgQyBDIEMgQyBDIEMgQyBDIEMgQyBDIEMgQyBJIE0gSSBJIEkgSSBJIHogSSBJIEkgQiBJIEIgQiBCIEIgQiBCIHkgcSBxIEogcSBKIGQgZCBxIHEgcSBxIHEgcSBxIGQgZCBxIGQgZCBkIGQgZCBrIGsgZCBkIGQgayAzIHEgayBrIDMgMyBRIE4gMyB7IGQgYiBiIGsgMyBfICggXyB7IF8gWyBbICggWyBbIFsgXyA3ICggIiwKKyJLIEsgSyBLIEsgRSB1IHUgSyBFIEsgSyBLIEUgRSBzIG4gRSBzIG4gbiBuIHMgcyBFIEEgQSBFIEMgQyBFIEUgcyBzIHMgQyBDIHMgQyBzIHMgQyBQIEMgQyBDIEMgQyBDIEMgTSBJIEMgSSBJIEkgSSBJIHogeiB6IEIgeiBCIEIgQiBCIEIgQiB5IHEgeSBxIHEgSiBKIHEgSiBKIEggSCBMIEwgSiBxIC4uTCBkIEwgUSAuLmsgTiAgLiAuUSBRIFEgIC5RIEcgUiBZIEcgRyBZIEAuRyBHICAuQC5OIDMgfC4uLl8gNyB3LmUuNyBfIDIuOy4oIEogfS5hLiUuIiwKKyJLIEsgSyBLIEUgRSBFIEsgSyBLIEsgRSBFIEUgRSBFIEUgRSBFIEMgRSBFIEUgRSBFIEUgQyBFIEUgQyBDIEMgQyBDIEMgQyBDIEMgQyBDIEMgQyBDIEMgQyBDIEMgQyBDIE0gSSBJIEkgSSBJIEkgeiBJIEkgSSBJIEkgSSBJIEIgQiBCIEIgQiBCIHkgeSB5IHEgSiBKIEogSiBKIEwgTCBMIC4uTCBkIC4uTiBkIDsuIC4lLiAuIC4lLiUuQC5ALkAufC4lLlkgUiBZIFkgOi59LlsufS59Ln0uYS5nLl0gQC5lLl8gZCBDLlQueSAoIH0uYS4oICUuZi56LnouIiwKKyJ1IEEgdSBBIEEgQSB1IHUgQSBuIG4gbiBuIG4gbiBuIG4gbiBuIG4gbiBBIG4gbiBBIHMgcyBzIHMgbiBuIHMgQSBzIG4gbiBuIG4gcyBDIEMgQyBzIEMgQyBDIEMgQyBNIEkgSSBNIEkgSSBJIEkgeiBJIEkgSSBJIEkgeiBJIEIgQiBJIEIgNyA3IHkgeSBxIHEgcSBxIHEgcSBKIEwgTCBMIEwgTCBxIEwgayBkIC4uJS4gLlEgIC4lLkAuQC5ALkAuQC5ALlIgdCBZIFkgQC5bLlkgWSB9LlsuKy58LnsgUSBbLl8gZCBXLlcuNyAoICUuWy4oIHwuei5mLnQuIiwKKyIkLlQgVCBUIFQgVCBUICQuJC4kLiQuJC4kLiQuJC4kLiQuJC4kLiQuJC4kLiQuJC4kLiQuJC4kLiQuJC4kLiQuJC4kLiQuWCAkLiQuWCBXIFggVyAkLlggWCBXIFcgVyBXIFcgVyBXIFcgVyBXIFcgKi4qLiouVyBXICouKi4qLiouKi4qLiMuKi4jLiMuIy4jLiMuIy4jLiMuOy47LjsuOy47LjsuIy4jLiMuIy55IDsuOy47LkogSiAuLi4uSiAuLi4uOy5KIE4gIC4xLk4gLi58LnwuSiBOIDIufC47LnogOy47LnogeiBtLjMuOSA5ICMuOy45IEIgZy5nLjsuIiwKKyJFIG4gQyBuIHUgQyBFIEUgQyBuIHMgdSBuIG4gQyBuIEMgQSBDIHMgRSBuIG4gbiBuIEMgQyBDIHMgbiBzIEUgbiBzIEMgcyBuIG4gQyBDIHMgbiBBIEEgdSBuIEMgcyBuIEMgbiBDIG4gQyBuIEMgQSBFIG4gbiBzIEMgQSBFIEUgbiBDIG4gdSBDIEUgRSBDIG4gcyB1IG4gbiBDIG4gQyBBIEMgcyBFIG4gbiBuIG4gQyBDIEMgcyBuIHMgRSBuIHMgQyBzIG4gbiBDIEMgcyBuIEEgQSB1IG4gQyBzIG4gQyBuIEMgbiBDIG4gQyBBIEUgbiBuIHMgQyBBIEUgIiwKKyJzIHUgRSBuIG4gbiBFIEUgbiBuIEMgdSB1IG4gcyB1IHMgdSBFIEUgbiB1IG4gcyBDIG4gcyBuIHMgdSBuIG4gbiBuIG4gRSB1IHUgcyBuIG4gbiBFIHUgRSBuIEUgbiB1IG4gbiBFIHUgbiB1IG4gQyBuIHUgdSBFIEEgbiBuIHMgdSBFIG4gbiBuIEUgRSBuIG4gQyB1IHUgbiBzIHUgcyB1IEUgRSBuIHUgbiBzIEMgbiBzIG4gcyB1IG4gbiBuIG4gbiBFIHUgdSBzIG4gbiBuIEUgdSBFIG4gRSBuIHUgbiBuIEUgdSBuIHUgbiBDIG4gdSB1IEUgQSBuIG4gIiwKKyJFIHUgbiBuIG4gdSBBIEUgbiBuIEUgdSBuIEEgcyBuIHMgQSBuIEEgQSBuIG4gcyBzIG4gQyBuIHMgdSBuIEEgbiBuIHUgRSBuIHUgcyBuIG4gbiBBIEUgbiBuIHMgbiBuIHMgbiBzIHUgdSB1IHUgcyBBIG4gbiBuIEUgQSBBIEUgdSBuIG4gbiB1IEEgRSBuIG4gRSB1IG4gQSBzIG4gcyBBIG4gQSBBIG4gbiBzIHMgbiBDIG4gcyB1IG4gQSBuIG4gdSBFIG4gdSBzIG4gbiBuIEEgRSBuIG4gcyBuIG4gcyBuIHMgdSB1IHUgdSBzIEEgbiBuIG4gRSBBIEEgIiwKKyJFIG4gcyBuIG4gQyBBIEUgcyBuIHMgbiBuIEEgcyB1IHMgQSBzIEUgcyBuIG4gbiBuIHMgQyBzIEUgbiBuIHMgbiBDIEEgQSBuIG4gcyBzIEMgQSBBIEEgQSBuIHMgRSBuIG4gbiBzIG4gRSBuIHMgQSBuIG4gbiBFIEEgbiBzIEUgbiBzIG4gbiBDIEEgRSBzIG4gcyBuIG4gQSBzIHUgcyBBIHMgRSBzIG4gbiBuIG4gcyBDIHMgRSBuIG4gcyBuIEMgQSBBIG4gbiBzIHMgQyBBIEEgQSBBIG4gcyBFIG4gbiBuIHMgbiBFIG4gcyBBIG4gbiBuIEUgQSBuIHMgIiwKKyJFIHUgRSBuIHUgQyBFIEUgQyB1IEMgdSBuIG4gQyB1IEMgbiBFIEUgRSBuIG4gbiBuIEMgQyBDIHMgdSBzIEUgbiBzIEMgRSB1IHUgQyBDIHMgbiBzIHUgRSBuIEUgcyBuIEUgbiBFIHUgQyB1IEMgbiBFIG4gbiBFIEUgbiBFIEUgdSBFIG4gdSBDIEUgRSBDIHUgQyB1IG4gbiBDIHUgQyBuIEUgRSBFIG4gbiBuIG4gQyBDIEMgcyB1IHMgRSBuIHMgQyBFIHUgdSBDIEMgcyBuIHMgdSBFIG4gRSBzIG4gRSBuIEUgdSBDIHUgQyBuIEUgbiBuIEUgRSBuIEUgIiwKKyJFIHUgRSB1IHUgdSBFIEUgdSBuIEUgdSB1IG4gQyB1IEMgRSBFIEUgRSB1IG4gcyBDIHUgQyB1IHMgdSBuIEUgbiBuIHUgcyBuIHUgQyB1IG4gbiBzIEUgRSB1IEUgbiB1IEUgbiBFIHUgdSB1IHUgRSBFIG4gdSBFIEUgQSBFIEUgdSBFIHUgdSB1IEUgRSB1IG4gRSB1IHUgbiBDIHUgQyBFIEUgRSBFIHUgbiBzIEMgdSBDIHUgcyB1IG4gRSBuIG4gdSBzIG4gdSBDIHUgbiBuIHMgRSBFIHUgRSBuIHUgRSBuIEUgdSB1IHUgdSBFIEUgbiB1IEUgRSBBIEUgIiwKKyJzIG4gRSBuIHMgbiBFIEUgbiBuIG4gdSBuIG4gcyB1IHMgbiBFIEUgQSBuIG4gbiBuIG4gcyBuIHMgbiBuIEEgbiBuIG4gRSBuIG4gcyBuIG4gcyBFIG4gRSBuIEUgbiBuIEUgcyBFIG4gbiBuIG4gbiBzIG4gbiBFIEUgbiBBIHMgbiBFIG4gcyBuIEUgRSBuIG4gbiB1IG4gbiBzIHUgcyBuIEUgRSBBIG4gbiBuIG4gbiBzIG4gcyBuIG4gQSBuIG4gbiBFIG4gbiBzIG4gbiBzIEUgbiBFIG4gRSBuIG4gRSBzIEUgbiBuIG4gbiBuIHMgbiBuIEUgRSBuIEEgIiwKKyJFIG4gRSBuIHMgRSBFIEUgcyBuIHMgdSBuIEEgcyB1IHMgQSBFIEUgcyBuIG4gbiBuIHMgRSBzIHMgbiBzIHMgbiBzIEUgRSBuIG4gcyBzIHMgcyBFIEEgRSBuIEUgcyBuIEUgcyBFIG4gRSBuIEUgQSBzIG4gbiBFIEUgQSBzIEUgbiBFIG4gcyBFIEUgRSBzIG4gcyB1IG4gQSBzIHUgcyBBIEUgRSBzIG4gbiBuIG4gcyBFIHMgcyBuIHMgcyBuIHMgRSBFIG4gbiBzIHMgcyBzIEUgQSBFIG4gRSBzIG4gRSBzIEUgbiBFIG4gRSBBIHMgbiBuIEUgRSBBIHMgIiwKKyJFIG4gRSBuIG4gQyBFIEUgcyBuIHMgdSBuIG4gcyB1IHMgbiBFIEUgcyBuIG4gcyBzIHMgQyBzIHMgbiBzIHMgbiBzIEMgRSBuIG4gcyBzIHMgbiBFIG4gRSBuIEUgcyBuIEUgbiBFIG4gQyBuIEMgcyBBIG4gbiBFIEUgbiBzIEUgbiBFIG4gbiBDIEUgRSBzIG4gcyB1IG4gbiBzIHUgcyBuIEUgRSBzIG4gbiBzIHMgcyBDIHMgcyBuIHMgcyBuIHMgQyBFIG4gbiBzIHMgcyBuIEUgbiBFIG4gRSBzIG4gRSBuIEUgbiBDIG4gQyBzIEEgbiBuIEUgRSBuIHMgIiwKKyJFIHUgRSB1IEUgQyBFIEUgQyB1IEUgdSB1IEEgRSB1IEUgRSBFIEUgRSB1IG4gbiB1IEMgRSBFIEUgdSBFIEUgdSBDIEUgRSB1IHUgRSBDIEMgRSBFIEUgRSB1IEUgRSB1IEUgRSBFIHUgRSB1IEUgRSBFIHUgdSBFIEUgQSBFIEUgdSBFIHUgRSBDIEUgRSBDIHUgRSB1IHUgQSBFIHUgRSBFIEUgRSBFIHUgbiBuIHUgQyBFIEUgRSB1IEUgRSB1IEMgRSBFIHUgdSBFIEMgQyBFIEUgRSBFIHUgRSBFIHUgRSBFIEUgdSBFIHUgRSBFIEUgdSB1IEUgRSBBIEUgIiwKKyJFIG4gRSBuIHUgQyBFIEUgQyBuIHMgdSBuIG4gQyB1IEMgbiBFIEUgRSBuIG4gcyBzIEMgQyBDIHMgbiBzIEUgbiBzIEMgRSBuIG4gQyBDIHMgbiBFIG4gRSBuIEUgcyBuIEUgbiBFIG4gQyBuIEMgcyBFIG4gbiBFIEUgbiBFIEUgbiBFIG4gdSBDIEUgRSBDIG4gcyB1IG4gbiBDIHUgQyBuIEUgRSBFIG4gbiBzIHMgQyBDIEMgcyBuIHMgRSBuIHMgQyBFIG4gbiBDIEMgcyBuIEUgbiBFIG4gRSBzIG4gRSBuIEUgbiBDIG4gQyBzIEUgbiBuIEUgRSBuIEUgIiwKKyJFIEMgRSBuIEUgRSBFIEUgRSB1IEUgQyBzIHMgRSBDIEUgcyBFIEUgRSBuIG4gcyBzIEUgRSBFIEUgQyBFIEUgcyBFIEUgRSBDIHUgRSBFIEUgRSBzIEUgRSBzIEUgRSBuIEUgRSBFIEMgRSB1IEUgcyBFIG4gcyBFIEUgcyBFIEUgQyBFIG4gRSBFIEUgRSBFIHUgRSBDIHMgcyBFIEMgRSBzIEUgRSBFIG4gbiBzIHMgRSBFIEUgRSBDIEUgRSBzIEUgRSBFIEMgdSBFIEUgRSBFIHMgRSBFIHMgRSBFIG4gRSBFIEUgQyBFIHUgRSBzIEUgbiBzIEUgRSBzIEUgIiwKKyJFIEUgRSBzIHMgQyBFIEUgcyBuIEUgRSBzIG4gcyB1IHMgcyBFIHMgcyBzIHMgcyBzIHMgRSBzIHMgRSBzIHMgbiBzIEUgcyBuIEUgcyBzIHMgcyBzIEUgRSBzIEUgcyBzIEUgcyBFIEUgRSBFIEUgcyBzIG4gcyBzIEUgcyBzIEUgRSBFIHMgcyBDIEUgRSBzIG4gRSBFIHMgbiBzIHUgcyBzIEUgcyBzIHMgcyBzIHMgcyBFIHMgcyBFIHMgcyBuIHMgRSBzIG4gRSBzIHMgcyBzIHMgRSBFIHMgRSBzIHMgRSBzIEUgRSBFIEUgRSBzIHMgbiBzIHMgRSBzIHMgIiwKKyJFIEMgRSBuIG4gQyBFIEUgcyBuIEUgQyBzIG4gcyBuIHMgcyBFIEUgcyBuIG4gcyBzIHMgQyBzIHMgQyBzIHMgbiBzIEMgRSBuIHUgcyBzIHMgbiBFIEUgRSBzIEUgcyBuIEUgbiBFIEMgQyB1IEMgcyBBIG4gcyBFIEUgcyBzIEUgQyBFIG4gbiBDIEUgRSBzIG4gRSBDIHMgbiBzIG4gcyBzIEUgRSBzIG4gbiBzIHMgcyBDIHMgcyBDIHMgcyBuIHMgQyBFIG4gdSBzIHMgcyBuIEUgRSBFIHMgRSBzIG4gRSBuIEUgQyBDIHUgQyBzIEEgbiBzIEUgRSBzIHMgIiwKKyJFIEUgQyBFIEUgQyBFIEUgQyBuIEUgRSBDIEEgRSBuIEUgRSBFIEUgRSBFIG4gcyBDIEMgRSBFIEUgRSBFIEUgbiBDIEUgcyBuIEUgRSBDIEMgRSBzIEUgRSBFIEUgRSBFIEUgRSBFIEUgRSBFIEUgRSBFIG4gRSBFIEMgcyBFIEUgRSBDIEUgRSBDIEUgRSBDIG4gRSBFIEMgQSBFIG4gRSBFIEUgRSBFIEUgbiBzIEMgQyBFIEUgRSBFIEUgRSBuIEMgRSBzIG4gRSBFIEMgQyBFIHMgRSBFIEUgRSBFIEUgRSBFIEUgRSBFIEUgRSBFIEUgbiBFIEUgQyBzIEUgIiwKKyJFIG4gQyBuIEUgQyBFIEUgQyBuIEEgdSBuIEEgRSB1IEUgQSBFIHMgRSBuIG4gbiBuIEMgRSBFIHMgbiBzIEUgbiBzIEUgcyBuIG4gRSBDIHMgQSBBIEEgRSBuIEUgcyBuIEUgQSBFIG4gRSBuIEUgQSBFIG4gbiBzIEUgQSBFIEUgbiBDIG4gRSBDIEUgRSBDIG4gQSB1IG4gQSBFIHUgRSBBIEUgcyBFIG4gbiBuIG4gQyBFIEUgcyBuIHMgRSBuIHMgRSBzIG4gbiBFIEMgcyBBIEEgQSBFIG4gRSBzIG4gRSBBIEUgbiBFIG4gRSBBIEUgbiBuIHMgRSBBIEUgIiwKKyJFIG4gQyBuIEUgQyBFIEUgQyBuIHMgdSBuIG4gRSBuIEUgQSBFIEUgRSBuIG4gcyBzIEMgRSBFIEUgbiBFIEUgbiBDIEUgRSBuIG4gRSBDIEMgRSBFIEEgRSBuIEUgRSBuIEUgRSBFIG4gRSBuIEUgcyBFIG4gbiBFIEUgQSBFIEUgbiBDIG4gRSBDIEUgRSBDIG4gcyB1IG4gbiBFIG4gRSBBIEUgRSBFIG4gbiBzIHMgQyBFIEUgRSBuIEUgRSBuIEMgRSBFIG4gbiBFIEMgQyBFIEUgQSBFIG4gRSBFIG4gRSBFIEUgbiBFIG4gRSBzIEUgbiBuIEUgRSBBIEUgIiwKKyJFIHUgRSB1IHUgdSBFIEUgdSBuIEUgdSB1IG4gQyB1IEMgRSBFIEUgRSB1IG4gcyBDIHUgQyB1IHMgdSBuIEUgbiBuIHUgcyBuIHUgQyB1IG4gbiBzIEUgRSB1IEUgbiB1IEUgbiBFIHUgdSB1IHUgRSBFIG4gdSBFIEUgQSBFIEUgdSBFIHUgdSB1IEUgRSB1IG4gRSB1IHUgbiBDIHUgQyBFIEUgRSBFIHUgbiBzIEMgdSBDIHUgcyB1IG4gRSBuIG4gdSBzIG4gdSBDIHUgbiBuIHMgRSBFIHUgRSBuIHUgRSBuIEUgdSB1IHUgdSBFIEUgbiB1IEUgRSBBIEUgIiwKKyJFIHUgQyBuIEUgQyBFIEUgQyB1IEUgdSBuIEEgRSB1IEUgQSBFIEUgRSBuIG4gbiBuIEMgRSBFIEUgdSBFIEUgbiBDIEUgcyB1IHUgRSBDIEMgRSBzIEUgRSBuIEUgRSBuIEUgRSBFIHUgRSB1IEUgQSBFIG4gbiBFIEUgQSBFIEUgdSBDIG4gRSBDIEUgRSBDIHUgRSB1IG4gQSBFIHUgRSBBIEUgRSBFIG4gbiBuIG4gQyBFIEUgRSB1IEUgRSBuIEMgRSBzIHUgdSBFIEMgQyBFIHMgRSBFIG4gRSBFIG4gRSBFIEUgdSBFIHUgRSBBIEUgbiBuIEUgRSBBIEUgIiwKKyJFIEMgRSB1IG4gdSBFIEUgbiBuIEUgQyBFIG4gcyB1IHMgRSBFIEUgQSB1IEEgcyBFIG4gQyBuIHMgQyBuIEEgbiBuIHUgcyBuIHUgcyBuIG4gbiBzIEUgRSBDIEUgbiB1IEUgbiBFIEMgdSB1IHUgRSBBIG4gQyBFIEUgcyBBIEUgQyBFIHUgbiB1IEUgRSBuIG4gRSBDIEUgbiBzIHUgcyBFIEUgRSBBIHUgQSBzIEUgbiBDIG4gcyBDIG4gQSBuIG4gdSBzIG4gdSBzIG4gbiBuIHMgRSBFIEMgRSBuIHUgRSBuIEUgQyB1IHUgdSBFIEEgbiBDIEUgRSBzIEEgIiwKKyJFIEUgRSBBIEEgdSBFIEUgbiBFIEUgRSBuIEEgcyBFIHMgQSBFIEUgQSBBIG4gcyBzIG4gRSBBIHMgRSBBIEEgQSBuIEUgRSB1IEUgcyBuIG4gQSBFIEUgRSBBIEUgQSBBIEUgQSBFIEUgRSBFIEUgcyBBIG4gQSBFIEUgQSBBIEUgRSBFIEEgQSB1IEUgRSBuIEUgRSBFIG4gQSBzIEUgcyBBIEUgRSBBIEEgbiBzIHMgbiBFIEEgcyBFIEEgQSBBIG4gRSBFIHUgRSBzIG4gbiBBIEUgRSBFIEEgRSBBIEEgRSBBIEUgRSBFIEUgRSBzIEEgbiBBIEUgRSBBIEEgIiwKKyJFIEUgRSBBIEEgQyBFIEUgcyBFIEUgRSBzIHMgcyBFIHMgcyBFIEUgcyBBIG4gcyBzIHMgRSBzIHMgRSBzIHMgcyBzIEUgcyBDIEUgcyBzIHMgQSBzIEUgRSBzIEUgcyBBIEUgQSBFIEUgRSBFIEUgcyBBIG4gcyBFIEUgcyBzIEUgRSBFIEEgQSBDIEUgRSBzIEUgRSBFIHMgcyBzIEUgcyBzIEUgRSBzIEEgbiBzIHMgcyBFIHMgcyBFIHMgcyBzIHMgRSBzIEMgRSBzIHMgcyBBIHMgRSBFIHMgRSBzIEEgRSBBIEUgRSBFIEUgRSBzIEEgbiBzIEUgRSBzIHMgIiwKKyJFIEUgRSBFIEUgRSBFIEUgRSBFIEUgRSBFIHMgRSBFIEUgRSBFIEUgRSBFIEUgRSBFIEUgRSBFIEUgRSBFIEUgRSBFIEUgRSBFIEUgRSBFIEUgRSBFIEUgRSBFIEUgRSBFIEUgRSBFIEUgRSBFIEUgRSBFIHUgRSBFIEUgRSBFIEUgRSBFIEUgRSBFIEUgRSBFIEUgRSBFIEUgcyBFIEUgRSBFIEUgRSBFIEUgRSBFIEUgRSBFIEUgRSBFIEUgRSBFIEUgRSBFIEUgRSBFIEUgRSBFIEUgRSBFIEUgRSBFIEUgRSBFIEUgRSBFIEUgRSBFIEUgdSBFIEUgRSBFIEUgIiwKKyJBIG4gQyBuIG4gbiBFIEUgbiBuIHMgdSBuIEEgcyB1IG4gQSBDIEUgQSBuIG4gbiBuIG4gbiBuIEEgbiBuIEEgdSBuIG4gRSBuIG4gbiBuIG4gbiBBIEEgdSBuIEMgbiBuIEMgbiBDIG4gbiBuIG4gQSBBIHUgbiBDIEUgQSBBIEEgbiBDIG4gbiBuIEUgRSBuIG4gcyB1IG4gQSBzIHUgbiBBIEMgRSBBIG4gbiBuIG4gbiBuIG4gQSBuIG4gQSB1IG4gbiBFIG4gbiBuIG4gbiBuIEEgQSB1IG4gQyBuIG4gQyBuIEMgbiBuIG4gbiBBIEEgdSBuIEMgRSBBIEEgIiwKKyJDIHUgbiBuIG4gdSBuIEMgbiB1IEMgdSBuIG4gcyB1IHMgbiBuIG4gbiBuIG4gcyBzIG4gQyBuIHMgdSBuIG4gbiBuIHUgcyB1IHUgcyBuIG4gbiBuIHUgbiBuIHMgbiBuIHMgbiBzIHUgdSB1IHUgcyBuIG4gbiBuIEUgbiBuIEMgdSBuIG4gbiB1IG4gQyBuIHUgQyB1IG4gbiBzIHUgcyBuIG4gbiBuIG4gbiBzIHMgbiBDIG4gcyB1IG4gbiBuIG4gdSBzIHUgdSBzIG4gbiBuIG4gdSBuIG4gcyBuIG4gcyBuIHMgdSB1IHUgdSBzIG4gbiBuIG4gRSBuIG4gIiwKKyJFIHUgRSBuIEUgRSBFIEUgRSB1IEUgdSBuIEEgRSB1IEUgQSBFIEUgRSBuIG4gbiBuIEUgRSBFIEUgdSBFIEUgbiBFIEUgRSB1IHUgRSBFIEUgRSBzIEUgRSBuIEUgRSBuIEUgRSBFIHUgRSB1IEUgQSBFIG4gbiBFIEUgQSBFIEUgdSBFIG4gRSBFIEUgRSBFIHUgRSB1IG4gQSBFIHUgRSBBIEUgRSBFIG4gbiBuIG4gRSBFIEUgRSB1IEUgRSBuIEUgRSBFIHUgdSBFIEUgRSBFIHMgRSBFIG4gRSBFIG4gRSBFIEUgdSBFIHUgRSBBIEUgbiBuIEUgRSBBIEUgIiwKKyJFIEMgQyB1IEUgRSBFIEUgRSBuIEUgQyBDIG4gRSB1IEUgRSBFIHMgRSB1IG4gcyBDIEUgRSBFIEUgQyBFIEUgbiBFIEUgRSBuIHUgRSBFIEUgRSBBIEUgRSBDIEUgRSB1IEUgRSBFIEMgRSB1IEUgRSBFIG4gQyBzIEUgcyBFIEUgQyBDIHUgRSBFIEUgRSBFIG4gRSBDIEMgbiBFIHUgRSBFIEUgcyBFIHUgbiBzIEMgRSBFIEUgRSBDIEUgRSBuIEUgRSBFIG4gdSBFIEUgRSBFIEEgRSBFIEMgRSBFIHUgRSBFIEUgQyBFIHUgRSBFIEUgbiBDIHMgRSBzIEUgIiwKKyJFIEUgRSBBIEEgdSBFIEUgbiBuIEUgRSBuIG4gcyB1IHMgQSBFIEUgQSBBIG4gcyBzIG4gRSBBIHMgRSBBIEEgbiBuIEUgcyBuIEUgcyBuIG4gQSBzIEUgRSBBIEUgQSBBIEUgQSBFIEUgRSBFIEUgcyBBIG4gQSBFIEUgQSBBIEUgRSBFIEEgQSB1IEUgRSBuIG4gRSBFIG4gbiBzIHUgcyBBIEUgRSBBIEEgbiBzIHMgbiBFIEEgcyBFIEEgQSBuIG4gRSBzIG4gRSBzIG4gbiBBIHMgRSBFIEEgRSBBIEEgRSBBIEUgRSBFIEUgRSBzIEEgbiBBIEUgRSBBIEEgIiwKKyJFIHUgQyBuIEUgQyBFIEUgQyB1IEUgdSBuIEEgRSB1IEUgQSBFIHMgRSBuIG4gbiBuIEMgRSBFIHMgdSBzIEUgbiBzIEUgRSB1IHUgRSBDIHMgQSBBIEUgRSBuIEUgcyBuIEUgQSBFIHUgRSB1IEUgQSBFIG4gbiBzIEUgQSBFIEUgdSBDIG4gRSBDIEUgRSBDIHUgRSB1IG4gQSBFIHUgRSBBIEUgcyBFIG4gbiBuIG4gQyBFIEUgcyB1IHMgRSBuIHMgRSBFIHUgdSBFIEMgcyBBIEEgRSBFIG4gRSBzIG4gRSBBIEUgdSBFIHUgRSBBIEUgbiBuIHMgRSBBIEUgIn07CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvYnJhbmRpbmcvb2hmMTI4XzEyOF8zMi5naWYgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvYnJhbmRpbmcvb2hmMTI4XzEyOF8zMi5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGM3NWQyZAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9icmFuZGluZy9vaGYxMjhfMTI4XzMyLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvYnJhbmRpbmcvb2hmMTZfMTZfMzIuZ2lmIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL2JyYW5kaW5nL29oZjE2XzE2XzMyLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YWY5ZjAzCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL2JyYW5kaW5nL29oZjE2XzE2XzMyLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvYnJhbmRpbmcvb2hmMTZfMTZfOC5ibXAgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvYnJhbmRpbmcvb2hmMTZfMTZfOC5ibXAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmVhOGNmNgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9icmFuZGluZy9vaGYxNl8xNl84LmJtcApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvYnJhbmRpbmcvb2hmMjRfMjRfOC5ibXAgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvYnJhbmRpbmcvb2hmMjRfMjRfOC5ibXAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjY1NjAyNAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9icmFuZGluZy9vaGYyNF8yNF84LmJtcApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvYnJhbmRpbmcvb2hmMzJfMzJfMzIuZ2lmIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL2JyYW5kaW5nL29oZjMyXzMyXzMyLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NzRiYmZiCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL2JyYW5kaW5nL29oZjMyXzMyXzMyLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvYnJhbmRpbmcvb2hmMzJfMzJfOC5ibXAgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvYnJhbmRpbmcvb2hmMzJfMzJfOC5ibXAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTNmZmJhZQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9icmFuZGluZy9vaGYzMl8zMl84LmJtcApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvYnJhbmRpbmcvb2hmNDhfNDhfMzIuYm1wIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL2JyYW5kaW5nL29oZjQ4XzQ4XzMyLmJtcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYjA5OTNkCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL2JyYW5kaW5nL29oZjQ4XzQ4XzMyLmJtcApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvYnJhbmRpbmcvb2hmNDhfNDhfMzIuZ2lmIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL2JyYW5kaW5nL29oZjQ4XzQ4XzMyLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYWExZTlhCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL2JyYW5kaW5nL29oZjQ4XzQ4XzMyLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvYnJhbmRpbmcvb2hmNDhfNDhfOC5ibXAgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvYnJhbmRpbmcvb2hmNDhfNDhfOC5ibXAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzA0NTliOAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9icmFuZGluZy9vaGY0OF80OF84LmJtcApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvYnJhbmRpbmcvb2hmNjRfNjRfMzIuZ2lmIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL2JyYW5kaW5nL29oZjY0XzY0XzMyLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMmI4Y2MwCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL2JyYW5kaW5nL29oZjY0XzY0XzMyLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvYnJhbmRpbmcvc3BsYXNoLmJtcCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9icmFuZGluZy9zcGxhc2guYm1wCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdiOTMxZmQKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvYnJhbmRpbmcvc3BsYXNoLmJtcApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvYnJhbmRpbmcvc3BsYXNoLnhwbSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9icmFuZGluZy9zcGxhc2gueHBtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2ZjdlOTEKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvYnJhbmRpbmcvc3BsYXNoLnhwbQpAQCAtMCwwICsxLDM5MCBAQAorLyogWFBNICovCitzdGF0aWMgY2hhciAqc3BsYXNoW10gPSB7CisvKiBjb2x1bW5zIHJvd3MgY29sb3JzIGNoYXJzLXBlci1waXhlbCAqLworIjEyOCAxMjggMjU2IDIiLAorIiAgIGMgIzBDNTc4OCIsCisiLiAgYyAjMEM2Mjk1IiwKKyJYICBjICMxMTUwNzkiLAorIm8gIGMgIzE0MTUxNiIsCisiTyAgYyAjMTQ1Nzg4IiwKKyIrICBjICMxNjE5MTkiLAorIkAgIGMgIzE3NTg4QSIsCisiIyAgYyAjMTkxQjFEIiwKKyIkICBjICMxOTQ4NDgiLAorIiUgIGMgIzE5NDk3NiIsCisiJiAgYyAjMUExQzI0IiwKKyIqICBjICMxQjI1MjkiLAorIj0gIGMgIzFCNDM2QyIsCisiLSAgYyAjMUMzNTM4IiwKKyI7ICBjICMxQzYxM0MiLAorIjogIGMgIzFDNjQ5NiIsCisiPiAgYyAjMUQxRDJCIiwKKyIsICBjICMxRDJBMzIiLAorIjwgIGMgIzFEMzM0OCIsCisiMSAgYyAjMUQzQTJDIiwKKyIyICBjICMxRTIyMzIiLAorIjMgIGMgIzFGMkIzQSIsCisiNCAgYyAjMUYzQjY1IiwKKyI1ICBjICMyMDFGMzAiLAorIjYgIGMgIzIwMzMzRiIsCisiNyAgYyAjMjExRTM4IiwKKyI4ICBjICMyMjI0MzYiLAorIjkgIGMgIzIzMzk2NSIsCisiMCAgYyAjMjQyMzNEIiwKKyJxICBjICMyNDY3OUQiLAorIncgIGMgIzI1MUQ0NiIsCisiZSAgYyAjMjUzNDU5IiwKKyJyICBjICMyNTZEQTMiLAorInQgIGMgIzI2MjY0OCIsCisieSAgYyAjMjY0ODRDIiwKKyJ1ICBjICMyNzJBNTciLAorImkgIGMgIzI3NzRBNyIsCisicCAgYyAjMjgzNjQ2IiwKKyJhICBjICMyQTc1QUEiLAorInMgIGMgIzJCM0Q4MyIsCisiZCAgYyAjMkMxRTU5IiwKKyJmICBjICMyQzI2NjgiLAorImcgIGMgIzJEMjk3NSIsCisiaCAgYyAjMkUxRTcyIiwKKyJqICBjICMyRTUwNkUiLAorImsgIGMgIzJGMUQ2OSIsCisibCAgYyAjMzAxRDYzIiwKKyJ6ICBjICMzMDQ5NTEiLAorInggIGMgIzMxMUM2QSIsCisiYyAgYyAjMzEzNzcxIiwKKyJ2ICBjICMzMjIyNzYiLAorImIgIGMgIzMyMjQ3NyIsCisibiAgYyAjMzI2MDgzIiwKKyJtICBjICMzMzI3NzgiLAorIk0gIGMgIzMzMjc3OSIsCisiTiAgYyAjMzMyODc5IiwKKyJCICBjICMzMzI4N0EiLAorIlYgIGMgIzMzMjk3QSIsCisiQyAgYyAjMzMyQjdCIiwKKyJaICBjICMzMzJEN0QiLAorIkEgIGMgIzMzMzA3RSIsCisiUyAgYyAjMzMzNDgxIiwKKyJEICBjICMzMzgxQUYiLAorIkYgIGMgIzM0MkE3QiIsCisiRyAgYyAjMzQyQjdCIiwKKyJIICBjICMzNDJDN0MiLAorIkogIGMgIzM0M0M1NSIsCisiSyAgYyAjMzQ3QUFDIiwKKyJMICBjICMzNTI5N0EiLAorIlAgIGMgIzM1MkE3QiIsCisiSSAgYyAjMzUyQzdDIiwKKyJVICBjICMzNTJEN0MiLAorIlkgIGMgIzM1MkQ3RCIsCisiVCAgYyAjMzUyRTdEIiwKKyJSICBjICMzNTMxN0YiLAorIkUgIGMgIzM1M0Y4OCIsCisiVyAgYyAjMzU0NDU2IiwKKyJRICBjICMzNjJDN0MiLAorIiEgIGMgIzM2MkQ3RCIsCisifiAgYyAjMzYyRjdFIiwKKyJeICBjICMzNjMwN0UiLAorIi8gIGMgIzM2MzE3RiIsCisiKCAgYyAjMzYzOTg0IiwKKyIpICBjICMzNjc5QUYiLAorIl8gIGMgIzM3MkQ3QyIsCisiYCAgYyAjMzcyRjdFIiwKKyInICBjICMzNzMxN0YiLAorIl0gIGMgIzM3MzI4MCIsCisiWyAgYyAjMzczNTgxIiwKKyJ7ICBjICMzODMzODAiLAorIn0gIGMgIzM4NDg4RSIsCisifCAgYyAjMzkyQzdDIiwKKyIgLiBjICMzOTJFN0QiLAorIi4uIGMgIzM5MzA3RiIsCisiWC4gYyAjMzkzNDgxIiwKKyJvLiBjICMzOTM2ODIiLAorIk8uIGMgIzNBMzE3RiIsCisiKy4gYyAjM0EzNDgxIiwKKyJALiBjICMzQTM2ODIiLAorIiMuIGMgIzNBMzk4NCIsCisiJC4gYyAjM0IzMzgwIiwKKyIlLiBjICMzQjM0ODEiLAorIiYuIGMgIzNCMzY4MiIsCisiKi4gYyAjM0IzQTg1IiwKKyI9LiBjICMzQjU5OUIiLAorIi0uIGMgIzNCODNCNiIsCisiOy4gYyAjM0M0MzhCIiwKKyI6LiBjICMzRDMzODAiLAorIj4uIGMgIzNEMzY4MiIsCisiLC4gYyAjM0QzOTg0IiwKKyI8LiBjICMzRDNGODgiLAorIjEuIGMgIzNENEQ5MiIsCisiMi4gYyAjM0UzRDg3IiwKKyIzLiBjICMzRTUyOTUiLAorIjQuIGMgIzNGM0E4NSIsCisiNS4gYyAjNDEzQTg1IiwKKyI2LiBjICM0MTNEODciLAorIjcuIGMgIzQxNTY5OSIsCisiOC4gYyAjNDIzRjg4IiwKKyI5LiBjICM0MjQyODkiLAorIjAuIGMgIzQyNTM5NiIsCisicS4gYyAjNDMzRDcxIiwKKyJ3LiBjICM0MzQ1OEMiLAorImUuIGMgIzQzNEQ5MiIsCisici4gYyAjNDQzQTg1IiwKKyJ0LiBjICM0NDVCOUMiLAorInkuIGMgIzQ1NDI4QSIsCisidS4gYyAjNDU0ODhDIiwKKyJpLiBjICM0NTU3OTkiLAorInAuIGMgIzQ2NDQ4QiIsCisiYS4gYyAjNDY1MTVDIiwKKyJzLiBjICM0Njg0QjkiLAorImQuIGMgIzQ4NTM2OCIsCisiZi4gYyAjNDg1RkEwIiwKKyJnLiBjICM0ODY2QTUiLAorImguIGMgIzQ4NzhCNSIsCisiai4gYyAjNEE0NThCIiwKKyJrLiBjICM0QjQ5OEUiLAorImwuIGMgIzRCNEQ5MSIsCisiei4gYyAjNEI4M0JBIiwKKyJ4LiBjICM0QjkwQzMiLAorImMuIGMgIzRDNTY5OCIsCisidi4gYyAjNEM1QzlEIiwKKyJiLiBjICM0QzYyQTIiLAorIm4uIGMgIzRENTM5NSIsCisibS4gYyAjNEQ3NDg4IiwKKyJNLiBjICM0RjVDODQiLAorIk4uIGMgIzRGNjk3MyIsCisiQi4gYyAjNTI0RDkxIiwKKyJWLiBjICM1MjUzOTUiLAorIkMuIGMgIzUzNjc5MCIsCisiWi4gYyAjNTM3MUFEIiwKKyJBLiBjICM1MzhFQzIiLAorIlMuIGMgIzU0NTc5OSIsCisiRC4gYyAjNTQ1QzlDIiwKKyJGLiBjICM1NDY0QTIiLAorIkcuIGMgIzU0Nzc4QyIsCisiSC4gYyAjNTQ4N0JEIiwKKyJKLiBjICM1NTQ2OEQiLAorIksuIGMgIzU1N0M5MyIsCisiTC4gYyAjNTc3OUI0IiwKKyJQLiBjICM1Nzk3QzciLAorIkkuIGMgIzU4NjlBNyIsCisiVS4gYyAjNUI1Mzk2IiwKKyJZLiBjICM1QjVDOUMiLAorIlQuIGMgIzVDNjk3QiIsCisiUi4gYyAjNUM2REE5IiwKKyJFLiBjICM1QzcyQUQiLAorIlcuIGMgIzVGNkE3MiIsCisiUS4gYyAjNjBBMUNDIiwKKyIhLiBjICM2MTVDOUMiLAorIn4uIGMgIzYzNjVBMiIsCisiXi4gYyAjNjM2RUE5IiwKKyIvLiBjICM2NDZBQTYiLAorIiguIGMgIzY0NzNBRSIsCisiKS4gYyAjNjQ3QkI1IiwKKyJfLiBjICM2NTczNzkiLAorImAuIGMgIzY2NjM5QyIsCisiJy4gYyAjNjY4MkJBIiwKKyJdLiBjICM2Njk4NTgiLAorIlsuIGMgIzY2OUNDQyIsCisiey4gYyAjNjc3OEIxIiwKKyJ9LiBjICM2NzdBOEYiLAorInwuIGMgIzY3ODM5OCIsCisiIFggYyAjNkE3MkFDIiwKKyIuWCBjICM2QTg1QkMiLAorIlhYIGMgIzZCNkJBNyIsCisib1ggYyAjNkU4NzkwIiwKKyJPWCBjICM2RThFQUMiLAorIitYIGMgIzcwOTBDNCIsCisiQFggYyAjNzM3M0FCIiwKKyIjWCBjICM3NUE4RDUiLAorIiRYIGMgIzc1QUNENyIsCisiJVggYyAjNzY5NEM3IiwKKyImWCBjICM3NzdDQjIiLAorIipYIGMgIzc5ODVCQSIsCisiPVggYyAjNzk5N0FDIiwKKyItWCBjICM3REJCRTQiLAorIjtYIGMgIzg0ODI3RSIsCisiOlggYyAjODQ4RkMxIiwKKyI+WCBjICM4NUE4RDYiLAorIixYIGMgIzg3ODhCQSIsCisiPFggYyAjODc5NUM1IiwKKyIxWCBjICM4OEIzREQiLAorIjJYIGMgIzg5N0Y5OSIsCisiM1ggYyAjODlCQkUyIiwKKyI0WCBjICM4QUE1QjciLAorIjVYIGMgIzhCOTM5MyIsCisiNlggYyAjOEQ5MkFGIiwKKyI3WCBjICM4REMwRTUiLAorIjhYIGMgIzkxQTJBRSIsCisiOVggYyAjOTJCQ0UyIiwKKyIwWCBjICM5NkIwRDQiLAorInFYIGMgIzk3QTE5NyIsCisid1ggYyAjOTdBN0I3IiwKKyJlWCBjICM5N0FBRDQiLAorInJYIGMgIzk4OUFDNyIsCisidFggYyAjOThDM0U2IiwKKyJ5WCBjICM5OUEzQ0MiLAorInVYIGMgIzlBQjRDNCIsCisiaVggYyAjQTNCREUxIiwKKyJwWCBjICNBNEM4RTciLAorImFYIGMgI0E2OERCQiIsCisic1ggYyAjQTc5N0MzIiwKKyJkWCBjICNBN0FFQjUiLAorImZYIGMgI0E4QTNDQiIsCisiZ1ggYyAjQTlBQ0QyIiwKKyJoWCBjICNBQUI1RDYiLAorImpYIGMgI0FCQzdENCIsCisia1ggYyAjQUVEMkVBIiwKKyJsWCBjICNCMUIxQ0EiLAorInpYIGMgI0I0QjVEOSIsCisieFggYyAjQjhEOEVBIiwKKyJjWCBjICNCOERDQUEiLAorInZYIGMgI0I5Q0FEQyIsCisiYlggYyAjQkJCQ0RDIiwKKyJuWCBjICNCQkMzRTIiLAorIm1YIGMgI0M0QkNEQSIsCisiTVggYyAjQzRDNkRDIiwKKyJOWCBjICNDNUNFREQiLAorIkJYIGMgI0M1REFFOSIsCisiVlggYyAjQzZDOEUyIiwKKyJDWCBjICNDQkUwREEiLAorIlpYIGMgI0QyRTVFQiIsCisiQVggYyAjRDNDREUzIiwKKyJTWCBjICNEOURCRTciLAorIkRYIGMgI0RBRTVFQiIsCisiRlggYyAjRTNFOUVDIiwKKyJHWCBjICNFN0VDRjEiLAorIkhYIGMgI0VBRjNFRSIsCisiSlggYyAjRURGNEYzIiwKKyJLWCBjICNGMkY0RjUiLAorIkxYIGMgI0Y1RjlGOSIsCisiUFggYyAjRjlGQ0ZDIiwKKyJJWCBjICNGRUZFRkUiLAorIlVYIGMgZ3JheTEwMCIsCisvKiBwaXhlbHMgKi8KKyJZIFkgWSBZIFkgWSBZIFkgfiAuLkggWSBZIFkgWSBaIF8gXyBZICEgWSBfICEgWSBZIFkgWSBVIFUgVSBVIFUgVSBVIFUgVSBVIFUgVSBVIEkgSSBJIEkgSSBJIEkgVSBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBHIEcgRyBHIEcgRyBHIEcgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgIiwKKyJZIFkgWSBZIFkgWSBZIFUgfiAuLkggWSBZIFkgWSBVIF8gXyBZICAuWSBfICEgWSBZIFkgWSBZIFUgVSBVIFUgVSBVIFUgVSBVIFUgVSBVIFUgVSBJIEkgSSBJIEkgSSBZIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEcgRyBHIEcgRyBHIEcgRyBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgIiwKKyJZIFkgWSBZIFkgWSBZIFUgfiBdIEggWSBZIFkgWSAhIFEgWSAgLiAuWSBfIF8gWSBZIFkgWSBZIFkgVSBVIFUgVSBVIFUgVSBVIFUgVSBVIFUgVSBVIEkgSSBJIEkgSSBJIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEcgRyBHIEcgRyBHIEcgRyBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgIiwKKyJZIFkgWSBZIFkgWSBZIFUgfiBdIEggWSBZIFkgISAhIFkgLi5gICAuISBRIF8gWSBZIFkgWSBZIFkgWSBVIFUgVSBVIFUgVSBVIFUgVSBVIFUgVSBVIFUgSSBJIEkgSSBJIEkgWSBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggRyBHIEcgRyBHIEcgRyBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgIiwKKyJZIFkgWSBZIFkgWSBZIFogfiBdIEggWSAhICEgISBZIC4uYCAgLmAgLi5ZICEgWSBZIFkgWSBZIFkgWSBZIFkgVSBVIFUgVSBVIFUgVSBVIFUgVSBVIFUgVSBVIEkgSSBJIEkgSSBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBHIEcgRyBHIEcgRyBHIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgIiwKKyJZIFkgWSBZIFkgISAhICEgUSBYLlEgISAhICEgISBfIGAgYCAgLmAgIC5ZICEgISBZIFkgWSBZIFkgWSBZIFkgWSBVIFUgVSBVIFUgVSBVIFUgVSBVIFUgVSBVIFUgSSBJIEkgSSBJIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEcgRyBHIEcgRyBHIEcgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgIiwKKyIhICEgISAhICEgISAhICEgUSB7IEkgISAhICEgWSAgLmAgIC4gLmAgIC5IICEgISBZIFkgWSBZIFkgWSBZIFkgWSBZIFkgVSBVIFUgVSBVIFUgVSBVIFUgVSBVIFUgVSBJIEkgSSBJIEkgWSBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEcgRyBHIEcgRyBHIEcgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgIiwKKyIhICEgISAhICEgISAhIFUgJyAnIFUgISAhIFkgIC5gIGAgIC4gLmAgYCBRIHsgISAhIFkgWSBZIFkgWSBZIFkgWSBZIFkgWSBZIFUgVSBVIFUgVSBVIFUgVSBVIFUgVSBVIEkgSSBJIEkgSSBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggRyBHIEcgRyBHIEcgRyBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgIiwKKyJVIFUgVSBVIFUgVSBVIEcgXSBgIEkgVSBJICAuYCBgICEgIC4gLmAgYCBdIFEgISAhIFkgWSBZIFkgWSBZIFkgWSBZIFkgWSBZIFkgVSBVIFUgVSBVIFUgVSBVIFUgVSBVIFUgSSBJIEkgSSBJIFkgSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggRyBHIEcgRyBHIEcgRyBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgIiwKKyJeIF4gXiBeIF4gXiBeIH4gXSBgIH4gYCBdIC8gUiBPLiAuIC4gLmAgIC57IEkgISAhICEgWSBZIFkgWSBZIFkgWSBZIFkgWSBZIFkgWSBVIFUgVSBVIFUgVSBVIFUgVSBVIFUgVSBJIEkgSSBJIEkgSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBHIEcgRyBHIEcgRyBHIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgIiwKKyJ+IH4gYCBgIGAgYCBgICAuWC57IC8gLyAvIC8gYCAuLi4uTy4uLmAgJyAnIEkgISAhICEgISAhIFkgWSBZIFkgWSBZIFkgWSBZIFkgWSBZIFkgVSBVIFUgVSBVIFUgVSBVIFUgVSBVIEkgSSBJIEkgSSBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBHIEcgRyBHIEcgRyBHIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgIiwKKyIvIC8gLyAvIC8gLyAvIFIgJC5dIC8gLyAvIGAgLi4uLi4uLi4uLi4ueyAvIH4gUSAhICEgISAhICEgISBZIFkgWSBZIFkgWSBZIFkgWSBZIFkgWSBVIFUgVSBVIFUgVSBVIFUgVSBVIFUgSSBJIEkgSSBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEcgRyBHIEcgRyBHIEcgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgIiwKKyIvIC8gLyAvIC8gLyAvIF4gTy5dIF4gLyBgIC4uLi5gIDouLi4uLi4uKy5SIHsgfiBeIFUgISAhICEgISAhIFkgWSBZIFkgWSBZIFkgWSBZIFkgWSBZIFUgVSBVIFUgVSBVIFUgVSBVIFUgSSBJIEkgSSBJIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEcgRyBHIEcgRyBHIEcgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgIiwKKyIvIC8gLyAvIC8gLyB7IH4gTy5dICcgLyBdIGAgLi4uLjouLi4uLi4uKy5SIC8gLyB+IH4gISBVICEgISAhICEgVSAvIC8gWSBZIFkgWSBZIFkgWSBZIFkgVSBVIFUgVSBVIFUgVSBVIFUgVSBJIEkgSSBJIEkgWSBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggRyBHIEcgRyBHIEcgRyBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgIiwKKyInICcgJyAnICcgJyB7IC8gJi5dICcgJyBdIC4uYCBPLjouLi5gICUuTy5SIC8gLyAvIGAgfiBeICEgVSAhICEgVSBdIEggWSBZIFkgWSBZIFkgWSBZIFkgWSBVIFUgVSBVIFUgVSBVIFUgVSBVIEkgSSBJIEkgSSBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggRyBHIEcgRyBHIEcgRyBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgIiwKKyInICcgJyAnICcgJyBdIF4gQC5eICcgJyBgIC4uLi46LjouLi5gIFguLyAvIC8gLyAvIC8gYCB+IH4gXiBVIFUgeyBVICEgWSBZIFkgWSBZIFkgWSBZIFkgWSBZIFUgVSBVIFUgVSBVIFUgVSBVIFUgSSBJIEkgSSBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBHIEcgRyBHIEcgRyBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgIiwKKyInICcgLyAvIC8gXSB7IC8gPi4vIC4uLi4uLmAgTy4lLjouLi4uLlguJyAnIC8gLyAvIC8gLyAvIGAgfiB+IGAgYCBVICEgISAhIFkgWSBZIFkgWSBZIFkgWSBZIFkgVSBVIFUgVSBVIFUgVSBVIFUgSSBJIEkgSSBJIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBHIEcgRyBHIEcgRyBHIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgIiwKKyJ7IHsgeyArLiUuWC4rLisuLC4rLlguQC5PLk8uJS4kLjouIC4kLk8uJyAnICcgJyAvIC8gLyAvIC8gLyBgIHsgfiBVICEgISAhICEgWSBZIFkgWSBZIFkgWSBZIFkgVSBVIFUgVSBVIFUgVSBVIFUgVSBJIEkgSSBJIEkgSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEcgRyBHIEcgRyBHIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgIiwKKyIrLisuKy4rLiUuWC4lLl0gLC57IC4uLi4uLiUuJC4kLiQuTy4+LiAuLyAnICcgJyAnIC8gLyAvIC8gLyBYLmAgfiBeIFUgISAhICEgISBZIFkgWSBZIFkgWSBZIFkgWSBVIFUgVSBVIFUgVSBVIFUgVSBVIEkgSSBJIEkgWSBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEcgRyBHIEcgRyBHIEcgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgIiwKKyIrLisuKy4lLiUuKy4mLk8uNC4kLiUuKy4kLiQuJC4kLiYuPi4lLlgueyAvICcgJyAnICcgJyAvIF4geyAvIC8gYCB+IF4gISAhICEgISAhIFkgWSBZIFkgWSBZIFkgWSBZIFUgVSBVIFUgVSBVIFUgVSBVIEkgSSBJIEkgSSBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEcgRyBHIEcgRyBHIEcgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgIiwKKyIlLiUuJS4lLisuJS4mLi4uNC5PLiUuJS5PLiQuPi4+Lj4uJS4lLisuWC4rLnsgXSAnICcgJyAnIF0geyAvIC8gLyBgIH4gXiBVICEgISAhICEgWSBZIFkgWSBZIFkgWSBZIFkgVSBVIFUgVSBVIFUgVSBVIFUgSSBJIEkgSSBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggRyBHIEcgRyBHIEcgRyBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgIiwKKyIkLiQuJC4lLiYuJi4mLisuMi4kLiUuJS4kLk8uNS4+Lk8uLC4lLi4uKy4rLisuKy57IC8gJyAnICsuJyAvIC8gLyAvIGAgfiB+ICEgISAhICEgISBZIFkgWSBZIFkgWSBZIFkgVSBVIFUgVSBVIFUgVSBVIFUgSSBJIEkgSSBJIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggRyBHIEcgRyBHIEcgRyBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgIiwKKyImLiYuJi4mLiYuJi4mLiQuNi4rLiYuJi5vLiwuNS4+Lj4uJi4kLiUuJS4rLisuKy5YLnsgUiArLi8gJyAnIC8gLyAvIC8gLyB+IF4gVSAhICEgISBZIFkgWSBZIFkgWSBZIFkgWSBVIFUgVSBVIFUgVSBVIFUgVSBJIEkgSSBJIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBHIEcgRyBHIEcgRyBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgIiwKKyImLiYuJi4mLiYuJi40LkAuMi5YLiYuWC4+LnIuci4sLjIuQC4lLiQuJS4lLiUuKy4rLisuJS4rLi8gJyAnICcgLyAvIC8gLyBgIH4gXiBVICEgISAhIFkgWSBZIFkgWSBZIFkgWSBVIFUgVSBVIFUgVSBVIFUgVSBVIEkgSSBJIEkgSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBHIEcgRyBHIEcgRyBHIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgIiwKKyImLiYuJi5ALlguPi4sLlguNC57ICwuPi4sLnIuci4sLjQuKy4mLiYuJS4kLiUuJS4lLiUuJi4rLnsgLyAnICcgJyAvIC8gLyAvIGAgfiBeIFUgISAhICEgWSBZIFkgWSBZIFkgWSBZIFUgVSBVIFUgVSBVIFUgVSBVIEkgSSBJIEkgWSBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBHIEcgRyBHIEcgRyBHIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgIiwKKyJYLlguJi4+LjQuNC40LiwueS40LjQuNC41LnIuNS40LiwuQC4mLiYuJi4mLisuJC4kLkAuWC4rLlgueyAvICcgJyAnIC8gLyAvIC8gYCB+ICEgISAhICEgISBZIFkgWSBZIFkgWSBZIFkgVSBVIFUgVSBVIFUgVSBVIEkgSSBJIEkgSSBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEcgRyBHIEcgRyBHIEcgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgIiwKKyI0LjQuNi40LjQuNC4yLiwuNi4sLjQuLC5yLnIuci4yLiwuJS5ALiYuJi4mLiYuKy4mLiUuJS4rLisuWC57IC8gJyAnICcgLyAvIC8gLyB+IH4gISAhICEgISBZIFkgWSBZIFkgWSBZIFkgVSBVIFUgVSBVIFUgVSBVIFUgSSBJIEkgSSBZIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEcgRyBHIEcgRyBHIEcgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgIiwKKyI0LjQuNC40LiwuNi42LjUuOC40LjUuNC5yLnIuNi55LjQuNC5ALkAuJi4mLiUuJi40Lk8uJS4lLiUuKy5YLnsgLyAnICcgJyAvIC8gLyAvIH4gXiBVICEgISAhIFkgWSBZIFkgWSBZIFkgWSBVIFUgVSBVIFUgVSBVIFUgSSBJIEkgSSBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEcgRyBHIEcgRyBHIEcgRyBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgIiwKKyIsLjUuNS44LjguOC5wLjgucC42LjguNi5qLnkuNi42LiwuNC40LjQuWC5ALkAuMi4rLiYuKy4lLiUuJS4rLlgueyAvICcgJyAvIC8gLyAvIGAgfiAhICEgISAhIFkgWSBZIFkgWSBZIFkgWSBVIFUgVSBVIFUgVSBVIFUgVSBJIEkgSSBJIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEcgRyBHIEcgRyBHIEcgRyBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgIiwKKyI2LjYuNi42LjgueS55LjYudy44LjgueS5qLnAudy42LjQuNS40LjQuNC4+LjQuJi4mLiYuJi4lLiUuJS4rLisuWC57ICcgJyAnIC8gLyAvIC8gfiB+IFUgISAhICEgWSBZIFkgWSBZIFkgWSBZIFUgVSBVIFUgVSBVIFUgVSBJIEkgSSBJIFkgSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggRyBHIEcgRyBHIEcgRyBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgIiwKKyJqLjIuNi55Lnkudy5wLnkuay45LnkueS5KLmoucC44LjguNi41LjQuNC44LjQuWC4mLiYuJi4mLiUuJS4lLisuKy5YLl0gJyAnICcgLyAvIC8gLyB+IF4gVSAhICEgWSBZIFkgWSBZIFkgWSBZIFUgVSBVIFUgVSBVIFUgVSBVIEkgSSBJIEkgSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggRyBHIEcgRyBHIEcgRyBHIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgIiwKKyJCLmsueS5wLnAucC5rLmsuay55LnAuQi5KLnAueS44LjguNi44LjUuLC44LjQuNC5YLiYuJi4mLiYuKy4lLiUuKy4rLisuLyAnICcgJyAvIC8gLyBgIH4gISAhICEgISBZIFkgWSBZIFkgWSBZIFkgVSBVIFUgVSBVIFUgVSBVIEkgSSBJIEkgSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggRyBHIEcgRyBHIEcgRyBHIEcgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgIiwKKyJuLlYucC55LnkudS5qLmsudS55LmsuSi5CLmwueS53LncuNi42LjYueS41LjQuNC40LiUuJi4mLiYuJi4kLiUuJS4rLisueyAnICcgJyAvIC8gLyBgIH4gXiBVICEgISBZIFkgWSBZIFkgWSBZIFkgVSBVIFUgVSBVIFUgVSBVIEkgSSBJIEkgWSBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggRyBHIEcgRyBHIEcgRyBHIEcgRyBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgIiwKKyJsLm4ubC5rLmsubC5rLmsuQi5rLmsuSi5CLmsueS5wLnAucC45LnkuOC44LjUuNC40LjQuWC4mLiYuJi4mLiQuJS4rLisuKy5dICcgJyAnIC8gLyAvIGAgfiBVICEgISAhIFkgWSBZIFkgWSBZIFkgVSBVIFUgVSBVIFUgVSBVIEkgSSBJIEkgSSBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBHIEcgRyBHIEcgRyBHIEcgRyBHIEcgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgIiwKKyJsLkIuVS5sLmwubC5uLlYuQi5rLlYuVS5CLkIuay5wLmouai5qLnAuNi42LjguNS40LjQuNC5YLiYuJi4mLiUuJS4lLisuKy57IC8gJyAnIC8gLyAvIC8gfiAhICEgISAhIFkgWSBZIFkgWSBZIFkgWSBVIFUgVSBVIFUgVSBVIFUgSSBJIEkgSSBZIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBHIEcgRyBHIEcgRyBHIEcgRyBHIEcgRyBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgIiwKKyJCLlUuVS5VLm4uYy5VLlYuVi5CLlUuVS5TLmwuay5rLnkueS5rLnAudy44LjYuOC41LjQuNC40LkAuJi4mLiYuKy4lLiUuKy4rLl0gJyAnICcgLyAvIC8gfiBeIFUgISAhIFkgWSBZIFkgWSBZIFkgWSBVIFUgVSBVIFUgVSBVIFUgSSBJIEkgSSBJIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBHIEcgRyBHIEcgRyBHIEcgRyBHIEcgRyBHIEcgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgIiwKKyJVLlkuWS5ZLkIuVi5ZLiEuIS5VLiEuIS5WLmwubC5sLkIubC55LmoucC53LjguNi44LiwuNC40LisuJi4mLiYuJi4kLiUuKy4rLnsgLyAnICcgLyAvIC8gYCB+ICEgISAhICEgWSBZIFkgWSBZIFkgWSBVIFUgVSBVIFUgVSBVIFUgSSBJIEkgSSBJIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBHIEcgRyBHIEcgRyBHIEcgRyBHIEcgRyBHIEcgRyBHIEcgRyBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgIiwKKyJZLlkuWS5gLiEuUy4hLn4uWS5ZLlhYYC5VLlUubi5uLkIubi5rLnkuai55LnAuNi42LjguNS40LjQuby4mLiYuJi4kLiUuJS4rLisuXSAnICcgLyAvIC8gLyB+IF4gVSAhICEgWSBZIFkgWSBZIFkgWSBZIFUgVSBVIFUgVSBVIFUgSSBJIEkgSSBJIEkgSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBHIEcgRyBHIEcgRyBHIEcgRyBHIEcgRyBHIEcgRyBHIEcgRyBHIEcgRyBHIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgIiwKKyJgLmAuWFhAWC8uWS4vLlhYfi5gLmAufi5ZLlkuVS5VLlMubC5CLmwudS5wLncueS45LjguNS4sLjQuPi5ALiYuJi4mLiQuJS4rLisueyAnICcgJyAvIC8gLyBgIF4gVSAhICEgWSBZIFkgWSBZIFkgWSBZIFUgVSBVIFUgVSBVIFUgVSBJIEkgSSBJIEkgSSBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBHIEcgRyBHIEcgRyBHIEcgRyBHIEcgRyBHIEcgRyBHIEcgRyBHIEcgRyBHIEcgRyBHIEcgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgIiwKKyJYWEBYXi5eLl4uLy5eLnsuXi5YWEBYLy4hLlkuWS5ZLlMubi5uLmwuay5rLnAudy53Ljkudy44LjQuLC5ALkAuJi4mLisuJS4rLisuKy4vICcgJyAvIC8gLyBgIH4gVSAhICEgISBZIFkgWSBZIFkgWSBZIFkgVSBVIFUgVSBVIFUgVSBJIEkgSSBJIEkgSSBJIEkgSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBHIEcgRyBHIEcgRyBHIEcgRyBHIEcgRyBHIEcgRyBHIEcgRyBHIEcgRyBHIEcgRyBHIEcgRyBHIEcgRyBHIEcgRyBGIEYgRiBGIEYgIiwKKyJYWF4uXi4sWHNYYVhhWHNYYVhhWGFYQFheLi8uXi5ZLlkuUy5uLm4uVi5CLmwueS5wLnAudy55LjguNC4sLjQuWC4mLiUuJC4lLisuWC5dICcgJyAvIC8gLyAvIH4gXiAhICEgISAhIFkgWSBZIFkgWSBZIFkgWSBVIFUgVSBVIFUgVSBJIEkgSSBJIEkgSSBJIEkgSSBJIEggWSBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEcgRyBHIEcgRyBHIEcgRyBHIEcgRyBHIEcgRyBHIEcgRyBHIEcgRyBHIEcgRyBHIEcgRyBHIEcgRyBHIEcgRyBHIEcgRyBHIEcgIiwKKyJeLiZYc1hzWHJYLFgqWCpYJlgsWHNYYVhhWCBYXi4vLn4uWS4hLmMubi5uLmwubC5lLnkudy45Ljkudy42LjYuLC4mLiYuJS4lLisuKy57ICcgJyAnIC8gLyAvIC8gfiBVICEgVSBVIFEgSCBeIH4gWSBZIFkgWSBZIFkgVSBVIFUgVSBJIEkgSSBJIEkgSSBJIEkgSSBJIEkgSSBJIEkgWSBZIEggSCBIIEggSCBIIEggSCBIIEcgRyBHIEcgRyBHIEcgRyBHIEcgRyBHIEcgRyBHIEcgRyBHIEcgRyBHIEcgRyBHIEcgRyBHIEcgRyBHIEcgRyBHIEcgRyBHIEcgIiwKKyJhWGZYLFgqWDxYOlg8WHJYPFhzWDpYKlgsWHNYQFgvLlhYSS5ZLlkuYy5uLm4ubC5sLnUueS5wLncuOS55LjwuLC4sLiYuJi57ICQuKy4rLi8gJyAnICcgUiBSIFIgIC5HIFEgJyB7IF0gXSAuLn4gWSBZIFkgWSBZIFkgWSBZIFUgVSBVIEkgSSBJIEkgSSBJIEkgSSBJIEkgSSBJIEkgSSBJIEkgSSBIIEggWSBZIEggSCBIIEcgRyBHIEcgRyBHIEcgRyBHIEcgRyBHIEcgRyBHIEcgRyBHIEcgRyBHIEcgRyBHIEcgRyBHIEcgRyBHIEcgRyBHIEcgRyBHIEcgIiwKKyJhWCpYPFhyWHpYaFhnWGJYZ1hiWHlYPFg6WCxYYVgmWC8uIFhSLlkuWS5ELm4ubi5CLmwubC53LnAudy45LncuPC44LiwuNC5ALiUuWC4rLi4uLyAvIC8gTy4kLiYuJi4lLicgVSBfIEkgVSBVICEgUSBaIFkgWSBZIFkgWSBZIFkgWSBUIFEgSSBJIEkgSSBJIEkgSSBJIEkgSSBJIEkgSSBJIEkgSSBJIEkgSSBJIEkgSSBIIEcgRyBHIEcgRyBHIEcgRyBHIEcgRyBHIEcgRyBHIEcgRyBHIEcgRyBHIEcgRyBHIEcgRyBHIEcgRyBHIEcgRyBHIEcgRyBHIEcgIiwKKyIqWDxYelhiWFZYVlhuWE5YVlhBWHpYZ1h5WDpYOlhzWCZYIFggWFIufi5ZLkQuYy5jLlYuZS5lLmUueS53LjkueS44LiwuLC4sLiYuQC4sLiYuJC5YLlguJC5PLmAgXiBSICAuVSAhIFkgWSAhIF8gXyBfIF8gVSBVIFogWSBZIFkgWSBUIFEgUSBRIFEgUSBRIEkgSSBJIEkgSSBJIEkgSSBJIEkgSSBJIEkgSSBJIEkgSSBJIEcgRyBHIEcgRyBQIEcgRyBHIEcgRyBHIEcgRyBHIEcgRyBHIEcgRyBHIEcgRyBHIEcgRyBHIEcgRyBHIEcgRyBHIEcgRyBHIEYgIiwKKyJyWGdYVlhWWFNYRFhGWEhYTFhGWFZYblh6WHJYOlhyWHNYKC4gWFhYUi5ZLlkuRC5uLmMuQi5sLmUuZS53LncueS55LncuPC42LjwuNC4mLiUuLi4gLn4gLi4uLi4uLi5gIGAgYCAgLiAuLi4hICEgXyBfIF8gXyBfIF8gXyAhICEgISBVIFEgUSBRIFEgUSBRIFEgUSBRIFEgUSBRIFEgUSBJIEkgSSBJIEkgSSBJIEkgSSBJIEcgRyBHIEcgRyBHIEcgRyBHIEcgRyBHIEcgRyBHIEcgRyBHIEcgRyBHIEcgRyBHIEcgRyBHIEcgRyBHIEcgRyBHIEYgRiBGIEYgIiwKKyJsWGJYTlhEWElYVVhVWFVYVVhVWEpYU1huWGJYeVg6WGZYJlgoLlhYXi5JLlkuRC5jLm4ubi5CLmwuYy5sLmsubC51LncuOS4sLiwuLC5bICUuJS5PLmAgLi4uLi4uLi4uLiAuYCBgIGAgYCBgICEgISAhIFkgISAhIF8gXyBfIF8gXyBfIF8gXyAgLlEgUSBRIFEgUSBRIFEgUSBRIEkgSSBJIEkgSSBJIEkgSSBJIEkgSSBIIEcgRyBHIEcgRyBHIEcgRyBHIEcgRyBHIEcgRyBHIEcgRyBHIEcgRyBHIEcgRyBHIEcgRyBHIEcgRyBHIEYgRiBGIEYgRiBGIEYgIiwKKyJiWEFYR1hJWFVYVVhVWFVYVVhVWFVYSlhTWG5YZ1g8WHJYc1goLiBYWFhSLlIuIS5GLkYuRC5TLmMubi5rLmouOS53LjkueS42LiwuNC40LiYuJS4lLk8uTy5PLi4uLi5PLiAuIC4gLiAuIC5gICAuIC5gICEgISAhICEgXyBfIF8gXyBfIF8gUSBRIFEgUSBRIFEgSSBJIEkgSSBJIEkgSSBJIEkgSSBJIEkgSSBZIFkgSCBIIEcgRyBHIEcgRyBHIEcgRyBHIEcgRyBHIEcgRyBHIEcgRyBHIEcgRyBHIEcgRyBHIEcgRyBHIEYgRiBGIEYgRiBGIEYgRiBGIEYgIiwKKyJoWFZYSVhVWFVYVVhVWFVYVVhVWFVYVVhHWFZYYlhyWDxYZlh7LiZYIFhAWFhYfi5ZLlkuVS5CLkIubC5rLmwuai5qLnkuai44LnIuPi41LjQuPi5PLiAuTy5PLiAuIC5gICAufCB8IHwgIC4gLkcgUCBRIHwgfCB8IHwgfCBZIFAgWiBRIFAgUCBRIFEgUSBJIEkgSSBJIEkgSSBJIEkgSSBJIEkgSSBIIFkgSCBIIEggSCBIIEcgRyBHIEcgRyBHIEcgRyBHIEcgRyBHIEcgRyBHIEcgRyBHIEcgRyBHIEcgRyBHIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgIiwKKyJiWFNYVVhVWFVYVVhVWFVYVVhVWFVYVVhQWFNYVlhiWHJYelhyWDpYJlh7LiZYQFhAWFhYWFgvLn4ufi4hLlMubi5sLkIubi5sLmUuay5wLncuOC4sLiwuQC5vLm8uQC4rLi8gLyBdICcgJyAnIF0gXiBUIC8gLyB+IF4gWSBUIFQgVCBUIEcgUCBQIEYgRiBGIEwgTCBQIFAgUCBMIFAgUCBQIEkgRiBGIEYgRiBHIEcgRyBHIFAgRyBHIEcgRyBHIEcgRyBHIEcgRyBHIEcgRyBHIEcgRyBHIEcgRyBHIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgIiwKKyJiWERYVVhVWFVYVVhVWFVYVVhVWFVYVVhVWEhYQVhWWGZYYlhyWDpYKlgoLi8uXi4gWCBYXi4oLiguKC4oLl4uRC52LkQuRC5uLjAuMC4wLjAuZS51LiouPC47Ln0gMS5lLmUuZS5lLncudy53LjsuOy4yLiouKi4qLiMuLyBSIDIuPC48LjwuPC45LjkuPC47LiouKi5TIEggUyAoICggKCAoIFsgWyBbIFsgLyAvIFQgVSBVIFUgTiBOIE4gTiBOIG0gbSBOIFYgSCBHIEcgRyBHIEcgRyBHIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgIiwKKyJiWERYVVhVWFVYVVhVWFVYVVhVWFVYVVhVWEZYVlhuWHJYelgqWCBYey46WGVYPFgmWH4uYy5sLmwubi5uLkQuSS5JLkYuYi5TLmUuZS4wLmkuaS45LkQuYy5RIC4uIC4hIEwgTCBtIGIgTCBQIFEgYiAyLjIuMi4yLlguRi42LmsgeCB2IHggbCBsIGwgeCB4IHggZCBtIC8uZCB0IHcgdCB3IHcgdyAwIDcgNyA3IDUgNSA+ID4gPiAmICMgIyAjICMgKyAjIHYgYCBHIEcgRyBHIEcgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgIiwKKyJ6WERYVVhVWFVYVVhVWFVYVVhVWFVYVVhVWERYTVh6WCxYc1g8WFNYUFhTWHJYLFh5WHpYaVhpWGVYPFgpLm4uPC44LlUuRC5lLmUuZS5lLnUudy5vLmdYelhYWHpYelhTWFZYbVhtWFZYTVhmWHJYZiBQICMuJS4+LlUgTVgyWH0uJlgsWHJYOlg6WCpYLFgmWH0uTi5KIEZYOCBOLmogbS5OLmogaiBqICQgJCAkIC0gKiAqICogJiAmICMgKyAjIG8gbyArIHggJyBHIEcgRyBWIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgIiwKKyJnWHZYS1hVWFVYVVhVWFVYVVhVWFVYVVhLWE5YelhmWHJYUFhJWElYd1gwWEtYUFhIWERYQlhwWHRYM1gxWCNYSC5uIDkgKCBCLncuOS44LjwuMi4jLmsuWFh0IGMgZC5vWFBYSVhJWEdYcCA4IDAgeCB+IH4gfiBUICEgai5sLjUgSiB6IFQudlhqWGpYb1g1ID4gPiBtIEBYdCA1IFcgNiBHLksuRy55ICsgJiAmID4gPiA+ID4gIyAjIDUgIyBvICMgbyArIGggViBGIEMgViBWIFYgViBWIFYgViBWIFYgViBDIEMgViBWIFYgViBWIFYgViBWIFYgViBWIFYgIiwKKyJJWElYVVhVWFVYVVhVWFVYVVhVWFVYVVhVWElYSlhrWERYSVhyWGRYSVhJWFVYVVhaWEJYa1hrWDNYJFhbLlAuQS5BLksgPSBzICkuKS4pLikuKS4pLkwuWi4pLmguS1hXIE1YSVhQWFQuRSB7LikuKS4pLnsuRS5FLkUuZy5nLmcuaC5KWHogdVhqWGhYMyB9IEYuYi5nLj0uYi4xLnZYcVhwIEsubS4zIGcgYi5mLmIuYi5iLmYudC43LlouQVg2IG8gbyBvIEUgdi50LjcuNy43LjcuNy43LjcuNy43LjcuNy43LjcuNy4wLjAuMC4wLjAuMC4wLjAuMC4xLn0gIiwKKyJLWElYSVhJWFVYVVhVWFVYVVhVWFVYSVhQWEhYVVhVWElYPFhLWElYVVhVWFVYVVhMWFpYa1h4WDdYMVgjWFEuSC5zLkQgKSAlIDkgKC5FLkUuRS5FLkUuRS5FLmkuQlhfLj1YSVhQWGouPS5eLlouSS5aLlouSS5nLmIuZy5nLmcuMS5LWFcuPVhqWHVYOCB2LmIuYi5mLnQuZi59IHJYRlg2IH0uRy4sIGcgYi50LnQudC50LnQuaS43LkUgZ1hOWG8gKyBvIFMgaS4zLjMuMy4zLjMuMy4zLjMuMy4zLjMuMy4xLjEuMS4xLjsuOy47LjsuOy47LjsuOy47Ln0gIiwKKyJhWGZYaFhiWE1YRlhLWFBYTFhJWERYYlh5WFVYVVhVWFVYVVhVWFVYVVhVWFVYVVhMWERYQlhCWHBYM1gkWFEuSC56LikgaSByIFggdSAsLjIuKi4jLm8ueyAnICEgZ1hxWG9YSVhMWHEuTiBBIFQgVCBUIEEgUiBUIEcgRyBHIEMgTCBWWF8uPVh2WHdYPiBtIEYgRiBGIEMgViBOIH4uRlhwIHwuRy4sIGQgQyBGIEMgQyBDIEMgViBWIE0gQi5KWCsgbyArIGggTiBWIFYgViBWIFYgViBWIFYgViBWIFYgViBWIFYgViBWIFYgViBWIFYgViBWIFYgViBWIFYgIiwKKyIqWDpYZ1hnWGhYYlhiWE1YVlhNWEFYeVhTWFVYVVhVWFVYVVhVWFVYVVhVWFVYVVhMWFpYa1h4WDdYM1gkWFsuQS56LksgciA6IC4gPSBmIGouLC4mLlguXSBgIEkgZ1g4WD1YSVhMWHEubSBaIEggSCBIIEggWiBaIEMgWiBaIEYgTCBNWFcuPVh2WHdYJiBiIEIgQiBCIEIgQiBtIC8uRlhwIHwuRy4sIGQgYCBCIEIgQiBCIE4gTSBNIG0gPi5KWCwgbyArIGggUCBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gTSBNIE0gTSBNIE0gIiwKKyJmWHlYeVh5WHpYblhuWG5YVlhNWEFYZVhJWElYSVhGWFVYVVhVWFVYVVhVWFVYVVhKWERYeFhrWDlYM1gjWFEuQS56LkQgYSA6IEAgICA8IFIgaS53LjsuOy48Liouelg2WDZYSVhMWHEuUiAyLiouKi4qLiouMi47LjwuMi4yLiouWyBBWFcuPVh2WHdYPiAvIG8uby5vLm8uby5dIHsuRlhwIHwuRy4sIGsgJi5bIFsgXSBdIF0gLyBdIC8gXSBTWFcubyArIHYgUiBSIFIgUiBSIFIgQSBBIEEgXiBeIF4gXiBeIF4gXiBBIEEgQSBBIEEgVCBUIFQgVCBUIFQgIiwKKyJLWFBYSFhEWEhYTFhMWExYTFhIWExYRlhCWEZYPFhJWFVYVVhVWFVYVVhVWFVYTFhKWFpYeFhwWDlYM1gjWFEuSC56LksgaSA6IEAgICBYIHUgKS4nLicuJy4nLmguQlg1WDVYSVhMWHEuRS4nLikuKS4nLicuJy4nLicuKS4pLikuTC5LWDtYNFh2WHdYMiBSLkUuRS5FLlIuUi49LmVYRlhwIHwuRy4sIHMgUi5SLlIuUi5nLnQudC52LkYuPS5nLiBYZiBnIGIuYi5iLmYuZi5mLmYudi52LnYudi52LnYudi52LnYudi52LnQuaS5pLmkuaS5pLmkuaS5pLjcuIiwKKyI+WGVYelhtWHpYaFh5WHlYaFh5WGdYSVhVWEtYaFhJWFVYVVhVWFVYVVhVWFVYTFhHWEJYQlh0WHRYMVhbLlEuSC5zLksgciA6IE8gWCAlIDMgUyB2LmUuZS5lLjsuYlg1WDhYSVhMWHEuKCA7LjsuOy47LjsufSAxLjsuOy47LjEubC5GWDtYbFhOWHVYPiBbICMuIy4jLiMuIy5bICZYRlhwIHwuSy4sIGggPC4oICggby4yLnJYdCArIDUgWyBbIFIgPC45LisuWyBbIFsgWyBbIFsgWyBbIFsgWyBSIFIgXSBdIF0gUiBSIFIgUiBSIFIgUiBSIFIgUiAvIFIgIiwKKyJ+Ln4uLy5AWCxYc1hzWGZYZ1gsWG1YVVhJWE1YSVhVWFVYVVhVWFVYVVhVWExYSlhEWHhYa1g5WHRYJFhRLlAueC5zLmEgaSA6IE8gWCAlIGUgMCA2Lm8uWyArLiEgZ1g1WHdYSVhMWHEubSBaIEggSCBIIEggQSBBIFogWiBaIG8uNC5BWDtYbFhDWGNYPiBiIEIgQiBCIEIgQiBtIC8uRlhwIEBYSy4sIGQgISBCIEIgTSA0LkdYLCAqICMgbSBNIE0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIE4gRiBIIEYgTiBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gIiwKKyJZLlkuYC5+Li8uXi4gWCBYQFggWFNYSVhJWDhYSVhVWFVYVVhVWFVYVVhMWEpYRlhCWHhYcFg5WDNYI1hRLkEuei5EIGkgcSA6ICAgJSA0IDQgNyBBIG8uWyBdIFQgZ1hxWHdYSVhQWHIuTiBBIFogWiBBIEEgQSBBIFIgUiBBIEEgPi5TWDtYd1hOWHVYPiBiIFYgViBWIFYgViBOIH4uR1hxLiZYJlgzIGQgUCBWIFYgTSBsLkpYJiAtICMgbSBOIE4gTSBNIE0gTSBNIG0gTSBtIG0gbSBtIE0gViArLnkuay5rLmsucC5PLlYgTSBtIG0gbSBtIG0gbSBtIE4gIiwKKyI+WD5YZVhlWGVYMFgwWGVYMFg+WHhYRlhuWHVYSVhVWFVYVVhVWElYTFhKWEZYeFh4WGtYN1h0WCRYWy5RLkEucy5LIGkgOiBAICAgJSA9IDQgMiBzIF4uRi5GLjAublg1WHdYSVhQWHkuKCA3LjMuMy4zLjEufSBFIEUgfSB9IH0gUyBNWFcuNFh2WHVYNSAwLjcuNy43LjMuNy5FICVYS1hxLiZYJlgzIGcgRC5pLmMuRSBnWDhYJiAsID4gMS59IH0gfSB9IH0gOy4xLjcuOy4qLjsuOy5FIDsuSS5SLkQuRC5jLmMuRC5SLkYuPC4oIDwuPC48LjwuPC48LiMuIiwKKyJpWGlYaVhpWHRYdFh0WHRYcFhwWDdYLVgqWHZYS1hKWExYS1hGWEdYRlhaWHhYeFhrWDlYdFgxWCNYUS5QLnouLS5hIHIgOiBPIE8gPSA0IDkgMiBzICcuJy4nLmcuQlg1WHdYSVhQWF8ucS5qLmsuai5xLkogcCBKIHAgcCBwIHAgcCBwIHAgdVh2WHVYMiBJLlIuUi5SLkkuSS43LnlYR1hxLiZYJlgzID4gZiBmIDMuZiBXICogOyAqIDIgRi5mLmYuZi5mLnQuXi4oLiguKC5SLnQudC49Lnsuey5SLlIuUi5SLlIuUi5SLiBYKC4xLjAuNy43LjcuNy43LjMuIiwKKyJTLlMuRC5ZLkYuSS5JLi8uLy4gWFNYRlg2WHZYRFhaWERYRlhEWEJYa1hrWEJYcFg5WHRYM1gjWFsuUS5BLnMuSyBhIHEgQCAgICUgPSA0IHUgOCB0IDguKi4jLnsgelhxWHdYSVhQWERYZFhkWGRYZFhkWHdYOFg4WDhYNVg1WDVYb1h9Lnwualh2WHVYPiBWIFQgVCBUIFQgVCBDIFhYRlhwIEBYSy5qIC0gLSAtIC0gKiAyIDsgXS4xICMgRyBVIEggSCBGICUuNS4+Lj4uPi44LlguQyA0LmsuNi40LiwuJi4mLiwuLC40LjYubC4+LkYgViBWIFYgViBWIFYgIiwKKyJrLmwuVi5uLlUuUy5GLkYuRC4vLlZYU1gsWHZYWlh4WHhYQlhCWHhYQlhCWHBYOVg3WDNYI1hbLlEuQS56Li0uYSByIDogTyAgICUgNCBlIHUgNSA1IDYueyAnIEkgZ1g1WDhYSVhQWEogNSAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgOCBDLnAgd1h2WHVYJiBtIFAgViBWIFYgUCBtIF4uRlhwIHwuSy4sICMgPiA+ID4gNSBXICYgJCAqICMgbSBOIE0gTSBOIDguOi4uLiAuLi4+Lj4uRiBCLjYuPi4lLk8uLi4uLk8uTy4lLiYuOC5uLlYgbSBOIE4gbSBWIFYgIiwKKyJsLm4uYy5TLlMuRC5ELlkuWS4vLk1YQVgmWDBYQlhrWHhYa1hwWGtYdFh0WDNYN1gxWCRYWy5RLlAuei4tLkQgciBxIDogICBYID0gOSB1IHQgPiAwIDYuKi5vLi8gaFg1WDhYSVhMWFcgbSBSIFIgQSBBIEEgQSBBIEEgQSBBIEEgXyBBWF8uNFh2WHVYPiBWIFQgVCBUIFQgVCBWIFhYRlhwIHwuSy4sIGwgQSBUIEggVSBnWDhYIyAtICMgRyBGIEYgRiBIIHIuPi4lLisuJC40LjQuWC5rLjYuLC4mLisuWC57IFguKy4sLjYuNi5rLnsgVCAnICcgVCBIIFYgIiwKKyI+WD5YMVgxWDFYMVgxWDFYMVgxWCRYMVhaLlsua1h0WDNYOVgzWDdYM1gzWC1YJFgjWFEuUS5QLnoucy5LIGEgcSA6IE8gICAlIDQgNCB1IHQgKiBjICcuKS4pLmcuQlg1WDZYSVhMWFcgRi4pLnsuKC4oLiguKC4oLiguKC4oLkUuaS5HWFcuPVh2WHdYMiBJLlIuUi5JLkkuSS4zLnlYRlhwIHwuRy4sIEEgSS5GLkYuMy4pLkpYJiAtIDggdi5mLmYudi50LiguKC5JLkYuSS4oLkYuSS4pLkkuSS5GLmIuRi5iLmYuRi4gWCZYQFgoLmIuZi4pLikuWi4zLjcuIiwKKyIuWCtYK1grWCVYJVgrWCtYK1grWD5YaVgmWEsuOVh0WC1YMVgtWC1YJFgkWCNYWy5RLlAuQS56LnMuSyBhIHEgOiBPICAgJSA9IDkgZSB0IDAgIyBBICguWi5iLjMublg1WD1YSVhMWFcgfSBiLmYudC5mLnQudC5mLmYudC50LnQuMS5TWFcuPVh2WHdYNSA3LjcuNy43LjMuMC47LjpYRlhwIHwuRy4sIGcgaS4xLjMuOy5uLkpYLCAqICYgMy4xLn0gfSB9IH0gSS5GLkYuRi5iLjwuaS5eLnYuaS43LjAuMy5lLjEuRC5+LkkuIFheLmkuTC4+WD5YTC5iLn0gIiwKKyI4Ljkudy5qLmsuay5sLmwubC5uLixYQVhiWE0uPlgxWCRYI1gjWFsuWy5RLlEuUC5BLkguei4tLksgYSByIDogTyAgIFggJSA0IGUgdSAwID4gIyBDIFsgXSB+IFEgZ1hxWE9YUFhMWEogdiBGIEYgQyBDIEMgQyBDIEMgQyBDIFYgTCBNWFcuPVh2WHdYJiBiIFYgViBWIFYgViBtIH4uRlhwIHwuRy4sIGQgUCBWIFYgTiAhIHpYSiArID4gbSBNIE0gTSBNIE0gRiBgIE8uIC5WIG0gfiBrLjQuJi5PLi4uYCBgIGAgNC5KLmouQi5KLjwuWi55WHlYTC4zLlMgIiwKKyI2LjYuNi55LncucC51Lmsuay5sLlkubVhBWEMueC4jWCNYUS5RLlEuUC5BLkguSC56Li0uKSBLIGEgcSA6IEAgICBYID0gNCA5IHUgdCAwICMgIyAkLnsgXiBUIFAgZ1hxWG9YUFhMWEogdiBWIFYgViBWIFYgViBWIFYgViBWIFYgTCBNWFcuPVhqWHdYJiBiIEIgQiBCIEIgQiBtIC8uRlhwIH0uRy4sIGQgISBCIEIgTiBWIG0gbSB2IG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gViBrLnIuPi5PLk8uJyAnICcgTy42Lmsuay5wLiMuSS4lWCVYTC59IFIgIiwKKyJ2LnYuRC5GLkQuRi5GLkkuSS5GLkkuZVhiWCZYbiBbLlAuQS5BLkEuei56LnouLS4tLksgaSByIDogOiBPICAgWCAlID0gNCBlIHQgMCAmICsgZyAwLn0gOy47LjwuelhxWG9YUFhMWEogUiA8LjIuMi4yLjIuMi4yLjIuKi4qLiouIy5TWFcuPVhqWHdYPiBbICouIy4jLiMuIy5bIHsuRlhwIH0uRy4sIGsgPC4oICggby5vLlsgWyBbIFsgWyBbIFsgWyBbIFsgWyBbIF0gXSBdIF0gXSA5LkQudS5wLjkuOS48LjwuOS45LncuYy4yLiMuMS5MLkwuZi4xLm8uIiwKKyI+WD5YPlg+WD5YPlg+WD5YPlg+WD5YWy5RLlsuaiAtLkguSC4tLi0uLS5EIEsgSyBhIGkgciA6IDogQCAgIFggJSA0IDkgZSB0IDAgPiAjICYgKC4uWCcuJy4nLmguQlg1WH0uUFhMWEogUi4pLikuKS4pLikuKS4pLikuKS4pLikuZy5KWFcuPVhqWHdYMiBSLkUuRS5FLlIuUi49LmVYRlhwIEsubS4sIHMgUi5SLlIuSS5JLkkuSS5GLkYuYi5iLmIuYi5iLmIuYi5GLmYuZi52LmYuZi49LnsuJy4oLiguKC5eLl4uXi4oLnsuXi4zLjcuZi5nLmIudC5mLnYuIiwKKyJlLmUubi5jLmMuYy5jLmMudi52LnYuYy46WHpYLFhqIC0ucy4pIGEgYSBhIHIgciBxIDogOiBAIE8gTyAlID0gPSA0IGUgdCAwIDUgIyArIGYgaS47LjsuPC48LiMuelhxWH0uUFhMWHAgUiAqLiMuIy4jLiouIy4jLiMuIy4jLm8uWC5BWFcuT1hqWDRYPiBSIG8uby5vLm8uWyBdICBYRlg2IEcubS4sIGsgIy5vLlguXSBdIF0gXSBdIF0gLyAvIC8gLyAvIC8gLyAvIFIgUiBSIFIgUiBSIFIgdy5TLmwudS51LncubC5TLjsuUiBUIFQgVCBeIF4gVCBBIFsgIiwKKyJ7ICUuNC40LjQuMi42LjYuOS53Lncudy5sLmdYTVhNLm4gSyBLIHIgcSA6IDogOiBAIEAgICAgIFggJSA9IDkgOSBlIHQgMCA4ICMgIyAmICYuKy4vIFQgVCBIIFYgZ1hxWF8uUFhMWEogdiBWIFYgViBWIFYgViBWIFYgViBWIFYgTCBNWFcuT1hqWDRYJiBiIEIgQiBCIEIgQiBtIC8uRlg2IEcubS4sIGQgYCBCIE0gTSBNIE0gTSBNIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gTSBZIDYuai5rLmouNC5ZIE0gbSBNIE0gTSBtIG0gbSBtIG0gIiwKKyIrLisuLC40LjIuMi42LjguOC45LnUudy53LlMuelh6WGQuJSBhIDogQCBPIE8gQCBPICAgWCAlICUgPSA0IDQgZSB1IDAgNSAmICsgKyBUIFsgeyAvIH4gfiBUIFAgZ1hxWF8uUFhMWEogdiBGIEYgRiBGIEcgRyBHIFAgUCBQIEYgTCBWWFcuT1hqWDRYPiBtIEYgRiBDIEMgViBOIH4uRlg2IG0ubS4sIGQgQyBGIEMgViBWIFYgViBWIFYgViBWIFYgViBWIFYgViBWIFYgViBWIFYgViBWIFYgViBNIE4gViBGIFYgTiBNIFYgViBWIFYgViBWIFYgViBWIFYgIiwKKyIuWCcuLlguWC5YLlguWC5YLlguWCtYJy4nLmguUC4+WDxYOSAlIC4gICBPICAgWCAlICUgPSA9IDQgOSBlIHUgdCAwIDUgIyArICYgdC5FLlIuUi5SLlIuWi5FLjAuU1hXLnwuSVhQWEogRSBSLkkuRi5iLmIuYi5iLmIuYi5iLmIuMS5LWGQuPVh1WHdYMiBpLmIuZi5mLnQudi59IHlYQVg2IG0ubS4zIGcgRC50LnQuMC4wLjcuMC4wLjMuMy4zLjEuMS4xLjEuMS4xLjEuMS4xLjEuMS4xLjEuMS4xLjEuMS4xLjEuMS59IH0gfSA7LjsuOy47LjsuOy47Ln0gIiwKKyIlWCVYJVglWCVYJVglWCVYJVglWCVYJVglWCVYK1grWCVYJVhqIGUgJSAlICUgPSA9ID0gNCA0IGUgdSB0IHQgMCA+ICMgKyA1IEkuKS57Lnsuey4pLlouWi5aLnQuelhXIERYSVhJWH0udSA9LmcuRS4oLiguUi5SLlouZy5nLmYuZi5sWHAgdVh1WHVYcCBnIHQuZi5nLj0udC59IGVYYS56IE4uTi55ICYgMS4zLmYuYi5iLmIudi5mLnQudC50LnQudC50LnQudC50LnQudC50LnQudC50LjcuNy5pLmkuaS5pLmkuNy43LjAuMC4wLjAuMy4zLjMuMy4xLjEuIiwKKyImLiwuLC4sLiwuNC40LjIuMi44Ljkudy53Lncudy53LnAuQFhmWCZYZSA8IDkgPSA5IDkgZSB1IHQgdCAwIDggJiArICMgZCA+LiouIy5vLnsgeyAvIFYufi4wIFcgZC52WExYUFhMWEpYNVhXIEogNSBHIFQgVSBIIFUgWFg5LjggcCBXIDRYdVh1WHdYNFh6IDMgOCB1ICpYPiA1IDMgeiBHLm0uTi5OLjwgJiAjICMgdiBIIEcgRyBGIEYgQyBDIEMgQyBDIEMgQyBDIEMgQyBDIEMgQyBDIEMgQyBDIEMgQyBDIEMgViBWIFYgViBWIFYgViBWIFYgViBWIFYgIiwKKyIgLk8uTy5PLisuKy4+LjQuMi4sLjsuNi4yLjguOC53LjguNi5wLiZYLFhgLmUgOCA4IDMgOCA4IDUgKiAmICMgIyB0IEEgdy4yLkAuWyB7ICcgLyBOIHJYOFh5IH0uXy5kLmQuZC5kLmQuTi5fLl8uPiB2IFQgRyBJIG0gYlg7WHkgTi5hLnAgcCBwIHAgcCB5IGEueSBwIEFYJiB5IDYgLCAyIDIgKiAyICogKiAqICMgeCBgIFAgRyBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgIiwKKyIlLisuJS4lLlguQC5ALiYuLC4+LjguOS48LjguOS5wLncueS45LjYueS5WLiEuKi52IHQgNyAwIDcgdCBmIG0gPi51LjwuIy4jLm8uWC5YLlsgXSBUICsuNC5kIGwgbCB4IGggaCBoIGggeCBrIGQgaCBUIFkgSSBVIEYgJS57IGQgbCB4IGggaCBoIGggaCB4IGwgZCBtIDsuaCBsIGsgeCBoIGggaCBoIHggayBsIGsgViBZIEcgRyBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgIiwKKyIrLiUuKy4lLisuWC5ALiYuLC4sLjQuOC4sLjIuPC48LjgueS45LncucC53LjQudS51Lmwuay51LnUuZS5lLnUuMi4oICMuIy5vLnsgWC5bIC8gXSBBIEYgRiBdIG8uWyBbIFguWC5YLlsgWyBbIFsgeyBUIEkgSSBJIFAgViBWIF0gWyBbIFsgeyB7IHsgeyBbIFsgWyBIIG0gQSBbIFsgeyB7IHsgeyB7IFsgeyAvIF0gWSBHIEcgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgIiwKKyIrLiUuKy4rLisuKy5YLkAuQC5ALiMuMi4sLiwuNi44LjwuPC45LjgueS5wLnkuPC48LjwuPC48LjIuLC4qLm8uIy4jLm8ueyB7ICsuJyB+IF0gfiBVIFkgWSBZIFkgWSBJIFUgVSBVIFUgVSBVIFUgVSBVIEkgSSBJIEkgWSBIIEggRyBHIEggSCBIIEggSCBHIEcgSCBIIEggSCBHIEcgSCBIIEggSCBIIFAgRyBHIEcgRyBHIEcgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgIiwKKyJPLisuTy4rLisuKy4lLlguWC4jLiYuPC4oICwuLC4sLjQuNC44LjIuNC44LncuPC44LjQuKi4qLiwuIy4jLiMuby5bIHsgWC5YLlIgLyBeIH4gVSBZIFkgWSBZIFkgVSBVIFUgVSBVIFUgVSBVIFUgVSBJIEkgSSBJIEkgSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEcgRyBHIEcgRyBHIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgIiwKKyJdIF0gLyAvIC8gXSAvIC8gJyBdIEAuNC4rLkAuKi4jLiggLC4lLjQuNC40LjkuLC4kLiwuIy4jLiMuIy5vLlsgeyBYLlguXSAvIF0gXiBeIFUgWSBZIFkgWSBZIFUgVSBVIFUgVSBVIFUgVSBVIFUgSSBJIEkgSSBJIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBHIEcgRyBHIEcgRyBHIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgIiwKKyJdICcgJyAnICcgJyAnICcgJyAnIH4gLC4rLisuQC4mLiwuKi4jLiYuQC4+LjQuNC5YLiwuIy4jLm8uby57IFguWC4nICcgUiBBIFIgSCBVIFkgWSBZIFkgWSBVIFUgVSBVIFUgVSBVIFUgVSBVIFUgSSBJIEkgSSBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBHIEcgRyBHIEcgRyBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgIiwKKyInICcgJyAnICcgJyAnICcgJyAnIC8geyBdIHsgWC5YLl0gQC5ALlguJC5ALiYuNC4mLisuWyBbIHsgWC5dICcgJyAnIFIgXiBeIFUgWSBZIFkgWSBZIFkgWSBVIFUgVSBVIFUgVSBVIFUgVSBVIEkgSSBJIEkgSSBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggRyBHIEcgRyBHIEcgRyBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgIiwKKyIvIC8gLyAvIC8gLyAvIC8gLyAvIF4gTy5dIEEgJyAnIC8gJyBPLisuJS4lLiYuJi4jLlgueyBdICcgJyB7IGAgfiBSIH4gSSBVIFkgWSBZIFkgWSBZIFkgVSBVIFUgVSBVIFUgVSBVIFUgVSBJIEkgSSBJIEkgSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggRyBHIEcgRyBHIEcgRyBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgIiwKKyIvIC8gLyAvIC8gLyAvIC8gLyAvIFIgTy5dIGAgLyAvICcgJyAnIF0gUiBPLk8uXSAmLl0gXSBgIGAgfiBJIFUgSCBVIFUgWSBZIFkgWSBZIFkgWSBZIFUgVSBVIFUgVSBVIFUgVSBVIFUgSSBJIEkgSSBJIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEcgRyBHIEcgRyBHIEcgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgIiwKKyIvIC8gLyAvIC8gLyAvIC8gLyAvIFIgJC57IC8gLyAvIC8gLyAvIC8gXSBgICAufCAuLmAgIC5JIFUgISAhIFkgWSBZIFkgWSBZIFkgWSBZIFkgWSBVIFUgVSBVIFUgVSBVIFUgVSBVIFUgSSBJIEkgSSBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEcgRyBHIEcgRyBHIEcgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgIiwKKyJ+IH4gfiBgIGAgYCBgIGAgYCBgIGAgXSBdIFQgfiB+IH4gYCBgIF0gXSAgLiAuIC4gLmAgIC5ZICEgISBZIFkgWSBZIFkgWSBZIFkgWSBZIFUgVSBVIFUgVSBVIFUgVSBVIFUgVSBVIEkgSSBJIEkgSSBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBHIEcgRyBHIEcgRyBHIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgIiwKKyJeIF4gXiBeIF4gXiBeIF4gXiBeIH4gYCB7IH4gXiAhIFUgVSBVIFEgIC5gIGAgIC4gLmAgIC5ZICEgISBZIFkgWSBZIFkgWSBZIFkgWSBVIFUgVSBVIFUgVSBVIFUgVSBVIFUgVSBJIEkgSSBJIEkgSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBHIEcgRyBHIEcgRyBHIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgIiwKKyJVIFUgVSBVIFUgVSBVIFUgVSBVIFUgRyBdIEcgVSAhICEgISAhICEgWSAgLmAgYCAgLmAgLi5ZICEgISBZIFkgWSBZIFkgWSBZIFkgVSBVIFUgVSBVIFUgVSBVIFUgVSBVIFUgSSBJIEkgSSBJIFkgSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggRyBHIEcgRyBHIEcgRyBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgIiwKKyIhICEgISAhICEgISAhICEgISAhICEgUSBdIFEgISAhICEgISAhICEgISBZICAuYCAhICAuYCAhICEgISBZIFkgWSBZIFkgWSBZIFUgVSBVIFUgVSBVIFUgVSBVIFUgVSBVIEkgSSBJIEkgSSBVIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEcgRyBHIEcgRyBHIEcgRyBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgIiwKKyIhICEgISAhICEgISAhICEgISAhICEgVSB7IFUgISAhICEgISAhICEgISAhICEgLi5gIGAgYCAhIFEgISBZIFkgWSBZIFkgWSBVIFUgVSBVIFUgVSBVIFUgVSBVIFUgVSBJIEkgSSBJIEkgWSBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEcgRyBHIEcgRyBHIEcgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgIiwKKyJZIFkgWSBZIFkgWSAhICEgISBZIFkgSCAuLkggWSBZIFkgWSBZICEgISAhICEgISAuLiAuIC5ZIF8gISBZIFkgWSBZIFkgVSBVIFUgVSBVIFUgVSBVIFUgVSBVIFUgSSBJIEkgSSBJIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEcgRyBHIEcgRyBHIEcgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgIiwKKyJZIFkgWSBZIFkgWSBZIFkgWSBZIFkgSCAuLkggWSBZIFkgWSBZIFkgWSAhICEgUSBZIHwgIC5ZIF8gISBZIFkgWSBZIFUgVSBVIFUgVSBVIFUgVSBVIFUgVSBJIEkgSSBJIEkgSSBZIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBHIEcgRyBHIEcgRyBHIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgIiwKKyJZIFkgWSBZIFkgWSBZIFkgWSBZIFkgSCBgIGAgWSBZIFkgWSBZIFkgWSBZICEgXyBfIFkgIC5ZIF8gXyBZIFkgWSBZIFUgVSBVIFUgVSBVIFUgVSBVIFUgSSBJIEkgSSBJIEkgWSBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggRyBHIEcgRyBHIEcgRyBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgIiwKKyJZIFkgWSBZIFkgWSBZIFkgWSBZIFkgVSBgIGAgVSBZIFkgWSBZIFkgWSBZIFkgISBfIF8gISAhIF8gXyBZIFkgWSBZIFUgVSBVIFUgVSBVIFUgVSBVIEkgSSBJIEkgSSBJIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEcgRyBHIEcgRyBHIEcgRyBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgIiwKKyJZIFkgWSBZIFkgWSBZIFkgWSBZIFkgWSB+IH4gVSBZIFkgWSBZIFkgWSBZIFkgWSBfIF8gISAhIF8gXyBZIFkgWSBVIFUgVSBVIFUgVSBVIFUgVSBJIEkgSSBJIEkgSSBZIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEcgRyBHIEcgRyBHIEcgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgIiwKKyJZIFkgWSBZIFkgWSBZIFkgWSBZIFkgWSBVIE8uWSBZIFkgWSBZIFkgWSBZIFkgWSBaIF8gXyAhIF8gXyBZIFkgWSBVIFUgVSBVIFUgVSBVIEkgSSBJIEkgSSBJIEkgSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBHIEcgRyBHIEcgRyBHIEcgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgIiwKKyJZIFkgWSBZIFkgWSBZIFkgWSBZIFkgWSBZIFkgWSBZIFkgWSBZIFkgWSBZIFkgWSBZIFUgXyAhICEgXyBaIFkgWSBVIFUgVSBVIFUgVSBJIEkgSSBJIEkgSSBJIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggRyBHIEcgRyBHIEcgRyBHIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgIiwKKyJVIFUgVSBVIFUgWSBZIFkgWSBZIFUgVSBVIFUgVSBVIFUgVSBVIFUgVSBZIFkgWSBZIFkgVSBfICEgXyBVIFkgWSBVIFUgVSBVIEkgSSBJIEkgSSBJIEkgSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEcgRyBHIEcgRyBHIEcgRyBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgIiwKKyJVIFUgVSBVIFUgVSBVIFUgVSBVIFUgVSBVIFUgVSBVIFUgVSBVIFUgVSBVIFUgWSBZIFkgWSBfIF8gXyBVIFkgWSBVIFUgSSBJIEkgSSBJIEkgSSBJIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEcgRyBHIEcgRyBHIEcgRyBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgIiwKKyJVIFUgVSBVIFUgVSBVIFUgVSBVIFUgVSBVIFUgVSBVIFUgVSBVIFUgVSBVIFUgVSBZIFkgWSBaIF8gXyBfIFogVSBJIEkgSSBJIEkgSSBJIEkgSSBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBHIEcgRyBHIEcgRyBHIEcgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgIiwKKyJVIFUgVSBVIFUgVSBVIFUgVSBVIFUgVSBVIFUgVSBVIFUgVSBVIFUgVSBVIFUgVSBVIFkgWSBZIFUgXyBfIFEgUSBJIEkgSSBJIEkgSSBJIEkgSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggRyBHIEcgRyBHIEcgRyBHIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgIiwKKyJVIFUgVSBVIFUgVSBVIFUgVSBVIFUgVSBVIFUgVSBVIFUgVSBVIFUgVSBVIFUgVSBVIFUgVCBVIFQgXyBfIFEgUSBJIEkgSSBJIEkgSSBJIEkgSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEcgRyBHIEcgRyBHIEcgRyBHIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgIiwKKyJVIFUgVSBVIFUgVSBVIFUgVSBVIFUgVSBVIFUgVSBVIFUgVSBVIFUgVSBVIFUgVSBVIFUgSSBRIFEgUSBfIFEgUSBRIEkgSSBJIEkgSSBJIFkgSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBHIEcgRyBHIEcgRyBHIEcgRyBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgIiwKKyJVIFUgVSBVIFUgVSBVIFUgVSBVIFUgVSBVIFUgVSBVIFUgVSBVIFUgVSBVIFUgSSBJIEkgSSBJIFEgUSBRIFEgUSBRIEkgSSBJIEkgSSBJIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBHIEcgRyBHIEcgRyBHIEcgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgIiwKKyJVIFUgVSBVIFUgVSBVIFUgVSBVIFUgVSBVIFUgVSBVIFUgVSBVIEkgSSBJIEkgSSBJIEkgSSBJIFEgUSBRIFEgUSBRIEkgSSBJIEkgSSBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggRyBHIEcgRyBHIEcgRyBHIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgIiwKKyJJIEkgSSBJIEkgSSBJIFUgSSBJIEkgSSBJIEkgSSBJIEkgSSBJIEkgSSBJIEkgSSBJIEkgSSBJIEkgUSBRIFEgUSBRIEkgSSBJIEkgSSBZIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEcgRyBHIEcgRyBHIEcgRyBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgIiwKKyJJIEkgSSBJIEkgSSBJIEkgSSBJIEkgSSBJIEkgSSBJIEkgSSBJIEkgSSBJIEkgSSBJIEkgSSBJIEkgSSBRIFEgUSBRIEkgSSBJIEkgSSBZIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBHIEcgRyBHIEcgRyBHIEcgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgIiwKKyJJIEkgSSBJIEkgSSBJIEkgSSBJIEkgSSBJIEkgSSBJIEkgSSBJIEkgSSBJIEkgSSBJIEkgSSBJIEkgSSBJIFEgUSBRIEkgSSBJIEkgSSBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggRyBHIEcgRyBHIEcgRyBHIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgIiwKKyJJIEkgSSBJIEkgSSBJIEkgSSBJIEkgSSBJIEkgSSBJIEkgSSBJIEkgSSBJIEkgSSBJIEkgSSBJIEkgSSBJIFEgUSBRIFEgSSBJIEkgSSBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBHIEcgRyBHIEcgRyBHIEcgRyBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgIiwKKyJVIFUgWSBIIEggSCBIIEggSCBIIEggSCBZIFUgVSBZIEggSCBIIEggSCBIIEggWSBIIEkgSSBJIEkgSSBJIEkgUSBRIFEgSSBJIEkgSSBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggRyBHIEcgRyBHIEcgRyBHIEcgRyBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgIiwKKyJIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIFkgSSBJIEkgSSBJIEkgSSBRIFEgSSBJIEkgSSBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEcgRyBHIEcgRyBHIEcgRyBHIEcgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgIiwKKyJIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBZIEkgSSBJIEkgSSBRIFEgSSBJIEkgSSBZIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBHIEcgRyBHIEcgRyBHIEcgRyBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgIiwKKyJIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSSBJIEkgSSBJIFEgSSBJIEkgSSBVIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggRyBHIEcgRyBHIEcgRyBHIEcgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgIiwKKyJIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBJIEkgSSBJIEkgUSBJIEkgSSBZIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEcgRyBHIEcgRyBHIEcgRyBHIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgIiwKKyJIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEkgSSBJIEkgSSBJIEkgSSBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggRyBHIEcgRyBHIEcgRyBHIEcgRyBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgIiwKKyJIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEkgSSBJIEkgSSBJIEkgSSBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEcgRyBHIEcgRyBHIEcgRyBHIEcgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgIiwKKyJIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSSBJIEkgSSBJIEkgSSBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggRyBHIEcgRyBHIEcgRyBHIEcgRyBHIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgIiwKKyJIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBJIEkgSSBJIEkgSSBJIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEcgRyBHIEcgRyBHIEcgRyBHIEcgRyBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgIiwKKyJIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEkgSSBJIEkgSSBJIEggSCBIIEggSCBIIEggSCBIIEggRyBHIEcgRyBHIEcgRyBHIEcgRyBHIEcgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgIiwKKyJIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSSBJIEkgSSBJIFkgSCBIIEggSCBIIEggSCBHIEcgRyBHIEcgRyBHIEcgRyBHIEcgRyBHIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgIiwKKyIvIC8gLyAvIC8gLyAvIC8gLyAvIC8gLyAvIC8gLyAvIC8gLyAvIC8gLyAvIC8gLyAvIC8gLyAvIC8gLyAvIC8gLyAvIC8gUiAnICcgJyBgIF0gYCAvIC8gLyAvIC8gYCBgIGAgYCBgIGAgYCBgIGAgYCBgIGAgVCBUIFQgfiB+IH4gfiB+IH4gfiB+IH4gfiB+IH4gfiB+IH4gfiB+IH4gfiB+IH4gfiB+IH4gfiB+IH4gfiB+IH4gfiB+IH4gfiB+IH4gfiB+IH4gfiB+IH4gfiB+IH4gfiB+IH4gfiB+IH4gfiB+IH4gfiB+IH4gfiB+IH4gfiB+IH4gfiB+IH4gIiwKKyJoIGggaCBoIGggaCBoIGggaCBoIGggaCBoIGggaCBoIGggaCBoIGggaCBoIGggaCBoIGggaCBoIGggaCBoIGggaCBoIGggaCBoIGggaCBoIGggaCBoIGggaCBoIGggaCBoIGggaCBoIGggaCBoIGggaCBoIGggaCBoIGggaCBoIGggaCBoIGggaCBoIGggaCBoIGggaCBoIGggaCBoIGggaCBoIGggaCBoIGggaCBoIGggaCBoIGggaCBoIGggaCBoIGggaCBoIGggaCBoIGggaCBoIGggaCBoIGggaCBoIGggaCBoIGggaCBoIGggaCBoIGggaCBoIGggaCBoIGggIgorfTsKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9idWlsZC5wcm9wZXJ0aWVzIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL2J1aWxkLnByb3BlcnRpZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGM4ODM3NQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9idWlsZC5wcm9wZXJ0aWVzCkBAIC0wLDAgKzEsMTkgQEAKK3NvdXJjZS4uID0gc3JjLworb3V0cHV0Li4gPSBiaW4vCitiaW4uaW5jbHVkZXMgPSBNRVRBLUlORi8sXAorICAgICAgICAgICAgICAgLixcCisgICAgICAgICAgICAgICBwbHVnaW4ueG1sLFwKKyAgICAgICAgICAgICAgIHBsdWdpbi5wcm9wZXJ0aWVzLFwKKyAgICAgICAgICAgICAgIGJpbi8sXAorICAgICAgICAgICAgICAgYnJhbmRpbmcvLFwKKyAgICAgICAgICAgICAgIHNwbGFzaC5ibXAsXAorICAgICAgICAgICAgICAgcGx1Z2luX2N1c3RvbWl6YXRpb24uaW5pLFwKKyAgICAgICAgICAgICAgIGljb25zLyxcCisgICAgICAgICAgICAgICBub3RpY2UuaHRtbCxcCisgICAgICAgICAgICAgICBlcGwtdjEwLmh0bWwsXAorICAgICAgICAgICAgICAgaW1hZ2VzLyxcCisgICAgICAgICAgICAgICBpbnRyby8sXAorICAgICAgICAgICAgICAgcGx1Z2luX2RlLnByb3BlcnRpZXMsXAorICAgICAgICAgICAgICAgcGx1Z2luX2tyLnByb3BlcnRpZXMsXAorICAgICAgICAgICAgICAgcGx1Z2luX3poLnByb3BlcnRpZXMKKyAgICAgICAgICAgICAgIApkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL2VwbC12MTAuaHRtbCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9lcGwtdjEwLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWQ0YjE5NgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9lcGwtdjEwLmh0bWwKQEAgLTAsMCArMSwzMjggQEAKKzxodG1sIHhtbG5zOm89InVybjpzY2hlbWFzLW1pY3Jvc29mdC1jb206b2ZmaWNlOm9mZmljZSIKK3htbG5zOnc9InVybjpzY2hlbWFzLW1pY3Jvc29mdC1jb206b2ZmaWNlOndvcmQiCit4bWxucz0iaHR0cDovL3d3dy53My5vcmcvVFIvUkVDLWh0bWw0MCI+CisKKzxoZWFkPgorPG1ldGEgaHR0cC1lcXVpdj1Db250ZW50LVR5cGUgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PXdpbmRvd3MtMTI1MiI+Cis8bWV0YSBuYW1lPVByb2dJZCBjb250ZW50PVdvcmQuRG9jdW1lbnQ+Cis8bWV0YSBuYW1lPUdlbmVyYXRvciBjb250ZW50PSJNaWNyb3NvZnQgV29yZCA5Ij4KKzxtZXRhIG5hbWU9T3JpZ2luYXRvciBjb250ZW50PSJNaWNyb3NvZnQgV29yZCA5Ij4KKzxsaW5rIHJlbD1GaWxlLUxpc3QKK2hyZWY9Ii4vRWNsaXBzZSUyMEVQTCUyMDIwMDNfMTFfMTAlMjBGaW5hbF9maWxlcy9maWxlbGlzdC54bWwiPgorPHRpdGxlPkVjbGlwc2UgUHVibGljIExpY2Vuc2UgLSBWZXJzaW9uIDEuMDwvdGl0bGU+Cis8IS0tW2lmIGd0ZSBtc28gOV0+PHhtbD4KKyA8bzpEb2N1bWVudFByb3BlcnRpZXM+CisgIDxvOlJldmlzaW9uPjI8L286UmV2aXNpb24+CisgIDxvOlRvdGFsVGltZT4zPC9vOlRvdGFsVGltZT4KKyAgPG86Q3JlYXRlZD4yMDA0LTAzLTA1VDIzOjAzOjAwWjwvbzpDcmVhdGVkPgorICA8bzpMYXN0U2F2ZWQ+MjAwNC0wMy0wNVQyMzowMzowMFo8L286TGFzdFNhdmVkPgorICA8bzpQYWdlcz40PC9vOlBhZ2VzPgorICA8bzpXb3Jkcz4xNjI2PC9vOldvcmRzPgorICA8bzpDaGFyYWN0ZXJzPjkyNzA8L286Q2hhcmFjdGVycz4KKyAgIDxvOkxpbmVzPjc3PC9vOkxpbmVzPgorICA8bzpQYXJhZ3JhcGhzPjE4PC9vOlBhcmFncmFwaHM+CisgIDxvOkNoYXJhY3RlcnNXaXRoU3BhY2VzPjExMzg0PC9vOkNoYXJhY3RlcnNXaXRoU3BhY2VzPgorICA8bzpWZXJzaW9uPjkuNDQwMjwvbzpWZXJzaW9uPgorIDwvbzpEb2N1bWVudFByb3BlcnRpZXM+Cis8L3htbD48IVtlbmRpZl0tLT48IS0tW2lmIGd0ZSBtc28gOV0+PHhtbD4KKyA8dzpXb3JkRG9jdW1lbnQ+CisgIDx3OlRyYWNrUmV2aXNpb25zLz4KKyA8L3c6V29yZERvY3VtZW50PgorPC94bWw+PCFbZW5kaWZdLS0+Cis8c3R5bGU+Cis8IS0tCisgLyogRm9udCBEZWZpbml0aW9ucyAqLworQGZvbnQtZmFjZQorCXtmb250LWZhbWlseTpUYWhvbWE7CisJcGFub3NlLTE6MiAxMSA2IDQgMyA1IDQgNCAyIDQ7CisJbXNvLWZvbnQtY2hhcnNldDowOworCW1zby1nZW5lcmljLWZvbnQtZmFtaWx5OnN3aXNzOworCW1zby1mb250LXBpdGNoOnZhcmlhYmxlOworCW1zby1mb250LXNpZ25hdHVyZTo1NTM2Nzk0OTUgLTIxNDc0ODM2NDggOCAwIDY2MDQ3IDA7fQorIC8qIFN0eWxlIERlZmluaXRpb25zICovCitwLk1zb05vcm1hbCwgbGkuTXNvTm9ybWFsLCBkaXYuTXNvTm9ybWFsCisJe21zby1zdHlsZS1wYXJlbnQ6IiI7CisJbWFyZ2luOjBpbjsKKwltYXJnaW4tYm90dG9tOi4wMDAxcHQ7CisJbXNvLXBhZ2luYXRpb246d2lkb3ctb3JwaGFuOworCWZvbnQtc2l6ZToxMi4wcHQ7CisJZm9udC1mYW1pbHk6IlRpbWVzIE5ldyBSb21hbiI7CisJbXNvLWZhcmVhc3QtZm9udC1mYW1pbHk6IlRpbWVzIE5ldyBSb21hbiI7fQorcAorCXttYXJnaW4tcmlnaHQ6MGluOworCW1zby1tYXJnaW4tdG9wLWFsdDphdXRvOworCW1zby1tYXJnaW4tYm90dG9tLWFsdDphdXRvOworCW1hcmdpbi1sZWZ0OjBpbjsKKwltc28tcGFnaW5hdGlvbjp3aWRvdy1vcnBoYW47CisJZm9udC1zaXplOjEyLjBwdDsKKwlmb250LWZhbWlseToiVGltZXMgTmV3IFJvbWFuIjsKKwltc28tZmFyZWFzdC1mb250LWZhbWlseToiVGltZXMgTmV3IFJvbWFuIjt9CitwLkJhbGxvb25UZXh0LCBsaS5CYWxsb29uVGV4dCwgZGl2LkJhbGxvb25UZXh0CisJe21zby1zdHlsZS1uYW1lOiJCYWxsb29uIFRleHQiOworCW1hcmdpbjowaW47CisJbWFyZ2luLWJvdHRvbTouMDAwMXB0OworCW1zby1wYWdpbmF0aW9uOndpZG93LW9ycGhhbjsKKwlmb250LXNpemU6OC4wcHQ7CisJZm9udC1mYW1pbHk6VGFob21hOworCW1zby1mYXJlYXN0LWZvbnQtZmFtaWx5OiJUaW1lcyBOZXcgUm9tYW4iO30KK0BwYWdlIFNlY3Rpb24xCisJe3NpemU6OC41aW4gMTEuMGluOworCW1hcmdpbjoxLjBpbiAxLjI1aW4gMS4waW4gMS4yNWluOworCW1zby1oZWFkZXItbWFyZ2luOi41aW47CisJbXNvLWZvb3Rlci1tYXJnaW46LjVpbjsKKwltc28tcGFwZXItc291cmNlOjA7fQorZGl2LlNlY3Rpb24xCisJe3BhZ2U6U2VjdGlvbjE7fQorLS0+Cis8L3N0eWxlPgorPC9oZWFkPgorCis8Ym9keSBsYW5nPUVOLVVTIHN0eWxlPSd0YWItaW50ZXJ2YWw6LjVpbic+CisKKzxkaXYgY2xhc3M9U2VjdGlvbjE+CisKKzxwIGFsaWduPWNlbnRlciBzdHlsZT0ndGV4dC1hbGlnbjpjZW50ZXInPjxiPkVjbGlwc2UgUHVibGljIExpY2Vuc2UgLSB2IDEuMDwvYj4KKzwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPlRIRSBBQ0NPTVBBTllJTkcgUFJPR1JBTSBJUyBQUk9WSURFRCBVTkRFUgorVEhFIFRFUk1TIE9GIFRISVMgRUNMSVBTRSBQVUJMSUMgTElDRU5TRSAoJnF1b3Q7QUdSRUVNRU5UJnF1b3Q7KS4gQU5ZIFVTRSwKK1JFUFJPRFVDVElPTiBPUiBESVNUUklCVVRJT04gT0YgVEhFIFBST0dSQU0gQ09OU1RJVFVURVMgUkVDSVBJRU5UJ1MgQUNDRVBUQU5DRQorT0YgVEhJUyBBR1JFRU1FTlQuPC9zcGFuPiA8L3A+CisKKzxwPjxiPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4xLiBERUZJTklUSU9OUzwvc3Bhbj48L2I+IDwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPiZxdW90O0NvbnRyaWJ1dGlvbiZxdW90OyBtZWFuczo8L3NwYW4+IDwvcD4KKworPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YSkKK2luIHRoZSBjYXNlIG9mIHRoZSBpbml0aWFsIENvbnRyaWJ1dG9yLCB0aGUgaW5pdGlhbCBjb2RlIGFuZCBkb2N1bWVudGF0aW9uCitkaXN0cmlidXRlZCB1bmRlciB0aGlzIEFncmVlbWVudCwgYW5kPGJyIGNsZWFyPWxlZnQ+CitiKSBpbiB0aGUgY2FzZSBvZiBlYWNoIHN1YnNlcXVlbnQgQ29udHJpYnV0b3I6PC9zcGFuPjwvcD4KKworPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+aSkKK2NoYW5nZXMgdG8gdGhlIFByb2dyYW0sIGFuZDwvc3Bhbj48L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmlpKQorYWRkaXRpb25zIHRvIHRoZSBQcm9ncmFtOzwvc3Bhbj48L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPndoZXJlCitzdWNoIGNoYW5nZXMgYW5kL29yIGFkZGl0aW9ucyB0byB0aGUgUHJvZ3JhbSBvcmlnaW5hdGUgZnJvbSBhbmQgYXJlIGRpc3RyaWJ1dGVkCitieSB0aGF0IHBhcnRpY3VsYXIgQ29udHJpYnV0b3IuIEEgQ29udHJpYnV0aW9uICdvcmlnaW5hdGVzJyBmcm9tIGEgQ29udHJpYnV0b3IKK2lmIGl0IHdhcyBhZGRlZCB0byB0aGUgUHJvZ3JhbSBieSBzdWNoIENvbnRyaWJ1dG9yIGl0c2VsZiBvciBhbnlvbmUgYWN0aW5nIG9uCitzdWNoIENvbnRyaWJ1dG9yJ3MgYmVoYWxmLiBDb250cmlidXRpb25zIGRvIG5vdCBpbmNsdWRlIGFkZGl0aW9ucyB0byB0aGUKK1Byb2dyYW0gd2hpY2g6IChpKSBhcmUgc2VwYXJhdGUgbW9kdWxlcyBvZiBzb2Z0d2FyZSBkaXN0cmlidXRlZCBpbiBjb25qdW5jdGlvbgord2l0aCB0aGUgUHJvZ3JhbSB1bmRlciB0aGVpciBvd24gbGljZW5zZSBhZ3JlZW1lbnQsIGFuZCAoaWkpIGFyZSBub3QgZGVyaXZhdGl2ZQord29ya3Mgb2YgdGhlIFByb2dyYW0uIDwvc3Bhbj48L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4mcXVvdDtDb250cmlidXRvciZxdW90OyBtZWFucyBhbnkgcGVyc29uIG9yCitlbnRpdHkgdGhhdCBkaXN0cmlidXRlcyB0aGUgUHJvZ3JhbS48L3NwYW4+IDwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPiZxdW90O0xpY2Vuc2VkIFBhdGVudHMgJnF1b3Q7IG1lYW4gcGF0ZW50CitjbGFpbXMgbGljZW5zYWJsZSBieSBhIENvbnRyaWJ1dG9yIHdoaWNoIGFyZSBuZWNlc3NhcmlseSBpbmZyaW5nZWQgYnkgdGhlIHVzZQorb3Igc2FsZSBvZiBpdHMgQ29udHJpYnV0aW9uIGFsb25lIG9yIHdoZW4gY29tYmluZWQgd2l0aCB0aGUgUHJvZ3JhbS4gPC9zcGFuPjwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPiZxdW90O1Byb2dyYW0mcXVvdDsgbWVhbnMgdGhlIENvbnRyaWJ1dGlvbnMKK2Rpc3RyaWJ1dGVkIGluIGFjY29yZGFuY2Ugd2l0aCB0aGlzIEFncmVlbWVudC48L3NwYW4+IDwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPiZxdW90O1JlY2lwaWVudCZxdW90OyBtZWFucyBhbnlvbmUgd2hvCityZWNlaXZlcyB0aGUgUHJvZ3JhbSB1bmRlciB0aGlzIEFncmVlbWVudCwgaW5jbHVkaW5nIGFsbCBDb250cmlidXRvcnMuPC9zcGFuPiA8L3A+CisKKzxwPjxiPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4yLiBHUkFOVCBPRiBSSUdIVFM8L3NwYW4+PC9iPiA8L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmEpCitTdWJqZWN0IHRvIHRoZSB0ZXJtcyBvZiB0aGlzIEFncmVlbWVudCwgZWFjaCBDb250cmlidXRvciBoZXJlYnkgZ3JhbnRzIFJlY2lwaWVudAorYSBub24tZXhjbHVzaXZlLCB3b3JsZHdpZGUsIHJveWFsdHktZnJlZSBjb3B5cmlnaHQgbGljZW5zZSB0bzxzcGFuCitzdHlsZT0nY29sb3I6cmVkJz4gPC9zcGFuPnJlcHJvZHVjZSwgcHJlcGFyZSBkZXJpdmF0aXZlIHdvcmtzIG9mLCBwdWJsaWNseQorZGlzcGxheSwgcHVibGljbHkgcGVyZm9ybSwgZGlzdHJpYnV0ZSBhbmQgc3VibGljZW5zZSB0aGUgQ29udHJpYnV0aW9uIG9mIHN1Y2gKK0NvbnRyaWJ1dG9yLCBpZiBhbnksIGFuZCBzdWNoIGRlcml2YXRpdmUgd29ya3MsIGluIHNvdXJjZSBjb2RlIGFuZCBvYmplY3QgY29kZQorZm9ybS48L3NwYW4+PC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5iKQorU3ViamVjdCB0byB0aGUgdGVybXMgb2YgdGhpcyBBZ3JlZW1lbnQsIGVhY2ggQ29udHJpYnV0b3IgaGVyZWJ5IGdyYW50cworUmVjaXBpZW50IGEgbm9uLWV4Y2x1c2l2ZSwgd29ybGR3aWRlLDxzcGFuIHN0eWxlPSdjb2xvcjpncmVlbic+IDwvc3Bhbj5yb3lhbHR5LWZyZWUKK3BhdGVudCBsaWNlbnNlIHVuZGVyIExpY2Vuc2VkIFBhdGVudHMgdG8gbWFrZSwgdXNlLCBzZWxsLCBvZmZlciB0byBzZWxsLCBpbXBvcnQKK2FuZCBvdGhlcndpc2UgdHJhbnNmZXIgdGhlIENvbnRyaWJ1dGlvbiBvZiBzdWNoIENvbnRyaWJ1dG9yLCBpZiBhbnksIGluIHNvdXJjZQorY29kZSBhbmQgb2JqZWN0IGNvZGUgZm9ybS4gVGhpcyBwYXRlbnQgbGljZW5zZSBzaGFsbCBhcHBseSB0byB0aGUgY29tYmluYXRpb24KK29mIHRoZSBDb250cmlidXRpb24gYW5kIHRoZSBQcm9ncmFtIGlmLCBhdCB0aGUgdGltZSB0aGUgQ29udHJpYnV0aW9uIGlzIGFkZGVkCitieSB0aGUgQ29udHJpYnV0b3IsIHN1Y2ggYWRkaXRpb24gb2YgdGhlIENvbnRyaWJ1dGlvbiBjYXVzZXMgc3VjaCBjb21iaW5hdGlvbgordG8gYmUgY292ZXJlZCBieSB0aGUgTGljZW5zZWQgUGF0ZW50cy4gVGhlIHBhdGVudCBsaWNlbnNlIHNoYWxsIG5vdCBhcHBseSB0bworYW55IG90aGVyIGNvbWJpbmF0aW9ucyB3aGljaCBpbmNsdWRlIHRoZSBDb250cmlidXRpb24uIE5vIGhhcmR3YXJlIHBlciBzZSBpcworbGljZW5zZWQgaGVyZXVuZGVyLiA8L3NwYW4+PC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5jKQorUmVjaXBpZW50IHVuZGVyc3RhbmRzIHRoYXQgYWx0aG91Z2ggZWFjaCBDb250cmlidXRvciBncmFudHMgdGhlIGxpY2Vuc2VzIHRvIGl0cworQ29udHJpYnV0aW9ucyBzZXQgZm9ydGggaGVyZWluLCBubyBhc3N1cmFuY2VzIGFyZSBwcm92aWRlZCBieSBhbnkgQ29udHJpYnV0b3IKK3RoYXQgdGhlIFByb2dyYW0gZG9lcyBub3QgaW5mcmluZ2UgdGhlIHBhdGVudCBvciBvdGhlciBpbnRlbGxlY3R1YWwgcHJvcGVydHkKK3JpZ2h0cyBvZiBhbnkgb3RoZXIgZW50aXR5LiBFYWNoIENvbnRyaWJ1dG9yIGRpc2NsYWltcyBhbnkgbGlhYmlsaXR5IHRvIFJlY2lwaWVudAorZm9yIGNsYWltcyBicm91Z2h0IGJ5IGFueSBvdGhlciBlbnRpdHkgYmFzZWQgb24gaW5mcmluZ2VtZW50IG9mIGludGVsbGVjdHVhbAorcHJvcGVydHkgcmlnaHRzIG9yIG90aGVyd2lzZS4gQXMgYSBjb25kaXRpb24gdG8gZXhlcmNpc2luZyB0aGUgcmlnaHRzIGFuZAorbGljZW5zZXMgZ3JhbnRlZCBoZXJldW5kZXIsIGVhY2ggUmVjaXBpZW50IGhlcmVieSBhc3N1bWVzIHNvbGUgcmVzcG9uc2liaWxpdHkKK3RvIHNlY3VyZSBhbnkgb3RoZXIgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBuZWVkZWQsIGlmIGFueS4gRm9yIGV4YW1wbGUsCitpZiBhIHRoaXJkIHBhcnR5IHBhdGVudCBsaWNlbnNlIGlzIHJlcXVpcmVkIHRvIGFsbG93IFJlY2lwaWVudCB0byBkaXN0cmlidXRlCit0aGUgUHJvZ3JhbSwgaXQgaXMgUmVjaXBpZW50J3MgcmVzcG9uc2liaWxpdHkgdG8gYWNxdWlyZSB0aGF0IGxpY2Vuc2UgYmVmb3JlCitkaXN0cmlidXRpbmcgdGhlIFByb2dyYW0uPC9zcGFuPjwvcD4KKworPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+ZCkKK0VhY2ggQ29udHJpYnV0b3IgcmVwcmVzZW50cyB0aGF0IHRvIGl0cyBrbm93bGVkZ2UgaXQgaGFzIHN1ZmZpY2llbnQgY29weXJpZ2h0CityaWdodHMgaW4gaXRzIENvbnRyaWJ1dGlvbiwgaWYgYW55LCB0byBncmFudCB0aGUgY29weXJpZ2h0IGxpY2Vuc2Ugc2V0IGZvcnRoIGluCit0aGlzIEFncmVlbWVudC4gPC9zcGFuPjwvcD4KKworPHA+PGI+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPjMuIFJFUVVJUkVNRU5UUzwvc3Bhbj48L2I+IDwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkEgQ29udHJpYnV0b3IgbWF5IGNob29zZSB0byBkaXN0cmlidXRlIHRoZQorUHJvZ3JhbSBpbiBvYmplY3QgY29kZSBmb3JtIHVuZGVyIGl0cyBvd24gbGljZW5zZSBhZ3JlZW1lbnQsIHByb3ZpZGVkIHRoYXQ6PC9zcGFuPgorPC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5hKQoraXQgY29tcGxpZXMgd2l0aCB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhpcyBBZ3JlZW1lbnQ7IGFuZDwvc3Bhbj48L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmIpCitpdHMgbGljZW5zZSBhZ3JlZW1lbnQ6PC9zcGFuPjwvcD4KKworPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+aSkKK2VmZmVjdGl2ZWx5IGRpc2NsYWltcyBvbiBiZWhhbGYgb2YgYWxsIENvbnRyaWJ1dG9ycyBhbGwgd2FycmFudGllcyBhbmQKK2NvbmRpdGlvbnMsIGV4cHJlc3MgYW5kIGltcGxpZWQsIGluY2x1ZGluZyB3YXJyYW50aWVzIG9yIGNvbmRpdGlvbnMgb2YgdGl0bGUKK2FuZCBub24taW5mcmluZ2VtZW50LCBhbmQgaW1wbGllZCB3YXJyYW50aWVzIG9yIGNvbmRpdGlvbnMgb2YgbWVyY2hhbnRhYmlsaXR5CithbmQgZml0bmVzcyBmb3IgYSBwYXJ0aWN1bGFyIHB1cnBvc2U7IDwvc3Bhbj48L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmlpKQorZWZmZWN0aXZlbHkgZXhjbHVkZXMgb24gYmVoYWxmIG9mIGFsbCBDb250cmlidXRvcnMgYWxsIGxpYWJpbGl0eSBmb3IgZGFtYWdlcywKK2luY2x1ZGluZyBkaXJlY3QsIGluZGlyZWN0LCBzcGVjaWFsLCBpbmNpZGVudGFsIGFuZCBjb25zZXF1ZW50aWFsIGRhbWFnZXMsIHN1Y2gKK2FzIGxvc3QgcHJvZml0czsgPC9zcGFuPjwvcD4KKworPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+aWlpKQorc3RhdGVzIHRoYXQgYW55IHByb3Zpc2lvbnMgd2hpY2ggZGlmZmVyIGZyb20gdGhpcyBBZ3JlZW1lbnQgYXJlIG9mZmVyZWQgYnkgdGhhdAorQ29udHJpYnV0b3IgYWxvbmUgYW5kIG5vdCBieSBhbnkgb3RoZXIgcGFydHk7IGFuZDwvc3Bhbj48L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPml2KQorc3RhdGVzIHRoYXQgc291cmNlIGNvZGUgZm9yIHRoZSBQcm9ncmFtIGlzIGF2YWlsYWJsZSBmcm9tIHN1Y2ggQ29udHJpYnV0b3IsIGFuZAoraW5mb3JtcyBsaWNlbnNlZXMgaG93IHRvIG9idGFpbiBpdCBpbiBhIHJlYXNvbmFibGUgbWFubmVyIG9uIG9yIHRocm91Z2ggYQorbWVkaXVtIGN1c3RvbWFyaWx5IHVzZWQgZm9yIHNvZnR3YXJlIGV4Y2hhbmdlLjxzcGFuIHN0eWxlPSdjb2xvcjpibHVlJz4gPC9zcGFuPjwvc3Bhbj48L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5XaGVuIHRoZSBQcm9ncmFtIGlzIG1hZGUgYXZhaWxhYmxlIGluIHNvdXJjZQorY29kZSBmb3JtOjwvc3Bhbj4gPC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5hKQoraXQgbXVzdCBiZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGlzIEFncmVlbWVudDsgYW5kIDwvc3Bhbj48L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmIpIGEKK2NvcHkgb2YgdGhpcyBBZ3JlZW1lbnQgbXVzdCBiZSBpbmNsdWRlZCB3aXRoIGVhY2ggY29weSBvZiB0aGUgUHJvZ3JhbS4gPC9zcGFuPjwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkNvbnRyaWJ1dG9ycyBtYXkgbm90IHJlbW92ZSBvciBhbHRlciBhbnkKK2NvcHlyaWdodCBub3RpY2VzIGNvbnRhaW5lZCB3aXRoaW4gdGhlIFByb2dyYW0uIDwvc3Bhbj48L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5FYWNoIENvbnRyaWJ1dG9yIG11c3QgaWRlbnRpZnkgaXRzZWxmIGFzIHRoZQorb3JpZ2luYXRvciBvZiBpdHMgQ29udHJpYnV0aW9uLCBpZiBhbnksIGluIGEgbWFubmVyIHRoYXQgcmVhc29uYWJseSBhbGxvd3MKK3N1YnNlcXVlbnQgUmVjaXBpZW50cyB0byBpZGVudGlmeSB0aGUgb3JpZ2luYXRvciBvZiB0aGUgQ29udHJpYnV0aW9uLiA8L3NwYW4+PC9wPgorCis8cD48Yj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+NC4gQ09NTUVSQ0lBTCBESVNUUklCVVRJT048L3NwYW4+PC9iPiA8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5Db21tZXJjaWFsIGRpc3RyaWJ1dG9ycyBvZiBzb2Z0d2FyZSBtYXkKK2FjY2VwdCBjZXJ0YWluIHJlc3BvbnNpYmlsaXRpZXMgd2l0aCByZXNwZWN0IHRvIGVuZCB1c2VycywgYnVzaW5lc3MgcGFydG5lcnMKK2FuZCB0aGUgbGlrZS4gV2hpbGUgdGhpcyBsaWNlbnNlIGlzIGludGVuZGVkIHRvIGZhY2lsaXRhdGUgdGhlIGNvbW1lcmNpYWwgdXNlCitvZiB0aGUgUHJvZ3JhbSwgdGhlIENvbnRyaWJ1dG9yIHdobyBpbmNsdWRlcyB0aGUgUHJvZ3JhbSBpbiBhIGNvbW1lcmNpYWwKK3Byb2R1Y3Qgb2ZmZXJpbmcgc2hvdWxkIGRvIHNvIGluIGEgbWFubmVyIHdoaWNoIGRvZXMgbm90IGNyZWF0ZSBwb3RlbnRpYWwKK2xpYWJpbGl0eSBmb3Igb3RoZXIgQ29udHJpYnV0b3JzLiBUaGVyZWZvcmUsIGlmIGEgQ29udHJpYnV0b3IgaW5jbHVkZXMgdGhlCitQcm9ncmFtIGluIGEgY29tbWVyY2lhbCBwcm9kdWN0IG9mZmVyaW5nLCBzdWNoIENvbnRyaWJ1dG9yICgmcXVvdDtDb21tZXJjaWFsCitDb250cmlidXRvciZxdW90OykgaGVyZWJ5IGFncmVlcyB0byBkZWZlbmQgYW5kIGluZGVtbmlmeSBldmVyeSBvdGhlcgorQ29udHJpYnV0b3IgKCZxdW90O0luZGVtbmlmaWVkIENvbnRyaWJ1dG9yJnF1b3Q7KSBhZ2FpbnN0IGFueSBsb3NzZXMsIGRhbWFnZXMgYW5kCitjb3N0cyAoY29sbGVjdGl2ZWx5ICZxdW90O0xvc3NlcyZxdW90OykgYXJpc2luZyBmcm9tIGNsYWltcywgbGF3c3VpdHMgYW5kIG90aGVyCitsZWdhbCBhY3Rpb25zIGJyb3VnaHQgYnkgYSB0aGlyZCBwYXJ0eSBhZ2FpbnN0IHRoZSBJbmRlbW5pZmllZCBDb250cmlidXRvciB0bwordGhlIGV4dGVudCBjYXVzZWQgYnkgdGhlIGFjdHMgb3Igb21pc3Npb25zIG9mIHN1Y2ggQ29tbWVyY2lhbCBDb250cmlidXRvciBpbgorY29ubmVjdGlvbiB3aXRoIGl0cyBkaXN0cmlidXRpb24gb2YgdGhlIFByb2dyYW0gaW4gYSBjb21tZXJjaWFsIHByb2R1Y3QKK29mZmVyaW5nLiBUaGUgb2JsaWdhdGlvbnMgaW4gdGhpcyBzZWN0aW9uIGRvIG5vdCBhcHBseSB0byBhbnkgY2xhaW1zIG9yIExvc3NlcworcmVsYXRpbmcgdG8gYW55IGFjdHVhbCBvciBhbGxlZ2VkIGludGVsbGVjdHVhbCBwcm9wZXJ0eSBpbmZyaW5nZW1lbnQuIEluIG9yZGVyCit0byBxdWFsaWZ5LCBhbiBJbmRlbW5pZmllZCBDb250cmlidXRvciBtdXN0OiBhKSBwcm9tcHRseSBub3RpZnkgdGhlIENvbW1lcmNpYWwKK0NvbnRyaWJ1dG9yIGluIHdyaXRpbmcgb2Ygc3VjaCBjbGFpbSwgYW5kIGIpIGFsbG93IHRoZSBDb21tZXJjaWFsIENvbnRyaWJ1dG9yCit0byBjb250cm9sLCBhbmQgY29vcGVyYXRlIHdpdGggdGhlIENvbW1lcmNpYWwgQ29udHJpYnV0b3IgaW4sIHRoZSBkZWZlbnNlIGFuZAorYW55IHJlbGF0ZWQgc2V0dGxlbWVudCBuZWdvdGlhdGlvbnMuIFRoZSBJbmRlbW5pZmllZCBDb250cmlidXRvciBtYXkgcGFydGljaXBhdGUKK2luIGFueSBzdWNoIGNsYWltIGF0IGl0cyBvd24gZXhwZW5zZS48L3NwYW4+IDwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkZvciBleGFtcGxlLCBhIENvbnRyaWJ1dG9yIG1pZ2h0IGluY2x1ZGUgdGhlCitQcm9ncmFtIGluIGEgY29tbWVyY2lhbCBwcm9kdWN0IG9mZmVyaW5nLCBQcm9kdWN0IFguIFRoYXQgQ29udHJpYnV0b3IgaXMgdGhlbiBhCitDb21tZXJjaWFsIENvbnRyaWJ1dG9yLiBJZiB0aGF0IENvbW1lcmNpYWwgQ29udHJpYnV0b3IgdGhlbiBtYWtlcyBwZXJmb3JtYW5jZQorY2xhaW1zLCBvciBvZmZlcnMgd2FycmFudGllcyByZWxhdGVkIHRvIFByb2R1Y3QgWCwgdGhvc2UgcGVyZm9ybWFuY2UgY2xhaW1zIGFuZAord2FycmFudGllcyBhcmUgc3VjaCBDb21tZXJjaWFsIENvbnRyaWJ1dG9yJ3MgcmVzcG9uc2liaWxpdHkgYWxvbmUuIFVuZGVyIHRoaXMKK3NlY3Rpb24sIHRoZSBDb21tZXJjaWFsIENvbnRyaWJ1dG9yIHdvdWxkIGhhdmUgdG8gZGVmZW5kIGNsYWltcyBhZ2FpbnN0IHRoZQorb3RoZXIgQ29udHJpYnV0b3JzIHJlbGF0ZWQgdG8gdGhvc2UgcGVyZm9ybWFuY2UgY2xhaW1zIGFuZCB3YXJyYW50aWVzLCBhbmQgaWYgYQorY291cnQgcmVxdWlyZXMgYW55IG90aGVyIENvbnRyaWJ1dG9yIHRvIHBheSBhbnkgZGFtYWdlcyBhcyBhIHJlc3VsdCwgdGhlCitDb21tZXJjaWFsIENvbnRyaWJ1dG9yIG11c3QgcGF5IHRob3NlIGRhbWFnZXMuPC9zcGFuPiA8L3A+CisKKzxwPjxiPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz41LiBOTyBXQVJSQU5UWTwvc3Bhbj48L2I+IDwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkVYQ0VQVCBBUyBFWFBSRVNTTFkgU0VUIEZPUlRIIElOIFRISVMKK0FHUkVFTUVOVCwgVEhFIFBST0dSQU0gSVMgUFJPVklERUQgT04gQU4gJnF1b3Q7QVMgSVMmcXVvdDsgQkFTSVMsIFdJVEhPVVQKK1dBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgRUlUSEVSIEVYUFJFU1MgT1IgSU1QTElFRCBJTkNMVURJTkcsCitXSVRIT1VUIExJTUlUQVRJT04sIEFOWSBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgVElUTEUsIE5PTi1JTkZSSU5HRU1FTlQsCitNRVJDSEFOVEFCSUxJVFkgT1IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIEVhY2ggUmVjaXBpZW50IGlzIHNvbGVseQorcmVzcG9uc2libGUgZm9yIGRldGVybWluaW5nIHRoZSBhcHByb3ByaWF0ZW5lc3Mgb2YgdXNpbmcgYW5kIGRpc3RyaWJ1dGluZyB0aGUKK1Byb2dyYW0gYW5kIGFzc3VtZXMgYWxsIHJpc2tzIGFzc29jaWF0ZWQgd2l0aCBpdHMgZXhlcmNpc2Ugb2YgcmlnaHRzIHVuZGVyIHRoaXMKK0FncmVlbWVudCAsIGluY2x1ZGluZyBidXQgbm90IGxpbWl0ZWQgdG8gdGhlIHJpc2tzIGFuZCBjb3N0cyBvZiBwcm9ncmFtIGVycm9ycywKK2NvbXBsaWFuY2Ugd2l0aCBhcHBsaWNhYmxlIGxhd3MsIGRhbWFnZSB0byBvciBsb3NzIG9mIGRhdGEsIHByb2dyYW1zIG9yCitlcXVpcG1lbnQsIGFuZCB1bmF2YWlsYWJpbGl0eSBvciBpbnRlcnJ1cHRpb24gb2Ygb3BlcmF0aW9ucy4gPC9zcGFuPjwvcD4KKworPHA+PGI+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPjYuIERJU0NMQUlNRVIgT0YgTElBQklMSVRZPC9zcGFuPjwvYj4gPC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+RVhDRVBUIEFTIEVYUFJFU1NMWSBTRVQgRk9SVEggSU4gVEhJUworQUdSRUVNRU5ULCBORUlUSEVSIFJFQ0lQSUVOVCBOT1IgQU5ZIENPTlRSSUJVVE9SUyBTSEFMTCBIQVZFIEFOWSBMSUFCSUxJVFkgRk9SCitBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyhJTkNMVURJTkcgV0lUSE9VVCBMSU1JVEFUSU9OIExPU1QgUFJPRklUUyksIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCitPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORworTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPUiBESVNUUklCVVRJT04gT0YKK1RIRSBQUk9HUkFNIE9SIFRIRSBFWEVSQ0lTRSBPRiBBTlkgUklHSFRTIEdSQU5URUQgSEVSRVVOREVSLCBFVkVOIElGIEFEVklTRUQgT0YKK1RIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRVMuPC9zcGFuPiA8L3A+CisKKzxwPjxiPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz43LiBHRU5FUkFMPC9zcGFuPjwvYj4gPC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+SWYgYW55IHByb3Zpc2lvbiBvZiB0aGlzIEFncmVlbWVudCBpcyBpbnZhbGlkCitvciB1bmVuZm9yY2VhYmxlIHVuZGVyIGFwcGxpY2FibGUgbGF3LCBpdCBzaGFsbCBub3QgYWZmZWN0IHRoZSB2YWxpZGl0eSBvcgorZW5mb3JjZWFiaWxpdHkgb2YgdGhlIHJlbWFpbmRlciBvZiB0aGUgdGVybXMgb2YgdGhpcyBBZ3JlZW1lbnQsIGFuZCB3aXRob3V0CitmdXJ0aGVyIGFjdGlvbiBieSB0aGUgcGFydGllcyBoZXJldG8sIHN1Y2ggcHJvdmlzaW9uIHNoYWxsIGJlIHJlZm9ybWVkIHRvIHRoZQorbWluaW11bSBleHRlbnQgbmVjZXNzYXJ5IHRvIG1ha2Ugc3VjaCBwcm92aXNpb24gdmFsaWQgYW5kIGVuZm9yY2VhYmxlLjwvc3Bhbj4gPC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+SWYgUmVjaXBpZW50IGluc3RpdHV0ZXMgcGF0ZW50IGxpdGlnYXRpb24KK2FnYWluc3QgYW55IGVudGl0eSAoaW5jbHVkaW5nIGEgY3Jvc3MtY2xhaW0gb3IgY291bnRlcmNsYWltIGluIGEgbGF3c3VpdCkKK2FsbGVnaW5nIHRoYXQgdGhlIFByb2dyYW0gaXRzZWxmIChleGNsdWRpbmcgY29tYmluYXRpb25zIG9mIHRoZSBQcm9ncmFtIHdpdGgKK290aGVyIHNvZnR3YXJlIG9yIGhhcmR3YXJlKSBpbmZyaW5nZXMgc3VjaCBSZWNpcGllbnQncyBwYXRlbnQocyksIHRoZW4gc3VjaAorUmVjaXBpZW50J3MgcmlnaHRzIGdyYW50ZWQgdW5kZXIgU2VjdGlvbiAyKGIpIHNoYWxsIHRlcm1pbmF0ZSBhcyBvZiB0aGUgZGF0ZQorc3VjaCBsaXRpZ2F0aW9uIGlzIGZpbGVkLiA8L3NwYW4+PC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+QWxsIFJlY2lwaWVudCdzIHJpZ2h0cyB1bmRlciB0aGlzIEFncmVlbWVudAorc2hhbGwgdGVybWluYXRlIGlmIGl0IGZhaWxzIHRvIGNvbXBseSB3aXRoIGFueSBvZiB0aGUgbWF0ZXJpYWwgdGVybXMgb3IKK2NvbmRpdGlvbnMgb2YgdGhpcyBBZ3JlZW1lbnQgYW5kIGRvZXMgbm90IGN1cmUgc3VjaCBmYWlsdXJlIGluIGEgcmVhc29uYWJsZQorcGVyaW9kIG9mIHRpbWUgYWZ0ZXIgYmVjb21pbmcgYXdhcmUgb2Ygc3VjaCBub25jb21wbGlhbmNlLiBJZiBhbGwgUmVjaXBpZW50J3MKK3JpZ2h0cyB1bmRlciB0aGlzIEFncmVlbWVudCB0ZXJtaW5hdGUsIFJlY2lwaWVudCBhZ3JlZXMgdG8gY2Vhc2UgdXNlIGFuZAorZGlzdHJpYnV0aW9uIG9mIHRoZSBQcm9ncmFtIGFzIHNvb24gYXMgcmVhc29uYWJseSBwcmFjdGljYWJsZS4gSG93ZXZlciwKK1JlY2lwaWVudCdzIG9ibGlnYXRpb25zIHVuZGVyIHRoaXMgQWdyZWVtZW50IGFuZCBhbnkgbGljZW5zZXMgZ3JhbnRlZCBieQorUmVjaXBpZW50IHJlbGF0aW5nIHRvIHRoZSBQcm9ncmFtIHNoYWxsIGNvbnRpbnVlIGFuZCBzdXJ2aXZlLiA8L3NwYW4+PC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+RXZlcnlvbmUgaXMgcGVybWl0dGVkIHRvIGNvcHkgYW5kIGRpc3RyaWJ1dGUKK2NvcGllcyBvZiB0aGlzIEFncmVlbWVudCwgYnV0IGluIG9yZGVyIHRvIGF2b2lkIGluY29uc2lzdGVuY3kgdGhlIEFncmVlbWVudCBpcworY29weXJpZ2h0ZWQgYW5kIG1heSBvbmx5IGJlIG1vZGlmaWVkIGluIHRoZSBmb2xsb3dpbmcgbWFubmVyLiBUaGUgQWdyZWVtZW50CitTdGV3YXJkIHJlc2VydmVzIHRoZSByaWdodCB0byBwdWJsaXNoIG5ldyB2ZXJzaW9ucyAoaW5jbHVkaW5nIHJldmlzaW9ucykgb2YKK3RoaXMgQWdyZWVtZW50IGZyb20gdGltZSB0byB0aW1lLiBObyBvbmUgb3RoZXIgdGhhbiB0aGUgQWdyZWVtZW50IFN0ZXdhcmQgaGFzCit0aGUgcmlnaHQgdG8gbW9kaWZ5IHRoaXMgQWdyZWVtZW50LiBUaGUgRWNsaXBzZSBGb3VuZGF0aW9uIGlzIHRoZSBpbml0aWFsCitBZ3JlZW1lbnQgU3Rld2FyZC4gVGhlIEVjbGlwc2UgRm91bmRhdGlvbiBtYXkgYXNzaWduIHRoZSByZXNwb25zaWJpbGl0eSB0bworc2VydmUgYXMgdGhlIEFncmVlbWVudCBTdGV3YXJkIHRvIGEgc3VpdGFibGUgc2VwYXJhdGUgZW50aXR5LiBFYWNoIG5ldyB2ZXJzaW9uCitvZiB0aGUgQWdyZWVtZW50IHdpbGwgYmUgZ2l2ZW4gYSBkaXN0aW5ndWlzaGluZyB2ZXJzaW9uIG51bWJlci4gVGhlIFByb2dyYW0KKyhpbmNsdWRpbmcgQ29udHJpYnV0aW9ucykgbWF5IGFsd2F5cyBiZSBkaXN0cmlidXRlZCBzdWJqZWN0IHRvIHRoZSB2ZXJzaW9uIG9mCit0aGUgQWdyZWVtZW50IHVuZGVyIHdoaWNoIGl0IHdhcyByZWNlaXZlZC4gSW4gYWRkaXRpb24sIGFmdGVyIGEgbmV3IHZlcnNpb24gb2YKK3RoZSBBZ3JlZW1lbnQgaXMgcHVibGlzaGVkLCBDb250cmlidXRvciBtYXkgZWxlY3QgdG8gZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbQorKGluY2x1ZGluZyBpdHMgQ29udHJpYnV0aW9ucykgdW5kZXIgdGhlIG5ldyB2ZXJzaW9uLiBFeGNlcHQgYXMgZXhwcmVzc2x5IHN0YXRlZAoraW4gU2VjdGlvbnMgMihhKSBhbmQgMihiKSBhYm92ZSwgUmVjaXBpZW50IHJlY2VpdmVzIG5vIHJpZ2h0cyBvciBsaWNlbnNlcyB0bwordGhlIGludGVsbGVjdHVhbCBwcm9wZXJ0eSBvZiBhbnkgQ29udHJpYnV0b3IgdW5kZXIgdGhpcyBBZ3JlZW1lbnQsIHdoZXRoZXIKK2V4cHJlc3NseSwgYnkgaW1wbGljYXRpb24sIGVzdG9wcGVsIG9yIG90aGVyd2lzZS4gQWxsIHJpZ2h0cyBpbiB0aGUgUHJvZ3JhbSBub3QKK2V4cHJlc3NseSBncmFudGVkIHVuZGVyIHRoaXMgQWdyZWVtZW50IGFyZSByZXNlcnZlZC48L3NwYW4+IDwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPlRoaXMgQWdyZWVtZW50IGlzIGdvdmVybmVkIGJ5IHRoZSBsYXdzIG9mIHRoZQorU3RhdGUgb2YgTmV3IFlvcmsgYW5kIHRoZSBpbnRlbGxlY3R1YWwgcHJvcGVydHkgbGF3cyBvZiB0aGUgVW5pdGVkIFN0YXRlcyBvZgorQW1lcmljYS4gTm8gcGFydHkgdG8gdGhpcyBBZ3JlZW1lbnQgd2lsbCBicmluZyBhIGxlZ2FsIGFjdGlvbiB1bmRlciB0aGlzCitBZ3JlZW1lbnQgbW9yZSB0aGFuIG9uZSB5ZWFyIGFmdGVyIHRoZSBjYXVzZSBvZiBhY3Rpb24gYXJvc2UuIEVhY2ggcGFydHkgd2FpdmVzCitpdHMgcmlnaHRzIHRvIGEganVyeSB0cmlhbCBpbiBhbnkgcmVzdWx0aW5nIGxpdGlnYXRpb24uPC9zcGFuPiA8L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbD48IVtpZiAhc3VwcG9ydEVtcHR5UGFyYXNdPiZuYnNwOzwhW2VuZGlmXT48bzpwPjwvbzpwPjwvcD4KKworPC9kaXY+CisKKzwvYm9keT4KKworPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9pY29ucy9mdWxsL2FjdGlvbnMxNi9kaXNhYmxlZFBhdXNlLmdpZiBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9pY29ucy9mdWxsL2FjdGlvbnMxNi9kaXNhYmxlZFBhdXNlLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ODU1OTNlCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL2ljb25zL2Z1bGwvYWN0aW9uczE2L2Rpc2FibGVkUGF1c2UuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9pY29ucy9mdWxsL2FjdGlvbnMxNi9kaXNhYmxlZFJlc2V0LmdpZiBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9pY29ucy9mdWxsL2FjdGlvbnMxNi9kaXNhYmxlZFJlc2V0LmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYTczYjczCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL2ljb25zL2Z1bGwvYWN0aW9uczE2L2Rpc2FibGVkUmVzZXQuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9pY29ucy9mdWxsL2FjdGlvbnMxNi9kaXNhYmxlZFJ1bi5naWYgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvaWNvbnMvZnVsbC9hY3Rpb25zMTYvZGlzYWJsZWRSdW4uZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA2MGU0M2EKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvaWNvbnMvZnVsbC9hY3Rpb25zMTYvZGlzYWJsZWRSdW4uZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9pY29ucy9mdWxsL2FjdGlvbnMxNi9kaXNhYmxlZFN0ZXAuZ2lmIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL2ljb25zL2Z1bGwvYWN0aW9uczE2L2Rpc2FibGVkU3RlcC5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjMzN2M5ZgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9pY29ucy9mdWxsL2FjdGlvbnMxNi9kaXNhYmxlZFN0ZXAuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9pY29ucy9mdWxsL2FjdGlvbnMxNi9kaXNhYmxlZFN0b3AuZ2lmIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL2ljb25zL2Z1bGwvYWN0aW9uczE2L2Rpc2FibGVkU3RvcC5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjU4YjI1NAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9pY29ucy9mdWxsL2FjdGlvbnMxNi9kaXNhYmxlZFN0b3AuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9pY29ucy9mdWxsL2FjdGlvbnMxNi9wYXVzZS5naWYgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvaWNvbnMvZnVsbC9hY3Rpb25zMTYvcGF1c2UuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUyZWU5ZDcKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvaWNvbnMvZnVsbC9hY3Rpb25zMTYvcGF1c2UuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9pY29ucy9mdWxsL2FjdGlvbnMxNi9yZXNldC5naWYgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvaWNvbnMvZnVsbC9hY3Rpb25zMTYvcmVzZXQuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgyMTI4ZjkKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvaWNvbnMvZnVsbC9hY3Rpb25zMTYvcmVzZXQuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9pY29ucy9mdWxsL2FjdGlvbnMxNi9yZXN0YXJ0LmdpZiBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9pY29ucy9mdWxsL2FjdGlvbnMxNi9yZXN0YXJ0LmdpZgpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4xZmQxZGNlCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL2ljb25zL2Z1bGwvYWN0aW9uczE2L3Jlc3RhcnQuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9pY29ucy9mdWxsL2FjdGlvbnMxNi9ydW4uZ2lmIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL2ljb25zL2Z1bGwvYWN0aW9uczE2L3J1bi5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjk4Yjc4OQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9pY29ucy9mdWxsL2FjdGlvbnMxNi9ydW4uZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9pY29ucy9mdWxsL2FjdGlvbnMxNi9zdGVwLmdpZiBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9pY29ucy9mdWxsL2FjdGlvbnMxNi9zdGVwLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNjUzZWNiCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL2ljb25zL2Z1bGwvYWN0aW9uczE2L3N0ZXAuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9pY29ucy9mdWxsL2FjdGlvbnMxNi9zdG9wLmdpZiBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9pY29ucy9mdWxsL2FjdGlvbnMxNi9zdG9wLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YjdjZTNlCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL2ljb25zL2Z1bGwvYWN0aW9uczE2L3N0b3AuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9pY29ucy9mdWxsL2N1c3RvbW9iajE2Ly5jdnNpZ25vcmUgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvaWNvbnMvZnVsbC9jdXN0b21vYmoxNi8uY3ZzaWdub3JlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA4NWU4YmEKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvaWNvbnMvZnVsbC9jdXN0b21vYmoxNi8uY3ZzaWdub3JlCkBAIC0wLDAgKzEgQEAKK1RodW1icy5kYgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL2ljb25zL2Z1bGwvY3VzdG9tb2JqMTYvQW5hbHlzaXMuZ2lmIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL2ljb25zL2Z1bGwvY3VzdG9tb2JqMTYvQW5hbHlzaXMuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU2YWVlYmIKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvaWNvbnMvZnVsbC9jdXN0b21vYmoxNi9BbmFseXNpcy5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL2ljb25zL2Z1bGwvY3VzdG9tb2JqMTYvQXV0b21hdGljRXhwZXJpbWVudC5naWYgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvaWNvbnMvZnVsbC9jdXN0b21vYmoxNi9BdXRvbWF0aWNFeHBlcmltZW50LmdpZgpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi44N2ZjNjc4Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL2ljb25zL2Z1bGwvY3VzdG9tb2JqMTYvQXV0b21hdGljRXhwZXJpbWVudC5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL2ljb25zL2Z1bGwvY3VzdG9tb2JqMTYvQmF0Y2guZ2lmIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL2ljb25zL2Z1bGwvY3VzdG9tb2JqMTYvQmF0Y2guZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhmYWRlNGMKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvaWNvbnMvZnVsbC9jdXN0b21vYmoxNi9CYXRjaC5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL2ljb25zL2Z1bGwvY3VzdG9tb2JqMTYvQ29weS5naWYgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvaWNvbnMvZnVsbC9jdXN0b21vYmoxNi9Db3B5LmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYzEwNzE5Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL2ljb25zL2Z1bGwvY3VzdG9tb2JqMTYvQ29weS5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL2ljb25zL2Z1bGwvY3VzdG9tb2JqMTYvRGVjb3JhdG9yLmdpZiBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9pY29ucy9mdWxsL2N1c3RvbW9iajE2L0RlY29yYXRvci5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2MzNzZhZAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9pY29ucy9mdWxsL2N1c3RvbW9iajE2L0RlY29yYXRvci5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL2ljb25zL2Z1bGwvY3VzdG9tb2JqMTYvRGVjb3JhdG9yTW9kZWxGaWxlLmdpZiBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9pY29ucy9mdWxsL2N1c3RvbW9iajE2L0RlY29yYXRvck1vZGVsRmlsZS5naWYKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYjRhYTM2MAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9pY29ucy9mdWxsL2N1c3RvbW9iajE2L0RlY29yYXRvck1vZGVsRmlsZS5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL2ljb25zL2Z1bGwvY3VzdG9tb2JqMTYvRGVsZXRlLmdpZiBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9pY29ucy9mdWxsL2N1c3RvbW9iajE2L0RlbGV0ZS5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTVhYTliMwotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9pY29ucy9mdWxsL2N1c3RvbW9iajE2L0RlbGV0ZS5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL2ljb25zL2Z1bGwvY3VzdG9tb2JqMTYvRHluYW1pY0xhYmVsLmdpZiBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9pY29ucy9mdWxsL2N1c3RvbW9iajE2L0R5bmFtaWNMYWJlbC5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWI5ZTM1MwotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9pY29ucy9mdWxsL2N1c3RvbW9iajE2L0R5bmFtaWNMYWJlbC5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL2ljb25zL2Z1bGwvY3VzdG9tb2JqMTYvRWRnZS5naWYgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvaWNvbnMvZnVsbC9jdXN0b21vYmoxNi9FZGdlLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YWRkYjllCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL2ljb25zL2Z1bGwvY3VzdG9tb2JqMTYvRWRnZS5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL2ljb25zL2Z1bGwvY3VzdG9tb2JqMTYvRXhwZXJpbWVudC5naWYgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvaWNvbnMvZnVsbC9jdXN0b21vYmoxNi9FeHBlcmltZW50LmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNmRlM2IxCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL2ljb25zL2Z1bGwvY3VzdG9tb2JqMTYvRXhwZXJpbWVudC5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL2ljb25zL2Z1bGwvY3VzdG9tb2JqMTYvRXhwZXJpbWVudE1vZGVsRmlsZS5naWYgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvaWNvbnMvZnVsbC9jdXN0b21vYmoxNi9FeHBlcmltZW50TW9kZWxGaWxlLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi45ODEzYzIxCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL2ljb25zL2Z1bGwvY3VzdG9tb2JqMTYvRXhwZXJpbWVudE1vZGVsRmlsZS5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL2ljb25zL2Z1bGwvY3VzdG9tb2JqMTYvR3JhcGguZ2lmIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL2ljb25zL2Z1bGwvY3VzdG9tb2JqMTYvR3JhcGguZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU3MGIzNTUKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvaWNvbnMvZnVsbC9jdXN0b21vYmoxNi9HcmFwaC5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL2ljb25zL2Z1bGwvY3VzdG9tb2JqMTYvR3JhcGhNb2RlbEZpbGUuZ2lmIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL2ljb25zL2Z1bGwvY3VzdG9tb2JqMTYvR3JhcGhNb2RlbEZpbGUuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcwMGIwNjYKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvaWNvbnMvZnVsbC9jdXN0b21vYmoxNi9HcmFwaE1vZGVsRmlsZS5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL2ljb25zL2Z1bGwvY3VzdG9tb2JqMTYvSGVscEljb24uZ2lmIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL2ljb25zL2Z1bGwvY3VzdG9tb2JqMTYvSGVscEljb24uZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc2Y2ExZWQKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvaWNvbnMvZnVsbC9jdXN0b21vYmoxNi9IZWxwSWNvbi5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL2ljb25zL2Z1bGwvY3VzdG9tb2JqMTYvSGVscEljb25NYWNPUy5naWYgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvaWNvbnMvZnVsbC9jdXN0b21vYmoxNi9IZWxwSWNvbk1hY09TLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZThhOTJmCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL2ljb25zL2Z1bGwvY3VzdG9tb2JqMTYvSGVscEljb25NYWNPUy5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL2ljb25zL2Z1bGwvY3VzdG9tb2JqMTYvTGFiZWwuZ2lmIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL2ljb25zL2Z1bGwvY3VzdG9tb2JqMTYvTGFiZWwuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYzMTQyYjUKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvaWNvbnMvZnVsbC9jdXN0b21vYmoxNi9MYWJlbC5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL2ljb25zL2Z1bGwvY3VzdG9tb2JqMTYvTGlzdC5naWYgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvaWNvbnMvZnVsbC9jdXN0b21vYmoxNi9MaXN0LmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZGExMTBhCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL2ljb25zL2Z1bGwvY3VzdG9tb2JqMTYvTGlzdC5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL2ljb25zL2Z1bGwvY3VzdG9tb2JqMTYvTWF0cml4LmdpZiBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9pY29ucy9mdWxsL2N1c3RvbW9iajE2L01hdHJpeC5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2NjYmViMQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9pY29ucy9mdWxsL2N1c3RvbW9iajE2L01hdHJpeC5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL2ljb25zL2Z1bGwvY3VzdG9tb2JqMTYvTW9kZWwuZ2lmIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL2ljb25zL2Z1bGwvY3VzdG9tb2JqMTYvTW9kZWwuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBhMDEzM2IKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvaWNvbnMvZnVsbC9jdXN0b21vYmoxNi9Nb2RlbC5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL2ljb25zL2Z1bGwvY3VzdG9tb2JqMTYvTW9kZWxNb2RlbEZpbGUuZ2lmIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL2ljb25zL2Z1bGwvY3VzdG9tb2JqMTYvTW9kZWxNb2RlbEZpbGUuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNkNjE3ZTIKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvaWNvbnMvZnVsbC9jdXN0b21vYmoxNi9Nb2RlbE1vZGVsRmlsZS5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL2ljb25zL2Z1bGwvY3VzdG9tb2JqMTYvTW9kaWZpZXIuZ2lmIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL2ljb25zL2Z1bGwvY3VzdG9tb2JqMTYvTW9kaWZpZXIuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcwMzhjZDgKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvaWNvbnMvZnVsbC9jdXN0b21vYmoxNi9Nb2RpZmllci5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL2ljb25zL2Z1bGwvY3VzdG9tb2JqMTYvTW9kaWZpZXJNb2RlbEZpbGUuZ2lmIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL2ljb25zL2Z1bGwvY3VzdG9tb2JqMTYvTW9kaWZpZXJNb2RlbEZpbGUuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY1YWZkYmEKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvaWNvbnMvZnVsbC9jdXN0b21vYmoxNi9Nb2RpZmllck1vZGVsRmlsZS5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL2ljb25zL2Z1bGwvY3VzdG9tb2JqMTYvTm9kZS5naWYgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvaWNvbnMvZnVsbC9jdXN0b21vYmoxNi9Ob2RlLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NjE0OGY4Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL2ljb25zL2Z1bGwvY3VzdG9tb2JqMTYvTm9kZS5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL2ljb25zL2Z1bGwvY3VzdG9tb2JqMTYvUHJlZGljYXRlLmdpZiBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9pY29ucy9mdWxsL2N1c3RvbW9iajE2L1ByZWRpY2F0ZS5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDZiNzU4ZAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9pY29ucy9mdWxsL2N1c3RvbW9iajE2L1ByZWRpY2F0ZS5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL2ljb25zL2Z1bGwvY3VzdG9tb2JqMTYvUHJlZGljYXRlTW9kZWxGaWxlLmdpZiBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9pY29ucy9mdWxsL2N1c3RvbW9iajE2L1ByZWRpY2F0ZU1vZGVsRmlsZS5naWYKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYjRmNzZiZgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9pY29ucy9mdWxsL2N1c3RvbW9iajE2L1ByZWRpY2F0ZU1vZGVsRmlsZS5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL2ljb25zL2Z1bGwvY3VzdG9tb2JqMTYvUmVhbFRpbWVTZXF1ZW5jZXIuZ2lmIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL2ljb25zL2Z1bGwvY3VzdG9tb2JqMTYvUmVhbFRpbWVTZXF1ZW5jZXIuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJiYzRmY2EKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvaWNvbnMvZnVsbC9jdXN0b21vYmoxNi9SZWFsVGltZVNlcXVlbmNlci5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL2ljb25zL2Z1bGwvY3VzdG9tb2JqMTYvUmVjb3JkZWRTaW11bGF0aW9ucy5naWYgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvaWNvbnMvZnVsbC9jdXN0b21vYmoxNi9SZWNvcmRlZFNpbXVsYXRpb25zLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MTBjYTRlCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL2ljb25zL2Z1bGwvY3VzdG9tb2JqMTYvUmVjb3JkZWRTaW11bGF0aW9ucy5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL2ljb25zL2Z1bGwvY3VzdG9tb2JqMTYvUmVjb3JkZWRTaW11bGF0aW9uc01vZGVsRmlsZS5naWYgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvaWNvbnMvZnVsbC9jdXN0b21vYmoxNi9SZWNvcmRlZFNpbXVsYXRpb25zTW9kZWxGaWxlLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi40YWRiZmE3Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL2ljb25zL2Z1bGwvY3VzdG9tb2JqMTYvUmVjb3JkZWRTaW11bGF0aW9uc01vZGVsRmlsZS5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL2ljb25zL2Z1bGwvY3VzdG9tb2JqMTYvUmVmYWN0b3IuZ2lmIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL2ljb25zL2Z1bGwvY3VzdG9tb2JqMTYvUmVmYWN0b3IuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFiNWEyM2YKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvaWNvbnMvZnVsbC9jdXN0b21vYmoxNi9SZWZhY3Rvci5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL2ljb25zL2Z1bGwvY3VzdG9tb2JqMTYvU1RFTS5naWYgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvaWNvbnMvZnVsbC9jdXN0b21vYmoxNi9TVEVNLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40OWQxNjdmCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL2ljb25zL2Z1bGwvY3VzdG9tb2JqMTYvU1RFTS5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL2ljb25zL2Z1bGwvY3VzdG9tb2JqMTYvU2NlbmFyaW8uZ2lmIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL2ljb25zL2Z1bGwvY3VzdG9tb2JqMTYvU2NlbmFyaW8uZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg0ZmY2NDEKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvaWNvbnMvZnVsbC9jdXN0b21vYmoxNi9TY2VuYXJpby5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL2ljb25zL2Z1bGwvY3VzdG9tb2JqMTYvU2NlbmFyaW9Nb2RlbEZpbGUuZ2lmIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL2ljb25zL2Z1bGwvY3VzdG9tb2JqMTYvU2NlbmFyaW9Nb2RlbEZpbGUuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ5MThlYWEKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvaWNvbnMvZnVsbC9jdXN0b21vYmoxNi9TY2VuYXJpb01vZGVsRmlsZS5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL2ljb25zL2Z1bGwvY3VzdG9tb2JqMTYvU2VxdWVuY2VyLmdpZiBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9pY29ucy9mdWxsL2N1c3RvbW9iajE2L1NlcXVlbmNlci5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWE3ZWQ5YgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9pY29ucy9mdWxsL2N1c3RvbW9iajE2L1NlcXVlbmNlci5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL2ljb25zL2Z1bGwvY3VzdG9tb2JqMTYvU2VxdWVuY2VyTW9kZWxGaWxlLmdpZiBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9pY29ucy9mdWxsL2N1c3RvbW9iajE2L1NlcXVlbmNlck1vZGVsRmlsZS5naWYKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNTEzODc0NAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9pY29ucy9mdWxsL2N1c3RvbW9iajE2L1NlcXVlbmNlck1vZGVsRmlsZS5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL2ljb25zL2Z1bGwvY3VzdG9tb2JqMTYvU2ltdWxhdGlvbkNvbnRyb2xWaWV3LmdpZiBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9pY29ucy9mdWxsL2N1c3RvbW9iajE2L1NpbXVsYXRpb25Db250cm9sVmlldy5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzYyOGQ5MAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9pY29ucy9mdWxsL2N1c3RvbW9iajE2L1NpbXVsYXRpb25Db250cm9sVmlldy5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL2ljb25zL2Z1bGwvY3VzdG9tb2JqMTYvU3RhdGljTGFiZWwuZ2lmIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL2ljb25zL2Z1bGwvY3VzdG9tb2JqMTYvU3RhdGljTGFiZWwuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYzMTQyYjUKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvaWNvbnMvZnVsbC9jdXN0b21vYmoxNi9TdGF0aWNMYWJlbC5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL2ljb25zL2Z1bGwvY3VzdG9tb2JqMTYvU3RlbUV4cGxvcmVyLmdpZiBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9pY29ucy9mdWxsL2N1c3RvbW9iajE2L1N0ZW1FeHBsb3Jlci5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTlmMzM3ZgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9pY29ucy9mdWxsL2N1c3RvbW9iajE2L1N0ZW1FeHBsb3Jlci5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL2ljb25zL2Z1bGwvY3VzdG9tb2JqMTYvVHJpZ2dlci5naWYgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvaWNvbnMvZnVsbC9jdXN0b21vYmoxNi9UcmlnZ2VyLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMzE2MDM4Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL2ljb25zL2Z1bGwvY3VzdG9tb2JqMTYvVHJpZ2dlci5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL2ljb25zL2Z1bGwvY3VzdG9tb2JqMTYvVHJpZ2dlck1vZGVsRmlsZS5naWYgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvaWNvbnMvZnVsbC9jdXN0b21vYmoxNi9UcmlnZ2VyTW9kZWxGaWxlLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4yNWQwZDg5Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL2ljb25zL2Z1bGwvY3VzdG9tb2JqMTYvVHJpZ2dlck1vZGVsRmlsZS5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL2ljb25zL2Z1bGwvY3VzdG9tb2JqMTYvZXJyb3JfbG9nLmdpZiBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9pY29ucy9mdWxsL2N1c3RvbW9iajE2L2Vycm9yX2xvZy5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTg4NzNhMQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9pY29ucy9mdWxsL2N1c3RvbW9iajE2L2Vycm9yX2xvZy5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL2ljb25zL2Z1bGwvY3VzdG9tb2JqMTYvbWFwLmdpZiBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9pY29ucy9mdWxsL2N1c3RvbW9iajE2L21hcC5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjk4NGMzMAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9pY29ucy9mdWxsL2N1c3RvbW9iajE2L21hcC5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL2ljb25zL2Z1bGwvY3VzdG9tb2JqMTYvcXVlc3Rpb25tYXJrLmdpZiBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9pY29ucy9mdWxsL2N1c3RvbW9iajE2L3F1ZXN0aW9ubWFyay5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjZmYTQxYgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9pY29ucy9mdWxsL2N1c3RvbW9iajE2L3F1ZXN0aW9ubWFyay5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL2ljb25zL2Z1bGwvb2JqMTYvLmN2c2lnbm9yZSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9pY29ucy9mdWxsL29iajE2Ly5jdnNpZ25vcmUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDg1ZThiYQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9pY29ucy9mdWxsL29iajE2Ly5jdnNpZ25vcmUKQEAgLTAsMCArMSBAQAorVGh1bWJzLmRiCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvaWNvbnMvZnVsbC9vYmoxNi9Db21tb25Nb2RlbEZpbGUuZ2lmIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL2ljb25zL2Z1bGwvb2JqMTYvQ29tbW9uTW9kZWxGaWxlLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMmVjNzViCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL2ljb25zL2Z1bGwvb2JqMTYvQ29tbW9uTW9kZWxGaWxlLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvaWNvbnMvZnVsbC9vYmoxNi9FeHBlcmltZW50TW9kZWxGaWxlLmdpZiBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9pY29ucy9mdWxsL29iajE2L0V4cGVyaW1lbnRNb2RlbEZpbGUuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ2ZGUzYjEKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvaWNvbnMvZnVsbC9vYmoxNi9FeHBlcmltZW50TW9kZWxGaWxlLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvaWNvbnMvZnVsbC9vYmoxNi9HcmFwaE1vZGVsRmlsZS5naWYgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvaWNvbnMvZnVsbC9vYmoxNi9HcmFwaE1vZGVsRmlsZS5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzAwYjA2NgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9pY29ucy9mdWxsL29iajE2L0dyYXBoTW9kZWxGaWxlLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvaWNvbnMvZnVsbC9vYmoxNi9HcmFwaGdlbmVyYXRvck1vZGVsRmlsZS5naWYgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvaWNvbnMvZnVsbC9vYmoxNi9HcmFwaGdlbmVyYXRvck1vZGVsRmlsZS5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzA5N2NmNAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9pY29ucy9mdWxsL29iajE2L0dyYXBoZ2VuZXJhdG9yTW9kZWxGaWxlLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvaWNvbnMvZnVsbC9vYmoxNi9Nb2RlbE1vZGVsRmlsZS5naWYgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvaWNvbnMvZnVsbC9vYmoxNi9Nb2RlbE1vZGVsRmlsZS5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2Q2MTdlMgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9pY29ucy9mdWxsL29iajE2L01vZGVsTW9kZWxGaWxlLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvaWNvbnMvZnVsbC9vYmoxNi9Nb2RpZmllck1vZGVsRmlsZS5naWYgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvaWNvbnMvZnVsbC9vYmoxNi9Nb2RpZmllck1vZGVsRmlsZS5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzAzOGNkOAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9pY29ucy9mdWxsL29iajE2L01vZGlmaWVyTW9kZWxGaWxlLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvaWNvbnMvZnVsbC9vYmoxNi9QcmVkaWNhdGVNb2RlbEZpbGUuZ2lmIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL2ljb25zL2Z1bGwvb2JqMTYvUHJlZGljYXRlTW9kZWxGaWxlLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NmI3NThkCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL2ljb25zL2Z1bGwvb2JqMTYvUHJlZGljYXRlTW9kZWxGaWxlLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvaWNvbnMvZnVsbC9vYmoxNi9TY2VuYXJpb01vZGVsRmlsZS5naWYgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvaWNvbnMvZnVsbC9vYmoxNi9TY2VuYXJpb01vZGVsRmlsZS5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDkxOGVhYQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9pY29ucy9mdWxsL29iajE2L1NjZW5hcmlvTW9kZWxGaWxlLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvaWNvbnMvZnVsbC9vYmoxNi9TZXF1ZW5jZXJNb2RlbEZpbGUuZ2lmIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL2ljb25zL2Z1bGwvb2JqMTYvU2VxdWVuY2VyTW9kZWxGaWxlLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYTdlZDliCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL2ljb25zL2Z1bGwvb2JqMTYvU2VxdWVuY2VyTW9kZWxGaWxlLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvaWNvbnMvZnVsbC9vYmoxNi9Tb2x2ZXJNb2RlbEZpbGUuZ2lmIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL2ljb25zL2Z1bGwvb2JqMTYvU29sdmVyTW9kZWxGaWxlLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YTdlZWIyCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL2ljb25zL2Z1bGwvb2JqMTYvU29sdmVyTW9kZWxGaWxlLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvaWNvbnMvZnVsbC9vYmoxNi9UcmlnZ2VyTW9kZWxGaWxlLmdpZiBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9pY29ucy9mdWxsL29iajE2L1RyaWdnZXJNb2RlbEZpbGUuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEzMTYwMzgKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvaWNvbnMvZnVsbC9vYmoxNi9UcmlnZ2VyTW9kZWxGaWxlLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvaWNvbnMvZnVsbC93aXpiYW4vTmV3Q29tbW9uLmdpZiBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9pY29ucy9mdWxsL3dpemJhbi9OZXdDb21tb24uZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI1OTcwNGMKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvaWNvbnMvZnVsbC93aXpiYW4vTmV3Q29tbW9uLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvaWNvbnMvZnVsbC93aXpiYW4vTmV3RXhwZXJpbWVudC5naWYgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvaWNvbnMvZnVsbC93aXpiYW4vTmV3RXhwZXJpbWVudC5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDZkZTNiMQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9pY29ucy9mdWxsL3dpemJhbi9OZXdFeHBlcmltZW50LmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvaWNvbnMvZnVsbC93aXpiYW4vTmV3R3JhcGguZ2lmIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL2ljb25zL2Z1bGwvd2l6YmFuL05ld0dyYXBoLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NzBiMzU1Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL2ljb25zL2Z1bGwvd2l6YmFuL05ld0dyYXBoLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvaWNvbnMvZnVsbC93aXpiYW4vTmV3R3JhcGhnZW5lcmF0b3IuZ2lmIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL2ljb25zL2Z1bGwvd2l6YmFuL05ld0dyYXBoZ2VuZXJhdG9yLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mOWU4MGYwCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL2ljb25zL2Z1bGwvd2l6YmFuL05ld0dyYXBoZ2VuZXJhdG9yLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvaWNvbnMvZnVsbC93aXpiYW4vTmV3TW9kZWwuZ2lmIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL2ljb25zL2Z1bGwvd2l6YmFuL05ld01vZGVsLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYTAxMzNiCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL2ljb25zL2Z1bGwvd2l6YmFuL05ld01vZGVsLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvaWNvbnMvZnVsbC93aXpiYW4vTmV3TW9kaWZpZXIuZ2lmIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL2ljb25zL2Z1bGwvd2l6YmFuL05ld01vZGlmaWVyLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MDM4Y2Q4Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL2ljb25zL2Z1bGwvd2l6YmFuL05ld01vZGlmaWVyLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvaWNvbnMvZnVsbC93aXpiYW4vTmV3U2NlbmFyaW8uZ2lmIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL2ljb25zL2Z1bGwvd2l6YmFuL05ld1NjZW5hcmlvLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lODVmMWRhCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL2ljb25zL2Z1bGwvd2l6YmFuL05ld1NjZW5hcmlvLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvaWNvbnMvZnVsbC93aXpiYW4vTmV3U2VxdWVuY2VyLmdpZiBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9pY29ucy9mdWxsL3dpemJhbi9OZXdTZXF1ZW5jZXIuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVhN2VkOWIKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvaWNvbnMvZnVsbC93aXpiYW4vTmV3U2VxdWVuY2VyLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvaWNvbnMvZnVsbC93aXpiYW4vTmV3U29sdmVyLmdpZiBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9pY29ucy9mdWxsL3dpemJhbi9OZXdTb2x2ZXIuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVhYjUzYTkKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvaWNvbnMvZnVsbC93aXpiYW4vTmV3U29sdmVyLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvaW1hZ2VzL2ludHJvdG9waWNsYWJlbHMvc2FtcGxlLmdpZiBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9pbWFnZXMvaW50cm90b3BpY2xhYmVscy9zYW1wbGUuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVmZjFmZmMKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvaW1hZ2VzL2ludHJvdG9waWNsYWJlbHMvc2FtcGxlLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvaW1hZ2VzL2ludHJvdG9waWNsYWJlbHMvc2FtcGxlX2hvdi5naWYgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvaW1hZ2VzL2ludHJvdG9waWNsYWJlbHMvc2FtcGxlX2hvdi5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjg3NDE2NAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9pbWFnZXMvaW50cm90b3BpY2xhYmVscy9zYW1wbGVfaG92LmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvaW50cm8vY3NzL292ZXJ2aWV3LmNzcyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9pbnRyby9jc3Mvb3ZlcnZpZXcuY3NzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNlOTcwMzAKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvaW50cm8vY3NzL292ZXJ2aWV3LmNzcwpAQCAtMCwwICsxLDE3IEBACithI3N0ZW0tb3ZlcnZpZXcgaW1nIHsKKyAgICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoLi4vLi4vaW1hZ2VzL2ludHJvdG9waWNsYWJlbHMvc2FtcGxlLmdpZik7Cit9CisKK2Ejc3RlbS1vdmVydmlldzpob3ZlciBpbWcgeworICAgIGJhY2tncm91bmQtaW1hZ2U6IHVybCguLi8uLi9pbWFnZXMvaW50cm90b3BpY2xhYmVscy9zYW1wbGVfaG92LmdpZik7Cit9CisKK2Ejc3RlbS1vdmVydmlldy1mYXEgaW1nIHsKKyAgICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoLi4vLi4vaW1hZ2VzL2ludHJvdG9waWNsYWJlbHMvc2FtcGxlLmdpZik7Cit9CisKK2Ejc3RlbS1vdmVydmlldy1mYXE6aG92ZXIgaW1nIHsKKyAgICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoLi4vLi4vaW1hZ2VzL2ludHJvdG9waWNsYWJlbHMvc2FtcGxlX2hvdi5naWYpOworfQorCisKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9pbnRyby9jc3Mvb3ZlcnZpZXcucHJvcGVydGllcyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9pbnRyby9jc3Mvb3ZlcnZpZXcucHJvcGVydGllcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41N2MxZGUzCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL2ludHJvL2Nzcy9vdmVydmlldy5wcm9wZXJ0aWVzCkBAIC0wLDAgKzEsNCBAQAorb3ZlcnZpZXcuc3RlbS1vdmVydmlldy5saW5rLWljb24gPSBpbWFnZXMvaW50cm90b3BpY2xhYmVscy9zYW1wbGUuZ2lmCitvdmVydmlldy5zdGVtLW92ZXJ2aWV3LmhvdmVyLWljb24gPSBpbWFnZXMvaW50cm90b3BpY2xhYmVscy9zYW1wbGVfaG92LmdpZgorb3ZlcnZpZXcuc3RlbS1vdmVydmlldy1mYXEubGluay1pY29uID0gaW1hZ2VzL2ludHJvdG9waWNsYWJlbHMvc2FtcGxlLmdpZgorb3ZlcnZpZXcuc3RlbS1vdmVydmlldy1mYXEuaG92ZXItaWNvbiA9IGltYWdlcy9pbnRyb3RvcGljbGFiZWxzL3NhbXBsZV9ob3YuZ2lmCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvaW50cm8vY3NzL3R1dG9yaWFscy5jc3MgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvaW50cm8vY3NzL3R1dG9yaWFscy5jc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzUwNDlmNAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9pbnRyby9jc3MvdHV0b3JpYWxzLmNzcwpAQCAtMCwwICsxLDggQEAKK2Ejc3RlbS10dXRvcmlhbHMtbWFpbiBpbWcgeworICAgIGJhY2tncm91bmQtaW1hZ2U6IHVybCguLi8uLi9pbWFnZXMvaW50cm90b3BpY2xhYmVscy9zYW1wbGUuZ2lmKTsKK30KKworYSNzdGVtLXR1dG9yaWFscy1tYWluOmhvdmVyIGltZyB7CisgICAgYmFja2dyb3VuZC1pbWFnZTogdXJsKC4uLy4uL2ltYWdlcy9pbnRyb3RvcGljbGFiZWxzL3NhbXBsZV9ob3YuZ2lmKTsKK30KKwpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL2ludHJvL2Nzcy90dXRvcmlhbHMucHJvcGVydGllcyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9pbnRyby9jc3MvdHV0b3JpYWxzLnByb3BlcnRpZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDEwMzY1ZAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9pbnRyby9jc3MvdHV0b3JpYWxzLnByb3BlcnRpZXMKQEAgLTAsMCArMSw2IEBACit0dXRvcmlhbHMuc3RlbS10dXRvcmlhbHMtbWFpbi5saW5rLWljb24gPSBpbWFnZXMvaW50cm90b3BpY2xhYmVscy9zYW1wbGUuZ2lmCit0dXRvcmlhbHMuc3RlbS10dXRvcmlhbHMtbWFpbi5ob3Zlci1pY29uID0gaW1hZ2VzL2ludHJvdG9waWNsYWJlbHMvc2FtcGxlX2hvdi5naWYKKyN0dXRvcmlhbHMuc3RlbS10dXRvcmlhbC15b3V0dWJlLWVuZ2xpc2gubGluay1pY29uID0gaW1hZ2VzL2ludHJvdG9waWNsYWJlbHMvc2FtcGxlLmdpZgorI3R1dG9yaWFscy5zdGVtLXR1dG9yaWFsLXlvdXR1YmUtZW5nbGlzaC5ob3Zlci1pY29uID0gaW1hZ2VzL2ludHJvdG9waWNsYWJlbHMvc2FtcGxlX2hvdi5naWYKKyN0dXRvcmlhbHMuc3RlbS10dXRvcmlhbC15b3V0dWJlLXNwYW5pc2gubGluay1pY29uID0gaW1hZ2VzL2ludHJvdG9waWNsYWJlbHMvc2FtcGxlLmdpZgorI3R1dG9yaWFscy5zdGVtLXR1dG9yaWFsLXlvdXR1YmUtc3BhbmlzaC5ob3Zlci1pY29uID0gaW1hZ2VzL2ludHJvdG9waWNsYWJlbHMvc2FtcGxlX2hvdi5naWYKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9pbnRyby9jc3Mvd2hhdHNuZXcuY3NzIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL2ludHJvL2Nzcy93aGF0c25ldy5jc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODJiODFhZAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9pbnRyby9jc3Mvd2hhdHNuZXcuY3NzCkBAIC0wLDAgKzEsOCBAQAorYSNzdGVtLW5vdGV3b3J0aHkgaW1nIHsKKyAgICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoLi4vLi4vaW1hZ2VzL2ludHJvdG9waWNsYWJlbHMvc2FtcGxlLmdpZik7Cit9CisKK2Ejc3RlbS1ub3Rld29ydGh5OmhvdmVyIGltZyB7CisgICAgYmFja2dyb3VuZC1pbWFnZTogdXJsKC4uLy4uL2ltYWdlcy9pbnRyb3RvcGljbGFiZWxzL3NhbXBsZV9ob3YuZ2lmKTsKK30KKwpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL2ludHJvL2Nzcy93aGF0c25ldy5wcm9wZXJ0aWVzIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL2ludHJvL2Nzcy93aGF0c25ldy5wcm9wZXJ0aWVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIzM2I5MDMKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvaW50cm8vY3NzL3doYXRzbmV3LnByb3BlcnRpZXMKQEAgLTAsMCArMSwyIEBACit0dXRvcmlhbHMuc3RlbS1ub3Rld29ydGh5LmxpbmstaWNvbiA9IGltYWdlcy9pbnRyb3RvcGljbGFiZWxzL3NhbXBsZS5naWYKK3R1dG9yaWFscy5zdGVtLW5vdGV3b3J0aHkuaG92ZXItaWNvbiA9IGltYWdlcy9pbnRyb3RvcGljbGFiZWxzL3NhbXBsZV9ob3YuZ2lmCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvaW50cm8vb3ZlcnZpZXdFeHRlbnNpb25Db250ZW50LnhtbCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9pbnRyby9vdmVydmlld0V4dGVuc2lvbkNvbnRlbnQueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQxNzdiNWMKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvaW50cm8vb3ZlcnZpZXdFeHRlbnNpb25Db250ZW50LnhtbApAQCAtMCwwICsxLDIxIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCIgPz4KKworPGludHJvQ29udGVudD4KKwk8ZXh0ZW5zaW9uQ29udGVudCBpZD0ib3JnLmVjbGlwc2Uuc3RlbS5vdmVydmlldyIgbmFtZT0iU1RFTSIKKwkJc3R5bGU9ImNzcy9vdmVydmlldy5jc3MiIGFsdC1zdHlsZT0iY3NzL292ZXJ2aWV3LnByb3BlcnRpZXMiIHBhdGg9Im92ZXJ2aWV3L0AiPgorCQk8Z3JvdXAgaWQ9ImNvbnRlbnQtZ3JvdXAiIHN0eWxlLWlkPSJjb250ZW50LWdyb3VwIj4KKwkJCTxsaW5rICAKKwkJCSAgICB1cmw9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvc3RlbSIgCisJCQkgICAgbGFiZWw9Ik1haW4gU1RFTSBQcm9qZWN0IHdlYiBwYWdlIgorCQkJICAgIGlkPSJzdGVtLW92ZXJ2aWV3IgorCQkJCXN0eWxlLWlkPSJjb250ZW50LWxpbmsiPgorCQkJPC9saW5rPgorCQkJPGxpbmsgIAorICAgICAgICAgICAgICAgIHVybD0iaHR0cDovL3dpa2kuZWNsaXBzZS5vcmcvU1RFTV9GQVEiIAorICAgICAgICAgICAgICAgIGxhYmVsPSJGQVEiCisgICAgICAgICAgICAgICAgaWQ9InN0ZW0tb3ZlcnZpZXctZmFxIgorICAgICAgICAgICAgICAgIHN0eWxlLWlkPSJjb250ZW50LWxpbmsiPgorICAgICAgICAgICAgPC9saW5rPgorCQk8L2dyb3VwPgorCTwvZXh0ZW5zaW9uQ29udGVudD4KKzwvaW50cm9Db250ZW50PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9pbnRyby90dXRvcmlhbHNFeHRlbnNpb25Db250ZW50LnhtbCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9pbnRyby90dXRvcmlhbHNFeHRlbnNpb25Db250ZW50LnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MmI2OTY3Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL2ludHJvL3R1dG9yaWFsc0V4dGVuc2lvbkNvbnRlbnQueG1sCkBAIC0wLDAgKzEsMjMgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04IiA/PgorCisgPGludHJvQ29udGVudD4KKyAgICA8ZXh0ZW5zaW9uQ29udGVudCBpZD0ib3JnLmVjbGlwc2Uuc3RlbS50dXRvcmlhbHMiIG5hbWU9IlNURU0gVHV0b3JpYWxzIgorICAgICAgICBzdHlsZT0iY3NzL3R1dG9yaWFscy5jc3MiIGFsdC1zdHlsZT0iY3NzL3R1dG9yaWFscy5wcm9wZXJ0aWVzIiBwYXRoPSJ0dXRvcmlhbHMvQCI+CisgICAgICAgIDxncm91cCBsYWJlbD0iU1RFTSBUdXRvcmlhbHMiIGlkPSJjb250ZW50LWdyb3VwIiBzdHlsZS1pZD0iY29udGVudC1ncm91cCI+CisgICAgICAgICAgICA8bGluaworICAgICAgICAgICAgICAgIHVybD0iaHR0cDovL3dpa2kuZWNsaXBzZS5vcmcvVHV0b3JpYWxzX2Zvcl9EZXZlbG9wZXJzIgorICAgICAgICAgICAgICAgIGxhYmVsPSJTVEVNIFR1dG9yaWFsIHdlYiBwYWdlIiAKKyAgICAgICAgICAgICAgICBpZD0ic3RlbS10dXRvcmlhbHMtbWFpbiIgc3R5bGUtaWQ9ImNvbnRlbnQtbGluayI+CisgICAgICAgICAgICAgICAgPHRleHQ+VGhlIG1haW4gU1RFTSBUdXRvcmlhbCBXZWIgUGFnZS48L3RleHQ+CisgICAgICAgICAgICA8L2xpbms+CisgICAgICAgICAgICA8IS0tIAorICAgICAgICAgICAgPGxpbmsKKyAgICAgICAgICAgICAgICB1cmw9Imh0dHA6Ly93d3cueW91dHViZS5jb20vd2F0Y2g/dj1MZmlpYlFYNElGRSIKKyAgICAgICAgICAgICAgICBsYWJlbD0iU1RFTSBWaWRlbyBFbmdsaXNoIiAKKyAgICAgICAgICAgICAgICBpZD0ic3RlbS10dXRvcmlhbC15b3V0dWJlLWVuZ2xpc2giIHN0eWxlLWlkPSJjb250ZW50LWxpbmsiPgorICAgICAgICAgICAgICAgIDx0ZXh0PlNURU0gVmlkZW8gVHV0b3JpYWwgKEVuZ2xpc2gpPC90ZXh0PgorICAgICAgICAgICAgPC9saW5rPiAKKyAgICAgICAgICAgIC0tPgorICAgICAgICA8L2dyb3VwPiAgICAKKyAgICA8L2V4dGVuc2lvbkNvbnRlbnQ+Cis8L2ludHJvQ29udGVudD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvaW50cm8vd2hhdHNuZXdFeHRlbnNpb25Db250ZW50LnhtbCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9pbnRyby93aGF0c25ld0V4dGVuc2lvbkNvbnRlbnQueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc3ZDA2ZDgKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvaW50cm8vd2hhdHNuZXdFeHRlbnNpb25Db250ZW50LnhtbApAQCAtMCwwICsxLDE0IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCIgPz4KKyAKKyA8aW50cm9Db250ZW50PgorICAgIDxleHRlbnNpb25Db250ZW50IGlkPSJvcmcuZWNsaXBzZS5zdGVtLm5vdGV3b3J0aHkiIG5hbWU9IlNURU0iCisgICAgICAgIHN0eWxlPSJjc3Mvd2hhdHNuZXcuY3NzIiBhbHQtc3R5bGU9ImNzcy93aGF0c25ldy5wcm9wZXJ0aWVzIiBwYXRoPSJ3aGF0c25ldy9AIj4KKyAgICAgICAgPGdyb3VwIGlkPSJjb250ZW50LWdyb3VwIiBzdHlsZS1pZD0iY29udGVudC1ncm91cCI+CisgICAgICAgICAgICA8bGluayBsYWJlbD0iU1RFTSIKKyAgICAgICAgICAgICAgICB1cmw9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvc3RlbSIKKyAgICAgICAgICAgICAgICBpZD0ic3RlbS1ub3Rld29ydGh5IiBzdHlsZS1pZD0iY29udGVudC1saW5rIj4KKyAgICAgICAgICAgICAgICA8dGV4dD5TVEVNIFByb2plY3QgcGFnZTwvdGV4dD4gICAgCisgICAgICAgICAgICA8L2xpbms+ICAgICAgICAKKyAgICAgICAgPC9ncm91cD4gICAgICAgICAgIAorICAgIDwvZXh0ZW5zaW9uQ29udGVudD4KKyA8L2ludHJvQ29udGVudD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvbG9nby5wbmcgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvbG9nby5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2IxMWM1OQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9sb2dvLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvbm90aWNlLmh0bWwgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvbm90aWNlLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzZhZjk2NgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9ub3RpY2UuaHRtbApAQCAtMCwwICsxLDc5IEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wLy9FTiI+Cis8aHRtbD4KKzxoZWFkPgorPG1ldGEgaHR0cC1lcXVpdj1Db250ZW50LVR5cGUgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PWlzby04ODU5LTEiPgorPHRpdGxlPkVjbGlwc2Uub3JnIFNvZnR3YXJlIFVzZXIgQWdyZWVtZW50PC90aXRsZT4KKzwvaGVhZD4KKworPGJvZHkgbGFuZz0iRU4tVVMiIGxpbms9Ymx1ZSB2bGluaz1wdXJwbGU+Cis8aDI+RWNsaXBzZSBGb3VuZGF0aW9uIFNvZnR3YXJlIFVzZXIgQWdyZWVtZW50PC9oMj4KKzxwPk1hcmNoIDE3LCAyMDA1PC9wPgorCis8aDM+VXNhZ2UgT2YgQ29udGVudDwvaDM+CisKKzxwPlRIRSBFQ0xJUFNFIEZPVU5EQVRJT04gTUFLRVMgQVZBSUxBQkxFIFNPRlRXQVJFLCBET0NVTUVOVEFUSU9OLCBJTkZPUk1BVElPTiBBTkQvT1IgT1RIRVIgTUFURVJJQUxTIEZPUiBPUEVOIFNPVVJDRSBQUk9KRUNUUworICAgKENPTExFQ1RJVkVMWSAmcXVvdDtDT05URU5UJnF1b3Q7KS4gIFVTRSBPRiBUSEUgQ09OVEVOVCBJUyBHT1ZFUk5FRCBCWSBUSEUgVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgVEhJUyBBR1JFRU1FTlQgQU5EL09SIFRIRSBURVJNUyBBTkQKKyAgIENPTkRJVElPTlMgT0YgTElDRU5TRSBBR1JFRU1FTlRTIE9SIE5PVElDRVMgSU5ESUNBVEVEIE9SIFJFRkVSRU5DRUQgQkVMT1cuICBCWSBVU0lORyBUSEUgQ09OVEVOVCwgWU9VIEFHUkVFIFRIQVQgWU9VUiBVU0UKKyAgIE9GIFRIRSBDT05URU5UIElTIEdPVkVSTkVEIEJZIFRISVMgQUdSRUVNRU5UIEFORC9PUiBUSEUgVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgQU5ZIEFQUExJQ0FCTEUgTElDRU5TRSBBR1JFRU1FTlRTIE9SCisgICBOT1RJQ0VTIElORElDQVRFRCBPUiBSRUZFUkVOQ0VEIEJFTE9XLiAgSUYgWU9VIERPIE5PVCBBR1JFRSBUTyBUSEUgVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgVEhJUyBBR1JFRU1FTlQgQU5EIFRIRSBURVJNUyBBTkQKKyAgIENPTkRJVElPTlMgT0YgQU5ZIEFQUExJQ0FCTEUgTElDRU5TRSBBR1JFRU1FTlRTIE9SIE5PVElDRVMgSU5ESUNBVEVEIE9SIFJFRkVSRU5DRUQgQkVMT1csIFRIRU4gWU9VIE1BWSBOT1QgVVNFIFRIRSBDT05URU5ULjwvcD4KKyAgIAorPGgzPkFwcGxpY2FibGUgTGljZW5zZXM8L2gzPiAgIAorICAgCis8cD5Vbmxlc3Mgb3RoZXJ3aXNlIGluZGljYXRlZCwgYWxsIENvbnRlbnQgbWFkZSBhdmFpbGFibGUgYnkgdGhlIEVjbGlwc2UgRm91bmRhdGlvbiBpcyBwcm92aWRlZCB0byB5b3UgdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4wCisgICAoJnF1b3Q7RVBMJnF1b3Q7KS4gIEEgY29weSBvZiB0aGUgRVBMIGlzIHByb3ZpZGVkIHdpdGggdGhpcyBDb250ZW50IGFuZCBpcyBhbHNvIGF2YWlsYWJsZSBhdCA8YSBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbCI+aHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWw8L2E+LgorICAgRm9yIHB1cnBvc2VzIG9mIHRoZSBFUEwsICZxdW90O1Byb2dyYW0mcXVvdDsgd2lsbCBtZWFuIHRoZSBDb250ZW50LjwvcD4KKworPHA+Q29udGVudCBpbmNsdWRlcywgYnV0IGlzIG5vdCBsaW1pdGVkIHRvLCBzb3VyY2UgY29kZSwgb2JqZWN0IGNvZGUsIGRvY3VtZW50YXRpb24gYW5kIG90aGVyIGZpbGVzIG1haW50YWluZWQgaW4gdGhlIEVjbGlwc2Uub3JnIENWUyByZXBvc2l0b3J5ICgmcXVvdDtSZXBvc2l0b3J5JnF1b3Q7KSBpbiBDVlMKKyAgIG1vZHVsZXMgKCZxdW90O01vZHVsZXMmcXVvdDspIGFuZCBtYWRlIGF2YWlsYWJsZSBhcyBkb3dubG9hZGFibGUgYXJjaGl2ZXMgKCZxdW90O0Rvd25sb2FkcyZxdW90OykuPC9wPgorICAgCis8dWw+CisJPGxpPkNvbnRlbnQgbWF5IGJlIHN0cnVjdHVyZWQgYW5kIHBhY2thZ2VkIGludG8gbW9kdWxlcyB0byBmYWNpbGl0YXRlIGRlbGl2ZXJpbmcsIGV4dGVuZGluZywgYW5kIHVwZ3JhZGluZyB0aGUgQ29udGVudC4gIFR5cGljYWwgbW9kdWxlcyBtYXkgaW5jbHVkZSBwbHVnLWlucyAoJnF1b3Q7UGx1Zy1pbnMmcXVvdDspLCBwbHVnLWluIGZyYWdtZW50cyAoJnF1b3Q7RnJhZ21lbnRzJnF1b3Q7KSwgYW5kIGZlYXR1cmVzICgmcXVvdDtGZWF0dXJlcyZxdW90OykuPC9saT4KKwk8bGk+RWFjaCBQbHVnLWluIG9yIEZyYWdtZW50IG1heSBiZSBwYWNrYWdlZCBhcyBhIHN1Yi1kaXJlY3Rvcnkgb3IgSkFSIChKYXZhJnRyYWRlOyBBUmNoaXZlKSBpbiBhIGRpcmVjdG9yeSBuYW1lZCAmcXVvdDtwbHVnaW5zJnF1b3Q7LjwvbGk+CisJPGxpPkEgRmVhdHVyZSBpcyBhIGJ1bmRsZSBvZiBvbmUgb3IgbW9yZSBQbHVnLWlucyBhbmQvb3IgRnJhZ21lbnRzIGFuZCBhc3NvY2lhdGVkIG1hdGVyaWFsLiAgRWFjaCBGZWF0dXJlIG1heSBiZSBwYWNrYWdlZCBhcyBhIHN1Yi1kaXJlY3RvcnkgaW4gYSBkaXJlY3RvcnkgbmFtZWQgJnF1b3Q7ZmVhdHVyZXMmcXVvdDsuICBXaXRoaW4gYSBGZWF0dXJlLCBmaWxlcyBuYW1lZCAmcXVvdDtmZWF0dXJlLnhtbCZxdW90OyBtYXkgY29udGFpbiBhIGxpc3Qgb2YgdGhlIG5hbWVzIGFuZCB2ZXJzaW9uIG51bWJlcnMgb2YgdGhlIFBsdWctaW5zCisgICAgICBhbmQvb3IgRnJhZ21lbnRzIGFzc29jaWF0ZWQgd2l0aCB0aGF0IEZlYXR1cmUuPC9saT4KKwk8bGk+RmVhdHVyZXMgbWF5IGFsc28gaW5jbHVkZSBvdGhlciBGZWF0dXJlcyAoJnF1b3Q7SW5jbHVkZWQgRmVhdHVyZXMmcXVvdDspLiBXaXRoaW4gYSBGZWF0dXJlLCBmaWxlcyBuYW1lZCAmcXVvdDtmZWF0dXJlLnhtbCZxdW90OyBtYXkgY29udGFpbiBhIGxpc3Qgb2YgdGhlIG5hbWVzIGFuZCB2ZXJzaW9uIG51bWJlcnMgb2YgSW5jbHVkZWQgRmVhdHVyZXMuPC9saT4KKzwvdWw+ICAgCisgCis8cD5UaGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgZ292ZXJuaW5nIFBsdWctaW5zIGFuZCBGcmFnbWVudHMgc2hvdWxkIGJlIGNvbnRhaW5lZCBpbiBmaWxlcyBuYW1lZCAmcXVvdDthYm91dC5odG1sJnF1b3Q7ICgmcXVvdDtBYm91dHMmcXVvdDspLiBUaGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgZ292ZXJuaW5nIEZlYXR1cmVzIGFuZAorSW5jbHVkZWQgRmVhdHVyZXMgc2hvdWxkIGJlIGNvbnRhaW5lZCBpbiBmaWxlcyBuYW1lZCAmcXVvdDtsaWNlbnNlLmh0bWwmcXVvdDsgKCZxdW90O0ZlYXR1cmUgTGljZW5zZXMmcXVvdDspLiAgQWJvdXRzIGFuZCBGZWF0dXJlIExpY2Vuc2VzIG1heSBiZSBsb2NhdGVkIGluIGFueSBkaXJlY3Rvcnkgb2YgYSBEb3dubG9hZCBvciBNb2R1bGUKK2luY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvIHRoZSBmb2xsb3dpbmcgbG9jYXRpb25zOjwvcD4KKworPHVsPgorCTxsaT5UaGUgdG9wLWxldmVsIChyb290KSBkaXJlY3Rvcnk8L2xpPgorCTxsaT5QbHVnLWluIGFuZCBGcmFnbWVudCBkaXJlY3RvcmllczwvbGk+CisJPGxpPkluc2lkZSBQbHVnLWlucyBhbmQgRnJhZ21lbnRzIHBhY2thZ2VkIGFzIEpBUnM8L2xpPgorCTxsaT5TdWItZGlyZWN0b3JpZXMgb2YgdGhlIGRpcmVjdG9yeSBuYW1lZCAmcXVvdDtzcmMmcXVvdDsgb2YgY2VydGFpbiBQbHVnLWluczwvbGk+CisJPGxpPkZlYXR1cmUgZGlyZWN0b3JpZXM8L2xpPgorPC91bD4KKwkJCis8cD5Ob3RlOiBpZiBhIEZlYXR1cmUgbWFkZSBhdmFpbGFibGUgYnkgdGhlIEVjbGlwc2UgRm91bmRhdGlvbiBpcyBpbnN0YWxsZWQgdXNpbmcgdGhlIEVjbGlwc2UgVXBkYXRlIE1hbmFnZXIsIHlvdSBtdXN0IGFncmVlIHRvIGEgbGljZW5zZSAoJnF1b3Q7RmVhdHVyZSBVcGRhdGUgTGljZW5zZSZxdW90OykgZHVyaW5nIHRoZQoraW5zdGFsbGF0aW9uIHByb2Nlc3MuICBJZiB0aGUgRmVhdHVyZSBjb250YWlucyBJbmNsdWRlZCBGZWF0dXJlcywgdGhlIEZlYXR1cmUgVXBkYXRlIExpY2Vuc2Ugc2hvdWxkIGVpdGhlciBwcm92aWRlIHlvdSB3aXRoIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBnb3Zlcm5pbmcgdGhlIEluY2x1ZGVkIEZlYXR1cmVzIG9yCitpbmZvcm0geW91IHdoZXJlIHlvdSBjYW4gbG9jYXRlIHRoZW0uICBGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlcyBtYXkgYmUgZm91bmQgaW4gdGhlICZxdW90O2xpY2Vuc2UmcXVvdDsgcHJvcGVydHkgb2YgZmlsZXMgbmFtZWQgJnF1b3Q7ZmVhdHVyZS5wcm9wZXJ0aWVzJnF1b3Q7IGZvdW5kIHdpdGhpbiBhIEZlYXR1cmUuCitTdWNoIEFib3V0cywgRmVhdHVyZSBMaWNlbnNlcywgYW5kIEZlYXR1cmUgVXBkYXRlIExpY2Vuc2VzIGNvbnRhaW4gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIChvciByZWZlcmVuY2VzIHRvIHN1Y2ggdGVybXMgYW5kIGNvbmRpdGlvbnMpIHRoYXQgZ292ZXJuIHlvdXIgdXNlIG9mIHRoZSBhc3NvY2lhdGVkIENvbnRlbnQgaW4KK3RoYXQgZGlyZWN0b3J5LjwvcD4KKworPHA+VEhFIEFCT1VUUywgRkVBVFVSRSBMSUNFTlNFUywgQU5EIEZFQVRVUkUgVVBEQVRFIExJQ0VOU0VTIE1BWSBSRUZFUiBUTyBUSEUgRVBMIE9SIE9USEVSIExJQ0VOU0UgQUdSRUVNRU5UUywgTk9USUNFUyBPUiBURVJNUyBBTkQgQ09ORElUSU9OUy4gIFNPTUUgT0YgVEhFU0UKK09USEVSIExJQ0VOU0UgQUdSRUVNRU5UUyBNQVkgSU5DTFVERSAoQlVUIEFSRSBOT1QgTElNSVRFRCBUTyk6PC9wPgorCis8dWw+CisJPGxpPkNvbW1vbiBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMCAoYXZhaWxhYmxlIGF0IDxhIGhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvY3BsLXYxMC5odG1sIj5odHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2NwbC12MTAuaHRtbDwvYT4pPC9saT4KKwk8bGk+QXBhY2hlIFNvZnR3YXJlIExpY2Vuc2UgMS4xIChhdmFpbGFibGUgYXQgPGEgaHJlZj0iaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UiPmh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFPC9hPik8L2xpPgorCTxsaT5BcGFjaGUgU29mdHdhcmUgTGljZW5zZSAyLjAgKGF2YWlsYWJsZSBhdCA8YSBocmVmPSJodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAiPmh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMDwvYT4pPC9saT4KKwk8bGk+SUJNIFB1YmxpYyBMaWNlbnNlIDEuMCAoYXZhaWxhYmxlIGF0IDxhIGhyZWY9Imh0dHA6Ly9vc3Muc29mdHdhcmUuaWJtLmNvbS9kZXZlbG9wZXJ3b3Jrcy9vcGVuc291cmNlL2xpY2Vuc2UxMC5odG1sIj5odHRwOi8vb3NzLnNvZnR3YXJlLmlibS5jb20vZGV2ZWxvcGVyd29ya3Mvb3BlbnNvdXJjZS9saWNlbnNlMTAuaHRtbDwvYT4pPC9saT4JCisJPGxpPk1ldHJvIExpbmsgUHVibGljIExpY2Vuc2UgMS4wMCAoYXZhaWxhYmxlIGF0IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbmdyb3VwLm9yZy9vcGVubW90aWYvc3VwcG9ydGVycy9tZXRyb2xpbmsvbGljZW5zZS5odG1sIj5odHRwOi8vd3d3Lm9wZW5ncm91cC5vcmcvb3Blbm1vdGlmL3N1cHBvcnRlcnMvbWV0cm9saW5rL2xpY2Vuc2UuaHRtbDwvYT4pPC9saT4KKwk8bGk+TW96aWxsYSBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMSAoYXZhaWxhYmxlIGF0IDxhIGhyZWY9Imh0dHA6Ly93d3cubW96aWxsYS5vcmcvTVBML01QTC0xLjEuaHRtbCI+aHR0cDovL3d3dy5tb3ppbGxhLm9yZy9NUEwvTVBMLTEuMS5odG1sPC9hPik8L2xpPgorPC91bD4KKworPHA+SVQgSVMgWU9VUiBPQkxJR0FUSU9OIFRPIFJFQUQgQU5EIEFDQ0VQVCBBTEwgU1VDSCBURVJNUyBBTkQgQ09ORElUSU9OUyBQUklPUiBUTyBVU0UgT0YgVEhFIENPTlRFTlQuICBJZiBubyBBYm91dCwgRmVhdHVyZSBMaWNlbnNlLCBvciBGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlIGlzIHByb3ZpZGVkLCBwbGVhc2UKK2NvbnRhY3QgdGhlIEVjbGlwc2UgRm91bmRhdGlvbiB0byBkZXRlcm1pbmUgd2hhdCB0ZXJtcyBhbmQgY29uZGl0aW9ucyBnb3Zlcm4gdGhhdCBwYXJ0aWN1bGFyIENvbnRlbnQuPC9wPgorCis8aDM+Q3J5cHRvZ3JhcGh5PC9oMz4KKworPHA+Q29udGVudCBtYXkgY29udGFpbiBlbmNyeXB0aW9uIHNvZnR3YXJlLiBUaGUgY291bnRyeSBpbiB3aGljaCB5b3UgYXJlIGN1cnJlbnRseSBtYXkgaGF2ZSByZXN0cmljdGlvbnMgb24gdGhlIGltcG9ydCwgcG9zc2Vzc2lvbiwgYW5kIHVzZSwgYW5kL29yIHJlLWV4cG9ydCB0bworICAgYW5vdGhlciBjb3VudHJ5LCBvZiBlbmNyeXB0aW9uIHNvZnR3YXJlLiBCRUZPUkUgdXNpbmcgYW55IGVuY3J5cHRpb24gc29mdHdhcmUsIHBsZWFzZSBjaGVjayB0aGUgY291bnRyeSdzIGxhd3MsIHJlZ3VsYXRpb25zIGFuZCBwb2xpY2llcyBjb25jZXJuaW5nIHRoZSBpbXBvcnQsCisgICBwb3NzZXNzaW9uLCBvciB1c2UsIGFuZCByZS1leHBvcnQgb2YgZW5jcnlwdGlvbiBzb2Z0d2FyZSwgdG8gc2VlIGlmIHRoaXMgaXMgcGVybWl0dGVkLjwvcD4KKyAgIAorPHNtYWxsPkphdmEgYW5kIGFsbCBKYXZhLWJhc2VkIHRyYWRlbWFya3MgYXJlIHRyYWRlbWFya3Mgb2YgU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiBpbiB0aGUgVW5pdGVkIFN0YXRlcywgb3RoZXIgY291bnRyaWVzLCBvciBib3RoLjwvc21hbGw+ICAgCis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvcDIuaW5mIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3AyLmluZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNjU1YmU3Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3AyLmluZgpAQCAtMCwwICsxLDE2MiBAQAoraW5zdHJ1Y3Rpb25zLmNvbmZpZ3VyZT1cCithZGRSZXBvc2l0b3J5KHR5cGU6MCxsb2NhdGlvbjpodHRwJHsjNTh9Ly9kb3dubG9hZC5lY2xpcHNlLm9yZy9zdGVtL3VwZGF0ZS1zaXRlLyxuYW1lOlNURU0gQWRkLW9ucyk7XAorYWRkUmVwb3NpdG9yeSh0eXBlOjEsbG9jYXRpb246aHR0cCR7IzU4fS8vZG93bmxvYWQuZWNsaXBzZS5vcmcvc3RlbS91cGRhdGUtc2l0ZS8sbmFtZTpTVEVNIEFkZC1vbnMpO1wKK21rZGlyKHBhdGg6JHtpbnN0YWxsRm9sZGVyfS9kcm9waW5zKTtcCitvcmcuZWNsaXBzZS5lcXVpbm94LnAyLnRvdWNocG9pbnQubmF0aXZlcy5yZW1vdmUocGF0aDoke2luc3RhbGxGb2xkZXJ9L0VjbGlwc2UuYXBwLyk7XAorb3JnLmVjbGlwc2UuZXF1aW5veC5wMi50b3VjaHBvaW50Lm5hdGl2ZXMucmVtb3ZlKHBhdGg6JHtpbnN0YWxsRm9sZGVyfS9sYXVuY2hlcik7XAorb3JnLmVjbGlwc2UuZXF1aW5veC5wMi50b3VjaHBvaW50Lm5hdGl2ZXMucmVtb3ZlKHBhdGg6JHtpbnN0YWxsRm9sZGVyfS9sYXVuY2hlci5leGUpO1wKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgRGlzYWJsZSBFY2xpcHNlIEZlYXR1cmUgUGx1Z2lucyAjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCityZXF1aXJlcy4wLm5hbWVzcGFjZT1vcmcuZWNsaXBzZS5lcXVpbm94LnAyLml1CityZXF1aXJlcy4wLm5hbWU9Y29uZmlndXJlLm9yZy5lY2xpcHNlLnNlYXJjaAorcmVxdWlyZXMuMC5yYW5nZT1bJHZlcnNpb24kLCR2ZXJzaW9uJF0KK3JlcXVpcmVzLjAuZ3JlZWR5PXRydWUKKwordW5pdHMuMC5pZD1jb25maWd1cmUub3JnLmVjbGlwc2Uuc2VhcmNoCit1bml0cy4wLnZlcnNpb249JHZlcnNpb24kCit1bml0cy4wLnByb3ZpZGVzLjEubmFtZXNwYWNlPW9yZy5lY2xpcHNlLmVxdWlub3gucDIuaXUKK3VuaXRzLjAucHJvdmlkZXMuMS5uYW1lPWNvbmZpZ3VyZS5vcmcuZWNsaXBzZS5zZWFyY2gKK3VuaXRzLjAucHJvdmlkZXMuMS52ZXJzaW9uPSR2ZXJzaW9uJAordW5pdHMuMC5pbnN0cnVjdGlvbnMuaW5zdGFsbD0KK3VuaXRzLjAuaG9zdFJlcXVpcmVtZW50cy4xLm5hbWVzcGFjZT1vc2dpLmJ1bmRsZQordW5pdHMuMC5ob3N0UmVxdWlyZW1lbnRzLjEubmFtZT1vcmcuZWNsaXBzZS5zZWFyY2gKK3VuaXRzLjAuaG9zdFJlcXVpcmVtZW50cy4xLnJhbmdlPVswLjAuMCwxMC4wLjBdCit1bml0cy4wLmhvc3RSZXF1aXJlbWVudHMuMS5ncmVlZHk9ZmFsc2UKK3VuaXRzLjAuaG9zdFJlcXVpcmVtZW50cy4yLm5hbWVzcGFjZT1vcmcuZWNsaXBzZS5lcXVpbm94LnAyLmVjbGlwc2UudHlwZQordW5pdHMuMC5ob3N0UmVxdWlyZW1lbnRzLjIubmFtZT1idW5kbGUKK3VuaXRzLjAuaG9zdFJlcXVpcmVtZW50cy4yLnJhbmdlPVswLjAuMCwxMC4wLjApCit1bml0cy4wLmhvc3RSZXF1aXJlbWVudHMuMi5ncmVlZHk9ZmFsc2UKK3VuaXRzLjAucmVxdWlyZXMuMS5uYW1lc3BhY2U9b3NnaS5idW5kbGUKK3VuaXRzLjAucmVxdWlyZXMuMS5uYW1lPW9yZy5lY2xpcHNlLnNlYXJjaAordW5pdHMuMC5yZXF1aXJlcy4xLnJhbmdlPVswLjAuMCwxMC4wLjBdCit1bml0cy4wLnJlcXVpcmVzLjEuZ3JlZWR5PWZhbHNlCisKKyMgZGlzYWJsZSBvcmcuZWNsaXBzZS51aS5leHRlcm5hbHRvb2xzCityZXF1aXJlcy4xLm5hbWVzcGFjZT1vcmcuZWNsaXBzZS5lcXVpbm94LnAyLml1CityZXF1aXJlcy4xLm5hbWU9Y29uZmlndXJlLm9yZy5lY2xpcHNlLnVpLmV4dGVybmFsdG9vbHMKK3JlcXVpcmVzLjEucmFuZ2U9WyR2ZXJzaW9uJCwkdmVyc2lvbiRdCityZXF1aXJlcy4xLmdyZWVkeT10cnVlCisKK3VuaXRzLjEuaWQ9Y29uZmlndXJlLm9yZy5lY2xpcHNlLnVpLmV4dGVybmFsdG9vbHMKK3VuaXRzLjEudmVyc2lvbj0kdmVyc2lvbiQKK3VuaXRzLjEucHJvdmlkZXMuMS5uYW1lc3BhY2U9b3JnLmVjbGlwc2UuZXF1aW5veC5wMi5pdQordW5pdHMuMS5wcm92aWRlcy4xLm5hbWU9Y29uZmlndXJlLm9yZy5lY2xpcHNlLnVpLmV4dGVybmFsdG9vbHMKK3VuaXRzLjEucHJvdmlkZXMuMS52ZXJzaW9uPSR2ZXJzaW9uJAordW5pdHMuMS5pbnN0cnVjdGlvbnMuaW5zdGFsbD0KK3VuaXRzLjEuaG9zdFJlcXVpcmVtZW50cy4xLm5hbWVzcGFjZT1vc2dpLmJ1bmRsZQordW5pdHMuMS5ob3N0UmVxdWlyZW1lbnRzLjEubmFtZT1vcmcuZWNsaXBzZS51aS5leHRlcm5hbHRvb2xzCit1bml0cy4xLmhvc3RSZXF1aXJlbWVudHMuMS5yYW5nZT1bMC4wLjAsMTAuMC4wXQordW5pdHMuMS5ob3N0UmVxdWlyZW1lbnRzLjEuZ3JlZWR5PWZhbHNlCit1bml0cy4xLmhvc3RSZXF1aXJlbWVudHMuMi5uYW1lc3BhY2U9b3JnLmVjbGlwc2UuZXF1aW5veC5wMi5lY2xpcHNlLnR5cGUKK3VuaXRzLjEuaG9zdFJlcXVpcmVtZW50cy4yLm5hbWU9YnVuZGxlCit1bml0cy4xLmhvc3RSZXF1aXJlbWVudHMuMi5yYW5nZT1bMC4wLjAsMTAuMC4wKQordW5pdHMuMS5ob3N0UmVxdWlyZW1lbnRzLjIuZ3JlZWR5PWZhbHNlCit1bml0cy4xLnJlcXVpcmVzLjEubmFtZXNwYWNlPW9zZ2kuYnVuZGxlCit1bml0cy4xLnJlcXVpcmVzLjEubmFtZT1vcmcuZWNsaXBzZS51aS5leHRlcm5hbHRvb2xzCit1bml0cy4xLnJlcXVpcmVzLjEucmFuZ2U9WzAuMC4wLDEwLjAuMF0KK3VuaXRzLjEucmVxdWlyZXMuMS5ncmVlZHk9ZmFsc2UKKworIyBkaXNhYmxlIG9yZy5lY2xpcHNlLmNvcmUuZXh0ZXJuYWx0b29scworcmVxdWlyZXMuMi5uYW1lc3BhY2U9b3JnLmVjbGlwc2UuZXF1aW5veC5wMi5pdQorcmVxdWlyZXMuMi5uYW1lPWNvbmZpZ3VyZS5vcmcuZWNsaXBzZS5jb3JlLmV4dGVybmFsdG9vbHMKK3JlcXVpcmVzLjIucmFuZ2U9WyR2ZXJzaW9uJCwkdmVyc2lvbiRdCityZXF1aXJlcy4yLmdyZWVkeT10cnVlCisKK3VuaXRzLjIuaWQ9Y29uZmlndXJlLm9yZy5lY2xpcHNlLmNvcmUuZXh0ZXJuYWx0b29scwordW5pdHMuMi52ZXJzaW9uPSR2ZXJzaW9uJAordW5pdHMuMi5wcm92aWRlcy4xLm5hbWVzcGFjZT1vcmcuZWNsaXBzZS5lcXVpbm94LnAyLml1Cit1bml0cy4yLnByb3ZpZGVzLjEubmFtZT1jb25maWd1cmUub3JnLmVjbGlwc2UuY29yZS5leHRlcm5hbHRvb2xzCit1bml0cy4yLnByb3ZpZGVzLjEudmVyc2lvbj0kdmVyc2lvbiQKK3VuaXRzLjIuaW5zdHJ1Y3Rpb25zLmluc3RhbGw9Cit1bml0cy4yLmhvc3RSZXF1aXJlbWVudHMuMS5uYW1lc3BhY2U9b3NnaS5idW5kbGUKK3VuaXRzLjIuaG9zdFJlcXVpcmVtZW50cy4xLm5hbWU9b3JnLmVjbGlwc2UuY29yZS5leHRlcm5hbHRvb2xzCit1bml0cy4yLmhvc3RSZXF1aXJlbWVudHMuMS5yYW5nZT1bMC4wLjAsMTAuMC4wXQordW5pdHMuMi5ob3N0UmVxdWlyZW1lbnRzLjEuZ3JlZWR5PWZhbHNlCit1bml0cy4yLmhvc3RSZXF1aXJlbWVudHMuMi5uYW1lc3BhY2U9b3JnLmVjbGlwc2UuZXF1aW5veC5wMi5lY2xpcHNlLnR5cGUKK3VuaXRzLjIuaG9zdFJlcXVpcmVtZW50cy4yLm5hbWU9YnVuZGxlCit1bml0cy4yLmhvc3RSZXF1aXJlbWVudHMuMi5yYW5nZT1bMC4wLjAsMTAuMC4wKQordW5pdHMuMi5ob3N0UmVxdWlyZW1lbnRzLjIuZ3JlZWR5PWZhbHNlCit1bml0cy4yLnJlcXVpcmVzLjEubmFtZXNwYWNlPW9zZ2kuYnVuZGxlCit1bml0cy4yLnJlcXVpcmVzLjEubmFtZT1vcmcuZWNsaXBzZS5jb3JlLmV4dGVybmFsdG9vbHMKK3VuaXRzLjIucmVxdWlyZXMuMS5yYW5nZT1bMC4wLjAsMTAuMC4wXQordW5pdHMuMi5yZXF1aXJlcy4xLmdyZWVkeT1mYWxzZQorCisjIGRpc2FibGUgb3JnLmVjbGlwc2UuZGVidWcuY29yZQorcmVxdWlyZXMuMy5uYW1lc3BhY2U9b3JnLmVjbGlwc2UuZXF1aW5veC5wMi5pdQorcmVxdWlyZXMuMy5uYW1lPWNvbmZpZ3VyZS5vcmcuZWNsaXBzZS5kZWJ1Zy5jb3JlCityZXF1aXJlcy4zLnJhbmdlPVskdmVyc2lvbiQsJHZlcnNpb24kXQorcmVxdWlyZXMuMy5ncmVlZHk9dHJ1ZQorCit1bml0cy4zLmlkPWNvbmZpZ3VyZS5vcmcuZWNsaXBzZS5kZWJ1Zy5jb3JlCit1bml0cy4zLnZlcnNpb249JHZlcnNpb24kCit1bml0cy4zLnByb3ZpZGVzLjEubmFtZXNwYWNlPW9yZy5lY2xpcHNlLmVxdWlub3gucDIuaXUKK3VuaXRzLjMucHJvdmlkZXMuMS5uYW1lPWNvbmZpZ3VyZS5vcmcuZWNsaXBzZS5kZWJ1Zy5jb3JlCit1bml0cy4zLnByb3ZpZGVzLjEudmVyc2lvbj0kdmVyc2lvbiQKK3VuaXRzLjMuaW5zdHJ1Y3Rpb25zLmluc3RhbGw9Cit1bml0cy4zLmhvc3RSZXF1aXJlbWVudHMuMS5uYW1lc3BhY2U9b3NnaS5idW5kbGUKK3VuaXRzLjMuaG9zdFJlcXVpcmVtZW50cy4xLm5hbWU9b3JnLmVjbGlwc2UuZGVidWcuY29yZQordW5pdHMuMy5ob3N0UmVxdWlyZW1lbnRzLjEucmFuZ2U9WzAuMC4wLDEwLjAuMF0KK3VuaXRzLjMuaG9zdFJlcXVpcmVtZW50cy4xLmdyZWVkeT1mYWxzZQordW5pdHMuMy5ob3N0UmVxdWlyZW1lbnRzLjIubmFtZXNwYWNlPW9yZy5lY2xpcHNlLmVxdWlub3gucDIuZWNsaXBzZS50eXBlCit1bml0cy4zLmhvc3RSZXF1aXJlbWVudHMuMi5uYW1lPWJ1bmRsZQordW5pdHMuMy5ob3N0UmVxdWlyZW1lbnRzLjIucmFuZ2U9WzAuMC4wLDEwLjAuMCkKK3VuaXRzLjMuaG9zdFJlcXVpcmVtZW50cy4yLmdyZWVkeT1mYWxzZQordW5pdHMuMy5yZXF1aXJlcy4xLm5hbWVzcGFjZT1vc2dpLmJ1bmRsZQordW5pdHMuMy5yZXF1aXJlcy4xLm5hbWU9b3JnLmVjbGlwc2UuZGVidWcuY29yZQordW5pdHMuMy5yZXF1aXJlcy4xLnJhbmdlPVswLjAuMCwxMC4wLjBdCit1bml0cy4zLnJlcXVpcmVzLjEuZ3JlZWR5PWZhbHNlCisKKyMgZGlzYWJsZSBvcmcuZWNsaXBzZS5kZWJ1Zy51aQorcmVxdWlyZXMuNC5uYW1lc3BhY2U9b3JnLmVjbGlwc2UuZXF1aW5veC5wMi5pdQorcmVxdWlyZXMuNC5uYW1lPWNvbmZpZ3VyZS5vcmcuZWNsaXBzZS5kZWJ1Zy51aQorcmVxdWlyZXMuNC5yYW5nZT1bJHZlcnNpb24kLCR2ZXJzaW9uJF0KK3JlcXVpcmVzLjQuZ3JlZWR5PXRydWUKKwordW5pdHMuNC5pZD1jb25maWd1cmUub3JnLmVjbGlwc2UuZGVidWcudWkKK3VuaXRzLjQudmVyc2lvbj0kdmVyc2lvbiQKK3VuaXRzLjQucHJvdmlkZXMuMS5uYW1lc3BhY2U9b3JnLmVjbGlwc2UuZXF1aW5veC5wMi5pdQordW5pdHMuNC5wcm92aWRlcy4xLm5hbWU9Y29uZmlndXJlLm9yZy5lY2xpcHNlLmRlYnVnLnVpCit1bml0cy40LnByb3ZpZGVzLjEudmVyc2lvbj0kdmVyc2lvbiQKK3VuaXRzLjQuaW5zdHJ1Y3Rpb25zLmluc3RhbGw9Cit1bml0cy40Lmhvc3RSZXF1aXJlbWVudHMuMS5uYW1lc3BhY2U9b3NnaS5idW5kbGUKK3VuaXRzLjQuaG9zdFJlcXVpcmVtZW50cy4xLm5hbWU9b3JnLmVjbGlwc2UuZGVidWcudWkKK3VuaXRzLjQuaG9zdFJlcXVpcmVtZW50cy4xLnJhbmdlPVswLjAuMCwxMC4wLjBdCit1bml0cy40Lmhvc3RSZXF1aXJlbWVudHMuMS5ncmVlZHk9ZmFsc2UKK3VuaXRzLjQuaG9zdFJlcXVpcmVtZW50cy4yLm5hbWVzcGFjZT1vcmcuZWNsaXBzZS5lcXVpbm94LnAyLmVjbGlwc2UudHlwZQordW5pdHMuNC5ob3N0UmVxdWlyZW1lbnRzLjIubmFtZT1idW5kbGUKK3VuaXRzLjQuaG9zdFJlcXVpcmVtZW50cy4yLnJhbmdlPVswLjAuMCwxMC4wLjApCit1bml0cy40Lmhvc3RSZXF1aXJlbWVudHMuMi5ncmVlZHk9ZmFsc2UKK3VuaXRzLjQucmVxdWlyZXMuMS5uYW1lc3BhY2U9b3NnaS5idW5kbGUKK3VuaXRzLjQucmVxdWlyZXMuMS5uYW1lPW9yZy5lY2xpcHNlLmRlYnVnLnVpCit1bml0cy40LnJlcXVpcmVzLjEucmFuZ2U9WzAuMC4wLDEwLjAuMF0KK3VuaXRzLjQucmVxdWlyZXMuMS5ncmVlZHk9ZmFsc2UKKworCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyMjIEN1c3RvbWl6ZSBNYWMgT1MgWCBXb3Jrc3BhY2UgTG9jYXRpb24gIyMjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworcmVxdWlyZXMuNS5uYW1lc3BhY2U9b3JnLmVjbGlwc2UuZXF1aW5veC5wMi5pdQorcmVxdWlyZXMuNS5uYW1lPXRvb2xpbmcub3JnLmVjbGlwc2UuY29uZmlndXJhdGlvbi5tYWNvc3gKK3JlcXVpcmVzLjUuZmlsdGVyPShvc2dpLm9zPW1hY29zeCkKK3JlcXVpcmVzLjUucmFuZ2U9WzEuMC4wLDEuMC4wXQorcmVxdWlyZXMuNS5ncmVlZHk9dHJ1ZQorCit1bml0cy41LmlkPXRvb2xpbmcub3JnLmVjbGlwc2UuY29uZmlndXJhdGlvbi5tYWNvc3gKK3VuaXRzLjUudmVyc2lvbj0xLjAuMAordW5pdHMuNS5wcm92aWRlcy4xLm5hbWVzcGFjZT1vcmcuZWNsaXBzZS5lcXVpbm94LnAyLml1Cit1bml0cy41LnByb3ZpZGVzLjEubmFtZT10b29saW5nLm9yZy5lY2xpcHNlLmNvbmZpZ3VyYXRpb24ubWFjb3N4Cit1bml0cy41LnByb3ZpZGVzLjEudmVyc2lvbj0xLjAuMAordW5pdHMuNS5maWx0ZXI9KG9zZ2kub3M9bWFjb3N4KQordW5pdHMuNS50b3VjaHBvaW50LmlkPW9yZy5lY2xpcHNlLmVxdWlub3gucDIub3NnaQordW5pdHMuNS50b3VjaHBvaW50LnZlcnNpb249MS4wLjAKK3VuaXRzLjUuaW5zdHJ1Y3Rpb25zLmNvbmZpZ3VyZT1zZXRQcm9ncmFtUHJvcGVydHkocHJvcE5hbWU6b3NnaS5pbnN0YW5jZS5hcmVhLmRlZmF1bHQscHJvcFZhbHVlOi4uLy4uLy4uL3dvcmtzcGFjZSk7Cit1bml0cy41Lmluc3RydWN0aW9ucy51bmNvbmZpZ3VyZT1zZXRQcm9ncmFtUHJvcGVydHkocHJvcE5hbWU6b3NnaS5pbnN0YW5jZS5hcmVhLmRlZmF1bHQscHJvcFZhbHVlOik7CisKKworCisKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9wbHVnaW4ucHJvcGVydGllcyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9wbHVnaW4ucHJvcGVydGllcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44Nzg2MmFhCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3BsdWdpbi5wcm9wZXJ0aWVzCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9wbHVnaW4ueG1sIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3BsdWdpbi54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmVhZTNiNAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9wbHVnaW4ueG1sCkBAIC0wLDAgKzEsMTg0NCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzw/ZWNsaXBzZSB2ZXJzaW9uPSIzLjIiPz4KKzxwbHVnaW4+CisgICA8ZXh0ZW5zaW9uLXBvaW50IGlkPSJvcmcuZWNsaXBzZS5zdGVtLnVpLmNvbG9ycHJvdmlkZXJzIiBuYW1lPSJVSSBDb2xvciBQcm92aWRlcnMiIHNjaGVtYT0ic2NoZW1hL3VpLmNvbG9wcm92aWRlcnMuZXhzZCIvPgorICAgPGV4dGVuc2lvbi1wb2ludCBpZD0ib3JnLmVjbGlwc2Uuc3RlbS51aS5sYXVuY2hlcnMiIG5hbWU9IlNURU0gQXBwbGljYXRpb24gTGF1bmNoZXJzIiBzY2hlbWE9InNjaGVtYS9vcmcuZWNsaXBzZS5zdGVtLnVpLmxhdW5jaGVycy5leHNkIi8+CisKKyAgPGV4dGVuc2lvbgorICAgIHBvaW50PSJvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuYXBwbGljYXRpb25zIgorICAgIGlkPSJDb3JlRWRpdG9yQWR2aXNvckFwcGxpY2F0aW9uIj4KKyAgICA8YXBwbGljYXRpb24+CisgICAgICA8cnVuCisgICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLnByZXNlbnRhdGlvbi5Db3JlRWRpdG9yQWR2aXNvciRBcHBsaWNhdGlvbiI+CisgICAgICA8L3J1bj4KKyAgICA8L2FwcGxpY2F0aW9uPgorICA8L2V4dGVuc2lvbj4KKyAgPGV4dGVuc2lvbgorICAgICAgICBpZD0ib3JnLmVjbGlwc2Uuc3RlbS51aS5wcm9kdWN0IgorICAgICAgICBwb2ludD0ib3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLnByb2R1Y3RzIj4KKyAgICAgPHByb2R1Y3QKKyAgICAgICAgICAgYXBwbGljYXRpb249Im9yZy5lY2xpcHNlLnN0ZW0udWkuQ29yZUVkaXRvckFkdmlzb3JBcHBsaWNhdGlvbiIKKyAgICAgICAgICAgbmFtZT0iU1RFTSI+CisgICAgICAgIDxwcm9wZXJ0eQorICAgICAgICAgICAgICBuYW1lPSJwcmVmZXJlbmNlQ3VzdG9taXphdGlvbiIKKyAgICAgICAgICAgICAgdmFsdWU9InBsdWdpbl9jdXN0b21pemF0aW9uLmluaSIvPgorICAgICAgICA8cHJvcGVydHkKKyAgICAgICAgICAgICAgbmFtZT0iYWJvdXRUZXh0IgorICAgICAgICAgICAgICB2YWx1ZT0iU1RFTSAtIFNwYXRpb3RlbXBvcmFsIEVwaWRlbW9sb2dpY2FsIE1vZGVsZXIiLz4KKyAgICAgICAgPHByb3BlcnR5CisgICAgICAgICAgICAgIG5hbWU9InN0YXJ0dXBGb3JlZ3JvdW5kQ29sb3IiCisgICAgICAgICAgICAgIHZhbHVlPSJGRkZGRkYiLz4KKyAgICAgICAgPHByb3BlcnR5CisgICAgICAgICAgICAgIG5hbWU9InN0YXJ0dXBNZXNzYWdlUmVjdCIKKyAgICAgICAgICAgICAgdmFsdWU9IjEwLDM4MCw0MzEsMjAiLz4KKyAgICAgICAgPHByb3BlcnR5CisgICAgICAgICAgICAgIG5hbWU9InN0YXJ0dXBQcm9ncmVzc1JlY3QiCisgICAgICAgICAgICAgIHZhbHVlPSIwLDQxMyw0MzEsMTUiLz4KKyAgICAgICAgPHByb3BlcnR5CisgICAgICAgICAgICAgIG5hbWU9IndpbmRvd0ltYWdlcyIKKyAgICAgICAgICAgICAgdmFsdWU9ImJyYW5kaW5nL29oZjE2XzE2XzMyLmdpZixicmFuZGluZy9vaGYzMl8zMl8zMi5naWYsYnJhbmRpbmcvb2hmNDhfNDhfMzIuZ2lmLGJyYW5kaW5nL29oZjY0XzY0XzMyLmdpZixicmFuZGluZy9vaGYxMjhfMTI4XzMyLmdpZiIvPgorICAgICAgICA8cHJvcGVydHkKKyAgICAgICAgICAgICAgbmFtZT0iYWJvdXRJbWFnZSIKKyAgICAgICAgICAgICAgdmFsdWU9ImJyYW5kaW5nL29oZjY0XzY0XzMyLmdpZiIvPgorICAgICAgICA8cHJvcGVydHkKKyAgICAgICAgICAgICAgbmFtZT0iYXBwTmFtZSIKKyAgICAgICAgICAgICAgdmFsdWU9IlNURU0iPgorICAgICAgICA8L3Byb3BlcnR5PgorICAgICAgICAKKyAgICAgICAgPCEtLSBUaGVzZSBhcmUgZm9yIHRoZSBXZWxjb21lL2ludHJvLiAgU2VlIHBsdWdpbi5wcm9wZXJ0aWVzIC0tPgorICAgICAgICAgIDxwcm9wZXJ0eQorICAgICAgICAgICAgbmFtZT0iaW50cm9UaXRsZSIKKyAgICAgICAgICAgIHZhbHVlPSIlaW50cm9UaXRsZSI+CisgICAgICAgICA8L3Byb3BlcnR5PgorICAgICAgICAgCisgICAgICAgICA8cHJvcGVydHkKKyAgICAgICAgICAgIG5hbWU9ImludHJvQnJhbmRpbmdJbWFnZSIKKyAgICAgICAgICAgIHZhbHVlPSJwcm9kdWN0OmJyYW5kaW5nL29oZjY0XzY0XzMyLmdpZiI+CisgICAgICAgICA8L3Byb3BlcnR5PgorCisgICAgICAgICA8cHJvcGVydHkKKyAgICAgICAgICAgIG5hbWU9ImludHJvQnJhbmRpbmdJbWFnZVRleHQiCisgICAgICAgICAgICB2YWx1ZT0iJWludHJvQnJhbmRpbmdJbWFnZVRleHQiPgorICAgICAgICAgPC9wcm9wZXJ0eT4KKyAgICAgICAgIAorICAgICAgICAgPHByb3BlcnR5CisgICAgICAgICAgICBuYW1lPSJpbnRyb0Rlc2NyaXB0aW9uLW92ZXJ2aWV3IgorICAgICAgICAgICAgdmFsdWU9IiVpbnRyb0Rlc2NyaXB0aW9uLW92ZXJ2aWV3Ij4KKyAgICAgICAgIDwvcHJvcGVydHk+CisgICAgICAgICA8cHJvcGVydHkKKyAgICAgICAgICAgIG5hbWU9ImludHJvRGVzY3JpcHRpb24tZmlyc3RzdGVwcyIKKyAgICAgICAgICAgIHZhbHVlPSIlaW50cm9EZXNjcmlwdGlvbi1maXJzdHN0ZXBzIj4KKyAgICAgICAgIDwvcHJvcGVydHk+CisgICAgICAgICA8cHJvcGVydHkKKyAgICAgICAgICAgIG5hbWU9ImludHJvRGVzY3JpcHRpb24tdHV0b3JpYWxzIgorICAgICAgICAgICAgdmFsdWU9IiVpbnRyb0Rlc2NyaXB0aW9uLXR1dG9yaWFscyI+CisgICAgICAgICA8L3Byb3BlcnR5PgorICAgICAgICAgPHByb3BlcnR5CisgICAgICAgICAgICBuYW1lPSJpbnRyb0Rlc2NyaXB0aW9uLXNhbXBsZXMiCisgICAgICAgICAgICB2YWx1ZT0iJWludHJvRGVzY3JpcHRpb24tc2FtcGxlcyI+CisgICAgICAgICA8L3Byb3BlcnR5PgorICAgICAgICAgPHByb3BlcnR5CisgICAgICAgICAgICBuYW1lPSJpbnRyb0Rlc2NyaXB0aW9uLXdoYXRzbmV3IgorICAgICAgICAgICAgdmFsdWU9IiVpbnRyb0Rlc2NyaXB0aW9uLXdoYXRzbmV3Ij4KKyAgICAgICAgIDwvcHJvcGVydHk+CisgICAgICAgICA8cHJvcGVydHkKKyAgICAgICAgICAgIG5hbWU9ImludHJvRGVzY3JpcHRpb24tbWlncmF0ZSIKKyAgICAgICAgICAgIHZhbHVlPSIlaW50cm9EZXNjcmlwdGlvbi1taWdyYXRlIj4KKyAgICAgICAgIDwvcHJvcGVydHk+CisgICAgICAgICA8cHJvcGVydHkKKyAgICAgICAgICAgIG5hbWU9ImludHJvRGVzY3JpcHRpb24td2VicmVzb3VyY2VzIgorICAgICAgICAgICAgdmFsdWU9IiVpbnRyb0Rlc2NyaXB0aW9uLXdlYnJlc291cmNlcyI+CisgICAgICAgICA8L3Byb3BlcnR5PiAgICAgICAgIAorICAgICAgICAgICAgCisgICAgIDwvcHJvZHVjdD4KKyAgPC9leHRlbnNpb24+CisgICA8ZXh0ZW5zaW9uCisgICAgICAgICBwb2ludD0ib3JnLmVjbGlwc2UudWkubmV3V2l6YXJkcyI+CisgICAgICA8Y2F0ZWdvcnkgCisgICAgICAgICAgICBpZD0ib3JnLmVjbGlwc2Uuc3RlbS51aS53aXphcmRzLnN0ZW1jYXRlZ29yeSIKKyAgICAgICAgICAgIG5hbWU9IiVfVUlfU1RFTSIKKyAgICAgICAgICAgIHBhcmVudENhdGVnb3J5PSIvIi8+CisgICAgICA8d2l6YXJkCisgICAgICAgICAgICBjYXRlZ29yeT0ib3JnLmVjbGlwc2Uuc3RlbS51aS53aXphcmRzLnN0ZW1jYXRlZ29yeSIKKyAgICAgICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS5zdGVtLnVpLndpemFyZHMuTmV3U1RFTVByb2plY3RXaXphcmQiCisgICAgICAgICAgICBoYXNQYWdlcz0idHJ1ZSIKKyAgICAgICAgICAgIGljb249Imljb25zL2Z1bGwvY3VzdG9tb2JqMTYvU1RFTS5naWYiCisgICAgICAgICAgICBpZD0ib3JnLmVjbGlwc2Uuc3RlbS51aS53aXphcmRzLm5ld3N0ZW1wcm9qZWN0IgorICAgICAgICAgICAgbmFtZT0iJV9VSV9OZXdfU1RFTV9Qcm9qZWN0X1dpemFyZCIKKyAgICAgICAgICAgIHByb2plY3Q9InRydWUiLz4KKyAgICAgIDx3aXphcmQKKyAgICAgICAgICAgIGNhdGVnb3J5PSJvcmcuZWNsaXBzZS5zdGVtLnVpLndpemFyZHMuc3RlbWNhdGVnb3J5IgorICAgICAgICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLnN0ZW0udWkud2l6YXJkcy5OZXdNb2RlbFdpemFyZCIKKyAgICAgICAgICAgIGhhc1BhZ2VzPSJ0cnVlIgorICAgICAgICAgICAgaWNvbj0iaWNvbnMvZnVsbC9jdXN0b21vYmoxNi9Nb2RlbC5naWYiCisgICAgICAgICAgICBpZD0ib3JnLmVjbGlwc2Uuc3RlbS51aS53aXphcmRzLm5ld21vZGVsIgorICAgICAgICAgICAgbmFtZT0iJV9VSV9Nb2RlbE1vZGVsV2l6YXJkX2xhYmVsIi8+CisgICAgICA8d2l6YXJkCisgICAgICAgICAgICBjYXRlZ29yeT0ib3JnLmVjbGlwc2Uuc3RlbS51aS53aXphcmRzLnN0ZW1jYXRlZ29yeSIKKyAgICAgICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS5zdGVtLnVpLndpemFyZHMuTmV3R3JhcGhXaXphcmQiCisgICAgICAgICAgICBoYXNQYWdlcz0idHJ1ZSIKKyAgICAgICAgICAgIGljb249Imljb25zL2Z1bGwvY3VzdG9tb2JqMTYvR3JhcGguZ2lmIgorICAgICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLnN0ZW0udWkud2l6YXJkcy5uZXdncmFwaCIKKyAgICAgICAgICAgIG5hbWU9IiVfVUlfR3JhcGhNb2RlbFdpemFyZF9sYWJlbCIvPgorICAgICAgPHdpemFyZAorICAgICAgICAgICAgY2F0ZWdvcnk9Im9yZy5lY2xpcHNlLnN0ZW0udWkud2l6YXJkcy5zdGVtY2F0ZWdvcnkiCisgICAgICAgICAgICBjbGFzcz0ib3JnLmVjbGlwc2Uuc3RlbS51aS53aXphcmRzLk5ld1NlcXVlbnRpYWxTZXF1ZW5jZXJXaXphcmQkTmV3Rml4ZWRTZXF1ZW50aWFsU2VxdWVuY2VyV2l6YXJkIgorICAgICAgICAgICAgaWNvbj0iaWNvbnMvZnVsbC9jdXN0b21vYmoxNi9TZXF1ZW5jZXIuZ2lmIgorICAgICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLnN0ZW0udWkud2l6YXJkcy5uZXdzZXF1ZW5jZXIiCisgICAgICAgICAgICBuYW1lPSIlX1VJX1NlcXVlbmNlck1vZGVsV2l6YXJkX2xhYmVsIi8+CisgICAgICA8d2l6YXJkCisgICAgICAgICAgICBjYXRlZ29yeT0ib3JnLmVjbGlwc2Uuc3RlbS51aS53aXphcmRzLnN0ZW1jYXRlZ29yeSIKKyAgICAgICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS5zdGVtLnVpLndpemFyZHMuTmV3U2VxdWVudGlhbFNlcXVlbmNlcldpemFyZCROZXdSZWFsVGltZVNlcXVlbmNlcldpemFyZCIKKyAgICAgICAgICAgIGljb249Imljb25zL2Z1bGwvY3VzdG9tb2JqMTYvU2VxdWVuY2VyLmdpZiIKKyAgICAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5zdGVtLnVpLndpemFyZHMubmV3cnRzZXF1ZW5jZXIiCisgICAgICAgICAgICBuYW1lPSIlX1VJX1JlYWxUaW1lU2VxdWVuY2VyTW9kZWxXaXphcmRfbGFiZWwiLz4KKyAgICAgIDx3aXphcmQKKyAgICAgICAgICAgIGNhdGVnb3J5PSJvcmcuZWNsaXBzZS5zdGVtLnVpLndpemFyZHMuc3RlbWNhdGVnb3J5IgorICAgICAgICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLnN0ZW0udWkud2l6YXJkcy5OZXdTY2VuYXJpb1dpemFyZCIKKyAgICAgICAgICAgIGhhc1BhZ2VzPSJ0cnVlIgorICAgICAgICAgICAgaWNvbj0iaWNvbnMvZnVsbC9jdXN0b21vYmoxNi9TY2VuYXJpby5naWYiCisgICAgICAgICAgICBpZD0ib3JnLmVjbGlwc2Uuc3RlbS51aS53aXphcmRzLm5ld3NjZW5hcmlvIgorICAgICAgICAgICAgbmFtZT0iJV9VSV9TY2VuYXJpb01vZGVsV2l6YXJkX2xhYmVsIi8+CisgICAgICA8d2l6YXJkCisgICAgICAgICAgICBjYXRlZ29yeT0ib3JnLmVjbGlwc2Uuc3RlbS51aS53aXphcmRzLnN0ZW1jYXRlZ29yeSIKKyAgICAgICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS5zdGVtLnVpLndpemFyZHMuTmV3RXhwZXJpbWVudFdpemFyZCIKKyAgICAgICAgICAgIGhhc1BhZ2VzPSJ0cnVlIgorICAgICAgICAgICAgaWNvbj0iaWNvbnMvZnVsbC9jdXN0b21vYmoxNi9FeHBlcmltZW50LmdpZiIKKyAgICAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5zdGVtLnVpLndpemFyZHMubmV3ZXhwZXJpbWVudCIKKyAgICAgICAgICAgIG5hbWU9IiVfVUlfRXhwZXJpbWVudE1vZGVsV2l6YXJkX2xhYmVsIj4KKyAgICAgIDwvd2l6YXJkPgorICAgICAgPHdpemFyZAorICAgICAgICAgICAgY2F0ZWdvcnk9Im9yZy5lY2xpcHNlLnN0ZW0udWkud2l6YXJkcy5zdGVtY2F0ZWdvcnkiCisgICAgICAgICAgICBjbGFzcz0ib3JnLmVjbGlwc2Uuc3RlbS51aS53aXphcmRzLk5ld1RyaWdnZXJXaXphcmQiCisgICAgICAgICAgICBoYXNQYWdlcz0idHJ1ZSIKKyAgICAgICAgICAgIGljb249Imljb25zL2Z1bGwvY3VzdG9tb2JqMTYvVHJpZ2dlci5naWYiCisgICAgICAgICAgICBpZD0ib3JnLmVjbGlwc2Uuc3RlbS51aS53aXphcmRzLm5ld3RyaWdnZXIiCisgICAgICAgICAgICBuYW1lPSIlX1VJX1RyaWdnZXJNb2RlbFdpemFyZF9sYWJlbCI+CisgICAgICA8L3dpemFyZD4KKyAgICAgIDx3aXphcmQKKyAgICAgICAgICAgIGNhdGVnb3J5PSJvcmcuZWNsaXBzZS5zdGVtLnVpLndpemFyZHMuc3RlbWNhdGVnb3J5IgorICAgICAgICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLnN0ZW0udWkud2l6YXJkcy5OZXdQcmVkaWNhdGVXaXphcmQiCisgICAgICAgICAgICBoYXNQYWdlcz0idHJ1ZSIKKyAgICAgICAgICAgIGljb249Imljb25zL2Z1bGwvY3VzdG9tb2JqMTYvUHJlZGljYXRlLmdpZiIKKyAgICAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5zdGVtLnVpLndpemFyZHMubmV3cHJlZGljYXRlIgorICAgICAgICAgICAgbmFtZT0iJV9VSV9QcmVkaWNhdGVNb2RlbFdpemFyZF9sYWJlbCI+CisgICAgICA8L3dpemFyZD4KKyAgICAgIAorPCEtLSAgICAgIAorICAgICAgPHdpemFyZAorICAgICAgICAgICAgY2F0ZWdvcnk9Im9yZy5lY2xpcHNlLnN0ZW0udWkud2l6YXJkcy5zdGVtY2F0ZWdvcnkiCisgICAgICAgICAgICBjbGFzcz0ib3JnLmVjbGlwc2Uuc3RlbS51aS53aXphcmRzLk5ld0xvZ2dlcldpemFyZCIKKyAgICAgICAgICAgIGhhc1BhZ2VzPSJ0cnVlIgorICAgICAgICAgICAgaWNvbj0iaWNvbnMvZnVsbC9jdXN0b21vYmoxNi9Mb2dnZXIuZ2lmIgorICAgICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLnN0ZW0udWkud2l6YXJkcy5uZXdsb2dnZXIiCisgICAgICAgICAgICBuYW1lPSIlX1VJX0xvZ2dlck1vZGVsV2l6YXJkX2xhYmVsIi8+CistLT4KKyAgICAgICAgICAgICAgICAgIAorICAgPC9leHRlbnNpb24+CisgICA8ZXh0ZW5zaW9uCisgICAgICAgICBwb2ludD0ib3JnLmVjbGlwc2UudWkudmlld3MiPgorICAgICAgPGNhdGVnb3J5CisgICAgICAgICAgICBpZD0ib3JnLmVjbGlwc2Uuc3RlbS51aS52aWV3cyIKKyAgICAgICAgICAgIG5hbWU9IiVfVUlfU1RFTSIKKyAgICAgICAgICAgIHBhcmVudENhdGVnb3J5PSIvIi8+CisgICAgICA8dmlldworICAgICAgICAgICAgY2F0ZWdvcnk9Im9yZy5lY2xpcHNlLnN0ZW0udWkudmlld3MiCisgICAgICAgICAgICBjbGFzcz0ib3JnLmVjbGlwc2Uuc3RlbS51aS52aWV3cy5HcmFwaHNWaWV3IgorICAgICAgICAgICAgaWNvbj0iaWNvbnMvZnVsbC9jdXN0b21vYmoxNi9HcmFwaC5naWYiCisgICAgICAgICAgICBpZD0ib3JnLmVjbGlwc2Uuc3RlbS51aS52aWV3cy5ncmFwaHMiCisgICAgICAgICAgICBuYW1lPSIlX1VJX0dyYXBocyIvPgorICAgICAgPHZpZXcKKyAgICAgICAgICAgIGNhdGVnb3J5PSJvcmcuZWNsaXBzZS5zdGVtLnVpLnZpZXdzIgorICAgICAgICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLnN0ZW0udWkudmlld3MuTW9kZWxzVmlldyIKKyAgICAgICAgICAgIGljb249Imljb25zL2Z1bGwvY3VzdG9tb2JqMTYvTW9kZWwuZ2lmIgorICAgICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLnN0ZW0udWkudmlld3MubW9kZWxzIgorICAgICAgICAgICAgbmFtZT0iJV9VSV9Nb2RlbHMiLz4KKyAgICAgIDx2aWV3CisgICAgICAgICAgICBjYXRlZ29yeT0ib3JnLmVjbGlwc2Uuc3RlbS51aS52aWV3cyIKKyAgICAgICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS5zdGVtLnVpLnZpZXdzLlNjZW5hcmlvc1ZpZXciCisgICAgICAgICAgICBpY29uPSJpY29ucy9mdWxsL2N1c3RvbW9iajE2L1NjZW5hcmlvLmdpZiIKKyAgICAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5zdGVtLnVpLnZpZXdzLnNjZW5hcmlvcyIKKyAgICAgICAgICAgIG5hbWU9IiVfVUlfU2NlbmFyaW9zIi8+CisgICAgICA8dmlldworICAgICAgICAgICAgY2F0ZWdvcnk9Im9yZy5lY2xpcHNlLnN0ZW0udWkudmlld3MiCisgICAgICAgICAgICBjbGFzcz0ib3JnLmVjbGlwc2Uuc3RlbS51aS52aWV3cy5TZXF1ZW5jZXJzVmlldyIKKyAgICAgICAgICAgIGljb249Imljb25zL2Z1bGwvY3VzdG9tb2JqMTYvU2VxdWVuY2VyLmdpZiIKKyAgICAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5zdGVtLnVpLnZpZXdzLnNlcXVlbmNlcnMiCisgICAgICAgICAgICBuYW1lPSIlX1VJX1NlcXVlbmNlcnMiLz4KKyAgICAgIDx2aWV3CisgICAgICAgICAgICBjYXRlZ29yeT0ib3JnLmVjbGlwc2Uuc3RlbS51aS52aWV3cyIKKyAgICAgICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS5zdGVtLnVpLnZpZXdzLkRlY29yYXRvcnNWaWV3IgorICAgICAgICAgICAgaWNvbj0iaWNvbnMvZnVsbC9jdXN0b21vYmoxNi9EZWNvcmF0b3IuZ2lmIgorICAgICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLnN0ZW0udWkudmlld3MuZGVjb3JhdG9ycyIKKyAgICAgICAgICAgIG5hbWU9IiVfVUlfRGVjb3JhdG9ycyIvPgorICAgICAgPHZpZXcKKyAgICAgICAgICAgIGNhdGVnb3J5PSJvcmcuZWNsaXBzZS5zdGVtLnVpLnZpZXdzIgorICAgICAgICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLnN0ZW0udWkudmlld3MuQWN0aXZlU2ltdWxhdGlvbnNWaWV3IgorICAgICAgICAgICAgaWNvbj0iaWNvbnMvZnVsbC9jdXN0b21vYmoxNi9TVEVNLmdpZiIKKyAgICAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5zdGVtLnVpLnZpZXdzLmFjdGl2ZXNpbXVsYXRpb25zIgorICAgICAgICAgICAgbmFtZT0iJV9VSV9BY3RpdmVfU2ltdWxhdGlvbnNfVmlldyIvPgorICAgICAgPHZpZXcKKyAgICAgICAgICAgIGNhdGVnb3J5PSJvcmcuZWNsaXBzZS5zdGVtLnVpLnZpZXdzIgorICAgICAgICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLnN0ZW0udWkudmlld3MuU2ltdWxhdGlvbkNvbnRyb2xWaWV3IgorICAgICAgICAgICAgaWNvbj0iaWNvbnMvZnVsbC9jdXN0b21vYmoxNi9TaW11bGF0aW9uQ29udHJvbFZpZXcuZ2lmIgorICAgICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLnN0ZW0udWkudmlld3Muc2ltdWxhdGlvbmNvbnRyb2x2aWV3IgorICAgICAgICAgICAgbmFtZT0iJV9VSV9TaW11bGF0aW9uX0NvbnRyb2xfVmlldyIvPgorICAgICAgPHZpZXcKKyAgICAgICAgICAgIG5hbWU9IiVfVUlfRXJyb3JfTG9nX1ZpZXciCisgICAgICAgICAgICBpY29uPSJpY29ucy9mdWxsL2N1c3RvbW9iajE2L2Vycm9yX2xvZy5naWYiCisgICAgICAgICAgICBjYXRlZ29yeT0ib3JnLmVjbGlwc2Uuc3RlbS51aS52aWV3cyIKKyAgICAgICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC52aWV3cy5sb2cuTG9nVmlldyIKKyAgICAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5wZGUucnVudGltZS5Mb2dWaWV3Ij4KKyAgICAgIDwvdmlldz4KKyAgICAgIDx2aWV3CisgICAgICAgICAgICBjYXRlZ29yeT0ib3JnLmVjbGlwc2Uuc3RlbS51aS52aWV3cyIKKyAgICAgICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS5zdGVtLnVpLnZpZXdzLmdlb2dyYXBoaWMubWFwLk1hcFZpZXciCisgICAgICAgICAgICBpY29uPSJpY29ucy9mdWxsL2N1c3RvbW9iajE2L21hcC5naWYiCisgICAgICAgICAgICBpZD0ib3JnLmVjbGlwc2Uuc3RlbS51aS52aWV3cy5nZW9ncmFwaGljLm1hcCIKKyAgICAgICAgICAgIG5hbWU9IiVfVUlfTWFwX1ZpZXciLz4KKyAgICAgIDx2aWV3CisgICAgICAgICAgICBjYXRlZ29yeT0ib3JnLmVjbGlwc2Uuc3RlbS51aS52aWV3cyIKKyAgICAgICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS5zdGVtLnVpLnZpZXdzLkFjdGl2ZUJhdGNoZXNWaWV3IgorICAgICAgICAgICAgaWNvbj0iaWNvbnMvZnVsbC9jdXN0b21vYmoxNi9CYXRjaC5naWYiCisgICAgICAgICAgICBpZD0ib3JnLmVjbGlwc2Uuc3RlbS51aS52aWV3cy5hY3RpdmViYXRjaGVzIgorICAgICAgICAgICAgbmFtZT0iJV9VSV9BY3RpdmVfQmF0Y2hlc19WaWV3Ij4KKyAgICAgIDwvdmlldz4KKyAgICAgIDx2aWV3CisgICAgICAgICAgICBjYXRlZ29yeT0ib3JnLmVjbGlwc2Uuc3RlbS51aS52aWV3cyIKKyAgICAgICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS5zdGVtLnVpLnZpZXdzLkV4cGVyaW1lbnRzVmlldyIKKyAgICAgICAgICAgIGljb249Imljb25zL2Z1bGwvY3VzdG9tb2JqMTYvRXhwZXJpbWVudC5naWYiCisgICAgICAgICAgICBpZD0ib3JnLmVjbGlwc2Uuc3RlbS51aS52aWV3cy5leHBlcmltZW50cyIKKyAgICAgICAgICAgIG5hbWU9IiVfVUlfRXhwZXJpbWVudHMiPgorICAgICAgPC92aWV3PgorICAgICAgPHZpZXcKKyAgICAgICAgICAgIGNhdGVnb3J5PSJvcmcuZWNsaXBzZS5zdGVtLnVpLnZpZXdzIgorICAgICAgICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLnN0ZW0udWkudmlld3MuVHJpZ2dlcnNWaWV3IgorICAgICAgICAgICAgaWNvbj0iaWNvbnMvZnVsbC9jdXN0b21vYmoxNi9UcmlnZ2VyLmdpZiIKKyAgICAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5zdGVtLnVpLnZpZXdzLnRyaWdnZXJzIgorICAgICAgICAgICAgbmFtZT0iJV9VSV9UcmlnZ2VycyI+CisgICAgICA8L3ZpZXc+CisgICAgICA8dmlldworICAgICAgICAgICAgY2F0ZWdvcnk9Im9yZy5lY2xpcHNlLnN0ZW0udWkudmlld3MiCisgICAgICAgICAgICBjbGFzcz0ib3JnLmVjbGlwc2Uuc3RlbS51aS52aWV3cy5QcmVkaWNhdGVzVmlldyIKKyAgICAgICAgICAgIGljb249Imljb25zL2Z1bGwvY3VzdG9tb2JqMTYvUHJlZGljYXRlLmdpZiIKKyAgICAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5zdGVtLnVpLnZpZXdzLnByZWRpY2F0ZXMiCisgICAgICAgICAgICBuYW1lPSIlX1VJX1ByZWRpY2F0ZXMiPgorICAgICAgPC92aWV3PgorICAgPC9leHRlbnNpb24+CisgICA8ZXh0ZW5zaW9uCisgICAgICAgICBwb2ludD0ib3JnLmVjbGlwc2UudWkucGVyc3BlY3RpdmVzIj4KKyAgICAgIDxwZXJzcGVjdGl2ZQorICAgICAgICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLnN0ZW0udWkucGVyc3BlY3RpdmVzLkRlc2lnbmVyIgorICAgICAgICAgICAgaWNvbj0iaWNvbnMvZnVsbC9jdXN0b21vYmoxNi9TVEVNLmdpZiIKKyAgICAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5zdGVtLnVpLlNURU1EZXNpZ25lclBlcnNwZWN0aXZlIgorICAgICAgICAgICAgbmFtZT0iJV9VSV9EZXNpZ25lcl9QZXJzcGVjdGl2ZSIvPgorICAgICAgPHBlcnNwZWN0aXZlCisgICAgICAgICAgICBjbGFzcz0ib3JnLmVjbGlwc2Uuc3RlbS51aS5wZXJzcGVjdGl2ZXMuU2ltdWxhdGlvbiIKKyAgICAgICAgICAgIGljb249ImJyYW5kaW5nL29oZjE2XzE2XzMyLmdpZiIKKyAgICAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5zdGVtLnVpLlNURU1TaW11bGF0aW9uUGVyc3BlY3RpdmUiCisgICAgICAgICAgICBuYW1lPSIlX1VJX1NpbXVsYXRpb25fUGVyc3BlY3RpdmUiLz4KKyAgIDwvZXh0ZW5zaW9uPgorICAgPGV4dGVuc2lvbgorICAgICAgICAgcG9pbnQ9Im9yZy5lY2xpcHNlLnVpLnByZWZlcmVuY2VQYWdlcyI+CisgICAgICA8cGFnZQorICAgICAgICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLnN0ZW0udWkucHJlZmVyZW5jZXMuU1RFTVByZWZlcmVuY2VQYWdlIgorICAgICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLnN0ZW0udWkucHJlZmVyZW5jZXMuU1RFTVByZWZlcmVuY2VQYWdlIgorICAgICAgICAgICAgbmFtZT0iJV9VSV9TVEVNIi8+CisgICAgICA8cGFnZQorICAgICAgICAgICAgY2F0ZWdvcnk9Im9yZy5lY2xpcHNlLnN0ZW0udWkucHJlZmVyZW5jZXMuU1RFTVByZWZlcmVuY2VQYWdlIgorICAgICAgICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLnN0ZW0udWkucHJlZmVyZW5jZXMuVmlzdWFsaXphdGlvblByZWZlcmVuY2VQYWdlIgorICAgICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLnN0ZW0udWkucHJlZmVyZW5jZXMuVmlzdWFsaXphdGlvblByZWZlcmVuY2VQYWdlIgorICAgICAgICAgICAgbmFtZT0iJV9VSV9WaXpQUGFnZSIvPgorICAgICAgPHBhZ2UKKyAgICAgICAgICAgIGNhdGVnb3J5PSJvcmcuZWNsaXBzZS5zdGVtLnVpLnByZWZlcmVuY2VzLlZpc3VhbGl6YXRpb25QcmVmZXJlbmNlUGFnZSIKKyAgICAgICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS5zdGVtLnVpLnByZWZlcmVuY2VzLk1hcHNDb2xvcnNQcmVmZXJlbmNlUGFnZSIKKyAgICAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5zdGVtLnVpLnByZWZlcmVuY2VzLk1hcHNDb2xvcnNQcmVmZXJlbmNlUGFnZSIKKyAgICAgICAgICAgIG5hbWU9IiVfVUlfQ29sb3JzUFBhZ2UiPgorICAgICAgPC9wYWdlPgorICAgICAgIDxwYWdlCisgICAgICAgICAgICBjYXRlZ29yeT0ib3JnLmVjbGlwc2Uuc3RlbS51aS5wcmVmZXJlbmNlcy5TVEVNUHJlZmVyZW5jZVBhZ2UiCisgICAgICAgICAgICBjbGFzcz0ib3JnLmVjbGlwc2Uuc3RlbS51aS5wcmVmZXJlbmNlcy5Tb2x2ZXJQcmVmZXJlbmNlUGFnZSIKKyAgICAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5zdGVtLnVpLnByZWZlcmVuY2VzLlNvbHZlclByZWZlcmVuY2VQYWdlIgorICAgICAgICAgICAgbmFtZT0iJV9VSV9Tb2x2ZXJQUGFnZSI+CisgICAgICA8L3BhZ2U+CisgICA8L2V4dGVuc2lvbj4KKyAgIDxleHRlbnNpb24KKyAgICAgICAgIHBvaW50PSJvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUucHJlZmVyZW5jZXMiPgorICAgICAgPGluaXRpYWxpemVyIGNsYXNzPSJvcmcuZWNsaXBzZS5zdGVtLnVpLnByZWZlcmVuY2VzLlByZWZlcmVuY2VJbml0aWFsaXplciIvPgorICAgICAgPGluaXRpYWxpemVyIGNsYXNzPSJvcmcuZWNsaXBzZS5zdGVtLnVpLnZpZXdzLmdlb2dyYXBoaWMubWFwLnByZWZlcmVuY2VzLlByZWZlcmVuY2VJbml0aWFsaXplciIvPgorICAgICAgPGluaXRpYWxpemVyCisgICAgICAgICAgICBjbGFzcz0ib3JnLmVjbGlwc2Uuc3RlbS51aS5wcmVmZXJlbmNlcy5NYXBzQ29sb3JzUHJlZmVyZW5jZUluaXRpYWxpemVyIj4KKyAgICAgIDwvaW5pdGlhbGl6ZXI+CisgICA8L2V4dGVuc2lvbj4KKworPCEtLQorICA8ZXh0ZW5zaW9uCisgICAgcG9pbnQ9Im9yZy5lY2xpcHNlLnVpLmNvbW1hbmRzIj4KKyAgICA8Y29tbWFuZAorICAgICAgbmFtZT0iJV9VSV9NZW51X09wZW5VUklfbGFiZWwiCisgICAgICBkZXNjcmlwdGlvbj0iJV9VSV9NZW51X09wZW5VUklfZGVzY3JpcHRpb24iCisgICAgICBjYXRlZ29yeUlkPSJvcmcuZWNsaXBzZS51aS5jYXRlZ29yeS5maWxlIgorICAgICAgaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24ucHJlc2VudGF0aW9uLkNvcmVFZGl0b3JBZHZpc29yT3BlblVSSUNvbW1hbmQiIC8+CisgICAgPGNvbW1hbmQKKyAgICAgIG5hbWU9IiVfVUlfTWVudV9PcGVuX2xhYmVsIgorICAgICAgZGVzY3JpcHRpb249IiVfVUlfTWVudV9PcGVuX2Rlc2NyaXB0aW9uIgorICAgICAgY2F0ZWdvcnlJZD0ib3JnLmVjbGlwc2UudWkuY2F0ZWdvcnkuZmlsZSIKKyAgICAgIGlkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLnByZXNlbnRhdGlvbi5Db3JlRWRpdG9yQWR2aXNvck9wZW5Db21tYW5kIiAvPgorICA8L2V4dGVuc2lvbj4KKy0tPgorPCEtLQorICA8ZXh0ZW5zaW9uCisgICAgcG9pbnQ9Im9yZy5lY2xpcHNlLnVpLmJpbmRpbmdzIj4KKyAgICA8a2V5CisgICAgICBjb21tYW5kSWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24ucHJlc2VudGF0aW9uLkNvcmVFZGl0b3JBZHZpc29yT3BlblVSSUNvbW1hbmQiCisgICAgICBzZXF1ZW5jZT0iTTErVSIKKyAgICAgIHNjaGVtZUlkPSJvcmcuZWNsaXBzZS51aS5kZWZhdWx0QWNjZWxlcmF0b3JDb25maWd1cmF0aW9uIiAvPgorICAgIDxrZXkKKyAgICAgIGNvbW1hbmRJZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5wcmVzZW50YXRpb24uQ29yZUVkaXRvckFkdmlzb3JPcGVuQ29tbWFuZCIKKyAgICAgIHNlcXVlbmNlPSJNMStPIgorICAgICAgc2NoZW1lSWQ9Im9yZy5lY2xpcHNlLnVpLmRlZmF1bHRBY2NlbGVyYXRvckNvbmZpZ3VyYXRpb24iIC8+CisgIDwvZXh0ZW5zaW9uPgorLS0+CisKKworCisKKworCisKKworCisKKyAgPGV4dGVuc2lvbiBwb2ludCA9ICJvcmcuZWNsaXBzZS51aS5lZGl0b3JzIj4KKyAgICA8ZWRpdG9yCisgICAgICAgIGlkID0gIm9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5wcmVzZW50YXRpb24uTW9kZWxFZGl0b3JJRCIKKyAgICAgICAgbmFtZSA9ICIlX1VJX01vZGVsRWRpdG9yX2xhYmVsIgorICAgICAgICBpY29uID0gImljb25zL2Z1bGwvb2JqMTYvTW9kZWxNb2RlbEZpbGUuZ2lmIgorICAgICAgICBleHRlbnNpb25zID0gIm1vZGVsIgorICAgICAgICBjbGFzcyA9ICJvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwucHJlc2VudGF0aW9uLk1vZGVsRWRpdG9yIgorICAgICAgICBjb250cmlidXRvckNsYXNzPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwucHJlc2VudGF0aW9uLk1vZGVsQWN0aW9uQmFyQ29udHJpYnV0b3IiID4KKyAgICA8L2VkaXRvcj4KKyAgICA8ZWRpdG9yCisgICAgICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5wcmVzZW50YXRpb24uR3JhcGhFZGl0b3IiCisgICAgICAgICAgY29udHJpYnV0b3JDbGFzcz0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLnByZXNlbnRhdGlvbi5HcmFwaEFjdGlvbkJhckNvbnRyaWJ1dG9yIgorICAgICAgICAgIGV4dGVuc2lvbnM9ImdyYXBoIgorICAgICAgICAgIGljb249Imljb25zL2Z1bGwvb2JqMTYvR3JhcGhNb2RlbEZpbGUuZ2lmIgorICAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGgucHJlc2VudGF0aW9uLkdyYXBoRWRpdG9ySUQiCisgICAgICAgICAgbmFtZT0iJV9VSV9HcmFwaEVkaXRvcl9sYWJlbCIvPgorICAgIDxlZGl0b3IKKyAgICAgICAgICBjbGFzcz0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNlcXVlbmNlci5wcmVzZW50YXRpb24uU2VxdWVuY2VyRWRpdG9yIgorICAgICAgICAgIGNvbnRyaWJ1dG9yQ2xhc3M9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zZXF1ZW5jZXIucHJlc2VudGF0aW9uLlNlcXVlbmNlckFjdGlvbkJhckNvbnRyaWJ1dG9yIgorICAgICAgICAgIGV4dGVuc2lvbnM9InNlcXVlbmNlciIKKyAgICAgICAgICBpY29uPSJpY29ucy9mdWxsL29iajE2L1NlcXVlbmNlck1vZGVsRmlsZS5naWYiCisgICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uc2VxdWVuY2VyLnByZXNlbnRhdGlvbi5TZXF1ZW5jZXJFZGl0b3JJRCIKKyAgICAgICAgICBuYW1lPSIlX1VJX1NlcXVlbmNlckVkaXRvcl9sYWJlbCI+CisgICAgPC9lZGl0b3I+CisgICAgPGVkaXRvcgorICAgICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2NlbmFyaW8ucHJlc2VudGF0aW9uLlNjZW5hcmlvRWRpdG9yIgorICAgICAgICAgIGNvbnRyaWJ1dG9yQ2xhc3M9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zY2VuYXJpby5wcmVzZW50YXRpb24uU2NlbmFyaW9BY3Rpb25CYXJDb250cmlidXRvciIKKyAgICAgICAgICBleHRlbnNpb25zPSJzY2VuYXJpbyIKKyAgICAgICAgICBpY29uPSJpY29ucy9mdWxsL29iajE2L1NjZW5hcmlvTW9kZWxGaWxlLmdpZiIKKyAgICAgICAgICBpZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNjZW5hcmlvLnByZXNlbnRhdGlvbi5TY2VuYXJpb0VkaXRvcklEIgorICAgICAgICAgIG5hbWU9IiVfVUlfU2NlbmFyaW9FZGl0b3JfbGFiZWwiPgorICAgIDwvZWRpdG9yPgorICAgIDxlZGl0b3IKKyAgICAgICAgICBjbGFzcz0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmV4cGVyaW1lbnQucHJlc2VudGF0aW9uLkV4cGVyaW1lbnRFZGl0b3IiCisgICAgICAgICAgY29udHJpYnV0b3JDbGFzcz0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmV4cGVyaW1lbnQucHJlc2VudGF0aW9uLkV4cGVyaW1lbnRBY3Rpb25CYXJDb250cmlidXRvciIKKyAgICAgICAgICBkZWZhdWx0PSJmYWxzZSIKKyAgICAgICAgICBleHRlbnNpb25zPSJleHBlcmltZW50IgorICAgICAgICAgIGljb249Imljb25zL2Z1bGwvb2JqMTYvRXhwZXJpbWVudE1vZGVsRmlsZS5naWYiCisgICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5leHBlcmltZW50LnByZXNlbnRhdGlvbi5FeHBlcmltZW50RWRpdG9ySUQiCisgICAgICAgICAgbmFtZT0iJV9VSV9FeHBlcmltZW50RWRpdG9yX2xhYmVsIj4KKyAgICA8L2VkaXRvcj4KKyAgICA8ZWRpdG9yCisgICAgICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS50cmlnZ2VyLnByZXNlbnRhdGlvbi5UcmlnZ2VyRWRpdG9yIgorICAgICAgICAgIGNvbnRyaWJ1dG9yQ2xhc3M9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS50cmlnZ2VyLnByZXNlbnRhdGlvbi5UcmlnZ2VyQWN0aW9uQmFyQ29udHJpYnV0b3IiCisgICAgICAgICAgZGVmYXVsdD0iZmFsc2UiCisgICAgICAgICAgZXh0ZW5zaW9ucz0idHJpZ2dlciIKKyAgICAgICAgICBpY29uPSJpY29ucy9mdWxsL29iajE2L1RyaWdnZXJNb2RlbEZpbGUuZ2lmIgorICAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUudHJpZ2dlci5wcmVzZW50YXRpb24uVHJpZ2dlckVkaXRvcklEIgorICAgICAgICAgIG5hbWU9IiVfVUlfVHJpZ2dlckVkaXRvcl9sYWJlbCI+CisgICAgPC9lZGl0b3I+CisgICAgPGVkaXRvcgorICAgICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlLnByZXNlbnRhdGlvbi5QcmVkaWNhdGVFZGl0b3IiCisgICAgICAgICAgY29udHJpYnV0b3JDbGFzcz0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZS5wcmVzZW50YXRpb24uUHJlZGljYXRlQWN0aW9uQmFyQ29udHJpYnV0b3IiCisgICAgICAgICAgZGVmYXVsdD0iZmFsc2UiCisgICAgICAgICAgZXh0ZW5zaW9ucz0icHJlZGljYXRlIgorICAgICAgICAgIGljb249Imljb25zL2Z1bGwvb2JqMTYvUHJlZGljYXRlTW9kZWxGaWxlLmdpZiIKKyAgICAgICAgICBpZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZS5wcmVzZW50YXRpb24uUHJlZGljYXRlRWRpdG9ySUQiCisgICAgICAgICAgbmFtZT0iJV9VSV9QcmVkaWNhdGVFZGl0b3JfbGFiZWwiPgorICAgIDwvZWRpdG9yPgorICAgIDxlZGl0b3IKKyAgICAgICAgICBjbGFzcz0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLnByZXNlbnRhdGlvbi5Nb2RpZmllckVkaXRvciIKKyAgICAgICAgICBjb250cmlidXRvckNsYXNzPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIucHJlc2VudGF0aW9uLk1vZGlmaWVyQWN0aW9uQmFyQ29udHJpYnV0b3IiCisgICAgICAgICAgZGVmYXVsdD0iZmFsc2UiCisgICAgICAgICAgZXh0ZW5zaW9ucz0ibW9kaWZpZXIiCisgICAgICAgICAgaWNvbj0iaWNvbnMvZnVsbC9vYmoxNi9Nb2RpZmllck1vZGVsRmlsZS5naWYiCisgICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5wcmVzZW50YXRpb24uTW9kaWZpZXJFZGl0b3JJRCIKKyAgICAgICAgICBuYW1lPSIlX1VJX01vZGlmaWVyRWRpdG9yX2xhYmVsIj4KKyAgICA8L2VkaXRvcj4KKyAgICA8ZWRpdG9yCisgICAgICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5sb2dnZXIucHJlc2VudGF0aW9uLkxvZ2dlckVkaXRvciIKKyAgICAgICAgICBjb250cmlidXRvckNsYXNzPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUubG9nZ2VyLnByZXNlbnRhdGlvbi5Mb2dnZXJBY3Rpb25CYXJDb250cmlidXRvciIKKyAgICAgICAgICBkZWZhdWx0PSJmYWxzZSIKKyAgICAgICAgICBleHRlbnNpb25zPSJsb2dnZXIiCisgICAgICAgICAgaWNvbj0iaWNvbnMvZnVsbC9vYmoxNi9Mb2dnZXJNb2RlbEZpbGUuZ2lmIgorICAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUubG9nZ2VyLnByZXNlbnRhdGlvbi5Mb2dnZXJFZGl0b3JJRCIKKyAgICAgICAgICBuYW1lPSIlX1VJX0xvZ2dlckVkaXRvcl9sYWJlbCI+CisgICAgPC9lZGl0b3I+ICAgIAorICA8L2V4dGVuc2lvbj4KKworICAKKyAgPGV4dGVuc2lvbgorICAgICAgICBwb2ludD0ib3JnLmVjbGlwc2UudWkubWVudXMiPgorICAgICAgPG1lbnVDb250cmlidXRpb24KKyAgICAgICAgICAgIGxvY2F0aW9uVVJJPSJtZW51Om9yZy5lY2xpcHNlLnVpLm1haW4ubWVudT9hZnRlcj1lZGl0Ij4KKyAgICAgICAgIDxtZW51CisgICAgICAgICAgICAgICBpZD0ib3JnLmVjbGlwc2Uuc3RlbS51aS5tZW51Lm5ld3dpemFyZHMiCisgICAgICAgICAgICAgICBsYWJlbD0iJV9VSV9TVEVNX05ld0FjdGlvblNldF9NZW51Ij4KKyAgICAgICAgICAgIDxjb21tYW5kCisgICAgICAgICAgICAgICAgICBjb21tYW5kSWQ9Im9yZy5lY2xpcHNlLnN0ZW0udWkuY29tbWFuZC53aXouZXhwZXJpbWVudCIKKyAgICAgICAgICAgICAgICAgIGljb249Imljb25zL2Z1bGwvY3VzdG9tb2JqMTYvRXhwZXJpbWVudC5naWYiCisgICAgICAgICAgICAgICAgICBsYWJlbD0iJV9VSV9FeHBlcmltZW50TW9kZWxXaXphcmRfbGFiZWwiCisgICAgICAgICAgICAgICAgICBzdHlsZT0icHVzaCIKKyAgICAgICAgICAgICAgICAgIHRvb2x0aXA9IiVfVUlfRXhwZXJpbWVudE1vZGVsV2l6YXJkX2Rlc2NyaXB0aW9uIj4KKyAgICAgICAgICAgIDwvY29tbWFuZD4KKyAgICAgICAgICAgIDxjb21tYW5kCisgICAgICAgICAgICAgICAgICBjb21tYW5kSWQ9Im9yZy5lY2xpcHNlLnN0ZW0udWkuY29tbWFuZC53aXoudHJpZ2dlciIKKyAgICAgICAgICAgICAgICAgIGljb249Imljb25zL2Z1bGwvY3VzdG9tb2JqMTYvVHJpZ2dlci5naWYiCisgICAgICAgICAgICAgICAgICBsYWJlbD0iJV9VSV9UcmlnZ2VyTW9kZWxXaXphcmRfbGFiZWwiCisgICAgICAgICAgICAgICAgICBzdHlsZT0icHVzaCIKKyAgICAgICAgICAgICAgICAgIHRvb2x0aXA9IiVfVUlfVHJpZ2dlck1vZGVsV2l6YXJkX2Rlc2NyaXB0aW9uICI+CisgICAgICAgICAgICA8L2NvbW1hbmQ+CisgICAgICAgICAgICA8Y29tbWFuZAorICAgICAgICAgICAgICAgICAgY29tbWFuZElkPSJvcmcuZWNsaXBzZS5zdGVtLnVpLmNvbW1hbmQud2l6LnByZWRpY2F0ZSIKKyAgICAgICAgICAgICAgICAgIGljb249Imljb25zL2Z1bGwvY3VzdG9tb2JqMTYvUHJlZGljYXRlLmdpZiIKKyAgICAgICAgICAgICAgICAgIGxhYmVsPSIlX1VJX1ByZWRpY2F0ZU1vZGVsV2l6YXJkX2xhYmVsIgorICAgICAgICAgICAgICAgICAgc3R5bGU9InB1c2giCisgICAgICAgICAgICAgICAgICB0b29sdGlwPSIlX1VJX1ByZWRpY2F0ZU1vZGVsV2l6YXJkX2Rlc2NyaXB0aW9uICI+CisgICAgICAgICAgICA8L2NvbW1hbmQ+CisgICAgICAgICAgICA8Y29tbWFuZAorICAgICAgICAgICAgICAgICAgY29tbWFuZElkPSJvcmcuZWNsaXBzZS5zdGVtLnVpLmNvbW1hbmQud2l6LnJ0c2VxdWVuY2VyIgorICAgICAgICAgICAgICAgICAgaWNvbj0iaWNvbnMvZnVsbC9jdXN0b21vYmoxNi9SZWFsVGltZVNlcXVlbmNlci5naWYiCisgICAgICAgICAgICAgICAgICBsYWJlbD0iJV9VSV9SZWFsVGltZVNlcXVlbmNlck1vZGVsV2l6YXJkX2xhYmVsIgorICAgICAgICAgICAgICAgICAgc3R5bGU9InB1c2giCisgICAgICAgICAgICAgICAgICB0b29sdGlwPSIlX1VJX1JlYWxUaW1lU2VxdWVuY2VyTW9kZWxXaXphcmRfZGVzY3JpcHRpb24iPgorICAgICAgICAgICAgPC9jb21tYW5kPiAgICAgCisgICAgICAgICAgICA8Y29tbWFuZAorICAgICAgICAgICAgICAgICAgY29tbWFuZElkPSJvcmcuZWNsaXBzZS5zdGVtLnVpLmNvbW1hbmQud2l6LnNlcXNlcXVlbmNlciIKKyAgICAgICAgICAgICAgICAgIGljb249Imljb25zL2Z1bGwvY3VzdG9tb2JqMTYvU2VxdWVuY2VyLmdpZiIKKyAgICAgICAgICAgICAgICAgIGxhYmVsPSIlX1VJX1NlcXVlbmNlck1vZGVsV2l6YXJkX2xhYmVsIgorICAgICAgICAgICAgICAgICAgc3R5bGU9InB1c2giCisgICAgICAgICAgICAgICAgICB0b29sdGlwPSIlX1VJX1NlcXVlbmNlck1vZGVsV2l6YXJkX2Rlc2NyaXB0aW9uIj4KKyAgICAgICAgICAgIDwvY29tbWFuZD4KKyAgICAgICAgICAgIDxjb21tYW5kCisgICAgICAgICAgICAgICAgICBjb21tYW5kSWQ9Im9yZy5lY2xpcHNlLnN0ZW0udWkuY29tbWFuZC53aXouc2NlbmFyaW8iCisgICAgICAgICAgICAgICAgICBpY29uPSJpY29ucy9mdWxsL2N1c3RvbW9iajE2L1NjZW5hcmlvLmdpZiIKKyAgICAgICAgICAgICAgICAgIGxhYmVsPSIlX1VJX1NjZW5hcmlvTW9kZWxXaXphcmRfbGFiZWwiCisgICAgICAgICAgICAgICAgICBzdHlsZT0icHVzaCIKKyAgICAgICAgICAgICAgICAgIHRvb2x0aXA9IiVfVUlfU2NlbmFyaW9Nb2RlbFdpemFyZF9kZXNjcmlwdGlvbiI+CisgICAgICAgICAgICA8L2NvbW1hbmQ+CisgICAgICAgICAgICA8Y29tbWFuZAorICAgICAgICAgICAgICAgICAgY29tbWFuZElkPSJvcmcuZWNsaXBzZS5zdGVtLnVpLmNvbW1hbmQud2l6Lm1vZGVsIgorICAgICAgICAgICAgICAgICAgaWNvbj0iaWNvbnMvZnVsbC9jdXN0b21vYmoxNi9Nb2RlbC5naWYiCisgICAgICAgICAgICAgICAgICBsYWJlbD0iJV9VSV9Nb2RlbE1vZGVsV2l6YXJkX2xhYmVsIgorICAgICAgICAgICAgICAgICAgc3R5bGU9InB1c2giCisgICAgICAgICAgICAgICAgICB0b29sdGlwPSIlX1VJX01vZGVsTW9kZWxXaXphcmRfZGVzY3JpcHRpb24gIj4KKyAgICAgICAgICAgIDwvY29tbWFuZD4KKyAgICAgICAgICAgIDxjb21tYW5kCisgICAgICAgICAgICAgICAgICBjb21tYW5kSWQ9Im9yZy5lY2xpcHNlLnN0ZW0udWkuY29tbWFuZC53aXoucHJvamVjdCIKKyAgICAgICAgICAgICAgICAgIGljb249Imljb25zL2Z1bGwvY3VzdG9tb2JqMTYvU3RlbUV4cGxvcmVyLmdpZiIKKyAgICAgICAgICAgICAgICAgIGxhYmVsPSIlX1VJX05ld19TVEVNX1Byb2plY3RfV2l6YXJkIgorICAgICAgICAgICAgICAgICAgc3R5bGU9InB1c2giCisgICAgICAgICAgICAgICAgICB0b29sdGlwPSIlX1VJX05ld19TVEVNX1Byb2plY3RfV2l6YXJkX1RUICI+CisgICAgICAgICAgICA8L2NvbW1hbmQ+CisgICAgICAgICAgICA8c2VwYXJhdG9yCisgICAgICAgICAgICAgICAgICBuYW1lPSJhZGRpdGlvbnMiPgorICAgICAgICAgICAgPC9zZXBhcmF0b3I+CisgICAgICAgICA8L21lbnU+CisgICAgICA8L21lbnVDb250cmlidXRpb24+CisgICAgICA8bWVudUNvbnRyaWJ1dGlvbgorICAgICAgICAgICAgbG9jYXRpb25VUkk9InRvb2xiYXI6b3JnLmVjbGlwc2UudWkubWFpbi50b29sYmFyP2FmdGVyPWFkZGl0aW9ucyI+CisgICAgICAgICA8dG9vbGJhcgorICAgICAgICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLnN0ZW0udWkudG9vbGJhci5uZXd3aXphcmRzIj4KKyAgICAgICAgICAgIDxjb21tYW5kCisgICAgICAgICAgICAgICAgICBjb21tYW5kSWQ9Im9yZy5lY2xpcHNlLnN0ZW0udWkuY29tbWFuZC53aXoucHJvamVjdCIKKyAgICAgICAgICAgICAgICAgIGljb249Imljb25zL2Z1bGwvY3VzdG9tb2JqMTYvU3RlbUV4cGxvcmVyLmdpZiIKKyAgICAgICAgICAgICAgICAgIGxhYmVsPSIlX1VJX05ld19TVEVNX1Byb2plY3RfV2l6YXJkIgorICAgICAgICAgICAgICAgICAgc3R5bGU9InB1c2giCisgICAgICAgICAgICAgICAgICB0b29sdGlwPSIlX1VJX05ld19TVEVNX1Byb2plY3RfV2l6YXJkX1RUICI+CisgICAgICAgICAgICA8L2NvbW1hbmQ+CisgICAgICAgICAgICA8Y29tbWFuZAorICAgICAgICAgICAgICAgICAgY29tbWFuZElkPSJvcmcuZWNsaXBzZS5zdGVtLnVpLmNvbW1hbmQud2l6LnNjZW5hcmlvIgorICAgICAgICAgICAgICAgICAgaWNvbj0iaWNvbnMvZnVsbC9jdXN0b21vYmoxNi9TY2VuYXJpby5naWYiCisgICAgICAgICAgICAgICAgICBsYWJlbD0iJV9VSV9TY2VuYXJpb01vZGVsV2l6YXJkX2xhYmVsIgorICAgICAgICAgICAgICAgICAgc3R5bGU9InB1c2giCisgICAgICAgICAgICAgICAgICB0b29sdGlwPSIlX1VJX1NjZW5hcmlvTW9kZWxXaXphcmRfZGVzY3JpcHRpb24iPgorICAgICAgICAgICAgPC9jb21tYW5kPgorICAgICAgICAgICAgPGNvbW1hbmQKKyAgICAgICAgICAgICAgICAgIGNvbW1hbmRJZD0ib3JnLmVjbGlwc2Uuc3RlbS51aS5jb21tYW5kLndpei5tb2RlbCIKKyAgICAgICAgICAgICAgICAgIGljb249Imljb25zL2Z1bGwvY3VzdG9tb2JqMTYvTW9kZWwuZ2lmIgorICAgICAgICAgICAgICAgICAgbGFiZWw9IiVfVUlfTW9kZWxNb2RlbFdpemFyZF9sYWJlbCIKKyAgICAgICAgICAgICAgICAgIHN0eWxlPSJwdXNoIgorICAgICAgICAgICAgICAgICAgdG9vbHRpcD0iJV9VSV9Nb2RlbE1vZGVsV2l6YXJkX2Rlc2NyaXB0aW9uICI+CisgICAgICAgICAgICA8L2NvbW1hbmQ+CisgICAgICAgICAgICA8Y29tbWFuZAorICAgICAgICAgICAgICAgICAgY29tbWFuZElkPSJvcmcuZWNsaXBzZS5zdGVtLnVpLmNvbW1hbmQud2l6LnNlcXNlcXVlbmNlciIKKyAgICAgICAgICAgICAgICAgIGljb249Imljb25zL2Z1bGwvY3VzdG9tb2JqMTYvU2VxdWVuY2VyLmdpZiIKKyAgICAgICAgICAgICAgICAgIGxhYmVsPSIlX1VJX1NlcXVlbmNlck1vZGVsV2l6YXJkX2xhYmVsIgorICAgICAgICAgICAgICAgICAgc3R5bGU9InB1c2giCisgICAgICAgICAgICAgICAgICB0b29sdGlwPSIlX1VJX1NlcXVlbmNlck1vZGVsV2l6YXJkX2Rlc2NyaXB0aW9uIj4KKyAgICAgICAgICAgIDwvY29tbWFuZD4KKyAgICAgICAgICAgIDxjb21tYW5kCisgICAgICAgICAgICAgICAgICBjb21tYW5kSWQ9Im9yZy5lY2xpcHNlLnN0ZW0udWkuY29tbWFuZC53aXouZXhwZXJpbWVudCIKKyAgICAgICAgICAgICAgICAgIGljb249Imljb25zL2Z1bGwvY3VzdG9tb2JqMTYvRXhwZXJpbWVudC5naWYiCisgICAgICAgICAgICAgICAgICBsYWJlbD0iJV9VSV9FeHBlcmltZW50TW9kZWxXaXphcmRfbGFiZWwiCisgICAgICAgICAgICAgICAgICBzdHlsZT0icHVzaCIKKyAgICAgICAgICAgICAgICAgIHRvb2x0aXA9IiVfVUlfRXhwZXJpbWVudE1vZGVsV2l6YXJkX2Rlc2NyaXB0aW9uIj4KKyAgICAgICAgICAgIDwvY29tbWFuZD4KKyAgICAgICAgICAgIDxjb21tYW5kCisgICAgICAgICAgICAgICAgICBjb21tYW5kSWQ9Im9yZy5lY2xpcHNlLnN0ZW0udWkuY29tbWFuZC53aXoudHJpZ2dlciIKKyAgICAgICAgICAgICAgICAgIGljb249Imljb25zL2Z1bGwvY3VzdG9tb2JqMTYvVHJpZ2dlci5naWYiCisgICAgICAgICAgICAgICAgICBsYWJlbD0iJV9VSV9UcmlnZ2VyTW9kZWxXaXphcmRfbGFiZWwiCisgICAgICAgICAgICAgICAgICBzdHlsZT0icHVzaCIKKyAgICAgICAgICAgICAgICAgIHRvb2x0aXA9IiVfVUlfVHJpZ2dlck1vZGVsV2l6YXJkX2Rlc2NyaXB0aW9uICI+CisgICAgICAgICAgICA8L2NvbW1hbmQ+CisgICAgICAgICAgICA8Y29tbWFuZAorICAgICAgICAgICAgICAgICAgY29tbWFuZElkPSJvcmcuZWNsaXBzZS5zdGVtLnVpLmNvbW1hbmQud2l6LnByZWRpY2F0ZSIKKyAgICAgICAgICAgICAgICAgIGljb249Imljb25zL2Z1bGwvY3VzdG9tb2JqMTYvUHJlZGljYXRlLmdpZiIKKyAgICAgICAgICAgICAgICAgIGxhYmVsPSIlX1VJX1ByZWRpY2F0ZU1vZGVsV2l6YXJkX2xhYmVsIgorICAgICAgICAgICAgICAgICAgc3R5bGU9InB1c2giCisgICAgICAgICAgICAgICAgICB0b29sdGlwPSIlX1VJX1ByZWRpY2F0ZU1vZGVsV2l6YXJkX2Rlc2NyaXB0aW9uICI+CisgICAgICAgICAgICA8L2NvbW1hbmQ+CisgICAgICAgICAgICAKKzwhLS0KKyAgICAgICAgICAgIDxjb21tYW5kCisgICAgICAgICAgICAgICAgICBjb21tYW5kSWQ9Im9yZy5lY2xpcHNlLnN0ZW0udWkuY29tbWFuZC53aXoubG9nZ2VyIgorICAgICAgICAgICAgICAgICAgaWNvbj0iaWNvbnMvZnVsbC9jdXN0b21vYmoxNi9Mb2dnZXIuZ2lmIgorICAgICAgICAgICAgICAgICAgbGFiZWw9IiVfVUlfTG9nZ2VyTW9kZWxXaXphcmRfbGFiZWwiCisgICAgICAgICAgICAgICAgICBzdHlsZT0icHVzaCIKKyAgICAgICAgICAgICAgICAgIHRvb2x0aXA9IiVfVUlfTG9nZ2VyTW9kZWxXaXphcmRfZGVzY3JpcHRpb24gIj4KKyAgICAgICAgICAgIDwvY29tbWFuZD4KKy0tPiAgICAgICAgICAgIAorICAgICAgICAgICAgCis8IS0tICAgICAgICAgIAorICAgICAgICAgICAgPGNvbW1hbmQKKyAgICAgICAgICAgICAgICAgIGNvbW1hbmRJZD0ib3JnLmVjbGlwc2Uuc3RlbS51aS5jb21tYW5kLndpei5ydHNlcXVlbmNlciIKKyAgICAgICAgICAgICAgICAgIGljb249Imljb25zL2Z1bGwvY3VzdG9tb2JqMTYvUmVhbFRpbWVTZXF1ZW5jZXIuZ2lmIgorICAgICAgICAgICAgICAgICAgbGFiZWw9IiVfVUlfUmVhbFRpbWVTZXF1ZW5jZXJNb2RlbFdpemFyZF9sYWJlbCIKKyAgICAgICAgICAgICAgICAgIHN0eWxlPSJwdXNoIgorICAgICAgICAgICAgICAgICAgdG9vbHRpcD0iJV9VSV9SZWFsVGltZVNlcXVlbmNlck1vZGVsV2l6YXJkX2Rlc2NyaXB0aW9uIj4KKyAgICAgICAgICAgIDwvY29tbWFuZD4KKy0tPiAgICAgICAgICAgCisgICAgICAgICAgICA8c2VwYXJhdG9yCisgICAgICAgICAgICAgICAgICBuYW1lPSJhZGRpdGlvbnMiPgorICAgICAgICAgICAgPC9zZXBhcmF0b3I+CisgICAgICAgICA8L3Rvb2xiYXI+CisgICAgICA8L21lbnVDb250cmlidXRpb24+CisgICAgIDxtZW51Q29udHJpYnV0aW9uCisgICAgICAgICAgIGxvY2F0aW9uVVJJPSJ0b29sYmFyOm9yZy5lY2xpcHNlLnVpLm1haW4udG9vbGJhcj9hZnRlcj1hZGRpdGlvbnMiPgorICAgICAgICA8dG9vbGJhcgorICAgICAgICAgICAgICBpZD0ib3JnLmVjbGlwc2Uuc3RlbS51aS50b29sYmFyIj4KKyAgICAgICAgICAgPGNvbW1hbmQKKyAgICAgICAgICAgICAgICAgY29tbWFuZElkPSJvcmcuZWNsaXBzZS5zdGVtLnVpLmNvbW1hbmQucnVuIgorICAgICAgICAgICAgICAgICBkaXNhYmxlZEljb249Imljb25zL2Z1bGwvYWN0aW9uczE2L2Rpc2FibGVkUnVuLmdpZiIKKyAgICAgICAgICAgICAgICAgaWNvbj0iaWNvbnMvZnVsbC9hY3Rpb25zMTYvcnVuLmdpZiIKKyAgICAgICAgICAgICAgICAgbGFiZWw9IiVfVUlfU1RFTV9Db21tYW5kX1J1biIKKyAgICAgICAgICAgICAgICAgbW5lbW9uaWM9IiVfVUlfU1RFTV9Db21tYW5kX1J1bk1uZSIKKyAgICAgICAgICAgICAgICAgc3R5bGU9InB1c2giCisgICAgICAgICAgICAgICAgIHRvb2x0aXA9IiVfVUlfU1RFTV9Db21tYW5kX1J1blRUIj4KKyAgICAgICAgICAgPC9jb21tYW5kPgorICAgICAgICAgICA8Y29tbWFuZAorICAgICAgICAgICAgICAgICBjb21tYW5kSWQ9Im9yZy5lY2xpcHNlLnN0ZW0udWkuY29tbWFuZC5wYXVzZSIKKyAgICAgICAgICAgICAgICAgZGlzYWJsZWRJY29uPSJpY29ucy9mdWxsL2FjdGlvbnMxNi9kaXNhYmxlZFBhdXNlLmdpZiIKKyAgICAgICAgICAgICAgICAgaWNvbj0iaWNvbnMvZnVsbC9hY3Rpb25zMTYvcGF1c2UuZ2lmIgorICAgICAgICAgICAgICAgICBsYWJlbD0iJV9VSV9TVEVNX0NvbW1hbmRfUGF1c2UiCisgICAgICAgICAgICAgICAgIG1uZW1vbmljPSIlX1VJX1NURU1fQ29tbWFuZF9QYXVzZU1uZSIKKyAgICAgICAgICAgICAgICAgc3R5bGU9InB1c2giCisgICAgICAgICAgICAgICAgIHRvb2x0aXA9IiVfVUlfU1RFTV9Db21tYW5kX1BhdXNlVFQiPgorICAgICAgICAgICA8L2NvbW1hbmQ+CisgICAgICAgICAgIDxjb21tYW5kCisgICAgICAgICAgICAgICAgIGNvbW1hbmRJZD0ib3JnLmVjbGlwc2Uuc3RlbS51aS5jb21tYW5kLnN0ZXAiCisgICAgICAgICAgICAgICAgIGRpc2FibGVkSWNvbj0iaWNvbnMvZnVsbC9hY3Rpb25zMTYvZGlzYWJsZWRTdGVwLmdpZiIKKyAgICAgICAgICAgICAgICAgaWNvbj0iaWNvbnMvZnVsbC9hY3Rpb25zMTYvc3RlcC5naWYiCisgICAgICAgICAgICAgICAgIGxhYmVsPSIlX1VJX1NURU1fQ29tbWFuZF9TdGVwIgorICAgICAgICAgICAgICAgICBtbmVtb25pYz0iJV9VSV9TVEVNX0NvbW1hbmRfU3RlcE1uZSIKKyAgICAgICAgICAgICAgICAgc3R5bGU9InB1c2giCisgICAgICAgICAgICAgICAgIHRvb2x0aXA9IiVfVUlfU1RFTV9Db21tYW5kX1N0ZXBUVCI+CisgICAgICAgICAgIDwvY29tbWFuZD4KKyAgICAgICAgICAgPGNvbW1hbmQKKyAgICAgICAgICAgICAgICAgY29tbWFuZElkPSJvcmcuZWNsaXBzZS5zdGVtLnVpLmNvbW1hbmQucmVzZXQiCisgICAgICAgICAgICAgICAgIGRpc2FibGVkSWNvbj0iaWNvbnMvZnVsbC9hY3Rpb25zMTYvZGlzYWJsZWRSZXNldC5naWYiCisgICAgICAgICAgICAgICAgIGljb249Imljb25zL2Z1bGwvYWN0aW9uczE2L3Jlc2V0LmdpZiIKKyAgICAgICAgICAgICAgICAgbGFiZWw9IiVfVUlfU1RFTV9Db21tYW5kX1Jlc2V0IgorICAgICAgICAgICAgICAgICBtbmVtb25pYz0iJV9VSV9TVEVNX0NvbW1hbmRfUmVzZXRNbmUiCisgICAgICAgICAgICAgICAgIHN0eWxlPSJwdXNoIgorICAgICAgICAgICAgICAgICB0b29sdGlwPSIlX1VJX1NURU1fQ29tbWFuZF9SZXNldFRUIj4KKyAgICAgICAgICAgPC9jb21tYW5kPgorICAgICAgICAgICA8Y29tbWFuZAorICAgICAgICAgICAgICAgICBjb21tYW5kSWQ9Im9yZy5lY2xpcHNlLnN0ZW0udWkuY29tbWFuZC5zdG9wIgorICAgICAgICAgICAgICAgICBkaXNhYmxlZEljb249Imljb25zL2Z1bGwvYWN0aW9uczE2L2Rpc2FibGVkU3RvcC5naWYiCisgICAgICAgICAgICAgICAgIGljb249Imljb25zL2Z1bGwvYWN0aW9uczE2L3N0b3AuZ2lmIgorICAgICAgICAgICAgICAgICBsYWJlbD0iJV9VSV9TVEVNX0NvbW1hbmRfU3RvcCIKKyAgICAgICAgICAgICAgICAgbW5lbW9uaWM9IiVfVUlfU1RFTV9Db21tYW5kX1N0b3BNbmUiCisgICAgICAgICAgICAgICAgIHN0eWxlPSJwdXNoIgorICAgICAgICAgICAgICAgICB0b29sdGlwPSIlX1VJX1NURU1fQ29tbWFuZF9TdG9wVFQiPgorICAgICAgICAgICA8L2NvbW1hbmQ+CisgICAgICAgICAgIDxzZXBhcmF0b3IKKyAgICAgICAgICAgICAgICAgbmFtZT0iYWRkaXRpb25zIj4KKyAgICAgICAgICAgPC9zZXBhcmF0b3I+CisgICAgICAgIDwvdG9vbGJhcj4KKyAgICAgPC9tZW51Q29udHJpYnV0aW9uPgorICAgICA8bWVudUNvbnRyaWJ1dGlvbgorICAgICAgICAgICBsb2NhdGlvblVSST0icG9wdXA6b3JnLmVjbGlwc2UudWkucG9wdXAuYW55P2FmdGVyPWFkZGl0aW9ucyI+CisgICAgICAgIDxjb21tYW5kCisgICAgICAgICAgICAgIGNvbW1hbmRJZD0ib3JnLmVjbGlwc2Uuc3RlbS51aS5jb21tYW5kLnJ1biIKKyAgICAgICAgICAgICAgZGlzYWJsZWRJY29uPSJpY29ucy9mdWxsL2FjdGlvbnMxNi9kaXNhYmxlZFJ1bi5naWYiCisgICAgICAgICAgICAgIGljb249Imljb25zL2Z1bGwvYWN0aW9uczE2L3J1bi5naWYiCisgICAgICAgICAgICAgIGxhYmVsPSIlX1VJX1NURU1fQ29tbWFuZF9SdW4iCisgICAgICAgICAgICAgIG1uZW1vbmljPSIlX1VJX1NURU1fQ29tbWFuZF9SdW5NbmUiCisgICAgICAgICAgICAgIHN0eWxlPSJwdXNoIgorICAgICAgICAgICAgICB0b29sdGlwPSIlX1VJX1NURU1fQ29tbWFuZF9SdW5UVCI+CisgICAgICAgICAgIDx2aXNpYmxlV2hlbgorICAgICAgICAgICAgICAgICBjaGVja0VuYWJsZWQ9ImZhbHNlIj4KKyAgICAgICAgICAgICAgPHJlZmVyZW5jZQorICAgICAgICAgICAgICAgICAgICBkZWZpbml0aW9uSWQ9Im9yZy5lY2xpcHNlLnN0ZW0udWkuaXNleGVjdXRhYmxlIj4KKyAgICAgICAgICAgICAgPC9yZWZlcmVuY2U+CisgICAgICAgICAgIDwvdmlzaWJsZVdoZW4+CisgICAgICAgIDwvY29tbWFuZD4KKyAgICAgICAgPGNvbW1hbmQKKyAgICAgICAgICAgICAgY29tbWFuZElkPSJvcmcuZWNsaXBzZS5zdGVtLnVpLmNvbW1hbmQuc3RlcCIKKyAgICAgICAgICAgICAgZGlzYWJsZWRJY29uPSJpY29ucy9mdWxsL2FjdGlvbnMxNi9kaXNhYmxlZFN0ZXAuZ2lmIgorICAgICAgICAgICAgICBpY29uPSJpY29ucy9mdWxsL2FjdGlvbnMxNi9zdGVwLmdpZiIKKyAgICAgICAgICAgICAgbGFiZWw9IiVfVUlfU1RFTV9Db21tYW5kX1N0ZXAiCisgICAgICAgICAgICAgIG1uZW1vbmljPSIlX1VJX1NURU1fQ29tbWFuZF9TdGVwTW5lIgorICAgICAgICAgICAgICBzdHlsZT0icHVzaCIKKyAgICAgICAgICAgICAgdG9vbHRpcD0iJV9VSV9TVEVNX0NvbW1hbmRfU3RlcFRUIj4KKyAgICAgICAgICAgPHZpc2libGVXaGVuCisgICAgICAgICAgICAgICAgIGNoZWNrRW5hYmxlZD0iZmFsc2UiPgorICAgICAgICAgICAgICA8cmVmZXJlbmNlCisgICAgICAgICAgICAgICAgICAgIGRlZmluaXRpb25JZD0ib3JnLmVjbGlwc2Uuc3RlbS51aS5pc2V4ZWN1dGFibGUiPgorICAgICAgICAgICAgICA8L3JlZmVyZW5jZT4KKyAgICAgICAgICAgPC92aXNpYmxlV2hlbj4KKyAgICAgICAgPC9jb21tYW5kPgorICAgICA8L21lbnVDb250cmlidXRpb24+CisgICAgICA8bWVudUNvbnRyaWJ1dGlvbgorICAgICAgICAgICBsb2NhdGlvblVSST0icG9wdXA6b3JnLmVjbGlwc2UudWkucG9wdXAuYW55P2FmdGVyPWFkZGl0aW9ucyI+CisgICAgICAgIDxjb21tYW5kCisgICAgICAgICAgICAgIGNvbW1hbmRJZD0ib3JnLmVjbGlwc2Uuc3RlbS51aS5jb21tYW5kLm5ld21vZGlmaWVyd2l6YXJkIgorICAgICAgICAgICAgICBpY29uPSJpY29ucy9mdWxsL2N1c3RvbW9iajE2L01vZGlmaWVyLmdpZiIKKyAgICAgICAgICAgICAgbGFiZWw9IiVfVUlfU1RFTV9Db21tYW5kX05ld01vZFdpeiIKKyAgICAgICAgICAgICAgc3R5bGU9InB1c2giCisgICAgICAgICAgICAgIHRvb2x0aXA9IiVfVUlfU1RFTV9Db21tYW5kX05ld01vZFdpelRUIj4KKyAgICAgICAgICAgPHZpc2libGVXaGVuCisgICAgICAgICAgICAgICAgIGNoZWNrRW5hYmxlZD0iZmFsc2UiPgorICAgICAgICAgICAgICA8cmVmZXJlbmNlCisgICAgICAgICAgICAgICAgICAgIGRlZmluaXRpb25JZD0ib3JnLmVjbGlwc2Uuc3RlbS51aS5pc01vZGlmaWFibGVJZGVudGlmaWFibGUiPgorICAgICAgICAgICAgICA8L3JlZmVyZW5jZT4KKyAgICAgICAgICAgPC92aXNpYmxlV2hlbj4KKyAgICAgICAgPC9jb21tYW5kPgorICAgICA8L21lbnVDb250cmlidXRpb24+CisgICAgIDxtZW51Q29udHJpYnV0aW9uCisgICAgICAgICAgIGxvY2F0aW9uVVJJPSJwb3B1cDpvcmcuZWNsaXBzZS51aS5wb3B1cC5hbnk/YWZ0ZXI9YWRkaXRpb25zIj4KKyAgICAgICAgPGNvbW1hbmQKKyAgICAgICAgICAgICAgY29tbWFuZElkPSJvcmcuZWNsaXBzZS5zdGVtLnVpLmNvbW1hbmQuZGVsZXRlaWRlbnRpZmlhYmxlIgorICAgICAgICAgICAgICBpY29uPSJpY29ucy9mdWxsL2N1c3RvbW9iajE2L0RlbGV0ZS5naWYiCisgICAgICAgICAgICAgIGxhYmVsPSIlX1VJX1NURU1fQ29tbWFuZF9EZWxldGUiCisgICAgICAgICAgICAgIHN0eWxlPSJwdXNoIgorICAgICAgICAgICAgICB0b29sdGlwPSIlX1VJX1NURU1fQ29tbWFuZF9EZWxldGVUVCI+CisgICAgICAgICAgICA8dmlzaWJsZVdoZW4KKyAgICAgICAgICAgICAgICAgY2hlY2tFbmFibGVkPSJmYWxzZSI+CisgICAgICAgICAgICAgIDxyZWZlcmVuY2UKKyAgICAgICAgICAgICAgICAgICAgZGVmaW5pdGlvbklkPSJvcmcuZWNsaXBzZS5zdGVtLnVpLmlzRGVsZXRhYmxlSWRlbnRpZmlhYmxlIj4KKyAgICAgICAgICAgICAgPC9yZWZlcmVuY2U+CisgICAgICAgICAgIDwvdmlzaWJsZVdoZW4+CisgICAgICAgIDwvY29tbWFuZD4KKyAgICAgPC9tZW51Q29udHJpYnV0aW9uPgorICAgICAgPG1lbnVDb250cmlidXRpb24KKyAgICAgICAgICAgbG9jYXRpb25VUkk9InBvcHVwOm9yZy5lY2xpcHNlLnVpLnBvcHVwLmFueT9hZnRlcj1hZGRpdGlvbnMiPgorICAgICAgICA8Y29tbWFuZAorICAgICAgICAgICAgICBjb21tYW5kSWQ9Im9yZy5lY2xpcHNlLnN0ZW0udWkuY29tbWFuZC5yZW5hbWVpZGVudGlmaWFibGUiCisgICAgICAgICAgICAgIGljb249Imljb25zL2Z1bGwvY3VzdG9tb2JqMTYvUmVmYWN0b3IuZ2lmIgorICAgICAgICAgICAgICBsYWJlbD0iJV9VSV9TVEVNX0NvbW1hbmRfUmVmYWN0b3JfUmVuYW1lIgorICAgICAgICAgICAgICBzdHlsZT0icHVzaCIKKyAgICAgICAgICAgICAgdG9vbHRpcD0iJV9VSV9TVEVNX0NvbW1hbmRfUmVmYWN0b3JfUmVuYW1lVFQiPgorICAgICAgICAgICAgPHZpc2libGVXaGVuCisgICAgICAgICAgICAgICAgIGNoZWNrRW5hYmxlZD0iZmFsc2UiPgorICAgICAgICAgICAgICA8cmVmZXJlbmNlCisgICAgICAgICAgICAgICAgICAgIGRlZmluaXRpb25JZD0ib3JnLmVjbGlwc2Uuc3RlbS51aS5pc1JlZmFjdG9ySWRlbnRpZmlhYmxlIj4KKyAgICAgICAgICAgICAgPC9yZWZlcmVuY2U+CisgICAgICAgICAgIDwvdmlzaWJsZVdoZW4+CisgICAgICAgIDwvY29tbWFuZD4KKyAgICAgPC9tZW51Q29udHJpYnV0aW9uPgorICAgICA8bWVudUNvbnRyaWJ1dGlvbgorICAgICAgICAgICBsb2NhdGlvblVSST0icG9wdXA6b3JnLmVjbGlwc2UudWkucG9wdXAuYW55P2FmdGVyPWFkZGl0aW9ucyI+CisgICAgICAgIDxjb21tYW5kCisgICAgICAgICAgICAgIGNvbW1hbmRJZD0ib3JnLmVjbGlwc2Uuc3RlbS51aS5jb21tYW5kLmNvcHlpZGVudGlmaWFibGUiCisgICAgICAgICAgICAgIGljb249Imljb25zL2Z1bGwvY3VzdG9tb2JqMTYvQ29weS5naWYiCisgICAgICAgICAgICAgIGxhYmVsPSIlX1VJX1NURU1fQ29tbWFuZF9SZWZhY3Rvcl9Db3B5ICIKKyAgICAgICAgICAgICAgc3R5bGU9InB1c2giCisgICAgICAgICAgICAgIHRvb2x0aXA9IiVfVUlfU1RFTV9Db21tYW5kX1JlZmFjdG9yX0NvcHlUVCI+CisgICAgICAgICAgICA8dmlzaWJsZVdoZW4KKyAgICAgICAgICAgICAgICAgY2hlY2tFbmFibGVkPSJmYWxzZSI+CisgICAgICAgICAgICAgIDxyZWZlcmVuY2UKKyAgICAgICAgICAgICAgICAgICAgZGVmaW5pdGlvbklkPSJvcmcuZWNsaXBzZS5zdGVtLnVpLmlzQ29weWFibGVJZGVudGlmaWFibGUiPgorICAgICAgICAgICAgICA8L3JlZmVyZW5jZT4KKyAgICAgICAgICAgPC92aXNpYmxlV2hlbj4KKyAgICAgICAgPC9jb21tYW5kPgorICAgICA8L21lbnVDb250cmlidXRpb24+CisgIDwvZXh0ZW5zaW9uPgorICA8ZXh0ZW5zaW9uCisgICAgICAgIHBvaW50PSJvcmcuZWNsaXBzZS51aS5jb21tYW5kcyI+CisgICAgIDxjYXRlZ29yeQorICAgICAgICAgICBkZXNjcmlwdGlvbj0iJV9VSV9TVEVNX1dpekNtZF9DYXRfRGVzYyIKKyAgICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLnN0ZW0udWkud2l6YXJkcyIKKyAgICAgICAgICAgbmFtZT0iJV9VSV9TVEVNX1dpekNtZF9DYXRfTmFtZSI+CisgICAgIDwvY2F0ZWdvcnk+CisgICAgIDxjb21tYW5kCisgICAgICAgICAgIGRlZmF1bHRIYW5kbGVyPSJvcmcuZWNsaXBzZS5zdGVtLnVpLndpemFyZHMuTmV3U1RFTVByb2plY3RXaXphcmQkTmV3U1RFTVByb2plY3RXaXphcmRDb21tYW5kSGFuZGxlciIKKyAgICAgICAgICAgZGVzY3JpcHRpb249IiVfVUlfTmV3X1NURU1fUHJvamVjdF9XaXphcmRfVFQgIgorICAgICAgICAgICBpZD0ib3JnLmVjbGlwc2Uuc3RlbS51aS5jb21tYW5kLndpei5wcm9qZWN0IgorICAgICAgICAgICBuYW1lPSIlX1VJX05ld19TVEVNX1Byb2plY3RfV2l6YXJkIj4KKyAgICAgPC9jb21tYW5kPgorICAgICA8Y29tbWFuZAorICAgICAgICAgICBjYXRlZ29yeUlkPSJvcmcuZWNsaXBzZS5zdGVtLnVpLndpemFyZHMiCisgICAgICAgICAgIGRlZmF1bHRIYW5kbGVyPSJvcmcuZWNsaXBzZS5zdGVtLnVpLndpemFyZHMuTmV3U2NlbmFyaW9XaXphcmQkTmV3U2NlbmFyaW9XaXphcmRDb21tYW5kSGFuZGxlciIKKyAgICAgICAgICAgZGVzY3JpcHRpb249IiVfVUlfU2NlbmFyaW9Nb2RlbFdpemFyZF9kZXNjcmlwdGlvbiIKKyAgICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLnN0ZW0udWkuY29tbWFuZC53aXouc2NlbmFyaW8iCisgICAgICAgICAgIG5hbWU9IiVfVUlfU2NlbmFyaW9Nb2RlbFdpemFyZF9sYWJlbCI+CisgICAgIDwvY29tbWFuZD4KKyAgICAgPGNvbW1hbmQKKyAgICAgICAgICAgY2F0ZWdvcnlJZD0ib3JnLmVjbGlwc2Uuc3RlbS51aS53aXphcmRzIgorICAgICAgICAgICBkZWZhdWx0SGFuZGxlcj0ib3JnLmVjbGlwc2Uuc3RlbS51aS53aXphcmRzLk5ld01vZGVsV2l6YXJkJE5ld01vZGVsV2l6YXJkQ29tbWFuZEhhbmRsZXIiCisgICAgICAgICAgIGRlc2NyaXB0aW9uPSIlX1VJX01vZGVsTW9kZWxXaXphcmRfZGVzY3JpcHRpb24gIgorICAgICAgICAgICBpZD0ib3JnLmVjbGlwc2Uuc3RlbS51aS5jb21tYW5kLndpei5tb2RlbCIKKyAgICAgICAgICAgbmFtZT0iJV9VSV9Nb2RlbE1vZGVsV2l6YXJkX2xhYmVsIj4KKyAgICAgPC9jb21tYW5kPgorICAgICA8Y29tbWFuZAorICAgICAgICAgICBkZWZhdWx0SGFuZGxlcj0ib3JnLmVjbGlwc2Uuc3RlbS51aS53aXphcmRzLk5ld1NlcXVlbnRpYWxTZXF1ZW5jZXJXaXphcmQkTmV3Rml4ZWRTZXF1ZW50aWFsU2VxdWVuY2VyV2l6YXJkJE5ld1NlcXVlbnRpYWxTZXF1ZW5jZXJXaXphcmRDb21tYW5kSGFuZGxlciIKKyAgICAgICAgICAgZGVzY3JpcHRpb249IiVfVUlfU2VxdWVuY2VyTW9kZWxXaXphcmRfZGVzY3JpcHRpb24iCisgICAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5zdGVtLnVpLmNvbW1hbmQud2l6LnNlcXNlcXVlbmNlciIKKyAgICAgICAgICAgbmFtZT0iJV9VSV9TZXF1ZW5jZXJNb2RlbFdpemFyZF9sYWJlbCI+CisgICAgIDwvY29tbWFuZD4KKyAgICAgPGNvbW1hbmQKKyAgICAgICAgICAgY2F0ZWdvcnlJZD0ib3JnLmVjbGlwc2Uuc3RlbS51aS53aXphcmRzIgorICAgICAgICAgICBkZWZhdWx0SGFuZGxlcj0ib3JnLmVjbGlwc2Uuc3RlbS51aS53aXphcmRzLk5ld1ByZWRpY2F0ZVdpemFyZCROZXdQcmVkaWNhdGVXaXphcmRDb21tYW5kSGFuZGxlciIKKyAgICAgICAgICAgZGVzY3JpcHRpb249IiVfVUlfUHJlZGljYXRlTW9kZWxXaXphcmRfZGVzY3JpcHRpb24gIgorICAgICAgICAgICBpZD0ib3JnLmVjbGlwc2Uuc3RlbS51aS5jb21tYW5kLndpei5wcmVkaWNhdGUiCisgICAgICAgICAgIG5hbWU9IiVfVUlfUHJlZGljYXRlTW9kZWxXaXphcmRfbGFiZWwiPgorICAgICA8L2NvbW1hbmQ+CisgICAgIDxjb21tYW5kCisgICAgICAgICAgIGRlZmF1bHRIYW5kbGVyPSJvcmcuZWNsaXBzZS5zdGVtLnVpLndpemFyZHMuTmV3U2VxdWVudGlhbFNlcXVlbmNlcldpemFyZCROZXdSZWFsVGltZVNlcXVlbmNlcldpemFyZCROZXdSZWFsVGltZVNlcXVlbmNlcldpemFyZENvbW1hbmRIYW5kbGVyIgorICAgICAgICAgICBkZXNjcmlwdGlvbj0iJV9VSV9SZWFsVGltZVNlcXVlbmNlck1vZGVsV2l6YXJkX2Rlc2NyaXB0aW9uIgorICAgICAgICAgICBpZD0ib3JnLmVjbGlwc2Uuc3RlbS51aS5jb21tYW5kLndpei5ydHNlcXVlbmNlciIKKyAgICAgICAgICAgbmFtZT0iJV9VSV9SZWFsVGltZVNlcXVlbmNlck1vZGVsV2l6YXJkX2xhYmVsIj4KKyAgICAgPC9jb21tYW5kPgorICAgICA8Y29tbWFuZAorICAgICAgICAgICBjYXRlZ29yeUlkPSJvcmcuZWNsaXBzZS5zdGVtLnVpLndpemFyZHMiCisgICAgICAgICAgIGRlZmF1bHRIYW5kbGVyPSJvcmcuZWNsaXBzZS5zdGVtLnVpLndpemFyZHMuTmV3VHJpZ2dlcldpemFyZCROZXdUcmlnZ2VyV2l6YXJkQ29tbWFuZEhhbmRsZXIiCisgICAgICAgICAgIGRlc2NyaXB0aW9uPSIlX1VJX1RyaWdnZXJNb2RlbFdpemFyZF9kZXNjcmlwdGlvbiAiCisgICAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5zdGVtLnVpLmNvbW1hbmQud2l6LnRyaWdnZXIiCisgICAgICAgICAgIG5hbWU9IiVfVUlfVHJpZ2dlck1vZGVsV2l6YXJkX2xhYmVsIj4KKyAgICAgPC9jb21tYW5kPgorICAgICA8Y29tbWFuZAorICAgICAgICAgICBkZWZhdWx0SGFuZGxlcj0ib3JnLmVjbGlwc2Uuc3RlbS51aS53aXphcmRzLk5ld0V4cGVyaW1lbnRXaXphcmQkTmV3RXhwZXJpbWVudFdpemFyZENvbW1hbmRIYW5kbGVyIgorICAgICAgICAgICBkZXNjcmlwdGlvbj0iJV9VSV9FeHBlcmltZW50TW9kZWxXaXphcmRfZGVzY3JpcHRpb24iCisgICAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5zdGVtLnVpLmNvbW1hbmQud2l6LmV4cGVyaW1lbnQiCisgICAgICAgICAgIG5hbWU9IiVfVUlfRXhwZXJpbWVudE1vZGVsV2l6YXJkX2xhYmVsIj4KKyAgICAgPC9jb21tYW5kPgorICAgICAKKzwhLS0gICAgIAorICAgICA8Y29tbWFuZAorICAgICAgICAgICBjYXRlZ29yeUlkPSJvcmcuZWNsaXBzZS5zdGVtLnVpLndpemFyZHMiCisgICAgICAgICAgIGRlZmF1bHRIYW5kbGVyPSJvcmcuZWNsaXBzZS5zdGVtLnVpLndpemFyZHMuTmV3TG9nZ2VyV2l6YXJkJE5ld0xvZ2dlcldpemFyZENvbW1hbmRIYW5kbGVyIgorICAgICAgICAgICBkZXNjcmlwdGlvbj0iJV9VSV9Mb2dnZXJNb2RlbFdpemFyZF9kZXNjcmlwdGlvbiIKKyAgICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLnN0ZW0udWkuY29tbWFuZC53aXoubG9nZ2VyIgorICAgICAgICAgICBuYW1lPSIlX1VJX0xvZ2dlck1vZGVsV2l6YXJkX2xhYmVsIj4KKyAgICAgPC9jb21tYW5kPiAgICAgCistLT4KKyAgICAgCisgICAgICA8Y29tbWFuZAorICAgICAgICAgICBkZWZhdWx0SGFuZGxlcj0ib3JnLmVjbGlwc2Uuc3RlbS51aS5oYW5kbGVycy5EZWxldGVIYW5kbGVyIgorICAgICAgICAgICBkZXNjcmlwdGlvbj0iJV9VSV9EZWxldGVfZGVzY3JpcHRpb24iCisgICAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5zdGVtLnVpLmNvbW1hbmQuZGVsZXRlaWRlbnRpZmlhYmxlIgorICAgICAgICAgICBuYW1lPSIlX1VJX0RlbGV0ZV9sYWJlbCI+CisgICAgIDwvY29tbWFuZD4KKyAgICAgPGNvbW1hbmQKKyAgICAgICAgICAgZGVmYXVsdEhhbmRsZXI9Im9yZy5lY2xpcHNlLnN0ZW0udWkuaGFuZGxlcnMuUmVmYWN0b3JIYW5kbGVyJFJlbmFtZUhhbmRsZXIiCisgICAgICAgICAgIGRlc2NyaXB0aW9uPSIlX1VJX1JlZmFjdG9yX1JlbmFtZV9kZXNjcmlwdGlvbiIKKyAgICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLnN0ZW0udWkuY29tbWFuZC5yZW5hbWVpZGVudGlmaWFibGUiCisgICAgICAgICAgIG5hbWU9IiVfVUlfUmVmYWN0b3JfUmVuYW1lX2xhYmVsIj4KKyAgICAgPC9jb21tYW5kPgorICAgICA8Y29tbWFuZAorICAgICAgICAgICBkZWZhdWx0SGFuZGxlcj0ib3JnLmVjbGlwc2Uuc3RlbS51aS5oYW5kbGVycy5SZWZhY3RvckhhbmRsZXIkQ29weUhhbmRsZXIiCisgICAgICAgICAgIGRlc2NyaXB0aW9uPSIlX1VJX0NvcHlfZGVzY3JpcHRpb24iCisgICAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5zdGVtLnVpLmNvbW1hbmQuY29weWlkZW50aWZpYWJsZSIKKyAgICAgICAgICAgbmFtZT0iJV9VSV9Db3B5X2xhYmVsIj4KKyAgICAgPC9jb21tYW5kPgorICAgICAKKyAgICAgCisgICAgPGNvbW1hbmQKKyAgICAgICAgICAgZGVzY3JpcHRpb249IlN3aXRjaGVzIExhbmd1YWdlIgorICAgICAgICAgICBpZD0ib3JnLmVjbGlwc2Uuc3RlbS51aS5zd2l0Y2hMYW5ndWFnZSIKKyAgICAgICAgICAgbmFtZT0iU3dpdGNoIExhbmd1YWdlIj4KKyAgICAgPC9jb21tYW5kPgorICAgICAKKyAgPC9leHRlbnNpb24+CisgIAorICA8ZXh0ZW5zaW9uCisgICAgICAgIHBvaW50PSJvcmcuZWNsaXBzZS51aS5jb21tYW5kcyI+CisgICAgIDxjYXRlZ29yeQorICAgICAgICAgICBkZXNjcmlwdGlvbj0iJV9VSV9TVEVNX0V4ZWN1dGlvbl9Db21tYW5kX0NhdF9EZXNjIgorICAgICAgICAgICBpZD0ib3JnLmVjbGlwc2Uuc3RlbS51aS5leGVjdXRpb24iCisgICAgICAgICAgIG5hbWU9IiVfVUlfU1RFTV9FeGVjdXRpb25fQ29tbWFuZF9DYXQiPgorICAgICA8L2NhdGVnb3J5PgorICAgICA8Y29tbWFuZAorICAgICAgICAgICBjYXRlZ29yeUlkPSJvcmcuZWNsaXBzZS5zdGVtLnVpLmV4ZWN1dGlvbiIKKyAgICAgICAgICAgZGVzY3JpcHRpb249IiVfVUlfU1RFTV9Db21tYW5kX1J1bl9EZXNjIgorICAgICAgICAgICBpZD0ib3JnLmVjbGlwc2Uuc3RlbS51aS5jb21tYW5kLnJ1biIKKyAgICAgICAgICAgbmFtZT0iJV9VSV9TVEVNX0NvbW1hbmRfUnVuIj4KKyAgICAgPC9jb21tYW5kPgorICAgICA8Y29tbWFuZAorICAgICAgICAgICBjYXRlZ29yeUlkPSJvcmcuZWNsaXBzZS5zdGVtLnVpLmV4ZWN1dGlvbiIKKyAgICAgICAgICAgZGVzY3JpcHRpb249IiVfVUlfU1RFTV9Db21tYW5kX1N0ZXBfRGVzYyIKKyAgICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLnN0ZW0udWkuY29tbWFuZC5zdGVwIgorICAgICAgICAgICBuYW1lPSIlX1VJX1NURU1fQ29tbWFuZF9TdGVwIj4KKyAgICAgPC9jb21tYW5kPgorICAgICA8Y29tbWFuZAorICAgICAgICAgICBjYXRlZ29yeUlkPSJvcmcuZWNsaXBzZS5zdGVtLnVpLmV4ZWN1dGlvbiIKKyAgICAgICAgICAgZGVzY3JpcHRpb249IiVfVUlfU1RFTV9Db21tYW5kX1Jlc2V0X0Rlc2MiCisgICAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5zdGVtLnVpLmNvbW1hbmQucmVzZXQiCisgICAgICAgICAgIG5hbWU9IiVfVUlfU1RFTV9Db21tYW5kX1Jlc2V0Ij4KKyAgICAgPC9jb21tYW5kPgorICAgICA8Y29tbWFuZAorICAgICAgICAgICBjYXRlZ29yeUlkPSJvcmcuZWNsaXBzZS5zdGVtLnVpLmV4ZWN1dGlvbiIKKyAgICAgICAgICAgZGVzY3JpcHRpb249IiVfVUlfU1RFTV9Db21tYW5kX1N0b3BfRGVzYyIKKyAgICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLnN0ZW0udWkuY29tbWFuZC5zdG9wIgorICAgICAgICAgICBuYW1lPSIlX1VJX1NURU1fQ29tbWFuZF9TdG9wIj4KKyAgICAgPC9jb21tYW5kPgorICAgICA8Y29tbWFuZAorICAgICAgICAgICBjYXRlZ29yeUlkPSJvcmcuZWNsaXBzZS5zdGVtLnVpLmV4ZWN1dGlvbiIKKyAgICAgICAgICAgZGVzY3JpcHRpb249IiVfVUlfU1RFTV9Db21tYW5kX1BhdXNlX0Rlc2MiCisgICAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5zdGVtLnVpLmNvbW1hbmQucGF1c2UiCisgICAgICAgICAgIG5hbWU9IiVfVUlfU1RFTV9Db21tYW5kX1BhdXNlIj4KKyAgICAgPC9jb21tYW5kPgorICA8L2V4dGVuc2lvbj4KKyAgPGV4dGVuc2lvbgorICAgICAgICBwb2ludD0ib3JnLmVjbGlwc2UudWkuaGFuZGxlcnMiPgorICAgICA8aGFuZGxlcgorICAgICAgICAgICBjbGFzcz0ib3JnLmVjbGlwc2Uuc3RlbS51aS5oYW5kbGVycy5TVEVNRXhlY3V0aW9uQ29tbWFuZEhhbmRsZXIkUnVuQ29tbWFuZEhhbmRsZXIiCisgICAgICAgICAgIGNvbW1hbmRJZD0ib3JnLmVjbGlwc2Uuc3RlbS51aS5jb21tYW5kLnJ1biI+CisgICAgICAgIDxhY3RpdmVXaGVuPgorICAgICAgICAgICA8cmVmZXJlbmNlCisgICAgICAgICAgICAgICAgIGRlZmluaXRpb25JZD0ib3JnLmVjbGlwc2Uuc3RlbS51aS5leGVjdXRhYmxlTm90UnVubmluZyI+CisgICAgICAgICAgIDwvcmVmZXJlbmNlPgorICAgICAgICA8L2FjdGl2ZVdoZW4+CisgICAgIDwvaGFuZGxlcj4KKyAgICAgPGhhbmRsZXIKKyAgICAgICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLnN0ZW0udWkuaGFuZGxlcnMuU1RFTUV4ZWN1dGlvbkNvbW1hbmRIYW5kbGVyJFBhdXNlQ29tbWFuZEhhbmRsZXIiCisgICAgICAgICAgIGNvbW1hbmRJZD0ib3JnLmVjbGlwc2Uuc3RlbS51aS5jb21tYW5kLnBhdXNlIj4KKyAgICAgICAgPGFjdGl2ZVdoZW4+CisgICAgICAgICAgIDxyZWZlcmVuY2UKKyAgICAgICAgICAgICAgICAgZGVmaW5pdGlvbklkPSJvcmcuZWNsaXBzZS5zdGVtLnVpLmV4ZWN1dGFibGVSdW5uaW5nIj4KKyAgICAgICAgICAgPC9yZWZlcmVuY2U+CisgICAgICAgIDwvYWN0aXZlV2hlbj4KKyAgICAgPC9oYW5kbGVyPgorICAgICA8aGFuZGxlcgorICAgICAgICAgICBjbGFzcz0ib3JnLmVjbGlwc2Uuc3RlbS51aS5oYW5kbGVycy5TVEVNRXhlY3V0aW9uQ29tbWFuZEhhbmRsZXIkU3RlcENvbW1hbmRIYW5kbGVyIgorICAgICAgICAgICBjb21tYW5kSWQ9Im9yZy5lY2xpcHNlLnN0ZW0udWkuY29tbWFuZC5zdGVwIj4KKyAgICAgICAgPGFjdGl2ZVdoZW4+CisgICAgICAgICAgIDxyZWZlcmVuY2UKKyAgICAgICAgICAgICAgICAgZGVmaW5pdGlvbklkPSJvcmcuZWNsaXBzZS5zdGVtLnVpLmV4ZWN1dGFibGVOb3RSdW5uaW5nIj4KKyAgICAgICAgICAgPC9yZWZlcmVuY2U+CisgICAgICAgIDwvYWN0aXZlV2hlbj4KKyAgICAgPC9oYW5kbGVyPgorICAgICA8aGFuZGxlcgorICAgICAgICAgICBjbGFzcz0ib3JnLmVjbGlwc2Uuc3RlbS51aS5oYW5kbGVycy5TVEVNRXhlY3V0aW9uQ29tbWFuZEhhbmRsZXIkUmVzZXRDb21tYW5kSGFuZGxlciIKKyAgICAgICAgICAgY29tbWFuZElkPSJvcmcuZWNsaXBzZS5zdGVtLnVpLmNvbW1hbmQucmVzZXQiPgorICAgICAgICA8YWN0aXZlV2hlbj4KKyAgICAgICAgICAgPHJlZmVyZW5jZQorICAgICAgICAgICAgICAgICBkZWZpbml0aW9uSWQ9Im9yZy5lY2xpcHNlLnN0ZW0udWkuZXhlY3V0YWJsZVN0b3BwYWJsZSI+CisgICAgICAgICAgIDwvcmVmZXJlbmNlPgorICAgICAgICA8L2FjdGl2ZVdoZW4+CisgICAgIDwvaGFuZGxlcj4KKyAgICAgPGhhbmRsZXIKKyAgICAgICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLnN0ZW0udWkuaGFuZGxlcnMuU1RFTUV4ZWN1dGlvbkNvbW1hbmRIYW5kbGVyJFN0b3BDb21tYW5kSGFuZGxlciIKKyAgICAgICAgICAgY29tbWFuZElkPSJvcmcuZWNsaXBzZS5zdGVtLnVpLmNvbW1hbmQuc3RvcCI+CisgICAgICAgIDxhY3RpdmVXaGVuPgorICAgICAgICAgICA8cmVmZXJlbmNlCisgICAgICAgICAgICAgICAgIGRlZmluaXRpb25JZD0ib3JnLmVjbGlwc2Uuc3RlbS51aS5leGVjdXRhYmxlU3RvcHBhYmxlIj4KKyAgICAgICAgICAgPC9yZWZlcmVuY2U+CisgICAgICAgIDwvYWN0aXZlV2hlbj4KKyAgICAgPC9oYW5kbGVyPgorICA8L2V4dGVuc2lvbj4KKyAgPGV4dGVuc2lvbgorICAgICAgICBwb2ludD0ib3JnLmVjbGlwc2UudWkuY29tbWFuZHMiPgorICAgICA8Y2F0ZWdvcnkKKyAgICAgICAgICAgZGVzY3JpcHRpb249IiVfVUlfU1RFTV9FeHBlcmltZW50X0NvbW1hbmRfQ2F0X0Rlc2MiCisgICAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5zdGVtLnVpLmV4cGVyaW1lbnQiCisgICAgICAgICAgIG5hbWU9IiVfVUlfU1RFTV9FeHBlcmltZW50X0NvbW1hbmRfQ2F0Ij4KKyAgICAgPC9jYXRlZ29yeT4KKyAgICAgPGNvbW1hbmQKKyAgICAgICAgICAgY2F0ZWdvcnlJZD0ib3JnLmVjbGlwc2Uuc3RlbS51aS5leHBlcmltZW50IgorICAgICAgICAgICBkZXNjcmlwdGlvbj0iJV9VSV9TVEVNX0NvbW1hbmRfTmV3TW9kV2l6X0Rlc2MiCisgICAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5zdGVtLnVpLmNvbW1hbmQubmV3bW9kaWZpZXJ3aXphcmQiCisgICAgICAgICAgIG5hbWU9IiVfVUlfU1RFTV9Db21tYW5kX05ld01vZFdpeiI+CisgICAgIDwvY29tbWFuZD4KKyAgPC9leHRlbnNpb24+CisgIDxleHRlbnNpb24KKyAgICAgICAgcG9pbnQ9Im9yZy5lY2xpcHNlLnVpLmhhbmRsZXJzIj4KKyAgICAgPGhhbmRsZXIKKyAgICAgICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLnN0ZW0udWkud2l6YXJkcy5OZXdNb2RpZmllcldpemFyZCROZXdNb2RpZmllcldpemFyZENvbW1hbmRIYW5kbGVyIgorICAgICAgICAgICBjb21tYW5kSWQ9Im9yZy5lY2xpcHNlLnN0ZW0udWkuY29tbWFuZC5uZXdtb2RpZmllcndpemFyZCI+CisgICAgICAgIDxhY3RpdmVXaGVuPgorICAgICAgICAgICA8cmVmZXJlbmNlCisgICAgICAgICAgICAgICAgIGRlZmluaXRpb25JZD0ib3JnLmVjbGlwc2Uuc3RlbS51aS5pc01vZGlmaWFibGVJZGVudGlmaWFibGUiPgorICAgICAgICAgICA8L3JlZmVyZW5jZT4KKyAgICAgICAgPC9hY3RpdmVXaGVuPgorICAgICA8L2hhbmRsZXI+CisgIDwvZXh0ZW5zaW9uPgorICA8ZXh0ZW5zaW9uCisgICAgICAgIHBvaW50PSJvcmcuZWNsaXBzZS5jb3JlLmV4cHJlc3Npb25zLnByb3BlcnR5VGVzdGVycyI+CisgICAgIDxwcm9wZXJ0eVRlc3RlcgorICAgICAgICAgICBjbGFzcz0ib3JnLmVjbGlwc2Uuc3RlbS51aS5oYW5kbGVycy5JZGVudGlmaWFibGVEZWxlZ2F0ZVByb3BlcnR5VGVzdGVyIgorICAgICAgICAgICBpZD0ib3JnLmVjbGlwc2Uuc3RlbS51aS5pZGVudGlmaWFibGVkZWxlZ2F0ZXByb3BlcnR5dGVzdGVyIgorICAgICAgICAgICBuYW1lc3BhY2U9Im9yZy5lY2xpcHNlLnN0ZW0uaWRlbnRpZmFibGVkZWxlZ2F0ZSIKKyAgICAgICAgICAgcHJvcGVydGllcz0icnVubmFibGUiCisgICAgICAgICAgIHR5cGU9Im9yZy5lY2xpcHNlLnN0ZW0udWkudmlld3MuSWRlbnRpZmlhYmxlRGVsZWdhdGUiPgorICAgICA8L3Byb3BlcnR5VGVzdGVyPgorICAgICA8cHJvcGVydHlUZXN0ZXIKKyAgICAgICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLnN0ZW0udWkuaGFuZGxlcnMuRXhlY3V0YWJsZVByb3BlcnR5VGVzdGVyIgorICAgICAgICAgICBpZD0ib3JnLmVjbGlwc2Uuc3RlbS51aS5leGVjdXRhYmxlcHJvcGVydHl0ZXN0ZXIiCisgICAgICAgICAgIG5hbWVzcGFjZT0ib3JnLmVjbGlwc2Uuc3RlbS5qb2JzLmV4ZWN1dGFibGUiCisgICAgICAgICAgIHByb3BlcnRpZXM9InJ1bm5pbmcsIHN0b3BwYWJsZSIKKyAgICAgICAgICAgdHlwZT0ib3JnLmVjbGlwc2Uuc3RlbS5qb2JzLmV4ZWN1dGlvbi5JRXhlY3V0YWJsZSI+CisgICAgIDwvcHJvcGVydHlUZXN0ZXI+CisgIDwvZXh0ZW5zaW9uPgorICA8ZXh0ZW5zaW9uCisgICAgICAgIHBvaW50PSJvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuYWRhcHRlcnMiPgorICAgICAgICAgPGZhY3RvcnkgCisgICAgICAgICAgICBjbGFzcz0ib3JnLmVjbGlwc2Uuc3RlbS51aS5hZGFwdGVycy5leGVjdXRhYmxlLklkZW50aWZpYWJsZURlbGVnYXRlRXhlY3V0YWJsZUFkYXB0ZXJGYWN0b3J5IiAKKyAgICAgICAgICAgIGFkYXB0YWJsZVR5cGU9Im9yZy5lY2xpcHNlLnN0ZW0udWkudmlld3MuSWRlbnRpZmlhYmxlRGVsZWdhdGUiPgorICAgICAgICAgICAgPGFkYXB0ZXIgdHlwZT0ib3JnLmVjbGlwc2Uuc3RlbS5qb2JzLmV4ZWN1dGlvbi5JRXhlY3V0YWJsZSIvPgorICAgICAgICAgPC9mYWN0b3J5PgorICAgICAgICAgPGZhY3RvcnkKKyAgICAgICAgICAgICAgIGFkYXB0YWJsZVR5cGU9Im9yZy5lY2xpcHNlLnN0ZW0udWkudmlld3MuSWRlbnRpZmlhYmxlRGVsZWdhdGUiCisgICAgICAgICAgICAgICBjbGFzcz0ib3JnLmVjbGlwc2Uuc3RlbS51aS5hZGFwdGVycy5pZGVudGlmaWFibGUuSWRlbnRpZmlhYmxlRGVsZWdhdGVJZGVudGlmaWFibGVBZGFwdGVyRmFjdG9yeSI+CisgICAgICAgICAgICA8YWRhcHRlcgorICAgICAgICAgICAgICAgICAgdHlwZT0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5JZGVudGlmaWFibGUiPgorICAgICAgICAgICAgPC9hZGFwdGVyPgorICAgICAgICAgPC9mYWN0b3J5PgorICAgICAgICAgPGZhY3RvcnkKKyAgICAgICAgICAgICAgIGFkYXB0YWJsZVR5cGU9Im9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkRlbGVnYXRpbmdXcmFwcGVySXRlbVByb3ZpZGVyIgorICAgICAgICAgICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLnN0ZW0udWkuYWRhcHRlcnMuaWRlbnRpZmlhYmxlLkRlbGVnYXRpbmdXcmFwcGVySXRlbVByb3ZpZGVySWRlbnRpZmlhYmxlQWRhcHRlckZhY3RvcnkiPgorICAgICAgICAgICAgPGFkYXB0ZXIKKyAgICAgICAgICAgICAgICAgIHR5cGU9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uSWRlbnRpZmlhYmxlIj4KKyAgICAgICAgICAgIDwvYWRhcHRlcj4KKyAgICAgICAgIDwvZmFjdG9yeT4KKyAgICAgICAgIDxmYWN0b3J5CisgICAgICAgICAgICAgICBhZGFwdGFibGVUeXBlPSJvcmcuZWNsaXBzZS5zdGVtLnVpLnZpZXdzLklkZW50aWZpYWJsZURlbGVnYXRlIgorICAgICAgICAgICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLnN0ZW0udWkuYWRhcHRlcnMubW9kaWZpYWJsZS5JZGVudGlmaWFibGVEZWxlZ2F0ZU1vZGlmaWFibGVBZGFwdGVyRmFjdG9yeSI+CisgICAgICAgICAgICA8YWRhcHRlcgorICAgICAgICAgICAgICAgICAgdHlwZT0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLk1vZGlmaWFibGUiPgorICAgICAgICAgICAgPC9hZGFwdGVyPgorICAgICAgICAgPC9mYWN0b3J5PgorICAgICAgICAgPGZhY3RvcnkKKyAgICAgICAgICAgICAgIGFkYXB0YWJsZVR5cGU9Im9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkRlbGVnYXRpbmdXcmFwcGVySXRlbVByb3ZpZGVyIgorICAgICAgICAgICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLnN0ZW0udWkuYWRhcHRlcnMubW9kaWZpYWJsZS5EZWxlZ2F0aW5nV3JhcHBlckl0ZW1Qcm92aWRlck1vZGlmaWFibGVBZGFwdGVyRmFjdG9yeSI+CisgICAgICAgICAgICA8YWRhcHRlcgorICAgICAgICAgICAgICAgICAgdHlwZT0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLk1vZGlmaWFibGUiPgorICAgICAgICAgICAgPC9hZGFwdGVyPgorICAgICAgICAgPC9mYWN0b3J5PgorICA8L2V4dGVuc2lvbj4KKyAgPGV4dGVuc2lvbgorICAgICAgICBwb2ludD0ib3JnLmVjbGlwc2UuY29yZS5leHByZXNzaW9ucy5kZWZpbml0aW9ucyI+CisgICAgIDxkZWZpbml0aW9uCisgICAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5zdGVtLnVpLmV4ZWN1dGFibGVSdW5uaW5nIj4KKyAgICAgICAgPHdpdGgKKyAgICAgICAgICAgICAgdmFyaWFibGU9InNlbGVjdGlvbiI+CisgICAgICAgICAgIDxpdGVyYXRlCisgICAgICAgICAgICAgICAgIGlmRW1wdHk9ImZhbHNlIgorICAgICAgICAgICAgICAgICBvcGVyYXRvcj0iYW5kIj4KKyAgICAgICAgICAgICAgPGFkYXB0CisgICAgICAgICAgICAgICAgICAgIHR5cGU9Im9yZy5lY2xpcHNlLnN0ZW0uam9icy5leGVjdXRpb24uSUV4ZWN1dGFibGUiPgorICAgICAgICAgICAgICAgICA8dGVzdAorICAgICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eT0ib3JnLmVjbGlwc2Uuc3RlbS5qb2JzLmV4ZWN1dGFibGUucnVubmluZyI+CisgICAgICAgICAgICAgICAgIDwvdGVzdD4KKyAgICAgICAgICAgICAgPC9hZGFwdD4KKyAgICAgICAgICAgPC9pdGVyYXRlPgorICAgICAgICA8L3dpdGg+CisgICAgIDwvZGVmaW5pdGlvbj4KKyAgICAgPGRlZmluaXRpb24KKyAgICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLnN0ZW0udWkuZXhlY3V0YWJsZU5vdFJ1bm5pbmciPgorICAgICAgICA8d2l0aAorICAgICAgICAgICAgICB2YXJpYWJsZT0ic2VsZWN0aW9uIj4KKyAgICAgICAgICAgPGl0ZXJhdGUKKyAgICAgICAgICAgICAgICAgaWZFbXB0eT0iZmFsc2UiCisgICAgICAgICAgICAgICAgIG9wZXJhdG9yPSJhbmQiPgorICAgICAgICAgICAgICA8YWRhcHQKKyAgICAgICAgICAgICAgICAgICAgdHlwZT0ib3JnLmVjbGlwc2Uuc3RlbS5qb2JzLmV4ZWN1dGlvbi5JRXhlY3V0YWJsZSI+CisgICAgICAgICAgICAgICAgIDxub3Q+CisgICAgICAgICAgICAgICAgICAgIDx0ZXN0CisgICAgICAgICAgICAgICAgICAgICAgICAgIHByb3BlcnR5PSJvcmcuZWNsaXBzZS5zdGVtLmpvYnMuZXhlY3V0YWJsZS5ydW5uaW5nIj4KKyAgICAgICAgICAgICAgICAgICAgPC90ZXN0PgorICAgICAgICAgICAgICAgICA8L25vdD4KKyAgICAgICAgICAgICAgPC9hZGFwdD4KKyAgICAgICAgICAgPC9pdGVyYXRlPgorICAgICAgICA8L3dpdGg+CisgICAgIDwvZGVmaW5pdGlvbj4KKyAgICAgPGRlZmluaXRpb24KKyAgICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLnN0ZW0udWkuZXhlY3V0YWJsZVN0b3BwYWJsZSI+CisgICAgICAgIDx3aXRoCisgICAgICAgICAgICAgIHZhcmlhYmxlPSJzZWxlY3Rpb24iPgorICAgICAgICAgICA8aXRlcmF0ZQorICAgICAgICAgICAgICAgICBpZkVtcHR5PSJmYWxzZSIKKyAgICAgICAgICAgICAgICAgb3BlcmF0b3I9ImFuZCI+CisgICAgICAgICAgICAgIDxhZGFwdAorICAgICAgICAgICAgICAgICAgICB0eXBlPSJvcmcuZWNsaXBzZS5zdGVtLmpvYnMuZXhlY3V0aW9uLklFeGVjdXRhYmxlIj4KKyAgICAgICAgICAgICAgICAgPHRlc3QKKyAgICAgICAgICAgICAgICAgICAgICAgcHJvcGVydHk9Im9yZy5lY2xpcHNlLnN0ZW0uam9icy5leGVjdXRhYmxlLnN0b3BwYWJsZSI+CisgICAgICAgICAgICAgICAgIDwvdGVzdD4KKyAgICAgICAgICAgICAgPC9hZGFwdD4KKyAgICAgICAgICAgPC9pdGVyYXRlPgorICAgICAgICA8L3dpdGg+CisgICAgIDwvZGVmaW5pdGlvbj4KKyAgICAgPGRlZmluaXRpb24KKyAgICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLnN0ZW0udWkuaXNleGVjdXRhYmxlIj4KKyAgICAgICAgPHdpdGgKKyAgICAgICAgICAgICAgdmFyaWFibGU9InNlbGVjdGlvbiI+CisgICAgICAgICAgIDxpdGVyYXRlCisgICAgICAgICAgICAgICAgIGlmRW1wdHk9ImZhbHNlIgorICAgICAgICAgICAgICAgICBvcGVyYXRvcj0iYW5kIj4KKyAgICAgICAgICAgICAgPGFkYXB0CisgICAgICAgICAgICAgICAgICAgIHR5cGU9Im9yZy5lY2xpcHNlLnN0ZW0uam9icy5leGVjdXRpb24uSUV4ZWN1dGFibGUiPgorICAgICAgICAgICAgICA8L2FkYXB0PgorICAgICAgICAgICA8L2l0ZXJhdGU+CisgICAgICAgIDwvd2l0aD4KKyAgICAgPC9kZWZpbml0aW9uPgorICAgICA8ZGVmaW5pdGlvbgorICAgICAgICAgICBpZD0ib3JnLmVjbGlwc2Uuc3RlbS51aS5pc0lkZW50aWZpYWJsZURlbGVnYXRlIj4KKyAgICAgICAgPHdpdGgKKyAgICAgICAgICAgICAgdmFyaWFibGU9InNlbGVjdGlvbiI+CisgICAgICAgICAgIDxpdGVyYXRlCisgICAgICAgICAgICAgICAgIG9wZXJhdG9yPSJhbmQiPgorICAgICAgICAgICAgICA8YWRhcHQKKyAgICAgICAgICAgICAgICAgICAgdHlwZT0ib3JnLmVjbGlwc2Uuc3RlbS51aS52aWV3cy5JZGVudGlmaWFibGVEZWxlZ2F0ZSI+CisgICAgICAgICAgICAgIDwvYWRhcHQ+CisgICAgICAgICAgIDwvaXRlcmF0ZT4KKyAgICAgICAgPC93aXRoPgorICAgICA8L2RlZmluaXRpb24+CisgICAgIDxkZWZpbml0aW9uCisgICAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5zdGVtLnVpLmlzTW9kaWZpYWJsZUlkZW50aWZpYWJsZSI+CisgICAgICAgIDx3aXRoCisgICAgICAgICAgICAgIHZhcmlhYmxlPSJzZWxlY3Rpb24iPgorICAgICAgICAgICA8aXRlcmF0ZQorICAgICAgICAgICAgICAgICBvcGVyYXRvcj0iYW5kIj4KKyAgICAgICAgICAgICAgPGFuZD4KKyAgICAgICAgICAgICAgPCEtLSBSZW1vdmVkIHNpbmNlIHdlIHdhbnQgdG8gYmUgYWJsZSB0byBjcmVhdGUgbW9kaWZpZXJzIGZvciBsaXN0cyBvZiB0aGluZ3MgbGlrZSByZWNvdmVyeSByYXRlcyBmb3IgbXVsdGktcG9wdWxhdGlvbnMKKyAgICAgICAgICAgICAgICAgPGFkYXB0CisgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uSWRlbnRpZmlhYmxlIj4KKyAgICAgICAgICAgICAgICAgPC9hZGFwdD4KKyAgICAgICAgICAgICAgLS0+CisgICAgICAgICAgICAgICAgIDxhZGFwdAorICAgICAgICAgICAgICAgICAgICAgICB0eXBlPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuTW9kaWZpYWJsZSI+CisgICAgICAgICAgICAgICAgIDwvYWRhcHQ+CisgICAgICAgICAgICAgICAgIDxub3Q+CisgICAgICAgICAgICAgICAgICAgIDxyZWZlcmVuY2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmaW5pdGlvbklkPSJvcmcuZWNsaXBzZS5zdGVtLnVpLmlzZXhlY3V0YWJsZSI+CisgICAgICAgICAgICAgICAgICAgIDwvcmVmZXJlbmNlPgorICAgICAgICAgICAgICAgICA8L25vdD4KKyAgICAgICAgICAgICAgICAgPG5vdD4KKyAgICAgICAgICAgICAgICAgICAgPGFkYXB0CisgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5Nb2RpZmllciI+CisgICAgICAgICAgICAgICAgICAgIDwvYWRhcHQ+CisgICAgICAgICAgICAgICAgIDwvbm90PgorICAgICAgICAgICAgICA8L2FuZD4KKyAgICAgICAgICAgPC9pdGVyYXRlPgorICAgICAgICA8L3dpdGg+CisgICAgIDwvZGVmaW5pdGlvbj4KKyAgICAgPGRlZmluaXRpb24KKyAgICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLnN0ZW0udWkuaXNEZWxldGFibGVJZGVudGlmaWFibGUiPgorICAgICAgICA8d2l0aAorICAgICAgICAgICAgICB2YXJpYWJsZT0ic2VsZWN0aW9uIj4KKyAgICAgICAgICAgPGl0ZXJhdGUKKyAgICAgICAgICAgICAgICAgb3BlcmF0b3I9ImFuZCI+CisgICAgICAgICAgICAgIDxhbmQ+CisgICAgICAgICAgICAgICAgIDxhZGFwdAorICAgICAgICAgICAgICAgICAgICAgICB0eXBlPSJvcmcuZWNsaXBzZS5zdGVtLmFkYXB0ZXJzLmZpbGUuRmlsZSI+CisgICAgICAgICAgICAgICAgIDwvYWRhcHQ+CisgICAgICAgICAgICAgICA8L2FuZD4KKyAgICAgICAgICAgPC9pdGVyYXRlPgorICAgICAgICA8L3dpdGg+CisgICAgIDwvZGVmaW5pdGlvbj4KKyAgICAgICA8ZGVmaW5pdGlvbgorICAgICAgICAgICBpZD0ib3JnLmVjbGlwc2Uuc3RlbS51aS5pc1JlZmFjdG9ySWRlbnRpZmlhYmxlIj4KKyAgICAgICAgPHdpdGgKKyAgICAgICAgICAgICAgdmFyaWFibGU9InNlbGVjdGlvbiI+CisgICAgICAgICAgIDxpdGVyYXRlCisgICAgICAgICAgICAgICAgIG9wZXJhdG9yPSJhbmQiPgorICAgICAgICAgICAgICA8YW5kPgorICAgICAgICAgICAgICAgICA8YWRhcHQKKyAgICAgICAgICAgICAgICAgICAgICAgdHlwZT0ib3JnLmVjbGlwc2Uuc3RlbS5hZGFwdGVycy5maWxlLkZpbGUiPgorICAgICAgICAgICAgICAgICA8L2FkYXB0PgorICAgICAgICAgICAgICAgPC9hbmQ+CisgICAgICAgICAgIDwvaXRlcmF0ZT4KKyAgICAgICAgPC93aXRoPgorICAgICA8L2RlZmluaXRpb24+CisgICAgIDxkZWZpbml0aW9uCisgICAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5zdGVtLnVpLmlzQ29weWFibGVJZGVudGlmaWFibGUiPgorICAgICAgICA8d2l0aAorICAgICAgICAgICAgICB2YXJpYWJsZT0ic2VsZWN0aW9uIj4KKyAgICAgICAgICAgPGl0ZXJhdGUKKyAgICAgICAgICAgICAgICAgb3BlcmF0b3I9ImFuZCI+CisgICAgICAgICAgICAgIDxhbmQ+CisgICAgICAgICAgICAgICAgIDxhZGFwdAorICAgICAgICAgICAgICAgICAgICAgICB0eXBlPSJvcmcuZWNsaXBzZS5zdGVtLmFkYXB0ZXJzLmZpbGUuRmlsZSI+CisgICAgICAgICAgICAgICAgIDwvYWRhcHQ+CisgICAgICAgICAgICAgICA8L2FuZD4KKyAgICAgICAgICAgPC9pdGVyYXRlPgorICAgICAgICA8L3dpdGg+CisgICAgIDwvZGVmaW5pdGlvbj4KKyAgPC9leHRlbnNpb24+CisgIDxleHRlbnNpb24KKyAgICAgICAgcG9pbnQ9Im9yZy5lY2xpcHNlLnVpLm1lbnVzIj4KKyAgICAgPG1lbnVDb250cmlidXRpb24KKyAgICAgICAgICAgbG9jYXRpb25VUkk9InBvcHVwOm9yZy5lY2xpcHNlLnN0ZW0udWkudmlld3MuU1RFTVByb2plY3RFeHBsb3Jlcj9hZnRlcj1hZGRpdGlvbnMiPgorICAgICAgICA8Y29tbWFuZAorICAgICAgICAgICAgICBjb21tYW5kSWQ9Im9yZy5lY2xpcHNlLnVpLmZpbGUucmVmcmVzaCIKKyAgICAgICAgICAgICAgbGFiZWw9IiVfVUlfUmVmcmVzaCAiCisgICAgICAgICAgICAgIHN0eWxlPSJwdXNoIgorICAgICAgICAgICAgICB0b29sdGlwPSIlX1VJX1JlZnJlc2hUVCI+CisgICAgICAgIDwvY29tbWFuZD4KKyAgICAgPC9tZW51Q29udHJpYnV0aW9uPgorICAgICA8bWVudUNvbnRyaWJ1dGlvbgorICAgICAgICAgICBsb2NhdGlvblVSST0icG9wdXA6b3JnLmVjbGlwc2Uuc3RlbS51aS52aWV3cy5TVEVNUHJvamVjdEV4cGxvcmVyP2FmdGVyPWFkZGl0aW9ucyI+CisgICAgICAgIDxjb21tYW5kCisgICAgICAgICAgICAgIGNvbW1hbmRJZD0ib3JnLmVjbGlwc2UudWkuZWRpdC5kZWxldGUiCisgICAgICAgICAgICAgIGxhYmVsPSIlX1VJX0RlbGV0ZSIKKyAgICAgICAgICAgICAgc3R5bGU9InB1c2giCisgICAgICAgICAgICAgIHRvb2x0aXA9IiVfVUlfRGVsZXRlVFQiPgorICAgICAgICA8L2NvbW1hbmQ+CisgICAgIDwvbWVudUNvbnRyaWJ1dGlvbj4KKyAgPC9leHRlbnNpb24+CisgIDxleHRlbnNpb24KKyAgICAgICAgcG9pbnQ9Im9yZy5lY2xpcHNlLmNvcmUuZXhwcmVzc2lvbnMuZGVmaW5pdGlvbnMiPgorICAgICA8ZGVmaW5pdGlvbgorICAgICAgICAgICBpZD0ib3JnLmVjbGlwc2Uuc3RlbS51aS5pc0RlbGV0ZWFibGUiPgorICAgICAgICA8d2l0aAorICAgICAgICAgICAgICB2YXJpYWJsZT0ic2VsZWN0aW9uIj4KKyAgICAgICAgICAgPGl0ZXJhdGUKKyAgICAgICAgICAgICAgICAgb3BlcmF0b3I9ImFuZCI+CisgICAgICAgICAgICAgIDxvcj4KKyAgICAgICAgICAgICAgICAgPGFkYXB0CisgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9Im9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklGaWxlIj4KKyAgICAgICAgICAgICAgICAgPC9hZGFwdD4KKyAgICAgICAgICAgICAgICAgPGFkYXB0CisgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9Im9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0Ij4KKyAgICAgICAgICAgICAgICAgPC9hZGFwdD4KKyAgICAgICAgICAgICAgPC9vcj4KKyAgICAgICAgICAgPC9pdGVyYXRlPgorICAgICAgICA8L3dpdGg+CisgICAgIDwvZGVmaW5pdGlvbj4KKyAgPC9leHRlbnNpb24+CisgIDxleHRlbnNpb24KKyAgICAgICAgcG9pbnQ9Im9yZy5lY2xpcHNlLnVpLnZpZXdzIj4KKyAgICAgPHZpZXcKKyAgICAgICAgICAgYWxsb3dNdWx0aXBsZT0iZmFsc2UiCisgICAgICAgICAgIGNhdGVnb3J5PSJvcmcuZWNsaXBzZS5zdGVtLnVpLnZpZXdzIgorICAgICAgICAgICBjbGFzcz0ib3JnLmVjbGlwc2UudWkubmF2aWdhdG9yLkNvbW1vbk5hdmlnYXRvciIKKyAgICAgICAgICAgaWNvbj0iaWNvbnMvZnVsbC9jdXN0b21vYmoxNi9TdGVtRXhwbG9yZXIuZ2lmIgorICAgICAgICAgICBpZD0ib3JnLmVjbGlwc2UudWkubmF2aWdhdG9yLlByb2plY3RFeHBsb3JlciIKKyAgICAgICAgICAgbmFtZT0iJV9VSV9Qcm9qZWN0X0V4cGxvcmVyIgorICAgICAgICAgICByZXN0b3JhYmxlPSJ0cnVlIj4KKyAgICAgPC92aWV3PgorICA8L2V4dGVuc2lvbj4KKyAgCisgIDxleHRlbnNpb24KKyAgICAgICAgcG9pbnQ9Im9yZy5lY2xpcHNlLnVpLm5hdmlnYXRvci52aWV3ZXIiPgorICAgICA8dmlld2VyCisgICAgICAgICAgIHZpZXdlcklkPSJvcmcuZWNsaXBzZS51aS5uYXZpZ2F0b3IuUHJvamVjdEV4cGxvcmVyIj4KKyAgICAgPC92aWV3ZXI+CisgICAgIDx2aWV3ZXJDb250ZW50QmluZGluZworICAgICAgICAgICB2aWV3ZXJJZD0ib3JnLmVjbGlwc2UudWkubmF2aWdhdG9yLlByb2plY3RFeHBsb3JlciI+CisgICAgICAgIDxpbmNsdWRlcz4KKyAgICAgICAgIAorICAgICAgICAgICA8Y29udGVudEV4dGVuc2lvbgorICAgICAgICAgICAgICAgICBpc1Jvb3Q9InRydWUiCisgICAgICAgICAgICAgICAgIHBhdHRlcm49Im9yZy5lY2xpcHNlLnVpLm5hdmlnYXRvci5yZXNvdXJjZUNvbnRlbnQiPgorICAgICAgICAgICA8L2NvbnRlbnRFeHRlbnNpb24+CisgICAgICAgICAgIDxjb250ZW50RXh0ZW5zaW9uCisgICAgICAgICAgICAgICAgIHBhdHRlcm49Im9yZy5lY2xpcHNlLnVpLm5hdmlnYXRvci5yZXNvdXJjZXMuZmlsdGVycy4qIj4KKyAgICAgICAgICAgPC9jb250ZW50RXh0ZW5zaW9uPgorICAgICAgICAgCisgICAgICAgICAgPGNvbnRlbnRFeHRlbnNpb24KKyAgICAgICAgICAgICAgICAgcGF0dGVybj0ib3JnLmVjbGlwc2Uuc3RlbS51aS52aWV3cy5leHBsb3Jlci5pZGVudGlmaWFibGV0cmVlbm9kZXMiPgorICAgICAgICAgICA8L2NvbnRlbnRFeHRlbnNpb24+CisgICAgICAJCisgICAgICAJCisgICAgICAJICA8Y29udGVudEV4dGVuc2lvbgorICAgICAgICAgICAgICAgICBwYXR0ZXJuPSJvcmcuZWNsaXBzZS5zdGVtLnVpLnZpZXdzLmV4cGxvcmVyLmRlY29yYXRvcnMiPgorICAgICAgICAgICA8L2NvbnRlbnRFeHRlbnNpb24+CisgICAgICAgICAgIDxjb250ZW50RXh0ZW5zaW9uCisgICAgICAgICAgICAgICAgIHBhdHRlcm49Im9yZy5lY2xpcHNlLnN0ZW0udWkudmlld3MuZXhwbG9yZXIuc2NlbmFyaW9zIj4KKyAgICAgICAgICAgPC9jb250ZW50RXh0ZW5zaW9uPgorICAgICAgICAgICA8Y29udGVudEV4dGVuc2lvbgorICAgICAgICAgICAgICAgICBwYXR0ZXJuPSJvcmcuZWNsaXBzZS5zdGVtLnVpLnZpZXdzLmV4cGxvcmVyLnNlcXVlbmNlcnMiPgorICAgICAgICAgICA8L2NvbnRlbnRFeHRlbnNpb24+CisgICAgICAgICAgIDxjb250ZW50RXh0ZW5zaW9uCisgICAgICAgICAgICAgICAgIHBhdHRlcm49Im9yZy5lY2xpcHNlLnN0ZW0udWkudmlld3MuZXhwbG9yZXIuZXhwZXJpbWVudHMiPgorICAgICAgICAgICA8L2NvbnRlbnRFeHRlbnNpb24+CisgICAgICAgICAgIDxjb250ZW50RXh0ZW5zaW9uCisgICAgICAgICAgICAgICAgIHBhdHRlcm49Im9yZy5lY2xpcHNlLnN0ZW0udWkudmlld3MuZXhwbG9yZXIubW9kZWxzIj4KKyAgICAgICAgICAgPC9jb250ZW50RXh0ZW5zaW9uPgorICAgICAgICAgICA8Y29udGVudEV4dGVuc2lvbgorICAgICAgICAgICAgICAgICBwYXR0ZXJuPSJvcmcuZWNsaXBzZS5zdGVtLnVpLnZpZXdzLmV4cGxvcmVyLm1vZGlmaWVycyI+CisgICAgICAgICAgIDwvY29udGVudEV4dGVuc2lvbj4KKyAgICAgICAgICAgPGNvbnRlbnRFeHRlbnNpb24KKyAgICAgICAgICAgICAgICAgcGF0dGVybj0ib3JnLmVjbGlwc2Uuc3RlbS51aS52aWV3cy5leHBsb3Jlci5ncmFwaHMiPgorICAgICAgICAgICA8L2NvbnRlbnRFeHRlbnNpb24+CisgICAgICAgICAgIDxjb250ZW50RXh0ZW5zaW9uCisgICAgICAgICAgICAgICAgIHBhdHRlcm49Im9yZy5lY2xpcHNlLnN0ZW0udWkudmlld3MuZXhwbG9yZXIucmVjb3JkZWQiPgorICAgICAgICAgICA8L2NvbnRlbnRFeHRlbnNpb24+CisgICAgICAgICAgIDxjb250ZW50RXh0ZW5zaW9uCisgICAgICAgICAgICAgICAgIHBhdHRlcm49Im9yZy5lY2xpcHNlLnN0ZW0udWkudmlld3MuZXhwbG9yZXIudHJpZ2dlcnMiPgorICAgICAgICAgICA8L2NvbnRlbnRFeHRlbnNpb24+CisgICAgICAgICAgIDxjb250ZW50RXh0ZW5zaW9uCisgICAgICAgICAgICAgICAgIHBhdHRlcm49Im9yZy5lY2xpcHNlLnN0ZW0udWkudmlld3MuZXhwbG9yZXIubG9nZ2VycyI+CisgICAgICAgICAgIDwvY29udGVudEV4dGVuc2lvbj4gICAgICAgICAgIAorICAgICAgICAgICA8Y29udGVudEV4dGVuc2lvbgorICAgICAgICAgICAgICAgICBwYXR0ZXJuPSJvcmcuZWNsaXBzZS5zdGVtLnVpLnZpZXdzLmV4cGxvcmVyLnByZWRpY2F0ZXMiPgorICAgICAgICAgICA8L2NvbnRlbnRFeHRlbnNpb24+CisgICAgICAgICAgIDxjb250ZW50RXh0ZW5zaW9uCisgICAgICAgICAgICAgICAgIHBhdHRlcm49Im9yZy5lY2xpcHNlLnN0ZW0udWkudmlld3MuZXhwbG9yZXIuaWRlbnRpZmlhYmxlczIiPgorICAgICAgICAgICA8L2NvbnRlbnRFeHRlbnNpb24+CisgICAgICAgICAgIDxjb250ZW50RXh0ZW5zaW9uCisgICAgICAgICAgICAgICAgIHBhdHRlcm49Im9yZy5lY2xpcHNlLnN0ZW0udWkudmlld3MuZXhwbG9yZXIuZGVsZWdhdGluZ3dyYXBwZXJpdGVtcHJvdmlkZXIiPgorICAgICAgICAgICA8L2NvbnRlbnRFeHRlbnNpb24+CisgICAgICAgIDwvaW5jbHVkZXM+CisgICAgICAgCisgICAgIDwvdmlld2VyQ29udGVudEJpbmRpbmc+CisgICAgIAorICAgICA8dmlld2VyQWN0aW9uQmluZGluZworICAgICAgICAgICB2aWV3ZXJJZD0ib3JnLmVjbGlwc2UudWkubmF2aWdhdG9yLlByb2plY3RFeHBsb3JlciI+CisgICAgICAgIDxpbmNsdWRlcz4KKyAgICAgICAgICAgPGFjdGlvbkV4dGVuc2lvbgorICAgICAgICAgICAgICAgICBwYXR0ZXJuPSJvcmcuZWNsaXBzZS51aS5uYXZpZ2F0b3IucmVzb3VyY2VzLioiPgorICAgICAgICAgICA8L2FjdGlvbkV4dGVuc2lvbj4KKyAgICAgICAgPC9pbmNsdWRlcz4KKyAgICAgPC92aWV3ZXJBY3Rpb25CaW5kaW5nPgorICAgICA8dmlld2VyQWN0aW9uQmluZGluZworICAgICAgICAgICB2aWV3ZXJJZD0ib3JnLmVjbGlwc2UudWkubmF2aWdhdG9yLlByb2plY3RFeHBsb3JlciI+CisgICAgICAgIDxpbmNsdWRlcz4KKyAgICAgICAgICAgPGFjdGlvbkV4dGVuc2lvbgorICAgICAgICAgICAgICAgICBwYXR0ZXJuPSJvcmcuZWNsaXBzZS5zdGVtLnVpLmFjdGlvbi5lZGl0b3Iub3BlbiI+CisgICAgICAgICAgIDwvYWN0aW9uRXh0ZW5zaW9uPgorICAgICAgICA8L2luY2x1ZGVzPgorICAgICA8L3ZpZXdlckFjdGlvbkJpbmRpbmc+CisgIDwvZXh0ZW5zaW9uPgorICA8ZXh0ZW5zaW9uCisgICAgICAgIHBvaW50PSJvcmcuZWNsaXBzZS51aS5uYXZpZ2F0b3IubmF2aWdhdG9yQ29udGVudCI+CisgICAgICAgICAgICAgICAgCisgICAgIDxuYXZpZ2F0b3JDb250ZW50CisgICAgICAgICAgIGNvbnRlbnRQcm92aWRlcj0ib3JnLmVjbGlwc2Uuc3RlbS51aS52aWV3cy5leHBsb3Jlci5JZGVudGlmaWFibGVUcmVlTm9kZUNvbnRlbnRQcm92aWRlciIKKyAgICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLnN0ZW0udWkudmlld3MuZXhwbG9yZXIuaWRlbnRpZmlhYmxldHJlZW5vZGVzIgorICAgICAgICAgICBsYWJlbFByb3ZpZGVyPSJvcmcuZWNsaXBzZS5zdGVtLnVpLnZpZXdzLmV4cGxvcmVyLklkZW50aWZpYWJsZVRyZWVOb2RlTGFiZWxQcm92aWRlciIKKyAgICAgICAgICAgbmFtZT0iSWRlbnRpZmlhYmxlVHJlZU5vZGVzIj4KKyAgICAgICAgPHRyaWdnZXJQb2ludHM+CisgICAgICAgICAgIDxhZGFwdAorICAgICAgICAgICAgICAgICB0eXBlPSJvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdCI+CisgICAgICAgICAgIDwvYWRhcHQ+CisgICAgICAgIDwvdHJpZ2dlclBvaW50cz4KKyAgICAgICAgPHBvc3NpYmxlQ2hpbGRyZW4+CisgICAgICAgICAgIDxpbnN0YW5jZW9mCisgICAgICAgICAgICAgICAgIHZhbHVlPSJvcmcuZWNsaXBzZS5zdGVtLnVpLnZpZXdzLmV4cGxvcmVyLklkZW50aWZpYWJsZVRyZWVOb2RlIj4KKyAgICAgICAgICAgPC9pbnN0YW5jZW9mPgorICAgICAgICA8L3Bvc3NpYmxlQ2hpbGRyZW4+CisgICAgIDwvbmF2aWdhdG9yQ29udGVudD4KKyAgICAgCisgICAgIDxuYXZpZ2F0b3JDb250ZW50CisgICAgICAgICAgIGNvbnRlbnRQcm92aWRlcj0ib3JnLmVjbGlwc2Uuc3RlbS51aS52aWV3cy5leHBsb3Jlci5SZWNvcmRlZFRyZWVOb2RlQ29udGVudFByb3ZpZGVyIgorICAgICAgICAgICBpZD0ib3JnLmVjbGlwc2Uuc3RlbS51aS52aWV3cy5leHBsb3Jlci5yZWNvcmRlZCIKKyAgICAgICAgICAgbGFiZWxQcm92aWRlcj0ib3JnLmVjbGlwc2Uuc3RlbS51aS52aWV3cy5leHBsb3Jlci5SZWNvcmRlZFRyZWVOb2RlTGFiZWxQcm92aWRlciIKKyAgICAgICAgICAgbmFtZT0iJV9VSV9SZWNvcmRlZF9TaW1zICI+CisgICAgICAgIDx0cmlnZ2VyUG9pbnRzPgorICAgICAgICAgICA8YWRhcHQKKyAgICAgICAgICAgICAgICAgdHlwZT0ib3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3QiPgorICAgICAgICAgICA8L2FkYXB0PgorICAgICAgICA8L3RyaWdnZXJQb2ludHM+CisgICAgICAgIDxwb3NzaWJsZUNoaWxkcmVuPgorICAgICAgICAgICA8aW5zdGFuY2VvZgorICAgICAgICAgICAgICAgICB2YWx1ZT0ib3JnLmVjbGlwc2Uuc3RlbS51aS52aWV3cy5leHBsb3Jlci5SZWNvcmRlZFRyZWVOb2RlIj4KKyAgICAgICAgICAgPC9pbnN0YW5jZW9mPgorICAgICAgICA8L3Bvc3NpYmxlQ2hpbGRyZW4+CisgICAgIDwvbmF2aWdhdG9yQ29udGVudD4KKyAgICAgCisgICAgIDxjb21tb25GaWx0ZXIKKyAgICAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS51aS5uYXZpZ2F0b3IucmVzb3VyY2VzLmZpbHRlcnMuZm9sZGVycyIKKyAgICAgICAgICAgIG5hbWU9IiVmaWx0ZXJzLmZpbHRlci5mb2xkZXJzIgorICAgICAgICAgICAgZGVzY3JpcHRpb249IiVmaWx0ZXJzLmZpbHRlci5mb2xkZXJzIgorICAgICAgICAgICAgYWN0aXZlQnlEZWZhdWx0PSJ0cnVlIj4KKyAgICAgIDxmaWx0ZXJFeHByZXNzaW9uPgorICAgICAgIAk8YW5kPgorCSAgICAgICAgICA8YWRhcHQgdHlwZT0ib3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUZvbGRlciI+CisJICAgICAgICAgIDxvcj4KKwkgICAgICAgICAgCTx0ZXN0IHByb3BlcnR5PSJvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5uYW1lIiB2YWx1ZT0ibW9kZWxzIi8+CisJICAgICAgICAgIAk8dGVzdCBwcm9wZXJ0eT0ib3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMubmFtZSIgdmFsdWU9ImRlY29yYXRvcnMiLz4KKwkgICAgICAgICAgCTx0ZXN0IHByb3BlcnR5PSJvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5uYW1lIiB2YWx1ZT0iZXhwZXJpbWVudHMiLz4KKwkgICAgICAgICAgCTx0ZXN0IHByb3BlcnR5PSJvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5uYW1lIiB2YWx1ZT0iZ3JhcGhzIi8+CisJICAgICAgICAgIAk8dGVzdCBwcm9wZXJ0eT0ib3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMubmFtZSIgdmFsdWU9Im1vZGlmaWVycyIvPgorCSAgICAgICAgICAJPHRlc3QgcHJvcGVydHk9Im9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLm5hbWUiIHZhbHVlPSJwcmVkaWNhdGVzIi8+CisJICAgICAgICAgIAk8dGVzdCBwcm9wZXJ0eT0ib3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMubmFtZSIgdmFsdWU9IlJlY29yZGVkIFNpbXVsYXRpb25zIi8+CisJICAgICAgICAgIAk8dGVzdCBwcm9wZXJ0eT0ib3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMubmFtZSIgdmFsdWU9InNjZW5hcmlvcyIvPgorCSAgICAgICAgICAJPHRlc3QgcHJvcGVydHk9Im9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLm5hbWUiIHZhbHVlPSJzZXF1ZW5jZXJzIi8+CisJICAgICAgICAgIAk8dGVzdCBwcm9wZXJ0eT0ib3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMubmFtZSIgdmFsdWU9InRyaWdnZXJzIi8+CisJICAgICAgICAgIAk8dGVzdCBwcm9wZXJ0eT0ib3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMubmFtZSIgdmFsdWU9ImxvZ2dlcnMiLz4KKwkgICAgICAgICAgPC9vcj4KKyAgICAgICAgICAgCTwvYWRhcHQ+CSAgICAgICAgICAgIAorCSAgICAgIDwvYW5kPgorICAgICAgIDwvZmlsdGVyRXhwcmVzc2lvbj4KKyAgICAgIDwvY29tbW9uRmlsdGVyPgorICAKKyAgPC9leHRlbnNpb24+CisgIDxleHRlbnNpb24KKyAgICAgICAgcG9pbnQ9Im9yZy5lY2xpcHNlLnVpLm5hdmlnYXRvci5uYXZpZ2F0b3JDb250ZW50Ij4KKyAgICAgPG5hdmlnYXRvckNvbnRlbnQKKyAgICAgICAgICAgY29udGVudFByb3ZpZGVyPSJvcmcuZWNsaXBzZS5zdGVtLnVpLnZpZXdzLmV4cGxvcmVyLklkZW50aWZpYWJsZVByb3ZpZGVyIgorICAgICAgICAgICBpZD0ib3JnLmVjbGlwc2Uuc3RlbS51aS52aWV3cy5leHBsb3Jlci5pZGVudGlmaWFibGVzMiIKKyAgICAgICAgICAgbGFiZWxQcm92aWRlcj0ib3JnLmVjbGlwc2Uuc3RlbS51aS52aWV3cy5leHBsb3Jlci5JZGVudGlmaWFibGVQcm92aWRlciIKKyAgICAgICAgICAgbmFtZT0iJV9VSV9JZGVudGlmaWFibGVzIj4KKyAgICAgICAgPHRyaWdnZXJQb2ludHM+CisgICAgICAgICAgIDxpbnN0YW5jZW9mCisgICAgICAgICAgICAgICAgIHZhbHVlPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLklkZW50aWZpYWJsZSI+CisgICAgICAgICAgIDwvaW5zdGFuY2VvZj4KKyAgICAgICAgPC90cmlnZ2VyUG9pbnRzPgorICAgICAgICA8cG9zc2libGVDaGlsZHJlbj4KKyAgICAgICAgICAgPGluc3RhbmNlb2YKKyAgICAgICAgICAgICAgICAgdmFsdWU9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uSWRlbnRpZmlhYmxlIj4KKyAgICAgICAgICAgPC9pbnN0YW5jZW9mPgorICAgICAgICA8L3Bvc3NpYmxlQ2hpbGRyZW4+CisgICAgIDwvbmF2aWdhdG9yQ29udGVudD4KKyAgICAgPG5hdmlnYXRvckNvbnRlbnQKKyAgICAgICAgICAgY29udGVudFByb3ZpZGVyPSJvcmcuZWNsaXBzZS5zdGVtLnVpLnZpZXdzLmV4cGxvcmVyLklkZW50aWZpYWJsZUNvbnRlbnRQcm92aWRlciIKKyAgICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLnN0ZW0udWkudmlld3MuZXhwbG9yZXIuZ3JhcGhzIgorICAgICAgICAgICBsYWJlbFByb3ZpZGVyPSJvcmcuZWNsaXBzZS5zdGVtLnVpLnZpZXdzLmV4cGxvcmVyLklkZW50aWZpYWJsZVByb3ZpZGVyIgorICAgICAgICAgICBuYW1lPSIlX1VJX0dyYXBocyI+CisgICAgICAgIDx0cmlnZ2VyUG9pbnRzPgorICAgICAgICAgICA8aW5zdGFuY2VvZgorICAgICAgICAgICAgICAgICB2YWx1ZT0ib3JnLmVjbGlwc2Uuc3RlbS51aS52aWV3cy5leHBsb3Jlci5JZGVudGlmaWFibGVUcmVlTm9kZSRHcmFwaHNUcmVlTm9kZSI+CisgICAgICAgICAgIDwvaW5zdGFuY2VvZj4KKyAgICAgICAgPC90cmlnZ2VyUG9pbnRzPgorICAgICAgICA8cG9zc2libGVDaGlsZHJlbj4KKyAgICAgICAgICAgPG9yPgorICAgICAgICAgICAgICA8aW5zdGFuY2VvZgorICAgICAgICAgICAgICAgICAgICB2YWx1ZT0iamF2YS5sYW5nLlN0cmluZyI+CisgICAgICAgICAgICAgIDwvaW5zdGFuY2VvZj4KKyAgICAgICAgICAgICAgPGluc3RhbmNlb2YKKyAgICAgICAgICAgICAgICAgICAgdmFsdWU9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5HcmFwaCI+CisgICAgICAgICAgICAgIDwvaW5zdGFuY2VvZj4KKyAgICAgICAgICAgPC9vcj4KKyAgICAgICAgPC9wb3NzaWJsZUNoaWxkcmVuPgorICAgICAgICA8ZHJvcEFzc2lzdGFudAorICAgICAgICAgICAgICBjbGFzcz0ib3JnLmVjbGlwc2Uuc3RlbS51aS52aWV3cy5leHBsb3Jlci5JZGVudGlmaWFibGVEcm9wQWRhcHRlckFzc2lzdGFudCIKKyAgICAgICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLnN0ZW0udWkudmlld3MuZXhwbG9yZXIuaWRlbnRpZmFibGVkcm9wYXNzaXN0YW50Ij4KKyAgICAgICAgICAgPHBvc3NpYmxlRHJvcFRhcmdldHM+CisgICAgICAgICAgICAgIDxpbnN0YW5jZW9mCisgICAgICAgICAgICAgICAgICAgIHZhbHVlPSJvcmcuZWNsaXBzZS5zdGVtLnVpLnZpZXdzLmV4cGxvcmVyLklkZW50aWZpYWJsZVRyZWVOb2RlJEdyYXBoc1RyZWVOb2RlIj4KKyAgICAgICAgICAgICAgPC9pbnN0YW5jZW9mPgorICAgICAgICAgICA8L3Bvc3NpYmxlRHJvcFRhcmdldHM+CisgICAgICAgIDwvZHJvcEFzc2lzdGFudD4KKyAgICAgPC9uYXZpZ2F0b3JDb250ZW50PgorICAgICA8bmF2aWdhdG9yQ29udGVudAorICAgICAgICAgICBjb250ZW50UHJvdmlkZXI9Im9yZy5lY2xpcHNlLnN0ZW0udWkudmlld3MuZXhwbG9yZXIuSWRlbnRpZmlhYmxlQ29udGVudFByb3ZpZGVyIgorICAgICAgICAgICBpZD0ib3JnLmVjbGlwc2Uuc3RlbS51aS52aWV3cy5leHBsb3Jlci5zY2VuYXJpb3MiCisgICAgICAgICAgIGxhYmVsUHJvdmlkZXI9Im9yZy5lY2xpcHNlLnN0ZW0udWkudmlld3MuZXhwbG9yZXIuSWRlbnRpZmlhYmxlUHJvdmlkZXIiCisgICAgICAgICAgIG5hbWU9IiVfVUlfU2NlbmFyaW9zIj4KKyAgICAgICAgPHRyaWdnZXJQb2ludHM+CisgICAgICAgICAgIDxpbnN0YW5jZW9mCisgICAgICAgICAgICAgICAgIHZhbHVlPSJvcmcuZWNsaXBzZS5zdGVtLnVpLnZpZXdzLmV4cGxvcmVyLklkZW50aWZpYWJsZVRyZWVOb2RlJFNjZW5hcmlvc1RyZWVOb2RlIj4KKyAgICAgICAgICAgPC9pbnN0YW5jZW9mPgorICAgICAgICA8L3RyaWdnZXJQb2ludHM+CisgICAgICAgIDxwb3NzaWJsZUNoaWxkcmVuPgorICAgICAgICAgICA8b3I+CisgICAgICAgICAgICAgIDxpbnN0YW5jZW9mCisgICAgICAgICAgICAgICAgICAgIHZhbHVlPSJqYXZhLmxhbmcuU3RyaW5nIj4KKyAgICAgICAgICAgICAgPC9pbnN0YW5jZW9mPgorICAgICAgICAgICAgICA8aW5zdGFuY2VvZgorICAgICAgICAgICAgICAgICAgICB2YWx1ZT0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNjZW5hcmlvLlNjZW5hcmlvIj4KKyAgICAgICAgICAgICAgPC9pbnN0YW5jZW9mPgorICAgICAgICAgICA8L29yPgorICAgICAgICA8L3Bvc3NpYmxlQ2hpbGRyZW4+CisgICAgICAgIDxkcm9wQXNzaXN0YW50CisgICAgICAgICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS5zdGVtLnVpLnZpZXdzLmV4cGxvcmVyLklkZW50aWZpYWJsZURyb3BBZGFwdGVyQXNzaXN0YW50IgorICAgICAgICAgICAgICBpZD0ib3JnLmVjbGlwc2Uuc3RlbS51aS52aWV3cy5leHBsb3Jlci5pZGVudGlmYWJsZWRyb3Bhc3Npc3RhbnQiPgorICAgICAgICAgICA8cG9zc2libGVEcm9wVGFyZ2V0cz4KKyAgICAgICAgICAgICAgPGluc3RhbmNlb2YKKyAgICAgICAgICAgICAgICAgICAgdmFsdWU9Im9yZy5lY2xpcHNlLnN0ZW0udWkudmlld3MuZXhwbG9yZXIuSWRlbnRpZmlhYmxlVHJlZU5vZGUkU2NlbmFyaW9zVHJlZU5vZGUiPgorICAgICAgICAgICAgICA8L2luc3RhbmNlb2Y+CisgICAgICAgICAgIDwvcG9zc2libGVEcm9wVGFyZ2V0cz4KKyAgICAgICAgPC9kcm9wQXNzaXN0YW50PgorICAgICA8L25hdmlnYXRvckNvbnRlbnQ+CisgICAgIDxuYXZpZ2F0b3JDb250ZW50CisgICAgICAgICAgIGNvbnRlbnRQcm92aWRlcj0ib3JnLmVjbGlwc2Uuc3RlbS51aS52aWV3cy5leHBsb3Jlci5JZGVudGlmaWFibGVDb250ZW50UHJvdmlkZXIiCisgICAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5zdGVtLnVpLnZpZXdzLmV4cGxvcmVyLnNlcXVlbmNlcnMiCisgICAgICAgICAgIGxhYmVsUHJvdmlkZXI9Im9yZy5lY2xpcHNlLnN0ZW0udWkudmlld3MuZXhwbG9yZXIuSWRlbnRpZmlhYmxlUHJvdmlkZXIiCisgICAgICAgICAgIG5hbWU9IiVfVUlfU2VxdWVuY2VycyI+CisgICAgICAgIDx0cmlnZ2VyUG9pbnRzPgorICAgICAgICAgICA8aW5zdGFuY2VvZgorICAgICAgICAgICAgICAgICB2YWx1ZT0ib3JnLmVjbGlwc2Uuc3RlbS51aS52aWV3cy5leHBsb3Jlci5JZGVudGlmaWFibGVUcmVlTm9kZSRTZXF1ZW5jZXJzVHJlZU5vZGUiPgorICAgICAgICAgICA8L2luc3RhbmNlb2Y+CisgICAgICAgIDwvdHJpZ2dlclBvaW50cz4KKyAgICAgICAgPHBvc3NpYmxlQ2hpbGRyZW4+CisgICAgICAgICAgIDxvcj4KKyAgICAgICAgICAgICAgPGluc3RhbmNlb2YKKyAgICAgICAgICAgICAgICAgICAgdmFsdWU9ImphdmEubGFuZy5TdHJpbmciPgorICAgICAgICAgICAgICA8L2luc3RhbmNlb2Y+CisgICAgICAgICAgICAgIDxpbnN0YW5jZW9mCisgICAgICAgICAgICAgICAgICAgIHZhbHVlPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2VxdWVuY2VyLlNlcXVlbmNlciI+CisgICAgICAgICAgICAgIDwvaW5zdGFuY2VvZj4KKyAgICAgICAgICAgPC9vcj4KKyAgICAgICAgPC9wb3NzaWJsZUNoaWxkcmVuPgorICAgICAgICA8ZHJvcEFzc2lzdGFudAorICAgICAgICAgICAgICBjbGFzcz0ib3JnLmVjbGlwc2Uuc3RlbS51aS52aWV3cy5leHBsb3Jlci5JZGVudGlmaWFibGVEcm9wQWRhcHRlckFzc2lzdGFudCIKKyAgICAgICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLnN0ZW0udWkudmlld3MuZXhwbG9yZXIuaWRlbnRpZmFibGVkcm9wYXNzaXN0YW50Ij4KKyAgICAgICAgICAgPHBvc3NpYmxlRHJvcFRhcmdldHM+CisgICAgICAgICAgICAgIDxpbnN0YW5jZW9mCisgICAgICAgICAgICAgICAgICAgIHZhbHVlPSJvcmcuZWNsaXBzZS5zdGVtLnVpLnZpZXdzLmV4cGxvcmVyLklkZW50aWZpYWJsZVRyZWVOb2RlJFNlcXVlbmNlcnNUcmVlTm9kZSI+CisgICAgICAgICAgICAgIDwvaW5zdGFuY2VvZj4KKyAgICAgICAgICAgPC9wb3NzaWJsZURyb3BUYXJnZXRzPgorICAgICAgICA8L2Ryb3BBc3Npc3RhbnQ+CisgICAgIDwvbmF2aWdhdG9yQ29udGVudD4KKyAgICAgPG5hdmlnYXRvckNvbnRlbnQKKyAgICAgICAgICAgY29udGVudFByb3ZpZGVyPSJvcmcuZWNsaXBzZS5zdGVtLnVpLnZpZXdzLmV4cGxvcmVyLklkZW50aWZpYWJsZUNvbnRlbnRQcm92aWRlciIKKyAgICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLnN0ZW0udWkudmlld3MuZXhwbG9yZXIudHJpZ2dlcnMiCisgICAgICAgICAgIGxhYmVsUHJvdmlkZXI9Im9yZy5lY2xpcHNlLnN0ZW0udWkudmlld3MuZXhwbG9yZXIuSWRlbnRpZmlhYmxlUHJvdmlkZXIiCisgICAgICAgICAgIG5hbWU9IiVfVUlfVHJpZ2dlcnMiPgorICAgICAgICA8dHJpZ2dlclBvaW50cz4KKyAgICAgICAgICAgPGluc3RhbmNlb2YKKyAgICAgICAgICAgICAgICAgdmFsdWU9Im9yZy5lY2xpcHNlLnN0ZW0udWkudmlld3MuZXhwbG9yZXIuSWRlbnRpZmlhYmxlVHJlZU5vZGUkVHJpZ2dlcnNUcmVlTm9kZSI+CisgICAgICAgICAgIDwvaW5zdGFuY2VvZj4KKyAgICAgICAgPC90cmlnZ2VyUG9pbnRzPgorICAgICAgICA8cG9zc2libGVDaGlsZHJlbj4KKyAgICAgICAgICAgPG9yPgorICAgICAgICAgICAgICA8aW5zdGFuY2VvZgorICAgICAgICAgICAgICAgICAgICB2YWx1ZT0iamF2YS5sYW5nLlN0cmluZyI+CisgICAgICAgICAgICAgIDwvaW5zdGFuY2VvZj4KKyAgICAgICAgICAgICAgPGluc3RhbmNlb2YKKyAgICAgICAgICAgICAgICAgICAgdmFsdWU9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS50cmlnZ2VyLlRyaWdnZXIiPgorICAgICAgICAgICAgICA8L2luc3RhbmNlb2Y+CisgICAgICAgICAgIDwvb3I+CisgICAgICAgIDwvcG9zc2libGVDaGlsZHJlbj4KKyAgICAgICAgPGRyb3BBc3Npc3RhbnQKKyAgICAgICAgICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLnN0ZW0udWkudmlld3MuZXhwbG9yZXIuSWRlbnRpZmlhYmxlRHJvcEFkYXB0ZXJBc3Npc3RhbnQiCisgICAgICAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5zdGVtLnVpLnZpZXdzLmV4cGxvcmVyLmlkZW50aWZhYmxlZHJvcGFzc2lzdGFudCI+CisgICAgICAgICAgIDxwb3NzaWJsZURyb3BUYXJnZXRzPgorICAgICAgICAgICAgICA8aW5zdGFuY2VvZgorICAgICAgICAgICAgICAgICAgICB2YWx1ZT0ib3JnLmVjbGlwc2Uuc3RlbS51aS52aWV3cy5leHBsb3Jlci5JZGVudGlmaWFibGVUcmVlTm9kZSRUcmlnZ2Vyc1RyZWVOb2RlIj4KKyAgICAgICAgICAgICAgPC9pbnN0YW5jZW9mPgorICAgICAgICAgICA8L3Bvc3NpYmxlRHJvcFRhcmdldHM+CisgICAgICAgIDwvZHJvcEFzc2lzdGFudD4KKyAgICAgPC9uYXZpZ2F0b3JDb250ZW50PgorICAgICA8bmF2aWdhdG9yQ29udGVudAorICAgICAgICAgICBjb250ZW50UHJvdmlkZXI9Im9yZy5lY2xpcHNlLnN0ZW0udWkudmlld3MuZXhwbG9yZXIuSWRlbnRpZmlhYmxlQ29udGVudFByb3ZpZGVyIgorICAgICAgICAgICBpZD0ib3JnLmVjbGlwc2Uuc3RlbS51aS52aWV3cy5leHBsb3Jlci5leHBlcmltZW50cyIKKyAgICAgICAgICAgbGFiZWxQcm92aWRlcj0ib3JnLmVjbGlwc2Uuc3RlbS51aS52aWV3cy5leHBsb3Jlci5JZGVudGlmaWFibGVQcm92aWRlciIKKyAgICAgICAgICAgbmFtZT0iJV9VSV9FeHBlcmltZW50cyI+CisgICAgICAgIDx0cmlnZ2VyUG9pbnRzPgorICAgICAgICAgICA8aW5zdGFuY2VvZgorICAgICAgICAgICAgICAgICB2YWx1ZT0ib3JnLmVjbGlwc2Uuc3RlbS51aS52aWV3cy5leHBsb3Jlci5JZGVudGlmaWFibGVUcmVlTm9kZSRFeHBlcmltZW50c1RyZWVOb2RlIj4KKyAgICAgICAgICAgPC9pbnN0YW5jZW9mPgorICAgICAgICA8L3RyaWdnZXJQb2ludHM+CisgICAgICAgIDxwb3NzaWJsZUNoaWxkcmVuPgorICAgICAgICAgICA8b3I+CisgICAgICAgICAgICAgIDxpbnN0YW5jZW9mCisgICAgICAgICAgICAgICAgICAgIHZhbHVlPSJqYXZhLmxhbmcuU3RyaW5nIj4KKyAgICAgICAgICAgICAgPC9pbnN0YW5jZW9mPgorICAgICAgICAgICAgICA8aW5zdGFuY2VvZgorICAgICAgICAgICAgICAgICAgICB2YWx1ZT0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmV4cGVyaW1lbnQuRXhwZXJpbWVudCI+CisgICAgICAgICAgICAgIDwvaW5zdGFuY2VvZj4KKyAgICAgICAgICAgPC9vcj4KKyAgICAgICAgPC9wb3NzaWJsZUNoaWxkcmVuPgorICAgICAgICA8ZHJvcEFzc2lzdGFudAorICAgICAgICAgICAgICBjbGFzcz0ib3JnLmVjbGlwc2Uuc3RlbS51aS52aWV3cy5leHBsb3Jlci5JZGVudGlmaWFibGVEcm9wQWRhcHRlckFzc2lzdGFudCIKKyAgICAgICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLnN0ZW0udWkudmlld3MuZXhwbG9yZXIuaWRlbnRpZmFibGVkcm9wYXNzaXN0YW50Ij4KKyAgICAgICAgICAgPHBvc3NpYmxlRHJvcFRhcmdldHM+CisgICAgICAgICAgICAgIDxpbnN0YW5jZW9mCisgICAgICAgICAgICAgICAgICAgIHZhbHVlPSJvcmcuZWNsaXBzZS5zdGVtLnVpLnZpZXdzLmV4cGxvcmVyLklkZW50aWZpYWJsZVRyZWVOb2RlJEV4cGVyaW1lbnRzVHJlZU5vZGUiPgorICAgICAgICAgICAgICA8L2luc3RhbmNlb2Y+CisgICAgICAgICAgIDwvcG9zc2libGVEcm9wVGFyZ2V0cz4KKyAgICAgICAgPC9kcm9wQXNzaXN0YW50PgorICAgICA8L25hdmlnYXRvckNvbnRlbnQ+CisgICAgIDxuYXZpZ2F0b3JDb250ZW50CisgICAgICAgICAgIGNvbnRlbnRQcm92aWRlcj0ib3JnLmVjbGlwc2Uuc3RlbS51aS52aWV3cy5leHBsb3Jlci5JZGVudGlmaWFibGVDb250ZW50UHJvdmlkZXIiCisgICAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5zdGVtLnVpLnZpZXdzLmV4cGxvcmVyLm1vZGlmaWVycyIKKyAgICAgICAgICAgbGFiZWxQcm92aWRlcj0ib3JnLmVjbGlwc2Uuc3RlbS51aS52aWV3cy5leHBsb3Jlci5JZGVudGlmaWFibGVQcm92aWRlciIKKyAgICAgICAgICAgbmFtZT0iJV9VSV9Nb2RpZmllcnMiPgorICAgICAgICA8dHJpZ2dlclBvaW50cz4KKyAgICAgICAgICAgPGluc3RhbmNlb2YKKyAgICAgICAgICAgICAgICAgdmFsdWU9Im9yZy5lY2xpcHNlLnN0ZW0udWkudmlld3MuZXhwbG9yZXIuSWRlbnRpZmlhYmxlVHJlZU5vZGUkTW9kaWZpZXJzVHJlZU5vZGUiPgorICAgICAgICAgICA8L2luc3RhbmNlb2Y+CisgICAgICAgIDwvdHJpZ2dlclBvaW50cz4KKyAgICAgICAgPHBvc3NpYmxlQ2hpbGRyZW4+CisgICAgICAgICAgIDxvcj4KKyAgICAgICAgICAgICAgPGluc3RhbmNlb2YKKyAgICAgICAgICAgICAgICAgICAgdmFsdWU9ImphdmEubGFuZy5TdHJpbmciPgorICAgICAgICAgICAgICA8L2luc3RhbmNlb2Y+CisgICAgICAgICAgICAgIDxpbnN0YW5jZW9mCisgICAgICAgICAgICAgICAgICAgIHZhbHVlPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuTW9kaWZpZXIiPgorICAgICAgICAgICAgICA8L2luc3RhbmNlb2Y+CisgICAgICAgICAgIDwvb3I+CisgICAgICAgIDwvcG9zc2libGVDaGlsZHJlbj4KKyAgICAgICAgPGRyb3BBc3Npc3RhbnQKKyAgICAgICAgICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLnN0ZW0udWkudmlld3MuZXhwbG9yZXIuSWRlbnRpZmlhYmxlRHJvcEFkYXB0ZXJBc3Npc3RhbnQiCisgICAgICAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5zdGVtLnVpLnZpZXdzLmV4cGxvcmVyLmlkZW50aWZhYmxlZHJvcGFzc2lzdGFudCI+CisgICAgICAgICAgIDxwb3NzaWJsZURyb3BUYXJnZXRzPgorICAgICAgICAgICAgICA8aW5zdGFuY2VvZgorICAgICAgICAgICAgICAgICAgICB2YWx1ZT0ib3JnLmVjbGlwc2Uuc3RlbS51aS52aWV3cy5leHBsb3Jlci5JZGVudGlmaWFibGVUcmVlTm9kZSRNb2RpZmllcnNUcmVlTm9kZSI+CisgICAgICAgICAgICAgIDwvaW5zdGFuY2VvZj4KKyAgICAgICAgICAgPC9wb3NzaWJsZURyb3BUYXJnZXRzPgorICAgICAgICA8L2Ryb3BBc3Npc3RhbnQ+CisgICAgIDwvbmF2aWdhdG9yQ29udGVudD4KKyAgICAgPG5hdmlnYXRvckNvbnRlbnQKKyAgICAgICAgICAgY29udGVudFByb3ZpZGVyPSJvcmcuZWNsaXBzZS5zdGVtLnVpLnZpZXdzLmV4cGxvcmVyLklkZW50aWZpYWJsZUNvbnRlbnRQcm92aWRlciIKKyAgICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLnN0ZW0udWkudmlld3MuZXhwbG9yZXIubW9kZWxzIgorICAgICAgICAgICBsYWJlbFByb3ZpZGVyPSJvcmcuZWNsaXBzZS5zdGVtLnVpLnZpZXdzLmV4cGxvcmVyLklkZW50aWZpYWJsZVByb3ZpZGVyIgorICAgICAgICAgICBuYW1lPSIlX1VJX01vZGVscyI+CisgICAgICAgIDx0cmlnZ2VyUG9pbnRzPgorICAgICAgICAgICA8aW5zdGFuY2VvZgorICAgICAgICAgICAgICAgICB2YWx1ZT0ib3JnLmVjbGlwc2Uuc3RlbS51aS52aWV3cy5leHBsb3Jlci5JZGVudGlmaWFibGVUcmVlTm9kZSRNb2RlbHNUcmVlTm9kZSI+CisgICAgICAgICAgIDwvaW5zdGFuY2VvZj4KKyAgICAgICAgPC90cmlnZ2VyUG9pbnRzPgorICAgICAgICA8cG9zc2libGVDaGlsZHJlbj4KKyAgICAgICAgICAgPG9yPgorICAgICAgICAgICAgICA8aW5zdGFuY2VvZgorICAgICAgICAgICAgICAgICAgICB2YWx1ZT0iamF2YS5sYW5nLlN0cmluZyI+CisgICAgICAgICAgICAgIDwvaW5zdGFuY2VvZj4KKyAgICAgICAgICAgICAgPGluc3RhbmNlb2YKKyAgICAgICAgICAgICAgICAgICAgdmFsdWU9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5Nb2RlbCI+CisgICAgICAgICAgICAgIDwvaW5zdGFuY2VvZj4KKyAgICAgICAgICAgPC9vcj4KKyAgICAgICAgPC9wb3NzaWJsZUNoaWxkcmVuPgorICAgICAgICA8ZHJvcEFzc2lzdGFudAorICAgICAgICAgICAgICBjbGFzcz0ib3JnLmVjbGlwc2Uuc3RlbS51aS52aWV3cy5leHBsb3Jlci5JZGVudGlmaWFibGVEcm9wQWRhcHRlckFzc2lzdGFudCIKKyAgICAgICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLnN0ZW0udWkudmlld3MuZXhwbG9yZXIuaWRlbnRpZmFibGVkcm9wYXNzaXN0YW50Ij4KKyAgICAgICAgICAgPHBvc3NpYmxlRHJvcFRhcmdldHM+CisgICAgICAgICAgICAgIDxpbnN0YW5jZW9mCisgICAgICAgICAgICAgICAgICAgIHZhbHVlPSJvcmcuZWNsaXBzZS5zdGVtLnVpLnZpZXdzLmV4cGxvcmVyLklkZW50aWZpYWJsZVRyZWVOb2RlJE1vZGVsc1RyZWVOb2RlIj4KKyAgICAgICAgICAgICAgPC9pbnN0YW5jZW9mPgorICAgICAgICAgICA8L3Bvc3NpYmxlRHJvcFRhcmdldHM+CisgICAgICAgIDwvZHJvcEFzc2lzdGFudD4KKyAgICAgPC9uYXZpZ2F0b3JDb250ZW50PgorICAgICA8bmF2aWdhdG9yQ29udGVudAorICAgICAgICAgICBjb250ZW50UHJvdmlkZXI9Im9yZy5lY2xpcHNlLnN0ZW0udWkudmlld3MuZXhwbG9yZXIuSWRlbnRpZmlhYmxlQ29udGVudFByb3ZpZGVyIgorICAgICAgICAgICBpZD0ib3JnLmVjbGlwc2Uuc3RlbS51aS52aWV3cy5leHBsb3Jlci5wcmVkaWNhdGVzIgorICAgICAgICAgICBsYWJlbFByb3ZpZGVyPSJvcmcuZWNsaXBzZS5zdGVtLnVpLnZpZXdzLmV4cGxvcmVyLklkZW50aWZpYWJsZVByb3ZpZGVyIgorICAgICAgICAgICBuYW1lPSIlX1VJX1ByZWRpY2F0ZXMiPgorICAgICAgICA8dHJpZ2dlclBvaW50cz4KKyAgICAgICAgICAgPGluc3RhbmNlb2YKKyAgICAgICAgICAgICAgICAgdmFsdWU9Im9yZy5lY2xpcHNlLnN0ZW0udWkudmlld3MuZXhwbG9yZXIuSWRlbnRpZmlhYmxlVHJlZU5vZGUkUHJlZGljYXRlc1RyZWVOb2RlIj4KKyAgICAgICAgICAgPC9pbnN0YW5jZW9mPgorICAgICAgICA8L3RyaWdnZXJQb2ludHM+CisgICAgICAgIDxwb3NzaWJsZUNoaWxkcmVuPgorICAgICAgICAgICA8b3I+CisgICAgICAgICAgICAgIDxpbnN0YW5jZW9mCisgICAgICAgICAgICAgICAgICAgIHZhbHVlPSJqYXZhLmxhbmcuU3RyaW5nIj4KKyAgICAgICAgICAgICAgPC9pbnN0YW5jZW9mPgorICAgICAgICAgICAgICA8aW5zdGFuY2VvZgorICAgICAgICAgICAgICAgICAgICB2YWx1ZT0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZS5QcmVkaWNhdGUiPgorICAgICAgICAgICAgICA8L2luc3RhbmNlb2Y+CisgICAgICAgICAgIDwvb3I+CisgICAgICAgIDwvcG9zc2libGVDaGlsZHJlbj4KKyAgICAgICAgPGRyb3BBc3Npc3RhbnQKKyAgICAgICAgICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLnN0ZW0udWkudmlld3MuZXhwbG9yZXIuSWRlbnRpZmlhYmxlRHJvcEFkYXB0ZXJBc3Npc3RhbnQiCisgICAgICAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5zdGVtLnVpLnZpZXdzLmV4cGxvcmVyLmlkZW50aWZhYmxlZHJvcGFzc2lzdGFudCI+CisgICAgICAgICAgIDxwb3NzaWJsZURyb3BUYXJnZXRzPgorICAgICAgICAgICAgICA8aW5zdGFuY2VvZgorICAgICAgICAgICAgICAgICAgICB2YWx1ZT0ib3JnLmVjbGlwc2Uuc3RlbS51aS52aWV3cy5leHBsb3Jlci5JZGVudGlmaWFibGVUcmVlTm9kZSRQcmVkaWNhdGVzVHJlZU5vZGUiPgorICAgICAgICAgICAgICA8L2luc3RhbmNlb2Y+CisgICAgICAgICAgIDwvcG9zc2libGVEcm9wVGFyZ2V0cz4KKyAgICAgICAgPC9kcm9wQXNzaXN0YW50PgorICAgICA8L25hdmlnYXRvckNvbnRlbnQ+CisgICAgIDxuYXZpZ2F0b3JDb250ZW50CisgICAgICAgICAgIGNvbnRlbnRQcm92aWRlcj0ib3JnLmVjbGlwc2Uuc3RlbS51aS52aWV3cy5leHBsb3Jlci5JZGVudGlmaWFibGVDb250ZW50UHJvdmlkZXIiCisgICAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5zdGVtLnVpLnZpZXdzLmV4cGxvcmVyLmRlY29yYXRvcnMiCisgICAgICAgICAgIGxhYmVsUHJvdmlkZXI9Im9yZy5lY2xpcHNlLnN0ZW0udWkudmlld3MuZXhwbG9yZXIuSWRlbnRpZmlhYmxlUHJvdmlkZXIiCisgICAgICAgICAgIG5hbWU9IiVfVUlfRGVjb3JhdG9ycyI+CisgICAgICAgIDx0cmlnZ2VyUG9pbnRzPgorICAgICAgICAgICA8aW5zdGFuY2VvZgorICAgICAgICAgICAgICAgICB2YWx1ZT0ib3JnLmVjbGlwc2Uuc3RlbS51aS52aWV3cy5leHBsb3Jlci5JZGVudGlmaWFibGVUcmVlTm9kZSREZWNvcmF0b3JzVHJlZU5vZGUiPgorICAgICAgICAgICA8L2luc3RhbmNlb2Y+CisgICAgICAgIDwvdHJpZ2dlclBvaW50cz4KKyAgICAgICAgPHBvc3NpYmxlQ2hpbGRyZW4+CisgICAgICAgICAgIDxvcj4KKyAgICAgICAgICAgICAgPGluc3RhbmNlb2YKKyAgICAgICAgICAgICAgICAgICAgdmFsdWU9ImphdmEubGFuZy5TdHJpbmciPgorICAgICAgICAgICAgICA8L2luc3RhbmNlb2Y+CisgICAgICAgICAgICAgIDxpbnN0YW5jZW9mCisgICAgICAgICAgICAgICAgICAgIHZhbHVlPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuRGVjb3JhdG9yIj4KKyAgICAgICAgICAgICAgPC9pbnN0YW5jZW9mPgorICAgICAgICAgICA8L29yPgorICAgICAgICA8L3Bvc3NpYmxlQ2hpbGRyZW4+CisgICAgICAgIDxkcm9wQXNzaXN0YW50CisgICAgICAgICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS5zdGVtLnVpLnZpZXdzLmV4cGxvcmVyLklkZW50aWZpYWJsZURyb3BBZGFwdGVyQXNzaXN0YW50IgorICAgICAgICAgICAgICBpZD0ib3JnLmVjbGlwc2Uuc3RlbS51aS52aWV3cy5leHBsb3Jlci5pZGVudGlmYWJsZWRyb3Bhc3Npc3RhbnQiPgorICAgICAgICAgICA8cG9zc2libGVEcm9wVGFyZ2V0cz4KKyAgICAgICAgICAgICAgPGluc3RhbmNlb2YKKyAgICAgICAgICAgICAgICAgICAgdmFsdWU9Im9yZy5lY2xpcHNlLnN0ZW0udWkudmlld3MuZXhwbG9yZXIuSWRlbnRpZmlhYmxlVHJlZU5vZGUkRGVjb3JhdG9yc1RyZWVOb2RlIj4KKyAgICAgICAgICAgICAgPC9pbnN0YW5jZW9mPgorICAgICAgICAgICA8L3Bvc3NpYmxlRHJvcFRhcmdldHM+CisgICAgICAgIDwvZHJvcEFzc2lzdGFudD4KKyAgICAgPC9uYXZpZ2F0b3JDb250ZW50PgorCisgICAgIDxuYXZpZ2F0b3JDb250ZW50CisgICAgICAgICAgIGNvbnRlbnRQcm92aWRlcj0ib3JnLmVjbGlwc2Uuc3RlbS51aS52aWV3cy5leHBsb3Jlci5JZGVudGlmaWFibGVDb250ZW50UHJvdmlkZXIiCisgICAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5zdGVtLnVpLnZpZXdzLmV4cGxvcmVyLmxvZ2dlcnMiCisgICAgICAgICAgIGxhYmVsUHJvdmlkZXI9Im9yZy5lY2xpcHNlLnN0ZW0udWkudmlld3MuZXhwbG9yZXIuSWRlbnRpZmlhYmxlUHJvdmlkZXIiCisgICAgICAgICAgIG5hbWU9IiVfVUlfTG9nZ2VycyI+CisgICAgICAgIDx0cmlnZ2VyUG9pbnRzPgorICAgICAgICAgICA8aW5zdGFuY2VvZgorICAgICAgICAgICAgICAgICB2YWx1ZT0ib3JnLmVjbGlwc2Uuc3RlbS51aS52aWV3cy5leHBsb3Jlci5JZGVudGlmaWFibGVUcmVlTm9kZSRMb2dnZXJzVHJlZU5vZGUiPgorICAgICAgICAgICA8L2luc3RhbmNlb2Y+CisgICAgICAgIDwvdHJpZ2dlclBvaW50cz4KKyAgICAgICAgPHBvc3NpYmxlQ2hpbGRyZW4+CisgICAgICAgICAgIDxvcj4KKyAgICAgICAgICAgICAgPGluc3RhbmNlb2YKKyAgICAgICAgICAgICAgICAgICAgdmFsdWU9ImphdmEubGFuZy5TdHJpbmciPgorICAgICAgICAgICAgICA8L2luc3RhbmNlb2Y+CisgICAgICAgICAgICAgIDxpbnN0YW5jZW9mCisgICAgICAgICAgICAgICAgICAgIHZhbHVlPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUubG9nZ2VyLkxvZ2dlciI+CisgICAgICAgICAgICAgIDwvaW5zdGFuY2VvZj4KKyAgICAgICAgICAgPC9vcj4KKyAgICAgICAgPC9wb3NzaWJsZUNoaWxkcmVuPgorICAgICAgICA8ZHJvcEFzc2lzdGFudAorICAgICAgICAgICAgICBjbGFzcz0ib3JnLmVjbGlwc2Uuc3RlbS51aS52aWV3cy5leHBsb3Jlci5JZGVudGlmaWFibGVEcm9wQWRhcHRlckFzc2lzdGFudCIKKyAgICAgICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLnN0ZW0udWkudmlld3MuZXhwbG9yZXIuaWRlbnRpZmFibGVkcm9wYXNzaXN0YW50Ij4KKyAgICAgICAgICAgPHBvc3NpYmxlRHJvcFRhcmdldHM+CisgICAgICAgICAgICAgIDxpbnN0YW5jZW9mCisgICAgICAgICAgICAgICAgICAgIHZhbHVlPSJvcmcuZWNsaXBzZS5zdGVtLnVpLnZpZXdzLmV4cGxvcmVyLklkZW50aWZpYWJsZVRyZWVOb2RlJExvZ2dlcnNUcmVlTm9kZSI+CisgICAgICAgICAgICAgIDwvaW5zdGFuY2VvZj4KKyAgICAgICAgICAgPC9wb3NzaWJsZURyb3BUYXJnZXRzPgorICAgICAgICA8L2Ryb3BBc3Npc3RhbnQ+CisgICAgIDwvbmF2aWdhdG9yQ29udGVudD4KKyAgICAgCisgICAgIDxhY3Rpb25Qcm92aWRlcgorICAgICAgICAgICBjbGFzcz0ib3JnLmVjbGlwc2Uuc3RlbS51aS5oYW5kbGVycy5FZGl0b3JBY3Rpb25Qcm92aWRlciIKKyAgICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLnN0ZW0udWkuYWN0aW9uLmVkaXRvci5vcGVuIj4KKyAgICAgICAgPGVuYWJsZW1lbnQ+CisgICAgICAgICAgIDxpbnN0YW5jZW9mCisgICAgICAgICAgICAgICAgIHZhbHVlPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLklkZW50aWZpYWJsZSI+CisgICAgICAgICAgIDwvaW5zdGFuY2VvZj4KKyAgICAgICAgPC9lbmFibGVtZW50PgorICAgICA8L2FjdGlvblByb3ZpZGVyPgorICAgICAKKyAgPC9leHRlbnNpb24+CisgIAorICAKKyAgPGV4dGVuc2lvbgorICAgIHBvaW50PSJvcmcuZWNsaXBzZS51aS5pbnRybyI+CisgICAgPGludHJvUHJvZHVjdEJpbmRpbmcKKyAgICAgICAgaW50cm9JZD0ib3JnLmVjbGlwc2UudWkuaW50cm8udW5pdmVyc2FsIgorICAgICAgICBwcm9kdWN0SWQ9Im9yZy5lY2xpcHNlLnN0ZW0udWkucHJvZHVjdCI+CisgICAgPC9pbnRyb1Byb2R1Y3RCaW5kaW5nPgorICA8L2V4dGVuc2lvbj4KKyAgCisgIDxleHRlbnNpb24KKyAgICBwb2ludD0ib3JnLmVjbGlwc2UudWkuaW50cm8uY29uZmlnRXh0ZW5zaW9uIj4KKyAgICA8Y29uZmlnRXh0ZW5zaW9uCisgICAgICAgIGNvbmZpZ0lkPSJvcmcuZWNsaXBzZS51aS5pbnRyby51bml2ZXJzYWxDb25maWciCisgICAgICAgIGNvbnRlbnQ9IiRubCQvaW50cm8vb3ZlcnZpZXdFeHRlbnNpb25Db250ZW50LnhtbCI+CisgICAgPC9jb25maWdFeHRlbnNpb24+CisgICAgPGNvbmZpZ0V4dGVuc2lvbgorICAgICAgICBjb25maWdJZD0ib3JnLmVjbGlwc2UudWkuaW50cm8udW5pdmVyc2FsQ29uZmlnIgorICAgICAgICBjb250ZW50PSIkbmwkL2ludHJvL3doYXRzbmV3RXh0ZW5zaW9uQ29udGVudC54bWwiPgorICAgIDwvY29uZmlnRXh0ZW5zaW9uPgorICAgIDxjb25maWdFeHRlbnNpb24KKyAgICAgICAgY29uZmlnSWQ9Im9yZy5lY2xpcHNlLnVpLmludHJvLnVuaXZlcnNhbENvbmZpZyIKKyAgICAgICAgY29udGVudD0iJG5sJC9pbnRyby90dXRvcmlhbHNFeHRlbnNpb25Db250ZW50LnhtbCI+CisgICAgPC9jb25maWdFeHRlbnNpb24+CisgIDwvZXh0ZW5zaW9uPgorCisKKyAgPGV4dGVuc2lvbgorICAgICAgICAgcG9pbnQ9Im9yZy5lY2xpcHNlLnVpLnNwbGFzaEhhbmRsZXJzIj4KKyAgICAgIDxzcGxhc2hIYW5kbGVyCisgICAgICAgICAgICBjbGFzcz0ib3JnLmVjbGlwc2Uuc3RlbS51aS5zcGxhc2hoYW5kbGVyLlNwbGFzaEhhbmRsZXIiCisgICAgICAgICAgICBpZD0ib3JnLmVjbGlwc2Uuc3RlbS51aS5zcGxhc2hoYW5kbGVyIj4KKyAgICAgIDwvc3BsYXNoSGFuZGxlcj4KKyAgICAgIDxzcGxhc2hIYW5kbGVyUHJvZHVjdEJpbmRpbmcKKyAgICAgICAgICAgIHByb2R1Y3RJZD0ib3JnLmVjbGlwc2Uuc3RlbS51aS5wcm9kdWN0IgorICAgICAgICAgICAgc3BsYXNoSWQ9Im9yZy5lY2xpcHNlLnN0ZW0udWkuc3BsYXNoaGFuZGxlciI+CisgICAgICA8L3NwbGFzaEhhbmRsZXJQcm9kdWN0QmluZGluZz4KKyAgIDwvZXh0ZW5zaW9uPgorICA8ZXh0ZW5zaW9uCisgICAgICAgIGlkPSJwcm9kdWN0IgorICAgICAgICBwb2ludD0ib3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLnByb2R1Y3RzIj4KKyAgICAgPHByb2R1Y3QKKyAgICAgICAgICAgYXBwbGljYXRpb249Im9yZy5lY2xpcHNlLnN0ZW0udWkuQ29yZUVkaXRvckFkdmlzb3JBcHBsaWNhdGlvbiIKKyAgICAgICAgICAgbmFtZT0iU1RFTSI+CisgICAgICAgIDxwcm9wZXJ0eQorICAgICAgICAgICAgICBuYW1lPSJ3aW5kb3dJbWFnZXMiCisgICAgICAgICAgICAgIHZhbHVlPSJicmFuZGluZy9vaGYxNl8xNl8zMi5naWYsYnJhbmRpbmcvb2hmMzJfMzJfMzIuZ2lmLGJyYW5kaW5nL29oZjQ4XzQ4XzMyLmdpZixicmFuZGluZy9vaGY2NF82NF8zMi5naWYsYnJhbmRpbmcvb2hmMTI4XzEyOF8zMi5naWYiPgorICAgICAgICA8L3Byb3BlcnR5PgorICAgICAgICA8cHJvcGVydHkKKyAgICAgICAgICAgICAgbmFtZT0iYWJvdXRUZXh0IgorICAgICAgICAgICAgICB2YWx1ZT0iU1RFTSAtIFNwYXRpb3RlbXBvcmFsIEVwaWRlbW9sb2dpY2FsIE1vZGVsZXIiPgorICAgICAgICA8L3Byb3BlcnR5PgorICAgICAgICA8cHJvcGVydHkKKyAgICAgICAgICAgICAgbmFtZT0iYWJvdXRJbWFnZSIKKyAgICAgICAgICAgICAgdmFsdWU9ImJyYW5kaW5nL29oZjY0XzY0XzMyLmdpZiI+CisgICAgICAgIDwvcHJvcGVydHk+CisgICAgICAgIDxwcm9wZXJ0eQorICAgICAgICAgICAgICBuYW1lPSJzdGFydHVwRm9yZWdyb3VuZENvbG9yIgorICAgICAgICAgICAgICB2YWx1ZT0iRkZGRkZGIj4KKyAgICAgICAgPC9wcm9wZXJ0eT4KKyAgICAgICAgPHByb3BlcnR5CisgICAgICAgICAgICAgIG5hbWU9InN0YXJ0dXBQcm9ncmVzc1JlY3QiCisgICAgICAgICAgICAgIHZhbHVlPSIwLDQxMyw0MzEsMTUiPgorICAgICAgICA8L3Byb3BlcnR5PgorICAgICAgICA8cHJvcGVydHkKKyAgICAgICAgICAgICAgbmFtZT0ic3RhcnR1cE1lc3NhZ2VSZWN0IgorICAgICAgICAgICAgICB2YWx1ZT0iMTAsMzgwLDQzMSwyMCI+CisgICAgICAgIDwvcHJvcGVydHk+CisgICAgICAgIDxwcm9wZXJ0eQorICAgICAgICAgICAgICBuYW1lPSJhcHBOYW1lIgorICAgICAgICAgICAgICB2YWx1ZT0iU1RFTSI+CisgICAgICAgIDwvcHJvcGVydHk+CisgICAgICAgIDxwcm9wZXJ0eQorICAgICAgICAgICAgICBuYW1lPSJwcmVmZXJlbmNlQ3VzdG9taXphdGlvbiIKKyAgICAgICAgICAgICAgdmFsdWU9InBsdWdpbl9jdXN0b21pemF0aW9uLmluaSI+CisgICAgICAgIDwvcHJvcGVydHk+CisgICAgIDwvcHJvZHVjdD4KKyAgPC9leHRlbnNpb24+CisgIDxleHRlbnNpb24KKyAgICAgICAgaWQ9InByb2R1Y3QiCisgICAgICAgIHBvaW50PSJvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUucHJvZHVjdHMiPgorICAgICA8cHJvZHVjdAorICAgICAgICAgICBhcHBsaWNhdGlvbj0ib3JnLmVjbGlwc2Uuc3RlbS51aS5Db3JlRWRpdG9yQWR2aXNvckFwcGxpY2F0aW9uIgorICAgICAgICAgICBuYW1lPSJTVEVNIj4KKyAgICAgICAgPHByb3BlcnR5CisgICAgICAgICAgICAgIG5hbWU9IndpbmRvd0ltYWdlcyIKKyAgICAgICAgICAgICAgdmFsdWU9ImJyYW5kaW5nL29oZjE2XzE2XzMyLmdpZixicmFuZGluZy9vaGYzMl8zMl8zMi5naWYsYnJhbmRpbmcvb2hmNDhfNDhfMzIuZ2lmLGJyYW5kaW5nL29oZjY0XzY0XzMyLmdpZixicmFuZGluZy9vaGYxMjhfMTI4XzMyLmdpZiI+CisgICAgICAgIDwvcHJvcGVydHk+CisgICAgICAgIDxwcm9wZXJ0eQorICAgICAgICAgICAgICBuYW1lPSJhYm91dFRleHQiCisgICAgICAgICAgICAgIHZhbHVlPSJTcGF0aW8tVGVtcG9yYWwgRXBpZGVtb2xvZ2ljYWwvRXZlbnQgTW9kZWxlciAoU1RFTSkiPgorICAgICAgICA8L3Byb3BlcnR5PgorICAgICAgICA8cHJvcGVydHkKKyAgICAgICAgICAgICAgbmFtZT0iYWJvdXRJbWFnZSIKKyAgICAgICAgICAgICAgdmFsdWU9ImJyYW5kaW5nL29oZjY0XzY0XzMyLmdpZiI+CisgICAgICAgIDwvcHJvcGVydHk+CisgICAgICAgIDxwcm9wZXJ0eQorICAgICAgICAgICAgICBuYW1lPSJzdGFydHVwRm9yZWdyb3VuZENvbG9yIgorICAgICAgICAgICAgICB2YWx1ZT0iRkZGRkZGIj4KKyAgICAgICAgPC9wcm9wZXJ0eT4KKyAgICAgICAgPHByb3BlcnR5CisgICAgICAgICAgICAgIG5hbWU9InN0YXJ0dXBQcm9ncmVzc1JlY3QiCisgICAgICAgICAgICAgIHZhbHVlPSIwLDQxMyw0MzEsMTUiPgorICAgICAgICA8L3Byb3BlcnR5PgorICAgICAgICA8cHJvcGVydHkKKyAgICAgICAgICAgICAgbmFtZT0ic3RhcnR1cE1lc3NhZ2VSZWN0IgorICAgICAgICAgICAgICB2YWx1ZT0iMTAsMzgwLDQzMSwyMCI+CisgICAgICAgIDwvcHJvcGVydHk+CisgICAgIDwvcHJvZHVjdD4KKyAgPC9leHRlbnNpb24+CisgIDxleHRlbnNpb24KKyAgICAgICAgaWQ9InByb2R1Y3QiCisgICAgICAgIHBvaW50PSJvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUucHJvZHVjdHMiPgorICAgICA8cHJvZHVjdAorICAgICAgICAgICBhcHBsaWNhdGlvbj0ib3JnLmVjbGlwc2Uuc3RlbS51aS5Db3JlRWRpdG9yQWR2aXNvckFwcGxpY2F0aW9uIgorICAgICAgICAgICBuYW1lPSJTVEVNIj4KKyAgICAgICAgPHByb3BlcnR5CisgICAgICAgICAgICAgIG5hbWU9IndpbmRvd0ltYWdlcyIKKyAgICAgICAgICAgICAgdmFsdWU9ImJyYW5kaW5nL29oZjE2XzE2XzMyLmdpZixicmFuZGluZy9vaGYzMl8zMl8zMi5naWYsYnJhbmRpbmcvb2hmNDhfNDhfMzIuZ2lmLGJyYW5kaW5nL29oZjY0XzY0XzMyLmdpZixicmFuZGluZy9vaGYxMjhfMTI4XzMyLmdpZiI+CisgICAgICAgIDwvcHJvcGVydHk+CisgICAgICAgIDxwcm9wZXJ0eQorICAgICAgICAgICAgICBuYW1lPSJhYm91dFRleHQiCisgICAgICAgICAgICAgIHZhbHVlPSJTcGF0aW8tVGVtcG9yYWwgRXBpZGVtb2xvZ2ljYWwvRXZlbnQgTW9kZWxlciAoU1RFTSkiPgorICAgICAgICA8L3Byb3BlcnR5PgorICAgICAgICA8cHJvcGVydHkKKyAgICAgICAgICAgICAgbmFtZT0iYWJvdXRJbWFnZSIKKyAgICAgICAgICAgICAgdmFsdWU9ImJyYW5kaW5nL29oZjY0XzY0XzMyLmdpZiI+CisgICAgICAgIDwvcHJvcGVydHk+CisgICAgICAgIDxwcm9wZXJ0eQorICAgICAgICAgICAgICBuYW1lPSJzdGFydHVwRm9yZWdyb3VuZENvbG9yIgorICAgICAgICAgICAgICB2YWx1ZT0iRkZGRkZGIj4KKyAgICAgICAgPC9wcm9wZXJ0eT4KKyAgICAgICAgPHByb3BlcnR5CisgICAgICAgICAgICAgIG5hbWU9InN0YXJ0dXBQcm9ncmVzc1JlY3QiCisgICAgICAgICAgICAgIHZhbHVlPSIwLDQxMyw0MzEsMTUiPgorICAgICAgICA8L3Byb3BlcnR5PgorICAgICAgICA8cHJvcGVydHkKKyAgICAgICAgICAgICAgbmFtZT0ic3RhcnR1cE1lc3NhZ2VSZWN0IgorICAgICAgICAgICAgICB2YWx1ZT0iMTAsMzgwLDQzMSwyMCI+CisgICAgICAgIDwvcHJvcGVydHk+CisgICAgICAgIDxwcm9wZXJ0eQorICAgICAgICAgICAgICBuYW1lPSJwcmVmZXJlbmNlQ3VzdG9taXphdGlvbiIKKyAgICAgICAgICAgICAgdmFsdWU9InBsdWdpbl9jdXN0b21pemF0aW9uLmluaSI+CisgICAgICAgIDwvcHJvcGVydHk+CisgICAgIDwvcHJvZHVjdD4KKyAgPC9leHRlbnNpb24+CisgIDxleHRlbnNpb24KKyAgICAgICAgcG9pbnQ9Im9yZy5lY2xpcHNlLnN0ZW0udWkubGF1bmNoZXJzIj4KKyAgICAgICAgPGxhdW5jaGVyIG5hbWU9ImRlZmF1bHQiIGNsYXNzPSJvcmcuZWNsaXBzZS5zdGVtLnVpLmxhdW5jaGVyLldvcmtiZW5jaExhdW5jaGVyIj48L2xhdW5jaGVyPgorICAgICAgICAKKyAgPC9leHRlbnNpb24+ICAKKworICA8IS0tCisgIDxleHRlbnNpb24KKyAgICBwb2ludD0ib3JnLmVjbGlwc2UudWkubWVudXMiPgorICAgICAgPG1lbnVDb250cmlidXRpb24KKyAgICAgICAgICAgIGxvY2F0aW9uVVJJPSJtZW51Om9yZy5lY2xpcHNlLnVpLm1haW4ubWVudSI+CisgICAgICAgICA8bWVudQorICAgICAgICAgICAgICAgbGFiZWw9IkhlbHAyIgorICAgICAgICAgICAgICAgdG9vbHRpcD0iSGVscDIiPgorCisgICAgICAgICAgIDxjb21tYW5kCisgICAgICAgICAgICAgICAgICAgY29tbWFuZElkPSJvcmcuZWNsaXBzZS51aS5oZWxwLnF1aWNrU3RhcnRBY3Rpb24iCisgICAgICAgICAgICAgICAgICAgaWQ9InF1aWNrU3RhcnRBY3Rpb24iCisgICAgICAgICAgICAgICAgICAgc3R5bGU9InB1c2giPgorICAgICAgICAgICA8L2NvbW1hbmQ+CisgICAgICAgICA8L21lbnU+CisgICAgIDwvbWVudUNvbnRyaWJ1dGlvbj4KKyAgPC9leHRlbnNpb24+CisgIC0tPgorICAKKzwvcGx1Z2luPgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3BsdWdpbl9jdXN0b21pemF0aW9uLmluaSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9wbHVnaW5fY3VzdG9taXphdGlvbi5pbmkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWY0MTBhNwotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9wbHVnaW5fY3VzdG9taXphdGlvbi5pbmkKQEAgLTAsMCArMSw2IEBACitvcmcuZWNsaXBzZS51aS9TSE9XX1BST0dSRVNTX09OX1NUQVJUVVAgPSB0cnVlCitvcmcuZWNsaXBzZS51aS5pbnRyby51bml2ZXJzYWwvSU5UUk9fUk9PVF9QQUdFUyA9IHJvb3Qsb3ZlcnZpZXcsdHV0b3JpYWxzLHdoYXRzbmV3Cisjb3JnLmVjbGlwc2UudWkuaW50cm8udW5pdmVyc2FsL0lOVFJPX1JPT1RfUEFHRVMgPSByb290LG92ZXJ2aWV3LGZpcnN0c3RlcHMsdHV0b3JpYWxzLHNhbXBsZXMsd2hhdHNuZXcsbWlncmF0ZSx3ZWJyZXNvdXJjZXMKKyNvcmcuZWNsaXBzZS51aS5pbnRyby51bml2ZXJzYWwvSU5UUk9fREFUQSA9IHByb2R1Y3Q6JG5sJC9pbnRyb0NvbnRlbnQueG1sCitvcmcuZWNsaXBzZS51aS5pbnRyby9JTlRST19USEVNRSA9IG9yZy5lY2xpcHNlLnVpLmludHJvLnVuaXZlcnNhbC5zbGF0ZQorCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvcGx1Z2luX2RlLnByb3BlcnRpZXMgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvcGx1Z2luX2RlLnByb3BlcnRpZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzM2NjcxNAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9wbHVnaW5fZGUucHJvcGVydGllcwpAQCAtMCwwICsxLDMzNSBAQAorIworIyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIyAgKiBDb3B5cmlnaHQgKGMpIDIwMDYsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisjICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyMgICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisjICAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisjICAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisjICAqCisjICAqIENvbnRyaWJ1dG9yczoKKyMgICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorIyAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisjIFRvIGNvZGUgZGV2ZWxvcGVyOgorIyAgIERvIE5PVCBjaGFuZ2UgdGhlIHByb3BlcnRpZXMgYmV0d2VlbiB0aGlzIGxpbmUgYW5kIHRoZQorIyAgICIlJSUgRU5EIE9GIFRSQU5TTEFURUQgUFJPUEVSVElFUyAlJSUiIGxpbmUuCisjICAgTWFrZSBhIG5ldyBwcm9wZXJ0eSBuYW1lLCBhcHBlbmQgdG8gdGhlIGVuZCBvZiB0aGUgZmlsZSBhbmQgY2hhbmdlCisjICAgdGhlIGNvZGUgdG8gdXNlIHRoZSBuZXcgcHJvcGVydHkuCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisjICUlJSBFTkQgT0YgVFJBTlNMQVRFRCBQUk9QRVJUSUVTICUlJQorIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitwbHVnaW5OYW1lPVNURU0gQmVudXR6ZXJvYmVyZmxcdTAwZTRjaGUKKworcHJvdmlkZXJOYW1lPUVjbGlwc2Uub3JnCisKKyMgcHJvZHVjdCBuYW1lCitfVUlfUHJvZHVjdF9OYW1lPVNURU0KKworIyBVbml2ZXJzYWwgV2VsY29tZQoraW50cm9UaXRsZT1XaWxsa29tbWVuIGJlaSBTVEVNCitpbnRyb0Rlc2NyaXB0aW9uLW92ZXJ2aWV3PVZlcnNjaGllZGVuZSBSZXNzb3VyY2VuIGZcdTAwZmNyIFNURU0KK2ludHJvRGVzY3JpcHRpb24tZmlyc3RzdGVwcz1EaWUgQmVzY2hyZWlidW5nIGRlciBlcnN0ZW4gU2Nocml0dGUKK2ludHJvRGVzY3JpcHRpb24tdHV0b3JpYWxzPUxpbmtzIHp1IFNURU0gVHV0b3JpYWxzCitpbnRyb0Rlc2NyaXB0aW9uLXNhbXBsZXM9RGllIEJlc2NocmVpYnVuZyBkZXIgUHJvYmVuCitpbnRyb0Rlc2NyaXB0aW9uLXdoYXRzbmV3PU5ldSB1bmQgZXJ3XHUwMGU0aG5lbnN3ZXJ0IGZcdTAwZmNyIFNURU0KK2ludHJvRGVzY3JpcHRpb24tbWlncmF0ZT1EaWUgTWlncmF0aW9ucy1CZXNjaHJlaWJ1bmcKK2ludHJvRGVzY3JpcHRpb24td2VicmVzb3VyY2VzPURpZSBXZWItUmVzc291cmNlbiBCZXNjaHJlaWJ1bmcKKworIyBDb21tb24gS2V5cworX1VJX1NURU09U1RFTQorX1VJX0RlY29yYXRvcnM9RGVrb3JpZXJlcgorX1VJX0V4cGVyaW1lbnRzPUV4cGVyaW1lbnRlCitfVUlfR3JhcGhzPUdyYXBoZW4KK19VSV9JZGVudGlmaWFibGVzPUlkZW50aWZpemllcmJhcmUKK19VSV9Nb2RlbHM9TW9kZWxsZQorX1VJX01vZGlmaWVycz1Nb2RpZmlrYXRvcmVuCitfVUlfUHJlZGljYXRlcz1FaWdlbnNjaGFmdAorX1VJX1NjZW5hcmlvcz1TemVuYXJpZW4KK19VSV9TZXF1ZW5jZXJzPVNlcXVlbnplcgorX1VJX1RyaWdnZXJzPUF1c2xcdTAwZjZzZXIKKworCisKKyMgUGVyc3BlY3RpdmVzCitfVUlfRGVzaWduZXJfUGVyc3BlY3RpdmU9RGVzaWduZXIKK19VSV9TaW11bGF0aW9uX1BlcnNwZWN0aXZlPVNpbXVsYXRpb24KK19VSV9BbmFseXNpc19QZXJzcGVjdGl2ZT1BbmFseXNlCisKKyMgVmlld3MKK19VSV9BY3RpdmVfQmF0Y2hlc19WaWV3PUFrdGl2ZSBCYXRjaGVzCitfVUlfQWN0aXZlX1NpbXVsYXRpb25zX1ZpZXc9QWt0aXZlIFNpbXVsYXRpb25lbgorX1VJX0Vycm9yX0xvZ19WaWV3PUZlaGxlcnByb3Rva29sbAorX1VJX01hcF9WaWV3PUthcnRlCitfVUlfU2ltdWxhdGlvbl9Db250cm9sX1ZpZXc9U2ltdWxhdGlvbiBDb250cm9sCitfVUlfU1RFTV9Qcm9qZWN0X0V4cGxvcmVyPVNURU0gUHJvamVrdC1FeHBsb3JlcgorX1VJX1Byb2plY3RfRXhwbG9yZXI9UHJvamVrdCBFeHBsb3JlcgorCisjIFByb2plY3QgRXhwbG9yZXIgQ29udGVudAorCitfVUlfUmVjb3JkZWRfU2ltcz1BdWZnZW5vbW1lbiBTaW11bGF0aW9uZW4KKworCisjIFdvcmtiZW5jaCBNZW51CitfVUlfU1RFTV9Xb3JrQmVuY2hfTWVudT1TVEVNCitfVUlfU1RFTV9BY3Rpb25fUnVuPUF1c2ZcdTAwZmNocmVuCitfVUlfU1RFTV9BY3Rpb25fUnVuX1RUPUF1c2ZcdTAwZmNocnVuZyBkZXIgU2ltdWxhdGlvbiBzdGFydGVuCitfVUlfU1RFTV9BY3Rpb25fU3RvcD1TdG9wcAorX1VJX1NURU1fQWN0aW9uX1N0b3BfVFQ9U2ltdWxhdGlvbiBzdG9wcGVuIHVuZCBpbmFrdGl2IG1hY2hlbgorX1VJX1NURU1fQWN0aW9uX1BhdXNlPVBhdXNpZXJlbgorX1VJX1NURU1fQWN0aW9uX1BhdXNlX1RUPVNpbXVsYXRpb24gcGF1c2llcmVuCitfVUlfU1RFTV9BY3Rpb25fU3RlcD1TY2hyaXR0CitfVUlfU1RFTV9BY3Rpb25fU3RlcF9UVD1FaW5lbiBTaW11bGF0aW9uc3NjaHJpdHQgYXVzZlx1MDBmY2hyZW4KK19VSV9TVEVNX0FjdGlvbl9SZXNldD1adXJcdTAwZmNja3NldHplbgorX1VJX1NURU1fQWN0aW9uX1Jlc2V0X1RUPURpZSBTaW11bGF0aW9uIGluIGlocmVtIEF1c2dhbmdzenVzdGFuZCB3aWVkZXJoZXJzdGVsbGVuCisKKyMgV29ya2JlbmNoIE1lbnUgKENvbW1hbmRzKQorX1VJX1NURU1fV29ya0JlbmNoX01lbnVfQ29tbWFuZD1TVEVNIEJlZmVobGUKK19VSV9TVEVNX1dvcmtCZW5jaF9NZW51X0NvbW1hbmRfVFQ9U1RFTSBNb2RlbGxpZXJ1bmcgU3lzdGVtLUJlZmVobGUKK19VSV9TVEVNX0V4ZWN1dGlvbl9Db21tYW5kX0NhdD1TVEVNIEF1c2ZcdTAwZmNocnVuZ3NiZWZlaGxlCitfVUlfU1RFTV9FeGVjdXRpb25fQ29tbWFuZF9DYXRfRGVzYz1TVEVNLUJlZmVobGUsIHdlbGNoZSBkaWUgQXVzZlx1MDBmY2hydW5nIHZvbiBTaW11bGF0aW9uZW4gdW5kIEJhdGNoZXMgc3RldWVybgorX1VJX1NURU1fQ29tbWFuZF9SdW49QXVzZlx1MDBmY2hyZW4KK19VSV9TVEVNX0NvbW1hbmRfUnVuVFQ9QXVzZlx1MDBmY2hydW5nIHN0YXJ0ZW4KK19VSV9TVEVNX0NvbW1hbmRfUnVuTW5lPUF1c2ZcdTAwZmNocmVuCitfVUlfU1RFTV9Db21tYW5kX1J1bl9EZXNjPUF1c2ZcdTAwZmNocnVuZyBlaW5lciBTaW11bGF0aW9uIG9kZXIgZWluZXMgQmF0Y2ggc3RhcnRlbgorX1VJX1NURU1fQ29tbWFuZF9TdG9wPVN0b3BwCitfVUlfU1RFTV9Db21tYW5kX1N0b3BUVD1BdXNmXHUwMGZjaHJ1bmcgc3RvcHBlbgorX1VJX1NURU1fQ29tbWFuZF9TdG9wTW5lPVN0b3BwCitfVUlfU1RFTV9Db21tYW5kX1N0b3BfRGVzYz1FaW5lIFNpbXVsYXRpb24gb2RlciBlaW5lIEJhdGNoIGVudGZlcm5lbiB1bmQgZGllIHdlaXRlcmUgQXVzZlx1MDBmY2hydW5nIHZlcmhpbmRlcm4KK19VSV9TVEVNX0NvbW1hbmRfU3RlcD1TY2hyaXR0CitfVUlfU1RFTV9Db21tYW5kX1N0ZXBUVD1TY2hyaXR0LUF1c2ZcdTAwZmNocnVuZworX1VJX1NURU1fQ29tbWFuZF9TdGVwTW5lPVNjaHJpdHQKK19VSV9TVEVNX0NvbW1hbmRfU3RlcF9EZXNjPUVpbmVuIFNjaHJpdHQgZGVyIFNpbXVsYXRpb24gb2RlciBCYXRjaCBhdXNmXHUwMGZjaHJlbgorX1VJX1NURU1fQ29tbWFuZF9SZXNldD1adXJcdTAwZmNja3NldHplbgorX1VJX1NURU1fQ29tbWFuZF9SZXNldFRUPUF1c2ZcdTAwZmNocnVuZyB6dXJcdTAwZmNja3NldHplbgorX1VJX1NURU1fQ29tbWFuZF9SZXNldE1uZT1adXJcdTAwZmNja3NldHplbgorX1VJX1NURU1fQ29tbWFuZF9SZXNldF9EZXNjPURlbiBadXN0YW5kIGVpbmVyIFNpbXVsYXRpb24gb2RlciBlaW5lciBCYXRjaCBpbiBzZWluZW4gdXJzcHJcdTAwZmNuZ2xpY2hlbiBadXN0YW5kIHp1clx1MDBmY2Nrc2V0emVuLgorX1VJX1NURU1fQ29tbWFuZF9QYXVzZT1QYXVzaWVyZW4KK19VSV9TVEVNX0NvbW1hbmRfUGF1c2VUVD1BdXNmXHUwMGZjaHJ1bmcgcGF1c2llcmVuCitfVUlfU1RFTV9Db21tYW5kX1BhdXNlTW5lPVBhdXNpZXJlbgorX1VJX1NURU1fQ29tbWFuZF9QYXVzZV9EZXNjPUF1c2ZcdTAwZmNocnVuZyBlaW5lciBTaW11bGF0aW9uIG9kZXIgZWluZXIgQmF0Y2ggcGF1c2llcmVuCisKK19VSV9TVEVNX0V4cGVyaW1lbnRfQ29tbWFuZF9DYXQ9RXhwZXJpbWVudCBCZWZlaGxlCitfVUlfU1RFTV9FeHBlcmltZW50X0NvbW1hbmRfQ2F0X0Rlc2M9QmVmZWhsZSBmXHUwMGZjciBFeHBlcmltZW50ZQorX1VJX1NURU1fQ29tbWFuZF9OZXdNb2RXaXo9TW9kaWZpa2F0b3IgRXJzdGVsbGVuCitfVUlfU1RFTV9Db21tYW5kX05ld01vZFdpelRUPU5ldWVuIE1vZGlmaWthdG9yIGVyc3RlbGxlbgorX1VJX1NURU1fQ29tbWFuZF9OZXdNb2RXaXpfRGVzYz1OZXVlbiBNb2RpZmlrYXRvciBBc3Npc3RlbnRlbiBcdTAwZjZmZm5lbgorCitfVUlfU1RFTV9Db21tYW5kX0RlbGV0ZT1MXHUwMGY2c2NoZW4KK19VSV9TVEVNX0NvbW1hbmRfRGVsZXRlVFQ9SWRlbnRpZml6aWVyYmFyZXMgbFx1MDBmNnNjaGVuCisKK19VSV9TVEVNX0NvbW1hbmRfUmVmYWN0b3JfUmVuYW1lPVVtYmVuZW5uZW4KK19VSV9TVEVNX0NvbW1hbmRfUmVmYWN0b3JfUmVuYW1lVFQ9SWRlbnRpZml6aWVyYmFyZXMgdW1iZW5lbm5lbgorCitfVUlfU1RFTV9Db21tYW5kX1JlZmFjdG9yX0NvcHk9S29waWUKK19VSV9TVEVNX0NvbW1hbmRfUmVmYWN0b3JfQ29weVRUPUlkZW50aWZpemllcmJhcmVzIGtvcGllcmVuCisKKyMgTmV3IE1lbnUKK19VSV9TVEVNX1dpekNtZF9DYXRfRGVzYz1TVEVNIEJlZmVobGUgdW0gQXNzaXN0ZW50ZW4gYXVmenVydWZlbgorX1VJX1NURU1fV2l6Q21kX0NhdF9OYW1lPUFzc2lzdGVudAorX1VJX1NURU1fTmV3QWN0aW9uU2V0X01lbnU9TmV1CitfVUlfU1RFTV9DYXRlZ29yeT1TVEVNCitfVUlfTmV3X1NURU1fUHJvamVjdF9XaXphcmQ9U1RFTSBQcm9qZWt0CitfVUlfTmV3X1NURU1fUHJvamVjdF9XaXphcmRfVFQ9TmV1ZXMgU1RFTS1Qcm9qZWt0CitfVUlfR3JhcGhNb2RlbFdpemFyZF9sYWJlbD1HcmFwaAorX1VJX0dyYXBoTW9kZWxXaXphcmRfZGVzY3JpcHRpb249TmV1ZSBHcmFmaWsKK19VSV9Nb2RlbE1vZGVsV2l6YXJkX2xhYmVsPU1vZGVsbAorX1VJX01vZGVsTW9kZWxXaXphcmRfZGVzY3JpcHRpb249TmV1ZXMgTW9kZWxsCitfVUlfU2NlbmFyaW9Nb2RlbFdpemFyZF9sYWJlbD1TemVuYXJpbworX1VJX1NjZW5hcmlvTW9kZWxXaXphcmRfZGVzY3JpcHRpb249TmV1ZXMgU3plbmFyaW8KK19VSV9TZXF1ZW5jZXJNb2RlbFdpemFyZF9sYWJlbD1TZXF1ZW50aWVsbGVyIFNlcXVlbnplcgorX1VJX1NlcXVlbmNlck1vZGVsV2l6YXJkX2Rlc2NyaXB0aW9uPU5ldWVyIHNlcXVlbnRpZWxsZXIgU2VxdWVuemVyCitfVUlfUmVhbFRpbWVTZXF1ZW5jZXJNb2RlbFdpemFyZF9sYWJlbD1FY2h0emVpdC1TZXF1ZW56ZXIKK19VSV9SZWFsVGltZVNlcXVlbmNlck1vZGVsV2l6YXJkX2Rlc2NyaXB0aW9uPU5ldWVyIEVjaHR6ZWl0LVNlcXVlbnplcgorCisjIFByZWZlcmVuY2UgUGFnZXMKK19VSV9WaXpQUGFnZT1WaXN1YWxpc2llcnVuZworX1VJX0NvbG9yc1BQYWdlPUthcnRlbmZhcmJlbgorX1VJX01hcFZpZXdQUGFnZT1LYXJ0ZW5hbnNpY2h0CitfVUlfR2VvUFBhZ2U9R2VvZ3JhcGhpc2NoZSBWaXN1YWxpc2llcnVuZworX1VJX1NvbHZlclBQYWdlPUdsZWljaHVuZ3NsXHUwMGY2c2VyCisKKyMgQ29tbWFuZHMKK19VSV9EZWxldGU9TFx1MDBmNnNjaGVuCitfVUlfRGVsZXRlVFQ9SW5oYWx0IGRlcyBBcmJlaXRzYmVyZWljaHMgbFx1MDBmNnNjaGVuCitfVUlfUmVmcmVzaD1Ba3R1YWxpc2llcmVuCitfVUlfUmVmcmVzaFRUPUFuc2ljaHQgdm9uIGRlbiBJbmhhbHRlbiBkZXMgQXJiZWl0c2JlcmVpY2hzIGFrdHVhbGlzaWVyZW4KKworI090aGVyCitfVUlfQ29tbW9uRWRpdG9yX21lbnU9JkNvbW1vbiBFZGl0b3IKK19VSV9HcmFwaEVkaXRvcl9tZW51PSZHcmFwaCBFZGl0b3IKK19VSV9Nb2RlbEVkaXRvcl9tZW51PSZNb2RlbCBFZGl0b3IKK19VSV9TY2VuYXJpb0VkaXRvcl9tZW51PSZTY2VuYXJpbyBFZGl0b3IKKworX1VJX0NyZWF0ZUNoaWxkX21lbnVfaXRlbT0mTmV3IENoaWxkCitfVUlfQ3JlYXRlU2libGluZ19tZW51X2l0ZW09TiZldWVzIEdlc2Nod2lzdGVydGVpbAorCitfVUlfU2hvd1Byb3BlcnRpZXNWaWV3X21lbnVfaXRlbT1TaG93ICYgUHJvcGVydGllcyBWaWV3CitfVUlfUmVmcmVzaFZpZXdlcl9tZW51X2l0ZW09JlJlZnJlc2gKKworX1VJX1NlbGVjdGlvblBhZ2VfbGFiZWw9QXVzd2FobAorX1VJX1BhcmVudFBhZ2VfbGFiZWw9RWx0ZXJudGVpbAorX1VJX0xpc3RQYWdlX2xhYmVsPUxpc3RlCitfVUlfVHJlZVBhZ2VfbGFiZWw9QmF1bQorX1VJX1RhYmxlUGFnZV9sYWJlbD1UYWJlbGxlCitfVUlfVHJlZVdpdGhDb2x1bW5zUGFnZV9sYWJlbD1CYXVtIG1pdCBTcGFsdGVuCitfVUlfT2JqZWN0Q29sdW1uX2xhYmVsPU9iamVrdAorX1VJX1NlbGZDb2x1bW5fbGFiZWw9U2VsYnN0CisKK19VSV9Ob09iamVjdFNlbGVjdGVkPU5pY2h0cyBhdXNnZXdcdTAwZTRobHQKK19VSV9TaW5nbGVPYmplY3RTZWxlY3RlZD1BdXNnZXdcdTAwZTRobHRlcyBPYmpla3Q6IHswfQorX1VJX011bHRpT2JqZWN0U2VsZWN0ZWQ9QXVzZ2V3XHUwMGU0aGx0ZSB7MH0gT2JqZWt0ZQorCitfVUlfT3BlbkVkaXRvckVycm9yX2xhYmVsPUVkaXRvciBcdTAwZjZmZm5lbgorCitfVUlfV2l6YXJkX2NhdGVnb3J5PUJlaXNwaWVsIEVNRiBNb2RlbGwgRXJzdGVsbHVuZ3Nhc3Npc3RlbnQKKworX1VJX0NyZWF0ZU1vZGVsRXJyb3JfbWVzc2FnZT1BdWZnZXRyZXRlbmUgUHJvYmxlbWUgaW4gZGVyIERhdGVpICJ7MH0iCisKK19VSV9Db21tb25Nb2RlbFdpemFyZF9sYWJlbD1HZW1laW5zYW1lcyBNb2RlbGwKK19VSV9Db21tb25Nb2RlbFdpemFyZF9kZXNjcmlwdGlvbj1OZXVlcyBDb21tb24tTW9kZWxsIGVyc3RlbGxlbgorCitfVUlfQ29tbW9uRWRpdG9yX2xhYmVsPUNvbW1vbiBNb2RlbCBFZGl0b3IKKworX1VJX0NvbW1vbkVkaXRvckZpbGVuYW1lRGVmYXVsdEJhc2U9TWVpbgorX1VJX0NvbW1vbkVkaXRvckZpbGVuYW1lRXh0ZW5zaW9uPWdlbWVpbnNhbQorCisKK19VSV9HcmFwaEVkaXRvcl9sYWJlbD1HcmFwaCBNb2RlbGwgRWRpdG9yCisKK19VSV9HcmFwaEVkaXRvckZpbGVuYW1lRGVmYXVsdEJhc2U9TWVpbgorX1VJX0dyYXBoRWRpdG9yRmlsZW5hbWVFeHRlbnNpb249R3JhcGgKKworCitfVUlfTW9kZWxFZGl0b3JfbGFiZWw9TW9kZWxsIE1vZGVsbCBFZGl0b3IKKworX1VJX01vZGVsRWRpdG9yRmlsZW5hbWVEZWZhdWx0QmFzZT1NZWluCitfVUlfTW9kZWxFZGl0b3JGaWxlbmFtZUV4dGVuc2lvbj1Nb2RlbGwKKworCitfVUlfU2NlbmFyaW9FZGl0b3JfbGFiZWw9U2NlbmFyaW9tb2RlbGwtRWRpdG9yCisKK19VSV9TY2VuYXJpb0VkaXRvckZpbGVuYW1lRGVmYXVsdEJhc2U9TWVpbgorX1VJX1NjZW5hcmlvRWRpdG9yRmlsZW5hbWVFeHRlbnNpb249U3plbmFyaW8KKworX1VJX1dpemFyZF9sYWJlbD1OZXUKKworX1dBUk5fRmlsZW5hbWVFeHRlbnNpb249RGVyIERhdGVpbmFtZSBtdXNzIGF1ZiAiLnswfSIgZW5kZW4KKworX1VJX01vZGVsT2JqZWN0PU1vZGVsbCBPYmpla3QKK19VSV9YTUxFbmNvZGluZz1YTUwgS29kaWVydW5nCitfVUlfWE1MRW5jb2RpbmdDaG9pY2VzPVVURi04IEFTQ0lJIFVURi0xNiBVVEYtMTZCRSBVVEYtMTZMRSBJU08tODg1OS0xCitfVUlfV2l6YXJkX2luaXRpYWxfb2JqZWN0X2Rlc2NyaXB0aW9uPURhdGVpbmFobWVuIGFuZ2ViZW4gdW5kIHp1IGVyc3RlbGxlbmRlcyBNb2RlbGwtT2JqZWt0IGF1c3dcdTAwZTRobGVuCisKK19VSV9GaWxlQ29uZmxpY3RfbGFiZWw9RGF0ZWlrb25mbGlrdAorX1dBUk5fRmlsZUNvbmZsaWN0PURpZSBEYXRlaSAiezB9IiBleGlzdGllcnQgYmVyZWl0cy4gV29sbGVuIFNpZSBkaWUgdm9yaGFuZGVuZSBEYXRlaSBlcnNldHplbj8KK19VSV9Db3JlRWRpdG9yQWR2aXNvcl9BY3Rpb25TZXRfbGFiZWw9S2VybiBBa3Rpb25zbWVuZ2UKK19VSV9QZXJzcGVjdGl2ZV9sYWJlbD1LZXJuCisKK19VSV9Ccm93c2VfbGFiZWw9JkJyb3dzZS4uLgorX1VJX0ZpbGVfbGFiZWw9JkZpbGUKK19VSV9RdWVzdGlvbl90aXRsZT1GcmFnZQorX1VJX0Vycm9yX3RpdGxlPUZlaGxlcgorX1dBUk5fTm9fRWRpdG9yPUVzIGdpYnQga2VpbmVuIEVkaXRvciwgZGVyIGZcdTAwZmNyIGRpZSBEYXRlaSAiezB9IiByZWdpc3RyaWVydCBpc3QuCisKK19VSV9BcHBsaWNhdGlvbl90aXRsZT1LZXJuYW53ZW5kdW5nCitfVUlfTWVudV9GaWxlX2xhYmVsPSZGaWxlCitfVUlfTWVudV9OZXdfbGFiZWw9Jk5ldworX1VJX01lbnVfT3Blbl9sYWJlbD0mT3Blbi4uLgorX1VJX01lbnVfT3Blbl9kZXNjcmlwdGlvbj1Nb2RlbC1PYmpla3QtRGF0ZWkgXHUwMGY2ZmZuZW4KK19VSV9NZW51X09wZW5VUklfbGFiZWw9Jk9wZW4gVVJJLi4uCitfVUlfTWVudV9PcGVuVVJJX2Rlc2NyaXB0aW9uPU1vZGVsLU9iamVrdCBhdXMgZWluZXIgVVJJIGxhZGVuIHVuZCBcdTAwZjZmZm5lbgorX1VJX01lbnVfRWRpdF9sYWJlbD0mRWRpdAorX1VJX01lbnVfV2luZG93X2xhYmVsPSZXaW5kb3cKK19VSV9NZW51X0hlbHBfbGFiZWw9JkhlbHAKK19VSV9NZW51X0Fib3V0X2xhYmVsPUtlcm4gJlx1MDBkY2JlciAuLi4KK19VSV9BYm91dF90aXRsZT1LZXJuYW53ZW5kdW5nCitfVUlfQWJvdXRfdGV4dD1BYm91dCBCb3ggZlx1MDBmY3IgS2VybmFud2VuZHVuZyBrb21tdCBoaWVyIGhpbi4KKworX1VJX0NvbW1vbk1vZGVsV2l6YXJkX0FjdGlvblNldF9sYWJlbD1Db21tb24gTW9kZWwgQWN0aW9uIFNldAorX1VJX0dyYXBoTW9kZWxXaXphcmRfQWN0aW9uU2V0X2xhYmVsPUdyYXBoIE1vZGVsbCBBa3Rpb25zbWVuZ2UKK19VSV9Nb2RlbE1vZGVsV2l6YXJkX0FjdGlvblNldF9sYWJlbD1Nb2RlbGwgTW9kZWxsIEFrdGlvbnNtZW5nZQorX1VJX1NjZW5hcmlvTW9kZWxXaXphcmRfQWN0aW9uU2V0X2xhYmVsPVNjZW5hcmlvbW9kZWxsLUFrdGlvbnNtZW5nZQorCitfVUlfU2VxdWVuY2VyRWRpdG9yX21lbnU9JlNlcXVlbmNlciBFZGl0b3IKKworX1VJX1NlcXVlbmNlckVkaXRvcl9sYWJlbD1TZXF1ZW56ZXItTW9kZWxsLUVkaXRvcgorCitfVUlfU2VxdWVuY2VyRWRpdG9yRmlsZW5hbWVEZWZhdWx0QmFzZT1NZWluCitfVUlfU2VxdWVuY2VyRWRpdG9yRmlsZW5hbWVFeHRlbnNpb249U2VxdWVuemVyCisKK19VSV9TZXF1ZW5jZXJNb2RlbFdpemFyZF9BY3Rpb25TZXRfbGFiZWw9U2VxdWVuemVyLU1vZGVsbC1Ba3Rpb25zbWVuZ2UKKworX1VJX0V4cGVyaW1lbnRFZGl0b3JfbWVudT0mRXhwZXJpbWVudCBFZGl0b3IKK19VSV9FeHBlcmltZW50TW9kZWxXaXphcmRfbGFiZWw9RXhwZXJpbWVudAorX1VJX0V4cGVyaW1lbnRNb2RlbFdpemFyZF9kZXNjcmlwdGlvbj1OZXVlcyBFeHBlcmltZW50CisKK19VSV9FeHBlcmltZW50RWRpdG9yX2xhYmVsPUV4cGVyaW1lbnQgRWRpdG9yCisKK19VSV9FeHBlcmltZW50RWRpdG9yRmlsZW5hbWVEZWZhdWx0QmFzZT1NZWluCitfVUlfRXhwZXJpbWVudEVkaXRvckZpbGVuYW1lRXh0ZW5zaW9uPUV4cGVyaW1lbnQKKworX1VJX0NvbW1vbkVkaXRvckZpbGVuYW1lRXh0ZW5zaW9ucz1nZW1laW5zYW0KKworX1VJX0V4cGVyaW1lbnRFZGl0b3JGaWxlbmFtZUV4dGVuc2lvbnM9RXhwZXJpbWVudAorCitfVUlfR3JhcGhFZGl0b3JGaWxlbmFtZUV4dGVuc2lvbnM9R3JhcGgKKworX1VJX01vZGVsRWRpdG9yRmlsZW5hbWVFeHRlbnNpb25zPU1vZGVsbAorCitfVUlfU2NlbmFyaW9FZGl0b3JGaWxlbmFtZUV4dGVuc2lvbnM9U3plbmFyaW8KKworX1VJX1NlcXVlbmNlckVkaXRvckZpbGVuYW1lRXh0ZW5zaW9ucz1TZXF1ZW56ZXIKKworX1dBUk5fRmlsZW5hbWVFeHRlbnNpb25zPURlciBEYXRlaW5hbWUgbXVzcyBlaW5lIGRlciBmb2xnZW5kZW4gRW5kdW5nZW4gaGFiZW46IHswfQorCisjIFByZWRpY2F0ZQorX1VJX1ByZWRpY2F0ZUVkaXRvcl9tZW51PSZQcmVkaWNhdGUgRWRpdG9yCisKK19VSV9QcmVkaWNhdGVFZGl0b3JfbGFiZWw9RWlnZW5zY2hhZnQtTW9kZWxsLUVkaXRvcgorCitfVUlfUHJlZGljYXRlTW9kZWxXaXphcmRfbGFiZWw9RWlnZW5zY2hhZnQKK19VSV9QcmVkaWNhdGVNb2RlbFdpemFyZF9kZXNjcmlwdGlvbj1OZXVlIEVpZ2Vuc2NoYWZ0CisKK19VSV9QcmVkaWNhdGVFZGl0b3JGaWxlbmFtZURlZmF1bHRCYXNlPU1laW4KK19VSV9QcmVkaWNhdGVFZGl0b3JGaWxlbmFtZUV4dGVuc2lvbnM9RWlnZW5zY2hhZnQKKworIyBUcmlnZ2VyCitfVUlfVHJpZ2dlckVkaXRvcl9tZW51PSZUcmlnZ2VyIEVkaXRvcgorX1VJX1RyaWdnZXJFZGl0b3JfbGFiZWw9QXVzbFx1MDBmNnNlci1Nb2RlbGwtRWRpdG9yCisKK19VSV9UcmlnZ2VyTW9kZWxXaXphcmRfbGFiZWw9QXVzbFx1MDBmNnNlcgorX1VJX1RyaWdnZXJNb2RlbFdpemFyZF9kZXNjcmlwdGlvbj1OZXVlciBBdXNsXHUwMGY2c2VyCisKK19VSV9UcmlnZ2VyRWRpdG9yRmlsZW5hbWVEZWZhdWx0QmFzZT1NZWluCitfVUlfVHJpZ2dlckVkaXRvckZpbGVuYW1lRXh0ZW5zaW9ucz1BdXNsXHUwMGY2c2VyCisKK19VSV9Nb2RpZmllckVkaXRvcl9tZW51PSZNb2RpZmllciBFZGl0b3IKK19VSV9Nb2RpZmllck1vZGVsV2l6YXJkX2xhYmVsPU1vZGlmaWthdG9ybW9kZWxsCitfVUlfTW9kaWZpZXJNb2RlbFdpemFyZF9kZXNjcmlwdGlvbj1OZXVlcyBNb2RpZmlrYXRvci1Nb2RlbGwgZXJzdGVsbGVuCisKK19VSV9Nb2RpZmllckVkaXRvcl9sYWJlbD1Nb2RpZmlrYXRvcm1vZGVsbC1FZGl0b3IKKworX1VJX01vZGlmaWVyRWRpdG9yRmlsZW5hbWVEZWZhdWx0QmFzZT1NZWluCitfVUlfTW9kaWZpZXJFZGl0b3JGaWxlbmFtZUV4dGVuc2lvbnM9TW9kaWZpa2F0b3IKKworX1VJX1NvbHZlckVkaXRvcl9tZW51PSZTb2x2ZXIgRWRpdG9yCitfVUlfU29sdmVyTW9kZWxXaXphcmRfbGFiZWw9R2xlaWNodW5nc2xcdTAwZjZzZXItTW9kZWxsCitfVUlfU29sdmVyTW9kZWxXaXphcmRfZGVzY3JpcHRpb249TmV1ZXMgR2xlaWNodW5nc2xcdTAwZjZzZXItTW9kZWxsIGVyc3RlbGxlbgorX1VJX1NvbHZlckVkaXRvcl9sYWJlbD1HbGVpY2h1bmdzbFx1MDBmNnNlci1Nb2RlbGwtRWRpdG9yCitfVUlfU29sdmVyRWRpdG9yRmlsZW5hbWVEZWZhdWx0QmFzZT1NZWluCitfVUlfU29sdmVyRWRpdG9yRmlsZW5hbWVFeHRlbnNpb25zPUdsZWljaHVuZ3NsXHUwMGY2c2VyCitfVUlfR3JhcGhnZW5lcmF0b3JFZGl0b3JfbWVudT0mR3JhcGhnZW5lcmF0b3IgRWRpdG9yCitfVUlfR3JhcGhnZW5lcmF0b3JNb2RlbFdpemFyZF9sYWJlbD1HcmFwaGdlbmVyYXRvciBNb2RlbGwKK19VSV9HcmFwaGdlbmVyYXRvck1vZGVsV2l6YXJkX2Rlc2NyaXB0aW9uPU5ldWVzIEdyYXBoZ2VuZXJhdG9yLU1vZGVsbCBlcnN0ZWxsZW4KK19VSV9HcmFwaGdlbmVyYXRvckVkaXRvcl9sYWJlbD1HcmFwaGdlbmVyYXRvciBNb2RlbGwgRWRpdG9yCitfVUlfR3JhcGhnZW5lcmF0b3JFZGl0b3JGaWxlbmFtZURlZmF1bHRCYXNlPU1laW4KK19VSV9HcmFwaGdlbmVyYXRvckVkaXRvckZpbGVuYW1lRXh0ZW5zaW9ucz1HcmFwaGdlbmVyYXRvcgorX1VJX0xvZ2dlckVkaXRvcl9tZW51PSZMb2dnZXIgRWRpdG9yCitfVUlfTG9nZ2VyTW9kZWxXaXphcmRfbGFiZWw9TG9nZ2VyIE1vZGVsCitfVUlfTG9nZ2VyTW9kZWxXaXphcmRfZGVzY3JpcHRpb249Q3JlYXRlIGEgbmV3IExvZ2dlciBtb2RlbAorX1VJX0xvZ2dlckVkaXRvcl9sYWJlbD1Mb2dnZXIgTW9kZWwgRWRpdG9yCitfVUlfTG9nZ2VyRWRpdG9yRmlsZW5hbWVEZWZhdWx0QmFzZT1NZWluCitfVUlfTG9nZ2VyRWRpdG9yRmlsZW5hbWVFeHRlbnNpb25zPWxvZ2dlcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3BsdWdpbl9lbi5wcm9wZXJ0aWVzIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3BsdWdpbl9lbi5wcm9wZXJ0aWVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFiMGYxZDUKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvcGx1Z2luX2VuLnByb3BlcnRpZXMKQEAgLTAsMCArMSwyIEBACisjIFNob3VsZCBiZSBlbXB0eQorIyBTZWUgcGx1Z2luLnByb3BlcnRpZXMgZm9yIEVuZ2xpc2ggc3RyaW5ncwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9wbHVnaW5fa3IucHJvcGVydGllcyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9wbHVnaW5fa3IucHJvcGVydGllcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNjVlYzkyCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3BsdWdpbl9rci5wcm9wZXJ0aWVzCkBAIC0wLDAgKzEsMzM1IEBACisjCisjIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjICAqIENvcHlyaWdodCAoYykgMjAwNiwgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyMgICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworIyAgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyMgICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyMgICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyMgICoKKyMgICogQ29udHJpYnV0b3JzOgorIyAgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisjICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyMgVG8gY29kZSBkZXZlbG9wZXI6CisjICAgRG8gTk9UIGNoYW5nZSB0aGUgcHJvcGVydGllcyBiZXR3ZWVuIHRoaXMgbGluZSBhbmQgdGhlCisjICAgIiUlJSBFTkQgT0YgVFJBTlNMQVRFRCBQUk9QRVJUSUVTICUlJSIgbGluZS4KKyMgICBNYWtlIGEgbmV3IHByb3BlcnR5IG5hbWUsIGFwcGVuZCB0byB0aGUgZW5kIG9mIHRoZSBmaWxlIGFuZCBjaGFuZ2UKKyMgICB0aGUgY29kZSB0byB1c2UgdGhlIG5ldyBwcm9wZXJ0eS4KKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyMgJSUlIEVORCBPRiBUUkFOU0xBVEVEIFBST1BFUlRJRVMgJSUlCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK3BsdWdpbk5hbWU9U1RFTSBVSQorCitwcm92aWRlck5hbWU9RWNsaXBzZS5vcmcKKworIyBwcm9kdWN0IG5hbWUKK19VSV9Qcm9kdWN0X05hbWU9U1RFTQorCisjIFVuaXZlcnNhbCBXZWxjb21lCitpbnRyb1RpdGxlPVNURU1cdWM1ZDAgXHVjNjI0XHVjMmUwIFx1YWM4M1x1Yzc0NCBcdWQ2NThcdWM2MDFcdWQ1NjlcdWIyYzhcdWIyZTQKK2ludHJvRGVzY3JpcHRpb24tb3ZlcnZpZXc9U1RFTVx1Yzc0NCBcdWM3MDRcdWQ1NWMgXHViMmU0XHVjNTkxXHVkNTVjIFx1Yzc5MFx1YjhjY1x1YjRlNAoraW50cm9EZXNjcmlwdGlvbi1maXJzdHN0ZXBzPVx1Y2NhYiBcdWJjODhcdWM5ZjggXHViMmU4XHVhY2M0IFx1YzEyNFx1YmE4NQoraW50cm9EZXNjcmlwdGlvbi10dXRvcmlhbHM9U1RFTSBcdWMwYWNcdWM2YTlcdWJjOTUgXHViOWMxXHVkMDZjCitpbnRyb0Rlc2NyaXB0aW9uLXNhbXBsZXM9XHVjNjA4XHVjODFjIFx1YzEyNFx1YmE4NQoraW50cm9EZXNjcmlwdGlvbi13aGF0c25ldz1TVEVNIFx1YWQwMFx1YzgxMFx1YzVkMFx1YzExYyBcdWMwYzhcdWI4NmRcdWFjZTAgXHVjOGZjXHViYWE5XHVkNTYwIFx1YjljY1x1ZDU1YworaW50cm9EZXNjcmlwdGlvbi1taWdyYXRlPVx1Yzc3NFx1YjNkOSBcdWMxMjRcdWJhODUKK2ludHJvRGVzY3JpcHRpb24td2VicmVzb3VyY2VzPVx1YzZmOSBcdWI5YWNcdWMxOGNcdWMyYTQgXHVjMTI0XHViYTg1CisKKyMgQ29tbW9uIEtleXMKK19VSV9TVEVNPVNURU0KK19VSV9EZWNvcmF0b3JzPVx1YzdhNVx1YzJkZFx1Yzc5MFx1YjRlNAorX1VJX0V4cGVyaW1lbnRzPVx1YzJlNFx1ZDVkOAorX1VJX0dyYXBocz1cdWFkZjhcdWI3OThcdWQ1MDQKK19VSV9JZGVudGlmaWFibGVzPVx1YzJkZFx1YmNjNFx1YWMwMFx1YjJhNVx1ZDU2OAorX1VJX01vZGVscz1cdWJhYThcdWIzNzgKK19VSV9Nb2RpZmllcnM9XHVjMjE4XHVjODE1XHVjNzkwCitfVUlfUHJlZGljYXRlcz1cdWMyMjBcdWM1YjQKK19VSV9TY2VuYXJpb3M9XHVjMmRjXHViMDk4XHViOWFjXHVjNjI0CitfVUlfU2VxdWVuY2Vycz1cdWMyZGNcdWQwMDBcdWMxMWMKK19VSV9UcmlnZ2Vycz1cdWQyYjhcdWI5YWNcdWFjNzAKKworCisKKyMgUGVyc3BlY3RpdmVzCitfVUlfRGVzaWduZXJfUGVyc3BlY3RpdmU9XHViNTE0XHVjNzkwXHVjNzc0XHViMTA4CitfVUlfU2ltdWxhdGlvbl9QZXJzcGVjdGl2ZT1cdWMyZGNcdWJiYWNcdWI4MDhcdWM3NzRcdWMxNTgKK19VSV9BbmFseXNpc19QZXJzcGVjdGl2ZT1cdWJkODRcdWMxMWQKKworIyBWaWV3cworX1VJX0FjdGl2ZV9CYXRjaGVzX1ZpZXc9XHVkNjVjXHVjMTMxIFx1YmMzMFx1Y2U1OAorX1VJX0FjdGl2ZV9TaW11bGF0aW9uc19WaWV3PVx1ZDY1Y1x1YzEzMSBcdWMyZGNcdWJiYWNcdWI4MDhcdWM3NzRcdWMxNTgKK19VSV9FcnJvcl9Mb2dfVmlldz1cdWM2MjRcdWI5NTggXHViODVjXHVhZGY4CitfVUlfTWFwX1ZpZXc9XHVjOWMwXHViM2M0CitfVUlfU2ltdWxhdGlvbl9Db250cm9sX1ZpZXc9XHVjMmRjXHViYmFjXHViODA4XHVjNzc0XHVjMTU4IFx1YzgxY1x1YzViNAorX1VJX1NURU1fUHJvamVjdF9FeHBsb3Jlcj1TVEVNIFx1ZDUwNFx1Yjg1Y1x1YzgxZFx1ZDJiOCBcdWQwZDBcdWMwYzlcdWFlMzAKK19VSV9Qcm9qZWN0X0V4cGxvcmVyPVx1ZDUwNFx1Yjg1Y1x1YzgxZFx1ZDJiOCBcdWQwZDBcdWMwYzlcdWFlMzAKKworIyBQcm9qZWN0IEV4cGxvcmVyIENvbnRlbnQKKworX1VJX1JlY29yZGVkX1NpbXM9XHVhZTMwXHViODVkXHViNDFjIFx1YzJkY1x1YmJhY1x1YjgwOFx1Yzc3NFx1YzE1OAorCisKKyMgV29ya2JlbmNoIE1lbnUKK19VSV9TVEVNX1dvcmtCZW5jaF9NZW51PVNURU0KK19VSV9TVEVNX0FjdGlvbl9SdW49XHVjMmU0XHVkNTg5CitfVUlfU1RFTV9BY3Rpb25fUnVuX1RUPVx1YzJkY1x1YmJhY1x1YjgwOFx1Yzc3NFx1YzE1OFx1Yzc1OCBcdWMyZTRcdWQ1ODkgXHVjMmRjXHVjNzkxCitfVUlfU1RFTV9BY3Rpb25fU3RvcD1cdWM5MTFcdWM5YzAKK19VSV9TVEVNX0FjdGlvbl9TdG9wX1RUPVx1YzJkY1x1YmJhY1x1YjgwOFx1Yzc3NFx1YzE1OFx1Yzc0NCBcdWM5MTFcdWM5YzBcdWQ1NThcdWFjZTAgXHViZTQ0XHVkNjVjXHVjMTMxXHVkNjU0CitfVUlfU1RFTV9BY3Rpb25fUGF1c2U9XHVjOTExXHVjOWMwCitfVUlfU1RFTV9BY3Rpb25fUGF1c2VfVFQ9XHVjMmRjXHViYmFjXHViODA4XHVjNzc0XHVjMTU4IFx1Yzc4NFx1YzJkYyBcdWM5MTFcdWM5YzAKK19VSV9TVEVNX0FjdGlvbl9TdGVwPVx1YjJlOFx1YWNjNAorX1VJX1NURU1fQWN0aW9uX1N0ZXBfVFQ9XHVjMmRjXHViYmFjXHViODA4XHVjNzc0XHVjMTU4XHVjNzQ0IFx1ZDU1OFx1YjA5OFx1Yzc1OCBcdWMyZGNcdWFjMDQgXHViMmU4XHVjNzA0IFx1YjljY1x1ZDA3YyAgXHVjOWM0XHVkNTg5CitfVUlfU1RFTV9BY3Rpb25fUmVzZXQ9XHVjN2FjXHVjMTI0XHVjODE1CitfVUlfU1RFTV9BY3Rpb25fUmVzZXRfVFQ9XHVjMmRjXHVjNzkxIFx1YzBjMVx1ZDBkY1x1Yjg1YyBcdWMyZGNcdWJiYWNcdWI4MDhcdWM3NzRcdWMxNThcdWM3NDQgXHViY2Y1XHVjNmQwCisKKyMgV29ya2JlbmNoIE1lbnUgKENvbW1hbmRzKQorX1VJX1NURU1fV29ya0JlbmNoX01lbnVfQ29tbWFuZD1TVEVNIFx1YmE4NVx1YjgzOQorX1VJX1NURU1fV29ya0JlbmNoX01lbnVfQ29tbWFuZF9UVD1TVEVNIFx1YmFhOFx1YjM3OFx1YjljMSBcdWMyZGNTVEVNIFx1YmE4NVx1YjgzOQorX1VJX1NURU1fRXhlY3V0aW9uX0NvbW1hbmRfQ2F0PVNURU0gXHVjMmU0XHVkNTg5IFx1YmE4NVx1YjgzOQorX1VJX1NURU1fRXhlY3V0aW9uX0NvbW1hbmRfQ2F0X0Rlc2M9XHVjMmRjXHViYmFjXHViODA4XHVjNzc0XHVjMTU4IFx1YzJlNFx1ZDU4OVx1YWNmYyBcdWJjMzBcdWNlNThcdWM3NTggXHVjMmU0XHVkNTg5XHVjNzQ0IFx1YzgxY1x1YzViNFx1ZDU1OFx1YjI5NCBTVEVNIFx1YmE4NVx1YjgzOQorX1VJX1NURU1fQ29tbWFuZF9SdW49XHVjMmU0XHVkNTg5CitfVUlfU1RFTV9Db21tYW5kX1J1blRUPVx1YzJkY1x1Yzc5MSBcdWMyZTRcdWQ1ODkKK19VSV9TVEVNX0NvbW1hbmRfUnVuTW5lPVx1YzJlNFx1ZDU4OQorX1VJX1NURU1fQ29tbWFuZF9SdW5fRGVzYz1cdWMyZGNcdWJiYWNcdWI4MDhcdWM3NzRcdWMxNTggXHViNjEwXHViMjk0IFx1YmMzMFx1Y2U1OCBcdWM3OTFcdWM1YzVcdWM3NTggXHVjMmRjXHVjNzkxCitfVUlfU1RFTV9Db21tYW5kX1N0b3A9XHVjOTExXHVjOWMwCitfVUlfU1RFTV9Db21tYW5kX1N0b3BUVD1cdWMyZTRcdWQ1ODkgXHVjOTExXHVjOWMwCitfVUlfU1RFTV9Db21tYW5kX1N0b3BNbmU9XHVjOTExXHVjOWMwCitfVUlfU1RFTV9Db21tYW5kX1N0b3BfRGVzYz1cdWMyZGNcdWJiYWNcdWI4MDhcdWM3NzRcdWMxNTggXHViNjEwXHViMjk0IFx1Yzc3Y1x1YWQwNCBcdWNjOThcdWI5YWNcdWI5N2MgXHVjODFjXHVhYzcwXHVkNTc0XHVjMTFjIFx1Y2Q5NFx1YWMwMCBcdWM3OTFcdWM1YzUgXHVjODFjXHVhYzcwCitfVUlfU1RFTV9Db21tYW5kX1N0ZXA9XHViMmU4XHVhY2M0CitfVUlfU1RFTV9Db21tYW5kX1N0ZXBUVD1cdWIyZThcdWFjYzQgXHVjMmU0XHVkNTg5CitfVUlfU1RFTV9Db21tYW5kX1N0ZXBNbmU9XHViMmU4XHVhY2M0CitfVUlfU1RFTV9Db21tYW5kX1N0ZXBfRGVzYz1cdWMyZGNcdWJiYWNcdWI4MDhcdWM3NzRcdWMxNThcdWM3NTggXHVjMmU0XHVkNTg5IFx1YjYxMFx1YjI5NCBcdWJjMzBcdWNlNThcdWM3NTggXHVkNTVjIFx1YzBhY1x1Yzc3NFx1ZDA3NCBcdWIyZThcdWFjYzQKK19VSV9TVEVNX0NvbW1hbmRfUmVzZXQ9XHVjN2FjXHVjMTI0XHVjODE1CitfVUlfU1RFTV9Db21tYW5kX1Jlc2V0VFQ9XHVjMmU0XHVkNTg5IFx1YzdhY1x1YzEyNFx1YzgxNQorX1VJX1NURU1fQ29tbWFuZF9SZXNldE1uZT1cdWM3YWNcdWMxMjRcdWM4MTUKK19VSV9TVEVNX0NvbW1hbmRfUmVzZXRfRGVzYz1cdWNkMDhcdWFlMzAgXHVjMGMxXHVkMGRjXHViODVjIFx1YzJkY1x1YmJhY1x1YjgwOFx1Yzc3NFx1YzE1OFx1Yzc3NFx1YjA5OCBcdWJjMzBcdWNlNThcdWM3NTggXHVjMGMxXHVkMGRjXHViOTdjIFx1YzdhY1x1YzEyNFx1YzgxNQorX1VJX1NURU1fQ29tbWFuZF9QYXVzZT1cdWM5MTFcdWM5YzAKK19VSV9TVEVNX0NvbW1hbmRfUGF1c2VUVD1cdWM3ODRcdWMyZGMgXHVjOTExXHVjOWMwCitfVUlfU1RFTV9Db21tYW5kX1BhdXNlTW5lPVx1YzkxMVx1YzljMAorX1VJX1NURU1fQ29tbWFuZF9QYXVzZV9EZXNjPVx1YzJkY1x1YmJhY1x1YjgwOFx1Yzc3NFx1YzE1OCBcdWI2MTBcdWIyOTQgXHViYzMwXHVjZTU4IFx1Yzc5MVx1YzVjNVx1Yzc1OCBcdWMyZTRcdWQ1ODkgXHVjNzg0XHVjMmRjIFx1YzkxMVx1YzljMAorCitfVUlfU1RFTV9FeHBlcmltZW50X0NvbW1hbmRfQ2F0PVx1YzJlNFx1ZDVkOCBcdWJhODVcdWI4MzkKK19VSV9TVEVNX0V4cGVyaW1lbnRfQ29tbWFuZF9DYXRfRGVzYz1cdWMyZTRcdWQ1ZDhcdWM1ZDAgXHVhZDAwXHVkNTVjIFx1YmE4NVx1YjgzOQorX1VJX1NURU1fQ29tbWFuZF9OZXdNb2RXaXo9XHVjMjE4XHVjODE1XHVjNzkwIFx1YjljY1x1YjRlNFx1YWUzMAorX1VJX1NURU1fQ29tbWFuZF9OZXdNb2RXaXpUVD1cdWMwYzhcdWI4NWNcdWM2YjQgXHVjMjE4XHVjODE1XHVjNzkwIFx1YjljY1x1YjRlNFx1YWUzMAorX1VJX1NURU1fQ29tbWFuZF9OZXdNb2RXaXpfRGVzYz1cdWMwYzggXHVjMjE4XHVjODE1XHVjNzkwIFx1YjljOFx1YmM5NVx1YzBhYyBcdWM1ZjRcdWFlMzAKKworX1VJX1NURU1fQ29tbWFuZF9EZWxldGU9XHVjMGFkXHVjODFjCitfVUlfU1RFTV9Db21tYW5kX0RlbGV0ZVRUPVx1YzBhZFx1YzgxYyBcdWQ2NTVcdWM3NzggXHVhYzAwXHViMmE1CisKK19VSV9TVEVNX0NvbW1hbmRfUmVmYWN0b3JfUmVuYW1lPVx1Yzc3NFx1Yjk4NCBcdWJjMTRcdWFmYjhcdWFlMzAKK19VSV9TVEVNX0NvbW1hbmRfUmVmYWN0b3JfUmVuYW1lVFQ9XHVjMmRkXHViY2M0XHVjNzkwIFx1Yzc3NFx1Yjk4NCBcdWJjMTRcdWFmYjhcdWFlMzAKKworX1VJX1NURU1fQ29tbWFuZF9SZWZhY3Rvcl9Db3B5PVx1YmNmNVx1YzBhYworX1VJX1NURU1fQ29tbWFuZF9SZWZhY3Rvcl9Db3B5VFQ9XHViY2Y1XHVjMGFjIFx1YzJkZFx1YmNjNCBcdWFjMDBcdWIyYTUKKworIyBOZXcgTWVudQorX1VJX1NURU1fV2l6Q21kX0NhdF9EZXNjPVx1YjljOFx1YmM5NVx1YzBhY1x1Yjk3YyBcdWQ2MzhcdWNkOWNcdWQ1NThcdWIyOTQgU1RFTSBcdWJhODVcdWI4MzkKK19VSV9TVEVNX1dpekNtZF9DYXRfTmFtZT1cdWI5YzhcdWJjOTVcdWMwYWMKK19VSV9TVEVNX05ld0FjdGlvblNldF9NZW51PVx1YzBjOFx1Yjg1Y1x1YzZiNAorX1VJX1NURU1fQ2F0ZWdvcnk9U1RFTQorX1VJX05ld19TVEVNX1Byb2plY3RfV2l6YXJkPVNURU0gXHVkNTA0XHViODVjXHVjODFkXHVkMmI4CitfVUlfTmV3X1NURU1fUHJvamVjdF9XaXphcmRfVFQ9XHVjMGM4XHViODVjXHVjNmI0IFNURU0gXHVkNTA0XHViODVjXHVjODFkXHVkMmI4CitfVUlfR3JhcGhNb2RlbFdpemFyZF9sYWJlbD1cdWFkZjhcdWI3OThcdWQ1MDQKK19VSV9HcmFwaE1vZGVsV2l6YXJkX2Rlc2NyaXB0aW9uPVx1YzBjOFx1Yjg1Y1x1YzZiNCBcdWFkZjhcdWI3OThcdWQ1MDQKK19VSV9Nb2RlbE1vZGVsV2l6YXJkX2xhYmVsPVx1YmFhOFx1YjM3OAorX1VJX01vZGVsTW9kZWxXaXphcmRfZGVzY3JpcHRpb249XHVjMGM4XHViODVjXHVjNmI0IFx1YmFhOFx1YjM3OAorX1VJX1NjZW5hcmlvTW9kZWxXaXphcmRfbGFiZWw9XHVjMmRjXHViMDk4XHViOWFjXHVjNjI0CitfVUlfU2NlbmFyaW9Nb2RlbFdpemFyZF9kZXNjcmlwdGlvbj1cdWMwYzhcdWI4NWNcdWM2YjQgXHVjMmRjXHViMDk4XHViOWFjXHVjNjI0CitfVUlfU2VxdWVuY2VyTW9kZWxXaXphcmRfbGFiZWw9XHVjMjFjXHVjYzI4IFx1YzJkY1x1ZDAwMFx1YzExYworX1VJX1NlcXVlbmNlck1vZGVsV2l6YXJkX2Rlc2NyaXB0aW9uPVx1YzBjOFx1Yjg1Y1x1YzZiNCBcdWMxMjBcdWQ2MTUgXHVjMmRjXHVkMDAwXHVjMTFjCitfVUlfUmVhbFRpbWVTZXF1ZW5jZXJNb2RlbFdpemFyZF9sYWJlbD1cdWMyZTRcdWMyZGNcdWFjMDQgXHVjMmRjXHVkMDAwXHVjMTFjCitfVUlfUmVhbFRpbWVTZXF1ZW5jZXJNb2RlbFdpemFyZF9kZXNjcmlwdGlvbj1cdWMwYzhcdWI4NWNcdWM2YjQgXHVjMmU0XHVjMmRjXHVhYzA0IFx1YzJkY1x1ZDAwMFx1YzExYworCisjIFByZWZlcmVuY2UgUGFnZXMKK19VSV9WaXpQUGFnZT1cdWMyZGNcdWFjMDFcdWQ2NTQKK19VSV9Db2xvcnNQUGFnZT1cdWM5YzBcdWIzYzQgXHVjMGM5XHVjMGMxCitfVUlfTWFwVmlld1BQYWdlPVx1YzljMFx1YjNjNCBcdWJjZjRcdWFlMzAKK19VSV9HZW9QUGFnZT1cdWM5YzBcdWI5YWNcdWM4MDEgXHVjMmRjXHVhYzAxXHVkNjU0CitfVUlfU29sdmVyUFBhZ2U9XHVkNTc0XHVhY2IwXHVjMGFjCisKKyMgQ29tbWFuZHMKK19VSV9EZWxldGU9XHVjMGFkXHVjODFjCitfVUlfRGVsZXRlVFQ9XHVjNzkxXHVjNWM1IFx1YzYwMVx1YzVlZFx1Yzc1OCBcdWIwYjRcdWM2YTlcdWM3NDQgXHVjMGFkXHVjODFjCitfVUlfUmVmcmVzaD1cdWMwYzhcdWI4NWNcdWFjZTBcdWNlNjgKK19VSV9SZWZyZXNoVFQ9XHVjNzkxXHVjNWM1IFx1YzYwMVx1YzVlZFx1Yzc1OCBcdWIwYjRcdWM2YTkgXHVjMGM4XHViODVjXHVhY2UwXHVjZTY4CisKKyNPdGhlcgorX1VJX0NvbW1vbkVkaXRvcl9tZW51PSZDb21tb24gRWRpdG9yCitfVUlfR3JhcGhFZGl0b3JfbWVudT0mR3JhcGggRWRpdG9yCitfVUlfTW9kZWxFZGl0b3JfbWVudT0mTW9kZWwgRWRpdG9yCitfVUlfU2NlbmFyaW9FZGl0b3JfbWVudT0mU2NlbmFyaW8gRWRpdG9yCisKK19VSV9DcmVhdGVDaGlsZF9tZW51X2l0ZW09Jk5ldyBDaGlsZAorX1VJX0NyZWF0ZVNpYmxpbmdfbWVudV9pdGVtPU4mICBcdWQ2MTVcdWM4MWMgXHVjNzkwXHViOWU0CisKK19VSV9TaG93UHJvcGVydGllc1ZpZXdfbWVudV9pdGVtPVx1ZDQ1Y1x1YzJkYyBcdWJjMGYgXHVjMThkXHVjMTMxXHViY2Y0XHVhZTMwCitfVUlfUmVmcmVzaFZpZXdlcl9tZW51X2l0ZW09JlJlZnJlc2gKKworX1VJX1NlbGVjdGlvblBhZ2VfbGFiZWw9XHVjMTIwXHVkMGRkCitfVUlfUGFyZW50UGFnZV9sYWJlbD1cdWJkODBcdWJhYTgKK19VSV9MaXN0UGFnZV9sYWJlbD1cdWJhYTlcdWI4NWQKK19VSV9UcmVlUGFnZV9sYWJlbD1cdWIwOThcdWJiMzQKK19VSV9UYWJsZVBhZ2VfbGFiZWw9XHVkMTRjXHVjNzc0XHViZTE0CitfVUlfVHJlZVdpdGhDb2x1bW5zUGFnZV9sYWJlbD1cdWIwOThcdWJiMzRcdWM2NDAgXHVjNWY0CitfVUlfT2JqZWN0Q29sdW1uX2xhYmVsPVx1YWMxY1x1Y2NiNAorX1VJX1NlbGZDb2x1bW5fbGFiZWw9XHVjMTQwXHVkNTA0CisKK19VSV9Ob09iamVjdFNlbGVjdGVkPVx1YzU0NFx1YmIzNFx1YWM4M1x1YjNjNCBcdWM1NDggXHVjMTIwXHVkMGRkXHVkNTY4CitfVUlfU2luZ2xlT2JqZWN0U2VsZWN0ZWQ9XHVjMTIwXHVkMGRkXHVkNTVjIFx1YWMxZFx1Y2NiNCA6IHswfQorX1VJX011bHRpT2JqZWN0U2VsZWN0ZWQ9XHVjMTIwXHVkMGRkXHViNDFjIHswfSBcdWFjMWRcdWNjYjQKKworX1VJX09wZW5FZGl0b3JFcnJvcl9sYWJlbD1cdWM2MjRcdWQ1MDggXHVjNWQwXHViNTE0XHVkMTMwCisKK19VSV9XaXphcmRfY2F0ZWdvcnk9XHVjNjA4XHVjODFjIEVNRiBcdWJhYThcdWIzNzggXHVjMGRkXHVjMTMxIFx1YjljOFx1YmM5NVx1YzBhYworCitfVUlfQ3JlYXRlTW9kZWxFcnJvcl9tZXNzYWdlPVx1ZDMwY1x1Yzc3YyAnezB9ICJcdWM1ZDBcdWMxMWMgXHViYjM4XHVjODFjIFx1YmMxY1x1YzBkZAorCitfVUlfQ29tbW9uTW9kZWxXaXphcmRfbGFiZWw9XHVjNzdjXHViYzE4IFx1YmFhOFx1YjM3OAorX1VJX0NvbW1vbk1vZGVsV2l6YXJkX2Rlc2NyaXB0aW9uPVx1YzBjOFx1Yjg1Y1x1YzZiNCBcdWFjZjVcdWQxYjUgXHViYWE4XHViMzc4IFx1YjljY1x1YjRlNFx1YWUzMAorCitfVUlfQ29tbW9uRWRpdG9yX2xhYmVsPVx1Yzc3Y1x1YmMxOCBcdWJhYThcdWIzNzggXHVkM2I4XHVjOWQxXHVhZTMwCisKK19VSV9Db21tb25FZGl0b3JGaWxlbmFtZURlZmF1bHRCYXNlPVx1YjA5OFx1Yzc1OAorX1VJX0NvbW1vbkVkaXRvckZpbGVuYW1lRXh0ZW5zaW9uPVx1YWNmNVx1ZDFiNVx1Yzc1OAorCisKK19VSV9HcmFwaEVkaXRvcl9sYWJlbD1cdWFkZjhcdWI3OThcdWQ1MDQgXHViYWE4XHViMzc4IFx1ZDNiOFx1YzlkMVx1YWUzMAorCitfVUlfR3JhcGhFZGl0b3JGaWxlbmFtZURlZmF1bHRCYXNlPVx1YjA5OFx1Yzc1OAorX1VJX0dyYXBoRWRpdG9yRmlsZW5hbWVFeHRlbnNpb249XHVhZGY4XHViNzk4XHVkNTA0CisKKworX1VJX01vZGVsRWRpdG9yX2xhYmVsPVx1YmFhOFx1YjM3OCBcdWJhYThcdWIzNzggXHVkM2I4XHVjOWQxXHVhZTMwCisKK19VSV9Nb2RlbEVkaXRvckZpbGVuYW1lRGVmYXVsdEJhc2U9XHViMDk4XHVjNzU4CitfVUlfTW9kZWxFZGl0b3JGaWxlbmFtZUV4dGVuc2lvbj1cdWJhYThcdWIzNzgKKworCitfVUlfU2NlbmFyaW9FZGl0b3JfbGFiZWw9XHVjMmRjXHViMDk4XHViOWFjXHVjNjI0IFx1YmFhOFx1YjM3OCBcdWQzYjhcdWM5ZDFcdWFlMzAKKworX1VJX1NjZW5hcmlvRWRpdG9yRmlsZW5hbWVEZWZhdWx0QmFzZT1cdWIwOThcdWM3NTgKK19VSV9TY2VuYXJpb0VkaXRvckZpbGVuYW1lRXh0ZW5zaW9uPVx1YzJkY1x1YjA5OFx1YjlhY1x1YzYyNAorCitfVUlfV2l6YXJkX2xhYmVsPVx1YzBjOFx1Yjg1Y1x1YzZiNAorCitfV0FSTl9GaWxlbmFtZUV4dGVuc2lvbj1cdWQzMGNcdWM3N2MgXHVjNzc0XHViOTg0XHVjNzQwICIuezB9Ilx1Yjg1YyBcdWIwNWRcdWIwOThcdWM1N2NcdWQ1NjguIAorCitfVUlfTW9kZWxPYmplY3Q9XHViYWE4XHViMzc4IFx1YWMxZFx1Y2NiNAorX1VJX1hNTEVuY29kaW5nPVhNTCBcdWM3NzhcdWNmNTRcdWI1MjkKK19VSV9YTUxFbmNvZGluZ0Nob2ljZXM9VVRGIC0gOCBBU0NJSSBVVEYgLSAxNiBVVEYgLSAxNkJFIFVURiAtIDE2TEUgSVNPIC0gODg1OSAtIDEKK19VSV9XaXphcmRfaW5pdGlhbF9vYmplY3RfZGVzY3JpcHRpb249XHVkMzBjXHVjNzdjIFx1Yzc3NFx1Yjk4NCBcdWM5YzBcdWM4MTVcdWQ1NThcdWFjZTAgXHVjMGRkXHVjMTMxXHVkNTYwIFx1YmFhOFx1YjM3OCBcdWFjMWNcdWNjYjQgXHVjMTIwXHVkMGRkCisKK19VSV9GaWxlQ29uZmxpY3RfbGFiZWw9XHVkMzBjXHVjNzdjIFx1Y2RhOVx1YjNjYworX1dBUk5fRmlsZUNvbmZsaWN0PVx1ZDMwY1x1Yzc3YyAiezB9Ilx1Yzc3NFx1YmJmOCBcdWM4NzRcdWM3YWNcdWQ1NjguIFx1YWUzMFx1Yzg3NCBcdWQzMGNcdWM3N2NcdWM3NDQgXHViYzE0XHVhZmI4XHVjMmRjXHVhY2EwXHVjMmI1XHViMmM4XHVhZTRjPworX1VJX0NvcmVFZGl0b3JBZHZpc29yX0FjdGlvblNldF9sYWJlbD1cdWQ1NzVcdWMyZWMgXHVjNTYxXHVjMTU4IFx1YzEzOFx1ZDJiOAorX1VJX1BlcnNwZWN0aXZlX2xhYmVsPVx1ZDU3NVx1YzJlYworCitfVUlfQnJvd3NlX2xhYmVsPSZCcm93c2UuLi4KK19VSV9GaWxlX2xhYmVsPSZGaWxlCitfVUlfUXVlc3Rpb25fdGl0bGU9XHVjOWM4XHViYjM4CitfVUlfRXJyb3JfdGl0bGU9XHVjNjI0XHViOTU4CitfV0FSTl9Ob19FZGl0b3I9XHVkMzBjXHVjNzdjICJ7MH0iXHVjNWQwIFx1YjMwMFx1ZDU1YyBcdWI0ZjFcdWI4NWRcdWI0MWMgXHVkM2I4XHVjOWQxXHVhZTMwXHVhYzAwIFx1YzVjNlx1Yzc0Yy4KKworX1VJX0FwcGxpY2F0aW9uX3RpdGxlPVx1ZDU3NVx1YzJlYyBcdWM3NTFcdWM2YTkgXHVkNTA0XHViODVjXHVhZGY4XHViN2E4CitfVUlfTWVudV9GaWxlX2xhYmVsPSZGaWxlCitfVUlfTWVudV9OZXdfbGFiZWw9Jk5ldworX1VJX01lbnVfT3Blbl9sYWJlbD0mT3Blbi4uLgorX1VJX01lbnVfT3Blbl9kZXNjcmlwdGlvbj1cdWJhYThcdWIzNzggXHVhYzFjXHVjY2I0IFx1ZDMwY1x1Yzc3YyBcdWM1ZjRcdWFlMzAKK19VSV9NZW51X09wZW5VUklfbGFiZWw9Jk9wZW4gVVJJLi4uCitfVUlfTWVudV9PcGVuVVJJX2Rlc2NyaXB0aW9uPVVSSVx1YzVkMFx1YzExYyBcdWI4NWNcdWI1MjlcdWQ1NThcdWIyOTQgXHViYWE4XHViMzc4IFx1YWMxY1x1Y2NiNCBcdWM1ZjRcdWFlMzAKK19VSV9NZW51X0VkaXRfbGFiZWw9JkVkaXQKK19VSV9NZW51X1dpbmRvd19sYWJlbD0mV2luZG93CitfVUlfTWVudV9IZWxwX2xhYmVsPSZIZWxwCitfVUlfTWVudV9BYm91dF9sYWJlbD1cdWQ1NzVcdWMyZWMgJlx1YzVkMCBcdWFkMDBcdWQ1NThcdWM1ZWMgLi4uCitfVUlfQWJvdXRfdGl0bGU9XHVkNTc1XHVjMmVjIFx1Yzc1MVx1YzZhOSBcdWQ1MDRcdWI4NWNcdWFkZjhcdWI3YTgKK19VSV9BYm91dF90ZXh0PVx1ZDU3NVx1YzJlYyBcdWM3NTFcdWM2YTkgXHVkNTA0XHViODVjXHVhZGY4XHViN2E4XHVjNWQwIFx1YjMwMFx1ZDU1YyBcdWMxMjRcdWJhODUgXHViYzE1XHVjMmE0XHViMjk0IFx1YzVlY1x1YWUzMFx1YzVkMCBcdWQ0NWNcdWMyZGNcdWI0MjlcdWIyYzhcdWIyZTQuCisKK19VSV9Db21tb25Nb2RlbFdpemFyZF9BY3Rpb25TZXRfbGFiZWw9XHVjNzdjXHViYzE4IFx1YmFhOFx1YjM3OCBcdWM1NjFcdWMxNTggXHVjMTM4XHVkMmI4CitfVUlfR3JhcGhNb2RlbFdpemFyZF9BY3Rpb25TZXRfbGFiZWw9XHVhZGY4XHViNzk4XHVkNTA0IFx1YmFhOFx1YjM3OCBcdWM1NjFcdWMxNTggXHVjMTM4XHVkMmI4CitfVUlfTW9kZWxNb2RlbFdpemFyZF9BY3Rpb25TZXRfbGFiZWw9XHViYWE4XHViMzc4IFx1YmFhOFx1YjM3OCBcdWM1NjFcdWMxNTggXHVjMTM4XHVkMmI4CitfVUlfU2NlbmFyaW9Nb2RlbFdpemFyZF9BY3Rpb25TZXRfbGFiZWw9XHVjMmRjXHViMDk4XHViOWFjXHVjNjI0IFx1YmFhOFx1YjM3OCBcdWM1NjFcdWMxNTggXHVjMTM4XHVkMmI4CisKK19VSV9TZXF1ZW5jZXJFZGl0b3JfbWVudT0mU2VxdWVuY2VyIEVkaXRvcgorCitfVUlfU2VxdWVuY2VyRWRpdG9yX2xhYmVsPVx1YzJkY1x1ZDAwMFx1YzExYyBcdWJhYThcdWIzNzggXHVkM2I4XHVjOWQxXHVhZTMwCisKK19VSV9TZXF1ZW5jZXJFZGl0b3JGaWxlbmFtZURlZmF1bHRCYXNlPVx1YjA5OFx1Yzc1OAorX1VJX1NlcXVlbmNlckVkaXRvckZpbGVuYW1lRXh0ZW5zaW9uPVx1YzJkY1x1ZDAwMFx1YzExYworCitfVUlfU2VxdWVuY2VyTW9kZWxXaXphcmRfQWN0aW9uU2V0X2xhYmVsPVx1YzJkY1x1ZDAwMFx1YzExYyBcdWJhYThcdWIzNzggXHVjNTYxXHVjMTU4IFx1YzEzOFx1ZDJiOAorCitfVUlfRXhwZXJpbWVudEVkaXRvcl9tZW51PSZFeHBlcmltZW50IEVkaXRvcgorX1VJX0V4cGVyaW1lbnRNb2RlbFdpemFyZF9sYWJlbD1cdWMyZTRcdWQ1ZDgKK19VSV9FeHBlcmltZW50TW9kZWxXaXphcmRfZGVzY3JpcHRpb249XHVjMGM4IFx1YzJlNFx1ZDVkOAorCitfVUlfRXhwZXJpbWVudEVkaXRvcl9sYWJlbD1cdWMyZTRcdWQ1ZDggXHVkM2I4XHVjOWQxXHVhZTMwCisKK19VSV9FeHBlcmltZW50RWRpdG9yRmlsZW5hbWVEZWZhdWx0QmFzZT1cdWIwOThcdWM3NTgKK19VSV9FeHBlcmltZW50RWRpdG9yRmlsZW5hbWVFeHRlbnNpb249XHVjMmU0XHVkNWQ4CisKK19VSV9Db21tb25FZGl0b3JGaWxlbmFtZUV4dGVuc2lvbnM9XHVhY2Y1XHVkMWI1XHVjNzU4CisKK19VSV9FeHBlcmltZW50RWRpdG9yRmlsZW5hbWVFeHRlbnNpb25zPVx1YzJlNFx1ZDVkOAorCitfVUlfR3JhcGhFZGl0b3JGaWxlbmFtZUV4dGVuc2lvbnM9XHVhZGY4XHViNzk4XHVkNTA0CisKK19VSV9Nb2RlbEVkaXRvckZpbGVuYW1lRXh0ZW5zaW9ucz1cdWJhYThcdWIzNzgKKworX1VJX1NjZW5hcmlvRWRpdG9yRmlsZW5hbWVFeHRlbnNpb25zPVx1YzJkY1x1YjA5OFx1YjlhY1x1YzYyNAorCitfVUlfU2VxdWVuY2VyRWRpdG9yRmlsZW5hbWVFeHRlbnNpb25zPVx1YzJkY1x1ZDAwMFx1YzExYworCitfV0FSTl9GaWxlbmFtZUV4dGVuc2lvbnM9XHVkMzBjXHVjNzdjIFx1Yzc3NFx1Yjk4NFx1Yzc0MCBcdWIyZTRcdWM3NGMgXHVkNjU1XHVjN2E1XHVjNzkwIFx1YzkxMSBcdWQ1NThcdWIwOThcdWI5N2MgXHVhYzAwXHVjODM4XHVjNTdjXHVkNTY4IDogezB9CisKKyMgUHJlZGljYXRlCitfVUlfUHJlZGljYXRlRWRpdG9yX21lbnU9JlByZWRpY2F0ZSBFZGl0b3IKKworX1VJX1ByZWRpY2F0ZUVkaXRvcl9sYWJlbD1cdWMyMjBcdWM1YjQgXHViYWE4XHViMzc4IFx1ZDNiOFx1YzlkMVx1YWUzMAorCitfVUlfUHJlZGljYXRlTW9kZWxXaXphcmRfbGFiZWw9XHVjMjIwXHVjNWI0CitfVUlfUHJlZGljYXRlTW9kZWxXaXphcmRfZGVzY3JpcHRpb249XHVjMGM4XHViODVjXHVjNmI0IFx1YzIyMFx1YzViNAorCitfVUlfUHJlZGljYXRlRWRpdG9yRmlsZW5hbWVEZWZhdWx0QmFzZT1cdWIwOThcdWM3NTgKK19VSV9QcmVkaWNhdGVFZGl0b3JGaWxlbmFtZUV4dGVuc2lvbnM9XHVjMjIwXHVjNWI0CisKKyMgVHJpZ2dlcgorX1VJX1RyaWdnZXJFZGl0b3JfbWVudT0mVHJpZ2dlciBFZGl0b3IKK19VSV9UcmlnZ2VyRWRpdG9yX2xhYmVsPVx1ZDJiOFx1YjlhY1x1YWM3MCBcdWJhYThcdWIzNzggXHVkM2I4XHVjOWQxXHVhZTMwCisKK19VSV9UcmlnZ2VyTW9kZWxXaXphcmRfbGFiZWw9XHVkMmI4XHViOWFjXHVhYzcwCitfVUlfVHJpZ2dlck1vZGVsV2l6YXJkX2Rlc2NyaXB0aW9uPVx1YzBjOCBcdWQyYjhcdWI5YWNcdWFjNzAKKworX1VJX1RyaWdnZXJFZGl0b3JGaWxlbmFtZURlZmF1bHRCYXNlPVx1YjA5OFx1Yzc1OAorX1VJX1RyaWdnZXJFZGl0b3JGaWxlbmFtZUV4dGVuc2lvbnM9XHVkMmI4XHViOWFjXHVhYzcwCisKK19VSV9Nb2RpZmllckVkaXRvcl9tZW51PSZNb2RpZmllciBFZGl0b3IKK19VSV9Nb2RpZmllck1vZGVsV2l6YXJkX2xhYmVsPVx1YzIxOFx1YzgxNVx1Yzc5MCBcdWJhYThcdWIzNzgKK19VSV9Nb2RpZmllck1vZGVsV2l6YXJkX2Rlc2NyaXB0aW9uPVx1YzBjOFx1Yjg1Y1x1YzZiNCBcdWMyMThcdWM4MTVcdWM3OTAgXHViYWE4XHViMzc4IFx1YjljY1x1YjRlNFx1YWUzMAorCitfVUlfTW9kaWZpZXJFZGl0b3JfbGFiZWw9XHVjMjE4XHVjODE1XHVjNzkwIFx1YmFhOFx1YjM3OCBcdWQzYjhcdWM5ZDFcdWFlMzAKKworX1VJX01vZGlmaWVyRWRpdG9yRmlsZW5hbWVEZWZhdWx0QmFzZT1cdWIwOThcdWM3NTgKK19VSV9Nb2RpZmllckVkaXRvckZpbGVuYW1lRXh0ZW5zaW9ucz1cdWMyMThcdWM4MTVcdWM3OTAKKworX1VJX1NvbHZlckVkaXRvcl9tZW51PSZTb2x2ZXIgRWRpdG9yCitfVUlfU29sdmVyTW9kZWxXaXphcmRfbGFiZWw9XHVkNTc0XHVhY2IwXHVjMGFjIFx1YmFhOFx1YjM3OAorX1VJX1NvbHZlck1vZGVsV2l6YXJkX2Rlc2NyaXB0aW9uPVx1YzBjOFx1Yjg1Y1x1YzZiNCBcdWMxOTRcdWJjODQgXHViYWE4XHViMzc4IFx1YjljY1x1YjRlNFx1YWUzMAorX1VJX1NvbHZlckVkaXRvcl9sYWJlbD1cdWQ1NzRcdWFjYjBcdWMwYWMgXHViYWE4XHViMzc4IFx1ZDNiOFx1YzlkMVx1YWUzMAorX1VJX1NvbHZlckVkaXRvckZpbGVuYW1lRGVmYXVsdEJhc2U9XHViMDk4XHVjNzU4CitfVUlfU29sdmVyRWRpdG9yRmlsZW5hbWVFeHRlbnNpb25zPVx1ZDU3NFx1YWNiMFx1YzBhYworX1VJX0dyYXBoZ2VuZXJhdG9yRWRpdG9yX21lbnU9JkdyYXBoZ2VuZXJhdG9yIEVkaXRvcgorX1VJX0dyYXBoZ2VuZXJhdG9yTW9kZWxXaXphcmRfbGFiZWw9XHVhZGY4XHViNzk4XHVkNTA0XHVjMGRkXHVjMTMxXHVhZTMwIFx1YmFhOFx1YjM3OAorX1VJX0dyYXBoZ2VuZXJhdG9yTW9kZWxXaXphcmRfZGVzY3JpcHRpb249XHVjMGM4XHViODVjXHVjNmI0IFx1YWRmOFx1Yjc5OFx1ZDUwNFx1YzBkZFx1YzEzMVx1Yzc5MCBcdWJhYThcdWIzNzggXHViOWNjXHViNGU0XHVhZTMwCitfVUlfR3JhcGhnZW5lcmF0b3JFZGl0b3JfbGFiZWw9XHVhZGY4XHViNzk4XHVkNTA0XHVjMGRkXHVjMTMxXHVhZTMwIFx1YmFhOFx1YjM3OCBcdWQzYjhcdWM5ZDFcdWFlMzAKK19VSV9HcmFwaGdlbmVyYXRvckVkaXRvckZpbGVuYW1lRGVmYXVsdEJhc2U9XHViMDk4XHVjNzU4CitfVUlfR3JhcGhnZW5lcmF0b3JFZGl0b3JGaWxlbmFtZUV4dGVuc2lvbnM9XHVhZGY4XHViNzk4XHVkNTA0XHVjMGRkXHVjMTMxXHVhZTMwCitfVUlfTG9nZ2VyRWRpdG9yX21lbnU9JkxvZ2dlciBFZGl0b3IKK19VSV9Mb2dnZXJNb2RlbFdpemFyZF9sYWJlbD1Mb2dnZXIgTW9kZWwKK19VSV9Mb2dnZXJNb2RlbFdpemFyZF9kZXNjcmlwdGlvbj1DcmVhdGUgYSBuZXcgTG9nZ2VyIG1vZGVsCitfVUlfTG9nZ2VyRWRpdG9yX2xhYmVsPUxvZ2dlciBNb2RlbCBFZGl0b3IKK19VSV9Mb2dnZXJFZGl0b3JGaWxlbmFtZURlZmF1bHRCYXNlPVx1YjA5OFx1Yzc1OAorX1VJX0xvZ2dlckVkaXRvckZpbGVuYW1lRXh0ZW5zaW9ucz1sb2dnZXIKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9wbHVnaW5femgucHJvcGVydGllcyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9wbHVnaW5femgucHJvcGVydGllcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNjcyMDdhCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3BsdWdpbl96aC5wcm9wZXJ0aWVzCkBAIC0wLDAgKzEsMzI5IEBACisjCisjIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjICAqIENvcHlyaWdodCAoYykgMjAwNiwgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyMgICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworIyAgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyMgICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyMgICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyMgICoKKyMgICogQ29udHJpYnV0b3JzOgorIyAgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisjICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyMgVG8gY29kZSBkZXZlbG9wZXI6CisjICAgRG8gTk9UIGNoYW5nZSB0aGUgcHJvcGVydGllcyBiZXR3ZWVuIHRoaXMgbGluZSBhbmQgdGhlCisjICAgIiUlJSBFTkQgT0YgVFJBTlNMQVRFRCBQUk9QRVJUSUVTICUlJSIgbGluZS4KKyMgICBNYWtlIGEgbmV3IHByb3BlcnR5IG5hbWUsIGFwcGVuZCB0byB0aGUgZW5kIG9mIHRoZSBmaWxlIGFuZCBjaGFuZ2UKKyMgICB0aGUgY29kZSB0byB1c2UgdGhlIG5ldyBwcm9wZXJ0eS4KKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyMgJSUlIEVORCBPRiBUUkFOU0xBVEVEIFBST1BFUlRJRVMgJSUlCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK3BsdWdpbk5hbWU9U1RFTSBVSQorCitwcm92aWRlck5hbWU9RWNsaXBzZS5vcmcKKworIyBwcm9kdWN0IG5hbWUKK19VSV9Qcm9kdWN0X05hbWU9U1RFTQorCisjIFVuaXZlcnNhbCBXZWxjb21lCitpbnRyb1RpdGxlPVx1NmIyMlx1OGZjZVx1NGY3Zlx1NzUyOFNURU0KK2ludHJvRGVzY3JpcHRpb24tb3ZlcnZpZXc9U1RFTVx1NzY4NFx1NTQwNFx1NzljZFx1OGQ0NFx1NmU5MAoraW50cm9EZXNjcmlwdGlvbi1maXJzdHN0ZXBzPVx1N2IyY1x1NGUwMFx1NGUyYVx1NmI2NVx1OWFhNFx1NzY4NFx1NjNjZlx1OGZmMAoraW50cm9EZXNjcmlwdGlvbi10dXRvcmlhbHM9XHU5NGZlXHU2M2E1XHU1MjMwU1RFTVx1NjU1OVx1N2EwYgoraW50cm9EZXNjcmlwdGlvbi1zYW1wbGVzPVx1NjgzN1x1NjcyY1x1NjNjZlx1OGZmMAoraW50cm9EZXNjcmlwdGlvbi13aGF0c25ldz1cdTViZjlcdTRlOGVTVEVNXHU2NjJmXHU2NWIwXHU3Njg0XHU1ZTc2XHU0ZTE0XHU1MDNjXHU1Zjk3XHU2Y2U4XHU2MTBmXHU3Njg0CitpbnRyb0Rlc2NyaXB0aW9uLW1pZ3JhdGU9XHU4ZmMxXHU3OWZiXHU4YmY0XHU2NjBlCitpbnRyb0Rlc2NyaXB0aW9uLXdlYnJlc291cmNlcz1cdThiZTVcdTdmNTFcdTdhZDlcdTc2ODRcdThkNDRcdTZlOTBcdTYzY2ZcdThmZjAKKworIyBDb21tb24gS2V5cworX1VJX1NURU09U1RFTQorX1VJX0RlY29yYXRvcnM9XHU4OGM1XHU5OTcwXHU1NjY4CitfVUlfRXhwZXJpbWVudHM9XHU1YjllXHU5YThjCitfVUlfR3JhcGhzPVx1NTZmZQorX1VJX0lkZW50aWZpYWJsZXM9XHU1M2VmXHU4YmM2XHU1MjJiXHU3Njg0CitfVUlfTW9kZWxzPVx1NmEyMVx1NTc4YgorX1VJX01vZGlmaWVycz1cdTRmZWVcdTY1MzlcdTU2NjgKK19VSV9QcmVkaWNhdGVzPVx1NjNjZlx1OGZmMAorX1VJX1NjZW5hcmlvcz1cdTY1YjlcdTY4NDgKK19VSV9TZXF1ZW5jZXJzPVx1NWU4Zlx1NTIxN1x1NTNkMVx1NzUxZlx1NTY2OAorX1VJX1RyaWdnZXJzPVx1ODllNlx1NTNkMVx1NTY2OAorCisKKworIyBQZXJzcGVjdGl2ZXMKK19VSV9EZXNpZ25lcl9QZXJzcGVjdGl2ZT1cdThiYmVcdThiYTFcdTVlMDgKK19VSV9TaW11bGF0aW9uX1BlcnNwZWN0aXZlPVx1NGVmZlx1NzcxZgorX1VJX0FuYWx5c2lzX1BlcnNwZWN0aXZlPVx1NTIwNlx1Njc5MAorCisjIFZpZXdzCitfVUlfQWN0aXZlX0JhdGNoZXNfVmlldz1cdTVmNTNcdTUyNGRcdThmZDBcdTg4NGNcdTc2ODRcdTYyNzlcdTU5MDRcdTc0MDYKK19VSV9BY3RpdmVfU2ltdWxhdGlvbnNfVmlldz1cdTVmNTNcdTUyNGRcdThmZDBcdTg4NGNcdTc2ODRcdTRlZmZcdTc3MWYKK19VSV9FcnJvcl9Mb2dfVmlldz1cdTk1MTlcdThiZWZcdTY1ZTVcdTVmZDcKK19VSV9NYXBfVmlldz1cdTU3MzBcdTU2ZmUKK19VSV9TaW11bGF0aW9uX0NvbnRyb2xfVmlldz1cdTRlZmZcdTc3MWZcdTYzYTdcdTUyMzYKK19VSV9TVEVNX1Byb2plY3RfRXhwbG9yZXI9U1RFTVx1OTg3OVx1NzZlZVx1NmQ0Zlx1ODljOFx1NTY2OAorX1VJX1Byb2plY3RfRXhwbG9yZXI9XHU5ODc5XHU3NmVlXHU2ZDRmXHU4OWM4XHU1NjY4CisKKyMgUHJvamVjdCBFeHBsb3JlciBDb250ZW50CisKK19VSV9SZWNvcmRlZF9TaW1zPVx1OGJiMFx1NWY1NVx1NzY4NFx1NGVmZlx1NzcxZgorCisKKyMgV29ya2JlbmNoIE1lbnUKK19VSV9TVEVNX1dvcmtCZW5jaF9NZW51PVNURU0KK19VSV9TVEVNX0FjdGlvbl9SdW49XHU4ZmQwXHU4ODRjCitfVUlfU1RFTV9BY3Rpb25fUnVuX1RUPVx1NWYwMFx1NTljYlx1NmEyMVx1NjJkZlx1OGZkMFx1ODg0YworX1VJX1NURU1fQWN0aW9uX1N0b3A9XHU1MDVjXHU2YjYyCitfVUlfU1RFTV9BY3Rpb25fU3RvcF9UVD1cdTUwNWNcdTZiNjJcdTRlZmZcdTc3MWZcdTVlNzZcdTRmN2ZcdTUxNzZcdTU5MDRcdTRlOGVcdTk3NWVcdTZkM2JcdTUyYThcdTcyYjZcdTYwMDEKK19VSV9TVEVNX0FjdGlvbl9QYXVzZT1cdTY2ODJcdTUwNWMKK19VSV9TVEVNX0FjdGlvbl9QYXVzZV9UVD1cdTY2ODJcdTUwNWNcdTRlZmZcdTc3MWYKK19VSV9TVEVNX0FjdGlvbl9TdGVwPVx1NmI2NQorX1VJX1NURU1fQWN0aW9uX1N0ZXBfVFQ9XHU0ZWU1XHU0ZTAwXHU0ZTJhXHU2NWY2XHU5NWY0XHU2YjY1XHU5NTdmXHU2NzY1XHU4ZmQwXHU4ODRjXHU2YTIxXHU2MmRmXHU0ZWZmXHU3NzFmCitfVUlfU1RFTV9BY3Rpb25fUmVzZXQ9XHU1OTBkXHU0ZjRkCitfVUlfU1RFTV9BY3Rpb25fUmVzZXRfVFQ9XHU1YzA2XHU0ZWZmXHU3NzFmXHU4ZmQ4XHU1MzlmXHU1MjMwXHU4ZDc3XHU1OWNiXHU3MmI2XHU2MDAxCisKKyMgV29ya2JlbmNoIE1lbnUgKENvbW1hbmRzKQorX1VJX1NURU1fV29ya0JlbmNoX01lbnVfQ29tbWFuZD1TVEVNXHU1NDdkXHU0ZWU0CitfVUlfU1RFTV9Xb3JrQmVuY2hfTWVudV9Db21tYW5kX1RUPVNURU1cdTVlZmFcdTZhMjFcdTdjZmJcdTdlZGZcdTU0N2RcdTRlZTQKK19VSV9TVEVNX0V4ZWN1dGlvbl9Db21tYW5kX0NhdD1TVEVNXHU2MjY3XHU4ODRjXHU1NDdkXHU0ZWU0CitfVUlfU1RFTV9FeGVjdXRpb25fQ29tbWFuZF9DYXRfRGVzYz1TVEVNXHU1NDdkXHU0ZWU0XHU2M2E3XHU1MjM2XHU2YTIxXHU2MmRmXHU1NDhjXHU2Mjc5XHU1OTA0XHU3NDA2XHU2MjY3XHU4ODRjCitfVUlfU1RFTV9Db21tYW5kX1J1bj1cdThmZDBcdTg4NGMKK19VSV9TVEVNX0NvbW1hbmRfUnVuVFQ9XHU1ZjAwXHU1OWNiXHU2MjY3XHU4ODRjCitfVUlfU1RFTV9Db21tYW5kX1J1bk1uZT1cdThmZDBcdTg4NGMKK19VSV9TVEVNX0NvbW1hbmRfUnVuX0Rlc2M9XHU1NDJmXHU1MmE4XHU0ZTg2XHU2YTIxXHU2MmRmXHU2MjY3XHU4ODRjXHU2MjE2XHU2Mjc5XHU1OTA0XHU3NDA2CitfVUlfU1RFTV9Db21tYW5kX1N0b3A9XHU1MDVjXHU2YjYyCitfVUlfU1RFTV9Db21tYW5kX1N0b3BUVD1cdTUwNWNcdTZiNjJcdTYyNjdcdTg4NGMKK19VSV9TVEVNX0NvbW1hbmRfU3RvcE1uZT1cdTUwNWNcdTZiNjIKK19VSV9TVEVNX0NvbW1hbmRfU3RvcF9EZXNjPVx1NTIyMFx1OTY2NFx1NGUwMFx1NGUyYVx1NGVmZlx1NzcxZlx1NjIxNlx1NjI3OVx1NTkwNFx1NzQwNlx1ZmYwY1x1NWU3Nlx1NGUxNFx1OTYzMlx1NmI2Mlx1OGZkYlx1NGUwMFx1NmI2NVx1NzY4NFx1NjI2N1x1ODg0YworX1VJX1NURU1fQ29tbWFuZF9TdGVwPVx1NmI2NQorX1VJX1NURU1fQ29tbWFuZF9TdGVwVFQ9XHU2YjY1XHU2MjY3XHU4ODRjCitfVUlfU1RFTV9Db21tYW5kX1N0ZXBNbmU9XHU2YjY1CitfVUlfU1RFTV9Db21tYW5kX1N0ZXBfRGVzYz1cdTZiNjVcdThmZGJcdTVmMGZcdTYyNjdcdTg4NGNcdTRlMDBcdTRlMmFcdTRlZmZcdTc3MWZcdTYyMTZcdTgwMDVcdTU3MjhcdTRlMDBcdTRlMmFcdTU0NjhcdTY3MWZcdTUxODVcdTYyNzlcdTU5MDRcdTc0MDYKK19VSV9TVEVNX0NvbW1hbmRfUmVzZXQ9XHU1OTBkXHU0ZjRkCitfVUlfU1RFTV9Db21tYW5kX1Jlc2V0VFQ9XHU2MjY3XHU4ODRjXHU1OTBkXHU0ZjRkCitfVUlfU1RFTV9Db21tYW5kX1Jlc2V0TW5lPVx1NTkwZFx1NGY0ZAorX1VJX1NURU1fQ29tbWFuZF9SZXNldF9EZXNjPVx1OTFjZFx1N2Y2ZVx1NzY4NFx1NmEyMVx1NjJkZlx1NjIxNlx1NjI3OVx1OTFjZlx1NzJiNlx1NjAwMVx1NTIzMFx1NTIxZFx1NTljYlx1NzJiNlx1NjAwMQorX1VJX1NURU1fQ29tbWFuZF9QYXVzZT1cdTY2ODJcdTUwNWMKK19VSV9TVEVNX0NvbW1hbmRfUGF1c2VUVD1cdTY2ODJcdTUwNWNcdTYyNjdcdTg4NGMKK19VSV9TVEVNX0NvbW1hbmRfUGF1c2VNbmU9XHU2NjgyXHU1MDVjCitfVUlfU1RFTV9Db21tYW5kX1BhdXNlX0Rlc2M9XHU2NjgyXHU1MDVjXHU0ZWZmXHU3NzFmXHU2MjY3XHU4ODRjXHU1NDhjXHU2Mjc5XHU1OTA0XHU3NDA2CisKK19VSV9TVEVNX0V4cGVyaW1lbnRfQ29tbWFuZF9DYXQ9XHU1YjllXHU5YThjXHU1NDdkXHU0ZWU0CitfVUlfU1RFTV9FeHBlcmltZW50X0NvbW1hbmRfQ2F0X0Rlc2M9XHU1YjllXHU5YThjXHU3NmY4XHU1MTczXHU3Njg0XHU1NDdkXHU0ZWU0CitfVUlfU1RFTV9Db21tYW5kX05ld01vZFdpej1cdTUyMWJcdTVlZmFcdTRmZWVcdTY1MzlcdTU2NjgKK19VSV9TVEVNX0NvbW1hbmRfTmV3TW9kV2l6VFQ9XHU1MjFiXHU1ZWZhXHU0ZTAwXHU0ZTJhXHU2NWIwXHU3Njg0XHU0ZmVlXHU2NTM5XHU1NjY4CitfVUlfU1RFTV9Db21tYW5kX05ld01vZFdpel9EZXNjPVx1NjI1M1x1NWYwMFx1NjViMFx1NzY4NFx1NGZlZVx1NjUzOVx1NTY2OFx1NTQxMVx1NWJmYworCitfVUlfU1RFTV9Db21tYW5kX0RlbGV0ZT1cdTUyMjBcdTk2NjQKK19VSV9TVEVNX0NvbW1hbmRfRGVsZXRlVFQ9XHU1MjIwXHU5NjY0XHU1M2VmXHU4YmM2XHU1MjJiCisKK19VSV9TVEVNX0NvbW1hbmRfUmVmYWN0b3JfUmVuYW1lPVx1OTFjZFx1NTQ3ZFx1NTQwZAorX1VJX1NURU1fQ29tbWFuZF9SZWZhY3Rvcl9SZW5hbWVUVD1cdTkxY2RcdTY1YjBcdTU0N2RcdTU0MGRcdThiYzZcdTUyMmIKKworX1VJX1NURU1fQ29tbWFuZF9SZWZhY3Rvcl9Db3B5PVx1NTkwZFx1NTIzNgorX1VJX1NURU1fQ29tbWFuZF9SZWZhY3Rvcl9Db3B5VFQ9XHU1OTBkXHU1MjM2XHU4YmM2XHU1MjJiCisKKyMgTmV3IE1lbnUKK19VSV9TVEVNX1dpekNtZF9DYXRfRGVzYz1TVEVNXHU1NDdkXHU0ZWU0XHU4YzAzXHU3NTI4XHU1NDExXHU1YmZjCitfVUlfU1RFTV9XaXpDbWRfQ2F0X05hbWU9XHU1NDExXHU1YmZjCitfVUlfU1RFTV9OZXdBY3Rpb25TZXRfTWVudT1cdTY1YjBcdTVlZmEKK19VSV9TVEVNX0NhdGVnb3J5PVNURU0KK19VSV9OZXdfU1RFTV9Qcm9qZWN0X1dpemFyZD1TVEVNXHU5ODc5XHU3NmVlCitfVUlfTmV3X1NURU1fUHJvamVjdF9XaXphcmRfVFQ9XHU2NWIwXHU1ZWZhU1RFTVx1OTg3OVx1NzZlZQorX1VJX0dyYXBoTW9kZWxXaXphcmRfbGFiZWw9XHU1NmZlCitfVUlfR3JhcGhNb2RlbFdpemFyZF9kZXNjcmlwdGlvbj1cdTY1YjBcdTVlZmFcdTU2ZmUKK19VSV9Nb2RlbE1vZGVsV2l6YXJkX2xhYmVsPVx1NmEyMVx1NTc4YgorX1VJX01vZGVsTW9kZWxXaXphcmRfZGVzY3JpcHRpb249XHU2NWIwXHU1ZWZhXHU2YTIxXHU1NzhiCitfVUlfU2NlbmFyaW9Nb2RlbFdpemFyZF9sYWJlbD1cdTY1YjlcdTY4NDgKK19VSV9TY2VuYXJpb01vZGVsV2l6YXJkX2Rlc2NyaXB0aW9uPVx1NjViMFx1NWVmYVx1NjViOVx1Njg0OAorX1VJX1NlcXVlbmNlck1vZGVsV2l6YXJkX2xhYmVsPVx1OTg3YVx1NWU4Zlx1NWI5YVx1NWU4Zlx1NTY2OAorX1VJX1NlcXVlbmNlck1vZGVsV2l6YXJkX2Rlc2NyaXB0aW9uPVx1NjViMFx1NWVmYVx1OTg3YVx1NWU4Zlx1NWU4Zlx1NTIxN1x1NTY2OAorX1VJX1JlYWxUaW1lU2VxdWVuY2VyTW9kZWxXaXphcmRfbGFiZWw9XHU1YjllXHU2NWY2XHU1ZThmXHU1MjE3XHU1NjY4CitfVUlfUmVhbFRpbWVTZXF1ZW5jZXJNb2RlbFdpemFyZF9kZXNjcmlwdGlvbj1cdTY1YjBcdTVlZmFcdTViOWVcdTY1ZjZcdTVlOGZcdTUyMTdcdTU2NjgKKworIyBQcmVmZXJlbmNlIFBhZ2VzCitfVUlfVml6UFBhZ2U9XHU1M2VmXHU4OWM2XHU1MzE2CitfVUlfQ29sb3JzUFBhZ2U9XHU1NzMwXHU1NmZlXHU5ODljXHU4MjcyCitfVUlfTWFwVmlld1BQYWdlPVx1NTczMFx1NTZmZVx1ODljNlx1NTZmZQorX1VJX0dlb1BQYWdlPVx1NTczMFx1NzQwNlx1NTNlZlx1ODljNlx1NTMxNgorX1VJX1NvbHZlclBQYWdlPVx1NmM0Mlx1ODllMworCisjIENvbW1hbmRzCitfVUlfRGVsZXRlPVx1NTIyMFx1OTY2NAorX1VJX0RlbGV0ZVRUPVx1NTIyMFx1OTY2NFx1NWRlNVx1NGY1Y1x1NTMzYVx1NzY4NFx1NTE4NVx1NWJiOQorX1VJX1JlZnJlc2g9XHU1MjM3XHU2NWIwCitfVUlfUmVmcmVzaFRUPVx1NTIzN1x1NjViMFx1NGVjZVx1NWRlNVx1NGY1Y1x1NTMzYVx1NGUyZFx1NzY4NFx1NTE4NVx1NWJiOVx1NjdlNVx1NzcwYgorCisjT3RoZXIKK19VSV9Db21tb25FZGl0b3JfbWVudT0mQ29tbW9uIEVkaXRvcgorX1VJX0dyYXBoRWRpdG9yX21lbnU9JkdyYXBoIEVkaXRvcgorX1VJX01vZGVsRWRpdG9yX21lbnU9Jk1vZGVsIEVkaXRvcgorX1VJX1NjZW5hcmlvRWRpdG9yX21lbnU9JlNjZW5hcmlvIEVkaXRvcgorCitfVUlfQ3JlYXRlQ2hpbGRfbWVudV9pdGVtPSZOZXcgQ2hpbGQKK19VSV9DcmVhdGVTaWJsaW5nX21lbnVfaXRlbT1cdTY1YjBcdTc1MWZcdTYyMTBcdTRlMDBcdTRlMmFcdTUxNDRcdTVmMWZcdTdjN2IKKworX1VJX1Nob3dQcm9wZXJ0aWVzVmlld19tZW51X2l0ZW09XHU2NjNlXHU3OTNhXHU1NDhjXHU1YzVlXHU2MDI3XHU2N2U1XHU3NzBiCitfVUlfUmVmcmVzaFZpZXdlcl9tZW51X2l0ZW09JlJlZnJlc2gKKworX1VJX1NlbGVjdGlvblBhZ2VfbGFiZWw9XHU5MDA5XHU2MmU5CitfVUlfUGFyZW50UGFnZV9sYWJlbD1cdTViYjZcdTk1N2YKK19VSV9MaXN0UGFnZV9sYWJlbD1cdTc2ZWVcdTVmNTUKK19VSV9UcmVlUGFnZV9sYWJlbD1cdTY4MTEKK19VSV9UYWJsZVBhZ2VfbGFiZWw9XHU4ODY4CitfVUlfVHJlZVdpdGhDb2x1bW5zUGFnZV9sYWJlbD1cdTUyMDZcdTUyMTdcdTc2ODRcdTY4MTEKK19VSV9PYmplY3RDb2x1bW5fbGFiZWw9XHU1YmY5XHU4YzYxCitfVUlfU2VsZkNvbHVtbl9sYWJlbD1cdTgxZWFcdTVkZjEKKworX1VJX05vT2JqZWN0U2VsZWN0ZWQ9XHU2NWUwXHU5MDA5XHU1YjlhXHU1MTg1XHU1YmI5CitfVUlfU2luZ2xlT2JqZWN0U2VsZWN0ZWQ9XHU5MDA5XHU2MmU5XHU1YmY5XHU4YzYxXHVmZjFhezB9CitfVUlfTXVsdGlPYmplY3RTZWxlY3RlZD1cdTkwMDlcdTYyZTl7MH1cdTViZjlcdThjNjEKKworX1VJX09wZW5FZGl0b3JFcnJvcl9sYWJlbD1cdTYyNTNcdTVmMDBcdTdmMTZcdThmOTFcdTU2NjgKKworX1VJX1dpemFyZF9jYXRlZ29yeT1cdTRmOGJcdTU5ODJFTUZcdTZhMjFcdTU3OGJcdTUyMWJcdTVlZmFcdTU0MTFcdTViZmMKKworX1VJX0NyZWF0ZU1vZGVsRXJyb3JfbWVzc2FnZT1cdTU3MjhcdTY1ODdcdTRlZjZcdTIwMWN7MH1cdTIwMWRcdTRlMmRcdTkwNDdcdTUyMzBcdTc2ODRcdTk1ZWVcdTk4OTgKKworX1VJX0NvbW1vbk1vZGVsV2l6YXJkX2xhYmVsPVx1OTAxYVx1NzUyOFx1NmEyMVx1NTc4YgorX1VJX0NvbW1vbk1vZGVsV2l6YXJkX2Rlc2NyaXB0aW9uPVx1NTIxYlx1NWVmYVx1NGUwMFx1NGUyYVx1NjViMFx1NzY4NFx1NjY2ZVx1OTAxYVx1NmEyMVx1NTc4YgorCitfVUlfQ29tbW9uRWRpdG9yX2xhYmVsPVx1OTAxYVx1NzUyOFx1NmEyMVx1NTc4Ylx1N2YxNlx1OGY5MVx1NTY2OAorCitfVUlfQ29tbW9uRWRpdG9yRmlsZW5hbWVEZWZhdWx0QmFzZT1cdTYyMTFcdTc2ODQKK19VSV9Db21tb25FZGl0b3JGaWxlbmFtZUV4dGVuc2lvbj1cdTVlMzhcdTg5YzFcdTc2ODQKKworCitfVUlfR3JhcGhFZGl0b3JfbGFiZWw9XHU1NmZlXHU1ZjYyXHU2YTIxXHU1NzhiXHU3ZjE2XHU4ZjkxXHU1NjY4CisKK19VSV9HcmFwaEVkaXRvckZpbGVuYW1lRGVmYXVsdEJhc2U9XHU2MjExXHU3Njg0CitfVUlfR3JhcGhFZGl0b3JGaWxlbmFtZUV4dGVuc2lvbj1cdTU2ZmUKKworCitfVUlfTW9kZWxFZGl0b3JfbGFiZWw9XHU2YTIxXHU1NzhiXHU3ZjE2XHU4ZjkxXHU1NjY4CisKK19VSV9Nb2RlbEVkaXRvckZpbGVuYW1lRGVmYXVsdEJhc2U9XHU2MjExXHU3Njg0CitfVUlfTW9kZWxFZGl0b3JGaWxlbmFtZUV4dGVuc2lvbj1cdTZhMjFcdTVmMGYKKworCitfVUlfU2NlbmFyaW9FZGl0b3JfbGFiZWw9XHU1NzNhXHU2NjZmXHU2YTIxXHU1NzhiXHU3ZjE2XHU4ZjkxXHU1NjY4CisKK19VSV9TY2VuYXJpb0VkaXRvckZpbGVuYW1lRGVmYXVsdEJhc2U9XHU2MjExXHU3Njg0CitfVUlfU2NlbmFyaW9FZGl0b3JGaWxlbmFtZUV4dGVuc2lvbj1cdTY1YjlcdTY4NDgKKworX1VJX1dpemFyZF9sYWJlbD1cdTY1YjBcdTVlZmEKKworX1dBUk5fRmlsZW5hbWVFeHRlbnNpb249XHU2NTg3XHU0ZWY2XHU1NDBkXHU1ZmM1XHU5ODdiXHU0ZWU1J3swfSAnJ1x1N2VkM1x1NWMzZQorCitfVUlfTW9kZWxPYmplY3Q9XHU2YTIxXHU1NzhiXHU1YmY5XHU4YzYxCitfVUlfWE1MRW5jb2Rpbmc9WE1MXHU3ZjE2XHU3ODAxCitfVUlfWE1MRW5jb2RpbmdDaG9pY2VzPVVURi04IEFTQ0lJIFVURi0xNiBVVEYtMTZCRSBVVEYtMTZMRSBJU08tODg1OS0xCitfVUlfV2l6YXJkX2luaXRpYWxfb2JqZWN0X2Rlc2NyaXB0aW9uPVx1NjMwN1x1NWI5YVx1NGUwMFx1NGUyYVx1NjU4N1x1NGVmNlx1NTQwZFx1NWU3Nlx1OTAwOVx1NjJlOVx1NGUwMFx1NGUyYVx1NmEyMVx1NTc4Ylx1NWJmOVx1OGM2MVx1NTIxYlx1NWVmYQorCitfVUlfRmlsZUNvbmZsaWN0X2xhYmVsPVx1NjU4N1x1NGVmNlx1NTFiMlx1N2E4MQorX1dBUk5fRmlsZUNvbmZsaWN0PVx1NjU4N1x1NGVmNlx1MjAxY3swfVx1MjAxZFx1NWRmMlx1NWI1OFx1NTcyOFx1MzAwMlx1NGY2MFx1ODk4MVx1NjZmZlx1NjM2Mlx1NzNiMFx1NjcwOVx1NzY4NFx1NjU4N1x1NGVmNlx1NTQxN1x1ZmYxZgorX1VJX0NvcmVFZGl0b3JBZHZpc29yX0FjdGlvblNldF9sYWJlbD1cdTY4MzhcdTVmYzNcdTUyYThcdTRmNWNcdTk2YzYKK19VSV9QZXJzcGVjdGl2ZV9sYWJlbD1cdTY4MzhcdTVmYzMKKworX1VJX0Jyb3dzZV9sYWJlbD0mQnJvd3NlLi4uCitfVUlfRmlsZV9sYWJlbD0mRmlsZQorX1VJX1F1ZXN0aW9uX3RpdGxlPVx1OTVlZVx1OTg5OAorX1VJX0Vycm9yX3RpdGxlPVx1OTUxOVx1OGJlZgorX1dBUk5fTm9fRWRpdG9yPVx1NzZlZVx1NTI0ZFx1OGJlNVx1NjU4N1x1NGVmNlx1MjAxY3swfVx1MjAxZFx1NmNhMVx1NjcwOVx1NmNlOFx1NTE4Y1x1N2YxNlx1OGY5MVx1NTY2OFx1MzAwMgorCitfVUlfQXBwbGljYXRpb25fdGl0bGU9XHU2ODM4XHU1ZmMzXHU1ZTk0XHU3NTI4CitfVUlfTWVudV9GaWxlX2xhYmVsPSZGaWxlCitfVUlfTWVudV9OZXdfbGFiZWw9Jk5ldworX1VJX01lbnVfT3Blbl9sYWJlbD0mT3Blbi4uLgorX1VJX01lbnVfT3Blbl9kZXNjcmlwdGlvbj1cdTYyNTNcdTVmMDBcdTRlMDBcdTRlMmFcdTZhMjFcdTU3OGJcdTViZjlcdThjNjFcdTY1ODdcdTRlZjYKK19VSV9NZW51X09wZW5VUklfbGFiZWw9Jk9wZW4gVVJJLi4uCitfVUlfTWVudV9PcGVuVVJJX2Rlc2NyaXB0aW9uPVx1NjI1M1x1NWYwMFx1NGUwMFx1NGUyYVx1NmEyMVx1NTc4Ylx1NWJmOVx1OGM2MVx1NWU3Nlx1NGUxNFx1NGVjZVx1NGUwMFx1NGUyYVVSSVx1Njc2NVx1NTJhMFx1OGY3ZFx1NWI4MworX1VJX01lbnVfRWRpdF9sYWJlbD0mRWRpdAorX1VJX01lbnVfV2luZG93X2xhYmVsPSZXaW5kb3cKK19VSV9NZW51X0hlbHBfbGFiZWw9JkhlbHAKK19VSV9NZW51X0Fib3V0X2xhYmVsPVx1NjgzOFx1NWZjM1x1NTQ4Y1x1NTE3M1x1NGU4ZS4uLgorX1VJX0Fib3V0X3RpdGxlPVx1NjgzOFx1NWZjM1x1NWU5NFx1NzUyOAorX1VJX0Fib3V0X3RleHQ9XHU2YjY0XHU1MTg1XHU1YmI5XHU0ZTBkXHU1NzI4XHU0ZjdmXHU3NTI4CisKK19VSV9Db21tb25Nb2RlbFdpemFyZF9BY3Rpb25TZXRfbGFiZWw9XHU5MDFhXHU3NTI4XHU2YTIxXHU1NzhiXHU1MmE4XHU0ZjVjXHU5NmM2CitfVUlfR3JhcGhNb2RlbFdpemFyZF9BY3Rpb25TZXRfbGFiZWw9XHU1NmZlXHU3OTNhXHU4MzAzXHU4ODRjXHU1MmE4XHU3ZWM0CitfVUlfTW9kZWxNb2RlbFdpemFyZF9BY3Rpb25TZXRfbGFiZWw9XHU2YTIxXHU1NzhiXHU1MmE4XHU0ZjVjXHU5NmM2CitfVUlfU2NlbmFyaW9Nb2RlbFdpemFyZF9BY3Rpb25TZXRfbGFiZWw9XHU2MGM1XHU2NjZmXHU2YTIxXHU1NzhiXHU4ODRjXHU1MmE4XHU3ZWM0CisKK19VSV9TZXF1ZW5jZXJFZGl0b3JfbWVudT0mU2VxdWVuY2VyIEVkaXRvcgorCitfVUlfU2VxdWVuY2VyRWRpdG9yX2xhYmVsPVx1NWU4Zlx1NTIxN1x1NTNkMVx1NzUxZlx1NTY2OFx1NmEyMVx1NTc4Ylx1N2YxNlx1OGY5MVx1NTY2OAorCitfVUlfU2VxdWVuY2VyRWRpdG9yRmlsZW5hbWVEZWZhdWx0QmFzZT1cdTYyMTFcdTc2ODQKK19VSV9TZXF1ZW5jZXJFZGl0b3JGaWxlbmFtZUV4dGVuc2lvbj1cdTVlOGZcdTUyMTdcdTUzZDFcdTc1MWZcdTU2NjgKKworX1VJX1NlcXVlbmNlck1vZGVsV2l6YXJkX0FjdGlvblNldF9sYWJlbD1cdTVlOGZcdTUyMTdcdTUzZDFcdTc1MWZcdTU2NjhcdTZhMjFcdTU3OGJcdTg4NGNcdTUyYThcdTdlYzQKKworX1VJX0V4cGVyaW1lbnRFZGl0b3JfbWVudT0mRXhwZXJpbWVudCBFZGl0b3IKK19VSV9FeHBlcmltZW50TW9kZWxXaXphcmRfbGFiZWw9XHU1YjllXHU5YThjCitfVUlfRXhwZXJpbWVudE1vZGVsV2l6YXJkX2Rlc2NyaXB0aW9uPVx1NjViMFx1NWVmYVx1NWI5ZVx1OWE4YworCitfVUlfRXhwZXJpbWVudEVkaXRvcl9sYWJlbD1cdTViOWVcdTlhOGNcdTdmMTZcdThmOTFcdTU2NjgKKworX1VJX0V4cGVyaW1lbnRFZGl0b3JGaWxlbmFtZURlZmF1bHRCYXNlPVx1NjIxMVx1NzY4NAorX1VJX0V4cGVyaW1lbnRFZGl0b3JGaWxlbmFtZUV4dGVuc2lvbj1cdTViOWVcdTlhOGMKKworX1VJX0NvbW1vbkVkaXRvckZpbGVuYW1lRXh0ZW5zaW9ucz1cdTVlMzhcdTg5YzFcdTc2ODQKKworX1VJX0V4cGVyaW1lbnRFZGl0b3JGaWxlbmFtZUV4dGVuc2lvbnM9XHU1YjllXHU5YThjCisKK19VSV9HcmFwaEVkaXRvckZpbGVuYW1lRXh0ZW5zaW9ucz1cdTU2ZmUKKworX1VJX01vZGVsRWRpdG9yRmlsZW5hbWVFeHRlbnNpb25zPVx1NmEyMVx1NWYwZgorCitfVUlfU2NlbmFyaW9FZGl0b3JGaWxlbmFtZUV4dGVuc2lvbnM9XHU2NWI5XHU2ODQ4CisKK19VSV9TZXF1ZW5jZXJFZGl0b3JGaWxlbmFtZUV4dGVuc2lvbnM9XHU1ZThmXHU1MjE3XHU1M2QxXHU3NTFmXHU1NjY4CisKK19XQVJOX0ZpbGVuYW1lRXh0ZW5zaW9ucz1cdTY1ODdcdTRlZjZcdTU0MGRcdTVmYzVcdTk4N2JcdTUxNzdcdTY3MDlcdTRlZTVcdTRlMGJcdTYyNjlcdTVjNTVcdTU0MGRcdTRlNGJcdTRlMDBcdWZmMWF7MH0KKworIyBQcmVkaWNhdGUKK19VSV9QcmVkaWNhdGVFZGl0b3JfbWVudT0mUHJlZGljYXRlIEVkaXRvcgorCitfVUlfUHJlZGljYXRlRWRpdG9yX2xhYmVsPVx1NjNjZlx1OGZmMFx1NmEyMVx1NTc4Ylx1N2YxNlx1OGY5MVx1NTY2OAorCitfVUlfUHJlZGljYXRlTW9kZWxXaXphcmRfbGFiZWw9XHU2M2NmXHU4ZmYwCitfVUlfUHJlZGljYXRlTW9kZWxXaXphcmRfZGVzY3JpcHRpb249XHU2NWIwXHU1ZWZhXHU2M2NmXHU4ZmYwCisKK19VSV9QcmVkaWNhdGVFZGl0b3JGaWxlbmFtZURlZmF1bHRCYXNlPVx1NjIxMVx1NzY4NAorX1VJX1ByZWRpY2F0ZUVkaXRvckZpbGVuYW1lRXh0ZW5zaW9ucz1cdTYzY2ZcdThmZjAKKworIyBUcmlnZ2VyCitfVUlfVHJpZ2dlckVkaXRvcl9tZW51PSZUcmlnZ2VyIEVkaXRvcgorX1VJX1RyaWdnZXJFZGl0b3JfbGFiZWw9XHU4OWU2XHU1M2QxXHU2YTIxXHU1NzhiXHU3ZjE2XHU4ZjkxXHU1NjY4CisKK19VSV9UcmlnZ2VyTW9kZWxXaXphcmRfbGFiZWw9XHU4OWU2XHU1M2QxCitfVUlfVHJpZ2dlck1vZGVsV2l6YXJkX2Rlc2NyaXB0aW9uPVx1NjViMFx1NWVmYVx1ODllNlx1NTNkMVx1NTY2OAorCitfVUlfVHJpZ2dlckVkaXRvckZpbGVuYW1lRGVmYXVsdEJhc2U9XHU2MjExXHU3Njg0CitfVUlfVHJpZ2dlckVkaXRvckZpbGVuYW1lRXh0ZW5zaW9ucz1cdTg5ZTZcdTUzZDEKKworX1VJX01vZGlmaWVyRWRpdG9yX21lbnU9Jk1vZGlmaWVyIEVkaXRvcgorX1VJX01vZGlmaWVyTW9kZWxXaXphcmRfbGFiZWw9XHU0ZmVlXHU2NTM5XHU1NjY4XHU2YTIxXHU1NzhiCitfVUlfTW9kaWZpZXJNb2RlbFdpemFyZF9kZXNjcmlwdGlvbj1cdTUyMWJcdTVlZmFcdTRlMDBcdTRlMmFcdTY1YjBcdTc2ODRcdTRmZWVcdTY1MzlcdTU2NjhcdTZhMjFcdTU3OGIKKworX1VJX01vZGlmaWVyRWRpdG9yX2xhYmVsPVx1NGZlZVx1NjUzOVx1NTY2OFx1NmEyMVx1NTc4Ylx1N2YxNlx1OGY5MVx1NTY2OAorCitfVUlfTW9kaWZpZXJFZGl0b3JGaWxlbmFtZURlZmF1bHRCYXNlPVx1NjIxMVx1NzY4NAorX1VJX01vZGlmaWVyRWRpdG9yRmlsZW5hbWVFeHRlbnNpb25zPVx1NGZlZVx1NjUzOVx1NTY2OAorCitfVUlfU29sdmVyRWRpdG9yX21lbnU9JlNvbHZlciBFZGl0b3IKK19VSV9Tb2x2ZXJNb2RlbFdpemFyZF9sYWJlbD1cdTZjNDJcdTg5ZTNcdTZhMjFcdTU3OGIKK19VSV9Tb2x2ZXJNb2RlbFdpemFyZF9kZXNjcmlwdGlvbj1cdTUyMWJcdTVlZmFcdTRlMDBcdTRlMmFcdTY1YjBcdTc2ODRcdTZjNDJcdTg5ZTNcdTZhMjFcdTU3OGIKK19VSV9Tb2x2ZXJFZGl0b3JfbGFiZWw9XHU2YzQyXHU4OWUzXHU2YTIxXHU1NzhiXHU3ZjE2XHU4ZjkxXHU1NjY4CitfVUlfU29sdmVyRWRpdG9yRmlsZW5hbWVEZWZhdWx0QmFzZT1cdTYyMTFcdTc2ODQKK19VSV9Tb2x2ZXJFZGl0b3JGaWxlbmFtZUV4dGVuc2lvbnM9XHU2YzQyXHU4OWUzCitfVUlfR3JhcGhnZW5lcmF0b3JFZGl0b3JfbWVudT0mR3JhcGhnZW5lcmF0b3IgRWRpdG9yCitfVUlfR3JhcGhnZW5lcmF0b3JNb2RlbFdpemFyZF9sYWJlbD1cdTU2ZmVcdTc1MWZcdTYyMTBcdTU2NjhcdTZhMjFcdTU3OGIKK19VSV9HcmFwaGdlbmVyYXRvck1vZGVsV2l6YXJkX2Rlc2NyaXB0aW9uPVx1NTIxYlx1NWVmYVx1NGUwMFx1NGUyYVx1NjViMFx1NzY4NFx1NTZmZVx1NWY2Mlx1NzUxZlx1NjIxMFx1NTY2OFx1NmEyMVx1NTc4YgorX1VJX0dyYXBoZ2VuZXJhdG9yRWRpdG9yX2xhYmVsPVx1NTZmZVx1NzUxZlx1NjIxMFx1NTY2OFx1NmEyMVx1NTc4Ylx1N2YxNlx1OGY5MVx1NTY2OAorX1VJX0dyYXBoZ2VuZXJhdG9yRWRpdG9yRmlsZW5hbWVEZWZhdWx0QmFzZT1cdTYyMTFcdTc2ODQKK19VSV9HcmFwaGdlbmVyYXRvckVkaXRvckZpbGVuYW1lRXh0ZW5zaW9ucz1cdTU2ZmVcdTVmNjJcdTc1MWZcdTYyMTBcdTU2NjgKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zY2hlbWEvb3JnLmVjbGlwc2Uuc3RlbS51aS5sYXVuY2hlcnMuZXhzZCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zY2hlbWEvb3JnLmVjbGlwc2Uuc3RlbS51aS5sYXVuY2hlcnMuZXhzZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MWVkOGNmCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NjaGVtYS9vcmcuZWNsaXBzZS5zdGVtLnVpLmxhdW5jaGVycy5leHNkCkBAIC0wLDAgKzEsMTA5IEBACis8P3htbCB2ZXJzaW9uPScxLjAnIGVuY29kaW5nPSdVVEYtOCc/PgorPCEtLSBTY2hlbWEgZmlsZSB3cml0dGVuIGJ5IFBERSAtLT4KKzxzY2hlbWEgdGFyZ2V0TmFtZXNwYWNlPSJvcmcuZWNsaXBzZS5zdGVtLnVpIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiPgorPGFubm90YXRpb24+CisgICAgICA8YXBwSW5mbz4KKyAgICAgICAgIDxtZXRhLnNjaGVtYSBwbHVnaW49Im9yZy5lY2xpcHNlLnN0ZW0udWkiIGlkPSJvcmcuZWNsaXBzZS5zdGVtLnVpLmxhdW5jaGVycyIgbmFtZT0iU1RFTSBBcHBsaWNhdGlvbiBMYXVuY2hlcnMiLz4KKyAgICAgIDwvYXBwSW5mbz4KKyAgICAgIDxkb2N1bWVudGF0aW9uPgorICAgICAgICAgRXh0ZW5zaW9uIHRvIHJlZ2lzdGVyIHZhcmlvdXMgbGF1bmNoZXJzIGZvciB0aGUgU1RFTSBhcHBsaWNhdGlvbgorICAgICAgPC9kb2N1bWVudGF0aW9uPgorICAgPC9hbm5vdGF0aW9uPgorCisgICA8ZWxlbWVudCBuYW1lPSJleHRlbnNpb24iPgorICAgICAgPGFubm90YXRpb24+CisgICAgICAgICA8YXBwSW5mbz4KKyAgICAgICAgICAgIDxtZXRhLmVsZW1lbnQgLz4KKyAgICAgICAgIDwvYXBwSW5mbz4KKyAgICAgIDwvYW5ub3RhdGlvbj4KKyAgICAgIDxjb21wbGV4VHlwZT4KKyAgICAgICAgIDxzZXF1ZW5jZT4KKyAgICAgICAgICAgIDxlbGVtZW50IHJlZj0ibGF1bmNoZXIiLz4KKyAgICAgICAgIDwvc2VxdWVuY2U+CisgICAgICAgICA8YXR0cmlidXRlIG5hbWU9InBvaW50IiB0eXBlPSJzdHJpbmciIHVzZT0icmVxdWlyZWQiPgorICAgICAgICAgICAgPGFubm90YXRpb24+CisgICAgICAgICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KKyAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgorICAgICAgICAgICAgPC9hbm5vdGF0aW9uPgorICAgICAgICAgPC9hdHRyaWJ1dGU+CisgICAgICAgICA8YXR0cmlidXRlIG5hbWU9ImlkIiB0eXBlPSJzdHJpbmciPgorICAgICAgICAgICAgPGFubm90YXRpb24+CisgICAgICAgICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KKyAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgorICAgICAgICAgICAgPC9hbm5vdGF0aW9uPgorICAgICAgICAgPC9hdHRyaWJ1dGU+CisgICAgICAgICA8YXR0cmlidXRlIG5hbWU9Im5hbWUiIHR5cGU9InN0cmluZyI+CisgICAgICAgICAgICA8YW5ub3RhdGlvbj4KKyAgICAgICAgICAgICAgIDxkb2N1bWVudGF0aW9uPgorICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICA8L2RvY3VtZW50YXRpb24+CisgICAgICAgICAgICAgICA8YXBwSW5mbz4KKyAgICAgICAgICAgICAgICAgIDxtZXRhLmF0dHJpYnV0ZSB0cmFuc2xhdGFibGU9InRydWUiLz4KKyAgICAgICAgICAgICAgIDwvYXBwSW5mbz4KKyAgICAgICAgICAgIDwvYW5ub3RhdGlvbj4KKyAgICAgICAgIDwvYXR0cmlidXRlPgorICAgICAgPC9jb21wbGV4VHlwZT4KKyAgIDwvZWxlbWVudD4KKworICAgPGVsZW1lbnQgbmFtZT0ibGF1bmNoZXIiPgorICAgICAgPGNvbXBsZXhUeXBlPgorICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJuYW1lIiB0eXBlPSJzdHJpbmciIHVzZT0icmVxdWlyZWQiPgorICAgICAgICAgICAgPGFubm90YXRpb24+CisgICAgICAgICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KKyAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgorICAgICAgICAgICAgPC9hbm5vdGF0aW9uPgorICAgICAgICAgPC9hdHRyaWJ1dGU+CisgICAgICAgICA8YXR0cmlidXRlIG5hbWU9ImNsYXNzIiB0eXBlPSJzdHJpbmciIHVzZT0icmVxdWlyZWQiPgorICAgICAgICAgICAgPGFubm90YXRpb24+CisgICAgICAgICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KKyAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgorICAgICAgICAgICAgICAgPGFwcEluZm8+CisgICAgICAgICAgICAgICAgICA8bWV0YS5hdHRyaWJ1dGUga2luZD0iamF2YSIgYmFzZWRPbj0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmxhdW5jaGVyLkxhdW5jaGVyOiIvPgorICAgICAgICAgICAgICAgPC9hcHBJbmZvPgorICAgICAgICAgICAgPC9hbm5vdGF0aW9uPgorICAgICAgICAgPC9hdHRyaWJ1dGU+CisgICAgICA8L2NvbXBsZXhUeXBlPgorICAgPC9lbGVtZW50PgorCisgICA8YW5ub3RhdGlvbj4KKyAgICAgIDxhcHBJbmZvPgorICAgICAgICAgPG1ldGEuc2VjdGlvbiB0eXBlPSJzaW5jZSIvPgorICAgICAgPC9hcHBJbmZvPgorICAgICAgPGRvY3VtZW50YXRpb24+CisgICAgICAgICBbRW50ZXIgdGhlIGZpcnN0IHJlbGVhc2UgaW4gd2hpY2ggdGhpcyBleHRlbnNpb24gcG9pbnQgYXBwZWFycy5dCisgICAgICA8L2RvY3VtZW50YXRpb24+CisgICA8L2Fubm90YXRpb24+CisKKyAgIDxhbm5vdGF0aW9uPgorICAgICAgPGFwcEluZm8+CisgICAgICAgICA8bWV0YS5zZWN0aW9uIHR5cGU9ImV4YW1wbGVzIi8+CisgICAgICA8L2FwcEluZm8+CisgICAgICA8ZG9jdW1lbnRhdGlvbj4KKyAgICAgICAgIFtFbnRlciBleHRlbnNpb24gcG9pbnQgdXNhZ2UgZXhhbXBsZSBoZXJlLl0KKyAgICAgIDwvZG9jdW1lbnRhdGlvbj4KKyAgIDwvYW5ub3RhdGlvbj4KKworICAgPGFubm90YXRpb24+CisgICAgICA8YXBwSW5mbz4KKyAgICAgICAgIDxtZXRhLnNlY3Rpb24gdHlwZT0iYXBpaW5mbyIvPgorICAgICAgPC9hcHBJbmZvPgorICAgICAgPGRvY3VtZW50YXRpb24+CisgICAgICAgICBbRW50ZXIgQVBJIGluZm9ybWF0aW9uIGhlcmUuXQorICAgICAgPC9kb2N1bWVudGF0aW9uPgorICAgPC9hbm5vdGF0aW9uPgorCisgICA8YW5ub3RhdGlvbj4KKyAgICAgIDxhcHBJbmZvPgorICAgICAgICAgPG1ldGEuc2VjdGlvbiB0eXBlPSJpbXBsZW1lbnRhdGlvbiIvPgorICAgICAgPC9hcHBJbmZvPgorICAgICAgPGRvY3VtZW50YXRpb24+CisgICAgICAgICBbRW50ZXIgaW5mb3JtYXRpb24gYWJvdXQgc3VwcGxpZWQgaW1wbGVtZW50YXRpb24gb2YgdGhpcyBleHRlbnNpb24gcG9pbnQuXQorICAgICAgPC9kb2N1bWVudGF0aW9uPgorICAgPC9hbm5vdGF0aW9uPgorCisKKzwvc2NoZW1hPgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NjaGVtYS91aS5jb2xvcHJvdmlkZXJzLmV4c2QgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc2NoZW1hL3VpLmNvbG9wcm92aWRlcnMuZXhzZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41OTA0NGRhCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NjaGVtYS91aS5jb2xvcHJvdmlkZXJzLmV4c2QKQEAgLTAsMCArMSwxMTQgQEAKKzw/eG1sIHZlcnNpb249JzEuMCcgZW5jb2Rpbmc9J1VURi04Jz8+Cis8IS0tIFNjaGVtYSBmaWxlIHdyaXR0ZW4gYnkgUERFIC0tPgorPHNjaGVtYSB0YXJnZXROYW1lc3BhY2U9Im9yZy5lY2xpcHNlLnN0ZW0udWkiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSI+Cis8YW5ub3RhdGlvbj4KKyAgICAgIDxhcHBpbmZvPgorICAgICAgICAgPG1ldGEuc2NoZW1hIHBsdWdpbj0ib3JnLmVjbGlwc2Uuc3RlbS51aSIgaWQ9Im9yZy5lY2xpcHNlLnN0ZW0udWkuY29sb3Jwcm92aWRlcnMiIG5hbWU9IlVJIENvbG9yIFByb3ZpZGVycyIvPgorICAgICAgPC9hcHBpbmZvPgorICAgICAgPGRvY3VtZW50YXRpb24+CisgICAgICAgICBUaGlzIGV4dGVuc2lvbiBwb2ludCBhbGxvd3MgYWRkaW5nIENvbG9yIFByb3ZpZGVycyB0byB0aGUgVUkuCitDb2xvciBwcm92aWRlcnMgYXJlIHJlc3BvbnNpYmxlIGZvciBwcm92aWRpbmcgdGhlIGNvbG9ycyB0byBiZSB1c2VkIHdoZW4gZHJhd2luZyB0aGUgbWFwLgorICAgICAgPC9kb2N1bWVudGF0aW9uPgorICAgPC9hbm5vdGF0aW9uPgorCisgICA8ZWxlbWVudCBuYW1lPSJleHRlbnNpb24iPgorICAgICAgPGFubm90YXRpb24+CisgICAgICAgICA8YXBwaW5mbz4KKyAgICAgICAgICAgIDxtZXRhLmVsZW1lbnQgLz4KKyAgICAgICAgIDwvYXBwaW5mbz4KKyAgICAgIDwvYW5ub3RhdGlvbj4KKyAgICAgIDxjb21wbGV4VHlwZT4KKyAgICAgICAgIDxzZXF1ZW5jZT4KKyAgICAgICAgICAgIDxlbGVtZW50IHJlZj0iY29sb3Byb3ZpZGVyIiBtaW5PY2N1cnM9IjEiIG1heE9jY3Vycz0idW5ib3VuZGVkIi8+CisgICAgICAgICA8L3NlcXVlbmNlPgorICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJwb2ludCIgdHlwZT0ic3RyaW5nIiB1c2U9InJlcXVpcmVkIj4KKyAgICAgICAgICAgIDxhbm5vdGF0aW9uPgorICAgICAgICAgICAgICAgPGRvY3VtZW50YXRpb24+CisgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgIDwvZG9jdW1lbnRhdGlvbj4KKyAgICAgICAgICAgIDwvYW5ub3RhdGlvbj4KKyAgICAgICAgIDwvYXR0cmlidXRlPgorICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJpZCIgdHlwZT0ic3RyaW5nIj4KKyAgICAgICAgICAgIDxhbm5vdGF0aW9uPgorICAgICAgICAgICAgICAgPGRvY3VtZW50YXRpb24+CisgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgIDwvZG9jdW1lbnRhdGlvbj4KKyAgICAgICAgICAgIDwvYW5ub3RhdGlvbj4KKyAgICAgICAgIDwvYXR0cmlidXRlPgorICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJuYW1lIiB0eXBlPSJzdHJpbmciPgorICAgICAgICAgICAgPGFubm90YXRpb24+CisgICAgICAgICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KKyAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgorICAgICAgICAgICAgPC9hbm5vdGF0aW9uPgorICAgICAgICAgPC9hdHRyaWJ1dGU+CisgICAgICA8L2NvbXBsZXhUeXBlPgorICAgPC9lbGVtZW50PgorCisgICA8ZWxlbWVudCBuYW1lPSJjb2xvcHJvdmlkZXIiPgorICAgICAgPGNvbXBsZXhUeXBlPgorICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJuYW1lIiB0eXBlPSJzdHJpbmciIHVzZT0icmVxdWlyZWQiPgorICAgICAgICAgICAgPGFubm90YXRpb24+CisgICAgICAgICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KKyAgICAgICAgICAgICAgICAgIEEgZGlzcGxheSBuYW1lIHRvIGJlIHVzZWQgaW4gdGhlIGNvbWJvIGJveCBvZiBzZWxlY3RpbmcgdGhlIGNvbG9yIHByb3ZpZGVycy4KKyAgICAgICAgICAgICAgIDwvZG9jdW1lbnRhdGlvbj4KKyAgICAgICAgICAgIDwvYW5ub3RhdGlvbj4KKyAgICAgICAgIDwvYXR0cmlidXRlPgorICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJmYWN0b3J5IiB0eXBlPSJzdHJpbmciIHVzZT0icmVxdWlyZWQiPgorICAgICAgICAgICAgPGFubm90YXRpb24+CisgICAgICAgICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KKyAgICAgICAgICAgICAgICAgIFRoZSBmYWN0b3J5IGNsYXNzIG9mIGNvbG9yIHByb3ZpZGVyIGFkYXB0ZXJzLgorRmFjdG9yeSBjbGFzc2VzIG11c3QgaW1wbGVtZW50IHRoZSAmbHQ7Y29kZSZndDtvcmcuZWNsaXBzZS5zdGVtLnVpLmFkYXB0ZXJzLmNvbG9yLkNvbG9yUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSZsdDsvY29kZSZndDsgaW50ZXJmYWNlLgorICAgICAgICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgorICAgICAgICAgICAgICAgPGFwcGluZm8+CisgICAgICAgICAgICAgICAgICA8bWV0YS5hdHRyaWJ1dGUga2luZD0iamF2YSIgYmFzZWRPbj0iOm9yZy5lY2xpcHNlLnN0ZW0udWkuYWRhcHRlcnMuY29sb3IuQ29sb3JQcm92aWRlckFkYXB0ZXJGYWN0b3J5Ii8+CisgICAgICAgICAgICAgICA8L2FwcGluZm8+CisgICAgICAgICAgICA8L2Fubm90YXRpb24+CisgICAgICAgICA8L2F0dHJpYnV0ZT4KKyAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0icHJvdmlkZXIiIHR5cGU9InN0cmluZyIgdXNlPSJyZXF1aXJlZCI+CisgICAgICAgICAgICA8YW5ub3RhdGlvbj4KKyAgICAgICAgICAgICAgIDxkb2N1bWVudGF0aW9uPgorICAgICAgICAgICAgICAgICAgVGhlIGNvbG9yIHByb3ZpZGVyIGludGVyZmFjZS4KK1RoaXMgaW50ZXJmYWNlIG11c3QgZXh0ZW5kIHRoZSAmbHQ7Y29kZSZndDtvcmcuZWNsaXBzZS5zdGVtLnVpLmFkYXB0ZXJzLmNvbG9yLkNvbG9yUHJvdmlkZXImbHQ7L2NvZGUmZ3Q7IGludGVyZmFjZS4KKyAgICAgICAgICAgICAgIDwvZG9jdW1lbnRhdGlvbj4KKyAgICAgICAgICAgICAgIDxhcHBpbmZvPgorICAgICAgICAgICAgICAgICAgPG1ldGEuYXR0cmlidXRlIGtpbmQ9ImphdmEiIGJhc2VkT249IjpvcmcuZWNsaXBzZS5zdGVtLnVpLmFkYXB0ZXJzLmNvbG9yLkNvbG9yUHJvdmlkZXIiLz4KKyAgICAgICAgICAgICAgIDwvYXBwaW5mbz4KKyAgICAgICAgICAgIDwvYW5ub3RhdGlvbj4KKyAgICAgICAgIDwvYXR0cmlidXRlPgorICAgICAgPC9jb21wbGV4VHlwZT4KKyAgIDwvZWxlbWVudD4KKworCisgICA8YW5ub3RhdGlvbj4KKyAgICAgIDxhcHBpbmZvPgorICAgICAgICAgPG1ldGEuc2VjdGlvbiB0eXBlPSJleGFtcGxlcyIvPgorICAgICAgPC9hcHBpbmZvPgorICAgICAgPGRvY3VtZW50YXRpb24+CisgICAgICAgICBUaGUgZm9sbG93aW5nIGlzIGEgc2FtcGxlIHVzYWdlIG9mIHRoZSBjb2xvciBwcm92aWRlciBleHRlbnNpb24gcG9pbnQ6CisgICAgICAgICAKKyZsdDtleHRlbnNpb24KKyAgICAgICAgcG9pbnQ9JnF1b3Q7b3JnLmVjbGlwc2Uuc3RlbS51aS5jb2xvcnByb3ZpZGVycyZxdW90OyZndDsKKyAgICAgJmx0O2NvbG9wcm92aWRlcgorICAgICAgICAgICBmYWN0b3J5PSZxdW90O29yZy5lY2xpcHNlLnN0ZW0udWkuYWRhcHRlcnMuY29sb3IuU0VJUlJlbGF0aXZlVmFsdWVDb2xvclByb3ZpZGVyQWRhcHRlckZhY3RvcnkmcXVvdDsKKyAgICAgICAgICAgbmFtZT0mcXVvdDsmYW1wO3F1b3Q7UmFpbmJvdyZhbXA7cXVvdDsgUmVsYXRpdmUgVmFsdWVzJnF1b3Q7CisgICAgICAgICAgIHByb3ZpZGVyPSZxdW90O29yZy5lY2xpcHNlLnN0ZW0udWkuYWRhcHRlcnMuY29sb3IuU0VJUlJlbGF0aXZlVmFsdWVDb2xvclByb3ZpZGVyJnF1b3Q7Jmd0OworICAgICAmbHQ7L2NvbG9wcm92aWRlciZndDsKKyZsdDsvZXh0ZW5zaW9uJmd0OworICAgICAgPC9kb2N1bWVudGF0aW9uPgorICAgPC9hbm5vdGF0aW9uPgorCisgICA8YW5ub3RhdGlvbj4KKyAgICAgIDxhcHBpbmZvPgorICAgICAgICAgPG1ldGEuc2VjdGlvbiB0eXBlPSJhcGlpbmZvIi8+CisgICAgICA8L2FwcGluZm8+CisgICAgICA8ZG9jdW1lbnRhdGlvbj4KKyAgICAgICAgIFRoZSBzdXBwbGllZCBmYWN0b3J5IGNsYXNzIG11c3QgaW1wbGVtZW50IHRoZSAmbHQ7Y29kZSZndDtvcmcuZWNsaXBzZS5zdGVtLnVpLmFkYXB0ZXJzLmNvbG9yLkNvbG9yUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSZsdDsvY29kZSZndDsgaW50ZXJmYWNlLgorCitUaGUgc3VwcGxpZWQgY29sb3IgcHJvdmlkZXIgaW50ZXJmYWNlIG11c3QgZXh0ZW5kIHRoZSAmbHQ7Y29kZSZndDtvcmcuZWNsaXBzZS5zdGVtLnVpLmFkYXB0ZXJzLmNvbG9yLkNvbG9yUHJvdmlkZXImbHQ7L2NvZGUmZ3Q7IGludGVyZmFjZS4KKyAgICAgIDwvZG9jdW1lbnRhdGlvbj4KKyAgIDwvYW5ub3RhdGlvbj4KKworCisKKzwvc2NoZW1hPgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NwbGFzaC5ibXAgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3BsYXNoLmJtcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMTVlZmIyCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NwbGFzaC5ibXAKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvY29tbW9uL3ByZXNlbnRhdGlvbi9Db21tb25BY3Rpb25CYXJDb250cmlidXRvci5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvY29tbW9uL3ByZXNlbnRhdGlvbi9Db21tb25BY3Rpb25CYXJDb250cmlidXRvci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM1MDMwMzIKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9jb21tb24vcHJlc2VudGF0aW9uL0NvbW1vbkFjdGlvbkJhckNvbnRyaWJ1dG9yLmphdmEKQEAgLTAsMCArMSw0MzAgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5wcmVzZW50YXRpb247CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udWkudmlld2VyLklWaWV3ZXJQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5kb21haW4uRWRpdGluZ0RvbWFpbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5kb21haW4uSUVkaXRpbmdEb21haW5Qcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5hY3Rpb24uQ29udHJvbEFjdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5hY3Rpb24uQ3JlYXRlQ2hpbGRBY3Rpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkuYWN0aW9uLkNyZWF0ZVNpYmxpbmdBY3Rpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkuYWN0aW9uLkVkaXRpbmdEb21haW5BY3Rpb25CYXJDb250cmlidXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5hY3Rpb24uTG9hZFJlc291cmNlQWN0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmFjdGlvbi5WYWxpZGF0ZUFjdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uQWN0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5BY3Rpb25Db250cmlidXRpb25JdGVtOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JQWN0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JQ29udHJpYnV0aW9uSXRlbTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSUNvbnRyaWJ1dGlvbk1hbmFnZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklNZW51TGlzdGVuZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklNZW51TWFuYWdlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSVRvb2xCYXJNYW5hZ2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5NZW51TWFuYWdlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uU2VwYXJhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5TdWJDb250cmlidXRpb25JdGVtOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU3RydWN0dXJlZFNlbGVjdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlNlbGVjdGlvbkNoYW5nZWRFdmVudDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlZpZXdlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5JRWRpdG9yUGFydDsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5QYXJ0SW5pdEV4Y2VwdGlvbjsKKworLyoqCisgKiBUaGlzIGlzIHRoZSBhY3Rpb24gYmFyIGNvbnRyaWJ1dG9yIGZvciB0aGUgQ29tbW9uIG1vZGVsIGVkaXRvci4KKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBnZW5lcmF0ZWQKKyAqLworQFN1cHByZXNzV2FybmluZ3MoImFsbCIpCitwdWJsaWMgY2xhc3MgQ29tbW9uQWN0aW9uQmFyQ29udHJpYnV0b3IKKwlleHRlbmRzIEVkaXRpbmdEb21haW5BY3Rpb25CYXJDb250cmlidXRvcgorCWltcGxlbWVudHMgSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lciB7CisJLyoqCisJICogVGhpcyBrZWVwcyB0cmFjayBvZiB0aGUgYWN0aXZlIGVkaXRvci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgSUVkaXRvclBhcnQgYWN0aXZlRWRpdG9yUGFydDsKKworCS8qKgorCSAqIFRoaXMga2VlcHMgdHJhY2sgb2YgdGhlIGN1cnJlbnQgc2VsZWN0aW9uIHByb3ZpZGVyLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBJU2VsZWN0aW9uUHJvdmlkZXIgc2VsZWN0aW9uUHJvdmlkZXI7CisKKwkvKioKKwkgKiBUaGlzIGFjdGlvbiBvcGVucyB0aGUgUHJvcGVydGllcyB2aWV3LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBJQWN0aW9uIHNob3dQcm9wZXJ0aWVzVmlld0FjdGlvbiA9CisJCW5ldyBBY3Rpb24oQ29yZUVkaXRvclBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoIl9VSV9TaG93UHJvcGVydGllc1ZpZXdfbWVudV9pdGVtIikpIC8vJE5PTi1OTFMtMSQKKwkJeworCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgdm9pZCBydW4oKSB7CisJCQkJdHJ5IHsKKwkJCQkJZ2V0UGFnZSgpLnNob3dWaWV3KCJvcmcuZWNsaXBzZS51aS52aWV3cy5Qcm9wZXJ0eVNoZWV0Iik7IC8vJE5PTi1OTFMtMSQKKwkJCQl9CisJCQkJY2F0Y2ggKFBhcnRJbml0RXhjZXB0aW9uIGV4Y2VwdGlvbikgeworCQkJCQlDb3JlRWRpdG9yUGx1Z2luLklOU1RBTkNFLmxvZyhleGNlcHRpb24pOworCQkJCX0KKwkJCX0KKwkJfTsKKworCS8qKgorCSAqIFRoaXMgYWN0aW9uIHJlZnJlc2hlcyB0aGUgdmlld2VyIG9mIHRoZSBjdXJyZW50IGVkaXRvciBpZiB0aGUgZWRpdG9yCisJICogaW1wbGVtZW50cyB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51aS52aWV3ZXIuSVZpZXdlclByb3ZpZGVyfS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgSUFjdGlvbiByZWZyZXNoVmlld2VyQWN0aW9uID0KKwkJbmV3IEFjdGlvbihDb3JlRWRpdG9yUGx1Z2luLklOU1RBTkNFLmdldFN0cmluZygiX1VJX1JlZnJlc2hWaWV3ZXJfbWVudV9pdGVtIikpIC8vJE5PTi1OTFMtMSQKKwkJeworCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgYm9vbGVhbiBpc0VuYWJsZWQoKSB7CisJCQkJcmV0dXJuIGFjdGl2ZUVkaXRvclBhcnQgaW5zdGFuY2VvZiBJVmlld2VyUHJvdmlkZXI7CisJCQl9CisKKwkJCUBPdmVycmlkZQorCQkJcHVibGljIHZvaWQgcnVuKCkgeworCQkJCWlmIChhY3RpdmVFZGl0b3JQYXJ0IGluc3RhbmNlb2YgSVZpZXdlclByb3ZpZGVyKSB7CisJCQkJCVZpZXdlciB2aWV3ZXIgPSAoKElWaWV3ZXJQcm92aWRlcilhY3RpdmVFZGl0b3JQYXJ0KS5nZXRWaWV3ZXIoKTsKKwkJCQkJaWYgKHZpZXdlciAhPSBudWxsKSB7CisJCQkJCQl2aWV3ZXIucmVmcmVzaCgpOworCQkJCQl9CisJCQkJfQorCQkJfQorCQl9OworCisJLyoqCisJICogVGhpcyB3aWxsIGNvbnRhaW4gb25lIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5hY3Rpb24uQ3JlYXRlQ2hpbGRBY3Rpb259IGNvcnJlc3BvbmRpbmcgdG8gZWFjaCBkZXNjcmlwdG9yCisJICogZ2VuZXJhdGVkIGZvciB0aGUgY3VycmVudCBzZWxlY3Rpb24gYnkgdGhlIGl0ZW0gcHJvdmlkZXIuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIENvbGxlY3Rpb248SUFjdGlvbj4gY3JlYXRlQ2hpbGRBY3Rpb25zOworCisJLyoqCisJICogVGhpcyBpcyB0aGUgbWVudSBtYW5hZ2VyIGludG8gd2hpY2ggbWVudSBjb250cmlidXRpb24gaXRlbXMgc2hvdWxkIGJlIGFkZGVkIGZvciBDcmVhdGVDaGlsZCBhY3Rpb25zLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBJTWVudU1hbmFnZXIgY3JlYXRlQ2hpbGRNZW51TWFuYWdlcjsKKworCS8qKgorCSAqIFRoaXMgd2lsbCBjb250YWluIG9uZSB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkuYWN0aW9uLkNyZWF0ZVNpYmxpbmdBY3Rpb259IGNvcnJlc3BvbmRpbmcgdG8gZWFjaCBkZXNjcmlwdG9yCisJICogZ2VuZXJhdGVkIGZvciB0aGUgY3VycmVudCBzZWxlY3Rpb24gYnkgdGhlIGl0ZW0gcHJvdmlkZXIuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIENvbGxlY3Rpb248SUFjdGlvbj4gY3JlYXRlU2libGluZ0FjdGlvbnM7CisKKwkvKioKKwkgKiBUaGlzIGlzIHRoZSBtZW51IG1hbmFnZXIgaW50byB3aGljaCBtZW51IGNvbnRyaWJ1dGlvbiBpdGVtcyBzaG91bGQgYmUgYWRkZWQgZm9yIENyZWF0ZVNpYmxpbmcgYWN0aW9ucy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgSU1lbnVNYW5hZ2VyIGNyZWF0ZVNpYmxpbmdNZW51TWFuYWdlcjsKKworCS8qKgorCSAqIFRoaXMgY3JlYXRlcyBhbiBpbnN0YW5jZSBvZiB0aGUgY29udHJpYnV0b3IuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIENvbW1vbkFjdGlvbkJhckNvbnRyaWJ1dG9yKCkgeworCQlzdXBlcihBRERJVElPTlNfTEFTVF9TVFlMRSk7CisJCWxvYWRSZXNvdXJjZUFjdGlvbiA9IG5ldyBMb2FkUmVzb3VyY2VBY3Rpb24oKTsKKwkJdmFsaWRhdGVBY3Rpb24gPSBuZXcgVmFsaWRhdGVBY3Rpb24oKTsKKwkJY29udHJvbEFjdGlvbiA9IG5ldyBDb250cm9sQWN0aW9uKCk7CisJfQorCisJLyoqCisJICogVGhpcyBhZGRzIFNlcGFyYXRvcnMgZm9yIGVkaXRvciBhZGRpdGlvbnMgdG8gdGhlIHRvb2wgYmFyLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGNvbnRyaWJ1dGVUb1Rvb2xCYXIoSVRvb2xCYXJNYW5hZ2VyIHRvb2xCYXJNYW5hZ2VyKSB7CisJCXRvb2xCYXJNYW5hZ2VyLmFkZChuZXcgU2VwYXJhdG9yKCJjb21tb24tc2V0dGluZ3MiKSk7IC8vJE5PTi1OTFMtMSQKKwkJdG9vbEJhck1hbmFnZXIuYWRkKG5ldyBTZXBhcmF0b3IoImNvbW1vbi1hZGRpdGlvbnMiKSk7IC8vJE5PTi1OTFMtMSQKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFkZHMgdG8gdGhlIG1lbnUgYmFyIGEgbWVudSBhbmQgc29tZSBzZXBhcmF0b3JzIGZvciBlZGl0b3IgYWRkaXRpb25zLAorCSAqIGFzIHdlbGwgYXMgdGhlIHN1Yi1tZW51cyBmb3Igb2JqZWN0IGNyZWF0aW9uIGl0ZW1zLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGNvbnRyaWJ1dGVUb01lbnUoSU1lbnVNYW5hZ2VyIG1lbnVNYW5hZ2VyKSB7CisJCXN1cGVyLmNvbnRyaWJ1dGVUb01lbnUobWVudU1hbmFnZXIpOworCisJCUlNZW51TWFuYWdlciBzdWJtZW51TWFuYWdlciA9IG5ldyBNZW51TWFuYWdlcihDb3JlRWRpdG9yUGx1Z2luLklOU1RBTkNFLmdldFN0cmluZygiX1VJX0NvbW1vbkVkaXRvcl9tZW51IiksICJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uTWVudUlEIik7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAorCQltZW51TWFuYWdlci5pbnNlcnRBZnRlcigiYWRkaXRpb25zIiwgc3VibWVudU1hbmFnZXIpOyAvLyROT04tTkxTLTEkCisJCXN1Ym1lbnVNYW5hZ2VyLmFkZChuZXcgU2VwYXJhdG9yKCJzZXR0aW5ncyIpKTsgLy8kTk9OLU5MUy0xJAorCQlzdWJtZW51TWFuYWdlci5hZGQobmV3IFNlcGFyYXRvcigiYWN0aW9ucyIpKTsgLy8kTk9OLU5MUy0xJAorCQlzdWJtZW51TWFuYWdlci5hZGQobmV3IFNlcGFyYXRvcigiYWRkaXRpb25zIikpOyAvLyROT04tTkxTLTEkCisJCXN1Ym1lbnVNYW5hZ2VyLmFkZChuZXcgU2VwYXJhdG9yKCJhZGRpdGlvbnMtZW5kIikpOyAvLyROT04tTkxTLTEkCisKKwkJLy8gUHJlcGFyZSBmb3IgQ3JlYXRlQ2hpbGQgaXRlbSBhZGRpdGlvbiBvciByZW1vdmFsLgorCQkvLworCQljcmVhdGVDaGlsZE1lbnVNYW5hZ2VyID0gbmV3IE1lbnVNYW5hZ2VyKENvcmVFZGl0b3JQbHVnaW4uSU5TVEFOQ0UuZ2V0U3RyaW5nKCJfVUlfQ3JlYXRlQ2hpbGRfbWVudV9pdGVtIikpOyAvLyROT04tTkxTLTEkCisJCXN1Ym1lbnVNYW5hZ2VyLmluc2VydEJlZm9yZSgiYWRkaXRpb25zIiwgY3JlYXRlQ2hpbGRNZW51TWFuYWdlcik7IC8vJE5PTi1OTFMtMSQKKworCQkvLyBQcmVwYXJlIGZvciBDcmVhdGVTaWJsaW5nIGl0ZW0gYWRkaXRpb24gb3IgcmVtb3ZhbC4KKwkJLy8KKwkJY3JlYXRlU2libGluZ01lbnVNYW5hZ2VyID0gbmV3IE1lbnVNYW5hZ2VyKENvcmVFZGl0b3JQbHVnaW4uSU5TVEFOQ0UuZ2V0U3RyaW5nKCJfVUlfQ3JlYXRlU2libGluZ19tZW51X2l0ZW0iKSk7IC8vJE5PTi1OTFMtMSQKKwkJc3VibWVudU1hbmFnZXIuaW5zZXJ0QmVmb3JlKCJhZGRpdGlvbnMiLCBjcmVhdGVTaWJsaW5nTWVudU1hbmFnZXIpOyAvLyROT04tTkxTLTEkCisKKwkJLy8gRm9yY2UgYW4gdXBkYXRlIGJlY2F1c2UgRWNsaXBzZSBoaWRlcyBlbXB0eSBtZW51cyBub3cuCisJCS8vCisJCXN1Ym1lbnVNYW5hZ2VyLmFkZE1lbnVMaXN0ZW5lcgorCQkJKG5ldyBJTWVudUxpc3RlbmVyKCkgeworCQkJCSBwdWJsaWMgdm9pZCBtZW51QWJvdXRUb1Nob3coSU1lbnVNYW5hZ2VyIG1lbnVNYW5hZ2VyKSB7CisJCQkJCSBtZW51TWFuYWdlci51cGRhdGVBbGwodHJ1ZSk7CisJCQkJIH0KKwkJCSB9KTsKKworCQlhZGRHbG9iYWxBY3Rpb25zKHN1Ym1lbnVNYW5hZ2VyKTsKKwl9CisKKwkvKioKKwkgKiBXaGVuIHRoZSBhY3RpdmUgZWRpdG9yIGNoYW5nZXMsIHRoaXMgcmVtZW1iZXJzIHRoZSBjaGFuZ2UgYW5kIHJlZ2lzdGVycyB3aXRoIGl0IGFzIGEgc2VsZWN0aW9uIHByb3ZpZGVyLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIHNldEFjdGl2ZUVkaXRvcihJRWRpdG9yUGFydCBwYXJ0KSB7CisJCXN1cGVyLnNldEFjdGl2ZUVkaXRvcihwYXJ0KTsKKwkJYWN0aXZlRWRpdG9yUGFydCA9IHBhcnQ7CisKKwkJLy8gU3dpdGNoIHRvIHRoZSBuZXcgc2VsZWN0aW9uIHByb3ZpZGVyLgorCQkvLworCQlpZiAoc2VsZWN0aW9uUHJvdmlkZXIgIT0gbnVsbCkgeworCQkJc2VsZWN0aW9uUHJvdmlkZXIucmVtb3ZlU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyKHRoaXMpOworCQl9CisJCWlmIChwYXJ0ID09IG51bGwpIHsKKwkJCXNlbGVjdGlvblByb3ZpZGVyID0gbnVsbDsKKwkJfQorCQllbHNlIHsKKwkJCXNlbGVjdGlvblByb3ZpZGVyID0gcGFydC5nZXRTaXRlKCkuZ2V0U2VsZWN0aW9uUHJvdmlkZXIoKTsKKwkJCXNlbGVjdGlvblByb3ZpZGVyLmFkZFNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcih0aGlzKTsKKworCQkJLy8gRmFrZSBhIHNlbGVjdGlvbiBjaGFuZ2VkIGV2ZW50IHRvIHVwZGF0ZSB0aGUgbWVudXMuCisJCQkvLworCQkJaWYgKHNlbGVjdGlvblByb3ZpZGVyLmdldFNlbGVjdGlvbigpICE9IG51bGwpIHsKKwkJCQlzZWxlY3Rpb25DaGFuZ2VkKG5ldyBTZWxlY3Rpb25DaGFuZ2VkRXZlbnQoc2VsZWN0aW9uUHJvdmlkZXIsIHNlbGVjdGlvblByb3ZpZGVyLmdldFNlbGVjdGlvbigpKSk7CisJCQl9CisJCX0KKwl9CisKKwkvKioKKwkgKiBUaGlzIGltcGxlbWVudHMge0BsaW5rIG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcn0sCisJICogaGFuZGxpbmcge0BsaW5rIG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuU2VsZWN0aW9uQ2hhbmdlZEV2ZW50fXMgYnkgcXVlcnlpbmcgZm9yIHRoZSBjaGlsZHJlbiBhbmQgc2libGluZ3MKKwkgKiB0aGF0IGNhbiBiZSBhZGRlZCB0byB0aGUgc2VsZWN0ZWQgb2JqZWN0IGFuZCB1cGRhdGluZyB0aGUgbWVudXMgYWNjb3JkaW5nbHkuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgc2VsZWN0aW9uQ2hhbmdlZChTZWxlY3Rpb25DaGFuZ2VkRXZlbnQgZXZlbnQpIHsKKwkJLy8gUmVtb3ZlIGFueSBtZW51IGl0ZW1zIGZvciBvbGQgc2VsZWN0aW9uLgorCQkvLworCQlpZiAoY3JlYXRlQ2hpbGRNZW51TWFuYWdlciAhPSBudWxsKSB7CisJCQlkZXBvcHVsYXRlTWFuYWdlcihjcmVhdGVDaGlsZE1lbnVNYW5hZ2VyLCBjcmVhdGVDaGlsZEFjdGlvbnMpOworCQl9CisJCWlmIChjcmVhdGVTaWJsaW5nTWVudU1hbmFnZXIgIT0gbnVsbCkgeworCQkJZGVwb3B1bGF0ZU1hbmFnZXIoY3JlYXRlU2libGluZ01lbnVNYW5hZ2VyLCBjcmVhdGVTaWJsaW5nQWN0aW9ucyk7CisJCX0KKworCQkvLyBRdWVyeSB0aGUgbmV3IHNlbGVjdGlvbiBmb3IgYXBwcm9wcmlhdGUgbmV3IGNoaWxkL3NpYmxpbmcgZGVzY3JpcHRvcnMKKwkJLy8KKwkJQ29sbGVjdGlvbjw/PiBuZXdDaGlsZERlc2NyaXB0b3JzID0gbnVsbDsKKwkJQ29sbGVjdGlvbjw/PiBuZXdTaWJsaW5nRGVzY3JpcHRvcnMgPSBudWxsOworCisJCUlTZWxlY3Rpb24gc2VsZWN0aW9uID0gZXZlbnQuZ2V0U2VsZWN0aW9uKCk7CisJCWlmIChzZWxlY3Rpb24gaW5zdGFuY2VvZiBJU3RydWN0dXJlZFNlbGVjdGlvbiAmJiAoKElTdHJ1Y3R1cmVkU2VsZWN0aW9uKXNlbGVjdGlvbikuc2l6ZSgpID09IDEpIHsKKwkJCU9iamVjdCBvYmplY3QgPSAoKElTdHJ1Y3R1cmVkU2VsZWN0aW9uKXNlbGVjdGlvbikuZ2V0Rmlyc3RFbGVtZW50KCk7CisKKwkJCUVkaXRpbmdEb21haW4gZG9tYWluID0gKChJRWRpdGluZ0RvbWFpblByb3ZpZGVyKWFjdGl2ZUVkaXRvclBhcnQpLmdldEVkaXRpbmdEb21haW4oKTsKKworCQkJbmV3Q2hpbGREZXNjcmlwdG9ycyA9IGRvbWFpbi5nZXROZXdDaGlsZERlc2NyaXB0b3JzKG9iamVjdCwgbnVsbCk7CisJCQluZXdTaWJsaW5nRGVzY3JpcHRvcnMgPSBkb21haW4uZ2V0TmV3Q2hpbGREZXNjcmlwdG9ycyhudWxsLCBvYmplY3QpOworCQl9CisKKwkJLy8gR2VuZXJhdGUgYWN0aW9ucyBmb3Igc2VsZWN0aW9uOyBwb3B1bGF0ZSBhbmQgcmVkcmF3IHRoZSBtZW51cy4KKwkJLy8KKwkJY3JlYXRlQ2hpbGRBY3Rpb25zID0gZ2VuZXJhdGVDcmVhdGVDaGlsZEFjdGlvbnMobmV3Q2hpbGREZXNjcmlwdG9ycywgc2VsZWN0aW9uKTsKKwkJY3JlYXRlU2libGluZ0FjdGlvbnMgPSBnZW5lcmF0ZUNyZWF0ZVNpYmxpbmdBY3Rpb25zKG5ld1NpYmxpbmdEZXNjcmlwdG9ycywgc2VsZWN0aW9uKTsKKworCQlpZiAoY3JlYXRlQ2hpbGRNZW51TWFuYWdlciAhPSBudWxsKSB7CisJCQlwb3B1bGF0ZU1hbmFnZXIoY3JlYXRlQ2hpbGRNZW51TWFuYWdlciwgY3JlYXRlQ2hpbGRBY3Rpb25zLCBudWxsKTsKKwkJCWNyZWF0ZUNoaWxkTWVudU1hbmFnZXIudXBkYXRlKHRydWUpOworCQl9CisJCWlmIChjcmVhdGVTaWJsaW5nTWVudU1hbmFnZXIgIT0gbnVsbCkgeworCQkJcG9wdWxhdGVNYW5hZ2VyKGNyZWF0ZVNpYmxpbmdNZW51TWFuYWdlciwgY3JlYXRlU2libGluZ0FjdGlvbnMsIG51bGwpOworCQkJY3JlYXRlU2libGluZ01lbnVNYW5hZ2VyLnVwZGF0ZSh0cnVlKTsKKwkJfQorCX0KKworCS8qKgorCSAqIFRoaXMgZ2VuZXJhdGVzIGEge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmFjdGlvbi5DcmVhdGVDaGlsZEFjdGlvbn0gZm9yIGVhY2ggb2JqZWN0IGluIDxjb2RlPmRlc2NyaXB0b3JzPC9jb2RlPiwKKwkgKiBhbmQgcmV0dXJucyB0aGUgY29sbGVjdGlvbiBvZiB0aGVzZSBhY3Rpb25zLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBDb2xsZWN0aW9uPElBY3Rpb24+IGdlbmVyYXRlQ3JlYXRlQ2hpbGRBY3Rpb25zKENvbGxlY3Rpb248Pz4gZGVzY3JpcHRvcnMsIElTZWxlY3Rpb24gc2VsZWN0aW9uKSB7CisJCUNvbGxlY3Rpb248SUFjdGlvbj4gYWN0aW9ucyA9IG5ldyBBcnJheUxpc3Q8SUFjdGlvbj4oKTsKKwkJaWYgKGRlc2NyaXB0b3JzICE9IG51bGwpIHsKKwkJCWZvciAoT2JqZWN0IGRlc2NyaXB0b3IgOiBkZXNjcmlwdG9ycykgeworCQkJCWFjdGlvbnMuYWRkKG5ldyBDcmVhdGVDaGlsZEFjdGlvbihhY3RpdmVFZGl0b3JQYXJ0LCBzZWxlY3Rpb24sIGRlc2NyaXB0b3IpKTsKKwkJCX0KKwkJfQorCQlyZXR1cm4gYWN0aW9uczsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGdlbmVyYXRlcyBhIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5hY3Rpb24uQ3JlYXRlU2libGluZ0FjdGlvbn0gZm9yIGVhY2ggb2JqZWN0IGluIDxjb2RlPmRlc2NyaXB0b3JzPC9jb2RlPiwKKwkgKiBhbmQgcmV0dXJucyB0aGUgY29sbGVjdGlvbiBvZiB0aGVzZSBhY3Rpb25zLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBDb2xsZWN0aW9uPElBY3Rpb24+IGdlbmVyYXRlQ3JlYXRlU2libGluZ0FjdGlvbnMoQ29sbGVjdGlvbjw/PiBkZXNjcmlwdG9ycywgSVNlbGVjdGlvbiBzZWxlY3Rpb24pIHsKKwkJQ29sbGVjdGlvbjxJQWN0aW9uPiBhY3Rpb25zID0gbmV3IEFycmF5TGlzdDxJQWN0aW9uPigpOworCQlpZiAoZGVzY3JpcHRvcnMgIT0gbnVsbCkgeworCQkJZm9yIChPYmplY3QgZGVzY3JpcHRvciA6IGRlc2NyaXB0b3JzKSB7CisJCQkJYWN0aW9ucy5hZGQobmV3IENyZWF0ZVNpYmxpbmdBY3Rpb24oYWN0aXZlRWRpdG9yUGFydCwgc2VsZWN0aW9uLCBkZXNjcmlwdG9yKSk7CisJCQl9CisJCX0KKwkJcmV0dXJuIGFjdGlvbnM7CisJfQorCisJLyoqCisJICogVGhpcyBwb3B1bGF0ZXMgdGhlIHNwZWNpZmllZCA8Y29kZT5tYW5hZ2VyPC9jb2RlPiB3aXRoIHtAbGluayBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uQWN0aW9uQ29udHJpYnV0aW9uSXRlbX1zCisJICogYmFzZWQgb24gdGhlIHtAbGluayBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSUFjdGlvbn1zIGNvbnRhaW5lZCBpbiB0aGUgPGNvZGU+YWN0aW9uczwvY29kZT4gY29sbGVjdGlvbiwKKwkgKiBieSBpbnNlcnRpbmcgdGhlbSBiZWZvcmUgdGhlIHNwZWNpZmllZCBjb250cmlidXRpb24gaXRlbSA8Y29kZT5jb250cmlidXRpb25JRDwvY29kZT4uCisJICogSWYgPGNvZGU+Y29udHJpYnV0aW9uSUQ8L2NvZGU+IGlzIDxjb2RlPm51bGw8L2NvZGU+LCB0aGV5IGFyZSBzaW1wbHkgYWRkZWQuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgcG9wdWxhdGVNYW5hZ2VyKElDb250cmlidXRpb25NYW5hZ2VyIG1hbmFnZXIsIENvbGxlY3Rpb248PyBleHRlbmRzIElBY3Rpb24+IGFjdGlvbnMsIFN0cmluZyBjb250cmlidXRpb25JRCkgeworCQlpZiAoYWN0aW9ucyAhPSBudWxsKSB7CisJCQlmb3IgKElBY3Rpb24gYWN0aW9uIDogYWN0aW9ucykgeworCQkJCWlmIChjb250cmlidXRpb25JRCAhPSBudWxsKSB7CisJCQkJCW1hbmFnZXIuaW5zZXJ0QmVmb3JlKGNvbnRyaWJ1dGlvbklELCBhY3Rpb24pOworCQkJCX0KKwkJCQllbHNlIHsKKwkJCQkJbWFuYWdlci5hZGQoYWN0aW9uKTsKKwkJCQl9CisJCQl9CisJCX0KKwl9CisJCQorCS8qKgorCSAqIFRoaXMgcmVtb3ZlcyBmcm9tIHRoZSBzcGVjaWZpZWQgPGNvZGU+bWFuYWdlcjwvY29kZT4gYWxsIHtAbGluayBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uQWN0aW9uQ29udHJpYnV0aW9uSXRlbX1zCisJICogYmFzZWQgb24gdGhlIHtAbGluayBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSUFjdGlvbn1zIGNvbnRhaW5lZCBpbiB0aGUgPGNvZGU+YWN0aW9uczwvY29kZT4gY29sbGVjdGlvbi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBkZXBvcHVsYXRlTWFuYWdlcihJQ29udHJpYnV0aW9uTWFuYWdlciBtYW5hZ2VyLCBDb2xsZWN0aW9uPD8gZXh0ZW5kcyBJQWN0aW9uPiBhY3Rpb25zKSB7CisJCWlmIChhY3Rpb25zICE9IG51bGwpIHsKKwkJCUlDb250cmlidXRpb25JdGVtW10gaXRlbXMgPSBtYW5hZ2VyLmdldEl0ZW1zKCk7CisJCQlmb3IgKGludCBpID0gMDsgaSA8IGl0ZW1zLmxlbmd0aDsgaSsrKSB7CisJCQkJLy8gTG9vayBpbnRvIFN1YkNvbnRyaWJ1dGlvbkl0ZW1zCisJCQkJLy8KKwkJCQlJQ29udHJpYnV0aW9uSXRlbSBjb250cmlidXRpb25JdGVtID0gaXRlbXNbaV07CisJCQkJd2hpbGUgKGNvbnRyaWJ1dGlvbkl0ZW0gaW5zdGFuY2VvZiBTdWJDb250cmlidXRpb25JdGVtKSB7CisJCQkJCWNvbnRyaWJ1dGlvbkl0ZW0gPSAoKFN1YkNvbnRyaWJ1dGlvbkl0ZW0pY29udHJpYnV0aW9uSXRlbSkuZ2V0SW5uZXJJdGVtKCk7CisJCQkJfQorCisJCQkJLy8gRGVsZXRlIHRoZSBBY3Rpb25Db250cmlidXRpb25JdGVtcyB3aXRoIG1hdGNoaW5nIGFjdGlvbi4KKwkJCQkvLworCQkJCWlmIChjb250cmlidXRpb25JdGVtIGluc3RhbmNlb2YgQWN0aW9uQ29udHJpYnV0aW9uSXRlbSkgeworCQkJCQlJQWN0aW9uIGFjdGlvbiA9ICgoQWN0aW9uQ29udHJpYnV0aW9uSXRlbSljb250cmlidXRpb25JdGVtKS5nZXRBY3Rpb24oKTsKKwkJCQkJaWYgKGFjdGlvbnMuY29udGFpbnMoYWN0aW9uKSkgeworCQkJCQkJbWFuYWdlci5yZW1vdmUoY29udHJpYnV0aW9uSXRlbSk7CisJCQkJCX0KKwkJCQl9CisJCQl9CisJCX0KKwl9CisKKwkvKioKKwkgKiBUaGlzIHBvcHVsYXRlcyB0aGUgcG9wLXVwIG1lbnUgYmVmb3JlIGl0IGFwcGVhcnMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgbWVudUFib3V0VG9TaG93KElNZW51TWFuYWdlciBtZW51TWFuYWdlcikgeworCQlzdXBlci5tZW51QWJvdXRUb1Nob3cobWVudU1hbmFnZXIpOworCQlNZW51TWFuYWdlciBzdWJtZW51TWFuYWdlciA9IG51bGw7CisKKwkJc3VibWVudU1hbmFnZXIgPSBuZXcgTWVudU1hbmFnZXIoQ29yZUVkaXRvclBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoIl9VSV9DcmVhdGVDaGlsZF9tZW51X2l0ZW0iKSk7IC8vJE5PTi1OTFMtMSQKKwkJcG9wdWxhdGVNYW5hZ2VyKHN1Ym1lbnVNYW5hZ2VyLCBjcmVhdGVDaGlsZEFjdGlvbnMsIG51bGwpOworCQltZW51TWFuYWdlci5pbnNlcnRCZWZvcmUoImVkaXQiLCBzdWJtZW51TWFuYWdlcik7IC8vJE5PTi1OTFMtMSQKKworCQlzdWJtZW51TWFuYWdlciA9IG5ldyBNZW51TWFuYWdlcihDb3JlRWRpdG9yUGx1Z2luLklOU1RBTkNFLmdldFN0cmluZygiX1VJX0NyZWF0ZVNpYmxpbmdfbWVudV9pdGVtIikpOyAvLyROT04tTkxTLTEkCisJCXBvcHVsYXRlTWFuYWdlcihzdWJtZW51TWFuYWdlciwgY3JlYXRlU2libGluZ0FjdGlvbnMsIG51bGwpOworCQltZW51TWFuYWdlci5pbnNlcnRCZWZvcmUoImVkaXQiLCBzdWJtZW51TWFuYWdlcik7IC8vJE5PTi1OTFMtMSQKKwl9CisKKwkvKioKKwkgKiBUaGlzIGluc2VydHMgZ2xvYmFsIGFjdGlvbnMgYmVmb3JlIHRoZSAiYWRkaXRpb25zLWVuZCIgc2VwYXJhdG9yLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIGFkZEdsb2JhbEFjdGlvbnMoSU1lbnVNYW5hZ2VyIG1lbnVNYW5hZ2VyKSB7CisJCW1lbnVNYW5hZ2VyLmluc2VydEFmdGVyKCJhZGRpdGlvbnMtZW5kIiwgbmV3IFNlcGFyYXRvcigidWktYWN0aW9ucyIpKTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCisJCW1lbnVNYW5hZ2VyLmluc2VydEFmdGVyKCJ1aS1hY3Rpb25zIiwgc2hvd1Byb3BlcnRpZXNWaWV3QWN0aW9uKTsgLy8kTk9OLU5MUy0xJAorCisJCXJlZnJlc2hWaWV3ZXJBY3Rpb24uc2V0RW5hYmxlZChyZWZyZXNoVmlld2VyQWN0aW9uLmlzRW5hYmxlZCgpKTsJCQorCQltZW51TWFuYWdlci5pbnNlcnRBZnRlcigidWktYWN0aW9ucyIsIHJlZnJlc2hWaWV3ZXJBY3Rpb24pOyAvLyROT04tTkxTLTEkCisKKwkJc3VwZXIuYWRkR2xvYmFsQWN0aW9ucyhtZW51TWFuYWdlcik7CisJfQorCisJLyoqCisJICogVGhpcyBlbnN1cmVzIHRoYXQgYSBkZWxldGUgYWN0aW9uIHdpbGwgY2xlYW4gdXAgYWxsIHJlZmVyZW5jZXMgdG8gZGVsZXRlZCBvYmplY3RzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCBib29sZWFuIHJlbW92ZUFsbFJlZmVyZW5jZXNPbkRlbGV0ZSgpIHsKKwkJcmV0dXJuIHRydWU7CisJfQorCit9CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9jb21tb24vcHJlc2VudGF0aW9uL0NvbW1vbkVkaXRvci5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvY29tbW9uL3ByZXNlbnRhdGlvbi9Db21tb25FZGl0b3IuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YzBhNTI1Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvY29tbW9uL3ByZXNlbnRhdGlvbi9Db21tb25FZGl0b3IuamF2YQpAQCAtMCwwICsxLDE1MTkgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5wcmVzZW50YXRpb247CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtOworaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7CitpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247CitpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb25zOworaW1wb3J0IGphdmEudXRpbC5FdmVudE9iamVjdDsKK2ltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKK2ltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7CitpbXBvcnQgamF2YS51dGlsLkxpbmtlZEhhc2hNYXA7CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CitpbXBvcnQgamF2YS51dGlsLk1hcDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklGaWxlOworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklNYXJrZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVJlc291cmNlOworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklSZXNvdXJjZUNoYW5nZUV2ZW50OworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklSZXNvdXJjZUNoYW5nZUxpc3RlbmVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklSZXNvdXJjZURlbHRhOworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklSZXNvdXJjZURlbHRhVmlzaXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5SZXNvdXJjZXNQbHVnaW47CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkNvcmVFeGNlcHRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQYXRoOworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUHJvZ3Jlc3NNb25pdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5OdWxsUHJvZ3Jlc3NNb25pdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24uY29tbWFuZC5CYXNpY0NvbW1hbmRTdGFjazsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLmNvbW1hbmQuQ29tbWFuZDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLmNvbW1hbmQuQ29tbWFuZFN0YWNrOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24uY29tbWFuZC5Db21tYW5kU3RhY2tMaXN0ZW5lcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5BZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51aS5NYXJrZXJIZWxwZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51aS5lZGl0b3IuUHJvYmxlbUVkaXRvclBhcnQ7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51aS52aWV3ZXIuSVZpZXdlclByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5CYXNpY0RpYWdub3N0aWM7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLkRpYWdub3N0aWM7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlVSSTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRVZhbGlkYXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUucHJvdmlkZXIuRWNvcmVJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUucmVzb3VyY2UuUmVzb3VyY2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnJlc291cmNlLlJlc291cmNlU2V0OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS51dGlsLkVDb250ZW50QWRhcHRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUudXRpbC5FY29yZVV0aWw7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQuZG9tYWluLkFkYXB0ZXJGYWN0b3J5RWRpdGluZ0RvbWFpbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5kb21haW4uRWRpdGluZ0RvbWFpbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5kb21haW4uSUVkaXRpbmdEb21haW5Qcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5BZGFwdGVyRmFjdG9yeUl0ZW1EZWxlZ2F0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuQ29tcG9zZWRBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5SZWZsZWN0aXZlSXRlbVByb3ZpZGVyQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIucmVzb3VyY2UuUmVzb3VyY2VJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5hY3Rpb24uRWRpdGluZ0RvbWFpbkFjdGlvbkJhckNvbnRyaWJ1dG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmNlbGxlZGl0b3IuQWRhcHRlckZhY3RvcnlUcmVlRWRpdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmRuZC5FZGl0aW5nRG9tYWluVmlld2VyRHJvcEFkYXB0ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkuZG5kLkxvY2FsVHJhbnNmZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkuZG5kLlZpZXdlckRyYWdBZGFwdGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLnByb3ZpZGVyLkFkYXB0ZXJGYWN0b3J5Q29udGVudFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLnByb3ZpZGVyLkFkYXB0ZXJGYWN0b3J5TGFiZWxQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5wcm92aWRlci5VbndyYXBwaW5nU2VsZWN0aW9uUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkudXRpbC5FZGl0VUlNYXJrZXJIZWxwZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkudXRpbC5FZGl0VUlVdGlsOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLnZpZXcuRXh0ZW5kZWRQcm9wZXJ0eVNoZWV0UGFnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSU1lbnVMaXN0ZW5lcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSU1lbnVNYW5hZ2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JU3RhdHVzTGluZU1hbmFnZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklUb29sQmFyTWFuYWdlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uTWVudU1hbmFnZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLlNlcGFyYXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5kaWFsb2dzLk1lc3NhZ2VEaWFsb2c7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuZGlhbG9ncy5Qcm9ncmVzc01vbml0b3JEaWFsb2c7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb25Qcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTdHJ1Y3R1cmVkU2VsZWN0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuU2VsZWN0aW9uQ2hhbmdlZEV2ZW50OworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuU3RydWN0dXJlZFNlbGVjdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlN0cnVjdHVyZWRWaWV3ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5UcmVlVmlld2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuVmlld2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5TVEVNWE1JUmVzb3VyY2VGYWN0b3J5SW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLnByb3ZpZGVyLkNvbW1vbkl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5leHBlcmltZW50LnByb3ZpZGVyLkV4cGVyaW1lbnRJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGgucHJvdmlkZXIuR3JhcGhJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubG9nZ2VyLnByb3ZpZGVyLkxvZ2dlckl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5wcm92aWRlci5Nb2RlbEl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5wcm92aWRlci5Nb2RpZmllckl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUucHJvdmlkZXIuUHJlZGljYXRlSXRlbVByb3ZpZGVyQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNjZW5hcmlvLnByb3ZpZGVyLlNjZW5hcmlvSXRlbVByb3ZpZGVyQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNlcXVlbmNlci5wcm92aWRlci5TZXF1ZW5jZXJJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc29sdmVyLnByb3ZpZGVyLlNvbHZlckl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS50cmlnZ2VyLnByb3ZpZGVyLlRyaWdnZXJJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuU1dUOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5jdXN0b20uQ1RhYkZvbGRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZG5kLkRORDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZG5kLlRyYW5zZmVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuQ29udHJvbEFkYXB0ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5Db250cm9sRXZlbnQ7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmdyYXBoaWNzLlBvaW50OworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5NZW51OworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlRyZWU7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuSUFjdGlvbkJhcnM7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuSUVkaXRvcklucHV0OworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklFZGl0b3JQYXJ0OworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklFZGl0b3JTaXRlOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklQYXJ0TGlzdGVuZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaFBhcnQ7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuUGFydEluaXRFeGNlcHRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuYWN0aW9ucy5Xb3Jrc3BhY2VNb2RpZnlPcGVyYXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuZGlhbG9ncy5TYXZlQXNEaWFsb2c7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuaWRlLklHb3RvTWFya2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLnBhcnQuRmlsZUVkaXRvcklucHV0OworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLnBhcnQuTXVsdGlQYWdlRWRpdG9yUGFydDsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS52aWV3cy5jb250ZW50b3V0bGluZS5Db250ZW50T3V0bGluZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS52aWV3cy5jb250ZW50b3V0bGluZS5Db250ZW50T3V0bGluZVBhZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkudmlld3MuY29udGVudG91dGxpbmUuSUNvbnRlbnRPdXRsaW5lUGFnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS52aWV3cy5wcm9wZXJ0aWVzLklQcm9wZXJ0eVNoZWV0UGFnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS52aWV3cy5wcm9wZXJ0aWVzLlByb3BlcnR5U2hlZXQ7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkudmlld3MucHJvcGVydGllcy5Qcm9wZXJ0eVNoZWV0UGFnZTsKKworCisvKioKKyAqIFRoaXMgaXMgYW4gZXhhbXBsZSBvZiBhIENvbW1vbiBtb2RlbCBlZGl0b3IuCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK0BTdXBwcmVzc1dhcm5pbmdzKCJhbGwiKQorcHVibGljIGNsYXNzIENvbW1vbkVkaXRvcgorCWV4dGVuZHMgTXVsdGlQYWdlRWRpdG9yUGFydAorCWltcGxlbWVudHMgSUVkaXRpbmdEb21haW5Qcm92aWRlciwgSVNlbGVjdGlvblByb3ZpZGVyLCBJTWVudUxpc3RlbmVyLCBJVmlld2VyUHJvdmlkZXIsIElHb3RvTWFya2VyIHsKKwkvKioKKwkgKiBUaGlzIGtlZXBzIHRyYWNrIG9mIHRoZSBlZGl0aW5nIGRvbWFpbiB0aGF0IGlzIHVzZWQgdG8gdHJhY2sgYWxsIGNoYW5nZXMgdG8gdGhlIG1vZGVsLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBBZGFwdGVyRmFjdG9yeUVkaXRpbmdEb21haW4gZWRpdGluZ0RvbWFpbjsKKworCS8qKgorCSAqIFRoaXMgaXMgdGhlIG9uZSBhZGFwdGVyIGZhY3RvcnkgdXNlZCBmb3IgcHJvdmlkaW5nIHZpZXdzIG9mIHRoZSBtb2RlbC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgQ29tcG9zZWRBZGFwdGVyRmFjdG9yeSBhZGFwdGVyRmFjdG9yeTsKKworCS8qKgorCSAqIFRoaXMgaXMgdGhlIGNvbnRlbnQgb3V0bGluZSBwYWdlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBJQ29udGVudE91dGxpbmVQYWdlIGNvbnRlbnRPdXRsaW5lUGFnZTsKKworCS8qKgorCSAqIFRoaXMgaXMgYSBrbHVkZ2UuLi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgSVN0YXR1c0xpbmVNYW5hZ2VyIGNvbnRlbnRPdXRsaW5lU3RhdHVzTGluZU1hbmFnZXI7CisKKwkvKioKKwkgKiBUaGlzIGlzIHRoZSBjb250ZW50IG91dGxpbmUgcGFnZSdzIHZpZXdlci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgVHJlZVZpZXdlciBjb250ZW50T3V0bGluZVZpZXdlcjsKKworCS8qKgorCSAqIFRoaXMgaXMgdGhlIHByb3BlcnR5IHNoZWV0IHBhZ2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIFByb3BlcnR5U2hlZXRQYWdlIHByb3BlcnR5U2hlZXRQYWdlOworCisJLyoqCisJICogVGhpcyBpcyB0aGUgdmlld2VyIHRoYXQgc2hhZG93cyB0aGUgc2VsZWN0aW9uIGluIHRoZSBjb250ZW50IG91dGxpbmUuCisJICogVGhlIHBhcmVudCByZWxhdGlvbiBtdXN0IGJlIGNvcnJlY3RseSBkZWZpbmVkIGZvciB0aGlzIHRvIHdvcmsuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIFRyZWVWaWV3ZXIgc2VsZWN0aW9uVmlld2VyOworCisJLyoqCisJICogVGhpcyBrZWVwcyB0cmFjayBvZiB0aGUgYWN0aXZlIGNvbnRlbnQgdmlld2VyLCB3aGljaCBtYXkgYmUgZWl0aGVyIG9uZSBvZiB0aGUgdmlld2VycyBpbiB0aGUgcGFnZXMgb3IgdGhlIGNvbnRlbnQgb3V0bGluZSB2aWV3ZXIuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIFZpZXdlciBjdXJyZW50Vmlld2VyOworCisJLyoqCisJICogVGhpcyBsaXN0ZW5zIHRvIHdoaWNoIGV2ZXIgdmlld2VyIGlzIGFjdGl2ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lciBzZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXI7CisKKwkvKioKKwkgKiBUaGlzIGtlZXBzIHRyYWNrIG9mIGFsbCB0aGUge0BsaW5rIG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcn1zIHRoYXQgYXJlIGxpc3RlbmluZyB0byB0aGlzIGVkaXRvci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgQ29sbGVjdGlvbjxJU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyPiBzZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXJzID0gbmV3IEFycmF5TGlzdDxJU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyPigpOworCisJLyoqCisJICogVGhpcyBrZWVwcyB0cmFjayBvZiB0aGUgc2VsZWN0aW9uIG9mIHRoZSBlZGl0b3IgYXMgYSB3aG9sZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgSVNlbGVjdGlvbiBlZGl0b3JTZWxlY3Rpb24gPSBTdHJ1Y3R1cmVkU2VsZWN0aW9uLkVNUFRZOworCisJLyoqCisJICogVGhlIE1hcmtlckhlbHBlciBpcyByZXNwb25zaWJsZSBmb3IgY3JlYXRpbmcgd29ya3NwYWNlIHJlc291cmNlIG1hcmtlcnMgcHJlc2VudGVkCisJICogaW4gRWNsaXBzZSdzIFByb2JsZW1zIFZpZXcuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIE1hcmtlckhlbHBlciBtYXJrZXJIZWxwZXIgPSBuZXcgRWRpdFVJTWFya2VySGVscGVyKCk7CisKKwkvKioKKwkgKiBUaGlzIGxpc3RlbnMgZm9yIHdoZW4gdGhlIG91dGxpbmUgYmVjb21lcyBhY3RpdmUKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgSVBhcnRMaXN0ZW5lciBwYXJ0TGlzdGVuZXIgPQorCQluZXcgSVBhcnRMaXN0ZW5lcigpIHsKKwkJCXB1YmxpYyB2b2lkIHBhcnRBY3RpdmF0ZWQoSVdvcmtiZW5jaFBhcnQgcCkgeworCQkJCWlmIChwIGluc3RhbmNlb2YgQ29udGVudE91dGxpbmUpIHsKKwkJCQkJaWYgKCgoQ29udGVudE91dGxpbmUpcCkuZ2V0Q3VycmVudFBhZ2UoKSA9PSBjb250ZW50T3V0bGluZVBhZ2UpIHsKKwkJCQkJCWdldEFjdGlvbkJhckNvbnRyaWJ1dG9yKCkuc2V0QWN0aXZlRWRpdG9yKENvbW1vbkVkaXRvci50aGlzKTsKKworCQkJCQkJc2V0Q3VycmVudFZpZXdlcihjb250ZW50T3V0bGluZVZpZXdlcik7CisJCQkJCX0KKwkJCQl9CisJCQkJZWxzZSBpZiAocCBpbnN0YW5jZW9mIFByb3BlcnR5U2hlZXQpIHsKKwkJCQkJaWYgKCgoUHJvcGVydHlTaGVldClwKS5nZXRDdXJyZW50UGFnZSgpID09IHByb3BlcnR5U2hlZXRQYWdlKSB7CisJCQkJCQlnZXRBY3Rpb25CYXJDb250cmlidXRvcigpLnNldEFjdGl2ZUVkaXRvcihDb21tb25FZGl0b3IudGhpcyk7CisJCQkJCQloYW5kbGVBY3RpdmF0ZSgpOworCQkJCQl9CisJCQkJfQorCQkJCWVsc2UgaWYgKHAgPT0gQ29tbW9uRWRpdG9yLnRoaXMpIHsKKwkJCQkJaGFuZGxlQWN0aXZhdGUoKTsKKwkJCQl9CisJCQl9CisJCQlwdWJsaWMgdm9pZCBwYXJ0QnJvdWdodFRvVG9wKElXb3JrYmVuY2hQYXJ0IHApIHsKKwkJCQkvLyBJZ25vcmUuCisJCQl9CisJCQlwdWJsaWMgdm9pZCBwYXJ0Q2xvc2VkKElXb3JrYmVuY2hQYXJ0IHApIHsKKwkJCQkvLyBJZ25vcmUuCisJCQl9CisJCQlwdWJsaWMgdm9pZCBwYXJ0RGVhY3RpdmF0ZWQoSVdvcmtiZW5jaFBhcnQgcCkgeworCQkJCS8vIElnbm9yZS4KKwkJCX0KKwkJCXB1YmxpYyB2b2lkIHBhcnRPcGVuZWQoSVdvcmtiZW5jaFBhcnQgcCkgeworCQkJCS8vIElnbm9yZS4KKwkJCX0KKwkJfTsKKworCS8qKgorCSAqIFJlc291cmNlcyB0aGF0IGhhdmUgYmVlbiByZW1vdmVkIHNpbmNlIGxhc3QgYWN0aXZhdGlvbi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgQ29sbGVjdGlvbjxSZXNvdXJjZT4gcmVtb3ZlZFJlc291cmNlcyA9IG5ldyBBcnJheUxpc3Q8UmVzb3VyY2U+KCk7CisKKwkvKioKKwkgKiBSZXNvdXJjZXMgdGhhdCBoYXZlIGJlZW4gY2hhbmdlZCBzaW5jZSBsYXN0IGFjdGl2YXRpb24uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIENvbGxlY3Rpb248UmVzb3VyY2U+IGNoYW5nZWRSZXNvdXJjZXMgPSBuZXcgQXJyYXlMaXN0PFJlc291cmNlPigpOworCisJLyoqCisJICogUmVzb3VyY2VzIHRoYXQgaGF2ZSBiZWVuIHNhdmVkLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBDb2xsZWN0aW9uPFJlc291cmNlPiBzYXZlZFJlc291cmNlcyA9IG5ldyBBcnJheUxpc3Q8UmVzb3VyY2U+KCk7CisKKwkvKioKKwkgKiBNYXAgdG8gc3RvcmUgdGhlIGRpYWdub3N0aWMgYXNzb2NpYXRlZCB3aXRoIGEgcmVzb3VyY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIE1hcDxSZXNvdXJjZSwgRGlhZ25vc3RpYz4gcmVzb3VyY2VUb0RpYWdub3N0aWNNYXAgPSBuZXcgTGlua2VkSGFzaE1hcDxSZXNvdXJjZSwgRGlhZ25vc3RpYz4oKTsKKworCS8qKgorCSAqIENvbnRyb2xzIHdoZXRoZXIgdGhlIHByb2JsZW0gaW5kaWNhdGlvbiBzaG91bGQgYmUgdXBkYXRlZC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgYm9vbGVhbiB1cGRhdGVQcm9ibGVtSW5kaWNhdGlvbiA9IHRydWU7CisKKwkvKioKKwkgKiBBZGFwdGVyIHVzZWQgdG8gdXBkYXRlIHRoZSBwcm9ibGVtIGluZGljYXRpb24gd2hlbiByZXNvdXJjZXMgYXJlIGRlbWFuZGVkIGxvYWRlZC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgRUNvbnRlbnRBZGFwdGVyIHByb2JsZW1JbmRpY2F0aW9uQWRhcHRlciA9IAorCQluZXcgRUNvbnRlbnRBZGFwdGVyKCkgeworCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgdm9pZCBub3RpZnlDaGFuZ2VkKE5vdGlmaWNhdGlvbiBub3RpZmljYXRpb24pIHsKKwkJCQlpZiAobm90aWZpY2F0aW9uLmdldE5vdGlmaWVyKCkgaW5zdGFuY2VvZiBSZXNvdXJjZSkgeworCQkJCQlzd2l0Y2ggKG5vdGlmaWNhdGlvbi5nZXRGZWF0dXJlSUQoUmVzb3VyY2UuY2xhc3MpKSB7CisJCQkJCQljYXNlIFJlc291cmNlLlJFU09VUkNFX19JU19MT0FERUQ6CisJCQkJCQljYXNlIFJlc291cmNlLlJFU09VUkNFX19FUlJPUlM6CisJCQkJCQljYXNlIFJlc291cmNlLlJFU09VUkNFX19XQVJOSU5HUzogeworCQkJCQkJCVJlc291cmNlIHJlc291cmNlID0gKFJlc291cmNlKW5vdGlmaWNhdGlvbi5nZXROb3RpZmllcigpOworCQkJCQkJCURpYWdub3N0aWMgZGlhZ25vc3RpYyA9IGFuYWx5emVSZXNvdXJjZVByb2JsZW1zKHJlc291cmNlLCBudWxsKTsKKwkJCQkJCQlpZiAoZGlhZ25vc3RpYy5nZXRTZXZlcml0eSgpICE9IERpYWdub3N0aWMuT0spIHsKKwkJCQkJCQkJcmVzb3VyY2VUb0RpYWdub3N0aWNNYXAucHV0KHJlc291cmNlLCBkaWFnbm9zdGljKTsKKwkJCQkJCQl9CisJCQkJCQkJZWxzZSB7CisJCQkJCQkJCXJlc291cmNlVG9EaWFnbm9zdGljTWFwLnJlbW92ZShyZXNvdXJjZSk7CisJCQkJCQkJfQorCisJCQkJCQkJaWYgKHVwZGF0ZVByb2JsZW1JbmRpY2F0aW9uKSB7CisJCQkJCQkJCWdldFNpdGUoKS5nZXRTaGVsbCgpLmdldERpc3BsYXkoKS5hc3luY0V4ZWMKKwkJCQkJCQkJCShuZXcgUnVubmFibGUoKSB7CisJCQkJCQkJCQkJIHB1YmxpYyB2b2lkIHJ1bigpIHsKKwkJCQkJCQkJCQkJIHVwZGF0ZVByb2JsZW1JbmRpY2F0aW9uKCk7CisJCQkJCQkJCQkJIH0KKwkJCQkJCQkJCSB9KTsKKwkJCQkJCQl9CisJCQkJCQkJYnJlYWs7CisJCQkJCQl9CisJCQkJCX0KKwkJCQl9CisJCQkJZWxzZSB7CisJCQkJCXN1cGVyLm5vdGlmeUNoYW5nZWQobm90aWZpY2F0aW9uKTsKKwkJCQl9CisJCQl9CisKKwkJCUBPdmVycmlkZQorCQkJcHJvdGVjdGVkIHZvaWQgc2V0VGFyZ2V0KFJlc291cmNlIHRhcmdldCkgeworCQkJCWJhc2ljU2V0VGFyZ2V0KHRhcmdldCk7CisJCQl9CisKKwkJCUBPdmVycmlkZQorCQkJcHJvdGVjdGVkIHZvaWQgdW5zZXRUYXJnZXQoUmVzb3VyY2UgdGFyZ2V0KSB7CisJCQkJYmFzaWNVbnNldFRhcmdldCh0YXJnZXQpOworCQkJfQorCQl9OworCisJLyoqCisJICogVGhpcyBsaXN0ZW5zIGZvciB3b3Jrc3BhY2UgY2hhbmdlcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgSVJlc291cmNlQ2hhbmdlTGlzdGVuZXIgcmVzb3VyY2VDaGFuZ2VMaXN0ZW5lciA9CisJCW5ldyBJUmVzb3VyY2VDaGFuZ2VMaXN0ZW5lcigpIHsKKwkJCXB1YmxpYyB2b2lkIHJlc291cmNlQ2hhbmdlZChJUmVzb3VyY2VDaGFuZ2VFdmVudCBldmVudCkgeworCQkJCUlSZXNvdXJjZURlbHRhIGRlbHRhID0gZXZlbnQuZ2V0RGVsdGEoKTsKKwkJCQl0cnkgeworCQkJCQljbGFzcyBSZXNvdXJjZURlbHRhVmlzaXRvciBpbXBsZW1lbnRzIElSZXNvdXJjZURlbHRhVmlzaXRvciB7CisJCQkJCQlwcm90ZWN0ZWQgUmVzb3VyY2VTZXQgcmVzb3VyY2VTZXQgPSBlZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCk7CisJCQkJCQlwcm90ZWN0ZWQgQ29sbGVjdGlvbjxSZXNvdXJjZT4gY2hhbmdlZFJlc291cmNlcyA9IG5ldyBBcnJheUxpc3Q8UmVzb3VyY2U+KCk7CisJCQkJCQlwcm90ZWN0ZWQgQ29sbGVjdGlvbjxSZXNvdXJjZT4gcmVtb3ZlZFJlc291cmNlcyA9IG5ldyBBcnJheUxpc3Q8UmVzb3VyY2U+KCk7CisKKwkJCQkJCXB1YmxpYyBib29sZWFuIHZpc2l0KElSZXNvdXJjZURlbHRhIGRlbHRhKSB7CisJCQkJCQkJaWYgKGRlbHRhLmdldFJlc291cmNlKCkuZ2V0VHlwZSgpID09IElSZXNvdXJjZS5GSUxFKSB7CisJCQkJCQkJCWlmIChkZWx0YS5nZXRLaW5kKCkgPT0gSVJlc291cmNlRGVsdGEuUkVNT1ZFRCB8fAorCQkJCQkJCQkgICAgZGVsdGEuZ2V0S2luZCgpID09IElSZXNvdXJjZURlbHRhLkNIQU5HRUQgJiYgZGVsdGEuZ2V0RmxhZ3MoKSAhPSBJUmVzb3VyY2VEZWx0YS5NQVJLRVJTKSB7CisJCQkJCQkJCQlSZXNvdXJjZSByZXNvdXJjZSA9IHJlc291cmNlU2V0LmdldFJlc291cmNlKFVSSS5jcmVhdGVQbGF0Zm9ybVJlc291cmNlVVJJKGRlbHRhLmdldEZ1bGxQYXRoKCkudG9TdHJpbmcoKSwgdHJ1ZSksIGZhbHNlKTsKKwkJCQkJCQkJCWlmIChyZXNvdXJjZSAhPSBudWxsKSB7CisJCQkJCQkJCQkJaWYgKGRlbHRhLmdldEtpbmQoKSA9PSBJUmVzb3VyY2VEZWx0YS5SRU1PVkVEKSB7CisJCQkJCQkJCQkJCXJlbW92ZWRSZXNvdXJjZXMuYWRkKHJlc291cmNlKTsKKwkJCQkJCQkJCQl9CisJCQkJCQkJCQkJZWxzZSBpZiAoIXNhdmVkUmVzb3VyY2VzLnJlbW92ZShyZXNvdXJjZSkpIHsKKwkJCQkJCQkJCQkJY2hhbmdlZFJlc291cmNlcy5hZGQocmVzb3VyY2UpOworCQkJCQkJCQkJCX0KKwkJCQkJCQkJCX0KKwkJCQkJCQkJfQorCQkJCQkJCX0KKworCQkJCQkJCXJldHVybiB0cnVlOworCQkJCQkJfQorCisJCQkJCQlwdWJsaWMgQ29sbGVjdGlvbjxSZXNvdXJjZT4gZ2V0Q2hhbmdlZFJlc291cmNlcygpIHsKKwkJCQkJCQlyZXR1cm4gY2hhbmdlZFJlc291cmNlczsKKwkJCQkJCX0KKworCQkJCQkJcHVibGljIENvbGxlY3Rpb248UmVzb3VyY2U+IGdldFJlbW92ZWRSZXNvdXJjZXMoKSB7CisJCQkJCQkJcmV0dXJuIHJlbW92ZWRSZXNvdXJjZXM7CisJCQkJCQl9CisJCQkJCX0KKworCQkJCQlmaW5hbCBSZXNvdXJjZURlbHRhVmlzaXRvciB2aXNpdG9yID0gbmV3IFJlc291cmNlRGVsdGFWaXNpdG9yKCk7CisJCQkJCWRlbHRhLmFjY2VwdCh2aXNpdG9yKTsKKworCQkJCQlpZiAoIXZpc2l0b3IuZ2V0UmVtb3ZlZFJlc291cmNlcygpLmlzRW1wdHkoKSkgeworCQkJCQkJZ2V0U2l0ZSgpLmdldFNoZWxsKCkuZ2V0RGlzcGxheSgpLmFzeW5jRXhlYworCQkJCQkJCShuZXcgUnVubmFibGUoKSB7CisJCQkJCQkJCSBwdWJsaWMgdm9pZCBydW4oKSB7CisJCQkJCQkJCQkgcmVtb3ZlZFJlc291cmNlcy5hZGRBbGwodmlzaXRvci5nZXRSZW1vdmVkUmVzb3VyY2VzKCkpOworCQkJCQkJCQkJIGlmICghaXNEaXJ0eSgpKSB7CisJCQkJCQkJCQkJIGdldFNpdGUoKS5nZXRQYWdlKCkuY2xvc2VFZGl0b3IoQ29tbW9uRWRpdG9yLnRoaXMsIGZhbHNlKTsKKwkJCQkJCQkJCSB9CisJCQkJCQkJCSB9CisJCQkJCQkJIH0pOworCQkJCQl9CisKKwkJCQkJaWYgKCF2aXNpdG9yLmdldENoYW5nZWRSZXNvdXJjZXMoKS5pc0VtcHR5KCkpIHsKKwkJCQkJCWdldFNpdGUoKS5nZXRTaGVsbCgpLmdldERpc3BsYXkoKS5hc3luY0V4ZWMKKwkJCQkJCQkobmV3IFJ1bm5hYmxlKCkgeworCQkJCQkJCQkgcHVibGljIHZvaWQgcnVuKCkgeworCQkJCQkJCQkJIGNoYW5nZWRSZXNvdXJjZXMuYWRkQWxsKHZpc2l0b3IuZ2V0Q2hhbmdlZFJlc291cmNlcygpKTsKKwkJCQkJCQkJCSBpZiAoZ2V0U2l0ZSgpLmdldFBhZ2UoKS5nZXRBY3RpdmVFZGl0b3IoKSA9PSBDb21tb25FZGl0b3IudGhpcykgeworCQkJCQkJCQkJCSBoYW5kbGVBY3RpdmF0ZSgpOworCQkJCQkJCQkJIH0KKwkJCQkJCQkJIH0KKwkJCQkJCQkgfSk7CisJCQkJCX0KKwkJCQl9CisJCQkJY2F0Y2ggKENvcmVFeGNlcHRpb24gZXhjZXB0aW9uKSB7CisJCQkJCUNvcmVFZGl0b3JQbHVnaW4uSU5TVEFOQ0UubG9nKGV4Y2VwdGlvbik7CisJCQkJfQorCQkJfQorCQl9OworCisJLyoqCisJICogSGFuZGxlcyBhY3RpdmF0aW9uIG9mIHRoZSBlZGl0b3Igb3IgaXQncyBhc3NvY2lhdGVkIHZpZXdzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIGhhbmRsZUFjdGl2YXRlKCkgeworCQkvLyBSZWNvbXB1dGUgdGhlIHJlYWQgb25seSBzdGF0ZS4KKwkJLy8KKwkJaWYgKGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VUb1JlYWRPbmx5TWFwKCkgIT0gbnVsbCkgeworCQkgIGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VUb1JlYWRPbmx5TWFwKCkuY2xlYXIoKTsKKworCQkgIC8vIFJlZnJlc2ggYW55IGFjdGlvbnMgdGhhdCBtYXkgYmVjb21lIGVuYWJsZWQgb3IgZGlzYWJsZWQuCisJCSAgLy8KKwkJICBzZXRTZWxlY3Rpb24oZ2V0U2VsZWN0aW9uKCkpOworCQl9CisKKwkJaWYgKCFyZW1vdmVkUmVzb3VyY2VzLmlzRW1wdHkoKSkgeworCQkJaWYgKGhhbmRsZURpcnR5Q29uZmxpY3QoKSkgeworCQkJCWdldFNpdGUoKS5nZXRQYWdlKCkuY2xvc2VFZGl0b3IoQ29tbW9uRWRpdG9yLnRoaXMsIGZhbHNlKTsKKwkJCX0KKwkJCWVsc2UgeworCQkJCXJlbW92ZWRSZXNvdXJjZXMuY2xlYXIoKTsKKwkJCQljaGFuZ2VkUmVzb3VyY2VzLmNsZWFyKCk7CisJCQkJc2F2ZWRSZXNvdXJjZXMuY2xlYXIoKTsKKwkJCX0KKwkJfQorCQllbHNlIGlmICghY2hhbmdlZFJlc291cmNlcy5pc0VtcHR5KCkpIHsKKwkJCWNoYW5nZWRSZXNvdXJjZXMucmVtb3ZlQWxsKHNhdmVkUmVzb3VyY2VzKTsKKwkJCWhhbmRsZUNoYW5nZWRSZXNvdXJjZXMoKTsKKwkJCWNoYW5nZWRSZXNvdXJjZXMuY2xlYXIoKTsKKwkJCXNhdmVkUmVzb3VyY2VzLmNsZWFyKCk7CisJCX0KKwl9CisKKwkvKioKKwkgKiBIYW5kbGVzIHdoYXQgdG8gZG8gd2l0aCBjaGFuZ2VkIHJlc291cmNlcyBvbiBhY3RpdmF0aW9uLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIGhhbmRsZUNoYW5nZWRSZXNvdXJjZXMoKSB7CisJCWlmICghY2hhbmdlZFJlc291cmNlcy5pc0VtcHR5KCkgJiYgKCFpc0RpcnR5KCkgfHwgaGFuZGxlRGlydHlDb25mbGljdCgpKSkgeworCQkJaWYgKGlzRGlydHkoKSkgeworCQkJCWNoYW5nZWRSZXNvdXJjZXMuYWRkQWxsKGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKS5nZXRSZXNvdXJjZXMoKSk7CisJCQl9CisJCQllZGl0aW5nRG9tYWluLmdldENvbW1hbmRTdGFjaygpLmZsdXNoKCk7CisKKwkJCXVwZGF0ZVByb2JsZW1JbmRpY2F0aW9uID0gZmFsc2U7CisJCQlmb3IgKFJlc291cmNlIHJlc291cmNlIDogY2hhbmdlZFJlc291cmNlcykgeworCQkJCWlmIChyZXNvdXJjZS5pc0xvYWRlZCgpKSB7CisJCQkJCXJlc291cmNlLnVubG9hZCgpOworCQkJCQl0cnkgeworCQkJCQkJcmVzb3VyY2UubG9hZChDb2xsZWN0aW9ucy5FTVBUWV9NQVApOworCQkJCQl9CisJCQkJCWNhdGNoIChJT0V4Y2VwdGlvbiBleGNlcHRpb24pIHsKKwkJCQkJCWlmICghcmVzb3VyY2VUb0RpYWdub3N0aWNNYXAuY29udGFpbnNLZXkocmVzb3VyY2UpKSB7CisJCQkJCQkJcmVzb3VyY2VUb0RpYWdub3N0aWNNYXAucHV0KHJlc291cmNlLCBhbmFseXplUmVzb3VyY2VQcm9ibGVtcyhyZXNvdXJjZSwgZXhjZXB0aW9uKSk7CisJCQkJCQl9CisJCQkJCX0KKwkJCQl9CisJCQl9CisKKwkJCWlmIChBZGFwdGVyRmFjdG9yeUVkaXRpbmdEb21haW4uaXNTdGFsZShlZGl0b3JTZWxlY3Rpb24pKSB7CisJCQkJc2V0U2VsZWN0aW9uKFN0cnVjdHVyZWRTZWxlY3Rpb24uRU1QVFkpOworCQkJfQorCisJCQl1cGRhdGVQcm9ibGVtSW5kaWNhdGlvbiA9IHRydWU7CisJCQl1cGRhdGVQcm9ibGVtSW5kaWNhdGlvbigpOworCQl9CisJfQorICAKKwkvKioKKwkgKiBVcGRhdGVzIHRoZSBwcm9ibGVtcyBpbmRpY2F0aW9uIHdpdGggdGhlIGluZm9ybWF0aW9uIGRlc2NyaWJlZCBpbiB0aGUgc3BlY2lmaWVkIGRpYWdub3N0aWMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgdXBkYXRlUHJvYmxlbUluZGljYXRpb24oKSB7CisJCWlmICh1cGRhdGVQcm9ibGVtSW5kaWNhdGlvbikgeworCQkJQmFzaWNEaWFnbm9zdGljIGRpYWdub3N0aWMgPQorCQkJCW5ldyBCYXNpY0RpYWdub3N0aWMKKwkJCQkJKERpYWdub3N0aWMuT0ssCisJCQkJCSAib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmVkaXRvciIsIC8vJE5PTi1OTFMtMSQKKwkJCQkJIDAsCisJCQkJCSBudWxsLAorCQkJCQkgbmV3IE9iamVjdCBbXSB7IGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKSB9KTsKKwkJCWZvciAoRGlhZ25vc3RpYyBjaGlsZERpYWdub3N0aWMgOiByZXNvdXJjZVRvRGlhZ25vc3RpY01hcC52YWx1ZXMoKSkgeworCQkJCWlmIChjaGlsZERpYWdub3N0aWMuZ2V0U2V2ZXJpdHkoKSAhPSBEaWFnbm9zdGljLk9LKSB7CisJCQkJCWRpYWdub3N0aWMuYWRkKGNoaWxkRGlhZ25vc3RpYyk7CisJCQkJfQorCQkJfQorCisJCQlpbnQgbGFzdEVkaXRvclBhZ2UgPSBnZXRQYWdlQ291bnQoKSAtIDE7CisJCQlpZiAobGFzdEVkaXRvclBhZ2UgPj0gMCAmJiBnZXRFZGl0b3IobGFzdEVkaXRvclBhZ2UpIGluc3RhbmNlb2YgUHJvYmxlbUVkaXRvclBhcnQpIHsKKwkJCQkoKFByb2JsZW1FZGl0b3JQYXJ0KWdldEVkaXRvcihsYXN0RWRpdG9yUGFnZSkpLnNldERpYWdub3N0aWMoZGlhZ25vc3RpYyk7CisJCQkJaWYgKGRpYWdub3N0aWMuZ2V0U2V2ZXJpdHkoKSAhPSBEaWFnbm9zdGljLk9LKSB7CisJCQkJCXNldEFjdGl2ZVBhZ2UobGFzdEVkaXRvclBhZ2UpOworCQkJCX0KKwkJCX0KKwkJCWVsc2UgaWYgKGRpYWdub3N0aWMuZ2V0U2V2ZXJpdHkoKSAhPSBEaWFnbm9zdGljLk9LKSB7CisJCQkJUHJvYmxlbUVkaXRvclBhcnQgcHJvYmxlbUVkaXRvclBhcnQgPSBuZXcgUHJvYmxlbUVkaXRvclBhcnQoKTsKKwkJCQlwcm9ibGVtRWRpdG9yUGFydC5zZXREaWFnbm9zdGljKGRpYWdub3N0aWMpOworCQkJCXByb2JsZW1FZGl0b3JQYXJ0LnNldE1hcmtlckhlbHBlcihtYXJrZXJIZWxwZXIpOworCQkJCXRyeSB7CisJCQkJCWFkZFBhZ2UoKytsYXN0RWRpdG9yUGFnZSwgcHJvYmxlbUVkaXRvclBhcnQsIGdldEVkaXRvcklucHV0KCkpOworCQkJCQlzZXRQYWdlVGV4dChsYXN0RWRpdG9yUGFnZSwgcHJvYmxlbUVkaXRvclBhcnQuZ2V0UGFydE5hbWUoKSk7CisJCQkJCXNldEFjdGl2ZVBhZ2UobGFzdEVkaXRvclBhZ2UpOworCQkJCQlzaG93VGFicygpOworCQkJCX0KKwkJCQljYXRjaCAoUGFydEluaXRFeGNlcHRpb24gZXhjZXB0aW9uKSB7CisJCQkJCUNvcmVFZGl0b3JQbHVnaW4uSU5TVEFOQ0UubG9nKGV4Y2VwdGlvbik7CisJCQkJfQorCQkJfQorCisJCQlpZiAobWFya2VySGVscGVyLmhhc01hcmtlcnMoZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpKSkgeworCQkJCW1hcmtlckhlbHBlci5kZWxldGVNYXJrZXJzKGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKSk7CisJCQkJaWYgKGRpYWdub3N0aWMuZ2V0U2V2ZXJpdHkoKSAhPSBEaWFnbm9zdGljLk9LKSB7CisJCQkJCXRyeSB7CisJCQkJCQltYXJrZXJIZWxwZXIuY3JlYXRlTWFya2VycyhkaWFnbm9zdGljKTsKKwkJCQkJfQorCQkJCQljYXRjaCAoQ29yZUV4Y2VwdGlvbiBleGNlcHRpb24pIHsKKwkJCQkJCUNvcmVFZGl0b3JQbHVnaW4uSU5TVEFOQ0UubG9nKGV4Y2VwdGlvbik7CisJCQkJCX0KKwkJCQl9CisJCQl9CisJCX0KKwl9CisKKwkvKioKKwkgKiBTaG93cyBhIGRpYWxvZyB0aGF0IGFza3MgaWYgY29uZmxpY3RpbmcgY2hhbmdlcyBzaG91bGQgYmUgZGlzY2FyZGVkLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBib29sZWFuIGhhbmRsZURpcnR5Q29uZmxpY3QoKSB7CisJCXJldHVybgorCQkJTWVzc2FnZURpYWxvZy5vcGVuUXVlc3Rpb24KKwkJCQkoZ2V0U2l0ZSgpLmdldFNoZWxsKCksCisJCQkJIGdldFN0cmluZygiX1VJX0ZpbGVDb25mbGljdF9sYWJlbCIpLCAvLyROT04tTkxTLTEkCisJCQkJIGdldFN0cmluZygiX1dBUk5fRmlsZUNvbmZsaWN0IikpOyAvLyROT04tTkxTLTEkCisJfQorCisJLyoqCisJICogVGhpcyBjcmVhdGVzIGEgbW9kZWwgZWRpdG9yLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBDb21tb25FZGl0b3IoKSB7CisJCXN1cGVyKCk7CisJCWluaXRpYWxpemVFZGl0aW5nRG9tYWluKCk7CisJfQorCisJLyoqCisJICogVGhpcyBzZXRzIHVwIHRoZSBlZGl0aW5nIGRvbWFpbiBmb3IgdGhlIG1vZGVsIGVkaXRvci4gPCEtLSBiZWdpbi11c2VyLWRvYworCSAqIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCXByb3RlY3RlZCB2b2lkIGluaXRpYWxpemVFZGl0aW5nRG9tYWluKCkgeworCQlpbml0aWFsaXplRWRpdGluZ0RvbWFpbkdlbigpOworCQllZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkuZ2V0UmVzb3VyY2VGYWN0b3J5UmVnaXN0cnkoKQorCQkJCS5nZXRFeHRlbnNpb25Ub0ZhY3RvcnlNYXAoKS5wdXQoIioiLAorCQkJCQkJU1RFTVhNSVJlc291cmNlRmFjdG9yeUltcGwuSU5TVEFOQ0UpOworCisJCWVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKS5nZXRSZXNvdXJjZUZhY3RvcnlSZWdpc3RyeSgpCisJCQkJLmdldFByb3RvY29sVG9GYWN0b3J5TWFwKCkucHV0KCJwbGF0Zm9ybSIsCisJCQkJCQlTVEVNWE1JUmVzb3VyY2VGYWN0b3J5SW1wbC5JTlNUQU5DRSk7CisJfSAvLyBpbml0aWFsaXplRWRpdGluZ0RvbWFpbgorCQorCS8qKgorCSAqIFRoaXMgc2V0cyB1cCB0aGUgZWRpdGluZyBkb21haW4gZm9yIHRoZSBtb2RlbCBlZGl0b3IuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgaW5pdGlhbGl6ZUVkaXRpbmdEb21haW5HZW4oKSB7CisJCS8vIENyZWF0ZSBhbiBhZGFwdGVyIGZhY3RvcnkgdGhhdCB5aWVsZHMgaXRlbSBwcm92aWRlcnMuCisJCS8vCisJCWFkYXB0ZXJGYWN0b3J5ID0gbmV3IENvbXBvc2VkQWRhcHRlckZhY3RvcnkoQ29tcG9zZWRBZGFwdGVyRmFjdG9yeS5EZXNjcmlwdG9yLlJlZ2lzdHJ5LklOU1RBTkNFKTsKKworCQlhZGFwdGVyRmFjdG9yeS5hZGRBZGFwdGVyRmFjdG9yeShuZXcgUmVzb3VyY2VJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSgpKTsKKwkJYWRhcHRlckZhY3RvcnkuYWRkQWRhcHRlckZhY3RvcnkobmV3IENvbW1vbkl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5KCkpOworCQlhZGFwdGVyRmFjdG9yeS5hZGRBZGFwdGVyRmFjdG9yeShuZXcgRXhwZXJpbWVudEl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5KCkpOworCQlhZGFwdGVyRmFjdG9yeS5hZGRBZGFwdGVyRmFjdG9yeShuZXcgR3JhcGhJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSgpKTsKKwkJYWRhcHRlckZhY3RvcnkuYWRkQWRhcHRlckZhY3RvcnkobmV3IE1vZGVsSXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkoKSk7CisJCWFkYXB0ZXJGYWN0b3J5LmFkZEFkYXB0ZXJGYWN0b3J5KG5ldyBNb2RpZmllckl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5KCkpOworCQlhZGFwdGVyRmFjdG9yeS5hZGRBZGFwdGVyRmFjdG9yeShuZXcgUHJlZGljYXRlSXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkoKSk7CisJCWFkYXB0ZXJGYWN0b3J5LmFkZEFkYXB0ZXJGYWN0b3J5KG5ldyBTY2VuYXJpb0l0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5KCkpOworCQlhZGFwdGVyRmFjdG9yeS5hZGRBZGFwdGVyRmFjdG9yeShuZXcgU2VxdWVuY2VySXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkoKSk7CisJCWFkYXB0ZXJGYWN0b3J5LmFkZEFkYXB0ZXJGYWN0b3J5KG5ldyBUcmlnZ2VySXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkoKSk7CisJCWFkYXB0ZXJGYWN0b3J5LmFkZEFkYXB0ZXJGYWN0b3J5KG5ldyBTb2x2ZXJJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSgpKTsKKwkJYWRhcHRlckZhY3RvcnkuYWRkQWRhcHRlckZhY3RvcnkobmV3IExvZ2dlckl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5KCkpOworCQlhZGFwdGVyRmFjdG9yeS5hZGRBZGFwdGVyRmFjdG9yeShuZXcgRWNvcmVJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSgpKTsKKwkJYWRhcHRlckZhY3RvcnkuYWRkQWRhcHRlckZhY3RvcnkobmV3IFJlZmxlY3RpdmVJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSgpKTsKKworCQkvLyBDcmVhdGUgdGhlIGNvbW1hbmQgc3RhY2sgdGhhdCB3aWxsIG5vdGlmeSB0aGlzIGVkaXRvciBhcyBjb21tYW5kcyBhcmUgZXhlY3V0ZWQuCisJCS8vCisJCUJhc2ljQ29tbWFuZFN0YWNrIGNvbW1hbmRTdGFjayA9IG5ldyBCYXNpY0NvbW1hbmRTdGFjaygpOworCisJCS8vIEFkZCBhIGxpc3RlbmVyIHRvIHNldCB0aGUgbW9zdCByZWNlbnQgY29tbWFuZCdzIGFmZmVjdGVkIG9iamVjdHMgdG8gYmUgdGhlIHNlbGVjdGlvbiBvZiB0aGUgdmlld2VyIHdpdGggZm9jdXMuCisJCS8vCisJCWNvbW1hbmRTdGFjay5hZGRDb21tYW5kU3RhY2tMaXN0ZW5lcgorCQkJKG5ldyBDb21tYW5kU3RhY2tMaXN0ZW5lcigpIHsKKwkJCQkgcHVibGljIHZvaWQgY29tbWFuZFN0YWNrQ2hhbmdlZChmaW5hbCBFdmVudE9iamVjdCBldmVudCkgeworCQkJCQkgZ2V0Q29udGFpbmVyKCkuZ2V0RGlzcGxheSgpLmFzeW5jRXhlYworCQkJCQkJIChuZXcgUnVubmFibGUoKSB7CisJCQkJCQkJICBwdWJsaWMgdm9pZCBydW4oKSB7CisJCQkJCQkJCSAgZmlyZVByb3BlcnR5Q2hhbmdlKElFZGl0b3JQYXJ0LlBST1BfRElSVFkpOworCisJCQkJCQkJCSAgLy8gVHJ5IHRvIHNlbGVjdCB0aGUgYWZmZWN0ZWQgb2JqZWN0cy4KKwkJCQkJCQkJICAvLworCQkJCQkJCQkgIENvbW1hbmQgbW9zdFJlY2VudENvbW1hbmQgPSAoKENvbW1hbmRTdGFjaylldmVudC5nZXRTb3VyY2UoKSkuZ2V0TW9zdFJlY2VudENvbW1hbmQoKTsKKwkJCQkJCQkJICBpZiAobW9zdFJlY2VudENvbW1hbmQgIT0gbnVsbCkgeworCQkJCQkJCQkJICBzZXRTZWxlY3Rpb25Ub1ZpZXdlcihtb3N0UmVjZW50Q29tbWFuZC5nZXRBZmZlY3RlZE9iamVjdHMoKSk7CisJCQkJCQkJCSAgfQorCQkJCQkJCQkgIGlmIChwcm9wZXJ0eVNoZWV0UGFnZSAhPSBudWxsICYmICFwcm9wZXJ0eVNoZWV0UGFnZS5nZXRDb250cm9sKCkuaXNEaXNwb3NlZCgpKSB7CisJCQkJCQkJCQkgIHByb3BlcnR5U2hlZXRQYWdlLnJlZnJlc2goKTsKKwkJCQkJCQkJICB9CisJCQkJCQkJICB9CisJCQkJCQkgIH0pOworCQkJCSB9CisJCQkgfSk7CisKKwkJLy8gQ3JlYXRlIHRoZSBlZGl0aW5nIGRvbWFpbiB3aXRoIGEgc3BlY2lhbCBjb21tYW5kIHN0YWNrLgorCQkvLworCQllZGl0aW5nRG9tYWluID0gbmV3IEFkYXB0ZXJGYWN0b3J5RWRpdGluZ0RvbWFpbihhZGFwdGVyRmFjdG9yeSwgY29tbWFuZFN0YWNrLCBuZXcgSGFzaE1hcDxSZXNvdXJjZSwgQm9vbGVhbj4oKSk7CisJfQorCisJLyoqCisJICogVGhpcyBpcyBoZXJlIGZvciB0aGUgbGlzdGVuZXIgdG8gYmUgYWJsZSB0byBjYWxsIGl0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIGZpcmVQcm9wZXJ0eUNoYW5nZShpbnQgYWN0aW9uKSB7CisJCXN1cGVyLmZpcmVQcm9wZXJ0eUNoYW5nZShhY3Rpb24pOworCX0KKworCS8qKgorCSAqIFRoaXMgc2V0cyB0aGUgc2VsZWN0aW9uIGludG8gd2hpY2hldmVyIHZpZXdlciBpcyBhY3RpdmUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgc2V0U2VsZWN0aW9uVG9WaWV3ZXIoQ29sbGVjdGlvbjw/PiBjb2xsZWN0aW9uKSB7CisJCWZpbmFsIENvbGxlY3Rpb248Pz4gdGhlU2VsZWN0aW9uID0gY29sbGVjdGlvbjsKKwkJLy8gTWFrZSBzdXJlIGl0J3Mgb2theS4KKwkJLy8KKwkJaWYgKHRoZVNlbGVjdGlvbiAhPSBudWxsICYmICF0aGVTZWxlY3Rpb24uaXNFbXB0eSgpKSB7CisJCQlSdW5uYWJsZSBydW5uYWJsZSA9CisJCQkJbmV3IFJ1bm5hYmxlKCkgeworCQkJCQlwdWJsaWMgdm9pZCBydW4oKSB7CisJCQkJCQkvLyBUcnkgdG8gc2VsZWN0IHRoZSBpdGVtcyBpbiB0aGUgY3VycmVudCBjb250ZW50IHZpZXdlciBvZiB0aGUgZWRpdG9yLgorCQkJCQkJLy8KKwkJCQkJCWlmIChjdXJyZW50Vmlld2VyICE9IG51bGwpIHsKKwkJCQkJCQljdXJyZW50Vmlld2VyLnNldFNlbGVjdGlvbihuZXcgU3RydWN0dXJlZFNlbGVjdGlvbih0aGVTZWxlY3Rpb24udG9BcnJheSgpKSwgdHJ1ZSk7CisJCQkJCQl9CisJCQkJCX0KKwkJCQl9OworCQkJZ2V0U2l0ZSgpLmdldFNoZWxsKCkuZ2V0RGlzcGxheSgpLmFzeW5jRXhlYyhydW5uYWJsZSk7CisJCX0KKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgdGhlIGVkaXRpbmcgZG9tYWluIGFzIHJlcXVpcmVkIGJ5IHRoZSB7QGxpbmsgSUVkaXRpbmdEb21haW5Qcm92aWRlcn0gaW50ZXJmYWNlLgorCSAqIFRoaXMgaXMgaW1wb3J0YW50IGZvciBpbXBsZW1lbnRpbmcgdGhlIHN0YXRpYyBtZXRob2RzIG9mIHtAbGluayBBZGFwdGVyRmFjdG9yeUVkaXRpbmdEb21haW59CisJICogYW5kIGZvciBzdXBwb3J0aW5nIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5hY3Rpb24uQ29tbWFuZEFjdGlvbn0uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVkaXRpbmdEb21haW4gZ2V0RWRpdGluZ0RvbWFpbigpIHsKKwkJcmV0dXJuIGVkaXRpbmdEb21haW47CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIGNsYXNzIFJldmVyc2VBZGFwdGVyRmFjdG9yeUNvbnRlbnRQcm92aWRlciBleHRlbmRzIEFkYXB0ZXJGYWN0b3J5Q29udGVudFByb3ZpZGVyIHsKKwkJcHVibGljIFJldmVyc2VBZGFwdGVyRmFjdG9yeUNvbnRlbnRQcm92aWRlcihBZGFwdGVyRmFjdG9yeSBhZGFwdGVyRmFjdG9yeSkgeworCQkJc3VwZXIoYWRhcHRlckZhY3RvcnkpOworCQl9CisKKwkJcHVibGljIE9iamVjdCBbXSBnZXRFbGVtZW50cyhPYmplY3Qgb2JqZWN0KSB7CisJCQlPYmplY3QgcGFyZW50ID0gc3VwZXIuZ2V0UGFyZW50KG9iamVjdCk7CisJCQlyZXR1cm4gKHBhcmVudCA9PSBudWxsID8gQ29sbGVjdGlvbnMuRU1QVFlfU0VUIDogQ29sbGVjdGlvbnMuc2luZ2xldG9uKHBhcmVudCkpLnRvQXJyYXkoKTsKKwkJfQorCisJCXB1YmxpYyBPYmplY3QgW10gZ2V0Q2hpbGRyZW4oT2JqZWN0IG9iamVjdCkgeworCQkJT2JqZWN0IHBhcmVudCA9IHN1cGVyLmdldFBhcmVudChvYmplY3QpOworCQkJcmV0dXJuIChwYXJlbnQgPT0gbnVsbCA/IENvbGxlY3Rpb25zLkVNUFRZX1NFVCA6IENvbGxlY3Rpb25zLnNpbmdsZXRvbihwYXJlbnQpKS50b0FycmF5KCk7CisJCX0KKworCQlwdWJsaWMgYm9vbGVhbiBoYXNDaGlsZHJlbihPYmplY3Qgb2JqZWN0KSB7CisJCQlPYmplY3QgcGFyZW50ID0gc3VwZXIuZ2V0UGFyZW50KG9iamVjdCk7CisJCQlyZXR1cm4gcGFyZW50ICE9IG51bGw7CisJCX0KKworCQlwdWJsaWMgT2JqZWN0IGdldFBhcmVudChPYmplY3Qgb2JqZWN0KSB7CisJCQlyZXR1cm4gbnVsbDsKKwkJfQorCX0KKworCS8qKgorCSAqIFRoaXMgbWFrZXMgc3VyZSB0aGF0IG9uZSBjb250ZW50IHZpZXdlciwgZWl0aGVyIGZvciB0aGUgY3VycmVudCBwYWdlIG9yIHRoZSBvdXRsaW5lIHZpZXcsIGlmIGl0IGhhcyBmb2N1cywKKwkgKiBpcyB0aGUgY3VycmVudCBvbmUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgc2V0Q3VycmVudFZpZXdlcihWaWV3ZXIgdmlld2VyKSB7CisJCS8vIElmIGl0IGlzIGNoYW5naW5nLi4uCisJCS8vCisJCWlmIChjdXJyZW50Vmlld2VyICE9IHZpZXdlcikgeworCQkJaWYgKHNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lciA9PSBudWxsKSB7CisJCQkJLy8gQ3JlYXRlIHRoZSBsaXN0ZW5lciBvbiBkZW1hbmQuCisJCQkJLy8KKwkJCQlzZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIgPQorCQkJCQluZXcgSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcigpIHsKKwkJCQkJCS8vIFRoaXMganVzdCBub3RpZmllcyB0aG9zZSB0aGluZ3MgdGhhdCBhcmUgYWZmZWN0ZWQgYnkgdGhlIHNlY3Rpb24uCisJCQkJCQkvLworCQkJCQkJcHVibGljIHZvaWQgc2VsZWN0aW9uQ2hhbmdlZChTZWxlY3Rpb25DaGFuZ2VkRXZlbnQgc2VsZWN0aW9uQ2hhbmdlZEV2ZW50KSB7CisJCQkJCQkJc2V0U2VsZWN0aW9uKHNlbGVjdGlvbkNoYW5nZWRFdmVudC5nZXRTZWxlY3Rpb24oKSk7CisJCQkJCQl9CisJCQkJCX07CisJCQl9CisKKwkJCS8vIFN0b3AgbGlzdGVuaW5nIHRvIHRoZSBvbGQgb25lLgorCQkJLy8KKwkJCWlmIChjdXJyZW50Vmlld2VyICE9IG51bGwpIHsKKwkJCQljdXJyZW50Vmlld2VyLnJlbW92ZVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcihzZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIpOworCQkJfQorCisJCQkvLyBTdGFydCBsaXN0ZW5pbmcgdG8gdGhlIG5ldyBvbmUuCisJCQkvLworCQkJaWYgKHZpZXdlciAhPSBudWxsKSB7CisJCQkJdmlld2VyLmFkZFNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcihzZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIpOworCQkJfQorCisJCQkvLyBSZW1lbWJlciBpdC4KKwkJCS8vCisJCQljdXJyZW50Vmlld2VyID0gdmlld2VyOworCisJCQkvLyBTZXQgdGhlIGVkaXRvcnMgc2VsZWN0aW9uIGJhc2VkIG9uIHRoZSBjdXJyZW50IHZpZXdlcidzIHNlbGVjdGlvbi4KKwkJCS8vCisJCQlzZXRTZWxlY3Rpb24oY3VycmVudFZpZXdlciA9PSBudWxsID8gU3RydWN0dXJlZFNlbGVjdGlvbi5FTVBUWSA6IGN1cnJlbnRWaWV3ZXIuZ2V0U2VsZWN0aW9uKCkpOworCQl9CisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIHRoZSB2aWV3ZXIgYXMgcmVxdWlyZWQgYnkgdGhlIHtAbGluayBJVmlld2VyUHJvdmlkZXJ9IGludGVyZmFjZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVmlld2VyIGdldFZpZXdlcigpIHsKKwkJcmV0dXJuIGN1cnJlbnRWaWV3ZXI7CisJfQorCisJLyoqCisJICogVGhpcyBjcmVhdGVzIGEgY29udGV4dCBtZW51IGZvciB0aGUgdmlld2VyIGFuZCBhZGRzIGEgbGlzdGVuZXIgYXMgd2VsbCByZWdpc3RlcmluZyB0aGUgbWVudSBmb3IgZXh0ZW5zaW9uLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIGNyZWF0ZUNvbnRleHRNZW51Rm9yKFN0cnVjdHVyZWRWaWV3ZXIgdmlld2VyKSB7CisJCU1lbnVNYW5hZ2VyIGNvbnRleHRNZW51ID0gbmV3IE1lbnVNYW5hZ2VyKCIjUG9wVXAiKTsgLy8kTk9OLU5MUy0xJAorCQljb250ZXh0TWVudS5hZGQobmV3IFNlcGFyYXRvcigiYWRkaXRpb25zIikpOyAvLyROT04tTkxTLTEkCisJCWNvbnRleHRNZW51LnNldFJlbW92ZUFsbFdoZW5TaG93bih0cnVlKTsKKwkJY29udGV4dE1lbnUuYWRkTWVudUxpc3RlbmVyKHRoaXMpOworCQlNZW51IG1lbnU9IGNvbnRleHRNZW51LmNyZWF0ZUNvbnRleHRNZW51KHZpZXdlci5nZXRDb250cm9sKCkpOworCQl2aWV3ZXIuZ2V0Q29udHJvbCgpLnNldE1lbnUobWVudSk7CisJCWdldFNpdGUoKS5yZWdpc3RlckNvbnRleHRNZW51KGNvbnRleHRNZW51LCBuZXcgVW53cmFwcGluZ1NlbGVjdGlvblByb3ZpZGVyKHZpZXdlcikpOworCisJCWludCBkbmRPcGVyYXRpb25zID0gRE5ELkRST1BfQ09QWSB8IERORC5EUk9QX01PVkUgfCBETkQuRFJPUF9MSU5LOworCQlUcmFuc2ZlcltdIHRyYW5zZmVycyA9IG5ldyBUcmFuc2ZlcltdIHsgTG9jYWxUcmFuc2Zlci5nZXRJbnN0YW5jZSgpIH07CisJCXZpZXdlci5hZGREcmFnU3VwcG9ydChkbmRPcGVyYXRpb25zLCB0cmFuc2ZlcnMsIG5ldyBWaWV3ZXJEcmFnQWRhcHRlcih2aWV3ZXIpKTsKKwkJdmlld2VyLmFkZERyb3BTdXBwb3J0KGRuZE9wZXJhdGlvbnMsIHRyYW5zZmVycywgbmV3IEVkaXRpbmdEb21haW5WaWV3ZXJEcm9wQWRhcHRlcihlZGl0aW5nRG9tYWluLCB2aWV3ZXIpKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGlzIHRoZSBtZXRob2QgY2FsbGVkIHRvIGxvYWQgYSByZXNvdXJjZSBpbnRvIHRoZSBlZGl0aW5nIGRvbWFpbidzIHJlc291cmNlIHNldCBiYXNlZCBvbiB0aGUgZWRpdG9yJ3MgaW5wdXQuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgY3JlYXRlTW9kZWwoKSB7CisJCVVSSSByZXNvdXJjZVVSSSA9IEVkaXRVSVV0aWwuZ2V0VVJJKGdldEVkaXRvcklucHV0KCkpOworCQlFeGNlcHRpb24gZXhjZXB0aW9uID0gbnVsbDsKKwkJUmVzb3VyY2UgcmVzb3VyY2UgPSBudWxsOworCQl0cnkgeworCQkJLy8gTG9hZCB0aGUgcmVzb3VyY2UgdGhyb3VnaCB0aGUgZWRpdGluZyBkb21haW4uCisJCQkvLworCQkJcmVzb3VyY2UgPSBlZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkuZ2V0UmVzb3VyY2UocmVzb3VyY2VVUkksIHRydWUpOworCQl9CisJCWNhdGNoIChFeGNlcHRpb24gZSkgeworCQkJZXhjZXB0aW9uID0gZTsKKwkJCXJlc291cmNlID0gZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpLmdldFJlc291cmNlKHJlc291cmNlVVJJLCBmYWxzZSk7CisJCX0KKworCQlEaWFnbm9zdGljIGRpYWdub3N0aWMgPSBhbmFseXplUmVzb3VyY2VQcm9ibGVtcyhyZXNvdXJjZSwgZXhjZXB0aW9uKTsKKwkJaWYgKGRpYWdub3N0aWMuZ2V0U2V2ZXJpdHkoKSAhPSBEaWFnbm9zdGljLk9LKSB7CisJCQlyZXNvdXJjZVRvRGlhZ25vc3RpY01hcC5wdXQocmVzb3VyY2UsICBhbmFseXplUmVzb3VyY2VQcm9ibGVtcyhyZXNvdXJjZSwgZXhjZXB0aW9uKSk7CisJCX0KKwkJZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpLmVBZGFwdGVycygpLmFkZChwcm9ibGVtSW5kaWNhdGlvbkFkYXB0ZXIpOworCX0KKworCS8qKgorCSAqIFJldHVybnMgYSBkaWFnbm9zdGljIGRlc2NyaWJpbmcgdGhlIGVycm9ycyBhbmQgd2FybmluZ3MgbGlzdGVkIGluIHRoZSByZXNvdXJjZQorCSAqIGFuZCB0aGUgc3BlY2lmaWVkIGV4Y2VwdGlvbiAoaWYgYW55KS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRGlhZ25vc3RpYyBhbmFseXplUmVzb3VyY2VQcm9ibGVtcyhSZXNvdXJjZSByZXNvdXJjZSwgRXhjZXB0aW9uIGV4Y2VwdGlvbikgeworCQlpZiAoIXJlc291cmNlLmdldEVycm9ycygpLmlzRW1wdHkoKSB8fCAhcmVzb3VyY2UuZ2V0V2FybmluZ3MoKS5pc0VtcHR5KCkpIHsKKwkJCUJhc2ljRGlhZ25vc3RpYyBiYXNpY0RpYWdub3N0aWMgPQorCQkJCW5ldyBCYXNpY0RpYWdub3N0aWMKKwkJCQkJKERpYWdub3N0aWMuRVJST1IsCisJCQkJCSAib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmVkaXRvciIsIC8vJE5PTi1OTFMtMSQKKwkJCQkJIDAsCisJCQkJCSBnZXRTdHJpbmcoIl9VSV9DcmVhdGVNb2RlbEVycm9yX21lc3NhZ2UiLCByZXNvdXJjZS5nZXRVUkkoKSksIC8vJE5PTi1OTFMtMSQKKwkJCQkJIG5ldyBPYmplY3QgW10geyBleGNlcHRpb24gPT0gbnVsbCA/IChPYmplY3QpcmVzb3VyY2UgOiBleGNlcHRpb24gfSk7CisJCQliYXNpY0RpYWdub3N0aWMubWVyZ2UoRWNvcmVVdGlsLmNvbXB1dGVEaWFnbm9zdGljKHJlc291cmNlLCB0cnVlKSk7CisJCQlyZXR1cm4gYmFzaWNEaWFnbm9zdGljOworCQl9CisJCWVsc2UgaWYgKGV4Y2VwdGlvbiAhPSBudWxsKSB7CisJCQlyZXR1cm4KKwkJCQluZXcgQmFzaWNEaWFnbm9zdGljCisJCQkJCShEaWFnbm9zdGljLkVSUk9SLAorCQkJCQkgIm9yZy5lY2xpcHNlLnN0ZW0uY29yZS5lZGl0b3IiLCAvLyROT04tTkxTLTEkCisJCQkJCSAwLAorCQkJCQkgZ2V0U3RyaW5nKCJfVUlfQ3JlYXRlTW9kZWxFcnJvcl9tZXNzYWdlIiwgcmVzb3VyY2UuZ2V0VVJJKCkpLCAvLyROT04tTkxTLTEkCisJCQkJCSBuZXcgT2JqZWN0W10geyBleGNlcHRpb24gfSk7CisJCX0KKwkJZWxzZSB7CisJCQlyZXR1cm4gRGlhZ25vc3RpYy5PS19JTlNUQU5DRTsKKwkJfQorCX0KKworCS8qKgorCSAqIFRoaXMgaXMgdGhlIG1ldGhvZCB1c2VkIGJ5IHRoZSBmcmFtZXdvcmsgdG8gaW5zdGFsbCB5b3VyIG93biBjb250cm9scy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBjcmVhdGVQYWdlcygpIHsKKwkJLy8gQ3JlYXRlcyB0aGUgbW9kZWwgZnJvbSB0aGUgZWRpdG9yIGlucHV0CisJCS8vCisJCWNyZWF0ZU1vZGVsKCk7CisKKwkJLy8gT25seSBjcmVhdGVzIHRoZSBvdGhlciBwYWdlcyBpZiB0aGVyZSBpcyBzb21ldGhpbmcgdGhhdCBjYW4gYmUgZWRpdGVkCisJCS8vCisJCWlmICghZ2V0RWRpdGluZ0RvbWFpbigpLmdldFJlc291cmNlU2V0KCkuZ2V0UmVzb3VyY2VzKCkuaXNFbXB0eSgpKSB7CisJCQkvLyBDcmVhdGUgYSBwYWdlIGZvciB0aGUgc2VsZWN0aW9uIHRyZWUgdmlldy4KKwkJCS8vCisJCQlUcmVlIHRyZWUgPSBuZXcgVHJlZShnZXRDb250YWluZXIoKSwgU1dULk1VTFRJKTsKKwkJCXNlbGVjdGlvblZpZXdlciA9IG5ldyBUcmVlVmlld2VyKHRyZWUpOworCQkJc2V0Q3VycmVudFZpZXdlcihzZWxlY3Rpb25WaWV3ZXIpOworCisJCQlzZWxlY3Rpb25WaWV3ZXIuc2V0Q29udGVudFByb3ZpZGVyKG5ldyBBZGFwdGVyRmFjdG9yeUNvbnRlbnRQcm92aWRlcihhZGFwdGVyRmFjdG9yeSkpOworCQkJc2VsZWN0aW9uVmlld2VyLnNldExhYmVsUHJvdmlkZXIobmV3IEFkYXB0ZXJGYWN0b3J5TGFiZWxQcm92aWRlcihhZGFwdGVyRmFjdG9yeSkpOworCQkJc2VsZWN0aW9uVmlld2VyLnNldElucHV0KGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKSk7CisJCQlzZWxlY3Rpb25WaWV3ZXIuc2V0U2VsZWN0aW9uKG5ldyBTdHJ1Y3R1cmVkU2VsZWN0aW9uKGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKS5nZXRSZXNvdXJjZXMoKS5nZXQoMCkpLCB0cnVlKTsKKworCQkJbmV3IEFkYXB0ZXJGYWN0b3J5VHJlZUVkaXRvcihzZWxlY3Rpb25WaWV3ZXIuZ2V0VHJlZSgpLCBhZGFwdGVyRmFjdG9yeSk7CisKKwkJCWNyZWF0ZUNvbnRleHRNZW51Rm9yKHNlbGVjdGlvblZpZXdlcik7CisJCQlpbnQgcGFnZUluZGV4ID0gYWRkUGFnZSh0cmVlKTsKKwkJCXNldFBhZ2VUZXh0KHBhZ2VJbmRleCwgZ2V0U3RyaW5nKCJfVUlfU2VsZWN0aW9uUGFnZV9sYWJlbCIpKTsgLy8kTk9OLU5MUy0xJAorCisJCQlnZXRTaXRlKCkuZ2V0U2hlbGwoKS5nZXREaXNwbGF5KCkuYXN5bmNFeGVjCisJCQkJKG5ldyBSdW5uYWJsZSgpIHsKKwkJCQkJIHB1YmxpYyB2b2lkIHJ1bigpIHsKKwkJCQkJCSBzZXRBY3RpdmVQYWdlKDApOworCQkJCQkgfQorCQkJCSB9KTsKKwkJfQorCisJCS8vIEVuc3VyZXMgdGhhdCB0aGlzIGVkaXRvciB3aWxsIG9ubHkgZGlzcGxheSB0aGUgcGFnZSdzIHRhYgorCQkvLyBhcmVhIGlmIHRoZXJlIGFyZSBtb3JlIHRoYW4gb25lIHBhZ2UKKwkJLy8KKwkJZ2V0Q29udGFpbmVyKCkuYWRkQ29udHJvbExpc3RlbmVyCisJCQkobmV3IENvbnRyb2xBZGFwdGVyKCkgeworCQkJCWJvb2xlYW4gZ3VhcmQgPSBmYWxzZTsKKwkJCQlAT3ZlcnJpZGUKKwkJCQlwdWJsaWMgdm9pZCBjb250cm9sUmVzaXplZChDb250cm9sRXZlbnQgZXZlbnQpIHsKKwkJCQkJaWYgKCFndWFyZCkgeworCQkJCQkJZ3VhcmQgPSB0cnVlOworCQkJCQkJaGlkZVRhYnMoKTsKKwkJCQkJCWd1YXJkID0gZmFsc2U7CisJCQkJCX0KKwkJCQl9CisJCQkgfSk7CisKKwkJZ2V0U2l0ZSgpLmdldFNoZWxsKCkuZ2V0RGlzcGxheSgpLmFzeW5jRXhlYworCQkJKG5ldyBSdW5uYWJsZSgpIHsKKwkJCQkgcHVibGljIHZvaWQgcnVuKCkgeworCQkJCQkgdXBkYXRlUHJvYmxlbUluZGljYXRpb24oKTsKKwkJCQkgfQorCQkJIH0pOworCX0KKworCS8qKgorCSAqIElmIHRoZXJlIGlzIGp1c3Qgb25lIHBhZ2UgaW4gdGhlIG11bHRpLXBhZ2UgZWRpdG9yIHBhcnQsCisJICogdGhpcyBoaWRlcyB0aGUgc2luZ2xlIHRhYiBhdCB0aGUgYm90dG9tLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIGhpZGVUYWJzKCkgeworCQlpZiAoZ2V0UGFnZUNvdW50KCkgPD0gMSkgeworCQkJc2V0UGFnZVRleHQoMCwgIiIpOyAvLyROT04tTkxTLTEkCisJCQlpZiAoZ2V0Q29udGFpbmVyKCkgaW5zdGFuY2VvZiBDVGFiRm9sZGVyKSB7CisJCQkJKChDVGFiRm9sZGVyKWdldENvbnRhaW5lcigpKS5zZXRUYWJIZWlnaHQoMSk7CisJCQkJUG9pbnQgcG9pbnQgPSBnZXRDb250YWluZXIoKS5nZXRTaXplKCk7CisJCQkJZ2V0Q29udGFpbmVyKCkuc2V0U2l6ZShwb2ludC54LCBwb2ludC55ICsgNik7CisJCQl9CisJCX0KKwl9CisKKwkvKioKKwkgKiBJZiB0aGVyZSBpcyBtb3JlIHRoYW4gb25lIHBhZ2UgaW4gdGhlIG11bHRpLXBhZ2UgZWRpdG9yIHBhcnQsCisJICogdGhpcyBzaG93cyB0aGUgdGFicyBhdCB0aGUgYm90dG9tLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIHNob3dUYWJzKCkgeworCQlpZiAoZ2V0UGFnZUNvdW50KCkgPiAxKSB7CisJCQlzZXRQYWdlVGV4dCgwLCBnZXRTdHJpbmcoIl9VSV9TZWxlY3Rpb25QYWdlX2xhYmVsIikpOyAvLyROT04tTkxTLTEkCisJCQlpZiAoZ2V0Q29udGFpbmVyKCkgaW5zdGFuY2VvZiBDVGFiRm9sZGVyKSB7CisJCQkJKChDVGFiRm9sZGVyKWdldENvbnRhaW5lcigpKS5zZXRUYWJIZWlnaHQoU1dULkRFRkFVTFQpOworCQkJCVBvaW50IHBvaW50ID0gZ2V0Q29udGFpbmVyKCkuZ2V0U2l6ZSgpOworCQkJCWdldENvbnRhaW5lcigpLnNldFNpemUocG9pbnQueCwgcG9pbnQueSAtIDYpOworCQkJfQorCQl9CisJfQorCisJLyoqCisJICogVGhpcyBpcyB1c2VkIHRvIHRyYWNrIHRoZSBhY3RpdmUgdmlld2VyLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIHBhZ2VDaGFuZ2UoaW50IHBhZ2VJbmRleCkgeworCQlzdXBlci5wYWdlQ2hhbmdlKHBhZ2VJbmRleCk7CisKKwkJaWYgKGNvbnRlbnRPdXRsaW5lUGFnZSAhPSBudWxsKSB7CisJCQloYW5kbGVDb250ZW50T3V0bGluZVNlbGVjdGlvbihjb250ZW50T3V0bGluZVBhZ2UuZ2V0U2VsZWN0aW9uKCkpOworCQl9CisJfQorCisJLyoqCisJICogVGhpcyBpcyBob3cgdGhlIGZyYW1ld29yayBkZXRlcm1pbmVzIHdoaWNoIGludGVyZmFjZXMgd2UgaW1wbGVtZW50LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBTdXBwcmVzc1dhcm5pbmdzKCJ1bmNoZWNrZWQiKQorCQlAT3ZlcnJpZGUKKwlwdWJsaWMgT2JqZWN0IGdldEFkYXB0ZXIoQ2xhc3Mga2V5KSB7CisJCWlmIChrZXkuZXF1YWxzKElDb250ZW50T3V0bGluZVBhZ2UuY2xhc3MpKSB7CisJCQlyZXR1cm4gc2hvd091dGxpbmVWaWV3KCkgPyBnZXRDb250ZW50T3V0bGluZVBhZ2UoKSA6IG51bGw7CisJCX0KKwkJZWxzZSBpZiAoa2V5LmVxdWFscyhJUHJvcGVydHlTaGVldFBhZ2UuY2xhc3MpKSB7CisJCQlyZXR1cm4gZ2V0UHJvcGVydHlTaGVldFBhZ2UoKTsKKwkJfQorCQllbHNlIGlmIChrZXkuZXF1YWxzKElHb3RvTWFya2VyLmNsYXNzKSkgeworCQkJcmV0dXJuIHRoaXM7CisJCX0KKwkJZWxzZSB7CisJCQlyZXR1cm4gc3VwZXIuZ2V0QWRhcHRlcihrZXkpOworCQl9CisJfQorCisJLyoqCisJICogVGhpcyBhY2Nlc3NlcyBhIGNhY2hlZCB2ZXJzaW9uIG9mIHRoZSBjb250ZW50IG91dGxpbmVyLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBJQ29udGVudE91dGxpbmVQYWdlIGdldENvbnRlbnRPdXRsaW5lUGFnZSgpIHsKKwkJaWYgKGNvbnRlbnRPdXRsaW5lUGFnZSA9PSBudWxsKSB7CisJCQkvLyBUaGUgY29udGVudCBvdXRsaW5lIGlzIGp1c3QgYSB0cmVlLgorCQkJLy8KKwkJCWNsYXNzIE15Q29udGVudE91dGxpbmVQYWdlIGV4dGVuZHMgQ29udGVudE91dGxpbmVQYWdlIHsKKwkJCQlAT3ZlcnJpZGUKKwkJCQlwdWJsaWMgdm9pZCBjcmVhdGVDb250cm9sKENvbXBvc2l0ZSBwYXJlbnQpIHsKKwkJCQkJc3VwZXIuY3JlYXRlQ29udHJvbChwYXJlbnQpOworCQkJCQljb250ZW50T3V0bGluZVZpZXdlciA9IGdldFRyZWVWaWV3ZXIoKTsKKwkJCQkJY29udGVudE91dGxpbmVWaWV3ZXIuYWRkU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyKHRoaXMpOworCisJCQkJCS8vIFNldCB1cCB0aGUgdHJlZSB2aWV3ZXIuCisJCQkJCS8vCisJCQkJCWNvbnRlbnRPdXRsaW5lVmlld2VyLnNldENvbnRlbnRQcm92aWRlcihuZXcgQWRhcHRlckZhY3RvcnlDb250ZW50UHJvdmlkZXIoYWRhcHRlckZhY3RvcnkpKTsKKwkJCQkJY29udGVudE91dGxpbmVWaWV3ZXIuc2V0TGFiZWxQcm92aWRlcihuZXcgQWRhcHRlckZhY3RvcnlMYWJlbFByb3ZpZGVyKGFkYXB0ZXJGYWN0b3J5KSk7CisJCQkJCWNvbnRlbnRPdXRsaW5lVmlld2VyLnNldElucHV0KGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKSk7CisKKwkJCQkJLy8gTWFrZSBzdXJlIG91ciBwb3B1cHMgd29yay4KKwkJCQkJLy8KKwkJCQkJY3JlYXRlQ29udGV4dE1lbnVGb3IoY29udGVudE91dGxpbmVWaWV3ZXIpOworCisJCQkJCWlmICghZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpLmdldFJlc291cmNlcygpLmlzRW1wdHkoKSkgeworCQkJCQkgIC8vIFNlbGVjdCB0aGUgcm9vdCBvYmplY3QgaW4gdGhlIHZpZXcuCisJCQkJCSAgLy8KKwkJCQkJICBjb250ZW50T3V0bGluZVZpZXdlci5zZXRTZWxlY3Rpb24obmV3IFN0cnVjdHVyZWRTZWxlY3Rpb24oZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpLmdldFJlc291cmNlcygpLmdldCgwKSksIHRydWUpOworCQkJCQl9CisJCQkJfQorCisJCQkJQE92ZXJyaWRlCisJCQkJcHVibGljIHZvaWQgbWFrZUNvbnRyaWJ1dGlvbnMoSU1lbnVNYW5hZ2VyIG1lbnVNYW5hZ2VyLCBJVG9vbEJhck1hbmFnZXIgdG9vbEJhck1hbmFnZXIsIElTdGF0dXNMaW5lTWFuYWdlciBzdGF0dXNMaW5lTWFuYWdlcikgeworCQkJCQlzdXBlci5tYWtlQ29udHJpYnV0aW9ucyhtZW51TWFuYWdlciwgdG9vbEJhck1hbmFnZXIsIHN0YXR1c0xpbmVNYW5hZ2VyKTsKKwkJCQkJY29udGVudE91dGxpbmVTdGF0dXNMaW5lTWFuYWdlciA9IHN0YXR1c0xpbmVNYW5hZ2VyOworCQkJCX0KKworCQkJCUBPdmVycmlkZQorCQkJCXB1YmxpYyB2b2lkIHNldEFjdGlvbkJhcnMoSUFjdGlvbkJhcnMgYWN0aW9uQmFycykgeworCQkJCQlzdXBlci5zZXRBY3Rpb25CYXJzKGFjdGlvbkJhcnMpOworCQkJCQlnZXRBY3Rpb25CYXJDb250cmlidXRvcigpLnNoYXJlR2xvYmFsQWN0aW9ucyh0aGlzLCBhY3Rpb25CYXJzKTsKKwkJCQl9CisJCQl9CisKKwkJCWNvbnRlbnRPdXRsaW5lUGFnZSA9IG5ldyBNeUNvbnRlbnRPdXRsaW5lUGFnZSgpOworCisJCQkvLyBMaXN0ZW4gdG8gc2VsZWN0aW9uIHNvIHRoYXQgd2UgY2FuIGhhbmRsZSBpdCBpcyBhIHNwZWNpYWwgd2F5LgorCQkJLy8KKwkJCWNvbnRlbnRPdXRsaW5lUGFnZS5hZGRTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIKKwkJCQkobmV3IElTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIoKSB7CisJCQkJCSAvLyBUaGlzIGVuc3VyZXMgdGhhdCB3ZSBoYW5kbGUgc2VsZWN0aW9ucyBjb3JyZWN0bHkuCisJCQkJCSAvLworCQkJCQkgcHVibGljIHZvaWQgc2VsZWN0aW9uQ2hhbmdlZChTZWxlY3Rpb25DaGFuZ2VkRXZlbnQgZXZlbnQpIHsKKwkJCQkJCSBoYW5kbGVDb250ZW50T3V0bGluZVNlbGVjdGlvbihldmVudC5nZXRTZWxlY3Rpb24oKSk7CisJCQkJCSB9CisJCQkJIH0pOworCQl9CisKKwkJcmV0dXJuIGNvbnRlbnRPdXRsaW5lUGFnZTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFjY2Vzc2VzIGEgY2FjaGVkIHZlcnNpb24gb2YgdGhlIHByb3BlcnR5IHNoZWV0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBJUHJvcGVydHlTaGVldFBhZ2UgZ2V0UHJvcGVydHlTaGVldFBhZ2UoKSB7CisJCWlmIChwcm9wZXJ0eVNoZWV0UGFnZSA9PSBudWxsKSB7CisJCQlwcm9wZXJ0eVNoZWV0UGFnZSA9CisJCQkJbmV3IEV4dGVuZGVkUHJvcGVydHlTaGVldFBhZ2UoZWRpdGluZ0RvbWFpbikgeworCQkJCQlAT3ZlcnJpZGUKKwkJCQkJcHVibGljIHZvaWQgc2V0U2VsZWN0aW9uVG9WaWV3ZXIoTGlzdDw/PiBzZWxlY3Rpb24pIHsKKwkJCQkJCUNvbW1vbkVkaXRvci50aGlzLnNldFNlbGVjdGlvblRvVmlld2VyKHNlbGVjdGlvbik7CisJCQkJCQlDb21tb25FZGl0b3IudGhpcy5zZXRGb2N1cygpOworCQkJCQl9CisKKwkJCQkJQE92ZXJyaWRlCisJCQkJCXB1YmxpYyB2b2lkIHNldEFjdGlvbkJhcnMoSUFjdGlvbkJhcnMgYWN0aW9uQmFycykgeworCQkJCQkJc3VwZXIuc2V0QWN0aW9uQmFycyhhY3Rpb25CYXJzKTsKKwkJCQkJCWdldEFjdGlvbkJhckNvbnRyaWJ1dG9yKCkuc2hhcmVHbG9iYWxBY3Rpb25zKHRoaXMsIGFjdGlvbkJhcnMpOworCQkJCQl9CisJCQkJfTsKKwkJCXByb3BlcnR5U2hlZXRQYWdlLnNldFByb3BlcnR5U291cmNlUHJvdmlkZXIobmV3IEFkYXB0ZXJGYWN0b3J5Q29udGVudFByb3ZpZGVyKGFkYXB0ZXJGYWN0b3J5KSk7CisJCX0KKworCQlyZXR1cm4gcHJvcGVydHlTaGVldFBhZ2U7CisJfQorCisJLyoqCisJICogVGhpcyBkZWFscyB3aXRoIGhvdyB3ZSB3YW50IHNlbGVjdGlvbiBpbiB0aGUgb3V0bGluZXIgdG8gYWZmZWN0IHRoZSBvdGhlciB2aWV3cy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBoYW5kbGVDb250ZW50T3V0bGluZVNlbGVjdGlvbihJU2VsZWN0aW9uIHNlbGVjdGlvbikgeworCQlpZiAoc2VsZWN0aW9uVmlld2VyICE9IG51bGwgJiYgIXNlbGVjdGlvbi5pc0VtcHR5KCkgJiYgc2VsZWN0aW9uIGluc3RhbmNlb2YgSVN0cnVjdHVyZWRTZWxlY3Rpb24pIHsKKwkJCUl0ZXJhdG9yPD8+IHNlbGVjdGVkRWxlbWVudHMgPSAoKElTdHJ1Y3R1cmVkU2VsZWN0aW9uKXNlbGVjdGlvbikuaXRlcmF0b3IoKTsKKwkJCWlmIChzZWxlY3RlZEVsZW1lbnRzLmhhc05leHQoKSkgeworCQkJCS8vIEdldCB0aGUgZmlyc3Qgc2VsZWN0ZWQgZWxlbWVudC4KKwkJCQkvLworCQkJCU9iamVjdCBzZWxlY3RlZEVsZW1lbnQgPSBzZWxlY3RlZEVsZW1lbnRzLm5leHQoKTsKKworCQkJCUFycmF5TGlzdDxPYmplY3Q+IHNlbGVjdGlvbkxpc3QgPSBuZXcgQXJyYXlMaXN0PE9iamVjdD4oKTsKKwkJCQlzZWxlY3Rpb25MaXN0LmFkZChzZWxlY3RlZEVsZW1lbnQpOworCQkJCXdoaWxlIChzZWxlY3RlZEVsZW1lbnRzLmhhc05leHQoKSkgeworCQkJCQlzZWxlY3Rpb25MaXN0LmFkZChzZWxlY3RlZEVsZW1lbnRzLm5leHQoKSk7CisJCQkJfQorCisJCQkJLy8gU2V0IHRoZSBzZWxlY3Rpb24gdG8gdGhlIHdpZGdldC4KKwkJCQkvLworCQkJCXNlbGVjdGlvblZpZXdlci5zZXRTZWxlY3Rpb24obmV3IFN0cnVjdHVyZWRTZWxlY3Rpb24oc2VsZWN0aW9uTGlzdCkpOworCQkJfQorCQl9CisJfQorCisJLyoqCisJICogVGhpcyBpcyBmb3IgaW1wbGVtZW50aW5nIHtAbGluayBJRWRpdG9yUGFydH0gYW5kIHNpbXBseSB0ZXN0cyB0aGUgY29tbWFuZCBzdGFjay4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgYm9vbGVhbiBpc0RpcnR5KCkgeworCQlyZXR1cm4gKChCYXNpY0NvbW1hbmRTdGFjayllZGl0aW5nRG9tYWluLmdldENvbW1hbmRTdGFjaygpKS5pc1NhdmVOZWVkZWQoKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGlzIGZvciBpbXBsZW1lbnRpbmcge0BsaW5rIElFZGl0b3JQYXJ0fSBhbmQgc2ltcGx5IHNhdmVzIHRoZSBtb2RlbCBmaWxlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGRvU2F2ZShJUHJvZ3Jlc3NNb25pdG9yIHByb2dyZXNzTW9uaXRvcikgeworCQkvLyBTYXZlIG9ubHkgcmVzb3VyY2VzIHRoYXQgaGF2ZSBhY3R1YWxseSBjaGFuZ2VkLgorCQkvLworCQlmaW5hbCBNYXA8T2JqZWN0LCBPYmplY3Q+IHNhdmVPcHRpb25zID0gbmV3IEhhc2hNYXA8T2JqZWN0LCBPYmplY3Q+KCk7CisJCXNhdmVPcHRpb25zLnB1dChSZXNvdXJjZS5PUFRJT05fU0FWRV9PTkxZX0lGX0NIQU5HRUQsIFJlc291cmNlLk9QVElPTl9TQVZFX09OTFlfSUZfQ0hBTkdFRF9NRU1PUllfQlVGRkVSKTsKKworCQkvLyBEbyB0aGUgd29yayB3aXRoaW4gYW4gb3BlcmF0aW9uIGJlY2F1c2UgdGhpcyBpcyBhIGxvbmcgcnVubmluZyBhY3Rpdml0eSB0aGF0IG1vZGlmaWVzIHRoZSB3b3JrYmVuY2guCisJCS8vCisJCVdvcmtzcGFjZU1vZGlmeU9wZXJhdGlvbiBvcGVyYXRpb24gPQorCQkJbmV3IFdvcmtzcGFjZU1vZGlmeU9wZXJhdGlvbigpIHsKKwkJCQkvLyBUaGlzIGlzIHRoZSBtZXRob2QgdGhhdCBnZXRzIGludm9rZWQgd2hlbiB0aGUgb3BlcmF0aW9uIHJ1bnMuCisJCQkJLy8KKwkJCQlAT3ZlcnJpZGUKKwkJCQlwdWJsaWMgdm9pZCBleGVjdXRlKElQcm9ncmVzc01vbml0b3IgbW9uaXRvcikgeworCQkJCQkvLyBTYXZlIHRoZSByZXNvdXJjZXMgdG8gdGhlIGZpbGUgc3lzdGVtLgorCQkJCQkvLworCQkJCQlib29sZWFuIGZpcnN0ID0gdHJ1ZTsKKwkJCQkJZm9yIChSZXNvdXJjZSByZXNvdXJjZSA6IGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKS5nZXRSZXNvdXJjZXMoKSkgeworCQkJCQkJaWYgKChmaXJzdCB8fCAhcmVzb3VyY2UuZ2V0Q29udGVudHMoKS5pc0VtcHR5KCkgfHwgaXNQZXJzaXN0ZWQocmVzb3VyY2UpKSAmJiAhZWRpdGluZ0RvbWFpbi5pc1JlYWRPbmx5KHJlc291cmNlKSkgeworCQkJCQkJCXRyeSB7CisJCQkJCQkJCWxvbmcgdGltZVN0YW1wID0gcmVzb3VyY2UuZ2V0VGltZVN0YW1wKCk7CisJCQkJCQkJCXJlc291cmNlLnNhdmUoc2F2ZU9wdGlvbnMpOworCQkJCQkJCQlpZiAocmVzb3VyY2UuZ2V0VGltZVN0YW1wKCkgIT0gdGltZVN0YW1wKSB7CisJCQkJCQkJCQlzYXZlZFJlc291cmNlcy5hZGQocmVzb3VyY2UpOworCQkJCQkJCQl9CisJCQkJCQkJfQorCQkJCQkJCWNhdGNoIChFeGNlcHRpb24gZXhjZXB0aW9uKSB7CisJCQkJCQkJCXJlc291cmNlVG9EaWFnbm9zdGljTWFwLnB1dChyZXNvdXJjZSwgYW5hbHl6ZVJlc291cmNlUHJvYmxlbXMocmVzb3VyY2UsIGV4Y2VwdGlvbikpOworCQkJCQkJCX0KKwkJCQkJCQlmaXJzdCA9IGZhbHNlOworCQkJCQkJfQorCQkJCQl9CisJCQkJfQorCQkJfTsKKworCQl1cGRhdGVQcm9ibGVtSW5kaWNhdGlvbiA9IGZhbHNlOworCQl0cnkgeworCQkJLy8gVGhpcyBydW5zIHRoZSBvcHRpb25zLCBhbmQgc2hvd3MgcHJvZ3Jlc3MuCisJCQkvLworCQkJbmV3IFByb2dyZXNzTW9uaXRvckRpYWxvZyhnZXRTaXRlKCkuZ2V0U2hlbGwoKSkucnVuKHRydWUsIGZhbHNlLCBvcGVyYXRpb24pOworCisJCQkvLyBSZWZyZXNoIHRoZSBuZWNlc3Nhcnkgc3RhdGUuCisJCQkvLworCQkJKChCYXNpY0NvbW1hbmRTdGFjayllZGl0aW5nRG9tYWluLmdldENvbW1hbmRTdGFjaygpKS5zYXZlSXNEb25lKCk7CisJCQlmaXJlUHJvcGVydHlDaGFuZ2UoSUVkaXRvclBhcnQuUFJPUF9ESVJUWSk7CisJCX0KKwkJY2F0Y2ggKEV4Y2VwdGlvbiBleGNlcHRpb24pIHsKKwkJCS8vIFNvbWV0aGluZyB3ZW50IHdyb25nIHRoYXQgc2hvdWxkbid0LgorCQkJLy8KKwkJCUNvcmVFZGl0b3JQbHVnaW4uSU5TVEFOQ0UubG9nKGV4Y2VwdGlvbik7CisJCX0KKwkJdXBkYXRlUHJvYmxlbUluZGljYXRpb24gPSB0cnVlOworCQl1cGRhdGVQcm9ibGVtSW5kaWNhdGlvbigpOworCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyB3aGV0aGVyIHNvbWV0aGluZyBoYXMgYmVlbiBwZXJzaXN0ZWQgdG8gdGhlIFVSSSBvZiB0aGUgc3BlY2lmaWVkIHJlc291cmNlLgorCSAqIFRoZSBpbXBsZW1lbnRhdGlvbiB1c2VzIHRoZSBVUkkgY29udmVydGVyIGZyb20gdGhlIGVkaXRvcidzIHJlc291cmNlIHNldCB0byB0cnkgdG8gb3BlbiBhbiBpbnB1dCBzdHJlYW0uIAorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBib29sZWFuIGlzUGVyc2lzdGVkKFJlc291cmNlIHJlc291cmNlKSB7CisJCWJvb2xlYW4gcmVzdWx0ID0gZmFsc2U7CisJCXRyeSB7CisJCQlJbnB1dFN0cmVhbSBzdHJlYW0gPSBlZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkuZ2V0VVJJQ29udmVydGVyKCkuY3JlYXRlSW5wdXRTdHJlYW0ocmVzb3VyY2UuZ2V0VVJJKCkpOworCQkJaWYgKHN0cmVhbSAhPSBudWxsKSB7CisJCQkJcmVzdWx0ID0gdHJ1ZTsKKwkJCQlzdHJlYW0uY2xvc2UoKTsKKwkJCX0KKwkJfQorCQljYXRjaCAoSU9FeGNlcHRpb24gZSkgeworCQkJLy8gSWdub3JlCisJCX0KKwkJcmV0dXJuIHJlc3VsdDsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFsd2F5cyByZXR1cm5zIHRydWUgYmVjYXVzZSBpdCBpcyBub3QgY3VycmVudGx5IHN1cHBvcnRlZC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgYm9vbGVhbiBpc1NhdmVBc0FsbG93ZWQoKSB7CisJCXJldHVybiB0cnVlOworCX0KKworCS8qKgorCSAqIFRoaXMgYWxzbyBjaGFuZ2VzIHRoZSBlZGl0b3IncyBpbnB1dC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBkb1NhdmVBcygpIHsKKwkJU2F2ZUFzRGlhbG9nIHNhdmVBc0RpYWxvZyA9IG5ldyBTYXZlQXNEaWFsb2coZ2V0U2l0ZSgpLmdldFNoZWxsKCkpOworCQlzYXZlQXNEaWFsb2cub3BlbigpOworCQlJUGF0aCBwYXRoID0gc2F2ZUFzRGlhbG9nLmdldFJlc3VsdCgpOworCQlpZiAocGF0aCAhPSBudWxsKSB7CisJCQlJRmlsZSBmaWxlID0gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmdldFJvb3QoKS5nZXRGaWxlKHBhdGgpOworCQkJaWYgKGZpbGUgIT0gbnVsbCkgeworCQkJCWRvU2F2ZUFzKFVSSS5jcmVhdGVQbGF0Zm9ybVJlc291cmNlVVJJKGZpbGUuZ2V0RnVsbFBhdGgoKS50b1N0cmluZygpLCB0cnVlKSwgbmV3IEZpbGVFZGl0b3JJbnB1dChmaWxlKSk7CisJCQl9CisJCX0KKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBkb1NhdmVBcyhVUkkgdXJpLCBJRWRpdG9ySW5wdXQgZWRpdG9ySW5wdXQpIHsKKwkJKGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKS5nZXRSZXNvdXJjZXMoKS5nZXQoMCkpLnNldFVSSSh1cmkpOworCQlzZXRJbnB1dFdpdGhOb3RpZnkoZWRpdG9ySW5wdXQpOworCQlzZXRQYXJ0TmFtZShlZGl0b3JJbnB1dC5nZXROYW1lKCkpOworCQlJUHJvZ3Jlc3NNb25pdG9yIHByb2dyZXNzTW9uaXRvciA9CisJCQlnZXRBY3Rpb25CYXJzKCkuZ2V0U3RhdHVzTGluZU1hbmFnZXIoKSAhPSBudWxsID8KKwkJCQlnZXRBY3Rpb25CYXJzKCkuZ2V0U3RhdHVzTGluZU1hbmFnZXIoKS5nZXRQcm9ncmVzc01vbml0b3IoKSA6CisJCQkJbmV3IE51bGxQcm9ncmVzc01vbml0b3IoKTsKKwkJZG9TYXZlKHByb2dyZXNzTW9uaXRvcik7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgZ290b01hcmtlcihJTWFya2VyIG1hcmtlcikgeworCQl0cnkgeworCQkJaWYgKG1hcmtlci5nZXRUeXBlKCkuZXF1YWxzKEVWYWxpZGF0b3IuTUFSS0VSKSkgeworCQkJCVN0cmluZyB1cmlBdHRyaWJ1dGUgPSBtYXJrZXIuZ2V0QXR0cmlidXRlKEVWYWxpZGF0b3IuVVJJX0FUVFJJQlVURSwgbnVsbCk7CisJCQkJaWYgKHVyaUF0dHJpYnV0ZSAhPSBudWxsKSB7CisJCQkJCVVSSSB1cmkgPSBVUkkuY3JlYXRlVVJJKHVyaUF0dHJpYnV0ZSk7CisJCQkJCUVPYmplY3QgZU9iamVjdCA9IGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKS5nZXRFT2JqZWN0KHVyaSwgdHJ1ZSk7CisJCQkJCWlmIChlT2JqZWN0ICE9IG51bGwpIHsKKwkJCQkJICBzZXRTZWxlY3Rpb25Ub1ZpZXdlcihDb2xsZWN0aW9ucy5zaW5nbGV0b24oZWRpdGluZ0RvbWFpbi5nZXRXcmFwcGVyKGVPYmplY3QpKSk7CisJCQkJCX0KKwkJCQl9CisJCQl9CisJCX0KKwkJY2F0Y2ggKENvcmVFeGNlcHRpb24gZXhjZXB0aW9uKSB7CisJCQlDb3JlRWRpdG9yUGx1Z2luLklOU1RBTkNFLmxvZyhleGNlcHRpb24pOworCQl9CisJfQorCisJLyoqCisJICogVGhpcyBpcyBjYWxsZWQgZHVyaW5nIHN0YXJ0dXAuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgaW5pdChJRWRpdG9yU2l0ZSBzaXRlLCBJRWRpdG9ySW5wdXQgZWRpdG9ySW5wdXQpIHsKKwkJc2V0U2l0ZShzaXRlKTsKKwkJc2V0SW5wdXRXaXRoTm90aWZ5KGVkaXRvcklucHV0KTsKKwkJc2V0UGFydE5hbWUoZWRpdG9ySW5wdXQuZ2V0TmFtZSgpKTsKKwkJc2l0ZS5zZXRTZWxlY3Rpb25Qcm92aWRlcih0aGlzKTsKKwkJc2l0ZS5nZXRQYWdlKCkuYWRkUGFydExpc3RlbmVyKHBhcnRMaXN0ZW5lcik7CisJCVJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5hZGRSZXNvdXJjZUNoYW5nZUxpc3RlbmVyKHJlc291cmNlQ2hhbmdlTGlzdGVuZXIsIElSZXNvdXJjZUNoYW5nZUV2ZW50LlBPU1RfQ0hBTkdFKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBzZXRGb2N1cygpIHsKKwkJZ2V0Q29udHJvbChnZXRBY3RpdmVQYWdlKCkpLnNldEZvY3VzKCk7CisJfQorCisJLyoqCisJICogVGhpcyBpbXBsZW1lbnRzIHtAbGluayBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb25Qcm92aWRlcn0uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgYWRkU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyKElTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIgbGlzdGVuZXIpIHsKKwkJc2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVycy5hZGQobGlzdGVuZXIpOworCX0KKworCS8qKgorCSAqIFRoaXMgaW1wbGVtZW50cyB7QGxpbmsgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uUHJvdmlkZXJ9LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIHJlbW92ZVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcihJU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyIGxpc3RlbmVyKSB7CisJCXNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcnMucmVtb3ZlKGxpc3RlbmVyKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGltcGxlbWVudHMge0BsaW5rIG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvblByb3ZpZGVyfSB0byByZXR1cm4gdGhpcyBlZGl0b3IncyBvdmVyYWxsIHNlbGVjdGlvbi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgSVNlbGVjdGlvbiBnZXRTZWxlY3Rpb24oKSB7CisJCXJldHVybiBlZGl0b3JTZWxlY3Rpb247CisJfQorCisJLyoqCisJICogVGhpcyBpbXBsZW1lbnRzIHtAbGluayBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb25Qcm92aWRlcn0gdG8gc2V0IHRoaXMgZWRpdG9yJ3Mgb3ZlcmFsbCBzZWxlY3Rpb24uCisJICogQ2FsbGluZyB0aGlzIHJlc3VsdCB3aWxsIG5vdGlmeSB0aGUgbGlzdGVuZXJzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIHNldFNlbGVjdGlvbihJU2VsZWN0aW9uIHNlbGVjdGlvbikgeworCQllZGl0b3JTZWxlY3Rpb24gPSBzZWxlY3Rpb247CisKKwkJZm9yIChJU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyIGxpc3RlbmVyIDogc2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVycykgeworCQkJbGlzdGVuZXIuc2VsZWN0aW9uQ2hhbmdlZChuZXcgU2VsZWN0aW9uQ2hhbmdlZEV2ZW50KHRoaXMsIHNlbGVjdGlvbikpOworCQl9CisJCXNldFN0YXR1c0xpbmVNYW5hZ2VyKHNlbGVjdGlvbik7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgc2V0U3RhdHVzTGluZU1hbmFnZXIoSVNlbGVjdGlvbiBzZWxlY3Rpb24pIHsKKwkJSVN0YXR1c0xpbmVNYW5hZ2VyIHN0YXR1c0xpbmVNYW5hZ2VyID0gY3VycmVudFZpZXdlciAhPSBudWxsICYmIGN1cnJlbnRWaWV3ZXIgPT0gY29udGVudE91dGxpbmVWaWV3ZXIgPworCQkJY29udGVudE91dGxpbmVTdGF0dXNMaW5lTWFuYWdlciA6IGdldEFjdGlvbkJhcnMoKS5nZXRTdGF0dXNMaW5lTWFuYWdlcigpOworCisJCWlmIChzdGF0dXNMaW5lTWFuYWdlciAhPSBudWxsKSB7CisJCQlpZiAoc2VsZWN0aW9uIGluc3RhbmNlb2YgSVN0cnVjdHVyZWRTZWxlY3Rpb24pIHsKKwkJCQlDb2xsZWN0aW9uPD8+IGNvbGxlY3Rpb24gPSAoKElTdHJ1Y3R1cmVkU2VsZWN0aW9uKXNlbGVjdGlvbikudG9MaXN0KCk7CisJCQkJc3dpdGNoIChjb2xsZWN0aW9uLnNpemUoKSkgeworCQkJCQljYXNlIDA6IHsKKwkJCQkJCXN0YXR1c0xpbmVNYW5hZ2VyLnNldE1lc3NhZ2UoZ2V0U3RyaW5nKCJfVUlfTm9PYmplY3RTZWxlY3RlZCIpKTsgLy8kTk9OLU5MUy0xJAorCQkJCQkJYnJlYWs7CisJCQkJCX0KKwkJCQkJY2FzZSAxOiB7CisJCQkJCQlTdHJpbmcgdGV4dCA9IG5ldyBBZGFwdGVyRmFjdG9yeUl0ZW1EZWxlZ2F0b3IoYWRhcHRlckZhY3RvcnkpLmdldFRleHQoY29sbGVjdGlvbi5pdGVyYXRvcigpLm5leHQoKSk7CisJCQkJCQlzdGF0dXNMaW5lTWFuYWdlci5zZXRNZXNzYWdlKGdldFN0cmluZygiX1VJX1NpbmdsZU9iamVjdFNlbGVjdGVkIiwgdGV4dCkpOyAvLyROT04tTkxTLTEkCisJCQkJCQlicmVhazsKKwkJCQkJfQorCQkJCQlkZWZhdWx0OiB7CisJCQkJCQlzdGF0dXNMaW5lTWFuYWdlci5zZXRNZXNzYWdlKGdldFN0cmluZygiX1VJX011bHRpT2JqZWN0U2VsZWN0ZWQiLCBJbnRlZ2VyLnRvU3RyaW5nKGNvbGxlY3Rpb24uc2l6ZSgpKSkpOyAvLyROT04tTkxTLTEkCisJCQkJCQlicmVhazsKKwkJCQkJfQorCQkJCX0KKwkJCX0KKwkJCWVsc2UgeworCQkJCXN0YXR1c0xpbmVNYW5hZ2VyLnNldE1lc3NhZ2UoIiIpOyAvLyROT04tTkxTLTEkCisJCQl9CisJCX0KKwl9CisKKwkvKioKKwkgKiBUaGlzIGxvb2tzIHVwIGEgc3RyaW5nIGluIHRoZSBwbHVnaW4ncyBwbHVnaW4ucHJvcGVydGllcyBmaWxlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByaXZhdGUgc3RhdGljIFN0cmluZyBnZXRTdHJpbmcoU3RyaW5nIGtleSkgeworCQlyZXR1cm4gQ29yZUVkaXRvclBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoa2V5KTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGxvb2tzIHVwIGEgc3RyaW5nIGluIHBsdWdpbi5wcm9wZXJ0aWVzLCBtYWtpbmcgYSBzdWJzdGl0dXRpb24uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIGdldFN0cmluZyhTdHJpbmcga2V5LCBPYmplY3QgczEpIHsKKwkJcmV0dXJuIENvcmVFZGl0b3JQbHVnaW4uSU5TVEFOQ0UuZ2V0U3RyaW5nKGtleSwgbmV3IE9iamVjdCBbXSB7IHMxIH0pOworCX0KKworCS8qKgorCSAqIFRoaXMgaW1wbGVtZW50cyB7QGxpbmsgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklNZW51TGlzdGVuZXJ9IHRvIGhlbHAgZmlsbCB0aGUgY29udGV4dCBtZW51cyB3aXRoIGNvbnRyaWJ1dGlvbnMgZnJvbSB0aGUgRWRpdCBtZW51LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIG1lbnVBYm91dFRvU2hvdyhJTWVudU1hbmFnZXIgbWVudU1hbmFnZXIpIHsKKwkJKChJTWVudUxpc3RlbmVyKWdldEVkaXRvclNpdGUoKS5nZXRBY3Rpb25CYXJDb250cmlidXRvcigpKS5tZW51QWJvdXRUb1Nob3cobWVudU1hbmFnZXIpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFZGl0aW5nRG9tYWluQWN0aW9uQmFyQ29udHJpYnV0b3IgZ2V0QWN0aW9uQmFyQ29udHJpYnV0b3IoKSB7CisJCXJldHVybiAoRWRpdGluZ0RvbWFpbkFjdGlvbkJhckNvbnRyaWJ1dG9yKWdldEVkaXRvclNpdGUoKS5nZXRBY3Rpb25CYXJDb250cmlidXRvcigpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBJQWN0aW9uQmFycyBnZXRBY3Rpb25CYXJzKCkgeworCQlyZXR1cm4gZ2V0QWN0aW9uQmFyQ29udHJpYnV0b3IoKS5nZXRBY3Rpb25CYXJzKCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEFkYXB0ZXJGYWN0b3J5IGdldEFkYXB0ZXJGYWN0b3J5KCkgeworCQlyZXR1cm4gYWRhcHRlckZhY3Rvcnk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgZGlzcG9zZSgpIHsKKwkJdXBkYXRlUHJvYmxlbUluZGljYXRpb24gPSBmYWxzZTsKKworCQlSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkucmVtb3ZlUmVzb3VyY2VDaGFuZ2VMaXN0ZW5lcihyZXNvdXJjZUNoYW5nZUxpc3RlbmVyKTsKKworCQlnZXRTaXRlKCkuZ2V0UGFnZSgpLnJlbW92ZVBhcnRMaXN0ZW5lcihwYXJ0TGlzdGVuZXIpOworCisJCWFkYXB0ZXJGYWN0b3J5LmRpc3Bvc2UoKTsKKworCQlpZiAoZ2V0QWN0aW9uQmFyQ29udHJpYnV0b3IoKS5nZXRBY3RpdmVFZGl0b3IoKSA9PSB0aGlzKSB7CisJCQlnZXRBY3Rpb25CYXJDb250cmlidXRvcigpLnNldEFjdGl2ZUVkaXRvcihudWxsKTsKKwkJfQorCisJCWlmIChwcm9wZXJ0eVNoZWV0UGFnZSAhPSBudWxsKSB7CisJCQlwcm9wZXJ0eVNoZWV0UGFnZS5kaXNwb3NlKCk7CisJCX0KKworCQlpZiAoY29udGVudE91dGxpbmVQYWdlICE9IG51bGwpIHsKKwkJCWNvbnRlbnRPdXRsaW5lUGFnZS5kaXNwb3NlKCk7CisJCX0KKworCQlzdXBlci5kaXNwb3NlKCk7CisJfQorCisJLyoqCisJICogUmV0dXJucyB3aGV0aGVyIHRoZSBvdXRsaW5lIHZpZXcgc2hvdWxkIGJlIHByZXNlbnRlZCB0byB0aGUgdXNlci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgYm9vbGVhbiBzaG93T3V0bGluZVZpZXcoKSB7CisJCXJldHVybiBmYWxzZTsKKwl9Cit9CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9jb21tb24vcHJlc2VudGF0aW9uL0NvcmVFZGl0b3JBZHZpc29yLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9jb21tb24vcHJlc2VudGF0aW9uL0NvcmVFZGl0b3JBZHZpc29yLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjQ0MDViNAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2NvbW1vbi9wcmVzZW50YXRpb24vQ29yZUVkaXRvckFkdmlzb3IuamF2YQpAQCAtMCwwICsxLDgzOCBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLnByZXNlbnRhdGlvbjsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqYXZhLmlvLkZpbGU7CitpbXBvcnQgamF2YS5uZXQuVVJMOworCitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUZpbGU7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVdvcmtzcGFjZVJvb3Q7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuUmVzb3VyY2VzUGx1Z2luOworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5Db3JlRXhjZXB0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5GaWxlTG9jYXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSUFkYXB0YWJsZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVBhdGg7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBhdGg7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBsYXRmb3JtOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udWkuYWN0aW9uLldvcmtiZW5jaFdpbmRvd0FjdGlvbkRlbGVnYXRlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5VUkk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkuYWN0aW9uLkxvYWRSZXNvdXJjZUFjdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lcXVpbm94LmFwcC5JQXBwbGljYXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuZXF1aW5veC5hcHAuSUFwcGxpY2F0aW9uQ29udGV4dDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uR3JvdXBNYXJrZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklBY3Rpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklNZW51TWFuYWdlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uTWVudU1hbmFnZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLlNlcGFyYXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5kaWFsb2dzLkRpYWxvZzsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5kaWFsb2dzLk1lc3NhZ2VEaWFsb2c7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UucmVzb3VyY2UuSW1hZ2VEZXNjcmlwdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udWkuQWN0aXZhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udWkuaGFuZGxlcnMuU3dpdGNoTG9jYWxlQWN0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udWkubGF1bmNoZXIuTGF1bmNoZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udWkucGVyc3BlY3RpdmVzLlNpbXVsYXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS51aS5wcmVmZXJlbmNlcy5TVEVNUHJlZmVyZW5jZVBhZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LlNXVDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZ3JhcGhpY3MuUG9pbnQ7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuRmlsZURpYWxvZzsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5TaGVsbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5JRm9sZGVyTGF5b3V0OworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklQYWdlTGF5b3V0OworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklQZXJzcGVjdGl2ZUZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaDsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5JV29ya2JlbmNoQWN0aW9uQ29uc3RhbnRzOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2hQYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2hXaW5kb3c7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuUGFydEluaXRFeGNlcHRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuYWN0aW9ucy5BY3Rpb25GYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLmFjdGlvbnMuQWN0aW9uRmFjdG9yeS5JV29ya2JlbmNoQWN0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLmFjdGlvbnMuQ29udHJpYnV0aW9uSXRlbUZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuYXBwbGljYXRpb24uQWN0aW9uQmFyQWR2aXNvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5hcHBsaWNhdGlvbi5JQWN0aW9uQmFyQ29uZmlndXJlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5hcHBsaWNhdGlvbi5JV29ya2JlbmNoQ29uZmlndXJlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5hcHBsaWNhdGlvbi5JV29ya2JlbmNoV2luZG93Q29uZmlndXJlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5hcHBsaWNhdGlvbi5Xb3JrYmVuY2hBZHZpc29yOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLmFwcGxpY2F0aW9uLldvcmtiZW5jaFdpbmRvd0Fkdmlzb3I7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuaWRlLklERTsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5pZGUuSURFSW50ZXJuYWxXb3JrYmVuY2hJbWFnZXM7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuaWRlLklERVdvcmtiZW5jaFBsdWdpbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5pZGUubW9kZWwuV29ya2JlbmNoQWRhcHRlckJ1aWxkZXI7CitpbXBvcnQgb3JnLm9zZ2kuZnJhbWV3b3JrLkJ1bmRsZTsKKworCisvKioKKyAqIEN1c3RvbWl6ZWQge0BsaW5rIFdvcmtiZW5jaEFkdmlzb3J9IGZvciB0aGUgUkNQIGFwcGxpY2F0aW9uLgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQGdlbmVyYXRlZAorICovCitAU3VwcHJlc3NXYXJuaW5ncygiYWxsIikKK3B1YmxpYyBmaW5hbCBjbGFzcyBDb3JlRWRpdG9yQWR2aXNvciBleHRlbmRzIFdvcmtiZW5jaEFkdmlzb3IgeworCS8qKgorCSAqIFRoaXMgbG9va3MgdXAgYSBzdHJpbmcgaW4gdGhlIHBsdWdpbidzIHBsdWdpbi5wcm9wZXJ0aWVzIGZpbGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIGdldFN0cmluZyhTdHJpbmcga2V5KSB7CisJCXJldHVybiBDb3JlRWRpdG9yUGx1Z2luLklOU1RBTkNFLmdldFN0cmluZyhrZXkpOworCX0KKworCS8qKgorCSAqIFRoaXMgbG9va3MgdXAgYSBzdHJpbmcgaW4gcGx1Z2luLnByb3BlcnRpZXMsIG1ha2luZyBhIHN1YnN0aXR1dGlvbi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcml2YXRlIHN0YXRpYyBTdHJpbmcgZ2V0U3RyaW5nKFN0cmluZyBrZXksIE9iamVjdCBzMSkgeworCQlyZXR1cm4gb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5wcmVzZW50YXRpb24uQ29yZUVkaXRvclBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoa2V5LCBuZXcgT2JqZWN0IFtdIHsgczEgfSk7CisJfQorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS51aS5hcHBsaWNhdGlvbi5Xb3JrYmVuY2hBZHZpc29yI2luaXRpYWxpemUob3JnLmVjbGlwc2UudWkuYXBwbGljYXRpb24uSVdvcmtiZW5jaENvbmZpZ3VyZXIpCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGluaXRpYWxpemUoSVdvcmtiZW5jaENvbmZpZ3VyZXIgY29uZmlndXJlcikgeworCQlzdXBlci5pbml0aWFsaXplKGNvbmZpZ3VyZXIpOworCQljb25maWd1cmVyLnNldFNhdmVBbmRSZXN0b3JlKHRydWUpOworCQlkZWNsYXJlV29ya2JlbmNoSW1hZ2VzKCk7CisJfQorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS51aS5hcHBsaWNhdGlvbi5Xb3JrYmVuY2hBZHZpc29yI2dldERlZmF1bHRQYWdlSW5wdXQoKQorCSAqIAlTZWUgPGEgaHJlZj0iaHR0cHM6Ly9idWdzLmVjbGlwc2Uub3JnL2J1Z3Mvc2hvd19idWcuY2dpP2lkPTE0NTIzMyI+YnVnCisJICogCTE0NTIzMzwvYT4KKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgSUFkYXB0YWJsZSBnZXREZWZhdWx0UGFnZUlucHV0KCkgeworCQlJV29ya3NwYWNlUm9vdCByb290ID0gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmdldFJvb3QoKTsKKwkJcmV0dXJuIHJvb3Q7CisJfQorCisJCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS51aS5hcHBsaWNhdGlvbi5Xb3JrYmVuY2hBZHZpc29yI3ByZVN0YXJ0dXAoKQorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIHByZVN0YXJ0dXAoKSB7CisJCVdvcmtiZW5jaEFkYXB0ZXJCdWlsZGVyLnJlZ2lzdGVyQWRhcHRlcnMoKTsKKwl9CisKKworLy8JLyoqCisvLwkgKiBUaGlzIGNsYXNzIGlzIHVzZWQgdG8gZW5hYmxlIHVzaW5nIHRoZSBDb21tb24gTmF2aWdhdG9yIEZyYW1ld29yayBpbiBhbgorLy8JICogUkNQIGFwcGxpY2F0aW9uLiBTZWUgPGEKKy8vCSAqIGhyZWY9Imh0dHBzOi8vYnVncy5lY2xpcHNlLm9yZy9idWdzL3Nob3dfYnVnLmNnaT9pZD0xNDUyMzMiPmJ1ZworLy8JICogMTQ1MjMzPC9hPgorLy8JICovCisvLwlwdWJsaWMgc3RhdGljIGNsYXNzIE5hdmlnYXRvclJvb3QgaW1wbGVtZW50cyBJQWRhcHRhYmxlLAorLy8JCQlJUGVyc2lzdGFibGVFbGVtZW50LCBJRWxlbWVudEZhY3RvcnkgeworLy8JCisvLwkJLyoqCisvLwkJICogQ29uc3RydWN0b3IKKy8vCQkgKi8KKy8vCQlwdWJsaWMgTmF2aWdhdG9yUm9vdCgpIHsKKy8vCQl9CisvLworLy8JCS8qKgorLy8JCSAqIEBzZWUgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklBZGFwdGFibGUjZ2V0QWRhcHRlcihqYXZhLmxhbmcuQ2xhc3MpCisvLwkJICovCisvLwkJcHVibGljIE9iamVjdCBnZXRBZGFwdGVyKENsYXNzIGFkYXB0ZXIpIHsKKy8vCQkJT2JqZWN0IHJldFZhbHVlID0gbnVsbDsKKy8vCQkJaWYgKGFkYXB0ZXIgPT0gSVBlcnNpc3RhYmxlRWxlbWVudC5jbGFzcykgeworLy8JCQkJLy8gWWVzCisvLwkJCQlyZXRWYWx1ZSA9IHRoaXM7CisvLwkJCX0gLy8gaWYgCisvLwkJCWVsc2UgaWYgKGFkYXB0ZXIgPT0gSVdvcmtiZW5jaEFkYXB0ZXIuY2xhc3MpIHsKKy8vCQkJCXJldFZhbHVlID0gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmdldFJvb3QoKS5nZXRBZGFwdGVyKGFkYXB0ZXIpOworLy8JCQl9IC8vIGlmIAorLy8JCQlyZXR1cm4gcmV0VmFsdWU7CisvLwkJfSAvLyBnZXRBZGFwdGVyCisvLwkKKy8vCQkvKioKKy8vCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnVpLklQZXJzaXN0YWJsZUVsZW1lbnQjZ2V0RmFjdG9yeUlkKCkKKy8vCQkgKi8KKy8vCQlwdWJsaWMgU3RyaW5nIGdldEZhY3RvcnlJZCgpIHsKKy8vCQkJcmV0dXJuICJvcmcuZWNsaXBzZS5zdGVtLnVpLmNvbW1vbk5hdmlnYXRvckZhY3RvcnkiOworLy8vLwkJCXJldHVybiB0aGlzLmdldENsYXNzKCkuZ2V0Q2Fub25pY2FsTmFtZSgpOworLy8JCX0KKy8vCQorLy8JCS8qKgorLy8JCSAqIEBzZWUgb3JnLmVjbGlwc2UudWkuSVBlcnNpc3RhYmxlI3NhdmVTdGF0ZShvcmcuZWNsaXBzZS51aS5JTWVtZW50bykKKy8vCQkgKi8KKy8vCQlwdWJsaWMgdm9pZCBzYXZlU3RhdGUoSU1lbWVudG8gbWVtZW50bykgeworLy8JCQkvLyBJIHRoaW5rIHdoYXQgaXMgaGFwcGVuaW5nIGhlcmUgaXMgdGhhdCB3ZSBkb24ndCBhY3R1YWxseSBzYXZlIHRoZQorLy8JCQkvLyBzdGF0ZSB0aGF0IHRoZSAiY3JlYXRlRWxlbWVudCIgbWV0aG9kIChiZWxvdykgd291bGQgcmVhZCwgaW5zdGVhZAorLy8JCQkvLyBpbiBjcmVhdGVFbGVtZW50IHdlIGp1c3QgcmV0dXJuIHRoZSByb290IG9mIHRoZSB3b3Jrc3BhY2Ugd2hpY2gKKy8vCQkJLy8gaXMgd2hhdCB3ZSB3YW50IGFueXdheS4KKy8vCQkJcmV0dXJuOworLy8JCX0KKy8vCQorLy8JCS8qKgorLy8JCSAqIEBzZWUgb3JnLmVjbGlwc2UudWkuSUVsZW1lbnRGYWN0b3J5I2NyZWF0ZUVsZW1lbnQob3JnLmVjbGlwc2UudWkuSU1lbWVudG8pCisvLwkJICovCisvLwkJcHVibGljIElBZGFwdGFibGUgY3JlYXRlRWxlbWVudChJTWVtZW50byBtZW1lbnRvKSB7CisvLwkJCXJldHVybiBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuZ2V0Um9vdCgpOworLy8JCX0KKy8vCQorLy8JfSAvLyBOYXZpZ2F0b3JSb290CisKKwkKKwkvKioKKwkgKiBEZWNsYXJlcyBhbGwgSURFLXNwZWNpZmljIHdvcmtiZW5jaCBpbWFnZXMuIFRoaXMgaW5jbHVkZXMgYm90aCAic2hhcmVkIgorCSAqIGltYWdlcyAobmFtZWQgaW4ge0BsaW5rIElERS5TaGFyZWRJbWFnZXN9KSBhbmQgaW50ZXJuYWwgaW1hZ2VzIChuYW1lZCBpbgorCSAqIHtAbGluayBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5pZGUuSURFSW50ZXJuYWxXb3JrYmVuY2hJbWFnZXN9KS4KKwkgKiAKKwkgKiBAc2VlIElXb3JrYmVuY2hDb25maWd1cmVyI2RlY2xhcmVJbWFnZQorCSAqLworCXByaXZhdGUgdm9pZCBkZWNsYXJlV29ya2JlbmNoSW1hZ2VzKCkgeworCisJCWZpbmFsIFN0cmluZyBJQ09OU19QQVRIID0gIiRubCQvaWNvbnMvZnVsbC8iOy8vJE5PTi1OTFMtMSQKKwkJZmluYWwgU3RyaW5nIFBBVEhfRUxPQ0FMVE9PTCA9IElDT05TX1BBVEggKyAiZWxjbDE2LyI7IC8vIEVuYWJsZWQgLy8kTk9OLU5MUy0xJAorCisJCS8vIHRvb2xiYXIKKwkJLy8gaWNvbnMuCisJCWZpbmFsIFN0cmluZyBQQVRIX0RMT0NBTFRPT0wgPSBJQ09OU19QQVRIICsgImRsY2wxNi8iOyAvLyBEaXNhYmxlZCAvLyROT04tTkxTLTEkCisJCS8vIC8vJE5PTi1OTFMtMSQKKwkJLy8gdG9vbGJhcgorCQkvLyBpY29ucy4KKwkJZmluYWwgU3RyaW5nIFBBVEhfRVRPT0wgPSBJQ09OU19QQVRIICsgImV0b29sMTYvIjsgLy8gRW5hYmxlZCB0b29sYmFyIC8vJE5PTi1OTFMtMSQKKwkJLy8gLy8kTk9OLU5MUy0xJAorCQkvLyBpY29ucy4KKwkJZmluYWwgU3RyaW5nIFBBVEhfRFRPT0wgPSBJQ09OU19QQVRIICsgImR0b29sMTYvIjsgLy8gRGlzYWJsZWQgdG9vbGJhciAvLyROT04tTkxTLTEkCisJCS8vIC8vJE5PTi1OTFMtMSQKKwkJLy8gaWNvbnMuCisJCWZpbmFsIFN0cmluZyBQQVRIX09CSkVDVCA9IElDT05TX1BBVEggKyAib2JqMTYvIjsgLy8gTW9kZWwgb2JqZWN0IC8vJE5PTi1OTFMtMSQKKwkJLy8gLy8kTk9OLU5MUy0xJAorCQkvLyBpY29ucworCQlmaW5hbCBTdHJpbmcgUEFUSF9XSVpCQU4gPSBJQ09OU19QQVRIICsgIndpemJhbi8iOyAvLyBXaXphcmQgLy8kTk9OLU5MUy0xJAorCQkvLyAvLyROT04tTkxTLTEkCisJCS8vIGljb25zCisKKwkJQnVuZGxlIGlkZUJ1bmRsZSA9IFBsYXRmb3JtLmdldEJ1bmRsZShJREVXb3JrYmVuY2hQbHVnaW4uSURFX1dPUktCRU5DSCk7CisKKwkJZGVjbGFyZVdvcmtiZW5jaEltYWdlKGlkZUJ1bmRsZSwKKwkJCQlJREVJbnRlcm5hbFdvcmtiZW5jaEltYWdlcy5JTUdfRVRPT0xfQlVJTERfRVhFQywgUEFUSF9FVE9PTAorCQkJCQkJKyAiYnVpbGRfZXhlYy5naWYiLCBmYWxzZSk7IC8vJE5PTi1OTFMtMSQKKwkJZGVjbGFyZVdvcmtiZW5jaEltYWdlKGlkZUJ1bmRsZSwKKwkJCQlJREVJbnRlcm5hbFdvcmtiZW5jaEltYWdlcy5JTUdfRVRPT0xfQlVJTERfRVhFQ19IT1ZFUiwKKwkJCQlQQVRIX0VUT09MICsgImJ1aWxkX2V4ZWMuZ2lmIiwgZmFsc2UpOyAvLyROT04tTkxTLTEkCisJCWRlY2xhcmVXb3JrYmVuY2hJbWFnZShpZGVCdW5kbGUsCisJCQkJSURFSW50ZXJuYWxXb3JrYmVuY2hJbWFnZXMuSU1HX0VUT09MX0JVSUxEX0VYRUNfRElTQUJMRUQsCisJCQkJUEFUSF9EVE9PTCArICJidWlsZF9leGVjLmdpZiIsIGZhbHNlKTsgLy8kTk9OLU5MUy0xJAorCisJCWRlY2xhcmVXb3JrYmVuY2hJbWFnZShpZGVCdW5kbGUsCisJCQkJSURFSW50ZXJuYWxXb3JrYmVuY2hJbWFnZXMuSU1HX0VUT09MX1NFQVJDSF9TUkMsIFBBVEhfRVRPT0wKKwkJCQkJCSsgInNlYXJjaF9zcmMuZ2lmIiwgZmFsc2UpOyAvLyROT04tTkxTLTEkCisJCWRlY2xhcmVXb3JrYmVuY2hJbWFnZShpZGVCdW5kbGUsCisJCQkJSURFSW50ZXJuYWxXb3JrYmVuY2hJbWFnZXMuSU1HX0VUT09MX1NFQVJDSF9TUkNfSE9WRVIsCisJCQkJUEFUSF9FVE9PTCArICJzZWFyY2hfc3JjLmdpZiIsIGZhbHNlKTsgLy8kTk9OLU5MUy0xJAorCQlkZWNsYXJlV29ya2JlbmNoSW1hZ2UoaWRlQnVuZGxlLAorCQkJCUlERUludGVybmFsV29ya2JlbmNoSW1hZ2VzLklNR19FVE9PTF9TRUFSQ0hfU1JDX0RJU0FCTEVELAorCQkJCVBBVEhfRFRPT0wgKyAic2VhcmNoX3NyYy5naWYiLCBmYWxzZSk7IC8vJE5PTi1OTFMtMSQKKworCQlkZWNsYXJlV29ya2JlbmNoSW1hZ2UoaWRlQnVuZGxlLAorCQkJCUlERUludGVybmFsV29ya2JlbmNoSW1hZ2VzLklNR19FVE9PTF9ORVhUX05BViwgUEFUSF9FVE9PTAorCQkJCQkJKyAibmV4dF9uYXYuZ2lmIiwgZmFsc2UpOyAvLyROT04tTkxTLTEkCisKKwkJZGVjbGFyZVdvcmtiZW5jaEltYWdlKGlkZUJ1bmRsZSwKKwkJCQlJREVJbnRlcm5hbFdvcmtiZW5jaEltYWdlcy5JTUdfRVRPT0xfUFJFVklPVVNfTkFWLCBQQVRIX0VUT09MCisJCQkJCQkrICJwcmV2X25hdi5naWYiLCBmYWxzZSk7IC8vJE5PTi1OTFMtMSQKKworCQlkZWNsYXJlV29ya2JlbmNoSW1hZ2UoaWRlQnVuZGxlLAorCQkJCUlERUludGVybmFsV29ya2JlbmNoSW1hZ2VzLklNR19XSVpCQU5fTkVXUFJKX1dJWiwgUEFUSF9XSVpCQU4KKwkJCQkJCSsgIm5ld3Byal93aXoucG5nIiwgZmFsc2UpOyAvLyROT04tTkxTLTEkCisJCWRlY2xhcmVXb3JrYmVuY2hJbWFnZShpZGVCdW5kbGUsCisJCQkJSURFSW50ZXJuYWxXb3JrYmVuY2hJbWFnZXMuSU1HX1dJWkJBTl9ORVdGT0xERVJfV0laLAorCQkJCVBBVEhfV0laQkFOICsgIm5ld2ZvbGRlcl93aXoucG5nIiwgZmFsc2UpOyAvLyROT04tTkxTLTEkCisJCWRlY2xhcmVXb3JrYmVuY2hJbWFnZShpZGVCdW5kbGUsCisJCQkJSURFSW50ZXJuYWxXb3JrYmVuY2hJbWFnZXMuSU1HX1dJWkJBTl9ORVdGSUxFX1dJWiwgUEFUSF9XSVpCQU4KKwkJCQkJCSsgIm5ld2ZpbGVfd2l6LnBuZyIsIGZhbHNlKTsgLy8kTk9OLU5MUy0xJAorCisJCWRlY2xhcmVXb3JrYmVuY2hJbWFnZShpZGVCdW5kbGUsCisJCQkJSURFSW50ZXJuYWxXb3JrYmVuY2hJbWFnZXMuSU1HX1dJWkJBTl9JTVBPUlRESVJfV0laLAorCQkJCVBBVEhfV0laQkFOICsgImltcG9ydGRpcl93aXoucG5nIiwgZmFsc2UpOyAvLyROT04tTkxTLTEkCisJCWRlY2xhcmVXb3JrYmVuY2hJbWFnZShpZGVCdW5kbGUsCisJCQkJSURFSW50ZXJuYWxXb3JrYmVuY2hJbWFnZXMuSU1HX1dJWkJBTl9JTVBPUlRaSVBfV0laLAorCQkJCVBBVEhfV0laQkFOICsgImltcG9ydHppcF93aXoucG5nIiwgZmFsc2UpOyAvLyROT04tTkxTLTEkCisKKwkJZGVjbGFyZVdvcmtiZW5jaEltYWdlKGlkZUJ1bmRsZSwKKwkJCQlJREVJbnRlcm5hbFdvcmtiZW5jaEltYWdlcy5JTUdfV0laQkFOX0VYUE9SVERJUl9XSVosCisJCQkJUEFUSF9XSVpCQU4gKyAiZXhwb3J0ZGlyX3dpei5wbmciLCBmYWxzZSk7IC8vJE5PTi1OTFMtMSQKKwkJZGVjbGFyZVdvcmtiZW5jaEltYWdlKGlkZUJ1bmRsZSwKKwkJCQlJREVJbnRlcm5hbFdvcmtiZW5jaEltYWdlcy5JTUdfV0laQkFOX0VYUE9SVFpJUF9XSVosCisJCQkJUEFUSF9XSVpCQU4gKyAiZXhwb3J0emlwX3dpei5wbmciLCBmYWxzZSk7IC8vJE5PTi1OTFMtMSQKKworCQlkZWNsYXJlV29ya2JlbmNoSW1hZ2UoaWRlQnVuZGxlLAorCQkJCUlERUludGVybmFsV29ya2JlbmNoSW1hZ2VzLklNR19XSVpCQU5fUkVTT1VSQ0VXT1JLSU5HU0VUX1dJWiwKKwkJCQlQQVRIX1dJWkJBTiArICJ3b3Jrc2V0X3dpei5wbmciLCBmYWxzZSk7IC8vJE5PTi1OTFMtMSQKKworCQlkZWNsYXJlV29ya2JlbmNoSW1hZ2UoaWRlQnVuZGxlLAorCQkJCUlERUludGVybmFsV29ya2JlbmNoSW1hZ2VzLklNR19ETEdCQU5fU0FWRUFTX0RMRywgUEFUSF9XSVpCQU4KKwkJCQkJCSsgInNhdmVhc193aXoucG5nIiwgZmFsc2UpOyAvLyROT04tTkxTLTEkCisKKwkJZGVjbGFyZVdvcmtiZW5jaEltYWdlKGlkZUJ1bmRsZSwKKwkJCQlJREVJbnRlcm5hbFdvcmtiZW5jaEltYWdlcy5JTUdfRExHQkFOX1FVSUNLRklYX0RMRywgUEFUSF9XSVpCQU4KKwkJCQkJCSsgInF1aWNrX2ZpeC5wbmciLCBmYWxzZSk7IC8vJE5PTi1OTFMtMSQKKworCQlkZWNsYXJlV29ya2JlbmNoSW1hZ2UoaWRlQnVuZGxlLCBJREUuU2hhcmVkSW1hZ2VzLklNR19PQkpfUFJPSkVDVCwKKwkJCQlQQVRIX09CSkVDVCArICJwcmpfb2JqLmdpZiIsIHRydWUpOyAvLyROT04tTkxTLTEkCisJCWRlY2xhcmVXb3JrYmVuY2hJbWFnZShpZGVCdW5kbGUsCisJCQkJSURFLlNoYXJlZEltYWdlcy5JTUdfT0JKX1BST0pFQ1RfQ0xPU0VELCBQQVRIX09CSkVDVAorCQkJCQkJKyAiY3Byal9vYmouZ2lmIiwgdHJ1ZSk7IC8vJE5PTi1OTFMtMSQKKwkJZGVjbGFyZVdvcmtiZW5jaEltYWdlKGlkZUJ1bmRsZSwgSURFLlNoYXJlZEltYWdlcy5JTUdfT1BFTl9NQVJLRVIsCisJCQkJUEFUSF9FTE9DQUxUT09MICsgImdvdG9vYmpfdHNrLmdpZiIsIHRydWUpOyAvLyROT04tTkxTLTEkCisKKwkJZGVjbGFyZVdvcmtiZW5jaEltYWdlKGlkZUJ1bmRsZSwKKwkJCQlJREVJbnRlcm5hbFdvcmtiZW5jaEltYWdlcy5JTUdfRUxDTF9RVUlDS19GSVhfRU5BQkxFRCwKKwkJCQlQQVRIX0VMT0NBTFRPT0wgKyAic21hcnRtb2RlX2NvLmdpZiIsIHRydWUpOyAvLyROT04tTkxTLTEkCisKKwkJZGVjbGFyZVdvcmtiZW5jaEltYWdlKGlkZUJ1bmRsZSwKKwkJCQlJREVJbnRlcm5hbFdvcmtiZW5jaEltYWdlcy5JTUdfRExDTF9RVUlDS19GSVhfRElTQUJMRUQsCisJCQkJUEFUSF9ETE9DQUxUT09MICsgInNtYXJ0bW9kZV9jby5naWYiLCB0cnVlKTsgLy8kTk9OLU5MUy0xJAorCisJCS8vIHRhc2sgb2JqZWN0cworCQkvLyBkZWNsYXJlUmVnaXN0cnlJbWFnZShJREVJbnRlcm5hbFdvcmtiZW5jaEltYWdlcy5JTUdfT0JKU19IUFJJT19UU0ssCisJCS8vIFBBVEhfT0JKRUNUKyJocHJpb190c2suZ2lmIik7CisJCS8vIGRlY2xhcmVSZWdpc3RyeUltYWdlKElERUludGVybmFsV29ya2JlbmNoSW1hZ2VzLklNR19PQkpTX01QUklPX1RTSywKKwkJLy8gUEFUSF9PQkpFQ1QrIm1wcmlvX3Rzay5naWYiKTsKKwkJLy8gZGVjbGFyZVJlZ2lzdHJ5SW1hZ2UoSURFSW50ZXJuYWxXb3JrYmVuY2hJbWFnZXMuSU1HX09CSlNfTFBSSU9fVFNLLAorCQkvLyBQQVRIX09CSkVDVCsibHByaW9fdHNrLmdpZiIpOworCisJCWRlY2xhcmVXb3JrYmVuY2hJbWFnZShpZGVCdW5kbGUsIElERS5TaGFyZWRJbWFnZXMuSU1HX09CSlNfVEFTS19UU0ssCisJCQkJUEFUSF9PQkpFQ1QgKyAidGFza21ya190c2suZ2lmIiwgdHJ1ZSk7IC8vJE5PTi1OTFMtMSQKKwkJZGVjbGFyZVdvcmtiZW5jaEltYWdlKGlkZUJ1bmRsZSwgSURFLlNoYXJlZEltYWdlcy5JTUdfT0JKU19CS01SS19UU0ssCisJCQkJUEFUSF9PQkpFQ1QgKyAiYmttcmtfdHNrLmdpZiIsIHRydWUpOyAvLyROT04tTkxTLTEkCisKKwkJZGVjbGFyZVdvcmtiZW5jaEltYWdlKGlkZUJ1bmRsZSwKKwkJCQlJREVJbnRlcm5hbFdvcmtiZW5jaEltYWdlcy5JTUdfT0JKU19DT01QTEVURV9UU0ssIFBBVEhfT0JKRUNUCisJCQkJCQkrICJjb21wbGV0ZV90c2suZ2lmIiwgdHJ1ZSk7IC8vJE5PTi1OTFMtMSQKKwkJZGVjbGFyZVdvcmtiZW5jaEltYWdlKGlkZUJ1bmRsZSwKKwkJCQlJREVJbnRlcm5hbFdvcmtiZW5jaEltYWdlcy5JTUdfT0JKU19JTkNPTVBMRVRFX1RTSywgUEFUSF9PQkpFQ1QKKwkJCQkJCSsgImluY29tcGxldGVfdHNrLmdpZiIsIHRydWUpOyAvLyROT04tTkxTLTEkCisJCWRlY2xhcmVXb3JrYmVuY2hJbWFnZShpZGVCdW5kbGUsCisJCQkJSURFSW50ZXJuYWxXb3JrYmVuY2hJbWFnZXMuSU1HX09CSlNfV0VMQ09NRV9JVEVNLCBQQVRIX09CSkVDVAorCQkJCQkJKyAid2VsY29tZV9pdGVtLmdpZiIsIHRydWUpOyAvLyROT04tTkxTLTEkCisJCWRlY2xhcmVXb3JrYmVuY2hJbWFnZShpZGVCdW5kbGUsCisJCQkJSURFSW50ZXJuYWxXb3JrYmVuY2hJbWFnZXMuSU1HX09CSlNfV0VMQ09NRV9CQU5ORVIsIFBBVEhfT0JKRUNUCisJCQkJCQkrICJ3ZWxjb21lX2Jhbm5lci5naWYiLCB0cnVlKTsgLy8kTk9OLU5MUy0xJAorCQlkZWNsYXJlV29ya2JlbmNoSW1hZ2UoaWRlQnVuZGxlLAorCQkJCUlERUludGVybmFsV29ya2JlbmNoSW1hZ2VzLklNR19PQkpTX0VSUk9SX1BBVEgsIFBBVEhfT0JKRUNUCisJCQkJCQkrICJlcnJvcl90c2suZ2lmIiwgdHJ1ZSk7IC8vJE5PTi1OTFMtMSQKKwkJZGVjbGFyZVdvcmtiZW5jaEltYWdlKGlkZUJ1bmRsZSwKKwkJCQlJREVJbnRlcm5hbFdvcmtiZW5jaEltYWdlcy5JTUdfT0JKU19XQVJOSU5HX1BBVEgsIFBBVEhfT0JKRUNUCisJCQkJCQkrICJ3YXJuX3Rzay5naWYiLCB0cnVlKTsgLy8kTk9OLU5MUy0xJAorCQlkZWNsYXJlV29ya2JlbmNoSW1hZ2UoaWRlQnVuZGxlLAorCQkJCUlERUludGVybmFsV29ya2JlbmNoSW1hZ2VzLklNR19PQkpTX0lORk9fUEFUSCwgUEFUSF9PQkpFQ1QKKwkJCQkJCSsgImluZm9fdHNrLmdpZiIsIHRydWUpOyAvLyROT04tTkxTLTEkCisKKwkJZGVjbGFyZVdvcmtiZW5jaEltYWdlKGlkZUJ1bmRsZSwKKwkJCQlJREVJbnRlcm5hbFdvcmtiZW5jaEltYWdlcy5JTUdfTENMX0ZMQVRfTEFZT1VULCBQQVRIX0VMT0NBTFRPT0wKKwkJCQkJCSsgImZsYXRMYXlvdXQuZ2lmIiwgdHJ1ZSk7IC8vJE5PTi1OTFMtMSQKKwkJZGVjbGFyZVdvcmtiZW5jaEltYWdlKGlkZUJ1bmRsZSwKKwkJCQlJREVJbnRlcm5hbFdvcmtiZW5jaEltYWdlcy5JTUdfTENMX0hJRVJBUkNISUNBTF9MQVlPVVQsCisJCQkJUEFUSF9FTE9DQUxUT09MICsgImhpZXJhcmNoaWNhbExheW91dC5naWYiLCB0cnVlKTsgLy8kTk9OLU5MUy0xJAorCQlkZWNsYXJlV29ya2JlbmNoSW1hZ2UoaWRlQnVuZGxlLAorCQkJCUlERUludGVybmFsV29ya2JlbmNoSW1hZ2VzLklNR19FVE9PTF9QUk9CTEVNX0NBVEVHT1JZLAorCQkJCVBBVEhfRVRPT0wgKyAicHJvYmxlbV9jYXRlZ29yeS5naWYiLCB0cnVlKTsgLy8kTk9OLU5MUy0xJAorCQorCQkvLyBzeW5jaHJvbml6YXRpb24gaW5kaWNhdG9yIG9iamVjdHMKKwkJLy8gZGVjbGFyZVJlZ2lzdHJ5SW1hZ2UoSURFSW50ZXJuYWxXb3JrYmVuY2hJbWFnZXMuSU1HX09CSlNfV0JFVF9TVEFULAorCQkvLyBQQVRIX09WRVJMQVkrIndiZXRfc3RhdC5naWYiKTsKKwkJLy8gZGVjbGFyZVJlZ2lzdHJ5SW1hZ2UoSURFSW50ZXJuYWxXb3JrYmVuY2hJbWFnZXMuSU1HX09CSlNfU0JFVF9TVEFULAorCQkvLyBQQVRIX09WRVJMQVkrInNiZXRfc3RhdC5naWYiKTsKKwkJLy8gZGVjbGFyZVJlZ2lzdHJ5SW1hZ2UoSURFSW50ZXJuYWxXb3JrYmVuY2hJbWFnZXMuSU1HX09CSlNfQ09ORkxJQ1RfU1RBVCwKKwkJLy8gUEFUSF9PVkVSTEFZKyJjb25mbGljdF9zdGF0LmdpZiIpOworCisJCS8vIGNvbnRlbnQgbG9jYWxpdHkgaW5kaWNhdG9yIG9iamVjdHMKKwkJLy8gZGVjbGFyZVJlZ2lzdHJ5SW1hZ2UoSURFSW50ZXJuYWxXb3JrYmVuY2hJbWFnZXMuSU1HX09CSlNfTk9UTE9DQUxfU1RBVCwKKwkJLy8gUEFUSF9TVEFUKyJub3Rsb2NhbF9zdGF0LmdpZiIpOworCQkvLyBkZWNsYXJlUmVnaXN0cnlJbWFnZShJREVJbnRlcm5hbFdvcmtiZW5jaEltYWdlcy5JTUdfT0JKU19MT0NBTF9TVEFULAorCQkvLyBQQVRIX1NUQVQrImxvY2FsX3N0YXQuZ2lmIik7CisJCS8vIGRlY2xhcmVSZWdpc3RyeUltYWdlKElERUludGVybmFsV29ya2JlbmNoSW1hZ2VzLklNR19PQkpTX0ZJTExMT0NBTF9TVEFULAorCQkvLyBQQVRIX1NUQVQrImZpbGxsb2NhbF9zdGF0LmdpZiIpOworCX0KKworCS8qKgorCSAqIERlY2xhcmVzIGFuIElERS1zcGVjaWZpYyB3b3JrYmVuY2ggaW1hZ2UuCisJICogCisJICogQHBhcmFtIHN5bWJvbGljTmFtZQorCSAqICAgICAgICAgICAgdGhlIHN5bWJvbGljIG5hbWUgb2YgdGhlIGltYWdlCisJICogQHBhcmFtIHBhdGgKKwkgKiAgICAgICAgICAgIHRoZSBwYXRoIG9mIHRoZSBpbWFnZSBmaWxlOyB0aGlzIHBhdGggaXMgcmVsYXRpdmUgdG8gdGhlIGJhc2UKKwkgKiAgICAgICAgICAgIG9mIHRoZSBJREUgcGx1Zy1pbgorCSAqIEBwYXJhbSBzaGFyZWQKKwkgKiAgICAgICAgICAgIDxjb2RlPnRydWU8L2NvZGU+IGlmIHRoaXMgaXMgYSBzaGFyZWQgaW1hZ2UsIGFuZAorCSAqICAgICAgICAgICAgPGNvZGU+ZmFsc2U8L2NvZGU+IGlmIHRoaXMgaXMgbm90IGEgc2hhcmVkIGltYWdlCisJICogQHNlZSBJV29ya2JlbmNoQ29uZmlndXJlciNkZWNsYXJlSW1hZ2UKKwkgKi8KKwlwcml2YXRlIHZvaWQgZGVjbGFyZVdvcmtiZW5jaEltYWdlKEJ1bmRsZSBpZGVCdW5kbGUsIFN0cmluZyBzeW1ib2xpY05hbWUsCisJCQlTdHJpbmcgcGF0aCwgYm9vbGVhbiBzaGFyZWQpIHsKKwkJVVJMIHVybCA9IEZpbGVMb2NhdG9yLmZpbmQoaWRlQnVuZGxlLCBuZXcgUGF0aChwYXRoKSwgbnVsbCk7CisJCUltYWdlRGVzY3JpcHRvciBkZXNjID0gSW1hZ2VEZXNjcmlwdG9yLmNyZWF0ZUZyb21VUkwodXJsKTsKKwkJZ2V0V29ya2JlbmNoQ29uZmlndXJlcigpLmRlY2xhcmVJbWFnZShzeW1ib2xpY05hbWUsIGRlc2MsIHNoYXJlZCk7CisJfQorCQorCQorCS8qKgorCSAqIFJDUCdzIGFwcGxpY2F0aW9uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHN0YXRpYyBjbGFzcyBBcHBsaWNhdGlvbiBpbXBsZW1lbnRzIElBcHBsaWNhdGlvbiB7CisJCS8qKgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLmVxdWlub3guYXBwLklBcHBsaWNhdGlvbiNzdGFydChvcmcuZWNsaXBzZS5lcXVpbm94LmFwcC5JQXBwbGljYXRpb25Db250ZXh0KQorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJcHVibGljIE9iamVjdCBzdGFydChJQXBwbGljYXRpb25Db250ZXh0IGNvbnRleHQpIHRocm93cyBFeGNlcHRpb24geworCQkJcmV0dXJuIExhdW5jaGVyRmFjdG9yeS5nZXRMYXVuY2hlcihjb250ZXh0KS5sYXVuY2goKTsKKwkJfQorCisJCS8qKgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLmVxdWlub3guYXBwLklBcHBsaWNhdGlvbiNzdG9wKCkKKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCXB1YmxpYyB2b2lkIHN0b3AoKSB7CisJCQkvLyBEbyBub3RoaW5nLgorCQl9CisJfQorCisJLyoqCisJICogUkNQJ3MgcGVyc3BlY3RpdmUKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIE5PVCBVU0VECisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBzdGF0aWMgY2xhc3MgUGVyc3BlY3RpdmUgaW1wbGVtZW50cyBJUGVyc3BlY3RpdmVGYWN0b3J5IHsKKwkJLyoqCisJCSAqIFBlcnNwZWN0aXZlIElECisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBJRF9QRVJTUEVDVElWRSA9ICJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLnByZXNlbnRhdGlvbi5Db3JlRWRpdG9yQWR2aXNvclBlcnNwZWN0aXZlIjsgLy8kTk9OLU5MUy0xJAorCisJCS8qKgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnVpLklQZXJzcGVjdGl2ZUZhY3RvcnkjY3JlYXRlSW5pdGlhbExheW91dChvcmcuZWNsaXBzZS51aS5JUGFnZUxheW91dCkKKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCXB1YmxpYyB2b2lkIGNyZWF0ZUluaXRpYWxMYXlvdXQoSVBhZ2VMYXlvdXQgbGF5b3V0KSB7CisJCQlsYXlvdXQuc2V0RWRpdG9yQXJlYVZpc2libGUodHJ1ZSk7CisJCQlsYXlvdXQuYWRkUGVyc3BlY3RpdmVTaG9ydGN1dChJRF9QRVJTUEVDVElWRSk7CisKKwkJCUlGb2xkZXJMYXlvdXQgcmlnaHQgPSBsYXlvdXQuY3JlYXRlRm9sZGVyKCJyaWdodCIsIElQYWdlTGF5b3V0LlJJR0hULCAoZmxvYXQpMC42NiwgbGF5b3V0LmdldEVkaXRvckFyZWEoKSk7IC8vJE5PTi1OTFMtMSQKKwkJCXJpZ2h0LmFkZFZpZXcoSVBhZ2VMYXlvdXQuSURfT1VUTElORSk7CisKKwkJCUlGb2xkZXJMYXlvdXQgYm90dG9uUmlnaHQgPSBsYXlvdXQuY3JlYXRlRm9sZGVyKCJib3R0b25SaWdodCIsIElQYWdlTGF5b3V0LkJPVFRPTSwgKGZsb2F0KTAuNjAsICJyaWdodCIpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKKwkJCWJvdHRvblJpZ2h0LmFkZFZpZXcoSVBhZ2VMYXlvdXQuSURfUFJPUF9TSEVFVCk7CisJCX0KKwl9CisJCisJLyoqCisJICogUkNQJ3Mgd2luZG93IGFkdmlzb3IKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGNsYXNzIFdpbmRvd0Fkdmlzb3IgZXh0ZW5kcyBXb3JrYmVuY2hXaW5kb3dBZHZpc29yIHsKKwkJLyoqCisJCSAqIEBzZWUgV29ya2JlbmNoV2luZG93QWR2aXNvciNXb3JrYmVuY2hXaW5kb3dBZHZpc29yKG9yZy5lY2xpcHNlLnVpLmFwcGxpY2F0aW9uLklXb3JrYmVuY2hXaW5kb3dDb25maWd1cmVyKQorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJcHVibGljIFdpbmRvd0Fkdmlzb3IoSVdvcmtiZW5jaFdpbmRvd0NvbmZpZ3VyZXIgY29uZmlndXJlcikgeworCQkJc3VwZXIoY29uZmlndXJlcik7CisJCX0KKwkJCisJCS8qKgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnVpLmFwcGxpY2F0aW9uLldvcmtiZW5jaFdpbmRvd0Fkdmlzb3IjcHJlV2luZG93T3BlbigpCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkIE5PVAorCQkgKi8KKwkJcHVibGljIHZvaWQgcHJlV2luZG93T3BlbigpIHsKKwkJCUlXb3JrYmVuY2hXaW5kb3dDb25maWd1cmVyIGNvbmZpZ3VyZXIgPSBnZXRXaW5kb3dDb25maWd1cmVyKCk7CisJCQljb25maWd1cmVyLnNldEluaXRpYWxTaXplKG5ldyBQb2ludCgxMDI0LCA3NjgpKTsKKwkJCWNvbmZpZ3VyZXIuc2V0U2hvd0Nvb2xCYXIodHJ1ZSk7CisJCQljb25maWd1cmVyLnNldFNob3dTdGF0dXNMaW5lKHRydWUpOworCQkJY29uZmlndXJlci5zZXRTaG93RmFzdFZpZXdCYXJzKHRydWUpOworCQkJY29uZmlndXJlci5zZXRTaG93UHJvZ3Jlc3NJbmRpY2F0b3IodHJ1ZSk7CisJCQljb25maWd1cmVyLnNldFNob3dQZXJzcGVjdGl2ZUJhcih0cnVlKTsKKwkJfSAvLyBwcmVXaW5kb3dPcGVuCisJCQorCQkvKioKKwkJICogQHNlZSBvcmcuZWNsaXBzZS51aS5hcHBsaWNhdGlvbi5Xb3JrYmVuY2hXaW5kb3dBZHZpc29yI3ByZVdpbmRvd1NoZWxsQ2xvc2UoKQorCQkgKi8KKwkJQE92ZXJyaWRlCisJCXB1YmxpYyBib29sZWFuIHByZVdpbmRvd1NoZWxsQ2xvc2UoKSB7CisJCQl0cnkgeworCQkJCS8vc2F2ZSB0aGUgZnVsbCB3b3Jrc3BhY2UgYmVmb3JlIHF1aXQKKwkJCQlSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuc2F2ZSh0cnVlLCBudWxsKTsKKwkJCX0gY2F0Y2ggKGZpbmFsIENvcmVFeGNlcHRpb24gZSkgeworCQkJCUFjdGl2YXRvci5sb2dFcnJvcigiRmFpbGVkIHRvIHNhdmUgd29ya3NwYWNlIGJlZm9yZSBxdWl0dGluZyIsIGUpOworCQkJfQorCQkJcmV0dXJuIHRydWU7CisJCX0KKworCQkvKioKKwkJICogQHNlZSBvcmcuZWNsaXBzZS51aS5hcHBsaWNhdGlvbi5Xb3JrYmVuY2hXaW5kb3dBZHZpc29yI2NyZWF0ZUFjdGlvbkJhckFkdmlzb3Iob3JnLmVjbGlwc2UudWkuYXBwbGljYXRpb24uSUFjdGlvbkJhckNvbmZpZ3VyZXIpCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlAT3ZlcnJpZGUKKwkJcHVibGljIEFjdGlvbkJhckFkdmlzb3IgY3JlYXRlQWN0aW9uQmFyQWR2aXNvcihJQWN0aW9uQmFyQ29uZmlndXJlciBjb25maWd1cmVyKSB7CisJCQlyZXR1cm4gbmV3IFdpbmRvd0FjdGlvbkJhckFkdmlzb3IoY29uZmlndXJlcik7CisJCX0KKwl9CisKKwkvKioKKwkgKiBSQ1AncyBhY3Rpb24gYmFyIGFkdmlzb3IKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGNsYXNzIFdpbmRvd0FjdGlvbkJhckFkdmlzb3IgZXh0ZW5kcyBBY3Rpb25CYXJBZHZpc29yIHsKKwkJLyoqCisJCSAqIEBzZWUgQWN0aW9uQmFyQWR2aXNvciNBY3Rpb25CYXJBZHZpc29yKG9yZy5lY2xpcHNlLnVpLmFwcGxpY2F0aW9uLklBY3Rpb25CYXJDb25maWd1cmVyKQorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJcHVibGljIFdpbmRvd0FjdGlvbkJhckFkdmlzb3IoSUFjdGlvbkJhckNvbmZpZ3VyZXIgY29uZmlndXJlcikgeworCQkJc3VwZXIoY29uZmlndXJlcik7CisJCX0KKwkJCisJCS8qKgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnVpLmFwcGxpY2F0aW9uLkFjdGlvbkJhckFkdmlzb3IjZmlsbE1lbnVCYXIob3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklNZW51TWFuYWdlcikKKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUBPdmVycmlkZQorCQlwcm90ZWN0ZWQgdm9pZCBmaWxsTWVudUJhcihJTWVudU1hbmFnZXIgbWVudUJhcikgeworCQkJSVdvcmtiZW5jaFdpbmRvdyB3aW5kb3cgPSBnZXRBY3Rpb25CYXJDb25maWd1cmVyKCkuZ2V0V2luZG93Q29uZmlndXJlcigpLmdldFdpbmRvdygpOworCQkJbWVudUJhci5hZGQoY3JlYXRlRmlsZU1lbnUod2luZG93KSk7CisJCQltZW51QmFyLmFkZChjcmVhdGVFZGl0TWVudSh3aW5kb3cpKTsKKwkJCW1lbnVCYXIuYWRkKG5ldyBHcm91cE1hcmtlcihJV29ya2JlbmNoQWN0aW9uQ29uc3RhbnRzLk1CX0FERElUSU9OUykpOworCQkJbWVudUJhci5hZGQoY3JlYXRlV2luZG93TWVudSh3aW5kb3cpKTsKKwkJCW1lbnVCYXIuYWRkKGNyZWF0ZUhlbHBNZW51KHdpbmRvdykpOwkJCQkJCisJCX0KKwkJCisJCS8qKgorCQkgKiBDcmVhdGVzIHRoZSAnRmlsZScgbWVudS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQgTk9UCisJCSAqLworCQlwcm90ZWN0ZWQgSU1lbnVNYW5hZ2VyIGNyZWF0ZUZpbGVNZW51KElXb3JrYmVuY2hXaW5kb3cgd2luZG93KSB7CisJCQlJTWVudU1hbmFnZXIgbWVudSA9IG5ldyBNZW51TWFuYWdlcihnZXRTdHJpbmcoIl9VSV9NZW51X0ZpbGVfbGFiZWwiKSwgLy8kTk9OLU5MUy0xJAorCQkJSVdvcmtiZW5jaEFjdGlvbkNvbnN0YW50cy5NX0ZJTEUpOyAgICAKKwkJCW1lbnUuYWRkKG5ldyBHcm91cE1hcmtlcihJV29ya2JlbmNoQWN0aW9uQ29uc3RhbnRzLkZJTEVfU1RBUlQpKTsKKwkKKwkJCUlNZW51TWFuYWdlciBuZXdNZW51ID0gbmV3IE1lbnVNYW5hZ2VyKGdldFN0cmluZygiX1VJX01lbnVfTmV3X2xhYmVsIiksICJuZXciKTsgLy8kTk9OLU5MUy0xJCAgLy8kTk9OLU5MUy0yJAorCQkJbmV3TWVudS5hZGQobmV3IEdyb3VwTWFya2VyKElXb3JrYmVuY2hBY3Rpb25Db25zdGFudHMuTUJfQURESVRJT05TKSk7CisJCisJCQltZW51LmFkZChuZXdNZW51KTsKKwkJCW1lbnUuYWRkKG5ldyBTZXBhcmF0b3IoKSk7CisJCQltZW51LmFkZChuZXcgR3JvdXBNYXJrZXIoSVdvcmtiZW5jaEFjdGlvbkNvbnN0YW50cy5NQl9BRERJVElPTlMpKTsKKwkJCW1lbnUuYWRkKG5ldyBTZXBhcmF0b3IoKSk7CisJCQlhZGRUb01lbnVBbmRSZWdpc3RlcihtZW51LCBBY3Rpb25GYWN0b3J5LkNMT1NFLmNyZWF0ZSh3aW5kb3cpKTsKKwkJCWFkZFRvTWVudUFuZFJlZ2lzdGVyKG1lbnUsIEFjdGlvbkZhY3RvcnkuQ0xPU0VfQUxMLmNyZWF0ZSh3aW5kb3cpKTsKKwkJCW1lbnUuYWRkKG5ldyBTZXBhcmF0b3IoKSk7CisJCQlhZGRUb01lbnVBbmRSZWdpc3RlcihtZW51LCBBY3Rpb25GYWN0b3J5LlNBVkUuY3JlYXRlKHdpbmRvdykpOworCQkJYWRkVG9NZW51QW5kUmVnaXN0ZXIobWVudSwgQWN0aW9uRmFjdG9yeS5TQVZFX0FTLmNyZWF0ZSh3aW5kb3cpKTsKKwkJCWFkZFRvTWVudUFuZFJlZ2lzdGVyKG1lbnUsIEFjdGlvbkZhY3RvcnkuU0FWRV9BTEwuY3JlYXRlKHdpbmRvdykpOworCQkJbWVudS5hZGQobmV3IFNlcGFyYXRvcigpKTsKKwkJCWFkZFRvTWVudUFuZFJlZ2lzdGVyKG1lbnUsIEFjdGlvbkZhY3RvcnkuSU1QT1JULmNyZWF0ZSh3aW5kb3cpKTsKKwkJCWFkZFRvTWVudUFuZFJlZ2lzdGVyKG1lbnUsIEFjdGlvbkZhY3RvcnkuRVhQT1JULmNyZWF0ZSh3aW5kb3cpKTsKKwkJCW1lbnUuYWRkKG5ldyBTZXBhcmF0b3IoKSk7CisJCQlhZGRUb01lbnVBbmRSZWdpc3RlcihtZW51LCBTd2l0Y2hMb2NhbGVBY3Rpb24uU1dJVENIX0xPQ0FMRV9BQ1RJT04uY3JlYXRlKHdpbmRvdykpOworCQkJbWVudS5hZGQobmV3IFNlcGFyYXRvcigpKTsKKwkJCWFkZFRvTWVudUFuZFJlZ2lzdGVyKG1lbnUsIEFjdGlvbkZhY3RvcnkuUVVJVC5jcmVhdGUod2luZG93KSk7CisJCQltZW51LmFkZChuZXcgR3JvdXBNYXJrZXIoSVdvcmtiZW5jaEFjdGlvbkNvbnN0YW50cy5GSUxFX0VORCkpOworCQkJCisJCQkKKwkJCXJldHVybiBtZW51OworCQl9CisKKwkJLyoqCisJCSAqIENyZWF0ZXMgdGhlICdFZGl0JyBtZW51LgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJcHJvdGVjdGVkIElNZW51TWFuYWdlciBjcmVhdGVFZGl0TWVudShJV29ya2JlbmNoV2luZG93IHdpbmRvdykgeworCQkJSU1lbnVNYW5hZ2VyIG1lbnUgPSBuZXcgTWVudU1hbmFnZXIoZ2V0U3RyaW5nKCJfVUlfTWVudV9FZGl0X2xhYmVsIiksIC8vJE5PTi1OTFMtMSQKKwkJCUlXb3JrYmVuY2hBY3Rpb25Db25zdGFudHMuTV9FRElUKTsKKwkJCW1lbnUuYWRkKG5ldyBHcm91cE1hcmtlcihJV29ya2JlbmNoQWN0aW9uQ29uc3RhbnRzLkVESVRfU1RBUlQpKTsKKwkKKwkJCWFkZFRvTWVudUFuZFJlZ2lzdGVyKG1lbnUsIEFjdGlvbkZhY3RvcnkuVU5ETy5jcmVhdGUod2luZG93KSk7CisJCQlhZGRUb01lbnVBbmRSZWdpc3RlcihtZW51LCBBY3Rpb25GYWN0b3J5LlJFRE8uY3JlYXRlKHdpbmRvdykpOworCQkJbWVudS5hZGQobmV3IEdyb3VwTWFya2VyKElXb3JrYmVuY2hBY3Rpb25Db25zdGFudHMuVU5ET19FWFQpKTsKKwkJCW1lbnUuYWRkKG5ldyBTZXBhcmF0b3IoKSk7CisJCisJCQlhZGRUb01lbnVBbmRSZWdpc3RlcihtZW51LCBBY3Rpb25GYWN0b3J5LkNVVC5jcmVhdGUod2luZG93KSk7CisJCQlhZGRUb01lbnVBbmRSZWdpc3RlcihtZW51LCBBY3Rpb25GYWN0b3J5LkNPUFkuY3JlYXRlKHdpbmRvdykpOworCQkJYWRkVG9NZW51QW5kUmVnaXN0ZXIobWVudSwgQWN0aW9uRmFjdG9yeS5QQVNURS5jcmVhdGUod2luZG93KSk7CisJCQltZW51LmFkZChuZXcgR3JvdXBNYXJrZXIoSVdvcmtiZW5jaEFjdGlvbkNvbnN0YW50cy5DVVRfRVhUKSk7CisJCQltZW51LmFkZChuZXcgU2VwYXJhdG9yKCkpOworCQorCQkJYWRkVG9NZW51QW5kUmVnaXN0ZXIobWVudSwgQWN0aW9uRmFjdG9yeS5ERUxFVEUuY3JlYXRlKHdpbmRvdykpOworCQkJYWRkVG9NZW51QW5kUmVnaXN0ZXIobWVudSwgQWN0aW9uRmFjdG9yeS5TRUxFQ1RfQUxMLmNyZWF0ZSh3aW5kb3cpKTsKKwkJCW1lbnUuYWRkKG5ldyBTZXBhcmF0b3IoKSk7CisJCisJCQltZW51LmFkZChuZXcgR3JvdXBNYXJrZXIoSVdvcmtiZW5jaEFjdGlvbkNvbnN0YW50cy5BRERfRVhUKSk7CisJCisJCQltZW51LmFkZChuZXcgR3JvdXBNYXJrZXIoSVdvcmtiZW5jaEFjdGlvbkNvbnN0YW50cy5FRElUX0VORCkpOworCQkJbWVudS5hZGQobmV3IFNlcGFyYXRvcihJV29ya2JlbmNoQWN0aW9uQ29uc3RhbnRzLk1CX0FERElUSU9OUykpOworCQkJcmV0dXJuIG1lbnU7CisJCX0KKwkKKwkJLyoqCisJCSAqIENyZWF0ZXMgdGhlICdXaW5kb3cnIG1lbnUuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkIE5PVAorCQkgKi8KKwkJcHJvdGVjdGVkIElNZW51TWFuYWdlciBjcmVhdGVXaW5kb3dNZW51KElXb3JrYmVuY2hXaW5kb3cgd2luZG93KSB7CisJCQlJTWVudU1hbmFnZXIgbWVudSA9IG5ldyBNZW51TWFuYWdlcihnZXRTdHJpbmcoIl9VSV9NZW51X1dpbmRvd19sYWJlbCIpLCAvLyROT04tTkxTLTEkCisJCQlJV29ya2JlbmNoQWN0aW9uQ29uc3RhbnRzLk1fV0lORE9XKTsKKwkJCWFkZFRvTWVudUFuZFJlZ2lzdGVyKG1lbnUsIEFjdGlvbkZhY3RvcnkuT1BFTl9QRVJTUEVDVElWRV9ESUFMT0cuY3JlYXRlKHdpbmRvdykpOworCQkJYWRkVG9NZW51QW5kUmVnaXN0ZXIobWVudSwgQWN0aW9uRmFjdG9yeS5PUEVOX05FV19XSU5ET1cuY3JlYXRlKHdpbmRvdykpOworCQkKKwkJCW1lbnUuYWRkKENvbnRyaWJ1dGlvbkl0ZW1GYWN0b3J5Lk9QRU5fV0lORE9XUy5jcmVhdGUod2luZG93KSk7CisJCQltZW51LmFkZChDb250cmlidXRpb25JdGVtRmFjdG9yeS5WSUVXU19TSE9SVExJU1QuY3JlYXRlKHdpbmRvdykpOworCQkJYWRkVG9NZW51QW5kUmVnaXN0ZXIobWVudSwgQWN0aW9uRmFjdG9yeS5QUkVGRVJFTkNFUy5jcmVhdGUod2luZG93KSk7CisJCQkKKwkJCW1lbnUuYWRkKG5ldyBTZXBhcmF0b3IoSVdvcmtiZW5jaEFjdGlvbkNvbnN0YW50cy5NQl9BRERJVElPTlMpKTsKKwkJCQorCQkJSVdvcmtiZW5jaEFjdGlvbiByZXNldFBlcnNwZWN0aXZlID0gQWN0aW9uRmFjdG9yeS5SRVNFVF9QRVJTUEVDVElWRS5jcmVhdGUod2luZG93KTsKKwkJCWFkZFRvTWVudUFuZFJlZ2lzdGVyKG1lbnUscmVzZXRQZXJzcGVjdGl2ZSk7CisJCQkKKwkJCW1lbnUuYWRkKG5ldyBHcm91cE1hcmtlcihJV29ya2JlbmNoQWN0aW9uQ29uc3RhbnRzLk1CX0FERElUSU9OUykpOworCQkJCisJCQlyZXR1cm4gbWVudTsKKwkJfSAvLyBjcmVhdGVXaW5kb3dNZW51CisJCisJCS8qKgorCQkgKiBDcmVhdGVzIHRoZSAnSGVscCcgbWVudS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQgTk9UCisJCSAqLworCQlwcm90ZWN0ZWQgSU1lbnVNYW5hZ2VyIGNyZWF0ZUhlbHBNZW51KElXb3JrYmVuY2hXaW5kb3cgd2luZG93KSB7CisJCQlJTWVudU1hbmFnZXIgbWVudSA9IG5ldyBNZW51TWFuYWdlcihnZXRTdHJpbmcoIl9VSV9NZW51X0hlbHBfbGFiZWwiKSwgSVdvcmtiZW5jaEFjdGlvbkNvbnN0YW50cy5NX0hFTFApOyAvLyROT04tTkxTLTEkCisJCQkvLyBXZWxjb21lIG9yIGludHJvIHBhZ2Ugd291bGQgZ28gaGVyZQorCQkJLy8gSGVscCBjb250ZW50cyB3b3VsZCBnbyBoZXJlCisJCQkvLyBUaXBzIGFuZCB0cmlja3MgcGFnZSB3b3VsZCBnbyBoZXJlCisJCQlJV29ya2JlbmNoQWN0aW9uIGhlbHBJbnRybyA9IEFjdGlvbkZhY3RvcnkuSU5UUk8uY3JlYXRlKHdpbmRvdyk7CisJCQlJV29ya2JlbmNoQWN0aW9uIGFib3V0QWN0aW9uID0gQWN0aW9uRmFjdG9yeS5BQk9VVC5jcmVhdGUod2luZG93KTsJCQkKKwkJCUlXb3JrYmVuY2hBY3Rpb24gY29udGVudHNBY3Rpb24gPSBBY3Rpb25GYWN0b3J5LkhFTFBfQ09OVEVOVFMuY3JlYXRlKHdpbmRvdyk7CisJCQkKKwkJCW1lbnUuYWRkKG5ldyBHcm91cE1hcmtlcihJV29ya2JlbmNoQWN0aW9uQ29uc3RhbnRzLkhFTFBfU1RBUlQpKTsKKwkJCWFkZFRvTWVudUFuZFJlZ2lzdGVyKG1lbnUsaGVscEludHJvKTsKKwkJCWFkZFRvTWVudUFuZFJlZ2lzdGVyKG1lbnUsY29udGVudHNBY3Rpb24pOworCQkJYWRkVG9NZW51QW5kUmVnaXN0ZXIobWVudSxhYm91dEFjdGlvbik7CisJCQltZW51LmFkZChuZXcgR3JvdXBNYXJrZXIoSVdvcmtiZW5jaEFjdGlvbkNvbnN0YW50cy5IRUxQX0VORCkpOworCQkJbWVudS5hZGQobmV3IEdyb3VwTWFya2VyKElXb3JrYmVuY2hBY3Rpb25Db25zdGFudHMuTUJfQURESVRJT05TKSk7CisJCQlyZXR1cm4gbWVudTsKKwkJfQorCQkKKwkJLyoqCisJCSAqIEFkZHMgdGhlIHNwZWNpZmllZCBhY3Rpb24gdG8gdGhlIGdpdmVuIG1lbnUgYW5kIGFsc28gcmVnaXN0ZXJzIHRoZSBhY3Rpb24gd2l0aCB0aGUKKwkJICogYWN0aW9uIGJhciBjb25maWd1cmVyLCBpbiBvcmRlciB0byBhY3RpdmF0ZSBpdHMga2V5IGJpbmRpbmcuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlwcm90ZWN0ZWQgdm9pZCBhZGRUb01lbnVBbmRSZWdpc3RlcihJTWVudU1hbmFnZXIgbWVudU1hbmFnZXIsIElBY3Rpb24gYWN0aW9uKSB7CisJCQltZW51TWFuYWdlci5hZGQoYWN0aW9uKTsKKwkJCWdldEFjdGlvbkJhckNvbmZpZ3VyZXIoKS5yZWdpc3Rlckdsb2JhbEFjdGlvbihhY3Rpb24pOworCQl9CQkKKwl9CisKKwkvKioKKwkgKiBBYm91dCBhY3Rpb24gZm9yIHRoZSBSQ1AgYXBwbGljYXRpb24uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHN0YXRpYyBjbGFzcyBBYm91dEFjdGlvbiBleHRlbmRzIFdvcmtiZW5jaFdpbmRvd0FjdGlvbkRlbGVnYXRlIHsKKwkJLyoqCisJCSAqIEBzZWUgb3JnLmVjbGlwc2UudWkuSUFjdGlvbkRlbGVnYXRlI3J1bihvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSUFjdGlvbikKKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCXB1YmxpYyB2b2lkIHJ1bihJQWN0aW9uIGFjdGlvbikgeworCQkJTWVzc2FnZURpYWxvZy5vcGVuSW5mb3JtYXRpb24oZ2V0V2luZG93KCkuZ2V0U2hlbGwoKSwgZ2V0U3RyaW5nKCJfVUlfQWJvdXRfdGl0bGUiKSwgLy8kTk9OLU5MUy0xJAorCQkJZ2V0U3RyaW5nKCJfVUlfQWJvdXRfdGV4dCIpKTsgLy8kTk9OLU5MUy0xJAorCQl9CisJfQorCisJLyoqCisJICogT3BlbiBhY3Rpb24gZm9yIHRoZSBvYmplY3RzIGZyb20gdGhlIENvcmUgbW9kZWwuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHN0YXRpYyBjbGFzcyBPcGVuQWN0aW9uIGV4dGVuZHMgV29ya2JlbmNoV2luZG93QWN0aW9uRGVsZWdhdGUgeworCQkvKioKKwkJICogT3BlbnMgdGhlIGVkaXRvcnMgZm9yIHRoZSBmaWxlcyBzZWxlY3RlZCB1c2luZyB0aGUgZmlsZSBkaWFsb2cuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlwdWJsaWMgdm9pZCBydW4oSUFjdGlvbiBhY3Rpb24pIHsKKwkJCVN0cmluZyBmaWxlUGF0aCA9IG9wZW5GaWxlUGF0aERpYWxvZyhnZXRXaW5kb3coKS5nZXRTaGVsbCgpLCBudWxsLCBTV1QuT1BFTik7CisJCQlpZiAoZmlsZVBhdGggIT0gbnVsbCkgeworCQkJCW9wZW5FZGl0b3IoZ2V0V2luZG93KCkuZ2V0V29ya2JlbmNoKCksIFVSSS5jcmVhdGVGaWxlVVJJKGZpbGVQYXRoKSk7CisJCQl9CisJCX0KKwl9CisKKwkvKioKKwkgKiBPcGVuIFVSSSBhY3Rpb24gZm9yIHRoZSBvYmplY3RzIGZyb20gdGhlIENvcmUgbW9kZWwuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHN0YXRpYyBjbGFzcyBPcGVuVVJJQWN0aW9uIGV4dGVuZHMgV29ya2JlbmNoV2luZG93QWN0aW9uRGVsZWdhdGUgeworCQkvKioKKwkJICogT3BlbnMgdGhlIGVkaXRvcnMgZm9yIHRoZSBmaWxlcyBzZWxlY3RlZCB1c2luZyB0aGUgTG9hZFJlc291cmNlRGlhbG9nLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJcHVibGljIHZvaWQgcnVuKElBY3Rpb24gYWN0aW9uKSB7CisJCQlMb2FkUmVzb3VyY2VBY3Rpb24uTG9hZFJlc291cmNlRGlhbG9nIGxvYWRSZXNvdXJjZURpYWxvZyA9IG5ldyBMb2FkUmVzb3VyY2VBY3Rpb24uTG9hZFJlc291cmNlRGlhbG9nKGdldFdpbmRvdygpLmdldFNoZWxsKCkpOworCQkJaWYgKERpYWxvZy5PSyA9PSBsb2FkUmVzb3VyY2VEaWFsb2cub3BlbigpKSB7CisJCQkJZm9yIChVUkkgdXJpIDogbG9hZFJlc291cmNlRGlhbG9nLmdldFVSSXMoKSkgeworCQkJCQlvcGVuRWRpdG9yKGdldFdpbmRvdygpLmdldFdvcmtiZW5jaCgpLCB1cmkpOworCQkJCX0KKwkJCX0KKwkJfQorCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBzdGF0aWMgU3RyaW5nIG9wZW5GaWxlUGF0aERpYWxvZyhTaGVsbCBzaGVsbCwgU3RyaW5nIGZpbGVFeHRlbnNpb25GaWx0ZXIsIGludCBzdHlsZSkgeworCQlGaWxlRGlhbG9nIGZpbGVEaWFsb2cgPSBuZXcgRmlsZURpYWxvZyhzaGVsbCwgc3R5bGUpOworCQlpZiAoZmlsZUV4dGVuc2lvbkZpbHRlciA9PSBudWxsKSB7CisJCQlmaWxlRXh0ZW5zaW9uRmlsdGVyID0KKwkJCQkiKi4iICsgZ2V0U3RyaW5nKCJfVUlfQ29tbW9uRWRpdG9yRmlsZW5hbWVFeHRlbnNpb24iKSArICI7IiArIC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJCAvLyROT04tTkxTLTMkCisJCQkJIiouIiArIGdldFN0cmluZygiX1VJX0dyYXBoRWRpdG9yRmlsZW5hbWVFeHRlbnNpb24iKSArICI7IiArIC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJCAvLyROT04tTkxTLTMkCisJCQkJIiouIiArIGdldFN0cmluZygiX1VJX01vZGVsRWRpdG9yRmlsZW5hbWVFeHRlbnNpb24iKSArICI7IiArIC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJCAvLyROT04tTkxTLTMkCisJCQkJIiouIiArIGdldFN0cmluZygiX1VJX1NjZW5hcmlvRWRpdG9yRmlsZW5hbWVFeHRlbnNpb24iKSArICI7IiArIC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJCAvLyROT04tTkxTLTMkCisJCQkJIiouIiArIGdldFN0cmluZygiX1VJX1NlcXVlbmNlckVkaXRvckZpbGVuYW1lRXh0ZW5zaW9uIik7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAorCQl9CisJCWZpbGVEaWFsb2cuc2V0RmlsdGVyRXh0ZW5zaW9ucyhuZXcgU3RyaW5nW117ZmlsZUV4dGVuc2lvbkZpbHRlcn0pOworCQorCQlmaWxlRGlhbG9nLm9wZW4oKTsKKwkJaWYgKGZpbGVEaWFsb2cuZ2V0RmlsZU5hbWUoKSAhPSBudWxsICYmIGZpbGVEaWFsb2cuZ2V0RmlsZU5hbWUoKS5sZW5ndGgoKSA+IDApIHsKKwkJCXJldHVybiBmaWxlRGlhbG9nLmdldEZpbHRlclBhdGgoKSArIEZpbGUuc2VwYXJhdG9yICsgZmlsZURpYWxvZy5nZXRGaWxlTmFtZSgpOworCQl9CisJCWVsc2UgeworCQkJcmV0dXJuIG51bGw7CisJCX0KKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGJvb2xlYW4gb3BlbkVkaXRvcihJV29ya2JlbmNoIHdvcmtiZW5jaCwgVVJJIGZpbGVVUkkpIHsKKwkJSVdvcmtiZW5jaFdpbmRvdyB3b3JrYmVuY2hXaW5kb3cgPSB3b3JrYmVuY2guZ2V0QWN0aXZlV29ya2JlbmNoV2luZG93KCk7CisJCUlXb3JrYmVuY2hQYWdlIHBhZ2UgPSB3b3JrYmVuY2hXaW5kb3cuZ2V0QWN0aXZlUGFnZSgpOworCQorLy8JCUlFZGl0b3JEZXNjcmlwdG9yIGVkaXRvckRlc2NyaXB0b3IgPSB3b3JrYmVuY2guZ2V0RWRpdG9yUmVnaXN0cnkoKS5nZXREZWZhdWx0RWRpdG9yKGZpbGVVUkkudG9GaWxlU3RyaW5nKCkpOworLy8JCWlmIChlZGl0b3JEZXNjcmlwdG9yID09IG51bGwpIHsKKy8vCQkJTWVzc2FnZURpYWxvZy5vcGVuRXJyb3IoCisvLwkJCXdvcmtiZW5jaFdpbmRvdy5nZXRTaGVsbCgpLAorLy8JCQlnZXRTdHJpbmcoIl9VSV9FcnJvcl90aXRsZSIpLCAgLy8kTk9OLU5MUy0xJAorLy8JCQlnZXRTdHJpbmcoIl9XQVJOX05vX0VkaXRvciIsIGZpbGVVUkkudG9GaWxlU3RyaW5nKCkpKTsgIC8vJE5PTi1OTFMtMSQKKy8vCQkJcmV0dXJuIGZhbHNlOworLy8JCX0KKy8vCQllbHNlIHsKKwkJCXRyeSB7CisJCQkJZmluYWwgSVBhdGggcGF0aCA9IG5ldyBQYXRoKGZpbGVVUkkudG9QbGF0Zm9ybVN0cmluZyh0cnVlKSk7CisJCQkJCisJCQkJSUZpbGUgZiA9IFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5nZXRSb290KCkuZ2V0RmlsZShwYXRoKTsKKwkJCQkKKwkJCQlJREUub3BlbkVkaXRvcihwYWdlLCBmLCB0cnVlKTsKKwkJCQkvL3BhZ2Uub3BlbkVkaXRvcihmLCBlZGl0b3JEZXNjcmlwdG9yLmdldElkKCksIHRydWUpOworCQkJfQorCQkJY2F0Y2ggKFBhcnRJbml0RXhjZXB0aW9uIGV4Y2VwdGlvbikgeworCQkJCU1lc3NhZ2VEaWFsb2cub3BlbkVycm9yKAorCQkJCXdvcmtiZW5jaFdpbmRvdy5nZXRTaGVsbCgpLAorCQkJCWdldFN0cmluZygiX1VJX09wZW5FZGl0b3JFcnJvcl9sYWJlbCIpLCAgLy8kTk9OLU5MUy0xJAorCQkJCWV4Y2VwdGlvbi5nZXRNZXNzYWdlKCkpOworCQkJCXJldHVybiBmYWxzZTsKKwkJCX0KKwkvLwl9CisJCisJCXJldHVybiB0cnVlOworCX0KKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2UudWkuYXBwbGljYXRpb24uV29ya2JlbmNoQWR2aXNvciNnZXRJbml0aWFsV2luZG93UGVyc3BlY3RpdmVJZCgpCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBzZXQgdGhlIGluaXRpYWwgUGVyc3BlY3RpdmUgCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlwdWJsaWMgU3RyaW5nIGdldEluaXRpYWxXaW5kb3dQZXJzcGVjdGl2ZUlkKCkgeworCQkvL3JldHVybiBEZXNpZ25lci5JRF9TVEVNX0RFU0lHTkVSX1BFUlNQRUNUSVZFOworCQlyZXR1cm4gU2ltdWxhdGlvbi5JRF9TVEVNX1NJTVVMQVRJT05fUEVSU1BFQ1RJVkU7CisJfQorCisJCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS51aS5hcHBsaWNhdGlvbi5Xb3JrYmVuY2hBZHZpc29yI2dldE1haW5QcmVmZXJlbmNlUGFnZUlkKCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgU3RyaW5nIGdldE1haW5QcmVmZXJlbmNlUGFnZUlkKCkgeworCQlyZXR1cm4gU1RFTVByZWZlcmVuY2VQYWdlLklEX1NURU1fUFJFRkVSRU5DRV9QQUdFOworCX0gLy8gZ2V0TWFpblByZWZlcmVuY2VQYWdlSWQKKwkKKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2UudWkuYXBwbGljYXRpb24uV29ya2JlbmNoQWR2aXNvciNjcmVhdGVXb3JrYmVuY2hXaW5kb3dBZHZpc29yKG9yZy5lY2xpcHNlLnVpLmFwcGxpY2F0aW9uLklXb3JrYmVuY2hDb25maWd1cmVyKQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBXb3JrYmVuY2hXaW5kb3dBZHZpc29yIGNyZWF0ZVdvcmtiZW5jaFdpbmRvd0Fkdmlzb3IoSVdvcmtiZW5jaFdpbmRvd0NvbmZpZ3VyZXIgY29uZmlndXJlcikgeworCQlyZXR1cm4gbmV3IFdpbmRvd0Fkdmlzb3IoY29uZmlndXJlcik7CisJfQkKKwkKKwkKKworfQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvY29tbW9uL3ByZXNlbnRhdGlvbi9Db3JlRWRpdG9yUGx1Z2luLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9jb21tb24vcHJlc2VudGF0aW9uL0NvcmVFZGl0b3JQbHVnaW4uamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNzIyZjM3Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvY29tbW9uL3ByZXNlbnRhdGlvbi9Db3JlRWRpdG9yUGx1Z2luLmphdmEKQEAgLTAsMCArMSwxMDEgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5wcmVzZW50YXRpb247CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5FTUZQbHVnaW47CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51aS5FY2xpcHNlVUlQbHVnaW47CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlJlc291cmNlTG9jYXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUucHJvdmlkZXIuRWNvcmVFZGl0UGx1Z2luOworCisvKioKKyAqIFRoaXMgaXMgdGhlIGNlbnRyYWwgc2luZ2xldG9uIGZvciB0aGUgQ29yZSBlZGl0b3IgcGx1Z2luLgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQGdlbmVyYXRlZAorICovCitAU3VwcHJlc3NXYXJuaW5ncygiYWxsIikKK3B1YmxpYyBmaW5hbCBjbGFzcyBDb3JlRWRpdG9yUGx1Z2luIGV4dGVuZHMgRU1GUGx1Z2luIHsKKwkvKioKKwkgKiBLZWVwIHRyYWNrIG9mIHRoZSBzaW5nbGV0b24uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBDb3JlRWRpdG9yUGx1Z2luIElOU1RBTkNFID0gbmV3IENvcmVFZGl0b3JQbHVnaW4oKTsKKworCS8qKgorCSAqIEtlZXAgdHJhY2sgb2YgdGhlIHNpbmdsZXRvbi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcml2YXRlIHN0YXRpYyBJbXBsZW1lbnRhdGlvbiBwbHVnaW47CisKKwkvKioKKwkgKiBDcmVhdGUgdGhlIGluc3RhbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBDb3JlRWRpdG9yUGx1Z2luKCkgeworCQlzdXBlcgorCQkJKG5ldyBSZXNvdXJjZUxvY2F0b3IgW10geworCQkJCUVjb3JlRWRpdFBsdWdpbi5JTlNUQU5DRSwKKwkJCX0pOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIHNpbmdsZXRvbiBpbnN0YW5jZSBvZiB0aGUgRWNsaXBzZSBwbHVnaW4uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBzaW5nbGV0b24gaW5zdGFuY2UuCisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBSZXNvdXJjZUxvY2F0b3IgZ2V0UGx1Z2luUmVzb3VyY2VMb2NhdG9yKCkgeworCQlyZXR1cm4gcGx1Z2luOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIHNpbmdsZXRvbiBpbnN0YW5jZSBvZiB0aGUgRWNsaXBzZSBwbHVnaW4uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBzaW5nbGV0b24gaW5zdGFuY2UuCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBzdGF0aWMgSW1wbGVtZW50YXRpb24gZ2V0UGx1Z2luKCkgeworCQlyZXR1cm4gcGx1Z2luOworCX0KKworCS8qKgorCSAqIFRoZSBhY3R1YWwgaW1wbGVtZW50YXRpb24gb2YgdGhlIEVjbGlwc2UgPGI+UGx1Z2luPC9iPi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGNsYXNzIEltcGxlbWVudGF0aW9uIGV4dGVuZHMgRWNsaXBzZVVJUGx1Z2luIHsKKwkJLyoqCisJCSAqIENyZWF0ZXMgYW4gaW5zdGFuY2UuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlwdWJsaWMgSW1wbGVtZW50YXRpb24oKSB7CisJCQlzdXBlcigpOworCQorCQkJLy8gUmVtZW1iZXIgdGhlIHN0YXRpYyBpbnN0YW5jZS4KKwkJCS8vCisJCQlwbHVnaW4gPSB0aGlzOworCQl9CisJfQorCit9CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9leHBlcmltZW50L3ByZXNlbnRhdGlvbi9FeHBlcmltZW50QWN0aW9uQmFyQ29udHJpYnV0b3IuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2V4cGVyaW1lbnQvcHJlc2VudGF0aW9uL0V4cGVyaW1lbnRBY3Rpb25CYXJDb250cmlidXRvci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVmZjYzYWQKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9leHBlcmltZW50L3ByZXNlbnRhdGlvbi9FeHBlcmltZW50QWN0aW9uQmFyQ29udHJpYnV0b3IuamF2YQpAQCAtMCwwICsxLDQzMSBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZXhwZXJpbWVudC5wcmVzZW50YXRpb247CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udWkudmlld2VyLklWaWV3ZXJQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5kb21haW4uRWRpdGluZ0RvbWFpbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5kb21haW4uSUVkaXRpbmdEb21haW5Qcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5hY3Rpb24uQ29udHJvbEFjdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5hY3Rpb24uQ3JlYXRlQ2hpbGRBY3Rpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkuYWN0aW9uLkNyZWF0ZVNpYmxpbmdBY3Rpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkuYWN0aW9uLkVkaXRpbmdEb21haW5BY3Rpb25CYXJDb250cmlidXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5hY3Rpb24uTG9hZFJlc291cmNlQWN0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmFjdGlvbi5WYWxpZGF0ZUFjdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uQWN0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5BY3Rpb25Db250cmlidXRpb25JdGVtOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JQWN0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JQ29udHJpYnV0aW9uSXRlbTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSUNvbnRyaWJ1dGlvbk1hbmFnZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklNZW51TGlzdGVuZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklNZW51TWFuYWdlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSVRvb2xCYXJNYW5hZ2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5NZW51TWFuYWdlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uU2VwYXJhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5TdWJDb250cmlidXRpb25JdGVtOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU3RydWN0dXJlZFNlbGVjdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlNlbGVjdGlvbkNoYW5nZWRFdmVudDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlZpZXdlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLnByZXNlbnRhdGlvbi5Db3JlRWRpdG9yUGx1Z2luOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklFZGl0b3JQYXJ0OworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLlBhcnRJbml0RXhjZXB0aW9uOworCisvKioKKyAqIFRoaXMgaXMgdGhlIGFjdGlvbiBiYXIgY29udHJpYnV0b3IgZm9yIHRoZSBFeHBlcmltZW50IG1vZGVsIGVkaXRvci4KKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIEV4cGVyaW1lbnRBY3Rpb25CYXJDb250cmlidXRvcgorCWV4dGVuZHMgRWRpdGluZ0RvbWFpbkFjdGlvbkJhckNvbnRyaWJ1dG9yCisJaW1wbGVtZW50cyBJU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyIHsKKwkvKioKKwkgKiBUaGlzIGtlZXBzIHRyYWNrIG9mIHRoZSBhY3RpdmUgZWRpdG9yLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBJRWRpdG9yUGFydCBhY3RpdmVFZGl0b3JQYXJ0OworCisJLyoqCisJICogVGhpcyBrZWVwcyB0cmFjayBvZiB0aGUgY3VycmVudCBzZWxlY3Rpb24gcHJvdmlkZXIuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIElTZWxlY3Rpb25Qcm92aWRlciBzZWxlY3Rpb25Qcm92aWRlcjsKKworCS8qKgorCSAqIFRoaXMgYWN0aW9uIG9wZW5zIHRoZSBQcm9wZXJ0aWVzIHZpZXcuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIElBY3Rpb24gc2hvd1Byb3BlcnRpZXNWaWV3QWN0aW9uID0KKwkJbmV3IEFjdGlvbihDb3JlRWRpdG9yUGx1Z2luLklOU1RBTkNFLmdldFN0cmluZygiX1VJX1Nob3dQcm9wZXJ0aWVzVmlld19tZW51X2l0ZW0iKSkgLy8kTk9OLU5MUy0xJAorCQl7CisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyB2b2lkIHJ1bigpIHsKKwkJCQl0cnkgeworCQkJCQlnZXRQYWdlKCkuc2hvd1ZpZXcoIm9yZy5lY2xpcHNlLnVpLnZpZXdzLlByb3BlcnR5U2hlZXQiKTsgLy8kTk9OLU5MUy0xJAorCQkJCX0KKwkJCQljYXRjaCAoUGFydEluaXRFeGNlcHRpb24gZXhjZXB0aW9uKSB7CisJCQkJCUNvcmVFZGl0b3JQbHVnaW4uSU5TVEFOQ0UubG9nKGV4Y2VwdGlvbik7CisJCQkJfQorCQkJfQorCQl9OworCisJLyoqCisJICogVGhpcyBhY3Rpb24gcmVmcmVzaGVzIHRoZSB2aWV3ZXIgb2YgdGhlIGN1cnJlbnQgZWRpdG9yIGlmIHRoZSBlZGl0b3IKKwkgKiBpbXBsZW1lbnRzIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnVpLnZpZXdlci5JVmlld2VyUHJvdmlkZXJ9LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBJQWN0aW9uIHJlZnJlc2hWaWV3ZXJBY3Rpb24gPQorCQluZXcgQWN0aW9uKENvcmVFZGl0b3JQbHVnaW4uSU5TVEFOQ0UuZ2V0U3RyaW5nKCJfVUlfUmVmcmVzaFZpZXdlcl9tZW51X2l0ZW0iKSkgLy8kTk9OLU5MUy0xJAorCQl7CisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyBib29sZWFuIGlzRW5hYmxlZCgpIHsKKwkJCQlyZXR1cm4gYWN0aXZlRWRpdG9yUGFydCBpbnN0YW5jZW9mIElWaWV3ZXJQcm92aWRlcjsKKwkJCX0KKworCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgdm9pZCBydW4oKSB7CisJCQkJaWYgKGFjdGl2ZUVkaXRvclBhcnQgaW5zdGFuY2VvZiBJVmlld2VyUHJvdmlkZXIpIHsKKwkJCQkJVmlld2VyIHZpZXdlciA9ICgoSVZpZXdlclByb3ZpZGVyKWFjdGl2ZUVkaXRvclBhcnQpLmdldFZpZXdlcigpOworCQkJCQlpZiAodmlld2VyICE9IG51bGwpIHsKKwkJCQkJCXZpZXdlci5yZWZyZXNoKCk7CisJCQkJCX0KKwkJCQl9CisJCQl9CisJCX07CisKKwkvKioKKwkgKiBUaGlzIHdpbGwgY29udGFpbiBvbmUge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmFjdGlvbi5DcmVhdGVDaGlsZEFjdGlvbn0gY29ycmVzcG9uZGluZyB0byBlYWNoIGRlc2NyaXB0b3IKKwkgKiBnZW5lcmF0ZWQgZm9yIHRoZSBjdXJyZW50IHNlbGVjdGlvbiBieSB0aGUgaXRlbSBwcm92aWRlci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgQ29sbGVjdGlvbjxJQWN0aW9uPiBjcmVhdGVDaGlsZEFjdGlvbnM7CisKKwkvKioKKwkgKiBUaGlzIGlzIHRoZSBtZW51IG1hbmFnZXIgaW50byB3aGljaCBtZW51IGNvbnRyaWJ1dGlvbiBpdGVtcyBzaG91bGQgYmUgYWRkZWQgZm9yIENyZWF0ZUNoaWxkIGFjdGlvbnMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIElNZW51TWFuYWdlciBjcmVhdGVDaGlsZE1lbnVNYW5hZ2VyOworCisJLyoqCisJICogVGhpcyB3aWxsIGNvbnRhaW4gb25lIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5hY3Rpb24uQ3JlYXRlU2libGluZ0FjdGlvbn0gY29ycmVzcG9uZGluZyB0byBlYWNoIGRlc2NyaXB0b3IKKwkgKiBnZW5lcmF0ZWQgZm9yIHRoZSBjdXJyZW50IHNlbGVjdGlvbiBieSB0aGUgaXRlbSBwcm92aWRlci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgQ29sbGVjdGlvbjxJQWN0aW9uPiBjcmVhdGVTaWJsaW5nQWN0aW9uczsKKworCS8qKgorCSAqIFRoaXMgaXMgdGhlIG1lbnUgbWFuYWdlciBpbnRvIHdoaWNoIG1lbnUgY29udHJpYnV0aW9uIGl0ZW1zIHNob3VsZCBiZSBhZGRlZCBmb3IgQ3JlYXRlU2libGluZyBhY3Rpb25zLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBJTWVudU1hbmFnZXIgY3JlYXRlU2libGluZ01lbnVNYW5hZ2VyOworCisJLyoqCisJICogVGhpcyBjcmVhdGVzIGFuIGluc3RhbmNlIG9mIHRoZSBjb250cmlidXRvci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRXhwZXJpbWVudEFjdGlvbkJhckNvbnRyaWJ1dG9yKCkgeworCQlzdXBlcihBRERJVElPTlNfTEFTVF9TVFlMRSk7CisJCWxvYWRSZXNvdXJjZUFjdGlvbiA9IG5ldyBMb2FkUmVzb3VyY2VBY3Rpb24oKTsKKwkJdmFsaWRhdGVBY3Rpb24gPSBuZXcgVmFsaWRhdGVBY3Rpb24oKTsKKwkJY29udHJvbEFjdGlvbiA9IG5ldyBDb250cm9sQWN0aW9uKCk7CisJfQorCisJLyoqCisJICogVGhpcyBhZGRzIFNlcGFyYXRvcnMgZm9yIGVkaXRvciBhZGRpdGlvbnMgdG8gdGhlIHRvb2wgYmFyLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGNvbnRyaWJ1dGVUb1Rvb2xCYXIoSVRvb2xCYXJNYW5hZ2VyIHRvb2xCYXJNYW5hZ2VyKSB7CisJCXRvb2xCYXJNYW5hZ2VyLmFkZChuZXcgU2VwYXJhdG9yKCJleHBlcmltZW50LXNldHRpbmdzIikpOyAvLyROT04tTkxTLTEkCisJCXRvb2xCYXJNYW5hZ2VyLmFkZChuZXcgU2VwYXJhdG9yKCJleHBlcmltZW50LWFkZGl0aW9ucyIpKTsgLy8kTk9OLU5MUy0xJAorCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyB0byB0aGUgbWVudSBiYXIgYSBtZW51IGFuZCBzb21lIHNlcGFyYXRvcnMgZm9yIGVkaXRvciBhZGRpdGlvbnMsCisJICogYXMgd2VsbCBhcyB0aGUgc3ViLW1lbnVzIGZvciBvYmplY3QgY3JlYXRpb24gaXRlbXMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgY29udHJpYnV0ZVRvTWVudShJTWVudU1hbmFnZXIgbWVudU1hbmFnZXIpIHsKKwkJc3VwZXIuY29udHJpYnV0ZVRvTWVudShtZW51TWFuYWdlcik7CisKKwkJSU1lbnVNYW5hZ2VyIHN1Ym1lbnVNYW5hZ2VyID0gbmV3IE1lbnVNYW5hZ2VyKENvcmVFZGl0b3JQbHVnaW4uSU5TVEFOQ0UuZ2V0U3RyaW5nKCJfVUlfRXhwZXJpbWVudEVkaXRvcl9tZW51IiksICJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZXhwZXJpbWVudE1lbnVJRCIpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKKwkJbWVudU1hbmFnZXIuaW5zZXJ0QWZ0ZXIoImFkZGl0aW9ucyIsIHN1Ym1lbnVNYW5hZ2VyKTsgLy8kTk9OLU5MUy0xJAorCQlzdWJtZW51TWFuYWdlci5hZGQobmV3IFNlcGFyYXRvcigic2V0dGluZ3MiKSk7IC8vJE5PTi1OTFMtMSQKKwkJc3VibWVudU1hbmFnZXIuYWRkKG5ldyBTZXBhcmF0b3IoImFjdGlvbnMiKSk7IC8vJE5PTi1OTFMtMSQKKwkJc3VibWVudU1hbmFnZXIuYWRkKG5ldyBTZXBhcmF0b3IoImFkZGl0aW9ucyIpKTsgLy8kTk9OLU5MUy0xJAorCQlzdWJtZW51TWFuYWdlci5hZGQobmV3IFNlcGFyYXRvcigiYWRkaXRpb25zLWVuZCIpKTsgLy8kTk9OLU5MUy0xJAorCisJCS8vIFByZXBhcmUgZm9yIENyZWF0ZUNoaWxkIGl0ZW0gYWRkaXRpb24gb3IgcmVtb3ZhbC4KKwkJLy8KKwkJY3JlYXRlQ2hpbGRNZW51TWFuYWdlciA9IG5ldyBNZW51TWFuYWdlcihDb3JlRWRpdG9yUGx1Z2luLklOU1RBTkNFLmdldFN0cmluZygiX1VJX0NyZWF0ZUNoaWxkX21lbnVfaXRlbSIpKTsgLy8kTk9OLU5MUy0xJAorCQlzdWJtZW51TWFuYWdlci5pbnNlcnRCZWZvcmUoImFkZGl0aW9ucyIsIGNyZWF0ZUNoaWxkTWVudU1hbmFnZXIpOyAvLyROT04tTkxTLTEkCisKKwkJLy8gUHJlcGFyZSBmb3IgQ3JlYXRlU2libGluZyBpdGVtIGFkZGl0aW9uIG9yIHJlbW92YWwuCisJCS8vCisJCWNyZWF0ZVNpYmxpbmdNZW51TWFuYWdlciA9IG5ldyBNZW51TWFuYWdlcihDb3JlRWRpdG9yUGx1Z2luLklOU1RBTkNFLmdldFN0cmluZygiX1VJX0NyZWF0ZVNpYmxpbmdfbWVudV9pdGVtIikpOyAvLyROT04tTkxTLTEkCisJCXN1Ym1lbnVNYW5hZ2VyLmluc2VydEJlZm9yZSgiYWRkaXRpb25zIiwgY3JlYXRlU2libGluZ01lbnVNYW5hZ2VyKTsgLy8kTk9OLU5MUy0xJAorCisJCS8vIEZvcmNlIGFuIHVwZGF0ZSBiZWNhdXNlIEVjbGlwc2UgaGlkZXMgZW1wdHkgbWVudXMgbm93LgorCQkvLworCQlzdWJtZW51TWFuYWdlci5hZGRNZW51TGlzdGVuZXIKKwkJCShuZXcgSU1lbnVMaXN0ZW5lcigpIHsKKwkJCQkgcHVibGljIHZvaWQgbWVudUFib3V0VG9TaG93KElNZW51TWFuYWdlciBtZW51TWFuYWdlcikgeworCQkJCQkgbWVudU1hbmFnZXIudXBkYXRlQWxsKHRydWUpOworCQkJCSB9CisJCQkgfSk7CisKKwkJYWRkR2xvYmFsQWN0aW9ucyhzdWJtZW51TWFuYWdlcik7CisJfQorCisJLyoqCisJICogV2hlbiB0aGUgYWN0aXZlIGVkaXRvciBjaGFuZ2VzLCB0aGlzIHJlbWVtYmVycyB0aGUgY2hhbmdlIGFuZCByZWdpc3RlcnMgd2l0aCBpdCBhcyBhIHNlbGVjdGlvbiBwcm92aWRlci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBzZXRBY3RpdmVFZGl0b3IoSUVkaXRvclBhcnQgcGFydCkgeworCQlzdXBlci5zZXRBY3RpdmVFZGl0b3IocGFydCk7CisJCWFjdGl2ZUVkaXRvclBhcnQgPSBwYXJ0OworCisJCS8vIFN3aXRjaCB0byB0aGUgbmV3IHNlbGVjdGlvbiBwcm92aWRlci4KKwkJLy8KKwkJaWYgKHNlbGVjdGlvblByb3ZpZGVyICE9IG51bGwpIHsKKwkJCXNlbGVjdGlvblByb3ZpZGVyLnJlbW92ZVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcih0aGlzKTsKKwkJfQorCQlpZiAocGFydCA9PSBudWxsKSB7CisJCQlzZWxlY3Rpb25Qcm92aWRlciA9IG51bGw7CisJCX0KKwkJZWxzZSB7CisJCQlzZWxlY3Rpb25Qcm92aWRlciA9IHBhcnQuZ2V0U2l0ZSgpLmdldFNlbGVjdGlvblByb3ZpZGVyKCk7CisJCQlzZWxlY3Rpb25Qcm92aWRlci5hZGRTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIodGhpcyk7CisKKwkJCS8vIEZha2UgYSBzZWxlY3Rpb24gY2hhbmdlZCBldmVudCB0byB1cGRhdGUgdGhlIG1lbnVzLgorCQkJLy8KKwkJCWlmIChzZWxlY3Rpb25Qcm92aWRlci5nZXRTZWxlY3Rpb24oKSAhPSBudWxsKSB7CisJCQkJc2VsZWN0aW9uQ2hhbmdlZChuZXcgU2VsZWN0aW9uQ2hhbmdlZEV2ZW50KHNlbGVjdGlvblByb3ZpZGVyLCBzZWxlY3Rpb25Qcm92aWRlci5nZXRTZWxlY3Rpb24oKSkpOworCQkJfQorCQl9CisJfQorCisJLyoqCisJICogVGhpcyBpbXBsZW1lbnRzIHtAbGluayBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXJ9LAorCSAqIGhhbmRsaW5nIHtAbGluayBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlNlbGVjdGlvbkNoYW5nZWRFdmVudH1zIGJ5IHF1ZXJ5aW5nIGZvciB0aGUgY2hpbGRyZW4gYW5kIHNpYmxpbmdzCisJICogdGhhdCBjYW4gYmUgYWRkZWQgdG8gdGhlIHNlbGVjdGVkIG9iamVjdCBhbmQgdXBkYXRpbmcgdGhlIG1lbnVzIGFjY29yZGluZ2x5LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogQHBhcmFtIGV2ZW50IAorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZWxlY3Rpb25DaGFuZ2VkKFNlbGVjdGlvbkNoYW5nZWRFdmVudCBldmVudCkgeworCQkvLyBSZW1vdmUgYW55IG1lbnUgaXRlbXMgZm9yIG9sZCBzZWxlY3Rpb24uCisJCS8vCisJCWlmIChjcmVhdGVDaGlsZE1lbnVNYW5hZ2VyICE9IG51bGwpIHsKKwkJCWRlcG9wdWxhdGVNYW5hZ2VyKGNyZWF0ZUNoaWxkTWVudU1hbmFnZXIsIGNyZWF0ZUNoaWxkQWN0aW9ucyk7CisJCX0KKwkJaWYgKGNyZWF0ZVNpYmxpbmdNZW51TWFuYWdlciAhPSBudWxsKSB7CisJCQlkZXBvcHVsYXRlTWFuYWdlcihjcmVhdGVTaWJsaW5nTWVudU1hbmFnZXIsIGNyZWF0ZVNpYmxpbmdBY3Rpb25zKTsKKwkJfQorCisJCS8vIFF1ZXJ5IHRoZSBuZXcgc2VsZWN0aW9uIGZvciBhcHByb3ByaWF0ZSBuZXcgY2hpbGQvc2libGluZyBkZXNjcmlwdG9ycworCQkvLworCQlDb2xsZWN0aW9uPD8+IG5ld0NoaWxkRGVzY3JpcHRvcnMgPSBudWxsOworCQlDb2xsZWN0aW9uPD8+IG5ld1NpYmxpbmdEZXNjcmlwdG9ycyA9IG51bGw7CisKKwkJSVNlbGVjdGlvbiBzZWxlY3Rpb24gPSBldmVudC5nZXRTZWxlY3Rpb24oKTsKKwkJaWYgKHNlbGVjdGlvbiBpbnN0YW5jZW9mIElTdHJ1Y3R1cmVkU2VsZWN0aW9uICYmICgoSVN0cnVjdHVyZWRTZWxlY3Rpb24pc2VsZWN0aW9uKS5zaXplKCkgPT0gMSkgeworCQkJT2JqZWN0IG9iamVjdCA9ICgoSVN0cnVjdHVyZWRTZWxlY3Rpb24pc2VsZWN0aW9uKS5nZXRGaXJzdEVsZW1lbnQoKTsKKworCQkJRWRpdGluZ0RvbWFpbiBkb21haW4gPSAoKElFZGl0aW5nRG9tYWluUHJvdmlkZXIpYWN0aXZlRWRpdG9yUGFydCkuZ2V0RWRpdGluZ0RvbWFpbigpOworCisJCQluZXdDaGlsZERlc2NyaXB0b3JzID0gZG9tYWluLmdldE5ld0NoaWxkRGVzY3JpcHRvcnMob2JqZWN0LCBudWxsKTsKKwkJCW5ld1NpYmxpbmdEZXNjcmlwdG9ycyA9IGRvbWFpbi5nZXROZXdDaGlsZERlc2NyaXB0b3JzKG51bGwsIG9iamVjdCk7CisJCX0KKworCQkvLyBHZW5lcmF0ZSBhY3Rpb25zIGZvciBzZWxlY3Rpb247IHBvcHVsYXRlIGFuZCByZWRyYXcgdGhlIG1lbnVzLgorCQkvLworCQljcmVhdGVDaGlsZEFjdGlvbnMgPSBnZW5lcmF0ZUNyZWF0ZUNoaWxkQWN0aW9ucyhuZXdDaGlsZERlc2NyaXB0b3JzLCBzZWxlY3Rpb24pOworCQljcmVhdGVTaWJsaW5nQWN0aW9ucyA9IGdlbmVyYXRlQ3JlYXRlU2libGluZ0FjdGlvbnMobmV3U2libGluZ0Rlc2NyaXB0b3JzLCBzZWxlY3Rpb24pOworCisJCWlmIChjcmVhdGVDaGlsZE1lbnVNYW5hZ2VyICE9IG51bGwpIHsKKwkJCXBvcHVsYXRlTWFuYWdlcihjcmVhdGVDaGlsZE1lbnVNYW5hZ2VyLCBjcmVhdGVDaGlsZEFjdGlvbnMsIG51bGwpOworCQkJY3JlYXRlQ2hpbGRNZW51TWFuYWdlci51cGRhdGUodHJ1ZSk7CisJCX0KKwkJaWYgKGNyZWF0ZVNpYmxpbmdNZW51TWFuYWdlciAhPSBudWxsKSB7CisJCQlwb3B1bGF0ZU1hbmFnZXIoY3JlYXRlU2libGluZ01lbnVNYW5hZ2VyLCBjcmVhdGVTaWJsaW5nQWN0aW9ucywgbnVsbCk7CisJCQljcmVhdGVTaWJsaW5nTWVudU1hbmFnZXIudXBkYXRlKHRydWUpOworCQl9CisJfQorCisJLyoqCisJICogVGhpcyBnZW5lcmF0ZXMgYSB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkuYWN0aW9uLkNyZWF0ZUNoaWxkQWN0aW9ufSBmb3IgZWFjaCBvYmplY3QgaW4gPGNvZGU+ZGVzY3JpcHRvcnM8L2NvZGU+LAorCSAqIGFuZCByZXR1cm5zIHRoZSBjb2xsZWN0aW9uIG9mIHRoZXNlIGFjdGlvbnMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIENvbGxlY3Rpb248SUFjdGlvbj4gZ2VuZXJhdGVDcmVhdGVDaGlsZEFjdGlvbnMoQ29sbGVjdGlvbjw/PiBkZXNjcmlwdG9ycywgSVNlbGVjdGlvbiBzZWxlY3Rpb24pIHsKKwkJQ29sbGVjdGlvbjxJQWN0aW9uPiBhY3Rpb25zID0gbmV3IEFycmF5TGlzdDxJQWN0aW9uPigpOworCQlpZiAoZGVzY3JpcHRvcnMgIT0gbnVsbCkgeworCQkJZm9yIChPYmplY3QgZGVzY3JpcHRvciA6IGRlc2NyaXB0b3JzKSB7CisJCQkJYWN0aW9ucy5hZGQobmV3IENyZWF0ZUNoaWxkQWN0aW9uKGFjdGl2ZUVkaXRvclBhcnQsIHNlbGVjdGlvbiwgZGVzY3JpcHRvcikpOworCQkJfQorCQl9CisJCXJldHVybiBhY3Rpb25zOworCX0KKworCS8qKgorCSAqIFRoaXMgZ2VuZXJhdGVzIGEge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmFjdGlvbi5DcmVhdGVTaWJsaW5nQWN0aW9ufSBmb3IgZWFjaCBvYmplY3QgaW4gPGNvZGU+ZGVzY3JpcHRvcnM8L2NvZGU+LAorCSAqIGFuZCByZXR1cm5zIHRoZSBjb2xsZWN0aW9uIG9mIHRoZXNlIGFjdGlvbnMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIENvbGxlY3Rpb248SUFjdGlvbj4gZ2VuZXJhdGVDcmVhdGVTaWJsaW5nQWN0aW9ucyhDb2xsZWN0aW9uPD8+IGRlc2NyaXB0b3JzLCBJU2VsZWN0aW9uIHNlbGVjdGlvbikgeworCQlDb2xsZWN0aW9uPElBY3Rpb24+IGFjdGlvbnMgPSBuZXcgQXJyYXlMaXN0PElBY3Rpb24+KCk7CisJCWlmIChkZXNjcmlwdG9ycyAhPSBudWxsKSB7CisJCQlmb3IgKE9iamVjdCBkZXNjcmlwdG9yIDogZGVzY3JpcHRvcnMpIHsKKwkJCQlhY3Rpb25zLmFkZChuZXcgQ3JlYXRlU2libGluZ0FjdGlvbihhY3RpdmVFZGl0b3JQYXJ0LCBzZWxlY3Rpb24sIGRlc2NyaXB0b3IpKTsKKwkJCX0KKwkJfQorCQlyZXR1cm4gYWN0aW9uczsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHBvcHVsYXRlcyB0aGUgc3BlY2lmaWVkIDxjb2RlPm1hbmFnZXI8L2NvZGU+IHdpdGgge0BsaW5rIG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5BY3Rpb25Db250cmlidXRpb25JdGVtfXMKKwkgKiBiYXNlZCBvbiB0aGUge0BsaW5rIG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JQWN0aW9ufXMgY29udGFpbmVkIGluIHRoZSA8Y29kZT5hY3Rpb25zPC9jb2RlPiBjb2xsZWN0aW9uLAorCSAqIGJ5IGluc2VydGluZyB0aGVtIGJlZm9yZSB0aGUgc3BlY2lmaWVkIGNvbnRyaWJ1dGlvbiBpdGVtIDxjb2RlPmNvbnRyaWJ1dGlvbklEPC9jb2RlPi4KKwkgKiBJZiA8Y29kZT5jb250cmlidXRpb25JRDwvY29kZT4gaXMgPGNvZGU+bnVsbDwvY29kZT4sIHRoZXkgYXJlIHNpbXBseSBhZGRlZC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBwb3B1bGF0ZU1hbmFnZXIoSUNvbnRyaWJ1dGlvbk1hbmFnZXIgbWFuYWdlciwgQ29sbGVjdGlvbjw/IGV4dGVuZHMgSUFjdGlvbj4gYWN0aW9ucywgU3RyaW5nIGNvbnRyaWJ1dGlvbklEKSB7CisJCWlmIChhY3Rpb25zICE9IG51bGwpIHsKKwkJCWZvciAoSUFjdGlvbiBhY3Rpb24gOiBhY3Rpb25zKSB7CisJCQkJaWYgKGNvbnRyaWJ1dGlvbklEICE9IG51bGwpIHsKKwkJCQkJbWFuYWdlci5pbnNlcnRCZWZvcmUoY29udHJpYnV0aW9uSUQsIGFjdGlvbik7CisJCQkJfQorCQkJCWVsc2UgeworCQkJCQltYW5hZ2VyLmFkZChhY3Rpb24pOworCQkJCX0KKwkJCX0KKwkJfQorCX0KKwkJCisJLyoqCisJICogVGhpcyByZW1vdmVzIGZyb20gdGhlIHNwZWNpZmllZCA8Y29kZT5tYW5hZ2VyPC9jb2RlPiBhbGwge0BsaW5rIG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5BY3Rpb25Db250cmlidXRpb25JdGVtfXMKKwkgKiBiYXNlZCBvbiB0aGUge0BsaW5rIG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JQWN0aW9ufXMgY29udGFpbmVkIGluIHRoZSA8Y29kZT5hY3Rpb25zPC9jb2RlPiBjb2xsZWN0aW9uLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIGRlcG9wdWxhdGVNYW5hZ2VyKElDb250cmlidXRpb25NYW5hZ2VyIG1hbmFnZXIsIENvbGxlY3Rpb248PyBleHRlbmRzIElBY3Rpb24+IGFjdGlvbnMpIHsKKwkJaWYgKGFjdGlvbnMgIT0gbnVsbCkgeworCQkJSUNvbnRyaWJ1dGlvbkl0ZW1bXSBpdGVtcyA9IG1hbmFnZXIuZ2V0SXRlbXMoKTsKKwkJCWZvciAoaW50IGkgPSAwOyBpIDwgaXRlbXMubGVuZ3RoOyBpKyspIHsKKwkJCQkvLyBMb29rIGludG8gU3ViQ29udHJpYnV0aW9uSXRlbXMKKwkJCQkvLworCQkJCUlDb250cmlidXRpb25JdGVtIGNvbnRyaWJ1dGlvbkl0ZW0gPSBpdGVtc1tpXTsKKwkJCQl3aGlsZSAoY29udHJpYnV0aW9uSXRlbSBpbnN0YW5jZW9mIFN1YkNvbnRyaWJ1dGlvbkl0ZW0pIHsKKwkJCQkJY29udHJpYnV0aW9uSXRlbSA9ICgoU3ViQ29udHJpYnV0aW9uSXRlbSljb250cmlidXRpb25JdGVtKS5nZXRJbm5lckl0ZW0oKTsKKwkJCQl9CisKKwkJCQkvLyBEZWxldGUgdGhlIEFjdGlvbkNvbnRyaWJ1dGlvbkl0ZW1zIHdpdGggbWF0Y2hpbmcgYWN0aW9uLgorCQkJCS8vCisJCQkJaWYgKGNvbnRyaWJ1dGlvbkl0ZW0gaW5zdGFuY2VvZiBBY3Rpb25Db250cmlidXRpb25JdGVtKSB7CisJCQkJCUlBY3Rpb24gYWN0aW9uID0gKChBY3Rpb25Db250cmlidXRpb25JdGVtKWNvbnRyaWJ1dGlvbkl0ZW0pLmdldEFjdGlvbigpOworCQkJCQlpZiAoYWN0aW9ucy5jb250YWlucyhhY3Rpb24pKSB7CisJCQkJCQltYW5hZ2VyLnJlbW92ZShjb250cmlidXRpb25JdGVtKTsKKwkJCQkJfQorCQkJCX0KKwkJCX0KKwkJfQorCX0KKworCS8qKgorCSAqIFRoaXMgcG9wdWxhdGVzIHRoZSBwb3AtdXAgbWVudSBiZWZvcmUgaXQgYXBwZWFycy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBtZW51QWJvdXRUb1Nob3coSU1lbnVNYW5hZ2VyIG1lbnVNYW5hZ2VyKSB7CisJCXN1cGVyLm1lbnVBYm91dFRvU2hvdyhtZW51TWFuYWdlcik7CisJCU1lbnVNYW5hZ2VyIHN1Ym1lbnVNYW5hZ2VyID0gbnVsbDsKKworCQlzdWJtZW51TWFuYWdlciA9IG5ldyBNZW51TWFuYWdlcihDb3JlRWRpdG9yUGx1Z2luLklOU1RBTkNFLmdldFN0cmluZygiX1VJX0NyZWF0ZUNoaWxkX21lbnVfaXRlbSIpKTsgLy8kTk9OLU5MUy0xJAorCQlwb3B1bGF0ZU1hbmFnZXIoc3VibWVudU1hbmFnZXIsIGNyZWF0ZUNoaWxkQWN0aW9ucywgbnVsbCk7CisJCW1lbnVNYW5hZ2VyLmluc2VydEJlZm9yZSgiZWRpdCIsIHN1Ym1lbnVNYW5hZ2VyKTsgLy8kTk9OLU5MUy0xJAorCisJCXN1Ym1lbnVNYW5hZ2VyID0gbmV3IE1lbnVNYW5hZ2VyKENvcmVFZGl0b3JQbHVnaW4uSU5TVEFOQ0UuZ2V0U3RyaW5nKCJfVUlfQ3JlYXRlU2libGluZ19tZW51X2l0ZW0iKSk7IC8vJE5PTi1OTFMtMSQKKwkJcG9wdWxhdGVNYW5hZ2VyKHN1Ym1lbnVNYW5hZ2VyLCBjcmVhdGVTaWJsaW5nQWN0aW9ucywgbnVsbCk7CisJCW1lbnVNYW5hZ2VyLmluc2VydEJlZm9yZSgiZWRpdCIsIHN1Ym1lbnVNYW5hZ2VyKTsgLy8kTk9OLU5MUy0xJAorCX0KKworCS8qKgorCSAqIFRoaXMgaW5zZXJ0cyBnbG9iYWwgYWN0aW9ucyBiZWZvcmUgdGhlICJhZGRpdGlvbnMtZW5kIiBzZXBhcmF0b3IuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgYWRkR2xvYmFsQWN0aW9ucyhJTWVudU1hbmFnZXIgbWVudU1hbmFnZXIpIHsKKwkJbWVudU1hbmFnZXIuaW5zZXJ0QWZ0ZXIoImFkZGl0aW9ucy1lbmQiLCBuZXcgU2VwYXJhdG9yKCJ1aS1hY3Rpb25zIikpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKKwkJbWVudU1hbmFnZXIuaW5zZXJ0QWZ0ZXIoInVpLWFjdGlvbnMiLCBzaG93UHJvcGVydGllc1ZpZXdBY3Rpb24pOyAvLyROT04tTkxTLTEkCisKKwkJcmVmcmVzaFZpZXdlckFjdGlvbi5zZXRFbmFibGVkKHJlZnJlc2hWaWV3ZXJBY3Rpb24uaXNFbmFibGVkKCkpOwkJCisJCW1lbnVNYW5hZ2VyLmluc2VydEFmdGVyKCJ1aS1hY3Rpb25zIiwgcmVmcmVzaFZpZXdlckFjdGlvbik7IC8vJE5PTi1OTFMtMSQKKworCQlzdXBlci5hZGRHbG9iYWxBY3Rpb25zKG1lbnVNYW5hZ2VyKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGVuc3VyZXMgdGhhdCBhIGRlbGV0ZSBhY3Rpb24gd2lsbCBjbGVhbiB1cCBhbGwgcmVmZXJlbmNlcyB0byBkZWxldGVkIG9iamVjdHMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIGJvb2xlYW4gcmVtb3ZlQWxsUmVmZXJlbmNlc09uRGVsZXRlKCkgeworCQlyZXR1cm4gdHJ1ZTsKKwl9CisKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9leHBlcmltZW50L3ByZXNlbnRhdGlvbi9FeHBlcmltZW50RWRpdG9yLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9leHBlcmltZW50L3ByZXNlbnRhdGlvbi9FeHBlcmltZW50RWRpdG9yLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmEzODFkNwotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2V4cGVyaW1lbnQvcHJlc2VudGF0aW9uL0V4cGVyaW1lbnRFZGl0b3IuamF2YQpAQCAtMCwwICsxLDE2NTkgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmV4cGVyaW1lbnQucHJlc2VudGF0aW9uOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247CitpbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbTsKK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OworaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOworaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uczsKK2ltcG9ydCBqYXZhLnV0aWwuRXZlbnRPYmplY3Q7CitpbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7CitpbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOworaW1wb3J0IGphdmEudXRpbC5MaW5rZWRIYXNoTWFwOworaW1wb3J0IGphdmEudXRpbC5MaXN0OworaW1wb3J0IGphdmEudXRpbC5NYXA7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JRmlsZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JTWFya2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklSZXNvdXJjZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUmVzb3VyY2VDaGFuZ2VFdmVudDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUmVzb3VyY2VDaGFuZ2VMaXN0ZW5lcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUmVzb3VyY2VEZWx0YTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUmVzb3VyY2VEZWx0YVZpc2l0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuUmVzb3VyY2VzUGx1Z2luOworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5Db3JlRXhjZXB0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUGF0aDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVByb2dyZXNzTW9uaXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuTnVsbFByb2dyZXNzTW9uaXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLmNvbW1hbmQuQmFzaWNDb21tYW5kU3RhY2s7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5jb21tYW5kLkNvbW1hbmQ7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5jb21tYW5kLkNvbW1hbmRTdGFjazsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLmNvbW1hbmQuQ29tbWFuZFN0YWNrTGlzdGVuZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udWkuTWFya2VySGVscGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udWkuZWRpdG9yLlByb2JsZW1FZGl0b3JQYXJ0OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udWkudmlld2VyLklWaWV3ZXJQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuQmFzaWNEaWFnbm9zdGljOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5EaWFnbm9zdGljOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5VUkk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3Q7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVWYWxpZGF0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnByb3ZpZGVyLkVjb3JlSXRlbVByb3ZpZGVyQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnJlc291cmNlLlJlc291cmNlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5yZXNvdXJjZS5SZXNvdXJjZVNldDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUudXRpbC5FQ29udGVudEFkYXB0ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnV0aWwuRWNvcmVVdGlsOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LmRvbWFpbi5BZGFwdGVyRmFjdG9yeUVkaXRpbmdEb21haW47CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQuZG9tYWluLkVkaXRpbmdEb21haW47CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQuZG9tYWluLklFZGl0aW5nRG9tYWluUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuQWRhcHRlckZhY3RvcnlJdGVtRGVsZWdhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkNvbXBvc2VkQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuUmVmbGVjdGl2ZUl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLnJlc291cmNlLlJlc291cmNlSXRlbVByb3ZpZGVyQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkuYWN0aW9uLkVkaXRpbmdEb21haW5BY3Rpb25CYXJDb250cmlidXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5jZWxsZWRpdG9yLkFkYXB0ZXJGYWN0b3J5VHJlZUVkaXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5kbmQuRWRpdGluZ0RvbWFpblZpZXdlckRyb3BBZGFwdGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmRuZC5Mb2NhbFRyYW5zZmVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmRuZC5WaWV3ZXJEcmFnQWRhcHRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5wcm92aWRlci5BZGFwdGVyRmFjdG9yeUNvbnRlbnRQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5wcm92aWRlci5BZGFwdGVyRmFjdG9yeUxhYmVsUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkucHJvdmlkZXIuVW53cmFwcGluZ1NlbGVjdGlvblByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLnV0aWwuRWRpdFVJTWFya2VySGVscGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLnV0aWwuRWRpdFVJVXRpbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS52aWV3LkV4dGVuZGVkUHJvcGVydHlTaGVldFBhZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklNZW51TGlzdGVuZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklNZW51TWFuYWdlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSVN0YXR1c0xpbmVNYW5hZ2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JVG9vbEJhck1hbmFnZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLk1lbnVNYW5hZ2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5TZXBhcmF0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuZGlhbG9ncy5NZXNzYWdlRGlhbG9nOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmRpYWxvZ3MuUHJvZ3Jlc3NNb25pdG9yRGlhbG9nOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnV0aWwuTG9jYWxTZWxlY3Rpb25UcmFuc2ZlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvblByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVN0cnVjdHVyZWRTZWxlY3Rpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5TZWxlY3Rpb25DaGFuZ2VkRXZlbnQ7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5TdHJ1Y3R1cmVkU2VsZWN0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuU3RydWN0dXJlZFZpZXdlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlRyZWVWaWV3ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5WaWV3ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLlNURU1YTUlSZXNvdXJjZUZhY3RvcnlJbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24ucHJlc2VudGF0aW9uLkNvcmVFZGl0b3JQbHVnaW47CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5wcm92aWRlci5Db21tb25JdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZXhwZXJpbWVudC5wcm92aWRlci5FeHBlcmltZW50SXRlbVByb3ZpZGVyQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLnByb3ZpZGVyLkdyYXBoSXRlbVByb3ZpZGVyQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmxvZ2dlci5wcm92aWRlci5Mb2dnZXJJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwucHJvdmlkZXIuTW9kZWxJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIucHJvdmlkZXIuTW9kaWZpZXJJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlLnByb3ZpZGVyLlByZWRpY2F0ZUl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zY2VuYXJpby5wcm92aWRlci5TY2VuYXJpb0l0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zZXF1ZW5jZXIucHJvdmlkZXIuU2VxdWVuY2VySXRlbVByb3ZpZGVyQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNvbHZlci5wcm92aWRlci5Tb2x2ZXJJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUudHJpZ2dlci5wcm92aWRlci5UcmlnZ2VySXRlbVByb3ZpZGVyQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LlNXVDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuY3VzdG9tLkNUYWJGb2xkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmRuZC5ETkQ7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmRuZC5UZXh0VHJhbnNmZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmRuZC5UcmFuc2ZlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLkNvbnRyb2xBZGFwdGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuQ29udHJvbEV2ZW50OworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ncmFwaGljcy5Qb2ludDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuTWVudTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5UcmVlOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklBY3Rpb25CYXJzOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklFZGl0b3JJbnB1dDsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5JRWRpdG9yUGFydDsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5JRWRpdG9yU2l0ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5JUGFydExpc3RlbmVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2hQYXJ0OworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLlBhcnRJbml0RXhjZXB0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLmFjdGlvbnMuV29ya3NwYWNlTW9kaWZ5T3BlcmF0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLmRpYWxvZ3MuU2F2ZUFzRGlhbG9nOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLmlkZS5JR290b01hcmtlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5wYXJ0LkZpbGVFZGl0b3JJbnB1dDsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5wYXJ0Lk11bHRpUGFnZUVkaXRvclBhcnQ7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkudmlld3MuY29udGVudG91dGxpbmUuQ29udGVudE91dGxpbmU7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkudmlld3MuY29udGVudG91dGxpbmUuQ29udGVudE91dGxpbmVQYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLnZpZXdzLmNvbnRlbnRvdXRsaW5lLklDb250ZW50T3V0bGluZVBhZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkudmlld3MucHJvcGVydGllcy5JUHJvcGVydHlTaGVldFBhZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkudmlld3MucHJvcGVydGllcy5Qcm9wZXJ0eVNoZWV0OworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLnZpZXdzLnByb3BlcnRpZXMuUHJvcGVydHlTaGVldFBhZ2U7CisKKworLyoqCisgKiBUaGlzIGlzIGFuIGV4YW1wbGUgb2YgYSBFeHBlcmltZW50IG1vZGVsIGVkaXRvci4KKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBnZW5lcmF0ZWQKKyAqLworQFN1cHByZXNzV2FybmluZ3MoImFsbCIpCitwdWJsaWMgY2xhc3MgRXhwZXJpbWVudEVkaXRvcgorCWV4dGVuZHMgTXVsdGlQYWdlRWRpdG9yUGFydAorCWltcGxlbWVudHMgSUVkaXRpbmdEb21haW5Qcm92aWRlciwgSVNlbGVjdGlvblByb3ZpZGVyLCBJTWVudUxpc3RlbmVyLCBJVmlld2VyUHJvdmlkZXIsIElHb3RvTWFya2VyIHsKKwkvKioKKwkgKiBUaGlzIGtlZXBzIHRyYWNrIG9mIHRoZSBlZGl0aW5nIGRvbWFpbiB0aGF0IGlzIHVzZWQgdG8gdHJhY2sgYWxsIGNoYW5nZXMgdG8gdGhlIG1vZGVsLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBBZGFwdGVyRmFjdG9yeUVkaXRpbmdEb21haW4gZWRpdGluZ0RvbWFpbjsKKworCS8qKgorCSAqIFRoaXMgaXMgdGhlIG9uZSBhZGFwdGVyIGZhY3RvcnkgdXNlZCBmb3IgcHJvdmlkaW5nIHZpZXdzIG9mIHRoZSBtb2RlbC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgQ29tcG9zZWRBZGFwdGVyRmFjdG9yeSBhZGFwdGVyRmFjdG9yeTsKKworCS8qKgorCSAqIFRoaXMgaXMgdGhlIGNvbnRlbnQgb3V0bGluZSBwYWdlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBJQ29udGVudE91dGxpbmVQYWdlIGNvbnRlbnRPdXRsaW5lUGFnZTsKKworCS8qKgorCSAqIFRoaXMgaXMgYSBrbHVkZ2UuLi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgSVN0YXR1c0xpbmVNYW5hZ2VyIGNvbnRlbnRPdXRsaW5lU3RhdHVzTGluZU1hbmFnZXI7CisKKwkvKioKKwkgKiBUaGlzIGlzIHRoZSBjb250ZW50IG91dGxpbmUgcGFnZSdzIHZpZXdlci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgVHJlZVZpZXdlciBjb250ZW50T3V0bGluZVZpZXdlcjsKKworCS8qKgorCSAqIFRoaXMgaXMgdGhlIHByb3BlcnR5IHNoZWV0IHBhZ2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIFByb3BlcnR5U2hlZXRQYWdlIHByb3BlcnR5U2hlZXRQYWdlOworCisJLyoqCisJICogVGhpcyBpcyB0aGUgdmlld2VyIHRoYXQgc2hhZG93cyB0aGUgc2VsZWN0aW9uIGluIHRoZSBjb250ZW50IG91dGxpbmUuCisJICogVGhlIHBhcmVudCByZWxhdGlvbiBtdXN0IGJlIGNvcnJlY3RseSBkZWZpbmVkIGZvciB0aGlzIHRvIHdvcmsuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIFRyZWVWaWV3ZXIgc2VsZWN0aW9uVmlld2VyOworCisJLyoqCisJICogVGhpcyBrZWVwcyB0cmFjayBvZiB0aGUgYWN0aXZlIGNvbnRlbnQgdmlld2VyLCB3aGljaCBtYXkgYmUgZWl0aGVyIG9uZSBvZiB0aGUgdmlld2VycyBpbiB0aGUgcGFnZXMgb3IgdGhlIGNvbnRlbnQgb3V0bGluZSB2aWV3ZXIuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIFZpZXdlciBjdXJyZW50Vmlld2VyOworCisJLyoqCisJICogVGhpcyBsaXN0ZW5zIHRvIHdoaWNoIGV2ZXIgdmlld2VyIGlzIGFjdGl2ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lciBzZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXI7CisKKwkvKioKKwkgKiBUaGlzIGtlZXBzIHRyYWNrIG9mIGFsbCB0aGUge0BsaW5rIG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcn1zIHRoYXQgYXJlIGxpc3RlbmluZyB0byB0aGlzIGVkaXRvci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgQ29sbGVjdGlvbjxJU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyPiBzZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXJzID0gbmV3IEFycmF5TGlzdDxJU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyPigpOworCisJLyoqCisJICogVGhpcyBrZWVwcyB0cmFjayBvZiB0aGUgc2VsZWN0aW9uIG9mIHRoZSBlZGl0b3IgYXMgYSB3aG9sZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgSVNlbGVjdGlvbiBlZGl0b3JTZWxlY3Rpb24gPSBTdHJ1Y3R1cmVkU2VsZWN0aW9uLkVNUFRZOworCisJLyoqCisJICogVGhlIE1hcmtlckhlbHBlciBpcyByZXNwb25zaWJsZSBmb3IgY3JlYXRpbmcgd29ya3NwYWNlIHJlc291cmNlIG1hcmtlcnMgcHJlc2VudGVkCisJICogaW4gRWNsaXBzZSdzIFByb2JsZW1zIFZpZXcuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIE1hcmtlckhlbHBlciBtYXJrZXJIZWxwZXIgPSBuZXcgRWRpdFVJTWFya2VySGVscGVyKCk7CisKKwkvKioKKwkgKiBUaGlzIGxpc3RlbnMgZm9yIHdoZW4gdGhlIG91dGxpbmUgYmVjb21lcyBhY3RpdmUKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgSVBhcnRMaXN0ZW5lciBwYXJ0TGlzdGVuZXIgPQorCQluZXcgSVBhcnRMaXN0ZW5lcigpIHsKKwkJCXB1YmxpYyB2b2lkIHBhcnRBY3RpdmF0ZWQoSVdvcmtiZW5jaFBhcnQgcCkgeworCQkJCWlmIChwIGluc3RhbmNlb2YgQ29udGVudE91dGxpbmUpIHsKKwkJCQkJaWYgKCgoQ29udGVudE91dGxpbmUpcCkuZ2V0Q3VycmVudFBhZ2UoKSA9PSBjb250ZW50T3V0bGluZVBhZ2UpIHsKKwkJCQkJCWdldEFjdGlvbkJhckNvbnRyaWJ1dG9yKCkuc2V0QWN0aXZlRWRpdG9yKEV4cGVyaW1lbnRFZGl0b3IudGhpcyk7CisKKwkJCQkJCXNldEN1cnJlbnRWaWV3ZXIoY29udGVudE91dGxpbmVWaWV3ZXIpOworCQkJCQl9CisJCQkJfQorCQkJCWVsc2UgaWYgKHAgaW5zdGFuY2VvZiBQcm9wZXJ0eVNoZWV0KSB7CisJCQkJCWlmICgoKFByb3BlcnR5U2hlZXQpcCkuZ2V0Q3VycmVudFBhZ2UoKSA9PSBwcm9wZXJ0eVNoZWV0UGFnZSkgeworCQkJCQkJZ2V0QWN0aW9uQmFyQ29udHJpYnV0b3IoKS5zZXRBY3RpdmVFZGl0b3IoRXhwZXJpbWVudEVkaXRvci50aGlzKTsKKwkJCQkJCWhhbmRsZUFjdGl2YXRlKCk7CisJCQkJCX0KKwkJCQl9CisJCQkJZWxzZSBpZiAocCA9PSBFeHBlcmltZW50RWRpdG9yLnRoaXMpIHsKKwkJCQkJaGFuZGxlQWN0aXZhdGUoKTsKKwkJCQl9CisJCQl9CisJCQlwdWJsaWMgdm9pZCBwYXJ0QnJvdWdodFRvVG9wKElXb3JrYmVuY2hQYXJ0IHApIHsKKwkJCQkvLyBJZ25vcmUuCisJCQl9CisJCQlwdWJsaWMgdm9pZCBwYXJ0Q2xvc2VkKElXb3JrYmVuY2hQYXJ0IHApIHsKKwkJCQkvLyBJZ25vcmUuCisJCQl9CisJCQlwdWJsaWMgdm9pZCBwYXJ0RGVhY3RpdmF0ZWQoSVdvcmtiZW5jaFBhcnQgcCkgeworCQkJCS8vIElnbm9yZS4KKwkJCX0KKwkJCXB1YmxpYyB2b2lkIHBhcnRPcGVuZWQoSVdvcmtiZW5jaFBhcnQgcCkgeworCQkJCS8vIElnbm9yZS4KKwkJCX0KKwkJfTsKKworCS8qKgorCSAqIFJlc291cmNlcyB0aGF0IGhhdmUgYmVlbiByZW1vdmVkIHNpbmNlIGxhc3QgYWN0aXZhdGlvbi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgQ29sbGVjdGlvbjxSZXNvdXJjZT4gcmVtb3ZlZFJlc291cmNlcyA9IG5ldyBBcnJheUxpc3Q8UmVzb3VyY2U+KCk7CisKKwkvKioKKwkgKiBSZXNvdXJjZXMgdGhhdCBoYXZlIGJlZW4gY2hhbmdlZCBzaW5jZSBsYXN0IGFjdGl2YXRpb24uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIENvbGxlY3Rpb248UmVzb3VyY2U+IGNoYW5nZWRSZXNvdXJjZXMgPSBuZXcgQXJyYXlMaXN0PFJlc291cmNlPigpOworCisJLyoqCisJICogUmVzb3VyY2VzIHRoYXQgaGF2ZSBiZWVuIHNhdmVkLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBDb2xsZWN0aW9uPFJlc291cmNlPiBzYXZlZFJlc291cmNlcyA9IG5ldyBBcnJheUxpc3Q8UmVzb3VyY2U+KCk7CisKKwkvKioKKwkgKiBNYXAgdG8gc3RvcmUgdGhlIGRpYWdub3N0aWMgYXNzb2NpYXRlZCB3aXRoIGEgcmVzb3VyY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIE1hcDxSZXNvdXJjZSwgRGlhZ25vc3RpYz4gcmVzb3VyY2VUb0RpYWdub3N0aWNNYXAgPSBuZXcgTGlua2VkSGFzaE1hcDxSZXNvdXJjZSwgRGlhZ25vc3RpYz4oKTsKKworCS8qKgorCSAqIENvbnRyb2xzIHdoZXRoZXIgdGhlIHByb2JsZW0gaW5kaWNhdGlvbiBzaG91bGQgYmUgdXBkYXRlZC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgYm9vbGVhbiB1cGRhdGVQcm9ibGVtSW5kaWNhdGlvbiA9IHRydWU7CisKKwkvKioKKwkgKiBBZGFwdGVyIHVzZWQgdG8gdXBkYXRlIHRoZSBwcm9ibGVtIGluZGljYXRpb24gd2hlbiByZXNvdXJjZXMgYXJlIGRlbWFuZGVkIGxvYWRlZC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgRUNvbnRlbnRBZGFwdGVyIHByb2JsZW1JbmRpY2F0aW9uQWRhcHRlciA9IAorCQluZXcgRUNvbnRlbnRBZGFwdGVyKCkgeworCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgdm9pZCBub3RpZnlDaGFuZ2VkKE5vdGlmaWNhdGlvbiBub3RpZmljYXRpb24pIHsKKwkJCQlpZiAobm90aWZpY2F0aW9uLmdldE5vdGlmaWVyKCkgaW5zdGFuY2VvZiBSZXNvdXJjZSkgeworCQkJCQlzd2l0Y2ggKG5vdGlmaWNhdGlvbi5nZXRGZWF0dXJlSUQoUmVzb3VyY2UuY2xhc3MpKSB7CisJCQkJCQljYXNlIFJlc291cmNlLlJFU09VUkNFX19JU19MT0FERUQ6CisJCQkJCQljYXNlIFJlc291cmNlLlJFU09VUkNFX19FUlJPUlM6CisJCQkJCQljYXNlIFJlc291cmNlLlJFU09VUkNFX19XQVJOSU5HUzogeworCQkJCQkJCVJlc291cmNlIHJlc291cmNlID0gKFJlc291cmNlKW5vdGlmaWNhdGlvbi5nZXROb3RpZmllcigpOworCQkJCQkJCURpYWdub3N0aWMgZGlhZ25vc3RpYyA9IGFuYWx5emVSZXNvdXJjZVByb2JsZW1zKHJlc291cmNlLCBudWxsKTsKKwkJCQkJCQlpZiAoZGlhZ25vc3RpYy5nZXRTZXZlcml0eSgpICE9IERpYWdub3N0aWMuT0spIHsKKwkJCQkJCQkJcmVzb3VyY2VUb0RpYWdub3N0aWNNYXAucHV0KHJlc291cmNlLCBkaWFnbm9zdGljKTsKKwkJCQkJCQl9CisJCQkJCQkJZWxzZSB7CisJCQkJCQkJCXJlc291cmNlVG9EaWFnbm9zdGljTWFwLnJlbW92ZShyZXNvdXJjZSk7CisJCQkJCQkJfQorCisJCQkJCQkJaWYgKHVwZGF0ZVByb2JsZW1JbmRpY2F0aW9uKSB7CisJCQkJCQkJCWdldFNpdGUoKS5nZXRTaGVsbCgpLmdldERpc3BsYXkoKS5hc3luY0V4ZWMKKwkJCQkJCQkJCShuZXcgUnVubmFibGUoKSB7CisJCQkJCQkJCQkJIHB1YmxpYyB2b2lkIHJ1bigpIHsKKwkJCQkJCQkJCQkJIHVwZGF0ZVByb2JsZW1JbmRpY2F0aW9uKCk7CisJCQkJCQkJCQkJIH0KKwkJCQkJCQkJCSB9KTsKKwkJCQkJCQl9CisJCQkJCQkJYnJlYWs7CisJCQkJCQl9CisJCQkJCX0KKwkJCQl9CisJCQkJZWxzZSB7CisJCQkJCXN1cGVyLm5vdGlmeUNoYW5nZWQobm90aWZpY2F0aW9uKTsKKwkJCQl9CisJCQl9CisKKwkJCUBPdmVycmlkZQorCQkJcHJvdGVjdGVkIHZvaWQgc2V0VGFyZ2V0KFJlc291cmNlIHRhcmdldCkgeworCQkJCWJhc2ljU2V0VGFyZ2V0KHRhcmdldCk7CisJCQl9CisKKwkJCUBPdmVycmlkZQorCQkJcHJvdGVjdGVkIHZvaWQgdW5zZXRUYXJnZXQoUmVzb3VyY2UgdGFyZ2V0KSB7CisJCQkJYmFzaWNVbnNldFRhcmdldCh0YXJnZXQpOworCQkJfQorCQl9OworCisJLyoqCisJICogVGhpcyBsaXN0ZW5zIGZvciB3b3Jrc3BhY2UgY2hhbmdlcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgSVJlc291cmNlQ2hhbmdlTGlzdGVuZXIgcmVzb3VyY2VDaGFuZ2VMaXN0ZW5lciA9CisJCW5ldyBJUmVzb3VyY2VDaGFuZ2VMaXN0ZW5lcigpIHsKKwkJCXB1YmxpYyB2b2lkIHJlc291cmNlQ2hhbmdlZChJUmVzb3VyY2VDaGFuZ2VFdmVudCBldmVudCkgeworCQkJCUlSZXNvdXJjZURlbHRhIGRlbHRhID0gZXZlbnQuZ2V0RGVsdGEoKTsKKwkJCQl0cnkgeworCQkJCQljbGFzcyBSZXNvdXJjZURlbHRhVmlzaXRvciBpbXBsZW1lbnRzIElSZXNvdXJjZURlbHRhVmlzaXRvciB7CisJCQkJCQlwcm90ZWN0ZWQgUmVzb3VyY2VTZXQgcmVzb3VyY2VTZXQgPSBlZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCk7CisJCQkJCQlwcm90ZWN0ZWQgQ29sbGVjdGlvbjxSZXNvdXJjZT4gY2hhbmdlZFJlc291cmNlcyA9IG5ldyBBcnJheUxpc3Q8UmVzb3VyY2U+KCk7CisJCQkJCQlwcm90ZWN0ZWQgQ29sbGVjdGlvbjxSZXNvdXJjZT4gcmVtb3ZlZFJlc291cmNlcyA9IG5ldyBBcnJheUxpc3Q8UmVzb3VyY2U+KCk7CisKKwkJCQkJCXB1YmxpYyBib29sZWFuIHZpc2l0KElSZXNvdXJjZURlbHRhIGRlbHRhKSB7CisJCQkJCQkJaWYgKGRlbHRhLmdldFJlc291cmNlKCkuZ2V0VHlwZSgpID09IElSZXNvdXJjZS5GSUxFKSB7CisJCQkJCQkJCWlmIChkZWx0YS5nZXRLaW5kKCkgPT0gSVJlc291cmNlRGVsdGEuUkVNT1ZFRCB8fAorCQkJCQkJCQkgICAgZGVsdGEuZ2V0S2luZCgpID09IElSZXNvdXJjZURlbHRhLkNIQU5HRUQgJiYgZGVsdGEuZ2V0RmxhZ3MoKSAhPSBJUmVzb3VyY2VEZWx0YS5NQVJLRVJTKSB7CisJCQkJCQkJCQlSZXNvdXJjZSByZXNvdXJjZSA9IHJlc291cmNlU2V0LmdldFJlc291cmNlKFVSSS5jcmVhdGVQbGF0Zm9ybVJlc291cmNlVVJJKGRlbHRhLmdldEZ1bGxQYXRoKCkudG9TdHJpbmcoKSwgdHJ1ZSksIGZhbHNlKTsKKwkJCQkJCQkJCWlmIChyZXNvdXJjZSAhPSBudWxsKSB7CisJCQkJCQkJCQkJaWYgKGRlbHRhLmdldEtpbmQoKSA9PSBJUmVzb3VyY2VEZWx0YS5SRU1PVkVEKSB7CisJCQkJCQkJCQkJCXJlbW92ZWRSZXNvdXJjZXMuYWRkKHJlc291cmNlKTsKKwkJCQkJCQkJCQl9CisJCQkJCQkJCQkJZWxzZSBpZiAoIXNhdmVkUmVzb3VyY2VzLnJlbW92ZShyZXNvdXJjZSkpIHsKKwkJCQkJCQkJCQkJY2hhbmdlZFJlc291cmNlcy5hZGQocmVzb3VyY2UpOworCQkJCQkJCQkJCX0KKwkJCQkJCQkJCX0KKwkJCQkJCQkJfQorCQkJCQkJCX0KKworCQkJCQkJCXJldHVybiB0cnVlOworCQkJCQkJfQorCisJCQkJCQlwdWJsaWMgQ29sbGVjdGlvbjxSZXNvdXJjZT4gZ2V0Q2hhbmdlZFJlc291cmNlcygpIHsKKwkJCQkJCQlyZXR1cm4gY2hhbmdlZFJlc291cmNlczsKKwkJCQkJCX0KKworCQkJCQkJcHVibGljIENvbGxlY3Rpb248UmVzb3VyY2U+IGdldFJlbW92ZWRSZXNvdXJjZXMoKSB7CisJCQkJCQkJcmV0dXJuIHJlbW92ZWRSZXNvdXJjZXM7CisJCQkJCQl9CisJCQkJCX0KKworCQkJCQlmaW5hbCBSZXNvdXJjZURlbHRhVmlzaXRvciB2aXNpdG9yID0gbmV3IFJlc291cmNlRGVsdGFWaXNpdG9yKCk7CisJCQkJCWRlbHRhLmFjY2VwdCh2aXNpdG9yKTsKKworCQkJCQlpZiAoIXZpc2l0b3IuZ2V0UmVtb3ZlZFJlc291cmNlcygpLmlzRW1wdHkoKSkgeworCQkJCQkJZ2V0U2l0ZSgpLmdldFNoZWxsKCkuZ2V0RGlzcGxheSgpLmFzeW5jRXhlYworCQkJCQkJCShuZXcgUnVubmFibGUoKSB7CisJCQkJCQkJCSBwdWJsaWMgdm9pZCBydW4oKSB7CisJCQkJCQkJCQkgcmVtb3ZlZFJlc291cmNlcy5hZGRBbGwodmlzaXRvci5nZXRSZW1vdmVkUmVzb3VyY2VzKCkpOworCQkJCQkJCQkJIGlmICghaXNEaXJ0eSgpKSB7CisJCQkJCQkJCQkJIGdldFNpdGUoKS5nZXRQYWdlKCkuY2xvc2VFZGl0b3IoRXhwZXJpbWVudEVkaXRvci50aGlzLCBmYWxzZSk7CisJCQkJCQkJCQkgfQorCQkJCQkJCQkgfQorCQkJCQkJCSB9KTsKKwkJCQkJfQorCisJCQkJCWlmICghdmlzaXRvci5nZXRDaGFuZ2VkUmVzb3VyY2VzKCkuaXNFbXB0eSgpKSB7CisJCQkJCQlnZXRTaXRlKCkuZ2V0U2hlbGwoKS5nZXREaXNwbGF5KCkuYXN5bmNFeGVjCisJCQkJCQkJKG5ldyBSdW5uYWJsZSgpIHsKKwkJCQkJCQkJIHB1YmxpYyB2b2lkIHJ1bigpIHsKKwkJCQkJCQkJCSBjaGFuZ2VkUmVzb3VyY2VzLmFkZEFsbCh2aXNpdG9yLmdldENoYW5nZWRSZXNvdXJjZXMoKSk7CisJCQkJCQkJCQkgaWYgKGdldFNpdGUoKS5nZXRQYWdlKCkuZ2V0QWN0aXZlRWRpdG9yKCkgPT0gRXhwZXJpbWVudEVkaXRvci50aGlzKSB7CisJCQkJCQkJCQkJIGhhbmRsZUFjdGl2YXRlKCk7CisJCQkJCQkJCQkgfQorCQkJCQkJCQkgfQorCQkJCQkJCSB9KTsKKwkJCQkJfQorCQkJCX0KKwkJCQljYXRjaCAoQ29yZUV4Y2VwdGlvbiBleGNlcHRpb24pIHsKKwkJCQkJQ29yZUVkaXRvclBsdWdpbi5JTlNUQU5DRS5sb2coZXhjZXB0aW9uKTsKKwkJCQl9CisJCQl9CisJCX07CisKKwkvKioKKwkgKiBIYW5kbGVzIGFjdGl2YXRpb24gb2YgdGhlIGVkaXRvciBvciBpdCdzIGFzc29jaWF0ZWQgdmlld3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgaGFuZGxlQWN0aXZhdGUoKSB7CisJCS8vIFJlY29tcHV0ZSB0aGUgcmVhZCBvbmx5IHN0YXRlLgorCQkvLworCQlpZiAoZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVRvUmVhZE9ubHlNYXAoKSAhPSBudWxsKSB7CisJCSAgZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVRvUmVhZE9ubHlNYXAoKS5jbGVhcigpOworCisJCSAgLy8gUmVmcmVzaCBhbnkgYWN0aW9ucyB0aGF0IG1heSBiZWNvbWUgZW5hYmxlZCBvciBkaXNhYmxlZC4KKwkJICAvLworCQkgIHNldFNlbGVjdGlvbihnZXRTZWxlY3Rpb24oKSk7CisJCX0KKworCQlpZiAoIXJlbW92ZWRSZXNvdXJjZXMuaXNFbXB0eSgpKSB7CisJCQlpZiAoaGFuZGxlRGlydHlDb25mbGljdCgpKSB7CisJCQkJZ2V0U2l0ZSgpLmdldFBhZ2UoKS5jbG9zZUVkaXRvcihFeHBlcmltZW50RWRpdG9yLnRoaXMsIGZhbHNlKTsKKwkJCX0KKwkJCWVsc2UgeworCQkJCXJlbW92ZWRSZXNvdXJjZXMuY2xlYXIoKTsKKwkJCQljaGFuZ2VkUmVzb3VyY2VzLmNsZWFyKCk7CisJCQkJc2F2ZWRSZXNvdXJjZXMuY2xlYXIoKTsKKwkJCX0KKwkJfQorCQllbHNlIGlmICghY2hhbmdlZFJlc291cmNlcy5pc0VtcHR5KCkpIHsKKwkJCWNoYW5nZWRSZXNvdXJjZXMucmVtb3ZlQWxsKHNhdmVkUmVzb3VyY2VzKTsKKwkJCWhhbmRsZUNoYW5nZWRSZXNvdXJjZXMoKTsKKwkJCWNoYW5nZWRSZXNvdXJjZXMuY2xlYXIoKTsKKwkJCXNhdmVkUmVzb3VyY2VzLmNsZWFyKCk7CisJCX0KKwl9CisKKwkvKioKKwkgKiBIYW5kbGVzIHdoYXQgdG8gZG8gd2l0aCBjaGFuZ2VkIHJlc291cmNlcyBvbiBhY3RpdmF0aW9uLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIGhhbmRsZUNoYW5nZWRSZXNvdXJjZXMoKSB7CisJCWlmICghY2hhbmdlZFJlc291cmNlcy5pc0VtcHR5KCkgJiYgKCFpc0RpcnR5KCkgfHwgaGFuZGxlRGlydHlDb25mbGljdCgpKSkgeworCQkJaWYgKGlzRGlydHkoKSkgeworCQkJCWNoYW5nZWRSZXNvdXJjZXMuYWRkQWxsKGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKS5nZXRSZXNvdXJjZXMoKSk7CisJCQl9CisJCQllZGl0aW5nRG9tYWluLmdldENvbW1hbmRTdGFjaygpLmZsdXNoKCk7CisKKwkJCXVwZGF0ZVByb2JsZW1JbmRpY2F0aW9uID0gZmFsc2U7CisJCQlmb3IgKFJlc291cmNlIHJlc291cmNlIDogY2hhbmdlZFJlc291cmNlcykgeworCQkJCWlmIChyZXNvdXJjZS5pc0xvYWRlZCgpKSB7CisJCQkJCXJlc291cmNlLnVubG9hZCgpOworCQkJCQl0cnkgeworCQkJCQkJcmVzb3VyY2UubG9hZChDb2xsZWN0aW9ucy5FTVBUWV9NQVApOworCQkJCQl9CisJCQkJCWNhdGNoIChJT0V4Y2VwdGlvbiBleGNlcHRpb24pIHsKKwkJCQkJCWlmICghcmVzb3VyY2VUb0RpYWdub3N0aWNNYXAuY29udGFpbnNLZXkocmVzb3VyY2UpKSB7CisJCQkJCQkJcmVzb3VyY2VUb0RpYWdub3N0aWNNYXAucHV0KHJlc291cmNlLCBhbmFseXplUmVzb3VyY2VQcm9ibGVtcyhyZXNvdXJjZSwgZXhjZXB0aW9uKSk7CisJCQkJCQl9CisJCQkJCX0KKwkJCQl9CisJCQl9CisKKwkJCWlmIChBZGFwdGVyRmFjdG9yeUVkaXRpbmdEb21haW4uaXNTdGFsZShlZGl0b3JTZWxlY3Rpb24pKSB7CisJCQkJc2V0U2VsZWN0aW9uKFN0cnVjdHVyZWRTZWxlY3Rpb24uRU1QVFkpOworCQkJfQorCisJCQl1cGRhdGVQcm9ibGVtSW5kaWNhdGlvbiA9IHRydWU7CisJCQl1cGRhdGVQcm9ibGVtSW5kaWNhdGlvbigpOworCQl9CisJfQorICAKKwkvKioKKwkgKiBVcGRhdGVzIHRoZSBwcm9ibGVtcyBpbmRpY2F0aW9uIHdpdGggdGhlIGluZm9ybWF0aW9uIGRlc2NyaWJlZCBpbiB0aGUgc3BlY2lmaWVkIGRpYWdub3N0aWMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgdXBkYXRlUHJvYmxlbUluZGljYXRpb24oKSB7CisJCWlmICh1cGRhdGVQcm9ibGVtSW5kaWNhdGlvbikgeworCQkJQmFzaWNEaWFnbm9zdGljIGRpYWdub3N0aWMgPQorCQkJCW5ldyBCYXNpY0RpYWdub3N0aWMKKwkJCQkJKERpYWdub3N0aWMuT0ssCisJCQkJCSAib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmVkaXRvciIsIC8vJE5PTi1OTFMtMSQKKwkJCQkJIDAsCisJCQkJCSBudWxsLAorCQkJCQkgbmV3IE9iamVjdCBbXSB7IGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKSB9KTsKKwkJCWZvciAoRGlhZ25vc3RpYyBjaGlsZERpYWdub3N0aWMgOiByZXNvdXJjZVRvRGlhZ25vc3RpY01hcC52YWx1ZXMoKSkgeworCQkJCWlmIChjaGlsZERpYWdub3N0aWMuZ2V0U2V2ZXJpdHkoKSAhPSBEaWFnbm9zdGljLk9LKSB7CisJCQkJCWRpYWdub3N0aWMuYWRkKGNoaWxkRGlhZ25vc3RpYyk7CisJCQkJfQorCQkJfQorCisJCQlpbnQgbGFzdEVkaXRvclBhZ2UgPSBnZXRQYWdlQ291bnQoKSAtIDE7CisJCQlpZiAobGFzdEVkaXRvclBhZ2UgPj0gMCAmJiBnZXRFZGl0b3IobGFzdEVkaXRvclBhZ2UpIGluc3RhbmNlb2YgUHJvYmxlbUVkaXRvclBhcnQpIHsKKwkJCQkoKFByb2JsZW1FZGl0b3JQYXJ0KWdldEVkaXRvcihsYXN0RWRpdG9yUGFnZSkpLnNldERpYWdub3N0aWMoZGlhZ25vc3RpYyk7CisJCQkJaWYgKGRpYWdub3N0aWMuZ2V0U2V2ZXJpdHkoKSAhPSBEaWFnbm9zdGljLk9LKSB7CisJCQkJCXNldEFjdGl2ZVBhZ2UobGFzdEVkaXRvclBhZ2UpOworCQkJCX0KKwkJCX0KKwkJCWVsc2UgaWYgKGRpYWdub3N0aWMuZ2V0U2V2ZXJpdHkoKSAhPSBEaWFnbm9zdGljLk9LKSB7CisJCQkJUHJvYmxlbUVkaXRvclBhcnQgcHJvYmxlbUVkaXRvclBhcnQgPSBuZXcgUHJvYmxlbUVkaXRvclBhcnQoKTsKKwkJCQlwcm9ibGVtRWRpdG9yUGFydC5zZXREaWFnbm9zdGljKGRpYWdub3N0aWMpOworCQkJCXByb2JsZW1FZGl0b3JQYXJ0LnNldE1hcmtlckhlbHBlcihtYXJrZXJIZWxwZXIpOworCQkJCXRyeSB7CisJCQkJCWFkZFBhZ2UoKytsYXN0RWRpdG9yUGFnZSwgcHJvYmxlbUVkaXRvclBhcnQsIGdldEVkaXRvcklucHV0KCkpOworCQkJCQlzZXRQYWdlVGV4dChsYXN0RWRpdG9yUGFnZSwgcHJvYmxlbUVkaXRvclBhcnQuZ2V0UGFydE5hbWUoKSk7CisJCQkJCXNldEFjdGl2ZVBhZ2UobGFzdEVkaXRvclBhZ2UpOworCQkJCQlzaG93VGFicygpOworCQkJCX0KKwkJCQljYXRjaCAoUGFydEluaXRFeGNlcHRpb24gZXhjZXB0aW9uKSB7CisJCQkJCUNvcmVFZGl0b3JQbHVnaW4uSU5TVEFOQ0UubG9nKGV4Y2VwdGlvbik7CisJCQkJfQorCQkJfQorCisJCQlpZiAobWFya2VySGVscGVyLmhhc01hcmtlcnMoZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpKSkgeworCQkJCW1hcmtlckhlbHBlci5kZWxldGVNYXJrZXJzKGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKSk7CisJCQkJaWYgKGRpYWdub3N0aWMuZ2V0U2V2ZXJpdHkoKSAhPSBEaWFnbm9zdGljLk9LKSB7CisJCQkJCXRyeSB7CisJCQkJCQltYXJrZXJIZWxwZXIuY3JlYXRlTWFya2VycyhkaWFnbm9zdGljKTsKKwkJCQkJfQorCQkJCQljYXRjaCAoQ29yZUV4Y2VwdGlvbiBleGNlcHRpb24pIHsKKwkJCQkJCUNvcmVFZGl0b3JQbHVnaW4uSU5TVEFOQ0UubG9nKGV4Y2VwdGlvbik7CisJCQkJCX0KKwkJCQl9CisJCQl9CisJCX0KKwl9CisKKwkvKioKKwkgKiBTaG93cyBhIGRpYWxvZyB0aGF0IGFza3MgaWYgY29uZmxpY3RpbmcgY2hhbmdlcyBzaG91bGQgYmUgZGlzY2FyZGVkLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBib29sZWFuIGhhbmRsZURpcnR5Q29uZmxpY3QoKSB7CisJCXJldHVybgorCQkJTWVzc2FnZURpYWxvZy5vcGVuUXVlc3Rpb24KKwkJCQkoZ2V0U2l0ZSgpLmdldFNoZWxsKCksCisJCQkJIGdldFN0cmluZygiX1VJX0ZpbGVDb25mbGljdF9sYWJlbCIpLCAvLyROT04tTkxTLTEkCisJCQkJIGdldFN0cmluZygiX1dBUk5fRmlsZUNvbmZsaWN0IikpOyAvLyROT04tTkxTLTEkCisJfQorCisJLyoqCisJICogVGhpcyBjcmVhdGVzIGEgbW9kZWwgZWRpdG9yLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFeHBlcmltZW50RWRpdG9yKCkgeworCQlzdXBlcigpOworCQlpbml0aWFsaXplRWRpdGluZ0RvbWFpbigpOworCX0KKworCS8qKgorCSAqIFRoaXMgc2V0cyB1cCB0aGUgZWRpdGluZyBkb21haW4gZm9yIHRoZSBtb2RlbCBlZGl0b3IuIDwhLS0gYmVnaW4tdXNlci1kb2MKKwkgKiAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogCisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBpbml0aWFsaXplRWRpdGluZ0RvbWFpbigpIHsKKwkJaW5pdGlhbGl6ZUVkaXRpbmdEb21haW5HZW4oKTsKKwkJZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpLmdldFJlc291cmNlRmFjdG9yeVJlZ2lzdHJ5KCkKKwkJCQkuZ2V0RXh0ZW5zaW9uVG9GYWN0b3J5TWFwKCkucHV0KCIqIiwKKwkJCQkJCVNURU1YTUlSZXNvdXJjZUZhY3RvcnlJbXBsLklOU1RBTkNFKTsKKworCQllZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkuZ2V0UmVzb3VyY2VGYWN0b3J5UmVnaXN0cnkoKQorCQkJCS5nZXRQcm90b2NvbFRvRmFjdG9yeU1hcCgpLnB1dCgicGxhdGZvcm0iLAorCQkJCQkJU1RFTVhNSVJlc291cmNlRmFjdG9yeUltcGwuSU5TVEFOQ0UpOworCX0gLy8gaW5pdGlhbGl6ZUVkaXRpbmdEb21haW4KKwkKKwkvKioKKwkgKiBUaGlzIHNldHMgdXAgdGhlIGVkaXRpbmcgZG9tYWluIGZvciB0aGUgbW9kZWwgZWRpdG9yLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIGluaXRpYWxpemVFZGl0aW5nRG9tYWluR2VuKCkgeworCQkvLyBDcmVhdGUgYW4gYWRhcHRlciBmYWN0b3J5IHRoYXQgeWllbGRzIGl0ZW0gcHJvdmlkZXJzLgorCQkvLworCQlhZGFwdGVyRmFjdG9yeSA9IG5ldyBDb21wb3NlZEFkYXB0ZXJGYWN0b3J5KENvbXBvc2VkQWRhcHRlckZhY3RvcnkuRGVzY3JpcHRvci5SZWdpc3RyeS5JTlNUQU5DRSk7CisKKwkJYWRhcHRlckZhY3RvcnkuYWRkQWRhcHRlckZhY3RvcnkobmV3IFJlc291cmNlSXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkoKSk7CisJCWFkYXB0ZXJGYWN0b3J5LmFkZEFkYXB0ZXJGYWN0b3J5KG5ldyBDb21tb25JdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSgpKTsKKwkJYWRhcHRlckZhY3RvcnkuYWRkQWRhcHRlckZhY3RvcnkobmV3IEV4cGVyaW1lbnRJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSgpKTsKKwkJYWRhcHRlckZhY3RvcnkuYWRkQWRhcHRlckZhY3RvcnkobmV3IEdyYXBoSXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkoKSk7CisJCWFkYXB0ZXJGYWN0b3J5LmFkZEFkYXB0ZXJGYWN0b3J5KG5ldyBNb2RlbEl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5KCkpOworCQlhZGFwdGVyRmFjdG9yeS5hZGRBZGFwdGVyRmFjdG9yeShuZXcgTW9kaWZpZXJJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSgpKTsKKwkJYWRhcHRlckZhY3RvcnkuYWRkQWRhcHRlckZhY3RvcnkobmV3IFByZWRpY2F0ZUl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5KCkpOworCQlhZGFwdGVyRmFjdG9yeS5hZGRBZGFwdGVyRmFjdG9yeShuZXcgU2NlbmFyaW9JdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSgpKTsKKwkJYWRhcHRlckZhY3RvcnkuYWRkQWRhcHRlckZhY3RvcnkobmV3IFNlcXVlbmNlckl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5KCkpOworCQlhZGFwdGVyRmFjdG9yeS5hZGRBZGFwdGVyRmFjdG9yeShuZXcgVHJpZ2dlckl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5KCkpOworCQlhZGFwdGVyRmFjdG9yeS5hZGRBZGFwdGVyRmFjdG9yeShuZXcgU29sdmVySXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkoKSk7CisJCWFkYXB0ZXJGYWN0b3J5LmFkZEFkYXB0ZXJGYWN0b3J5KG5ldyBMb2dnZXJJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSgpKTsKKwkJYWRhcHRlckZhY3RvcnkuYWRkQWRhcHRlckZhY3RvcnkobmV3IEVjb3JlSXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkoKSk7CisJCWFkYXB0ZXJGYWN0b3J5LmFkZEFkYXB0ZXJGYWN0b3J5KG5ldyBSZWZsZWN0aXZlSXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkoKSk7CisKKwkJLy8gQ3JlYXRlIHRoZSBjb21tYW5kIHN0YWNrIHRoYXQgd2lsbCBub3RpZnkgdGhpcyBlZGl0b3IgYXMgY29tbWFuZHMgYXJlIGV4ZWN1dGVkLgorCQkvLworCQlCYXNpY0NvbW1hbmRTdGFjayBjb21tYW5kU3RhY2sgPSBuZXcgQmFzaWNDb21tYW5kU3RhY2soKTsKKworCQkvLyBBZGQgYSBsaXN0ZW5lciB0byBzZXQgdGhlIG1vc3QgcmVjZW50IGNvbW1hbmQncyBhZmZlY3RlZCBvYmplY3RzIHRvIGJlIHRoZSBzZWxlY3Rpb24gb2YgdGhlIHZpZXdlciB3aXRoIGZvY3VzLgorCQkvLworCQljb21tYW5kU3RhY2suYWRkQ29tbWFuZFN0YWNrTGlzdGVuZXIKKwkJCShuZXcgQ29tbWFuZFN0YWNrTGlzdGVuZXIoKSB7CisJCQkJIHB1YmxpYyB2b2lkIGNvbW1hbmRTdGFja0NoYW5nZWQoZmluYWwgRXZlbnRPYmplY3QgZXZlbnQpIHsKKwkJCQkJIGdldENvbnRhaW5lcigpLmdldERpc3BsYXkoKS5hc3luY0V4ZWMKKwkJCQkJCSAobmV3IFJ1bm5hYmxlKCkgeworCQkJCQkJCSAgcHVibGljIHZvaWQgcnVuKCkgeworCQkJCQkJCQkgIGZpcmVQcm9wZXJ0eUNoYW5nZShJRWRpdG9yUGFydC5QUk9QX0RJUlRZKTsKKworCQkJCQkJCQkgIC8vIFRyeSB0byBzZWxlY3QgdGhlIGFmZmVjdGVkIG9iamVjdHMuCisJCQkJCQkJCSAgLy8KKwkJCQkJCQkJICBDb21tYW5kIG1vc3RSZWNlbnRDb21tYW5kID0gKChDb21tYW5kU3RhY2spZXZlbnQuZ2V0U291cmNlKCkpLmdldE1vc3RSZWNlbnRDb21tYW5kKCk7CisJCQkJCQkJCSAgaWYgKG1vc3RSZWNlbnRDb21tYW5kICE9IG51bGwpIHsKKwkJCQkJCQkJCSAgc2V0U2VsZWN0aW9uVG9WaWV3ZXIobW9zdFJlY2VudENvbW1hbmQuZ2V0QWZmZWN0ZWRPYmplY3RzKCkpOworCQkJCQkJCQkgIH0KKwkJCQkJCQkJICBpZiAocHJvcGVydHlTaGVldFBhZ2UgIT0gbnVsbCAmJiAhcHJvcGVydHlTaGVldFBhZ2UuZ2V0Q29udHJvbCgpLmlzRGlzcG9zZWQoKSkgeworCQkJCQkJCQkJICBwcm9wZXJ0eVNoZWV0UGFnZS5yZWZyZXNoKCk7CisJCQkJCQkJCSAgfQorCQkJCQkJCSAgfQorCQkJCQkJICB9KTsKKwkJCQkgfQorCQkJIH0pOworCisJCS8vIENyZWF0ZSB0aGUgZWRpdGluZyBkb21haW4gd2l0aCBhIHNwZWNpYWwgY29tbWFuZCBzdGFjay4KKwkJLy8KKwkJZWRpdGluZ0RvbWFpbiA9IG5ldyBBZGFwdGVyRmFjdG9yeUVkaXRpbmdEb21haW4oYWRhcHRlckZhY3RvcnksIGNvbW1hbmRTdGFjaywgbmV3IEhhc2hNYXA8UmVzb3VyY2UsIEJvb2xlYW4+KCkpOworCX0KKworCS8qKgorCSAqIFRoaXMgaXMgaGVyZSBmb3IgdGhlIGxpc3RlbmVyIHRvIGJlIGFibGUgdG8gY2FsbCBpdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwkJCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIGZpcmVQcm9wZXJ0eUNoYW5nZShpbnQgYWN0aW9uKSB7CisJCXN1cGVyLmZpcmVQcm9wZXJ0eUNoYW5nZShhY3Rpb24pOworCX0KKworCS8qKgorCSAqIFRoaXMgc2V0cyB0aGUgc2VsZWN0aW9uIGludG8gd2hpY2hldmVyIHZpZXdlciBpcyBhY3RpdmUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gY29sbGVjdGlvbiAKKwkgKiAgPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIHNldFNlbGVjdGlvblRvVmlld2VyKENvbGxlY3Rpb248Pz4gY29sbGVjdGlvbikgeworCQlmaW5hbCBDb2xsZWN0aW9uPD8+IHRoZVNlbGVjdGlvbiA9IGNvbGxlY3Rpb247CisJCS8vIE1ha2Ugc3VyZSBpdCdzIG9rYXkuCisJCS8vCisJCWlmICh0aGVTZWxlY3Rpb24gIT0gbnVsbCAmJiAhdGhlU2VsZWN0aW9uLmlzRW1wdHkoKSkgeworCQkJUnVubmFibGUgcnVubmFibGUgPQorCQkJCW5ldyBSdW5uYWJsZSgpIHsKKwkJCQkJcHVibGljIHZvaWQgcnVuKCkgeworCQkJCQkJLy8gVHJ5IHRvIHNlbGVjdCB0aGUgaXRlbXMgaW4gdGhlIGN1cnJlbnQgY29udGVudCB2aWV3ZXIgb2YgdGhlIGVkaXRvci4KKwkJCQkJCS8vCisJCQkJCQlpZiAoY3VycmVudFZpZXdlciAhPSBudWxsKSB7CisJCQkJCQkJY3VycmVudFZpZXdlci5zZXRTZWxlY3Rpb24obmV3IFN0cnVjdHVyZWRTZWxlY3Rpb24odGhlU2VsZWN0aW9uLnRvQXJyYXkoKSksIHRydWUpOworCQkJCQkJfQorCQkJCQl9CisJCQkJfTsKKwkJCWdldFNpdGUoKS5nZXRTaGVsbCgpLmdldERpc3BsYXkoKS5hc3luY0V4ZWMocnVubmFibGUpOworCQl9CisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIHRoZSBlZGl0aW5nIGRvbWFpbiBhcyByZXF1aXJlZCBieSB0aGUge0BsaW5rIElFZGl0aW5nRG9tYWluUHJvdmlkZXJ9IGludGVyZmFjZS4KKwkgKiBUaGlzIGlzIGltcG9ydGFudCBmb3IgaW1wbGVtZW50aW5nIHRoZSBzdGF0aWMgbWV0aG9kcyBvZiB7QGxpbmsgQWRhcHRlckZhY3RvcnlFZGl0aW5nRG9tYWlufQorCSAqIGFuZCBmb3Igc3VwcG9ydGluZyB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkuYWN0aW9uLkNvbW1hbmRBY3Rpb259LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgRWRpdGluZ0RvbWFpbiAKKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVkaXRpbmdEb21haW4gZ2V0RWRpdGluZ0RvbWFpbigpIHsKKwkJcmV0dXJuIGVkaXRpbmdEb21haW47CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIGNsYXNzIFJldmVyc2VBZGFwdGVyRmFjdG9yeUNvbnRlbnRQcm92aWRlciBleHRlbmRzIEFkYXB0ZXJGYWN0b3J5Q29udGVudFByb3ZpZGVyIHsKKwkJLyoqCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIEBwYXJhbSBhZGFwdGVyRmFjdG9yeSAKKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCXB1YmxpYyBSZXZlcnNlQWRhcHRlckZhY3RvcnlDb250ZW50UHJvdmlkZXIoQWRhcHRlckZhY3RvcnkgYWRhcHRlckZhY3RvcnkpIHsKKwkJCXN1cGVyKGFkYXB0ZXJGYWN0b3J5KTsKKwkJfQorCisJCS8qKgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJQE92ZXJyaWRlCisJCXB1YmxpYyBPYmplY3QgW10gZ2V0RWxlbWVudHMoT2JqZWN0IG9iamVjdCkgeworCQkJT2JqZWN0IHBhcmVudCA9IHN1cGVyLmdldFBhcmVudChvYmplY3QpOworCQkJcmV0dXJuIChwYXJlbnQgPT0gbnVsbCA/IENvbGxlY3Rpb25zLkVNUFRZX1NFVCA6IENvbGxlY3Rpb25zLnNpbmdsZXRvbihwYXJlbnQpKS50b0FycmF5KCk7CisJCX0KKworCQkvKioKKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUBPdmVycmlkZQorCQlwdWJsaWMgT2JqZWN0IFtdIGdldENoaWxkcmVuKE9iamVjdCBvYmplY3QpIHsKKwkJCU9iamVjdCBwYXJlbnQgPSBzdXBlci5nZXRQYXJlbnQob2JqZWN0KTsKKwkJCXJldHVybiAocGFyZW50ID09IG51bGwgPyBDb2xsZWN0aW9ucy5FTVBUWV9TRVQgOiBDb2xsZWN0aW9ucy5zaW5nbGV0b24ocGFyZW50KSkudG9BcnJheSgpOworCQl9CisKKwkJLyoqCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlAT3ZlcnJpZGUKKwkJcHVibGljIGJvb2xlYW4gaGFzQ2hpbGRyZW4oT2JqZWN0IG9iamVjdCkgeworCQkJT2JqZWN0IHBhcmVudCA9IHN1cGVyLmdldFBhcmVudChvYmplY3QpOworCQkJcmV0dXJuIHBhcmVudCAhPSBudWxsOworCQl9CisKKwkJLyoqCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlAT3ZlcnJpZGUKKwkJcHVibGljIE9iamVjdCBnZXRQYXJlbnQoT2JqZWN0IG9iamVjdCkgeworCQkJcmV0dXJuIG51bGw7CisJCX0KKwl9CisKKwkvKioKKwkgKiBUaGlzIG1ha2VzIHN1cmUgdGhhdCBvbmUgY29udGVudCB2aWV3ZXIsIGVpdGhlciBmb3IgdGhlIGN1cnJlbnQgcGFnZSBvciB0aGUgb3V0bGluZSB2aWV3LCBpZiBpdCBoYXMgZm9jdXMsCisJICogaXMgdGhlIGN1cnJlbnQgb25lLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogQHBhcmFtIHZpZXdlciAKKwkgKiAgPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIHNldEN1cnJlbnRWaWV3ZXIoVmlld2VyIHZpZXdlcikgeworCQkvLyBJZiBpdCBpcyBjaGFuZ2luZy4uLgorCQkvLworCQlpZiAoY3VycmVudFZpZXdlciAhPSB2aWV3ZXIpIHsKKwkJCWlmIChzZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIgPT0gbnVsbCkgeworCQkJCS8vIENyZWF0ZSB0aGUgbGlzdGVuZXIgb24gZGVtYW5kLgorCQkJCS8vCisJCQkJc2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyID0KKwkJCQkJbmV3IElTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIoKSB7CisJCQkJCQkvLyBUaGlzIGp1c3Qgbm90aWZpZXMgdGhvc2UgdGhpbmdzIHRoYXQgYXJlIGFmZmVjdGVkIGJ5IHRoZSBzZWN0aW9uLgorCQkJCQkJLy8KKwkJCQkJCXB1YmxpYyB2b2lkIHNlbGVjdGlvbkNoYW5nZWQoU2VsZWN0aW9uQ2hhbmdlZEV2ZW50IHNlbGVjdGlvbkNoYW5nZWRFdmVudCkgeworCQkJCQkJCXNldFNlbGVjdGlvbihzZWxlY3Rpb25DaGFuZ2VkRXZlbnQuZ2V0U2VsZWN0aW9uKCkpOworCQkJCQkJfQorCQkJCQl9OworCQkJfQorCisJCQkvLyBTdG9wIGxpc3RlbmluZyB0byB0aGUgb2xkIG9uZS4KKwkJCS8vCisJCQlpZiAoY3VycmVudFZpZXdlciAhPSBudWxsKSB7CisJCQkJY3VycmVudFZpZXdlci5yZW1vdmVTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIoc2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyKTsKKwkJCX0KKworCQkJLy8gU3RhcnQgbGlzdGVuaW5nIHRvIHRoZSBuZXcgb25lLgorCQkJLy8KKwkJCWlmICh2aWV3ZXIgIT0gbnVsbCkgeworCQkJCXZpZXdlci5hZGRTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIoc2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyKTsKKwkJCX0KKworCQkJLy8gUmVtZW1iZXIgaXQuCisJCQkvLworCQkJY3VycmVudFZpZXdlciA9IHZpZXdlcjsKKworCQkJLy8gU2V0IHRoZSBlZGl0b3JzIHNlbGVjdGlvbiBiYXNlZCBvbiB0aGUgY3VycmVudCB2aWV3ZXIncyBzZWxlY3Rpb24uCisJCQkvLworCQkJc2V0U2VsZWN0aW9uKGN1cnJlbnRWaWV3ZXIgPT0gbnVsbCA/IFN0cnVjdHVyZWRTZWxlY3Rpb24uRU1QVFkgOiBjdXJyZW50Vmlld2VyLmdldFNlbGVjdGlvbigpKTsKKwkJfQorCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyB0aGUgdmlld2VyIGFzIHJlcXVpcmVkIGJ5IHRoZSB7QGxpbmsgSVZpZXdlclByb3ZpZGVyfSBpbnRlcmZhY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIAorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVmlld2VyIGdldFZpZXdlcigpIHsKKwkJcmV0dXJuIGN1cnJlbnRWaWV3ZXI7CisJfQorCisJLyoqCisJICogVGhpcyBjcmVhdGVzIGEgY29udGV4dCBtZW51IGZvciB0aGUgdmlld2VyIGFuZCBhZGRzIGEgbGlzdGVuZXIgYXMgd2VsbAorCSAqIHJlZ2lzdGVyaW5nIHRoZSBtZW51IGZvciBleHRlbnNpb24uIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0KKwkgKiBlbmQtdXNlci1kb2MgLS0+CisJICogCisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBjcmVhdGVDb250ZXh0TWVudUZvcihTdHJ1Y3R1cmVkVmlld2VyIHZpZXdlcikgeworCQlNZW51TWFuYWdlciBjb250ZXh0TWVudSA9IG5ldyBNZW51TWFuYWdlcigiI1BvcFVwIik7IC8vJE5PTi1OTFMtMSQKKwkJY29udGV4dE1lbnUuYWRkKG5ldyBTZXBhcmF0b3IoImFkZGl0aW9ucyIpKTsgLy8kTk9OLU5MUy0xJAorCQljb250ZXh0TWVudS5zZXRSZW1vdmVBbGxXaGVuU2hvd24odHJ1ZSk7CisJCWNvbnRleHRNZW51LmFkZE1lbnVMaXN0ZW5lcih0aGlzKTsKKwkJTWVudSBtZW51ID0gY29udGV4dE1lbnUuY3JlYXRlQ29udGV4dE1lbnUodmlld2VyLmdldENvbnRyb2woKSk7CisJCXZpZXdlci5nZXRDb250cm9sKCkuc2V0TWVudShtZW51KTsKKwkJZ2V0U2l0ZSgpLnJlZ2lzdGVyQ29udGV4dE1lbnUoY29udGV4dE1lbnUsIHZpZXdlcik7CisKKwkJaW50IGRuZE9wZXJhdGlvbnMgPSBETkQuRFJPUF9DT1BZIHwgRE5ELkRST1BfTU9WRSB8IERORC5EUk9QX0xJTks7CisJCVRyYW5zZmVyW10gdHJhbnNmZXJzID0gbmV3IFRyYW5zZmVyW10ge0xvY2FsU2VsZWN0aW9uVHJhbnNmZXIuZ2V0VHJhbnNmZXIoKSwgTG9jYWxUcmFuc2Zlci5nZXRJbnN0YW5jZSgpLAorCQkJCVRleHRUcmFuc2Zlci5nZXRJbnN0YW5jZSgpIH07CisJCXZpZXdlci5hZGREcmFnU3VwcG9ydChkbmRPcGVyYXRpb25zLCB0cmFuc2ZlcnMsIG5ldyBWaWV3ZXJEcmFnQWRhcHRlcigKKwkJCQl2aWV3ZXIpKTsKKwkJdmlld2VyLmFkZERyb3BTdXBwb3J0KGRuZE9wZXJhdGlvbnMsIHRyYW5zZmVycywKKwkJCQluZXcgRWRpdGluZ0RvbWFpblZpZXdlckRyb3BBZGFwdGVyKGVkaXRpbmdEb21haW4sIHZpZXdlcikpOworCX0gLy8gY3JlYXRlQ29udGV4dE1lbnVGb3IKKworCS8qKgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBjcmVhdGVDb250ZXh0TWVudUZvckdlbihTdHJ1Y3R1cmVkVmlld2VyIHZpZXdlcikgeworCQlNZW51TWFuYWdlciBjb250ZXh0TWVudSA9IG5ldyBNZW51TWFuYWdlcigiI1BvcFVwIik7IC8vJE5PTi1OTFMtMSQKKwkJY29udGV4dE1lbnUuYWRkKG5ldyBTZXBhcmF0b3IoImFkZGl0aW9ucyIpKTsgLy8kTk9OLU5MUy0xJAorCQljb250ZXh0TWVudS5zZXRSZW1vdmVBbGxXaGVuU2hvd24odHJ1ZSk7CisJCWNvbnRleHRNZW51LmFkZE1lbnVMaXN0ZW5lcih0aGlzKTsKKwkJTWVudSBtZW51PSBjb250ZXh0TWVudS5jcmVhdGVDb250ZXh0TWVudSh2aWV3ZXIuZ2V0Q29udHJvbCgpKTsKKwkJdmlld2VyLmdldENvbnRyb2woKS5zZXRNZW51KG1lbnUpOworCQlnZXRTaXRlKCkucmVnaXN0ZXJDb250ZXh0TWVudShjb250ZXh0TWVudSwgbmV3IFVud3JhcHBpbmdTZWxlY3Rpb25Qcm92aWRlcih2aWV3ZXIpKTsKKworCQlpbnQgZG5kT3BlcmF0aW9ucyA9IERORC5EUk9QX0NPUFkgfCBETkQuRFJPUF9NT1ZFIHwgRE5ELkRST1BfTElOSzsKKwkJVHJhbnNmZXJbXSB0cmFuc2ZlcnMgPSBuZXcgVHJhbnNmZXJbXSB7IExvY2FsVHJhbnNmZXIuZ2V0SW5zdGFuY2UoKSB9OworCQl2aWV3ZXIuYWRkRHJhZ1N1cHBvcnQoZG5kT3BlcmF0aW9ucywgdHJhbnNmZXJzLCBuZXcgVmlld2VyRHJhZ0FkYXB0ZXIodmlld2VyKSk7CisJCXZpZXdlci5hZGREcm9wU3VwcG9ydChkbmRPcGVyYXRpb25zLCB0cmFuc2ZlcnMsIG5ldyBFZGl0aW5nRG9tYWluVmlld2VyRHJvcEFkYXB0ZXIoZWRpdGluZ0RvbWFpbiwgdmlld2VyKSk7CisJfQorCisJLyoqCisJICogVGhpcyBpcyB0aGUgbWV0aG9kIGNhbGxlZCB0byBsb2FkIGEgcmVzb3VyY2UgaW50byB0aGUgZWRpdGluZyBkb21haW4ncyByZXNvdXJjZSBzZXQgYmFzZWQgb24gdGhlIGVkaXRvcidzIGlucHV0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIGNyZWF0ZU1vZGVsKCkgeworCQlVUkkgcmVzb3VyY2VVUkkgPSBFZGl0VUlVdGlsLmdldFVSSShnZXRFZGl0b3JJbnB1dCgpKTsKKwkJRXhjZXB0aW9uIGV4Y2VwdGlvbiA9IG51bGw7CisJCVJlc291cmNlIHJlc291cmNlID0gbnVsbDsKKwkJdHJ5IHsKKwkJCS8vIExvYWQgdGhlIHJlc291cmNlIHRocm91Z2ggdGhlIGVkaXRpbmcgZG9tYWluLgorCQkJLy8KKwkJCXJlc291cmNlID0gZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpLmdldFJlc291cmNlKHJlc291cmNlVVJJLCB0cnVlKTsKKwkJfQorCQljYXRjaCAoRXhjZXB0aW9uIGUpIHsKKwkJCWV4Y2VwdGlvbiA9IGU7CisJCQlyZXNvdXJjZSA9IGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKS5nZXRSZXNvdXJjZShyZXNvdXJjZVVSSSwgZmFsc2UpOworCQl9CisKKwkJRGlhZ25vc3RpYyBkaWFnbm9zdGljID0gYW5hbHl6ZVJlc291cmNlUHJvYmxlbXMocmVzb3VyY2UsIGV4Y2VwdGlvbik7CisJCWlmIChkaWFnbm9zdGljLmdldFNldmVyaXR5KCkgIT0gRGlhZ25vc3RpYy5PSykgeworCQkJcmVzb3VyY2VUb0RpYWdub3N0aWNNYXAucHV0KHJlc291cmNlLCAgYW5hbHl6ZVJlc291cmNlUHJvYmxlbXMocmVzb3VyY2UsIGV4Y2VwdGlvbikpOworCQl9CisJCWVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKS5lQWRhcHRlcnMoKS5hZGQocHJvYmxlbUluZGljYXRpb25BZGFwdGVyKTsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIGEgZGlhZ25vc3RpYyBkZXNjcmliaW5nIHRoZSBlcnJvcnMgYW5kIHdhcm5pbmdzIGxpc3RlZCBpbiB0aGUgcmVzb3VyY2UKKwkgKiBhbmQgdGhlIHNwZWNpZmllZCBleGNlcHRpb24gKGlmIGFueSkuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gcmVzb3VyY2UgCisJICogQHBhcmFtIGV4Y2VwdGlvbiAKKwkgKiBAcmV0dXJuCisJICogIDwhLS0gZW5kLXVzZXItZG9jIC0tPiAKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIERpYWdub3N0aWMgYW5hbHl6ZVJlc291cmNlUHJvYmxlbXMoUmVzb3VyY2UgcmVzb3VyY2UsIEV4Y2VwdGlvbiBleGNlcHRpb24pIHsKKwkJaWYgKCFyZXNvdXJjZS5nZXRFcnJvcnMoKS5pc0VtcHR5KCkgfHwgIXJlc291cmNlLmdldFdhcm5pbmdzKCkuaXNFbXB0eSgpKSB7CisJCQlCYXNpY0RpYWdub3N0aWMgYmFzaWNEaWFnbm9zdGljID0KKwkJCQluZXcgQmFzaWNEaWFnbm9zdGljCisJCQkJCShEaWFnbm9zdGljLkVSUk9SLAorCQkJCQkgIm9yZy5lY2xpcHNlLnN0ZW0uY29yZS5lZGl0b3IiLCAvLyROT04tTkxTLTEkCisJCQkJCSAwLAorCQkJCQkgZ2V0U3RyaW5nKCJfVUlfQ3JlYXRlTW9kZWxFcnJvcl9tZXNzYWdlIiwgcmVzb3VyY2UuZ2V0VVJJKCkpLCAvLyROT04tTkxTLTEkCisJCQkJCSBuZXcgT2JqZWN0IFtdIHsgZXhjZXB0aW9uID09IG51bGwgPyAoT2JqZWN0KXJlc291cmNlIDogZXhjZXB0aW9uIH0pOworCQkJYmFzaWNEaWFnbm9zdGljLm1lcmdlKEVjb3JlVXRpbC5jb21wdXRlRGlhZ25vc3RpYyhyZXNvdXJjZSwgdHJ1ZSkpOworCQkJcmV0dXJuIGJhc2ljRGlhZ25vc3RpYzsKKwkJfQorCQllbHNlIGlmIChleGNlcHRpb24gIT0gbnVsbCkgeworCQkJcmV0dXJuCisJCQkJbmV3IEJhc2ljRGlhZ25vc3RpYworCQkJCQkoRGlhZ25vc3RpYy5FUlJPUiwKKwkJCQkJICJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZWRpdG9yIiwgLy8kTk9OLU5MUy0xJAorCQkJCQkgMCwKKwkJCQkJIGdldFN0cmluZygiX1VJX0NyZWF0ZU1vZGVsRXJyb3JfbWVzc2FnZSIsIHJlc291cmNlLmdldFVSSSgpKSwgLy8kTk9OLU5MUy0xJAorCQkJCQkgbmV3IE9iamVjdFtdIHsgZXhjZXB0aW9uIH0pOworCQl9CisJCWVsc2UgeworCQkJcmV0dXJuIERpYWdub3N0aWMuT0tfSU5TVEFOQ0U7CisJCX0KKwl9CisKKwkvKioKKwkgKiBUaGlzIGlzIHRoZSBtZXRob2QgdXNlZCBieSB0aGUgZnJhbWV3b3JrIHRvIGluc3RhbGwgeW91ciBvd24gY29udHJvbHMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGNyZWF0ZVBhZ2VzKCkgeworCQkvLyBDcmVhdGVzIHRoZSBtb2RlbCBmcm9tIHRoZSBlZGl0b3IgaW5wdXQKKwkJLy8KKwkJY3JlYXRlTW9kZWwoKTsKKworCQkvLyBPbmx5IGNyZWF0ZXMgdGhlIG90aGVyIHBhZ2VzIGlmIHRoZXJlIGlzIHNvbWV0aGluZyB0aGF0IGNhbiBiZSBlZGl0ZWQKKwkJLy8KKwkJaWYgKCFnZXRFZGl0aW5nRG9tYWluKCkuZ2V0UmVzb3VyY2VTZXQoKS5nZXRSZXNvdXJjZXMoKS5pc0VtcHR5KCkpIHsKKwkJCS8vIENyZWF0ZSBhIHBhZ2UgZm9yIHRoZSBzZWxlY3Rpb24gdHJlZSB2aWV3LgorCQkJLy8KKwkJCVRyZWUgdHJlZSA9IG5ldyBUcmVlKGdldENvbnRhaW5lcigpLCBTV1QuTVVMVEkpOworCQkJc2VsZWN0aW9uVmlld2VyID0gbmV3IFRyZWVWaWV3ZXIodHJlZSk7CisJCQlzZXRDdXJyZW50Vmlld2VyKHNlbGVjdGlvblZpZXdlcik7CisKKwkJCXNlbGVjdGlvblZpZXdlci5zZXRDb250ZW50UHJvdmlkZXIobmV3IEFkYXB0ZXJGYWN0b3J5Q29udGVudFByb3ZpZGVyKGFkYXB0ZXJGYWN0b3J5KSk7CisJCQlzZWxlY3Rpb25WaWV3ZXIuc2V0TGFiZWxQcm92aWRlcihuZXcgQWRhcHRlckZhY3RvcnlMYWJlbFByb3ZpZGVyKGFkYXB0ZXJGYWN0b3J5KSk7CisJCQkvL3NlbGVjdGlvblZpZXdlci5zZXRJbnB1dChlZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkpOworCQkJc2VsZWN0aW9uVmlld2VyLnNldElucHV0KGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKS5nZXRSZXNvdXJjZXMoKS5nZXQoMCkpOworCQkJc2VsZWN0aW9uVmlld2VyLnNldFNlbGVjdGlvbihuZXcgU3RydWN0dXJlZFNlbGVjdGlvbihlZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkuZ2V0UmVzb3VyY2VzKCkuZ2V0KDApKSwgdHJ1ZSk7CisKKwkJCW5ldyBBZGFwdGVyRmFjdG9yeVRyZWVFZGl0b3Ioc2VsZWN0aW9uVmlld2VyLmdldFRyZWUoKSwgYWRhcHRlckZhY3RvcnkpOworCisJCQljcmVhdGVDb250ZXh0TWVudUZvcihzZWxlY3Rpb25WaWV3ZXIpOworCQkJaW50IHBhZ2VJbmRleCA9IGFkZFBhZ2UodHJlZSk7CisJCQlzZXRQYWdlVGV4dChwYWdlSW5kZXgsIGdldFN0cmluZygiX1VJX1NlbGVjdGlvblBhZ2VfbGFiZWwiKSk7IC8vJE5PTi1OTFMtMSQKKworCQkJZ2V0U2l0ZSgpLmdldFNoZWxsKCkuZ2V0RGlzcGxheSgpLmFzeW5jRXhlYworCQkJCShuZXcgUnVubmFibGUoKSB7CisJCQkJCSBwdWJsaWMgdm9pZCBydW4oKSB7CisJCQkJCQkgc2V0QWN0aXZlUGFnZSgwKTsKKwkJCQkJIH0KKwkJCQkgfSk7CisJCX0KKworCQkvLyBFbnN1cmVzIHRoYXQgdGhpcyBlZGl0b3Igd2lsbCBvbmx5IGRpc3BsYXkgdGhlIHBhZ2UncyB0YWIKKwkJLy8gYXJlYSBpZiB0aGVyZSBhcmUgbW9yZSB0aGFuIG9uZSBwYWdlCisJCS8vCisJCWdldENvbnRhaW5lcigpLmFkZENvbnRyb2xMaXN0ZW5lcgorCQkJKG5ldyBDb250cm9sQWRhcHRlcigpIHsKKwkJCQlib29sZWFuIGd1YXJkID0gZmFsc2U7CisJCQkJQE92ZXJyaWRlCisJCQkJcHVibGljIHZvaWQgY29udHJvbFJlc2l6ZWQoQ29udHJvbEV2ZW50IGV2ZW50KSB7CisJCQkJCWlmICghZ3VhcmQpIHsKKwkJCQkJCWd1YXJkID0gdHJ1ZTsKKwkJCQkJCWhpZGVUYWJzKCk7CisJCQkJCQlndWFyZCA9IGZhbHNlOworCQkJCQl9CisJCQkJfQorCQkJIH0pOworCisJCWdldFNpdGUoKS5nZXRTaGVsbCgpLmdldERpc3BsYXkoKS5hc3luY0V4ZWMKKwkJCShuZXcgUnVubmFibGUoKSB7CisJCQkJIHB1YmxpYyB2b2lkIHJ1bigpIHsKKwkJCQkJIHVwZGF0ZVByb2JsZW1JbmRpY2F0aW9uKCk7CisJCQkJIH0KKwkJCSB9KTsKKwl9IC8vIGNyZWF0ZVBhZ2VzCisKKwkvKioKKwkgKiBUaGlzIGlzIHRoZSBtZXRob2QgdXNlZCBieSB0aGUgZnJhbWV3b3JrIHRvIGluc3RhbGwgeW91ciBvd24gY29udHJvbHMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJLy9AT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBjcmVhdGVQYWdlc0dlbigpIHsKKwkJLy8gQ3JlYXRlcyB0aGUgbW9kZWwgZnJvbSB0aGUgZWRpdG9yIGlucHV0CisJCS8vCisJCWNyZWF0ZU1vZGVsKCk7CisKKwkJLy8gT25seSBjcmVhdGVzIHRoZSBvdGhlciBwYWdlcyBpZiB0aGVyZSBpcyBzb21ldGhpbmcgdGhhdCBjYW4gYmUgZWRpdGVkCisJCS8vCisJCWlmICghZ2V0RWRpdGluZ0RvbWFpbigpLmdldFJlc291cmNlU2V0KCkuZ2V0UmVzb3VyY2VzKCkuaXNFbXB0eSgpKSB7CisJCQkvLyBDcmVhdGUgYSBwYWdlIGZvciB0aGUgc2VsZWN0aW9uIHRyZWUgdmlldy4KKwkJCS8vCisJCQlUcmVlIHRyZWUgPSBuZXcgVHJlZShnZXRDb250YWluZXIoKSwgU1dULk1VTFRJKTsKKwkJCXNlbGVjdGlvblZpZXdlciA9IG5ldyBUcmVlVmlld2VyKHRyZWUpOworCQkJc2V0Q3VycmVudFZpZXdlcihzZWxlY3Rpb25WaWV3ZXIpOworCisJCQlzZWxlY3Rpb25WaWV3ZXIuc2V0Q29udGVudFByb3ZpZGVyKG5ldyBBZGFwdGVyRmFjdG9yeUNvbnRlbnRQcm92aWRlcihhZGFwdGVyRmFjdG9yeSkpOworCQkJc2VsZWN0aW9uVmlld2VyLnNldExhYmVsUHJvdmlkZXIobmV3IEFkYXB0ZXJGYWN0b3J5TGFiZWxQcm92aWRlcihhZGFwdGVyRmFjdG9yeSkpOworCQkJc2VsZWN0aW9uVmlld2VyLnNldElucHV0KGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKSk7CisJCQlzZWxlY3Rpb25WaWV3ZXIuc2V0U2VsZWN0aW9uKG5ldyBTdHJ1Y3R1cmVkU2VsZWN0aW9uKGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKS5nZXRSZXNvdXJjZXMoKS5nZXQoMCkpLCB0cnVlKTsKKworCQkJbmV3IEFkYXB0ZXJGYWN0b3J5VHJlZUVkaXRvcihzZWxlY3Rpb25WaWV3ZXIuZ2V0VHJlZSgpLCBhZGFwdGVyRmFjdG9yeSk7CisKKwkJCWNyZWF0ZUNvbnRleHRNZW51Rm9yKHNlbGVjdGlvblZpZXdlcik7CisJCQlpbnQgcGFnZUluZGV4ID0gYWRkUGFnZSh0cmVlKTsKKwkJCXNldFBhZ2VUZXh0KHBhZ2VJbmRleCwgZ2V0U3RyaW5nKCJfVUlfU2VsZWN0aW9uUGFnZV9sYWJlbCIpKTsgLy8kTk9OLU5MUy0xJAorCisJCQlnZXRTaXRlKCkuZ2V0U2hlbGwoKS5nZXREaXNwbGF5KCkuYXN5bmNFeGVjCisJCQkJKG5ldyBSdW5uYWJsZSgpIHsKKwkJCQkJIHB1YmxpYyB2b2lkIHJ1bigpIHsKKwkJCQkJCSBzZXRBY3RpdmVQYWdlKDApOworCQkJCQkgfQorCQkJCSB9KTsKKwkJfQorCisJCS8vIEVuc3VyZXMgdGhhdCB0aGlzIGVkaXRvciB3aWxsIG9ubHkgZGlzcGxheSB0aGUgcGFnZSdzIHRhYgorCQkvLyBhcmVhIGlmIHRoZXJlIGFyZSBtb3JlIHRoYW4gb25lIHBhZ2UKKwkJLy8KKwkJZ2V0Q29udGFpbmVyKCkuYWRkQ29udHJvbExpc3RlbmVyCisJCQkobmV3IENvbnRyb2xBZGFwdGVyKCkgeworCQkJCWJvb2xlYW4gZ3VhcmQgPSBmYWxzZTsKKwkJCQlAT3ZlcnJpZGUKKwkJCQlwdWJsaWMgdm9pZCBjb250cm9sUmVzaXplZChDb250cm9sRXZlbnQgZXZlbnQpIHsKKwkJCQkJaWYgKCFndWFyZCkgeworCQkJCQkJZ3VhcmQgPSB0cnVlOworCQkJCQkJaGlkZVRhYnMoKTsKKwkJCQkJCWd1YXJkID0gZmFsc2U7CisJCQkJCX0KKwkJCQl9CisJCQkgfSk7CisKKwkJZ2V0U2l0ZSgpLmdldFNoZWxsKCkuZ2V0RGlzcGxheSgpLmFzeW5jRXhlYworCQkJKG5ldyBSdW5uYWJsZSgpIHsKKwkJCQkgcHVibGljIHZvaWQgcnVuKCkgeworCQkJCQkgdXBkYXRlUHJvYmxlbUluZGljYXRpb24oKTsKKwkJCQkgfQorCQkJIH0pOworCX0KKworCS8qKgorCSAqIElmIHRoZXJlIGlzIGp1c3Qgb25lIHBhZ2UgaW4gdGhlIG11bHRpLXBhZ2UgZWRpdG9yIHBhcnQsCisJICogdGhpcyBoaWRlcyB0aGUgc2luZ2xlIHRhYiBhdCB0aGUgYm90dG9tLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIGhpZGVUYWJzKCkgeworCQlpZiAoZ2V0UGFnZUNvdW50KCkgPD0gMSkgeworCQkJc2V0UGFnZVRleHQoMCwgIiIpOyAvLyROT04tTkxTLTEkCisJCQlpZiAoZ2V0Q29udGFpbmVyKCkgaW5zdGFuY2VvZiBDVGFiRm9sZGVyKSB7CisJCQkJKChDVGFiRm9sZGVyKWdldENvbnRhaW5lcigpKS5zZXRUYWJIZWlnaHQoMSk7CisJCQkJUG9pbnQgcG9pbnQgPSBnZXRDb250YWluZXIoKS5nZXRTaXplKCk7CisJCQkJZ2V0Q29udGFpbmVyKCkuc2V0U2l6ZShwb2ludC54LCBwb2ludC55ICsgNik7CisJCQl9CisJCX0KKwl9CisKKwkvKioKKwkgKiBJZiB0aGVyZSBpcyBtb3JlIHRoYW4gb25lIHBhZ2UgaW4gdGhlIG11bHRpLXBhZ2UgZWRpdG9yIHBhcnQsCisJICogdGhpcyBzaG93cyB0aGUgdGFicyBhdCB0aGUgYm90dG9tLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIHNob3dUYWJzKCkgeworCQlpZiAoZ2V0UGFnZUNvdW50KCkgPiAxKSB7CisJCQlzZXRQYWdlVGV4dCgwLCBnZXRTdHJpbmcoIl9VSV9TZWxlY3Rpb25QYWdlX2xhYmVsIikpOyAvLyROT04tTkxTLTEkCisJCQlpZiAoZ2V0Q29udGFpbmVyKCkgaW5zdGFuY2VvZiBDVGFiRm9sZGVyKSB7CisJCQkJKChDVGFiRm9sZGVyKWdldENvbnRhaW5lcigpKS5zZXRUYWJIZWlnaHQoU1dULkRFRkFVTFQpOworCQkJCVBvaW50IHBvaW50ID0gZ2V0Q29udGFpbmVyKCkuZ2V0U2l6ZSgpOworCQkJCWdldENvbnRhaW5lcigpLnNldFNpemUocG9pbnQueCwgcG9pbnQueSAtIDYpOworCQkJfQorCQl9CisJfQorCisJLyoqCisJICogVGhpcyBpcyB1c2VkIHRvIHRyYWNrIHRoZSBhY3RpdmUgdmlld2VyLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIHBhZ2VDaGFuZ2UoaW50IHBhZ2VJbmRleCkgeworCQlzdXBlci5wYWdlQ2hhbmdlKHBhZ2VJbmRleCk7CisKKwkJaWYgKGNvbnRlbnRPdXRsaW5lUGFnZSAhPSBudWxsKSB7CisJCQloYW5kbGVDb250ZW50T3V0bGluZVNlbGVjdGlvbihjb250ZW50T3V0bGluZVBhZ2UuZ2V0U2VsZWN0aW9uKCkpOworCQl9CisJfQorCisJLyoqCisJICogVGhpcyBpcyBob3cgdGhlIGZyYW1ld29yayBkZXRlcm1pbmVzIHdoaWNoIGludGVyZmFjZXMgd2UgaW1wbGVtZW50LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBTdXBwcmVzc1dhcm5pbmdzKCJ1bmNoZWNrZWQiKQorCUBPdmVycmlkZQorCXB1YmxpYyBPYmplY3QgZ2V0QWRhcHRlcihDbGFzcyBrZXkpIHsKKwkJaWYgKGtleS5lcXVhbHMoSUNvbnRlbnRPdXRsaW5lUGFnZS5jbGFzcykpIHsKKwkJCXJldHVybiBzaG93T3V0bGluZVZpZXcoKSA/IGdldENvbnRlbnRPdXRsaW5lUGFnZSgpIDogbnVsbDsKKwkJfQorCQllbHNlIGlmIChrZXkuZXF1YWxzKElQcm9wZXJ0eVNoZWV0UGFnZS5jbGFzcykpIHsKKwkJCXJldHVybiBnZXRQcm9wZXJ0eVNoZWV0UGFnZSgpOworCQl9CisJCWVsc2UgaWYgKGtleS5lcXVhbHMoSUdvdG9NYXJrZXIuY2xhc3MpKSB7CisJCQlyZXR1cm4gdGhpczsKKwkJfQorCQllbHNlIHsKKwkJCXJldHVybiBzdXBlci5nZXRBZGFwdGVyKGtleSk7CisJCX0KKwl9CisKKwkvKioKKwkgKiBUaGlzIGFjY2Vzc2VzIGEgY2FjaGVkIHZlcnNpb24gb2YgdGhlIGNvbnRlbnQgb3V0bGluZXIuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIAorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgSUNvbnRlbnRPdXRsaW5lUGFnZSBnZXRDb250ZW50T3V0bGluZVBhZ2UoKSB7CisJCWlmIChjb250ZW50T3V0bGluZVBhZ2UgPT0gbnVsbCkgeworCQkJLy8gVGhlIGNvbnRlbnQgb3V0bGluZSBpcyBqdXN0IGEgdHJlZS4KKwkJCS8vCisJCQljbGFzcyBNeUNvbnRlbnRPdXRsaW5lUGFnZSBleHRlbmRzIENvbnRlbnRPdXRsaW5lUGFnZSB7CisJCQkJQE92ZXJyaWRlCisJCQkJcHVibGljIHZvaWQgY3JlYXRlQ29udHJvbChDb21wb3NpdGUgcGFyZW50KSB7CisJCQkJCXN1cGVyLmNyZWF0ZUNvbnRyb2wocGFyZW50KTsKKwkJCQkJY29udGVudE91dGxpbmVWaWV3ZXIgPSBnZXRUcmVlVmlld2VyKCk7CisJCQkJCWNvbnRlbnRPdXRsaW5lVmlld2VyLmFkZFNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcih0aGlzKTsKKworCQkJCQkvLyBTZXQgdXAgdGhlIHRyZWUgdmlld2VyLgorCQkJCQkvLworCQkJCQljb250ZW50T3V0bGluZVZpZXdlci5zZXRDb250ZW50UHJvdmlkZXIobmV3IEFkYXB0ZXJGYWN0b3J5Q29udGVudFByb3ZpZGVyKGFkYXB0ZXJGYWN0b3J5KSk7CisJCQkJCWNvbnRlbnRPdXRsaW5lVmlld2VyLnNldExhYmVsUHJvdmlkZXIobmV3IEFkYXB0ZXJGYWN0b3J5TGFiZWxQcm92aWRlcihhZGFwdGVyRmFjdG9yeSkpOworCQkJCQljb250ZW50T3V0bGluZVZpZXdlci5zZXRJbnB1dChlZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkpOworCisJCQkJCS8vIE1ha2Ugc3VyZSBvdXIgcG9wdXBzIHdvcmsuCisJCQkJCS8vCisJCQkJCWNyZWF0ZUNvbnRleHRNZW51Rm9yKGNvbnRlbnRPdXRsaW5lVmlld2VyKTsKKworCQkJCQlpZiAoIWVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKS5nZXRSZXNvdXJjZXMoKS5pc0VtcHR5KCkpIHsKKwkJCQkJICAvLyBTZWxlY3QgdGhlIHJvb3Qgb2JqZWN0IGluIHRoZSB2aWV3LgorCQkJCQkgIC8vCisJCQkJCSAgY29udGVudE91dGxpbmVWaWV3ZXIuc2V0U2VsZWN0aW9uKG5ldyBTdHJ1Y3R1cmVkU2VsZWN0aW9uKGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKS5nZXRSZXNvdXJjZXMoKS5nZXQoMCkpLCB0cnVlKTsKKwkJCQkJfQorCQkJCX0KKworCQkJCUBPdmVycmlkZQorCQkJCXB1YmxpYyB2b2lkIG1ha2VDb250cmlidXRpb25zKElNZW51TWFuYWdlciBtZW51TWFuYWdlciwgSVRvb2xCYXJNYW5hZ2VyIHRvb2xCYXJNYW5hZ2VyLCBJU3RhdHVzTGluZU1hbmFnZXIgc3RhdHVzTGluZU1hbmFnZXIpIHsKKwkJCQkJc3VwZXIubWFrZUNvbnRyaWJ1dGlvbnMobWVudU1hbmFnZXIsIHRvb2xCYXJNYW5hZ2VyLCBzdGF0dXNMaW5lTWFuYWdlcik7CisJCQkJCWNvbnRlbnRPdXRsaW5lU3RhdHVzTGluZU1hbmFnZXIgPSBzdGF0dXNMaW5lTWFuYWdlcjsKKwkJCQl9CisKKwkJCQlAT3ZlcnJpZGUKKwkJCQlwdWJsaWMgdm9pZCBzZXRBY3Rpb25CYXJzKElBY3Rpb25CYXJzIGFjdGlvbkJhcnMpIHsKKwkJCQkJc3VwZXIuc2V0QWN0aW9uQmFycyhhY3Rpb25CYXJzKTsKKwkJCQkJZ2V0QWN0aW9uQmFyQ29udHJpYnV0b3IoKS5zaGFyZUdsb2JhbEFjdGlvbnModGhpcywgYWN0aW9uQmFycyk7CisJCQkJfQorCQkJfQorCisJCQljb250ZW50T3V0bGluZVBhZ2UgPSBuZXcgTXlDb250ZW50T3V0bGluZVBhZ2UoKTsKKworCQkJLy8gTGlzdGVuIHRvIHNlbGVjdGlvbiBzbyB0aGF0IHdlIGNhbiBoYW5kbGUgaXQgaXMgYSBzcGVjaWFsIHdheS4KKwkJCS8vCisJCQljb250ZW50T3V0bGluZVBhZ2UuYWRkU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyCisJCQkJKG5ldyBJU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyKCkgeworCQkJCQkgLy8gVGhpcyBlbnN1cmVzIHRoYXQgd2UgaGFuZGxlIHNlbGVjdGlvbnMgY29ycmVjdGx5LgorCQkJCQkgLy8KKwkJCQkJIHB1YmxpYyB2b2lkIHNlbGVjdGlvbkNoYW5nZWQoU2VsZWN0aW9uQ2hhbmdlZEV2ZW50IGV2ZW50KSB7CisJCQkJCQkgaGFuZGxlQ29udGVudE91dGxpbmVTZWxlY3Rpb24oZXZlbnQuZ2V0U2VsZWN0aW9uKCkpOworCQkJCQkgfQorCQkJCSB9KTsKKwkJfQorCisJCXJldHVybiBjb250ZW50T3V0bGluZVBhZ2U7CisJfQorCisJLyoqCisJICogVGhpcyBhY2Nlc3NlcyBhIGNhY2hlZCB2ZXJzaW9uIG9mIHRoZSBwcm9wZXJ0eSBzaGVldC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4gCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBJUHJvcGVydHlTaGVldFBhZ2UgZ2V0UHJvcGVydHlTaGVldFBhZ2UoKSB7CisJCWlmIChwcm9wZXJ0eVNoZWV0UGFnZSA9PSBudWxsKSB7CisJCQlwcm9wZXJ0eVNoZWV0UGFnZSA9CisJCQkJbmV3IEV4dGVuZGVkUHJvcGVydHlTaGVldFBhZ2UoZWRpdGluZ0RvbWFpbikgeworCQkJCQlAT3ZlcnJpZGUKKwkJCQkJcHVibGljIHZvaWQgc2V0U2VsZWN0aW9uVG9WaWV3ZXIoTGlzdDw/PiBzZWxlY3Rpb24pIHsKKwkJCQkJCUV4cGVyaW1lbnRFZGl0b3IudGhpcy5zZXRTZWxlY3Rpb25Ub1ZpZXdlcihzZWxlY3Rpb24pOworCQkJCQkJRXhwZXJpbWVudEVkaXRvci50aGlzLnNldEZvY3VzKCk7CisJCQkJCX0KKworCQkJCQlAT3ZlcnJpZGUKKwkJCQkJcHVibGljIHZvaWQgc2V0QWN0aW9uQmFycyhJQWN0aW9uQmFycyBhY3Rpb25CYXJzKSB7CisJCQkJCQlzdXBlci5zZXRBY3Rpb25CYXJzKGFjdGlvbkJhcnMpOworCQkJCQkJZ2V0QWN0aW9uQmFyQ29udHJpYnV0b3IoKS5zaGFyZUdsb2JhbEFjdGlvbnModGhpcywgYWN0aW9uQmFycyk7CisJCQkJCX0KKwkJCQl9OworCQkJcHJvcGVydHlTaGVldFBhZ2Uuc2V0UHJvcGVydHlTb3VyY2VQcm92aWRlcihuZXcgQWRhcHRlckZhY3RvcnlDb250ZW50UHJvdmlkZXIoYWRhcHRlckZhY3RvcnkpKTsKKwkJfQorCisJCXJldHVybiBwcm9wZXJ0eVNoZWV0UGFnZTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGRlYWxzIHdpdGggaG93IHdlIHdhbnQgc2VsZWN0aW9uIGluIHRoZSBvdXRsaW5lciB0byBhZmZlY3QgdGhlIG90aGVyIHZpZXdzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogQHBhcmFtIHNlbGVjdGlvbiAKKwkgKiAgPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIGhhbmRsZUNvbnRlbnRPdXRsaW5lU2VsZWN0aW9uKElTZWxlY3Rpb24gc2VsZWN0aW9uKSB7CisJCWlmIChzZWxlY3Rpb25WaWV3ZXIgIT0gbnVsbCAmJiAhc2VsZWN0aW9uLmlzRW1wdHkoKSAmJiBzZWxlY3Rpb24gaW5zdGFuY2VvZiBJU3RydWN0dXJlZFNlbGVjdGlvbikgeworCQkJSXRlcmF0b3I8Pz4gc2VsZWN0ZWRFbGVtZW50cyA9ICgoSVN0cnVjdHVyZWRTZWxlY3Rpb24pc2VsZWN0aW9uKS5pdGVyYXRvcigpOworCQkJaWYgKHNlbGVjdGVkRWxlbWVudHMuaGFzTmV4dCgpKSB7CisJCQkJLy8gR2V0IHRoZSBmaXJzdCBzZWxlY3RlZCBlbGVtZW50LgorCQkJCS8vCisJCQkJT2JqZWN0IHNlbGVjdGVkRWxlbWVudCA9IHNlbGVjdGVkRWxlbWVudHMubmV4dCgpOworCisJCQkJQXJyYXlMaXN0PE9iamVjdD4gc2VsZWN0aW9uTGlzdCA9IG5ldyBBcnJheUxpc3Q8T2JqZWN0PigpOworCQkJCXNlbGVjdGlvbkxpc3QuYWRkKHNlbGVjdGVkRWxlbWVudCk7CisJCQkJd2hpbGUgKHNlbGVjdGVkRWxlbWVudHMuaGFzTmV4dCgpKSB7CisJCQkJCXNlbGVjdGlvbkxpc3QuYWRkKHNlbGVjdGVkRWxlbWVudHMubmV4dCgpKTsKKwkJCQl9CisKKwkJCQkvLyBTZXQgdGhlIHNlbGVjdGlvbiB0byB0aGUgd2lkZ2V0LgorCQkJCS8vCisJCQkJc2VsZWN0aW9uVmlld2VyLnNldFNlbGVjdGlvbihuZXcgU3RydWN0dXJlZFNlbGVjdGlvbihzZWxlY3Rpb25MaXN0KSk7CisJCQl9CisJCX0KKwl9CisKKwkvKioKKwkgKiBUaGlzIGlzIGZvciBpbXBsZW1lbnRpbmcge0BsaW5rIElFZGl0b3JQYXJ0fSBhbmQgc2ltcGx5IHRlc3RzIHRoZSBjb21tYW5kIHN0YWNrLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBib29sZWFuIGlzRGlydHkoKSB7CisJCXJldHVybiAoKEJhc2ljQ29tbWFuZFN0YWNrKWVkaXRpbmdEb21haW4uZ2V0Q29tbWFuZFN0YWNrKCkpLmlzU2F2ZU5lZWRlZCgpOworCX0KKworCS8qKgorCSAqIFRoaXMgaXMgZm9yIGltcGxlbWVudGluZyB7QGxpbmsgSUVkaXRvclBhcnR9IGFuZCBzaW1wbHkgc2F2ZXMgdGhlIG1vZGVsIGZpbGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgZG9TYXZlKElQcm9ncmVzc01vbml0b3IgcHJvZ3Jlc3NNb25pdG9yKSB7CisJCS8vIFNhdmUgb25seSByZXNvdXJjZXMgdGhhdCBoYXZlIGFjdHVhbGx5IGNoYW5nZWQuCisJCS8vCisJCWZpbmFsIE1hcDxPYmplY3QsIE9iamVjdD4gc2F2ZU9wdGlvbnMgPSBuZXcgSGFzaE1hcDxPYmplY3QsIE9iamVjdD4oKTsKKwkJc2F2ZU9wdGlvbnMucHV0KFJlc291cmNlLk9QVElPTl9TQVZFX09OTFlfSUZfQ0hBTkdFRCwgUmVzb3VyY2UuT1BUSU9OX1NBVkVfT05MWV9JRl9DSEFOR0VEX01FTU9SWV9CVUZGRVIpOworCisJCS8vIERvIHRoZSB3b3JrIHdpdGhpbiBhbiBvcGVyYXRpb24gYmVjYXVzZSB0aGlzIGlzIGEgbG9uZyBydW5uaW5nIGFjdGl2aXR5IHRoYXQgbW9kaWZpZXMgdGhlIHdvcmtiZW5jaC4KKwkJLy8KKwkJV29ya3NwYWNlTW9kaWZ5T3BlcmF0aW9uIG9wZXJhdGlvbiA9CisJCQluZXcgV29ya3NwYWNlTW9kaWZ5T3BlcmF0aW9uKCkgeworCQkJCS8vIFRoaXMgaXMgdGhlIG1ldGhvZCB0aGF0IGdldHMgaW52b2tlZCB3aGVuIHRoZSBvcGVyYXRpb24gcnVucy4KKwkJCQkvLworCQkJCUBPdmVycmlkZQorCQkJCXB1YmxpYyB2b2lkIGV4ZWN1dGUoSVByb2dyZXNzTW9uaXRvciBtb25pdG9yKSB7CisJCQkJCS8vIFNhdmUgdGhlIHJlc291cmNlcyB0byB0aGUgZmlsZSBzeXN0ZW0uCisJCQkJCS8vCisJCQkJCWJvb2xlYW4gZmlyc3QgPSB0cnVlOworCQkJCQlmb3IgKFJlc291cmNlIHJlc291cmNlIDogZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpLmdldFJlc291cmNlcygpKSB7CisJCQkJCQlpZiAoKGZpcnN0IHx8ICFyZXNvdXJjZS5nZXRDb250ZW50cygpLmlzRW1wdHkoKSB8fCBpc1BlcnNpc3RlZChyZXNvdXJjZSkpICYmICFlZGl0aW5nRG9tYWluLmlzUmVhZE9ubHkocmVzb3VyY2UpKSB7CisJCQkJCQkJdHJ5IHsKKwkJCQkJCQkJbG9uZyB0aW1lU3RhbXAgPSByZXNvdXJjZS5nZXRUaW1lU3RhbXAoKTsKKwkJCQkJCQkJcmVzb3VyY2Uuc2F2ZShzYXZlT3B0aW9ucyk7CisJCQkJCQkJCWlmIChyZXNvdXJjZS5nZXRUaW1lU3RhbXAoKSAhPSB0aW1lU3RhbXApIHsKKwkJCQkJCQkJCXNhdmVkUmVzb3VyY2VzLmFkZChyZXNvdXJjZSk7CisJCQkJCQkJCX0KKwkJCQkJCQl9CisJCQkJCQkJY2F0Y2ggKEV4Y2VwdGlvbiBleGNlcHRpb24pIHsKKwkJCQkJCQkJcmVzb3VyY2VUb0RpYWdub3N0aWNNYXAucHV0KHJlc291cmNlLCBhbmFseXplUmVzb3VyY2VQcm9ibGVtcyhyZXNvdXJjZSwgZXhjZXB0aW9uKSk7CisJCQkJCQkJfQorCQkJCQkJCWZpcnN0ID0gZmFsc2U7CisJCQkJCQl9CisJCQkJCX0KKwkJCQl9CisJCQl9OworCisJCXVwZGF0ZVByb2JsZW1JbmRpY2F0aW9uID0gZmFsc2U7CisJCXRyeSB7CisJCQkvLyBUaGlzIHJ1bnMgdGhlIG9wdGlvbnMsIGFuZCBzaG93cyBwcm9ncmVzcy4KKwkJCS8vCisJCQluZXcgUHJvZ3Jlc3NNb25pdG9yRGlhbG9nKGdldFNpdGUoKS5nZXRTaGVsbCgpKS5ydW4odHJ1ZSwgZmFsc2UsIG9wZXJhdGlvbik7CisKKwkJCS8vIFJlZnJlc2ggdGhlIG5lY2Vzc2FyeSBzdGF0ZS4KKwkJCS8vCisJCQkoKEJhc2ljQ29tbWFuZFN0YWNrKWVkaXRpbmdEb21haW4uZ2V0Q29tbWFuZFN0YWNrKCkpLnNhdmVJc0RvbmUoKTsKKwkJCWZpcmVQcm9wZXJ0eUNoYW5nZShJRWRpdG9yUGFydC5QUk9QX0RJUlRZKTsKKwkJfQorCQljYXRjaCAoRXhjZXB0aW9uIGV4Y2VwdGlvbikgeworCQkJLy8gU29tZXRoaW5nIHdlbnQgd3JvbmcgdGhhdCBzaG91bGRuJ3QuCisJCQkvLworCQkJQ29yZUVkaXRvclBsdWdpbi5JTlNUQU5DRS5sb2coZXhjZXB0aW9uKTsKKwkJfQorCQl1cGRhdGVQcm9ibGVtSW5kaWNhdGlvbiA9IHRydWU7CisJCXVwZGF0ZVByb2JsZW1JbmRpY2F0aW9uKCk7CisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIHdoZXRoZXIgc29tZXRoaW5nIGhhcyBiZWVuIHBlcnNpc3RlZCB0byB0aGUgVVJJIG9mIHRoZSBzcGVjaWZpZWQgcmVzb3VyY2UuCisJICogVGhlIGltcGxlbWVudGF0aW9uIHVzZXMgdGhlIFVSSSBjb252ZXJ0ZXIgZnJvbSB0aGUgZWRpdG9yJ3MgcmVzb3VyY2Ugc2V0IHRvIHRyeSB0byBvcGVuIGFuIGlucHV0IHN0cmVhbS4gCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIGJvb2xlYW4gaXNQZXJzaXN0ZWQoUmVzb3VyY2UgcmVzb3VyY2UpIHsKKwkJYm9vbGVhbiByZXN1bHQgPSBmYWxzZTsKKwkJdHJ5IHsKKwkJCUlucHV0U3RyZWFtIHN0cmVhbSA9IGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKS5nZXRVUklDb252ZXJ0ZXIoKS5jcmVhdGVJbnB1dFN0cmVhbShyZXNvdXJjZS5nZXRVUkkoKSk7CisJCQlpZiAoc3RyZWFtICE9IG51bGwpIHsKKwkJCQlyZXN1bHQgPSB0cnVlOworCQkJCXN0cmVhbS5jbG9zZSgpOworCQkJfQorCQl9CisJCWNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7CisJCQkvLyBJZ25vcmUKKwkJfQorCQlyZXR1cm4gcmVzdWx0OworCX0KKworCS8qKgorCSAqIFRoaXMgYWx3YXlzIHJldHVybnMgdHJ1ZSBiZWNhdXNlIGl0IGlzIG5vdCBjdXJyZW50bHkgc3VwcG9ydGVkLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBib29sZWFuIGlzU2F2ZUFzQWxsb3dlZCgpIHsKKwkJcmV0dXJuIHRydWU7CisJfQorCisJLyoqCisJICogVGhpcyBhbHNvIGNoYW5nZXMgdGhlIGVkaXRvcidzIGlucHV0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGRvU2F2ZUFzKCkgeworCQlTYXZlQXNEaWFsb2cgc2F2ZUFzRGlhbG9nID0gbmV3IFNhdmVBc0RpYWxvZyhnZXRTaXRlKCkuZ2V0U2hlbGwoKSk7CisJCXNhdmVBc0RpYWxvZy5vcGVuKCk7CisJCUlQYXRoIHBhdGggPSBzYXZlQXNEaWFsb2cuZ2V0UmVzdWx0KCk7CisJCWlmIChwYXRoICE9IG51bGwpIHsKKwkJCUlGaWxlIGZpbGUgPSBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuZ2V0Um9vdCgpLmdldEZpbGUocGF0aCk7CisJCQlpZiAoZmlsZSAhPSBudWxsKSB7CisJCQkJZG9TYXZlQXMoVVJJLmNyZWF0ZVBsYXRmb3JtUmVzb3VyY2VVUkkoZmlsZS5nZXRGdWxsUGF0aCgpLnRvU3RyaW5nKCksIHRydWUpLCBuZXcgRmlsZUVkaXRvcklucHV0KGZpbGUpKTsKKwkJCX0KKwkJfQorCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIGRvU2F2ZUFzKFVSSSB1cmksIElFZGl0b3JJbnB1dCBlZGl0b3JJbnB1dCkgeworCQkoZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpLmdldFJlc291cmNlcygpLmdldCgwKSkuc2V0VVJJKHVyaSk7CisJCXNldElucHV0V2l0aE5vdGlmeShlZGl0b3JJbnB1dCk7CisJCXNldFBhcnROYW1lKGVkaXRvcklucHV0LmdldE5hbWUoKSk7CisJCUlQcm9ncmVzc01vbml0b3IgcHJvZ3Jlc3NNb25pdG9yID0KKwkJCWdldEFjdGlvbkJhcnMoKS5nZXRTdGF0dXNMaW5lTWFuYWdlcigpICE9IG51bGwgPworCQkJCWdldEFjdGlvbkJhcnMoKS5nZXRTdGF0dXNMaW5lTWFuYWdlcigpLmdldFByb2dyZXNzTW9uaXRvcigpIDoKKwkJCQluZXcgTnVsbFByb2dyZXNzTW9uaXRvcigpOworCQlkb1NhdmUocHJvZ3Jlc3NNb25pdG9yKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSBtYXJrZXIgCisJICogIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBnb3RvTWFya2VyKElNYXJrZXIgbWFya2VyKSB7CisJCXRyeSB7CisJCQlpZiAobWFya2VyLmdldFR5cGUoKS5lcXVhbHMoRVZhbGlkYXRvci5NQVJLRVIpKSB7CisJCQkJU3RyaW5nIHVyaUF0dHJpYnV0ZSA9IG1hcmtlci5nZXRBdHRyaWJ1dGUoRVZhbGlkYXRvci5VUklfQVRUUklCVVRFLCBudWxsKTsKKwkJCQlpZiAodXJpQXR0cmlidXRlICE9IG51bGwpIHsKKwkJCQkJVVJJIHVyaSA9IFVSSS5jcmVhdGVVUkkodXJpQXR0cmlidXRlKTsKKwkJCQkJRU9iamVjdCBlT2JqZWN0ID0gZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpLmdldEVPYmplY3QodXJpLCB0cnVlKTsKKwkJCQkJaWYgKGVPYmplY3QgIT0gbnVsbCkgeworCQkJCQkgIHNldFNlbGVjdGlvblRvVmlld2VyKENvbGxlY3Rpb25zLnNpbmdsZXRvbihlZGl0aW5nRG9tYWluLmdldFdyYXBwZXIoZU9iamVjdCkpKTsKKwkJCQkJfQorCQkJCX0KKwkJCX0KKwkJfQorCQljYXRjaCAoQ29yZUV4Y2VwdGlvbiBleGNlcHRpb24pIHsKKwkJCUNvcmVFZGl0b3JQbHVnaW4uSU5TVEFOQ0UubG9nKGV4Y2VwdGlvbik7CisJCX0KKwl9CisKKwkvKioKKwkgKiBUaGlzIGlzIGNhbGxlZCBkdXJpbmcgc3RhcnR1cC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBpbml0KElFZGl0b3JTaXRlIHNpdGUsIElFZGl0b3JJbnB1dCBlZGl0b3JJbnB1dCkgeworCQlzZXRTaXRlKHNpdGUpOworCQlzZXRJbnB1dFdpdGhOb3RpZnkoZWRpdG9ySW5wdXQpOworCQlzZXRQYXJ0TmFtZShlZGl0b3JJbnB1dC5nZXROYW1lKCkpOworCQlzaXRlLnNldFNlbGVjdGlvblByb3ZpZGVyKHRoaXMpOworCQlzaXRlLmdldFBhZ2UoKS5hZGRQYXJ0TGlzdGVuZXIocGFydExpc3RlbmVyKTsKKwkJUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmFkZFJlc291cmNlQ2hhbmdlTGlzdGVuZXIocmVzb3VyY2VDaGFuZ2VMaXN0ZW5lciwgSVJlc291cmNlQ2hhbmdlRXZlbnQuUE9TVF9DSEFOR0UpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIHNldEZvY3VzKCkgeworCQlnZXRDb250cm9sKGdldEFjdGl2ZVBhZ2UoKSkuc2V0Rm9jdXMoKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGltcGxlbWVudHMge0BsaW5rIG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvblByb3ZpZGVyfS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSBsaXN0ZW5lciAKKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgYWRkU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyKElTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIgbGlzdGVuZXIpIHsKKwkJc2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVycy5hZGQobGlzdGVuZXIpOworCX0KKworCS8qKgorCSAqIFRoaXMgaW1wbGVtZW50cyB7QGxpbmsgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uUHJvdmlkZXJ9LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogQHBhcmFtIGxpc3RlbmVyIAorCSAqICA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgcmVtb3ZlU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyKElTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIgbGlzdGVuZXIpIHsKKwkJc2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVycy5yZW1vdmUobGlzdGVuZXIpOworCX0KKworCS8qKgorCSAqIFRoaXMgaW1wbGVtZW50cyB7QGxpbmsgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uUHJvdmlkZXJ9IHRvIHJldHVybiB0aGlzIGVkaXRvcidzIG92ZXJhbGwgc2VsZWN0aW9uLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogQHJldHVybiAKKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIElTZWxlY3Rpb24gZ2V0U2VsZWN0aW9uKCkgeworCQlyZXR1cm4gZWRpdG9yU2VsZWN0aW9uOworCX0KKworCS8qKgorCSAqIFRoaXMgaW1wbGVtZW50cyB7QGxpbmsgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uUHJvdmlkZXJ9IHRvIHNldCB0aGlzIGVkaXRvcidzIG92ZXJhbGwgc2VsZWN0aW9uLgorCSAqIENhbGxpbmcgdGhpcyByZXN1bHQgd2lsbCBub3RpZnkgdGhlIGxpc3RlbmVycy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSBzZWxlY3Rpb24gCisJICogIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRTZWxlY3Rpb24oSVNlbGVjdGlvbiBzZWxlY3Rpb24pIHsKKwkJZWRpdG9yU2VsZWN0aW9uID0gc2VsZWN0aW9uOworCisJCWZvciAoSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lciBsaXN0ZW5lciA6IHNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcnMpIHsKKwkJCWxpc3RlbmVyLnNlbGVjdGlvbkNoYW5nZWQobmV3IFNlbGVjdGlvbkNoYW5nZWRFdmVudCh0aGlzLCBzZWxlY3Rpb24pKTsKKwkJfQorCQlzZXRTdGF0dXNMaW5lTWFuYWdlcihzZWxlY3Rpb24pOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogQHBhcmFtIHNlbGVjdGlvbiAKKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgc2V0U3RhdHVzTGluZU1hbmFnZXIoSVNlbGVjdGlvbiBzZWxlY3Rpb24pIHsKKwkJSVN0YXR1c0xpbmVNYW5hZ2VyIHN0YXR1c0xpbmVNYW5hZ2VyID0gY3VycmVudFZpZXdlciAhPSBudWxsICYmIGN1cnJlbnRWaWV3ZXIgPT0gY29udGVudE91dGxpbmVWaWV3ZXIgPworCQkJY29udGVudE91dGxpbmVTdGF0dXNMaW5lTWFuYWdlciA6IGdldEFjdGlvbkJhcnMoKS5nZXRTdGF0dXNMaW5lTWFuYWdlcigpOworCisJCWlmIChzdGF0dXNMaW5lTWFuYWdlciAhPSBudWxsKSB7CisJCQlpZiAoc2VsZWN0aW9uIGluc3RhbmNlb2YgSVN0cnVjdHVyZWRTZWxlY3Rpb24pIHsKKwkJCQlDb2xsZWN0aW9uPD8+IGNvbGxlY3Rpb24gPSAoKElTdHJ1Y3R1cmVkU2VsZWN0aW9uKXNlbGVjdGlvbikudG9MaXN0KCk7CisJCQkJc3dpdGNoIChjb2xsZWN0aW9uLnNpemUoKSkgeworCQkJCQljYXNlIDA6IHsKKwkJCQkJCXN0YXR1c0xpbmVNYW5hZ2VyLnNldE1lc3NhZ2UoZ2V0U3RyaW5nKCJfVUlfTm9PYmplY3RTZWxlY3RlZCIpKTsgLy8kTk9OLU5MUy0xJAorCQkJCQkJYnJlYWs7CisJCQkJCX0KKwkJCQkJY2FzZSAxOiB7CisJCQkJCQlTdHJpbmcgdGV4dCA9IG5ldyBBZGFwdGVyRmFjdG9yeUl0ZW1EZWxlZ2F0b3IoYWRhcHRlckZhY3RvcnkpLmdldFRleHQoY29sbGVjdGlvbi5pdGVyYXRvcigpLm5leHQoKSk7CisJCQkJCQlzdGF0dXNMaW5lTWFuYWdlci5zZXRNZXNzYWdlKGdldFN0cmluZygiX1VJX1NpbmdsZU9iamVjdFNlbGVjdGVkIiwgdGV4dCkpOyAvLyROT04tTkxTLTEkCisJCQkJCQlicmVhazsKKwkJCQkJfQorCQkJCQlkZWZhdWx0OiB7CisJCQkJCQlzdGF0dXNMaW5lTWFuYWdlci5zZXRNZXNzYWdlKGdldFN0cmluZygiX1VJX011bHRpT2JqZWN0U2VsZWN0ZWQiLCBJbnRlZ2VyLnRvU3RyaW5nKGNvbGxlY3Rpb24uc2l6ZSgpKSkpOyAvLyROT04tTkxTLTEkCisJCQkJCQlicmVhazsKKwkJCQkJfQorCQkJCX0KKwkJCX0KKwkJCWVsc2UgeworCQkJCXN0YXR1c0xpbmVNYW5hZ2VyLnNldE1lc3NhZ2UoIiIpOyAvLyROT04tTkxTLTEkCisJCQl9CisJCX0KKwl9CisKKwkvKioKKwkgKiBUaGlzIGxvb2tzIHVwIGEgc3RyaW5nIGluIHRoZSBwbHVnaW4ncyBwbHVnaW4ucHJvcGVydGllcyBmaWxlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByaXZhdGUgc3RhdGljIFN0cmluZyBnZXRTdHJpbmcoU3RyaW5nIGtleSkgeworCQlyZXR1cm4gQ29yZUVkaXRvclBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoa2V5KTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGxvb2tzIHVwIGEgc3RyaW5nIGluIHBsdWdpbi5wcm9wZXJ0aWVzLCBtYWtpbmcgYSBzdWJzdGl0dXRpb24uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIGdldFN0cmluZyhTdHJpbmcga2V5LCBPYmplY3QgczEpIHsKKwkJcmV0dXJuIENvcmVFZGl0b3JQbHVnaW4uSU5TVEFOQ0UuZ2V0U3RyaW5nKGtleSwgbmV3IE9iamVjdCBbXSB7IHMxIH0pOworCX0KKworCS8qKgorCSAqIFRoaXMgaW1wbGVtZW50cyB7QGxpbmsgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklNZW51TGlzdGVuZXJ9IHRvIGhlbHAgZmlsbCB0aGUgY29udGV4dCBtZW51cyB3aXRoIGNvbnRyaWJ1dGlvbnMgZnJvbSB0aGUgRWRpdCBtZW51LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogQHBhcmFtIG1lbnVNYW5hZ2VyIAorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBtZW51QWJvdXRUb1Nob3coSU1lbnVNYW5hZ2VyIG1lbnVNYW5hZ2VyKSB7CisJCSgoSU1lbnVMaXN0ZW5lcilnZXRFZGl0b3JTaXRlKCkuZ2V0QWN0aW9uQmFyQ29udHJpYnV0b3IoKSkubWVudUFib3V0VG9TaG93KG1lbnVNYW5hZ2VyKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gCisJICogIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRWRpdGluZ0RvbWFpbkFjdGlvbkJhckNvbnRyaWJ1dG9yIGdldEFjdGlvbkJhckNvbnRyaWJ1dG9yKCkgeworCQlyZXR1cm4gKEVkaXRpbmdEb21haW5BY3Rpb25CYXJDb250cmlidXRvcilnZXRFZGl0b3JTaXRlKCkuZ2V0QWN0aW9uQmFyQ29udHJpYnV0b3IoKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gCisJICogIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgSUFjdGlvbkJhcnMgZ2V0QWN0aW9uQmFycygpIHsKKwkJcmV0dXJuIGdldEFjdGlvbkJhckNvbnRyaWJ1dG9yKCkuZ2V0QWN0aW9uQmFycygpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogQHJldHVybiAKKwkgKiAgPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBBZGFwdGVyRmFjdG9yeSBnZXRBZGFwdGVyRmFjdG9yeSgpIHsKKwkJcmV0dXJuIGFkYXB0ZXJGYWN0b3J5OworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGRpc3Bvc2UoKSB7CisJCXVwZGF0ZVByb2JsZW1JbmRpY2F0aW9uID0gZmFsc2U7CisKKwkJUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLnJlbW92ZVJlc291cmNlQ2hhbmdlTGlzdGVuZXIocmVzb3VyY2VDaGFuZ2VMaXN0ZW5lcik7CisKKwkJZ2V0U2l0ZSgpLmdldFBhZ2UoKS5yZW1vdmVQYXJ0TGlzdGVuZXIocGFydExpc3RlbmVyKTsKKworCQlhZGFwdGVyRmFjdG9yeS5kaXNwb3NlKCk7CisKKwkJaWYgKGdldEFjdGlvbkJhckNvbnRyaWJ1dG9yKCkuZ2V0QWN0aXZlRWRpdG9yKCkgPT0gdGhpcykgeworCQkJZ2V0QWN0aW9uQmFyQ29udHJpYnV0b3IoKS5zZXRBY3RpdmVFZGl0b3IobnVsbCk7CisJCX0KKworCQlpZiAocHJvcGVydHlTaGVldFBhZ2UgIT0gbnVsbCkgeworCQkJcHJvcGVydHlTaGVldFBhZ2UuZGlzcG9zZSgpOworCQl9CisKKwkJaWYgKGNvbnRlbnRPdXRsaW5lUGFnZSAhPSBudWxsKSB7CisJCQljb250ZW50T3V0bGluZVBhZ2UuZGlzcG9zZSgpOworCQl9CisKKwkJc3VwZXIuZGlzcG9zZSgpOworCX0KKworCS8qKgorCSAqIFJldHVybnMgd2hldGhlciB0aGUgb3V0bGluZSB2aWV3IHNob3VsZCBiZSBwcmVzZW50ZWQgdG8gdGhlIHVzZXIuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIGJvb2xlYW4gc2hvd091dGxpbmVWaWV3KCkgeworCQlyZXR1cm4gZmFsc2U7CisJfQorfQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGgvcHJlc2VudGF0aW9uL0dyYXBoQWN0aW9uQmFyQ29udHJpYnV0b3IuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoL3ByZXNlbnRhdGlvbi9HcmFwaEFjdGlvbkJhckNvbnRyaWJ1dG9yLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGY3MTg4MgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoL3ByZXNlbnRhdGlvbi9HcmFwaEFjdGlvbkJhckNvbnRyaWJ1dG9yLmphdmEKQEAgLTAsMCArMSw0MzEgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLnByZXNlbnRhdGlvbjsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNiwgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OworaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51aS52aWV3ZXIuSVZpZXdlclByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LmRvbWFpbi5FZGl0aW5nRG9tYWluOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LmRvbWFpbi5JRWRpdGluZ0RvbWFpblByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmFjdGlvbi5Db250cm9sQWN0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmFjdGlvbi5DcmVhdGVDaGlsZEFjdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5hY3Rpb24uQ3JlYXRlU2libGluZ0FjdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5hY3Rpb24uRWRpdGluZ0RvbWFpbkFjdGlvbkJhckNvbnRyaWJ1dG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmFjdGlvbi5Mb2FkUmVzb3VyY2VBY3Rpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkuYWN0aW9uLlZhbGlkYXRlQWN0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5BY3Rpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLkFjdGlvbkNvbnRyaWJ1dGlvbkl0ZW07CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklBY3Rpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklDb250cmlidXRpb25JdGVtOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JQ29udHJpYnV0aW9uTWFuYWdlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSU1lbnVMaXN0ZW5lcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSU1lbnVNYW5hZ2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JVG9vbEJhck1hbmFnZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLk1lbnVNYW5hZ2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5TZXBhcmF0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLlN1YkNvbnRyaWJ1dGlvbkl0ZW07CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb25Qcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTdHJ1Y3R1cmVkU2VsZWN0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuU2VsZWN0aW9uQ2hhbmdlZEV2ZW50OworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuVmlld2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24ucHJlc2VudGF0aW9uLkNvcmVFZGl0b3JQbHVnaW47CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuSUVkaXRvclBhcnQ7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuUGFydEluaXRFeGNlcHRpb247CisKKy8qKgorICogVGhpcyBpcyB0aGUgYWN0aW9uIGJhciBjb250cmlidXRvciBmb3IgdGhlIEdyYXBoIG1vZGVsIGVkaXRvci4KKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBnZW5lcmF0ZWQKKyAqLworQFN1cHByZXNzV2FybmluZ3MoImFsbCIpCitwdWJsaWMgY2xhc3MgR3JhcGhBY3Rpb25CYXJDb250cmlidXRvcgorCWV4dGVuZHMgRWRpdGluZ0RvbWFpbkFjdGlvbkJhckNvbnRyaWJ1dG9yCisJaW1wbGVtZW50cyBJU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyIHsKKwkvKioKKwkgKiBUaGlzIGtlZXBzIHRyYWNrIG9mIHRoZSBhY3RpdmUgZWRpdG9yLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBJRWRpdG9yUGFydCBhY3RpdmVFZGl0b3JQYXJ0OworCisJLyoqCisJICogVGhpcyBrZWVwcyB0cmFjayBvZiB0aGUgY3VycmVudCBzZWxlY3Rpb24gcHJvdmlkZXIuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIElTZWxlY3Rpb25Qcm92aWRlciBzZWxlY3Rpb25Qcm92aWRlcjsKKworCS8qKgorCSAqIFRoaXMgYWN0aW9uIG9wZW5zIHRoZSBQcm9wZXJ0aWVzIHZpZXcuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIElBY3Rpb24gc2hvd1Byb3BlcnRpZXNWaWV3QWN0aW9uID0KKwkJbmV3IEFjdGlvbihDb3JlRWRpdG9yUGx1Z2luLklOU1RBTkNFLmdldFN0cmluZygiX1VJX1Nob3dQcm9wZXJ0aWVzVmlld19tZW51X2l0ZW0iKSkgLy8kTk9OLU5MUy0xJAorCQl7CisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyB2b2lkIHJ1bigpIHsKKwkJCQl0cnkgeworCQkJCQlnZXRQYWdlKCkuc2hvd1ZpZXcoIm9yZy5lY2xpcHNlLnVpLnZpZXdzLlByb3BlcnR5U2hlZXQiKTsgLy8kTk9OLU5MUy0xJAorCQkJCX0KKwkJCQljYXRjaCAoUGFydEluaXRFeGNlcHRpb24gZXhjZXB0aW9uKSB7CisJCQkJCUNvcmVFZGl0b3JQbHVnaW4uSU5TVEFOQ0UubG9nKGV4Y2VwdGlvbik7CisJCQkJfQorCQkJfQorCQl9OworCisJLyoqCisJICogVGhpcyBhY3Rpb24gcmVmcmVzaGVzIHRoZSB2aWV3ZXIgb2YgdGhlIGN1cnJlbnQgZWRpdG9yIGlmIHRoZSBlZGl0b3IKKwkgKiBpbXBsZW1lbnRzIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnVpLnZpZXdlci5JVmlld2VyUHJvdmlkZXJ9LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBJQWN0aW9uIHJlZnJlc2hWaWV3ZXJBY3Rpb24gPQorCQluZXcgQWN0aW9uKENvcmVFZGl0b3JQbHVnaW4uSU5TVEFOQ0UuZ2V0U3RyaW5nKCJfVUlfUmVmcmVzaFZpZXdlcl9tZW51X2l0ZW0iKSkgLy8kTk9OLU5MUy0xJAorCQl7CisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyBib29sZWFuIGlzRW5hYmxlZCgpIHsKKwkJCQlyZXR1cm4gYWN0aXZlRWRpdG9yUGFydCBpbnN0YW5jZW9mIElWaWV3ZXJQcm92aWRlcjsKKwkJCX0KKworCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgdm9pZCBydW4oKSB7CisJCQkJaWYgKGFjdGl2ZUVkaXRvclBhcnQgaW5zdGFuY2VvZiBJVmlld2VyUHJvdmlkZXIpIHsKKwkJCQkJVmlld2VyIHZpZXdlciA9ICgoSVZpZXdlclByb3ZpZGVyKWFjdGl2ZUVkaXRvclBhcnQpLmdldFZpZXdlcigpOworCQkJCQlpZiAodmlld2VyICE9IG51bGwpIHsKKwkJCQkJCXZpZXdlci5yZWZyZXNoKCk7CisJCQkJCX0KKwkJCQl9CisJCQl9CisJCX07CisKKwkvKioKKwkgKiBUaGlzIHdpbGwgY29udGFpbiBvbmUge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmFjdGlvbi5DcmVhdGVDaGlsZEFjdGlvbn0gY29ycmVzcG9uZGluZyB0byBlYWNoIGRlc2NyaXB0b3IKKwkgKiBnZW5lcmF0ZWQgZm9yIHRoZSBjdXJyZW50IHNlbGVjdGlvbiBieSB0aGUgaXRlbSBwcm92aWRlci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgQ29sbGVjdGlvbjxJQWN0aW9uPiBjcmVhdGVDaGlsZEFjdGlvbnM7CisKKwkvKioKKwkgKiBUaGlzIGlzIHRoZSBtZW51IG1hbmFnZXIgaW50byB3aGljaCBtZW51IGNvbnRyaWJ1dGlvbiBpdGVtcyBzaG91bGQgYmUgYWRkZWQgZm9yIENyZWF0ZUNoaWxkIGFjdGlvbnMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIElNZW51TWFuYWdlciBjcmVhdGVDaGlsZE1lbnVNYW5hZ2VyOworCisJLyoqCisJICogVGhpcyB3aWxsIGNvbnRhaW4gb25lIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5hY3Rpb24uQ3JlYXRlU2libGluZ0FjdGlvbn0gY29ycmVzcG9uZGluZyB0byBlYWNoIGRlc2NyaXB0b3IKKwkgKiBnZW5lcmF0ZWQgZm9yIHRoZSBjdXJyZW50IHNlbGVjdGlvbiBieSB0aGUgaXRlbSBwcm92aWRlci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgQ29sbGVjdGlvbjxJQWN0aW9uPiBjcmVhdGVTaWJsaW5nQWN0aW9uczsKKworCS8qKgorCSAqIFRoaXMgaXMgdGhlIG1lbnUgbWFuYWdlciBpbnRvIHdoaWNoIG1lbnUgY29udHJpYnV0aW9uIGl0ZW1zIHNob3VsZCBiZSBhZGRlZCBmb3IgQ3JlYXRlU2libGluZyBhY3Rpb25zLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBJTWVudU1hbmFnZXIgY3JlYXRlU2libGluZ01lbnVNYW5hZ2VyOworCisJLyoqCisJICogVGhpcyBjcmVhdGVzIGFuIGluc3RhbmNlIG9mIHRoZSBjb250cmlidXRvci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgR3JhcGhBY3Rpb25CYXJDb250cmlidXRvcigpIHsKKwkJc3VwZXIoQURESVRJT05TX0xBU1RfU1RZTEUpOworCQlsb2FkUmVzb3VyY2VBY3Rpb24gPSBuZXcgTG9hZFJlc291cmNlQWN0aW9uKCk7CisJCXZhbGlkYXRlQWN0aW9uID0gbmV3IFZhbGlkYXRlQWN0aW9uKCk7CisJCWNvbnRyb2xBY3Rpb24gPSBuZXcgQ29udHJvbEFjdGlvbigpOworCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyBTZXBhcmF0b3JzIGZvciBlZGl0b3IgYWRkaXRpb25zIHRvIHRoZSB0b29sIGJhci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBjb250cmlidXRlVG9Ub29sQmFyKElUb29sQmFyTWFuYWdlciB0b29sQmFyTWFuYWdlcikgeworCQl0b29sQmFyTWFuYWdlci5hZGQobmV3IFNlcGFyYXRvcigiZ3JhcGgtc2V0dGluZ3MiKSk7IC8vJE5PTi1OTFMtMSQKKwkJdG9vbEJhck1hbmFnZXIuYWRkKG5ldyBTZXBhcmF0b3IoImdyYXBoLWFkZGl0aW9ucyIpKTsgLy8kTk9OLU5MUy0xJAorCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyB0byB0aGUgbWVudSBiYXIgYSBtZW51IGFuZCBzb21lIHNlcGFyYXRvcnMgZm9yIGVkaXRvciBhZGRpdGlvbnMsCisJICogYXMgd2VsbCBhcyB0aGUgc3ViLW1lbnVzIGZvciBvYmplY3QgY3JlYXRpb24gaXRlbXMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgY29udHJpYnV0ZVRvTWVudShJTWVudU1hbmFnZXIgbWVudU1hbmFnZXIpIHsKKwkJc3VwZXIuY29udHJpYnV0ZVRvTWVudShtZW51TWFuYWdlcik7CisKKwkJSU1lbnVNYW5hZ2VyIHN1Ym1lbnVNYW5hZ2VyID0gbmV3IE1lbnVNYW5hZ2VyKENvcmVFZGl0b3JQbHVnaW4uSU5TVEFOQ0UuZ2V0U3RyaW5nKCJfVUlfR3JhcGhFZGl0b3JfbWVudSIpLCAib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoTWVudUlEIik7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAorCQltZW51TWFuYWdlci5pbnNlcnRBZnRlcigiYWRkaXRpb25zIiwgc3VibWVudU1hbmFnZXIpOyAvLyROT04tTkxTLTEkCisJCXN1Ym1lbnVNYW5hZ2VyLmFkZChuZXcgU2VwYXJhdG9yKCJzZXR0aW5ncyIpKTsgLy8kTk9OLU5MUy0xJAorCQlzdWJtZW51TWFuYWdlci5hZGQobmV3IFNlcGFyYXRvcigiYWN0aW9ucyIpKTsgLy8kTk9OLU5MUy0xJAorCQlzdWJtZW51TWFuYWdlci5hZGQobmV3IFNlcGFyYXRvcigiYWRkaXRpb25zIikpOyAvLyROT04tTkxTLTEkCisJCXN1Ym1lbnVNYW5hZ2VyLmFkZChuZXcgU2VwYXJhdG9yKCJhZGRpdGlvbnMtZW5kIikpOyAvLyROT04tTkxTLTEkCisKKwkJLy8gUHJlcGFyZSBmb3IgQ3JlYXRlQ2hpbGQgaXRlbSBhZGRpdGlvbiBvciByZW1vdmFsLgorCQkvLworCQljcmVhdGVDaGlsZE1lbnVNYW5hZ2VyID0gbmV3IE1lbnVNYW5hZ2VyKENvcmVFZGl0b3JQbHVnaW4uSU5TVEFOQ0UuZ2V0U3RyaW5nKCJfVUlfQ3JlYXRlQ2hpbGRfbWVudV9pdGVtIikpOyAvLyROT04tTkxTLTEkCisJCXN1Ym1lbnVNYW5hZ2VyLmluc2VydEJlZm9yZSgiYWRkaXRpb25zIiwgY3JlYXRlQ2hpbGRNZW51TWFuYWdlcik7IC8vJE5PTi1OTFMtMSQKKworCQkvLyBQcmVwYXJlIGZvciBDcmVhdGVTaWJsaW5nIGl0ZW0gYWRkaXRpb24gb3IgcmVtb3ZhbC4KKwkJLy8KKwkJY3JlYXRlU2libGluZ01lbnVNYW5hZ2VyID0gbmV3IE1lbnVNYW5hZ2VyKENvcmVFZGl0b3JQbHVnaW4uSU5TVEFOQ0UuZ2V0U3RyaW5nKCJfVUlfQ3JlYXRlU2libGluZ19tZW51X2l0ZW0iKSk7IC8vJE5PTi1OTFMtMSQKKwkJc3VibWVudU1hbmFnZXIuaW5zZXJ0QmVmb3JlKCJhZGRpdGlvbnMiLCBjcmVhdGVTaWJsaW5nTWVudU1hbmFnZXIpOyAvLyROT04tTkxTLTEkCisKKwkJLy8gRm9yY2UgYW4gdXBkYXRlIGJlY2F1c2UgRWNsaXBzZSBoaWRlcyBlbXB0eSBtZW51cyBub3cuCisJCS8vCisJCXN1Ym1lbnVNYW5hZ2VyLmFkZE1lbnVMaXN0ZW5lcgorCQkJKG5ldyBJTWVudUxpc3RlbmVyKCkgeworCQkJCSBwdWJsaWMgdm9pZCBtZW51QWJvdXRUb1Nob3coSU1lbnVNYW5hZ2VyIG1lbnVNYW5hZ2VyKSB7CisJCQkJCSBtZW51TWFuYWdlci51cGRhdGVBbGwodHJ1ZSk7CisJCQkJIH0KKwkJCSB9KTsKKworCQlhZGRHbG9iYWxBY3Rpb25zKHN1Ym1lbnVNYW5hZ2VyKTsKKwl9CisKKwkvKioKKwkgKiBXaGVuIHRoZSBhY3RpdmUgZWRpdG9yIGNoYW5nZXMsIHRoaXMgcmVtZW1iZXJzIHRoZSBjaGFuZ2UgYW5kIHJlZ2lzdGVycyB3aXRoIGl0IGFzIGEgc2VsZWN0aW9uIHByb3ZpZGVyLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIHNldEFjdGl2ZUVkaXRvcihJRWRpdG9yUGFydCBwYXJ0KSB7CisJCXN1cGVyLnNldEFjdGl2ZUVkaXRvcihwYXJ0KTsKKwkJYWN0aXZlRWRpdG9yUGFydCA9IHBhcnQ7CisKKwkJLy8gU3dpdGNoIHRvIHRoZSBuZXcgc2VsZWN0aW9uIHByb3ZpZGVyLgorCQkvLworCQlpZiAoc2VsZWN0aW9uUHJvdmlkZXIgIT0gbnVsbCkgeworCQkJc2VsZWN0aW9uUHJvdmlkZXIucmVtb3ZlU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyKHRoaXMpOworCQl9CisJCWlmIChwYXJ0ID09IG51bGwpIHsKKwkJCXNlbGVjdGlvblByb3ZpZGVyID0gbnVsbDsKKwkJfQorCQllbHNlIHsKKwkJCXNlbGVjdGlvblByb3ZpZGVyID0gcGFydC5nZXRTaXRlKCkuZ2V0U2VsZWN0aW9uUHJvdmlkZXIoKTsKKwkJCXNlbGVjdGlvblByb3ZpZGVyLmFkZFNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcih0aGlzKTsKKworCQkJLy8gRmFrZSBhIHNlbGVjdGlvbiBjaGFuZ2VkIGV2ZW50IHRvIHVwZGF0ZSB0aGUgbWVudXMuCisJCQkvLworCQkJaWYgKHNlbGVjdGlvblByb3ZpZGVyLmdldFNlbGVjdGlvbigpICE9IG51bGwpIHsKKwkJCQlzZWxlY3Rpb25DaGFuZ2VkKG5ldyBTZWxlY3Rpb25DaGFuZ2VkRXZlbnQoc2VsZWN0aW9uUHJvdmlkZXIsIHNlbGVjdGlvblByb3ZpZGVyLmdldFNlbGVjdGlvbigpKSk7CisJCQl9CisJCX0KKwl9CisKKwkvKioKKwkgKiBUaGlzIGltcGxlbWVudHMge0BsaW5rIG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcn0sCisJICogaGFuZGxpbmcge0BsaW5rIG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuU2VsZWN0aW9uQ2hhbmdlZEV2ZW50fXMgYnkgcXVlcnlpbmcgZm9yIHRoZSBjaGlsZHJlbiBhbmQgc2libGluZ3MKKwkgKiB0aGF0IGNhbiBiZSBhZGRlZCB0byB0aGUgc2VsZWN0ZWQgb2JqZWN0IGFuZCB1cGRhdGluZyB0aGUgbWVudXMgYWNjb3JkaW5nbHkuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgc2VsZWN0aW9uQ2hhbmdlZChTZWxlY3Rpb25DaGFuZ2VkRXZlbnQgZXZlbnQpIHsKKwkJLy8gUmVtb3ZlIGFueSBtZW51IGl0ZW1zIGZvciBvbGQgc2VsZWN0aW9uLgorCQkvLworCQlpZiAoY3JlYXRlQ2hpbGRNZW51TWFuYWdlciAhPSBudWxsKSB7CisJCQlkZXBvcHVsYXRlTWFuYWdlcihjcmVhdGVDaGlsZE1lbnVNYW5hZ2VyLCBjcmVhdGVDaGlsZEFjdGlvbnMpOworCQl9CisJCWlmIChjcmVhdGVTaWJsaW5nTWVudU1hbmFnZXIgIT0gbnVsbCkgeworCQkJZGVwb3B1bGF0ZU1hbmFnZXIoY3JlYXRlU2libGluZ01lbnVNYW5hZ2VyLCBjcmVhdGVTaWJsaW5nQWN0aW9ucyk7CisJCX0KKworCQkvLyBRdWVyeSB0aGUgbmV3IHNlbGVjdGlvbiBmb3IgYXBwcm9wcmlhdGUgbmV3IGNoaWxkL3NpYmxpbmcgZGVzY3JpcHRvcnMKKwkJLy8KKwkJQ29sbGVjdGlvbjw/PiBuZXdDaGlsZERlc2NyaXB0b3JzID0gbnVsbDsKKwkJQ29sbGVjdGlvbjw/PiBuZXdTaWJsaW5nRGVzY3JpcHRvcnMgPSBudWxsOworCisJCUlTZWxlY3Rpb24gc2VsZWN0aW9uID0gZXZlbnQuZ2V0U2VsZWN0aW9uKCk7CisJCWlmIChzZWxlY3Rpb24gaW5zdGFuY2VvZiBJU3RydWN0dXJlZFNlbGVjdGlvbiAmJiAoKElTdHJ1Y3R1cmVkU2VsZWN0aW9uKXNlbGVjdGlvbikuc2l6ZSgpID09IDEpIHsKKwkJCU9iamVjdCBvYmplY3QgPSAoKElTdHJ1Y3R1cmVkU2VsZWN0aW9uKXNlbGVjdGlvbikuZ2V0Rmlyc3RFbGVtZW50KCk7CisKKwkJCUVkaXRpbmdEb21haW4gZG9tYWluID0gKChJRWRpdGluZ0RvbWFpblByb3ZpZGVyKWFjdGl2ZUVkaXRvclBhcnQpLmdldEVkaXRpbmdEb21haW4oKTsKKworCQkJbmV3Q2hpbGREZXNjcmlwdG9ycyA9IGRvbWFpbi5nZXROZXdDaGlsZERlc2NyaXB0b3JzKG9iamVjdCwgbnVsbCk7CisJCQluZXdTaWJsaW5nRGVzY3JpcHRvcnMgPSBkb21haW4uZ2V0TmV3Q2hpbGREZXNjcmlwdG9ycyhudWxsLCBvYmplY3QpOworCQl9CisKKwkJLy8gR2VuZXJhdGUgYWN0aW9ucyBmb3Igc2VsZWN0aW9uOyBwb3B1bGF0ZSBhbmQgcmVkcmF3IHRoZSBtZW51cy4KKwkJLy8KKwkJY3JlYXRlQ2hpbGRBY3Rpb25zID0gZ2VuZXJhdGVDcmVhdGVDaGlsZEFjdGlvbnMobmV3Q2hpbGREZXNjcmlwdG9ycywgc2VsZWN0aW9uKTsKKwkJY3JlYXRlU2libGluZ0FjdGlvbnMgPSBnZW5lcmF0ZUNyZWF0ZVNpYmxpbmdBY3Rpb25zKG5ld1NpYmxpbmdEZXNjcmlwdG9ycywgc2VsZWN0aW9uKTsKKworCQlpZiAoY3JlYXRlQ2hpbGRNZW51TWFuYWdlciAhPSBudWxsKSB7CisJCQlwb3B1bGF0ZU1hbmFnZXIoY3JlYXRlQ2hpbGRNZW51TWFuYWdlciwgY3JlYXRlQ2hpbGRBY3Rpb25zLCBudWxsKTsKKwkJCWNyZWF0ZUNoaWxkTWVudU1hbmFnZXIudXBkYXRlKHRydWUpOworCQl9CisJCWlmIChjcmVhdGVTaWJsaW5nTWVudU1hbmFnZXIgIT0gbnVsbCkgeworCQkJcG9wdWxhdGVNYW5hZ2VyKGNyZWF0ZVNpYmxpbmdNZW51TWFuYWdlciwgY3JlYXRlU2libGluZ0FjdGlvbnMsIG51bGwpOworCQkJY3JlYXRlU2libGluZ01lbnVNYW5hZ2VyLnVwZGF0ZSh0cnVlKTsKKwkJfQorCX0KKworCS8qKgorCSAqIFRoaXMgZ2VuZXJhdGVzIGEge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmFjdGlvbi5DcmVhdGVDaGlsZEFjdGlvbn0gZm9yIGVhY2ggb2JqZWN0IGluIDxjb2RlPmRlc2NyaXB0b3JzPC9jb2RlPiwKKwkgKiBhbmQgcmV0dXJucyB0aGUgY29sbGVjdGlvbiBvZiB0aGVzZSBhY3Rpb25zLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBDb2xsZWN0aW9uPElBY3Rpb24+IGdlbmVyYXRlQ3JlYXRlQ2hpbGRBY3Rpb25zKENvbGxlY3Rpb248Pz4gZGVzY3JpcHRvcnMsIElTZWxlY3Rpb24gc2VsZWN0aW9uKSB7CisJCUNvbGxlY3Rpb248SUFjdGlvbj4gYWN0aW9ucyA9IG5ldyBBcnJheUxpc3Q8SUFjdGlvbj4oKTsKKwkJaWYgKGRlc2NyaXB0b3JzICE9IG51bGwpIHsKKwkJCWZvciAoT2JqZWN0IGRlc2NyaXB0b3IgOiBkZXNjcmlwdG9ycykgeworCQkJCWFjdGlvbnMuYWRkKG5ldyBDcmVhdGVDaGlsZEFjdGlvbihhY3RpdmVFZGl0b3JQYXJ0LCBzZWxlY3Rpb24sIGRlc2NyaXB0b3IpKTsKKwkJCX0KKwkJfQorCQlyZXR1cm4gYWN0aW9uczsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGdlbmVyYXRlcyBhIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5hY3Rpb24uQ3JlYXRlU2libGluZ0FjdGlvbn0gZm9yIGVhY2ggb2JqZWN0IGluIDxjb2RlPmRlc2NyaXB0b3JzPC9jb2RlPiwKKwkgKiBhbmQgcmV0dXJucyB0aGUgY29sbGVjdGlvbiBvZiB0aGVzZSBhY3Rpb25zLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBDb2xsZWN0aW9uPElBY3Rpb24+IGdlbmVyYXRlQ3JlYXRlU2libGluZ0FjdGlvbnMoQ29sbGVjdGlvbjw/PiBkZXNjcmlwdG9ycywgSVNlbGVjdGlvbiBzZWxlY3Rpb24pIHsKKwkJQ29sbGVjdGlvbjxJQWN0aW9uPiBhY3Rpb25zID0gbmV3IEFycmF5TGlzdDxJQWN0aW9uPigpOworCQlpZiAoZGVzY3JpcHRvcnMgIT0gbnVsbCkgeworCQkJZm9yIChPYmplY3QgZGVzY3JpcHRvciA6IGRlc2NyaXB0b3JzKSB7CisJCQkJYWN0aW9ucy5hZGQobmV3IENyZWF0ZVNpYmxpbmdBY3Rpb24oYWN0aXZlRWRpdG9yUGFydCwgc2VsZWN0aW9uLCBkZXNjcmlwdG9yKSk7CisJCQl9CisJCX0KKwkJcmV0dXJuIGFjdGlvbnM7CisJfQorCisJLyoqCisJICogVGhpcyBwb3B1bGF0ZXMgdGhlIHNwZWNpZmllZCA8Y29kZT5tYW5hZ2VyPC9jb2RlPiB3aXRoIHtAbGluayBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uQWN0aW9uQ29udHJpYnV0aW9uSXRlbX1zCisJICogYmFzZWQgb24gdGhlIHtAbGluayBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSUFjdGlvbn1zIGNvbnRhaW5lZCBpbiB0aGUgPGNvZGU+YWN0aW9uczwvY29kZT4gY29sbGVjdGlvbiwKKwkgKiBieSBpbnNlcnRpbmcgdGhlbSBiZWZvcmUgdGhlIHNwZWNpZmllZCBjb250cmlidXRpb24gaXRlbSA8Y29kZT5jb250cmlidXRpb25JRDwvY29kZT4uCisJICogSWYgPGNvZGU+Y29udHJpYnV0aW9uSUQ8L2NvZGU+IGlzIDxjb2RlPm51bGw8L2NvZGU+LCB0aGV5IGFyZSBzaW1wbHkgYWRkZWQuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgcG9wdWxhdGVNYW5hZ2VyKElDb250cmlidXRpb25NYW5hZ2VyIG1hbmFnZXIsIENvbGxlY3Rpb248PyBleHRlbmRzIElBY3Rpb24+IGFjdGlvbnMsIFN0cmluZyBjb250cmlidXRpb25JRCkgeworCQlpZiAoYWN0aW9ucyAhPSBudWxsKSB7CisJCQlmb3IgKElBY3Rpb24gYWN0aW9uIDogYWN0aW9ucykgeworCQkJCWlmIChjb250cmlidXRpb25JRCAhPSBudWxsKSB7CisJCQkJCW1hbmFnZXIuaW5zZXJ0QmVmb3JlKGNvbnRyaWJ1dGlvbklELCBhY3Rpb24pOworCQkJCX0KKwkJCQllbHNlIHsKKwkJCQkJbWFuYWdlci5hZGQoYWN0aW9uKTsKKwkJCQl9CisJCQl9CisJCX0KKwl9CisJCQorCS8qKgorCSAqIFRoaXMgcmVtb3ZlcyBmcm9tIHRoZSBzcGVjaWZpZWQgPGNvZGU+bWFuYWdlcjwvY29kZT4gYWxsIHtAbGluayBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uQWN0aW9uQ29udHJpYnV0aW9uSXRlbX1zCisJICogYmFzZWQgb24gdGhlIHtAbGluayBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSUFjdGlvbn1zIGNvbnRhaW5lZCBpbiB0aGUgPGNvZGU+YWN0aW9uczwvY29kZT4gY29sbGVjdGlvbi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBkZXBvcHVsYXRlTWFuYWdlcihJQ29udHJpYnV0aW9uTWFuYWdlciBtYW5hZ2VyLCBDb2xsZWN0aW9uPD8gZXh0ZW5kcyBJQWN0aW9uPiBhY3Rpb25zKSB7CisJCWlmIChhY3Rpb25zICE9IG51bGwpIHsKKwkJCUlDb250cmlidXRpb25JdGVtW10gaXRlbXMgPSBtYW5hZ2VyLmdldEl0ZW1zKCk7CisJCQlmb3IgKGludCBpID0gMDsgaSA8IGl0ZW1zLmxlbmd0aDsgaSsrKSB7CisJCQkJLy8gTG9vayBpbnRvIFN1YkNvbnRyaWJ1dGlvbkl0ZW1zCisJCQkJLy8KKwkJCQlJQ29udHJpYnV0aW9uSXRlbSBjb250cmlidXRpb25JdGVtID0gaXRlbXNbaV07CisJCQkJd2hpbGUgKGNvbnRyaWJ1dGlvbkl0ZW0gaW5zdGFuY2VvZiBTdWJDb250cmlidXRpb25JdGVtKSB7CisJCQkJCWNvbnRyaWJ1dGlvbkl0ZW0gPSAoKFN1YkNvbnRyaWJ1dGlvbkl0ZW0pY29udHJpYnV0aW9uSXRlbSkuZ2V0SW5uZXJJdGVtKCk7CisJCQkJfQorCisJCQkJLy8gRGVsZXRlIHRoZSBBY3Rpb25Db250cmlidXRpb25JdGVtcyB3aXRoIG1hdGNoaW5nIGFjdGlvbi4KKwkJCQkvLworCQkJCWlmIChjb250cmlidXRpb25JdGVtIGluc3RhbmNlb2YgQWN0aW9uQ29udHJpYnV0aW9uSXRlbSkgeworCQkJCQlJQWN0aW9uIGFjdGlvbiA9ICgoQWN0aW9uQ29udHJpYnV0aW9uSXRlbSljb250cmlidXRpb25JdGVtKS5nZXRBY3Rpb24oKTsKKwkJCQkJaWYgKGFjdGlvbnMuY29udGFpbnMoYWN0aW9uKSkgeworCQkJCQkJbWFuYWdlci5yZW1vdmUoY29udHJpYnV0aW9uSXRlbSk7CisJCQkJCX0KKwkJCQl9CisJCQl9CisJCX0KKwl9CisKKwkvKioKKwkgKiBUaGlzIHBvcHVsYXRlcyB0aGUgcG9wLXVwIG1lbnUgYmVmb3JlIGl0IGFwcGVhcnMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgbWVudUFib3V0VG9TaG93KElNZW51TWFuYWdlciBtZW51TWFuYWdlcikgeworCQlzdXBlci5tZW51QWJvdXRUb1Nob3cobWVudU1hbmFnZXIpOworCQlNZW51TWFuYWdlciBzdWJtZW51TWFuYWdlciA9IG51bGw7CisKKwkJc3VibWVudU1hbmFnZXIgPSBuZXcgTWVudU1hbmFnZXIoQ29yZUVkaXRvclBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoIl9VSV9DcmVhdGVDaGlsZF9tZW51X2l0ZW0iKSk7IC8vJE5PTi1OTFMtMSQKKwkJcG9wdWxhdGVNYW5hZ2VyKHN1Ym1lbnVNYW5hZ2VyLCBjcmVhdGVDaGlsZEFjdGlvbnMsIG51bGwpOworCQltZW51TWFuYWdlci5pbnNlcnRCZWZvcmUoImVkaXQiLCBzdWJtZW51TWFuYWdlcik7IC8vJE5PTi1OTFMtMSQKKworCQlzdWJtZW51TWFuYWdlciA9IG5ldyBNZW51TWFuYWdlcihDb3JlRWRpdG9yUGx1Z2luLklOU1RBTkNFLmdldFN0cmluZygiX1VJX0NyZWF0ZVNpYmxpbmdfbWVudV9pdGVtIikpOyAvLyROT04tTkxTLTEkCisJCXBvcHVsYXRlTWFuYWdlcihzdWJtZW51TWFuYWdlciwgY3JlYXRlU2libGluZ0FjdGlvbnMsIG51bGwpOworCQltZW51TWFuYWdlci5pbnNlcnRCZWZvcmUoImVkaXQiLCBzdWJtZW51TWFuYWdlcik7IC8vJE5PTi1OTFMtMSQKKwl9CisKKwkvKioKKwkgKiBUaGlzIGluc2VydHMgZ2xvYmFsIGFjdGlvbnMgYmVmb3JlIHRoZSAiYWRkaXRpb25zLWVuZCIgc2VwYXJhdG9yLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIGFkZEdsb2JhbEFjdGlvbnMoSU1lbnVNYW5hZ2VyIG1lbnVNYW5hZ2VyKSB7CisJCW1lbnVNYW5hZ2VyLmluc2VydEFmdGVyKCJhZGRpdGlvbnMtZW5kIiwgbmV3IFNlcGFyYXRvcigidWktYWN0aW9ucyIpKTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCisJCW1lbnVNYW5hZ2VyLmluc2VydEFmdGVyKCJ1aS1hY3Rpb25zIiwgc2hvd1Byb3BlcnRpZXNWaWV3QWN0aW9uKTsgLy8kTk9OLU5MUy0xJAorCisJCXJlZnJlc2hWaWV3ZXJBY3Rpb24uc2V0RW5hYmxlZChyZWZyZXNoVmlld2VyQWN0aW9uLmlzRW5hYmxlZCgpKTsJCQorCQltZW51TWFuYWdlci5pbnNlcnRBZnRlcigidWktYWN0aW9ucyIsIHJlZnJlc2hWaWV3ZXJBY3Rpb24pOyAvLyROT04tTkxTLTEkCisKKwkJc3VwZXIuYWRkR2xvYmFsQWN0aW9ucyhtZW51TWFuYWdlcik7CisJfQorCisJLyoqCisJICogVGhpcyBlbnN1cmVzIHRoYXQgYSBkZWxldGUgYWN0aW9uIHdpbGwgY2xlYW4gdXAgYWxsIHJlZmVyZW5jZXMgdG8gZGVsZXRlZCBvYmplY3RzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCBib29sZWFuIHJlbW92ZUFsbFJlZmVyZW5jZXNPbkRlbGV0ZSgpIHsKKwkJcmV0dXJuIHRydWU7CisJfQorCit9CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC9wcmVzZW50YXRpb24vR3JhcGhFZGl0b3IuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoL3ByZXNlbnRhdGlvbi9HcmFwaEVkaXRvci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRiN2E4ZWUKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC9wcmVzZW50YXRpb24vR3JhcGhFZGl0b3IuamF2YQpAQCAtMCwwICsxLDE2MDcgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLnByZXNlbnRhdGlvbjsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNiwgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOworaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW07CitpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbnM7CitpbXBvcnQgamF2YS51dGlsLkV2ZW50T2JqZWN0OworaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOworaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKK2ltcG9ydCBqYXZhLnV0aWwuTGlua2VkSGFzaE1hcDsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuTWFwOworCitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUZpbGU7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSU1hcmtlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUmVzb3VyY2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVJlc291cmNlQ2hhbmdlRXZlbnQ7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVJlc291cmNlQ2hhbmdlTGlzdGVuZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVJlc291cmNlRGVsdGE7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVJlc291cmNlRGVsdGFWaXNpdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLlJlc291cmNlc1BsdWdpbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQ29yZUV4Y2VwdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVBhdGg7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQcm9ncmVzc01vbml0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLk51bGxQcm9ncmVzc01vbml0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5jb21tYW5kLkJhc2ljQ29tbWFuZFN0YWNrOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24uY29tbWFuZC5Db21tYW5kOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24uY29tbWFuZC5Db21tYW5kU3RhY2s7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5jb21tYW5kLkNvbW1hbmRTdGFja0xpc3RlbmVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LkFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnVpLk1hcmtlckhlbHBlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnVpLmVkaXRvci5Qcm9ibGVtRWRpdG9yUGFydDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnVpLnZpZXdlci5JVmlld2VyUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLkJhc2ljRGlhZ25vc3RpYzsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuRGlhZ25vc3RpYzsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuVVJJOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FVmFsaWRhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5wcm92aWRlci5FY29yZUl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5yZXNvdXJjZS5SZXNvdXJjZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUucmVzb3VyY2UuUmVzb3VyY2VTZXQ7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnV0aWwuRUNvbnRlbnRBZGFwdGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS51dGlsLkVjb3JlVXRpbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5kb21haW4uQWRhcHRlckZhY3RvcnlFZGl0aW5nRG9tYWluOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LmRvbWFpbi5FZGl0aW5nRG9tYWluOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LmRvbWFpbi5JRWRpdGluZ0RvbWFpblByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkFkYXB0ZXJGYWN0b3J5SXRlbURlbGVnYXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5Db21wb3NlZEFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLlJlZmxlY3RpdmVJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5yZXNvdXJjZS5SZXNvdXJjZUl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmFjdGlvbi5FZGl0aW5nRG9tYWluQWN0aW9uQmFyQ29udHJpYnV0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkuY2VsbGVkaXRvci5BZGFwdGVyRmFjdG9yeVRyZWVFZGl0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkuZG5kLkVkaXRpbmdEb21haW5WaWV3ZXJEcm9wQWRhcHRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5kbmQuTG9jYWxUcmFuc2ZlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5kbmQuVmlld2VyRHJhZ0FkYXB0ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkucHJvdmlkZXIuQWRhcHRlckZhY3RvcnlDb250ZW50UHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkucHJvdmlkZXIuQWRhcHRlckZhY3RvcnlMYWJlbFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLnByb3ZpZGVyLlVud3JhcHBpbmdTZWxlY3Rpb25Qcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS51dGlsLkVkaXRVSU1hcmtlckhlbHBlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS51dGlsLkVkaXRVSVV0aWw7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkudmlldy5FeHRlbmRlZFByb3BlcnR5U2hlZXRQYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JTWVudUxpc3RlbmVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JTWVudU1hbmFnZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklTdGF0dXNMaW5lTWFuYWdlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSVRvb2xCYXJNYW5hZ2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5NZW51TWFuYWdlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uU2VwYXJhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmRpYWxvZ3MuTWVzc2FnZURpYWxvZzsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5kaWFsb2dzLlByb2dyZXNzTW9uaXRvckRpYWxvZzsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS51dGlsLkxvY2FsU2VsZWN0aW9uVHJhbnNmZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb25Qcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTdHJ1Y3R1cmVkU2VsZWN0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuU2VsZWN0aW9uQ2hhbmdlZEV2ZW50OworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuU3RydWN0dXJlZFNlbGVjdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlN0cnVjdHVyZWRWaWV3ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5UcmVlVmlld2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuVmlld2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5TVEVNWE1JUmVzb3VyY2VGYWN0b3J5SW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLnByZXNlbnRhdGlvbi5Db3JlRWRpdG9yUGx1Z2luOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24ucHJvdmlkZXIuQ29tbW9uSXRlbVByb3ZpZGVyQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmV4cGVyaW1lbnQucHJvdmlkZXIuRXhwZXJpbWVudEl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5wcm92aWRlci5HcmFwaEl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5sb2dnZXIucHJvdmlkZXIuTG9nZ2VySXRlbVByb3ZpZGVyQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLnByb3ZpZGVyLk1vZGVsSXRlbVByb3ZpZGVyQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLnByb3ZpZGVyLk1vZGlmaWVySXRlbVByb3ZpZGVyQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZS5wcm92aWRlci5QcmVkaWNhdGVJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2NlbmFyaW8ucHJvdmlkZXIuU2NlbmFyaW9JdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2VxdWVuY2VyLnByb3ZpZGVyLlNlcXVlbmNlckl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zb2x2ZXIucHJvdmlkZXIuU29sdmVySXRlbVByb3ZpZGVyQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnRyaWdnZXIucHJvdmlkZXIuVHJpZ2dlckl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5TV1Q7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmN1c3RvbS5DVGFiRm9sZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5kbmQuRE5EOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5kbmQuVHJhbnNmZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5Db250cm9sQWRhcHRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLkNvbnRyb2xFdmVudDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZ3JhcGhpY3MuUG9pbnQ7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLk1lbnU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuVHJlZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5JQWN0aW9uQmFyczsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5JRWRpdG9ySW5wdXQ7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuSUVkaXRvclBhcnQ7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuSUVkaXRvclNpdGU7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuSVBhcnRMaXN0ZW5lcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5JV29ya2JlbmNoUGFydDsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5QYXJ0SW5pdEV4Y2VwdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5hY3Rpb25zLldvcmtzcGFjZU1vZGlmeU9wZXJhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5kaWFsb2dzLlNhdmVBc0RpYWxvZzsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5pZGUuSUdvdG9NYXJrZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkucGFydC5GaWxlRWRpdG9ySW5wdXQ7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkucGFydC5NdWx0aVBhZ2VFZGl0b3JQYXJ0OworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLnZpZXdzLmNvbnRlbnRvdXRsaW5lLkNvbnRlbnRPdXRsaW5lOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLnZpZXdzLmNvbnRlbnRvdXRsaW5lLkNvbnRlbnRPdXRsaW5lUGFnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS52aWV3cy5jb250ZW50b3V0bGluZS5JQ29udGVudE91dGxpbmVQYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLnZpZXdzLnByb3BlcnRpZXMuSVByb3BlcnR5U2hlZXRQYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLnZpZXdzLnByb3BlcnRpZXMuUHJvcGVydHlTaGVldDsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS52aWV3cy5wcm9wZXJ0aWVzLlByb3BlcnR5U2hlZXRQYWdlOworCisKKy8qKgorICogVGhpcyBpcyBhbiBleGFtcGxlIG9mIGEgR3JhcGggbW9kZWwgZWRpdG9yLgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQGdlbmVyYXRlZAorICovCitAU3VwcHJlc3NXYXJuaW5ncygiYWxsIikKK3B1YmxpYyBjbGFzcyBHcmFwaEVkaXRvcgorCWV4dGVuZHMgTXVsdGlQYWdlRWRpdG9yUGFydAorCWltcGxlbWVudHMgSUVkaXRpbmdEb21haW5Qcm92aWRlciwgSVNlbGVjdGlvblByb3ZpZGVyLCBJTWVudUxpc3RlbmVyLCBJVmlld2VyUHJvdmlkZXIsIElHb3RvTWFya2VyIHsKKwkvKioKKwkgKiBUaGlzIGtlZXBzIHRyYWNrIG9mIHRoZSBlZGl0aW5nIGRvbWFpbiB0aGF0IGlzIHVzZWQgdG8gdHJhY2sgYWxsIGNoYW5nZXMgdG8gdGhlIG1vZGVsLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBBZGFwdGVyRmFjdG9yeUVkaXRpbmdEb21haW4gZWRpdGluZ0RvbWFpbjsKKworCS8qKgorCSAqIFRoaXMgaXMgdGhlIG9uZSBhZGFwdGVyIGZhY3RvcnkgdXNlZCBmb3IgcHJvdmlkaW5nIHZpZXdzIG9mIHRoZSBtb2RlbC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgQ29tcG9zZWRBZGFwdGVyRmFjdG9yeSBhZGFwdGVyRmFjdG9yeTsKKworCS8qKgorCSAqIFRoaXMgaXMgdGhlIGNvbnRlbnQgb3V0bGluZSBwYWdlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBJQ29udGVudE91dGxpbmVQYWdlIGNvbnRlbnRPdXRsaW5lUGFnZTsKKworCS8qKgorCSAqIFRoaXMgaXMgYSBrbHVkZ2UuLi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgSVN0YXR1c0xpbmVNYW5hZ2VyIGNvbnRlbnRPdXRsaW5lU3RhdHVzTGluZU1hbmFnZXI7CisKKwkvKioKKwkgKiBUaGlzIGlzIHRoZSBjb250ZW50IG91dGxpbmUgcGFnZSdzIHZpZXdlci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgVHJlZVZpZXdlciBjb250ZW50T3V0bGluZVZpZXdlcjsKKworCS8qKgorCSAqIFRoaXMgaXMgdGhlIHByb3BlcnR5IHNoZWV0IHBhZ2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIFByb3BlcnR5U2hlZXRQYWdlIHByb3BlcnR5U2hlZXRQYWdlOworCisJLyoqCisJICogVGhpcyBpcyB0aGUgdmlld2VyIHRoYXQgc2hhZG93cyB0aGUgc2VsZWN0aW9uIGluIHRoZSBjb250ZW50IG91dGxpbmUuCisJICogVGhlIHBhcmVudCByZWxhdGlvbiBtdXN0IGJlIGNvcnJlY3RseSBkZWZpbmVkIGZvciB0aGlzIHRvIHdvcmsuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIFRyZWVWaWV3ZXIgc2VsZWN0aW9uVmlld2VyOworCisJLyoqCisJICogVGhpcyBrZWVwcyB0cmFjayBvZiB0aGUgYWN0aXZlIGNvbnRlbnQgdmlld2VyLCB3aGljaCBtYXkgYmUgZWl0aGVyIG9uZSBvZiB0aGUgdmlld2VycyBpbiB0aGUgcGFnZXMgb3IgdGhlIGNvbnRlbnQgb3V0bGluZSB2aWV3ZXIuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIFZpZXdlciBjdXJyZW50Vmlld2VyOworCisJLyoqCisJICogVGhpcyBsaXN0ZW5zIHRvIHdoaWNoIGV2ZXIgdmlld2VyIGlzIGFjdGl2ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lciBzZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXI7CisKKwkvKioKKwkgKiBUaGlzIGtlZXBzIHRyYWNrIG9mIGFsbCB0aGUge0BsaW5rIG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcn1zIHRoYXQgYXJlIGxpc3RlbmluZyB0byB0aGlzIGVkaXRvci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgQ29sbGVjdGlvbjxJU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyPiBzZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXJzID0gbmV3IEFycmF5TGlzdDxJU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyPigpOworCisJLyoqCisJICogVGhpcyBrZWVwcyB0cmFjayBvZiB0aGUgc2VsZWN0aW9uIG9mIHRoZSBlZGl0b3IgYXMgYSB3aG9sZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgSVNlbGVjdGlvbiBlZGl0b3JTZWxlY3Rpb24gPSBTdHJ1Y3R1cmVkU2VsZWN0aW9uLkVNUFRZOworCisJLyoqCisJICogVGhlIE1hcmtlckhlbHBlciBpcyByZXNwb25zaWJsZSBmb3IgY3JlYXRpbmcgd29ya3NwYWNlIHJlc291cmNlIG1hcmtlcnMgcHJlc2VudGVkCisJICogaW4gRWNsaXBzZSdzIFByb2JsZW1zIFZpZXcuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIE1hcmtlckhlbHBlciBtYXJrZXJIZWxwZXIgPSBuZXcgRWRpdFVJTWFya2VySGVscGVyKCk7CisKKwkvKioKKwkgKiBUaGlzIGxpc3RlbnMgZm9yIHdoZW4gdGhlIG91dGxpbmUgYmVjb21lcyBhY3RpdmUKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgSVBhcnRMaXN0ZW5lciBwYXJ0TGlzdGVuZXIgPQorCQluZXcgSVBhcnRMaXN0ZW5lcigpIHsKKwkJCXB1YmxpYyB2b2lkIHBhcnRBY3RpdmF0ZWQoSVdvcmtiZW5jaFBhcnQgcCkgeworCQkJCWlmIChwIGluc3RhbmNlb2YgQ29udGVudE91dGxpbmUpIHsKKwkJCQkJaWYgKCgoQ29udGVudE91dGxpbmUpcCkuZ2V0Q3VycmVudFBhZ2UoKSA9PSBjb250ZW50T3V0bGluZVBhZ2UpIHsKKwkJCQkJCWdldEFjdGlvbkJhckNvbnRyaWJ1dG9yKCkuc2V0QWN0aXZlRWRpdG9yKEdyYXBoRWRpdG9yLnRoaXMpOworCisJCQkJCQlzZXRDdXJyZW50Vmlld2VyKGNvbnRlbnRPdXRsaW5lVmlld2VyKTsKKwkJCQkJfQorCQkJCX0KKwkJCQllbHNlIGlmIChwIGluc3RhbmNlb2YgUHJvcGVydHlTaGVldCkgeworCQkJCQlpZiAoKChQcm9wZXJ0eVNoZWV0KXApLmdldEN1cnJlbnRQYWdlKCkgPT0gcHJvcGVydHlTaGVldFBhZ2UpIHsKKwkJCQkJCWdldEFjdGlvbkJhckNvbnRyaWJ1dG9yKCkuc2V0QWN0aXZlRWRpdG9yKEdyYXBoRWRpdG9yLnRoaXMpOworCQkJCQkJaGFuZGxlQWN0aXZhdGUoKTsKKwkJCQkJfQorCQkJCX0KKwkJCQllbHNlIGlmIChwID09IEdyYXBoRWRpdG9yLnRoaXMpIHsKKwkJCQkJaGFuZGxlQWN0aXZhdGUoKTsKKwkJCQl9CisJCQl9CisJCQlwdWJsaWMgdm9pZCBwYXJ0QnJvdWdodFRvVG9wKElXb3JrYmVuY2hQYXJ0IHApIHsKKwkJCQkvLyBJZ25vcmUuCisJCQl9CisJCQlwdWJsaWMgdm9pZCBwYXJ0Q2xvc2VkKElXb3JrYmVuY2hQYXJ0IHApIHsKKwkJCQkvLyBJZ25vcmUuCisJCQl9CisJCQlwdWJsaWMgdm9pZCBwYXJ0RGVhY3RpdmF0ZWQoSVdvcmtiZW5jaFBhcnQgcCkgeworCQkJCS8vIElnbm9yZS4KKwkJCX0KKwkJCXB1YmxpYyB2b2lkIHBhcnRPcGVuZWQoSVdvcmtiZW5jaFBhcnQgcCkgeworCQkJCS8vIElnbm9yZS4KKwkJCX0KKwkJfTsKKworCS8qKgorCSAqIFJlc291cmNlcyB0aGF0IGhhdmUgYmVlbiByZW1vdmVkIHNpbmNlIGxhc3QgYWN0aXZhdGlvbi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgQ29sbGVjdGlvbjxSZXNvdXJjZT4gcmVtb3ZlZFJlc291cmNlcyA9IG5ldyBBcnJheUxpc3Q8UmVzb3VyY2U+KCk7CisKKwkvKioKKwkgKiBSZXNvdXJjZXMgdGhhdCBoYXZlIGJlZW4gY2hhbmdlZCBzaW5jZSBsYXN0IGFjdGl2YXRpb24uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIENvbGxlY3Rpb248UmVzb3VyY2U+IGNoYW5nZWRSZXNvdXJjZXMgPSBuZXcgQXJyYXlMaXN0PFJlc291cmNlPigpOworCisJLyoqCisJICogUmVzb3VyY2VzIHRoYXQgaGF2ZSBiZWVuIHNhdmVkLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBDb2xsZWN0aW9uPFJlc291cmNlPiBzYXZlZFJlc291cmNlcyA9IG5ldyBBcnJheUxpc3Q8UmVzb3VyY2U+KCk7CisKKwkvKioKKwkgKiBNYXAgdG8gc3RvcmUgdGhlIGRpYWdub3N0aWMgYXNzb2NpYXRlZCB3aXRoIGEgcmVzb3VyY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIE1hcDxSZXNvdXJjZSwgRGlhZ25vc3RpYz4gcmVzb3VyY2VUb0RpYWdub3N0aWNNYXAgPSBuZXcgTGlua2VkSGFzaE1hcDxSZXNvdXJjZSwgRGlhZ25vc3RpYz4oKTsKKworCS8qKgorCSAqIENvbnRyb2xzIHdoZXRoZXIgdGhlIHByb2JsZW0gaW5kaWNhdGlvbiBzaG91bGQgYmUgdXBkYXRlZC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgYm9vbGVhbiB1cGRhdGVQcm9ibGVtSW5kaWNhdGlvbiA9IHRydWU7CisKKwkvKioKKwkgKiBBZGFwdGVyIHVzZWQgdG8gdXBkYXRlIHRoZSBwcm9ibGVtIGluZGljYXRpb24gd2hlbiByZXNvdXJjZXMgYXJlIGRlbWFuZGVkIGxvYWRlZC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgRUNvbnRlbnRBZGFwdGVyIHByb2JsZW1JbmRpY2F0aW9uQWRhcHRlciA9IAorCQluZXcgRUNvbnRlbnRBZGFwdGVyKCkgeworCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgdm9pZCBub3RpZnlDaGFuZ2VkKE5vdGlmaWNhdGlvbiBub3RpZmljYXRpb24pIHsKKwkJCQlpZiAobm90aWZpY2F0aW9uLmdldE5vdGlmaWVyKCkgaW5zdGFuY2VvZiBSZXNvdXJjZSkgeworCQkJCQlzd2l0Y2ggKG5vdGlmaWNhdGlvbi5nZXRGZWF0dXJlSUQoUmVzb3VyY2UuY2xhc3MpKSB7CisJCQkJCQljYXNlIFJlc291cmNlLlJFU09VUkNFX19JU19MT0FERUQ6CisJCQkJCQljYXNlIFJlc291cmNlLlJFU09VUkNFX19FUlJPUlM6CisJCQkJCQljYXNlIFJlc291cmNlLlJFU09VUkNFX19XQVJOSU5HUzogeworCQkJCQkJCVJlc291cmNlIHJlc291cmNlID0gKFJlc291cmNlKW5vdGlmaWNhdGlvbi5nZXROb3RpZmllcigpOworCQkJCQkJCURpYWdub3N0aWMgZGlhZ25vc3RpYyA9IGFuYWx5emVSZXNvdXJjZVByb2JsZW1zKHJlc291cmNlLCBudWxsKTsKKwkJCQkJCQlpZiAoZGlhZ25vc3RpYy5nZXRTZXZlcml0eSgpICE9IERpYWdub3N0aWMuT0spIHsKKwkJCQkJCQkJcmVzb3VyY2VUb0RpYWdub3N0aWNNYXAucHV0KHJlc291cmNlLCBkaWFnbm9zdGljKTsKKwkJCQkJCQl9CisJCQkJCQkJZWxzZSB7CisJCQkJCQkJCXJlc291cmNlVG9EaWFnbm9zdGljTWFwLnJlbW92ZShyZXNvdXJjZSk7CisJCQkJCQkJfQorCisJCQkJCQkJaWYgKHVwZGF0ZVByb2JsZW1JbmRpY2F0aW9uKSB7CisJCQkJCQkJCWdldFNpdGUoKS5nZXRTaGVsbCgpLmdldERpc3BsYXkoKS5hc3luY0V4ZWMKKwkJCQkJCQkJCShuZXcgUnVubmFibGUoKSB7CisJCQkJCQkJCQkJIHB1YmxpYyB2b2lkIHJ1bigpIHsKKwkJCQkJCQkJCQkJIHVwZGF0ZVByb2JsZW1JbmRpY2F0aW9uKCk7CisJCQkJCQkJCQkJIH0KKwkJCQkJCQkJCSB9KTsKKwkJCQkJCQl9CisJCQkJCQkJYnJlYWs7CisJCQkJCQl9CisJCQkJCX0KKwkJCQl9CisJCQkJZWxzZSB7CisJCQkJCXN1cGVyLm5vdGlmeUNoYW5nZWQobm90aWZpY2F0aW9uKTsKKwkJCQl9CisJCQl9CisKKwkJCUBPdmVycmlkZQorCQkJcHJvdGVjdGVkIHZvaWQgc2V0VGFyZ2V0KFJlc291cmNlIHRhcmdldCkgeworCQkJCWJhc2ljU2V0VGFyZ2V0KHRhcmdldCk7CisJCQl9CisKKwkJCUBPdmVycmlkZQorCQkJcHJvdGVjdGVkIHZvaWQgdW5zZXRUYXJnZXQoUmVzb3VyY2UgdGFyZ2V0KSB7CisJCQkJYmFzaWNVbnNldFRhcmdldCh0YXJnZXQpOworCQkJfQorCQl9OworCisJLyoqCisJICogVGhpcyBsaXN0ZW5zIGZvciB3b3Jrc3BhY2UgY2hhbmdlcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgSVJlc291cmNlQ2hhbmdlTGlzdGVuZXIgcmVzb3VyY2VDaGFuZ2VMaXN0ZW5lciA9CisJCW5ldyBJUmVzb3VyY2VDaGFuZ2VMaXN0ZW5lcigpIHsKKwkJCXB1YmxpYyB2b2lkIHJlc291cmNlQ2hhbmdlZChJUmVzb3VyY2VDaGFuZ2VFdmVudCBldmVudCkgeworCQkJCUlSZXNvdXJjZURlbHRhIGRlbHRhID0gZXZlbnQuZ2V0RGVsdGEoKTsKKwkJCQl0cnkgeworCQkJCQljbGFzcyBSZXNvdXJjZURlbHRhVmlzaXRvciBpbXBsZW1lbnRzIElSZXNvdXJjZURlbHRhVmlzaXRvciB7CisJCQkJCQlwcm90ZWN0ZWQgUmVzb3VyY2VTZXQgcmVzb3VyY2VTZXQgPSBlZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCk7CisJCQkJCQlwcm90ZWN0ZWQgQ29sbGVjdGlvbjxSZXNvdXJjZT4gY2hhbmdlZFJlc291cmNlcyA9IG5ldyBBcnJheUxpc3Q8UmVzb3VyY2U+KCk7CisJCQkJCQlwcm90ZWN0ZWQgQ29sbGVjdGlvbjxSZXNvdXJjZT4gcmVtb3ZlZFJlc291cmNlcyA9IG5ldyBBcnJheUxpc3Q8UmVzb3VyY2U+KCk7CisKKwkJCQkJCXB1YmxpYyBib29sZWFuIHZpc2l0KElSZXNvdXJjZURlbHRhIGRlbHRhKSB7CisJCQkJCQkJaWYgKGRlbHRhLmdldFJlc291cmNlKCkuZ2V0VHlwZSgpID09IElSZXNvdXJjZS5GSUxFKSB7CisJCQkJCQkJCWlmIChkZWx0YS5nZXRLaW5kKCkgPT0gSVJlc291cmNlRGVsdGEuUkVNT1ZFRCB8fAorCQkJCQkJCQkgICAgZGVsdGEuZ2V0S2luZCgpID09IElSZXNvdXJjZURlbHRhLkNIQU5HRUQgJiYgZGVsdGEuZ2V0RmxhZ3MoKSAhPSBJUmVzb3VyY2VEZWx0YS5NQVJLRVJTKSB7CisJCQkJCQkJCQlSZXNvdXJjZSByZXNvdXJjZSA9IHJlc291cmNlU2V0LmdldFJlc291cmNlKFVSSS5jcmVhdGVQbGF0Zm9ybVJlc291cmNlVVJJKGRlbHRhLmdldEZ1bGxQYXRoKCkudG9TdHJpbmcoKSwgdHJ1ZSksIGZhbHNlKTsKKwkJCQkJCQkJCWlmIChyZXNvdXJjZSAhPSBudWxsKSB7CisJCQkJCQkJCQkJaWYgKGRlbHRhLmdldEtpbmQoKSA9PSBJUmVzb3VyY2VEZWx0YS5SRU1PVkVEKSB7CisJCQkJCQkJCQkJCXJlbW92ZWRSZXNvdXJjZXMuYWRkKHJlc291cmNlKTsKKwkJCQkJCQkJCQl9CisJCQkJCQkJCQkJZWxzZSBpZiAoIXNhdmVkUmVzb3VyY2VzLnJlbW92ZShyZXNvdXJjZSkpIHsKKwkJCQkJCQkJCQkJY2hhbmdlZFJlc291cmNlcy5hZGQocmVzb3VyY2UpOworCQkJCQkJCQkJCX0KKwkJCQkJCQkJCX0KKwkJCQkJCQkJfQorCQkJCQkJCX0KKworCQkJCQkJCXJldHVybiB0cnVlOworCQkJCQkJfQorCisJCQkJCQlwdWJsaWMgQ29sbGVjdGlvbjxSZXNvdXJjZT4gZ2V0Q2hhbmdlZFJlc291cmNlcygpIHsKKwkJCQkJCQlyZXR1cm4gY2hhbmdlZFJlc291cmNlczsKKwkJCQkJCX0KKworCQkJCQkJcHVibGljIENvbGxlY3Rpb248UmVzb3VyY2U+IGdldFJlbW92ZWRSZXNvdXJjZXMoKSB7CisJCQkJCQkJcmV0dXJuIHJlbW92ZWRSZXNvdXJjZXM7CisJCQkJCQl9CisJCQkJCX0KKworCQkJCQlmaW5hbCBSZXNvdXJjZURlbHRhVmlzaXRvciB2aXNpdG9yID0gbmV3IFJlc291cmNlRGVsdGFWaXNpdG9yKCk7CisJCQkJCWRlbHRhLmFjY2VwdCh2aXNpdG9yKTsKKworCQkJCQlpZiAoIXZpc2l0b3IuZ2V0UmVtb3ZlZFJlc291cmNlcygpLmlzRW1wdHkoKSkgeworCQkJCQkJZ2V0U2l0ZSgpLmdldFNoZWxsKCkuZ2V0RGlzcGxheSgpLmFzeW5jRXhlYworCQkJCQkJCShuZXcgUnVubmFibGUoKSB7CisJCQkJCQkJCSBwdWJsaWMgdm9pZCBydW4oKSB7CisJCQkJCQkJCQkgcmVtb3ZlZFJlc291cmNlcy5hZGRBbGwodmlzaXRvci5nZXRSZW1vdmVkUmVzb3VyY2VzKCkpOworCQkJCQkJCQkJIGlmICghaXNEaXJ0eSgpKSB7CisJCQkJCQkJCQkJIGdldFNpdGUoKS5nZXRQYWdlKCkuY2xvc2VFZGl0b3IoR3JhcGhFZGl0b3IudGhpcywgZmFsc2UpOworCQkJCQkJCQkJIH0KKwkJCQkJCQkJIH0KKwkJCQkJCQkgfSk7CisJCQkJCX0KKworCQkJCQlpZiAoIXZpc2l0b3IuZ2V0Q2hhbmdlZFJlc291cmNlcygpLmlzRW1wdHkoKSkgeworCQkJCQkJZ2V0U2l0ZSgpLmdldFNoZWxsKCkuZ2V0RGlzcGxheSgpLmFzeW5jRXhlYworCQkJCQkJCShuZXcgUnVubmFibGUoKSB7CisJCQkJCQkJCSBwdWJsaWMgdm9pZCBydW4oKSB7CisJCQkJCQkJCQkgY2hhbmdlZFJlc291cmNlcy5hZGRBbGwodmlzaXRvci5nZXRDaGFuZ2VkUmVzb3VyY2VzKCkpOworCQkJCQkJCQkJIGlmIChnZXRTaXRlKCkuZ2V0UGFnZSgpLmdldEFjdGl2ZUVkaXRvcigpID09IEdyYXBoRWRpdG9yLnRoaXMpIHsKKwkJCQkJCQkJCQkgaGFuZGxlQWN0aXZhdGUoKTsKKwkJCQkJCQkJCSB9CisJCQkJCQkJCSB9CisJCQkJCQkJIH0pOworCQkJCQl9CisJCQkJfQorCQkJCWNhdGNoIChDb3JlRXhjZXB0aW9uIGV4Y2VwdGlvbikgeworCQkJCQlDb3JlRWRpdG9yUGx1Z2luLklOU1RBTkNFLmxvZyhleGNlcHRpb24pOworCQkJCX0KKwkJCX0KKwkJfTsKKworCS8qKgorCSAqIEhhbmRsZXMgYWN0aXZhdGlvbiBvZiB0aGUgZWRpdG9yIG9yIGl0J3MgYXNzb2NpYXRlZCB2aWV3cy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBoYW5kbGVBY3RpdmF0ZSgpIHsKKwkJLy8gUmVjb21wdXRlIHRoZSByZWFkIG9ubHkgc3RhdGUuCisJCS8vCisJCWlmIChlZGl0aW5nRG9tYWluLmdldFJlc291cmNlVG9SZWFkT25seU1hcCgpICE9IG51bGwpIHsKKwkJICBlZGl0aW5nRG9tYWluLmdldFJlc291cmNlVG9SZWFkT25seU1hcCgpLmNsZWFyKCk7CisKKwkJICAvLyBSZWZyZXNoIGFueSBhY3Rpb25zIHRoYXQgbWF5IGJlY29tZSBlbmFibGVkIG9yIGRpc2FibGVkLgorCQkgIC8vCisJCSAgc2V0U2VsZWN0aW9uKGdldFNlbGVjdGlvbigpKTsKKwkJfQorCisJCWlmICghcmVtb3ZlZFJlc291cmNlcy5pc0VtcHR5KCkpIHsKKwkJCWlmIChoYW5kbGVEaXJ0eUNvbmZsaWN0KCkpIHsKKwkJCQlnZXRTaXRlKCkuZ2V0UGFnZSgpLmNsb3NlRWRpdG9yKEdyYXBoRWRpdG9yLnRoaXMsIGZhbHNlKTsKKwkJCX0KKwkJCWVsc2UgeworCQkJCXJlbW92ZWRSZXNvdXJjZXMuY2xlYXIoKTsKKwkJCQljaGFuZ2VkUmVzb3VyY2VzLmNsZWFyKCk7CisJCQkJc2F2ZWRSZXNvdXJjZXMuY2xlYXIoKTsKKwkJCX0KKwkJfQorCQllbHNlIGlmICghY2hhbmdlZFJlc291cmNlcy5pc0VtcHR5KCkpIHsKKwkJCWNoYW5nZWRSZXNvdXJjZXMucmVtb3ZlQWxsKHNhdmVkUmVzb3VyY2VzKTsKKwkJCWhhbmRsZUNoYW5nZWRSZXNvdXJjZXMoKTsKKwkJCWNoYW5nZWRSZXNvdXJjZXMuY2xlYXIoKTsKKwkJCXNhdmVkUmVzb3VyY2VzLmNsZWFyKCk7CisJCX0KKwl9CisKKwkvKioKKwkgKiBIYW5kbGVzIHdoYXQgdG8gZG8gd2l0aCBjaGFuZ2VkIHJlc291cmNlcyBvbiBhY3RpdmF0aW9uLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIGhhbmRsZUNoYW5nZWRSZXNvdXJjZXMoKSB7CisJCWlmICghY2hhbmdlZFJlc291cmNlcy5pc0VtcHR5KCkgJiYgKCFpc0RpcnR5KCkgfHwgaGFuZGxlRGlydHlDb25mbGljdCgpKSkgeworCQkJaWYgKGlzRGlydHkoKSkgeworCQkJCWNoYW5nZWRSZXNvdXJjZXMuYWRkQWxsKGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKS5nZXRSZXNvdXJjZXMoKSk7CisJCQl9CisJCQllZGl0aW5nRG9tYWluLmdldENvbW1hbmRTdGFjaygpLmZsdXNoKCk7CisKKwkJCXVwZGF0ZVByb2JsZW1JbmRpY2F0aW9uID0gZmFsc2U7CisJCQlmb3IgKFJlc291cmNlIHJlc291cmNlIDogY2hhbmdlZFJlc291cmNlcykgeworCQkJCWlmIChyZXNvdXJjZS5pc0xvYWRlZCgpKSB7CisJCQkJCXJlc291cmNlLnVubG9hZCgpOworCQkJCQl0cnkgeworCQkJCQkJcmVzb3VyY2UubG9hZChDb2xsZWN0aW9ucy5FTVBUWV9NQVApOworCQkJCQl9CisJCQkJCWNhdGNoIChJT0V4Y2VwdGlvbiBleGNlcHRpb24pIHsKKwkJCQkJCWlmICghcmVzb3VyY2VUb0RpYWdub3N0aWNNYXAuY29udGFpbnNLZXkocmVzb3VyY2UpKSB7CisJCQkJCQkJcmVzb3VyY2VUb0RpYWdub3N0aWNNYXAucHV0KHJlc291cmNlLCBhbmFseXplUmVzb3VyY2VQcm9ibGVtcyhyZXNvdXJjZSwgZXhjZXB0aW9uKSk7CisJCQkJCQl9CisJCQkJCX0KKwkJCQl9CisJCQl9CisKKwkJCWlmIChBZGFwdGVyRmFjdG9yeUVkaXRpbmdEb21haW4uaXNTdGFsZShlZGl0b3JTZWxlY3Rpb24pKSB7CisJCQkJc2V0U2VsZWN0aW9uKFN0cnVjdHVyZWRTZWxlY3Rpb24uRU1QVFkpOworCQkJfQorCisJCQl1cGRhdGVQcm9ibGVtSW5kaWNhdGlvbiA9IHRydWU7CisJCQl1cGRhdGVQcm9ibGVtSW5kaWNhdGlvbigpOworCQl9CisJfQorICAKKwkvKioKKwkgKiBVcGRhdGVzIHRoZSBwcm9ibGVtcyBpbmRpY2F0aW9uIHdpdGggdGhlIGluZm9ybWF0aW9uIGRlc2NyaWJlZCBpbiB0aGUgc3BlY2lmaWVkIGRpYWdub3N0aWMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgdXBkYXRlUHJvYmxlbUluZGljYXRpb24oKSB7CisJCWlmICh1cGRhdGVQcm9ibGVtSW5kaWNhdGlvbikgeworCQkJQmFzaWNEaWFnbm9zdGljIGRpYWdub3N0aWMgPQorCQkJCW5ldyBCYXNpY0RpYWdub3N0aWMKKwkJCQkJKERpYWdub3N0aWMuT0ssCisJCQkJCSAib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmVkaXRvciIsIC8vJE5PTi1OTFMtMSQKKwkJCQkJIDAsCisJCQkJCSBudWxsLAorCQkJCQkgbmV3IE9iamVjdCBbXSB7IGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKSB9KTsKKwkJCWZvciAoRGlhZ25vc3RpYyBjaGlsZERpYWdub3N0aWMgOiByZXNvdXJjZVRvRGlhZ25vc3RpY01hcC52YWx1ZXMoKSkgeworCQkJCWlmIChjaGlsZERpYWdub3N0aWMuZ2V0U2V2ZXJpdHkoKSAhPSBEaWFnbm9zdGljLk9LKSB7CisJCQkJCWRpYWdub3N0aWMuYWRkKGNoaWxkRGlhZ25vc3RpYyk7CisJCQkJfQorCQkJfQorCisJCQlpbnQgbGFzdEVkaXRvclBhZ2UgPSBnZXRQYWdlQ291bnQoKSAtIDE7CisJCQlpZiAobGFzdEVkaXRvclBhZ2UgPj0gMCAmJiBnZXRFZGl0b3IobGFzdEVkaXRvclBhZ2UpIGluc3RhbmNlb2YgUHJvYmxlbUVkaXRvclBhcnQpIHsKKwkJCQkoKFByb2JsZW1FZGl0b3JQYXJ0KWdldEVkaXRvcihsYXN0RWRpdG9yUGFnZSkpLnNldERpYWdub3N0aWMoZGlhZ25vc3RpYyk7CisJCQkJaWYgKGRpYWdub3N0aWMuZ2V0U2V2ZXJpdHkoKSAhPSBEaWFnbm9zdGljLk9LKSB7CisJCQkJCXNldEFjdGl2ZVBhZ2UobGFzdEVkaXRvclBhZ2UpOworCQkJCX0KKwkJCX0KKwkJCWVsc2UgaWYgKGRpYWdub3N0aWMuZ2V0U2V2ZXJpdHkoKSAhPSBEaWFnbm9zdGljLk9LKSB7CisJCQkJUHJvYmxlbUVkaXRvclBhcnQgcHJvYmxlbUVkaXRvclBhcnQgPSBuZXcgUHJvYmxlbUVkaXRvclBhcnQoKTsKKwkJCQlwcm9ibGVtRWRpdG9yUGFydC5zZXREaWFnbm9zdGljKGRpYWdub3N0aWMpOworCQkJCXByb2JsZW1FZGl0b3JQYXJ0LnNldE1hcmtlckhlbHBlcihtYXJrZXJIZWxwZXIpOworCQkJCXRyeSB7CisJCQkJCWFkZFBhZ2UoKytsYXN0RWRpdG9yUGFnZSwgcHJvYmxlbUVkaXRvclBhcnQsIGdldEVkaXRvcklucHV0KCkpOworCQkJCQlzZXRQYWdlVGV4dChsYXN0RWRpdG9yUGFnZSwgcHJvYmxlbUVkaXRvclBhcnQuZ2V0UGFydE5hbWUoKSk7CisJCQkJCXNldEFjdGl2ZVBhZ2UobGFzdEVkaXRvclBhZ2UpOworCQkJCQlzaG93VGFicygpOworCQkJCX0KKwkJCQljYXRjaCAoUGFydEluaXRFeGNlcHRpb24gZXhjZXB0aW9uKSB7CisJCQkJCUNvcmVFZGl0b3JQbHVnaW4uSU5TVEFOQ0UubG9nKGV4Y2VwdGlvbik7CisJCQkJfQorCQkJfQorCisJCQlpZiAobWFya2VySGVscGVyLmhhc01hcmtlcnMoZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpKSkgeworCQkJCW1hcmtlckhlbHBlci5kZWxldGVNYXJrZXJzKGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKSk7CisJCQkJaWYgKGRpYWdub3N0aWMuZ2V0U2V2ZXJpdHkoKSAhPSBEaWFnbm9zdGljLk9LKSB7CisJCQkJCXRyeSB7CisJCQkJCQltYXJrZXJIZWxwZXIuY3JlYXRlTWFya2VycyhkaWFnbm9zdGljKTsKKwkJCQkJfQorCQkJCQljYXRjaCAoQ29yZUV4Y2VwdGlvbiBleGNlcHRpb24pIHsKKwkJCQkJCUNvcmVFZGl0b3JQbHVnaW4uSU5TVEFOQ0UubG9nKGV4Y2VwdGlvbik7CisJCQkJCX0KKwkJCQl9CisJCQl9CisJCX0KKwl9CisKKwkvKioKKwkgKiBTaG93cyBhIGRpYWxvZyB0aGF0IGFza3MgaWYgY29uZmxpY3RpbmcgY2hhbmdlcyBzaG91bGQgYmUgZGlzY2FyZGVkLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBib29sZWFuIGhhbmRsZURpcnR5Q29uZmxpY3QoKSB7CisJCXJldHVybgorCQkJTWVzc2FnZURpYWxvZy5vcGVuUXVlc3Rpb24KKwkJCQkoZ2V0U2l0ZSgpLmdldFNoZWxsKCksCisJCQkJIGdldFN0cmluZygiX1VJX0ZpbGVDb25mbGljdF9sYWJlbCIpLCAvLyROT04tTkxTLTEkCisJCQkJIGdldFN0cmluZygiX1dBUk5fRmlsZUNvbmZsaWN0IikpOyAvLyROT04tTkxTLTEkCisJfQorCisJLyoqCisJICogVGhpcyBjcmVhdGVzIGEgbW9kZWwgZWRpdG9yLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBHcmFwaEVkaXRvcigpIHsKKwkJc3VwZXIoKTsKKwkJaW5pdGlhbGl6ZUVkaXRpbmdEb21haW4oKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHNldHMgdXAgdGhlIGVkaXRpbmcgZG9tYWluIGZvciB0aGUgbW9kZWwgZWRpdG9yLiA8IS0tIGJlZ2luLXVzZXItZG9jCisJICogLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJcHJvdGVjdGVkIHZvaWQgaW5pdGlhbGl6ZUVkaXRpbmdEb21haW4oKSB7CisJCWluaXRpYWxpemVFZGl0aW5nRG9tYWluR2VuKCk7CisJCWVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKS5nZXRSZXNvdXJjZUZhY3RvcnlSZWdpc3RyeSgpCisJCQkJLmdldEV4dGVuc2lvblRvRmFjdG9yeU1hcCgpLnB1dCgiKiIsCisJCQkJCQlTVEVNWE1JUmVzb3VyY2VGYWN0b3J5SW1wbC5JTlNUQU5DRSk7CisKKwkJZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpLmdldFJlc291cmNlRmFjdG9yeVJlZ2lzdHJ5KCkKKwkJCQkuZ2V0UHJvdG9jb2xUb0ZhY3RvcnlNYXAoKS5wdXQoInBsYXRmb3JtIiwKKwkJCQkJCVNURU1YTUlSZXNvdXJjZUZhY3RvcnlJbXBsLklOU1RBTkNFKTsKKwl9IC8vIGluaXRpYWxpemVFZGl0aW5nRG9tYWluCisJCisJLyoqCisJICogVGhpcyBzZXRzIHVwIHRoZSBlZGl0aW5nIGRvbWFpbiBmb3IgdGhlIG1vZGVsIGVkaXRvci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBpbml0aWFsaXplRWRpdGluZ0RvbWFpbkdlbigpIHsKKwkJLy8gQ3JlYXRlIGFuIGFkYXB0ZXIgZmFjdG9yeSB0aGF0IHlpZWxkcyBpdGVtIHByb3ZpZGVycy4KKwkJLy8KKwkJYWRhcHRlckZhY3RvcnkgPSBuZXcgQ29tcG9zZWRBZGFwdGVyRmFjdG9yeShDb21wb3NlZEFkYXB0ZXJGYWN0b3J5LkRlc2NyaXB0b3IuUmVnaXN0cnkuSU5TVEFOQ0UpOworCisJCWFkYXB0ZXJGYWN0b3J5LmFkZEFkYXB0ZXJGYWN0b3J5KG5ldyBSZXNvdXJjZUl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5KCkpOworCQlhZGFwdGVyRmFjdG9yeS5hZGRBZGFwdGVyRmFjdG9yeShuZXcgQ29tbW9uSXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkoKSk7CisJCWFkYXB0ZXJGYWN0b3J5LmFkZEFkYXB0ZXJGYWN0b3J5KG5ldyBFeHBlcmltZW50SXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkoKSk7CisJCWFkYXB0ZXJGYWN0b3J5LmFkZEFkYXB0ZXJGYWN0b3J5KG5ldyBHcmFwaEl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5KCkpOworCQlhZGFwdGVyRmFjdG9yeS5hZGRBZGFwdGVyRmFjdG9yeShuZXcgTW9kZWxJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSgpKTsKKwkJYWRhcHRlckZhY3RvcnkuYWRkQWRhcHRlckZhY3RvcnkobmV3IE1vZGlmaWVySXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkoKSk7CisJCWFkYXB0ZXJGYWN0b3J5LmFkZEFkYXB0ZXJGYWN0b3J5KG5ldyBQcmVkaWNhdGVJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSgpKTsKKwkJYWRhcHRlckZhY3RvcnkuYWRkQWRhcHRlckZhY3RvcnkobmV3IFNjZW5hcmlvSXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkoKSk7CisJCWFkYXB0ZXJGYWN0b3J5LmFkZEFkYXB0ZXJGYWN0b3J5KG5ldyBTZXF1ZW5jZXJJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSgpKTsKKwkJYWRhcHRlckZhY3RvcnkuYWRkQWRhcHRlckZhY3RvcnkobmV3IFRyaWdnZXJJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSgpKTsKKwkJYWRhcHRlckZhY3RvcnkuYWRkQWRhcHRlckZhY3RvcnkobmV3IFNvbHZlckl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5KCkpOworCQlhZGFwdGVyRmFjdG9yeS5hZGRBZGFwdGVyRmFjdG9yeShuZXcgTG9nZ2VySXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkoKSk7CisJCWFkYXB0ZXJGYWN0b3J5LmFkZEFkYXB0ZXJGYWN0b3J5KG5ldyBFY29yZUl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5KCkpOworCQlhZGFwdGVyRmFjdG9yeS5hZGRBZGFwdGVyRmFjdG9yeShuZXcgUmVmbGVjdGl2ZUl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5KCkpOworCisJCS8vIENyZWF0ZSB0aGUgY29tbWFuZCBzdGFjayB0aGF0IHdpbGwgbm90aWZ5IHRoaXMgZWRpdG9yIGFzIGNvbW1hbmRzIGFyZSBleGVjdXRlZC4KKwkJLy8KKwkJQmFzaWNDb21tYW5kU3RhY2sgY29tbWFuZFN0YWNrID0gbmV3IEJhc2ljQ29tbWFuZFN0YWNrKCk7CisKKwkJLy8gQWRkIGEgbGlzdGVuZXIgdG8gc2V0IHRoZSBtb3N0IHJlY2VudCBjb21tYW5kJ3MgYWZmZWN0ZWQgb2JqZWN0cyB0byBiZSB0aGUgc2VsZWN0aW9uIG9mIHRoZSB2aWV3ZXIgd2l0aCBmb2N1cy4KKwkJLy8KKwkJY29tbWFuZFN0YWNrLmFkZENvbW1hbmRTdGFja0xpc3RlbmVyCisJCQkobmV3IENvbW1hbmRTdGFja0xpc3RlbmVyKCkgeworCQkJCSBwdWJsaWMgdm9pZCBjb21tYW5kU3RhY2tDaGFuZ2VkKGZpbmFsIEV2ZW50T2JqZWN0IGV2ZW50KSB7CisJCQkJCSBnZXRDb250YWluZXIoKS5nZXREaXNwbGF5KCkuYXN5bmNFeGVjCisJCQkJCQkgKG5ldyBSdW5uYWJsZSgpIHsKKwkJCQkJCQkgIHB1YmxpYyB2b2lkIHJ1bigpIHsKKwkJCQkJCQkJICBmaXJlUHJvcGVydHlDaGFuZ2UoSUVkaXRvclBhcnQuUFJPUF9ESVJUWSk7CisKKwkJCQkJCQkJICAvLyBUcnkgdG8gc2VsZWN0IHRoZSBhZmZlY3RlZCBvYmplY3RzLgorCQkJCQkJCQkgIC8vCisJCQkJCQkJCSAgQ29tbWFuZCBtb3N0UmVjZW50Q29tbWFuZCA9ICgoQ29tbWFuZFN0YWNrKWV2ZW50LmdldFNvdXJjZSgpKS5nZXRNb3N0UmVjZW50Q29tbWFuZCgpOworCQkJCQkJCQkgIGlmIChtb3N0UmVjZW50Q29tbWFuZCAhPSBudWxsKSB7CisJCQkJCQkJCQkgIHNldFNlbGVjdGlvblRvVmlld2VyKG1vc3RSZWNlbnRDb21tYW5kLmdldEFmZmVjdGVkT2JqZWN0cygpKTsKKwkJCQkJCQkJICB9CisJCQkJCQkJCSAgaWYgKHByb3BlcnR5U2hlZXRQYWdlICE9IG51bGwgJiYgIXByb3BlcnR5U2hlZXRQYWdlLmdldENvbnRyb2woKS5pc0Rpc3Bvc2VkKCkpIHsKKwkJCQkJCQkJCSAgcHJvcGVydHlTaGVldFBhZ2UucmVmcmVzaCgpOworCQkJCQkJCQkgIH0KKwkJCQkJCQkgIH0KKwkJCQkJCSAgfSk7CisJCQkJIH0KKwkJCSB9KTsKKworCQkvLyBDcmVhdGUgdGhlIGVkaXRpbmcgZG9tYWluIHdpdGggYSBzcGVjaWFsIGNvbW1hbmQgc3RhY2suCisJCS8vCisJCWVkaXRpbmdEb21haW4gPSBuZXcgQWRhcHRlckZhY3RvcnlFZGl0aW5nRG9tYWluKGFkYXB0ZXJGYWN0b3J5LCBjb21tYW5kU3RhY2ssIG5ldyBIYXNoTWFwPFJlc291cmNlLCBCb29sZWFuPigpKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGlzIGhlcmUgZm9yIHRoZSBsaXN0ZW5lciB0byBiZSBhYmxlIHRvIGNhbGwgaXQuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgZmlyZVByb3BlcnR5Q2hhbmdlKGludCBhY3Rpb24pIHsKKwkJc3VwZXIuZmlyZVByb3BlcnR5Q2hhbmdlKGFjdGlvbik7CisJfQorCisJLyoqCisJICogVGhpcyBzZXRzIHRoZSBzZWxlY3Rpb24gaW50byB3aGljaGV2ZXIgdmlld2VyIGlzIGFjdGl2ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRTZWxlY3Rpb25Ub1ZpZXdlcihDb2xsZWN0aW9uPD8+IGNvbGxlY3Rpb24pIHsKKwkJZmluYWwgQ29sbGVjdGlvbjw/PiB0aGVTZWxlY3Rpb24gPSBjb2xsZWN0aW9uOworCQkvLyBNYWtlIHN1cmUgaXQncyBva2F5LgorCQkvLworCQlpZiAodGhlU2VsZWN0aW9uICE9IG51bGwgJiYgIXRoZVNlbGVjdGlvbi5pc0VtcHR5KCkpIHsKKwkJCVJ1bm5hYmxlIHJ1bm5hYmxlID0KKwkJCQluZXcgUnVubmFibGUoKSB7CisJCQkJCXB1YmxpYyB2b2lkIHJ1bigpIHsKKwkJCQkJCS8vIFRyeSB0byBzZWxlY3QgdGhlIGl0ZW1zIGluIHRoZSBjdXJyZW50IGNvbnRlbnQgdmlld2VyIG9mIHRoZSBlZGl0b3IuCisJCQkJCQkvLworCQkJCQkJaWYgKGN1cnJlbnRWaWV3ZXIgIT0gbnVsbCkgeworCQkJCQkJCWN1cnJlbnRWaWV3ZXIuc2V0U2VsZWN0aW9uKG5ldyBTdHJ1Y3R1cmVkU2VsZWN0aW9uKHRoZVNlbGVjdGlvbi50b0FycmF5KCkpLCB0cnVlKTsKKwkJCQkJCX0KKwkJCQkJfQorCQkJCX07CisJCQlnZXRTaXRlKCkuZ2V0U2hlbGwoKS5nZXREaXNwbGF5KCkuYXN5bmNFeGVjKHJ1bm5hYmxlKTsKKwkJfQorCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyB0aGUgZWRpdGluZyBkb21haW4gYXMgcmVxdWlyZWQgYnkgdGhlIHtAbGluayBJRWRpdGluZ0RvbWFpblByb3ZpZGVyfSBpbnRlcmZhY2UuCisJICogVGhpcyBpcyBpbXBvcnRhbnQgZm9yIGltcGxlbWVudGluZyB0aGUgc3RhdGljIG1ldGhvZHMgb2Yge0BsaW5rIEFkYXB0ZXJGYWN0b3J5RWRpdGluZ0RvbWFpbn0KKwkgKiBhbmQgZm9yIHN1cHBvcnRpbmcge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmFjdGlvbi5Db21tYW5kQWN0aW9ufS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRWRpdGluZ0RvbWFpbiBnZXRFZGl0aW5nRG9tYWluKCkgeworCQlyZXR1cm4gZWRpdGluZ0RvbWFpbjsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgY2xhc3MgUmV2ZXJzZUFkYXB0ZXJGYWN0b3J5Q29udGVudFByb3ZpZGVyIGV4dGVuZHMgQWRhcHRlckZhY3RvcnlDb250ZW50UHJvdmlkZXIgeworCQlwdWJsaWMgUmV2ZXJzZUFkYXB0ZXJGYWN0b3J5Q29udGVudFByb3ZpZGVyKEFkYXB0ZXJGYWN0b3J5IGFkYXB0ZXJGYWN0b3J5KSB7CisJCQlzdXBlcihhZGFwdGVyRmFjdG9yeSk7CisJCX0KKworCQlwdWJsaWMgT2JqZWN0IFtdIGdldEVsZW1lbnRzKE9iamVjdCBvYmplY3QpIHsKKwkJCU9iamVjdCBwYXJlbnQgPSBzdXBlci5nZXRQYXJlbnQob2JqZWN0KTsKKwkJCXJldHVybiAocGFyZW50ID09IG51bGwgPyBDb2xsZWN0aW9ucy5FTVBUWV9TRVQgOiBDb2xsZWN0aW9ucy5zaW5nbGV0b24ocGFyZW50KSkudG9BcnJheSgpOworCQl9CisKKwkJcHVibGljIE9iamVjdCBbXSBnZXRDaGlsZHJlbihPYmplY3Qgb2JqZWN0KSB7CisJCQlPYmplY3QgcGFyZW50ID0gc3VwZXIuZ2V0UGFyZW50KG9iamVjdCk7CisJCQlyZXR1cm4gKHBhcmVudCA9PSBudWxsID8gQ29sbGVjdGlvbnMuRU1QVFlfU0VUIDogQ29sbGVjdGlvbnMuc2luZ2xldG9uKHBhcmVudCkpLnRvQXJyYXkoKTsKKwkJfQorCisJCXB1YmxpYyBib29sZWFuIGhhc0NoaWxkcmVuKE9iamVjdCBvYmplY3QpIHsKKwkJCU9iamVjdCBwYXJlbnQgPSBzdXBlci5nZXRQYXJlbnQob2JqZWN0KTsKKwkJCXJldHVybiBwYXJlbnQgIT0gbnVsbDsKKwkJfQorCisJCXB1YmxpYyBPYmplY3QgZ2V0UGFyZW50KE9iamVjdCBvYmplY3QpIHsKKwkJCXJldHVybiBudWxsOworCQl9CisJfQorCisJLyoqCisJICogVGhpcyBtYWtlcyBzdXJlIHRoYXQgb25lIGNvbnRlbnQgdmlld2VyLCBlaXRoZXIgZm9yIHRoZSBjdXJyZW50IHBhZ2Ugb3IgdGhlIG91dGxpbmUgdmlldywgaWYgaXQgaGFzIGZvY3VzLAorCSAqIGlzIHRoZSBjdXJyZW50IG9uZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRDdXJyZW50Vmlld2VyKFZpZXdlciB2aWV3ZXIpIHsKKwkJLy8gSWYgaXQgaXMgY2hhbmdpbmcuLi4KKwkJLy8KKwkJaWYgKGN1cnJlbnRWaWV3ZXIgIT0gdmlld2VyKSB7CisJCQlpZiAoc2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyID09IG51bGwpIHsKKwkJCQkvLyBDcmVhdGUgdGhlIGxpc3RlbmVyIG9uIGRlbWFuZC4KKwkJCQkvLworCQkJCXNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lciA9CisJCQkJCW5ldyBJU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyKCkgeworCQkJCQkJLy8gVGhpcyBqdXN0IG5vdGlmaWVzIHRob3NlIHRoaW5ncyB0aGF0IGFyZSBhZmZlY3RlZCBieSB0aGUgc2VjdGlvbi4KKwkJCQkJCS8vCisJCQkJCQlwdWJsaWMgdm9pZCBzZWxlY3Rpb25DaGFuZ2VkKFNlbGVjdGlvbkNoYW5nZWRFdmVudCBzZWxlY3Rpb25DaGFuZ2VkRXZlbnQpIHsKKwkJCQkJCQlzZXRTZWxlY3Rpb24oc2VsZWN0aW9uQ2hhbmdlZEV2ZW50LmdldFNlbGVjdGlvbigpKTsKKwkJCQkJCX0KKwkJCQkJfTsKKwkJCX0KKworCQkJLy8gU3RvcCBsaXN0ZW5pbmcgdG8gdGhlIG9sZCBvbmUuCisJCQkvLworCQkJaWYgKGN1cnJlbnRWaWV3ZXIgIT0gbnVsbCkgeworCQkJCWN1cnJlbnRWaWV3ZXIucmVtb3ZlU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyKHNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcik7CisJCQl9CisKKwkJCS8vIFN0YXJ0IGxpc3RlbmluZyB0byB0aGUgbmV3IG9uZS4KKwkJCS8vCisJCQlpZiAodmlld2VyICE9IG51bGwpIHsKKwkJCQl2aWV3ZXIuYWRkU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyKHNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcik7CisJCQl9CisKKwkJCS8vIFJlbWVtYmVyIGl0LgorCQkJLy8KKwkJCWN1cnJlbnRWaWV3ZXIgPSB2aWV3ZXI7CisKKwkJCS8vIFNldCB0aGUgZWRpdG9ycyBzZWxlY3Rpb24gYmFzZWQgb24gdGhlIGN1cnJlbnQgdmlld2VyJ3Mgc2VsZWN0aW9uLgorCQkJLy8KKwkJCXNldFNlbGVjdGlvbihjdXJyZW50Vmlld2VyID09IG51bGwgPyBTdHJ1Y3R1cmVkU2VsZWN0aW9uLkVNUFRZIDogY3VycmVudFZpZXdlci5nZXRTZWxlY3Rpb24oKSk7CisJCX0KKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgdGhlIHZpZXdlciBhcyByZXF1aXJlZCBieSB0aGUge0BsaW5rIElWaWV3ZXJQcm92aWRlcn0gaW50ZXJmYWNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBWaWV3ZXIgZ2V0Vmlld2VyKCkgeworCQlyZXR1cm4gY3VycmVudFZpZXdlcjsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGNyZWF0ZXMgYSBjb250ZXh0IG1lbnUgZm9yIHRoZSB2aWV3ZXIgYW5kIGFkZHMgYSBsaXN0ZW5lciBhcyB3ZWxsIHJlZ2lzdGVyaW5nIHRoZSBtZW51IGZvciBleHRlbnNpb24uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCXByb3RlY3RlZCB2b2lkIGNyZWF0ZUNvbnRleHRNZW51Rm9yKFN0cnVjdHVyZWRWaWV3ZXIgdmlld2VyKSB7CisJCU1lbnVNYW5hZ2VyIGNvbnRleHRNZW51ID0gbmV3IE1lbnVNYW5hZ2VyKCIjUG9wVXAiKTsgLy8kTk9OLU5MUy0xJAorCQljb250ZXh0TWVudS5hZGQobmV3IFNlcGFyYXRvcigiYWRkaXRpb25zIikpOyAvLyROT04tTkxTLTEkCisJCWNvbnRleHRNZW51LnNldFJlbW92ZUFsbFdoZW5TaG93bih0cnVlKTsKKwkJY29udGV4dE1lbnUuYWRkTWVudUxpc3RlbmVyKHRoaXMpOworCQlNZW51IG1lbnU9IGNvbnRleHRNZW51LmNyZWF0ZUNvbnRleHRNZW51KHZpZXdlci5nZXRDb250cm9sKCkpOworCQl2aWV3ZXIuZ2V0Q29udHJvbCgpLnNldE1lbnUobWVudSk7CisJCWdldFNpdGUoKS5yZWdpc3RlckNvbnRleHRNZW51KGNvbnRleHRNZW51LCB2aWV3ZXIpOworCisJCWludCBkbmRPcGVyYXRpb25zID0gRE5ELkRST1BfQ09QWSB8IERORC5EUk9QX01PVkUgfCBETkQuRFJPUF9MSU5LOworCQlUcmFuc2ZlcltdIHRyYW5zZmVycyA9IG5ldyBUcmFuc2ZlcltdIHsgTG9jYWxTZWxlY3Rpb25UcmFuc2Zlci5nZXRUcmFuc2ZlcigpLCBMb2NhbFRyYW5zZmVyLmdldEluc3RhbmNlKCkgfTsKKwkJdmlld2VyLmFkZERyYWdTdXBwb3J0KGRuZE9wZXJhdGlvbnMsIHRyYW5zZmVycywgbmV3IFZpZXdlckRyYWdBZGFwdGVyKHZpZXdlcikpOworCQl2aWV3ZXIuYWRkRHJvcFN1cHBvcnQoZG5kT3BlcmF0aW9ucywgdHJhbnNmZXJzLCBuZXcgRWRpdGluZ0RvbWFpblZpZXdlckRyb3BBZGFwdGVyKGVkaXRpbmdEb21haW4sIHZpZXdlcikpOworCX0gLy8gY3JlYXRlQ29udGV4dE1lbnVGb3IKKwkKKwkvKioKKwkgKiBUaGlzIGNyZWF0ZXMgYSBjb250ZXh0IG1lbnUgZm9yIHRoZSB2aWV3ZXIgYW5kIGFkZHMgYSBsaXN0ZW5lciBhcyB3ZWxsIHJlZ2lzdGVyaW5nIHRoZSBtZW51IGZvciBleHRlbnNpb24uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgY3JlYXRlQ29udGV4dE1lbnVGb3JHZW4oU3RydWN0dXJlZFZpZXdlciB2aWV3ZXIpIHsKKwkJTWVudU1hbmFnZXIgY29udGV4dE1lbnUgPSBuZXcgTWVudU1hbmFnZXIoIiNQb3BVcCIpOyAvLyROT04tTkxTLTEkCisJCWNvbnRleHRNZW51LmFkZChuZXcgU2VwYXJhdG9yKCJhZGRpdGlvbnMiKSk7IC8vJE5PTi1OTFMtMSQKKwkJY29udGV4dE1lbnUuc2V0UmVtb3ZlQWxsV2hlblNob3duKHRydWUpOworCQljb250ZXh0TWVudS5hZGRNZW51TGlzdGVuZXIodGhpcyk7CisJCU1lbnUgbWVudT0gY29udGV4dE1lbnUuY3JlYXRlQ29udGV4dE1lbnUodmlld2VyLmdldENvbnRyb2woKSk7CisJCXZpZXdlci5nZXRDb250cm9sKCkuc2V0TWVudShtZW51KTsKKwkJZ2V0U2l0ZSgpLnJlZ2lzdGVyQ29udGV4dE1lbnUoY29udGV4dE1lbnUsIG5ldyBVbndyYXBwaW5nU2VsZWN0aW9uUHJvdmlkZXIodmlld2VyKSk7CisKKwkJaW50IGRuZE9wZXJhdGlvbnMgPSBETkQuRFJPUF9DT1BZIHwgRE5ELkRST1BfTU9WRSB8IERORC5EUk9QX0xJTks7CisJCVRyYW5zZmVyW10gdHJhbnNmZXJzID0gbmV3IFRyYW5zZmVyW10geyBMb2NhbFRyYW5zZmVyLmdldEluc3RhbmNlKCkgfTsKKwkJdmlld2VyLmFkZERyYWdTdXBwb3J0KGRuZE9wZXJhdGlvbnMsIHRyYW5zZmVycywgbmV3IFZpZXdlckRyYWdBZGFwdGVyKHZpZXdlcikpOworCQl2aWV3ZXIuYWRkRHJvcFN1cHBvcnQoZG5kT3BlcmF0aW9ucywgdHJhbnNmZXJzLCBuZXcgRWRpdGluZ0RvbWFpblZpZXdlckRyb3BBZGFwdGVyKGVkaXRpbmdEb21haW4sIHZpZXdlcikpOworCX0KKworCS8qKgorCSAqIFRoaXMgaXMgdGhlIG1ldGhvZCBjYWxsZWQgdG8gbG9hZCBhIHJlc291cmNlIGludG8gdGhlIGVkaXRpbmcgZG9tYWluJ3MgcmVzb3VyY2Ugc2V0IGJhc2VkIG9uIHRoZSBlZGl0b3IncyBpbnB1dC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBjcmVhdGVNb2RlbCgpIHsKKwkJVVJJIHJlc291cmNlVVJJID0gRWRpdFVJVXRpbC5nZXRVUkkoZ2V0RWRpdG9ySW5wdXQoKSk7CisJCUV4Y2VwdGlvbiBleGNlcHRpb24gPSBudWxsOworCQlSZXNvdXJjZSByZXNvdXJjZSA9IG51bGw7CisJCXRyeSB7CisJCQkvLyBMb2FkIHRoZSByZXNvdXJjZSB0aHJvdWdoIHRoZSBlZGl0aW5nIGRvbWFpbi4KKwkJCS8vCisJCQlyZXNvdXJjZSA9IGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKS5nZXRSZXNvdXJjZShyZXNvdXJjZVVSSSwgdHJ1ZSk7CisJCX0KKwkJY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CisJCQlleGNlcHRpb24gPSBlOworCQkJcmVzb3VyY2UgPSBlZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkuZ2V0UmVzb3VyY2UocmVzb3VyY2VVUkksIGZhbHNlKTsKKwkJfQorCisJCURpYWdub3N0aWMgZGlhZ25vc3RpYyA9IGFuYWx5emVSZXNvdXJjZVByb2JsZW1zKHJlc291cmNlLCBleGNlcHRpb24pOworCQlpZiAoZGlhZ25vc3RpYy5nZXRTZXZlcml0eSgpICE9IERpYWdub3N0aWMuT0spIHsKKwkJCXJlc291cmNlVG9EaWFnbm9zdGljTWFwLnB1dChyZXNvdXJjZSwgIGFuYWx5emVSZXNvdXJjZVByb2JsZW1zKHJlc291cmNlLCBleGNlcHRpb24pKTsKKwkJfQorCQllZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkuZUFkYXB0ZXJzKCkuYWRkKHByb2JsZW1JbmRpY2F0aW9uQWRhcHRlcik7CisJfQorCisJLyoqCisJICogUmV0dXJucyBhIGRpYWdub3N0aWMgZGVzY3JpYmluZyB0aGUgZXJyb3JzIGFuZCB3YXJuaW5ncyBsaXN0ZWQgaW4gdGhlIHJlc291cmNlCisJICogYW5kIHRoZSBzcGVjaWZpZWQgZXhjZXB0aW9uIChpZiBhbnkpLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBEaWFnbm9zdGljIGFuYWx5emVSZXNvdXJjZVByb2JsZW1zKFJlc291cmNlIHJlc291cmNlLCBFeGNlcHRpb24gZXhjZXB0aW9uKSB7CisJCWlmICghcmVzb3VyY2UuZ2V0RXJyb3JzKCkuaXNFbXB0eSgpIHx8ICFyZXNvdXJjZS5nZXRXYXJuaW5ncygpLmlzRW1wdHkoKSkgeworCQkJQmFzaWNEaWFnbm9zdGljIGJhc2ljRGlhZ25vc3RpYyA9CisJCQkJbmV3IEJhc2ljRGlhZ25vc3RpYworCQkJCQkoRGlhZ25vc3RpYy5FUlJPUiwKKwkJCQkJICJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZWRpdG9yIiwgLy8kTk9OLU5MUy0xJAorCQkJCQkgMCwKKwkJCQkJIGdldFN0cmluZygiX1VJX0NyZWF0ZU1vZGVsRXJyb3JfbWVzc2FnZSIsIHJlc291cmNlLmdldFVSSSgpKSwgLy8kTk9OLU5MUy0xJAorCQkJCQkgbmV3IE9iamVjdCBbXSB7IGV4Y2VwdGlvbiA9PSBudWxsID8gKE9iamVjdClyZXNvdXJjZSA6IGV4Y2VwdGlvbiB9KTsKKwkJCWJhc2ljRGlhZ25vc3RpYy5tZXJnZShFY29yZVV0aWwuY29tcHV0ZURpYWdub3N0aWMocmVzb3VyY2UsIHRydWUpKTsKKwkJCXJldHVybiBiYXNpY0RpYWdub3N0aWM7CisJCX0KKwkJZWxzZSBpZiAoZXhjZXB0aW9uICE9IG51bGwpIHsKKwkJCXJldHVybgorCQkJCW5ldyBCYXNpY0RpYWdub3N0aWMKKwkJCQkJKERpYWdub3N0aWMuRVJST1IsCisJCQkJCSAib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmVkaXRvciIsIC8vJE5PTi1OTFMtMSQKKwkJCQkJIDAsCisJCQkJCSBnZXRTdHJpbmcoIl9VSV9DcmVhdGVNb2RlbEVycm9yX21lc3NhZ2UiLCByZXNvdXJjZS5nZXRVUkkoKSksIC8vJE5PTi1OTFMtMSQKKwkJCQkJIG5ldyBPYmplY3RbXSB7IGV4Y2VwdGlvbiB9KTsKKwkJfQorCQllbHNlIHsKKwkJCXJldHVybiBEaWFnbm9zdGljLk9LX0lOU1RBTkNFOworCQl9CisJfQorCisKKworCS8qKgorCSAqIFRoaXMgaXMgdGhlIG1ldGhvZCB1c2VkIGJ5IHRoZSBmcmFtZXdvcmsgdG8gaW5zdGFsbCB5b3VyIG93biBjb250cm9scy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJcHVibGljIHZvaWQgY3JlYXRlUGFnZXMoKSB7CisJCS8vIENyZWF0ZXMgdGhlIG1vZGVsIGZyb20gdGhlIGVkaXRvciBpbnB1dAorCQkvLworCQljcmVhdGVNb2RlbCgpOworCisJCS8vIE9ubHkgY3JlYXRlcyB0aGUgb3RoZXIgcGFnZXMgaWYgdGhlcmUgaXMgc29tZXRoaW5nIHRoYXQgY2FuIGJlIGVkaXRlZAorCQkvLworCQlpZiAoIWdldEVkaXRpbmdEb21haW4oKS5nZXRSZXNvdXJjZVNldCgpLmdldFJlc291cmNlcygpLmlzRW1wdHkoKSkgeworCQkJLy8gQ3JlYXRlIGEgcGFnZSBmb3IgdGhlIHNlbGVjdGlvbiB0cmVlIHZpZXcuCisJCQkvLworCQkJVHJlZSB0cmVlID0gbmV3IFRyZWUoZ2V0Q29udGFpbmVyKCksIFNXVC5NVUxUSSk7CisJCQlzZWxlY3Rpb25WaWV3ZXIgPSBuZXcgVHJlZVZpZXdlcih0cmVlKTsKKwkJCXNldEN1cnJlbnRWaWV3ZXIoc2VsZWN0aW9uVmlld2VyKTsKKworCQkJc2VsZWN0aW9uVmlld2VyLnNldENvbnRlbnRQcm92aWRlcihuZXcgQWRhcHRlckZhY3RvcnlDb250ZW50UHJvdmlkZXIoYWRhcHRlckZhY3RvcnkpKTsKKwkJCXNlbGVjdGlvblZpZXdlci5zZXRMYWJlbFByb3ZpZGVyKG5ldyBBZGFwdGVyRmFjdG9yeUxhYmVsUHJvdmlkZXIoYWRhcHRlckZhY3RvcnkpKTsKKwkJCS8vc2VsZWN0aW9uVmlld2VyLnNldElucHV0KGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKSk7CisJCQlzZWxlY3Rpb25WaWV3ZXIuc2V0SW5wdXQoZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpLmdldFJlc291cmNlcygpLmdldCgwKSk7CisJCQlzZWxlY3Rpb25WaWV3ZXIuc2V0U2VsZWN0aW9uKG5ldyBTdHJ1Y3R1cmVkU2VsZWN0aW9uKGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKS5nZXRSZXNvdXJjZXMoKS5nZXQoMCkpLCB0cnVlKTsKKworCQkJbmV3IEFkYXB0ZXJGYWN0b3J5VHJlZUVkaXRvcihzZWxlY3Rpb25WaWV3ZXIuZ2V0VHJlZSgpLCBhZGFwdGVyRmFjdG9yeSk7CisKKwkJCWNyZWF0ZUNvbnRleHRNZW51Rm9yKHNlbGVjdGlvblZpZXdlcik7CisJCQlpbnQgcGFnZUluZGV4ID0gYWRkUGFnZSh0cmVlKTsKKwkJCXNldFBhZ2VUZXh0KHBhZ2VJbmRleCwgZ2V0U3RyaW5nKCJfVUlfU2VsZWN0aW9uUGFnZV9sYWJlbCIpKTsgLy8kTk9OLU5MUy0xJAorCisJCQlnZXRTaXRlKCkuZ2V0U2hlbGwoKS5nZXREaXNwbGF5KCkuYXN5bmNFeGVjCisJCQkJKG5ldyBSdW5uYWJsZSgpIHsKKwkJCQkJIHB1YmxpYyB2b2lkIHJ1bigpIHsKKwkJCQkJCSBzZXRBY3RpdmVQYWdlKDApOworCQkJCQkgfQorCQkJCSB9KTsKKwkJfQorCisJCS8vIEVuc3VyZXMgdGhhdCB0aGlzIGVkaXRvciB3aWxsIG9ubHkgZGlzcGxheSB0aGUgcGFnZSdzIHRhYgorCQkvLyBhcmVhIGlmIHRoZXJlIGFyZSBtb3JlIHRoYW4gb25lIHBhZ2UKKwkJLy8KKwkJZ2V0Q29udGFpbmVyKCkuYWRkQ29udHJvbExpc3RlbmVyCisJCQkobmV3IENvbnRyb2xBZGFwdGVyKCkgeworCQkJCWJvb2xlYW4gZ3VhcmQgPSBmYWxzZTsKKwkJCQlAT3ZlcnJpZGUKKwkJCQlwdWJsaWMgdm9pZCBjb250cm9sUmVzaXplZChDb250cm9sRXZlbnQgZXZlbnQpIHsKKwkJCQkJaWYgKCFndWFyZCkgeworCQkJCQkJZ3VhcmQgPSB0cnVlOworCQkJCQkJaGlkZVRhYnMoKTsKKwkJCQkJCWd1YXJkID0gZmFsc2U7CisJCQkJCX0KKwkJCQl9CisJCQkgfSk7CisKKwkJZ2V0U2l0ZSgpLmdldFNoZWxsKCkuZ2V0RGlzcGxheSgpLmFzeW5jRXhlYworCQkJKG5ldyBSdW5uYWJsZSgpIHsKKwkJCQkgcHVibGljIHZvaWQgcnVuKCkgeworCQkJCQkgdXBkYXRlUHJvYmxlbUluZGljYXRpb24oKTsKKwkJCQkgfQorCQkJIH0pOworCX0gLy8gY3JlYXRlUGFnZXMKKwkKKwkvKioKKwkgKiBUaGlzIGlzIHRoZSBtZXRob2QgdXNlZCBieSB0aGUgZnJhbWV3b3JrIHRvIGluc3RhbGwgeW91ciBvd24gY29udHJvbHMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgY3JlYXRlUGFnZXNHZW4oKSB7CisJCS8vIENyZWF0ZXMgdGhlIG1vZGVsIGZyb20gdGhlIGVkaXRvciBpbnB1dAorCQkvLworCQljcmVhdGVNb2RlbCgpOworCisJCS8vIE9ubHkgY3JlYXRlcyB0aGUgb3RoZXIgcGFnZXMgaWYgdGhlcmUgaXMgc29tZXRoaW5nIHRoYXQgY2FuIGJlIGVkaXRlZAorCQkvLworCQlpZiAoIWdldEVkaXRpbmdEb21haW4oKS5nZXRSZXNvdXJjZVNldCgpLmdldFJlc291cmNlcygpLmlzRW1wdHkoKSkgeworCQkJLy8gQ3JlYXRlIGEgcGFnZSBmb3IgdGhlIHNlbGVjdGlvbiB0cmVlIHZpZXcuCisJCQkvLworCQkJVHJlZSB0cmVlID0gbmV3IFRyZWUoZ2V0Q29udGFpbmVyKCksIFNXVC5NVUxUSSk7CisJCQlzZWxlY3Rpb25WaWV3ZXIgPSBuZXcgVHJlZVZpZXdlcih0cmVlKTsKKwkJCXNldEN1cnJlbnRWaWV3ZXIoc2VsZWN0aW9uVmlld2VyKTsKKworCQkJc2VsZWN0aW9uVmlld2VyLnNldENvbnRlbnRQcm92aWRlcihuZXcgQWRhcHRlckZhY3RvcnlDb250ZW50UHJvdmlkZXIoYWRhcHRlckZhY3RvcnkpKTsKKwkJCXNlbGVjdGlvblZpZXdlci5zZXRMYWJlbFByb3ZpZGVyKG5ldyBBZGFwdGVyRmFjdG9yeUxhYmVsUHJvdmlkZXIoYWRhcHRlckZhY3RvcnkpKTsKKwkJCXNlbGVjdGlvblZpZXdlci5zZXRJbnB1dChlZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkpOworCQkJc2VsZWN0aW9uVmlld2VyLnNldFNlbGVjdGlvbihuZXcgU3RydWN0dXJlZFNlbGVjdGlvbihlZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkuZ2V0UmVzb3VyY2VzKCkuZ2V0KDApKSwgdHJ1ZSk7CisKKwkJCW5ldyBBZGFwdGVyRmFjdG9yeVRyZWVFZGl0b3Ioc2VsZWN0aW9uVmlld2VyLmdldFRyZWUoKSwgYWRhcHRlckZhY3RvcnkpOworCisJCQljcmVhdGVDb250ZXh0TWVudUZvcihzZWxlY3Rpb25WaWV3ZXIpOworCQkJaW50IHBhZ2VJbmRleCA9IGFkZFBhZ2UodHJlZSk7CisJCQlzZXRQYWdlVGV4dChwYWdlSW5kZXgsIGdldFN0cmluZygiX1VJX1NlbGVjdGlvblBhZ2VfbGFiZWwiKSk7IC8vJE5PTi1OTFMtMSQKKworCQkJZ2V0U2l0ZSgpLmdldFNoZWxsKCkuZ2V0RGlzcGxheSgpLmFzeW5jRXhlYworCQkJCShuZXcgUnVubmFibGUoKSB7CisJCQkJCSBwdWJsaWMgdm9pZCBydW4oKSB7CisJCQkJCQkgc2V0QWN0aXZlUGFnZSgwKTsKKwkJCQkJIH0KKwkJCQkgfSk7CisJCX0KKworCQkvLyBFbnN1cmVzIHRoYXQgdGhpcyBlZGl0b3Igd2lsbCBvbmx5IGRpc3BsYXkgdGhlIHBhZ2UncyB0YWIKKwkJLy8gYXJlYSBpZiB0aGVyZSBhcmUgbW9yZSB0aGFuIG9uZSBwYWdlCisJCS8vCisJCWdldENvbnRhaW5lcigpLmFkZENvbnRyb2xMaXN0ZW5lcgorCQkJKG5ldyBDb250cm9sQWRhcHRlcigpIHsKKwkJCQlib29sZWFuIGd1YXJkID0gZmFsc2U7CisJCQkJQE92ZXJyaWRlCisJCQkJcHVibGljIHZvaWQgY29udHJvbFJlc2l6ZWQoQ29udHJvbEV2ZW50IGV2ZW50KSB7CisJCQkJCWlmICghZ3VhcmQpIHsKKwkJCQkJCWd1YXJkID0gdHJ1ZTsKKwkJCQkJCWhpZGVUYWJzKCk7CisJCQkJCQlndWFyZCA9IGZhbHNlOworCQkJCQl9CisJCQkJfQorCQkJIH0pOworCisJCWdldFNpdGUoKS5nZXRTaGVsbCgpLmdldERpc3BsYXkoKS5hc3luY0V4ZWMKKwkJCShuZXcgUnVubmFibGUoKSB7CisJCQkJIHB1YmxpYyB2b2lkIHJ1bigpIHsKKwkJCQkJIHVwZGF0ZVByb2JsZW1JbmRpY2F0aW9uKCk7CisJCQkJIH0KKwkJCSB9KTsKKwl9CisJCisJLyoqCisJICogSWYgdGhlcmUgaXMganVzdCBvbmUgcGFnZSBpbiB0aGUgbXVsdGktcGFnZSBlZGl0b3IgcGFydCwKKwkgKiB0aGlzIGhpZGVzIHRoZSBzaW5nbGUgdGFiIGF0IHRoZSBib3R0b20uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgaGlkZVRhYnMoKSB7CisJCWlmIChnZXRQYWdlQ291bnQoKSA8PSAxKSB7CisJCQlzZXRQYWdlVGV4dCgwLCAiIik7IC8vJE5PTi1OTFMtMSQKKwkJCWlmIChnZXRDb250YWluZXIoKSBpbnN0YW5jZW9mIENUYWJGb2xkZXIpIHsKKwkJCQkoKENUYWJGb2xkZXIpZ2V0Q29udGFpbmVyKCkpLnNldFRhYkhlaWdodCgxKTsKKwkJCQlQb2ludCBwb2ludCA9IGdldENvbnRhaW5lcigpLmdldFNpemUoKTsKKwkJCQlnZXRDb250YWluZXIoKS5zZXRTaXplKHBvaW50LngsIHBvaW50LnkgKyA2KTsKKwkJCX0KKwkJfQorCX0KKworCS8qKgorCSAqIElmIHRoZXJlIGlzIG1vcmUgdGhhbiBvbmUgcGFnZSBpbiB0aGUgbXVsdGktcGFnZSBlZGl0b3IgcGFydCwKKwkgKiB0aGlzIHNob3dzIHRoZSB0YWJzIGF0IHRoZSBib3R0b20uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgc2hvd1RhYnMoKSB7CisJCWlmIChnZXRQYWdlQ291bnQoKSA+IDEpIHsKKwkJCXNldFBhZ2VUZXh0KDAsIGdldFN0cmluZygiX1VJX1NlbGVjdGlvblBhZ2VfbGFiZWwiKSk7IC8vJE5PTi1OTFMtMSQKKwkJCWlmIChnZXRDb250YWluZXIoKSBpbnN0YW5jZW9mIENUYWJGb2xkZXIpIHsKKwkJCQkoKENUYWJGb2xkZXIpZ2V0Q29udGFpbmVyKCkpLnNldFRhYkhlaWdodChTV1QuREVGQVVMVCk7CisJCQkJUG9pbnQgcG9pbnQgPSBnZXRDb250YWluZXIoKS5nZXRTaXplKCk7CisJCQkJZ2V0Q29udGFpbmVyKCkuc2V0U2l6ZShwb2ludC54LCBwb2ludC55IC0gNik7CisJCQl9CisJCX0KKwl9CisKKwkvKioKKwkgKiBUaGlzIGlzIHVzZWQgdG8gdHJhY2sgdGhlIGFjdGl2ZSB2aWV3ZXIuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgcGFnZUNoYW5nZShpbnQgcGFnZUluZGV4KSB7CisJCXN1cGVyLnBhZ2VDaGFuZ2UocGFnZUluZGV4KTsKKworCQlpZiAoY29udGVudE91dGxpbmVQYWdlICE9IG51bGwpIHsKKwkJCWhhbmRsZUNvbnRlbnRPdXRsaW5lU2VsZWN0aW9uKGNvbnRlbnRPdXRsaW5lUGFnZS5nZXRTZWxlY3Rpb24oKSk7CisJCX0KKwl9CisKKwkvKioKKwkgKiBUaGlzIGlzIGhvdyB0aGUgZnJhbWV3b3JrIGRldGVybWluZXMgd2hpY2ggaW50ZXJmYWNlcyB3ZSBpbXBsZW1lbnQuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQFN1cHByZXNzV2FybmluZ3MoInVuY2hlY2tlZCIpCisJCUBPdmVycmlkZQorCXB1YmxpYyBPYmplY3QgZ2V0QWRhcHRlcihDbGFzcyBrZXkpIHsKKwkJaWYgKGtleS5lcXVhbHMoSUNvbnRlbnRPdXRsaW5lUGFnZS5jbGFzcykpIHsKKwkJCXJldHVybiBzaG93T3V0bGluZVZpZXcoKSA/IGdldENvbnRlbnRPdXRsaW5lUGFnZSgpIDogbnVsbDsKKwkJfQorCQllbHNlIGlmIChrZXkuZXF1YWxzKElQcm9wZXJ0eVNoZWV0UGFnZS5jbGFzcykpIHsKKwkJCXJldHVybiBnZXRQcm9wZXJ0eVNoZWV0UGFnZSgpOworCQl9CisJCWVsc2UgaWYgKGtleS5lcXVhbHMoSUdvdG9NYXJrZXIuY2xhc3MpKSB7CisJCQlyZXR1cm4gdGhpczsKKwkJfQorCQllbHNlIHsKKwkJCXJldHVybiBzdXBlci5nZXRBZGFwdGVyKGtleSk7CisJCX0KKwl9CisKKwkvKioKKwkgKiBUaGlzIGFjY2Vzc2VzIGEgY2FjaGVkIHZlcnNpb24gb2YgdGhlIGNvbnRlbnQgb3V0bGluZXIuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIElDb250ZW50T3V0bGluZVBhZ2UgZ2V0Q29udGVudE91dGxpbmVQYWdlKCkgeworCQlpZiAoY29udGVudE91dGxpbmVQYWdlID09IG51bGwpIHsKKwkJCS8vIFRoZSBjb250ZW50IG91dGxpbmUgaXMganVzdCBhIHRyZWUuCisJCQkvLworCQkJY2xhc3MgTXlDb250ZW50T3V0bGluZVBhZ2UgZXh0ZW5kcyBDb250ZW50T3V0bGluZVBhZ2UgeworCQkJCUBPdmVycmlkZQorCQkJCXB1YmxpYyB2b2lkIGNyZWF0ZUNvbnRyb2woQ29tcG9zaXRlIHBhcmVudCkgeworCQkJCQlzdXBlci5jcmVhdGVDb250cm9sKHBhcmVudCk7CisJCQkJCWNvbnRlbnRPdXRsaW5lVmlld2VyID0gZ2V0VHJlZVZpZXdlcigpOworCQkJCQljb250ZW50T3V0bGluZVZpZXdlci5hZGRTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIodGhpcyk7CisKKwkJCQkJLy8gU2V0IHVwIHRoZSB0cmVlIHZpZXdlci4KKwkJCQkJLy8KKwkJCQkJY29udGVudE91dGxpbmVWaWV3ZXIuc2V0Q29udGVudFByb3ZpZGVyKG5ldyBBZGFwdGVyRmFjdG9yeUNvbnRlbnRQcm92aWRlcihhZGFwdGVyRmFjdG9yeSkpOworCQkJCQljb250ZW50T3V0bGluZVZpZXdlci5zZXRMYWJlbFByb3ZpZGVyKG5ldyBBZGFwdGVyRmFjdG9yeUxhYmVsUHJvdmlkZXIoYWRhcHRlckZhY3RvcnkpKTsKKwkJCQkJY29udGVudE91dGxpbmVWaWV3ZXIuc2V0SW5wdXQoZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpKTsKKworCQkJCQkvLyBNYWtlIHN1cmUgb3VyIHBvcHVwcyB3b3JrLgorCQkJCQkvLworCQkJCQljcmVhdGVDb250ZXh0TWVudUZvcihjb250ZW50T3V0bGluZVZpZXdlcik7CisKKwkJCQkJaWYgKCFlZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkuZ2V0UmVzb3VyY2VzKCkuaXNFbXB0eSgpKSB7CisJCQkJCSAgLy8gU2VsZWN0IHRoZSByb290IG9iamVjdCBpbiB0aGUgdmlldy4KKwkJCQkJICAvLworCQkJCQkgIGNvbnRlbnRPdXRsaW5lVmlld2VyLnNldFNlbGVjdGlvbihuZXcgU3RydWN0dXJlZFNlbGVjdGlvbihlZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkuZ2V0UmVzb3VyY2VzKCkuZ2V0KDApKSwgdHJ1ZSk7CisJCQkJCX0KKwkJCQl9CisKKwkJCQlAT3ZlcnJpZGUKKwkJCQlwdWJsaWMgdm9pZCBtYWtlQ29udHJpYnV0aW9ucyhJTWVudU1hbmFnZXIgbWVudU1hbmFnZXIsIElUb29sQmFyTWFuYWdlciB0b29sQmFyTWFuYWdlciwgSVN0YXR1c0xpbmVNYW5hZ2VyIHN0YXR1c0xpbmVNYW5hZ2VyKSB7CisJCQkJCXN1cGVyLm1ha2VDb250cmlidXRpb25zKG1lbnVNYW5hZ2VyLCB0b29sQmFyTWFuYWdlciwgc3RhdHVzTGluZU1hbmFnZXIpOworCQkJCQljb250ZW50T3V0bGluZVN0YXR1c0xpbmVNYW5hZ2VyID0gc3RhdHVzTGluZU1hbmFnZXI7CisJCQkJfQorCisJCQkJQE92ZXJyaWRlCisJCQkJcHVibGljIHZvaWQgc2V0QWN0aW9uQmFycyhJQWN0aW9uQmFycyBhY3Rpb25CYXJzKSB7CisJCQkJCXN1cGVyLnNldEFjdGlvbkJhcnMoYWN0aW9uQmFycyk7CisJCQkJCWdldEFjdGlvbkJhckNvbnRyaWJ1dG9yKCkuc2hhcmVHbG9iYWxBY3Rpb25zKHRoaXMsIGFjdGlvbkJhcnMpOworCQkJCX0KKwkJCX0KKworCQkJY29udGVudE91dGxpbmVQYWdlID0gbmV3IE15Q29udGVudE91dGxpbmVQYWdlKCk7CisKKwkJCS8vIExpc3RlbiB0byBzZWxlY3Rpb24gc28gdGhhdCB3ZSBjYW4gaGFuZGxlIGl0IGlzIGEgc3BlY2lhbCB3YXkuCisJCQkvLworCQkJY29udGVudE91dGxpbmVQYWdlLmFkZFNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcgorCQkJCShuZXcgSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcigpIHsKKwkJCQkJIC8vIFRoaXMgZW5zdXJlcyB0aGF0IHdlIGhhbmRsZSBzZWxlY3Rpb25zIGNvcnJlY3RseS4KKwkJCQkJIC8vCisJCQkJCSBwdWJsaWMgdm9pZCBzZWxlY3Rpb25DaGFuZ2VkKFNlbGVjdGlvbkNoYW5nZWRFdmVudCBldmVudCkgeworCQkJCQkJIGhhbmRsZUNvbnRlbnRPdXRsaW5lU2VsZWN0aW9uKGV2ZW50LmdldFNlbGVjdGlvbigpKTsKKwkJCQkJIH0KKwkJCQkgfSk7CisJCX0KKworCQlyZXR1cm4gY29udGVudE91dGxpbmVQYWdlOworCX0KKworCS8qKgorCSAqIFRoaXMgYWNjZXNzZXMgYSBjYWNoZWQgdmVyc2lvbiBvZiB0aGUgcHJvcGVydHkgc2hlZXQuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIElQcm9wZXJ0eVNoZWV0UGFnZSBnZXRQcm9wZXJ0eVNoZWV0UGFnZSgpIHsKKwkJaWYgKHByb3BlcnR5U2hlZXRQYWdlID09IG51bGwpIHsKKwkJCXByb3BlcnR5U2hlZXRQYWdlID0KKwkJCQluZXcgRXh0ZW5kZWRQcm9wZXJ0eVNoZWV0UGFnZShlZGl0aW5nRG9tYWluKSB7CisJCQkJCUBPdmVycmlkZQorCQkJCQlwdWJsaWMgdm9pZCBzZXRTZWxlY3Rpb25Ub1ZpZXdlcihMaXN0PD8+IHNlbGVjdGlvbikgeworCQkJCQkJR3JhcGhFZGl0b3IudGhpcy5zZXRTZWxlY3Rpb25Ub1ZpZXdlcihzZWxlY3Rpb24pOworCQkJCQkJR3JhcGhFZGl0b3IudGhpcy5zZXRGb2N1cygpOworCQkJCQl9CisKKwkJCQkJQE92ZXJyaWRlCisJCQkJCXB1YmxpYyB2b2lkIHNldEFjdGlvbkJhcnMoSUFjdGlvbkJhcnMgYWN0aW9uQmFycykgeworCQkJCQkJc3VwZXIuc2V0QWN0aW9uQmFycyhhY3Rpb25CYXJzKTsKKwkJCQkJCWdldEFjdGlvbkJhckNvbnRyaWJ1dG9yKCkuc2hhcmVHbG9iYWxBY3Rpb25zKHRoaXMsIGFjdGlvbkJhcnMpOworCQkJCQl9CisJCQkJfTsKKwkJCXByb3BlcnR5U2hlZXRQYWdlLnNldFByb3BlcnR5U291cmNlUHJvdmlkZXIobmV3IEFkYXB0ZXJGYWN0b3J5Q29udGVudFByb3ZpZGVyKGFkYXB0ZXJGYWN0b3J5KSk7CisJCX0KKworCQlyZXR1cm4gcHJvcGVydHlTaGVldFBhZ2U7CisJfQorCisJLyoqCisJICogVGhpcyBkZWFscyB3aXRoIGhvdyB3ZSB3YW50IHNlbGVjdGlvbiBpbiB0aGUgb3V0bGluZXIgdG8gYWZmZWN0IHRoZSBvdGhlciB2aWV3cy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBoYW5kbGVDb250ZW50T3V0bGluZVNlbGVjdGlvbihJU2VsZWN0aW9uIHNlbGVjdGlvbikgeworCQlpZiAoc2VsZWN0aW9uVmlld2VyICE9IG51bGwgJiYgIXNlbGVjdGlvbi5pc0VtcHR5KCkgJiYgc2VsZWN0aW9uIGluc3RhbmNlb2YgSVN0cnVjdHVyZWRTZWxlY3Rpb24pIHsKKwkJCUl0ZXJhdG9yPD8+IHNlbGVjdGVkRWxlbWVudHMgPSAoKElTdHJ1Y3R1cmVkU2VsZWN0aW9uKXNlbGVjdGlvbikuaXRlcmF0b3IoKTsKKwkJCWlmIChzZWxlY3RlZEVsZW1lbnRzLmhhc05leHQoKSkgeworCQkJCS8vIEdldCB0aGUgZmlyc3Qgc2VsZWN0ZWQgZWxlbWVudC4KKwkJCQkvLworCQkJCU9iamVjdCBzZWxlY3RlZEVsZW1lbnQgPSBzZWxlY3RlZEVsZW1lbnRzLm5leHQoKTsKKworCQkJCUFycmF5TGlzdDxPYmplY3Q+IHNlbGVjdGlvbkxpc3QgPSBuZXcgQXJyYXlMaXN0PE9iamVjdD4oKTsKKwkJCQlzZWxlY3Rpb25MaXN0LmFkZChzZWxlY3RlZEVsZW1lbnQpOworCQkJCXdoaWxlIChzZWxlY3RlZEVsZW1lbnRzLmhhc05leHQoKSkgeworCQkJCQlzZWxlY3Rpb25MaXN0LmFkZChzZWxlY3RlZEVsZW1lbnRzLm5leHQoKSk7CisJCQkJfQorCisJCQkJLy8gU2V0IHRoZSBzZWxlY3Rpb24gdG8gdGhlIHdpZGdldC4KKwkJCQkvLworCQkJCXNlbGVjdGlvblZpZXdlci5zZXRTZWxlY3Rpb24obmV3IFN0cnVjdHVyZWRTZWxlY3Rpb24oc2VsZWN0aW9uTGlzdCkpOworCQkJfQorCQl9CisJfQorCisJLyoqCisJICogVGhpcyBpcyBmb3IgaW1wbGVtZW50aW5nIHtAbGluayBJRWRpdG9yUGFydH0gYW5kIHNpbXBseSB0ZXN0cyB0aGUgY29tbWFuZCBzdGFjay4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgYm9vbGVhbiBpc0RpcnR5KCkgeworCQlyZXR1cm4gKChCYXNpY0NvbW1hbmRTdGFjayllZGl0aW5nRG9tYWluLmdldENvbW1hbmRTdGFjaygpKS5pc1NhdmVOZWVkZWQoKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGlzIGZvciBpbXBsZW1lbnRpbmcge0BsaW5rIElFZGl0b3JQYXJ0fSBhbmQgc2ltcGx5IHNhdmVzIHRoZSBtb2RlbCBmaWxlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGRvU2F2ZShJUHJvZ3Jlc3NNb25pdG9yIHByb2dyZXNzTW9uaXRvcikgeworCQkvLyBTYXZlIG9ubHkgcmVzb3VyY2VzIHRoYXQgaGF2ZSBhY3R1YWxseSBjaGFuZ2VkLgorCQkvLworCQlmaW5hbCBNYXA8T2JqZWN0LCBPYmplY3Q+IHNhdmVPcHRpb25zID0gbmV3IEhhc2hNYXA8T2JqZWN0LCBPYmplY3Q+KCk7CisJCXNhdmVPcHRpb25zLnB1dChSZXNvdXJjZS5PUFRJT05fU0FWRV9PTkxZX0lGX0NIQU5HRUQsIFJlc291cmNlLk9QVElPTl9TQVZFX09OTFlfSUZfQ0hBTkdFRF9NRU1PUllfQlVGRkVSKTsKKworCQkvLyBEbyB0aGUgd29yayB3aXRoaW4gYW4gb3BlcmF0aW9uIGJlY2F1c2UgdGhpcyBpcyBhIGxvbmcgcnVubmluZyBhY3Rpdml0eSB0aGF0IG1vZGlmaWVzIHRoZSB3b3JrYmVuY2guCisJCS8vCisJCVdvcmtzcGFjZU1vZGlmeU9wZXJhdGlvbiBvcGVyYXRpb24gPQorCQkJbmV3IFdvcmtzcGFjZU1vZGlmeU9wZXJhdGlvbigpIHsKKwkJCQkvLyBUaGlzIGlzIHRoZSBtZXRob2QgdGhhdCBnZXRzIGludm9rZWQgd2hlbiB0aGUgb3BlcmF0aW9uIHJ1bnMuCisJCQkJLy8KKwkJCQlAT3ZlcnJpZGUKKwkJCQlwdWJsaWMgdm9pZCBleGVjdXRlKElQcm9ncmVzc01vbml0b3IgbW9uaXRvcikgeworCQkJCQkvLyBTYXZlIHRoZSByZXNvdXJjZXMgdG8gdGhlIGZpbGUgc3lzdGVtLgorCQkJCQkvLworCQkJCQlib29sZWFuIGZpcnN0ID0gdHJ1ZTsKKwkJCQkJZm9yIChSZXNvdXJjZSByZXNvdXJjZSA6IGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKS5nZXRSZXNvdXJjZXMoKSkgeworCQkJCQkJaWYgKChmaXJzdCB8fCAhcmVzb3VyY2UuZ2V0Q29udGVudHMoKS5pc0VtcHR5KCkgfHwgaXNQZXJzaXN0ZWQocmVzb3VyY2UpKSAmJiAhZWRpdGluZ0RvbWFpbi5pc1JlYWRPbmx5KHJlc291cmNlKSkgeworCQkJCQkJCXRyeSB7CisJCQkJCQkJCWxvbmcgdGltZVN0YW1wID0gcmVzb3VyY2UuZ2V0VGltZVN0YW1wKCk7CisJCQkJCQkJCXJlc291cmNlLnNhdmUoc2F2ZU9wdGlvbnMpOworCQkJCQkJCQlpZiAocmVzb3VyY2UuZ2V0VGltZVN0YW1wKCkgIT0gdGltZVN0YW1wKSB7CisJCQkJCQkJCQlzYXZlZFJlc291cmNlcy5hZGQocmVzb3VyY2UpOworCQkJCQkJCQl9CisJCQkJCQkJfQorCQkJCQkJCWNhdGNoIChFeGNlcHRpb24gZXhjZXB0aW9uKSB7CisJCQkJCQkJCXJlc291cmNlVG9EaWFnbm9zdGljTWFwLnB1dChyZXNvdXJjZSwgYW5hbHl6ZVJlc291cmNlUHJvYmxlbXMocmVzb3VyY2UsIGV4Y2VwdGlvbikpOworCQkJCQkJCX0KKwkJCQkJCQlmaXJzdCA9IGZhbHNlOworCQkJCQkJfQorCQkJCQl9CisJCQkJfQorCQkJfTsKKworCQl1cGRhdGVQcm9ibGVtSW5kaWNhdGlvbiA9IGZhbHNlOworCQl0cnkgeworCQkJLy8gVGhpcyBydW5zIHRoZSBvcHRpb25zLCBhbmQgc2hvd3MgcHJvZ3Jlc3MuCisJCQkvLworCQkJbmV3IFByb2dyZXNzTW9uaXRvckRpYWxvZyhnZXRTaXRlKCkuZ2V0U2hlbGwoKSkucnVuKHRydWUsIGZhbHNlLCBvcGVyYXRpb24pOworCisJCQkvLyBSZWZyZXNoIHRoZSBuZWNlc3Nhcnkgc3RhdGUuCisJCQkvLworCQkJKChCYXNpY0NvbW1hbmRTdGFjayllZGl0aW5nRG9tYWluLmdldENvbW1hbmRTdGFjaygpKS5zYXZlSXNEb25lKCk7CisJCQlmaXJlUHJvcGVydHlDaGFuZ2UoSUVkaXRvclBhcnQuUFJPUF9ESVJUWSk7CisJCX0KKwkJY2F0Y2ggKEV4Y2VwdGlvbiBleGNlcHRpb24pIHsKKwkJCS8vIFNvbWV0aGluZyB3ZW50IHdyb25nIHRoYXQgc2hvdWxkbid0LgorCQkJLy8KKwkJCUNvcmVFZGl0b3JQbHVnaW4uSU5TVEFOQ0UubG9nKGV4Y2VwdGlvbik7CisJCX0KKwkJdXBkYXRlUHJvYmxlbUluZGljYXRpb24gPSB0cnVlOworCQl1cGRhdGVQcm9ibGVtSW5kaWNhdGlvbigpOworCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyB3aGV0aGVyIHNvbWV0aGluZyBoYXMgYmVlbiBwZXJzaXN0ZWQgdG8gdGhlIFVSSSBvZiB0aGUgc3BlY2lmaWVkIHJlc291cmNlLgorCSAqIFRoZSBpbXBsZW1lbnRhdGlvbiB1c2VzIHRoZSBVUkkgY29udmVydGVyIGZyb20gdGhlIGVkaXRvcidzIHJlc291cmNlIHNldCB0byB0cnkgdG8gb3BlbiBhbiBpbnB1dCBzdHJlYW0uIAorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBib29sZWFuIGlzUGVyc2lzdGVkKFJlc291cmNlIHJlc291cmNlKSB7CisJCWJvb2xlYW4gcmVzdWx0ID0gZmFsc2U7CisJCXRyeSB7CisJCQlJbnB1dFN0cmVhbSBzdHJlYW0gPSBlZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkuZ2V0VVJJQ29udmVydGVyKCkuY3JlYXRlSW5wdXRTdHJlYW0ocmVzb3VyY2UuZ2V0VVJJKCkpOworCQkJaWYgKHN0cmVhbSAhPSBudWxsKSB7CisJCQkJcmVzdWx0ID0gdHJ1ZTsKKwkJCQlzdHJlYW0uY2xvc2UoKTsKKwkJCX0KKwkJfQorCQljYXRjaCAoSU9FeGNlcHRpb24gZSkgeworCQkJLy8gSWdub3JlCisJCX0KKwkJcmV0dXJuIHJlc3VsdDsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFsd2F5cyByZXR1cm5zIHRydWUgYmVjYXVzZSBpdCBpcyBub3QgY3VycmVudGx5IHN1cHBvcnRlZC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgYm9vbGVhbiBpc1NhdmVBc0FsbG93ZWQoKSB7CisJCXJldHVybiB0cnVlOworCX0KKworCS8qKgorCSAqIFRoaXMgYWxzbyBjaGFuZ2VzIHRoZSBlZGl0b3IncyBpbnB1dC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBkb1NhdmVBcygpIHsKKwkJU2F2ZUFzRGlhbG9nIHNhdmVBc0RpYWxvZyA9IG5ldyBTYXZlQXNEaWFsb2coZ2V0U2l0ZSgpLmdldFNoZWxsKCkpOworCQlzYXZlQXNEaWFsb2cub3BlbigpOworCQlJUGF0aCBwYXRoID0gc2F2ZUFzRGlhbG9nLmdldFJlc3VsdCgpOworCQlpZiAocGF0aCAhPSBudWxsKSB7CisJCQlJRmlsZSBmaWxlID0gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmdldFJvb3QoKS5nZXRGaWxlKHBhdGgpOworCQkJaWYgKGZpbGUgIT0gbnVsbCkgeworCQkJCWRvU2F2ZUFzKFVSSS5jcmVhdGVQbGF0Zm9ybVJlc291cmNlVVJJKGZpbGUuZ2V0RnVsbFBhdGgoKS50b1N0cmluZygpLCB0cnVlKSwgbmV3IEZpbGVFZGl0b3JJbnB1dChmaWxlKSk7CisJCQl9CisJCX0KKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBkb1NhdmVBcyhVUkkgdXJpLCBJRWRpdG9ySW5wdXQgZWRpdG9ySW5wdXQpIHsKKwkJKGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKS5nZXRSZXNvdXJjZXMoKS5nZXQoMCkpLnNldFVSSSh1cmkpOworCQlzZXRJbnB1dFdpdGhOb3RpZnkoZWRpdG9ySW5wdXQpOworCQlzZXRQYXJ0TmFtZShlZGl0b3JJbnB1dC5nZXROYW1lKCkpOworCQlJUHJvZ3Jlc3NNb25pdG9yIHByb2dyZXNzTW9uaXRvciA9CisJCQlnZXRBY3Rpb25CYXJzKCkuZ2V0U3RhdHVzTGluZU1hbmFnZXIoKSAhPSBudWxsID8KKwkJCQlnZXRBY3Rpb25CYXJzKCkuZ2V0U3RhdHVzTGluZU1hbmFnZXIoKS5nZXRQcm9ncmVzc01vbml0b3IoKSA6CisJCQkJbmV3IE51bGxQcm9ncmVzc01vbml0b3IoKTsKKwkJZG9TYXZlKHByb2dyZXNzTW9uaXRvcik7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgZ290b01hcmtlcihJTWFya2VyIG1hcmtlcikgeworCQl0cnkgeworCQkJaWYgKG1hcmtlci5nZXRUeXBlKCkuZXF1YWxzKEVWYWxpZGF0b3IuTUFSS0VSKSkgeworCQkJCVN0cmluZyB1cmlBdHRyaWJ1dGUgPSBtYXJrZXIuZ2V0QXR0cmlidXRlKEVWYWxpZGF0b3IuVVJJX0FUVFJJQlVURSwgbnVsbCk7CisJCQkJaWYgKHVyaUF0dHJpYnV0ZSAhPSBudWxsKSB7CisJCQkJCVVSSSB1cmkgPSBVUkkuY3JlYXRlVVJJKHVyaUF0dHJpYnV0ZSk7CisJCQkJCUVPYmplY3QgZU9iamVjdCA9IGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKS5nZXRFT2JqZWN0KHVyaSwgdHJ1ZSk7CisJCQkJCWlmIChlT2JqZWN0ICE9IG51bGwpIHsKKwkJCQkJICBzZXRTZWxlY3Rpb25Ub1ZpZXdlcihDb2xsZWN0aW9ucy5zaW5nbGV0b24oZWRpdGluZ0RvbWFpbi5nZXRXcmFwcGVyKGVPYmplY3QpKSk7CisJCQkJCX0KKwkJCQl9CisJCQl9CisJCX0KKwkJY2F0Y2ggKENvcmVFeGNlcHRpb24gZXhjZXB0aW9uKSB7CisJCQlDb3JlRWRpdG9yUGx1Z2luLklOU1RBTkNFLmxvZyhleGNlcHRpb24pOworCQl9CisJfQorCisJLyoqCisJICogVGhpcyBpcyBjYWxsZWQgZHVyaW5nIHN0YXJ0dXAuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgaW5pdChJRWRpdG9yU2l0ZSBzaXRlLCBJRWRpdG9ySW5wdXQgZWRpdG9ySW5wdXQpIHsKKwkJc2V0U2l0ZShzaXRlKTsKKwkJc2V0SW5wdXRXaXRoTm90aWZ5KGVkaXRvcklucHV0KTsKKwkJc2V0UGFydE5hbWUoZWRpdG9ySW5wdXQuZ2V0TmFtZSgpKTsKKwkJc2l0ZS5zZXRTZWxlY3Rpb25Qcm92aWRlcih0aGlzKTsKKwkJc2l0ZS5nZXRQYWdlKCkuYWRkUGFydExpc3RlbmVyKHBhcnRMaXN0ZW5lcik7CisJCVJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5hZGRSZXNvdXJjZUNoYW5nZUxpc3RlbmVyKHJlc291cmNlQ2hhbmdlTGlzdGVuZXIsIElSZXNvdXJjZUNoYW5nZUV2ZW50LlBPU1RfQ0hBTkdFKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBzZXRGb2N1cygpIHsKKwkJZ2V0Q29udHJvbChnZXRBY3RpdmVQYWdlKCkpLnNldEZvY3VzKCk7CisJfQorCisJLyoqCisJICogVGhpcyBpbXBsZW1lbnRzIHtAbGluayBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb25Qcm92aWRlcn0uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgYWRkU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyKElTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIgbGlzdGVuZXIpIHsKKwkJc2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVycy5hZGQobGlzdGVuZXIpOworCX0KKworCS8qKgorCSAqIFRoaXMgaW1wbGVtZW50cyB7QGxpbmsgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uUHJvdmlkZXJ9LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIHJlbW92ZVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcihJU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyIGxpc3RlbmVyKSB7CisJCXNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcnMucmVtb3ZlKGxpc3RlbmVyKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGltcGxlbWVudHMge0BsaW5rIG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvblByb3ZpZGVyfSB0byByZXR1cm4gdGhpcyBlZGl0b3IncyBvdmVyYWxsIHNlbGVjdGlvbi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgSVNlbGVjdGlvbiBnZXRTZWxlY3Rpb24oKSB7CisJCXJldHVybiBlZGl0b3JTZWxlY3Rpb247CisJfQorCisJLyoqCisJICogVGhpcyBpbXBsZW1lbnRzIHtAbGluayBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb25Qcm92aWRlcn0gdG8gc2V0IHRoaXMgZWRpdG9yJ3Mgb3ZlcmFsbCBzZWxlY3Rpb24uCisJICogQ2FsbGluZyB0aGlzIHJlc3VsdCB3aWxsIG5vdGlmeSB0aGUgbGlzdGVuZXJzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIHNldFNlbGVjdGlvbihJU2VsZWN0aW9uIHNlbGVjdGlvbikgeworCQllZGl0b3JTZWxlY3Rpb24gPSBzZWxlY3Rpb247CisKKwkJZm9yIChJU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyIGxpc3RlbmVyIDogc2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVycykgeworCQkJbGlzdGVuZXIuc2VsZWN0aW9uQ2hhbmdlZChuZXcgU2VsZWN0aW9uQ2hhbmdlZEV2ZW50KHRoaXMsIHNlbGVjdGlvbikpOworCQl9CisJCXNldFN0YXR1c0xpbmVNYW5hZ2VyKHNlbGVjdGlvbik7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgc2V0U3RhdHVzTGluZU1hbmFnZXIoSVNlbGVjdGlvbiBzZWxlY3Rpb24pIHsKKwkJSVN0YXR1c0xpbmVNYW5hZ2VyIHN0YXR1c0xpbmVNYW5hZ2VyID0gY3VycmVudFZpZXdlciAhPSBudWxsICYmIGN1cnJlbnRWaWV3ZXIgPT0gY29udGVudE91dGxpbmVWaWV3ZXIgPworCQkJY29udGVudE91dGxpbmVTdGF0dXNMaW5lTWFuYWdlciA6IGdldEFjdGlvbkJhcnMoKS5nZXRTdGF0dXNMaW5lTWFuYWdlcigpOworCisJCWlmIChzdGF0dXNMaW5lTWFuYWdlciAhPSBudWxsKSB7CisJCQlpZiAoc2VsZWN0aW9uIGluc3RhbmNlb2YgSVN0cnVjdHVyZWRTZWxlY3Rpb24pIHsKKwkJCQlDb2xsZWN0aW9uPD8+IGNvbGxlY3Rpb24gPSAoKElTdHJ1Y3R1cmVkU2VsZWN0aW9uKXNlbGVjdGlvbikudG9MaXN0KCk7CisJCQkJc3dpdGNoIChjb2xsZWN0aW9uLnNpemUoKSkgeworCQkJCQljYXNlIDA6IHsKKwkJCQkJCXN0YXR1c0xpbmVNYW5hZ2VyLnNldE1lc3NhZ2UoZ2V0U3RyaW5nKCJfVUlfTm9PYmplY3RTZWxlY3RlZCIpKTsgLy8kTk9OLU5MUy0xJAorCQkJCQkJYnJlYWs7CisJCQkJCX0KKwkJCQkJY2FzZSAxOiB7CisJCQkJCQlTdHJpbmcgdGV4dCA9IG5ldyBBZGFwdGVyRmFjdG9yeUl0ZW1EZWxlZ2F0b3IoYWRhcHRlckZhY3RvcnkpLmdldFRleHQoY29sbGVjdGlvbi5pdGVyYXRvcigpLm5leHQoKSk7CisJCQkJCQlzdGF0dXNMaW5lTWFuYWdlci5zZXRNZXNzYWdlKGdldFN0cmluZygiX1VJX1NpbmdsZU9iamVjdFNlbGVjdGVkIiwgdGV4dCkpOyAvLyROT04tTkxTLTEkCisJCQkJCQlicmVhazsKKwkJCQkJfQorCQkJCQlkZWZhdWx0OiB7CisJCQkJCQlzdGF0dXNMaW5lTWFuYWdlci5zZXRNZXNzYWdlKGdldFN0cmluZygiX1VJX011bHRpT2JqZWN0U2VsZWN0ZWQiLCBJbnRlZ2VyLnRvU3RyaW5nKGNvbGxlY3Rpb24uc2l6ZSgpKSkpOyAvLyROT04tTkxTLTEkCisJCQkJCQlicmVhazsKKwkJCQkJfQorCQkJCX0KKwkJCX0KKwkJCWVsc2UgeworCQkJCXN0YXR1c0xpbmVNYW5hZ2VyLnNldE1lc3NhZ2UoIiIpOyAvLyROT04tTkxTLTEkCisJCQl9CisJCX0KKwl9CisKKwkvKioKKwkgKiBUaGlzIGxvb2tzIHVwIGEgc3RyaW5nIGluIHRoZSBwbHVnaW4ncyBwbHVnaW4ucHJvcGVydGllcyBmaWxlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByaXZhdGUgc3RhdGljIFN0cmluZyBnZXRTdHJpbmcoU3RyaW5nIGtleSkgeworCQlyZXR1cm4gQ29yZUVkaXRvclBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoa2V5KTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGxvb2tzIHVwIGEgc3RyaW5nIGluIHBsdWdpbi5wcm9wZXJ0aWVzLCBtYWtpbmcgYSBzdWJzdGl0dXRpb24uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIGdldFN0cmluZyhTdHJpbmcga2V5LCBPYmplY3QgczEpIHsKKwkJcmV0dXJuIENvcmVFZGl0b3JQbHVnaW4uSU5TVEFOQ0UuZ2V0U3RyaW5nKGtleSwgbmV3IE9iamVjdCBbXSB7IHMxIH0pOworCX0KKworCS8qKgorCSAqIFRoaXMgaW1wbGVtZW50cyB7QGxpbmsgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklNZW51TGlzdGVuZXJ9IHRvIGhlbHAgZmlsbCB0aGUgY29udGV4dCBtZW51cyB3aXRoIGNvbnRyaWJ1dGlvbnMgZnJvbSB0aGUgRWRpdCBtZW51LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIG1lbnVBYm91dFRvU2hvdyhJTWVudU1hbmFnZXIgbWVudU1hbmFnZXIpIHsKKwkJKChJTWVudUxpc3RlbmVyKWdldEVkaXRvclNpdGUoKS5nZXRBY3Rpb25CYXJDb250cmlidXRvcigpKS5tZW51QWJvdXRUb1Nob3cobWVudU1hbmFnZXIpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFZGl0aW5nRG9tYWluQWN0aW9uQmFyQ29udHJpYnV0b3IgZ2V0QWN0aW9uQmFyQ29udHJpYnV0b3IoKSB7CisJCXJldHVybiAoRWRpdGluZ0RvbWFpbkFjdGlvbkJhckNvbnRyaWJ1dG9yKWdldEVkaXRvclNpdGUoKS5nZXRBY3Rpb25CYXJDb250cmlidXRvcigpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBJQWN0aW9uQmFycyBnZXRBY3Rpb25CYXJzKCkgeworCQlyZXR1cm4gZ2V0QWN0aW9uQmFyQ29udHJpYnV0b3IoKS5nZXRBY3Rpb25CYXJzKCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEFkYXB0ZXJGYWN0b3J5IGdldEFkYXB0ZXJGYWN0b3J5KCkgeworCQlyZXR1cm4gYWRhcHRlckZhY3Rvcnk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgZGlzcG9zZSgpIHsKKwkJdXBkYXRlUHJvYmxlbUluZGljYXRpb24gPSBmYWxzZTsKKworCQlSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkucmVtb3ZlUmVzb3VyY2VDaGFuZ2VMaXN0ZW5lcihyZXNvdXJjZUNoYW5nZUxpc3RlbmVyKTsKKworCQlnZXRTaXRlKCkuZ2V0UGFnZSgpLnJlbW92ZVBhcnRMaXN0ZW5lcihwYXJ0TGlzdGVuZXIpOworCisJCWFkYXB0ZXJGYWN0b3J5LmRpc3Bvc2UoKTsKKworCQlpZiAoZ2V0QWN0aW9uQmFyQ29udHJpYnV0b3IoKS5nZXRBY3RpdmVFZGl0b3IoKSA9PSB0aGlzKSB7CisJCQlnZXRBY3Rpb25CYXJDb250cmlidXRvcigpLnNldEFjdGl2ZUVkaXRvcihudWxsKTsKKwkJfQorCisJCWlmIChwcm9wZXJ0eVNoZWV0UGFnZSAhPSBudWxsKSB7CisJCQlwcm9wZXJ0eVNoZWV0UGFnZS5kaXNwb3NlKCk7CisJCX0KKworCQlpZiAoY29udGVudE91dGxpbmVQYWdlICE9IG51bGwpIHsKKwkJCWNvbnRlbnRPdXRsaW5lUGFnZS5kaXNwb3NlKCk7CisJCX0KKworCQlzdXBlci5kaXNwb3NlKCk7CisJfQorCisJLyoqCisJICogUmV0dXJucyB3aGV0aGVyIHRoZSBvdXRsaW5lIHZpZXcgc2hvdWxkIGJlIHByZXNlbnRlZCB0byB0aGUgdXNlci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgYm9vbGVhbiBzaG93T3V0bGluZVZpZXcoKSB7CisJCXJldHVybiBmYWxzZTsKKwl9Cit9CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9sb2dnZXIvcHJlc2VudGF0aW9uL0xvZ2dlckFjdGlvbkJhckNvbnRyaWJ1dG9yLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9sb2dnZXIvcHJlc2VudGF0aW9uL0xvZ2dlckFjdGlvbkJhckNvbnRyaWJ1dG9yLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGE5ODdmNgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2xvZ2dlci9wcmVzZW50YXRpb24vTG9nZ2VyQWN0aW9uQmFyQ29udHJpYnV0b3IuamF2YQpAQCAtMCwwICsxLDQyNSBAQAorLyoqCisgKiA8Y29weXJpZ2h0PgorICogPC9jb3B5cmlnaHQ+CisgKgorICogJElkJAorICovCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5sb2dnZXIucHJlc2VudGF0aW9uOworCitpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udWkudmlld2VyLklWaWV3ZXJQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5kb21haW4uRWRpdGluZ0RvbWFpbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5kb21haW4uSUVkaXRpbmdEb21haW5Qcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5hY3Rpb24uQ29udHJvbEFjdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5hY3Rpb24uQ3JlYXRlQ2hpbGRBY3Rpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkuYWN0aW9uLkNyZWF0ZVNpYmxpbmdBY3Rpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkuYWN0aW9uLkVkaXRpbmdEb21haW5BY3Rpb25CYXJDb250cmlidXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5hY3Rpb24uTG9hZFJlc291cmNlQWN0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmFjdGlvbi5WYWxpZGF0ZUFjdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uQWN0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5BY3Rpb25Db250cmlidXRpb25JdGVtOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JQWN0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JQ29udHJpYnV0aW9uSXRlbTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSUNvbnRyaWJ1dGlvbk1hbmFnZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklNZW51TGlzdGVuZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklNZW51TWFuYWdlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSVRvb2xCYXJNYW5hZ2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5NZW51TWFuYWdlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uU2VwYXJhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5TdWJDb250cmlidXRpb25JdGVtOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU3RydWN0dXJlZFNlbGVjdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlNlbGVjdGlvbkNoYW5nZWRFdmVudDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlZpZXdlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLnByZXNlbnRhdGlvbi5Db3JlRWRpdG9yUGx1Z2luOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklFZGl0b3JQYXJ0OworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLlBhcnRJbml0RXhjZXB0aW9uOworCisvKioKKyAqIFRoaXMgaXMgdGhlIGFjdGlvbiBiYXIgY29udHJpYnV0b3IgZm9yIHRoZSBMb2dnZXIgbW9kZWwgZWRpdG9yLgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgTG9nZ2VyQWN0aW9uQmFyQ29udHJpYnV0b3IKKwlleHRlbmRzIEVkaXRpbmdEb21haW5BY3Rpb25CYXJDb250cmlidXRvcgorCWltcGxlbWVudHMgSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lciB7CisJLyoqCisJICogVGhpcyBrZWVwcyB0cmFjayBvZiB0aGUgYWN0aXZlIGVkaXRvci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgSUVkaXRvclBhcnQgYWN0aXZlRWRpdG9yUGFydDsKKworCS8qKgorCSAqIFRoaXMga2VlcHMgdHJhY2sgb2YgdGhlIGN1cnJlbnQgc2VsZWN0aW9uIHByb3ZpZGVyLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBJU2VsZWN0aW9uUHJvdmlkZXIgc2VsZWN0aW9uUHJvdmlkZXI7CisKKwkvKioKKwkgKiBUaGlzIGFjdGlvbiBvcGVucyB0aGUgUHJvcGVydGllcyB2aWV3LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBJQWN0aW9uIHNob3dQcm9wZXJ0aWVzVmlld0FjdGlvbiA9CisJCW5ldyBBY3Rpb24oQ29yZUVkaXRvclBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoIl9VSV9TaG93UHJvcGVydGllc1ZpZXdfbWVudV9pdGVtIikpIC8vJE5PTi1OTFMtMSQKKwkJeworCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgdm9pZCBydW4oKSB7CisJCQkJdHJ5IHsKKwkJCQkJZ2V0UGFnZSgpLnNob3dWaWV3KCJvcmcuZWNsaXBzZS51aS52aWV3cy5Qcm9wZXJ0eVNoZWV0Iik7IC8vJE5PTi1OTFMtMSQKKwkJCQl9CisJCQkJY2F0Y2ggKFBhcnRJbml0RXhjZXB0aW9uIGV4Y2VwdGlvbikgeworCQkJCQlDb3JlRWRpdG9yUGx1Z2luLklOU1RBTkNFLmxvZyhleGNlcHRpb24pOworCQkJCX0KKwkJCX0KKwkJfTsKKworCS8qKgorCSAqIFRoaXMgYWN0aW9uIHJlZnJlc2hlcyB0aGUgdmlld2VyIG9mIHRoZSBjdXJyZW50IGVkaXRvciBpZiB0aGUgZWRpdG9yCisJICogaW1wbGVtZW50cyB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51aS52aWV3ZXIuSVZpZXdlclByb3ZpZGVyfS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgSUFjdGlvbiByZWZyZXNoVmlld2VyQWN0aW9uID0KKwkJbmV3IEFjdGlvbihDb3JlRWRpdG9yUGx1Z2luLklOU1RBTkNFLmdldFN0cmluZygiX1VJX1JlZnJlc2hWaWV3ZXJfbWVudV9pdGVtIikpIC8vJE5PTi1OTFMtMSQKKwkJeworCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgYm9vbGVhbiBpc0VuYWJsZWQoKSB7CisJCQkJcmV0dXJuIGFjdGl2ZUVkaXRvclBhcnQgaW5zdGFuY2VvZiBJVmlld2VyUHJvdmlkZXI7CisJCQl9CisKKwkJCUBPdmVycmlkZQorCQkJcHVibGljIHZvaWQgcnVuKCkgeworCQkJCWlmIChhY3RpdmVFZGl0b3JQYXJ0IGluc3RhbmNlb2YgSVZpZXdlclByb3ZpZGVyKSB7CisJCQkJCVZpZXdlciB2aWV3ZXIgPSAoKElWaWV3ZXJQcm92aWRlcilhY3RpdmVFZGl0b3JQYXJ0KS5nZXRWaWV3ZXIoKTsKKwkJCQkJaWYgKHZpZXdlciAhPSBudWxsKSB7CisJCQkJCQl2aWV3ZXIucmVmcmVzaCgpOworCQkJCQl9CisJCQkJfQorCQkJfQorCQl9OworCisJLyoqCisJICogVGhpcyB3aWxsIGNvbnRhaW4gb25lIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5hY3Rpb24uQ3JlYXRlQ2hpbGRBY3Rpb259IGNvcnJlc3BvbmRpbmcgdG8gZWFjaCBkZXNjcmlwdG9yCisJICogZ2VuZXJhdGVkIGZvciB0aGUgY3VycmVudCBzZWxlY3Rpb24gYnkgdGhlIGl0ZW0gcHJvdmlkZXIuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIENvbGxlY3Rpb248SUFjdGlvbj4gY3JlYXRlQ2hpbGRBY3Rpb25zOworCisJLyoqCisJICogVGhpcyBpcyB0aGUgbWVudSBtYW5hZ2VyIGludG8gd2hpY2ggbWVudSBjb250cmlidXRpb24gaXRlbXMgc2hvdWxkIGJlIGFkZGVkIGZvciBDcmVhdGVDaGlsZCBhY3Rpb25zLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBJTWVudU1hbmFnZXIgY3JlYXRlQ2hpbGRNZW51TWFuYWdlcjsKKworCS8qKgorCSAqIFRoaXMgd2lsbCBjb250YWluIG9uZSB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkuYWN0aW9uLkNyZWF0ZVNpYmxpbmdBY3Rpb259IGNvcnJlc3BvbmRpbmcgdG8gZWFjaCBkZXNjcmlwdG9yCisJICogZ2VuZXJhdGVkIGZvciB0aGUgY3VycmVudCBzZWxlY3Rpb24gYnkgdGhlIGl0ZW0gcHJvdmlkZXIuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIENvbGxlY3Rpb248SUFjdGlvbj4gY3JlYXRlU2libGluZ0FjdGlvbnM7CisKKwkvKioKKwkgKiBUaGlzIGlzIHRoZSBtZW51IG1hbmFnZXIgaW50byB3aGljaCBtZW51IGNvbnRyaWJ1dGlvbiBpdGVtcyBzaG91bGQgYmUgYWRkZWQgZm9yIENyZWF0ZVNpYmxpbmcgYWN0aW9ucy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgSU1lbnVNYW5hZ2VyIGNyZWF0ZVNpYmxpbmdNZW51TWFuYWdlcjsKKworCS8qKgorCSAqIFRoaXMgY3JlYXRlcyBhbiBpbnN0YW5jZSBvZiB0aGUgY29udHJpYnV0b3IuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIExvZ2dlckFjdGlvbkJhckNvbnRyaWJ1dG9yKCkgeworCQlzdXBlcihBRERJVElPTlNfTEFTVF9TVFlMRSk7CisJCWxvYWRSZXNvdXJjZUFjdGlvbiA9IG5ldyBMb2FkUmVzb3VyY2VBY3Rpb24oKTsKKwkJdmFsaWRhdGVBY3Rpb24gPSBuZXcgVmFsaWRhdGVBY3Rpb24oKTsKKwkJY29udHJvbEFjdGlvbiA9IG5ldyBDb250cm9sQWN0aW9uKCk7CisJfQorCisJLyoqCisJICogVGhpcyBhZGRzIFNlcGFyYXRvcnMgZm9yIGVkaXRvciBhZGRpdGlvbnMgdG8gdGhlIHRvb2wgYmFyLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGNvbnRyaWJ1dGVUb1Rvb2xCYXIoSVRvb2xCYXJNYW5hZ2VyIHRvb2xCYXJNYW5hZ2VyKSB7CisJCXRvb2xCYXJNYW5hZ2VyLmFkZChuZXcgU2VwYXJhdG9yKCJsb2dnZXItc2V0dGluZ3MiKSk7IC8vJE5PTi1OTFMtMSQKKwkJdG9vbEJhck1hbmFnZXIuYWRkKG5ldyBTZXBhcmF0b3IoImxvZ2dlci1hZGRpdGlvbnMiKSk7IC8vJE5PTi1OTFMtMSQKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFkZHMgdG8gdGhlIG1lbnUgYmFyIGEgbWVudSBhbmQgc29tZSBzZXBhcmF0b3JzIGZvciBlZGl0b3IgYWRkaXRpb25zLAorCSAqIGFzIHdlbGwgYXMgdGhlIHN1Yi1tZW51cyBmb3Igb2JqZWN0IGNyZWF0aW9uIGl0ZW1zLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGNvbnRyaWJ1dGVUb01lbnUoSU1lbnVNYW5hZ2VyIG1lbnVNYW5hZ2VyKSB7CisJCXN1cGVyLmNvbnRyaWJ1dGVUb01lbnUobWVudU1hbmFnZXIpOworCisJCUlNZW51TWFuYWdlciBzdWJtZW51TWFuYWdlciA9IG5ldyBNZW51TWFuYWdlcihDb3JlRWRpdG9yUGx1Z2luLklOU1RBTkNFLmdldFN0cmluZygiX1VJX0xvZ2dlckVkaXRvcl9tZW51IiksICJvcmcuZWNsaXBzZS5zdGVtLmNvcmUubG9nZ2VyTWVudUlEIik7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAorCQltZW51TWFuYWdlci5pbnNlcnRBZnRlcigiYWRkaXRpb25zIiwgc3VibWVudU1hbmFnZXIpOyAvLyROT04tTkxTLTEkCisJCXN1Ym1lbnVNYW5hZ2VyLmFkZChuZXcgU2VwYXJhdG9yKCJzZXR0aW5ncyIpKTsgLy8kTk9OLU5MUy0xJAorCQlzdWJtZW51TWFuYWdlci5hZGQobmV3IFNlcGFyYXRvcigiYWN0aW9ucyIpKTsgLy8kTk9OLU5MUy0xJAorCQlzdWJtZW51TWFuYWdlci5hZGQobmV3IFNlcGFyYXRvcigiYWRkaXRpb25zIikpOyAvLyROT04tTkxTLTEkCisJCXN1Ym1lbnVNYW5hZ2VyLmFkZChuZXcgU2VwYXJhdG9yKCJhZGRpdGlvbnMtZW5kIikpOyAvLyROT04tTkxTLTEkCisKKwkJLy8gUHJlcGFyZSBmb3IgQ3JlYXRlQ2hpbGQgaXRlbSBhZGRpdGlvbiBvciByZW1vdmFsLgorCQkvLworCQljcmVhdGVDaGlsZE1lbnVNYW5hZ2VyID0gbmV3IE1lbnVNYW5hZ2VyKENvcmVFZGl0b3JQbHVnaW4uSU5TVEFOQ0UuZ2V0U3RyaW5nKCJfVUlfQ3JlYXRlQ2hpbGRfbWVudV9pdGVtIikpOyAvLyROT04tTkxTLTEkCisJCXN1Ym1lbnVNYW5hZ2VyLmluc2VydEJlZm9yZSgiYWRkaXRpb25zIiwgY3JlYXRlQ2hpbGRNZW51TWFuYWdlcik7IC8vJE5PTi1OTFMtMSQKKworCQkvLyBQcmVwYXJlIGZvciBDcmVhdGVTaWJsaW5nIGl0ZW0gYWRkaXRpb24gb3IgcmVtb3ZhbC4KKwkJLy8KKwkJY3JlYXRlU2libGluZ01lbnVNYW5hZ2VyID0gbmV3IE1lbnVNYW5hZ2VyKENvcmVFZGl0b3JQbHVnaW4uSU5TVEFOQ0UuZ2V0U3RyaW5nKCJfVUlfQ3JlYXRlU2libGluZ19tZW51X2l0ZW0iKSk7IC8vJE5PTi1OTFMtMSQKKwkJc3VibWVudU1hbmFnZXIuaW5zZXJ0QmVmb3JlKCJhZGRpdGlvbnMiLCBjcmVhdGVTaWJsaW5nTWVudU1hbmFnZXIpOyAvLyROT04tTkxTLTEkCisKKwkJLy8gRm9yY2UgYW4gdXBkYXRlIGJlY2F1c2UgRWNsaXBzZSBoaWRlcyBlbXB0eSBtZW51cyBub3cuCisJCS8vCisJCXN1Ym1lbnVNYW5hZ2VyLmFkZE1lbnVMaXN0ZW5lcgorCQkJKG5ldyBJTWVudUxpc3RlbmVyKCkgeworCQkJCSBwdWJsaWMgdm9pZCBtZW51QWJvdXRUb1Nob3coSU1lbnVNYW5hZ2VyIG1lbnVNYW5hZ2VyKSB7CisJCQkJCSBtZW51TWFuYWdlci51cGRhdGVBbGwodHJ1ZSk7CisJCQkJIH0KKwkJCSB9KTsKKworCQlhZGRHbG9iYWxBY3Rpb25zKHN1Ym1lbnVNYW5hZ2VyKTsKKwl9CisKKwkvKioKKwkgKiBXaGVuIHRoZSBhY3RpdmUgZWRpdG9yIGNoYW5nZXMsIHRoaXMgcmVtZW1iZXJzIHRoZSBjaGFuZ2UgYW5kIHJlZ2lzdGVycyB3aXRoIGl0IGFzIGEgc2VsZWN0aW9uIHByb3ZpZGVyLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIHNldEFjdGl2ZUVkaXRvcihJRWRpdG9yUGFydCBwYXJ0KSB7CisJCXN1cGVyLnNldEFjdGl2ZUVkaXRvcihwYXJ0KTsKKwkJYWN0aXZlRWRpdG9yUGFydCA9IHBhcnQ7CisKKwkJLy8gU3dpdGNoIHRvIHRoZSBuZXcgc2VsZWN0aW9uIHByb3ZpZGVyLgorCQkvLworCQlpZiAoc2VsZWN0aW9uUHJvdmlkZXIgIT0gbnVsbCkgeworCQkJc2VsZWN0aW9uUHJvdmlkZXIucmVtb3ZlU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyKHRoaXMpOworCQl9CisJCWlmIChwYXJ0ID09IG51bGwpIHsKKwkJCXNlbGVjdGlvblByb3ZpZGVyID0gbnVsbDsKKwkJfQorCQllbHNlIHsKKwkJCXNlbGVjdGlvblByb3ZpZGVyID0gcGFydC5nZXRTaXRlKCkuZ2V0U2VsZWN0aW9uUHJvdmlkZXIoKTsKKwkJCXNlbGVjdGlvblByb3ZpZGVyLmFkZFNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcih0aGlzKTsKKworCQkJLy8gRmFrZSBhIHNlbGVjdGlvbiBjaGFuZ2VkIGV2ZW50IHRvIHVwZGF0ZSB0aGUgbWVudXMuCisJCQkvLworCQkJaWYgKHNlbGVjdGlvblByb3ZpZGVyLmdldFNlbGVjdGlvbigpICE9IG51bGwpIHsKKwkJCQlzZWxlY3Rpb25DaGFuZ2VkKG5ldyBTZWxlY3Rpb25DaGFuZ2VkRXZlbnQoc2VsZWN0aW9uUHJvdmlkZXIsIHNlbGVjdGlvblByb3ZpZGVyLmdldFNlbGVjdGlvbigpKSk7CisJCQl9CisJCX0KKwl9CisKKwkvKioKKwkgKiBUaGlzIGltcGxlbWVudHMge0BsaW5rIG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcn0sCisJICogaGFuZGxpbmcge0BsaW5rIG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuU2VsZWN0aW9uQ2hhbmdlZEV2ZW50fXMgYnkgcXVlcnlpbmcgZm9yIHRoZSBjaGlsZHJlbiBhbmQgc2libGluZ3MKKwkgKiB0aGF0IGNhbiBiZSBhZGRlZCB0byB0aGUgc2VsZWN0ZWQgb2JqZWN0IGFuZCB1cGRhdGluZyB0aGUgbWVudXMgYWNjb3JkaW5nbHkuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgc2VsZWN0aW9uQ2hhbmdlZChTZWxlY3Rpb25DaGFuZ2VkRXZlbnQgZXZlbnQpIHsKKwkJLy8gUmVtb3ZlIGFueSBtZW51IGl0ZW1zIGZvciBvbGQgc2VsZWN0aW9uLgorCQkvLworCQlpZiAoY3JlYXRlQ2hpbGRNZW51TWFuYWdlciAhPSBudWxsKSB7CisJCQlkZXBvcHVsYXRlTWFuYWdlcihjcmVhdGVDaGlsZE1lbnVNYW5hZ2VyLCBjcmVhdGVDaGlsZEFjdGlvbnMpOworCQl9CisJCWlmIChjcmVhdGVTaWJsaW5nTWVudU1hbmFnZXIgIT0gbnVsbCkgeworCQkJZGVwb3B1bGF0ZU1hbmFnZXIoY3JlYXRlU2libGluZ01lbnVNYW5hZ2VyLCBjcmVhdGVTaWJsaW5nQWN0aW9ucyk7CisJCX0KKworCQkvLyBRdWVyeSB0aGUgbmV3IHNlbGVjdGlvbiBmb3IgYXBwcm9wcmlhdGUgbmV3IGNoaWxkL3NpYmxpbmcgZGVzY3JpcHRvcnMKKwkJLy8KKwkJQ29sbGVjdGlvbjw/PiBuZXdDaGlsZERlc2NyaXB0b3JzID0gbnVsbDsKKwkJQ29sbGVjdGlvbjw/PiBuZXdTaWJsaW5nRGVzY3JpcHRvcnMgPSBudWxsOworCisJCUlTZWxlY3Rpb24gc2VsZWN0aW9uID0gZXZlbnQuZ2V0U2VsZWN0aW9uKCk7CisJCWlmIChzZWxlY3Rpb24gaW5zdGFuY2VvZiBJU3RydWN0dXJlZFNlbGVjdGlvbiAmJiAoKElTdHJ1Y3R1cmVkU2VsZWN0aW9uKXNlbGVjdGlvbikuc2l6ZSgpID09IDEpIHsKKwkJCU9iamVjdCBvYmplY3QgPSAoKElTdHJ1Y3R1cmVkU2VsZWN0aW9uKXNlbGVjdGlvbikuZ2V0Rmlyc3RFbGVtZW50KCk7CisKKwkJCUVkaXRpbmdEb21haW4gZG9tYWluID0gKChJRWRpdGluZ0RvbWFpblByb3ZpZGVyKWFjdGl2ZUVkaXRvclBhcnQpLmdldEVkaXRpbmdEb21haW4oKTsKKworCQkJbmV3Q2hpbGREZXNjcmlwdG9ycyA9IGRvbWFpbi5nZXROZXdDaGlsZERlc2NyaXB0b3JzKG9iamVjdCwgbnVsbCk7CisJCQluZXdTaWJsaW5nRGVzY3JpcHRvcnMgPSBkb21haW4uZ2V0TmV3Q2hpbGREZXNjcmlwdG9ycyhudWxsLCBvYmplY3QpOworCQl9CisKKwkJLy8gR2VuZXJhdGUgYWN0aW9ucyBmb3Igc2VsZWN0aW9uOyBwb3B1bGF0ZSBhbmQgcmVkcmF3IHRoZSBtZW51cy4KKwkJLy8KKwkJY3JlYXRlQ2hpbGRBY3Rpb25zID0gZ2VuZXJhdGVDcmVhdGVDaGlsZEFjdGlvbnMobmV3Q2hpbGREZXNjcmlwdG9ycywgc2VsZWN0aW9uKTsKKwkJY3JlYXRlU2libGluZ0FjdGlvbnMgPSBnZW5lcmF0ZUNyZWF0ZVNpYmxpbmdBY3Rpb25zKG5ld1NpYmxpbmdEZXNjcmlwdG9ycywgc2VsZWN0aW9uKTsKKworCQlpZiAoY3JlYXRlQ2hpbGRNZW51TWFuYWdlciAhPSBudWxsKSB7CisJCQlwb3B1bGF0ZU1hbmFnZXIoY3JlYXRlQ2hpbGRNZW51TWFuYWdlciwgY3JlYXRlQ2hpbGRBY3Rpb25zLCBudWxsKTsKKwkJCWNyZWF0ZUNoaWxkTWVudU1hbmFnZXIudXBkYXRlKHRydWUpOworCQl9CisJCWlmIChjcmVhdGVTaWJsaW5nTWVudU1hbmFnZXIgIT0gbnVsbCkgeworCQkJcG9wdWxhdGVNYW5hZ2VyKGNyZWF0ZVNpYmxpbmdNZW51TWFuYWdlciwgY3JlYXRlU2libGluZ0FjdGlvbnMsIG51bGwpOworCQkJY3JlYXRlU2libGluZ01lbnVNYW5hZ2VyLnVwZGF0ZSh0cnVlKTsKKwkJfQorCX0KKworCS8qKgorCSAqIFRoaXMgZ2VuZXJhdGVzIGEge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmFjdGlvbi5DcmVhdGVDaGlsZEFjdGlvbn0gZm9yIGVhY2ggb2JqZWN0IGluIDxjb2RlPmRlc2NyaXB0b3JzPC9jb2RlPiwKKwkgKiBhbmQgcmV0dXJucyB0aGUgY29sbGVjdGlvbiBvZiB0aGVzZSBhY3Rpb25zLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBDb2xsZWN0aW9uPElBY3Rpb24+IGdlbmVyYXRlQ3JlYXRlQ2hpbGRBY3Rpb25zKENvbGxlY3Rpb248Pz4gZGVzY3JpcHRvcnMsIElTZWxlY3Rpb24gc2VsZWN0aW9uKSB7CisJCUNvbGxlY3Rpb248SUFjdGlvbj4gYWN0aW9ucyA9IG5ldyBBcnJheUxpc3Q8SUFjdGlvbj4oKTsKKwkJaWYgKGRlc2NyaXB0b3JzICE9IG51bGwpIHsKKwkJCWZvciAoT2JqZWN0IGRlc2NyaXB0b3IgOiBkZXNjcmlwdG9ycykgeworCQkJCWFjdGlvbnMuYWRkKG5ldyBDcmVhdGVDaGlsZEFjdGlvbihhY3RpdmVFZGl0b3JQYXJ0LCBzZWxlY3Rpb24sIGRlc2NyaXB0b3IpKTsKKwkJCX0KKwkJfQorCQlyZXR1cm4gYWN0aW9uczsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGdlbmVyYXRlcyBhIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5hY3Rpb24uQ3JlYXRlU2libGluZ0FjdGlvbn0gZm9yIGVhY2ggb2JqZWN0IGluIDxjb2RlPmRlc2NyaXB0b3JzPC9jb2RlPiwKKwkgKiBhbmQgcmV0dXJucyB0aGUgY29sbGVjdGlvbiBvZiB0aGVzZSBhY3Rpb25zLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBDb2xsZWN0aW9uPElBY3Rpb24+IGdlbmVyYXRlQ3JlYXRlU2libGluZ0FjdGlvbnMoQ29sbGVjdGlvbjw/PiBkZXNjcmlwdG9ycywgSVNlbGVjdGlvbiBzZWxlY3Rpb24pIHsKKwkJQ29sbGVjdGlvbjxJQWN0aW9uPiBhY3Rpb25zID0gbmV3IEFycmF5TGlzdDxJQWN0aW9uPigpOworCQlpZiAoZGVzY3JpcHRvcnMgIT0gbnVsbCkgeworCQkJZm9yIChPYmplY3QgZGVzY3JpcHRvciA6IGRlc2NyaXB0b3JzKSB7CisJCQkJYWN0aW9ucy5hZGQobmV3IENyZWF0ZVNpYmxpbmdBY3Rpb24oYWN0aXZlRWRpdG9yUGFydCwgc2VsZWN0aW9uLCBkZXNjcmlwdG9yKSk7CisJCQl9CisJCX0KKwkJcmV0dXJuIGFjdGlvbnM7CisJfQorCisJLyoqCisJICogVGhpcyBwb3B1bGF0ZXMgdGhlIHNwZWNpZmllZCA8Y29kZT5tYW5hZ2VyPC9jb2RlPiB3aXRoIHtAbGluayBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uQWN0aW9uQ29udHJpYnV0aW9uSXRlbX1zCisJICogYmFzZWQgb24gdGhlIHtAbGluayBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSUFjdGlvbn1zIGNvbnRhaW5lZCBpbiB0aGUgPGNvZGU+YWN0aW9uczwvY29kZT4gY29sbGVjdGlvbiwKKwkgKiBieSBpbnNlcnRpbmcgdGhlbSBiZWZvcmUgdGhlIHNwZWNpZmllZCBjb250cmlidXRpb24gaXRlbSA8Y29kZT5jb250cmlidXRpb25JRDwvY29kZT4uCisJICogSWYgPGNvZGU+Y29udHJpYnV0aW9uSUQ8L2NvZGU+IGlzIDxjb2RlPm51bGw8L2NvZGU+LCB0aGV5IGFyZSBzaW1wbHkgYWRkZWQuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgcG9wdWxhdGVNYW5hZ2VyKElDb250cmlidXRpb25NYW5hZ2VyIG1hbmFnZXIsIENvbGxlY3Rpb248PyBleHRlbmRzIElBY3Rpb24+IGFjdGlvbnMsIFN0cmluZyBjb250cmlidXRpb25JRCkgeworCQlpZiAoYWN0aW9ucyAhPSBudWxsKSB7CisJCQlmb3IgKElBY3Rpb24gYWN0aW9uIDogYWN0aW9ucykgeworCQkJCWlmIChjb250cmlidXRpb25JRCAhPSBudWxsKSB7CisJCQkJCW1hbmFnZXIuaW5zZXJ0QmVmb3JlKGNvbnRyaWJ1dGlvbklELCBhY3Rpb24pOworCQkJCX0KKwkJCQllbHNlIHsKKwkJCQkJbWFuYWdlci5hZGQoYWN0aW9uKTsKKwkJCQl9CisJCQl9CisJCX0KKwl9CisJCQorCS8qKgorCSAqIFRoaXMgcmVtb3ZlcyBmcm9tIHRoZSBzcGVjaWZpZWQgPGNvZGU+bWFuYWdlcjwvY29kZT4gYWxsIHtAbGluayBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uQWN0aW9uQ29udHJpYnV0aW9uSXRlbX1zCisJICogYmFzZWQgb24gdGhlIHtAbGluayBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSUFjdGlvbn1zIGNvbnRhaW5lZCBpbiB0aGUgPGNvZGU+YWN0aW9uczwvY29kZT4gY29sbGVjdGlvbi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBkZXBvcHVsYXRlTWFuYWdlcihJQ29udHJpYnV0aW9uTWFuYWdlciBtYW5hZ2VyLCBDb2xsZWN0aW9uPD8gZXh0ZW5kcyBJQWN0aW9uPiBhY3Rpb25zKSB7CisJCWlmIChhY3Rpb25zICE9IG51bGwpIHsKKwkJCUlDb250cmlidXRpb25JdGVtW10gaXRlbXMgPSBtYW5hZ2VyLmdldEl0ZW1zKCk7CisJCQlmb3IgKGludCBpID0gMDsgaSA8IGl0ZW1zLmxlbmd0aDsgaSsrKSB7CisJCQkJLy8gTG9vayBpbnRvIFN1YkNvbnRyaWJ1dGlvbkl0ZW1zCisJCQkJLy8KKwkJCQlJQ29udHJpYnV0aW9uSXRlbSBjb250cmlidXRpb25JdGVtID0gaXRlbXNbaV07CisJCQkJd2hpbGUgKGNvbnRyaWJ1dGlvbkl0ZW0gaW5zdGFuY2VvZiBTdWJDb250cmlidXRpb25JdGVtKSB7CisJCQkJCWNvbnRyaWJ1dGlvbkl0ZW0gPSAoKFN1YkNvbnRyaWJ1dGlvbkl0ZW0pY29udHJpYnV0aW9uSXRlbSkuZ2V0SW5uZXJJdGVtKCk7CisJCQkJfQorCisJCQkJLy8gRGVsZXRlIHRoZSBBY3Rpb25Db250cmlidXRpb25JdGVtcyB3aXRoIG1hdGNoaW5nIGFjdGlvbi4KKwkJCQkvLworCQkJCWlmIChjb250cmlidXRpb25JdGVtIGluc3RhbmNlb2YgQWN0aW9uQ29udHJpYnV0aW9uSXRlbSkgeworCQkJCQlJQWN0aW9uIGFjdGlvbiA9ICgoQWN0aW9uQ29udHJpYnV0aW9uSXRlbSljb250cmlidXRpb25JdGVtKS5nZXRBY3Rpb24oKTsKKwkJCQkJaWYgKGFjdGlvbnMuY29udGFpbnMoYWN0aW9uKSkgeworCQkJCQkJbWFuYWdlci5yZW1vdmUoY29udHJpYnV0aW9uSXRlbSk7CisJCQkJCX0KKwkJCQl9CisJCQl9CisJCX0KKwl9CisKKwkvKioKKwkgKiBUaGlzIHBvcHVsYXRlcyB0aGUgcG9wLXVwIG1lbnUgYmVmb3JlIGl0IGFwcGVhcnMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgbWVudUFib3V0VG9TaG93KElNZW51TWFuYWdlciBtZW51TWFuYWdlcikgeworCQlzdXBlci5tZW51QWJvdXRUb1Nob3cobWVudU1hbmFnZXIpOworCQlNZW51TWFuYWdlciBzdWJtZW51TWFuYWdlciA9IG51bGw7CisKKwkJc3VibWVudU1hbmFnZXIgPSBuZXcgTWVudU1hbmFnZXIoQ29yZUVkaXRvclBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoIl9VSV9DcmVhdGVDaGlsZF9tZW51X2l0ZW0iKSk7IC8vJE5PTi1OTFMtMSQKKwkJcG9wdWxhdGVNYW5hZ2VyKHN1Ym1lbnVNYW5hZ2VyLCBjcmVhdGVDaGlsZEFjdGlvbnMsIG51bGwpOworCQltZW51TWFuYWdlci5pbnNlcnRCZWZvcmUoImVkaXQiLCBzdWJtZW51TWFuYWdlcik7IC8vJE5PTi1OTFMtMSQKKworCQlzdWJtZW51TWFuYWdlciA9IG5ldyBNZW51TWFuYWdlcihDb3JlRWRpdG9yUGx1Z2luLklOU1RBTkNFLmdldFN0cmluZygiX1VJX0NyZWF0ZVNpYmxpbmdfbWVudV9pdGVtIikpOyAvLyROT04tTkxTLTEkCisJCXBvcHVsYXRlTWFuYWdlcihzdWJtZW51TWFuYWdlciwgY3JlYXRlU2libGluZ0FjdGlvbnMsIG51bGwpOworCQltZW51TWFuYWdlci5pbnNlcnRCZWZvcmUoImVkaXQiLCBzdWJtZW51TWFuYWdlcik7IC8vJE5PTi1OTFMtMSQKKwl9CisKKwkvKioKKwkgKiBUaGlzIGluc2VydHMgZ2xvYmFsIGFjdGlvbnMgYmVmb3JlIHRoZSAiYWRkaXRpb25zLWVuZCIgc2VwYXJhdG9yLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIGFkZEdsb2JhbEFjdGlvbnMoSU1lbnVNYW5hZ2VyIG1lbnVNYW5hZ2VyKSB7CisJCW1lbnVNYW5hZ2VyLmluc2VydEFmdGVyKCJhZGRpdGlvbnMtZW5kIiwgbmV3IFNlcGFyYXRvcigidWktYWN0aW9ucyIpKTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCisJCW1lbnVNYW5hZ2VyLmluc2VydEFmdGVyKCJ1aS1hY3Rpb25zIiwgc2hvd1Byb3BlcnRpZXNWaWV3QWN0aW9uKTsgLy8kTk9OLU5MUy0xJAorCisJCXJlZnJlc2hWaWV3ZXJBY3Rpb24uc2V0RW5hYmxlZChyZWZyZXNoVmlld2VyQWN0aW9uLmlzRW5hYmxlZCgpKTsJCQorCQltZW51TWFuYWdlci5pbnNlcnRBZnRlcigidWktYWN0aW9ucyIsIHJlZnJlc2hWaWV3ZXJBY3Rpb24pOyAvLyROT04tTkxTLTEkCisKKwkJc3VwZXIuYWRkR2xvYmFsQWN0aW9ucyhtZW51TWFuYWdlcik7CisJfQorCisJLyoqCisJICogVGhpcyBlbnN1cmVzIHRoYXQgYSBkZWxldGUgYWN0aW9uIHdpbGwgY2xlYW4gdXAgYWxsIHJlZmVyZW5jZXMgdG8gZGVsZXRlZCBvYmplY3RzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCBib29sZWFuIHJlbW92ZUFsbFJlZmVyZW5jZXNPbkRlbGV0ZSgpIHsKKwkJcmV0dXJuIHRydWU7CisJfQorCit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvbG9nZ2VyL3ByZXNlbnRhdGlvbi9Mb2dnZXJFZGl0b3IuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2xvZ2dlci9wcmVzZW50YXRpb24vTG9nZ2VyRWRpdG9yLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGRiNDc2ZgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2xvZ2dlci9wcmVzZW50YXRpb24vTG9nZ2VyRWRpdG9yLmphdmEKQEAgLTAsMCArMSwxODAxIEBACisvKioKKyAqIDxjb3B5cmlnaHQ+CisgKiA8L2NvcHlyaWdodD4KKyAqCisgKiAkSWQkCisgKi8KK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmxvZ2dlci5wcmVzZW50YXRpb247CisKKworaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247CitpbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbTsKK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OworaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOworaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uczsKK2ltcG9ydCBqYXZhLnV0aWwuRXZlbnRPYmplY3Q7CitpbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7CitpbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOworaW1wb3J0IGphdmEudXRpbC5MaW5rZWRIYXNoTWFwOworaW1wb3J0IGphdmEudXRpbC5MaXN0OworaW1wb3J0IGphdmEudXRpbC5NYXA7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JRmlsZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JTWFya2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklSZXNvdXJjZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUmVzb3VyY2VDaGFuZ2VFdmVudDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUmVzb3VyY2VDaGFuZ2VMaXN0ZW5lcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUmVzb3VyY2VEZWx0YTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUmVzb3VyY2VEZWx0YVZpc2l0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuUmVzb3VyY2VzUGx1Z2luOworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5Db3JlRXhjZXB0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUGF0aDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVByb2dyZXNzTW9uaXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuTnVsbFByb2dyZXNzTW9uaXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLmNvbW1hbmQuQmFzaWNDb21tYW5kU3RhY2s7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5jb21tYW5kLkNvbW1hbmQ7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5jb21tYW5kLkNvbW1hbmRTdGFjazsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLmNvbW1hbmQuQ29tbWFuZFN0YWNrTGlzdGVuZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udWkuTWFya2VySGVscGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udWkuVmlld2VyUGFuZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnVpLmVkaXRvci5Qcm9ibGVtRWRpdG9yUGFydDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnVpLnZpZXdlci5JVmlld2VyUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLkJhc2ljRGlhZ25vc3RpYzsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuRGlhZ25vc3RpYzsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuVVJJOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FVmFsaWRhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5wcm92aWRlci5FY29yZUl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5yZXNvdXJjZS5SZXNvdXJjZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUucmVzb3VyY2UuUmVzb3VyY2VTZXQ7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnV0aWwuRUNvbnRlbnRBZGFwdGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS51dGlsLkVjb3JlVXRpbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5kb21haW4uQWRhcHRlckZhY3RvcnlFZGl0aW5nRG9tYWluOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LmRvbWFpbi5FZGl0aW5nRG9tYWluOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LmRvbWFpbi5JRWRpdGluZ0RvbWFpblByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkFkYXB0ZXJGYWN0b3J5SXRlbURlbGVnYXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5Db21wb3NlZEFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLlJlZmxlY3RpdmVJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5yZXNvdXJjZS5SZXNvdXJjZUl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmFjdGlvbi5FZGl0aW5nRG9tYWluQWN0aW9uQmFyQ29udHJpYnV0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkuY2VsbGVkaXRvci5BZGFwdGVyRmFjdG9yeVRyZWVFZGl0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkuZG5kLkVkaXRpbmdEb21haW5WaWV3ZXJEcm9wQWRhcHRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5kbmQuTG9jYWxUcmFuc2ZlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5kbmQuVmlld2VyRHJhZ0FkYXB0ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkucHJvdmlkZXIuQWRhcHRlckZhY3RvcnlDb250ZW50UHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkucHJvdmlkZXIuQWRhcHRlckZhY3RvcnlMYWJlbFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLnByb3ZpZGVyLlVud3JhcHBpbmdTZWxlY3Rpb25Qcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS51dGlsLkVkaXRVSU1hcmtlckhlbHBlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS51dGlsLkVkaXRVSVV0aWw7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkudmlldy5FeHRlbmRlZFByb3BlcnR5U2hlZXRQYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JTWVudUxpc3RlbmVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JTWVudU1hbmFnZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklTdGF0dXNMaW5lTWFuYWdlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSVRvb2xCYXJNYW5hZ2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5NZW51TWFuYWdlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uU2VwYXJhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmRpYWxvZ3MuTWVzc2FnZURpYWxvZzsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5kaWFsb2dzLlByb2dyZXNzTW9uaXRvckRpYWxvZzsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLkNvbHVtbldlaWdodERhdGE7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb25Qcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTdHJ1Y3R1cmVkU2VsZWN0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuTGlzdFZpZXdlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlNlbGVjdGlvbkNoYW5nZWRFdmVudDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlN0cnVjdHVyZWRTZWxlY3Rpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5TdHJ1Y3R1cmVkVmlld2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuVGFibGVMYXlvdXQ7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5UYWJsZVZpZXdlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlRyZWVWaWV3ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5WaWV3ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5wcmVzZW50YXRpb24uQ29yZUVkaXRvclBsdWdpbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLnByb3ZpZGVyLkNvbW1vbkl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5leHBlcmltZW50LnByb3ZpZGVyLkV4cGVyaW1lbnRJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGgucHJvdmlkZXIuR3JhcGhJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubG9nZ2VyLnByb3ZpZGVyLkxvZ2dlckl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5wcm92aWRlci5Nb2RlbEl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5wcm92aWRlci5Nb2RpZmllckl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUucHJvdmlkZXIuUHJlZGljYXRlSXRlbVByb3ZpZGVyQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNjZW5hcmlvLnByb3ZpZGVyLlNjZW5hcmlvSXRlbVByb3ZpZGVyQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNlcXVlbmNlci5wcm92aWRlci5TZXF1ZW5jZXJJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc29sdmVyLnByb3ZpZGVyLlNvbHZlckl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS50cmlnZ2VyLnByb3ZpZGVyLlRyaWdnZXJJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuU1dUOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5jdXN0b20uQ1RhYkZvbGRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZG5kLkRORDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZG5kLlRyYW5zZmVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuQ29udHJvbEFkYXB0ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5Db250cm9sRXZlbnQ7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmdyYXBoaWNzLlBvaW50OworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5sYXlvdXQuRmlsbExheW91dDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuTWVudTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5UYWJsZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5UYWJsZUNvbHVtbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5UcmVlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlRyZWVDb2x1bW47CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuSUFjdGlvbkJhcnM7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuSUVkaXRvcklucHV0OworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklFZGl0b3JQYXJ0OworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklFZGl0b3JTaXRlOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklQYXJ0TGlzdGVuZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaFBhcnQ7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuUGFydEluaXRFeGNlcHRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuYWN0aW9ucy5Xb3Jrc3BhY2VNb2RpZnlPcGVyYXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuZGlhbG9ncy5TYXZlQXNEaWFsb2c7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuaWRlLklHb3RvTWFya2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLnBhcnQuRmlsZUVkaXRvcklucHV0OworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLnBhcnQuTXVsdGlQYWdlRWRpdG9yUGFydDsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS52aWV3cy5jb250ZW50b3V0bGluZS5Db250ZW50T3V0bGluZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS52aWV3cy5jb250ZW50b3V0bGluZS5Db250ZW50T3V0bGluZVBhZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkudmlld3MuY29udGVudG91dGxpbmUuSUNvbnRlbnRPdXRsaW5lUGFnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS52aWV3cy5wcm9wZXJ0aWVzLklQcm9wZXJ0eVNoZWV0UGFnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS52aWV3cy5wcm9wZXJ0aWVzLlByb3BlcnR5U2hlZXQ7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkudmlld3MucHJvcGVydGllcy5Qcm9wZXJ0eVNoZWV0UGFnZTsKKworCisvKioKKyAqIFRoaXMgaXMgYW4gZXhhbXBsZSBvZiBhIExvZ2dlciBtb2RlbCBlZGl0b3IuCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBMb2dnZXJFZGl0b3IKKwlleHRlbmRzIE11bHRpUGFnZUVkaXRvclBhcnQKKwlpbXBsZW1lbnRzIElFZGl0aW5nRG9tYWluUHJvdmlkZXIsIElTZWxlY3Rpb25Qcm92aWRlciwgSU1lbnVMaXN0ZW5lciwgSVZpZXdlclByb3ZpZGVyLCBJR290b01hcmtlciB7CisJLyoqCisJICogVGhpcyBrZWVwcyB0cmFjayBvZiB0aGUgZWRpdGluZyBkb21haW4gdGhhdCBpcyB1c2VkIHRvIHRyYWNrIGFsbCBjaGFuZ2VzIHRvIHRoZSBtb2RlbC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgQWRhcHRlckZhY3RvcnlFZGl0aW5nRG9tYWluIGVkaXRpbmdEb21haW47CisKKwkvKioKKwkgKiBUaGlzIGlzIHRoZSBvbmUgYWRhcHRlciBmYWN0b3J5IHVzZWQgZm9yIHByb3ZpZGluZyB2aWV3cyBvZiB0aGUgbW9kZWwuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIENvbXBvc2VkQWRhcHRlckZhY3RvcnkgYWRhcHRlckZhY3Rvcnk7CisKKwkvKioKKwkgKiBUaGlzIGlzIHRoZSBjb250ZW50IG91dGxpbmUgcGFnZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgSUNvbnRlbnRPdXRsaW5lUGFnZSBjb250ZW50T3V0bGluZVBhZ2U7CisKKwkvKioKKwkgKiBUaGlzIGlzIGEga2x1ZGdlLi4uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIElTdGF0dXNMaW5lTWFuYWdlciBjb250ZW50T3V0bGluZVN0YXR1c0xpbmVNYW5hZ2VyOworCisJLyoqCisJICogVGhpcyBpcyB0aGUgY29udGVudCBvdXRsaW5lIHBhZ2UncyB2aWV3ZXIuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIFRyZWVWaWV3ZXIgY29udGVudE91dGxpbmVWaWV3ZXI7CisKKwkvKioKKwkgKiBUaGlzIGlzIHRoZSBwcm9wZXJ0eSBzaGVldCBwYWdlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBQcm9wZXJ0eVNoZWV0UGFnZSBwcm9wZXJ0eVNoZWV0UGFnZTsKKworCS8qKgorCSAqIFRoaXMgaXMgdGhlIHZpZXdlciB0aGF0IHNoYWRvd3MgdGhlIHNlbGVjdGlvbiBpbiB0aGUgY29udGVudCBvdXRsaW5lLgorCSAqIFRoZSBwYXJlbnQgcmVsYXRpb24gbXVzdCBiZSBjb3JyZWN0bHkgZGVmaW5lZCBmb3IgdGhpcyB0byB3b3JrLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBUcmVlVmlld2VyIHNlbGVjdGlvblZpZXdlcjsKKworCS8qKgorCSAqIFRoaXMgaW52ZXJ0cyB0aGUgcm9sbCBvZiBwYXJlbnQgYW5kIGNoaWxkIGluIHRoZSBjb250ZW50IHByb3ZpZGVyIGFuZCBzaG93IHBhcmVudHMgYXMgYSB0cmVlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBUcmVlVmlld2VyIHBhcmVudFZpZXdlcjsKKworCS8qKgorCSAqIFRoaXMgc2hvd3MgaG93IGEgdHJlZSB2aWV3IHdvcmtzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBUcmVlVmlld2VyIHRyZWVWaWV3ZXI7CisKKwkvKioKKwkgKiBUaGlzIHNob3dzIGhvdyBhIGxpc3QgdmlldyB3b3Jrcy4KKwkgKiBBIGxpc3Qgdmlld2VyIGRvZXNuJ3Qgc3VwcG9ydCBpY29ucy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgTGlzdFZpZXdlciBsaXN0Vmlld2VyOworCisJLyoqCisJICogVGhpcyBzaG93cyBob3cgYSB0YWJsZSB2aWV3IHdvcmtzLgorCSAqIEEgdGFibGUgY2FuIGJlIHVzZWQgYXMgYSBsaXN0IHdpdGggaWNvbnMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIFRhYmxlVmlld2VyIHRhYmxlVmlld2VyOworCisJLyoqCisJICogVGhpcyBzaG93cyBob3cgYSB0cmVlIHZpZXcgd2l0aCBjb2x1bW5zIHdvcmtzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBUcmVlVmlld2VyIHRyZWVWaWV3ZXJXaXRoQ29sdW1uczsKKworCS8qKgorCSAqIFRoaXMga2VlcHMgdHJhY2sgb2YgdGhlIGFjdGl2ZSB2aWV3ZXIgcGFuZSwgaW4gdGhlIGJvb2suCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIFZpZXdlclBhbmUgY3VycmVudFZpZXdlclBhbmU7CisKKwkvKioKKwkgKiBUaGlzIGtlZXBzIHRyYWNrIG9mIHRoZSBhY3RpdmUgY29udGVudCB2aWV3ZXIsIHdoaWNoIG1heSBiZSBlaXRoZXIgb25lIG9mIHRoZSB2aWV3ZXJzIGluIHRoZSBwYWdlcyBvciB0aGUgY29udGVudCBvdXRsaW5lIHZpZXdlci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgVmlld2VyIGN1cnJlbnRWaWV3ZXI7CisKKwkvKioKKwkgKiBUaGlzIGxpc3RlbnMgdG8gd2hpY2ggZXZlciB2aWV3ZXIgaXMgYWN0aXZlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBJU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyIHNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcjsKKworCS8qKgorCSAqIFRoaXMga2VlcHMgdHJhY2sgb2YgYWxsIHRoZSB7QGxpbmsgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyfXMgdGhhdCBhcmUgbGlzdGVuaW5nIHRvIHRoaXMgZWRpdG9yLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBDb2xsZWN0aW9uPElTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXI+IHNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcnMgPSBuZXcgQXJyYXlMaXN0PElTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXI+KCk7CisKKwkvKioKKwkgKiBUaGlzIGtlZXBzIHRyYWNrIG9mIHRoZSBzZWxlY3Rpb24gb2YgdGhlIGVkaXRvciBhcyBhIHdob2xlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBJU2VsZWN0aW9uIGVkaXRvclNlbGVjdGlvbiA9IFN0cnVjdHVyZWRTZWxlY3Rpb24uRU1QVFk7CisKKwkvKioKKwkgKiBUaGUgTWFya2VySGVscGVyIGlzIHJlc3BvbnNpYmxlIGZvciBjcmVhdGluZyB3b3Jrc3BhY2UgcmVzb3VyY2UgbWFya2VycyBwcmVzZW50ZWQKKwkgKiBpbiBFY2xpcHNlJ3MgUHJvYmxlbXMgVmlldy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgTWFya2VySGVscGVyIG1hcmtlckhlbHBlciA9IG5ldyBFZGl0VUlNYXJrZXJIZWxwZXIoKTsKKworCS8qKgorCSAqIFRoaXMgbGlzdGVucyBmb3Igd2hlbiB0aGUgb3V0bGluZSBiZWNvbWVzIGFjdGl2ZQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBJUGFydExpc3RlbmVyIHBhcnRMaXN0ZW5lciA9CisJCW5ldyBJUGFydExpc3RlbmVyKCkgeworCQkJcHVibGljIHZvaWQgcGFydEFjdGl2YXRlZChJV29ya2JlbmNoUGFydCBwKSB7CisJCQkJaWYgKHAgaW5zdGFuY2VvZiBDb250ZW50T3V0bGluZSkgeworCQkJCQlpZiAoKChDb250ZW50T3V0bGluZSlwKS5nZXRDdXJyZW50UGFnZSgpID09IGNvbnRlbnRPdXRsaW5lUGFnZSkgeworCQkJCQkJZ2V0QWN0aW9uQmFyQ29udHJpYnV0b3IoKS5zZXRBY3RpdmVFZGl0b3IoTG9nZ2VyRWRpdG9yLnRoaXMpOworCisJCQkJCQlzZXRDdXJyZW50Vmlld2VyKGNvbnRlbnRPdXRsaW5lVmlld2VyKTsKKwkJCQkJfQorCQkJCX0KKwkJCQllbHNlIGlmIChwIGluc3RhbmNlb2YgUHJvcGVydHlTaGVldCkgeworCQkJCQlpZiAoKChQcm9wZXJ0eVNoZWV0KXApLmdldEN1cnJlbnRQYWdlKCkgPT0gcHJvcGVydHlTaGVldFBhZ2UpIHsKKwkJCQkJCWdldEFjdGlvbkJhckNvbnRyaWJ1dG9yKCkuc2V0QWN0aXZlRWRpdG9yKExvZ2dlckVkaXRvci50aGlzKTsKKwkJCQkJCWhhbmRsZUFjdGl2YXRlKCk7CisJCQkJCX0KKwkJCQl9CisJCQkJZWxzZSBpZiAocCA9PSBMb2dnZXJFZGl0b3IudGhpcykgeworCQkJCQloYW5kbGVBY3RpdmF0ZSgpOworCQkJCX0KKwkJCX0KKwkJCXB1YmxpYyB2b2lkIHBhcnRCcm91Z2h0VG9Ub3AoSVdvcmtiZW5jaFBhcnQgcCkgeworCQkJCS8vIElnbm9yZS4KKwkJCX0KKwkJCXB1YmxpYyB2b2lkIHBhcnRDbG9zZWQoSVdvcmtiZW5jaFBhcnQgcCkgeworCQkJCS8vIElnbm9yZS4KKwkJCX0KKwkJCXB1YmxpYyB2b2lkIHBhcnREZWFjdGl2YXRlZChJV29ya2JlbmNoUGFydCBwKSB7CisJCQkJLy8gSWdub3JlLgorCQkJfQorCQkJcHVibGljIHZvaWQgcGFydE9wZW5lZChJV29ya2JlbmNoUGFydCBwKSB7CisJCQkJLy8gSWdub3JlLgorCQkJfQorCQl9OworCisJLyoqCisJICogUmVzb3VyY2VzIHRoYXQgaGF2ZSBiZWVuIHJlbW92ZWQgc2luY2UgbGFzdCBhY3RpdmF0aW9uLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBDb2xsZWN0aW9uPFJlc291cmNlPiByZW1vdmVkUmVzb3VyY2VzID0gbmV3IEFycmF5TGlzdDxSZXNvdXJjZT4oKTsKKworCS8qKgorCSAqIFJlc291cmNlcyB0aGF0IGhhdmUgYmVlbiBjaGFuZ2VkIHNpbmNlIGxhc3QgYWN0aXZhdGlvbi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgQ29sbGVjdGlvbjxSZXNvdXJjZT4gY2hhbmdlZFJlc291cmNlcyA9IG5ldyBBcnJheUxpc3Q8UmVzb3VyY2U+KCk7CisKKwkvKioKKwkgKiBSZXNvdXJjZXMgdGhhdCBoYXZlIGJlZW4gc2F2ZWQuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIENvbGxlY3Rpb248UmVzb3VyY2U+IHNhdmVkUmVzb3VyY2VzID0gbmV3IEFycmF5TGlzdDxSZXNvdXJjZT4oKTsKKworCS8qKgorCSAqIE1hcCB0byBzdG9yZSB0aGUgZGlhZ25vc3RpYyBhc3NvY2lhdGVkIHdpdGggYSByZXNvdXJjZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgTWFwPFJlc291cmNlLCBEaWFnbm9zdGljPiByZXNvdXJjZVRvRGlhZ25vc3RpY01hcCA9IG5ldyBMaW5rZWRIYXNoTWFwPFJlc291cmNlLCBEaWFnbm9zdGljPigpOworCisJLyoqCisJICogQ29udHJvbHMgd2hldGhlciB0aGUgcHJvYmxlbSBpbmRpY2F0aW9uIHNob3VsZCBiZSB1cGRhdGVkLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBib29sZWFuIHVwZGF0ZVByb2JsZW1JbmRpY2F0aW9uID0gdHJ1ZTsKKworCS8qKgorCSAqIEFkYXB0ZXIgdXNlZCB0byB1cGRhdGUgdGhlIHByb2JsZW0gaW5kaWNhdGlvbiB3aGVuIHJlc291cmNlcyBhcmUgZGVtYW5kZWQgbG9hZGVkLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBFQ29udGVudEFkYXB0ZXIgcHJvYmxlbUluZGljYXRpb25BZGFwdGVyID0gCisJCW5ldyBFQ29udGVudEFkYXB0ZXIoKSB7CisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyB2b2lkIG5vdGlmeUNoYW5nZWQoTm90aWZpY2F0aW9uIG5vdGlmaWNhdGlvbikgeworCQkJCWlmIChub3RpZmljYXRpb24uZ2V0Tm90aWZpZXIoKSBpbnN0YW5jZW9mIFJlc291cmNlKSB7CisJCQkJCXN3aXRjaCAobm90aWZpY2F0aW9uLmdldEZlYXR1cmVJRChSZXNvdXJjZS5jbGFzcykpIHsKKwkJCQkJCWNhc2UgUmVzb3VyY2UuUkVTT1VSQ0VfX0lTX0xPQURFRDoKKwkJCQkJCWNhc2UgUmVzb3VyY2UuUkVTT1VSQ0VfX0VSUk9SUzoKKwkJCQkJCWNhc2UgUmVzb3VyY2UuUkVTT1VSQ0VfX1dBUk5JTkdTOiB7CisJCQkJCQkJUmVzb3VyY2UgcmVzb3VyY2UgPSAoUmVzb3VyY2Upbm90aWZpY2F0aW9uLmdldE5vdGlmaWVyKCk7CisJCQkJCQkJRGlhZ25vc3RpYyBkaWFnbm9zdGljID0gYW5hbHl6ZVJlc291cmNlUHJvYmxlbXMocmVzb3VyY2UsIG51bGwpOworCQkJCQkJCWlmIChkaWFnbm9zdGljLmdldFNldmVyaXR5KCkgIT0gRGlhZ25vc3RpYy5PSykgeworCQkJCQkJCQlyZXNvdXJjZVRvRGlhZ25vc3RpY01hcC5wdXQocmVzb3VyY2UsIGRpYWdub3N0aWMpOworCQkJCQkJCX0KKwkJCQkJCQllbHNlIHsKKwkJCQkJCQkJcmVzb3VyY2VUb0RpYWdub3N0aWNNYXAucmVtb3ZlKHJlc291cmNlKTsKKwkJCQkJCQl9CisKKwkJCQkJCQlpZiAodXBkYXRlUHJvYmxlbUluZGljYXRpb24pIHsKKwkJCQkJCQkJZ2V0U2l0ZSgpLmdldFNoZWxsKCkuZ2V0RGlzcGxheSgpLmFzeW5jRXhlYworCQkJCQkJCQkJKG5ldyBSdW5uYWJsZSgpIHsKKwkJCQkJCQkJCQkgcHVibGljIHZvaWQgcnVuKCkgeworCQkJCQkJCQkJCQkgdXBkYXRlUHJvYmxlbUluZGljYXRpb24oKTsKKwkJCQkJCQkJCQkgfQorCQkJCQkJCQkJIH0pOworCQkJCQkJCX0KKwkJCQkJCQlicmVhazsKKwkJCQkJCX0KKwkJCQkJfQorCQkJCX0KKwkJCQllbHNlIHsKKwkJCQkJc3VwZXIubm90aWZ5Q2hhbmdlZChub3RpZmljYXRpb24pOworCQkJCX0KKwkJCX0KKworCQkJQE92ZXJyaWRlCisJCQlwcm90ZWN0ZWQgdm9pZCBzZXRUYXJnZXQoUmVzb3VyY2UgdGFyZ2V0KSB7CisJCQkJYmFzaWNTZXRUYXJnZXQodGFyZ2V0KTsKKwkJCX0KKworCQkJQE92ZXJyaWRlCisJCQlwcm90ZWN0ZWQgdm9pZCB1bnNldFRhcmdldChSZXNvdXJjZSB0YXJnZXQpIHsKKwkJCQliYXNpY1Vuc2V0VGFyZ2V0KHRhcmdldCk7CisJCQl9CisJCX07CisKKwkvKioKKwkgKiBUaGlzIGxpc3RlbnMgZm9yIHdvcmtzcGFjZSBjaGFuZ2VzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBJUmVzb3VyY2VDaGFuZ2VMaXN0ZW5lciByZXNvdXJjZUNoYW5nZUxpc3RlbmVyID0KKwkJbmV3IElSZXNvdXJjZUNoYW5nZUxpc3RlbmVyKCkgeworCQkJcHVibGljIHZvaWQgcmVzb3VyY2VDaGFuZ2VkKElSZXNvdXJjZUNoYW5nZUV2ZW50IGV2ZW50KSB7CisJCQkJSVJlc291cmNlRGVsdGEgZGVsdGEgPSBldmVudC5nZXREZWx0YSgpOworCQkJCXRyeSB7CisJCQkJCWNsYXNzIFJlc291cmNlRGVsdGFWaXNpdG9yIGltcGxlbWVudHMgSVJlc291cmNlRGVsdGFWaXNpdG9yIHsKKwkJCQkJCXByb3RlY3RlZCBSZXNvdXJjZVNldCByZXNvdXJjZVNldCA9IGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKTsKKwkJCQkJCXByb3RlY3RlZCBDb2xsZWN0aW9uPFJlc291cmNlPiBjaGFuZ2VkUmVzb3VyY2VzID0gbmV3IEFycmF5TGlzdDxSZXNvdXJjZT4oKTsKKwkJCQkJCXByb3RlY3RlZCBDb2xsZWN0aW9uPFJlc291cmNlPiByZW1vdmVkUmVzb3VyY2VzID0gbmV3IEFycmF5TGlzdDxSZXNvdXJjZT4oKTsKKworCQkJCQkJcHVibGljIGJvb2xlYW4gdmlzaXQoSVJlc291cmNlRGVsdGEgZGVsdGEpIHsKKwkJCQkJCQlpZiAoZGVsdGEuZ2V0UmVzb3VyY2UoKS5nZXRUeXBlKCkgPT0gSVJlc291cmNlLkZJTEUpIHsKKwkJCQkJCQkJaWYgKGRlbHRhLmdldEtpbmQoKSA9PSBJUmVzb3VyY2VEZWx0YS5SRU1PVkVEIHx8CisJCQkJCQkJCSAgICBkZWx0YS5nZXRLaW5kKCkgPT0gSVJlc291cmNlRGVsdGEuQ0hBTkdFRCAmJiBkZWx0YS5nZXRGbGFncygpICE9IElSZXNvdXJjZURlbHRhLk1BUktFUlMpIHsKKwkJCQkJCQkJCVJlc291cmNlIHJlc291cmNlID0gcmVzb3VyY2VTZXQuZ2V0UmVzb3VyY2UoVVJJLmNyZWF0ZVBsYXRmb3JtUmVzb3VyY2VVUkkoZGVsdGEuZ2V0RnVsbFBhdGgoKS50b1N0cmluZygpLCB0cnVlKSwgZmFsc2UpOworCQkJCQkJCQkJaWYgKHJlc291cmNlICE9IG51bGwpIHsKKwkJCQkJCQkJCQlpZiAoZGVsdGEuZ2V0S2luZCgpID09IElSZXNvdXJjZURlbHRhLlJFTU9WRUQpIHsKKwkJCQkJCQkJCQkJcmVtb3ZlZFJlc291cmNlcy5hZGQocmVzb3VyY2UpOworCQkJCQkJCQkJCX0KKwkJCQkJCQkJCQllbHNlIGlmICghc2F2ZWRSZXNvdXJjZXMucmVtb3ZlKHJlc291cmNlKSkgeworCQkJCQkJCQkJCQljaGFuZ2VkUmVzb3VyY2VzLmFkZChyZXNvdXJjZSk7CisJCQkJCQkJCQkJfQorCQkJCQkJCQkJfQorCQkJCQkJCQl9CisJCQkJCQkJfQorCisJCQkJCQkJcmV0dXJuIHRydWU7CisJCQkJCQl9CisKKwkJCQkJCXB1YmxpYyBDb2xsZWN0aW9uPFJlc291cmNlPiBnZXRDaGFuZ2VkUmVzb3VyY2VzKCkgeworCQkJCQkJCXJldHVybiBjaGFuZ2VkUmVzb3VyY2VzOworCQkJCQkJfQorCisJCQkJCQlwdWJsaWMgQ29sbGVjdGlvbjxSZXNvdXJjZT4gZ2V0UmVtb3ZlZFJlc291cmNlcygpIHsKKwkJCQkJCQlyZXR1cm4gcmVtb3ZlZFJlc291cmNlczsKKwkJCQkJCX0KKwkJCQkJfQorCisJCQkJCWZpbmFsIFJlc291cmNlRGVsdGFWaXNpdG9yIHZpc2l0b3IgPSBuZXcgUmVzb3VyY2VEZWx0YVZpc2l0b3IoKTsKKwkJCQkJZGVsdGEuYWNjZXB0KHZpc2l0b3IpOworCisJCQkJCWlmICghdmlzaXRvci5nZXRSZW1vdmVkUmVzb3VyY2VzKCkuaXNFbXB0eSgpKSB7CisJCQkJCQlnZXRTaXRlKCkuZ2V0U2hlbGwoKS5nZXREaXNwbGF5KCkuYXN5bmNFeGVjCisJCQkJCQkJKG5ldyBSdW5uYWJsZSgpIHsKKwkJCQkJCQkJIHB1YmxpYyB2b2lkIHJ1bigpIHsKKwkJCQkJCQkJCSByZW1vdmVkUmVzb3VyY2VzLmFkZEFsbCh2aXNpdG9yLmdldFJlbW92ZWRSZXNvdXJjZXMoKSk7CisJCQkJCQkJCQkgaWYgKCFpc0RpcnR5KCkpIHsKKwkJCQkJCQkJCQkgZ2V0U2l0ZSgpLmdldFBhZ2UoKS5jbG9zZUVkaXRvcihMb2dnZXJFZGl0b3IudGhpcywgZmFsc2UpOworCQkJCQkJCQkJIH0KKwkJCQkJCQkJIH0KKwkJCQkJCQkgfSk7CisJCQkJCX0KKworCQkJCQlpZiAoIXZpc2l0b3IuZ2V0Q2hhbmdlZFJlc291cmNlcygpLmlzRW1wdHkoKSkgeworCQkJCQkJZ2V0U2l0ZSgpLmdldFNoZWxsKCkuZ2V0RGlzcGxheSgpLmFzeW5jRXhlYworCQkJCQkJCShuZXcgUnVubmFibGUoKSB7CisJCQkJCQkJCSBwdWJsaWMgdm9pZCBydW4oKSB7CisJCQkJCQkJCQkgY2hhbmdlZFJlc291cmNlcy5hZGRBbGwodmlzaXRvci5nZXRDaGFuZ2VkUmVzb3VyY2VzKCkpOworCQkJCQkJCQkJIGlmIChnZXRTaXRlKCkuZ2V0UGFnZSgpLmdldEFjdGl2ZUVkaXRvcigpID09IExvZ2dlckVkaXRvci50aGlzKSB7CisJCQkJCQkJCQkJIGhhbmRsZUFjdGl2YXRlKCk7CisJCQkJCQkJCQkgfQorCQkJCQkJCQkgfQorCQkJCQkJCSB9KTsKKwkJCQkJfQorCQkJCX0KKwkJCQljYXRjaCAoQ29yZUV4Y2VwdGlvbiBleGNlcHRpb24pIHsKKwkJCQkJQ29yZUVkaXRvclBsdWdpbi5JTlNUQU5DRS5sb2coZXhjZXB0aW9uKTsKKwkJCQl9CisJCQl9CisJCX07CisKKwkvKioKKwkgKiBIYW5kbGVzIGFjdGl2YXRpb24gb2YgdGhlIGVkaXRvciBvciBpdCdzIGFzc29jaWF0ZWQgdmlld3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgaGFuZGxlQWN0aXZhdGUoKSB7CisJCS8vIFJlY29tcHV0ZSB0aGUgcmVhZCBvbmx5IHN0YXRlLgorCQkvLworCQlpZiAoZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVRvUmVhZE9ubHlNYXAoKSAhPSBudWxsKSB7CisJCSAgZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVRvUmVhZE9ubHlNYXAoKS5jbGVhcigpOworCisJCSAgLy8gUmVmcmVzaCBhbnkgYWN0aW9ucyB0aGF0IG1heSBiZWNvbWUgZW5hYmxlZCBvciBkaXNhYmxlZC4KKwkJICAvLworCQkgIHNldFNlbGVjdGlvbihnZXRTZWxlY3Rpb24oKSk7CisJCX0KKworCQlpZiAoIXJlbW92ZWRSZXNvdXJjZXMuaXNFbXB0eSgpKSB7CisJCQlpZiAoaGFuZGxlRGlydHlDb25mbGljdCgpKSB7CisJCQkJZ2V0U2l0ZSgpLmdldFBhZ2UoKS5jbG9zZUVkaXRvcihMb2dnZXJFZGl0b3IudGhpcywgZmFsc2UpOworCQkJfQorCQkJZWxzZSB7CisJCQkJcmVtb3ZlZFJlc291cmNlcy5jbGVhcigpOworCQkJCWNoYW5nZWRSZXNvdXJjZXMuY2xlYXIoKTsKKwkJCQlzYXZlZFJlc291cmNlcy5jbGVhcigpOworCQkJfQorCQl9CisJCWVsc2UgaWYgKCFjaGFuZ2VkUmVzb3VyY2VzLmlzRW1wdHkoKSkgeworCQkJY2hhbmdlZFJlc291cmNlcy5yZW1vdmVBbGwoc2F2ZWRSZXNvdXJjZXMpOworCQkJaGFuZGxlQ2hhbmdlZFJlc291cmNlcygpOworCQkJY2hhbmdlZFJlc291cmNlcy5jbGVhcigpOworCQkJc2F2ZWRSZXNvdXJjZXMuY2xlYXIoKTsKKwkJfQorCX0KKworCS8qKgorCSAqIEhhbmRsZXMgd2hhdCB0byBkbyB3aXRoIGNoYW5nZWQgcmVzb3VyY2VzIG9uIGFjdGl2YXRpb24uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgaGFuZGxlQ2hhbmdlZFJlc291cmNlcygpIHsKKwkJaWYgKCFjaGFuZ2VkUmVzb3VyY2VzLmlzRW1wdHkoKSAmJiAoIWlzRGlydHkoKSB8fCBoYW5kbGVEaXJ0eUNvbmZsaWN0KCkpKSB7CisJCQlpZiAoaXNEaXJ0eSgpKSB7CisJCQkJY2hhbmdlZFJlc291cmNlcy5hZGRBbGwoZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpLmdldFJlc291cmNlcygpKTsKKwkJCX0KKwkJCWVkaXRpbmdEb21haW4uZ2V0Q29tbWFuZFN0YWNrKCkuZmx1c2goKTsKKworCQkJdXBkYXRlUHJvYmxlbUluZGljYXRpb24gPSBmYWxzZTsKKwkJCWZvciAoUmVzb3VyY2UgcmVzb3VyY2UgOiBjaGFuZ2VkUmVzb3VyY2VzKSB7CisJCQkJaWYgKHJlc291cmNlLmlzTG9hZGVkKCkpIHsKKwkJCQkJcmVzb3VyY2UudW5sb2FkKCk7CisJCQkJCXRyeSB7CisJCQkJCQlyZXNvdXJjZS5sb2FkKENvbGxlY3Rpb25zLkVNUFRZX01BUCk7CisJCQkJCX0KKwkJCQkJY2F0Y2ggKElPRXhjZXB0aW9uIGV4Y2VwdGlvbikgeworCQkJCQkJaWYgKCFyZXNvdXJjZVRvRGlhZ25vc3RpY01hcC5jb250YWluc0tleShyZXNvdXJjZSkpIHsKKwkJCQkJCQlyZXNvdXJjZVRvRGlhZ25vc3RpY01hcC5wdXQocmVzb3VyY2UsIGFuYWx5emVSZXNvdXJjZVByb2JsZW1zKHJlc291cmNlLCBleGNlcHRpb24pKTsKKwkJCQkJCX0KKwkJCQkJfQorCQkJCX0KKwkJCX0KKworCQkJaWYgKEFkYXB0ZXJGYWN0b3J5RWRpdGluZ0RvbWFpbi5pc1N0YWxlKGVkaXRvclNlbGVjdGlvbikpIHsKKwkJCQlzZXRTZWxlY3Rpb24oU3RydWN0dXJlZFNlbGVjdGlvbi5FTVBUWSk7CisJCQl9CisKKwkJCXVwZGF0ZVByb2JsZW1JbmRpY2F0aW9uID0gdHJ1ZTsKKwkJCXVwZGF0ZVByb2JsZW1JbmRpY2F0aW9uKCk7CisJCX0KKwl9CisgIAorCS8qKgorCSAqIFVwZGF0ZXMgdGhlIHByb2JsZW1zIGluZGljYXRpb24gd2l0aCB0aGUgaW5mb3JtYXRpb24gZGVzY3JpYmVkIGluIHRoZSBzcGVjaWZpZWQgZGlhZ25vc3RpYy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCB1cGRhdGVQcm9ibGVtSW5kaWNhdGlvbigpIHsKKwkJaWYgKHVwZGF0ZVByb2JsZW1JbmRpY2F0aW9uKSB7CisJCQlCYXNpY0RpYWdub3N0aWMgZGlhZ25vc3RpYyA9CisJCQkJbmV3IEJhc2ljRGlhZ25vc3RpYworCQkJCQkoRGlhZ25vc3RpYy5PSywKKwkJCQkJICJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZWRpdG9yIiwgLy8kTk9OLU5MUy0xJAorCQkJCQkgMCwKKwkJCQkJIG51bGwsCisJCQkJCSBuZXcgT2JqZWN0IFtdIHsgZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpIH0pOworCQkJZm9yIChEaWFnbm9zdGljIGNoaWxkRGlhZ25vc3RpYyA6IHJlc291cmNlVG9EaWFnbm9zdGljTWFwLnZhbHVlcygpKSB7CisJCQkJaWYgKGNoaWxkRGlhZ25vc3RpYy5nZXRTZXZlcml0eSgpICE9IERpYWdub3N0aWMuT0spIHsKKwkJCQkJZGlhZ25vc3RpYy5hZGQoY2hpbGREaWFnbm9zdGljKTsKKwkJCQl9CisJCQl9CisKKwkJCWludCBsYXN0RWRpdG9yUGFnZSA9IGdldFBhZ2VDb3VudCgpIC0gMTsKKwkJCWlmIChsYXN0RWRpdG9yUGFnZSA+PSAwICYmIGdldEVkaXRvcihsYXN0RWRpdG9yUGFnZSkgaW5zdGFuY2VvZiBQcm9ibGVtRWRpdG9yUGFydCkgeworCQkJCSgoUHJvYmxlbUVkaXRvclBhcnQpZ2V0RWRpdG9yKGxhc3RFZGl0b3JQYWdlKSkuc2V0RGlhZ25vc3RpYyhkaWFnbm9zdGljKTsKKwkJCQlpZiAoZGlhZ25vc3RpYy5nZXRTZXZlcml0eSgpICE9IERpYWdub3N0aWMuT0spIHsKKwkJCQkJc2V0QWN0aXZlUGFnZShsYXN0RWRpdG9yUGFnZSk7CisJCQkJfQorCQkJfQorCQkJZWxzZSBpZiAoZGlhZ25vc3RpYy5nZXRTZXZlcml0eSgpICE9IERpYWdub3N0aWMuT0spIHsKKwkJCQlQcm9ibGVtRWRpdG9yUGFydCBwcm9ibGVtRWRpdG9yUGFydCA9IG5ldyBQcm9ibGVtRWRpdG9yUGFydCgpOworCQkJCXByb2JsZW1FZGl0b3JQYXJ0LnNldERpYWdub3N0aWMoZGlhZ25vc3RpYyk7CisJCQkJcHJvYmxlbUVkaXRvclBhcnQuc2V0TWFya2VySGVscGVyKG1hcmtlckhlbHBlcik7CisJCQkJdHJ5IHsKKwkJCQkJYWRkUGFnZSgrK2xhc3RFZGl0b3JQYWdlLCBwcm9ibGVtRWRpdG9yUGFydCwgZ2V0RWRpdG9ySW5wdXQoKSk7CisJCQkJCXNldFBhZ2VUZXh0KGxhc3RFZGl0b3JQYWdlLCBwcm9ibGVtRWRpdG9yUGFydC5nZXRQYXJ0TmFtZSgpKTsKKwkJCQkJc2V0QWN0aXZlUGFnZShsYXN0RWRpdG9yUGFnZSk7CisJCQkJCXNob3dUYWJzKCk7CisJCQkJfQorCQkJCWNhdGNoIChQYXJ0SW5pdEV4Y2VwdGlvbiBleGNlcHRpb24pIHsKKwkJCQkJQ29yZUVkaXRvclBsdWdpbi5JTlNUQU5DRS5sb2coZXhjZXB0aW9uKTsKKwkJCQl9CisJCQl9CisKKwkJCWlmIChtYXJrZXJIZWxwZXIuaGFzTWFya2VycyhlZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkpKSB7CisJCQkJbWFya2VySGVscGVyLmRlbGV0ZU1hcmtlcnMoZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpKTsKKwkJCQlpZiAoZGlhZ25vc3RpYy5nZXRTZXZlcml0eSgpICE9IERpYWdub3N0aWMuT0spIHsKKwkJCQkJdHJ5IHsKKwkJCQkJCW1hcmtlckhlbHBlci5jcmVhdGVNYXJrZXJzKGRpYWdub3N0aWMpOworCQkJCQl9CisJCQkJCWNhdGNoIChDb3JlRXhjZXB0aW9uIGV4Y2VwdGlvbikgeworCQkJCQkJQ29yZUVkaXRvclBsdWdpbi5JTlNUQU5DRS5sb2coZXhjZXB0aW9uKTsKKwkJCQkJfQorCQkJCX0KKwkJCX0KKwkJfQorCX0KKworCS8qKgorCSAqIFNob3dzIGEgZGlhbG9nIHRoYXQgYXNrcyBpZiBjb25mbGljdGluZyBjaGFuZ2VzIHNob3VsZCBiZSBkaXNjYXJkZWQuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIGJvb2xlYW4gaGFuZGxlRGlydHlDb25mbGljdCgpIHsKKwkJcmV0dXJuCisJCQlNZXNzYWdlRGlhbG9nLm9wZW5RdWVzdGlvbgorCQkJCShnZXRTaXRlKCkuZ2V0U2hlbGwoKSwKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfRmlsZUNvbmZsaWN0X2xhYmVsIiksIC8vJE5PTi1OTFMtMSQKKwkJCQkgZ2V0U3RyaW5nKCJfV0FSTl9GaWxlQ29uZmxpY3QiKSk7IC8vJE5PTi1OTFMtMSQKKwl9CisKKwkvKioKKwkgKiBUaGlzIGNyZWF0ZXMgYSBtb2RlbCBlZGl0b3IuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIExvZ2dlckVkaXRvcigpIHsKKwkJc3VwZXIoKTsKKwkJaW5pdGlhbGl6ZUVkaXRpbmdEb21haW4oKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHNldHMgdXAgdGhlIGVkaXRpbmcgZG9tYWluIGZvciB0aGUgbW9kZWwgZWRpdG9yLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIGluaXRpYWxpemVFZGl0aW5nRG9tYWluKCkgeworCQkvLyBDcmVhdGUgYW4gYWRhcHRlciBmYWN0b3J5IHRoYXQgeWllbGRzIGl0ZW0gcHJvdmlkZXJzLgorCQkvLworCQlhZGFwdGVyRmFjdG9yeSA9IG5ldyBDb21wb3NlZEFkYXB0ZXJGYWN0b3J5KENvbXBvc2VkQWRhcHRlckZhY3RvcnkuRGVzY3JpcHRvci5SZWdpc3RyeS5JTlNUQU5DRSk7CisKKwkJYWRhcHRlckZhY3RvcnkuYWRkQWRhcHRlckZhY3RvcnkobmV3IFJlc291cmNlSXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkoKSk7CisJCWFkYXB0ZXJGYWN0b3J5LmFkZEFkYXB0ZXJGYWN0b3J5KG5ldyBDb21tb25JdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSgpKTsKKwkJYWRhcHRlckZhY3RvcnkuYWRkQWRhcHRlckZhY3RvcnkobmV3IEV4cGVyaW1lbnRJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSgpKTsKKwkJYWRhcHRlckZhY3RvcnkuYWRkQWRhcHRlckZhY3RvcnkobmV3IEdyYXBoSXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkoKSk7CisJCWFkYXB0ZXJGYWN0b3J5LmFkZEFkYXB0ZXJGYWN0b3J5KG5ldyBNb2RlbEl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5KCkpOworCQlhZGFwdGVyRmFjdG9yeS5hZGRBZGFwdGVyRmFjdG9yeShuZXcgTW9kaWZpZXJJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSgpKTsKKwkJYWRhcHRlckZhY3RvcnkuYWRkQWRhcHRlckZhY3RvcnkobmV3IFByZWRpY2F0ZUl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5KCkpOworCQlhZGFwdGVyRmFjdG9yeS5hZGRBZGFwdGVyRmFjdG9yeShuZXcgU2NlbmFyaW9JdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSgpKTsKKwkJYWRhcHRlckZhY3RvcnkuYWRkQWRhcHRlckZhY3RvcnkobmV3IFNlcXVlbmNlckl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5KCkpOworCQlhZGFwdGVyRmFjdG9yeS5hZGRBZGFwdGVyRmFjdG9yeShuZXcgVHJpZ2dlckl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5KCkpOworCQlhZGFwdGVyRmFjdG9yeS5hZGRBZGFwdGVyRmFjdG9yeShuZXcgU29sdmVySXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkoKSk7CisJCWFkYXB0ZXJGYWN0b3J5LmFkZEFkYXB0ZXJGYWN0b3J5KG5ldyBMb2dnZXJJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSgpKTsKKwkJYWRhcHRlckZhY3RvcnkuYWRkQWRhcHRlckZhY3RvcnkobmV3IEVjb3JlSXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkoKSk7CisJCWFkYXB0ZXJGYWN0b3J5LmFkZEFkYXB0ZXJGYWN0b3J5KG5ldyBSZWZsZWN0aXZlSXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkoKSk7CisKKwkJLy8gQ3JlYXRlIHRoZSBjb21tYW5kIHN0YWNrIHRoYXQgd2lsbCBub3RpZnkgdGhpcyBlZGl0b3IgYXMgY29tbWFuZHMgYXJlIGV4ZWN1dGVkLgorCQkvLworCQlCYXNpY0NvbW1hbmRTdGFjayBjb21tYW5kU3RhY2sgPSBuZXcgQmFzaWNDb21tYW5kU3RhY2soKTsKKworCQkvLyBBZGQgYSBsaXN0ZW5lciB0byBzZXQgdGhlIG1vc3QgcmVjZW50IGNvbW1hbmQncyBhZmZlY3RlZCBvYmplY3RzIHRvIGJlIHRoZSBzZWxlY3Rpb24gb2YgdGhlIHZpZXdlciB3aXRoIGZvY3VzLgorCQkvLworCQljb21tYW5kU3RhY2suYWRkQ29tbWFuZFN0YWNrTGlzdGVuZXIKKwkJCShuZXcgQ29tbWFuZFN0YWNrTGlzdGVuZXIoKSB7CisJCQkJIHB1YmxpYyB2b2lkIGNvbW1hbmRTdGFja0NoYW5nZWQoZmluYWwgRXZlbnRPYmplY3QgZXZlbnQpIHsKKwkJCQkJIGdldENvbnRhaW5lcigpLmdldERpc3BsYXkoKS5hc3luY0V4ZWMKKwkJCQkJCSAobmV3IFJ1bm5hYmxlKCkgeworCQkJCQkJCSAgcHVibGljIHZvaWQgcnVuKCkgeworCQkJCQkJCQkgIGZpcmVQcm9wZXJ0eUNoYW5nZShJRWRpdG9yUGFydC5QUk9QX0RJUlRZKTsKKworCQkJCQkJCQkgIC8vIFRyeSB0byBzZWxlY3QgdGhlIGFmZmVjdGVkIG9iamVjdHMuCisJCQkJCQkJCSAgLy8KKwkJCQkJCQkJICBDb21tYW5kIG1vc3RSZWNlbnRDb21tYW5kID0gKChDb21tYW5kU3RhY2spZXZlbnQuZ2V0U291cmNlKCkpLmdldE1vc3RSZWNlbnRDb21tYW5kKCk7CisJCQkJCQkJCSAgaWYgKG1vc3RSZWNlbnRDb21tYW5kICE9IG51bGwpIHsKKwkJCQkJCQkJCSAgc2V0U2VsZWN0aW9uVG9WaWV3ZXIobW9zdFJlY2VudENvbW1hbmQuZ2V0QWZmZWN0ZWRPYmplY3RzKCkpOworCQkJCQkJCQkgIH0KKwkJCQkJCQkJICBpZiAocHJvcGVydHlTaGVldFBhZ2UgIT0gbnVsbCAmJiAhcHJvcGVydHlTaGVldFBhZ2UuZ2V0Q29udHJvbCgpLmlzRGlzcG9zZWQoKSkgeworCQkJCQkJCQkJICBwcm9wZXJ0eVNoZWV0UGFnZS5yZWZyZXNoKCk7CisJCQkJCQkJCSAgfQorCQkJCQkJCSAgfQorCQkJCQkJICB9KTsKKwkJCQkgfQorCQkJIH0pOworCisJCS8vIENyZWF0ZSB0aGUgZWRpdGluZyBkb21haW4gd2l0aCBhIHNwZWNpYWwgY29tbWFuZCBzdGFjay4KKwkJLy8KKwkJZWRpdGluZ0RvbWFpbiA9IG5ldyBBZGFwdGVyRmFjdG9yeUVkaXRpbmdEb21haW4oYWRhcHRlckZhY3RvcnksIGNvbW1hbmRTdGFjaywgbmV3IEhhc2hNYXA8UmVzb3VyY2UsIEJvb2xlYW4+KCkpOworCX0KKworCS8qKgorCSAqIFRoaXMgaXMgaGVyZSBmb3IgdGhlIGxpc3RlbmVyIHRvIGJlIGFibGUgdG8gY2FsbCBpdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwkJCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIGZpcmVQcm9wZXJ0eUNoYW5nZShpbnQgYWN0aW9uKSB7CisJCXN1cGVyLmZpcmVQcm9wZXJ0eUNoYW5nZShhY3Rpb24pOworCX0KKworCS8qKgorCSAqIFRoaXMgc2V0cyB0aGUgc2VsZWN0aW9uIGludG8gd2hpY2hldmVyIHZpZXdlciBpcyBhY3RpdmUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgc2V0U2VsZWN0aW9uVG9WaWV3ZXIoQ29sbGVjdGlvbjw/PiBjb2xsZWN0aW9uKSB7CisJCWZpbmFsIENvbGxlY3Rpb248Pz4gdGhlU2VsZWN0aW9uID0gY29sbGVjdGlvbjsKKwkJLy8gTWFrZSBzdXJlIGl0J3Mgb2theS4KKwkJLy8KKwkJaWYgKHRoZVNlbGVjdGlvbiAhPSBudWxsICYmICF0aGVTZWxlY3Rpb24uaXNFbXB0eSgpKSB7CisJCQlSdW5uYWJsZSBydW5uYWJsZSA9CisJCQkJbmV3IFJ1bm5hYmxlKCkgeworCQkJCQlwdWJsaWMgdm9pZCBydW4oKSB7CisJCQkJCQkvLyBUcnkgdG8gc2VsZWN0IHRoZSBpdGVtcyBpbiB0aGUgY3VycmVudCBjb250ZW50IHZpZXdlciBvZiB0aGUgZWRpdG9yLgorCQkJCQkJLy8KKwkJCQkJCWlmIChjdXJyZW50Vmlld2VyICE9IG51bGwpIHsKKwkJCQkJCQljdXJyZW50Vmlld2VyLnNldFNlbGVjdGlvbihuZXcgU3RydWN0dXJlZFNlbGVjdGlvbih0aGVTZWxlY3Rpb24udG9BcnJheSgpKSwgdHJ1ZSk7CisJCQkJCQl9CisJCQkJCX0KKwkJCQl9OworCQkJZ2V0U2l0ZSgpLmdldFNoZWxsKCkuZ2V0RGlzcGxheSgpLmFzeW5jRXhlYyhydW5uYWJsZSk7CisJCX0KKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgdGhlIGVkaXRpbmcgZG9tYWluIGFzIHJlcXVpcmVkIGJ5IHRoZSB7QGxpbmsgSUVkaXRpbmdEb21haW5Qcm92aWRlcn0gaW50ZXJmYWNlLgorCSAqIFRoaXMgaXMgaW1wb3J0YW50IGZvciBpbXBsZW1lbnRpbmcgdGhlIHN0YXRpYyBtZXRob2RzIG9mIHtAbGluayBBZGFwdGVyRmFjdG9yeUVkaXRpbmdEb21haW59CisJICogYW5kIGZvciBzdXBwb3J0aW5nIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5hY3Rpb24uQ29tbWFuZEFjdGlvbn0uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVkaXRpbmdEb21haW4gZ2V0RWRpdGluZ0RvbWFpbigpIHsKKwkJcmV0dXJuIGVkaXRpbmdEb21haW47CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIGNsYXNzIFJldmVyc2VBZGFwdGVyRmFjdG9yeUNvbnRlbnRQcm92aWRlciBleHRlbmRzIEFkYXB0ZXJGYWN0b3J5Q29udGVudFByb3ZpZGVyIHsKKwkJLyoqCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlwdWJsaWMgUmV2ZXJzZUFkYXB0ZXJGYWN0b3J5Q29udGVudFByb3ZpZGVyKEFkYXB0ZXJGYWN0b3J5IGFkYXB0ZXJGYWN0b3J5KSB7CisJCQlzdXBlcihhZGFwdGVyRmFjdG9yeSk7CisJCX0KKworCQkvKioKKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUBPdmVycmlkZQorCQlwdWJsaWMgT2JqZWN0IFtdIGdldEVsZW1lbnRzKE9iamVjdCBvYmplY3QpIHsKKwkJCU9iamVjdCBwYXJlbnQgPSBzdXBlci5nZXRQYXJlbnQob2JqZWN0KTsKKwkJCXJldHVybiAocGFyZW50ID09IG51bGwgPyBDb2xsZWN0aW9ucy5FTVBUWV9TRVQgOiBDb2xsZWN0aW9ucy5zaW5nbGV0b24ocGFyZW50KSkudG9BcnJheSgpOworCQl9CisKKwkJLyoqCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlAT3ZlcnJpZGUKKwkJcHVibGljIE9iamVjdCBbXSBnZXRDaGlsZHJlbihPYmplY3Qgb2JqZWN0KSB7CisJCQlPYmplY3QgcGFyZW50ID0gc3VwZXIuZ2V0UGFyZW50KG9iamVjdCk7CisJCQlyZXR1cm4gKHBhcmVudCA9PSBudWxsID8gQ29sbGVjdGlvbnMuRU1QVFlfU0VUIDogQ29sbGVjdGlvbnMuc2luZ2xldG9uKHBhcmVudCkpLnRvQXJyYXkoKTsKKwkJfQorCisJCS8qKgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJQE92ZXJyaWRlCisJCXB1YmxpYyBib29sZWFuIGhhc0NoaWxkcmVuKE9iamVjdCBvYmplY3QpIHsKKwkJCU9iamVjdCBwYXJlbnQgPSBzdXBlci5nZXRQYXJlbnQob2JqZWN0KTsKKwkJCXJldHVybiBwYXJlbnQgIT0gbnVsbDsKKwkJfQorCisJCS8qKgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJQE92ZXJyaWRlCisJCXB1YmxpYyBPYmplY3QgZ2V0UGFyZW50KE9iamVjdCBvYmplY3QpIHsKKwkJCXJldHVybiBudWxsOworCQl9CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgc2V0Q3VycmVudFZpZXdlclBhbmUoVmlld2VyUGFuZSB2aWV3ZXJQYW5lKSB7CisJCWlmIChjdXJyZW50Vmlld2VyUGFuZSAhPSB2aWV3ZXJQYW5lKSB7CisJCQlpZiAoY3VycmVudFZpZXdlclBhbmUgIT0gbnVsbCkgeworCQkJCWN1cnJlbnRWaWV3ZXJQYW5lLnNob3dGb2N1cyhmYWxzZSk7CisJCQl9CisJCQljdXJyZW50Vmlld2VyUGFuZSA9IHZpZXdlclBhbmU7CisJCX0KKwkJc2V0Q3VycmVudFZpZXdlcihjdXJyZW50Vmlld2VyUGFuZS5nZXRWaWV3ZXIoKSk7CisJfQorCisJLyoqCisJICogVGhpcyBtYWtlcyBzdXJlIHRoYXQgb25lIGNvbnRlbnQgdmlld2VyLCBlaXRoZXIgZm9yIHRoZSBjdXJyZW50IHBhZ2Ugb3IgdGhlIG91dGxpbmUgdmlldywgaWYgaXQgaGFzIGZvY3VzLAorCSAqIGlzIHRoZSBjdXJyZW50IG9uZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRDdXJyZW50Vmlld2VyKFZpZXdlciB2aWV3ZXIpIHsKKwkJLy8gSWYgaXQgaXMgY2hhbmdpbmcuLi4KKwkJLy8KKwkJaWYgKGN1cnJlbnRWaWV3ZXIgIT0gdmlld2VyKSB7CisJCQlpZiAoc2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyID09IG51bGwpIHsKKwkJCQkvLyBDcmVhdGUgdGhlIGxpc3RlbmVyIG9uIGRlbWFuZC4KKwkJCQkvLworCQkJCXNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lciA9CisJCQkJCW5ldyBJU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyKCkgeworCQkJCQkJLy8gVGhpcyBqdXN0IG5vdGlmaWVzIHRob3NlIHRoaW5ncyB0aGF0IGFyZSBhZmZlY3RlZCBieSB0aGUgc2VjdGlvbi4KKwkJCQkJCS8vCisJCQkJCQlwdWJsaWMgdm9pZCBzZWxlY3Rpb25DaGFuZ2VkKFNlbGVjdGlvbkNoYW5nZWRFdmVudCBzZWxlY3Rpb25DaGFuZ2VkRXZlbnQpIHsKKwkJCQkJCQlzZXRTZWxlY3Rpb24oc2VsZWN0aW9uQ2hhbmdlZEV2ZW50LmdldFNlbGVjdGlvbigpKTsKKwkJCQkJCX0KKwkJCQkJfTsKKwkJCX0KKworCQkJLy8gU3RvcCBsaXN0ZW5pbmcgdG8gdGhlIG9sZCBvbmUuCisJCQkvLworCQkJaWYgKGN1cnJlbnRWaWV3ZXIgIT0gbnVsbCkgeworCQkJCWN1cnJlbnRWaWV3ZXIucmVtb3ZlU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyKHNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcik7CisJCQl9CisKKwkJCS8vIFN0YXJ0IGxpc3RlbmluZyB0byB0aGUgbmV3IG9uZS4KKwkJCS8vCisJCQlpZiAodmlld2VyICE9IG51bGwpIHsKKwkJCQl2aWV3ZXIuYWRkU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyKHNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcik7CisJCQl9CisKKwkJCS8vIFJlbWVtYmVyIGl0LgorCQkJLy8KKwkJCWN1cnJlbnRWaWV3ZXIgPSB2aWV3ZXI7CisKKwkJCS8vIFNldCB0aGUgZWRpdG9ycyBzZWxlY3Rpb24gYmFzZWQgb24gdGhlIGN1cnJlbnQgdmlld2VyJ3Mgc2VsZWN0aW9uLgorCQkJLy8KKwkJCXNldFNlbGVjdGlvbihjdXJyZW50Vmlld2VyID09IG51bGwgPyBTdHJ1Y3R1cmVkU2VsZWN0aW9uLkVNUFRZIDogY3VycmVudFZpZXdlci5nZXRTZWxlY3Rpb24oKSk7CisJCX0KKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgdGhlIHZpZXdlciBhcyByZXF1aXJlZCBieSB0aGUge0BsaW5rIElWaWV3ZXJQcm92aWRlcn0gaW50ZXJmYWNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBWaWV3ZXIgZ2V0Vmlld2VyKCkgeworCQlyZXR1cm4gY3VycmVudFZpZXdlcjsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGNyZWF0ZXMgYSBjb250ZXh0IG1lbnUgZm9yIHRoZSB2aWV3ZXIgYW5kIGFkZHMgYSBsaXN0ZW5lciBhcyB3ZWxsIHJlZ2lzdGVyaW5nIHRoZSBtZW51IGZvciBleHRlbnNpb24uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgY3JlYXRlQ29udGV4dE1lbnVGb3IoU3RydWN0dXJlZFZpZXdlciB2aWV3ZXIpIHsKKwkJTWVudU1hbmFnZXIgY29udGV4dE1lbnUgPSBuZXcgTWVudU1hbmFnZXIoIiNQb3BVcCIpOyAvLyROT04tTkxTLTEkCisJCWNvbnRleHRNZW51LmFkZChuZXcgU2VwYXJhdG9yKCJhZGRpdGlvbnMiKSk7IC8vJE5PTi1OTFMtMSQKKwkJY29udGV4dE1lbnUuc2V0UmVtb3ZlQWxsV2hlblNob3duKHRydWUpOworCQljb250ZXh0TWVudS5hZGRNZW51TGlzdGVuZXIodGhpcyk7CisJCU1lbnUgbWVudT0gY29udGV4dE1lbnUuY3JlYXRlQ29udGV4dE1lbnUodmlld2VyLmdldENvbnRyb2woKSk7CisJCXZpZXdlci5nZXRDb250cm9sKCkuc2V0TWVudShtZW51KTsKKwkJZ2V0U2l0ZSgpLnJlZ2lzdGVyQ29udGV4dE1lbnUoY29udGV4dE1lbnUsIG5ldyBVbndyYXBwaW5nU2VsZWN0aW9uUHJvdmlkZXIodmlld2VyKSk7CisKKwkJaW50IGRuZE9wZXJhdGlvbnMgPSBETkQuRFJPUF9DT1BZIHwgRE5ELkRST1BfTU9WRSB8IERORC5EUk9QX0xJTks7CisJCVRyYW5zZmVyW10gdHJhbnNmZXJzID0gbmV3IFRyYW5zZmVyW10geyBMb2NhbFRyYW5zZmVyLmdldEluc3RhbmNlKCkgfTsKKwkJdmlld2VyLmFkZERyYWdTdXBwb3J0KGRuZE9wZXJhdGlvbnMsIHRyYW5zZmVycywgbmV3IFZpZXdlckRyYWdBZGFwdGVyKHZpZXdlcikpOworCQl2aWV3ZXIuYWRkRHJvcFN1cHBvcnQoZG5kT3BlcmF0aW9ucywgdHJhbnNmZXJzLCBuZXcgRWRpdGluZ0RvbWFpblZpZXdlckRyb3BBZGFwdGVyKGVkaXRpbmdEb21haW4sIHZpZXdlcikpOworCX0KKworCS8qKgorCSAqIFRoaXMgaXMgdGhlIG1ldGhvZCBjYWxsZWQgdG8gbG9hZCBhIHJlc291cmNlIGludG8gdGhlIGVkaXRpbmcgZG9tYWluJ3MgcmVzb3VyY2Ugc2V0IGJhc2VkIG9uIHRoZSBlZGl0b3IncyBpbnB1dC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBjcmVhdGVNb2RlbCgpIHsKKwkJVVJJIHJlc291cmNlVVJJID0gRWRpdFVJVXRpbC5nZXRVUkkoZ2V0RWRpdG9ySW5wdXQoKSk7CisJCUV4Y2VwdGlvbiBleGNlcHRpb24gPSBudWxsOworCQlSZXNvdXJjZSByZXNvdXJjZSA9IG51bGw7CisJCXRyeSB7CisJCQkvLyBMb2FkIHRoZSByZXNvdXJjZSB0aHJvdWdoIHRoZSBlZGl0aW5nIGRvbWFpbi4KKwkJCS8vCisJCQlyZXNvdXJjZSA9IGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKS5nZXRSZXNvdXJjZShyZXNvdXJjZVVSSSwgdHJ1ZSk7CisJCX0KKwkJY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CisJCQlleGNlcHRpb24gPSBlOworCQkJcmVzb3VyY2UgPSBlZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkuZ2V0UmVzb3VyY2UocmVzb3VyY2VVUkksIGZhbHNlKTsKKwkJfQorCisJCURpYWdub3N0aWMgZGlhZ25vc3RpYyA9IGFuYWx5emVSZXNvdXJjZVByb2JsZW1zKHJlc291cmNlLCBleGNlcHRpb24pOworCQlpZiAoZGlhZ25vc3RpYy5nZXRTZXZlcml0eSgpICE9IERpYWdub3N0aWMuT0spIHsKKwkJCXJlc291cmNlVG9EaWFnbm9zdGljTWFwLnB1dChyZXNvdXJjZSwgIGFuYWx5emVSZXNvdXJjZVByb2JsZW1zKHJlc291cmNlLCBleGNlcHRpb24pKTsKKwkJfQorCQllZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkuZUFkYXB0ZXJzKCkuYWRkKHByb2JsZW1JbmRpY2F0aW9uQWRhcHRlcik7CisJfQorCisJLyoqCisJICogUmV0dXJucyBhIGRpYWdub3N0aWMgZGVzY3JpYmluZyB0aGUgZXJyb3JzIGFuZCB3YXJuaW5ncyBsaXN0ZWQgaW4gdGhlIHJlc291cmNlCisJICogYW5kIHRoZSBzcGVjaWZpZWQgZXhjZXB0aW9uIChpZiBhbnkpLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBEaWFnbm9zdGljIGFuYWx5emVSZXNvdXJjZVByb2JsZW1zKFJlc291cmNlIHJlc291cmNlLCBFeGNlcHRpb24gZXhjZXB0aW9uKSB7CisJCWlmICghcmVzb3VyY2UuZ2V0RXJyb3JzKCkuaXNFbXB0eSgpIHx8ICFyZXNvdXJjZS5nZXRXYXJuaW5ncygpLmlzRW1wdHkoKSkgeworCQkJQmFzaWNEaWFnbm9zdGljIGJhc2ljRGlhZ25vc3RpYyA9CisJCQkJbmV3IEJhc2ljRGlhZ25vc3RpYworCQkJCQkoRGlhZ25vc3RpYy5FUlJPUiwKKwkJCQkJICJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZWRpdG9yIiwgLy8kTk9OLU5MUy0xJAorCQkJCQkgMCwKKwkJCQkJIGdldFN0cmluZygiX1VJX0NyZWF0ZU1vZGVsRXJyb3JfbWVzc2FnZSIsIHJlc291cmNlLmdldFVSSSgpKSwgLy8kTk9OLU5MUy0xJAorCQkJCQkgbmV3IE9iamVjdCBbXSB7IGV4Y2VwdGlvbiA9PSBudWxsID8gKE9iamVjdClyZXNvdXJjZSA6IGV4Y2VwdGlvbiB9KTsKKwkJCWJhc2ljRGlhZ25vc3RpYy5tZXJnZShFY29yZVV0aWwuY29tcHV0ZURpYWdub3N0aWMocmVzb3VyY2UsIHRydWUpKTsKKwkJCXJldHVybiBiYXNpY0RpYWdub3N0aWM7CisJCX0KKwkJZWxzZSBpZiAoZXhjZXB0aW9uICE9IG51bGwpIHsKKwkJCXJldHVybgorCQkJCW5ldyBCYXNpY0RpYWdub3N0aWMKKwkJCQkJKERpYWdub3N0aWMuRVJST1IsCisJCQkJCSAib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmVkaXRvciIsIC8vJE5PTi1OTFMtMSQKKwkJCQkJIDAsCisJCQkJCSBnZXRTdHJpbmcoIl9VSV9DcmVhdGVNb2RlbEVycm9yX21lc3NhZ2UiLCByZXNvdXJjZS5nZXRVUkkoKSksIC8vJE5PTi1OTFMtMSQKKwkJCQkJIG5ldyBPYmplY3RbXSB7IGV4Y2VwdGlvbiB9KTsKKwkJfQorCQllbHNlIHsKKwkJCXJldHVybiBEaWFnbm9zdGljLk9LX0lOU1RBTkNFOworCQl9CisJfQorCisJLyoqCisJICogVGhpcyBpcyB0aGUgbWV0aG9kIHVzZWQgYnkgdGhlIGZyYW1ld29yayB0byBpbnN0YWxsIHlvdXIgb3duIGNvbnRyb2xzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGNyZWF0ZVBhZ2VzKCkgeworCQkvLyBDcmVhdGVzIHRoZSBtb2RlbCBmcm9tIHRoZSBlZGl0b3IgaW5wdXQKKwkJLy8KKwkJY3JlYXRlTW9kZWwoKTsKKworCQkvLyBPbmx5IGNyZWF0ZXMgdGhlIG90aGVyIHBhZ2VzIGlmIHRoZXJlIGlzIHNvbWV0aGluZyB0aGF0IGNhbiBiZSBlZGl0ZWQKKwkJLy8KKwkJaWYgKCFnZXRFZGl0aW5nRG9tYWluKCkuZ2V0UmVzb3VyY2VTZXQoKS5nZXRSZXNvdXJjZXMoKS5pc0VtcHR5KCkpIHsKKwkJCS8vIENyZWF0ZSBhIHBhZ2UgZm9yIHRoZSBzZWxlY3Rpb24gdHJlZSB2aWV3LgorCQkJLy8KKwkJCXsKKwkJCQlWaWV3ZXJQYW5lIHZpZXdlclBhbmUgPQorCQkJCQluZXcgVmlld2VyUGFuZShnZXRTaXRlKCkuZ2V0UGFnZSgpLCBMb2dnZXJFZGl0b3IudGhpcykgeworCQkJCQkJQE92ZXJyaWRlCisJCQkJCQlwdWJsaWMgVmlld2VyIGNyZWF0ZVZpZXdlcihDb21wb3NpdGUgY29tcG9zaXRlKSB7CisJCQkJCQkJVHJlZSB0cmVlID0gbmV3IFRyZWUoY29tcG9zaXRlLCBTV1QuTVVMVEkpOworCQkJCQkJCVRyZWVWaWV3ZXIgbmV3VHJlZVZpZXdlciA9IG5ldyBUcmVlVmlld2VyKHRyZWUpOworCQkJCQkJCXJldHVybiBuZXdUcmVlVmlld2VyOworCQkJCQkJfQorCQkJCQkJQE92ZXJyaWRlCisJCQkJCQlwdWJsaWMgdm9pZCByZXF1ZXN0QWN0aXZhdGlvbigpIHsKKwkJCQkJCQlzdXBlci5yZXF1ZXN0QWN0aXZhdGlvbigpOworCQkJCQkJCXNldEN1cnJlbnRWaWV3ZXJQYW5lKHRoaXMpOworCQkJCQkJfQorCQkJCQl9OworCQkJCXZpZXdlclBhbmUuY3JlYXRlQ29udHJvbChnZXRDb250YWluZXIoKSk7CisKKwkJCQlzZWxlY3Rpb25WaWV3ZXIgPSAoVHJlZVZpZXdlcil2aWV3ZXJQYW5lLmdldFZpZXdlcigpOworCQkJCXNlbGVjdGlvblZpZXdlci5zZXRDb250ZW50UHJvdmlkZXIobmV3IEFkYXB0ZXJGYWN0b3J5Q29udGVudFByb3ZpZGVyKGFkYXB0ZXJGYWN0b3J5KSk7CisKKwkJCQlzZWxlY3Rpb25WaWV3ZXIuc2V0TGFiZWxQcm92aWRlcihuZXcgQWRhcHRlckZhY3RvcnlMYWJlbFByb3ZpZGVyKGFkYXB0ZXJGYWN0b3J5KSk7CisJCQkJc2VsZWN0aW9uVmlld2VyLnNldElucHV0KGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKSk7CisJCQkJc2VsZWN0aW9uVmlld2VyLnNldFNlbGVjdGlvbihuZXcgU3RydWN0dXJlZFNlbGVjdGlvbihlZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkuZ2V0UmVzb3VyY2VzKCkuZ2V0KDApKSwgdHJ1ZSk7CisJCQkJdmlld2VyUGFuZS5zZXRUaXRsZShlZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkpOworCisJCQkJbmV3IEFkYXB0ZXJGYWN0b3J5VHJlZUVkaXRvcihzZWxlY3Rpb25WaWV3ZXIuZ2V0VHJlZSgpLCBhZGFwdGVyRmFjdG9yeSk7CisKKwkJCQljcmVhdGVDb250ZXh0TWVudUZvcihzZWxlY3Rpb25WaWV3ZXIpOworCQkJCWludCBwYWdlSW5kZXggPSBhZGRQYWdlKHZpZXdlclBhbmUuZ2V0Q29udHJvbCgpKTsKKwkJCQlzZXRQYWdlVGV4dChwYWdlSW5kZXgsIGdldFN0cmluZygiX1VJX1NlbGVjdGlvblBhZ2VfbGFiZWwiKSk7IC8vJE5PTi1OTFMtMSQKKwkJCX0KKworCQkJLy8gQ3JlYXRlIGEgcGFnZSBmb3IgdGhlIHBhcmVudCB0cmVlIHZpZXcuCisJCQkvLworCQkJeworCQkJCVZpZXdlclBhbmUgdmlld2VyUGFuZSA9CisJCQkJCW5ldyBWaWV3ZXJQYW5lKGdldFNpdGUoKS5nZXRQYWdlKCksIExvZ2dlckVkaXRvci50aGlzKSB7CisJCQkJCQlAT3ZlcnJpZGUKKwkJCQkJCXB1YmxpYyBWaWV3ZXIgY3JlYXRlVmlld2VyKENvbXBvc2l0ZSBjb21wb3NpdGUpIHsKKwkJCQkJCQlUcmVlIHRyZWUgPSBuZXcgVHJlZShjb21wb3NpdGUsIFNXVC5NVUxUSSk7CisJCQkJCQkJVHJlZVZpZXdlciBuZXdUcmVlVmlld2VyID0gbmV3IFRyZWVWaWV3ZXIodHJlZSk7CisJCQkJCQkJcmV0dXJuIG5ld1RyZWVWaWV3ZXI7CisJCQkJCQl9CisJCQkJCQlAT3ZlcnJpZGUKKwkJCQkJCXB1YmxpYyB2b2lkIHJlcXVlc3RBY3RpdmF0aW9uKCkgeworCQkJCQkJCXN1cGVyLnJlcXVlc3RBY3RpdmF0aW9uKCk7CisJCQkJCQkJc2V0Q3VycmVudFZpZXdlclBhbmUodGhpcyk7CisJCQkJCQl9CisJCQkJCX07CisJCQkJdmlld2VyUGFuZS5jcmVhdGVDb250cm9sKGdldENvbnRhaW5lcigpKTsKKworCQkJCXBhcmVudFZpZXdlciA9IChUcmVlVmlld2VyKXZpZXdlclBhbmUuZ2V0Vmlld2VyKCk7CisJCQkJcGFyZW50Vmlld2VyLnNldEF1dG9FeHBhbmRMZXZlbCgzMCk7CisJCQkJcGFyZW50Vmlld2VyLnNldENvbnRlbnRQcm92aWRlcihuZXcgUmV2ZXJzZUFkYXB0ZXJGYWN0b3J5Q29udGVudFByb3ZpZGVyKGFkYXB0ZXJGYWN0b3J5KSk7CisJCQkJcGFyZW50Vmlld2VyLnNldExhYmVsUHJvdmlkZXIobmV3IEFkYXB0ZXJGYWN0b3J5TGFiZWxQcm92aWRlcihhZGFwdGVyRmFjdG9yeSkpOworCisJCQkJY3JlYXRlQ29udGV4dE1lbnVGb3IocGFyZW50Vmlld2VyKTsKKwkJCQlpbnQgcGFnZUluZGV4ID0gYWRkUGFnZSh2aWV3ZXJQYW5lLmdldENvbnRyb2woKSk7CisJCQkJc2V0UGFnZVRleHQocGFnZUluZGV4LCBnZXRTdHJpbmcoIl9VSV9QYXJlbnRQYWdlX2xhYmVsIikpOyAvLyROT04tTkxTLTEkCisJCQl9CisKKwkJCS8vIFRoaXMgaXMgdGhlIHBhZ2UgZm9yIHRoZSBsaXN0IHZpZXdlcgorCQkJLy8KKwkJCXsKKwkJCQlWaWV3ZXJQYW5lIHZpZXdlclBhbmUgPQorCQkJCQluZXcgVmlld2VyUGFuZShnZXRTaXRlKCkuZ2V0UGFnZSgpLCBMb2dnZXJFZGl0b3IudGhpcykgeworCQkJCQkJQE92ZXJyaWRlCisJCQkJCQlwdWJsaWMgVmlld2VyIGNyZWF0ZVZpZXdlcihDb21wb3NpdGUgY29tcG9zaXRlKSB7CisJCQkJCQkJcmV0dXJuIG5ldyBMaXN0Vmlld2VyKGNvbXBvc2l0ZSk7CisJCQkJCQl9CisJCQkJCQlAT3ZlcnJpZGUKKwkJCQkJCXB1YmxpYyB2b2lkIHJlcXVlc3RBY3RpdmF0aW9uKCkgeworCQkJCQkJCXN1cGVyLnJlcXVlc3RBY3RpdmF0aW9uKCk7CisJCQkJCQkJc2V0Q3VycmVudFZpZXdlclBhbmUodGhpcyk7CisJCQkJCQl9CisJCQkJCX07CisJCQkJdmlld2VyUGFuZS5jcmVhdGVDb250cm9sKGdldENvbnRhaW5lcigpKTsKKwkJCQlsaXN0Vmlld2VyID0gKExpc3RWaWV3ZXIpdmlld2VyUGFuZS5nZXRWaWV3ZXIoKTsKKwkJCQlsaXN0Vmlld2VyLnNldENvbnRlbnRQcm92aWRlcihuZXcgQWRhcHRlckZhY3RvcnlDb250ZW50UHJvdmlkZXIoYWRhcHRlckZhY3RvcnkpKTsKKwkJCQlsaXN0Vmlld2VyLnNldExhYmVsUHJvdmlkZXIobmV3IEFkYXB0ZXJGYWN0b3J5TGFiZWxQcm92aWRlcihhZGFwdGVyRmFjdG9yeSkpOworCisJCQkJY3JlYXRlQ29udGV4dE1lbnVGb3IobGlzdFZpZXdlcik7CisJCQkJaW50IHBhZ2VJbmRleCA9IGFkZFBhZ2Uodmlld2VyUGFuZS5nZXRDb250cm9sKCkpOworCQkJCXNldFBhZ2VUZXh0KHBhZ2VJbmRleCwgZ2V0U3RyaW5nKCJfVUlfTGlzdFBhZ2VfbGFiZWwiKSk7IC8vJE5PTi1OTFMtMSQKKwkJCX0KKworCQkJLy8gVGhpcyBpcyB0aGUgcGFnZSBmb3IgdGhlIHRyZWUgdmlld2VyCisJCQkvLworCQkJeworCQkJCVZpZXdlclBhbmUgdmlld2VyUGFuZSA9CisJCQkJCW5ldyBWaWV3ZXJQYW5lKGdldFNpdGUoKS5nZXRQYWdlKCksIExvZ2dlckVkaXRvci50aGlzKSB7CisJCQkJCQlAT3ZlcnJpZGUKKwkJCQkJCXB1YmxpYyBWaWV3ZXIgY3JlYXRlVmlld2VyKENvbXBvc2l0ZSBjb21wb3NpdGUpIHsKKwkJCQkJCQlyZXR1cm4gbmV3IFRyZWVWaWV3ZXIoY29tcG9zaXRlKTsKKwkJCQkJCX0KKwkJCQkJCUBPdmVycmlkZQorCQkJCQkJcHVibGljIHZvaWQgcmVxdWVzdEFjdGl2YXRpb24oKSB7CisJCQkJCQkJc3VwZXIucmVxdWVzdEFjdGl2YXRpb24oKTsKKwkJCQkJCQlzZXRDdXJyZW50Vmlld2VyUGFuZSh0aGlzKTsKKwkJCQkJCX0KKwkJCQkJfTsKKwkJCQl2aWV3ZXJQYW5lLmNyZWF0ZUNvbnRyb2woZ2V0Q29udGFpbmVyKCkpOworCQkJCXRyZWVWaWV3ZXIgPSAoVHJlZVZpZXdlcil2aWV3ZXJQYW5lLmdldFZpZXdlcigpOworCQkJCXRyZWVWaWV3ZXIuc2V0Q29udGVudFByb3ZpZGVyKG5ldyBBZGFwdGVyRmFjdG9yeUNvbnRlbnRQcm92aWRlcihhZGFwdGVyRmFjdG9yeSkpOworCQkJCXRyZWVWaWV3ZXIuc2V0TGFiZWxQcm92aWRlcihuZXcgQWRhcHRlckZhY3RvcnlMYWJlbFByb3ZpZGVyKGFkYXB0ZXJGYWN0b3J5KSk7CisKKwkJCQluZXcgQWRhcHRlckZhY3RvcnlUcmVlRWRpdG9yKHRyZWVWaWV3ZXIuZ2V0VHJlZSgpLCBhZGFwdGVyRmFjdG9yeSk7CisKKwkJCQljcmVhdGVDb250ZXh0TWVudUZvcih0cmVlVmlld2VyKTsKKwkJCQlpbnQgcGFnZUluZGV4ID0gYWRkUGFnZSh2aWV3ZXJQYW5lLmdldENvbnRyb2woKSk7CisJCQkJc2V0UGFnZVRleHQocGFnZUluZGV4LCBnZXRTdHJpbmcoIl9VSV9UcmVlUGFnZV9sYWJlbCIpKTsgLy8kTk9OLU5MUy0xJAorCQkJfQorCisJCQkvLyBUaGlzIGlzIHRoZSBwYWdlIGZvciB0aGUgdGFibGUgdmlld2VyLgorCQkJLy8KKwkJCXsKKwkJCQlWaWV3ZXJQYW5lIHZpZXdlclBhbmUgPQorCQkJCQluZXcgVmlld2VyUGFuZShnZXRTaXRlKCkuZ2V0UGFnZSgpLCBMb2dnZXJFZGl0b3IudGhpcykgeworCQkJCQkJQE92ZXJyaWRlCisJCQkJCQlwdWJsaWMgVmlld2VyIGNyZWF0ZVZpZXdlcihDb21wb3NpdGUgY29tcG9zaXRlKSB7CisJCQkJCQkJcmV0dXJuIG5ldyBUYWJsZVZpZXdlcihjb21wb3NpdGUpOworCQkJCQkJfQorCQkJCQkJQE92ZXJyaWRlCisJCQkJCQlwdWJsaWMgdm9pZCByZXF1ZXN0QWN0aXZhdGlvbigpIHsKKwkJCQkJCQlzdXBlci5yZXF1ZXN0QWN0aXZhdGlvbigpOworCQkJCQkJCXNldEN1cnJlbnRWaWV3ZXJQYW5lKHRoaXMpOworCQkJCQkJfQorCQkJCQl9OworCQkJCXZpZXdlclBhbmUuY3JlYXRlQ29udHJvbChnZXRDb250YWluZXIoKSk7CisJCQkJdGFibGVWaWV3ZXIgPSAoVGFibGVWaWV3ZXIpdmlld2VyUGFuZS5nZXRWaWV3ZXIoKTsKKworCQkJCVRhYmxlIHRhYmxlID0gdGFibGVWaWV3ZXIuZ2V0VGFibGUoKTsKKwkJCQlUYWJsZUxheW91dCBsYXlvdXQgPSBuZXcgVGFibGVMYXlvdXQoKTsKKwkJCQl0YWJsZS5zZXRMYXlvdXQobGF5b3V0KTsKKwkJCQl0YWJsZS5zZXRIZWFkZXJWaXNpYmxlKHRydWUpOworCQkJCXRhYmxlLnNldExpbmVzVmlzaWJsZSh0cnVlKTsKKworCQkJCVRhYmxlQ29sdW1uIG9iamVjdENvbHVtbiA9IG5ldyBUYWJsZUNvbHVtbih0YWJsZSwgU1dULk5PTkUpOworCQkJCWxheW91dC5hZGRDb2x1bW5EYXRhKG5ldyBDb2x1bW5XZWlnaHREYXRhKDMsIDEwMCwgdHJ1ZSkpOworCQkJCW9iamVjdENvbHVtbi5zZXRUZXh0KGdldFN0cmluZygiX1VJX09iamVjdENvbHVtbl9sYWJlbCIpKTsgLy8kTk9OLU5MUy0xJAorCQkJCW9iamVjdENvbHVtbi5zZXRSZXNpemFibGUodHJ1ZSk7CisKKwkJCQlUYWJsZUNvbHVtbiBzZWxmQ29sdW1uID0gbmV3IFRhYmxlQ29sdW1uKHRhYmxlLCBTV1QuTk9ORSk7CisJCQkJbGF5b3V0LmFkZENvbHVtbkRhdGEobmV3IENvbHVtbldlaWdodERhdGEoMiwgMTAwLCB0cnVlKSk7CisJCQkJc2VsZkNvbHVtbi5zZXRUZXh0KGdldFN0cmluZygiX1VJX1NlbGZDb2x1bW5fbGFiZWwiKSk7IC8vJE5PTi1OTFMtMSQKKwkJCQlzZWxmQ29sdW1uLnNldFJlc2l6YWJsZSh0cnVlKTsKKworCQkJCXRhYmxlVmlld2VyLnNldENvbHVtblByb3BlcnRpZXMobmV3IFN0cmluZyBbXSB7ImEiLCAiYiJ9KTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCisJCQkJdGFibGVWaWV3ZXIuc2V0Q29udGVudFByb3ZpZGVyKG5ldyBBZGFwdGVyRmFjdG9yeUNvbnRlbnRQcm92aWRlcihhZGFwdGVyRmFjdG9yeSkpOworCQkJCXRhYmxlVmlld2VyLnNldExhYmVsUHJvdmlkZXIobmV3IEFkYXB0ZXJGYWN0b3J5TGFiZWxQcm92aWRlcihhZGFwdGVyRmFjdG9yeSkpOworCisJCQkJY3JlYXRlQ29udGV4dE1lbnVGb3IodGFibGVWaWV3ZXIpOworCQkJCWludCBwYWdlSW5kZXggPSBhZGRQYWdlKHZpZXdlclBhbmUuZ2V0Q29udHJvbCgpKTsKKwkJCQlzZXRQYWdlVGV4dChwYWdlSW5kZXgsIGdldFN0cmluZygiX1VJX1RhYmxlUGFnZV9sYWJlbCIpKTsgLy8kTk9OLU5MUy0xJAorCQkJfQorCisJCQkvLyBUaGlzIGlzIHRoZSBwYWdlIGZvciB0aGUgdGFibGUgdHJlZSB2aWV3ZXIuCisJCQkvLworCQkJeworCQkJCVZpZXdlclBhbmUgdmlld2VyUGFuZSA9CisJCQkJCW5ldyBWaWV3ZXJQYW5lKGdldFNpdGUoKS5nZXRQYWdlKCksIExvZ2dlckVkaXRvci50aGlzKSB7CisJCQkJCQlAT3ZlcnJpZGUKKwkJCQkJCXB1YmxpYyBWaWV3ZXIgY3JlYXRlVmlld2VyKENvbXBvc2l0ZSBjb21wb3NpdGUpIHsKKwkJCQkJCQlyZXR1cm4gbmV3IFRyZWVWaWV3ZXIoY29tcG9zaXRlKTsKKwkJCQkJCX0KKwkJCQkJCUBPdmVycmlkZQorCQkJCQkJcHVibGljIHZvaWQgcmVxdWVzdEFjdGl2YXRpb24oKSB7CisJCQkJCQkJc3VwZXIucmVxdWVzdEFjdGl2YXRpb24oKTsKKwkJCQkJCQlzZXRDdXJyZW50Vmlld2VyUGFuZSh0aGlzKTsKKwkJCQkJCX0KKwkJCQkJfTsKKwkJCQl2aWV3ZXJQYW5lLmNyZWF0ZUNvbnRyb2woZ2V0Q29udGFpbmVyKCkpOworCisJCQkJdHJlZVZpZXdlcldpdGhDb2x1bW5zID0gKFRyZWVWaWV3ZXIpdmlld2VyUGFuZS5nZXRWaWV3ZXIoKTsKKworCQkJCVRyZWUgdHJlZSA9IHRyZWVWaWV3ZXJXaXRoQ29sdW1ucy5nZXRUcmVlKCk7CisJCQkJdHJlZS5zZXRMYXlvdXREYXRhKG5ldyBGaWxsTGF5b3V0KCkpOworCQkJCXRyZWUuc2V0SGVhZGVyVmlzaWJsZSh0cnVlKTsKKwkJCQl0cmVlLnNldExpbmVzVmlzaWJsZSh0cnVlKTsKKworCQkJCVRyZWVDb2x1bW4gb2JqZWN0Q29sdW1uID0gbmV3IFRyZWVDb2x1bW4odHJlZSwgU1dULk5PTkUpOworCQkJCW9iamVjdENvbHVtbi5zZXRUZXh0KGdldFN0cmluZygiX1VJX09iamVjdENvbHVtbl9sYWJlbCIpKTsgLy8kTk9OLU5MUy0xJAorCQkJCW9iamVjdENvbHVtbi5zZXRSZXNpemFibGUodHJ1ZSk7CisJCQkJb2JqZWN0Q29sdW1uLnNldFdpZHRoKDI1MCk7CisKKwkJCQlUcmVlQ29sdW1uIHNlbGZDb2x1bW4gPSBuZXcgVHJlZUNvbHVtbih0cmVlLCBTV1QuTk9ORSk7CisJCQkJc2VsZkNvbHVtbi5zZXRUZXh0KGdldFN0cmluZygiX1VJX1NlbGZDb2x1bW5fbGFiZWwiKSk7IC8vJE5PTi1OTFMtMSQKKwkJCQlzZWxmQ29sdW1uLnNldFJlc2l6YWJsZSh0cnVlKTsKKwkJCQlzZWxmQ29sdW1uLnNldFdpZHRoKDIwMCk7CisKKwkJCQl0cmVlVmlld2VyV2l0aENvbHVtbnMuc2V0Q29sdW1uUHJvcGVydGllcyhuZXcgU3RyaW5nIFtdIHsiYSIsICJiIn0pOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKKwkJCQl0cmVlVmlld2VyV2l0aENvbHVtbnMuc2V0Q29udGVudFByb3ZpZGVyKG5ldyBBZGFwdGVyRmFjdG9yeUNvbnRlbnRQcm92aWRlcihhZGFwdGVyRmFjdG9yeSkpOworCQkJCXRyZWVWaWV3ZXJXaXRoQ29sdW1ucy5zZXRMYWJlbFByb3ZpZGVyKG5ldyBBZGFwdGVyRmFjdG9yeUxhYmVsUHJvdmlkZXIoYWRhcHRlckZhY3RvcnkpKTsKKworCQkJCWNyZWF0ZUNvbnRleHRNZW51Rm9yKHRyZWVWaWV3ZXJXaXRoQ29sdW1ucyk7CisJCQkJaW50IHBhZ2VJbmRleCA9IGFkZFBhZ2Uodmlld2VyUGFuZS5nZXRDb250cm9sKCkpOworCQkJCXNldFBhZ2VUZXh0KHBhZ2VJbmRleCwgZ2V0U3RyaW5nKCJfVUlfVHJlZVdpdGhDb2x1bW5zUGFnZV9sYWJlbCIpKTsgLy8kTk9OLU5MUy0xJAorCQkJfQorCisJCQlnZXRTaXRlKCkuZ2V0U2hlbGwoKS5nZXREaXNwbGF5KCkuYXN5bmNFeGVjCisJCQkJKG5ldyBSdW5uYWJsZSgpIHsKKwkJCQkJIHB1YmxpYyB2b2lkIHJ1bigpIHsKKwkJCQkJCSBzZXRBY3RpdmVQYWdlKDApOworCQkJCQkgfQorCQkJCSB9KTsKKwkJfQorCisJCS8vIEVuc3VyZXMgdGhhdCB0aGlzIGVkaXRvciB3aWxsIG9ubHkgZGlzcGxheSB0aGUgcGFnZSdzIHRhYgorCQkvLyBhcmVhIGlmIHRoZXJlIGFyZSBtb3JlIHRoYW4gb25lIHBhZ2UKKwkJLy8KKwkJZ2V0Q29udGFpbmVyKCkuYWRkQ29udHJvbExpc3RlbmVyCisJCQkobmV3IENvbnRyb2xBZGFwdGVyKCkgeworCQkJCWJvb2xlYW4gZ3VhcmQgPSBmYWxzZTsKKwkJCQlAT3ZlcnJpZGUKKwkJCQlwdWJsaWMgdm9pZCBjb250cm9sUmVzaXplZChDb250cm9sRXZlbnQgZXZlbnQpIHsKKwkJCQkJaWYgKCFndWFyZCkgeworCQkJCQkJZ3VhcmQgPSB0cnVlOworCQkJCQkJaGlkZVRhYnMoKTsKKwkJCQkJCWd1YXJkID0gZmFsc2U7CisJCQkJCX0KKwkJCQl9CisJCQkgfSk7CisKKwkJZ2V0U2l0ZSgpLmdldFNoZWxsKCkuZ2V0RGlzcGxheSgpLmFzeW5jRXhlYworCQkJKG5ldyBSdW5uYWJsZSgpIHsKKwkJCQkgcHVibGljIHZvaWQgcnVuKCkgeworCQkJCQkgdXBkYXRlUHJvYmxlbUluZGljYXRpb24oKTsKKwkJCQkgfQorCQkJIH0pOworCX0KKworCS8qKgorCSAqIElmIHRoZXJlIGlzIGp1c3Qgb25lIHBhZ2UgaW4gdGhlIG11bHRpLXBhZ2UgZWRpdG9yIHBhcnQsCisJICogdGhpcyBoaWRlcyB0aGUgc2luZ2xlIHRhYiBhdCB0aGUgYm90dG9tLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIGhpZGVUYWJzKCkgeworCQlpZiAoZ2V0UGFnZUNvdW50KCkgPD0gMSkgeworCQkJc2V0UGFnZVRleHQoMCwgIiIpOyAvLyROT04tTkxTLTEkCisJCQlpZiAoZ2V0Q29udGFpbmVyKCkgaW5zdGFuY2VvZiBDVGFiRm9sZGVyKSB7CisJCQkJKChDVGFiRm9sZGVyKWdldENvbnRhaW5lcigpKS5zZXRUYWJIZWlnaHQoMSk7CisJCQkJUG9pbnQgcG9pbnQgPSBnZXRDb250YWluZXIoKS5nZXRTaXplKCk7CisJCQkJZ2V0Q29udGFpbmVyKCkuc2V0U2l6ZShwb2ludC54LCBwb2ludC55ICsgNik7CisJCQl9CisJCX0KKwl9CisKKwkvKioKKwkgKiBJZiB0aGVyZSBpcyBtb3JlIHRoYW4gb25lIHBhZ2UgaW4gdGhlIG11bHRpLXBhZ2UgZWRpdG9yIHBhcnQsCisJICogdGhpcyBzaG93cyB0aGUgdGFicyBhdCB0aGUgYm90dG9tLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIHNob3dUYWJzKCkgeworCQlpZiAoZ2V0UGFnZUNvdW50KCkgPiAxKSB7CisJCQlzZXRQYWdlVGV4dCgwLCBnZXRTdHJpbmcoIl9VSV9TZWxlY3Rpb25QYWdlX2xhYmVsIikpOyAvLyROT04tTkxTLTEkCisJCQlpZiAoZ2V0Q29udGFpbmVyKCkgaW5zdGFuY2VvZiBDVGFiRm9sZGVyKSB7CisJCQkJKChDVGFiRm9sZGVyKWdldENvbnRhaW5lcigpKS5zZXRUYWJIZWlnaHQoU1dULkRFRkFVTFQpOworCQkJCVBvaW50IHBvaW50ID0gZ2V0Q29udGFpbmVyKCkuZ2V0U2l6ZSgpOworCQkJCWdldENvbnRhaW5lcigpLnNldFNpemUocG9pbnQueCwgcG9pbnQueSAtIDYpOworCQkJfQorCQl9CisJfQorCisJLyoqCisJICogVGhpcyBpcyB1c2VkIHRvIHRyYWNrIHRoZSBhY3RpdmUgdmlld2VyLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIHBhZ2VDaGFuZ2UoaW50IHBhZ2VJbmRleCkgeworCQlzdXBlci5wYWdlQ2hhbmdlKHBhZ2VJbmRleCk7CisKKwkJaWYgKGNvbnRlbnRPdXRsaW5lUGFnZSAhPSBudWxsKSB7CisJCQloYW5kbGVDb250ZW50T3V0bGluZVNlbGVjdGlvbihjb250ZW50T3V0bGluZVBhZ2UuZ2V0U2VsZWN0aW9uKCkpOworCQl9CisJfQorCisJLyoqCisJICogVGhpcyBpcyBob3cgdGhlIGZyYW1ld29yayBkZXRlcm1pbmVzIHdoaWNoIGludGVyZmFjZXMgd2UgaW1wbGVtZW50LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBTdXBwcmVzc1dhcm5pbmdzKCJyYXd0eXBlcyIpCisJQE92ZXJyaWRlCisJcHVibGljIE9iamVjdCBnZXRBZGFwdGVyKENsYXNzIGtleSkgeworCQlpZiAoa2V5LmVxdWFscyhJQ29udGVudE91dGxpbmVQYWdlLmNsYXNzKSkgeworCQkJcmV0dXJuIHNob3dPdXRsaW5lVmlldygpID8gZ2V0Q29udGVudE91dGxpbmVQYWdlKCkgOiBudWxsOworCQl9CisJCWVsc2UgaWYgKGtleS5lcXVhbHMoSVByb3BlcnR5U2hlZXRQYWdlLmNsYXNzKSkgeworCQkJcmV0dXJuIGdldFByb3BlcnR5U2hlZXRQYWdlKCk7CisJCX0KKwkJZWxzZSBpZiAoa2V5LmVxdWFscyhJR290b01hcmtlci5jbGFzcykpIHsKKwkJCXJldHVybiB0aGlzOworCQl9CisJCWVsc2UgeworCQkJcmV0dXJuIHN1cGVyLmdldEFkYXB0ZXIoa2V5KTsKKwkJfQorCX0KKworCS8qKgorCSAqIFRoaXMgYWNjZXNzZXMgYSBjYWNoZWQgdmVyc2lvbiBvZiB0aGUgY29udGVudCBvdXRsaW5lci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgSUNvbnRlbnRPdXRsaW5lUGFnZSBnZXRDb250ZW50T3V0bGluZVBhZ2UoKSB7CisJCWlmIChjb250ZW50T3V0bGluZVBhZ2UgPT0gbnVsbCkgeworCQkJLy8gVGhlIGNvbnRlbnQgb3V0bGluZSBpcyBqdXN0IGEgdHJlZS4KKwkJCS8vCisJCQljbGFzcyBNeUNvbnRlbnRPdXRsaW5lUGFnZSBleHRlbmRzIENvbnRlbnRPdXRsaW5lUGFnZSB7CisJCQkJQE92ZXJyaWRlCisJCQkJcHVibGljIHZvaWQgY3JlYXRlQ29udHJvbChDb21wb3NpdGUgcGFyZW50KSB7CisJCQkJCXN1cGVyLmNyZWF0ZUNvbnRyb2wocGFyZW50KTsKKwkJCQkJY29udGVudE91dGxpbmVWaWV3ZXIgPSBnZXRUcmVlVmlld2VyKCk7CisJCQkJCWNvbnRlbnRPdXRsaW5lVmlld2VyLmFkZFNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcih0aGlzKTsKKworCQkJCQkvLyBTZXQgdXAgdGhlIHRyZWUgdmlld2VyLgorCQkJCQkvLworCQkJCQljb250ZW50T3V0bGluZVZpZXdlci5zZXRDb250ZW50UHJvdmlkZXIobmV3IEFkYXB0ZXJGYWN0b3J5Q29udGVudFByb3ZpZGVyKGFkYXB0ZXJGYWN0b3J5KSk7CisJCQkJCWNvbnRlbnRPdXRsaW5lVmlld2VyLnNldExhYmVsUHJvdmlkZXIobmV3IEFkYXB0ZXJGYWN0b3J5TGFiZWxQcm92aWRlcihhZGFwdGVyRmFjdG9yeSkpOworCQkJCQljb250ZW50T3V0bGluZVZpZXdlci5zZXRJbnB1dChlZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkpOworCisJCQkJCS8vIE1ha2Ugc3VyZSBvdXIgcG9wdXBzIHdvcmsuCisJCQkJCS8vCisJCQkJCWNyZWF0ZUNvbnRleHRNZW51Rm9yKGNvbnRlbnRPdXRsaW5lVmlld2VyKTsKKworCQkJCQlpZiAoIWVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKS5nZXRSZXNvdXJjZXMoKS5pc0VtcHR5KCkpIHsKKwkJCQkJICAvLyBTZWxlY3QgdGhlIHJvb3Qgb2JqZWN0IGluIHRoZSB2aWV3LgorCQkJCQkgIC8vCisJCQkJCSAgY29udGVudE91dGxpbmVWaWV3ZXIuc2V0U2VsZWN0aW9uKG5ldyBTdHJ1Y3R1cmVkU2VsZWN0aW9uKGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKS5nZXRSZXNvdXJjZXMoKS5nZXQoMCkpLCB0cnVlKTsKKwkJCQkJfQorCQkJCX0KKworCQkJCUBPdmVycmlkZQorCQkJCXB1YmxpYyB2b2lkIG1ha2VDb250cmlidXRpb25zKElNZW51TWFuYWdlciBtZW51TWFuYWdlciwgSVRvb2xCYXJNYW5hZ2VyIHRvb2xCYXJNYW5hZ2VyLCBJU3RhdHVzTGluZU1hbmFnZXIgc3RhdHVzTGluZU1hbmFnZXIpIHsKKwkJCQkJc3VwZXIubWFrZUNvbnRyaWJ1dGlvbnMobWVudU1hbmFnZXIsIHRvb2xCYXJNYW5hZ2VyLCBzdGF0dXNMaW5lTWFuYWdlcik7CisJCQkJCWNvbnRlbnRPdXRsaW5lU3RhdHVzTGluZU1hbmFnZXIgPSBzdGF0dXNMaW5lTWFuYWdlcjsKKwkJCQl9CisKKwkJCQlAT3ZlcnJpZGUKKwkJCQlwdWJsaWMgdm9pZCBzZXRBY3Rpb25CYXJzKElBY3Rpb25CYXJzIGFjdGlvbkJhcnMpIHsKKwkJCQkJc3VwZXIuc2V0QWN0aW9uQmFycyhhY3Rpb25CYXJzKTsKKwkJCQkJZ2V0QWN0aW9uQmFyQ29udHJpYnV0b3IoKS5zaGFyZUdsb2JhbEFjdGlvbnModGhpcywgYWN0aW9uQmFycyk7CisJCQkJfQorCQkJfQorCisJCQljb250ZW50T3V0bGluZVBhZ2UgPSBuZXcgTXlDb250ZW50T3V0bGluZVBhZ2UoKTsKKworCQkJLy8gTGlzdGVuIHRvIHNlbGVjdGlvbiBzbyB0aGF0IHdlIGNhbiBoYW5kbGUgaXQgaXMgYSBzcGVjaWFsIHdheS4KKwkJCS8vCisJCQljb250ZW50T3V0bGluZVBhZ2UuYWRkU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyCisJCQkJKG5ldyBJU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyKCkgeworCQkJCQkgLy8gVGhpcyBlbnN1cmVzIHRoYXQgd2UgaGFuZGxlIHNlbGVjdGlvbnMgY29ycmVjdGx5LgorCQkJCQkgLy8KKwkJCQkJIHB1YmxpYyB2b2lkIHNlbGVjdGlvbkNoYW5nZWQoU2VsZWN0aW9uQ2hhbmdlZEV2ZW50IGV2ZW50KSB7CisJCQkJCQkgaGFuZGxlQ29udGVudE91dGxpbmVTZWxlY3Rpb24oZXZlbnQuZ2V0U2VsZWN0aW9uKCkpOworCQkJCQkgfQorCQkJCSB9KTsKKwkJfQorCisJCXJldHVybiBjb250ZW50T3V0bGluZVBhZ2U7CisJfQorCisJLyoqCisJICogVGhpcyBhY2Nlc3NlcyBhIGNhY2hlZCB2ZXJzaW9uIG9mIHRoZSBwcm9wZXJ0eSBzaGVldC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgSVByb3BlcnR5U2hlZXRQYWdlIGdldFByb3BlcnR5U2hlZXRQYWdlKCkgeworCQlpZiAocHJvcGVydHlTaGVldFBhZ2UgPT0gbnVsbCkgeworCQkJcHJvcGVydHlTaGVldFBhZ2UgPQorCQkJCW5ldyBFeHRlbmRlZFByb3BlcnR5U2hlZXRQYWdlKGVkaXRpbmdEb21haW4pIHsKKwkJCQkJQE92ZXJyaWRlCisJCQkJCXB1YmxpYyB2b2lkIHNldFNlbGVjdGlvblRvVmlld2VyKExpc3Q8Pz4gc2VsZWN0aW9uKSB7CisJCQkJCQlMb2dnZXJFZGl0b3IudGhpcy5zZXRTZWxlY3Rpb25Ub1ZpZXdlcihzZWxlY3Rpb24pOworCQkJCQkJTG9nZ2VyRWRpdG9yLnRoaXMuc2V0Rm9jdXMoKTsKKwkJCQkJfQorCisJCQkJCUBPdmVycmlkZQorCQkJCQlwdWJsaWMgdm9pZCBzZXRBY3Rpb25CYXJzKElBY3Rpb25CYXJzIGFjdGlvbkJhcnMpIHsKKwkJCQkJCXN1cGVyLnNldEFjdGlvbkJhcnMoYWN0aW9uQmFycyk7CisJCQkJCQlnZXRBY3Rpb25CYXJDb250cmlidXRvcigpLnNoYXJlR2xvYmFsQWN0aW9ucyh0aGlzLCBhY3Rpb25CYXJzKTsKKwkJCQkJfQorCQkJCX07CisJCQlwcm9wZXJ0eVNoZWV0UGFnZS5zZXRQcm9wZXJ0eVNvdXJjZVByb3ZpZGVyKG5ldyBBZGFwdGVyRmFjdG9yeUNvbnRlbnRQcm92aWRlcihhZGFwdGVyRmFjdG9yeSkpOworCQl9CisKKwkJcmV0dXJuIHByb3BlcnR5U2hlZXRQYWdlOworCX0KKworCS8qKgorCSAqIFRoaXMgZGVhbHMgd2l0aCBob3cgd2Ugd2FudCBzZWxlY3Rpb24gaW4gdGhlIG91dGxpbmVyIHRvIGFmZmVjdCB0aGUgb3RoZXIgdmlld3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgaGFuZGxlQ29udGVudE91dGxpbmVTZWxlY3Rpb24oSVNlbGVjdGlvbiBzZWxlY3Rpb24pIHsKKwkJaWYgKGN1cnJlbnRWaWV3ZXJQYW5lICE9IG51bGwgJiYgIXNlbGVjdGlvbi5pc0VtcHR5KCkgJiYgc2VsZWN0aW9uIGluc3RhbmNlb2YgSVN0cnVjdHVyZWRTZWxlY3Rpb24pIHsKKwkJCUl0ZXJhdG9yPD8+IHNlbGVjdGVkRWxlbWVudHMgPSAoKElTdHJ1Y3R1cmVkU2VsZWN0aW9uKXNlbGVjdGlvbikuaXRlcmF0b3IoKTsKKwkJCWlmIChzZWxlY3RlZEVsZW1lbnRzLmhhc05leHQoKSkgeworCQkJCS8vIEdldCB0aGUgZmlyc3Qgc2VsZWN0ZWQgZWxlbWVudC4KKwkJCQkvLworCQkJCU9iamVjdCBzZWxlY3RlZEVsZW1lbnQgPSBzZWxlY3RlZEVsZW1lbnRzLm5leHQoKTsKKworCQkJCS8vIElmIGl0J3MgdGhlIHNlbGVjdGlvbiB2aWV3ZXIsIHRoZW4gd2Ugd2FudCBpdCB0byBzZWxlY3QgdGhlIHNhbWUgc2VsZWN0aW9uIGFzIHRoaXMgc2VsZWN0aW9uLgorCQkJCS8vCisJCQkJaWYgKGN1cnJlbnRWaWV3ZXJQYW5lLmdldFZpZXdlcigpID09IHNlbGVjdGlvblZpZXdlcikgeworCQkJCQlBcnJheUxpc3Q8T2JqZWN0PiBzZWxlY3Rpb25MaXN0ID0gbmV3IEFycmF5TGlzdDxPYmplY3Q+KCk7CisJCQkJCXNlbGVjdGlvbkxpc3QuYWRkKHNlbGVjdGVkRWxlbWVudCk7CisJCQkJCXdoaWxlIChzZWxlY3RlZEVsZW1lbnRzLmhhc05leHQoKSkgeworCQkJCQkJc2VsZWN0aW9uTGlzdC5hZGQoc2VsZWN0ZWRFbGVtZW50cy5uZXh0KCkpOworCQkJCQl9CisKKwkJCQkJLy8gU2V0IHRoZSBzZWxlY3Rpb24gdG8gdGhlIHdpZGdldC4KKwkJCQkJLy8KKwkJCQkJc2VsZWN0aW9uVmlld2VyLnNldFNlbGVjdGlvbihuZXcgU3RydWN0dXJlZFNlbGVjdGlvbihzZWxlY3Rpb25MaXN0KSk7CisJCQkJfQorCQkJCWVsc2UgeworCQkJCQkvLyBTZXQgdGhlIGlucHV0IHRvIHRoZSB3aWRnZXQuCisJCQkJCS8vCisJCQkJCWlmIChjdXJyZW50Vmlld2VyUGFuZS5nZXRWaWV3ZXIoKS5nZXRJbnB1dCgpICE9IHNlbGVjdGVkRWxlbWVudCkgeworCQkJCQkJY3VycmVudFZpZXdlclBhbmUuZ2V0Vmlld2VyKCkuc2V0SW5wdXQoc2VsZWN0ZWRFbGVtZW50KTsKKwkJCQkJCWN1cnJlbnRWaWV3ZXJQYW5lLnNldFRpdGxlKHNlbGVjdGVkRWxlbWVudCk7CisJCQkJCX0KKwkJCQl9CisJCQl9CisJCX0KKwl9CisKKwkvKioKKwkgKiBUaGlzIGlzIGZvciBpbXBsZW1lbnRpbmcge0BsaW5rIElFZGl0b3JQYXJ0fSBhbmQgc2ltcGx5IHRlc3RzIHRoZSBjb21tYW5kIHN0YWNrLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBib29sZWFuIGlzRGlydHkoKSB7CisJCXJldHVybiAoKEJhc2ljQ29tbWFuZFN0YWNrKWVkaXRpbmdEb21haW4uZ2V0Q29tbWFuZFN0YWNrKCkpLmlzU2F2ZU5lZWRlZCgpOworCX0KKworCS8qKgorCSAqIFRoaXMgaXMgZm9yIGltcGxlbWVudGluZyB7QGxpbmsgSUVkaXRvclBhcnR9IGFuZCBzaW1wbHkgc2F2ZXMgdGhlIG1vZGVsIGZpbGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgZG9TYXZlKElQcm9ncmVzc01vbml0b3IgcHJvZ3Jlc3NNb25pdG9yKSB7CisJCS8vIFNhdmUgb25seSByZXNvdXJjZXMgdGhhdCBoYXZlIGFjdHVhbGx5IGNoYW5nZWQuCisJCS8vCisJCWZpbmFsIE1hcDxPYmplY3QsIE9iamVjdD4gc2F2ZU9wdGlvbnMgPSBuZXcgSGFzaE1hcDxPYmplY3QsIE9iamVjdD4oKTsKKwkJc2F2ZU9wdGlvbnMucHV0KFJlc291cmNlLk9QVElPTl9TQVZFX09OTFlfSUZfQ0hBTkdFRCwgUmVzb3VyY2UuT1BUSU9OX1NBVkVfT05MWV9JRl9DSEFOR0VEX01FTU9SWV9CVUZGRVIpOworCisJCS8vIERvIHRoZSB3b3JrIHdpdGhpbiBhbiBvcGVyYXRpb24gYmVjYXVzZSB0aGlzIGlzIGEgbG9uZyBydW5uaW5nIGFjdGl2aXR5IHRoYXQgbW9kaWZpZXMgdGhlIHdvcmtiZW5jaC4KKwkJLy8KKwkJV29ya3NwYWNlTW9kaWZ5T3BlcmF0aW9uIG9wZXJhdGlvbiA9CisJCQluZXcgV29ya3NwYWNlTW9kaWZ5T3BlcmF0aW9uKCkgeworCQkJCS8vIFRoaXMgaXMgdGhlIG1ldGhvZCB0aGF0IGdldHMgaW52b2tlZCB3aGVuIHRoZSBvcGVyYXRpb24gcnVucy4KKwkJCQkvLworCQkJCUBPdmVycmlkZQorCQkJCXB1YmxpYyB2b2lkIGV4ZWN1dGUoSVByb2dyZXNzTW9uaXRvciBtb25pdG9yKSB7CisJCQkJCS8vIFNhdmUgdGhlIHJlc291cmNlcyB0byB0aGUgZmlsZSBzeXN0ZW0uCisJCQkJCS8vCisJCQkJCWJvb2xlYW4gZmlyc3QgPSB0cnVlOworCQkJCQlmb3IgKFJlc291cmNlIHJlc291cmNlIDogZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpLmdldFJlc291cmNlcygpKSB7CisJCQkJCQlpZiAoKGZpcnN0IHx8ICFyZXNvdXJjZS5nZXRDb250ZW50cygpLmlzRW1wdHkoKSB8fCBpc1BlcnNpc3RlZChyZXNvdXJjZSkpICYmICFlZGl0aW5nRG9tYWluLmlzUmVhZE9ubHkocmVzb3VyY2UpKSB7CisJCQkJCQkJdHJ5IHsKKwkJCQkJCQkJbG9uZyB0aW1lU3RhbXAgPSByZXNvdXJjZS5nZXRUaW1lU3RhbXAoKTsKKwkJCQkJCQkJcmVzb3VyY2Uuc2F2ZShzYXZlT3B0aW9ucyk7CisJCQkJCQkJCWlmIChyZXNvdXJjZS5nZXRUaW1lU3RhbXAoKSAhPSB0aW1lU3RhbXApIHsKKwkJCQkJCQkJCXNhdmVkUmVzb3VyY2VzLmFkZChyZXNvdXJjZSk7CisJCQkJCQkJCX0KKwkJCQkJCQl9CisJCQkJCQkJY2F0Y2ggKEV4Y2VwdGlvbiBleGNlcHRpb24pIHsKKwkJCQkJCQkJcmVzb3VyY2VUb0RpYWdub3N0aWNNYXAucHV0KHJlc291cmNlLCBhbmFseXplUmVzb3VyY2VQcm9ibGVtcyhyZXNvdXJjZSwgZXhjZXB0aW9uKSk7CisJCQkJCQkJfQorCQkJCQkJCWZpcnN0ID0gZmFsc2U7CisJCQkJCQl9CisJCQkJCX0KKwkJCQl9CisJCQl9OworCisJCXVwZGF0ZVByb2JsZW1JbmRpY2F0aW9uID0gZmFsc2U7CisJCXRyeSB7CisJCQkvLyBUaGlzIHJ1bnMgdGhlIG9wdGlvbnMsIGFuZCBzaG93cyBwcm9ncmVzcy4KKwkJCS8vCisJCQluZXcgUHJvZ3Jlc3NNb25pdG9yRGlhbG9nKGdldFNpdGUoKS5nZXRTaGVsbCgpKS5ydW4odHJ1ZSwgZmFsc2UsIG9wZXJhdGlvbik7CisKKwkJCS8vIFJlZnJlc2ggdGhlIG5lY2Vzc2FyeSBzdGF0ZS4KKwkJCS8vCisJCQkoKEJhc2ljQ29tbWFuZFN0YWNrKWVkaXRpbmdEb21haW4uZ2V0Q29tbWFuZFN0YWNrKCkpLnNhdmVJc0RvbmUoKTsKKwkJCWZpcmVQcm9wZXJ0eUNoYW5nZShJRWRpdG9yUGFydC5QUk9QX0RJUlRZKTsKKwkJfQorCQljYXRjaCAoRXhjZXB0aW9uIGV4Y2VwdGlvbikgeworCQkJLy8gU29tZXRoaW5nIHdlbnQgd3JvbmcgdGhhdCBzaG91bGRuJ3QuCisJCQkvLworCQkJQ29yZUVkaXRvclBsdWdpbi5JTlNUQU5DRS5sb2coZXhjZXB0aW9uKTsKKwkJfQorCQl1cGRhdGVQcm9ibGVtSW5kaWNhdGlvbiA9IHRydWU7CisJCXVwZGF0ZVByb2JsZW1JbmRpY2F0aW9uKCk7CisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIHdoZXRoZXIgc29tZXRoaW5nIGhhcyBiZWVuIHBlcnNpc3RlZCB0byB0aGUgVVJJIG9mIHRoZSBzcGVjaWZpZWQgcmVzb3VyY2UuCisJICogVGhlIGltcGxlbWVudGF0aW9uIHVzZXMgdGhlIFVSSSBjb252ZXJ0ZXIgZnJvbSB0aGUgZWRpdG9yJ3MgcmVzb3VyY2Ugc2V0IHRvIHRyeSB0byBvcGVuIGFuIGlucHV0IHN0cmVhbS4gCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIGJvb2xlYW4gaXNQZXJzaXN0ZWQoUmVzb3VyY2UgcmVzb3VyY2UpIHsKKwkJYm9vbGVhbiByZXN1bHQgPSBmYWxzZTsKKwkJdHJ5IHsKKwkJCUlucHV0U3RyZWFtIHN0cmVhbSA9IGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKS5nZXRVUklDb252ZXJ0ZXIoKS5jcmVhdGVJbnB1dFN0cmVhbShyZXNvdXJjZS5nZXRVUkkoKSk7CisJCQlpZiAoc3RyZWFtICE9IG51bGwpIHsKKwkJCQlyZXN1bHQgPSB0cnVlOworCQkJCXN0cmVhbS5jbG9zZSgpOworCQkJfQorCQl9CisJCWNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7CisJCQkvLyBJZ25vcmUKKwkJfQorCQlyZXR1cm4gcmVzdWx0OworCX0KKworCS8qKgorCSAqIFRoaXMgYWx3YXlzIHJldHVybnMgdHJ1ZSBiZWNhdXNlIGl0IGlzIG5vdCBjdXJyZW50bHkgc3VwcG9ydGVkLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBib29sZWFuIGlzU2F2ZUFzQWxsb3dlZCgpIHsKKwkJcmV0dXJuIHRydWU7CisJfQorCisJLyoqCisJICogVGhpcyBhbHNvIGNoYW5nZXMgdGhlIGVkaXRvcidzIGlucHV0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGRvU2F2ZUFzKCkgeworCQlTYXZlQXNEaWFsb2cgc2F2ZUFzRGlhbG9nID0gbmV3IFNhdmVBc0RpYWxvZyhnZXRTaXRlKCkuZ2V0U2hlbGwoKSk7CisJCXNhdmVBc0RpYWxvZy5vcGVuKCk7CisJCUlQYXRoIHBhdGggPSBzYXZlQXNEaWFsb2cuZ2V0UmVzdWx0KCk7CisJCWlmIChwYXRoICE9IG51bGwpIHsKKwkJCUlGaWxlIGZpbGUgPSBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuZ2V0Um9vdCgpLmdldEZpbGUocGF0aCk7CisJCQlpZiAoZmlsZSAhPSBudWxsKSB7CisJCQkJZG9TYXZlQXMoVVJJLmNyZWF0ZVBsYXRmb3JtUmVzb3VyY2VVUkkoZmlsZS5nZXRGdWxsUGF0aCgpLnRvU3RyaW5nKCksIHRydWUpLCBuZXcgRmlsZUVkaXRvcklucHV0KGZpbGUpKTsKKwkJCX0KKwkJfQorCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIGRvU2F2ZUFzKFVSSSB1cmksIElFZGl0b3JJbnB1dCBlZGl0b3JJbnB1dCkgeworCQkoZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpLmdldFJlc291cmNlcygpLmdldCgwKSkuc2V0VVJJKHVyaSk7CisJCXNldElucHV0V2l0aE5vdGlmeShlZGl0b3JJbnB1dCk7CisJCXNldFBhcnROYW1lKGVkaXRvcklucHV0LmdldE5hbWUoKSk7CisJCUlQcm9ncmVzc01vbml0b3IgcHJvZ3Jlc3NNb25pdG9yID0KKwkJCWdldEFjdGlvbkJhcnMoKS5nZXRTdGF0dXNMaW5lTWFuYWdlcigpICE9IG51bGwgPworCQkJCWdldEFjdGlvbkJhcnMoKS5nZXRTdGF0dXNMaW5lTWFuYWdlcigpLmdldFByb2dyZXNzTW9uaXRvcigpIDoKKwkJCQluZXcgTnVsbFByb2dyZXNzTW9uaXRvcigpOworCQlkb1NhdmUocHJvZ3Jlc3NNb25pdG9yKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBnb3RvTWFya2VyKElNYXJrZXIgbWFya2VyKSB7CisJCXRyeSB7CisJCQlpZiAobWFya2VyLmdldFR5cGUoKS5lcXVhbHMoRVZhbGlkYXRvci5NQVJLRVIpKSB7CisJCQkJU3RyaW5nIHVyaUF0dHJpYnV0ZSA9IG1hcmtlci5nZXRBdHRyaWJ1dGUoRVZhbGlkYXRvci5VUklfQVRUUklCVVRFLCBudWxsKTsKKwkJCQlpZiAodXJpQXR0cmlidXRlICE9IG51bGwpIHsKKwkJCQkJVVJJIHVyaSA9IFVSSS5jcmVhdGVVUkkodXJpQXR0cmlidXRlKTsKKwkJCQkJRU9iamVjdCBlT2JqZWN0ID0gZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpLmdldEVPYmplY3QodXJpLCB0cnVlKTsKKwkJCQkJaWYgKGVPYmplY3QgIT0gbnVsbCkgeworCQkJCQkgIHNldFNlbGVjdGlvblRvVmlld2VyKENvbGxlY3Rpb25zLnNpbmdsZXRvbihlZGl0aW5nRG9tYWluLmdldFdyYXBwZXIoZU9iamVjdCkpKTsKKwkJCQkJfQorCQkJCX0KKwkJCX0KKwkJfQorCQljYXRjaCAoQ29yZUV4Y2VwdGlvbiBleGNlcHRpb24pIHsKKwkJCUNvcmVFZGl0b3JQbHVnaW4uSU5TVEFOQ0UubG9nKGV4Y2VwdGlvbik7CisJCX0KKwl9CisKKwkvKioKKwkgKiBUaGlzIGlzIGNhbGxlZCBkdXJpbmcgc3RhcnR1cC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBpbml0KElFZGl0b3JTaXRlIHNpdGUsIElFZGl0b3JJbnB1dCBlZGl0b3JJbnB1dCkgeworCQlzZXRTaXRlKHNpdGUpOworCQlzZXRJbnB1dFdpdGhOb3RpZnkoZWRpdG9ySW5wdXQpOworCQlzZXRQYXJ0TmFtZShlZGl0b3JJbnB1dC5nZXROYW1lKCkpOworCQlzaXRlLnNldFNlbGVjdGlvblByb3ZpZGVyKHRoaXMpOworCQlzaXRlLmdldFBhZ2UoKS5hZGRQYXJ0TGlzdGVuZXIocGFydExpc3RlbmVyKTsKKwkJUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmFkZFJlc291cmNlQ2hhbmdlTGlzdGVuZXIocmVzb3VyY2VDaGFuZ2VMaXN0ZW5lciwgSVJlc291cmNlQ2hhbmdlRXZlbnQuUE9TVF9DSEFOR0UpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIHNldEZvY3VzKCkgeworCQlpZiAoY3VycmVudFZpZXdlclBhbmUgIT0gbnVsbCkgeworCQkJY3VycmVudFZpZXdlclBhbmUuc2V0Rm9jdXMoKTsKKwkJfQorCQllbHNlIHsKKwkJCWdldENvbnRyb2woZ2V0QWN0aXZlUGFnZSgpKS5zZXRGb2N1cygpOworCQl9CisJfQorCisJLyoqCisJICogVGhpcyBpbXBsZW1lbnRzIHtAbGluayBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb25Qcm92aWRlcn0uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgYWRkU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyKElTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIgbGlzdGVuZXIpIHsKKwkJc2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVycy5hZGQobGlzdGVuZXIpOworCX0KKworCS8qKgorCSAqIFRoaXMgaW1wbGVtZW50cyB7QGxpbmsgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uUHJvdmlkZXJ9LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIHJlbW92ZVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcihJU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyIGxpc3RlbmVyKSB7CisJCXNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcnMucmVtb3ZlKGxpc3RlbmVyKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGltcGxlbWVudHMge0BsaW5rIG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvblByb3ZpZGVyfSB0byByZXR1cm4gdGhpcyBlZGl0b3IncyBvdmVyYWxsIHNlbGVjdGlvbi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgSVNlbGVjdGlvbiBnZXRTZWxlY3Rpb24oKSB7CisJCXJldHVybiBlZGl0b3JTZWxlY3Rpb247CisJfQorCisJLyoqCisJICogVGhpcyBpbXBsZW1lbnRzIHtAbGluayBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb25Qcm92aWRlcn0gdG8gc2V0IHRoaXMgZWRpdG9yJ3Mgb3ZlcmFsbCBzZWxlY3Rpb24uCisJICogQ2FsbGluZyB0aGlzIHJlc3VsdCB3aWxsIG5vdGlmeSB0aGUgbGlzdGVuZXJzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIHNldFNlbGVjdGlvbihJU2VsZWN0aW9uIHNlbGVjdGlvbikgeworCQllZGl0b3JTZWxlY3Rpb24gPSBzZWxlY3Rpb247CisKKwkJZm9yIChJU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyIGxpc3RlbmVyIDogc2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVycykgeworCQkJbGlzdGVuZXIuc2VsZWN0aW9uQ2hhbmdlZChuZXcgU2VsZWN0aW9uQ2hhbmdlZEV2ZW50KHRoaXMsIHNlbGVjdGlvbikpOworCQl9CisJCXNldFN0YXR1c0xpbmVNYW5hZ2VyKHNlbGVjdGlvbik7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgc2V0U3RhdHVzTGluZU1hbmFnZXIoSVNlbGVjdGlvbiBzZWxlY3Rpb24pIHsKKwkJSVN0YXR1c0xpbmVNYW5hZ2VyIHN0YXR1c0xpbmVNYW5hZ2VyID0gY3VycmVudFZpZXdlciAhPSBudWxsICYmIGN1cnJlbnRWaWV3ZXIgPT0gY29udGVudE91dGxpbmVWaWV3ZXIgPworCQkJY29udGVudE91dGxpbmVTdGF0dXNMaW5lTWFuYWdlciA6IGdldEFjdGlvbkJhcnMoKS5nZXRTdGF0dXNMaW5lTWFuYWdlcigpOworCisJCWlmIChzdGF0dXNMaW5lTWFuYWdlciAhPSBudWxsKSB7CisJCQlpZiAoc2VsZWN0aW9uIGluc3RhbmNlb2YgSVN0cnVjdHVyZWRTZWxlY3Rpb24pIHsKKwkJCQlDb2xsZWN0aW9uPD8+IGNvbGxlY3Rpb24gPSAoKElTdHJ1Y3R1cmVkU2VsZWN0aW9uKXNlbGVjdGlvbikudG9MaXN0KCk7CisJCQkJc3dpdGNoIChjb2xsZWN0aW9uLnNpemUoKSkgeworCQkJCQljYXNlIDA6IHsKKwkJCQkJCXN0YXR1c0xpbmVNYW5hZ2VyLnNldE1lc3NhZ2UoZ2V0U3RyaW5nKCJfVUlfTm9PYmplY3RTZWxlY3RlZCIpKTsgLy8kTk9OLU5MUy0xJAorCQkJCQkJYnJlYWs7CisJCQkJCX0KKwkJCQkJY2FzZSAxOiB7CisJCQkJCQlTdHJpbmcgdGV4dCA9IG5ldyBBZGFwdGVyRmFjdG9yeUl0ZW1EZWxlZ2F0b3IoYWRhcHRlckZhY3RvcnkpLmdldFRleHQoY29sbGVjdGlvbi5pdGVyYXRvcigpLm5leHQoKSk7CisJCQkJCQlzdGF0dXNMaW5lTWFuYWdlci5zZXRNZXNzYWdlKGdldFN0cmluZygiX1VJX1NpbmdsZU9iamVjdFNlbGVjdGVkIiwgdGV4dCkpOyAvLyROT04tTkxTLTEkCisJCQkJCQlicmVhazsKKwkJCQkJfQorCQkJCQlkZWZhdWx0OiB7CisJCQkJCQlzdGF0dXNMaW5lTWFuYWdlci5zZXRNZXNzYWdlKGdldFN0cmluZygiX1VJX011bHRpT2JqZWN0U2VsZWN0ZWQiLCBJbnRlZ2VyLnRvU3RyaW5nKGNvbGxlY3Rpb24uc2l6ZSgpKSkpOyAvLyROT04tTkxTLTEkCisJCQkJCQlicmVhazsKKwkJCQkJfQorCQkJCX0KKwkJCX0KKwkJCWVsc2UgeworCQkJCXN0YXR1c0xpbmVNYW5hZ2VyLnNldE1lc3NhZ2UoIiIpOyAvLyROT04tTkxTLTEkCisJCQl9CisJCX0KKwl9CisKKwkvKioKKwkgKiBUaGlzIGxvb2tzIHVwIGEgc3RyaW5nIGluIHRoZSBwbHVnaW4ncyBwbHVnaW4ucHJvcGVydGllcyBmaWxlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByaXZhdGUgc3RhdGljIFN0cmluZyBnZXRTdHJpbmcoU3RyaW5nIGtleSkgeworCQlyZXR1cm4gQ29yZUVkaXRvclBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoa2V5KTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGxvb2tzIHVwIGEgc3RyaW5nIGluIHBsdWdpbi5wcm9wZXJ0aWVzLCBtYWtpbmcgYSBzdWJzdGl0dXRpb24uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIGdldFN0cmluZyhTdHJpbmcga2V5LCBPYmplY3QgczEpIHsKKwkJcmV0dXJuIENvcmVFZGl0b3JQbHVnaW4uSU5TVEFOQ0UuZ2V0U3RyaW5nKGtleSwgbmV3IE9iamVjdCBbXSB7IHMxIH0pOworCX0KKworCS8qKgorCSAqIFRoaXMgaW1wbGVtZW50cyB7QGxpbmsgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklNZW51TGlzdGVuZXJ9IHRvIGhlbHAgZmlsbCB0aGUgY29udGV4dCBtZW51cyB3aXRoIGNvbnRyaWJ1dGlvbnMgZnJvbSB0aGUgRWRpdCBtZW51LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIG1lbnVBYm91dFRvU2hvdyhJTWVudU1hbmFnZXIgbWVudU1hbmFnZXIpIHsKKwkJKChJTWVudUxpc3RlbmVyKWdldEVkaXRvclNpdGUoKS5nZXRBY3Rpb25CYXJDb250cmlidXRvcigpKS5tZW51QWJvdXRUb1Nob3cobWVudU1hbmFnZXIpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFZGl0aW5nRG9tYWluQWN0aW9uQmFyQ29udHJpYnV0b3IgZ2V0QWN0aW9uQmFyQ29udHJpYnV0b3IoKSB7CisJCXJldHVybiAoRWRpdGluZ0RvbWFpbkFjdGlvbkJhckNvbnRyaWJ1dG9yKWdldEVkaXRvclNpdGUoKS5nZXRBY3Rpb25CYXJDb250cmlidXRvcigpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBJQWN0aW9uQmFycyBnZXRBY3Rpb25CYXJzKCkgeworCQlyZXR1cm4gZ2V0QWN0aW9uQmFyQ29udHJpYnV0b3IoKS5nZXRBY3Rpb25CYXJzKCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEFkYXB0ZXJGYWN0b3J5IGdldEFkYXB0ZXJGYWN0b3J5KCkgeworCQlyZXR1cm4gYWRhcHRlckZhY3Rvcnk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgZGlzcG9zZSgpIHsKKwkJdXBkYXRlUHJvYmxlbUluZGljYXRpb24gPSBmYWxzZTsKKworCQlSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkucmVtb3ZlUmVzb3VyY2VDaGFuZ2VMaXN0ZW5lcihyZXNvdXJjZUNoYW5nZUxpc3RlbmVyKTsKKworCQlnZXRTaXRlKCkuZ2V0UGFnZSgpLnJlbW92ZVBhcnRMaXN0ZW5lcihwYXJ0TGlzdGVuZXIpOworCisJCWFkYXB0ZXJGYWN0b3J5LmRpc3Bvc2UoKTsKKworCQlpZiAoZ2V0QWN0aW9uQmFyQ29udHJpYnV0b3IoKS5nZXRBY3RpdmVFZGl0b3IoKSA9PSB0aGlzKSB7CisJCQlnZXRBY3Rpb25CYXJDb250cmlidXRvcigpLnNldEFjdGl2ZUVkaXRvcihudWxsKTsKKwkJfQorCisJCWlmIChwcm9wZXJ0eVNoZWV0UGFnZSAhPSBudWxsKSB7CisJCQlwcm9wZXJ0eVNoZWV0UGFnZS5kaXNwb3NlKCk7CisJCX0KKworCQlpZiAoY29udGVudE91dGxpbmVQYWdlICE9IG51bGwpIHsKKwkJCWNvbnRlbnRPdXRsaW5lUGFnZS5kaXNwb3NlKCk7CisJCX0KKworCQlzdXBlci5kaXNwb3NlKCk7CisJfQorCisJLyoqCisJICogUmV0dXJucyB3aGV0aGVyIHRoZSBvdXRsaW5lIHZpZXcgc2hvdWxkIGJlIHByZXNlbnRlZCB0byB0aGUgdXNlci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgYm9vbGVhbiBzaG93T3V0bGluZVZpZXcoKSB7CisJCXJldHVybiB0cnVlOworCX0KK30KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2xvZ2dlci9wcmVzZW50YXRpb24vTG9nZ2VyTW9kZWxXaXphcmQuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2xvZ2dlci9wcmVzZW50YXRpb24vTG9nZ2VyTW9kZWxXaXphcmQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zOTBhMmVhCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvbG9nZ2VyL3ByZXNlbnRhdGlvbi9Mb2dnZXJNb2RlbFdpemFyZC5qYXZhCkBAIC0wLDAgKzEsNjA4IEBACisvKioKKyAqIDxjb3B5cmlnaHQ+CisgKiA8L2NvcHlyaWdodD4KKyAqCisgKiAkSWQkCisgKi8KK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmxvZ2dlci5wcmVzZW50YXRpb247CisKKworaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7CitpbXBvcnQgamF2YS51dGlsLkFycmF5czsKK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbnM7CitpbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CitpbXBvcnQgamF2YS51dGlsLk1hcDsKK2ltcG9ydCBqYXZhLnV0aWwuTWlzc2luZ1Jlc291cmNlRXhjZXB0aW9uOworaW1wb3J0IGphdmEudXRpbC5TdHJpbmdUb2tlbml6ZXI7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JQ29udGFpbmVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklGaWxlOworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklGb2xkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3Q7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVJlc291cmNlOworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLlJlc291cmNlc1BsdWdpbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVByb2dyZXNzTW9uaXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGF0aDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLkNvbW1vblBsdWdpbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuVVJJOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzc2lmaWVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5yZXNvdXJjZS5SZXNvdXJjZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUucmVzb3VyY2UuUmVzb3VyY2VTZXQ7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnJlc291cmNlLmltcGwuUmVzb3VyY2VTZXRJbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS54bWkuWE1MUmVzb3VyY2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkucHJvdmlkZXIuRXh0ZW5kZWRJbWFnZVJlZ2lzdHJ5OworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmRpYWxvZ3MuTWVzc2FnZURpYWxvZzsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU3RydWN0dXJlZFNlbGVjdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlN0cnVjdHVyZWRTZWxlY3Rpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uud2l6YXJkLldpemFyZDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS53aXphcmQuV2l6YXJkUGFnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLnByZXNlbnRhdGlvbi5Db3JlRWRpdG9yUGx1Z2luOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24ucHJvdmlkZXIuQ29yZUVkaXRQbHVnaW47CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmxvZ2dlci5Mb2dnZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5sb2dnZXIuTG9nZ2VyUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuU1dUOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuTW9kaWZ5RXZlbnQ7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5Nb2RpZnlMaXN0ZW5lcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QubGF5b3V0LkdyaWREYXRhOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5sYXlvdXQuR3JpZExheW91dDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21ibzsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuTGFiZWw7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuSU5ld1dpemFyZDsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5JV29ya2JlbmNoOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2hQYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2hQYXJ0OworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2hXaW5kb3c7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuUGFydEluaXRFeGNlcHRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuYWN0aW9ucy5Xb3Jrc3BhY2VNb2RpZnlPcGVyYXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuZGlhbG9ncy5XaXphcmROZXdGaWxlQ3JlYXRpb25QYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLnBhcnQuRmlsZUVkaXRvcklucHV0OworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLnBhcnQuSVNldFNlbGVjdGlvblRhcmdldDsKKworCisvKioKKyAqIFRoaXMgaXMgYSBzaW1wbGUgd2l6YXJkIGZvciBjcmVhdGluZyBhIG5ldyBtb2RlbCBmaWxlLgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgTG9nZ2VyTW9kZWxXaXphcmQgZXh0ZW5kcyBXaXphcmQgaW1wbGVtZW50cyBJTmV3V2l6YXJkIHsKKwkvKioKKwkgKiBUaGUgc3VwcG9ydGVkIGV4dGVuc2lvbnMgZm9yIGNyZWF0ZWQgZmlsZXMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBMaXN0PFN0cmluZz4gRklMRV9FWFRFTlNJT05TID0KKwkJQ29sbGVjdGlvbnMudW5tb2RpZmlhYmxlTGlzdChBcnJheXMuYXNMaXN0KENvcmVFZGl0b3JQbHVnaW4uSU5TVEFOQ0UuZ2V0U3RyaW5nKCJfVUlfTG9nZ2VyRWRpdG9yRmlsZW5hbWVFeHRlbnNpb25zIikuc3BsaXQoIlxccyosXFxzKiIpKSk7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAorCisJLyoqCisJICogQSBmb3JtYXR0ZWQgbGlzdCBvZiBzdXBwb3J0ZWQgZmlsZSBleHRlbnNpb25zLCBzdWl0YWJsZSBmb3IgZGlzcGxheS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBGT1JNQVRURURfRklMRV9FWFRFTlNJT05TID0KKwkJQ29yZUVkaXRvclBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoIl9VSV9Mb2dnZXJFZGl0b3JGaWxlbmFtZUV4dGVuc2lvbnMiKS5yZXBsYWNlQWxsKCJcXHMqLFxccyoiLCAiLCAiKTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkIC8vJE5PTi1OTFMtMyQKKworCS8qKgorCSAqIFRoaXMgY2FjaGVzIGFuIGluc3RhbmNlIG9mIHRoZSBtb2RlbCBwYWNrYWdlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBMb2dnZXJQYWNrYWdlIGxvZ2dlclBhY2thZ2UgPSBMb2dnZXJQYWNrYWdlLmVJTlNUQU5DRTsKKworCS8qKgorCSAqIFRoaXMgY2FjaGVzIGFuIGluc3RhbmNlIG9mIHRoZSBtb2RlbCBmYWN0b3J5LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBMb2dnZXJGYWN0b3J5IGxvZ2dlckZhY3RvcnkgPSBsb2dnZXJQYWNrYWdlLmdldExvZ2dlckZhY3RvcnkoKTsKKworCS8qKgorCSAqIFRoaXMgaXMgdGhlIGZpbGUgY3JlYXRpb24gcGFnZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgTG9nZ2VyTW9kZWxXaXphcmROZXdGaWxlQ3JlYXRpb25QYWdlIG5ld0ZpbGVDcmVhdGlvblBhZ2U7CisKKwkvKioKKwkgKiBUaGlzIGlzIHRoZSBpbml0aWFsIG9iamVjdCBjcmVhdGlvbiBwYWdlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBMb2dnZXJNb2RlbFdpemFyZEluaXRpYWxPYmplY3RDcmVhdGlvblBhZ2UgaW5pdGlhbE9iamVjdENyZWF0aW9uUGFnZTsKKworCS8qKgorCSAqIFJlbWVtYmVyIHRoZSBzZWxlY3Rpb24gZHVyaW5nIGluaXRpYWxpemF0aW9uIGZvciBwb3B1bGF0aW5nIHRoZSBkZWZhdWx0IGNvbnRhaW5lci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgSVN0cnVjdHVyZWRTZWxlY3Rpb24gc2VsZWN0aW9uOworCisJLyoqCisJICogUmVtZW1iZXIgdGhlIHdvcmtiZW5jaCBkdXJpbmcgaW5pdGlhbGl6YXRpb24uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIElXb3JrYmVuY2ggd29ya2JlbmNoOworCisJLyoqCisJICogQ2FjaGVzIHRoZSBuYW1lcyBvZiB0aGUgdHlwZXMgdGhhdCBjYW4gYmUgY3JlYXRlZCBhcyB0aGUgcm9vdCBvYmplY3QuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIExpc3Q8U3RyaW5nPiBpbml0aWFsT2JqZWN0TmFtZXM7CisKKwkvKioKKwkgKiBUaGlzIGp1c3QgcmVjb3JkcyB0aGUgaW5mb3JtYXRpb24uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgaW5pdChJV29ya2JlbmNoIHdvcmtiZW5jaCwgSVN0cnVjdHVyZWRTZWxlY3Rpb24gc2VsZWN0aW9uKSB7CisJCXRoaXMud29ya2JlbmNoID0gd29ya2JlbmNoOworCQl0aGlzLnNlbGVjdGlvbiA9IHNlbGVjdGlvbjsKKwkJc2V0V2luZG93VGl0bGUoQ29yZUVkaXRvclBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoIl9VSV9XaXphcmRfbGFiZWwiKSk7IC8vJE5PTi1OTFMtMSQKKwkJc2V0RGVmYXVsdFBhZ2VJbWFnZURlc2NyaXB0b3IoRXh0ZW5kZWRJbWFnZVJlZ2lzdHJ5LklOU1RBTkNFLmdldEltYWdlRGVzY3JpcHRvcihDb3JlRWRpdG9yUGx1Z2luLklOU1RBTkNFLmdldEltYWdlKCJmdWxsL3dpemJhbi9OZXdMb2dnZXIiKSkpOyAvLyROT04tTkxTLTEkCisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgbmFtZXMgb2YgdGhlIHR5cGVzIHRoYXQgY2FuIGJlIGNyZWF0ZWQgYXMgdGhlIHJvb3Qgb2JqZWN0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBDb2xsZWN0aW9uPFN0cmluZz4gZ2V0SW5pdGlhbE9iamVjdE5hbWVzKCkgeworCQlpZiAoaW5pdGlhbE9iamVjdE5hbWVzID09IG51bGwpIHsKKwkJCWluaXRpYWxPYmplY3ROYW1lcyA9IG5ldyBBcnJheUxpc3Q8U3RyaW5nPigpOworCQkJZm9yIChFQ2xhc3NpZmllciBlQ2xhc3NpZmllciA6IGxvZ2dlclBhY2thZ2UuZ2V0RUNsYXNzaWZpZXJzKCkpIHsKKwkJCQlpZiAoZUNsYXNzaWZpZXIgaW5zdGFuY2VvZiBFQ2xhc3MpIHsKKwkJCQkJRUNsYXNzIGVDbGFzcyA9IChFQ2xhc3MpZUNsYXNzaWZpZXI7CisJCQkJCWlmICghZUNsYXNzLmlzQWJzdHJhY3QoKSkgeworCQkJCQkJaW5pdGlhbE9iamVjdE5hbWVzLmFkZChlQ2xhc3MuZ2V0TmFtZSgpKTsKKwkJCQkJfQorCQkJCX0KKwkJCX0KKwkJCUNvbGxlY3Rpb25zLnNvcnQoaW5pdGlhbE9iamVjdE5hbWVzLCBDb21tb25QbHVnaW4uSU5TVEFOQ0UuZ2V0Q29tcGFyYXRvcigpKTsKKwkJfQorCQlyZXR1cm4gaW5pdGlhbE9iamVjdE5hbWVzOworCX0KKworCS8qKgorCSAqIENyZWF0ZSBhIG5ldyBtb2RlbC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgRU9iamVjdCBjcmVhdGVJbml0aWFsTW9kZWwoKSB7CisJCUVDbGFzcyBlQ2xhc3MgPSAoRUNsYXNzKWxvZ2dlclBhY2thZ2UuZ2V0RUNsYXNzaWZpZXIoaW5pdGlhbE9iamVjdENyZWF0aW9uUGFnZS5nZXRJbml0aWFsT2JqZWN0TmFtZSgpKTsKKwkJRU9iamVjdCByb290T2JqZWN0ID0gbG9nZ2VyRmFjdG9yeS5jcmVhdGUoZUNsYXNzKTsKKwkJcmV0dXJuIHJvb3RPYmplY3Q7CisJfQorCisJLyoqCisJICogRG8gdGhlIHdvcmsgYWZ0ZXIgZXZlcnl0aGluZyBpcyBzcGVjaWZpZWQuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIGJvb2xlYW4gcGVyZm9ybUZpbmlzaCgpIHsKKwkJdHJ5IHsKKwkJCS8vIFJlbWVtYmVyIHRoZSBmaWxlLgorCQkJLy8KKwkJCWZpbmFsIElGaWxlIG1vZGVsRmlsZSA9IGdldE1vZGVsRmlsZSgpOworCisJCQkvLyBEbyB0aGUgd29yayB3aXRoaW4gYW4gb3BlcmF0aW9uLgorCQkJLy8KKwkJCVdvcmtzcGFjZU1vZGlmeU9wZXJhdGlvbiBvcGVyYXRpb24gPQorCQkJCW5ldyBXb3Jrc3BhY2VNb2RpZnlPcGVyYXRpb24oKSB7CisJCQkJCUBPdmVycmlkZQorCQkJCQlwcm90ZWN0ZWQgdm9pZCBleGVjdXRlKElQcm9ncmVzc01vbml0b3IgcHJvZ3Jlc3NNb25pdG9yKSB7CisJCQkJCQl0cnkgeworCQkJCQkJCS8vIENyZWF0ZSBhIHJlc291cmNlIHNldAorCQkJCQkJCS8vCisJCQkJCQkJUmVzb3VyY2VTZXQgcmVzb3VyY2VTZXQgPSBuZXcgUmVzb3VyY2VTZXRJbXBsKCk7CisKKwkJCQkJCQkvLyBHZXQgdGhlIFVSSSBvZiB0aGUgbW9kZWwgZmlsZS4KKwkJCQkJCQkvLworCQkJCQkJCVVSSSBmaWxlVVJJID0gVVJJLmNyZWF0ZVBsYXRmb3JtUmVzb3VyY2VVUkkobW9kZWxGaWxlLmdldEZ1bGxQYXRoKCkudG9TdHJpbmcoKSwgdHJ1ZSk7CisKKwkJCQkJCQkvLyBDcmVhdGUgYSByZXNvdXJjZSBmb3IgdGhpcyBmaWxlLgorCQkJCQkJCS8vCisJCQkJCQkJUmVzb3VyY2UgcmVzb3VyY2UgPSByZXNvdXJjZVNldC5jcmVhdGVSZXNvdXJjZShmaWxlVVJJKTsKKworCQkJCQkJCS8vIEFkZCB0aGUgaW5pdGlhbCBtb2RlbCBvYmplY3QgdG8gdGhlIGNvbnRlbnRzLgorCQkJCQkJCS8vCisJCQkJCQkJRU9iamVjdCByb290T2JqZWN0ID0gY3JlYXRlSW5pdGlhbE1vZGVsKCk7CisJCQkJCQkJaWYgKHJvb3RPYmplY3QgIT0gbnVsbCkgeworCQkJCQkJCQlyZXNvdXJjZS5nZXRDb250ZW50cygpLmFkZChyb290T2JqZWN0KTsKKwkJCQkJCQl9CisKKwkJCQkJCQkvLyBTYXZlIHRoZSBjb250ZW50cyBvZiB0aGUgcmVzb3VyY2UgdG8gdGhlIGZpbGUgc3lzdGVtLgorCQkJCQkJCS8vCisJCQkJCQkJTWFwPE9iamVjdCwgT2JqZWN0PiBvcHRpb25zID0gbmV3IEhhc2hNYXA8T2JqZWN0LCBPYmplY3Q+KCk7CisJCQkJCQkJb3B0aW9ucy5wdXQoWE1MUmVzb3VyY2UuT1BUSU9OX0VOQ09ESU5HLCBpbml0aWFsT2JqZWN0Q3JlYXRpb25QYWdlLmdldEVuY29kaW5nKCkpOworCQkJCQkJCXJlc291cmNlLnNhdmUob3B0aW9ucyk7CisJCQkJCQl9CisJCQkJCQljYXRjaCAoRXhjZXB0aW9uIGV4Y2VwdGlvbikgeworCQkJCQkJCUNvcmVFZGl0b3JQbHVnaW4uSU5TVEFOQ0UubG9nKGV4Y2VwdGlvbik7CisJCQkJCQl9CisJCQkJCQlmaW5hbGx5IHsKKwkJCQkJCQlwcm9ncmVzc01vbml0b3IuZG9uZSgpOworCQkJCQkJfQorCQkJCQl9CisJCQkJfTsKKworCQkJZ2V0Q29udGFpbmVyKCkucnVuKGZhbHNlLCBmYWxzZSwgb3BlcmF0aW9uKTsKKworCQkJLy8gU2VsZWN0IHRoZSBuZXcgZmlsZSByZXNvdXJjZSBpbiB0aGUgY3VycmVudCB2aWV3LgorCQkJLy8KKwkJCUlXb3JrYmVuY2hXaW5kb3cgd29ya2JlbmNoV2luZG93ID0gd29ya2JlbmNoLmdldEFjdGl2ZVdvcmtiZW5jaFdpbmRvdygpOworCQkJSVdvcmtiZW5jaFBhZ2UgcGFnZSA9IHdvcmtiZW5jaFdpbmRvdy5nZXRBY3RpdmVQYWdlKCk7CisJCQlmaW5hbCBJV29ya2JlbmNoUGFydCBhY3RpdmVQYXJ0ID0gcGFnZS5nZXRBY3RpdmVQYXJ0KCk7CisJCQlpZiAoYWN0aXZlUGFydCBpbnN0YW5jZW9mIElTZXRTZWxlY3Rpb25UYXJnZXQpIHsKKwkJCQlmaW5hbCBJU2VsZWN0aW9uIHRhcmdldFNlbGVjdGlvbiA9IG5ldyBTdHJ1Y3R1cmVkU2VsZWN0aW9uKG1vZGVsRmlsZSk7CisJCQkJZ2V0U2hlbGwoKS5nZXREaXNwbGF5KCkuYXN5bmNFeGVjCisJCQkJCShuZXcgUnVubmFibGUoKSB7CisJCQkJCQkgcHVibGljIHZvaWQgcnVuKCkgeworCQkJCQkJCSAoKElTZXRTZWxlY3Rpb25UYXJnZXQpYWN0aXZlUGFydCkuc2VsZWN0UmV2ZWFsKHRhcmdldFNlbGVjdGlvbik7CisJCQkJCQkgfQorCQkJCQkgfSk7CisJCQl9CisKKwkJCS8vIE9wZW4gYW4gZWRpdG9yIG9uIHRoZSBuZXcgZmlsZS4KKwkJCS8vCisJCQl0cnkgeworCQkJCXBhZ2Uub3BlbkVkaXRvcgorCQkJCQkobmV3IEZpbGVFZGl0b3JJbnB1dChtb2RlbEZpbGUpLAorCQkJCQkgd29ya2JlbmNoLmdldEVkaXRvclJlZ2lzdHJ5KCkuZ2V0RGVmYXVsdEVkaXRvcihtb2RlbEZpbGUuZ2V0RnVsbFBhdGgoKS50b1N0cmluZygpKS5nZXRJZCgpKTsJCQkJCSAJIAorCQkJfQorCQkJY2F0Y2ggKFBhcnRJbml0RXhjZXB0aW9uIGV4Y2VwdGlvbikgeworCQkJCU1lc3NhZ2VEaWFsb2cub3BlbkVycm9yKHdvcmtiZW5jaFdpbmRvdy5nZXRTaGVsbCgpLCBDb3JlRWRpdG9yUGx1Z2luLklOU1RBTkNFLmdldFN0cmluZygiX1VJX09wZW5FZGl0b3JFcnJvcl9sYWJlbCIpLCBleGNlcHRpb24uZ2V0TWVzc2FnZSgpKTsgLy8kTk9OLU5MUy0xJAorCQkJCXJldHVybiBmYWxzZTsKKwkJCX0KKworCQkJcmV0dXJuIHRydWU7CisJCX0KKwkJY2F0Y2ggKEV4Y2VwdGlvbiBleGNlcHRpb24pIHsKKwkJCUNvcmVFZGl0b3JQbHVnaW4uSU5TVEFOQ0UubG9nKGV4Y2VwdGlvbik7CisJCQlyZXR1cm4gZmFsc2U7CisJCX0KKwl9CisKKwkvKioKKwkgKiBUaGlzIGlzIHRoZSBvbmUgcGFnZSBvZiB0aGUgd2l6YXJkLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBjbGFzcyBMb2dnZXJNb2RlbFdpemFyZE5ld0ZpbGVDcmVhdGlvblBhZ2UgZXh0ZW5kcyBXaXphcmROZXdGaWxlQ3JlYXRpb25QYWdlIHsKKwkJLyoqCisJCSAqIFBhc3MgaW4gdGhlIHNlbGVjdGlvbi4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCXB1YmxpYyBMb2dnZXJNb2RlbFdpemFyZE5ld0ZpbGVDcmVhdGlvblBhZ2UoU3RyaW5nIHBhZ2VJZCwgSVN0cnVjdHVyZWRTZWxlY3Rpb24gc2VsZWN0aW9uKSB7CisJCQlzdXBlcihwYWdlSWQsIHNlbGVjdGlvbik7CisJCX0KKworCQkvKioKKwkJICogVGhlIGZyYW1ld29yayBjYWxscyB0aGlzIHRvIHNlZSBpZiB0aGUgZmlsZSBpcyBjb3JyZWN0LgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJQE92ZXJyaWRlCisJCXByb3RlY3RlZCBib29sZWFuIHZhbGlkYXRlUGFnZSgpIHsKKwkJCWlmIChzdXBlci52YWxpZGF0ZVBhZ2UoKSkgeworCQkJCVN0cmluZyBleHRlbnNpb24gPSBuZXcgUGF0aChnZXRGaWxlTmFtZSgpKS5nZXRGaWxlRXh0ZW5zaW9uKCk7CisJCQkJaWYgKGV4dGVuc2lvbiA9PSBudWxsIHx8ICFGSUxFX0VYVEVOU0lPTlMuY29udGFpbnMoZXh0ZW5zaW9uKSkgeworCQkJCQlTdHJpbmcga2V5ID0gRklMRV9FWFRFTlNJT05TLnNpemUoKSA+IDEgPyAiX1dBUk5fRmlsZW5hbWVFeHRlbnNpb25zIiA6ICJfV0FSTl9GaWxlbmFtZUV4dGVuc2lvbiI7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAorCQkJCQlzZXRFcnJvck1lc3NhZ2UoQ29yZUVkaXRvclBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoa2V5LCBuZXcgT2JqZWN0IFtdIHsgRk9STUFUVEVEX0ZJTEVfRVhURU5TSU9OUyB9KSk7CisJCQkJCXJldHVybiBmYWxzZTsKKwkJCQl9CisJCQkJcmV0dXJuIHRydWU7CisJCQl9CisJCQlyZXR1cm4gZmFsc2U7CisJCX0KKworCQkvKioKKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCXB1YmxpYyBJRmlsZSBnZXRNb2RlbEZpbGUoKSB7CisJCQlyZXR1cm4gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmdldFJvb3QoKS5nZXRGaWxlKGdldENvbnRhaW5lckZ1bGxQYXRoKCkuYXBwZW5kKGdldEZpbGVOYW1lKCkpKTsKKwkJfQorCX0KKworCS8qKgorCSAqIFRoaXMgaXMgdGhlIHBhZ2Ugd2hlcmUgdGhlIHR5cGUgb2Ygb2JqZWN0IHRvIGNyZWF0ZSBpcyBzZWxlY3RlZC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgY2xhc3MgTG9nZ2VyTW9kZWxXaXphcmRJbml0aWFsT2JqZWN0Q3JlYXRpb25QYWdlIGV4dGVuZHMgV2l6YXJkUGFnZSB7CisJCS8qKgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJcHJvdGVjdGVkIENvbWJvIGluaXRpYWxPYmplY3RGaWVsZDsKKworCQkvKioKKwkJICogQGdlbmVyYXRlZAorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICovCisJCXByb3RlY3RlZCBMaXN0PFN0cmluZz4gZW5jb2RpbmdzOworCisJCS8qKgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJcHJvdGVjdGVkIENvbWJvIGVuY29kaW5nRmllbGQ7CisKKwkJLyoqCisJCSAqIFBhc3MgaW4gdGhlIHNlbGVjdGlvbi4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCXB1YmxpYyBMb2dnZXJNb2RlbFdpemFyZEluaXRpYWxPYmplY3RDcmVhdGlvblBhZ2UoU3RyaW5nIHBhZ2VJZCkgeworCQkJc3VwZXIocGFnZUlkKTsKKwkJfQorCisJCS8qKgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJcHVibGljIHZvaWQgY3JlYXRlQ29udHJvbChDb21wb3NpdGUgcGFyZW50KSB7CisJCQlDb21wb3NpdGUgY29tcG9zaXRlID0gbmV3IENvbXBvc2l0ZShwYXJlbnQsIFNXVC5OT05FKTsgeworCQkJCUdyaWRMYXlvdXQgbGF5b3V0ID0gbmV3IEdyaWRMYXlvdXQoKTsKKwkJCQlsYXlvdXQubnVtQ29sdW1ucyA9IDE7CisJCQkJbGF5b3V0LnZlcnRpY2FsU3BhY2luZyA9IDEyOworCQkJCWNvbXBvc2l0ZS5zZXRMYXlvdXQobGF5b3V0KTsKKworCQkJCUdyaWREYXRhIGRhdGEgPSBuZXcgR3JpZERhdGEoKTsKKwkJCQlkYXRhLnZlcnRpY2FsQWxpZ25tZW50ID0gR3JpZERhdGEuRklMTDsKKwkJCQlkYXRhLmdyYWJFeGNlc3NWZXJ0aWNhbFNwYWNlID0gdHJ1ZTsKKwkJCQlkYXRhLmhvcml6b250YWxBbGlnbm1lbnQgPSBHcmlkRGF0YS5GSUxMOworCQkJCWNvbXBvc2l0ZS5zZXRMYXlvdXREYXRhKGRhdGEpOworCQkJfQorCisJCQlMYWJlbCBjb250YWluZXJMYWJlbCA9IG5ldyBMYWJlbChjb21wb3NpdGUsIFNXVC5MRUZUKTsKKwkJCXsKKwkJCQljb250YWluZXJMYWJlbC5zZXRUZXh0KENvcmVFZGl0b3JQbHVnaW4uSU5TVEFOQ0UuZ2V0U3RyaW5nKCJfVUlfTW9kZWxPYmplY3QiKSk7IC8vJE5PTi1OTFMtMSQKKworCQkJCUdyaWREYXRhIGRhdGEgPSBuZXcgR3JpZERhdGEoKTsKKwkJCQlkYXRhLmhvcml6b250YWxBbGlnbm1lbnQgPSBHcmlkRGF0YS5GSUxMOworCQkJCWNvbnRhaW5lckxhYmVsLnNldExheW91dERhdGEoZGF0YSk7CisJCQl9CisKKwkJCWluaXRpYWxPYmplY3RGaWVsZCA9IG5ldyBDb21ibyhjb21wb3NpdGUsIFNXVC5CT1JERVIpOworCQkJeworCQkJCUdyaWREYXRhIGRhdGEgPSBuZXcgR3JpZERhdGEoKTsKKwkJCQlkYXRhLmhvcml6b250YWxBbGlnbm1lbnQgPSBHcmlkRGF0YS5GSUxMOworCQkJCWRhdGEuZ3JhYkV4Y2Vzc0hvcml6b250YWxTcGFjZSA9IHRydWU7CisJCQkJaW5pdGlhbE9iamVjdEZpZWxkLnNldExheW91dERhdGEoZGF0YSk7CisJCQl9CisKKwkJCWZvciAoU3RyaW5nIG9iamVjdE5hbWUgOiBnZXRJbml0aWFsT2JqZWN0TmFtZXMoKSkgeworCQkJCWluaXRpYWxPYmplY3RGaWVsZC5hZGQoZ2V0TGFiZWwob2JqZWN0TmFtZSkpOworCQkJfQorCisJCQlpZiAoaW5pdGlhbE9iamVjdEZpZWxkLmdldEl0ZW1Db3VudCgpID09IDEpIHsKKwkJCQlpbml0aWFsT2JqZWN0RmllbGQuc2VsZWN0KDApOworCQkJfQorCQkJaW5pdGlhbE9iamVjdEZpZWxkLmFkZE1vZGlmeUxpc3RlbmVyKHZhbGlkYXRvcik7CisKKwkJCUxhYmVsIGVuY29kaW5nTGFiZWwgPSBuZXcgTGFiZWwoY29tcG9zaXRlLCBTV1QuTEVGVCk7CisJCQl7CisJCQkJZW5jb2RpbmdMYWJlbC5zZXRUZXh0KENvcmVFZGl0b3JQbHVnaW4uSU5TVEFOQ0UuZ2V0U3RyaW5nKCJfVUlfWE1MRW5jb2RpbmciKSk7IC8vJE5PTi1OTFMtMSQKKworCQkJCUdyaWREYXRhIGRhdGEgPSBuZXcgR3JpZERhdGEoKTsKKwkJCQlkYXRhLmhvcml6b250YWxBbGlnbm1lbnQgPSBHcmlkRGF0YS5GSUxMOworCQkJCWVuY29kaW5nTGFiZWwuc2V0TGF5b3V0RGF0YShkYXRhKTsKKwkJCX0KKwkJCWVuY29kaW5nRmllbGQgPSBuZXcgQ29tYm8oY29tcG9zaXRlLCBTV1QuQk9SREVSKTsKKwkJCXsKKwkJCQlHcmlkRGF0YSBkYXRhID0gbmV3IEdyaWREYXRhKCk7CisJCQkJZGF0YS5ob3Jpem9udGFsQWxpZ25tZW50ID0gR3JpZERhdGEuRklMTDsKKwkJCQlkYXRhLmdyYWJFeGNlc3NIb3Jpem9udGFsU3BhY2UgPSB0cnVlOworCQkJCWVuY29kaW5nRmllbGQuc2V0TGF5b3V0RGF0YShkYXRhKTsKKwkJCX0KKworCQkJZm9yIChTdHJpbmcgZW5jb2RpbmcgOiBnZXRFbmNvZGluZ3MoKSkgeworCQkJCWVuY29kaW5nRmllbGQuYWRkKGVuY29kaW5nKTsKKwkJCX0KKworCQkJZW5jb2RpbmdGaWVsZC5zZWxlY3QoMCk7CisJCQllbmNvZGluZ0ZpZWxkLmFkZE1vZGlmeUxpc3RlbmVyKHZhbGlkYXRvcik7CisKKwkJCXNldFBhZ2VDb21wbGV0ZSh2YWxpZGF0ZVBhZ2UoKSk7CisJCQlzZXRDb250cm9sKGNvbXBvc2l0ZSk7CisJCX0KKworCQkvKioKKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCXByb3RlY3RlZCBNb2RpZnlMaXN0ZW5lciB2YWxpZGF0b3IgPQorCQkJbmV3IE1vZGlmeUxpc3RlbmVyKCkgeworCQkJCXB1YmxpYyB2b2lkIG1vZGlmeVRleHQoTW9kaWZ5RXZlbnQgZSkgeworCQkJCQlzZXRQYWdlQ29tcGxldGUodmFsaWRhdGVQYWdlKCkpOworCQkJCX0KKwkJCX07CisKKwkJLyoqCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlwcm90ZWN0ZWQgYm9vbGVhbiB2YWxpZGF0ZVBhZ2UoKSB7CisJCQlyZXR1cm4gZ2V0SW5pdGlhbE9iamVjdE5hbWUoKSAhPSBudWxsICYmIGdldEVuY29kaW5ncygpLmNvbnRhaW5zKGVuY29kaW5nRmllbGQuZ2V0VGV4dCgpKTsKKwkJfQorCisJCS8qKgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJQE92ZXJyaWRlCisJCXB1YmxpYyB2b2lkIHNldFZpc2libGUoYm9vbGVhbiB2aXNpYmxlKSB7CisJCQlzdXBlci5zZXRWaXNpYmxlKHZpc2libGUpOworCQkJaWYgKHZpc2libGUpIHsKKwkJCQlpZiAoaW5pdGlhbE9iamVjdEZpZWxkLmdldEl0ZW1Db3VudCgpID09IDEpIHsKKwkJCQkJaW5pdGlhbE9iamVjdEZpZWxkLmNsZWFyU2VsZWN0aW9uKCk7CisJCQkJCWVuY29kaW5nRmllbGQuc2V0Rm9jdXMoKTsKKwkJCQl9CisJCQkJZWxzZSB7CisJCQkJCWVuY29kaW5nRmllbGQuY2xlYXJTZWxlY3Rpb24oKTsKKwkJCQkJaW5pdGlhbE9iamVjdEZpZWxkLnNldEZvY3VzKCk7CisJCQkJfQorCQkJfQorCQl9CisKKwkJLyoqCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlwdWJsaWMgU3RyaW5nIGdldEluaXRpYWxPYmplY3ROYW1lKCkgeworCQkJU3RyaW5nIGxhYmVsID0gaW5pdGlhbE9iamVjdEZpZWxkLmdldFRleHQoKTsKKworCQkJZm9yIChTdHJpbmcgbmFtZSA6IGdldEluaXRpYWxPYmplY3ROYW1lcygpKSB7CisJCQkJaWYgKGdldExhYmVsKG5hbWUpLmVxdWFscyhsYWJlbCkpIHsKKwkJCQkJcmV0dXJuIG5hbWU7CisJCQkJfQorCQkJfQorCQkJcmV0dXJuIG51bGw7CisJCX0KKworCQkvKioKKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCXB1YmxpYyBTdHJpbmcgZ2V0RW5jb2RpbmcoKSB7CisJCQlyZXR1cm4gZW5jb2RpbmdGaWVsZC5nZXRUZXh0KCk7CisJCX0KKworCQkvKioKKwkJICogUmV0dXJucyB0aGUgbGFiZWwgZm9yIHRoZSBzcGVjaWZpZWQgdHlwZSBuYW1lLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJcHJvdGVjdGVkIFN0cmluZyBnZXRMYWJlbChTdHJpbmcgdHlwZU5hbWUpIHsKKwkJCXRyeSB7CisJCQkJcmV0dXJuIENvcmVFZGl0UGx1Z2luLklOU1RBTkNFLmdldFN0cmluZygiX1VJXyIgKyB0eXBlTmFtZSArICJfdHlwZSIpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKKwkJCX0KKwkJCWNhdGNoKE1pc3NpbmdSZXNvdXJjZUV4Y2VwdGlvbiBtcmUpIHsKKwkJCQlDb3JlRWRpdG9yUGx1Z2luLklOU1RBTkNFLmxvZyhtcmUpOworCQkJfQorCQkJcmV0dXJuIHR5cGVOYW1lOworCQl9CisKKwkJLyoqCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlwcm90ZWN0ZWQgQ29sbGVjdGlvbjxTdHJpbmc+IGdldEVuY29kaW5ncygpIHsKKwkJCWlmIChlbmNvZGluZ3MgPT0gbnVsbCkgeworCQkJCWVuY29kaW5ncyA9IG5ldyBBcnJheUxpc3Q8U3RyaW5nPigpOworCQkJCWZvciAoU3RyaW5nVG9rZW5pemVyIHN0cmluZ1Rva2VuaXplciA9IG5ldyBTdHJpbmdUb2tlbml6ZXIoQ29yZUVkaXRvclBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoIl9VSV9YTUxFbmNvZGluZ0Nob2ljZXMiKSk7IHN0cmluZ1Rva2VuaXplci5oYXNNb3JlVG9rZW5zKCk7ICkgLy8kTk9OLU5MUy0xJAorCQkJCXsKKwkJCQkJZW5jb2RpbmdzLmFkZChzdHJpbmdUb2tlbml6ZXIubmV4dFRva2VuKCkpOworCQkJCX0KKwkJCX0KKwkJCXJldHVybiBlbmNvZGluZ3M7CisJCX0KKwl9CisKKwkvKioKKwkgKiBUaGUgZnJhbWV3b3JrIGNhbGxzIHRoaXMgdG8gY3JlYXRlIHRoZSBjb250ZW50cyBvZiB0aGUgd2l6YXJkLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCQlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBhZGRQYWdlcygpIHsKKwkJLy8gQ3JlYXRlIGEgcGFnZSwgc2V0IHRoZSB0aXRsZSwgYW5kIHRoZSBpbml0aWFsIG1vZGVsIGZpbGUgbmFtZS4KKwkJLy8KKwkJbmV3RmlsZUNyZWF0aW9uUGFnZSA9IG5ldyBMb2dnZXJNb2RlbFdpemFyZE5ld0ZpbGVDcmVhdGlvblBhZ2UoIldoYXRldmVyIiwgc2VsZWN0aW9uKTsgLy8kTk9OLU5MUy0xJAorCQluZXdGaWxlQ3JlYXRpb25QYWdlLnNldFRpdGxlKENvcmVFZGl0b3JQbHVnaW4uSU5TVEFOQ0UuZ2V0U3RyaW5nKCJfVUlfTG9nZ2VyTW9kZWxXaXphcmRfbGFiZWwiKSk7IC8vJE5PTi1OTFMtMSQKKwkJbmV3RmlsZUNyZWF0aW9uUGFnZS5zZXREZXNjcmlwdGlvbihDb3JlRWRpdG9yUGx1Z2luLklOU1RBTkNFLmdldFN0cmluZygiX1VJX0xvZ2dlck1vZGVsV2l6YXJkX2Rlc2NyaXB0aW9uIikpOyAvLyROT04tTkxTLTEkCisJCW5ld0ZpbGVDcmVhdGlvblBhZ2Uuc2V0RmlsZU5hbWUoQ29yZUVkaXRvclBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoIl9VSV9Mb2dnZXJFZGl0b3JGaWxlbmFtZURlZmF1bHRCYXNlIikgKyAiLiIgKyBGSUxFX0VYVEVOU0lPTlMuZ2V0KDApKTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCisJCWFkZFBhZ2UobmV3RmlsZUNyZWF0aW9uUGFnZSk7CisKKwkJLy8gVHJ5IGFuZCBnZXQgdGhlIHJlc291cmNlIHNlbGVjdGlvbiB0byBkZXRlcm1pbmUgYSBjdXJyZW50IGRpcmVjdG9yeSBmb3IgdGhlIGZpbGUgZGlhbG9nLgorCQkvLworCQlpZiAoc2VsZWN0aW9uICE9IG51bGwgJiYgIXNlbGVjdGlvbi5pc0VtcHR5KCkpIHsKKwkJCS8vIEdldCB0aGUgcmVzb3VyY2UuLi4KKwkJCS8vCisJCQlPYmplY3Qgc2VsZWN0ZWRFbGVtZW50ID0gc2VsZWN0aW9uLml0ZXJhdG9yKCkubmV4dCgpOworCQkJaWYgKHNlbGVjdGVkRWxlbWVudCBpbnN0YW5jZW9mIElSZXNvdXJjZSkgeworCQkJCS8vIEdldCB0aGUgcmVzb3VyY2UgcGFyZW50LCBpZiBpdHMgYSBmaWxlLgorCQkJCS8vCisJCQkJSVJlc291cmNlIHNlbGVjdGVkUmVzb3VyY2UgPSAoSVJlc291cmNlKXNlbGVjdGVkRWxlbWVudDsKKwkJCQlpZiAoc2VsZWN0ZWRSZXNvdXJjZS5nZXRUeXBlKCkgPT0gSVJlc291cmNlLkZJTEUpIHsKKwkJCQkJc2VsZWN0ZWRSZXNvdXJjZSA9IHNlbGVjdGVkUmVzb3VyY2UuZ2V0UGFyZW50KCk7CisJCQkJfQorCisJCQkJLy8gVGhpcyBnaXZlcyB1cyBhIGRpcmVjdG9yeS4uLgorCQkJCS8vCisJCQkJaWYgKHNlbGVjdGVkUmVzb3VyY2UgaW5zdGFuY2VvZiBJRm9sZGVyIHx8IHNlbGVjdGVkUmVzb3VyY2UgaW5zdGFuY2VvZiBJUHJvamVjdCkgeworCQkJCQkvLyBTZXQgdGhpcyBmb3IgdGhlIGNvbnRhaW5lci4KKwkJCQkJLy8KKwkJCQkJbmV3RmlsZUNyZWF0aW9uUGFnZS5zZXRDb250YWluZXJGdWxsUGF0aChzZWxlY3RlZFJlc291cmNlLmdldEZ1bGxQYXRoKCkpOworCisJCQkJCS8vIE1ha2UgdXAgYSB1bmlxdWUgbmV3IG5hbWUgaGVyZS4KKwkJCQkJLy8KKwkJCQkJU3RyaW5nIGRlZmF1bHRNb2RlbEJhc2VGaWxlbmFtZSA9IENvcmVFZGl0b3JQbHVnaW4uSU5TVEFOQ0UuZ2V0U3RyaW5nKCJfVUlfTG9nZ2VyRWRpdG9yRmlsZW5hbWVEZWZhdWx0QmFzZSIpOyAvLyROT04tTkxTLTEkCisJCQkJCVN0cmluZyBkZWZhdWx0TW9kZWxGaWxlbmFtZUV4dGVuc2lvbiA9IEZJTEVfRVhURU5TSU9OUy5nZXQoMCk7CisJCQkJCVN0cmluZyBtb2RlbEZpbGVuYW1lID0gZGVmYXVsdE1vZGVsQmFzZUZpbGVuYW1lICsgIi4iICsgZGVmYXVsdE1vZGVsRmlsZW5hbWVFeHRlbnNpb247IC8vJE5PTi1OTFMtMSQKKwkJCQkJZm9yIChpbnQgaSA9IDE7ICgoSUNvbnRhaW5lcilzZWxlY3RlZFJlc291cmNlKS5maW5kTWVtYmVyKG1vZGVsRmlsZW5hbWUpICE9IG51bGw7ICsraSkgeworCQkJCQkJbW9kZWxGaWxlbmFtZSA9IGRlZmF1bHRNb2RlbEJhc2VGaWxlbmFtZSArIGkgKyAiLiIgKyBkZWZhdWx0TW9kZWxGaWxlbmFtZUV4dGVuc2lvbjsgLy8kTk9OLU5MUy0xJAorCQkJCQl9CisJCQkJCW5ld0ZpbGVDcmVhdGlvblBhZ2Uuc2V0RmlsZU5hbWUobW9kZWxGaWxlbmFtZSk7CisJCQkJfQorCQkJfQorCQl9CisJCWluaXRpYWxPYmplY3RDcmVhdGlvblBhZ2UgPSBuZXcgTG9nZ2VyTW9kZWxXaXphcmRJbml0aWFsT2JqZWN0Q3JlYXRpb25QYWdlKCJXaGF0ZXZlcjIiKTsgLy8kTk9OLU5MUy0xJAorCQlpbml0aWFsT2JqZWN0Q3JlYXRpb25QYWdlLnNldFRpdGxlKENvcmVFZGl0b3JQbHVnaW4uSU5TVEFOQ0UuZ2V0U3RyaW5nKCJfVUlfTG9nZ2VyTW9kZWxXaXphcmRfbGFiZWwiKSk7IC8vJE5PTi1OTFMtMSQKKwkJaW5pdGlhbE9iamVjdENyZWF0aW9uUGFnZS5zZXREZXNjcmlwdGlvbihDb3JlRWRpdG9yUGx1Z2luLklOU1RBTkNFLmdldFN0cmluZygiX1VJX1dpemFyZF9pbml0aWFsX29iamVjdF9kZXNjcmlwdGlvbiIpKTsgLy8kTk9OLU5MUy0xJAorCQlhZGRQYWdlKGluaXRpYWxPYmplY3RDcmVhdGlvblBhZ2UpOworCX0KKworCS8qKgorCSAqIEdldCB0aGUgZmlsZSBmcm9tIHRoZSBwYWdlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBJRmlsZSBnZXRNb2RlbEZpbGUoKSB7CisJCXJldHVybiBuZXdGaWxlQ3JlYXRpb25QYWdlLmdldE1vZGVsRmlsZSgpOworCX0KKworfQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvbW9kZWwvcHJlc2VudGF0aW9uL01vZGVsQWN0aW9uQmFyQ29udHJpYnV0b3IuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL21vZGVsL3ByZXNlbnRhdGlvbi9Nb2RlbEFjdGlvbkJhckNvbnRyaWJ1dG9yLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTY5ZDkzOAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL21vZGVsL3ByZXNlbnRhdGlvbi9Nb2RlbEFjdGlvbkJhckNvbnRyaWJ1dG9yLmphdmEKQEAgLTAsMCArMSw0MzEgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLnByZXNlbnRhdGlvbjsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNiwgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OworaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51aS52aWV3ZXIuSVZpZXdlclByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LmRvbWFpbi5FZGl0aW5nRG9tYWluOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LmRvbWFpbi5JRWRpdGluZ0RvbWFpblByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmFjdGlvbi5Db250cm9sQWN0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmFjdGlvbi5DcmVhdGVDaGlsZEFjdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5hY3Rpb24uQ3JlYXRlU2libGluZ0FjdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5hY3Rpb24uRWRpdGluZ0RvbWFpbkFjdGlvbkJhckNvbnRyaWJ1dG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmFjdGlvbi5Mb2FkUmVzb3VyY2VBY3Rpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkuYWN0aW9uLlZhbGlkYXRlQWN0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5BY3Rpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLkFjdGlvbkNvbnRyaWJ1dGlvbkl0ZW07CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklBY3Rpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklDb250cmlidXRpb25JdGVtOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JQ29udHJpYnV0aW9uTWFuYWdlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSU1lbnVMaXN0ZW5lcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSU1lbnVNYW5hZ2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JVG9vbEJhck1hbmFnZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLk1lbnVNYW5hZ2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5TZXBhcmF0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLlN1YkNvbnRyaWJ1dGlvbkl0ZW07CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb25Qcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTdHJ1Y3R1cmVkU2VsZWN0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuU2VsZWN0aW9uQ2hhbmdlZEV2ZW50OworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuVmlld2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24ucHJlc2VudGF0aW9uLkNvcmVFZGl0b3JQbHVnaW47CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuSUVkaXRvclBhcnQ7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuUGFydEluaXRFeGNlcHRpb247CisKKy8qKgorICogVGhpcyBpcyB0aGUgYWN0aW9uIGJhciBjb250cmlidXRvciBmb3IgdGhlIE1vZGVsIG1vZGVsIGVkaXRvci4KKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBnZW5lcmF0ZWQKKyAqLworQFN1cHByZXNzV2FybmluZ3MoImFsbCIpCitwdWJsaWMgY2xhc3MgTW9kZWxBY3Rpb25CYXJDb250cmlidXRvcgorCWV4dGVuZHMgRWRpdGluZ0RvbWFpbkFjdGlvbkJhckNvbnRyaWJ1dG9yCisJaW1wbGVtZW50cyBJU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyIHsKKwkvKioKKwkgKiBUaGlzIGtlZXBzIHRyYWNrIG9mIHRoZSBhY3RpdmUgZWRpdG9yLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBJRWRpdG9yUGFydCBhY3RpdmVFZGl0b3JQYXJ0OworCisJLyoqCisJICogVGhpcyBrZWVwcyB0cmFjayBvZiB0aGUgY3VycmVudCBzZWxlY3Rpb24gcHJvdmlkZXIuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIElTZWxlY3Rpb25Qcm92aWRlciBzZWxlY3Rpb25Qcm92aWRlcjsKKworCS8qKgorCSAqIFRoaXMgYWN0aW9uIG9wZW5zIHRoZSBQcm9wZXJ0aWVzIHZpZXcuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIElBY3Rpb24gc2hvd1Byb3BlcnRpZXNWaWV3QWN0aW9uID0KKwkJbmV3IEFjdGlvbihDb3JlRWRpdG9yUGx1Z2luLklOU1RBTkNFLmdldFN0cmluZygiX1VJX1Nob3dQcm9wZXJ0aWVzVmlld19tZW51X2l0ZW0iKSkgLy8kTk9OLU5MUy0xJAorCQl7CisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyB2b2lkIHJ1bigpIHsKKwkJCQl0cnkgeworCQkJCQlnZXRQYWdlKCkuc2hvd1ZpZXcoIm9yZy5lY2xpcHNlLnVpLnZpZXdzLlByb3BlcnR5U2hlZXQiKTsgLy8kTk9OLU5MUy0xJAorCQkJCX0KKwkJCQljYXRjaCAoUGFydEluaXRFeGNlcHRpb24gZXhjZXB0aW9uKSB7CisJCQkJCUNvcmVFZGl0b3JQbHVnaW4uSU5TVEFOQ0UubG9nKGV4Y2VwdGlvbik7CisJCQkJfQorCQkJfQorCQl9OworCisJLyoqCisJICogVGhpcyBhY3Rpb24gcmVmcmVzaGVzIHRoZSB2aWV3ZXIgb2YgdGhlIGN1cnJlbnQgZWRpdG9yIGlmIHRoZSBlZGl0b3IKKwkgKiBpbXBsZW1lbnRzIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnVpLnZpZXdlci5JVmlld2VyUHJvdmlkZXJ9LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBJQWN0aW9uIHJlZnJlc2hWaWV3ZXJBY3Rpb24gPQorCQluZXcgQWN0aW9uKENvcmVFZGl0b3JQbHVnaW4uSU5TVEFOQ0UuZ2V0U3RyaW5nKCJfVUlfUmVmcmVzaFZpZXdlcl9tZW51X2l0ZW0iKSkgLy8kTk9OLU5MUy0xJAorCQl7CisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyBib29sZWFuIGlzRW5hYmxlZCgpIHsKKwkJCQlyZXR1cm4gYWN0aXZlRWRpdG9yUGFydCBpbnN0YW5jZW9mIElWaWV3ZXJQcm92aWRlcjsKKwkJCX0KKworCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgdm9pZCBydW4oKSB7CisJCQkJaWYgKGFjdGl2ZUVkaXRvclBhcnQgaW5zdGFuY2VvZiBJVmlld2VyUHJvdmlkZXIpIHsKKwkJCQkJVmlld2VyIHZpZXdlciA9ICgoSVZpZXdlclByb3ZpZGVyKWFjdGl2ZUVkaXRvclBhcnQpLmdldFZpZXdlcigpOworCQkJCQlpZiAodmlld2VyICE9IG51bGwpIHsKKwkJCQkJCXZpZXdlci5yZWZyZXNoKCk7CisJCQkJCX0KKwkJCQl9CisJCQl9CisJCX07CisKKwkvKioKKwkgKiBUaGlzIHdpbGwgY29udGFpbiBvbmUge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmFjdGlvbi5DcmVhdGVDaGlsZEFjdGlvbn0gY29ycmVzcG9uZGluZyB0byBlYWNoIGRlc2NyaXB0b3IKKwkgKiBnZW5lcmF0ZWQgZm9yIHRoZSBjdXJyZW50IHNlbGVjdGlvbiBieSB0aGUgaXRlbSBwcm92aWRlci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgQ29sbGVjdGlvbjxJQWN0aW9uPiBjcmVhdGVDaGlsZEFjdGlvbnM7CisKKwkvKioKKwkgKiBUaGlzIGlzIHRoZSBtZW51IG1hbmFnZXIgaW50byB3aGljaCBtZW51IGNvbnRyaWJ1dGlvbiBpdGVtcyBzaG91bGQgYmUgYWRkZWQgZm9yIENyZWF0ZUNoaWxkIGFjdGlvbnMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIElNZW51TWFuYWdlciBjcmVhdGVDaGlsZE1lbnVNYW5hZ2VyOworCisJLyoqCisJICogVGhpcyB3aWxsIGNvbnRhaW4gb25lIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5hY3Rpb24uQ3JlYXRlU2libGluZ0FjdGlvbn0gY29ycmVzcG9uZGluZyB0byBlYWNoIGRlc2NyaXB0b3IKKwkgKiBnZW5lcmF0ZWQgZm9yIHRoZSBjdXJyZW50IHNlbGVjdGlvbiBieSB0aGUgaXRlbSBwcm92aWRlci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgQ29sbGVjdGlvbjxJQWN0aW9uPiBjcmVhdGVTaWJsaW5nQWN0aW9uczsKKworCS8qKgorCSAqIFRoaXMgaXMgdGhlIG1lbnUgbWFuYWdlciBpbnRvIHdoaWNoIG1lbnUgY29udHJpYnV0aW9uIGl0ZW1zIHNob3VsZCBiZSBhZGRlZCBmb3IgQ3JlYXRlU2libGluZyBhY3Rpb25zLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBJTWVudU1hbmFnZXIgY3JlYXRlU2libGluZ01lbnVNYW5hZ2VyOworCisJLyoqCisJICogVGhpcyBjcmVhdGVzIGFuIGluc3RhbmNlIG9mIHRoZSBjb250cmlidXRvci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgTW9kZWxBY3Rpb25CYXJDb250cmlidXRvcigpIHsKKwkJc3VwZXIoQURESVRJT05TX0xBU1RfU1RZTEUpOworCQlsb2FkUmVzb3VyY2VBY3Rpb24gPSBuZXcgTG9hZFJlc291cmNlQWN0aW9uKCk7CisJCXZhbGlkYXRlQWN0aW9uID0gbmV3IFZhbGlkYXRlQWN0aW9uKCk7CisJCWNvbnRyb2xBY3Rpb24gPSBuZXcgQ29udHJvbEFjdGlvbigpOworCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyBTZXBhcmF0b3JzIGZvciBlZGl0b3IgYWRkaXRpb25zIHRvIHRoZSB0b29sIGJhci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBjb250cmlidXRlVG9Ub29sQmFyKElUb29sQmFyTWFuYWdlciB0b29sQmFyTWFuYWdlcikgeworCQl0b29sQmFyTWFuYWdlci5hZGQobmV3IFNlcGFyYXRvcigibW9kZWwtc2V0dGluZ3MiKSk7IC8vJE5PTi1OTFMtMSQKKwkJdG9vbEJhck1hbmFnZXIuYWRkKG5ldyBTZXBhcmF0b3IoIm1vZGVsLWFkZGl0aW9ucyIpKTsgLy8kTk9OLU5MUy0xJAorCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyB0byB0aGUgbWVudSBiYXIgYSBtZW51IGFuZCBzb21lIHNlcGFyYXRvcnMgZm9yIGVkaXRvciBhZGRpdGlvbnMsCisJICogYXMgd2VsbCBhcyB0aGUgc3ViLW1lbnVzIGZvciBvYmplY3QgY3JlYXRpb24gaXRlbXMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgY29udHJpYnV0ZVRvTWVudShJTWVudU1hbmFnZXIgbWVudU1hbmFnZXIpIHsKKwkJc3VwZXIuY29udHJpYnV0ZVRvTWVudShtZW51TWFuYWdlcik7CisKKwkJSU1lbnVNYW5hZ2VyIHN1Ym1lbnVNYW5hZ2VyID0gbmV3IE1lbnVNYW5hZ2VyKENvcmVFZGl0b3JQbHVnaW4uSU5TVEFOQ0UuZ2V0U3RyaW5nKCJfVUlfTW9kZWxFZGl0b3JfbWVudSIpLCAib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsTWVudUlEIik7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAorCQltZW51TWFuYWdlci5pbnNlcnRBZnRlcigiYWRkaXRpb25zIiwgc3VibWVudU1hbmFnZXIpOyAvLyROT04tTkxTLTEkCisJCXN1Ym1lbnVNYW5hZ2VyLmFkZChuZXcgU2VwYXJhdG9yKCJzZXR0aW5ncyIpKTsgLy8kTk9OLU5MUy0xJAorCQlzdWJtZW51TWFuYWdlci5hZGQobmV3IFNlcGFyYXRvcigiYWN0aW9ucyIpKTsgLy8kTk9OLU5MUy0xJAorCQlzdWJtZW51TWFuYWdlci5hZGQobmV3IFNlcGFyYXRvcigiYWRkaXRpb25zIikpOyAvLyROT04tTkxTLTEkCisJCXN1Ym1lbnVNYW5hZ2VyLmFkZChuZXcgU2VwYXJhdG9yKCJhZGRpdGlvbnMtZW5kIikpOyAvLyROT04tTkxTLTEkCisKKwkJLy8gUHJlcGFyZSBmb3IgQ3JlYXRlQ2hpbGQgaXRlbSBhZGRpdGlvbiBvciByZW1vdmFsLgorCQkvLworCQljcmVhdGVDaGlsZE1lbnVNYW5hZ2VyID0gbmV3IE1lbnVNYW5hZ2VyKENvcmVFZGl0b3JQbHVnaW4uSU5TVEFOQ0UuZ2V0U3RyaW5nKCJfVUlfQ3JlYXRlQ2hpbGRfbWVudV9pdGVtIikpOyAvLyROT04tTkxTLTEkCisJCXN1Ym1lbnVNYW5hZ2VyLmluc2VydEJlZm9yZSgiYWRkaXRpb25zIiwgY3JlYXRlQ2hpbGRNZW51TWFuYWdlcik7IC8vJE5PTi1OTFMtMSQKKworCQkvLyBQcmVwYXJlIGZvciBDcmVhdGVTaWJsaW5nIGl0ZW0gYWRkaXRpb24gb3IgcmVtb3ZhbC4KKwkJLy8KKwkJY3JlYXRlU2libGluZ01lbnVNYW5hZ2VyID0gbmV3IE1lbnVNYW5hZ2VyKENvcmVFZGl0b3JQbHVnaW4uSU5TVEFOQ0UuZ2V0U3RyaW5nKCJfVUlfQ3JlYXRlU2libGluZ19tZW51X2l0ZW0iKSk7IC8vJE5PTi1OTFMtMSQKKwkJc3VibWVudU1hbmFnZXIuaW5zZXJ0QmVmb3JlKCJhZGRpdGlvbnMiLCBjcmVhdGVTaWJsaW5nTWVudU1hbmFnZXIpOyAvLyROT04tTkxTLTEkCisKKwkJLy8gRm9yY2UgYW4gdXBkYXRlIGJlY2F1c2UgRWNsaXBzZSBoaWRlcyBlbXB0eSBtZW51cyBub3cuCisJCS8vCisJCXN1Ym1lbnVNYW5hZ2VyLmFkZE1lbnVMaXN0ZW5lcgorCQkJKG5ldyBJTWVudUxpc3RlbmVyKCkgeworCQkJCSBwdWJsaWMgdm9pZCBtZW51QWJvdXRUb1Nob3coSU1lbnVNYW5hZ2VyIG1lbnVNYW5hZ2VyKSB7CisJCQkJCSBtZW51TWFuYWdlci51cGRhdGVBbGwodHJ1ZSk7CisJCQkJIH0KKwkJCSB9KTsKKworCQlhZGRHbG9iYWxBY3Rpb25zKHN1Ym1lbnVNYW5hZ2VyKTsKKwl9CisKKwkvKioKKwkgKiBXaGVuIHRoZSBhY3RpdmUgZWRpdG9yIGNoYW5nZXMsIHRoaXMgcmVtZW1iZXJzIHRoZSBjaGFuZ2UgYW5kIHJlZ2lzdGVycyB3aXRoIGl0IGFzIGEgc2VsZWN0aW9uIHByb3ZpZGVyLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIHNldEFjdGl2ZUVkaXRvcihJRWRpdG9yUGFydCBwYXJ0KSB7CisJCXN1cGVyLnNldEFjdGl2ZUVkaXRvcihwYXJ0KTsKKwkJYWN0aXZlRWRpdG9yUGFydCA9IHBhcnQ7CisKKwkJLy8gU3dpdGNoIHRvIHRoZSBuZXcgc2VsZWN0aW9uIHByb3ZpZGVyLgorCQkvLworCQlpZiAoc2VsZWN0aW9uUHJvdmlkZXIgIT0gbnVsbCkgeworCQkJc2VsZWN0aW9uUHJvdmlkZXIucmVtb3ZlU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyKHRoaXMpOworCQl9CisJCWlmIChwYXJ0ID09IG51bGwpIHsKKwkJCXNlbGVjdGlvblByb3ZpZGVyID0gbnVsbDsKKwkJfQorCQllbHNlIHsKKwkJCXNlbGVjdGlvblByb3ZpZGVyID0gcGFydC5nZXRTaXRlKCkuZ2V0U2VsZWN0aW9uUHJvdmlkZXIoKTsKKwkJCXNlbGVjdGlvblByb3ZpZGVyLmFkZFNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcih0aGlzKTsKKworCQkJLy8gRmFrZSBhIHNlbGVjdGlvbiBjaGFuZ2VkIGV2ZW50IHRvIHVwZGF0ZSB0aGUgbWVudXMuCisJCQkvLworCQkJaWYgKHNlbGVjdGlvblByb3ZpZGVyLmdldFNlbGVjdGlvbigpICE9IG51bGwpIHsKKwkJCQlzZWxlY3Rpb25DaGFuZ2VkKG5ldyBTZWxlY3Rpb25DaGFuZ2VkRXZlbnQoc2VsZWN0aW9uUHJvdmlkZXIsIHNlbGVjdGlvblByb3ZpZGVyLmdldFNlbGVjdGlvbigpKSk7CisJCQl9CisJCX0KKwl9CisKKwkvKioKKwkgKiBUaGlzIGltcGxlbWVudHMge0BsaW5rIG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcn0sCisJICogaGFuZGxpbmcge0BsaW5rIG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuU2VsZWN0aW9uQ2hhbmdlZEV2ZW50fXMgYnkgcXVlcnlpbmcgZm9yIHRoZSBjaGlsZHJlbiBhbmQgc2libGluZ3MKKwkgKiB0aGF0IGNhbiBiZSBhZGRlZCB0byB0aGUgc2VsZWN0ZWQgb2JqZWN0IGFuZCB1cGRhdGluZyB0aGUgbWVudXMgYWNjb3JkaW5nbHkuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgc2VsZWN0aW9uQ2hhbmdlZChTZWxlY3Rpb25DaGFuZ2VkRXZlbnQgZXZlbnQpIHsKKwkJLy8gUmVtb3ZlIGFueSBtZW51IGl0ZW1zIGZvciBvbGQgc2VsZWN0aW9uLgorCQkvLworCQlpZiAoY3JlYXRlQ2hpbGRNZW51TWFuYWdlciAhPSBudWxsKSB7CisJCQlkZXBvcHVsYXRlTWFuYWdlcihjcmVhdGVDaGlsZE1lbnVNYW5hZ2VyLCBjcmVhdGVDaGlsZEFjdGlvbnMpOworCQl9CisJCWlmIChjcmVhdGVTaWJsaW5nTWVudU1hbmFnZXIgIT0gbnVsbCkgeworCQkJZGVwb3B1bGF0ZU1hbmFnZXIoY3JlYXRlU2libGluZ01lbnVNYW5hZ2VyLCBjcmVhdGVTaWJsaW5nQWN0aW9ucyk7CisJCX0KKworCQkvLyBRdWVyeSB0aGUgbmV3IHNlbGVjdGlvbiBmb3IgYXBwcm9wcmlhdGUgbmV3IGNoaWxkL3NpYmxpbmcgZGVzY3JpcHRvcnMKKwkJLy8KKwkJQ29sbGVjdGlvbjw/PiBuZXdDaGlsZERlc2NyaXB0b3JzID0gbnVsbDsKKwkJQ29sbGVjdGlvbjw/PiBuZXdTaWJsaW5nRGVzY3JpcHRvcnMgPSBudWxsOworCisJCUlTZWxlY3Rpb24gc2VsZWN0aW9uID0gZXZlbnQuZ2V0U2VsZWN0aW9uKCk7CisJCWlmIChzZWxlY3Rpb24gaW5zdGFuY2VvZiBJU3RydWN0dXJlZFNlbGVjdGlvbiAmJiAoKElTdHJ1Y3R1cmVkU2VsZWN0aW9uKXNlbGVjdGlvbikuc2l6ZSgpID09IDEpIHsKKwkJCU9iamVjdCBvYmplY3QgPSAoKElTdHJ1Y3R1cmVkU2VsZWN0aW9uKXNlbGVjdGlvbikuZ2V0Rmlyc3RFbGVtZW50KCk7CisKKwkJCUVkaXRpbmdEb21haW4gZG9tYWluID0gKChJRWRpdGluZ0RvbWFpblByb3ZpZGVyKWFjdGl2ZUVkaXRvclBhcnQpLmdldEVkaXRpbmdEb21haW4oKTsKKworCQkJbmV3Q2hpbGREZXNjcmlwdG9ycyA9IGRvbWFpbi5nZXROZXdDaGlsZERlc2NyaXB0b3JzKG9iamVjdCwgbnVsbCk7CisJCQluZXdTaWJsaW5nRGVzY3JpcHRvcnMgPSBkb21haW4uZ2V0TmV3Q2hpbGREZXNjcmlwdG9ycyhudWxsLCBvYmplY3QpOworCQl9CisKKwkJLy8gR2VuZXJhdGUgYWN0aW9ucyBmb3Igc2VsZWN0aW9uOyBwb3B1bGF0ZSBhbmQgcmVkcmF3IHRoZSBtZW51cy4KKwkJLy8KKwkJY3JlYXRlQ2hpbGRBY3Rpb25zID0gZ2VuZXJhdGVDcmVhdGVDaGlsZEFjdGlvbnMobmV3Q2hpbGREZXNjcmlwdG9ycywgc2VsZWN0aW9uKTsKKwkJY3JlYXRlU2libGluZ0FjdGlvbnMgPSBnZW5lcmF0ZUNyZWF0ZVNpYmxpbmdBY3Rpb25zKG5ld1NpYmxpbmdEZXNjcmlwdG9ycywgc2VsZWN0aW9uKTsKKworCQlpZiAoY3JlYXRlQ2hpbGRNZW51TWFuYWdlciAhPSBudWxsKSB7CisJCQlwb3B1bGF0ZU1hbmFnZXIoY3JlYXRlQ2hpbGRNZW51TWFuYWdlciwgY3JlYXRlQ2hpbGRBY3Rpb25zLCBudWxsKTsKKwkJCWNyZWF0ZUNoaWxkTWVudU1hbmFnZXIudXBkYXRlKHRydWUpOworCQl9CisJCWlmIChjcmVhdGVTaWJsaW5nTWVudU1hbmFnZXIgIT0gbnVsbCkgeworCQkJcG9wdWxhdGVNYW5hZ2VyKGNyZWF0ZVNpYmxpbmdNZW51TWFuYWdlciwgY3JlYXRlU2libGluZ0FjdGlvbnMsIG51bGwpOworCQkJY3JlYXRlU2libGluZ01lbnVNYW5hZ2VyLnVwZGF0ZSh0cnVlKTsKKwkJfQorCX0KKworCS8qKgorCSAqIFRoaXMgZ2VuZXJhdGVzIGEge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmFjdGlvbi5DcmVhdGVDaGlsZEFjdGlvbn0gZm9yIGVhY2ggb2JqZWN0IGluIDxjb2RlPmRlc2NyaXB0b3JzPC9jb2RlPiwKKwkgKiBhbmQgcmV0dXJucyB0aGUgY29sbGVjdGlvbiBvZiB0aGVzZSBhY3Rpb25zLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBDb2xsZWN0aW9uPElBY3Rpb24+IGdlbmVyYXRlQ3JlYXRlQ2hpbGRBY3Rpb25zKENvbGxlY3Rpb248Pz4gZGVzY3JpcHRvcnMsIElTZWxlY3Rpb24gc2VsZWN0aW9uKSB7CisJCUNvbGxlY3Rpb248SUFjdGlvbj4gYWN0aW9ucyA9IG5ldyBBcnJheUxpc3Q8SUFjdGlvbj4oKTsKKwkJaWYgKGRlc2NyaXB0b3JzICE9IG51bGwpIHsKKwkJCWZvciAoT2JqZWN0IGRlc2NyaXB0b3IgOiBkZXNjcmlwdG9ycykgeworCQkJCWFjdGlvbnMuYWRkKG5ldyBDcmVhdGVDaGlsZEFjdGlvbihhY3RpdmVFZGl0b3JQYXJ0LCBzZWxlY3Rpb24sIGRlc2NyaXB0b3IpKTsKKwkJCX0KKwkJfQorCQlyZXR1cm4gYWN0aW9uczsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGdlbmVyYXRlcyBhIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5hY3Rpb24uQ3JlYXRlU2libGluZ0FjdGlvbn0gZm9yIGVhY2ggb2JqZWN0IGluIDxjb2RlPmRlc2NyaXB0b3JzPC9jb2RlPiwKKwkgKiBhbmQgcmV0dXJucyB0aGUgY29sbGVjdGlvbiBvZiB0aGVzZSBhY3Rpb25zLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBDb2xsZWN0aW9uPElBY3Rpb24+IGdlbmVyYXRlQ3JlYXRlU2libGluZ0FjdGlvbnMoQ29sbGVjdGlvbjw/PiBkZXNjcmlwdG9ycywgSVNlbGVjdGlvbiBzZWxlY3Rpb24pIHsKKwkJQ29sbGVjdGlvbjxJQWN0aW9uPiBhY3Rpb25zID0gbmV3IEFycmF5TGlzdDxJQWN0aW9uPigpOworCQlpZiAoZGVzY3JpcHRvcnMgIT0gbnVsbCkgeworCQkJZm9yIChPYmplY3QgZGVzY3JpcHRvciA6IGRlc2NyaXB0b3JzKSB7CisJCQkJYWN0aW9ucy5hZGQobmV3IENyZWF0ZVNpYmxpbmdBY3Rpb24oYWN0aXZlRWRpdG9yUGFydCwgc2VsZWN0aW9uLCBkZXNjcmlwdG9yKSk7CisJCQl9CisJCX0KKwkJcmV0dXJuIGFjdGlvbnM7CisJfQorCisJLyoqCisJICogVGhpcyBwb3B1bGF0ZXMgdGhlIHNwZWNpZmllZCA8Y29kZT5tYW5hZ2VyPC9jb2RlPiB3aXRoIHtAbGluayBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uQWN0aW9uQ29udHJpYnV0aW9uSXRlbX1zCisJICogYmFzZWQgb24gdGhlIHtAbGluayBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSUFjdGlvbn1zIGNvbnRhaW5lZCBpbiB0aGUgPGNvZGU+YWN0aW9uczwvY29kZT4gY29sbGVjdGlvbiwKKwkgKiBieSBpbnNlcnRpbmcgdGhlbSBiZWZvcmUgdGhlIHNwZWNpZmllZCBjb250cmlidXRpb24gaXRlbSA8Y29kZT5jb250cmlidXRpb25JRDwvY29kZT4uCisJICogSWYgPGNvZGU+Y29udHJpYnV0aW9uSUQ8L2NvZGU+IGlzIDxjb2RlPm51bGw8L2NvZGU+LCB0aGV5IGFyZSBzaW1wbHkgYWRkZWQuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgcG9wdWxhdGVNYW5hZ2VyKElDb250cmlidXRpb25NYW5hZ2VyIG1hbmFnZXIsIENvbGxlY3Rpb248PyBleHRlbmRzIElBY3Rpb24+IGFjdGlvbnMsIFN0cmluZyBjb250cmlidXRpb25JRCkgeworCQlpZiAoYWN0aW9ucyAhPSBudWxsKSB7CisJCQlmb3IgKElBY3Rpb24gYWN0aW9uIDogYWN0aW9ucykgeworCQkJCWlmIChjb250cmlidXRpb25JRCAhPSBudWxsKSB7CisJCQkJCW1hbmFnZXIuaW5zZXJ0QmVmb3JlKGNvbnRyaWJ1dGlvbklELCBhY3Rpb24pOworCQkJCX0KKwkJCQllbHNlIHsKKwkJCQkJbWFuYWdlci5hZGQoYWN0aW9uKTsKKwkJCQl9CisJCQl9CisJCX0KKwl9CisJCQorCS8qKgorCSAqIFRoaXMgcmVtb3ZlcyBmcm9tIHRoZSBzcGVjaWZpZWQgPGNvZGU+bWFuYWdlcjwvY29kZT4gYWxsIHtAbGluayBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uQWN0aW9uQ29udHJpYnV0aW9uSXRlbX1zCisJICogYmFzZWQgb24gdGhlIHtAbGluayBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSUFjdGlvbn1zIGNvbnRhaW5lZCBpbiB0aGUgPGNvZGU+YWN0aW9uczwvY29kZT4gY29sbGVjdGlvbi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBkZXBvcHVsYXRlTWFuYWdlcihJQ29udHJpYnV0aW9uTWFuYWdlciBtYW5hZ2VyLCBDb2xsZWN0aW9uPD8gZXh0ZW5kcyBJQWN0aW9uPiBhY3Rpb25zKSB7CisJCWlmIChhY3Rpb25zICE9IG51bGwpIHsKKwkJCUlDb250cmlidXRpb25JdGVtW10gaXRlbXMgPSBtYW5hZ2VyLmdldEl0ZW1zKCk7CisJCQlmb3IgKGludCBpID0gMDsgaSA8IGl0ZW1zLmxlbmd0aDsgaSsrKSB7CisJCQkJLy8gTG9vayBpbnRvIFN1YkNvbnRyaWJ1dGlvbkl0ZW1zCisJCQkJLy8KKwkJCQlJQ29udHJpYnV0aW9uSXRlbSBjb250cmlidXRpb25JdGVtID0gaXRlbXNbaV07CisJCQkJd2hpbGUgKGNvbnRyaWJ1dGlvbkl0ZW0gaW5zdGFuY2VvZiBTdWJDb250cmlidXRpb25JdGVtKSB7CisJCQkJCWNvbnRyaWJ1dGlvbkl0ZW0gPSAoKFN1YkNvbnRyaWJ1dGlvbkl0ZW0pY29udHJpYnV0aW9uSXRlbSkuZ2V0SW5uZXJJdGVtKCk7CisJCQkJfQorCisJCQkJLy8gRGVsZXRlIHRoZSBBY3Rpb25Db250cmlidXRpb25JdGVtcyB3aXRoIG1hdGNoaW5nIGFjdGlvbi4KKwkJCQkvLworCQkJCWlmIChjb250cmlidXRpb25JdGVtIGluc3RhbmNlb2YgQWN0aW9uQ29udHJpYnV0aW9uSXRlbSkgeworCQkJCQlJQWN0aW9uIGFjdGlvbiA9ICgoQWN0aW9uQ29udHJpYnV0aW9uSXRlbSljb250cmlidXRpb25JdGVtKS5nZXRBY3Rpb24oKTsKKwkJCQkJaWYgKGFjdGlvbnMuY29udGFpbnMoYWN0aW9uKSkgeworCQkJCQkJbWFuYWdlci5yZW1vdmUoY29udHJpYnV0aW9uSXRlbSk7CisJCQkJCX0KKwkJCQl9CisJCQl9CisJCX0KKwl9CisKKwkvKioKKwkgKiBUaGlzIHBvcHVsYXRlcyB0aGUgcG9wLXVwIG1lbnUgYmVmb3JlIGl0IGFwcGVhcnMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgbWVudUFib3V0VG9TaG93KElNZW51TWFuYWdlciBtZW51TWFuYWdlcikgeworCQlzdXBlci5tZW51QWJvdXRUb1Nob3cobWVudU1hbmFnZXIpOworCQlNZW51TWFuYWdlciBzdWJtZW51TWFuYWdlciA9IG51bGw7CisKKwkJc3VibWVudU1hbmFnZXIgPSBuZXcgTWVudU1hbmFnZXIoQ29yZUVkaXRvclBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoIl9VSV9DcmVhdGVDaGlsZF9tZW51X2l0ZW0iKSk7IC8vJE5PTi1OTFMtMSQKKwkJcG9wdWxhdGVNYW5hZ2VyKHN1Ym1lbnVNYW5hZ2VyLCBjcmVhdGVDaGlsZEFjdGlvbnMsIG51bGwpOworCQltZW51TWFuYWdlci5pbnNlcnRCZWZvcmUoImVkaXQiLCBzdWJtZW51TWFuYWdlcik7IC8vJE5PTi1OTFMtMSQKKworCQlzdWJtZW51TWFuYWdlciA9IG5ldyBNZW51TWFuYWdlcihDb3JlRWRpdG9yUGx1Z2luLklOU1RBTkNFLmdldFN0cmluZygiX1VJX0NyZWF0ZVNpYmxpbmdfbWVudV9pdGVtIikpOyAvLyROT04tTkxTLTEkCisJCXBvcHVsYXRlTWFuYWdlcihzdWJtZW51TWFuYWdlciwgY3JlYXRlU2libGluZ0FjdGlvbnMsIG51bGwpOworCQltZW51TWFuYWdlci5pbnNlcnRCZWZvcmUoImVkaXQiLCBzdWJtZW51TWFuYWdlcik7IC8vJE5PTi1OTFMtMSQKKwl9CisKKwkvKioKKwkgKiBUaGlzIGluc2VydHMgZ2xvYmFsIGFjdGlvbnMgYmVmb3JlIHRoZSAiYWRkaXRpb25zLWVuZCIgc2VwYXJhdG9yLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIGFkZEdsb2JhbEFjdGlvbnMoSU1lbnVNYW5hZ2VyIG1lbnVNYW5hZ2VyKSB7CisJCW1lbnVNYW5hZ2VyLmluc2VydEFmdGVyKCJhZGRpdGlvbnMtZW5kIiwgbmV3IFNlcGFyYXRvcigidWktYWN0aW9ucyIpKTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCisJCW1lbnVNYW5hZ2VyLmluc2VydEFmdGVyKCJ1aS1hY3Rpb25zIiwgc2hvd1Byb3BlcnRpZXNWaWV3QWN0aW9uKTsgLy8kTk9OLU5MUy0xJAorCisJCXJlZnJlc2hWaWV3ZXJBY3Rpb24uc2V0RW5hYmxlZChyZWZyZXNoVmlld2VyQWN0aW9uLmlzRW5hYmxlZCgpKTsJCQorCQltZW51TWFuYWdlci5pbnNlcnRBZnRlcigidWktYWN0aW9ucyIsIHJlZnJlc2hWaWV3ZXJBY3Rpb24pOyAvLyROT04tTkxTLTEkCisKKwkJc3VwZXIuYWRkR2xvYmFsQWN0aW9ucyhtZW51TWFuYWdlcik7CisJfQorCisJLyoqCisJICogVGhpcyBlbnN1cmVzIHRoYXQgYSBkZWxldGUgYWN0aW9uIHdpbGwgY2xlYW4gdXAgYWxsIHJlZmVyZW5jZXMgdG8gZGVsZXRlZCBvYmplY3RzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCBib29sZWFuIHJlbW92ZUFsbFJlZmVyZW5jZXNPbkRlbGV0ZSgpIHsKKwkJcmV0dXJuIHRydWU7CisJfQorCit9CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9tb2RlbC9wcmVzZW50YXRpb24vTW9kZWxFZGl0b3IuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL21vZGVsL3ByZXNlbnRhdGlvbi9Nb2RlbEVkaXRvci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkwNzBjN2QKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9tb2RlbC9wcmVzZW50YXRpb24vTW9kZWxFZGl0b3IuamF2YQpAQCAtMCwwICsxLDE2MDcgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLnByZXNlbnRhdGlvbjsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNiwgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOworaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW07CitpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbnM7CitpbXBvcnQgamF2YS51dGlsLkV2ZW50T2JqZWN0OworaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOworaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKK2ltcG9ydCBqYXZhLnV0aWwuTGlua2VkSGFzaE1hcDsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuTWFwOworCitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUZpbGU7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSU1hcmtlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUmVzb3VyY2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVJlc291cmNlQ2hhbmdlRXZlbnQ7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVJlc291cmNlQ2hhbmdlTGlzdGVuZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVJlc291cmNlRGVsdGE7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVJlc291cmNlRGVsdGFWaXNpdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLlJlc291cmNlc1BsdWdpbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQ29yZUV4Y2VwdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVBhdGg7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQcm9ncmVzc01vbml0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLk51bGxQcm9ncmVzc01vbml0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5jb21tYW5kLkJhc2ljQ29tbWFuZFN0YWNrOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24uY29tbWFuZC5Db21tYW5kOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24uY29tbWFuZC5Db21tYW5kU3RhY2s7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5jb21tYW5kLkNvbW1hbmRTdGFja0xpc3RlbmVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LkFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnVpLk1hcmtlckhlbHBlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnVpLmVkaXRvci5Qcm9ibGVtRWRpdG9yUGFydDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnVpLnZpZXdlci5JVmlld2VyUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLkJhc2ljRGlhZ25vc3RpYzsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuRGlhZ25vc3RpYzsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuVVJJOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FVmFsaWRhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5wcm92aWRlci5FY29yZUl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5yZXNvdXJjZS5SZXNvdXJjZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUucmVzb3VyY2UuUmVzb3VyY2VTZXQ7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnV0aWwuRUNvbnRlbnRBZGFwdGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS51dGlsLkVjb3JlVXRpbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5kb21haW4uQWRhcHRlckZhY3RvcnlFZGl0aW5nRG9tYWluOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LmRvbWFpbi5FZGl0aW5nRG9tYWluOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LmRvbWFpbi5JRWRpdGluZ0RvbWFpblByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkFkYXB0ZXJGYWN0b3J5SXRlbURlbGVnYXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5Db21wb3NlZEFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLlJlZmxlY3RpdmVJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5yZXNvdXJjZS5SZXNvdXJjZUl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmFjdGlvbi5FZGl0aW5nRG9tYWluQWN0aW9uQmFyQ29udHJpYnV0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkuY2VsbGVkaXRvci5BZGFwdGVyRmFjdG9yeVRyZWVFZGl0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkuZG5kLkVkaXRpbmdEb21haW5WaWV3ZXJEcm9wQWRhcHRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5kbmQuTG9jYWxUcmFuc2ZlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5kbmQuVmlld2VyRHJhZ0FkYXB0ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkucHJvdmlkZXIuQWRhcHRlckZhY3RvcnlDb250ZW50UHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkucHJvdmlkZXIuQWRhcHRlckZhY3RvcnlMYWJlbFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLnByb3ZpZGVyLlVud3JhcHBpbmdTZWxlY3Rpb25Qcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS51dGlsLkVkaXRVSU1hcmtlckhlbHBlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS51dGlsLkVkaXRVSVV0aWw7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkudmlldy5FeHRlbmRlZFByb3BlcnR5U2hlZXRQYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JTWVudUxpc3RlbmVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JTWVudU1hbmFnZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklTdGF0dXNMaW5lTWFuYWdlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSVRvb2xCYXJNYW5hZ2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5NZW51TWFuYWdlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uU2VwYXJhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmRpYWxvZ3MuTWVzc2FnZURpYWxvZzsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5kaWFsb2dzLlByb2dyZXNzTW9uaXRvckRpYWxvZzsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS51dGlsLkxvY2FsU2VsZWN0aW9uVHJhbnNmZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb25Qcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTdHJ1Y3R1cmVkU2VsZWN0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuU2VsZWN0aW9uQ2hhbmdlZEV2ZW50OworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuU3RydWN0dXJlZFNlbGVjdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlN0cnVjdHVyZWRWaWV3ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5UcmVlVmlld2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuVmlld2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5TVEVNWE1JUmVzb3VyY2VGYWN0b3J5SW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLnByZXNlbnRhdGlvbi5Db3JlRWRpdG9yUGx1Z2luOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24ucHJvdmlkZXIuQ29tbW9uSXRlbVByb3ZpZGVyQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmV4cGVyaW1lbnQucHJvdmlkZXIuRXhwZXJpbWVudEl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5wcm92aWRlci5HcmFwaEl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5sb2dnZXIucHJvdmlkZXIuTG9nZ2VySXRlbVByb3ZpZGVyQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLnByb3ZpZGVyLk1vZGVsSXRlbVByb3ZpZGVyQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLnByb3ZpZGVyLk1vZGlmaWVySXRlbVByb3ZpZGVyQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZS5wcm92aWRlci5QcmVkaWNhdGVJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2NlbmFyaW8ucHJvdmlkZXIuU2NlbmFyaW9JdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2VxdWVuY2VyLnByb3ZpZGVyLlNlcXVlbmNlckl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zb2x2ZXIucHJvdmlkZXIuU29sdmVySXRlbVByb3ZpZGVyQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnRyaWdnZXIucHJvdmlkZXIuVHJpZ2dlckl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5TV1Q7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmN1c3RvbS5DVGFiRm9sZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5kbmQuRE5EOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5kbmQuVHJhbnNmZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5Db250cm9sQWRhcHRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLkNvbnRyb2xFdmVudDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZ3JhcGhpY3MuUG9pbnQ7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLk1lbnU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuVHJlZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5JQWN0aW9uQmFyczsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5JRWRpdG9ySW5wdXQ7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuSUVkaXRvclBhcnQ7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuSUVkaXRvclNpdGU7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuSVBhcnRMaXN0ZW5lcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5JV29ya2JlbmNoUGFydDsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5QYXJ0SW5pdEV4Y2VwdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5hY3Rpb25zLldvcmtzcGFjZU1vZGlmeU9wZXJhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5kaWFsb2dzLlNhdmVBc0RpYWxvZzsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5pZGUuSUdvdG9NYXJrZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkucGFydC5GaWxlRWRpdG9ySW5wdXQ7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkucGFydC5NdWx0aVBhZ2VFZGl0b3JQYXJ0OworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLnZpZXdzLmNvbnRlbnRvdXRsaW5lLkNvbnRlbnRPdXRsaW5lOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLnZpZXdzLmNvbnRlbnRvdXRsaW5lLkNvbnRlbnRPdXRsaW5lUGFnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS52aWV3cy5jb250ZW50b3V0bGluZS5JQ29udGVudE91dGxpbmVQYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLnZpZXdzLnByb3BlcnRpZXMuSVByb3BlcnR5U2hlZXRQYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLnZpZXdzLnByb3BlcnRpZXMuUHJvcGVydHlTaGVldDsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS52aWV3cy5wcm9wZXJ0aWVzLlByb3BlcnR5U2hlZXRQYWdlOworCisKKy8qKgorICogVGhpcyBpcyBhbiBleGFtcGxlIG9mIGEgTW9kZWwgbW9kZWwgZWRpdG9yLgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQGdlbmVyYXRlZAorICovCitAU3VwcHJlc3NXYXJuaW5ncygiYWxsIikKK3B1YmxpYyBjbGFzcyBNb2RlbEVkaXRvcgorCWV4dGVuZHMgTXVsdGlQYWdlRWRpdG9yUGFydAorCWltcGxlbWVudHMgSUVkaXRpbmdEb21haW5Qcm92aWRlciwgSVNlbGVjdGlvblByb3ZpZGVyLCBJTWVudUxpc3RlbmVyLCBJVmlld2VyUHJvdmlkZXIsIElHb3RvTWFya2VyIHsKKwkvKioKKwkgKiBUaGlzIGtlZXBzIHRyYWNrIG9mIHRoZSBlZGl0aW5nIGRvbWFpbiB0aGF0IGlzIHVzZWQgdG8gdHJhY2sgYWxsIGNoYW5nZXMgdG8gdGhlIG1vZGVsLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBBZGFwdGVyRmFjdG9yeUVkaXRpbmdEb21haW4gZWRpdGluZ0RvbWFpbjsKKworCS8qKgorCSAqIFRoaXMgaXMgdGhlIG9uZSBhZGFwdGVyIGZhY3RvcnkgdXNlZCBmb3IgcHJvdmlkaW5nIHZpZXdzIG9mIHRoZSBtb2RlbC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgQ29tcG9zZWRBZGFwdGVyRmFjdG9yeSBhZGFwdGVyRmFjdG9yeTsKKworCS8qKgorCSAqIFRoaXMgaXMgdGhlIGNvbnRlbnQgb3V0bGluZSBwYWdlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBJQ29udGVudE91dGxpbmVQYWdlIGNvbnRlbnRPdXRsaW5lUGFnZTsKKworCS8qKgorCSAqIFRoaXMgaXMgYSBrbHVkZ2UuLi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgSVN0YXR1c0xpbmVNYW5hZ2VyIGNvbnRlbnRPdXRsaW5lU3RhdHVzTGluZU1hbmFnZXI7CisKKwkvKioKKwkgKiBUaGlzIGlzIHRoZSBjb250ZW50IG91dGxpbmUgcGFnZSdzIHZpZXdlci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgVHJlZVZpZXdlciBjb250ZW50T3V0bGluZVZpZXdlcjsKKworCS8qKgorCSAqIFRoaXMgaXMgdGhlIHByb3BlcnR5IHNoZWV0IHBhZ2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIFByb3BlcnR5U2hlZXRQYWdlIHByb3BlcnR5U2hlZXRQYWdlOworCisJLyoqCisJICogVGhpcyBpcyB0aGUgdmlld2VyIHRoYXQgc2hhZG93cyB0aGUgc2VsZWN0aW9uIGluIHRoZSBjb250ZW50IG91dGxpbmUuCisJICogVGhlIHBhcmVudCByZWxhdGlvbiBtdXN0IGJlIGNvcnJlY3RseSBkZWZpbmVkIGZvciB0aGlzIHRvIHdvcmsuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIFRyZWVWaWV3ZXIgc2VsZWN0aW9uVmlld2VyOworCisJLyoqCisJICogVGhpcyBrZWVwcyB0cmFjayBvZiB0aGUgYWN0aXZlIGNvbnRlbnQgdmlld2VyLCB3aGljaCBtYXkgYmUgZWl0aGVyIG9uZSBvZiB0aGUgdmlld2VycyBpbiB0aGUgcGFnZXMgb3IgdGhlIGNvbnRlbnQgb3V0bGluZSB2aWV3ZXIuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIFZpZXdlciBjdXJyZW50Vmlld2VyOworCisJLyoqCisJICogVGhpcyBsaXN0ZW5zIHRvIHdoaWNoIGV2ZXIgdmlld2VyIGlzIGFjdGl2ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lciBzZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXI7CisKKwkvKioKKwkgKiBUaGlzIGtlZXBzIHRyYWNrIG9mIGFsbCB0aGUge0BsaW5rIG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcn1zIHRoYXQgYXJlIGxpc3RlbmluZyB0byB0aGlzIGVkaXRvci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgQ29sbGVjdGlvbjxJU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyPiBzZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXJzID0gbmV3IEFycmF5TGlzdDxJU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyPigpOworCisJLyoqCisJICogVGhpcyBrZWVwcyB0cmFjayBvZiB0aGUgc2VsZWN0aW9uIG9mIHRoZSBlZGl0b3IgYXMgYSB3aG9sZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgSVNlbGVjdGlvbiBlZGl0b3JTZWxlY3Rpb24gPSBTdHJ1Y3R1cmVkU2VsZWN0aW9uLkVNUFRZOworCisJLyoqCisJICogVGhlIE1hcmtlckhlbHBlciBpcyByZXNwb25zaWJsZSBmb3IgY3JlYXRpbmcgd29ya3NwYWNlIHJlc291cmNlIG1hcmtlcnMgcHJlc2VudGVkCisJICogaW4gRWNsaXBzZSdzIFByb2JsZW1zIFZpZXcuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIE1hcmtlckhlbHBlciBtYXJrZXJIZWxwZXIgPSBuZXcgRWRpdFVJTWFya2VySGVscGVyKCk7CisKKwkvKioKKwkgKiBUaGlzIGxpc3RlbnMgZm9yIHdoZW4gdGhlIG91dGxpbmUgYmVjb21lcyBhY3RpdmUKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgSVBhcnRMaXN0ZW5lciBwYXJ0TGlzdGVuZXIgPQorCQluZXcgSVBhcnRMaXN0ZW5lcigpIHsKKwkJCXB1YmxpYyB2b2lkIHBhcnRBY3RpdmF0ZWQoSVdvcmtiZW5jaFBhcnQgcCkgeworCQkJCWlmIChwIGluc3RhbmNlb2YgQ29udGVudE91dGxpbmUpIHsKKwkJCQkJaWYgKCgoQ29udGVudE91dGxpbmUpcCkuZ2V0Q3VycmVudFBhZ2UoKSA9PSBjb250ZW50T3V0bGluZVBhZ2UpIHsKKwkJCQkJCWdldEFjdGlvbkJhckNvbnRyaWJ1dG9yKCkuc2V0QWN0aXZlRWRpdG9yKE1vZGVsRWRpdG9yLnRoaXMpOworCisJCQkJCQlzZXRDdXJyZW50Vmlld2VyKGNvbnRlbnRPdXRsaW5lVmlld2VyKTsKKwkJCQkJfQorCQkJCX0KKwkJCQllbHNlIGlmIChwIGluc3RhbmNlb2YgUHJvcGVydHlTaGVldCkgeworCQkJCQlpZiAoKChQcm9wZXJ0eVNoZWV0KXApLmdldEN1cnJlbnRQYWdlKCkgPT0gcHJvcGVydHlTaGVldFBhZ2UpIHsKKwkJCQkJCWdldEFjdGlvbkJhckNvbnRyaWJ1dG9yKCkuc2V0QWN0aXZlRWRpdG9yKE1vZGVsRWRpdG9yLnRoaXMpOworCQkJCQkJaGFuZGxlQWN0aXZhdGUoKTsKKwkJCQkJfQorCQkJCX0KKwkJCQllbHNlIGlmIChwID09IE1vZGVsRWRpdG9yLnRoaXMpIHsKKwkJCQkJaGFuZGxlQWN0aXZhdGUoKTsKKwkJCQl9CisJCQl9CisJCQlwdWJsaWMgdm9pZCBwYXJ0QnJvdWdodFRvVG9wKElXb3JrYmVuY2hQYXJ0IHApIHsKKwkJCQkvLyBJZ25vcmUuCisJCQl9CisJCQlwdWJsaWMgdm9pZCBwYXJ0Q2xvc2VkKElXb3JrYmVuY2hQYXJ0IHApIHsKKwkJCQkvLyBJZ25vcmUuCisJCQl9CisJCQlwdWJsaWMgdm9pZCBwYXJ0RGVhY3RpdmF0ZWQoSVdvcmtiZW5jaFBhcnQgcCkgeworCQkJCS8vIElnbm9yZS4KKwkJCX0KKwkJCXB1YmxpYyB2b2lkIHBhcnRPcGVuZWQoSVdvcmtiZW5jaFBhcnQgcCkgeworCQkJCS8vIElnbm9yZS4KKwkJCX0KKwkJfTsKKworCS8qKgorCSAqIFJlc291cmNlcyB0aGF0IGhhdmUgYmVlbiByZW1vdmVkIHNpbmNlIGxhc3QgYWN0aXZhdGlvbi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgQ29sbGVjdGlvbjxSZXNvdXJjZT4gcmVtb3ZlZFJlc291cmNlcyA9IG5ldyBBcnJheUxpc3Q8UmVzb3VyY2U+KCk7CisKKwkvKioKKwkgKiBSZXNvdXJjZXMgdGhhdCBoYXZlIGJlZW4gY2hhbmdlZCBzaW5jZSBsYXN0IGFjdGl2YXRpb24uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIENvbGxlY3Rpb248UmVzb3VyY2U+IGNoYW5nZWRSZXNvdXJjZXMgPSBuZXcgQXJyYXlMaXN0PFJlc291cmNlPigpOworCisJLyoqCisJICogUmVzb3VyY2VzIHRoYXQgaGF2ZSBiZWVuIHNhdmVkLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBDb2xsZWN0aW9uPFJlc291cmNlPiBzYXZlZFJlc291cmNlcyA9IG5ldyBBcnJheUxpc3Q8UmVzb3VyY2U+KCk7CisKKwkvKioKKwkgKiBNYXAgdG8gc3RvcmUgdGhlIGRpYWdub3N0aWMgYXNzb2NpYXRlZCB3aXRoIGEgcmVzb3VyY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIE1hcDxSZXNvdXJjZSwgRGlhZ25vc3RpYz4gcmVzb3VyY2VUb0RpYWdub3N0aWNNYXAgPSBuZXcgTGlua2VkSGFzaE1hcDxSZXNvdXJjZSwgRGlhZ25vc3RpYz4oKTsKKworCS8qKgorCSAqIENvbnRyb2xzIHdoZXRoZXIgdGhlIHByb2JsZW0gaW5kaWNhdGlvbiBzaG91bGQgYmUgdXBkYXRlZC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgYm9vbGVhbiB1cGRhdGVQcm9ibGVtSW5kaWNhdGlvbiA9IHRydWU7CisKKwkvKioKKwkgKiBBZGFwdGVyIHVzZWQgdG8gdXBkYXRlIHRoZSBwcm9ibGVtIGluZGljYXRpb24gd2hlbiByZXNvdXJjZXMgYXJlIGRlbWFuZGVkIGxvYWRlZC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgRUNvbnRlbnRBZGFwdGVyIHByb2JsZW1JbmRpY2F0aW9uQWRhcHRlciA9IAorCQluZXcgRUNvbnRlbnRBZGFwdGVyKCkgeworCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgdm9pZCBub3RpZnlDaGFuZ2VkKE5vdGlmaWNhdGlvbiBub3RpZmljYXRpb24pIHsKKwkJCQlpZiAobm90aWZpY2F0aW9uLmdldE5vdGlmaWVyKCkgaW5zdGFuY2VvZiBSZXNvdXJjZSkgeworCQkJCQlzd2l0Y2ggKG5vdGlmaWNhdGlvbi5nZXRGZWF0dXJlSUQoUmVzb3VyY2UuY2xhc3MpKSB7CisJCQkJCQljYXNlIFJlc291cmNlLlJFU09VUkNFX19JU19MT0FERUQ6CisJCQkJCQljYXNlIFJlc291cmNlLlJFU09VUkNFX19FUlJPUlM6CisJCQkJCQljYXNlIFJlc291cmNlLlJFU09VUkNFX19XQVJOSU5HUzogeworCQkJCQkJCVJlc291cmNlIHJlc291cmNlID0gKFJlc291cmNlKW5vdGlmaWNhdGlvbi5nZXROb3RpZmllcigpOworCQkJCQkJCURpYWdub3N0aWMgZGlhZ25vc3RpYyA9IGFuYWx5emVSZXNvdXJjZVByb2JsZW1zKHJlc291cmNlLCBudWxsKTsKKwkJCQkJCQlpZiAoZGlhZ25vc3RpYy5nZXRTZXZlcml0eSgpICE9IERpYWdub3N0aWMuT0spIHsKKwkJCQkJCQkJcmVzb3VyY2VUb0RpYWdub3N0aWNNYXAucHV0KHJlc291cmNlLCBkaWFnbm9zdGljKTsKKwkJCQkJCQl9CisJCQkJCQkJZWxzZSB7CisJCQkJCQkJCXJlc291cmNlVG9EaWFnbm9zdGljTWFwLnJlbW92ZShyZXNvdXJjZSk7CisJCQkJCQkJfQorCisJCQkJCQkJaWYgKHVwZGF0ZVByb2JsZW1JbmRpY2F0aW9uKSB7CisJCQkJCQkJCWdldFNpdGUoKS5nZXRTaGVsbCgpLmdldERpc3BsYXkoKS5hc3luY0V4ZWMKKwkJCQkJCQkJCShuZXcgUnVubmFibGUoKSB7CisJCQkJCQkJCQkJIHB1YmxpYyB2b2lkIHJ1bigpIHsKKwkJCQkJCQkJCQkJIHVwZGF0ZVByb2JsZW1JbmRpY2F0aW9uKCk7CisJCQkJCQkJCQkJIH0KKwkJCQkJCQkJCSB9KTsKKwkJCQkJCQl9CisJCQkJCQkJYnJlYWs7CisJCQkJCQl9CisJCQkJCX0KKwkJCQl9CisJCQkJZWxzZSB7CisJCQkJCXN1cGVyLm5vdGlmeUNoYW5nZWQobm90aWZpY2F0aW9uKTsKKwkJCQl9CisJCQl9CisKKwkJCUBPdmVycmlkZQorCQkJcHJvdGVjdGVkIHZvaWQgc2V0VGFyZ2V0KFJlc291cmNlIHRhcmdldCkgeworCQkJCWJhc2ljU2V0VGFyZ2V0KHRhcmdldCk7CisJCQl9CisKKwkJCUBPdmVycmlkZQorCQkJcHJvdGVjdGVkIHZvaWQgdW5zZXRUYXJnZXQoUmVzb3VyY2UgdGFyZ2V0KSB7CisJCQkJYmFzaWNVbnNldFRhcmdldCh0YXJnZXQpOworCQkJfQorCQl9OworCisJLyoqCisJICogVGhpcyBsaXN0ZW5zIGZvciB3b3Jrc3BhY2UgY2hhbmdlcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgSVJlc291cmNlQ2hhbmdlTGlzdGVuZXIgcmVzb3VyY2VDaGFuZ2VMaXN0ZW5lciA9CisJCW5ldyBJUmVzb3VyY2VDaGFuZ2VMaXN0ZW5lcigpIHsKKwkJCXB1YmxpYyB2b2lkIHJlc291cmNlQ2hhbmdlZChJUmVzb3VyY2VDaGFuZ2VFdmVudCBldmVudCkgeworCQkJCUlSZXNvdXJjZURlbHRhIGRlbHRhID0gZXZlbnQuZ2V0RGVsdGEoKTsKKwkJCQl0cnkgeworCQkJCQljbGFzcyBSZXNvdXJjZURlbHRhVmlzaXRvciBpbXBsZW1lbnRzIElSZXNvdXJjZURlbHRhVmlzaXRvciB7CisJCQkJCQlwcm90ZWN0ZWQgUmVzb3VyY2VTZXQgcmVzb3VyY2VTZXQgPSBlZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCk7CisJCQkJCQlwcm90ZWN0ZWQgQ29sbGVjdGlvbjxSZXNvdXJjZT4gY2hhbmdlZFJlc291cmNlcyA9IG5ldyBBcnJheUxpc3Q8UmVzb3VyY2U+KCk7CisJCQkJCQlwcm90ZWN0ZWQgQ29sbGVjdGlvbjxSZXNvdXJjZT4gcmVtb3ZlZFJlc291cmNlcyA9IG5ldyBBcnJheUxpc3Q8UmVzb3VyY2U+KCk7CisKKwkJCQkJCXB1YmxpYyBib29sZWFuIHZpc2l0KElSZXNvdXJjZURlbHRhIGRlbHRhKSB7CisJCQkJCQkJaWYgKGRlbHRhLmdldFJlc291cmNlKCkuZ2V0VHlwZSgpID09IElSZXNvdXJjZS5GSUxFKSB7CisJCQkJCQkJCWlmIChkZWx0YS5nZXRLaW5kKCkgPT0gSVJlc291cmNlRGVsdGEuUkVNT1ZFRCB8fAorCQkJCQkJCQkgICAgZGVsdGEuZ2V0S2luZCgpID09IElSZXNvdXJjZURlbHRhLkNIQU5HRUQgJiYgZGVsdGEuZ2V0RmxhZ3MoKSAhPSBJUmVzb3VyY2VEZWx0YS5NQVJLRVJTKSB7CisJCQkJCQkJCQlSZXNvdXJjZSByZXNvdXJjZSA9IHJlc291cmNlU2V0LmdldFJlc291cmNlKFVSSS5jcmVhdGVQbGF0Zm9ybVJlc291cmNlVVJJKGRlbHRhLmdldEZ1bGxQYXRoKCkudG9TdHJpbmcoKSwgdHJ1ZSksIGZhbHNlKTsKKwkJCQkJCQkJCWlmIChyZXNvdXJjZSAhPSBudWxsKSB7CisJCQkJCQkJCQkJaWYgKGRlbHRhLmdldEtpbmQoKSA9PSBJUmVzb3VyY2VEZWx0YS5SRU1PVkVEKSB7CisJCQkJCQkJCQkJCXJlbW92ZWRSZXNvdXJjZXMuYWRkKHJlc291cmNlKTsKKwkJCQkJCQkJCQl9CisJCQkJCQkJCQkJZWxzZSBpZiAoIXNhdmVkUmVzb3VyY2VzLnJlbW92ZShyZXNvdXJjZSkpIHsKKwkJCQkJCQkJCQkJY2hhbmdlZFJlc291cmNlcy5hZGQocmVzb3VyY2UpOworCQkJCQkJCQkJCX0KKwkJCQkJCQkJCX0KKwkJCQkJCQkJfQorCQkJCQkJCX0KKworCQkJCQkJCXJldHVybiB0cnVlOworCQkJCQkJfQorCisJCQkJCQlwdWJsaWMgQ29sbGVjdGlvbjxSZXNvdXJjZT4gZ2V0Q2hhbmdlZFJlc291cmNlcygpIHsKKwkJCQkJCQlyZXR1cm4gY2hhbmdlZFJlc291cmNlczsKKwkJCQkJCX0KKworCQkJCQkJcHVibGljIENvbGxlY3Rpb248UmVzb3VyY2U+IGdldFJlbW92ZWRSZXNvdXJjZXMoKSB7CisJCQkJCQkJcmV0dXJuIHJlbW92ZWRSZXNvdXJjZXM7CisJCQkJCQl9CisJCQkJCX0KKworCQkJCQlmaW5hbCBSZXNvdXJjZURlbHRhVmlzaXRvciB2aXNpdG9yID0gbmV3IFJlc291cmNlRGVsdGFWaXNpdG9yKCk7CisJCQkJCWRlbHRhLmFjY2VwdCh2aXNpdG9yKTsKKworCQkJCQlpZiAoIXZpc2l0b3IuZ2V0UmVtb3ZlZFJlc291cmNlcygpLmlzRW1wdHkoKSkgeworCQkJCQkJZ2V0U2l0ZSgpLmdldFNoZWxsKCkuZ2V0RGlzcGxheSgpLmFzeW5jRXhlYworCQkJCQkJCShuZXcgUnVubmFibGUoKSB7CisJCQkJCQkJCSBwdWJsaWMgdm9pZCBydW4oKSB7CisJCQkJCQkJCQkgcmVtb3ZlZFJlc291cmNlcy5hZGRBbGwodmlzaXRvci5nZXRSZW1vdmVkUmVzb3VyY2VzKCkpOworCQkJCQkJCQkJIGlmICghaXNEaXJ0eSgpKSB7CisJCQkJCQkJCQkJIGdldFNpdGUoKS5nZXRQYWdlKCkuY2xvc2VFZGl0b3IoTW9kZWxFZGl0b3IudGhpcywgZmFsc2UpOworCQkJCQkJCQkJIH0KKwkJCQkJCQkJIH0KKwkJCQkJCQkgfSk7CisJCQkJCX0KKworCQkJCQlpZiAoIXZpc2l0b3IuZ2V0Q2hhbmdlZFJlc291cmNlcygpLmlzRW1wdHkoKSkgeworCQkJCQkJZ2V0U2l0ZSgpLmdldFNoZWxsKCkuZ2V0RGlzcGxheSgpLmFzeW5jRXhlYworCQkJCQkJCShuZXcgUnVubmFibGUoKSB7CisJCQkJCQkJCSBwdWJsaWMgdm9pZCBydW4oKSB7CisJCQkJCQkJCQkgY2hhbmdlZFJlc291cmNlcy5hZGRBbGwodmlzaXRvci5nZXRDaGFuZ2VkUmVzb3VyY2VzKCkpOworCQkJCQkJCQkJIGlmIChnZXRTaXRlKCkuZ2V0UGFnZSgpLmdldEFjdGl2ZUVkaXRvcigpID09IE1vZGVsRWRpdG9yLnRoaXMpIHsKKwkJCQkJCQkJCQkgaGFuZGxlQWN0aXZhdGUoKTsKKwkJCQkJCQkJCSB9CisJCQkJCQkJCSB9CisJCQkJCQkJIH0pOworCQkJCQl9CisJCQkJfQorCQkJCWNhdGNoIChDb3JlRXhjZXB0aW9uIGV4Y2VwdGlvbikgeworCQkJCQlDb3JlRWRpdG9yUGx1Z2luLklOU1RBTkNFLmxvZyhleGNlcHRpb24pOworCQkJCX0KKwkJCX0KKwkJfTsKKworCS8qKgorCSAqIEhhbmRsZXMgYWN0aXZhdGlvbiBvZiB0aGUgZWRpdG9yIG9yIGl0J3MgYXNzb2NpYXRlZCB2aWV3cy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBoYW5kbGVBY3RpdmF0ZSgpIHsKKwkJLy8gUmVjb21wdXRlIHRoZSByZWFkIG9ubHkgc3RhdGUuCisJCS8vCisJCWlmIChlZGl0aW5nRG9tYWluLmdldFJlc291cmNlVG9SZWFkT25seU1hcCgpICE9IG51bGwpIHsKKwkJICBlZGl0aW5nRG9tYWluLmdldFJlc291cmNlVG9SZWFkT25seU1hcCgpLmNsZWFyKCk7CisKKwkJICAvLyBSZWZyZXNoIGFueSBhY3Rpb25zIHRoYXQgbWF5IGJlY29tZSBlbmFibGVkIG9yIGRpc2FibGVkLgorCQkgIC8vCisJCSAgc2V0U2VsZWN0aW9uKGdldFNlbGVjdGlvbigpKTsKKwkJfQorCisJCWlmICghcmVtb3ZlZFJlc291cmNlcy5pc0VtcHR5KCkpIHsKKwkJCWlmIChoYW5kbGVEaXJ0eUNvbmZsaWN0KCkpIHsKKwkJCQlnZXRTaXRlKCkuZ2V0UGFnZSgpLmNsb3NlRWRpdG9yKE1vZGVsRWRpdG9yLnRoaXMsIGZhbHNlKTsKKwkJCX0KKwkJCWVsc2UgeworCQkJCXJlbW92ZWRSZXNvdXJjZXMuY2xlYXIoKTsKKwkJCQljaGFuZ2VkUmVzb3VyY2VzLmNsZWFyKCk7CisJCQkJc2F2ZWRSZXNvdXJjZXMuY2xlYXIoKTsKKwkJCX0KKwkJfQorCQllbHNlIGlmICghY2hhbmdlZFJlc291cmNlcy5pc0VtcHR5KCkpIHsKKwkJCWNoYW5nZWRSZXNvdXJjZXMucmVtb3ZlQWxsKHNhdmVkUmVzb3VyY2VzKTsKKwkJCWhhbmRsZUNoYW5nZWRSZXNvdXJjZXMoKTsKKwkJCWNoYW5nZWRSZXNvdXJjZXMuY2xlYXIoKTsKKwkJCXNhdmVkUmVzb3VyY2VzLmNsZWFyKCk7CisJCX0KKwl9CisKKwkvKioKKwkgKiBIYW5kbGVzIHdoYXQgdG8gZG8gd2l0aCBjaGFuZ2VkIHJlc291cmNlcyBvbiBhY3RpdmF0aW9uLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIGhhbmRsZUNoYW5nZWRSZXNvdXJjZXMoKSB7CisJCWlmICghY2hhbmdlZFJlc291cmNlcy5pc0VtcHR5KCkgJiYgKCFpc0RpcnR5KCkgfHwgaGFuZGxlRGlydHlDb25mbGljdCgpKSkgeworCQkJaWYgKGlzRGlydHkoKSkgeworCQkJCWNoYW5nZWRSZXNvdXJjZXMuYWRkQWxsKGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKS5nZXRSZXNvdXJjZXMoKSk7CisJCQl9CisJCQllZGl0aW5nRG9tYWluLmdldENvbW1hbmRTdGFjaygpLmZsdXNoKCk7CisKKwkJCXVwZGF0ZVByb2JsZW1JbmRpY2F0aW9uID0gZmFsc2U7CisJCQlmb3IgKFJlc291cmNlIHJlc291cmNlIDogY2hhbmdlZFJlc291cmNlcykgeworCQkJCWlmIChyZXNvdXJjZS5pc0xvYWRlZCgpKSB7CisJCQkJCXJlc291cmNlLnVubG9hZCgpOworCQkJCQl0cnkgeworCQkJCQkJcmVzb3VyY2UubG9hZChDb2xsZWN0aW9ucy5FTVBUWV9NQVApOworCQkJCQl9CisJCQkJCWNhdGNoIChJT0V4Y2VwdGlvbiBleGNlcHRpb24pIHsKKwkJCQkJCWlmICghcmVzb3VyY2VUb0RpYWdub3N0aWNNYXAuY29udGFpbnNLZXkocmVzb3VyY2UpKSB7CisJCQkJCQkJcmVzb3VyY2VUb0RpYWdub3N0aWNNYXAucHV0KHJlc291cmNlLCBhbmFseXplUmVzb3VyY2VQcm9ibGVtcyhyZXNvdXJjZSwgZXhjZXB0aW9uKSk7CisJCQkJCQl9CisJCQkJCX0KKwkJCQl9CisJCQl9CisKKwkJCWlmIChBZGFwdGVyRmFjdG9yeUVkaXRpbmdEb21haW4uaXNTdGFsZShlZGl0b3JTZWxlY3Rpb24pKSB7CisJCQkJc2V0U2VsZWN0aW9uKFN0cnVjdHVyZWRTZWxlY3Rpb24uRU1QVFkpOworCQkJfQorCisJCQl1cGRhdGVQcm9ibGVtSW5kaWNhdGlvbiA9IHRydWU7CisJCQl1cGRhdGVQcm9ibGVtSW5kaWNhdGlvbigpOworCQl9CisJfQorICAKKwkvKioKKwkgKiBVcGRhdGVzIHRoZSBwcm9ibGVtcyBpbmRpY2F0aW9uIHdpdGggdGhlIGluZm9ybWF0aW9uIGRlc2NyaWJlZCBpbiB0aGUgc3BlY2lmaWVkIGRpYWdub3N0aWMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgdXBkYXRlUHJvYmxlbUluZGljYXRpb24oKSB7CisJCWlmICh1cGRhdGVQcm9ibGVtSW5kaWNhdGlvbikgeworCQkJQmFzaWNEaWFnbm9zdGljIGRpYWdub3N0aWMgPQorCQkJCW5ldyBCYXNpY0RpYWdub3N0aWMKKwkJCQkJKERpYWdub3N0aWMuT0ssCisJCQkJCSAib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmVkaXRvciIsIC8vJE5PTi1OTFMtMSQKKwkJCQkJIDAsCisJCQkJCSBudWxsLAorCQkJCQkgbmV3IE9iamVjdCBbXSB7IGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKSB9KTsKKwkJCWZvciAoRGlhZ25vc3RpYyBjaGlsZERpYWdub3N0aWMgOiByZXNvdXJjZVRvRGlhZ25vc3RpY01hcC52YWx1ZXMoKSkgeworCQkJCWlmIChjaGlsZERpYWdub3N0aWMuZ2V0U2V2ZXJpdHkoKSAhPSBEaWFnbm9zdGljLk9LKSB7CisJCQkJCWRpYWdub3N0aWMuYWRkKGNoaWxkRGlhZ25vc3RpYyk7CisJCQkJfQorCQkJfQorCisJCQlpbnQgbGFzdEVkaXRvclBhZ2UgPSBnZXRQYWdlQ291bnQoKSAtIDE7CisJCQlpZiAobGFzdEVkaXRvclBhZ2UgPj0gMCAmJiBnZXRFZGl0b3IobGFzdEVkaXRvclBhZ2UpIGluc3RhbmNlb2YgUHJvYmxlbUVkaXRvclBhcnQpIHsKKwkJCQkoKFByb2JsZW1FZGl0b3JQYXJ0KWdldEVkaXRvcihsYXN0RWRpdG9yUGFnZSkpLnNldERpYWdub3N0aWMoZGlhZ25vc3RpYyk7CisJCQkJaWYgKGRpYWdub3N0aWMuZ2V0U2V2ZXJpdHkoKSAhPSBEaWFnbm9zdGljLk9LKSB7CisJCQkJCXNldEFjdGl2ZVBhZ2UobGFzdEVkaXRvclBhZ2UpOworCQkJCX0KKwkJCX0KKwkJCWVsc2UgaWYgKGRpYWdub3N0aWMuZ2V0U2V2ZXJpdHkoKSAhPSBEaWFnbm9zdGljLk9LKSB7CisJCQkJUHJvYmxlbUVkaXRvclBhcnQgcHJvYmxlbUVkaXRvclBhcnQgPSBuZXcgUHJvYmxlbUVkaXRvclBhcnQoKTsKKwkJCQlwcm9ibGVtRWRpdG9yUGFydC5zZXREaWFnbm9zdGljKGRpYWdub3N0aWMpOworCQkJCXByb2JsZW1FZGl0b3JQYXJ0LnNldE1hcmtlckhlbHBlcihtYXJrZXJIZWxwZXIpOworCQkJCXRyeSB7CisJCQkJCWFkZFBhZ2UoKytsYXN0RWRpdG9yUGFnZSwgcHJvYmxlbUVkaXRvclBhcnQsIGdldEVkaXRvcklucHV0KCkpOworCQkJCQlzZXRQYWdlVGV4dChsYXN0RWRpdG9yUGFnZSwgcHJvYmxlbUVkaXRvclBhcnQuZ2V0UGFydE5hbWUoKSk7CisJCQkJCXNldEFjdGl2ZVBhZ2UobGFzdEVkaXRvclBhZ2UpOworCQkJCQlzaG93VGFicygpOworCQkJCX0KKwkJCQljYXRjaCAoUGFydEluaXRFeGNlcHRpb24gZXhjZXB0aW9uKSB7CisJCQkJCUNvcmVFZGl0b3JQbHVnaW4uSU5TVEFOQ0UubG9nKGV4Y2VwdGlvbik7CisJCQkJfQorCQkJfQorCisJCQlpZiAobWFya2VySGVscGVyLmhhc01hcmtlcnMoZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpKSkgeworCQkJCW1hcmtlckhlbHBlci5kZWxldGVNYXJrZXJzKGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKSk7CisJCQkJaWYgKGRpYWdub3N0aWMuZ2V0U2V2ZXJpdHkoKSAhPSBEaWFnbm9zdGljLk9LKSB7CisJCQkJCXRyeSB7CisJCQkJCQltYXJrZXJIZWxwZXIuY3JlYXRlTWFya2VycyhkaWFnbm9zdGljKTsKKwkJCQkJfQorCQkJCQljYXRjaCAoQ29yZUV4Y2VwdGlvbiBleGNlcHRpb24pIHsKKwkJCQkJCUNvcmVFZGl0b3JQbHVnaW4uSU5TVEFOQ0UubG9nKGV4Y2VwdGlvbik7CisJCQkJCX0KKwkJCQl9CisJCQl9CisJCX0KKwl9CisKKwkvKioKKwkgKiBTaG93cyBhIGRpYWxvZyB0aGF0IGFza3MgaWYgY29uZmxpY3RpbmcgY2hhbmdlcyBzaG91bGQgYmUgZGlzY2FyZGVkLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBib29sZWFuIGhhbmRsZURpcnR5Q29uZmxpY3QoKSB7CisJCXJldHVybgorCQkJTWVzc2FnZURpYWxvZy5vcGVuUXVlc3Rpb24KKwkJCQkoZ2V0U2l0ZSgpLmdldFNoZWxsKCksCisJCQkJIGdldFN0cmluZygiX1VJX0ZpbGVDb25mbGljdF9sYWJlbCIpLCAvLyROT04tTkxTLTEkCisJCQkJIGdldFN0cmluZygiX1dBUk5fRmlsZUNvbmZsaWN0IikpOyAvLyROT04tTkxTLTEkCisJfQorCisJLyoqCisJICogVGhpcyBjcmVhdGVzIGEgbW9kZWwgZWRpdG9yLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBNb2RlbEVkaXRvcigpIHsKKwkJc3VwZXIoKTsKKwkJaW5pdGlhbGl6ZUVkaXRpbmdEb21haW4oKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHNldHMgdXAgdGhlIGVkaXRpbmcgZG9tYWluIGZvciB0aGUgbW9kZWwgZWRpdG9yLiA8IS0tIGJlZ2luLXVzZXItZG9jCisJICogLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJcHJvdGVjdGVkIHZvaWQgaW5pdGlhbGl6ZUVkaXRpbmdEb21haW4oKSB7CisJCWluaXRpYWxpemVFZGl0aW5nRG9tYWluR2VuKCk7CisJCWVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKS5nZXRSZXNvdXJjZUZhY3RvcnlSZWdpc3RyeSgpCisJCQkJLmdldEV4dGVuc2lvblRvRmFjdG9yeU1hcCgpLnB1dCgiKiIsCisJCQkJCQlTVEVNWE1JUmVzb3VyY2VGYWN0b3J5SW1wbC5JTlNUQU5DRSk7CisKKwkJZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpLmdldFJlc291cmNlRmFjdG9yeVJlZ2lzdHJ5KCkKKwkJCQkuZ2V0UHJvdG9jb2xUb0ZhY3RvcnlNYXAoKS5wdXQoInBsYXRmb3JtIiwKKwkJCQkJCVNURU1YTUlSZXNvdXJjZUZhY3RvcnlJbXBsLklOU1RBTkNFKTsKKwl9IC8vIGluaXRpYWxpemVFZGl0aW5nRG9tYWluCisJCisJLyoqCisJICogVGhpcyBzZXRzIHVwIHRoZSBlZGl0aW5nIGRvbWFpbiBmb3IgdGhlIG1vZGVsIGVkaXRvci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBpbml0aWFsaXplRWRpdGluZ0RvbWFpbkdlbigpIHsKKwkJLy8gQ3JlYXRlIGFuIGFkYXB0ZXIgZmFjdG9yeSB0aGF0IHlpZWxkcyBpdGVtIHByb3ZpZGVycy4KKwkJLy8KKwkJYWRhcHRlckZhY3RvcnkgPSBuZXcgQ29tcG9zZWRBZGFwdGVyRmFjdG9yeShDb21wb3NlZEFkYXB0ZXJGYWN0b3J5LkRlc2NyaXB0b3IuUmVnaXN0cnkuSU5TVEFOQ0UpOworCisJCWFkYXB0ZXJGYWN0b3J5LmFkZEFkYXB0ZXJGYWN0b3J5KG5ldyBSZXNvdXJjZUl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5KCkpOworCQlhZGFwdGVyRmFjdG9yeS5hZGRBZGFwdGVyRmFjdG9yeShuZXcgQ29tbW9uSXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkoKSk7CisJCWFkYXB0ZXJGYWN0b3J5LmFkZEFkYXB0ZXJGYWN0b3J5KG5ldyBFeHBlcmltZW50SXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkoKSk7CisJCWFkYXB0ZXJGYWN0b3J5LmFkZEFkYXB0ZXJGYWN0b3J5KG5ldyBHcmFwaEl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5KCkpOworCQlhZGFwdGVyRmFjdG9yeS5hZGRBZGFwdGVyRmFjdG9yeShuZXcgTW9kZWxJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSgpKTsKKwkJYWRhcHRlckZhY3RvcnkuYWRkQWRhcHRlckZhY3RvcnkobmV3IE1vZGlmaWVySXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkoKSk7CisJCWFkYXB0ZXJGYWN0b3J5LmFkZEFkYXB0ZXJGYWN0b3J5KG5ldyBQcmVkaWNhdGVJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSgpKTsKKwkJYWRhcHRlckZhY3RvcnkuYWRkQWRhcHRlckZhY3RvcnkobmV3IFNjZW5hcmlvSXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkoKSk7CisJCWFkYXB0ZXJGYWN0b3J5LmFkZEFkYXB0ZXJGYWN0b3J5KG5ldyBTZXF1ZW5jZXJJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSgpKTsKKwkJYWRhcHRlckZhY3RvcnkuYWRkQWRhcHRlckZhY3RvcnkobmV3IFRyaWdnZXJJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSgpKTsKKwkJYWRhcHRlckZhY3RvcnkuYWRkQWRhcHRlckZhY3RvcnkobmV3IFNvbHZlckl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5KCkpOworCQlhZGFwdGVyRmFjdG9yeS5hZGRBZGFwdGVyRmFjdG9yeShuZXcgTG9nZ2VySXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkoKSk7CisJCWFkYXB0ZXJGYWN0b3J5LmFkZEFkYXB0ZXJGYWN0b3J5KG5ldyBFY29yZUl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5KCkpOworCQlhZGFwdGVyRmFjdG9yeS5hZGRBZGFwdGVyRmFjdG9yeShuZXcgUmVmbGVjdGl2ZUl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5KCkpOworCisJCS8vIENyZWF0ZSB0aGUgY29tbWFuZCBzdGFjayB0aGF0IHdpbGwgbm90aWZ5IHRoaXMgZWRpdG9yIGFzIGNvbW1hbmRzIGFyZSBleGVjdXRlZC4KKwkJLy8KKwkJQmFzaWNDb21tYW5kU3RhY2sgY29tbWFuZFN0YWNrID0gbmV3IEJhc2ljQ29tbWFuZFN0YWNrKCk7CisKKwkJLy8gQWRkIGEgbGlzdGVuZXIgdG8gc2V0IHRoZSBtb3N0IHJlY2VudCBjb21tYW5kJ3MgYWZmZWN0ZWQgb2JqZWN0cyB0byBiZSB0aGUgc2VsZWN0aW9uIG9mIHRoZSB2aWV3ZXIgd2l0aCBmb2N1cy4KKwkJLy8KKwkJY29tbWFuZFN0YWNrLmFkZENvbW1hbmRTdGFja0xpc3RlbmVyCisJCQkobmV3IENvbW1hbmRTdGFja0xpc3RlbmVyKCkgeworCQkJCSBwdWJsaWMgdm9pZCBjb21tYW5kU3RhY2tDaGFuZ2VkKGZpbmFsIEV2ZW50T2JqZWN0IGV2ZW50KSB7CisJCQkJCSBnZXRDb250YWluZXIoKS5nZXREaXNwbGF5KCkuYXN5bmNFeGVjCisJCQkJCQkgKG5ldyBSdW5uYWJsZSgpIHsKKwkJCQkJCQkgIHB1YmxpYyB2b2lkIHJ1bigpIHsKKwkJCQkJCQkJICBmaXJlUHJvcGVydHlDaGFuZ2UoSUVkaXRvclBhcnQuUFJPUF9ESVJUWSk7CisKKwkJCQkJCQkJICAvLyBUcnkgdG8gc2VsZWN0IHRoZSBhZmZlY3RlZCBvYmplY3RzLgorCQkJCQkJCQkgIC8vCisJCQkJCQkJCSAgQ29tbWFuZCBtb3N0UmVjZW50Q29tbWFuZCA9ICgoQ29tbWFuZFN0YWNrKWV2ZW50LmdldFNvdXJjZSgpKS5nZXRNb3N0UmVjZW50Q29tbWFuZCgpOworCQkJCQkJCQkgIGlmIChtb3N0UmVjZW50Q29tbWFuZCAhPSBudWxsKSB7CisJCQkJCQkJCQkgIHNldFNlbGVjdGlvblRvVmlld2VyKG1vc3RSZWNlbnRDb21tYW5kLmdldEFmZmVjdGVkT2JqZWN0cygpKTsKKwkJCQkJCQkJICB9CisJCQkJCQkJCSAgaWYgKHByb3BlcnR5U2hlZXRQYWdlICE9IG51bGwgJiYgIXByb3BlcnR5U2hlZXRQYWdlLmdldENvbnRyb2woKS5pc0Rpc3Bvc2VkKCkpIHsKKwkJCQkJCQkJCSAgcHJvcGVydHlTaGVldFBhZ2UucmVmcmVzaCgpOworCQkJCQkJCQkgIH0KKwkJCQkJCQkgIH0KKwkJCQkJCSAgfSk7CisJCQkJIH0KKwkJCSB9KTsKKworCQkvLyBDcmVhdGUgdGhlIGVkaXRpbmcgZG9tYWluIHdpdGggYSBzcGVjaWFsIGNvbW1hbmQgc3RhY2suCisJCS8vCisJCWVkaXRpbmdEb21haW4gPSBuZXcgQWRhcHRlckZhY3RvcnlFZGl0aW5nRG9tYWluKGFkYXB0ZXJGYWN0b3J5LCBjb21tYW5kU3RhY2ssIG5ldyBIYXNoTWFwPFJlc291cmNlLCBCb29sZWFuPigpKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGlzIGhlcmUgZm9yIHRoZSBsaXN0ZW5lciB0byBiZSBhYmxlIHRvIGNhbGwgaXQuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgZmlyZVByb3BlcnR5Q2hhbmdlKGludCBhY3Rpb24pIHsKKwkJc3VwZXIuZmlyZVByb3BlcnR5Q2hhbmdlKGFjdGlvbik7CisJfQorCisJLyoqCisJICogVGhpcyBzZXRzIHRoZSBzZWxlY3Rpb24gaW50byB3aGljaGV2ZXIgdmlld2VyIGlzIGFjdGl2ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRTZWxlY3Rpb25Ub1ZpZXdlcihDb2xsZWN0aW9uPD8+IGNvbGxlY3Rpb24pIHsKKwkJZmluYWwgQ29sbGVjdGlvbjw/PiB0aGVTZWxlY3Rpb24gPSBjb2xsZWN0aW9uOworCQkvLyBNYWtlIHN1cmUgaXQncyBva2F5LgorCQkvLworCQlpZiAodGhlU2VsZWN0aW9uICE9IG51bGwgJiYgIXRoZVNlbGVjdGlvbi5pc0VtcHR5KCkpIHsKKwkJCVJ1bm5hYmxlIHJ1bm5hYmxlID0KKwkJCQluZXcgUnVubmFibGUoKSB7CisJCQkJCXB1YmxpYyB2b2lkIHJ1bigpIHsKKwkJCQkJCS8vIFRyeSB0byBzZWxlY3QgdGhlIGl0ZW1zIGluIHRoZSBjdXJyZW50IGNvbnRlbnQgdmlld2VyIG9mIHRoZSBlZGl0b3IuCisJCQkJCQkvLworCQkJCQkJaWYgKGN1cnJlbnRWaWV3ZXIgIT0gbnVsbCkgeworCQkJCQkJCWN1cnJlbnRWaWV3ZXIuc2V0U2VsZWN0aW9uKG5ldyBTdHJ1Y3R1cmVkU2VsZWN0aW9uKHRoZVNlbGVjdGlvbi50b0FycmF5KCkpLCB0cnVlKTsKKwkJCQkJCX0KKwkJCQkJfQorCQkJCX07CisJCQlnZXRTaXRlKCkuZ2V0U2hlbGwoKS5nZXREaXNwbGF5KCkuYXN5bmNFeGVjKHJ1bm5hYmxlKTsKKwkJfQorCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyB0aGUgZWRpdGluZyBkb21haW4gYXMgcmVxdWlyZWQgYnkgdGhlIHtAbGluayBJRWRpdGluZ0RvbWFpblByb3ZpZGVyfSBpbnRlcmZhY2UuCisJICogVGhpcyBpcyBpbXBvcnRhbnQgZm9yIGltcGxlbWVudGluZyB0aGUgc3RhdGljIG1ldGhvZHMgb2Yge0BsaW5rIEFkYXB0ZXJGYWN0b3J5RWRpdGluZ0RvbWFpbn0KKwkgKiBhbmQgZm9yIHN1cHBvcnRpbmcge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmFjdGlvbi5Db21tYW5kQWN0aW9ufS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRWRpdGluZ0RvbWFpbiBnZXRFZGl0aW5nRG9tYWluKCkgeworCQlyZXR1cm4gZWRpdGluZ0RvbWFpbjsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgY2xhc3MgUmV2ZXJzZUFkYXB0ZXJGYWN0b3J5Q29udGVudFByb3ZpZGVyIGV4dGVuZHMgQWRhcHRlckZhY3RvcnlDb250ZW50UHJvdmlkZXIgeworCQlwdWJsaWMgUmV2ZXJzZUFkYXB0ZXJGYWN0b3J5Q29udGVudFByb3ZpZGVyKEFkYXB0ZXJGYWN0b3J5IGFkYXB0ZXJGYWN0b3J5KSB7CisJCQlzdXBlcihhZGFwdGVyRmFjdG9yeSk7CisJCX0KKworCQlwdWJsaWMgT2JqZWN0IFtdIGdldEVsZW1lbnRzKE9iamVjdCBvYmplY3QpIHsKKwkJCU9iamVjdCBwYXJlbnQgPSBzdXBlci5nZXRQYXJlbnQob2JqZWN0KTsKKwkJCXJldHVybiAocGFyZW50ID09IG51bGwgPyBDb2xsZWN0aW9ucy5FTVBUWV9TRVQgOiBDb2xsZWN0aW9ucy5zaW5nbGV0b24ocGFyZW50KSkudG9BcnJheSgpOworCQl9CisKKwkJcHVibGljIE9iamVjdCBbXSBnZXRDaGlsZHJlbihPYmplY3Qgb2JqZWN0KSB7CisJCQlPYmplY3QgcGFyZW50ID0gc3VwZXIuZ2V0UGFyZW50KG9iamVjdCk7CisJCQlyZXR1cm4gKHBhcmVudCA9PSBudWxsID8gQ29sbGVjdGlvbnMuRU1QVFlfU0VUIDogQ29sbGVjdGlvbnMuc2luZ2xldG9uKHBhcmVudCkpLnRvQXJyYXkoKTsKKwkJfQorCisJCXB1YmxpYyBib29sZWFuIGhhc0NoaWxkcmVuKE9iamVjdCBvYmplY3QpIHsKKwkJCU9iamVjdCBwYXJlbnQgPSBzdXBlci5nZXRQYXJlbnQob2JqZWN0KTsKKwkJCXJldHVybiBwYXJlbnQgIT0gbnVsbDsKKwkJfQorCisJCXB1YmxpYyBPYmplY3QgZ2V0UGFyZW50KE9iamVjdCBvYmplY3QpIHsKKwkJCXJldHVybiBudWxsOworCQl9CisJfQorCisJLyoqCisJICogVGhpcyBtYWtlcyBzdXJlIHRoYXQgb25lIGNvbnRlbnQgdmlld2VyLCBlaXRoZXIgZm9yIHRoZSBjdXJyZW50IHBhZ2Ugb3IgdGhlIG91dGxpbmUgdmlldywgaWYgaXQgaGFzIGZvY3VzLAorCSAqIGlzIHRoZSBjdXJyZW50IG9uZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRDdXJyZW50Vmlld2VyKFZpZXdlciB2aWV3ZXIpIHsKKwkJLy8gSWYgaXQgaXMgY2hhbmdpbmcuLi4KKwkJLy8KKwkJaWYgKGN1cnJlbnRWaWV3ZXIgIT0gdmlld2VyKSB7CisJCQlpZiAoc2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyID09IG51bGwpIHsKKwkJCQkvLyBDcmVhdGUgdGhlIGxpc3RlbmVyIG9uIGRlbWFuZC4KKwkJCQkvLworCQkJCXNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lciA9CisJCQkJCW5ldyBJU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyKCkgeworCQkJCQkJLy8gVGhpcyBqdXN0IG5vdGlmaWVzIHRob3NlIHRoaW5ncyB0aGF0IGFyZSBhZmZlY3RlZCBieSB0aGUgc2VjdGlvbi4KKwkJCQkJCS8vCisJCQkJCQlwdWJsaWMgdm9pZCBzZWxlY3Rpb25DaGFuZ2VkKFNlbGVjdGlvbkNoYW5nZWRFdmVudCBzZWxlY3Rpb25DaGFuZ2VkRXZlbnQpIHsKKwkJCQkJCQlzZXRTZWxlY3Rpb24oc2VsZWN0aW9uQ2hhbmdlZEV2ZW50LmdldFNlbGVjdGlvbigpKTsKKwkJCQkJCX0KKwkJCQkJfTsKKwkJCX0KKworCQkJLy8gU3RvcCBsaXN0ZW5pbmcgdG8gdGhlIG9sZCBvbmUuCisJCQkvLworCQkJaWYgKGN1cnJlbnRWaWV3ZXIgIT0gbnVsbCkgeworCQkJCWN1cnJlbnRWaWV3ZXIucmVtb3ZlU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyKHNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcik7CisJCQl9CisKKwkJCS8vIFN0YXJ0IGxpc3RlbmluZyB0byB0aGUgbmV3IG9uZS4KKwkJCS8vCisJCQlpZiAodmlld2VyICE9IG51bGwpIHsKKwkJCQl2aWV3ZXIuYWRkU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyKHNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcik7CisJCQl9CisKKwkJCS8vIFJlbWVtYmVyIGl0LgorCQkJLy8KKwkJCWN1cnJlbnRWaWV3ZXIgPSB2aWV3ZXI7CisKKwkJCS8vIFNldCB0aGUgZWRpdG9ycyBzZWxlY3Rpb24gYmFzZWQgb24gdGhlIGN1cnJlbnQgdmlld2VyJ3Mgc2VsZWN0aW9uLgorCQkJLy8KKwkJCXNldFNlbGVjdGlvbihjdXJyZW50Vmlld2VyID09IG51bGwgPyBTdHJ1Y3R1cmVkU2VsZWN0aW9uLkVNUFRZIDogY3VycmVudFZpZXdlci5nZXRTZWxlY3Rpb24oKSk7CisJCX0KKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgdGhlIHZpZXdlciBhcyByZXF1aXJlZCBieSB0aGUge0BsaW5rIElWaWV3ZXJQcm92aWRlcn0gaW50ZXJmYWNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBWaWV3ZXIgZ2V0Vmlld2VyKCkgeworCQlyZXR1cm4gY3VycmVudFZpZXdlcjsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGNyZWF0ZXMgYSBjb250ZXh0IG1lbnUgZm9yIHRoZSB2aWV3ZXIgYW5kIGFkZHMgYSBsaXN0ZW5lciBhcyB3ZWxsIHJlZ2lzdGVyaW5nIHRoZSBtZW51IGZvciBleHRlbnNpb24uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCXByb3RlY3RlZCB2b2lkIGNyZWF0ZUNvbnRleHRNZW51Rm9yKFN0cnVjdHVyZWRWaWV3ZXIgdmlld2VyKSB7CisJCU1lbnVNYW5hZ2VyIGNvbnRleHRNZW51ID0gbmV3IE1lbnVNYW5hZ2VyKCIjUG9wVXAiKTsgLy8kTk9OLU5MUy0xJAorCQljb250ZXh0TWVudS5hZGQobmV3IFNlcGFyYXRvcigiYWRkaXRpb25zIikpOyAvLyROT04tTkxTLTEkCisJCWNvbnRleHRNZW51LnNldFJlbW92ZUFsbFdoZW5TaG93bih0cnVlKTsKKwkJY29udGV4dE1lbnUuYWRkTWVudUxpc3RlbmVyKHRoaXMpOworCQlNZW51IG1lbnU9IGNvbnRleHRNZW51LmNyZWF0ZUNvbnRleHRNZW51KHZpZXdlci5nZXRDb250cm9sKCkpOworCQl2aWV3ZXIuZ2V0Q29udHJvbCgpLnNldE1lbnUobWVudSk7CisJCWdldFNpdGUoKS5yZWdpc3RlckNvbnRleHRNZW51KGNvbnRleHRNZW51LCB2aWV3ZXIpOworCisJCWludCBkbmRPcGVyYXRpb25zID0gRE5ELkRST1BfQ09QWSB8IERORC5EUk9QX01PVkUgfCBETkQuRFJPUF9MSU5LOworCQlUcmFuc2ZlcltdIHRyYW5zZmVycyA9IG5ldyBUcmFuc2ZlcltdIHsgTG9jYWxTZWxlY3Rpb25UcmFuc2Zlci5nZXRUcmFuc2ZlcigpLCBMb2NhbFRyYW5zZmVyLmdldEluc3RhbmNlKCkgfTsKKwkJdmlld2VyLmFkZERyYWdTdXBwb3J0KGRuZE9wZXJhdGlvbnMsIHRyYW5zZmVycywgbmV3IFZpZXdlckRyYWdBZGFwdGVyKHZpZXdlcikpOworCQl2aWV3ZXIuYWRkRHJvcFN1cHBvcnQoZG5kT3BlcmF0aW9ucywgdHJhbnNmZXJzLCBuZXcgRWRpdGluZ0RvbWFpblZpZXdlckRyb3BBZGFwdGVyKGVkaXRpbmdEb21haW4sIHZpZXdlcikpOworCX0gLy8gY3JlYXRlQ29udGV4dE1lbnVGb3IKKworCS8qKgorCSAqIFRoaXMgY3JlYXRlcyBhIGNvbnRleHQgbWVudSBmb3IgdGhlIHZpZXdlciBhbmQgYWRkcyBhIGxpc3RlbmVyIGFzIHdlbGwgcmVnaXN0ZXJpbmcgdGhlIG1lbnUgZm9yIGV4dGVuc2lvbi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBjcmVhdGVDb250ZXh0TWVudUZvckdlbihTdHJ1Y3R1cmVkVmlld2VyIHZpZXdlcikgeworCQlNZW51TWFuYWdlciBjb250ZXh0TWVudSA9IG5ldyBNZW51TWFuYWdlcigiI1BvcFVwIik7IC8vJE5PTi1OTFMtMSQKKwkJY29udGV4dE1lbnUuYWRkKG5ldyBTZXBhcmF0b3IoImFkZGl0aW9ucyIpKTsgLy8kTk9OLU5MUy0xJAorCQljb250ZXh0TWVudS5zZXRSZW1vdmVBbGxXaGVuU2hvd24odHJ1ZSk7CisJCWNvbnRleHRNZW51LmFkZE1lbnVMaXN0ZW5lcih0aGlzKTsKKwkJTWVudSBtZW51PSBjb250ZXh0TWVudS5jcmVhdGVDb250ZXh0TWVudSh2aWV3ZXIuZ2V0Q29udHJvbCgpKTsKKwkJdmlld2VyLmdldENvbnRyb2woKS5zZXRNZW51KG1lbnUpOworCQlnZXRTaXRlKCkucmVnaXN0ZXJDb250ZXh0TWVudShjb250ZXh0TWVudSwgbmV3IFVud3JhcHBpbmdTZWxlY3Rpb25Qcm92aWRlcih2aWV3ZXIpKTsKKworCQlpbnQgZG5kT3BlcmF0aW9ucyA9IERORC5EUk9QX0NPUFkgfCBETkQuRFJPUF9NT1ZFIHwgRE5ELkRST1BfTElOSzsKKwkJVHJhbnNmZXJbXSB0cmFuc2ZlcnMgPSBuZXcgVHJhbnNmZXJbXSB7IExvY2FsVHJhbnNmZXIuZ2V0SW5zdGFuY2UoKSB9OworCQl2aWV3ZXIuYWRkRHJhZ1N1cHBvcnQoZG5kT3BlcmF0aW9ucywgdHJhbnNmZXJzLCBuZXcgVmlld2VyRHJhZ0FkYXB0ZXIodmlld2VyKSk7CisJCXZpZXdlci5hZGREcm9wU3VwcG9ydChkbmRPcGVyYXRpb25zLCB0cmFuc2ZlcnMsIG5ldyBFZGl0aW5nRG9tYWluVmlld2VyRHJvcEFkYXB0ZXIoZWRpdGluZ0RvbWFpbiwgdmlld2VyKSk7CisJfQorCQorCS8qKgorCSAqIFRoaXMgaXMgdGhlIG1ldGhvZCBjYWxsZWQgdG8gbG9hZCBhIHJlc291cmNlIGludG8gdGhlIGVkaXRpbmcgZG9tYWluJ3MgcmVzb3VyY2Ugc2V0IGJhc2VkIG9uIHRoZSBlZGl0b3IncyBpbnB1dC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBjcmVhdGVNb2RlbCgpIHsKKwkJVVJJIHJlc291cmNlVVJJID0gRWRpdFVJVXRpbC5nZXRVUkkoZ2V0RWRpdG9ySW5wdXQoKSk7CisJCUV4Y2VwdGlvbiBleGNlcHRpb24gPSBudWxsOworCQlSZXNvdXJjZSByZXNvdXJjZSA9IG51bGw7CisJCXRyeSB7CisJCQkvLyBMb2FkIHRoZSByZXNvdXJjZSB0aHJvdWdoIHRoZSBlZGl0aW5nIGRvbWFpbi4KKwkJCS8vCisJCQlyZXNvdXJjZSA9IGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKS5nZXRSZXNvdXJjZShyZXNvdXJjZVVSSSwgdHJ1ZSk7CisJCX0KKwkJY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CisJCQlleGNlcHRpb24gPSBlOworCQkJcmVzb3VyY2UgPSBlZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkuZ2V0UmVzb3VyY2UocmVzb3VyY2VVUkksIGZhbHNlKTsKKwkJfQorCisJCURpYWdub3N0aWMgZGlhZ25vc3RpYyA9IGFuYWx5emVSZXNvdXJjZVByb2JsZW1zKHJlc291cmNlLCBleGNlcHRpb24pOworCQlpZiAoZGlhZ25vc3RpYy5nZXRTZXZlcml0eSgpICE9IERpYWdub3N0aWMuT0spIHsKKwkJCXJlc291cmNlVG9EaWFnbm9zdGljTWFwLnB1dChyZXNvdXJjZSwgIGFuYWx5emVSZXNvdXJjZVByb2JsZW1zKHJlc291cmNlLCBleGNlcHRpb24pKTsKKwkJfQorCQllZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkuZUFkYXB0ZXJzKCkuYWRkKHByb2JsZW1JbmRpY2F0aW9uQWRhcHRlcik7CisJfQorCisJLyoqCisJICogUmV0dXJucyBhIGRpYWdub3N0aWMgZGVzY3JpYmluZyB0aGUgZXJyb3JzIGFuZCB3YXJuaW5ncyBsaXN0ZWQgaW4gdGhlIHJlc291cmNlCisJICogYW5kIHRoZSBzcGVjaWZpZWQgZXhjZXB0aW9uIChpZiBhbnkpLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBEaWFnbm9zdGljIGFuYWx5emVSZXNvdXJjZVByb2JsZW1zKFJlc291cmNlIHJlc291cmNlLCBFeGNlcHRpb24gZXhjZXB0aW9uKSB7CisJCWlmICghcmVzb3VyY2UuZ2V0RXJyb3JzKCkuaXNFbXB0eSgpIHx8ICFyZXNvdXJjZS5nZXRXYXJuaW5ncygpLmlzRW1wdHkoKSkgeworCQkJQmFzaWNEaWFnbm9zdGljIGJhc2ljRGlhZ25vc3RpYyA9CisJCQkJbmV3IEJhc2ljRGlhZ25vc3RpYworCQkJCQkoRGlhZ25vc3RpYy5FUlJPUiwKKwkJCQkJICJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZWRpdG9yIiwgLy8kTk9OLU5MUy0xJAorCQkJCQkgMCwKKwkJCQkJIGdldFN0cmluZygiX1VJX0NyZWF0ZU1vZGVsRXJyb3JfbWVzc2FnZSIsIHJlc291cmNlLmdldFVSSSgpKSwgLy8kTk9OLU5MUy0xJAorCQkJCQkgbmV3IE9iamVjdCBbXSB7IGV4Y2VwdGlvbiA9PSBudWxsID8gKE9iamVjdClyZXNvdXJjZSA6IGV4Y2VwdGlvbiB9KTsKKwkJCWJhc2ljRGlhZ25vc3RpYy5tZXJnZShFY29yZVV0aWwuY29tcHV0ZURpYWdub3N0aWMocmVzb3VyY2UsIHRydWUpKTsKKwkJCXJldHVybiBiYXNpY0RpYWdub3N0aWM7CisJCX0KKwkJZWxzZSBpZiAoZXhjZXB0aW9uICE9IG51bGwpIHsKKwkJCXJldHVybgorCQkJCW5ldyBCYXNpY0RpYWdub3N0aWMKKwkJCQkJKERpYWdub3N0aWMuRVJST1IsCisJCQkJCSAib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmVkaXRvciIsIC8vJE5PTi1OTFMtMSQKKwkJCQkJIDAsCisJCQkJCSBnZXRTdHJpbmcoIl9VSV9DcmVhdGVNb2RlbEVycm9yX21lc3NhZ2UiLCByZXNvdXJjZS5nZXRVUkkoKSksIC8vJE5PTi1OTFMtMSQKKwkJCQkJIG5ldyBPYmplY3RbXSB7IGV4Y2VwdGlvbiB9KTsKKwkJfQorCQllbHNlIHsKKwkJCXJldHVybiBEaWFnbm9zdGljLk9LX0lOU1RBTkNFOworCQl9CisJfQorCisKKworCS8qKgorCSAqIFRoaXMgaXMgdGhlIG1ldGhvZCB1c2VkIGJ5IHRoZSBmcmFtZXdvcmsgdG8gaW5zdGFsbCB5b3VyIG93biBjb250cm9scy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJcHVibGljIHZvaWQgY3JlYXRlUGFnZXMoKSB7CisJCS8vIENyZWF0ZXMgdGhlIG1vZGVsIGZyb20gdGhlIGVkaXRvciBpbnB1dAorCQkvLworCQljcmVhdGVNb2RlbCgpOworCisJCS8vIE9ubHkgY3JlYXRlcyB0aGUgb3RoZXIgcGFnZXMgaWYgdGhlcmUgaXMgc29tZXRoaW5nIHRoYXQgY2FuIGJlIGVkaXRlZAorCQkvLworCQlpZiAoIWdldEVkaXRpbmdEb21haW4oKS5nZXRSZXNvdXJjZVNldCgpLmdldFJlc291cmNlcygpLmlzRW1wdHkoKSkgeworCQkJLy8gQ3JlYXRlIGEgcGFnZSBmb3IgdGhlIHNlbGVjdGlvbiB0cmVlIHZpZXcuCisJCQkvLworCQkJVHJlZSB0cmVlID0gbmV3IFRyZWUoZ2V0Q29udGFpbmVyKCksIFNXVC5NVUxUSSk7CisJCQlzZWxlY3Rpb25WaWV3ZXIgPSBuZXcgVHJlZVZpZXdlcih0cmVlKTsKKwkJCXNldEN1cnJlbnRWaWV3ZXIoc2VsZWN0aW9uVmlld2VyKTsKKworCQkJc2VsZWN0aW9uVmlld2VyLnNldENvbnRlbnRQcm92aWRlcihuZXcgQWRhcHRlckZhY3RvcnlDb250ZW50UHJvdmlkZXIoYWRhcHRlckZhY3RvcnkpKTsKKwkJCXNlbGVjdGlvblZpZXdlci5zZXRMYWJlbFByb3ZpZGVyKG5ldyBBZGFwdGVyRmFjdG9yeUxhYmVsUHJvdmlkZXIoYWRhcHRlckZhY3RvcnkpKTsKKwkJCS8vc2VsZWN0aW9uVmlld2VyLnNldElucHV0KGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKSk7CisJCQlzZWxlY3Rpb25WaWV3ZXIuc2V0SW5wdXQoZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpLmdldFJlc291cmNlcygpLmdldCgwKSk7CisJCQlzZWxlY3Rpb25WaWV3ZXIuc2V0U2VsZWN0aW9uKG5ldyBTdHJ1Y3R1cmVkU2VsZWN0aW9uKGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKS5nZXRSZXNvdXJjZXMoKS5nZXQoMCkpLCB0cnVlKTsKKworCQkJbmV3IEFkYXB0ZXJGYWN0b3J5VHJlZUVkaXRvcihzZWxlY3Rpb25WaWV3ZXIuZ2V0VHJlZSgpLCBhZGFwdGVyRmFjdG9yeSk7CisKKwkJCWNyZWF0ZUNvbnRleHRNZW51Rm9yKHNlbGVjdGlvblZpZXdlcik7CisJCQlpbnQgcGFnZUluZGV4ID0gYWRkUGFnZSh0cmVlKTsKKwkJCXNldFBhZ2VUZXh0KHBhZ2VJbmRleCwgZ2V0U3RyaW5nKCJfVUlfU2VsZWN0aW9uUGFnZV9sYWJlbCIpKTsgLy8kTk9OLU5MUy0xJAorCisJCQlnZXRTaXRlKCkuZ2V0U2hlbGwoKS5nZXREaXNwbGF5KCkuYXN5bmNFeGVjCisJCQkJKG5ldyBSdW5uYWJsZSgpIHsKKwkJCQkJIHB1YmxpYyB2b2lkIHJ1bigpIHsKKwkJCQkJCSBzZXRBY3RpdmVQYWdlKDApOworCQkJCQkgfQorCQkJCSB9KTsKKwkJfQorCisJCS8vIEVuc3VyZXMgdGhhdCB0aGlzIGVkaXRvciB3aWxsIG9ubHkgZGlzcGxheSB0aGUgcGFnZSdzIHRhYgorCQkvLyBhcmVhIGlmIHRoZXJlIGFyZSBtb3JlIHRoYW4gb25lIHBhZ2UKKwkJLy8KKwkJZ2V0Q29udGFpbmVyKCkuYWRkQ29udHJvbExpc3RlbmVyCisJCQkobmV3IENvbnRyb2xBZGFwdGVyKCkgeworCQkJCWJvb2xlYW4gZ3VhcmQgPSBmYWxzZTsKKwkJCQlAT3ZlcnJpZGUKKwkJCQlwdWJsaWMgdm9pZCBjb250cm9sUmVzaXplZChDb250cm9sRXZlbnQgZXZlbnQpIHsKKwkJCQkJaWYgKCFndWFyZCkgeworCQkJCQkJZ3VhcmQgPSB0cnVlOworCQkJCQkJaGlkZVRhYnMoKTsKKwkJCQkJCWd1YXJkID0gZmFsc2U7CisJCQkJCX0KKwkJCQl9CisJCQkgfSk7CisKKwkJZ2V0U2l0ZSgpLmdldFNoZWxsKCkuZ2V0RGlzcGxheSgpLmFzeW5jRXhlYworCQkJKG5ldyBSdW5uYWJsZSgpIHsKKwkJCQkgcHVibGljIHZvaWQgcnVuKCkgeworCQkJCQkgdXBkYXRlUHJvYmxlbUluZGljYXRpb24oKTsKKwkJCQkgfQorCQkJIH0pOworCX0gLy8gY3JlYXRlUGFnZXMKKwkKKwkvKioKKwkgKiBUaGlzIGlzIHRoZSBtZXRob2QgdXNlZCBieSB0aGUgZnJhbWV3b3JrIHRvIGluc3RhbGwgeW91ciBvd24gY29udHJvbHMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgY3JlYXRlUGFnZXNHZW4oKSB7CisJCS8vIENyZWF0ZXMgdGhlIG1vZGVsIGZyb20gdGhlIGVkaXRvciBpbnB1dAorCQkvLworCQljcmVhdGVNb2RlbCgpOworCisJCS8vIE9ubHkgY3JlYXRlcyB0aGUgb3RoZXIgcGFnZXMgaWYgdGhlcmUgaXMgc29tZXRoaW5nIHRoYXQgY2FuIGJlIGVkaXRlZAorCQkvLworCQlpZiAoIWdldEVkaXRpbmdEb21haW4oKS5nZXRSZXNvdXJjZVNldCgpLmdldFJlc291cmNlcygpLmlzRW1wdHkoKSkgeworCQkJLy8gQ3JlYXRlIGEgcGFnZSBmb3IgdGhlIHNlbGVjdGlvbiB0cmVlIHZpZXcuCisJCQkvLworCQkJVHJlZSB0cmVlID0gbmV3IFRyZWUoZ2V0Q29udGFpbmVyKCksIFNXVC5NVUxUSSk7CisJCQlzZWxlY3Rpb25WaWV3ZXIgPSBuZXcgVHJlZVZpZXdlcih0cmVlKTsKKwkJCXNldEN1cnJlbnRWaWV3ZXIoc2VsZWN0aW9uVmlld2VyKTsKKworCQkJc2VsZWN0aW9uVmlld2VyLnNldENvbnRlbnRQcm92aWRlcihuZXcgQWRhcHRlckZhY3RvcnlDb250ZW50UHJvdmlkZXIoYWRhcHRlckZhY3RvcnkpKTsKKwkJCXNlbGVjdGlvblZpZXdlci5zZXRMYWJlbFByb3ZpZGVyKG5ldyBBZGFwdGVyRmFjdG9yeUxhYmVsUHJvdmlkZXIoYWRhcHRlckZhY3RvcnkpKTsKKwkJCXNlbGVjdGlvblZpZXdlci5zZXRJbnB1dChlZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkpOworCQkJc2VsZWN0aW9uVmlld2VyLnNldFNlbGVjdGlvbihuZXcgU3RydWN0dXJlZFNlbGVjdGlvbihlZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkuZ2V0UmVzb3VyY2VzKCkuZ2V0KDApKSwgdHJ1ZSk7CisKKwkJCW5ldyBBZGFwdGVyRmFjdG9yeVRyZWVFZGl0b3Ioc2VsZWN0aW9uVmlld2VyLmdldFRyZWUoKSwgYWRhcHRlckZhY3RvcnkpOworCisJCQljcmVhdGVDb250ZXh0TWVudUZvcihzZWxlY3Rpb25WaWV3ZXIpOworCQkJaW50IHBhZ2VJbmRleCA9IGFkZFBhZ2UodHJlZSk7CisJCQlzZXRQYWdlVGV4dChwYWdlSW5kZXgsIGdldFN0cmluZygiX1VJX1NlbGVjdGlvblBhZ2VfbGFiZWwiKSk7IC8vJE5PTi1OTFMtMSQKKworCQkJZ2V0U2l0ZSgpLmdldFNoZWxsKCkuZ2V0RGlzcGxheSgpLmFzeW5jRXhlYworCQkJCShuZXcgUnVubmFibGUoKSB7CisJCQkJCSBwdWJsaWMgdm9pZCBydW4oKSB7CisJCQkJCQkgc2V0QWN0aXZlUGFnZSgwKTsKKwkJCQkJIH0KKwkJCQkgfSk7CisJCX0KKworCQkvLyBFbnN1cmVzIHRoYXQgdGhpcyBlZGl0b3Igd2lsbCBvbmx5IGRpc3BsYXkgdGhlIHBhZ2UncyB0YWIKKwkJLy8gYXJlYSBpZiB0aGVyZSBhcmUgbW9yZSB0aGFuIG9uZSBwYWdlCisJCS8vCisJCWdldENvbnRhaW5lcigpLmFkZENvbnRyb2xMaXN0ZW5lcgorCQkJKG5ldyBDb250cm9sQWRhcHRlcigpIHsKKwkJCQlib29sZWFuIGd1YXJkID0gZmFsc2U7CisJCQkJQE92ZXJyaWRlCisJCQkJcHVibGljIHZvaWQgY29udHJvbFJlc2l6ZWQoQ29udHJvbEV2ZW50IGV2ZW50KSB7CisJCQkJCWlmICghZ3VhcmQpIHsKKwkJCQkJCWd1YXJkID0gdHJ1ZTsKKwkJCQkJCWhpZGVUYWJzKCk7CisJCQkJCQlndWFyZCA9IGZhbHNlOworCQkJCQl9CisJCQkJfQorCQkJIH0pOworCisJCWdldFNpdGUoKS5nZXRTaGVsbCgpLmdldERpc3BsYXkoKS5hc3luY0V4ZWMKKwkJCShuZXcgUnVubmFibGUoKSB7CisJCQkJIHB1YmxpYyB2b2lkIHJ1bigpIHsKKwkJCQkJIHVwZGF0ZVByb2JsZW1JbmRpY2F0aW9uKCk7CisJCQkJIH0KKwkJCSB9KTsKKwl9CisJCisJLyoqCisJICogSWYgdGhlcmUgaXMganVzdCBvbmUgcGFnZSBpbiB0aGUgbXVsdGktcGFnZSBlZGl0b3IgcGFydCwKKwkgKiB0aGlzIGhpZGVzIHRoZSBzaW5nbGUgdGFiIGF0IHRoZSBib3R0b20uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgaGlkZVRhYnMoKSB7CisJCWlmIChnZXRQYWdlQ291bnQoKSA8PSAxKSB7CisJCQlzZXRQYWdlVGV4dCgwLCAiIik7IC8vJE5PTi1OTFMtMSQKKwkJCWlmIChnZXRDb250YWluZXIoKSBpbnN0YW5jZW9mIENUYWJGb2xkZXIpIHsKKwkJCQkoKENUYWJGb2xkZXIpZ2V0Q29udGFpbmVyKCkpLnNldFRhYkhlaWdodCgxKTsKKwkJCQlQb2ludCBwb2ludCA9IGdldENvbnRhaW5lcigpLmdldFNpemUoKTsKKwkJCQlnZXRDb250YWluZXIoKS5zZXRTaXplKHBvaW50LngsIHBvaW50LnkgKyA2KTsKKwkJCX0KKwkJfQorCX0KKworCS8qKgorCSAqIElmIHRoZXJlIGlzIG1vcmUgdGhhbiBvbmUgcGFnZSBpbiB0aGUgbXVsdGktcGFnZSBlZGl0b3IgcGFydCwKKwkgKiB0aGlzIHNob3dzIHRoZSB0YWJzIGF0IHRoZSBib3R0b20uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgc2hvd1RhYnMoKSB7CisJCWlmIChnZXRQYWdlQ291bnQoKSA+IDEpIHsKKwkJCXNldFBhZ2VUZXh0KDAsIGdldFN0cmluZygiX1VJX1NlbGVjdGlvblBhZ2VfbGFiZWwiKSk7IC8vJE5PTi1OTFMtMSQKKwkJCWlmIChnZXRDb250YWluZXIoKSBpbnN0YW5jZW9mIENUYWJGb2xkZXIpIHsKKwkJCQkoKENUYWJGb2xkZXIpZ2V0Q29udGFpbmVyKCkpLnNldFRhYkhlaWdodChTV1QuREVGQVVMVCk7CisJCQkJUG9pbnQgcG9pbnQgPSBnZXRDb250YWluZXIoKS5nZXRTaXplKCk7CisJCQkJZ2V0Q29udGFpbmVyKCkuc2V0U2l6ZShwb2ludC54LCBwb2ludC55IC0gNik7CisJCQl9CisJCX0KKwl9CisKKwkvKioKKwkgKiBUaGlzIGlzIHVzZWQgdG8gdHJhY2sgdGhlIGFjdGl2ZSB2aWV3ZXIuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgcGFnZUNoYW5nZShpbnQgcGFnZUluZGV4KSB7CisJCXN1cGVyLnBhZ2VDaGFuZ2UocGFnZUluZGV4KTsKKworCQlpZiAoY29udGVudE91dGxpbmVQYWdlICE9IG51bGwpIHsKKwkJCWhhbmRsZUNvbnRlbnRPdXRsaW5lU2VsZWN0aW9uKGNvbnRlbnRPdXRsaW5lUGFnZS5nZXRTZWxlY3Rpb24oKSk7CisJCX0KKwl9CisKKwkvKioKKwkgKiBUaGlzIGlzIGhvdyB0aGUgZnJhbWV3b3JrIGRldGVybWluZXMgd2hpY2ggaW50ZXJmYWNlcyB3ZSBpbXBsZW1lbnQuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQFN1cHByZXNzV2FybmluZ3MoInVuY2hlY2tlZCIpCisJCUBPdmVycmlkZQorCXB1YmxpYyBPYmplY3QgZ2V0QWRhcHRlcihDbGFzcyBrZXkpIHsKKwkJaWYgKGtleS5lcXVhbHMoSUNvbnRlbnRPdXRsaW5lUGFnZS5jbGFzcykpIHsKKwkJCXJldHVybiBzaG93T3V0bGluZVZpZXcoKSA/IGdldENvbnRlbnRPdXRsaW5lUGFnZSgpIDogbnVsbDsKKwkJfQorCQllbHNlIGlmIChrZXkuZXF1YWxzKElQcm9wZXJ0eVNoZWV0UGFnZS5jbGFzcykpIHsKKwkJCXJldHVybiBnZXRQcm9wZXJ0eVNoZWV0UGFnZSgpOworCQl9CisJCWVsc2UgaWYgKGtleS5lcXVhbHMoSUdvdG9NYXJrZXIuY2xhc3MpKSB7CisJCQlyZXR1cm4gdGhpczsKKwkJfQorCQllbHNlIHsKKwkJCXJldHVybiBzdXBlci5nZXRBZGFwdGVyKGtleSk7CisJCX0KKwl9CisKKwkvKioKKwkgKiBUaGlzIGFjY2Vzc2VzIGEgY2FjaGVkIHZlcnNpb24gb2YgdGhlIGNvbnRlbnQgb3V0bGluZXIuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIElDb250ZW50T3V0bGluZVBhZ2UgZ2V0Q29udGVudE91dGxpbmVQYWdlKCkgeworCQlpZiAoY29udGVudE91dGxpbmVQYWdlID09IG51bGwpIHsKKwkJCS8vIFRoZSBjb250ZW50IG91dGxpbmUgaXMganVzdCBhIHRyZWUuCisJCQkvLworCQkJY2xhc3MgTXlDb250ZW50T3V0bGluZVBhZ2UgZXh0ZW5kcyBDb250ZW50T3V0bGluZVBhZ2UgeworCQkJCUBPdmVycmlkZQorCQkJCXB1YmxpYyB2b2lkIGNyZWF0ZUNvbnRyb2woQ29tcG9zaXRlIHBhcmVudCkgeworCQkJCQlzdXBlci5jcmVhdGVDb250cm9sKHBhcmVudCk7CisJCQkJCWNvbnRlbnRPdXRsaW5lVmlld2VyID0gZ2V0VHJlZVZpZXdlcigpOworCQkJCQljb250ZW50T3V0bGluZVZpZXdlci5hZGRTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIodGhpcyk7CisKKwkJCQkJLy8gU2V0IHVwIHRoZSB0cmVlIHZpZXdlci4KKwkJCQkJLy8KKwkJCQkJY29udGVudE91dGxpbmVWaWV3ZXIuc2V0Q29udGVudFByb3ZpZGVyKG5ldyBBZGFwdGVyRmFjdG9yeUNvbnRlbnRQcm92aWRlcihhZGFwdGVyRmFjdG9yeSkpOworCQkJCQljb250ZW50T3V0bGluZVZpZXdlci5zZXRMYWJlbFByb3ZpZGVyKG5ldyBBZGFwdGVyRmFjdG9yeUxhYmVsUHJvdmlkZXIoYWRhcHRlckZhY3RvcnkpKTsKKwkJCQkJY29udGVudE91dGxpbmVWaWV3ZXIuc2V0SW5wdXQoZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpKTsKKworCQkJCQkvLyBNYWtlIHN1cmUgb3VyIHBvcHVwcyB3b3JrLgorCQkJCQkvLworCQkJCQljcmVhdGVDb250ZXh0TWVudUZvcihjb250ZW50T3V0bGluZVZpZXdlcik7CisKKwkJCQkJaWYgKCFlZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkuZ2V0UmVzb3VyY2VzKCkuaXNFbXB0eSgpKSB7CisJCQkJCSAgLy8gU2VsZWN0IHRoZSByb290IG9iamVjdCBpbiB0aGUgdmlldy4KKwkJCQkJICAvLworCQkJCQkgIGNvbnRlbnRPdXRsaW5lVmlld2VyLnNldFNlbGVjdGlvbihuZXcgU3RydWN0dXJlZFNlbGVjdGlvbihlZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkuZ2V0UmVzb3VyY2VzKCkuZ2V0KDApKSwgdHJ1ZSk7CisJCQkJCX0KKwkJCQl9CisKKwkJCQlAT3ZlcnJpZGUKKwkJCQlwdWJsaWMgdm9pZCBtYWtlQ29udHJpYnV0aW9ucyhJTWVudU1hbmFnZXIgbWVudU1hbmFnZXIsIElUb29sQmFyTWFuYWdlciB0b29sQmFyTWFuYWdlciwgSVN0YXR1c0xpbmVNYW5hZ2VyIHN0YXR1c0xpbmVNYW5hZ2VyKSB7CisJCQkJCXN1cGVyLm1ha2VDb250cmlidXRpb25zKG1lbnVNYW5hZ2VyLCB0b29sQmFyTWFuYWdlciwgc3RhdHVzTGluZU1hbmFnZXIpOworCQkJCQljb250ZW50T3V0bGluZVN0YXR1c0xpbmVNYW5hZ2VyID0gc3RhdHVzTGluZU1hbmFnZXI7CisJCQkJfQorCisJCQkJQE92ZXJyaWRlCisJCQkJcHVibGljIHZvaWQgc2V0QWN0aW9uQmFycyhJQWN0aW9uQmFycyBhY3Rpb25CYXJzKSB7CisJCQkJCXN1cGVyLnNldEFjdGlvbkJhcnMoYWN0aW9uQmFycyk7CisJCQkJCWdldEFjdGlvbkJhckNvbnRyaWJ1dG9yKCkuc2hhcmVHbG9iYWxBY3Rpb25zKHRoaXMsIGFjdGlvbkJhcnMpOworCQkJCX0KKwkJCX0KKworCQkJY29udGVudE91dGxpbmVQYWdlID0gbmV3IE15Q29udGVudE91dGxpbmVQYWdlKCk7CisKKwkJCS8vIExpc3RlbiB0byBzZWxlY3Rpb24gc28gdGhhdCB3ZSBjYW4gaGFuZGxlIGl0IGlzIGEgc3BlY2lhbCB3YXkuCisJCQkvLworCQkJY29udGVudE91dGxpbmVQYWdlLmFkZFNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcgorCQkJCShuZXcgSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcigpIHsKKwkJCQkJIC8vIFRoaXMgZW5zdXJlcyB0aGF0IHdlIGhhbmRsZSBzZWxlY3Rpb25zIGNvcnJlY3RseS4KKwkJCQkJIC8vCisJCQkJCSBwdWJsaWMgdm9pZCBzZWxlY3Rpb25DaGFuZ2VkKFNlbGVjdGlvbkNoYW5nZWRFdmVudCBldmVudCkgeworCQkJCQkJIGhhbmRsZUNvbnRlbnRPdXRsaW5lU2VsZWN0aW9uKGV2ZW50LmdldFNlbGVjdGlvbigpKTsKKwkJCQkJIH0KKwkJCQkgfSk7CisJCX0KKworCQlyZXR1cm4gY29udGVudE91dGxpbmVQYWdlOworCX0KKworCS8qKgorCSAqIFRoaXMgYWNjZXNzZXMgYSBjYWNoZWQgdmVyc2lvbiBvZiB0aGUgcHJvcGVydHkgc2hlZXQuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIElQcm9wZXJ0eVNoZWV0UGFnZSBnZXRQcm9wZXJ0eVNoZWV0UGFnZSgpIHsKKwkJaWYgKHByb3BlcnR5U2hlZXRQYWdlID09IG51bGwpIHsKKwkJCXByb3BlcnR5U2hlZXRQYWdlID0KKwkJCQluZXcgRXh0ZW5kZWRQcm9wZXJ0eVNoZWV0UGFnZShlZGl0aW5nRG9tYWluKSB7CisJCQkJCUBPdmVycmlkZQorCQkJCQlwdWJsaWMgdm9pZCBzZXRTZWxlY3Rpb25Ub1ZpZXdlcihMaXN0PD8+IHNlbGVjdGlvbikgeworCQkJCQkJTW9kZWxFZGl0b3IudGhpcy5zZXRTZWxlY3Rpb25Ub1ZpZXdlcihzZWxlY3Rpb24pOworCQkJCQkJTW9kZWxFZGl0b3IudGhpcy5zZXRGb2N1cygpOworCQkJCQl9CisKKwkJCQkJQE92ZXJyaWRlCisJCQkJCXB1YmxpYyB2b2lkIHNldEFjdGlvbkJhcnMoSUFjdGlvbkJhcnMgYWN0aW9uQmFycykgeworCQkJCQkJc3VwZXIuc2V0QWN0aW9uQmFycyhhY3Rpb25CYXJzKTsKKwkJCQkJCWdldEFjdGlvbkJhckNvbnRyaWJ1dG9yKCkuc2hhcmVHbG9iYWxBY3Rpb25zKHRoaXMsIGFjdGlvbkJhcnMpOworCQkJCQl9CisJCQkJfTsKKwkJCXByb3BlcnR5U2hlZXRQYWdlLnNldFByb3BlcnR5U291cmNlUHJvdmlkZXIobmV3IEFkYXB0ZXJGYWN0b3J5Q29udGVudFByb3ZpZGVyKGFkYXB0ZXJGYWN0b3J5KSk7CisJCX0KKworCQlyZXR1cm4gcHJvcGVydHlTaGVldFBhZ2U7CisJfQorCisJLyoqCisJICogVGhpcyBkZWFscyB3aXRoIGhvdyB3ZSB3YW50IHNlbGVjdGlvbiBpbiB0aGUgb3V0bGluZXIgdG8gYWZmZWN0IHRoZSBvdGhlciB2aWV3cy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBoYW5kbGVDb250ZW50T3V0bGluZVNlbGVjdGlvbihJU2VsZWN0aW9uIHNlbGVjdGlvbikgeworCQlpZiAoc2VsZWN0aW9uVmlld2VyICE9IG51bGwgJiYgIXNlbGVjdGlvbi5pc0VtcHR5KCkgJiYgc2VsZWN0aW9uIGluc3RhbmNlb2YgSVN0cnVjdHVyZWRTZWxlY3Rpb24pIHsKKwkJCUl0ZXJhdG9yPD8+IHNlbGVjdGVkRWxlbWVudHMgPSAoKElTdHJ1Y3R1cmVkU2VsZWN0aW9uKXNlbGVjdGlvbikuaXRlcmF0b3IoKTsKKwkJCWlmIChzZWxlY3RlZEVsZW1lbnRzLmhhc05leHQoKSkgeworCQkJCS8vIEdldCB0aGUgZmlyc3Qgc2VsZWN0ZWQgZWxlbWVudC4KKwkJCQkvLworCQkJCU9iamVjdCBzZWxlY3RlZEVsZW1lbnQgPSBzZWxlY3RlZEVsZW1lbnRzLm5leHQoKTsKKworCQkJCUFycmF5TGlzdDxPYmplY3Q+IHNlbGVjdGlvbkxpc3QgPSBuZXcgQXJyYXlMaXN0PE9iamVjdD4oKTsKKwkJCQlzZWxlY3Rpb25MaXN0LmFkZChzZWxlY3RlZEVsZW1lbnQpOworCQkJCXdoaWxlIChzZWxlY3RlZEVsZW1lbnRzLmhhc05leHQoKSkgeworCQkJCQlzZWxlY3Rpb25MaXN0LmFkZChzZWxlY3RlZEVsZW1lbnRzLm5leHQoKSk7CisJCQkJfQorCisJCQkJLy8gU2V0IHRoZSBzZWxlY3Rpb24gdG8gdGhlIHdpZGdldC4KKwkJCQkvLworCQkJCXNlbGVjdGlvblZpZXdlci5zZXRTZWxlY3Rpb24obmV3IFN0cnVjdHVyZWRTZWxlY3Rpb24oc2VsZWN0aW9uTGlzdCkpOworCQkJfQorCQl9CisJfQorCisJLyoqCisJICogVGhpcyBpcyBmb3IgaW1wbGVtZW50aW5nIHtAbGluayBJRWRpdG9yUGFydH0gYW5kIHNpbXBseSB0ZXN0cyB0aGUgY29tbWFuZCBzdGFjay4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgYm9vbGVhbiBpc0RpcnR5KCkgeworCQlyZXR1cm4gKChCYXNpY0NvbW1hbmRTdGFjayllZGl0aW5nRG9tYWluLmdldENvbW1hbmRTdGFjaygpKS5pc1NhdmVOZWVkZWQoKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGlzIGZvciBpbXBsZW1lbnRpbmcge0BsaW5rIElFZGl0b3JQYXJ0fSBhbmQgc2ltcGx5IHNhdmVzIHRoZSBtb2RlbCBmaWxlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGRvU2F2ZShJUHJvZ3Jlc3NNb25pdG9yIHByb2dyZXNzTW9uaXRvcikgeworCQkvLyBTYXZlIG9ubHkgcmVzb3VyY2VzIHRoYXQgaGF2ZSBhY3R1YWxseSBjaGFuZ2VkLgorCQkvLworCQlmaW5hbCBNYXA8T2JqZWN0LCBPYmplY3Q+IHNhdmVPcHRpb25zID0gbmV3IEhhc2hNYXA8T2JqZWN0LCBPYmplY3Q+KCk7CisJCXNhdmVPcHRpb25zLnB1dChSZXNvdXJjZS5PUFRJT05fU0FWRV9PTkxZX0lGX0NIQU5HRUQsIFJlc291cmNlLk9QVElPTl9TQVZFX09OTFlfSUZfQ0hBTkdFRF9NRU1PUllfQlVGRkVSKTsKKworCQkvLyBEbyB0aGUgd29yayB3aXRoaW4gYW4gb3BlcmF0aW9uIGJlY2F1c2UgdGhpcyBpcyBhIGxvbmcgcnVubmluZyBhY3Rpdml0eSB0aGF0IG1vZGlmaWVzIHRoZSB3b3JrYmVuY2guCisJCS8vCisJCVdvcmtzcGFjZU1vZGlmeU9wZXJhdGlvbiBvcGVyYXRpb24gPQorCQkJbmV3IFdvcmtzcGFjZU1vZGlmeU9wZXJhdGlvbigpIHsKKwkJCQkvLyBUaGlzIGlzIHRoZSBtZXRob2QgdGhhdCBnZXRzIGludm9rZWQgd2hlbiB0aGUgb3BlcmF0aW9uIHJ1bnMuCisJCQkJLy8KKwkJCQlAT3ZlcnJpZGUKKwkJCQlwdWJsaWMgdm9pZCBleGVjdXRlKElQcm9ncmVzc01vbml0b3IgbW9uaXRvcikgeworCQkJCQkvLyBTYXZlIHRoZSByZXNvdXJjZXMgdG8gdGhlIGZpbGUgc3lzdGVtLgorCQkJCQkvLworCQkJCQlib29sZWFuIGZpcnN0ID0gdHJ1ZTsKKwkJCQkJZm9yIChSZXNvdXJjZSByZXNvdXJjZSA6IGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKS5nZXRSZXNvdXJjZXMoKSkgeworCQkJCQkJaWYgKChmaXJzdCB8fCAhcmVzb3VyY2UuZ2V0Q29udGVudHMoKS5pc0VtcHR5KCkgfHwgaXNQZXJzaXN0ZWQocmVzb3VyY2UpKSAmJiAhZWRpdGluZ0RvbWFpbi5pc1JlYWRPbmx5KHJlc291cmNlKSkgeworCQkJCQkJCXRyeSB7CisJCQkJCQkJCWxvbmcgdGltZVN0YW1wID0gcmVzb3VyY2UuZ2V0VGltZVN0YW1wKCk7CisJCQkJCQkJCXJlc291cmNlLnNhdmUoc2F2ZU9wdGlvbnMpOworCQkJCQkJCQlpZiAocmVzb3VyY2UuZ2V0VGltZVN0YW1wKCkgIT0gdGltZVN0YW1wKSB7CisJCQkJCQkJCQlzYXZlZFJlc291cmNlcy5hZGQocmVzb3VyY2UpOworCQkJCQkJCQl9CisJCQkJCQkJfQorCQkJCQkJCWNhdGNoIChFeGNlcHRpb24gZXhjZXB0aW9uKSB7CisJCQkJCQkJCXJlc291cmNlVG9EaWFnbm9zdGljTWFwLnB1dChyZXNvdXJjZSwgYW5hbHl6ZVJlc291cmNlUHJvYmxlbXMocmVzb3VyY2UsIGV4Y2VwdGlvbikpOworCQkJCQkJCX0KKwkJCQkJCQlmaXJzdCA9IGZhbHNlOworCQkJCQkJfQorCQkJCQl9CisJCQkJfQorCQkJfTsKKworCQl1cGRhdGVQcm9ibGVtSW5kaWNhdGlvbiA9IGZhbHNlOworCQl0cnkgeworCQkJLy8gVGhpcyBydW5zIHRoZSBvcHRpb25zLCBhbmQgc2hvd3MgcHJvZ3Jlc3MuCisJCQkvLworCQkJbmV3IFByb2dyZXNzTW9uaXRvckRpYWxvZyhnZXRTaXRlKCkuZ2V0U2hlbGwoKSkucnVuKHRydWUsIGZhbHNlLCBvcGVyYXRpb24pOworCisJCQkvLyBSZWZyZXNoIHRoZSBuZWNlc3Nhcnkgc3RhdGUuCisJCQkvLworCQkJKChCYXNpY0NvbW1hbmRTdGFjayllZGl0aW5nRG9tYWluLmdldENvbW1hbmRTdGFjaygpKS5zYXZlSXNEb25lKCk7CisJCQlmaXJlUHJvcGVydHlDaGFuZ2UoSUVkaXRvclBhcnQuUFJPUF9ESVJUWSk7CisJCX0KKwkJY2F0Y2ggKEV4Y2VwdGlvbiBleGNlcHRpb24pIHsKKwkJCS8vIFNvbWV0aGluZyB3ZW50IHdyb25nIHRoYXQgc2hvdWxkbid0LgorCQkJLy8KKwkJCUNvcmVFZGl0b3JQbHVnaW4uSU5TVEFOQ0UubG9nKGV4Y2VwdGlvbik7CisJCX0KKwkJdXBkYXRlUHJvYmxlbUluZGljYXRpb24gPSB0cnVlOworCQl1cGRhdGVQcm9ibGVtSW5kaWNhdGlvbigpOworCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyB3aGV0aGVyIHNvbWV0aGluZyBoYXMgYmVlbiBwZXJzaXN0ZWQgdG8gdGhlIFVSSSBvZiB0aGUgc3BlY2lmaWVkIHJlc291cmNlLgorCSAqIFRoZSBpbXBsZW1lbnRhdGlvbiB1c2VzIHRoZSBVUkkgY29udmVydGVyIGZyb20gdGhlIGVkaXRvcidzIHJlc291cmNlIHNldCB0byB0cnkgdG8gb3BlbiBhbiBpbnB1dCBzdHJlYW0uIAorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBib29sZWFuIGlzUGVyc2lzdGVkKFJlc291cmNlIHJlc291cmNlKSB7CisJCWJvb2xlYW4gcmVzdWx0ID0gZmFsc2U7CisJCXRyeSB7CisJCQlJbnB1dFN0cmVhbSBzdHJlYW0gPSBlZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkuZ2V0VVJJQ29udmVydGVyKCkuY3JlYXRlSW5wdXRTdHJlYW0ocmVzb3VyY2UuZ2V0VVJJKCkpOworCQkJaWYgKHN0cmVhbSAhPSBudWxsKSB7CisJCQkJcmVzdWx0ID0gdHJ1ZTsKKwkJCQlzdHJlYW0uY2xvc2UoKTsKKwkJCX0KKwkJfQorCQljYXRjaCAoSU9FeGNlcHRpb24gZSkgeworCQkJLy8gSWdub3JlCisJCX0KKwkJcmV0dXJuIHJlc3VsdDsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFsd2F5cyByZXR1cm5zIHRydWUgYmVjYXVzZSBpdCBpcyBub3QgY3VycmVudGx5IHN1cHBvcnRlZC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgYm9vbGVhbiBpc1NhdmVBc0FsbG93ZWQoKSB7CisJCXJldHVybiB0cnVlOworCX0KKworCS8qKgorCSAqIFRoaXMgYWxzbyBjaGFuZ2VzIHRoZSBlZGl0b3IncyBpbnB1dC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBkb1NhdmVBcygpIHsKKwkJU2F2ZUFzRGlhbG9nIHNhdmVBc0RpYWxvZyA9IG5ldyBTYXZlQXNEaWFsb2coZ2V0U2l0ZSgpLmdldFNoZWxsKCkpOworCQlzYXZlQXNEaWFsb2cub3BlbigpOworCQlJUGF0aCBwYXRoID0gc2F2ZUFzRGlhbG9nLmdldFJlc3VsdCgpOworCQlpZiAocGF0aCAhPSBudWxsKSB7CisJCQlJRmlsZSBmaWxlID0gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmdldFJvb3QoKS5nZXRGaWxlKHBhdGgpOworCQkJaWYgKGZpbGUgIT0gbnVsbCkgeworCQkJCWRvU2F2ZUFzKFVSSS5jcmVhdGVQbGF0Zm9ybVJlc291cmNlVVJJKGZpbGUuZ2V0RnVsbFBhdGgoKS50b1N0cmluZygpLCB0cnVlKSwgbmV3IEZpbGVFZGl0b3JJbnB1dChmaWxlKSk7CisJCQl9CisJCX0KKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBkb1NhdmVBcyhVUkkgdXJpLCBJRWRpdG9ySW5wdXQgZWRpdG9ySW5wdXQpIHsKKwkJKGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKS5nZXRSZXNvdXJjZXMoKS5nZXQoMCkpLnNldFVSSSh1cmkpOworCQlzZXRJbnB1dFdpdGhOb3RpZnkoZWRpdG9ySW5wdXQpOworCQlzZXRQYXJ0TmFtZShlZGl0b3JJbnB1dC5nZXROYW1lKCkpOworCQlJUHJvZ3Jlc3NNb25pdG9yIHByb2dyZXNzTW9uaXRvciA9CisJCQlnZXRBY3Rpb25CYXJzKCkuZ2V0U3RhdHVzTGluZU1hbmFnZXIoKSAhPSBudWxsID8KKwkJCQlnZXRBY3Rpb25CYXJzKCkuZ2V0U3RhdHVzTGluZU1hbmFnZXIoKS5nZXRQcm9ncmVzc01vbml0b3IoKSA6CisJCQkJbmV3IE51bGxQcm9ncmVzc01vbml0b3IoKTsKKwkJZG9TYXZlKHByb2dyZXNzTW9uaXRvcik7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgZ290b01hcmtlcihJTWFya2VyIG1hcmtlcikgeworCQl0cnkgeworCQkJaWYgKG1hcmtlci5nZXRUeXBlKCkuZXF1YWxzKEVWYWxpZGF0b3IuTUFSS0VSKSkgeworCQkJCVN0cmluZyB1cmlBdHRyaWJ1dGUgPSBtYXJrZXIuZ2V0QXR0cmlidXRlKEVWYWxpZGF0b3IuVVJJX0FUVFJJQlVURSwgbnVsbCk7CisJCQkJaWYgKHVyaUF0dHJpYnV0ZSAhPSBudWxsKSB7CisJCQkJCVVSSSB1cmkgPSBVUkkuY3JlYXRlVVJJKHVyaUF0dHJpYnV0ZSk7CisJCQkJCUVPYmplY3QgZU9iamVjdCA9IGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKS5nZXRFT2JqZWN0KHVyaSwgdHJ1ZSk7CisJCQkJCWlmIChlT2JqZWN0ICE9IG51bGwpIHsKKwkJCQkJICBzZXRTZWxlY3Rpb25Ub1ZpZXdlcihDb2xsZWN0aW9ucy5zaW5nbGV0b24oZWRpdGluZ0RvbWFpbi5nZXRXcmFwcGVyKGVPYmplY3QpKSk7CisJCQkJCX0KKwkJCQl9CisJCQl9CisJCX0KKwkJY2F0Y2ggKENvcmVFeGNlcHRpb24gZXhjZXB0aW9uKSB7CisJCQlDb3JlRWRpdG9yUGx1Z2luLklOU1RBTkNFLmxvZyhleGNlcHRpb24pOworCQl9CisJfQorCisJLyoqCisJICogVGhpcyBpcyBjYWxsZWQgZHVyaW5nIHN0YXJ0dXAuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgaW5pdChJRWRpdG9yU2l0ZSBzaXRlLCBJRWRpdG9ySW5wdXQgZWRpdG9ySW5wdXQpIHsKKwkJc2V0U2l0ZShzaXRlKTsKKwkJc2V0SW5wdXRXaXRoTm90aWZ5KGVkaXRvcklucHV0KTsKKwkJc2V0UGFydE5hbWUoZWRpdG9ySW5wdXQuZ2V0TmFtZSgpKTsKKwkJc2l0ZS5zZXRTZWxlY3Rpb25Qcm92aWRlcih0aGlzKTsKKwkJc2l0ZS5nZXRQYWdlKCkuYWRkUGFydExpc3RlbmVyKHBhcnRMaXN0ZW5lcik7CisJCVJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5hZGRSZXNvdXJjZUNoYW5nZUxpc3RlbmVyKHJlc291cmNlQ2hhbmdlTGlzdGVuZXIsIElSZXNvdXJjZUNoYW5nZUV2ZW50LlBPU1RfQ0hBTkdFKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBzZXRGb2N1cygpIHsKKwkJZ2V0Q29udHJvbChnZXRBY3RpdmVQYWdlKCkpLnNldEZvY3VzKCk7CisJfQorCisJLyoqCisJICogVGhpcyBpbXBsZW1lbnRzIHtAbGluayBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb25Qcm92aWRlcn0uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgYWRkU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyKElTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIgbGlzdGVuZXIpIHsKKwkJc2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVycy5hZGQobGlzdGVuZXIpOworCX0KKworCS8qKgorCSAqIFRoaXMgaW1wbGVtZW50cyB7QGxpbmsgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uUHJvdmlkZXJ9LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIHJlbW92ZVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcihJU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyIGxpc3RlbmVyKSB7CisJCXNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcnMucmVtb3ZlKGxpc3RlbmVyKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGltcGxlbWVudHMge0BsaW5rIG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvblByb3ZpZGVyfSB0byByZXR1cm4gdGhpcyBlZGl0b3IncyBvdmVyYWxsIHNlbGVjdGlvbi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgSVNlbGVjdGlvbiBnZXRTZWxlY3Rpb24oKSB7CisJCXJldHVybiBlZGl0b3JTZWxlY3Rpb247CisJfQorCisJLyoqCisJICogVGhpcyBpbXBsZW1lbnRzIHtAbGluayBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb25Qcm92aWRlcn0gdG8gc2V0IHRoaXMgZWRpdG9yJ3Mgb3ZlcmFsbCBzZWxlY3Rpb24uCisJICogQ2FsbGluZyB0aGlzIHJlc3VsdCB3aWxsIG5vdGlmeSB0aGUgbGlzdGVuZXJzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIHNldFNlbGVjdGlvbihJU2VsZWN0aW9uIHNlbGVjdGlvbikgeworCQllZGl0b3JTZWxlY3Rpb24gPSBzZWxlY3Rpb247CisKKwkJZm9yIChJU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyIGxpc3RlbmVyIDogc2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVycykgeworCQkJbGlzdGVuZXIuc2VsZWN0aW9uQ2hhbmdlZChuZXcgU2VsZWN0aW9uQ2hhbmdlZEV2ZW50KHRoaXMsIHNlbGVjdGlvbikpOworCQl9CisJCXNldFN0YXR1c0xpbmVNYW5hZ2VyKHNlbGVjdGlvbik7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgc2V0U3RhdHVzTGluZU1hbmFnZXIoSVNlbGVjdGlvbiBzZWxlY3Rpb24pIHsKKwkJSVN0YXR1c0xpbmVNYW5hZ2VyIHN0YXR1c0xpbmVNYW5hZ2VyID0gY3VycmVudFZpZXdlciAhPSBudWxsICYmIGN1cnJlbnRWaWV3ZXIgPT0gY29udGVudE91dGxpbmVWaWV3ZXIgPworCQkJY29udGVudE91dGxpbmVTdGF0dXNMaW5lTWFuYWdlciA6IGdldEFjdGlvbkJhcnMoKS5nZXRTdGF0dXNMaW5lTWFuYWdlcigpOworCisJCWlmIChzdGF0dXNMaW5lTWFuYWdlciAhPSBudWxsKSB7CisJCQlpZiAoc2VsZWN0aW9uIGluc3RhbmNlb2YgSVN0cnVjdHVyZWRTZWxlY3Rpb24pIHsKKwkJCQlDb2xsZWN0aW9uPD8+IGNvbGxlY3Rpb24gPSAoKElTdHJ1Y3R1cmVkU2VsZWN0aW9uKXNlbGVjdGlvbikudG9MaXN0KCk7CisJCQkJc3dpdGNoIChjb2xsZWN0aW9uLnNpemUoKSkgeworCQkJCQljYXNlIDA6IHsKKwkJCQkJCXN0YXR1c0xpbmVNYW5hZ2VyLnNldE1lc3NhZ2UoZ2V0U3RyaW5nKCJfVUlfTm9PYmplY3RTZWxlY3RlZCIpKTsgLy8kTk9OLU5MUy0xJAorCQkJCQkJYnJlYWs7CisJCQkJCX0KKwkJCQkJY2FzZSAxOiB7CisJCQkJCQlTdHJpbmcgdGV4dCA9IG5ldyBBZGFwdGVyRmFjdG9yeUl0ZW1EZWxlZ2F0b3IoYWRhcHRlckZhY3RvcnkpLmdldFRleHQoY29sbGVjdGlvbi5pdGVyYXRvcigpLm5leHQoKSk7CisJCQkJCQlzdGF0dXNMaW5lTWFuYWdlci5zZXRNZXNzYWdlKGdldFN0cmluZygiX1VJX1NpbmdsZU9iamVjdFNlbGVjdGVkIiwgdGV4dCkpOyAvLyROT04tTkxTLTEkCisJCQkJCQlicmVhazsKKwkJCQkJfQorCQkJCQlkZWZhdWx0OiB7CisJCQkJCQlzdGF0dXNMaW5lTWFuYWdlci5zZXRNZXNzYWdlKGdldFN0cmluZygiX1VJX011bHRpT2JqZWN0U2VsZWN0ZWQiLCBJbnRlZ2VyLnRvU3RyaW5nKGNvbGxlY3Rpb24uc2l6ZSgpKSkpOyAvLyROT04tTkxTLTEkCisJCQkJCQlicmVhazsKKwkJCQkJfQorCQkJCX0KKwkJCX0KKwkJCWVsc2UgeworCQkJCXN0YXR1c0xpbmVNYW5hZ2VyLnNldE1lc3NhZ2UoIiIpOyAvLyROT04tTkxTLTEkCisJCQl9CisJCX0KKwl9CisKKwkvKioKKwkgKiBUaGlzIGxvb2tzIHVwIGEgc3RyaW5nIGluIHRoZSBwbHVnaW4ncyBwbHVnaW4ucHJvcGVydGllcyBmaWxlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByaXZhdGUgc3RhdGljIFN0cmluZyBnZXRTdHJpbmcoU3RyaW5nIGtleSkgeworCQlyZXR1cm4gQ29yZUVkaXRvclBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoa2V5KTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGxvb2tzIHVwIGEgc3RyaW5nIGluIHBsdWdpbi5wcm9wZXJ0aWVzLCBtYWtpbmcgYSBzdWJzdGl0dXRpb24uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIGdldFN0cmluZyhTdHJpbmcga2V5LCBPYmplY3QgczEpIHsKKwkJcmV0dXJuIENvcmVFZGl0b3JQbHVnaW4uSU5TVEFOQ0UuZ2V0U3RyaW5nKGtleSwgbmV3IE9iamVjdCBbXSB7IHMxIH0pOworCX0KKworCS8qKgorCSAqIFRoaXMgaW1wbGVtZW50cyB7QGxpbmsgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklNZW51TGlzdGVuZXJ9IHRvIGhlbHAgZmlsbCB0aGUgY29udGV4dCBtZW51cyB3aXRoIGNvbnRyaWJ1dGlvbnMgZnJvbSB0aGUgRWRpdCBtZW51LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIG1lbnVBYm91dFRvU2hvdyhJTWVudU1hbmFnZXIgbWVudU1hbmFnZXIpIHsKKwkJKChJTWVudUxpc3RlbmVyKWdldEVkaXRvclNpdGUoKS5nZXRBY3Rpb25CYXJDb250cmlidXRvcigpKS5tZW51QWJvdXRUb1Nob3cobWVudU1hbmFnZXIpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFZGl0aW5nRG9tYWluQWN0aW9uQmFyQ29udHJpYnV0b3IgZ2V0QWN0aW9uQmFyQ29udHJpYnV0b3IoKSB7CisJCXJldHVybiAoRWRpdGluZ0RvbWFpbkFjdGlvbkJhckNvbnRyaWJ1dG9yKWdldEVkaXRvclNpdGUoKS5nZXRBY3Rpb25CYXJDb250cmlidXRvcigpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBJQWN0aW9uQmFycyBnZXRBY3Rpb25CYXJzKCkgeworCQlyZXR1cm4gZ2V0QWN0aW9uQmFyQ29udHJpYnV0b3IoKS5nZXRBY3Rpb25CYXJzKCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEFkYXB0ZXJGYWN0b3J5IGdldEFkYXB0ZXJGYWN0b3J5KCkgeworCQlyZXR1cm4gYWRhcHRlckZhY3Rvcnk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgZGlzcG9zZSgpIHsKKwkJdXBkYXRlUHJvYmxlbUluZGljYXRpb24gPSBmYWxzZTsKKworCQlSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkucmVtb3ZlUmVzb3VyY2VDaGFuZ2VMaXN0ZW5lcihyZXNvdXJjZUNoYW5nZUxpc3RlbmVyKTsKKworCQlnZXRTaXRlKCkuZ2V0UGFnZSgpLnJlbW92ZVBhcnRMaXN0ZW5lcihwYXJ0TGlzdGVuZXIpOworCisJCWFkYXB0ZXJGYWN0b3J5LmRpc3Bvc2UoKTsKKworCQlpZiAoZ2V0QWN0aW9uQmFyQ29udHJpYnV0b3IoKS5nZXRBY3RpdmVFZGl0b3IoKSA9PSB0aGlzKSB7CisJCQlnZXRBY3Rpb25CYXJDb250cmlidXRvcigpLnNldEFjdGl2ZUVkaXRvcihudWxsKTsKKwkJfQorCisJCWlmIChwcm9wZXJ0eVNoZWV0UGFnZSAhPSBudWxsKSB7CisJCQlwcm9wZXJ0eVNoZWV0UGFnZS5kaXNwb3NlKCk7CisJCX0KKworCQlpZiAoY29udGVudE91dGxpbmVQYWdlICE9IG51bGwpIHsKKwkJCWNvbnRlbnRPdXRsaW5lUGFnZS5kaXNwb3NlKCk7CisJCX0KKworCQlzdXBlci5kaXNwb3NlKCk7CisJfQorCisJLyoqCisJICogUmV0dXJucyB3aGV0aGVyIHRoZSBvdXRsaW5lIHZpZXcgc2hvdWxkIGJlIHByZXNlbnRlZCB0byB0aGUgdXNlci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgYm9vbGVhbiBzaG93T3V0bGluZVZpZXcoKSB7CisJCXJldHVybiBmYWxzZTsKKwl9Cit9CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9tb2RpZmllci9wcmVzZW50YXRpb24vTW9kaWZpZXJBY3Rpb25CYXJDb250cmlidXRvci5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvbW9kaWZpZXIvcHJlc2VudGF0aW9uL01vZGlmaWVyQWN0aW9uQmFyQ29udHJpYnV0b3IuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NDgwYWYwCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvbW9kaWZpZXIvcHJlc2VudGF0aW9uL01vZGlmaWVyQWN0aW9uQmFyQ29udHJpYnV0b3IuamF2YQpAQCAtMCwwICsxLDQzMSBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIucHJlc2VudGF0aW9uOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7CitpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnVpLnZpZXdlci5JVmlld2VyUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQuZG9tYWluLkVkaXRpbmdEb21haW47CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQuZG9tYWluLklFZGl0aW5nRG9tYWluUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkuYWN0aW9uLkNvbnRyb2xBY3Rpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkuYWN0aW9uLkNyZWF0ZUNoaWxkQWN0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmFjdGlvbi5DcmVhdGVTaWJsaW5nQWN0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmFjdGlvbi5FZGl0aW5nRG9tYWluQWN0aW9uQmFyQ29udHJpYnV0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkuYWN0aW9uLkxvYWRSZXNvdXJjZUFjdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5hY3Rpb24uVmFsaWRhdGVBY3Rpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLkFjdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uQWN0aW9uQ29udHJpYnV0aW9uSXRlbTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSUFjdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSUNvbnRyaWJ1dGlvbkl0ZW07CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklDb250cmlidXRpb25NYW5hZ2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JTWVudUxpc3RlbmVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JTWVudU1hbmFnZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklUb29sQmFyTWFuYWdlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uTWVudU1hbmFnZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLlNlcGFyYXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uU3ViQ29udHJpYnV0aW9uSXRlbTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvblByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVN0cnVjdHVyZWRTZWxlY3Rpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5TZWxlY3Rpb25DaGFuZ2VkRXZlbnQ7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5WaWV3ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5wcmVzZW50YXRpb24uQ29yZUVkaXRvclBsdWdpbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5JRWRpdG9yUGFydDsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5QYXJ0SW5pdEV4Y2VwdGlvbjsKKworLyoqCisgKiBUaGlzIGlzIHRoZSBhY3Rpb24gYmFyIGNvbnRyaWJ1dG9yIGZvciB0aGUgTW9kaWZpZXIgbW9kZWwgZWRpdG9yLgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQGdlbmVyYXRlZAorICovCitAU3VwcHJlc3NXYXJuaW5ncygiYWxsIikKK3B1YmxpYyBjbGFzcyBNb2RpZmllckFjdGlvbkJhckNvbnRyaWJ1dG9yCisJZXh0ZW5kcyBFZGl0aW5nRG9tYWluQWN0aW9uQmFyQ29udHJpYnV0b3IKKwlpbXBsZW1lbnRzIElTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIgeworCS8qKgorCSAqIFRoaXMga2VlcHMgdHJhY2sgb2YgdGhlIGFjdGl2ZSBlZGl0b3IuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIElFZGl0b3JQYXJ0IGFjdGl2ZUVkaXRvclBhcnQ7CisKKwkvKioKKwkgKiBUaGlzIGtlZXBzIHRyYWNrIG9mIHRoZSBjdXJyZW50IHNlbGVjdGlvbiBwcm92aWRlci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgSVNlbGVjdGlvblByb3ZpZGVyIHNlbGVjdGlvblByb3ZpZGVyOworCisJLyoqCisJICogVGhpcyBhY3Rpb24gb3BlbnMgdGhlIFByb3BlcnRpZXMgdmlldy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgSUFjdGlvbiBzaG93UHJvcGVydGllc1ZpZXdBY3Rpb24gPQorCQluZXcgQWN0aW9uKENvcmVFZGl0b3JQbHVnaW4uSU5TVEFOQ0UuZ2V0U3RyaW5nKCJfVUlfU2hvd1Byb3BlcnRpZXNWaWV3X21lbnVfaXRlbSIpKSAvLyROT04tTkxTLTEkCisJCXsKKwkJCUBPdmVycmlkZQorCQkJcHVibGljIHZvaWQgcnVuKCkgeworCQkJCXRyeSB7CisJCQkJCWdldFBhZ2UoKS5zaG93Vmlldygib3JnLmVjbGlwc2UudWkudmlld3MuUHJvcGVydHlTaGVldCIpOyAvLyROT04tTkxTLTEkCisJCQkJfQorCQkJCWNhdGNoIChQYXJ0SW5pdEV4Y2VwdGlvbiBleGNlcHRpb24pIHsKKwkJCQkJQ29yZUVkaXRvclBsdWdpbi5JTlNUQU5DRS5sb2coZXhjZXB0aW9uKTsKKwkJCQl9CisJCQl9CisJCX07CisKKwkvKioKKwkgKiBUaGlzIGFjdGlvbiByZWZyZXNoZXMgdGhlIHZpZXdlciBvZiB0aGUgY3VycmVudCBlZGl0b3IgaWYgdGhlIGVkaXRvcgorCSAqIGltcGxlbWVudHMge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5jb21tb24udWkudmlld2VyLklWaWV3ZXJQcm92aWRlcn0uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIElBY3Rpb24gcmVmcmVzaFZpZXdlckFjdGlvbiA9CisJCW5ldyBBY3Rpb24oQ29yZUVkaXRvclBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoIl9VSV9SZWZyZXNoVmlld2VyX21lbnVfaXRlbSIpKSAvLyROT04tTkxTLTEkCisJCXsKKwkJCUBPdmVycmlkZQorCQkJcHVibGljIGJvb2xlYW4gaXNFbmFibGVkKCkgeworCQkJCXJldHVybiBhY3RpdmVFZGl0b3JQYXJ0IGluc3RhbmNlb2YgSVZpZXdlclByb3ZpZGVyOworCQkJfQorCisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyB2b2lkIHJ1bigpIHsKKwkJCQlpZiAoYWN0aXZlRWRpdG9yUGFydCBpbnN0YW5jZW9mIElWaWV3ZXJQcm92aWRlcikgeworCQkJCQlWaWV3ZXIgdmlld2VyID0gKChJVmlld2VyUHJvdmlkZXIpYWN0aXZlRWRpdG9yUGFydCkuZ2V0Vmlld2VyKCk7CisJCQkJCWlmICh2aWV3ZXIgIT0gbnVsbCkgeworCQkJCQkJdmlld2VyLnJlZnJlc2goKTsKKwkJCQkJfQorCQkJCX0KKwkJCX0KKwkJfTsKKworCS8qKgorCSAqIFRoaXMgd2lsbCBjb250YWluIG9uZSB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkuYWN0aW9uLkNyZWF0ZUNoaWxkQWN0aW9ufSBjb3JyZXNwb25kaW5nIHRvIGVhY2ggZGVzY3JpcHRvcgorCSAqIGdlbmVyYXRlZCBmb3IgdGhlIGN1cnJlbnQgc2VsZWN0aW9uIGJ5IHRoZSBpdGVtIHByb3ZpZGVyLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBDb2xsZWN0aW9uPElBY3Rpb24+IGNyZWF0ZUNoaWxkQWN0aW9uczsKKworCS8qKgorCSAqIFRoaXMgaXMgdGhlIG1lbnUgbWFuYWdlciBpbnRvIHdoaWNoIG1lbnUgY29udHJpYnV0aW9uIGl0ZW1zIHNob3VsZCBiZSBhZGRlZCBmb3IgQ3JlYXRlQ2hpbGQgYWN0aW9ucy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgSU1lbnVNYW5hZ2VyIGNyZWF0ZUNoaWxkTWVudU1hbmFnZXI7CisKKwkvKioKKwkgKiBUaGlzIHdpbGwgY29udGFpbiBvbmUge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmFjdGlvbi5DcmVhdGVTaWJsaW5nQWN0aW9ufSBjb3JyZXNwb25kaW5nIHRvIGVhY2ggZGVzY3JpcHRvcgorCSAqIGdlbmVyYXRlZCBmb3IgdGhlIGN1cnJlbnQgc2VsZWN0aW9uIGJ5IHRoZSBpdGVtIHByb3ZpZGVyLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBDb2xsZWN0aW9uPElBY3Rpb24+IGNyZWF0ZVNpYmxpbmdBY3Rpb25zOworCisJLyoqCisJICogVGhpcyBpcyB0aGUgbWVudSBtYW5hZ2VyIGludG8gd2hpY2ggbWVudSBjb250cmlidXRpb24gaXRlbXMgc2hvdWxkIGJlIGFkZGVkIGZvciBDcmVhdGVTaWJsaW5nIGFjdGlvbnMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIElNZW51TWFuYWdlciBjcmVhdGVTaWJsaW5nTWVudU1hbmFnZXI7CisKKwkvKioKKwkgKiBUaGlzIGNyZWF0ZXMgYW4gaW5zdGFuY2Ugb2YgdGhlIGNvbnRyaWJ1dG9yLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBNb2RpZmllckFjdGlvbkJhckNvbnRyaWJ1dG9yKCkgeworCQlzdXBlcihBRERJVElPTlNfTEFTVF9TVFlMRSk7CisJCWxvYWRSZXNvdXJjZUFjdGlvbiA9IG5ldyBMb2FkUmVzb3VyY2VBY3Rpb24oKTsKKwkJdmFsaWRhdGVBY3Rpb24gPSBuZXcgVmFsaWRhdGVBY3Rpb24oKTsKKwkJY29udHJvbEFjdGlvbiA9IG5ldyBDb250cm9sQWN0aW9uKCk7CisJfQorCisJLyoqCisJICogVGhpcyBhZGRzIFNlcGFyYXRvcnMgZm9yIGVkaXRvciBhZGRpdGlvbnMgdG8gdGhlIHRvb2wgYmFyLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGNvbnRyaWJ1dGVUb1Rvb2xCYXIoSVRvb2xCYXJNYW5hZ2VyIHRvb2xCYXJNYW5hZ2VyKSB7CisJCXRvb2xCYXJNYW5hZ2VyLmFkZChuZXcgU2VwYXJhdG9yKCJtb2RpZmllci1zZXR0aW5ncyIpKTsgLy8kTk9OLU5MUy0xJAorCQl0b29sQmFyTWFuYWdlci5hZGQobmV3IFNlcGFyYXRvcigibW9kaWZpZXItYWRkaXRpb25zIikpOyAvLyROT04tTkxTLTEkCisJfQorCisJLyoqCisJICogVGhpcyBhZGRzIHRvIHRoZSBtZW51IGJhciBhIG1lbnUgYW5kIHNvbWUgc2VwYXJhdG9ycyBmb3IgZWRpdG9yIGFkZGl0aW9ucywKKwkgKiBhcyB3ZWxsIGFzIHRoZSBzdWItbWVudXMgZm9yIG9iamVjdCBjcmVhdGlvbiBpdGVtcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBjb250cmlidXRlVG9NZW51KElNZW51TWFuYWdlciBtZW51TWFuYWdlcikgeworCQlzdXBlci5jb250cmlidXRlVG9NZW51KG1lbnVNYW5hZ2VyKTsKKworCQlJTWVudU1hbmFnZXIgc3VibWVudU1hbmFnZXIgPSBuZXcgTWVudU1hbmFnZXIoQ29yZUVkaXRvclBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoIl9VSV9Nb2RpZmllckVkaXRvcl9tZW51IiksICJvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXJNZW51SUQiKTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCisJCW1lbnVNYW5hZ2VyLmluc2VydEFmdGVyKCJhZGRpdGlvbnMiLCBzdWJtZW51TWFuYWdlcik7IC8vJE5PTi1OTFMtMSQKKwkJc3VibWVudU1hbmFnZXIuYWRkKG5ldyBTZXBhcmF0b3IoInNldHRpbmdzIikpOyAvLyROT04tTkxTLTEkCisJCXN1Ym1lbnVNYW5hZ2VyLmFkZChuZXcgU2VwYXJhdG9yKCJhY3Rpb25zIikpOyAvLyROT04tTkxTLTEkCisJCXN1Ym1lbnVNYW5hZ2VyLmFkZChuZXcgU2VwYXJhdG9yKCJhZGRpdGlvbnMiKSk7IC8vJE5PTi1OTFMtMSQKKwkJc3VibWVudU1hbmFnZXIuYWRkKG5ldyBTZXBhcmF0b3IoImFkZGl0aW9ucy1lbmQiKSk7IC8vJE5PTi1OTFMtMSQKKworCQkvLyBQcmVwYXJlIGZvciBDcmVhdGVDaGlsZCBpdGVtIGFkZGl0aW9uIG9yIHJlbW92YWwuCisJCS8vCisJCWNyZWF0ZUNoaWxkTWVudU1hbmFnZXIgPSBuZXcgTWVudU1hbmFnZXIoQ29yZUVkaXRvclBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoIl9VSV9DcmVhdGVDaGlsZF9tZW51X2l0ZW0iKSk7IC8vJE5PTi1OTFMtMSQKKwkJc3VibWVudU1hbmFnZXIuaW5zZXJ0QmVmb3JlKCJhZGRpdGlvbnMiLCBjcmVhdGVDaGlsZE1lbnVNYW5hZ2VyKTsgLy8kTk9OLU5MUy0xJAorCisJCS8vIFByZXBhcmUgZm9yIENyZWF0ZVNpYmxpbmcgaXRlbSBhZGRpdGlvbiBvciByZW1vdmFsLgorCQkvLworCQljcmVhdGVTaWJsaW5nTWVudU1hbmFnZXIgPSBuZXcgTWVudU1hbmFnZXIoQ29yZUVkaXRvclBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoIl9VSV9DcmVhdGVTaWJsaW5nX21lbnVfaXRlbSIpKTsgLy8kTk9OLU5MUy0xJAorCQlzdWJtZW51TWFuYWdlci5pbnNlcnRCZWZvcmUoImFkZGl0aW9ucyIsIGNyZWF0ZVNpYmxpbmdNZW51TWFuYWdlcik7IC8vJE5PTi1OTFMtMSQKKworCQkvLyBGb3JjZSBhbiB1cGRhdGUgYmVjYXVzZSBFY2xpcHNlIGhpZGVzIGVtcHR5IG1lbnVzIG5vdy4KKwkJLy8KKwkJc3VibWVudU1hbmFnZXIuYWRkTWVudUxpc3RlbmVyCisJCQkobmV3IElNZW51TGlzdGVuZXIoKSB7CisJCQkJIHB1YmxpYyB2b2lkIG1lbnVBYm91dFRvU2hvdyhJTWVudU1hbmFnZXIgbWVudU1hbmFnZXIpIHsKKwkJCQkJIG1lbnVNYW5hZ2VyLnVwZGF0ZUFsbCh0cnVlKTsKKwkJCQkgfQorCQkJIH0pOworCisJCWFkZEdsb2JhbEFjdGlvbnMoc3VibWVudU1hbmFnZXIpOworCX0KKworCS8qKgorCSAqIFdoZW4gdGhlIGFjdGl2ZSBlZGl0b3IgY2hhbmdlcywgdGhpcyByZW1lbWJlcnMgdGhlIGNoYW5nZSBhbmQgcmVnaXN0ZXJzIHdpdGggaXQgYXMgYSBzZWxlY3Rpb24gcHJvdmlkZXIuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgc2V0QWN0aXZlRWRpdG9yKElFZGl0b3JQYXJ0IHBhcnQpIHsKKwkJc3VwZXIuc2V0QWN0aXZlRWRpdG9yKHBhcnQpOworCQlhY3RpdmVFZGl0b3JQYXJ0ID0gcGFydDsKKworCQkvLyBTd2l0Y2ggdG8gdGhlIG5ldyBzZWxlY3Rpb24gcHJvdmlkZXIuCisJCS8vCisJCWlmIChzZWxlY3Rpb25Qcm92aWRlciAhPSBudWxsKSB7CisJCQlzZWxlY3Rpb25Qcm92aWRlci5yZW1vdmVTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIodGhpcyk7CisJCX0KKwkJaWYgKHBhcnQgPT0gbnVsbCkgeworCQkJc2VsZWN0aW9uUHJvdmlkZXIgPSBudWxsOworCQl9CisJCWVsc2UgeworCQkJc2VsZWN0aW9uUHJvdmlkZXIgPSBwYXJ0LmdldFNpdGUoKS5nZXRTZWxlY3Rpb25Qcm92aWRlcigpOworCQkJc2VsZWN0aW9uUHJvdmlkZXIuYWRkU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyKHRoaXMpOworCisJCQkvLyBGYWtlIGEgc2VsZWN0aW9uIGNoYW5nZWQgZXZlbnQgdG8gdXBkYXRlIHRoZSBtZW51cy4KKwkJCS8vCisJCQlpZiAoc2VsZWN0aW9uUHJvdmlkZXIuZ2V0U2VsZWN0aW9uKCkgIT0gbnVsbCkgeworCQkJCXNlbGVjdGlvbkNoYW5nZWQobmV3IFNlbGVjdGlvbkNoYW5nZWRFdmVudChzZWxlY3Rpb25Qcm92aWRlciwgc2VsZWN0aW9uUHJvdmlkZXIuZ2V0U2VsZWN0aW9uKCkpKTsKKwkJCX0KKwkJfQorCX0KKworCS8qKgorCSAqIFRoaXMgaW1wbGVtZW50cyB7QGxpbmsgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyfSwKKwkgKiBoYW5kbGluZyB7QGxpbmsgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5TZWxlY3Rpb25DaGFuZ2VkRXZlbnR9cyBieSBxdWVyeWluZyBmb3IgdGhlIGNoaWxkcmVuIGFuZCBzaWJsaW5ncworCSAqIHRoYXQgY2FuIGJlIGFkZGVkIHRvIHRoZSBzZWxlY3RlZCBvYmplY3QgYW5kIHVwZGF0aW5nIHRoZSBtZW51cyBhY2NvcmRpbmdseS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZWxlY3Rpb25DaGFuZ2VkKFNlbGVjdGlvbkNoYW5nZWRFdmVudCBldmVudCkgeworCQkvLyBSZW1vdmUgYW55IG1lbnUgaXRlbXMgZm9yIG9sZCBzZWxlY3Rpb24uCisJCS8vCisJCWlmIChjcmVhdGVDaGlsZE1lbnVNYW5hZ2VyICE9IG51bGwpIHsKKwkJCWRlcG9wdWxhdGVNYW5hZ2VyKGNyZWF0ZUNoaWxkTWVudU1hbmFnZXIsIGNyZWF0ZUNoaWxkQWN0aW9ucyk7CisJCX0KKwkJaWYgKGNyZWF0ZVNpYmxpbmdNZW51TWFuYWdlciAhPSBudWxsKSB7CisJCQlkZXBvcHVsYXRlTWFuYWdlcihjcmVhdGVTaWJsaW5nTWVudU1hbmFnZXIsIGNyZWF0ZVNpYmxpbmdBY3Rpb25zKTsKKwkJfQorCisJCS8vIFF1ZXJ5IHRoZSBuZXcgc2VsZWN0aW9uIGZvciBhcHByb3ByaWF0ZSBuZXcgY2hpbGQvc2libGluZyBkZXNjcmlwdG9ycworCQkvLworCQlDb2xsZWN0aW9uPD8+IG5ld0NoaWxkRGVzY3JpcHRvcnMgPSBudWxsOworCQlDb2xsZWN0aW9uPD8+IG5ld1NpYmxpbmdEZXNjcmlwdG9ycyA9IG51bGw7CisKKwkJSVNlbGVjdGlvbiBzZWxlY3Rpb24gPSBldmVudC5nZXRTZWxlY3Rpb24oKTsKKwkJaWYgKHNlbGVjdGlvbiBpbnN0YW5jZW9mIElTdHJ1Y3R1cmVkU2VsZWN0aW9uICYmICgoSVN0cnVjdHVyZWRTZWxlY3Rpb24pc2VsZWN0aW9uKS5zaXplKCkgPT0gMSkgeworCQkJT2JqZWN0IG9iamVjdCA9ICgoSVN0cnVjdHVyZWRTZWxlY3Rpb24pc2VsZWN0aW9uKS5nZXRGaXJzdEVsZW1lbnQoKTsKKworCQkJRWRpdGluZ0RvbWFpbiBkb21haW4gPSAoKElFZGl0aW5nRG9tYWluUHJvdmlkZXIpYWN0aXZlRWRpdG9yUGFydCkuZ2V0RWRpdGluZ0RvbWFpbigpOworCisJCQluZXdDaGlsZERlc2NyaXB0b3JzID0gZG9tYWluLmdldE5ld0NoaWxkRGVzY3JpcHRvcnMob2JqZWN0LCBudWxsKTsKKwkJCW5ld1NpYmxpbmdEZXNjcmlwdG9ycyA9IGRvbWFpbi5nZXROZXdDaGlsZERlc2NyaXB0b3JzKG51bGwsIG9iamVjdCk7CisJCX0KKworCQkvLyBHZW5lcmF0ZSBhY3Rpb25zIGZvciBzZWxlY3Rpb247IHBvcHVsYXRlIGFuZCByZWRyYXcgdGhlIG1lbnVzLgorCQkvLworCQljcmVhdGVDaGlsZEFjdGlvbnMgPSBnZW5lcmF0ZUNyZWF0ZUNoaWxkQWN0aW9ucyhuZXdDaGlsZERlc2NyaXB0b3JzLCBzZWxlY3Rpb24pOworCQljcmVhdGVTaWJsaW5nQWN0aW9ucyA9IGdlbmVyYXRlQ3JlYXRlU2libGluZ0FjdGlvbnMobmV3U2libGluZ0Rlc2NyaXB0b3JzLCBzZWxlY3Rpb24pOworCisJCWlmIChjcmVhdGVDaGlsZE1lbnVNYW5hZ2VyICE9IG51bGwpIHsKKwkJCXBvcHVsYXRlTWFuYWdlcihjcmVhdGVDaGlsZE1lbnVNYW5hZ2VyLCBjcmVhdGVDaGlsZEFjdGlvbnMsIG51bGwpOworCQkJY3JlYXRlQ2hpbGRNZW51TWFuYWdlci51cGRhdGUodHJ1ZSk7CisJCX0KKwkJaWYgKGNyZWF0ZVNpYmxpbmdNZW51TWFuYWdlciAhPSBudWxsKSB7CisJCQlwb3B1bGF0ZU1hbmFnZXIoY3JlYXRlU2libGluZ01lbnVNYW5hZ2VyLCBjcmVhdGVTaWJsaW5nQWN0aW9ucywgbnVsbCk7CisJCQljcmVhdGVTaWJsaW5nTWVudU1hbmFnZXIudXBkYXRlKHRydWUpOworCQl9CisJfQorCisJLyoqCisJICogVGhpcyBnZW5lcmF0ZXMgYSB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkuYWN0aW9uLkNyZWF0ZUNoaWxkQWN0aW9ufSBmb3IgZWFjaCBvYmplY3QgaW4gPGNvZGU+ZGVzY3JpcHRvcnM8L2NvZGU+LAorCSAqIGFuZCByZXR1cm5zIHRoZSBjb2xsZWN0aW9uIG9mIHRoZXNlIGFjdGlvbnMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIENvbGxlY3Rpb248SUFjdGlvbj4gZ2VuZXJhdGVDcmVhdGVDaGlsZEFjdGlvbnMoQ29sbGVjdGlvbjw/PiBkZXNjcmlwdG9ycywgSVNlbGVjdGlvbiBzZWxlY3Rpb24pIHsKKwkJQ29sbGVjdGlvbjxJQWN0aW9uPiBhY3Rpb25zID0gbmV3IEFycmF5TGlzdDxJQWN0aW9uPigpOworCQlpZiAoZGVzY3JpcHRvcnMgIT0gbnVsbCkgeworCQkJZm9yIChPYmplY3QgZGVzY3JpcHRvciA6IGRlc2NyaXB0b3JzKSB7CisJCQkJYWN0aW9ucy5hZGQobmV3IENyZWF0ZUNoaWxkQWN0aW9uKGFjdGl2ZUVkaXRvclBhcnQsIHNlbGVjdGlvbiwgZGVzY3JpcHRvcikpOworCQkJfQorCQl9CisJCXJldHVybiBhY3Rpb25zOworCX0KKworCS8qKgorCSAqIFRoaXMgZ2VuZXJhdGVzIGEge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmFjdGlvbi5DcmVhdGVTaWJsaW5nQWN0aW9ufSBmb3IgZWFjaCBvYmplY3QgaW4gPGNvZGU+ZGVzY3JpcHRvcnM8L2NvZGU+LAorCSAqIGFuZCByZXR1cm5zIHRoZSBjb2xsZWN0aW9uIG9mIHRoZXNlIGFjdGlvbnMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIENvbGxlY3Rpb248SUFjdGlvbj4gZ2VuZXJhdGVDcmVhdGVTaWJsaW5nQWN0aW9ucyhDb2xsZWN0aW9uPD8+IGRlc2NyaXB0b3JzLCBJU2VsZWN0aW9uIHNlbGVjdGlvbikgeworCQlDb2xsZWN0aW9uPElBY3Rpb24+IGFjdGlvbnMgPSBuZXcgQXJyYXlMaXN0PElBY3Rpb24+KCk7CisJCWlmIChkZXNjcmlwdG9ycyAhPSBudWxsKSB7CisJCQlmb3IgKE9iamVjdCBkZXNjcmlwdG9yIDogZGVzY3JpcHRvcnMpIHsKKwkJCQlhY3Rpb25zLmFkZChuZXcgQ3JlYXRlU2libGluZ0FjdGlvbihhY3RpdmVFZGl0b3JQYXJ0LCBzZWxlY3Rpb24sIGRlc2NyaXB0b3IpKTsKKwkJCX0KKwkJfQorCQlyZXR1cm4gYWN0aW9uczsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHBvcHVsYXRlcyB0aGUgc3BlY2lmaWVkIDxjb2RlPm1hbmFnZXI8L2NvZGU+IHdpdGgge0BsaW5rIG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5BY3Rpb25Db250cmlidXRpb25JdGVtfXMKKwkgKiBiYXNlZCBvbiB0aGUge0BsaW5rIG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JQWN0aW9ufXMgY29udGFpbmVkIGluIHRoZSA8Y29kZT5hY3Rpb25zPC9jb2RlPiBjb2xsZWN0aW9uLAorCSAqIGJ5IGluc2VydGluZyB0aGVtIGJlZm9yZSB0aGUgc3BlY2lmaWVkIGNvbnRyaWJ1dGlvbiBpdGVtIDxjb2RlPmNvbnRyaWJ1dGlvbklEPC9jb2RlPi4KKwkgKiBJZiA8Y29kZT5jb250cmlidXRpb25JRDwvY29kZT4gaXMgPGNvZGU+bnVsbDwvY29kZT4sIHRoZXkgYXJlIHNpbXBseSBhZGRlZC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBwb3B1bGF0ZU1hbmFnZXIoSUNvbnRyaWJ1dGlvbk1hbmFnZXIgbWFuYWdlciwgQ29sbGVjdGlvbjw/IGV4dGVuZHMgSUFjdGlvbj4gYWN0aW9ucywgU3RyaW5nIGNvbnRyaWJ1dGlvbklEKSB7CisJCWlmIChhY3Rpb25zICE9IG51bGwpIHsKKwkJCWZvciAoSUFjdGlvbiBhY3Rpb24gOiBhY3Rpb25zKSB7CisJCQkJaWYgKGNvbnRyaWJ1dGlvbklEICE9IG51bGwpIHsKKwkJCQkJbWFuYWdlci5pbnNlcnRCZWZvcmUoY29udHJpYnV0aW9uSUQsIGFjdGlvbik7CisJCQkJfQorCQkJCWVsc2UgeworCQkJCQltYW5hZ2VyLmFkZChhY3Rpb24pOworCQkJCX0KKwkJCX0KKwkJfQorCX0KKwkJCisJLyoqCisJICogVGhpcyByZW1vdmVzIGZyb20gdGhlIHNwZWNpZmllZCA8Y29kZT5tYW5hZ2VyPC9jb2RlPiBhbGwge0BsaW5rIG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5BY3Rpb25Db250cmlidXRpb25JdGVtfXMKKwkgKiBiYXNlZCBvbiB0aGUge0BsaW5rIG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JQWN0aW9ufXMgY29udGFpbmVkIGluIHRoZSA8Y29kZT5hY3Rpb25zPC9jb2RlPiBjb2xsZWN0aW9uLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIGRlcG9wdWxhdGVNYW5hZ2VyKElDb250cmlidXRpb25NYW5hZ2VyIG1hbmFnZXIsIENvbGxlY3Rpb248PyBleHRlbmRzIElBY3Rpb24+IGFjdGlvbnMpIHsKKwkJaWYgKGFjdGlvbnMgIT0gbnVsbCkgeworCQkJSUNvbnRyaWJ1dGlvbkl0ZW1bXSBpdGVtcyA9IG1hbmFnZXIuZ2V0SXRlbXMoKTsKKwkJCWZvciAoaW50IGkgPSAwOyBpIDwgaXRlbXMubGVuZ3RoOyBpKyspIHsKKwkJCQkvLyBMb29rIGludG8gU3ViQ29udHJpYnV0aW9uSXRlbXMKKwkJCQkvLworCQkJCUlDb250cmlidXRpb25JdGVtIGNvbnRyaWJ1dGlvbkl0ZW0gPSBpdGVtc1tpXTsKKwkJCQl3aGlsZSAoY29udHJpYnV0aW9uSXRlbSBpbnN0YW5jZW9mIFN1YkNvbnRyaWJ1dGlvbkl0ZW0pIHsKKwkJCQkJY29udHJpYnV0aW9uSXRlbSA9ICgoU3ViQ29udHJpYnV0aW9uSXRlbSljb250cmlidXRpb25JdGVtKS5nZXRJbm5lckl0ZW0oKTsKKwkJCQl9CisKKwkJCQkvLyBEZWxldGUgdGhlIEFjdGlvbkNvbnRyaWJ1dGlvbkl0ZW1zIHdpdGggbWF0Y2hpbmcgYWN0aW9uLgorCQkJCS8vCisJCQkJaWYgKGNvbnRyaWJ1dGlvbkl0ZW0gaW5zdGFuY2VvZiBBY3Rpb25Db250cmlidXRpb25JdGVtKSB7CisJCQkJCUlBY3Rpb24gYWN0aW9uID0gKChBY3Rpb25Db250cmlidXRpb25JdGVtKWNvbnRyaWJ1dGlvbkl0ZW0pLmdldEFjdGlvbigpOworCQkJCQlpZiAoYWN0aW9ucy5jb250YWlucyhhY3Rpb24pKSB7CisJCQkJCQltYW5hZ2VyLnJlbW92ZShjb250cmlidXRpb25JdGVtKTsKKwkJCQkJfQorCQkJCX0KKwkJCX0KKwkJfQorCX0KKworCS8qKgorCSAqIFRoaXMgcG9wdWxhdGVzIHRoZSBwb3AtdXAgbWVudSBiZWZvcmUgaXQgYXBwZWFycy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBtZW51QWJvdXRUb1Nob3coSU1lbnVNYW5hZ2VyIG1lbnVNYW5hZ2VyKSB7CisJCXN1cGVyLm1lbnVBYm91dFRvU2hvdyhtZW51TWFuYWdlcik7CisJCU1lbnVNYW5hZ2VyIHN1Ym1lbnVNYW5hZ2VyID0gbnVsbDsKKworCQlzdWJtZW51TWFuYWdlciA9IG5ldyBNZW51TWFuYWdlcihDb3JlRWRpdG9yUGx1Z2luLklOU1RBTkNFLmdldFN0cmluZygiX1VJX0NyZWF0ZUNoaWxkX21lbnVfaXRlbSIpKTsgLy8kTk9OLU5MUy0xJAorCQlwb3B1bGF0ZU1hbmFnZXIoc3VibWVudU1hbmFnZXIsIGNyZWF0ZUNoaWxkQWN0aW9ucywgbnVsbCk7CisJCW1lbnVNYW5hZ2VyLmluc2VydEJlZm9yZSgiZWRpdCIsIHN1Ym1lbnVNYW5hZ2VyKTsgLy8kTk9OLU5MUy0xJAorCisJCXN1Ym1lbnVNYW5hZ2VyID0gbmV3IE1lbnVNYW5hZ2VyKENvcmVFZGl0b3JQbHVnaW4uSU5TVEFOQ0UuZ2V0U3RyaW5nKCJfVUlfQ3JlYXRlU2libGluZ19tZW51X2l0ZW0iKSk7IC8vJE5PTi1OTFMtMSQKKwkJcG9wdWxhdGVNYW5hZ2VyKHN1Ym1lbnVNYW5hZ2VyLCBjcmVhdGVTaWJsaW5nQWN0aW9ucywgbnVsbCk7CisJCW1lbnVNYW5hZ2VyLmluc2VydEJlZm9yZSgiZWRpdCIsIHN1Ym1lbnVNYW5hZ2VyKTsgLy8kTk9OLU5MUy0xJAorCX0KKworCS8qKgorCSAqIFRoaXMgaW5zZXJ0cyBnbG9iYWwgYWN0aW9ucyBiZWZvcmUgdGhlICJhZGRpdGlvbnMtZW5kIiBzZXBhcmF0b3IuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgYWRkR2xvYmFsQWN0aW9ucyhJTWVudU1hbmFnZXIgbWVudU1hbmFnZXIpIHsKKwkJbWVudU1hbmFnZXIuaW5zZXJ0QWZ0ZXIoImFkZGl0aW9ucy1lbmQiLCBuZXcgU2VwYXJhdG9yKCJ1aS1hY3Rpb25zIikpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKKwkJbWVudU1hbmFnZXIuaW5zZXJ0QWZ0ZXIoInVpLWFjdGlvbnMiLCBzaG93UHJvcGVydGllc1ZpZXdBY3Rpb24pOyAvLyROT04tTkxTLTEkCisKKwkJcmVmcmVzaFZpZXdlckFjdGlvbi5zZXRFbmFibGVkKHJlZnJlc2hWaWV3ZXJBY3Rpb24uaXNFbmFibGVkKCkpOwkJCisJCW1lbnVNYW5hZ2VyLmluc2VydEFmdGVyKCJ1aS1hY3Rpb25zIiwgcmVmcmVzaFZpZXdlckFjdGlvbik7IC8vJE5PTi1OTFMtMSQKKworCQlzdXBlci5hZGRHbG9iYWxBY3Rpb25zKG1lbnVNYW5hZ2VyKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGVuc3VyZXMgdGhhdCBhIGRlbGV0ZSBhY3Rpb24gd2lsbCBjbGVhbiB1cCBhbGwgcmVmZXJlbmNlcyB0byBkZWxldGVkIG9iamVjdHMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIGJvb2xlYW4gcmVtb3ZlQWxsUmVmZXJlbmNlc09uRGVsZXRlKCkgeworCQlyZXR1cm4gdHJ1ZTsKKwl9CisKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9tb2RpZmllci9wcmVzZW50YXRpb24vTW9kaWZpZXJFZGl0b3IuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL21vZGlmaWVyL3ByZXNlbnRhdGlvbi9Nb2RpZmllckVkaXRvci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIzYzg0NmEKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9tb2RpZmllci9wcmVzZW50YXRpb24vTW9kaWZpZXJFZGl0b3IuamF2YQpAQCAtMCwwICsxLDE2MzUgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLnByZXNlbnRhdGlvbjsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOworaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW07CitpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbnM7CitpbXBvcnQgamF2YS51dGlsLkV2ZW50T2JqZWN0OworaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOworaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKK2ltcG9ydCBqYXZhLnV0aWwuTGlua2VkSGFzaE1hcDsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuTWFwOworCitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUZpbGU7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSU1hcmtlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUmVzb3VyY2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVJlc291cmNlQ2hhbmdlRXZlbnQ7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVJlc291cmNlQ2hhbmdlTGlzdGVuZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVJlc291cmNlRGVsdGE7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVJlc291cmNlRGVsdGFWaXNpdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLlJlc291cmNlc1BsdWdpbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQ29yZUV4Y2VwdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVBhdGg7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQcm9ncmVzc01vbml0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLk51bGxQcm9ncmVzc01vbml0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5jb21tYW5kLkJhc2ljQ29tbWFuZFN0YWNrOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24uY29tbWFuZC5Db21tYW5kOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24uY29tbWFuZC5Db21tYW5kU3RhY2s7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5jb21tYW5kLkNvbW1hbmRTdGFja0xpc3RlbmVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LkFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnVpLk1hcmtlckhlbHBlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnVpLmVkaXRvci5Qcm9ibGVtRWRpdG9yUGFydDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnVpLnZpZXdlci5JVmlld2VyUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLkJhc2ljRGlhZ25vc3RpYzsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuRGlhZ25vc3RpYzsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuVVJJOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FVmFsaWRhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5wcm92aWRlci5FY29yZUl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5yZXNvdXJjZS5SZXNvdXJjZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUucmVzb3VyY2UuUmVzb3VyY2VTZXQ7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnV0aWwuRUNvbnRlbnRBZGFwdGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS51dGlsLkVjb3JlVXRpbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5kb21haW4uQWRhcHRlckZhY3RvcnlFZGl0aW5nRG9tYWluOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LmRvbWFpbi5FZGl0aW5nRG9tYWluOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LmRvbWFpbi5JRWRpdGluZ0RvbWFpblByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkFkYXB0ZXJGYWN0b3J5SXRlbURlbGVnYXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5Db21wb3NlZEFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLlJlZmxlY3RpdmVJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5yZXNvdXJjZS5SZXNvdXJjZUl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmFjdGlvbi5FZGl0aW5nRG9tYWluQWN0aW9uQmFyQ29udHJpYnV0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkuY2VsbGVkaXRvci5BZGFwdGVyRmFjdG9yeVRyZWVFZGl0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkuZG5kLkVkaXRpbmdEb21haW5WaWV3ZXJEcm9wQWRhcHRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5kbmQuTG9jYWxUcmFuc2ZlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5kbmQuVmlld2VyRHJhZ0FkYXB0ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkucHJvdmlkZXIuQWRhcHRlckZhY3RvcnlDb250ZW50UHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkucHJvdmlkZXIuQWRhcHRlckZhY3RvcnlMYWJlbFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLnByb3ZpZGVyLlVud3JhcHBpbmdTZWxlY3Rpb25Qcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS51dGlsLkVkaXRVSU1hcmtlckhlbHBlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS51dGlsLkVkaXRVSVV0aWw7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkudmlldy5FeHRlbmRlZFByb3BlcnR5U2hlZXRQYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JTWVudUxpc3RlbmVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JTWVudU1hbmFnZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklTdGF0dXNMaW5lTWFuYWdlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSVRvb2xCYXJNYW5hZ2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5NZW51TWFuYWdlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uU2VwYXJhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmRpYWxvZ3MuTWVzc2FnZURpYWxvZzsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5kaWFsb2dzLlByb2dyZXNzTW9uaXRvckRpYWxvZzsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS51dGlsLkxvY2FsU2VsZWN0aW9uVHJhbnNmZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb25Qcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTdHJ1Y3R1cmVkU2VsZWN0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuU2VsZWN0aW9uQ2hhbmdlZEV2ZW50OworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuU3RydWN0dXJlZFNlbGVjdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlN0cnVjdHVyZWRWaWV3ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5UcmVlVmlld2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuVmlld2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5TVEVNWE1JUmVzb3VyY2VGYWN0b3J5SW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLnByZXNlbnRhdGlvbi5Db3JlRWRpdG9yUGx1Z2luOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24ucHJvdmlkZXIuQ29tbW9uSXRlbVByb3ZpZGVyQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmV4cGVyaW1lbnQucHJvdmlkZXIuRXhwZXJpbWVudEl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5wcm92aWRlci5HcmFwaEl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5sb2dnZXIucHJvdmlkZXIuTG9nZ2VySXRlbVByb3ZpZGVyQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLnByb3ZpZGVyLk1vZGVsSXRlbVByb3ZpZGVyQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLnByb3ZpZGVyLk1vZGlmaWVySXRlbVByb3ZpZGVyQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZS5wcm92aWRlci5QcmVkaWNhdGVJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2NlbmFyaW8ucHJvdmlkZXIuU2NlbmFyaW9JdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2VxdWVuY2VyLnByb3ZpZGVyLlNlcXVlbmNlckl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zb2x2ZXIucHJvdmlkZXIuU29sdmVySXRlbVByb3ZpZGVyQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnRyaWdnZXIucHJvdmlkZXIuVHJpZ2dlckl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5TV1Q7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmN1c3RvbS5DVGFiRm9sZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5kbmQuRE5EOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5kbmQuVHJhbnNmZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5Db250cm9sQWRhcHRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLkNvbnRyb2xFdmVudDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZ3JhcGhpY3MuUG9pbnQ7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLk1lbnU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuVHJlZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5JQWN0aW9uQmFyczsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5JRWRpdG9ySW5wdXQ7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuSUVkaXRvclBhcnQ7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuSUVkaXRvclNpdGU7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuSVBhcnRMaXN0ZW5lcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5JV29ya2JlbmNoUGFydDsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5QYXJ0SW5pdEV4Y2VwdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5hY3Rpb25zLldvcmtzcGFjZU1vZGlmeU9wZXJhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5kaWFsb2dzLlNhdmVBc0RpYWxvZzsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5pZGUuSUdvdG9NYXJrZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkucGFydC5GaWxlRWRpdG9ySW5wdXQ7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkucGFydC5NdWx0aVBhZ2VFZGl0b3JQYXJ0OworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLnZpZXdzLmNvbnRlbnRvdXRsaW5lLkNvbnRlbnRPdXRsaW5lOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLnZpZXdzLmNvbnRlbnRvdXRsaW5lLkNvbnRlbnRPdXRsaW5lUGFnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS52aWV3cy5jb250ZW50b3V0bGluZS5JQ29udGVudE91dGxpbmVQYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLnZpZXdzLnByb3BlcnRpZXMuSVByb3BlcnR5U2hlZXRQYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLnZpZXdzLnByb3BlcnRpZXMuUHJvcGVydHlTaGVldDsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS52aWV3cy5wcm9wZXJ0aWVzLlByb3BlcnR5U2hlZXRQYWdlOworCisKKy8qKgorICogVGhpcyBpcyBhbiBleGFtcGxlIG9mIGEgTW9kaWZpZXIgbW9kZWwgZWRpdG9yLgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQGdlbmVyYXRlZAorICovCitAU3VwcHJlc3NXYXJuaW5ncygiYWxsIikKK3B1YmxpYyBjbGFzcyBNb2RpZmllckVkaXRvcgorCWV4dGVuZHMgTXVsdGlQYWdlRWRpdG9yUGFydAorCWltcGxlbWVudHMgSUVkaXRpbmdEb21haW5Qcm92aWRlciwgSVNlbGVjdGlvblByb3ZpZGVyLCBJTWVudUxpc3RlbmVyLCBJVmlld2VyUHJvdmlkZXIsIElHb3RvTWFya2VyIHsKKwkvKioKKwkgKiBUaGlzIGtlZXBzIHRyYWNrIG9mIHRoZSBlZGl0aW5nIGRvbWFpbiB0aGF0IGlzIHVzZWQgdG8gdHJhY2sgYWxsIGNoYW5nZXMgdG8gdGhlIG1vZGVsLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBBZGFwdGVyRmFjdG9yeUVkaXRpbmdEb21haW4gZWRpdGluZ0RvbWFpbjsKKworCS8qKgorCSAqIFRoaXMgaXMgdGhlIG9uZSBhZGFwdGVyIGZhY3RvcnkgdXNlZCBmb3IgcHJvdmlkaW5nIHZpZXdzIG9mIHRoZSBtb2RlbC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgQ29tcG9zZWRBZGFwdGVyRmFjdG9yeSBhZGFwdGVyRmFjdG9yeTsKKworCS8qKgorCSAqIFRoaXMgaXMgdGhlIGNvbnRlbnQgb3V0bGluZSBwYWdlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBJQ29udGVudE91dGxpbmVQYWdlIGNvbnRlbnRPdXRsaW5lUGFnZTsKKworCS8qKgorCSAqIFRoaXMgaXMgYSBrbHVkZ2UuLi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgSVN0YXR1c0xpbmVNYW5hZ2VyIGNvbnRlbnRPdXRsaW5lU3RhdHVzTGluZU1hbmFnZXI7CisKKwkvKioKKwkgKiBUaGlzIGlzIHRoZSBjb250ZW50IG91dGxpbmUgcGFnZSdzIHZpZXdlci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgVHJlZVZpZXdlciBjb250ZW50T3V0bGluZVZpZXdlcjsKKworCS8qKgorCSAqIFRoaXMgaXMgdGhlIHByb3BlcnR5IHNoZWV0IHBhZ2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIFByb3BlcnR5U2hlZXRQYWdlIHByb3BlcnR5U2hlZXRQYWdlOworCisJLyoqCisJICogVGhpcyBpcyB0aGUgdmlld2VyIHRoYXQgc2hhZG93cyB0aGUgc2VsZWN0aW9uIGluIHRoZSBjb250ZW50IG91dGxpbmUuCisJICogVGhlIHBhcmVudCByZWxhdGlvbiBtdXN0IGJlIGNvcnJlY3RseSBkZWZpbmVkIGZvciB0aGlzIHRvIHdvcmsuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIFRyZWVWaWV3ZXIgc2VsZWN0aW9uVmlld2VyOworCisJLyoqCisJICogVGhpcyBrZWVwcyB0cmFjayBvZiB0aGUgYWN0aXZlIGNvbnRlbnQgdmlld2VyLCB3aGljaCBtYXkgYmUgZWl0aGVyIG9uZSBvZiB0aGUgdmlld2VycyBpbiB0aGUgcGFnZXMgb3IgdGhlIGNvbnRlbnQgb3V0bGluZSB2aWV3ZXIuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIFZpZXdlciBjdXJyZW50Vmlld2VyOworCisJLyoqCisJICogVGhpcyBsaXN0ZW5zIHRvIHdoaWNoIGV2ZXIgdmlld2VyIGlzIGFjdGl2ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lciBzZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXI7CisKKwkvKioKKwkgKiBUaGlzIGtlZXBzIHRyYWNrIG9mIGFsbCB0aGUge0BsaW5rIG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcn1zIHRoYXQgYXJlIGxpc3RlbmluZyB0byB0aGlzIGVkaXRvci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgQ29sbGVjdGlvbjxJU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyPiBzZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXJzID0gbmV3IEFycmF5TGlzdDxJU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyPigpOworCisJLyoqCisJICogVGhpcyBrZWVwcyB0cmFjayBvZiB0aGUgc2VsZWN0aW9uIG9mIHRoZSBlZGl0b3IgYXMgYSB3aG9sZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgSVNlbGVjdGlvbiBlZGl0b3JTZWxlY3Rpb24gPSBTdHJ1Y3R1cmVkU2VsZWN0aW9uLkVNUFRZOworCisJLyoqCisJICogVGhlIE1hcmtlckhlbHBlciBpcyByZXNwb25zaWJsZSBmb3IgY3JlYXRpbmcgd29ya3NwYWNlIHJlc291cmNlIG1hcmtlcnMgcHJlc2VudGVkCisJICogaW4gRWNsaXBzZSdzIFByb2JsZW1zIFZpZXcuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIE1hcmtlckhlbHBlciBtYXJrZXJIZWxwZXIgPSBuZXcgRWRpdFVJTWFya2VySGVscGVyKCk7CisKKwkvKioKKwkgKiBUaGlzIGxpc3RlbnMgZm9yIHdoZW4gdGhlIG91dGxpbmUgYmVjb21lcyBhY3RpdmUKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgSVBhcnRMaXN0ZW5lciBwYXJ0TGlzdGVuZXIgPQorCQluZXcgSVBhcnRMaXN0ZW5lcigpIHsKKwkJCXB1YmxpYyB2b2lkIHBhcnRBY3RpdmF0ZWQoSVdvcmtiZW5jaFBhcnQgcCkgeworCQkJCWlmIChwIGluc3RhbmNlb2YgQ29udGVudE91dGxpbmUpIHsKKwkJCQkJaWYgKCgoQ29udGVudE91dGxpbmUpcCkuZ2V0Q3VycmVudFBhZ2UoKSA9PSBjb250ZW50T3V0bGluZVBhZ2UpIHsKKwkJCQkJCWdldEFjdGlvbkJhckNvbnRyaWJ1dG9yKCkuc2V0QWN0aXZlRWRpdG9yKE1vZGlmaWVyRWRpdG9yLnRoaXMpOworCisJCQkJCQlzZXRDdXJyZW50Vmlld2VyKGNvbnRlbnRPdXRsaW5lVmlld2VyKTsKKwkJCQkJfQorCQkJCX0KKwkJCQllbHNlIGlmIChwIGluc3RhbmNlb2YgUHJvcGVydHlTaGVldCkgeworCQkJCQlpZiAoKChQcm9wZXJ0eVNoZWV0KXApLmdldEN1cnJlbnRQYWdlKCkgPT0gcHJvcGVydHlTaGVldFBhZ2UpIHsKKwkJCQkJCWdldEFjdGlvbkJhckNvbnRyaWJ1dG9yKCkuc2V0QWN0aXZlRWRpdG9yKE1vZGlmaWVyRWRpdG9yLnRoaXMpOworCQkJCQkJaGFuZGxlQWN0aXZhdGUoKTsKKwkJCQkJfQorCQkJCX0KKwkJCQllbHNlIGlmIChwID09IE1vZGlmaWVyRWRpdG9yLnRoaXMpIHsKKwkJCQkJaGFuZGxlQWN0aXZhdGUoKTsKKwkJCQl9CisJCQl9CisJCQlwdWJsaWMgdm9pZCBwYXJ0QnJvdWdodFRvVG9wKElXb3JrYmVuY2hQYXJ0IHApIHsKKwkJCQkvLyBJZ25vcmUuCisJCQl9CisJCQlwdWJsaWMgdm9pZCBwYXJ0Q2xvc2VkKElXb3JrYmVuY2hQYXJ0IHApIHsKKwkJCQkvLyBJZ25vcmUuCisJCQl9CisJCQlwdWJsaWMgdm9pZCBwYXJ0RGVhY3RpdmF0ZWQoSVdvcmtiZW5jaFBhcnQgcCkgeworCQkJCS8vIElnbm9yZS4KKwkJCX0KKwkJCXB1YmxpYyB2b2lkIHBhcnRPcGVuZWQoSVdvcmtiZW5jaFBhcnQgcCkgeworCQkJCS8vIElnbm9yZS4KKwkJCX0KKwkJfTsKKworCS8qKgorCSAqIFJlc291cmNlcyB0aGF0IGhhdmUgYmVlbiByZW1vdmVkIHNpbmNlIGxhc3QgYWN0aXZhdGlvbi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgQ29sbGVjdGlvbjxSZXNvdXJjZT4gcmVtb3ZlZFJlc291cmNlcyA9IG5ldyBBcnJheUxpc3Q8UmVzb3VyY2U+KCk7CisKKwkvKioKKwkgKiBSZXNvdXJjZXMgdGhhdCBoYXZlIGJlZW4gY2hhbmdlZCBzaW5jZSBsYXN0IGFjdGl2YXRpb24uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIENvbGxlY3Rpb248UmVzb3VyY2U+IGNoYW5nZWRSZXNvdXJjZXMgPSBuZXcgQXJyYXlMaXN0PFJlc291cmNlPigpOworCisJLyoqCisJICogUmVzb3VyY2VzIHRoYXQgaGF2ZSBiZWVuIHNhdmVkLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBDb2xsZWN0aW9uPFJlc291cmNlPiBzYXZlZFJlc291cmNlcyA9IG5ldyBBcnJheUxpc3Q8UmVzb3VyY2U+KCk7CisKKwkvKioKKwkgKiBNYXAgdG8gc3RvcmUgdGhlIGRpYWdub3N0aWMgYXNzb2NpYXRlZCB3aXRoIGEgcmVzb3VyY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIE1hcDxSZXNvdXJjZSwgRGlhZ25vc3RpYz4gcmVzb3VyY2VUb0RpYWdub3N0aWNNYXAgPSBuZXcgTGlua2VkSGFzaE1hcDxSZXNvdXJjZSwgRGlhZ25vc3RpYz4oKTsKKworCS8qKgorCSAqIENvbnRyb2xzIHdoZXRoZXIgdGhlIHByb2JsZW0gaW5kaWNhdGlvbiBzaG91bGQgYmUgdXBkYXRlZC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgYm9vbGVhbiB1cGRhdGVQcm9ibGVtSW5kaWNhdGlvbiA9IHRydWU7CisKKwkvKioKKwkgKiBBZGFwdGVyIHVzZWQgdG8gdXBkYXRlIHRoZSBwcm9ibGVtIGluZGljYXRpb24gd2hlbiByZXNvdXJjZXMgYXJlIGRlbWFuZGVkIGxvYWRlZC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgRUNvbnRlbnRBZGFwdGVyIHByb2JsZW1JbmRpY2F0aW9uQWRhcHRlciA9IAorCQluZXcgRUNvbnRlbnRBZGFwdGVyKCkgeworCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgdm9pZCBub3RpZnlDaGFuZ2VkKE5vdGlmaWNhdGlvbiBub3RpZmljYXRpb24pIHsKKwkJCQlpZiAobm90aWZpY2F0aW9uLmdldE5vdGlmaWVyKCkgaW5zdGFuY2VvZiBSZXNvdXJjZSkgeworCQkJCQlzd2l0Y2ggKG5vdGlmaWNhdGlvbi5nZXRGZWF0dXJlSUQoUmVzb3VyY2UuY2xhc3MpKSB7CisJCQkJCQljYXNlIFJlc291cmNlLlJFU09VUkNFX19JU19MT0FERUQ6CisJCQkJCQljYXNlIFJlc291cmNlLlJFU09VUkNFX19FUlJPUlM6CisJCQkJCQljYXNlIFJlc291cmNlLlJFU09VUkNFX19XQVJOSU5HUzogeworCQkJCQkJCVJlc291cmNlIHJlc291cmNlID0gKFJlc291cmNlKW5vdGlmaWNhdGlvbi5nZXROb3RpZmllcigpOworCQkJCQkJCURpYWdub3N0aWMgZGlhZ25vc3RpYyA9IGFuYWx5emVSZXNvdXJjZVByb2JsZW1zKHJlc291cmNlLCBudWxsKTsKKwkJCQkJCQlpZiAoZGlhZ25vc3RpYy5nZXRTZXZlcml0eSgpICE9IERpYWdub3N0aWMuT0spIHsKKwkJCQkJCQkJcmVzb3VyY2VUb0RpYWdub3N0aWNNYXAucHV0KHJlc291cmNlLCBkaWFnbm9zdGljKTsKKwkJCQkJCQl9CisJCQkJCQkJZWxzZSB7CisJCQkJCQkJCXJlc291cmNlVG9EaWFnbm9zdGljTWFwLnJlbW92ZShyZXNvdXJjZSk7CisJCQkJCQkJfQorCisJCQkJCQkJaWYgKHVwZGF0ZVByb2JsZW1JbmRpY2F0aW9uKSB7CisJCQkJCQkJCWdldFNpdGUoKS5nZXRTaGVsbCgpLmdldERpc3BsYXkoKS5hc3luY0V4ZWMKKwkJCQkJCQkJCShuZXcgUnVubmFibGUoKSB7CisJCQkJCQkJCQkJIHB1YmxpYyB2b2lkIHJ1bigpIHsKKwkJCQkJCQkJCQkJIHVwZGF0ZVByb2JsZW1JbmRpY2F0aW9uKCk7CisJCQkJCQkJCQkJIH0KKwkJCQkJCQkJCSB9KTsKKwkJCQkJCQl9CisJCQkJCQkJYnJlYWs7CisJCQkJCQl9CisJCQkJCX0KKwkJCQl9CisJCQkJZWxzZSB7CisJCQkJCXN1cGVyLm5vdGlmeUNoYW5nZWQobm90aWZpY2F0aW9uKTsKKwkJCQl9CisJCQl9CisKKwkJCUBPdmVycmlkZQorCQkJcHJvdGVjdGVkIHZvaWQgc2V0VGFyZ2V0KFJlc291cmNlIHRhcmdldCkgeworCQkJCWJhc2ljU2V0VGFyZ2V0KHRhcmdldCk7CisJCQl9CisKKwkJCUBPdmVycmlkZQorCQkJcHJvdGVjdGVkIHZvaWQgdW5zZXRUYXJnZXQoUmVzb3VyY2UgdGFyZ2V0KSB7CisJCQkJYmFzaWNVbnNldFRhcmdldCh0YXJnZXQpOworCQkJfQorCQl9OworCisJLyoqCisJICogVGhpcyBsaXN0ZW5zIGZvciB3b3Jrc3BhY2UgY2hhbmdlcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgSVJlc291cmNlQ2hhbmdlTGlzdGVuZXIgcmVzb3VyY2VDaGFuZ2VMaXN0ZW5lciA9CisJCW5ldyBJUmVzb3VyY2VDaGFuZ2VMaXN0ZW5lcigpIHsKKwkJCXB1YmxpYyB2b2lkIHJlc291cmNlQ2hhbmdlZChJUmVzb3VyY2VDaGFuZ2VFdmVudCBldmVudCkgeworCQkJCUlSZXNvdXJjZURlbHRhIGRlbHRhID0gZXZlbnQuZ2V0RGVsdGEoKTsKKwkJCQl0cnkgeworCQkJCQljbGFzcyBSZXNvdXJjZURlbHRhVmlzaXRvciBpbXBsZW1lbnRzIElSZXNvdXJjZURlbHRhVmlzaXRvciB7CisJCQkJCQlwcm90ZWN0ZWQgUmVzb3VyY2VTZXQgcmVzb3VyY2VTZXQgPSBlZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCk7CisJCQkJCQlwcm90ZWN0ZWQgQ29sbGVjdGlvbjxSZXNvdXJjZT4gY2hhbmdlZFJlc291cmNlcyA9IG5ldyBBcnJheUxpc3Q8UmVzb3VyY2U+KCk7CisJCQkJCQlwcm90ZWN0ZWQgQ29sbGVjdGlvbjxSZXNvdXJjZT4gcmVtb3ZlZFJlc291cmNlcyA9IG5ldyBBcnJheUxpc3Q8UmVzb3VyY2U+KCk7CisKKwkJCQkJCXB1YmxpYyBib29sZWFuIHZpc2l0KElSZXNvdXJjZURlbHRhIGRlbHRhKSB7CisJCQkJCQkJaWYgKGRlbHRhLmdldFJlc291cmNlKCkuZ2V0VHlwZSgpID09IElSZXNvdXJjZS5GSUxFKSB7CisJCQkJCQkJCWlmIChkZWx0YS5nZXRLaW5kKCkgPT0gSVJlc291cmNlRGVsdGEuUkVNT1ZFRCB8fAorCQkJCQkJCQkgICAgZGVsdGEuZ2V0S2luZCgpID09IElSZXNvdXJjZURlbHRhLkNIQU5HRUQgJiYgZGVsdGEuZ2V0RmxhZ3MoKSAhPSBJUmVzb3VyY2VEZWx0YS5NQVJLRVJTKSB7CisJCQkJCQkJCQlSZXNvdXJjZSByZXNvdXJjZSA9IHJlc291cmNlU2V0LmdldFJlc291cmNlKFVSSS5jcmVhdGVQbGF0Zm9ybVJlc291cmNlVVJJKGRlbHRhLmdldEZ1bGxQYXRoKCkudG9TdHJpbmcoKSwgdHJ1ZSksIGZhbHNlKTsKKwkJCQkJCQkJCWlmIChyZXNvdXJjZSAhPSBudWxsKSB7CisJCQkJCQkJCQkJaWYgKGRlbHRhLmdldEtpbmQoKSA9PSBJUmVzb3VyY2VEZWx0YS5SRU1PVkVEKSB7CisJCQkJCQkJCQkJCXJlbW92ZWRSZXNvdXJjZXMuYWRkKHJlc291cmNlKTsKKwkJCQkJCQkJCQl9CisJCQkJCQkJCQkJZWxzZSBpZiAoIXNhdmVkUmVzb3VyY2VzLnJlbW92ZShyZXNvdXJjZSkpIHsKKwkJCQkJCQkJCQkJY2hhbmdlZFJlc291cmNlcy5hZGQocmVzb3VyY2UpOworCQkJCQkJCQkJCX0KKwkJCQkJCQkJCX0KKwkJCQkJCQkJfQorCQkJCQkJCX0KKworCQkJCQkJCXJldHVybiB0cnVlOworCQkJCQkJfQorCisJCQkJCQlwdWJsaWMgQ29sbGVjdGlvbjxSZXNvdXJjZT4gZ2V0Q2hhbmdlZFJlc291cmNlcygpIHsKKwkJCQkJCQlyZXR1cm4gY2hhbmdlZFJlc291cmNlczsKKwkJCQkJCX0KKworCQkJCQkJcHVibGljIENvbGxlY3Rpb248UmVzb3VyY2U+IGdldFJlbW92ZWRSZXNvdXJjZXMoKSB7CisJCQkJCQkJcmV0dXJuIHJlbW92ZWRSZXNvdXJjZXM7CisJCQkJCQl9CisJCQkJCX0KKworCQkJCQlmaW5hbCBSZXNvdXJjZURlbHRhVmlzaXRvciB2aXNpdG9yID0gbmV3IFJlc291cmNlRGVsdGFWaXNpdG9yKCk7CisJCQkJCWRlbHRhLmFjY2VwdCh2aXNpdG9yKTsKKworCQkJCQlpZiAoIXZpc2l0b3IuZ2V0UmVtb3ZlZFJlc291cmNlcygpLmlzRW1wdHkoKSkgeworCQkJCQkJZ2V0U2l0ZSgpLmdldFNoZWxsKCkuZ2V0RGlzcGxheSgpLmFzeW5jRXhlYworCQkJCQkJCShuZXcgUnVubmFibGUoKSB7CisJCQkJCQkJCSBwdWJsaWMgdm9pZCBydW4oKSB7CisJCQkJCQkJCQkgcmVtb3ZlZFJlc291cmNlcy5hZGRBbGwodmlzaXRvci5nZXRSZW1vdmVkUmVzb3VyY2VzKCkpOworCQkJCQkJCQkJIGlmICghaXNEaXJ0eSgpKSB7CisJCQkJCQkJCQkJIGdldFNpdGUoKS5nZXRQYWdlKCkuY2xvc2VFZGl0b3IoTW9kaWZpZXJFZGl0b3IudGhpcywgZmFsc2UpOworCQkJCQkJCQkJIH0KKwkJCQkJCQkJIH0KKwkJCQkJCQkgfSk7CisJCQkJCX0KKworCQkJCQlpZiAoIXZpc2l0b3IuZ2V0Q2hhbmdlZFJlc291cmNlcygpLmlzRW1wdHkoKSkgeworCQkJCQkJZ2V0U2l0ZSgpLmdldFNoZWxsKCkuZ2V0RGlzcGxheSgpLmFzeW5jRXhlYworCQkJCQkJCShuZXcgUnVubmFibGUoKSB7CisJCQkJCQkJCSBwdWJsaWMgdm9pZCBydW4oKSB7CisJCQkJCQkJCQkgY2hhbmdlZFJlc291cmNlcy5hZGRBbGwodmlzaXRvci5nZXRDaGFuZ2VkUmVzb3VyY2VzKCkpOworCQkJCQkJCQkJIGlmIChnZXRTaXRlKCkuZ2V0UGFnZSgpLmdldEFjdGl2ZUVkaXRvcigpID09IE1vZGlmaWVyRWRpdG9yLnRoaXMpIHsKKwkJCQkJCQkJCQkgaGFuZGxlQWN0aXZhdGUoKTsKKwkJCQkJCQkJCSB9CisJCQkJCQkJCSB9CisJCQkJCQkJIH0pOworCQkJCQl9CisJCQkJfQorCQkJCWNhdGNoIChDb3JlRXhjZXB0aW9uIGV4Y2VwdGlvbikgeworCQkJCQlDb3JlRWRpdG9yUGx1Z2luLklOU1RBTkNFLmxvZyhleGNlcHRpb24pOworCQkJCX0KKwkJCX0KKwkJfTsKKworCS8qKgorCSAqIEhhbmRsZXMgYWN0aXZhdGlvbiBvZiB0aGUgZWRpdG9yIG9yIGl0J3MgYXNzb2NpYXRlZCB2aWV3cy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBoYW5kbGVBY3RpdmF0ZSgpIHsKKwkJLy8gUmVjb21wdXRlIHRoZSByZWFkIG9ubHkgc3RhdGUuCisJCS8vCisJCWlmIChlZGl0aW5nRG9tYWluLmdldFJlc291cmNlVG9SZWFkT25seU1hcCgpICE9IG51bGwpIHsKKwkJICBlZGl0aW5nRG9tYWluLmdldFJlc291cmNlVG9SZWFkT25seU1hcCgpLmNsZWFyKCk7CisKKwkJICAvLyBSZWZyZXNoIGFueSBhY3Rpb25zIHRoYXQgbWF5IGJlY29tZSBlbmFibGVkIG9yIGRpc2FibGVkLgorCQkgIC8vCisJCSAgc2V0U2VsZWN0aW9uKGdldFNlbGVjdGlvbigpKTsKKwkJfQorCisJCWlmICghcmVtb3ZlZFJlc291cmNlcy5pc0VtcHR5KCkpIHsKKwkJCWlmIChoYW5kbGVEaXJ0eUNvbmZsaWN0KCkpIHsKKwkJCQlnZXRTaXRlKCkuZ2V0UGFnZSgpLmNsb3NlRWRpdG9yKE1vZGlmaWVyRWRpdG9yLnRoaXMsIGZhbHNlKTsKKwkJCX0KKwkJCWVsc2UgeworCQkJCXJlbW92ZWRSZXNvdXJjZXMuY2xlYXIoKTsKKwkJCQljaGFuZ2VkUmVzb3VyY2VzLmNsZWFyKCk7CisJCQkJc2F2ZWRSZXNvdXJjZXMuY2xlYXIoKTsKKwkJCX0KKwkJfQorCQllbHNlIGlmICghY2hhbmdlZFJlc291cmNlcy5pc0VtcHR5KCkpIHsKKwkJCWNoYW5nZWRSZXNvdXJjZXMucmVtb3ZlQWxsKHNhdmVkUmVzb3VyY2VzKTsKKwkJCWhhbmRsZUNoYW5nZWRSZXNvdXJjZXMoKTsKKwkJCWNoYW5nZWRSZXNvdXJjZXMuY2xlYXIoKTsKKwkJCXNhdmVkUmVzb3VyY2VzLmNsZWFyKCk7CisJCX0KKwl9CisKKwkvKioKKwkgKiBIYW5kbGVzIHdoYXQgdG8gZG8gd2l0aCBjaGFuZ2VkIHJlc291cmNlcyBvbiBhY3RpdmF0aW9uLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIGhhbmRsZUNoYW5nZWRSZXNvdXJjZXMoKSB7CisJCWlmICghY2hhbmdlZFJlc291cmNlcy5pc0VtcHR5KCkgJiYgKCFpc0RpcnR5KCkgfHwgaGFuZGxlRGlydHlDb25mbGljdCgpKSkgeworCQkJaWYgKGlzRGlydHkoKSkgeworCQkJCWNoYW5nZWRSZXNvdXJjZXMuYWRkQWxsKGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKS5nZXRSZXNvdXJjZXMoKSk7CisJCQl9CisJCQllZGl0aW5nRG9tYWluLmdldENvbW1hbmRTdGFjaygpLmZsdXNoKCk7CisKKwkJCXVwZGF0ZVByb2JsZW1JbmRpY2F0aW9uID0gZmFsc2U7CisJCQlmb3IgKFJlc291cmNlIHJlc291cmNlIDogY2hhbmdlZFJlc291cmNlcykgeworCQkJCWlmIChyZXNvdXJjZS5pc0xvYWRlZCgpKSB7CisJCQkJCXJlc291cmNlLnVubG9hZCgpOworCQkJCQl0cnkgeworCQkJCQkJcmVzb3VyY2UubG9hZChDb2xsZWN0aW9ucy5FTVBUWV9NQVApOworCQkJCQl9CisJCQkJCWNhdGNoIChJT0V4Y2VwdGlvbiBleGNlcHRpb24pIHsKKwkJCQkJCWlmICghcmVzb3VyY2VUb0RpYWdub3N0aWNNYXAuY29udGFpbnNLZXkocmVzb3VyY2UpKSB7CisJCQkJCQkJcmVzb3VyY2VUb0RpYWdub3N0aWNNYXAucHV0KHJlc291cmNlLCBhbmFseXplUmVzb3VyY2VQcm9ibGVtcyhyZXNvdXJjZSwgZXhjZXB0aW9uKSk7CisJCQkJCQl9CisJCQkJCX0KKwkJCQl9CisJCQl9CisKKwkJCWlmIChBZGFwdGVyRmFjdG9yeUVkaXRpbmdEb21haW4uaXNTdGFsZShlZGl0b3JTZWxlY3Rpb24pKSB7CisJCQkJc2V0U2VsZWN0aW9uKFN0cnVjdHVyZWRTZWxlY3Rpb24uRU1QVFkpOworCQkJfQorCisJCQl1cGRhdGVQcm9ibGVtSW5kaWNhdGlvbiA9IHRydWU7CisJCQl1cGRhdGVQcm9ibGVtSW5kaWNhdGlvbigpOworCQl9CisJfQorICAKKwkvKioKKwkgKiBVcGRhdGVzIHRoZSBwcm9ibGVtcyBpbmRpY2F0aW9uIHdpdGggdGhlIGluZm9ybWF0aW9uIGRlc2NyaWJlZCBpbiB0aGUgc3BlY2lmaWVkIGRpYWdub3N0aWMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgdXBkYXRlUHJvYmxlbUluZGljYXRpb24oKSB7CisJCWlmICh1cGRhdGVQcm9ibGVtSW5kaWNhdGlvbikgeworCQkJQmFzaWNEaWFnbm9zdGljIGRpYWdub3N0aWMgPQorCQkJCW5ldyBCYXNpY0RpYWdub3N0aWMKKwkJCQkJKERpYWdub3N0aWMuT0ssCisJCQkJCSAib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmVkaXRvciIsIC8vJE5PTi1OTFMtMSQKKwkJCQkJIDAsCisJCQkJCSBudWxsLAorCQkJCQkgbmV3IE9iamVjdCBbXSB7IGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKSB9KTsKKwkJCWZvciAoRGlhZ25vc3RpYyBjaGlsZERpYWdub3N0aWMgOiByZXNvdXJjZVRvRGlhZ25vc3RpY01hcC52YWx1ZXMoKSkgeworCQkJCWlmIChjaGlsZERpYWdub3N0aWMuZ2V0U2V2ZXJpdHkoKSAhPSBEaWFnbm9zdGljLk9LKSB7CisJCQkJCWRpYWdub3N0aWMuYWRkKGNoaWxkRGlhZ25vc3RpYyk7CisJCQkJfQorCQkJfQorCisJCQlpbnQgbGFzdEVkaXRvclBhZ2UgPSBnZXRQYWdlQ291bnQoKSAtIDE7CisJCQlpZiAobGFzdEVkaXRvclBhZ2UgPj0gMCAmJiBnZXRFZGl0b3IobGFzdEVkaXRvclBhZ2UpIGluc3RhbmNlb2YgUHJvYmxlbUVkaXRvclBhcnQpIHsKKwkJCQkoKFByb2JsZW1FZGl0b3JQYXJ0KWdldEVkaXRvcihsYXN0RWRpdG9yUGFnZSkpLnNldERpYWdub3N0aWMoZGlhZ25vc3RpYyk7CisJCQkJaWYgKGRpYWdub3N0aWMuZ2V0U2V2ZXJpdHkoKSAhPSBEaWFnbm9zdGljLk9LKSB7CisJCQkJCXNldEFjdGl2ZVBhZ2UobGFzdEVkaXRvclBhZ2UpOworCQkJCX0KKwkJCX0KKwkJCWVsc2UgaWYgKGRpYWdub3N0aWMuZ2V0U2V2ZXJpdHkoKSAhPSBEaWFnbm9zdGljLk9LKSB7CisJCQkJUHJvYmxlbUVkaXRvclBhcnQgcHJvYmxlbUVkaXRvclBhcnQgPSBuZXcgUHJvYmxlbUVkaXRvclBhcnQoKTsKKwkJCQlwcm9ibGVtRWRpdG9yUGFydC5zZXREaWFnbm9zdGljKGRpYWdub3N0aWMpOworCQkJCXByb2JsZW1FZGl0b3JQYXJ0LnNldE1hcmtlckhlbHBlcihtYXJrZXJIZWxwZXIpOworCQkJCXRyeSB7CisJCQkJCWFkZFBhZ2UoKytsYXN0RWRpdG9yUGFnZSwgcHJvYmxlbUVkaXRvclBhcnQsIGdldEVkaXRvcklucHV0KCkpOworCQkJCQlzZXRQYWdlVGV4dChsYXN0RWRpdG9yUGFnZSwgcHJvYmxlbUVkaXRvclBhcnQuZ2V0UGFydE5hbWUoKSk7CisJCQkJCXNldEFjdGl2ZVBhZ2UobGFzdEVkaXRvclBhZ2UpOworCQkJCQlzaG93VGFicygpOworCQkJCX0KKwkJCQljYXRjaCAoUGFydEluaXRFeGNlcHRpb24gZXhjZXB0aW9uKSB7CisJCQkJCUNvcmVFZGl0b3JQbHVnaW4uSU5TVEFOQ0UubG9nKGV4Y2VwdGlvbik7CisJCQkJfQorCQkJfQorCisJCQlpZiAobWFya2VySGVscGVyLmhhc01hcmtlcnMoZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpKSkgeworCQkJCW1hcmtlckhlbHBlci5kZWxldGVNYXJrZXJzKGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKSk7CisJCQkJaWYgKGRpYWdub3N0aWMuZ2V0U2V2ZXJpdHkoKSAhPSBEaWFnbm9zdGljLk9LKSB7CisJCQkJCXRyeSB7CisJCQkJCQltYXJrZXJIZWxwZXIuY3JlYXRlTWFya2VycyhkaWFnbm9zdGljKTsKKwkJCQkJfQorCQkJCQljYXRjaCAoQ29yZUV4Y2VwdGlvbiBleGNlcHRpb24pIHsKKwkJCQkJCUNvcmVFZGl0b3JQbHVnaW4uSU5TVEFOQ0UubG9nKGV4Y2VwdGlvbik7CisJCQkJCX0KKwkJCQl9CisJCQl9CisJCX0KKwl9CisKKwkvKioKKwkgKiBTaG93cyBhIGRpYWxvZyB0aGF0IGFza3MgaWYgY29uZmxpY3RpbmcgY2hhbmdlcyBzaG91bGQgYmUgZGlzY2FyZGVkLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBib29sZWFuIGhhbmRsZURpcnR5Q29uZmxpY3QoKSB7CisJCXJldHVybgorCQkJTWVzc2FnZURpYWxvZy5vcGVuUXVlc3Rpb24KKwkJCQkoZ2V0U2l0ZSgpLmdldFNoZWxsKCksCisJCQkJIGdldFN0cmluZygiX1VJX0ZpbGVDb25mbGljdF9sYWJlbCIpLCAvLyROT04tTkxTLTEkCisJCQkJIGdldFN0cmluZygiX1dBUk5fRmlsZUNvbmZsaWN0IikpOyAvLyROT04tTkxTLTEkCisJfQorCisJLyoqCisJICogVGhpcyBjcmVhdGVzIGEgbW9kZWwgZWRpdG9yLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBNb2RpZmllckVkaXRvcigpIHsKKwkJc3VwZXIoKTsKKwkJaW5pdGlhbGl6ZUVkaXRpbmdEb21haW4oKTsKKwl9CisJCisJLyoqCisJICogVGhpcyBzZXRzIHVwIHRoZSBlZGl0aW5nIGRvbWFpbiBmb3IgdGhlIG1vZGVsIGVkaXRvci4gPCEtLSBiZWdpbi11c2VyLWRvYworCSAqIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCXByb3RlY3RlZCB2b2lkIGluaXRpYWxpemVFZGl0aW5nRG9tYWluKCkgeworCQlpbml0aWFsaXplRWRpdGluZ0RvbWFpbkdlbigpOworCQllZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkuZ2V0UmVzb3VyY2VGYWN0b3J5UmVnaXN0cnkoKQorCQkJCS5nZXRFeHRlbnNpb25Ub0ZhY3RvcnlNYXAoKS5wdXQoIioiLAorCQkJCQkJU1RFTVhNSVJlc291cmNlRmFjdG9yeUltcGwuSU5TVEFOQ0UpOworCisJCWVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKS5nZXRSZXNvdXJjZUZhY3RvcnlSZWdpc3RyeSgpCisJCQkJLmdldFByb3RvY29sVG9GYWN0b3J5TWFwKCkucHV0KCJwbGF0Zm9ybSIsCisJCQkJCQlTVEVNWE1JUmVzb3VyY2VGYWN0b3J5SW1wbC5JTlNUQU5DRSk7CisJfSAvLyBpbml0aWFsaXplRWRpdGluZ0RvbWFpbgorCisJLyoqCisJICogVGhpcyBzZXRzIHVwIHRoZSBlZGl0aW5nIGRvbWFpbiBmb3IgdGhlIG1vZGVsIGVkaXRvci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBpbml0aWFsaXplRWRpdGluZ0RvbWFpbkdlbigpIHsKKwkJLy8gQ3JlYXRlIGFuIGFkYXB0ZXIgZmFjdG9yeSB0aGF0IHlpZWxkcyBpdGVtIHByb3ZpZGVycy4KKwkJLy8KKwkJYWRhcHRlckZhY3RvcnkgPSBuZXcgQ29tcG9zZWRBZGFwdGVyRmFjdG9yeShDb21wb3NlZEFkYXB0ZXJGYWN0b3J5LkRlc2NyaXB0b3IuUmVnaXN0cnkuSU5TVEFOQ0UpOworCisJCWFkYXB0ZXJGYWN0b3J5LmFkZEFkYXB0ZXJGYWN0b3J5KG5ldyBSZXNvdXJjZUl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5KCkpOworCQlhZGFwdGVyRmFjdG9yeS5hZGRBZGFwdGVyRmFjdG9yeShuZXcgQ29tbW9uSXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkoKSk7CisJCWFkYXB0ZXJGYWN0b3J5LmFkZEFkYXB0ZXJGYWN0b3J5KG5ldyBFeHBlcmltZW50SXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkoKSk7CisJCWFkYXB0ZXJGYWN0b3J5LmFkZEFkYXB0ZXJGYWN0b3J5KG5ldyBHcmFwaEl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5KCkpOworCQlhZGFwdGVyRmFjdG9yeS5hZGRBZGFwdGVyRmFjdG9yeShuZXcgTW9kZWxJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSgpKTsKKwkJYWRhcHRlckZhY3RvcnkuYWRkQWRhcHRlckZhY3RvcnkobmV3IE1vZGlmaWVySXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkoKSk7CisJCWFkYXB0ZXJGYWN0b3J5LmFkZEFkYXB0ZXJGYWN0b3J5KG5ldyBQcmVkaWNhdGVJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSgpKTsKKwkJYWRhcHRlckZhY3RvcnkuYWRkQWRhcHRlckZhY3RvcnkobmV3IFNjZW5hcmlvSXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkoKSk7CisJCWFkYXB0ZXJGYWN0b3J5LmFkZEFkYXB0ZXJGYWN0b3J5KG5ldyBTZXF1ZW5jZXJJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSgpKTsKKwkJYWRhcHRlckZhY3RvcnkuYWRkQWRhcHRlckZhY3RvcnkobmV3IFRyaWdnZXJJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSgpKTsKKwkJYWRhcHRlckZhY3RvcnkuYWRkQWRhcHRlckZhY3RvcnkobmV3IFNvbHZlckl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5KCkpOworCQlhZGFwdGVyRmFjdG9yeS5hZGRBZGFwdGVyRmFjdG9yeShuZXcgTG9nZ2VySXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkoKSk7CisJCWFkYXB0ZXJGYWN0b3J5LmFkZEFkYXB0ZXJGYWN0b3J5KG5ldyBFY29yZUl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5KCkpOworCQlhZGFwdGVyRmFjdG9yeS5hZGRBZGFwdGVyRmFjdG9yeShuZXcgUmVmbGVjdGl2ZUl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5KCkpOworCisJCS8vIENyZWF0ZSB0aGUgY29tbWFuZCBzdGFjayB0aGF0IHdpbGwgbm90aWZ5IHRoaXMgZWRpdG9yIGFzIGNvbW1hbmRzIGFyZSBleGVjdXRlZC4KKwkJLy8KKwkJQmFzaWNDb21tYW5kU3RhY2sgY29tbWFuZFN0YWNrID0gbmV3IEJhc2ljQ29tbWFuZFN0YWNrKCk7CisKKwkJLy8gQWRkIGEgbGlzdGVuZXIgdG8gc2V0IHRoZSBtb3N0IHJlY2VudCBjb21tYW5kJ3MgYWZmZWN0ZWQgb2JqZWN0cyB0byBiZSB0aGUgc2VsZWN0aW9uIG9mIHRoZSB2aWV3ZXIgd2l0aCBmb2N1cy4KKwkJLy8KKwkJY29tbWFuZFN0YWNrLmFkZENvbW1hbmRTdGFja0xpc3RlbmVyCisJCQkobmV3IENvbW1hbmRTdGFja0xpc3RlbmVyKCkgeworCQkJCSBwdWJsaWMgdm9pZCBjb21tYW5kU3RhY2tDaGFuZ2VkKGZpbmFsIEV2ZW50T2JqZWN0IGV2ZW50KSB7CisJCQkJCSBnZXRDb250YWluZXIoKS5nZXREaXNwbGF5KCkuYXN5bmNFeGVjCisJCQkJCQkgKG5ldyBSdW5uYWJsZSgpIHsKKwkJCQkJCQkgIHB1YmxpYyB2b2lkIHJ1bigpIHsKKwkJCQkJCQkJICBmaXJlUHJvcGVydHlDaGFuZ2UoSUVkaXRvclBhcnQuUFJPUF9ESVJUWSk7CisKKwkJCQkJCQkJICAvLyBUcnkgdG8gc2VsZWN0IHRoZSBhZmZlY3RlZCBvYmplY3RzLgorCQkJCQkJCQkgIC8vCisJCQkJCQkJCSAgQ29tbWFuZCBtb3N0UmVjZW50Q29tbWFuZCA9ICgoQ29tbWFuZFN0YWNrKWV2ZW50LmdldFNvdXJjZSgpKS5nZXRNb3N0UmVjZW50Q29tbWFuZCgpOworCQkJCQkJCQkgIGlmIChtb3N0UmVjZW50Q29tbWFuZCAhPSBudWxsKSB7CisJCQkJCQkJCQkgIHNldFNlbGVjdGlvblRvVmlld2VyKG1vc3RSZWNlbnRDb21tYW5kLmdldEFmZmVjdGVkT2JqZWN0cygpKTsKKwkJCQkJCQkJICB9CisJCQkJCQkJCSAgaWYgKHByb3BlcnR5U2hlZXRQYWdlICE9IG51bGwgJiYgIXByb3BlcnR5U2hlZXRQYWdlLmdldENvbnRyb2woKS5pc0Rpc3Bvc2VkKCkpIHsKKwkJCQkJCQkJCSAgcHJvcGVydHlTaGVldFBhZ2UucmVmcmVzaCgpOworCQkJCQkJCQkgIH0KKwkJCQkJCQkgIH0KKwkJCQkJCSAgfSk7CisJCQkJIH0KKwkJCSB9KTsKKworCQkvLyBDcmVhdGUgdGhlIGVkaXRpbmcgZG9tYWluIHdpdGggYSBzcGVjaWFsIGNvbW1hbmQgc3RhY2suCisJCS8vCisJCWVkaXRpbmdEb21haW4gPSBuZXcgQWRhcHRlckZhY3RvcnlFZGl0aW5nRG9tYWluKGFkYXB0ZXJGYWN0b3J5LCBjb21tYW5kU3RhY2ssIG5ldyBIYXNoTWFwPFJlc291cmNlLCBCb29sZWFuPigpKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGlzIGhlcmUgZm9yIHRoZSBsaXN0ZW5lciB0byBiZSBhYmxlIHRvIGNhbGwgaXQuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJCQlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgdm9pZCBmaXJlUHJvcGVydHlDaGFuZ2UoaW50IGFjdGlvbikgeworCQlzdXBlci5maXJlUHJvcGVydHlDaGFuZ2UoYWN0aW9uKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHNldHMgdGhlIHNlbGVjdGlvbiBpbnRvIHdoaWNoZXZlciB2aWV3ZXIgaXMgYWN0aXZlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIHNldFNlbGVjdGlvblRvVmlld2VyKENvbGxlY3Rpb248Pz4gY29sbGVjdGlvbikgeworCQlmaW5hbCBDb2xsZWN0aW9uPD8+IHRoZVNlbGVjdGlvbiA9IGNvbGxlY3Rpb247CisJCS8vIE1ha2Ugc3VyZSBpdCdzIG9rYXkuCisJCS8vCisJCWlmICh0aGVTZWxlY3Rpb24gIT0gbnVsbCAmJiAhdGhlU2VsZWN0aW9uLmlzRW1wdHkoKSkgeworCQkJUnVubmFibGUgcnVubmFibGUgPQorCQkJCW5ldyBSdW5uYWJsZSgpIHsKKwkJCQkJcHVibGljIHZvaWQgcnVuKCkgeworCQkJCQkJLy8gVHJ5IHRvIHNlbGVjdCB0aGUgaXRlbXMgaW4gdGhlIGN1cnJlbnQgY29udGVudCB2aWV3ZXIgb2YgdGhlIGVkaXRvci4KKwkJCQkJCS8vCisJCQkJCQlpZiAoY3VycmVudFZpZXdlciAhPSBudWxsKSB7CisJCQkJCQkJY3VycmVudFZpZXdlci5zZXRTZWxlY3Rpb24obmV3IFN0cnVjdHVyZWRTZWxlY3Rpb24odGhlU2VsZWN0aW9uLnRvQXJyYXkoKSksIHRydWUpOworCQkJCQkJfQorCQkJCQl9CisJCQkJfTsKKwkJCWdldFNpdGUoKS5nZXRTaGVsbCgpLmdldERpc3BsYXkoKS5hc3luY0V4ZWMocnVubmFibGUpOworCQl9CisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIHRoZSBlZGl0aW5nIGRvbWFpbiBhcyByZXF1aXJlZCBieSB0aGUge0BsaW5rIElFZGl0aW5nRG9tYWluUHJvdmlkZXJ9IGludGVyZmFjZS4KKwkgKiBUaGlzIGlzIGltcG9ydGFudCBmb3IgaW1wbGVtZW50aW5nIHRoZSBzdGF0aWMgbWV0aG9kcyBvZiB7QGxpbmsgQWRhcHRlckZhY3RvcnlFZGl0aW5nRG9tYWlufQorCSAqIGFuZCBmb3Igc3VwcG9ydGluZyB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkuYWN0aW9uLkNvbW1hbmRBY3Rpb259LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFZGl0aW5nRG9tYWluIGdldEVkaXRpbmdEb21haW4oKSB7CisJCXJldHVybiBlZGl0aW5nRG9tYWluOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBjbGFzcyBSZXZlcnNlQWRhcHRlckZhY3RvcnlDb250ZW50UHJvdmlkZXIgZXh0ZW5kcyBBZGFwdGVyRmFjdG9yeUNvbnRlbnRQcm92aWRlciB7CisJCS8qKgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJcHVibGljIFJldmVyc2VBZGFwdGVyRmFjdG9yeUNvbnRlbnRQcm92aWRlcihBZGFwdGVyRmFjdG9yeSBhZGFwdGVyRmFjdG9yeSkgeworCQkJc3VwZXIoYWRhcHRlckZhY3RvcnkpOworCQl9CisKKwkJLyoqCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlAT3ZlcnJpZGUKKwkJcHVibGljIE9iamVjdCBbXSBnZXRFbGVtZW50cyhPYmplY3Qgb2JqZWN0KSB7CisJCQlPYmplY3QgcGFyZW50ID0gc3VwZXIuZ2V0UGFyZW50KG9iamVjdCk7CisJCQlyZXR1cm4gKHBhcmVudCA9PSBudWxsID8gQ29sbGVjdGlvbnMuRU1QVFlfU0VUIDogQ29sbGVjdGlvbnMuc2luZ2xldG9uKHBhcmVudCkpLnRvQXJyYXkoKTsKKwkJfQorCisJCS8qKgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJQE92ZXJyaWRlCisJCXB1YmxpYyBPYmplY3QgW10gZ2V0Q2hpbGRyZW4oT2JqZWN0IG9iamVjdCkgeworCQkJT2JqZWN0IHBhcmVudCA9IHN1cGVyLmdldFBhcmVudChvYmplY3QpOworCQkJcmV0dXJuIChwYXJlbnQgPT0gbnVsbCA/IENvbGxlY3Rpb25zLkVNUFRZX1NFVCA6IENvbGxlY3Rpb25zLnNpbmdsZXRvbihwYXJlbnQpKS50b0FycmF5KCk7CisJCX0KKworCQkvKioKKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUBPdmVycmlkZQorCQlwdWJsaWMgYm9vbGVhbiBoYXNDaGlsZHJlbihPYmplY3Qgb2JqZWN0KSB7CisJCQlPYmplY3QgcGFyZW50ID0gc3VwZXIuZ2V0UGFyZW50KG9iamVjdCk7CisJCQlyZXR1cm4gcGFyZW50ICE9IG51bGw7CisJCX0KKworCQkvKioKKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUBPdmVycmlkZQorCQlwdWJsaWMgT2JqZWN0IGdldFBhcmVudChPYmplY3Qgb2JqZWN0KSB7CisJCQlyZXR1cm4gbnVsbDsKKwkJfQorCX0KKworCS8qKgorCSAqIFRoaXMgbWFrZXMgc3VyZSB0aGF0IG9uZSBjb250ZW50IHZpZXdlciwgZWl0aGVyIGZvciB0aGUgY3VycmVudCBwYWdlIG9yIHRoZSBvdXRsaW5lIHZpZXcsIGlmIGl0IGhhcyBmb2N1cywKKwkgKiBpcyB0aGUgY3VycmVudCBvbmUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgc2V0Q3VycmVudFZpZXdlcihWaWV3ZXIgdmlld2VyKSB7CisJCS8vIElmIGl0IGlzIGNoYW5naW5nLi4uCisJCS8vCisJCWlmIChjdXJyZW50Vmlld2VyICE9IHZpZXdlcikgeworCQkJaWYgKHNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lciA9PSBudWxsKSB7CisJCQkJLy8gQ3JlYXRlIHRoZSBsaXN0ZW5lciBvbiBkZW1hbmQuCisJCQkJLy8KKwkJCQlzZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIgPQorCQkJCQluZXcgSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcigpIHsKKwkJCQkJCS8vIFRoaXMganVzdCBub3RpZmllcyB0aG9zZSB0aGluZ3MgdGhhdCBhcmUgYWZmZWN0ZWQgYnkgdGhlIHNlY3Rpb24uCisJCQkJCQkvLworCQkJCQkJcHVibGljIHZvaWQgc2VsZWN0aW9uQ2hhbmdlZChTZWxlY3Rpb25DaGFuZ2VkRXZlbnQgc2VsZWN0aW9uQ2hhbmdlZEV2ZW50KSB7CisJCQkJCQkJc2V0U2VsZWN0aW9uKHNlbGVjdGlvbkNoYW5nZWRFdmVudC5nZXRTZWxlY3Rpb24oKSk7CisJCQkJCQl9CisJCQkJCX07CisJCQl9CisKKwkJCS8vIFN0b3AgbGlzdGVuaW5nIHRvIHRoZSBvbGQgb25lLgorCQkJLy8KKwkJCWlmIChjdXJyZW50Vmlld2VyICE9IG51bGwpIHsKKwkJCQljdXJyZW50Vmlld2VyLnJlbW92ZVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcihzZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIpOworCQkJfQorCisJCQkvLyBTdGFydCBsaXN0ZW5pbmcgdG8gdGhlIG5ldyBvbmUuCisJCQkvLworCQkJaWYgKHZpZXdlciAhPSBudWxsKSB7CisJCQkJdmlld2VyLmFkZFNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcihzZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIpOworCQkJfQorCisJCQkvLyBSZW1lbWJlciBpdC4KKwkJCS8vCisJCQljdXJyZW50Vmlld2VyID0gdmlld2VyOworCisJCQkvLyBTZXQgdGhlIGVkaXRvcnMgc2VsZWN0aW9uIGJhc2VkIG9uIHRoZSBjdXJyZW50IHZpZXdlcidzIHNlbGVjdGlvbi4KKwkJCS8vCisJCQlzZXRTZWxlY3Rpb24oY3VycmVudFZpZXdlciA9PSBudWxsID8gU3RydWN0dXJlZFNlbGVjdGlvbi5FTVBUWSA6IGN1cnJlbnRWaWV3ZXIuZ2V0U2VsZWN0aW9uKCkpOworCQl9CisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIHRoZSB2aWV3ZXIgYXMgcmVxdWlyZWQgYnkgdGhlIHtAbGluayBJVmlld2VyUHJvdmlkZXJ9IGludGVyZmFjZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVmlld2VyIGdldFZpZXdlcigpIHsKKwkJcmV0dXJuIGN1cnJlbnRWaWV3ZXI7CisJfQorCisJLyoqCisJICogVGhpcyBjcmVhdGVzIGEgY29udGV4dCBtZW51IGZvciB0aGUgdmlld2VyIGFuZCBhZGRzIGEgbGlzdGVuZXIgYXMgd2VsbCByZWdpc3RlcmluZyB0aGUgbWVudSBmb3IgZXh0ZW5zaW9uLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBjcmVhdGVDb250ZXh0TWVudUZvcihTdHJ1Y3R1cmVkVmlld2VyIHZpZXdlcikgeworCQlNZW51TWFuYWdlciBjb250ZXh0TWVudSA9IG5ldyBNZW51TWFuYWdlcigiI1BvcFVwIik7IC8vJE5PTi1OTFMtMSQKKwkJY29udGV4dE1lbnUuYWRkKG5ldyBTZXBhcmF0b3IoImFkZGl0aW9ucyIpKTsgLy8kTk9OLU5MUy0xJAorCQljb250ZXh0TWVudS5zZXRSZW1vdmVBbGxXaGVuU2hvd24odHJ1ZSk7CisJCWNvbnRleHRNZW51LmFkZE1lbnVMaXN0ZW5lcih0aGlzKTsKKwkJTWVudSBtZW51PSBjb250ZXh0TWVudS5jcmVhdGVDb250ZXh0TWVudSh2aWV3ZXIuZ2V0Q29udHJvbCgpKTsKKwkJdmlld2VyLmdldENvbnRyb2woKS5zZXRNZW51KG1lbnUpOworCQlnZXRTaXRlKCkucmVnaXN0ZXJDb250ZXh0TWVudShjb250ZXh0TWVudSwgdmlld2VyKTsKKworCQlpbnQgZG5kT3BlcmF0aW9ucyA9IERORC5EUk9QX0NPUFkgfCBETkQuRFJPUF9NT1ZFIHwgRE5ELkRST1BfTElOSzsKKwkJVHJhbnNmZXJbXSB0cmFuc2ZlcnMgPSBuZXcgVHJhbnNmZXJbXSB7IExvY2FsU2VsZWN0aW9uVHJhbnNmZXIuZ2V0VHJhbnNmZXIoKSwgTG9jYWxUcmFuc2Zlci5nZXRJbnN0YW5jZSgpIH07CisJCXZpZXdlci5hZGREcmFnU3VwcG9ydChkbmRPcGVyYXRpb25zLCB0cmFuc2ZlcnMsIG5ldyBWaWV3ZXJEcmFnQWRhcHRlcih2aWV3ZXIpKTsKKwkJdmlld2VyLmFkZERyb3BTdXBwb3J0KGRuZE9wZXJhdGlvbnMsIHRyYW5zZmVycywgbmV3IEVkaXRpbmdEb21haW5WaWV3ZXJEcm9wQWRhcHRlcihlZGl0aW5nRG9tYWluLCB2aWV3ZXIpKTsKKwl9IC8vIGNyZWF0ZUNvbnRleHRNZW51Rm9yCisJCisJLyoqCisJICogVGhpcyBjcmVhdGVzIGEgY29udGV4dCBtZW51IGZvciB0aGUgdmlld2VyIGFuZCBhZGRzIGEgbGlzdGVuZXIgYXMgd2VsbCByZWdpc3RlcmluZyB0aGUgbWVudSBmb3IgZXh0ZW5zaW9uLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIGNyZWF0ZUNvbnRleHRNZW51Rm9yR2VuKFN0cnVjdHVyZWRWaWV3ZXIgdmlld2VyKSB7CisJCU1lbnVNYW5hZ2VyIGNvbnRleHRNZW51ID0gbmV3IE1lbnVNYW5hZ2VyKCIjUG9wVXAiKTsgLy8kTk9OLU5MUy0xJAorCQljb250ZXh0TWVudS5hZGQobmV3IFNlcGFyYXRvcigiYWRkaXRpb25zIikpOyAvLyROT04tTkxTLTEkCisJCWNvbnRleHRNZW51LnNldFJlbW92ZUFsbFdoZW5TaG93bih0cnVlKTsKKwkJY29udGV4dE1lbnUuYWRkTWVudUxpc3RlbmVyKHRoaXMpOworCQlNZW51IG1lbnU9IGNvbnRleHRNZW51LmNyZWF0ZUNvbnRleHRNZW51KHZpZXdlci5nZXRDb250cm9sKCkpOworCQl2aWV3ZXIuZ2V0Q29udHJvbCgpLnNldE1lbnUobWVudSk7CisJCWdldFNpdGUoKS5yZWdpc3RlckNvbnRleHRNZW51KGNvbnRleHRNZW51LCBuZXcgVW53cmFwcGluZ1NlbGVjdGlvblByb3ZpZGVyKHZpZXdlcikpOworCisJCWludCBkbmRPcGVyYXRpb25zID0gRE5ELkRST1BfQ09QWSB8IERORC5EUk9QX01PVkUgfCBETkQuRFJPUF9MSU5LOworCQlUcmFuc2ZlcltdIHRyYW5zZmVycyA9IG5ldyBUcmFuc2ZlcltdIHsgTG9jYWxUcmFuc2Zlci5nZXRJbnN0YW5jZSgpIH07CisJCXZpZXdlci5hZGREcmFnU3VwcG9ydChkbmRPcGVyYXRpb25zLCB0cmFuc2ZlcnMsIG5ldyBWaWV3ZXJEcmFnQWRhcHRlcih2aWV3ZXIpKTsKKwkJdmlld2VyLmFkZERyb3BTdXBwb3J0KGRuZE9wZXJhdGlvbnMsIHRyYW5zZmVycywgbmV3IEVkaXRpbmdEb21haW5WaWV3ZXJEcm9wQWRhcHRlcihlZGl0aW5nRG9tYWluLCB2aWV3ZXIpKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGlzIHRoZSBtZXRob2QgY2FsbGVkIHRvIGxvYWQgYSByZXNvdXJjZSBpbnRvIHRoZSBlZGl0aW5nIGRvbWFpbidzIHJlc291cmNlIHNldCBiYXNlZCBvbiB0aGUgZWRpdG9yJ3MgaW5wdXQuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgY3JlYXRlTW9kZWwoKSB7CisJCVVSSSByZXNvdXJjZVVSSSA9IEVkaXRVSVV0aWwuZ2V0VVJJKGdldEVkaXRvcklucHV0KCkpOworCQlFeGNlcHRpb24gZXhjZXB0aW9uID0gbnVsbDsKKwkJUmVzb3VyY2UgcmVzb3VyY2UgPSBudWxsOworCQl0cnkgeworCQkJLy8gTG9hZCB0aGUgcmVzb3VyY2UgdGhyb3VnaCB0aGUgZWRpdGluZyBkb21haW4uCisJCQkvLworCQkJcmVzb3VyY2UgPSBlZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkuZ2V0UmVzb3VyY2UocmVzb3VyY2VVUkksIHRydWUpOworCQl9CisJCWNhdGNoIChFeGNlcHRpb24gZSkgeworCQkJZXhjZXB0aW9uID0gZTsKKwkJCXJlc291cmNlID0gZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpLmdldFJlc291cmNlKHJlc291cmNlVVJJLCBmYWxzZSk7CisJCX0KKworCQlEaWFnbm9zdGljIGRpYWdub3N0aWMgPSBhbmFseXplUmVzb3VyY2VQcm9ibGVtcyhyZXNvdXJjZSwgZXhjZXB0aW9uKTsKKwkJaWYgKGRpYWdub3N0aWMuZ2V0U2V2ZXJpdHkoKSAhPSBEaWFnbm9zdGljLk9LKSB7CisJCQlyZXNvdXJjZVRvRGlhZ25vc3RpY01hcC5wdXQocmVzb3VyY2UsICBhbmFseXplUmVzb3VyY2VQcm9ibGVtcyhyZXNvdXJjZSwgZXhjZXB0aW9uKSk7CisJCX0KKwkJZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpLmVBZGFwdGVycygpLmFkZChwcm9ibGVtSW5kaWNhdGlvbkFkYXB0ZXIpOworCX0KKworCS8qKgorCSAqIFJldHVybnMgYSBkaWFnbm9zdGljIGRlc2NyaWJpbmcgdGhlIGVycm9ycyBhbmQgd2FybmluZ3MgbGlzdGVkIGluIHRoZSByZXNvdXJjZQorCSAqIGFuZCB0aGUgc3BlY2lmaWVkIGV4Y2VwdGlvbiAoaWYgYW55KS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRGlhZ25vc3RpYyBhbmFseXplUmVzb3VyY2VQcm9ibGVtcyhSZXNvdXJjZSByZXNvdXJjZSwgRXhjZXB0aW9uIGV4Y2VwdGlvbikgeworCQlpZiAoIXJlc291cmNlLmdldEVycm9ycygpLmlzRW1wdHkoKSB8fCAhcmVzb3VyY2UuZ2V0V2FybmluZ3MoKS5pc0VtcHR5KCkpIHsKKwkJCUJhc2ljRGlhZ25vc3RpYyBiYXNpY0RpYWdub3N0aWMgPQorCQkJCW5ldyBCYXNpY0RpYWdub3N0aWMKKwkJCQkJKERpYWdub3N0aWMuRVJST1IsCisJCQkJCSAib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmVkaXRvciIsIC8vJE5PTi1OTFMtMSQKKwkJCQkJIDAsCisJCQkJCSBnZXRTdHJpbmcoIl9VSV9DcmVhdGVNb2RlbEVycm9yX21lc3NhZ2UiLCByZXNvdXJjZS5nZXRVUkkoKSksIC8vJE5PTi1OTFMtMSQKKwkJCQkJIG5ldyBPYmplY3QgW10geyBleGNlcHRpb24gPT0gbnVsbCA/IChPYmplY3QpcmVzb3VyY2UgOiBleGNlcHRpb24gfSk7CisJCQliYXNpY0RpYWdub3N0aWMubWVyZ2UoRWNvcmVVdGlsLmNvbXB1dGVEaWFnbm9zdGljKHJlc291cmNlLCB0cnVlKSk7CisJCQlyZXR1cm4gYmFzaWNEaWFnbm9zdGljOworCQl9CisJCWVsc2UgaWYgKGV4Y2VwdGlvbiAhPSBudWxsKSB7CisJCQlyZXR1cm4KKwkJCQluZXcgQmFzaWNEaWFnbm9zdGljCisJCQkJCShEaWFnbm9zdGljLkVSUk9SLAorCQkJCQkgIm9yZy5lY2xpcHNlLnN0ZW0uY29yZS5lZGl0b3IiLCAvLyROT04tTkxTLTEkCisJCQkJCSAwLAorCQkJCQkgZ2V0U3RyaW5nKCJfVUlfQ3JlYXRlTW9kZWxFcnJvcl9tZXNzYWdlIiwgcmVzb3VyY2UuZ2V0VVJJKCkpLCAvLyROT04tTkxTLTEkCisJCQkJCSBuZXcgT2JqZWN0W10geyBleGNlcHRpb24gfSk7CisJCX0KKwkJZWxzZSB7CisJCQlyZXR1cm4gRGlhZ25vc3RpYy5PS19JTlNUQU5DRTsKKwkJfQorCX0KKworCS8qKgorCSAqIFRoaXMgaXMgdGhlIG1ldGhvZCB1c2VkIGJ5IHRoZSBmcmFtZXdvcmsgdG8gaW5zdGFsbCB5b3VyIG93biBjb250cm9scy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgY3JlYXRlUGFnZXMoKSB7CisJCS8vIENyZWF0ZXMgdGhlIG1vZGVsIGZyb20gdGhlIGVkaXRvciBpbnB1dAorCQkvLworCQljcmVhdGVNb2RlbCgpOworCisJCS8vIE9ubHkgY3JlYXRlcyB0aGUgb3RoZXIgcGFnZXMgaWYgdGhlcmUgaXMgc29tZXRoaW5nIHRoYXQgY2FuIGJlIGVkaXRlZAorCQkvLworCQlpZiAoIWdldEVkaXRpbmdEb21haW4oKS5nZXRSZXNvdXJjZVNldCgpLmdldFJlc291cmNlcygpLmlzRW1wdHkoKSkgeworCQkJLy8gQ3JlYXRlIGEgcGFnZSBmb3IgdGhlIHNlbGVjdGlvbiB0cmVlIHZpZXcuCisJCQkvLworCQkJVHJlZSB0cmVlID0gbmV3IFRyZWUoZ2V0Q29udGFpbmVyKCksIFNXVC5NVUxUSSk7CisJCQlzZWxlY3Rpb25WaWV3ZXIgPSBuZXcgVHJlZVZpZXdlcih0cmVlKTsKKwkJCXNldEN1cnJlbnRWaWV3ZXIoc2VsZWN0aW9uVmlld2VyKTsKKworCQkJc2VsZWN0aW9uVmlld2VyLnNldENvbnRlbnRQcm92aWRlcihuZXcgQWRhcHRlckZhY3RvcnlDb250ZW50UHJvdmlkZXIoYWRhcHRlckZhY3RvcnkpKTsKKwkJCXNlbGVjdGlvblZpZXdlci5zZXRMYWJlbFByb3ZpZGVyKG5ldyBBZGFwdGVyRmFjdG9yeUxhYmVsUHJvdmlkZXIoYWRhcHRlckZhY3RvcnkpKTsKKwkJCS8vc2VsZWN0aW9uVmlld2VyLnNldElucHV0KGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKSk7CisJCQlzZWxlY3Rpb25WaWV3ZXIuc2V0SW5wdXQoZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpLmdldFJlc291cmNlcygpLmdldCgwKSk7CisJCQlzZWxlY3Rpb25WaWV3ZXIuc2V0U2VsZWN0aW9uKG5ldyBTdHJ1Y3R1cmVkU2VsZWN0aW9uKGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKS5nZXRSZXNvdXJjZXMoKS5nZXQoMCkpLCB0cnVlKTsKKworCQkJbmV3IEFkYXB0ZXJGYWN0b3J5VHJlZUVkaXRvcihzZWxlY3Rpb25WaWV3ZXIuZ2V0VHJlZSgpLCBhZGFwdGVyRmFjdG9yeSk7CisKKwkJCWNyZWF0ZUNvbnRleHRNZW51Rm9yKHNlbGVjdGlvblZpZXdlcik7CisJCQlpbnQgcGFnZUluZGV4ID0gYWRkUGFnZSh0cmVlKTsKKwkJCXNldFBhZ2VUZXh0KHBhZ2VJbmRleCwgZ2V0U3RyaW5nKCJfVUlfU2VsZWN0aW9uUGFnZV9sYWJlbCIpKTsgLy8kTk9OLU5MUy0xJAorCisJCQlnZXRTaXRlKCkuZ2V0U2hlbGwoKS5nZXREaXNwbGF5KCkuYXN5bmNFeGVjCisJCQkJKG5ldyBSdW5uYWJsZSgpIHsKKwkJCQkJIHB1YmxpYyB2b2lkIHJ1bigpIHsKKwkJCQkJCSBzZXRBY3RpdmVQYWdlKDApOworCQkJCQkgfQorCQkJCSB9KTsKKwkJfQorCisJCS8vIEVuc3VyZXMgdGhhdCB0aGlzIGVkaXRvciB3aWxsIG9ubHkgZGlzcGxheSB0aGUgcGFnZSdzIHRhYgorCQkvLyBhcmVhIGlmIHRoZXJlIGFyZSBtb3JlIHRoYW4gb25lIHBhZ2UKKwkJLy8KKwkJZ2V0Q29udGFpbmVyKCkuYWRkQ29udHJvbExpc3RlbmVyCisJCQkobmV3IENvbnRyb2xBZGFwdGVyKCkgeworCQkJCWJvb2xlYW4gZ3VhcmQgPSBmYWxzZTsKKwkJCQlAT3ZlcnJpZGUKKwkJCQlwdWJsaWMgdm9pZCBjb250cm9sUmVzaXplZChDb250cm9sRXZlbnQgZXZlbnQpIHsKKwkJCQkJaWYgKCFndWFyZCkgeworCQkJCQkJZ3VhcmQgPSB0cnVlOworCQkJCQkJaGlkZVRhYnMoKTsKKwkJCQkJCWd1YXJkID0gZmFsc2U7CisJCQkJCX0KKwkJCQl9CisJCQkgfSk7CisKKwkJZ2V0U2l0ZSgpLmdldFNoZWxsKCkuZ2V0RGlzcGxheSgpLmFzeW5jRXhlYworCQkJKG5ldyBSdW5uYWJsZSgpIHsKKwkJCQkgcHVibGljIHZvaWQgcnVuKCkgeworCQkJCQkgdXBkYXRlUHJvYmxlbUluZGljYXRpb24oKTsKKwkJCQkgfQorCQkJIH0pOworCX0KKworCS8qKgorCSAqIFRoaXMgaXMgdGhlIG1ldGhvZCB1c2VkIGJ5IHRoZSBmcmFtZXdvcmsgdG8gaW5zdGFsbCB5b3VyIG93biBjb250cm9scy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBjcmVhdGVQYWdlc0dlbigpIHsKKwkJLy8gQ3JlYXRlcyB0aGUgbW9kZWwgZnJvbSB0aGUgZWRpdG9yIGlucHV0CisJCS8vCisJCWNyZWF0ZU1vZGVsKCk7CisKKwkJLy8gT25seSBjcmVhdGVzIHRoZSBvdGhlciBwYWdlcyBpZiB0aGVyZSBpcyBzb21ldGhpbmcgdGhhdCBjYW4gYmUgZWRpdGVkCisJCS8vCisJCWlmICghZ2V0RWRpdGluZ0RvbWFpbigpLmdldFJlc291cmNlU2V0KCkuZ2V0UmVzb3VyY2VzKCkuaXNFbXB0eSgpKSB7CisJCQkvLyBDcmVhdGUgYSBwYWdlIGZvciB0aGUgc2VsZWN0aW9uIHRyZWUgdmlldy4KKwkJCS8vCisJCQlUcmVlIHRyZWUgPSBuZXcgVHJlZShnZXRDb250YWluZXIoKSwgU1dULk1VTFRJKTsKKwkJCXNlbGVjdGlvblZpZXdlciA9IG5ldyBUcmVlVmlld2VyKHRyZWUpOworCQkJc2V0Q3VycmVudFZpZXdlcihzZWxlY3Rpb25WaWV3ZXIpOworCisJCQlzZWxlY3Rpb25WaWV3ZXIuc2V0Q29udGVudFByb3ZpZGVyKG5ldyBBZGFwdGVyRmFjdG9yeUNvbnRlbnRQcm92aWRlcihhZGFwdGVyRmFjdG9yeSkpOworCQkJc2VsZWN0aW9uVmlld2VyLnNldExhYmVsUHJvdmlkZXIobmV3IEFkYXB0ZXJGYWN0b3J5TGFiZWxQcm92aWRlcihhZGFwdGVyRmFjdG9yeSkpOworCQkJc2VsZWN0aW9uVmlld2VyLnNldElucHV0KGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKSk7CisJCQlzZWxlY3Rpb25WaWV3ZXIuc2V0U2VsZWN0aW9uKG5ldyBTdHJ1Y3R1cmVkU2VsZWN0aW9uKGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKS5nZXRSZXNvdXJjZXMoKS5nZXQoMCkpLCB0cnVlKTsKKworCQkJbmV3IEFkYXB0ZXJGYWN0b3J5VHJlZUVkaXRvcihzZWxlY3Rpb25WaWV3ZXIuZ2V0VHJlZSgpLCBhZGFwdGVyRmFjdG9yeSk7CisKKwkJCWNyZWF0ZUNvbnRleHRNZW51Rm9yKHNlbGVjdGlvblZpZXdlcik7CisJCQlpbnQgcGFnZUluZGV4ID0gYWRkUGFnZSh0cmVlKTsKKwkJCXNldFBhZ2VUZXh0KHBhZ2VJbmRleCwgZ2V0U3RyaW5nKCJfVUlfU2VsZWN0aW9uUGFnZV9sYWJlbCIpKTsgLy8kTk9OLU5MUy0xJAorCisJCQlnZXRTaXRlKCkuZ2V0U2hlbGwoKS5nZXREaXNwbGF5KCkuYXN5bmNFeGVjCisJCQkJKG5ldyBSdW5uYWJsZSgpIHsKKwkJCQkJIHB1YmxpYyB2b2lkIHJ1bigpIHsKKwkJCQkJCSBzZXRBY3RpdmVQYWdlKDApOworCQkJCQkgfQorCQkJCSB9KTsKKwkJfQorCisJCS8vIEVuc3VyZXMgdGhhdCB0aGlzIGVkaXRvciB3aWxsIG9ubHkgZGlzcGxheSB0aGUgcGFnZSdzIHRhYgorCQkvLyBhcmVhIGlmIHRoZXJlIGFyZSBtb3JlIHRoYW4gb25lIHBhZ2UKKwkJLy8KKwkJZ2V0Q29udGFpbmVyKCkuYWRkQ29udHJvbExpc3RlbmVyCisJCQkobmV3IENvbnRyb2xBZGFwdGVyKCkgeworCQkJCWJvb2xlYW4gZ3VhcmQgPSBmYWxzZTsKKwkJCQlAT3ZlcnJpZGUKKwkJCQlwdWJsaWMgdm9pZCBjb250cm9sUmVzaXplZChDb250cm9sRXZlbnQgZXZlbnQpIHsKKwkJCQkJaWYgKCFndWFyZCkgeworCQkJCQkJZ3VhcmQgPSB0cnVlOworCQkJCQkJaGlkZVRhYnMoKTsKKwkJCQkJCWd1YXJkID0gZmFsc2U7CisJCQkJCX0KKwkJCQl9CisJCQkgfSk7CisKKwkJZ2V0U2l0ZSgpLmdldFNoZWxsKCkuZ2V0RGlzcGxheSgpLmFzeW5jRXhlYworCQkJKG5ldyBSdW5uYWJsZSgpIHsKKwkJCQkgcHVibGljIHZvaWQgcnVuKCkgeworCQkJCQkgdXBkYXRlUHJvYmxlbUluZGljYXRpb24oKTsKKwkJCQkgfQorCQkJIH0pOworCX0KKworCS8qKgorCSAqIElmIHRoZXJlIGlzIGp1c3Qgb25lIHBhZ2UgaW4gdGhlIG11bHRpLXBhZ2UgZWRpdG9yIHBhcnQsCisJICogdGhpcyBoaWRlcyB0aGUgc2luZ2xlIHRhYiBhdCB0aGUgYm90dG9tLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIGhpZGVUYWJzKCkgeworCQlpZiAoZ2V0UGFnZUNvdW50KCkgPD0gMSkgeworCQkJc2V0UGFnZVRleHQoMCwgIiIpOyAvLyROT04tTkxTLTEkCisJCQlpZiAoZ2V0Q29udGFpbmVyKCkgaW5zdGFuY2VvZiBDVGFiRm9sZGVyKSB7CisJCQkJKChDVGFiRm9sZGVyKWdldENvbnRhaW5lcigpKS5zZXRUYWJIZWlnaHQoMSk7CisJCQkJUG9pbnQgcG9pbnQgPSBnZXRDb250YWluZXIoKS5nZXRTaXplKCk7CisJCQkJZ2V0Q29udGFpbmVyKCkuc2V0U2l6ZShwb2ludC54LCBwb2ludC55ICsgNik7CisJCQl9CisJCX0KKwl9CisKKwkvKioKKwkgKiBJZiB0aGVyZSBpcyBtb3JlIHRoYW4gb25lIHBhZ2UgaW4gdGhlIG11bHRpLXBhZ2UgZWRpdG9yIHBhcnQsCisJICogdGhpcyBzaG93cyB0aGUgdGFicyBhdCB0aGUgYm90dG9tLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIHNob3dUYWJzKCkgeworCQlpZiAoZ2V0UGFnZUNvdW50KCkgPiAxKSB7CisJCQlzZXRQYWdlVGV4dCgwLCBnZXRTdHJpbmcoIl9VSV9TZWxlY3Rpb25QYWdlX2xhYmVsIikpOyAvLyROT04tTkxTLTEkCisJCQlpZiAoZ2V0Q29udGFpbmVyKCkgaW5zdGFuY2VvZiBDVGFiRm9sZGVyKSB7CisJCQkJKChDVGFiRm9sZGVyKWdldENvbnRhaW5lcigpKS5zZXRUYWJIZWlnaHQoU1dULkRFRkFVTFQpOworCQkJCVBvaW50IHBvaW50ID0gZ2V0Q29udGFpbmVyKCkuZ2V0U2l6ZSgpOworCQkJCWdldENvbnRhaW5lcigpLnNldFNpemUocG9pbnQueCwgcG9pbnQueSAtIDYpOworCQkJfQorCQl9CisJfQorCisJLyoqCisJICogVGhpcyBpcyB1c2VkIHRvIHRyYWNrIHRoZSBhY3RpdmUgdmlld2VyLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIHBhZ2VDaGFuZ2UoaW50IHBhZ2VJbmRleCkgeworCQlzdXBlci5wYWdlQ2hhbmdlKHBhZ2VJbmRleCk7CisKKwkJaWYgKGNvbnRlbnRPdXRsaW5lUGFnZSAhPSBudWxsKSB7CisJCQloYW5kbGVDb250ZW50T3V0bGluZVNlbGVjdGlvbihjb250ZW50T3V0bGluZVBhZ2UuZ2V0U2VsZWN0aW9uKCkpOworCQl9CisJfQorCisJLyoqCisJICogVGhpcyBpcyBob3cgdGhlIGZyYW1ld29yayBkZXRlcm1pbmVzIHdoaWNoIGludGVyZmFjZXMgd2UgaW1wbGVtZW50LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBTdXBwcmVzc1dhcm5pbmdzKCJ1bmNoZWNrZWQiKQorCUBPdmVycmlkZQorCXB1YmxpYyBPYmplY3QgZ2V0QWRhcHRlcihDbGFzcyBrZXkpIHsKKwkJaWYgKGtleS5lcXVhbHMoSUNvbnRlbnRPdXRsaW5lUGFnZS5jbGFzcykpIHsKKwkJCXJldHVybiBzaG93T3V0bGluZVZpZXcoKSA/IGdldENvbnRlbnRPdXRsaW5lUGFnZSgpIDogbnVsbDsKKwkJfQorCQllbHNlIGlmIChrZXkuZXF1YWxzKElQcm9wZXJ0eVNoZWV0UGFnZS5jbGFzcykpIHsKKwkJCXJldHVybiBnZXRQcm9wZXJ0eVNoZWV0UGFnZSgpOworCQl9CisJCWVsc2UgaWYgKGtleS5lcXVhbHMoSUdvdG9NYXJrZXIuY2xhc3MpKSB7CisJCQlyZXR1cm4gdGhpczsKKwkJfQorCQllbHNlIHsKKwkJCXJldHVybiBzdXBlci5nZXRBZGFwdGVyKGtleSk7CisJCX0KKwl9CisKKwkvKioKKwkgKiBUaGlzIGFjY2Vzc2VzIGEgY2FjaGVkIHZlcnNpb24gb2YgdGhlIGNvbnRlbnQgb3V0bGluZXIuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIElDb250ZW50T3V0bGluZVBhZ2UgZ2V0Q29udGVudE91dGxpbmVQYWdlKCkgeworCQlpZiAoY29udGVudE91dGxpbmVQYWdlID09IG51bGwpIHsKKwkJCS8vIFRoZSBjb250ZW50IG91dGxpbmUgaXMganVzdCBhIHRyZWUuCisJCQkvLworCQkJY2xhc3MgTXlDb250ZW50T3V0bGluZVBhZ2UgZXh0ZW5kcyBDb250ZW50T3V0bGluZVBhZ2UgeworCQkJCUBPdmVycmlkZQorCQkJCXB1YmxpYyB2b2lkIGNyZWF0ZUNvbnRyb2woQ29tcG9zaXRlIHBhcmVudCkgeworCQkJCQlzdXBlci5jcmVhdGVDb250cm9sKHBhcmVudCk7CisJCQkJCWNvbnRlbnRPdXRsaW5lVmlld2VyID0gZ2V0VHJlZVZpZXdlcigpOworCQkJCQljb250ZW50T3V0bGluZVZpZXdlci5hZGRTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIodGhpcyk7CisKKwkJCQkJLy8gU2V0IHVwIHRoZSB0cmVlIHZpZXdlci4KKwkJCQkJLy8KKwkJCQkJY29udGVudE91dGxpbmVWaWV3ZXIuc2V0Q29udGVudFByb3ZpZGVyKG5ldyBBZGFwdGVyRmFjdG9yeUNvbnRlbnRQcm92aWRlcihhZGFwdGVyRmFjdG9yeSkpOworCQkJCQljb250ZW50T3V0bGluZVZpZXdlci5zZXRMYWJlbFByb3ZpZGVyKG5ldyBBZGFwdGVyRmFjdG9yeUxhYmVsUHJvdmlkZXIoYWRhcHRlckZhY3RvcnkpKTsKKwkJCQkJY29udGVudE91dGxpbmVWaWV3ZXIuc2V0SW5wdXQoZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpKTsKKworCQkJCQkvLyBNYWtlIHN1cmUgb3VyIHBvcHVwcyB3b3JrLgorCQkJCQkvLworCQkJCQljcmVhdGVDb250ZXh0TWVudUZvcihjb250ZW50T3V0bGluZVZpZXdlcik7CisKKwkJCQkJaWYgKCFlZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkuZ2V0UmVzb3VyY2VzKCkuaXNFbXB0eSgpKSB7CisJCQkJCSAgLy8gU2VsZWN0IHRoZSByb290IG9iamVjdCBpbiB0aGUgdmlldy4KKwkJCQkJICAvLworCQkJCQkgIGNvbnRlbnRPdXRsaW5lVmlld2VyLnNldFNlbGVjdGlvbihuZXcgU3RydWN0dXJlZFNlbGVjdGlvbihlZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkuZ2V0UmVzb3VyY2VzKCkuZ2V0KDApKSwgdHJ1ZSk7CisJCQkJCX0KKwkJCQl9CisKKwkJCQlAT3ZlcnJpZGUKKwkJCQlwdWJsaWMgdm9pZCBtYWtlQ29udHJpYnV0aW9ucyhJTWVudU1hbmFnZXIgbWVudU1hbmFnZXIsIElUb29sQmFyTWFuYWdlciB0b29sQmFyTWFuYWdlciwgSVN0YXR1c0xpbmVNYW5hZ2VyIHN0YXR1c0xpbmVNYW5hZ2VyKSB7CisJCQkJCXN1cGVyLm1ha2VDb250cmlidXRpb25zKG1lbnVNYW5hZ2VyLCB0b29sQmFyTWFuYWdlciwgc3RhdHVzTGluZU1hbmFnZXIpOworCQkJCQljb250ZW50T3V0bGluZVN0YXR1c0xpbmVNYW5hZ2VyID0gc3RhdHVzTGluZU1hbmFnZXI7CisJCQkJfQorCisJCQkJQE92ZXJyaWRlCisJCQkJcHVibGljIHZvaWQgc2V0QWN0aW9uQmFycyhJQWN0aW9uQmFycyBhY3Rpb25CYXJzKSB7CisJCQkJCXN1cGVyLnNldEFjdGlvbkJhcnMoYWN0aW9uQmFycyk7CisJCQkJCWdldEFjdGlvbkJhckNvbnRyaWJ1dG9yKCkuc2hhcmVHbG9iYWxBY3Rpb25zKHRoaXMsIGFjdGlvbkJhcnMpOworCQkJCX0KKwkJCX0KKworCQkJY29udGVudE91dGxpbmVQYWdlID0gbmV3IE15Q29udGVudE91dGxpbmVQYWdlKCk7CisKKwkJCS8vIExpc3RlbiB0byBzZWxlY3Rpb24gc28gdGhhdCB3ZSBjYW4gaGFuZGxlIGl0IGlzIGEgc3BlY2lhbCB3YXkuCisJCQkvLworCQkJY29udGVudE91dGxpbmVQYWdlLmFkZFNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcgorCQkJCShuZXcgSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcigpIHsKKwkJCQkJIC8vIFRoaXMgZW5zdXJlcyB0aGF0IHdlIGhhbmRsZSBzZWxlY3Rpb25zIGNvcnJlY3RseS4KKwkJCQkJIC8vCisJCQkJCSBwdWJsaWMgdm9pZCBzZWxlY3Rpb25DaGFuZ2VkKFNlbGVjdGlvbkNoYW5nZWRFdmVudCBldmVudCkgeworCQkJCQkJIGhhbmRsZUNvbnRlbnRPdXRsaW5lU2VsZWN0aW9uKGV2ZW50LmdldFNlbGVjdGlvbigpKTsKKwkJCQkJIH0KKwkJCQkgfSk7CisJCX0KKworCQlyZXR1cm4gY29udGVudE91dGxpbmVQYWdlOworCX0KKworCS8qKgorCSAqIFRoaXMgYWNjZXNzZXMgYSBjYWNoZWQgdmVyc2lvbiBvZiB0aGUgcHJvcGVydHkgc2hlZXQuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIElQcm9wZXJ0eVNoZWV0UGFnZSBnZXRQcm9wZXJ0eVNoZWV0UGFnZSgpIHsKKwkJaWYgKHByb3BlcnR5U2hlZXRQYWdlID09IG51bGwpIHsKKwkJCXByb3BlcnR5U2hlZXRQYWdlID0KKwkJCQluZXcgRXh0ZW5kZWRQcm9wZXJ0eVNoZWV0UGFnZShlZGl0aW5nRG9tYWluKSB7CisJCQkJCUBPdmVycmlkZQorCQkJCQlwdWJsaWMgdm9pZCBzZXRTZWxlY3Rpb25Ub1ZpZXdlcihMaXN0PD8+IHNlbGVjdGlvbikgeworCQkJCQkJTW9kaWZpZXJFZGl0b3IudGhpcy5zZXRTZWxlY3Rpb25Ub1ZpZXdlcihzZWxlY3Rpb24pOworCQkJCQkJTW9kaWZpZXJFZGl0b3IudGhpcy5zZXRGb2N1cygpOworCQkJCQl9CisKKwkJCQkJQE92ZXJyaWRlCisJCQkJCXB1YmxpYyB2b2lkIHNldEFjdGlvbkJhcnMoSUFjdGlvbkJhcnMgYWN0aW9uQmFycykgeworCQkJCQkJc3VwZXIuc2V0QWN0aW9uQmFycyhhY3Rpb25CYXJzKTsKKwkJCQkJCWdldEFjdGlvbkJhckNvbnRyaWJ1dG9yKCkuc2hhcmVHbG9iYWxBY3Rpb25zKHRoaXMsIGFjdGlvbkJhcnMpOworCQkJCQl9CisJCQkJfTsKKwkJCXByb3BlcnR5U2hlZXRQYWdlLnNldFByb3BlcnR5U291cmNlUHJvdmlkZXIobmV3IEFkYXB0ZXJGYWN0b3J5Q29udGVudFByb3ZpZGVyKGFkYXB0ZXJGYWN0b3J5KSk7CisJCX0KKworCQlyZXR1cm4gcHJvcGVydHlTaGVldFBhZ2U7CisJfQorCisJLyoqCisJICogVGhpcyBkZWFscyB3aXRoIGhvdyB3ZSB3YW50IHNlbGVjdGlvbiBpbiB0aGUgb3V0bGluZXIgdG8gYWZmZWN0IHRoZSBvdGhlciB2aWV3cy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBoYW5kbGVDb250ZW50T3V0bGluZVNlbGVjdGlvbihJU2VsZWN0aW9uIHNlbGVjdGlvbikgeworCQlpZiAoc2VsZWN0aW9uVmlld2VyICE9IG51bGwgJiYgIXNlbGVjdGlvbi5pc0VtcHR5KCkgJiYgc2VsZWN0aW9uIGluc3RhbmNlb2YgSVN0cnVjdHVyZWRTZWxlY3Rpb24pIHsKKwkJCUl0ZXJhdG9yPD8+IHNlbGVjdGVkRWxlbWVudHMgPSAoKElTdHJ1Y3R1cmVkU2VsZWN0aW9uKXNlbGVjdGlvbikuaXRlcmF0b3IoKTsKKwkJCWlmIChzZWxlY3RlZEVsZW1lbnRzLmhhc05leHQoKSkgeworCQkJCS8vIEdldCB0aGUgZmlyc3Qgc2VsZWN0ZWQgZWxlbWVudC4KKwkJCQkvLworCQkJCU9iamVjdCBzZWxlY3RlZEVsZW1lbnQgPSBzZWxlY3RlZEVsZW1lbnRzLm5leHQoKTsKKworCQkJCUFycmF5TGlzdDxPYmplY3Q+IHNlbGVjdGlvbkxpc3QgPSBuZXcgQXJyYXlMaXN0PE9iamVjdD4oKTsKKwkJCQlzZWxlY3Rpb25MaXN0LmFkZChzZWxlY3RlZEVsZW1lbnQpOworCQkJCXdoaWxlIChzZWxlY3RlZEVsZW1lbnRzLmhhc05leHQoKSkgeworCQkJCQlzZWxlY3Rpb25MaXN0LmFkZChzZWxlY3RlZEVsZW1lbnRzLm5leHQoKSk7CisJCQkJfQorCisJCQkJLy8gU2V0IHRoZSBzZWxlY3Rpb24gdG8gdGhlIHdpZGdldC4KKwkJCQkvLworCQkJCXNlbGVjdGlvblZpZXdlci5zZXRTZWxlY3Rpb24obmV3IFN0cnVjdHVyZWRTZWxlY3Rpb24oc2VsZWN0aW9uTGlzdCkpOworCQkJfQorCQl9CisJfQorCisJLyoqCisJICogVGhpcyBpcyBmb3IgaW1wbGVtZW50aW5nIHtAbGluayBJRWRpdG9yUGFydH0gYW5kIHNpbXBseSB0ZXN0cyB0aGUgY29tbWFuZCBzdGFjay4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgYm9vbGVhbiBpc0RpcnR5KCkgeworCQlyZXR1cm4gKChCYXNpY0NvbW1hbmRTdGFjayllZGl0aW5nRG9tYWluLmdldENvbW1hbmRTdGFjaygpKS5pc1NhdmVOZWVkZWQoKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGlzIGZvciBpbXBsZW1lbnRpbmcge0BsaW5rIElFZGl0b3JQYXJ0fSBhbmQgc2ltcGx5IHNhdmVzIHRoZSBtb2RlbCBmaWxlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGRvU2F2ZShJUHJvZ3Jlc3NNb25pdG9yIHByb2dyZXNzTW9uaXRvcikgeworCQkvLyBTYXZlIG9ubHkgcmVzb3VyY2VzIHRoYXQgaGF2ZSBhY3R1YWxseSBjaGFuZ2VkLgorCQkvLworCQlmaW5hbCBNYXA8T2JqZWN0LCBPYmplY3Q+IHNhdmVPcHRpb25zID0gbmV3IEhhc2hNYXA8T2JqZWN0LCBPYmplY3Q+KCk7CisJCXNhdmVPcHRpb25zLnB1dChSZXNvdXJjZS5PUFRJT05fU0FWRV9PTkxZX0lGX0NIQU5HRUQsIFJlc291cmNlLk9QVElPTl9TQVZFX09OTFlfSUZfQ0hBTkdFRF9NRU1PUllfQlVGRkVSKTsKKworCQkvLyBEbyB0aGUgd29yayB3aXRoaW4gYW4gb3BlcmF0aW9uIGJlY2F1c2UgdGhpcyBpcyBhIGxvbmcgcnVubmluZyBhY3Rpdml0eSB0aGF0IG1vZGlmaWVzIHRoZSB3b3JrYmVuY2guCisJCS8vCisJCVdvcmtzcGFjZU1vZGlmeU9wZXJhdGlvbiBvcGVyYXRpb24gPQorCQkJbmV3IFdvcmtzcGFjZU1vZGlmeU9wZXJhdGlvbigpIHsKKwkJCQkvLyBUaGlzIGlzIHRoZSBtZXRob2QgdGhhdCBnZXRzIGludm9rZWQgd2hlbiB0aGUgb3BlcmF0aW9uIHJ1bnMuCisJCQkJLy8KKwkJCQlAT3ZlcnJpZGUKKwkJCQlwdWJsaWMgdm9pZCBleGVjdXRlKElQcm9ncmVzc01vbml0b3IgbW9uaXRvcikgeworCQkJCQkvLyBTYXZlIHRoZSByZXNvdXJjZXMgdG8gdGhlIGZpbGUgc3lzdGVtLgorCQkJCQkvLworCQkJCQlib29sZWFuIGZpcnN0ID0gdHJ1ZTsKKwkJCQkJZm9yIChSZXNvdXJjZSByZXNvdXJjZSA6IGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKS5nZXRSZXNvdXJjZXMoKSkgeworCQkJCQkJaWYgKChmaXJzdCB8fCAhcmVzb3VyY2UuZ2V0Q29udGVudHMoKS5pc0VtcHR5KCkgfHwgaXNQZXJzaXN0ZWQocmVzb3VyY2UpKSAmJiAhZWRpdGluZ0RvbWFpbi5pc1JlYWRPbmx5KHJlc291cmNlKSkgeworCQkJCQkJCXRyeSB7CisJCQkJCQkJCWxvbmcgdGltZVN0YW1wID0gcmVzb3VyY2UuZ2V0VGltZVN0YW1wKCk7CisJCQkJCQkJCXJlc291cmNlLnNhdmUoc2F2ZU9wdGlvbnMpOworCQkJCQkJCQlpZiAocmVzb3VyY2UuZ2V0VGltZVN0YW1wKCkgIT0gdGltZVN0YW1wKSB7CisJCQkJCQkJCQlzYXZlZFJlc291cmNlcy5hZGQocmVzb3VyY2UpOworCQkJCQkJCQl9CisJCQkJCQkJfQorCQkJCQkJCWNhdGNoIChFeGNlcHRpb24gZXhjZXB0aW9uKSB7CisJCQkJCQkJCXJlc291cmNlVG9EaWFnbm9zdGljTWFwLnB1dChyZXNvdXJjZSwgYW5hbHl6ZVJlc291cmNlUHJvYmxlbXMocmVzb3VyY2UsIGV4Y2VwdGlvbikpOworCQkJCQkJCX0KKwkJCQkJCQlmaXJzdCA9IGZhbHNlOworCQkJCQkJfQorCQkJCQl9CisJCQkJfQorCQkJfTsKKworCQl1cGRhdGVQcm9ibGVtSW5kaWNhdGlvbiA9IGZhbHNlOworCQl0cnkgeworCQkJLy8gVGhpcyBydW5zIHRoZSBvcHRpb25zLCBhbmQgc2hvd3MgcHJvZ3Jlc3MuCisJCQkvLworCQkJbmV3IFByb2dyZXNzTW9uaXRvckRpYWxvZyhnZXRTaXRlKCkuZ2V0U2hlbGwoKSkucnVuKHRydWUsIGZhbHNlLCBvcGVyYXRpb24pOworCisJCQkvLyBSZWZyZXNoIHRoZSBuZWNlc3Nhcnkgc3RhdGUuCisJCQkvLworCQkJKChCYXNpY0NvbW1hbmRTdGFjayllZGl0aW5nRG9tYWluLmdldENvbW1hbmRTdGFjaygpKS5zYXZlSXNEb25lKCk7CisJCQlmaXJlUHJvcGVydHlDaGFuZ2UoSUVkaXRvclBhcnQuUFJPUF9ESVJUWSk7CisJCX0KKwkJY2F0Y2ggKEV4Y2VwdGlvbiBleGNlcHRpb24pIHsKKwkJCS8vIFNvbWV0aGluZyB3ZW50IHdyb25nIHRoYXQgc2hvdWxkbid0LgorCQkJLy8KKwkJCUNvcmVFZGl0b3JQbHVnaW4uSU5TVEFOQ0UubG9nKGV4Y2VwdGlvbik7CisJCX0KKwkJdXBkYXRlUHJvYmxlbUluZGljYXRpb24gPSB0cnVlOworCQl1cGRhdGVQcm9ibGVtSW5kaWNhdGlvbigpOworCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyB3aGV0aGVyIHNvbWV0aGluZyBoYXMgYmVlbiBwZXJzaXN0ZWQgdG8gdGhlIFVSSSBvZiB0aGUgc3BlY2lmaWVkIHJlc291cmNlLgorCSAqIFRoZSBpbXBsZW1lbnRhdGlvbiB1c2VzIHRoZSBVUkkgY29udmVydGVyIGZyb20gdGhlIGVkaXRvcidzIHJlc291cmNlIHNldCB0byB0cnkgdG8gb3BlbiBhbiBpbnB1dCBzdHJlYW0uIAorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBib29sZWFuIGlzUGVyc2lzdGVkKFJlc291cmNlIHJlc291cmNlKSB7CisJCWJvb2xlYW4gcmVzdWx0ID0gZmFsc2U7CisJCXRyeSB7CisJCQlJbnB1dFN0cmVhbSBzdHJlYW0gPSBlZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkuZ2V0VVJJQ29udmVydGVyKCkuY3JlYXRlSW5wdXRTdHJlYW0ocmVzb3VyY2UuZ2V0VVJJKCkpOworCQkJaWYgKHN0cmVhbSAhPSBudWxsKSB7CisJCQkJcmVzdWx0ID0gdHJ1ZTsKKwkJCQlzdHJlYW0uY2xvc2UoKTsKKwkJCX0KKwkJfQorCQljYXRjaCAoSU9FeGNlcHRpb24gZSkgeworCQkJLy8gSWdub3JlCisJCX0KKwkJcmV0dXJuIHJlc3VsdDsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFsd2F5cyByZXR1cm5zIHRydWUgYmVjYXVzZSBpdCBpcyBub3QgY3VycmVudGx5IHN1cHBvcnRlZC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgYm9vbGVhbiBpc1NhdmVBc0FsbG93ZWQoKSB7CisJCXJldHVybiB0cnVlOworCX0KKworCS8qKgorCSAqIFRoaXMgYWxzbyBjaGFuZ2VzIHRoZSBlZGl0b3IncyBpbnB1dC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBkb1NhdmVBcygpIHsKKwkJU2F2ZUFzRGlhbG9nIHNhdmVBc0RpYWxvZyA9IG5ldyBTYXZlQXNEaWFsb2coZ2V0U2l0ZSgpLmdldFNoZWxsKCkpOworCQlzYXZlQXNEaWFsb2cub3BlbigpOworCQlJUGF0aCBwYXRoID0gc2F2ZUFzRGlhbG9nLmdldFJlc3VsdCgpOworCQlpZiAocGF0aCAhPSBudWxsKSB7CisJCQlJRmlsZSBmaWxlID0gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmdldFJvb3QoKS5nZXRGaWxlKHBhdGgpOworCQkJaWYgKGZpbGUgIT0gbnVsbCkgeworCQkJCWRvU2F2ZUFzKFVSSS5jcmVhdGVQbGF0Zm9ybVJlc291cmNlVVJJKGZpbGUuZ2V0RnVsbFBhdGgoKS50b1N0cmluZygpLCB0cnVlKSwgbmV3IEZpbGVFZGl0b3JJbnB1dChmaWxlKSk7CisJCQl9CisJCX0KKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBkb1NhdmVBcyhVUkkgdXJpLCBJRWRpdG9ySW5wdXQgZWRpdG9ySW5wdXQpIHsKKwkJKGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKS5nZXRSZXNvdXJjZXMoKS5nZXQoMCkpLnNldFVSSSh1cmkpOworCQlzZXRJbnB1dFdpdGhOb3RpZnkoZWRpdG9ySW5wdXQpOworCQlzZXRQYXJ0TmFtZShlZGl0b3JJbnB1dC5nZXROYW1lKCkpOworCQlJUHJvZ3Jlc3NNb25pdG9yIHByb2dyZXNzTW9uaXRvciA9CisJCQlnZXRBY3Rpb25CYXJzKCkuZ2V0U3RhdHVzTGluZU1hbmFnZXIoKSAhPSBudWxsID8KKwkJCQlnZXRBY3Rpb25CYXJzKCkuZ2V0U3RhdHVzTGluZU1hbmFnZXIoKS5nZXRQcm9ncmVzc01vbml0b3IoKSA6CisJCQkJbmV3IE51bGxQcm9ncmVzc01vbml0b3IoKTsKKwkJZG9TYXZlKHByb2dyZXNzTW9uaXRvcik7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgZ290b01hcmtlcihJTWFya2VyIG1hcmtlcikgeworCQl0cnkgeworCQkJaWYgKG1hcmtlci5nZXRUeXBlKCkuZXF1YWxzKEVWYWxpZGF0b3IuTUFSS0VSKSkgeworCQkJCVN0cmluZyB1cmlBdHRyaWJ1dGUgPSBtYXJrZXIuZ2V0QXR0cmlidXRlKEVWYWxpZGF0b3IuVVJJX0FUVFJJQlVURSwgbnVsbCk7CisJCQkJaWYgKHVyaUF0dHJpYnV0ZSAhPSBudWxsKSB7CisJCQkJCVVSSSB1cmkgPSBVUkkuY3JlYXRlVVJJKHVyaUF0dHJpYnV0ZSk7CisJCQkJCUVPYmplY3QgZU9iamVjdCA9IGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKS5nZXRFT2JqZWN0KHVyaSwgdHJ1ZSk7CisJCQkJCWlmIChlT2JqZWN0ICE9IG51bGwpIHsKKwkJCQkJICBzZXRTZWxlY3Rpb25Ub1ZpZXdlcihDb2xsZWN0aW9ucy5zaW5nbGV0b24oZWRpdGluZ0RvbWFpbi5nZXRXcmFwcGVyKGVPYmplY3QpKSk7CisJCQkJCX0KKwkJCQl9CisJCQl9CisJCX0KKwkJY2F0Y2ggKENvcmVFeGNlcHRpb24gZXhjZXB0aW9uKSB7CisJCQlDb3JlRWRpdG9yUGx1Z2luLklOU1RBTkNFLmxvZyhleGNlcHRpb24pOworCQl9CisJfQorCisJLyoqCisJICogVGhpcyBpcyBjYWxsZWQgZHVyaW5nIHN0YXJ0dXAuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgaW5pdChJRWRpdG9yU2l0ZSBzaXRlLCBJRWRpdG9ySW5wdXQgZWRpdG9ySW5wdXQpIHsKKwkJc2V0U2l0ZShzaXRlKTsKKwkJc2V0SW5wdXRXaXRoTm90aWZ5KGVkaXRvcklucHV0KTsKKwkJc2V0UGFydE5hbWUoZWRpdG9ySW5wdXQuZ2V0TmFtZSgpKTsKKwkJc2l0ZS5zZXRTZWxlY3Rpb25Qcm92aWRlcih0aGlzKTsKKwkJc2l0ZS5nZXRQYWdlKCkuYWRkUGFydExpc3RlbmVyKHBhcnRMaXN0ZW5lcik7CisJCVJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5hZGRSZXNvdXJjZUNoYW5nZUxpc3RlbmVyKHJlc291cmNlQ2hhbmdlTGlzdGVuZXIsIElSZXNvdXJjZUNoYW5nZUV2ZW50LlBPU1RfQ0hBTkdFKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBzZXRGb2N1cygpIHsKKwkJZ2V0Q29udHJvbChnZXRBY3RpdmVQYWdlKCkpLnNldEZvY3VzKCk7CisJfQorCisJLyoqCisJICogVGhpcyBpbXBsZW1lbnRzIHtAbGluayBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb25Qcm92aWRlcn0uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgYWRkU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyKElTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIgbGlzdGVuZXIpIHsKKwkJc2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVycy5hZGQobGlzdGVuZXIpOworCX0KKworCS8qKgorCSAqIFRoaXMgaW1wbGVtZW50cyB7QGxpbmsgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uUHJvdmlkZXJ9LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIHJlbW92ZVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcihJU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyIGxpc3RlbmVyKSB7CisJCXNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcnMucmVtb3ZlKGxpc3RlbmVyKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGltcGxlbWVudHMge0BsaW5rIG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvblByb3ZpZGVyfSB0byByZXR1cm4gdGhpcyBlZGl0b3IncyBvdmVyYWxsIHNlbGVjdGlvbi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgSVNlbGVjdGlvbiBnZXRTZWxlY3Rpb24oKSB7CisJCXJldHVybiBlZGl0b3JTZWxlY3Rpb247CisJfQorCisJLyoqCisJICogVGhpcyBpbXBsZW1lbnRzIHtAbGluayBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb25Qcm92aWRlcn0gdG8gc2V0IHRoaXMgZWRpdG9yJ3Mgb3ZlcmFsbCBzZWxlY3Rpb24uCisJICogQ2FsbGluZyB0aGlzIHJlc3VsdCB3aWxsIG5vdGlmeSB0aGUgbGlzdGVuZXJzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIHNldFNlbGVjdGlvbihJU2VsZWN0aW9uIHNlbGVjdGlvbikgeworCQllZGl0b3JTZWxlY3Rpb24gPSBzZWxlY3Rpb247CisKKwkJZm9yIChJU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyIGxpc3RlbmVyIDogc2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVycykgeworCQkJbGlzdGVuZXIuc2VsZWN0aW9uQ2hhbmdlZChuZXcgU2VsZWN0aW9uQ2hhbmdlZEV2ZW50KHRoaXMsIHNlbGVjdGlvbikpOworCQl9CisJCXNldFN0YXR1c0xpbmVNYW5hZ2VyKHNlbGVjdGlvbik7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgc2V0U3RhdHVzTGluZU1hbmFnZXIoSVNlbGVjdGlvbiBzZWxlY3Rpb24pIHsKKwkJSVN0YXR1c0xpbmVNYW5hZ2VyIHN0YXR1c0xpbmVNYW5hZ2VyID0gY3VycmVudFZpZXdlciAhPSBudWxsICYmIGN1cnJlbnRWaWV3ZXIgPT0gY29udGVudE91dGxpbmVWaWV3ZXIgPworCQkJY29udGVudE91dGxpbmVTdGF0dXNMaW5lTWFuYWdlciA6IGdldEFjdGlvbkJhcnMoKS5nZXRTdGF0dXNMaW5lTWFuYWdlcigpOworCisJCWlmIChzdGF0dXNMaW5lTWFuYWdlciAhPSBudWxsKSB7CisJCQlpZiAoc2VsZWN0aW9uIGluc3RhbmNlb2YgSVN0cnVjdHVyZWRTZWxlY3Rpb24pIHsKKwkJCQlDb2xsZWN0aW9uPD8+IGNvbGxlY3Rpb24gPSAoKElTdHJ1Y3R1cmVkU2VsZWN0aW9uKXNlbGVjdGlvbikudG9MaXN0KCk7CisJCQkJc3dpdGNoIChjb2xsZWN0aW9uLnNpemUoKSkgeworCQkJCQljYXNlIDA6IHsKKwkJCQkJCXN0YXR1c0xpbmVNYW5hZ2VyLnNldE1lc3NhZ2UoZ2V0U3RyaW5nKCJfVUlfTm9PYmplY3RTZWxlY3RlZCIpKTsgLy8kTk9OLU5MUy0xJAorCQkJCQkJYnJlYWs7CisJCQkJCX0KKwkJCQkJY2FzZSAxOiB7CisJCQkJCQlTdHJpbmcgdGV4dCA9IG5ldyBBZGFwdGVyRmFjdG9yeUl0ZW1EZWxlZ2F0b3IoYWRhcHRlckZhY3RvcnkpLmdldFRleHQoY29sbGVjdGlvbi5pdGVyYXRvcigpLm5leHQoKSk7CisJCQkJCQlzdGF0dXNMaW5lTWFuYWdlci5zZXRNZXNzYWdlKGdldFN0cmluZygiX1VJX1NpbmdsZU9iamVjdFNlbGVjdGVkIiwgdGV4dCkpOyAvLyROT04tTkxTLTEkCisJCQkJCQlicmVhazsKKwkJCQkJfQorCQkJCQlkZWZhdWx0OiB7CisJCQkJCQlzdGF0dXNMaW5lTWFuYWdlci5zZXRNZXNzYWdlKGdldFN0cmluZygiX1VJX011bHRpT2JqZWN0U2VsZWN0ZWQiLCBJbnRlZ2VyLnRvU3RyaW5nKGNvbGxlY3Rpb24uc2l6ZSgpKSkpOyAvLyROT04tTkxTLTEkCisJCQkJCQlicmVhazsKKwkJCQkJfQorCQkJCX0KKwkJCX0KKwkJCWVsc2UgeworCQkJCXN0YXR1c0xpbmVNYW5hZ2VyLnNldE1lc3NhZ2UoIiIpOyAvLyROT04tTkxTLTEkCisJCQl9CisJCX0KKwl9CisKKwkvKioKKwkgKiBUaGlzIGxvb2tzIHVwIGEgc3RyaW5nIGluIHRoZSBwbHVnaW4ncyBwbHVnaW4ucHJvcGVydGllcyBmaWxlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByaXZhdGUgc3RhdGljIFN0cmluZyBnZXRTdHJpbmcoU3RyaW5nIGtleSkgeworCQlyZXR1cm4gQ29yZUVkaXRvclBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoa2V5KTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGxvb2tzIHVwIGEgc3RyaW5nIGluIHBsdWdpbi5wcm9wZXJ0aWVzLCBtYWtpbmcgYSBzdWJzdGl0dXRpb24uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIGdldFN0cmluZyhTdHJpbmcga2V5LCBPYmplY3QgczEpIHsKKwkJcmV0dXJuIENvcmVFZGl0b3JQbHVnaW4uSU5TVEFOQ0UuZ2V0U3RyaW5nKGtleSwgbmV3IE9iamVjdCBbXSB7IHMxIH0pOworCX0KKworCS8qKgorCSAqIFRoaXMgaW1wbGVtZW50cyB7QGxpbmsgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklNZW51TGlzdGVuZXJ9IHRvIGhlbHAgZmlsbCB0aGUgY29udGV4dCBtZW51cyB3aXRoIGNvbnRyaWJ1dGlvbnMgZnJvbSB0aGUgRWRpdCBtZW51LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIG1lbnVBYm91dFRvU2hvdyhJTWVudU1hbmFnZXIgbWVudU1hbmFnZXIpIHsKKwkJKChJTWVudUxpc3RlbmVyKWdldEVkaXRvclNpdGUoKS5nZXRBY3Rpb25CYXJDb250cmlidXRvcigpKS5tZW51QWJvdXRUb1Nob3cobWVudU1hbmFnZXIpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFZGl0aW5nRG9tYWluQWN0aW9uQmFyQ29udHJpYnV0b3IgZ2V0QWN0aW9uQmFyQ29udHJpYnV0b3IoKSB7CisJCXJldHVybiAoRWRpdGluZ0RvbWFpbkFjdGlvbkJhckNvbnRyaWJ1dG9yKWdldEVkaXRvclNpdGUoKS5nZXRBY3Rpb25CYXJDb250cmlidXRvcigpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBJQWN0aW9uQmFycyBnZXRBY3Rpb25CYXJzKCkgeworCQlyZXR1cm4gZ2V0QWN0aW9uQmFyQ29udHJpYnV0b3IoKS5nZXRBY3Rpb25CYXJzKCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEFkYXB0ZXJGYWN0b3J5IGdldEFkYXB0ZXJGYWN0b3J5KCkgeworCQlyZXR1cm4gYWRhcHRlckZhY3Rvcnk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgZGlzcG9zZSgpIHsKKwkJdXBkYXRlUHJvYmxlbUluZGljYXRpb24gPSBmYWxzZTsKKworCQlSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkucmVtb3ZlUmVzb3VyY2VDaGFuZ2VMaXN0ZW5lcihyZXNvdXJjZUNoYW5nZUxpc3RlbmVyKTsKKworCQlnZXRTaXRlKCkuZ2V0UGFnZSgpLnJlbW92ZVBhcnRMaXN0ZW5lcihwYXJ0TGlzdGVuZXIpOworCisJCWFkYXB0ZXJGYWN0b3J5LmRpc3Bvc2UoKTsKKworCQlpZiAoZ2V0QWN0aW9uQmFyQ29udHJpYnV0b3IoKS5nZXRBY3RpdmVFZGl0b3IoKSA9PSB0aGlzKSB7CisJCQlnZXRBY3Rpb25CYXJDb250cmlidXRvcigpLnNldEFjdGl2ZUVkaXRvcihudWxsKTsKKwkJfQorCisJCWlmIChwcm9wZXJ0eVNoZWV0UGFnZSAhPSBudWxsKSB7CisJCQlwcm9wZXJ0eVNoZWV0UGFnZS5kaXNwb3NlKCk7CisJCX0KKworCQlpZiAoY29udGVudE91dGxpbmVQYWdlICE9IG51bGwpIHsKKwkJCWNvbnRlbnRPdXRsaW5lUGFnZS5kaXNwb3NlKCk7CisJCX0KKworCQlzdXBlci5kaXNwb3NlKCk7CisJfQorCisJLyoqCisJICogUmV0dXJucyB3aGV0aGVyIHRoZSBvdXRsaW5lIHZpZXcgc2hvdWxkIGJlIHByZXNlbnRlZCB0byB0aGUgdXNlci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgYm9vbGVhbiBzaG93T3V0bGluZVZpZXcoKSB7CisJCXJldHVybiBmYWxzZTsKKwl9Cit9CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9wcmVkaWNhdGUvcHJlc2VudGF0aW9uL1ByZWRpY2F0ZUFjdGlvbkJhckNvbnRyaWJ1dG9yLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9wcmVkaWNhdGUvcHJlc2VudGF0aW9uL1ByZWRpY2F0ZUFjdGlvbkJhckNvbnRyaWJ1dG9yLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjEyZDIxYgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3ByZWRpY2F0ZS9wcmVzZW50YXRpb24vUHJlZGljYXRlQWN0aW9uQmFyQ29udHJpYnV0b3IuamF2YQpAQCAtMCwwICsxLDQzMSBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlLnByZXNlbnRhdGlvbjsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OworaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51aS52aWV3ZXIuSVZpZXdlclByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LmRvbWFpbi5FZGl0aW5nRG9tYWluOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LmRvbWFpbi5JRWRpdGluZ0RvbWFpblByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmFjdGlvbi5Db250cm9sQWN0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmFjdGlvbi5DcmVhdGVDaGlsZEFjdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5hY3Rpb24uQ3JlYXRlU2libGluZ0FjdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5hY3Rpb24uRWRpdGluZ0RvbWFpbkFjdGlvbkJhckNvbnRyaWJ1dG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmFjdGlvbi5Mb2FkUmVzb3VyY2VBY3Rpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkuYWN0aW9uLlZhbGlkYXRlQWN0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5BY3Rpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLkFjdGlvbkNvbnRyaWJ1dGlvbkl0ZW07CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklBY3Rpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklDb250cmlidXRpb25JdGVtOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JQ29udHJpYnV0aW9uTWFuYWdlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSU1lbnVMaXN0ZW5lcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSU1lbnVNYW5hZ2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JVG9vbEJhck1hbmFnZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLk1lbnVNYW5hZ2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5TZXBhcmF0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLlN1YkNvbnRyaWJ1dGlvbkl0ZW07CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb25Qcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTdHJ1Y3R1cmVkU2VsZWN0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuU2VsZWN0aW9uQ2hhbmdlZEV2ZW50OworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuVmlld2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24ucHJlc2VudGF0aW9uLkNvcmVFZGl0b3JQbHVnaW47CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuSUVkaXRvclBhcnQ7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuUGFydEluaXRFeGNlcHRpb247CisKKy8qKgorICogVGhpcyBpcyB0aGUgYWN0aW9uIGJhciBjb250cmlidXRvciBmb3IgdGhlIFByZWRpY2F0ZSBtb2RlbCBlZGl0b3IuCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK0BTdXBwcmVzc1dhcm5pbmdzKCJhbGwiKQorcHVibGljIGNsYXNzIFByZWRpY2F0ZUFjdGlvbkJhckNvbnRyaWJ1dG9yCisJZXh0ZW5kcyBFZGl0aW5nRG9tYWluQWN0aW9uQmFyQ29udHJpYnV0b3IKKwlpbXBsZW1lbnRzIElTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIgeworCS8qKgorCSAqIFRoaXMga2VlcHMgdHJhY2sgb2YgdGhlIGFjdGl2ZSBlZGl0b3IuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIElFZGl0b3JQYXJ0IGFjdGl2ZUVkaXRvclBhcnQ7CisKKwkvKioKKwkgKiBUaGlzIGtlZXBzIHRyYWNrIG9mIHRoZSBjdXJyZW50IHNlbGVjdGlvbiBwcm92aWRlci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgSVNlbGVjdGlvblByb3ZpZGVyIHNlbGVjdGlvblByb3ZpZGVyOworCisJLyoqCisJICogVGhpcyBhY3Rpb24gb3BlbnMgdGhlIFByb3BlcnRpZXMgdmlldy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgSUFjdGlvbiBzaG93UHJvcGVydGllc1ZpZXdBY3Rpb24gPQorCQluZXcgQWN0aW9uKENvcmVFZGl0b3JQbHVnaW4uSU5TVEFOQ0UuZ2V0U3RyaW5nKCJfVUlfU2hvd1Byb3BlcnRpZXNWaWV3X21lbnVfaXRlbSIpKSAvLyROT04tTkxTLTEkCisJCXsKKwkJCUBPdmVycmlkZQorCQkJcHVibGljIHZvaWQgcnVuKCkgeworCQkJCXRyeSB7CisJCQkJCWdldFBhZ2UoKS5zaG93Vmlldygib3JnLmVjbGlwc2UudWkudmlld3MuUHJvcGVydHlTaGVldCIpOyAvLyROT04tTkxTLTEkCisJCQkJfQorCQkJCWNhdGNoIChQYXJ0SW5pdEV4Y2VwdGlvbiBleGNlcHRpb24pIHsKKwkJCQkJQ29yZUVkaXRvclBsdWdpbi5JTlNUQU5DRS5sb2coZXhjZXB0aW9uKTsKKwkJCQl9CisJCQl9CisJCX07CisKKwkvKioKKwkgKiBUaGlzIGFjdGlvbiByZWZyZXNoZXMgdGhlIHZpZXdlciBvZiB0aGUgY3VycmVudCBlZGl0b3IgaWYgdGhlIGVkaXRvcgorCSAqIGltcGxlbWVudHMge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5jb21tb24udWkudmlld2VyLklWaWV3ZXJQcm92aWRlcn0uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIElBY3Rpb24gcmVmcmVzaFZpZXdlckFjdGlvbiA9CisJCW5ldyBBY3Rpb24oQ29yZUVkaXRvclBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoIl9VSV9SZWZyZXNoVmlld2VyX21lbnVfaXRlbSIpKSAvLyROT04tTkxTLTEkCisJCXsKKwkJCUBPdmVycmlkZQorCQkJcHVibGljIGJvb2xlYW4gaXNFbmFibGVkKCkgeworCQkJCXJldHVybiBhY3RpdmVFZGl0b3JQYXJ0IGluc3RhbmNlb2YgSVZpZXdlclByb3ZpZGVyOworCQkJfQorCisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyB2b2lkIHJ1bigpIHsKKwkJCQlpZiAoYWN0aXZlRWRpdG9yUGFydCBpbnN0YW5jZW9mIElWaWV3ZXJQcm92aWRlcikgeworCQkJCQlWaWV3ZXIgdmlld2VyID0gKChJVmlld2VyUHJvdmlkZXIpYWN0aXZlRWRpdG9yUGFydCkuZ2V0Vmlld2VyKCk7CisJCQkJCWlmICh2aWV3ZXIgIT0gbnVsbCkgeworCQkJCQkJdmlld2VyLnJlZnJlc2goKTsKKwkJCQkJfQorCQkJCX0KKwkJCX0KKwkJfTsKKworCS8qKgorCSAqIFRoaXMgd2lsbCBjb250YWluIG9uZSB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkuYWN0aW9uLkNyZWF0ZUNoaWxkQWN0aW9ufSBjb3JyZXNwb25kaW5nIHRvIGVhY2ggZGVzY3JpcHRvcgorCSAqIGdlbmVyYXRlZCBmb3IgdGhlIGN1cnJlbnQgc2VsZWN0aW9uIGJ5IHRoZSBpdGVtIHByb3ZpZGVyLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBDb2xsZWN0aW9uPElBY3Rpb24+IGNyZWF0ZUNoaWxkQWN0aW9uczsKKworCS8qKgorCSAqIFRoaXMgaXMgdGhlIG1lbnUgbWFuYWdlciBpbnRvIHdoaWNoIG1lbnUgY29udHJpYnV0aW9uIGl0ZW1zIHNob3VsZCBiZSBhZGRlZCBmb3IgQ3JlYXRlQ2hpbGQgYWN0aW9ucy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgSU1lbnVNYW5hZ2VyIGNyZWF0ZUNoaWxkTWVudU1hbmFnZXI7CisKKwkvKioKKwkgKiBUaGlzIHdpbGwgY29udGFpbiBvbmUge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmFjdGlvbi5DcmVhdGVTaWJsaW5nQWN0aW9ufSBjb3JyZXNwb25kaW5nIHRvIGVhY2ggZGVzY3JpcHRvcgorCSAqIGdlbmVyYXRlZCBmb3IgdGhlIGN1cnJlbnQgc2VsZWN0aW9uIGJ5IHRoZSBpdGVtIHByb3ZpZGVyLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBDb2xsZWN0aW9uPElBY3Rpb24+IGNyZWF0ZVNpYmxpbmdBY3Rpb25zOworCisJLyoqCisJICogVGhpcyBpcyB0aGUgbWVudSBtYW5hZ2VyIGludG8gd2hpY2ggbWVudSBjb250cmlidXRpb24gaXRlbXMgc2hvdWxkIGJlIGFkZGVkIGZvciBDcmVhdGVTaWJsaW5nIGFjdGlvbnMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIElNZW51TWFuYWdlciBjcmVhdGVTaWJsaW5nTWVudU1hbmFnZXI7CisKKwkvKioKKwkgKiBUaGlzIGNyZWF0ZXMgYW4gaW5zdGFuY2Ugb2YgdGhlIGNvbnRyaWJ1dG9yLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBQcmVkaWNhdGVBY3Rpb25CYXJDb250cmlidXRvcigpIHsKKwkJc3VwZXIoQURESVRJT05TX0xBU1RfU1RZTEUpOworCQlsb2FkUmVzb3VyY2VBY3Rpb24gPSBuZXcgTG9hZFJlc291cmNlQWN0aW9uKCk7CisJCXZhbGlkYXRlQWN0aW9uID0gbmV3IFZhbGlkYXRlQWN0aW9uKCk7CisJCWNvbnRyb2xBY3Rpb24gPSBuZXcgQ29udHJvbEFjdGlvbigpOworCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyBTZXBhcmF0b3JzIGZvciBlZGl0b3IgYWRkaXRpb25zIHRvIHRoZSB0b29sIGJhci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBjb250cmlidXRlVG9Ub29sQmFyKElUb29sQmFyTWFuYWdlciB0b29sQmFyTWFuYWdlcikgeworCQl0b29sQmFyTWFuYWdlci5hZGQobmV3IFNlcGFyYXRvcigicHJlZGljYXRlLXNldHRpbmdzIikpOyAvLyROT04tTkxTLTEkCisJCXRvb2xCYXJNYW5hZ2VyLmFkZChuZXcgU2VwYXJhdG9yKCJwcmVkaWNhdGUtYWRkaXRpb25zIikpOyAvLyROT04tTkxTLTEkCisJfQorCisJLyoqCisJICogVGhpcyBhZGRzIHRvIHRoZSBtZW51IGJhciBhIG1lbnUgYW5kIHNvbWUgc2VwYXJhdG9ycyBmb3IgZWRpdG9yIGFkZGl0aW9ucywKKwkgKiBhcyB3ZWxsIGFzIHRoZSBzdWItbWVudXMgZm9yIG9iamVjdCBjcmVhdGlvbiBpdGVtcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBjb250cmlidXRlVG9NZW51KElNZW51TWFuYWdlciBtZW51TWFuYWdlcikgeworCQlzdXBlci5jb250cmlidXRlVG9NZW51KG1lbnVNYW5hZ2VyKTsKKworCQlJTWVudU1hbmFnZXIgc3VibWVudU1hbmFnZXIgPSBuZXcgTWVudU1hbmFnZXIoQ29yZUVkaXRvclBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoIl9VSV9QcmVkaWNhdGVFZGl0b3JfbWVudSIpLCAib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZU1lbnVJRCIpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKKwkJbWVudU1hbmFnZXIuaW5zZXJ0QWZ0ZXIoImFkZGl0aW9ucyIsIHN1Ym1lbnVNYW5hZ2VyKTsgLy8kTk9OLU5MUy0xJAorCQlzdWJtZW51TWFuYWdlci5hZGQobmV3IFNlcGFyYXRvcigic2V0dGluZ3MiKSk7IC8vJE5PTi1OTFMtMSQKKwkJc3VibWVudU1hbmFnZXIuYWRkKG5ldyBTZXBhcmF0b3IoImFjdGlvbnMiKSk7IC8vJE5PTi1OTFMtMSQKKwkJc3VibWVudU1hbmFnZXIuYWRkKG5ldyBTZXBhcmF0b3IoImFkZGl0aW9ucyIpKTsgLy8kTk9OLU5MUy0xJAorCQlzdWJtZW51TWFuYWdlci5hZGQobmV3IFNlcGFyYXRvcigiYWRkaXRpb25zLWVuZCIpKTsgLy8kTk9OLU5MUy0xJAorCisJCS8vIFByZXBhcmUgZm9yIENyZWF0ZUNoaWxkIGl0ZW0gYWRkaXRpb24gb3IgcmVtb3ZhbC4KKwkJLy8KKwkJY3JlYXRlQ2hpbGRNZW51TWFuYWdlciA9IG5ldyBNZW51TWFuYWdlcihDb3JlRWRpdG9yUGx1Z2luLklOU1RBTkNFLmdldFN0cmluZygiX1VJX0NyZWF0ZUNoaWxkX21lbnVfaXRlbSIpKTsgLy8kTk9OLU5MUy0xJAorCQlzdWJtZW51TWFuYWdlci5pbnNlcnRCZWZvcmUoImFkZGl0aW9ucyIsIGNyZWF0ZUNoaWxkTWVudU1hbmFnZXIpOyAvLyROT04tTkxTLTEkCisKKwkJLy8gUHJlcGFyZSBmb3IgQ3JlYXRlU2libGluZyBpdGVtIGFkZGl0aW9uIG9yIHJlbW92YWwuCisJCS8vCisJCWNyZWF0ZVNpYmxpbmdNZW51TWFuYWdlciA9IG5ldyBNZW51TWFuYWdlcihDb3JlRWRpdG9yUGx1Z2luLklOU1RBTkNFLmdldFN0cmluZygiX1VJX0NyZWF0ZVNpYmxpbmdfbWVudV9pdGVtIikpOyAvLyROT04tTkxTLTEkCisJCXN1Ym1lbnVNYW5hZ2VyLmluc2VydEJlZm9yZSgiYWRkaXRpb25zIiwgY3JlYXRlU2libGluZ01lbnVNYW5hZ2VyKTsgLy8kTk9OLU5MUy0xJAorCisJCS8vIEZvcmNlIGFuIHVwZGF0ZSBiZWNhdXNlIEVjbGlwc2UgaGlkZXMgZW1wdHkgbWVudXMgbm93LgorCQkvLworCQlzdWJtZW51TWFuYWdlci5hZGRNZW51TGlzdGVuZXIKKwkJCShuZXcgSU1lbnVMaXN0ZW5lcigpIHsKKwkJCQkgcHVibGljIHZvaWQgbWVudUFib3V0VG9TaG93KElNZW51TWFuYWdlciBtZW51TWFuYWdlcikgeworCQkJCQkgbWVudU1hbmFnZXIudXBkYXRlQWxsKHRydWUpOworCQkJCSB9CisJCQkgfSk7CisKKwkJYWRkR2xvYmFsQWN0aW9ucyhzdWJtZW51TWFuYWdlcik7CisJfQorCisJLyoqCisJICogV2hlbiB0aGUgYWN0aXZlIGVkaXRvciBjaGFuZ2VzLCB0aGlzIHJlbWVtYmVycyB0aGUgY2hhbmdlIGFuZCByZWdpc3RlcnMgd2l0aCBpdCBhcyBhIHNlbGVjdGlvbiBwcm92aWRlci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBzZXRBY3RpdmVFZGl0b3IoSUVkaXRvclBhcnQgcGFydCkgeworCQlzdXBlci5zZXRBY3RpdmVFZGl0b3IocGFydCk7CisJCWFjdGl2ZUVkaXRvclBhcnQgPSBwYXJ0OworCisJCS8vIFN3aXRjaCB0byB0aGUgbmV3IHNlbGVjdGlvbiBwcm92aWRlci4KKwkJLy8KKwkJaWYgKHNlbGVjdGlvblByb3ZpZGVyICE9IG51bGwpIHsKKwkJCXNlbGVjdGlvblByb3ZpZGVyLnJlbW92ZVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcih0aGlzKTsKKwkJfQorCQlpZiAocGFydCA9PSBudWxsKSB7CisJCQlzZWxlY3Rpb25Qcm92aWRlciA9IG51bGw7CisJCX0KKwkJZWxzZSB7CisJCQlzZWxlY3Rpb25Qcm92aWRlciA9IHBhcnQuZ2V0U2l0ZSgpLmdldFNlbGVjdGlvblByb3ZpZGVyKCk7CisJCQlzZWxlY3Rpb25Qcm92aWRlci5hZGRTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIodGhpcyk7CisKKwkJCS8vIEZha2UgYSBzZWxlY3Rpb24gY2hhbmdlZCBldmVudCB0byB1cGRhdGUgdGhlIG1lbnVzLgorCQkJLy8KKwkJCWlmIChzZWxlY3Rpb25Qcm92aWRlci5nZXRTZWxlY3Rpb24oKSAhPSBudWxsKSB7CisJCQkJc2VsZWN0aW9uQ2hhbmdlZChuZXcgU2VsZWN0aW9uQ2hhbmdlZEV2ZW50KHNlbGVjdGlvblByb3ZpZGVyLCBzZWxlY3Rpb25Qcm92aWRlci5nZXRTZWxlY3Rpb24oKSkpOworCQkJfQorCQl9CisJfQorCisJLyoqCisJICogVGhpcyBpbXBsZW1lbnRzIHtAbGluayBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXJ9LAorCSAqIGhhbmRsaW5nIHtAbGluayBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlNlbGVjdGlvbkNoYW5nZWRFdmVudH1zIGJ5IHF1ZXJ5aW5nIGZvciB0aGUgY2hpbGRyZW4gYW5kIHNpYmxpbmdzCisJICogdGhhdCBjYW4gYmUgYWRkZWQgdG8gdGhlIHNlbGVjdGVkIG9iamVjdCBhbmQgdXBkYXRpbmcgdGhlIG1lbnVzIGFjY29yZGluZ2x5LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIHNlbGVjdGlvbkNoYW5nZWQoU2VsZWN0aW9uQ2hhbmdlZEV2ZW50IGV2ZW50KSB7CisJCS8vIFJlbW92ZSBhbnkgbWVudSBpdGVtcyBmb3Igb2xkIHNlbGVjdGlvbi4KKwkJLy8KKwkJaWYgKGNyZWF0ZUNoaWxkTWVudU1hbmFnZXIgIT0gbnVsbCkgeworCQkJZGVwb3B1bGF0ZU1hbmFnZXIoY3JlYXRlQ2hpbGRNZW51TWFuYWdlciwgY3JlYXRlQ2hpbGRBY3Rpb25zKTsKKwkJfQorCQlpZiAoY3JlYXRlU2libGluZ01lbnVNYW5hZ2VyICE9IG51bGwpIHsKKwkJCWRlcG9wdWxhdGVNYW5hZ2VyKGNyZWF0ZVNpYmxpbmdNZW51TWFuYWdlciwgY3JlYXRlU2libGluZ0FjdGlvbnMpOworCQl9CisKKwkJLy8gUXVlcnkgdGhlIG5ldyBzZWxlY3Rpb24gZm9yIGFwcHJvcHJpYXRlIG5ldyBjaGlsZC9zaWJsaW5nIGRlc2NyaXB0b3JzCisJCS8vCisJCUNvbGxlY3Rpb248Pz4gbmV3Q2hpbGREZXNjcmlwdG9ycyA9IG51bGw7CisJCUNvbGxlY3Rpb248Pz4gbmV3U2libGluZ0Rlc2NyaXB0b3JzID0gbnVsbDsKKworCQlJU2VsZWN0aW9uIHNlbGVjdGlvbiA9IGV2ZW50LmdldFNlbGVjdGlvbigpOworCQlpZiAoc2VsZWN0aW9uIGluc3RhbmNlb2YgSVN0cnVjdHVyZWRTZWxlY3Rpb24gJiYgKChJU3RydWN0dXJlZFNlbGVjdGlvbilzZWxlY3Rpb24pLnNpemUoKSA9PSAxKSB7CisJCQlPYmplY3Qgb2JqZWN0ID0gKChJU3RydWN0dXJlZFNlbGVjdGlvbilzZWxlY3Rpb24pLmdldEZpcnN0RWxlbWVudCgpOworCisJCQlFZGl0aW5nRG9tYWluIGRvbWFpbiA9ICgoSUVkaXRpbmdEb21haW5Qcm92aWRlcilhY3RpdmVFZGl0b3JQYXJ0KS5nZXRFZGl0aW5nRG9tYWluKCk7CisKKwkJCW5ld0NoaWxkRGVzY3JpcHRvcnMgPSBkb21haW4uZ2V0TmV3Q2hpbGREZXNjcmlwdG9ycyhvYmplY3QsIG51bGwpOworCQkJbmV3U2libGluZ0Rlc2NyaXB0b3JzID0gZG9tYWluLmdldE5ld0NoaWxkRGVzY3JpcHRvcnMobnVsbCwgb2JqZWN0KTsKKwkJfQorCisJCS8vIEdlbmVyYXRlIGFjdGlvbnMgZm9yIHNlbGVjdGlvbjsgcG9wdWxhdGUgYW5kIHJlZHJhdyB0aGUgbWVudXMuCisJCS8vCisJCWNyZWF0ZUNoaWxkQWN0aW9ucyA9IGdlbmVyYXRlQ3JlYXRlQ2hpbGRBY3Rpb25zKG5ld0NoaWxkRGVzY3JpcHRvcnMsIHNlbGVjdGlvbik7CisJCWNyZWF0ZVNpYmxpbmdBY3Rpb25zID0gZ2VuZXJhdGVDcmVhdGVTaWJsaW5nQWN0aW9ucyhuZXdTaWJsaW5nRGVzY3JpcHRvcnMsIHNlbGVjdGlvbik7CisKKwkJaWYgKGNyZWF0ZUNoaWxkTWVudU1hbmFnZXIgIT0gbnVsbCkgeworCQkJcG9wdWxhdGVNYW5hZ2VyKGNyZWF0ZUNoaWxkTWVudU1hbmFnZXIsIGNyZWF0ZUNoaWxkQWN0aW9ucywgbnVsbCk7CisJCQljcmVhdGVDaGlsZE1lbnVNYW5hZ2VyLnVwZGF0ZSh0cnVlKTsKKwkJfQorCQlpZiAoY3JlYXRlU2libGluZ01lbnVNYW5hZ2VyICE9IG51bGwpIHsKKwkJCXBvcHVsYXRlTWFuYWdlcihjcmVhdGVTaWJsaW5nTWVudU1hbmFnZXIsIGNyZWF0ZVNpYmxpbmdBY3Rpb25zLCBudWxsKTsKKwkJCWNyZWF0ZVNpYmxpbmdNZW51TWFuYWdlci51cGRhdGUodHJ1ZSk7CisJCX0KKwl9CisKKwkvKioKKwkgKiBUaGlzIGdlbmVyYXRlcyBhIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5hY3Rpb24uQ3JlYXRlQ2hpbGRBY3Rpb259IGZvciBlYWNoIG9iamVjdCBpbiA8Y29kZT5kZXNjcmlwdG9yczwvY29kZT4sCisJICogYW5kIHJldHVybnMgdGhlIGNvbGxlY3Rpb24gb2YgdGhlc2UgYWN0aW9ucy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgQ29sbGVjdGlvbjxJQWN0aW9uPiBnZW5lcmF0ZUNyZWF0ZUNoaWxkQWN0aW9ucyhDb2xsZWN0aW9uPD8+IGRlc2NyaXB0b3JzLCBJU2VsZWN0aW9uIHNlbGVjdGlvbikgeworCQlDb2xsZWN0aW9uPElBY3Rpb24+IGFjdGlvbnMgPSBuZXcgQXJyYXlMaXN0PElBY3Rpb24+KCk7CisJCWlmIChkZXNjcmlwdG9ycyAhPSBudWxsKSB7CisJCQlmb3IgKE9iamVjdCBkZXNjcmlwdG9yIDogZGVzY3JpcHRvcnMpIHsKKwkJCQlhY3Rpb25zLmFkZChuZXcgQ3JlYXRlQ2hpbGRBY3Rpb24oYWN0aXZlRWRpdG9yUGFydCwgc2VsZWN0aW9uLCBkZXNjcmlwdG9yKSk7CisJCQl9CisJCX0KKwkJcmV0dXJuIGFjdGlvbnM7CisJfQorCisJLyoqCisJICogVGhpcyBnZW5lcmF0ZXMgYSB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkuYWN0aW9uLkNyZWF0ZVNpYmxpbmdBY3Rpb259IGZvciBlYWNoIG9iamVjdCBpbiA8Y29kZT5kZXNjcmlwdG9yczwvY29kZT4sCisJICogYW5kIHJldHVybnMgdGhlIGNvbGxlY3Rpb24gb2YgdGhlc2UgYWN0aW9ucy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgQ29sbGVjdGlvbjxJQWN0aW9uPiBnZW5lcmF0ZUNyZWF0ZVNpYmxpbmdBY3Rpb25zKENvbGxlY3Rpb248Pz4gZGVzY3JpcHRvcnMsIElTZWxlY3Rpb24gc2VsZWN0aW9uKSB7CisJCUNvbGxlY3Rpb248SUFjdGlvbj4gYWN0aW9ucyA9IG5ldyBBcnJheUxpc3Q8SUFjdGlvbj4oKTsKKwkJaWYgKGRlc2NyaXB0b3JzICE9IG51bGwpIHsKKwkJCWZvciAoT2JqZWN0IGRlc2NyaXB0b3IgOiBkZXNjcmlwdG9ycykgeworCQkJCWFjdGlvbnMuYWRkKG5ldyBDcmVhdGVTaWJsaW5nQWN0aW9uKGFjdGl2ZUVkaXRvclBhcnQsIHNlbGVjdGlvbiwgZGVzY3JpcHRvcikpOworCQkJfQorCQl9CisJCXJldHVybiBhY3Rpb25zOworCX0KKworCS8qKgorCSAqIFRoaXMgcG9wdWxhdGVzIHRoZSBzcGVjaWZpZWQgPGNvZGU+bWFuYWdlcjwvY29kZT4gd2l0aCB7QGxpbmsgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLkFjdGlvbkNvbnRyaWJ1dGlvbkl0ZW19cworCSAqIGJhc2VkIG9uIHRoZSB7QGxpbmsgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklBY3Rpb259cyBjb250YWluZWQgaW4gdGhlIDxjb2RlPmFjdGlvbnM8L2NvZGU+IGNvbGxlY3Rpb24sCisJICogYnkgaW5zZXJ0aW5nIHRoZW0gYmVmb3JlIHRoZSBzcGVjaWZpZWQgY29udHJpYnV0aW9uIGl0ZW0gPGNvZGU+Y29udHJpYnV0aW9uSUQ8L2NvZGU+LgorCSAqIElmIDxjb2RlPmNvbnRyaWJ1dGlvbklEPC9jb2RlPiBpcyA8Y29kZT5udWxsPC9jb2RlPiwgdGhleSBhcmUgc2ltcGx5IGFkZGVkLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIHBvcHVsYXRlTWFuYWdlcihJQ29udHJpYnV0aW9uTWFuYWdlciBtYW5hZ2VyLCBDb2xsZWN0aW9uPD8gZXh0ZW5kcyBJQWN0aW9uPiBhY3Rpb25zLCBTdHJpbmcgY29udHJpYnV0aW9uSUQpIHsKKwkJaWYgKGFjdGlvbnMgIT0gbnVsbCkgeworCQkJZm9yIChJQWN0aW9uIGFjdGlvbiA6IGFjdGlvbnMpIHsKKwkJCQlpZiAoY29udHJpYnV0aW9uSUQgIT0gbnVsbCkgeworCQkJCQltYW5hZ2VyLmluc2VydEJlZm9yZShjb250cmlidXRpb25JRCwgYWN0aW9uKTsKKwkJCQl9CisJCQkJZWxzZSB7CisJCQkJCW1hbmFnZXIuYWRkKGFjdGlvbik7CisJCQkJfQorCQkJfQorCQl9CisJfQorCQkKKwkvKioKKwkgKiBUaGlzIHJlbW92ZXMgZnJvbSB0aGUgc3BlY2lmaWVkIDxjb2RlPm1hbmFnZXI8L2NvZGU+IGFsbCB7QGxpbmsgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLkFjdGlvbkNvbnRyaWJ1dGlvbkl0ZW19cworCSAqIGJhc2VkIG9uIHRoZSB7QGxpbmsgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklBY3Rpb259cyBjb250YWluZWQgaW4gdGhlIDxjb2RlPmFjdGlvbnM8L2NvZGU+IGNvbGxlY3Rpb24uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgZGVwb3B1bGF0ZU1hbmFnZXIoSUNvbnRyaWJ1dGlvbk1hbmFnZXIgbWFuYWdlciwgQ29sbGVjdGlvbjw/IGV4dGVuZHMgSUFjdGlvbj4gYWN0aW9ucykgeworCQlpZiAoYWN0aW9ucyAhPSBudWxsKSB7CisJCQlJQ29udHJpYnV0aW9uSXRlbVtdIGl0ZW1zID0gbWFuYWdlci5nZXRJdGVtcygpOworCQkJZm9yIChpbnQgaSA9IDA7IGkgPCBpdGVtcy5sZW5ndGg7IGkrKykgeworCQkJCS8vIExvb2sgaW50byBTdWJDb250cmlidXRpb25JdGVtcworCQkJCS8vCisJCQkJSUNvbnRyaWJ1dGlvbkl0ZW0gY29udHJpYnV0aW9uSXRlbSA9IGl0ZW1zW2ldOworCQkJCXdoaWxlIChjb250cmlidXRpb25JdGVtIGluc3RhbmNlb2YgU3ViQ29udHJpYnV0aW9uSXRlbSkgeworCQkJCQljb250cmlidXRpb25JdGVtID0gKChTdWJDb250cmlidXRpb25JdGVtKWNvbnRyaWJ1dGlvbkl0ZW0pLmdldElubmVySXRlbSgpOworCQkJCX0KKworCQkJCS8vIERlbGV0ZSB0aGUgQWN0aW9uQ29udHJpYnV0aW9uSXRlbXMgd2l0aCBtYXRjaGluZyBhY3Rpb24uCisJCQkJLy8KKwkJCQlpZiAoY29udHJpYnV0aW9uSXRlbSBpbnN0YW5jZW9mIEFjdGlvbkNvbnRyaWJ1dGlvbkl0ZW0pIHsKKwkJCQkJSUFjdGlvbiBhY3Rpb24gPSAoKEFjdGlvbkNvbnRyaWJ1dGlvbkl0ZW0pY29udHJpYnV0aW9uSXRlbSkuZ2V0QWN0aW9uKCk7CisJCQkJCWlmIChhY3Rpb25zLmNvbnRhaW5zKGFjdGlvbikpIHsKKwkJCQkJCW1hbmFnZXIucmVtb3ZlKGNvbnRyaWJ1dGlvbkl0ZW0pOworCQkJCQl9CisJCQkJfQorCQkJfQorCQl9CisJfQorCisJLyoqCisJICogVGhpcyBwb3B1bGF0ZXMgdGhlIHBvcC11cCBtZW51IGJlZm9yZSBpdCBhcHBlYXJzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIG1lbnVBYm91dFRvU2hvdyhJTWVudU1hbmFnZXIgbWVudU1hbmFnZXIpIHsKKwkJc3VwZXIubWVudUFib3V0VG9TaG93KG1lbnVNYW5hZ2VyKTsKKwkJTWVudU1hbmFnZXIgc3VibWVudU1hbmFnZXIgPSBudWxsOworCisJCXN1Ym1lbnVNYW5hZ2VyID0gbmV3IE1lbnVNYW5hZ2VyKENvcmVFZGl0b3JQbHVnaW4uSU5TVEFOQ0UuZ2V0U3RyaW5nKCJfVUlfQ3JlYXRlQ2hpbGRfbWVudV9pdGVtIikpOyAvLyROT04tTkxTLTEkCisJCXBvcHVsYXRlTWFuYWdlcihzdWJtZW51TWFuYWdlciwgY3JlYXRlQ2hpbGRBY3Rpb25zLCBudWxsKTsKKwkJbWVudU1hbmFnZXIuaW5zZXJ0QmVmb3JlKCJlZGl0Iiwgc3VibWVudU1hbmFnZXIpOyAvLyROT04tTkxTLTEkCisKKwkJc3VibWVudU1hbmFnZXIgPSBuZXcgTWVudU1hbmFnZXIoQ29yZUVkaXRvclBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoIl9VSV9DcmVhdGVTaWJsaW5nX21lbnVfaXRlbSIpKTsgLy8kTk9OLU5MUy0xJAorCQlwb3B1bGF0ZU1hbmFnZXIoc3VibWVudU1hbmFnZXIsIGNyZWF0ZVNpYmxpbmdBY3Rpb25zLCBudWxsKTsKKwkJbWVudU1hbmFnZXIuaW5zZXJ0QmVmb3JlKCJlZGl0Iiwgc3VibWVudU1hbmFnZXIpOyAvLyROT04tTkxTLTEkCisJfQorCisJLyoqCisJICogVGhpcyBpbnNlcnRzIGdsb2JhbCBhY3Rpb25zIGJlZm9yZSB0aGUgImFkZGl0aW9ucy1lbmQiIHNlcGFyYXRvci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgdm9pZCBhZGRHbG9iYWxBY3Rpb25zKElNZW51TWFuYWdlciBtZW51TWFuYWdlcikgeworCQltZW51TWFuYWdlci5pbnNlcnRBZnRlcigiYWRkaXRpb25zLWVuZCIsIG5ldyBTZXBhcmF0b3IoInVpLWFjdGlvbnMiKSk7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAorCQltZW51TWFuYWdlci5pbnNlcnRBZnRlcigidWktYWN0aW9ucyIsIHNob3dQcm9wZXJ0aWVzVmlld0FjdGlvbik7IC8vJE5PTi1OTFMtMSQKKworCQlyZWZyZXNoVmlld2VyQWN0aW9uLnNldEVuYWJsZWQocmVmcmVzaFZpZXdlckFjdGlvbi5pc0VuYWJsZWQoKSk7CQkKKwkJbWVudU1hbmFnZXIuaW5zZXJ0QWZ0ZXIoInVpLWFjdGlvbnMiLCByZWZyZXNoVmlld2VyQWN0aW9uKTsgLy8kTk9OLU5MUy0xJAorCisJCXN1cGVyLmFkZEdsb2JhbEFjdGlvbnMobWVudU1hbmFnZXIpOworCX0KKworCS8qKgorCSAqIFRoaXMgZW5zdXJlcyB0aGF0IGEgZGVsZXRlIGFjdGlvbiB3aWxsIGNsZWFuIHVwIGFsbCByZWZlcmVuY2VzIHRvIGRlbGV0ZWQgb2JqZWN0cy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgYm9vbGVhbiByZW1vdmVBbGxSZWZlcmVuY2VzT25EZWxldGUoKSB7CisJCXJldHVybiB0cnVlOworCX0KKworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3ByZWRpY2F0ZS9wcmVzZW50YXRpb24vUHJlZGljYXRlRWRpdG9yLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9wcmVkaWNhdGUvcHJlc2VudGF0aW9uL1ByZWRpY2F0ZUVkaXRvci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjliNjY3MzcKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9wcmVkaWNhdGUvcHJlc2VudGF0aW9uL1ByZWRpY2F0ZUVkaXRvci5qYXZhCkBAIC0wLDAgKzEsMTY0MiBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlLnByZXNlbnRhdGlvbjsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247CitpbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbTsKK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OworaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOworaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uczsKK2ltcG9ydCBqYXZhLnV0aWwuRXZlbnRPYmplY3Q7CitpbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7CitpbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOworaW1wb3J0IGphdmEudXRpbC5MaW5rZWRIYXNoTWFwOworaW1wb3J0IGphdmEudXRpbC5MaXN0OworaW1wb3J0IGphdmEudXRpbC5NYXA7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JRmlsZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JTWFya2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklSZXNvdXJjZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUmVzb3VyY2VDaGFuZ2VFdmVudDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUmVzb3VyY2VDaGFuZ2VMaXN0ZW5lcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUmVzb3VyY2VEZWx0YTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUmVzb3VyY2VEZWx0YVZpc2l0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuUmVzb3VyY2VzUGx1Z2luOworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5Db3JlRXhjZXB0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUGF0aDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVByb2dyZXNzTW9uaXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuTnVsbFByb2dyZXNzTW9uaXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLmNvbW1hbmQuQmFzaWNDb21tYW5kU3RhY2s7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5jb21tYW5kLkNvbW1hbmQ7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5jb21tYW5kLkNvbW1hbmRTdGFjazsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLmNvbW1hbmQuQ29tbWFuZFN0YWNrTGlzdGVuZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udWkuTWFya2VySGVscGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udWkuZWRpdG9yLlByb2JsZW1FZGl0b3JQYXJ0OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udWkudmlld2VyLklWaWV3ZXJQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuQmFzaWNEaWFnbm9zdGljOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5EaWFnbm9zdGljOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5VUkk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3Q7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVWYWxpZGF0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnByb3ZpZGVyLkVjb3JlSXRlbVByb3ZpZGVyQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnJlc291cmNlLlJlc291cmNlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5yZXNvdXJjZS5SZXNvdXJjZVNldDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUudXRpbC5FQ29udGVudEFkYXB0ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnV0aWwuRWNvcmVVdGlsOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LmRvbWFpbi5BZGFwdGVyRmFjdG9yeUVkaXRpbmdEb21haW47CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQuZG9tYWluLkVkaXRpbmdEb21haW47CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQuZG9tYWluLklFZGl0aW5nRG9tYWluUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuQWRhcHRlckZhY3RvcnlJdGVtRGVsZWdhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkNvbXBvc2VkQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuUmVmbGVjdGl2ZUl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLnJlc291cmNlLlJlc291cmNlSXRlbVByb3ZpZGVyQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkuYWN0aW9uLkVkaXRpbmdEb21haW5BY3Rpb25CYXJDb250cmlidXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5jZWxsZWRpdG9yLkFkYXB0ZXJGYWN0b3J5VHJlZUVkaXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5kbmQuRWRpdGluZ0RvbWFpblZpZXdlckRyb3BBZGFwdGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmRuZC5Mb2NhbFRyYW5zZmVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmRuZC5WaWV3ZXJEcmFnQWRhcHRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5wcm92aWRlci5BZGFwdGVyRmFjdG9yeUNvbnRlbnRQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5wcm92aWRlci5BZGFwdGVyRmFjdG9yeUxhYmVsUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkucHJvdmlkZXIuVW53cmFwcGluZ1NlbGVjdGlvblByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLnV0aWwuRWRpdFVJTWFya2VySGVscGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLnV0aWwuRWRpdFVJVXRpbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS52aWV3LkV4dGVuZGVkUHJvcGVydHlTaGVldFBhZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklNZW51TGlzdGVuZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklNZW51TWFuYWdlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSVN0YXR1c0xpbmVNYW5hZ2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JVG9vbEJhck1hbmFnZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLk1lbnVNYW5hZ2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5TZXBhcmF0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuZGlhbG9ncy5NZXNzYWdlRGlhbG9nOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmRpYWxvZ3MuUHJvZ3Jlc3NNb25pdG9yRGlhbG9nOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnV0aWwuTG9jYWxTZWxlY3Rpb25UcmFuc2ZlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvblByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVN0cnVjdHVyZWRTZWxlY3Rpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5TZWxlY3Rpb25DaGFuZ2VkRXZlbnQ7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5TdHJ1Y3R1cmVkU2VsZWN0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuU3RydWN0dXJlZFZpZXdlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlRyZWVWaWV3ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5WaWV3ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLlNURU1YTUlSZXNvdXJjZUZhY3RvcnlJbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24ucHJlc2VudGF0aW9uLkNvcmVFZGl0b3JQbHVnaW47CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5wcm92aWRlci5Db21tb25JdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZXhwZXJpbWVudC5wcm92aWRlci5FeHBlcmltZW50SXRlbVByb3ZpZGVyQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLnByb3ZpZGVyLkdyYXBoSXRlbVByb3ZpZGVyQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmxvZ2dlci5wcm92aWRlci5Mb2dnZXJJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwucHJvdmlkZXIuTW9kZWxJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIucHJvdmlkZXIuTW9kaWZpZXJJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlLnByb3ZpZGVyLlByZWRpY2F0ZUl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zY2VuYXJpby5wcm92aWRlci5TY2VuYXJpb0l0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zZXF1ZW5jZXIucHJvdmlkZXIuU2VxdWVuY2VySXRlbVByb3ZpZGVyQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNvbHZlci5wcm92aWRlci5Tb2x2ZXJJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUudHJpZ2dlci5wcm92aWRlci5UcmlnZ2VySXRlbVByb3ZpZGVyQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LlNXVDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuY3VzdG9tLkNUYWJGb2xkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmRuZC5ETkQ7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmRuZC5UZXh0VHJhbnNmZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmRuZC5UcmFuc2ZlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLkNvbnRyb2xBZGFwdGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuQ29udHJvbEV2ZW50OworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ncmFwaGljcy5Qb2ludDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuTWVudTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5UcmVlOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklBY3Rpb25CYXJzOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklFZGl0b3JJbnB1dDsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5JRWRpdG9yUGFydDsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5JRWRpdG9yU2l0ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5JUGFydExpc3RlbmVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2hQYXJ0OworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLlBhcnRJbml0RXhjZXB0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLmFjdGlvbnMuV29ya3NwYWNlTW9kaWZ5T3BlcmF0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLmRpYWxvZ3MuU2F2ZUFzRGlhbG9nOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLmlkZS5JR290b01hcmtlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5wYXJ0LkZpbGVFZGl0b3JJbnB1dDsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5wYXJ0Lk11bHRpUGFnZUVkaXRvclBhcnQ7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkudmlld3MuY29udGVudG91dGxpbmUuQ29udGVudE91dGxpbmU7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkudmlld3MuY29udGVudG91dGxpbmUuQ29udGVudE91dGxpbmVQYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLnZpZXdzLmNvbnRlbnRvdXRsaW5lLklDb250ZW50T3V0bGluZVBhZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkudmlld3MucHJvcGVydGllcy5JUHJvcGVydHlTaGVldFBhZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkudmlld3MucHJvcGVydGllcy5Qcm9wZXJ0eVNoZWV0OworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLnZpZXdzLnByb3BlcnRpZXMuUHJvcGVydHlTaGVldFBhZ2U7CisKKworLyoqCisgKiBUaGlzIGlzIGFuIGV4YW1wbGUgb2YgYSBQcmVkaWNhdGUgbW9kZWwgZWRpdG9yLgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQGdlbmVyYXRlZAorICovCitAU3VwcHJlc3NXYXJuaW5ncygiYWxsIikKK3B1YmxpYyBjbGFzcyBQcmVkaWNhdGVFZGl0b3IKKwlleHRlbmRzIE11bHRpUGFnZUVkaXRvclBhcnQKKwlpbXBsZW1lbnRzIElFZGl0aW5nRG9tYWluUHJvdmlkZXIsIElTZWxlY3Rpb25Qcm92aWRlciwgSU1lbnVMaXN0ZW5lciwgSVZpZXdlclByb3ZpZGVyLCBJR290b01hcmtlciB7CisJLyoqCisJICogVGhpcyBrZWVwcyB0cmFjayBvZiB0aGUgZWRpdGluZyBkb21haW4gdGhhdCBpcyB1c2VkIHRvIHRyYWNrIGFsbCBjaGFuZ2VzIHRvIHRoZSBtb2RlbC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgQWRhcHRlckZhY3RvcnlFZGl0aW5nRG9tYWluIGVkaXRpbmdEb21haW47CisKKwkvKioKKwkgKiBUaGlzIGlzIHRoZSBvbmUgYWRhcHRlciBmYWN0b3J5IHVzZWQgZm9yIHByb3ZpZGluZyB2aWV3cyBvZiB0aGUgbW9kZWwuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIENvbXBvc2VkQWRhcHRlckZhY3RvcnkgYWRhcHRlckZhY3Rvcnk7CisKKwkvKioKKwkgKiBUaGlzIGlzIHRoZSBjb250ZW50IG91dGxpbmUgcGFnZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgSUNvbnRlbnRPdXRsaW5lUGFnZSBjb250ZW50T3V0bGluZVBhZ2U7CisKKwkvKioKKwkgKiBUaGlzIGlzIGEga2x1ZGdlLi4uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIElTdGF0dXNMaW5lTWFuYWdlciBjb250ZW50T3V0bGluZVN0YXR1c0xpbmVNYW5hZ2VyOworCisJLyoqCisJICogVGhpcyBpcyB0aGUgY29udGVudCBvdXRsaW5lIHBhZ2UncyB2aWV3ZXIuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIFRyZWVWaWV3ZXIgY29udGVudE91dGxpbmVWaWV3ZXI7CisKKwkvKioKKwkgKiBUaGlzIGlzIHRoZSBwcm9wZXJ0eSBzaGVldCBwYWdlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBQcm9wZXJ0eVNoZWV0UGFnZSBwcm9wZXJ0eVNoZWV0UGFnZTsKKworCS8qKgorCSAqIFRoaXMgaXMgdGhlIHZpZXdlciB0aGF0IHNoYWRvd3MgdGhlIHNlbGVjdGlvbiBpbiB0aGUgY29udGVudCBvdXRsaW5lLgorCSAqIFRoZSBwYXJlbnQgcmVsYXRpb24gbXVzdCBiZSBjb3JyZWN0bHkgZGVmaW5lZCBmb3IgdGhpcyB0byB3b3JrLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBUcmVlVmlld2VyIHNlbGVjdGlvblZpZXdlcjsKKworCS8qKgorCSAqIFRoaXMga2VlcHMgdHJhY2sgb2YgdGhlIGFjdGl2ZSBjb250ZW50IHZpZXdlciwgd2hpY2ggbWF5IGJlIGVpdGhlciBvbmUgb2YgdGhlIHZpZXdlcnMgaW4gdGhlIHBhZ2VzIG9yIHRoZSBjb250ZW50IG91dGxpbmUgdmlld2VyLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBWaWV3ZXIgY3VycmVudFZpZXdlcjsKKworCS8qKgorCSAqIFRoaXMgbGlzdGVucyB0byB3aGljaCBldmVyIHZpZXdlciBpcyBhY3RpdmUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIElTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIgc2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyOworCisJLyoqCisJICogVGhpcyBrZWVwcyB0cmFjayBvZiBhbGwgdGhlIHtAbGluayBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXJ9cyB0aGF0IGFyZSBsaXN0ZW5pbmcgdG8gdGhpcyBlZGl0b3IuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIENvbGxlY3Rpb248SVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcj4gc2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVycyA9IG5ldyBBcnJheUxpc3Q8SVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcj4oKTsKKworCS8qKgorCSAqIFRoaXMga2VlcHMgdHJhY2sgb2YgdGhlIHNlbGVjdGlvbiBvZiB0aGUgZWRpdG9yIGFzIGEgd2hvbGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIElTZWxlY3Rpb24gZWRpdG9yU2VsZWN0aW9uID0gU3RydWN0dXJlZFNlbGVjdGlvbi5FTVBUWTsKKworCS8qKgorCSAqIFRoZSBNYXJrZXJIZWxwZXIgaXMgcmVzcG9uc2libGUgZm9yIGNyZWF0aW5nIHdvcmtzcGFjZSByZXNvdXJjZSBtYXJrZXJzIHByZXNlbnRlZAorCSAqIGluIEVjbGlwc2UncyBQcm9ibGVtcyBWaWV3LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBNYXJrZXJIZWxwZXIgbWFya2VySGVscGVyID0gbmV3IEVkaXRVSU1hcmtlckhlbHBlcigpOworCisJLyoqCisJICogVGhpcyBsaXN0ZW5zIGZvciB3aGVuIHRoZSBvdXRsaW5lIGJlY29tZXMgYWN0aXZlCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIElQYXJ0TGlzdGVuZXIgcGFydExpc3RlbmVyID0KKwkJbmV3IElQYXJ0TGlzdGVuZXIoKSB7CisJCQlwdWJsaWMgdm9pZCBwYXJ0QWN0aXZhdGVkKElXb3JrYmVuY2hQYXJ0IHApIHsKKwkJCQlpZiAocCBpbnN0YW5jZW9mIENvbnRlbnRPdXRsaW5lKSB7CisJCQkJCWlmICgoKENvbnRlbnRPdXRsaW5lKXApLmdldEN1cnJlbnRQYWdlKCkgPT0gY29udGVudE91dGxpbmVQYWdlKSB7CisJCQkJCQlnZXRBY3Rpb25CYXJDb250cmlidXRvcigpLnNldEFjdGl2ZUVkaXRvcihQcmVkaWNhdGVFZGl0b3IudGhpcyk7CisKKwkJCQkJCXNldEN1cnJlbnRWaWV3ZXIoY29udGVudE91dGxpbmVWaWV3ZXIpOworCQkJCQl9CisJCQkJfQorCQkJCWVsc2UgaWYgKHAgaW5zdGFuY2VvZiBQcm9wZXJ0eVNoZWV0KSB7CisJCQkJCWlmICgoKFByb3BlcnR5U2hlZXQpcCkuZ2V0Q3VycmVudFBhZ2UoKSA9PSBwcm9wZXJ0eVNoZWV0UGFnZSkgeworCQkJCQkJZ2V0QWN0aW9uQmFyQ29udHJpYnV0b3IoKS5zZXRBY3RpdmVFZGl0b3IoUHJlZGljYXRlRWRpdG9yLnRoaXMpOworCQkJCQkJaGFuZGxlQWN0aXZhdGUoKTsKKwkJCQkJfQorCQkJCX0KKwkJCQllbHNlIGlmIChwID09IFByZWRpY2F0ZUVkaXRvci50aGlzKSB7CisJCQkJCWhhbmRsZUFjdGl2YXRlKCk7CisJCQkJfQorCQkJfQorCQkJcHVibGljIHZvaWQgcGFydEJyb3VnaHRUb1RvcChJV29ya2JlbmNoUGFydCBwKSB7CisJCQkJLy8gSWdub3JlLgorCQkJfQorCQkJcHVibGljIHZvaWQgcGFydENsb3NlZChJV29ya2JlbmNoUGFydCBwKSB7CisJCQkJLy8gSWdub3JlLgorCQkJfQorCQkJcHVibGljIHZvaWQgcGFydERlYWN0aXZhdGVkKElXb3JrYmVuY2hQYXJ0IHApIHsKKwkJCQkvLyBJZ25vcmUuCisJCQl9CisJCQlwdWJsaWMgdm9pZCBwYXJ0T3BlbmVkKElXb3JrYmVuY2hQYXJ0IHApIHsKKwkJCQkvLyBJZ25vcmUuCisJCQl9CisJCX07CisKKwkvKioKKwkgKiBSZXNvdXJjZXMgdGhhdCBoYXZlIGJlZW4gcmVtb3ZlZCBzaW5jZSBsYXN0IGFjdGl2YXRpb24uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIENvbGxlY3Rpb248UmVzb3VyY2U+IHJlbW92ZWRSZXNvdXJjZXMgPSBuZXcgQXJyYXlMaXN0PFJlc291cmNlPigpOworCisJLyoqCisJICogUmVzb3VyY2VzIHRoYXQgaGF2ZSBiZWVuIGNoYW5nZWQgc2luY2UgbGFzdCBhY3RpdmF0aW9uLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBDb2xsZWN0aW9uPFJlc291cmNlPiBjaGFuZ2VkUmVzb3VyY2VzID0gbmV3IEFycmF5TGlzdDxSZXNvdXJjZT4oKTsKKworCS8qKgorCSAqIFJlc291cmNlcyB0aGF0IGhhdmUgYmVlbiBzYXZlZC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgQ29sbGVjdGlvbjxSZXNvdXJjZT4gc2F2ZWRSZXNvdXJjZXMgPSBuZXcgQXJyYXlMaXN0PFJlc291cmNlPigpOworCisJLyoqCisJICogTWFwIHRvIHN0b3JlIHRoZSBkaWFnbm9zdGljIGFzc29jaWF0ZWQgd2l0aCBhIHJlc291cmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBNYXA8UmVzb3VyY2UsIERpYWdub3N0aWM+IHJlc291cmNlVG9EaWFnbm9zdGljTWFwID0gbmV3IExpbmtlZEhhc2hNYXA8UmVzb3VyY2UsIERpYWdub3N0aWM+KCk7CisKKwkvKioKKwkgKiBDb250cm9scyB3aGV0aGVyIHRoZSBwcm9ibGVtIGluZGljYXRpb24gc2hvdWxkIGJlIHVwZGF0ZWQuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIGJvb2xlYW4gdXBkYXRlUHJvYmxlbUluZGljYXRpb24gPSB0cnVlOworCisJLyoqCisJICogQWRhcHRlciB1c2VkIHRvIHVwZGF0ZSB0aGUgcHJvYmxlbSBpbmRpY2F0aW9uIHdoZW4gcmVzb3VyY2VzIGFyZSBkZW1hbmRlZCBsb2FkZWQuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIEVDb250ZW50QWRhcHRlciBwcm9ibGVtSW5kaWNhdGlvbkFkYXB0ZXIgPSAKKwkJbmV3IEVDb250ZW50QWRhcHRlcigpIHsKKwkJCUBPdmVycmlkZQorCQkJcHVibGljIHZvaWQgbm90aWZ5Q2hhbmdlZChOb3RpZmljYXRpb24gbm90aWZpY2F0aW9uKSB7CisJCQkJaWYgKG5vdGlmaWNhdGlvbi5nZXROb3RpZmllcigpIGluc3RhbmNlb2YgUmVzb3VyY2UpIHsKKwkJCQkJc3dpdGNoIChub3RpZmljYXRpb24uZ2V0RmVhdHVyZUlEKFJlc291cmNlLmNsYXNzKSkgeworCQkJCQkJY2FzZSBSZXNvdXJjZS5SRVNPVVJDRV9fSVNfTE9BREVEOgorCQkJCQkJY2FzZSBSZXNvdXJjZS5SRVNPVVJDRV9fRVJST1JTOgorCQkJCQkJY2FzZSBSZXNvdXJjZS5SRVNPVVJDRV9fV0FSTklOR1M6IHsKKwkJCQkJCQlSZXNvdXJjZSByZXNvdXJjZSA9IChSZXNvdXJjZSlub3RpZmljYXRpb24uZ2V0Tm90aWZpZXIoKTsKKwkJCQkJCQlEaWFnbm9zdGljIGRpYWdub3N0aWMgPSBhbmFseXplUmVzb3VyY2VQcm9ibGVtcyhyZXNvdXJjZSwgbnVsbCk7CisJCQkJCQkJaWYgKGRpYWdub3N0aWMuZ2V0U2V2ZXJpdHkoKSAhPSBEaWFnbm9zdGljLk9LKSB7CisJCQkJCQkJCXJlc291cmNlVG9EaWFnbm9zdGljTWFwLnB1dChyZXNvdXJjZSwgZGlhZ25vc3RpYyk7CisJCQkJCQkJfQorCQkJCQkJCWVsc2UgeworCQkJCQkJCQlyZXNvdXJjZVRvRGlhZ25vc3RpY01hcC5yZW1vdmUocmVzb3VyY2UpOworCQkJCQkJCX0KKworCQkJCQkJCWlmICh1cGRhdGVQcm9ibGVtSW5kaWNhdGlvbikgeworCQkJCQkJCQlnZXRTaXRlKCkuZ2V0U2hlbGwoKS5nZXREaXNwbGF5KCkuYXN5bmNFeGVjCisJCQkJCQkJCQkobmV3IFJ1bm5hYmxlKCkgeworCQkJCQkJCQkJCSBwdWJsaWMgdm9pZCBydW4oKSB7CisJCQkJCQkJCQkJCSB1cGRhdGVQcm9ibGVtSW5kaWNhdGlvbigpOworCQkJCQkJCQkJCSB9CisJCQkJCQkJCQkgfSk7CisJCQkJCQkJfQorCQkJCQkJCWJyZWFrOworCQkJCQkJfQorCQkJCQl9CisJCQkJfQorCQkJCWVsc2UgeworCQkJCQlzdXBlci5ub3RpZnlDaGFuZ2VkKG5vdGlmaWNhdGlvbik7CisJCQkJfQorCQkJfQorCisJCQlAT3ZlcnJpZGUKKwkJCXByb3RlY3RlZCB2b2lkIHNldFRhcmdldChSZXNvdXJjZSB0YXJnZXQpIHsKKwkJCQliYXNpY1NldFRhcmdldCh0YXJnZXQpOworCQkJfQorCisJCQlAT3ZlcnJpZGUKKwkJCXByb3RlY3RlZCB2b2lkIHVuc2V0VGFyZ2V0KFJlc291cmNlIHRhcmdldCkgeworCQkJCWJhc2ljVW5zZXRUYXJnZXQodGFyZ2V0KTsKKwkJCX0KKwkJfTsKKworCS8qKgorCSAqIFRoaXMgbGlzdGVucyBmb3Igd29ya3NwYWNlIGNoYW5nZXMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIElSZXNvdXJjZUNoYW5nZUxpc3RlbmVyIHJlc291cmNlQ2hhbmdlTGlzdGVuZXIgPQorCQluZXcgSVJlc291cmNlQ2hhbmdlTGlzdGVuZXIoKSB7CisJCQlwdWJsaWMgdm9pZCByZXNvdXJjZUNoYW5nZWQoSVJlc291cmNlQ2hhbmdlRXZlbnQgZXZlbnQpIHsKKwkJCQlJUmVzb3VyY2VEZWx0YSBkZWx0YSA9IGV2ZW50LmdldERlbHRhKCk7CisJCQkJdHJ5IHsKKwkJCQkJY2xhc3MgUmVzb3VyY2VEZWx0YVZpc2l0b3IgaW1wbGVtZW50cyBJUmVzb3VyY2VEZWx0YVZpc2l0b3IgeworCQkJCQkJcHJvdGVjdGVkIFJlc291cmNlU2V0IHJlc291cmNlU2V0ID0gZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpOworCQkJCQkJcHJvdGVjdGVkIENvbGxlY3Rpb248UmVzb3VyY2U+IGNoYW5nZWRSZXNvdXJjZXMgPSBuZXcgQXJyYXlMaXN0PFJlc291cmNlPigpOworCQkJCQkJcHJvdGVjdGVkIENvbGxlY3Rpb248UmVzb3VyY2U+IHJlbW92ZWRSZXNvdXJjZXMgPSBuZXcgQXJyYXlMaXN0PFJlc291cmNlPigpOworCisJCQkJCQlwdWJsaWMgYm9vbGVhbiB2aXNpdChJUmVzb3VyY2VEZWx0YSBkZWx0YSkgeworCQkJCQkJCWlmIChkZWx0YS5nZXRSZXNvdXJjZSgpLmdldFR5cGUoKSA9PSBJUmVzb3VyY2UuRklMRSkgeworCQkJCQkJCQlpZiAoZGVsdGEuZ2V0S2luZCgpID09IElSZXNvdXJjZURlbHRhLlJFTU9WRUQgfHwKKwkJCQkJCQkJICAgIGRlbHRhLmdldEtpbmQoKSA9PSBJUmVzb3VyY2VEZWx0YS5DSEFOR0VEICYmIGRlbHRhLmdldEZsYWdzKCkgIT0gSVJlc291cmNlRGVsdGEuTUFSS0VSUykgeworCQkJCQkJCQkJUmVzb3VyY2UgcmVzb3VyY2UgPSByZXNvdXJjZVNldC5nZXRSZXNvdXJjZShVUkkuY3JlYXRlUGxhdGZvcm1SZXNvdXJjZVVSSShkZWx0YS5nZXRGdWxsUGF0aCgpLnRvU3RyaW5nKCksIHRydWUpLCBmYWxzZSk7CisJCQkJCQkJCQlpZiAocmVzb3VyY2UgIT0gbnVsbCkgeworCQkJCQkJCQkJCWlmIChkZWx0YS5nZXRLaW5kKCkgPT0gSVJlc291cmNlRGVsdGEuUkVNT1ZFRCkgeworCQkJCQkJCQkJCQlyZW1vdmVkUmVzb3VyY2VzLmFkZChyZXNvdXJjZSk7CisJCQkJCQkJCQkJfQorCQkJCQkJCQkJCWVsc2UgaWYgKCFzYXZlZFJlc291cmNlcy5yZW1vdmUocmVzb3VyY2UpKSB7CisJCQkJCQkJCQkJCWNoYW5nZWRSZXNvdXJjZXMuYWRkKHJlc291cmNlKTsKKwkJCQkJCQkJCQl9CisJCQkJCQkJCQl9CisJCQkJCQkJCX0KKwkJCQkJCQl9CisKKwkJCQkJCQlyZXR1cm4gdHJ1ZTsKKwkJCQkJCX0KKworCQkJCQkJcHVibGljIENvbGxlY3Rpb248UmVzb3VyY2U+IGdldENoYW5nZWRSZXNvdXJjZXMoKSB7CisJCQkJCQkJcmV0dXJuIGNoYW5nZWRSZXNvdXJjZXM7CisJCQkJCQl9CisKKwkJCQkJCXB1YmxpYyBDb2xsZWN0aW9uPFJlc291cmNlPiBnZXRSZW1vdmVkUmVzb3VyY2VzKCkgeworCQkJCQkJCXJldHVybiByZW1vdmVkUmVzb3VyY2VzOworCQkJCQkJfQorCQkJCQl9CisKKwkJCQkJZmluYWwgUmVzb3VyY2VEZWx0YVZpc2l0b3IgdmlzaXRvciA9IG5ldyBSZXNvdXJjZURlbHRhVmlzaXRvcigpOworCQkJCQlkZWx0YS5hY2NlcHQodmlzaXRvcik7CisKKwkJCQkJaWYgKCF2aXNpdG9yLmdldFJlbW92ZWRSZXNvdXJjZXMoKS5pc0VtcHR5KCkpIHsKKwkJCQkJCWdldFNpdGUoKS5nZXRTaGVsbCgpLmdldERpc3BsYXkoKS5hc3luY0V4ZWMKKwkJCQkJCQkobmV3IFJ1bm5hYmxlKCkgeworCQkJCQkJCQkgcHVibGljIHZvaWQgcnVuKCkgeworCQkJCQkJCQkJIHJlbW92ZWRSZXNvdXJjZXMuYWRkQWxsKHZpc2l0b3IuZ2V0UmVtb3ZlZFJlc291cmNlcygpKTsKKwkJCQkJCQkJCSBpZiAoIWlzRGlydHkoKSkgeworCQkJCQkJCQkJCSBnZXRTaXRlKCkuZ2V0UGFnZSgpLmNsb3NlRWRpdG9yKFByZWRpY2F0ZUVkaXRvci50aGlzLCBmYWxzZSk7CisJCQkJCQkJCQkgfQorCQkJCQkJCQkgfQorCQkJCQkJCSB9KTsKKwkJCQkJfQorCisJCQkJCWlmICghdmlzaXRvci5nZXRDaGFuZ2VkUmVzb3VyY2VzKCkuaXNFbXB0eSgpKSB7CisJCQkJCQlnZXRTaXRlKCkuZ2V0U2hlbGwoKS5nZXREaXNwbGF5KCkuYXN5bmNFeGVjCisJCQkJCQkJKG5ldyBSdW5uYWJsZSgpIHsKKwkJCQkJCQkJIHB1YmxpYyB2b2lkIHJ1bigpIHsKKwkJCQkJCQkJCSBjaGFuZ2VkUmVzb3VyY2VzLmFkZEFsbCh2aXNpdG9yLmdldENoYW5nZWRSZXNvdXJjZXMoKSk7CisJCQkJCQkJCQkgaWYgKGdldFNpdGUoKS5nZXRQYWdlKCkuZ2V0QWN0aXZlRWRpdG9yKCkgPT0gUHJlZGljYXRlRWRpdG9yLnRoaXMpIHsKKwkJCQkJCQkJCQkgaGFuZGxlQWN0aXZhdGUoKTsKKwkJCQkJCQkJCSB9CisJCQkJCQkJCSB9CisJCQkJCQkJIH0pOworCQkJCQl9CisJCQkJfQorCQkJCWNhdGNoIChDb3JlRXhjZXB0aW9uIGV4Y2VwdGlvbikgeworCQkJCQlDb3JlRWRpdG9yUGx1Z2luLklOU1RBTkNFLmxvZyhleGNlcHRpb24pOworCQkJCX0KKwkJCX0KKwkJfTsKKworCS8qKgorCSAqIEhhbmRsZXMgYWN0aXZhdGlvbiBvZiB0aGUgZWRpdG9yIG9yIGl0J3MgYXNzb2NpYXRlZCB2aWV3cy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBoYW5kbGVBY3RpdmF0ZSgpIHsKKwkJLy8gUmVjb21wdXRlIHRoZSByZWFkIG9ubHkgc3RhdGUuCisJCS8vCisJCWlmIChlZGl0aW5nRG9tYWluLmdldFJlc291cmNlVG9SZWFkT25seU1hcCgpICE9IG51bGwpIHsKKwkJICBlZGl0aW5nRG9tYWluLmdldFJlc291cmNlVG9SZWFkT25seU1hcCgpLmNsZWFyKCk7CisKKwkJICAvLyBSZWZyZXNoIGFueSBhY3Rpb25zIHRoYXQgbWF5IGJlY29tZSBlbmFibGVkIG9yIGRpc2FibGVkLgorCQkgIC8vCisJCSAgc2V0U2VsZWN0aW9uKGdldFNlbGVjdGlvbigpKTsKKwkJfQorCisJCWlmICghcmVtb3ZlZFJlc291cmNlcy5pc0VtcHR5KCkpIHsKKwkJCWlmIChoYW5kbGVEaXJ0eUNvbmZsaWN0KCkpIHsKKwkJCQlnZXRTaXRlKCkuZ2V0UGFnZSgpLmNsb3NlRWRpdG9yKFByZWRpY2F0ZUVkaXRvci50aGlzLCBmYWxzZSk7CisJCQl9CisJCQllbHNlIHsKKwkJCQlyZW1vdmVkUmVzb3VyY2VzLmNsZWFyKCk7CisJCQkJY2hhbmdlZFJlc291cmNlcy5jbGVhcigpOworCQkJCXNhdmVkUmVzb3VyY2VzLmNsZWFyKCk7CisJCQl9CisJCX0KKwkJZWxzZSBpZiAoIWNoYW5nZWRSZXNvdXJjZXMuaXNFbXB0eSgpKSB7CisJCQljaGFuZ2VkUmVzb3VyY2VzLnJlbW92ZUFsbChzYXZlZFJlc291cmNlcyk7CisJCQloYW5kbGVDaGFuZ2VkUmVzb3VyY2VzKCk7CisJCQljaGFuZ2VkUmVzb3VyY2VzLmNsZWFyKCk7CisJCQlzYXZlZFJlc291cmNlcy5jbGVhcigpOworCQl9CisJfQorCisJLyoqCisJICogSGFuZGxlcyB3aGF0IHRvIGRvIHdpdGggY2hhbmdlZCByZXNvdXJjZXMgb24gYWN0aXZhdGlvbi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBoYW5kbGVDaGFuZ2VkUmVzb3VyY2VzKCkgeworCQlpZiAoIWNoYW5nZWRSZXNvdXJjZXMuaXNFbXB0eSgpICYmICghaXNEaXJ0eSgpIHx8IGhhbmRsZURpcnR5Q29uZmxpY3QoKSkpIHsKKwkJCWlmIChpc0RpcnR5KCkpIHsKKwkJCQljaGFuZ2VkUmVzb3VyY2VzLmFkZEFsbChlZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkuZ2V0UmVzb3VyY2VzKCkpOworCQkJfQorCQkJZWRpdGluZ0RvbWFpbi5nZXRDb21tYW5kU3RhY2soKS5mbHVzaCgpOworCisJCQl1cGRhdGVQcm9ibGVtSW5kaWNhdGlvbiA9IGZhbHNlOworCQkJZm9yIChSZXNvdXJjZSByZXNvdXJjZSA6IGNoYW5nZWRSZXNvdXJjZXMpIHsKKwkJCQlpZiAocmVzb3VyY2UuaXNMb2FkZWQoKSkgeworCQkJCQlyZXNvdXJjZS51bmxvYWQoKTsKKwkJCQkJdHJ5IHsKKwkJCQkJCXJlc291cmNlLmxvYWQoQ29sbGVjdGlvbnMuRU1QVFlfTUFQKTsKKwkJCQkJfQorCQkJCQljYXRjaCAoSU9FeGNlcHRpb24gZXhjZXB0aW9uKSB7CisJCQkJCQlpZiAoIXJlc291cmNlVG9EaWFnbm9zdGljTWFwLmNvbnRhaW5zS2V5KHJlc291cmNlKSkgeworCQkJCQkJCXJlc291cmNlVG9EaWFnbm9zdGljTWFwLnB1dChyZXNvdXJjZSwgYW5hbHl6ZVJlc291cmNlUHJvYmxlbXMocmVzb3VyY2UsIGV4Y2VwdGlvbikpOworCQkJCQkJfQorCQkJCQl9CisJCQkJfQorCQkJfQorCisJCQlpZiAoQWRhcHRlckZhY3RvcnlFZGl0aW5nRG9tYWluLmlzU3RhbGUoZWRpdG9yU2VsZWN0aW9uKSkgeworCQkJCXNldFNlbGVjdGlvbihTdHJ1Y3R1cmVkU2VsZWN0aW9uLkVNUFRZKTsKKwkJCX0KKworCQkJdXBkYXRlUHJvYmxlbUluZGljYXRpb24gPSB0cnVlOworCQkJdXBkYXRlUHJvYmxlbUluZGljYXRpb24oKTsKKwkJfQorCX0KKyAgCisJLyoqCisJICogVXBkYXRlcyB0aGUgcHJvYmxlbXMgaW5kaWNhdGlvbiB3aXRoIHRoZSBpbmZvcm1hdGlvbiBkZXNjcmliZWQgaW4gdGhlIHNwZWNpZmllZCBkaWFnbm9zdGljLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIHVwZGF0ZVByb2JsZW1JbmRpY2F0aW9uKCkgeworCQlpZiAodXBkYXRlUHJvYmxlbUluZGljYXRpb24pIHsKKwkJCUJhc2ljRGlhZ25vc3RpYyBkaWFnbm9zdGljID0KKwkJCQluZXcgQmFzaWNEaWFnbm9zdGljCisJCQkJCShEaWFnbm9zdGljLk9LLAorCQkJCQkgIm9yZy5lY2xpcHNlLnN0ZW0uY29yZS5lZGl0b3IiLCAvLyROT04tTkxTLTEkCisJCQkJCSAwLAorCQkJCQkgbnVsbCwKKwkJCQkJIG5ldyBPYmplY3QgW10geyBlZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkgfSk7CisJCQlmb3IgKERpYWdub3N0aWMgY2hpbGREaWFnbm9zdGljIDogcmVzb3VyY2VUb0RpYWdub3N0aWNNYXAudmFsdWVzKCkpIHsKKwkJCQlpZiAoY2hpbGREaWFnbm9zdGljLmdldFNldmVyaXR5KCkgIT0gRGlhZ25vc3RpYy5PSykgeworCQkJCQlkaWFnbm9zdGljLmFkZChjaGlsZERpYWdub3N0aWMpOworCQkJCX0KKwkJCX0KKworCQkJaW50IGxhc3RFZGl0b3JQYWdlID0gZ2V0UGFnZUNvdW50KCkgLSAxOworCQkJaWYgKGxhc3RFZGl0b3JQYWdlID49IDAgJiYgZ2V0RWRpdG9yKGxhc3RFZGl0b3JQYWdlKSBpbnN0YW5jZW9mIFByb2JsZW1FZGl0b3JQYXJ0KSB7CisJCQkJKChQcm9ibGVtRWRpdG9yUGFydClnZXRFZGl0b3IobGFzdEVkaXRvclBhZ2UpKS5zZXREaWFnbm9zdGljKGRpYWdub3N0aWMpOworCQkJCWlmIChkaWFnbm9zdGljLmdldFNldmVyaXR5KCkgIT0gRGlhZ25vc3RpYy5PSykgeworCQkJCQlzZXRBY3RpdmVQYWdlKGxhc3RFZGl0b3JQYWdlKTsKKwkJCQl9CisJCQl9CisJCQllbHNlIGlmIChkaWFnbm9zdGljLmdldFNldmVyaXR5KCkgIT0gRGlhZ25vc3RpYy5PSykgeworCQkJCVByb2JsZW1FZGl0b3JQYXJ0IHByb2JsZW1FZGl0b3JQYXJ0ID0gbmV3IFByb2JsZW1FZGl0b3JQYXJ0KCk7CisJCQkJcHJvYmxlbUVkaXRvclBhcnQuc2V0RGlhZ25vc3RpYyhkaWFnbm9zdGljKTsKKwkJCQlwcm9ibGVtRWRpdG9yUGFydC5zZXRNYXJrZXJIZWxwZXIobWFya2VySGVscGVyKTsKKwkJCQl0cnkgeworCQkJCQlhZGRQYWdlKCsrbGFzdEVkaXRvclBhZ2UsIHByb2JsZW1FZGl0b3JQYXJ0LCBnZXRFZGl0b3JJbnB1dCgpKTsKKwkJCQkJc2V0UGFnZVRleHQobGFzdEVkaXRvclBhZ2UsIHByb2JsZW1FZGl0b3JQYXJ0LmdldFBhcnROYW1lKCkpOworCQkJCQlzZXRBY3RpdmVQYWdlKGxhc3RFZGl0b3JQYWdlKTsKKwkJCQkJc2hvd1RhYnMoKTsKKwkJCQl9CisJCQkJY2F0Y2ggKFBhcnRJbml0RXhjZXB0aW9uIGV4Y2VwdGlvbikgeworCQkJCQlDb3JlRWRpdG9yUGx1Z2luLklOU1RBTkNFLmxvZyhleGNlcHRpb24pOworCQkJCX0KKwkJCX0KKworCQkJaWYgKG1hcmtlckhlbHBlci5oYXNNYXJrZXJzKGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKSkpIHsKKwkJCQltYXJrZXJIZWxwZXIuZGVsZXRlTWFya2VycyhlZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkpOworCQkJCWlmIChkaWFnbm9zdGljLmdldFNldmVyaXR5KCkgIT0gRGlhZ25vc3RpYy5PSykgeworCQkJCQl0cnkgeworCQkJCQkJbWFya2VySGVscGVyLmNyZWF0ZU1hcmtlcnMoZGlhZ25vc3RpYyk7CisJCQkJCX0KKwkJCQkJY2F0Y2ggKENvcmVFeGNlcHRpb24gZXhjZXB0aW9uKSB7CisJCQkJCQlDb3JlRWRpdG9yUGx1Z2luLklOU1RBTkNFLmxvZyhleGNlcHRpb24pOworCQkJCQl9CisJCQkJfQorCQkJfQorCQl9CisJfQorCisJLyoqCisJICogU2hvd3MgYSBkaWFsb2cgdGhhdCBhc2tzIGlmIGNvbmZsaWN0aW5nIGNoYW5nZXMgc2hvdWxkIGJlIGRpc2NhcmRlZC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgYm9vbGVhbiBoYW5kbGVEaXJ0eUNvbmZsaWN0KCkgeworCQlyZXR1cm4KKwkJCU1lc3NhZ2VEaWFsb2cub3BlblF1ZXN0aW9uCisJCQkJKGdldFNpdGUoKS5nZXRTaGVsbCgpLAorCQkJCSBnZXRTdHJpbmcoIl9VSV9GaWxlQ29uZmxpY3RfbGFiZWwiKSwgLy8kTk9OLU5MUy0xJAorCQkJCSBnZXRTdHJpbmcoIl9XQVJOX0ZpbGVDb25mbGljdCIpKTsgLy8kTk9OLU5MUy0xJAorCX0KKworCS8qKgorCSAqIFRoaXMgY3JlYXRlcyBhIG1vZGVsIGVkaXRvci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgUHJlZGljYXRlRWRpdG9yKCkgeworCQlzdXBlcigpOworCQlpbml0aWFsaXplRWRpdGluZ0RvbWFpbigpOworCX0KKworCS8qKgorCSAqIFRoaXMgc2V0cyB1cCB0aGUgZWRpdGluZyBkb21haW4gZm9yIHRoZSBtb2RlbCBlZGl0b3IuIDwhLS0gYmVnaW4tdXNlci1kb2MKKwkgKiAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogCisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBpbml0aWFsaXplRWRpdGluZ0RvbWFpbigpIHsKKwkJaW5pdGlhbGl6ZUVkaXRpbmdEb21haW5HZW4oKTsKKwkJZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpLmdldFJlc291cmNlRmFjdG9yeVJlZ2lzdHJ5KCkKKwkJCQkuZ2V0RXh0ZW5zaW9uVG9GYWN0b3J5TWFwKCkucHV0KCIqIiwKKwkJCQkJCVNURU1YTUlSZXNvdXJjZUZhY3RvcnlJbXBsLklOU1RBTkNFKTsKKworCQllZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkuZ2V0UmVzb3VyY2VGYWN0b3J5UmVnaXN0cnkoKQorCQkJCS5nZXRQcm90b2NvbFRvRmFjdG9yeU1hcCgpLnB1dCgicGxhdGZvcm0iLAorCQkJCQkJU1RFTVhNSVJlc291cmNlRmFjdG9yeUltcGwuSU5TVEFOQ0UpOworCX0gLy8gaW5pdGlhbGl6ZUVkaXRpbmdEb21haW4KKwkKKwkvKioKKwkgKiBUaGlzIHNldHMgdXAgdGhlIGVkaXRpbmcgZG9tYWluIGZvciB0aGUgbW9kZWwgZWRpdG9yLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIGluaXRpYWxpemVFZGl0aW5nRG9tYWluR2VuKCkgeworCQkvLyBDcmVhdGUgYW4gYWRhcHRlciBmYWN0b3J5IHRoYXQgeWllbGRzIGl0ZW0gcHJvdmlkZXJzLgorCQkvLworCQlhZGFwdGVyRmFjdG9yeSA9IG5ldyBDb21wb3NlZEFkYXB0ZXJGYWN0b3J5KENvbXBvc2VkQWRhcHRlckZhY3RvcnkuRGVzY3JpcHRvci5SZWdpc3RyeS5JTlNUQU5DRSk7CisKKwkJYWRhcHRlckZhY3RvcnkuYWRkQWRhcHRlckZhY3RvcnkobmV3IFJlc291cmNlSXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkoKSk7CisJCWFkYXB0ZXJGYWN0b3J5LmFkZEFkYXB0ZXJGYWN0b3J5KG5ldyBDb21tb25JdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSgpKTsKKwkJYWRhcHRlckZhY3RvcnkuYWRkQWRhcHRlckZhY3RvcnkobmV3IEV4cGVyaW1lbnRJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSgpKTsKKwkJYWRhcHRlckZhY3RvcnkuYWRkQWRhcHRlckZhY3RvcnkobmV3IEdyYXBoSXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkoKSk7CisJCWFkYXB0ZXJGYWN0b3J5LmFkZEFkYXB0ZXJGYWN0b3J5KG5ldyBNb2RlbEl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5KCkpOworCQlhZGFwdGVyRmFjdG9yeS5hZGRBZGFwdGVyRmFjdG9yeShuZXcgTW9kaWZpZXJJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSgpKTsKKwkJYWRhcHRlckZhY3RvcnkuYWRkQWRhcHRlckZhY3RvcnkobmV3IFByZWRpY2F0ZUl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5KCkpOworCQlhZGFwdGVyRmFjdG9yeS5hZGRBZGFwdGVyRmFjdG9yeShuZXcgU2NlbmFyaW9JdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSgpKTsKKwkJYWRhcHRlckZhY3RvcnkuYWRkQWRhcHRlckZhY3RvcnkobmV3IFNlcXVlbmNlckl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5KCkpOworCQlhZGFwdGVyRmFjdG9yeS5hZGRBZGFwdGVyRmFjdG9yeShuZXcgVHJpZ2dlckl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5KCkpOworCQlhZGFwdGVyRmFjdG9yeS5hZGRBZGFwdGVyRmFjdG9yeShuZXcgU29sdmVySXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkoKSk7CisJCWFkYXB0ZXJGYWN0b3J5LmFkZEFkYXB0ZXJGYWN0b3J5KG5ldyBMb2dnZXJJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSgpKTsKKwkJYWRhcHRlckZhY3RvcnkuYWRkQWRhcHRlckZhY3RvcnkobmV3IEVjb3JlSXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkoKSk7CisJCWFkYXB0ZXJGYWN0b3J5LmFkZEFkYXB0ZXJGYWN0b3J5KG5ldyBSZWZsZWN0aXZlSXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkoKSk7CisKKwkJLy8gQ3JlYXRlIHRoZSBjb21tYW5kIHN0YWNrIHRoYXQgd2lsbCBub3RpZnkgdGhpcyBlZGl0b3IgYXMgY29tbWFuZHMgYXJlIGV4ZWN1dGVkLgorCQkvLworCQlCYXNpY0NvbW1hbmRTdGFjayBjb21tYW5kU3RhY2sgPSBuZXcgQmFzaWNDb21tYW5kU3RhY2soKTsKKworCQkvLyBBZGQgYSBsaXN0ZW5lciB0byBzZXQgdGhlIG1vc3QgcmVjZW50IGNvbW1hbmQncyBhZmZlY3RlZCBvYmplY3RzIHRvIGJlIHRoZSBzZWxlY3Rpb24gb2YgdGhlIHZpZXdlciB3aXRoIGZvY3VzLgorCQkvLworCQljb21tYW5kU3RhY2suYWRkQ29tbWFuZFN0YWNrTGlzdGVuZXIKKwkJCShuZXcgQ29tbWFuZFN0YWNrTGlzdGVuZXIoKSB7CisJCQkJIHB1YmxpYyB2b2lkIGNvbW1hbmRTdGFja0NoYW5nZWQoZmluYWwgRXZlbnRPYmplY3QgZXZlbnQpIHsKKwkJCQkJIGdldENvbnRhaW5lcigpLmdldERpc3BsYXkoKS5hc3luY0V4ZWMKKwkJCQkJCSAobmV3IFJ1bm5hYmxlKCkgeworCQkJCQkJCSAgcHVibGljIHZvaWQgcnVuKCkgeworCQkJCQkJCQkgIGZpcmVQcm9wZXJ0eUNoYW5nZShJRWRpdG9yUGFydC5QUk9QX0RJUlRZKTsKKworCQkJCQkJCQkgIC8vIFRyeSB0byBzZWxlY3QgdGhlIGFmZmVjdGVkIG9iamVjdHMuCisJCQkJCQkJCSAgLy8KKwkJCQkJCQkJICBDb21tYW5kIG1vc3RSZWNlbnRDb21tYW5kID0gKChDb21tYW5kU3RhY2spZXZlbnQuZ2V0U291cmNlKCkpLmdldE1vc3RSZWNlbnRDb21tYW5kKCk7CisJCQkJCQkJCSAgaWYgKG1vc3RSZWNlbnRDb21tYW5kICE9IG51bGwpIHsKKwkJCQkJCQkJCSAgc2V0U2VsZWN0aW9uVG9WaWV3ZXIobW9zdFJlY2VudENvbW1hbmQuZ2V0QWZmZWN0ZWRPYmplY3RzKCkpOworCQkJCQkJCQkgIH0KKwkJCQkJCQkJICBpZiAocHJvcGVydHlTaGVldFBhZ2UgIT0gbnVsbCAmJiAhcHJvcGVydHlTaGVldFBhZ2UuZ2V0Q29udHJvbCgpLmlzRGlzcG9zZWQoKSkgeworCQkJCQkJCQkJICBwcm9wZXJ0eVNoZWV0UGFnZS5yZWZyZXNoKCk7CisJCQkJCQkJCSAgfQorCQkJCQkJCSAgfQorCQkJCQkJICB9KTsKKwkJCQkgfQorCQkJIH0pOworCisJCS8vIENyZWF0ZSB0aGUgZWRpdGluZyBkb21haW4gd2l0aCBhIHNwZWNpYWwgY29tbWFuZCBzdGFjay4KKwkJLy8KKwkJZWRpdGluZ0RvbWFpbiA9IG5ldyBBZGFwdGVyRmFjdG9yeUVkaXRpbmdEb21haW4oYWRhcHRlckZhY3RvcnksIGNvbW1hbmRTdGFjaywgbmV3IEhhc2hNYXA8UmVzb3VyY2UsIEJvb2xlYW4+KCkpOworCX0KKworCS8qKgorCSAqIFRoaXMgaXMgaGVyZSBmb3IgdGhlIGxpc3RlbmVyIHRvIGJlIGFibGUgdG8gY2FsbCBpdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwkJCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIGZpcmVQcm9wZXJ0eUNoYW5nZShpbnQgYWN0aW9uKSB7CisJCXN1cGVyLmZpcmVQcm9wZXJ0eUNoYW5nZShhY3Rpb24pOworCX0KKworCS8qKgorCSAqIFRoaXMgc2V0cyB0aGUgc2VsZWN0aW9uIGludG8gd2hpY2hldmVyIHZpZXdlciBpcyBhY3RpdmUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgc2V0U2VsZWN0aW9uVG9WaWV3ZXIoQ29sbGVjdGlvbjw/PiBjb2xsZWN0aW9uKSB7CisJCWZpbmFsIENvbGxlY3Rpb248Pz4gdGhlU2VsZWN0aW9uID0gY29sbGVjdGlvbjsKKwkJLy8gTWFrZSBzdXJlIGl0J3Mgb2theS4KKwkJLy8KKwkJaWYgKHRoZVNlbGVjdGlvbiAhPSBudWxsICYmICF0aGVTZWxlY3Rpb24uaXNFbXB0eSgpKSB7CisJCQlSdW5uYWJsZSBydW5uYWJsZSA9CisJCQkJbmV3IFJ1bm5hYmxlKCkgeworCQkJCQlwdWJsaWMgdm9pZCBydW4oKSB7CisJCQkJCQkvLyBUcnkgdG8gc2VsZWN0IHRoZSBpdGVtcyBpbiB0aGUgY3VycmVudCBjb250ZW50IHZpZXdlciBvZiB0aGUgZWRpdG9yLgorCQkJCQkJLy8KKwkJCQkJCWlmIChjdXJyZW50Vmlld2VyICE9IG51bGwpIHsKKwkJCQkJCQljdXJyZW50Vmlld2VyLnNldFNlbGVjdGlvbihuZXcgU3RydWN0dXJlZFNlbGVjdGlvbih0aGVTZWxlY3Rpb24udG9BcnJheSgpKSwgdHJ1ZSk7CisJCQkJCQl9CisJCQkJCX0KKwkJCQl9OworCQkJZ2V0U2l0ZSgpLmdldFNoZWxsKCkuZ2V0RGlzcGxheSgpLmFzeW5jRXhlYyhydW5uYWJsZSk7CisJCX0KKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgdGhlIGVkaXRpbmcgZG9tYWluIGFzIHJlcXVpcmVkIGJ5IHRoZSB7QGxpbmsgSUVkaXRpbmdEb21haW5Qcm92aWRlcn0gaW50ZXJmYWNlLgorCSAqIFRoaXMgaXMgaW1wb3J0YW50IGZvciBpbXBsZW1lbnRpbmcgdGhlIHN0YXRpYyBtZXRob2RzIG9mIHtAbGluayBBZGFwdGVyRmFjdG9yeUVkaXRpbmdEb21haW59CisJICogYW5kIGZvciBzdXBwb3J0aW5nIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5hY3Rpb24uQ29tbWFuZEFjdGlvbn0uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVkaXRpbmdEb21haW4gZ2V0RWRpdGluZ0RvbWFpbigpIHsKKwkJcmV0dXJuIGVkaXRpbmdEb21haW47CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIGNsYXNzIFJldmVyc2VBZGFwdGVyRmFjdG9yeUNvbnRlbnRQcm92aWRlciBleHRlbmRzIEFkYXB0ZXJGYWN0b3J5Q29udGVudFByb3ZpZGVyIHsKKwkJLyoqCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlwdWJsaWMgUmV2ZXJzZUFkYXB0ZXJGYWN0b3J5Q29udGVudFByb3ZpZGVyKEFkYXB0ZXJGYWN0b3J5IGFkYXB0ZXJGYWN0b3J5KSB7CisJCQlzdXBlcihhZGFwdGVyRmFjdG9yeSk7CisJCX0KKworCQkvKioKKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUBPdmVycmlkZQorCQlwdWJsaWMgT2JqZWN0IFtdIGdldEVsZW1lbnRzKE9iamVjdCBvYmplY3QpIHsKKwkJCU9iamVjdCBwYXJlbnQgPSBzdXBlci5nZXRQYXJlbnQob2JqZWN0KTsKKwkJCXJldHVybiAocGFyZW50ID09IG51bGwgPyBDb2xsZWN0aW9ucy5FTVBUWV9TRVQgOiBDb2xsZWN0aW9ucy5zaW5nbGV0b24ocGFyZW50KSkudG9BcnJheSgpOworCQl9CisKKwkJLyoqCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlAT3ZlcnJpZGUKKwkJcHVibGljIE9iamVjdCBbXSBnZXRDaGlsZHJlbihPYmplY3Qgb2JqZWN0KSB7CisJCQlPYmplY3QgcGFyZW50ID0gc3VwZXIuZ2V0UGFyZW50KG9iamVjdCk7CisJCQlyZXR1cm4gKHBhcmVudCA9PSBudWxsID8gQ29sbGVjdGlvbnMuRU1QVFlfU0VUIDogQ29sbGVjdGlvbnMuc2luZ2xldG9uKHBhcmVudCkpLnRvQXJyYXkoKTsKKwkJfQorCisJCS8qKgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJQE92ZXJyaWRlCisJCXB1YmxpYyBib29sZWFuIGhhc0NoaWxkcmVuKE9iamVjdCBvYmplY3QpIHsKKwkJCU9iamVjdCBwYXJlbnQgPSBzdXBlci5nZXRQYXJlbnQob2JqZWN0KTsKKwkJCXJldHVybiBwYXJlbnQgIT0gbnVsbDsKKwkJfQorCisJCS8qKgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJQE92ZXJyaWRlCisJCXB1YmxpYyBPYmplY3QgZ2V0UGFyZW50KE9iamVjdCBvYmplY3QpIHsKKwkJCXJldHVybiBudWxsOworCQl9CisJfQorCisJLyoqCisJICogVGhpcyBtYWtlcyBzdXJlIHRoYXQgb25lIGNvbnRlbnQgdmlld2VyLCBlaXRoZXIgZm9yIHRoZSBjdXJyZW50IHBhZ2Ugb3IgdGhlIG91dGxpbmUgdmlldywgaWYgaXQgaGFzIGZvY3VzLAorCSAqIGlzIHRoZSBjdXJyZW50IG9uZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRDdXJyZW50Vmlld2VyKFZpZXdlciB2aWV3ZXIpIHsKKwkJLy8gSWYgaXQgaXMgY2hhbmdpbmcuLi4KKwkJLy8KKwkJaWYgKGN1cnJlbnRWaWV3ZXIgIT0gdmlld2VyKSB7CisJCQlpZiAoc2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyID09IG51bGwpIHsKKwkJCQkvLyBDcmVhdGUgdGhlIGxpc3RlbmVyIG9uIGRlbWFuZC4KKwkJCQkvLworCQkJCXNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lciA9CisJCQkJCW5ldyBJU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyKCkgeworCQkJCQkJLy8gVGhpcyBqdXN0IG5vdGlmaWVzIHRob3NlIHRoaW5ncyB0aGF0IGFyZSBhZmZlY3RlZCBieSB0aGUgc2VjdGlvbi4KKwkJCQkJCS8vCisJCQkJCQlwdWJsaWMgdm9pZCBzZWxlY3Rpb25DaGFuZ2VkKFNlbGVjdGlvbkNoYW5nZWRFdmVudCBzZWxlY3Rpb25DaGFuZ2VkRXZlbnQpIHsKKwkJCQkJCQlzZXRTZWxlY3Rpb24oc2VsZWN0aW9uQ2hhbmdlZEV2ZW50LmdldFNlbGVjdGlvbigpKTsKKwkJCQkJCX0KKwkJCQkJfTsKKwkJCX0KKworCQkJLy8gU3RvcCBsaXN0ZW5pbmcgdG8gdGhlIG9sZCBvbmUuCisJCQkvLworCQkJaWYgKGN1cnJlbnRWaWV3ZXIgIT0gbnVsbCkgeworCQkJCWN1cnJlbnRWaWV3ZXIucmVtb3ZlU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyKHNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcik7CisJCQl9CisKKwkJCS8vIFN0YXJ0IGxpc3RlbmluZyB0byB0aGUgbmV3IG9uZS4KKwkJCS8vCisJCQlpZiAodmlld2VyICE9IG51bGwpIHsKKwkJCQl2aWV3ZXIuYWRkU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyKHNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcik7CisJCQl9CisKKwkJCS8vIFJlbWVtYmVyIGl0LgorCQkJLy8KKwkJCWN1cnJlbnRWaWV3ZXIgPSB2aWV3ZXI7CisKKwkJCS8vIFNldCB0aGUgZWRpdG9ycyBzZWxlY3Rpb24gYmFzZWQgb24gdGhlIGN1cnJlbnQgdmlld2VyJ3Mgc2VsZWN0aW9uLgorCQkJLy8KKwkJCXNldFNlbGVjdGlvbihjdXJyZW50Vmlld2VyID09IG51bGwgPyBTdHJ1Y3R1cmVkU2VsZWN0aW9uLkVNUFRZIDogY3VycmVudFZpZXdlci5nZXRTZWxlY3Rpb24oKSk7CisJCX0KKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgdGhlIHZpZXdlciBhcyByZXF1aXJlZCBieSB0aGUge0BsaW5rIElWaWV3ZXJQcm92aWRlcn0gaW50ZXJmYWNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBWaWV3ZXIgZ2V0Vmlld2VyKCkgeworCQlyZXR1cm4gY3VycmVudFZpZXdlcjsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGNyZWF0ZXMgYSBjb250ZXh0IG1lbnUgZm9yIHRoZSB2aWV3ZXIgYW5kIGFkZHMgYSBsaXN0ZW5lciBhcyB3ZWxsCisJICogcmVnaXN0ZXJpbmcgdGhlIG1lbnUgZm9yIGV4dGVuc2lvbi4gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLQorCSAqIGVuZC11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCXByb3RlY3RlZCB2b2lkIGNyZWF0ZUNvbnRleHRNZW51Rm9yKFN0cnVjdHVyZWRWaWV3ZXIgdmlld2VyKSB7CisJCU1lbnVNYW5hZ2VyIGNvbnRleHRNZW51ID0gbmV3IE1lbnVNYW5hZ2VyKCIjUG9wVXAiKTsgLy8kTk9OLU5MUy0xJAorCQljb250ZXh0TWVudS5hZGQobmV3IFNlcGFyYXRvcigiYWRkaXRpb25zIikpOyAvLyROT04tTkxTLTEkCisJCWNvbnRleHRNZW51LnNldFJlbW92ZUFsbFdoZW5TaG93bih0cnVlKTsKKwkJY29udGV4dE1lbnUuYWRkTWVudUxpc3RlbmVyKHRoaXMpOworCQlNZW51IG1lbnUgPSBjb250ZXh0TWVudS5jcmVhdGVDb250ZXh0TWVudSh2aWV3ZXIuZ2V0Q29udHJvbCgpKTsKKwkJdmlld2VyLmdldENvbnRyb2woKS5zZXRNZW51KG1lbnUpOworCQlnZXRTaXRlKCkucmVnaXN0ZXJDb250ZXh0TWVudShjb250ZXh0TWVudSwgdmlld2VyKTsKKworCQlpbnQgZG5kT3BlcmF0aW9ucyA9IERORC5EUk9QX0NPUFkgfCBETkQuRFJPUF9NT1ZFIHwgRE5ELkRST1BfTElOSzsKKwkJVHJhbnNmZXJbXSB0cmFuc2ZlcnMgPSBuZXcgVHJhbnNmZXJbXSB7TG9jYWxTZWxlY3Rpb25UcmFuc2Zlci5nZXRUcmFuc2ZlcigpLCBMb2NhbFRyYW5zZmVyLmdldEluc3RhbmNlKCksCisJCQkJVGV4dFRyYW5zZmVyLmdldEluc3RhbmNlKCkgfTsKKwkJdmlld2VyLmFkZERyYWdTdXBwb3J0KGRuZE9wZXJhdGlvbnMsIHRyYW5zZmVycywgbmV3IFZpZXdlckRyYWdBZGFwdGVyKAorCQkJCXZpZXdlcikpOworCQl2aWV3ZXIuYWRkRHJvcFN1cHBvcnQoZG5kT3BlcmF0aW9ucywgdHJhbnNmZXJzLAorCQkJCW5ldyBFZGl0aW5nRG9tYWluVmlld2VyRHJvcEFkYXB0ZXIoZWRpdGluZ0RvbWFpbiwgdmlld2VyKSk7CisJfSAvLyBjcmVhdGVDb250ZXh0TWVudUZvcgorCQorCS8qKgorCSAqIFRoaXMgY3JlYXRlcyBhIGNvbnRleHQgbWVudSBmb3IgdGhlIHZpZXdlciBhbmQgYWRkcyBhIGxpc3RlbmVyIGFzIHdlbGwgcmVnaXN0ZXJpbmcgdGhlIG1lbnUgZm9yIGV4dGVuc2lvbi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBjcmVhdGVDb250ZXh0TWVudUZvckdlbihTdHJ1Y3R1cmVkVmlld2VyIHZpZXdlcikgeworCQlNZW51TWFuYWdlciBjb250ZXh0TWVudSA9IG5ldyBNZW51TWFuYWdlcigiI1BvcFVwIik7IC8vJE5PTi1OTFMtMSQKKwkJY29udGV4dE1lbnUuYWRkKG5ldyBTZXBhcmF0b3IoImFkZGl0aW9ucyIpKTsgLy8kTk9OLU5MUy0xJAorCQljb250ZXh0TWVudS5zZXRSZW1vdmVBbGxXaGVuU2hvd24odHJ1ZSk7CisJCWNvbnRleHRNZW51LmFkZE1lbnVMaXN0ZW5lcih0aGlzKTsKKwkJTWVudSBtZW51PSBjb250ZXh0TWVudS5jcmVhdGVDb250ZXh0TWVudSh2aWV3ZXIuZ2V0Q29udHJvbCgpKTsKKwkJdmlld2VyLmdldENvbnRyb2woKS5zZXRNZW51KG1lbnUpOworCQlnZXRTaXRlKCkucmVnaXN0ZXJDb250ZXh0TWVudShjb250ZXh0TWVudSwgbmV3IFVud3JhcHBpbmdTZWxlY3Rpb25Qcm92aWRlcih2aWV3ZXIpKTsKKworCQlpbnQgZG5kT3BlcmF0aW9ucyA9IERORC5EUk9QX0NPUFkgfCBETkQuRFJPUF9NT1ZFIHwgRE5ELkRST1BfTElOSzsKKwkJVHJhbnNmZXJbXSB0cmFuc2ZlcnMgPSBuZXcgVHJhbnNmZXJbXSB7IExvY2FsVHJhbnNmZXIuZ2V0SW5zdGFuY2UoKSB9OworCQl2aWV3ZXIuYWRkRHJhZ1N1cHBvcnQoZG5kT3BlcmF0aW9ucywgdHJhbnNmZXJzLCBuZXcgVmlld2VyRHJhZ0FkYXB0ZXIodmlld2VyKSk7CisJCXZpZXdlci5hZGREcm9wU3VwcG9ydChkbmRPcGVyYXRpb25zLCB0cmFuc2ZlcnMsIG5ldyBFZGl0aW5nRG9tYWluVmlld2VyRHJvcEFkYXB0ZXIoZWRpdGluZ0RvbWFpbiwgdmlld2VyKSk7CisJfQorCisJLyoqCisJICogVGhpcyBpcyB0aGUgbWV0aG9kIGNhbGxlZCB0byBsb2FkIGEgcmVzb3VyY2UgaW50byB0aGUgZWRpdGluZyBkb21haW4ncyByZXNvdXJjZSBzZXQgYmFzZWQgb24gdGhlIGVkaXRvcidzIGlucHV0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIGNyZWF0ZU1vZGVsKCkgeworCQlVUkkgcmVzb3VyY2VVUkkgPSBFZGl0VUlVdGlsLmdldFVSSShnZXRFZGl0b3JJbnB1dCgpKTsKKwkJRXhjZXB0aW9uIGV4Y2VwdGlvbiA9IG51bGw7CisJCVJlc291cmNlIHJlc291cmNlID0gbnVsbDsKKwkJdHJ5IHsKKwkJCS8vIExvYWQgdGhlIHJlc291cmNlIHRocm91Z2ggdGhlIGVkaXRpbmcgZG9tYWluLgorCQkJLy8KKwkJCXJlc291cmNlID0gZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpLmdldFJlc291cmNlKHJlc291cmNlVVJJLCB0cnVlKTsKKwkJfQorCQljYXRjaCAoRXhjZXB0aW9uIGUpIHsKKwkJCWV4Y2VwdGlvbiA9IGU7CisJCQlyZXNvdXJjZSA9IGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKS5nZXRSZXNvdXJjZShyZXNvdXJjZVVSSSwgZmFsc2UpOworCQl9CisKKwkJRGlhZ25vc3RpYyBkaWFnbm9zdGljID0gYW5hbHl6ZVJlc291cmNlUHJvYmxlbXMocmVzb3VyY2UsIGV4Y2VwdGlvbik7CisJCWlmIChkaWFnbm9zdGljLmdldFNldmVyaXR5KCkgIT0gRGlhZ25vc3RpYy5PSykgeworCQkJcmVzb3VyY2VUb0RpYWdub3N0aWNNYXAucHV0KHJlc291cmNlLCAgYW5hbHl6ZVJlc291cmNlUHJvYmxlbXMocmVzb3VyY2UsIGV4Y2VwdGlvbikpOworCQl9CisJCWVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKS5lQWRhcHRlcnMoKS5hZGQocHJvYmxlbUluZGljYXRpb25BZGFwdGVyKTsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIGEgZGlhZ25vc3RpYyBkZXNjcmliaW5nIHRoZSBlcnJvcnMgYW5kIHdhcm5pbmdzIGxpc3RlZCBpbiB0aGUgcmVzb3VyY2UKKwkgKiBhbmQgdGhlIHNwZWNpZmllZCBleGNlcHRpb24gKGlmIGFueSkuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIERpYWdub3N0aWMgYW5hbHl6ZVJlc291cmNlUHJvYmxlbXMoUmVzb3VyY2UgcmVzb3VyY2UsIEV4Y2VwdGlvbiBleGNlcHRpb24pIHsKKwkJaWYgKCFyZXNvdXJjZS5nZXRFcnJvcnMoKS5pc0VtcHR5KCkgfHwgIXJlc291cmNlLmdldFdhcm5pbmdzKCkuaXNFbXB0eSgpKSB7CisJCQlCYXNpY0RpYWdub3N0aWMgYmFzaWNEaWFnbm9zdGljID0KKwkJCQluZXcgQmFzaWNEaWFnbm9zdGljCisJCQkJCShEaWFnbm9zdGljLkVSUk9SLAorCQkJCQkgIm9yZy5lY2xpcHNlLnN0ZW0uY29yZS5lZGl0b3IiLCAvLyROT04tTkxTLTEkCisJCQkJCSAwLAorCQkJCQkgZ2V0U3RyaW5nKCJfVUlfQ3JlYXRlTW9kZWxFcnJvcl9tZXNzYWdlIiwgcmVzb3VyY2UuZ2V0VVJJKCkpLCAvLyROT04tTkxTLTEkCisJCQkJCSBuZXcgT2JqZWN0IFtdIHsgZXhjZXB0aW9uID09IG51bGwgPyAoT2JqZWN0KXJlc291cmNlIDogZXhjZXB0aW9uIH0pOworCQkJYmFzaWNEaWFnbm9zdGljLm1lcmdlKEVjb3JlVXRpbC5jb21wdXRlRGlhZ25vc3RpYyhyZXNvdXJjZSwgdHJ1ZSkpOworCQkJcmV0dXJuIGJhc2ljRGlhZ25vc3RpYzsKKwkJfQorCQllbHNlIGlmIChleGNlcHRpb24gIT0gbnVsbCkgeworCQkJcmV0dXJuCisJCQkJbmV3IEJhc2ljRGlhZ25vc3RpYworCQkJCQkoRGlhZ25vc3RpYy5FUlJPUiwKKwkJCQkJICJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZWRpdG9yIiwgLy8kTk9OLU5MUy0xJAorCQkJCQkgMCwKKwkJCQkJIGdldFN0cmluZygiX1VJX0NyZWF0ZU1vZGVsRXJyb3JfbWVzc2FnZSIsIHJlc291cmNlLmdldFVSSSgpKSwgLy8kTk9OLU5MUy0xJAorCQkJCQkgbmV3IE9iamVjdFtdIHsgZXhjZXB0aW9uIH0pOworCQl9CisJCWVsc2UgeworCQkJcmV0dXJuIERpYWdub3N0aWMuT0tfSU5TVEFOQ0U7CisJCX0KKwl9CisKKwkvKioKKwkgKiBUaGlzIGlzIHRoZSBtZXRob2QgdXNlZCBieSB0aGUgZnJhbWV3b3JrIHRvIGluc3RhbGwgeW91ciBvd24gY29udHJvbHMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGNyZWF0ZVBhZ2VzKCkgeworCQkvLyBDcmVhdGVzIHRoZSBtb2RlbCBmcm9tIHRoZSBlZGl0b3IgaW5wdXQKKwkJLy8KKwkJY3JlYXRlTW9kZWwoKTsKKworCQkvLyBPbmx5IGNyZWF0ZXMgdGhlIG90aGVyIHBhZ2VzIGlmIHRoZXJlIGlzIHNvbWV0aGluZyB0aGF0IGNhbiBiZSBlZGl0ZWQKKwkJLy8KKwkJaWYgKCFnZXRFZGl0aW5nRG9tYWluKCkuZ2V0UmVzb3VyY2VTZXQoKS5nZXRSZXNvdXJjZXMoKS5pc0VtcHR5KCkpIHsKKwkJCS8vIENyZWF0ZSBhIHBhZ2UgZm9yIHRoZSBzZWxlY3Rpb24gdHJlZSB2aWV3LgorCQkJLy8KKwkJCVRyZWUgdHJlZSA9IG5ldyBUcmVlKGdldENvbnRhaW5lcigpLCBTV1QuTVVMVEkpOworCQkJc2VsZWN0aW9uVmlld2VyID0gbmV3IFRyZWVWaWV3ZXIodHJlZSk7CisJCQlzZXRDdXJyZW50Vmlld2VyKHNlbGVjdGlvblZpZXdlcik7CisKKwkJCXNlbGVjdGlvblZpZXdlci5zZXRDb250ZW50UHJvdmlkZXIobmV3IEFkYXB0ZXJGYWN0b3J5Q29udGVudFByb3ZpZGVyKGFkYXB0ZXJGYWN0b3J5KSk7CisJCQlzZWxlY3Rpb25WaWV3ZXIuc2V0TGFiZWxQcm92aWRlcihuZXcgQWRhcHRlckZhY3RvcnlMYWJlbFByb3ZpZGVyKGFkYXB0ZXJGYWN0b3J5KSk7CisJCQkvL3NlbGVjdGlvblZpZXdlci5zZXRJbnB1dChlZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkpOworCQkJc2VsZWN0aW9uVmlld2VyLnNldElucHV0KGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKS5nZXRSZXNvdXJjZXMoKS5nZXQoMCkpOworCQkJc2VsZWN0aW9uVmlld2VyLnNldFNlbGVjdGlvbihuZXcgU3RydWN0dXJlZFNlbGVjdGlvbihlZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkuZ2V0UmVzb3VyY2VzKCkuZ2V0KDApKSwgdHJ1ZSk7CisKKwkJCW5ldyBBZGFwdGVyRmFjdG9yeVRyZWVFZGl0b3Ioc2VsZWN0aW9uVmlld2VyLmdldFRyZWUoKSwgYWRhcHRlckZhY3RvcnkpOworCisJCQljcmVhdGVDb250ZXh0TWVudUZvcihzZWxlY3Rpb25WaWV3ZXIpOworCQkJaW50IHBhZ2VJbmRleCA9IGFkZFBhZ2UodHJlZSk7CisJCQlzZXRQYWdlVGV4dChwYWdlSW5kZXgsIGdldFN0cmluZygiX1VJX1NlbGVjdGlvblBhZ2VfbGFiZWwiKSk7IC8vJE5PTi1OTFMtMSQKKworCQkJZ2V0U2l0ZSgpLmdldFNoZWxsKCkuZ2V0RGlzcGxheSgpLmFzeW5jRXhlYworCQkJCShuZXcgUnVubmFibGUoKSB7CisJCQkJCSBwdWJsaWMgdm9pZCBydW4oKSB7CisJCQkJCQkgc2V0QWN0aXZlUGFnZSgwKTsKKwkJCQkJIH0KKwkJCQkgfSk7CisJCX0KKworCQkvLyBFbnN1cmVzIHRoYXQgdGhpcyBlZGl0b3Igd2lsbCBvbmx5IGRpc3BsYXkgdGhlIHBhZ2UncyB0YWIKKwkJLy8gYXJlYSBpZiB0aGVyZSBhcmUgbW9yZSB0aGFuIG9uZSBwYWdlCisJCS8vCisJCWdldENvbnRhaW5lcigpLmFkZENvbnRyb2xMaXN0ZW5lcgorCQkJKG5ldyBDb250cm9sQWRhcHRlcigpIHsKKwkJCQlib29sZWFuIGd1YXJkID0gZmFsc2U7CisJCQkJQE92ZXJyaWRlCisJCQkJcHVibGljIHZvaWQgY29udHJvbFJlc2l6ZWQoQ29udHJvbEV2ZW50IGV2ZW50KSB7CisJCQkJCWlmICghZ3VhcmQpIHsKKwkJCQkJCWd1YXJkID0gdHJ1ZTsKKwkJCQkJCWhpZGVUYWJzKCk7CisJCQkJCQlndWFyZCA9IGZhbHNlOworCQkJCQl9CisJCQkJfQorCQkJIH0pOworCisJCWdldFNpdGUoKS5nZXRTaGVsbCgpLmdldERpc3BsYXkoKS5hc3luY0V4ZWMKKwkJCShuZXcgUnVubmFibGUoKSB7CisJCQkJIHB1YmxpYyB2b2lkIHJ1bigpIHsKKwkJCQkJIHVwZGF0ZVByb2JsZW1JbmRpY2F0aW9uKCk7CisJCQkJIH0KKwkJCSB9KTsKKwl9IC8vIGNyZWF0ZVBhZ2VzCisJCisJLyoqCisJICogVGhpcyBpcyB0aGUgbWV0aG9kIHVzZWQgYnkgdGhlIGZyYW1ld29yayB0byBpbnN0YWxsIHlvdXIgb3duIGNvbnRyb2xzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCS8vQE92ZXJyaWRlCisJcHVibGljIHZvaWQgY3JlYXRlUGFnZXNHZW4oKSB7CisJCS8vIENyZWF0ZXMgdGhlIG1vZGVsIGZyb20gdGhlIGVkaXRvciBpbnB1dAorCQkvLworCQljcmVhdGVNb2RlbCgpOworCisJCS8vIE9ubHkgY3JlYXRlcyB0aGUgb3RoZXIgcGFnZXMgaWYgdGhlcmUgaXMgc29tZXRoaW5nIHRoYXQgY2FuIGJlIGVkaXRlZAorCQkvLworCQlpZiAoIWdldEVkaXRpbmdEb21haW4oKS5nZXRSZXNvdXJjZVNldCgpLmdldFJlc291cmNlcygpLmlzRW1wdHkoKSkgeworCQkJLy8gQ3JlYXRlIGEgcGFnZSBmb3IgdGhlIHNlbGVjdGlvbiB0cmVlIHZpZXcuCisJCQkvLworCQkJVHJlZSB0cmVlID0gbmV3IFRyZWUoZ2V0Q29udGFpbmVyKCksIFNXVC5NVUxUSSk7CisJCQlzZWxlY3Rpb25WaWV3ZXIgPSBuZXcgVHJlZVZpZXdlcih0cmVlKTsKKwkJCXNldEN1cnJlbnRWaWV3ZXIoc2VsZWN0aW9uVmlld2VyKTsKKworCQkJc2VsZWN0aW9uVmlld2VyLnNldENvbnRlbnRQcm92aWRlcihuZXcgQWRhcHRlckZhY3RvcnlDb250ZW50UHJvdmlkZXIoYWRhcHRlckZhY3RvcnkpKTsKKwkJCXNlbGVjdGlvblZpZXdlci5zZXRMYWJlbFByb3ZpZGVyKG5ldyBBZGFwdGVyRmFjdG9yeUxhYmVsUHJvdmlkZXIoYWRhcHRlckZhY3RvcnkpKTsKKwkJCXNlbGVjdGlvblZpZXdlci5zZXRJbnB1dChlZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkpOworCQkJc2VsZWN0aW9uVmlld2VyLnNldFNlbGVjdGlvbihuZXcgU3RydWN0dXJlZFNlbGVjdGlvbihlZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkuZ2V0UmVzb3VyY2VzKCkuZ2V0KDApKSwgdHJ1ZSk7CisKKwkJCW5ldyBBZGFwdGVyRmFjdG9yeVRyZWVFZGl0b3Ioc2VsZWN0aW9uVmlld2VyLmdldFRyZWUoKSwgYWRhcHRlckZhY3RvcnkpOworCisJCQljcmVhdGVDb250ZXh0TWVudUZvcihzZWxlY3Rpb25WaWV3ZXIpOworCQkJaW50IHBhZ2VJbmRleCA9IGFkZFBhZ2UodHJlZSk7CisJCQlzZXRQYWdlVGV4dChwYWdlSW5kZXgsIGdldFN0cmluZygiX1VJX1NlbGVjdGlvblBhZ2VfbGFiZWwiKSk7IC8vJE5PTi1OTFMtMSQKKworCQkJZ2V0U2l0ZSgpLmdldFNoZWxsKCkuZ2V0RGlzcGxheSgpLmFzeW5jRXhlYworCQkJCShuZXcgUnVubmFibGUoKSB7CisJCQkJCSBwdWJsaWMgdm9pZCBydW4oKSB7CisJCQkJCQkgc2V0QWN0aXZlUGFnZSgwKTsKKwkJCQkJIH0KKwkJCQkgfSk7CisJCX0KKworCQkvLyBFbnN1cmVzIHRoYXQgdGhpcyBlZGl0b3Igd2lsbCBvbmx5IGRpc3BsYXkgdGhlIHBhZ2UncyB0YWIKKwkJLy8gYXJlYSBpZiB0aGVyZSBhcmUgbW9yZSB0aGFuIG9uZSBwYWdlCisJCS8vCisJCWdldENvbnRhaW5lcigpLmFkZENvbnRyb2xMaXN0ZW5lcgorCQkJKG5ldyBDb250cm9sQWRhcHRlcigpIHsKKwkJCQlib29sZWFuIGd1YXJkID0gZmFsc2U7CisJCQkJQE92ZXJyaWRlCisJCQkJcHVibGljIHZvaWQgY29udHJvbFJlc2l6ZWQoQ29udHJvbEV2ZW50IGV2ZW50KSB7CisJCQkJCWlmICghZ3VhcmQpIHsKKwkJCQkJCWd1YXJkID0gdHJ1ZTsKKwkJCQkJCWhpZGVUYWJzKCk7CisJCQkJCQlndWFyZCA9IGZhbHNlOworCQkJCQl9CisJCQkJfQorCQkJIH0pOworCisJCWdldFNpdGUoKS5nZXRTaGVsbCgpLmdldERpc3BsYXkoKS5hc3luY0V4ZWMKKwkJCShuZXcgUnVubmFibGUoKSB7CisJCQkJIHB1YmxpYyB2b2lkIHJ1bigpIHsKKwkJCQkJIHVwZGF0ZVByb2JsZW1JbmRpY2F0aW9uKCk7CisJCQkJIH0KKwkJCSB9KTsKKwl9CisKKwkvKioKKwkgKiBJZiB0aGVyZSBpcyBqdXN0IG9uZSBwYWdlIGluIHRoZSBtdWx0aS1wYWdlIGVkaXRvciBwYXJ0LAorCSAqIHRoaXMgaGlkZXMgdGhlIHNpbmdsZSB0YWIgYXQgdGhlIGJvdHRvbS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBoaWRlVGFicygpIHsKKwkJaWYgKGdldFBhZ2VDb3VudCgpIDw9IDEpIHsKKwkJCXNldFBhZ2VUZXh0KDAsICIiKTsgLy8kTk9OLU5MUy0xJAorCQkJaWYgKGdldENvbnRhaW5lcigpIGluc3RhbmNlb2YgQ1RhYkZvbGRlcikgeworCQkJCSgoQ1RhYkZvbGRlcilnZXRDb250YWluZXIoKSkuc2V0VGFiSGVpZ2h0KDEpOworCQkJCVBvaW50IHBvaW50ID0gZ2V0Q29udGFpbmVyKCkuZ2V0U2l6ZSgpOworCQkJCWdldENvbnRhaW5lcigpLnNldFNpemUocG9pbnQueCwgcG9pbnQueSArIDYpOworCQkJfQorCQl9CisJfQorCisJLyoqCisJICogSWYgdGhlcmUgaXMgbW9yZSB0aGFuIG9uZSBwYWdlIGluIHRoZSBtdWx0aS1wYWdlIGVkaXRvciBwYXJ0LAorCSAqIHRoaXMgc2hvd3MgdGhlIHRhYnMgYXQgdGhlIGJvdHRvbS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBzaG93VGFicygpIHsKKwkJaWYgKGdldFBhZ2VDb3VudCgpID4gMSkgeworCQkJc2V0UGFnZVRleHQoMCwgZ2V0U3RyaW5nKCJfVUlfU2VsZWN0aW9uUGFnZV9sYWJlbCIpKTsgLy8kTk9OLU5MUy0xJAorCQkJaWYgKGdldENvbnRhaW5lcigpIGluc3RhbmNlb2YgQ1RhYkZvbGRlcikgeworCQkJCSgoQ1RhYkZvbGRlcilnZXRDb250YWluZXIoKSkuc2V0VGFiSGVpZ2h0KFNXVC5ERUZBVUxUKTsKKwkJCQlQb2ludCBwb2ludCA9IGdldENvbnRhaW5lcigpLmdldFNpemUoKTsKKwkJCQlnZXRDb250YWluZXIoKS5zZXRTaXplKHBvaW50LngsIHBvaW50LnkgLSA2KTsKKwkJCX0KKwkJfQorCX0KKworCS8qKgorCSAqIFRoaXMgaXMgdXNlZCB0byB0cmFjayB0aGUgYWN0aXZlIHZpZXdlci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgdm9pZCBwYWdlQ2hhbmdlKGludCBwYWdlSW5kZXgpIHsKKwkJc3VwZXIucGFnZUNoYW5nZShwYWdlSW5kZXgpOworCisJCWlmIChjb250ZW50T3V0bGluZVBhZ2UgIT0gbnVsbCkgeworCQkJaGFuZGxlQ29udGVudE91dGxpbmVTZWxlY3Rpb24oY29udGVudE91dGxpbmVQYWdlLmdldFNlbGVjdGlvbigpKTsKKwkJfQorCX0KKworCS8qKgorCSAqIFRoaXMgaXMgaG93IHRoZSBmcmFtZXdvcmsgZGV0ZXJtaW5lcyB3aGljaCBpbnRlcmZhY2VzIHdlIGltcGxlbWVudC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAU3VwcHJlc3NXYXJuaW5ncygidW5jaGVja2VkIikKKwlAT3ZlcnJpZGUKKwlwdWJsaWMgT2JqZWN0IGdldEFkYXB0ZXIoQ2xhc3Mga2V5KSB7CisJCWlmIChrZXkuZXF1YWxzKElDb250ZW50T3V0bGluZVBhZ2UuY2xhc3MpKSB7CisJCQlyZXR1cm4gc2hvd091dGxpbmVWaWV3KCkgPyBnZXRDb250ZW50T3V0bGluZVBhZ2UoKSA6IG51bGw7CisJCX0KKwkJZWxzZSBpZiAoa2V5LmVxdWFscyhJUHJvcGVydHlTaGVldFBhZ2UuY2xhc3MpKSB7CisJCQlyZXR1cm4gZ2V0UHJvcGVydHlTaGVldFBhZ2UoKTsKKwkJfQorCQllbHNlIGlmIChrZXkuZXF1YWxzKElHb3RvTWFya2VyLmNsYXNzKSkgeworCQkJcmV0dXJuIHRoaXM7CisJCX0KKwkJZWxzZSB7CisJCQlyZXR1cm4gc3VwZXIuZ2V0QWRhcHRlcihrZXkpOworCQl9CisJfQorCisJLyoqCisJICogVGhpcyBhY2Nlc3NlcyBhIGNhY2hlZCB2ZXJzaW9uIG9mIHRoZSBjb250ZW50IG91dGxpbmVyLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBJQ29udGVudE91dGxpbmVQYWdlIGdldENvbnRlbnRPdXRsaW5lUGFnZSgpIHsKKwkJaWYgKGNvbnRlbnRPdXRsaW5lUGFnZSA9PSBudWxsKSB7CisJCQkvLyBUaGUgY29udGVudCBvdXRsaW5lIGlzIGp1c3QgYSB0cmVlLgorCQkJLy8KKwkJCWNsYXNzIE15Q29udGVudE91dGxpbmVQYWdlIGV4dGVuZHMgQ29udGVudE91dGxpbmVQYWdlIHsKKwkJCQlAT3ZlcnJpZGUKKwkJCQlwdWJsaWMgdm9pZCBjcmVhdGVDb250cm9sKENvbXBvc2l0ZSBwYXJlbnQpIHsKKwkJCQkJc3VwZXIuY3JlYXRlQ29udHJvbChwYXJlbnQpOworCQkJCQljb250ZW50T3V0bGluZVZpZXdlciA9IGdldFRyZWVWaWV3ZXIoKTsKKwkJCQkJY29udGVudE91dGxpbmVWaWV3ZXIuYWRkU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyKHRoaXMpOworCisJCQkJCS8vIFNldCB1cCB0aGUgdHJlZSB2aWV3ZXIuCisJCQkJCS8vCisJCQkJCWNvbnRlbnRPdXRsaW5lVmlld2VyLnNldENvbnRlbnRQcm92aWRlcihuZXcgQWRhcHRlckZhY3RvcnlDb250ZW50UHJvdmlkZXIoYWRhcHRlckZhY3RvcnkpKTsKKwkJCQkJY29udGVudE91dGxpbmVWaWV3ZXIuc2V0TGFiZWxQcm92aWRlcihuZXcgQWRhcHRlckZhY3RvcnlMYWJlbFByb3ZpZGVyKGFkYXB0ZXJGYWN0b3J5KSk7CisJCQkJCWNvbnRlbnRPdXRsaW5lVmlld2VyLnNldElucHV0KGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKSk7CisKKwkJCQkJLy8gTWFrZSBzdXJlIG91ciBwb3B1cHMgd29yay4KKwkJCQkJLy8KKwkJCQkJY3JlYXRlQ29udGV4dE1lbnVGb3IoY29udGVudE91dGxpbmVWaWV3ZXIpOworCisJCQkJCWlmICghZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpLmdldFJlc291cmNlcygpLmlzRW1wdHkoKSkgeworCQkJCQkgIC8vIFNlbGVjdCB0aGUgcm9vdCBvYmplY3QgaW4gdGhlIHZpZXcuCisJCQkJCSAgLy8KKwkJCQkJICBjb250ZW50T3V0bGluZVZpZXdlci5zZXRTZWxlY3Rpb24obmV3IFN0cnVjdHVyZWRTZWxlY3Rpb24oZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpLmdldFJlc291cmNlcygpLmdldCgwKSksIHRydWUpOworCQkJCQl9CisJCQkJfQorCisJCQkJQE92ZXJyaWRlCisJCQkJcHVibGljIHZvaWQgbWFrZUNvbnRyaWJ1dGlvbnMoSU1lbnVNYW5hZ2VyIG1lbnVNYW5hZ2VyLCBJVG9vbEJhck1hbmFnZXIgdG9vbEJhck1hbmFnZXIsIElTdGF0dXNMaW5lTWFuYWdlciBzdGF0dXNMaW5lTWFuYWdlcikgeworCQkJCQlzdXBlci5tYWtlQ29udHJpYnV0aW9ucyhtZW51TWFuYWdlciwgdG9vbEJhck1hbmFnZXIsIHN0YXR1c0xpbmVNYW5hZ2VyKTsKKwkJCQkJY29udGVudE91dGxpbmVTdGF0dXNMaW5lTWFuYWdlciA9IHN0YXR1c0xpbmVNYW5hZ2VyOworCQkJCX0KKworCQkJCUBPdmVycmlkZQorCQkJCXB1YmxpYyB2b2lkIHNldEFjdGlvbkJhcnMoSUFjdGlvbkJhcnMgYWN0aW9uQmFycykgeworCQkJCQlzdXBlci5zZXRBY3Rpb25CYXJzKGFjdGlvbkJhcnMpOworCQkJCQlnZXRBY3Rpb25CYXJDb250cmlidXRvcigpLnNoYXJlR2xvYmFsQWN0aW9ucyh0aGlzLCBhY3Rpb25CYXJzKTsKKwkJCQl9CisJCQl9CisKKwkJCWNvbnRlbnRPdXRsaW5lUGFnZSA9IG5ldyBNeUNvbnRlbnRPdXRsaW5lUGFnZSgpOworCisJCQkvLyBMaXN0ZW4gdG8gc2VsZWN0aW9uIHNvIHRoYXQgd2UgY2FuIGhhbmRsZSBpdCBpcyBhIHNwZWNpYWwgd2F5LgorCQkJLy8KKwkJCWNvbnRlbnRPdXRsaW5lUGFnZS5hZGRTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIKKwkJCQkobmV3IElTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIoKSB7CisJCQkJCSAvLyBUaGlzIGVuc3VyZXMgdGhhdCB3ZSBoYW5kbGUgc2VsZWN0aW9ucyBjb3JyZWN0bHkuCisJCQkJCSAvLworCQkJCQkgcHVibGljIHZvaWQgc2VsZWN0aW9uQ2hhbmdlZChTZWxlY3Rpb25DaGFuZ2VkRXZlbnQgZXZlbnQpIHsKKwkJCQkJCSBoYW5kbGVDb250ZW50T3V0bGluZVNlbGVjdGlvbihldmVudC5nZXRTZWxlY3Rpb24oKSk7CisJCQkJCSB9CisJCQkJIH0pOworCQl9CisKKwkJcmV0dXJuIGNvbnRlbnRPdXRsaW5lUGFnZTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFjY2Vzc2VzIGEgY2FjaGVkIHZlcnNpb24gb2YgdGhlIHByb3BlcnR5IHNoZWV0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBJUHJvcGVydHlTaGVldFBhZ2UgZ2V0UHJvcGVydHlTaGVldFBhZ2UoKSB7CisJCWlmIChwcm9wZXJ0eVNoZWV0UGFnZSA9PSBudWxsKSB7CisJCQlwcm9wZXJ0eVNoZWV0UGFnZSA9CisJCQkJbmV3IEV4dGVuZGVkUHJvcGVydHlTaGVldFBhZ2UoZWRpdGluZ0RvbWFpbikgeworCQkJCQlAT3ZlcnJpZGUKKwkJCQkJcHVibGljIHZvaWQgc2V0U2VsZWN0aW9uVG9WaWV3ZXIoTGlzdDw/PiBzZWxlY3Rpb24pIHsKKwkJCQkJCVByZWRpY2F0ZUVkaXRvci50aGlzLnNldFNlbGVjdGlvblRvVmlld2VyKHNlbGVjdGlvbik7CisJCQkJCQlQcmVkaWNhdGVFZGl0b3IudGhpcy5zZXRGb2N1cygpOworCQkJCQl9CisKKwkJCQkJQE92ZXJyaWRlCisJCQkJCXB1YmxpYyB2b2lkIHNldEFjdGlvbkJhcnMoSUFjdGlvbkJhcnMgYWN0aW9uQmFycykgeworCQkJCQkJc3VwZXIuc2V0QWN0aW9uQmFycyhhY3Rpb25CYXJzKTsKKwkJCQkJCWdldEFjdGlvbkJhckNvbnRyaWJ1dG9yKCkuc2hhcmVHbG9iYWxBY3Rpb25zKHRoaXMsIGFjdGlvbkJhcnMpOworCQkJCQl9CisJCQkJfTsKKwkJCXByb3BlcnR5U2hlZXRQYWdlLnNldFByb3BlcnR5U291cmNlUHJvdmlkZXIobmV3IEFkYXB0ZXJGYWN0b3J5Q29udGVudFByb3ZpZGVyKGFkYXB0ZXJGYWN0b3J5KSk7CisJCX0KKworCQlyZXR1cm4gcHJvcGVydHlTaGVldFBhZ2U7CisJfQorCisJLyoqCisJICogVGhpcyBkZWFscyB3aXRoIGhvdyB3ZSB3YW50IHNlbGVjdGlvbiBpbiB0aGUgb3V0bGluZXIgdG8gYWZmZWN0IHRoZSBvdGhlciB2aWV3cy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBoYW5kbGVDb250ZW50T3V0bGluZVNlbGVjdGlvbihJU2VsZWN0aW9uIHNlbGVjdGlvbikgeworCQlpZiAoc2VsZWN0aW9uVmlld2VyICE9IG51bGwgJiYgIXNlbGVjdGlvbi5pc0VtcHR5KCkgJiYgc2VsZWN0aW9uIGluc3RhbmNlb2YgSVN0cnVjdHVyZWRTZWxlY3Rpb24pIHsKKwkJCUl0ZXJhdG9yPD8+IHNlbGVjdGVkRWxlbWVudHMgPSAoKElTdHJ1Y3R1cmVkU2VsZWN0aW9uKXNlbGVjdGlvbikuaXRlcmF0b3IoKTsKKwkJCWlmIChzZWxlY3RlZEVsZW1lbnRzLmhhc05leHQoKSkgeworCQkJCS8vIEdldCB0aGUgZmlyc3Qgc2VsZWN0ZWQgZWxlbWVudC4KKwkJCQkvLworCQkJCU9iamVjdCBzZWxlY3RlZEVsZW1lbnQgPSBzZWxlY3RlZEVsZW1lbnRzLm5leHQoKTsKKworCQkJCUFycmF5TGlzdDxPYmplY3Q+IHNlbGVjdGlvbkxpc3QgPSBuZXcgQXJyYXlMaXN0PE9iamVjdD4oKTsKKwkJCQlzZWxlY3Rpb25MaXN0LmFkZChzZWxlY3RlZEVsZW1lbnQpOworCQkJCXdoaWxlIChzZWxlY3RlZEVsZW1lbnRzLmhhc05leHQoKSkgeworCQkJCQlzZWxlY3Rpb25MaXN0LmFkZChzZWxlY3RlZEVsZW1lbnRzLm5leHQoKSk7CisJCQkJfQorCisJCQkJLy8gU2V0IHRoZSBzZWxlY3Rpb24gdG8gdGhlIHdpZGdldC4KKwkJCQkvLworCQkJCXNlbGVjdGlvblZpZXdlci5zZXRTZWxlY3Rpb24obmV3IFN0cnVjdHVyZWRTZWxlY3Rpb24oc2VsZWN0aW9uTGlzdCkpOworCQkJfQorCQl9CisJfQorCisJLyoqCisJICogVGhpcyBpcyBmb3IgaW1wbGVtZW50aW5nIHtAbGluayBJRWRpdG9yUGFydH0gYW5kIHNpbXBseSB0ZXN0cyB0aGUgY29tbWFuZCBzdGFjay4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgYm9vbGVhbiBpc0RpcnR5KCkgeworCQlyZXR1cm4gKChCYXNpY0NvbW1hbmRTdGFjayllZGl0aW5nRG9tYWluLmdldENvbW1hbmRTdGFjaygpKS5pc1NhdmVOZWVkZWQoKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGlzIGZvciBpbXBsZW1lbnRpbmcge0BsaW5rIElFZGl0b3JQYXJ0fSBhbmQgc2ltcGx5IHNhdmVzIHRoZSBtb2RlbCBmaWxlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGRvU2F2ZShJUHJvZ3Jlc3NNb25pdG9yIHByb2dyZXNzTW9uaXRvcikgeworCQkvLyBTYXZlIG9ubHkgcmVzb3VyY2VzIHRoYXQgaGF2ZSBhY3R1YWxseSBjaGFuZ2VkLgorCQkvLworCQlmaW5hbCBNYXA8T2JqZWN0LCBPYmplY3Q+IHNhdmVPcHRpb25zID0gbmV3IEhhc2hNYXA8T2JqZWN0LCBPYmplY3Q+KCk7CisJCXNhdmVPcHRpb25zLnB1dChSZXNvdXJjZS5PUFRJT05fU0FWRV9PTkxZX0lGX0NIQU5HRUQsIFJlc291cmNlLk9QVElPTl9TQVZFX09OTFlfSUZfQ0hBTkdFRF9NRU1PUllfQlVGRkVSKTsKKworCQkvLyBEbyB0aGUgd29yayB3aXRoaW4gYW4gb3BlcmF0aW9uIGJlY2F1c2UgdGhpcyBpcyBhIGxvbmcgcnVubmluZyBhY3Rpdml0eSB0aGF0IG1vZGlmaWVzIHRoZSB3b3JrYmVuY2guCisJCS8vCisJCVdvcmtzcGFjZU1vZGlmeU9wZXJhdGlvbiBvcGVyYXRpb24gPQorCQkJbmV3IFdvcmtzcGFjZU1vZGlmeU9wZXJhdGlvbigpIHsKKwkJCQkvLyBUaGlzIGlzIHRoZSBtZXRob2QgdGhhdCBnZXRzIGludm9rZWQgd2hlbiB0aGUgb3BlcmF0aW9uIHJ1bnMuCisJCQkJLy8KKwkJCQlAT3ZlcnJpZGUKKwkJCQlwdWJsaWMgdm9pZCBleGVjdXRlKElQcm9ncmVzc01vbml0b3IgbW9uaXRvcikgeworCQkJCQkvLyBTYXZlIHRoZSByZXNvdXJjZXMgdG8gdGhlIGZpbGUgc3lzdGVtLgorCQkJCQkvLworCQkJCQlib29sZWFuIGZpcnN0ID0gdHJ1ZTsKKwkJCQkJZm9yIChSZXNvdXJjZSByZXNvdXJjZSA6IGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKS5nZXRSZXNvdXJjZXMoKSkgeworCQkJCQkJaWYgKChmaXJzdCB8fCAhcmVzb3VyY2UuZ2V0Q29udGVudHMoKS5pc0VtcHR5KCkgfHwgaXNQZXJzaXN0ZWQocmVzb3VyY2UpKSAmJiAhZWRpdGluZ0RvbWFpbi5pc1JlYWRPbmx5KHJlc291cmNlKSkgeworCQkJCQkJCXRyeSB7CisJCQkJCQkJCWxvbmcgdGltZVN0YW1wID0gcmVzb3VyY2UuZ2V0VGltZVN0YW1wKCk7CisJCQkJCQkJCXJlc291cmNlLnNhdmUoc2F2ZU9wdGlvbnMpOworCQkJCQkJCQlpZiAocmVzb3VyY2UuZ2V0VGltZVN0YW1wKCkgIT0gdGltZVN0YW1wKSB7CisJCQkJCQkJCQlzYXZlZFJlc291cmNlcy5hZGQocmVzb3VyY2UpOworCQkJCQkJCQl9CisJCQkJCQkJfQorCQkJCQkJCWNhdGNoIChFeGNlcHRpb24gZXhjZXB0aW9uKSB7CisJCQkJCQkJCXJlc291cmNlVG9EaWFnbm9zdGljTWFwLnB1dChyZXNvdXJjZSwgYW5hbHl6ZVJlc291cmNlUHJvYmxlbXMocmVzb3VyY2UsIGV4Y2VwdGlvbikpOworCQkJCQkJCX0KKwkJCQkJCQlmaXJzdCA9IGZhbHNlOworCQkJCQkJfQorCQkJCQl9CisJCQkJfQorCQkJfTsKKworCQl1cGRhdGVQcm9ibGVtSW5kaWNhdGlvbiA9IGZhbHNlOworCQl0cnkgeworCQkJLy8gVGhpcyBydW5zIHRoZSBvcHRpb25zLCBhbmQgc2hvd3MgcHJvZ3Jlc3MuCisJCQkvLworCQkJbmV3IFByb2dyZXNzTW9uaXRvckRpYWxvZyhnZXRTaXRlKCkuZ2V0U2hlbGwoKSkucnVuKHRydWUsIGZhbHNlLCBvcGVyYXRpb24pOworCisJCQkvLyBSZWZyZXNoIHRoZSBuZWNlc3Nhcnkgc3RhdGUuCisJCQkvLworCQkJKChCYXNpY0NvbW1hbmRTdGFjayllZGl0aW5nRG9tYWluLmdldENvbW1hbmRTdGFjaygpKS5zYXZlSXNEb25lKCk7CisJCQlmaXJlUHJvcGVydHlDaGFuZ2UoSUVkaXRvclBhcnQuUFJPUF9ESVJUWSk7CisJCX0KKwkJY2F0Y2ggKEV4Y2VwdGlvbiBleGNlcHRpb24pIHsKKwkJCS8vIFNvbWV0aGluZyB3ZW50IHdyb25nIHRoYXQgc2hvdWxkbid0LgorCQkJLy8KKwkJCUNvcmVFZGl0b3JQbHVnaW4uSU5TVEFOQ0UubG9nKGV4Y2VwdGlvbik7CisJCX0KKwkJdXBkYXRlUHJvYmxlbUluZGljYXRpb24gPSB0cnVlOworCQl1cGRhdGVQcm9ibGVtSW5kaWNhdGlvbigpOworCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyB3aGV0aGVyIHNvbWV0aGluZyBoYXMgYmVlbiBwZXJzaXN0ZWQgdG8gdGhlIFVSSSBvZiB0aGUgc3BlY2lmaWVkIHJlc291cmNlLgorCSAqIFRoZSBpbXBsZW1lbnRhdGlvbiB1c2VzIHRoZSBVUkkgY29udmVydGVyIGZyb20gdGhlIGVkaXRvcidzIHJlc291cmNlIHNldCB0byB0cnkgdG8gb3BlbiBhbiBpbnB1dCBzdHJlYW0uIAorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBib29sZWFuIGlzUGVyc2lzdGVkKFJlc291cmNlIHJlc291cmNlKSB7CisJCWJvb2xlYW4gcmVzdWx0ID0gZmFsc2U7CisJCXRyeSB7CisJCQlJbnB1dFN0cmVhbSBzdHJlYW0gPSBlZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkuZ2V0VVJJQ29udmVydGVyKCkuY3JlYXRlSW5wdXRTdHJlYW0ocmVzb3VyY2UuZ2V0VVJJKCkpOworCQkJaWYgKHN0cmVhbSAhPSBudWxsKSB7CisJCQkJcmVzdWx0ID0gdHJ1ZTsKKwkJCQlzdHJlYW0uY2xvc2UoKTsKKwkJCX0KKwkJfQorCQljYXRjaCAoSU9FeGNlcHRpb24gZSkgeworCQkJLy8gSWdub3JlCisJCX0KKwkJcmV0dXJuIHJlc3VsdDsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFsd2F5cyByZXR1cm5zIHRydWUgYmVjYXVzZSBpdCBpcyBub3QgY3VycmVudGx5IHN1cHBvcnRlZC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgYm9vbGVhbiBpc1NhdmVBc0FsbG93ZWQoKSB7CisJCXJldHVybiB0cnVlOworCX0KKworCS8qKgorCSAqIFRoaXMgYWxzbyBjaGFuZ2VzIHRoZSBlZGl0b3IncyBpbnB1dC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBkb1NhdmVBcygpIHsKKwkJU2F2ZUFzRGlhbG9nIHNhdmVBc0RpYWxvZyA9IG5ldyBTYXZlQXNEaWFsb2coZ2V0U2l0ZSgpLmdldFNoZWxsKCkpOworCQlzYXZlQXNEaWFsb2cub3BlbigpOworCQlJUGF0aCBwYXRoID0gc2F2ZUFzRGlhbG9nLmdldFJlc3VsdCgpOworCQlpZiAocGF0aCAhPSBudWxsKSB7CisJCQlJRmlsZSBmaWxlID0gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmdldFJvb3QoKS5nZXRGaWxlKHBhdGgpOworCQkJaWYgKGZpbGUgIT0gbnVsbCkgeworCQkJCWRvU2F2ZUFzKFVSSS5jcmVhdGVQbGF0Zm9ybVJlc291cmNlVVJJKGZpbGUuZ2V0RnVsbFBhdGgoKS50b1N0cmluZygpLCB0cnVlKSwgbmV3IEZpbGVFZGl0b3JJbnB1dChmaWxlKSk7CisJCQl9CisJCX0KKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBkb1NhdmVBcyhVUkkgdXJpLCBJRWRpdG9ySW5wdXQgZWRpdG9ySW5wdXQpIHsKKwkJKGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKS5nZXRSZXNvdXJjZXMoKS5nZXQoMCkpLnNldFVSSSh1cmkpOworCQlzZXRJbnB1dFdpdGhOb3RpZnkoZWRpdG9ySW5wdXQpOworCQlzZXRQYXJ0TmFtZShlZGl0b3JJbnB1dC5nZXROYW1lKCkpOworCQlJUHJvZ3Jlc3NNb25pdG9yIHByb2dyZXNzTW9uaXRvciA9CisJCQlnZXRBY3Rpb25CYXJzKCkuZ2V0U3RhdHVzTGluZU1hbmFnZXIoKSAhPSBudWxsID8KKwkJCQlnZXRBY3Rpb25CYXJzKCkuZ2V0U3RhdHVzTGluZU1hbmFnZXIoKS5nZXRQcm9ncmVzc01vbml0b3IoKSA6CisJCQkJbmV3IE51bGxQcm9ncmVzc01vbml0b3IoKTsKKwkJZG9TYXZlKHByb2dyZXNzTW9uaXRvcik7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgZ290b01hcmtlcihJTWFya2VyIG1hcmtlcikgeworCQl0cnkgeworCQkJaWYgKG1hcmtlci5nZXRUeXBlKCkuZXF1YWxzKEVWYWxpZGF0b3IuTUFSS0VSKSkgeworCQkJCVN0cmluZyB1cmlBdHRyaWJ1dGUgPSBtYXJrZXIuZ2V0QXR0cmlidXRlKEVWYWxpZGF0b3IuVVJJX0FUVFJJQlVURSwgbnVsbCk7CisJCQkJaWYgKHVyaUF0dHJpYnV0ZSAhPSBudWxsKSB7CisJCQkJCVVSSSB1cmkgPSBVUkkuY3JlYXRlVVJJKHVyaUF0dHJpYnV0ZSk7CisJCQkJCUVPYmplY3QgZU9iamVjdCA9IGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKS5nZXRFT2JqZWN0KHVyaSwgdHJ1ZSk7CisJCQkJCWlmIChlT2JqZWN0ICE9IG51bGwpIHsKKwkJCQkJICBzZXRTZWxlY3Rpb25Ub1ZpZXdlcihDb2xsZWN0aW9ucy5zaW5nbGV0b24oZWRpdGluZ0RvbWFpbi5nZXRXcmFwcGVyKGVPYmplY3QpKSk7CisJCQkJCX0KKwkJCQl9CisJCQl9CisJCX0KKwkJY2F0Y2ggKENvcmVFeGNlcHRpb24gZXhjZXB0aW9uKSB7CisJCQlDb3JlRWRpdG9yUGx1Z2luLklOU1RBTkNFLmxvZyhleGNlcHRpb24pOworCQl9CisJfQorCisJLyoqCisJICogVGhpcyBpcyBjYWxsZWQgZHVyaW5nIHN0YXJ0dXAuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgaW5pdChJRWRpdG9yU2l0ZSBzaXRlLCBJRWRpdG9ySW5wdXQgZWRpdG9ySW5wdXQpIHsKKwkJc2V0U2l0ZShzaXRlKTsKKwkJc2V0SW5wdXRXaXRoTm90aWZ5KGVkaXRvcklucHV0KTsKKwkJc2V0UGFydE5hbWUoZWRpdG9ySW5wdXQuZ2V0TmFtZSgpKTsKKwkJc2l0ZS5zZXRTZWxlY3Rpb25Qcm92aWRlcih0aGlzKTsKKwkJc2l0ZS5nZXRQYWdlKCkuYWRkUGFydExpc3RlbmVyKHBhcnRMaXN0ZW5lcik7CisJCVJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5hZGRSZXNvdXJjZUNoYW5nZUxpc3RlbmVyKHJlc291cmNlQ2hhbmdlTGlzdGVuZXIsIElSZXNvdXJjZUNoYW5nZUV2ZW50LlBPU1RfQ0hBTkdFKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBzZXRGb2N1cygpIHsKKwkJZ2V0Q29udHJvbChnZXRBY3RpdmVQYWdlKCkpLnNldEZvY3VzKCk7CisJfQorCisJLyoqCisJICogVGhpcyBpbXBsZW1lbnRzIHtAbGluayBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb25Qcm92aWRlcn0uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgYWRkU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyKElTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIgbGlzdGVuZXIpIHsKKwkJc2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVycy5hZGQobGlzdGVuZXIpOworCX0KKworCS8qKgorCSAqIFRoaXMgaW1wbGVtZW50cyB7QGxpbmsgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uUHJvdmlkZXJ9LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIHJlbW92ZVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcihJU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyIGxpc3RlbmVyKSB7CisJCXNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcnMucmVtb3ZlKGxpc3RlbmVyKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGltcGxlbWVudHMge0BsaW5rIG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvblByb3ZpZGVyfSB0byByZXR1cm4gdGhpcyBlZGl0b3IncyBvdmVyYWxsIHNlbGVjdGlvbi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgSVNlbGVjdGlvbiBnZXRTZWxlY3Rpb24oKSB7CisJCXJldHVybiBlZGl0b3JTZWxlY3Rpb247CisJfQorCisJLyoqCisJICogVGhpcyBpbXBsZW1lbnRzIHtAbGluayBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb25Qcm92aWRlcn0gdG8gc2V0IHRoaXMgZWRpdG9yJ3Mgb3ZlcmFsbCBzZWxlY3Rpb24uCisJICogQ2FsbGluZyB0aGlzIHJlc3VsdCB3aWxsIG5vdGlmeSB0aGUgbGlzdGVuZXJzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIHNldFNlbGVjdGlvbihJU2VsZWN0aW9uIHNlbGVjdGlvbikgeworCQllZGl0b3JTZWxlY3Rpb24gPSBzZWxlY3Rpb247CisKKwkJZm9yIChJU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyIGxpc3RlbmVyIDogc2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVycykgeworCQkJbGlzdGVuZXIuc2VsZWN0aW9uQ2hhbmdlZChuZXcgU2VsZWN0aW9uQ2hhbmdlZEV2ZW50KHRoaXMsIHNlbGVjdGlvbikpOworCQl9CisJCXNldFN0YXR1c0xpbmVNYW5hZ2VyKHNlbGVjdGlvbik7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgc2V0U3RhdHVzTGluZU1hbmFnZXIoSVNlbGVjdGlvbiBzZWxlY3Rpb24pIHsKKwkJSVN0YXR1c0xpbmVNYW5hZ2VyIHN0YXR1c0xpbmVNYW5hZ2VyID0gY3VycmVudFZpZXdlciAhPSBudWxsICYmIGN1cnJlbnRWaWV3ZXIgPT0gY29udGVudE91dGxpbmVWaWV3ZXIgPworCQkJY29udGVudE91dGxpbmVTdGF0dXNMaW5lTWFuYWdlciA6IGdldEFjdGlvbkJhcnMoKS5nZXRTdGF0dXNMaW5lTWFuYWdlcigpOworCisJCWlmIChzdGF0dXNMaW5lTWFuYWdlciAhPSBudWxsKSB7CisJCQlpZiAoc2VsZWN0aW9uIGluc3RhbmNlb2YgSVN0cnVjdHVyZWRTZWxlY3Rpb24pIHsKKwkJCQlDb2xsZWN0aW9uPD8+IGNvbGxlY3Rpb24gPSAoKElTdHJ1Y3R1cmVkU2VsZWN0aW9uKXNlbGVjdGlvbikudG9MaXN0KCk7CisJCQkJc3dpdGNoIChjb2xsZWN0aW9uLnNpemUoKSkgeworCQkJCQljYXNlIDA6IHsKKwkJCQkJCXN0YXR1c0xpbmVNYW5hZ2VyLnNldE1lc3NhZ2UoZ2V0U3RyaW5nKCJfVUlfTm9PYmplY3RTZWxlY3RlZCIpKTsgLy8kTk9OLU5MUy0xJAorCQkJCQkJYnJlYWs7CisJCQkJCX0KKwkJCQkJY2FzZSAxOiB7CisJCQkJCQlTdHJpbmcgdGV4dCA9IG5ldyBBZGFwdGVyRmFjdG9yeUl0ZW1EZWxlZ2F0b3IoYWRhcHRlckZhY3RvcnkpLmdldFRleHQoY29sbGVjdGlvbi5pdGVyYXRvcigpLm5leHQoKSk7CisJCQkJCQlzdGF0dXNMaW5lTWFuYWdlci5zZXRNZXNzYWdlKGdldFN0cmluZygiX1VJX1NpbmdsZU9iamVjdFNlbGVjdGVkIiwgdGV4dCkpOyAvLyROT04tTkxTLTEkCisJCQkJCQlicmVhazsKKwkJCQkJfQorCQkJCQlkZWZhdWx0OiB7CisJCQkJCQlzdGF0dXNMaW5lTWFuYWdlci5zZXRNZXNzYWdlKGdldFN0cmluZygiX1VJX011bHRpT2JqZWN0U2VsZWN0ZWQiLCBJbnRlZ2VyLnRvU3RyaW5nKGNvbGxlY3Rpb24uc2l6ZSgpKSkpOyAvLyROT04tTkxTLTEkCisJCQkJCQlicmVhazsKKwkJCQkJfQorCQkJCX0KKwkJCX0KKwkJCWVsc2UgeworCQkJCXN0YXR1c0xpbmVNYW5hZ2VyLnNldE1lc3NhZ2UoIiIpOyAvLyROT04tTkxTLTEkCisJCQl9CisJCX0KKwl9CisKKwkvKioKKwkgKiBUaGlzIGxvb2tzIHVwIGEgc3RyaW5nIGluIHRoZSBwbHVnaW4ncyBwbHVnaW4ucHJvcGVydGllcyBmaWxlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByaXZhdGUgc3RhdGljIFN0cmluZyBnZXRTdHJpbmcoU3RyaW5nIGtleSkgeworCQlyZXR1cm4gQ29yZUVkaXRvclBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoa2V5KTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGxvb2tzIHVwIGEgc3RyaW5nIGluIHBsdWdpbi5wcm9wZXJ0aWVzLCBtYWtpbmcgYSBzdWJzdGl0dXRpb24uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIGdldFN0cmluZyhTdHJpbmcga2V5LCBPYmplY3QgczEpIHsKKwkJcmV0dXJuIENvcmVFZGl0b3JQbHVnaW4uSU5TVEFOQ0UuZ2V0U3RyaW5nKGtleSwgbmV3IE9iamVjdCBbXSB7IHMxIH0pOworCX0KKworCS8qKgorCSAqIFRoaXMgaW1wbGVtZW50cyB7QGxpbmsgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklNZW51TGlzdGVuZXJ9IHRvIGhlbHAgZmlsbCB0aGUgY29udGV4dCBtZW51cyB3aXRoIGNvbnRyaWJ1dGlvbnMgZnJvbSB0aGUgRWRpdCBtZW51LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIG1lbnVBYm91dFRvU2hvdyhJTWVudU1hbmFnZXIgbWVudU1hbmFnZXIpIHsKKwkJKChJTWVudUxpc3RlbmVyKWdldEVkaXRvclNpdGUoKS5nZXRBY3Rpb25CYXJDb250cmlidXRvcigpKS5tZW51QWJvdXRUb1Nob3cobWVudU1hbmFnZXIpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFZGl0aW5nRG9tYWluQWN0aW9uQmFyQ29udHJpYnV0b3IgZ2V0QWN0aW9uQmFyQ29udHJpYnV0b3IoKSB7CisJCXJldHVybiAoRWRpdGluZ0RvbWFpbkFjdGlvbkJhckNvbnRyaWJ1dG9yKWdldEVkaXRvclNpdGUoKS5nZXRBY3Rpb25CYXJDb250cmlidXRvcigpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBJQWN0aW9uQmFycyBnZXRBY3Rpb25CYXJzKCkgeworCQlyZXR1cm4gZ2V0QWN0aW9uQmFyQ29udHJpYnV0b3IoKS5nZXRBY3Rpb25CYXJzKCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEFkYXB0ZXJGYWN0b3J5IGdldEFkYXB0ZXJGYWN0b3J5KCkgeworCQlyZXR1cm4gYWRhcHRlckZhY3Rvcnk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgZGlzcG9zZSgpIHsKKwkJdXBkYXRlUHJvYmxlbUluZGljYXRpb24gPSBmYWxzZTsKKworCQlSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkucmVtb3ZlUmVzb3VyY2VDaGFuZ2VMaXN0ZW5lcihyZXNvdXJjZUNoYW5nZUxpc3RlbmVyKTsKKworCQlnZXRTaXRlKCkuZ2V0UGFnZSgpLnJlbW92ZVBhcnRMaXN0ZW5lcihwYXJ0TGlzdGVuZXIpOworCisJCWFkYXB0ZXJGYWN0b3J5LmRpc3Bvc2UoKTsKKworCQlpZiAoZ2V0QWN0aW9uQmFyQ29udHJpYnV0b3IoKS5nZXRBY3RpdmVFZGl0b3IoKSA9PSB0aGlzKSB7CisJCQlnZXRBY3Rpb25CYXJDb250cmlidXRvcigpLnNldEFjdGl2ZUVkaXRvcihudWxsKTsKKwkJfQorCisJCWlmIChwcm9wZXJ0eVNoZWV0UGFnZSAhPSBudWxsKSB7CisJCQlwcm9wZXJ0eVNoZWV0UGFnZS5kaXNwb3NlKCk7CisJCX0KKworCQlpZiAoY29udGVudE91dGxpbmVQYWdlICE9IG51bGwpIHsKKwkJCWNvbnRlbnRPdXRsaW5lUGFnZS5kaXNwb3NlKCk7CisJCX0KKworCQlzdXBlci5kaXNwb3NlKCk7CisJfQorCisJLyoqCisJICogUmV0dXJucyB3aGV0aGVyIHRoZSBvdXRsaW5lIHZpZXcgc2hvdWxkIGJlIHByZXNlbnRlZCB0byB0aGUgdXNlci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgYm9vbGVhbiBzaG93T3V0bGluZVZpZXcoKSB7CisJCXJldHVybiBmYWxzZTsKKwl9Cit9CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9zY2VuYXJpby9wcmVzZW50YXRpb24vU2NlbmFyaW9BY3Rpb25CYXJDb250cmlidXRvci5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvc2NlbmFyaW8vcHJlc2VudGF0aW9uL1NjZW5hcmlvQWN0aW9uQmFyQ29udHJpYnV0b3IuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMjU1M2NmCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvc2NlbmFyaW8vcHJlc2VudGF0aW9uL1NjZW5hcmlvQWN0aW9uQmFyQ29udHJpYnV0b3IuamF2YQpAQCAtMCwwICsxLDQzMSBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2NlbmFyaW8ucHJlc2VudGF0aW9uOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA2LCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7CitpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnVpLnZpZXdlci5JVmlld2VyUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQuZG9tYWluLkVkaXRpbmdEb21haW47CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQuZG9tYWluLklFZGl0aW5nRG9tYWluUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkuYWN0aW9uLkNvbnRyb2xBY3Rpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkuYWN0aW9uLkNyZWF0ZUNoaWxkQWN0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmFjdGlvbi5DcmVhdGVTaWJsaW5nQWN0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmFjdGlvbi5FZGl0aW5nRG9tYWluQWN0aW9uQmFyQ29udHJpYnV0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkuYWN0aW9uLkxvYWRSZXNvdXJjZUFjdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5hY3Rpb24uVmFsaWRhdGVBY3Rpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLkFjdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uQWN0aW9uQ29udHJpYnV0aW9uSXRlbTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSUFjdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSUNvbnRyaWJ1dGlvbkl0ZW07CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklDb250cmlidXRpb25NYW5hZ2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JTWVudUxpc3RlbmVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JTWVudU1hbmFnZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklUb29sQmFyTWFuYWdlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uTWVudU1hbmFnZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLlNlcGFyYXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uU3ViQ29udHJpYnV0aW9uSXRlbTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvblByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVN0cnVjdHVyZWRTZWxlY3Rpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5TZWxlY3Rpb25DaGFuZ2VkRXZlbnQ7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5WaWV3ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5wcmVzZW50YXRpb24uQ29yZUVkaXRvclBsdWdpbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5JRWRpdG9yUGFydDsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5QYXJ0SW5pdEV4Y2VwdGlvbjsKKworLyoqCisgKiBUaGlzIGlzIHRoZSBhY3Rpb24gYmFyIGNvbnRyaWJ1dG9yIGZvciB0aGUgU2NlbmFyaW8gbW9kZWwgZWRpdG9yLgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQGdlbmVyYXRlZAorICovCitAU3VwcHJlc3NXYXJuaW5ncygiYWxsIikKK3B1YmxpYyBjbGFzcyBTY2VuYXJpb0FjdGlvbkJhckNvbnRyaWJ1dG9yCisJZXh0ZW5kcyBFZGl0aW5nRG9tYWluQWN0aW9uQmFyQ29udHJpYnV0b3IKKwlpbXBsZW1lbnRzIElTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIgeworCS8qKgorCSAqIFRoaXMga2VlcHMgdHJhY2sgb2YgdGhlIGFjdGl2ZSBlZGl0b3IuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIElFZGl0b3JQYXJ0IGFjdGl2ZUVkaXRvclBhcnQ7CisKKwkvKioKKwkgKiBUaGlzIGtlZXBzIHRyYWNrIG9mIHRoZSBjdXJyZW50IHNlbGVjdGlvbiBwcm92aWRlci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgSVNlbGVjdGlvblByb3ZpZGVyIHNlbGVjdGlvblByb3ZpZGVyOworCisJLyoqCisJICogVGhpcyBhY3Rpb24gb3BlbnMgdGhlIFByb3BlcnRpZXMgdmlldy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgSUFjdGlvbiBzaG93UHJvcGVydGllc1ZpZXdBY3Rpb24gPQorCQluZXcgQWN0aW9uKENvcmVFZGl0b3JQbHVnaW4uSU5TVEFOQ0UuZ2V0U3RyaW5nKCJfVUlfU2hvd1Byb3BlcnRpZXNWaWV3X21lbnVfaXRlbSIpKSAvLyROT04tTkxTLTEkCisJCXsKKwkJCUBPdmVycmlkZQorCQkJcHVibGljIHZvaWQgcnVuKCkgeworCQkJCXRyeSB7CisJCQkJCWdldFBhZ2UoKS5zaG93Vmlldygib3JnLmVjbGlwc2UudWkudmlld3MuUHJvcGVydHlTaGVldCIpOyAvLyROT04tTkxTLTEkCisJCQkJfQorCQkJCWNhdGNoIChQYXJ0SW5pdEV4Y2VwdGlvbiBleGNlcHRpb24pIHsKKwkJCQkJQ29yZUVkaXRvclBsdWdpbi5JTlNUQU5DRS5sb2coZXhjZXB0aW9uKTsKKwkJCQl9CisJCQl9CisJCX07CisKKwkvKioKKwkgKiBUaGlzIGFjdGlvbiByZWZyZXNoZXMgdGhlIHZpZXdlciBvZiB0aGUgY3VycmVudCBlZGl0b3IgaWYgdGhlIGVkaXRvcgorCSAqIGltcGxlbWVudHMge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5jb21tb24udWkudmlld2VyLklWaWV3ZXJQcm92aWRlcn0uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIElBY3Rpb24gcmVmcmVzaFZpZXdlckFjdGlvbiA9CisJCW5ldyBBY3Rpb24oQ29yZUVkaXRvclBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoIl9VSV9SZWZyZXNoVmlld2VyX21lbnVfaXRlbSIpKSAvLyROT04tTkxTLTEkCisJCXsKKwkJCUBPdmVycmlkZQorCQkJcHVibGljIGJvb2xlYW4gaXNFbmFibGVkKCkgeworCQkJCXJldHVybiBhY3RpdmVFZGl0b3JQYXJ0IGluc3RhbmNlb2YgSVZpZXdlclByb3ZpZGVyOworCQkJfQorCisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyB2b2lkIHJ1bigpIHsKKwkJCQlpZiAoYWN0aXZlRWRpdG9yUGFydCBpbnN0YW5jZW9mIElWaWV3ZXJQcm92aWRlcikgeworCQkJCQlWaWV3ZXIgdmlld2VyID0gKChJVmlld2VyUHJvdmlkZXIpYWN0aXZlRWRpdG9yUGFydCkuZ2V0Vmlld2VyKCk7CisJCQkJCWlmICh2aWV3ZXIgIT0gbnVsbCkgeworCQkJCQkJdmlld2VyLnJlZnJlc2goKTsKKwkJCQkJfQorCQkJCX0KKwkJCX0KKwkJfTsKKworCS8qKgorCSAqIFRoaXMgd2lsbCBjb250YWluIG9uZSB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkuYWN0aW9uLkNyZWF0ZUNoaWxkQWN0aW9ufSBjb3JyZXNwb25kaW5nIHRvIGVhY2ggZGVzY3JpcHRvcgorCSAqIGdlbmVyYXRlZCBmb3IgdGhlIGN1cnJlbnQgc2VsZWN0aW9uIGJ5IHRoZSBpdGVtIHByb3ZpZGVyLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBDb2xsZWN0aW9uPElBY3Rpb24+IGNyZWF0ZUNoaWxkQWN0aW9uczsKKworCS8qKgorCSAqIFRoaXMgaXMgdGhlIG1lbnUgbWFuYWdlciBpbnRvIHdoaWNoIG1lbnUgY29udHJpYnV0aW9uIGl0ZW1zIHNob3VsZCBiZSBhZGRlZCBmb3IgQ3JlYXRlQ2hpbGQgYWN0aW9ucy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgSU1lbnVNYW5hZ2VyIGNyZWF0ZUNoaWxkTWVudU1hbmFnZXI7CisKKwkvKioKKwkgKiBUaGlzIHdpbGwgY29udGFpbiBvbmUge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmFjdGlvbi5DcmVhdGVTaWJsaW5nQWN0aW9ufSBjb3JyZXNwb25kaW5nIHRvIGVhY2ggZGVzY3JpcHRvcgorCSAqIGdlbmVyYXRlZCBmb3IgdGhlIGN1cnJlbnQgc2VsZWN0aW9uIGJ5IHRoZSBpdGVtIHByb3ZpZGVyLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBDb2xsZWN0aW9uPElBY3Rpb24+IGNyZWF0ZVNpYmxpbmdBY3Rpb25zOworCisJLyoqCisJICogVGhpcyBpcyB0aGUgbWVudSBtYW5hZ2VyIGludG8gd2hpY2ggbWVudSBjb250cmlidXRpb24gaXRlbXMgc2hvdWxkIGJlIGFkZGVkIGZvciBDcmVhdGVTaWJsaW5nIGFjdGlvbnMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIElNZW51TWFuYWdlciBjcmVhdGVTaWJsaW5nTWVudU1hbmFnZXI7CisKKwkvKioKKwkgKiBUaGlzIGNyZWF0ZXMgYW4gaW5zdGFuY2Ugb2YgdGhlIGNvbnRyaWJ1dG9yLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBTY2VuYXJpb0FjdGlvbkJhckNvbnRyaWJ1dG9yKCkgeworCQlzdXBlcihBRERJVElPTlNfTEFTVF9TVFlMRSk7CisJCWxvYWRSZXNvdXJjZUFjdGlvbiA9IG5ldyBMb2FkUmVzb3VyY2VBY3Rpb24oKTsKKwkJdmFsaWRhdGVBY3Rpb24gPSBuZXcgVmFsaWRhdGVBY3Rpb24oKTsKKwkJY29udHJvbEFjdGlvbiA9IG5ldyBDb250cm9sQWN0aW9uKCk7CisJfQorCisJLyoqCisJICogVGhpcyBhZGRzIFNlcGFyYXRvcnMgZm9yIGVkaXRvciBhZGRpdGlvbnMgdG8gdGhlIHRvb2wgYmFyLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGNvbnRyaWJ1dGVUb1Rvb2xCYXIoSVRvb2xCYXJNYW5hZ2VyIHRvb2xCYXJNYW5hZ2VyKSB7CisJCXRvb2xCYXJNYW5hZ2VyLmFkZChuZXcgU2VwYXJhdG9yKCJzY2VuYXJpby1zZXR0aW5ncyIpKTsgLy8kTk9OLU5MUy0xJAorCQl0b29sQmFyTWFuYWdlci5hZGQobmV3IFNlcGFyYXRvcigic2NlbmFyaW8tYWRkaXRpb25zIikpOyAvLyROT04tTkxTLTEkCisJfQorCisJLyoqCisJICogVGhpcyBhZGRzIHRvIHRoZSBtZW51IGJhciBhIG1lbnUgYW5kIHNvbWUgc2VwYXJhdG9ycyBmb3IgZWRpdG9yIGFkZGl0aW9ucywKKwkgKiBhcyB3ZWxsIGFzIHRoZSBzdWItbWVudXMgZm9yIG9iamVjdCBjcmVhdGlvbiBpdGVtcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBjb250cmlidXRlVG9NZW51KElNZW51TWFuYWdlciBtZW51TWFuYWdlcikgeworCQlzdXBlci5jb250cmlidXRlVG9NZW51KG1lbnVNYW5hZ2VyKTsKKworCQlJTWVudU1hbmFnZXIgc3VibWVudU1hbmFnZXIgPSBuZXcgTWVudU1hbmFnZXIoQ29yZUVkaXRvclBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoIl9VSV9TY2VuYXJpb0VkaXRvcl9tZW51IiksICJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2NlbmFyaW9NZW51SUQiKTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCisJCW1lbnVNYW5hZ2VyLmluc2VydEFmdGVyKCJhZGRpdGlvbnMiLCBzdWJtZW51TWFuYWdlcik7IC8vJE5PTi1OTFMtMSQKKwkJc3VibWVudU1hbmFnZXIuYWRkKG5ldyBTZXBhcmF0b3IoInNldHRpbmdzIikpOyAvLyROT04tTkxTLTEkCisJCXN1Ym1lbnVNYW5hZ2VyLmFkZChuZXcgU2VwYXJhdG9yKCJhY3Rpb25zIikpOyAvLyROT04tTkxTLTEkCisJCXN1Ym1lbnVNYW5hZ2VyLmFkZChuZXcgU2VwYXJhdG9yKCJhZGRpdGlvbnMiKSk7IC8vJE5PTi1OTFMtMSQKKwkJc3VibWVudU1hbmFnZXIuYWRkKG5ldyBTZXBhcmF0b3IoImFkZGl0aW9ucy1lbmQiKSk7IC8vJE5PTi1OTFMtMSQKKworCQkvLyBQcmVwYXJlIGZvciBDcmVhdGVDaGlsZCBpdGVtIGFkZGl0aW9uIG9yIHJlbW92YWwuCisJCS8vCisJCWNyZWF0ZUNoaWxkTWVudU1hbmFnZXIgPSBuZXcgTWVudU1hbmFnZXIoQ29yZUVkaXRvclBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoIl9VSV9DcmVhdGVDaGlsZF9tZW51X2l0ZW0iKSk7IC8vJE5PTi1OTFMtMSQKKwkJc3VibWVudU1hbmFnZXIuaW5zZXJ0QmVmb3JlKCJhZGRpdGlvbnMiLCBjcmVhdGVDaGlsZE1lbnVNYW5hZ2VyKTsgLy8kTk9OLU5MUy0xJAorCisJCS8vIFByZXBhcmUgZm9yIENyZWF0ZVNpYmxpbmcgaXRlbSBhZGRpdGlvbiBvciByZW1vdmFsLgorCQkvLworCQljcmVhdGVTaWJsaW5nTWVudU1hbmFnZXIgPSBuZXcgTWVudU1hbmFnZXIoQ29yZUVkaXRvclBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoIl9VSV9DcmVhdGVTaWJsaW5nX21lbnVfaXRlbSIpKTsgLy8kTk9OLU5MUy0xJAorCQlzdWJtZW51TWFuYWdlci5pbnNlcnRCZWZvcmUoImFkZGl0aW9ucyIsIGNyZWF0ZVNpYmxpbmdNZW51TWFuYWdlcik7IC8vJE5PTi1OTFMtMSQKKworCQkvLyBGb3JjZSBhbiB1cGRhdGUgYmVjYXVzZSBFY2xpcHNlIGhpZGVzIGVtcHR5IG1lbnVzIG5vdy4KKwkJLy8KKwkJc3VibWVudU1hbmFnZXIuYWRkTWVudUxpc3RlbmVyCisJCQkobmV3IElNZW51TGlzdGVuZXIoKSB7CisJCQkJIHB1YmxpYyB2b2lkIG1lbnVBYm91dFRvU2hvdyhJTWVudU1hbmFnZXIgbWVudU1hbmFnZXIpIHsKKwkJCQkJIG1lbnVNYW5hZ2VyLnVwZGF0ZUFsbCh0cnVlKTsKKwkJCQkgfQorCQkJIH0pOworCisJCWFkZEdsb2JhbEFjdGlvbnMoc3VibWVudU1hbmFnZXIpOworCX0KKworCS8qKgorCSAqIFdoZW4gdGhlIGFjdGl2ZSBlZGl0b3IgY2hhbmdlcywgdGhpcyByZW1lbWJlcnMgdGhlIGNoYW5nZSBhbmQgcmVnaXN0ZXJzIHdpdGggaXQgYXMgYSBzZWxlY3Rpb24gcHJvdmlkZXIuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgc2V0QWN0aXZlRWRpdG9yKElFZGl0b3JQYXJ0IHBhcnQpIHsKKwkJc3VwZXIuc2V0QWN0aXZlRWRpdG9yKHBhcnQpOworCQlhY3RpdmVFZGl0b3JQYXJ0ID0gcGFydDsKKworCQkvLyBTd2l0Y2ggdG8gdGhlIG5ldyBzZWxlY3Rpb24gcHJvdmlkZXIuCisJCS8vCisJCWlmIChzZWxlY3Rpb25Qcm92aWRlciAhPSBudWxsKSB7CisJCQlzZWxlY3Rpb25Qcm92aWRlci5yZW1vdmVTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIodGhpcyk7CisJCX0KKwkJaWYgKHBhcnQgPT0gbnVsbCkgeworCQkJc2VsZWN0aW9uUHJvdmlkZXIgPSBudWxsOworCQl9CisJCWVsc2UgeworCQkJc2VsZWN0aW9uUHJvdmlkZXIgPSBwYXJ0LmdldFNpdGUoKS5nZXRTZWxlY3Rpb25Qcm92aWRlcigpOworCQkJc2VsZWN0aW9uUHJvdmlkZXIuYWRkU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyKHRoaXMpOworCisJCQkvLyBGYWtlIGEgc2VsZWN0aW9uIGNoYW5nZWQgZXZlbnQgdG8gdXBkYXRlIHRoZSBtZW51cy4KKwkJCS8vCisJCQlpZiAoc2VsZWN0aW9uUHJvdmlkZXIuZ2V0U2VsZWN0aW9uKCkgIT0gbnVsbCkgeworCQkJCXNlbGVjdGlvbkNoYW5nZWQobmV3IFNlbGVjdGlvbkNoYW5nZWRFdmVudChzZWxlY3Rpb25Qcm92aWRlciwgc2VsZWN0aW9uUHJvdmlkZXIuZ2V0U2VsZWN0aW9uKCkpKTsKKwkJCX0KKwkJfQorCX0KKworCS8qKgorCSAqIFRoaXMgaW1wbGVtZW50cyB7QGxpbmsgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyfSwKKwkgKiBoYW5kbGluZyB7QGxpbmsgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5TZWxlY3Rpb25DaGFuZ2VkRXZlbnR9cyBieSBxdWVyeWluZyBmb3IgdGhlIGNoaWxkcmVuIGFuZCBzaWJsaW5ncworCSAqIHRoYXQgY2FuIGJlIGFkZGVkIHRvIHRoZSBzZWxlY3RlZCBvYmplY3QgYW5kIHVwZGF0aW5nIHRoZSBtZW51cyBhY2NvcmRpbmdseS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZWxlY3Rpb25DaGFuZ2VkKFNlbGVjdGlvbkNoYW5nZWRFdmVudCBldmVudCkgeworCQkvLyBSZW1vdmUgYW55IG1lbnUgaXRlbXMgZm9yIG9sZCBzZWxlY3Rpb24uCisJCS8vCisJCWlmIChjcmVhdGVDaGlsZE1lbnVNYW5hZ2VyICE9IG51bGwpIHsKKwkJCWRlcG9wdWxhdGVNYW5hZ2VyKGNyZWF0ZUNoaWxkTWVudU1hbmFnZXIsIGNyZWF0ZUNoaWxkQWN0aW9ucyk7CisJCX0KKwkJaWYgKGNyZWF0ZVNpYmxpbmdNZW51TWFuYWdlciAhPSBudWxsKSB7CisJCQlkZXBvcHVsYXRlTWFuYWdlcihjcmVhdGVTaWJsaW5nTWVudU1hbmFnZXIsIGNyZWF0ZVNpYmxpbmdBY3Rpb25zKTsKKwkJfQorCisJCS8vIFF1ZXJ5IHRoZSBuZXcgc2VsZWN0aW9uIGZvciBhcHByb3ByaWF0ZSBuZXcgY2hpbGQvc2libGluZyBkZXNjcmlwdG9ycworCQkvLworCQlDb2xsZWN0aW9uPD8+IG5ld0NoaWxkRGVzY3JpcHRvcnMgPSBudWxsOworCQlDb2xsZWN0aW9uPD8+IG5ld1NpYmxpbmdEZXNjcmlwdG9ycyA9IG51bGw7CisKKwkJSVNlbGVjdGlvbiBzZWxlY3Rpb24gPSBldmVudC5nZXRTZWxlY3Rpb24oKTsKKwkJaWYgKHNlbGVjdGlvbiBpbnN0YW5jZW9mIElTdHJ1Y3R1cmVkU2VsZWN0aW9uICYmICgoSVN0cnVjdHVyZWRTZWxlY3Rpb24pc2VsZWN0aW9uKS5zaXplKCkgPT0gMSkgeworCQkJT2JqZWN0IG9iamVjdCA9ICgoSVN0cnVjdHVyZWRTZWxlY3Rpb24pc2VsZWN0aW9uKS5nZXRGaXJzdEVsZW1lbnQoKTsKKworCQkJRWRpdGluZ0RvbWFpbiBkb21haW4gPSAoKElFZGl0aW5nRG9tYWluUHJvdmlkZXIpYWN0aXZlRWRpdG9yUGFydCkuZ2V0RWRpdGluZ0RvbWFpbigpOworCisJCQluZXdDaGlsZERlc2NyaXB0b3JzID0gZG9tYWluLmdldE5ld0NoaWxkRGVzY3JpcHRvcnMob2JqZWN0LCBudWxsKTsKKwkJCW5ld1NpYmxpbmdEZXNjcmlwdG9ycyA9IGRvbWFpbi5nZXROZXdDaGlsZERlc2NyaXB0b3JzKG51bGwsIG9iamVjdCk7CisJCX0KKworCQkvLyBHZW5lcmF0ZSBhY3Rpb25zIGZvciBzZWxlY3Rpb247IHBvcHVsYXRlIGFuZCByZWRyYXcgdGhlIG1lbnVzLgorCQkvLworCQljcmVhdGVDaGlsZEFjdGlvbnMgPSBnZW5lcmF0ZUNyZWF0ZUNoaWxkQWN0aW9ucyhuZXdDaGlsZERlc2NyaXB0b3JzLCBzZWxlY3Rpb24pOworCQljcmVhdGVTaWJsaW5nQWN0aW9ucyA9IGdlbmVyYXRlQ3JlYXRlU2libGluZ0FjdGlvbnMobmV3U2libGluZ0Rlc2NyaXB0b3JzLCBzZWxlY3Rpb24pOworCisJCWlmIChjcmVhdGVDaGlsZE1lbnVNYW5hZ2VyICE9IG51bGwpIHsKKwkJCXBvcHVsYXRlTWFuYWdlcihjcmVhdGVDaGlsZE1lbnVNYW5hZ2VyLCBjcmVhdGVDaGlsZEFjdGlvbnMsIG51bGwpOworCQkJY3JlYXRlQ2hpbGRNZW51TWFuYWdlci51cGRhdGUodHJ1ZSk7CisJCX0KKwkJaWYgKGNyZWF0ZVNpYmxpbmdNZW51TWFuYWdlciAhPSBudWxsKSB7CisJCQlwb3B1bGF0ZU1hbmFnZXIoY3JlYXRlU2libGluZ01lbnVNYW5hZ2VyLCBjcmVhdGVTaWJsaW5nQWN0aW9ucywgbnVsbCk7CisJCQljcmVhdGVTaWJsaW5nTWVudU1hbmFnZXIudXBkYXRlKHRydWUpOworCQl9CisJfQorCisJLyoqCisJICogVGhpcyBnZW5lcmF0ZXMgYSB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkuYWN0aW9uLkNyZWF0ZUNoaWxkQWN0aW9ufSBmb3IgZWFjaCBvYmplY3QgaW4gPGNvZGU+ZGVzY3JpcHRvcnM8L2NvZGU+LAorCSAqIGFuZCByZXR1cm5zIHRoZSBjb2xsZWN0aW9uIG9mIHRoZXNlIGFjdGlvbnMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIENvbGxlY3Rpb248SUFjdGlvbj4gZ2VuZXJhdGVDcmVhdGVDaGlsZEFjdGlvbnMoQ29sbGVjdGlvbjw/PiBkZXNjcmlwdG9ycywgSVNlbGVjdGlvbiBzZWxlY3Rpb24pIHsKKwkJQ29sbGVjdGlvbjxJQWN0aW9uPiBhY3Rpb25zID0gbmV3IEFycmF5TGlzdDxJQWN0aW9uPigpOworCQlpZiAoZGVzY3JpcHRvcnMgIT0gbnVsbCkgeworCQkJZm9yIChPYmplY3QgZGVzY3JpcHRvciA6IGRlc2NyaXB0b3JzKSB7CisJCQkJYWN0aW9ucy5hZGQobmV3IENyZWF0ZUNoaWxkQWN0aW9uKGFjdGl2ZUVkaXRvclBhcnQsIHNlbGVjdGlvbiwgZGVzY3JpcHRvcikpOworCQkJfQorCQl9CisJCXJldHVybiBhY3Rpb25zOworCX0KKworCS8qKgorCSAqIFRoaXMgZ2VuZXJhdGVzIGEge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmFjdGlvbi5DcmVhdGVTaWJsaW5nQWN0aW9ufSBmb3IgZWFjaCBvYmplY3QgaW4gPGNvZGU+ZGVzY3JpcHRvcnM8L2NvZGU+LAorCSAqIGFuZCByZXR1cm5zIHRoZSBjb2xsZWN0aW9uIG9mIHRoZXNlIGFjdGlvbnMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIENvbGxlY3Rpb248SUFjdGlvbj4gZ2VuZXJhdGVDcmVhdGVTaWJsaW5nQWN0aW9ucyhDb2xsZWN0aW9uPD8+IGRlc2NyaXB0b3JzLCBJU2VsZWN0aW9uIHNlbGVjdGlvbikgeworCQlDb2xsZWN0aW9uPElBY3Rpb24+IGFjdGlvbnMgPSBuZXcgQXJyYXlMaXN0PElBY3Rpb24+KCk7CisJCWlmIChkZXNjcmlwdG9ycyAhPSBudWxsKSB7CisJCQlmb3IgKE9iamVjdCBkZXNjcmlwdG9yIDogZGVzY3JpcHRvcnMpIHsKKwkJCQlhY3Rpb25zLmFkZChuZXcgQ3JlYXRlU2libGluZ0FjdGlvbihhY3RpdmVFZGl0b3JQYXJ0LCBzZWxlY3Rpb24sIGRlc2NyaXB0b3IpKTsKKwkJCX0KKwkJfQorCQlyZXR1cm4gYWN0aW9uczsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHBvcHVsYXRlcyB0aGUgc3BlY2lmaWVkIDxjb2RlPm1hbmFnZXI8L2NvZGU+IHdpdGgge0BsaW5rIG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5BY3Rpb25Db250cmlidXRpb25JdGVtfXMKKwkgKiBiYXNlZCBvbiB0aGUge0BsaW5rIG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JQWN0aW9ufXMgY29udGFpbmVkIGluIHRoZSA8Y29kZT5hY3Rpb25zPC9jb2RlPiBjb2xsZWN0aW9uLAorCSAqIGJ5IGluc2VydGluZyB0aGVtIGJlZm9yZSB0aGUgc3BlY2lmaWVkIGNvbnRyaWJ1dGlvbiBpdGVtIDxjb2RlPmNvbnRyaWJ1dGlvbklEPC9jb2RlPi4KKwkgKiBJZiA8Y29kZT5jb250cmlidXRpb25JRDwvY29kZT4gaXMgPGNvZGU+bnVsbDwvY29kZT4sIHRoZXkgYXJlIHNpbXBseSBhZGRlZC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBwb3B1bGF0ZU1hbmFnZXIoSUNvbnRyaWJ1dGlvbk1hbmFnZXIgbWFuYWdlciwgQ29sbGVjdGlvbjw/IGV4dGVuZHMgSUFjdGlvbj4gYWN0aW9ucywgU3RyaW5nIGNvbnRyaWJ1dGlvbklEKSB7CisJCWlmIChhY3Rpb25zICE9IG51bGwpIHsKKwkJCWZvciAoSUFjdGlvbiBhY3Rpb24gOiBhY3Rpb25zKSB7CisJCQkJaWYgKGNvbnRyaWJ1dGlvbklEICE9IG51bGwpIHsKKwkJCQkJbWFuYWdlci5pbnNlcnRCZWZvcmUoY29udHJpYnV0aW9uSUQsIGFjdGlvbik7CisJCQkJfQorCQkJCWVsc2UgeworCQkJCQltYW5hZ2VyLmFkZChhY3Rpb24pOworCQkJCX0KKwkJCX0KKwkJfQorCX0KKwkJCisJLyoqCisJICogVGhpcyByZW1vdmVzIGZyb20gdGhlIHNwZWNpZmllZCA8Y29kZT5tYW5hZ2VyPC9jb2RlPiBhbGwge0BsaW5rIG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5BY3Rpb25Db250cmlidXRpb25JdGVtfXMKKwkgKiBiYXNlZCBvbiB0aGUge0BsaW5rIG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JQWN0aW9ufXMgY29udGFpbmVkIGluIHRoZSA8Y29kZT5hY3Rpb25zPC9jb2RlPiBjb2xsZWN0aW9uLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIGRlcG9wdWxhdGVNYW5hZ2VyKElDb250cmlidXRpb25NYW5hZ2VyIG1hbmFnZXIsIENvbGxlY3Rpb248PyBleHRlbmRzIElBY3Rpb24+IGFjdGlvbnMpIHsKKwkJaWYgKGFjdGlvbnMgIT0gbnVsbCkgeworCQkJSUNvbnRyaWJ1dGlvbkl0ZW1bXSBpdGVtcyA9IG1hbmFnZXIuZ2V0SXRlbXMoKTsKKwkJCWZvciAoaW50IGkgPSAwOyBpIDwgaXRlbXMubGVuZ3RoOyBpKyspIHsKKwkJCQkvLyBMb29rIGludG8gU3ViQ29udHJpYnV0aW9uSXRlbXMKKwkJCQkvLworCQkJCUlDb250cmlidXRpb25JdGVtIGNvbnRyaWJ1dGlvbkl0ZW0gPSBpdGVtc1tpXTsKKwkJCQl3aGlsZSAoY29udHJpYnV0aW9uSXRlbSBpbnN0YW5jZW9mIFN1YkNvbnRyaWJ1dGlvbkl0ZW0pIHsKKwkJCQkJY29udHJpYnV0aW9uSXRlbSA9ICgoU3ViQ29udHJpYnV0aW9uSXRlbSljb250cmlidXRpb25JdGVtKS5nZXRJbm5lckl0ZW0oKTsKKwkJCQl9CisKKwkJCQkvLyBEZWxldGUgdGhlIEFjdGlvbkNvbnRyaWJ1dGlvbkl0ZW1zIHdpdGggbWF0Y2hpbmcgYWN0aW9uLgorCQkJCS8vCisJCQkJaWYgKGNvbnRyaWJ1dGlvbkl0ZW0gaW5zdGFuY2VvZiBBY3Rpb25Db250cmlidXRpb25JdGVtKSB7CisJCQkJCUlBY3Rpb24gYWN0aW9uID0gKChBY3Rpb25Db250cmlidXRpb25JdGVtKWNvbnRyaWJ1dGlvbkl0ZW0pLmdldEFjdGlvbigpOworCQkJCQlpZiAoYWN0aW9ucy5jb250YWlucyhhY3Rpb24pKSB7CisJCQkJCQltYW5hZ2VyLnJlbW92ZShjb250cmlidXRpb25JdGVtKTsKKwkJCQkJfQorCQkJCX0KKwkJCX0KKwkJfQorCX0KKworCS8qKgorCSAqIFRoaXMgcG9wdWxhdGVzIHRoZSBwb3AtdXAgbWVudSBiZWZvcmUgaXQgYXBwZWFycy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBtZW51QWJvdXRUb1Nob3coSU1lbnVNYW5hZ2VyIG1lbnVNYW5hZ2VyKSB7CisJCXN1cGVyLm1lbnVBYm91dFRvU2hvdyhtZW51TWFuYWdlcik7CisJCU1lbnVNYW5hZ2VyIHN1Ym1lbnVNYW5hZ2VyID0gbnVsbDsKKworCQlzdWJtZW51TWFuYWdlciA9IG5ldyBNZW51TWFuYWdlcihDb3JlRWRpdG9yUGx1Z2luLklOU1RBTkNFLmdldFN0cmluZygiX1VJX0NyZWF0ZUNoaWxkX21lbnVfaXRlbSIpKTsgLy8kTk9OLU5MUy0xJAorCQlwb3B1bGF0ZU1hbmFnZXIoc3VibWVudU1hbmFnZXIsIGNyZWF0ZUNoaWxkQWN0aW9ucywgbnVsbCk7CisJCW1lbnVNYW5hZ2VyLmluc2VydEJlZm9yZSgiZWRpdCIsIHN1Ym1lbnVNYW5hZ2VyKTsgLy8kTk9OLU5MUy0xJAorCisJCXN1Ym1lbnVNYW5hZ2VyID0gbmV3IE1lbnVNYW5hZ2VyKENvcmVFZGl0b3JQbHVnaW4uSU5TVEFOQ0UuZ2V0U3RyaW5nKCJfVUlfQ3JlYXRlU2libGluZ19tZW51X2l0ZW0iKSk7IC8vJE5PTi1OTFMtMSQKKwkJcG9wdWxhdGVNYW5hZ2VyKHN1Ym1lbnVNYW5hZ2VyLCBjcmVhdGVTaWJsaW5nQWN0aW9ucywgbnVsbCk7CisJCW1lbnVNYW5hZ2VyLmluc2VydEJlZm9yZSgiZWRpdCIsIHN1Ym1lbnVNYW5hZ2VyKTsgLy8kTk9OLU5MUy0xJAorCX0KKworCS8qKgorCSAqIFRoaXMgaW5zZXJ0cyBnbG9iYWwgYWN0aW9ucyBiZWZvcmUgdGhlICJhZGRpdGlvbnMtZW5kIiBzZXBhcmF0b3IuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgYWRkR2xvYmFsQWN0aW9ucyhJTWVudU1hbmFnZXIgbWVudU1hbmFnZXIpIHsKKwkJbWVudU1hbmFnZXIuaW5zZXJ0QWZ0ZXIoImFkZGl0aW9ucy1lbmQiLCBuZXcgU2VwYXJhdG9yKCJ1aS1hY3Rpb25zIikpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKKwkJbWVudU1hbmFnZXIuaW5zZXJ0QWZ0ZXIoInVpLWFjdGlvbnMiLCBzaG93UHJvcGVydGllc1ZpZXdBY3Rpb24pOyAvLyROT04tTkxTLTEkCisKKwkJcmVmcmVzaFZpZXdlckFjdGlvbi5zZXRFbmFibGVkKHJlZnJlc2hWaWV3ZXJBY3Rpb24uaXNFbmFibGVkKCkpOwkJCisJCW1lbnVNYW5hZ2VyLmluc2VydEFmdGVyKCJ1aS1hY3Rpb25zIiwgcmVmcmVzaFZpZXdlckFjdGlvbik7IC8vJE5PTi1OTFMtMSQKKworCQlzdXBlci5hZGRHbG9iYWxBY3Rpb25zKG1lbnVNYW5hZ2VyKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGVuc3VyZXMgdGhhdCBhIGRlbGV0ZSBhY3Rpb24gd2lsbCBjbGVhbiB1cCBhbGwgcmVmZXJlbmNlcyB0byBkZWxldGVkIG9iamVjdHMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIGJvb2xlYW4gcmVtb3ZlQWxsUmVmZXJlbmNlc09uRGVsZXRlKCkgeworCQlyZXR1cm4gdHJ1ZTsKKwl9CisKK30KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3NjZW5hcmlvL3ByZXNlbnRhdGlvbi9TY2VuYXJpb0VkaXRvci5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvc2NlbmFyaW8vcHJlc2VudGF0aW9uL1NjZW5hcmlvRWRpdG9yLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDQ1OGIxZQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3NjZW5hcmlvL3ByZXNlbnRhdGlvbi9TY2VuYXJpb0VkaXRvci5qYXZhCkBAIC0wLDAgKzEsMTU4OCBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2NlbmFyaW8ucHJlc2VudGF0aW9uOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA2LCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247CitpbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbTsKK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OworaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOworaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uczsKK2ltcG9ydCBqYXZhLnV0aWwuRXZlbnRPYmplY3Q7CitpbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7CitpbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOworaW1wb3J0IGphdmEudXRpbC5MaW5rZWRIYXNoTWFwOworaW1wb3J0IGphdmEudXRpbC5MaXN0OworaW1wb3J0IGphdmEudXRpbC5NYXA7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JRmlsZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JTWFya2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklSZXNvdXJjZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUmVzb3VyY2VDaGFuZ2VFdmVudDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUmVzb3VyY2VDaGFuZ2VMaXN0ZW5lcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUmVzb3VyY2VEZWx0YTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUmVzb3VyY2VEZWx0YVZpc2l0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuUmVzb3VyY2VzUGx1Z2luOworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5Db3JlRXhjZXB0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUGF0aDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVByb2dyZXNzTW9uaXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuTnVsbFByb2dyZXNzTW9uaXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLmNvbW1hbmQuQmFzaWNDb21tYW5kU3RhY2s7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5jb21tYW5kLkNvbW1hbmQ7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5jb21tYW5kLkNvbW1hbmRTdGFjazsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLmNvbW1hbmQuQ29tbWFuZFN0YWNrTGlzdGVuZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udWkuTWFya2VySGVscGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udWkuZWRpdG9yLlByb2JsZW1FZGl0b3JQYXJ0OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udWkudmlld2VyLklWaWV3ZXJQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuQmFzaWNEaWFnbm9zdGljOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5EaWFnbm9zdGljOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5VUkk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3Q7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVWYWxpZGF0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnByb3ZpZGVyLkVjb3JlSXRlbVByb3ZpZGVyQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnJlc291cmNlLlJlc291cmNlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5yZXNvdXJjZS5SZXNvdXJjZVNldDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUudXRpbC5FQ29udGVudEFkYXB0ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnV0aWwuRWNvcmVVdGlsOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LmRvbWFpbi5BZGFwdGVyRmFjdG9yeUVkaXRpbmdEb21haW47CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQuZG9tYWluLkVkaXRpbmdEb21haW47CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQuZG9tYWluLklFZGl0aW5nRG9tYWluUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuQWRhcHRlckZhY3RvcnlJdGVtRGVsZWdhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkNvbXBvc2VkQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuUmVmbGVjdGl2ZUl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLnJlc291cmNlLlJlc291cmNlSXRlbVByb3ZpZGVyQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkuYWN0aW9uLkVkaXRpbmdEb21haW5BY3Rpb25CYXJDb250cmlidXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5jZWxsZWRpdG9yLkFkYXB0ZXJGYWN0b3J5VHJlZUVkaXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5kbmQuRWRpdGluZ0RvbWFpblZpZXdlckRyb3BBZGFwdGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmRuZC5Mb2NhbFRyYW5zZmVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmRuZC5WaWV3ZXJEcmFnQWRhcHRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5wcm92aWRlci5BZGFwdGVyRmFjdG9yeUNvbnRlbnRQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5wcm92aWRlci5BZGFwdGVyRmFjdG9yeUxhYmVsUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkucHJvdmlkZXIuVW53cmFwcGluZ1NlbGVjdGlvblByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLnV0aWwuRWRpdFVJTWFya2VySGVscGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLnV0aWwuRWRpdFVJVXRpbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS52aWV3LkV4dGVuZGVkUHJvcGVydHlTaGVldFBhZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklNZW51TGlzdGVuZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklNZW51TWFuYWdlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSVN0YXR1c0xpbmVNYW5hZ2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JVG9vbEJhck1hbmFnZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLk1lbnVNYW5hZ2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5TZXBhcmF0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuZGlhbG9ncy5NZXNzYWdlRGlhbG9nOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmRpYWxvZ3MuUHJvZ3Jlc3NNb25pdG9yRGlhbG9nOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnV0aWwuTG9jYWxTZWxlY3Rpb25UcmFuc2ZlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvblByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVN0cnVjdHVyZWRTZWxlY3Rpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5TZWxlY3Rpb25DaGFuZ2VkRXZlbnQ7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5TdHJ1Y3R1cmVkU2VsZWN0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuU3RydWN0dXJlZFZpZXdlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlRyZWVWaWV3ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5WaWV3ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLlNURU1YTUlSZXNvdXJjZUZhY3RvcnlJbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24ucHJlc2VudGF0aW9uLkNvcmVFZGl0b3JQbHVnaW47CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5wcm92aWRlci5Db21tb25JdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZXhwZXJpbWVudC5wcm92aWRlci5FeHBlcmltZW50SXRlbVByb3ZpZGVyQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLnByb3ZpZGVyLkdyYXBoSXRlbVByb3ZpZGVyQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmxvZ2dlci5wcm92aWRlci5Mb2dnZXJJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwucHJvdmlkZXIuTW9kZWxJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIucHJvdmlkZXIuTW9kaWZpZXJJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlLnByb3ZpZGVyLlByZWRpY2F0ZUl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zY2VuYXJpby5wcm92aWRlci5TY2VuYXJpb0l0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zZXF1ZW5jZXIucHJvdmlkZXIuU2VxdWVuY2VySXRlbVByb3ZpZGVyQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNvbHZlci5wcm92aWRlci5Tb2x2ZXJJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUudHJpZ2dlci5wcm92aWRlci5UcmlnZ2VySXRlbVByb3ZpZGVyQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LlNXVDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuY3VzdG9tLkNUYWJGb2xkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmRuZC5ETkQ7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmRuZC5UZXh0VHJhbnNmZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmRuZC5UcmFuc2ZlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLkNvbnRyb2xBZGFwdGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuQ29udHJvbEV2ZW50OworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ncmFwaGljcy5Qb2ludDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuTWVudTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5UcmVlOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklBY3Rpb25CYXJzOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklFZGl0b3JJbnB1dDsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5JRWRpdG9yUGFydDsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5JRWRpdG9yU2l0ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5JUGFydExpc3RlbmVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2hQYXJ0OworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLlBhcnRJbml0RXhjZXB0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLmFjdGlvbnMuV29ya3NwYWNlTW9kaWZ5T3BlcmF0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLmRpYWxvZ3MuU2F2ZUFzRGlhbG9nOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLmlkZS5JR290b01hcmtlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5wYXJ0LkZpbGVFZGl0b3JJbnB1dDsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5wYXJ0Lk11bHRpUGFnZUVkaXRvclBhcnQ7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkudmlld3MuY29udGVudG91dGxpbmUuQ29udGVudE91dGxpbmU7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkudmlld3MuY29udGVudG91dGxpbmUuQ29udGVudE91dGxpbmVQYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLnZpZXdzLmNvbnRlbnRvdXRsaW5lLklDb250ZW50T3V0bGluZVBhZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkudmlld3MucHJvcGVydGllcy5JUHJvcGVydHlTaGVldFBhZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkudmlld3MucHJvcGVydGllcy5Qcm9wZXJ0eVNoZWV0OworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLnZpZXdzLnByb3BlcnRpZXMuUHJvcGVydHlTaGVldFBhZ2U7CisKKy8qKgorICogVGhpcyBpcyBhbiBleGFtcGxlIG9mIGEgU2NlbmFyaW8gbW9kZWwgZWRpdG9yLgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLQorICogZW5kLXVzZXItZG9jIC0tPgorICogQGdlbmVyYXRlZAorICovCitAU3VwcHJlc3NXYXJuaW5ncygiYWxsIikKK3B1YmxpYyBjbGFzcyBTY2VuYXJpb0VkaXRvciBleHRlbmRzIE11bHRpUGFnZUVkaXRvclBhcnQgaW1wbGVtZW50cworCQlJRWRpdGluZ0RvbWFpblByb3ZpZGVyLCBJU2VsZWN0aW9uUHJvdmlkZXIsIElNZW51TGlzdGVuZXIsIElWaWV3ZXJQcm92aWRlciwgSUdvdG9NYXJrZXIgeworCQorCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIElEX1NDRU5BUklPX0VESVRPUiA9ICJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2NlbmFyaW8ucHJlc2VudGF0aW9uLlNjZW5hcmlvRWRpdG9ySUQiOworCQorCS8qKgorCSAqIFRoaXMga2VlcHMgdHJhY2sgb2YgdGhlIGVkaXRpbmcgZG9tYWluIHRoYXQgaXMgdXNlZCB0byB0cmFjayBhbGwgY2hhbmdlcyB0byB0aGUgbW9kZWwuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBBZGFwdGVyRmFjdG9yeUVkaXRpbmdEb21haW4gZWRpdGluZ0RvbWFpbjsKKworCS8qKgorCSAqIFRoaXMgaXMgdGhlIG9uZSBhZGFwdGVyIGZhY3RvcnkgdXNlZCBmb3IgcHJvdmlkaW5nIHZpZXdzIG9mIHRoZSBtb2RlbC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIENvbXBvc2VkQWRhcHRlckZhY3RvcnkgYWRhcHRlckZhY3Rvcnk7CisKKwkvKioKKwkgKiBUaGlzIGlzIHRoZSBjb250ZW50IG91dGxpbmUgcGFnZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tCisJICogZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgSUNvbnRlbnRPdXRsaW5lUGFnZSBjb250ZW50T3V0bGluZVBhZ2U7CisKKwkvKioKKwkgKiBUaGlzIGlzIGEga2x1ZGdlLi4uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBJU3RhdHVzTGluZU1hbmFnZXIgY29udGVudE91dGxpbmVTdGF0dXNMaW5lTWFuYWdlcjsKKworCS8qKgorCSAqIFRoaXMgaXMgdGhlIGNvbnRlbnQgb3V0bGluZSBwYWdlJ3Mgdmlld2VyLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0KKwkgKiBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBUcmVlVmlld2VyIGNvbnRlbnRPdXRsaW5lVmlld2VyOworCisJLyoqCisJICogVGhpcyBpcyB0aGUgcHJvcGVydHkgc2hlZXQgcGFnZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tCisJICogZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgUHJvcGVydHlTaGVldFBhZ2UgcHJvcGVydHlTaGVldFBhZ2U7CisKKwkvKioKKwkgKiBUaGlzIGlzIHRoZSB2aWV3ZXIgdGhhdCBzaGFkb3dzIHRoZSBzZWxlY3Rpb24gaW4gdGhlIGNvbnRlbnQgb3V0bGluZS4gVGhlCisJICogcGFyZW50IHJlbGF0aW9uIG11c3QgYmUgY29ycmVjdGx5IGRlZmluZWQgZm9yIHRoaXMgdG8gd29yay4gPCEtLQorCSAqIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIFRyZWVWaWV3ZXIgc2VsZWN0aW9uVmlld2VyOworCisJLyoqCisJICogVGhpcyBrZWVwcyB0cmFjayBvZiB0aGUgYWN0aXZlIGNvbnRlbnQgdmlld2VyLCB3aGljaCBtYXkgYmUgZWl0aGVyIG9uZSBvZgorCSAqIHRoZSB2aWV3ZXJzIGluIHRoZSBwYWdlcyBvciB0aGUgY29udGVudCBvdXRsaW5lIHZpZXdlci4gPCEtLQorCSAqIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIFZpZXdlciBjdXJyZW50Vmlld2VyOworCisJLyoqCisJICogVGhpcyBsaXN0ZW5zIHRvIHdoaWNoIGV2ZXIgdmlld2VyIGlzIGFjdGl2ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tCisJICogZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lciBzZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXI7CisKKwkvKioKKwkgKiBUaGlzIGtlZXBzIHRyYWNrIG9mIGFsbCB0aGUge0BsaW5rIG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcn1zIHRoYXQgYXJlIGxpc3RlbmluZyB0byB0aGlzIGVkaXRvci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIENvbGxlY3Rpb248SVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcj4gc2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVycyA9IG5ldyBBcnJheUxpc3Q8SVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcj4oKTsKKworCS8qKgorCSAqIFRoaXMga2VlcHMgdHJhY2sgb2YgdGhlIHNlbGVjdGlvbiBvZiB0aGUgZWRpdG9yIGFzIGEgd2hvbGUuIDwhLS0KKwkgKiBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogCisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBJU2VsZWN0aW9uIGVkaXRvclNlbGVjdGlvbiA9IFN0cnVjdHVyZWRTZWxlY3Rpb24uRU1QVFk7CisKKwkvKioKKwkgKiBUaGUgTWFya2VySGVscGVyIGlzIHJlc3BvbnNpYmxlIGZvciBjcmVhdGluZyB3b3Jrc3BhY2UgcmVzb3VyY2UgbWFya2VycyBwcmVzZW50ZWQKKwkgKiBpbiBFY2xpcHNlJ3MgUHJvYmxlbXMgVmlldy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgTWFya2VySGVscGVyIG1hcmtlckhlbHBlciA9IG5ldyBFZGl0VUlNYXJrZXJIZWxwZXIoKTsKKworCS8qKgorCSAqIFRoaXMgbGlzdGVucyBmb3Igd2hlbiB0aGUgb3V0bGluZSBiZWNvbWVzIGFjdGl2ZQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBJUGFydExpc3RlbmVyIHBhcnRMaXN0ZW5lciA9CisJCW5ldyBJUGFydExpc3RlbmVyKCkgeworCQkJcHVibGljIHZvaWQgcGFydEFjdGl2YXRlZChJV29ya2JlbmNoUGFydCBwKSB7CisJCQkJaWYgKHAgaW5zdGFuY2VvZiBDb250ZW50T3V0bGluZSkgeworCQkJCQlpZiAoKChDb250ZW50T3V0bGluZSlwKS5nZXRDdXJyZW50UGFnZSgpID09IGNvbnRlbnRPdXRsaW5lUGFnZSkgeworCQkJCQkJZ2V0QWN0aW9uQmFyQ29udHJpYnV0b3IoKS5zZXRBY3RpdmVFZGl0b3IoU2NlbmFyaW9FZGl0b3IudGhpcyk7CisKKwkJCQkJCXNldEN1cnJlbnRWaWV3ZXIoY29udGVudE91dGxpbmVWaWV3ZXIpOworCQkJCQl9CisJCQkJfQorCQkJCWVsc2UgaWYgKHAgaW5zdGFuY2VvZiBQcm9wZXJ0eVNoZWV0KSB7CisJCQkJCWlmICgoKFByb3BlcnR5U2hlZXQpcCkuZ2V0Q3VycmVudFBhZ2UoKSA9PSBwcm9wZXJ0eVNoZWV0UGFnZSkgeworCQkJCQkJZ2V0QWN0aW9uQmFyQ29udHJpYnV0b3IoKS5zZXRBY3RpdmVFZGl0b3IoU2NlbmFyaW9FZGl0b3IudGhpcyk7CisJCQkJCQloYW5kbGVBY3RpdmF0ZSgpOworCQkJCQl9CisJCQkJfQorCQkJCWVsc2UgaWYgKHAgPT0gU2NlbmFyaW9FZGl0b3IudGhpcykgeworCQkJCQloYW5kbGVBY3RpdmF0ZSgpOworCQkJCX0KKwkJCX0KKwkJCXB1YmxpYyB2b2lkIHBhcnRCcm91Z2h0VG9Ub3AoSVdvcmtiZW5jaFBhcnQgcCkgeworCQkJCS8vIElnbm9yZS4KKwkJCX0KKwkJCXB1YmxpYyB2b2lkIHBhcnRDbG9zZWQoSVdvcmtiZW5jaFBhcnQgcCkgeworCQkJCS8vIElnbm9yZS4KKwkJCX0KKwkJCXB1YmxpYyB2b2lkIHBhcnREZWFjdGl2YXRlZChJV29ya2JlbmNoUGFydCBwKSB7CisJCQkJLy8gSWdub3JlLgorCQkJfQorCQkJcHVibGljIHZvaWQgcGFydE9wZW5lZChJV29ya2JlbmNoUGFydCBwKSB7CisJCQkJLy8gSWdub3JlLgorCQkJfQorCQl9OworCisJLyoqCisJICogUmVzb3VyY2VzIHRoYXQgaGF2ZSBiZWVuIHJlbW92ZWQgc2luY2UgbGFzdCBhY3RpdmF0aW9uLiA8IS0tCisJICogYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgQ29sbGVjdGlvbjxSZXNvdXJjZT4gcmVtb3ZlZFJlc291cmNlcyA9IG5ldyBBcnJheUxpc3Q8UmVzb3VyY2U+KCk7CisKKwkvKioKKwkgKiBSZXNvdXJjZXMgdGhhdCBoYXZlIGJlZW4gY2hhbmdlZCBzaW5jZSBsYXN0IGFjdGl2YXRpb24uIDwhLS0KKwkgKiBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogCisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBDb2xsZWN0aW9uPFJlc291cmNlPiBjaGFuZ2VkUmVzb3VyY2VzID0gbmV3IEFycmF5TGlzdDxSZXNvdXJjZT4oKTsKKworCS8qKgorCSAqIFJlc291cmNlcyB0aGF0IGhhdmUgYmVlbiBzYXZlZC4gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MKKwkgKiAtLT4KKwkgKiAKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIENvbGxlY3Rpb248UmVzb3VyY2U+IHNhdmVkUmVzb3VyY2VzID0gbmV3IEFycmF5TGlzdDxSZXNvdXJjZT4oKTsKKworCS8qKgorCSAqIE1hcCB0byBzdG9yZSB0aGUgZGlhZ25vc3RpYyBhc3NvY2lhdGVkIHdpdGggYSByZXNvdXJjZS4gPCEtLQorCSAqIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIE1hcDxSZXNvdXJjZSwgRGlhZ25vc3RpYz4gcmVzb3VyY2VUb0RpYWdub3N0aWNNYXAgPSBuZXcgTGlua2VkSGFzaE1hcDxSZXNvdXJjZSwgRGlhZ25vc3RpYz4oKTsKKworCS8qKgorCSAqIENvbnRyb2xzIHdoZXRoZXIgdGhlIHByb2JsZW0gaW5kaWNhdGlvbiBzaG91bGQgYmUgdXBkYXRlZC4gPCEtLQorCSAqIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIGJvb2xlYW4gdXBkYXRlUHJvYmxlbUluZGljYXRpb24gPSB0cnVlOworCisJLyoqCisJICogQWRhcHRlciB1c2VkIHRvIHVwZGF0ZSB0aGUgcHJvYmxlbSBpbmRpY2F0aW9uIHdoZW4gcmVzb3VyY2VzIGFyZSBkZW1hbmRlZCBsb2FkZWQuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBFQ29udGVudEFkYXB0ZXIgcHJvYmxlbUluZGljYXRpb25BZGFwdGVyID0gCisJCW5ldyBFQ29udGVudEFkYXB0ZXIoKSB7CisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyB2b2lkIG5vdGlmeUNoYW5nZWQoTm90aWZpY2F0aW9uIG5vdGlmaWNhdGlvbikgeworCQkJCWlmIChub3RpZmljYXRpb24uZ2V0Tm90aWZpZXIoKSBpbnN0YW5jZW9mIFJlc291cmNlKSB7CisJCQkJCXN3aXRjaCAobm90aWZpY2F0aW9uLmdldEZlYXR1cmVJRChSZXNvdXJjZS5jbGFzcykpIHsKKwkJCQkJCWNhc2UgUmVzb3VyY2UuUkVTT1VSQ0VfX0lTX0xPQURFRDoKKwkJCQkJCWNhc2UgUmVzb3VyY2UuUkVTT1VSQ0VfX0VSUk9SUzoKKwkJCQkJCWNhc2UgUmVzb3VyY2UuUkVTT1VSQ0VfX1dBUk5JTkdTOiB7CisJCQkJCQkJUmVzb3VyY2UgcmVzb3VyY2UgPSAoUmVzb3VyY2Upbm90aWZpY2F0aW9uLmdldE5vdGlmaWVyKCk7CisJCQkJCQkJRGlhZ25vc3RpYyBkaWFnbm9zdGljID0gYW5hbHl6ZVJlc291cmNlUHJvYmxlbXMocmVzb3VyY2UsIG51bGwpOworCQkJCQkJCWlmIChkaWFnbm9zdGljLmdldFNldmVyaXR5KCkgIT0gRGlhZ25vc3RpYy5PSykgeworCQkJCQkJCQlyZXNvdXJjZVRvRGlhZ25vc3RpY01hcC5wdXQocmVzb3VyY2UsIGRpYWdub3N0aWMpOworCQkJCQkJCX0KKwkJCQkJCQllbHNlIHsKKwkJCQkJCQkJcmVzb3VyY2VUb0RpYWdub3N0aWNNYXAucmVtb3ZlKHJlc291cmNlKTsKKwkJCQkJCQl9CisKKwkJCQkJCQlpZiAodXBkYXRlUHJvYmxlbUluZGljYXRpb24pIHsKKwkJCQkJCQkJZ2V0U2l0ZSgpLmdldFNoZWxsKCkuZ2V0RGlzcGxheSgpLmFzeW5jRXhlYworCQkJCQkJCQkJKG5ldyBSdW5uYWJsZSgpIHsKKwkJCQkJCQkJCQkgcHVibGljIHZvaWQgcnVuKCkgeworCQkJCQkJCQkJCQkgdXBkYXRlUHJvYmxlbUluZGljYXRpb24oKTsKKwkJCQkJCQkJCQkgfQorCQkJCQkJCQkJIH0pOworCQkJCQkJCX0KKwkJCQkJCQlicmVhazsKKwkJCQkJCX0KKwkJCQkJfQorCQkJCX0KKwkJCQllbHNlIHsKKwkJCQkJc3VwZXIubm90aWZ5Q2hhbmdlZChub3RpZmljYXRpb24pOworCQkJCX0KKwkJCX0KKworCQkJQE92ZXJyaWRlCisJCQlwcm90ZWN0ZWQgdm9pZCBzZXRUYXJnZXQoUmVzb3VyY2UgdGFyZ2V0KSB7CisJCQkJYmFzaWNTZXRUYXJnZXQodGFyZ2V0KTsKKwkJCX0KKworCQkJQE92ZXJyaWRlCisJCQlwcm90ZWN0ZWQgdm9pZCB1bnNldFRhcmdldChSZXNvdXJjZSB0YXJnZXQpIHsKKwkJCQliYXNpY1Vuc2V0VGFyZ2V0KHRhcmdldCk7CisJCQl9CisJCX07CisKKwkvKioKKwkgKiBUaGlzIGxpc3RlbnMgZm9yIHdvcmtzcGFjZSBjaGFuZ2VzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBJUmVzb3VyY2VDaGFuZ2VMaXN0ZW5lciByZXNvdXJjZUNoYW5nZUxpc3RlbmVyID0KKwkJbmV3IElSZXNvdXJjZUNoYW5nZUxpc3RlbmVyKCkgeworCQkJcHVibGljIHZvaWQgcmVzb3VyY2VDaGFuZ2VkKElSZXNvdXJjZUNoYW5nZUV2ZW50IGV2ZW50KSB7CisJCQkJSVJlc291cmNlRGVsdGEgZGVsdGEgPSBldmVudC5nZXREZWx0YSgpOworCQkJCXRyeSB7CisJCQkJCWNsYXNzIFJlc291cmNlRGVsdGFWaXNpdG9yIGltcGxlbWVudHMgSVJlc291cmNlRGVsdGFWaXNpdG9yIHsKKwkJCQkJCXByb3RlY3RlZCBSZXNvdXJjZVNldCByZXNvdXJjZVNldCA9IGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKTsKKwkJCQkJCXByb3RlY3RlZCBDb2xsZWN0aW9uPFJlc291cmNlPiBjaGFuZ2VkUmVzb3VyY2VzID0gbmV3IEFycmF5TGlzdDxSZXNvdXJjZT4oKTsKKwkJCQkJCXByb3RlY3RlZCBDb2xsZWN0aW9uPFJlc291cmNlPiByZW1vdmVkUmVzb3VyY2VzID0gbmV3IEFycmF5TGlzdDxSZXNvdXJjZT4oKTsKKworCQkJCQkJcHVibGljIGJvb2xlYW4gdmlzaXQoSVJlc291cmNlRGVsdGEgZGVsdGEpIHsKKwkJCQkJCQlpZiAoZGVsdGEuZ2V0UmVzb3VyY2UoKS5nZXRUeXBlKCkgPT0gSVJlc291cmNlLkZJTEUpIHsKKwkJCQkJCQkJaWYgKGRlbHRhLmdldEtpbmQoKSA9PSBJUmVzb3VyY2VEZWx0YS5SRU1PVkVEIHx8CisJCQkJCQkJCSAgICBkZWx0YS5nZXRLaW5kKCkgPT0gSVJlc291cmNlRGVsdGEuQ0hBTkdFRCAmJiBkZWx0YS5nZXRGbGFncygpICE9IElSZXNvdXJjZURlbHRhLk1BUktFUlMpIHsKKwkJCQkJCQkJCVJlc291cmNlIHJlc291cmNlID0gcmVzb3VyY2VTZXQuZ2V0UmVzb3VyY2UoVVJJLmNyZWF0ZVBsYXRmb3JtUmVzb3VyY2VVUkkoZGVsdGEuZ2V0RnVsbFBhdGgoKS50b1N0cmluZygpLCB0cnVlKSwgZmFsc2UpOworCQkJCQkJCQkJaWYgKHJlc291cmNlICE9IG51bGwpIHsKKwkJCQkJCQkJCQlpZiAoZGVsdGEuZ2V0S2luZCgpID09IElSZXNvdXJjZURlbHRhLlJFTU9WRUQpIHsKKwkJCQkJCQkJCQkJcmVtb3ZlZFJlc291cmNlcy5hZGQocmVzb3VyY2UpOworCQkJCQkJCQkJCX0KKwkJCQkJCQkJCQllbHNlIGlmICghc2F2ZWRSZXNvdXJjZXMucmVtb3ZlKHJlc291cmNlKSkgeworCQkJCQkJCQkJCQljaGFuZ2VkUmVzb3VyY2VzLmFkZChyZXNvdXJjZSk7CisJCQkJCQkJCQkJfQorCQkJCQkJCQkJfQorCQkJCQkJCQl9CisJCQkJCQkJfQorCisJCQkJCQkJcmV0dXJuIHRydWU7CisJCQkJCQl9CisKKwkJCQkJCXB1YmxpYyBDb2xsZWN0aW9uPFJlc291cmNlPiBnZXRDaGFuZ2VkUmVzb3VyY2VzKCkgeworCQkJCQkJCXJldHVybiBjaGFuZ2VkUmVzb3VyY2VzOworCQkJCQkJfQorCisJCQkJCQlwdWJsaWMgQ29sbGVjdGlvbjxSZXNvdXJjZT4gZ2V0UmVtb3ZlZFJlc291cmNlcygpIHsKKwkJCQkJCQlyZXR1cm4gcmVtb3ZlZFJlc291cmNlczsKKwkJCQkJCX0KKwkJCQkJfQorCisJCQkJCWZpbmFsIFJlc291cmNlRGVsdGFWaXNpdG9yIHZpc2l0b3IgPSBuZXcgUmVzb3VyY2VEZWx0YVZpc2l0b3IoKTsKKwkJCQkJZGVsdGEuYWNjZXB0KHZpc2l0b3IpOworCisJCQkJCWlmICghdmlzaXRvci5nZXRSZW1vdmVkUmVzb3VyY2VzKCkuaXNFbXB0eSgpKSB7CisJCQkJCQlnZXRTaXRlKCkuZ2V0U2hlbGwoKS5nZXREaXNwbGF5KCkuYXN5bmNFeGVjCisJCQkJCQkJKG5ldyBSdW5uYWJsZSgpIHsKKwkJCQkJCQkJIHB1YmxpYyB2b2lkIHJ1bigpIHsKKwkJCQkJCQkJCSByZW1vdmVkUmVzb3VyY2VzLmFkZEFsbCh2aXNpdG9yLmdldFJlbW92ZWRSZXNvdXJjZXMoKSk7CisJCQkJCQkJCQkgaWYgKCFpc0RpcnR5KCkpIHsKKwkJCQkJCQkJCQkgZ2V0U2l0ZSgpLmdldFBhZ2UoKS5jbG9zZUVkaXRvcihTY2VuYXJpb0VkaXRvci50aGlzLCBmYWxzZSk7CisJCQkJCQkJCQkgfQorCQkJCQkJCQkgfQorCQkJCQkJCSB9KTsKKwkJCQkJfQorCisJCQkJCWlmICghdmlzaXRvci5nZXRDaGFuZ2VkUmVzb3VyY2VzKCkuaXNFbXB0eSgpKSB7CisJCQkJCQlnZXRTaXRlKCkuZ2V0U2hlbGwoKS5nZXREaXNwbGF5KCkuYXN5bmNFeGVjCisJCQkJCQkJKG5ldyBSdW5uYWJsZSgpIHsKKwkJCQkJCQkJIHB1YmxpYyB2b2lkIHJ1bigpIHsKKwkJCQkJCQkJCSBjaGFuZ2VkUmVzb3VyY2VzLmFkZEFsbCh2aXNpdG9yLmdldENoYW5nZWRSZXNvdXJjZXMoKSk7CisJCQkJCQkJCQkgaWYgKGdldFNpdGUoKS5nZXRQYWdlKCkuZ2V0QWN0aXZlRWRpdG9yKCkgPT0gU2NlbmFyaW9FZGl0b3IudGhpcykgeworCQkJCQkJCQkJCSBoYW5kbGVBY3RpdmF0ZSgpOworCQkJCQkJCQkJIH0KKwkJCQkJCQkJIH0KKwkJCQkJCQkgfSk7CisJCQkJCX0KKwkJCQl9CisJCQkJY2F0Y2ggKENvcmVFeGNlcHRpb24gZXhjZXB0aW9uKSB7CisJCQkJCUNvcmVFZGl0b3JQbHVnaW4uSU5TVEFOQ0UubG9nKGV4Y2VwdGlvbik7CisJCQkJfQorCQkJfQorCQl9OworCisJLyoqCisJICogSGFuZGxlcyBhY3RpdmF0aW9uIG9mIHRoZSBlZGl0b3Igb3IgaXQncyBhc3NvY2lhdGVkIHZpZXdzLiA8IS0tCisJICogYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBoYW5kbGVBY3RpdmF0ZSgpIHsKKwkJLy8gUmVjb21wdXRlIHRoZSByZWFkIG9ubHkgc3RhdGUuCisJCS8vCisJCWlmIChlZGl0aW5nRG9tYWluLmdldFJlc291cmNlVG9SZWFkT25seU1hcCgpICE9IG51bGwpIHsKKwkJICBlZGl0aW5nRG9tYWluLmdldFJlc291cmNlVG9SZWFkT25seU1hcCgpLmNsZWFyKCk7CisKKwkJICAvLyBSZWZyZXNoIGFueSBhY3Rpb25zIHRoYXQgbWF5IGJlY29tZSBlbmFibGVkIG9yIGRpc2FibGVkLgorCQkgIC8vCisJCSAgc2V0U2VsZWN0aW9uKGdldFNlbGVjdGlvbigpKTsKKwkJfQorCisJCWlmICghcmVtb3ZlZFJlc291cmNlcy5pc0VtcHR5KCkpIHsKKwkJCWlmIChoYW5kbGVEaXJ0eUNvbmZsaWN0KCkpIHsKKwkJCQlnZXRTaXRlKCkuZ2V0UGFnZSgpLmNsb3NlRWRpdG9yKFNjZW5hcmlvRWRpdG9yLnRoaXMsIGZhbHNlKTsKKwkJCX0KKwkJCWVsc2UgeworCQkJCXJlbW92ZWRSZXNvdXJjZXMuY2xlYXIoKTsKKwkJCQljaGFuZ2VkUmVzb3VyY2VzLmNsZWFyKCk7CisJCQkJc2F2ZWRSZXNvdXJjZXMuY2xlYXIoKTsKKwkJCX0KKwkJfQorCQllbHNlIGlmICghY2hhbmdlZFJlc291cmNlcy5pc0VtcHR5KCkpIHsKKwkJCWNoYW5nZWRSZXNvdXJjZXMucmVtb3ZlQWxsKHNhdmVkUmVzb3VyY2VzKTsKKwkJCWhhbmRsZUNoYW5nZWRSZXNvdXJjZXMoKTsKKwkJCWNoYW5nZWRSZXNvdXJjZXMuY2xlYXIoKTsKKwkJCXNhdmVkUmVzb3VyY2VzLmNsZWFyKCk7CisJCX0KKwl9CisKKwkvKioKKwkgKiBIYW5kbGVzIHdoYXQgdG8gZG8gd2l0aCBjaGFuZ2VkIHJlc291cmNlcyBvbiBhY3RpdmF0aW9uLiA8IS0tCisJICogYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBoYW5kbGVDaGFuZ2VkUmVzb3VyY2VzKCkgeworCQlpZiAoIWNoYW5nZWRSZXNvdXJjZXMuaXNFbXB0eSgpICYmICghaXNEaXJ0eSgpIHx8IGhhbmRsZURpcnR5Q29uZmxpY3QoKSkpIHsKKwkJCWlmIChpc0RpcnR5KCkpIHsKKwkJCQljaGFuZ2VkUmVzb3VyY2VzLmFkZEFsbChlZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkuZ2V0UmVzb3VyY2VzKCkpOworCQkJfQorCQkJZWRpdGluZ0RvbWFpbi5nZXRDb21tYW5kU3RhY2soKS5mbHVzaCgpOworCisJCQl1cGRhdGVQcm9ibGVtSW5kaWNhdGlvbiA9IGZhbHNlOworCQkJZm9yIChSZXNvdXJjZSByZXNvdXJjZSA6IGNoYW5nZWRSZXNvdXJjZXMpIHsKKwkJCQlpZiAocmVzb3VyY2UuaXNMb2FkZWQoKSkgeworCQkJCQlyZXNvdXJjZS51bmxvYWQoKTsKKwkJCQkJdHJ5IHsKKwkJCQkJCXJlc291cmNlLmxvYWQoQ29sbGVjdGlvbnMuRU1QVFlfTUFQKTsKKwkJCQkJfQorCQkJCQljYXRjaCAoSU9FeGNlcHRpb24gZXhjZXB0aW9uKSB7CisJCQkJCQlpZiAoIXJlc291cmNlVG9EaWFnbm9zdGljTWFwLmNvbnRhaW5zS2V5KHJlc291cmNlKSkgeworCQkJCQkJCXJlc291cmNlVG9EaWFnbm9zdGljTWFwLnB1dChyZXNvdXJjZSwgYW5hbHl6ZVJlc291cmNlUHJvYmxlbXMocmVzb3VyY2UsIGV4Y2VwdGlvbikpOworCQkJCQkJfQorCQkJCQl9CisJCQkJfQorCQkJfQorCisJCQlpZiAoQWRhcHRlckZhY3RvcnlFZGl0aW5nRG9tYWluLmlzU3RhbGUoZWRpdG9yU2VsZWN0aW9uKSkgeworCQkJCXNldFNlbGVjdGlvbihTdHJ1Y3R1cmVkU2VsZWN0aW9uLkVNUFRZKTsKKwkJCX0KKworCQkJdXBkYXRlUHJvYmxlbUluZGljYXRpb24gPSB0cnVlOworCQkJdXBkYXRlUHJvYmxlbUluZGljYXRpb24oKTsKKwkJfQorCX0KKyAgCisJLyoqCisJICogVXBkYXRlcyB0aGUgcHJvYmxlbXMgaW5kaWNhdGlvbiB3aXRoIHRoZSBpbmZvcm1hdGlvbiBkZXNjcmliZWQgaW4gdGhlIHNwZWNpZmllZCBkaWFnbm9zdGljLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCB1cGRhdGVQcm9ibGVtSW5kaWNhdGlvbigpIHsKKwkJaWYgKHVwZGF0ZVByb2JsZW1JbmRpY2F0aW9uKSB7CisJCQlCYXNpY0RpYWdub3N0aWMgZGlhZ25vc3RpYyA9CisJCQkJbmV3IEJhc2ljRGlhZ25vc3RpYworCQkJCQkoRGlhZ25vc3RpYy5PSywKKwkJCQkJICJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZWRpdG9yIiwgLy8kTk9OLU5MUy0xJAorCQkJCQkgMCwKKwkJCQkJIG51bGwsCisJCQkJCSBuZXcgT2JqZWN0IFtdIHsgZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpIH0pOworCQkJZm9yIChEaWFnbm9zdGljIGNoaWxkRGlhZ25vc3RpYyA6IHJlc291cmNlVG9EaWFnbm9zdGljTWFwLnZhbHVlcygpKSB7CisJCQkJaWYgKGNoaWxkRGlhZ25vc3RpYy5nZXRTZXZlcml0eSgpICE9IERpYWdub3N0aWMuT0spIHsKKwkJCQkJZGlhZ25vc3RpYy5hZGQoY2hpbGREaWFnbm9zdGljKTsKKwkJCQl9CisJCQl9CisKKwkJCWludCBsYXN0RWRpdG9yUGFnZSA9IGdldFBhZ2VDb3VudCgpIC0gMTsKKwkJCWlmIChsYXN0RWRpdG9yUGFnZSA+PSAwICYmIGdldEVkaXRvcihsYXN0RWRpdG9yUGFnZSkgaW5zdGFuY2VvZiBQcm9ibGVtRWRpdG9yUGFydCkgeworCQkJCSgoUHJvYmxlbUVkaXRvclBhcnQpZ2V0RWRpdG9yKGxhc3RFZGl0b3JQYWdlKSkuc2V0RGlhZ25vc3RpYyhkaWFnbm9zdGljKTsKKwkJCQlpZiAoZGlhZ25vc3RpYy5nZXRTZXZlcml0eSgpICE9IERpYWdub3N0aWMuT0spIHsKKwkJCQkJc2V0QWN0aXZlUGFnZShsYXN0RWRpdG9yUGFnZSk7CisJCQkJfQorCQkJfQorCQkJZWxzZSBpZiAoZGlhZ25vc3RpYy5nZXRTZXZlcml0eSgpICE9IERpYWdub3N0aWMuT0spIHsKKwkJCQlQcm9ibGVtRWRpdG9yUGFydCBwcm9ibGVtRWRpdG9yUGFydCA9IG5ldyBQcm9ibGVtRWRpdG9yUGFydCgpOworCQkJCXByb2JsZW1FZGl0b3JQYXJ0LnNldERpYWdub3N0aWMoZGlhZ25vc3RpYyk7CisJCQkJcHJvYmxlbUVkaXRvclBhcnQuc2V0TWFya2VySGVscGVyKG1hcmtlckhlbHBlcik7CisJCQkJdHJ5IHsKKwkJCQkJYWRkUGFnZSgrK2xhc3RFZGl0b3JQYWdlLCBwcm9ibGVtRWRpdG9yUGFydCwgZ2V0RWRpdG9ySW5wdXQoKSk7CisJCQkJCXNldFBhZ2VUZXh0KGxhc3RFZGl0b3JQYWdlLCBwcm9ibGVtRWRpdG9yUGFydC5nZXRQYXJ0TmFtZSgpKTsKKwkJCQkJc2V0QWN0aXZlUGFnZShsYXN0RWRpdG9yUGFnZSk7CisJCQkJCXNob3dUYWJzKCk7CisJCQkJfQorCQkJCWNhdGNoIChQYXJ0SW5pdEV4Y2VwdGlvbiBleGNlcHRpb24pIHsKKwkJCQkJQ29yZUVkaXRvclBsdWdpbi5JTlNUQU5DRS5sb2coZXhjZXB0aW9uKTsKKwkJCQl9CisJCQl9CisKKwkJCWlmIChtYXJrZXJIZWxwZXIuaGFzTWFya2VycyhlZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkpKSB7CisJCQkJbWFya2VySGVscGVyLmRlbGV0ZU1hcmtlcnMoZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpKTsKKwkJCQlpZiAoZGlhZ25vc3RpYy5nZXRTZXZlcml0eSgpICE9IERpYWdub3N0aWMuT0spIHsKKwkJCQkJdHJ5IHsKKwkJCQkJCW1hcmtlckhlbHBlci5jcmVhdGVNYXJrZXJzKGRpYWdub3N0aWMpOworCQkJCQl9CisJCQkJCWNhdGNoIChDb3JlRXhjZXB0aW9uIGV4Y2VwdGlvbikgeworCQkJCQkJQ29yZUVkaXRvclBsdWdpbi5JTlNUQU5DRS5sb2coZXhjZXB0aW9uKTsKKwkJCQkJfQorCQkJCX0KKwkJCX0KKwkJfQorCX0KKworCS8qKgorCSAqIFNob3dzIGEgZGlhbG9nIHRoYXQgYXNrcyBpZiBjb25mbGljdGluZyBjaGFuZ2VzIHNob3VsZCBiZSBkaXNjYXJkZWQuIDwhLS0KKwkgKiBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogCisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBib29sZWFuIGhhbmRsZURpcnR5Q29uZmxpY3QoKSB7CisJCXJldHVybgorCQkJTWVzc2FnZURpYWxvZy5vcGVuUXVlc3Rpb24KKwkJCQkoZ2V0U2l0ZSgpLmdldFNoZWxsKCksCisJCQkJIGdldFN0cmluZygiX1VJX0ZpbGVDb25mbGljdF9sYWJlbCIpLCAvLyROT04tTkxTLTEkCisJCQkJIGdldFN0cmluZygiX1dBUk5fRmlsZUNvbmZsaWN0IikpOyAvLyROT04tTkxTLTEkCisJfQorCisJLyoqCisJICogVGhpcyBjcmVhdGVzIGEgbW9kZWwgZWRpdG9yLiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYworCSAqIC0tPgorCSAqIAorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgU2NlbmFyaW9FZGl0b3IoKSB7CisJCXN1cGVyKCk7CisJCWluaXRpYWxpemVFZGl0aW5nRG9tYWluKCk7CisJfQorCQorCS8qKgorCSAqIFRoaXMgc2V0cyB1cCB0aGUgZWRpdGluZyBkb21haW4gZm9yIHRoZSBtb2RlbCBlZGl0b3IuIDwhLS0gYmVnaW4tdXNlci1kb2MKKwkgKiAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogCisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBpbml0aWFsaXplRWRpdGluZ0RvbWFpbigpIHsKKwkJaW5pdGlhbGl6ZUVkaXRpbmdEb21haW5HZW4oKTsKKwkJZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpLmdldFJlc291cmNlRmFjdG9yeVJlZ2lzdHJ5KCkKKwkJCQkuZ2V0RXh0ZW5zaW9uVG9GYWN0b3J5TWFwKCkucHV0KCIqIiwKKwkJCQkJCVNURU1YTUlSZXNvdXJjZUZhY3RvcnlJbXBsLklOU1RBTkNFKTsKKworCQllZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkuZ2V0UmVzb3VyY2VGYWN0b3J5UmVnaXN0cnkoKQorCQkJCS5nZXRQcm90b2NvbFRvRmFjdG9yeU1hcCgpLnB1dCgicGxhdGZvcm0iLAorCQkJCQkJU1RFTVhNSVJlc291cmNlRmFjdG9yeUltcGwuSU5TVEFOQ0UpOworCX0gLy8gaW5pdGlhbGl6ZUVkaXRpbmdEb21haW4KKworCS8qKgorCSAqIFRoaXMgc2V0cyB1cCB0aGUgZWRpdGluZyBkb21haW4gZm9yIHRoZSBtb2RlbCBlZGl0b3IuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgaW5pdGlhbGl6ZUVkaXRpbmdEb21haW5HZW4oKSB7CisJCS8vIENyZWF0ZSBhbiBhZGFwdGVyIGZhY3RvcnkgdGhhdCB5aWVsZHMgaXRlbSBwcm92aWRlcnMuCisJCS8vCisJCWFkYXB0ZXJGYWN0b3J5ID0gbmV3IENvbXBvc2VkQWRhcHRlckZhY3RvcnkoQ29tcG9zZWRBZGFwdGVyRmFjdG9yeS5EZXNjcmlwdG9yLlJlZ2lzdHJ5LklOU1RBTkNFKTsKKworCQlhZGFwdGVyRmFjdG9yeS5hZGRBZGFwdGVyRmFjdG9yeShuZXcgUmVzb3VyY2VJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSgpKTsKKwkJYWRhcHRlckZhY3RvcnkuYWRkQWRhcHRlckZhY3RvcnkobmV3IENvbW1vbkl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5KCkpOworCQlhZGFwdGVyRmFjdG9yeS5hZGRBZGFwdGVyRmFjdG9yeShuZXcgRXhwZXJpbWVudEl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5KCkpOworCQlhZGFwdGVyRmFjdG9yeS5hZGRBZGFwdGVyRmFjdG9yeShuZXcgR3JhcGhJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSgpKTsKKwkJYWRhcHRlckZhY3RvcnkuYWRkQWRhcHRlckZhY3RvcnkobmV3IE1vZGVsSXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkoKSk7CisJCWFkYXB0ZXJGYWN0b3J5LmFkZEFkYXB0ZXJGYWN0b3J5KG5ldyBNb2RpZmllckl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5KCkpOworCQlhZGFwdGVyRmFjdG9yeS5hZGRBZGFwdGVyRmFjdG9yeShuZXcgUHJlZGljYXRlSXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkoKSk7CisJCWFkYXB0ZXJGYWN0b3J5LmFkZEFkYXB0ZXJGYWN0b3J5KG5ldyBTY2VuYXJpb0l0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5KCkpOworCQlhZGFwdGVyRmFjdG9yeS5hZGRBZGFwdGVyRmFjdG9yeShuZXcgU2VxdWVuY2VySXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkoKSk7CisJCWFkYXB0ZXJGYWN0b3J5LmFkZEFkYXB0ZXJGYWN0b3J5KG5ldyBUcmlnZ2VySXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkoKSk7CisJCWFkYXB0ZXJGYWN0b3J5LmFkZEFkYXB0ZXJGYWN0b3J5KG5ldyBTb2x2ZXJJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSgpKTsKKwkJYWRhcHRlckZhY3RvcnkuYWRkQWRhcHRlckZhY3RvcnkobmV3IExvZ2dlckl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5KCkpOworCQlhZGFwdGVyRmFjdG9yeS5hZGRBZGFwdGVyRmFjdG9yeShuZXcgRWNvcmVJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSgpKTsKKwkJYWRhcHRlckZhY3RvcnkuYWRkQWRhcHRlckZhY3RvcnkobmV3IFJlZmxlY3RpdmVJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSgpKTsKKworCQkvLyBDcmVhdGUgdGhlIGNvbW1hbmQgc3RhY2sgdGhhdCB3aWxsIG5vdGlmeSB0aGlzIGVkaXRvciBhcyBjb21tYW5kcyBhcmUgZXhlY3V0ZWQuCisJCS8vCisJCUJhc2ljQ29tbWFuZFN0YWNrIGNvbW1hbmRTdGFjayA9IG5ldyBCYXNpY0NvbW1hbmRTdGFjaygpOworCisJCS8vIEFkZCBhIGxpc3RlbmVyIHRvIHNldCB0aGUgbW9zdCByZWNlbnQgY29tbWFuZCdzIGFmZmVjdGVkIG9iamVjdHMgdG8gYmUgdGhlIHNlbGVjdGlvbiBvZiB0aGUgdmlld2VyIHdpdGggZm9jdXMuCisJCS8vCisJCWNvbW1hbmRTdGFjay5hZGRDb21tYW5kU3RhY2tMaXN0ZW5lcgorCQkJKG5ldyBDb21tYW5kU3RhY2tMaXN0ZW5lcigpIHsKKwkJCQkgcHVibGljIHZvaWQgY29tbWFuZFN0YWNrQ2hhbmdlZChmaW5hbCBFdmVudE9iamVjdCBldmVudCkgeworCQkJCQkgZ2V0Q29udGFpbmVyKCkuZ2V0RGlzcGxheSgpLmFzeW5jRXhlYworCQkJCQkJIChuZXcgUnVubmFibGUoKSB7CisJCQkJCQkJICBwdWJsaWMgdm9pZCBydW4oKSB7CisJCQkJCQkJCSAgZmlyZVByb3BlcnR5Q2hhbmdlKElFZGl0b3JQYXJ0LlBST1BfRElSVFkpOworCisJCQkJCQkJCSAgLy8gVHJ5IHRvIHNlbGVjdCB0aGUgYWZmZWN0ZWQgb2JqZWN0cy4KKwkJCQkJCQkJICAvLworCQkJCQkJCQkgIENvbW1hbmQgbW9zdFJlY2VudENvbW1hbmQgPSAoKENvbW1hbmRTdGFjaylldmVudC5nZXRTb3VyY2UoKSkuZ2V0TW9zdFJlY2VudENvbW1hbmQoKTsKKwkJCQkJCQkJICBpZiAobW9zdFJlY2VudENvbW1hbmQgIT0gbnVsbCkgeworCQkJCQkJCQkJICBzZXRTZWxlY3Rpb25Ub1ZpZXdlcihtb3N0UmVjZW50Q29tbWFuZC5nZXRBZmZlY3RlZE9iamVjdHMoKSk7CisJCQkJCQkJCSAgfQorCQkJCQkJCQkgIGlmIChwcm9wZXJ0eVNoZWV0UGFnZSAhPSBudWxsICYmICFwcm9wZXJ0eVNoZWV0UGFnZS5nZXRDb250cm9sKCkuaXNEaXNwb3NlZCgpKSB7CisJCQkJCQkJCQkgIHByb3BlcnR5U2hlZXRQYWdlLnJlZnJlc2goKTsKKwkJCQkJCQkJICB9CisJCQkJCQkJICB9CisJCQkJCQkgIH0pOworCQkJCSB9CisJCQkgfSk7CisKKwkJLy8gQ3JlYXRlIHRoZSBlZGl0aW5nIGRvbWFpbiB3aXRoIGEgc3BlY2lhbCBjb21tYW5kIHN0YWNrLgorCQkvLworCQllZGl0aW5nRG9tYWluID0gbmV3IEFkYXB0ZXJGYWN0b3J5RWRpdGluZ0RvbWFpbihhZGFwdGVyRmFjdG9yeSwgY29tbWFuZFN0YWNrLCBuZXcgSGFzaE1hcDxSZXNvdXJjZSwgQm9vbGVhbj4oKSk7CisJfQorCisJLyoqCisJICogVGhpcyBpcyBoZXJlIGZvciB0aGUgbGlzdGVuZXIgdG8gYmUgYWJsZSB0byBjYWxsIGl0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MKKwkgKiAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIGZpcmVQcm9wZXJ0eUNoYW5nZShpbnQgYWN0aW9uKSB7CisJCXN1cGVyLmZpcmVQcm9wZXJ0eUNoYW5nZShhY3Rpb24pOworCX0KKworCS8qKgorCSAqIFRoaXMgc2V0cyB0aGUgc2VsZWN0aW9uIGludG8gd2hpY2hldmVyIHZpZXdlciBpcyBhY3RpdmUuIDwhLS0KKwkgKiBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIHNldFNlbGVjdGlvblRvVmlld2VyKENvbGxlY3Rpb248Pz4gY29sbGVjdGlvbikgeworCQlmaW5hbCBDb2xsZWN0aW9uPD8+IHRoZVNlbGVjdGlvbiA9IGNvbGxlY3Rpb247CisJCS8vIE1ha2Ugc3VyZSBpdCdzIG9rYXkuCisJCS8vCisJCWlmICh0aGVTZWxlY3Rpb24gIT0gbnVsbCAmJiAhdGhlU2VsZWN0aW9uLmlzRW1wdHkoKSkgeworCQkJUnVubmFibGUgcnVubmFibGUgPQorCQkJCW5ldyBSdW5uYWJsZSgpIHsKKwkJCQkJcHVibGljIHZvaWQgcnVuKCkgeworCQkJCQkJLy8gVHJ5IHRvIHNlbGVjdCB0aGUgaXRlbXMgaW4gdGhlIGN1cnJlbnQgY29udGVudCB2aWV3ZXIgb2YgdGhlIGVkaXRvci4KKwkJCQkJCS8vCisJCQkJCQlpZiAoY3VycmVudFZpZXdlciAhPSBudWxsKSB7CisJCQkJCQkJY3VycmVudFZpZXdlci5zZXRTZWxlY3Rpb24obmV3IFN0cnVjdHVyZWRTZWxlY3Rpb24odGhlU2VsZWN0aW9uLnRvQXJyYXkoKSksIHRydWUpOworCQkJCQkJfQorCQkJCQl9CisJCQkJfTsKKwkJCWdldFNpdGUoKS5nZXRTaGVsbCgpLmdldERpc3BsYXkoKS5hc3luY0V4ZWMocnVubmFibGUpOworCQl9CisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIHRoZSBlZGl0aW5nIGRvbWFpbiBhcyByZXF1aXJlZCBieSB0aGUge0BsaW5rIElFZGl0aW5nRG9tYWluUHJvdmlkZXJ9IGludGVyZmFjZS4KKwkgKiBUaGlzIGlzIGltcG9ydGFudCBmb3IgaW1wbGVtZW50aW5nIHRoZSBzdGF0aWMgbWV0aG9kcyBvZiB7QGxpbmsgQWRhcHRlckZhY3RvcnlFZGl0aW5nRG9tYWlufQorCSAqIGFuZCBmb3Igc3VwcG9ydGluZyB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkuYWN0aW9uLkNvbW1hbmRBY3Rpb259LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRWRpdGluZ0RvbWFpbiBnZXRFZGl0aW5nRG9tYWluKCkgeworCQlyZXR1cm4gZWRpdGluZ0RvbWFpbjsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIGNsYXNzIFJldmVyc2VBZGFwdGVyRmFjdG9yeUNvbnRlbnRQcm92aWRlciBleHRlbmRzCisJCQlBZGFwdGVyRmFjdG9yeUNvbnRlbnRQcm92aWRlciB7CisJCXB1YmxpYyBSZXZlcnNlQWRhcHRlckZhY3RvcnlDb250ZW50UHJvdmlkZXIoCisJCQkJQWRhcHRlckZhY3RvcnkgYWRhcHRlckZhY3RvcnkpIHsKKwkJCXN1cGVyKGFkYXB0ZXJGYWN0b3J5KTsKKwkJfQorCisJCXB1YmxpYyBPYmplY3RbXSBnZXRFbGVtZW50cyhPYmplY3Qgb2JqZWN0KSB7CisJCQlPYmplY3QgcGFyZW50ID0gc3VwZXIuZ2V0UGFyZW50KG9iamVjdCk7CisJCQlyZXR1cm4gKHBhcmVudCA9PSBudWxsID8gQ29sbGVjdGlvbnMuRU1QVFlfU0VUIDogQ29sbGVjdGlvbnMKKwkJCQkJLnNpbmdsZXRvbihwYXJlbnQpKS50b0FycmF5KCk7CisJCX0KKworCQlwdWJsaWMgT2JqZWN0W10gZ2V0Q2hpbGRyZW4oT2JqZWN0IG9iamVjdCkgeworCQkJT2JqZWN0IHBhcmVudCA9IHN1cGVyLmdldFBhcmVudChvYmplY3QpOworCQkJcmV0dXJuIChwYXJlbnQgPT0gbnVsbCA/IENvbGxlY3Rpb25zLkVNUFRZX1NFVCA6IENvbGxlY3Rpb25zCisJCQkJCS5zaW5nbGV0b24ocGFyZW50KSkudG9BcnJheSgpOworCQl9CisKKwkJcHVibGljIGJvb2xlYW4gaGFzQ2hpbGRyZW4oT2JqZWN0IG9iamVjdCkgeworCQkJT2JqZWN0IHBhcmVudCA9IHN1cGVyLmdldFBhcmVudChvYmplY3QpOworCQkJcmV0dXJuIHBhcmVudCAhPSBudWxsOworCQl9CisKKwkJcHVibGljIE9iamVjdCBnZXRQYXJlbnQoT2JqZWN0IG9iamVjdCkgeworCQkJcmV0dXJuIG51bGw7CisJCX0KKwl9CisKKwkvKioKKwkgKiBUaGlzIG1ha2VzIHN1cmUgdGhhdCBvbmUgY29udGVudCB2aWV3ZXIsIGVpdGhlciBmb3IgdGhlIGN1cnJlbnQgcGFnZSBvcgorCSAqIHRoZSBvdXRsaW5lIHZpZXcsIGlmIGl0IGhhcyBmb2N1cywgaXMgdGhlIGN1cnJlbnQgb25lLiA8IS0tCisJICogYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRDdXJyZW50Vmlld2VyKFZpZXdlciB2aWV3ZXIpIHsKKwkJLy8gSWYgaXQgaXMgY2hhbmdpbmcuLi4KKwkJLy8KKwkJaWYgKGN1cnJlbnRWaWV3ZXIgIT0gdmlld2VyKSB7CisJCQlpZiAoc2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyID09IG51bGwpIHsKKwkJCQkvLyBDcmVhdGUgdGhlIGxpc3RlbmVyIG9uIGRlbWFuZC4KKwkJCQkvLworCQkJCXNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lciA9CisJCQkJCW5ldyBJU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyKCkgeworCQkJCQkJLy8gVGhpcyBqdXN0IG5vdGlmaWVzIHRob3NlIHRoaW5ncyB0aGF0IGFyZSBhZmZlY3RlZCBieSB0aGUgc2VjdGlvbi4KKwkJCQkJCS8vCisJCQkJCQlwdWJsaWMgdm9pZCBzZWxlY3Rpb25DaGFuZ2VkKFNlbGVjdGlvbkNoYW5nZWRFdmVudCBzZWxlY3Rpb25DaGFuZ2VkRXZlbnQpIHsKKwkJCQkJCQlzZXRTZWxlY3Rpb24oc2VsZWN0aW9uQ2hhbmdlZEV2ZW50LmdldFNlbGVjdGlvbigpKTsKKwkJCQkJCX0KKwkJCQkJfTsKKwkJCX0KKworCQkJLy8gU3RvcCBsaXN0ZW5pbmcgdG8gdGhlIG9sZCBvbmUuCisJCQkvLworCQkJaWYgKGN1cnJlbnRWaWV3ZXIgIT0gbnVsbCkgeworCQkJCWN1cnJlbnRWaWV3ZXIucmVtb3ZlU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyKHNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcik7CisJCQl9CisKKwkJCS8vIFN0YXJ0IGxpc3RlbmluZyB0byB0aGUgbmV3IG9uZS4KKwkJCS8vCisJCQlpZiAodmlld2VyICE9IG51bGwpIHsKKwkJCQl2aWV3ZXIuYWRkU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyKHNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcik7CisJCQl9CisKKwkJCS8vIFJlbWVtYmVyIGl0LgorCQkJLy8KKwkJCWN1cnJlbnRWaWV3ZXIgPSB2aWV3ZXI7CisKKwkJCS8vIFNldCB0aGUgZWRpdG9ycyBzZWxlY3Rpb24gYmFzZWQgb24gdGhlIGN1cnJlbnQgdmlld2VyJ3Mgc2VsZWN0aW9uLgorCQkJLy8KKwkJCXNldFNlbGVjdGlvbihjdXJyZW50Vmlld2VyID09IG51bGwgPyBTdHJ1Y3R1cmVkU2VsZWN0aW9uLkVNUFRZIDogY3VycmVudFZpZXdlci5nZXRTZWxlY3Rpb24oKSk7CisJCX0KKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgdGhlIHZpZXdlciBhcyByZXF1aXJlZCBieSB0aGUge0BsaW5rIElWaWV3ZXJQcm92aWRlcn0gaW50ZXJmYWNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVmlld2VyIGdldFZpZXdlcigpIHsKKwkJcmV0dXJuIGN1cnJlbnRWaWV3ZXI7CisJfQorCisJLyoqCisJICogVGhpcyBjcmVhdGVzIGEgY29udGV4dCBtZW51IGZvciB0aGUgdmlld2VyIGFuZCBhZGRzIGEgbGlzdGVuZXIgYXMgd2VsbAorCSAqIHJlZ2lzdGVyaW5nIHRoZSBtZW51IGZvciBleHRlbnNpb24uIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0KKwkgKiBlbmQtdXNlci1kb2MgLS0+CisJICogCisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBjcmVhdGVDb250ZXh0TWVudUZvcihTdHJ1Y3R1cmVkVmlld2VyIHZpZXdlcikgeworCQlNZW51TWFuYWdlciBjb250ZXh0TWVudSA9IG5ldyBNZW51TWFuYWdlcigiI1BvcFVwIik7IC8vJE5PTi1OTFMtMSQKKwkJY29udGV4dE1lbnUuYWRkKG5ldyBTZXBhcmF0b3IoImFkZGl0aW9ucyIpKTsgLy8kTk9OLU5MUy0xJAorCQljb250ZXh0TWVudS5zZXRSZW1vdmVBbGxXaGVuU2hvd24odHJ1ZSk7CisJCWNvbnRleHRNZW51LmFkZE1lbnVMaXN0ZW5lcih0aGlzKTsKKwkJTWVudSBtZW51ID0gY29udGV4dE1lbnUuY3JlYXRlQ29udGV4dE1lbnUodmlld2VyLmdldENvbnRyb2woKSk7CisJCXZpZXdlci5nZXRDb250cm9sKCkuc2V0TWVudShtZW51KTsKKwkJZ2V0U2l0ZSgpLnJlZ2lzdGVyQ29udGV4dE1lbnUoY29udGV4dE1lbnUsIHZpZXdlcik7CisKKwkJaW50IGRuZE9wZXJhdGlvbnMgPSBETkQuRFJPUF9DT1BZIHwgRE5ELkRST1BfTU9WRSB8IERORC5EUk9QX0xJTks7CisJCVRyYW5zZmVyW10gdHJhbnNmZXJzID0gbmV3IFRyYW5zZmVyW10ge0xvY2FsU2VsZWN0aW9uVHJhbnNmZXIuZ2V0VHJhbnNmZXIoKSwgTG9jYWxUcmFuc2Zlci5nZXRJbnN0YW5jZSgpLAorCQkJCVRleHRUcmFuc2Zlci5nZXRJbnN0YW5jZSgpIH07CisJCXZpZXdlci5hZGREcmFnU3VwcG9ydChkbmRPcGVyYXRpb25zLCB0cmFuc2ZlcnMsIG5ldyBWaWV3ZXJEcmFnQWRhcHRlcigKKwkJCQl2aWV3ZXIpKTsKKwkJdmlld2VyLmFkZERyb3BTdXBwb3J0KGRuZE9wZXJhdGlvbnMsIHRyYW5zZmVycywKKwkJCQluZXcgRWRpdGluZ0RvbWFpblZpZXdlckRyb3BBZGFwdGVyKGVkaXRpbmdEb21haW4sIHZpZXdlcikpOworCX0gLy8gY3JlYXRlQ29udGV4dE1lbnVGb3IKKworCS8qKgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBjcmVhdGVDb250ZXh0TWVudUZvckdlbihTdHJ1Y3R1cmVkVmlld2VyIHZpZXdlcikgeworCQlNZW51TWFuYWdlciBjb250ZXh0TWVudSA9IG5ldyBNZW51TWFuYWdlcigiI1BvcFVwIik7IC8vJE5PTi1OTFMtMSQKKwkJY29udGV4dE1lbnUuYWRkKG5ldyBTZXBhcmF0b3IoImFkZGl0aW9ucyIpKTsgLy8kTk9OLU5MUy0xJAorCQljb250ZXh0TWVudS5zZXRSZW1vdmVBbGxXaGVuU2hvd24odHJ1ZSk7CisJCWNvbnRleHRNZW51LmFkZE1lbnVMaXN0ZW5lcih0aGlzKTsKKwkJTWVudSBtZW51PSBjb250ZXh0TWVudS5jcmVhdGVDb250ZXh0TWVudSh2aWV3ZXIuZ2V0Q29udHJvbCgpKTsKKwkJdmlld2VyLmdldENvbnRyb2woKS5zZXRNZW51KG1lbnUpOworCQlnZXRTaXRlKCkucmVnaXN0ZXJDb250ZXh0TWVudShjb250ZXh0TWVudSwgbmV3IFVud3JhcHBpbmdTZWxlY3Rpb25Qcm92aWRlcih2aWV3ZXIpKTsKKworCQlpbnQgZG5kT3BlcmF0aW9ucyA9IERORC5EUk9QX0NPUFkgfCBETkQuRFJPUF9NT1ZFIHwgRE5ELkRST1BfTElOSzsKKwkJVHJhbnNmZXJbXSB0cmFuc2ZlcnMgPSBuZXcgVHJhbnNmZXJbXSB7IExvY2FsVHJhbnNmZXIuZ2V0SW5zdGFuY2UoKSB9OworCQl2aWV3ZXIuYWRkRHJhZ1N1cHBvcnQoZG5kT3BlcmF0aW9ucywgdHJhbnNmZXJzLCBuZXcgVmlld2VyRHJhZ0FkYXB0ZXIodmlld2VyKSk7CisJCXZpZXdlci5hZGREcm9wU3VwcG9ydChkbmRPcGVyYXRpb25zLCB0cmFuc2ZlcnMsIG5ldyBFZGl0aW5nRG9tYWluVmlld2VyRHJvcEFkYXB0ZXIoZWRpdGluZ0RvbWFpbiwgdmlld2VyKSk7CisJfQorCQorCS8qKgorCSAqIFRoaXMgaXMgdGhlIG1ldGhvZCBjYWxsZWQgdG8gbG9hZCBhIHJlc291cmNlIGludG8gdGhlIGVkaXRpbmcgZG9tYWluJ3MgcmVzb3VyY2Ugc2V0IGJhc2VkIG9uIHRoZSBlZGl0b3IncyBpbnB1dC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tCisJICogZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBjcmVhdGVNb2RlbCgpIHsKKwkJVVJJIHJlc291cmNlVVJJID0gRWRpdFVJVXRpbC5nZXRVUkkoZ2V0RWRpdG9ySW5wdXQoKSk7CisJCUV4Y2VwdGlvbiBleGNlcHRpb24gPSBudWxsOworCQlSZXNvdXJjZSByZXNvdXJjZSA9IG51bGw7CisJCXRyeSB7CisJCQkvLyBMb2FkIHRoZSByZXNvdXJjZSB0aHJvdWdoIHRoZSBlZGl0aW5nIGRvbWFpbi4KKwkJCS8vCisJCQlyZXNvdXJjZSA9IGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKS5nZXRSZXNvdXJjZShyZXNvdXJjZVVSSSwgdHJ1ZSk7CisJCX0KKwkJY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CisJCQlleGNlcHRpb24gPSBlOworCQkJcmVzb3VyY2UgPSBlZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkuZ2V0UmVzb3VyY2UocmVzb3VyY2VVUkksIGZhbHNlKTsKKwkJfQorCisJCURpYWdub3N0aWMgZGlhZ25vc3RpYyA9IGFuYWx5emVSZXNvdXJjZVByb2JsZW1zKHJlc291cmNlLCBleGNlcHRpb24pOworCQlpZiAoZGlhZ25vc3RpYy5nZXRTZXZlcml0eSgpICE9IERpYWdub3N0aWMuT0spIHsKKwkJCXJlc291cmNlVG9EaWFnbm9zdGljTWFwLnB1dChyZXNvdXJjZSwgIGFuYWx5emVSZXNvdXJjZVByb2JsZW1zKHJlc291cmNlLCBleGNlcHRpb24pKTsKKwkJfQorCQllZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkuZUFkYXB0ZXJzKCkuYWRkKHByb2JsZW1JbmRpY2F0aW9uQWRhcHRlcik7CisJfQorCisJLyoqCisJICogUmV0dXJucyBhIGRpYWdub3N0aWMgZGVzY3JpYmluZyB0aGUgZXJyb3JzIGFuZCB3YXJuaW5ncyBsaXN0ZWQgaW4gdGhlIHJlc291cmNlCisJICogYW5kIHRoZSBzcGVjaWZpZWQgZXhjZXB0aW9uIChpZiBhbnkpLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBEaWFnbm9zdGljIGFuYWx5emVSZXNvdXJjZVByb2JsZW1zKFJlc291cmNlIHJlc291cmNlLCBFeGNlcHRpb24gZXhjZXB0aW9uKSB7CisJCWlmICghcmVzb3VyY2UuZ2V0RXJyb3JzKCkuaXNFbXB0eSgpIHx8ICFyZXNvdXJjZS5nZXRXYXJuaW5ncygpLmlzRW1wdHkoKSkgeworCQkJQmFzaWNEaWFnbm9zdGljIGJhc2ljRGlhZ25vc3RpYyA9CisJCQkJbmV3IEJhc2ljRGlhZ25vc3RpYworCQkJCQkoRGlhZ25vc3RpYy5FUlJPUiwKKwkJCQkJICJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZWRpdG9yIiwgLy8kTk9OLU5MUy0xJAorCQkJCQkgMCwKKwkJCQkJIGdldFN0cmluZygiX1VJX0NyZWF0ZU1vZGVsRXJyb3JfbWVzc2FnZSIsIHJlc291cmNlLmdldFVSSSgpKSwgLy8kTk9OLU5MUy0xJAorCQkJCQkgbmV3IE9iamVjdCBbXSB7IGV4Y2VwdGlvbiA9PSBudWxsID8gKE9iamVjdClyZXNvdXJjZSA6IGV4Y2VwdGlvbiB9KTsKKwkJCWJhc2ljRGlhZ25vc3RpYy5tZXJnZShFY29yZVV0aWwuY29tcHV0ZURpYWdub3N0aWMocmVzb3VyY2UsIHRydWUpKTsKKwkJCXJldHVybiBiYXNpY0RpYWdub3N0aWM7CisJCX0KKwkJZWxzZSBpZiAoZXhjZXB0aW9uICE9IG51bGwpIHsKKwkJCXJldHVybgorCQkJCW5ldyBCYXNpY0RpYWdub3N0aWMKKwkJCQkJKERpYWdub3N0aWMuRVJST1IsCisJCQkJCSAib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmVkaXRvciIsIC8vJE5PTi1OTFMtMSQKKwkJCQkJIDAsCisJCQkJCSBnZXRTdHJpbmcoIl9VSV9DcmVhdGVNb2RlbEVycm9yX21lc3NhZ2UiLCByZXNvdXJjZS5nZXRVUkkoKSksIC8vJE5PTi1OTFMtMSQKKwkJCQkJIG5ldyBPYmplY3RbXSB7IGV4Y2VwdGlvbiB9KTsKKwkJfQorCQllbHNlIHsKKwkJCXJldHVybiBEaWFnbm9zdGljLk9LX0lOU1RBTkNFOworCQl9CisJfQorCisKKworCS8qKgorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJcHVibGljIHZvaWQgY3JlYXRlUGFnZXMoKSB7CisKKwkJLy8gQ3JlYXRlcyB0aGUgbW9kZWwgZnJvbSB0aGUgZWRpdG9yIGlucHV0CisJCS8vCisJCWNyZWF0ZU1vZGVsKCk7CisKKwkJLy8gT25seSBjcmVhdGVzIHRoZSBvdGhlciBwYWdlcyBpZiB0aGVyZSBpcyBzb21ldGhpbmcgdGhhdCBjYW4gYmUgZWRpdGVkCisJCS8vCisJCWlmICghZ2V0RWRpdGluZ0RvbWFpbigpLmdldFJlc291cmNlU2V0KCkuZ2V0UmVzb3VyY2VzKCkuaXNFbXB0eSgpKSB7CisJCQkvLyBDcmVhdGUgYSBwYWdlIGZvciB0aGUgc2VsZWN0aW9uIHRyZWUgdmlldy4KKwkJCS8vCisJCQlUcmVlIHRyZWUgPSBuZXcgVHJlZShnZXRDb250YWluZXIoKSwgU1dULk1VTFRJKTsKKwkJCXNlbGVjdGlvblZpZXdlciA9IG5ldyBUcmVlVmlld2VyKHRyZWUpOworCQkJc2V0Q3VycmVudFZpZXdlcihzZWxlY3Rpb25WaWV3ZXIpOworCisJCQlzZWxlY3Rpb25WaWV3ZXIuc2V0Q29udGVudFByb3ZpZGVyKG5ldyBBZGFwdGVyRmFjdG9yeUNvbnRlbnRQcm92aWRlcihhZGFwdGVyRmFjdG9yeSkpOworCQkJc2VsZWN0aW9uVmlld2VyLnNldExhYmVsUHJvdmlkZXIobmV3IEFkYXB0ZXJGYWN0b3J5TGFiZWxQcm92aWRlcihhZGFwdGVyRmFjdG9yeSkpOworLy8JCQlzZWxlY3Rpb25WaWV3ZXIuc2V0SW5wdXQoZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpKTsKKwkJCXNlbGVjdGlvblZpZXdlci5zZXRJbnB1dChlZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkuZ2V0UmVzb3VyY2VzKCkuZ2V0KDApKTsKKwkJCXNlbGVjdGlvblZpZXdlci5zZXRTZWxlY3Rpb24obmV3IFN0cnVjdHVyZWRTZWxlY3Rpb24oZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpLmdldFJlc291cmNlcygpLmdldCgwKSksIHRydWUpOworCisJCQluZXcgQWRhcHRlckZhY3RvcnlUcmVlRWRpdG9yKHNlbGVjdGlvblZpZXdlci5nZXRUcmVlKCksIGFkYXB0ZXJGYWN0b3J5KTsKKworCQkJY3JlYXRlQ29udGV4dE1lbnVGb3Ioc2VsZWN0aW9uVmlld2VyKTsKKwkJCWludCBwYWdlSW5kZXggPSBhZGRQYWdlKHRyZWUpOworCQkJc2V0UGFnZVRleHQocGFnZUluZGV4LCBnZXRTdHJpbmcoIl9VSV9TZWxlY3Rpb25QYWdlX2xhYmVsIikpOyAvLyROT04tTkxTLTEkCisKKwkJCWdldFNpdGUoKS5nZXRTaGVsbCgpLmdldERpc3BsYXkoKS5hc3luY0V4ZWMKKwkJCQkobmV3IFJ1bm5hYmxlKCkgeworCQkJCQkgcHVibGljIHZvaWQgcnVuKCkgeworCQkJCQkJIHNldEFjdGl2ZVBhZ2UoMCk7CisJCQkJCSB9CisJCQkJIH0pOworCQl9CisKKwkJLy8gRW5zdXJlcyB0aGF0IHRoaXMgZWRpdG9yIHdpbGwgb25seSBkaXNwbGF5IHRoZSBwYWdlJ3MgdGFiCisJCS8vIGFyZWEgaWYgdGhlcmUgYXJlIG1vcmUgdGhhbiBvbmUgcGFnZQorCQkvLworCQlnZXRDb250YWluZXIoKS5hZGRDb250cm9sTGlzdGVuZXIKKwkJCShuZXcgQ29udHJvbEFkYXB0ZXIoKSB7CisJCQkJYm9vbGVhbiBndWFyZCA9IGZhbHNlOworCQkJCUBPdmVycmlkZQorCQkJCXB1YmxpYyB2b2lkIGNvbnRyb2xSZXNpemVkKENvbnRyb2xFdmVudCBldmVudCkgeworCQkJCQlpZiAoIWd1YXJkKSB7CisJCQkJCQlndWFyZCA9IHRydWU7CisJCQkJCQloaWRlVGFicygpOworCQkJCQkJZ3VhcmQgPSBmYWxzZTsKKwkJCQkJfQorCQkJCX0KKwkJCSB9KTsKKworCQlnZXRTaXRlKCkuZ2V0U2hlbGwoKS5nZXREaXNwbGF5KCkuYXN5bmNFeGVjCisJCQkobmV3IFJ1bm5hYmxlKCkgeworCQkJCSBwdWJsaWMgdm9pZCBydW4oKSB7CisJCQkJCSB1cGRhdGVQcm9ibGVtSW5kaWNhdGlvbigpOworCQkJCSB9CisJCQkgfSk7CisJfSAvLyBjcmVhdGVQYWdlcworCQorCS8qKgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBjcmVhdGVQYWdlc0dlbigpIHsKKwkJLy8gQ3JlYXRlcyB0aGUgbW9kZWwgZnJvbSB0aGUgZWRpdG9yIGlucHV0CisJCS8vCisJCWNyZWF0ZU1vZGVsKCk7CisKKwkJLy8gT25seSBjcmVhdGVzIHRoZSBvdGhlciBwYWdlcyBpZiB0aGVyZSBpcyBzb21ldGhpbmcgdGhhdCBjYW4gYmUgZWRpdGVkCisJCS8vCisJCWlmICghZ2V0RWRpdGluZ0RvbWFpbigpLmdldFJlc291cmNlU2V0KCkuZ2V0UmVzb3VyY2VzKCkuaXNFbXB0eSgpKSB7CisJCQkvLyBDcmVhdGUgYSBwYWdlIGZvciB0aGUgc2VsZWN0aW9uIHRyZWUgdmlldy4KKwkJCS8vCisJCQlUcmVlIHRyZWUgPSBuZXcgVHJlZShnZXRDb250YWluZXIoKSwgU1dULk1VTFRJKTsKKwkJCXNlbGVjdGlvblZpZXdlciA9IG5ldyBUcmVlVmlld2VyKHRyZWUpOworCQkJc2V0Q3VycmVudFZpZXdlcihzZWxlY3Rpb25WaWV3ZXIpOworCisJCQlzZWxlY3Rpb25WaWV3ZXIuc2V0Q29udGVudFByb3ZpZGVyKG5ldyBBZGFwdGVyRmFjdG9yeUNvbnRlbnRQcm92aWRlcihhZGFwdGVyRmFjdG9yeSkpOworCQkJc2VsZWN0aW9uVmlld2VyLnNldExhYmVsUHJvdmlkZXIobmV3IEFkYXB0ZXJGYWN0b3J5TGFiZWxQcm92aWRlcihhZGFwdGVyRmFjdG9yeSkpOworCQkJc2VsZWN0aW9uVmlld2VyLnNldElucHV0KGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKSk7CisJCQlzZWxlY3Rpb25WaWV3ZXIuc2V0U2VsZWN0aW9uKG5ldyBTdHJ1Y3R1cmVkU2VsZWN0aW9uKGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKS5nZXRSZXNvdXJjZXMoKS5nZXQoMCkpLCB0cnVlKTsKKworCQkJbmV3IEFkYXB0ZXJGYWN0b3J5VHJlZUVkaXRvcihzZWxlY3Rpb25WaWV3ZXIuZ2V0VHJlZSgpLCBhZGFwdGVyRmFjdG9yeSk7CisKKwkJCWNyZWF0ZUNvbnRleHRNZW51Rm9yKHNlbGVjdGlvblZpZXdlcik7CisJCQlpbnQgcGFnZUluZGV4ID0gYWRkUGFnZSh0cmVlKTsKKwkJCXNldFBhZ2VUZXh0KHBhZ2VJbmRleCwgZ2V0U3RyaW5nKCJfVUlfU2VsZWN0aW9uUGFnZV9sYWJlbCIpKTsgLy8kTk9OLU5MUy0xJAorCisJCQlnZXRTaXRlKCkuZ2V0U2hlbGwoKS5nZXREaXNwbGF5KCkuYXN5bmNFeGVjCisJCQkJKG5ldyBSdW5uYWJsZSgpIHsKKwkJCQkJIHB1YmxpYyB2b2lkIHJ1bigpIHsKKwkJCQkJCSBzZXRBY3RpdmVQYWdlKDApOworCQkJCQkgfQorCQkJCSB9KTsKKwkJfQorCisJCS8vIEVuc3VyZXMgdGhhdCB0aGlzIGVkaXRvciB3aWxsIG9ubHkgZGlzcGxheSB0aGUgcGFnZSdzIHRhYgorCQkvLyBhcmVhIGlmIHRoZXJlIGFyZSBtb3JlIHRoYW4gb25lIHBhZ2UKKwkJLy8KKwkJZ2V0Q29udGFpbmVyKCkuYWRkQ29udHJvbExpc3RlbmVyCisJCQkobmV3IENvbnRyb2xBZGFwdGVyKCkgeworCQkJCWJvb2xlYW4gZ3VhcmQgPSBmYWxzZTsKKwkJCQlAT3ZlcnJpZGUKKwkJCQlwdWJsaWMgdm9pZCBjb250cm9sUmVzaXplZChDb250cm9sRXZlbnQgZXZlbnQpIHsKKwkJCQkJaWYgKCFndWFyZCkgeworCQkJCQkJZ3VhcmQgPSB0cnVlOworCQkJCQkJaGlkZVRhYnMoKTsKKwkJCQkJCWd1YXJkID0gZmFsc2U7CisJCQkJCX0KKwkJCQl9CisJCQkgfSk7CisKKwkJZ2V0U2l0ZSgpLmdldFNoZWxsKCkuZ2V0RGlzcGxheSgpLmFzeW5jRXhlYworCQkJKG5ldyBSdW5uYWJsZSgpIHsKKwkJCQkgcHVibGljIHZvaWQgcnVuKCkgeworCQkJCQkgdXBkYXRlUHJvYmxlbUluZGljYXRpb24oKTsKKwkJCQkgfQorCQkJIH0pOworCX0KKwkKKwkvKioKKwkgKiBJZiB0aGVyZSBpcyBqdXN0IG9uZSBwYWdlIGluIHRoZSBtdWx0aS1wYWdlIGVkaXRvciBwYXJ0LAorCSAqIHRoaXMgaGlkZXMgdGhlIHNpbmdsZSB0YWIgYXQgdGhlIGJvdHRvbS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgaGlkZVRhYnMoKSB7CisJCWlmIChnZXRQYWdlQ291bnQoKSA8PSAxKSB7CisJCQlzZXRQYWdlVGV4dCgwLCAiIik7IC8vJE5PTi1OTFMtMSQKKwkJCWlmIChnZXRDb250YWluZXIoKSBpbnN0YW5jZW9mIENUYWJGb2xkZXIpIHsKKwkJCQkoKENUYWJGb2xkZXIpZ2V0Q29udGFpbmVyKCkpLnNldFRhYkhlaWdodCgxKTsKKwkJCQlQb2ludCBwb2ludCA9IGdldENvbnRhaW5lcigpLmdldFNpemUoKTsKKwkJCQlnZXRDb250YWluZXIoKS5zZXRTaXplKHBvaW50LngsIHBvaW50LnkgKyA2KTsKKwkJCX0KKwkJfQorCX0KKworCS8qKgorCSAqIElmIHRoZXJlIGlzIG1vcmUgdGhhbiBvbmUgcGFnZSBpbiB0aGUgbXVsdGktcGFnZSBlZGl0b3IgcGFydCwKKwkgKiB0aGlzIHNob3dzIHRoZSB0YWJzIGF0IHRoZSBib3R0b20uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIHNob3dUYWJzKCkgeworCQlpZiAoZ2V0UGFnZUNvdW50KCkgPiAxKSB7CisJCQlzZXRQYWdlVGV4dCgwLCBnZXRTdHJpbmcoIl9VSV9TZWxlY3Rpb25QYWdlX2xhYmVsIikpOyAvLyROT04tTkxTLTEkCisJCQlpZiAoZ2V0Q29udGFpbmVyKCkgaW5zdGFuY2VvZiBDVGFiRm9sZGVyKSB7CisJCQkJKChDVGFiRm9sZGVyKWdldENvbnRhaW5lcigpKS5zZXRUYWJIZWlnaHQoU1dULkRFRkFVTFQpOworCQkJCVBvaW50IHBvaW50ID0gZ2V0Q29udGFpbmVyKCkuZ2V0U2l6ZSgpOworCQkJCWdldENvbnRhaW5lcigpLnNldFNpemUocG9pbnQueCwgcG9pbnQueSAtIDYpOworCQkJfQorCQl9CisJfQorCisJLyoqCisJICogVGhpcyBpcyB1c2VkIHRvIHRyYWNrIHRoZSBhY3RpdmUgdmlld2VyLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0KKwkgKiBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIHBhZ2VDaGFuZ2UoaW50IHBhZ2VJbmRleCkgeworCQlzdXBlci5wYWdlQ2hhbmdlKHBhZ2VJbmRleCk7CisKKwkJaWYgKGNvbnRlbnRPdXRsaW5lUGFnZSAhPSBudWxsKSB7CisJCQloYW5kbGVDb250ZW50T3V0bGluZVNlbGVjdGlvbihjb250ZW50T3V0bGluZVBhZ2UuZ2V0U2VsZWN0aW9uKCkpOworCQl9CisJfQorCisJLyoqCisJICogVGhpcyBpcyBob3cgdGhlIGZyYW1ld29yayBkZXRlcm1pbmVzIHdoaWNoIGludGVyZmFjZXMgd2UgaW1wbGVtZW50LiA8IS0tCisJICogYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAU3VwcHJlc3NXYXJuaW5ncygidW5jaGVja2VkIikKKwkJQE92ZXJyaWRlCisJcHVibGljIE9iamVjdCBnZXRBZGFwdGVyKENsYXNzIGtleSkgeworCQlpZiAoa2V5LmVxdWFscyhJQ29udGVudE91dGxpbmVQYWdlLmNsYXNzKSkgeworCQkJcmV0dXJuIHNob3dPdXRsaW5lVmlldygpID8gZ2V0Q29udGVudE91dGxpbmVQYWdlKCkgOiBudWxsOworCQl9CisJCWVsc2UgaWYgKGtleS5lcXVhbHMoSVByb3BlcnR5U2hlZXRQYWdlLmNsYXNzKSkgeworCQkJcmV0dXJuIGdldFByb3BlcnR5U2hlZXRQYWdlKCk7CisJCX0KKwkJZWxzZSBpZiAoa2V5LmVxdWFscyhJR290b01hcmtlci5jbGFzcykpIHsKKwkJCXJldHVybiB0aGlzOworCQl9CisJCWVsc2UgeworCQkJcmV0dXJuIHN1cGVyLmdldEFkYXB0ZXIoa2V5KTsKKwkJfQorCX0KKworCS8qKgorCSAqIFRoaXMgYWNjZXNzZXMgYSBjYWNoZWQgdmVyc2lvbiBvZiB0aGUgY29udGVudCBvdXRsaW5lci4gPCEtLQorCSAqIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIElDb250ZW50T3V0bGluZVBhZ2UgZ2V0Q29udGVudE91dGxpbmVQYWdlKCkgeworCQlpZiAoY29udGVudE91dGxpbmVQYWdlID09IG51bGwpIHsKKwkJCS8vIFRoZSBjb250ZW50IG91dGxpbmUgaXMganVzdCBhIHRyZWUuCisJCQkvLworCQkJY2xhc3MgTXlDb250ZW50T3V0bGluZVBhZ2UgZXh0ZW5kcyBDb250ZW50T3V0bGluZVBhZ2UgeworCQkJCUBPdmVycmlkZQorCQkJCXB1YmxpYyB2b2lkIGNyZWF0ZUNvbnRyb2woQ29tcG9zaXRlIHBhcmVudCkgeworCQkJCQlzdXBlci5jcmVhdGVDb250cm9sKHBhcmVudCk7CisJCQkJCWNvbnRlbnRPdXRsaW5lVmlld2VyID0gZ2V0VHJlZVZpZXdlcigpOworCQkJCQljb250ZW50T3V0bGluZVZpZXdlci5hZGRTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIodGhpcyk7CisKKwkJCQkJLy8gU2V0IHVwIHRoZSB0cmVlIHZpZXdlci4KKwkJCQkJLy8KKwkJCQkJY29udGVudE91dGxpbmVWaWV3ZXIuc2V0Q29udGVudFByb3ZpZGVyKG5ldyBBZGFwdGVyRmFjdG9yeUNvbnRlbnRQcm92aWRlcihhZGFwdGVyRmFjdG9yeSkpOworCQkJCQljb250ZW50T3V0bGluZVZpZXdlci5zZXRMYWJlbFByb3ZpZGVyKG5ldyBBZGFwdGVyRmFjdG9yeUxhYmVsUHJvdmlkZXIoYWRhcHRlckZhY3RvcnkpKTsKKwkJCQkJY29udGVudE91dGxpbmVWaWV3ZXIuc2V0SW5wdXQoZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpKTsKKworCQkJCQkvLyBNYWtlIHN1cmUgb3VyIHBvcHVwcyB3b3JrLgorCQkJCQkvLworCQkJCQljcmVhdGVDb250ZXh0TWVudUZvcihjb250ZW50T3V0bGluZVZpZXdlcik7CisKKwkJCQkJaWYgKCFlZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkuZ2V0UmVzb3VyY2VzKCkuaXNFbXB0eSgpKSB7CisJCQkJCSAgLy8gU2VsZWN0IHRoZSByb290IG9iamVjdCBpbiB0aGUgdmlldy4KKwkJCQkJICAvLworCQkJCQkgIGNvbnRlbnRPdXRsaW5lVmlld2VyLnNldFNlbGVjdGlvbihuZXcgU3RydWN0dXJlZFNlbGVjdGlvbihlZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkuZ2V0UmVzb3VyY2VzKCkuZ2V0KDApKSwgdHJ1ZSk7CisJCQkJCX0KKwkJCQl9CisKKwkJCQlAT3ZlcnJpZGUKKwkJCQlwdWJsaWMgdm9pZCBtYWtlQ29udHJpYnV0aW9ucyhJTWVudU1hbmFnZXIgbWVudU1hbmFnZXIsIElUb29sQmFyTWFuYWdlciB0b29sQmFyTWFuYWdlciwgSVN0YXR1c0xpbmVNYW5hZ2VyIHN0YXR1c0xpbmVNYW5hZ2VyKSB7CisJCQkJCXN1cGVyLm1ha2VDb250cmlidXRpb25zKG1lbnVNYW5hZ2VyLCB0b29sQmFyTWFuYWdlciwgc3RhdHVzTGluZU1hbmFnZXIpOworCQkJCQljb250ZW50T3V0bGluZVN0YXR1c0xpbmVNYW5hZ2VyID0gc3RhdHVzTGluZU1hbmFnZXI7CisJCQkJfQorCisJCQkJQE92ZXJyaWRlCisJCQkJcHVibGljIHZvaWQgc2V0QWN0aW9uQmFycyhJQWN0aW9uQmFycyBhY3Rpb25CYXJzKSB7CisJCQkJCXN1cGVyLnNldEFjdGlvbkJhcnMoYWN0aW9uQmFycyk7CisJCQkJCWdldEFjdGlvbkJhckNvbnRyaWJ1dG9yKCkuc2hhcmVHbG9iYWxBY3Rpb25zKHRoaXMsIGFjdGlvbkJhcnMpOworCQkJCX0KKwkJCX0KKworCQkJY29udGVudE91dGxpbmVQYWdlID0gbmV3IE15Q29udGVudE91dGxpbmVQYWdlKCk7CisKKwkJCS8vIExpc3RlbiB0byBzZWxlY3Rpb24gc28gdGhhdCB3ZSBjYW4gaGFuZGxlIGl0IGlzIGEgc3BlY2lhbCB3YXkuCisJCQkvLworCQkJY29udGVudE91dGxpbmVQYWdlLmFkZFNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcgorCQkJCShuZXcgSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcigpIHsKKwkJCQkJIC8vIFRoaXMgZW5zdXJlcyB0aGF0IHdlIGhhbmRsZSBzZWxlY3Rpb25zIGNvcnJlY3RseS4KKwkJCQkJIC8vCisJCQkJCSBwdWJsaWMgdm9pZCBzZWxlY3Rpb25DaGFuZ2VkKFNlbGVjdGlvbkNoYW5nZWRFdmVudCBldmVudCkgeworCQkJCQkJIGhhbmRsZUNvbnRlbnRPdXRsaW5lU2VsZWN0aW9uKGV2ZW50LmdldFNlbGVjdGlvbigpKTsKKwkJCQkJIH0KKwkJCQkgfSk7CisJCX0KKworCQlyZXR1cm4gY29udGVudE91dGxpbmVQYWdlOworCX0KKworCS8qKgorCSAqIFRoaXMgYWNjZXNzZXMgYSBjYWNoZWQgdmVyc2lvbiBvZiB0aGUgcHJvcGVydHkgc2hlZXQuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYworCSAqIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIElQcm9wZXJ0eVNoZWV0UGFnZSBnZXRQcm9wZXJ0eVNoZWV0UGFnZSgpIHsKKwkJaWYgKHByb3BlcnR5U2hlZXRQYWdlID09IG51bGwpIHsKKwkJCXByb3BlcnR5U2hlZXRQYWdlID0KKwkJCQluZXcgRXh0ZW5kZWRQcm9wZXJ0eVNoZWV0UGFnZShlZGl0aW5nRG9tYWluKSB7CisJCQkJCUBPdmVycmlkZQorCQkJCQlwdWJsaWMgdm9pZCBzZXRTZWxlY3Rpb25Ub1ZpZXdlcihMaXN0PD8+IHNlbGVjdGlvbikgeworCQkJCQkJU2NlbmFyaW9FZGl0b3IudGhpcy5zZXRTZWxlY3Rpb25Ub1ZpZXdlcihzZWxlY3Rpb24pOworCQkJCQkJU2NlbmFyaW9FZGl0b3IudGhpcy5zZXRGb2N1cygpOworCQkJCQl9CisKKwkJCQkJQE92ZXJyaWRlCisJCQkJCXB1YmxpYyB2b2lkIHNldEFjdGlvbkJhcnMoSUFjdGlvbkJhcnMgYWN0aW9uQmFycykgeworCQkJCQkJc3VwZXIuc2V0QWN0aW9uQmFycyhhY3Rpb25CYXJzKTsKKwkJCQkJCWdldEFjdGlvbkJhckNvbnRyaWJ1dG9yKCkuc2hhcmVHbG9iYWxBY3Rpb25zKHRoaXMsIGFjdGlvbkJhcnMpOworCQkJCQl9CisJCQkJfTsKKwkJCXByb3BlcnR5U2hlZXRQYWdlLnNldFByb3BlcnR5U291cmNlUHJvdmlkZXIobmV3IEFkYXB0ZXJGYWN0b3J5Q29udGVudFByb3ZpZGVyKGFkYXB0ZXJGYWN0b3J5KSk7CisJCX0KKworCQlyZXR1cm4gcHJvcGVydHlTaGVldFBhZ2U7CisJfQorCisJLyoqCisJICogVGhpcyBkZWFscyB3aXRoIGhvdyB3ZSB3YW50IHNlbGVjdGlvbiBpbiB0aGUgb3V0bGluZXIgdG8gYWZmZWN0IHRoZSBvdGhlciB2aWV3cy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgaGFuZGxlQ29udGVudE91dGxpbmVTZWxlY3Rpb24oSVNlbGVjdGlvbiBzZWxlY3Rpb24pIHsKKwkJaWYgKHNlbGVjdGlvblZpZXdlciAhPSBudWxsICYmICFzZWxlY3Rpb24uaXNFbXB0eSgpICYmIHNlbGVjdGlvbiBpbnN0YW5jZW9mIElTdHJ1Y3R1cmVkU2VsZWN0aW9uKSB7CisJCQlJdGVyYXRvcjw/PiBzZWxlY3RlZEVsZW1lbnRzID0gKChJU3RydWN0dXJlZFNlbGVjdGlvbilzZWxlY3Rpb24pLml0ZXJhdG9yKCk7CisJCQlpZiAoc2VsZWN0ZWRFbGVtZW50cy5oYXNOZXh0KCkpIHsKKwkJCQkvLyBHZXQgdGhlIGZpcnN0IHNlbGVjdGVkIGVsZW1lbnQuCisJCQkJLy8KKwkJCQlPYmplY3Qgc2VsZWN0ZWRFbGVtZW50ID0gc2VsZWN0ZWRFbGVtZW50cy5uZXh0KCk7CisKKwkJCQlBcnJheUxpc3Q8T2JqZWN0PiBzZWxlY3Rpb25MaXN0ID0gbmV3IEFycmF5TGlzdDxPYmplY3Q+KCk7CisJCQkJc2VsZWN0aW9uTGlzdC5hZGQoc2VsZWN0ZWRFbGVtZW50KTsKKwkJCQl3aGlsZSAoc2VsZWN0ZWRFbGVtZW50cy5oYXNOZXh0KCkpIHsKKwkJCQkJc2VsZWN0aW9uTGlzdC5hZGQoc2VsZWN0ZWRFbGVtZW50cy5uZXh0KCkpOworCQkJCX0KKworCQkJCS8vIFNldCB0aGUgc2VsZWN0aW9uIHRvIHRoZSB3aWRnZXQuCisJCQkJLy8KKwkJCQlzZWxlY3Rpb25WaWV3ZXIuc2V0U2VsZWN0aW9uKG5ldyBTdHJ1Y3R1cmVkU2VsZWN0aW9uKHNlbGVjdGlvbkxpc3QpKTsKKwkJCX0KKwkJfQorCX0KKworCS8qKgorCSAqIFRoaXMgaXMgZm9yIGltcGxlbWVudGluZyB7QGxpbmsgSUVkaXRvclBhcnR9IGFuZCBzaW1wbHkgdGVzdHMgdGhlIGNvbW1hbmQgc3RhY2suCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBib29sZWFuIGlzRGlydHkoKSB7CisJCXJldHVybiAoKEJhc2ljQ29tbWFuZFN0YWNrKWVkaXRpbmdEb21haW4uZ2V0Q29tbWFuZFN0YWNrKCkpLmlzU2F2ZU5lZWRlZCgpOworCX0KKworCS8qKgorCSAqIFRoaXMgaXMgZm9yIGltcGxlbWVudGluZyB7QGxpbmsgSUVkaXRvclBhcnR9IGFuZCBzaW1wbHkgc2F2ZXMgdGhlIG1vZGVsIGZpbGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGRvU2F2ZShJUHJvZ3Jlc3NNb25pdG9yIHByb2dyZXNzTW9uaXRvcikgeworCQkvLyBTYXZlIG9ubHkgcmVzb3VyY2VzIHRoYXQgaGF2ZSBhY3R1YWxseSBjaGFuZ2VkLgorCQkvLworCQlmaW5hbCBNYXA8T2JqZWN0LCBPYmplY3Q+IHNhdmVPcHRpb25zID0gbmV3IEhhc2hNYXA8T2JqZWN0LCBPYmplY3Q+KCk7CisJCXNhdmVPcHRpb25zLnB1dChSZXNvdXJjZS5PUFRJT05fU0FWRV9PTkxZX0lGX0NIQU5HRUQsIFJlc291cmNlLk9QVElPTl9TQVZFX09OTFlfSUZfQ0hBTkdFRF9NRU1PUllfQlVGRkVSKTsKKworCQkvLyBEbyB0aGUgd29yayB3aXRoaW4gYW4gb3BlcmF0aW9uIGJlY2F1c2UgdGhpcyBpcyBhIGxvbmcgcnVubmluZyBhY3Rpdml0eSB0aGF0IG1vZGlmaWVzIHRoZSB3b3JrYmVuY2guCisJCS8vCisJCVdvcmtzcGFjZU1vZGlmeU9wZXJhdGlvbiBvcGVyYXRpb24gPQorCQkJbmV3IFdvcmtzcGFjZU1vZGlmeU9wZXJhdGlvbigpIHsKKwkJCQkvLyBUaGlzIGlzIHRoZSBtZXRob2QgdGhhdCBnZXRzIGludm9rZWQgd2hlbiB0aGUgb3BlcmF0aW9uIHJ1bnMuCisJCQkJLy8KKwkJCQlAT3ZlcnJpZGUKKwkJCQlwdWJsaWMgdm9pZCBleGVjdXRlKElQcm9ncmVzc01vbml0b3IgbW9uaXRvcikgeworCQkJCQkvLyBTYXZlIHRoZSByZXNvdXJjZXMgdG8gdGhlIGZpbGUgc3lzdGVtLgorCQkJCQkvLworCQkJCQlib29sZWFuIGZpcnN0ID0gdHJ1ZTsKKwkJCQkJZm9yIChSZXNvdXJjZSByZXNvdXJjZSA6IGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKS5nZXRSZXNvdXJjZXMoKSkgeworCQkJCQkJaWYgKChmaXJzdCB8fCAhcmVzb3VyY2UuZ2V0Q29udGVudHMoKS5pc0VtcHR5KCkgfHwgaXNQZXJzaXN0ZWQocmVzb3VyY2UpKSAmJiAhZWRpdGluZ0RvbWFpbi5pc1JlYWRPbmx5KHJlc291cmNlKSkgeworCQkJCQkJCXRyeSB7CisJCQkJCQkJCWxvbmcgdGltZVN0YW1wID0gcmVzb3VyY2UuZ2V0VGltZVN0YW1wKCk7CisJCQkJCQkJCXJlc291cmNlLnNhdmUoc2F2ZU9wdGlvbnMpOworCQkJCQkJCQlpZiAocmVzb3VyY2UuZ2V0VGltZVN0YW1wKCkgIT0gdGltZVN0YW1wKSB7CisJCQkJCQkJCQlzYXZlZFJlc291cmNlcy5hZGQocmVzb3VyY2UpOworCQkJCQkJCQl9CisJCQkJCQkJfQorCQkJCQkJCWNhdGNoIChFeGNlcHRpb24gZXhjZXB0aW9uKSB7CisJCQkJCQkJCXJlc291cmNlVG9EaWFnbm9zdGljTWFwLnB1dChyZXNvdXJjZSwgYW5hbHl6ZVJlc291cmNlUHJvYmxlbXMocmVzb3VyY2UsIGV4Y2VwdGlvbikpOworCQkJCQkJCX0KKwkJCQkJCQlmaXJzdCA9IGZhbHNlOworCQkJCQkJfQorCQkJCQl9CisJCQkJfQorCQkJfTsKKworCQl1cGRhdGVQcm9ibGVtSW5kaWNhdGlvbiA9IGZhbHNlOworCQl0cnkgeworCQkJLy8gVGhpcyBydW5zIHRoZSBvcHRpb25zLCBhbmQgc2hvd3MgcHJvZ3Jlc3MuCisJCQkvLworCQkJbmV3IFByb2dyZXNzTW9uaXRvckRpYWxvZyhnZXRTaXRlKCkuZ2V0U2hlbGwoKSkucnVuKHRydWUsIGZhbHNlLCBvcGVyYXRpb24pOworCisJCQkvLyBSZWZyZXNoIHRoZSBuZWNlc3Nhcnkgc3RhdGUuCisJCQkvLworCQkJKChCYXNpY0NvbW1hbmRTdGFjayllZGl0aW5nRG9tYWluLmdldENvbW1hbmRTdGFjaygpKS5zYXZlSXNEb25lKCk7CisJCQlmaXJlUHJvcGVydHlDaGFuZ2UoSUVkaXRvclBhcnQuUFJPUF9ESVJUWSk7CisJCX0KKwkJY2F0Y2ggKEV4Y2VwdGlvbiBleGNlcHRpb24pIHsKKwkJCS8vIFNvbWV0aGluZyB3ZW50IHdyb25nIHRoYXQgc2hvdWxkbid0LgorCQkJLy8KKwkJCUNvcmVFZGl0b3JQbHVnaW4uSU5TVEFOQ0UubG9nKGV4Y2VwdGlvbik7CisJCX0KKwkJdXBkYXRlUHJvYmxlbUluZGljYXRpb24gPSB0cnVlOworCQl1cGRhdGVQcm9ibGVtSW5kaWNhdGlvbigpOworCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyB3aGV0aGVyIHNvbWV0aGluZyBoYXMgYmVlbiBwZXJzaXN0ZWQgdG8gdGhlIFVSSSBvZiB0aGUgc3BlY2lmaWVkIHJlc291cmNlLgorCSAqIFRoZSBpbXBsZW1lbnRhdGlvbiB1c2VzIHRoZSBVUkkgY29udmVydGVyIGZyb20gdGhlIGVkaXRvcidzIHJlc291cmNlIHNldCB0byB0cnkgdG8gb3BlbiBhbiBpbnB1dCBzdHJlYW0uIAorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MKKwkgKiAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBib29sZWFuIGlzUGVyc2lzdGVkKFJlc291cmNlIHJlc291cmNlKSB7CisJCWJvb2xlYW4gcmVzdWx0ID0gZmFsc2U7CisJCXRyeSB7CisJCQlJbnB1dFN0cmVhbSBzdHJlYW0gPSBlZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkuZ2V0VVJJQ29udmVydGVyKCkuY3JlYXRlSW5wdXRTdHJlYW0ocmVzb3VyY2UuZ2V0VVJJKCkpOworCQkJaWYgKHN0cmVhbSAhPSBudWxsKSB7CisJCQkJcmVzdWx0ID0gdHJ1ZTsKKwkJCQlzdHJlYW0uY2xvc2UoKTsKKwkJCX0KKwkJfQorCQljYXRjaCAoSU9FeGNlcHRpb24gZSkgeworCQkJLy8gSWdub3JlCisJCX0KKwkJcmV0dXJuIHJlc3VsdDsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFsd2F5cyByZXR1cm5zIHRydWUgYmVjYXVzZSBpdCBpcyBub3QgY3VycmVudGx5IHN1cHBvcnRlZC4gPCEtLQorCSAqIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIGJvb2xlYW4gaXNTYXZlQXNBbGxvd2VkKCkgeworCQlyZXR1cm4gdHJ1ZTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFsc28gY2hhbmdlcyB0aGUgZWRpdG9yJ3MgaW5wdXQuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLQorCSAqIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgZG9TYXZlQXMoKSB7CisJCVNhdmVBc0RpYWxvZyBzYXZlQXNEaWFsb2cgPSBuZXcgU2F2ZUFzRGlhbG9nKGdldFNpdGUoKS5nZXRTaGVsbCgpKTsKKwkJc2F2ZUFzRGlhbG9nLm9wZW4oKTsKKwkJSVBhdGggcGF0aCA9IHNhdmVBc0RpYWxvZy5nZXRSZXN1bHQoKTsKKwkJaWYgKHBhdGggIT0gbnVsbCkgeworCQkJSUZpbGUgZmlsZSA9IFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5nZXRSb290KCkuZ2V0RmlsZShwYXRoKTsKKwkJCWlmIChmaWxlICE9IG51bGwpIHsKKwkJCQlkb1NhdmVBcyhVUkkuY3JlYXRlUGxhdGZvcm1SZXNvdXJjZVVSSShmaWxlLmdldEZ1bGxQYXRoKCkudG9TdHJpbmcoKSwgdHJ1ZSksIG5ldyBGaWxlRWRpdG9ySW5wdXQoZmlsZSkpOworCQkJfQorCQl9CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIGRvU2F2ZUFzKFVSSSB1cmksIElFZGl0b3JJbnB1dCBlZGl0b3JJbnB1dCkgeworCQkoZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpLmdldFJlc291cmNlcygpLmdldCgwKSkuc2V0VVJJKHVyaSk7CisJCXNldElucHV0V2l0aE5vdGlmeShlZGl0b3JJbnB1dCk7CisJCXNldFBhcnROYW1lKGVkaXRvcklucHV0LmdldE5hbWUoKSk7CisJCUlQcm9ncmVzc01vbml0b3IgcHJvZ3Jlc3NNb25pdG9yID0KKwkJCWdldEFjdGlvbkJhcnMoKS5nZXRTdGF0dXNMaW5lTWFuYWdlcigpICE9IG51bGwgPworCQkJCWdldEFjdGlvbkJhcnMoKS5nZXRTdGF0dXNMaW5lTWFuYWdlcigpLmdldFByb2dyZXNzTW9uaXRvcigpIDoKKwkJCQluZXcgTnVsbFByb2dyZXNzTW9uaXRvcigpOworCQlkb1NhdmUocHJvZ3Jlc3NNb25pdG9yKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBnb3RvTWFya2VyKElNYXJrZXIgbWFya2VyKSB7CisJCXRyeSB7CisJCQlpZiAobWFya2VyLmdldFR5cGUoKS5lcXVhbHMoRVZhbGlkYXRvci5NQVJLRVIpKSB7CisJCQkJU3RyaW5nIHVyaUF0dHJpYnV0ZSA9IG1hcmtlci5nZXRBdHRyaWJ1dGUoRVZhbGlkYXRvci5VUklfQVRUUklCVVRFLCBudWxsKTsKKwkJCQlpZiAodXJpQXR0cmlidXRlICE9IG51bGwpIHsKKwkJCQkJVVJJIHVyaSA9IFVSSS5jcmVhdGVVUkkodXJpQXR0cmlidXRlKTsKKwkJCQkJRU9iamVjdCBlT2JqZWN0ID0gZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpLmdldEVPYmplY3QodXJpLCB0cnVlKTsKKwkJCQkJaWYgKGVPYmplY3QgIT0gbnVsbCkgeworCQkJCQkgIHNldFNlbGVjdGlvblRvVmlld2VyKENvbGxlY3Rpb25zLnNpbmdsZXRvbihlZGl0aW5nRG9tYWluLmdldFdyYXBwZXIoZU9iamVjdCkpKTsKKwkJCQkJfQorCQkJCX0KKwkJCX0KKwkJfQorCQljYXRjaCAoQ29yZUV4Y2VwdGlvbiBleGNlcHRpb24pIHsKKwkJCUNvcmVFZGl0b3JQbHVnaW4uSU5TVEFOQ0UubG9nKGV4Y2VwdGlvbik7CisJCX0KKwl9CisKKwkvKioKKwkgKiBUaGlzIGlzIGNhbGxlZCBkdXJpbmcgc3RhcnR1cC4gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MKKwkgKiAtLT4KKwkgKiAKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgaW5pdChJRWRpdG9yU2l0ZSBzaXRlLCBJRWRpdG9ySW5wdXQgZWRpdG9ySW5wdXQpIHsKKwkJc2V0U2l0ZShzaXRlKTsKKwkJc2V0SW5wdXRXaXRoTm90aWZ5KGVkaXRvcklucHV0KTsKKwkJc2V0UGFydE5hbWUoZWRpdG9ySW5wdXQuZ2V0TmFtZSgpKTsKKwkJc2l0ZS5zZXRTZWxlY3Rpb25Qcm92aWRlcih0aGlzKTsKKwkJc2l0ZS5nZXRQYWdlKCkuYWRkUGFydExpc3RlbmVyKHBhcnRMaXN0ZW5lcik7CisJCVJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5hZGRSZXNvdXJjZUNoYW5nZUxpc3RlbmVyKHJlc291cmNlQ2hhbmdlTGlzdGVuZXIsIElSZXNvdXJjZUNoYW5nZUV2ZW50LlBPU1RfQ0hBTkdFKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgc2V0Rm9jdXMoKSB7CisJCWdldENvbnRyb2woZ2V0QWN0aXZlUGFnZSgpKS5zZXRGb2N1cygpOworCX0KKworCS8qKgorCSAqIFRoaXMgaW1wbGVtZW50cyB7QGxpbmsgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uUHJvdmlkZXJ9LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBhZGRTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIoSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lciBsaXN0ZW5lcikgeworCQlzZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXJzLmFkZChsaXN0ZW5lcik7CisJfQorCisJLyoqCisJICogVGhpcyBpbXBsZW1lbnRzIHtAbGluayBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb25Qcm92aWRlcn0uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIHJlbW92ZVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcigKKwkJCUlTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIgbGlzdGVuZXIpIHsKKwkJc2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVycy5yZW1vdmUobGlzdGVuZXIpOworCX0KKworCS8qKgorCSAqIFRoaXMgaW1wbGVtZW50cyB7QGxpbmsgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uUHJvdmlkZXJ9IHRvIHJldHVybiB0aGlzIGVkaXRvcidzIG92ZXJhbGwgc2VsZWN0aW9uLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0KKwkgKiBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBJU2VsZWN0aW9uIGdldFNlbGVjdGlvbigpIHsKKwkJcmV0dXJuIGVkaXRvclNlbGVjdGlvbjsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGltcGxlbWVudHMge0BsaW5rIG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvblByb3ZpZGVyfSB0byBzZXQgdGhpcyBlZGl0b3IncyBvdmVyYWxsIHNlbGVjdGlvbi4KKwkgKiBDYWxsaW5nIHRoaXMgcmVzdWx0IHdpbGwgbm90aWZ5IHRoZSBsaXN0ZW5lcnMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIHNldFNlbGVjdGlvbihJU2VsZWN0aW9uIHNlbGVjdGlvbikgeworCQllZGl0b3JTZWxlY3Rpb24gPSBzZWxlY3Rpb247CisKKwkJZm9yIChJU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyIGxpc3RlbmVyIDogc2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVycykgeworCQkJbGlzdGVuZXIuc2VsZWN0aW9uQ2hhbmdlZChuZXcgU2VsZWN0aW9uQ2hhbmdlZEV2ZW50KHRoaXMsIHNlbGVjdGlvbikpOworCQl9CisJCXNldFN0YXR1c0xpbmVNYW5hZ2VyKHNlbGVjdGlvbik7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIHNldFN0YXR1c0xpbmVNYW5hZ2VyKElTZWxlY3Rpb24gc2VsZWN0aW9uKSB7CisJCUlTdGF0dXNMaW5lTWFuYWdlciBzdGF0dXNMaW5lTWFuYWdlciA9IGN1cnJlbnRWaWV3ZXIgIT0gbnVsbCAmJiBjdXJyZW50Vmlld2VyID09IGNvbnRlbnRPdXRsaW5lVmlld2VyID8KKwkJCWNvbnRlbnRPdXRsaW5lU3RhdHVzTGluZU1hbmFnZXIgOiBnZXRBY3Rpb25CYXJzKCkuZ2V0U3RhdHVzTGluZU1hbmFnZXIoKTsKKworCQlpZiAoc3RhdHVzTGluZU1hbmFnZXIgIT0gbnVsbCkgeworCQkJaWYgKHNlbGVjdGlvbiBpbnN0YW5jZW9mIElTdHJ1Y3R1cmVkU2VsZWN0aW9uKSB7CisJCQkJQ29sbGVjdGlvbjw/PiBjb2xsZWN0aW9uID0gKChJU3RydWN0dXJlZFNlbGVjdGlvbilzZWxlY3Rpb24pLnRvTGlzdCgpOworCQkJCXN3aXRjaCAoY29sbGVjdGlvbi5zaXplKCkpIHsKKwkJCQkJY2FzZSAwOiB7CisJCQkJCQlzdGF0dXNMaW5lTWFuYWdlci5zZXRNZXNzYWdlKGdldFN0cmluZygiX1VJX05vT2JqZWN0U2VsZWN0ZWQiKSk7IC8vJE5PTi1OTFMtMSQKKwkJCQkJCWJyZWFrOworCQkJCQl9CisJCQkJCWNhc2UgMTogeworCQkJCQkJU3RyaW5nIHRleHQgPSBuZXcgQWRhcHRlckZhY3RvcnlJdGVtRGVsZWdhdG9yKGFkYXB0ZXJGYWN0b3J5KS5nZXRUZXh0KGNvbGxlY3Rpb24uaXRlcmF0b3IoKS5uZXh0KCkpOworCQkJCQkJc3RhdHVzTGluZU1hbmFnZXIuc2V0TWVzc2FnZShnZXRTdHJpbmcoIl9VSV9TaW5nbGVPYmplY3RTZWxlY3RlZCIsIHRleHQpKTsgLy8kTk9OLU5MUy0xJAorCQkJCQkJYnJlYWs7CisJCQkJCX0KKwkJCQkJZGVmYXVsdDogeworCQkJCQkJc3RhdHVzTGluZU1hbmFnZXIuc2V0TWVzc2FnZShnZXRTdHJpbmcoIl9VSV9NdWx0aU9iamVjdFNlbGVjdGVkIiwgSW50ZWdlci50b1N0cmluZyhjb2xsZWN0aW9uLnNpemUoKSkpKTsgLy8kTk9OLU5MUy0xJAorCQkJCQkJYnJlYWs7CisJCQkJCX0KKwkJCQl9CisJCQl9CisJCQllbHNlIHsKKwkJCQlzdGF0dXNMaW5lTWFuYWdlci5zZXRNZXNzYWdlKCIiKTsgLy8kTk9OLU5MUy0xJAorCQkJfQorCQl9CisJfQorCisJLyoqCisJICogVGhpcyBsb29rcyB1cCBhIHN0cmluZyBpbiB0aGUgcGx1Z2luJ3MgcGx1Z2luLnByb3BlcnRpZXMgZmlsZS4gPCEtLQorCSAqIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIGdldFN0cmluZyhTdHJpbmcga2V5KSB7CisJCXJldHVybiBDb3JlRWRpdG9yUGx1Z2luLklOU1RBTkNFLmdldFN0cmluZyhrZXkpOworCX0KKworCS8qKgorCSAqIFRoaXMgbG9va3MgdXAgYSBzdHJpbmcgaW4gcGx1Z2luLnByb3BlcnRpZXMsIG1ha2luZyBhIHN1YnN0aXR1dGlvbi4gPCEtLQorCSAqIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIGdldFN0cmluZyhTdHJpbmcga2V5LCBPYmplY3QgczEpIHsKKwkJcmV0dXJuIENvcmVFZGl0b3JQbHVnaW4uSU5TVEFOQ0UuZ2V0U3RyaW5nKGtleSwgbmV3IE9iamVjdCBbXSB7IHMxIH0pOworCX0KKworCS8qKgorCSAqIFRoaXMgaW1wbGVtZW50cyB7QGxpbmsgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklNZW51TGlzdGVuZXJ9IHRvIGhlbHAKKwkgKiBmaWxsIHRoZSBjb250ZXh0IG1lbnVzIHdpdGggY29udHJpYnV0aW9ucyBmcm9tIHRoZSBFZGl0IG1lbnUuIDwhLS0KKwkgKiBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIG1lbnVBYm91dFRvU2hvdyhJTWVudU1hbmFnZXIgbWVudU1hbmFnZXIpIHsKKwkJKChJTWVudUxpc3RlbmVyKWdldEVkaXRvclNpdGUoKS5nZXRBY3Rpb25CYXJDb250cmlidXRvcigpKS5tZW51QWJvdXRUb1Nob3cobWVudU1hbmFnZXIpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRWRpdGluZ0RvbWFpbkFjdGlvbkJhckNvbnRyaWJ1dG9yIGdldEFjdGlvbkJhckNvbnRyaWJ1dG9yKCkgeworCQlyZXR1cm4gKEVkaXRpbmdEb21haW5BY3Rpb25CYXJDb250cmlidXRvcilnZXRFZGl0b3JTaXRlKCkuZ2V0QWN0aW9uQmFyQ29udHJpYnV0b3IoKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIElBY3Rpb25CYXJzIGdldEFjdGlvbkJhcnMoKSB7CisJCXJldHVybiBnZXRBY3Rpb25CYXJDb250cmlidXRvcigpLmdldEFjdGlvbkJhcnMoKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEFkYXB0ZXJGYWN0b3J5IGdldEFkYXB0ZXJGYWN0b3J5KCkgeworCQlyZXR1cm4gYWRhcHRlckZhY3Rvcnk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGRpc3Bvc2UoKSB7CisJCXVwZGF0ZVByb2JsZW1JbmRpY2F0aW9uID0gZmFsc2U7CisKKwkJUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLnJlbW92ZVJlc291cmNlQ2hhbmdlTGlzdGVuZXIocmVzb3VyY2VDaGFuZ2VMaXN0ZW5lcik7CisKKwkJZ2V0U2l0ZSgpLmdldFBhZ2UoKS5yZW1vdmVQYXJ0TGlzdGVuZXIocGFydExpc3RlbmVyKTsKKworCQlhZGFwdGVyRmFjdG9yeS5kaXNwb3NlKCk7CisKKwkJaWYgKGdldEFjdGlvbkJhckNvbnRyaWJ1dG9yKCkuZ2V0QWN0aXZlRWRpdG9yKCkgPT0gdGhpcykgeworCQkJZ2V0QWN0aW9uQmFyQ29udHJpYnV0b3IoKS5zZXRBY3RpdmVFZGl0b3IobnVsbCk7CisJCX0KKworCQlpZiAocHJvcGVydHlTaGVldFBhZ2UgIT0gbnVsbCkgeworCQkJcHJvcGVydHlTaGVldFBhZ2UuZGlzcG9zZSgpOworCQl9CisKKwkJaWYgKGNvbnRlbnRPdXRsaW5lUGFnZSAhPSBudWxsKSB7CisJCQljb250ZW50T3V0bGluZVBhZ2UuZGlzcG9zZSgpOworCQl9CisKKwkJc3VwZXIuZGlzcG9zZSgpOworCX0KKworCS8qKgorCSAqIFJldHVybnMgd2hldGhlciB0aGUgb3V0bGluZSB2aWV3IHNob3VsZCBiZSBwcmVzZW50ZWQgdG8gdGhlIHVzZXIuIDwhLS0KKwkgKiBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogCisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBib29sZWFuIHNob3dPdXRsaW5lVmlldygpIHsKKwkJcmV0dXJuIGZhbHNlOworCX0KK30KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3NlcXVlbmNlci9wcmVzZW50YXRpb24vU2VxdWVuY2VyQWN0aW9uQmFyQ29udHJpYnV0b3IuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3NlcXVlbmNlci9wcmVzZW50YXRpb24vU2VxdWVuY2VyQWN0aW9uQmFyQ29udHJpYnV0b3IuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NDZhNTYxCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvc2VxdWVuY2VyL3ByZXNlbnRhdGlvbi9TZXF1ZW5jZXJBY3Rpb25CYXJDb250cmlidXRvci5qYXZhCkBAIC0wLDAgKzEsNDMxIEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zZXF1ZW5jZXIucHJlc2VudGF0aW9uOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA3LCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7CitpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnVpLnZpZXdlci5JVmlld2VyUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQuZG9tYWluLkVkaXRpbmdEb21haW47CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQuZG9tYWluLklFZGl0aW5nRG9tYWluUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkuYWN0aW9uLkNvbnRyb2xBY3Rpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkuYWN0aW9uLkNyZWF0ZUNoaWxkQWN0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmFjdGlvbi5DcmVhdGVTaWJsaW5nQWN0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmFjdGlvbi5FZGl0aW5nRG9tYWluQWN0aW9uQmFyQ29udHJpYnV0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkuYWN0aW9uLkxvYWRSZXNvdXJjZUFjdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5hY3Rpb24uVmFsaWRhdGVBY3Rpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLkFjdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uQWN0aW9uQ29udHJpYnV0aW9uSXRlbTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSUFjdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSUNvbnRyaWJ1dGlvbkl0ZW07CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklDb250cmlidXRpb25NYW5hZ2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JTWVudUxpc3RlbmVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JTWVudU1hbmFnZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklUb29sQmFyTWFuYWdlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uTWVudU1hbmFnZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLlNlcGFyYXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uU3ViQ29udHJpYnV0aW9uSXRlbTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvblByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVN0cnVjdHVyZWRTZWxlY3Rpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5TZWxlY3Rpb25DaGFuZ2VkRXZlbnQ7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5WaWV3ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5wcmVzZW50YXRpb24uQ29yZUVkaXRvclBsdWdpbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5JRWRpdG9yUGFydDsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5QYXJ0SW5pdEV4Y2VwdGlvbjsKKworLyoqCisgKiBUaGlzIGlzIHRoZSBhY3Rpb24gYmFyIGNvbnRyaWJ1dG9yIGZvciB0aGUgU2VxdWVuY2VyIG1vZGVsIGVkaXRvci4KKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBnZW5lcmF0ZWQKKyAqLworQFN1cHByZXNzV2FybmluZ3MoImFsbCIpCitwdWJsaWMgY2xhc3MgU2VxdWVuY2VyQWN0aW9uQmFyQ29udHJpYnV0b3IKKwlleHRlbmRzIEVkaXRpbmdEb21haW5BY3Rpb25CYXJDb250cmlidXRvcgorCWltcGxlbWVudHMgSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lciB7CisJLyoqCisJICogVGhpcyBrZWVwcyB0cmFjayBvZiB0aGUgYWN0aXZlIGVkaXRvci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgSUVkaXRvclBhcnQgYWN0aXZlRWRpdG9yUGFydDsKKworCS8qKgorCSAqIFRoaXMga2VlcHMgdHJhY2sgb2YgdGhlIGN1cnJlbnQgc2VsZWN0aW9uIHByb3ZpZGVyLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBJU2VsZWN0aW9uUHJvdmlkZXIgc2VsZWN0aW9uUHJvdmlkZXI7CisKKwkvKioKKwkgKiBUaGlzIGFjdGlvbiBvcGVucyB0aGUgUHJvcGVydGllcyB2aWV3LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBJQWN0aW9uIHNob3dQcm9wZXJ0aWVzVmlld0FjdGlvbiA9CisJCW5ldyBBY3Rpb24oQ29yZUVkaXRvclBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoIl9VSV9TaG93UHJvcGVydGllc1ZpZXdfbWVudV9pdGVtIikpIC8vJE5PTi1OTFMtMSQKKwkJeworCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgdm9pZCBydW4oKSB7CisJCQkJdHJ5IHsKKwkJCQkJZ2V0UGFnZSgpLnNob3dWaWV3KCJvcmcuZWNsaXBzZS51aS52aWV3cy5Qcm9wZXJ0eVNoZWV0Iik7IC8vJE5PTi1OTFMtMSQKKwkJCQl9CisJCQkJY2F0Y2ggKFBhcnRJbml0RXhjZXB0aW9uIGV4Y2VwdGlvbikgeworCQkJCQlDb3JlRWRpdG9yUGx1Z2luLklOU1RBTkNFLmxvZyhleGNlcHRpb24pOworCQkJCX0KKwkJCX0KKwkJfTsKKworCS8qKgorCSAqIFRoaXMgYWN0aW9uIHJlZnJlc2hlcyB0aGUgdmlld2VyIG9mIHRoZSBjdXJyZW50IGVkaXRvciBpZiB0aGUgZWRpdG9yCisJICogaW1wbGVtZW50cyB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51aS52aWV3ZXIuSVZpZXdlclByb3ZpZGVyfS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgSUFjdGlvbiByZWZyZXNoVmlld2VyQWN0aW9uID0KKwkJbmV3IEFjdGlvbihDb3JlRWRpdG9yUGx1Z2luLklOU1RBTkNFLmdldFN0cmluZygiX1VJX1JlZnJlc2hWaWV3ZXJfbWVudV9pdGVtIikpIC8vJE5PTi1OTFMtMSQKKwkJeworCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgYm9vbGVhbiBpc0VuYWJsZWQoKSB7CisJCQkJcmV0dXJuIGFjdGl2ZUVkaXRvclBhcnQgaW5zdGFuY2VvZiBJVmlld2VyUHJvdmlkZXI7CisJCQl9CisKKwkJCUBPdmVycmlkZQorCQkJcHVibGljIHZvaWQgcnVuKCkgeworCQkJCWlmIChhY3RpdmVFZGl0b3JQYXJ0IGluc3RhbmNlb2YgSVZpZXdlclByb3ZpZGVyKSB7CisJCQkJCVZpZXdlciB2aWV3ZXIgPSAoKElWaWV3ZXJQcm92aWRlcilhY3RpdmVFZGl0b3JQYXJ0KS5nZXRWaWV3ZXIoKTsKKwkJCQkJaWYgKHZpZXdlciAhPSBudWxsKSB7CisJCQkJCQl2aWV3ZXIucmVmcmVzaCgpOworCQkJCQl9CisJCQkJfQorCQkJfQorCQl9OworCisJLyoqCisJICogVGhpcyB3aWxsIGNvbnRhaW4gb25lIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5hY3Rpb24uQ3JlYXRlQ2hpbGRBY3Rpb259IGNvcnJlc3BvbmRpbmcgdG8gZWFjaCBkZXNjcmlwdG9yCisJICogZ2VuZXJhdGVkIGZvciB0aGUgY3VycmVudCBzZWxlY3Rpb24gYnkgdGhlIGl0ZW0gcHJvdmlkZXIuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIENvbGxlY3Rpb248SUFjdGlvbj4gY3JlYXRlQ2hpbGRBY3Rpb25zOworCisJLyoqCisJICogVGhpcyBpcyB0aGUgbWVudSBtYW5hZ2VyIGludG8gd2hpY2ggbWVudSBjb250cmlidXRpb24gaXRlbXMgc2hvdWxkIGJlIGFkZGVkIGZvciBDcmVhdGVDaGlsZCBhY3Rpb25zLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBJTWVudU1hbmFnZXIgY3JlYXRlQ2hpbGRNZW51TWFuYWdlcjsKKworCS8qKgorCSAqIFRoaXMgd2lsbCBjb250YWluIG9uZSB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkuYWN0aW9uLkNyZWF0ZVNpYmxpbmdBY3Rpb259IGNvcnJlc3BvbmRpbmcgdG8gZWFjaCBkZXNjcmlwdG9yCisJICogZ2VuZXJhdGVkIGZvciB0aGUgY3VycmVudCBzZWxlY3Rpb24gYnkgdGhlIGl0ZW0gcHJvdmlkZXIuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIENvbGxlY3Rpb248SUFjdGlvbj4gY3JlYXRlU2libGluZ0FjdGlvbnM7CisKKwkvKioKKwkgKiBUaGlzIGlzIHRoZSBtZW51IG1hbmFnZXIgaW50byB3aGljaCBtZW51IGNvbnRyaWJ1dGlvbiBpdGVtcyBzaG91bGQgYmUgYWRkZWQgZm9yIENyZWF0ZVNpYmxpbmcgYWN0aW9ucy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgSU1lbnVNYW5hZ2VyIGNyZWF0ZVNpYmxpbmdNZW51TWFuYWdlcjsKKworCS8qKgorCSAqIFRoaXMgY3JlYXRlcyBhbiBpbnN0YW5jZSBvZiB0aGUgY29udHJpYnV0b3IuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFNlcXVlbmNlckFjdGlvbkJhckNvbnRyaWJ1dG9yKCkgeworCQlzdXBlcihBRERJVElPTlNfTEFTVF9TVFlMRSk7CisJCWxvYWRSZXNvdXJjZUFjdGlvbiA9IG5ldyBMb2FkUmVzb3VyY2VBY3Rpb24oKTsKKwkJdmFsaWRhdGVBY3Rpb24gPSBuZXcgVmFsaWRhdGVBY3Rpb24oKTsKKwkJY29udHJvbEFjdGlvbiA9IG5ldyBDb250cm9sQWN0aW9uKCk7CisJfQorCisJLyoqCisJICogVGhpcyBhZGRzIFNlcGFyYXRvcnMgZm9yIGVkaXRvciBhZGRpdGlvbnMgdG8gdGhlIHRvb2wgYmFyLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGNvbnRyaWJ1dGVUb1Rvb2xCYXIoSVRvb2xCYXJNYW5hZ2VyIHRvb2xCYXJNYW5hZ2VyKSB7CisJCXRvb2xCYXJNYW5hZ2VyLmFkZChuZXcgU2VwYXJhdG9yKCJzZXF1ZW5jZXItc2V0dGluZ3MiKSk7IC8vJE5PTi1OTFMtMSQKKwkJdG9vbEJhck1hbmFnZXIuYWRkKG5ldyBTZXBhcmF0b3IoInNlcXVlbmNlci1hZGRpdGlvbnMiKSk7IC8vJE5PTi1OTFMtMSQKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFkZHMgdG8gdGhlIG1lbnUgYmFyIGEgbWVudSBhbmQgc29tZSBzZXBhcmF0b3JzIGZvciBlZGl0b3IgYWRkaXRpb25zLAorCSAqIGFzIHdlbGwgYXMgdGhlIHN1Yi1tZW51cyBmb3Igb2JqZWN0IGNyZWF0aW9uIGl0ZW1zLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGNvbnRyaWJ1dGVUb01lbnUoSU1lbnVNYW5hZ2VyIG1lbnVNYW5hZ2VyKSB7CisJCXN1cGVyLmNvbnRyaWJ1dGVUb01lbnUobWVudU1hbmFnZXIpOworCisJCUlNZW51TWFuYWdlciBzdWJtZW51TWFuYWdlciA9IG5ldyBNZW51TWFuYWdlcihDb3JlRWRpdG9yUGx1Z2luLklOU1RBTkNFLmdldFN0cmluZygiX1VJX1NlcXVlbmNlckVkaXRvcl9tZW51IiksICJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2VxdWVuY2VyTWVudUlEIik7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAorCQltZW51TWFuYWdlci5pbnNlcnRBZnRlcigiYWRkaXRpb25zIiwgc3VibWVudU1hbmFnZXIpOyAvLyROT04tTkxTLTEkCisJCXN1Ym1lbnVNYW5hZ2VyLmFkZChuZXcgU2VwYXJhdG9yKCJzZXR0aW5ncyIpKTsgLy8kTk9OLU5MUy0xJAorCQlzdWJtZW51TWFuYWdlci5hZGQobmV3IFNlcGFyYXRvcigiYWN0aW9ucyIpKTsgLy8kTk9OLU5MUy0xJAorCQlzdWJtZW51TWFuYWdlci5hZGQobmV3IFNlcGFyYXRvcigiYWRkaXRpb25zIikpOyAvLyROT04tTkxTLTEkCisJCXN1Ym1lbnVNYW5hZ2VyLmFkZChuZXcgU2VwYXJhdG9yKCJhZGRpdGlvbnMtZW5kIikpOyAvLyROT04tTkxTLTEkCisKKwkJLy8gUHJlcGFyZSBmb3IgQ3JlYXRlQ2hpbGQgaXRlbSBhZGRpdGlvbiBvciByZW1vdmFsLgorCQkvLworCQljcmVhdGVDaGlsZE1lbnVNYW5hZ2VyID0gbmV3IE1lbnVNYW5hZ2VyKENvcmVFZGl0b3JQbHVnaW4uSU5TVEFOQ0UuZ2V0U3RyaW5nKCJfVUlfQ3JlYXRlQ2hpbGRfbWVudV9pdGVtIikpOyAvLyROT04tTkxTLTEkCisJCXN1Ym1lbnVNYW5hZ2VyLmluc2VydEJlZm9yZSgiYWRkaXRpb25zIiwgY3JlYXRlQ2hpbGRNZW51TWFuYWdlcik7IC8vJE5PTi1OTFMtMSQKKworCQkvLyBQcmVwYXJlIGZvciBDcmVhdGVTaWJsaW5nIGl0ZW0gYWRkaXRpb24gb3IgcmVtb3ZhbC4KKwkJLy8KKwkJY3JlYXRlU2libGluZ01lbnVNYW5hZ2VyID0gbmV3IE1lbnVNYW5hZ2VyKENvcmVFZGl0b3JQbHVnaW4uSU5TVEFOQ0UuZ2V0U3RyaW5nKCJfVUlfQ3JlYXRlU2libGluZ19tZW51X2l0ZW0iKSk7IC8vJE5PTi1OTFMtMSQKKwkJc3VibWVudU1hbmFnZXIuaW5zZXJ0QmVmb3JlKCJhZGRpdGlvbnMiLCBjcmVhdGVTaWJsaW5nTWVudU1hbmFnZXIpOyAvLyROT04tTkxTLTEkCisKKwkJLy8gRm9yY2UgYW4gdXBkYXRlIGJlY2F1c2UgRWNsaXBzZSBoaWRlcyBlbXB0eSBtZW51cyBub3cuCisJCS8vCisJCXN1Ym1lbnVNYW5hZ2VyLmFkZE1lbnVMaXN0ZW5lcgorCQkJKG5ldyBJTWVudUxpc3RlbmVyKCkgeworCQkJCSBwdWJsaWMgdm9pZCBtZW51QWJvdXRUb1Nob3coSU1lbnVNYW5hZ2VyIG1lbnVNYW5hZ2VyKSB7CisJCQkJCSBtZW51TWFuYWdlci51cGRhdGVBbGwodHJ1ZSk7CisJCQkJIH0KKwkJCSB9KTsKKworCQlhZGRHbG9iYWxBY3Rpb25zKHN1Ym1lbnVNYW5hZ2VyKTsKKwl9CisKKwkvKioKKwkgKiBXaGVuIHRoZSBhY3RpdmUgZWRpdG9yIGNoYW5nZXMsIHRoaXMgcmVtZW1iZXJzIHRoZSBjaGFuZ2UgYW5kIHJlZ2lzdGVycyB3aXRoIGl0IGFzIGEgc2VsZWN0aW9uIHByb3ZpZGVyLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIHNldEFjdGl2ZUVkaXRvcihJRWRpdG9yUGFydCBwYXJ0KSB7CisJCXN1cGVyLnNldEFjdGl2ZUVkaXRvcihwYXJ0KTsKKwkJYWN0aXZlRWRpdG9yUGFydCA9IHBhcnQ7CisKKwkJLy8gU3dpdGNoIHRvIHRoZSBuZXcgc2VsZWN0aW9uIHByb3ZpZGVyLgorCQkvLworCQlpZiAoc2VsZWN0aW9uUHJvdmlkZXIgIT0gbnVsbCkgeworCQkJc2VsZWN0aW9uUHJvdmlkZXIucmVtb3ZlU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyKHRoaXMpOworCQl9CisJCWlmIChwYXJ0ID09IG51bGwpIHsKKwkJCXNlbGVjdGlvblByb3ZpZGVyID0gbnVsbDsKKwkJfQorCQllbHNlIHsKKwkJCXNlbGVjdGlvblByb3ZpZGVyID0gcGFydC5nZXRTaXRlKCkuZ2V0U2VsZWN0aW9uUHJvdmlkZXIoKTsKKwkJCXNlbGVjdGlvblByb3ZpZGVyLmFkZFNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcih0aGlzKTsKKworCQkJLy8gRmFrZSBhIHNlbGVjdGlvbiBjaGFuZ2VkIGV2ZW50IHRvIHVwZGF0ZSB0aGUgbWVudXMuCisJCQkvLworCQkJaWYgKHNlbGVjdGlvblByb3ZpZGVyLmdldFNlbGVjdGlvbigpICE9IG51bGwpIHsKKwkJCQlzZWxlY3Rpb25DaGFuZ2VkKG5ldyBTZWxlY3Rpb25DaGFuZ2VkRXZlbnQoc2VsZWN0aW9uUHJvdmlkZXIsIHNlbGVjdGlvblByb3ZpZGVyLmdldFNlbGVjdGlvbigpKSk7CisJCQl9CisJCX0KKwl9CisKKwkvKioKKwkgKiBUaGlzIGltcGxlbWVudHMge0BsaW5rIG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcn0sCisJICogaGFuZGxpbmcge0BsaW5rIG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuU2VsZWN0aW9uQ2hhbmdlZEV2ZW50fXMgYnkgcXVlcnlpbmcgZm9yIHRoZSBjaGlsZHJlbiBhbmQgc2libGluZ3MKKwkgKiB0aGF0IGNhbiBiZSBhZGRlZCB0byB0aGUgc2VsZWN0ZWQgb2JqZWN0IGFuZCB1cGRhdGluZyB0aGUgbWVudXMgYWNjb3JkaW5nbHkuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgc2VsZWN0aW9uQ2hhbmdlZChTZWxlY3Rpb25DaGFuZ2VkRXZlbnQgZXZlbnQpIHsKKwkJLy8gUmVtb3ZlIGFueSBtZW51IGl0ZW1zIGZvciBvbGQgc2VsZWN0aW9uLgorCQkvLworCQlpZiAoY3JlYXRlQ2hpbGRNZW51TWFuYWdlciAhPSBudWxsKSB7CisJCQlkZXBvcHVsYXRlTWFuYWdlcihjcmVhdGVDaGlsZE1lbnVNYW5hZ2VyLCBjcmVhdGVDaGlsZEFjdGlvbnMpOworCQl9CisJCWlmIChjcmVhdGVTaWJsaW5nTWVudU1hbmFnZXIgIT0gbnVsbCkgeworCQkJZGVwb3B1bGF0ZU1hbmFnZXIoY3JlYXRlU2libGluZ01lbnVNYW5hZ2VyLCBjcmVhdGVTaWJsaW5nQWN0aW9ucyk7CisJCX0KKworCQkvLyBRdWVyeSB0aGUgbmV3IHNlbGVjdGlvbiBmb3IgYXBwcm9wcmlhdGUgbmV3IGNoaWxkL3NpYmxpbmcgZGVzY3JpcHRvcnMKKwkJLy8KKwkJQ29sbGVjdGlvbjw/PiBuZXdDaGlsZERlc2NyaXB0b3JzID0gbnVsbDsKKwkJQ29sbGVjdGlvbjw/PiBuZXdTaWJsaW5nRGVzY3JpcHRvcnMgPSBudWxsOworCisJCUlTZWxlY3Rpb24gc2VsZWN0aW9uID0gZXZlbnQuZ2V0U2VsZWN0aW9uKCk7CisJCWlmIChzZWxlY3Rpb24gaW5zdGFuY2VvZiBJU3RydWN0dXJlZFNlbGVjdGlvbiAmJiAoKElTdHJ1Y3R1cmVkU2VsZWN0aW9uKXNlbGVjdGlvbikuc2l6ZSgpID09IDEpIHsKKwkJCU9iamVjdCBvYmplY3QgPSAoKElTdHJ1Y3R1cmVkU2VsZWN0aW9uKXNlbGVjdGlvbikuZ2V0Rmlyc3RFbGVtZW50KCk7CisKKwkJCUVkaXRpbmdEb21haW4gZG9tYWluID0gKChJRWRpdGluZ0RvbWFpblByb3ZpZGVyKWFjdGl2ZUVkaXRvclBhcnQpLmdldEVkaXRpbmdEb21haW4oKTsKKworCQkJbmV3Q2hpbGREZXNjcmlwdG9ycyA9IGRvbWFpbi5nZXROZXdDaGlsZERlc2NyaXB0b3JzKG9iamVjdCwgbnVsbCk7CisJCQluZXdTaWJsaW5nRGVzY3JpcHRvcnMgPSBkb21haW4uZ2V0TmV3Q2hpbGREZXNjcmlwdG9ycyhudWxsLCBvYmplY3QpOworCQl9CisKKwkJLy8gR2VuZXJhdGUgYWN0aW9ucyBmb3Igc2VsZWN0aW9uOyBwb3B1bGF0ZSBhbmQgcmVkcmF3IHRoZSBtZW51cy4KKwkJLy8KKwkJY3JlYXRlQ2hpbGRBY3Rpb25zID0gZ2VuZXJhdGVDcmVhdGVDaGlsZEFjdGlvbnMobmV3Q2hpbGREZXNjcmlwdG9ycywgc2VsZWN0aW9uKTsKKwkJY3JlYXRlU2libGluZ0FjdGlvbnMgPSBnZW5lcmF0ZUNyZWF0ZVNpYmxpbmdBY3Rpb25zKG5ld1NpYmxpbmdEZXNjcmlwdG9ycywgc2VsZWN0aW9uKTsKKworCQlpZiAoY3JlYXRlQ2hpbGRNZW51TWFuYWdlciAhPSBudWxsKSB7CisJCQlwb3B1bGF0ZU1hbmFnZXIoY3JlYXRlQ2hpbGRNZW51TWFuYWdlciwgY3JlYXRlQ2hpbGRBY3Rpb25zLCBudWxsKTsKKwkJCWNyZWF0ZUNoaWxkTWVudU1hbmFnZXIudXBkYXRlKHRydWUpOworCQl9CisJCWlmIChjcmVhdGVTaWJsaW5nTWVudU1hbmFnZXIgIT0gbnVsbCkgeworCQkJcG9wdWxhdGVNYW5hZ2VyKGNyZWF0ZVNpYmxpbmdNZW51TWFuYWdlciwgY3JlYXRlU2libGluZ0FjdGlvbnMsIG51bGwpOworCQkJY3JlYXRlU2libGluZ01lbnVNYW5hZ2VyLnVwZGF0ZSh0cnVlKTsKKwkJfQorCX0KKworCS8qKgorCSAqIFRoaXMgZ2VuZXJhdGVzIGEge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmFjdGlvbi5DcmVhdGVDaGlsZEFjdGlvbn0gZm9yIGVhY2ggb2JqZWN0IGluIDxjb2RlPmRlc2NyaXB0b3JzPC9jb2RlPiwKKwkgKiBhbmQgcmV0dXJucyB0aGUgY29sbGVjdGlvbiBvZiB0aGVzZSBhY3Rpb25zLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBDb2xsZWN0aW9uPElBY3Rpb24+IGdlbmVyYXRlQ3JlYXRlQ2hpbGRBY3Rpb25zKENvbGxlY3Rpb248Pz4gZGVzY3JpcHRvcnMsIElTZWxlY3Rpb24gc2VsZWN0aW9uKSB7CisJCUNvbGxlY3Rpb248SUFjdGlvbj4gYWN0aW9ucyA9IG5ldyBBcnJheUxpc3Q8SUFjdGlvbj4oKTsKKwkJaWYgKGRlc2NyaXB0b3JzICE9IG51bGwpIHsKKwkJCWZvciAoT2JqZWN0IGRlc2NyaXB0b3IgOiBkZXNjcmlwdG9ycykgeworCQkJCWFjdGlvbnMuYWRkKG5ldyBDcmVhdGVDaGlsZEFjdGlvbihhY3RpdmVFZGl0b3JQYXJ0LCBzZWxlY3Rpb24sIGRlc2NyaXB0b3IpKTsKKwkJCX0KKwkJfQorCQlyZXR1cm4gYWN0aW9uczsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGdlbmVyYXRlcyBhIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5hY3Rpb24uQ3JlYXRlU2libGluZ0FjdGlvbn0gZm9yIGVhY2ggb2JqZWN0IGluIDxjb2RlPmRlc2NyaXB0b3JzPC9jb2RlPiwKKwkgKiBhbmQgcmV0dXJucyB0aGUgY29sbGVjdGlvbiBvZiB0aGVzZSBhY3Rpb25zLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBDb2xsZWN0aW9uPElBY3Rpb24+IGdlbmVyYXRlQ3JlYXRlU2libGluZ0FjdGlvbnMoQ29sbGVjdGlvbjw/PiBkZXNjcmlwdG9ycywgSVNlbGVjdGlvbiBzZWxlY3Rpb24pIHsKKwkJQ29sbGVjdGlvbjxJQWN0aW9uPiBhY3Rpb25zID0gbmV3IEFycmF5TGlzdDxJQWN0aW9uPigpOworCQlpZiAoZGVzY3JpcHRvcnMgIT0gbnVsbCkgeworCQkJZm9yIChPYmplY3QgZGVzY3JpcHRvciA6IGRlc2NyaXB0b3JzKSB7CisJCQkJYWN0aW9ucy5hZGQobmV3IENyZWF0ZVNpYmxpbmdBY3Rpb24oYWN0aXZlRWRpdG9yUGFydCwgc2VsZWN0aW9uLCBkZXNjcmlwdG9yKSk7CisJCQl9CisJCX0KKwkJcmV0dXJuIGFjdGlvbnM7CisJfQorCisJLyoqCisJICogVGhpcyBwb3B1bGF0ZXMgdGhlIHNwZWNpZmllZCA8Y29kZT5tYW5hZ2VyPC9jb2RlPiB3aXRoIHtAbGluayBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uQWN0aW9uQ29udHJpYnV0aW9uSXRlbX1zCisJICogYmFzZWQgb24gdGhlIHtAbGluayBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSUFjdGlvbn1zIGNvbnRhaW5lZCBpbiB0aGUgPGNvZGU+YWN0aW9uczwvY29kZT4gY29sbGVjdGlvbiwKKwkgKiBieSBpbnNlcnRpbmcgdGhlbSBiZWZvcmUgdGhlIHNwZWNpZmllZCBjb250cmlidXRpb24gaXRlbSA8Y29kZT5jb250cmlidXRpb25JRDwvY29kZT4uCisJICogSWYgPGNvZGU+Y29udHJpYnV0aW9uSUQ8L2NvZGU+IGlzIDxjb2RlPm51bGw8L2NvZGU+LCB0aGV5IGFyZSBzaW1wbHkgYWRkZWQuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgcG9wdWxhdGVNYW5hZ2VyKElDb250cmlidXRpb25NYW5hZ2VyIG1hbmFnZXIsIENvbGxlY3Rpb248PyBleHRlbmRzIElBY3Rpb24+IGFjdGlvbnMsIFN0cmluZyBjb250cmlidXRpb25JRCkgeworCQlpZiAoYWN0aW9ucyAhPSBudWxsKSB7CisJCQlmb3IgKElBY3Rpb24gYWN0aW9uIDogYWN0aW9ucykgeworCQkJCWlmIChjb250cmlidXRpb25JRCAhPSBudWxsKSB7CisJCQkJCW1hbmFnZXIuaW5zZXJ0QmVmb3JlKGNvbnRyaWJ1dGlvbklELCBhY3Rpb24pOworCQkJCX0KKwkJCQllbHNlIHsKKwkJCQkJbWFuYWdlci5hZGQoYWN0aW9uKTsKKwkJCQl9CisJCQl9CisJCX0KKwl9CisJCQorCS8qKgorCSAqIFRoaXMgcmVtb3ZlcyBmcm9tIHRoZSBzcGVjaWZpZWQgPGNvZGU+bWFuYWdlcjwvY29kZT4gYWxsIHtAbGluayBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uQWN0aW9uQ29udHJpYnV0aW9uSXRlbX1zCisJICogYmFzZWQgb24gdGhlIHtAbGluayBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSUFjdGlvbn1zIGNvbnRhaW5lZCBpbiB0aGUgPGNvZGU+YWN0aW9uczwvY29kZT4gY29sbGVjdGlvbi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBkZXBvcHVsYXRlTWFuYWdlcihJQ29udHJpYnV0aW9uTWFuYWdlciBtYW5hZ2VyLCBDb2xsZWN0aW9uPD8gZXh0ZW5kcyBJQWN0aW9uPiBhY3Rpb25zKSB7CisJCWlmIChhY3Rpb25zICE9IG51bGwpIHsKKwkJCUlDb250cmlidXRpb25JdGVtW10gaXRlbXMgPSBtYW5hZ2VyLmdldEl0ZW1zKCk7CisJCQlmb3IgKGludCBpID0gMDsgaSA8IGl0ZW1zLmxlbmd0aDsgaSsrKSB7CisJCQkJLy8gTG9vayBpbnRvIFN1YkNvbnRyaWJ1dGlvbkl0ZW1zCisJCQkJLy8KKwkJCQlJQ29udHJpYnV0aW9uSXRlbSBjb250cmlidXRpb25JdGVtID0gaXRlbXNbaV07CisJCQkJd2hpbGUgKGNvbnRyaWJ1dGlvbkl0ZW0gaW5zdGFuY2VvZiBTdWJDb250cmlidXRpb25JdGVtKSB7CisJCQkJCWNvbnRyaWJ1dGlvbkl0ZW0gPSAoKFN1YkNvbnRyaWJ1dGlvbkl0ZW0pY29udHJpYnV0aW9uSXRlbSkuZ2V0SW5uZXJJdGVtKCk7CisJCQkJfQorCisJCQkJLy8gRGVsZXRlIHRoZSBBY3Rpb25Db250cmlidXRpb25JdGVtcyB3aXRoIG1hdGNoaW5nIGFjdGlvbi4KKwkJCQkvLworCQkJCWlmIChjb250cmlidXRpb25JdGVtIGluc3RhbmNlb2YgQWN0aW9uQ29udHJpYnV0aW9uSXRlbSkgeworCQkJCQlJQWN0aW9uIGFjdGlvbiA9ICgoQWN0aW9uQ29udHJpYnV0aW9uSXRlbSljb250cmlidXRpb25JdGVtKS5nZXRBY3Rpb24oKTsKKwkJCQkJaWYgKGFjdGlvbnMuY29udGFpbnMoYWN0aW9uKSkgeworCQkJCQkJbWFuYWdlci5yZW1vdmUoY29udHJpYnV0aW9uSXRlbSk7CisJCQkJCX0KKwkJCQl9CisJCQl9CisJCX0KKwl9CisKKwkvKioKKwkgKiBUaGlzIHBvcHVsYXRlcyB0aGUgcG9wLXVwIG1lbnUgYmVmb3JlIGl0IGFwcGVhcnMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgbWVudUFib3V0VG9TaG93KElNZW51TWFuYWdlciBtZW51TWFuYWdlcikgeworCQlzdXBlci5tZW51QWJvdXRUb1Nob3cobWVudU1hbmFnZXIpOworCQlNZW51TWFuYWdlciBzdWJtZW51TWFuYWdlciA9IG51bGw7CisKKwkJc3VibWVudU1hbmFnZXIgPSBuZXcgTWVudU1hbmFnZXIoQ29yZUVkaXRvclBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoIl9VSV9DcmVhdGVDaGlsZF9tZW51X2l0ZW0iKSk7IC8vJE5PTi1OTFMtMSQKKwkJcG9wdWxhdGVNYW5hZ2VyKHN1Ym1lbnVNYW5hZ2VyLCBjcmVhdGVDaGlsZEFjdGlvbnMsIG51bGwpOworCQltZW51TWFuYWdlci5pbnNlcnRCZWZvcmUoImVkaXQiLCBzdWJtZW51TWFuYWdlcik7IC8vJE5PTi1OTFMtMSQKKworCQlzdWJtZW51TWFuYWdlciA9IG5ldyBNZW51TWFuYWdlcihDb3JlRWRpdG9yUGx1Z2luLklOU1RBTkNFLmdldFN0cmluZygiX1VJX0NyZWF0ZVNpYmxpbmdfbWVudV9pdGVtIikpOyAvLyROT04tTkxTLTEkCisJCXBvcHVsYXRlTWFuYWdlcihzdWJtZW51TWFuYWdlciwgY3JlYXRlU2libGluZ0FjdGlvbnMsIG51bGwpOworCQltZW51TWFuYWdlci5pbnNlcnRCZWZvcmUoImVkaXQiLCBzdWJtZW51TWFuYWdlcik7IC8vJE5PTi1OTFMtMSQKKwl9CisKKwkvKioKKwkgKiBUaGlzIGluc2VydHMgZ2xvYmFsIGFjdGlvbnMgYmVmb3JlIHRoZSAiYWRkaXRpb25zLWVuZCIgc2VwYXJhdG9yLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIGFkZEdsb2JhbEFjdGlvbnMoSU1lbnVNYW5hZ2VyIG1lbnVNYW5hZ2VyKSB7CisJCW1lbnVNYW5hZ2VyLmluc2VydEFmdGVyKCJhZGRpdGlvbnMtZW5kIiwgbmV3IFNlcGFyYXRvcigidWktYWN0aW9ucyIpKTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCisJCW1lbnVNYW5hZ2VyLmluc2VydEFmdGVyKCJ1aS1hY3Rpb25zIiwgc2hvd1Byb3BlcnRpZXNWaWV3QWN0aW9uKTsgLy8kTk9OLU5MUy0xJAorCisJCXJlZnJlc2hWaWV3ZXJBY3Rpb24uc2V0RW5hYmxlZChyZWZyZXNoVmlld2VyQWN0aW9uLmlzRW5hYmxlZCgpKTsJCQorCQltZW51TWFuYWdlci5pbnNlcnRBZnRlcigidWktYWN0aW9ucyIsIHJlZnJlc2hWaWV3ZXJBY3Rpb24pOyAvLyROT04tTkxTLTEkCisKKwkJc3VwZXIuYWRkR2xvYmFsQWN0aW9ucyhtZW51TWFuYWdlcik7CisJfQorCisJLyoqCisJICogVGhpcyBlbnN1cmVzIHRoYXQgYSBkZWxldGUgYWN0aW9uIHdpbGwgY2xlYW4gdXAgYWxsIHJlZmVyZW5jZXMgdG8gZGVsZXRlZCBvYmplY3RzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCBib29sZWFuIHJlbW92ZUFsbFJlZmVyZW5jZXNPbkRlbGV0ZSgpIHsKKwkJcmV0dXJuIHRydWU7CisJfQorCit9CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9zZXF1ZW5jZXIvcHJlc2VudGF0aW9uL1NlcXVlbmNlckVkaXRvci5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvc2VxdWVuY2VyL3ByZXNlbnRhdGlvbi9TZXF1ZW5jZXJFZGl0b3IuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMDYzYmU4Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvc2VxdWVuY2VyL3ByZXNlbnRhdGlvbi9TZXF1ZW5jZXJFZGl0b3IuamF2YQpAQCAtMCwwICsxLDE2MzAgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNlcXVlbmNlci5wcmVzZW50YXRpb247CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDcsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtOworaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7CitpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247CitpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb25zOworaW1wb3J0IGphdmEudXRpbC5FdmVudE9iamVjdDsKK2ltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKK2ltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7CitpbXBvcnQgamF2YS51dGlsLkxpbmtlZEhhc2hNYXA7CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CitpbXBvcnQgamF2YS51dGlsLk1hcDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklGaWxlOworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklNYXJrZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVJlc291cmNlOworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklSZXNvdXJjZUNoYW5nZUV2ZW50OworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklSZXNvdXJjZUNoYW5nZUxpc3RlbmVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklSZXNvdXJjZURlbHRhOworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklSZXNvdXJjZURlbHRhVmlzaXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5SZXNvdXJjZXNQbHVnaW47CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkNvcmVFeGNlcHRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQYXRoOworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUHJvZ3Jlc3NNb25pdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5OdWxsUHJvZ3Jlc3NNb25pdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24uY29tbWFuZC5CYXNpY0NvbW1hbmRTdGFjazsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLmNvbW1hbmQuQ29tbWFuZDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLmNvbW1hbmQuQ29tbWFuZFN0YWNrOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24uY29tbWFuZC5Db21tYW5kU3RhY2tMaXN0ZW5lcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5BZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51aS5NYXJrZXJIZWxwZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51aS5lZGl0b3IuUHJvYmxlbUVkaXRvclBhcnQ7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51aS52aWV3ZXIuSVZpZXdlclByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5CYXNpY0RpYWdub3N0aWM7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLkRpYWdub3N0aWM7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlVSSTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRVZhbGlkYXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUucHJvdmlkZXIuRWNvcmVJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUucmVzb3VyY2UuUmVzb3VyY2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnJlc291cmNlLlJlc291cmNlU2V0OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS51dGlsLkVDb250ZW50QWRhcHRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUudXRpbC5FY29yZVV0aWw7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQuZG9tYWluLkFkYXB0ZXJGYWN0b3J5RWRpdGluZ0RvbWFpbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5kb21haW4uRWRpdGluZ0RvbWFpbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5kb21haW4uSUVkaXRpbmdEb21haW5Qcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5BZGFwdGVyRmFjdG9yeUl0ZW1EZWxlZ2F0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuQ29tcG9zZWRBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5SZWZsZWN0aXZlSXRlbVByb3ZpZGVyQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIucmVzb3VyY2UuUmVzb3VyY2VJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5hY3Rpb24uRWRpdGluZ0RvbWFpbkFjdGlvbkJhckNvbnRyaWJ1dG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmNlbGxlZGl0b3IuQWRhcHRlckZhY3RvcnlUcmVlRWRpdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmRuZC5FZGl0aW5nRG9tYWluVmlld2VyRHJvcEFkYXB0ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkuZG5kLkxvY2FsVHJhbnNmZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkuZG5kLlZpZXdlckRyYWdBZGFwdGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLnByb3ZpZGVyLkFkYXB0ZXJGYWN0b3J5Q29udGVudFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLnByb3ZpZGVyLkFkYXB0ZXJGYWN0b3J5TGFiZWxQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5wcm92aWRlci5VbndyYXBwaW5nU2VsZWN0aW9uUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkudXRpbC5FZGl0VUlNYXJrZXJIZWxwZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkudXRpbC5FZGl0VUlVdGlsOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLnZpZXcuRXh0ZW5kZWRQcm9wZXJ0eVNoZWV0UGFnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSU1lbnVMaXN0ZW5lcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSU1lbnVNYW5hZ2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JU3RhdHVzTGluZU1hbmFnZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklUb29sQmFyTWFuYWdlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uTWVudU1hbmFnZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLlNlcGFyYXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5kaWFsb2dzLk1lc3NhZ2VEaWFsb2c7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuZGlhbG9ncy5Qcm9ncmVzc01vbml0b3JEaWFsb2c7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudXRpbC5Mb2NhbFNlbGVjdGlvblRyYW5zZmVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU3RydWN0dXJlZFNlbGVjdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlNlbGVjdGlvbkNoYW5nZWRFdmVudDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlN0cnVjdHVyZWRTZWxlY3Rpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5TdHJ1Y3R1cmVkVmlld2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuVHJlZVZpZXdlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlZpZXdlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuU1RFTVhNSVJlc291cmNlRmFjdG9yeUltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5wcmVzZW50YXRpb24uQ29yZUVkaXRvclBsdWdpbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLnByb3ZpZGVyLkNvbW1vbkl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5leHBlcmltZW50LnByb3ZpZGVyLkV4cGVyaW1lbnRJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGgucHJvdmlkZXIuR3JhcGhJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubG9nZ2VyLnByb3ZpZGVyLkxvZ2dlckl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5wcm92aWRlci5Nb2RlbEl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5wcm92aWRlci5Nb2RpZmllckl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUucHJvdmlkZXIuUHJlZGljYXRlSXRlbVByb3ZpZGVyQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNjZW5hcmlvLnByb3ZpZGVyLlNjZW5hcmlvSXRlbVByb3ZpZGVyQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNlcXVlbmNlci5wcm92aWRlci5TZXF1ZW5jZXJJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc29sdmVyLnByb3ZpZGVyLlNvbHZlckl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS50cmlnZ2VyLnByb3ZpZGVyLlRyaWdnZXJJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuU1dUOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5jdXN0b20uQ1RhYkZvbGRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZG5kLkRORDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZG5kLlRyYW5zZmVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuQ29udHJvbEFkYXB0ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5Db250cm9sRXZlbnQ7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmdyYXBoaWNzLlBvaW50OworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5NZW51OworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlRyZWU7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuSUFjdGlvbkJhcnM7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuSUVkaXRvcklucHV0OworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklFZGl0b3JQYXJ0OworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklFZGl0b3JTaXRlOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklQYXJ0TGlzdGVuZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaFBhcnQ7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuUGFydEluaXRFeGNlcHRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuYWN0aW9ucy5Xb3Jrc3BhY2VNb2RpZnlPcGVyYXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuZGlhbG9ncy5TYXZlQXNEaWFsb2c7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuaWRlLklHb3RvTWFya2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLnBhcnQuRmlsZUVkaXRvcklucHV0OworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLnBhcnQuTXVsdGlQYWdlRWRpdG9yUGFydDsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS52aWV3cy5jb250ZW50b3V0bGluZS5Db250ZW50T3V0bGluZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS52aWV3cy5jb250ZW50b3V0bGluZS5Db250ZW50T3V0bGluZVBhZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkudmlld3MuY29udGVudG91dGxpbmUuSUNvbnRlbnRPdXRsaW5lUGFnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS52aWV3cy5wcm9wZXJ0aWVzLklQcm9wZXJ0eVNoZWV0UGFnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS52aWV3cy5wcm9wZXJ0aWVzLlByb3BlcnR5U2hlZXQ7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkudmlld3MucHJvcGVydGllcy5Qcm9wZXJ0eVNoZWV0UGFnZTsKKworQFN1cHByZXNzV2FybmluZ3MoImFsbCIpCisvKioKKyAqIFRoaXMgaXMgYW4gZXhhbXBsZSBvZiBhIFNlcXVlbmNlciBtb2RlbCBlZGl0b3IuCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBTZXF1ZW5jZXJFZGl0b3IKKwlleHRlbmRzIE11bHRpUGFnZUVkaXRvclBhcnQKKwlpbXBsZW1lbnRzIElFZGl0aW5nRG9tYWluUHJvdmlkZXIsIElTZWxlY3Rpb25Qcm92aWRlciwgSU1lbnVMaXN0ZW5lciwgSVZpZXdlclByb3ZpZGVyIHsKKwkvKioKKwkgKiBUaGlzIGtlZXBzIHRyYWNrIG9mIHRoZSBlZGl0aW5nIGRvbWFpbiB0aGF0IGlzIHVzZWQgdG8gdHJhY2sgYWxsIGNoYW5nZXMgdG8gdGhlIG1vZGVsLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBBZGFwdGVyRmFjdG9yeUVkaXRpbmdEb21haW4gZWRpdGluZ0RvbWFpbjsKKworCS8qKgorCSAqIFRoaXMgaXMgdGhlIG9uZSBhZGFwdGVyIGZhY3RvcnkgdXNlZCBmb3IgcHJvdmlkaW5nIHZpZXdzIG9mIHRoZSBtb2RlbC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgQ29tcG9zZWRBZGFwdGVyRmFjdG9yeSBhZGFwdGVyRmFjdG9yeTsKKworCS8qKgorCSAqIFRoaXMgaXMgdGhlIGNvbnRlbnQgb3V0bGluZSBwYWdlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBJQ29udGVudE91dGxpbmVQYWdlIGNvbnRlbnRPdXRsaW5lUGFnZTsKKworCS8qKgorCSAqIFRoaXMgaXMgYSBrbHVkZ2UuLi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgSVN0YXR1c0xpbmVNYW5hZ2VyIGNvbnRlbnRPdXRsaW5lU3RhdHVzTGluZU1hbmFnZXI7CisKKwkvKioKKwkgKiBUaGlzIGlzIHRoZSBjb250ZW50IG91dGxpbmUgcGFnZSdzIHZpZXdlci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgVHJlZVZpZXdlciBjb250ZW50T3V0bGluZVZpZXdlcjsKKworCS8qKgorCSAqIFRoaXMgaXMgdGhlIHByb3BlcnR5IHNoZWV0IHBhZ2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIFByb3BlcnR5U2hlZXRQYWdlIHByb3BlcnR5U2hlZXRQYWdlOworCisJLyoqCisJICogVGhpcyBpcyB0aGUgdmlld2VyIHRoYXQgc2hhZG93cyB0aGUgc2VsZWN0aW9uIGluIHRoZSBjb250ZW50IG91dGxpbmUuCisJICogVGhlIHBhcmVudCByZWxhdGlvbiBtdXN0IGJlIGNvcnJlY3RseSBkZWZpbmVkIGZvciB0aGlzIHRvIHdvcmsuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIFRyZWVWaWV3ZXIgc2VsZWN0aW9uVmlld2VyOworCisJLyoqCisJICogVGhpcyBrZWVwcyB0cmFjayBvZiB0aGUgYWN0aXZlIGNvbnRlbnQgdmlld2VyLCB3aGljaCBtYXkgYmUgZWl0aGVyIG9uZSBvZiB0aGUgdmlld2VycyBpbiB0aGUgcGFnZXMgb3IgdGhlIGNvbnRlbnQgb3V0bGluZSB2aWV3ZXIuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIFZpZXdlciBjdXJyZW50Vmlld2VyOworCisJLyoqCisJICogVGhpcyBsaXN0ZW5zIHRvIHdoaWNoIGV2ZXIgdmlld2VyIGlzIGFjdGl2ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lciBzZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXI7CisKKwkvKioKKwkgKiBUaGlzIGtlZXBzIHRyYWNrIG9mIGFsbCB0aGUge0BsaW5rIG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcn1zIHRoYXQgYXJlIGxpc3RlbmluZyB0byB0aGlzIGVkaXRvci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgQ29sbGVjdGlvbjxJU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyPiBzZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXJzID0gbmV3IEFycmF5TGlzdDxJU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyPigpOworCisJLyoqCisJICogVGhpcyBrZWVwcyB0cmFjayBvZiB0aGUgc2VsZWN0aW9uIG9mIHRoZSBlZGl0b3IgYXMgYSB3aG9sZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgSVNlbGVjdGlvbiBlZGl0b3JTZWxlY3Rpb24gPSBTdHJ1Y3R1cmVkU2VsZWN0aW9uLkVNUFRZOworCisJLyoqCisJICogVGhlIE1hcmtlckhlbHBlciBpcyByZXNwb25zaWJsZSBmb3IgY3JlYXRpbmcgd29ya3NwYWNlIHJlc291cmNlIG1hcmtlcnMgcHJlc2VudGVkCisJICogaW4gRWNsaXBzZSdzIFByb2JsZW1zIFZpZXcuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIE1hcmtlckhlbHBlciBtYXJrZXJIZWxwZXIgPSBuZXcgRWRpdFVJTWFya2VySGVscGVyKCk7CisKKwkvKioKKwkgKiBUaGlzIGxpc3RlbnMgZm9yIHdoZW4gdGhlIG91dGxpbmUgYmVjb21lcyBhY3RpdmUKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgSVBhcnRMaXN0ZW5lciBwYXJ0TGlzdGVuZXIgPQorCQluZXcgSVBhcnRMaXN0ZW5lcigpIHsKKwkJCXB1YmxpYyB2b2lkIHBhcnRBY3RpdmF0ZWQoSVdvcmtiZW5jaFBhcnQgcCkgeworCQkJCWlmIChwIGluc3RhbmNlb2YgQ29udGVudE91dGxpbmUpIHsKKwkJCQkJaWYgKCgoQ29udGVudE91dGxpbmUpcCkuZ2V0Q3VycmVudFBhZ2UoKSA9PSBjb250ZW50T3V0bGluZVBhZ2UpIHsKKwkJCQkJCWdldEFjdGlvbkJhckNvbnRyaWJ1dG9yKCkuc2V0QWN0aXZlRWRpdG9yKFNlcXVlbmNlckVkaXRvci50aGlzKTsKKworCQkJCQkJc2V0Q3VycmVudFZpZXdlcihjb250ZW50T3V0bGluZVZpZXdlcik7CisJCQkJCX0KKwkJCQl9CisJCQkJZWxzZSBpZiAocCBpbnN0YW5jZW9mIFByb3BlcnR5U2hlZXQpIHsKKwkJCQkJaWYgKCgoUHJvcGVydHlTaGVldClwKS5nZXRDdXJyZW50UGFnZSgpID09IHByb3BlcnR5U2hlZXRQYWdlKSB7CisJCQkJCQlnZXRBY3Rpb25CYXJDb250cmlidXRvcigpLnNldEFjdGl2ZUVkaXRvcihTZXF1ZW5jZXJFZGl0b3IudGhpcyk7CisJCQkJCQloYW5kbGVBY3RpdmF0ZSgpOworCQkJCQl9CisJCQkJfQorCQkJCWVsc2UgaWYgKHAgPT0gU2VxdWVuY2VyRWRpdG9yLnRoaXMpIHsKKwkJCQkJaGFuZGxlQWN0aXZhdGUoKTsKKwkJCQl9CisJCQl9CisJCQlwdWJsaWMgdm9pZCBwYXJ0QnJvdWdodFRvVG9wKElXb3JrYmVuY2hQYXJ0IHApIHsKKwkJCQkvLyBJZ25vcmUuCisJCQl9CisJCQlwdWJsaWMgdm9pZCBwYXJ0Q2xvc2VkKElXb3JrYmVuY2hQYXJ0IHApIHsKKwkJCQkvLyBJZ25vcmUuCisJCQl9CisJCQlwdWJsaWMgdm9pZCBwYXJ0RGVhY3RpdmF0ZWQoSVdvcmtiZW5jaFBhcnQgcCkgeworCQkJCS8vIElnbm9yZS4KKwkJCX0KKwkJCXB1YmxpYyB2b2lkIHBhcnRPcGVuZWQoSVdvcmtiZW5jaFBhcnQgcCkgeworCQkJCS8vIElnbm9yZS4KKwkJCX0KKwkJfTsKKworCS8qKgorCSAqIFJlc291cmNlcyB0aGF0IGhhdmUgYmVlbiByZW1vdmVkIHNpbmNlIGxhc3QgYWN0aXZhdGlvbi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgQ29sbGVjdGlvbjxSZXNvdXJjZT4gcmVtb3ZlZFJlc291cmNlcyA9IG5ldyBBcnJheUxpc3Q8UmVzb3VyY2U+KCk7CisKKwkvKioKKwkgKiBSZXNvdXJjZXMgdGhhdCBoYXZlIGJlZW4gY2hhbmdlZCBzaW5jZSBsYXN0IGFjdGl2YXRpb24uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIENvbGxlY3Rpb248UmVzb3VyY2U+IGNoYW5nZWRSZXNvdXJjZXMgPSBuZXcgQXJyYXlMaXN0PFJlc291cmNlPigpOworCisJLyoqCisJICogUmVzb3VyY2VzIHRoYXQgaGF2ZSBiZWVuIHNhdmVkLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBDb2xsZWN0aW9uPFJlc291cmNlPiBzYXZlZFJlc291cmNlcyA9IG5ldyBBcnJheUxpc3Q8UmVzb3VyY2U+KCk7CisKKwkvKioKKwkgKiBNYXAgdG8gc3RvcmUgdGhlIGRpYWdub3N0aWMgYXNzb2NpYXRlZCB3aXRoIGEgcmVzb3VyY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIE1hcDxSZXNvdXJjZSwgRGlhZ25vc3RpYz4gcmVzb3VyY2VUb0RpYWdub3N0aWNNYXAgPSBuZXcgTGlua2VkSGFzaE1hcDxSZXNvdXJjZSwgRGlhZ25vc3RpYz4oKTsKKworCS8qKgorCSAqIENvbnRyb2xzIHdoZXRoZXIgdGhlIHByb2JsZW0gaW5kaWNhdGlvbiBzaG91bGQgYmUgdXBkYXRlZC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgYm9vbGVhbiB1cGRhdGVQcm9ibGVtSW5kaWNhdGlvbiA9IHRydWU7CisKKwkvKioKKwkgKiBBZGFwdGVyIHVzZWQgdG8gdXBkYXRlIHRoZSBwcm9ibGVtIGluZGljYXRpb24gd2hlbiByZXNvdXJjZXMgYXJlIGRlbWFuZGVkIGxvYWRlZC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgRUNvbnRlbnRBZGFwdGVyIHByb2JsZW1JbmRpY2F0aW9uQWRhcHRlciA9IAorCQluZXcgRUNvbnRlbnRBZGFwdGVyKCkgeworCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgdm9pZCBub3RpZnlDaGFuZ2VkKE5vdGlmaWNhdGlvbiBub3RpZmljYXRpb24pIHsKKwkJCQlpZiAobm90aWZpY2F0aW9uLmdldE5vdGlmaWVyKCkgaW5zdGFuY2VvZiBSZXNvdXJjZSkgeworCQkJCQlzd2l0Y2ggKG5vdGlmaWNhdGlvbi5nZXRGZWF0dXJlSUQoUmVzb3VyY2UuY2xhc3MpKSB7CisJCQkJCQljYXNlIFJlc291cmNlLlJFU09VUkNFX19JU19MT0FERUQ6CisJCQkJCQljYXNlIFJlc291cmNlLlJFU09VUkNFX19FUlJPUlM6CisJCQkJCQljYXNlIFJlc291cmNlLlJFU09VUkNFX19XQVJOSU5HUzogeworCQkJCQkJCVJlc291cmNlIHJlc291cmNlID0gKFJlc291cmNlKW5vdGlmaWNhdGlvbi5nZXROb3RpZmllcigpOworCQkJCQkJCURpYWdub3N0aWMgZGlhZ25vc3RpYyA9IGFuYWx5emVSZXNvdXJjZVByb2JsZW1zKHJlc291cmNlLCBudWxsKTsKKwkJCQkJCQlpZiAoZGlhZ25vc3RpYy5nZXRTZXZlcml0eSgpICE9IERpYWdub3N0aWMuT0spIHsKKwkJCQkJCQkJcmVzb3VyY2VUb0RpYWdub3N0aWNNYXAucHV0KHJlc291cmNlLCBkaWFnbm9zdGljKTsKKwkJCQkJCQl9CisJCQkJCQkJZWxzZSB7CisJCQkJCQkJCXJlc291cmNlVG9EaWFnbm9zdGljTWFwLnJlbW92ZShyZXNvdXJjZSk7CisJCQkJCQkJfQorCisJCQkJCQkJaWYgKHVwZGF0ZVByb2JsZW1JbmRpY2F0aW9uKSB7CisJCQkJCQkJCWdldFNpdGUoKS5nZXRTaGVsbCgpLmdldERpc3BsYXkoKS5hc3luY0V4ZWMKKwkJCQkJCQkJCShuZXcgUnVubmFibGUoKSB7CisJCQkJCQkJCQkJIHB1YmxpYyB2b2lkIHJ1bigpIHsKKwkJCQkJCQkJCQkJIHVwZGF0ZVByb2JsZW1JbmRpY2F0aW9uKCk7CisJCQkJCQkJCQkJIH0KKwkJCQkJCQkJCSB9KTsKKwkJCQkJCQl9CisJCQkJCQkJYnJlYWs7CisJCQkJCQl9CisJCQkJCX0KKwkJCQl9CisJCQkJZWxzZSB7CisJCQkJCXN1cGVyLm5vdGlmeUNoYW5nZWQobm90aWZpY2F0aW9uKTsKKwkJCQl9CisJCQl9CisKKwkJCUBPdmVycmlkZQorCQkJcHJvdGVjdGVkIHZvaWQgc2V0VGFyZ2V0KFJlc291cmNlIHRhcmdldCkgeworCQkJCWJhc2ljU2V0VGFyZ2V0KHRhcmdldCk7CisJCQl9CisKKwkJCUBPdmVycmlkZQorCQkJcHJvdGVjdGVkIHZvaWQgdW5zZXRUYXJnZXQoUmVzb3VyY2UgdGFyZ2V0KSB7CisJCQkJYmFzaWNVbnNldFRhcmdldCh0YXJnZXQpOworCQkJfQorCQl9OworCisJLyoqCisJICogVGhpcyBsaXN0ZW5zIGZvciB3b3Jrc3BhY2UgY2hhbmdlcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgSVJlc291cmNlQ2hhbmdlTGlzdGVuZXIgcmVzb3VyY2VDaGFuZ2VMaXN0ZW5lciA9CisJCW5ldyBJUmVzb3VyY2VDaGFuZ2VMaXN0ZW5lcigpIHsKKwkJCXB1YmxpYyB2b2lkIHJlc291cmNlQ2hhbmdlZChJUmVzb3VyY2VDaGFuZ2VFdmVudCBldmVudCkgeworCQkJCUlSZXNvdXJjZURlbHRhIGRlbHRhID0gZXZlbnQuZ2V0RGVsdGEoKTsKKwkJCQl0cnkgeworCQkJCQljbGFzcyBSZXNvdXJjZURlbHRhVmlzaXRvciBpbXBsZW1lbnRzIElSZXNvdXJjZURlbHRhVmlzaXRvciB7CisJCQkJCQlwcm90ZWN0ZWQgUmVzb3VyY2VTZXQgcmVzb3VyY2VTZXQgPSBlZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCk7CisJCQkJCQlwcm90ZWN0ZWQgQ29sbGVjdGlvbjxSZXNvdXJjZT4gY2hhbmdlZFJlc291cmNlcyA9IG5ldyBBcnJheUxpc3Q8UmVzb3VyY2U+KCk7CisJCQkJCQlwcm90ZWN0ZWQgQ29sbGVjdGlvbjxSZXNvdXJjZT4gcmVtb3ZlZFJlc291cmNlcyA9IG5ldyBBcnJheUxpc3Q8UmVzb3VyY2U+KCk7CisKKwkJCQkJCXB1YmxpYyBib29sZWFuIHZpc2l0KElSZXNvdXJjZURlbHRhIGRlbHRhKSB7CisJCQkJCQkJaWYgKGRlbHRhLmdldFJlc291cmNlKCkuZ2V0VHlwZSgpID09IElSZXNvdXJjZS5GSUxFKSB7CisJCQkJCQkJCWlmIChkZWx0YS5nZXRLaW5kKCkgPT0gSVJlc291cmNlRGVsdGEuUkVNT1ZFRCB8fAorCQkJCQkJCQkgICAgZGVsdGEuZ2V0S2luZCgpID09IElSZXNvdXJjZURlbHRhLkNIQU5HRUQgJiYgZGVsdGEuZ2V0RmxhZ3MoKSAhPSBJUmVzb3VyY2VEZWx0YS5NQVJLRVJTKSB7CisJCQkJCQkJCQlSZXNvdXJjZSByZXNvdXJjZSA9IHJlc291cmNlU2V0LmdldFJlc291cmNlKFVSSS5jcmVhdGVQbGF0Zm9ybVJlc291cmNlVVJJKGRlbHRhLmdldEZ1bGxQYXRoKCkudG9TdHJpbmcoKSwgdHJ1ZSksIGZhbHNlKTsKKwkJCQkJCQkJCWlmIChyZXNvdXJjZSAhPSBudWxsKSB7CisJCQkJCQkJCQkJaWYgKGRlbHRhLmdldEtpbmQoKSA9PSBJUmVzb3VyY2VEZWx0YS5SRU1PVkVEKSB7CisJCQkJCQkJCQkJCXJlbW92ZWRSZXNvdXJjZXMuYWRkKHJlc291cmNlKTsKKwkJCQkJCQkJCQl9CisJCQkJCQkJCQkJZWxzZSBpZiAoIXNhdmVkUmVzb3VyY2VzLnJlbW92ZShyZXNvdXJjZSkpIHsKKwkJCQkJCQkJCQkJY2hhbmdlZFJlc291cmNlcy5hZGQocmVzb3VyY2UpOworCQkJCQkJCQkJCX0KKwkJCQkJCQkJCX0KKwkJCQkJCQkJfQorCQkJCQkJCX0KKworCQkJCQkJCXJldHVybiB0cnVlOworCQkJCQkJfQorCisJCQkJCQlwdWJsaWMgQ29sbGVjdGlvbjxSZXNvdXJjZT4gZ2V0Q2hhbmdlZFJlc291cmNlcygpIHsKKwkJCQkJCQlyZXR1cm4gY2hhbmdlZFJlc291cmNlczsKKwkJCQkJCX0KKworCQkJCQkJcHVibGljIENvbGxlY3Rpb248UmVzb3VyY2U+IGdldFJlbW92ZWRSZXNvdXJjZXMoKSB7CisJCQkJCQkJcmV0dXJuIHJlbW92ZWRSZXNvdXJjZXM7CisJCQkJCQl9CisJCQkJCX0KKworCQkJCQlmaW5hbCBSZXNvdXJjZURlbHRhVmlzaXRvciB2aXNpdG9yID0gbmV3IFJlc291cmNlRGVsdGFWaXNpdG9yKCk7CisJCQkJCWRlbHRhLmFjY2VwdCh2aXNpdG9yKTsKKworCQkJCQlpZiAoIXZpc2l0b3IuZ2V0UmVtb3ZlZFJlc291cmNlcygpLmlzRW1wdHkoKSkgeworCQkJCQkJZ2V0U2l0ZSgpLmdldFNoZWxsKCkuZ2V0RGlzcGxheSgpLmFzeW5jRXhlYworCQkJCQkJCShuZXcgUnVubmFibGUoKSB7CisJCQkJCQkJCSBwdWJsaWMgdm9pZCBydW4oKSB7CisJCQkJCQkJCQkgcmVtb3ZlZFJlc291cmNlcy5hZGRBbGwodmlzaXRvci5nZXRSZW1vdmVkUmVzb3VyY2VzKCkpOworCQkJCQkJCQkJIGlmICghaXNEaXJ0eSgpKSB7CisJCQkJCQkJCQkJIGdldFNpdGUoKS5nZXRQYWdlKCkuY2xvc2VFZGl0b3IoU2VxdWVuY2VyRWRpdG9yLnRoaXMsIGZhbHNlKTsKKwkJCQkJCQkJCSB9CisJCQkJCQkJCSB9CisJCQkJCQkJIH0pOworCQkJCQl9CisKKwkJCQkJaWYgKCF2aXNpdG9yLmdldENoYW5nZWRSZXNvdXJjZXMoKS5pc0VtcHR5KCkpIHsKKwkJCQkJCWdldFNpdGUoKS5nZXRTaGVsbCgpLmdldERpc3BsYXkoKS5hc3luY0V4ZWMKKwkJCQkJCQkobmV3IFJ1bm5hYmxlKCkgeworCQkJCQkJCQkgcHVibGljIHZvaWQgcnVuKCkgeworCQkJCQkJCQkJIGNoYW5nZWRSZXNvdXJjZXMuYWRkQWxsKHZpc2l0b3IuZ2V0Q2hhbmdlZFJlc291cmNlcygpKTsKKwkJCQkJCQkJCSBpZiAoZ2V0U2l0ZSgpLmdldFBhZ2UoKS5nZXRBY3RpdmVFZGl0b3IoKSA9PSBTZXF1ZW5jZXJFZGl0b3IudGhpcykgeworCQkJCQkJCQkJCSBoYW5kbGVBY3RpdmF0ZSgpOworCQkJCQkJCQkJIH0KKwkJCQkJCQkJIH0KKwkJCQkJCQkgfSk7CisJCQkJCX0KKwkJCQl9CisJCQkJY2F0Y2ggKENvcmVFeGNlcHRpb24gZXhjZXB0aW9uKSB7CisJCQkJCUNvcmVFZGl0b3JQbHVnaW4uSU5TVEFOQ0UubG9nKGV4Y2VwdGlvbik7CisJCQkJfQorCQkJfQorCQl9OworCisJLyoqCisJICogSGFuZGxlcyBhY3RpdmF0aW9uIG9mIHRoZSBlZGl0b3Igb3IgaXQncyBhc3NvY2lhdGVkIHZpZXdzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIGhhbmRsZUFjdGl2YXRlKCkgeworCQkvLyBSZWNvbXB1dGUgdGhlIHJlYWQgb25seSBzdGF0ZS4KKwkJLy8KKwkJaWYgKGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VUb1JlYWRPbmx5TWFwKCkgIT0gbnVsbCkgeworCQkgIGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VUb1JlYWRPbmx5TWFwKCkuY2xlYXIoKTsKKworCQkgIC8vIFJlZnJlc2ggYW55IGFjdGlvbnMgdGhhdCBtYXkgYmVjb21lIGVuYWJsZWQgb3IgZGlzYWJsZWQuCisJCSAgLy8KKwkJICBzZXRTZWxlY3Rpb24oZ2V0U2VsZWN0aW9uKCkpOworCQl9CisKKwkJaWYgKCFyZW1vdmVkUmVzb3VyY2VzLmlzRW1wdHkoKSkgeworCQkJaWYgKGhhbmRsZURpcnR5Q29uZmxpY3QoKSkgeworCQkJCWdldFNpdGUoKS5nZXRQYWdlKCkuY2xvc2VFZGl0b3IoU2VxdWVuY2VyRWRpdG9yLnRoaXMsIGZhbHNlKTsKKwkJCX0KKwkJCWVsc2UgeworCQkJCXJlbW92ZWRSZXNvdXJjZXMuY2xlYXIoKTsKKwkJCQljaGFuZ2VkUmVzb3VyY2VzLmNsZWFyKCk7CisJCQkJc2F2ZWRSZXNvdXJjZXMuY2xlYXIoKTsKKwkJCX0KKwkJfQorCQllbHNlIGlmICghY2hhbmdlZFJlc291cmNlcy5pc0VtcHR5KCkpIHsKKwkJCWNoYW5nZWRSZXNvdXJjZXMucmVtb3ZlQWxsKHNhdmVkUmVzb3VyY2VzKTsKKwkJCWhhbmRsZUNoYW5nZWRSZXNvdXJjZXMoKTsKKwkJCWNoYW5nZWRSZXNvdXJjZXMuY2xlYXIoKTsKKwkJCXNhdmVkUmVzb3VyY2VzLmNsZWFyKCk7CisJCX0KKwl9CisKKwkvKioKKwkgKiBIYW5kbGVzIHdoYXQgdG8gZG8gd2l0aCBjaGFuZ2VkIHJlc291cmNlcyBvbiBhY3RpdmF0aW9uLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIGhhbmRsZUNoYW5nZWRSZXNvdXJjZXMoKSB7CisJCWlmICghY2hhbmdlZFJlc291cmNlcy5pc0VtcHR5KCkgJiYgKCFpc0RpcnR5KCkgfHwgaGFuZGxlRGlydHlDb25mbGljdCgpKSkgeworCQkJaWYgKGlzRGlydHkoKSkgeworCQkJCWNoYW5nZWRSZXNvdXJjZXMuYWRkQWxsKGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKS5nZXRSZXNvdXJjZXMoKSk7CisJCQl9CisJCQllZGl0aW5nRG9tYWluLmdldENvbW1hbmRTdGFjaygpLmZsdXNoKCk7CisKKwkJCXVwZGF0ZVByb2JsZW1JbmRpY2F0aW9uID0gZmFsc2U7CisJCQlmb3IgKFJlc291cmNlIHJlc291cmNlIDogY2hhbmdlZFJlc291cmNlcykgeworCQkJCWlmIChyZXNvdXJjZS5pc0xvYWRlZCgpKSB7CisJCQkJCXJlc291cmNlLnVubG9hZCgpOworCQkJCQl0cnkgeworCQkJCQkJcmVzb3VyY2UubG9hZChDb2xsZWN0aW9ucy5FTVBUWV9NQVApOworCQkJCQl9CisJCQkJCWNhdGNoIChJT0V4Y2VwdGlvbiBleGNlcHRpb24pIHsKKwkJCQkJCWlmICghcmVzb3VyY2VUb0RpYWdub3N0aWNNYXAuY29udGFpbnNLZXkocmVzb3VyY2UpKSB7CisJCQkJCQkJcmVzb3VyY2VUb0RpYWdub3N0aWNNYXAucHV0KHJlc291cmNlLCBhbmFseXplUmVzb3VyY2VQcm9ibGVtcyhyZXNvdXJjZSwgZXhjZXB0aW9uKSk7CisJCQkJCQl9CisJCQkJCX0KKwkJCQl9CisJCQl9CisKKwkJCWlmIChBZGFwdGVyRmFjdG9yeUVkaXRpbmdEb21haW4uaXNTdGFsZShlZGl0b3JTZWxlY3Rpb24pKSB7CisJCQkJc2V0U2VsZWN0aW9uKFN0cnVjdHVyZWRTZWxlY3Rpb24uRU1QVFkpOworCQkJfQorCisJCQl1cGRhdGVQcm9ibGVtSW5kaWNhdGlvbiA9IHRydWU7CisJCQl1cGRhdGVQcm9ibGVtSW5kaWNhdGlvbigpOworCQl9CisJfQorICAKKwkvKioKKwkgKiBVcGRhdGVzIHRoZSBwcm9ibGVtcyBpbmRpY2F0aW9uIHdpdGggdGhlIGluZm9ybWF0aW9uIGRlc2NyaWJlZCBpbiB0aGUgc3BlY2lmaWVkIGRpYWdub3N0aWMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgdXBkYXRlUHJvYmxlbUluZGljYXRpb24oKSB7CisJCWlmICh1cGRhdGVQcm9ibGVtSW5kaWNhdGlvbikgeworCQkJQmFzaWNEaWFnbm9zdGljIGRpYWdub3N0aWMgPQorCQkJCW5ldyBCYXNpY0RpYWdub3N0aWMKKwkJCQkJKERpYWdub3N0aWMuT0ssCisJCQkJCSAib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmVkaXRvciIsIC8vJE5PTi1OTFMtMSQKKwkJCQkJIDAsCisJCQkJCSBudWxsLAorCQkJCQkgbmV3IE9iamVjdCBbXSB7IGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKSB9KTsKKwkJCWZvciAoRGlhZ25vc3RpYyBjaGlsZERpYWdub3N0aWMgOiByZXNvdXJjZVRvRGlhZ25vc3RpY01hcC52YWx1ZXMoKSkgeworCQkJCWlmIChjaGlsZERpYWdub3N0aWMuZ2V0U2V2ZXJpdHkoKSAhPSBEaWFnbm9zdGljLk9LKSB7CisJCQkJCWRpYWdub3N0aWMuYWRkKGNoaWxkRGlhZ25vc3RpYyk7CisJCQkJfQorCQkJfQorCisJCQlpbnQgbGFzdEVkaXRvclBhZ2UgPSBnZXRQYWdlQ291bnQoKSAtIDE7CisJCQlpZiAobGFzdEVkaXRvclBhZ2UgPj0gMCAmJiBnZXRFZGl0b3IobGFzdEVkaXRvclBhZ2UpIGluc3RhbmNlb2YgUHJvYmxlbUVkaXRvclBhcnQpIHsKKwkJCQkoKFByb2JsZW1FZGl0b3JQYXJ0KWdldEVkaXRvcihsYXN0RWRpdG9yUGFnZSkpLnNldERpYWdub3N0aWMoZGlhZ25vc3RpYyk7CisJCQkJaWYgKGRpYWdub3N0aWMuZ2V0U2V2ZXJpdHkoKSAhPSBEaWFnbm9zdGljLk9LKSB7CisJCQkJCXNldEFjdGl2ZVBhZ2UobGFzdEVkaXRvclBhZ2UpOworCQkJCX0KKwkJCX0KKwkJCWVsc2UgaWYgKGRpYWdub3N0aWMuZ2V0U2V2ZXJpdHkoKSAhPSBEaWFnbm9zdGljLk9LKSB7CisJCQkJUHJvYmxlbUVkaXRvclBhcnQgcHJvYmxlbUVkaXRvclBhcnQgPSBuZXcgUHJvYmxlbUVkaXRvclBhcnQoKTsKKwkJCQlwcm9ibGVtRWRpdG9yUGFydC5zZXREaWFnbm9zdGljKGRpYWdub3N0aWMpOworCQkJCXByb2JsZW1FZGl0b3JQYXJ0LnNldE1hcmtlckhlbHBlcihtYXJrZXJIZWxwZXIpOworCQkJCXRyeSB7CisJCQkJCWFkZFBhZ2UoKytsYXN0RWRpdG9yUGFnZSwgcHJvYmxlbUVkaXRvclBhcnQsIGdldEVkaXRvcklucHV0KCkpOworCQkJCQlzZXRQYWdlVGV4dChsYXN0RWRpdG9yUGFnZSwgcHJvYmxlbUVkaXRvclBhcnQuZ2V0UGFydE5hbWUoKSk7CisJCQkJCXNldEFjdGl2ZVBhZ2UobGFzdEVkaXRvclBhZ2UpOworCQkJCQlzaG93VGFicygpOworCQkJCX0KKwkJCQljYXRjaCAoUGFydEluaXRFeGNlcHRpb24gZXhjZXB0aW9uKSB7CisJCQkJCUNvcmVFZGl0b3JQbHVnaW4uSU5TVEFOQ0UubG9nKGV4Y2VwdGlvbik7CisJCQkJfQorCQkJfQorCisJCQlpZiAobWFya2VySGVscGVyLmhhc01hcmtlcnMoZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpKSkgeworCQkJCW1hcmtlckhlbHBlci5kZWxldGVNYXJrZXJzKGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKSk7CisJCQkJaWYgKGRpYWdub3N0aWMuZ2V0U2V2ZXJpdHkoKSAhPSBEaWFnbm9zdGljLk9LKSB7CisJCQkJCXRyeSB7CisJCQkJCQltYXJrZXJIZWxwZXIuY3JlYXRlTWFya2VycyhkaWFnbm9zdGljKTsKKwkJCQkJfQorCQkJCQljYXRjaCAoQ29yZUV4Y2VwdGlvbiBleGNlcHRpb24pIHsKKwkJCQkJCUNvcmVFZGl0b3JQbHVnaW4uSU5TVEFOQ0UubG9nKGV4Y2VwdGlvbik7CisJCQkJCX0KKwkJCQl9CisJCQl9CisJCX0KKwl9CisKKwkvKioKKwkgKiBTaG93cyBhIGRpYWxvZyB0aGF0IGFza3MgaWYgY29uZmxpY3RpbmcgY2hhbmdlcyBzaG91bGQgYmUgZGlzY2FyZGVkLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBib29sZWFuIGhhbmRsZURpcnR5Q29uZmxpY3QoKSB7CisJCXJldHVybgorCQkJTWVzc2FnZURpYWxvZy5vcGVuUXVlc3Rpb24KKwkJCQkoZ2V0U2l0ZSgpLmdldFNoZWxsKCksCisJCQkJIGdldFN0cmluZygiX1VJX0ZpbGVDb25mbGljdF9sYWJlbCIpLCAvLyROT04tTkxTLTEkCisJCQkJIGdldFN0cmluZygiX1dBUk5fRmlsZUNvbmZsaWN0IikpOyAvLyROT04tTkxTLTEkCisJfQorCisJLyoqCisJICogVGhpcyBjcmVhdGVzIGEgbW9kZWwgZWRpdG9yLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBTZXF1ZW5jZXJFZGl0b3IoKSB7CisJCXN1cGVyKCk7CisJCWluaXRpYWxpemVFZGl0aW5nRG9tYWluKCk7CisJfQorCisJLyoqCisJICogVGhpcyBzZXRzIHVwIHRoZSBlZGl0aW5nIGRvbWFpbiBmb3IgdGhlIG1vZGVsIGVkaXRvci4gPCEtLSBiZWdpbi11c2VyLWRvYworCSAqIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCXByb3RlY3RlZCB2b2lkIGluaXRpYWxpemVFZGl0aW5nRG9tYWluKCkgeworCQlpbml0aWFsaXplRWRpdGluZ0RvbWFpbkdlbigpOworCQllZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkuZ2V0UmVzb3VyY2VGYWN0b3J5UmVnaXN0cnkoKQorCQkJCS5nZXRFeHRlbnNpb25Ub0ZhY3RvcnlNYXAoKS5wdXQoIioiLAorCQkJCQkJU1RFTVhNSVJlc291cmNlRmFjdG9yeUltcGwuSU5TVEFOQ0UpOworCisJCWVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKS5nZXRSZXNvdXJjZUZhY3RvcnlSZWdpc3RyeSgpCisJCQkJLmdldFByb3RvY29sVG9GYWN0b3J5TWFwKCkucHV0KCJwbGF0Zm9ybSIsCisJCQkJCQlTVEVNWE1JUmVzb3VyY2VGYWN0b3J5SW1wbC5JTlNUQU5DRSk7CisJfSAvLyBpbml0aWFsaXplRWRpdGluZ0RvbWFpbgorCQorCS8qKgorCSAqIFRoaXMgc2V0cyB1cCB0aGUgZWRpdGluZyBkb21haW4gZm9yIHRoZSBtb2RlbCBlZGl0b3IuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgaW5pdGlhbGl6ZUVkaXRpbmdEb21haW5HZW4oKSB7CisJCS8vIENyZWF0ZSBhbiBhZGFwdGVyIGZhY3RvcnkgdGhhdCB5aWVsZHMgaXRlbSBwcm92aWRlcnMuCisJCS8vCisJCWFkYXB0ZXJGYWN0b3J5ID0gbmV3IENvbXBvc2VkQWRhcHRlckZhY3RvcnkoQ29tcG9zZWRBZGFwdGVyRmFjdG9yeS5EZXNjcmlwdG9yLlJlZ2lzdHJ5LklOU1RBTkNFKTsKKworCQlhZGFwdGVyRmFjdG9yeS5hZGRBZGFwdGVyRmFjdG9yeShuZXcgUmVzb3VyY2VJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSgpKTsKKwkJYWRhcHRlckZhY3RvcnkuYWRkQWRhcHRlckZhY3RvcnkobmV3IENvbW1vbkl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5KCkpOworCQlhZGFwdGVyRmFjdG9yeS5hZGRBZGFwdGVyRmFjdG9yeShuZXcgRXhwZXJpbWVudEl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5KCkpOworCQlhZGFwdGVyRmFjdG9yeS5hZGRBZGFwdGVyRmFjdG9yeShuZXcgR3JhcGhJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSgpKTsKKwkJYWRhcHRlckZhY3RvcnkuYWRkQWRhcHRlckZhY3RvcnkobmV3IE1vZGVsSXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkoKSk7CisJCWFkYXB0ZXJGYWN0b3J5LmFkZEFkYXB0ZXJGYWN0b3J5KG5ldyBNb2RpZmllckl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5KCkpOworCQlhZGFwdGVyRmFjdG9yeS5hZGRBZGFwdGVyRmFjdG9yeShuZXcgUHJlZGljYXRlSXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkoKSk7CisJCWFkYXB0ZXJGYWN0b3J5LmFkZEFkYXB0ZXJGYWN0b3J5KG5ldyBTY2VuYXJpb0l0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5KCkpOworCQlhZGFwdGVyRmFjdG9yeS5hZGRBZGFwdGVyRmFjdG9yeShuZXcgU2VxdWVuY2VySXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkoKSk7CisJCWFkYXB0ZXJGYWN0b3J5LmFkZEFkYXB0ZXJGYWN0b3J5KG5ldyBUcmlnZ2VySXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkoKSk7CisJCWFkYXB0ZXJGYWN0b3J5LmFkZEFkYXB0ZXJGYWN0b3J5KG5ldyBTb2x2ZXJJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSgpKTsKKwkJYWRhcHRlckZhY3RvcnkuYWRkQWRhcHRlckZhY3RvcnkobmV3IExvZ2dlckl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5KCkpOworCQlhZGFwdGVyRmFjdG9yeS5hZGRBZGFwdGVyRmFjdG9yeShuZXcgRWNvcmVJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSgpKTsKKwkJYWRhcHRlckZhY3RvcnkuYWRkQWRhcHRlckZhY3RvcnkobmV3IFJlZmxlY3RpdmVJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSgpKTsKKworCQkvLyBDcmVhdGUgdGhlIGNvbW1hbmQgc3RhY2sgdGhhdCB3aWxsIG5vdGlmeSB0aGlzIGVkaXRvciBhcyBjb21tYW5kcyBhcmUgZXhlY3V0ZWQuCisJCS8vCisJCUJhc2ljQ29tbWFuZFN0YWNrIGNvbW1hbmRTdGFjayA9IG5ldyBCYXNpY0NvbW1hbmRTdGFjaygpOworCisJCS8vIEFkZCBhIGxpc3RlbmVyIHRvIHNldCB0aGUgbW9zdCByZWNlbnQgY29tbWFuZCdzIGFmZmVjdGVkIG9iamVjdHMgdG8gYmUgdGhlIHNlbGVjdGlvbiBvZiB0aGUgdmlld2VyIHdpdGggZm9jdXMuCisJCS8vCisJCWNvbW1hbmRTdGFjay5hZGRDb21tYW5kU3RhY2tMaXN0ZW5lcgorCQkJKG5ldyBDb21tYW5kU3RhY2tMaXN0ZW5lcigpIHsKKwkJCQkgcHVibGljIHZvaWQgY29tbWFuZFN0YWNrQ2hhbmdlZChmaW5hbCBFdmVudE9iamVjdCBldmVudCkgeworCQkJCQkgZ2V0Q29udGFpbmVyKCkuZ2V0RGlzcGxheSgpLmFzeW5jRXhlYworCQkJCQkJIChuZXcgUnVubmFibGUoKSB7CisJCQkJCQkJICBwdWJsaWMgdm9pZCBydW4oKSB7CisJCQkJCQkJCSAgZmlyZVByb3BlcnR5Q2hhbmdlKElFZGl0b3JQYXJ0LlBST1BfRElSVFkpOworCisJCQkJCQkJCSAgLy8gVHJ5IHRvIHNlbGVjdCB0aGUgYWZmZWN0ZWQgb2JqZWN0cy4KKwkJCQkJCQkJICAvLworCQkJCQkJCQkgIENvbW1hbmQgbW9zdFJlY2VudENvbW1hbmQgPSAoKENvbW1hbmRTdGFjaylldmVudC5nZXRTb3VyY2UoKSkuZ2V0TW9zdFJlY2VudENvbW1hbmQoKTsKKwkJCQkJCQkJICBpZiAobW9zdFJlY2VudENvbW1hbmQgIT0gbnVsbCkgeworCQkJCQkJCQkJICBzZXRTZWxlY3Rpb25Ub1ZpZXdlcihtb3N0UmVjZW50Q29tbWFuZC5nZXRBZmZlY3RlZE9iamVjdHMoKSk7CisJCQkJCQkJCSAgfQorCQkJCQkJCQkgIGlmIChwcm9wZXJ0eVNoZWV0UGFnZSAhPSBudWxsICYmICFwcm9wZXJ0eVNoZWV0UGFnZS5nZXRDb250cm9sKCkuaXNEaXNwb3NlZCgpKSB7CisJCQkJCQkJCQkgIHByb3BlcnR5U2hlZXRQYWdlLnJlZnJlc2goKTsKKwkJCQkJCQkJICB9CisJCQkJCQkJICB9CisJCQkJCQkgIH0pOworCQkJCSB9CisJCQkgfSk7CisKKwkJLy8gQ3JlYXRlIHRoZSBlZGl0aW5nIGRvbWFpbiB3aXRoIGEgc3BlY2lhbCBjb21tYW5kIHN0YWNrLgorCQkvLworCQllZGl0aW5nRG9tYWluID0gbmV3IEFkYXB0ZXJGYWN0b3J5RWRpdGluZ0RvbWFpbihhZGFwdGVyRmFjdG9yeSwgY29tbWFuZFN0YWNrLCBuZXcgSGFzaE1hcDxSZXNvdXJjZSwgQm9vbGVhbj4oKSk7CisJfQorCisJLyoqCisJICogVGhpcyBpcyBoZXJlIGZvciB0aGUgbGlzdGVuZXIgdG8gYmUgYWJsZSB0byBjYWxsIGl0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIGZpcmVQcm9wZXJ0eUNoYW5nZShpbnQgYWN0aW9uKSB7CisJCXN1cGVyLmZpcmVQcm9wZXJ0eUNoYW5nZShhY3Rpb24pOworCX0KKworCS8qKgorCSAqIFRoaXMgc2V0cyB0aGUgc2VsZWN0aW9uIGludG8gd2hpY2hldmVyIHZpZXdlciBpcyBhY3RpdmUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgc2V0U2VsZWN0aW9uVG9WaWV3ZXIoQ29sbGVjdGlvbjw/PiBjb2xsZWN0aW9uKSB7CisJCWZpbmFsIENvbGxlY3Rpb248Pz4gdGhlU2VsZWN0aW9uID0gY29sbGVjdGlvbjsKKwkJLy8gTWFrZSBzdXJlIGl0J3Mgb2theS4KKwkJLy8KKwkJaWYgKHRoZVNlbGVjdGlvbiAhPSBudWxsICYmICF0aGVTZWxlY3Rpb24uaXNFbXB0eSgpKSB7CisJCQlSdW5uYWJsZSBydW5uYWJsZSA9CisJCQkJbmV3IFJ1bm5hYmxlKCkgeworCQkJCQlwdWJsaWMgdm9pZCBydW4oKSB7CisJCQkJCQkvLyBUcnkgdG8gc2VsZWN0IHRoZSBpdGVtcyBpbiB0aGUgY3VycmVudCBjb250ZW50IHZpZXdlciBvZiB0aGUgZWRpdG9yLgorCQkJCQkJLy8KKwkJCQkJCWlmIChjdXJyZW50Vmlld2VyICE9IG51bGwpIHsKKwkJCQkJCQljdXJyZW50Vmlld2VyLnNldFNlbGVjdGlvbihuZXcgU3RydWN0dXJlZFNlbGVjdGlvbih0aGVTZWxlY3Rpb24udG9BcnJheSgpKSwgdHJ1ZSk7CisJCQkJCQl9CisJCQkJCX0KKwkJCQl9OworCQkJZ2V0U2l0ZSgpLmdldFNoZWxsKCkuZ2V0RGlzcGxheSgpLmFzeW5jRXhlYyhydW5uYWJsZSk7CisJCX0KKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgdGhlIGVkaXRpbmcgZG9tYWluIGFzIHJlcXVpcmVkIGJ5IHRoZSB7QGxpbmsgSUVkaXRpbmdEb21haW5Qcm92aWRlcn0gaW50ZXJmYWNlLgorCSAqIFRoaXMgaXMgaW1wb3J0YW50IGZvciBpbXBsZW1lbnRpbmcgdGhlIHN0YXRpYyBtZXRob2RzIG9mIHtAbGluayBBZGFwdGVyRmFjdG9yeUVkaXRpbmdEb21haW59CisJICogYW5kIGZvciBzdXBwb3J0aW5nIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5hY3Rpb24uQ29tbWFuZEFjdGlvbn0uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVkaXRpbmdEb21haW4gZ2V0RWRpdGluZ0RvbWFpbigpIHsKKwkJcmV0dXJuIGVkaXRpbmdEb21haW47CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIGNsYXNzIFJldmVyc2VBZGFwdGVyRmFjdG9yeUNvbnRlbnRQcm92aWRlciBleHRlbmRzIEFkYXB0ZXJGYWN0b3J5Q29udGVudFByb3ZpZGVyIHsKKwkJcHVibGljIFJldmVyc2VBZGFwdGVyRmFjdG9yeUNvbnRlbnRQcm92aWRlcihBZGFwdGVyRmFjdG9yeSBhZGFwdGVyRmFjdG9yeSkgeworCQkJc3VwZXIoYWRhcHRlckZhY3RvcnkpOworCQl9CisKKwkJcHVibGljIE9iamVjdCBbXSBnZXRFbGVtZW50cyhPYmplY3Qgb2JqZWN0KSB7CisJCQlPYmplY3QgcGFyZW50ID0gc3VwZXIuZ2V0UGFyZW50KG9iamVjdCk7CisJCQlyZXR1cm4gKHBhcmVudCA9PSBudWxsID8gQ29sbGVjdGlvbnMuRU1QVFlfU0VUIDogQ29sbGVjdGlvbnMuc2luZ2xldG9uKHBhcmVudCkpLnRvQXJyYXkoKTsKKwkJfQorCisJCXB1YmxpYyBPYmplY3QgW10gZ2V0Q2hpbGRyZW4oT2JqZWN0IG9iamVjdCkgeworCQkJT2JqZWN0IHBhcmVudCA9IHN1cGVyLmdldFBhcmVudChvYmplY3QpOworCQkJcmV0dXJuIChwYXJlbnQgPT0gbnVsbCA/IENvbGxlY3Rpb25zLkVNUFRZX1NFVCA6IENvbGxlY3Rpb25zLnNpbmdsZXRvbihwYXJlbnQpKS50b0FycmF5KCk7CisJCX0KKworCQlwdWJsaWMgYm9vbGVhbiBoYXNDaGlsZHJlbihPYmplY3Qgb2JqZWN0KSB7CisJCQlPYmplY3QgcGFyZW50ID0gc3VwZXIuZ2V0UGFyZW50KG9iamVjdCk7CisJCQlyZXR1cm4gcGFyZW50ICE9IG51bGw7CisJCX0KKworCQlwdWJsaWMgT2JqZWN0IGdldFBhcmVudChPYmplY3Qgb2JqZWN0KSB7CisJCQlyZXR1cm4gbnVsbDsKKwkJfQorCX0KKworCS8qKgorCSAqIFRoaXMgbWFrZXMgc3VyZSB0aGF0IG9uZSBjb250ZW50IHZpZXdlciwgZWl0aGVyIGZvciB0aGUgY3VycmVudCBwYWdlIG9yIHRoZSBvdXRsaW5lIHZpZXcsIGlmIGl0IGhhcyBmb2N1cywKKwkgKiBpcyB0aGUgY3VycmVudCBvbmUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgc2V0Q3VycmVudFZpZXdlcihWaWV3ZXIgdmlld2VyKSB7CisJCS8vIElmIGl0IGlzIGNoYW5naW5nLi4uCisJCS8vCisJCWlmIChjdXJyZW50Vmlld2VyICE9IHZpZXdlcikgeworCQkJaWYgKHNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lciA9PSBudWxsKSB7CisJCQkJLy8gQ3JlYXRlIHRoZSBsaXN0ZW5lciBvbiBkZW1hbmQuCisJCQkJLy8KKwkJCQlzZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIgPQorCQkJCQluZXcgSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcigpIHsKKwkJCQkJCS8vIFRoaXMganVzdCBub3RpZmllcyB0aG9zZSB0aGluZ3MgdGhhdCBhcmUgYWZmZWN0ZWQgYnkgdGhlIHNlY3Rpb24uCisJCQkJCQkvLworCQkJCQkJcHVibGljIHZvaWQgc2VsZWN0aW9uQ2hhbmdlZChTZWxlY3Rpb25DaGFuZ2VkRXZlbnQgc2VsZWN0aW9uQ2hhbmdlZEV2ZW50KSB7CisJCQkJCQkJc2V0U2VsZWN0aW9uKHNlbGVjdGlvbkNoYW5nZWRFdmVudC5nZXRTZWxlY3Rpb24oKSk7CisJCQkJCQl9CisJCQkJCX07CisJCQl9CisKKwkJCS8vIFN0b3AgbGlzdGVuaW5nIHRvIHRoZSBvbGQgb25lLgorCQkJLy8KKwkJCWlmIChjdXJyZW50Vmlld2VyICE9IG51bGwpIHsKKwkJCQljdXJyZW50Vmlld2VyLnJlbW92ZVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcihzZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIpOworCQkJfQorCisJCQkvLyBTdGFydCBsaXN0ZW5pbmcgdG8gdGhlIG5ldyBvbmUuCisJCQkvLworCQkJaWYgKHZpZXdlciAhPSBudWxsKSB7CisJCQkJdmlld2VyLmFkZFNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcihzZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIpOworCQkJfQorCisJCQkvLyBSZW1lbWJlciBpdC4KKwkJCS8vCisJCQljdXJyZW50Vmlld2VyID0gdmlld2VyOworCisJCQkvLyBTZXQgdGhlIGVkaXRvcnMgc2VsZWN0aW9uIGJhc2VkIG9uIHRoZSBjdXJyZW50IHZpZXdlcidzIHNlbGVjdGlvbi4KKwkJCS8vCisJCQlzZXRTZWxlY3Rpb24oY3VycmVudFZpZXdlciA9PSBudWxsID8gU3RydWN0dXJlZFNlbGVjdGlvbi5FTVBUWSA6IGN1cnJlbnRWaWV3ZXIuZ2V0U2VsZWN0aW9uKCkpOworCQl9CisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIHRoZSB2aWV3ZXIgYXMgcmVxdWlyZWQgYnkgdGhlIHtAbGluayBJVmlld2VyUHJvdmlkZXJ9IGludGVyZmFjZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVmlld2VyIGdldFZpZXdlcigpIHsKKwkJcmV0dXJuIGN1cnJlbnRWaWV3ZXI7CisJfQorCisJLyoqCisJICogVGhpcyBjcmVhdGVzIGEgY29udGV4dCBtZW51IGZvciB0aGUgdmlld2VyIGFuZCBhZGRzIGEgbGlzdGVuZXIgYXMgd2VsbCByZWdpc3RlcmluZyB0aGUgbWVudSBmb3IgZXh0ZW5zaW9uLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBjcmVhdGVDb250ZXh0TWVudUZvcihTdHJ1Y3R1cmVkVmlld2VyIHZpZXdlcikgeworCQlNZW51TWFuYWdlciBjb250ZXh0TWVudSA9IG5ldyBNZW51TWFuYWdlcigiI1BvcFVwIik7IC8vJE5PTi1OTFMtMSQKKwkJY29udGV4dE1lbnUuYWRkKG5ldyBTZXBhcmF0b3IoImFkZGl0aW9ucyIpKTsgLy8kTk9OLU5MUy0xJAorCQljb250ZXh0TWVudS5zZXRSZW1vdmVBbGxXaGVuU2hvd24odHJ1ZSk7CisJCWNvbnRleHRNZW51LmFkZE1lbnVMaXN0ZW5lcih0aGlzKTsKKwkJTWVudSBtZW51PSBjb250ZXh0TWVudS5jcmVhdGVDb250ZXh0TWVudSh2aWV3ZXIuZ2V0Q29udHJvbCgpKTsKKwkJdmlld2VyLmdldENvbnRyb2woKS5zZXRNZW51KG1lbnUpOworCQlnZXRTaXRlKCkucmVnaXN0ZXJDb250ZXh0TWVudShjb250ZXh0TWVudSwgdmlld2VyKTsKKworCQlpbnQgZG5kT3BlcmF0aW9ucyA9IERORC5EUk9QX0NPUFkgfCBETkQuRFJPUF9NT1ZFIHwgRE5ELkRST1BfTElOSzsKKwkJVHJhbnNmZXJbXSB0cmFuc2ZlcnMgPSBuZXcgVHJhbnNmZXJbXSB7IExvY2FsU2VsZWN0aW9uVHJhbnNmZXIuZ2V0VHJhbnNmZXIoKSwgTG9jYWxUcmFuc2Zlci5nZXRJbnN0YW5jZSgpIH07CisJCXZpZXdlci5hZGREcmFnU3VwcG9ydChkbmRPcGVyYXRpb25zLCB0cmFuc2ZlcnMsIG5ldyBWaWV3ZXJEcmFnQWRhcHRlcih2aWV3ZXIpKTsKKwkJdmlld2VyLmFkZERyb3BTdXBwb3J0KGRuZE9wZXJhdGlvbnMsIHRyYW5zZmVycywgbmV3IEVkaXRpbmdEb21haW5WaWV3ZXJEcm9wQWRhcHRlcihlZGl0aW5nRG9tYWluLCB2aWV3ZXIpKTsKKwl9IC8vIGNyZWF0ZUNvbnRleHRNZW51Rm9yCisJCisJLyoqCisJICogVGhpcyBjcmVhdGVzIGEgY29udGV4dCBtZW51IGZvciB0aGUgdmlld2VyIGFuZCBhZGRzIGEgbGlzdGVuZXIgYXMgd2VsbCByZWdpc3RlcmluZyB0aGUgbWVudSBmb3IgZXh0ZW5zaW9uLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIGNyZWF0ZUNvbnRleHRNZW51Rm9yR2VuKFN0cnVjdHVyZWRWaWV3ZXIgdmlld2VyKSB7CisJCU1lbnVNYW5hZ2VyIGNvbnRleHRNZW51ID0gbmV3IE1lbnVNYW5hZ2VyKCIjUG9wVXAiKTsgLy8kTk9OLU5MUy0xJAorCQljb250ZXh0TWVudS5hZGQobmV3IFNlcGFyYXRvcigiYWRkaXRpb25zIikpOyAvLyROT04tTkxTLTEkCisJCWNvbnRleHRNZW51LnNldFJlbW92ZUFsbFdoZW5TaG93bih0cnVlKTsKKwkJY29udGV4dE1lbnUuYWRkTWVudUxpc3RlbmVyKHRoaXMpOworCQlNZW51IG1lbnU9IGNvbnRleHRNZW51LmNyZWF0ZUNvbnRleHRNZW51KHZpZXdlci5nZXRDb250cm9sKCkpOworCQl2aWV3ZXIuZ2V0Q29udHJvbCgpLnNldE1lbnUobWVudSk7CisJCWdldFNpdGUoKS5yZWdpc3RlckNvbnRleHRNZW51KGNvbnRleHRNZW51LCBuZXcgVW53cmFwcGluZ1NlbGVjdGlvblByb3ZpZGVyKHZpZXdlcikpOworCisJCWludCBkbmRPcGVyYXRpb25zID0gRE5ELkRST1BfQ09QWSB8IERORC5EUk9QX01PVkUgfCBETkQuRFJPUF9MSU5LOworCQlUcmFuc2ZlcltdIHRyYW5zZmVycyA9IG5ldyBUcmFuc2ZlcltdIHsgTG9jYWxUcmFuc2Zlci5nZXRJbnN0YW5jZSgpIH07CisJCXZpZXdlci5hZGREcmFnU3VwcG9ydChkbmRPcGVyYXRpb25zLCB0cmFuc2ZlcnMsIG5ldyBWaWV3ZXJEcmFnQWRhcHRlcih2aWV3ZXIpKTsKKwkJdmlld2VyLmFkZERyb3BTdXBwb3J0KGRuZE9wZXJhdGlvbnMsIHRyYW5zZmVycywgbmV3IEVkaXRpbmdEb21haW5WaWV3ZXJEcm9wQWRhcHRlcihlZGl0aW5nRG9tYWluLCB2aWV3ZXIpKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGlzIHRoZSBtZXRob2QgY2FsbGVkIHRvIGxvYWQgYSByZXNvdXJjZSBpbnRvIHRoZSBlZGl0aW5nIGRvbWFpbidzIHJlc291cmNlIHNldCBiYXNlZCBvbiB0aGUgZWRpdG9yJ3MgaW5wdXQuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgY3JlYXRlTW9kZWwoKSB7CisJCVVSSSByZXNvdXJjZVVSSSA9IEVkaXRVSVV0aWwuZ2V0VVJJKGdldEVkaXRvcklucHV0KCkpOworCQlFeGNlcHRpb24gZXhjZXB0aW9uID0gbnVsbDsKKwkJUmVzb3VyY2UgcmVzb3VyY2UgPSBudWxsOworCQl0cnkgeworCQkJLy8gTG9hZCB0aGUgcmVzb3VyY2UgdGhyb3VnaCB0aGUgZWRpdGluZyBkb21haW4uCisJCQkvLworCQkJcmVzb3VyY2UgPSBlZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkuZ2V0UmVzb3VyY2UocmVzb3VyY2VVUkksIHRydWUpOworCQl9CisJCWNhdGNoIChFeGNlcHRpb24gZSkgeworCQkJZXhjZXB0aW9uID0gZTsKKwkJCXJlc291cmNlID0gZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpLmdldFJlc291cmNlKHJlc291cmNlVVJJLCBmYWxzZSk7CisJCX0KKworCQlEaWFnbm9zdGljIGRpYWdub3N0aWMgPSBhbmFseXplUmVzb3VyY2VQcm9ibGVtcyhyZXNvdXJjZSwgZXhjZXB0aW9uKTsKKwkJaWYgKGRpYWdub3N0aWMuZ2V0U2V2ZXJpdHkoKSAhPSBEaWFnbm9zdGljLk9LKSB7CisJCQlyZXNvdXJjZVRvRGlhZ25vc3RpY01hcC5wdXQocmVzb3VyY2UsICBhbmFseXplUmVzb3VyY2VQcm9ibGVtcyhyZXNvdXJjZSwgZXhjZXB0aW9uKSk7CisJCX0KKwkJZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpLmVBZGFwdGVycygpLmFkZChwcm9ibGVtSW5kaWNhdGlvbkFkYXB0ZXIpOworCX0KKworCS8qKgorCSAqIFJldHVybnMgYSBkaWFnbm9zdGljIGRlc2NyaWJpbmcgdGhlIGVycm9ycyBhbmQgd2FybmluZ3MgbGlzdGVkIGluIHRoZSByZXNvdXJjZQorCSAqIGFuZCB0aGUgc3BlY2lmaWVkIGV4Y2VwdGlvbiAoaWYgYW55KS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRGlhZ25vc3RpYyBhbmFseXplUmVzb3VyY2VQcm9ibGVtcyhSZXNvdXJjZSByZXNvdXJjZSwgRXhjZXB0aW9uIGV4Y2VwdGlvbikgeworCQlpZiAoIXJlc291cmNlLmdldEVycm9ycygpLmlzRW1wdHkoKSB8fCAhcmVzb3VyY2UuZ2V0V2FybmluZ3MoKS5pc0VtcHR5KCkpIHsKKwkJCUJhc2ljRGlhZ25vc3RpYyBiYXNpY0RpYWdub3N0aWMgPQorCQkJCW5ldyBCYXNpY0RpYWdub3N0aWMKKwkJCQkJKERpYWdub3N0aWMuRVJST1IsCisJCQkJCSAib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmVkaXRvciIsIC8vJE5PTi1OTFMtMSQKKwkJCQkJIDAsCisJCQkJCSBnZXRTdHJpbmcoIl9VSV9DcmVhdGVNb2RlbEVycm9yX21lc3NhZ2UiLCByZXNvdXJjZS5nZXRVUkkoKSksIC8vJE5PTi1OTFMtMSQKKwkJCQkJIG5ldyBPYmplY3QgW10geyBleGNlcHRpb24gPT0gbnVsbCA/IChPYmplY3QpcmVzb3VyY2UgOiBleGNlcHRpb24gfSk7CisJCQliYXNpY0RpYWdub3N0aWMubWVyZ2UoRWNvcmVVdGlsLmNvbXB1dGVEaWFnbm9zdGljKHJlc291cmNlLCB0cnVlKSk7CisJCQlyZXR1cm4gYmFzaWNEaWFnbm9zdGljOworCQl9CisJCWVsc2UgaWYgKGV4Y2VwdGlvbiAhPSBudWxsKSB7CisJCQlyZXR1cm4KKwkJCQluZXcgQmFzaWNEaWFnbm9zdGljCisJCQkJCShEaWFnbm9zdGljLkVSUk9SLAorCQkJCQkgIm9yZy5lY2xpcHNlLnN0ZW0uY29yZS5lZGl0b3IiLCAvLyROT04tTkxTLTEkCisJCQkJCSAwLAorCQkJCQkgZ2V0U3RyaW5nKCJfVUlfQ3JlYXRlTW9kZWxFcnJvcl9tZXNzYWdlIiwgcmVzb3VyY2UuZ2V0VVJJKCkpLCAvLyROT04tTkxTLTEkCisJCQkJCSBuZXcgT2JqZWN0W10geyBleGNlcHRpb24gfSk7CisJCX0KKwkJZWxzZSB7CisJCQlyZXR1cm4gRGlhZ25vc3RpYy5PS19JTlNUQU5DRTsKKwkJfQorCX0KKworCS8qKgorCSAqIFRoaXMgaXMgdGhlIG1ldGhvZCB1c2VkIGJ5IHRoZSBmcmFtZXdvcmsgdG8gaW5zdGFsbCB5b3VyIG93biBjb250cm9scy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgY3JlYXRlUGFnZXMoKSB7CisJCS8vIENyZWF0ZXMgdGhlIG1vZGVsIGZyb20gdGhlIGVkaXRvciBpbnB1dAorCQkvLworCQljcmVhdGVNb2RlbCgpOworCisJCS8vIE9ubHkgY3JlYXRlcyB0aGUgb3RoZXIgcGFnZXMgaWYgdGhlcmUgaXMgc29tZXRoaW5nIHRoYXQgY2FuIGJlIGVkaXRlZAorCQkvLworCQlpZiAoIWdldEVkaXRpbmdEb21haW4oKS5nZXRSZXNvdXJjZVNldCgpLmdldFJlc291cmNlcygpLmlzRW1wdHkoKSkgeworCQkJLy8gQ3JlYXRlIGEgcGFnZSBmb3IgdGhlIHNlbGVjdGlvbiB0cmVlIHZpZXcuCisJCQkvLworCQkJVHJlZSB0cmVlID0gbmV3IFRyZWUoZ2V0Q29udGFpbmVyKCksIFNXVC5NVUxUSSk7CisJCQlzZWxlY3Rpb25WaWV3ZXIgPSBuZXcgVHJlZVZpZXdlcih0cmVlKTsKKwkJCXNldEN1cnJlbnRWaWV3ZXIoc2VsZWN0aW9uVmlld2VyKTsKKworCQkJc2VsZWN0aW9uVmlld2VyLnNldENvbnRlbnRQcm92aWRlcihuZXcgQWRhcHRlckZhY3RvcnlDb250ZW50UHJvdmlkZXIoYWRhcHRlckZhY3RvcnkpKTsKKwkJCXNlbGVjdGlvblZpZXdlci5zZXRMYWJlbFByb3ZpZGVyKG5ldyBBZGFwdGVyRmFjdG9yeUxhYmVsUHJvdmlkZXIoYWRhcHRlckZhY3RvcnkpKTsKKwkJCS8vc2VsZWN0aW9uVmlld2VyLnNldElucHV0KGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKSk7CisJCQlzZWxlY3Rpb25WaWV3ZXIuc2V0SW5wdXQoZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpLmdldFJlc291cmNlcygpLmdldCgwKSk7CisJCQlzZWxlY3Rpb25WaWV3ZXIuc2V0U2VsZWN0aW9uKG5ldyBTdHJ1Y3R1cmVkU2VsZWN0aW9uKGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKS5nZXRSZXNvdXJjZXMoKS5nZXQoMCkpLCB0cnVlKTsKKworCQkJbmV3IEFkYXB0ZXJGYWN0b3J5VHJlZUVkaXRvcihzZWxlY3Rpb25WaWV3ZXIuZ2V0VHJlZSgpLCBhZGFwdGVyRmFjdG9yeSk7CisKKwkJCWNyZWF0ZUNvbnRleHRNZW51Rm9yKHNlbGVjdGlvblZpZXdlcik7CisJCQlpbnQgcGFnZUluZGV4ID0gYWRkUGFnZSh0cmVlKTsKKwkJCXNldFBhZ2VUZXh0KHBhZ2VJbmRleCwgZ2V0U3RyaW5nKCJfVUlfU2VsZWN0aW9uUGFnZV9sYWJlbCIpKTsgLy8kTk9OLU5MUy0xJAorCisJCQlnZXRTaXRlKCkuZ2V0U2hlbGwoKS5nZXREaXNwbGF5KCkuYXN5bmNFeGVjCisJCQkJKG5ldyBSdW5uYWJsZSgpIHsKKwkJCQkJIHB1YmxpYyB2b2lkIHJ1bigpIHsKKwkJCQkJCSBzZXRBY3RpdmVQYWdlKDApOworCQkJCQkgfQorCQkJCSB9KTsKKwkJfQorCisJCS8vIEVuc3VyZXMgdGhhdCB0aGlzIGVkaXRvciB3aWxsIG9ubHkgZGlzcGxheSB0aGUgcGFnZSdzIHRhYgorCQkvLyBhcmVhIGlmIHRoZXJlIGFyZSBtb3JlIHRoYW4gb25lIHBhZ2UKKwkJLy8KKwkJZ2V0Q29udGFpbmVyKCkuYWRkQ29udHJvbExpc3RlbmVyCisJCQkobmV3IENvbnRyb2xBZGFwdGVyKCkgeworCQkJCWJvb2xlYW4gZ3VhcmQgPSBmYWxzZTsKKwkJCQlAT3ZlcnJpZGUKKwkJCQlwdWJsaWMgdm9pZCBjb250cm9sUmVzaXplZChDb250cm9sRXZlbnQgZXZlbnQpIHsKKwkJCQkJaWYgKCFndWFyZCkgeworCQkJCQkJZ3VhcmQgPSB0cnVlOworCQkJCQkJaGlkZVRhYnMoKTsKKwkJCQkJCWd1YXJkID0gZmFsc2U7CisJCQkJCX0KKwkJCQl9CisJCQkgfSk7CisKKwkJZ2V0U2l0ZSgpLmdldFNoZWxsKCkuZ2V0RGlzcGxheSgpLmFzeW5jRXhlYworCQkJKG5ldyBSdW5uYWJsZSgpIHsKKwkJCQkgcHVibGljIHZvaWQgcnVuKCkgeworCQkJCQkgdXBkYXRlUHJvYmxlbUluZGljYXRpb24oKTsKKwkJCQkgfQorCQkJIH0pOworCX0gLy8gY3JlYXRlUGFnZXMKKworCS8qKgorCSAqIFRoaXMgaXMgdGhlIG1ldGhvZCB1c2VkIGJ5IHRoZSBmcmFtZXdvcmsgdG8gaW5zdGFsbCB5b3VyIG93biBjb250cm9scy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwkvL0BPdmVycmlkZQorCXB1YmxpYyB2b2lkIGNyZWF0ZVBhZ2VzR2VuKCkgeworCQkvLyBDcmVhdGVzIHRoZSBtb2RlbCBmcm9tIHRoZSBlZGl0b3IgaW5wdXQKKwkJLy8KKwkJY3JlYXRlTW9kZWwoKTsKKworCQkvLyBPbmx5IGNyZWF0ZXMgdGhlIG90aGVyIHBhZ2VzIGlmIHRoZXJlIGlzIHNvbWV0aGluZyB0aGF0IGNhbiBiZSBlZGl0ZWQKKwkJLy8KKwkJaWYgKCFnZXRFZGl0aW5nRG9tYWluKCkuZ2V0UmVzb3VyY2VTZXQoKS5nZXRSZXNvdXJjZXMoKS5pc0VtcHR5KCkpIHsKKwkJCS8vIENyZWF0ZSBhIHBhZ2UgZm9yIHRoZSBzZWxlY3Rpb24gdHJlZSB2aWV3LgorCQkJLy8KKwkJCVRyZWUgdHJlZSA9IG5ldyBUcmVlKGdldENvbnRhaW5lcigpLCBTV1QuTVVMVEkpOworCQkJc2VsZWN0aW9uVmlld2VyID0gbmV3IFRyZWVWaWV3ZXIodHJlZSk7CisJCQlzZXRDdXJyZW50Vmlld2VyKHNlbGVjdGlvblZpZXdlcik7CisKKwkJCXNlbGVjdGlvblZpZXdlci5zZXRDb250ZW50UHJvdmlkZXIobmV3IEFkYXB0ZXJGYWN0b3J5Q29udGVudFByb3ZpZGVyKGFkYXB0ZXJGYWN0b3J5KSk7CisJCQlzZWxlY3Rpb25WaWV3ZXIuc2V0TGFiZWxQcm92aWRlcihuZXcgQWRhcHRlckZhY3RvcnlMYWJlbFByb3ZpZGVyKGFkYXB0ZXJGYWN0b3J5KSk7CisJCQlzZWxlY3Rpb25WaWV3ZXIuc2V0SW5wdXQoZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpKTsKKwkJCXNlbGVjdGlvblZpZXdlci5zZXRTZWxlY3Rpb24obmV3IFN0cnVjdHVyZWRTZWxlY3Rpb24oZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpLmdldFJlc291cmNlcygpLmdldCgwKSksIHRydWUpOworCisJCQluZXcgQWRhcHRlckZhY3RvcnlUcmVlRWRpdG9yKHNlbGVjdGlvblZpZXdlci5nZXRUcmVlKCksIGFkYXB0ZXJGYWN0b3J5KTsKKworCQkJY3JlYXRlQ29udGV4dE1lbnVGb3Ioc2VsZWN0aW9uVmlld2VyKTsKKwkJCWludCBwYWdlSW5kZXggPSBhZGRQYWdlKHRyZWUpOworCQkJc2V0UGFnZVRleHQocGFnZUluZGV4LCBnZXRTdHJpbmcoIl9VSV9TZWxlY3Rpb25QYWdlX2xhYmVsIikpOyAvLyROT04tTkxTLTEkCisKKwkJCWdldFNpdGUoKS5nZXRTaGVsbCgpLmdldERpc3BsYXkoKS5hc3luY0V4ZWMKKwkJCQkobmV3IFJ1bm5hYmxlKCkgeworCQkJCQkgcHVibGljIHZvaWQgcnVuKCkgeworCQkJCQkJIHNldEFjdGl2ZVBhZ2UoMCk7CisJCQkJCSB9CisJCQkJIH0pOworCQl9CisKKwkJLy8gRW5zdXJlcyB0aGF0IHRoaXMgZWRpdG9yIHdpbGwgb25seSBkaXNwbGF5IHRoZSBwYWdlJ3MgdGFiCisJCS8vIGFyZWEgaWYgdGhlcmUgYXJlIG1vcmUgdGhhbiBvbmUgcGFnZQorCQkvLworCQlnZXRDb250YWluZXIoKS5hZGRDb250cm9sTGlzdGVuZXIKKwkJCShuZXcgQ29udHJvbEFkYXB0ZXIoKSB7CisJCQkJYm9vbGVhbiBndWFyZCA9IGZhbHNlOworCQkJCUBPdmVycmlkZQorCQkJCXB1YmxpYyB2b2lkIGNvbnRyb2xSZXNpemVkKENvbnRyb2xFdmVudCBldmVudCkgeworCQkJCQlpZiAoIWd1YXJkKSB7CisJCQkJCQlndWFyZCA9IHRydWU7CisJCQkJCQloaWRlVGFicygpOworCQkJCQkJZ3VhcmQgPSBmYWxzZTsKKwkJCQkJfQorCQkJCX0KKwkJCSB9KTsKKworCQlnZXRTaXRlKCkuZ2V0U2hlbGwoKS5nZXREaXNwbGF5KCkuYXN5bmNFeGVjCisJCQkobmV3IFJ1bm5hYmxlKCkgeworCQkJCSBwdWJsaWMgdm9pZCBydW4oKSB7CisJCQkJCSB1cGRhdGVQcm9ibGVtSW5kaWNhdGlvbigpOworCQkJCSB9CisJCQkgfSk7CisJfQorCisJCisJLyoqCisJICogSWYgdGhlcmUgaXMganVzdCBvbmUgcGFnZSBpbiB0aGUgbXVsdGktcGFnZSBlZGl0b3IgcGFydCwKKwkgKiB0aGlzIGhpZGVzIHRoZSBzaW5nbGUgdGFiIGF0IHRoZSBib3R0b20uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgaGlkZVRhYnMoKSB7CisJCWlmIChnZXRQYWdlQ291bnQoKSA8PSAxKSB7CisJCQlzZXRQYWdlVGV4dCgwLCAiIik7IC8vJE5PTi1OTFMtMSQKKwkJCWlmIChnZXRDb250YWluZXIoKSBpbnN0YW5jZW9mIENUYWJGb2xkZXIpIHsKKwkJCQkoKENUYWJGb2xkZXIpZ2V0Q29udGFpbmVyKCkpLnNldFRhYkhlaWdodCgxKTsKKwkJCQlQb2ludCBwb2ludCA9IGdldENvbnRhaW5lcigpLmdldFNpemUoKTsKKwkJCQlnZXRDb250YWluZXIoKS5zZXRTaXplKHBvaW50LngsIHBvaW50LnkgKyA2KTsKKwkJCX0KKwkJfQorCX0KKworCS8qKgorCSAqIElmIHRoZXJlIGlzIG1vcmUgdGhhbiBvbmUgcGFnZSBpbiB0aGUgbXVsdGktcGFnZSBlZGl0b3IgcGFydCwKKwkgKiB0aGlzIHNob3dzIHRoZSB0YWJzIGF0IHRoZSBib3R0b20uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgc2hvd1RhYnMoKSB7CisJCWlmIChnZXRQYWdlQ291bnQoKSA+IDEpIHsKKwkJCXNldFBhZ2VUZXh0KDAsIGdldFN0cmluZygiX1VJX1NlbGVjdGlvblBhZ2VfbGFiZWwiKSk7IC8vJE5PTi1OTFMtMSQKKwkJCWlmIChnZXRDb250YWluZXIoKSBpbnN0YW5jZW9mIENUYWJGb2xkZXIpIHsKKwkJCQkoKENUYWJGb2xkZXIpZ2V0Q29udGFpbmVyKCkpLnNldFRhYkhlaWdodChTV1QuREVGQVVMVCk7CisJCQkJUG9pbnQgcG9pbnQgPSBnZXRDb250YWluZXIoKS5nZXRTaXplKCk7CisJCQkJZ2V0Q29udGFpbmVyKCkuc2V0U2l6ZShwb2ludC54LCBwb2ludC55IC0gNik7CisJCQl9CisJCX0KKwl9CisKKwkvKioKKwkgKiBUaGlzIGlzIHVzZWQgdG8gdHJhY2sgdGhlIGFjdGl2ZSB2aWV3ZXIuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgcGFnZUNoYW5nZShpbnQgcGFnZUluZGV4KSB7CisJCXN1cGVyLnBhZ2VDaGFuZ2UocGFnZUluZGV4KTsKKworCQlpZiAoY29udGVudE91dGxpbmVQYWdlICE9IG51bGwpIHsKKwkJCWhhbmRsZUNvbnRlbnRPdXRsaW5lU2VsZWN0aW9uKGNvbnRlbnRPdXRsaW5lUGFnZS5nZXRTZWxlY3Rpb24oKSk7CisJCX0KKwl9CisKKwkvKioKKwkgKiBUaGlzIGlzIGhvdyB0aGUgZnJhbWV3b3JrIGRldGVybWluZXMgd2hpY2ggaW50ZXJmYWNlcyB3ZSBpbXBsZW1lbnQuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQFN1cHByZXNzV2FybmluZ3MoInVuY2hlY2tlZCIpCisJCUBPdmVycmlkZQorCXB1YmxpYyBPYmplY3QgZ2V0QWRhcHRlcihDbGFzcyBrZXkpIHsKKwkJaWYgKGtleS5lcXVhbHMoSUNvbnRlbnRPdXRsaW5lUGFnZS5jbGFzcykpIHsKKwkJCXJldHVybiBzaG93T3V0bGluZVZpZXcoKSA/IGdldENvbnRlbnRPdXRsaW5lUGFnZSgpIDogbnVsbDsKKwkJfQorCQllbHNlIGlmIChrZXkuZXF1YWxzKElQcm9wZXJ0eVNoZWV0UGFnZS5jbGFzcykpIHsKKwkJCXJldHVybiBnZXRQcm9wZXJ0eVNoZWV0UGFnZSgpOworCQl9CisJCWVsc2UgaWYgKGtleS5lcXVhbHMoSUdvdG9NYXJrZXIuY2xhc3MpKSB7CisJCQlyZXR1cm4gdGhpczsKKwkJfQorCQllbHNlIHsKKwkJCXJldHVybiBzdXBlci5nZXRBZGFwdGVyKGtleSk7CisJCX0KKwl9CisKKwkvKioKKwkgKiBUaGlzIGFjY2Vzc2VzIGEgY2FjaGVkIHZlcnNpb24gb2YgdGhlIGNvbnRlbnQgb3V0bGluZXIuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIElDb250ZW50T3V0bGluZVBhZ2UgZ2V0Q29udGVudE91dGxpbmVQYWdlKCkgeworCQlpZiAoY29udGVudE91dGxpbmVQYWdlID09IG51bGwpIHsKKwkJCS8vIFRoZSBjb250ZW50IG91dGxpbmUgaXMganVzdCBhIHRyZWUuCisJCQkvLworCQkJY2xhc3MgTXlDb250ZW50T3V0bGluZVBhZ2UgZXh0ZW5kcyBDb250ZW50T3V0bGluZVBhZ2UgeworCQkJCUBPdmVycmlkZQorCQkJCXB1YmxpYyB2b2lkIGNyZWF0ZUNvbnRyb2woQ29tcG9zaXRlIHBhcmVudCkgeworCQkJCQlzdXBlci5jcmVhdGVDb250cm9sKHBhcmVudCk7CisJCQkJCWNvbnRlbnRPdXRsaW5lVmlld2VyID0gZ2V0VHJlZVZpZXdlcigpOworCQkJCQljb250ZW50T3V0bGluZVZpZXdlci5hZGRTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIodGhpcyk7CisKKwkJCQkJLy8gU2V0IHVwIHRoZSB0cmVlIHZpZXdlci4KKwkJCQkJLy8KKwkJCQkJY29udGVudE91dGxpbmVWaWV3ZXIuc2V0Q29udGVudFByb3ZpZGVyKG5ldyBBZGFwdGVyRmFjdG9yeUNvbnRlbnRQcm92aWRlcihhZGFwdGVyRmFjdG9yeSkpOworCQkJCQljb250ZW50T3V0bGluZVZpZXdlci5zZXRMYWJlbFByb3ZpZGVyKG5ldyBBZGFwdGVyRmFjdG9yeUxhYmVsUHJvdmlkZXIoYWRhcHRlckZhY3RvcnkpKTsKKwkJCQkJY29udGVudE91dGxpbmVWaWV3ZXIuc2V0SW5wdXQoZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpKTsKKworCQkJCQkvLyBNYWtlIHN1cmUgb3VyIHBvcHVwcyB3b3JrLgorCQkJCQkvLworCQkJCQljcmVhdGVDb250ZXh0TWVudUZvcihjb250ZW50T3V0bGluZVZpZXdlcik7CisKKwkJCQkJaWYgKCFlZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkuZ2V0UmVzb3VyY2VzKCkuaXNFbXB0eSgpKSB7CisJCQkJCSAgLy8gU2VsZWN0IHRoZSByb290IG9iamVjdCBpbiB0aGUgdmlldy4KKwkJCQkJICAvLworCQkJCQkgIGNvbnRlbnRPdXRsaW5lVmlld2VyLnNldFNlbGVjdGlvbihuZXcgU3RydWN0dXJlZFNlbGVjdGlvbihlZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkuZ2V0UmVzb3VyY2VzKCkuZ2V0KDApKSwgdHJ1ZSk7CisJCQkJCX0KKwkJCQl9CisKKwkJCQlAT3ZlcnJpZGUKKwkJCQlwdWJsaWMgdm9pZCBtYWtlQ29udHJpYnV0aW9ucyhJTWVudU1hbmFnZXIgbWVudU1hbmFnZXIsIElUb29sQmFyTWFuYWdlciB0b29sQmFyTWFuYWdlciwgSVN0YXR1c0xpbmVNYW5hZ2VyIHN0YXR1c0xpbmVNYW5hZ2VyKSB7CisJCQkJCXN1cGVyLm1ha2VDb250cmlidXRpb25zKG1lbnVNYW5hZ2VyLCB0b29sQmFyTWFuYWdlciwgc3RhdHVzTGluZU1hbmFnZXIpOworCQkJCQljb250ZW50T3V0bGluZVN0YXR1c0xpbmVNYW5hZ2VyID0gc3RhdHVzTGluZU1hbmFnZXI7CisJCQkJfQorCisJCQkJQE92ZXJyaWRlCisJCQkJcHVibGljIHZvaWQgc2V0QWN0aW9uQmFycyhJQWN0aW9uQmFycyBhY3Rpb25CYXJzKSB7CisJCQkJCXN1cGVyLnNldEFjdGlvbkJhcnMoYWN0aW9uQmFycyk7CisJCQkJCWdldEFjdGlvbkJhckNvbnRyaWJ1dG9yKCkuc2hhcmVHbG9iYWxBY3Rpb25zKHRoaXMsIGFjdGlvbkJhcnMpOworCQkJCX0KKwkJCX0KKworCQkJY29udGVudE91dGxpbmVQYWdlID0gbmV3IE15Q29udGVudE91dGxpbmVQYWdlKCk7CisKKwkJCS8vIExpc3RlbiB0byBzZWxlY3Rpb24gc28gdGhhdCB3ZSBjYW4gaGFuZGxlIGl0IGlzIGEgc3BlY2lhbCB3YXkuCisJCQkvLworCQkJY29udGVudE91dGxpbmVQYWdlLmFkZFNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcgorCQkJCShuZXcgSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcigpIHsKKwkJCQkJIC8vIFRoaXMgZW5zdXJlcyB0aGF0IHdlIGhhbmRsZSBzZWxlY3Rpb25zIGNvcnJlY3RseS4KKwkJCQkJIC8vCisJCQkJCSBwdWJsaWMgdm9pZCBzZWxlY3Rpb25DaGFuZ2VkKFNlbGVjdGlvbkNoYW5nZWRFdmVudCBldmVudCkgeworCQkJCQkJIGhhbmRsZUNvbnRlbnRPdXRsaW5lU2VsZWN0aW9uKGV2ZW50LmdldFNlbGVjdGlvbigpKTsKKwkJCQkJIH0KKwkJCQkgfSk7CisJCX0KKworCQlyZXR1cm4gY29udGVudE91dGxpbmVQYWdlOworCX0KKworCS8qKgorCSAqIFRoaXMgYWNjZXNzZXMgYSBjYWNoZWQgdmVyc2lvbiBvZiB0aGUgcHJvcGVydHkgc2hlZXQuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIElQcm9wZXJ0eVNoZWV0UGFnZSBnZXRQcm9wZXJ0eVNoZWV0UGFnZSgpIHsKKwkJaWYgKHByb3BlcnR5U2hlZXRQYWdlID09IG51bGwpIHsKKwkJCXByb3BlcnR5U2hlZXRQYWdlID0KKwkJCQluZXcgRXh0ZW5kZWRQcm9wZXJ0eVNoZWV0UGFnZShlZGl0aW5nRG9tYWluKSB7CisJCQkJCUBPdmVycmlkZQorCQkJCQlwdWJsaWMgdm9pZCBzZXRTZWxlY3Rpb25Ub1ZpZXdlcihMaXN0PD8+IHNlbGVjdGlvbikgeworCQkJCQkJU2VxdWVuY2VyRWRpdG9yLnRoaXMuc2V0U2VsZWN0aW9uVG9WaWV3ZXIoc2VsZWN0aW9uKTsKKwkJCQkJCVNlcXVlbmNlckVkaXRvci50aGlzLnNldEZvY3VzKCk7CisJCQkJCX0KKworCQkJCQlAT3ZlcnJpZGUKKwkJCQkJcHVibGljIHZvaWQgc2V0QWN0aW9uQmFycyhJQWN0aW9uQmFycyBhY3Rpb25CYXJzKSB7CisJCQkJCQlzdXBlci5zZXRBY3Rpb25CYXJzKGFjdGlvbkJhcnMpOworCQkJCQkJZ2V0QWN0aW9uQmFyQ29udHJpYnV0b3IoKS5zaGFyZUdsb2JhbEFjdGlvbnModGhpcywgYWN0aW9uQmFycyk7CisJCQkJCX0KKwkJCQl9OworCQkJcHJvcGVydHlTaGVldFBhZ2Uuc2V0UHJvcGVydHlTb3VyY2VQcm92aWRlcihuZXcgQWRhcHRlckZhY3RvcnlDb250ZW50UHJvdmlkZXIoYWRhcHRlckZhY3RvcnkpKTsKKwkJfQorCisJCXJldHVybiBwcm9wZXJ0eVNoZWV0UGFnZTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGRlYWxzIHdpdGggaG93IHdlIHdhbnQgc2VsZWN0aW9uIGluIHRoZSBvdXRsaW5lciB0byBhZmZlY3QgdGhlIG90aGVyIHZpZXdzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIGhhbmRsZUNvbnRlbnRPdXRsaW5lU2VsZWN0aW9uKElTZWxlY3Rpb24gc2VsZWN0aW9uKSB7CisJCWlmIChzZWxlY3Rpb25WaWV3ZXIgIT0gbnVsbCAmJiAhc2VsZWN0aW9uLmlzRW1wdHkoKSAmJiBzZWxlY3Rpb24gaW5zdGFuY2VvZiBJU3RydWN0dXJlZFNlbGVjdGlvbikgeworCQkJSXRlcmF0b3I8Pz4gc2VsZWN0ZWRFbGVtZW50cyA9ICgoSVN0cnVjdHVyZWRTZWxlY3Rpb24pc2VsZWN0aW9uKS5pdGVyYXRvcigpOworCQkJaWYgKHNlbGVjdGVkRWxlbWVudHMuaGFzTmV4dCgpKSB7CisJCQkJLy8gR2V0IHRoZSBmaXJzdCBzZWxlY3RlZCBlbGVtZW50LgorCQkJCS8vCisJCQkJT2JqZWN0IHNlbGVjdGVkRWxlbWVudCA9IHNlbGVjdGVkRWxlbWVudHMubmV4dCgpOworCisJCQkJQXJyYXlMaXN0PE9iamVjdD4gc2VsZWN0aW9uTGlzdCA9IG5ldyBBcnJheUxpc3Q8T2JqZWN0PigpOworCQkJCXNlbGVjdGlvbkxpc3QuYWRkKHNlbGVjdGVkRWxlbWVudCk7CisJCQkJd2hpbGUgKHNlbGVjdGVkRWxlbWVudHMuaGFzTmV4dCgpKSB7CisJCQkJCXNlbGVjdGlvbkxpc3QuYWRkKHNlbGVjdGVkRWxlbWVudHMubmV4dCgpKTsKKwkJCQl9CisKKwkJCQkvLyBTZXQgdGhlIHNlbGVjdGlvbiB0byB0aGUgd2lkZ2V0LgorCQkJCS8vCisJCQkJc2VsZWN0aW9uVmlld2VyLnNldFNlbGVjdGlvbihuZXcgU3RydWN0dXJlZFNlbGVjdGlvbihzZWxlY3Rpb25MaXN0KSk7CisJCQl9CisJCX0KKwl9CisKKwkvKioKKwkgKiBUaGlzIGlzIGZvciBpbXBsZW1lbnRpbmcge0BsaW5rIElFZGl0b3JQYXJ0fSBhbmQgc2ltcGx5IHRlc3RzIHRoZSBjb21tYW5kIHN0YWNrLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBib29sZWFuIGlzRGlydHkoKSB7CisJCXJldHVybiAoKEJhc2ljQ29tbWFuZFN0YWNrKWVkaXRpbmdEb21haW4uZ2V0Q29tbWFuZFN0YWNrKCkpLmlzU2F2ZU5lZWRlZCgpOworCX0KKworCS8qKgorCSAqIFRoaXMgaXMgZm9yIGltcGxlbWVudGluZyB7QGxpbmsgSUVkaXRvclBhcnR9IGFuZCBzaW1wbHkgc2F2ZXMgdGhlIG1vZGVsIGZpbGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgZG9TYXZlKElQcm9ncmVzc01vbml0b3IgcHJvZ3Jlc3NNb25pdG9yKSB7CisJCS8vIFNhdmUgb25seSByZXNvdXJjZXMgdGhhdCBoYXZlIGFjdHVhbGx5IGNoYW5nZWQuCisJCS8vCisJCWZpbmFsIE1hcDxPYmplY3QsIE9iamVjdD4gc2F2ZU9wdGlvbnMgPSBuZXcgSGFzaE1hcDxPYmplY3QsIE9iamVjdD4oKTsKKwkJc2F2ZU9wdGlvbnMucHV0KFJlc291cmNlLk9QVElPTl9TQVZFX09OTFlfSUZfQ0hBTkdFRCwgUmVzb3VyY2UuT1BUSU9OX1NBVkVfT05MWV9JRl9DSEFOR0VEX01FTU9SWV9CVUZGRVIpOworCisJCS8vIERvIHRoZSB3b3JrIHdpdGhpbiBhbiBvcGVyYXRpb24gYmVjYXVzZSB0aGlzIGlzIGEgbG9uZyBydW5uaW5nIGFjdGl2aXR5IHRoYXQgbW9kaWZpZXMgdGhlIHdvcmtiZW5jaC4KKwkJLy8KKwkJV29ya3NwYWNlTW9kaWZ5T3BlcmF0aW9uIG9wZXJhdGlvbiA9CisJCQluZXcgV29ya3NwYWNlTW9kaWZ5T3BlcmF0aW9uKCkgeworCQkJCS8vIFRoaXMgaXMgdGhlIG1ldGhvZCB0aGF0IGdldHMgaW52b2tlZCB3aGVuIHRoZSBvcGVyYXRpb24gcnVucy4KKwkJCQkvLworCQkJCUBPdmVycmlkZQorCQkJCXB1YmxpYyB2b2lkIGV4ZWN1dGUoSVByb2dyZXNzTW9uaXRvciBtb25pdG9yKSB7CisJCQkJCS8vIFNhdmUgdGhlIHJlc291cmNlcyB0byB0aGUgZmlsZSBzeXN0ZW0uCisJCQkJCS8vCisJCQkJCWJvb2xlYW4gZmlyc3QgPSB0cnVlOworCQkJCQlmb3IgKFJlc291cmNlIHJlc291cmNlIDogZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpLmdldFJlc291cmNlcygpKSB7CisJCQkJCQlpZiAoKGZpcnN0IHx8ICFyZXNvdXJjZS5nZXRDb250ZW50cygpLmlzRW1wdHkoKSB8fCBpc1BlcnNpc3RlZChyZXNvdXJjZSkpICYmICFlZGl0aW5nRG9tYWluLmlzUmVhZE9ubHkocmVzb3VyY2UpKSB7CisJCQkJCQkJdHJ5IHsKKwkJCQkJCQkJbG9uZyB0aW1lU3RhbXAgPSByZXNvdXJjZS5nZXRUaW1lU3RhbXAoKTsKKwkJCQkJCQkJcmVzb3VyY2Uuc2F2ZShzYXZlT3B0aW9ucyk7CisJCQkJCQkJCWlmIChyZXNvdXJjZS5nZXRUaW1lU3RhbXAoKSAhPSB0aW1lU3RhbXApIHsKKwkJCQkJCQkJCXNhdmVkUmVzb3VyY2VzLmFkZChyZXNvdXJjZSk7CisJCQkJCQkJCX0KKwkJCQkJCQl9CisJCQkJCQkJY2F0Y2ggKEV4Y2VwdGlvbiBleGNlcHRpb24pIHsKKwkJCQkJCQkJcmVzb3VyY2VUb0RpYWdub3N0aWNNYXAucHV0KHJlc291cmNlLCBhbmFseXplUmVzb3VyY2VQcm9ibGVtcyhyZXNvdXJjZSwgZXhjZXB0aW9uKSk7CisJCQkJCQkJfQorCQkJCQkJCWZpcnN0ID0gZmFsc2U7CisJCQkJCQl9CisJCQkJCX0KKwkJCQl9CisJCQl9OworCisJCXVwZGF0ZVByb2JsZW1JbmRpY2F0aW9uID0gZmFsc2U7CisJCXRyeSB7CisJCQkvLyBUaGlzIHJ1bnMgdGhlIG9wdGlvbnMsIGFuZCBzaG93cyBwcm9ncmVzcy4KKwkJCS8vCisJCQluZXcgUHJvZ3Jlc3NNb25pdG9yRGlhbG9nKGdldFNpdGUoKS5nZXRTaGVsbCgpKS5ydW4odHJ1ZSwgZmFsc2UsIG9wZXJhdGlvbik7CisKKwkJCS8vIFJlZnJlc2ggdGhlIG5lY2Vzc2FyeSBzdGF0ZS4KKwkJCS8vCisJCQkoKEJhc2ljQ29tbWFuZFN0YWNrKWVkaXRpbmdEb21haW4uZ2V0Q29tbWFuZFN0YWNrKCkpLnNhdmVJc0RvbmUoKTsKKwkJCWZpcmVQcm9wZXJ0eUNoYW5nZShJRWRpdG9yUGFydC5QUk9QX0RJUlRZKTsKKwkJfQorCQljYXRjaCAoRXhjZXB0aW9uIGV4Y2VwdGlvbikgeworCQkJLy8gU29tZXRoaW5nIHdlbnQgd3JvbmcgdGhhdCBzaG91bGRuJ3QuCisJCQkvLworCQkJQ29yZUVkaXRvclBsdWdpbi5JTlNUQU5DRS5sb2coZXhjZXB0aW9uKTsKKwkJfQorCQl1cGRhdGVQcm9ibGVtSW5kaWNhdGlvbiA9IHRydWU7CisJCXVwZGF0ZVByb2JsZW1JbmRpY2F0aW9uKCk7CisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIHdoZXRoZXIgc29tZXRoaW5nIGhhcyBiZWVuIHBlcnNpc3RlZCB0byB0aGUgVVJJIG9mIHRoZSBzcGVjaWZpZWQgcmVzb3VyY2UuCisJICogVGhlIGltcGxlbWVudGF0aW9uIHVzZXMgdGhlIFVSSSBjb252ZXJ0ZXIgZnJvbSB0aGUgZWRpdG9yJ3MgcmVzb3VyY2Ugc2V0IHRvIHRyeSB0byBvcGVuIGFuIGlucHV0IHN0cmVhbS4gCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCXByb3RlY3RlZCBib29sZWFuIGlzUGVyc2lzdGVkKFJlc291cmNlIHJlc291cmNlKSB7CisJCXJldHVybiBpc1BlcnNpc3RlZEdlbihyZXNvdXJjZSk7CisvLwkJYm9vbGVhbiByZXN1bHQgPSBmYWxzZTsKKy8vCQl0cnkgeworLy8JCQlJbnB1dFN0cmVhbSBzdHJlYW0gPSBlZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkuZ2V0VVJJQ29udmVydGVyKCkuY3JlYXRlSW5wdXRTdHJlYW0ocmVzb3VyY2UuZ2V0VVJJKCkpOworLy8JCQlpZiAoc3RyZWFtICE9IG51bGwpIHsKKy8vCQkJCXJlc3VsdCA9IHRydWU7CisvLwkJCQlzdHJlYW0uY2xvc2UoKTsKKy8vCQkJfQorLy8JCX0KKy8vCQljYXRjaCAoSU9FeGNlcHRpb24gZSkgeworLy8JCQkvLyBub3RoaW5nCisvLwkJfQorLy8JCXJldHVybiByZXN1bHQ7CisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIHdoZXRoZXIgc29tZXRoaW5nIGhhcyBiZWVuIHBlcnNpc3RlZCB0byB0aGUgVVJJIG9mIHRoZSBzcGVjaWZpZWQgcmVzb3VyY2UuCisJICogVGhlIGltcGxlbWVudGF0aW9uIHVzZXMgdGhlIFVSSSBjb252ZXJ0ZXIgZnJvbSB0aGUgZWRpdG9yJ3MgcmVzb3VyY2Ugc2V0IHRvIHRyeSB0byBvcGVuIGFuIGlucHV0IHN0cmVhbS4gCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIGJvb2xlYW4gaXNQZXJzaXN0ZWRHZW4oUmVzb3VyY2UgcmVzb3VyY2UpIHsKKwkJYm9vbGVhbiByZXN1bHQgPSBmYWxzZTsKKwkJdHJ5IHsKKwkJCUlucHV0U3RyZWFtIHN0cmVhbSA9IGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKS5nZXRVUklDb252ZXJ0ZXIoKS5jcmVhdGVJbnB1dFN0cmVhbShyZXNvdXJjZS5nZXRVUkkoKSk7CisJCQlpZiAoc3RyZWFtICE9IG51bGwpIHsKKwkJCQlyZXN1bHQgPSB0cnVlOworCQkJCXN0cmVhbS5jbG9zZSgpOworCQkJfQorCQl9CisJCWNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7CisJCQkvLyBJZ25vcmUKKwkJfQorCQlyZXR1cm4gcmVzdWx0OworCX0KKwkKKwkvKioKKwkgKiBUaGlzIGFsd2F5cyByZXR1cm5zIHRydWUgYmVjYXVzZSBpdCBpcyBub3QgY3VycmVudGx5IHN1cHBvcnRlZC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgYm9vbGVhbiBpc1NhdmVBc0FsbG93ZWQoKSB7CisJCXJldHVybiB0cnVlOworCX0KKworCS8qKgorCSAqIFRoaXMgYWxzbyBjaGFuZ2VzIHRoZSBlZGl0b3IncyBpbnB1dC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBkb1NhdmVBcygpIHsKKwkJU2F2ZUFzRGlhbG9nIHNhdmVBc0RpYWxvZyA9IG5ldyBTYXZlQXNEaWFsb2coZ2V0U2l0ZSgpLmdldFNoZWxsKCkpOworCQlzYXZlQXNEaWFsb2cub3BlbigpOworCQlJUGF0aCBwYXRoID0gc2F2ZUFzRGlhbG9nLmdldFJlc3VsdCgpOworCQlpZiAocGF0aCAhPSBudWxsKSB7CisJCQlJRmlsZSBmaWxlID0gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmdldFJvb3QoKS5nZXRGaWxlKHBhdGgpOworCQkJaWYgKGZpbGUgIT0gbnVsbCkgeworCQkJCWRvU2F2ZUFzKFVSSS5jcmVhdGVQbGF0Zm9ybVJlc291cmNlVVJJKGZpbGUuZ2V0RnVsbFBhdGgoKS50b1N0cmluZygpLCB0cnVlKSwgbmV3IEZpbGVFZGl0b3JJbnB1dChmaWxlKSk7CisJCQl9CisJCX0KKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBkb1NhdmVBcyhVUkkgdXJpLCBJRWRpdG9ySW5wdXQgZWRpdG9ySW5wdXQpIHsKKwkJKGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKS5nZXRSZXNvdXJjZXMoKS5nZXQoMCkpLnNldFVSSSh1cmkpOworCQlzZXRJbnB1dFdpdGhOb3RpZnkoZWRpdG9ySW5wdXQpOworCQlzZXRQYXJ0TmFtZShlZGl0b3JJbnB1dC5nZXROYW1lKCkpOworCQlJUHJvZ3Jlc3NNb25pdG9yIHByb2dyZXNzTW9uaXRvciA9CisJCQlnZXRBY3Rpb25CYXJzKCkuZ2V0U3RhdHVzTGluZU1hbmFnZXIoKSAhPSBudWxsID8KKwkJCQlnZXRBY3Rpb25CYXJzKCkuZ2V0U3RhdHVzTGluZU1hbmFnZXIoKS5nZXRQcm9ncmVzc01vbml0b3IoKSA6CisJCQkJbmV3IE51bGxQcm9ncmVzc01vbml0b3IoKTsKKwkJZG9TYXZlKHByb2dyZXNzTW9uaXRvcik7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgZ290b01hcmtlcihJTWFya2VyIG1hcmtlcikgeworCQl0cnkgeworCQkJaWYgKG1hcmtlci5nZXRUeXBlKCkuZXF1YWxzKEVWYWxpZGF0b3IuTUFSS0VSKSkgeworCQkJCVN0cmluZyB1cmlBdHRyaWJ1dGUgPSBtYXJrZXIuZ2V0QXR0cmlidXRlKEVWYWxpZGF0b3IuVVJJX0FUVFJJQlVURSwgbnVsbCk7CisJCQkJaWYgKHVyaUF0dHJpYnV0ZSAhPSBudWxsKSB7CisJCQkJCVVSSSB1cmkgPSBVUkkuY3JlYXRlVVJJKHVyaUF0dHJpYnV0ZSk7CisJCQkJCUVPYmplY3QgZU9iamVjdCA9IGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKS5nZXRFT2JqZWN0KHVyaSwgdHJ1ZSk7CisJCQkJCWlmIChlT2JqZWN0ICE9IG51bGwpIHsKKwkJCQkJICBzZXRTZWxlY3Rpb25Ub1ZpZXdlcihDb2xsZWN0aW9ucy5zaW5nbGV0b24oZWRpdGluZ0RvbWFpbi5nZXRXcmFwcGVyKGVPYmplY3QpKSk7CisJCQkJCX0KKwkJCQl9CisJCQl9CisJCX0KKwkJY2F0Y2ggKENvcmVFeGNlcHRpb24gZXhjZXB0aW9uKSB7CisJCQlDb3JlRWRpdG9yUGx1Z2luLklOU1RBTkNFLmxvZyhleGNlcHRpb24pOworCQl9CisJfQorCisJLyoqCisJICogVGhpcyBpcyBjYWxsZWQgZHVyaW5nIHN0YXJ0dXAuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgaW5pdChJRWRpdG9yU2l0ZSBzaXRlLCBJRWRpdG9ySW5wdXQgZWRpdG9ySW5wdXQpIHsKKwkJc2V0U2l0ZShzaXRlKTsKKwkJc2V0SW5wdXRXaXRoTm90aWZ5KGVkaXRvcklucHV0KTsKKwkJc2V0UGFydE5hbWUoZWRpdG9ySW5wdXQuZ2V0TmFtZSgpKTsKKwkJc2l0ZS5zZXRTZWxlY3Rpb25Qcm92aWRlcih0aGlzKTsKKwkJc2l0ZS5nZXRQYWdlKCkuYWRkUGFydExpc3RlbmVyKHBhcnRMaXN0ZW5lcik7CisJCVJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5hZGRSZXNvdXJjZUNoYW5nZUxpc3RlbmVyKHJlc291cmNlQ2hhbmdlTGlzdGVuZXIsIElSZXNvdXJjZUNoYW5nZUV2ZW50LlBPU1RfQ0hBTkdFKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBzZXRGb2N1cygpIHsKKwkJZ2V0Q29udHJvbChnZXRBY3RpdmVQYWdlKCkpLnNldEZvY3VzKCk7CisJfQorCisJLyoqCisJICogVGhpcyBpbXBsZW1lbnRzIHtAbGluayBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb25Qcm92aWRlcn0uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgYWRkU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyKElTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIgbGlzdGVuZXIpIHsKKwkJc2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVycy5hZGQobGlzdGVuZXIpOworCX0KKworCS8qKgorCSAqIFRoaXMgaW1wbGVtZW50cyB7QGxpbmsgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uUHJvdmlkZXJ9LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIHJlbW92ZVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcihJU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyIGxpc3RlbmVyKSB7CisJCXNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcnMucmVtb3ZlKGxpc3RlbmVyKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGltcGxlbWVudHMge0BsaW5rIG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvblByb3ZpZGVyfSB0byByZXR1cm4gdGhpcyBlZGl0b3IncyBvdmVyYWxsIHNlbGVjdGlvbi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgSVNlbGVjdGlvbiBnZXRTZWxlY3Rpb24oKSB7CisJCXJldHVybiBlZGl0b3JTZWxlY3Rpb247CisJfQorCisJLyoqCisJICogVGhpcyBpbXBsZW1lbnRzIHtAbGluayBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb25Qcm92aWRlcn0gdG8gc2V0IHRoaXMgZWRpdG9yJ3Mgb3ZlcmFsbCBzZWxlY3Rpb24uCisJICogQ2FsbGluZyB0aGlzIHJlc3VsdCB3aWxsIG5vdGlmeSB0aGUgbGlzdGVuZXJzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIHNldFNlbGVjdGlvbihJU2VsZWN0aW9uIHNlbGVjdGlvbikgeworCQllZGl0b3JTZWxlY3Rpb24gPSBzZWxlY3Rpb247CisKKwkJZm9yIChJU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyIGxpc3RlbmVyIDogc2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVycykgeworCQkJbGlzdGVuZXIuc2VsZWN0aW9uQ2hhbmdlZChuZXcgU2VsZWN0aW9uQ2hhbmdlZEV2ZW50KHRoaXMsIHNlbGVjdGlvbikpOworCQl9CisJCXNldFN0YXR1c0xpbmVNYW5hZ2VyKHNlbGVjdGlvbik7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgc2V0U3RhdHVzTGluZU1hbmFnZXIoSVNlbGVjdGlvbiBzZWxlY3Rpb24pIHsKKwkJSVN0YXR1c0xpbmVNYW5hZ2VyIHN0YXR1c0xpbmVNYW5hZ2VyID0gY3VycmVudFZpZXdlciAhPSBudWxsICYmIGN1cnJlbnRWaWV3ZXIgPT0gY29udGVudE91dGxpbmVWaWV3ZXIgPworCQkJY29udGVudE91dGxpbmVTdGF0dXNMaW5lTWFuYWdlciA6IGdldEFjdGlvbkJhcnMoKS5nZXRTdGF0dXNMaW5lTWFuYWdlcigpOworCisJCWlmIChzdGF0dXNMaW5lTWFuYWdlciAhPSBudWxsKSB7CisJCQlpZiAoc2VsZWN0aW9uIGluc3RhbmNlb2YgSVN0cnVjdHVyZWRTZWxlY3Rpb24pIHsKKwkJCQlDb2xsZWN0aW9uPD8+IGNvbGxlY3Rpb24gPSAoKElTdHJ1Y3R1cmVkU2VsZWN0aW9uKXNlbGVjdGlvbikudG9MaXN0KCk7CisJCQkJc3dpdGNoIChjb2xsZWN0aW9uLnNpemUoKSkgeworCQkJCQljYXNlIDA6IHsKKwkJCQkJCXN0YXR1c0xpbmVNYW5hZ2VyLnNldE1lc3NhZ2UoZ2V0U3RyaW5nKCJfVUlfTm9PYmplY3RTZWxlY3RlZCIpKTsgLy8kTk9OLU5MUy0xJAorCQkJCQkJYnJlYWs7CisJCQkJCX0KKwkJCQkJY2FzZSAxOiB7CisJCQkJCQlTdHJpbmcgdGV4dCA9IG5ldyBBZGFwdGVyRmFjdG9yeUl0ZW1EZWxlZ2F0b3IoYWRhcHRlckZhY3RvcnkpLmdldFRleHQoY29sbGVjdGlvbi5pdGVyYXRvcigpLm5leHQoKSk7CisJCQkJCQlzdGF0dXNMaW5lTWFuYWdlci5zZXRNZXNzYWdlKGdldFN0cmluZygiX1VJX1NpbmdsZU9iamVjdFNlbGVjdGVkIiwgdGV4dCkpOyAvLyROT04tTkxTLTEkCisJCQkJCQlicmVhazsKKwkJCQkJfQorCQkJCQlkZWZhdWx0OiB7CisJCQkJCQlzdGF0dXNMaW5lTWFuYWdlci5zZXRNZXNzYWdlKGdldFN0cmluZygiX1VJX011bHRpT2JqZWN0U2VsZWN0ZWQiLCBJbnRlZ2VyLnRvU3RyaW5nKGNvbGxlY3Rpb24uc2l6ZSgpKSkpOyAvLyROT04tTkxTLTEkCisJCQkJCQlicmVhazsKKwkJCQkJfQorCQkJCX0KKwkJCX0KKwkJCWVsc2UgeworCQkJCXN0YXR1c0xpbmVNYW5hZ2VyLnNldE1lc3NhZ2UoIiIpOyAvLyROT04tTkxTLTEkCisJCQl9CisJCX0KKwl9CisKKwkvKioKKwkgKiBUaGlzIGxvb2tzIHVwIGEgc3RyaW5nIGluIHRoZSBwbHVnaW4ncyBwbHVnaW4ucHJvcGVydGllcyBmaWxlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByaXZhdGUgc3RhdGljIFN0cmluZyBnZXRTdHJpbmcoU3RyaW5nIGtleSkgeworCQlyZXR1cm4gQ29yZUVkaXRvclBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoa2V5KTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGxvb2tzIHVwIGEgc3RyaW5nIGluIHBsdWdpbi5wcm9wZXJ0aWVzLCBtYWtpbmcgYSBzdWJzdGl0dXRpb24uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIGdldFN0cmluZyhTdHJpbmcga2V5LCBPYmplY3QgczEpIHsKKwkJcmV0dXJuIENvcmVFZGl0b3JQbHVnaW4uSU5TVEFOQ0UuZ2V0U3RyaW5nKGtleSwgbmV3IE9iamVjdCBbXSB7IHMxIH0pOworCX0KKworCS8qKgorCSAqIFRoaXMgaW1wbGVtZW50cyB7QGxpbmsgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklNZW51TGlzdGVuZXJ9IHRvIGhlbHAgZmlsbCB0aGUgY29udGV4dCBtZW51cyB3aXRoIGNvbnRyaWJ1dGlvbnMgZnJvbSB0aGUgRWRpdCBtZW51LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIG1lbnVBYm91dFRvU2hvdyhJTWVudU1hbmFnZXIgbWVudU1hbmFnZXIpIHsKKwkJKChJTWVudUxpc3RlbmVyKWdldEVkaXRvclNpdGUoKS5nZXRBY3Rpb25CYXJDb250cmlidXRvcigpKS5tZW51QWJvdXRUb1Nob3cobWVudU1hbmFnZXIpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFZGl0aW5nRG9tYWluQWN0aW9uQmFyQ29udHJpYnV0b3IgZ2V0QWN0aW9uQmFyQ29udHJpYnV0b3IoKSB7CisJCXJldHVybiAoRWRpdGluZ0RvbWFpbkFjdGlvbkJhckNvbnRyaWJ1dG9yKWdldEVkaXRvclNpdGUoKS5nZXRBY3Rpb25CYXJDb250cmlidXRvcigpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBJQWN0aW9uQmFycyBnZXRBY3Rpb25CYXJzKCkgeworCQlyZXR1cm4gZ2V0QWN0aW9uQmFyQ29udHJpYnV0b3IoKS5nZXRBY3Rpb25CYXJzKCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEFkYXB0ZXJGYWN0b3J5IGdldEFkYXB0ZXJGYWN0b3J5KCkgeworCQlyZXR1cm4gYWRhcHRlckZhY3Rvcnk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgZGlzcG9zZSgpIHsKKwkJdXBkYXRlUHJvYmxlbUluZGljYXRpb24gPSBmYWxzZTsKKworCQlSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkucmVtb3ZlUmVzb3VyY2VDaGFuZ2VMaXN0ZW5lcihyZXNvdXJjZUNoYW5nZUxpc3RlbmVyKTsKKworCQlnZXRTaXRlKCkuZ2V0UGFnZSgpLnJlbW92ZVBhcnRMaXN0ZW5lcihwYXJ0TGlzdGVuZXIpOworCisJCWFkYXB0ZXJGYWN0b3J5LmRpc3Bvc2UoKTsKKworCQlpZiAoZ2V0QWN0aW9uQmFyQ29udHJpYnV0b3IoKS5nZXRBY3RpdmVFZGl0b3IoKSA9PSB0aGlzKSB7CisJCQlnZXRBY3Rpb25CYXJDb250cmlidXRvcigpLnNldEFjdGl2ZUVkaXRvcihudWxsKTsKKwkJfQorCisJCWlmIChwcm9wZXJ0eVNoZWV0UGFnZSAhPSBudWxsKSB7CisJCQlwcm9wZXJ0eVNoZWV0UGFnZS5kaXNwb3NlKCk7CisJCX0KKworCQlpZiAoY29udGVudE91dGxpbmVQYWdlICE9IG51bGwpIHsKKwkJCWNvbnRlbnRPdXRsaW5lUGFnZS5kaXNwb3NlKCk7CisJCX0KKworCQlzdXBlci5kaXNwb3NlKCk7CisJfQorCisJLyoqCisJICogUmV0dXJucyB3aGV0aGVyIHRoZSBvdXRsaW5lIHZpZXcgc2hvdWxkIGJlIHByZXNlbnRlZCB0byB0aGUgdXNlci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgYm9vbGVhbiBzaG93T3V0bGluZVZpZXcoKSB7CisJCXJldHVybiBmYWxzZTsKKwl9Cit9CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9zb2x2ZXIvU29sdmVyUHJvcGVydHlDb21wb3NpdGUuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3NvbHZlci9Tb2x2ZXJQcm9wZXJ0eUNvbXBvc2l0ZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ2ZDUwMDkKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9zb2x2ZXIvU29sdmVyUHJvcGVydHlDb21wb3NpdGUuamF2YQpAQCAtMCwwICsxLDEyOCBAQAorLy8gRGlzZWFzZU1vZGVsUHJvcGVydHlDb21wb3NpdGUuamF2YQorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc29sdmVyOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOworaW1wb3J0IGphdmEudXRpbC5NYXA7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnVpLkFjdGl2YXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnVpLndpemFyZHMuTWVzc2FnZXM7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LlNXVDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuY3VzdG9tLlN0YWNrTGF5b3V0OworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuTW9kaWZ5TGlzdGVuZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkxhYmVsOworCisvKioKKyAqIAorICovCitwdWJsaWMgY2xhc3MgU29sdmVyUHJvcGVydHlDb21wb3NpdGUgZXh0ZW5kcyBDb21wb3NpdGUgeworCisJcHJpdmF0ZSBNYXA8U29sdmVyLCBTb2x2ZXJQcm9wZXJ0eUVkaXRvcj4gbW9kZWxNYXAgPSBuZXcgSGFzaE1hcDxTb2x2ZXIsIFNvbHZlclByb3BlcnR5RWRpdG9yPigpOworCisJcHJpdmF0ZSBTdGFja0xheW91dCBzdGFja0xheW91dCA9IG51bGw7CisKKwkvKioKKwkgKiBDcmVhdGUgdGhlIGNvbXBvc2l0ZQorCSAqIAorCSAqIEBwYXJhbSBwYXJlbnQKKwkgKiBAcGFyYW0gc3R5bGUKKwkgKiBAcGFyYW0gcHJvamVjdFZhbGlkYXRvcgorCSAqLworCXB1YmxpYyBTb2x2ZXJQcm9wZXJ0eUNvbXBvc2l0ZShmaW5hbCBDb21wb3NpdGUgcGFyZW50LAorCQkJZmluYWwgaW50IHN0eWxlLCBmaW5hbCBTb2x2ZXJbXSBzb2x2ZXJzLAorCQkJTW9kaWZ5TGlzdGVuZXIgcHJvamVjdFZhbGlkYXRvcikgeworCQlzdXBlcihwYXJlbnQsIHN0eWxlKTsKKwkJc3RhY2tMYXlvdXQgPSBuZXcgU3RhY2tMYXlvdXQoKTsKKwkJc2V0TGF5b3V0KHN0YWNrTGF5b3V0KTsKKworCQlMYWJlbCBsYWJlbDsKKwkJbGFiZWwgPSBuZXcgTGFiZWwodGhpcywgU1dULk5PTkUpOworCQlsYWJlbC5zZXRUZXh0KE1lc3NhZ2VzLmdldFN0cmluZygiU1BDMSIpKTsgLy8kTk9OLU5MUy0xJAorCQlTb2x2ZXJQcm9wZXJ0eUVkaXRvciBmaXJzdE9uZSA9IG51bGw7CisJCS8vIEFueSBkaXNlYXNlIG1vZGVscz8KKwkJaWYgKHNvbHZlcnMgIT0gbnVsbCkgeworCQkJLy8gWWVzCisJCQlmb3IgKGludCBpID0gMDsgaSA8IHNvbHZlcnMubGVuZ3RoOyBpKyspIHsKKwkJCQlTb2x2ZXJQcm9wZXJ0eUVkaXRvckFkYXB0ZXIgc3BlYSA9IChTb2x2ZXJQcm9wZXJ0eUVkaXRvckFkYXB0ZXIpIFNvbHZlclByb3BlcnR5RWRpdG9yQWRhcHRlckZhY3RvcnkuSU5TVEFOQ0UKKwkJCQkJCS5hZGFwdChzb2x2ZXJzW2ldLAorCQkJCQkJCQlTb2x2ZXJQcm9wZXJ0eUVkaXRvckFkYXB0ZXIuY2xhc3MpOworCisJCQkJZmluYWwgU29sdmVyUHJvcGVydHlFZGl0b3Igc3BlID0gc3BlYQorCQkJCQkJLmNyZWF0ZVNvbHZlclByb3BlcnR5RWRpdG9yKHRoaXMsIFNXVC5OT05FLAorCQkJCQkJCQlwcm9qZWN0VmFsaWRhdG9yKTsKKworCQkJCW1vZGVsTWFwLnB1dChzb2x2ZXJzW2ldLCBzcGUpOworCQkJCWlmIChmaXJzdE9uZSA9PSBudWxsKSB7CisJCQkJCS8vIFllcworCQkJCQlmaXJzdE9uZSA9IHNwZTsKKwkJCQl9IC8vIGlmCisJCQl9IC8vIGZvciBpCisJCX0gLy8gaWYgYW55IGRpc2Vhc2UgbW9kZWxzPworCisJCXN0YWNrTGF5b3V0LnRvcENvbnRyb2wgPSBmaXJzdE9uZTsKKwl9IC8vIERpc2Vhc2VNb2RlbFByb3BlcnR5Q29tcG9zaXRlCisKKwlwdWJsaWMgdm9pZCBkaXNwbGF5U29sdmVyKGZpbmFsIFNvbHZlciBzb2x2ZXIpIHsKKwkJZmluYWwgU29sdmVyUHJvcGVydHlFZGl0b3Igc3BlID0gbW9kZWxNYXAuZ2V0KHNvbHZlcik7CisJCS8vIERpZCB3ZSBmaW5kIGl0PworCQlpZiAoc3BlICE9IG51bGwpIHsKKwkJCS8vIFllcworCQkJc3RhY2tMYXlvdXQudG9wQ29udHJvbCA9IHNwZTsKKwkJCWxheW91dCgpOworCQl9IC8vIGlmCisJCWVsc2UgeworCQkJQWN0aXZhdG9yLmxvZ0Vycm9yKE1lc3NhZ2VzLmdldFN0cmluZygiU1BDMiIpIC8vJE5PTi1OTFMtMSQKKwkJCQkJKyBzb2x2ZXIuZ2V0Q2xhc3MoKS5nZXROYW1lKCkgKyAiXCIiLCBudWxsKTsgLy8kTk9OLU5MUy0xJAorCQl9CisJfSAvLyBkaXNwbGF5U29sdmVyCisJCisJcHVibGljIFNvbHZlciBjcmVhdGVTb2x2ZXIoKSB7CisJCVNvbHZlclByb3BlcnR5RWRpdG9yIHNwZSA9IChTb2x2ZXJQcm9wZXJ0eUVkaXRvcilzdGFja0xheW91dC50b3BDb250cm9sOworCQlyZXR1cm4gc3BlLmNyZWF0ZUFuZFBvcHVsYXRlU29sdmVyKCk7CisJfQorCXB1YmxpYyB2b2lkIGRpc3Bvc2UoKSB7CisJCXN1cGVyLmRpc3Bvc2UoKTsKKwl9CisKKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgdm9pZCBjaGVja1N1YmNsYXNzKCkgeworCQkvLyBEaXNhYmxlIHRoZSBjaGVjayB0aGF0IHByZXZlbnRzIHN1Yi1jbGFzc2luZyBvZiBTV1QgY29tcG9uZW50cworCX0KKworCS8qKgorCSAqIEByZXR1cm4gPGNvZGU+dHJ1ZTwvY29kZT4gaWYgdGhlIGNvbnRlbnRzIG9mIHRoZSBjb21wb3NpdGUgYXJlIHZhbGlkLAorCSAqICAgICAgICAgPGNvZGU+ZmFsc2U8L2NvZGU+IG90aGVyd2lzZS4KKwkgKi8KKwlwdWJsaWMgYm9vbGVhbiB2YWxpZGF0ZSgpIHsKKwkJcmV0dXJuICgoU29sdmVyUHJvcGVydHlFZGl0b3IpIChzdGFja0xheW91dC50b3BDb250cm9sKSkKKwkJCQkudmFsaWRhdGUoKTsKKwl9IC8vIHZhbGlkYXRlCisKKwkvKioKKwkgKiBAcmV0dXJuCisJICovCisJcHVibGljIFN0cmluZyBnZXRFcnJvck1lc3NhZ2UoKSB7CisJCXJldHVybiAoKFNvbHZlclByb3BlcnR5RWRpdG9yKSAoc3RhY2tMYXlvdXQudG9wQ29udHJvbCkpCisJCQkJLmdldEVycm9yTWVzc2FnZSgpOworCX0KKworCS8qKgorCSAqIEBwYXJhbSBzb2x2ZXIKKwkgKi8KKwlwdWJsaWMgdm9pZCBwb3B1bGF0ZVNvbHZlcihTb2x2ZXIgc29sdmVyKSB7CisJCSgoU29sdmVyUHJvcGVydHlFZGl0b3IpIChzdGFja0xheW91dC50b3BDb250cm9sKSkKKwkJCQkucG9wdWxhdGUoc29sdmVyKTsKKwl9IC8vIHBvcHVsYXRlU29sdmVyCisKK30gLy8gU29sdmVyUHJvcGVydHlDb21wb3NpdGUKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3NvbHZlci9Tb2x2ZXJQcm9wZXJ0eUVkaXRvci5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvc29sdmVyL1NvbHZlclByb3BlcnR5RWRpdG9yLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzM3MTlhZgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3NvbHZlci9Tb2x2ZXJQcm9wZXJ0eUVkaXRvci5qYXZhCkBAIC0wLDAgKzEsMTAzIEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zb2x2ZXI7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDkgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7CitpbXBvcnQgamF2YS51dGlsLk1hcDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVTdHJ1Y3R1cmFsRmVhdHVyZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbVByb3BlcnR5RGVzY3JpcHRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuVGV4dDsKKworYWJzdHJhY3QgcHVibGljIGNsYXNzIFNvbHZlclByb3BlcnR5RWRpdG9yIGV4dGVuZHMgQ29tcG9zaXRlIHsKKworCS8qKgorCSAqIEBwYXJhbSBmZWF0dXJlCisJICogQHJldHVybiA8Y29kZT50cnVlPC9jb2RlPiBpZiB0aGUgZmVhdHVyZSBpcyBhIGR1YmxpbiBjb3JlIGZlYXR1cmUgCisJICogdGhhdCBpcyBzcGVjaWZpZWQgYnkgYSB1c2VyLgorCSAqLworCXB1YmxpYyBzdGF0aWMgYm9vbGVhbiBpc1VzZXJTcGVjaWZpZWRTb2x2ZXJQcm9wZXJ0eShmaW5hbCBFU3RydWN0dXJhbEZlYXR1cmUgZmVhdHVyZSkgeworCQlib29sZWFuIHJldFZhbHVlID0gZmFsc2U7CisJCWZpbmFsIEVDbGFzcyBjb250YWluaW5nQ2xhc3MgPSBmZWF0dXJlLmdldEVDb250YWluaW5nQ2xhc3MoKTsKKwkJLy8gSXMgaXQgYSBkaXNlYXNlIG1vZGVsIHByb3BlcnR5PworCQlpZiAoY29udGFpbmluZ0NsYXNzLmVxdWFscyhTb2x2ZXJQYWNrYWdlLmVJTlNUQU5DRS5nZXRTb2x2ZXIoKSkKKwkJCQl8fCBjb250YWluaW5nQ2xhc3MuZ2V0RUFsbFN1cGVyVHlwZXMoKS5jb250YWlucygKKwkJCQkJCVNvbHZlclBhY2thZ2UuZUlOU1RBTkNFLmdldFNvbHZlcigpKSkgeworCQkJcmV0VmFsdWUgPSB0cnVlOworCQl9IC8vIGlmIGEgZGlzZWFzZSBtb2RlbCBwcm9wZXJ0eQorCQlyZXR1cm4gcmV0VmFsdWU7CisJfSAvLyBpc1VzZXJTcGVjaWZpZWREaXNlYXNlTW9kZWxQcm9wZXJ0eQorCisJLyoqCisJICogQHBhcmFtIGRlc2NyaXB0b3IKKwkgKiBAcmV0dXJuIHRoZSBzdHJpbmcgdGhhdCByZXByZXNlbnRzIHRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSBwcm9wZXJ0eQorCSAqLworCXByb3RlY3RlZCBTdHJpbmcgZ2V0UHJvcGVydHlEZWZhdWx0VmFsdWVTdHJpbmcoZmluYWwgSUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IgZGVzY3JpcHRvcikgeworCQlTdHJpbmcgcmV0VmFsdWUgPSAiIjsgLy8kTk9OLU5MUy0xJAorCQorCQlmaW5hbCBFU3RydWN0dXJhbEZlYXR1cmUgZmVhdHVyZSA9IChFU3RydWN0dXJhbEZlYXR1cmUpIGRlc2NyaXB0b3IKKwkJCQkuZ2V0RmVhdHVyZShudWxsKTsKKwkKKwkJc3dpdGNoIChmZWF0dXJlLmdldEZlYXR1cmVJRCgpKSB7CisJCS8vIEFueSBzcGVjaWFsIGhhbmRsaW5nIGhlcmUuLi4KKwkJCWRlZmF1bHQ6CisJCQkJcmV0VmFsdWUgPSBmZWF0dXJlLmdldERlZmF1bHRWYWx1ZUxpdGVyYWwoKTsKKwkJCQlyZXRWYWx1ZSA9IHJldFZhbHVlID09IG51bGwgPyAiIiA6IHJldFZhbHVlOyAvLyROT04tTkxTLTEkCisJCQkJYnJlYWs7CisJCX0gLy8gc3dpdGNoCisJCisJCXJldHVybiByZXRWYWx1ZTsKKwl9IC8vIGdldFByb3BlcnR5RGVmYXVsdFZhbHVlU3RyaW5nCisJCisJcHJvdGVjdGVkIGZpbmFsIE1hcDxFU3RydWN0dXJhbEZlYXR1cmUsIFRleHQ+IG1hcCA9IG5ldyBIYXNoTWFwPEVTdHJ1Y3R1cmFsRmVhdHVyZSwgVGV4dD4oKTsKKwlwcm90ZWN0ZWQgU3RyaW5nIGVycm9yTWVzc2FnZTsKKworCXB1YmxpYyBTb2x2ZXJQcm9wZXJ0eUVkaXRvcihDb21wb3NpdGUgcGFyZW50LCBpbnQgc3R5bGUpIHsKKwkJc3VwZXIocGFyZW50LHN0eWxlKTsKKwl9CisKKwlwdWJsaWMgdm9pZCBwb3B1bGF0ZShTb2x2ZXIgc29sdmVyKSB7CisJCS8vIE5vdGhpbmcgdG8gZG8gaGVyZSBzaW5jZSB0aGVyZSBhcmUgbm8gY29tbW9uIHNvbHZlciBhdHRyaWJ1dGVzIHJpZ2h0IG5vdworCX0KKworCS8qKgorCSAqIENyZWF0ZSB0aGUgc29sdmVyIGluc3RhbmNlIGZyb20gZm9ybSBkYXRhCisJICogQHJldHVybiBTb2x2ZXIKKwkgKi8KKwlwdWJsaWMgYWJzdHJhY3QgU29sdmVyIGNyZWF0ZUFuZFBvcHVsYXRlU29sdmVyKCk7CisJCisJCisJcHVibGljIGJvb2xlYW4gdmFsaWRhdGUoKSB7CisJCWJvb2xlYW4gcmV0VmFsdWUgPSB0cnVlOworCQlyZXR1cm4gcmV0VmFsdWU7CisJfSAvLyB2YWxpZGF0ZQorCisJCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgZGlzcG9zZSgpIHsKKwkJc3VwZXIuZGlzcG9zZSgpOworCX0KKworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIGNoZWNrU3ViY2xhc3MoKSB7CisJCS8vIERpc2FibGUgdGhlIGNoZWNrIHRoYXQgcHJldmVudHMgc3ViLWNsYXNzaW5nIG9mIFNXVCBjb21wb25lbnRzCisJfQorCisJLyoqCisJICogQHJldHVybiB0aGUgZXJyb3IgbWVzc2FnZSB0aGF0IGRlc2NyaWJlcyB0aGUgcHJvYmxlbSB3aXRoIHRoZSBjb250ZW50cworCSAqLworCXB1YmxpYyBTdHJpbmcgZ2V0RXJyb3JNZXNzYWdlKCkgeworCQlyZXR1cm4gZXJyb3JNZXNzYWdlOworCX0KK30gLy8gU29sdmVyUHJvcGVydHlFZGl0b3IKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3NvbHZlci9Tb2x2ZXJQcm9wZXJ0eUVkaXRvckFkYXB0ZXIuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3NvbHZlci9Tb2x2ZXJQcm9wZXJ0eUVkaXRvckFkYXB0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NTcwMWY2Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvc29sdmVyL1NvbHZlclByb3BlcnR5RWRpdG9yQWRhcHRlci5qYXZhCkBAIC0wLDAgKzEsMjIgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNvbHZlcjsKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LkFkYXB0ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuaW1wbC5BZGFwdGVySW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLk1vZGlmeUxpc3RlbmVyOworCithYnN0cmFjdCBwdWJsaWMgY2xhc3MgU29sdmVyUHJvcGVydHlFZGl0b3JBZGFwdGVyIGV4dGVuZHMgQWRhcHRlckltcGwKKwkJaW1wbGVtZW50cyBBZGFwdGVyIHsKKworCWFic3RyYWN0IHB1YmxpYyBTb2x2ZXJQcm9wZXJ0eUVkaXRvciBjcmVhdGVTb2x2ZXJQcm9wZXJ0eUVkaXRvcigKKwkJCVNvbHZlclByb3BlcnR5Q29tcG9zaXRlIHNvbHZlclByb3BlcnR5Q29tcG9zaXRlLAorCQkJaW50IHN0eWxlLCBNb2RpZnlMaXN0ZW5lciBwcm9qZWN0VmFsaWRhdG9yKTsKK30gLy8gU29sdmVyUHJvcGVydHlFZGl0b3JBZGFwdGVyCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9zb2x2ZXIvU29sdmVyUHJvcGVydHlFZGl0b3JBZGFwdGVyRmFjdG9yeS5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvc29sdmVyL1NvbHZlclByb3BlcnR5RWRpdG9yQWRhcHRlckZhY3RvcnkuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YjgxMjE2Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvc29sdmVyL1NvbHZlclByb3BlcnR5RWRpdG9yQWRhcHRlckZhY3RvcnkuamF2YQpAQCAtMCwwICsxLDM0IEBACisvLyBEaXNlYXNlTW9kZWxQcm9wZXJ0eUVkaXRvckFkYXB0ZXJGYWN0b3J5LmphdmEKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNvbHZlcjsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA5IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkNvbXBvc2VkQWRhcHRlckZhY3Rvcnk7CisKKy8qKgorICoKKyAqLworcHVibGljIGludGVyZmFjZSBTb2x2ZXJQcm9wZXJ0eUVkaXRvckFkYXB0ZXJGYWN0b3J5IHsKKworCVNvbHZlclByb3BlcnR5RWRpdG9yQWRhcHRlckZhY3RvcnlJbXBsIElOU1RBTkNFID0gbmV3IFNvbHZlclByb3BlcnR5RWRpdG9yQWRhcHRlckZhY3RvcnlJbXBsKCk7CisKKwlwdWJsaWMgY2xhc3MgU29sdmVyUHJvcGVydHlFZGl0b3JBZGFwdGVyRmFjdG9yeUltcGwgZXh0ZW5kcworCQkJQ29tcG9zZWRBZGFwdGVyRmFjdG9yeSBpbXBsZW1lbnRzCisJCQlTb2x2ZXJQcm9wZXJ0eUVkaXRvckFkYXB0ZXJGYWN0b3J5IHsKKworCQlAT3ZlcnJpZGUKKwkJcHVibGljIGJvb2xlYW4gaXNGYWN0b3J5Rm9yVHlwZShPYmplY3QgdHlwZSkgeworCQkJcmV0dXJuIHR5cGUgPT0gU29sdmVyUHJvcGVydHlFZGl0b3JBZGFwdGVyLmNsYXNzOworCQl9CisKKwl9IAorfSAKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3NvbHZlci9wcmVzZW50YXRpb24vU29sdmVyQWN0aW9uQmFyQ29udHJpYnV0b3IuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3NvbHZlci9wcmVzZW50YXRpb24vU29sdmVyQWN0aW9uQmFyQ29udHJpYnV0b3IuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNDBmNGE4Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvc29sdmVyL3ByZXNlbnRhdGlvbi9Tb2x2ZXJBY3Rpb25CYXJDb250cmlidXRvci5qYXZhCkBAIC0wLDAgKzEsNDMwIEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zb2x2ZXIucHJlc2VudGF0aW9uOw0KKw0KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorICogQ29weXJpZ2h0IChjKSAyMDA5IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLg0KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMNCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjANCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdA0KKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sDQorICoNCisgKiBDb250cmlidXRvcnM6DQorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbg0KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KKw0KK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0Ow0KK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsNCisNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51aS52aWV3ZXIuSVZpZXdlclByb3ZpZGVyOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5kb21haW4uRWRpdGluZ0RvbWFpbjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQuZG9tYWluLklFZGl0aW5nRG9tYWluUHJvdmlkZXI7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmFjdGlvbi5Db250cm9sQWN0aW9uOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5hY3Rpb24uQ3JlYXRlQ2hpbGRBY3Rpb247DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmFjdGlvbi5DcmVhdGVTaWJsaW5nQWN0aW9uOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5hY3Rpb24uRWRpdGluZ0RvbWFpbkFjdGlvbkJhckNvbnRyaWJ1dG9yOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5hY3Rpb24uTG9hZFJlc291cmNlQWN0aW9uOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5hY3Rpb24uVmFsaWRhdGVBY3Rpb247DQoraW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5BY3Rpb247DQoraW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5BY3Rpb25Db250cmlidXRpb25JdGVtOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSUFjdGlvbjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklDb250cmlidXRpb25JdGVtOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSUNvbnRyaWJ1dGlvbk1hbmFnZXI7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JTWVudUxpc3RlbmVyOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSU1lbnVNYW5hZ2VyOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSVRvb2xCYXJNYW5hZ2VyOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uTWVudU1hbmFnZXI7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5TZXBhcmF0b3I7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5TdWJDb250cmlidXRpb25JdGVtOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb247DQoraW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uUHJvdmlkZXI7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVN0cnVjdHVyZWRTZWxlY3Rpb247DQoraW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuU2VsZWN0aW9uQ2hhbmdlZEV2ZW50Ow0KK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlZpZXdlcjsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5wcmVzZW50YXRpb24uQ29yZUVkaXRvclBsdWdpbjsNCitpbXBvcnQgb3JnLmVjbGlwc2UudWkuSUVkaXRvclBhcnQ7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnVpLlBhcnRJbml0RXhjZXB0aW9uOw0KKw0KKy8qKg0KKyAqIFRoaXMgaXMgdGhlIGFjdGlvbiBiYXIgY29udHJpYnV0b3IgZm9yIHRoZSBTb2x2ZXIgbW9kZWwgZWRpdG9yLg0KKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorICogQGdlbmVyYXRlZA0KKyAqLw0KK3B1YmxpYyBjbGFzcyBTb2x2ZXJBY3Rpb25CYXJDb250cmlidXRvcg0KKwlleHRlbmRzIEVkaXRpbmdEb21haW5BY3Rpb25CYXJDb250cmlidXRvcg0KKwlpbXBsZW1lbnRzIElTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIgew0KKwkvKioNCisJICogVGhpcyBrZWVwcyB0cmFjayBvZiB0aGUgYWN0aXZlIGVkaXRvci4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCBJRWRpdG9yUGFydCBhY3RpdmVFZGl0b3JQYXJ0Ow0KKw0KKwkvKioNCisJICogVGhpcyBrZWVwcyB0cmFjayBvZiB0aGUgY3VycmVudCBzZWxlY3Rpb24gcHJvdmlkZXIuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgSVNlbGVjdGlvblByb3ZpZGVyIHNlbGVjdGlvblByb3ZpZGVyOw0KKw0KKwkvKioNCisJICogVGhpcyBhY3Rpb24gb3BlbnMgdGhlIFByb3BlcnRpZXMgdmlldy4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCBJQWN0aW9uIHNob3dQcm9wZXJ0aWVzVmlld0FjdGlvbiA9DQorCQluZXcgQWN0aW9uKENvcmVFZGl0b3JQbHVnaW4uSU5TVEFOQ0UuZ2V0U3RyaW5nKCJfVUlfU2hvd1Byb3BlcnRpZXNWaWV3X21lbnVfaXRlbSIpKSAvLyROT04tTkxTLTEkDQorCQl7DQorCQkJQE92ZXJyaWRlDQorCQkJcHVibGljIHZvaWQgcnVuKCkgew0KKwkJCQl0cnkgew0KKwkJCQkJZ2V0UGFnZSgpLnNob3dWaWV3KCJvcmcuZWNsaXBzZS51aS52aWV3cy5Qcm9wZXJ0eVNoZWV0Iik7IC8vJE5PTi1OTFMtMSQNCisJCQkJfQ0KKwkJCQljYXRjaCAoUGFydEluaXRFeGNlcHRpb24gZXhjZXB0aW9uKSB7DQorCQkJCQlDb3JlRWRpdG9yUGx1Z2luLklOU1RBTkNFLmxvZyhleGNlcHRpb24pOw0KKwkJCQl9DQorCQkJfQ0KKwkJfTsNCisNCisJLyoqDQorCSAqIFRoaXMgYWN0aW9uIHJlZnJlc2hlcyB0aGUgdmlld2VyIG9mIHRoZSBjdXJyZW50IGVkaXRvciBpZiB0aGUgZWRpdG9yDQorCSAqIGltcGxlbWVudHMge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5jb21tb24udWkudmlld2VyLklWaWV3ZXJQcm92aWRlcn0uDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgSUFjdGlvbiByZWZyZXNoVmlld2VyQWN0aW9uID0NCisJCW5ldyBBY3Rpb24oQ29yZUVkaXRvclBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoIl9VSV9SZWZyZXNoVmlld2VyX21lbnVfaXRlbSIpKSAvLyROT04tTkxTLTEkDQorCQl7DQorCQkJQE92ZXJyaWRlDQorCQkJcHVibGljIGJvb2xlYW4gaXNFbmFibGVkKCkgew0KKwkJCQlyZXR1cm4gYWN0aXZlRWRpdG9yUGFydCBpbnN0YW5jZW9mIElWaWV3ZXJQcm92aWRlcjsNCisJCQl9DQorDQorCQkJQE92ZXJyaWRlDQorCQkJcHVibGljIHZvaWQgcnVuKCkgew0KKwkJCQlpZiAoYWN0aXZlRWRpdG9yUGFydCBpbnN0YW5jZW9mIElWaWV3ZXJQcm92aWRlcikgew0KKwkJCQkJVmlld2VyIHZpZXdlciA9ICgoSVZpZXdlclByb3ZpZGVyKWFjdGl2ZUVkaXRvclBhcnQpLmdldFZpZXdlcigpOw0KKwkJCQkJaWYgKHZpZXdlciAhPSBudWxsKSB7DQorCQkJCQkJdmlld2VyLnJlZnJlc2goKTsNCisJCQkJCX0NCisJCQkJfQ0KKwkJCX0NCisJCX07DQorDQorCS8qKg0KKwkgKiBUaGlzIHdpbGwgY29udGFpbiBvbmUge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmFjdGlvbi5DcmVhdGVDaGlsZEFjdGlvbn0gY29ycmVzcG9uZGluZyB0byBlYWNoIGRlc2NyaXB0b3INCisJICogZ2VuZXJhdGVkIGZvciB0aGUgY3VycmVudCBzZWxlY3Rpb24gYnkgdGhlIGl0ZW0gcHJvdmlkZXIuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgQ29sbGVjdGlvbjxJQWN0aW9uPiBjcmVhdGVDaGlsZEFjdGlvbnM7DQorDQorCS8qKg0KKwkgKiBUaGlzIGlzIHRoZSBtZW51IG1hbmFnZXIgaW50byB3aGljaCBtZW51IGNvbnRyaWJ1dGlvbiBpdGVtcyBzaG91bGQgYmUgYWRkZWQgZm9yIENyZWF0ZUNoaWxkIGFjdGlvbnMuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgSU1lbnVNYW5hZ2VyIGNyZWF0ZUNoaWxkTWVudU1hbmFnZXI7DQorDQorCS8qKg0KKwkgKiBUaGlzIHdpbGwgY29udGFpbiBvbmUge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmFjdGlvbi5DcmVhdGVTaWJsaW5nQWN0aW9ufSBjb3JyZXNwb25kaW5nIHRvIGVhY2ggZGVzY3JpcHRvcg0KKwkgKiBnZW5lcmF0ZWQgZm9yIHRoZSBjdXJyZW50IHNlbGVjdGlvbiBieSB0aGUgaXRlbSBwcm92aWRlci4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCBDb2xsZWN0aW9uPElBY3Rpb24+IGNyZWF0ZVNpYmxpbmdBY3Rpb25zOw0KKw0KKwkvKioNCisJICogVGhpcyBpcyB0aGUgbWVudSBtYW5hZ2VyIGludG8gd2hpY2ggbWVudSBjb250cmlidXRpb24gaXRlbXMgc2hvdWxkIGJlIGFkZGVkIGZvciBDcmVhdGVTaWJsaW5nIGFjdGlvbnMuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgSU1lbnVNYW5hZ2VyIGNyZWF0ZVNpYmxpbmdNZW51TWFuYWdlcjsNCisNCisJLyoqDQorCSAqIFRoaXMgY3JlYXRlcyBhbiBpbnN0YW5jZSBvZiB0aGUgY29udHJpYnV0b3IuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgU29sdmVyQWN0aW9uQmFyQ29udHJpYnV0b3IoKSB7DQorCQlzdXBlcihBRERJVElPTlNfTEFTVF9TVFlMRSk7DQorCQlsb2FkUmVzb3VyY2VBY3Rpb24gPSBuZXcgTG9hZFJlc291cmNlQWN0aW9uKCk7DQorCQl2YWxpZGF0ZUFjdGlvbiA9IG5ldyBWYWxpZGF0ZUFjdGlvbigpOw0KKwkJY29udHJvbEFjdGlvbiA9IG5ldyBDb250cm9sQWN0aW9uKCk7DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgYWRkcyBTZXBhcmF0b3JzIGZvciBlZGl0b3IgYWRkaXRpb25zIHRvIHRoZSB0b29sIGJhci4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCUBPdmVycmlkZQ0KKwlwdWJsaWMgdm9pZCBjb250cmlidXRlVG9Ub29sQmFyKElUb29sQmFyTWFuYWdlciB0b29sQmFyTWFuYWdlcikgew0KKwkJdG9vbEJhck1hbmFnZXIuYWRkKG5ldyBTZXBhcmF0b3IoInNvbHZlci1zZXR0aW5ncyIpKTsgLy8kTk9OLU5MUy0xJA0KKwkJdG9vbEJhck1hbmFnZXIuYWRkKG5ldyBTZXBhcmF0b3IoInNvbHZlci1hZGRpdGlvbnMiKSk7IC8vJE5PTi1OTFMtMSQNCisJfQ0KKw0KKwkvKioNCisJICogVGhpcyBhZGRzIHRvIHRoZSBtZW51IGJhciBhIG1lbnUgYW5kIHNvbWUgc2VwYXJhdG9ycyBmb3IgZWRpdG9yIGFkZGl0aW9ucywNCisJICogYXMgd2VsbCBhcyB0aGUgc3ViLW1lbnVzIGZvciBvYmplY3QgY3JlYXRpb24gaXRlbXMuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlAT3ZlcnJpZGUNCisJcHVibGljIHZvaWQgY29udHJpYnV0ZVRvTWVudShJTWVudU1hbmFnZXIgbWVudU1hbmFnZXIpIHsNCisJCXN1cGVyLmNvbnRyaWJ1dGVUb01lbnUobWVudU1hbmFnZXIpOw0KKw0KKwkJSU1lbnVNYW5hZ2VyIHN1Ym1lbnVNYW5hZ2VyID0gbmV3IE1lbnVNYW5hZ2VyKENvcmVFZGl0b3JQbHVnaW4uSU5TVEFOQ0UuZ2V0U3RyaW5nKCJfVUlfU29sdmVyRWRpdG9yX21lbnUiKSwgIm9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zb2x2ZXJNZW51SUQiKTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkDQorCQltZW51TWFuYWdlci5pbnNlcnRBZnRlcigiYWRkaXRpb25zIiwgc3VibWVudU1hbmFnZXIpOyAvLyROT04tTkxTLTEkDQorCQlzdWJtZW51TWFuYWdlci5hZGQobmV3IFNlcGFyYXRvcigic2V0dGluZ3MiKSk7IC8vJE5PTi1OTFMtMSQNCisJCXN1Ym1lbnVNYW5hZ2VyLmFkZChuZXcgU2VwYXJhdG9yKCJhY3Rpb25zIikpOyAvLyROT04tTkxTLTEkDQorCQlzdWJtZW51TWFuYWdlci5hZGQobmV3IFNlcGFyYXRvcigiYWRkaXRpb25zIikpOyAvLyROT04tTkxTLTEkDQorCQlzdWJtZW51TWFuYWdlci5hZGQobmV3IFNlcGFyYXRvcigiYWRkaXRpb25zLWVuZCIpKTsgLy8kTk9OLU5MUy0xJA0KKw0KKwkJLy8gUHJlcGFyZSBmb3IgQ3JlYXRlQ2hpbGQgaXRlbSBhZGRpdGlvbiBvciByZW1vdmFsLg0KKwkJLy8NCisJCWNyZWF0ZUNoaWxkTWVudU1hbmFnZXIgPSBuZXcgTWVudU1hbmFnZXIoQ29yZUVkaXRvclBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoIl9VSV9DcmVhdGVDaGlsZF9tZW51X2l0ZW0iKSk7IC8vJE5PTi1OTFMtMSQNCisJCXN1Ym1lbnVNYW5hZ2VyLmluc2VydEJlZm9yZSgiYWRkaXRpb25zIiwgY3JlYXRlQ2hpbGRNZW51TWFuYWdlcik7IC8vJE5PTi1OTFMtMSQNCisNCisJCS8vIFByZXBhcmUgZm9yIENyZWF0ZVNpYmxpbmcgaXRlbSBhZGRpdGlvbiBvciByZW1vdmFsLg0KKwkJLy8NCisJCWNyZWF0ZVNpYmxpbmdNZW51TWFuYWdlciA9IG5ldyBNZW51TWFuYWdlcihDb3JlRWRpdG9yUGx1Z2luLklOU1RBTkNFLmdldFN0cmluZygiX1VJX0NyZWF0ZVNpYmxpbmdfbWVudV9pdGVtIikpOyAvLyROT04tTkxTLTEkDQorCQlzdWJtZW51TWFuYWdlci5pbnNlcnRCZWZvcmUoImFkZGl0aW9ucyIsIGNyZWF0ZVNpYmxpbmdNZW51TWFuYWdlcik7IC8vJE5PTi1OTFMtMSQNCisNCisJCS8vIEZvcmNlIGFuIHVwZGF0ZSBiZWNhdXNlIEVjbGlwc2UgaGlkZXMgZW1wdHkgbWVudXMgbm93Lg0KKwkJLy8NCisJCXN1Ym1lbnVNYW5hZ2VyLmFkZE1lbnVMaXN0ZW5lcg0KKwkJCShuZXcgSU1lbnVMaXN0ZW5lcigpIHsNCisJCQkJIHB1YmxpYyB2b2lkIG1lbnVBYm91dFRvU2hvdyhJTWVudU1hbmFnZXIgbWVudU1hbmFnZXIpIHsNCisJCQkJCSBtZW51TWFuYWdlci51cGRhdGVBbGwodHJ1ZSk7DQorCQkJCSB9DQorCQkJIH0pOw0KKw0KKwkJYWRkR2xvYmFsQWN0aW9ucyhzdWJtZW51TWFuYWdlcik7DQorCX0NCisNCisJLyoqDQorCSAqIFdoZW4gdGhlIGFjdGl2ZSBlZGl0b3IgY2hhbmdlcywgdGhpcyByZW1lbWJlcnMgdGhlIGNoYW5nZSBhbmQgcmVnaXN0ZXJzIHdpdGggaXQgYXMgYSBzZWxlY3Rpb24gcHJvdmlkZXIuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlAT3ZlcnJpZGUNCisJcHVibGljIHZvaWQgc2V0QWN0aXZlRWRpdG9yKElFZGl0b3JQYXJ0IHBhcnQpIHsNCisJCXN1cGVyLnNldEFjdGl2ZUVkaXRvcihwYXJ0KTsNCisJCWFjdGl2ZUVkaXRvclBhcnQgPSBwYXJ0Ow0KKw0KKwkJLy8gU3dpdGNoIHRvIHRoZSBuZXcgc2VsZWN0aW9uIHByb3ZpZGVyLg0KKwkJLy8NCisJCWlmIChzZWxlY3Rpb25Qcm92aWRlciAhPSBudWxsKSB7DQorCQkJc2VsZWN0aW9uUHJvdmlkZXIucmVtb3ZlU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyKHRoaXMpOw0KKwkJfQ0KKwkJaWYgKHBhcnQgPT0gbnVsbCkgew0KKwkJCXNlbGVjdGlvblByb3ZpZGVyID0gbnVsbDsNCisJCX0NCisJCWVsc2Ugew0KKwkJCXNlbGVjdGlvblByb3ZpZGVyID0gcGFydC5nZXRTaXRlKCkuZ2V0U2VsZWN0aW9uUHJvdmlkZXIoKTsNCisJCQlzZWxlY3Rpb25Qcm92aWRlci5hZGRTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIodGhpcyk7DQorDQorCQkJLy8gRmFrZSBhIHNlbGVjdGlvbiBjaGFuZ2VkIGV2ZW50IHRvIHVwZGF0ZSB0aGUgbWVudXMuDQorCQkJLy8NCisJCQlpZiAoc2VsZWN0aW9uUHJvdmlkZXIuZ2V0U2VsZWN0aW9uKCkgIT0gbnVsbCkgew0KKwkJCQlzZWxlY3Rpb25DaGFuZ2VkKG5ldyBTZWxlY3Rpb25DaGFuZ2VkRXZlbnQoc2VsZWN0aW9uUHJvdmlkZXIsIHNlbGVjdGlvblByb3ZpZGVyLmdldFNlbGVjdGlvbigpKSk7DQorCQkJfQ0KKwkJfQ0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIGltcGxlbWVudHMge0BsaW5rIG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcn0sDQorCSAqIGhhbmRsaW5nIHtAbGluayBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlNlbGVjdGlvbkNoYW5nZWRFdmVudH1zIGJ5IHF1ZXJ5aW5nIGZvciB0aGUgY2hpbGRyZW4gYW5kIHNpYmxpbmdzDQorCSAqIHRoYXQgY2FuIGJlIGFkZGVkIHRvIHRoZSBzZWxlY3RlZCBvYmplY3QgYW5kIHVwZGF0aW5nIHRoZSBtZW51cyBhY2NvcmRpbmdseS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyB2b2lkIHNlbGVjdGlvbkNoYW5nZWQoU2VsZWN0aW9uQ2hhbmdlZEV2ZW50IGV2ZW50KSB7DQorCQkvLyBSZW1vdmUgYW55IG1lbnUgaXRlbXMgZm9yIG9sZCBzZWxlY3Rpb24uDQorCQkvLw0KKwkJaWYgKGNyZWF0ZUNoaWxkTWVudU1hbmFnZXIgIT0gbnVsbCkgew0KKwkJCWRlcG9wdWxhdGVNYW5hZ2VyKGNyZWF0ZUNoaWxkTWVudU1hbmFnZXIsIGNyZWF0ZUNoaWxkQWN0aW9ucyk7DQorCQl9DQorCQlpZiAoY3JlYXRlU2libGluZ01lbnVNYW5hZ2VyICE9IG51bGwpIHsNCisJCQlkZXBvcHVsYXRlTWFuYWdlcihjcmVhdGVTaWJsaW5nTWVudU1hbmFnZXIsIGNyZWF0ZVNpYmxpbmdBY3Rpb25zKTsNCisJCX0NCisNCisJCS8vIFF1ZXJ5IHRoZSBuZXcgc2VsZWN0aW9uIGZvciBhcHByb3ByaWF0ZSBuZXcgY2hpbGQvc2libGluZyBkZXNjcmlwdG9ycw0KKwkJLy8NCisJCUNvbGxlY3Rpb248Pz4gbmV3Q2hpbGREZXNjcmlwdG9ycyA9IG51bGw7DQorCQlDb2xsZWN0aW9uPD8+IG5ld1NpYmxpbmdEZXNjcmlwdG9ycyA9IG51bGw7DQorDQorCQlJU2VsZWN0aW9uIHNlbGVjdGlvbiA9IGV2ZW50LmdldFNlbGVjdGlvbigpOw0KKwkJaWYgKHNlbGVjdGlvbiBpbnN0YW5jZW9mIElTdHJ1Y3R1cmVkU2VsZWN0aW9uICYmICgoSVN0cnVjdHVyZWRTZWxlY3Rpb24pc2VsZWN0aW9uKS5zaXplKCkgPT0gMSkgew0KKwkJCU9iamVjdCBvYmplY3QgPSAoKElTdHJ1Y3R1cmVkU2VsZWN0aW9uKXNlbGVjdGlvbikuZ2V0Rmlyc3RFbGVtZW50KCk7DQorDQorCQkJRWRpdGluZ0RvbWFpbiBkb21haW4gPSAoKElFZGl0aW5nRG9tYWluUHJvdmlkZXIpYWN0aXZlRWRpdG9yUGFydCkuZ2V0RWRpdGluZ0RvbWFpbigpOw0KKw0KKwkJCW5ld0NoaWxkRGVzY3JpcHRvcnMgPSBkb21haW4uZ2V0TmV3Q2hpbGREZXNjcmlwdG9ycyhvYmplY3QsIG51bGwpOw0KKwkJCW5ld1NpYmxpbmdEZXNjcmlwdG9ycyA9IGRvbWFpbi5nZXROZXdDaGlsZERlc2NyaXB0b3JzKG51bGwsIG9iamVjdCk7DQorCQl9DQorDQorCQkvLyBHZW5lcmF0ZSBhY3Rpb25zIGZvciBzZWxlY3Rpb247IHBvcHVsYXRlIGFuZCByZWRyYXcgdGhlIG1lbnVzLg0KKwkJLy8NCisJCWNyZWF0ZUNoaWxkQWN0aW9ucyA9IGdlbmVyYXRlQ3JlYXRlQ2hpbGRBY3Rpb25zKG5ld0NoaWxkRGVzY3JpcHRvcnMsIHNlbGVjdGlvbik7DQorCQljcmVhdGVTaWJsaW5nQWN0aW9ucyA9IGdlbmVyYXRlQ3JlYXRlU2libGluZ0FjdGlvbnMobmV3U2libGluZ0Rlc2NyaXB0b3JzLCBzZWxlY3Rpb24pOw0KKw0KKwkJaWYgKGNyZWF0ZUNoaWxkTWVudU1hbmFnZXIgIT0gbnVsbCkgew0KKwkJCXBvcHVsYXRlTWFuYWdlcihjcmVhdGVDaGlsZE1lbnVNYW5hZ2VyLCBjcmVhdGVDaGlsZEFjdGlvbnMsIG51bGwpOw0KKwkJCWNyZWF0ZUNoaWxkTWVudU1hbmFnZXIudXBkYXRlKHRydWUpOw0KKwkJfQ0KKwkJaWYgKGNyZWF0ZVNpYmxpbmdNZW51TWFuYWdlciAhPSBudWxsKSB7DQorCQkJcG9wdWxhdGVNYW5hZ2VyKGNyZWF0ZVNpYmxpbmdNZW51TWFuYWdlciwgY3JlYXRlU2libGluZ0FjdGlvbnMsIG51bGwpOw0KKwkJCWNyZWF0ZVNpYmxpbmdNZW51TWFuYWdlci51cGRhdGUodHJ1ZSk7DQorCQl9DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgZ2VuZXJhdGVzIGEge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmFjdGlvbi5DcmVhdGVDaGlsZEFjdGlvbn0gZm9yIGVhY2ggb2JqZWN0IGluIDxjb2RlPmRlc2NyaXB0b3JzPC9jb2RlPiwNCisJICogYW5kIHJldHVybnMgdGhlIGNvbGxlY3Rpb24gb2YgdGhlc2UgYWN0aW9ucy4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCBDb2xsZWN0aW9uPElBY3Rpb24+IGdlbmVyYXRlQ3JlYXRlQ2hpbGRBY3Rpb25zKENvbGxlY3Rpb248Pz4gZGVzY3JpcHRvcnMsIElTZWxlY3Rpb24gc2VsZWN0aW9uKSB7DQorCQlDb2xsZWN0aW9uPElBY3Rpb24+IGFjdGlvbnMgPSBuZXcgQXJyYXlMaXN0PElBY3Rpb24+KCk7DQorCQlpZiAoZGVzY3JpcHRvcnMgIT0gbnVsbCkgew0KKwkJCWZvciAoT2JqZWN0IGRlc2NyaXB0b3IgOiBkZXNjcmlwdG9ycykgew0KKwkJCQlhY3Rpb25zLmFkZChuZXcgQ3JlYXRlQ2hpbGRBY3Rpb24oYWN0aXZlRWRpdG9yUGFydCwgc2VsZWN0aW9uLCBkZXNjcmlwdG9yKSk7DQorCQkJfQ0KKwkJfQ0KKwkJcmV0dXJuIGFjdGlvbnM7DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgZ2VuZXJhdGVzIGEge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmFjdGlvbi5DcmVhdGVTaWJsaW5nQWN0aW9ufSBmb3IgZWFjaCBvYmplY3QgaW4gPGNvZGU+ZGVzY3JpcHRvcnM8L2NvZGU+LA0KKwkgKiBhbmQgcmV0dXJucyB0aGUgY29sbGVjdGlvbiBvZiB0aGVzZSBhY3Rpb25zLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIENvbGxlY3Rpb248SUFjdGlvbj4gZ2VuZXJhdGVDcmVhdGVTaWJsaW5nQWN0aW9ucyhDb2xsZWN0aW9uPD8+IGRlc2NyaXB0b3JzLCBJU2VsZWN0aW9uIHNlbGVjdGlvbikgew0KKwkJQ29sbGVjdGlvbjxJQWN0aW9uPiBhY3Rpb25zID0gbmV3IEFycmF5TGlzdDxJQWN0aW9uPigpOw0KKwkJaWYgKGRlc2NyaXB0b3JzICE9IG51bGwpIHsNCisJCQlmb3IgKE9iamVjdCBkZXNjcmlwdG9yIDogZGVzY3JpcHRvcnMpIHsNCisJCQkJYWN0aW9ucy5hZGQobmV3IENyZWF0ZVNpYmxpbmdBY3Rpb24oYWN0aXZlRWRpdG9yUGFydCwgc2VsZWN0aW9uLCBkZXNjcmlwdG9yKSk7DQorCQkJfQ0KKwkJfQ0KKwkJcmV0dXJuIGFjdGlvbnM7DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgcG9wdWxhdGVzIHRoZSBzcGVjaWZpZWQgPGNvZGU+bWFuYWdlcjwvY29kZT4gd2l0aCB7QGxpbmsgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLkFjdGlvbkNvbnRyaWJ1dGlvbkl0ZW19cw0KKwkgKiBiYXNlZCBvbiB0aGUge0BsaW5rIG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JQWN0aW9ufXMgY29udGFpbmVkIGluIHRoZSA8Y29kZT5hY3Rpb25zPC9jb2RlPiBjb2xsZWN0aW9uLA0KKwkgKiBieSBpbnNlcnRpbmcgdGhlbSBiZWZvcmUgdGhlIHNwZWNpZmllZCBjb250cmlidXRpb24gaXRlbSA8Y29kZT5jb250cmlidXRpb25JRDwvY29kZT4uDQorCSAqIElmIDxjb2RlPmNvbnRyaWJ1dGlvbklEPC9jb2RlPiBpcyA8Y29kZT5udWxsPC9jb2RlPiwgdGhleSBhcmUgc2ltcGx5IGFkZGVkLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIHZvaWQgcG9wdWxhdGVNYW5hZ2VyKElDb250cmlidXRpb25NYW5hZ2VyIG1hbmFnZXIsIENvbGxlY3Rpb248PyBleHRlbmRzIElBY3Rpb24+IGFjdGlvbnMsIFN0cmluZyBjb250cmlidXRpb25JRCkgew0KKwkJaWYgKGFjdGlvbnMgIT0gbnVsbCkgew0KKwkJCWZvciAoSUFjdGlvbiBhY3Rpb24gOiBhY3Rpb25zKSB7DQorCQkJCWlmIChjb250cmlidXRpb25JRCAhPSBudWxsKSB7DQorCQkJCQltYW5hZ2VyLmluc2VydEJlZm9yZShjb250cmlidXRpb25JRCwgYWN0aW9uKTsNCisJCQkJfQ0KKwkJCQllbHNlIHsNCisJCQkJCW1hbmFnZXIuYWRkKGFjdGlvbik7DQorCQkJCX0NCisJCQl9DQorCQl9DQorCX0NCisJCQ0KKwkvKioNCisJICogVGhpcyByZW1vdmVzIGZyb20gdGhlIHNwZWNpZmllZCA8Y29kZT5tYW5hZ2VyPC9jb2RlPiBhbGwge0BsaW5rIG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5BY3Rpb25Db250cmlidXRpb25JdGVtfXMNCisJICogYmFzZWQgb24gdGhlIHtAbGluayBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSUFjdGlvbn1zIGNvbnRhaW5lZCBpbiB0aGUgPGNvZGU+YWN0aW9uczwvY29kZT4gY29sbGVjdGlvbi4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCB2b2lkIGRlcG9wdWxhdGVNYW5hZ2VyKElDb250cmlidXRpb25NYW5hZ2VyIG1hbmFnZXIsIENvbGxlY3Rpb248PyBleHRlbmRzIElBY3Rpb24+IGFjdGlvbnMpIHsNCisJCWlmIChhY3Rpb25zICE9IG51bGwpIHsNCisJCQlJQ29udHJpYnV0aW9uSXRlbVtdIGl0ZW1zID0gbWFuYWdlci5nZXRJdGVtcygpOw0KKwkJCWZvciAoaW50IGkgPSAwOyBpIDwgaXRlbXMubGVuZ3RoOyBpKyspIHsNCisJCQkJLy8gTG9vayBpbnRvIFN1YkNvbnRyaWJ1dGlvbkl0ZW1zDQorCQkJCS8vDQorCQkJCUlDb250cmlidXRpb25JdGVtIGNvbnRyaWJ1dGlvbkl0ZW0gPSBpdGVtc1tpXTsNCisJCQkJd2hpbGUgKGNvbnRyaWJ1dGlvbkl0ZW0gaW5zdGFuY2VvZiBTdWJDb250cmlidXRpb25JdGVtKSB7DQorCQkJCQljb250cmlidXRpb25JdGVtID0gKChTdWJDb250cmlidXRpb25JdGVtKWNvbnRyaWJ1dGlvbkl0ZW0pLmdldElubmVySXRlbSgpOw0KKwkJCQl9DQorDQorCQkJCS8vIERlbGV0ZSB0aGUgQWN0aW9uQ29udHJpYnV0aW9uSXRlbXMgd2l0aCBtYXRjaGluZyBhY3Rpb24uDQorCQkJCS8vDQorCQkJCWlmIChjb250cmlidXRpb25JdGVtIGluc3RhbmNlb2YgQWN0aW9uQ29udHJpYnV0aW9uSXRlbSkgew0KKwkJCQkJSUFjdGlvbiBhY3Rpb24gPSAoKEFjdGlvbkNvbnRyaWJ1dGlvbkl0ZW0pY29udHJpYnV0aW9uSXRlbSkuZ2V0QWN0aW9uKCk7DQorCQkJCQlpZiAoYWN0aW9ucy5jb250YWlucyhhY3Rpb24pKSB7DQorCQkJCQkJbWFuYWdlci5yZW1vdmUoY29udHJpYnV0aW9uSXRlbSk7DQorCQkJCQl9DQorCQkJCX0NCisJCQl9DQorCQl9DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgcG9wdWxhdGVzIHRoZSBwb3AtdXAgbWVudSBiZWZvcmUgaXQgYXBwZWFycy4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCUBPdmVycmlkZQ0KKwlwdWJsaWMgdm9pZCBtZW51QWJvdXRUb1Nob3coSU1lbnVNYW5hZ2VyIG1lbnVNYW5hZ2VyKSB7DQorCQlzdXBlci5tZW51QWJvdXRUb1Nob3cobWVudU1hbmFnZXIpOw0KKwkJTWVudU1hbmFnZXIgc3VibWVudU1hbmFnZXIgPSBudWxsOw0KKw0KKwkJc3VibWVudU1hbmFnZXIgPSBuZXcgTWVudU1hbmFnZXIoQ29yZUVkaXRvclBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoIl9VSV9DcmVhdGVDaGlsZF9tZW51X2l0ZW0iKSk7IC8vJE5PTi1OTFMtMSQNCisJCXBvcHVsYXRlTWFuYWdlcihzdWJtZW51TWFuYWdlciwgY3JlYXRlQ2hpbGRBY3Rpb25zLCBudWxsKTsNCisJCW1lbnVNYW5hZ2VyLmluc2VydEJlZm9yZSgiZWRpdCIsIHN1Ym1lbnVNYW5hZ2VyKTsgLy8kTk9OLU5MUy0xJA0KKw0KKwkJc3VibWVudU1hbmFnZXIgPSBuZXcgTWVudU1hbmFnZXIoQ29yZUVkaXRvclBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoIl9VSV9DcmVhdGVTaWJsaW5nX21lbnVfaXRlbSIpKTsgLy8kTk9OLU5MUy0xJA0KKwkJcG9wdWxhdGVNYW5hZ2VyKHN1Ym1lbnVNYW5hZ2VyLCBjcmVhdGVTaWJsaW5nQWN0aW9ucywgbnVsbCk7DQorCQltZW51TWFuYWdlci5pbnNlcnRCZWZvcmUoImVkaXQiLCBzdWJtZW51TWFuYWdlcik7IC8vJE5PTi1OTFMtMSQNCisJfQ0KKw0KKwkvKioNCisJICogVGhpcyBpbnNlcnRzIGdsb2JhbCBhY3Rpb25zIGJlZm9yZSB0aGUgImFkZGl0aW9ucy1lbmQiIHNlcGFyYXRvci4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCUBPdmVycmlkZQ0KKwlwcm90ZWN0ZWQgdm9pZCBhZGRHbG9iYWxBY3Rpb25zKElNZW51TWFuYWdlciBtZW51TWFuYWdlcikgew0KKwkJbWVudU1hbmFnZXIuaW5zZXJ0QWZ0ZXIoImFkZGl0aW9ucy1lbmQiLCBuZXcgU2VwYXJhdG9yKCJ1aS1hY3Rpb25zIikpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQNCisJCW1lbnVNYW5hZ2VyLmluc2VydEFmdGVyKCJ1aS1hY3Rpb25zIiwgc2hvd1Byb3BlcnRpZXNWaWV3QWN0aW9uKTsgLy8kTk9OLU5MUy0xJA0KKw0KKwkJcmVmcmVzaFZpZXdlckFjdGlvbi5zZXRFbmFibGVkKHJlZnJlc2hWaWV3ZXJBY3Rpb24uaXNFbmFibGVkKCkpOwkJDQorCQltZW51TWFuYWdlci5pbnNlcnRBZnRlcigidWktYWN0aW9ucyIsIHJlZnJlc2hWaWV3ZXJBY3Rpb24pOyAvLyROT04tTkxTLTEkDQorDQorCQlzdXBlci5hZGRHbG9iYWxBY3Rpb25zKG1lbnVNYW5hZ2VyKTsNCisJfQ0KKw0KKwkvKioNCisJICogVGhpcyBlbnN1cmVzIHRoYXQgYSBkZWxldGUgYWN0aW9uIHdpbGwgY2xlYW4gdXAgYWxsIHJlZmVyZW5jZXMgdG8gZGVsZXRlZCBvYmplY3RzLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJQE92ZXJyaWRlDQorCXByb3RlY3RlZCBib29sZWFuIHJlbW92ZUFsbFJlZmVyZW5jZXNPbkRlbGV0ZSgpIHsNCisJCXJldHVybiB0cnVlOw0KKwl9DQorDQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3NvbHZlci9wcmVzZW50YXRpb24vU29sdmVyRWRpdG9yLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9zb2x2ZXIvcHJlc2VudGF0aW9uL1NvbHZlckVkaXRvci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJlNjUxOTAKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9zb2x2ZXIvcHJlc2VudGF0aW9uL1NvbHZlckVkaXRvci5qYXZhCkBAIC0wLDAgKzEsMTgwNyBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc29sdmVyLnByZXNlbnRhdGlvbjsNCisNCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyAqIENvcHlyaWdodCAoYykgMjAwOSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4NCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzDQorICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wDQorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQNCisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbA0KKyAqDQorICogQ29udHJpYnV0b3JzOg0KKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24NCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCisNCisNCitpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsNCitpbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbTsNCitpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsNCitpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247DQoraW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uczsNCitpbXBvcnQgamF2YS51dGlsLkV2ZW50T2JqZWN0Ow0KK2ltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsNCitpbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOw0KK2ltcG9ydCBqYXZhLnV0aWwuTGlua2VkSGFzaE1hcDsNCitpbXBvcnQgamF2YS51dGlsLkxpc3Q7DQoraW1wb3J0IGphdmEudXRpbC5NYXA7DQorDQoraW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklGaWxlOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JTWFya2VyOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUmVzb3VyY2U7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklSZXNvdXJjZUNoYW5nZUV2ZW50Ow0KK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUmVzb3VyY2VDaGFuZ2VMaXN0ZW5lcjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVJlc291cmNlRGVsdGE7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklSZXNvdXJjZURlbHRhVmlzaXRvcjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuUmVzb3VyY2VzUGx1Z2luOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQ29yZUV4Y2VwdGlvbjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQYXRoOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVByb2dyZXNzTW9uaXRvcjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLk51bGxQcm9ncmVzc01vbml0b3I7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24uY29tbWFuZC5CYXNpY0NvbW1hbmRTdGFjazsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5jb21tYW5kLkNvbW1hbmQ7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24uY29tbWFuZC5Db21tYW5kU3RhY2s7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24uY29tbWFuZC5Db21tYW5kU3RhY2tMaXN0ZW5lcjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuQWRhcHRlckZhY3Rvcnk7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51aS5NYXJrZXJIZWxwZXI7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udWkuVmlld2VyUGFuZTsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51aS5lZGl0b3IuUHJvYmxlbUVkaXRvclBhcnQ7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udWkudmlld2VyLklWaWV3ZXJQcm92aWRlcjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLkJhc2ljRGlhZ25vc3RpYzsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLkRpYWdub3N0aWM7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5VUkk7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0Ow0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRVZhbGlkYXRvcjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnByb3ZpZGVyLkVjb3JlSXRlbVByb3ZpZGVyQWRhcHRlckZhY3Rvcnk7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5yZXNvdXJjZS5SZXNvdXJjZTsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnJlc291cmNlLlJlc291cmNlU2V0Ow0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUudXRpbC5FQ29udGVudEFkYXB0ZXI7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS51dGlsLkVjb3JlVXRpbDsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQuZG9tYWluLkFkYXB0ZXJGYWN0b3J5RWRpdGluZ0RvbWFpbjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQuZG9tYWluLkVkaXRpbmdEb21haW47DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LmRvbWFpbi5JRWRpdGluZ0RvbWFpblByb3ZpZGVyOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5BZGFwdGVyRmFjdG9yeUl0ZW1EZWxlZ2F0b3I7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkNvbXBvc2VkQWRhcHRlckZhY3Rvcnk7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLlJlZmxlY3RpdmVJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeTsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIucmVzb3VyY2UuUmVzb3VyY2VJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeTsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkuYWN0aW9uLkVkaXRpbmdEb21haW5BY3Rpb25CYXJDb250cmlidXRvcjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkuY2VsbGVkaXRvci5BZGFwdGVyRmFjdG9yeVRyZWVFZGl0b3I7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmRuZC5FZGl0aW5nRG9tYWluVmlld2VyRHJvcEFkYXB0ZXI7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmRuZC5Mb2NhbFRyYW5zZmVyOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5kbmQuVmlld2VyRHJhZ0FkYXB0ZXI7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLnByb3ZpZGVyLkFkYXB0ZXJGYWN0b3J5Q29udGVudFByb3ZpZGVyOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5wcm92aWRlci5BZGFwdGVyRmFjdG9yeUxhYmVsUHJvdmlkZXI7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLnByb3ZpZGVyLlVud3JhcHBpbmdTZWxlY3Rpb25Qcm92aWRlcjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkudXRpbC5FZGl0VUlNYXJrZXJIZWxwZXI7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLnV0aWwuRWRpdFVJVXRpbDsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkudmlldy5FeHRlbmRlZFByb3BlcnR5U2hlZXRQYWdlOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSU1lbnVMaXN0ZW5lcjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklNZW51TWFuYWdlcjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklTdGF0dXNMaW5lTWFuYWdlcjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklUb29sQmFyTWFuYWdlcjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLk1lbnVNYW5hZ2VyOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uU2VwYXJhdG9yOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5kaWFsb2dzLk1lc3NhZ2VEaWFsb2c7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmRpYWxvZ3MuUHJvZ3Jlc3NNb25pdG9yRGlhbG9nOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLkNvbHVtbldlaWdodERhdGE7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvbjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb25Qcm92aWRlcjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU3RydWN0dXJlZFNlbGVjdGlvbjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5MaXN0Vmlld2VyOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlNlbGVjdGlvbkNoYW5nZWRFdmVudDsNCitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5TdHJ1Y3R1cmVkU2VsZWN0aW9uOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlN0cnVjdHVyZWRWaWV3ZXI7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuVGFibGVMYXlvdXQ7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuVGFibGVWaWV3ZXI7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuVHJlZVZpZXdlcjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5WaWV3ZXI7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24ucHJlc2VudGF0aW9uLkNvcmVFZGl0b3JQbHVnaW47DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24ucHJvdmlkZXIuQ29tbW9uSXRlbVByb3ZpZGVyQWRhcHRlckZhY3Rvcnk7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5leHBlcmltZW50LnByb3ZpZGVyLkV4cGVyaW1lbnRJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeTsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLnByb3ZpZGVyLkdyYXBoSXRlbVByb3ZpZGVyQWRhcHRlckZhY3Rvcnk7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5sb2dnZXIucHJvdmlkZXIuTG9nZ2VySXRlbVByb3ZpZGVyQWRhcHRlckZhY3Rvcnk7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5wcm92aWRlci5Nb2RlbEl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5Ow0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIucHJvdmlkZXIuTW9kaWZpZXJJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeTsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZS5wcm92aWRlci5QcmVkaWNhdGVJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeTsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNjZW5hcmlvLnByb3ZpZGVyLlNjZW5hcmlvSXRlbVByb3ZpZGVyQWRhcHRlckZhY3Rvcnk7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zZXF1ZW5jZXIucHJvdmlkZXIuU2VxdWVuY2VySXRlbVByb3ZpZGVyQWRhcHRlckZhY3Rvcnk7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zb2x2ZXIucHJvdmlkZXIuU29sdmVySXRlbVByb3ZpZGVyQWRhcHRlckZhY3Rvcnk7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS50cmlnZ2VyLnByb3ZpZGVyLlRyaWdnZXJJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeTsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LlNXVDsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmN1c3RvbS5DVGFiRm9sZGVyOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZG5kLkRORDsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmRuZC5UcmFuc2ZlcjsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5Db250cm9sQWRhcHRlcjsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5Db250cm9sRXZlbnQ7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ncmFwaGljcy5Qb2ludDsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5GaWxsTGF5b3V0Ow0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGU7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLk1lbnU7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlRhYmxlOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5UYWJsZUNvbHVtbjsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuVHJlZTsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuVHJlZUNvbHVtbjsNCitpbXBvcnQgb3JnLmVjbGlwc2UudWkuSUFjdGlvbkJhcnM7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnVpLklFZGl0b3JJbnB1dDsNCitpbXBvcnQgb3JnLmVjbGlwc2UudWkuSUVkaXRvclBhcnQ7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnVpLklFZGl0b3JTaXRlOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5JUGFydExpc3RlbmVyOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5JV29ya2JlbmNoUGFydDsNCitpbXBvcnQgb3JnLmVjbGlwc2UudWkuUGFydEluaXRFeGNlcHRpb247DQoraW1wb3J0IG9yZy5lY2xpcHNlLnVpLmFjdGlvbnMuV29ya3NwYWNlTW9kaWZ5T3BlcmF0aW9uOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5kaWFsb2dzLlNhdmVBc0RpYWxvZzsNCitpbXBvcnQgb3JnLmVjbGlwc2UudWkuaWRlLklHb3RvTWFya2VyOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5wYXJ0LkZpbGVFZGl0b3JJbnB1dDsNCitpbXBvcnQgb3JnLmVjbGlwc2UudWkucGFydC5NdWx0aVBhZ2VFZGl0b3JQYXJ0Ow0KK2ltcG9ydCBvcmcuZWNsaXBzZS51aS52aWV3cy5jb250ZW50b3V0bGluZS5Db250ZW50T3V0bGluZTsNCitpbXBvcnQgb3JnLmVjbGlwc2UudWkudmlld3MuY29udGVudG91dGxpbmUuQ29udGVudE91dGxpbmVQYWdlOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS51aS52aWV3cy5jb250ZW50b3V0bGluZS5JQ29udGVudE91dGxpbmVQYWdlOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS51aS52aWV3cy5wcm9wZXJ0aWVzLklQcm9wZXJ0eVNoZWV0UGFnZTsNCitpbXBvcnQgb3JnLmVjbGlwc2UudWkudmlld3MucHJvcGVydGllcy5Qcm9wZXJ0eVNoZWV0Ow0KK2ltcG9ydCBvcmcuZWNsaXBzZS51aS52aWV3cy5wcm9wZXJ0aWVzLlByb3BlcnR5U2hlZXRQYWdlOw0KKw0KKw0KKy8qKg0KKyAqIFRoaXMgaXMgYW4gZXhhbXBsZSBvZiBhIFNvbHZlciBtb2RlbCBlZGl0b3IuDQorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisgKiBAZ2VuZXJhdGVkDQorICovDQorQFN1cHByZXNzV2FybmluZ3MoInVudXNlZCIpIA0KK3B1YmxpYyBjbGFzcyBTb2x2ZXJFZGl0b3INCisJZXh0ZW5kcyBNdWx0aVBhZ2VFZGl0b3JQYXJ0DQorCWltcGxlbWVudHMgSUVkaXRpbmdEb21haW5Qcm92aWRlciwgSVNlbGVjdGlvblByb3ZpZGVyLCBJTWVudUxpc3RlbmVyLCBJVmlld2VyUHJvdmlkZXIsIElHb3RvTWFya2VyIHsNCisJLyoqDQorCSAqIFRoaXMga2VlcHMgdHJhY2sgb2YgdGhlIGVkaXRpbmcgZG9tYWluIHRoYXQgaXMgdXNlZCB0byB0cmFjayBhbGwgY2hhbmdlcyB0byB0aGUgbW9kZWwuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgQWRhcHRlckZhY3RvcnlFZGl0aW5nRG9tYWluIGVkaXRpbmdEb21haW47DQorDQorCS8qKg0KKwkgKiBUaGlzIGlzIHRoZSBvbmUgYWRhcHRlciBmYWN0b3J5IHVzZWQgZm9yIHByb3ZpZGluZyB2aWV3cyBvZiB0aGUgbW9kZWwuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgQ29tcG9zZWRBZGFwdGVyRmFjdG9yeSBhZGFwdGVyRmFjdG9yeTsNCisNCisJLyoqDQorCSAqIFRoaXMgaXMgdGhlIGNvbnRlbnQgb3V0bGluZSBwYWdlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIElDb250ZW50T3V0bGluZVBhZ2UgY29udGVudE91dGxpbmVQYWdlOw0KKw0KKwkvKioNCisJICogVGhpcyBpcyBhIGtsdWRnZS4uLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIElTdGF0dXNMaW5lTWFuYWdlciBjb250ZW50T3V0bGluZVN0YXR1c0xpbmVNYW5hZ2VyOw0KKw0KKwkvKioNCisJICogVGhpcyBpcyB0aGUgY29udGVudCBvdXRsaW5lIHBhZ2UncyB2aWV3ZXIuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgVHJlZVZpZXdlciBjb250ZW50T3V0bGluZVZpZXdlcjsNCisNCisJLyoqDQorCSAqIFRoaXMgaXMgdGhlIHByb3BlcnR5IHNoZWV0IHBhZ2UuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgUHJvcGVydHlTaGVldFBhZ2UgcHJvcGVydHlTaGVldFBhZ2U7DQorDQorCS8qKg0KKwkgKiBUaGlzIGlzIHRoZSB2aWV3ZXIgdGhhdCBzaGFkb3dzIHRoZSBzZWxlY3Rpb24gaW4gdGhlIGNvbnRlbnQgb3V0bGluZS4NCisJICogVGhlIHBhcmVudCByZWxhdGlvbiBtdXN0IGJlIGNvcnJlY3RseSBkZWZpbmVkIGZvciB0aGlzIHRvIHdvcmsuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgVHJlZVZpZXdlciBzZWxlY3Rpb25WaWV3ZXI7DQorDQorCS8qKg0KKwkgKiBUaGlzIGludmVydHMgdGhlIHJvbGwgb2YgcGFyZW50IGFuZCBjaGlsZCBpbiB0aGUgY29udGVudCBwcm92aWRlciBhbmQgc2hvdyBwYXJlbnRzIGFzIGEgdHJlZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCBUcmVlVmlld2VyIHBhcmVudFZpZXdlcjsNCisNCisJLyoqDQorCSAqIFRoaXMgc2hvd3MgaG93IGEgdHJlZSB2aWV3IHdvcmtzLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIFRyZWVWaWV3ZXIgdHJlZVZpZXdlcjsNCisNCisJLyoqDQorCSAqIFRoaXMgc2hvd3MgaG93IGEgbGlzdCB2aWV3IHdvcmtzLg0KKwkgKiBBIGxpc3Qgdmlld2VyIGRvZXNuJ3Qgc3VwcG9ydCBpY29ucy4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCBMaXN0Vmlld2VyIGxpc3RWaWV3ZXI7DQorDQorCS8qKg0KKwkgKiBUaGlzIHNob3dzIGhvdyBhIHRhYmxlIHZpZXcgd29ya3MuDQorCSAqIEEgdGFibGUgY2FuIGJlIHVzZWQgYXMgYSBsaXN0IHdpdGggaWNvbnMuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgVGFibGVWaWV3ZXIgdGFibGVWaWV3ZXI7DQorDQorCS8qKg0KKwkgKiBUaGlzIHNob3dzIGhvdyBhIHRyZWUgdmlldyB3aXRoIGNvbHVtbnMgd29ya3MuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgVHJlZVZpZXdlciB0cmVlVmlld2VyV2l0aENvbHVtbnM7DQorDQorCS8qKg0KKwkgKiBUaGlzIGtlZXBzIHRyYWNrIG9mIHRoZSBhY3RpdmUgdmlld2VyIHBhbmUsIGluIHRoZSBib29rLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIFZpZXdlclBhbmUgY3VycmVudFZpZXdlclBhbmU7DQorDQorCS8qKg0KKwkgKiBUaGlzIGtlZXBzIHRyYWNrIG9mIHRoZSBhY3RpdmUgY29udGVudCB2aWV3ZXIsIHdoaWNoIG1heSBiZSBlaXRoZXIgb25lIG9mIHRoZSB2aWV3ZXJzIGluIHRoZSBwYWdlcyBvciB0aGUgY29udGVudCBvdXRsaW5lIHZpZXdlci4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCBWaWV3ZXIgY3VycmVudFZpZXdlcjsNCisNCisJLyoqDQorCSAqIFRoaXMgbGlzdGVucyB0byB3aGljaCBldmVyIHZpZXdlciBpcyBhY3RpdmUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lciBzZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXI7DQorDQorCS8qKg0KKwkgKiBUaGlzIGtlZXBzIHRyYWNrIG9mIGFsbCB0aGUge0BsaW5rIG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcn1zIHRoYXQgYXJlIGxpc3RlbmluZyB0byB0aGlzIGVkaXRvci4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCBDb2xsZWN0aW9uPElTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXI+IHNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcnMgPSBuZXcgQXJyYXlMaXN0PElTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXI+KCk7DQorDQorCS8qKg0KKwkgKiBUaGlzIGtlZXBzIHRyYWNrIG9mIHRoZSBzZWxlY3Rpb24gb2YgdGhlIGVkaXRvciBhcyBhIHdob2xlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIElTZWxlY3Rpb24gZWRpdG9yU2VsZWN0aW9uID0gU3RydWN0dXJlZFNlbGVjdGlvbi5FTVBUWTsNCisNCisJLyoqDQorCSAqIFRoZSBNYXJrZXJIZWxwZXIgaXMgcmVzcG9uc2libGUgZm9yIGNyZWF0aW5nIHdvcmtzcGFjZSByZXNvdXJjZSBtYXJrZXJzIHByZXNlbnRlZA0KKwkgKiBpbiBFY2xpcHNlJ3MgUHJvYmxlbXMgVmlldy4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCBNYXJrZXJIZWxwZXIgbWFya2VySGVscGVyID0gbmV3IEVkaXRVSU1hcmtlckhlbHBlcigpOw0KKw0KKwkvKioNCisJICogVGhpcyBsaXN0ZW5zIGZvciB3aGVuIHRoZSBvdXRsaW5lIGJlY29tZXMgYWN0aXZlDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgSVBhcnRMaXN0ZW5lciBwYXJ0TGlzdGVuZXIgPQ0KKwkJbmV3IElQYXJ0TGlzdGVuZXIoKSB7DQorCQkJcHVibGljIHZvaWQgcGFydEFjdGl2YXRlZChJV29ya2JlbmNoUGFydCBwKSB7DQorCQkJCWlmIChwIGluc3RhbmNlb2YgQ29udGVudE91dGxpbmUpIHsNCisJCQkJCWlmICgoKENvbnRlbnRPdXRsaW5lKXApLmdldEN1cnJlbnRQYWdlKCkgPT0gY29udGVudE91dGxpbmVQYWdlKSB7DQorCQkJCQkJZ2V0QWN0aW9uQmFyQ29udHJpYnV0b3IoKS5zZXRBY3RpdmVFZGl0b3IoU29sdmVyRWRpdG9yLnRoaXMpOw0KKw0KKwkJCQkJCXNldEN1cnJlbnRWaWV3ZXIoY29udGVudE91dGxpbmVWaWV3ZXIpOw0KKwkJCQkJfQ0KKwkJCQl9DQorCQkJCWVsc2UgaWYgKHAgaW5zdGFuY2VvZiBQcm9wZXJ0eVNoZWV0KSB7DQorCQkJCQlpZiAoKChQcm9wZXJ0eVNoZWV0KXApLmdldEN1cnJlbnRQYWdlKCkgPT0gcHJvcGVydHlTaGVldFBhZ2UpIHsNCisJCQkJCQlnZXRBY3Rpb25CYXJDb250cmlidXRvcigpLnNldEFjdGl2ZUVkaXRvcihTb2x2ZXJFZGl0b3IudGhpcyk7DQorCQkJCQkJaGFuZGxlQWN0aXZhdGUoKTsNCisJCQkJCX0NCisJCQkJfQ0KKwkJCQllbHNlIGlmIChwID09IFNvbHZlckVkaXRvci50aGlzKSB7DQorCQkJCQloYW5kbGVBY3RpdmF0ZSgpOw0KKwkJCQl9DQorCQkJfQ0KKwkJCXB1YmxpYyB2b2lkIHBhcnRCcm91Z2h0VG9Ub3AoSVdvcmtiZW5jaFBhcnQgcCkgew0KKwkJCQkvLyBJZ25vcmUuDQorCQkJfQ0KKwkJCXB1YmxpYyB2b2lkIHBhcnRDbG9zZWQoSVdvcmtiZW5jaFBhcnQgcCkgew0KKwkJCQkvLyBJZ25vcmUuDQorCQkJfQ0KKwkJCXB1YmxpYyB2b2lkIHBhcnREZWFjdGl2YXRlZChJV29ya2JlbmNoUGFydCBwKSB7DQorCQkJCS8vIElnbm9yZS4NCisJCQl9DQorCQkJcHVibGljIHZvaWQgcGFydE9wZW5lZChJV29ya2JlbmNoUGFydCBwKSB7DQorCQkJCS8vIElnbm9yZS4NCisJCQl9DQorCQl9Ow0KKw0KKwkvKioNCisJICogUmVzb3VyY2VzIHRoYXQgaGF2ZSBiZWVuIHJlbW92ZWQgc2luY2UgbGFzdCBhY3RpdmF0aW9uLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIENvbGxlY3Rpb248UmVzb3VyY2U+IHJlbW92ZWRSZXNvdXJjZXMgPSBuZXcgQXJyYXlMaXN0PFJlc291cmNlPigpOw0KKw0KKwkvKioNCisJICogUmVzb3VyY2VzIHRoYXQgaGF2ZSBiZWVuIGNoYW5nZWQgc2luY2UgbGFzdCBhY3RpdmF0aW9uLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIENvbGxlY3Rpb248UmVzb3VyY2U+IGNoYW5nZWRSZXNvdXJjZXMgPSBuZXcgQXJyYXlMaXN0PFJlc291cmNlPigpOw0KKw0KKwkvKioNCisJICogUmVzb3VyY2VzIHRoYXQgaGF2ZSBiZWVuIHNhdmVkLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIENvbGxlY3Rpb248UmVzb3VyY2U+IHNhdmVkUmVzb3VyY2VzID0gbmV3IEFycmF5TGlzdDxSZXNvdXJjZT4oKTsNCisNCisJLyoqDQorCSAqIE1hcCB0byBzdG9yZSB0aGUgZGlhZ25vc3RpYyBhc3NvY2lhdGVkIHdpdGggYSByZXNvdXJjZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCBNYXA8UmVzb3VyY2UsIERpYWdub3N0aWM+IHJlc291cmNlVG9EaWFnbm9zdGljTWFwID0gbmV3IExpbmtlZEhhc2hNYXA8UmVzb3VyY2UsIERpYWdub3N0aWM+KCk7DQorDQorCS8qKg0KKwkgKiBDb250cm9scyB3aGV0aGVyIHRoZSBwcm9ibGVtIGluZGljYXRpb24gc2hvdWxkIGJlIHVwZGF0ZWQuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgYm9vbGVhbiB1cGRhdGVQcm9ibGVtSW5kaWNhdGlvbiA9IHRydWU7DQorDQorCS8qKg0KKwkgKiBBZGFwdGVyIHVzZWQgdG8gdXBkYXRlIHRoZSBwcm9ibGVtIGluZGljYXRpb24gd2hlbiByZXNvdXJjZXMgYXJlIGRlbWFuZGVkIGxvYWRlZC4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCBFQ29udGVudEFkYXB0ZXIgcHJvYmxlbUluZGljYXRpb25BZGFwdGVyID0gDQorCQluZXcgRUNvbnRlbnRBZGFwdGVyKCkgew0KKwkJCUBPdmVycmlkZQ0KKwkJCXB1YmxpYyB2b2lkIG5vdGlmeUNoYW5nZWQoTm90aWZpY2F0aW9uIG5vdGlmaWNhdGlvbikgew0KKwkJCQlpZiAobm90aWZpY2F0aW9uLmdldE5vdGlmaWVyKCkgaW5zdGFuY2VvZiBSZXNvdXJjZSkgew0KKwkJCQkJc3dpdGNoIChub3RpZmljYXRpb24uZ2V0RmVhdHVyZUlEKFJlc291cmNlLmNsYXNzKSkgew0KKwkJCQkJCWNhc2UgUmVzb3VyY2UuUkVTT1VSQ0VfX0lTX0xPQURFRDoNCisJCQkJCQljYXNlIFJlc291cmNlLlJFU09VUkNFX19FUlJPUlM6DQorCQkJCQkJY2FzZSBSZXNvdXJjZS5SRVNPVVJDRV9fV0FSTklOR1M6IHsNCisJCQkJCQkJUmVzb3VyY2UgcmVzb3VyY2UgPSAoUmVzb3VyY2Upbm90aWZpY2F0aW9uLmdldE5vdGlmaWVyKCk7DQorCQkJCQkJCURpYWdub3N0aWMgZGlhZ25vc3RpYyA9IGFuYWx5emVSZXNvdXJjZVByb2JsZW1zKHJlc291cmNlLCBudWxsKTsNCisJCQkJCQkJaWYgKGRpYWdub3N0aWMuZ2V0U2V2ZXJpdHkoKSAhPSBEaWFnbm9zdGljLk9LKSB7DQorCQkJCQkJCQlyZXNvdXJjZVRvRGlhZ25vc3RpY01hcC5wdXQocmVzb3VyY2UsIGRpYWdub3N0aWMpOw0KKwkJCQkJCQl9DQorCQkJCQkJCWVsc2Ugew0KKwkJCQkJCQkJcmVzb3VyY2VUb0RpYWdub3N0aWNNYXAucmVtb3ZlKHJlc291cmNlKTsNCisJCQkJCQkJfQ0KKw0KKwkJCQkJCQlpZiAodXBkYXRlUHJvYmxlbUluZGljYXRpb24pIHsNCisJCQkJCQkJCWdldFNpdGUoKS5nZXRTaGVsbCgpLmdldERpc3BsYXkoKS5hc3luY0V4ZWMNCisJCQkJCQkJCQkobmV3IFJ1bm5hYmxlKCkgew0KKwkJCQkJCQkJCQkgcHVibGljIHZvaWQgcnVuKCkgew0KKwkJCQkJCQkJCQkJIHVwZGF0ZVByb2JsZW1JbmRpY2F0aW9uKCk7DQorCQkJCQkJCQkJCSB9DQorCQkJCQkJCQkJIH0pOw0KKwkJCQkJCQl9DQorCQkJCQkJCWJyZWFrOw0KKwkJCQkJCX0NCisJCQkJCX0NCisJCQkJfQ0KKwkJCQllbHNlIHsNCisJCQkJCXN1cGVyLm5vdGlmeUNoYW5nZWQobm90aWZpY2F0aW9uKTsNCisJCQkJfQ0KKwkJCX0NCisNCisJCQlAT3ZlcnJpZGUNCisJCQlwcm90ZWN0ZWQgdm9pZCBzZXRUYXJnZXQoUmVzb3VyY2UgdGFyZ2V0KSB7DQorCQkJCWJhc2ljU2V0VGFyZ2V0KHRhcmdldCk7DQorCQkJfQ0KKw0KKwkJCUBPdmVycmlkZQ0KKwkJCXByb3RlY3RlZCB2b2lkIHVuc2V0VGFyZ2V0KFJlc291cmNlIHRhcmdldCkgew0KKwkJCQliYXNpY1Vuc2V0VGFyZ2V0KHRhcmdldCk7DQorCQkJfQ0KKwkJfTsNCisNCisJLyoqDQorCSAqIFRoaXMgbGlzdGVucyBmb3Igd29ya3NwYWNlIGNoYW5nZXMuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgSVJlc291cmNlQ2hhbmdlTGlzdGVuZXIgcmVzb3VyY2VDaGFuZ2VMaXN0ZW5lciA9DQorCQluZXcgSVJlc291cmNlQ2hhbmdlTGlzdGVuZXIoKSB7DQorCQkJcHVibGljIHZvaWQgcmVzb3VyY2VDaGFuZ2VkKElSZXNvdXJjZUNoYW5nZUV2ZW50IGV2ZW50KSB7DQorCQkJCUlSZXNvdXJjZURlbHRhIGRlbHRhID0gZXZlbnQuZ2V0RGVsdGEoKTsNCisJCQkJdHJ5IHsNCisJCQkJCWNsYXNzIFJlc291cmNlRGVsdGFWaXNpdG9yIGltcGxlbWVudHMgSVJlc291cmNlRGVsdGFWaXNpdG9yIHsNCisJCQkJCQlwcm90ZWN0ZWQgUmVzb3VyY2VTZXQgcmVzb3VyY2VTZXQgPSBlZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCk7DQorCQkJCQkJcHJvdGVjdGVkIENvbGxlY3Rpb248UmVzb3VyY2U+IGNoYW5nZWRSZXNvdXJjZXMgPSBuZXcgQXJyYXlMaXN0PFJlc291cmNlPigpOw0KKwkJCQkJCXByb3RlY3RlZCBDb2xsZWN0aW9uPFJlc291cmNlPiByZW1vdmVkUmVzb3VyY2VzID0gbmV3IEFycmF5TGlzdDxSZXNvdXJjZT4oKTsNCisNCisJCQkJCQlwdWJsaWMgYm9vbGVhbiB2aXNpdChJUmVzb3VyY2VEZWx0YSBkZWx0YSkgew0KKwkJCQkJCQlpZiAoZGVsdGEuZ2V0UmVzb3VyY2UoKS5nZXRUeXBlKCkgPT0gSVJlc291cmNlLkZJTEUpIHsNCisJCQkJCQkJCWlmIChkZWx0YS5nZXRLaW5kKCkgPT0gSVJlc291cmNlRGVsdGEuUkVNT1ZFRCB8fA0KKwkJCQkJCQkJICAgIGRlbHRhLmdldEtpbmQoKSA9PSBJUmVzb3VyY2VEZWx0YS5DSEFOR0VEICYmIGRlbHRhLmdldEZsYWdzKCkgIT0gSVJlc291cmNlRGVsdGEuTUFSS0VSUykgew0KKwkJCQkJCQkJCVJlc291cmNlIHJlc291cmNlID0gcmVzb3VyY2VTZXQuZ2V0UmVzb3VyY2UoVVJJLmNyZWF0ZVBsYXRmb3JtUmVzb3VyY2VVUkkoZGVsdGEuZ2V0RnVsbFBhdGgoKS50b1N0cmluZygpLCB0cnVlKSwgZmFsc2UpOw0KKwkJCQkJCQkJCWlmIChyZXNvdXJjZSAhPSBudWxsKSB7DQorCQkJCQkJCQkJCWlmIChkZWx0YS5nZXRLaW5kKCkgPT0gSVJlc291cmNlRGVsdGEuUkVNT1ZFRCkgew0KKwkJCQkJCQkJCQkJcmVtb3ZlZFJlc291cmNlcy5hZGQocmVzb3VyY2UpOw0KKwkJCQkJCQkJCQl9DQorCQkJCQkJCQkJCWVsc2UgaWYgKCFzYXZlZFJlc291cmNlcy5yZW1vdmUocmVzb3VyY2UpKSB7DQorCQkJCQkJCQkJCQljaGFuZ2VkUmVzb3VyY2VzLmFkZChyZXNvdXJjZSk7DQorCQkJCQkJCQkJCX0NCisJCQkJCQkJCQl9DQorCQkJCQkJCQl9DQorCQkJCQkJCX0NCisNCisJCQkJCQkJcmV0dXJuIHRydWU7DQorCQkJCQkJfQ0KKw0KKwkJCQkJCXB1YmxpYyBDb2xsZWN0aW9uPFJlc291cmNlPiBnZXRDaGFuZ2VkUmVzb3VyY2VzKCkgew0KKwkJCQkJCQlyZXR1cm4gY2hhbmdlZFJlc291cmNlczsNCisJCQkJCQl9DQorDQorCQkJCQkJcHVibGljIENvbGxlY3Rpb248UmVzb3VyY2U+IGdldFJlbW92ZWRSZXNvdXJjZXMoKSB7DQorCQkJCQkJCXJldHVybiByZW1vdmVkUmVzb3VyY2VzOw0KKwkJCQkJCX0NCisJCQkJCX0NCisNCisJCQkJCWZpbmFsIFJlc291cmNlRGVsdGFWaXNpdG9yIHZpc2l0b3IgPSBuZXcgUmVzb3VyY2VEZWx0YVZpc2l0b3IoKTsNCisJCQkJCWRlbHRhLmFjY2VwdCh2aXNpdG9yKTsNCisNCisJCQkJCWlmICghdmlzaXRvci5nZXRSZW1vdmVkUmVzb3VyY2VzKCkuaXNFbXB0eSgpKSB7DQorCQkJCQkJZ2V0U2l0ZSgpLmdldFNoZWxsKCkuZ2V0RGlzcGxheSgpLmFzeW5jRXhlYw0KKwkJCQkJCQkobmV3IFJ1bm5hYmxlKCkgew0KKwkJCQkJCQkJIHB1YmxpYyB2b2lkIHJ1bigpIHsNCisJCQkJCQkJCQkgcmVtb3ZlZFJlc291cmNlcy5hZGRBbGwodmlzaXRvci5nZXRSZW1vdmVkUmVzb3VyY2VzKCkpOw0KKwkJCQkJCQkJCSBpZiAoIWlzRGlydHkoKSkgew0KKwkJCQkJCQkJCQkgZ2V0U2l0ZSgpLmdldFBhZ2UoKS5jbG9zZUVkaXRvcihTb2x2ZXJFZGl0b3IudGhpcywgZmFsc2UpOw0KKwkJCQkJCQkJCSB9DQorCQkJCQkJCQkgfQ0KKwkJCQkJCQkgfSk7DQorCQkJCQl9DQorDQorCQkJCQlpZiAoIXZpc2l0b3IuZ2V0Q2hhbmdlZFJlc291cmNlcygpLmlzRW1wdHkoKSkgew0KKwkJCQkJCWdldFNpdGUoKS5nZXRTaGVsbCgpLmdldERpc3BsYXkoKS5hc3luY0V4ZWMNCisJCQkJCQkJKG5ldyBSdW5uYWJsZSgpIHsNCisJCQkJCQkJCSBwdWJsaWMgdm9pZCBydW4oKSB7DQorCQkJCQkJCQkJIGNoYW5nZWRSZXNvdXJjZXMuYWRkQWxsKHZpc2l0b3IuZ2V0Q2hhbmdlZFJlc291cmNlcygpKTsNCisJCQkJCQkJCQkgaWYgKGdldFNpdGUoKS5nZXRQYWdlKCkuZ2V0QWN0aXZlRWRpdG9yKCkgPT0gU29sdmVyRWRpdG9yLnRoaXMpIHsNCisJCQkJCQkJCQkJIGhhbmRsZUFjdGl2YXRlKCk7DQorCQkJCQkJCQkJIH0NCisJCQkJCQkJCSB9DQorCQkJCQkJCSB9KTsNCisJCQkJCX0NCisJCQkJfQ0KKwkJCQljYXRjaCAoQ29yZUV4Y2VwdGlvbiBleGNlcHRpb24pIHsNCisJCQkJCUNvcmVFZGl0b3JQbHVnaW4uSU5TVEFOQ0UubG9nKGV4Y2VwdGlvbik7DQorCQkJCX0NCisJCQl9DQorCQl9Ow0KKw0KKwkvKioNCisJICogSGFuZGxlcyBhY3RpdmF0aW9uIG9mIHRoZSBlZGl0b3Igb3IgaXQncyBhc3NvY2lhdGVkIHZpZXdzLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIHZvaWQgaGFuZGxlQWN0aXZhdGUoKSB7DQorCQkvLyBSZWNvbXB1dGUgdGhlIHJlYWQgb25seSBzdGF0ZS4NCisJCS8vDQorCQlpZiAoZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVRvUmVhZE9ubHlNYXAoKSAhPSBudWxsKSB7DQorCQkgIGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VUb1JlYWRPbmx5TWFwKCkuY2xlYXIoKTsNCisNCisJCSAgLy8gUmVmcmVzaCBhbnkgYWN0aW9ucyB0aGF0IG1heSBiZWNvbWUgZW5hYmxlZCBvciBkaXNhYmxlZC4NCisJCSAgLy8NCisJCSAgc2V0U2VsZWN0aW9uKGdldFNlbGVjdGlvbigpKTsNCisJCX0NCisNCisJCWlmICghcmVtb3ZlZFJlc291cmNlcy5pc0VtcHR5KCkpIHsNCisJCQlpZiAoaGFuZGxlRGlydHlDb25mbGljdCgpKSB7DQorCQkJCWdldFNpdGUoKS5nZXRQYWdlKCkuY2xvc2VFZGl0b3IoU29sdmVyRWRpdG9yLnRoaXMsIGZhbHNlKTsNCisJCQl9DQorCQkJZWxzZSB7DQorCQkJCXJlbW92ZWRSZXNvdXJjZXMuY2xlYXIoKTsNCisJCQkJY2hhbmdlZFJlc291cmNlcy5jbGVhcigpOw0KKwkJCQlzYXZlZFJlc291cmNlcy5jbGVhcigpOw0KKwkJCX0NCisJCX0NCisJCWVsc2UgaWYgKCFjaGFuZ2VkUmVzb3VyY2VzLmlzRW1wdHkoKSkgew0KKwkJCWNoYW5nZWRSZXNvdXJjZXMucmVtb3ZlQWxsKHNhdmVkUmVzb3VyY2VzKTsNCisJCQloYW5kbGVDaGFuZ2VkUmVzb3VyY2VzKCk7DQorCQkJY2hhbmdlZFJlc291cmNlcy5jbGVhcigpOw0KKwkJCXNhdmVkUmVzb3VyY2VzLmNsZWFyKCk7DQorCQl9DQorCX0NCisNCisJLyoqDQorCSAqIEhhbmRsZXMgd2hhdCB0byBkbyB3aXRoIGNoYW5nZWQgcmVzb3VyY2VzIG9uIGFjdGl2YXRpb24uDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgdm9pZCBoYW5kbGVDaGFuZ2VkUmVzb3VyY2VzKCkgew0KKwkJaWYgKCFjaGFuZ2VkUmVzb3VyY2VzLmlzRW1wdHkoKSAmJiAoIWlzRGlydHkoKSB8fCBoYW5kbGVEaXJ0eUNvbmZsaWN0KCkpKSB7DQorCQkJaWYgKGlzRGlydHkoKSkgew0KKwkJCQljaGFuZ2VkUmVzb3VyY2VzLmFkZEFsbChlZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkuZ2V0UmVzb3VyY2VzKCkpOw0KKwkJCX0NCisJCQllZGl0aW5nRG9tYWluLmdldENvbW1hbmRTdGFjaygpLmZsdXNoKCk7DQorDQorCQkJdXBkYXRlUHJvYmxlbUluZGljYXRpb24gPSBmYWxzZTsNCisJCQlmb3IgKFJlc291cmNlIHJlc291cmNlIDogY2hhbmdlZFJlc291cmNlcykgew0KKwkJCQlpZiAocmVzb3VyY2UuaXNMb2FkZWQoKSkgew0KKwkJCQkJcmVzb3VyY2UudW5sb2FkKCk7DQorCQkJCQl0cnkgew0KKwkJCQkJCXJlc291cmNlLmxvYWQoQ29sbGVjdGlvbnMuRU1QVFlfTUFQKTsNCisJCQkJCX0NCisJCQkJCWNhdGNoIChJT0V4Y2VwdGlvbiBleGNlcHRpb24pIHsNCisJCQkJCQlpZiAoIXJlc291cmNlVG9EaWFnbm9zdGljTWFwLmNvbnRhaW5zS2V5KHJlc291cmNlKSkgew0KKwkJCQkJCQlyZXNvdXJjZVRvRGlhZ25vc3RpY01hcC5wdXQocmVzb3VyY2UsIGFuYWx5emVSZXNvdXJjZVByb2JsZW1zKHJlc291cmNlLCBleGNlcHRpb24pKTsNCisJCQkJCQl9DQorCQkJCQl9DQorCQkJCX0NCisJCQl9DQorDQorCQkJaWYgKEFkYXB0ZXJGYWN0b3J5RWRpdGluZ0RvbWFpbi5pc1N0YWxlKGVkaXRvclNlbGVjdGlvbikpIHsNCisJCQkJc2V0U2VsZWN0aW9uKFN0cnVjdHVyZWRTZWxlY3Rpb24uRU1QVFkpOw0KKwkJCX0NCisNCisJCQl1cGRhdGVQcm9ibGVtSW5kaWNhdGlvbiA9IHRydWU7DQorCQkJdXBkYXRlUHJvYmxlbUluZGljYXRpb24oKTsNCisJCX0NCisJfQ0KKyAgDQorCS8qKg0KKwkgKiBVcGRhdGVzIHRoZSBwcm9ibGVtcyBpbmRpY2F0aW9uIHdpdGggdGhlIGluZm9ybWF0aW9uIGRlc2NyaWJlZCBpbiB0aGUgc3BlY2lmaWVkIGRpYWdub3N0aWMuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgdm9pZCB1cGRhdGVQcm9ibGVtSW5kaWNhdGlvbigpIHsNCisJCWlmICh1cGRhdGVQcm9ibGVtSW5kaWNhdGlvbikgew0KKwkJCUJhc2ljRGlhZ25vc3RpYyBkaWFnbm9zdGljID0NCisJCQkJbmV3IEJhc2ljRGlhZ25vc3RpYw0KKwkJCQkJKERpYWdub3N0aWMuT0ssDQorCQkJCQkgIm9yZy5lY2xpcHNlLnN0ZW0uY29yZS5lZGl0b3IiLCAvLyROT04tTkxTLTEkDQorCQkJCQkgMCwNCisJCQkJCSBudWxsLA0KKwkJCQkJIG5ldyBPYmplY3QgW10geyBlZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkgfSk7DQorCQkJZm9yIChEaWFnbm9zdGljIGNoaWxkRGlhZ25vc3RpYyA6IHJlc291cmNlVG9EaWFnbm9zdGljTWFwLnZhbHVlcygpKSB7DQorCQkJCWlmIChjaGlsZERpYWdub3N0aWMuZ2V0U2V2ZXJpdHkoKSAhPSBEaWFnbm9zdGljLk9LKSB7DQorCQkJCQlkaWFnbm9zdGljLmFkZChjaGlsZERpYWdub3N0aWMpOw0KKwkJCQl9DQorCQkJfQ0KKw0KKwkJCWludCBsYXN0RWRpdG9yUGFnZSA9IGdldFBhZ2VDb3VudCgpIC0gMTsNCisJCQlpZiAobGFzdEVkaXRvclBhZ2UgPj0gMCAmJiBnZXRFZGl0b3IobGFzdEVkaXRvclBhZ2UpIGluc3RhbmNlb2YgUHJvYmxlbUVkaXRvclBhcnQpIHsNCisJCQkJKChQcm9ibGVtRWRpdG9yUGFydClnZXRFZGl0b3IobGFzdEVkaXRvclBhZ2UpKS5zZXREaWFnbm9zdGljKGRpYWdub3N0aWMpOw0KKwkJCQlpZiAoZGlhZ25vc3RpYy5nZXRTZXZlcml0eSgpICE9IERpYWdub3N0aWMuT0spIHsNCisJCQkJCXNldEFjdGl2ZVBhZ2UobGFzdEVkaXRvclBhZ2UpOw0KKwkJCQl9DQorCQkJfQ0KKwkJCWVsc2UgaWYgKGRpYWdub3N0aWMuZ2V0U2V2ZXJpdHkoKSAhPSBEaWFnbm9zdGljLk9LKSB7DQorCQkJCVByb2JsZW1FZGl0b3JQYXJ0IHByb2JsZW1FZGl0b3JQYXJ0ID0gbmV3IFByb2JsZW1FZGl0b3JQYXJ0KCk7DQorCQkJCXByb2JsZW1FZGl0b3JQYXJ0LnNldERpYWdub3N0aWMoZGlhZ25vc3RpYyk7DQorCQkJCXByb2JsZW1FZGl0b3JQYXJ0LnNldE1hcmtlckhlbHBlcihtYXJrZXJIZWxwZXIpOw0KKwkJCQl0cnkgew0KKwkJCQkJYWRkUGFnZSgrK2xhc3RFZGl0b3JQYWdlLCBwcm9ibGVtRWRpdG9yUGFydCwgZ2V0RWRpdG9ySW5wdXQoKSk7DQorCQkJCQlzZXRQYWdlVGV4dChsYXN0RWRpdG9yUGFnZSwgcHJvYmxlbUVkaXRvclBhcnQuZ2V0UGFydE5hbWUoKSk7DQorCQkJCQlzZXRBY3RpdmVQYWdlKGxhc3RFZGl0b3JQYWdlKTsNCisJCQkJCXNob3dUYWJzKCk7DQorCQkJCX0NCisJCQkJY2F0Y2ggKFBhcnRJbml0RXhjZXB0aW9uIGV4Y2VwdGlvbikgew0KKwkJCQkJQ29yZUVkaXRvclBsdWdpbi5JTlNUQU5DRS5sb2coZXhjZXB0aW9uKTsNCisJCQkJfQ0KKwkJCX0NCisNCisJCQlpZiAobWFya2VySGVscGVyLmhhc01hcmtlcnMoZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpKSkgew0KKwkJCQltYXJrZXJIZWxwZXIuZGVsZXRlTWFya2VycyhlZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkpOw0KKwkJCQlpZiAoZGlhZ25vc3RpYy5nZXRTZXZlcml0eSgpICE9IERpYWdub3N0aWMuT0spIHsNCisJCQkJCXRyeSB7DQorCQkJCQkJbWFya2VySGVscGVyLmNyZWF0ZU1hcmtlcnMoZGlhZ25vc3RpYyk7DQorCQkJCQl9DQorCQkJCQljYXRjaCAoQ29yZUV4Y2VwdGlvbiBleGNlcHRpb24pIHsNCisJCQkJCQlDb3JlRWRpdG9yUGx1Z2luLklOU1RBTkNFLmxvZyhleGNlcHRpb24pOw0KKwkJCQkJfQ0KKwkJCQl9DQorCQkJfQ0KKwkJfQ0KKwl9DQorDQorCS8qKg0KKwkgKiBTaG93cyBhIGRpYWxvZyB0aGF0IGFza3MgaWYgY29uZmxpY3RpbmcgY2hhbmdlcyBzaG91bGQgYmUgZGlzY2FyZGVkLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIGJvb2xlYW4gaGFuZGxlRGlydHlDb25mbGljdCgpIHsNCisJCXJldHVybg0KKwkJCU1lc3NhZ2VEaWFsb2cub3BlblF1ZXN0aW9uDQorCQkJCShnZXRTaXRlKCkuZ2V0U2hlbGwoKSwNCisJCQkJIGdldFN0cmluZygiX1VJX0ZpbGVDb25mbGljdF9sYWJlbCIpLCAvLyROT04tTkxTLTEkDQorCQkJCSBnZXRTdHJpbmcoIl9XQVJOX0ZpbGVDb25mbGljdCIpKTsgLy8kTk9OLU5MUy0xJA0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIGNyZWF0ZXMgYSBtb2RlbCBlZGl0b3IuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgU29sdmVyRWRpdG9yKCkgew0KKwkJc3VwZXIoKTsNCisJCWluaXRpYWxpemVFZGl0aW5nRG9tYWluKCk7DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgc2V0cyB1cCB0aGUgZWRpdGluZyBkb21haW4gZm9yIHRoZSBtb2RlbCBlZGl0b3IuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgdm9pZCBpbml0aWFsaXplRWRpdGluZ0RvbWFpbigpIHsNCisJCS8vIENyZWF0ZSBhbiBhZGFwdGVyIGZhY3RvcnkgdGhhdCB5aWVsZHMgaXRlbSBwcm92aWRlcnMuDQorCQkvLw0KKwkJYWRhcHRlckZhY3RvcnkgPSBuZXcgQ29tcG9zZWRBZGFwdGVyRmFjdG9yeShDb21wb3NlZEFkYXB0ZXJGYWN0b3J5LkRlc2NyaXB0b3IuUmVnaXN0cnkuSU5TVEFOQ0UpOw0KKw0KKwkJYWRhcHRlckZhY3RvcnkuYWRkQWRhcHRlckZhY3RvcnkobmV3IFJlc291cmNlSXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkoKSk7DQorCQlhZGFwdGVyRmFjdG9yeS5hZGRBZGFwdGVyRmFjdG9yeShuZXcgQ29tbW9uSXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkoKSk7DQorCQlhZGFwdGVyRmFjdG9yeS5hZGRBZGFwdGVyRmFjdG9yeShuZXcgRXhwZXJpbWVudEl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5KCkpOw0KKwkJYWRhcHRlckZhY3RvcnkuYWRkQWRhcHRlckZhY3RvcnkobmV3IEdyYXBoSXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkoKSk7DQorCQlhZGFwdGVyRmFjdG9yeS5hZGRBZGFwdGVyRmFjdG9yeShuZXcgTW9kZWxJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSgpKTsNCisJCWFkYXB0ZXJGYWN0b3J5LmFkZEFkYXB0ZXJGYWN0b3J5KG5ldyBNb2RpZmllckl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5KCkpOw0KKwkJYWRhcHRlckZhY3RvcnkuYWRkQWRhcHRlckZhY3RvcnkobmV3IFByZWRpY2F0ZUl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5KCkpOw0KKwkJYWRhcHRlckZhY3RvcnkuYWRkQWRhcHRlckZhY3RvcnkobmV3IFNjZW5hcmlvSXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkoKSk7DQorCQlhZGFwdGVyRmFjdG9yeS5hZGRBZGFwdGVyRmFjdG9yeShuZXcgU2VxdWVuY2VySXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkoKSk7DQorCQlhZGFwdGVyRmFjdG9yeS5hZGRBZGFwdGVyRmFjdG9yeShuZXcgVHJpZ2dlckl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5KCkpOw0KKwkJYWRhcHRlckZhY3RvcnkuYWRkQWRhcHRlckZhY3RvcnkobmV3IFNvbHZlckl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5KCkpOw0KKwkJYWRhcHRlckZhY3RvcnkuYWRkQWRhcHRlckZhY3RvcnkobmV3IExvZ2dlckl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5KCkpOw0KKwkJYWRhcHRlckZhY3RvcnkuYWRkQWRhcHRlckZhY3RvcnkobmV3IEVjb3JlSXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkoKSk7DQorCQlhZGFwdGVyRmFjdG9yeS5hZGRBZGFwdGVyRmFjdG9yeShuZXcgUmVmbGVjdGl2ZUl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5KCkpOw0KKw0KKwkJLy8gQ3JlYXRlIHRoZSBjb21tYW5kIHN0YWNrIHRoYXQgd2lsbCBub3RpZnkgdGhpcyBlZGl0b3IgYXMgY29tbWFuZHMgYXJlIGV4ZWN1dGVkLg0KKwkJLy8NCisJCUJhc2ljQ29tbWFuZFN0YWNrIGNvbW1hbmRTdGFjayA9IG5ldyBCYXNpY0NvbW1hbmRTdGFjaygpOw0KKw0KKwkJLy8gQWRkIGEgbGlzdGVuZXIgdG8gc2V0IHRoZSBtb3N0IHJlY2VudCBjb21tYW5kJ3MgYWZmZWN0ZWQgb2JqZWN0cyB0byBiZSB0aGUgc2VsZWN0aW9uIG9mIHRoZSB2aWV3ZXIgd2l0aCBmb2N1cy4NCisJCS8vDQorCQljb21tYW5kU3RhY2suYWRkQ29tbWFuZFN0YWNrTGlzdGVuZXINCisJCQkobmV3IENvbW1hbmRTdGFja0xpc3RlbmVyKCkgew0KKwkJCQkgcHVibGljIHZvaWQgY29tbWFuZFN0YWNrQ2hhbmdlZChmaW5hbCBFdmVudE9iamVjdCBldmVudCkgew0KKwkJCQkJIGdldENvbnRhaW5lcigpLmdldERpc3BsYXkoKS5hc3luY0V4ZWMNCisJCQkJCQkgKG5ldyBSdW5uYWJsZSgpIHsNCisJCQkJCQkJICBwdWJsaWMgdm9pZCBydW4oKSB7DQorCQkJCQkJCQkgIGZpcmVQcm9wZXJ0eUNoYW5nZShJRWRpdG9yUGFydC5QUk9QX0RJUlRZKTsNCisNCisJCQkJCQkJCSAgLy8gVHJ5IHRvIHNlbGVjdCB0aGUgYWZmZWN0ZWQgb2JqZWN0cy4NCisJCQkJCQkJCSAgLy8NCisJCQkJCQkJCSAgQ29tbWFuZCBtb3N0UmVjZW50Q29tbWFuZCA9ICgoQ29tbWFuZFN0YWNrKWV2ZW50LmdldFNvdXJjZSgpKS5nZXRNb3N0UmVjZW50Q29tbWFuZCgpOw0KKwkJCQkJCQkJICBpZiAobW9zdFJlY2VudENvbW1hbmQgIT0gbnVsbCkgew0KKwkJCQkJCQkJCSAgc2V0U2VsZWN0aW9uVG9WaWV3ZXIobW9zdFJlY2VudENvbW1hbmQuZ2V0QWZmZWN0ZWRPYmplY3RzKCkpOw0KKwkJCQkJCQkJICB9DQorCQkJCQkJCQkgIGlmIChwcm9wZXJ0eVNoZWV0UGFnZSAhPSBudWxsICYmICFwcm9wZXJ0eVNoZWV0UGFnZS5nZXRDb250cm9sKCkuaXNEaXNwb3NlZCgpKSB7DQorCQkJCQkJCQkJICBwcm9wZXJ0eVNoZWV0UGFnZS5yZWZyZXNoKCk7DQorCQkJCQkJCQkgIH0NCisJCQkJCQkJICB9DQorCQkJCQkJICB9KTsNCisJCQkJIH0NCisJCQkgfSk7DQorDQorCQkvLyBDcmVhdGUgdGhlIGVkaXRpbmcgZG9tYWluIHdpdGggYSBzcGVjaWFsIGNvbW1hbmQgc3RhY2suDQorCQkvLw0KKwkJZWRpdGluZ0RvbWFpbiA9IG5ldyBBZGFwdGVyRmFjdG9yeUVkaXRpbmdEb21haW4oYWRhcHRlckZhY3RvcnksIGNvbW1hbmRTdGFjaywgbmV3IEhhc2hNYXA8UmVzb3VyY2UsIEJvb2xlYW4+KCkpOw0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIGlzIGhlcmUgZm9yIHRoZSBsaXN0ZW5lciB0byBiZSBhYmxlIHRvIGNhbGwgaXQuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwkJCUBPdmVycmlkZQ0KKwlwcm90ZWN0ZWQgdm9pZCBmaXJlUHJvcGVydHlDaGFuZ2UoaW50IGFjdGlvbikgew0KKwkJc3VwZXIuZmlyZVByb3BlcnR5Q2hhbmdlKGFjdGlvbik7DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgc2V0cyB0aGUgc2VsZWN0aW9uIGludG8gd2hpY2hldmVyIHZpZXdlciBpcyBhY3RpdmUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgdm9pZCBzZXRTZWxlY3Rpb25Ub1ZpZXdlcihDb2xsZWN0aW9uPD8+IGNvbGxlY3Rpb24pIHsNCisJCWZpbmFsIENvbGxlY3Rpb248Pz4gdGhlU2VsZWN0aW9uID0gY29sbGVjdGlvbjsNCisJCS8vIE1ha2Ugc3VyZSBpdCdzIG9rYXkuDQorCQkvLw0KKwkJaWYgKHRoZVNlbGVjdGlvbiAhPSBudWxsICYmICF0aGVTZWxlY3Rpb24uaXNFbXB0eSgpKSB7DQorCQkJUnVubmFibGUgcnVubmFibGUgPQ0KKwkJCQluZXcgUnVubmFibGUoKSB7DQorCQkJCQlwdWJsaWMgdm9pZCBydW4oKSB7DQorCQkJCQkJLy8gVHJ5IHRvIHNlbGVjdCB0aGUgaXRlbXMgaW4gdGhlIGN1cnJlbnQgY29udGVudCB2aWV3ZXIgb2YgdGhlIGVkaXRvci4NCisJCQkJCQkvLw0KKwkJCQkJCWlmIChjdXJyZW50Vmlld2VyICE9IG51bGwpIHsNCisJCQkJCQkJY3VycmVudFZpZXdlci5zZXRTZWxlY3Rpb24obmV3IFN0cnVjdHVyZWRTZWxlY3Rpb24odGhlU2VsZWN0aW9uLnRvQXJyYXkoKSksIHRydWUpOw0KKwkJCQkJCX0NCisJCQkJCX0NCisJCQkJfTsNCisJCQlnZXRTaXRlKCkuZ2V0U2hlbGwoKS5nZXREaXNwbGF5KCkuYXN5bmNFeGVjKHJ1bm5hYmxlKTsNCisJCX0NCisJfQ0KKw0KKwkvKioNCisJICogVGhpcyByZXR1cm5zIHRoZSBlZGl0aW5nIGRvbWFpbiBhcyByZXF1aXJlZCBieSB0aGUge0BsaW5rIElFZGl0aW5nRG9tYWluUHJvdmlkZXJ9IGludGVyZmFjZS4NCisJICogVGhpcyBpcyBpbXBvcnRhbnQgZm9yIGltcGxlbWVudGluZyB0aGUgc3RhdGljIG1ldGhvZHMgb2Yge0BsaW5rIEFkYXB0ZXJGYWN0b3J5RWRpdGluZ0RvbWFpbn0NCisJICogYW5kIGZvciBzdXBwb3J0aW5nIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5hY3Rpb24uQ29tbWFuZEFjdGlvbn0uDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgRWRpdGluZ0RvbWFpbiBnZXRFZGl0aW5nRG9tYWluKCkgew0KKwkJcmV0dXJuIGVkaXRpbmdEb21haW47DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgY2xhc3MgUmV2ZXJzZUFkYXB0ZXJGYWN0b3J5Q29udGVudFByb3ZpZGVyIGV4dGVuZHMgQWRhcHRlckZhY3RvcnlDb250ZW50UHJvdmlkZXIgew0KKwkJLyoqDQorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCQkgKiBAZ2VuZXJhdGVkDQorCQkgKi8NCisJCXB1YmxpYyBSZXZlcnNlQWRhcHRlckZhY3RvcnlDb250ZW50UHJvdmlkZXIoQWRhcHRlckZhY3RvcnkgYWRhcHRlckZhY3RvcnkpIHsNCisJCQlzdXBlcihhZGFwdGVyRmFjdG9yeSk7DQorCQl9DQorDQorCQkvKioNCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJCSAqIEBnZW5lcmF0ZWQNCisJCSAqLw0KKwkJQE92ZXJyaWRlDQorCQlwdWJsaWMgT2JqZWN0IFtdIGdldEVsZW1lbnRzKE9iamVjdCBvYmplY3QpIHsNCisJCQlPYmplY3QgcGFyZW50ID0gc3VwZXIuZ2V0UGFyZW50KG9iamVjdCk7DQorCQkJcmV0dXJuIChwYXJlbnQgPT0gbnVsbCA/IENvbGxlY3Rpb25zLkVNUFRZX1NFVCA6IENvbGxlY3Rpb25zLnNpbmdsZXRvbihwYXJlbnQpKS50b0FycmF5KCk7DQorCQl9DQorDQorCQkvKioNCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJCSAqIEBnZW5lcmF0ZWQNCisJCSAqLw0KKwkJQE92ZXJyaWRlDQorCQlwdWJsaWMgT2JqZWN0IFtdIGdldENoaWxkcmVuKE9iamVjdCBvYmplY3QpIHsNCisJCQlPYmplY3QgcGFyZW50ID0gc3VwZXIuZ2V0UGFyZW50KG9iamVjdCk7DQorCQkJcmV0dXJuIChwYXJlbnQgPT0gbnVsbCA/IENvbGxlY3Rpb25zLkVNUFRZX1NFVCA6IENvbGxlY3Rpb25zLnNpbmdsZXRvbihwYXJlbnQpKS50b0FycmF5KCk7DQorCQl9DQorDQorCQkvKioNCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJCSAqIEBnZW5lcmF0ZWQNCisJCSAqLw0KKwkJQE92ZXJyaWRlDQorCQlwdWJsaWMgYm9vbGVhbiBoYXNDaGlsZHJlbihPYmplY3Qgb2JqZWN0KSB7DQorCQkJT2JqZWN0IHBhcmVudCA9IHN1cGVyLmdldFBhcmVudChvYmplY3QpOw0KKwkJCXJldHVybiBwYXJlbnQgIT0gbnVsbDsNCisJCX0NCisNCisJCS8qKg0KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkJICogQGdlbmVyYXRlZA0KKwkJICovDQorCQlAT3ZlcnJpZGUNCisJCXB1YmxpYyBPYmplY3QgZ2V0UGFyZW50KE9iamVjdCBvYmplY3QpIHsNCisJCQlyZXR1cm4gbnVsbDsNCisJCX0NCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyB2b2lkIHNldEN1cnJlbnRWaWV3ZXJQYW5lKFZpZXdlclBhbmUgdmlld2VyUGFuZSkgew0KKwkJaWYgKGN1cnJlbnRWaWV3ZXJQYW5lICE9IHZpZXdlclBhbmUpIHsNCisJCQlpZiAoY3VycmVudFZpZXdlclBhbmUgIT0gbnVsbCkgew0KKwkJCQljdXJyZW50Vmlld2VyUGFuZS5zaG93Rm9jdXMoZmFsc2UpOw0KKwkJCX0NCisJCQljdXJyZW50Vmlld2VyUGFuZSA9IHZpZXdlclBhbmU7DQorCQl9DQorCQlzZXRDdXJyZW50Vmlld2VyKGN1cnJlbnRWaWV3ZXJQYW5lLmdldFZpZXdlcigpKTsNCisJfQ0KKw0KKwkvKioNCisJICogVGhpcyBtYWtlcyBzdXJlIHRoYXQgb25lIGNvbnRlbnQgdmlld2VyLCBlaXRoZXIgZm9yIHRoZSBjdXJyZW50IHBhZ2Ugb3IgdGhlIG91dGxpbmUgdmlldywgaWYgaXQgaGFzIGZvY3VzLA0KKwkgKiBpcyB0aGUgY3VycmVudCBvbmUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgdm9pZCBzZXRDdXJyZW50Vmlld2VyKFZpZXdlciB2aWV3ZXIpIHsNCisJCS8vIElmIGl0IGlzIGNoYW5naW5nLi4uDQorCQkvLw0KKwkJaWYgKGN1cnJlbnRWaWV3ZXIgIT0gdmlld2VyKSB7DQorCQkJaWYgKHNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lciA9PSBudWxsKSB7DQorCQkJCS8vIENyZWF0ZSB0aGUgbGlzdGVuZXIgb24gZGVtYW5kLg0KKwkJCQkvLw0KKwkJCQlzZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIgPQ0KKwkJCQkJbmV3IElTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIoKSB7DQorCQkJCQkJLy8gVGhpcyBqdXN0IG5vdGlmaWVzIHRob3NlIHRoaW5ncyB0aGF0IGFyZSBhZmZlY3RlZCBieSB0aGUgc2VjdGlvbi4NCisJCQkJCQkvLw0KKwkJCQkJCXB1YmxpYyB2b2lkIHNlbGVjdGlvbkNoYW5nZWQoU2VsZWN0aW9uQ2hhbmdlZEV2ZW50IHNlbGVjdGlvbkNoYW5nZWRFdmVudCkgew0KKwkJCQkJCQlzZXRTZWxlY3Rpb24oc2VsZWN0aW9uQ2hhbmdlZEV2ZW50LmdldFNlbGVjdGlvbigpKTsNCisJCQkJCQl9DQorCQkJCQl9Ow0KKwkJCX0NCisNCisJCQkvLyBTdG9wIGxpc3RlbmluZyB0byB0aGUgb2xkIG9uZS4NCisJCQkvLw0KKwkJCWlmIChjdXJyZW50Vmlld2VyICE9IG51bGwpIHsNCisJCQkJY3VycmVudFZpZXdlci5yZW1vdmVTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIoc2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyKTsNCisJCQl9DQorDQorCQkJLy8gU3RhcnQgbGlzdGVuaW5nIHRvIHRoZSBuZXcgb25lLg0KKwkJCS8vDQorCQkJaWYgKHZpZXdlciAhPSBudWxsKSB7DQorCQkJCXZpZXdlci5hZGRTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIoc2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyKTsNCisJCQl9DQorDQorCQkJLy8gUmVtZW1iZXIgaXQuDQorCQkJLy8NCisJCQljdXJyZW50Vmlld2VyID0gdmlld2VyOw0KKw0KKwkJCS8vIFNldCB0aGUgZWRpdG9ycyBzZWxlY3Rpb24gYmFzZWQgb24gdGhlIGN1cnJlbnQgdmlld2VyJ3Mgc2VsZWN0aW9uLg0KKwkJCS8vDQorCQkJc2V0U2VsZWN0aW9uKGN1cnJlbnRWaWV3ZXIgPT0gbnVsbCA/IFN0cnVjdHVyZWRTZWxlY3Rpb24uRU1QVFkgOiBjdXJyZW50Vmlld2VyLmdldFNlbGVjdGlvbigpKTsNCisJCX0NCisJfQ0KKw0KKwkvKioNCisJICogVGhpcyByZXR1cm5zIHRoZSB2aWV3ZXIgYXMgcmVxdWlyZWQgYnkgdGhlIHtAbGluayBJVmlld2VyUHJvdmlkZXJ9IGludGVyZmFjZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBWaWV3ZXIgZ2V0Vmlld2VyKCkgew0KKwkJcmV0dXJuIGN1cnJlbnRWaWV3ZXI7DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgY3JlYXRlcyBhIGNvbnRleHQgbWVudSBmb3IgdGhlIHZpZXdlciBhbmQgYWRkcyBhIGxpc3RlbmVyIGFzIHdlbGwgcmVnaXN0ZXJpbmcgdGhlIG1lbnUgZm9yIGV4dGVuc2lvbi4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCB2b2lkIGNyZWF0ZUNvbnRleHRNZW51Rm9yKFN0cnVjdHVyZWRWaWV3ZXIgdmlld2VyKSB7DQorCQlNZW51TWFuYWdlciBjb250ZXh0TWVudSA9IG5ldyBNZW51TWFuYWdlcigiI1BvcFVwIik7IC8vJE5PTi1OTFMtMSQNCisJCWNvbnRleHRNZW51LmFkZChuZXcgU2VwYXJhdG9yKCJhZGRpdGlvbnMiKSk7IC8vJE5PTi1OTFMtMSQNCisJCWNvbnRleHRNZW51LnNldFJlbW92ZUFsbFdoZW5TaG93bih0cnVlKTsNCisJCWNvbnRleHRNZW51LmFkZE1lbnVMaXN0ZW5lcih0aGlzKTsNCisJCU1lbnUgbWVudT0gY29udGV4dE1lbnUuY3JlYXRlQ29udGV4dE1lbnUodmlld2VyLmdldENvbnRyb2woKSk7DQorCQl2aWV3ZXIuZ2V0Q29udHJvbCgpLnNldE1lbnUobWVudSk7DQorCQlnZXRTaXRlKCkucmVnaXN0ZXJDb250ZXh0TWVudShjb250ZXh0TWVudSwgbmV3IFVud3JhcHBpbmdTZWxlY3Rpb25Qcm92aWRlcih2aWV3ZXIpKTsNCisNCisJCWludCBkbmRPcGVyYXRpb25zID0gRE5ELkRST1BfQ09QWSB8IERORC5EUk9QX01PVkUgfCBETkQuRFJPUF9MSU5LOw0KKwkJVHJhbnNmZXJbXSB0cmFuc2ZlcnMgPSBuZXcgVHJhbnNmZXJbXSB7IExvY2FsVHJhbnNmZXIuZ2V0SW5zdGFuY2UoKSB9Ow0KKwkJdmlld2VyLmFkZERyYWdTdXBwb3J0KGRuZE9wZXJhdGlvbnMsIHRyYW5zZmVycywgbmV3IFZpZXdlckRyYWdBZGFwdGVyKHZpZXdlcikpOw0KKwkJdmlld2VyLmFkZERyb3BTdXBwb3J0KGRuZE9wZXJhdGlvbnMsIHRyYW5zZmVycywgbmV3IEVkaXRpbmdEb21haW5WaWV3ZXJEcm9wQWRhcHRlcihlZGl0aW5nRG9tYWluLCB2aWV3ZXIpKTsNCisJfQ0KKw0KKwkvKioNCisJICogVGhpcyBpcyB0aGUgbWV0aG9kIGNhbGxlZCB0byBsb2FkIGEgcmVzb3VyY2UgaW50byB0aGUgZWRpdGluZyBkb21haW4ncyByZXNvdXJjZSBzZXQgYmFzZWQgb24gdGhlIGVkaXRvcidzIGlucHV0Lg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIHZvaWQgY3JlYXRlTW9kZWwoKSB7DQorCQlVUkkgcmVzb3VyY2VVUkkgPSBFZGl0VUlVdGlsLmdldFVSSShnZXRFZGl0b3JJbnB1dCgpKTsNCisJCUV4Y2VwdGlvbiBleGNlcHRpb24gPSBudWxsOw0KKwkJUmVzb3VyY2UgcmVzb3VyY2UgPSBudWxsOw0KKwkJdHJ5IHsNCisJCQkvLyBMb2FkIHRoZSByZXNvdXJjZSB0aHJvdWdoIHRoZSBlZGl0aW5nIGRvbWFpbi4NCisJCQkvLw0KKwkJCXJlc291cmNlID0gZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpLmdldFJlc291cmNlKHJlc291cmNlVVJJLCB0cnVlKTsNCisJCX0NCisJCWNhdGNoIChFeGNlcHRpb24gZSkgew0KKwkJCWV4Y2VwdGlvbiA9IGU7DQorCQkJcmVzb3VyY2UgPSBlZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkuZ2V0UmVzb3VyY2UocmVzb3VyY2VVUkksIGZhbHNlKTsNCisJCX0NCisNCisJCURpYWdub3N0aWMgZGlhZ25vc3RpYyA9IGFuYWx5emVSZXNvdXJjZVByb2JsZW1zKHJlc291cmNlLCBleGNlcHRpb24pOw0KKwkJaWYgKGRpYWdub3N0aWMuZ2V0U2V2ZXJpdHkoKSAhPSBEaWFnbm9zdGljLk9LKSB7DQorCQkJcmVzb3VyY2VUb0RpYWdub3N0aWNNYXAucHV0KHJlc291cmNlLCAgYW5hbHl6ZVJlc291cmNlUHJvYmxlbXMocmVzb3VyY2UsIGV4Y2VwdGlvbikpOw0KKwkJfQ0KKwkJZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpLmVBZGFwdGVycygpLmFkZChwcm9ibGVtSW5kaWNhdGlvbkFkYXB0ZXIpOw0KKwl9DQorDQorCS8qKg0KKwkgKiBSZXR1cm5zIGEgZGlhZ25vc3RpYyBkZXNjcmliaW5nIHRoZSBlcnJvcnMgYW5kIHdhcm5pbmdzIGxpc3RlZCBpbiB0aGUgcmVzb3VyY2UNCisJICogYW5kIHRoZSBzcGVjaWZpZWQgZXhjZXB0aW9uIChpZiBhbnkpLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIERpYWdub3N0aWMgYW5hbHl6ZVJlc291cmNlUHJvYmxlbXMoUmVzb3VyY2UgcmVzb3VyY2UsIEV4Y2VwdGlvbiBleGNlcHRpb24pIHsNCisJCWlmICghcmVzb3VyY2UuZ2V0RXJyb3JzKCkuaXNFbXB0eSgpIHx8ICFyZXNvdXJjZS5nZXRXYXJuaW5ncygpLmlzRW1wdHkoKSkgew0KKwkJCUJhc2ljRGlhZ25vc3RpYyBiYXNpY0RpYWdub3N0aWMgPQ0KKwkJCQluZXcgQmFzaWNEaWFnbm9zdGljDQorCQkJCQkoRGlhZ25vc3RpYy5FUlJPUiwNCisJCQkJCSAib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmVkaXRvciIsIC8vJE5PTi1OTFMtMSQNCisJCQkJCSAwLA0KKwkJCQkJIGdldFN0cmluZygiX1VJX0NyZWF0ZU1vZGVsRXJyb3JfbWVzc2FnZSIsIHJlc291cmNlLmdldFVSSSgpKSwgLy8kTk9OLU5MUy0xJA0KKwkJCQkJIG5ldyBPYmplY3QgW10geyBleGNlcHRpb24gPT0gbnVsbCA/IChPYmplY3QpcmVzb3VyY2UgOiBleGNlcHRpb24gfSk7DQorCQkJYmFzaWNEaWFnbm9zdGljLm1lcmdlKEVjb3JlVXRpbC5jb21wdXRlRGlhZ25vc3RpYyhyZXNvdXJjZSwgdHJ1ZSkpOw0KKwkJCXJldHVybiBiYXNpY0RpYWdub3N0aWM7DQorCQl9DQorCQllbHNlIGlmIChleGNlcHRpb24gIT0gbnVsbCkgew0KKwkJCXJldHVybg0KKwkJCQluZXcgQmFzaWNEaWFnbm9zdGljDQorCQkJCQkoRGlhZ25vc3RpYy5FUlJPUiwNCisJCQkJCSAib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmVkaXRvciIsIC8vJE5PTi1OTFMtMSQNCisJCQkJCSAwLA0KKwkJCQkJIGdldFN0cmluZygiX1VJX0NyZWF0ZU1vZGVsRXJyb3JfbWVzc2FnZSIsIHJlc291cmNlLmdldFVSSSgpKSwgLy8kTk9OLU5MUy0xJA0KKwkJCQkJIG5ldyBPYmplY3RbXSB7IGV4Y2VwdGlvbiB9KTsNCisJCX0NCisJCWVsc2Ugew0KKwkJCXJldHVybiBEaWFnbm9zdGljLk9LX0lOU1RBTkNFOw0KKwkJfQ0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIGlzIHRoZSBtZXRob2QgdXNlZCBieSB0aGUgZnJhbWV3b3JrIHRvIGluc3RhbGwgeW91ciBvd24gY29udHJvbHMuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlAT3ZlcnJpZGUNCisJcHVibGljIHZvaWQgY3JlYXRlUGFnZXMoKSB7DQorCQkvLyBDcmVhdGVzIHRoZSBtb2RlbCBmcm9tIHRoZSBlZGl0b3IgaW5wdXQNCisJCS8vDQorCQljcmVhdGVNb2RlbCgpOw0KKw0KKwkJLy8gT25seSBjcmVhdGVzIHRoZSBvdGhlciBwYWdlcyBpZiB0aGVyZSBpcyBzb21ldGhpbmcgdGhhdCBjYW4gYmUgZWRpdGVkDQorCQkvLw0KKwkJaWYgKCFnZXRFZGl0aW5nRG9tYWluKCkuZ2V0UmVzb3VyY2VTZXQoKS5nZXRSZXNvdXJjZXMoKS5pc0VtcHR5KCkpIHsNCisJCQkvLyBDcmVhdGUgYSBwYWdlIGZvciB0aGUgc2VsZWN0aW9uIHRyZWUgdmlldy4NCisJCQkvLw0KKwkJCXsNCisJCQkJVmlld2VyUGFuZSB2aWV3ZXJQYW5lID0NCisJCQkJCW5ldyBWaWV3ZXJQYW5lKGdldFNpdGUoKS5nZXRQYWdlKCksIFNvbHZlckVkaXRvci50aGlzKSB7DQorCQkJCQkJQE92ZXJyaWRlDQorCQkJCQkJcHVibGljIFZpZXdlciBjcmVhdGVWaWV3ZXIoQ29tcG9zaXRlIGNvbXBvc2l0ZSkgew0KKwkJCQkJCQlUcmVlIHRyZWUgPSBuZXcgVHJlZShjb21wb3NpdGUsIFNXVC5NVUxUSSk7DQorCQkJCQkJCVRyZWVWaWV3ZXIgbmV3VHJlZVZpZXdlciA9IG5ldyBUcmVlVmlld2VyKHRyZWUpOw0KKwkJCQkJCQlyZXR1cm4gbmV3VHJlZVZpZXdlcjsNCisJCQkJCQl9DQorCQkJCQkJQE92ZXJyaWRlDQorCQkJCQkJcHVibGljIHZvaWQgcmVxdWVzdEFjdGl2YXRpb24oKSB7DQorCQkJCQkJCXN1cGVyLnJlcXVlc3RBY3RpdmF0aW9uKCk7DQorCQkJCQkJCXNldEN1cnJlbnRWaWV3ZXJQYW5lKHRoaXMpOw0KKwkJCQkJCX0NCisJCQkJCX07DQorCQkJCXZpZXdlclBhbmUuY3JlYXRlQ29udHJvbChnZXRDb250YWluZXIoKSk7DQorDQorCQkJCXNlbGVjdGlvblZpZXdlciA9IChUcmVlVmlld2VyKXZpZXdlclBhbmUuZ2V0Vmlld2VyKCk7DQorCQkJCXNlbGVjdGlvblZpZXdlci5zZXRDb250ZW50UHJvdmlkZXIobmV3IEFkYXB0ZXJGYWN0b3J5Q29udGVudFByb3ZpZGVyKGFkYXB0ZXJGYWN0b3J5KSk7DQorDQorCQkJCXNlbGVjdGlvblZpZXdlci5zZXRMYWJlbFByb3ZpZGVyKG5ldyBBZGFwdGVyRmFjdG9yeUxhYmVsUHJvdmlkZXIoYWRhcHRlckZhY3RvcnkpKTsNCisJCQkJc2VsZWN0aW9uVmlld2VyLnNldElucHV0KGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKSk7DQorCQkJCXNlbGVjdGlvblZpZXdlci5zZXRTZWxlY3Rpb24obmV3IFN0cnVjdHVyZWRTZWxlY3Rpb24oZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpLmdldFJlc291cmNlcygpLmdldCgwKSksIHRydWUpOw0KKwkJCQl2aWV3ZXJQYW5lLnNldFRpdGxlKGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKSk7DQorDQorCQkJCW5ldyBBZGFwdGVyRmFjdG9yeVRyZWVFZGl0b3Ioc2VsZWN0aW9uVmlld2VyLmdldFRyZWUoKSwgYWRhcHRlckZhY3RvcnkpOw0KKw0KKwkJCQljcmVhdGVDb250ZXh0TWVudUZvcihzZWxlY3Rpb25WaWV3ZXIpOw0KKwkJCQlpbnQgcGFnZUluZGV4ID0gYWRkUGFnZSh2aWV3ZXJQYW5lLmdldENvbnRyb2woKSk7DQorCQkJCXNldFBhZ2VUZXh0KHBhZ2VJbmRleCwgZ2V0U3RyaW5nKCJfVUlfU2VsZWN0aW9uUGFnZV9sYWJlbCIpKTsgLy8kTk9OLU5MUy0xJA0KKwkJCX0NCisNCisJCQkvLyBDcmVhdGUgYSBwYWdlIGZvciB0aGUgcGFyZW50IHRyZWUgdmlldy4NCisJCQkvLw0KKwkJCXsNCisJCQkJVmlld2VyUGFuZSB2aWV3ZXJQYW5lID0NCisJCQkJCW5ldyBWaWV3ZXJQYW5lKGdldFNpdGUoKS5nZXRQYWdlKCksIFNvbHZlckVkaXRvci50aGlzKSB7DQorCQkJCQkJQE92ZXJyaWRlDQorCQkJCQkJcHVibGljIFZpZXdlciBjcmVhdGVWaWV3ZXIoQ29tcG9zaXRlIGNvbXBvc2l0ZSkgew0KKwkJCQkJCQlUcmVlIHRyZWUgPSBuZXcgVHJlZShjb21wb3NpdGUsIFNXVC5NVUxUSSk7DQorCQkJCQkJCVRyZWVWaWV3ZXIgbmV3VHJlZVZpZXdlciA9IG5ldyBUcmVlVmlld2VyKHRyZWUpOw0KKwkJCQkJCQlyZXR1cm4gbmV3VHJlZVZpZXdlcjsNCisJCQkJCQl9DQorCQkJCQkJQE92ZXJyaWRlDQorCQkJCQkJcHVibGljIHZvaWQgcmVxdWVzdEFjdGl2YXRpb24oKSB7DQorCQkJCQkJCXN1cGVyLnJlcXVlc3RBY3RpdmF0aW9uKCk7DQorCQkJCQkJCXNldEN1cnJlbnRWaWV3ZXJQYW5lKHRoaXMpOw0KKwkJCQkJCX0NCisJCQkJCX07DQorCQkJCXZpZXdlclBhbmUuY3JlYXRlQ29udHJvbChnZXRDb250YWluZXIoKSk7DQorDQorCQkJCXBhcmVudFZpZXdlciA9IChUcmVlVmlld2VyKXZpZXdlclBhbmUuZ2V0Vmlld2VyKCk7DQorCQkJCXBhcmVudFZpZXdlci5zZXRBdXRvRXhwYW5kTGV2ZWwoMzApOw0KKwkJCQlwYXJlbnRWaWV3ZXIuc2V0Q29udGVudFByb3ZpZGVyKG5ldyBSZXZlcnNlQWRhcHRlckZhY3RvcnlDb250ZW50UHJvdmlkZXIoYWRhcHRlckZhY3RvcnkpKTsNCisJCQkJcGFyZW50Vmlld2VyLnNldExhYmVsUHJvdmlkZXIobmV3IEFkYXB0ZXJGYWN0b3J5TGFiZWxQcm92aWRlcihhZGFwdGVyRmFjdG9yeSkpOw0KKw0KKwkJCQljcmVhdGVDb250ZXh0TWVudUZvcihwYXJlbnRWaWV3ZXIpOw0KKwkJCQlpbnQgcGFnZUluZGV4ID0gYWRkUGFnZSh2aWV3ZXJQYW5lLmdldENvbnRyb2woKSk7DQorCQkJCXNldFBhZ2VUZXh0KHBhZ2VJbmRleCwgZ2V0U3RyaW5nKCJfVUlfUGFyZW50UGFnZV9sYWJlbCIpKTsgLy8kTk9OLU5MUy0xJA0KKwkJCX0NCisNCisJCQkvLyBUaGlzIGlzIHRoZSBwYWdlIGZvciB0aGUgbGlzdCB2aWV3ZXINCisJCQkvLw0KKwkJCXsNCisJCQkJVmlld2VyUGFuZSB2aWV3ZXJQYW5lID0NCisJCQkJCW5ldyBWaWV3ZXJQYW5lKGdldFNpdGUoKS5nZXRQYWdlKCksIFNvbHZlckVkaXRvci50aGlzKSB7DQorCQkJCQkJQE92ZXJyaWRlDQorCQkJCQkJcHVibGljIFZpZXdlciBjcmVhdGVWaWV3ZXIoQ29tcG9zaXRlIGNvbXBvc2l0ZSkgew0KKwkJCQkJCQlyZXR1cm4gbmV3IExpc3RWaWV3ZXIoY29tcG9zaXRlKTsNCisJCQkJCQl9DQorCQkJCQkJQE92ZXJyaWRlDQorCQkJCQkJcHVibGljIHZvaWQgcmVxdWVzdEFjdGl2YXRpb24oKSB7DQorCQkJCQkJCXN1cGVyLnJlcXVlc3RBY3RpdmF0aW9uKCk7DQorCQkJCQkJCXNldEN1cnJlbnRWaWV3ZXJQYW5lKHRoaXMpOw0KKwkJCQkJCX0NCisJCQkJCX07DQorCQkJCXZpZXdlclBhbmUuY3JlYXRlQ29udHJvbChnZXRDb250YWluZXIoKSk7DQorCQkJCWxpc3RWaWV3ZXIgPSAoTGlzdFZpZXdlcil2aWV3ZXJQYW5lLmdldFZpZXdlcigpOw0KKwkJCQlsaXN0Vmlld2VyLnNldENvbnRlbnRQcm92aWRlcihuZXcgQWRhcHRlckZhY3RvcnlDb250ZW50UHJvdmlkZXIoYWRhcHRlckZhY3RvcnkpKTsNCisJCQkJbGlzdFZpZXdlci5zZXRMYWJlbFByb3ZpZGVyKG5ldyBBZGFwdGVyRmFjdG9yeUxhYmVsUHJvdmlkZXIoYWRhcHRlckZhY3RvcnkpKTsNCisNCisJCQkJY3JlYXRlQ29udGV4dE1lbnVGb3IobGlzdFZpZXdlcik7DQorCQkJCWludCBwYWdlSW5kZXggPSBhZGRQYWdlKHZpZXdlclBhbmUuZ2V0Q29udHJvbCgpKTsNCisJCQkJc2V0UGFnZVRleHQocGFnZUluZGV4LCBnZXRTdHJpbmcoIl9VSV9MaXN0UGFnZV9sYWJlbCIpKTsgLy8kTk9OLU5MUy0xJA0KKwkJCX0NCisNCisJCQkvLyBUaGlzIGlzIHRoZSBwYWdlIGZvciB0aGUgdHJlZSB2aWV3ZXINCisJCQkvLw0KKwkJCXsNCisJCQkJVmlld2VyUGFuZSB2aWV3ZXJQYW5lID0NCisJCQkJCW5ldyBWaWV3ZXJQYW5lKGdldFNpdGUoKS5nZXRQYWdlKCksIFNvbHZlckVkaXRvci50aGlzKSB7DQorCQkJCQkJQE92ZXJyaWRlDQorCQkJCQkJcHVibGljIFZpZXdlciBjcmVhdGVWaWV3ZXIoQ29tcG9zaXRlIGNvbXBvc2l0ZSkgew0KKwkJCQkJCQlyZXR1cm4gbmV3IFRyZWVWaWV3ZXIoY29tcG9zaXRlKTsNCisJCQkJCQl9DQorCQkJCQkJQE92ZXJyaWRlDQorCQkJCQkJcHVibGljIHZvaWQgcmVxdWVzdEFjdGl2YXRpb24oKSB7DQorCQkJCQkJCXN1cGVyLnJlcXVlc3RBY3RpdmF0aW9uKCk7DQorCQkJCQkJCXNldEN1cnJlbnRWaWV3ZXJQYW5lKHRoaXMpOw0KKwkJCQkJCX0NCisJCQkJCX07DQorCQkJCXZpZXdlclBhbmUuY3JlYXRlQ29udHJvbChnZXRDb250YWluZXIoKSk7DQorCQkJCXRyZWVWaWV3ZXIgPSAoVHJlZVZpZXdlcil2aWV3ZXJQYW5lLmdldFZpZXdlcigpOw0KKwkJCQl0cmVlVmlld2VyLnNldENvbnRlbnRQcm92aWRlcihuZXcgQWRhcHRlckZhY3RvcnlDb250ZW50UHJvdmlkZXIoYWRhcHRlckZhY3RvcnkpKTsNCisJCQkJdHJlZVZpZXdlci5zZXRMYWJlbFByb3ZpZGVyKG5ldyBBZGFwdGVyRmFjdG9yeUxhYmVsUHJvdmlkZXIoYWRhcHRlckZhY3RvcnkpKTsNCisNCisJCQkJbmV3IEFkYXB0ZXJGYWN0b3J5VHJlZUVkaXRvcih0cmVlVmlld2VyLmdldFRyZWUoKSwgYWRhcHRlckZhY3RvcnkpOw0KKw0KKwkJCQljcmVhdGVDb250ZXh0TWVudUZvcih0cmVlVmlld2VyKTsNCisJCQkJaW50IHBhZ2VJbmRleCA9IGFkZFBhZ2Uodmlld2VyUGFuZS5nZXRDb250cm9sKCkpOw0KKwkJCQlzZXRQYWdlVGV4dChwYWdlSW5kZXgsIGdldFN0cmluZygiX1VJX1RyZWVQYWdlX2xhYmVsIikpOyAvLyROT04tTkxTLTEkDQorCQkJfQ0KKw0KKwkJCS8vIFRoaXMgaXMgdGhlIHBhZ2UgZm9yIHRoZSB0YWJsZSB2aWV3ZXIuDQorCQkJLy8NCisJCQl7DQorCQkJCVZpZXdlclBhbmUgdmlld2VyUGFuZSA9DQorCQkJCQluZXcgVmlld2VyUGFuZShnZXRTaXRlKCkuZ2V0UGFnZSgpLCBTb2x2ZXJFZGl0b3IudGhpcykgew0KKwkJCQkJCUBPdmVycmlkZQ0KKwkJCQkJCXB1YmxpYyBWaWV3ZXIgY3JlYXRlVmlld2VyKENvbXBvc2l0ZSBjb21wb3NpdGUpIHsNCisJCQkJCQkJcmV0dXJuIG5ldyBUYWJsZVZpZXdlcihjb21wb3NpdGUpOw0KKwkJCQkJCX0NCisJCQkJCQlAT3ZlcnJpZGUNCisJCQkJCQlwdWJsaWMgdm9pZCByZXF1ZXN0QWN0aXZhdGlvbigpIHsNCisJCQkJCQkJc3VwZXIucmVxdWVzdEFjdGl2YXRpb24oKTsNCisJCQkJCQkJc2V0Q3VycmVudFZpZXdlclBhbmUodGhpcyk7DQorCQkJCQkJfQ0KKwkJCQkJfTsNCisJCQkJdmlld2VyUGFuZS5jcmVhdGVDb250cm9sKGdldENvbnRhaW5lcigpKTsNCisJCQkJdGFibGVWaWV3ZXIgPSAoVGFibGVWaWV3ZXIpdmlld2VyUGFuZS5nZXRWaWV3ZXIoKTsNCisNCisJCQkJVGFibGUgdGFibGUgPSB0YWJsZVZpZXdlci5nZXRUYWJsZSgpOw0KKwkJCQlUYWJsZUxheW91dCBsYXlvdXQgPSBuZXcgVGFibGVMYXlvdXQoKTsNCisJCQkJdGFibGUuc2V0TGF5b3V0KGxheW91dCk7DQorCQkJCXRhYmxlLnNldEhlYWRlclZpc2libGUodHJ1ZSk7DQorCQkJCXRhYmxlLnNldExpbmVzVmlzaWJsZSh0cnVlKTsNCisNCisJCQkJVGFibGVDb2x1bW4gb2JqZWN0Q29sdW1uID0gbmV3IFRhYmxlQ29sdW1uKHRhYmxlLCBTV1QuTk9ORSk7DQorCQkJCWxheW91dC5hZGRDb2x1bW5EYXRhKG5ldyBDb2x1bW5XZWlnaHREYXRhKDMsIDEwMCwgdHJ1ZSkpOw0KKwkJCQlvYmplY3RDb2x1bW4uc2V0VGV4dChnZXRTdHJpbmcoIl9VSV9PYmplY3RDb2x1bW5fbGFiZWwiKSk7IC8vJE5PTi1OTFMtMSQNCisJCQkJb2JqZWN0Q29sdW1uLnNldFJlc2l6YWJsZSh0cnVlKTsNCisNCisJCQkJVGFibGVDb2x1bW4gc2VsZkNvbHVtbiA9IG5ldyBUYWJsZUNvbHVtbih0YWJsZSwgU1dULk5PTkUpOw0KKwkJCQlsYXlvdXQuYWRkQ29sdW1uRGF0YShuZXcgQ29sdW1uV2VpZ2h0RGF0YSgyLCAxMDAsIHRydWUpKTsNCisJCQkJc2VsZkNvbHVtbi5zZXRUZXh0KGdldFN0cmluZygiX1VJX1NlbGZDb2x1bW5fbGFiZWwiKSk7IC8vJE5PTi1OTFMtMSQNCisJCQkJc2VsZkNvbHVtbi5zZXRSZXNpemFibGUodHJ1ZSk7DQorDQorCQkJCXRhYmxlVmlld2VyLnNldENvbHVtblByb3BlcnRpZXMobmV3IFN0cmluZyBbXSB7ImEiLCAiYiJ9KTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkDQorCQkJCXRhYmxlVmlld2VyLnNldENvbnRlbnRQcm92aWRlcihuZXcgQWRhcHRlckZhY3RvcnlDb250ZW50UHJvdmlkZXIoYWRhcHRlckZhY3RvcnkpKTsNCisJCQkJdGFibGVWaWV3ZXIuc2V0TGFiZWxQcm92aWRlcihuZXcgQWRhcHRlckZhY3RvcnlMYWJlbFByb3ZpZGVyKGFkYXB0ZXJGYWN0b3J5KSk7DQorDQorCQkJCWNyZWF0ZUNvbnRleHRNZW51Rm9yKHRhYmxlVmlld2VyKTsNCisJCQkJaW50IHBhZ2VJbmRleCA9IGFkZFBhZ2Uodmlld2VyUGFuZS5nZXRDb250cm9sKCkpOw0KKwkJCQlzZXRQYWdlVGV4dChwYWdlSW5kZXgsIGdldFN0cmluZygiX1VJX1RhYmxlUGFnZV9sYWJlbCIpKTsgLy8kTk9OLU5MUy0xJA0KKwkJCX0NCisNCisJCQkvLyBUaGlzIGlzIHRoZSBwYWdlIGZvciB0aGUgdGFibGUgdHJlZSB2aWV3ZXIuDQorCQkJLy8NCisJCQl7DQorCQkJCVZpZXdlclBhbmUgdmlld2VyUGFuZSA9DQorCQkJCQluZXcgVmlld2VyUGFuZShnZXRTaXRlKCkuZ2V0UGFnZSgpLCBTb2x2ZXJFZGl0b3IudGhpcykgew0KKwkJCQkJCUBPdmVycmlkZQ0KKwkJCQkJCXB1YmxpYyBWaWV3ZXIgY3JlYXRlVmlld2VyKENvbXBvc2l0ZSBjb21wb3NpdGUpIHsNCisJCQkJCQkJcmV0dXJuIG5ldyBUcmVlVmlld2VyKGNvbXBvc2l0ZSk7DQorCQkJCQkJfQ0KKwkJCQkJCUBPdmVycmlkZQ0KKwkJCQkJCXB1YmxpYyB2b2lkIHJlcXVlc3RBY3RpdmF0aW9uKCkgew0KKwkJCQkJCQlzdXBlci5yZXF1ZXN0QWN0aXZhdGlvbigpOw0KKwkJCQkJCQlzZXRDdXJyZW50Vmlld2VyUGFuZSh0aGlzKTsNCisJCQkJCQl9DQorCQkJCQl9Ow0KKwkJCQl2aWV3ZXJQYW5lLmNyZWF0ZUNvbnRyb2woZ2V0Q29udGFpbmVyKCkpOw0KKw0KKwkJCQl0cmVlVmlld2VyV2l0aENvbHVtbnMgPSAoVHJlZVZpZXdlcil2aWV3ZXJQYW5lLmdldFZpZXdlcigpOw0KKw0KKwkJCQlUcmVlIHRyZWUgPSB0cmVlVmlld2VyV2l0aENvbHVtbnMuZ2V0VHJlZSgpOw0KKwkJCQl0cmVlLnNldExheW91dERhdGEobmV3IEZpbGxMYXlvdXQoKSk7DQorCQkJCXRyZWUuc2V0SGVhZGVyVmlzaWJsZSh0cnVlKTsNCisJCQkJdHJlZS5zZXRMaW5lc1Zpc2libGUodHJ1ZSk7DQorDQorCQkJCVRyZWVDb2x1bW4gb2JqZWN0Q29sdW1uID0gbmV3IFRyZWVDb2x1bW4odHJlZSwgU1dULk5PTkUpOw0KKwkJCQlvYmplY3RDb2x1bW4uc2V0VGV4dChnZXRTdHJpbmcoIl9VSV9PYmplY3RDb2x1bW5fbGFiZWwiKSk7IC8vJE5PTi1OTFMtMSQNCisJCQkJb2JqZWN0Q29sdW1uLnNldFJlc2l6YWJsZSh0cnVlKTsNCisJCQkJb2JqZWN0Q29sdW1uLnNldFdpZHRoKDI1MCk7DQorDQorCQkJCVRyZWVDb2x1bW4gc2VsZkNvbHVtbiA9IG5ldyBUcmVlQ29sdW1uKHRyZWUsIFNXVC5OT05FKTsNCisJCQkJc2VsZkNvbHVtbi5zZXRUZXh0KGdldFN0cmluZygiX1VJX1NlbGZDb2x1bW5fbGFiZWwiKSk7IC8vJE5PTi1OTFMtMSQNCisJCQkJc2VsZkNvbHVtbi5zZXRSZXNpemFibGUodHJ1ZSk7DQorCQkJCXNlbGZDb2x1bW4uc2V0V2lkdGgoMjAwKTsNCisNCisJCQkJdHJlZVZpZXdlcldpdGhDb2x1bW5zLnNldENvbHVtblByb3BlcnRpZXMobmV3IFN0cmluZyBbXSB7ImEiLCAiYiJ9KTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkDQorCQkJCXRyZWVWaWV3ZXJXaXRoQ29sdW1ucy5zZXRDb250ZW50UHJvdmlkZXIobmV3IEFkYXB0ZXJGYWN0b3J5Q29udGVudFByb3ZpZGVyKGFkYXB0ZXJGYWN0b3J5KSk7DQorCQkJCXRyZWVWaWV3ZXJXaXRoQ29sdW1ucy5zZXRMYWJlbFByb3ZpZGVyKG5ldyBBZGFwdGVyRmFjdG9yeUxhYmVsUHJvdmlkZXIoYWRhcHRlckZhY3RvcnkpKTsNCisNCisJCQkJY3JlYXRlQ29udGV4dE1lbnVGb3IodHJlZVZpZXdlcldpdGhDb2x1bW5zKTsNCisJCQkJaW50IHBhZ2VJbmRleCA9IGFkZFBhZ2Uodmlld2VyUGFuZS5nZXRDb250cm9sKCkpOw0KKwkJCQlzZXRQYWdlVGV4dChwYWdlSW5kZXgsIGdldFN0cmluZygiX1VJX1RyZWVXaXRoQ29sdW1uc1BhZ2VfbGFiZWwiKSk7IC8vJE5PTi1OTFMtMSQNCisJCQl9DQorDQorCQkJZ2V0U2l0ZSgpLmdldFNoZWxsKCkuZ2V0RGlzcGxheSgpLmFzeW5jRXhlYw0KKwkJCQkobmV3IFJ1bm5hYmxlKCkgew0KKwkJCQkJIHB1YmxpYyB2b2lkIHJ1bigpIHsNCisJCQkJCQkgc2V0QWN0aXZlUGFnZSgwKTsNCisJCQkJCSB9DQorCQkJCSB9KTsNCisJCX0NCisNCisJCS8vIEVuc3VyZXMgdGhhdCB0aGlzIGVkaXRvciB3aWxsIG9ubHkgZGlzcGxheSB0aGUgcGFnZSdzIHRhYg0KKwkJLy8gYXJlYSBpZiB0aGVyZSBhcmUgbW9yZSB0aGFuIG9uZSBwYWdlDQorCQkvLw0KKwkJZ2V0Q29udGFpbmVyKCkuYWRkQ29udHJvbExpc3RlbmVyDQorCQkJKG5ldyBDb250cm9sQWRhcHRlcigpIHsNCisJCQkJYm9vbGVhbiBndWFyZCA9IGZhbHNlOw0KKwkJCQlAT3ZlcnJpZGUNCisJCQkJcHVibGljIHZvaWQgY29udHJvbFJlc2l6ZWQoQ29udHJvbEV2ZW50IGV2ZW50KSB7DQorCQkJCQlpZiAoIWd1YXJkKSB7DQorCQkJCQkJZ3VhcmQgPSB0cnVlOw0KKwkJCQkJCWhpZGVUYWJzKCk7DQorCQkJCQkJZ3VhcmQgPSBmYWxzZTsNCisJCQkJCX0NCisJCQkJfQ0KKwkJCSB9KTsNCisNCisJCWdldFNpdGUoKS5nZXRTaGVsbCgpLmdldERpc3BsYXkoKS5hc3luY0V4ZWMNCisJCQkobmV3IFJ1bm5hYmxlKCkgew0KKwkJCQkgcHVibGljIHZvaWQgcnVuKCkgew0KKwkJCQkJIHVwZGF0ZVByb2JsZW1JbmRpY2F0aW9uKCk7DQorCQkJCSB9DQorCQkJIH0pOw0KKwl9DQorDQorCS8qKg0KKwkgKiBJZiB0aGVyZSBpcyBqdXN0IG9uZSBwYWdlIGluIHRoZSBtdWx0aS1wYWdlIGVkaXRvciBwYXJ0LA0KKwkgKiB0aGlzIGhpZGVzIHRoZSBzaW5nbGUgdGFiIGF0IHRoZSBib3R0b20uDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgdm9pZCBoaWRlVGFicygpIHsNCisJCWlmIChnZXRQYWdlQ291bnQoKSA8PSAxKSB7DQorCQkJc2V0UGFnZVRleHQoMCwgIiIpOyAvLyROT04tTkxTLTEkDQorCQkJaWYgKGdldENvbnRhaW5lcigpIGluc3RhbmNlb2YgQ1RhYkZvbGRlcikgew0KKwkJCQkoKENUYWJGb2xkZXIpZ2V0Q29udGFpbmVyKCkpLnNldFRhYkhlaWdodCgxKTsNCisJCQkJUG9pbnQgcG9pbnQgPSBnZXRDb250YWluZXIoKS5nZXRTaXplKCk7DQorCQkJCWdldENvbnRhaW5lcigpLnNldFNpemUocG9pbnQueCwgcG9pbnQueSArIDYpOw0KKwkJCX0NCisJCX0NCisJfQ0KKw0KKwkvKioNCisJICogSWYgdGhlcmUgaXMgbW9yZSB0aGFuIG9uZSBwYWdlIGluIHRoZSBtdWx0aS1wYWdlIGVkaXRvciBwYXJ0LA0KKwkgKiB0aGlzIHNob3dzIHRoZSB0YWJzIGF0IHRoZSBib3R0b20uDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgdm9pZCBzaG93VGFicygpIHsNCisJCWlmIChnZXRQYWdlQ291bnQoKSA+IDEpIHsNCisJCQlzZXRQYWdlVGV4dCgwLCBnZXRTdHJpbmcoIl9VSV9TZWxlY3Rpb25QYWdlX2xhYmVsIikpOyAvLyROT04tTkxTLTEkDQorCQkJaWYgKGdldENvbnRhaW5lcigpIGluc3RhbmNlb2YgQ1RhYkZvbGRlcikgew0KKwkJCQkoKENUYWJGb2xkZXIpZ2V0Q29udGFpbmVyKCkpLnNldFRhYkhlaWdodChTV1QuREVGQVVMVCk7DQorCQkJCVBvaW50IHBvaW50ID0gZ2V0Q29udGFpbmVyKCkuZ2V0U2l6ZSgpOw0KKwkJCQlnZXRDb250YWluZXIoKS5zZXRTaXplKHBvaW50LngsIHBvaW50LnkgLSA2KTsNCisJCQl9DQorCQl9DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgaXMgdXNlZCB0byB0cmFjayB0aGUgYWN0aXZlIHZpZXdlci4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCUBPdmVycmlkZQ0KKwlwcm90ZWN0ZWQgdm9pZCBwYWdlQ2hhbmdlKGludCBwYWdlSW5kZXgpIHsNCisJCXN1cGVyLnBhZ2VDaGFuZ2UocGFnZUluZGV4KTsNCisNCisJCWlmIChjb250ZW50T3V0bGluZVBhZ2UgIT0gbnVsbCkgew0KKwkJCWhhbmRsZUNvbnRlbnRPdXRsaW5lU2VsZWN0aW9uKGNvbnRlbnRPdXRsaW5lUGFnZS5nZXRTZWxlY3Rpb24oKSk7DQorCQl9DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgaXMgaG93IHRoZSBmcmFtZXdvcmsgZGV0ZXJtaW5lcyB3aGljaCBpbnRlcmZhY2VzIHdlIGltcGxlbWVudC4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCUBTdXBwcmVzc1dhcm5pbmdzKCJ1bmNoZWNrZWQiKQ0KKwlAT3ZlcnJpZGUNCisJcHVibGljIE9iamVjdCBnZXRBZGFwdGVyKENsYXNzIGtleSkgew0KKwkJaWYgKGtleS5lcXVhbHMoSUNvbnRlbnRPdXRsaW5lUGFnZS5jbGFzcykpIHsNCisJCQlyZXR1cm4gc2hvd091dGxpbmVWaWV3KCkgPyBnZXRDb250ZW50T3V0bGluZVBhZ2UoKSA6IG51bGw7DQorCQl9DQorCQllbHNlIGlmIChrZXkuZXF1YWxzKElQcm9wZXJ0eVNoZWV0UGFnZS5jbGFzcykpIHsNCisJCQlyZXR1cm4gZ2V0UHJvcGVydHlTaGVldFBhZ2UoKTsNCisJCX0NCisJCWVsc2UgaWYgKGtleS5lcXVhbHMoSUdvdG9NYXJrZXIuY2xhc3MpKSB7DQorCQkJcmV0dXJuIHRoaXM7DQorCQl9DQorCQllbHNlIHsNCisJCQlyZXR1cm4gc3VwZXIuZ2V0QWRhcHRlcihrZXkpOw0KKwkJfQ0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIGFjY2Vzc2VzIGEgY2FjaGVkIHZlcnNpb24gb2YgdGhlIGNvbnRlbnQgb3V0bGluZXIuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgSUNvbnRlbnRPdXRsaW5lUGFnZSBnZXRDb250ZW50T3V0bGluZVBhZ2UoKSB7DQorCQlpZiAoY29udGVudE91dGxpbmVQYWdlID09IG51bGwpIHsNCisJCQkvLyBUaGUgY29udGVudCBvdXRsaW5lIGlzIGp1c3QgYSB0cmVlLg0KKwkJCS8vDQorCQkJY2xhc3MgTXlDb250ZW50T3V0bGluZVBhZ2UgZXh0ZW5kcyBDb250ZW50T3V0bGluZVBhZ2Ugew0KKwkJCQlAT3ZlcnJpZGUNCisJCQkJcHVibGljIHZvaWQgY3JlYXRlQ29udHJvbChDb21wb3NpdGUgcGFyZW50KSB7DQorCQkJCQlzdXBlci5jcmVhdGVDb250cm9sKHBhcmVudCk7DQorCQkJCQljb250ZW50T3V0bGluZVZpZXdlciA9IGdldFRyZWVWaWV3ZXIoKTsNCisJCQkJCWNvbnRlbnRPdXRsaW5lVmlld2VyLmFkZFNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcih0aGlzKTsNCisNCisJCQkJCS8vIFNldCB1cCB0aGUgdHJlZSB2aWV3ZXIuDQorCQkJCQkvLw0KKwkJCQkJY29udGVudE91dGxpbmVWaWV3ZXIuc2V0Q29udGVudFByb3ZpZGVyKG5ldyBBZGFwdGVyRmFjdG9yeUNvbnRlbnRQcm92aWRlcihhZGFwdGVyRmFjdG9yeSkpOw0KKwkJCQkJY29udGVudE91dGxpbmVWaWV3ZXIuc2V0TGFiZWxQcm92aWRlcihuZXcgQWRhcHRlckZhY3RvcnlMYWJlbFByb3ZpZGVyKGFkYXB0ZXJGYWN0b3J5KSk7DQorCQkJCQljb250ZW50T3V0bGluZVZpZXdlci5zZXRJbnB1dChlZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkpOw0KKw0KKwkJCQkJLy8gTWFrZSBzdXJlIG91ciBwb3B1cHMgd29yay4NCisJCQkJCS8vDQorCQkJCQljcmVhdGVDb250ZXh0TWVudUZvcihjb250ZW50T3V0bGluZVZpZXdlcik7DQorDQorCQkJCQlpZiAoIWVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKS5nZXRSZXNvdXJjZXMoKS5pc0VtcHR5KCkpIHsNCisJCQkJCSAgLy8gU2VsZWN0IHRoZSByb290IG9iamVjdCBpbiB0aGUgdmlldy4NCisJCQkJCSAgLy8NCisJCQkJCSAgY29udGVudE91dGxpbmVWaWV3ZXIuc2V0U2VsZWN0aW9uKG5ldyBTdHJ1Y3R1cmVkU2VsZWN0aW9uKGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKS5nZXRSZXNvdXJjZXMoKS5nZXQoMCkpLCB0cnVlKTsNCisJCQkJCX0NCisJCQkJfQ0KKw0KKwkJCQlAT3ZlcnJpZGUNCisJCQkJcHVibGljIHZvaWQgbWFrZUNvbnRyaWJ1dGlvbnMoSU1lbnVNYW5hZ2VyIG1lbnVNYW5hZ2VyLCBJVG9vbEJhck1hbmFnZXIgdG9vbEJhck1hbmFnZXIsIElTdGF0dXNMaW5lTWFuYWdlciBzdGF0dXNMaW5lTWFuYWdlcikgew0KKwkJCQkJc3VwZXIubWFrZUNvbnRyaWJ1dGlvbnMobWVudU1hbmFnZXIsIHRvb2xCYXJNYW5hZ2VyLCBzdGF0dXNMaW5lTWFuYWdlcik7DQorCQkJCQljb250ZW50T3V0bGluZVN0YXR1c0xpbmVNYW5hZ2VyID0gc3RhdHVzTGluZU1hbmFnZXI7DQorCQkJCX0NCisNCisJCQkJQE92ZXJyaWRlDQorCQkJCXB1YmxpYyB2b2lkIHNldEFjdGlvbkJhcnMoSUFjdGlvbkJhcnMgYWN0aW9uQmFycykgew0KKwkJCQkJc3VwZXIuc2V0QWN0aW9uQmFycyhhY3Rpb25CYXJzKTsNCisJCQkJCWdldEFjdGlvbkJhckNvbnRyaWJ1dG9yKCkuc2hhcmVHbG9iYWxBY3Rpb25zKHRoaXMsIGFjdGlvbkJhcnMpOw0KKwkJCQl9DQorCQkJfQ0KKw0KKwkJCWNvbnRlbnRPdXRsaW5lUGFnZSA9IG5ldyBNeUNvbnRlbnRPdXRsaW5lUGFnZSgpOw0KKw0KKwkJCS8vIExpc3RlbiB0byBzZWxlY3Rpb24gc28gdGhhdCB3ZSBjYW4gaGFuZGxlIGl0IGlzIGEgc3BlY2lhbCB3YXkuDQorCQkJLy8NCisJCQljb250ZW50T3V0bGluZVBhZ2UuYWRkU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyDQorCQkJCShuZXcgSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcigpIHsNCisJCQkJCSAvLyBUaGlzIGVuc3VyZXMgdGhhdCB3ZSBoYW5kbGUgc2VsZWN0aW9ucyBjb3JyZWN0bHkuDQorCQkJCQkgLy8NCisJCQkJCSBwdWJsaWMgdm9pZCBzZWxlY3Rpb25DaGFuZ2VkKFNlbGVjdGlvbkNoYW5nZWRFdmVudCBldmVudCkgew0KKwkJCQkJCSBoYW5kbGVDb250ZW50T3V0bGluZVNlbGVjdGlvbihldmVudC5nZXRTZWxlY3Rpb24oKSk7DQorCQkJCQkgfQ0KKwkJCQkgfSk7DQorCQl9DQorDQorCQlyZXR1cm4gY29udGVudE91dGxpbmVQYWdlOw0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIGFjY2Vzc2VzIGEgY2FjaGVkIHZlcnNpb24gb2YgdGhlIHByb3BlcnR5IHNoZWV0Lg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIElQcm9wZXJ0eVNoZWV0UGFnZSBnZXRQcm9wZXJ0eVNoZWV0UGFnZSgpIHsNCisJCWlmIChwcm9wZXJ0eVNoZWV0UGFnZSA9PSBudWxsKSB7DQorCQkJcHJvcGVydHlTaGVldFBhZ2UgPQ0KKwkJCQluZXcgRXh0ZW5kZWRQcm9wZXJ0eVNoZWV0UGFnZShlZGl0aW5nRG9tYWluKSB7DQorCQkJCQlAT3ZlcnJpZGUNCisJCQkJCXB1YmxpYyB2b2lkIHNldFNlbGVjdGlvblRvVmlld2VyKExpc3Q8Pz4gc2VsZWN0aW9uKSB7DQorCQkJCQkJU29sdmVyRWRpdG9yLnRoaXMuc2V0U2VsZWN0aW9uVG9WaWV3ZXIoc2VsZWN0aW9uKTsNCisJCQkJCQlTb2x2ZXJFZGl0b3IudGhpcy5zZXRGb2N1cygpOw0KKwkJCQkJfQ0KKw0KKwkJCQkJQE92ZXJyaWRlDQorCQkJCQlwdWJsaWMgdm9pZCBzZXRBY3Rpb25CYXJzKElBY3Rpb25CYXJzIGFjdGlvbkJhcnMpIHsNCisJCQkJCQlzdXBlci5zZXRBY3Rpb25CYXJzKGFjdGlvbkJhcnMpOw0KKwkJCQkJCWdldEFjdGlvbkJhckNvbnRyaWJ1dG9yKCkuc2hhcmVHbG9iYWxBY3Rpb25zKHRoaXMsIGFjdGlvbkJhcnMpOw0KKwkJCQkJfQ0KKwkJCQl9Ow0KKwkJCXByb3BlcnR5U2hlZXRQYWdlLnNldFByb3BlcnR5U291cmNlUHJvdmlkZXIobmV3IEFkYXB0ZXJGYWN0b3J5Q29udGVudFByb3ZpZGVyKGFkYXB0ZXJGYWN0b3J5KSk7DQorCQl9DQorDQorCQlyZXR1cm4gcHJvcGVydHlTaGVldFBhZ2U7DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgZGVhbHMgd2l0aCBob3cgd2Ugd2FudCBzZWxlY3Rpb24gaW4gdGhlIG91dGxpbmVyIHRvIGFmZmVjdCB0aGUgb3RoZXIgdmlld3MuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgdm9pZCBoYW5kbGVDb250ZW50T3V0bGluZVNlbGVjdGlvbihJU2VsZWN0aW9uIHNlbGVjdGlvbikgew0KKwkJaWYgKGN1cnJlbnRWaWV3ZXJQYW5lICE9IG51bGwgJiYgIXNlbGVjdGlvbi5pc0VtcHR5KCkgJiYgc2VsZWN0aW9uIGluc3RhbmNlb2YgSVN0cnVjdHVyZWRTZWxlY3Rpb24pIHsNCisJCQlJdGVyYXRvcjw/PiBzZWxlY3RlZEVsZW1lbnRzID0gKChJU3RydWN0dXJlZFNlbGVjdGlvbilzZWxlY3Rpb24pLml0ZXJhdG9yKCk7DQorCQkJaWYgKHNlbGVjdGVkRWxlbWVudHMuaGFzTmV4dCgpKSB7DQorCQkJCS8vIEdldCB0aGUgZmlyc3Qgc2VsZWN0ZWQgZWxlbWVudC4NCisJCQkJLy8NCisJCQkJT2JqZWN0IHNlbGVjdGVkRWxlbWVudCA9IHNlbGVjdGVkRWxlbWVudHMubmV4dCgpOw0KKw0KKwkJCQkvLyBJZiBpdCdzIHRoZSBzZWxlY3Rpb24gdmlld2VyLCB0aGVuIHdlIHdhbnQgaXQgdG8gc2VsZWN0IHRoZSBzYW1lIHNlbGVjdGlvbiBhcyB0aGlzIHNlbGVjdGlvbi4NCisJCQkJLy8NCisJCQkJaWYgKGN1cnJlbnRWaWV3ZXJQYW5lLmdldFZpZXdlcigpID09IHNlbGVjdGlvblZpZXdlcikgew0KKwkJCQkJQXJyYXlMaXN0PE9iamVjdD4gc2VsZWN0aW9uTGlzdCA9IG5ldyBBcnJheUxpc3Q8T2JqZWN0PigpOw0KKwkJCQkJc2VsZWN0aW9uTGlzdC5hZGQoc2VsZWN0ZWRFbGVtZW50KTsNCisJCQkJCXdoaWxlIChzZWxlY3RlZEVsZW1lbnRzLmhhc05leHQoKSkgew0KKwkJCQkJCXNlbGVjdGlvbkxpc3QuYWRkKHNlbGVjdGVkRWxlbWVudHMubmV4dCgpKTsNCisJCQkJCX0NCisNCisJCQkJCS8vIFNldCB0aGUgc2VsZWN0aW9uIHRvIHRoZSB3aWRnZXQuDQorCQkJCQkvLw0KKwkJCQkJc2VsZWN0aW9uVmlld2VyLnNldFNlbGVjdGlvbihuZXcgU3RydWN0dXJlZFNlbGVjdGlvbihzZWxlY3Rpb25MaXN0KSk7DQorCQkJCX0NCisJCQkJZWxzZSB7DQorCQkJCQkvLyBTZXQgdGhlIGlucHV0IHRvIHRoZSB3aWRnZXQuDQorCQkJCQkvLw0KKwkJCQkJaWYgKGN1cnJlbnRWaWV3ZXJQYW5lLmdldFZpZXdlcigpLmdldElucHV0KCkgIT0gc2VsZWN0ZWRFbGVtZW50KSB7DQorCQkJCQkJY3VycmVudFZpZXdlclBhbmUuZ2V0Vmlld2VyKCkuc2V0SW5wdXQoc2VsZWN0ZWRFbGVtZW50KTsNCisJCQkJCQljdXJyZW50Vmlld2VyUGFuZS5zZXRUaXRsZShzZWxlY3RlZEVsZW1lbnQpOw0KKwkJCQkJfQ0KKwkJCQl9DQorCQkJfQ0KKwkJfQ0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIGlzIGZvciBpbXBsZW1lbnRpbmcge0BsaW5rIElFZGl0b3JQYXJ0fSBhbmQgc2ltcGx5IHRlc3RzIHRoZSBjb21tYW5kIHN0YWNrLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJQE92ZXJyaWRlDQorCXB1YmxpYyBib29sZWFuIGlzRGlydHkoKSB7DQorCQlyZXR1cm4gKChCYXNpY0NvbW1hbmRTdGFjayllZGl0aW5nRG9tYWluLmdldENvbW1hbmRTdGFjaygpKS5pc1NhdmVOZWVkZWQoKTsNCisJfQ0KKw0KKwkvKioNCisJICogVGhpcyBpcyBmb3IgaW1wbGVtZW50aW5nIHtAbGluayBJRWRpdG9yUGFydH0gYW5kIHNpbXBseSBzYXZlcyB0aGUgbW9kZWwgZmlsZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCUBPdmVycmlkZQ0KKwlwdWJsaWMgdm9pZCBkb1NhdmUoSVByb2dyZXNzTW9uaXRvciBwcm9ncmVzc01vbml0b3IpIHsNCisJCS8vIFNhdmUgb25seSByZXNvdXJjZXMgdGhhdCBoYXZlIGFjdHVhbGx5IGNoYW5nZWQuDQorCQkvLw0KKwkJZmluYWwgTWFwPE9iamVjdCwgT2JqZWN0PiBzYXZlT3B0aW9ucyA9IG5ldyBIYXNoTWFwPE9iamVjdCwgT2JqZWN0PigpOw0KKwkJc2F2ZU9wdGlvbnMucHV0KFJlc291cmNlLk9QVElPTl9TQVZFX09OTFlfSUZfQ0hBTkdFRCwgUmVzb3VyY2UuT1BUSU9OX1NBVkVfT05MWV9JRl9DSEFOR0VEX01FTU9SWV9CVUZGRVIpOw0KKw0KKwkJLy8gRG8gdGhlIHdvcmsgd2l0aGluIGFuIG9wZXJhdGlvbiBiZWNhdXNlIHRoaXMgaXMgYSBsb25nIHJ1bm5pbmcgYWN0aXZpdHkgdGhhdCBtb2RpZmllcyB0aGUgd29ya2JlbmNoLg0KKwkJLy8NCisJCVdvcmtzcGFjZU1vZGlmeU9wZXJhdGlvbiBvcGVyYXRpb24gPQ0KKwkJCW5ldyBXb3Jrc3BhY2VNb2RpZnlPcGVyYXRpb24oKSB7DQorCQkJCS8vIFRoaXMgaXMgdGhlIG1ldGhvZCB0aGF0IGdldHMgaW52b2tlZCB3aGVuIHRoZSBvcGVyYXRpb24gcnVucy4NCisJCQkJLy8NCisJCQkJQE92ZXJyaWRlDQorCQkJCXB1YmxpYyB2b2lkIGV4ZWN1dGUoSVByb2dyZXNzTW9uaXRvciBtb25pdG9yKSB7DQorCQkJCQkvLyBTYXZlIHRoZSByZXNvdXJjZXMgdG8gdGhlIGZpbGUgc3lzdGVtLg0KKwkJCQkJLy8NCisJCQkJCWJvb2xlYW4gZmlyc3QgPSB0cnVlOw0KKwkJCQkJZm9yIChSZXNvdXJjZSByZXNvdXJjZSA6IGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKS5nZXRSZXNvdXJjZXMoKSkgew0KKwkJCQkJCWlmICgoZmlyc3QgfHwgIXJlc291cmNlLmdldENvbnRlbnRzKCkuaXNFbXB0eSgpIHx8IGlzUGVyc2lzdGVkKHJlc291cmNlKSkgJiYgIWVkaXRpbmdEb21haW4uaXNSZWFkT25seShyZXNvdXJjZSkpIHsNCisJCQkJCQkJdHJ5IHsNCisJCQkJCQkJCWxvbmcgdGltZVN0YW1wID0gcmVzb3VyY2UuZ2V0VGltZVN0YW1wKCk7DQorCQkJCQkJCQlyZXNvdXJjZS5zYXZlKHNhdmVPcHRpb25zKTsNCisJCQkJCQkJCWlmIChyZXNvdXJjZS5nZXRUaW1lU3RhbXAoKSAhPSB0aW1lU3RhbXApIHsNCisJCQkJCQkJCQlzYXZlZFJlc291cmNlcy5hZGQocmVzb3VyY2UpOw0KKwkJCQkJCQkJfQ0KKwkJCQkJCQl9DQorCQkJCQkJCWNhdGNoIChFeGNlcHRpb24gZXhjZXB0aW9uKSB7DQorCQkJCQkJCQlyZXNvdXJjZVRvRGlhZ25vc3RpY01hcC5wdXQocmVzb3VyY2UsIGFuYWx5emVSZXNvdXJjZVByb2JsZW1zKHJlc291cmNlLCBleGNlcHRpb24pKTsNCisJCQkJCQkJfQ0KKwkJCQkJCQlmaXJzdCA9IGZhbHNlOw0KKwkJCQkJCX0NCisJCQkJCX0NCisJCQkJfQ0KKwkJCX07DQorDQorCQl1cGRhdGVQcm9ibGVtSW5kaWNhdGlvbiA9IGZhbHNlOw0KKwkJdHJ5IHsNCisJCQkvLyBUaGlzIHJ1bnMgdGhlIG9wdGlvbnMsIGFuZCBzaG93cyBwcm9ncmVzcy4NCisJCQkvLw0KKwkJCW5ldyBQcm9ncmVzc01vbml0b3JEaWFsb2coZ2V0U2l0ZSgpLmdldFNoZWxsKCkpLnJ1bih0cnVlLCBmYWxzZSwgb3BlcmF0aW9uKTsNCisNCisJCQkvLyBSZWZyZXNoIHRoZSBuZWNlc3Nhcnkgc3RhdGUuDQorCQkJLy8NCisJCQkoKEJhc2ljQ29tbWFuZFN0YWNrKWVkaXRpbmdEb21haW4uZ2V0Q29tbWFuZFN0YWNrKCkpLnNhdmVJc0RvbmUoKTsNCisJCQlmaXJlUHJvcGVydHlDaGFuZ2UoSUVkaXRvclBhcnQuUFJPUF9ESVJUWSk7DQorCQl9DQorCQljYXRjaCAoRXhjZXB0aW9uIGV4Y2VwdGlvbikgew0KKwkJCS8vIFNvbWV0aGluZyB3ZW50IHdyb25nIHRoYXQgc2hvdWxkbid0Lg0KKwkJCS8vDQorCQkJQ29yZUVkaXRvclBsdWdpbi5JTlNUQU5DRS5sb2coZXhjZXB0aW9uKTsNCisJCX0NCisJCXVwZGF0ZVByb2JsZW1JbmRpY2F0aW9uID0gdHJ1ZTsNCisJCXVwZGF0ZVByb2JsZW1JbmRpY2F0aW9uKCk7DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgcmV0dXJucyB3aGV0aGVyIHNvbWV0aGluZyBoYXMgYmVlbiBwZXJzaXN0ZWQgdG8gdGhlIFVSSSBvZiB0aGUgc3BlY2lmaWVkIHJlc291cmNlLg0KKwkgKiBUaGUgaW1wbGVtZW50YXRpb24gdXNlcyB0aGUgVVJJIGNvbnZlcnRlciBmcm9tIHRoZSBlZGl0b3IncyByZXNvdXJjZSBzZXQgdG8gdHJ5IHRvIG9wZW4gYW4gaW5wdXQgc3RyZWFtLiANCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCBib29sZWFuIGlzUGVyc2lzdGVkKFJlc291cmNlIHJlc291cmNlKSB7DQorCQlib29sZWFuIHJlc3VsdCA9IGZhbHNlOw0KKwkJdHJ5IHsNCisJCQlJbnB1dFN0cmVhbSBzdHJlYW0gPSBlZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkuZ2V0VVJJQ29udmVydGVyKCkuY3JlYXRlSW5wdXRTdHJlYW0ocmVzb3VyY2UuZ2V0VVJJKCkpOw0KKwkJCWlmIChzdHJlYW0gIT0gbnVsbCkgew0KKwkJCQlyZXN1bHQgPSB0cnVlOw0KKwkJCQlzdHJlYW0uY2xvc2UoKTsNCisJCQl9DQorCQl9DQorCQljYXRjaCAoSU9FeGNlcHRpb24gZSkgew0KKwkJCS8vIElnbm9yZQ0KKwkJfQ0KKwkJcmV0dXJuIHJlc3VsdDsNCisJfQ0KKw0KKwkvKioNCisJICogVGhpcyBhbHdheXMgcmV0dXJucyB0cnVlIGJlY2F1c2UgaXQgaXMgbm90IGN1cnJlbnRseSBzdXBwb3J0ZWQuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlAT3ZlcnJpZGUNCisJcHVibGljIGJvb2xlYW4gaXNTYXZlQXNBbGxvd2VkKCkgew0KKwkJcmV0dXJuIHRydWU7DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgYWxzbyBjaGFuZ2VzIHRoZSBlZGl0b3IncyBpbnB1dC4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCUBPdmVycmlkZQ0KKwlwdWJsaWMgdm9pZCBkb1NhdmVBcygpIHsNCisJCVNhdmVBc0RpYWxvZyBzYXZlQXNEaWFsb2cgPSBuZXcgU2F2ZUFzRGlhbG9nKGdldFNpdGUoKS5nZXRTaGVsbCgpKTsNCisJCXNhdmVBc0RpYWxvZy5vcGVuKCk7DQorCQlJUGF0aCBwYXRoID0gc2F2ZUFzRGlhbG9nLmdldFJlc3VsdCgpOw0KKwkJaWYgKHBhdGggIT0gbnVsbCkgew0KKwkJCUlGaWxlIGZpbGUgPSBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuZ2V0Um9vdCgpLmdldEZpbGUocGF0aCk7DQorCQkJaWYgKGZpbGUgIT0gbnVsbCkgew0KKwkJCQlkb1NhdmVBcyhVUkkuY3JlYXRlUGxhdGZvcm1SZXNvdXJjZVVSSShmaWxlLmdldEZ1bGxQYXRoKCkudG9TdHJpbmcoKSwgdHJ1ZSksIG5ldyBGaWxlRWRpdG9ySW5wdXQoZmlsZSkpOw0KKwkJCX0NCisJCX0NCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCB2b2lkIGRvU2F2ZUFzKFVSSSB1cmksIElFZGl0b3JJbnB1dCBlZGl0b3JJbnB1dCkgew0KKwkJKGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKS5nZXRSZXNvdXJjZXMoKS5nZXQoMCkpLnNldFVSSSh1cmkpOw0KKwkJc2V0SW5wdXRXaXRoTm90aWZ5KGVkaXRvcklucHV0KTsNCisJCXNldFBhcnROYW1lKGVkaXRvcklucHV0LmdldE5hbWUoKSk7DQorCQlJUHJvZ3Jlc3NNb25pdG9yIHByb2dyZXNzTW9uaXRvciA9DQorCQkJZ2V0QWN0aW9uQmFycygpLmdldFN0YXR1c0xpbmVNYW5hZ2VyKCkgIT0gbnVsbCA/DQorCQkJCWdldEFjdGlvbkJhcnMoKS5nZXRTdGF0dXNMaW5lTWFuYWdlcigpLmdldFByb2dyZXNzTW9uaXRvcigpIDoNCisJCQkJbmV3IE51bGxQcm9ncmVzc01vbml0b3IoKTsNCisJCWRvU2F2ZShwcm9ncmVzc01vbml0b3IpOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIHZvaWQgZ290b01hcmtlcihJTWFya2VyIG1hcmtlcikgew0KKwkJdHJ5IHsNCisJCQlpZiAobWFya2VyLmdldFR5cGUoKS5lcXVhbHMoRVZhbGlkYXRvci5NQVJLRVIpKSB7DQorCQkJCVN0cmluZyB1cmlBdHRyaWJ1dGUgPSBtYXJrZXIuZ2V0QXR0cmlidXRlKEVWYWxpZGF0b3IuVVJJX0FUVFJJQlVURSwgbnVsbCk7DQorCQkJCWlmICh1cmlBdHRyaWJ1dGUgIT0gbnVsbCkgew0KKwkJCQkJVVJJIHVyaSA9IFVSSS5jcmVhdGVVUkkodXJpQXR0cmlidXRlKTsNCisJCQkJCUVPYmplY3QgZU9iamVjdCA9IGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKS5nZXRFT2JqZWN0KHVyaSwgdHJ1ZSk7DQorCQkJCQlpZiAoZU9iamVjdCAhPSBudWxsKSB7DQorCQkJCQkgIHNldFNlbGVjdGlvblRvVmlld2VyKENvbGxlY3Rpb25zLnNpbmdsZXRvbihlZGl0aW5nRG9tYWluLmdldFdyYXBwZXIoZU9iamVjdCkpKTsNCisJCQkJCX0NCisJCQkJfQ0KKwkJCX0NCisJCX0NCisJCWNhdGNoIChDb3JlRXhjZXB0aW9uIGV4Y2VwdGlvbikgew0KKwkJCUNvcmVFZGl0b3JQbHVnaW4uSU5TVEFOQ0UubG9nKGV4Y2VwdGlvbik7DQorCQl9DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgaXMgY2FsbGVkIGR1cmluZyBzdGFydHVwLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJQE92ZXJyaWRlDQorCXB1YmxpYyB2b2lkIGluaXQoSUVkaXRvclNpdGUgc2l0ZSwgSUVkaXRvcklucHV0IGVkaXRvcklucHV0KSB7DQorCQlzZXRTaXRlKHNpdGUpOw0KKwkJc2V0SW5wdXRXaXRoTm90aWZ5KGVkaXRvcklucHV0KTsNCisJCXNldFBhcnROYW1lKGVkaXRvcklucHV0LmdldE5hbWUoKSk7DQorCQlzaXRlLnNldFNlbGVjdGlvblByb3ZpZGVyKHRoaXMpOw0KKwkJc2l0ZS5nZXRQYWdlKCkuYWRkUGFydExpc3RlbmVyKHBhcnRMaXN0ZW5lcik7DQorCQlSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuYWRkUmVzb3VyY2VDaGFuZ2VMaXN0ZW5lcihyZXNvdXJjZUNoYW5nZUxpc3RlbmVyLCBJUmVzb3VyY2VDaGFuZ2VFdmVudC5QT1NUX0NIQU5HRSk7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlAT3ZlcnJpZGUNCisJcHVibGljIHZvaWQgc2V0Rm9jdXMoKSB7DQorCQlpZiAoY3VycmVudFZpZXdlclBhbmUgIT0gbnVsbCkgew0KKwkJCWN1cnJlbnRWaWV3ZXJQYW5lLnNldEZvY3VzKCk7DQorCQl9DQorCQllbHNlIHsNCisJCQlnZXRDb250cm9sKGdldEFjdGl2ZVBhZ2UoKSkuc2V0Rm9jdXMoKTsNCisJCX0NCisJfQ0KKw0KKwkvKioNCisJICogVGhpcyBpbXBsZW1lbnRzIHtAbGluayBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb25Qcm92aWRlcn0uDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgdm9pZCBhZGRTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIoSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lciBsaXN0ZW5lcikgew0KKwkJc2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVycy5hZGQobGlzdGVuZXIpOw0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIGltcGxlbWVudHMge0BsaW5rIG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvblByb3ZpZGVyfS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyB2b2lkIHJlbW92ZVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcihJU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyIGxpc3RlbmVyKSB7DQorCQlzZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXJzLnJlbW92ZShsaXN0ZW5lcik7DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgaW1wbGVtZW50cyB7QGxpbmsgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uUHJvdmlkZXJ9IHRvIHJldHVybiB0aGlzIGVkaXRvcidzIG92ZXJhbGwgc2VsZWN0aW9uLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIElTZWxlY3Rpb24gZ2V0U2VsZWN0aW9uKCkgew0KKwkJcmV0dXJuIGVkaXRvclNlbGVjdGlvbjsNCisJfQ0KKw0KKwkvKioNCisJICogVGhpcyBpbXBsZW1lbnRzIHtAbGluayBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb25Qcm92aWRlcn0gdG8gc2V0IHRoaXMgZWRpdG9yJ3Mgb3ZlcmFsbCBzZWxlY3Rpb24uDQorCSAqIENhbGxpbmcgdGhpcyByZXN1bHQgd2lsbCBub3RpZnkgdGhlIGxpc3RlbmVycy4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyB2b2lkIHNldFNlbGVjdGlvbihJU2VsZWN0aW9uIHNlbGVjdGlvbikgew0KKwkJZWRpdG9yU2VsZWN0aW9uID0gc2VsZWN0aW9uOw0KKw0KKwkJZm9yIChJU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyIGxpc3RlbmVyIDogc2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVycykgew0KKwkJCWxpc3RlbmVyLnNlbGVjdGlvbkNoYW5nZWQobmV3IFNlbGVjdGlvbkNoYW5nZWRFdmVudCh0aGlzLCBzZWxlY3Rpb24pKTsNCisJCX0NCisJCXNldFN0YXR1c0xpbmVNYW5hZ2VyKHNlbGVjdGlvbik7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgdm9pZCBzZXRTdGF0dXNMaW5lTWFuYWdlcihJU2VsZWN0aW9uIHNlbGVjdGlvbikgew0KKwkJSVN0YXR1c0xpbmVNYW5hZ2VyIHN0YXR1c0xpbmVNYW5hZ2VyID0gY3VycmVudFZpZXdlciAhPSBudWxsICYmIGN1cnJlbnRWaWV3ZXIgPT0gY29udGVudE91dGxpbmVWaWV3ZXIgPw0KKwkJCWNvbnRlbnRPdXRsaW5lU3RhdHVzTGluZU1hbmFnZXIgOiBnZXRBY3Rpb25CYXJzKCkuZ2V0U3RhdHVzTGluZU1hbmFnZXIoKTsNCisNCisJCWlmIChzdGF0dXNMaW5lTWFuYWdlciAhPSBudWxsKSB7DQorCQkJaWYgKHNlbGVjdGlvbiBpbnN0YW5jZW9mIElTdHJ1Y3R1cmVkU2VsZWN0aW9uKSB7DQorCQkJCUNvbGxlY3Rpb248Pz4gY29sbGVjdGlvbiA9ICgoSVN0cnVjdHVyZWRTZWxlY3Rpb24pc2VsZWN0aW9uKS50b0xpc3QoKTsNCisJCQkJc3dpdGNoIChjb2xsZWN0aW9uLnNpemUoKSkgew0KKwkJCQkJY2FzZSAwOiB7DQorCQkJCQkJc3RhdHVzTGluZU1hbmFnZXIuc2V0TWVzc2FnZShnZXRTdHJpbmcoIl9VSV9Ob09iamVjdFNlbGVjdGVkIikpOyAvLyROT04tTkxTLTEkDQorCQkJCQkJYnJlYWs7DQorCQkJCQl9DQorCQkJCQljYXNlIDE6IHsNCisJCQkJCQlTdHJpbmcgdGV4dCA9IG5ldyBBZGFwdGVyRmFjdG9yeUl0ZW1EZWxlZ2F0b3IoYWRhcHRlckZhY3RvcnkpLmdldFRleHQoY29sbGVjdGlvbi5pdGVyYXRvcigpLm5leHQoKSk7DQorCQkJCQkJc3RhdHVzTGluZU1hbmFnZXIuc2V0TWVzc2FnZShnZXRTdHJpbmcoIl9VSV9TaW5nbGVPYmplY3RTZWxlY3RlZCIsIHRleHQpKTsgLy8kTk9OLU5MUy0xJA0KKwkJCQkJCWJyZWFrOw0KKwkJCQkJfQ0KKwkJCQkJZGVmYXVsdDogew0KKwkJCQkJCXN0YXR1c0xpbmVNYW5hZ2VyLnNldE1lc3NhZ2UoZ2V0U3RyaW5nKCJfVUlfTXVsdGlPYmplY3RTZWxlY3RlZCIsIEludGVnZXIudG9TdHJpbmcoY29sbGVjdGlvbi5zaXplKCkpKSk7IC8vJE5PTi1OTFMtMSQNCisJCQkJCQlicmVhazsNCisJCQkJCX0NCisJCQkJfQ0KKwkJCX0NCisJCQllbHNlIHsNCisJCQkJc3RhdHVzTGluZU1hbmFnZXIuc2V0TWVzc2FnZSgiIik7IC8vJE5PTi1OTFMtMSQNCisJCQl9DQorCQl9DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgbG9va3MgdXAgYSBzdHJpbmcgaW4gdGhlIHBsdWdpbidzIHBsdWdpbi5wcm9wZXJ0aWVzIGZpbGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcml2YXRlIHN0YXRpYyBTdHJpbmcgZ2V0U3RyaW5nKFN0cmluZyBrZXkpIHsNCisJCXJldHVybiBDb3JlRWRpdG9yUGx1Z2luLklOU1RBTkNFLmdldFN0cmluZyhrZXkpOw0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIGxvb2tzIHVwIGEgc3RyaW5nIGluIHBsdWdpbi5wcm9wZXJ0aWVzLCBtYWtpbmcgYSBzdWJzdGl0dXRpb24uDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcml2YXRlIHN0YXRpYyBTdHJpbmcgZ2V0U3RyaW5nKFN0cmluZyBrZXksIE9iamVjdCBzMSkgew0KKwkJcmV0dXJuIENvcmVFZGl0b3JQbHVnaW4uSU5TVEFOQ0UuZ2V0U3RyaW5nKGtleSwgbmV3IE9iamVjdCBbXSB7IHMxIH0pOw0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIGltcGxlbWVudHMge0BsaW5rIG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JTWVudUxpc3RlbmVyfSB0byBoZWxwIGZpbGwgdGhlIGNvbnRleHQgbWVudXMgd2l0aCBjb250cmlidXRpb25zIGZyb20gdGhlIEVkaXQgbWVudS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyB2b2lkIG1lbnVBYm91dFRvU2hvdyhJTWVudU1hbmFnZXIgbWVudU1hbmFnZXIpIHsNCisJCSgoSU1lbnVMaXN0ZW5lcilnZXRFZGl0b3JTaXRlKCkuZ2V0QWN0aW9uQmFyQ29udHJpYnV0b3IoKSkubWVudUFib3V0VG9TaG93KG1lbnVNYW5hZ2VyKTsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBFZGl0aW5nRG9tYWluQWN0aW9uQmFyQ29udHJpYnV0b3IgZ2V0QWN0aW9uQmFyQ29udHJpYnV0b3IoKSB7DQorCQlyZXR1cm4gKEVkaXRpbmdEb21haW5BY3Rpb25CYXJDb250cmlidXRvcilnZXRFZGl0b3JTaXRlKCkuZ2V0QWN0aW9uQmFyQ29udHJpYnV0b3IoKTsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBJQWN0aW9uQmFycyBnZXRBY3Rpb25CYXJzKCkgew0KKwkJcmV0dXJuIGdldEFjdGlvbkJhckNvbnRyaWJ1dG9yKCkuZ2V0QWN0aW9uQmFycygpOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIEFkYXB0ZXJGYWN0b3J5IGdldEFkYXB0ZXJGYWN0b3J5KCkgew0KKwkJcmV0dXJuIGFkYXB0ZXJGYWN0b3J5Ow0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJQE92ZXJyaWRlDQorCXB1YmxpYyB2b2lkIGRpc3Bvc2UoKSB7DQorCQl1cGRhdGVQcm9ibGVtSW5kaWNhdGlvbiA9IGZhbHNlOw0KKw0KKwkJUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLnJlbW92ZVJlc291cmNlQ2hhbmdlTGlzdGVuZXIocmVzb3VyY2VDaGFuZ2VMaXN0ZW5lcik7DQorDQorCQlnZXRTaXRlKCkuZ2V0UGFnZSgpLnJlbW92ZVBhcnRMaXN0ZW5lcihwYXJ0TGlzdGVuZXIpOw0KKw0KKwkJYWRhcHRlckZhY3RvcnkuZGlzcG9zZSgpOw0KKw0KKwkJaWYgKGdldEFjdGlvbkJhckNvbnRyaWJ1dG9yKCkuZ2V0QWN0aXZlRWRpdG9yKCkgPT0gdGhpcykgew0KKwkJCWdldEFjdGlvbkJhckNvbnRyaWJ1dG9yKCkuc2V0QWN0aXZlRWRpdG9yKG51bGwpOw0KKwkJfQ0KKw0KKwkJaWYgKHByb3BlcnR5U2hlZXRQYWdlICE9IG51bGwpIHsNCisJCQlwcm9wZXJ0eVNoZWV0UGFnZS5kaXNwb3NlKCk7DQorCQl9DQorDQorCQlpZiAoY29udGVudE91dGxpbmVQYWdlICE9IG51bGwpIHsNCisJCQljb250ZW50T3V0bGluZVBhZ2UuZGlzcG9zZSgpOw0KKwkJfQ0KKw0KKwkJc3VwZXIuZGlzcG9zZSgpOw0KKwl9DQorDQorCS8qKg0KKwkgKiBSZXR1cm5zIHdoZXRoZXIgdGhlIG91dGxpbmUgdmlldyBzaG91bGQgYmUgcHJlc2VudGVkIHRvIHRoZSB1c2VyLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIGJvb2xlYW4gc2hvd091dGxpbmVWaWV3KCkgew0KKwkJcmV0dXJuIHRydWU7DQorCX0NCit9DQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvc29sdmVyL3ByZXNlbnRhdGlvbi9Tb2x2ZXJNb2RlbFdpemFyZC5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvc29sdmVyL3ByZXNlbnRhdGlvbi9Tb2x2ZXJNb2RlbFdpemFyZC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZmYTFiZWMKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9zb2x2ZXIvcHJlc2VudGF0aW9uL1NvbHZlck1vZGVsV2l6YXJkLmphdmEKQEAgLTAsMCArMSw2MTMgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNvbHZlci5wcmVzZW50YXRpb247DQorDQorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisgKiBDb3B5cmlnaHQgKGMpIDIwMDkgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuDQorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscw0KKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMA0KKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0DQorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwNCisgKg0KKyAqIENvbnRyaWJ1dG9yczoNCisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uDQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQorDQorDQoraW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7DQoraW1wb3J0IGphdmEudXRpbC5BcnJheXM7DQoraW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOw0KK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbnM7DQoraW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOw0KK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsNCitpbXBvcnQgamF2YS51dGlsLk1hcDsNCitpbXBvcnQgamF2YS51dGlsLk1pc3NpbmdSZXNvdXJjZUV4Y2VwdGlvbjsNCitpbXBvcnQgamF2YS51dGlsLlN0cmluZ1Rva2VuaXplcjsNCisNCitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUNvbnRhaW5lcjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUZpbGU7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklGb2xkZXI7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0Ow0KK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUmVzb3VyY2U7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLlJlc291cmNlc1BsdWdpbjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQcm9ncmVzc01vbml0b3I7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QYXRoOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLkNvbW1vblBsdWdpbjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlVSSTsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzczsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzc2lmaWVyOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdDsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnJlc291cmNlLlJlc291cmNlOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUucmVzb3VyY2UuUmVzb3VyY2VTZXQ7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5yZXNvdXJjZS5pbXBsLlJlc291cmNlU2V0SW1wbDsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnhtaS5YTUxSZXNvdXJjZTsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkucHJvdmlkZXIuRXh0ZW5kZWRJbWFnZVJlZ2lzdHJ5Ow0KK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5kaWFsb2dzLk1lc3NhZ2VEaWFsb2c7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvbjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU3RydWN0dXJlZFNlbGVjdGlvbjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5TdHJ1Y3R1cmVkU2VsZWN0aW9uOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS53aXphcmQuV2l6YXJkOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS53aXphcmQuV2l6YXJkUGFnZTsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5wcmVzZW50YXRpb24uQ29yZUVkaXRvclBsdWdpbjsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5wcm92aWRlci5Db3JlRWRpdFBsdWdpbjsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNvbHZlci5Tb2x2ZXJGYWN0b3J5Ow0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc29sdmVyLlNvbHZlclBhY2thZ2U7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5TV1Q7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuTW9kaWZ5RXZlbnQ7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuTW9kaWZ5TGlzdGVuZXI7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5sYXlvdXQuR3JpZERhdGE7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5sYXlvdXQuR3JpZExheW91dDsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tYm87DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZTsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuTGFiZWw7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnVpLklOZXdXaXphcmQ7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2g7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2hQYWdlOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5JV29ya2JlbmNoUGFydDsNCitpbXBvcnQgb3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaFdpbmRvdzsNCitpbXBvcnQgb3JnLmVjbGlwc2UudWkuUGFydEluaXRFeGNlcHRpb247DQoraW1wb3J0IG9yZy5lY2xpcHNlLnVpLmFjdGlvbnMuV29ya3NwYWNlTW9kaWZ5T3BlcmF0aW9uOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5kaWFsb2dzLldpemFyZE5ld0ZpbGVDcmVhdGlvblBhZ2U7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnVpLnBhcnQuRmlsZUVkaXRvcklucHV0Ow0KK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5wYXJ0LklTZXRTZWxlY3Rpb25UYXJnZXQ7DQorDQorDQorLyoqDQorICogVGhpcyBpcyBhIHNpbXBsZSB3aXphcmQgZm9yIGNyZWF0aW5nIGEgbmV3IG1vZGVsIGZpbGUuDQorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisgKiBAZ2VuZXJhdGVkDQorICovDQorcHVibGljIGNsYXNzIFNvbHZlck1vZGVsV2l6YXJkIGV4dGVuZHMgV2l6YXJkIGltcGxlbWVudHMgSU5ld1dpemFyZCB7DQorCS8qKg0KKwkgKiBUaGUgc3VwcG9ydGVkIGV4dGVuc2lvbnMgZm9yIGNyZWF0ZWQgZmlsZXMuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgc3RhdGljIGZpbmFsIExpc3Q8U3RyaW5nPiBGSUxFX0VYVEVOU0lPTlMgPQ0KKwkJQ29sbGVjdGlvbnMudW5tb2RpZmlhYmxlTGlzdChBcnJheXMuYXNMaXN0KENvcmVFZGl0b3JQbHVnaW4uSU5TVEFOQ0UuZ2V0U3RyaW5nKCJfVUlfU29sdmVyRWRpdG9yRmlsZW5hbWVFeHRlbnNpb25zIikuc3BsaXQoIlxccyosXFxzKiIpKSk7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJA0KKw0KKwkvKioNCisJICogQSBmb3JtYXR0ZWQgbGlzdCBvZiBzdXBwb3J0ZWQgZmlsZSBleHRlbnNpb25zLCBzdWl0YWJsZSBmb3IgZGlzcGxheS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEZPUk1BVFRFRF9GSUxFX0VYVEVOU0lPTlMgPQ0KKwkJQ29yZUVkaXRvclBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoIl9VSV9Tb2x2ZXJFZGl0b3JGaWxlbmFtZUV4dGVuc2lvbnMiKS5yZXBsYWNlQWxsKCJcXHMqLFxccyoiLCAiLCAiKTsNCisNCisJLyoqDQorCSAqIFRoaXMgY2FjaGVzIGFuIGluc3RhbmNlIG9mIHRoZSBtb2RlbCBwYWNrYWdlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIFNvbHZlclBhY2thZ2Ugc29sdmVyUGFja2FnZSA9IFNvbHZlclBhY2thZ2UuZUlOU1RBTkNFOw0KKw0KKwkvKioNCisJICogVGhpcyBjYWNoZXMgYW4gaW5zdGFuY2Ugb2YgdGhlIG1vZGVsIGZhY3RvcnkuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgU29sdmVyRmFjdG9yeSBzb2x2ZXJGYWN0b3J5ID0gc29sdmVyUGFja2FnZS5nZXRTb2x2ZXJGYWN0b3J5KCk7DQorDQorCS8qKg0KKwkgKiBUaGlzIGlzIHRoZSBmaWxlIGNyZWF0aW9uIHBhZ2UuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgU29sdmVyTW9kZWxXaXphcmROZXdGaWxlQ3JlYXRpb25QYWdlIG5ld0ZpbGVDcmVhdGlvblBhZ2U7DQorDQorCS8qKg0KKwkgKiBUaGlzIGlzIHRoZSBpbml0aWFsIG9iamVjdCBjcmVhdGlvbiBwYWdlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIFNvbHZlck1vZGVsV2l6YXJkSW5pdGlhbE9iamVjdENyZWF0aW9uUGFnZSBpbml0aWFsT2JqZWN0Q3JlYXRpb25QYWdlOw0KKw0KKwkvKioNCisJICogUmVtZW1iZXIgdGhlIHNlbGVjdGlvbiBkdXJpbmcgaW5pdGlhbGl6YXRpb24gZm9yIHBvcHVsYXRpbmcgdGhlIGRlZmF1bHQgY29udGFpbmVyLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIElTdHJ1Y3R1cmVkU2VsZWN0aW9uIHNlbGVjdGlvbjsNCisNCisJLyoqDQorCSAqIFJlbWVtYmVyIHRoZSB3b3JrYmVuY2ggZHVyaW5nIGluaXRpYWxpemF0aW9uLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIElXb3JrYmVuY2ggd29ya2JlbmNoOw0KKw0KKwkvKioNCisJICogQ2FjaGVzIHRoZSBuYW1lcyBvZiB0aGUgdHlwZXMgdGhhdCBjYW4gYmUgY3JlYXRlZCBhcyB0aGUgcm9vdCBvYmplY3QuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgTGlzdDxTdHJpbmc+IGluaXRpYWxPYmplY3ROYW1lczsNCisNCisJLyoqDQorCSAqIFRoaXMganVzdCByZWNvcmRzIHRoZSBpbmZvcm1hdGlvbi4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyB2b2lkIGluaXQoSVdvcmtiZW5jaCB3b3JrYmVuY2gsIElTdHJ1Y3R1cmVkU2VsZWN0aW9uIHNlbGVjdGlvbikgew0KKwkJdGhpcy53b3JrYmVuY2ggPSB3b3JrYmVuY2g7DQorCQl0aGlzLnNlbGVjdGlvbiA9IHNlbGVjdGlvbjsNCisJCXNldFdpbmRvd1RpdGxlKENvcmVFZGl0b3JQbHVnaW4uSU5TVEFOQ0UuZ2V0U3RyaW5nKCJfVUlfV2l6YXJkX2xhYmVsIikpOyAvLyROT04tTkxTLTEkDQorCQlzZXREZWZhdWx0UGFnZUltYWdlRGVzY3JpcHRvcihFeHRlbmRlZEltYWdlUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0SW1hZ2VEZXNjcmlwdG9yKENvcmVFZGl0b3JQbHVnaW4uSU5TVEFOQ0UuZ2V0SW1hZ2UoImZ1bGwvd2l6YmFuL05ld1NvbHZlciIpKSk7IC8vJE5PTi1OTFMtMSQNCisJfQ0KKw0KKwkvKioNCisJICogUmV0dXJucyB0aGUgbmFtZXMgb2YgdGhlIHR5cGVzIHRoYXQgY2FuIGJlIGNyZWF0ZWQgYXMgdGhlIHJvb3Qgb2JqZWN0Lg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIENvbGxlY3Rpb248U3RyaW5nPiBnZXRJbml0aWFsT2JqZWN0TmFtZXMoKSB7DQorCQlpZiAoaW5pdGlhbE9iamVjdE5hbWVzID09IG51bGwpIHsNCisJCQlpbml0aWFsT2JqZWN0TmFtZXMgPSBuZXcgQXJyYXlMaXN0PFN0cmluZz4oKTsNCisJCQlmb3IgKEVDbGFzc2lmaWVyIGVDbGFzc2lmaWVyIDogc29sdmVyUGFja2FnZS5nZXRFQ2xhc3NpZmllcnMoKSkgew0KKwkJCQlpZiAoZUNsYXNzaWZpZXIgaW5zdGFuY2VvZiBFQ2xhc3MpIHsNCisJCQkJCUVDbGFzcyBlQ2xhc3MgPSAoRUNsYXNzKWVDbGFzc2lmaWVyOw0KKwkJCQkJaWYgKCFlQ2xhc3MuaXNBYnN0cmFjdCgpKSB7DQorCQkJCQkJaW5pdGlhbE9iamVjdE5hbWVzLmFkZChlQ2xhc3MuZ2V0TmFtZSgpKTsNCisJCQkJCX0NCisJCQkJfQ0KKwkJCX0NCisJCQlDb2xsZWN0aW9ucy5zb3J0KGluaXRpYWxPYmplY3ROYW1lcywgQ29tbW9uUGx1Z2luLklOU1RBTkNFLmdldENvbXBhcmF0b3IoKSk7DQorCQl9DQorCQlyZXR1cm4gaW5pdGlhbE9iamVjdE5hbWVzOw0KKwl9DQorDQorCS8qKg0KKwkgKiBDcmVhdGUgYSBuZXcgbW9kZWwuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgRU9iamVjdCBjcmVhdGVJbml0aWFsTW9kZWwoKSB7DQorCQlFQ2xhc3MgZUNsYXNzID0gKEVDbGFzcylzb2x2ZXJQYWNrYWdlLmdldEVDbGFzc2lmaWVyKGluaXRpYWxPYmplY3RDcmVhdGlvblBhZ2UuZ2V0SW5pdGlhbE9iamVjdE5hbWUoKSk7DQorCQlFT2JqZWN0IHJvb3RPYmplY3QgPSBzb2x2ZXJGYWN0b3J5LmNyZWF0ZShlQ2xhc3MpOw0KKwkJcmV0dXJuIHJvb3RPYmplY3Q7DQorCX0NCisNCisJLyoqDQorCSAqIERvIHRoZSB3b3JrIGFmdGVyIGV2ZXJ5dGhpbmcgaXMgc3BlY2lmaWVkLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJQE92ZXJyaWRlDQorCXB1YmxpYyBib29sZWFuIHBlcmZvcm1GaW5pc2goKSB7DQorCQl0cnkgew0KKwkJCS8vIFJlbWVtYmVyIHRoZSBmaWxlLg0KKwkJCS8vDQorCQkJZmluYWwgSUZpbGUgbW9kZWxGaWxlID0gZ2V0TW9kZWxGaWxlKCk7DQorDQorCQkJLy8gRG8gdGhlIHdvcmsgd2l0aGluIGFuIG9wZXJhdGlvbi4NCisJCQkvLw0KKwkJCVdvcmtzcGFjZU1vZGlmeU9wZXJhdGlvbiBvcGVyYXRpb24gPQ0KKwkJCQluZXcgV29ya3NwYWNlTW9kaWZ5T3BlcmF0aW9uKCkgew0KKwkJCQkJQE92ZXJyaWRlDQorCQkJCQlwcm90ZWN0ZWQgdm9pZCBleGVjdXRlKElQcm9ncmVzc01vbml0b3IgcHJvZ3Jlc3NNb25pdG9yKSB7DQorCQkJCQkJdHJ5IHsNCisJCQkJCQkJLy8gQ3JlYXRlIGEgcmVzb3VyY2Ugc2V0DQorCQkJCQkJCS8vDQorCQkJCQkJCVJlc291cmNlU2V0IHJlc291cmNlU2V0ID0gbmV3IFJlc291cmNlU2V0SW1wbCgpOw0KKw0KKwkJCQkJCQkvLyBHZXQgdGhlIFVSSSBvZiB0aGUgbW9kZWwgZmlsZS4NCisJCQkJCQkJLy8NCisJCQkJCQkJVVJJIGZpbGVVUkkgPSBVUkkuY3JlYXRlUGxhdGZvcm1SZXNvdXJjZVVSSShtb2RlbEZpbGUuZ2V0RnVsbFBhdGgoKS50b1N0cmluZygpLCB0cnVlKTsNCisNCisJCQkJCQkJLy8gQ3JlYXRlIGEgcmVzb3VyY2UgZm9yIHRoaXMgZmlsZS4NCisJCQkJCQkJLy8NCisJCQkJCQkJUmVzb3VyY2UgcmVzb3VyY2UgPSByZXNvdXJjZVNldC5jcmVhdGVSZXNvdXJjZShmaWxlVVJJKTsNCisNCisJCQkJCQkJLy8gQWRkIHRoZSBpbml0aWFsIG1vZGVsIG9iamVjdCB0byB0aGUgY29udGVudHMuDQorCQkJCQkJCS8vDQorCQkJCQkJCUVPYmplY3Qgcm9vdE9iamVjdCA9IGNyZWF0ZUluaXRpYWxNb2RlbCgpOw0KKwkJCQkJCQlpZiAocm9vdE9iamVjdCAhPSBudWxsKSB7DQorCQkJCQkJCQlyZXNvdXJjZS5nZXRDb250ZW50cygpLmFkZChyb290T2JqZWN0KTsNCisJCQkJCQkJfQ0KKw0KKwkJCQkJCQkvLyBTYXZlIHRoZSBjb250ZW50cyBvZiB0aGUgcmVzb3VyY2UgdG8gdGhlIGZpbGUgc3lzdGVtLg0KKwkJCQkJCQkvLw0KKwkJCQkJCQlNYXA8T2JqZWN0LCBPYmplY3Q+IG9wdGlvbnMgPSBuZXcgSGFzaE1hcDxPYmplY3QsIE9iamVjdD4oKTsNCisJCQkJCQkJb3B0aW9ucy5wdXQoWE1MUmVzb3VyY2UuT1BUSU9OX0VOQ09ESU5HLCBpbml0aWFsT2JqZWN0Q3JlYXRpb25QYWdlLmdldEVuY29kaW5nKCkpOw0KKwkJCQkJCQlyZXNvdXJjZS5zYXZlKG9wdGlvbnMpOw0KKwkJCQkJCX0NCisJCQkJCQljYXRjaCAoRXhjZXB0aW9uIGV4Y2VwdGlvbikgew0KKwkJCQkJCQlDb3JlRWRpdG9yUGx1Z2luLklOU1RBTkNFLmxvZyhleGNlcHRpb24pOw0KKwkJCQkJCX0NCisJCQkJCQlmaW5hbGx5IHsNCisJCQkJCQkJcHJvZ3Jlc3NNb25pdG9yLmRvbmUoKTsNCisJCQkJCQl9DQorCQkJCQl9DQorCQkJCX07DQorDQorCQkJZ2V0Q29udGFpbmVyKCkucnVuKGZhbHNlLCBmYWxzZSwgb3BlcmF0aW9uKTsNCisNCisJCQkvLyBTZWxlY3QgdGhlIG5ldyBmaWxlIHJlc291cmNlIGluIHRoZSBjdXJyZW50IHZpZXcuDQorCQkJLy8NCisJCQlJV29ya2JlbmNoV2luZG93IHdvcmtiZW5jaFdpbmRvdyA9IHdvcmtiZW5jaC5nZXRBY3RpdmVXb3JrYmVuY2hXaW5kb3coKTsNCisJCQlJV29ya2JlbmNoUGFnZSBwYWdlID0gd29ya2JlbmNoV2luZG93LmdldEFjdGl2ZVBhZ2UoKTsNCisJCQlmaW5hbCBJV29ya2JlbmNoUGFydCBhY3RpdmVQYXJ0ID0gcGFnZS5nZXRBY3RpdmVQYXJ0KCk7DQorCQkJaWYgKGFjdGl2ZVBhcnQgaW5zdGFuY2VvZiBJU2V0U2VsZWN0aW9uVGFyZ2V0KSB7DQorCQkJCWZpbmFsIElTZWxlY3Rpb24gdGFyZ2V0U2VsZWN0aW9uID0gbmV3IFN0cnVjdHVyZWRTZWxlY3Rpb24obW9kZWxGaWxlKTsNCisJCQkJZ2V0U2hlbGwoKS5nZXREaXNwbGF5KCkuYXN5bmNFeGVjDQorCQkJCQkobmV3IFJ1bm5hYmxlKCkgew0KKwkJCQkJCSBwdWJsaWMgdm9pZCBydW4oKSB7DQorCQkJCQkJCSAoKElTZXRTZWxlY3Rpb25UYXJnZXQpYWN0aXZlUGFydCkuc2VsZWN0UmV2ZWFsKHRhcmdldFNlbGVjdGlvbik7DQorCQkJCQkJIH0NCisJCQkJCSB9KTsNCisJCQl9DQorDQorCQkJLy8gT3BlbiBhbiBlZGl0b3Igb24gdGhlIG5ldyBmaWxlLg0KKwkJCS8vDQorCQkJdHJ5IHsNCisJCQkJcGFnZS5vcGVuRWRpdG9yDQorCQkJCQkobmV3IEZpbGVFZGl0b3JJbnB1dChtb2RlbEZpbGUpLA0KKwkJCQkJIHdvcmtiZW5jaC5nZXRFZGl0b3JSZWdpc3RyeSgpLmdldERlZmF1bHRFZGl0b3IobW9kZWxGaWxlLmdldEZ1bGxQYXRoKCkudG9TdHJpbmcoKSkuZ2V0SWQoKSk7CQkJCQkgCSANCisJCQl9DQorCQkJY2F0Y2ggKFBhcnRJbml0RXhjZXB0aW9uIGV4Y2VwdGlvbikgew0KKwkJCQlNZXNzYWdlRGlhbG9nLm9wZW5FcnJvcih3b3JrYmVuY2hXaW5kb3cuZ2V0U2hlbGwoKSwgQ29yZUVkaXRvclBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoIl9VSV9PcGVuRWRpdG9yRXJyb3JfbGFiZWwiKSwgZXhjZXB0aW9uLmdldE1lc3NhZ2UoKSk7IC8vJE5PTi1OTFMtMSQNCisJCQkJcmV0dXJuIGZhbHNlOw0KKwkJCX0NCisNCisJCQlyZXR1cm4gdHJ1ZTsNCisJCX0NCisJCWNhdGNoIChFeGNlcHRpb24gZXhjZXB0aW9uKSB7DQorCQkJQ29yZUVkaXRvclBsdWdpbi5JTlNUQU5DRS5sb2coZXhjZXB0aW9uKTsNCisJCQlyZXR1cm4gZmFsc2U7DQorCQl9DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgaXMgdGhlIG9uZSBwYWdlIG9mIHRoZSB3aXphcmQuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgY2xhc3MgU29sdmVyTW9kZWxXaXphcmROZXdGaWxlQ3JlYXRpb25QYWdlIGV4dGVuZHMgV2l6YXJkTmV3RmlsZUNyZWF0aW9uUGFnZSB7DQorCQkvKioNCisJCSAqIFBhc3MgaW4gdGhlIHNlbGVjdGlvbi4NCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJCSAqIEBnZW5lcmF0ZWQNCisJCSAqLw0KKwkJcHVibGljIFNvbHZlck1vZGVsV2l6YXJkTmV3RmlsZUNyZWF0aW9uUGFnZShTdHJpbmcgcGFnZUlkLCBJU3RydWN0dXJlZFNlbGVjdGlvbiBzZWxlY3Rpb24pIHsNCisJCQlzdXBlcihwYWdlSWQsIHNlbGVjdGlvbik7DQorCQl9DQorDQorCQkvKioNCisJCSAqIFRoZSBmcmFtZXdvcmsgY2FsbHMgdGhpcyB0byBzZWUgaWYgdGhlIGZpbGUgaXMgY29ycmVjdC4NCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJCSAqIEBnZW5lcmF0ZWQNCisJCSAqLw0KKwkJQE92ZXJyaWRlDQorCQlwcm90ZWN0ZWQgYm9vbGVhbiB2YWxpZGF0ZVBhZ2UoKSB7DQorCQkJaWYgKHN1cGVyLnZhbGlkYXRlUGFnZSgpKSB7DQorCQkJCVN0cmluZyBleHRlbnNpb24gPSBuZXcgUGF0aChnZXRGaWxlTmFtZSgpKS5nZXRGaWxlRXh0ZW5zaW9uKCk7DQorCQkJCWlmIChleHRlbnNpb24gPT0gbnVsbCB8fCAhRklMRV9FWFRFTlNJT05TLmNvbnRhaW5zKGV4dGVuc2lvbikpIHsNCisJCQkJCVN0cmluZyBrZXkgPSBGSUxFX0VYVEVOU0lPTlMuc2l6ZSgpID4gMSA/ICJfV0FSTl9GaWxlbmFtZUV4dGVuc2lvbnMiIDogIl9XQVJOX0ZpbGVuYW1lRXh0ZW5zaW9uIjsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkDQorCQkJCQlzZXRFcnJvck1lc3NhZ2UoQ29yZUVkaXRvclBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoa2V5LCBuZXcgT2JqZWN0IFtdIHsgRk9STUFUVEVEX0ZJTEVfRVhURU5TSU9OUyB9KSk7DQorCQkJCQlyZXR1cm4gZmFsc2U7DQorCQkJCX0NCisJCQkJcmV0dXJuIHRydWU7DQorCQkJfQ0KKwkJCXJldHVybiBmYWxzZTsNCisJCX0NCisNCisJCS8qKg0KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkJICogQGdlbmVyYXRlZA0KKwkJICovDQorCQlwdWJsaWMgSUZpbGUgZ2V0TW9kZWxGaWxlKCkgew0KKwkJCXJldHVybiBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuZ2V0Um9vdCgpLmdldEZpbGUoZ2V0Q29udGFpbmVyRnVsbFBhdGgoKS5hcHBlbmQoZ2V0RmlsZU5hbWUoKSkpOw0KKwkJfQ0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIGlzIHRoZSBwYWdlIHdoZXJlIHRoZSB0eXBlIG9mIG9iamVjdCB0byBjcmVhdGUgaXMgc2VsZWN0ZWQuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgY2xhc3MgU29sdmVyTW9kZWxXaXphcmRJbml0aWFsT2JqZWN0Q3JlYXRpb25QYWdlIGV4dGVuZHMgV2l6YXJkUGFnZSB7DQorCQkvKioNCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJCSAqIEBnZW5lcmF0ZWQNCisJCSAqLw0KKwkJcHJvdGVjdGVkIENvbWJvIGluaXRpYWxPYmplY3RGaWVsZDsNCisNCisJCS8qKg0KKwkJICogQGdlbmVyYXRlZA0KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkJICovDQorCQlwcm90ZWN0ZWQgTGlzdDxTdHJpbmc+IGVuY29kaW5nczsNCisNCisJCS8qKg0KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkJICogQGdlbmVyYXRlZA0KKwkJICovDQorCQlwcm90ZWN0ZWQgQ29tYm8gZW5jb2RpbmdGaWVsZDsNCisNCisJCS8qKg0KKwkJICogUGFzcyBpbiB0aGUgc2VsZWN0aW9uLg0KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkJICogQGdlbmVyYXRlZA0KKwkJICovDQorCQlwdWJsaWMgU29sdmVyTW9kZWxXaXphcmRJbml0aWFsT2JqZWN0Q3JlYXRpb25QYWdlKFN0cmluZyBwYWdlSWQpIHsNCisJCQlzdXBlcihwYWdlSWQpOw0KKwkJfQ0KKw0KKwkJLyoqDQorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCQkgKiBAZ2VuZXJhdGVkDQorCQkgKi8NCisJCXB1YmxpYyB2b2lkIGNyZWF0ZUNvbnRyb2woQ29tcG9zaXRlIHBhcmVudCkgew0KKwkJCUNvbXBvc2l0ZSBjb21wb3NpdGUgPSBuZXcgQ29tcG9zaXRlKHBhcmVudCwgU1dULk5PTkUpOyB7DQorCQkJCUdyaWRMYXlvdXQgbGF5b3V0ID0gbmV3IEdyaWRMYXlvdXQoKTsNCisJCQkJbGF5b3V0Lm51bUNvbHVtbnMgPSAxOw0KKwkJCQlsYXlvdXQudmVydGljYWxTcGFjaW5nID0gMTI7DQorCQkJCWNvbXBvc2l0ZS5zZXRMYXlvdXQobGF5b3V0KTsNCisNCisJCQkJR3JpZERhdGEgZGF0YSA9IG5ldyBHcmlkRGF0YSgpOw0KKwkJCQlkYXRhLnZlcnRpY2FsQWxpZ25tZW50ID0gR3JpZERhdGEuRklMTDsNCisJCQkJZGF0YS5ncmFiRXhjZXNzVmVydGljYWxTcGFjZSA9IHRydWU7DQorCQkJCWRhdGEuaG9yaXpvbnRhbEFsaWdubWVudCA9IEdyaWREYXRhLkZJTEw7DQorCQkJCWNvbXBvc2l0ZS5zZXRMYXlvdXREYXRhKGRhdGEpOw0KKwkJCX0NCisNCisJCQlMYWJlbCBjb250YWluZXJMYWJlbCA9IG5ldyBMYWJlbChjb21wb3NpdGUsIFNXVC5MRUZUKTsNCisJCQl7DQorCQkJCWNvbnRhaW5lckxhYmVsLnNldFRleHQoQ29yZUVkaXRvclBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoIl9VSV9Nb2RlbE9iamVjdCIpKTsgLy8kTk9OLU5MUy0xJA0KKw0KKwkJCQlHcmlkRGF0YSBkYXRhID0gbmV3IEdyaWREYXRhKCk7DQorCQkJCWRhdGEuaG9yaXpvbnRhbEFsaWdubWVudCA9IEdyaWREYXRhLkZJTEw7DQorCQkJCWNvbnRhaW5lckxhYmVsLnNldExheW91dERhdGEoZGF0YSk7DQorCQkJfQ0KKw0KKwkJCWluaXRpYWxPYmplY3RGaWVsZCA9IG5ldyBDb21ibyhjb21wb3NpdGUsIFNXVC5CT1JERVIpOw0KKwkJCXsNCisJCQkJR3JpZERhdGEgZGF0YSA9IG5ldyBHcmlkRGF0YSgpOw0KKwkJCQlkYXRhLmhvcml6b250YWxBbGlnbm1lbnQgPSBHcmlkRGF0YS5GSUxMOw0KKwkJCQlkYXRhLmdyYWJFeGNlc3NIb3Jpem9udGFsU3BhY2UgPSB0cnVlOw0KKwkJCQlpbml0aWFsT2JqZWN0RmllbGQuc2V0TGF5b3V0RGF0YShkYXRhKTsNCisJCQl9DQorDQorCQkJZm9yIChTdHJpbmcgb2JqZWN0TmFtZSA6IGdldEluaXRpYWxPYmplY3ROYW1lcygpKSB7DQorCQkJCWluaXRpYWxPYmplY3RGaWVsZC5hZGQoZ2V0TGFiZWwob2JqZWN0TmFtZSkpOw0KKwkJCX0NCisNCisJCQlpZiAoaW5pdGlhbE9iamVjdEZpZWxkLmdldEl0ZW1Db3VudCgpID09IDEpIHsNCisJCQkJaW5pdGlhbE9iamVjdEZpZWxkLnNlbGVjdCgwKTsNCisJCQl9DQorCQkJaW5pdGlhbE9iamVjdEZpZWxkLmFkZE1vZGlmeUxpc3RlbmVyKHZhbGlkYXRvcik7DQorDQorCQkJTGFiZWwgZW5jb2RpbmdMYWJlbCA9IG5ldyBMYWJlbChjb21wb3NpdGUsIFNXVC5MRUZUKTsNCisJCQl7DQorCQkJCWVuY29kaW5nTGFiZWwuc2V0VGV4dChDb3JlRWRpdG9yUGx1Z2luLklOU1RBTkNFLmdldFN0cmluZygiX1VJX1hNTEVuY29kaW5nIikpOyAvLyROT04tTkxTLTEkDQorDQorCQkJCUdyaWREYXRhIGRhdGEgPSBuZXcgR3JpZERhdGEoKTsNCisJCQkJZGF0YS5ob3Jpem9udGFsQWxpZ25tZW50ID0gR3JpZERhdGEuRklMTDsNCisJCQkJZW5jb2RpbmdMYWJlbC5zZXRMYXlvdXREYXRhKGRhdGEpOw0KKwkJCX0NCisJCQllbmNvZGluZ0ZpZWxkID0gbmV3IENvbWJvKGNvbXBvc2l0ZSwgU1dULkJPUkRFUik7DQorCQkJew0KKwkJCQlHcmlkRGF0YSBkYXRhID0gbmV3IEdyaWREYXRhKCk7DQorCQkJCWRhdGEuaG9yaXpvbnRhbEFsaWdubWVudCA9IEdyaWREYXRhLkZJTEw7DQorCQkJCWRhdGEuZ3JhYkV4Y2Vzc0hvcml6b250YWxTcGFjZSA9IHRydWU7DQorCQkJCWVuY29kaW5nRmllbGQuc2V0TGF5b3V0RGF0YShkYXRhKTsNCisJCQl9DQorDQorCQkJZm9yIChTdHJpbmcgZW5jb2RpbmcgOiBnZXRFbmNvZGluZ3MoKSkgew0KKwkJCQllbmNvZGluZ0ZpZWxkLmFkZChlbmNvZGluZyk7DQorCQkJfQ0KKw0KKwkJCWVuY29kaW5nRmllbGQuc2VsZWN0KDApOw0KKwkJCWVuY29kaW5nRmllbGQuYWRkTW9kaWZ5TGlzdGVuZXIodmFsaWRhdG9yKTsNCisNCisJCQlzZXRQYWdlQ29tcGxldGUodmFsaWRhdGVQYWdlKCkpOw0KKwkJCXNldENvbnRyb2woY29tcG9zaXRlKTsNCisJCX0NCisNCisJCS8qKg0KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkJICogQGdlbmVyYXRlZA0KKwkJICovDQorCQlwcm90ZWN0ZWQgTW9kaWZ5TGlzdGVuZXIgdmFsaWRhdG9yID0NCisJCQluZXcgTW9kaWZ5TGlzdGVuZXIoKSB7DQorCQkJCXB1YmxpYyB2b2lkIG1vZGlmeVRleHQoTW9kaWZ5RXZlbnQgZSkgew0KKwkJCQkJc2V0UGFnZUNvbXBsZXRlKHZhbGlkYXRlUGFnZSgpKTsNCisJCQkJfQ0KKwkJCX07DQorDQorCQkvKioNCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJCSAqIEBnZW5lcmF0ZWQNCisJCSAqLw0KKwkJcHJvdGVjdGVkIGJvb2xlYW4gdmFsaWRhdGVQYWdlKCkgew0KKwkJCXJldHVybiBnZXRJbml0aWFsT2JqZWN0TmFtZSgpICE9IG51bGwgJiYgZ2V0RW5jb2RpbmdzKCkuY29udGFpbnMoZW5jb2RpbmdGaWVsZC5nZXRUZXh0KCkpOw0KKwkJfQ0KKw0KKwkJLyoqDQorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCQkgKiBAZ2VuZXJhdGVkDQorCQkgKi8NCisJCUBPdmVycmlkZQ0KKwkJcHVibGljIHZvaWQgc2V0VmlzaWJsZShib29sZWFuIHZpc2libGUpIHsNCisJCQlzdXBlci5zZXRWaXNpYmxlKHZpc2libGUpOw0KKwkJCWlmICh2aXNpYmxlKSB7DQorCQkJCWlmIChpbml0aWFsT2JqZWN0RmllbGQuZ2V0SXRlbUNvdW50KCkgPT0gMSkgew0KKwkJCQkJaW5pdGlhbE9iamVjdEZpZWxkLmNsZWFyU2VsZWN0aW9uKCk7DQorCQkJCQllbmNvZGluZ0ZpZWxkLnNldEZvY3VzKCk7DQorCQkJCX0NCisJCQkJZWxzZSB7DQorCQkJCQllbmNvZGluZ0ZpZWxkLmNsZWFyU2VsZWN0aW9uKCk7DQorCQkJCQlpbml0aWFsT2JqZWN0RmllbGQuc2V0Rm9jdXMoKTsNCisJCQkJfQ0KKwkJCX0NCisJCX0NCisNCisJCS8qKg0KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkJICogQGdlbmVyYXRlZA0KKwkJICovDQorCQlwdWJsaWMgU3RyaW5nIGdldEluaXRpYWxPYmplY3ROYW1lKCkgew0KKwkJCVN0cmluZyBsYWJlbCA9IGluaXRpYWxPYmplY3RGaWVsZC5nZXRUZXh0KCk7DQorDQorCQkJZm9yIChTdHJpbmcgbmFtZSA6IGdldEluaXRpYWxPYmplY3ROYW1lcygpKSB7DQorCQkJCWlmIChnZXRMYWJlbChuYW1lKS5lcXVhbHMobGFiZWwpKSB7DQorCQkJCQlyZXR1cm4gbmFtZTsNCisJCQkJfQ0KKwkJCX0NCisJCQlyZXR1cm4gbnVsbDsNCisJCX0NCisNCisJCS8qKg0KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkJICogQGdlbmVyYXRlZA0KKwkJICovDQorCQlwdWJsaWMgU3RyaW5nIGdldEVuY29kaW5nKCkgew0KKwkJCXJldHVybiBlbmNvZGluZ0ZpZWxkLmdldFRleHQoKTsNCisJCX0NCisNCisJCS8qKg0KKwkJICogUmV0dXJucyB0aGUgbGFiZWwgZm9yIHRoZSBzcGVjaWZpZWQgdHlwZSBuYW1lLg0KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkJICogQGdlbmVyYXRlZA0KKwkJICovDQorCQlwcm90ZWN0ZWQgU3RyaW5nIGdldExhYmVsKFN0cmluZyB0eXBlTmFtZSkgew0KKwkJCXRyeSB7DQorCQkJCXJldHVybiBDb3JlRWRpdFBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoIl9VSV8iICsgdHlwZU5hbWUgKyAiX3R5cGUiKTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkDQorCQkJfQ0KKwkJCWNhdGNoKE1pc3NpbmdSZXNvdXJjZUV4Y2VwdGlvbiBtcmUpIHsNCisJCQkJQ29yZUVkaXRvclBsdWdpbi5JTlNUQU5DRS5sb2cobXJlKTsNCisJCQl9DQorCQkJcmV0dXJuIHR5cGVOYW1lOw0KKwkJfQ0KKw0KKwkJLyoqDQorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCQkgKiBAZ2VuZXJhdGVkDQorCQkgKi8NCisJCXByb3RlY3RlZCBDb2xsZWN0aW9uPFN0cmluZz4gZ2V0RW5jb2RpbmdzKCkgew0KKwkJCWlmIChlbmNvZGluZ3MgPT0gbnVsbCkgew0KKwkJCQllbmNvZGluZ3MgPSBuZXcgQXJyYXlMaXN0PFN0cmluZz4oKTsNCisJCQkJZm9yIChTdHJpbmdUb2tlbml6ZXIgc3RyaW5nVG9rZW5pemVyID0gbmV3IFN0cmluZ1Rva2VuaXplcihDb3JlRWRpdG9yUGx1Z2luLklOU1RBTkNFLmdldFN0cmluZygiX1VJX1hNTEVuY29kaW5nQ2hvaWNlcyIpKTsgc3RyaW5nVG9rZW5pemVyLmhhc01vcmVUb2tlbnMoKTsgKSAvLyROT04tTkxTLTEkDQorCQkJCXsNCisJCQkJCWVuY29kaW5ncy5hZGQoc3RyaW5nVG9rZW5pemVyLm5leHRUb2tlbigpKTsNCisJCQkJfQ0KKwkJCX0NCisJCQlyZXR1cm4gZW5jb2RpbmdzOw0KKwkJfQ0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGUgZnJhbWV3b3JrIGNhbGxzIHRoaXMgdG8gY3JlYXRlIHRoZSBjb250ZW50cyBvZiB0aGUgd2l6YXJkLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJCUBPdmVycmlkZQ0KKwlwdWJsaWMgdm9pZCBhZGRQYWdlcygpIHsNCisJCS8vIENyZWF0ZSBhIHBhZ2UsIHNldCB0aGUgdGl0bGUsIGFuZCB0aGUgaW5pdGlhbCBtb2RlbCBmaWxlIG5hbWUuDQorCQkvLw0KKwkJbmV3RmlsZUNyZWF0aW9uUGFnZSA9IG5ldyBTb2x2ZXJNb2RlbFdpemFyZE5ld0ZpbGVDcmVhdGlvblBhZ2UoIldoYXRldmVyIiwgc2VsZWN0aW9uKTsgLy8kTk9OLU5MUy0xJA0KKwkJbmV3RmlsZUNyZWF0aW9uUGFnZS5zZXRUaXRsZShDb3JlRWRpdG9yUGx1Z2luLklOU1RBTkNFLmdldFN0cmluZygiX1VJX1NvbHZlck1vZGVsV2l6YXJkX2xhYmVsIikpOyAvLyROT04tTkxTLTEkDQorCQluZXdGaWxlQ3JlYXRpb25QYWdlLnNldERlc2NyaXB0aW9uKENvcmVFZGl0b3JQbHVnaW4uSU5TVEFOQ0UuZ2V0U3RyaW5nKCJfVUlfU29sdmVyTW9kZWxXaXphcmRfZGVzY3JpcHRpb24iKSk7IC8vJE5PTi1OTFMtMSQNCisJCW5ld0ZpbGVDcmVhdGlvblBhZ2Uuc2V0RmlsZU5hbWUoQ29yZUVkaXRvclBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoIl9VSV9Tb2x2ZXJFZGl0b3JGaWxlbmFtZURlZmF1bHRCYXNlIikgKyAiLiIgKyBGSUxFX0VYVEVOU0lPTlMuZ2V0KDApKTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkDQorCQlhZGRQYWdlKG5ld0ZpbGVDcmVhdGlvblBhZ2UpOw0KKw0KKwkJLy8gVHJ5IGFuZCBnZXQgdGhlIHJlc291cmNlIHNlbGVjdGlvbiB0byBkZXRlcm1pbmUgYSBjdXJyZW50IGRpcmVjdG9yeSBmb3IgdGhlIGZpbGUgZGlhbG9nLg0KKwkJLy8NCisJCWlmIChzZWxlY3Rpb24gIT0gbnVsbCAmJiAhc2VsZWN0aW9uLmlzRW1wdHkoKSkgew0KKwkJCS8vIEdldCB0aGUgcmVzb3VyY2UuLi4NCisJCQkvLw0KKwkJCU9iamVjdCBzZWxlY3RlZEVsZW1lbnQgPSBzZWxlY3Rpb24uaXRlcmF0b3IoKS5uZXh0KCk7DQorCQkJaWYgKHNlbGVjdGVkRWxlbWVudCBpbnN0YW5jZW9mIElSZXNvdXJjZSkgew0KKwkJCQkvLyBHZXQgdGhlIHJlc291cmNlIHBhcmVudCwgaWYgaXRzIGEgZmlsZS4NCisJCQkJLy8NCisJCQkJSVJlc291cmNlIHNlbGVjdGVkUmVzb3VyY2UgPSAoSVJlc291cmNlKXNlbGVjdGVkRWxlbWVudDsNCisJCQkJaWYgKHNlbGVjdGVkUmVzb3VyY2UuZ2V0VHlwZSgpID09IElSZXNvdXJjZS5GSUxFKSB7DQorCQkJCQlzZWxlY3RlZFJlc291cmNlID0gc2VsZWN0ZWRSZXNvdXJjZS5nZXRQYXJlbnQoKTsNCisJCQkJfQ0KKw0KKwkJCQkvLyBUaGlzIGdpdmVzIHVzIGEgZGlyZWN0b3J5Li4uDQorCQkJCS8vDQorCQkJCWlmIChzZWxlY3RlZFJlc291cmNlIGluc3RhbmNlb2YgSUZvbGRlciB8fCBzZWxlY3RlZFJlc291cmNlIGluc3RhbmNlb2YgSVByb2plY3QpIHsNCisJCQkJCS8vIFNldCB0aGlzIGZvciB0aGUgY29udGFpbmVyLg0KKwkJCQkJLy8NCisJCQkJCW5ld0ZpbGVDcmVhdGlvblBhZ2Uuc2V0Q29udGFpbmVyRnVsbFBhdGgoc2VsZWN0ZWRSZXNvdXJjZS5nZXRGdWxsUGF0aCgpKTsNCisNCisJCQkJCS8vIE1ha2UgdXAgYSB1bmlxdWUgbmV3IG5hbWUgaGVyZS4NCisJCQkJCS8vDQorCQkJCQlTdHJpbmcgZGVmYXVsdE1vZGVsQmFzZUZpbGVuYW1lID0gQ29yZUVkaXRvclBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoIl9VSV9Tb2x2ZXJFZGl0b3JGaWxlbmFtZURlZmF1bHRCYXNlIik7IC8vJE5PTi1OTFMtMSQNCisJCQkJCVN0cmluZyBkZWZhdWx0TW9kZWxGaWxlbmFtZUV4dGVuc2lvbiA9IEZJTEVfRVhURU5TSU9OUy5nZXQoMCk7DQorCQkJCQlTdHJpbmcgbW9kZWxGaWxlbmFtZSA9IGRlZmF1bHRNb2RlbEJhc2VGaWxlbmFtZSArICIuIiArIGRlZmF1bHRNb2RlbEZpbGVuYW1lRXh0ZW5zaW9uOyAvLyROT04tTkxTLTEkDQorCQkJCQlmb3IgKGludCBpID0gMTsgKChJQ29udGFpbmVyKXNlbGVjdGVkUmVzb3VyY2UpLmZpbmRNZW1iZXIobW9kZWxGaWxlbmFtZSkgIT0gbnVsbDsgKytpKSB7DQorCQkJCQkJbW9kZWxGaWxlbmFtZSA9IGRlZmF1bHRNb2RlbEJhc2VGaWxlbmFtZSArIGkgKyAiLiIgKyBkZWZhdWx0TW9kZWxGaWxlbmFtZUV4dGVuc2lvbjsgLy8kTk9OLU5MUy0xJA0KKwkJCQkJfQ0KKwkJCQkJbmV3RmlsZUNyZWF0aW9uUGFnZS5zZXRGaWxlTmFtZShtb2RlbEZpbGVuYW1lKTsNCisJCQkJfQ0KKwkJCX0NCisJCX0NCisJCWluaXRpYWxPYmplY3RDcmVhdGlvblBhZ2UgPSBuZXcgU29sdmVyTW9kZWxXaXphcmRJbml0aWFsT2JqZWN0Q3JlYXRpb25QYWdlKCJXaGF0ZXZlcjIiKTsgLy8kTk9OLU5MUy0xJA0KKwkJaW5pdGlhbE9iamVjdENyZWF0aW9uUGFnZS5zZXRUaXRsZShDb3JlRWRpdG9yUGx1Z2luLklOU1RBTkNFLmdldFN0cmluZygiX1VJX1NvbHZlck1vZGVsV2l6YXJkX2xhYmVsIikpOyAvLyROT04tTkxTLTEkDQorCQlpbml0aWFsT2JqZWN0Q3JlYXRpb25QYWdlLnNldERlc2NyaXB0aW9uKENvcmVFZGl0b3JQbHVnaW4uSU5TVEFOQ0UuZ2V0U3RyaW5nKCJfVUlfV2l6YXJkX2luaXRpYWxfb2JqZWN0X2Rlc2NyaXB0aW9uIikpOyAvLyROT04tTkxTLTEkDQorCQlhZGRQYWdlKGluaXRpYWxPYmplY3RDcmVhdGlvblBhZ2UpOw0KKwl9DQorDQorCS8qKg0KKwkgKiBHZXQgdGhlIGZpbGUgZnJvbSB0aGUgcGFnZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBJRmlsZSBnZXRNb2RlbEZpbGUoKSB7DQorCQlyZXR1cm4gbmV3RmlsZUNyZWF0aW9uUGFnZS5nZXRNb2RlbEZpbGUoKTsNCisJfQ0KKw0KK30NCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS90cmlnZ2VyL3ByZXNlbnRhdGlvbi9UcmlnZ2VyQWN0aW9uQmFyQ29udHJpYnV0b3IuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3RyaWdnZXIvcHJlc2VudGF0aW9uL1RyaWdnZXJBY3Rpb25CYXJDb250cmlidXRvci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUyZDExNmIKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS90cmlnZ2VyL3ByZXNlbnRhdGlvbi9UcmlnZ2VyQWN0aW9uQmFyQ29udHJpYnV0b3IuamF2YQpAQCAtMCwwICsxLDQzMSBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUudHJpZ2dlci5wcmVzZW50YXRpb247CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udWkudmlld2VyLklWaWV3ZXJQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5kb21haW4uRWRpdGluZ0RvbWFpbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5kb21haW4uSUVkaXRpbmdEb21haW5Qcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5hY3Rpb24uQ29udHJvbEFjdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5hY3Rpb24uQ3JlYXRlQ2hpbGRBY3Rpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkuYWN0aW9uLkNyZWF0ZVNpYmxpbmdBY3Rpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkuYWN0aW9uLkVkaXRpbmdEb21haW5BY3Rpb25CYXJDb250cmlidXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5hY3Rpb24uTG9hZFJlc291cmNlQWN0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmFjdGlvbi5WYWxpZGF0ZUFjdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uQWN0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5BY3Rpb25Db250cmlidXRpb25JdGVtOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JQWN0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JQ29udHJpYnV0aW9uSXRlbTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSUNvbnRyaWJ1dGlvbk1hbmFnZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklNZW51TGlzdGVuZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklNZW51TWFuYWdlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSVRvb2xCYXJNYW5hZ2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5NZW51TWFuYWdlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uU2VwYXJhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5TdWJDb250cmlidXRpb25JdGVtOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU3RydWN0dXJlZFNlbGVjdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlNlbGVjdGlvbkNoYW5nZWRFdmVudDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlZpZXdlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLnByZXNlbnRhdGlvbi5Db3JlRWRpdG9yUGx1Z2luOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklFZGl0b3JQYXJ0OworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLlBhcnRJbml0RXhjZXB0aW9uOworCisvKioKKyAqIFRoaXMgaXMgdGhlIGFjdGlvbiBiYXIgY29udHJpYnV0b3IgZm9yIHRoZSBUcmlnZ2VyIG1vZGVsIGVkaXRvci4KKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBnZW5lcmF0ZWQKKyAqLworQFN1cHByZXNzV2FybmluZ3MoImFsbCIpCitwdWJsaWMgY2xhc3MgVHJpZ2dlckFjdGlvbkJhckNvbnRyaWJ1dG9yCisJZXh0ZW5kcyBFZGl0aW5nRG9tYWluQWN0aW9uQmFyQ29udHJpYnV0b3IKKwlpbXBsZW1lbnRzIElTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIgeworCS8qKgorCSAqIFRoaXMga2VlcHMgdHJhY2sgb2YgdGhlIGFjdGl2ZSBlZGl0b3IuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIElFZGl0b3JQYXJ0IGFjdGl2ZUVkaXRvclBhcnQ7CisKKwkvKioKKwkgKiBUaGlzIGtlZXBzIHRyYWNrIG9mIHRoZSBjdXJyZW50IHNlbGVjdGlvbiBwcm92aWRlci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgSVNlbGVjdGlvblByb3ZpZGVyIHNlbGVjdGlvblByb3ZpZGVyOworCisJLyoqCisJICogVGhpcyBhY3Rpb24gb3BlbnMgdGhlIFByb3BlcnRpZXMgdmlldy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgSUFjdGlvbiBzaG93UHJvcGVydGllc1ZpZXdBY3Rpb24gPQorCQluZXcgQWN0aW9uKENvcmVFZGl0b3JQbHVnaW4uSU5TVEFOQ0UuZ2V0U3RyaW5nKCJfVUlfU2hvd1Byb3BlcnRpZXNWaWV3X21lbnVfaXRlbSIpKSAvLyROT04tTkxTLTEkCisJCXsKKwkJCUBPdmVycmlkZQorCQkJcHVibGljIHZvaWQgcnVuKCkgeworCQkJCXRyeSB7CisJCQkJCWdldFBhZ2UoKS5zaG93Vmlldygib3JnLmVjbGlwc2UudWkudmlld3MuUHJvcGVydHlTaGVldCIpOyAvLyROT04tTkxTLTEkCisJCQkJfQorCQkJCWNhdGNoIChQYXJ0SW5pdEV4Y2VwdGlvbiBleGNlcHRpb24pIHsKKwkJCQkJQ29yZUVkaXRvclBsdWdpbi5JTlNUQU5DRS5sb2coZXhjZXB0aW9uKTsKKwkJCQl9CisJCQl9CisJCX07CisKKwkvKioKKwkgKiBUaGlzIGFjdGlvbiByZWZyZXNoZXMgdGhlIHZpZXdlciBvZiB0aGUgY3VycmVudCBlZGl0b3IgaWYgdGhlIGVkaXRvcgorCSAqIGltcGxlbWVudHMge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5jb21tb24udWkudmlld2VyLklWaWV3ZXJQcm92aWRlcn0uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIElBY3Rpb24gcmVmcmVzaFZpZXdlckFjdGlvbiA9CisJCW5ldyBBY3Rpb24oQ29yZUVkaXRvclBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoIl9VSV9SZWZyZXNoVmlld2VyX21lbnVfaXRlbSIpKSAvLyROT04tTkxTLTEkCisJCXsKKwkJCUBPdmVycmlkZQorCQkJcHVibGljIGJvb2xlYW4gaXNFbmFibGVkKCkgeworCQkJCXJldHVybiBhY3RpdmVFZGl0b3JQYXJ0IGluc3RhbmNlb2YgSVZpZXdlclByb3ZpZGVyOworCQkJfQorCisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyB2b2lkIHJ1bigpIHsKKwkJCQlpZiAoYWN0aXZlRWRpdG9yUGFydCBpbnN0YW5jZW9mIElWaWV3ZXJQcm92aWRlcikgeworCQkJCQlWaWV3ZXIgdmlld2VyID0gKChJVmlld2VyUHJvdmlkZXIpYWN0aXZlRWRpdG9yUGFydCkuZ2V0Vmlld2VyKCk7CisJCQkJCWlmICh2aWV3ZXIgIT0gbnVsbCkgeworCQkJCQkJdmlld2VyLnJlZnJlc2goKTsKKwkJCQkJfQorCQkJCX0KKwkJCX0KKwkJfTsKKworCS8qKgorCSAqIFRoaXMgd2lsbCBjb250YWluIG9uZSB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkuYWN0aW9uLkNyZWF0ZUNoaWxkQWN0aW9ufSBjb3JyZXNwb25kaW5nIHRvIGVhY2ggZGVzY3JpcHRvcgorCSAqIGdlbmVyYXRlZCBmb3IgdGhlIGN1cnJlbnQgc2VsZWN0aW9uIGJ5IHRoZSBpdGVtIHByb3ZpZGVyLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBDb2xsZWN0aW9uPElBY3Rpb24+IGNyZWF0ZUNoaWxkQWN0aW9uczsKKworCS8qKgorCSAqIFRoaXMgaXMgdGhlIG1lbnUgbWFuYWdlciBpbnRvIHdoaWNoIG1lbnUgY29udHJpYnV0aW9uIGl0ZW1zIHNob3VsZCBiZSBhZGRlZCBmb3IgQ3JlYXRlQ2hpbGQgYWN0aW9ucy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgSU1lbnVNYW5hZ2VyIGNyZWF0ZUNoaWxkTWVudU1hbmFnZXI7CisKKwkvKioKKwkgKiBUaGlzIHdpbGwgY29udGFpbiBvbmUge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmFjdGlvbi5DcmVhdGVTaWJsaW5nQWN0aW9ufSBjb3JyZXNwb25kaW5nIHRvIGVhY2ggZGVzY3JpcHRvcgorCSAqIGdlbmVyYXRlZCBmb3IgdGhlIGN1cnJlbnQgc2VsZWN0aW9uIGJ5IHRoZSBpdGVtIHByb3ZpZGVyLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBDb2xsZWN0aW9uPElBY3Rpb24+IGNyZWF0ZVNpYmxpbmdBY3Rpb25zOworCisJLyoqCisJICogVGhpcyBpcyB0aGUgbWVudSBtYW5hZ2VyIGludG8gd2hpY2ggbWVudSBjb250cmlidXRpb24gaXRlbXMgc2hvdWxkIGJlIGFkZGVkIGZvciBDcmVhdGVTaWJsaW5nIGFjdGlvbnMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIElNZW51TWFuYWdlciBjcmVhdGVTaWJsaW5nTWVudU1hbmFnZXI7CisKKwkvKioKKwkgKiBUaGlzIGNyZWF0ZXMgYW4gaW5zdGFuY2Ugb2YgdGhlIGNvbnRyaWJ1dG9yLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBUcmlnZ2VyQWN0aW9uQmFyQ29udHJpYnV0b3IoKSB7CisJCXN1cGVyKEFERElUSU9OU19MQVNUX1NUWUxFKTsKKwkJbG9hZFJlc291cmNlQWN0aW9uID0gbmV3IExvYWRSZXNvdXJjZUFjdGlvbigpOworCQl2YWxpZGF0ZUFjdGlvbiA9IG5ldyBWYWxpZGF0ZUFjdGlvbigpOworCQljb250cm9sQWN0aW9uID0gbmV3IENvbnRyb2xBY3Rpb24oKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFkZHMgU2VwYXJhdG9ycyBmb3IgZWRpdG9yIGFkZGl0aW9ucyB0byB0aGUgdG9vbCBiYXIuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgY29udHJpYnV0ZVRvVG9vbEJhcihJVG9vbEJhck1hbmFnZXIgdG9vbEJhck1hbmFnZXIpIHsKKwkJdG9vbEJhck1hbmFnZXIuYWRkKG5ldyBTZXBhcmF0b3IoInRyaWdnZXItc2V0dGluZ3MiKSk7IC8vJE5PTi1OTFMtMSQKKwkJdG9vbEJhck1hbmFnZXIuYWRkKG5ldyBTZXBhcmF0b3IoInRyaWdnZXItYWRkaXRpb25zIikpOyAvLyROT04tTkxTLTEkCisJfQorCisJLyoqCisJICogVGhpcyBhZGRzIHRvIHRoZSBtZW51IGJhciBhIG1lbnUgYW5kIHNvbWUgc2VwYXJhdG9ycyBmb3IgZWRpdG9yIGFkZGl0aW9ucywKKwkgKiBhcyB3ZWxsIGFzIHRoZSBzdWItbWVudXMgZm9yIG9iamVjdCBjcmVhdGlvbiBpdGVtcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBjb250cmlidXRlVG9NZW51KElNZW51TWFuYWdlciBtZW51TWFuYWdlcikgeworCQlzdXBlci5jb250cmlidXRlVG9NZW51KG1lbnVNYW5hZ2VyKTsKKworCQlJTWVudU1hbmFnZXIgc3VibWVudU1hbmFnZXIgPSBuZXcgTWVudU1hbmFnZXIoQ29yZUVkaXRvclBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoIl9VSV9UcmlnZ2VyRWRpdG9yX21lbnUiKSwgIm9yZy5lY2xpcHNlLnN0ZW0uY29yZS50cmlnZ2VyTWVudUlEIik7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAorCQltZW51TWFuYWdlci5pbnNlcnRBZnRlcigiYWRkaXRpb25zIiwgc3VibWVudU1hbmFnZXIpOyAvLyROT04tTkxTLTEkCisJCXN1Ym1lbnVNYW5hZ2VyLmFkZChuZXcgU2VwYXJhdG9yKCJzZXR0aW5ncyIpKTsgLy8kTk9OLU5MUy0xJAorCQlzdWJtZW51TWFuYWdlci5hZGQobmV3IFNlcGFyYXRvcigiYWN0aW9ucyIpKTsgLy8kTk9OLU5MUy0xJAorCQlzdWJtZW51TWFuYWdlci5hZGQobmV3IFNlcGFyYXRvcigiYWRkaXRpb25zIikpOyAvLyROT04tTkxTLTEkCisJCXN1Ym1lbnVNYW5hZ2VyLmFkZChuZXcgU2VwYXJhdG9yKCJhZGRpdGlvbnMtZW5kIikpOyAvLyROT04tTkxTLTEkCisKKwkJLy8gUHJlcGFyZSBmb3IgQ3JlYXRlQ2hpbGQgaXRlbSBhZGRpdGlvbiBvciByZW1vdmFsLgorCQkvLworCQljcmVhdGVDaGlsZE1lbnVNYW5hZ2VyID0gbmV3IE1lbnVNYW5hZ2VyKENvcmVFZGl0b3JQbHVnaW4uSU5TVEFOQ0UuZ2V0U3RyaW5nKCJfVUlfQ3JlYXRlQ2hpbGRfbWVudV9pdGVtIikpOyAvLyROT04tTkxTLTEkCisJCXN1Ym1lbnVNYW5hZ2VyLmluc2VydEJlZm9yZSgiYWRkaXRpb25zIiwgY3JlYXRlQ2hpbGRNZW51TWFuYWdlcik7IC8vJE5PTi1OTFMtMSQKKworCQkvLyBQcmVwYXJlIGZvciBDcmVhdGVTaWJsaW5nIGl0ZW0gYWRkaXRpb24gb3IgcmVtb3ZhbC4KKwkJLy8KKwkJY3JlYXRlU2libGluZ01lbnVNYW5hZ2VyID0gbmV3IE1lbnVNYW5hZ2VyKENvcmVFZGl0b3JQbHVnaW4uSU5TVEFOQ0UuZ2V0U3RyaW5nKCJfVUlfQ3JlYXRlU2libGluZ19tZW51X2l0ZW0iKSk7IC8vJE5PTi1OTFMtMSQKKwkJc3VibWVudU1hbmFnZXIuaW5zZXJ0QmVmb3JlKCJhZGRpdGlvbnMiLCBjcmVhdGVTaWJsaW5nTWVudU1hbmFnZXIpOyAvLyROT04tTkxTLTEkCisKKwkJLy8gRm9yY2UgYW4gdXBkYXRlIGJlY2F1c2UgRWNsaXBzZSBoaWRlcyBlbXB0eSBtZW51cyBub3cuCisJCS8vCisJCXN1Ym1lbnVNYW5hZ2VyLmFkZE1lbnVMaXN0ZW5lcgorCQkJKG5ldyBJTWVudUxpc3RlbmVyKCkgeworCQkJCSBwdWJsaWMgdm9pZCBtZW51QWJvdXRUb1Nob3coSU1lbnVNYW5hZ2VyIG1lbnVNYW5hZ2VyKSB7CisJCQkJCSBtZW51TWFuYWdlci51cGRhdGVBbGwodHJ1ZSk7CisJCQkJIH0KKwkJCSB9KTsKKworCQlhZGRHbG9iYWxBY3Rpb25zKHN1Ym1lbnVNYW5hZ2VyKTsKKwl9CisKKwkvKioKKwkgKiBXaGVuIHRoZSBhY3RpdmUgZWRpdG9yIGNoYW5nZXMsIHRoaXMgcmVtZW1iZXJzIHRoZSBjaGFuZ2UgYW5kIHJlZ2lzdGVycyB3aXRoIGl0IGFzIGEgc2VsZWN0aW9uIHByb3ZpZGVyLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIHNldEFjdGl2ZUVkaXRvcihJRWRpdG9yUGFydCBwYXJ0KSB7CisJCXN1cGVyLnNldEFjdGl2ZUVkaXRvcihwYXJ0KTsKKwkJYWN0aXZlRWRpdG9yUGFydCA9IHBhcnQ7CisKKwkJLy8gU3dpdGNoIHRvIHRoZSBuZXcgc2VsZWN0aW9uIHByb3ZpZGVyLgorCQkvLworCQlpZiAoc2VsZWN0aW9uUHJvdmlkZXIgIT0gbnVsbCkgeworCQkJc2VsZWN0aW9uUHJvdmlkZXIucmVtb3ZlU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyKHRoaXMpOworCQl9CisJCWlmIChwYXJ0ID09IG51bGwpIHsKKwkJCXNlbGVjdGlvblByb3ZpZGVyID0gbnVsbDsKKwkJfQorCQllbHNlIHsKKwkJCXNlbGVjdGlvblByb3ZpZGVyID0gcGFydC5nZXRTaXRlKCkuZ2V0U2VsZWN0aW9uUHJvdmlkZXIoKTsKKwkJCXNlbGVjdGlvblByb3ZpZGVyLmFkZFNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcih0aGlzKTsKKworCQkJLy8gRmFrZSBhIHNlbGVjdGlvbiBjaGFuZ2VkIGV2ZW50IHRvIHVwZGF0ZSB0aGUgbWVudXMuCisJCQkvLworCQkJaWYgKHNlbGVjdGlvblByb3ZpZGVyLmdldFNlbGVjdGlvbigpICE9IG51bGwpIHsKKwkJCQlzZWxlY3Rpb25DaGFuZ2VkKG5ldyBTZWxlY3Rpb25DaGFuZ2VkRXZlbnQoc2VsZWN0aW9uUHJvdmlkZXIsIHNlbGVjdGlvblByb3ZpZGVyLmdldFNlbGVjdGlvbigpKSk7CisJCQl9CisJCX0KKwl9CisKKwkvKioKKwkgKiBUaGlzIGltcGxlbWVudHMge0BsaW5rIG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcn0sCisJICogaGFuZGxpbmcge0BsaW5rIG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuU2VsZWN0aW9uQ2hhbmdlZEV2ZW50fXMgYnkgcXVlcnlpbmcgZm9yIHRoZSBjaGlsZHJlbiBhbmQgc2libGluZ3MKKwkgKiB0aGF0IGNhbiBiZSBhZGRlZCB0byB0aGUgc2VsZWN0ZWQgb2JqZWN0IGFuZCB1cGRhdGluZyB0aGUgbWVudXMgYWNjb3JkaW5nbHkuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgc2VsZWN0aW9uQ2hhbmdlZChTZWxlY3Rpb25DaGFuZ2VkRXZlbnQgZXZlbnQpIHsKKwkJLy8gUmVtb3ZlIGFueSBtZW51IGl0ZW1zIGZvciBvbGQgc2VsZWN0aW9uLgorCQkvLworCQlpZiAoY3JlYXRlQ2hpbGRNZW51TWFuYWdlciAhPSBudWxsKSB7CisJCQlkZXBvcHVsYXRlTWFuYWdlcihjcmVhdGVDaGlsZE1lbnVNYW5hZ2VyLCBjcmVhdGVDaGlsZEFjdGlvbnMpOworCQl9CisJCWlmIChjcmVhdGVTaWJsaW5nTWVudU1hbmFnZXIgIT0gbnVsbCkgeworCQkJZGVwb3B1bGF0ZU1hbmFnZXIoY3JlYXRlU2libGluZ01lbnVNYW5hZ2VyLCBjcmVhdGVTaWJsaW5nQWN0aW9ucyk7CisJCX0KKworCQkvLyBRdWVyeSB0aGUgbmV3IHNlbGVjdGlvbiBmb3IgYXBwcm9wcmlhdGUgbmV3IGNoaWxkL3NpYmxpbmcgZGVzY3JpcHRvcnMKKwkJLy8KKwkJQ29sbGVjdGlvbjw/PiBuZXdDaGlsZERlc2NyaXB0b3JzID0gbnVsbDsKKwkJQ29sbGVjdGlvbjw/PiBuZXdTaWJsaW5nRGVzY3JpcHRvcnMgPSBudWxsOworCisJCUlTZWxlY3Rpb24gc2VsZWN0aW9uID0gZXZlbnQuZ2V0U2VsZWN0aW9uKCk7CisJCWlmIChzZWxlY3Rpb24gaW5zdGFuY2VvZiBJU3RydWN0dXJlZFNlbGVjdGlvbiAmJiAoKElTdHJ1Y3R1cmVkU2VsZWN0aW9uKXNlbGVjdGlvbikuc2l6ZSgpID09IDEpIHsKKwkJCU9iamVjdCBvYmplY3QgPSAoKElTdHJ1Y3R1cmVkU2VsZWN0aW9uKXNlbGVjdGlvbikuZ2V0Rmlyc3RFbGVtZW50KCk7CisKKwkJCUVkaXRpbmdEb21haW4gZG9tYWluID0gKChJRWRpdGluZ0RvbWFpblByb3ZpZGVyKWFjdGl2ZUVkaXRvclBhcnQpLmdldEVkaXRpbmdEb21haW4oKTsKKworCQkJbmV3Q2hpbGREZXNjcmlwdG9ycyA9IGRvbWFpbi5nZXROZXdDaGlsZERlc2NyaXB0b3JzKG9iamVjdCwgbnVsbCk7CisJCQluZXdTaWJsaW5nRGVzY3JpcHRvcnMgPSBkb21haW4uZ2V0TmV3Q2hpbGREZXNjcmlwdG9ycyhudWxsLCBvYmplY3QpOworCQl9CisKKwkJLy8gR2VuZXJhdGUgYWN0aW9ucyBmb3Igc2VsZWN0aW9uOyBwb3B1bGF0ZSBhbmQgcmVkcmF3IHRoZSBtZW51cy4KKwkJLy8KKwkJY3JlYXRlQ2hpbGRBY3Rpb25zID0gZ2VuZXJhdGVDcmVhdGVDaGlsZEFjdGlvbnMobmV3Q2hpbGREZXNjcmlwdG9ycywgc2VsZWN0aW9uKTsKKwkJY3JlYXRlU2libGluZ0FjdGlvbnMgPSBnZW5lcmF0ZUNyZWF0ZVNpYmxpbmdBY3Rpb25zKG5ld1NpYmxpbmdEZXNjcmlwdG9ycywgc2VsZWN0aW9uKTsKKworCQlpZiAoY3JlYXRlQ2hpbGRNZW51TWFuYWdlciAhPSBudWxsKSB7CisJCQlwb3B1bGF0ZU1hbmFnZXIoY3JlYXRlQ2hpbGRNZW51TWFuYWdlciwgY3JlYXRlQ2hpbGRBY3Rpb25zLCBudWxsKTsKKwkJCWNyZWF0ZUNoaWxkTWVudU1hbmFnZXIudXBkYXRlKHRydWUpOworCQl9CisJCWlmIChjcmVhdGVTaWJsaW5nTWVudU1hbmFnZXIgIT0gbnVsbCkgeworCQkJcG9wdWxhdGVNYW5hZ2VyKGNyZWF0ZVNpYmxpbmdNZW51TWFuYWdlciwgY3JlYXRlU2libGluZ0FjdGlvbnMsIG51bGwpOworCQkJY3JlYXRlU2libGluZ01lbnVNYW5hZ2VyLnVwZGF0ZSh0cnVlKTsKKwkJfQorCX0KKworCS8qKgorCSAqIFRoaXMgZ2VuZXJhdGVzIGEge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmFjdGlvbi5DcmVhdGVDaGlsZEFjdGlvbn0gZm9yIGVhY2ggb2JqZWN0IGluIDxjb2RlPmRlc2NyaXB0b3JzPC9jb2RlPiwKKwkgKiBhbmQgcmV0dXJucyB0aGUgY29sbGVjdGlvbiBvZiB0aGVzZSBhY3Rpb25zLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBDb2xsZWN0aW9uPElBY3Rpb24+IGdlbmVyYXRlQ3JlYXRlQ2hpbGRBY3Rpb25zKENvbGxlY3Rpb248Pz4gZGVzY3JpcHRvcnMsIElTZWxlY3Rpb24gc2VsZWN0aW9uKSB7CisJCUNvbGxlY3Rpb248SUFjdGlvbj4gYWN0aW9ucyA9IG5ldyBBcnJheUxpc3Q8SUFjdGlvbj4oKTsKKwkJaWYgKGRlc2NyaXB0b3JzICE9IG51bGwpIHsKKwkJCWZvciAoT2JqZWN0IGRlc2NyaXB0b3IgOiBkZXNjcmlwdG9ycykgeworCQkJCWFjdGlvbnMuYWRkKG5ldyBDcmVhdGVDaGlsZEFjdGlvbihhY3RpdmVFZGl0b3JQYXJ0LCBzZWxlY3Rpb24sIGRlc2NyaXB0b3IpKTsKKwkJCX0KKwkJfQorCQlyZXR1cm4gYWN0aW9uczsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGdlbmVyYXRlcyBhIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5hY3Rpb24uQ3JlYXRlU2libGluZ0FjdGlvbn0gZm9yIGVhY2ggb2JqZWN0IGluIDxjb2RlPmRlc2NyaXB0b3JzPC9jb2RlPiwKKwkgKiBhbmQgcmV0dXJucyB0aGUgY29sbGVjdGlvbiBvZiB0aGVzZSBhY3Rpb25zLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBDb2xsZWN0aW9uPElBY3Rpb24+IGdlbmVyYXRlQ3JlYXRlU2libGluZ0FjdGlvbnMoQ29sbGVjdGlvbjw/PiBkZXNjcmlwdG9ycywgSVNlbGVjdGlvbiBzZWxlY3Rpb24pIHsKKwkJQ29sbGVjdGlvbjxJQWN0aW9uPiBhY3Rpb25zID0gbmV3IEFycmF5TGlzdDxJQWN0aW9uPigpOworCQlpZiAoZGVzY3JpcHRvcnMgIT0gbnVsbCkgeworCQkJZm9yIChPYmplY3QgZGVzY3JpcHRvciA6IGRlc2NyaXB0b3JzKSB7CisJCQkJYWN0aW9ucy5hZGQobmV3IENyZWF0ZVNpYmxpbmdBY3Rpb24oYWN0aXZlRWRpdG9yUGFydCwgc2VsZWN0aW9uLCBkZXNjcmlwdG9yKSk7CisJCQl9CisJCX0KKwkJcmV0dXJuIGFjdGlvbnM7CisJfQorCisJLyoqCisJICogVGhpcyBwb3B1bGF0ZXMgdGhlIHNwZWNpZmllZCA8Y29kZT5tYW5hZ2VyPC9jb2RlPiB3aXRoIHtAbGluayBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uQWN0aW9uQ29udHJpYnV0aW9uSXRlbX1zCisJICogYmFzZWQgb24gdGhlIHtAbGluayBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSUFjdGlvbn1zIGNvbnRhaW5lZCBpbiB0aGUgPGNvZGU+YWN0aW9uczwvY29kZT4gY29sbGVjdGlvbiwKKwkgKiBieSBpbnNlcnRpbmcgdGhlbSBiZWZvcmUgdGhlIHNwZWNpZmllZCBjb250cmlidXRpb24gaXRlbSA8Y29kZT5jb250cmlidXRpb25JRDwvY29kZT4uCisJICogSWYgPGNvZGU+Y29udHJpYnV0aW9uSUQ8L2NvZGU+IGlzIDxjb2RlPm51bGw8L2NvZGU+LCB0aGV5IGFyZSBzaW1wbHkgYWRkZWQuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgcG9wdWxhdGVNYW5hZ2VyKElDb250cmlidXRpb25NYW5hZ2VyIG1hbmFnZXIsIENvbGxlY3Rpb248PyBleHRlbmRzIElBY3Rpb24+IGFjdGlvbnMsIFN0cmluZyBjb250cmlidXRpb25JRCkgeworCQlpZiAoYWN0aW9ucyAhPSBudWxsKSB7CisJCQlmb3IgKElBY3Rpb24gYWN0aW9uIDogYWN0aW9ucykgeworCQkJCWlmIChjb250cmlidXRpb25JRCAhPSBudWxsKSB7CisJCQkJCW1hbmFnZXIuaW5zZXJ0QmVmb3JlKGNvbnRyaWJ1dGlvbklELCBhY3Rpb24pOworCQkJCX0KKwkJCQllbHNlIHsKKwkJCQkJbWFuYWdlci5hZGQoYWN0aW9uKTsKKwkJCQl9CisJCQl9CisJCX0KKwl9CisJCQorCS8qKgorCSAqIFRoaXMgcmVtb3ZlcyBmcm9tIHRoZSBzcGVjaWZpZWQgPGNvZGU+bWFuYWdlcjwvY29kZT4gYWxsIHtAbGluayBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uQWN0aW9uQ29udHJpYnV0aW9uSXRlbX1zCisJICogYmFzZWQgb24gdGhlIHtAbGluayBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSUFjdGlvbn1zIGNvbnRhaW5lZCBpbiB0aGUgPGNvZGU+YWN0aW9uczwvY29kZT4gY29sbGVjdGlvbi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBkZXBvcHVsYXRlTWFuYWdlcihJQ29udHJpYnV0aW9uTWFuYWdlciBtYW5hZ2VyLCBDb2xsZWN0aW9uPD8gZXh0ZW5kcyBJQWN0aW9uPiBhY3Rpb25zKSB7CisJCWlmIChhY3Rpb25zICE9IG51bGwpIHsKKwkJCUlDb250cmlidXRpb25JdGVtW10gaXRlbXMgPSBtYW5hZ2VyLmdldEl0ZW1zKCk7CisJCQlmb3IgKGludCBpID0gMDsgaSA8IGl0ZW1zLmxlbmd0aDsgaSsrKSB7CisJCQkJLy8gTG9vayBpbnRvIFN1YkNvbnRyaWJ1dGlvbkl0ZW1zCisJCQkJLy8KKwkJCQlJQ29udHJpYnV0aW9uSXRlbSBjb250cmlidXRpb25JdGVtID0gaXRlbXNbaV07CisJCQkJd2hpbGUgKGNvbnRyaWJ1dGlvbkl0ZW0gaW5zdGFuY2VvZiBTdWJDb250cmlidXRpb25JdGVtKSB7CisJCQkJCWNvbnRyaWJ1dGlvbkl0ZW0gPSAoKFN1YkNvbnRyaWJ1dGlvbkl0ZW0pY29udHJpYnV0aW9uSXRlbSkuZ2V0SW5uZXJJdGVtKCk7CisJCQkJfQorCisJCQkJLy8gRGVsZXRlIHRoZSBBY3Rpb25Db250cmlidXRpb25JdGVtcyB3aXRoIG1hdGNoaW5nIGFjdGlvbi4KKwkJCQkvLworCQkJCWlmIChjb250cmlidXRpb25JdGVtIGluc3RhbmNlb2YgQWN0aW9uQ29udHJpYnV0aW9uSXRlbSkgeworCQkJCQlJQWN0aW9uIGFjdGlvbiA9ICgoQWN0aW9uQ29udHJpYnV0aW9uSXRlbSljb250cmlidXRpb25JdGVtKS5nZXRBY3Rpb24oKTsKKwkJCQkJaWYgKGFjdGlvbnMuY29udGFpbnMoYWN0aW9uKSkgeworCQkJCQkJbWFuYWdlci5yZW1vdmUoY29udHJpYnV0aW9uSXRlbSk7CisJCQkJCX0KKwkJCQl9CisJCQl9CisJCX0KKwl9CisKKwkvKioKKwkgKiBUaGlzIHBvcHVsYXRlcyB0aGUgcG9wLXVwIG1lbnUgYmVmb3JlIGl0IGFwcGVhcnMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgbWVudUFib3V0VG9TaG93KElNZW51TWFuYWdlciBtZW51TWFuYWdlcikgeworCQlzdXBlci5tZW51QWJvdXRUb1Nob3cobWVudU1hbmFnZXIpOworCQlNZW51TWFuYWdlciBzdWJtZW51TWFuYWdlciA9IG51bGw7CisKKwkJc3VibWVudU1hbmFnZXIgPSBuZXcgTWVudU1hbmFnZXIoQ29yZUVkaXRvclBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoIl9VSV9DcmVhdGVDaGlsZF9tZW51X2l0ZW0iKSk7IC8vJE5PTi1OTFMtMSQKKwkJcG9wdWxhdGVNYW5hZ2VyKHN1Ym1lbnVNYW5hZ2VyLCBjcmVhdGVDaGlsZEFjdGlvbnMsIG51bGwpOworCQltZW51TWFuYWdlci5pbnNlcnRCZWZvcmUoImVkaXQiLCBzdWJtZW51TWFuYWdlcik7IC8vJE5PTi1OTFMtMSQKKworCQlzdWJtZW51TWFuYWdlciA9IG5ldyBNZW51TWFuYWdlcihDb3JlRWRpdG9yUGx1Z2luLklOU1RBTkNFLmdldFN0cmluZygiX1VJX0NyZWF0ZVNpYmxpbmdfbWVudV9pdGVtIikpOyAvLyROT04tTkxTLTEkCisJCXBvcHVsYXRlTWFuYWdlcihzdWJtZW51TWFuYWdlciwgY3JlYXRlU2libGluZ0FjdGlvbnMsIG51bGwpOworCQltZW51TWFuYWdlci5pbnNlcnRCZWZvcmUoImVkaXQiLCBzdWJtZW51TWFuYWdlcik7IC8vJE5PTi1OTFMtMSQKKwl9CisKKwkvKioKKwkgKiBUaGlzIGluc2VydHMgZ2xvYmFsIGFjdGlvbnMgYmVmb3JlIHRoZSAiYWRkaXRpb25zLWVuZCIgc2VwYXJhdG9yLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIGFkZEdsb2JhbEFjdGlvbnMoSU1lbnVNYW5hZ2VyIG1lbnVNYW5hZ2VyKSB7CisJCW1lbnVNYW5hZ2VyLmluc2VydEFmdGVyKCJhZGRpdGlvbnMtZW5kIiwgbmV3IFNlcGFyYXRvcigidWktYWN0aW9ucyIpKTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCisJCW1lbnVNYW5hZ2VyLmluc2VydEFmdGVyKCJ1aS1hY3Rpb25zIiwgc2hvd1Byb3BlcnRpZXNWaWV3QWN0aW9uKTsgLy8kTk9OLU5MUy0xJAorCisJCXJlZnJlc2hWaWV3ZXJBY3Rpb24uc2V0RW5hYmxlZChyZWZyZXNoVmlld2VyQWN0aW9uLmlzRW5hYmxlZCgpKTsJCQorCQltZW51TWFuYWdlci5pbnNlcnRBZnRlcigidWktYWN0aW9ucyIsIHJlZnJlc2hWaWV3ZXJBY3Rpb24pOyAvLyROT04tTkxTLTEkCisKKwkJc3VwZXIuYWRkR2xvYmFsQWN0aW9ucyhtZW51TWFuYWdlcik7CisJfQorCisJLyoqCisJICogVGhpcyBlbnN1cmVzIHRoYXQgYSBkZWxldGUgYWN0aW9uIHdpbGwgY2xlYW4gdXAgYWxsIHJlZmVyZW5jZXMgdG8gZGVsZXRlZCBvYmplY3RzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCBib29sZWFuIHJlbW92ZUFsbFJlZmVyZW5jZXNPbkRlbGV0ZSgpIHsKKwkJcmV0dXJuIHRydWU7CisJfQorCit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvdHJpZ2dlci9wcmVzZW50YXRpb24vVHJpZ2dlckVkaXRvci5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvdHJpZ2dlci9wcmVzZW50YXRpb24vVHJpZ2dlckVkaXRvci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMzNTJmZjEKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS90cmlnZ2VyL3ByZXNlbnRhdGlvbi9UcmlnZ2VyRWRpdG9yLmphdmEKQEAgLTAsMCArMSwxNjQxIEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS50cmlnZ2VyLnByZXNlbnRhdGlvbjsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOworaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW07CitpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbnM7CitpbXBvcnQgamF2YS51dGlsLkV2ZW50T2JqZWN0OworaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOworaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKK2ltcG9ydCBqYXZhLnV0aWwuTGlua2VkSGFzaE1hcDsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuTWFwOworCitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUZpbGU7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSU1hcmtlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUmVzb3VyY2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVJlc291cmNlQ2hhbmdlRXZlbnQ7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVJlc291cmNlQ2hhbmdlTGlzdGVuZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVJlc291cmNlRGVsdGE7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVJlc291cmNlRGVsdGFWaXNpdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLlJlc291cmNlc1BsdWdpbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQ29yZUV4Y2VwdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVBhdGg7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQcm9ncmVzc01vbml0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLk51bGxQcm9ncmVzc01vbml0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5jb21tYW5kLkJhc2ljQ29tbWFuZFN0YWNrOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24uY29tbWFuZC5Db21tYW5kOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24uY29tbWFuZC5Db21tYW5kU3RhY2s7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5jb21tYW5kLkNvbW1hbmRTdGFja0xpc3RlbmVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LkFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnVpLk1hcmtlckhlbHBlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnVpLmVkaXRvci5Qcm9ibGVtRWRpdG9yUGFydDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnVpLnZpZXdlci5JVmlld2VyUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLkJhc2ljRGlhZ25vc3RpYzsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuRGlhZ25vc3RpYzsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuVVJJOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FVmFsaWRhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5wcm92aWRlci5FY29yZUl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5yZXNvdXJjZS5SZXNvdXJjZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUucmVzb3VyY2UuUmVzb3VyY2VTZXQ7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnV0aWwuRUNvbnRlbnRBZGFwdGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS51dGlsLkVjb3JlVXRpbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5kb21haW4uQWRhcHRlckZhY3RvcnlFZGl0aW5nRG9tYWluOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LmRvbWFpbi5FZGl0aW5nRG9tYWluOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LmRvbWFpbi5JRWRpdGluZ0RvbWFpblByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkFkYXB0ZXJGYWN0b3J5SXRlbURlbGVnYXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5Db21wb3NlZEFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLlJlZmxlY3RpdmVJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5yZXNvdXJjZS5SZXNvdXJjZUl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmFjdGlvbi5FZGl0aW5nRG9tYWluQWN0aW9uQmFyQ29udHJpYnV0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkuY2VsbGVkaXRvci5BZGFwdGVyRmFjdG9yeVRyZWVFZGl0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkuZG5kLkVkaXRpbmdEb21haW5WaWV3ZXJEcm9wQWRhcHRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5kbmQuTG9jYWxUcmFuc2ZlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5kbmQuVmlld2VyRHJhZ0FkYXB0ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkucHJvdmlkZXIuQWRhcHRlckZhY3RvcnlDb250ZW50UHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkucHJvdmlkZXIuQWRhcHRlckZhY3RvcnlMYWJlbFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLnByb3ZpZGVyLlVud3JhcHBpbmdTZWxlY3Rpb25Qcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS51dGlsLkVkaXRVSU1hcmtlckhlbHBlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS51dGlsLkVkaXRVSVV0aWw7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkudmlldy5FeHRlbmRlZFByb3BlcnR5U2hlZXRQYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JTWVudUxpc3RlbmVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JTWVudU1hbmFnZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklTdGF0dXNMaW5lTWFuYWdlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSVRvb2xCYXJNYW5hZ2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5NZW51TWFuYWdlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uU2VwYXJhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmRpYWxvZ3MuTWVzc2FnZURpYWxvZzsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5kaWFsb2dzLlByb2dyZXNzTW9uaXRvckRpYWxvZzsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS51dGlsLkxvY2FsU2VsZWN0aW9uVHJhbnNmZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb25Qcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTdHJ1Y3R1cmVkU2VsZWN0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuU2VsZWN0aW9uQ2hhbmdlZEV2ZW50OworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuU3RydWN0dXJlZFNlbGVjdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlN0cnVjdHVyZWRWaWV3ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5UcmVlVmlld2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuVmlld2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5TVEVNWE1JUmVzb3VyY2VGYWN0b3J5SW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLnByZXNlbnRhdGlvbi5Db3JlRWRpdG9yUGx1Z2luOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24ucHJvdmlkZXIuQ29tbW9uSXRlbVByb3ZpZGVyQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmV4cGVyaW1lbnQucHJvdmlkZXIuRXhwZXJpbWVudEl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5wcm92aWRlci5HcmFwaEl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5sb2dnZXIucHJvdmlkZXIuTG9nZ2VySXRlbVByb3ZpZGVyQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLnByb3ZpZGVyLk1vZGVsSXRlbVByb3ZpZGVyQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLnByb3ZpZGVyLk1vZGlmaWVySXRlbVByb3ZpZGVyQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZS5wcm92aWRlci5QcmVkaWNhdGVJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2NlbmFyaW8ucHJvdmlkZXIuU2NlbmFyaW9JdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2VxdWVuY2VyLnByb3ZpZGVyLlNlcXVlbmNlckl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zb2x2ZXIucHJvdmlkZXIuU29sdmVySXRlbVByb3ZpZGVyQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnRyaWdnZXIucHJvdmlkZXIuVHJpZ2dlckl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5TV1Q7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmN1c3RvbS5DVGFiRm9sZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5kbmQuRE5EOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5kbmQuVGV4dFRyYW5zZmVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5kbmQuVHJhbnNmZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5Db250cm9sQWRhcHRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLkNvbnRyb2xFdmVudDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZ3JhcGhpY3MuUG9pbnQ7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLk1lbnU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuVHJlZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5JQWN0aW9uQmFyczsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5JRWRpdG9ySW5wdXQ7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuSUVkaXRvclBhcnQ7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuSUVkaXRvclNpdGU7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuSVBhcnRMaXN0ZW5lcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5JV29ya2JlbmNoUGFydDsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5QYXJ0SW5pdEV4Y2VwdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5hY3Rpb25zLldvcmtzcGFjZU1vZGlmeU9wZXJhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5kaWFsb2dzLlNhdmVBc0RpYWxvZzsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5pZGUuSUdvdG9NYXJrZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkucGFydC5GaWxlRWRpdG9ySW5wdXQ7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkucGFydC5NdWx0aVBhZ2VFZGl0b3JQYXJ0OworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLnZpZXdzLmNvbnRlbnRvdXRsaW5lLkNvbnRlbnRPdXRsaW5lOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLnZpZXdzLmNvbnRlbnRvdXRsaW5lLkNvbnRlbnRPdXRsaW5lUGFnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS52aWV3cy5jb250ZW50b3V0bGluZS5JQ29udGVudE91dGxpbmVQYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLnZpZXdzLnByb3BlcnRpZXMuSVByb3BlcnR5U2hlZXRQYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLnZpZXdzLnByb3BlcnRpZXMuUHJvcGVydHlTaGVldDsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS52aWV3cy5wcm9wZXJ0aWVzLlByb3BlcnR5U2hlZXRQYWdlOworCisKKy8qKgorICogVGhpcyBpcyBhbiBleGFtcGxlIG9mIGEgVHJpZ2dlciBtb2RlbCBlZGl0b3IuCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK0BTdXBwcmVzc1dhcm5pbmdzKCJhbGwiKQorcHVibGljIGNsYXNzIFRyaWdnZXJFZGl0b3IKKwlleHRlbmRzIE11bHRpUGFnZUVkaXRvclBhcnQKKwlpbXBsZW1lbnRzIElFZGl0aW5nRG9tYWluUHJvdmlkZXIsIElTZWxlY3Rpb25Qcm92aWRlciwgSU1lbnVMaXN0ZW5lciwgSVZpZXdlclByb3ZpZGVyLCBJR290b01hcmtlciB7CisJLyoqCisJICogVGhpcyBrZWVwcyB0cmFjayBvZiB0aGUgZWRpdGluZyBkb21haW4gdGhhdCBpcyB1c2VkIHRvIHRyYWNrIGFsbCBjaGFuZ2VzIHRvIHRoZSBtb2RlbC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgQWRhcHRlckZhY3RvcnlFZGl0aW5nRG9tYWluIGVkaXRpbmdEb21haW47CisKKwkvKioKKwkgKiBUaGlzIGlzIHRoZSBvbmUgYWRhcHRlciBmYWN0b3J5IHVzZWQgZm9yIHByb3ZpZGluZyB2aWV3cyBvZiB0aGUgbW9kZWwuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIENvbXBvc2VkQWRhcHRlckZhY3RvcnkgYWRhcHRlckZhY3Rvcnk7CisKKwkvKioKKwkgKiBUaGlzIGlzIHRoZSBjb250ZW50IG91dGxpbmUgcGFnZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgSUNvbnRlbnRPdXRsaW5lUGFnZSBjb250ZW50T3V0bGluZVBhZ2U7CisKKwkvKioKKwkgKiBUaGlzIGlzIGEga2x1ZGdlLi4uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIElTdGF0dXNMaW5lTWFuYWdlciBjb250ZW50T3V0bGluZVN0YXR1c0xpbmVNYW5hZ2VyOworCisJLyoqCisJICogVGhpcyBpcyB0aGUgY29udGVudCBvdXRsaW5lIHBhZ2UncyB2aWV3ZXIuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIFRyZWVWaWV3ZXIgY29udGVudE91dGxpbmVWaWV3ZXI7CisKKwkvKioKKwkgKiBUaGlzIGlzIHRoZSBwcm9wZXJ0eSBzaGVldCBwYWdlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBQcm9wZXJ0eVNoZWV0UGFnZSBwcm9wZXJ0eVNoZWV0UGFnZTsKKworCS8qKgorCSAqIFRoaXMgaXMgdGhlIHZpZXdlciB0aGF0IHNoYWRvd3MgdGhlIHNlbGVjdGlvbiBpbiB0aGUgY29udGVudCBvdXRsaW5lLgorCSAqIFRoZSBwYXJlbnQgcmVsYXRpb24gbXVzdCBiZSBjb3JyZWN0bHkgZGVmaW5lZCBmb3IgdGhpcyB0byB3b3JrLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBUcmVlVmlld2VyIHNlbGVjdGlvblZpZXdlcjsKKworCS8qKgorCSAqIFRoaXMga2VlcHMgdHJhY2sgb2YgdGhlIGFjdGl2ZSBjb250ZW50IHZpZXdlciwgd2hpY2ggbWF5IGJlIGVpdGhlciBvbmUgb2YgdGhlIHZpZXdlcnMgaW4gdGhlIHBhZ2VzIG9yIHRoZSBjb250ZW50IG91dGxpbmUgdmlld2VyLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBWaWV3ZXIgY3VycmVudFZpZXdlcjsKKworCS8qKgorCSAqIFRoaXMgbGlzdGVucyB0byB3aGljaCBldmVyIHZpZXdlciBpcyBhY3RpdmUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIElTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIgc2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyOworCisJLyoqCisJICogVGhpcyBrZWVwcyB0cmFjayBvZiBhbGwgdGhlIHtAbGluayBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXJ9cyB0aGF0IGFyZSBsaXN0ZW5pbmcgdG8gdGhpcyBlZGl0b3IuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIENvbGxlY3Rpb248SVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcj4gc2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVycyA9IG5ldyBBcnJheUxpc3Q8SVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcj4oKTsKKworCS8qKgorCSAqIFRoaXMga2VlcHMgdHJhY2sgb2YgdGhlIHNlbGVjdGlvbiBvZiB0aGUgZWRpdG9yIGFzIGEgd2hvbGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIElTZWxlY3Rpb24gZWRpdG9yU2VsZWN0aW9uID0gU3RydWN0dXJlZFNlbGVjdGlvbi5FTVBUWTsKKworCS8qKgorCSAqIFRoZSBNYXJrZXJIZWxwZXIgaXMgcmVzcG9uc2libGUgZm9yIGNyZWF0aW5nIHdvcmtzcGFjZSByZXNvdXJjZSBtYXJrZXJzIHByZXNlbnRlZAorCSAqIGluIEVjbGlwc2UncyBQcm9ibGVtcyBWaWV3LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBNYXJrZXJIZWxwZXIgbWFya2VySGVscGVyID0gbmV3IEVkaXRVSU1hcmtlckhlbHBlcigpOworCisJLyoqCisJICogVGhpcyBsaXN0ZW5zIGZvciB3aGVuIHRoZSBvdXRsaW5lIGJlY29tZXMgYWN0aXZlCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIElQYXJ0TGlzdGVuZXIgcGFydExpc3RlbmVyID0KKwkJbmV3IElQYXJ0TGlzdGVuZXIoKSB7CisJCQlwdWJsaWMgdm9pZCBwYXJ0QWN0aXZhdGVkKElXb3JrYmVuY2hQYXJ0IHApIHsKKwkJCQlpZiAocCBpbnN0YW5jZW9mIENvbnRlbnRPdXRsaW5lKSB7CisJCQkJCWlmICgoKENvbnRlbnRPdXRsaW5lKXApLmdldEN1cnJlbnRQYWdlKCkgPT0gY29udGVudE91dGxpbmVQYWdlKSB7CisJCQkJCQlnZXRBY3Rpb25CYXJDb250cmlidXRvcigpLnNldEFjdGl2ZUVkaXRvcihUcmlnZ2VyRWRpdG9yLnRoaXMpOworCisJCQkJCQlzZXRDdXJyZW50Vmlld2VyKGNvbnRlbnRPdXRsaW5lVmlld2VyKTsKKwkJCQkJfQorCQkJCX0KKwkJCQllbHNlIGlmIChwIGluc3RhbmNlb2YgUHJvcGVydHlTaGVldCkgeworCQkJCQlpZiAoKChQcm9wZXJ0eVNoZWV0KXApLmdldEN1cnJlbnRQYWdlKCkgPT0gcHJvcGVydHlTaGVldFBhZ2UpIHsKKwkJCQkJCWdldEFjdGlvbkJhckNvbnRyaWJ1dG9yKCkuc2V0QWN0aXZlRWRpdG9yKFRyaWdnZXJFZGl0b3IudGhpcyk7CisJCQkJCQloYW5kbGVBY3RpdmF0ZSgpOworCQkJCQl9CisJCQkJfQorCQkJCWVsc2UgaWYgKHAgPT0gVHJpZ2dlckVkaXRvci50aGlzKSB7CisJCQkJCWhhbmRsZUFjdGl2YXRlKCk7CisJCQkJfQorCQkJfQorCQkJcHVibGljIHZvaWQgcGFydEJyb3VnaHRUb1RvcChJV29ya2JlbmNoUGFydCBwKSB7CisJCQkJLy8gSWdub3JlLgorCQkJfQorCQkJcHVibGljIHZvaWQgcGFydENsb3NlZChJV29ya2JlbmNoUGFydCBwKSB7CisJCQkJLy8gSWdub3JlLgorCQkJfQorCQkJcHVibGljIHZvaWQgcGFydERlYWN0aXZhdGVkKElXb3JrYmVuY2hQYXJ0IHApIHsKKwkJCQkvLyBJZ25vcmUuCisJCQl9CisJCQlwdWJsaWMgdm9pZCBwYXJ0T3BlbmVkKElXb3JrYmVuY2hQYXJ0IHApIHsKKwkJCQkvLyBJZ25vcmUuCisJCQl9CisJCX07CisKKwkvKioKKwkgKiBSZXNvdXJjZXMgdGhhdCBoYXZlIGJlZW4gcmVtb3ZlZCBzaW5jZSBsYXN0IGFjdGl2YXRpb24uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIENvbGxlY3Rpb248UmVzb3VyY2U+IHJlbW92ZWRSZXNvdXJjZXMgPSBuZXcgQXJyYXlMaXN0PFJlc291cmNlPigpOworCisJLyoqCisJICogUmVzb3VyY2VzIHRoYXQgaGF2ZSBiZWVuIGNoYW5nZWQgc2luY2UgbGFzdCBhY3RpdmF0aW9uLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBDb2xsZWN0aW9uPFJlc291cmNlPiBjaGFuZ2VkUmVzb3VyY2VzID0gbmV3IEFycmF5TGlzdDxSZXNvdXJjZT4oKTsKKworCS8qKgorCSAqIFJlc291cmNlcyB0aGF0IGhhdmUgYmVlbiBzYXZlZC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgQ29sbGVjdGlvbjxSZXNvdXJjZT4gc2F2ZWRSZXNvdXJjZXMgPSBuZXcgQXJyYXlMaXN0PFJlc291cmNlPigpOworCisJLyoqCisJICogTWFwIHRvIHN0b3JlIHRoZSBkaWFnbm9zdGljIGFzc29jaWF0ZWQgd2l0aCBhIHJlc291cmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBNYXA8UmVzb3VyY2UsIERpYWdub3N0aWM+IHJlc291cmNlVG9EaWFnbm9zdGljTWFwID0gbmV3IExpbmtlZEhhc2hNYXA8UmVzb3VyY2UsIERpYWdub3N0aWM+KCk7CisKKwkvKioKKwkgKiBDb250cm9scyB3aGV0aGVyIHRoZSBwcm9ibGVtIGluZGljYXRpb24gc2hvdWxkIGJlIHVwZGF0ZWQuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIGJvb2xlYW4gdXBkYXRlUHJvYmxlbUluZGljYXRpb24gPSB0cnVlOworCisJLyoqCisJICogQWRhcHRlciB1c2VkIHRvIHVwZGF0ZSB0aGUgcHJvYmxlbSBpbmRpY2F0aW9uIHdoZW4gcmVzb3VyY2VzIGFyZSBkZW1hbmRlZCBsb2FkZWQuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIEVDb250ZW50QWRhcHRlciBwcm9ibGVtSW5kaWNhdGlvbkFkYXB0ZXIgPSAKKwkJbmV3IEVDb250ZW50QWRhcHRlcigpIHsKKwkJCUBPdmVycmlkZQorCQkJcHVibGljIHZvaWQgbm90aWZ5Q2hhbmdlZChOb3RpZmljYXRpb24gbm90aWZpY2F0aW9uKSB7CisJCQkJaWYgKG5vdGlmaWNhdGlvbi5nZXROb3RpZmllcigpIGluc3RhbmNlb2YgUmVzb3VyY2UpIHsKKwkJCQkJc3dpdGNoIChub3RpZmljYXRpb24uZ2V0RmVhdHVyZUlEKFJlc291cmNlLmNsYXNzKSkgeworCQkJCQkJY2FzZSBSZXNvdXJjZS5SRVNPVVJDRV9fSVNfTE9BREVEOgorCQkJCQkJY2FzZSBSZXNvdXJjZS5SRVNPVVJDRV9fRVJST1JTOgorCQkJCQkJY2FzZSBSZXNvdXJjZS5SRVNPVVJDRV9fV0FSTklOR1M6IHsKKwkJCQkJCQlSZXNvdXJjZSByZXNvdXJjZSA9IChSZXNvdXJjZSlub3RpZmljYXRpb24uZ2V0Tm90aWZpZXIoKTsKKwkJCQkJCQlEaWFnbm9zdGljIGRpYWdub3N0aWMgPSBhbmFseXplUmVzb3VyY2VQcm9ibGVtcyhyZXNvdXJjZSwgbnVsbCk7CisJCQkJCQkJaWYgKGRpYWdub3N0aWMuZ2V0U2V2ZXJpdHkoKSAhPSBEaWFnbm9zdGljLk9LKSB7CisJCQkJCQkJCXJlc291cmNlVG9EaWFnbm9zdGljTWFwLnB1dChyZXNvdXJjZSwgZGlhZ25vc3RpYyk7CisJCQkJCQkJfQorCQkJCQkJCWVsc2UgeworCQkJCQkJCQlyZXNvdXJjZVRvRGlhZ25vc3RpY01hcC5yZW1vdmUocmVzb3VyY2UpOworCQkJCQkJCX0KKworCQkJCQkJCWlmICh1cGRhdGVQcm9ibGVtSW5kaWNhdGlvbikgeworCQkJCQkJCQlnZXRTaXRlKCkuZ2V0U2hlbGwoKS5nZXREaXNwbGF5KCkuYXN5bmNFeGVjCisJCQkJCQkJCQkobmV3IFJ1bm5hYmxlKCkgeworCQkJCQkJCQkJCSBwdWJsaWMgdm9pZCBydW4oKSB7CisJCQkJCQkJCQkJCSB1cGRhdGVQcm9ibGVtSW5kaWNhdGlvbigpOworCQkJCQkJCQkJCSB9CisJCQkJCQkJCQkgfSk7CisJCQkJCQkJfQorCQkJCQkJCWJyZWFrOworCQkJCQkJfQorCQkJCQl9CisJCQkJfQorCQkJCWVsc2UgeworCQkJCQlzdXBlci5ub3RpZnlDaGFuZ2VkKG5vdGlmaWNhdGlvbik7CisJCQkJfQorCQkJfQorCisJCQlAT3ZlcnJpZGUKKwkJCXByb3RlY3RlZCB2b2lkIHNldFRhcmdldChSZXNvdXJjZSB0YXJnZXQpIHsKKwkJCQliYXNpY1NldFRhcmdldCh0YXJnZXQpOworCQkJfQorCisJCQlAT3ZlcnJpZGUKKwkJCXByb3RlY3RlZCB2b2lkIHVuc2V0VGFyZ2V0KFJlc291cmNlIHRhcmdldCkgeworCQkJCWJhc2ljVW5zZXRUYXJnZXQodGFyZ2V0KTsKKwkJCX0KKwkJfTsKKworCS8qKgorCSAqIFRoaXMgbGlzdGVucyBmb3Igd29ya3NwYWNlIGNoYW5nZXMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIElSZXNvdXJjZUNoYW5nZUxpc3RlbmVyIHJlc291cmNlQ2hhbmdlTGlzdGVuZXIgPQorCQluZXcgSVJlc291cmNlQ2hhbmdlTGlzdGVuZXIoKSB7CisJCQlwdWJsaWMgdm9pZCByZXNvdXJjZUNoYW5nZWQoSVJlc291cmNlQ2hhbmdlRXZlbnQgZXZlbnQpIHsKKwkJCQlJUmVzb3VyY2VEZWx0YSBkZWx0YSA9IGV2ZW50LmdldERlbHRhKCk7CisJCQkJdHJ5IHsKKwkJCQkJY2xhc3MgUmVzb3VyY2VEZWx0YVZpc2l0b3IgaW1wbGVtZW50cyBJUmVzb3VyY2VEZWx0YVZpc2l0b3IgeworCQkJCQkJcHJvdGVjdGVkIFJlc291cmNlU2V0IHJlc291cmNlU2V0ID0gZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpOworCQkJCQkJcHJvdGVjdGVkIENvbGxlY3Rpb248UmVzb3VyY2U+IGNoYW5nZWRSZXNvdXJjZXMgPSBuZXcgQXJyYXlMaXN0PFJlc291cmNlPigpOworCQkJCQkJcHJvdGVjdGVkIENvbGxlY3Rpb248UmVzb3VyY2U+IHJlbW92ZWRSZXNvdXJjZXMgPSBuZXcgQXJyYXlMaXN0PFJlc291cmNlPigpOworCisJCQkJCQlwdWJsaWMgYm9vbGVhbiB2aXNpdChJUmVzb3VyY2VEZWx0YSBkZWx0YSkgeworCQkJCQkJCWlmIChkZWx0YS5nZXRSZXNvdXJjZSgpLmdldFR5cGUoKSA9PSBJUmVzb3VyY2UuRklMRSkgeworCQkJCQkJCQlpZiAoZGVsdGEuZ2V0S2luZCgpID09IElSZXNvdXJjZURlbHRhLlJFTU9WRUQgfHwKKwkJCQkJCQkJICAgIGRlbHRhLmdldEtpbmQoKSA9PSBJUmVzb3VyY2VEZWx0YS5DSEFOR0VEICYmIGRlbHRhLmdldEZsYWdzKCkgIT0gSVJlc291cmNlRGVsdGEuTUFSS0VSUykgeworCQkJCQkJCQkJUmVzb3VyY2UgcmVzb3VyY2UgPSByZXNvdXJjZVNldC5nZXRSZXNvdXJjZShVUkkuY3JlYXRlUGxhdGZvcm1SZXNvdXJjZVVSSShkZWx0YS5nZXRGdWxsUGF0aCgpLnRvU3RyaW5nKCksIHRydWUpLCBmYWxzZSk7CisJCQkJCQkJCQlpZiAocmVzb3VyY2UgIT0gbnVsbCkgeworCQkJCQkJCQkJCWlmIChkZWx0YS5nZXRLaW5kKCkgPT0gSVJlc291cmNlRGVsdGEuUkVNT1ZFRCkgeworCQkJCQkJCQkJCQlyZW1vdmVkUmVzb3VyY2VzLmFkZChyZXNvdXJjZSk7CisJCQkJCQkJCQkJfQorCQkJCQkJCQkJCWVsc2UgaWYgKCFzYXZlZFJlc291cmNlcy5yZW1vdmUocmVzb3VyY2UpKSB7CisJCQkJCQkJCQkJCWNoYW5nZWRSZXNvdXJjZXMuYWRkKHJlc291cmNlKTsKKwkJCQkJCQkJCQl9CisJCQkJCQkJCQl9CisJCQkJCQkJCX0KKwkJCQkJCQl9CisKKwkJCQkJCQlyZXR1cm4gdHJ1ZTsKKwkJCQkJCX0KKworCQkJCQkJcHVibGljIENvbGxlY3Rpb248UmVzb3VyY2U+IGdldENoYW5nZWRSZXNvdXJjZXMoKSB7CisJCQkJCQkJcmV0dXJuIGNoYW5nZWRSZXNvdXJjZXM7CisJCQkJCQl9CisKKwkJCQkJCXB1YmxpYyBDb2xsZWN0aW9uPFJlc291cmNlPiBnZXRSZW1vdmVkUmVzb3VyY2VzKCkgeworCQkJCQkJCXJldHVybiByZW1vdmVkUmVzb3VyY2VzOworCQkJCQkJfQorCQkJCQl9CisKKwkJCQkJZmluYWwgUmVzb3VyY2VEZWx0YVZpc2l0b3IgdmlzaXRvciA9IG5ldyBSZXNvdXJjZURlbHRhVmlzaXRvcigpOworCQkJCQlkZWx0YS5hY2NlcHQodmlzaXRvcik7CisKKwkJCQkJaWYgKCF2aXNpdG9yLmdldFJlbW92ZWRSZXNvdXJjZXMoKS5pc0VtcHR5KCkpIHsKKwkJCQkJCWdldFNpdGUoKS5nZXRTaGVsbCgpLmdldERpc3BsYXkoKS5hc3luY0V4ZWMKKwkJCQkJCQkobmV3IFJ1bm5hYmxlKCkgeworCQkJCQkJCQkgcHVibGljIHZvaWQgcnVuKCkgeworCQkJCQkJCQkJIHJlbW92ZWRSZXNvdXJjZXMuYWRkQWxsKHZpc2l0b3IuZ2V0UmVtb3ZlZFJlc291cmNlcygpKTsKKwkJCQkJCQkJCSBpZiAoIWlzRGlydHkoKSkgeworCQkJCQkJCQkJCSBnZXRTaXRlKCkuZ2V0UGFnZSgpLmNsb3NlRWRpdG9yKFRyaWdnZXJFZGl0b3IudGhpcywgZmFsc2UpOworCQkJCQkJCQkJIH0KKwkJCQkJCQkJIH0KKwkJCQkJCQkgfSk7CisJCQkJCX0KKworCQkJCQlpZiAoIXZpc2l0b3IuZ2V0Q2hhbmdlZFJlc291cmNlcygpLmlzRW1wdHkoKSkgeworCQkJCQkJZ2V0U2l0ZSgpLmdldFNoZWxsKCkuZ2V0RGlzcGxheSgpLmFzeW5jRXhlYworCQkJCQkJCShuZXcgUnVubmFibGUoKSB7CisJCQkJCQkJCSBwdWJsaWMgdm9pZCBydW4oKSB7CisJCQkJCQkJCQkgY2hhbmdlZFJlc291cmNlcy5hZGRBbGwodmlzaXRvci5nZXRDaGFuZ2VkUmVzb3VyY2VzKCkpOworCQkJCQkJCQkJIGlmIChnZXRTaXRlKCkuZ2V0UGFnZSgpLmdldEFjdGl2ZUVkaXRvcigpID09IFRyaWdnZXJFZGl0b3IudGhpcykgeworCQkJCQkJCQkJCSBoYW5kbGVBY3RpdmF0ZSgpOworCQkJCQkJCQkJIH0KKwkJCQkJCQkJIH0KKwkJCQkJCQkgfSk7CisJCQkJCX0KKwkJCQl9CisJCQkJY2F0Y2ggKENvcmVFeGNlcHRpb24gZXhjZXB0aW9uKSB7CisJCQkJCUNvcmVFZGl0b3JQbHVnaW4uSU5TVEFOQ0UubG9nKGV4Y2VwdGlvbik7CisJCQkJfQorCQkJfQorCQl9OworCisJLyoqCisJICogSGFuZGxlcyBhY3RpdmF0aW9uIG9mIHRoZSBlZGl0b3Igb3IgaXQncyBhc3NvY2lhdGVkIHZpZXdzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIGhhbmRsZUFjdGl2YXRlKCkgeworCQkvLyBSZWNvbXB1dGUgdGhlIHJlYWQgb25seSBzdGF0ZS4KKwkJLy8KKwkJaWYgKGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VUb1JlYWRPbmx5TWFwKCkgIT0gbnVsbCkgeworCQkgIGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VUb1JlYWRPbmx5TWFwKCkuY2xlYXIoKTsKKworCQkgIC8vIFJlZnJlc2ggYW55IGFjdGlvbnMgdGhhdCBtYXkgYmVjb21lIGVuYWJsZWQgb3IgZGlzYWJsZWQuCisJCSAgLy8KKwkJICBzZXRTZWxlY3Rpb24oZ2V0U2VsZWN0aW9uKCkpOworCQl9CisKKwkJaWYgKCFyZW1vdmVkUmVzb3VyY2VzLmlzRW1wdHkoKSkgeworCQkJaWYgKGhhbmRsZURpcnR5Q29uZmxpY3QoKSkgeworCQkJCWdldFNpdGUoKS5nZXRQYWdlKCkuY2xvc2VFZGl0b3IoVHJpZ2dlckVkaXRvci50aGlzLCBmYWxzZSk7CisJCQl9CisJCQllbHNlIHsKKwkJCQlyZW1vdmVkUmVzb3VyY2VzLmNsZWFyKCk7CisJCQkJY2hhbmdlZFJlc291cmNlcy5jbGVhcigpOworCQkJCXNhdmVkUmVzb3VyY2VzLmNsZWFyKCk7CisJCQl9CisJCX0KKwkJZWxzZSBpZiAoIWNoYW5nZWRSZXNvdXJjZXMuaXNFbXB0eSgpKSB7CisJCQljaGFuZ2VkUmVzb3VyY2VzLnJlbW92ZUFsbChzYXZlZFJlc291cmNlcyk7CisJCQloYW5kbGVDaGFuZ2VkUmVzb3VyY2VzKCk7CisJCQljaGFuZ2VkUmVzb3VyY2VzLmNsZWFyKCk7CisJCQlzYXZlZFJlc291cmNlcy5jbGVhcigpOworCQl9CisJfQorCisJLyoqCisJICogSGFuZGxlcyB3aGF0IHRvIGRvIHdpdGggY2hhbmdlZCByZXNvdXJjZXMgb24gYWN0aXZhdGlvbi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBoYW5kbGVDaGFuZ2VkUmVzb3VyY2VzKCkgeworCQlpZiAoIWNoYW5nZWRSZXNvdXJjZXMuaXNFbXB0eSgpICYmICghaXNEaXJ0eSgpIHx8IGhhbmRsZURpcnR5Q29uZmxpY3QoKSkpIHsKKwkJCWlmIChpc0RpcnR5KCkpIHsKKwkJCQljaGFuZ2VkUmVzb3VyY2VzLmFkZEFsbChlZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkuZ2V0UmVzb3VyY2VzKCkpOworCQkJfQorCQkJZWRpdGluZ0RvbWFpbi5nZXRDb21tYW5kU3RhY2soKS5mbHVzaCgpOworCisJCQl1cGRhdGVQcm9ibGVtSW5kaWNhdGlvbiA9IGZhbHNlOworCQkJZm9yIChSZXNvdXJjZSByZXNvdXJjZSA6IGNoYW5nZWRSZXNvdXJjZXMpIHsKKwkJCQlpZiAocmVzb3VyY2UuaXNMb2FkZWQoKSkgeworCQkJCQlyZXNvdXJjZS51bmxvYWQoKTsKKwkJCQkJdHJ5IHsKKwkJCQkJCXJlc291cmNlLmxvYWQoQ29sbGVjdGlvbnMuRU1QVFlfTUFQKTsKKwkJCQkJfQorCQkJCQljYXRjaCAoSU9FeGNlcHRpb24gZXhjZXB0aW9uKSB7CisJCQkJCQlpZiAoIXJlc291cmNlVG9EaWFnbm9zdGljTWFwLmNvbnRhaW5zS2V5KHJlc291cmNlKSkgeworCQkJCQkJCXJlc291cmNlVG9EaWFnbm9zdGljTWFwLnB1dChyZXNvdXJjZSwgYW5hbHl6ZVJlc291cmNlUHJvYmxlbXMocmVzb3VyY2UsIGV4Y2VwdGlvbikpOworCQkJCQkJfQorCQkJCQl9CisJCQkJfQorCQkJfQorCisJCQlpZiAoQWRhcHRlckZhY3RvcnlFZGl0aW5nRG9tYWluLmlzU3RhbGUoZWRpdG9yU2VsZWN0aW9uKSkgeworCQkJCXNldFNlbGVjdGlvbihTdHJ1Y3R1cmVkU2VsZWN0aW9uLkVNUFRZKTsKKwkJCX0KKworCQkJdXBkYXRlUHJvYmxlbUluZGljYXRpb24gPSB0cnVlOworCQkJdXBkYXRlUHJvYmxlbUluZGljYXRpb24oKTsKKwkJfQorCX0KKyAgCisJLyoqCisJICogVXBkYXRlcyB0aGUgcHJvYmxlbXMgaW5kaWNhdGlvbiB3aXRoIHRoZSBpbmZvcm1hdGlvbiBkZXNjcmliZWQgaW4gdGhlIHNwZWNpZmllZCBkaWFnbm9zdGljLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIHVwZGF0ZVByb2JsZW1JbmRpY2F0aW9uKCkgeworCQlpZiAodXBkYXRlUHJvYmxlbUluZGljYXRpb24pIHsKKwkJCUJhc2ljRGlhZ25vc3RpYyBkaWFnbm9zdGljID0KKwkJCQluZXcgQmFzaWNEaWFnbm9zdGljCisJCQkJCShEaWFnbm9zdGljLk9LLAorCQkJCQkgIm9yZy5lY2xpcHNlLnN0ZW0uY29yZS5lZGl0b3IiLCAvLyROT04tTkxTLTEkCisJCQkJCSAwLAorCQkJCQkgbnVsbCwKKwkJCQkJIG5ldyBPYmplY3QgW10geyBlZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkgfSk7CisJCQlmb3IgKERpYWdub3N0aWMgY2hpbGREaWFnbm9zdGljIDogcmVzb3VyY2VUb0RpYWdub3N0aWNNYXAudmFsdWVzKCkpIHsKKwkJCQlpZiAoY2hpbGREaWFnbm9zdGljLmdldFNldmVyaXR5KCkgIT0gRGlhZ25vc3RpYy5PSykgeworCQkJCQlkaWFnbm9zdGljLmFkZChjaGlsZERpYWdub3N0aWMpOworCQkJCX0KKwkJCX0KKworCQkJaW50IGxhc3RFZGl0b3JQYWdlID0gZ2V0UGFnZUNvdW50KCkgLSAxOworCQkJaWYgKGxhc3RFZGl0b3JQYWdlID49IDAgJiYgZ2V0RWRpdG9yKGxhc3RFZGl0b3JQYWdlKSBpbnN0YW5jZW9mIFByb2JsZW1FZGl0b3JQYXJ0KSB7CisJCQkJKChQcm9ibGVtRWRpdG9yUGFydClnZXRFZGl0b3IobGFzdEVkaXRvclBhZ2UpKS5zZXREaWFnbm9zdGljKGRpYWdub3N0aWMpOworCQkJCWlmIChkaWFnbm9zdGljLmdldFNldmVyaXR5KCkgIT0gRGlhZ25vc3RpYy5PSykgeworCQkJCQlzZXRBY3RpdmVQYWdlKGxhc3RFZGl0b3JQYWdlKTsKKwkJCQl9CisJCQl9CisJCQllbHNlIGlmIChkaWFnbm9zdGljLmdldFNldmVyaXR5KCkgIT0gRGlhZ25vc3RpYy5PSykgeworCQkJCVByb2JsZW1FZGl0b3JQYXJ0IHByb2JsZW1FZGl0b3JQYXJ0ID0gbmV3IFByb2JsZW1FZGl0b3JQYXJ0KCk7CisJCQkJcHJvYmxlbUVkaXRvclBhcnQuc2V0RGlhZ25vc3RpYyhkaWFnbm9zdGljKTsKKwkJCQlwcm9ibGVtRWRpdG9yUGFydC5zZXRNYXJrZXJIZWxwZXIobWFya2VySGVscGVyKTsKKwkJCQl0cnkgeworCQkJCQlhZGRQYWdlKCsrbGFzdEVkaXRvclBhZ2UsIHByb2JsZW1FZGl0b3JQYXJ0LCBnZXRFZGl0b3JJbnB1dCgpKTsKKwkJCQkJc2V0UGFnZVRleHQobGFzdEVkaXRvclBhZ2UsIHByb2JsZW1FZGl0b3JQYXJ0LmdldFBhcnROYW1lKCkpOworCQkJCQlzZXRBY3RpdmVQYWdlKGxhc3RFZGl0b3JQYWdlKTsKKwkJCQkJc2hvd1RhYnMoKTsKKwkJCQl9CisJCQkJY2F0Y2ggKFBhcnRJbml0RXhjZXB0aW9uIGV4Y2VwdGlvbikgeworCQkJCQlDb3JlRWRpdG9yUGx1Z2luLklOU1RBTkNFLmxvZyhleGNlcHRpb24pOworCQkJCX0KKwkJCX0KKworCQkJaWYgKG1hcmtlckhlbHBlci5oYXNNYXJrZXJzKGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKSkpIHsKKwkJCQltYXJrZXJIZWxwZXIuZGVsZXRlTWFya2VycyhlZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkpOworCQkJCWlmIChkaWFnbm9zdGljLmdldFNldmVyaXR5KCkgIT0gRGlhZ25vc3RpYy5PSykgeworCQkJCQl0cnkgeworCQkJCQkJbWFya2VySGVscGVyLmNyZWF0ZU1hcmtlcnMoZGlhZ25vc3RpYyk7CisJCQkJCX0KKwkJCQkJY2F0Y2ggKENvcmVFeGNlcHRpb24gZXhjZXB0aW9uKSB7CisJCQkJCQlDb3JlRWRpdG9yUGx1Z2luLklOU1RBTkNFLmxvZyhleGNlcHRpb24pOworCQkJCQl9CisJCQkJfQorCQkJfQorCQl9CisJfQorCisJLyoqCisJICogU2hvd3MgYSBkaWFsb2cgdGhhdCBhc2tzIGlmIGNvbmZsaWN0aW5nIGNoYW5nZXMgc2hvdWxkIGJlIGRpc2NhcmRlZC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgYm9vbGVhbiBoYW5kbGVEaXJ0eUNvbmZsaWN0KCkgeworCQlyZXR1cm4KKwkJCU1lc3NhZ2VEaWFsb2cub3BlblF1ZXN0aW9uCisJCQkJKGdldFNpdGUoKS5nZXRTaGVsbCgpLAorCQkJCSBnZXRTdHJpbmcoIl9VSV9GaWxlQ29uZmxpY3RfbGFiZWwiKSwgLy8kTk9OLU5MUy0xJAorCQkJCSBnZXRTdHJpbmcoIl9XQVJOX0ZpbGVDb25mbGljdCIpKTsgLy8kTk9OLU5MUy0xJAorCX0KKworCS8qKgorCSAqIFRoaXMgY3JlYXRlcyBhIG1vZGVsIGVkaXRvci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVHJpZ2dlckVkaXRvcigpIHsKKwkJc3VwZXIoKTsKKwkJaW5pdGlhbGl6ZUVkaXRpbmdEb21haW4oKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHNldHMgdXAgdGhlIGVkaXRpbmcgZG9tYWluIGZvciB0aGUgbW9kZWwgZWRpdG9yLiA8IS0tIGJlZ2luLXVzZXItZG9jCisJICogLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJcHJvdGVjdGVkIHZvaWQgaW5pdGlhbGl6ZUVkaXRpbmdEb21haW4oKSB7CisJCWluaXRpYWxpemVFZGl0aW5nRG9tYWluR2VuKCk7CisJCWVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKS5nZXRSZXNvdXJjZUZhY3RvcnlSZWdpc3RyeSgpCisJCQkJLmdldEV4dGVuc2lvblRvRmFjdG9yeU1hcCgpLnB1dCgiKiIsCisJCQkJCQlTVEVNWE1JUmVzb3VyY2VGYWN0b3J5SW1wbC5JTlNUQU5DRSk7CisKKwkJZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpLmdldFJlc291cmNlRmFjdG9yeVJlZ2lzdHJ5KCkKKwkJCQkuZ2V0UHJvdG9jb2xUb0ZhY3RvcnlNYXAoKS5wdXQoInBsYXRmb3JtIiwKKwkJCQkJCVNURU1YTUlSZXNvdXJjZUZhY3RvcnlJbXBsLklOU1RBTkNFKTsKKwl9IC8vIGluaXRpYWxpemVFZGl0aW5nRG9tYWluCisJCisJLyoqCisJICogVGhpcyBzZXRzIHVwIHRoZSBlZGl0aW5nIGRvbWFpbiBmb3IgdGhlIG1vZGVsIGVkaXRvci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBpbml0aWFsaXplRWRpdGluZ0RvbWFpbkdlbigpIHsKKwkJLy8gQ3JlYXRlIGFuIGFkYXB0ZXIgZmFjdG9yeSB0aGF0IHlpZWxkcyBpdGVtIHByb3ZpZGVycy4KKwkJLy8KKwkJYWRhcHRlckZhY3RvcnkgPSBuZXcgQ29tcG9zZWRBZGFwdGVyRmFjdG9yeShDb21wb3NlZEFkYXB0ZXJGYWN0b3J5LkRlc2NyaXB0b3IuUmVnaXN0cnkuSU5TVEFOQ0UpOworCisJCWFkYXB0ZXJGYWN0b3J5LmFkZEFkYXB0ZXJGYWN0b3J5KG5ldyBSZXNvdXJjZUl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5KCkpOworCQlhZGFwdGVyRmFjdG9yeS5hZGRBZGFwdGVyRmFjdG9yeShuZXcgQ29tbW9uSXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkoKSk7CisJCWFkYXB0ZXJGYWN0b3J5LmFkZEFkYXB0ZXJGYWN0b3J5KG5ldyBFeHBlcmltZW50SXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkoKSk7CisJCWFkYXB0ZXJGYWN0b3J5LmFkZEFkYXB0ZXJGYWN0b3J5KG5ldyBHcmFwaEl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5KCkpOworCQlhZGFwdGVyRmFjdG9yeS5hZGRBZGFwdGVyRmFjdG9yeShuZXcgTW9kZWxJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSgpKTsKKwkJYWRhcHRlckZhY3RvcnkuYWRkQWRhcHRlckZhY3RvcnkobmV3IE1vZGlmaWVySXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkoKSk7CisJCWFkYXB0ZXJGYWN0b3J5LmFkZEFkYXB0ZXJGYWN0b3J5KG5ldyBQcmVkaWNhdGVJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSgpKTsKKwkJYWRhcHRlckZhY3RvcnkuYWRkQWRhcHRlckZhY3RvcnkobmV3IFNjZW5hcmlvSXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkoKSk7CisJCWFkYXB0ZXJGYWN0b3J5LmFkZEFkYXB0ZXJGYWN0b3J5KG5ldyBTZXF1ZW5jZXJJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSgpKTsKKwkJYWRhcHRlckZhY3RvcnkuYWRkQWRhcHRlckZhY3RvcnkobmV3IFRyaWdnZXJJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSgpKTsKKwkJYWRhcHRlckZhY3RvcnkuYWRkQWRhcHRlckZhY3RvcnkobmV3IFNvbHZlckl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5KCkpOworCQlhZGFwdGVyRmFjdG9yeS5hZGRBZGFwdGVyRmFjdG9yeShuZXcgTG9nZ2VySXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkoKSk7CisJCWFkYXB0ZXJGYWN0b3J5LmFkZEFkYXB0ZXJGYWN0b3J5KG5ldyBFY29yZUl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5KCkpOworCQlhZGFwdGVyRmFjdG9yeS5hZGRBZGFwdGVyRmFjdG9yeShuZXcgUmVmbGVjdGl2ZUl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5KCkpOworCisJCS8vIENyZWF0ZSB0aGUgY29tbWFuZCBzdGFjayB0aGF0IHdpbGwgbm90aWZ5IHRoaXMgZWRpdG9yIGFzIGNvbW1hbmRzIGFyZSBleGVjdXRlZC4KKwkJLy8KKwkJQmFzaWNDb21tYW5kU3RhY2sgY29tbWFuZFN0YWNrID0gbmV3IEJhc2ljQ29tbWFuZFN0YWNrKCk7CisKKwkJLy8gQWRkIGEgbGlzdGVuZXIgdG8gc2V0IHRoZSBtb3N0IHJlY2VudCBjb21tYW5kJ3MgYWZmZWN0ZWQgb2JqZWN0cyB0byBiZSB0aGUgc2VsZWN0aW9uIG9mIHRoZSB2aWV3ZXIgd2l0aCBmb2N1cy4KKwkJLy8KKwkJY29tbWFuZFN0YWNrLmFkZENvbW1hbmRTdGFja0xpc3RlbmVyCisJCQkobmV3IENvbW1hbmRTdGFja0xpc3RlbmVyKCkgeworCQkJCSBwdWJsaWMgdm9pZCBjb21tYW5kU3RhY2tDaGFuZ2VkKGZpbmFsIEV2ZW50T2JqZWN0IGV2ZW50KSB7CisJCQkJCSBnZXRDb250YWluZXIoKS5nZXREaXNwbGF5KCkuYXN5bmNFeGVjCisJCQkJCQkgKG5ldyBSdW5uYWJsZSgpIHsKKwkJCQkJCQkgIHB1YmxpYyB2b2lkIHJ1bigpIHsKKwkJCQkJCQkJICBmaXJlUHJvcGVydHlDaGFuZ2UoSUVkaXRvclBhcnQuUFJPUF9ESVJUWSk7CisKKwkJCQkJCQkJICAvLyBUcnkgdG8gc2VsZWN0IHRoZSBhZmZlY3RlZCBvYmplY3RzLgorCQkJCQkJCQkgIC8vCisJCQkJCQkJCSAgQ29tbWFuZCBtb3N0UmVjZW50Q29tbWFuZCA9ICgoQ29tbWFuZFN0YWNrKWV2ZW50LmdldFNvdXJjZSgpKS5nZXRNb3N0UmVjZW50Q29tbWFuZCgpOworCQkJCQkJCQkgIGlmIChtb3N0UmVjZW50Q29tbWFuZCAhPSBudWxsKSB7CisJCQkJCQkJCQkgIHNldFNlbGVjdGlvblRvVmlld2VyKG1vc3RSZWNlbnRDb21tYW5kLmdldEFmZmVjdGVkT2JqZWN0cygpKTsKKwkJCQkJCQkJICB9CisJCQkJCQkJCSAgaWYgKHByb3BlcnR5U2hlZXRQYWdlICE9IG51bGwgJiYgIXByb3BlcnR5U2hlZXRQYWdlLmdldENvbnRyb2woKS5pc0Rpc3Bvc2VkKCkpIHsKKwkJCQkJCQkJCSAgcHJvcGVydHlTaGVldFBhZ2UucmVmcmVzaCgpOworCQkJCQkJCQkgIH0KKwkJCQkJCQkgIH0KKwkJCQkJCSAgfSk7CisJCQkJIH0KKwkJCSB9KTsKKworCQkvLyBDcmVhdGUgdGhlIGVkaXRpbmcgZG9tYWluIHdpdGggYSBzcGVjaWFsIGNvbW1hbmQgc3RhY2suCisJCS8vCisJCWVkaXRpbmdEb21haW4gPSBuZXcgQWRhcHRlckZhY3RvcnlFZGl0aW5nRG9tYWluKGFkYXB0ZXJGYWN0b3J5LCBjb21tYW5kU3RhY2ssIG5ldyBIYXNoTWFwPFJlc291cmNlLCBCb29sZWFuPigpKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGlzIGhlcmUgZm9yIHRoZSBsaXN0ZW5lciB0byBiZSBhYmxlIHRvIGNhbGwgaXQuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJCQlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgdm9pZCBmaXJlUHJvcGVydHlDaGFuZ2UoaW50IGFjdGlvbikgeworCQlzdXBlci5maXJlUHJvcGVydHlDaGFuZ2UoYWN0aW9uKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHNldHMgdGhlIHNlbGVjdGlvbiBpbnRvIHdoaWNoZXZlciB2aWV3ZXIgaXMgYWN0aXZlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIHNldFNlbGVjdGlvblRvVmlld2VyKENvbGxlY3Rpb248Pz4gY29sbGVjdGlvbikgeworCQlmaW5hbCBDb2xsZWN0aW9uPD8+IHRoZVNlbGVjdGlvbiA9IGNvbGxlY3Rpb247CisJCS8vIE1ha2Ugc3VyZSBpdCdzIG9rYXkuCisJCS8vCisJCWlmICh0aGVTZWxlY3Rpb24gIT0gbnVsbCAmJiAhdGhlU2VsZWN0aW9uLmlzRW1wdHkoKSkgeworCQkJUnVubmFibGUgcnVubmFibGUgPQorCQkJCW5ldyBSdW5uYWJsZSgpIHsKKwkJCQkJcHVibGljIHZvaWQgcnVuKCkgeworCQkJCQkJLy8gVHJ5IHRvIHNlbGVjdCB0aGUgaXRlbXMgaW4gdGhlIGN1cnJlbnQgY29udGVudCB2aWV3ZXIgb2YgdGhlIGVkaXRvci4KKwkJCQkJCS8vCisJCQkJCQlpZiAoY3VycmVudFZpZXdlciAhPSBudWxsKSB7CisJCQkJCQkJY3VycmVudFZpZXdlci5zZXRTZWxlY3Rpb24obmV3IFN0cnVjdHVyZWRTZWxlY3Rpb24odGhlU2VsZWN0aW9uLnRvQXJyYXkoKSksIHRydWUpOworCQkJCQkJfQorCQkJCQl9CisJCQkJfTsKKwkJCWdldFNpdGUoKS5nZXRTaGVsbCgpLmdldERpc3BsYXkoKS5hc3luY0V4ZWMocnVubmFibGUpOworCQl9CisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIHRoZSBlZGl0aW5nIGRvbWFpbiBhcyByZXF1aXJlZCBieSB0aGUge0BsaW5rIElFZGl0aW5nRG9tYWluUHJvdmlkZXJ9IGludGVyZmFjZS4KKwkgKiBUaGlzIGlzIGltcG9ydGFudCBmb3IgaW1wbGVtZW50aW5nIHRoZSBzdGF0aWMgbWV0aG9kcyBvZiB7QGxpbmsgQWRhcHRlckZhY3RvcnlFZGl0aW5nRG9tYWlufQorCSAqIGFuZCBmb3Igc3VwcG9ydGluZyB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkuYWN0aW9uLkNvbW1hbmRBY3Rpb259LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFZGl0aW5nRG9tYWluIGdldEVkaXRpbmdEb21haW4oKSB7CisJCXJldHVybiBlZGl0aW5nRG9tYWluOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBjbGFzcyBSZXZlcnNlQWRhcHRlckZhY3RvcnlDb250ZW50UHJvdmlkZXIgZXh0ZW5kcyBBZGFwdGVyRmFjdG9yeUNvbnRlbnRQcm92aWRlciB7CisJCS8qKgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJcHVibGljIFJldmVyc2VBZGFwdGVyRmFjdG9yeUNvbnRlbnRQcm92aWRlcihBZGFwdGVyRmFjdG9yeSBhZGFwdGVyRmFjdG9yeSkgeworCQkJc3VwZXIoYWRhcHRlckZhY3RvcnkpOworCQl9CisKKwkJLyoqCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlAT3ZlcnJpZGUKKwkJcHVibGljIE9iamVjdCBbXSBnZXRFbGVtZW50cyhPYmplY3Qgb2JqZWN0KSB7CisJCQlPYmplY3QgcGFyZW50ID0gc3VwZXIuZ2V0UGFyZW50KG9iamVjdCk7CisJCQlyZXR1cm4gKHBhcmVudCA9PSBudWxsID8gQ29sbGVjdGlvbnMuRU1QVFlfU0VUIDogQ29sbGVjdGlvbnMuc2luZ2xldG9uKHBhcmVudCkpLnRvQXJyYXkoKTsKKwkJfQorCisJCS8qKgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJQE92ZXJyaWRlCisJCXB1YmxpYyBPYmplY3QgW10gZ2V0Q2hpbGRyZW4oT2JqZWN0IG9iamVjdCkgeworCQkJT2JqZWN0IHBhcmVudCA9IHN1cGVyLmdldFBhcmVudChvYmplY3QpOworCQkJcmV0dXJuIChwYXJlbnQgPT0gbnVsbCA/IENvbGxlY3Rpb25zLkVNUFRZX1NFVCA6IENvbGxlY3Rpb25zLnNpbmdsZXRvbihwYXJlbnQpKS50b0FycmF5KCk7CisJCX0KKworCQkvKioKKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUBPdmVycmlkZQorCQlwdWJsaWMgYm9vbGVhbiBoYXNDaGlsZHJlbihPYmplY3Qgb2JqZWN0KSB7CisJCQlPYmplY3QgcGFyZW50ID0gc3VwZXIuZ2V0UGFyZW50KG9iamVjdCk7CisJCQlyZXR1cm4gcGFyZW50ICE9IG51bGw7CisJCX0KKworCQkvKioKKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUBPdmVycmlkZQorCQlwdWJsaWMgT2JqZWN0IGdldFBhcmVudChPYmplY3Qgb2JqZWN0KSB7CisJCQlyZXR1cm4gbnVsbDsKKwkJfQorCX0KKworCS8qKgorCSAqIFRoaXMgbWFrZXMgc3VyZSB0aGF0IG9uZSBjb250ZW50IHZpZXdlciwgZWl0aGVyIGZvciB0aGUgY3VycmVudCBwYWdlIG9yIHRoZSBvdXRsaW5lIHZpZXcsIGlmIGl0IGhhcyBmb2N1cywKKwkgKiBpcyB0aGUgY3VycmVudCBvbmUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgc2V0Q3VycmVudFZpZXdlcihWaWV3ZXIgdmlld2VyKSB7CisJCS8vIElmIGl0IGlzIGNoYW5naW5nLi4uCisJCS8vCisJCWlmIChjdXJyZW50Vmlld2VyICE9IHZpZXdlcikgeworCQkJaWYgKHNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lciA9PSBudWxsKSB7CisJCQkJLy8gQ3JlYXRlIHRoZSBsaXN0ZW5lciBvbiBkZW1hbmQuCisJCQkJLy8KKwkJCQlzZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIgPQorCQkJCQluZXcgSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcigpIHsKKwkJCQkJCS8vIFRoaXMganVzdCBub3RpZmllcyB0aG9zZSB0aGluZ3MgdGhhdCBhcmUgYWZmZWN0ZWQgYnkgdGhlIHNlY3Rpb24uCisJCQkJCQkvLworCQkJCQkJcHVibGljIHZvaWQgc2VsZWN0aW9uQ2hhbmdlZChTZWxlY3Rpb25DaGFuZ2VkRXZlbnQgc2VsZWN0aW9uQ2hhbmdlZEV2ZW50KSB7CisJCQkJCQkJc2V0U2VsZWN0aW9uKHNlbGVjdGlvbkNoYW5nZWRFdmVudC5nZXRTZWxlY3Rpb24oKSk7CisJCQkJCQl9CisJCQkJCX07CisJCQl9CisKKwkJCS8vIFN0b3AgbGlzdGVuaW5nIHRvIHRoZSBvbGQgb25lLgorCQkJLy8KKwkJCWlmIChjdXJyZW50Vmlld2VyICE9IG51bGwpIHsKKwkJCQljdXJyZW50Vmlld2VyLnJlbW92ZVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcihzZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIpOworCQkJfQorCisJCQkvLyBTdGFydCBsaXN0ZW5pbmcgdG8gdGhlIG5ldyBvbmUuCisJCQkvLworCQkJaWYgKHZpZXdlciAhPSBudWxsKSB7CisJCQkJdmlld2VyLmFkZFNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcihzZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIpOworCQkJfQorCisJCQkvLyBSZW1lbWJlciBpdC4KKwkJCS8vCisJCQljdXJyZW50Vmlld2VyID0gdmlld2VyOworCisJCQkvLyBTZXQgdGhlIGVkaXRvcnMgc2VsZWN0aW9uIGJhc2VkIG9uIHRoZSBjdXJyZW50IHZpZXdlcidzIHNlbGVjdGlvbi4KKwkJCS8vCisJCQlzZXRTZWxlY3Rpb24oY3VycmVudFZpZXdlciA9PSBudWxsID8gU3RydWN0dXJlZFNlbGVjdGlvbi5FTVBUWSA6IGN1cnJlbnRWaWV3ZXIuZ2V0U2VsZWN0aW9uKCkpOworCQl9CisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIHRoZSB2aWV3ZXIgYXMgcmVxdWlyZWQgYnkgdGhlIHtAbGluayBJVmlld2VyUHJvdmlkZXJ9IGludGVyZmFjZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVmlld2VyIGdldFZpZXdlcigpIHsKKwkJcmV0dXJuIGN1cnJlbnRWaWV3ZXI7CisJfQorCisJLyoqCisJICogVGhpcyBjcmVhdGVzIGEgY29udGV4dCBtZW51IGZvciB0aGUgdmlld2VyIGFuZCBhZGRzIGEgbGlzdGVuZXIgYXMgd2VsbAorCSAqIHJlZ2lzdGVyaW5nIHRoZSBtZW51IGZvciBleHRlbnNpb24uIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0KKwkgKiBlbmQtdXNlci1kb2MgLS0+CisJICogCisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBjcmVhdGVDb250ZXh0TWVudUZvcihTdHJ1Y3R1cmVkVmlld2VyIHZpZXdlcikgeworCQlNZW51TWFuYWdlciBjb250ZXh0TWVudSA9IG5ldyBNZW51TWFuYWdlcigiI1BvcFVwIik7IC8vJE5PTi1OTFMtMSQKKwkJY29udGV4dE1lbnUuYWRkKG5ldyBTZXBhcmF0b3IoImFkZGl0aW9ucyIpKTsgLy8kTk9OLU5MUy0xJAorCQljb250ZXh0TWVudS5zZXRSZW1vdmVBbGxXaGVuU2hvd24odHJ1ZSk7CisJCWNvbnRleHRNZW51LmFkZE1lbnVMaXN0ZW5lcih0aGlzKTsKKwkJTWVudSBtZW51ID0gY29udGV4dE1lbnUuY3JlYXRlQ29udGV4dE1lbnUodmlld2VyLmdldENvbnRyb2woKSk7CisJCXZpZXdlci5nZXRDb250cm9sKCkuc2V0TWVudShtZW51KTsKKwkJZ2V0U2l0ZSgpLnJlZ2lzdGVyQ29udGV4dE1lbnUoY29udGV4dE1lbnUsIHZpZXdlcik7CisKKwkJaW50IGRuZE9wZXJhdGlvbnMgPSBETkQuRFJPUF9DT1BZIHwgRE5ELkRST1BfTU9WRSB8IERORC5EUk9QX0xJTks7CisJCVRyYW5zZmVyW10gdHJhbnNmZXJzID0gbmV3IFRyYW5zZmVyW10ge0xvY2FsU2VsZWN0aW9uVHJhbnNmZXIuZ2V0VHJhbnNmZXIoKSwgTG9jYWxUcmFuc2Zlci5nZXRJbnN0YW5jZSgpLAorCQkJCVRleHRUcmFuc2Zlci5nZXRJbnN0YW5jZSgpIH07CisJCXZpZXdlci5hZGREcmFnU3VwcG9ydChkbmRPcGVyYXRpb25zLCB0cmFuc2ZlcnMsIG5ldyBWaWV3ZXJEcmFnQWRhcHRlcigKKwkJCQl2aWV3ZXIpKTsKKwkJdmlld2VyLmFkZERyb3BTdXBwb3J0KGRuZE9wZXJhdGlvbnMsIHRyYW5zZmVycywKKwkJCQluZXcgRWRpdGluZ0RvbWFpblZpZXdlckRyb3BBZGFwdGVyKGVkaXRpbmdEb21haW4sIHZpZXdlcikpOworCX0gLy8gY3JlYXRlQ29udGV4dE1lbnVGb3IKKwkKKwkvKioKKwkgKiBUaGlzIGNyZWF0ZXMgYSBjb250ZXh0IG1lbnUgZm9yIHRoZSB2aWV3ZXIgYW5kIGFkZHMgYSBsaXN0ZW5lciBhcyB3ZWxsIHJlZ2lzdGVyaW5nIHRoZSBtZW51IGZvciBleHRlbnNpb24uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgY3JlYXRlQ29udGV4dE1lbnVGb3JHZW4oU3RydWN0dXJlZFZpZXdlciB2aWV3ZXIpIHsKKwkJTWVudU1hbmFnZXIgY29udGV4dE1lbnUgPSBuZXcgTWVudU1hbmFnZXIoIiNQb3BVcCIpOyAvLyROT04tTkxTLTEkCisJCWNvbnRleHRNZW51LmFkZChuZXcgU2VwYXJhdG9yKCJhZGRpdGlvbnMiKSk7IC8vJE5PTi1OTFMtMSQKKwkJY29udGV4dE1lbnUuc2V0UmVtb3ZlQWxsV2hlblNob3duKHRydWUpOworCQljb250ZXh0TWVudS5hZGRNZW51TGlzdGVuZXIodGhpcyk7CisJCU1lbnUgbWVudT0gY29udGV4dE1lbnUuY3JlYXRlQ29udGV4dE1lbnUodmlld2VyLmdldENvbnRyb2woKSk7CisJCXZpZXdlci5nZXRDb250cm9sKCkuc2V0TWVudShtZW51KTsKKwkJZ2V0U2l0ZSgpLnJlZ2lzdGVyQ29udGV4dE1lbnUoY29udGV4dE1lbnUsIG5ldyBVbndyYXBwaW5nU2VsZWN0aW9uUHJvdmlkZXIodmlld2VyKSk7CisKKwkJaW50IGRuZE9wZXJhdGlvbnMgPSBETkQuRFJPUF9DT1BZIHwgRE5ELkRST1BfTU9WRSB8IERORC5EUk9QX0xJTks7CisJCVRyYW5zZmVyW10gdHJhbnNmZXJzID0gbmV3IFRyYW5zZmVyW10geyBMb2NhbFRyYW5zZmVyLmdldEluc3RhbmNlKCkgfTsKKwkJdmlld2VyLmFkZERyYWdTdXBwb3J0KGRuZE9wZXJhdGlvbnMsIHRyYW5zZmVycywgbmV3IFZpZXdlckRyYWdBZGFwdGVyKHZpZXdlcikpOworCQl2aWV3ZXIuYWRkRHJvcFN1cHBvcnQoZG5kT3BlcmF0aW9ucywgdHJhbnNmZXJzLCBuZXcgRWRpdGluZ0RvbWFpblZpZXdlckRyb3BBZGFwdGVyKGVkaXRpbmdEb21haW4sIHZpZXdlcikpOworCX0KKworCS8qKgorCSAqIFRoaXMgaXMgdGhlIG1ldGhvZCBjYWxsZWQgdG8gbG9hZCBhIHJlc291cmNlIGludG8gdGhlIGVkaXRpbmcgZG9tYWluJ3MgcmVzb3VyY2Ugc2V0IGJhc2VkIG9uIHRoZSBlZGl0b3IncyBpbnB1dC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBjcmVhdGVNb2RlbCgpIHsKKwkJVVJJIHJlc291cmNlVVJJID0gRWRpdFVJVXRpbC5nZXRVUkkoZ2V0RWRpdG9ySW5wdXQoKSk7CisJCUV4Y2VwdGlvbiBleGNlcHRpb24gPSBudWxsOworCQlSZXNvdXJjZSByZXNvdXJjZSA9IG51bGw7CisJCXRyeSB7CisJCQkvLyBMb2FkIHRoZSByZXNvdXJjZSB0aHJvdWdoIHRoZSBlZGl0aW5nIGRvbWFpbi4KKwkJCS8vCisJCQlyZXNvdXJjZSA9IGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKS5nZXRSZXNvdXJjZShyZXNvdXJjZVVSSSwgdHJ1ZSk7CisJCX0KKwkJY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CisJCQlleGNlcHRpb24gPSBlOworCQkJcmVzb3VyY2UgPSBlZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkuZ2V0UmVzb3VyY2UocmVzb3VyY2VVUkksIGZhbHNlKTsKKwkJfQorCisJCURpYWdub3N0aWMgZGlhZ25vc3RpYyA9IGFuYWx5emVSZXNvdXJjZVByb2JsZW1zKHJlc291cmNlLCBleGNlcHRpb24pOworCQlpZiAoZGlhZ25vc3RpYy5nZXRTZXZlcml0eSgpICE9IERpYWdub3N0aWMuT0spIHsKKwkJCXJlc291cmNlVG9EaWFnbm9zdGljTWFwLnB1dChyZXNvdXJjZSwgIGFuYWx5emVSZXNvdXJjZVByb2JsZW1zKHJlc291cmNlLCBleGNlcHRpb24pKTsKKwkJfQorCQllZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkuZUFkYXB0ZXJzKCkuYWRkKHByb2JsZW1JbmRpY2F0aW9uQWRhcHRlcik7CisJfQorCisJLyoqCisJICogUmV0dXJucyBhIGRpYWdub3N0aWMgZGVzY3JpYmluZyB0aGUgZXJyb3JzIGFuZCB3YXJuaW5ncyBsaXN0ZWQgaW4gdGhlIHJlc291cmNlCisJICogYW5kIHRoZSBzcGVjaWZpZWQgZXhjZXB0aW9uIChpZiBhbnkpLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBEaWFnbm9zdGljIGFuYWx5emVSZXNvdXJjZVByb2JsZW1zKFJlc291cmNlIHJlc291cmNlLCBFeGNlcHRpb24gZXhjZXB0aW9uKSB7CisJCWlmICghcmVzb3VyY2UuZ2V0RXJyb3JzKCkuaXNFbXB0eSgpIHx8ICFyZXNvdXJjZS5nZXRXYXJuaW5ncygpLmlzRW1wdHkoKSkgeworCQkJQmFzaWNEaWFnbm9zdGljIGJhc2ljRGlhZ25vc3RpYyA9CisJCQkJbmV3IEJhc2ljRGlhZ25vc3RpYworCQkJCQkoRGlhZ25vc3RpYy5FUlJPUiwKKwkJCQkJICJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZWRpdG9yIiwgLy8kTk9OLU5MUy0xJAorCQkJCQkgMCwKKwkJCQkJIGdldFN0cmluZygiX1VJX0NyZWF0ZU1vZGVsRXJyb3JfbWVzc2FnZSIsIHJlc291cmNlLmdldFVSSSgpKSwgLy8kTk9OLU5MUy0xJAorCQkJCQkgbmV3IE9iamVjdCBbXSB7IGV4Y2VwdGlvbiA9PSBudWxsID8gKE9iamVjdClyZXNvdXJjZSA6IGV4Y2VwdGlvbiB9KTsKKwkJCWJhc2ljRGlhZ25vc3RpYy5tZXJnZShFY29yZVV0aWwuY29tcHV0ZURpYWdub3N0aWMocmVzb3VyY2UsIHRydWUpKTsKKwkJCXJldHVybiBiYXNpY0RpYWdub3N0aWM7CisJCX0KKwkJZWxzZSBpZiAoZXhjZXB0aW9uICE9IG51bGwpIHsKKwkJCXJldHVybgorCQkJCW5ldyBCYXNpY0RpYWdub3N0aWMKKwkJCQkJKERpYWdub3N0aWMuRVJST1IsCisJCQkJCSAib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmVkaXRvciIsIC8vJE5PTi1OTFMtMSQKKwkJCQkJIDAsCisJCQkJCSBnZXRTdHJpbmcoIl9VSV9DcmVhdGVNb2RlbEVycm9yX21lc3NhZ2UiLCByZXNvdXJjZS5nZXRVUkkoKSksIC8vJE5PTi1OTFMtMSQKKwkJCQkJIG5ldyBPYmplY3RbXSB7IGV4Y2VwdGlvbiB9KTsKKwkJfQorCQllbHNlIHsKKwkJCXJldHVybiBEaWFnbm9zdGljLk9LX0lOU1RBTkNFOworCQl9CisJfQorCisJLyoqCisJICogVGhpcyBpcyB0aGUgbWV0aG9kIHVzZWQgYnkgdGhlIGZyYW1ld29yayB0byBpbnN0YWxsIHlvdXIgb3duIGNvbnRyb2xzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBjcmVhdGVQYWdlcygpIHsKKwkJLy8gQ3JlYXRlcyB0aGUgbW9kZWwgZnJvbSB0aGUgZWRpdG9yIGlucHV0CisJCS8vCisJCWNyZWF0ZU1vZGVsKCk7CisKKwkJLy8gT25seSBjcmVhdGVzIHRoZSBvdGhlciBwYWdlcyBpZiB0aGVyZSBpcyBzb21ldGhpbmcgdGhhdCBjYW4gYmUgZWRpdGVkCisJCS8vCisJCWlmICghZ2V0RWRpdGluZ0RvbWFpbigpLmdldFJlc291cmNlU2V0KCkuZ2V0UmVzb3VyY2VzKCkuaXNFbXB0eSgpKSB7CisJCQkvLyBDcmVhdGUgYSBwYWdlIGZvciB0aGUgc2VsZWN0aW9uIHRyZWUgdmlldy4KKwkJCS8vCisJCQlUcmVlIHRyZWUgPSBuZXcgVHJlZShnZXRDb250YWluZXIoKSwgU1dULk1VTFRJKTsKKwkJCXNlbGVjdGlvblZpZXdlciA9IG5ldyBUcmVlVmlld2VyKHRyZWUpOworCQkJc2V0Q3VycmVudFZpZXdlcihzZWxlY3Rpb25WaWV3ZXIpOworCisJCQlzZWxlY3Rpb25WaWV3ZXIuc2V0Q29udGVudFByb3ZpZGVyKG5ldyBBZGFwdGVyRmFjdG9yeUNvbnRlbnRQcm92aWRlcihhZGFwdGVyRmFjdG9yeSkpOworCQkJc2VsZWN0aW9uVmlld2VyLnNldExhYmVsUHJvdmlkZXIobmV3IEFkYXB0ZXJGYWN0b3J5TGFiZWxQcm92aWRlcihhZGFwdGVyRmFjdG9yeSkpOworCQkJLy9zZWxlY3Rpb25WaWV3ZXIuc2V0SW5wdXQoZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpKTsKKwkJCXNlbGVjdGlvblZpZXdlci5zZXRJbnB1dChlZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkuZ2V0UmVzb3VyY2VzKCkuZ2V0KDApKTsKKwkJCXNlbGVjdGlvblZpZXdlci5zZXRTZWxlY3Rpb24obmV3IFN0cnVjdHVyZWRTZWxlY3Rpb24oZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpLmdldFJlc291cmNlcygpLmdldCgwKSksIHRydWUpOworCisJCQluZXcgQWRhcHRlckZhY3RvcnlUcmVlRWRpdG9yKHNlbGVjdGlvblZpZXdlci5nZXRUcmVlKCksIGFkYXB0ZXJGYWN0b3J5KTsKKworCQkJY3JlYXRlQ29udGV4dE1lbnVGb3Ioc2VsZWN0aW9uVmlld2VyKTsKKwkJCWludCBwYWdlSW5kZXggPSBhZGRQYWdlKHRyZWUpOworCQkJc2V0UGFnZVRleHQocGFnZUluZGV4LCBnZXRTdHJpbmcoIl9VSV9TZWxlY3Rpb25QYWdlX2xhYmVsIikpOyAvLyROT04tTkxTLTEkCisKKwkJCWdldFNpdGUoKS5nZXRTaGVsbCgpLmdldERpc3BsYXkoKS5hc3luY0V4ZWMKKwkJCQkobmV3IFJ1bm5hYmxlKCkgeworCQkJCQkgcHVibGljIHZvaWQgcnVuKCkgeworCQkJCQkJIHNldEFjdGl2ZVBhZ2UoMCk7CisJCQkJCSB9CisJCQkJIH0pOworCQl9CisKKwkJLy8gRW5zdXJlcyB0aGF0IHRoaXMgZWRpdG9yIHdpbGwgb25seSBkaXNwbGF5IHRoZSBwYWdlJ3MgdGFiCisJCS8vIGFyZWEgaWYgdGhlcmUgYXJlIG1vcmUgdGhhbiBvbmUgcGFnZQorCQkvLworCQlnZXRDb250YWluZXIoKS5hZGRDb250cm9sTGlzdGVuZXIKKwkJCShuZXcgQ29udHJvbEFkYXB0ZXIoKSB7CisJCQkJYm9vbGVhbiBndWFyZCA9IGZhbHNlOworCQkJCUBPdmVycmlkZQorCQkJCXB1YmxpYyB2b2lkIGNvbnRyb2xSZXNpemVkKENvbnRyb2xFdmVudCBldmVudCkgeworCQkJCQlpZiAoIWd1YXJkKSB7CisJCQkJCQlndWFyZCA9IHRydWU7CisJCQkJCQloaWRlVGFicygpOworCQkJCQkJZ3VhcmQgPSBmYWxzZTsKKwkJCQkJfQorCQkJCX0KKwkJCSB9KTsKKworCQlnZXRTaXRlKCkuZ2V0U2hlbGwoKS5nZXREaXNwbGF5KCkuYXN5bmNFeGVjCisJCQkobmV3IFJ1bm5hYmxlKCkgeworCQkJCSBwdWJsaWMgdm9pZCBydW4oKSB7CisJCQkJCSB1cGRhdGVQcm9ibGVtSW5kaWNhdGlvbigpOworCQkJCSB9CisJCQkgfSk7CisJfSAvLyBjcmVhdGVQYWdlcworCisJLyoqCisJICogVGhpcyBpcyB0aGUgbWV0aG9kIHVzZWQgYnkgdGhlIGZyYW1ld29yayB0byBpbnN0YWxsIHlvdXIgb3duIGNvbnRyb2xzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCS8vQE92ZXJyaWRlCisJcHVibGljIHZvaWQgY3JlYXRlUGFnZXNHZW4oKSB7CisJCS8vIENyZWF0ZXMgdGhlIG1vZGVsIGZyb20gdGhlIGVkaXRvciBpbnB1dAorCQkvLworCQljcmVhdGVNb2RlbCgpOworCisJCS8vIE9ubHkgY3JlYXRlcyB0aGUgb3RoZXIgcGFnZXMgaWYgdGhlcmUgaXMgc29tZXRoaW5nIHRoYXQgY2FuIGJlIGVkaXRlZAorCQkvLworCQlpZiAoIWdldEVkaXRpbmdEb21haW4oKS5nZXRSZXNvdXJjZVNldCgpLmdldFJlc291cmNlcygpLmlzRW1wdHkoKSkgeworCQkJLy8gQ3JlYXRlIGEgcGFnZSBmb3IgdGhlIHNlbGVjdGlvbiB0cmVlIHZpZXcuCisJCQkvLworCQkJVHJlZSB0cmVlID0gbmV3IFRyZWUoZ2V0Q29udGFpbmVyKCksIFNXVC5NVUxUSSk7CisJCQlzZWxlY3Rpb25WaWV3ZXIgPSBuZXcgVHJlZVZpZXdlcih0cmVlKTsKKwkJCXNldEN1cnJlbnRWaWV3ZXIoc2VsZWN0aW9uVmlld2VyKTsKKworCQkJc2VsZWN0aW9uVmlld2VyLnNldENvbnRlbnRQcm92aWRlcihuZXcgQWRhcHRlckZhY3RvcnlDb250ZW50UHJvdmlkZXIoYWRhcHRlckZhY3RvcnkpKTsKKwkJCXNlbGVjdGlvblZpZXdlci5zZXRMYWJlbFByb3ZpZGVyKG5ldyBBZGFwdGVyRmFjdG9yeUxhYmVsUHJvdmlkZXIoYWRhcHRlckZhY3RvcnkpKTsKKwkJCXNlbGVjdGlvblZpZXdlci5zZXRJbnB1dChlZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkpOworCQkJc2VsZWN0aW9uVmlld2VyLnNldFNlbGVjdGlvbihuZXcgU3RydWN0dXJlZFNlbGVjdGlvbihlZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkuZ2V0UmVzb3VyY2VzKCkuZ2V0KDApKSwgdHJ1ZSk7CisKKwkJCW5ldyBBZGFwdGVyRmFjdG9yeVRyZWVFZGl0b3Ioc2VsZWN0aW9uVmlld2VyLmdldFRyZWUoKSwgYWRhcHRlckZhY3RvcnkpOworCisJCQljcmVhdGVDb250ZXh0TWVudUZvcihzZWxlY3Rpb25WaWV3ZXIpOworCQkJaW50IHBhZ2VJbmRleCA9IGFkZFBhZ2UodHJlZSk7CisJCQlzZXRQYWdlVGV4dChwYWdlSW5kZXgsIGdldFN0cmluZygiX1VJX1NlbGVjdGlvblBhZ2VfbGFiZWwiKSk7IC8vJE5PTi1OTFMtMSQKKworCQkJZ2V0U2l0ZSgpLmdldFNoZWxsKCkuZ2V0RGlzcGxheSgpLmFzeW5jRXhlYworCQkJCShuZXcgUnVubmFibGUoKSB7CisJCQkJCSBwdWJsaWMgdm9pZCBydW4oKSB7CisJCQkJCQkgc2V0QWN0aXZlUGFnZSgwKTsKKwkJCQkJIH0KKwkJCQkgfSk7CisJCX0KKworCQkvLyBFbnN1cmVzIHRoYXQgdGhpcyBlZGl0b3Igd2lsbCBvbmx5IGRpc3BsYXkgdGhlIHBhZ2UncyB0YWIKKwkJLy8gYXJlYSBpZiB0aGVyZSBhcmUgbW9yZSB0aGFuIG9uZSBwYWdlCisJCS8vCisJCWdldENvbnRhaW5lcigpLmFkZENvbnRyb2xMaXN0ZW5lcgorCQkJKG5ldyBDb250cm9sQWRhcHRlcigpIHsKKwkJCQlib29sZWFuIGd1YXJkID0gZmFsc2U7CisJCQkJQE92ZXJyaWRlCisJCQkJcHVibGljIHZvaWQgY29udHJvbFJlc2l6ZWQoQ29udHJvbEV2ZW50IGV2ZW50KSB7CisJCQkJCWlmICghZ3VhcmQpIHsKKwkJCQkJCWd1YXJkID0gdHJ1ZTsKKwkJCQkJCWhpZGVUYWJzKCk7CisJCQkJCQlndWFyZCA9IGZhbHNlOworCQkJCQl9CisJCQkJfQorCQkJIH0pOworCisJCWdldFNpdGUoKS5nZXRTaGVsbCgpLmdldERpc3BsYXkoKS5hc3luY0V4ZWMKKwkJCShuZXcgUnVubmFibGUoKSB7CisJCQkJIHB1YmxpYyB2b2lkIHJ1bigpIHsKKwkJCQkJIHVwZGF0ZVByb2JsZW1JbmRpY2F0aW9uKCk7CisJCQkJIH0KKwkJCSB9KTsKKwl9CisJCisJLyoqCisJICogSWYgdGhlcmUgaXMganVzdCBvbmUgcGFnZSBpbiB0aGUgbXVsdGktcGFnZSBlZGl0b3IgcGFydCwKKwkgKiB0aGlzIGhpZGVzIHRoZSBzaW5nbGUgdGFiIGF0IHRoZSBib3R0b20uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgaGlkZVRhYnMoKSB7CisJCWlmIChnZXRQYWdlQ291bnQoKSA8PSAxKSB7CisJCQlzZXRQYWdlVGV4dCgwLCAiIik7IC8vJE5PTi1OTFMtMSQKKwkJCWlmIChnZXRDb250YWluZXIoKSBpbnN0YW5jZW9mIENUYWJGb2xkZXIpIHsKKwkJCQkoKENUYWJGb2xkZXIpZ2V0Q29udGFpbmVyKCkpLnNldFRhYkhlaWdodCgxKTsKKwkJCQlQb2ludCBwb2ludCA9IGdldENvbnRhaW5lcigpLmdldFNpemUoKTsKKwkJCQlnZXRDb250YWluZXIoKS5zZXRTaXplKHBvaW50LngsIHBvaW50LnkgKyA2KTsKKwkJCX0KKwkJfQorCX0KKworCS8qKgorCSAqIElmIHRoZXJlIGlzIG1vcmUgdGhhbiBvbmUgcGFnZSBpbiB0aGUgbXVsdGktcGFnZSBlZGl0b3IgcGFydCwKKwkgKiB0aGlzIHNob3dzIHRoZSB0YWJzIGF0IHRoZSBib3R0b20uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgc2hvd1RhYnMoKSB7CisJCWlmIChnZXRQYWdlQ291bnQoKSA+IDEpIHsKKwkJCXNldFBhZ2VUZXh0KDAsIGdldFN0cmluZygiX1VJX1NlbGVjdGlvblBhZ2VfbGFiZWwiKSk7IC8vJE5PTi1OTFMtMSQKKwkJCWlmIChnZXRDb250YWluZXIoKSBpbnN0YW5jZW9mIENUYWJGb2xkZXIpIHsKKwkJCQkoKENUYWJGb2xkZXIpZ2V0Q29udGFpbmVyKCkpLnNldFRhYkhlaWdodChTV1QuREVGQVVMVCk7CisJCQkJUG9pbnQgcG9pbnQgPSBnZXRDb250YWluZXIoKS5nZXRTaXplKCk7CisJCQkJZ2V0Q29udGFpbmVyKCkuc2V0U2l6ZShwb2ludC54LCBwb2ludC55IC0gNik7CisJCQl9CisJCX0KKwl9CisKKwkvKioKKwkgKiBUaGlzIGlzIHVzZWQgdG8gdHJhY2sgdGhlIGFjdGl2ZSB2aWV3ZXIuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgcGFnZUNoYW5nZShpbnQgcGFnZUluZGV4KSB7CisJCXN1cGVyLnBhZ2VDaGFuZ2UocGFnZUluZGV4KTsKKworCQlpZiAoY29udGVudE91dGxpbmVQYWdlICE9IG51bGwpIHsKKwkJCWhhbmRsZUNvbnRlbnRPdXRsaW5lU2VsZWN0aW9uKGNvbnRlbnRPdXRsaW5lUGFnZS5nZXRTZWxlY3Rpb24oKSk7CisJCX0KKwl9CisKKwkvKioKKwkgKiBUaGlzIGlzIGhvdyB0aGUgZnJhbWV3b3JrIGRldGVybWluZXMgd2hpY2ggaW50ZXJmYWNlcyB3ZSBpbXBsZW1lbnQuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQFN1cHByZXNzV2FybmluZ3MoInVuY2hlY2tlZCIpCisJQE92ZXJyaWRlCisJcHVibGljIE9iamVjdCBnZXRBZGFwdGVyKENsYXNzIGtleSkgeworCQlpZiAoa2V5LmVxdWFscyhJQ29udGVudE91dGxpbmVQYWdlLmNsYXNzKSkgeworCQkJcmV0dXJuIHNob3dPdXRsaW5lVmlldygpID8gZ2V0Q29udGVudE91dGxpbmVQYWdlKCkgOiBudWxsOworCQl9CisJCWVsc2UgaWYgKGtleS5lcXVhbHMoSVByb3BlcnR5U2hlZXRQYWdlLmNsYXNzKSkgeworCQkJcmV0dXJuIGdldFByb3BlcnR5U2hlZXRQYWdlKCk7CisJCX0KKwkJZWxzZSBpZiAoa2V5LmVxdWFscyhJR290b01hcmtlci5jbGFzcykpIHsKKwkJCXJldHVybiB0aGlzOworCQl9CisJCWVsc2UgeworCQkJcmV0dXJuIHN1cGVyLmdldEFkYXB0ZXIoa2V5KTsKKwkJfQorCX0KKworCS8qKgorCSAqIFRoaXMgYWNjZXNzZXMgYSBjYWNoZWQgdmVyc2lvbiBvZiB0aGUgY29udGVudCBvdXRsaW5lci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgSUNvbnRlbnRPdXRsaW5lUGFnZSBnZXRDb250ZW50T3V0bGluZVBhZ2UoKSB7CisJCWlmIChjb250ZW50T3V0bGluZVBhZ2UgPT0gbnVsbCkgeworCQkJLy8gVGhlIGNvbnRlbnQgb3V0bGluZSBpcyBqdXN0IGEgdHJlZS4KKwkJCS8vCisJCQljbGFzcyBNeUNvbnRlbnRPdXRsaW5lUGFnZSBleHRlbmRzIENvbnRlbnRPdXRsaW5lUGFnZSB7CisJCQkJQE92ZXJyaWRlCisJCQkJcHVibGljIHZvaWQgY3JlYXRlQ29udHJvbChDb21wb3NpdGUgcGFyZW50KSB7CisJCQkJCXN1cGVyLmNyZWF0ZUNvbnRyb2wocGFyZW50KTsKKwkJCQkJY29udGVudE91dGxpbmVWaWV3ZXIgPSBnZXRUcmVlVmlld2VyKCk7CisJCQkJCWNvbnRlbnRPdXRsaW5lVmlld2VyLmFkZFNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcih0aGlzKTsKKworCQkJCQkvLyBTZXQgdXAgdGhlIHRyZWUgdmlld2VyLgorCQkJCQkvLworCQkJCQljb250ZW50T3V0bGluZVZpZXdlci5zZXRDb250ZW50UHJvdmlkZXIobmV3IEFkYXB0ZXJGYWN0b3J5Q29udGVudFByb3ZpZGVyKGFkYXB0ZXJGYWN0b3J5KSk7CisJCQkJCWNvbnRlbnRPdXRsaW5lVmlld2VyLnNldExhYmVsUHJvdmlkZXIobmV3IEFkYXB0ZXJGYWN0b3J5TGFiZWxQcm92aWRlcihhZGFwdGVyRmFjdG9yeSkpOworCQkJCQljb250ZW50T3V0bGluZVZpZXdlci5zZXRJbnB1dChlZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkpOworCisJCQkJCS8vIE1ha2Ugc3VyZSBvdXIgcG9wdXBzIHdvcmsuCisJCQkJCS8vCisJCQkJCWNyZWF0ZUNvbnRleHRNZW51Rm9yKGNvbnRlbnRPdXRsaW5lVmlld2VyKTsKKworCQkJCQlpZiAoIWVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKS5nZXRSZXNvdXJjZXMoKS5pc0VtcHR5KCkpIHsKKwkJCQkJICAvLyBTZWxlY3QgdGhlIHJvb3Qgb2JqZWN0IGluIHRoZSB2aWV3LgorCQkJCQkgIC8vCisJCQkJCSAgY29udGVudE91dGxpbmVWaWV3ZXIuc2V0U2VsZWN0aW9uKG5ldyBTdHJ1Y3R1cmVkU2VsZWN0aW9uKGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKS5nZXRSZXNvdXJjZXMoKS5nZXQoMCkpLCB0cnVlKTsKKwkJCQkJfQorCQkJCX0KKworCQkJCUBPdmVycmlkZQorCQkJCXB1YmxpYyB2b2lkIG1ha2VDb250cmlidXRpb25zKElNZW51TWFuYWdlciBtZW51TWFuYWdlciwgSVRvb2xCYXJNYW5hZ2VyIHRvb2xCYXJNYW5hZ2VyLCBJU3RhdHVzTGluZU1hbmFnZXIgc3RhdHVzTGluZU1hbmFnZXIpIHsKKwkJCQkJc3VwZXIubWFrZUNvbnRyaWJ1dGlvbnMobWVudU1hbmFnZXIsIHRvb2xCYXJNYW5hZ2VyLCBzdGF0dXNMaW5lTWFuYWdlcik7CisJCQkJCWNvbnRlbnRPdXRsaW5lU3RhdHVzTGluZU1hbmFnZXIgPSBzdGF0dXNMaW5lTWFuYWdlcjsKKwkJCQl9CisKKwkJCQlAT3ZlcnJpZGUKKwkJCQlwdWJsaWMgdm9pZCBzZXRBY3Rpb25CYXJzKElBY3Rpb25CYXJzIGFjdGlvbkJhcnMpIHsKKwkJCQkJc3VwZXIuc2V0QWN0aW9uQmFycyhhY3Rpb25CYXJzKTsKKwkJCQkJZ2V0QWN0aW9uQmFyQ29udHJpYnV0b3IoKS5zaGFyZUdsb2JhbEFjdGlvbnModGhpcywgYWN0aW9uQmFycyk7CisJCQkJfQorCQkJfQorCisJCQljb250ZW50T3V0bGluZVBhZ2UgPSBuZXcgTXlDb250ZW50T3V0bGluZVBhZ2UoKTsKKworCQkJLy8gTGlzdGVuIHRvIHNlbGVjdGlvbiBzbyB0aGF0IHdlIGNhbiBoYW5kbGUgaXQgaXMgYSBzcGVjaWFsIHdheS4KKwkJCS8vCisJCQljb250ZW50T3V0bGluZVBhZ2UuYWRkU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyCisJCQkJKG5ldyBJU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyKCkgeworCQkJCQkgLy8gVGhpcyBlbnN1cmVzIHRoYXQgd2UgaGFuZGxlIHNlbGVjdGlvbnMgY29ycmVjdGx5LgorCQkJCQkgLy8KKwkJCQkJIHB1YmxpYyB2b2lkIHNlbGVjdGlvbkNoYW5nZWQoU2VsZWN0aW9uQ2hhbmdlZEV2ZW50IGV2ZW50KSB7CisJCQkJCQkgaGFuZGxlQ29udGVudE91dGxpbmVTZWxlY3Rpb24oZXZlbnQuZ2V0U2VsZWN0aW9uKCkpOworCQkJCQkgfQorCQkJCSB9KTsKKwkJfQorCisJCXJldHVybiBjb250ZW50T3V0bGluZVBhZ2U7CisJfQorCisJLyoqCisJICogVGhpcyBhY2Nlc3NlcyBhIGNhY2hlZCB2ZXJzaW9uIG9mIHRoZSBwcm9wZXJ0eSBzaGVldC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgSVByb3BlcnR5U2hlZXRQYWdlIGdldFByb3BlcnR5U2hlZXRQYWdlKCkgeworCQlpZiAocHJvcGVydHlTaGVldFBhZ2UgPT0gbnVsbCkgeworCQkJcHJvcGVydHlTaGVldFBhZ2UgPQorCQkJCW5ldyBFeHRlbmRlZFByb3BlcnR5U2hlZXRQYWdlKGVkaXRpbmdEb21haW4pIHsKKwkJCQkJQE92ZXJyaWRlCisJCQkJCXB1YmxpYyB2b2lkIHNldFNlbGVjdGlvblRvVmlld2VyKExpc3Q8Pz4gc2VsZWN0aW9uKSB7CisJCQkJCQlUcmlnZ2VyRWRpdG9yLnRoaXMuc2V0U2VsZWN0aW9uVG9WaWV3ZXIoc2VsZWN0aW9uKTsKKwkJCQkJCVRyaWdnZXJFZGl0b3IudGhpcy5zZXRGb2N1cygpOworCQkJCQl9CisKKwkJCQkJQE92ZXJyaWRlCisJCQkJCXB1YmxpYyB2b2lkIHNldEFjdGlvbkJhcnMoSUFjdGlvbkJhcnMgYWN0aW9uQmFycykgeworCQkJCQkJc3VwZXIuc2V0QWN0aW9uQmFycyhhY3Rpb25CYXJzKTsKKwkJCQkJCWdldEFjdGlvbkJhckNvbnRyaWJ1dG9yKCkuc2hhcmVHbG9iYWxBY3Rpb25zKHRoaXMsIGFjdGlvbkJhcnMpOworCQkJCQl9CisJCQkJfTsKKwkJCXByb3BlcnR5U2hlZXRQYWdlLnNldFByb3BlcnR5U291cmNlUHJvdmlkZXIobmV3IEFkYXB0ZXJGYWN0b3J5Q29udGVudFByb3ZpZGVyKGFkYXB0ZXJGYWN0b3J5KSk7CisJCX0KKworCQlyZXR1cm4gcHJvcGVydHlTaGVldFBhZ2U7CisJfQorCisJLyoqCisJICogVGhpcyBkZWFscyB3aXRoIGhvdyB3ZSB3YW50IHNlbGVjdGlvbiBpbiB0aGUgb3V0bGluZXIgdG8gYWZmZWN0IHRoZSBvdGhlciB2aWV3cy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBoYW5kbGVDb250ZW50T3V0bGluZVNlbGVjdGlvbihJU2VsZWN0aW9uIHNlbGVjdGlvbikgeworCQlpZiAoc2VsZWN0aW9uVmlld2VyICE9IG51bGwgJiYgIXNlbGVjdGlvbi5pc0VtcHR5KCkgJiYgc2VsZWN0aW9uIGluc3RhbmNlb2YgSVN0cnVjdHVyZWRTZWxlY3Rpb24pIHsKKwkJCUl0ZXJhdG9yPD8+IHNlbGVjdGVkRWxlbWVudHMgPSAoKElTdHJ1Y3R1cmVkU2VsZWN0aW9uKXNlbGVjdGlvbikuaXRlcmF0b3IoKTsKKwkJCWlmIChzZWxlY3RlZEVsZW1lbnRzLmhhc05leHQoKSkgeworCQkJCS8vIEdldCB0aGUgZmlyc3Qgc2VsZWN0ZWQgZWxlbWVudC4KKwkJCQkvLworCQkJCU9iamVjdCBzZWxlY3RlZEVsZW1lbnQgPSBzZWxlY3RlZEVsZW1lbnRzLm5leHQoKTsKKworCQkJCUFycmF5TGlzdDxPYmplY3Q+IHNlbGVjdGlvbkxpc3QgPSBuZXcgQXJyYXlMaXN0PE9iamVjdD4oKTsKKwkJCQlzZWxlY3Rpb25MaXN0LmFkZChzZWxlY3RlZEVsZW1lbnQpOworCQkJCXdoaWxlIChzZWxlY3RlZEVsZW1lbnRzLmhhc05leHQoKSkgeworCQkJCQlzZWxlY3Rpb25MaXN0LmFkZChzZWxlY3RlZEVsZW1lbnRzLm5leHQoKSk7CisJCQkJfQorCisJCQkJLy8gU2V0IHRoZSBzZWxlY3Rpb24gdG8gdGhlIHdpZGdldC4KKwkJCQkvLworCQkJCXNlbGVjdGlvblZpZXdlci5zZXRTZWxlY3Rpb24obmV3IFN0cnVjdHVyZWRTZWxlY3Rpb24oc2VsZWN0aW9uTGlzdCkpOworCQkJfQorCQl9CisJfQorCisJLyoqCisJICogVGhpcyBpcyBmb3IgaW1wbGVtZW50aW5nIHtAbGluayBJRWRpdG9yUGFydH0gYW5kIHNpbXBseSB0ZXN0cyB0aGUgY29tbWFuZCBzdGFjay4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgYm9vbGVhbiBpc0RpcnR5KCkgeworCQlyZXR1cm4gKChCYXNpY0NvbW1hbmRTdGFjayllZGl0aW5nRG9tYWluLmdldENvbW1hbmRTdGFjaygpKS5pc1NhdmVOZWVkZWQoKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGlzIGZvciBpbXBsZW1lbnRpbmcge0BsaW5rIElFZGl0b3JQYXJ0fSBhbmQgc2ltcGx5IHNhdmVzIHRoZSBtb2RlbCBmaWxlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGRvU2F2ZShJUHJvZ3Jlc3NNb25pdG9yIHByb2dyZXNzTW9uaXRvcikgeworCQkvLyBTYXZlIG9ubHkgcmVzb3VyY2VzIHRoYXQgaGF2ZSBhY3R1YWxseSBjaGFuZ2VkLgorCQkvLworCQlmaW5hbCBNYXA8T2JqZWN0LCBPYmplY3Q+IHNhdmVPcHRpb25zID0gbmV3IEhhc2hNYXA8T2JqZWN0LCBPYmplY3Q+KCk7CisJCXNhdmVPcHRpb25zLnB1dChSZXNvdXJjZS5PUFRJT05fU0FWRV9PTkxZX0lGX0NIQU5HRUQsIFJlc291cmNlLk9QVElPTl9TQVZFX09OTFlfSUZfQ0hBTkdFRF9NRU1PUllfQlVGRkVSKTsKKworCQkvLyBEbyB0aGUgd29yayB3aXRoaW4gYW4gb3BlcmF0aW9uIGJlY2F1c2UgdGhpcyBpcyBhIGxvbmcgcnVubmluZyBhY3Rpdml0eSB0aGF0IG1vZGlmaWVzIHRoZSB3b3JrYmVuY2guCisJCS8vCisJCVdvcmtzcGFjZU1vZGlmeU9wZXJhdGlvbiBvcGVyYXRpb24gPQorCQkJbmV3IFdvcmtzcGFjZU1vZGlmeU9wZXJhdGlvbigpIHsKKwkJCQkvLyBUaGlzIGlzIHRoZSBtZXRob2QgdGhhdCBnZXRzIGludm9rZWQgd2hlbiB0aGUgb3BlcmF0aW9uIHJ1bnMuCisJCQkJLy8KKwkJCQlAT3ZlcnJpZGUKKwkJCQlwdWJsaWMgdm9pZCBleGVjdXRlKElQcm9ncmVzc01vbml0b3IgbW9uaXRvcikgeworCQkJCQkvLyBTYXZlIHRoZSByZXNvdXJjZXMgdG8gdGhlIGZpbGUgc3lzdGVtLgorCQkJCQkvLworCQkJCQlib29sZWFuIGZpcnN0ID0gdHJ1ZTsKKwkJCQkJZm9yIChSZXNvdXJjZSByZXNvdXJjZSA6IGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKS5nZXRSZXNvdXJjZXMoKSkgeworCQkJCQkJaWYgKChmaXJzdCB8fCAhcmVzb3VyY2UuZ2V0Q29udGVudHMoKS5pc0VtcHR5KCkgfHwgaXNQZXJzaXN0ZWQocmVzb3VyY2UpKSAmJiAhZWRpdGluZ0RvbWFpbi5pc1JlYWRPbmx5KHJlc291cmNlKSkgeworCQkJCQkJCXRyeSB7CisJCQkJCQkJCWxvbmcgdGltZVN0YW1wID0gcmVzb3VyY2UuZ2V0VGltZVN0YW1wKCk7CisJCQkJCQkJCXJlc291cmNlLnNhdmUoc2F2ZU9wdGlvbnMpOworCQkJCQkJCQlpZiAocmVzb3VyY2UuZ2V0VGltZVN0YW1wKCkgIT0gdGltZVN0YW1wKSB7CisJCQkJCQkJCQlzYXZlZFJlc291cmNlcy5hZGQocmVzb3VyY2UpOworCQkJCQkJCQl9CisJCQkJCQkJfQorCQkJCQkJCWNhdGNoIChFeGNlcHRpb24gZXhjZXB0aW9uKSB7CisJCQkJCQkJCXJlc291cmNlVG9EaWFnbm9zdGljTWFwLnB1dChyZXNvdXJjZSwgYW5hbHl6ZVJlc291cmNlUHJvYmxlbXMocmVzb3VyY2UsIGV4Y2VwdGlvbikpOworCQkJCQkJCX0KKwkJCQkJCQlmaXJzdCA9IGZhbHNlOworCQkJCQkJfQorCQkJCQl9CisJCQkJfQorCQkJfTsKKworCQl1cGRhdGVQcm9ibGVtSW5kaWNhdGlvbiA9IGZhbHNlOworCQl0cnkgeworCQkJLy8gVGhpcyBydW5zIHRoZSBvcHRpb25zLCBhbmQgc2hvd3MgcHJvZ3Jlc3MuCisJCQkvLworCQkJbmV3IFByb2dyZXNzTW9uaXRvckRpYWxvZyhnZXRTaXRlKCkuZ2V0U2hlbGwoKSkucnVuKHRydWUsIGZhbHNlLCBvcGVyYXRpb24pOworCisJCQkvLyBSZWZyZXNoIHRoZSBuZWNlc3Nhcnkgc3RhdGUuCisJCQkvLworCQkJKChCYXNpY0NvbW1hbmRTdGFjayllZGl0aW5nRG9tYWluLmdldENvbW1hbmRTdGFjaygpKS5zYXZlSXNEb25lKCk7CisJCQlmaXJlUHJvcGVydHlDaGFuZ2UoSUVkaXRvclBhcnQuUFJPUF9ESVJUWSk7CisJCX0KKwkJY2F0Y2ggKEV4Y2VwdGlvbiBleGNlcHRpb24pIHsKKwkJCS8vIFNvbWV0aGluZyB3ZW50IHdyb25nIHRoYXQgc2hvdWxkbid0LgorCQkJLy8KKwkJCUNvcmVFZGl0b3JQbHVnaW4uSU5TVEFOQ0UubG9nKGV4Y2VwdGlvbik7CisJCX0KKwkJdXBkYXRlUHJvYmxlbUluZGljYXRpb24gPSB0cnVlOworCQl1cGRhdGVQcm9ibGVtSW5kaWNhdGlvbigpOworCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyB3aGV0aGVyIHNvbWV0aGluZyBoYXMgYmVlbiBwZXJzaXN0ZWQgdG8gdGhlIFVSSSBvZiB0aGUgc3BlY2lmaWVkIHJlc291cmNlLgorCSAqIFRoZSBpbXBsZW1lbnRhdGlvbiB1c2VzIHRoZSBVUkkgY29udmVydGVyIGZyb20gdGhlIGVkaXRvcidzIHJlc291cmNlIHNldCB0byB0cnkgdG8gb3BlbiBhbiBpbnB1dCBzdHJlYW0uIAorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBib29sZWFuIGlzUGVyc2lzdGVkKFJlc291cmNlIHJlc291cmNlKSB7CisJCWJvb2xlYW4gcmVzdWx0ID0gZmFsc2U7CisJCXRyeSB7CisJCQlJbnB1dFN0cmVhbSBzdHJlYW0gPSBlZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkuZ2V0VVJJQ29udmVydGVyKCkuY3JlYXRlSW5wdXRTdHJlYW0ocmVzb3VyY2UuZ2V0VVJJKCkpOworCQkJaWYgKHN0cmVhbSAhPSBudWxsKSB7CisJCQkJcmVzdWx0ID0gdHJ1ZTsKKwkJCQlzdHJlYW0uY2xvc2UoKTsKKwkJCX0KKwkJfQorCQljYXRjaCAoSU9FeGNlcHRpb24gZSkgeworCQkJLy8gSWdub3JlCisJCX0KKwkJcmV0dXJuIHJlc3VsdDsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFsd2F5cyByZXR1cm5zIHRydWUgYmVjYXVzZSBpdCBpcyBub3QgY3VycmVudGx5IHN1cHBvcnRlZC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgYm9vbGVhbiBpc1NhdmVBc0FsbG93ZWQoKSB7CisJCXJldHVybiB0cnVlOworCX0KKworCS8qKgorCSAqIFRoaXMgYWxzbyBjaGFuZ2VzIHRoZSBlZGl0b3IncyBpbnB1dC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBkb1NhdmVBcygpIHsKKwkJU2F2ZUFzRGlhbG9nIHNhdmVBc0RpYWxvZyA9IG5ldyBTYXZlQXNEaWFsb2coZ2V0U2l0ZSgpLmdldFNoZWxsKCkpOworCQlzYXZlQXNEaWFsb2cub3BlbigpOworCQlJUGF0aCBwYXRoID0gc2F2ZUFzRGlhbG9nLmdldFJlc3VsdCgpOworCQlpZiAocGF0aCAhPSBudWxsKSB7CisJCQlJRmlsZSBmaWxlID0gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmdldFJvb3QoKS5nZXRGaWxlKHBhdGgpOworCQkJaWYgKGZpbGUgIT0gbnVsbCkgeworCQkJCWRvU2F2ZUFzKFVSSS5jcmVhdGVQbGF0Zm9ybVJlc291cmNlVVJJKGZpbGUuZ2V0RnVsbFBhdGgoKS50b1N0cmluZygpLCB0cnVlKSwgbmV3IEZpbGVFZGl0b3JJbnB1dChmaWxlKSk7CisJCQl9CisJCX0KKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBkb1NhdmVBcyhVUkkgdXJpLCBJRWRpdG9ySW5wdXQgZWRpdG9ySW5wdXQpIHsKKwkJKGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKS5nZXRSZXNvdXJjZXMoKS5nZXQoMCkpLnNldFVSSSh1cmkpOworCQlzZXRJbnB1dFdpdGhOb3RpZnkoZWRpdG9ySW5wdXQpOworCQlzZXRQYXJ0TmFtZShlZGl0b3JJbnB1dC5nZXROYW1lKCkpOworCQlJUHJvZ3Jlc3NNb25pdG9yIHByb2dyZXNzTW9uaXRvciA9CisJCQlnZXRBY3Rpb25CYXJzKCkuZ2V0U3RhdHVzTGluZU1hbmFnZXIoKSAhPSBudWxsID8KKwkJCQlnZXRBY3Rpb25CYXJzKCkuZ2V0U3RhdHVzTGluZU1hbmFnZXIoKS5nZXRQcm9ncmVzc01vbml0b3IoKSA6CisJCQkJbmV3IE51bGxQcm9ncmVzc01vbml0b3IoKTsKKwkJZG9TYXZlKHByb2dyZXNzTW9uaXRvcik7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgZ290b01hcmtlcihJTWFya2VyIG1hcmtlcikgeworCQl0cnkgeworCQkJaWYgKG1hcmtlci5nZXRUeXBlKCkuZXF1YWxzKEVWYWxpZGF0b3IuTUFSS0VSKSkgeworCQkJCVN0cmluZyB1cmlBdHRyaWJ1dGUgPSBtYXJrZXIuZ2V0QXR0cmlidXRlKEVWYWxpZGF0b3IuVVJJX0FUVFJJQlVURSwgbnVsbCk7CisJCQkJaWYgKHVyaUF0dHJpYnV0ZSAhPSBudWxsKSB7CisJCQkJCVVSSSB1cmkgPSBVUkkuY3JlYXRlVVJJKHVyaUF0dHJpYnV0ZSk7CisJCQkJCUVPYmplY3QgZU9iamVjdCA9IGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKS5nZXRFT2JqZWN0KHVyaSwgdHJ1ZSk7CisJCQkJCWlmIChlT2JqZWN0ICE9IG51bGwpIHsKKwkJCQkJICBzZXRTZWxlY3Rpb25Ub1ZpZXdlcihDb2xsZWN0aW9ucy5zaW5nbGV0b24oZWRpdGluZ0RvbWFpbi5nZXRXcmFwcGVyKGVPYmplY3QpKSk7CisJCQkJCX0KKwkJCQl9CisJCQl9CisJCX0KKwkJY2F0Y2ggKENvcmVFeGNlcHRpb24gZXhjZXB0aW9uKSB7CisJCQlDb3JlRWRpdG9yUGx1Z2luLklOU1RBTkNFLmxvZyhleGNlcHRpb24pOworCQl9CisJfQorCisJLyoqCisJICogVGhpcyBpcyBjYWxsZWQgZHVyaW5nIHN0YXJ0dXAuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgaW5pdChJRWRpdG9yU2l0ZSBzaXRlLCBJRWRpdG9ySW5wdXQgZWRpdG9ySW5wdXQpIHsKKwkJc2V0U2l0ZShzaXRlKTsKKwkJc2V0SW5wdXRXaXRoTm90aWZ5KGVkaXRvcklucHV0KTsKKwkJc2V0UGFydE5hbWUoZWRpdG9ySW5wdXQuZ2V0TmFtZSgpKTsKKwkJc2l0ZS5zZXRTZWxlY3Rpb25Qcm92aWRlcih0aGlzKTsKKwkJc2l0ZS5nZXRQYWdlKCkuYWRkUGFydExpc3RlbmVyKHBhcnRMaXN0ZW5lcik7CisJCVJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5hZGRSZXNvdXJjZUNoYW5nZUxpc3RlbmVyKHJlc291cmNlQ2hhbmdlTGlzdGVuZXIsIElSZXNvdXJjZUNoYW5nZUV2ZW50LlBPU1RfQ0hBTkdFKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBzZXRGb2N1cygpIHsKKwkJZ2V0Q29udHJvbChnZXRBY3RpdmVQYWdlKCkpLnNldEZvY3VzKCk7CisJfQorCisJLyoqCisJICogVGhpcyBpbXBsZW1lbnRzIHtAbGluayBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb25Qcm92aWRlcn0uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgYWRkU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyKElTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIgbGlzdGVuZXIpIHsKKwkJc2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVycy5hZGQobGlzdGVuZXIpOworCX0KKworCS8qKgorCSAqIFRoaXMgaW1wbGVtZW50cyB7QGxpbmsgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uUHJvdmlkZXJ9LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIHJlbW92ZVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcihJU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyIGxpc3RlbmVyKSB7CisJCXNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcnMucmVtb3ZlKGxpc3RlbmVyKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGltcGxlbWVudHMge0BsaW5rIG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvblByb3ZpZGVyfSB0byByZXR1cm4gdGhpcyBlZGl0b3IncyBvdmVyYWxsIHNlbGVjdGlvbi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgSVNlbGVjdGlvbiBnZXRTZWxlY3Rpb24oKSB7CisJCXJldHVybiBlZGl0b3JTZWxlY3Rpb247CisJfQorCisJLyoqCisJICogVGhpcyBpbXBsZW1lbnRzIHtAbGluayBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb25Qcm92aWRlcn0gdG8gc2V0IHRoaXMgZWRpdG9yJ3Mgb3ZlcmFsbCBzZWxlY3Rpb24uCisJICogQ2FsbGluZyB0aGlzIHJlc3VsdCB3aWxsIG5vdGlmeSB0aGUgbGlzdGVuZXJzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIHNldFNlbGVjdGlvbihJU2VsZWN0aW9uIHNlbGVjdGlvbikgeworCQllZGl0b3JTZWxlY3Rpb24gPSBzZWxlY3Rpb247CisKKwkJZm9yIChJU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyIGxpc3RlbmVyIDogc2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVycykgeworCQkJbGlzdGVuZXIuc2VsZWN0aW9uQ2hhbmdlZChuZXcgU2VsZWN0aW9uQ2hhbmdlZEV2ZW50KHRoaXMsIHNlbGVjdGlvbikpOworCQl9CisJCXNldFN0YXR1c0xpbmVNYW5hZ2VyKHNlbGVjdGlvbik7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgc2V0U3RhdHVzTGluZU1hbmFnZXIoSVNlbGVjdGlvbiBzZWxlY3Rpb24pIHsKKwkJSVN0YXR1c0xpbmVNYW5hZ2VyIHN0YXR1c0xpbmVNYW5hZ2VyID0gY3VycmVudFZpZXdlciAhPSBudWxsICYmIGN1cnJlbnRWaWV3ZXIgPT0gY29udGVudE91dGxpbmVWaWV3ZXIgPworCQkJY29udGVudE91dGxpbmVTdGF0dXNMaW5lTWFuYWdlciA6IGdldEFjdGlvbkJhcnMoKS5nZXRTdGF0dXNMaW5lTWFuYWdlcigpOworCisJCWlmIChzdGF0dXNMaW5lTWFuYWdlciAhPSBudWxsKSB7CisJCQlpZiAoc2VsZWN0aW9uIGluc3RhbmNlb2YgSVN0cnVjdHVyZWRTZWxlY3Rpb24pIHsKKwkJCQlDb2xsZWN0aW9uPD8+IGNvbGxlY3Rpb24gPSAoKElTdHJ1Y3R1cmVkU2VsZWN0aW9uKXNlbGVjdGlvbikudG9MaXN0KCk7CisJCQkJc3dpdGNoIChjb2xsZWN0aW9uLnNpemUoKSkgeworCQkJCQljYXNlIDA6IHsKKwkJCQkJCXN0YXR1c0xpbmVNYW5hZ2VyLnNldE1lc3NhZ2UoZ2V0U3RyaW5nKCJfVUlfTm9PYmplY3RTZWxlY3RlZCIpKTsgLy8kTk9OLU5MUy0xJAorCQkJCQkJYnJlYWs7CisJCQkJCX0KKwkJCQkJY2FzZSAxOiB7CisJCQkJCQlTdHJpbmcgdGV4dCA9IG5ldyBBZGFwdGVyRmFjdG9yeUl0ZW1EZWxlZ2F0b3IoYWRhcHRlckZhY3RvcnkpLmdldFRleHQoY29sbGVjdGlvbi5pdGVyYXRvcigpLm5leHQoKSk7CisJCQkJCQlzdGF0dXNMaW5lTWFuYWdlci5zZXRNZXNzYWdlKGdldFN0cmluZygiX1VJX1NpbmdsZU9iamVjdFNlbGVjdGVkIiwgdGV4dCkpOyAvLyROT04tTkxTLTEkCisJCQkJCQlicmVhazsKKwkJCQkJfQorCQkJCQlkZWZhdWx0OiB7CisJCQkJCQlzdGF0dXNMaW5lTWFuYWdlci5zZXRNZXNzYWdlKGdldFN0cmluZygiX1VJX011bHRpT2JqZWN0U2VsZWN0ZWQiLCBJbnRlZ2VyLnRvU3RyaW5nKGNvbGxlY3Rpb24uc2l6ZSgpKSkpOyAvLyROT04tTkxTLTEkCisJCQkJCQlicmVhazsKKwkJCQkJfQorCQkJCX0KKwkJCX0KKwkJCWVsc2UgeworCQkJCXN0YXR1c0xpbmVNYW5hZ2VyLnNldE1lc3NhZ2UoIiIpOyAvLyROT04tTkxTLTEkCisJCQl9CisJCX0KKwl9CisKKwkvKioKKwkgKiBUaGlzIGxvb2tzIHVwIGEgc3RyaW5nIGluIHRoZSBwbHVnaW4ncyBwbHVnaW4ucHJvcGVydGllcyBmaWxlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByaXZhdGUgc3RhdGljIFN0cmluZyBnZXRTdHJpbmcoU3RyaW5nIGtleSkgeworCQlyZXR1cm4gQ29yZUVkaXRvclBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoa2V5KTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGxvb2tzIHVwIGEgc3RyaW5nIGluIHBsdWdpbi5wcm9wZXJ0aWVzLCBtYWtpbmcgYSBzdWJzdGl0dXRpb24uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIGdldFN0cmluZyhTdHJpbmcga2V5LCBPYmplY3QgczEpIHsKKwkJcmV0dXJuIENvcmVFZGl0b3JQbHVnaW4uSU5TVEFOQ0UuZ2V0U3RyaW5nKGtleSwgbmV3IE9iamVjdCBbXSB7IHMxIH0pOworCX0KKworCS8qKgorCSAqIFRoaXMgaW1wbGVtZW50cyB7QGxpbmsgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklNZW51TGlzdGVuZXJ9IHRvIGhlbHAgZmlsbCB0aGUgY29udGV4dCBtZW51cyB3aXRoIGNvbnRyaWJ1dGlvbnMgZnJvbSB0aGUgRWRpdCBtZW51LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIG1lbnVBYm91dFRvU2hvdyhJTWVudU1hbmFnZXIgbWVudU1hbmFnZXIpIHsKKwkJKChJTWVudUxpc3RlbmVyKWdldEVkaXRvclNpdGUoKS5nZXRBY3Rpb25CYXJDb250cmlidXRvcigpKS5tZW51QWJvdXRUb1Nob3cobWVudU1hbmFnZXIpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFZGl0aW5nRG9tYWluQWN0aW9uQmFyQ29udHJpYnV0b3IgZ2V0QWN0aW9uQmFyQ29udHJpYnV0b3IoKSB7CisJCXJldHVybiAoRWRpdGluZ0RvbWFpbkFjdGlvbkJhckNvbnRyaWJ1dG9yKWdldEVkaXRvclNpdGUoKS5nZXRBY3Rpb25CYXJDb250cmlidXRvcigpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBJQWN0aW9uQmFycyBnZXRBY3Rpb25CYXJzKCkgeworCQlyZXR1cm4gZ2V0QWN0aW9uQmFyQ29udHJpYnV0b3IoKS5nZXRBY3Rpb25CYXJzKCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEFkYXB0ZXJGYWN0b3J5IGdldEFkYXB0ZXJGYWN0b3J5KCkgeworCQlyZXR1cm4gYWRhcHRlckZhY3Rvcnk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgZGlzcG9zZSgpIHsKKwkJdXBkYXRlUHJvYmxlbUluZGljYXRpb24gPSBmYWxzZTsKKworCQlSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkucmVtb3ZlUmVzb3VyY2VDaGFuZ2VMaXN0ZW5lcihyZXNvdXJjZUNoYW5nZUxpc3RlbmVyKTsKKworCQlnZXRTaXRlKCkuZ2V0UGFnZSgpLnJlbW92ZVBhcnRMaXN0ZW5lcihwYXJ0TGlzdGVuZXIpOworCisJCWFkYXB0ZXJGYWN0b3J5LmRpc3Bvc2UoKTsKKworCQlpZiAoZ2V0QWN0aW9uQmFyQ29udHJpYnV0b3IoKS5nZXRBY3RpdmVFZGl0b3IoKSA9PSB0aGlzKSB7CisJCQlnZXRBY3Rpb25CYXJDb250cmlidXRvcigpLnNldEFjdGl2ZUVkaXRvcihudWxsKTsKKwkJfQorCisJCWlmIChwcm9wZXJ0eVNoZWV0UGFnZSAhPSBudWxsKSB7CisJCQlwcm9wZXJ0eVNoZWV0UGFnZS5kaXNwb3NlKCk7CisJCX0KKworCQlpZiAoY29udGVudE91dGxpbmVQYWdlICE9IG51bGwpIHsKKwkJCWNvbnRlbnRPdXRsaW5lUGFnZS5kaXNwb3NlKCk7CisJCX0KKworCQlzdXBlci5kaXNwb3NlKCk7CisJfQorCisJLyoqCisJICogUmV0dXJucyB3aGV0aGVyIHRoZSBvdXRsaW5lIHZpZXcgc2hvdWxkIGJlIHByZXNlbnRlZCB0byB0aGUgdXNlci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgYm9vbGVhbiBzaG93T3V0bGluZVZpZXcoKSB7CisJCXJldHVybiBmYWxzZTsKKwl9Cit9CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvQWN0aXZhdG9yLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvQWN0aXZhdG9yLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDBhZTNiNgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9BY3RpdmF0b3IuamF2YQpAQCAtMCwwICsxLDQyMiBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnVpOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA2IDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklDb25maWd1cmF0aW9uRWxlbWVudDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGxhdGZvcm07CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlN0YXR1czsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5BZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5yZXNvdXJjZS5Db2xvclJlZ2lzdHJ5OworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnJlc291cmNlLkZvbnRSZWdpc3RyeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5yZXNvdXJjZS5JbWFnZVJlZ2lzdHJ5OworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnJlc291cmNlLkpGYWNlUmVzb3VyY2VzOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udWkuYWRhcHRlcnMuY29sb3IuQ29sb3JQcm92aWRlckFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udWkuYWRhcHRlcnMuZmVhdHVyZW1vZGlmaWVyZWRpdGNvbXBvc2l0ZS5FeHBlcmltZW50RmVhdHVyZU1vZGlmaWVyRWRpdENvbXBvc2l0ZUZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS51aS5hZGFwdGVycy5uZXdtb2RpZmllcnBhZ2UuQ29tbW9uTmV3TW9kaWZpZXJQYWdlQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS51aS5hZGFwdGVycy5uZXdtb2RpZmllcnBhZ2UuR3JhcGhOZXdNb2RpZmllclBhZ2VBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnVpLmFkYXB0ZXJzLm5ld21vZGlmaWVycGFnZS5MYWJlbHNOZXdNb2RpZmllclBhZ2VBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnVpLmFkYXB0ZXJzLm5ld21vZGlmaWVycGFnZS5TZXF1ZW5jZXJOZXdNb2RpZmllclBhZ2VBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnVpLmFkYXB0ZXJzLnByb3BlcnR5c3RyaW5ncy5MYWJlbHNQcm9wZXJ0eVN0cmluZ1Byb3ZpZGVyQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LlNXVDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZ3JhcGhpY3MuRm9udERhdGE7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmdyYXBoaWNzLlJHQjsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5JV29ya2JlbmNoOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLlBsYXRmb3JtVUk7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuV29ya2JlbmNoRXhjZXB0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLnBsdWdpbi5BYnN0cmFjdFVJUGx1Z2luOworaW1wb3J0IG9yZy5vc2dpLmZyYW1ld29yay5CdW5kbGU7CitpbXBvcnQgb3JnLm9zZ2kuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHQ7CisKKy8qKgorICogVGhlIG1haW4gcGx1Z2luIGNsYXNzIHRvIGJlIHVzZWQgaW4gdGhlIGRlc2t0b3AuCisgKi8KK3B1YmxpYyBjbGFzcyBBY3RpdmF0b3IgZXh0ZW5kcyBBYnN0cmFjdFVJUGx1Z2luIHsKKworCS8qKgorCSAqIFRoZSBzeW1ib2xpYyBpZGVudGlmaWVyIGZvciB0aGlzIHBsdWctaW4KKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBQTFVHSU5fSUQgPSAib3JnLmVjbGlwc2Uuc3RlbS51aSI7IC8vJE5PTi1OTFMtMSQKKworCS8vIFRoZSBzaGFyZWQgaW5zdGFuY2UuCisJcHJpdmF0ZSBzdGF0aWMgQWN0aXZhdG9yIHBsdWdpbjsKKworCS8vIFRoZSBTV1QgY29sb3IgcmVnaXN0cnkKKwlwcml2YXRlIHN0YXRpYyBDb2xvclJlZ2lzdHJ5IGNvbG9yUmVnaXN0cnkgPSBudWxsOworCisJLy8gVGhlIFNXVCBmb250IHJlZ2lzdHJ5CisJcHJpdmF0ZSBzdGF0aWMgRm9udFJlZ2lzdHJ5IGZvbnRSZWdpc3RyeSA9IG51bGw7CisKKwkvKioKKwkgKiBUaGUgY29uc3RydWN0b3IuCisJICovCisJcHVibGljIEFjdGl2YXRvcigpIHsKKwkJc3VwZXIoKTsKKwkJcGx1Z2luID0gdGhpczsKKwl9CisKKwkvKioKKwkgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgdXBvbiBwbHVnLWluIGFjdGl2YXRpb24KKwkgKiAKKwkgKiBAcGFyYW0gY29udGV4dAorCSAqIEB0aHJvd3MgRXhjZXB0aW9uCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgc3RhcnQoQnVuZGxlQ29udGV4dCBjb250ZXh0KSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJc3VwZXIuc3RhcnQoY29udGV4dCk7CisJCW5ldyBTZXF1ZW5jZXJOZXdNb2RpZmllclBhZ2VBZGFwdGVyRmFjdG9yeSgpOworCQluZXcgR3JhcGhOZXdNb2RpZmllclBhZ2VBZGFwdGVyRmFjdG9yeSgpOworCQluZXcgTGFiZWxzTmV3TW9kaWZpZXJQYWdlQWRhcHRlckZhY3RvcnkoKTsKKwkJbmV3IEV4cGVyaW1lbnRGZWF0dXJlTW9kaWZpZXJFZGl0Q29tcG9zaXRlRmFjdG9yeSgpOworCQluZXcgTGFiZWxzUHJvcGVydHlTdHJpbmdQcm92aWRlckFkYXB0ZXJGYWN0b3J5KCk7CisJCW5ldyBDb21tb25OZXdNb2RpZmllclBhZ2VBZGFwdGVyRmFjdG9yeSgpOworCQkKKwkJLy9HZXQgdGhlIGV4dGVuc2lvbiBjb2xvciBwcm92aWRlcnMgYW5kIGFkZCB0aGVtIHRvIHRoZSBjb21wb3NlZCBmYWN0b3J5CisJCUlDb25maWd1cmF0aW9uRWxlbWVudFtdIGVsZW1lbnRzID0gCisJCQlQbGF0Zm9ybS5nZXRFeHRlbnNpb25SZWdpc3RyeSgpLmdldENvbmZpZ3VyYXRpb25FbGVtZW50c0Zvcigib3JnLmVjbGlwc2Uuc3RlbS51aS5jb2xvcnByb3ZpZGVycyIpOworCQlmb3IgKElDb25maWd1cmF0aW9uRWxlbWVudCBlbGVtZW50IDogZWxlbWVudHMpIHsKKwkJCWlmICghZWxlbWVudC5pc1ZhbGlkKCkpIHsKKwkJCQlBY3RpdmF0b3IubG9nRXJyb3IoIkludmFsaWQgY29sb3IgcHJvdmlkZXIgZXh0ZW5zaW9uIiwgbnVsbCk7CisJCQkJY29udGludWU7CisJCQl9CisJCQkvL0dldCB0aGUgYnVuZGxlIHRoYXQgZXh0ZW5kZWQgdGhlIGV4dGVuc2lvbiBwb2ludAorCQkJQnVuZGxlIGJ1bmRsZSA9IFBsYXRmb3JtLmdldEJ1bmRsZShlbGVtZW50LmdldENvbnRyaWJ1dG9yKCkuZ2V0TmFtZSgpKTsKKwkJCVN0cmluZyBuYW1lID0gZWxlbWVudC5nZXRBdHRyaWJ1dGUoIm5hbWUiKTsKKwkJCVN0cmluZyBmYWN0b3J5ID0gZWxlbWVudC5nZXRBdHRyaWJ1dGUoImZhY3RvcnkiKTsKKwkJCVN0cmluZyBwcm92aWRlciA9IGVsZW1lbnQuZ2V0QXR0cmlidXRlKCJwcm92aWRlciIpOworCQkJLy9Vc2UgdGhlIGJ1bmRsZSdzIGNsYXNzIGxvYWRlciB0byBsb2FkIHRoZSBjbGFzc2VzCisJCQlDbGFzcyBmYWN0b3J5Q2xhc3MgPSBidW5kbGUubG9hZENsYXNzKGZhY3RvcnkpOworCQkJT2JqZWN0IGZhY3RvcnlJbnN0YW5jZSA9IGZhY3RvcnlDbGFzcy5uZXdJbnN0YW5jZSgpOworCQkJQ2xhc3MgcHJvdmlkZXJDbGFzcyA9IGJ1bmRsZS5sb2FkQ2xhc3MocHJvdmlkZXIpOworCQkJLy9SZWdpc3RlciB0aGUgc3BlY2lmaWMgZmFjdG9yeSBpbiB0aGUgZ2VuZXJhbCBmYWN0b3J5CisJCQlDb2xvclByb3ZpZGVyQWRhcHRlckZhY3RvcnkuSU5TVEFOQ0UuYWRkQWRhcHRlckZhY3RvcnkoCisJCQkJCShBZGFwdGVyRmFjdG9yeSlmYWN0b3J5SW5zdGFuY2UsIHByb3ZpZGVyQ2xhc3MsIG5hbWUpOworCQl9CisJfSAvLyBzdGFydAorCisJLyoqCisJICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIHdoZW4gdGhlIHBsdWctaW4gaXMgc3RvcHBlZAorCSAqIAorCSAqIEBwYXJhbSBjb250ZXh0CisJICogQHRocm93cyBFeGNlcHRpb24KKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBzdG9wKEJ1bmRsZUNvbnRleHQgY29udGV4dCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCXN1cGVyLnN0b3AoY29udGV4dCk7CisJCXBsdWdpbiA9IG51bGw7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgc2hhcmVkIGluc3RhbmNlLgorCSAqIAorCSAqIEByZXR1cm4gdGhlIHNoYXJlZCBpbnN0YW5jZS4KKwkgKi8KKwlwdWJsaWMgc3RhdGljIEFjdGl2YXRvciBnZXREZWZhdWx0KCkgeworCQlyZXR1cm4gcGx1Z2luOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIGNvbG9yIHJlZ2lzdHJ5CisJICogCisJICogQHJldHVybiBhIHJlZmVyZW5jZSB0byB0aGUgY29sb3IgcmVnaXN0cnkKKwkgKi8KKwlwdWJsaWMgQ29sb3JSZWdpc3RyeSBnZXRDb2xvclJlZ2lzdHJ5KCkgeworCQlpZiAoY29sb3JSZWdpc3RyeSA9PSBudWxsKSB7CisJCQljb2xvclJlZ2lzdHJ5ID0gbmV3IENvbG9yUmVnaXN0cnkoKTsKKwkJCWluaXRpYWxpemVDb2xvclJlZ2lzdHJ5KGNvbG9yUmVnaXN0cnkpOworCQl9CisJCXJldHVybiBjb2xvclJlZ2lzdHJ5OworCX0gLy8gZ2V0Q29sb3JSZWdpc3RyeQorCisJLyoqCisJICogUmV0dXJucyB0aGUgZm9udCByZWdpc3RyeQorCSAqIAorCSAqIEByZXR1cm4gYSByZWZlcmVuY2UgdG8gdGhlIGZvbnQgcmVnaXN0cnkKKwkgKi8KKwlwdWJsaWMgRm9udFJlZ2lzdHJ5IGdldEZvbnRSZWdpc3RyeSgpIHsKKwkJaWYgKGZvbnRSZWdpc3RyeSA9PSBudWxsKSB7CisJCQlmb250UmVnaXN0cnkgPSBuZXcgRm9udFJlZ2lzdHJ5KCk7CisJCQlpbml0aWFsaXplRm9udFJlZ2lzdHJ5KGZvbnRSZWdpc3RyeSk7CisJCX0KKwkJcmV0dXJuIGZvbnRSZWdpc3RyeTsKKwl9IC8vIGdldENvbG9yUmVnaXN0cnkKKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2UudWkucGx1Z2luLkFic3RyYWN0VUlQbHVnaW4jaW5pdGlhbGl6ZUltYWdlUmVnaXN0cnkob3JnLmVjbGlwc2UuamZhY2UucmVzb3VyY2UuSW1hZ2VSZWdpc3RyeSkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgdm9pZCBpbml0aWFsaXplSW1hZ2VSZWdpc3RyeShJbWFnZVJlZ2lzdHJ5IHJlZ2lzdHJ5KSB7CisvLwkJZmluYWwgU3RyaW5nIElDT05fUEFUSF9QUkVGSVggPSAiaWNvbnMvZnVsbC9jdXN0b21vYmoxNi8iOyAvLyROT04tTkxTLTEkCisJCWZpbmFsIFN0cmluZyBJQ09OX0FDVElPTl9QQVRIX1BSRUZJWCA9ICJpY29ucy9mdWxsL2FjdGlvbnMxNi8iOyAvLyROT04tTkxTLTEkCisKKwkJZmluYWwgU3RyaW5nIENVU1RPTV9JQ09OX1BBVEhfUFJFRklYMiA9ICJpY29ucy9mdWxsL2N1c3RvbW9iajE2LyI7IC8vJE5PTi1OTFMtMSRDCisJCQorCQlyZWdpc3RyeS5wdXQoSVNoYXJlZEltYWdlcy5BVVRPTUFUSUNfRVhQRVJJTUVOVF9JQ09OLCBpbWFnZURlc2NyaXB0b3JGcm9tUGx1Z2luKAorCQkJCVBMVUdJTl9JRCwgQ1VTVE9NX0lDT05fUEFUSF9QUkVGSVgyICsgIkF1dG9tYXRpY0V4cGVyaW1lbnQuZ2lmIikpOyAvLyROT04tTkxTLTEkCisKKwkJcmVnaXN0cnkucHV0KElTaGFyZWRJbWFnZXMuREVDT1JBVE9SX0lDT04sIGltYWdlRGVzY3JpcHRvckZyb21QbHVnaW4oCisJCQkJUExVR0lOX0lELCBDVVNUT01fSUNPTl9QQVRIX1BSRUZJWDIgKyAiRGVjb3JhdG9yLmdpZiIpKTsgLy8kTk9OLU5MUy0xJAorCisJCXJlZ2lzdHJ5LnB1dChJU2hhcmVkSW1hZ2VzLkRFQ09SQVRPUl9GT0xERVJfSUNPTiwgaW1hZ2VEZXNjcmlwdG9yRnJvbVBsdWdpbigKKwkJCQlQTFVHSU5fSUQsIENVU1RPTV9JQ09OX1BBVEhfUFJFRklYMiArICJEZWNvcmF0b3JNb2RlbEZpbGUuZ2lmIikpOyAvLyROT04tTkxTLTEkCisKKwkJcmVnaXN0cnkucHV0KElTaGFyZWRJbWFnZXMuRFlOQU1JQ19MQUJFTF9JQ09OLAorCQkJCWltYWdlRGVzY3JpcHRvckZyb21QbHVnaW4oUExVR0lOX0lELCBDVVNUT01fSUNPTl9QQVRIX1BSRUZJWDIKKwkJCQkJCSsgIkR5bmFtaWNMYWJlbC5naWYiKSk7IC8vJE5PTi1OTFMtMSQKKwkJCisJCXJlZ2lzdHJ5LnB1dChJU2hhcmVkSW1hZ2VzLkVER0VfSUNPTiwgaW1hZ2VEZXNjcmlwdG9yRnJvbVBsdWdpbigKKwkJCQlQTFVHSU5fSUQsIENVU1RPTV9JQ09OX1BBVEhfUFJFRklYMiArICJFZGdlLmdpZiIpKTsgLy8kTk9OLU5MUy0xJAorCisJCXJlZ2lzdHJ5LnB1dChJU2hhcmVkSW1hZ2VzLkVYUEVSSU1FTlRfSUNPTiwgaW1hZ2VEZXNjcmlwdG9yRnJvbVBsdWdpbigKKwkJCQlQTFVHSU5fSUQsIENVU1RPTV9JQ09OX1BBVEhfUFJFRklYMiArICJFeHBlcmltZW50LmdpZiIpKTsgLy8kTk9OLU5MUy0xJAorCQkKKworCQlyZWdpc3RyeS5wdXQoSVNoYXJlZEltYWdlcy5FWFBFUklNRU5UX0ZPTERFUl9JQ09OLCBpbWFnZURlc2NyaXB0b3JGcm9tUGx1Z2luKAorCQkJCVBMVUdJTl9JRCwgQ1VTVE9NX0lDT05fUEFUSF9QUkVGSVgyICsgIkV4cGVyaW1lbnRNb2RlbEZpbGUuZ2lmIikpOyAvLyROT04tTkxTLTEkCisJCQorCQlyZWdpc3RyeS5wdXQoSVNoYXJlZEltYWdlcy5HUkFQSF9JQ09OLCBpbWFnZURlc2NyaXB0b3JGcm9tUGx1Z2luKAorCQkJCVBMVUdJTl9JRCwgQ1VTVE9NX0lDT05fUEFUSF9QUkVGSVgyICsgIkdyYXBoLmdpZiIpKTsgLy8kTk9OLU5MUy0xJAorCisJCXJlZ2lzdHJ5LnB1dChJU2hhcmVkSW1hZ2VzLkdSQVBIX0ZPTERFUl9JQ09OLAorCQkJCWltYWdlRGVzY3JpcHRvckZyb21QbHVnaW4oUExVR0lOX0lELCBDVVNUT01fSUNPTl9QQVRIX1BSRUZJWDIKKwkJCQkJCSsgIkdyYXBoTW9kZWxGaWxlLmdpZiIpKTsgLy8kTk9OLU5MUy0xJAorCisJCXJlZ2lzdHJ5LnB1dChJU2hhcmVkSW1hZ2VzLk1PREVMX0lDT04sIGltYWdlRGVzY3JpcHRvckZyb21QbHVnaW4oCisJCQkJUExVR0lOX0lELCBDVVNUT01fSUNPTl9QQVRIX1BSRUZJWDIgKyAiTW9kZWwuZ2lmIikpOyAvLyROT04tTkxTLTEkCisKKwkJcmVnaXN0cnkucHV0KElTaGFyZWRJbWFnZXMuTU9ERUxfRk9MREVSX0lDT04sCisJCQkJaW1hZ2VEZXNjcmlwdG9yRnJvbVBsdWdpbihQTFVHSU5fSUQsIENVU1RPTV9JQ09OX1BBVEhfUFJFRklYMgorCQkJCQkJKyAiTW9kZWxNb2RlbEZpbGUuZ2lmIikpOyAvLyROT04tTkxTLTEkCisKKwkJcmVnaXN0cnkucHV0KElTaGFyZWRJbWFnZXMuTU9ESUZJRVJfSUNPTiwgaW1hZ2VEZXNjcmlwdG9yRnJvbVBsdWdpbigKKwkJCQlQTFVHSU5fSUQsIENVU1RPTV9JQ09OX1BBVEhfUFJFRklYMiArICJNb2RpZmllci5naWYiKSk7IC8vJE5PTi1OTFMtMSQKKworCQlyZWdpc3RyeS5wdXQoSVNoYXJlZEltYWdlcy5NT0RJRklFUl9GT0xERVJfSUNPTiwgaW1hZ2VEZXNjcmlwdG9yRnJvbVBsdWdpbigKKwkJCQlQTFVHSU5fSUQsIENVU1RPTV9JQ09OX1BBVEhfUFJFRklYMiArICJNb2RpZmllck1vZGVsRmlsZS5naWYiKSk7IC8vJE5PTi1OTFMtMSQKKwkJCisJCXJlZ2lzdHJ5LnB1dChJU2hhcmVkSW1hZ2VzLk5PREVfSUNPTiwgaW1hZ2VEZXNjcmlwdG9yRnJvbVBsdWdpbigKKwkJCQlQTFVHSU5fSUQsIENVU1RPTV9JQ09OX1BBVEhfUFJFRklYMiArICJOb2RlLmdpZiIpKTsgLy8kTk9OLU5MUy0xJAorCisJCXJlZ2lzdHJ5LnB1dChJU2hhcmVkSW1hZ2VzLlBSRURJQ0FURV9JQ09OLCBpbWFnZURlc2NyaXB0b3JGcm9tUGx1Z2luKAorCQkJCVBMVUdJTl9JRCwgQ1VTVE9NX0lDT05fUEFUSF9QUkVGSVgyICsgIlByZWRpY2F0ZS5naWYiKSk7IC8vJE5PTi1OTFMtMSQKKwkJCisJCXJlZ2lzdHJ5LnB1dChJU2hhcmVkSW1hZ2VzLlBSRURJQ0FURV9GT0xERVJfSUNPTiwgaW1hZ2VEZXNjcmlwdG9yRnJvbVBsdWdpbigKKwkJCQlQTFVHSU5fSUQsIENVU1RPTV9JQ09OX1BBVEhfUFJFRklYMiArICJQcmVkaWNhdGVNb2RlbEZpbGUuZ2lmIikpOyAvLyROT04tTkxTLTEkCisKKwkJcmVnaXN0cnkucHV0KElTaGFyZWRJbWFnZXMuUkVDT1JERURfU0lNVUxBVElPTl9JQ09OLCBpbWFnZURlc2NyaXB0b3JGcm9tUGx1Z2luKAorCQkJCVBMVUdJTl9JRCwgQ1VTVE9NX0lDT05fUEFUSF9QUkVGSVgyICsgIlJlY29yZGVkU2ltdWxhdGlvbnMuZ2lmIikpOyAvLyROT04tTkxTLTEkCisKKwkJcmVnaXN0cnkucHV0KElTaGFyZWRJbWFnZXMuUkVDT1JERURfU0lNVUxBVElPTl9GT0xERVJfSUNPTiwgaW1hZ2VEZXNjcmlwdG9yRnJvbVBsdWdpbigKKwkJCQlQTFVHSU5fSUQsIENVU1RPTV9JQ09OX1BBVEhfUFJFRklYMiArICJSZWNvcmRlZFNpbXVsYXRpb25zTW9kZWxGaWxlLmdpZiIpKTsgLy8kTk9OLU5MUy0xJAorCQkKKwkJcmVnaXN0cnkucHV0KElTaGFyZWRJbWFnZXMuU0NFTkFSSU9fSUNPTiwgaW1hZ2VEZXNjcmlwdG9yRnJvbVBsdWdpbigKKwkJCQlQTFVHSU5fSUQsIENVU1RPTV9JQ09OX1BBVEhfUFJFRklYMiArICJTY2VuYXJpby5naWYiKSk7IC8vJE5PTi1OTFMtMSQKKworCQlyZWdpc3RyeS5wdXQoSVNoYXJlZEltYWdlcy5TQ0VOQVJJT19GT0xERVJfSUNPTiwKKwkJCQlpbWFnZURlc2NyaXB0b3JGcm9tUGx1Z2luKFBMVUdJTl9JRCwgQ1VTVE9NX0lDT05fUEFUSF9QUkVGSVgyCisJCQkJCQkrICJTY2VuYXJpb01vZGVsRmlsZS5naWYiKSk7IC8vJE5PTi1OTFMtMSQKKworCQlyZWdpc3RyeS5wdXQoSVNoYXJlZEltYWdlcy5TRVFVRU5DRVJfSUNPTiwgaW1hZ2VEZXNjcmlwdG9yRnJvbVBsdWdpbigKKwkJCQlQTFVHSU5fSUQsIENVU1RPTV9JQ09OX1BBVEhfUFJFRklYMiArICJTZXF1ZW5jZXIuZ2lmIikpOyAvLyROT04tTkxTLTEkCisKKwkJcmVnaXN0cnkucHV0KElTaGFyZWRJbWFnZXMuU0VRVUVOQ0VSX0ZPTERFUl9JQ09OLCBpbWFnZURlc2NyaXB0b3JGcm9tUGx1Z2luKAorCQkJCVBMVUdJTl9JRCwgQ1VTVE9NX0lDT05fUEFUSF9QUkVGSVgyICsgIlNlcXVlbmNlck1vZGVsRmlsZS5naWYiKSk7IC8vJE5PTi1OTFMtMSQKKworCQlyZWdpc3RyeS5wdXQoSVNoYXJlZEltYWdlcy5TVEFUSUNfTEFCRUxfSUNPTiwKKwkJCQlpbWFnZURlc2NyaXB0b3JGcm9tUGx1Z2luKFBMVUdJTl9JRCwgQ1VTVE9NX0lDT05fUEFUSF9QUkVGSVgyCisJCQkJCQkrICJTdGF0aWNMYWJlbC5naWYiKSk7IC8vJE5PTi1OTFMtMSQKKworCQlyZWdpc3RyeS5wdXQoSVNoYXJlZEltYWdlcy5UUklHR0VSX0lDT04sIGltYWdlRGVzY3JpcHRvckZyb21QbHVnaW4oCisJCQkJUExVR0lOX0lELCBDVVNUT01fSUNPTl9QQVRIX1BSRUZJWDIgKyAiVHJpZ2dlci5naWYiKSk7IC8vJE5PTi1OTFMtMSQKKwkJCisJCXJlZ2lzdHJ5LnB1dChJU2hhcmVkSW1hZ2VzLlRSSUdHRVJfRk9MREVSX0lDT04sIGltYWdlRGVzY3JpcHRvckZyb21QbHVnaW4oCisJCQkJUExVR0lOX0lELCBDVVNUT01fSUNPTl9QQVRIX1BSRUZJWDIgKyAiVHJpZ2dlck1vZGVsRmlsZS5naWYiKSk7IC8vJE5PTi1OTFMtMSQKKworCQlyZWdpc3RyeS5wdXQoSVNoYXJlZEltYWdlcy5TVEVNX1BST0pFQ1RfSUNPTiwKKwkJCQlpbWFnZURlc2NyaXB0b3JGcm9tUGx1Z2luKFBMVUdJTl9JRCwgQ1VTVE9NX0lDT05fUEFUSF9QUkVGSVgyCisJCQkJCQkrICJzdGVtLmdpZiIpKTsgLy8kTk9OLU5MUy0xJAorCisJCXJlZ2lzdHJ5LnB1dChJU2hhcmVkSW1hZ2VzLlNURU1fRVhQTE9SRVJfUFJPSkVDVF9JQ09OLAorCQkJCWltYWdlRGVzY3JpcHRvckZyb21QbHVnaW4oUExVR0lOX0lELCBDVVNUT01fSUNPTl9QQVRIX1BSRUZJWDIKKwkJCQkJCSsgIlN0ZW1Qcm9qZWN0LmdpZiIpKTsgLy8kTk9OLU5MUy0xJAorCisJCXJlZ2lzdHJ5LnB1dChJU2hhcmVkSW1hZ2VzLlNURU1fRVhQTE9SRVJfVklFV19JQ09OLAorCQkJCWltYWdlRGVzY3JpcHRvckZyb21QbHVnaW4oUExVR0lOX0lELCBDVVNUT01fSUNPTl9QQVRIX1BSRUZJWDIKKwkJCQkJCSsgInN0ZW1FeHBsb3Jlci5naWYiKSk7IC8vJE5PTi1OTFMtMSQKKworCQlyZWdpc3RyeS5wdXQoSVNoYXJlZEltYWdlcy5TSU1VTEFUSU9OX0NPTlRST0xfVklFV19JQ09OLAorCQkJCWltYWdlRGVzY3JpcHRvckZyb21QbHVnaW4oUExVR0lOX0lELCBDVVNUT01fSUNPTl9QQVRIX1BSRUZJWDIKKwkJCQkJCSsgInNpbXVsYXRpb25Db250cm9sVmlldy5naWYiKSk7IC8vJE5PTi1OTFMtMSQKKworCQlyZWdpc3RyeS5wdXQoSVNoYXJlZEltYWdlcy5TSU1VTEFUSU9OX0NPTlRST0xfSUNPTiwKKwkJCQlpbWFnZURlc2NyaXB0b3JGcm9tUGx1Z2luKFBMVUdJTl9JRCwgQ1VTVE9NX0lDT05fUEFUSF9QUkVGSVgyCisJCQkJCQkrICJzaW11bGF0aW9uQ29udHJvbC5naWYiKSk7IC8vJE5PTi1OTFMtMSQKKworCQlyZWdpc3RyeS5wdXQoSVNoYXJlZEltYWdlcy5ERUxFVEVfRklMRV9JQ09OLCBpbWFnZURlc2NyaXB0b3JGcm9tUGx1Z2luKAorCQkJCVBMVUdJTl9JRCwgQ1VTVE9NX0lDT05fUEFUSF9QUkVGSVgyICsgImRlbGV0ZS5naWYiKSk7IC8vJE5PTi1OTFMtMSQKKworCQlyZWdpc3RyeS5wdXQoSVNoYXJlZEltYWdlcy5TVEVNX0dSQVBIX0ZJTEVfSUNPTiwKKwkJCQlpbWFnZURlc2NyaXB0b3JGcm9tUGx1Z2luKFBMVUdJTl9JRCwgQ1VTVE9NX0lDT05fUEFUSF9QUkVGSVgyCisJCQkJCQkrICJnZW5lcmljRmlsZS5naWYiKSk7IC8vJE5PTi1OTFMtMSQKKworCQlyZWdpc3RyeS5wdXQoSVNoYXJlZEltYWdlcy5TVEVNX0ZPTERFUl9JQ09OLAorCQkJCWltYWdlRGVzY3JpcHRvckZyb21QbHVnaW4oUExVR0lOX0lELCBDVVNUT01fSUNPTl9QQVRIX1BSRUZJWDIKKwkJCQkJCSsgIlNjZW5hcmlvTW9kZWxGaWxlLmdpZiIpKTsgLy8kTk9OLU5MUy0xJAorCisJCXJlZ2lzdHJ5LnB1dChJU2hhcmVkSW1hZ2VzLlNURU1fU0NFTkFSSU9fRklMRV9JQ09OLAorCQkJCWltYWdlRGVzY3JpcHRvckZyb21QbHVnaW4oUExVR0lOX0lELCBDVVNUT01fSUNPTl9QQVRIX1BSRUZJWDIKKwkJCQkJCSsgIlNjZW5hcmlvTW9kZWxGaWxlLmdpZiIpKTsgLy8kTk9OLU5MUy0xJAorCisJCXJlZ2lzdHJ5LnB1dChJU2hhcmVkSW1hZ2VzLlJVTl9JQ09OLCBpbWFnZURlc2NyaXB0b3JGcm9tUGx1Z2luKAorCQkJCVBMVUdJTl9JRCwgSUNPTl9BQ1RJT05fUEFUSF9QUkVGSVggKyAicnVuLmdpZiIpKTsgLy8kTk9OLU5MUy0xJAorCisJCXJlZ2lzdHJ5LnB1dChJU2hhcmVkSW1hZ2VzLlBBVVNFX0lDT04sIGltYWdlRGVzY3JpcHRvckZyb21QbHVnaW4oCisJCQkJUExVR0lOX0lELCBJQ09OX0FDVElPTl9QQVRIX1BSRUZJWCArICJwYXVzZS5naWYiKSk7IC8vJE5PTi1OTFMtMSQKKworCQlyZWdpc3RyeS5wdXQoSVNoYXJlZEltYWdlcy5SRVNFVF9JQ09OLCBpbWFnZURlc2NyaXB0b3JGcm9tUGx1Z2luKAorCQkJCVBMVUdJTl9JRCwgSUNPTl9BQ1RJT05fUEFUSF9QUkVGSVggKyAicmVzZXQuZ2lmIikpOyAvLyROT04tTkxTLTEkCisJCQorCQlyZWdpc3RyeS5wdXQoSVNoYXJlZEltYWdlcy5SRVNUQVJUX0lDT04sIGltYWdlRGVzY3JpcHRvckZyb21QbHVnaW4oCisJCQkJUExVR0lOX0lELCBJQ09OX0FDVElPTl9QQVRIX1BSRUZJWCArICJyZXN0YXJ0LmdpZiIpKTsgLy8kTk9OLU5MUy0xJAorCisJCXJlZ2lzdHJ5LnB1dChJU2hhcmVkSW1hZ2VzLlNURVBfSUNPTiwgaW1hZ2VEZXNjcmlwdG9yRnJvbVBsdWdpbigKKwkJCQlQTFVHSU5fSUQsIElDT05fQUNUSU9OX1BBVEhfUFJFRklYICsgInN0ZXAuZ2lmIikpOyAvLyROT04tTkxTLTEkCisKKwkJcmVnaXN0cnkucHV0KElTaGFyZWRJbWFnZXMuU1RPUF9JQ09OLCBpbWFnZURlc2NyaXB0b3JGcm9tUGx1Z2luKAorCQkJCVBMVUdJTl9JRCwgSUNPTl9BQ1RJT05fUEFUSF9QUkVGSVggKyAic3RvcC5naWYiKSk7IC8vJE5PTi1OTFMtMSQKKworCQlyZWdpc3RyeS5wdXQoSVNoYXJlZEltYWdlcy5ESVNBQkxFRF9SVU5fSUNPTiwKKwkJCQlpbWFnZURlc2NyaXB0b3JGcm9tUGx1Z2luKFBMVUdJTl9JRCwgSUNPTl9BQ1RJT05fUEFUSF9QUkVGSVgKKwkJCQkJCSsgImRpc2FibGVkUnVuLmdpZiIpKTsgLy8kTk9OLU5MUy0xJAorCisJCXJlZ2lzdHJ5LnB1dChJU2hhcmVkSW1hZ2VzLkRJU0FCTEVEX1BBVVNFX0lDT04sCisJCQkJaW1hZ2VEZXNjcmlwdG9yRnJvbVBsdWdpbihQTFVHSU5fSUQsIElDT05fQUNUSU9OX1BBVEhfUFJFRklYCisJCQkJCQkrICJkaXNhYmxlZFBhdXNlLmdpZiIpKTsgLy8kTk9OLU5MUy0xJAorCisJCXJlZ2lzdHJ5LnB1dChJU2hhcmVkSW1hZ2VzLkRJU0FCTEVEX1JFU0VUX0lDT04sCisJCQkJaW1hZ2VEZXNjcmlwdG9yRnJvbVBsdWdpbihQTFVHSU5fSUQsIElDT05fQUNUSU9OX1BBVEhfUFJFRklYCisJCQkJCQkrICJkaXNhYmxlZFJlc2V0LmdpZiIpKTsgLy8kTk9OLU5MUy0xJAorCisJCXJlZ2lzdHJ5LnB1dChJU2hhcmVkSW1hZ2VzLkRJU0FCTEVEX1NURVBfSUNPTiwKKwkJCQlpbWFnZURlc2NyaXB0b3JGcm9tUGx1Z2luKFBMVUdJTl9JRCwgSUNPTl9BQ1RJT05fUEFUSF9QUkVGSVgKKwkJCQkJCSsgImRpc2FibGVkU3RlcC5naWYiKSk7IC8vJE5PTi1OTFMtMSQKKworCQlyZWdpc3RyeS5wdXQoSVNoYXJlZEltYWdlcy5ESVNBQkxFRF9TVE9QX0lDT04sCisJCQkJaW1hZ2VEZXNjcmlwdG9yRnJvbVBsdWdpbihQTFVHSU5fSUQsIElDT05fQUNUSU9OX1BBVEhfUFJFRklYCisJCQkJCQkrICJkaXNhYmxlZFN0b3AuZ2lmIikpOyAvLyROT04tTkxTLTEkCisKKwkJcmVnaXN0cnkucHV0KElTaGFyZWRJbWFnZXMuTUFQX0lDT04sIGltYWdlRGVzY3JpcHRvckZyb21QbHVnaW4oCisJCQkJUExVR0lOX0lELCBDVVNUT01fSUNPTl9QQVRIX1BSRUZJWDIgKyAibWFwLmdpZiIpKTsgLy8kTk9OLU5MUy0xJAorCisJCQorCQlyZWdpc3RyeS5wdXQoSVNoYXJlZEltYWdlcy5MT0dHRVJfSUNPTiwgaW1hZ2VEZXNjcmlwdG9yRnJvbVBsdWdpbigKKwkJCQlQTFVHSU5fSUQsIENVU1RPTV9JQ09OX1BBVEhfUFJFRklYMiArICJEZWNvcmF0b3IuZ2lmIikpOyAvLyROT04tTkxTLTEkCisJCQorCQlyZWdpc3RyeS5wdXQoSVNoYXJlZEltYWdlcy5MT0dHRVJfRk9MREVSX0lDT04sIGltYWdlRGVzY3JpcHRvckZyb21QbHVnaW4oCisJCQkJUExVR0lOX0lELCBDVVNUT01fSUNPTl9QQVRIX1BSRUZJWDIgKyAiRGVjb3JhdG9yTW9kZWxGaWxlLmdpZiIpKTsgLy8kTk9OLU5MUy0xJAorCisJCQorCQkKKwkJCisvLwkJcmVnaXN0cnkucHV0KElTaGFyZWRJbWFnZXMuUkVDT1JERURfU0lNVUxBVElPTl9JQ09OLCBpbWFnZURlc2NyaXB0b3JGcm9tUGx1Z2luKAorLy8JCQkJUExVR0lOX0lELCBDVVNUT01fSUNPTl9QQVRIX1BSRUZJWDIgKyAiUmVjb3JkZWRTaW11bGF0aW9ucy5naWYiKSk7IC8vJE5PTi1OTFMtMSQKKwl9IC8vIGluaXRpYWxpemVJbWFnZVJlZ2lzdHJ5CisKKwkvKioKKwkgKiBBZGQgU1dUIGNvbG9ycyB0byBjb2xvciByZWdpc3RyeQorCSAqLworCXByb3RlY3RlZCB2b2lkIGluaXRpYWxpemVDb2xvclJlZ2lzdHJ5KENvbG9yUmVnaXN0cnkgY29sb3JSZWdpc3RyeSkgeworCQkvLyBSZWdpc3RlciBjb2xvcnMgaW4gcmVnaXN0cnkKKwkJY29sb3JSZWdpc3RyeS5wdXQoSVNoYXJlZENvbG9ycy5HUkVFTiwgbmV3IFJHQig1NSwgMjU1LCA1MCkpOworCQljb2xvclJlZ2lzdHJ5LnB1dChJU2hhcmVkQ29sb3JzLllFTExPVywgbmV3IFJHQigyNTUsIDI1NSwgMCkpOworCQljb2xvclJlZ2lzdHJ5LnB1dChJU2hhcmVkQ29sb3JzLk9SQU5HRSwgbmV3IFJHQigyNTUsIDE3MCwgMzApKTsKKwkJY29sb3JSZWdpc3RyeS5wdXQoSVNoYXJlZENvbG9ycy5HUkFZLCBuZXcgUkdCKDIxNywgMjE3LCAyMTcpKTsKKwkJLy8gQWRkIG1vcmUgY29sb3JzIGhlcmUKKwl9IC8vIGluaXRpYWxpemVDb2xvclJlZ2lzdHJ5CisKKwkvKioKKwkgKiBBZGQgU1dUIGZvbnRzIHRvIGZvbnQgcmVnaXN0cnkKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBpbml0aWFsaXplRm9udFJlZ2lzdHJ5KEZvbnRSZWdpc3RyeSBmb250UmVnaXN0cnkpIHsKKwkJaW50IGZvbnRIZWlnaHQgPSBKRmFjZVJlc291cmNlcy5nZXREZWZhdWx0Rm9udCgpLmdldEZvbnREYXRhKClbMF0KKwkJCQkuZ2V0SGVpZ2h0KCk7CisKKwkJRm9udERhdGEgZm9udERhdGEgPSBuZXcgRm9udERhdGEoIkNvdXJpZXIgTmV3IiwgZm9udEhlaWdodCwgLy8kTk9OLU5MUy0xJAorCQkJCVNXVC5OT1JNQUwpOworCQkvLyBSZWdpc3RlciBjb2xvcnMgaW4gcmVnaXN0cnkKKwkJZm9udFJlZ2lzdHJ5LnB1dChJU2hhcmVkRm9udHMuREVGQVVMVCwgbmV3IEZvbnREYXRhW10geyBmb250RGF0YSB9KTsKKwkJLy8gQWRkIG1vcmUgY29sb3JzIGhlcmUKKwl9IC8vIGluaXRpYWxpemVDb2xvclJlZ2lzdHJ5CisKKwkvKioKKwkgKiBMb2cgYW4gZXJyb3IgdG8gdGhlIElMb2cgZm9yIHRoaXMgcGx1Z2luCisJICogCisJICogQHBhcmFtIG1lc3NhZ2UKKwkgKiAgICAgICAgICAgIHRoZSBsb2NhbGl6ZWQgZXJyb3IgbWVzc2FnZSB0ZXh0CisJICogQHBhcmFtIGV4Y2VwdGlvbgorCSAqICAgICAgICAgICAgdGhlIGFzc29jaWF0ZWQgZXhjZXB0aW9uLCBvciBudWxsCisJICovCisJcHVibGljIHN0YXRpYyB2b2lkIGxvZ0Vycm9yKFN0cmluZyBtZXNzYWdlLCBUaHJvd2FibGUgZXhjZXB0aW9uKSB7CisJCXBsdWdpbi5nZXRMb2coKS5sb2coCisJCQkJbmV3IFN0YXR1cyhJU3RhdHVzLkVSUk9SLCBwbHVnaW4uZ2V0QnVuZGxlKCkuZ2V0U3ltYm9saWNOYW1lKCksCisJCQkJCQkwLCBtZXNzYWdlLCBleGNlcHRpb24pKTsKKwl9IC8vIGxvZ0Vycm9yCisKKwkvKioKKwkgKiBMb2cgaW5mb3JtYXRpb24gdG8gdGhlIElMb2cgZm9yIHRoaXMgcGx1Z2luCisJICogCisJICogQHBhcmFtIG1lc3NhZ2UKKwkgKiAgICAgICAgICAgIHRoZSBsb2NhbGl6ZWQgaW5mb3JtYXRpb24gbWVzc2FnZSB0ZXh0CisJICogQHBhcmFtIGV4Y2VwdGlvbgorCSAqICAgICAgICAgICAgdGhlIGFzc29jaWF0ZWQgZXhjZXB0aW9uLCBvciBudWxsCisJICovCisJcHVibGljIHN0YXRpYyB2b2lkIGxvZ0luZm9ybWF0aW9uKFN0cmluZyBtZXNzYWdlLCBUaHJvd2FibGUgZXhjZXB0aW9uKSB7CisJCXBsdWdpbi5nZXRMb2coKS5sb2coCisJCQkJbmV3IFN0YXR1cyhJU3RhdHVzLklORk8sIHBsdWdpbi5nZXRCdW5kbGUoKS5nZXRTeW1ib2xpY05hbWUoKSwKKwkJCQkJCTAsIG1lc3NhZ2UsIGV4Y2VwdGlvbikpOworCX0gLy8gbG9nSW5mb3JtYXRpb24KKwkKKwkvKioKKwkgKiBMb2cgaW5mb3JtYXRpb24gdG8gdGhlIElMb2cgZm9yIHRoaXMgcGx1Z2luCisJICogVGhlIG1ldGhvZCBpcyBvdmVybG9hZGVkIHRvIGFsbG93IGZvciBsb2dJbmZvcm1hdGlvbiB3aXRob3V0IGFuIGVycm9yIAorCSAqIG1ldGhvZCBzZXRzIHRoZSBlcnJvciB0byBudWxsLiBUaGlzIHNob3VsZCBiZSB1c2VkIGluc3RlYWQgb2YgU3lzdGVtLm91dC5wcmludGxuCisJICogdGhyb3VnaG91dCB0aGUgY29kZS4KKwkgKiBAcGFyYW0gbWVzc2FnZQorCSAqICAgICAgICAgICAgdGhlIGxvY2FsaXplZCBpbmZvcm1hdGlvbiBtZXNzYWdlIHRleHQKKwkgKgorCSAqLworCXB1YmxpYyBzdGF0aWMgdm9pZCBsb2dJbmZvcm1hdGlvbihTdHJpbmcgbWVzc2FnZSkgeworCQlpZihwbHVnaW4gIT0gbnVsbCkgCisJCQlwbHVnaW4uZ2V0TG9nKCkubG9nKAorCQkJCW5ldyBTdGF0dXMoSVN0YXR1cy5JTkZPLCBwbHVnaW4uZ2V0QnVuZGxlKCkuZ2V0U3ltYm9saWNOYW1lKCksCisJCQkJCQkwLCBtZXNzYWdlLCBudWxsKSk7CisJCQllbHNlIAorCQkJCS8vIE5vCisJCQkJU3lzdGVtLm91dC5wcmludGxuKG1lc3NhZ2UpOworCX0gLy8gbG9nSW5mb3JtYXRpb24KKworCS8qKgorCSAqIEBwYXJhbSBwZXJzcGVjdGl2ZUlkCisJICogICAgICAgICAgICB0aGUgaWQgb2YgdGhlIHBlcnNwZWN0aXZlIHRvIHN3aXRjaCB0bworCSAqLworCXB1YmxpYyBzdGF0aWMgdm9pZCBzd2l0Y2hUb1BlcnNwZWN0aXZlKFN0cmluZyBwZXJzcGVjdGl2ZUlkKSB7CisJCWZpbmFsIElXb3JrYmVuY2ggd29ya2JlbmNoID0gUGxhdGZvcm1VSS5nZXRXb3JrYmVuY2goKTsKKwkJdHJ5IHsKKwkJCXdvcmtiZW5jaC5zaG93UGVyc3BlY3RpdmUoCisJCQkJCXBlcnNwZWN0aXZlSWQsIHdvcmtiZW5jaAorCQkJCQkJCS5nZXRBY3RpdmVXb3JrYmVuY2hXaW5kb3coKSk7CisJCX0gY2F0Y2ggKFdvcmtiZW5jaEV4Y2VwdGlvbiBlKSB7CisJCQlBY3RpdmF0b3IubG9nRXJyb3IoIlByb2JsZW0gc3dpdGNoaW5nIHRvIFBlcnNwZWN0aXZlIHdpdGggSUQ9XCIiCisJCQkJCSsgcGVyc3BlY3RpdmVJZCArICJcIiIsIGUpOworCQl9CisJfSAvLyBzd2l0Y2hUb1BlcnNwZWN0aXZlCit9IC8vIEFjdGl2YXRvcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL0lTaGFyZWRDb2xvcnMuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9JU2hhcmVkQ29sb3JzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjM2MDhiOQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9JU2hhcmVkQ29sb3JzLmphdmEKQEAgLTAsMCArMSw0MiBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnVpOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqCisgKiBUaGlzIGludGVyZmFjZSBjb250YWlucyBpZGVudGlmaWVycyB1c2VkIHRvIG1hcmsgU1dUIGNvbG9ycyBhZGRlZCB0byB0aGlzCisgKiBwbHVnLWluJ3MgY29sb3IgcmVnaXN0cnkuIFRoZXNlIGNvbG9ycyBhcmUgaW50ZW5kZWQgdG8gYmUgc2hhcmVkIGJ5CisgKiByZWZlcmVuY2luZyB0aGUgY29sb3IgcmVnaXN0cnkgYW5kIHVzaW5nIHRoZSBpZGVudGlmaWVycyBkZWZpbmVkIGhlcmUgdG8KKyAqIHNlbGVjdCB0aGUgYXBwcm9wcmlhdGUgY29sb3IuCisgKi8KK3B1YmxpYyBpbnRlcmZhY2UgSVNoYXJlZENvbG9ycyB7CisKKwkvKioKKwkgKiBDb2xvciBncmVlbiAtLSB1c2VkIGFzIGJhY2tncm91bmQgd2hlbiBzaW11bGF0aW9uIGlzIHJ1bm5pbmcKKwkgKi8KKwlTdHJpbmcgR1JFRU4gPSAiZ3JlZW4iOyAvLyROT04tTkxTLTEkCisKKwkvKioKKwkgKiBDb2xvciBvcmFuZ2UgLS0gdXNlZCBhcyBiYWNrZ3JvdW5kIHdoZW4gc2ltdWxhdGlvbiBpcyByZXNldAorCSAqLworCVN0cmluZyBPUkFOR0UgPSAib3JhbmdlIjsgLy8kTk9OLU5MUy0xJAorCisJLyoqCisJICogQ29sb3IgeWVsbG93IC0tIHVzZWQgYXMgYmFja2dyb3VuZCB3aGVuIHNpbXVsYXRpb24gaXMgcGF1c2VkCisJICovCisJU3RyaW5nIFlFTExPVyA9ICJ5ZWxsb3ciOyAvLyROT04tTkxTLTEkCisKKwkvKioKKwkgKiBDb2xvciB5ZWxsb3cgLS0gdXNlZCBhcyBiYWNrZ3JvdW5kIGZvciB0ZXh0CisJICovCisJU3RyaW5nIEdSQVkgPSAiZ3JheSI7IC8vJE5PTi1OTFMtMSQKKworfQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL0lTaGFyZWRGb250cy5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL0lTaGFyZWRGb250cy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjViMjRhMDUKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvSVNoYXJlZEZvbnRzLmphdmEKQEAgLTAsMCArMSwyOCBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnVpOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqCisgKiBUaGlzIGludGVyZmFjZSBjb250YWlucyBpZGVudGlmaWVycyB1c2VkIHRvIG1hcmsgU1dUIGZvbnRzIGFkZGVkIHRvIHRoaXMKKyAqIHBsdWctaW4ncyBmb250IHJlZ2lzdHJ5LiBUaGVzZSBmb250cyBhcmUgaW50ZW5kZWQgdG8gYmUgc2hhcmVkIGJ5IHJlZmVyZW5jaW5nCisgKiB0aGUgZm9udHMgcmVnaXN0cnkgYW5kIHVzaW5nIHRoZSBpZGVudGlmaWVycyBkZWZpbmVkIGhlcmUgdG8gc2VsZWN0IHRoZQorICogYXBwcm9wcmlhdGUgaW1hZ2UuCisgKi8KKworcHVibGljIGludGVyZmFjZSBJU2hhcmVkRm9udHMgeworCisJLyoqCisJICogRGVmYXVsdCBmb250IHVzZWQgaW4gc2ltdWxhdGlvbiBjb250cm9sCisJICovCisJU3RyaW5nIERFRkFVTFQgPSAiZGVmYXVsdCI7IC8vJE5PTi1OTFMtMSQKKworfQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL0lTaGFyZWRJbWFnZXMuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9JU2hhcmVkSW1hZ2VzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTRjYTZlOQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9JU2hhcmVkSW1hZ2VzLmphdmEKQEAgLTAsMCArMSwzMDYgQEAKKy8vIElTaGFyZWRJbWFnZXMuamF2YQorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnVpOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA2LCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqCisgKiBUaGlzIGludGVyZmFjZSBjb250YWlucyBpZGVudGlmaWVycyB1c2VkIHRvIG1hcmsgaW1hZ2VzIGFkZGVkIHRvIHRoaXMKKyAqIHBsdWctaW4ncyBpbWFnZSByZWdpc3RyeS4gVGhpcyBpbWFnZXMgYXJlIGludGVuZGVkIHRvIGJlIHNoYXJlZCBieQorICogcmVmZXJlbmNpbmcgdGhlIHJlZ2lzdHJ5IGFuZCB1c2luZyB0aGUgaWRlbnRpZmllcnMgZGVmaW5lZCBoZXJlIHRvIHNlbGVjdCB0aGUKKyAqIGFwcHJvcHJpYXRlIGltYWdlLgorICovCitwdWJsaWMgaW50ZXJmYWNlIElTaGFyZWRJbWFnZXMgeworCisJLyoqCisJICogVGhpcyBpbWFnZSBpcyB0aGUgaWNvbiB0aGF0IHJlcHJlc2VudHMgYW4KKwkgKiB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmV4cGVyaW1lbnQuRXhwZXJpbWVudH0uCisJICovCisJU3RyaW5nIEFVVE9NQVRJQ19FWFBFUklNRU5UX0lDT04gPSAiYXV0b21hdGljZXhwZXJpbWVudC5pbWFnZSI7IC8vJE5PTi1OTFMtMSQKKworCS8qKgorCSAqIFRoaXMgaW1hZ2UgaXMgdGhlIGljb24gdGhhdCByZXByZXNlbnRzIGFuCisJICoge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5EZWNvcmF0b3J9LgorCSAqLworCVN0cmluZyBERUNPUkFUT1JfSUNPTiA9ICJkZWNvcmF0b3IuaW1hZ2UiOyAvLyROT04tTkxTLTEkCisKKwkvKioKKwkgKiBUaGlzIGltYWdlIGlzIHRoZSBpY29uIHRoYXQgcmVwcmVzZW50cyBhbgorCSAqIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuRGVjb3JhdG9yfS4KKwkgKi8KKwlTdHJpbmcgREVDT1JBVE9SX0ZPTERFUl9JQ09OID0gImRlY29yYXRvcl9tb2RlbF9maWxlLmltYWdlIjsgLy8kTk9OLU5MUy0xJAorCisJLyoqCisJICogVGhpcyBpbWFnZSBpcyB0aGUgaWNvbiB0aGF0IHJlcHJlc2VudHMgYQorCSAqIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguRHluYW1pY0xhYmVsfSBpbiBhCisJICoge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5HcmFwaH0uCisJICovCisJU3RyaW5nIERZTkFNSUNfTEFCRUxfSUNPTiA9ICJkeW5hbWljX2xhYmVsLmltYWdlIjsgLy8kTk9OLU5MUy0xJAorCisKKwkvKioKKwkgKiBUaGlzIGltYWdlIGlzIHRoZSBpY29uIHRoYXQgcmVwcmVzZW50cyBhbgorCSAqIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguRWRnZX0gaW4gYQorCSAqIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguR3JhcGh9LgorCSAqLworCVN0cmluZyBFREdFX0lDT04gPSAiZWRnZS5pbWFnZSI7IC8vJE5PTi1OTFMtMSQKKwkKKwkvKioKKwkgKiBUaGlzIGltYWdlIGlzIHRoZSBpY29uIHRoYXQgcmVwcmVzZW50cyBhbgorCSAqIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZXhwZXJpbWVudC5FeHBlcmltZW50fS4KKwkgKi8KKwlTdHJpbmcgRVhQRVJJTUVOVF9JQ09OID0gImV4cGVyaW1lbnQuaW1hZ2UiOyAvLyROT04tTkxTLTEkCisKKwkvKioKKwkgKiBUaGlzIGltYWdlIGlzIHRoZSBpY29uIHRoYXQgcmVwcmVzZW50cyBhbgorCSAqIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZXhwZXJpbWVudC5FeHBlcmltZW50fS4KKwkgKi8KKwlTdHJpbmcgRVhQRVJJTUVOVF9GT0xERVJfSUNPTiA9ICJleHBlcmltZW50X21vZGVsX2ZpbGUuaW1hZ2UiOyAvLyROT04tTkxTLTEkCisKKwkvKioKKwkgKiBUaGlzIGltYWdlIGlzIHRoZSBpY29uIHRoYXQgcmVwcmVzZW50cyBhCisJICoge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5HcmFwaH0uCisJICovCisJU3RyaW5nIEdSQVBIX0lDT04gPSAiZ3JhcGguaW1hZ2UiOyAvLyROT04tTkxTLTEkCisKKwkvKioKKwkgKiBUaGlzIGltYWdlIGlzIHRoZSBpY29uIHRoYXQgcmVwcmVzZW50cyBhIGZpbGUgdGhhdCBjb250YWlucyBhCisJICoge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5HcmFwaH0uCisJICovCisJU3RyaW5nIEdSQVBIX0ZPTERFUl9JQ09OID0gImdyYXBoX21vZGVsX2ZpbGUuaW1hZ2UiOyAvLyROT04tTkxTLTEkCisKKwkvKioKKwkgKiBUaGlzIGltYWdlIGlzIHRoZSBpY29uIHRoYXQgcmVwcmVzZW50cyBhCisJICoge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5Nb2RlbH0uCisJICovCisJU3RyaW5nIE1PREVMX0lDT04gPSAibW9kZWwuaW1hZ2UiOyAvLyROT04tTkxTLTEkCisKKwkvKioKKwkgKiBUaGlzIGltYWdlIGlzIHRoZSBpY29uIHRoYXQgcmVwcmVzZW50cyBhIGZpbGUgdGhhdCBjb250YWlucyBhCisJICoge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5Nb2RlbH0uCisJICovCisJU3RyaW5nIE1PREVMX0ZPTERFUl9JQ09OID0gIm1vZGVsX21vZGVsX2ZpbGUuaW1hZ2UiOyAvLyROT04tTkxTLTEkCisKKwkvKioKKwkgKiBUaGlzIGltYWdlIGlzIHRoZSBpY29uIHRoYXQgcmVwcmVzZW50cyBhCisJICoge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5Nb2RpZmllcn0uCisJICovCisJU3RyaW5nIE1PRElGSUVSX0lDT04gPSAibW9kaWZpZXIuaW1hZ2UiOyAvLyROT04tTkxTLTEkCisJCisJLyoqCisJICogVGhpcyBpbWFnZSBpcyB0aGUgaWNvbiB0aGF0IHJlcHJlc2VudHMgYQorCSAqIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuTW9kaWZpZXJ9LgorCSAqLworCVN0cmluZyBNT0RJRklFUl9GT0xERVJfSUNPTiA9ICJtb2RpZmllcl9tb2RlbF9maWxlLmltYWdlIjsgLy8kTk9OLU5MUy0xJAorCisJLyoqCisJICogVGhpcyBpbWFnZSBpcyB0aGUgaWNvbiB0aGF0IHJlcHJlc2VudHMgYQorCSAqIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguTm9kZX0gaW4gYQorCSAqIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguR3JhcGh9LgorCSAqLworCVN0cmluZyBOT0RFX0lDT04gPSAibm9kZS5pbWFnZSI7IC8vJE5PTi1OTFMtMSQKKworCS8qKgorCSAqIFRoaXMgaW1hZ2UgaXMgdGhlIGljb24gdGhhdCByZXByZXNlbnRzIGFuCisJICoge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUuUHJlZGljYXRlfS4KKwkgKi8KKwlTdHJpbmcgUFJFRElDQVRFX0lDT04gPSAicHJlZGljYXRlLmltYWdlIjsgLy8kTk9OLU5MUy0xJAorCQorCS8qKgorCSAqIFRoaXMgaW1hZ2UgaXMgdGhlIGljb24gdGhhdCByZXByZXNlbnRzIGFuCisJICoge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUuUHJlZGljYXRlfS4KKwkgKi8KKwlTdHJpbmcgUFJFRElDQVRFX0ZPTERFUl9JQ09OID0gInByZWRpY2F0ZV9tb2RlbF9maWxlLmltYWdlIjsgLy8kTk9OLU5MUy0xJAorCisJLyoqCisJICogVGhpcyBpbWFnZSBpcyB0aGUgaWNvbiBhc3NvY2lhdGVkIHdpdGggcmVjb3JkZWQKKwkgKiB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5qb2JzLnNpbXVsYXRpb24uU2ltdWxhdGlvbn1zLgorCSAqLworCVN0cmluZyBSRUNPUkRFRF9TSU1VTEFUSU9OX0lDT04gPSAicmVjb3JkZWRfc2ltdWxhdGlvbi5pbWFnZSI7IC8vJE5PTi1OTFMtMSQKKworCS8qKgorCSAqIFRoaXMgaW1hZ2UgaXMgdGhlIGljb24gYXNzb2NpYXRlZCB3aXRoIHJlY29yZGVkCisJICoge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uam9icy5zaW11bGF0aW9uLlNpbXVsYXRpb259cy4KKwkgKi8KKwlTdHJpbmcgUkVDT1JERURfU0lNVUxBVElPTl9GT0xERVJfSUNPTiA9ICJyZWNvcmRlZF9zaW11bGF0aW9uX21vZGVsX2ZpbGUuaW1hZ2UiOyAvLyROT04tTkxTLTEkCisKKwkvKioKKwkgKiBUaGlzIGltYWdlIGlzIHRoZSBpY29uIHRoYXQgcmVwcmVzZW50cyBhCisJICoge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zY2VuYXJpby5TY2VuYXJpb30uCisJICovCisJU3RyaW5nIFNDRU5BUklPX0lDT04gPSAic2NlbmFyaW8uaW1hZ2UiOyAvLyROT04tTkxTLTEkCisKKwkvKioKKwkgKiBUaGlzIGltYWdlIGlzIHRoZSBpY29uIHRoYXQgcmVwcmVzZW50cyBhIGZpbGUgdGhhdCBjb250YWlucyBhCisJICoge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zY2VuYXJpby5TY2VuYXJpb30uCisJICovCisJU3RyaW5nIFNDRU5BUklPX0ZPTERFUl9JQ09OID0gInNjZW5hcmlvX21vZGVsX2ZpbGUuaW1hZ2UiOyAvLyROT04tTkxTLTEkCisKKwkvKioKKwkgKiBUaGlzIGltYWdlIGlzIHRoZSBpY29uIHRoYXQgcmVwcmVzZW50cyBhIHtAbGluayBTZXF1ZW5jZXJ9LgorCSAqLworCVN0cmluZyBTRVFVRU5DRVJfSUNPTiA9ICJzZXF1ZW5jZXIuaW1hZ2UiOyAvLyROT04tTkxTLTEkCisKKwkvKioKKwkgKiBUaGlzIGltYWdlIGlzIHRoZSBpY29uIHRoYXQgcmVwcmVzZW50cyBhIHtAbGluayBTZXF1ZW5jZXJ9LgorCSAqLworCVN0cmluZyBTRVFVRU5DRVJfRk9MREVSX0lDT04gPSAic2VxdWVuY2VyX21vZGVsX2ZpbGUuaW1hZ2UiOyAvLyROT04tTkxTLTEkCisJCisJLyoqCisJICogVGhpcyBpbWFnZSBpcyB0aGUgaWNvbiB0aGF0IHJlcHJlc2VudHMgYSBzdGF0aWMKKwkgKiB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkxhYmVsfSBpbiBhCisJICoge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5HcmFwaH0uCisJICovCisJU3RyaW5nIFNUQVRJQ19MQUJFTF9JQ09OID0gInN0YXRpY19sYWJlbC5pbWFnZSI7IC8vJE5PTi1OTFMtMSQKKworCS8qKgorCSAqIFRoaXMgaW1hZ2UgaXMgdGhlIGljb24gdGhhdCByZXByZXNlbnRzIGFuCisJICoge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS50cmlnZ2VyLlRyaWdnZXJ9LgorCSAqLworCVN0cmluZyBUUklHR0VSX0lDT04gPSAidHJpZ2dlci5pbWFnZSI7IC8vJE5PTi1OTFMtMSQKKwkKKworCS8qKgorCSAqIFRoaXMgaW1hZ2UgaXMgdGhlIGljb24gdGhhdCByZXByZXNlbnRzIGFuCisJICoge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS50cmlnZ2VyLlRyaWdnZXJ9LgorCSAqLworCVN0cmluZyBUUklHR0VSX0ZPTERFUl9JQ09OID0gInRyaWdnZXJfbW9kZWxfZmlsZS5pbWFnZSI7IC8vJE5PTi1OTFMtMSQKKworCS8qKgorCSAqIFRoaXMgaW1hZ2UgaXMgdGhlIGljb24gdXNlZCB0byByZXByZXNlbnQgYSBTVEVNIHByb2plY3QuCisJICovCisJU3RyaW5nIFNURU1fUFJPSkVDVF9JQ09OID0gInN0ZW1fcHJvamVjdC5pbWFnZSI7IC8vJE5PTi1OTFMtMSQKKworCS8qKgorCSAqIFRoaXMgaW1hZ2UgaXMgdGhlIGljb24gdG8gcmVwcmVzZW50IGEgUlVOIHNpbXVsYXRpb24gZXZlbnQKKwkgKi8KKwlTdHJpbmcgUlVOX0lDT04gPSAicnVuLmltYWdlIjsgLy8kTk9OLU5MUy0xJAorCisJLyoqCisJICogVGhpcyBpbWFnZSBpcyB0aGUgaWNvbiB0byByZXByZXNlbnQgYSBQQVVTRSBzaW11bGF0aW9uIGV2ZW50CisJICovCisJU3RyaW5nIFBBVVNFX0lDT04gPSAicGF1c2UuaW1hZ2UiOyAvLyROT04tTkxTLTEkCisKKwkvKioKKwkgKiBUaGlzIGltYWdlIGlzIHRoZSBpY29uIHRvIHJlcHJlc2VudCBhIFNURVAgc2ltdWxhdGlvbiBldmVudAorCSAqLworCVN0cmluZyBTVEVQX0lDT04gPSAic3RlcC5pbWFnZSI7IC8vJE5PTi1OTFMtMSQKKworCS8qKgorCSAqIFRoaXMgaW1hZ2UgaXMgdGhlIGljb24gdG8gcmVwcmVzZW50IGEgUkVTRVQgc2ltdWxhdGlvbiBldmVudAorCSAqLworCVN0cmluZyBSRVNFVF9JQ09OID0gInJlc2V0LmltYWdlIjsgLy8kTk9OLU5MUy0xJAorCisJLyoqCisJICogVGhpcyBpbWFnZSBpcyB0aGUgaWNvbiB0byByZXByZXNlbnQgYSBTVE9QIHNpbXVsYXRpb24gZXZlbnQKKwkgKi8KKwlTdHJpbmcgUkVTVEFSVF9JQ09OID0gInJlc3RhcnQuaW1hZ2UiOyAvLyROT04tTkxTLTEkCisJCisKKwkvKioKKwkgKiBUaGlzIGltYWdlIGlzIHRoZSBpY29uIHRvIHJlcHJlc2VudCBhIFNUT1Agc2ltdWxhdGlvbiBldmVudAorCSAqLworCVN0cmluZyBTVE9QX0lDT04gPSAic3RvcC5pbWFnZSI7IC8vJE5PTi1OTFMtMSQKKworCS8qKgorCSAqIFRoaXMgaW1hZ2UgaXMgdGhlIGljb24gdG8gcmVwcmVzZW50IGEgZGlzYWJsZWQgUlVOIHNpbXVsYXRpb24gZXZlbnQKKwkgKi8KKwlTdHJpbmcgRElTQUJMRURfUlVOX0lDT04gPSAiZGlzYWJsZWRfcnVuLmltYWdlIjsgLy8kTk9OLU5MUy0xJAorCisJLyoqCisJICogVGhpcyBpbWFnZSBpcyB0aGUgaWNvbiB0byByZXByZXNlbnQgYSBkaXNhYmxlZCBQQVVTRSBzaW11bGF0aW9uIGV2ZW50CisJICovCisJU3RyaW5nIERJU0FCTEVEX1BBVVNFX0lDT04gPSAiZGlzYWJsZWRfcGF1c2UuaW1hZ2UiOyAvLyROT04tTkxTLTEkCisKKwkvKioKKwkgKiBUaGlzIGltYWdlIGlzIHRoZSBpY29uIHRvIHJlcHJlc2VudCBhIGRpc2FibGVkIFNURVAgc2ltdWxhdGlvbiBldmVudAorCSAqLworCVN0cmluZyBESVNBQkxFRF9TVEVQX0lDT04gPSAiZGlzYWJsZWRfc3RlcC5pbWFnZSI7IC8vJE5PTi1OTFMtMSQKKworCS8qKgorCSAqIFRoaXMgaW1hZ2UgaXMgdGhlIGljb24gdG8gcmVwcmVzZW50IGEgZGlzYWJsZWQgUkVTRVQgc2ltdWxhdGlvbiBldmVudAorCSAqLworCVN0cmluZyBESVNBQkxFRF9SRVNFVF9JQ09OID0gImRpc2FibGVkX3Jlc2V0LmltYWdlIjsgLy8kTk9OLU5MUy0xJAorCisJLyoqCisJICogVGhpcyBpbWFnZSBpcyB0aGUgaWNvbiB0byByZXByZXNlbnQgYSBkaXNhYmxlZCBTVE9QIHNpbXVsYXRpb24gZXZlbnQKKwkgKi8KKwlTdHJpbmcgRElTQUJMRURfU1RPUF9JQ09OID0gImRpc2FibGVkX3N0b3AuaW1hZ2UiOyAvLyROT04tTkxTLTEkCisKKwkvKioKKwkgKiBUaGlzIGltYWdlIGlzIHRoZSBpY29uIHRvIHJlcHJlc2VudCB0aGUgU1RFTSBQcm9qZWN0IEV4cGxvcmVyIFZpZXcKKwkgKi8KKwlTdHJpbmcgU1RFTV9FWFBMT1JFUl9WSUVXX0lDT04gPSAic3RlbV9leHBsb3Jlci5pbWFnZSI7IC8vJE5PTi1OTFMtMSQKKworCS8qKgorCSAqIFRoaXMgaW1hZ2UgaXMgdGhlIGljb24gdG8gcmVwcmVzZW50IGEgU1RFTSBwcm9qZWN0IGluIHRoZSBTVEVNIFByb2plY3QKKwkgKiBFeHBsb3JlcgorCSAqLworCVN0cmluZyBTVEVNX0VYUExPUkVSX1BST0pFQ1RfSUNPTiA9ICJzdGVtX3Byb2plY3QuaW1hZ2UiOyAvLyROT04tTkxTLTEkCisKKwkvKioKKwkgKiBUaGlzIGltYWdlIGlzIHRoZSBpY29uIHRvIHJlcHJlc2VudCBhIGRlbGV0ZSBmaWxlL2ZvbGRlciBvcGVyYXRpb24gaW4KKwkgKiBTVEVNIFByb2plY3QgRXhwbG9yZXIKKwkgKi8KKwlTdHJpbmcgREVMRVRFX0ZJTEVfSUNPTiA9ICJkZWxldGUuaW1hZ2UiOyAvLyROT04tTkxTLTEkCisKKwkvKioKKwkgKiBUaGlzIGltYWdlIGlzIHRoZSBpY29uIHRoYXQgaWRlbnRpZmllcyB0aGUgc2ltdWxhdGlvbiBjb250cm9sIHZpZXcKKwkgKi8KKwlTdHJpbmcgU0lNVUxBVElPTl9DT05UUk9MX1ZJRVdfSUNPTiA9ICJzaW11bGF0aW9uX2NvbnRyb2xfdmlldy5pbWFnZSI7IC8vJE5PTi1OTFMtMSQKKworCS8qKgorCSAqIFRoaXMgaW1hZ2UgaXMgdGhlIGljb24gYXNzb2NpYXRlZCB3aXRoIGEgc2ltdWxhdGlvbiBjb250cm9sCisJICovCisJU3RyaW5nIFNJTVVMQVRJT05fQ09OVFJPTF9JQ09OID0gInNpbXVsYXRpb25fY29udHJvbC5pbWFnZSI7IC8vJE5PTi1OTFMtMSQKKworCS8qKgorCSAqIFRoaXMgaW1hZ2UgaXMgdGhlIGljb24gYXNzb2NpYXRlZCB3aXRoCisJICoge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zY2VuYXJpby5TY2VuYXJpb30gZmlsZXMuCisJICovCisJU3RyaW5nIFNURU1fU0NFTkFSSU9fRklMRV9JQ09OID0gInNjZW5hcmlvX2ZpbGUuaW1hZ2UiOyAvLyROT04tTkxTLTEkCisKKwkvKioKKwkgKiBUaGlzIGltYWdlIGlzIHRoZSBpY29uIGFzc29jaWF0ZWQgd2l0aAorCSAqIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguR3JhcGh9IGZpbGVzLgorCSAqLworCVN0cmluZyBTVEVNX0dSQVBIX0ZJTEVfSUNPTiA9ICJnZW5lcmljX2ZpbGUuaW1hZ2UiOyAvLyROT04tTkxTLTEkCisKKwkvKioKKwkgKiBUaGlzIGltYWdlIGlzIHRoZSBpY29uIGFzc29jaWF0ZWQgd2l0aAorCSAqIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuTW9kZWx9IGZpbGVzLgorCSAqLworCVN0cmluZyBTVEVNX0ZPTERFUl9JQ09OID0gInNjZW5hcmlvX0ZpbGUuaW1hZ2UiOyAvLyROT04tTkxTLTEkCisKKwkvKioKKwkgKiBUaGlzIGltYWdlIGlzIHRoZSBpY29uIGFzc29jaWF0ZWQgd2l0aAorCSAqIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuTW9kZWx9IGZpbGVzLgorCSAqLworCVN0cmluZyBNQVBfSUNPTiA9ICJtYXAuaW1hZ2UiOyAvLyROT04tTkxTLTEkCisJCisJLyoqCisJICogVGhpcyBpbWFnZSBpcyB0aGUgaWNvbiB0aGF0IHJlcHJlc2VudHMgYSB7QGxpbmsgU2VxdWVuY2VyfS4KKwkgKi8KKwlTdHJpbmcgTE9HR0VSX0lDT04gPSAibG9nZ2VyLmltYWdlIjsgLy8kTk9OLU5MUy0xJAorCisJLyoqCisJICogVGhpcyBpbWFnZSBpcyB0aGUgaWNvbiB0aGF0IHJlcHJlc2VudHMgYSB7QGxpbmsgU2VxdWVuY2VyfS4KKwkgKi8KKwlTdHJpbmcgTE9HR0VSX0ZPTERFUl9JQ09OID0gImxvZ2dlcl9tb2RlbF9maWxlLmltYWdlIjsgLy8kTk9OLU5MUy0xJAorCQorCisJLy8gLyoqCisJLy8gKiBUaGlzIGltYWdlIGlzIHRoZSBpY29uIGFzc29jaWF0ZWQgd2l0aCBmaWxlcyB0aGF0IHN0b3JlIHJlY29yZGVkIHtAbGluaworCS8vICogb3JnLmVjbGlwc2Uuc3RlbS5qb2JzLnNpbXVsYXRpb24uU2ltdWxhdGlvbn1zLgorCS8vICovCisJLy8JU3RyaW5nIFJFQ09SREVEX1NJTVVMQVRJT05fRklMRV9JQ09OID0gInJlY29yZGVkX3NpbXVsYXRpb25fRmlsZS5pbWFnZSI7IC8vJE5PTi1OTFMtMSQKKworfSAvLyBJU2hhcmVkSW1hZ2VzCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvTkxTLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvTkxTLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzg1NDk2ZAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9OTFMuamF2YQpAQCAtMCwwICsxLDIzNSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAxMSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0udWk7CisKK2ltcG9ydCBqYXZhLm5ldC5VUkw7CitpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbnM7CitpbXBvcnQgamF2YS51dGlsLkVudW1lcmF0aW9uOworaW1wb3J0IGphdmEudXRpbC5MaXN0OworaW1wb3J0IGphdmEudXRpbC5SZXNvdXJjZUJ1bmRsZTsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QbGF0Zm9ybTsKKworLyoqCisgKiBTdXBwb3J0IGNsYXNzIHRoYXQgaW1wbGVtZW50cyBpbnRlcm5hbCBoYW5kbGVycyBmb3IgZHluYW1pYyBzd2l0Y2hpbmcKKyAqIG9mIHRoZSBjdXJyZW50IE5MIGluIHVzZSBieSBTVEVNLiAgCisgKgorICovCitwdWJsaWMgY2xhc3MgTkxTCit7CisJLyoqCisJICogcmVwcmVzZW50cyB0aGUgbG9jYWxlIGNvZGVkIGluIHBsdWdpbi5wcm9wZXJ0aWVzCisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgREVGQVVMVF9MT0NBTEUgPSAiZW4iOyAvLyAkTk9OLU5MUyQKKworCS8qKgorCSAqIFN5c3RlbSBwcm9wZXJ0eSB0byBwZXJzaXN0IHRoZSBvcmlnaW5hbCAoZmlyc3Qtc3RhcnQpIE5MCisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgU1lTVEVNX0xPQ0FMRV9QUk9QRVJUWSA9ICJzdGVtLnN5c3RlbS5ubCI7IC8vICROT04tTkxTJAorCQorCS8qKgorCSAqIEN1cnJlbnQgbG9jYWxlIAorCSAqLworCXByaXZhdGUgc3RhdGljIFN0cmluZyBDVVJSRU5UX0xPQ0FMRSA9IG51bGw7CisJCisJLyoqCisJICogU3lzdGVtIGxvY2FsZQorCSAqLworCXByaXZhdGUgc3RhdGljIFN0cmluZyBTWVNURU1fTE9DQUxFID0gbnVsbDsKKwkKKwkvKioKKwkgKiBMb2NhbGVzIGF2YWlsYWJsZSB0byB0aGUgc3lzdGVtCisJICovCisJcHJpdmF0ZSBzdGF0aWMgQ29sbGVjdGlvbjxTdHJpbmc+IEFWQUlMQUJMRV9MT0NBTEVTID0gbnVsbDsKKwkKKwlwcml2YXRlIE5MUygpCisJeworCQkKKwl9CisJCisJLyoqCisJICogQHJldHVybiBUaGUgZGVmYXVsdCBsb2NhbGUKKwkgKi8KKwlwdWJsaWMgc3RhdGljIFN0cmluZyBnZXREZWZhdWx0TG9jYWxlKCkKKwl7CisJCXJldHVybiBERUZBVUxUX0xPQ0FMRTsKKwl9CisJCisJLyoqCisJICogUmV0dXJucyBhbGwgc3VwZXItbG9jYWxlcyBmb3IgdGhlIGdpdmVuIGxvY2FsZQorCSAqIEBwYXJhbSBsb2NhbGUgTG9jYWxlIHRvIGJyZWFrIGRvd24KKwkgKiBAcmV0dXJuIFRoZSBzdXBlci1sb2NhbGUgZnJhZ21lbnRzCisJICovCisJcHJpdmF0ZSBzdGF0aWMgTGlzdDxTdHJpbmc+IGdldExvY2FsZUZyYWdtZW50cyhTdHJpbmcgbG9jYWxlKQorCXsKKwkJU3RyaW5nW10gbG9jYWxlRnJhZ21lbnRzID0gbG9jYWxlLnNwbGl0KCJfIik7CisJCUxpc3Q8U3RyaW5nPiBwb3NzaWJsZUxvY2FsZXMgPSBuZXcgQXJyYXlMaXN0PFN0cmluZz4oKTsKKwkJU3RyaW5nQnVpbGRlciBmcmFnbWVudCA9IG5ldyBTdHJpbmdCdWlsZGVyKCk7CisJCWZyYWdtZW50LmFwcGVuZChsb2NhbGVGcmFnbWVudHNbMF0pOworCQlwb3NzaWJsZUxvY2FsZXMuYWRkKGZyYWdtZW50LnRvU3RyaW5nKCkpOworCQlpZiAobG9jYWxlRnJhZ21lbnRzLmxlbmd0aCA+IDEpIHsKKwkJCWZvciAoaW50IGk9MTsgaTxsb2NhbGVGcmFnbWVudHMubGVuZ3RoOyBpKyspIHsKKwkJCQlmcmFnbWVudC5hcHBlbmQoIl8iKTsKKwkJCQlmcmFnbWVudC5hcHBlbmQobG9jYWxlRnJhZ21lbnRzW2ldKTsKKwkJCQlwb3NzaWJsZUxvY2FsZXMuYWRkKGZyYWdtZW50LnRvU3RyaW5nKCkpOworCQkJfQorCQl9CisJCQorCQlDb2xsZWN0aW9ucy5yZXZlcnNlKHBvc3NpYmxlTG9jYWxlcyk7CisJCQorCQlyZXR1cm4gcG9zc2libGVMb2NhbGVzOworCX0KKwkKKwkvKioKKwkgKiBAcmV0dXJuIFRoZSBjdXJyZW50IGxvY2FsZQorCSAqLworCXB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldEN1cnJlbnRMb2NhbGUoKQorCXsKKwkJaWYgKENVUlJFTlRfTE9DQUxFID09IG51bGwpIHsKKwkJCVN0cmluZyBwbGF0Zm9ybUxvY2FsZSA9IFBsYXRmb3JtLmdldE5MKCk7CisJCQkKKwkJCUxpc3Q8U3RyaW5nPiBmcmFnbWVudHMgPSBnZXRMb2NhbGVGcmFnbWVudHMocGxhdGZvcm1Mb2NhbGUpOworCQkJQ29sbGVjdGlvbjxTdHJpbmc+IGxvY2FsZXMgPSBnZXRBdmFpbGFibGVMb2NhbGVzKCk7CisJCQkKKwkJCWZvciAoU3RyaW5nIGZyYWdtZW50IDogZnJhZ21lbnRzKSB7CisJCQkJaWYgKGxvY2FsZXMuY29udGFpbnMoZnJhZ21lbnQpKSB7CisJCQkJCUNVUlJFTlRfTE9DQUxFID0gZnJhZ21lbnQ7CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCX0KKwkJCQorCQkJaWYgKENVUlJFTlRfTE9DQUxFID09IG51bGwpIHsKKwkJCQlDVVJSRU5UX0xPQ0FMRSA9IGdldERlZmF1bHRMb2NhbGUoKTsKKwkJCX0KKwkJfQorCisJCXJldHVybiBDVVJSRU5UX0xPQ0FMRTsKKwl9CisJCisJLyoqCisJICogR2V0cyB0aGUgc3lzdGVtIGxvY2FsZS4gIElmIHlvdXIgc3lzdGVtJ3MgbG9jYWxlIGlzIGEgc3VwcG9ydGVkIFNURU0gCisJICogbG9jYWxlLCB0aGVuIGl0IHJldHVybnMgdGhhdC4gIE90aGVyd2lzZSwgaXQgcmV0dXJucyB0aGUgZGVmYXVsdCBsb2NhbGUuCisJICogQHJldHVybiBUaGUgbG9jYWxlIGZvciB0aGUgc3lzdGVtCisJICovCisJcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0U3lzdGVtTG9jYWxlKCkKKwl7CisJCWlmIChTWVNURU1fTE9DQUxFID09IG51bGwpIHsKKwkJCisJCQlTdHJpbmcgc3lzdGVtTG9jYWxlID0gU3lzdGVtLmdldFByb3BlcnR5KFNZU1RFTV9MT0NBTEVfUFJPUEVSVFkpOworCQkJaWYgKHN5c3RlbUxvY2FsZSA9PSBudWxsKSB7CisJCQkJc3lzdGVtTG9jYWxlID0gUGxhdGZvcm0uZ2V0TkwoKTsKKwkJCX0KKworCQkJaWYgKHN5c3RlbUxvY2FsZSAhPSBudWxsKSB7CisJCQkKKwkJCQlMaXN0PFN0cmluZz4gZnJhZ21lbnRzID0gZ2V0TG9jYWxlRnJhZ21lbnRzKHN5c3RlbUxvY2FsZSk7CisJCQkJQ29sbGVjdGlvbjxTdHJpbmc+IGxvY2FsZXMgPSBnZXRBdmFpbGFibGVMb2NhbGVzKCk7CisJCQkJCisJCQkJZm9yIChTdHJpbmcgZnJhZ21lbnQgOiBmcmFnbWVudHMpIHsKKwkJCQkJaWYgKGxvY2FsZXMuY29udGFpbnMoZnJhZ21lbnQpKSB7CisJCQkJCQlTWVNURU1fTE9DQUxFID0gZnJhZ21lbnQ7CisJCQkJCQlicmVhazsKKwkJCQkJfQorCQkJCX0KKwkJCQkKKwkJCX0KKwkJCQorCQkJaWYgKFNZU1RFTV9MT0NBTEUgPT0gbnVsbCkgeworCQkJCVNZU1RFTV9MT0NBTEUgPSBnZXREZWZhdWx0TG9jYWxlKCk7CisJCQl9CisJCX0KKwkJCisJCXJldHVybiBTWVNURU1fTE9DQUxFOworCX0KKwkKKwkvKioKKwkgKiBHZXRzIHRoZSBsaXN0IG9mIGF2YWlsYWJsZSBsb2NhbGVzIAorCSAqIEByZXR1cm4KKwkgKi8KKwlwdWJsaWMgc3luY2hyb25pemVkIHN0YXRpYyBDb2xsZWN0aW9uPFN0cmluZz4gZ2V0QXZhaWxhYmxlTG9jYWxlcygpCisJeworCQlpZiAoQVZBSUxBQkxFX0xPQ0FMRVMgPT0gbnVsbCkgeworCQkJCisJCQlMaXN0PFN0cmluZz4gbG9jYWxlcyA9IG5ldyBBcnJheUxpc3Q8U3RyaW5nPigpOworCQkJRW51bWVyYXRpb248VVJMPiBwYXRocyA9IEFjdGl2YXRvci5nZXREZWZhdWx0KCkuZ2V0QnVuZGxlKCkuZmluZEVudHJpZXMoIi8iLCAicGx1Z2luKi5wcm9wZXJ0aWVzIiwgZmFsc2UpOworCQkJCisJCQlsb2NhbGVzLmFkZChERUZBVUxUX0xPQ0FMRSk7CisJCQkKKwkJCXdoaWxlIChwYXRocy5oYXNNb3JlRWxlbWVudHMoKSkgeworCQkJCVN0cmluZyB1cmwgPSBwYXRocy5uZXh0RWxlbWVudCgpLnRvU3RyaW5nKCk7CisJCQkJaW50IGZpcnN0UGFydCA9IHVybC5pbmRleE9mKCdfJyk7CisJCQkJaW50IGxhc3RQYXJ0ID0gdXJsLmxhc3RJbmRleE9mKCIucHJvcGVydGllcyIpOworCQkJCWlmIChmaXJzdFBhcnQgIT0gLTEgJiYgbGFzdFBhcnQgIT0gLTEpIHsKKwkJCQkJU3RyaW5nIGxvY2FsZSA9IHVybC5zdWJzdHJpbmcoZmlyc3RQYXJ0KzEsIGxhc3RQYXJ0KTsKKwkJCQkJaWYgKCFsb2NhbGVzLmNvbnRhaW5zKGxvY2FsZSkpIHsKKwkJCQkJCWxvY2FsZXMuYWRkKGxvY2FsZSk7CisJCQkJCX0KKwkJCQl9CisJCQl9CisJCQkKKwkJCUNvbGxlY3Rpb25zLnNvcnQobG9jYWxlcyk7CisJCQkKKwkJCUFWQUlMQUJMRV9MT0NBTEVTID0gQ29sbGVjdGlvbnMudW5tb2RpZmlhYmxlQ29sbGVjdGlvbihsb2NhbGVzKTsKKwkJfQorCQkKKwkJcmV0dXJuIEFWQUlMQUJMRV9MT0NBTEVTOwkJCisJfQorCQorCS8qKgorCSAqIEdldCB0aGUgaHVtYW4tcmVhZGFibGUgZGlzcGxheSBuYW1lIGZvciB0aGUgbG9jYWxlLiAgVXNlcyB0aGUgc3ludGF4CisJICogImxvY2FsZV9bbG9jYWxlTmFtZV0iIHRvIHF1ZXJ5IHRoZSBwbHVnaW4ucHJvcGVydGllcyBmaWxlIGZvciB0aGUgCisJICogc3RyaW5nLiAgSWYgdGhpcyBrZXkgaXMgbm90IGZvdW5kLCB0aGVuIGl0IHJldHVybnMgdGhlIG9yaWdpbmFsIHN0cmluZy4KKwkgKiBAcGFyYW0gbG9jYWxlCisJICogQHJldHVybgorCSAqLworCXB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldExvY2FsZURpc3BsYXlOYW1lKFN0cmluZyBsb2NhbGUpCisJeworCQlmaW5hbCBTdHJpbmcgcmVzb3VyY2VLZXlOYW1lID0gImxvY2FsZV8iKyBsb2NhbGU7CisJCVJlc291cmNlQnVuZGxlIHJiID0gUGxhdGZvcm0uZ2V0UmVzb3VyY2VCdW5kbGUoQWN0aXZhdG9yLmdldERlZmF1bHQoKS5nZXRCdW5kbGUoKSk7CisJCQorCQlTdHJpbmcgZGlzcGxheU5hbWUgPSBudWxsOworCQl0cnkgeworCQkJZGlzcGxheU5hbWUgPSByYi5nZXRTdHJpbmcocmVzb3VyY2VLZXlOYW1lKTsKKwkJfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKKwkJCQorCQl9CisJCWlmIChkaXNwbGF5TmFtZSA9PSBudWxsIHx8ICIiLmVxdWFscyhkaXNwbGF5TmFtZSkpIHsKKwkJCWRpc3BsYXlOYW1lID0gbG9jYWxlOworCQl9CisKKwkJaWYgKHJlc291cmNlS2V5TmFtZS5lcXVhbHMoZGlzcGxheU5hbWUpKSB7CisJCQlkaXNwbGF5TmFtZSA9IGxvY2FsZTsKKwkJfQorCQlyZXR1cm4gZGlzcGxheU5hbWU7CisJfQorCQorCS8qKgorCSAqIFJldHVybnMgd2hldGhlciB0aGUgZ2l2ZW4gbG9jYWxlIGlzIHRoZSAnY3VycmVudCcgbG9jYWxlCisJICogQHBhcmFtIGxvY2FsZSBUaGUgbG9jYWxlIHRvIGNoZWNrCisJICogQHJldHVybiBXaGV0aGVyIGl0J3MgdGhlIGN1cnJlbnQgbG9jYWxlCisJICovCisJcHVibGljIHN0YXRpYyBib29sZWFuIGlzQ3VycmVudExvY2FsZShTdHJpbmcgbG9jYWxlKQorCXsKKwkJcmV0dXJuIGxvY2FsZS5lcXVhbHMoZ2V0Q3VycmVudExvY2FsZSgpKTsKKwl9CisJCisJLyoqCisJICogUmV0dXJucyB3aGV0aGVyIHRoZSBnaXZlbiBsb2NhbGUgaXMgdGhlICdkZWZhdWx0JyBsb2NhbGUKKwkgKiBAcGFyYW0gbG9jYWxlIFRoZSBsb2NhbGUgdG8gY2hlY2sKKwkgKiBAcmV0dXJuIFdoZXRoZXIgaXQncyB0aGUgZGVmYXVsdCBsb2NhbGUKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGJvb2xlYW4gaXNEZWZhdWx0TG9jYWxlKFN0cmluZyBsb2NhbGUpCisJeworCQlyZXR1cm4gbG9jYWxlLmVxdWFscyhnZXRTeXN0ZW1Mb2NhbGUoKSk7CisJfQorfQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL1V0aWxpdHkuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9VdGlsaXR5LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGM2ZTQ3YgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9VdGlsaXR5LmphdmEKQEAgLTAsMCArMSwyNzkgQEAKKy8vIFV0aWxpdHkuamF2YQorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnVpOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JRmlsZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JV29ya3NwYWNlOworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLlJlc291cmNlc1BsdWdpbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQ29yZUV4Y2VwdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuVVJJOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5Db25zdGFudHM7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5JZGVudGlmaWFibGU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkdyYXBoOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5MYWJlbDsKKworLyoqCisgKiBUaGlzIGNsYXNzIGNvbnRhaW5zIGNvbW1vbiB1dGlsaXR5IG1ldGhvZHMgdXNlZCBpbiB0aGUgU1RFTSBVSS4KKyAqLworcHVibGljIGNsYXNzIFV0aWxpdHkgeworCisJLy8gcHJpdmF0ZSBzdGF0aWMgUmVzb3VyY2VTZXQgcmVzb3VyY2VTZXQgPSBudWxsOworCisJCisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEhVTUFOX1BPUFVMQVRJT05fUExVR0lOX0lEID0gIm9yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkucG9wdWxhdGlvbi5odW1hbiI7CisJCisJLyoqCisJICogQHJldHVybiBhIExpc3Qgb2YgdGhlIHByb2plY3RzIGluIHRoZSB3b3Jrc3BhY2UgdGhhdCBoYXZlIFNURU0gUHJvamVjdAorCSAqICAgICAgICAgIm5hdHVyZSIKKwkgKiAKKwkgKiBAc2VlIENvbnN0YW50cyNJRF9TVEVNX1BST0pFQ1RfTkFUVVJFCisJICovCisJcHVibGljIHN0YXRpYyBMaXN0PElQcm9qZWN0PiBnZXRTVEVNUHJvamVjdHNGcm9tV29ya3NwYWNlKCkgeworCQlyZXR1cm4gZ2V0U1RFTVByb2plY3RzRnJvbVdvcmtzcGFjZShSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkpOworCX0gLy8gZ2V0U1RFTVByb2plY3RzRnJvbVdvcmtzcGFjZQorCisJLyoqCisJICogQHBhcmFtIHdvcmtzcGFjZQorCSAqICAgICAgICAgICAgdGhlIHdvcmtzcGFjZSB0byBzZWFyY2ggZm9yIFNURU0gUHJvamVjdHMKKwkgKiBAcmV0dXJuIGEgTGlzdCBvZiB0aGUgcHJvamVjdHMgaW4gdGhlIHdvcmtzcGFjZSB0aGF0IGhhdmUgU1RFTSBQcm9qZWN0CisJICogICAgICAgICAibmF0dXJlIgorCSAqIAorCSAqIEBzZWUgQ29uc3RhbnRzI0lEX1NURU1fUFJPSkVDVF9OQVRVUkUKKwkgKi8KKwlwdWJsaWMgc3RhdGljIExpc3Q8SVByb2plY3Q+IGdldFNURU1Qcm9qZWN0c0Zyb21Xb3Jrc3BhY2UoCisJCQlmaW5hbCBJV29ya3NwYWNlIHdvcmtzcGFjZSkgeworCQlmaW5hbCBMaXN0PElQcm9qZWN0PiByZXRWYWx1ZSA9IG5ldyBBcnJheUxpc3Q8SVByb2plY3Q+KCk7CisJCWZpbmFsIElQcm9qZWN0W10gcHJvamVjdHMgPSB3b3Jrc3BhY2UuZ2V0Um9vdCgpLmdldFByb2plY3RzKCk7CisJCWZvciAoZmluYWwgSVByb2plY3QgcHJvamVjdCA6IHByb2plY3RzKSB7CisJCQkvLyBJcyBpdCBhIFNURU0gcHJvamVjdD8KKwkJCWlmIChpc1NURU1Qcm9qZWN0KHByb2plY3QpKSB7CisJCQkJLy8gWWVzCisJCQkJcmV0VmFsdWUuYWRkKHByb2plY3QpOworCQkJfQorCQl9IC8vIGZvciBlYWNoIHByb2plY3QKKwkJcmV0dXJuIHJldFZhbHVlOworCX0gLy8gZ2V0U1RFTVByb2plY3RzRnJvbVdvcmtzcGFjZQorCisJLyoqCisJICogQHBhcmFtIHByb2plY3QKKwkgKiAgICAgICAgICAgIGFuIEVjbGlwc2UgcHJvamVjdAorCSAqIEByZXR1cm4gPGNvZGU+dHJ1ZTwvY29kZT4gaWYgdGhlIHByb2plY3QgaGFzIFNURU0gcHJvamVjdCBuYXR1cmUKKwkgKiAKKwkgKiBAc2VlIENvbnN0YW50cyNJRF9TVEVNX1BST0pFQ1RfTkFUVVJFCisJICovCisJcHVibGljIHN0YXRpYyBib29sZWFuIGlzU1RFTVByb2plY3QoZmluYWwgSVByb2plY3QgcHJvamVjdCkgeworCQlib29sZWFuIHJldFZhbHVlID0gZmFsc2U7CisJCXRyeSB7CisJCQlmb3IgKGZpbmFsIFN0cmluZyBuYXR1cmUgOiBwcm9qZWN0LmdldERlc2NyaXB0aW9uKCkuZ2V0TmF0dXJlSWRzKCkpIHsKKwkJCQkvLyBTVEVNIE5hdHVyZT8KKwkJCQlpZiAobmF0dXJlLmVxdWFscyhDb25zdGFudHMuSURfU1RFTV9QUk9KRUNUX05BVFVSRSkpIHsKKwkJCQkJLy8gWWVzCisJCQkJCXJldFZhbHVlID0gdHJ1ZTsKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJfSAvLyBmb3IgZWFjaCBuYXR1cmUKKwkJfSBjYXRjaCAoZmluYWwgQ29yZUV4Y2VwdGlvbiBlKSB7CisJCQkvLyBOb3QgdGhpcyBwcm9qZWN0CisJCQlyZXRWYWx1ZSA9IGZhbHNlOworCQl9IC8vIGZvciBlYWNoIG5hdHVyZQorCQlyZXR1cm4gcmV0VmFsdWU7CisJfSAvLyBpc1NURU1Qcm9qZWN0CisKKwkvKioKKwkgKiBAcGFyYW0gZmlsZQorCSAqICAgICAgICAgICAgYSBmaWxlIHdpdGggYW4gPGNvZGU+SWRlbnRpZmlhYmxlPC9jb2RlPgorCSAqIEByZXR1cm4gdGhlIDxjb2RlPklkZW50aWZpYWJsZTwvY29kZT4gZGUtc2VyaWFsaXplZCBmcm9tIHRoZSBmaWxlLCBvcgorCSAqICAgICAgICAgPGNvZGU+bnVsbDwvY29kZT4gaWYgYW4gZXJyb3Igb2NjdXJyZWQuCisJICovCisJcHVibGljIHN0YXRpYyBJZGVudGlmaWFibGUgZ2V0SWRlbnRpZmlhYmxlKGZpbmFsIElGaWxlIGZpbGUpIHsKKwkJZmluYWwgVVJJIGZpbGVVUkkgPSBVUkkuY3JlYXRlRmlsZVVSSShmaWxlLmdldExvY2F0aW9uKCkudG9TdHJpbmcoKSk7OworCQlyZXR1cm4gb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLlV0aWxpdHkuZ2V0SWRlbnRpZmlhYmxlKGZpbGVVUkkpOworCX0gLy8gZ2V0SWRlbnRpZmlhYmxlCisKKwkKKwkvKioKKwkgKiBAcGFyYW0gZmlsZQorCSAqICAgICAgICAgICAgYSBmaWxlIHdpdGggYW4gPGNvZGU+SWRlbnRpZmlhYmxlPC9jb2RlPgorCSAqIEByZXR1cm4gdGhlIDxjb2RlPklkZW50aWZpYWJsZTwvY29kZT4gZGUtc2VyaWFsaXplZCBmcm9tIHRoZSBmaWxlLCBvcgorCSAqICAgICAgICAgPGNvZGU+bnVsbDwvY29kZT4gaWYgYW4gZXJyb3Igb2NjdXJyZWQuCisJICovCisJcHVibGljIHN0YXRpYyBJZGVudGlmaWFibGUgZ2V0SWRlbnRpZmlhYmxlSWdub3JlRXhjZXB0aW9uKGZpbmFsIElGaWxlIGZpbGUpIHsKKwkJZmluYWwgVVJJIGZpbGVVUkkgPSBVUkkuY3JlYXRlRmlsZVVSSShmaWxlLmdldExvY2F0aW9uKCkudG9TdHJpbmcoKSk7OworCQlyZXR1cm4gb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLlV0aWxpdHkuZ2V0SWRlbnRpZmlhYmxlSWdub3JlRXhjZXB0aW9uKGZpbGVVUkkpOworCX0gLy8gZ2V0SWRlbnRpZmlhYmxlCisJCisKKwkvKioKKwkgKiBAcGFyYW0gbGFiZWxVUkkKKwkgKiAgICAgICAgICAgIHRoZSB7QGxpbmsgVVJJfSBvZiBhIHtAbGluayBMYWJlbH0KKwkgKiBAcmV0dXJuIHRoZSB7QGxpbmsgTGFiZWx9IGluc3RhbmNlLCBvciBudWxsIGlmIG5vdCBmb3VuZAorCSAqIAorCSAqIHN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL2xhYmVsL3BvcHVsYXRpb24vQUZHLzIvaHVtYW4vMjAwNi9BRi1CRFMtRzAxMDAwMQorCSAqICAgICAgICAKKwkgKiAKKwkgKi8KKwlwdWJsaWMgc3RhdGljIExhYmVsIGdldExhYmVsKGZpbmFsIFVSSSBsYWJlbFVSSSkgeworCQlMYWJlbCByZXRWYWx1ZSA9IG51bGw7CisKKwkJLy8gSXMgaXQgYW4gYXJlYSBsYWJlbD8KKwkJaWYgKGlzQXJlYUxhYmVsKGxhYmVsVVJJKSkgeworCQkJLy8gWWVzCisJCQlmaW5hbCBVUkkgYXJlYUdyYXBoVVJJID0gY3JlYXRlQXJlYUdyYXBoVVJJKGxhYmVsVVJJKTsKKwkJCWZpbmFsIEdyYXBoIGFyZWFHcmFwaCA9IChHcmFwaCkgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLlV0aWxpdHkuZ2V0SWRlbnRpZmlhYmxlKGFyZWFHcmFwaFVSSSk7CisJCQlyZXRWYWx1ZSA9IGFyZWFHcmFwaC5nZXROb2RlTGFiZWwobGFiZWxVUkkpOworCQl9IC8vIGlmIGFyZWEKKwkJLy8gSXMgaXQgYSBwb3B1bGF0aW9uIGxhYmVsPworCQllbHNlIGlmIChpc1BvcHVsYXRpb25MYWJlbChsYWJlbFVSSSkpIHsKKwkJCWZpbmFsIFVSSSBwb3B1bGF0aW9uR3JhcGhVUkkgPSBjcmVhdGVQb3B1bGF0aW9uR3JhcGhVUkkobGFiZWxVUkkpOworCQkJZmluYWwgR3JhcGggcG9wdWxhdGlvbkdyYXBoID0gKEdyYXBoKSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuVXRpbGl0eS5nZXRJZGVudGlmaWFibGUocG9wdWxhdGlvbkdyYXBoVVJJKTsKKwkJCXJldFZhbHVlID0gcG9wdWxhdGlvbkdyYXBoLmdldE5vZGVMYWJlbChsYWJlbFVSSSk7CisJCX0gLy8gaWYgcG9wdWxhdGlvbgorCisJCXJldHVybiByZXRWYWx1ZTsKKwl9IC8vIGdldExhYmVsCisKKwkvKioKKwkgKiBAcGFyYW0gbGFiZWxVUkkKKwkgKiBAcmV0dXJuIDxjb2RlPnRydWU8L2NvZGU+IGlmIHRoZSB7QGxpbmsgVVJJfSBpcyBmb3IgYW4gYXJlYSBsYWJlbAorCSAqLworCXByaXZhdGUgc3RhdGljIGJvb2xlYW4gaXNBcmVhTGFiZWwoZmluYWwgVVJJIGxhYmVsVVJJKSB7CisJCXJldHVybiBleHRyYWN0TGFiZWxOYW1lKGxhYmVsVVJJLnRvU3RyaW5nKCkpLmVxdWFscygiYXJlYSIpOworCX0KKworCS8qKgorCSAqIEBwYXJhbSBsYWJlbFVSSQorCSAqIEByZXR1cm4gPGNvZGU+dHJ1ZTwvY29kZT4gaWYgdGhlIHtAbGluayBVUkl9IGlzIGZvciBhbiBwb3B1bGF0aW9uIGxhYmVsCisJICovCisJcHJpdmF0ZSBzdGF0aWMgYm9vbGVhbiBpc1BvcHVsYXRpb25MYWJlbChmaW5hbCBVUkkgbGFiZWxVUkkpIHsKKwkJcmV0dXJuIGV4dHJhY3RMYWJlbE5hbWUobGFiZWxVUkkudG9TdHJpbmcoKSkuZXF1YWxzKCJwb3B1bGF0aW9uIik7CisJfQorCisJLyoqCisJICogQHBhcmFtIGxhYmVsVVJJCisJICogQHJldHVybiB0aGUge0BsaW5rIFVSSX0gb2YgdGhlIGZpbGUgdGhhdCB0aGUgZ3JhcGggY29udGFpbmluZyB0aGUKKwkgKiAgICAgICAgIHtAbGluayBMYWJlbH0gd2l0aCB0aGUgbGFiZWxVUkkgd291bGQgYmUgc2VyaWFsaXplZCBpbgorCSAqLworCXByaXZhdGUgc3RhdGljIFVSSSBjcmVhdGVBcmVhR3JhcGhVUkkoZmluYWwgVVJJIGxhYmVsVVJJKSB7CisJCQorCQlmaW5hbCBTdHJpbmcgcHJlZml4ID0gVVJJLmNyZWF0ZVBsYXRmb3JtUGx1Z2luVVJJKG9yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkuQWN0aXZhdG9yLlBMVUdJTl9JRCwgZmFsc2UpLnRvU3RyaW5nKCk7CisJCS8vZmluYWwgU3RyaW5nQnVpbGRlciBzYiA9IG5ldyBTdHJpbmdCdWlsZGVyKCJwbGF0Zm9ybTovcGx1Z2luLyIgKyBvcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5LkFjdGl2YXRvci5QTFVHSU5fSUQgKyAiL3Jlc291cmNlcy9kYXRhIik7CisJCWZpbmFsIFN0cmluZ0J1aWxkZXIgc2IgPSBuZXcgU3RyaW5nQnVpbGRlcihwcmVmaXggKyAiL3Jlc291cmNlcy9kYXRhIik7CisKKwkJc2IuYXBwZW5kKCIvY291bnRyeS8iKTsKKwkJLy8gRXh0cmFjdCB0aGUgbGFiZWwgbmFtZS4gQ3VycmVudGx5IHRoaXMgb25seSB3b3JrcyBmb3IgYXJlYQorCQlmaW5hbCBTdHJpbmcgdXJpU3RyaW5nID0gbGFiZWxVUkkudG9TdHJpbmcoKTsKKwkJZmluYWwgU3RyaW5nIGxhYmVsTmFtZSA9IGV4dHJhY3RMYWJlbE5hbWUodXJpU3RyaW5nKTsKKwkJZmluYWwgU3RyaW5nIGlzb0tleSA9IGV4dHJhY3RJU09LZXkodXJpU3RyaW5nLCBsYWJlbE5hbWUpOworCQlmaW5hbCBTdHJpbmcgbGV2ZWwgPSBleHRyYWN0SVNPTGV2ZWwodXJpU3RyaW5nLCBpc29LZXkpOworCQlzYi5hcHBlbmQoaXNvS2V5KTsKKwkJc2IuYXBwZW5kKCIvIik7CisJCWZpbmFsIFN0cmluZyBmaWxlTmFtZSA9IGNyZWF0ZUFyZWFHcmFwaEZpbGVOYW1lKGlzb0tleSwgbGV2ZWwsIGxhYmVsTmFtZSk7CisJCXNiLmFwcGVuZChmaWxlTmFtZSk7CisJCXJldHVybiBVUkkuY3JlYXRlVVJJKHNiLnRvU3RyaW5nKCkpOworCX0gLy8gY3JlYXRlR3JhcGhVUkkKKworCXB1YmxpYyBzdGF0aWMgVVJJIGNyZWF0ZVBvcHVsYXRpb25HcmFwaFVSSShmaW5hbCBVUkkgbGFiZWxVUkkpIHsKKwkJCisJCWZpbmFsIFN0cmluZyBwcmVmaXggPSBVUkkuY3JlYXRlUGxhdGZvcm1QbHVnaW5VUkkoSFVNQU5fUE9QVUxBVElPTl9QTFVHSU5fSUQsIGZhbHNlKS50b1N0cmluZygpOworCQkvL2ZpbmFsIFN0cmluZ0J1aWxkZXIgc2IgPSBuZXcgU3RyaW5nQnVpbGRlcigicGxhdGZvcm06L3BsdWdpbi8iICsgb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS5wb3B1bGF0aW9uLmh1bWFuLkFjdGl2YXRvci5QTFVHSU5fSUQgKyAiL3Jlc291cmNlcy9kYXRhIik7CisJCWZpbmFsIFN0cmluZ0J1aWxkZXIgc2IgPSBuZXcgU3RyaW5nQnVpbGRlcihwcmVmaXggKyAiL3Jlc291cmNlcy9kYXRhIik7CisKKwkJc2IuYXBwZW5kKCIvY291bnRyeS8iKTsKKwkJLy8gRXh0cmFjdCB0aGUgbGFiZWwgbmFtZS4gQ3VycmVudGx5IHRoaXMgb25seSB3b3JrcyBmb3IgYXJlYQorCQlmaW5hbCBTdHJpbmcgdXJpU3RyaW5nID0gbGFiZWxVUkkudG9TdHJpbmcoKTsKKwkJZmluYWwgU3RyaW5nIGxhYmVsTmFtZSA9IGV4dHJhY3RMYWJlbE5hbWUodXJpU3RyaW5nKTsKKwkJZmluYWwgU3RyaW5nIGlzb0tleSA9IGV4dHJhY3RJU09LZXkodXJpU3RyaW5nLCBsYWJlbE5hbWUpOworCQlmaW5hbCBTdHJpbmcgbGV2ZWwgPSBleHRyYWN0SVNPTGV2ZWwodXJpU3RyaW5nLCBpc29LZXkpOworCQlmaW5hbCBTdHJpbmcgcG9wdWxhdGlvbk5hbWUgPSBleHRyYWN0UG9wdWxhdGlvbk5hbWUodXJpU3RyaW5nLCBsZXZlbCk7CisJCWZpbmFsIFN0cmluZyBkYXRlID0gZXh0cmFjdFBvcHVsYXRpb25EYXRlKHVyaVN0cmluZywgcG9wdWxhdGlvbk5hbWUpOworCQlzYi5hcHBlbmQoaXNvS2V5KTsKKwkJc2IuYXBwZW5kKCIvIik7CisJCXNiLmFwcGVuZChjcmVhdGVQb3B1bGF0aW9uR3JhcGhGaWxlTmFtZShpc29LZXksIGxldmVsLCBsYWJlbE5hbWUsCisJCQkJcG9wdWxhdGlvbk5hbWUsIGRhdGUpKTsKKwkJcmV0dXJuIFVSSS5jcmVhdGVVUkkoc2IudG9TdHJpbmcoKSk7CisJfSAvLyBjcmVhdGVQb3B1bGF0aW9uR3JhcGhVUkkKKworCS8qKgorCSAqIEBwYXJhbSB1cmlTdHJpbmcKKwkgKiBAcGFyYW0gcG9wdWxhdGlvbk5hbWUKKwkgKiBAcmV0dXJuCisJICovCisJcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIGV4dHJhY3RQb3B1bGF0aW9uRGF0ZShTdHJpbmcgdXJpU3RyaW5nLAorCQkJU3RyaW5nIHBvcHVsYXRpb25OYW1lKSB7CisJCWZpbmFsIGludCBpbmRleCA9dXJpU3RyaW5nLmluZGV4T2YocG9wdWxhdGlvbk5hbWUpOworCQlmaW5hbCBTdHJpbmcgdGVtcCA9IHVyaVN0cmluZy5zdWJzdHJpbmcoaW5kZXgrcG9wdWxhdGlvbk5hbWUubGVuZ3RoKCkrMSk7CisJCWZpbmFsIGludCBpbmRleDIgPSB0ZW1wLmluZGV4T2YoIi8iKTsKKwkJcmV0dXJuIHRlbXAuc3Vic3RyaW5nKDAsIGluZGV4Mik7CisJfSAvLyBleHRyYWN0UG9wdWxhdGlvbkRhdGUKKworCXByaXZhdGUgc3RhdGljIFN0cmluZyBjcmVhdGVQb3B1bGF0aW9uR3JhcGhGaWxlTmFtZShmaW5hbCBTdHJpbmcgaXNvS2V5LAorCQkJZmluYWwgU3RyaW5nIGxldmVsLCBAU3VwcHJlc3NXYXJuaW5ncyAoInVudXNlZCIpIGZpbmFsIFN0cmluZyBsYWJlbE5hbWUsCisJCQlmaW5hbCBTdHJpbmcgcG9wdWxhdGlvbk5hbWUsIGZpbmFsIFN0cmluZyBkYXRlKSB7CisJCWZpbmFsIFN0cmluZ0J1aWxkZXIgc2IgPSBuZXcgU3RyaW5nQnVpbGRlcihpc29LZXkpOworCQlzYi5hcHBlbmQoIl8iKTsKKwkJc2IuYXBwZW5kKGxldmVsKTsKKwkJc2IuYXBwZW5kKCJfIik7CisJCXNiLmFwcGVuZChwb3B1bGF0aW9uTmFtZSk7CisJCXNiLmFwcGVuZCgiXyIpOworCQlzYi5hcHBlbmQoZGF0ZSk7CisJCXNiLmFwcGVuZCgiXyIpOworCQlzYi5hcHBlbmQoInBvcHVsYXRpb24uZ3JhcGgiKTsKKworCQlyZXR1cm4gc2IudG9TdHJpbmcoKTsKKwl9IC8vIGNyZWF0ZVBvcHVsYXRpb25HcmFwaEZpbGVOYW1lCisKKwlwcml2YXRlIHN0YXRpYyBTdHJpbmcgZXh0cmFjdFBvcHVsYXRpb25OYW1lKGZpbmFsIFN0cmluZyB1cmlTdHJpbmcsIFN0cmluZyBsZXZlbCkgeworCQlmaW5hbCBpbnQgaW5kZXggPSB1cmlTdHJpbmcuaW5kZXhPZihsZXZlbCk7CisJCWZpbmFsIFN0cmluZyB0ZW1wID0gdXJpU3RyaW5nLnN1YnN0cmluZyhpbmRleCtsZXZlbC5sZW5ndGgoKSsxKTsKKwkJZmluYWwgaW50IGluZGV4MiA9IHRlbXAuaW5kZXhPZigiLyIpOworCQlyZXR1cm4gdGVtcC5zdWJzdHJpbmcoMCxpbmRleDIpOworCX0gLy8gZXh0cmFjdFBvcHVsYXRpb25OYW1lCisKKwlwcml2YXRlIHN0YXRpYyBTdHJpbmcgZXh0cmFjdElTT0xldmVsKGZpbmFsIFN0cmluZyB1cmlTdHJpbmcsCisJCQlmaW5hbCBTdHJpbmcgaXNvS2V5KSB7CisJCWZpbmFsIGludCBpbmRleCA9IHVyaVN0cmluZy5pbmRleE9mKGlzb0tleSkgKyBpc29LZXkubGVuZ3RoKCkgKyAxOworCQlyZXR1cm4gdXJpU3RyaW5nLnN1YnN0cmluZyhpbmRleCwgaW5kZXggKyAxKTsKKwl9IC8vIGV4dHJhY3RJU09MZXZlbAorCisJcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIGNyZWF0ZUFyZWFHcmFwaEZpbGVOYW1lKGZpbmFsIFN0cmluZyBpc29LZXksCisJCQlmaW5hbCBTdHJpbmcgbGV2ZWwsIGZpbmFsIFN0cmluZyBsYWJlbE5hbWUpIHsKKwkJZmluYWwgU3RyaW5nQnVpbGRlciBzYiA9IG5ldyBTdHJpbmdCdWlsZGVyKGlzb0tleSk7CisJCXNiLmFwcGVuZCgiXyIpOworCQlzYi5hcHBlbmQobGV2ZWwpOworCQlzYi5hcHBlbmQoIl8iKTsKKwkJc2IuYXBwZW5kKGxhYmVsTmFtZSk7CisJCXNiLmFwcGVuZCgiLmdyYXBoIik7CisJCXJldHVybiBzYi50b1N0cmluZygpOworCX0gLy8gY3JlYXRlRmlsZU5hbWUKKworCXByaXZhdGUgc3RhdGljIFN0cmluZyBleHRyYWN0SVNPS2V5KGZpbmFsIFN0cmluZyB1cmlTdHJpbmcsCisJCQlmaW5hbCBTdHJpbmcgbGFiZWxOYW1lKSB7CisJCWZpbmFsIGludCBzdGFydEluZGV4ID0gdXJpU3RyaW5nLmluZGV4T2YobGFiZWxOYW1lKSArIDEKKwkJCQkrIGxhYmVsTmFtZS5sZW5ndGgoKTsKKwkJZmluYWwgaW50IGVuZEluZGV4ID0gc3RhcnRJbmRleCArIDM7CisKKwkJcmV0dXJuIHVyaVN0cmluZy5zdWJzdHJpbmcoc3RhcnRJbmRleCwgZW5kSW5kZXgpOworCX0gLy8gZXh0cmFjdElTT0tleQorCisJcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIGV4dHJhY3RMYWJlbE5hbWUoZmluYWwgU3RyaW5nIHVyaVN0cmluZykgeworCQlmaW5hbCBTdHJpbmcgdXJpU3VmZml4ID0gdXJpU3RyaW5nLnN1YnN0cmluZyh1cmlTdHJpbmcKKwkJCQkuaW5kZXhPZihMYWJlbC5VUklfVFlQRV9MQUJFTF9TRUdNRU5UKQorCQkJCSsgTGFiZWwuVVJJX1RZUEVfTEFCRUxfU0VHTUVOVC5sZW5ndGgoKSArIDEpOworCQlyZXR1cm4gdXJpU3VmZml4LnN1YnN0cmluZygwLCB1cmlTdWZmaXguaW5kZXhPZigiLyIpKTsKKwl9IC8vIGV4dHJhY3RMYWJlbE5hbWUKKworfSAvLyBVdGlsaXR5CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvYWRhcHRlcnMvY29sb3IvQWJzdHJhY3RDb2xvclByb3ZpZGVyQWRhcHRlckZhY3RvcnkuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9hZGFwdGVycy9jb2xvci9BYnN0cmFjdENvbG9yUHJvdmlkZXJBZGFwdGVyRmFjdG9yeS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRhYTQxZDkKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvYWRhcHRlcnMvY29sb3IvQWJzdHJhY3RDb2xvclByb3ZpZGVyQWRhcHRlckZhY3RvcnkuamF2YQpAQCAtMCwwICsxLDMwIEBACisvLyBBYnN0cmFjdENvbG9yUHJvdmlkZXJBZGFwdGVyRmFjdG9yeS5qYXZhCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0udWkuYWRhcHRlcnMuY29sb3I7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGgudXRpbC5HcmFwaEFkYXB0ZXJGYWN0b3J5OworCisvKioKKyAqIFRoaXMgaXMgYW4gYWJzdHJhY3QgY2xhc3MgdGhhdCBDb2xvclByb3ZpZGVyQWRhcHRlckZhY3Rvcnkgc2hvdWxkIGV4dGVuZC4KKyAqIEl0IGhvbGRzIHRoZSBjb21tb24gaW5mb3JtYXRpb24gZm9yIGFsbCBjb2xvciBwcm92aWRlcnMgYW5kIGhhcyBmZXcgYWJzdHJhY3QgbWV0aG9kcworICogdGhhdCB0aGUgY29uY3JldGUgY2xhc3Mgc2hvdWxkIG92ZXJyaWRlLgorICovCitwdWJsaWMgYWJzdHJhY3QgY2xhc3MgQWJzdHJhY3RDb2xvclByb3ZpZGVyQWRhcHRlckZhY3RvcnkgZXh0ZW5kcyBHcmFwaEFkYXB0ZXJGYWN0b3J5CisJaW1wbGVtZW50cyBJQ29sb3JQcm92aWRlckFkYXB0ZXJGYWN0b3J5LCBDb21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5IHsKKwkKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC51dGlsLkdyYXBoQWRhcHRlckZhY3RvcnkjaXNGYWN0b3J5Rm9yVHlwZShqYXZhLmxhbmcuT2JqZWN0KQorCSAqLworCXB1YmxpYyBhYnN0cmFjdCBib29sZWFuIGlzRmFjdG9yeUZvclR5cGUoT2JqZWN0IHR5cGUpOwkKK30KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9hZGFwdGVycy9jb2xvci9BYnN0cmFjdFJlbGF0aXZlVmFsdWVDb2xvclByb3ZpZGVyQWRhcHRlci5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL2FkYXB0ZXJzL2NvbG9yL0Fic3RyYWN0UmVsYXRpdmVWYWx1ZUNvbG9yUHJvdmlkZXJBZGFwdGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjhjYWU0MAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9hZGFwdGVycy9jb2xvci9BYnN0cmFjdFJlbGF0aXZlVmFsdWVDb2xvclByb3ZpZGVyQWRhcHRlci5qYXZhCkBAIC0wLDAgKzEsMzE3IEBACisvLyBBYnN0cmFjdFJlbGF0aXZlVmFsdWVDb2xvclByb3ZpZGVyQWRhcHRlci5qYXZhCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0udWkuYWRhcHRlcnMuY29sb3I7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlByZWZlcmVuY2VzOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnJlc291cmNlLlN0cmluZ0NvbnZlcnRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuRGVjb3JhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuYWRhcHRlcnMucmVsYXRpdmV2YWx1ZS5SZWxhdGl2ZVZhbHVlUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5hZGFwdGVycy5yZWxhdGl2ZXZhbHVlLlJlbGF0aXZlVmFsdWVQcm92aWRlckFkYXB0ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5hZGFwdGVycy5yZWxhdGl2ZXZhbHVlLlJlbGF0aXZlVmFsdWVQcm92aWRlckFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udWkuQWN0aXZhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udWkucHJlZmVyZW5jZXMuTWFwc0NvbG9yc1ByZWZlcmVuY2VQYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5TV1Q7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmdyYXBoaWNzLkNvbG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ncmFwaGljcy5EZXZpY2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmdyYXBoaWNzLkdDOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ncmFwaGljcy5SR0I7CisKKy8qKgorICogVGhpcyBpcyBhbiBhYnN0cmFjdCBjbGFzcyB0aGF0IFJlbGF0aXZlIFZhbHVlIENvbG9yIFByb3ZpZGVyIEFkYXB0ZXIgc2hvdWxkIGV4dGVuZC4KKyAqIEl0IGhvbGRzIHRoZSBjb21tb24gaW5mb3JtYXRpb24gZm9yIGFsbCBjb2xvciBwcm92aWRlcnMgYW5kIGhhcyBmZXcgYWJzdHJhY3QgbWV0aG9kcworICogdGhhdCB0aGUgY29uY3JldGUgY2xhc3Mgc2hvdWxkIG92ZXJyaWRlLgorICovCitwdWJsaWMgYWJzdHJhY3QgY2xhc3MgQWJzdHJhY3RSZWxhdGl2ZVZhbHVlQ29sb3JQcm92aWRlckFkYXB0ZXIgZXh0ZW5kcyBDb2xvclByb3ZpZGVyQWRhcHRlcgorCQlpbXBsZW1lbnRzIFJlbGF0aXZlVmFsdWVDb2xvclByb3ZpZGVyIHsKKwkKKwkvKioKKwkgKiBIb2xkcyB0aGUge0BsaW5rIENvbG9yfSBmb3IgcmVsYXRpdmUgdmFsdWUgb2YgMQorCSAqLworCXByaXZhdGUgQ29sb3IgbWF4X0ZpbGxDb2xvcjsKKwkvKioKKwkgKiBIb2xkcyB0aGUge0BsaW5rIENvbG9yfSBmb3IgcmVsYXRpdmUgdmFsdWVzIGJldHdlZW4gMC45IGFuZCAxCisJICovCisJcHJpdmF0ZSBDb2xvciByYW5nZV8wOV8xX0ZpbGxDb2xvcjsKKwkvKioKKwkgKiBIb2xkcyB0aGUge0BsaW5rIENvbG9yfSBmb3IgcmVsYXRpdmUgdmFsdWVzIGJldHdlZW4gMC44IGFuZCAwLjkKKwkgKi8KKwlwcml2YXRlIENvbG9yIHJhbmdlXzA4XzA5X0ZpbGxDb2xvcjsKKwkKKwkvKioKKwkgKiBIb2xkcyB0aGUge0BsaW5rIENvbG9yfSBmb3IgcmVsYXRpdmUgdmFsdWVzIGJldHdlZW4gMC43IGFuZCAwLjgKKwkgKi8KKwlwcml2YXRlIENvbG9yIHJhbmdlXzA3XzA4X0ZpbGxDb2xvcjsKKwkvKioKKwkgKiBIb2xkcyB0aGUge0BsaW5rIENvbG9yfSBmb3IgcmVsYXRpdmUgdmFsdWVzIGJldHdlZW4gMC42IGFuZCAwLjcKKwkgKi8KKwlwcml2YXRlIENvbG9yIHJhbmdlXzA2XzA3X0ZpbGxDb2xvcjsKKwkKKwkvKioKKwkgKiBIb2xkcyB0aGUge0BsaW5rIENvbG9yfSBmb3IgcmVsYXRpdmUgdmFsdWVzIGJldHdlZW4gMC41IGFuZCAwLjYKKwkgKi8KKwlwcml2YXRlIENvbG9yIHJhbmdlXzA1XzA2X0ZpbGxDb2xvcjsKKwkvKioKKwkgKiBIb2xkcyB0aGUge0BsaW5rIENvbG9yfSBmb3IgcmVsYXRpdmUgdmFsdWVzIGJldHdlZW4gMC40IGFuZCAwLjUKKwkgKi8KKwlwcml2YXRlIENvbG9yIHJhbmdlXzA0XzA1X0ZpbGxDb2xvcjsKKwkKKwkvKioKKwkgKiBIb2xkcyB0aGUge0BsaW5rIENvbG9yfSBmb3IgcmVsYXRpdmUgdmFsdWVzIGJldHdlZW4gMC4zIGFuZCAwLjQKKwkgKi8KKwlwcml2YXRlIENvbG9yIHJhbmdlXzAzXzA0X0ZpbGxDb2xvcjsKKwkvKioKKwkgKiBIb2xkcyB0aGUge0BsaW5rIENvbG9yfSBmb3IgcmVsYXRpdmUgdmFsdWVzIGJldHdlZW4gMC4yIGFuZCAwLjMKKwkgKi8KKwlwcml2YXRlIENvbG9yIHJhbmdlXzAyXzAzX0ZpbGxDb2xvcjsKKwkKKwkvKioKKwkgKiBIb2xkcyB0aGUge0BsaW5rIENvbG9yfSBmb3IgcmVsYXRpdmUgdmFsdWVzIGJldHdlZW4gMC4xIGFuZCAwLjIKKwkgKi8KKwlwcml2YXRlIENvbG9yIHJhbmdlXzAxXzAyX0ZpbGxDb2xvcjsKKwkvKioKKwkgKiBIb2xkcyB0aGUge0BsaW5rIENvbG9yfSBmb3IgcmVsYXRpdmUgdmFsdWVzIGJldHdlZW4gMCBhbmQgMC4xCisJICovCisJcHJpdmF0ZSBDb2xvciByYW5nZV8wXzAxX0ZpbGxDb2xvcjsKKwkKKwkKKwkKKwkvKioKKwkgKiBIb2xkcyB0aGUge0BsaW5rIENvbG9yfSBmb3IgcmVsYXRpdmUgdmFsdWVzIG9mIDAKKwkgKi8KKwlwcm90ZWN0ZWQgQ29sb3IgemVyb19GaWxsQ29sb3I7CisJLyoqCisJICogSG9sZHMgdGhlIGN1cnJlbnQgZm9yZWdyb3VuZCB7QGxpbmsgQ29sb3J9ICh0aGUgYmFzZSBjb2xvciBmb3IgQWxwaGFDb21wb3NpdGUpCisJICovCisJcHJvdGVjdGVkIENvbG9yIGZvcmVncm91bmRGaWxsQ29sb3I7CQorCQorCS8qKgorCSAqIEhvbGRzIHRoZSBjdXJyZW50IGFscGhhIHZhbHVlIHtAbGluayBDb2xvcn0gKGZvciBBbHBoYUNvbXBvc2l0ZSkKKwkgKiBkZWZhdWx0IGlzIDI1NQorCSAqLworCXByb3RlY3RlZCBpbnQgYWxwaGE9MjU1OwkKKwkKKwkvKioKKwkgKiBIb2xkcyB0aGUgZGVmYXVsdCBiYWNrZ3JvdW5kIHtAbGluayBDb2xvcn0gKHRoZSBiYXNlIGNvbG9yIGZvciBBbHBoYUNvbXBvc2l0ZSkKKwkgKi8KKwlwdWJsaWMgQ29sb3IgYmFja2dyb3VuZEZpbGxDb2xvcjsJCisJLyoqCisJICogVGhlIHRocmVzaG9sZCB1bmRlciB3aGljaCB2YWx1ZXMgYXJlIGNvbnNpZGVyZWQgemVybworCSAqLworCXByb3RlY3RlZCBmaW5hbCBmbG9hdCBaRVJPX1JFTEFUSVZFX1ZBTFVFX1RIUkVTSE9MRCA9IDAuMDAwMDAwMDAxZjsKKwkvKioKKwkgKiBSZWZlcmVuY2UgdG8gdGhlIHNlbGVjdGVkIHtAbGluayBEZWNvcmF0b3J9CisJICovCisJcHJvdGVjdGVkIERlY29yYXRvciBzZWxlY3RlZERlY29yYXRvciA9IG51bGw7CisJLyoqCisJICogUmVmZXJlbmNlIHRvIHRoZSBzZWxlY3RlZCB7QGxpbmsgRGVjb3JhdG9yfQorCSAqLworCXByb3RlY3RlZCBTdHJpbmcgc2VsZWN0ZWRQb3B1bGF0aW9uSWRlbnRpZmllciA9IG51bGw7CisJLyoqCisJICogSW5zdGFuY2Ugb2YgYSByZWxhdGl2ZSB2YWx1ZSBwcm92aWRlcgorCSAqLworCXByb3RlY3RlZCBSZWxhdGl2ZVZhbHVlUHJvdmlkZXJBZGFwdGVyIHJ2cCA9IG51bGw7CisJLyoqCisJICogQ3VycmVudCBkZXZpY2UKKwkgKi8KKwlwcm90ZWN0ZWQgRGV2aWNlIGRldmljZSA9IG51bGw7CisJCisJLyoqCisJICogQ29uc3RydWN0b3IKKwkgKi8KKwlwdWJsaWMgQWJzdHJhY3RSZWxhdGl2ZVZhbHVlQ29sb3JQcm92aWRlckFkYXB0ZXIoKSB7CisJCXVwZGF0ZUNvbG9yc0Zyb21QcmVmZXJlbmNlcygpOworCX0gLy8gQWJzdHJhY3RSZWxhdGl2ZVZhbHVlQ29sb3JQcm92aWRlckFkYXB0ZXIKKwkKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0udWkuYWRhcHRlcnMuY29sb3IuQ29sb3JQcm92aWRlciNnZXRDb2xvcihEZXZpY2UpCisJICovCisJcHVibGljIENvbG9yIGdldENvbG9yKERldmljZSBkZXZpY2UpIHsKKwkJZG91YmxlIHJlbGF0aXZlVmFsdWUgPSBnZXRSZWxhdGl2ZVZhbHVlKCk7CisJCXRoaXMuZGV2aWNlID0gZGV2aWNlOworCQlyZXR1cm4gZ2V0Q29sb3JGb3JSZWxhdGl2ZVZhbHVlKHJlbGF0aXZlVmFsdWUpOworCX0gLy8gZ2V0Q29sb3IKKwkKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0udWkuYWRhcHRlcnMuY29sb3IuQ29sb3JQcm92aWRlciN1cGRhdGVHQyhHQykKKwkgKi8KKwlwdWJsaWMgdm9pZCB1cGRhdGVHQyhHQyBnY1RvVXBkYXRlKSB7CisJCXRoaXMudXBkYXRlR0MoZ2NUb1VwZGF0ZSwgMS4wZiwgZmFsc2UpOworCX0gLy8gc2V0RzJEQ29sb3IKKwkKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0udWkuYWRhcHRlcnMuY29sb3IuQ29sb3JQcm92aWRlciN1cGRhdGVHQyhHQywgZmxvYXQsIGJvb2xlYW4pCisJICovCisJcHVibGljIHZvaWQgdXBkYXRlR0MoR0MgZ2NUb1VwZGF0ZSwgCisJCQlAU3VwcHJlc3NXYXJuaW5ncygidW51c2VkIilmbG9hdCBnYWluRmFjdG9yLCAKKwkJCUBTdXBwcmVzc1dhcm5pbmdzKCJ1bnVzZWQiKWJvb2xlYW4gdXNlTG9nU2NhbGluZykgeworCQkvL0lmIHRoZSBjb25jcmV0ZSBjb2xvciBwcm92aWRlciB1c2VzIHRoZSBnYWluRmFjdG9yIGFuZC9vciB1c2VMb2dTY2FsaW5nIHBhcmFtZXRlcnMKKwkJLy90aGVuIGl0IHNob3VsZCBvdmVycmlkZSB0aGlzIG1ldGhvZCB3aXRoIGl0cyBpbXBsZW1lbnRhdGlvbgorCQlDb2xvciBmb3JlZ3JvdW5kID0gZ2V0Q29sb3IoZ2NUb1VwZGF0ZS5nZXREZXZpY2UoKSk7CisJCWdjVG9VcGRhdGUuc2V0QmFja2dyb3VuZChmb3JlZ3JvdW5kKTsKKwl9IC8vIHNldEcyRENvbG9yCisJCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnVpLmFkYXB0ZXJzLmNvbG9yLlJlbGF0aXZlVmFsdWVDb2xvclByb3ZpZGVyI2dldFJlbGF0aXZlVmFsdWUoKQorCSAqLworCWFic3RyYWN0IHB1YmxpYyBmbG9hdCBnZXRSZWxhdGl2ZVZhbHVlKCk7CisJCisJLyoqCisJICogVGhlIG1ldGhvZCByZXR1cm5zIHRoZSB7QGxpbmsgQ29sb3J9IHRoYXQgbWF0Y2hlcyB0aGUgc3BlY2lmaWVkIHJlbGF0aXZlIHZhbHVlLgorCSAqIAorCSAqIEBwYXJhbSByZWxhdGl2ZVZhbHVlIHRoZSByZWxhdGl2ZSB2YWx1ZQorCSAqIEByZXR1cm4gdGhlIG1hdGNoaW5nIHtAbGluayBDb2xvcn0KKwkgKi8KKwlwcm90ZWN0ZWQgQ29sb3IgZ2V0Q29sb3JGb3JSZWxhdGl2ZVZhbHVlKGZpbmFsIGRvdWJsZSByZWxhdGl2ZVZhbHVlKSB7CisJCUNvbG9yIHJldFZhbHVlID0gZGV2aWNlLmdldFN5c3RlbUNvbG9yKFNXVC5DT0xPUl9CTEFDSyk7CisJCXVwZGF0ZUNvbG9yc0Zyb21QcmVmZXJlbmNlcygpOworCQlpZiAocmVsYXRpdmVWYWx1ZSA9PSAxKSB7CisJCQlyZXRWYWx1ZSA9IG1heF9GaWxsQ29sb3I7CisJCX0KKwkJZWxzZSBpZiAocmVsYXRpdmVWYWx1ZSA+IDAuOSkgeworCQkJcmV0VmFsdWUgPSByYW5nZV8wOV8xX0ZpbGxDb2xvcjsKKwkJfSAKKwkJZWxzZSBpZiAocmVsYXRpdmVWYWx1ZSA+IDAuOCkgeworCQkJcmV0VmFsdWUgPSByYW5nZV8wOF8wOV9GaWxsQ29sb3I7CisJCX0gCisJCWVsc2UgaWYgKHJlbGF0aXZlVmFsdWUgPiAwLjcpIHsKKwkJCS8vIFllcworCQkJcmV0VmFsdWUgPSByYW5nZV8wN18wOF9GaWxsQ29sb3I7CisJCX0gLy8gaWYKKwkJZWxzZSBpZiAocmVsYXRpdmVWYWx1ZSA+IDAuNikgeworCQkJLy8gWWVzCisJCQlyZXRWYWx1ZSA9IHJhbmdlXzA2XzA3X0ZpbGxDb2xvcjsKKwkJfSAvLyBpZgorCQllbHNlIGlmIChyZWxhdGl2ZVZhbHVlID4gMC41KSB7CisJCQlyZXRWYWx1ZSA9IHJhbmdlXzA1XzA2X0ZpbGxDb2xvcjsKKwkJfQorCQllbHNlIGlmIChyZWxhdGl2ZVZhbHVlID4gMC40KSB7CisJCQlyZXRWYWx1ZSA9IHJhbmdlXzA0XzA1X0ZpbGxDb2xvcjsKKwkJfQorCQllbHNlIGlmIChyZWxhdGl2ZVZhbHVlID4gMC4zKSB7CisJCQlyZXRWYWx1ZSA9IHJhbmdlXzAzXzA0X0ZpbGxDb2xvcjsKKwkJfQorCQllbHNlIGlmIChyZWxhdGl2ZVZhbHVlID4gMC4yKSB7CisJCQlyZXRWYWx1ZSA9IHJhbmdlXzAyXzAzX0ZpbGxDb2xvcjsKKwkJfQorCQllbHNlIGlmIChyZWxhdGl2ZVZhbHVlID4gMC4xKSB7CisJCQlyZXRWYWx1ZSA9IHJhbmdlXzAxXzAyX0ZpbGxDb2xvcjsKKwkJfQorCQllbHNlIGlmIChyZWxhdGl2ZVZhbHVlID4gWkVST19SRUxBVElWRV9WQUxVRV9USFJFU0hPTEQpIHsKKwkJCXJldFZhbHVlID0gcmFuZ2VfMF8wMV9GaWxsQ29sb3I7CisJCX0KKwkJZWxzZSBpZiAocmVsYXRpdmVWYWx1ZSA8PSBaRVJPX1JFTEFUSVZFX1ZBTFVFX1RIUkVTSE9MRCkgeworCQkJcmV0VmFsdWUgPSB6ZXJvX0ZpbGxDb2xvcjsKKwkJfQorCisJCXJldHVybiByZXRWYWx1ZTsKKwl9IC8vIGdldENvbG9yRm9yUmVsYXRpdmVWYWx1ZQorCQorCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS51aS5hZGFwdGVycy5jb2xvci5Db2xvclByb3ZpZGVyQWRhcHRlciNpc0FkYXB0ZXJGb3JUeXBlKGphdmEubGFuZy5PYmplY3QpCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIGJvb2xlYW4gaXNBZGFwdGVyRm9yVHlwZShPYmplY3QgdHlwZSkgeworCQlyZXR1cm4gdHlwZSA9PSBSZWxhdGl2ZVZhbHVlQ29sb3JQcm92aWRlci5jbGFzczsKKwl9IC8vIGlzQWRhcHRlckZvclR5cGUKKwkKKwkvKioKKwkgKiBUaGUgbWV0aG9kIHdpbGwgY29udmVydCB0aGUgUkdCIHN0cmluZyBpbnRvIHtAbGluayBDb2xvcn0KKwkgKiBAcGFyYW0gcmdiU3RyaW5nIHRoZSBSR0Igc3RyaW5nCisJICogQHJldHVybiB0aGUgbWF0Y2hpbmcge0BsaW5rIENvbG9yfQorCSAqLyAKKwlwcml2YXRlIENvbG9yIGdldENvbG9yRnJvbVN0cmluZyhmaW5hbCBTdHJpbmcgcmdiU3RyaW5nKSB7CisJCWlmIChyZ2JTdHJpbmcuZXF1YWxzKCIiKSkgeworCQkJcmV0dXJuIGRldmljZS5nZXRTeXN0ZW1Db2xvcihTV1QuQ09MT1JfQkxBQ0spOworCQl9CisJCVJHQiByZ2IgPSBTdHJpbmdDb252ZXJ0ZXIuYXNSR0IocmdiU3RyaW5nKTsKKwkJcmV0dXJuIG5ldyBDb2xvcihkZXZpY2UsIHJnYi5yZWQsIHJnYi5ncmVlbiwgcmdiLmJsdWUpOworCX0gLy8gZ2V0Q29sb3JGcm9tU3RyaW5nCisJCisJLyoqCisJICogVGhlIG1ldGhvZCB3aWxsIHVwZGF0ZSB0aGUgY29sb3JzIGZpZWxkcyBmb3IgdGhlIHZhbHVlIHJhbmdlcyBmcm9tIHRoZSBwcmVmZXJlbmNlcyBwYWdlLgorCSAqLworCXByaXZhdGUgdm9pZCB1cGRhdGVDb2xvcnNGcm9tUHJlZmVyZW5jZXMoKSB7CisJCWZpbmFsIFByZWZlcmVuY2VzIHByZWZzID0gQWN0aXZhdG9yLmdldERlZmF1bHQoKS5nZXRQbHVnaW5QcmVmZXJlbmNlcygpOworCQltYXhfRmlsbENvbG9yID0gZ2V0Q29sb3JGcm9tU3RyaW5nKHByZWZzLmdldFN0cmluZyhSZWxhdGl2ZVZhbHVlQ29sb3JQcmVmZXJlbmNlcy5GT1JFR1JPVU5EX0NPTE9SX01BWElNVU1fUkVMQVRJVkVfVkFMVUVfSUQpKTsKKwkKKwkJcmFuZ2VfMDlfMV9GaWxsQ29sb3IgPSBnZXRDb2xvckZyb21TdHJpbmcocHJlZnMuZ2V0U3RyaW5nKFJlbGF0aXZlVmFsdWVDb2xvclByZWZlcmVuY2VzLkZPUkVHUk9VTkRfQ09MT1JfUkFOR0VfMTBfSUQpKTsKKwkJcmFuZ2VfMDhfMDlfRmlsbENvbG9yID0gZ2V0Q29sb3JGcm9tU3RyaW5nKHByZWZzLmdldFN0cmluZyhSZWxhdGl2ZVZhbHVlQ29sb3JQcmVmZXJlbmNlcy5GT1JFR1JPVU5EX0NPTE9SX1JBTkdFXzlfSUQpKTsKKwkJcmFuZ2VfMDdfMDhfRmlsbENvbG9yID0gZ2V0Q29sb3JGcm9tU3RyaW5nKHByZWZzLmdldFN0cmluZyhSZWxhdGl2ZVZhbHVlQ29sb3JQcmVmZXJlbmNlcy5GT1JFR1JPVU5EX0NPTE9SX1JBTkdFXzhfSUQpKTsKKwkJcmFuZ2VfMDZfMDdfRmlsbENvbG9yID0gZ2V0Q29sb3JGcm9tU3RyaW5nKHByZWZzLmdldFN0cmluZyhSZWxhdGl2ZVZhbHVlQ29sb3JQcmVmZXJlbmNlcy5GT1JFR1JPVU5EX0NPTE9SX1JBTkdFXzdfSUQpKTsKKwkJcmFuZ2VfMDVfMDZfRmlsbENvbG9yID0gZ2V0Q29sb3JGcm9tU3RyaW5nKHByZWZzLmdldFN0cmluZyhSZWxhdGl2ZVZhbHVlQ29sb3JQcmVmZXJlbmNlcy5GT1JFR1JPVU5EX0NPTE9SX1JBTkdFXzZfSUQpKTsKKwkJcmFuZ2VfMDRfMDVfRmlsbENvbG9yID0gZ2V0Q29sb3JGcm9tU3RyaW5nKHByZWZzLmdldFN0cmluZyhSZWxhdGl2ZVZhbHVlQ29sb3JQcmVmZXJlbmNlcy5GT1JFR1JPVU5EX0NPTE9SX1JBTkdFXzVfSUQpKTsKKwkJcmFuZ2VfMDNfMDRfRmlsbENvbG9yID0gZ2V0Q29sb3JGcm9tU3RyaW5nKHByZWZzLmdldFN0cmluZyhSZWxhdGl2ZVZhbHVlQ29sb3JQcmVmZXJlbmNlcy5GT1JFR1JPVU5EX0NPTE9SX1JBTkdFXzRfSUQpKTsKKwkJcmFuZ2VfMDJfMDNfRmlsbENvbG9yID0gZ2V0Q29sb3JGcm9tU3RyaW5nKHByZWZzLmdldFN0cmluZyhSZWxhdGl2ZVZhbHVlQ29sb3JQcmVmZXJlbmNlcy5GT1JFR1JPVU5EX0NPTE9SX1JBTkdFXzNfSUQpKTsKKwkJcmFuZ2VfMDFfMDJfRmlsbENvbG9yID0gZ2V0Q29sb3JGcm9tU3RyaW5nKHByZWZzLmdldFN0cmluZyhSZWxhdGl2ZVZhbHVlQ29sb3JQcmVmZXJlbmNlcy5GT1JFR1JPVU5EX0NPTE9SX1JBTkdFXzJfSUQpKTsKKwkJcmFuZ2VfMF8wMV9GaWxsQ29sb3IgPSBnZXRDb2xvckZyb21TdHJpbmcocHJlZnMuZ2V0U3RyaW5nKFJlbGF0aXZlVmFsdWVDb2xvclByZWZlcmVuY2VzLkZPUkVHUk9VTkRfQ09MT1JfUkFOR0VfMV9JRCkpOworCQkKKwkJemVyb19GaWxsQ29sb3IgPSBnZXRDb2xvckZyb21TdHJpbmcocHJlZnMuZ2V0U3RyaW5nKFJlbGF0aXZlVmFsdWVDb2xvclByZWZlcmVuY2VzLkZPUkVHUk9VTkRfQ09MT1JfWkVST19SRUxBVElWRV9WQUxVRV9JRCkpOworCQlmb3JlZ3JvdW5kRmlsbENvbG9yID0gZ2V0Q29sb3JGcm9tU3RyaW5nKHByZWZzLmdldFN0cmluZyhNYXBzQ29sb3JzUHJlZmVyZW5jZVBhZ2UuRk9SRUdST1VORF9DT0xPUl9JRCkpOworCQliYWNrZ3JvdW5kRmlsbENvbG9yID0gZ2V0Q29sb3JGcm9tU3RyaW5nKHByZWZzLmdldFN0cmluZyhNYXBzQ29sb3JzUHJlZmVyZW5jZVBhZ2UuQkFDS0dST1VORF9DT0xPUl9JRCkpOworCX0gLy8gdXBkYXRlQ29sb3JzRnJvbVByZWZlcmVuY2VzCisJCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnVpLmFkYXB0ZXJzLmNvbG9yLkNvbG9yUHJvdmlkZXIjc2V0U2VsZWN0ZWREZWNvcmF0b3Iob3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLkRlY29yYXRvcikKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRTZWxlY3RlZERlY29yYXRvcihEZWNvcmF0b3Igc2VsZWN0ZWREZWNvcmF0b3IpIHsKKwkJdGhpcy5zZWxlY3RlZERlY29yYXRvciA9IHNlbGVjdGVkRGVjb3JhdG9yOworCX0gLy8gc2V0U2VsZWN0ZWREZWNvcmF0b3IKKwkKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0udWkuYWRhcHRlcnMuY29sb3IuQ29sb3JQcm92aWRlciNzZXRTZWxlY3RlZERlY29yYXRvcihvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuRGVjb3JhdG9yKQorCSAqLworCXB1YmxpYyB2b2lkIHNldFNlbGVjdGVkUG9wdWxhdGlvbklkZW50aWZpZXIoU3RyaW5nIHNlbGVjdGVkSWQpIHsKKwkJdGhpcy5zZWxlY3RlZFBvcHVsYXRpb25JZGVudGlmaWVyID0gc2VsZWN0ZWRJZDsKKwl9IC8vIHNldFNlbGVjdGVkRGVjb3JhdG9yCisJCisJCisJLyoqCisJICogTWV0aG9kIHdpbGwgc2V0IHRoZSB0YXJnZXQgb2JqZWN0IGF0IHRoZSBpbnN0YW5jZSBvZiB7QGxpbmsgUmVsYXRpdmVWYWx1ZVByb3ZpZGVyfS4KKwkgKiBAcGFyYW0gdGFyZ2V0IFRoZSBuZXcgdGFyZ2V0IG9iamVjdAorCSAqLworCXByb3RlY3RlZCB2b2lkIHNldFJWUFRhcmdldChOb3RpZmllciB0YXJnZXQpIHsKKwkJaWYgKHJ2cCA9PSBudWxsKSB7CisJCQlydnAgPSAoUmVsYXRpdmVWYWx1ZVByb3ZpZGVyQWRhcHRlcilSZWxhdGl2ZVZhbHVlUHJvdmlkZXJBZGFwdGVyRmFjdG9yeS5JTlNUQU5DRS5hZGFwdCh0YXJnZXQsIFJlbGF0aXZlVmFsdWVQcm92aWRlci5jbGFzcyk7CisJCX0KKwkJZWxzZSB7CisJCQlydnAuc2V0VGFyZ2V0KHRhcmdldCk7CisJCX0KKwl9IC8vIHNldFJWUFRhcmdldAorCQorCQorCS8qKgorCSAqIAorCSAqIEByZXR1cm4gdGhlIGN1cnJlbnQgZmlsbCBjb2xvcgorCSAqLworCXB1YmxpYyBDb2xvciBnZXRCYWNrZ3JvdW5kRmlsbENvbG9yKCkgeworCQlyZXR1cm4gYmFja2dyb3VuZEZpbGxDb2xvcjsKKwl9CisJCisJLyoqCisJICogCisJICogQHJldHVybgorCSAqLworCXB1YmxpYyBDb2xvciBnZXRGb3JlZ3JvdW5kRmlsbENvbG9yKCkgeworCQlyZXR1cm4gZm9yZWdyb3VuZEZpbGxDb2xvcjsKKwl9CisKKwkvKioKKwkgKiAKKwkgKiBAcmV0dXJuIHRoZSBjdXJyZW50IGFscGhhCisJICovCisJcHVibGljIGludCBnZXRBbHBoYSgpIHsKKwkJcmV0dXJuIGFscGhhOworCX0KKwkKK30gLy8gQWJzdHJhY3RSZWxhdGl2ZVZhbHVlQ29sb3JQcm92aWRlckFkYXB0ZXIKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvYWRhcHRlcnMvY29sb3IvQWJzdHJhY3RSZWxhdGl2ZVZhbHVlQ29sb3JQcm92aWRlckFkYXB0ZXJGYWN0b3J5LmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvYWRhcHRlcnMvY29sb3IvQWJzdHJhY3RSZWxhdGl2ZVZhbHVlQ29sb3JQcm92aWRlckFkYXB0ZXJGYWN0b3J5LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjk5ZDA4NwotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9hZGFwdGVycy9jb2xvci9BYnN0cmFjdFJlbGF0aXZlVmFsdWVDb2xvclByb3ZpZGVyQWRhcHRlckZhY3RvcnkuamF2YQpAQCAtMCwwICsxLDEzNCBAQAorLy8gQWJzdHJhY3RSZWxhdGl2ZVZhbHVlQ29sb3JQcm92aWRlckFkYXB0ZXJGYWN0b3J5LmphdmEKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS51aS5hZGFwdGVycy5jb2xvcjsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuY29uY3VycmVudC5Db3B5T25Xcml0ZUFycmF5TGlzdDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QcmVmZXJlbmNlczsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5BZGFwdGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkNvbXBvc2VhYmxlQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuQ29tcG9zZWRBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JdGVtUHJvcGVydHlEZXNjcmlwdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5EZWNvcmF0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS51aS5BY3RpdmF0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlOworCisvKioKKyAqIFRoaXMgaXMgYW4gYWJzdHJhY3QgY2xhc3MgdGhhdCBSZWxhdGl2ZSBWYWx1ZSBDb2xvciBQcm92aWRlciBBZGFwdGVyIEZhY3RvcmllcyBzaG91bGQgZXh0ZW5kLgorICogSXQgaG9sZHMgdGhlIGNvbW1vbiBpbmZvcm1hdGlvbiBmb3IgYWxsIGNvbG9yIHByb3ZpZGVycyBhbmQgaGFzIGZldyBhYnN0cmFjdCBtZXRob2RzCisgKiB0aGF0IHRoZSBjb25jcmV0ZSBjbGFzcyBzaG91bGQgb3ZlcnJpZGUuCisgKi8KK3B1YmxpYyBhYnN0cmFjdCBjbGFzcyBBYnN0cmFjdFJlbGF0aXZlVmFsdWVDb2xvclByb3ZpZGVyQWRhcHRlckZhY3RvcnkgCisJZXh0ZW5kcyBBYnN0cmFjdENvbG9yUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSB7CisJCisJLyoqCisJICogVGhpcyBpcyB0aGUgcHJvcGVydGllcyBjb21wb3NpdGUgdGhhdCB3aWxsIGJlIGNvbnRyaWJ1dGVkIHRvIHRoZSB2aWV3CisJICovCisJcHJvdGVjdGVkIENvbXBvc2l0ZSBwcm9wZXJ0aWVzQ29tcG9zaXRlOworCS8qKgorCSAqIEEgbGlzdCBvZiB7QGxpbmsgUHJvcGVydHlTZWxlY3Rpb25MaXN0ZW5lcn1zIHRvIGJlIG5vdGlmaWVkIGFib3V0CisJICogcHJvcGVydHkgc2VsZWN0aW9uIGV2ZW50cworCSAqLworCXByaXZhdGUgZmluYWwgTGlzdDxQcm9wZXJ0eVNlbGVjdGlvbkxpc3RlbmVyPiBwcm9wZXJ0eVNlbGVjdGlvbkxpc3RlbmVycyA9IG5ldyBDb3B5T25Xcml0ZUFycmF5TGlzdDxQcm9wZXJ0eVNlbGVjdGlvbkxpc3RlbmVyPigpOworCS8qKgorCSAqIFRoZSBjdXJyZW50bHkgc2VsZWN0ZWQge0BsaW5rIEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3J9CisJICovCisJcHJvdGVjdGVkIEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3Igc2VsZWN0ZWRQcm9wZXJ0eSA9IG51bGw7CisJCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnVpLmFkYXB0ZXJzLmNvbG9yLkFic3RyYWN0Q29sb3JQcm92aWRlckFkYXB0ZXJGYWN0b3J5I2lzRmFjdG9yeUZvclR5cGUoamF2YS5sYW5nLk9iamVjdCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgYm9vbGVhbiBpc0ZhY3RvcnlGb3JUeXBlKE9iamVjdCB0eXBlKSB7CisJCXJldHVybiB0eXBlID09IFJlbGF0aXZlVmFsdWVDb2xvclByb3ZpZGVyLmNsYXNzOworCX0gLy8gaXNGYWN0b3J5Rm9yVHlwZQorCQorCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLnV0aWwuR3JhcGhBZGFwdGVyRmFjdG9yeSNjcmVhdGVHcmFwaEFkYXB0ZXIoKQorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZUdyYXBoQWRhcHRlcigpIHsJCQorCQlyZXR1cm4gY3JlYXRlTm9kZUFkYXB0ZXIoKTsKKwl9IC8vIGNyZWF0ZUdyYXBoQWRhcHRlcgorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5Db21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5I2dldFJvb3RBZGFwdGVyRmFjdG9yeSgpCisJICovCisJcHVibGljIENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnkgZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCkgeworCQkvLyBUT0RPIEF1dG8tZ2VuZXJhdGVkIG1ldGhvZCBzdHViCisJCXJldHVybiBudWxsOworCX0gLy8gZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5CisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkNvbXBvc2VhYmxlQWRhcHRlckZhY3Rvcnkjc2V0UGFyZW50QWRhcHRlckZhY3Rvcnkob3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuQ29tcG9zZWRBZGFwdGVyRmFjdG9yeSkKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRQYXJlbnRBZGFwdGVyRmFjdG9yeShAU3VwcHJlc3NXYXJuaW5ncygidW51c2VkIikKKwlDb21wb3NlZEFkYXB0ZXJGYWN0b3J5IHBhcmVudCkgeworCQkvLyBUT0RPIEF1dG8tZ2VuZXJhdGVkIG1ldGhvZCBzdHViCisJfSAvLyBzZXRQYXJlbnRBZGFwdGVyRmFjdG9yeQorCQorCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS51aS5hZGFwdGVycy5jb2xvci5JQ29sb3JQcm92aWRlckFkYXB0ZXJGYWN0b3J5I2NyZWF0ZUNvbG9yc0xlZ2VuZENvbXBvc2l0ZShvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGUsIGludCkKKwkgKi8KKwlwdWJsaWMgYWJzdHJhY3QgQ29tcG9zaXRlIGNyZWF0ZUNvbG9yc0xlZ2VuZENvbXBvc2l0ZShDb21wb3NpdGUgcGFyZW50LCBpbnQgc3R5bGUpOworCQorCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS51aS5hZGFwdGVycy5jb2xvci5JQ29sb3JQcm92aWRlckFkYXB0ZXJGYWN0b3J5I2dldFByb3BlcnRpZXNDb21wb3NpdGUoKQorCSAqLworCXB1YmxpYyBDb21wb3NpdGUgZ2V0UHJvcGVydGllc0NvbXBvc2l0ZSgpIHsKKwkJcmV0dXJuIHByb3BlcnRpZXNDb21wb3NpdGU7CisJfSAvLyBnZXRQcm9wZXJ0aWVzQ29tcG9zaXRlCisJCisJcHJvdGVjdGVkIFN0cmluZyBnZXRQcmVmZXJlbmNlVmFsdWUoZmluYWwgU3RyaW5nIHByZWZJZCkgeworCQlmaW5hbCBQcmVmZXJlbmNlcyBwcmVmcyA9IEFjdGl2YXRvci5nZXREZWZhdWx0KCkuZ2V0UGx1Z2luUHJlZmVyZW5jZXMoKTsKKwkJcmV0dXJuIHByZWZzLmdldFN0cmluZyhwcmVmSWQpOworCX0gLy8gZ2V0UHJlZmVyZW5jZVZhbHVlCisJCisJLyoqCisJICogVGhpcyBpbnRlcmZhY2UgaXMgaW1wbGVtZW50ZWQgYnkgY2xhc3NlcyB0aGF0IHdpc2ggdG8gYmUgbm90aWZpZWQKKwkgKiB3aGVuZXZlciBhIHByb3BlcnR5IGlzIHNlbGVjdGVkIGluIHRoaXMgd2lkZ2V0LgorCSAqLworCXB1YmxpYyBpbnRlcmZhY2UgUHJvcGVydHlTZWxlY3Rpb25MaXN0ZW5lciB7CisJCS8qKgorCQkgKiBAcGFyYW0gc2VsZWN0ZWRQcm9wZXJ0eQorCQkgKi8KKwkJdm9pZCBwcm9wZXJ0eVNlbGVjdGVkKEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3Igc2VsZWN0ZWRQcm9wZXJ0eSk7CisJfSAvLyBQcm9wZXJ0eVNlbGVjdGlvbkxpc3RlbmVyCisJCisJLyoqCisJICogQHBhcmFtIGxpc3RlbmVyCisJICovCisJcHVibGljIHZvaWQgYWRkUHJvcGVydHlTZWxlY3Rpb25MaXN0ZW5lcigKKwkJCWZpbmFsIFByb3BlcnR5U2VsZWN0aW9uTGlzdGVuZXIgbGlzdGVuZXIpIHsKKwkJcHJvcGVydHlTZWxlY3Rpb25MaXN0ZW5lcnMuYWRkKGxpc3RlbmVyKTsKKwl9IC8vIGFkZFByb3BlcnR5U2VsZWN0aW9uTGlzdGVuZXIKKworCS8qKgorCSAqIEBwYXJhbSBsaXN0ZW5lcgorCSAqLworCXB1YmxpYyB2b2lkIHJlbW92ZVByb3BlcnR5U2VsZWN0aW9uTGlzdGVuZXIoCisJCQlmaW5hbCBQcm9wZXJ0eVNlbGVjdGlvbkxpc3RlbmVyIGxpc3RlbmVyKSB7CisJCXByb3BlcnR5U2VsZWN0aW9uTGlzdGVuZXJzLnJlbW92ZShsaXN0ZW5lcik7CisJfSAvLyByZW1vdmVQcm9wZXJ0eVNlbGVjdGlvbkxpc3RlbmVyCisKKwkvKioKKwkgKiBAcGFyYW0gc2VsZWN0ZWRQcm9wZXJ0eQorCSAqLworCXB1YmxpYyB2b2lkIGZpcmVQcm9wZXJ0eVNlbGVjdGlvbkxpc3RlbmVyKEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3Igc2VsZWN0ZWRQcm9wZXJ0eSkgeworCQlmb3IgKGZpbmFsIFByb3BlcnR5U2VsZWN0aW9uTGlzdGVuZXIgbGlzdGVuZXIgOiBwcm9wZXJ0eVNlbGVjdGlvbkxpc3RlbmVycykgeworCQkJbGlzdGVuZXIucHJvcGVydHlTZWxlY3RlZChzZWxlY3RlZFByb3BlcnR5KTsKKwkJfSAvLyBmb3IgZWFjaCBQcm9wZXJ0eVNlbGVjdGlvbkxpc3RlbmVyCisJfSAvLyBmaXJlUHJvcGVydHlTZWxlY3Rpb25FdmVudAorCQorfSAvLyBBYnN0cmFjdFJlbGF0aXZlVmFsdWVDb2xvclByb3ZpZGVyQWRhcHRlckZhY3RvcnkKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvYWRhcHRlcnMvY29sb3IvQXJlYVJlbGF0aXZlVmFsdWVDb2xvclByb3ZpZGVyLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvYWRhcHRlcnMvY29sb3IvQXJlYVJlbGF0aXZlVmFsdWVDb2xvclByb3ZpZGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTYxODQ2OAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9hZGFwdGVycy9jb2xvci9BcmVhUmVsYXRpdmVWYWx1ZUNvbG9yUHJvdmlkZXIuamF2YQpAQCAtMCwwICsxLDIyIEBACisvLyBBcmVhUmVsYXRpdmVWYWx1ZUNvbG9yUHJvdmlkZXIuamF2YQorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnVpLmFkYXB0ZXJzLmNvbG9yOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCisvKioKKyAqIFRoaXMgaW50ZXJmYWNlIGlzIGltcGxlbWVudGVkIGJ5IGNsYXNzZXMgdGhhdCB3aWxsIHByb3ZpZGUgYW4gYXJlYSB2YWx1ZSBmb3IgYQorICogc3BlY2lmaWMgYWRhcHRlZCBvYmplY3QuCisgKi8KK3B1YmxpYyBpbnRlcmZhY2UgQXJlYVJlbGF0aXZlVmFsdWVDb2xvclByb3ZpZGVyIGV4dGVuZHMgUmVsYXRpdmVWYWx1ZUNvbG9yUHJvdmlkZXIgeworCS8vTWFya2VyIGludGVyZmFjZQkKK30vLyBBcmVhUmVsYXRpdmVWYWx1ZUNvbG9yUHJvdmlkZXIKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9hZGFwdGVycy9jb2xvci9BcmVhUmVsYXRpdmVWYWx1ZUNvbG9yUHJvdmlkZXJBZGFwdGVyLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvYWRhcHRlcnMvY29sb3IvQXJlYVJlbGF0aXZlVmFsdWVDb2xvclByb3ZpZGVyQWRhcHRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNiMjM2NjQKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvYWRhcHRlcnMvY29sb3IvQXJlYVJlbGF0aXZlVmFsdWVDb2xvclByb3ZpZGVyQWRhcHRlci5qYXZhCkBAIC0wLDAgKzEsODggQEAKKy8vIEFyZWFSZWxhdGl2ZVZhbHVlQ29sb3JQcm92aWRlckFkYXB0ZXIuamF2YQorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnVpLmFkYXB0ZXJzLmNvbG9yOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOworaW1wb3J0IGphdmEudXRpbC5NYXA7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuVVJJOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5TVEVNVVJJOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5HcmFwaDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguTm9kZUxhYmVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLkFyZWFMYWJlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5BcmVhTGFiZWxWYWx1ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLm5vZGVzLlJlZ2lvbjsKKworLyoqCisgKiBUaGlzIGNsYXNzIGFkYXB0cyB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLk5vZGV9IG9iamVjdHMgdG8KKyAqIDxjb2RlPkFyZWFSZWxhdGl2ZVZhbHVlQ29sb3JQcm92aWRlcjwvY29kZT4gb2JqZWN0LgorICovCitwdWJsaWMgY2xhc3MgQXJlYVJlbGF0aXZlVmFsdWVDb2xvclByb3ZpZGVyQWRhcHRlciAKKwlleHRlbmRzIEFic3RyYWN0UmVsYXRpdmVWYWx1ZUNvbG9yUHJvdmlkZXJBZGFwdGVyIHsKKwkKKwlAU3VwcHJlc3NXYXJuaW5ncygidW51c2VkIikKKwlwcml2YXRlIHN0YXRpYyBNYXA8U3RyaW5nLCBEb3VibGU+IGFyZWFWYWx1ZU1hcCA9IG5ldyBIYXNoTWFwPFN0cmluZywgRG91YmxlPigpOworCQorCS8qKgorCSAqIENvbnN0cnVjdG9yCisJICovCisJcHVibGljIEFyZWFSZWxhdGl2ZVZhbHVlQ29sb3JQcm92aWRlckFkYXB0ZXIoKSB7CisJCXN1cGVyKCk7CisJfSAvLyBBcmVhUmVsYXRpdmVWYWx1ZUNvbG9yUHJvdmlkZXJBZGFwdGVyCisJCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnVpLmFkYXB0ZXJzLmNvbG9yLkFic3RyYWN0UmVsYXRpdmVWYWx1ZUNvbG9yUHJvdmlkZXJBZGFwdGVyI2dldFJlbGF0aXZlVmFsdWUoKQorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBmbG9hdCBnZXRSZWxhdGl2ZVZhbHVlKCkgeworCQkKKwkJLy9kb3VibGUgbm9kZUFyZWEgPSBnZXRBcmVhKCk7CisJCQorCQlHcmFwaCBncmFwaCA9IHNlbGVjdGVkRGVjb3JhdG9yLmdldEdyYXBoKCk7CisJCWZpbmFsIFVSSSBhcmVhTGFiZWxVUkkgPSBTVEVNVVJJLmNyZWF0ZVVSSShBcmVhTGFiZWwuVVJJX1RZUEVfQVJFQV9MQUJFTF9TRUdNRU5UKTsKKwkJTWFwPFN0cmluZywgRG91YmxlPiB0ZW1wQXJlYVZhbHVlTWFwID0gbmV3IEhhc2hNYXA8U3RyaW5nLCBEb3VibGU+KCk7CisJCWZvciAoVVJJIGxhYmVsVXJpIDogZ3JhcGguZ2V0Tm9kZUxhYmVscygpLmtleVNldCgpKSB7CisJCQlpZiAobGFiZWxVcmkudG9TdHJpbmcoKS5zdGFydHNXaXRoKGFyZWFMYWJlbFVSSS50b1N0cmluZygpKSkgeworCQkJCVN0cmluZyBpbmRleFVyaSA9IGxhYmVsVXJpLnNlZ21lbnQoMikgKyAiLyIgKyBsYWJlbFVyaS5zZWdtZW50KDMpOworCQkJCWlmICh0ZW1wQXJlYVZhbHVlTWFwLmNvbnRhaW5zS2V5KGluZGV4VXJpKSkgeworCQkJCQlEb3VibGUgcHJldlZhbHVlID0gdGVtcEFyZWFWYWx1ZU1hcC5yZW1vdmUoaW5kZXhVcmkpOworCQkJCQlBcmVhTGFiZWwgYXJlYUxhYmVsID0gKEFyZWFMYWJlbClncmFwaC5nZXROb2RlTGFiZWwobGFiZWxVcmkpOworCQkJCQlEb3VibGUgbmV3VmFsdWUgPSBuZXcgRG91YmxlKHByZXZWYWx1ZS5kb3VibGVWYWx1ZSgpICsgYXJlYUxhYmVsLmdldEN1cnJlbnRBcmVhVmFsdWUoKS5nZXRBcmVhKCkpOworCQkJCQl0ZW1wQXJlYVZhbHVlTWFwLnB1dChpbmRleFVyaSwgbmV3VmFsdWUpOworCQkJCX0KKwkJCX0KKwkJfQorCQkJCQorCQlyZXR1cm4gMC43ZjsKKwkJCisJfSAvLyBnZXRSZWxhdGl2ZVZhbHVlCisJCisJQFN1cHByZXNzV2FybmluZ3MoInVudXNlZCIpCisJcHJpdmF0ZSBkb3VibGUgZ2V0QXJlYSgpIHsKKwkJaWYgKCEoZ2V0VGFyZ2V0KCkgaW5zdGFuY2VvZiBSZWdpb24pKSB7CisJCQlyZXR1cm4gLTE7CisJCX0KKwkJCisJCWRvdWJsZSByZXRWYWwgPSAtMTsKKwkJUmVnaW9uIHJlZ2lvbiA9IChSZWdpb24pZ2V0VGFyZ2V0KCk7CisJCWZvciAoTm9kZUxhYmVsIG5vZGVMYWJlbCA6IHJlZ2lvbi5nZXRMYWJlbHMoKSkgeworCQkJaWYgKG5vZGVMYWJlbCBpbnN0YW5jZW9mIEFyZWFMYWJlbCkgeworCQkJCUFyZWFMYWJlbCBsYWJlbCA9IChBcmVhTGFiZWwpbm9kZUxhYmVsOworCQkJCUFyZWFMYWJlbFZhbHVlIHZhbHVlID0gKEFyZWFMYWJlbFZhbHVlKWxhYmVsLmdldEN1cnJlbnRWYWx1ZSgpOworCQkJCXJldFZhbCA9IHZhbHVlLmdldEFyZWEoKTsKKwkJCX0KKwkJfQorCQlyZXR1cm4gcmV0VmFsOworCX0gLy8gZ2V0UG9wdWxhdGlvbgorCQorfSAvLyBBcmVhUmVsYXRpdmVWYWx1ZUNvbG9yUHJvdmlkZXJBZGFwdGVyCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvYWRhcHRlcnMvY29sb3IvQXJlYVJlbGF0aXZlVmFsdWVDb2xvclByb3ZpZGVyQWRhcHRlckZhY3RvcnkuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9hZGFwdGVycy9jb2xvci9BcmVhUmVsYXRpdmVWYWx1ZUNvbG9yUHJvdmlkZXJBZGFwdGVyRmFjdG9yeS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY1MjA2YmIKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvYWRhcHRlcnMvY29sb3IvQXJlYVJlbGF0aXZlVmFsdWVDb2xvclByb3ZpZGVyQWRhcHRlckZhY3RvcnkuamF2YQpAQCAtMCwwICsxLDg0IEBACisvLyBBcmVhUmVsYXRpdmVWYWx1ZUNvbG9yUHJvdmlkZXJBZGFwdGVyRmFjdG9yeS5qYXZhCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0udWkuYWRhcHRlcnMuY29sb3I7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuQWRhcHRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuRGVjb3JhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5TV1Q7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5Sb3dMYXlvdXQ7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkxhYmVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkxheW91dDsKKworLyoqCisgKiBUaGlzIGZhY3RvcnkgY3JlYXRlIGFkYXB0ZXJzIHRoYXQgYWRhcHQKKyAqIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguTm9kZX1zIHRvCisgKiB7QGxpbmsgQXJlYVJlbGF0aXZlVmFsdWVDb2xvclByb3ZpZGVyfXMuCisgKi8KK3B1YmxpYyBjbGFzcyBBcmVhUmVsYXRpdmVWYWx1ZUNvbG9yUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSBleHRlbmRzCisJCUFic3RyYWN0UmVsYXRpdmVWYWx1ZUNvbG9yUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSB7CisKKwkvKioKKwkgKiBDb25zdHJ1Y3RvcgorCSAqLworCXB1YmxpYyBBcmVhUmVsYXRpdmVWYWx1ZUNvbG9yUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSgpIHsKKwkJc3VwZXIoKTsKKwl9IC8vIEFyZWFSZWxhdGl2ZVZhbHVlQ29sb3JQcm92aWRlckFkYXB0ZXJGYWN0b3J5CisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC51dGlsLkdyYXBoQWRhcHRlckZhY3RvcnkjY3JlYXRlTm9kZUFkYXB0ZXIoKQorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZU5vZGVBZGFwdGVyKCkgeworCQlmaW5hbCBBcmVhUmVsYXRpdmVWYWx1ZUNvbG9yUHJvdmlkZXJBZGFwdGVyIGFkYXB0ZXIgPSBuZXcgQXJlYVJlbGF0aXZlVmFsdWVDb2xvclByb3ZpZGVyQWRhcHRlcigpOworCQlyZXR1cm4gYWRhcHRlcjsKKwl9IC8vIGNyZWF0ZU5vZGVBZGFwdGVyCisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0udWkuYWRhcHRlcnMuY29sb3IuQWJzdHJhY3RSZWxhdGl2ZVZhbHVlQ29sb3JQcm92aWRlckFkYXB0ZXJGYWN0b3J5I2lzRmFjdG9yeUZvclR5cGUoamF2YS5sYW5nLk9iamVjdCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgYm9vbGVhbiBpc0ZhY3RvcnlGb3JUeXBlKGZpbmFsIE9iamVjdCB0eXBlKSB7CisJCXJldHVybiB0eXBlID09IEFyZWFSZWxhdGl2ZVZhbHVlQ29sb3JQcm92aWRlci5jbGFzczsKKwl9IC8vIGlzRmFjdG9yeUZvclR5cGUKKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS51aS5hZGFwdGVycy5jb2xvci5JQ29sb3JQcm92aWRlckFkYXB0ZXJGYWN0b3J5I2NyZWF0ZVByb3BlcnRpZXNDb21wb3NpdGUob3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlLCBpbnQsIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5EZWNvcmF0b3IpCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIENvbXBvc2l0ZSBjcmVhdGVQcm9wZXJ0aWVzQ29tcG9zaXRlKGZpbmFsIENvbXBvc2l0ZSBwYXJlbnQsIEBTdXBwcmVzc1dhcm5pbmdzKCJ1bnVzZWQiKSBmaW5hbCBpbnQgc3R5bGUsIEBTdXBwcmVzc1dhcm5pbmdzKCJ1bnVzZWQiKSBmaW5hbCBEZWNvcmF0b3Igc2VsZWN0ZWREZWNvcmF0b3IsIGZpbmFsIFN0cmluZyBwb3B1bGF0aW9uSWRlbnRpZmllcikKKwl7CisJCWZpbmFsIENvbXBvc2l0ZSBjb21wb3NpdGUgPSBuZXcgQ29tcG9zaXRlKHBhcmVudCwgU1dULk5PTkUpOworCQlmaW5hbCBMYXlvdXQgbGF5b3V0ID0gbmV3IFJvd0xheW91dCgpOworCQljb21wb3NpdGUuc2V0TGF5b3V0KGxheW91dCk7CisJCWZpbmFsIExhYmVsIGxhYmVsID0gbmV3IExhYmVsKGNvbXBvc2l0ZSwgU1dULk5PTkUpOworCQlsYWJlbC5zZXRUZXh0KCJUaGlzIGNvbG9yIHByb3ZpZGVyIGlzIG5vdCBpbXBsZW1lbnRlZCB5ZXQiKTsKKwkJcmV0dXJuIGNvbXBvc2l0ZTsKKwl9IC8vIGNyZWF0ZVByb3BlcnRpZXNDb21wb3NpdGUKKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS51aS5hZGFwdGVycy5jb2xvci5BYnN0cmFjdFJlbGF0aXZlVmFsdWVDb2xvclByb3ZpZGVyQWRhcHRlckZhY3RvcnkjY3JlYXRlQ29sb3JzTGVnZW5kQ29tcG9zaXRlKG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZSwKKwkgKiAgICAgIGludCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgQ29tcG9zaXRlIGNyZWF0ZUNvbG9yc0xlZ2VuZENvbXBvc2l0ZShmaW5hbCBDb21wb3NpdGUgcGFyZW50LAorCQkJZmluYWwgaW50IHN0eWxlKSB7CisJCWZpbmFsIENvbG9yc0xlZ2VuZENvbXBvc2l0ZSBjb2xvcnNMZWdlbmRDb21wb3NpdGUgPSBuZXcgQ29sb3JzTGVnZW5kQ29tcG9zaXRlKAorCQkJCXBhcmVudCwgc3R5bGUpOworCQljb2xvcnNMZWdlbmRDb21wb3NpdGUuYWRkQ29sb3JFbnRyeSgKKwkJCQlSZWxhdGl2ZVZhbHVlQ29sb3JQcmVmZXJlbmNlcy5GT1JFR1JPVU5EX0NPTE9SX1JBTkdFXzRfSUQsCisJCQkJIkFyZWEgcmVsYXRpdmUgdmFsdWUiKTsKKwkJcmV0dXJuIGNvbG9yc0xlZ2VuZENvbXBvc2l0ZTsKKwl9IC8vIGNyZWF0ZUNvbG9yc0xlZ2VuZENvbXBvc2l0ZQorCit9IC8vIEFyZWFSZWxhdGl2ZVZhbHVlQ29sb3JQcm92aWRlckFkYXB0ZXJGYWN0b3J5CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvYWRhcHRlcnMvY29sb3IvQ29sb3JQcm92aWRlci5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL2FkYXB0ZXJzL2NvbG9yL0NvbG9yUHJvdmlkZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZTEwOTUwCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL2FkYXB0ZXJzL2NvbG9yL0NvbG9yUHJvdmlkZXIuamF2YQpAQCAtMCwwICsxLDU4IEBACisvLyBDb2xvclByb3ZpZGVyLmphdmEKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS51aS5hZGFwdGVycy5jb2xvcjsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuRGVjb3JhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ncmFwaGljcy5Db2xvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZ3JhcGhpY3MuRGV2aWNlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ncmFwaGljcy5HQzsKKworLyoqCisgKiBUaGUgaW50ZXJmYWNlIHdpbGwgYmUgZXh0ZW5kZWQgYnkgbW9yZSBzcGVjaWZpYyBpbnRlcmZhY2VzIHRoYXQgcHJvdmlkZXMgY29sb3JzCisgKiBtZXRob2RzLgorICovCitwdWJsaWMgaW50ZXJmYWNlIENvbG9yUHJvdmlkZXIgeworCS8qKgorCSAqIFRoZSBtZXRob2Qgd2lsbCByZXR1cm4gYSB7QGxpbmsgQ29sb3J9IG9iamVjdCB0aGF0IG1hdGNoZXMgc29tZSBhZGFwdGVkIG9iamVjdAorCSAqIEBwYXJhbSBkZXZpY2UgQSBkZXZpY2UgZm9yIGNyZWF0ZWQgY29sb3JzCisJICogQHJldHVybiBhIHtAbGluayBDb2xvcn0gb2JqZWN0CisJICovCisJcHVibGljIENvbG9yIGdldENvbG9yKERldmljZSBkZXZpY2UpOworCS8qKgorCSAqIFRoZSBtZXRob2Qgd2lsbCB1cGRhdGUgdGhlIHNwZWNpZmllZCB7QGxpbmsgR0N9IG9iamVjdCB3aXRoIHZhbHVlcworCSAqIHRoYXQgbWF0Y2hlcyB0aGUgYWRhcHRlZCBvYmplY3QgKGxpa2UgZmlsbCBjb2xvcikuCisJICogCisJICogQHBhcmFtIGdjVG9VcGRhdGUge0BsaW5rIEdDfSBvYmplY3QgdG8gdXBkYXRlCisJICovCisJcHVibGljIHZvaWQgdXBkYXRlR0MoR0MgZ2NUb1VwZGF0ZSk7CisJLyoqCisJICogVGhlIG1ldGhvZCB3aWxsIHVwZGF0ZSB0aGUgc3BlY2lmaWVkIHtAbGluayBHQ30gb2JqZWN0IHdpdGggdmFsdWVzCisJICogdGhhdCBtYXRjaGVzIHRoZSBhZGFwdGVkIG9iamVjdCAobGlrZSBmaWxsIGNvbG9yKS4KKwkgKiAKKwkgKiBAcGFyYW0gZ2NUb1VwZGF0ZSB7QGxpbmsgR0N9IG9iamVjdCB0byB1cGRhdGUKKwkgKiBAcGFyYW0gZ2FpbkZhY3RvciBHYWluIGZhY3RvcgorCSAqIEBwYXJhbSB1c2VMb2dTY2FsaW5nIFVzZSBsb2dhcml0aG1pYyBzY2FsaW5nPworCSAqLworCXB1YmxpYyB2b2lkIHVwZGF0ZUdDKEdDIGdjVG9VcGRhdGUsIGZsb2F0IGdhaW5GYWN0b3IsIGJvb2xlYW4gdXNlTG9nU2NhbGluZyk7CisJLyoqCisJICogVGhlIG1ldGhvZCB3aWxsIHNldCB0aGUgc2VsZWN0ZWQge0BsaW5rIERlY29yYXRvcn0uCisJICogQHBhcmFtIHNlbGVjdGVkRGVjb3JhdG9yIFRoZSBzZWxlY3RlZCBkZWNvcmF0b3IKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRTZWxlY3RlZERlY29yYXRvcihmaW5hbCBEZWNvcmF0b3Igc2VsZWN0ZWREZWNvcmF0b3IpOworCS8qKgorCSAqIFRoZSBtZXRob2Qgd2lsbCBzZXQgdGhlIHBvcHVsYXRpb24gbW9kZWwKKwkgKiBAcGFyYW0gc2VsZWN0ZWRQb3B1bGF0aW9uSWQgVGhlIHNlbGVjdGVkIHBvcG91bGF0aW9uIGlkCisJICovCisJcHVibGljIHZvaWQgc2V0U2VsZWN0ZWRQb3B1bGF0aW9uSWRlbnRpZmllcihmaW5hbCBTdHJpbmcgc2VsZWN0ZWRQb3B1bGF0aW9uSWQpOworfQorLy8gQ29sb3JQcm92aWRlcgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9hZGFwdGVycy9jb2xvci9Db2xvclByb3ZpZGVyQWRhcHRlci5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL2FkYXB0ZXJzL2NvbG9yL0NvbG9yUHJvdmlkZXJBZGFwdGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjVjODAyMgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9hZGFwdGVycy9jb2xvci9Db2xvclByb3ZpZGVyQWRhcHRlci5qYXZhCkBAIC0wLDAgKzEsMzIgQEAKKy8vIENvbG9yUHJvdmlkZXJBZGFwdGVyLmphdmEKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS51aS5hZGFwdGVycy5jb2xvcjsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5pbXBsLkFkYXB0ZXJJbXBsOworCisvKioKKyAqIFRoaXMgaXMgYW4gYWJzdHJhY3QgY2xhc3MgdGhhdCBhbnkge0BsaW5rIENvbG9yUHJvdmlkZXJ9IGFkYXB0ZXIgc2hvdWxkIGV4dGVuZC4KKyAqLworcHVibGljIGFic3RyYWN0IGNsYXNzIENvbG9yUHJvdmlkZXJBZGFwdGVyIAorCWV4dGVuZHMgQWRhcHRlckltcGwgCisJaW1wbGVtZW50cyBDb2xvclByb3ZpZGVyIHsKKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuaW1wbC5BZGFwdGVySW1wbCNpc0FkYXB0ZXJGb3JUeXBlKGphdmEubGFuZy5PYmplY3QpCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIGJvb2xlYW4gaXNBZGFwdGVyRm9yVHlwZShPYmplY3QgdHlwZSkgeworCQlyZXR1cm4gdHlwZSA9PSBDb2xvclByb3ZpZGVyLmNsYXNzOworCX0gLy8gaXNBZGFwdGVyRm9yVHlwZQorCQorfSAvLyBDb2xvclByb3ZpZGVyQWRhcHRlcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL2FkYXB0ZXJzL2NvbG9yL0NvbG9yUHJvdmlkZXJBZGFwdGVyRmFjdG9yeS5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL2FkYXB0ZXJzL2NvbG9yL0NvbG9yUHJvdmlkZXJBZGFwdGVyRmFjdG9yeS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI5ZjEzMmYKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvYWRhcHRlcnMvY29sb3IvQ29sb3JQcm92aWRlckFkYXB0ZXJGYWN0b3J5LmphdmEKQEAgLTAsMCArMSw5NyBAQAorLy8gQ29sb3JQcm92aWRlckFkYXB0ZXJGYWN0b3J5LmphdmEKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS51aS5hZGFwdGVycy5jb2xvcjsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OworaW1wb3J0IGphdmEudXRpbC5MaXN0OworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuQ29tcG9zZWRBZGFwdGVyRmFjdG9yeTsKKworLyoqCisgKiBUaGlzIGlzIHRoZSBpbnRlcmZhY2Ugb2YgdGhlIGFkYXB0ZXIgZmFjdG9yeSB0aGF0IHdpbGwgYmUgdXNlZCBmb3IgcHJvdmlkaW5nCisgKiBjb2xvcnMuIFRoZSB7QGxpbmsgQ29sb3JQcm92aWRlckFkYXB0ZXJGYWN0b3J5fSBpcyBpbXBsZW1lbnRlZCBieSB0aGUKKyAqIHtAbGluayBDb2xvclByb3ZpZGVyQWRhcHRlckZhY3RvcnlJbXBsfSBjbGFzcyBhbmQgaXMgdGhlIHBhcmVudCBhZGFwdGVyCisgKiBmYWN0b3J5ICh7QGxpbmsgQ29tcG9zZWRBZGFwdGVyRmFjdG9yeX0pIGZvciBhbGwgdGhlIG90aGVyIGFkYXB0ZXIKKyAqIGZhY3Rvcmllcy4KKyAqIAorICogRmFjdG9yaWVzIHdpbGwgYmUgYWRkZWQgdG8gdGhpcyBjb21wb3NlZCBvYmplY3QgYnkgdXNpbmcgdGhlIEVjbGlwc2UKKyAqIGV4dGVuc2lvbiBwb2ludHMgbWVjaGFuaXNtIGZvciBleHRlbmRpbmcgcGx1Zy1pbnMuCisgKi8KK3B1YmxpYyBpbnRlcmZhY2UgQ29sb3JQcm92aWRlckFkYXB0ZXJGYWN0b3J5IHsKKwkvKioKKwkgKiBUaGlzIGlzIHRoZSBzaW5nbGV0b24gaW5zdGFuY2Ugb2YgdGhlIGZhY3RvcnkKKwkgKi8KKwlwdWJsaWMgQ29sb3JQcm92aWRlckFkYXB0ZXJGYWN0b3J5SW1wbCBJTlNUQU5DRSA9IG5ldyBDb2xvclByb3ZpZGVyQWRhcHRlckZhY3RvcnlJbXBsKCk7CisJCisJLyoqCisJICogVGhpcyBjbGFzcyBpcyB0aGUgaW1wbGVtZW50YXRpb24gb2YgdGhlCisJICoge0BsaW5rIENvbG9yUHJvdmlkZXJBZGFwdGVyRmFjdG9yeX0gaW50ZXJmYWNlLgorCSAqIAorCSAqIEBzZWUgQ29sb3JQcm92aWRlckFkYXB0ZXJGYWN0b3J5CisJICovCisJcHVibGljIGNsYXNzIENvbG9yUHJvdmlkZXJBZGFwdGVyRmFjdG9yeUltcGwgCisJCWV4dGVuZHMgQ29tcG9zZWRBZGFwdGVyRmFjdG9yeQorCQlpbXBsZW1lbnRzIENvbG9yUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSB7CisJCQorCQkvKioKKwkJICogTGlzdCBvZiBzdXBwb3J0ZWQgY29sb3IgcHJvdmlkZXJzCisJCSAqLworCQlwcm90ZWN0ZWQgZmluYWwgTGlzdDxDbGFzcz4gc3VwcG9ydGVkQ29sb3JQcm92aWRlcnMgPSBuZXcgQXJyYXlMaXN0PENsYXNzPigpOworCQkvKioKKwkJICogTGlzdCBvZiBzdXBwb3J0ZWQgY29sb3IgcHJvdmlkZXJzIG5hbWVzCisJCSAqLworCQlwcm90ZWN0ZWQgZmluYWwgTGlzdDxTdHJpbmc+IHN1cHBvcnRlZENvbG9yUHJvdmlkZXJzTmFtZXMgPSBuZXcgQXJyYXlMaXN0PFN0cmluZz4oKTsKKwkJCisJCS8qKgorCQkgKiBDb25zdHJ1Y3RvcgorCQkgKi8KKwkJcHJvdGVjdGVkIENvbG9yUHJvdmlkZXJBZGFwdGVyRmFjdG9yeUltcGwoKSB7CisJCQkvL05vdGhpbmcKKwkJfQorCisJCS8qKgorCQkgKiBBZGQgYSB7QGxpbmsgQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeX0gdG8gdGhpcyBjb21wb3NlZCBmYWN0b3J5LgorCQkgKiBAcGFyYW0gYWRhcHRlckZhY3RvcnkgVGhlIGFkYXB0ZXIgZmFjdG9yeSB0byBiZSBhZGRlZAorCQkgKiBAcGFyYW0gY29sb3JQcm92aWRlciBUaGUge0BsaW5rIENvbG9yUHJvdmlkZXJ9IGNsYXNzIAorCQkgKiBAcGFyYW0gZGlzcGxheU5hbWUgQSBkaXNwbGF5IG5hbWUgZm9yIHRoZSBhZGFwdGVyICh0byBiZSBhZGRlZCB0byB0aGUgVUkpCisJCSAqLworCQlwdWJsaWMgdm9pZCBhZGRBZGFwdGVyRmFjdG9yeShBZGFwdGVyRmFjdG9yeSBhZGFwdGVyRmFjdG9yeSwgQ2xhc3MgY29sb3JQcm92aWRlciwgU3RyaW5nIGRpc3BsYXlOYW1lKSB7CisJCQlzdXBwb3J0ZWRDb2xvclByb3ZpZGVycy5hZGQoY29sb3JQcm92aWRlcik7CisJCQlzdXBwb3J0ZWRDb2xvclByb3ZpZGVyc05hbWVzLmFkZChkaXNwbGF5TmFtZSk7CisJCQlzdXBlci5hZGRBZGFwdGVyRmFjdG9yeShhZGFwdGVyRmFjdG9yeSk7CisJCX0KKworCQkvKioKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5pbXBsLkFkYXB0ZXJGYWN0b3J5SW1wbCNpc0ZhY3RvcnlGb3JUeXBlKGphdmEubGFuZy5PYmplY3QpCisJCSAqLworCQlAT3ZlcnJpZGUKKwkJcHVibGljIGJvb2xlYW4gaXNGYWN0b3J5Rm9yVHlwZShmaW5hbCBPYmplY3QgdHlwZSkgeworCQkJcmV0dXJuIHR5cGUgPT0gQ29sb3JQcm92aWRlci5jbGFzczsKKwkJfSAvLyBpc0ZhY3RvcnlGb3JUeXBlCisKKwkJLyoqCisJCSAqIEByZXR1cm4gdGhlIHN1cHBvcnRlZENvbG9yUHJvdmlkZXJzCisJCSAqLworCQlwdWJsaWMgTGlzdDxDbGFzcz4gZ2V0U3VwcG9ydGVkQ29sb3JQcm92aWRlcnMoKSB7CisJCQlyZXR1cm4gc3VwcG9ydGVkQ29sb3JQcm92aWRlcnM7CisJCX0KKworCQkvKioKKwkJICogQHJldHVybiB0aGUgc3VwcG9ydGVkQ29sb3JQcm92aWRlcnNOYW1lcworCQkgKi8KKwkJcHVibGljIExpc3Q8U3RyaW5nPiBnZXRTdXBwb3J0ZWRDb2xvclByb3ZpZGVyc05hbWVzKCkgeworCQkJcmV0dXJuIHN1cHBvcnRlZENvbG9yUHJvdmlkZXJzTmFtZXM7CisJCX0KKwl9IC8vIENvbG9yUHJvdmlkZXJBZGFwdGVyRmFjdG9yeUltcGwKK30gLy8gQ29sb3JQcm92aWRlckFkYXB0ZXJGYWN0b3J5CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvYWRhcHRlcnMvY29sb3IvQ29sb3JTY2FsZUNvbXBvc2l0ZS5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL2FkYXB0ZXJzL2NvbG9yL0NvbG9yU2NhbGVDb21wb3NpdGUuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMzQzZmVlCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL2FkYXB0ZXJzL2NvbG9yL0NvbG9yU2NhbGVDb21wb3NpdGUuamF2YQpAQCAtMCwwICsxLDE4NyBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnVpLmFkYXB0ZXJzLmNvbG9yOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA3LCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGphdmEudGV4dC5EZWNpbWFsRm9ybWF0OworCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LlNXVDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuY3VzdG9tLkNMYWJlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZ3JhcGhpY3MuQ29sb3I7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5Gb3JtQXR0YWNobWVudDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QubGF5b3V0LkZvcm1EYXRhOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5sYXlvdXQuRm9ybUxheW91dDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QubGF5b3V0LkdyaWREYXRhOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Hcm91cDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5MYWJlbDsKKworLyoqCisgKiBUaGlzIGNsYXNzIGlzIHVzZWQgdG8gZGlzcGxheSBhICJsZWdlbmQiIHRoYXQgbWFwcyBjb2xvcnMgdG8gdmFsdWVzLgorICovCitwdWJsaWMgY2xhc3MgQ29sb3JTY2FsZUNvbXBvc2l0ZSBleHRlbmRzIENvbXBvc2l0ZSB7CisKKwlHcm91cCBzY2FsZUdyb3VwID0gbmV3IEdyb3VwKHRoaXMsIFNXVC5OT05FKTsKKwlDTGFiZWwgY29sb3JTY2FsZTsKKwkKKwlzdGF0aWMgZmluYWwgaW50IE5VTV9BWElTX0xBQkVMUyA9IDU7CisJTGFiZWxbXSB2YWx1ZVNjYWxlID0gbmV3IExhYmVsW05VTV9BWElTX0xBQkVMU107IC8vIDUgdmFsdWVzOworCXN0YXRpYyBmaW5hbCBpbnQgU0NBTEVfSEVJR0hUPTIwOworCXN0YXRpYyBmaW5hbCBpbnQgU0NBTEVfV0lEVEg9MTAwOworCS8vRGVjaW1hbEZvcm1hdCBiaWdGb3JtYXQgPSBuZXcgRGVjaW1hbEZvcm1hdCgiIzAuMCIpOworCURlY2ltYWxGb3JtYXQgc2NpRm9ybWF0ID0gbmV3IERlY2ltYWxGb3JtYXQoIjAuI0UwIik7CisJCisJYm9vbGVhbiB1c2VMb2dTY2FsZSA9IGZhbHNlOworCQorCXN0YXRpYyBmaW5hbCBpbnQgTlVNX1NURVBTPTU7CisJCisJLyoqCisJICogCisJICogQHBhcmFtIHBhcmVudAorCSAqIEBwYXJhbSBzYXR1cmF0ZWRDb2xvcgorCSAqIEBwYXJhbSBheGlzCisJICogQHBhcmFtIGxvZ1NjYWxlCisJICogQHBhcmFtIHN0eWxlCisJICogQHBhcmFtIGJhY2tHcm91bmQKKwkgKiBAcGFyYW0gdGV4dENvbG9yCisJICovCisJcHVibGljIENvbG9yU2NhbGVDb21wb3NpdGUoZmluYWwgQ29tcG9zaXRlIHBhcmVudCwgQ29sb3Igc2F0dXJhdGVkQ29sb3IsIGRvdWJsZVtdIGF4aXMsIGJvb2xlYW4gbG9nU2NhbGUsIGZpbmFsIGludCBzdHlsZSwgQ29sb3IgYmFja0dyb3VuZCwgQ29sb3IgdGV4dENvbG9yKSB7CisJCXN1cGVyKHBhcmVudCwgc3R5bGUpOworCQlzY2FsZUdyb3VwLnNldFRleHQoIlNjYWxlIik7CisJCWZpbmFsIEZvcm1MYXlvdXQgc2NhbGVMYXlvdXQgPSBuZXcgRm9ybUxheW91dCgpOworCQlzY2FsZUdyb3VwLnNldExheW91dChzY2FsZUxheW91dCk7CisJCQorCQljb2xvclNjYWxlID0gbmV3IENMYWJlbChzY2FsZUdyb3VwLCBTV1QuTEVGVCk7CisJCQorCQljb2xvclNjYWxlLnNldEJhY2tncm91bmQoYmFja0dyb3VuZCk7CisJCWNvbG9yU2NhbGUuc2V0Rm9yZWdyb3VuZCh0ZXh0Q29sb3IpOworCQljb2xvclNjYWxlLnNldExheW91dERhdGEobmV3IEdyaWREYXRhKEdyaWREYXRhLkZJTExfSE9SSVpPTlRBTCkpOworCQlmaW5hbCBGb3JtRGF0YSBzY2FsZURhdGEgPSBuZXcgRm9ybURhdGEoKTsKKwkJc2NhbGVEYXRhLnRvcCA9IG5ldyBGb3JtQXR0YWNobWVudCgwLCAwKTsKKwkJc2NhbGVEYXRhLmJvdHRvbSA9IG5ldyBGb3JtQXR0YWNobWVudCg1MCwgMCk7CisJCXNjYWxlRGF0YS5sZWZ0ID0gbmV3IEZvcm1BdHRhY2htZW50KDAsIDApOworCQlzY2FsZURhdGEucmlnaHQgPSBuZXcgRm9ybUF0dGFjaG1lbnQoMTAwLCAwKTsKKwkJY29sb3JTY2FsZS5zZXRMYXlvdXREYXRhKHNjYWxlRGF0YSk7CisJCS8vUG9pbnQgc1NpemUgPSBuZXcgUG9pbnQoU0NBTEVfV0lEVEgsIFNDQUxFX0hFSUdIVCk7CisJCS8vY29sb3JTY2FsZS5zZXRTaXplKHNTaXplKTsKKwkJCisJCSAgCisJICAgIGludCBsZWZ0TWFyZ2luID0gMDsKKwkgICAgaW50IHN0ZXAgPSAxMDAvTlVNX0FYSVNfTEFCRUxTOworCSAgICBmb3IgKGludCBpID0gMDsgaSA8IE5VTV9BWElTX0xBQkVMUzsgaSArKykgeworCSAgICAJdmFsdWVTY2FsZVtpXSA9IG5ldyBMYWJlbChzY2FsZUdyb3VwLCBTV1QuTEVGVCk7CisJICAgIAlmaW5hbCBGb3JtRGF0YSB2YWx1ZURhdGEgPSBuZXcgRm9ybURhdGEoKTsKKwkJCXZhbHVlRGF0YS50b3AgPSBuZXcgRm9ybUF0dGFjaG1lbnQoNTAsIDApOworCQkJdmFsdWVEYXRhLmJvdHRvbSA9IG5ldyBGb3JtQXR0YWNobWVudCgxMDAsIDApOworCQkJdmFsdWVEYXRhLmxlZnQgPSBuZXcgRm9ybUF0dGFjaG1lbnQobGVmdE1hcmdpbiwgMCk7CisJCQl2YWx1ZURhdGEucmlnaHQgPSBuZXcgRm9ybUF0dGFjaG1lbnQobGVmdE1hcmdpbitzdGVwLCAwKTsKKwkJCXZhbHVlU2NhbGVbaV0uc2V0TGF5b3V0RGF0YSh2YWx1ZURhdGEpOworCQkJdmFsdWVTY2FsZVtpXS5zZXRUZXh0KCIgIik7IC8vIFRFU1RJTkcKKwkJCWxlZnRNYXJnaW4gKz0gc3RlcDsKKwkJCXZhbHVlU2NhbGVbaV0uc2V0QmFja2dyb3VuZChiYWNrR3JvdW5kKTsKKwkJCXZhbHVlU2NhbGVbaV0uc2V0Rm9yZWdyb3VuZCh0ZXh0Q29sb3IpOworCSAgICB9CisJICAgIAorCSAgICB1cGRhdGVDb2xvclNjYWxlKHNhdHVyYXRlZENvbG9yLCBheGlzLCBsb2dTY2FsZSwgYmFja0dyb3VuZCwgdGV4dENvbG9yKTsKKwkJCisJCXNjYWxlR3JvdXAuc2V0VmlzaWJsZSh0cnVlKTsKKwkJc2NhbGVHcm91cC5wYWNrKCk7CisJCQorCQl0aGlzLmxheW91dCgpOworCQl0aGlzLnBhY2soKTsKKwkJdGhpcy5zZXRWaXNpYmxlKHRydWUpOworCQkKKwl9CisKKwkvKioKKwkgKiAKKwkgKiBAcGFyYW0gc2F0dXJhdGVkQ29sb3IKKwkgKiBAcGFyYW0gYXhpcworCSAqIEBwYXJhbSBsb2dTY2FsZQorCSAqIEBwYXJhbSB0ZXh0QmFja0dyb3VuZAorCSAqIEBwYXJhbSB0ZXh0Rm9yZWdyb3VuZAorCSAqLworICAgIHB1YmxpYyB2b2lkIHVwZGF0ZUNvbG9yU2NhbGUoQ29sb3Igc2F0dXJhdGVkQ29sb3IsIGRvdWJsZVtdIGF4aXMsIGJvb2xlYW4gbG9nU2NhbGUsIENvbG9yIHRleHRCYWNrR3JvdW5kLCBDb2xvciB0ZXh0Rm9yZWdyb3VuZCkgeworICAgIAkKKyAgICAJQ29sb3JbXSBzY2FsZUNvbG9ycyA9IG5ldyBDb2xvcls1XTsKKyAgICAJCisgICAgCWludCBzaXplID0gTlVNX1NURVBTLTE7CisgICAgCQorICAgIAlkb3VibGUgciA9IHNhdHVyYXRlZENvbG9yLmdldFJlZCgpOworCQlkb3VibGUgZyA9IHNhdHVyYXRlZENvbG9yLmdldEdyZWVuKCk7CisJCWRvdWJsZSBiID0gc2F0dXJhdGVkQ29sb3IuZ2V0Qmx1ZSgpOworCQkJCQorCQkvLyBUT0RPIHRoaXMgaXMgSUYgTElORUFSCisJCWZvcihpbnQgaSA9IDA7IGkgPCA1OyBpICsrKSB7CisJCQlkb3VibGUgYWxwaGFGID0gKChkb3VibGUpIGkpLzQuMDsgLy8gdGhpcyBpcyAwPT4xIG5vdCAwLTI1NQorCQkJaW50IGlyID0gKGludCkgKGFscGhhRipyKTsKKwkJCWludCBpZyA9IChpbnQpIChhbHBoYUYqZyk7CisJCQlpbnQgaWIgPSAoaW50KSAoYWxwaGFGKmIpOworCQkJc2NhbGVDb2xvcnNbaV0gPSBuZXcgQ29sb3IoZ2V0RGlzcGxheSgpLCBpcixpZyxpYik7CisJCX0KKyAgICAJCisgICAgCWludFtdIHNwYWNpbmcgPSBuZXcgaW50W3NpemVdOworICAgIAlpZihzaXplPD0wKSBzaXplID0gMTsKKyAgICAJaW50IGRlbHRhID0gMTAwL3NpemU7CisgICAgCWZvcihpbnQgaSA9IDA7IGkgPCBzaXplOyBpICsrKSB7CisgICAgCQlzcGFjaW5nW2ldID0gZGVsdGEqKGkrMSk7CisgICAgCX0KKyAgICAJCisgICAgCS8vIFNldCB0aGUgYmFja2dyb3VuZCBncmFkaWVudAorCSAgICBjb2xvclNjYWxlLnNldEJhY2tncm91bmQoc2NhbGVDb2xvcnMsIHNwYWNpbmcpOworCSAgICAKKwkgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBOVU1fQVhJU19MQUJFTFM7IGkgKyspIHsKKwkJCXZhbHVlU2NhbGVbaV0uc2V0QmFja2dyb3VuZCh0ZXh0QmFja0dyb3VuZCk7CisJCQl2YWx1ZVNjYWxlW2ldLnNldEZvcmVncm91bmQodGV4dEZvcmVncm91bmQpOworCSAgICB9CisJICAgIAorCSAgICBpbnQgbGFzdCA9IE5VTV9BWElTX0xBQkVMUy0xOworCSAgICAvL3ZhbHVlU2NhbGVbMF0uc2V0QWxpZ25tZW50KFNXVC5SSUdIVCk7CisJICAgIHZhbHVlU2NhbGVbbGFzdF0uc2V0QWxpZ25tZW50KFNXVC5SSUdIVCk7CisJICAgIAorCSAgICBpZihheGlzWzFdPT0xLjApIHsKKwkgICAgCXZhbHVlU2NhbGVbbGFzdF0uc2V0VGV4dCgiMS4wIik7CisJICAgIH0gZWxzZSB7CisJICAgIAl2YWx1ZVNjYWxlW2xhc3RdLnNldFRleHQoIiIrc2NpRm9ybWF0LmZvcm1hdChheGlzWzFdKSk7CisJICAgIH0KKwkgICAgCisJICAgIAorCSAgICBpZihsb2dTY2FsZSkgeworCSAgICAJLy9kb3VibGUgZ2FpbiA9IDEuMC9heGlzWzFdOyAvLyB0aGUgZ2FpbgorCSAgICAJLy8gVE9ETyBDSEVDSyBUSElTIENPREUKKwkgICAgCS8qKgorCSAgICAJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnVpLmFkYXB0ZXJzLmNvbG9yLkludGVuc2l0eUNvbG9yc0xhYmVsc01hcHBpbmdDb2xvclByb3ZpZGVyQWRhcHRlci5wZXJmb3JtTG9nU2NhbGluZygpCisJICAgIAkgKi8KKwkgICAgCS8vZG91YmxlIG1pbiA9IChNYXRoLmV4cCgyKSAtMS4wKSAvIChheGlzWzFdKjk5LjApOyAgIC8vIHRoaXMgaXMgdGhlIG1pbgorCSAgICAJZG91YmxlIG1pbiA9IDAuMDEgKiBheGlzWzFdOyAgIC8vIHJlYWxseSB0aGUgbWluIGlzIGp1c3QgMSUgb2YgbWF4CisJICAgIAl2YWx1ZVNjYWxlWzBdLnNldFRleHQoIjwgIitzY2lGb3JtYXQuZm9ybWF0KG1pbikpOworCSAgICB9IGVsc2UgeworCSAgICAJdmFsdWVTY2FsZVswXS5zZXRUZXh0KCIiK2F4aXNbMF0pOworCSAgICB9CisJICAgIAorCSAgICAKKwkgICAgCisgICAgfS8vIHVwZGF0ZUNvbG9yU2NhbGUKKwkKKworCXB1YmxpYyBib29sZWFuIGlzVXNlTG9nU2NhbGUoKSB7CisJCXJldHVybiB1c2VMb2dTY2FsZTsKKwl9CisKKworCisJcHVibGljIHZvaWQgc2V0VXNlTG9nU2NhbGUoYm9vbGVhbiB1c2VMb2dTY2FsZSkgeworCQl0aGlzLnVzZUxvZ1NjYWxlID0gdXNlTG9nU2NhbGU7CisJfQorCisKKworfSAvLyBDb2xvcnNMZWdlbmRDb21wb3NpdGUKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9hZGFwdGVycy9jb2xvci9Db2xvcnNMZWdlbmRDb21wb3NpdGUuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9hZGFwdGVycy9jb2xvci9Db2xvcnNMZWdlbmRDb21wb3NpdGUuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNDlmMzQyCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL2FkYXB0ZXJzL2NvbG9yL0NvbG9yc0xlZ2VuZENvbXBvc2l0ZS5qYXZhCkBAIC0wLDAgKzEsNzAgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS51aS5hZGFwdGVycy5jb2xvcjsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNywgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUHJlZmVyZW5jZXM7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UucmVzb3VyY2UuU3RyaW5nQ29udmVydGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udWkuQWN0aXZhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5TV1Q7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmdyYXBoaWNzLkNvbG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ncmFwaGljcy5SR0I7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5HcmlkTGF5b3V0OworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Hcm91cDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5MYWJlbDsKKworLyoqCisgKiBUaGlzIGNsYXNzIGlzIHVzZWQgdG8gZGlzcGxheSBhICJsZWdlbmQiIHRoYXQgbWFwcyBjb2xvcnMgdG8gdmFsdWVzLgorICovCitwdWJsaWMgY2xhc3MgQ29sb3JzTGVnZW5kQ29tcG9zaXRlIGV4dGVuZHMgQ29tcG9zaXRlIHsKKworCUdyb3VwIGxlZ2VuZEdyb3VwID0gbmV3IEdyb3VwKHRoaXMsIFNXVC5OT05FKTsKKworCS8qKgorCSAqIEBwYXJhbSBwYXJlbnQKKwkgKiBAcGFyYW0gc3R5bGUKKwkgKi8KKwlwdWJsaWMgQ29sb3JzTGVnZW5kQ29tcG9zaXRlKGZpbmFsIENvbXBvc2l0ZSBwYXJlbnQsIGZpbmFsIGludCBzdHlsZSkgeworCQlzdXBlcihwYXJlbnQsIHN0eWxlKTsKKworCQlsZWdlbmRHcm91cC5zZXRUZXh0KCJDb2xvcnMgTGVnZW5kIik7CisJCWZpbmFsIEdyaWRMYXlvdXQgbGVnZW5kTGF5b3V0ID0gbmV3IEdyaWRMYXlvdXQoKTsKKwkJbGVnZW5kTGF5b3V0Lm51bUNvbHVtbnMgPSA0OworCQlsZWdlbmRMYXlvdXQuaG9yaXpvbnRhbFNwYWNpbmcgPSAxMDsKKwkJbGVnZW5kTGF5b3V0LnZlcnRpY2FsU3BhY2luZyA9IDI7CisJCWxlZ2VuZExheW91dC5tYWtlQ29sdW1uc0VxdWFsV2lkdGggPSBmYWxzZTsKKwkJbGVnZW5kTGF5b3V0Lm1hcmdpbkJvdHRvbSA9IDE1OworCQlsZWdlbmRHcm91cC5zZXRMYXlvdXQobGVnZW5kTGF5b3V0KTsKKwl9CisKKwkvKioKKwkgKiBAcGFyYW0gY29sb3JJRAorCSAqIEBwYXJhbSB0ZXh0CisJICovCisJcHVibGljIHZvaWQgYWRkQ29sb3JFbnRyeShmaW5hbCBTdHJpbmcgY29sb3JJRCwgZmluYWwgU3RyaW5nIHRleHQpIHsKKwkJZmluYWwgQ29sb3IgY29sb3IgPSBnZXRQcmVmZXJlbmNlc0NvbG9yKGNvbG9ySUQpOworCQlmaW5hbCBMYWJlbCBjb2xvckxhYmVsID0gbmV3IExhYmVsKGxlZ2VuZEdyb3VwLCBTV1QuQk9SREVSKTsKKwkJY29sb3JMYWJlbC5zZXRCYWNrZ3JvdW5kKGNvbG9yKTsKKwkJY29sb3JMYWJlbC5zZXRUZXh0KCIgICAgICAgICAgICAiKTsKKwkJZmluYWwgTGFiZWwgY29sb3JUZXh0ID0gbmV3IExhYmVsKGxlZ2VuZEdyb3VwLCBTV1QuTk9ORSk7CisJCWNvbG9yVGV4dC5zZXRUZXh0KHRleHQpOworCQlsZWdlbmRHcm91cC5wYWNrKCk7CisJCXRoaXMubGF5b3V0KCk7CisJfQorCisJcHJpdmF0ZSBDb2xvciBnZXRQcmVmZXJlbmNlc0NvbG9yKGZpbmFsIFN0cmluZyBjb2xvcklkKSB7CisJCWZpbmFsIFByZWZlcmVuY2VzIHByZWZzID0gQWN0aXZhdG9yLmdldERlZmF1bHQoKS5nZXRQbHVnaW5QcmVmZXJlbmNlcygpOworCQlmaW5hbCBTdHJpbmcgY29sb3IgPSBwcmVmcy5nZXRTdHJpbmcoY29sb3JJZCk7CisJCWZpbmFsIFJHQiByZ2IgPSBTdHJpbmdDb252ZXJ0ZXIuYXNSR0IoY29sb3IpOworCQlyZXR1cm4gbmV3IENvbG9yKGdldERpc3BsYXkoKSwgcmdiLnJlZCwgcmdiLmdyZWVuLCByZ2IuYmx1ZSk7CisJfQorfSAvLyBDb2xvcnNMZWdlbmRDb21wb3NpdGUKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9hZGFwdGVycy9jb2xvci9JQ29sb3JQcm92aWRlckFkYXB0ZXJGYWN0b3J5LmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvYWRhcHRlcnMvY29sb3IvSUNvbG9yUHJvdmlkZXJBZGFwdGVyRmFjdG9yeS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIyNjQyYjMKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvYWRhcHRlcnMvY29sb3IvSUNvbG9yUHJvdmlkZXJBZGFwdGVyRmFjdG9yeS5qYXZhCkBAIC0wLDAgKzEsNTUgQEAKKy8vIElDb2xvclByb3ZpZGVyQWRhcHRlckZhY3RvcnkuamF2YQorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnVpLmFkYXB0ZXJzLmNvbG9yOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5EZWNvcmF0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlOworCisvKioKKyAqIEludGVyZmFjZSB0byBiZSB1c2VkIG15IGFueSBDb2xvclByb3ZpZGVyQWRhcHRlckZhY3RvcnkgY2xhc3MuCisgKiBQcm92aWRlcyBtZXRob2RzIHRoYXQgYXJlIGNvbW1vbiB0byBhbGwgdHlwZXMgb2YgQ29sb3JQcm92aWRlckFkYXB0ZXJGYWN0b3J5LgorICovCitwdWJsaWMgaW50ZXJmYWNlIElDb2xvclByb3ZpZGVyQWRhcHRlckZhY3RvcnkgewkKKwkvKioKKwkgKiBUaGUgbWV0aG9kIHdpbGwgcmV0dXJuIGEgYm9vbGVhbiB2YWx1ZSBhYm91dCB3aGV0aGVyIHRoZSBmYWN0b3J5IHN1cHBvcnRzIHRoZSBzcGVjaWZpZWQgdHlwZQorCSAqIEBwYXJhbSB0eXBlIFRoZSBjb2xvciBwcm92aWRlciB0eXBlIHRvIGNoZWNrCisJICogQHJldHVybiB0cnVlIGlmIHRoZSBmYWN0b3J5IHN1cHBvcnRzIGl0CisJICovCisJcHVibGljIGJvb2xlYW4gaXNGYWN0b3J5Rm9yVHlwZShPYmplY3QgdHlwZSk7CisJCisJLyoqCisJICogVGhlIG1ldGhvZCB3aWxsIHJldHVybiBhIHtAbGluayBDb21wb3NpdGV9IHdpZGdldCB0aGF0IHdpbGwgYmUgYWRkZWQgdG8gdGhlIEdVSSBhbmQgaG9sZHMKKwkgKiB0aGUgaW5mb3JtYXRpb24gdGhhdCBjYW4gYmUgY29uZmlndXJlZCBmb3IgdGhlIHNwZWNpZmljIGZhY3RvcnkuCisJICogQHBhcmFtIHBhcmVudCBUaGUgcGFyZW50IG9mIHRoZSB7QGxpbmsgQ29tcG9zaXRlfQorCSAqIEBwYXJhbSBzdHlsZSB0aGUgc3R5bGUgZm9yIHRoZSBnZW5lcmF0ZWQge0BsaW5rIENvbXBvc2l0ZX0KKwkgKiBAcGFyYW0gc2VsZWN0ZWREZWNvcmF0b3IgdGhlIHNlbGVjdGVkIHtAbGluayBEZWNvcmF0b3J9CisJICogQHJldHVybiB0aGUgZ2VuZXJhdGVkIHtAbGluayBDb21wb3NpdGV9CisJICovCisJcHVibGljIENvbXBvc2l0ZSBjcmVhdGVQcm9wZXJ0aWVzQ29tcG9zaXRlKGZpbmFsIENvbXBvc2l0ZSBwYXJlbnQsIGZpbmFsIGludCBzdHlsZSwgZmluYWwgRGVjb3JhdG9yIHNlbGVjdGVkRGVjb3JhdG9yLCBmaW5hbCBTdHJpbmcgcG9wdWxhdGlvbklkZW50aWZpZXIpOworCQorCS8qKgorCSAqIFRoZSBtZXRob2Qgd2lsbCByZXR1cm4gYSB7QGxpbmsgQ29tcG9zaXRlfSB3aWRnZXQgdGhhdCB3aWxsIGJlIGFkZGVkIHRvIHRoZSBHVUkgYW5kIGhvbGRzCisJICogdGhlIGEgbGVnZW5kIG9mIHRoZSBjb2xvcnMgdGhhdCB0aGlzIGNvbG9yIHByb3ZpZGVyIHByb3ZpZGVzLgorCSAqIEBwYXJhbSBwYXJlbnQgVGhlIHBhcmVudCBvZiB0aGUge0BsaW5rIENvbXBvc2l0ZX0KKwkgKiBAcGFyYW0gc3R5bGUgdGhlIHN0eWxlIGZvciB0aGUgZ2VuZXJhdGVkIHtAbGluayBDb21wb3NpdGV9CisJICogQHJldHVybiB0aGUgZ2VuZXJhdGVkIHtAbGluayBDb21wb3NpdGV9CisJICovCisJcHVibGljIENvbXBvc2l0ZSBjcmVhdGVDb2xvcnNMZWdlbmRDb21wb3NpdGUoZmluYWwgQ29tcG9zaXRlIHBhcmVudCwgZmluYWwgaW50IHN0eWxlKTsKKwkKKwkvKioKKwkgKiBUaGUgbWV0aG9kIHdpbGwgcmV0dXJuIHRoZSB7QGxpbmsgQ29tcG9zaXRlfSB3aWRnZXQgdGhhdCB3aWxsIGJlIGFkZGVkIHRvIHRoZSBHVUkgYW5kIGhvbGRzCisJICogdGhlIGluZm9ybWF0aW9uIHRoYXQgY2FuIGJlIGNvbmZpZ3VyZWQgZm9yIHRoZSBzcGVjaWZpYyBmYWN0b3J5LgorCSAqIEByZXR1cm4gdGhlIHtAbGluayBDb21wb3NpdGV9CisJICovCisJcHVibGljIENvbXBvc2l0ZSBnZXRQcm9wZXJ0aWVzQ29tcG9zaXRlKCk7Cit9IC8vIElDb2xvclByb3ZpZGVyQWRhcHRlckZhY3RvcnkKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9hZGFwdGVycy9jb2xvci9JQ29sb3JQcm92aWRlckNoYW5nZWRMaXN0ZW5lci5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL2FkYXB0ZXJzL2NvbG9yL0lDb2xvclByb3ZpZGVyQ2hhbmdlZExpc3RlbmVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzA1MTAxNgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9hZGFwdGVycy9jb2xvci9JQ29sb3JQcm92aWRlckNoYW5nZWRMaXN0ZW5lci5qYXZhCkBAIC0wLDAgKzEsMjkgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS51aS5hZGFwdGVycy5jb2xvcjsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKgorICogVGhlIGludGVyZmFjZSBpcyBmb3IgbGlzdGVuZXJzIHRoYXQgd2lzaCB0byBnZXQgbm90aWZpZWQgYWJvdXQgZXZlbnRzIG9mCisgKiBjaGFuZ2UgaW4gdGhlIHNlbGVjdGVkIGNvbG9yIHByb3ZpZGVyLgorICogCisgKiBAYXV0aG9yIFlvc3NpIE1lc2lrYSAoSUJNKQorICovCitwdWJsaWMgaW50ZXJmYWNlIElDb2xvclByb3ZpZGVyQ2hhbmdlZExpc3RlbmVyIHsKKworCS8qKgorCSAqIExpc3RlbmVycyB3aWxsIGltcGxlbWVudCB0aGlzIG1ldGhvZCBhbmQgaXQgd2lsbCBiZSBjYWxsZWQgdXBvbgorCSAqIGNoYW5nZXMgb2YgdGhlIHNlbGVjdGVkIGNvbG9yIHByb3ZpZGVyLgorCSAqIAorCSAqIEBwYXJhbSBzZWxlY3RlZENvbG9yUHJvdmlkZXIgVGhlIHJlY2VudGx5IHNlbGVjdGVkIGNvbG9yIHByb3ZpZGVyCisJICovCisJcHVibGljIHZvaWQgY29sb3JQcm92aWRlckNoYW5nZWQoQ2xhc3Mgc2VsZWN0ZWRDb2xvclByb3ZpZGVyKTsKK30KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9hZGFwdGVycy9jb2xvci9JUHJlZmVyZW5jZXNDb250cmlidXRlci5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL2FkYXB0ZXJzL2NvbG9yL0lQcmVmZXJlbmNlc0NvbnRyaWJ1dGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTUxYmJlYQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9hZGFwdGVycy9jb2xvci9JUHJlZmVyZW5jZXNDb250cmlidXRlci5qYXZhCkBAIC0wLDAgKzEsNDcgQEAKKy8vIElQcmVmZXJlbmNlc0NvbnRyaWJ1dGVyLmphdmEKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS51aS5hZGFwdGVycy5jb2xvcjsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS51dGlsLlByb3BlcnR5Q2hhbmdlRXZlbnQ7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS51aS5wcmVmZXJlbmNlcy5NYXBzQ29sb3JzUHJlZmVyZW5jZVBhZ2U7CisKKy8qKgorICogVGhpcyBpbnRlcmZhY2Ugc2hvdWxkIGJlIGltcGxlbWVudGVkIGJ5IHRob3NlIGVudGl0aWVzIHRoYXQgd2lzaCB0byBjb250cmlidXRlCisgKiBwcmVmZXJlbmNlcyBmaWVsZHMgdG8gdGhlIE1hcHMgQ29sb3JzIHByZWZlcmVuY2VzIHBhZ2UuCisgKi8KK3B1YmxpYyBpbnRlcmZhY2UgSVByZWZlcmVuY2VzQ29udHJpYnV0ZXIgeworCisJLyoqCisJICogU2V0cyB0aGUge0BsaW5rIE1hcHNDb2xvcnNQcmVmZXJlbmNlUGFnZX0KKwkgKiBAcGFyYW0gcHJlZmVyZW5jZVBhZ2UgdGhlIHtAbGluayBNYXBzQ29sb3JzUHJlZmVyZW5jZVBhZ2V9CisJICovCisJcHVibGljIHZvaWQgc2V0UHJlZmVyZW5jZVBhZ2UoTWFwc0NvbG9yc1ByZWZlcmVuY2VQYWdlIHByZWZlcmVuY2VQYWdlKTsKKwkvKioKKwkgKiBDcmVhdGVzIHRoZSBwcmVmZXJlbmNlcyBmaWVsZHMgYW5kIGFkZCB0aGVtIHRvIHRoZSBwcmVmZXJlbmNlcyBwYWdlCisJICovCisJcHVibGljIHZvaWQgY3JlYXRlRmllbGRFZGl0b3JzKCk7CisJLyoqCisJICogSW5pdGlhbGl6ZSB0aGUgcHJlZmVyZW5jZXMgZmllbGRzCisJICovCisJcHVibGljIHZvaWQgaW5pdGlhbGl6ZSgpOworCS8qKgorCSAqIEJlaW5nIGNhbGxlZCB3aGVuZXZlciBhIHByb3BlcnR5IGluIHRoZSBwcmVmZXJlbmNlcyBwYWdlIGhhcyBiZWVuIGNoYW5nZWQuCisJICogQHBhcmFtIGV2ZW50IEV2ZW50IG9iamVjdCBhYm91dCB0aGUgY2hhbmdlZCBwcm9wZXJ0eQorCSAqLworCXB1YmxpYyB2b2lkIHByb3BlcnR5Q2hhbmdlKFByb3BlcnR5Q2hhbmdlRXZlbnQgZXZlbnQpOworCS8qKgorCSAqIExvYWRzIHRoZSBwcmVmZXJlbmNlcyBmaWVsZHMgd2l0aCBkZWZhdWx0IHZhbHVlcworCSAqLworCXB1YmxpYyB2b2lkIHBlcmZvcm1EZWZhdWx0cygpOworCQorfSAvLyBJUHJlZmVyZW5jZXNDb250cmlidXRlcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL2FkYXB0ZXJzL2NvbG9yL1BvcHVsYXRpb25SZWxhdGl2ZVZhbHVlQ29sb3JQcm92aWRlci5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL2FkYXB0ZXJzL2NvbG9yL1BvcHVsYXRpb25SZWxhdGl2ZVZhbHVlQ29sb3JQcm92aWRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ4ODVkYmMKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvYWRhcHRlcnMvY29sb3IvUG9wdWxhdGlvblJlbGF0aXZlVmFsdWVDb2xvclByb3ZpZGVyLmphdmEKQEAgLTAsMCArMSwyMiBAQAorLy8gUG9wdWxhdGlvblJlbGF0aXZlVmFsdWVDb2xvclByb3ZpZGVyLmphdmEKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS51aS5hZGFwdGVycy5jb2xvcjsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworLyoqCisgKiBUaGlzIGludGVyZmFjZSBpcyBpbXBsZW1lbnRlZCBieSBjbGFzc2VzIHRoYXQgd2lsbCBwcm92aWRlIHBvcHVsYXRpb24gdmFsdWUgZm9yIGEKKyAqIHNwZWNpZmljIGFkYXB0ZWQgb2JqZWN0LgorICovCitwdWJsaWMgaW50ZXJmYWNlIFBvcHVsYXRpb25SZWxhdGl2ZVZhbHVlQ29sb3JQcm92aWRlciBleHRlbmRzIFJlbGF0aXZlVmFsdWVDb2xvclByb3ZpZGVyIHsKKwkvL01hcmtlciBpbnRlcmZhY2UKK30vLyBQb3B1bGF0aW9uUmVsYXRpdmVWYWx1ZUNvbG9yUHJvdmlkZXIKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9hZGFwdGVycy9jb2xvci9Qb3B1bGF0aW9uUmVsYXRpdmVWYWx1ZUNvbG9yUHJvdmlkZXJBZGFwdGVyLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvYWRhcHRlcnMvY29sb3IvUG9wdWxhdGlvblJlbGF0aXZlVmFsdWVDb2xvclByb3ZpZGVyQWRhcHRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ4ZmRiZTUKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvYWRhcHRlcnMvY29sb3IvUG9wdWxhdGlvblJlbGF0aXZlVmFsdWVDb2xvclByb3ZpZGVyQWRhcHRlci5qYXZhCkBAIC0wLDAgKzEsOTIgQEAKKy8vIFBvcHVsYXRpb25SZWxhdGl2ZVZhbHVlQ29sb3JQcm92aWRlckFkYXB0ZXIuamF2YQorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnVpLmFkYXB0ZXJzLmNvbG9yOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5Ob2RlTGFiZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuQXJlYUxhYmVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLkFyZWFMYWJlbFZhbHVlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLlBvcHVsYXRpb25MYWJlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5Qb3B1bGF0aW9uTGFiZWxWYWx1ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLm5vZGVzLlJlZ2lvbjsKKworLyoqCisgKiBUaGlzIGNsYXNzIGFkYXB0cyB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLk5vZGV9IG9iamVjdHMgdG8KKyAqIHtAbGluayBQb3B1bGF0aW9uUmVsYXRpdmVWYWx1ZUNvbG9yUHJvdmlkZXJ9IG9iamVjdC4KKyAqLworcHVibGljIGNsYXNzIFBvcHVsYXRpb25SZWxhdGl2ZVZhbHVlQ29sb3JQcm92aWRlckFkYXB0ZXIgZXh0ZW5kcworCQlBYnN0cmFjdFJlbGF0aXZlVmFsdWVDb2xvclByb3ZpZGVyQWRhcHRlciB7CisKKwkvKioKKwkgKiBDb25zdHJ1Y3RvcgorCSAqLworCXB1YmxpYyBQb3B1bGF0aW9uUmVsYXRpdmVWYWx1ZUNvbG9yUHJvdmlkZXJBZGFwdGVyKCkgeworCQlzdXBlcigpOworCX0KKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS51aS5hZGFwdGVycy5jb2xvci5BYnN0cmFjdFJlbGF0aXZlVmFsdWVDb2xvclByb3ZpZGVyQWRhcHRlciNnZXRSZWxhdGl2ZVZhbHVlKCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgZmxvYXQgZ2V0UmVsYXRpdmVWYWx1ZSgpIHsKKwkJZ2V0UG9wdWxhdGlvbigpOworCQlyZXR1cm4gMC41ZjsKKwkJCisJCS8vIC8vIElzIHRoZXJlIGEgZGVjb3JhdG9yIGFuZCBhIGN1cnJlbnRseSBzZWxlY3RlZCBwcm9wZXJ0eT8KKwkJLy8gaWYgKGRpc3BsYXlEYXRhICE9IG51bGwpIHsKKwkJLy8gLy8gWWVzCisJCS8vIC8vIEdldCB0aGUgZGlzcGxheSBkYXRhIGZvciB0aGlzIGRlY29yYXRvcgorCQkvLwkJCQorCQkvLwkJCQorCQkvLyBOb2RlIG5vZGUgPSAoTm9kZSlnZXRUYXJnZXQoKTsKKwkJLy8JCQkKKwkJLy8gUmVsYXRpdmVWYWx1ZVByb3ZpZGVyQWRhcHRlciBydnAgPQorCQkvLyBkaXNwbGF5RGF0YS5nZXRSZWxhdGl2ZVZhbHVlUHJvdmlkZXJBZGFwdGVyKCk7CisJCS8vIGZvciAoZmluYWwgRGVjb3JhdG9yRGlzcGxheURhdGEuTGFiZWxEYXRhIGxhYmVsRGF0YSA6CisJCS8vIGRpc3BsYXlEYXRhLmdldExhYmVsRGF0YSgpKSB7CisJCS8vIHJ2cC5zZXRUYXJnZXQobGFiZWxEYXRhLmdldExhYmVsKCkpOworCQkvLyBpZiAobGFiZWxEYXRhLmdldExhYmVsKCkuZ2V0Tm9kZSgpID09IG5vZGUpIHsKKwkJLy8gcmV0dXJuIChmbG9hdClydnAuZ2V0UmVsYXRpdmVWYWx1ZShkZWNvcmF0aW9uSGVscGVyLmdldFNlbGVjdGVkUHJvcGVydHkoKSk7CisJCS8vIH0KKwkJLy8gfSAvLyBmb3IgZWFjaCBMYWJlbERhdGEKKwkJLy8gfSAvLyBpZiB0aGVyZSBhIGRlY29yYXRvciBhbmQgYSBjdXJyZW50bHkgc2VsZWN0ZWQgcHJvcGVydHkKKworCQkvLyByZXR1cm4gMDsgLy8gV2Ugc2hvdWxkbid0IHJlYWNoIHRoaXMgcG9pbnQKKwl9IC8vIGdldFJlbGF0aXZlVmFsdWUKKwkKKwkvKioKKwkgKiBAcmV0dXJuCisJICovCisJcHJpdmF0ZSBkb3VibGUgZ2V0UG9wdWxhdGlvbigpIHsKKwkJaWYgKCEoZ2V0VGFyZ2V0KCkgaW5zdGFuY2VvZiBSZWdpb24pKSB7CisJCQlyZXR1cm4gLTE7CisJCX0KKwkJCisJCWRvdWJsZSByZXRWYWwgPSAtMTsKKwkJUmVnaW9uIHJlZ2lvbiA9IChSZWdpb24pZ2V0VGFyZ2V0KCk7CisJCWZvciAoTm9kZUxhYmVsIG5vZGVMYWJlbCA6IHJlZ2lvbi5nZXRMYWJlbHMoKSkgeworCQkJaWYgKG5vZGVMYWJlbCBpbnN0YW5jZW9mIFBvcHVsYXRpb25MYWJlbCkgeworCQkJCVBvcHVsYXRpb25MYWJlbCBsYWJlbCA9IChQb3B1bGF0aW9uTGFiZWwpbm9kZUxhYmVsOworCQkJCS8vaWYgKGxhYmVsLmdldFBvcHVsYXRpb25JZGVudGlmaWVyKCkuZXF1YWxzKFBvcHVsYXRpb25MYWJlbC5IVU1BTikpCisJCQkJUG9wdWxhdGlvbkxhYmVsVmFsdWUgdmFsdWUgPSAoUG9wdWxhdGlvbkxhYmVsVmFsdWUpbGFiZWwuZ2V0Q3VycmVudFZhbHVlKCk7CisJCQkJcmV0VmFsID0gdmFsdWUuZ2V0Q291bnQoKTsKKwkJCX0KKwkJCWlmIChub2RlTGFiZWwgaW5zdGFuY2VvZiBBcmVhTGFiZWwpIHsKKwkJCQlBcmVhTGFiZWwgbGFiZWwgPSAoQXJlYUxhYmVsKW5vZGVMYWJlbDsKKwkJCQlBcmVhTGFiZWxWYWx1ZSB2YWx1ZSA9IChBcmVhTGFiZWxWYWx1ZSlsYWJlbC5nZXRDdXJyZW50VmFsdWUoKTsKKwkJCQlyZXRWYWwgPSB2YWx1ZS5nZXRBcmVhKCk7CisJCQl9CisJCX0KKwkJcmV0dXJuIHJldFZhbDsKKwl9IC8vIGdldFBvcHVsYXRpb24KKworfSAvLyBQb3B1bGF0aW9uUmVsYXRpdmVWYWx1ZUNvbG9yUHJvdmlkZXJBZGFwdGVyCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvYWRhcHRlcnMvY29sb3IvUG9wdWxhdGlvblJlbGF0aXZlVmFsdWVDb2xvclByb3ZpZGVyQWRhcHRlckZhY3RvcnkuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9hZGFwdGVycy9jb2xvci9Qb3B1bGF0aW9uUmVsYXRpdmVWYWx1ZUNvbG9yUHJvdmlkZXJBZGFwdGVyRmFjdG9yeS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcxMDk5N2QKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvYWRhcHRlcnMvY29sb3IvUG9wdWxhdGlvblJlbGF0aXZlVmFsdWVDb2xvclByb3ZpZGVyQWRhcHRlckZhY3RvcnkuamF2YQpAQCAtMCwwICsxLDg0IEBACisvLyBQb3B1bGF0aW9uUmVsYXRpdmVWYWx1ZUNvbG9yUHJvdmlkZXJBZGFwdGVyRmFjdG9yeS5qYXZhCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0udWkuYWRhcHRlcnMuY29sb3I7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuQWRhcHRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuRGVjb3JhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5TV1Q7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5Sb3dMYXlvdXQ7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkxhYmVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkxheW91dDsKKworLyoqCisgKiBUaGlzIGZhY3RvcnkgY3JlYXRlIGFkYXB0ZXJzIHRoYXQgYWRhcHQKKyAqIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguTm9kZX1zIHRvCisgKiB7QGxpbmsgUG9wdWxhdGlvblJlbGF0aXZlVmFsdWVDb2xvclByb3ZpZGVyfXMuCisgKi8KK3B1YmxpYyBjbGFzcyBQb3B1bGF0aW9uUmVsYXRpdmVWYWx1ZUNvbG9yUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSBleHRlbmRzCisJCUFic3RyYWN0UmVsYXRpdmVWYWx1ZUNvbG9yUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSB7CisKKwkvKioKKwkgKiBDb25zdHJ1Y3RvcgorCSAqLworCXB1YmxpYyBQb3B1bGF0aW9uUmVsYXRpdmVWYWx1ZUNvbG9yUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSgpIHsKKwkJc3VwZXIoKTsKKwl9IC8vIFBvcHVsYXRpb25SZWxhdGl2ZVZhbHVlQ29sb3JQcm92aWRlckFkYXB0ZXJGYWN0b3J5CisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC51dGlsLkdyYXBoQWRhcHRlckZhY3RvcnkjY3JlYXRlTm9kZUFkYXB0ZXIoKQorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZU5vZGVBZGFwdGVyKCkgeworCQlmaW5hbCBQb3B1bGF0aW9uUmVsYXRpdmVWYWx1ZUNvbG9yUHJvdmlkZXJBZGFwdGVyIGFkYXB0ZXIgPSBuZXcgUG9wdWxhdGlvblJlbGF0aXZlVmFsdWVDb2xvclByb3ZpZGVyQWRhcHRlcigpOworCQlyZXR1cm4gYWRhcHRlcjsKKwl9IC8vIGNyZWF0ZU5vZGVBZGFwdGVyCisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0udWkuYWRhcHRlcnMuY29sb3IuQWJzdHJhY3RSZWxhdGl2ZVZhbHVlQ29sb3JQcm92aWRlckFkYXB0ZXJGYWN0b3J5I2lzRmFjdG9yeUZvclR5cGUoamF2YS5sYW5nLk9iamVjdCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgYm9vbGVhbiBpc0ZhY3RvcnlGb3JUeXBlKGZpbmFsIE9iamVjdCB0eXBlKSB7CisJCXJldHVybiB0eXBlID09IFBvcHVsYXRpb25SZWxhdGl2ZVZhbHVlQ29sb3JQcm92aWRlci5jbGFzczsKKwl9IC8vIGlzRmFjdG9yeUZvclR5cGUKKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS51aS5hZGFwdGVycy5jb2xvci5JQ29sb3JQcm92aWRlckFkYXB0ZXJGYWN0b3J5I2NyZWF0ZVByb3BlcnRpZXNDb21wb3NpdGUob3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlLCBpbnQsIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5EZWNvcmF0b3IpCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIENvbXBvc2l0ZSBjcmVhdGVQcm9wZXJ0aWVzQ29tcG9zaXRlKGZpbmFsIENvbXBvc2l0ZSBwYXJlbnQsIEBTdXBwcmVzc1dhcm5pbmdzKCJ1bnVzZWQiKSBmaW5hbCBpbnQgc3R5bGUsIEBTdXBwcmVzc1dhcm5pbmdzKCJ1bnVzZWQiKSBmaW5hbCBEZWNvcmF0b3Igc2VsZWN0ZWREZWNvcmF0b3IsIGZpbmFsIFN0cmluZyBwb3B1bGF0aW9uSWRlbnRpZmllcikKKwl7CisJCWZpbmFsIENvbXBvc2l0ZSBjb21wb3NpdGUgPSBuZXcgQ29tcG9zaXRlKHBhcmVudCwgU1dULk5PTkUpOworCQlmaW5hbCBMYXlvdXQgbGF5b3V0ID0gbmV3IFJvd0xheW91dCgpOworCQljb21wb3NpdGUuc2V0TGF5b3V0KGxheW91dCk7CisJCWZpbmFsIExhYmVsIGxhYmVsID0gbmV3IExhYmVsKGNvbXBvc2l0ZSwgU1dULk5PTkUpOworCQlsYWJlbC5zZXRUZXh0KCJUaGlzIGNvbG9yIHByb3ZpZGVyIGlzIG5vdCBpbXBsZW1lbnRlZCB5ZXQiKTsKKwkJcmV0dXJuIGNvbXBvc2l0ZTsKKwl9IC8vIGNyZWF0ZVByb3BlcnRpZXNDb21wb3NpdGUKKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS51aS5hZGFwdGVycy5jb2xvci5BYnN0cmFjdFJlbGF0aXZlVmFsdWVDb2xvclByb3ZpZGVyQWRhcHRlckZhY3RvcnkjY3JlYXRlQ29sb3JzTGVnZW5kQ29tcG9zaXRlKG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZSwKKwkgKiAgICAgIGludCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgQ29tcG9zaXRlIGNyZWF0ZUNvbG9yc0xlZ2VuZENvbXBvc2l0ZShmaW5hbCBDb21wb3NpdGUgcGFyZW50LAorCQkJZmluYWwgaW50IHN0eWxlKSB7CisJCWZpbmFsIENvbG9yc0xlZ2VuZENvbXBvc2l0ZSBjb2xvcnNMZWdlbmRDb21wb3NpdGUgPSBuZXcgQ29sb3JzTGVnZW5kQ29tcG9zaXRlKAorCQkJCXBhcmVudCwgc3R5bGUpOworCQljb2xvcnNMZWdlbmRDb21wb3NpdGUuYWRkQ29sb3JFbnRyeSgKKwkJCQlSZWxhdGl2ZVZhbHVlQ29sb3JQcmVmZXJlbmNlcy5GT1JFR1JPVU5EX0NPTE9SX1JBTkdFXzNfSUQsCisJCQkJIlBvcHVsYXRpb24gcmVsYXRpdmUgdmFsdWUiKTsKKwkJcmV0dXJuIGNvbG9yc0xlZ2VuZENvbXBvc2l0ZTsKKwl9IC8vIGNyZWF0ZUNvbG9yc0xlZ2VuZENvbXBvc2l0ZQorCit9IC8vIFBvcHVsYXRpb25SZWxhdGl2ZVZhbHVlQ29sb3JQcm92aWRlckFkYXB0ZXJGYWN0b3J5CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvYWRhcHRlcnMvY29sb3IvUmVsYXRpdmVWYWx1ZUNvbG9yUHJlZmVyZW5jZXMuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9hZGFwdGVycy9jb2xvci9SZWxhdGl2ZVZhbHVlQ29sb3JQcmVmZXJlbmNlcy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIzYzU5OGUKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvYWRhcHRlcnMvY29sb3IvUmVsYXRpdmVWYWx1ZUNvbG9yUHJlZmVyZW5jZXMuamF2YQpAQCAtMCwwICsxLDMxOSBAQAorLy8gUmVsYXRpdmVWYWx1ZUNvbG9yUHJlZmVyZW5jZXMuamF2YQorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnVpLmFkYXB0ZXJzLmNvbG9yOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnByZWZlcmVuY2UuQm9vbGVhbkZpZWxkRWRpdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnByZWZlcmVuY2UuQ29sb3JGaWVsZEVkaXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5yZXNvdXJjZS5TdHJpbmdDb252ZXJ0ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudXRpbC5Qcm9wZXJ0eUNoYW5nZUV2ZW50OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udWkucHJlZmVyZW5jZXMuTWFwc0NvbG9yc1ByZWZlcmVuY2VQYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5TV1Q7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuR3JvdXA7CisKKy8qKgorICogVGhpcyBjbGFzcyBob2xkcyB0aGUgcHJlZmVyZW5jZXMgY29udHJpYnV0aW9uIHRvIHRoZSBtYWluIHByZWZlcmVuY2VzIHBhZ2UgZm9yIGFsbCByZWxhdGl2ZQorICogdmFsdWUgY29sb3IgcHJvdmlkZXJzLgorICovCitwdWJsaWMgY2xhc3MgUmVsYXRpdmVWYWx1ZUNvbG9yUHJlZmVyZW5jZXMgCisJaW1wbGVtZW50cyBJUHJlZmVyZW5jZXNDb250cmlidXRlciB7CisJCisJLyoqCisJICogVGhlIHtAbGluayBNYXBzQ29sb3JzUHJlZmVyZW5jZVBhZ2V9IHRoZSB0aGlzIHByZWZlcmVuY2VzIGhhdmUgYmVlbiBhZGRlZCB0bworCSAqLworCXByb3RlY3RlZCBNYXBzQ29sb3JzUHJlZmVyZW5jZVBhZ2UgcHJlZmVyZW5jZXNQYWdlOworCQorCS8qKgorCSAqIFRoZSBwcmVmZXJlbmNlcyBmaWVsZCBlZGl0b3IgZm9yIGZvcmVncm91bmQgY29sb3Igb2YgemVybyByZWxhdGl2ZSB2YWx1ZQorCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEZPUkVHUk9VTkRfQ09MT1JfWkVST19SRUxBVElWRV9WQUxVRV9JRCA9ICJvcmcuZWNsaXBzZS5zdGVtLnVpLnZpZXdzLmdlb2dyYXBoaWMubWFwLnByZWZlcmVuY2VzLmZvcmVncm91bmRjb2xvcnplcm8iOworCisJLyoqCisJICogVGhlIHByZWZlcmVuY2VzIGZpZWxkIGVkaXRvciBmb3IgZm9yZWdyb3VuZCBjb2xvciBvZiByYW5nZSAxCisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgRk9SRUdST1VORF9DT0xPUl9SQU5HRV8xX0lEID0gIm9yZy5lY2xpcHNlLnN0ZW0udWkudmlld3MuZ2VvZ3JhcGhpYy5tYXAucHJlZmVyZW5jZXMuZm9yZWdyb3VuZGNvbG9ycmFuZ2UxIjsKKworCS8qKgorCSAqIFRoZSBwcmVmZXJlbmNlcyBmaWVsZCBlZGl0b3IgZm9yIGZvcmVncm91bmQgY29sb3Igb2YgcmFuZ2UgMgorCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEZPUkVHUk9VTkRfQ09MT1JfUkFOR0VfMl9JRCA9ICJvcmcuZWNsaXBzZS5zdGVtLnVpLnZpZXdzLmdlb2dyYXBoaWMubWFwLnByZWZlcmVuY2VzLmZvcmVncm91bmRjb2xvcnJhbmdlMiI7CisKKwkvKioKKwkgKiBUaGUgcHJlZmVyZW5jZXMgZmllbGQgZWRpdG9yIGZvciBmb3JlZ3JvdW5kIGNvbG9yIG9mIHJhbmdlIDMKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBGT1JFR1JPVU5EX0NPTE9SX1JBTkdFXzNfSUQgPSAib3JnLmVjbGlwc2Uuc3RlbS51aS52aWV3cy5nZW9ncmFwaGljLm1hcC5wcmVmZXJlbmNlcy5mb3JlZ3JvdW5kY29sb3JyYW5nZTMiOworCisJLyoqCisJICogVGhlIHByZWZlcmVuY2VzIGZpZWxkIGVkaXRvciBmb3IgZm9yZWdyb3VuZCBjb2xvciBvZiByYW5nZSA0CisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgRk9SRUdST1VORF9DT0xPUl9SQU5HRV80X0lEID0gIm9yZy5lY2xpcHNlLnN0ZW0udWkudmlld3MuZ2VvZ3JhcGhpYy5tYXAucHJlZmVyZW5jZXMuZm9yZWdyb3VuZGNvbG9ycmFuZ2U0IjsKKwkvKioKKwkgKiBUaGUgcHJlZmVyZW5jZXMgZmllbGQgZWRpdG9yIGZvciBmb3JlZ3JvdW5kIGNvbG9yIG9mIHJhbmdlIDUKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBGT1JFR1JPVU5EX0NPTE9SX1JBTkdFXzVfSUQgPSAib3JnLmVjbGlwc2Uuc3RlbS51aS52aWV3cy5nZW9ncmFwaGljLm1hcC5wcmVmZXJlbmNlcy5mb3JlZ3JvdW5kY29sb3JyYW5nZTUiOworCS8qKgorCSAqIFRoZSBwcmVmZXJlbmNlcyBmaWVsZCBlZGl0b3IgZm9yIGZvcmVncm91bmQgY29sb3Igb2YgcmFuZ2UgNgorCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEZPUkVHUk9VTkRfQ09MT1JfUkFOR0VfNl9JRCA9ICJvcmcuZWNsaXBzZS5zdGVtLnVpLnZpZXdzLmdlb2dyYXBoaWMubWFwLnByZWZlcmVuY2VzLmZvcmVncm91bmRjb2xvcnJhbmdlNiI7CisJLyoqCisJICogVGhlIHByZWZlcmVuY2VzIGZpZWxkIGVkaXRvciBmb3IgZm9yZWdyb3VuZCBjb2xvciBvZiByYW5nZSA3CisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgRk9SRUdST1VORF9DT0xPUl9SQU5HRV83X0lEID0gIm9yZy5lY2xpcHNlLnN0ZW0udWkudmlld3MuZ2VvZ3JhcGhpYy5tYXAucHJlZmVyZW5jZXMuZm9yZWdyb3VuZGNvbG9ycmFuZ2U3IjsKKwkvKioKKwkgKiBUaGUgcHJlZmVyZW5jZXMgZmllbGQgZWRpdG9yIGZvciBmb3JlZ3JvdW5kIGNvbG9yIG9mIHJhbmdlIDgKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBGT1JFR1JPVU5EX0NPTE9SX1JBTkdFXzhfSUQgPSAib3JnLmVjbGlwc2Uuc3RlbS51aS52aWV3cy5nZW9ncmFwaGljLm1hcC5wcmVmZXJlbmNlcy5mb3JlZ3JvdW5kY29sb3JyYW5nZTgiOworCS8qKgorCSAqIFRoZSBwcmVmZXJlbmNlcyBmaWVsZCBlZGl0b3IgZm9yIGZvcmVncm91bmQgY29sb3Igb2YgcmFuZ2UgOQorCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEZPUkVHUk9VTkRfQ09MT1JfUkFOR0VfOV9JRCA9ICJvcmcuZWNsaXBzZS5zdGVtLnVpLnZpZXdzLmdlb2dyYXBoaWMubWFwLnByZWZlcmVuY2VzLmZvcmVncm91bmRjb2xvcnJhbmdlOSI7CisJLyoqCisJICogVGhlIHByZWZlcmVuY2VzIGZpZWxkIGVkaXRvciBmb3IgZm9yZWdyb3VuZCBjb2xvciBvZiByYW5nZSAxMAorCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEZPUkVHUk9VTkRfQ09MT1JfUkFOR0VfMTBfSUQgPSAib3JnLmVjbGlwc2Uuc3RlbS51aS52aWV3cy5nZW9ncmFwaGljLm1hcC5wcmVmZXJlbmNlcy5mb3JlZ3JvdW5kY29sb3JyYW5nZTEwIjsKKwkKKwkvKioKKwkgKiBUaGUgcHJlZmVyZW5jZXMgZmllbGQgZWRpdG9yIGZvciBmb3JlZ3JvdW5kIGNvbG9yIG9mIG1heGltdW0gcmVsYXRpdmUgdmFsdWUKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBGT1JFR1JPVU5EX0NPTE9SX01BWElNVU1fUkVMQVRJVkVfVkFMVUVfSUQgPSAib3JnLmVjbGlwc2Uuc3RlbS51aS52aWV3cy5nZW9ncmFwaGljLm1hcC5wcmVmZXJlbmNlcy5mb3JlZ3JvdW5kY29sb3JtYXhpbXVtIjsKKworCS8qKgorCSAqIFRoZSBwcmVmZXJlbmNlcyBmaWVsZCBlZGl0b3IgZm9yIGFscGhhIGNvbXBvc2l0ZQorCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFVTRV9BTFBIQV9DT01QT1NJVEVfSUQgPSAib3JnLmVjbGlwc2Uuc3RlbS51aS52aWV3cy5nZW9ncmFwaGljLm1hcC5wcmVmZXJlbmNlcy51c2VhbHBoYWNvbXBvc2l0ZSI7CisKKwkvKioKKwkgKiBUaGUgZGVmYXVsdCBjb2xvciBmb3IgcHJlZmVyZW5jZXMgZmllbGQgZWRpdG9yIGZvciB6ZXJvIHJlbGF0aXZlIHZhbHVlICgwLjApCisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgRk9SRUdST1VORF9DT0xPUl9aRVJPX1JFTEFUSVZFX1ZBTFVFX0RFRkFVTFRfUkdCX1NUUklORyA9ICIyNTUsMjU1LDI1NSI7IAkJCS8vQmxhY2sKKworCS8qKgorCSAqIFRoZSBkZWZhdWx0IGNvbG9yIGZvciBwcmVmZXJlbmNlcyBmaWVsZCBlZGl0b3IgZm9yIGZvcmVncm91bmQgY29sb3Igb2YgcmFuZ2UgMQorCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEZPUkVHUk9VTkRfQ09MT1JfUkFOR0VfMV9ERUZBVUxUX1JHQl9TVFJJTkcgPSAiMjMxLDIzMSwyMzEiOwkJCQkJLy9ncmF5CisKKwkvKioKKwkgKiBUaGUgZGVmYXVsdCBjb2xvciBmb3IgcHJlZmVyZW5jZXMgZmllbGQgZWRpdG9yIGZvciBmb3JlZ3JvdW5kIGNvbG9yIG9mIHJhbmdlIDIKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBGT1JFR1JPVU5EX0NPTE9SX1JBTkdFXzJfREVGQVVMVF9SR0JfU1RSSU5HID0gIjI1NSwyNTUsMTkyIjsgCQkJCQkvL3llbG93IHBhbGUgcGFsZSBwYWxlCisKKwkvKioJCisJICogVGhlIGRlZmF1bHQgY29sb3IgZm9yIHByZWZlcmVuY2VzIGZpZWxkIGVkaXRvciBmb3IgZm9yZWdyb3VuZCBjb2xvciBvZiByYW5nZSAzCisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgRk9SRUdST1VORF9DT0xPUl9SQU5HRV8zX0RFRkFVTFRfUkdCX1NUUklORyA9ICIyNTUsMjU1LDEyOCI7IAkJCQkJLy95ZWxvdyBwYWxlIHBhbGUKKworCS8qKgorCSAqIFRoZSBkZWZhdWx0IGNvbG9yIGZvciBwcmVmZXJlbmNlcyBmaWVsZCBlZGl0b3IgZm9yIGZvcmVncm91bmQgY29sb3Igb2YgcmFuZ2UgNAorCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEZPUkVHUk9VTkRfQ09MT1JfUkFOR0VfNF9ERUZBVUxUX1JHQl9TVFJJTkcgPSAiMjU1LDI1NSw2NCI7IAkJCQkJLy9ZZWxsb3cgcGFsZQorCisJLyoqCisJICogVGhlIGRlZmF1bHQgY29sb3IgZm9yIHByZWZlcmVuY2VzIGZpZWxkIGVkaXRvciBmb3IgZm9yZWdyb3VuZCBjb2xvciBvZiByYW5nZSA1CisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgRk9SRUdST1VORF9DT0xPUl9SQU5HRV81X0RFRkFVTFRfUkdCX1NUUklORyA9ICIyNTUsMjU1LDAiOwkJCQkJCS8vWWVsbG93CisKKwkvKioKKwkgKiBUaGUgZGVmYXVsdCBjb2xvciBmb3IgcHJlZmVyZW5jZXMgZmllbGQgZWRpdG9yIGZvciBmb3JlZ3JvdW5kIGNvbG9yIG9mIHJhbmdlIDYKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBGT1JFR1JPVU5EX0NPTE9SX1JBTkdFXzZfREVGQVVMVF9SR0JfU1RSSU5HID0gIjI1NSwyMjMsMCI7CQkJCQkvL09yYW5nZS15ZWxsb3cKKworCS8qKgorCSAqIFRoZSBkZWZhdWx0IGNvbG9yIGZvciBwcmVmZXJlbmNlcyBmaWVsZCBlZGl0b3IgZm9yIGZvcmVncm91bmQgY29sb3Igb2YgcmFuZ2UgNworCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEZPUkVHUk9VTkRfQ09MT1JfUkFOR0VfN19ERUZBVUxUX1JHQl9TVFJJTkcgPSAiMjU1LDE5MiwwIjsJCQkJCS8vT3JhbmdlCisJCisJLyoqCisJICogVGhlIGRlZmF1bHQgY29sb3IgZm9yIHByZWZlcmVuY2VzIGZpZWxkIGVkaXRvciBmb3IgZm9yZWdyb3VuZCBjb2xvciBvZiByYW5nZSA4CisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgRk9SRUdST1VORF9DT0xPUl9SQU5HRV84X0RFRkFVTFRfUkdCX1NUUklORyA9ICIyNTUsMTI4LDAiOwkJCQkJLy9PcmFuZ2UtcmVkCisJCisJLyoqCisJICogVGhlIGRlZmF1bHQgY29sb3IgZm9yIHByZWZlcmVuY2VzIGZpZWxkIGVkaXRvciBmb3IgZm9yZWdyb3VuZCBjb2xvciBvZiByYW5nZSA5CisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgRk9SRUdST1VORF9DT0xPUl9SQU5HRV85X0RFRkFVTFRfUkdCX1NUUklORyA9ICIyNTUsOTYsMCI7CQkJCQkJLy9SRUQtb3JhbmdlCisJCisJLyoqCisJICogVGhlIGRlZmF1bHQgY29sb3IgZm9yIHByZWZlcmVuY2VzIGZpZWxkIGVkaXRvciBmb3IgZm9yZWdyb3VuZCBjb2xvciBvZiByYW5nZSAxMAorCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEZPUkVHUk9VTkRfQ09MT1JfUkFOR0VfMTBfREVGQVVMVF9SR0JfU1RSSU5HID0gIjI1NSw2NCwwIjsJCQkJCS8vUmVkLVJFRC1vcmFuZ2UKKwkKKwkvKioKKwkgKiBUaGUgZGVmYXVsdCBjb2xvciBmb3IgcHJlZmVyZW5jZXMgZmllbGQgZWRpdG9yIGZvciBtYXhpbXVtIHJlbGF0aXZlIHZhbHVlICgxLjApCisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgRk9SRUdST1VORF9DT0xPUl9NQVhJTVVNX1JFTEFUSVZFX1ZBTFVFX0RFRkFVTFRfUkdCX1NUUklORyA9ICIyNTUsMCwwIjsJLy9SZWQKKworCS8qKgorCSAqIFRoZSBncm91cCB0aGF0IGdyb3VwcyBmaWVsZCBlZGl0b3JzIGZyb20gdGhpcyBwcmVmZXJlbmNlcyBjb250cmlidXRlcgorCSAqLworCXByaXZhdGUgR3JvdXAgcmVsYXRpdmVWYWx1ZXNQcmVmR3JvdXA7CQorCisJLyoqCisJICogVGhlIGFscGhhIGNvbXBvc2l0ZSBib29sZWFuIGZpZWxkIGVkaXRvcgorCSAqLworCSBzdGF0aWMgQm9vbGVhbkZpZWxkRWRpdG9yIHVzZUFscGhhQ29tcG9zaXRlQm9vbGVhbkZpZWxkRWRpdG9yOworCisJIC8qKgorCSAqIFRoZSBjb2xvciBmaWVsZCBlZGl0b3IgZm9yIHplcm8gcmVsYXRpdmUgdmFsdWUKKwkgKi8KKwkgc3RhdGljIENvbG9yRmllbGRFZGl0b3IgemVyb0NvbG9yRmllbGRFZGl0b3I7CisKKwkgLyoqCisJICogVGhlIGNvbG9yIGZpZWxkIGVkaXRvciBmb3IgcmFuZ2UgMQorCSAqLworCSBzdGF0aWMgQ29sb3JGaWVsZEVkaXRvciByYW5nZTFDb2xvckZpZWxkRWRpdG9yOworCisJIC8qKgorCSAqIFRoZSBjb2xvciBmaWVsZCBlZGl0b3IgZm9yIHJhbmdlIDIKKwkgKi8KKwkgc3RhdGljIENvbG9yRmllbGRFZGl0b3IgcmFuZ2UyQ29sb3JGaWVsZEVkaXRvcjsKKworCSAvKioKKwkgKiBUaGUgY29sb3IgZmllbGQgZWRpdG9yIGZvciByYW5nZSAzCisJICovCisJIHN0YXRpYyBDb2xvckZpZWxkRWRpdG9yIHJhbmdlM0NvbG9yRmllbGRFZGl0b3I7CisKKwkgLyoqCisJICogVGhlIGNvbG9yIGZpZWxkIGVkaXRvciBmb3IgcmFuZ2UgNAorCSAqLworCSBzdGF0aWMgQ29sb3JGaWVsZEVkaXRvciByYW5nZTRDb2xvckZpZWxkRWRpdG9yOworCisJIC8qKgorCSAqIFRoZSBjb2xvciBmaWVsZCBlZGl0b3IgZm9yIHJhbmdlIDUKKwkgKi8KKwkgc3RhdGljIENvbG9yRmllbGRFZGl0b3IgcmFuZ2U1Q29sb3JGaWVsZEVkaXRvcjsKKwkgCisJIC8qKgorCSAqIFRoZSBjb2xvciBmaWVsZCBlZGl0b3IgZm9yIHJhbmdlIDYKKwkgKi8KKwlzdGF0aWMgQ29sb3JGaWVsZEVkaXRvciByYW5nZTZDb2xvckZpZWxkRWRpdG9yOworCS8qKgorCSAqIFRoZSBjb2xvciBmaWVsZCBlZGl0b3IgZm9yIHJhbmdlIDcKKwkgKi8KKwlzdGF0aWMgQ29sb3JGaWVsZEVkaXRvciByYW5nZTdDb2xvckZpZWxkRWRpdG9yOworCS8qKgorCSAqIFRoZSBjb2xvciBmaWVsZCBlZGl0b3IgZm9yIHJhbmdlIDgKKwkgKi8KKwlzdGF0aWMgQ29sb3JGaWVsZEVkaXRvciByYW5nZThDb2xvckZpZWxkRWRpdG9yOworCS8qKgorCSAqIFRoZSBjb2xvciBmaWVsZCBlZGl0b3IgZm9yIHJhbmdlIDkKKwkgKi8KKwlzdGF0aWMgQ29sb3JGaWVsZEVkaXRvciByYW5nZTlDb2xvckZpZWxkRWRpdG9yOworCS8qKgorCSAqIFRoZSBjb2xvciBmaWVsZCBlZGl0b3IgZm9yIHJhbmdlIDEwCisJICovCisJc3RhdGljIENvbG9yRmllbGRFZGl0b3IgcmFuZ2UxMENvbG9yRmllbGRFZGl0b3I7CisKKwkgLyoqCisJICogVGhlIGNvbG9yIGZpZWxkIGVkaXRvciBmb3IgbWF4aW11bSByZWxhdGl2ZSB2YWx1ZQorCSAqLworCSBzdGF0aWMgQ29sb3JGaWVsZEVkaXRvciBtYXhDb2xvckZpZWxkRWRpdG9yOworCQorCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS51aS5hZGFwdGVycy5jb2xvci5JUHJlZmVyZW5jZXNDb250cmlidXRlciNjcmVhdGVGaWVsZEVkaXRvcnMoKQorCSAqLworCXB1YmxpYyB2b2lkIGNyZWF0ZUZpZWxkRWRpdG9ycygpIHsKKwkJcmVsYXRpdmVWYWx1ZXNQcmVmR3JvdXAgPSBuZXcgR3JvdXAocHJlZmVyZW5jZXNQYWdlLmdldEZpZWxkRWRpdG9yUGFyZW50KCksIFNXVC5TSEFET1dfRVRDSEVEX0lOKTsKKwkJcmVsYXRpdmVWYWx1ZXNQcmVmR3JvdXAuc2V0VGV4dCgiUmVsYXRpdmUgVmFsdWVzIik7CisJCXVzZUFscGhhQ29tcG9zaXRlQm9vbGVhbkZpZWxkRWRpdG9yID0gbmV3IEJvb2xlYW5GaWVsZEVkaXRvcihVU0VfQUxQSEFfQ09NUE9TSVRFX0lELCAiVXNlICdBbHBoYSBDb21wb3NpdGUnIGZvciByZWxhdGl2ZSBjb2xvcnMiLCByZWxhdGl2ZVZhbHVlc1ByZWZHcm91cCk7CisJCXplcm9Db2xvckZpZWxkRWRpdG9yID0gbmV3IENvbG9yRmllbGRFZGl0b3IoRk9SRUdST1VORF9DT0xPUl9aRVJPX1JFTEFUSVZFX1ZBTFVFX0lELCAiQ29sb3IgZm9yIHplcm8gcmVsYXRpdmUgdmFsdWUgKDApIiwgcmVsYXRpdmVWYWx1ZXNQcmVmR3JvdXApOworCQlyYW5nZTFDb2xvckZpZWxkRWRpdG9yID0gbmV3IENvbG9yRmllbGRFZGl0b3IoRk9SRUdST1VORF9DT0xPUl9SQU5HRV8xX0lELCAiQ29sb3IgZm9yIHJlbGF0aXZlIHZhbHVlcyAoMCAtIDAuMSkiLCByZWxhdGl2ZVZhbHVlc1ByZWZHcm91cCk7CisJCXJhbmdlMkNvbG9yRmllbGRFZGl0b3IgPSBuZXcgQ29sb3JGaWVsZEVkaXRvcihGT1JFR1JPVU5EX0NPTE9SX1JBTkdFXzJfSUQsICJDb2xvciBmb3IgcmVsYXRpdmUgdmFsdWVzICgwLjEgLSAwLjIpIiwgcmVsYXRpdmVWYWx1ZXNQcmVmR3JvdXApOworCQlyYW5nZTNDb2xvckZpZWxkRWRpdG9yID0gbmV3IENvbG9yRmllbGRFZGl0b3IoRk9SRUdST1VORF9DT0xPUl9SQU5HRV8zX0lELCAiQ29sb3IgZm9yIHJlbGF0aXZlIHZhbHVlcyAoMC4yIC0gMC4zKSIsIHJlbGF0aXZlVmFsdWVzUHJlZkdyb3VwKTsKKwkJcmFuZ2U0Q29sb3JGaWVsZEVkaXRvciA9IG5ldyBDb2xvckZpZWxkRWRpdG9yKEZPUkVHUk9VTkRfQ09MT1JfUkFOR0VfNF9JRCwgIkNvbG9yIGZvciByZWxhdGl2ZSB2YWx1ZXMgKDAuMyAtIDAuNCkiLCByZWxhdGl2ZVZhbHVlc1ByZWZHcm91cCk7CisJCXJhbmdlNUNvbG9yRmllbGRFZGl0b3IgPSBuZXcgQ29sb3JGaWVsZEVkaXRvcihGT1JFR1JPVU5EX0NPTE9SX1JBTkdFXzVfSUQsICJDb2xvciBmb3IgcmVsYXRpdmUgdmFsdWVzICgwLjQgLSAwLjUpIiwgcmVsYXRpdmVWYWx1ZXNQcmVmR3JvdXApOworCQlyYW5nZTZDb2xvckZpZWxkRWRpdG9yID0gbmV3IENvbG9yRmllbGRFZGl0b3IoRk9SRUdST1VORF9DT0xPUl9SQU5HRV82X0lELCAiQ29sb3IgZm9yIHJlbGF0aXZlIHZhbHVlcyAoMC41IC0gMC42KSIsIHJlbGF0aXZlVmFsdWVzUHJlZkdyb3VwKTsKKwkJcmFuZ2U3Q29sb3JGaWVsZEVkaXRvciA9IG5ldyBDb2xvckZpZWxkRWRpdG9yKEZPUkVHUk9VTkRfQ09MT1JfUkFOR0VfN19JRCwgIkNvbG9yIGZvciByZWxhdGl2ZSB2YWx1ZXMgKDAuNiAtIDAuNykiLCByZWxhdGl2ZVZhbHVlc1ByZWZHcm91cCk7CisJCXJhbmdlOENvbG9yRmllbGRFZGl0b3IgPSBuZXcgQ29sb3JGaWVsZEVkaXRvcihGT1JFR1JPVU5EX0NPTE9SX1JBTkdFXzhfSUQsICJDb2xvciBmb3IgcmVsYXRpdmUgdmFsdWVzICgwLjcgLSAwLjgpIiwgcmVsYXRpdmVWYWx1ZXNQcmVmR3JvdXApOworCQlyYW5nZTlDb2xvckZpZWxkRWRpdG9yID0gbmV3IENvbG9yRmllbGRFZGl0b3IoRk9SRUdST1VORF9DT0xPUl9SQU5HRV85X0lELCAiQ29sb3IgZm9yIHJlbGF0aXZlIHZhbHVlcyAoMC44IC0gMC45KSIsIHJlbGF0aXZlVmFsdWVzUHJlZkdyb3VwKTsKKwkJcmFuZ2UxMENvbG9yRmllbGRFZGl0b3IgPSBuZXcgQ29sb3JGaWVsZEVkaXRvcihGT1JFR1JPVU5EX0NPTE9SX1JBTkdFXzEwX0lELCAiQ29sb3IgZm9yIHJlbGF0aXZlIHZhbHVlcyAoMC45IC0gMSkiLCByZWxhdGl2ZVZhbHVlc1ByZWZHcm91cCk7CisKKwkJbWF4Q29sb3JGaWVsZEVkaXRvciA9IG5ldyBDb2xvckZpZWxkRWRpdG9yKEZPUkVHUk9VTkRfQ09MT1JfTUFYSU1VTV9SRUxBVElWRV9WQUxVRV9JRCwgIkNvbG9yIGZvciBtYXhpbXVtIHJlbGF0aXZlIHZhbHVlICgxLjApIiwgcmVsYXRpdmVWYWx1ZXNQcmVmR3JvdXApOworCisJCXByZWZlcmVuY2VzUGFnZS5hZGRGaWVsZCh1c2VBbHBoYUNvbXBvc2l0ZUJvb2xlYW5GaWVsZEVkaXRvcik7CisJCXByZWZlcmVuY2VzUGFnZS5hZGRGaWVsZCh6ZXJvQ29sb3JGaWVsZEVkaXRvcik7CisJCXByZWZlcmVuY2VzUGFnZS5hZGRGaWVsZChyYW5nZTFDb2xvckZpZWxkRWRpdG9yKTsKKwkJcHJlZmVyZW5jZXNQYWdlLmFkZEZpZWxkKHJhbmdlMkNvbG9yRmllbGRFZGl0b3IpOworCQlwcmVmZXJlbmNlc1BhZ2UuYWRkRmllbGQocmFuZ2UzQ29sb3JGaWVsZEVkaXRvcik7CisJCXByZWZlcmVuY2VzUGFnZS5hZGRGaWVsZChyYW5nZTRDb2xvckZpZWxkRWRpdG9yKTsKKwkJcHJlZmVyZW5jZXNQYWdlLmFkZEZpZWxkKHJhbmdlNUNvbG9yRmllbGRFZGl0b3IpOworCQlwcmVmZXJlbmNlc1BhZ2UuYWRkRmllbGQocmFuZ2U2Q29sb3JGaWVsZEVkaXRvcik7CisJCXByZWZlcmVuY2VzUGFnZS5hZGRGaWVsZChyYW5nZTdDb2xvckZpZWxkRWRpdG9yKTsKKwkJcHJlZmVyZW5jZXNQYWdlLmFkZEZpZWxkKHJhbmdlOENvbG9yRmllbGRFZGl0b3IpOworCQlwcmVmZXJlbmNlc1BhZ2UuYWRkRmllbGQocmFuZ2U5Q29sb3JGaWVsZEVkaXRvcik7CisJCXByZWZlcmVuY2VzUGFnZS5hZGRGaWVsZChyYW5nZTEwQ29sb3JGaWVsZEVkaXRvcik7CisJCXByZWZlcmVuY2VzUGFnZS5hZGRGaWVsZChtYXhDb2xvckZpZWxkRWRpdG9yKTsKKwl9IC8vIGNyZWF0ZUZpZWxkRWRpdG9ycworCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnVpLmFkYXB0ZXJzLmNvbG9yLklQcmVmZXJlbmNlc0NvbnRyaWJ1dGVyI2luaXRpYWxpemUoKQorCSAqLworCXB1YmxpYyB2b2lkIGluaXRpYWxpemUoKSB7CisJCWJvb2xlYW4gcmFuZ2VzRW5hYmxlZCA9ICF1c2VBbHBoYUNvbXBvc2l0ZUJvb2xlYW5GaWVsZEVkaXRvci5nZXRCb29sZWFuVmFsdWUoKTsKKwkJdG9nZ2xlRW5hYmxlZFJhbmdlQ29sb3JGaWxlZHMocmFuZ2VzRW5hYmxlZCk7CisJfSAvLyBpbml0aWFsaXplCisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0udWkuYWRhcHRlcnMuY29sb3IuSVByZWZlcmVuY2VzQ29udHJpYnV0ZXIjcGVyZm9ybURlZmF1bHRzKCkKKwkgKi8KKwlwdWJsaWMgdm9pZCBwZXJmb3JtRGVmYXVsdHMoKSB7CisJCXplcm9Db2xvckZpZWxkRWRpdG9yLmdldENvbG9yU2VsZWN0b3IoKS5zZXRDb2xvclZhbHVlKFN0cmluZ0NvbnZlcnRlci5hc1JHQihGT1JFR1JPVU5EX0NPTE9SX1pFUk9fUkVMQVRJVkVfVkFMVUVfREVGQVVMVF9SR0JfU1RSSU5HKSk7CisJCXJhbmdlMUNvbG9yRmllbGRFZGl0b3IuZ2V0Q29sb3JTZWxlY3RvcigpLnNldENvbG9yVmFsdWUoU3RyaW5nQ29udmVydGVyLmFzUkdCKEZPUkVHUk9VTkRfQ09MT1JfUkFOR0VfMV9ERUZBVUxUX1JHQl9TVFJJTkcpKTsKKwkJcmFuZ2UyQ29sb3JGaWVsZEVkaXRvci5nZXRDb2xvclNlbGVjdG9yKCkuc2V0Q29sb3JWYWx1ZShTdHJpbmdDb252ZXJ0ZXIuYXNSR0IoRk9SRUdST1VORF9DT0xPUl9SQU5HRV8yX0RFRkFVTFRfUkdCX1NUUklORykpOworCQlyYW5nZTNDb2xvckZpZWxkRWRpdG9yLmdldENvbG9yU2VsZWN0b3IoKS5zZXRDb2xvclZhbHVlKFN0cmluZ0NvbnZlcnRlci5hc1JHQihGT1JFR1JPVU5EX0NPTE9SX1JBTkdFXzNfREVGQVVMVF9SR0JfU1RSSU5HKSk7CisJCXJhbmdlNENvbG9yRmllbGRFZGl0b3IuZ2V0Q29sb3JTZWxlY3RvcigpLnNldENvbG9yVmFsdWUoU3RyaW5nQ29udmVydGVyLmFzUkdCKEZPUkVHUk9VTkRfQ09MT1JfUkFOR0VfNF9ERUZBVUxUX1JHQl9TVFJJTkcpKTsKKwkJcmFuZ2U1Q29sb3JGaWVsZEVkaXRvci5nZXRDb2xvclNlbGVjdG9yKCkuc2V0Q29sb3JWYWx1ZShTdHJpbmdDb252ZXJ0ZXIuYXNSR0IoRk9SRUdST1VORF9DT0xPUl9SQU5HRV81X0RFRkFVTFRfUkdCX1NUUklORykpOworCQlyYW5nZTZDb2xvckZpZWxkRWRpdG9yLmdldENvbG9yU2VsZWN0b3IoKS5zZXRDb2xvclZhbHVlKFN0cmluZ0NvbnZlcnRlci5hc1JHQihGT1JFR1JPVU5EX0NPTE9SX1JBTkdFXzZfREVGQVVMVF9SR0JfU1RSSU5HKSk7CisJCXJhbmdlN0NvbG9yRmllbGRFZGl0b3IuZ2V0Q29sb3JTZWxlY3RvcigpLnNldENvbG9yVmFsdWUoU3RyaW5nQ29udmVydGVyLmFzUkdCKEZPUkVHUk9VTkRfQ09MT1JfUkFOR0VfN19ERUZBVUxUX1JHQl9TVFJJTkcpKTsKKwkJcmFuZ2U4Q29sb3JGaWVsZEVkaXRvci5nZXRDb2xvclNlbGVjdG9yKCkuc2V0Q29sb3JWYWx1ZShTdHJpbmdDb252ZXJ0ZXIuYXNSR0IoRk9SRUdST1VORF9DT0xPUl9SQU5HRV84X0RFRkFVTFRfUkdCX1NUUklORykpOworCQlyYW5nZTlDb2xvckZpZWxkRWRpdG9yLmdldENvbG9yU2VsZWN0b3IoKS5zZXRDb2xvclZhbHVlKFN0cmluZ0NvbnZlcnRlci5hc1JHQihGT1JFR1JPVU5EX0NPTE9SX1JBTkdFXzlfREVGQVVMVF9SR0JfU1RSSU5HKSk7CisJCXJhbmdlMTBDb2xvckZpZWxkRWRpdG9yLmdldENvbG9yU2VsZWN0b3IoKS5zZXRDb2xvclZhbHVlKFN0cmluZ0NvbnZlcnRlci5hc1JHQihGT1JFR1JPVU5EX0NPTE9SX1JBTkdFXzEwX0RFRkFVTFRfUkdCX1NUUklORykpOworCQkKKwkJbWF4Q29sb3JGaWVsZEVkaXRvci5nZXRDb2xvclNlbGVjdG9yKCkuc2V0Q29sb3JWYWx1ZShTdHJpbmdDb252ZXJ0ZXIuYXNSR0IoRk9SRUdST1VORF9DT0xPUl9NQVhJTVVNX1JFTEFUSVZFX1ZBTFVFX0RFRkFVTFRfUkdCX1NUUklORykpOworCX0gLy8gcGVyZm9ybURlZmF1bHRzCisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0udWkuYWRhcHRlcnMuY29sb3IuSVByZWZlcmVuY2VzQ29udHJpYnV0ZXIjcHJvcGVydHlDaGFuZ2Uob3JnLmVjbGlwc2UuamZhY2UudXRpbC5Qcm9wZXJ0eUNoYW5nZUV2ZW50KQorCSAqLworCXB1YmxpYyB2b2lkIHByb3BlcnR5Q2hhbmdlKFByb3BlcnR5Q2hhbmdlRXZlbnQgZXZlbnQpIHsKKwkJaWYgKGV2ZW50LmdldFNvdXJjZSgpID09IHVzZUFscGhhQ29tcG9zaXRlQm9vbGVhbkZpZWxkRWRpdG9yKSB7CisJCQlib29sZWFuIHJhbmdlc0VuYWJsZWQgPSAhdXNlQWxwaGFDb21wb3NpdGVCb29sZWFuRmllbGRFZGl0b3IuZ2V0Qm9vbGVhblZhbHVlKCk7CisJCQl0b2dnbGVFbmFibGVkUmFuZ2VDb2xvckZpbGVkcyhyYW5nZXNFbmFibGVkKTsKKwkJfQorCX0gLy8gcHJvcGVydHlDaGFuZ2UKKwkKKwkvKioKKwkgKiBUb2dnbGVzIGJldHdlZW4gZW5hYmxlZCBhbmQgZGlzYWJsZWQgbW9kZSBvZiB0aGUgcmFuZ2UgY29sb3IgZmllbGQgZWRpdG9ycy4KKwkgKiBAcGFyYW0gaXNFbmFibGVkIHRvIGVuYWJsZSBvciBkaXNhYmxlIHRoZSBmaWVsZHMKKwkgKi8KKwlwcml2YXRlIHZvaWQgdG9nZ2xlRW5hYmxlZFJhbmdlQ29sb3JGaWxlZHMoYm9vbGVhbiBpc0VuYWJsZWQpIHsKKwkJemVyb0NvbG9yRmllbGRFZGl0b3Iuc2V0RW5hYmxlZChpc0VuYWJsZWQsIHJlbGF0aXZlVmFsdWVzUHJlZkdyb3VwKTsKKwkJcmFuZ2UxQ29sb3JGaWVsZEVkaXRvci5zZXRFbmFibGVkKGlzRW5hYmxlZCwgcmVsYXRpdmVWYWx1ZXNQcmVmR3JvdXApOworCQlyYW5nZTJDb2xvckZpZWxkRWRpdG9yLnNldEVuYWJsZWQoaXNFbmFibGVkLCByZWxhdGl2ZVZhbHVlc1ByZWZHcm91cCk7CisJCXJhbmdlM0NvbG9yRmllbGRFZGl0b3Iuc2V0RW5hYmxlZChpc0VuYWJsZWQsIHJlbGF0aXZlVmFsdWVzUHJlZkdyb3VwKTsKKwkJcmFuZ2U0Q29sb3JGaWVsZEVkaXRvci5zZXRFbmFibGVkKGlzRW5hYmxlZCwgcmVsYXRpdmVWYWx1ZXNQcmVmR3JvdXApOworCQlyYW5nZTVDb2xvckZpZWxkRWRpdG9yLnNldEVuYWJsZWQoaXNFbmFibGVkLCByZWxhdGl2ZVZhbHVlc1ByZWZHcm91cCk7CisJCXJhbmdlNkNvbG9yRmllbGRFZGl0b3Iuc2V0RW5hYmxlZChpc0VuYWJsZWQsIHJlbGF0aXZlVmFsdWVzUHJlZkdyb3VwKTsKKwkJcmFuZ2U3Q29sb3JGaWVsZEVkaXRvci5zZXRFbmFibGVkKGlzRW5hYmxlZCwgcmVsYXRpdmVWYWx1ZXNQcmVmR3JvdXApOworCQlyYW5nZThDb2xvckZpZWxkRWRpdG9yLnNldEVuYWJsZWQoaXNFbmFibGVkLCByZWxhdGl2ZVZhbHVlc1ByZWZHcm91cCk7CisJCXJhbmdlOUNvbG9yRmllbGRFZGl0b3Iuc2V0RW5hYmxlZChpc0VuYWJsZWQsIHJlbGF0aXZlVmFsdWVzUHJlZkdyb3VwKTsKKwkJcmFuZ2UxMENvbG9yRmllbGRFZGl0b3Iuc2V0RW5hYmxlZChpc0VuYWJsZWQsIHJlbGF0aXZlVmFsdWVzUHJlZkdyb3VwKTsKKwkJbWF4Q29sb3JGaWVsZEVkaXRvci5zZXRFbmFibGVkKGlzRW5hYmxlZCwgcmVsYXRpdmVWYWx1ZXNQcmVmR3JvdXApOworCX0gLy8gdG9nZ2xlRW5hYmxlZFJhbmdlQ29sb3JGaWxlZHMKKwkKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0udWkuYWRhcHRlcnMuY29sb3IuSVByZWZlcmVuY2VzQ29udHJpYnV0ZXIjc2V0UHJlZmVyZW5jZVBhZ2Uob3JnLmVjbGlwc2Uuc3RlbS51aS5wcmVmZXJlbmNlcy5NYXBzQ29sb3JzUHJlZmVyZW5jZVBhZ2UpCisJICovCisJcHVibGljIHZvaWQgc2V0UHJlZmVyZW5jZVBhZ2UoTWFwc0NvbG9yc1ByZWZlcmVuY2VQYWdlIHByZWZlcmVuY2VQYWdlKSB7CisJCXRoaXMucHJlZmVyZW5jZXNQYWdlID0gcHJlZmVyZW5jZVBhZ2U7CisJfSAvLyBzZXRQcmVmZXJlbmNlUGFnZQorCit9IC8vIFJlbGF0aXZlVmFsdWVDb2xvclByZWZlcmVuY2VzCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvYWRhcHRlcnMvY29sb3IvUmVsYXRpdmVWYWx1ZUNvbG9yUHJvdmlkZXIuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9hZGFwdGVycy9jb2xvci9SZWxhdGl2ZVZhbHVlQ29sb3JQcm92aWRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNhYTZlMTkKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvYWRhcHRlcnMvY29sb3IvUmVsYXRpdmVWYWx1ZUNvbG9yUHJvdmlkZXIuamF2YQpAQCAtMCwwICsxLDI4IEBACisvLyBSZWxhdGl2ZVZhbHVlQ29sb3JQcm92aWRlci5qYXZhCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0udWkuYWRhcHRlcnMuY29sb3I7CisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKgorICogVGhpcyBpbnRlcmZhY2UgaXMgaW1wbGVtZW50ZWQgYnkgY2xhc3NlcyB0aGF0IHdpbGwgcHJvdmlkZSBhbiByZWxhdGl2ZSB2YWx1ZSBmb3IgYQorICogc3BlY2lmaWMgYWRhcHRlZCBvYmplY3QuCisgKi8KK3B1YmxpYyBpbnRlcmZhY2UgUmVsYXRpdmVWYWx1ZUNvbG9yUHJvdmlkZXIgZXh0ZW5kcyBDb2xvclByb3ZpZGVyIHsKKworCS8qKgorCSAqIFRoZSByZWxhdGl2ZSB2YWx1ZSBmb3IgdGhlIGFkYXB0ZWQgb2JqZWN0LgorCSAqIEByZXR1cm4gdGhlIHJlbGF0aXZlIHZhbHVlCisJICovCisJcHVibGljIGZsb2F0IGdldFJlbGF0aXZlVmFsdWUoKTsKKwkKK30vLyBSZWxhdGl2ZVZhbHVlQ29sb3JQcm92aWRlcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL2FkYXB0ZXJzL2NvbG9yL1JlbGF0aXZlVmFsdWVDb2xvclByb3ZpZGVyQWRhcHRlckZhY3RvcnkuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9hZGFwdGVycy9jb2xvci9SZWxhdGl2ZVZhbHVlQ29sb3JQcm92aWRlckFkYXB0ZXJGYWN0b3J5LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmVkNmQzMQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9hZGFwdGVycy9jb2xvci9SZWxhdGl2ZVZhbHVlQ29sb3JQcm92aWRlckFkYXB0ZXJGYWN0b3J5LmphdmEKQEAgLTAsMCArMSw3MiBAQAorLy8gUmVsYXRpdmVWYWx1ZVByb3ZpZGVyQWRhcHRlckZhY3RvcnkuamF2YQorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnVpLmFkYXB0ZXJzLmNvbG9yOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkNvbXBvc2VhYmxlQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuQ29tcG9zZWRBZGFwdGVyRmFjdG9yeTsKKworLyoqCisgKiBUaGlzIGludGVyZmFjZSBpcyBpbXBsZW1lbnRlZCBieSBjbGFzc2VzIHRoYXQgY3JlYXRlIGFkYXB0ZXJzIHRoYXQgYWRhcHQKKyAqIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdH1zIHRvIHtAbGluayBSZWxhdGl2ZVZhbHVlQ29sb3JQcm92aWRlcn0KKyAqIHMuCisgKi8KK3B1YmxpYyBpbnRlcmZhY2UgUmVsYXRpdmVWYWx1ZUNvbG9yUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSBleHRlbmRzCisJCUNvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnkgeworCisJLyoqCisJICogVGhpcyBpcyB0aGUgc2luZ2xldG9uIGluc3RhbmNlIG9mIHRoZSBmYWN0b3J5IHRoYXQgY3JlYXRlcworCSAqIHtAbGluayBSZWxhdGl2ZVZhbHVlQ29sb3JQcm92aWRlcn0gaW5zdGFuY2VzLgorCSAqIDxwPgorCSAqIFRoaXMgaW5zdGFuY2UgaXMgYSB7QGxpbmsgQ29tcG9zZWRBZGFwdGVyRmFjdG9yeX0gd2hpY2ggbWVhbnMgdGhhdCBpdAorCSAqIGNvbGxlY3RzIHRvZ2V0aGVyIG90aGVyIHtAbGluayBDb21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5fSBhZGFwdGVyCisJICogZmFjdG9yaWVzLiBFYWNoIGNsYXNzIHRoYXQgaW1wbGVtZW50cworCSAqIHtAbGluayBSZWxhdGl2ZVZhbHVlQ29sb3JQcm92aWRlckFkYXB0ZXJGYWN0b3J5fSBuZWVkcyB0byBhZGQgaXRzZWxmIHRvIHRoaXMKKwkgKiBpbnN0YW5jZSB3aXRoIGEgY2FsbCB0bworCSAqIHtAbGluayBDb21wb3NlZEFkYXB0ZXJGYWN0b3J5I2FkZEFkYXB0ZXJGYWN0b3J5KG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LkFkYXB0ZXJGYWN0b3J5KX0uCisJICogVGhpcyB3aWxsIHRoZW4gYWxsb3cgYWRhcHRlcnMgY3JlYXRlZCBieSB0aGF0IGZhY3RvcnkgdG8gYmUgZm91bmQgd2hlbgorCSAqIGFkYXB0aW5nIGNsYXNzIGluc3RhbmNlcyBoYW5kbGVkIGJ5IHRoZSBuZXcgZmFjdG9yeS4KKwkgKiA8cD4KKwkgKiBCYXNpY2FsbHksIGlmIHlvdSBjcmVhdGUgYW4gRU1GIG1vZGVsIGFuZCBkZWZpbmUgYQorCSAqIHtAbGluayBSZWxhdGl2ZVZhbHVlQ29sb3JQcm92aWRlckFkYXB0ZXJGYWN0b3J5fSBmb3IgaXQgc28gdGhhdCB0aGUgY2xhc3NlcyBpbgorCSAqIHRoYXQgbW9kZWwgY2FuIGJlIGFkYXB0ZWQsIHlvdSBuZWVkIHRvIGhvb2sgdGhhdCBmYWN0b3J5IGludG8gdGhpcyBvbmUgc28KKwkgKiB0aGF0IGxhdGVyIHdoZW4gYW4gYXR0ZW1wdCBpcyBtYWRlIHRvIGFkYXB0IGEgY2xhc3MgZnJvbSB0aGF0IG1vZGVsIGlzCisJICogbWFkZSB0aGUgYXNzb2NpYXRlZCBmYWN0b3J5IHdpbGwgYmUgZm91bmQuIFlvdSBjYW4gZG8gdGhhdCBieSBhZGRpbmcgdGhlCisJICogbGluZTogPGNvZGU+CisJICogUmVsYXRpdmVWYWx1ZUNvbG9yUHJvdmlkZXJBZGFwdGVyRmFjdG9yeS5JTlNUQU5DRS5hZGRBZGFwdGVyRmFjdG9yeSh0aGlzKTsKKwkgKiA8L2NvZGU+CisJICogdG8gdGhlIGRlZmF1bHQgY29uc3RydWN0b3Igb2YgdGhlIG5ldyBmYWN0b3J5IGFmdGVyIHRoZSBzdXBlciBjYWxsLgorCSAqIFlvdSdyZSBub3QgZG9uZSBob3dldmVyLCB5b3UgYWxzbyBoYXZlIHRvICJmb3JjZSIgYW4gaW5zdGFuY2Ugb2YgdGhlCisJICogY2xhc3MgdG8gYmUgY3JlYXRlZCBzbyB0aGF0IHRoZSBjb25zdHJ1Y3RvciBpcyBydW4uIFRoaXMgaXMgdHlwaWNhbGx5CisJICogYWNoaWV2ZWQgYnkgYWxsb2NhdGluZyBhbiBpbnN0YW5jZSBpbiB0aGUgPGNvZGU+c3RhcnQ8L2NvZGU+IG1ldGhvZCBvZgorCSAqIHRoZSA8Y29kZT5BY3RpdmF0b3I8L2NvZGU+IG9mIHRoZSBwbHVnLWluIHRoYXQgZGVmaW5lcyB0aGUgZmFjdG9yeS4KKwkgKi8KKwlSZWxhdGl2ZVZhbHVlQ29sb3JQcm92aWRlckFkYXB0ZXJGYWN0b3J5SW1wbCBJTlNUQU5DRSA9IG5ldyBSZWxhdGl2ZVZhbHVlQ29sb3JQcm92aWRlckFkYXB0ZXJGYWN0b3J5SW1wbCgpOworCisJLyoqCisJICogVGhpcyBjbGFzcyBpcyB0aGUgaW1wbGVtZW50YXRpb24gb2YgdGhlIGZhY3RvcnkgdGhhdCBjcmVhdGVzCisJICoge0BsaW5rIFJlbGF0aXZlVmFsdWVDb2xvclByb3ZpZGVyfSdzCisJICovCisJcHVibGljIHN0YXRpYyBjbGFzcyBSZWxhdGl2ZVZhbHVlQ29sb3JQcm92aWRlckFkYXB0ZXJGYWN0b3J5SW1wbCBleHRlbmRzCisJCQlDb21wb3NlZEFkYXB0ZXJGYWN0b3J5IGltcGxlbWVudHMKKwkJCVJlbGF0aXZlVmFsdWVDb2xvclByb3ZpZGVyQWRhcHRlckZhY3RvcnkgeworCisJCS8qKgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkNvbXBvc2VkQWRhcHRlckZhY3RvcnkjaXNGYWN0b3J5Rm9yVHlwZShqYXZhLmxhbmcuT2JqZWN0KQorCQkgKi8KKwkJQE92ZXJyaWRlCisJCXB1YmxpYyBib29sZWFuIGlzRmFjdG9yeUZvclR5cGUoT2JqZWN0IHR5cGUpIHsKKwkJCXJldHVybiB0eXBlID09IFJlbGF0aXZlVmFsdWVDb2xvclByb3ZpZGVyLmNsYXNzOworCQl9IC8vIGlzRmFjdG9yeUZvclR5cGUKKwl9IC8vIFJlbGF0aXZlVmFsdWVDb2xvclByb3ZpZGVyQWRhcHRlckZhY3RvcnlJbXBsCisKK30gLy8gUmVsYXRpdmVWYWx1ZUNvbG9yUHJvdmlkZXJBZGFwdGVyRmFjdG9yeQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL2FkYXB0ZXJzL2NvbG9yL1N0YW5kYXJkQ29sb3JQcm92aWRlci5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL2FkYXB0ZXJzL2NvbG9yL1N0YW5kYXJkQ29sb3JQcm92aWRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRlODA2MDUKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvYWRhcHRlcnMvY29sb3IvU3RhbmRhcmRDb2xvclByb3ZpZGVyLmphdmEKQEAgLTAsMCArMSwxMzAgQEAKKy8vIFN0YW5kYXJkQ29sb3JQcm92aWRlci5qYXZhCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0udWkuYWRhcHRlcnMuY29sb3I7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7CitpbXBvcnQgamF2YS51dGlsLk1hcDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QcmVmZXJlbmNlczsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUHJlZmVyZW5jZXMuSVByb3BlcnR5Q2hhbmdlTGlzdGVuZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlByZWZlcmVuY2VzLlByb3BlcnR5Q2hhbmdlRXZlbnQ7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UucmVzb3VyY2UuU3RyaW5nQ29udmVydGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udWkuQWN0aXZhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udWkucHJlZmVyZW5jZXMuTWFwc0NvbG9yc1ByZWZlcmVuY2VQYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5TV1Q7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmdyYXBoaWNzLkNvbG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ncmFwaGljcy5EZXZpY2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmdyYXBoaWNzLlJHQjsKKworLyoqCisgKiBUaGlzIGNsYXNzIHByb3ZpZGVzIHN0YW5kYXJkIGNvbG9ycyBmb3IgcmVuZGVyZWQgbWFwcy4KKyAqIFRoZSBjb2xvcnMgYXJlIGJhc2VkIG9uIHRoZSBjb2xvcnMgZnJvbSB0aGUgcHJlZmVyZW5jZXMgcGFnZS4gVGhpcyBjbGFzcyBpcyBiZWluZyB1c2VkIGJlY2F1c2UKKyAqIHRha2luZyB0aGUgdmFsdWVzIGRpcmVjdGx5IGZyb20gdGhlIHByZWZlcmVuY2VzIGlzIHRpbWUgY29uc3VtaW5nIGFuZCB0aGlzIGlzIGJlaW5nIGRvbmUgbWFueQorICogdGltZXMgYW5kIHRoZSBjdW11bGF0aXZlIHRpbWUgbWF5IGJlIGxhcmdlLgorICovCitwdWJsaWMgY2xhc3MgU3RhbmRhcmRDb2xvclByb3ZpZGVyIAorCWltcGxlbWVudHMgSVByb3BlcnR5Q2hhbmdlTGlzdGVuZXIgeworCQorCS8qKgorCSAqIEEgbWFwIGZvciBob2xkaW5nIHRoZSB2YWx1ZXMgb2YgY29sb3IgSURzCisJICovCisJcHJpdmF0ZSBNYXA8U3RyaW5nLCBDb2xvcj4gY29sb3JJZFRvQ29sb3IgPSBuZXcgSGFzaE1hcDxTdHJpbmcsIENvbG9yPigpOworCQorCXByaXZhdGUgRGV2aWNlIGRldmljZSA9IG51bGw7CisJCisJLyoqCisJICogVGhlIGNvbnN0cnVjdG9yIHdpbGwgdXBkYXRlIHRoZSBjdXJyZW50IGNvbG9ycyBmcm9tIHRoZSBwcmVmZXJlbmNlcyBhbmQgcmVnaXN0ZXIKKwkgKiB0aGlzIG9iamVjdCBhcyBhIGxpc3RlbmVyIHRvIHByZWZlcmVuY2VzIGNoYW5nZXMuCisJICogQHBhcmFtIGRldmljZSBBIHtAbGluayBEZXZpY2V9IHRoYXQgd2lsbCBiZSB1c2VkIHdoZW4gY3JlYXRpbmcge0BsaW5rIENvbG9yfSBvYmplY3RzLgorCSAqLworCXB1YmxpYyBTdGFuZGFyZENvbG9yUHJvdmlkZXIoRGV2aWNlIGRldmljZSkgeworCQl0aGlzLmRldmljZSA9IGRldmljZTsKKwkJZmluYWwgUHJlZmVyZW5jZXMgcHJlZnMgPSBBY3RpdmF0b3IuZ2V0RGVmYXVsdCgpLmdldFBsdWdpblByZWZlcmVuY2VzKCk7CisJCXByZWZzLmFkZFByb3BlcnR5Q2hhbmdlTGlzdGVuZXIodGhpcyk7CisJCXVwZGF0ZUNvbG9yc0Zyb21QcmVmZXJlbmNlcygpOworCX0gLy8gU3RhbmRhcmRDb2xvclByb3ZpZGVyCisJCisJLyoqCisJICogVGhlIG1ldGhvZCB3aWxsIHJldHVybiB0aGUgYmFja2dyb3VuZCB7QGxpbmsgQ29sb3J9LgorCSAqIEByZXR1cm4gdGhlIGJhY2tncm91bmQge0BsaW5rIENvbG9yfQorCSAqLworCXB1YmxpYyBDb2xvciBnZXRCYWNrZ3JvdW5kQ29sb3IoKSB7CisJCXJldHVybiBjb2xvcklkVG9Db2xvci5nZXQoTWFwc0NvbG9yc1ByZWZlcmVuY2VQYWdlLkJBQ0tHUk9VTkRfQ09MT1JfSUQpOworCX0gLy8gZ2V0QmFja2dyb3VuZENvbG9yCisKKwkvKioKKwkgKiBUaGUgbWV0aG9kIHdpbGwgcmV0dXJuIHRoZSBib3JkZXJzIHtAbGluayBDb2xvcn0uCisJICogQHJldHVybiB0aGUgYm9yZGVycyB7QGxpbmsgQ29sb3J9CisJICovCisJcHVibGljIENvbG9yIGdldEJvcmRlcnNDb2xvcigpIHsKKwkJcmV0dXJuIGNvbG9ySWRUb0NvbG9yLmdldChNYXBzQ29sb3JzUHJlZmVyZW5jZVBhZ2UuQk9SREVSU19DT0xPUl9JRCk7CisJfSAvLyBnZXRCb3JkZXJzQ29sb3IKKwkKKwkvKioKKwkgKiBUaGUgbWV0aG9kIHdpbGwgcmV0dXJuIHRoZSBlZGdlcyB7QGxpbmsgQ29sb3J9LgorCSAqIEByZXR1cm4gdGhlIGVkZ2VzIHtAbGluayBDb2xvcn0KKwkgKi8KKwlwdWJsaWMgQ29sb3IgZ2V0RWRnZXNDb2xvcigpIHsKKwkJcmV0dXJuIGNvbG9ySWRUb0NvbG9yLmdldChNYXBzQ29sb3JzUHJlZmVyZW5jZVBhZ2UuRURHRVNfQ09MT1JfSUQpOworCX0gLy8gZ2V0RWRnZXNDb2xvcgorCisJLyoqCisJICogVGhlIG1ldGhvZCB3aWxsIHJldHVybiB0aGUgZm9yZWdyb3VuZCB7QGxpbmsgQ29sb3J9LgorCSAqIEByZXR1cm4gdGhlIGZvcmVncm91bmQge0BsaW5rIENvbG9yfQorCSAqLworCXB1YmxpYyBDb2xvciBnZXRGb3JlZ3JvdW5kQ29sb3IoKSB7CisJCXJldHVybiBjb2xvcklkVG9Db2xvci5nZXQoTWFwc0NvbG9yc1ByZWZlcmVuY2VQYWdlLkZPUkVHUk9VTkRfQ09MT1JfSUQpOworCX0gLy8gZ2V0Rm9yZWdyb3VuZENvbG9yCisJCisJLyoqCisJICogVGhlIG1ldGhvZCBpcyB1c2VkIHRvIGNvbnZlcnQgUkdCIGFzIHN0cmluZyB0byB7QGxpbmsgQ29sb3J9LiAKKwkgKiBAcGFyYW0gcmdiU3RyaW5nIHRoZSBSR0Igc3RyaW5nCisJICogQHJldHVybiB0aGUgbWF0Y2hpbmcge0BsaW5rIENvbG9yfQorCSAqLworCXB1YmxpYyBDb2xvciBnZXRDb2xvckZyb21TdHJpbmcoZmluYWwgU3RyaW5nIHJnYlN0cmluZykgeworCQlpZiAocmdiU3RyaW5nLmVxdWFscygiIikpIHsKKwkJCXJldHVybiBkZXZpY2UuZ2V0U3lzdGVtQ29sb3IoU1dULkNPTE9SX0JMQUNLKTsKKwkJfQorCQlSR0IgcmdiID0gU3RyaW5nQ29udmVydGVyLmFzUkdCKHJnYlN0cmluZyk7CisJCS8vcmV0dXJuIG5ldyBDb2xvcihyZ2IucmVkLCByZ2IuZ3JlZW4sIHJnYi5ibHVlKTsKKwkJcmV0dXJuIG5ldyBDb2xvcihkZXZpY2UsIHJnYi5yZWQsIHJnYi5ncmVlbiwgcmdiLmJsdWUpOworCX0gLy8gZ2V0Q29sb3JGcm9tU3RyaW5nCisJCisJLyoqCisJICogVGhlIG1ldGhvZCB3aWxsIHVwZGF0ZSB0aGUgY29sb3JzIGZyb20gdGhlIHByZWZlcmVuY2VzIHBhZ2UuCisJICovCisJcHJpdmF0ZSB2b2lkIHVwZGF0ZUNvbG9yc0Zyb21QcmVmZXJlbmNlcygpIHsKKwkJZmluYWwgUHJlZmVyZW5jZXMgcHJlZnMgPSBBY3RpdmF0b3IuZ2V0RGVmYXVsdCgpLmdldFBsdWdpblByZWZlcmVuY2VzKCk7CisJCVN0cmluZyBjb2xvcklkID0gTWFwc0NvbG9yc1ByZWZlcmVuY2VQYWdlLkZPUkVHUk9VTkRfQ09MT1JfSUQ7CisJCWNvbG9ySWRUb0NvbG9yLnB1dChjb2xvcklkLCBnZXRDb2xvckZyb21TdHJpbmcocHJlZnMuZ2V0U3RyaW5nKGNvbG9ySWQpKSk7CisJCWNvbG9ySWQgPSBNYXBzQ29sb3JzUHJlZmVyZW5jZVBhZ2UuQkFDS0dST1VORF9DT0xPUl9JRDsKKwkJY29sb3JJZFRvQ29sb3IucHV0KGNvbG9ySWQsIGdldENvbG9yRnJvbVN0cmluZyhwcmVmcy5nZXRTdHJpbmcoY29sb3JJZCkpKTsKKwkJY29sb3JJZCA9IE1hcHNDb2xvcnNQcmVmZXJlbmNlUGFnZS5CT1JERVJTX0NPTE9SX0lEOworCQljb2xvcklkVG9Db2xvci5wdXQoY29sb3JJZCwgZ2V0Q29sb3JGcm9tU3RyaW5nKHByZWZzLmdldFN0cmluZyhjb2xvcklkKSkpOworCQljb2xvcklkID0gTWFwc0NvbG9yc1ByZWZlcmVuY2VQYWdlLkVER0VTX0NPTE9SX0lEOworCQljb2xvcklkVG9Db2xvci5wdXQoY29sb3JJZCwgZ2V0Q29sb3JGcm9tU3RyaW5nKHByZWZzLmdldFN0cmluZyhjb2xvcklkKSkpOworCX0gLy8gdXBkYXRlQ29sb3JzRnJvbVByZWZlcmVuY2VzCisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QcmVmZXJlbmNlcy5JUHJvcGVydHlDaGFuZ2VMaXN0ZW5lciNwcm9wZXJ0eUNoYW5nZShvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUHJlZmVyZW5jZXMuUHJvcGVydHlDaGFuZ2VFdmVudCkKKwkgKi8KKwlwdWJsaWMgdm9pZCBwcm9wZXJ0eUNoYW5nZShQcm9wZXJ0eUNoYW5nZUV2ZW50IGV2ZW50KSB7CisJCVN0cmluZyBjb2xvcklkID0gZXZlbnQuZ2V0UHJvcGVydHkoKTsKKwkJaWYgKCFjb2xvcklkVG9Db2xvci5jb250YWluc0tleShjb2xvcklkKSkgeworCQkJcmV0dXJuOworCQl9CisJCUNvbG9yIGNvbG9yID0gZ2V0Q29sb3JGcm9tU3RyaW5nKChTdHJpbmcpZXZlbnQuZ2V0TmV3VmFsdWUoKSk7CisJCWNvbG9ySWRUb0NvbG9yLnB1dChjb2xvcklkLCBjb2xvcik7CisJfSAvLyBwcm9wZXJ0eUNoYW5nZQorCQorfSAvLyBTdGFuZGFyZENvbG9yUHJvdmlkZXIKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9hZGFwdGVycy9leGVjdXRhYmxlL0lkZW50aWZpYWJsZURlbGVnYXRlRXhlY3V0YWJsZUFkYXB0ZXJGYWN0b3J5LmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvYWRhcHRlcnMvZXhlY3V0YWJsZS9JZGVudGlmaWFibGVEZWxlZ2F0ZUV4ZWN1dGFibGVBZGFwdGVyRmFjdG9yeS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFjZTU4OWYKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvYWRhcHRlcnMvZXhlY3V0YWJsZS9JZGVudGlmaWFibGVEZWxlZ2F0ZUV4ZWN1dGFibGVBZGFwdGVyRmFjdG9yeS5qYXZhCkBAIC0wLDAgKzEsNDYgQEAKKy8vIElkZW50aWZpYWJsZURlbGVnYXRlRXhlY3V0YWJsZUFkYXB0ZXJGYWN0b3J5LmphdmEKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS51aS5hZGFwdGVycy5leGVjdXRhYmxlOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QbGF0Zm9ybTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmpvYnMuYWRhcHRlcnMuZXhlY3V0YWJsZS5FeGVjdXRhYmxlQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5qb2JzLmV4ZWN1dGlvbi5JRXhlY3V0YWJsZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnVpLnZpZXdzLklkZW50aWZpYWJsZURlbGVnYXRlOworCisvKioKKyAqIFRoaXMgY2xhc3MgaXMgYW4ge0BsaW5rIEV4ZWN1dGFibGVBZGFwdGVyRmFjdG9yeX0gdGhhdCBhZGFwdHMge0BsaW5rCisgKiBJZGVudGlmaWFibGVEZWxlZ2F0ZX1zIHRvIHtAbGluayBJRXhlY3V0YWJsZX1zLgorICovCitwdWJsaWMgY2xhc3MgSWRlbnRpZmlhYmxlRGVsZWdhdGVFeGVjdXRhYmxlQWRhcHRlckZhY3RvcnkgZXh0ZW5kcworCQlFeGVjdXRhYmxlQWRhcHRlckZhY3RvcnkgeworCisJLyoqCisJICogQHNlZQorCSAqIAlvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSUFkYXB0ZXJGYWN0b3J5I2dldEFkYXB0ZXIoamF2YS5sYW5nLk9iamVjdCwKKwkgKiAJamF2YS5sYW5nLkNsYXNzKQorCSAqLworCXB1YmxpYyBPYmplY3QgZ2V0QWRhcHRlcihmaW5hbCBPYmplY3QgYWRhcHRhYmxlT2JqZWN0LAorCQkJZmluYWwgQ2xhc3MgYWRhcHRlclR5cGUpIHsKKwkJSUV4ZWN1dGFibGUgcmV0VmFsdWUgPSBudWxsOworCQkvLyBJdCBpdCB3aGF0IHdlJ3JlIGxvb2tpbmcgZm9yPworCQlpZiAoYWRhcHRhYmxlT2JqZWN0IGluc3RhbmNlb2YgSWRlbnRpZmlhYmxlRGVsZWdhdGUKKwkJCQkmJiBhZGFwdGVyVHlwZS5lcXVhbHMoSUV4ZWN1dGFibGUuY2xhc3MpKSB7CisJCQkvLyBZZXMKKwkJCXJldFZhbHVlID0gKElFeGVjdXRhYmxlKSBQbGF0Zm9ybS5nZXRBZGFwdGVyTWFuYWdlcigpLmdldEFkYXB0ZXIoCisJCQkJCSgoSWRlbnRpZmlhYmxlRGVsZWdhdGUpIGFkYXB0YWJsZU9iamVjdCkuZ2V0SWRlbnRpZmlhYmxlKCksCisJCQkJCUlFeGVjdXRhYmxlLmNsYXNzKTsKKwkJfSAvLyBpZgorCQlyZXR1cm4gcmV0VmFsdWU7CisJfSAvLyBnZXRBZGFwdGVyCisKK30gLy8gSWRlbnRpZmlhYmxlRGVsZWdhdGVFeGVjdXRhYmxlQWRhcHRlckZhY3RvcnkKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9hZGFwdGVycy9mZWF0dXJlbW9kaWZpZXIvRVN0cnVjdHVyYWxGZWF0dXJlRmVhdHVyZU1vZGlmaWVyQWRhcHRlckZhY3RvcnkuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9hZGFwdGVycy9mZWF0dXJlbW9kaWZpZXIvRVN0cnVjdHVyYWxGZWF0dXJlRmVhdHVyZU1vZGlmaWVyQWRhcHRlckZhY3RvcnkuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NGM2ZTlkCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL2FkYXB0ZXJzL2ZlYXR1cmVtb2RpZmllci9FU3RydWN0dXJhbEZlYXR1cmVGZWF0dXJlTW9kaWZpZXJBZGFwdGVyRmFjdG9yeS5qYXZhCkBAIC0wLDAgKzEsMjc0IEBACisvLyBFU3RydWN0dXJhbEZlYXR1cmVGZWF0dXJlTW9kaWZpZXJBZGFwdGVyRmFjdG9yeS5qYXZhCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0udWkuYWRhcHRlcnMuZmVhdHVyZW1vZGlmaWVyOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FU3RydWN0dXJhbEZlYXR1cmU7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVjb3JlUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuTW9kZWxQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5GZWF0dXJlTW9kaWZpZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLk1vZGlmaWVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuTk9QTW9kaWZpZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLlJhbmdlTW9kaWZpZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLlNlcXVlbmNlTW9kaWZpZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLlNpbmdsZVZhbHVlTW9kaWZpZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS51aS5BY3RpdmF0b3I7CisKKy8qKgorICogVGhpcyBpbnRlcmZhY2UgZGVmaW5lcyBhbiBhZGFwdGVyIGZhY3RvcnkgdGhhdCBhZGFwdHMKKyAqIHtAbGluayBFU3RydWN0dXJhbEZlYXR1cmV9cyB0byB7QGxpbmsgRmVhdHVyZU1vZGlmaWVyfXMuCisgKi8KK3B1YmxpYyBpbnRlcmZhY2UgRVN0cnVjdHVyYWxGZWF0dXJlRmVhdHVyZU1vZGlmaWVyQWRhcHRlckZhY3RvcnkgeworCisJLyoqCisJICogU2luZ2xldG9uIGluc3RhbmNlIG9mIHRoZSBmYWN0b3J5LgorCSAqLworCUlkZW50aWZpYWJsZUZlYXR1cmVNb2RpZmllckFkYXB0ZXJGYWN0b3J5SW1wbCBJTlNUQU5DRSA9IG5ldyBJZGVudGlmaWFibGVGZWF0dXJlTW9kaWZpZXJBZGFwdGVyRmFjdG9yeUltcGwoKTsKKworCS8qKgorCSAqIFRoaXMgY2xhc3MgaXMgYW4gaW1wbGVtZW50YXRpb24gb2YKKwkgKiB7QGxpbmsgRVN0cnVjdHVyYWxGZWF0dXJlRmVhdHVyZU1vZGlmaWVyQWRhcHRlckZhY3Rvcnl9IHRoYXQgYWRhcHRzCisJICoge0BsaW5rIEVTdHJ1Y3R1cmFsRmVhdHVyZX1zIG9mCisJICoge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uSWRlbnRpZmlhYmxlfXMgdG8KKwkgKiB7QGxpbmsgRmVhdHVyZU1vZGlmaWVyfXMuCisJICogPHA+CisJICogVGhpcyBpbXBsZW1lbnRhdGlvbiBpc24ndCBxdWl0ZSBjb21wbGV0ZSBhcyBpdCBkb2Vzbid0IGFsbG93IHRoZSBmYWN0b3J5CisJICogdG8gYmUgZXh0ZW5kZWQgYnkgYWRkaW5nIGFub3RoZXIgaW1wbGVtZW50YXRpb25zIG9mCisJICoge0BsaW5rIEVTdHJ1Y3R1cmFsRmVhdHVyZUZlYXR1cmVNb2RpZmllckFkYXB0ZXJGYWN0b3J5fS4gRG9pbmcgc28gd291bGQKKwkgKiBhbGxvdyBkaWZmZXJlbnQgdHlwZXMgcHJvdmlkZWQgYnkgb3RoZXIgcGx1Z2lucyB0byBiZSBhZGFwdGVkLgorCSAqLworCXB1YmxpYyBjbGFzcyBJZGVudGlmaWFibGVGZWF0dXJlTW9kaWZpZXJBZGFwdGVyRmFjdG9yeUltcGwgaW1wbGVtZW50cworCQkJRVN0cnVjdHVyYWxGZWF0dXJlRmVhdHVyZU1vZGlmaWVyQWRhcHRlckZhY3RvcnkgeworCisJCS8qKgorCQkgKiBAcGFyYW0gb2JqCisJCSAqICAgICAgICAgICAgdGhlIHtAbGluayBFU3RydWN0dXJhbEZlYXR1cmV9IHRvIGJlIGFkYXB0ZWQKKwkJICogQHBhcmFtIHRhcmdldAorCQkgKiAgICAgICAgICAgIHRoZSBjbGFzcyB0byBhZGFwdCB0bworCQkgKiBAcmV0dXJuIGEge0BsaW5rIEZlYXR1cmVNb2RpZmllcn0gZm9yIHRoZSBvYmosIG9yIDxjb2RlPm51bGw8L2NvZGU+CisJCSAqICAgICAgICAgaWYgdGhhdCdzIG5vdCBwb3NzaWJsZS4KKwkJICovCisJCXB1YmxpYyBGZWF0dXJlTW9kaWZpZXIgYWRhcHQoZmluYWwgT2JqZWN0IG9iaiwgZmluYWwgT2JqZWN0IHRhcmdldCkgeworCQkJRmVhdHVyZU1vZGlmaWVyIHJldFZhbHVlID0gbnVsbDsKKwkJCWlmIChvYmogaW5zdGFuY2VvZiBFU3RydWN0dXJhbEZlYXR1cmUpIHsKKwkJCQkvLyBZZXMKKwkJCQlmaW5hbCBFU3RydWN0dXJhbEZlYXR1cmUgZmVhdHVyZSA9IChFU3RydWN0dXJhbEZlYXR1cmUpIG9iajsKKwkJCQlpZiAodGFyZ2V0ID09IE5PUE1vZGlmaWVyLmNsYXNzKSB7CisJCQkJCS8vIFllcworCQkJCQkvLyBJbnRlZ2VyIE5PUD8KKwkJCQkJaWYgKGZlYXR1cmUuZ2V0RVR5cGUoKSA9PSBFY29yZVBhY2thZ2UuZUlOU1RBTkNFLmdldEVJbnQoKSkgeworCQkJCQkJLy8gWWVzCisJCQkJCQlyZXRWYWx1ZSA9IE1vZGlmaWVyRmFjdG9yeS5lSU5TVEFOQ0UKKwkJCQkJCQkJLmNyZWF0ZUludGVnZXJOT1BNb2RpZmllcigpOworCQkJCQkJcmV0VmFsdWUuc2V0RVN0cnVjdHVyYWxGZWF0dXJlKGZlYXR1cmUpOworCQkJCQl9IC8vIGlmIGludGVnZXIgTk9QCisJCQkJCS8vIExvbmcgTk9QPworCQkJCQllbHNlIGlmIChmZWF0dXJlLmdldEVUeXBlKCkgPT0gRWNvcmVQYWNrYWdlLmVJTlNUQU5DRQorCQkJCQkJCS5nZXRFTG9uZygpKSB7CisJCQkJCQkvLyBZZXMKKwkJCQkJCXJldFZhbHVlID0gTW9kaWZpZXJGYWN0b3J5LmVJTlNUQU5DRQorCQkJCQkJCQkuY3JlYXRlTG9uZ05PUE1vZGlmaWVyKCk7CisJCQkJCQlyZXRWYWx1ZS5zZXRFU3RydWN0dXJhbEZlYXR1cmUoZmVhdHVyZSk7CisJCQkJCX0gLy8gaWYgTG9uZyBOT1AKKwkJCQkJLy8gRG91YmxlIE5PUD8KKwkJCQkJZWxzZSBpZiAoZmVhdHVyZS5nZXRFVHlwZSgpID09IEVjb3JlUGFja2FnZS5lSU5TVEFOQ0UKKwkJCQkJCQkuZ2V0RURvdWJsZSgpKSB7CisJCQkJCQkvLyBZZXMKKwkJCQkJCXJldFZhbHVlID0gTW9kaWZpZXJGYWN0b3J5LmVJTlNUQU5DRQorCQkJCQkJCQkuY3JlYXRlRG91YmxlTk9QTW9kaWZpZXIoKTsKKwkJCQkJCXJldFZhbHVlLnNldEVTdHJ1Y3R1cmFsRmVhdHVyZShmZWF0dXJlKTsKKwkJCQkJfSAvLyBpZiBkb3VibGUgTk9QCisJCQkJCS8vIFNURU1UaW1lIE5PUD8KKwkJCQkJZWxzZSBpZiAoZmVhdHVyZS5nZXRFVHlwZSgpID09IE1vZGVsUGFja2FnZS5lSU5TVEFOQ0UKKwkJCQkJCQkuZ2V0U1RFTVRpbWUoKSkgeworCQkJCQkJLy8gWWVzCisJCQkJCQlyZXRWYWx1ZSA9IE1vZGlmaWVyRmFjdG9yeS5lSU5TVEFOQ0UKKwkJCQkJCQkJLmNyZWF0ZVNURU1UaW1lTk9QTW9kaWZpZXIoKTsKKwkJCQkJCXJldFZhbHVlLnNldEVTdHJ1Y3R1cmFsRmVhdHVyZShmZWF0dXJlKTsKKwkJCQkJfSAvLyBpZiBTVEVNVGltZSBOT1AKKwkJCQkJLy8gU3RyaW5nIE5PUD8KKwkJCQkJZWxzZSBpZiAoZmVhdHVyZS5nZXRFVHlwZSgpID09IEVjb3JlUGFja2FnZS5lSU5TVEFOQ0UKKwkJCQkJCQkuZ2V0RVN0cmluZygpKSB7CisJCQkJCQkvLyBZZXMKKwkJCQkJCXJldFZhbHVlID0gTW9kaWZpZXJGYWN0b3J5LmVJTlNUQU5DRQorCQkJCQkJCQkuY3JlYXRlU3RyaW5nTk9QTW9kaWZpZXIoKTsKKwkJCQkJCXJldFZhbHVlLnNldEVTdHJ1Y3R1cmFsRmVhdHVyZShmZWF0dXJlKTsKKwkJCQkJfSAvLyBpZiBTdHJpbmcgTk9QCisJCQkJCWVsc2UgeworCQkJCQkJLy8gTm8KKwkJCQkJCS8vIE5vdCBpbXBsZW1lbnRlZAorLy8JCQkJCQlBY3RpdmF0b3IubG9nRXJyb3IoIkZlYXR1cmVNb2RpZmllckFkYXB0ZXIgZm9yIHR5cGUgXCIiCisvLwkJCQkJCQkJKyBmZWF0dXJlLmdldEVUeXBlKCkuZ2V0TmFtZSgpCisvLwkJCQkJCQkJKyAiXCIgaXMgbm90IGltcGxlbWVudGVkLiIsIG51bGwpOworCQkJCQkJcmV0VmFsdWUgPSBNb2RpZmllckZhY3RvcnkuZUlOU1RBTkNFCisJCQkJCQkJCS5jcmVhdGVOT1BNb2RpZmllcigpOworCQkJCQkJcmV0VmFsdWUuc2V0RVN0cnVjdHVyYWxGZWF0dXJlKGZlYXR1cmUpOworCQkJCQl9IC8vIGVsc2UKKwkJCQl9IC8vIGlmIE5PUE1vZGlmaWVyCisJCQkJZWxzZSBpZiAodGFyZ2V0ID09IFNpbmdsZVZhbHVlTW9kaWZpZXIuY2xhc3MpIHsKKwkJCQkJLy8gWWVzCisJCQkJCS8vIEludGVnZXIgcmFuZ2U/CisJCQkJCWlmIChmZWF0dXJlLmdldEVUeXBlKCkgPT0gRWNvcmVQYWNrYWdlLmVJTlNUQU5DRS5nZXRFSW50KCkpIHsKKwkJCQkJCS8vIFllcworCQkJCQkJcmV0VmFsdWUgPSBNb2RpZmllckZhY3RvcnkuZUlOU1RBTkNFCisJCQkJCQkJCS5jcmVhdGVJbnRlZ2VyTW9kaWZpZXIoKTsKKwkJCQkJCXJldFZhbHVlLnNldEVTdHJ1Y3R1cmFsRmVhdHVyZShmZWF0dXJlKTsKKwkJCQkJfSAvLyBpZiBpbnRlZ2VyIHJhbmdlCisJCQkJCS8vIExvbmcgcmFuZ2U/CisJCQkJCWVsc2UgaWYgKGZlYXR1cmUuZ2V0RVR5cGUoKSA9PSBFY29yZVBhY2thZ2UuZUlOU1RBTkNFCisJCQkJCQkJLmdldEVMb25nKCkpIHsKKwkJCQkJCS8vIFllcworCQkJCQkJcmV0VmFsdWUgPSBNb2RpZmllckZhY3RvcnkuZUlOU1RBTkNFCisJCQkJCQkJCS5jcmVhdGVMb25nTW9kaWZpZXIoKTsKKwkJCQkJCXJldFZhbHVlLnNldEVTdHJ1Y3R1cmFsRmVhdHVyZShmZWF0dXJlKTsKKwkJCQkJfSAvLyBpZiBMb25nIHJhbmdlCisJCQkJCS8vIERvdWJsZSByYW5nZT8KKwkJCQkJZWxzZSBpZiAoZmVhdHVyZS5nZXRFVHlwZSgpID09IEVjb3JlUGFja2FnZS5lSU5TVEFOQ0UKKwkJCQkJCQkuZ2V0RURvdWJsZSgpKSB7CisJCQkJCQkvLyBZZXMKKwkJCQkJCXJldFZhbHVlID0gTW9kaWZpZXJGYWN0b3J5LmVJTlNUQU5DRQorCQkJCQkJCQkuY3JlYXRlRG91YmxlTW9kaWZpZXIoKTsKKwkJCQkJCXJldFZhbHVlLnNldEVTdHJ1Y3R1cmFsRmVhdHVyZShmZWF0dXJlKTsKKwkJCQkJfSAvLyBpZiBkb3VibGUgcmFuZ2UKKwkJCQkJLy8gU1RFTVRpbWUgcmFuZ2U/CisJCQkJCWVsc2UgaWYgKGZlYXR1cmUuZ2V0RVR5cGUoKSA9PSBNb2RlbFBhY2thZ2UuZUlOU1RBTkNFCisJCQkJCQkJLmdldFNURU1UaW1lKCkpIHsKKwkJCQkJCS8vIFllcworCQkJCQkJcmV0VmFsdWUgPSBNb2RpZmllckZhY3RvcnkuZUlOU1RBTkNFCisJCQkJCQkJCS5jcmVhdGVTVEVNVGltZU1vZGlmaWVyKCk7CisJCQkJCQlyZXRWYWx1ZS5zZXRFU3RydWN0dXJhbEZlYXR1cmUoZmVhdHVyZSk7CisJCQkJCX0gLy8gaWYgU1RFTVRpbWUgcmFuZ2UKKwkJCQkJZWxzZSB7CisJCQkJCQkvLyBObworCQkJCQkJLy8gTm90IGltcGxlbWVudGVkCisJCQkJCQlBY3RpdmF0b3IubG9nRXJyb3IoIkZlYXR1cmVNb2RpZmllckFkYXB0ZXIgZm9yIHR5cGUgXCIiCisJCQkJCQkJCSsgZmVhdHVyZS5nZXRFVHlwZSgpLmdldE5hbWUoKQorCQkJCQkJCQkrICJcIiBpcyBub3QgaW1wbGVtZW50ZWQuIiwgbnVsbCk7CisJCQkJCQlyZXRWYWx1ZSA9IE1vZGlmaWVyRmFjdG9yeS5lSU5TVEFOQ0UKKwkJCQkJCQkJLmNyZWF0ZU5PUE1vZGlmaWVyKCk7CisJCQkJCQlyZXRWYWx1ZS5zZXRFU3RydWN0dXJhbEZlYXR1cmUoZmVhdHVyZSk7CisJCQkJCX0KKwkJCQl9IC8vIGlmIFJhbmdlIE1vZGlmaWVyCisJCQkJZWxzZSBpZiAodGFyZ2V0ID09IFJhbmdlTW9kaWZpZXIuY2xhc3MpIHsKKwkJCQkJLy8gWWVzCisJCQkJCS8vIEludGVnZXIgcmFuZ2U/CisJCQkJCWlmIChmZWF0dXJlLmdldEVUeXBlKCkgPT0gRWNvcmVQYWNrYWdlLmVJTlNUQU5DRS5nZXRFSW50KCkpIHsKKwkJCQkJCS8vIFllcworCQkJCQkJcmV0VmFsdWUgPSBNb2RpZmllckZhY3RvcnkuZUlOU1RBTkNFCisJCQkJCQkJCS5jcmVhdGVJbnRlZ2VyUmFuZ2VNb2RpZmllcigpOworCQkJCQkJcmV0VmFsdWUuc2V0RVN0cnVjdHVyYWxGZWF0dXJlKGZlYXR1cmUpOworCQkJCQl9IC8vIGlmIGludGVnZXIgcmFuZ2UKKwkJCQkJLy8gTG9uZyByYW5nZT8KKwkJCQkJZWxzZSBpZiAoZmVhdHVyZS5nZXRFVHlwZSgpID09IEVjb3JlUGFja2FnZS5lSU5TVEFOQ0UKKwkJCQkJCQkuZ2V0RUxvbmcoKSkgeworCQkJCQkJLy8gWWVzCisJCQkJCQlyZXRWYWx1ZSA9IE1vZGlmaWVyRmFjdG9yeS5lSU5TVEFOQ0UKKwkJCQkJCQkJLmNyZWF0ZUxvbmdSYW5nZU1vZGlmaWVyKCk7CisJCQkJCQlyZXRWYWx1ZS5zZXRFU3RydWN0dXJhbEZlYXR1cmUoZmVhdHVyZSk7CisJCQkJCX0gLy8gaWYgTG9uZyByYW5nZQorCQkJCQkvLyBEb3VibGUgcmFuZ2U/CisJCQkJCWVsc2UgaWYgKGZlYXR1cmUuZ2V0RVR5cGUoKSA9PSBFY29yZVBhY2thZ2UuZUlOU1RBTkNFCisJCQkJCQkJLmdldEVEb3VibGUoKSkgeworCQkJCQkJLy8gWWVzCisJCQkJCQlyZXRWYWx1ZSA9IE1vZGlmaWVyRmFjdG9yeS5lSU5TVEFOQ0UKKwkJCQkJCQkJLmNyZWF0ZURvdWJsZVJhbmdlTW9kaWZpZXIoKTsKKwkJCQkJCXJldFZhbHVlLnNldEVTdHJ1Y3R1cmFsRmVhdHVyZShmZWF0dXJlKTsKKwkJCQkJfSAvLyBpZiBkb3VibGUgcmFuZ2UKKwkJCQkJLy8gU1RFTVRpbWUgcmFuZ2U/CisJCQkJCWVsc2UgaWYgKGZlYXR1cmUuZ2V0RVR5cGUoKSA9PSBNb2RlbFBhY2thZ2UuZUlOU1RBTkNFCisJCQkJCQkJLmdldFNURU1UaW1lKCkpIHsKKwkJCQkJCS8vIFllcworCQkJCQkJcmV0VmFsdWUgPSBNb2RpZmllckZhY3RvcnkuZUlOU1RBTkNFCisJCQkJCQkJCS5jcmVhdGVTVEVNVGltZVJhbmdlTW9kaWZpZXIoKTsKKwkJCQkJCXJldFZhbHVlLnNldEVTdHJ1Y3R1cmFsRmVhdHVyZShmZWF0dXJlKTsKKwkJCQkJfSAvLyBpZiBTVEVNVGltZSByYW5nZQorCQkJCQllbHNlIHsKKwkJCQkJCS8vIE5vCisJCQkJCQkvLyBOb3QgaW1wbGVtZW50ZWQKKwkJCQkJCUFjdGl2YXRvci5sb2dFcnJvcigiRmVhdHVyZU1vZGlmaWVyQWRhcHRlciBmb3IgdHlwZSBcIiIKKwkJCQkJCQkJKyBmZWF0dXJlLmdldEVUeXBlKCkuZ2V0TmFtZSgpCisJCQkJCQkJCSsgIlwiIGlzIG5vdCBpbXBsZW1lbnRlZC4iLCBudWxsKTsKKwkJCQkJCXJldFZhbHVlID0gTW9kaWZpZXJGYWN0b3J5LmVJTlNUQU5DRQorCQkJCQkJCQkuY3JlYXRlTk9QTW9kaWZpZXIoKTsKKwkJCQkJCXJldFZhbHVlLnNldEVTdHJ1Y3R1cmFsRmVhdHVyZShmZWF0dXJlKTsKKwkJCQkJfQorCQkJCX0gLy8gaWYgUmFuZ2UgTW9kaWZpZXIKKwkJCQkvLyBTZXF1ZW5jZT8KKwkJCQllbHNlIGlmICh0YXJnZXQgPT0gU2VxdWVuY2VNb2RpZmllci5jbGFzcykgeworCQkJCQkvLyBZZXMKKwkJCQkJLy8gSW50ZWdlciBTZXF1ZW5jZT8KKwkJCQkJaWYgKGZlYXR1cmUuZ2V0RVR5cGUoKSA9PSBFY29yZVBhY2thZ2UuZUlOU1RBTkNFLmdldEVJbnQoKSkgeworCQkJCQkJLy8gWWVzCisJCQkJCQlyZXRWYWx1ZSA9IE1vZGlmaWVyRmFjdG9yeS5lSU5TVEFOQ0UKKwkJCQkJCQkJLmNyZWF0ZUludGVnZXJTZXF1ZW5jZU1vZGlmaWVyKCk7CisJCQkJCQlyZXRWYWx1ZS5zZXRFU3RydWN0dXJhbEZlYXR1cmUoZmVhdHVyZSk7CisJCQkJCX0gLy8gaWYgaW50ZWdlciBTZXF1ZW5jZQorCQkJCQkvLyBMb25nIFNlcXVlbmNlPworCQkJCQllbHNlIGlmIChmZWF0dXJlLmdldEVUeXBlKCkgPT0gRWNvcmVQYWNrYWdlLmVJTlNUQU5DRQorCQkJCQkJCS5nZXRFTG9uZygpKSB7CisJCQkJCQkvLyBZZXMKKwkJCQkJCXJldFZhbHVlID0gTW9kaWZpZXJGYWN0b3J5LmVJTlNUQU5DRQorCQkJCQkJCQkuY3JlYXRlTG9uZ1NlcXVlbmNlTW9kaWZpZXIoKTsKKwkJCQkJCXJldFZhbHVlLnNldEVTdHJ1Y3R1cmFsRmVhdHVyZShmZWF0dXJlKTsKKwkJCQkJfSAvLyBpZiBMb25nIFNlcXVlbmNlCisJCQkJCS8vIERvdWJsZSBTZXF1ZW5jZT8KKwkJCQkJZWxzZSBpZiAoZmVhdHVyZS5nZXRFVHlwZSgpID09IEVjb3JlUGFja2FnZS5lSU5TVEFOQ0UKKwkJCQkJCQkuZ2V0RURvdWJsZSgpKSB7CisJCQkJCQkvLyBZZXMKKwkJCQkJCXJldFZhbHVlID0gTW9kaWZpZXJGYWN0b3J5LmVJTlNUQU5DRQorCQkJCQkJCQkuY3JlYXRlRG91YmxlU2VxdWVuY2VNb2RpZmllcigpOworCQkJCQkJcmV0VmFsdWUuc2V0RVN0cnVjdHVyYWxGZWF0dXJlKGZlYXR1cmUpOworCQkJCQl9IC8vIGlmIGRvdWJsZSBTZXF1ZW5jZQorCQkJCQkvLyBTVEVNVGltZSBTZXF1ZW5jZT8KKwkJCQkJZWxzZSBpZiAoZmVhdHVyZS5nZXRFVHlwZSgpID09IE1vZGVsUGFja2FnZS5lSU5TVEFOQ0UKKwkJCQkJCQkuZ2V0U1RFTVRpbWUoKSkgeworCQkJCQkJLy8gWWVzCisJCQkJCQlyZXRWYWx1ZSA9IE1vZGlmaWVyRmFjdG9yeS5lSU5TVEFOQ0UKKwkJCQkJCQkJLmNyZWF0ZVNURU1UaW1lU2VxdWVuY2VNb2RpZmllcigpOworCQkJCQkJcmV0VmFsdWUuc2V0RVN0cnVjdHVyYWxGZWF0dXJlKGZlYXR1cmUpOworCQkJCQl9IC8vIGlmIFNURU1UaW1lIFNlcXVlbmNlCisJCQkJCS8vIFN0cmluZyBTZXF1ZW5jZT8KKwkJCQkJZWxzZSBpZiAoZmVhdHVyZS5nZXRFVHlwZSgpID09IEVjb3JlUGFja2FnZS5lSU5TVEFOQ0UKKwkJCQkJCQkuZ2V0RVN0cmluZygpKSB7CisJCQkJCQkvLyBZZXMKKwkJCQkJCXJldFZhbHVlID0gTW9kaWZpZXJGYWN0b3J5LmVJTlNUQU5DRQorCQkJCQkJCQkuY3JlYXRlU3RyaW5nU2VxdWVuY2VNb2RpZmllcigpOworCQkJCQkJcmV0VmFsdWUuc2V0RVN0cnVjdHVyYWxGZWF0dXJlKGZlYXR1cmUpOworCQkJCQl9IC8vIGlmIFN0cmluZyBTZXF1ZW5jZQorCQkJCQllbHNlIHsKKwkJCQkJCS8vIE5vCisJCQkJCQkvLyBOb3QgaW1wbGVtZW50ZWQKKwkJCQkJCUFjdGl2YXRvci5sb2dFcnJvcigiRmVhdHVyZU1vZGlmaWVyQWRhcHRlciBmb3IgdHlwZSBcIiIKKwkJCQkJCQkJKyBmZWF0dXJlLmdldEVUeXBlKCkuZ2V0TmFtZSgpCisJCQkJCQkJCSsgIlwiIGlzIG5vdCBpbXBsZW1lbnRlZC4iLCBudWxsKTsKKwkJCQkJCXJldFZhbHVlID0gTW9kaWZpZXJGYWN0b3J5LmVJTlNUQU5DRQorCQkJCQkJCQkuY3JlYXRlTk9QTW9kaWZpZXIoKTsKKwkJCQkJCXJldFZhbHVlLnNldEVTdHJ1Y3R1cmFsRmVhdHVyZShmZWF0dXJlKTsKKwkJCQkJfQorCQkJCX0gLy8gaWYgU2VxdWVuY2UgTW9kaWZpZXIKKwkJCQllbHNlIHsKKwkJCQkJLy8gTm8KKwkJCQkJLy8gTm90IGltcGxlbWVudGVkCisJCQkJCUFjdGl2YXRvci5sb2dFcnJvcigiRmVhdHVyZU1vZGlmaWVyQWRhcHRlciBmb3IgdHlwZSBcIiIKKwkJCQkJCQkrIGZlYXR1cmUuZ2V0RVR5cGUoKS5nZXROYW1lKCkKKwkJCQkJCQkrICJcIiBpcyBub3QgaW1wbGVtZW50ZWQuIiwgbnVsbCk7CisJCQkJCXJldFZhbHVlID0gTW9kaWZpZXJGYWN0b3J5LmVJTlNUQU5DRQorCQkJCQkJCS5jcmVhdGVOT1BNb2RpZmllcigpOworCQkJCQlyZXRWYWx1ZS5zZXRFU3RydWN0dXJhbEZlYXR1cmUoZmVhdHVyZSk7CisJCQkJfQorCQkJfSAvLyBpZiBFU3RydWN0dXJhbEZlYXR1cmUKKwkJCXJldHVybiByZXRWYWx1ZTsKKwkJfSAvLyBhZGFwdAorCisJfSAvLyBJZGVudGlmaWFibGVGZWF0dXJlTW9kaWZpZXJBZGFwdGVyRmFjdG9yeUltcGwKKworfSAvLyBFU3RydWN0dXJhbEZlYXR1cmVGZWF0dXJlTW9kaWZpZXJBZGFwdGVyRmFjdG9yeQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL2FkYXB0ZXJzL2ZlYXR1cmVtb2RpZmllcmVkaXRjb21wb3NpdGUvRXhwZXJpbWVudEZlYXR1cmVNb2RpZmllckVkaXRDb21wb3NpdGVGYWN0b3J5LmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvYWRhcHRlcnMvZmVhdHVyZW1vZGlmaWVyZWRpdGNvbXBvc2l0ZS9FeHBlcmltZW50RmVhdHVyZU1vZGlmaWVyRWRpdENvbXBvc2l0ZUZhY3RvcnkuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZjBhMzhlCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL2FkYXB0ZXJzL2ZlYXR1cmVtb2RpZmllcmVkaXRjb21wb3NpdGUvRXhwZXJpbWVudEZlYXR1cmVNb2RpZmllckVkaXRDb21wb3NpdGVGYWN0b3J5LmphdmEKQEAgLTAsMCArMSwyMDYgQEAKKy8vIEV4cGVyaW1lbnRGZWF0dXJlTW9kaWZpZXJFZGl0Q29tcG9zaXRlRmFjdG9yeS5qYXZhCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0udWkuYWRhcHRlcnMuZmVhdHVyZW1vZGlmaWVyZWRpdGNvbXBvc2l0ZTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5BZGFwdGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci51dGlsLk1vZGlmaWVyQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS51aS5hZGFwdGVycy5mZWF0dXJlbW9kaWZpZXJlZGl0Y29tcG9zaXRlLlJhbmdlRmVhdHVyZU1vZGlmaWVyRWRpdENvbXBvc2l0ZUFkYXB0ZXIuRG91YmxlUmFuZ2VGZWF0dXJlTW9kaWZpZXJFZGl0Q29tcG9zaXRlQWRhcHRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnVpLmFkYXB0ZXJzLmZlYXR1cmVtb2RpZmllcmVkaXRjb21wb3NpdGUuUmFuZ2VGZWF0dXJlTW9kaWZpZXJFZGl0Q29tcG9zaXRlQWRhcHRlci5JbnRlZ2VyUmFuZ2VGZWF0dXJlTW9kaWZpZXJFZGl0Q29tcG9zaXRlQWRhcHRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnVpLmFkYXB0ZXJzLmZlYXR1cmVtb2RpZmllcmVkaXRjb21wb3NpdGUuUmFuZ2VGZWF0dXJlTW9kaWZpZXJFZGl0Q29tcG9zaXRlQWRhcHRlci5Mb25nUmFuZ2VGZWF0dXJlTW9kaWZpZXJFZGl0Q29tcG9zaXRlQWRhcHRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnVpLmFkYXB0ZXJzLmZlYXR1cmVtb2RpZmllcmVkaXRjb21wb3NpdGUuUmFuZ2VGZWF0dXJlTW9kaWZpZXJFZGl0Q29tcG9zaXRlQWRhcHRlci5TVEVNVGltZVJhbmdlRmVhdHVyZU1vZGlmaWVyRWRpdENvbXBvc2l0ZUFkYXB0ZXI7CisKKy8qKgorICogVGhpcyBjbGFzcyBpcyBhbiB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuQWRhcHRlckZhY3Rvcnl9IHRoYXQKKyAqIGFkYXB0cyB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLkZlYXR1cmVNb2RpZmllcn1zIHRvCisgKiB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS51aS53aXphcmRzLk5ld01vZGlmaWVyUGFnZS5GZWF0dXJlTW9kaWZpZXJFZGl0Q29tcG9zaXRlfQorICogcy4KKyAqLworcHVibGljIGNsYXNzIEV4cGVyaW1lbnRGZWF0dXJlTW9kaWZpZXJFZGl0Q29tcG9zaXRlRmFjdG9yeSBleHRlbmRzCisJCU1vZGlmaWVyQWRhcHRlckZhY3RvcnkgeworCisJLyoqCisJICogRGVmYXVsdCBDb25zdHJ1Y3Rvci4KKwkgKiAKKwkgKiBJdCBhZGRzIGFuIGluc3RhbmNlIG9mIHRoZSB0aGlzIGZhY3RvcnkgdG8KKwkgKiB7QGxpbmsgRmVhdHVyZU1vZGlmaWVyRmVhdHVyZU1vZGlmaWVyRWRpdENvbXBvc2l0ZUFkYXB0ZXJGYWN0b3J5I0lOU1RBTkNFfS4KKwkgKi8KKwlwdWJsaWMgRXhwZXJpbWVudEZlYXR1cmVNb2RpZmllckVkaXRDb21wb3NpdGVGYWN0b3J5KCkgeworCQlzdXBlcigpOworCQlGZWF0dXJlTW9kaWZpZXJGZWF0dXJlTW9kaWZpZXJFZGl0Q29tcG9zaXRlQWRhcHRlckZhY3RvcnkuSU5TVEFOQ0UKKwkJCQkuYWRkQWRhcHRlckZhY3RvcnkodGhpcyk7CisJfSAvLyBJbnRlZ2VyUmFuZ2VGZWF0dXJlTW9kaWZpZXJFZGl0Q29tcG9zaXRlQWRhcHRlcgorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIudXRpbC5Nb2RpZmllckFkYXB0ZXJGYWN0b3J5I2NyZWF0ZU5PUE1vZGlmaWVyQWRhcHRlcigpCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlTk9QTW9kaWZpZXJBZGFwdGVyKCkgeworCQlyZXR1cm4gbmV3IE5PUEZlYXR1cmVNb2RpZmllckVkaXRDb21wb3NpdGVBZGFwdGVyKCk7CisJfQorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIudXRpbC5Nb2RpZmllckFkYXB0ZXJGYWN0b3J5I2NyZWF0ZURvdWJsZU5PUE1vZGlmaWVyQWRhcHRlcigpCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlRG91YmxlTk9QTW9kaWZpZXJBZGFwdGVyKCkgeworCQlyZXR1cm4gbmV3IE5PUEZlYXR1cmVNb2RpZmllckVkaXRDb21wb3NpdGVBZGFwdGVyLk51bWVyaWNOT1BGZWF0dXJlTW9kaWZpZXJFZGl0Q29tcG9zaXRlQWRhcHRlcigpOworCX0KKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLnV0aWwuTW9kaWZpZXJBZGFwdGVyRmFjdG9yeSNjcmVhdGVEb3VibGVSYW5nZU1vZGlmaWVyQWRhcHRlcigpCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlRG91YmxlUmFuZ2VNb2RpZmllckFkYXB0ZXIoKSB7CisJCXJldHVybiBuZXcgRG91YmxlUmFuZ2VGZWF0dXJlTW9kaWZpZXJFZGl0Q29tcG9zaXRlQWRhcHRlcigpOworCX0KKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLnV0aWwuTW9kaWZpZXJBZGFwdGVyRmFjdG9yeSNjcmVhdGVJbnRlZ2VyTk9QTW9kaWZpZXJBZGFwdGVyKCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVJbnRlZ2VyTk9QTW9kaWZpZXJBZGFwdGVyKCkgeworCQlyZXR1cm4gbmV3IE5PUEZlYXR1cmVNb2RpZmllckVkaXRDb21wb3NpdGVBZGFwdGVyLk51bWVyaWNOT1BGZWF0dXJlTW9kaWZpZXJFZGl0Q29tcG9zaXRlQWRhcHRlcigpOworCX0KKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLnV0aWwuTW9kaWZpZXJBZGFwdGVyRmFjdG9yeSNjcmVhdGVJbnRlZ2VyUmFuZ2VNb2RpZmllckFkYXB0ZXIoKQorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZUludGVnZXJSYW5nZU1vZGlmaWVyQWRhcHRlcigpIHsKKwkJcmV0dXJuIG5ldyBJbnRlZ2VyUmFuZ2VGZWF0dXJlTW9kaWZpZXJFZGl0Q29tcG9zaXRlQWRhcHRlcigpOworCX0KKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLnV0aWwuTW9kaWZpZXJBZGFwdGVyRmFjdG9yeSNjcmVhdGVMb25nTk9QTW9kaWZpZXJBZGFwdGVyKCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVMb25nTk9QTW9kaWZpZXJBZGFwdGVyKCkgeworCQlyZXR1cm4gbmV3IE5PUEZlYXR1cmVNb2RpZmllckVkaXRDb21wb3NpdGVBZGFwdGVyLk51bWVyaWNOT1BGZWF0dXJlTW9kaWZpZXJFZGl0Q29tcG9zaXRlQWRhcHRlcigpOworCX0KKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLnV0aWwuTW9kaWZpZXJBZGFwdGVyRmFjdG9yeSNjcmVhdGVMb25nUmFuZ2VNb2RpZmllckFkYXB0ZXIoKQorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZUxvbmdSYW5nZU1vZGlmaWVyQWRhcHRlcigpIHsKKwkJcmV0dXJuIG5ldyBMb25nUmFuZ2VGZWF0dXJlTW9kaWZpZXJFZGl0Q29tcG9zaXRlQWRhcHRlcigpOworCX0KKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLnV0aWwuTW9kaWZpZXJBZGFwdGVyRmFjdG9yeSNjcmVhdGVTdHJpbmdOT1BNb2RpZmllckFkYXB0ZXIoKQorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZVN0cmluZ05PUE1vZGlmaWVyQWRhcHRlcigpIHsKKwkJcmV0dXJuIG5ldyBOT1BGZWF0dXJlTW9kaWZpZXJFZGl0Q29tcG9zaXRlQWRhcHRlci5TdHJpbmdOT1BGZWF0dXJlTW9kaWZpZXJFZGl0Q29tcG9zaXRlQWRhcHRlcigpOworCX0KKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLnV0aWwuTW9kaWZpZXJBZGFwdGVyRmFjdG9yeSNjcmVhdGVEb3VibGVNb2RpZmllckFkYXB0ZXIoKQorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZURvdWJsZU1vZGlmaWVyQWRhcHRlcigpIHsKKwkJcmV0dXJuIG5ldyBTaW5nbGVWYWx1ZUZlYXR1cmVNb2RpZmllckVkaXRDb21wb3NpdGVBZGFwdGVyLkRvdWJsZUZlYXR1cmVNb2RpZmllckVkaXRDb21wb3NpdGVBZGFwdGVyKCk7CisJfQorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIudXRpbC5Nb2RpZmllckFkYXB0ZXJGYWN0b3J5I2NyZWF0ZUludGVnZXJNb2RpZmllckFkYXB0ZXIoKQorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZUludGVnZXJNb2RpZmllckFkYXB0ZXIoKSB7CisJCXJldHVybiBuZXcgU2luZ2xlVmFsdWVGZWF0dXJlTW9kaWZpZXJFZGl0Q29tcG9zaXRlQWRhcHRlci5JbnRlZ2VyRmVhdHVyZU1vZGlmaWVyRWRpdENvbXBvc2l0ZUFkYXB0ZXIoKTsKKwl9CisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci51dGlsLk1vZGlmaWVyQWRhcHRlckZhY3RvcnkjY3JlYXRlTG9uZ01vZGlmaWVyQWRhcHRlcigpCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlTG9uZ01vZGlmaWVyQWRhcHRlcigpIHsKKwkJcmV0dXJuIG5ldyBTaW5nbGVWYWx1ZUZlYXR1cmVNb2RpZmllckVkaXRDb21wb3NpdGVBZGFwdGVyLkxvbmdGZWF0dXJlTW9kaWZpZXJFZGl0Q29tcG9zaXRlQWRhcHRlcigpOworCX0KKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLnV0aWwuTW9kaWZpZXJBZGFwdGVyRmFjdG9yeSNjcmVhdGVTVEVNVGltZU1vZGlmaWVyQWRhcHRlcigpCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlU1RFTVRpbWVNb2RpZmllckFkYXB0ZXIoKSB7CisJCXJldHVybiBuZXcgU2luZ2xlVmFsdWVGZWF0dXJlTW9kaWZpZXJFZGl0Q29tcG9zaXRlQWRhcHRlci5TVEVNVGltZUZlYXR1cmVNb2RpZmllckVkaXRDb21wb3NpdGVBZGFwdGVyKCk7CisJfQorCQorCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLnV0aWwuTW9kaWZpZXJBZGFwdGVyRmFjdG9yeSNjcmVhdGVEb3VibGVTZXF1ZW5jZU1vZGlmaWVyQWRhcHRlcigpCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlRG91YmxlU2VxdWVuY2VNb2RpZmllckFkYXB0ZXIoKSB7CisJCXJldHVybiBuZXcgU2VxdWVuY2VGZWF0dXJlTW9kaWZpZXJFZGl0Q29tcG9zaXRlQWRhcHRlci5Eb3VibGVTZXF1ZW5jZUZlYXR1cmVNb2RpZmllckVkaXRDb21wb3NpdGVBZGFwdGVyKCk7CisJfQorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIudXRpbC5Nb2RpZmllckFkYXB0ZXJGYWN0b3J5I2NyZWF0ZUludGVnZXJTZXF1ZW5jZU1vZGlmaWVyQWRhcHRlcigpCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlSW50ZWdlclNlcXVlbmNlTW9kaWZpZXJBZGFwdGVyKCkgeworCQlyZXR1cm4gbmV3IFNlcXVlbmNlRmVhdHVyZU1vZGlmaWVyRWRpdENvbXBvc2l0ZUFkYXB0ZXIuSW50ZWdlclNlcXVlbmNlRmVhdHVyZU1vZGlmaWVyRWRpdENvbXBvc2l0ZUFkYXB0ZXIoKTsKKwl9CisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci51dGlsLk1vZGlmaWVyQWRhcHRlckZhY3RvcnkjY3JlYXRlTG9uZ1NlcXVlbmNlTW9kaWZpZXJBZGFwdGVyKCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVMb25nU2VxdWVuY2VNb2RpZmllckFkYXB0ZXIoKSB7CisJCXJldHVybiBuZXcgU2VxdWVuY2VGZWF0dXJlTW9kaWZpZXJFZGl0Q29tcG9zaXRlQWRhcHRlci5Mb25nU2VxdWVuY2VGZWF0dXJlTW9kaWZpZXJFZGl0Q29tcG9zaXRlQWRhcHRlcigpOworCX0KKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLnV0aWwuTW9kaWZpZXJBZGFwdGVyRmFjdG9yeSNjcmVhdGVTVEVNVGltZVNlcXVlbmNlTW9kaWZpZXJBZGFwdGVyKCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVTVEVNVGltZVNlcXVlbmNlTW9kaWZpZXJBZGFwdGVyKCkgeworCQlyZXR1cm4gbmV3IFNlcXVlbmNlRmVhdHVyZU1vZGlmaWVyRWRpdENvbXBvc2l0ZUFkYXB0ZXIuU1RFTVRpbWVTZXF1ZW5jZUZlYXR1cmVNb2RpZmllckVkaXRDb21wb3NpdGVBZGFwdGVyKCk7CisJfQorCQorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIudXRpbC5Nb2RpZmllckFkYXB0ZXJGYWN0b3J5I2NyZWF0ZVN0cmluZ1NlcXVlbmNlTW9kaWZpZXJBZGFwdGVyKCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVTdHJpbmdTZXF1ZW5jZU1vZGlmaWVyQWRhcHRlcigpIHsKKwkJLy8gVE9ETyBBdXRvLWdlbmVyYXRlZCBtZXRob2Qgc3R1YgorCQlyZXR1cm4gc3VwZXIuY3JlYXRlU3RyaW5nU2VxdWVuY2VNb2RpZmllckFkYXB0ZXIoKTsKKwl9CisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci51dGlsLk1vZGlmaWVyQWRhcHRlckZhY3RvcnkjY3JlYXRlU1RFTVRpbWVOT1BNb2RpZmllckFkYXB0ZXIoKQorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZVNURU1UaW1lTk9QTW9kaWZpZXJBZGFwdGVyKCkgeworCQlyZXR1cm4gbmV3IE5PUEZlYXR1cmVNb2RpZmllckVkaXRDb21wb3NpdGVBZGFwdGVyLlNURU1UaW1lTk9QRmVhdHVyZU1vZGlmaWVyRWRpdENvbXBvc2l0ZUFkYXB0ZXIoKTsKKwl9CisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci51dGlsLk1vZGlmaWVyQWRhcHRlckZhY3RvcnkjY3JlYXRlU1RFTVRpbWVSYW5nZU1vZGlmaWVyQWRhcHRlcigpCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlU1RFTVRpbWVSYW5nZU1vZGlmaWVyQWRhcHRlcigpIHsKKwkJcmV0dXJuIG5ldyBTVEVNVGltZVJhbmdlRmVhdHVyZU1vZGlmaWVyRWRpdENvbXBvc2l0ZUFkYXB0ZXIoKTsKKwl9CisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci51dGlsLk1vZGlmaWVyQWRhcHRlckZhY3RvcnkjaXNGYWN0b3J5Rm9yVHlwZShqYXZhLmxhbmcuT2JqZWN0KQorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBib29sZWFuIGlzRmFjdG9yeUZvclR5cGUoZmluYWwgT2JqZWN0IG9iamVjdCkgeworCQlyZXR1cm4gb2JqZWN0ID09IEZlYXR1cmVNb2RpZmllckVkaXRDb21wb3NpdGVBZGFwdGVyLmNsYXNzCisJCQkJfHwgc3VwZXIuaXNGYWN0b3J5Rm9yVHlwZShvYmplY3QpOworCX0KKworfSAvLyBFeHBlcmltZW50RmVhdHVyZU1vZGlmaWVyRWRpdENvbXBvc2l0ZUZhY3RvcnkKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9hZGFwdGVycy9mZWF0dXJlbW9kaWZpZXJlZGl0Y29tcG9zaXRlL0ZlYXR1cmVNb2RpZmllckVkaXRDb21wb3NpdGVBZGFwdGVyLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvYWRhcHRlcnMvZmVhdHVyZW1vZGlmaWVyZWRpdGNvbXBvc2l0ZS9GZWF0dXJlTW9kaWZpZXJFZGl0Q29tcG9zaXRlQWRhcHRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVmZDkyNjkKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvYWRhcHRlcnMvZmVhdHVyZW1vZGlmaWVyZWRpdGNvbXBvc2l0ZS9GZWF0dXJlTW9kaWZpZXJFZGl0Q29tcG9zaXRlQWRhcHRlci5qYXZhCkBAIC0wLDAgKzEsODAgQEAKKy8vIEZlYXR1cmVNb2RpZmllckVkaXRDb21wb3NpdGVBZGFwdGVyLmphdmEKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS51aS5hZGFwdGVycy5mZWF0dXJlbW9kaWZpZXJlZGl0Y29tcG9zaXRlOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LkFkYXB0ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuaW1wbC5BZGFwdGVySW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuRmVhdHVyZU1vZGlmaWVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udWkud2l6YXJkcy5OZXdNb2RpZmllclBhZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS51aS53aXphcmRzLk5ld01vZGlmaWVyUGFnZS5GZWF0dXJlTW9kaWZpZXJFZGl0Q29tcG9zaXRlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkJ1dHRvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGU7CisKKy8qKgorICogVGhpcyBjbGFzcyBhZGFwdHMge0BsaW5rIEZlYXR1cmVNb2RpZmllcn1zIHRvCisgKiB7QGxpbmsgRmVhdHVyZU1vZGlmaWVyRWRpdENvbXBvc2l0ZX1zLgorICovCithYnN0cmFjdCBwdWJsaWMgY2xhc3MgRmVhdHVyZU1vZGlmaWVyRWRpdENvbXBvc2l0ZUFkYXB0ZXIgZXh0ZW5kcyBBZGFwdGVySW1wbAorCQlpbXBsZW1lbnRzIEFkYXB0ZXIgeworCisJLyoqCisJICogQHBhcmFtIHBhcmVudAorCSAqICAgICAgICAgICAgdGhlIHBhcmVudCB7QGxpbmsgQ29tcG9zaXRlfQorCSAqIEBwYXJhbSBpZGVudGlmaWFibGUKKwkgKiAgICAgICAgICAgIHRoZSB7QGxpbmsgSWRlbnRpZmlhYmxlfQorCSAqIEBwYXJhbSBwYXJlbnROZXdNb2RpZmllclBhZ2UKKwkgKiAgICAgICAgICAgIHRoZSBwYXJlbnQge0BsaW5rIE5ld01vZGlmaWVyUGFnZX0KKwkgKiBAcmV0dXJuIHRoZSB7QGxpbmsgRmVhdHVyZU1vZGlmaWVyRWRpdENvbXBvc2l0ZX0gYXBwcm9wcmlhdGUgZm9yIHRoZQorCSAqICAgICAgICAge0BsaW5rIEZlYXR1cmVNb2RpZmllcn0gYmUgYWRhcHRlZC4KKwkgKi8KKwlhYnN0cmFjdCBwdWJsaWMgRmVhdHVyZU1vZGlmaWVyRWRpdENvbXBvc2l0ZSBjcmVhdGVFZGl0Q29tcG9zaXRlKAorCQkJQ29tcG9zaXRlIHBhcmVudCwgRU9iamVjdCB0YXJnZXQsCisJCQlOZXdNb2RpZmllclBhZ2UgcGFyZW50TmV3TW9kaWZpZXJQYWdlKTsKKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuQWRhcHRlciNpc0FkYXB0ZXJGb3JUeXBlKGphdmEubGFuZy5PYmplY3QpCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIGJvb2xlYW4gaXNBZGFwdGVyRm9yVHlwZShmaW5hbCBPYmplY3QgdHlwZSkgeworCQlyZXR1cm4gdHlwZSA9PSBGZWF0dXJlTW9kaWZpZXJFZGl0Q29tcG9zaXRlQWRhcHRlci5jbGFzczsKKwl9CisKKwkvKioKKwkgKiBAcmV0dXJuIHRoZSB7QGxpbmsgRmVhdHVyZU1vZGlmaWVyfQorCSAqLworCXB1YmxpYyBGZWF0dXJlTW9kaWZpZXIgZ2V0RmVhdHVyZU1vZGlmaWVyKCkgeworCQlyZXR1cm4gKEZlYXR1cmVNb2RpZmllcikgZ2V0VGFyZ2V0KCk7CisJfSAvLyBnZXRGZWF0dXJlTW9kaWZpZXIKKworCS8qKgorCSAqIFRoaXMgbWV0aG9kIHNlbGVjdHMgdGhlIGJ1dHRvbiB0aGF0IGlzIGFwcHJvcHJpYXRlIGZvciB0aGUKKwkgKiB7QGxpbmsgRmVhdHVyZU1vZGlmaWVyfSB0aGF0IGlzIHRoZSB0YXJnZXQuIGFuZCB1bi1zZWxlY3RzIGFsbCB0aGUgb3RoZXIKKwkgKiBidXR0b25zLiBUaHVzLCBpZiB0aGUge0BsaW5rIEZlYXR1cmVNb2RpZmllcn0gaXMgYW4gaW5zdGFuY2Ugb2YKKwkgKiB7QGxpbmsgUmFuZ2VNb2RpZmllcn0gdGhlIDxjb2RlPnJhbmdlQnV0dG9uPC9jb2RlPiB3aWxsIGJlIHNlbGVjdGVkLiBCeQorCSAqIGRlZmF1bHQgdGhlIDxjb2RlPm5vbmVCdXR0b248L2NvZGU+IGlzIHNlbGVjdGVkLgorCSAqIAorCSAqIEBwYXJhbSBub25lQnV0dG9uCisJICogQHBhcmFtIHNpbmdsZVZhbHVlQnV0dG9uCisJICogQHBhcmFtIHJhbmdlQnV0dG9uCisJICogQHBhcmFtIHNlcXVlbmNlQnV0dG9uCisJICovCisJcHVibGljIHZvaWQgc2V0U2VsZWN0ZWRCdXR0b24oZmluYWwgQnV0dG9uIG5vbmVCdXR0b24sIGZpbmFsIEJ1dHRvbiBzaW5nbGVWYWx1ZUJ1dHRvbiwKKwkJCWZpbmFsIEJ1dHRvbiByYW5nZUJ1dHRvbiwgZmluYWwgQnV0dG9uIHNlcXVlbmNlQnV0dG9uKSB7CisJCW5vbmVCdXR0b24uc2V0U2VsZWN0aW9uKHRydWUpOworCQlzaW5nbGVWYWx1ZUJ1dHRvbi5zZXRTZWxlY3Rpb24oZmFsc2UpOworCQlyYW5nZUJ1dHRvbi5zZXRTZWxlY3Rpb24oZmFsc2UpOworCQlzZXF1ZW5jZUJ1dHRvbi5zZXRTZWxlY3Rpb24oZmFsc2UpOworCX0gLy8gc2V0U2VsZWN0ZWRCdXR0b24KKworfSAvLyBGZWF0dXJlTW9kaWZpZXJFZGl0Q29tcG9zaXRlQWRhcHRlcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL2FkYXB0ZXJzL2ZlYXR1cmVtb2RpZmllcmVkaXRjb21wb3NpdGUvRmVhdHVyZU1vZGlmaWVyRmVhdHVyZU1vZGlmaWVyRWRpdENvbXBvc2l0ZUFkYXB0ZXJGYWN0b3J5LmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvYWRhcHRlcnMvZmVhdHVyZW1vZGlmaWVyZWRpdGNvbXBvc2l0ZS9GZWF0dXJlTW9kaWZpZXJGZWF0dXJlTW9kaWZpZXJFZGl0Q29tcG9zaXRlQWRhcHRlckZhY3RvcnkuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYzcwOTM2Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL2FkYXB0ZXJzL2ZlYXR1cmVtb2RpZmllcmVkaXRjb21wb3NpdGUvRmVhdHVyZU1vZGlmaWVyRmVhdHVyZU1vZGlmaWVyRWRpdENvbXBvc2l0ZUFkYXB0ZXJGYWN0b3J5LmphdmEKQEAgLTAsMCArMSw0NiBAQAorLy8gRmVhdHVyZU1vZGlmaWVyRmVhdHVyZU1vZGlmaWVyRWRpdENvbXBvc2l0ZUFkYXB0ZXJGYWN0b3J5LmphdmEKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS51aS5hZGFwdGVycy5mZWF0dXJlbW9kaWZpZXJlZGl0Y29tcG9zaXRlOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkNvbXBvc2VkQWRhcHRlckZhY3Rvcnk7CisKKy8qKgorICogVGhpcyBjbGFzcyBpcyBhbiBhZGFwdGVyIGZhY3RvcnkgdGhhdCBhZGFwdHMge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5GZWF0dXJlTW9kaWZpZXJ9cyB0bworICoge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0udWkud2l6YXJkcy5OZXdNb2RpZmllclBhZ2UuRmVhdHVyZU1vZGlmaWVyRWRpdENvbXBvc2l0ZX1zLgorICovCitwdWJsaWMgaW50ZXJmYWNlIEZlYXR1cmVNb2RpZmllckZlYXR1cmVNb2RpZmllckVkaXRDb21wb3NpdGVBZGFwdGVyRmFjdG9yeSB7CisKKwkvKioKKwkgKiBTaW5nbGV0b24gaW5zdGFuY2Ugb2YgdGhlIGFkYXB0ZXIgZmFjdG9yeS4KKwkgKi8KKwlGZWF0dXJlTW9kaWZpZXJFZGl0Q29tcG9zaXRlQWRhcHRlckZhY3RvcnlJbXBsIElOU1RBTkNFID0gbmV3IEZlYXR1cmVNb2RpZmllckVkaXRDb21wb3NpdGVBZGFwdGVyRmFjdG9yeUltcGwoKTsKKworCS8qKgorCSAqIFRoaXMgY2xhc3MgaXMgdGhlIHtAbGluayBDb21wb3NlZEFkYXB0ZXJGYWN0b3J5fSB0aGF0IG90aGVyCisJICoge0BsaW5rIEZlYXR1cmVNb2RpZmllckZlYXR1cmVNb2RpZmllckVkaXRDb21wb3NpdGVBZGFwdGVyRmFjdG9yeX1zIGFkZAorCSAqIHRoZW1zZWx2ZXMgdG8uCisJICovCisJY2xhc3MgRmVhdHVyZU1vZGlmaWVyRWRpdENvbXBvc2l0ZUFkYXB0ZXJGYWN0b3J5SW1wbCBleHRlbmRzCisJCQlDb21wb3NlZEFkYXB0ZXJGYWN0b3J5IGltcGxlbWVudHMKKwkJCUZlYXR1cmVNb2RpZmllckZlYXR1cmVNb2RpZmllckVkaXRDb21wb3NpdGVBZGFwdGVyRmFjdG9yeSB7CisKKwkJLyoqCisJCSAqIEBzZWUgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuQ29tcG9zZWRBZGFwdGVyRmFjdG9yeSNpc0ZhY3RvcnlGb3JUeXBlKGphdmEubGFuZy5PYmplY3QpCisJCSAqLworCQlAT3ZlcnJpZGUKKwkJcHVibGljIGJvb2xlYW4gaXNGYWN0b3J5Rm9yVHlwZShmaW5hbCBPYmplY3QgdHlwZSkgeworCQkJcmV0dXJuIHR5cGUgPT0gRmVhdHVyZU1vZGlmaWVyRWRpdENvbXBvc2l0ZUFkYXB0ZXIuY2xhc3M7CisJCX0KKwl9IC8vIEZlYXR1cmVNb2RpZmllckVkaXRDb21wb3NpdGVBZGFwdGVyRmFjdG9yeUltcGwKKworfSAvLyBGZWF0dXJlTW9kaWZpZXJGZWF0dXJlTW9kaWZpZXJFZGl0Q29tcG9zaXRlQWRhcHRlckZhY3RvcnkKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9hZGFwdGVycy9mZWF0dXJlbW9kaWZpZXJlZGl0Y29tcG9zaXRlL05PUEZlYXR1cmVNb2RpZmllckVkaXRDb21wb3NpdGVBZGFwdGVyLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvYWRhcHRlcnMvZmVhdHVyZW1vZGlmaWVyZWRpdGNvbXBvc2l0ZS9OT1BGZWF0dXJlTW9kaWZpZXJFZGl0Q29tcG9zaXRlQWRhcHRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFkZDE3M2YKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvYWRhcHRlcnMvZmVhdHVyZW1vZGlmaWVyZWRpdGNvbXBvc2l0ZS9OT1BGZWF0dXJlTW9kaWZpZXJFZGl0Q29tcG9zaXRlQWRhcHRlci5qYXZhCkBAIC0wLDAgKzEsMTc4IEBACisvLyBOT1BGZWF0dXJlTW9kaWZpZXJFZGl0Q29tcG9zaXRlQWRhcHRlci5qYXZhCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0udWkuYWRhcHRlcnMuZmVhdHVyZW1vZGlmaWVyZWRpdGNvbXBvc2l0ZTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuRmVhdHVyZU1vZGlmaWVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udWkud2l6YXJkcy5OZXdNb2RpZmllclBhZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS51aS53aXphcmRzLk5ld01vZGlmaWVyUGFnZS5GZWF0dXJlTW9kaWZpZXJFZGl0Q29tcG9zaXRlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5TV1Q7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5Sb3dMYXlvdXQ7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkRpc3BsYXk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuTGFiZWw7CisKKy8qKgorICogVGhpcyBjbGFzcyBpcyBhIHtAbGluayBGZWF0dXJlTW9kaWZpZXJFZGl0Q29tcG9zaXRlQWRhcHRlcn0gZm9yCisgKiB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLk5PUE1vZGlmaWVyfXMuCisgKi8KK3B1YmxpYyBjbGFzcyBOT1BGZWF0dXJlTW9kaWZpZXJFZGl0Q29tcG9zaXRlQWRhcHRlciBleHRlbmRzCisJCUZlYXR1cmVNb2RpZmllckVkaXRDb21wb3NpdGVBZGFwdGVyIHsKKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS51aS5hZGFwdGVycy5mZWF0dXJlbW9kaWZpZXJlZGl0Y29tcG9zaXRlLkZlYXR1cmVNb2RpZmllckVkaXRDb21wb3NpdGVBZGFwdGVyI2NyZWF0ZUVkaXRDb21wb3NpdGUob3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlLAorCSAqICAgICAgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5JZGVudGlmaWFibGUsCisJICogICAgICBvcmcuZWNsaXBzZS5zdGVtLnVpLndpemFyZHMuTmV3TW9kaWZpZXJQYWdlKQorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBGZWF0dXJlTW9kaWZpZXJFZGl0Q29tcG9zaXRlIGNyZWF0ZUVkaXRDb21wb3NpdGUoCisJCQlmaW5hbCBDb21wb3NpdGUgcGFyZW50LAorCQkJQFN1cHByZXNzV2FybmluZ3MoInVudXNlZCIpIGZpbmFsIEVPYmplY3QgdGFyZ2V0LAorCQkJZmluYWwgTmV3TW9kaWZpZXJQYWdlIHBhcmVudE5ld01vZGlmaWVyUGFnZSkgeworCQlmaW5hbCBGZWF0dXJlTW9kaWZpZXJFZGl0Q29tcG9zaXRlIHJldFZhbHVlID0gbmV3IEZlYXR1cmVNb2RpZmllckVkaXRDb21wb3NpdGUoCisJCQkJcGFyZW50LCBwYXJlbnROZXdNb2RpZmllclBhZ2UsIChGZWF0dXJlTW9kaWZpZXIpIGdldFRhcmdldCgpKSB7CisJCQlAT3ZlcnJpZGUKKwkJCXByb3RlY3RlZCBib29sZWFuIHZhbGlkYXRlKCkgeworCQkJCXJldHVybiB0cnVlOworCQkJfQorCQl9OworCQlyZXRWYWx1ZS5zZXRMYXlvdXQobmV3IFJvd0xheW91dCgpKTsKKworCQlmaW5hbCBMYWJlbCBsYWJlbCA9IG5ldyBMYWJlbChyZXRWYWx1ZSwgU1dULk5PTkUpOworCQlsYWJlbC5zZXRGb3JlZ3JvdW5kKERpc3BsYXkuZ2V0Q3VycmVudCgpLmdldFN5c3RlbUNvbG9yKFNXVC5DT0xPUl9SRUQpKTsKKwkJbGFiZWwuc2V0VGV4dChnZXRGZWF0dXJlTW9kaWZpZXIoKS5nZXRUYXJnZXQoKS5lR2V0KAorCQkJCWdldEZlYXR1cmVNb2RpZmllcigpLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZSgpKS50b1N0cmluZygpKTsKKworCQlyZXR1cm4gcmV0VmFsdWU7CisJfSAvLyBjcmVhdGVFZGl0Q29tcG9zaXRlCisKKwkvKioKKwkgKiBUaGlzIGNsYXNzIGlzIGEge0BsaW5rIEZlYXR1cmVNb2RpZmllckVkaXRDb21wb3NpdGVBZGFwdGVyfSBmb3IKKwkgKiB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLlNURU1UaW1lTk9QTW9kaWZpZXJ9cy4KKwkgKiAKKwkgKiBAc2VlIEV4cGVyaW1lbnRGZWF0dXJlTW9kaWZpZXJFZGl0Q29tcG9zaXRlRmFjdG9yeSNjcmVhdGVTVEVNVGltZU5PUE1vZGlmaWVyQWRhcHRlcigpCisJICovCisJcHVibGljIHN0YXRpYyBjbGFzcyBTVEVNVGltZU5PUEZlYXR1cmVNb2RpZmllckVkaXRDb21wb3NpdGVBZGFwdGVyIGV4dGVuZHMKKwkJCU5PUEZlYXR1cmVNb2RpZmllckVkaXRDb21wb3NpdGVBZGFwdGVyIHsKKworCQkvKioKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnVpLmFkYXB0ZXJzLmZlYXR1cmVtb2RpZmllcmVkaXRjb21wb3NpdGUuRmVhdHVyZU1vZGlmaWVyRWRpdENvbXBvc2l0ZUFkYXB0ZXIjY3JlYXRlRWRpdENvbXBvc2l0ZShvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGUsCisJCSAqICAgICAgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5JZGVudGlmaWFibGUsCisJCSAqICAgICAgb3JnLmVjbGlwc2Uuc3RlbS51aS53aXphcmRzLk5ld01vZGlmaWVyUGFnZSkKKwkJICovCisJCUBPdmVycmlkZQorCQlwdWJsaWMgRmVhdHVyZU1vZGlmaWVyRWRpdENvbXBvc2l0ZSBjcmVhdGVFZGl0Q29tcG9zaXRlKAorCQkJCWZpbmFsIENvbXBvc2l0ZSBwYXJlbnQsCisJCQkJQFN1cHByZXNzV2FybmluZ3MoInVudXNlZCIpIGZpbmFsIEVPYmplY3QgdGFyZ2V0LAorCQkJCWZpbmFsIE5ld01vZGlmaWVyUGFnZSBwYXJlbnROZXdNb2RpZmllclBhZ2UpIHsKKwkJCWZpbmFsIEZlYXR1cmVNb2RpZmllckVkaXRDb21wb3NpdGUgcmV0VmFsdWUgPSBuZXcgRmVhdHVyZU1vZGlmaWVyRWRpdENvbXBvc2l0ZSgKKwkJCQkJcGFyZW50LCBwYXJlbnROZXdNb2RpZmllclBhZ2UsCisJCQkJCShGZWF0dXJlTW9kaWZpZXIpIGdldFRhcmdldCgpKSB7CisJCQkJQE92ZXJyaWRlCisJCQkJcHJvdGVjdGVkIGJvb2xlYW4gdmFsaWRhdGUoKSB7CisJCQkJCXJldHVybiB0cnVlOworCQkJCX0KKwkJCX07CisJCQlyZXRWYWx1ZS5zZXRMYXlvdXQobmV3IFJvd0xheW91dCgpKTsKKworCQkJZmluYWwgTGFiZWwgbGFiZWwgPSBuZXcgTGFiZWwocmV0VmFsdWUsIFNXVC5OT05FKTsKKwkJCWxhYmVsLnNldFRleHQoZ2V0RmVhdHVyZU1vZGlmaWVyKCkuZ2V0VGFyZ2V0KCkuZUdldCgKKwkJCQkJZ2V0RmVhdHVyZU1vZGlmaWVyKCkuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlKCkpLnRvU3RyaW5nKCkpOworCisJCQlyZXR1cm4gcmV0VmFsdWU7CisJCX0gLy8gY3JlYXRlRWRpdENvbXBvc2l0ZQorCisJfSAvLyBTVEVNVGltZU5PUEZlYXR1cmVNb2RpZmllckVkaXRDb21wb3NpdGVBZGFwdGVyCisKKwkvKioKKwkgKiBUaGlzIGNsYXNzIGlzIGEge0BsaW5rIEZlYXR1cmVNb2RpZmllckVkaXRDb21wb3NpdGVBZGFwdGVyfSBmb3IKKwkgKiB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLk5PUE1vZGlmaWVyfXMgdGhhdCBhcmUgbnVtZXJpYyBsaWtlCisJICoge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5JbnRlZ2VyTk9QTW9kaWZpZXJ9LAorCSAqIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuTG9uZ05PUE1vZGlmaWVyfSBhbmQKKwkgKiB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLkRvdWJsZU5PUE1vZGlmaWVyfS4KKwkgKiAKKwkgKiBAc2VlIEV4cGVyaW1lbnRGZWF0dXJlTW9kaWZpZXJFZGl0Q29tcG9zaXRlRmFjdG9yeSNjcmVhdGVJbnRlZ2VyTk9QTW9kaWZpZXJBZGFwdGVyKCkKKwkgKiBAc2VlIEV4cGVyaW1lbnRGZWF0dXJlTW9kaWZpZXJFZGl0Q29tcG9zaXRlRmFjdG9yeSNjcmVhdGVMb25nTk9QTW9kaWZpZXJBZGFwdGVyKCkKKwkgKiBAc2VlIEV4cGVyaW1lbnRGZWF0dXJlTW9kaWZpZXJFZGl0Q29tcG9zaXRlRmFjdG9yeSNjcmVhdGVEb3VibGVOT1BNb2RpZmllckFkYXB0ZXIoKQorCSAqLworCXB1YmxpYyBzdGF0aWMgY2xhc3MgTnVtZXJpY05PUEZlYXR1cmVNb2RpZmllckVkaXRDb21wb3NpdGVBZGFwdGVyIGV4dGVuZHMKKwkJCU5PUEZlYXR1cmVNb2RpZmllckVkaXRDb21wb3NpdGVBZGFwdGVyIHsKKworCQkvKioKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnVpLmFkYXB0ZXJzLmZlYXR1cmVtb2RpZmllcmVkaXRjb21wb3NpdGUuRmVhdHVyZU1vZGlmaWVyRWRpdENvbXBvc2l0ZUFkYXB0ZXIjY3JlYXRlRWRpdENvbXBvc2l0ZShvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGUsCisJCSAqICAgICAgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5JZGVudGlmaWFibGUsCisJCSAqICAgICAgb3JnLmVjbGlwc2Uuc3RlbS51aS53aXphcmRzLk5ld01vZGlmaWVyUGFnZSkKKwkJICovCisJCUBPdmVycmlkZQorCQlwdWJsaWMgRmVhdHVyZU1vZGlmaWVyRWRpdENvbXBvc2l0ZSBjcmVhdGVFZGl0Q29tcG9zaXRlKAorCQkJCWZpbmFsIENvbXBvc2l0ZSBwYXJlbnQsCisJCQkJQFN1cHByZXNzV2FybmluZ3MoInVudXNlZCIpIGZpbmFsIEVPYmplY3QgdGFyZ2V0LAorCQkJCWZpbmFsIE5ld01vZGlmaWVyUGFnZSBwYXJlbnROZXdNb2RpZmllclBhZ2UpIHsKKwkJCWZpbmFsIEZlYXR1cmVNb2RpZmllckVkaXRDb21wb3NpdGUgcmV0VmFsdWUgPSBuZXcgRmVhdHVyZU1vZGlmaWVyRWRpdENvbXBvc2l0ZSgKKwkJCQkJcGFyZW50LCBwYXJlbnROZXdNb2RpZmllclBhZ2UsCisJCQkJCShGZWF0dXJlTW9kaWZpZXIpIGdldFRhcmdldCgpKSB7CisJCQkJQE92ZXJyaWRlCisJCQkJcHJvdGVjdGVkIGJvb2xlYW4gdmFsaWRhdGUoKSB7CisJCQkJCXJldHVybiB0cnVlOworCQkJCX0KKwkJCX07CisJCQlyZXRWYWx1ZS5zZXRMYXlvdXQobmV3IFJvd0xheW91dCgpKTsKKworCQkJZmluYWwgTGFiZWwgdG9MYWJlbCA9IG5ldyBMYWJlbChyZXRWYWx1ZSwgU1dULk5PTkUpOworCQkJdG9MYWJlbC5zZXRUZXh0KGdldEZlYXR1cmVNb2RpZmllcigpLmdldFRhcmdldCgpLmVHZXQoCisJCQkJCWdldEZlYXR1cmVNb2RpZmllcigpLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZSgpKS50b1N0cmluZygpKTsKKworCQkJcmV0dXJuIHJldFZhbHVlOworCQl9IC8vIGNyZWF0ZUVkaXRDb21wb3NpdGUKKworCX0gLy8gTnVtZXJpY05PUEZlYXR1cmVNb2RpZmllckVkaXRDb21wb3NpdGVBZGFwdGVyCisKKwkvKioKKwkgKiBUaGlzIGNsYXNzIGlzIGEge0BsaW5rIEZlYXR1cmVNb2RpZmllckVkaXRDb21wb3NpdGVBZGFwdGVyfSBmb3IKKwkgKiB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLlNURU1UaW1lTk9QTW9kaWZpZXJ9cy4KKwkgKiAKKwkgKiBAc2VlIEV4cGVyaW1lbnRGZWF0dXJlTW9kaWZpZXJFZGl0Q29tcG9zaXRlRmFjdG9yeSNjcmVhdGVTVEVNVGltZU5PUE1vZGlmaWVyQWRhcHRlcigpCisJICovCisJcHVibGljIHN0YXRpYyBjbGFzcyBTdHJpbmdOT1BGZWF0dXJlTW9kaWZpZXJFZGl0Q29tcG9zaXRlQWRhcHRlciBleHRlbmRzCisJCQlOT1BGZWF0dXJlTW9kaWZpZXJFZGl0Q29tcG9zaXRlQWRhcHRlciB7CisKKwkJLyoqCisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS51aS5hZGFwdGVycy5mZWF0dXJlbW9kaWZpZXJlZGl0Y29tcG9zaXRlLkZlYXR1cmVNb2RpZmllckVkaXRDb21wb3NpdGVBZGFwdGVyI2NyZWF0ZUVkaXRDb21wb3NpdGUob3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlLAorCQkgKiAgICAgIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uSWRlbnRpZmlhYmxlLAorCQkgKiAgICAgIG9yZy5lY2xpcHNlLnN0ZW0udWkud2l6YXJkcy5OZXdNb2RpZmllclBhZ2UpCisJCSAqLworCQlAT3ZlcnJpZGUKKwkJcHVibGljIEZlYXR1cmVNb2RpZmllckVkaXRDb21wb3NpdGUgY3JlYXRlRWRpdENvbXBvc2l0ZSgKKwkJCQlmaW5hbCBDb21wb3NpdGUgcGFyZW50LAorCQkJCUBTdXBwcmVzc1dhcm5pbmdzKCJ1bnVzZWQiKSBmaW5hbCBFT2JqZWN0IHRhcmdldCwKKwkJCQlmaW5hbCBOZXdNb2RpZmllclBhZ2UgcGFyZW50TmV3TW9kaWZpZXJQYWdlKSB7CisJCQlmaW5hbCBGZWF0dXJlTW9kaWZpZXJFZGl0Q29tcG9zaXRlIHJldFZhbHVlID0gbmV3IEZlYXR1cmVNb2RpZmllckVkaXRDb21wb3NpdGUoCisJCQkJCXBhcmVudCwgcGFyZW50TmV3TW9kaWZpZXJQYWdlLAorCQkJCQkoRmVhdHVyZU1vZGlmaWVyKSBnZXRUYXJnZXQoKSkgeworCQkJCUBPdmVycmlkZQorCQkJCXByb3RlY3RlZCBib29sZWFuIHZhbGlkYXRlKCkgeworCQkJCQlyZXR1cm4gdHJ1ZTsKKwkJCQl9CisJCQl9OworCQkJcmV0VmFsdWUuc2V0TGF5b3V0KG5ldyBSb3dMYXlvdXQoKSk7CisKKwkJCWZpbmFsIExhYmVsIGxhYmVsID0gbmV3IExhYmVsKHJldFZhbHVlLCBTV1QuTk9ORSk7CisJCQlsYWJlbC5zZXRUZXh0KGdldEZlYXR1cmVNb2RpZmllcigpLmdldFRhcmdldCgpLmVHZXQoCisJCQkJCWdldEZlYXR1cmVNb2RpZmllcigpLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZSgpKS50b1N0cmluZygpKTsKKworCQkJcmV0dXJuIHJldFZhbHVlOworCQl9IC8vIGNyZWF0ZUVkaXRDb21wb3NpdGUKKworCX0gLy8gU3RyaW5nTk9QRmVhdHVyZU1vZGlmaWVyRWRpdENvbXBvc2l0ZUFkYXB0ZXIKKworfSAvLyBOT1BGZWF0dXJlTW9kaWZpZXJFZGl0Q29tcG9zaXRlQWRhcHRlcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL2FkYXB0ZXJzL2ZlYXR1cmVtb2RpZmllcmVkaXRjb21wb3NpdGUvUmFuZ2VGZWF0dXJlTW9kaWZpZXJFZGl0Q29tcG9zaXRlQWRhcHRlci5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL2FkYXB0ZXJzL2ZlYXR1cmVtb2RpZmllcmVkaXRjb21wb3NpdGUvUmFuZ2VGZWF0dXJlTW9kaWZpZXJFZGl0Q29tcG9zaXRlQWRhcHRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk2N2E4ZWEKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvYWRhcHRlcnMvZmVhdHVyZW1vZGlmaWVyZWRpdGNvbXBvc2l0ZS9SYW5nZUZlYXR1cmVNb2RpZmllckVkaXRDb21wb3NpdGVBZGFwdGVyLmphdmEKQEAgLTAsMCArMSw2ODYgQEAKKy8vIFJhbmdlRmVhdHVyZU1vZGlmaWVyRWRpdENvbXBvc2l0ZUFkYXB0ZXIuamF2YQorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnVpLmFkYXB0ZXJzLmZlYXR1cmVtb2RpZmllcmVkaXRjb21wb3NpdGU7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3Q7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLlNURU1UaW1lOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5Eb3VibGVSYW5nZU1vZGlmaWVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5GZWF0dXJlTW9kaWZpZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLkludGVnZXJSYW5nZU1vZGlmaWVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5Mb25nUmFuZ2VNb2RpZmllcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuU1RFTVRpbWVSYW5nZU1vZGlmaWVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udWkud2l6YXJkcy5OZXdNb2RpZmllclBhZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS51aS53aXphcmRzLk5ld01vZGlmaWVyUGFnZS5GZWF0dXJlTW9kaWZpZXJFZGl0Q29tcG9zaXRlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5TV1Q7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5Gb3JtQXR0YWNobWVudDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QubGF5b3V0LkZvcm1EYXRhOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5sYXlvdXQuRm9ybUxheW91dDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QubGF5b3V0LlJvd0xheW91dDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5CdXR0b247CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkxhYmVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlRleHQ7CisKKy8qKgorICogVGhpcyBjbGFzcyBpcyBhIHtAbGluayBGZWF0dXJlTW9kaWZpZXJFZGl0Q29tcG9zaXRlQWRhcHRlcn0gZm9yCisgKiB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLlJhbmdlTW9kaWZpZXJ9cy4KKyAqLworYWJzdHJhY3QgcHVibGljIGNsYXNzIFJhbmdlRmVhdHVyZU1vZGlmaWVyRWRpdENvbXBvc2l0ZUFkYXB0ZXIgZXh0ZW5kcworCQlGZWF0dXJlTW9kaWZpZXJFZGl0Q29tcG9zaXRlQWRhcHRlciB7CisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0udWkuYWRhcHRlcnMuZmVhdHVyZW1vZGlmaWVyZWRpdGNvbXBvc2l0ZS5GZWF0dXJlTW9kaWZpZXJFZGl0Q29tcG9zaXRlQWRhcHRlciNzZXRTZWxlY3RlZEJ1dHRvbihvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5CdXR0b24sCisJICogICAgICBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5CdXR0b24sIG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkJ1dHRvbikKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBzZXRTZWxlY3RlZEJ1dHRvbihmaW5hbCBCdXR0b24gbm9uZUJ1dHRvbiwgZmluYWwgQnV0dG9uIHNpbmdsZVZhbHVlQnV0dG9uLAorCQkJZmluYWwgQnV0dG9uIHJhbmdlQnV0dG9uLCBmaW5hbCBCdXR0b24gc2VxdWVuY2VCdXR0b24pIHsKKwkJbm9uZUJ1dHRvbi5zZXRTZWxlY3Rpb24oZmFsc2UpOworCQlzaW5nbGVWYWx1ZUJ1dHRvbi5zZXRTZWxlY3Rpb24oZmFsc2UpOworCQlyYW5nZUJ1dHRvbi5zZXRTZWxlY3Rpb24odHJ1ZSk7CisJCXNlcXVlbmNlQnV0dG9uLnNldFNlbGVjdGlvbihmYWxzZSk7CisJfSAvLyBzZXRTZWxlY3RlZEJ1dHRvbgorCisJLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisJLyoqCisJICogVGhpcyBjbGFzcyBpcyBhIHtAbGluayBGZWF0dXJlTW9kaWZpZXJFZGl0Q29tcG9zaXRlQWRhcHRlcn0gZm9yCisJICoge0BsaW5rIFJhbmdlTW9kaWZpZXJ9cyB0aGF0IGhhdmUgYSByYW5nZSBvZiBudW1lcmljIHZhbHVlcy4KKwkgKi8KKwlwcm90ZWN0ZWQgc3RhdGljIGFic3RyYWN0IGNsYXNzIE51bWVyaWNSYW5nZUZlYXR1cmVNb2RpZmllckVkaXRDb21wb3NpdGVBZGFwdGVyCisJCQlleHRlbmRzIFJhbmdlRmVhdHVyZU1vZGlmaWVyRWRpdENvbXBvc2l0ZUFkYXB0ZXIgeworCisJCXByaXZhdGUgc3RhdGljIGZpbmFsIGludCBURVhUX1dJRFRIID0gMzA7CisKKwkJcHJvdGVjdGVkIFRleHQgc3RhcnRUZXh0OworCQlwcm90ZWN0ZWQgVGV4dCBlbmRUZXh0OworCQlwcm90ZWN0ZWQgVGV4dCBpbmNUZXh0OworCisJCWFic3RyYWN0IHByb3RlY3RlZCB2b2lkIGluaXRpYWxpemVGZWF0dXJlTW9kaWZpZXIoCisJCQkJRU9iamVjdCB0YXJnZXQpOworCisJCWFic3RyYWN0IHByb3RlY3RlZCBTdHJpbmcgZ2V0SW5pdGlhbFN0YXJ0VGV4dCgpOworCisJCWFic3RyYWN0IHByb3RlY3RlZCBTdHJpbmcgZ2V0SW5pdGlhbEVuZFRleHQoKTsKKworCQlhYnN0cmFjdCBwcm90ZWN0ZWQgU3RyaW5nIGdldEluaXRpYWxJbmNyZW1lbnRUZXh0KCk7CisKKwkJLyoqCisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS51aS5hZGFwdGVycy5mZWF0dXJlbW9kaWZpZXJlZGl0Y29tcG9zaXRlLkZlYXR1cmVNb2RpZmllckVkaXRDb21wb3NpdGVBZGFwdGVyI2NyZWF0ZUVkaXRDb21wb3NpdGUob3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlLAorCQkgKiAgICAgIElkZW50aWZpYWJsZSwgTmV3TW9kaWZpZXJQYWdlKQorCQkgKi8KKwkJQE92ZXJyaWRlCisJCXB1YmxpYyBGZWF0dXJlTW9kaWZpZXJFZGl0Q29tcG9zaXRlIGNyZWF0ZUVkaXRDb21wb3NpdGUoCisJCQkJZmluYWwgQ29tcG9zaXRlIHBhcmVudCwgZmluYWwgRU9iamVjdCB0YXJnZXQsCisJCQkJZmluYWwgTmV3TW9kaWZpZXJQYWdlIHBhcmVudE5ld01vZGlmaWVyUGFnZSkgeworCisJCQlpbml0aWFsaXplRmVhdHVyZU1vZGlmaWVyKHRhcmdldCk7CisKKwkJCWZpbmFsIEZlYXR1cmVNb2RpZmllckVkaXRDb21wb3NpdGUgcmV0VmFsdWUgPSBnZXRGZWF0dXJlTW9kaWZpZXJFZGl0Q29tcG9zaXRlKAorCQkJCQlwYXJlbnQsIHBhcmVudE5ld01vZGlmaWVyUGFnZSk7CisKKwkJCWZpbmFsIEZvcm1MYXlvdXQgbGF5b3V0ID0gbmV3IEZvcm1MYXlvdXQoKTsKKwkJCWxheW91dC5tYXJnaW5IZWlnaHQgPSAwOworCQkJbGF5b3V0Lm1hcmdpbldpZHRoID0gMDsKKwkJCXJldFZhbHVlLnNldExheW91dChsYXlvdXQpOworCisJCQlzdGFydFRleHQgPSBuZXcgVGV4dChyZXRWYWx1ZSwgU1dULkJPUkRFUiB8IFNXVC5UUkFJTCk7CisJCQlzdGFydFRleHQuc2V0VGV4dChnZXRJbml0aWFsU3RhcnRUZXh0KCkpOworCQkJc3RhcnRUZXh0LnNldFRvb2xUaXBUZXh0KCJTdGFydGluZyB2YWx1ZSIpOworCQkJc3RhcnRUZXh0LmFkZE1vZGlmeUxpc3RlbmVyKHJldFZhbHVlLmdldE1vZGlmeUxpc3RlbmVyKCkpOworCQkJZmluYWwgTGFiZWwgdG9MYWJlbCA9IG5ldyBMYWJlbChyZXRWYWx1ZSwgU1dULk5PTkUpOworCQkJdG9MYWJlbC5zZXRUZXh0KCIgdG8gIik7CisKKwkJCWVuZFRleHQgPSBuZXcgVGV4dChyZXRWYWx1ZSwgU1dULkJPUkRFUiB8IFNXVC5UUkFJTCk7CisJCQllbmRUZXh0LnNldFRleHQoZ2V0SW5pdGlhbEVuZFRleHQoKSk7CisJCQllbmRUZXh0LnNldFRvb2xUaXBUZXh0KCJFbmRpbmcgdmFsdWUiKTsKKwkJCWVuZFRleHQuYWRkTW9kaWZ5TGlzdGVuZXIocmV0VmFsdWUuZ2V0TW9kaWZ5TGlzdGVuZXIoKSk7CisKKwkJCWZpbmFsIExhYmVsIGJ5TGFiZWwgPSBuZXcgTGFiZWwocmV0VmFsdWUsIFNXVC5OT05FKTsKKwkJCWJ5TGFiZWwuc2V0VGV4dCgiIGJ5ICIpOworCisJCQlpbmNUZXh0ID0gbmV3IFRleHQocmV0VmFsdWUsIFNXVC5CT1JERVIgfCBTV1QuVFJBSUwpOworCQkJaW5jVGV4dC5zZXRUZXh0KGdldEluaXRpYWxJbmNyZW1lbnRUZXh0KCkpOworCQkJaW5jVGV4dC5zZXRUb29sVGlwVGV4dCgiSW5jcmVtZW50Iik7CisJCQlpbmNUZXh0LmFkZE1vZGlmeUxpc3RlbmVyKHJldFZhbHVlLmdldE1vZGlmeUxpc3RlbmVyKCkpOworCisJCQlvcmcuZWNsaXBzZS5zd3QubGF5b3V0LkZvcm1EYXRhIGZvcm1EYXRhID0gbnVsbDsKKworCQkJLy8gc3RhcnQKKwkJCWZvcm1EYXRhID0gbmV3IEZvcm1EYXRhKCk7CisJCQlmb3JtRGF0YS53aWR0aCA9IFRFWFRfV0lEVEg7CisJCQlmb3JtRGF0YS5sZWZ0ID0gbmV3IEZvcm1BdHRhY2htZW50KDAsIDApOworCQkJZm9ybURhdGEuYm90dG9tID0gbmV3IEZvcm1BdHRhY2htZW50KDEwMCwgMCk7CisJCQlzdGFydFRleHQuc2V0TGF5b3V0RGF0YShmb3JtRGF0YSk7CisKKwkJCS8vICJ0byIKKwkJCWZvcm1EYXRhID0gbmV3IEZvcm1EYXRhKCk7CisJCQlmb3JtRGF0YS5sZWZ0ID0gbmV3IEZvcm1BdHRhY2htZW50KHN0YXJ0VGV4dCwgMCwgU1dULlJJR0hUKTsKKwkJCWZvcm1EYXRhLmJvdHRvbSA9IG5ldyBGb3JtQXR0YWNobWVudChzdGFydFRleHQsIDAsIFNXVC5CT1RUT00pOworCQkJdG9MYWJlbC5zZXRMYXlvdXREYXRhKGZvcm1EYXRhKTsKKworCQkJLy8gZW5kCisJCQlmb3JtRGF0YSA9IG5ldyBGb3JtRGF0YSgpOworCQkJZm9ybURhdGEud2lkdGggPSBURVhUX1dJRFRIOworCQkJZm9ybURhdGEubGVmdCA9IG5ldyBGb3JtQXR0YWNobWVudCh0b0xhYmVsLCAwLCBTV1QuUklHSFQpOworCQkJZm9ybURhdGEuYm90dG9tID0gbmV3IEZvcm1BdHRhY2htZW50KHRvTGFiZWwsIDAsIFNXVC5CT1RUT00pOworCQkJZW5kVGV4dC5zZXRMYXlvdXREYXRhKGZvcm1EYXRhKTsKKworCQkJLy8gImJ5IgorCQkJZm9ybURhdGEgPSBuZXcgRm9ybURhdGEoKTsKKwkJCWZvcm1EYXRhLmxlZnQgPSBuZXcgRm9ybUF0dGFjaG1lbnQoZW5kVGV4dCwgMCwgU1dULlJJR0hUKTsKKwkJCWZvcm1EYXRhLmJvdHRvbSA9IG5ldyBGb3JtQXR0YWNobWVudChlbmRUZXh0LCAwLCBTV1QuQk9UVE9NKTsKKwkJCWJ5TGFiZWwuc2V0TGF5b3V0RGF0YShmb3JtRGF0YSk7CisKKwkJCS8vIGluYworCQkJZm9ybURhdGEgPSBuZXcgRm9ybURhdGEoKTsKKwkJCWZvcm1EYXRhLndpZHRoID0gVEVYVF9XSURUSDsKKwkJCWZvcm1EYXRhLmxlZnQgPSBuZXcgRm9ybUF0dGFjaG1lbnQoYnlMYWJlbCwgMCwgU1dULlJJR0hUKTsKKwkJCWZvcm1EYXRhLnJpZ2h0ID0gbmV3IEZvcm1BdHRhY2htZW50KDEwMCwgMCk7CisJCQlmb3JtRGF0YS5ib3R0b20gPSBuZXcgRm9ybUF0dGFjaG1lbnQoYnlMYWJlbCwgMCwgU1dULkJPVFRPTSk7CisJCQlpbmNUZXh0LnNldExheW91dERhdGEoZm9ybURhdGEpOworCisJCQlyZXR1cm4gcmV0VmFsdWU7CisJCX0gLy8gY3JlYXRlRWRpdENvbXBvc2l0ZQorCisJCS8qKgorCQkgKiBAcGFyYW0gcGFyZW50CisJCSAqICAgICAgICAgICAgdGhlIHBhcmVudCBjb21wb3NpdGUKKwkJICogQHBhcmFtIHBhcmVudE5ld01vZGlmaWVyUGFnZQorCQkgKiAgICAgICAgICAgIHRoZSB7QGxpbmsgTmV3TW9kaWZpZXJQYWdlfSB0aGF0IGlzIHRoZSBwYXJlbnQgdG8gcGFyZW50CisJCSAqIEByZXR1cm4gYSBuZXcge0BsaW5rIEZlYXR1cmVNb2RpZmllckVkaXRDb21wb3NpdGV9CisJCSAqLworCQlwcm90ZWN0ZWQgYWJzdHJhY3QgRmVhdHVyZU1vZGlmaWVyRWRpdENvbXBvc2l0ZSBnZXRGZWF0dXJlTW9kaWZpZXJFZGl0Q29tcG9zaXRlKAorCQkJCUNvbXBvc2l0ZSBwYXJlbnQsIE5ld01vZGlmaWVyUGFnZSBwYXJlbnROZXdNb2RpZmllclBhZ2UpOworCisJfSAvLyBOdW1lcmljUmFuZ2VGZWF0dXJlTW9kaWZpZXJFZGl0Q29tcG9zaXRlQWRhcHRlcgorCisJLyoqCisJICogVGhpcyBjbGFzcyBpcyBhIHtAbGluayBGZWF0dXJlTW9kaWZpZXJFZGl0Q29tcG9zaXRlQWRhcHRlcn0gZm9yCisJICoge0BsaW5rIEludGVnZXJSYW5nZU1vZGlmaWVyfXMuCisJICovCisJcHVibGljIHN0YXRpYyBjbGFzcyBJbnRlZ2VyUmFuZ2VGZWF0dXJlTW9kaWZpZXJFZGl0Q29tcG9zaXRlQWRhcHRlciBleHRlbmRzCisJCQlOdW1lcmljUmFuZ2VGZWF0dXJlTW9kaWZpZXJFZGl0Q29tcG9zaXRlQWRhcHRlciB7CisKKwkJLyoqCisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS51aS5hZGFwdGVycy5mZWF0dXJlbW9kaWZpZXJlZGl0Y29tcG9zaXRlLlJhbmdlRmVhdHVyZU1vZGlmaWVyRWRpdENvbXBvc2l0ZUFkYXB0ZXIuTnVtZXJpY1JhbmdlRmVhdHVyZU1vZGlmaWVyRWRpdENvbXBvc2l0ZUFkYXB0ZXIjaW5pdGlhbGl6ZUZlYXR1cmVNb2RpZmllcihJZGVudGlmaWFibGUpCisJCSAqLworCQlAT3ZlcnJpZGUKKwkJcHJvdGVjdGVkIHZvaWQgaW5pdGlhbGl6ZUZlYXR1cmVNb2RpZmllcigKKwkJCQlAU3VwcHJlc3NXYXJuaW5ncygidW51c2VkIikgZmluYWwgRU9iamVjdCB0YXJnZXQpIHsKKwkJCWZpbmFsIEludGVnZXJSYW5nZU1vZGlmaWVyIHJhbmdlTW9kaWZpZXIgPSAoSW50ZWdlclJhbmdlTW9kaWZpZXIpIGdldEZlYXR1cmVNb2RpZmllcigpOworCQkJcmFuZ2VNb2RpZmllci5zZXRTdGFydFZhbHVlKCgoSW50ZWdlcikgKGdldEZlYXR1cmVNb2RpZmllcigpCisJCQkJCS5nZXRUYXJnZXQoKS5lR2V0KGdldEZlYXR1cmVNb2RpZmllcigpCisJCQkJCS5nZXRFU3RydWN0dXJhbEZlYXR1cmUoKSkpKS5pbnRWYWx1ZSgpKTsKKwkJCXJhbmdlTW9kaWZpZXIuc2V0RW5kVmFsdWUocmFuZ2VNb2RpZmllci5nZXRTdGFydFZhbHVlKCkpOworCQl9IC8vIGluaXRpYWxpemVGZWF0dXJlTW9kaWZpZXIKKworCQkvKioKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnVpLmFkYXB0ZXJzLmZlYXR1cmVtb2RpZmllcmVkaXRjb21wb3NpdGUuUmFuZ2VGZWF0dXJlTW9kaWZpZXJFZGl0Q29tcG9zaXRlQWRhcHRlci5OdW1lcmljUmFuZ2VGZWF0dXJlTW9kaWZpZXJFZGl0Q29tcG9zaXRlQWRhcHRlciNnZXRJbml0aWFsRW5kVGV4dCgpCisJCSAqLworCQlAT3ZlcnJpZGUKKwkJcHJvdGVjdGVkIFN0cmluZyBnZXRJbml0aWFsRW5kVGV4dCgpIHsKKwkJCXJldHVybiBJbnRlZ2VyCisJCQkJCS50b1N0cmluZygoKEludGVnZXJSYW5nZU1vZGlmaWVyKSBnZXRGZWF0dXJlTW9kaWZpZXIoKSkKKwkJCQkJCQkuZ2V0RW5kVmFsdWUoKSk7CisJCX0KKworCQkvKioKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnVpLmFkYXB0ZXJzLmZlYXR1cmVtb2RpZmllcmVkaXRjb21wb3NpdGUuUmFuZ2VGZWF0dXJlTW9kaWZpZXJFZGl0Q29tcG9zaXRlQWRhcHRlci5OdW1lcmljUmFuZ2VGZWF0dXJlTW9kaWZpZXJFZGl0Q29tcG9zaXRlQWRhcHRlciNnZXRJbml0aWFsSW5jcmVtZW50VGV4dCgpCisJCSAqLworCQlAT3ZlcnJpZGUKKwkJcHJvdGVjdGVkIFN0cmluZyBnZXRJbml0aWFsSW5jcmVtZW50VGV4dCgpIHsKKwkJCXJldHVybiBJbnRlZ2VyCisJCQkJCS50b1N0cmluZygoKEludGVnZXJSYW5nZU1vZGlmaWVyKSBnZXRGZWF0dXJlTW9kaWZpZXIoKSkKKwkJCQkJCQkuZ2V0SW5jcmVtZW50KCkpOworCQl9CisKKwkJLyoqCisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS51aS5hZGFwdGVycy5mZWF0dXJlbW9kaWZpZXJlZGl0Y29tcG9zaXRlLlJhbmdlRmVhdHVyZU1vZGlmaWVyRWRpdENvbXBvc2l0ZUFkYXB0ZXIuTnVtZXJpY1JhbmdlRmVhdHVyZU1vZGlmaWVyRWRpdENvbXBvc2l0ZUFkYXB0ZXIjZ2V0SW5pdGlhbFN0YXJ0VGV4dCgpCisJCSAqLworCQlAT3ZlcnJpZGUKKwkJcHJvdGVjdGVkIFN0cmluZyBnZXRJbml0aWFsU3RhcnRUZXh0KCkgeworCQkJcmV0dXJuIEludGVnZXIKKwkJCQkJLnRvU3RyaW5nKCgoSW50ZWdlclJhbmdlTW9kaWZpZXIpIGdldEZlYXR1cmVNb2RpZmllcigpKQorCQkJCQkJCS5nZXRTdGFydFZhbHVlKCkpOworCQl9IC8vIGdldEluaXRpYWxTdGFydFRleHQKKworCQkvKioKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnVpLmFkYXB0ZXJzLmZlYXR1cmVtb2RpZmllcmVkaXRjb21wb3NpdGUuUmFuZ2VGZWF0dXJlTW9kaWZpZXJFZGl0Q29tcG9zaXRlQWRhcHRlci5OdW1lcmljUmFuZ2VGZWF0dXJlTW9kaWZpZXJFZGl0Q29tcG9zaXRlQWRhcHRlciNnZXRGZWF0dXJlTW9kaWZpZXJFZGl0Q29tcG9zaXRlKENvbXBvc2l0ZSwKKwkJICogICAgICBOZXdNb2RpZmllclBhZ2UpCisJCSAqLworCQlAT3ZlcnJpZGUKKwkJcHJvdGVjdGVkIEZlYXR1cmVNb2RpZmllckVkaXRDb21wb3NpdGUgZ2V0RmVhdHVyZU1vZGlmaWVyRWRpdENvbXBvc2l0ZSgKKwkJCQlmaW5hbCBDb21wb3NpdGUgcGFyZW50LAorCQkJCWZpbmFsIE5ld01vZGlmaWVyUGFnZSBwYXJlbnROZXdNb2RpZmllclBhZ2UpIHsKKwkJCWZpbmFsIEZlYXR1cmVNb2RpZmllckVkaXRDb21wb3NpdGUgcmV0VmFsdWUgPSBuZXcgRmVhdHVyZU1vZGlmaWVyRWRpdENvbXBvc2l0ZSgKKwkJCQkJcGFyZW50LCBwYXJlbnROZXdNb2RpZmllclBhZ2UsCisJCQkJCShGZWF0dXJlTW9kaWZpZXIpIGdldFRhcmdldCgpKSB7CisKKwkJCQkvKioKKwkJCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0udWkud2l6YXJkcy5OZXdNb2RpZmllclBhZ2UuRmVhdHVyZU1vZGlmaWVyRWRpdENvbXBvc2l0ZSN2YWxpZGF0ZSgpCisJCQkJICovCisJCQkJQE92ZXJyaWRlCisJCQkJcHJvdGVjdGVkIGJvb2xlYW4gdmFsaWRhdGUoKSB7CisJCQkJCWJvb2xlYW4gcmV0VmFsdWUgPSB0cnVlOworCisJCQkJCVN0cmluZyBtZXNzYWdlID0gbnVsbDsKKworCQkJCQlpbnQgc3RhcnRWYWx1ZSA9IDA7CisJCQkJCWludCBlbmRWYWx1ZSA9IDA7CisJCQkJCWludCBpbmNWYWx1ZSA9IDA7CisKKwkJCQkJLy8gU3RhcnQgdGV4dAorCQkJCQkvLyBTdGlsbCB2YWxpZD8KKwkJCQkJaWYgKHJldFZhbHVlKSB7CisJCQkJCQkvLyBZZXMKKwkJCQkJCXRyeSB7CisJCQkJCQkJLy8gVmFsaWQgc3RhcnQgdmFsdWU/CisJCQkJCQkJc3RhcnRWYWx1ZSA9IEludGVnZXIucGFyc2VJbnQoc3RhcnRUZXh0LmdldFRleHQoKSk7CisJCQkJCQkJKChJbnRlZ2VyUmFuZ2VNb2RpZmllcikgZmVhdHVyZU1vZGlmaWVyKQorCQkJCQkJCQkJLnNldFN0YXJ0VmFsdWUoc3RhcnRWYWx1ZSk7CisJCQkJCQl9IGNhdGNoIChmaW5hbCBOdW1iZXJGb3JtYXRFeGNlcHRpb24gZSkgeworCQkJCQkJCXJldFZhbHVlID0gZmFsc2U7CisJCQkJCQkJbWVzc2FnZSA9ICJTdGFydCB2YWx1ZSBub3QgdmFsaWQiOworCQkJCQkJfSAvLyBjYXRjaCBOdW1iZXJGb3JtYXRFeGNlcHRpb24KKwkJCQkJfSAvLyBpZgorCisJCQkJCS8vIEVuZCB0ZXh0CisJCQkJCS8vIFN0aWxsIHZhbGlkPworCQkJCQlpZiAocmV0VmFsdWUpIHsKKwkJCQkJCS8vIFllcworCQkJCQkJdHJ5IHsKKwkJCQkJCQkvLyBWYWxpZCBlbmQgdmFsdWU/CisJCQkJCQkJZW5kVmFsdWUgPSBJbnRlZ2VyLnBhcnNlSW50KGVuZFRleHQuZ2V0VGV4dCgpKTsKKwkJCQkJCQkoKEludGVnZXJSYW5nZU1vZGlmaWVyKSBmZWF0dXJlTW9kaWZpZXIpCisJCQkJCQkJCQkuc2V0RW5kVmFsdWUoZW5kVmFsdWUpOworCQkJCQkJfSBjYXRjaCAoZmluYWwgTnVtYmVyRm9ybWF0RXhjZXB0aW9uIGUpIHsKKwkJCQkJCQlyZXRWYWx1ZSA9IGZhbHNlOworCQkJCQkJCW1lc3NhZ2UgPSAiRW5kIHZhbHVlIG5vdCB2YWxpZCI7CisJCQkJCQl9IC8vIGNhdGNoIE51bWJlckZvcm1hdEV4Y2VwdGlvbgorCQkJCQl9IC8vIGlmCisKKwkJCQkJLy8gSW5jIHRleHQKKwkJCQkJLy8gU3RpbGwgdmFsaWQ/CisJCQkJCWlmIChyZXRWYWx1ZSkgeworCQkJCQkJLy8gWWVzCisJCQkJCQl0cnkgeworCQkJCQkJCS8vIFZhbGlkIGluYyB2YWx1ZT8KKwkJCQkJCQlpbmNWYWx1ZSA9IEludGVnZXIucGFyc2VJbnQoaW5jVGV4dC5nZXRUZXh0KCkpOworCQkJCQkJCSgoSW50ZWdlclJhbmdlTW9kaWZpZXIpIGZlYXR1cmVNb2RpZmllcikKKwkJCQkJCQkJCS5zZXRJbmNyZW1lbnQoaW5jVmFsdWUpOworCQkJCQkJfSBjYXRjaCAoZmluYWwgTnVtYmVyRm9ybWF0RXhjZXB0aW9uIGUpIHsKKwkJCQkJCQlyZXRWYWx1ZSA9IGZhbHNlOworCQkJCQkJCW1lc3NhZ2UgPSAiSW5jcmVtZW50IHZhbHVlIG5vdCB2YWxpZCI7CisJCQkJCQl9IC8vIGNhdGNoIE51bWJlckZvcm1hdEV4Y2VwdGlvbgorCQkJCQl9IC8vIGlmCisKKwkJCQkJLy8gQ29uc2lzdGVudAorCQkJCQkvLyBTdGlsbCB2YWxpZD8KKwkJCQkJaWYgKHJldFZhbHVlKSB7CisJCQkJCQkvLyBZZXMKKwkJCQkJCS8vIEFyZSB0aGUgcmVsYXRpdmUgdmFsdWVzIGNvbnNpc3RlbnQ/CisJCQkJCQkvLyBpZiAoIShzdGFydFZhbHVlIDw9IGVuZFZhbHVlICYmIGluY1ZhbHVlID49IDBMKSkgeworCQkJCQkJaWYgKHN0YXJ0VmFsdWUgPD0gZW5kVmFsdWUgJiYgaW5jVmFsdWUgPCAwTCkgeworCQkJCQkJCS8vIE5vCisJCQkJCQkJcmV0VmFsdWUgPSBmYWxzZTsKKwkJCQkJCQltZXNzYWdlID0gIklmIHRoZSBzdGFydCBpcyA8PSB0aGUgZW5kLCB0aGVuIHRoZSBpbmNyZW1lbnQgY2Fubm9udCBiZSA8IDAuMCI7CisJCQkJCQl9IC8vIGlmCisJCQkJCQllbHNlIGlmIChzdGFydFZhbHVlID4gZW5kVmFsdWUgJiYgaW5jVmFsdWUgPj0gMEwpIHsKKwkJCQkJCQkvLyBObworCQkJCQkJCXJldFZhbHVlID0gZmFsc2U7CisJCQkJCQkJbWVzc2FnZSA9ICJJZiB0aGUgc3RhcnQgaXMgPiB0aGUgZW5kLCB0aGVuIHRoZSBpbmNyZW1lbnQgY2Fubm9udCBiZSA+PSAwLjAiOworCQkJCQkJfSAvLyBpZgorCQkJCQl9IC8vIGlmCisKKwkJCQkJLy8gQW55IGVycm9yIG1lc3NhZ2UgdG8gcmVwb3J0PworCQkJCQlpZiAobWVzc2FnZSAhPSBudWxsKSB7CisJCQkJCQkvLyBZZXMKKwkJCQkJCXBhcmVudE5ld01vZGlmaWVyUGFnZS5zZXRFcnJvck1lc3NhZ2UobWVzc2FnZSk7CisJCQkJCX0gLy8gaWYKKworCQkJCQkvLyBFdmVyeXRoaW5nIE9rPworCQkJCQlpZiAocmV0VmFsdWUpIHsKKwkJCQkJCS8vIFllcworCQkJCQkJLy8gQ2hlY2sgb3V0IHRoZSBwYXJlbnQgdGhlbgorCQkJCQkJcmV0VmFsdWUgPSBwYXJlbnROZXdNb2RpZmllclBhZ2UudmFsaWRhdGVQYWdlKCk7CisJCQkJCX0gLy8gaWYKKworCQkJCQlyZXR1cm4gcmV0VmFsdWU7CisJCQkJfSAvLyB2YWxpZGF0ZQorCQkJfTsKKwkJCXJldHVybiByZXRWYWx1ZTsKKwkJfSAvLyBnZXRGZWF0dXJlTW9kaWZpZXJFZGl0Q29tcG9zaXRlCisKKwl9IC8vIEludGVnZXJSYW5nZUZlYXR1cmVNb2RpZmllckVkaXRDb21wb3NpdGVBZGFwdGVyCisKKwkvKioKKwkgKiBUaGlzIGNsYXNzIGlzIGEge0BsaW5rIEZlYXR1cmVNb2RpZmllckVkaXRDb21wb3NpdGVBZGFwdGVyfSBmb3IKKwkgKiB7QGxpbmsgSW50ZWdlclJhbmdlTW9kaWZpZXJ9cy4KKwkgKi8KKwlwdWJsaWMgc3RhdGljIGNsYXNzIExvbmdSYW5nZUZlYXR1cmVNb2RpZmllckVkaXRDb21wb3NpdGVBZGFwdGVyIGV4dGVuZHMKKwkJCU51bWVyaWNSYW5nZUZlYXR1cmVNb2RpZmllckVkaXRDb21wb3NpdGVBZGFwdGVyIHsKKworCQkvKioKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnVpLmFkYXB0ZXJzLmZlYXR1cmVtb2RpZmllcmVkaXRjb21wb3NpdGUuUmFuZ2VGZWF0dXJlTW9kaWZpZXJFZGl0Q29tcG9zaXRlQWRhcHRlci5OdW1lcmljUmFuZ2VGZWF0dXJlTW9kaWZpZXJFZGl0Q29tcG9zaXRlQWRhcHRlciNpbml0aWFsaXplRmVhdHVyZU1vZGlmaWVyKElkZW50aWZpYWJsZSkKKwkJICovCisJCUBPdmVycmlkZQorCQlwcm90ZWN0ZWQgdm9pZCBpbml0aWFsaXplRmVhdHVyZU1vZGlmaWVyKAorCQkJCUBTdXBwcmVzc1dhcm5pbmdzKCJ1bnVzZWQiKSBmaW5hbCBFT2JqZWN0IHRhcmdldCkgeworCQkJZmluYWwgTG9uZ1JhbmdlTW9kaWZpZXIgcmFuZ2VNb2RpZmllciA9IChMb25nUmFuZ2VNb2RpZmllcikgZ2V0RmVhdHVyZU1vZGlmaWVyKCk7CisJCQlyYW5nZU1vZGlmaWVyLnNldFN0YXJ0VmFsdWUoKChMb25nKSAoZ2V0RmVhdHVyZU1vZGlmaWVyKCkKKwkJCQkJLmdldFRhcmdldCgpLmVHZXQoZ2V0RmVhdHVyZU1vZGlmaWVyKCkKKwkJCQkJLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZSgpKSkpLmxvbmdWYWx1ZSgpKTsKKwkJCXJhbmdlTW9kaWZpZXIuc2V0RW5kVmFsdWUocmFuZ2VNb2RpZmllci5nZXRTdGFydFZhbHVlKCkpOworCQl9IC8vIGluaXRpYWxpemVGZWF0dXJlTW9kaWZpZXIKKworCQkvKioKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnVpLmFkYXB0ZXJzLmZlYXR1cmVtb2RpZmllcmVkaXRjb21wb3NpdGUuUmFuZ2VGZWF0dXJlTW9kaWZpZXJFZGl0Q29tcG9zaXRlQWRhcHRlci5OdW1lcmljUmFuZ2VGZWF0dXJlTW9kaWZpZXJFZGl0Q29tcG9zaXRlQWRhcHRlciNnZXRJbml0aWFsRW5kVGV4dCgpCisJCSAqLworCQlAT3ZlcnJpZGUKKwkJcHJvdGVjdGVkIFN0cmluZyBnZXRJbml0aWFsRW5kVGV4dCgpIHsKKwkJCXJldHVybiBMb25nLnRvU3RyaW5nKCgoTG9uZ1JhbmdlTW9kaWZpZXIpIGdldEZlYXR1cmVNb2RpZmllcigpKQorCQkJCQkuZ2V0RW5kVmFsdWUoKSk7CisJCX0KKworCQkvKioKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnVpLmFkYXB0ZXJzLmZlYXR1cmVtb2RpZmllcmVkaXRjb21wb3NpdGUuUmFuZ2VGZWF0dXJlTW9kaWZpZXJFZGl0Q29tcG9zaXRlQWRhcHRlci5OdW1lcmljUmFuZ2VGZWF0dXJlTW9kaWZpZXJFZGl0Q29tcG9zaXRlQWRhcHRlciNnZXRJbml0aWFsSW5jcmVtZW50VGV4dCgpCisJCSAqLworCQlAT3ZlcnJpZGUKKwkJcHJvdGVjdGVkIFN0cmluZyBnZXRJbml0aWFsSW5jcmVtZW50VGV4dCgpIHsKKwkJCXJldHVybiBMb25nLnRvU3RyaW5nKCgoTG9uZ1JhbmdlTW9kaWZpZXIpIGdldEZlYXR1cmVNb2RpZmllcigpKQorCQkJCQkuZ2V0SW5jcmVtZW50KCkpOworCQl9CisKKwkJLyoqCisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS51aS5hZGFwdGVycy5mZWF0dXJlbW9kaWZpZXJlZGl0Y29tcG9zaXRlLlJhbmdlRmVhdHVyZU1vZGlmaWVyRWRpdENvbXBvc2l0ZUFkYXB0ZXIuTnVtZXJpY1JhbmdlRmVhdHVyZU1vZGlmaWVyRWRpdENvbXBvc2l0ZUFkYXB0ZXIjZ2V0SW5pdGlhbFN0YXJ0VGV4dCgpCisJCSAqLworCQlAT3ZlcnJpZGUKKwkJcHJvdGVjdGVkIFN0cmluZyBnZXRJbml0aWFsU3RhcnRUZXh0KCkgeworCQkJcmV0dXJuIExvbmcudG9TdHJpbmcoKChMb25nUmFuZ2VNb2RpZmllcikgZ2V0RmVhdHVyZU1vZGlmaWVyKCkpCisJCQkJCS5nZXRTdGFydFZhbHVlKCkpOworCQl9IC8vIGdldEluaXRpYWxTdGFydFRleHQKKworCQkvKioKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnVpLmFkYXB0ZXJzLmZlYXR1cmVtb2RpZmllcmVkaXRjb21wb3NpdGUuUmFuZ2VGZWF0dXJlTW9kaWZpZXJFZGl0Q29tcG9zaXRlQWRhcHRlci5OdW1lcmljUmFuZ2VGZWF0dXJlTW9kaWZpZXJFZGl0Q29tcG9zaXRlQWRhcHRlciNnZXRGZWF0dXJlTW9kaWZpZXJFZGl0Q29tcG9zaXRlKG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZSwKKwkJICogICAgICBvcmcuZWNsaXBzZS5zdGVtLnVpLndpemFyZHMuTmV3TW9kaWZpZXJQYWdlKQorCQkgKi8KKwkJQE92ZXJyaWRlCisJCXByb3RlY3RlZCBGZWF0dXJlTW9kaWZpZXJFZGl0Q29tcG9zaXRlIGdldEZlYXR1cmVNb2RpZmllckVkaXRDb21wb3NpdGUoCisJCQkJZmluYWwgQ29tcG9zaXRlIHBhcmVudCwKKwkJCQlmaW5hbCBOZXdNb2RpZmllclBhZ2UgcGFyZW50TmV3TW9kaWZpZXJQYWdlKSB7CisJCQlmaW5hbCBGZWF0dXJlTW9kaWZpZXJFZGl0Q29tcG9zaXRlIHJldFZhbHVlID0gbmV3IEZlYXR1cmVNb2RpZmllckVkaXRDb21wb3NpdGUoCisJCQkJCXBhcmVudCwgcGFyZW50TmV3TW9kaWZpZXJQYWdlLAorCQkJCQkoRmVhdHVyZU1vZGlmaWVyKSBnZXRUYXJnZXQoKSkgeworCisJCQkJLyoqCisJCQkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnVpLndpemFyZHMuTmV3TW9kaWZpZXJQYWdlLkZlYXR1cmVNb2RpZmllckVkaXRDb21wb3NpdGUjdmFsaWRhdGUoKQorCQkJCSAqLworCQkJCUBPdmVycmlkZQorCQkJCXByb3RlY3RlZCBib29sZWFuIHZhbGlkYXRlKCkgeworCQkJCQlib29sZWFuIHJldFZhbHVlID0gdHJ1ZTsKKworCQkJCQlTdHJpbmcgbWVzc2FnZSA9IG51bGw7CisKKwkJCQkJbG9uZyBzdGFydFZhbHVlID0gMEw7CisJCQkJCWxvbmcgZW5kVmFsdWUgPSAwTDsKKwkJCQkJbG9uZyBpbmNWYWx1ZSA9IDBMOworCisJCQkJCS8vIFN0YXJ0IHRleHQKKwkJCQkJLy8gU3RpbGwgdmFsaWQ/CisJCQkJCWlmIChyZXRWYWx1ZSkgeworCQkJCQkJLy8gWWVzCisJCQkJCQl0cnkgeworCQkJCQkJCS8vIFZhbGlkIHN0YXJ0IHZhbHVlPworCQkJCQkJCXN0YXJ0VmFsdWUgPSBMb25nLnBhcnNlTG9uZyhzdGFydFRleHQuZ2V0VGV4dCgpKTsKKwkJCQkJCQkoKExvbmdSYW5nZU1vZGlmaWVyKSBmZWF0dXJlTW9kaWZpZXIpCisJCQkJCQkJCQkuc2V0U3RhcnRWYWx1ZShzdGFydFZhbHVlKTsKKwkJCQkJCX0gY2F0Y2ggKGZpbmFsIE51bWJlckZvcm1hdEV4Y2VwdGlvbiBlKSB7CisJCQkJCQkJcmV0VmFsdWUgPSBmYWxzZTsKKwkJCQkJCQltZXNzYWdlID0gIlN0YXJ0IHZhbHVlIG5vdCB2YWxpZCI7CisJCQkJCQl9IC8vIGNhdGNoIE51bWJlckZvcm1hdEV4Y2VwdGlvbgorCQkJCQl9IC8vIGlmCisKKwkJCQkJLy8gRW5kIHRleHQKKwkJCQkJLy8gU3RpbGwgdmFsaWQ/CisJCQkJCWlmIChyZXRWYWx1ZSkgeworCQkJCQkJLy8gWWVzCisJCQkJCQl0cnkgeworCQkJCQkJCS8vIFZhbGlkIGVuZCB2YWx1ZT8KKwkJCQkJCQllbmRWYWx1ZSA9IExvbmcucGFyc2VMb25nKGVuZFRleHQuZ2V0VGV4dCgpKTsKKwkJCQkJCQkoKExvbmdSYW5nZU1vZGlmaWVyKSBmZWF0dXJlTW9kaWZpZXIpCisJCQkJCQkJCQkuc2V0RW5kVmFsdWUoZW5kVmFsdWUpOworCQkJCQkJfSBjYXRjaCAoZmluYWwgTnVtYmVyRm9ybWF0RXhjZXB0aW9uIGUpIHsKKwkJCQkJCQlyZXRWYWx1ZSA9IGZhbHNlOworCQkJCQkJCW1lc3NhZ2UgPSAiRW5kIHZhbHVlIG5vdCB2YWxpZCI7CisJCQkJCQl9IC8vIGNhdGNoIE51bWJlckZvcm1hdEV4Y2VwdGlvbgorCQkJCQl9IC8vIGlmCisKKwkJCQkJLy8gSW5jIHRleHQKKwkJCQkJLy8gU3RpbGwgdmFsaWQ/CisJCQkJCWlmIChyZXRWYWx1ZSkgeworCQkJCQkJLy8gWWVzCisJCQkJCQl0cnkgeworCQkJCQkJCS8vIFZhbGlkIGluYyB2YWx1ZT8KKwkJCQkJCQlpbmNWYWx1ZSA9IExvbmcucGFyc2VMb25nKGluY1RleHQuZ2V0VGV4dCgpKTsKKwkJCQkJCQkoKExvbmdSYW5nZU1vZGlmaWVyKSBmZWF0dXJlTW9kaWZpZXIpCisJCQkJCQkJCQkuc2V0SW5jcmVtZW50KGluY1ZhbHVlKTsKKwkJCQkJCX0gY2F0Y2ggKGZpbmFsIE51bWJlckZvcm1hdEV4Y2VwdGlvbiBlKSB7CisJCQkJCQkJcmV0VmFsdWUgPSBmYWxzZTsKKwkJCQkJCQltZXNzYWdlID0gIkluY3JlbWVudCB2YWx1ZSBub3QgdmFsaWQiOworCQkJCQkJfSAvLyBjYXRjaCBOdW1iZXJGb3JtYXRFeGNlcHRpb24KKwkJCQkJfSAvLyBpZgorCisJCQkJCS8vIENvbnNpc3RlbnQKKwkJCQkJLy8gU3RpbGwgdmFsaWQ/CisJCQkJCWlmIChyZXRWYWx1ZSkgeworCQkJCQkJLy8gWWVzCisJCQkJCQkvLyBBcmUgdGhlIHJlbGF0aXZlIHZhbHVlcyBjb25zaXN0ZW50PworCQkJCQkJLy8gaWYgKCEoc3RhcnRWYWx1ZSA8PSBlbmRWYWx1ZSAmJiBpbmNWYWx1ZSA+PSAwTCkpIHsKKwkJCQkJCWlmIChzdGFydFZhbHVlIDw9IGVuZFZhbHVlICYmIGluY1ZhbHVlIDwgMEwpIHsKKwkJCQkJCQkvLyBObworCQkJCQkJCXJldFZhbHVlID0gZmFsc2U7CisJCQkJCQkJbWVzc2FnZSA9ICJJZiB0aGUgc3RhcnQgaXMgPD0gdGhlIGVuZCwgdGhlbiB0aGUgaW5jcmVtZW50IGNhbm5vbnQgYmUgPCAwLjAiOworCQkJCQkJfSAvLyBpZgorCQkJCQkJZWxzZSBpZiAoc3RhcnRWYWx1ZSA+IGVuZFZhbHVlICYmIGluY1ZhbHVlID49IDBMKSB7CisJCQkJCQkJLy8gTm8KKwkJCQkJCQlyZXRWYWx1ZSA9IGZhbHNlOworCQkJCQkJCW1lc3NhZ2UgPSAiSWYgdGhlIHN0YXJ0IGlzID4gdGhlIGVuZCwgdGhlbiB0aGUgaW5jcmVtZW50IGNhbm5vbnQgYmUgPj0gMC4wIjsKKwkJCQkJCX0gLy8gaWYKKwkJCQkJfSAvLyBpZgorCQkJCQkvLyBBbnkgZXJyb3IgbWVzc2FnZSB0byByZXBvcnQ/CisJCQkJCWlmIChtZXNzYWdlICE9IG51bGwpIHsKKwkJCQkJCS8vIFllcworCQkJCQkJcGFyZW50TmV3TW9kaWZpZXJQYWdlLnNldEVycm9yTWVzc2FnZShtZXNzYWdlKTsKKwkJCQkJfSAvLyBpZgorCisJCQkJCS8vIEV2ZXJ5dGhpbmcgT2s/CisJCQkJCWlmIChyZXRWYWx1ZSkgeworCQkJCQkJLy8gWWVzCisJCQkJCQkvLyBDaGVjayBvdXQgdGhlIHBhcmVudCB0aGVuCisJCQkJCQlyZXRWYWx1ZSA9IHBhcmVudE5ld01vZGlmaWVyUGFnZS52YWxpZGF0ZVBhZ2UoKTsKKwkJCQkJfSAvLyBpZgorCisJCQkJCXJldHVybiByZXRWYWx1ZTsKKwkJCQl9IC8vIHZhbGlkYXRlCisKKwkJCX07CisJCQlyZXR1cm4gcmV0VmFsdWU7CisJCX0gLy8gZ2V0RmVhdHVyZU1vZGlmaWVyRWRpdENvbXBvc2l0ZQorCisJfSAvLyBMb25nUmFuZ2VGZWF0dXJlTW9kaWZpZXJFZGl0Q29tcG9zaXRlQWRhcHRlcgorCisJLyoqCisJICogVGhpcyBjbGFzcyBpcyBhIHtAbGluayBGZWF0dXJlTW9kaWZpZXJFZGl0Q29tcG9zaXRlQWRhcHRlcn0gZm9yCisJICoge0BsaW5rIERvdWJsZVJhbmdlTW9kaWZpZXJ9cy4KKwkgKi8KKwlwdWJsaWMgc3RhdGljIGNsYXNzIERvdWJsZVJhbmdlRmVhdHVyZU1vZGlmaWVyRWRpdENvbXBvc2l0ZUFkYXB0ZXIgZXh0ZW5kcworCQkJTnVtZXJpY1JhbmdlRmVhdHVyZU1vZGlmaWVyRWRpdENvbXBvc2l0ZUFkYXB0ZXIgeworCisJCS8qKgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0udWkuYWRhcHRlcnMuZmVhdHVyZW1vZGlmaWVyZWRpdGNvbXBvc2l0ZS5SYW5nZUZlYXR1cmVNb2RpZmllckVkaXRDb21wb3NpdGVBZGFwdGVyLk51bWVyaWNSYW5nZUZlYXR1cmVNb2RpZmllckVkaXRDb21wb3NpdGVBZGFwdGVyI2luaXRpYWxpemVGZWF0dXJlTW9kaWZpZXIoSWRlbnRpZmlhYmxlKQorCQkgKi8KKwkJQE92ZXJyaWRlCisJCXByb3RlY3RlZCB2b2lkIGluaXRpYWxpemVGZWF0dXJlTW9kaWZpZXIoCisJCQkJQFN1cHByZXNzV2FybmluZ3MoInVudXNlZCIpIGZpbmFsIEVPYmplY3QgdGFyZ2V0KSB7CisJCQlmaW5hbCBEb3VibGVSYW5nZU1vZGlmaWVyIHJhbmdlTW9kaWZpZXIgPSAoRG91YmxlUmFuZ2VNb2RpZmllcikgZ2V0RmVhdHVyZU1vZGlmaWVyKCk7CisJCQlyYW5nZU1vZGlmaWVyLnNldFN0YXJ0VmFsdWUoKChEb3VibGUpIChnZXRGZWF0dXJlTW9kaWZpZXIoKQorCQkJCQkuZ2V0VGFyZ2V0KCkuZUdldChnZXRGZWF0dXJlTW9kaWZpZXIoKQorCQkJCQkuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlKCkpKSkuZG91YmxlVmFsdWUoKSk7CisJCQlyYW5nZU1vZGlmaWVyLnNldEVuZFZhbHVlKHJhbmdlTW9kaWZpZXIuZ2V0U3RhcnRWYWx1ZSgpKTsKKwkJCS8vIHJhbmdlTW9kaWZpZXIuc2V0SW5jcmVtZW50KG5ldyBEb3VibGUoMC4wKSk7CisJCX0gLy8gaW5pdGlhbGl6ZUZlYXR1cmVNb2RpZmllcgorCisJCS8qKgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0udWkuYWRhcHRlcnMuZmVhdHVyZW1vZGlmaWVyZWRpdGNvbXBvc2l0ZS5SYW5nZUZlYXR1cmVNb2RpZmllckVkaXRDb21wb3NpdGVBZGFwdGVyLk51bWVyaWNSYW5nZUZlYXR1cmVNb2RpZmllckVkaXRDb21wb3NpdGVBZGFwdGVyI2dldEluaXRpYWxFbmRUZXh0KCkKKwkJICovCisJCUBPdmVycmlkZQorCQlwcm90ZWN0ZWQgU3RyaW5nIGdldEluaXRpYWxFbmRUZXh0KCkgeworCQkJcmV0dXJuIERvdWJsZS50b1N0cmluZygoKERvdWJsZVJhbmdlTW9kaWZpZXIpIGdldEZlYXR1cmVNb2RpZmllcigpKQorCQkJCQkuZ2V0RW5kVmFsdWUoKSk7CisJCX0KKworCQkvKioKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnVpLmFkYXB0ZXJzLmZlYXR1cmVtb2RpZmllcmVkaXRjb21wb3NpdGUuUmFuZ2VGZWF0dXJlTW9kaWZpZXJFZGl0Q29tcG9zaXRlQWRhcHRlci5OdW1lcmljUmFuZ2VGZWF0dXJlTW9kaWZpZXJFZGl0Q29tcG9zaXRlQWRhcHRlciNnZXRJbml0aWFsSW5jcmVtZW50VGV4dCgpCisJCSAqLworCQlAT3ZlcnJpZGUKKwkJcHJvdGVjdGVkIFN0cmluZyBnZXRJbml0aWFsSW5jcmVtZW50VGV4dCgpIHsKKwkJCXJldHVybiBEb3VibGUudG9TdHJpbmcoKChEb3VibGVSYW5nZU1vZGlmaWVyKSBnZXRGZWF0dXJlTW9kaWZpZXIoKSkKKwkJCQkJLmdldEluY3JlbWVudCgpKTsKKwkJfQorCisJCS8qKgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0udWkuYWRhcHRlcnMuZmVhdHVyZW1vZGlmaWVyZWRpdGNvbXBvc2l0ZS5SYW5nZUZlYXR1cmVNb2RpZmllckVkaXRDb21wb3NpdGVBZGFwdGVyLk51bWVyaWNSYW5nZUZlYXR1cmVNb2RpZmllckVkaXRDb21wb3NpdGVBZGFwdGVyI2dldEluaXRpYWxTdGFydFRleHQoKQorCQkgKi8KKwkJQE92ZXJyaWRlCisJCXByb3RlY3RlZCBTdHJpbmcgZ2V0SW5pdGlhbFN0YXJ0VGV4dCgpIHsKKwkJCXJldHVybiBEb3VibGUudG9TdHJpbmcoKChEb3VibGVSYW5nZU1vZGlmaWVyKSBnZXRGZWF0dXJlTW9kaWZpZXIoKSkKKwkJCQkJLmdldFN0YXJ0VmFsdWUoKSk7CisJCX0gLy8gZ2V0SW5pdGlhbFN0YXJ0VGV4dAorCisJCS8qKgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0udWkuYWRhcHRlcnMuZmVhdHVyZW1vZGlmaWVyZWRpdGNvbXBvc2l0ZS5SYW5nZUZlYXR1cmVNb2RpZmllckVkaXRDb21wb3NpdGVBZGFwdGVyLk51bWVyaWNSYW5nZUZlYXR1cmVNb2RpZmllckVkaXRDb21wb3NpdGVBZGFwdGVyI2dldEZlYXR1cmVNb2RpZmllckVkaXRDb21wb3NpdGUoQ29tcG9zaXRlLAorCQkgKiAgICAgIE5ld01vZGlmaWVyUGFnZSkKKwkJICovCisJCUBPdmVycmlkZQorCQlwcm90ZWN0ZWQgRmVhdHVyZU1vZGlmaWVyRWRpdENvbXBvc2l0ZSBnZXRGZWF0dXJlTW9kaWZpZXJFZGl0Q29tcG9zaXRlKAorCQkJCWZpbmFsIENvbXBvc2l0ZSBwYXJlbnQsCisJCQkJZmluYWwgTmV3TW9kaWZpZXJQYWdlIHBhcmVudE5ld01vZGlmaWVyUGFnZSkgeworCisJCQlmaW5hbCBGZWF0dXJlTW9kaWZpZXJFZGl0Q29tcG9zaXRlIHJldFZhbHVlID0gbmV3IEZlYXR1cmVNb2RpZmllckVkaXRDb21wb3NpdGUoCisJCQkJCXBhcmVudCwgcGFyZW50TmV3TW9kaWZpZXJQYWdlLAorCQkJCQkoRmVhdHVyZU1vZGlmaWVyKSBnZXRUYXJnZXQoKSkgeworCQkJCUBPdmVycmlkZQorCQkJCXByb3RlY3RlZCBib29sZWFuIHZhbGlkYXRlKCkgeworCQkJCQlib29sZWFuIHJldFZhbHVlID0gdHJ1ZTsKKworCQkJCQlTdHJpbmcgbWVzc2FnZSA9IG51bGw7CisJCQkJCWRvdWJsZSBzdGFydFZhbHVlID0gMC4wOworCQkJCQlkb3VibGUgZW5kVmFsdWUgPSAwLjA7CisJCQkJCWRvdWJsZSBpbmNWYWx1ZSA9IDAuMDsKKworCQkJCQkvLyBTdGFydCB0ZXh0CisJCQkJCS8vIFN0aWxsIHZhbGlkPworCQkJCQlpZiAocmV0VmFsdWUpIHsKKwkJCQkJCS8vIFllcworCQkJCQkJdHJ5IHsKKwkJCQkJCQkvLyBWYWxpZCBzdGFydCB2YWx1ZT8KKwkJCQkJCQlzdGFydFZhbHVlID0gRG91YmxlCisJCQkJCQkJCQkucGFyc2VEb3VibGUoc3RhcnRUZXh0LmdldFRleHQoKSk7CisJCQkJCQkJKChEb3VibGVSYW5nZU1vZGlmaWVyKSBmZWF0dXJlTW9kaWZpZXIpCisJCQkJCQkJCQkuc2V0U3RhcnRWYWx1ZShzdGFydFZhbHVlKTsKKwkJCQkJCX0gY2F0Y2ggKGZpbmFsIE51bWJlckZvcm1hdEV4Y2VwdGlvbiBlKSB7CisJCQkJCQkJcmV0VmFsdWUgPSBmYWxzZTsKKwkJCQkJCQltZXNzYWdlID0gIlN0YXJ0IHZhbHVlIG5vdCB2YWxpZCI7CisJCQkJCQl9IC8vIGNhdGNoIE51bWJlckZvcm1hdEV4Y2VwdGlvbgorCQkJCQl9IC8vIGlmCisKKwkJCQkJLy8gRW5kIHRleHQKKwkJCQkJLy8gU3RpbGwgdmFsaWQ/CisJCQkJCWlmIChyZXRWYWx1ZSkgeworCQkJCQkJLy8gWWVzCisJCQkJCQl0cnkgeworCQkJCQkJCS8vIFZhbGlkIGVuZCB2YWx1ZT8KKwkJCQkJCQllbmRWYWx1ZSA9IERvdWJsZS5wYXJzZURvdWJsZShlbmRUZXh0LmdldFRleHQoKSk7CisJCQkJCQkJKChEb3VibGVSYW5nZU1vZGlmaWVyKSBmZWF0dXJlTW9kaWZpZXIpCisJCQkJCQkJCQkuc2V0RW5kVmFsdWUoZW5kVmFsdWUpOworCQkJCQkJfSBjYXRjaCAoZmluYWwgTnVtYmVyRm9ybWF0RXhjZXB0aW9uIGUpIHsKKwkJCQkJCQlyZXRWYWx1ZSA9IGZhbHNlOworCQkJCQkJCW1lc3NhZ2UgPSAiRW5kIHZhbHVlIG5vdCB2YWxpZCI7CisJCQkJCQl9IC8vIGNhdGNoIE51bWJlckZvcm1hdEV4Y2VwdGlvbgorCQkJCQl9IC8vIGlmCisKKwkJCQkJLy8gSW5jIHRleHQKKwkJCQkJLy8gU3RpbGwgdmFsaWQ/CisJCQkJCWlmIChyZXRWYWx1ZSkgeworCQkJCQkJLy8gWWVzCisJCQkJCQl0cnkgeworCQkJCQkJCS8vIFZhbGlkIGluYyB2YWx1ZT8KKwkJCQkJCQlpbmNWYWx1ZSA9IERvdWJsZS5wYXJzZURvdWJsZShpbmNUZXh0LmdldFRleHQoKSk7CisJCQkJCQkJKChEb3VibGVSYW5nZU1vZGlmaWVyKSBmZWF0dXJlTW9kaWZpZXIpCisJCQkJCQkJCQkuc2V0SW5jcmVtZW50KGluY1ZhbHVlKTsKKwkJCQkJCX0gY2F0Y2ggKGZpbmFsIE51bWJlckZvcm1hdEV4Y2VwdGlvbiBlKSB7CisJCQkJCQkJcmV0VmFsdWUgPSBmYWxzZTsKKwkJCQkJCQltZXNzYWdlID0gIkluY3JlbWVudCB2YWx1ZSBub3QgdmFsaWQiOworCQkJCQkJfSAvLyBjYXRjaCBOdW1iZXJGb3JtYXRFeGNlcHRpb24KKwkJCQkJfSAvLyBpZgorCisJCQkJCS8vIENvbnNpc3RlbnQKKwkJCQkJLy8gU3RpbGwgdmFsaWQ/CisJCQkJCWlmIChyZXRWYWx1ZSkgeworCQkJCQkJLy8gWWVzCisJCQkJCQkvLyBBcmUgdGhlIHJlbGF0aXZlIHZhbHVlcyBjb25zaXN0ZW50PworCQkJCQkJLy8gaWYgKCEoc3RhcnRWYWx1ZSA8PSBlbmRWYWx1ZSAmJiBpbmNWYWx1ZSA+PSAwLjApKSB7CisJCQkJCQlpZiAoc3RhcnRWYWx1ZSA8PSBlbmRWYWx1ZSAmJiBpbmNWYWx1ZSA8IDAuMCkgeworCQkJCQkJCS8vIE5vCisJCQkJCQkJcmV0VmFsdWUgPSBmYWxzZTsKKwkJCQkJCQltZXNzYWdlID0gIklmIHRoZSBzdGFydCBpcyA8PSB0aGUgZW5kLCB0aGVuIHRoZSBpbmNyZW1lbnQgY2Fubm9udCBiZSA8IDAuMCI7CisJCQkJCQl9IC8vIGlmCisJCQkJCQllbHNlIGlmIChzdGFydFZhbHVlID4gZW5kVmFsdWUgJiYgaW5jVmFsdWUgPj0gMC4wKSB7CisJCQkJCQkJLy8gTm8KKwkJCQkJCQlyZXRWYWx1ZSA9IGZhbHNlOworCQkJCQkJCW1lc3NhZ2UgPSAiSWYgdGhlIHN0YXJ0IGlzID4gdGhlIGVuZCwgdGhlbiB0aGUgaW5jcmVtZW50IGNhbm5vbnQgYmUgPj0gMC4wIjsKKwkJCQkJCX0gLy8gaWYKKwkJCQkJfSAvLyBpZgorCQkJCQkvLyBBbnkgZXJyb3IgbWVzc2FnZSB0byByZXBvcnQ/CisJCQkJCWlmIChtZXNzYWdlICE9IG51bGwpIHsKKwkJCQkJCS8vIFllcworCQkJCQkJcGFyZW50TmV3TW9kaWZpZXJQYWdlLnNldEVycm9yTWVzc2FnZShtZXNzYWdlKTsKKwkJCQkJfSAvLyBpZgorCisJCQkJCS8vIEV2ZXJ5dGhpbmcgT2s/CisJCQkJCWlmIChyZXRWYWx1ZSkgeworCQkJCQkJLy8gWWVzCisJCQkJCQkvLyBDaGVjayBvdXQgdGhlIHBhcmVudCB0aGVuCisJCQkJCQlyZXRWYWx1ZSA9IHBhcmVudE5ld01vZGlmaWVyUGFnZS52YWxpZGF0ZVBhZ2UoKTsKKwkJCQkJfSAvLyBpZgorCisJCQkJCXJldHVybiByZXRWYWx1ZTsKKwkJCQl9IC8vIHZhbGlkYXRlCisJCQl9OworCisJCQlyZXR1cm4gcmV0VmFsdWU7CisJCX0gLy8gZ2V0RmVhdHVyZU1vZGlmaWVyRWRpdENvbXBvc2l0ZQorCisJfSAvLyBEb3VibGVSYW5nZUZlYXR1cmVNb2RpZmllckVkaXRDb21wb3NpdGVBZGFwdGVyCisKKwkvKioKKwkgKiBUaGlzIGNsYXNzIGlzIGEge0BsaW5rIEZlYXR1cmVNb2RpZmllckVkaXRDb21wb3NpdGVBZGFwdGVyfSBmb3IKKwkgKiB7QGxpbmsgU1RFTVRpbWVSYW5nZU1vZGlmaWVyfXMuCisJICovCisJcHVibGljIHN0YXRpYyBjbGFzcyBTVEVNVGltZVJhbmdlRmVhdHVyZU1vZGlmaWVyRWRpdENvbXBvc2l0ZUFkYXB0ZXIgZXh0ZW5kcworCQkJUmFuZ2VGZWF0dXJlTW9kaWZpZXJFZGl0Q29tcG9zaXRlQWRhcHRlciB7CisKKwkJLyoqCisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS51aS5hZGFwdGVycy5mZWF0dXJlbW9kaWZpZXJlZGl0Y29tcG9zaXRlLkZlYXR1cmVNb2RpZmllckVkaXRDb21wb3NpdGVBZGFwdGVyI2NyZWF0ZUVkaXRDb21wb3NpdGUob3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlLAorCQkgKiAgICAgIElkZW50aWZpYWJsZSwgTmV3TW9kaWZpZXJQYWdlKQorCQkgKi8KKwkJQE92ZXJyaWRlCisJCXB1YmxpYyBGZWF0dXJlTW9kaWZpZXJFZGl0Q29tcG9zaXRlIGNyZWF0ZUVkaXRDb21wb3NpdGUoCisJCQkJZmluYWwgQ29tcG9zaXRlIHBhcmVudCwKKwkJCQlAU3VwcHJlc3NXYXJuaW5ncygidW51c2VkIikgZmluYWwgRU9iamVjdCB0YXJnZXQsCisJCQkJZmluYWwgTmV3TW9kaWZpZXJQYWdlIHBhcmVudE5ld01vZGlmaWVyUGFnZSkgeworCQkJZmluYWwgRmVhdHVyZU1vZGlmaWVyRWRpdENvbXBvc2l0ZSByZXRWYWx1ZSA9IG5ldyBGZWF0dXJlTW9kaWZpZXJFZGl0Q29tcG9zaXRlKAorCQkJCQlwYXJlbnQsIHBhcmVudE5ld01vZGlmaWVyUGFnZSwKKwkJCQkJKEZlYXR1cmVNb2RpZmllcikgZ2V0VGFyZ2V0KCkpIHsKKwkJCQlAT3ZlcnJpZGUKKwkJCQlwcm90ZWN0ZWQgYm9vbGVhbiB2YWxpZGF0ZSgpIHsKKwkJCQkJZmluYWwgYm9vbGVhbiByZXRWYWx1ZSA9IHBhcmVudE5ld01vZGlmaWVyUGFnZQorCQkJCQkJCS52YWxpZGF0ZVBhZ2UoKTsKKworCQkJCQkvLyBTdHJpbmcgbWVzc2FnZSA9IG51bGw7CisJCQkJCXJldHVybiByZXRWYWx1ZTsKKwkJCQl9IC8vIHZhbGlkYXRlCisJCQl9OworCQkJcmV0VmFsdWUuc2V0TGF5b3V0KG5ldyBSb3dMYXlvdXQoKSk7CisJCQlmaW5hbCBMYWJlbCBsYWJlbCA9IG5ldyBMYWJlbChyZXRWYWx1ZSwgU1dULk5PTkUpOworCisJCQlmaW5hbCBTVEVNVGltZVJhbmdlTW9kaWZpZXIgcmFuZ2VNb2RpZmllciA9IChTVEVNVGltZVJhbmdlTW9kaWZpZXIpIGdldEZlYXR1cmVNb2RpZmllcigpOworCQkJcmFuZ2VNb2RpZmllci5zZXRTdGFydFZhbHVlKChTVEVNVGltZSkgZ2V0RmVhdHVyZU1vZGlmaWVyKCkKKwkJCQkJLmdldFRhcmdldCgpLmVHZXQoCisJCQkJCQkJZ2V0RmVhdHVyZU1vZGlmaWVyKCkuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlKCkpKTsKKwkJCXJhbmdlTW9kaWZpZXIuc2V0RW5kVmFsdWUocmFuZ2VNb2RpZmllci5nZXRTdGFydFZhbHVlKCkpOworCQkJZmluYWwgU3RyaW5nQnVpbGRlciBzYiA9IG5ldyBTdHJpbmdCdWlsZGVyKHJhbmdlTW9kaWZpZXIKKwkJCQkJLmdldFN0YXJ0VmFsdWUoKS50b1N0cmluZygpKTsKKwkJCXNiLmFwcGVuZCgiIHRvICIpOworCQkJc2IuYXBwZW5kKHJhbmdlTW9kaWZpZXIuZ2V0RW5kVmFsdWUoKS50b1N0cmluZygpKTsKKwkJCXNiLmFwcGVuZCgiIGJ5ICIpOworCQkJc2IuYXBwZW5kKHJhbmdlTW9kaWZpZXIuZ2V0SW5jcmVtZW50KCkpOworCisJCQlsYWJlbC5zZXRUZXh0KHNiLnRvU3RyaW5nKCkpOworCQkJcmV0dXJuIHJldFZhbHVlOworCQl9IC8vIGNyZWF0ZUVkaXRDb21wb3NpdGUKKworCX0gLy8gU1RFTVRpbWVSYW5nZUZlYXR1cmVNb2RpZmllckVkaXRDb21wb3NpdGVBZGFwdGVyCisKK30gLy8gUmFuZ2VGZWF0dXJlTW9kaWZpZXJFZGl0Q29tcG9zaXRlQWRhcHRlcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL2FkYXB0ZXJzL2ZlYXR1cmVtb2RpZmllcmVkaXRjb21wb3NpdGUvU2VxdWVuY2VGZWF0dXJlTW9kaWZpZXJFZGl0Q29tcG9zaXRlQWRhcHRlci5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL2FkYXB0ZXJzL2ZlYXR1cmVtb2RpZmllcmVkaXRjb21wb3NpdGUvU2VxdWVuY2VGZWF0dXJlTW9kaWZpZXJFZGl0Q29tcG9zaXRlQWRhcHRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRlYTNhOGQKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvYWRhcHRlcnMvZmVhdHVyZW1vZGlmaWVyZWRpdGNvbXBvc2l0ZS9TZXF1ZW5jZUZlYXR1cmVNb2RpZmllckVkaXRDb21wb3NpdGVBZGFwdGVyLmphdmEKQEAgLTAsMCArMSwyNjAgQEAKKy8vIFNlcXVlbmNlRmVhdHVyZU1vZGlmaWVyRWRpdENvbXBvc2l0ZUFkYXB0ZXIuamF2YQorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnVpLmFkYXB0ZXJzLmZlYXR1cmVtb2RpZmllcmVkaXRjb21wb3NpdGU7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3Q7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLlNURU1UaW1lOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5Eb3VibGVTZXF1ZW5jZU1vZGlmaWVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5GZWF0dXJlTW9kaWZpZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLkludGVnZXJTZXF1ZW5jZU1vZGlmaWVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5Mb25nU2VxdWVuY2VNb2RpZmllcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuU1RFTVRpbWVTZXF1ZW5jZU1vZGlmaWVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udWkud2l6YXJkcy5OZXdNb2RpZmllclBhZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS51aS53aXphcmRzLk5ld01vZGlmaWVyUGFnZS5GZWF0dXJlTW9kaWZpZXJFZGl0Q29tcG9zaXRlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5TV1Q7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5TZWxlY3Rpb25BZGFwdGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuU2VsZWN0aW9uRXZlbnQ7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5Sb3dMYXlvdXQ7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQnV0dG9uOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5MYWJlbDsKKworLyoqCisgKiBUaGlzIGNsYXNzIGlzIGEge0BsaW5rIEZlYXR1cmVNb2RpZmllckVkaXRDb21wb3NpdGVBZGFwdGVyfSBmb3IKKyAqIHtAbGluayAgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLlNlcXVlbmNlTW9kaWZpZXJ9cy4KKyAqLworYWJzdHJhY3QgcHVibGljIGNsYXNzIFNlcXVlbmNlRmVhdHVyZU1vZGlmaWVyRWRpdENvbXBvc2l0ZUFkYXB0ZXIgZXh0ZW5kcworCQlGZWF0dXJlTW9kaWZpZXJFZGl0Q29tcG9zaXRlQWRhcHRlciB7CisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0udWkuYWRhcHRlcnMuZmVhdHVyZW1vZGlmaWVyZWRpdGNvbXBvc2l0ZS5GZWF0dXJlTW9kaWZpZXJFZGl0Q29tcG9zaXRlQWRhcHRlciNzZXRTZWxlY3RlZEJ1dHRvbihvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5CdXR0b24sCisJICogICAgICBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5CdXR0b24sIG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkJ1dHRvbikKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBzZXRTZWxlY3RlZEJ1dHRvbihmaW5hbCBCdXR0b24gbm9uZUJ1dHRvbiwgZmluYWwgQnV0dG9uIHNpbmdsZVZhbHVlQnV0dG9uLAorCQkJZmluYWwgQnV0dG9uIHJhbmdlQnV0dG9uLCBmaW5hbCBCdXR0b24gc2VxdWVuY2VCdXR0b24pIHsKKwkJbm9uZUJ1dHRvbi5zZXRTZWxlY3Rpb24oZmFsc2UpOworCQlzaW5nbGVWYWx1ZUJ1dHRvbi5zZXRTZWxlY3Rpb24oZmFsc2UpOworCQlyYW5nZUJ1dHRvbi5zZXRTZWxlY3Rpb24oZmFsc2UpOworCQlzZXF1ZW5jZUJ1dHRvbi5zZXRTZWxlY3Rpb24odHJ1ZSk7CisJfSAvLyBzZXRTZWxlY3RlZEJ1dHRvbgorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnVpLmFkYXB0ZXJzLmZlYXR1cmVtb2RpZmllcmVkaXRjb21wb3NpdGUuRmVhdHVyZU1vZGlmaWVyRWRpdENvbXBvc2l0ZUFkYXB0ZXIjY3JlYXRlRWRpdENvbXBvc2l0ZShvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGUsCisJICogICAgICBJZGVudGlmaWFibGUsIE5ld01vZGlmaWVyUGFnZSkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlhYnN0cmFjdCBwdWJsaWMgRmVhdHVyZU1vZGlmaWVyRWRpdENvbXBvc2l0ZSBjcmVhdGVFZGl0Q29tcG9zaXRlKAorCQkJZmluYWwgQ29tcG9zaXRlIHBhcmVudCwgZmluYWwgRU9iamVjdCB0YXJnZXQsCisJCQlmaW5hbCBOZXdNb2RpZmllclBhZ2UgcGFyZW50TmV3TW9kaWZpZXJQYWdlKTsKKworCWFic3RyYWN0IHByb3RlY3RlZCBzdGF0aWMgY2xhc3MgTnVtZXJpY1NlcXVlbmNlRmVhdHVyZU1vZGlmaWVyRWRpdENvbXBvc2l0ZUFkYXB0ZXIKKwkJCWV4dGVuZHMgU2VxdWVuY2VGZWF0dXJlTW9kaWZpZXJFZGl0Q29tcG9zaXRlQWRhcHRlciB7CisKKwkJLyoqCisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS51aS5hZGFwdGVycy5mZWF0dXJlbW9kaWZpZXJlZGl0Y29tcG9zaXRlLlNlcXVlbmNlRmVhdHVyZU1vZGlmaWVyRWRpdENvbXBvc2l0ZUFkYXB0ZXIjY3JlYXRlRWRpdENvbXBvc2l0ZShvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGUsCisJCSAqICAgICAgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5JZGVudGlmaWFibGUsCisJCSAqICAgICAgb3JnLmVjbGlwc2Uuc3RlbS51aS53aXphcmRzLk5ld01vZGlmaWVyUGFnZSkKKwkJICovCisJCUBPdmVycmlkZQorCQlwdWJsaWMgRmVhdHVyZU1vZGlmaWVyRWRpdENvbXBvc2l0ZSBjcmVhdGVFZGl0Q29tcG9zaXRlKAorCQkJCUNvbXBvc2l0ZSBwYXJlbnQsIEVPYmplY3QgdGFyZ2V0LAorCQkJCU5ld01vZGlmaWVyUGFnZSBwYXJlbnROZXdNb2RpZmllclBhZ2UpIHsKKwkJCWluaXRpYWxpemVGZWF0dXJlTW9kaWZpZXIodGFyZ2V0KTsKKworCQkJZmluYWwgRmVhdHVyZU1vZGlmaWVyRWRpdENvbXBvc2l0ZSByZXRWYWx1ZSA9IG5ldyBGZWF0dXJlTW9kaWZpZXJFZGl0Q29tcG9zaXRlKAorCQkJCQlwYXJlbnQsIHBhcmVudE5ld01vZGlmaWVyUGFnZSwKKwkJCQkJKEZlYXR1cmVNb2RpZmllcikgZ2V0VGFyZ2V0KCkpIHsKKwkJCQlAT3ZlcnJpZGUKKwkJCQlwcm90ZWN0ZWQgYm9vbGVhbiB2YWxpZGF0ZSgpIHsKKwkJCQkJLy8gVE9ETyBjcmVhdGVFZGl0Q29tcG9zaXRlLnZhbGlkYXRlKCkKKwkJCQkJcmV0dXJuIHRydWU7CisJCQkJfQorCQkJfTsKKworCQkJcmV0VmFsdWUuc2V0TGF5b3V0KG5ldyBSb3dMYXlvdXQoKSk7CisJCQlmaW5hbCBMYWJlbCBsYWJlbCA9IG5ldyBMYWJlbChyZXRWYWx1ZSwgU1dULkJPUkRFUik7CisKKwkJCWxhYmVsLnNldFRleHQoZ2V0U2VxdWVuY2VTdW1tYXJ5VGV4dCgpKTsKKworCQkJZmluYWwgQnV0dG9uIGVkaXRCdXR0b24gPSBuZXcgQnV0dG9uKHJldFZhbHVlLCBTV1QuUFVTSCk7CisJCQllZGl0QnV0dG9uLnNldFRleHQoIkVkaXQiKTsKKwkJCWVkaXRCdXR0b24uYWRkU2VsZWN0aW9uTGlzdGVuZXIobmV3IFNlbGVjdGlvbkFkYXB0ZXIoKSB7CisJCQkJQE92ZXJyaWRlCisJCQkJcHVibGljIHZvaWQgd2lkZ2V0U2VsZWN0ZWQoQFN1cHByZXNzV2FybmluZ3MoInVudXNlZCIpIFNlbGVjdGlvbkV2ZW50IGUpIHsKKwkJCQkJLy8gVE9ETyBpbXBsZW1lbnQgd2lkZ2V0U2VsZWN0ZWQKKwkJCQl9CisJCQl9KTsKKwkJCXJldHVybiByZXRWYWx1ZTsKKwkJfSAvLyBjcmVhdGVFZGl0Q29tcG9zaXRlCisKKwkJLyoqCisJCSAqIEBwYXJhbSBpZGVudGlmaWFibGUKKwkJICovCisJCWFic3RyYWN0IHByb3RlY3RlZCB2b2lkIGluaXRpYWxpemVGZWF0dXJlTW9kaWZpZXIoCisJCQkJRU9iamVjdCB0YXJnZXQpOworCisJCS8qKgorCQkgKiBAcmV0dXJuCisJCSAqLworCQlhYnN0cmFjdCBwcm90ZWN0ZWQgU3RyaW5nIGdldFNlcXVlbmNlU3VtbWFyeVRleHQoKTsKKworCX0gLy8gTnVtZXJpY1NlcXVlbmNlRmVhdHVyZU1vZGlmaWVyRWRpdENvbXBvc2l0ZUFkYXB0ZXIKKworCXByb3RlY3RlZCBzdGF0aWMgY2xhc3MgSW50ZWdlclNlcXVlbmNlRmVhdHVyZU1vZGlmaWVyRWRpdENvbXBvc2l0ZUFkYXB0ZXIKKwkJCWV4dGVuZHMgTnVtZXJpY1NlcXVlbmNlRmVhdHVyZU1vZGlmaWVyRWRpdENvbXBvc2l0ZUFkYXB0ZXIgeworCisJCUBPdmVycmlkZQorCQlwcm90ZWN0ZWQgdm9pZCBpbml0aWFsaXplRmVhdHVyZU1vZGlmaWVyKEVPYmplY3QgdGFyZ2V0KSB7CisJCQlmaW5hbCBJbnRlZ2VyU2VxdWVuY2VNb2RpZmllciBzZXF1ZW5jZU1vZGlmaWVyID0gKEludGVnZXJTZXF1ZW5jZU1vZGlmaWVyKSBnZXRGZWF0dXJlTW9kaWZpZXIoKTsKKwkJCXNlcXVlbmNlTW9kaWZpZXIuZ2V0U2VxdWVuY2UoKS5hZGQoCisJCQkJCSgoSW50ZWdlcikgKHRhcmdldC5lR2V0KGdldEZlYXR1cmVNb2RpZmllcigpCisJCQkJCQkJLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZSgpKSkpKTsKKwkJfSAvLyBpbml0aWFsaXplRmVhdHVyZU1vZGlmaWVyCisKKwkJLyoqCisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS51aS5hZGFwdGVycy5mZWF0dXJlbW9kaWZpZXJlZGl0Y29tcG9zaXRlLlNlcXVlbmNlRmVhdHVyZU1vZGlmaWVyRWRpdENvbXBvc2l0ZUFkYXB0ZXIuTnVtZXJpY1NlcXVlbmNlRmVhdHVyZU1vZGlmaWVyRWRpdENvbXBvc2l0ZUFkYXB0ZXIjZ2V0U2VxdWVuY2VTdW1tYXJ5VGV4dCgpCisJCSAqLworCQlAT3ZlcnJpZGUKKwkJcHJvdGVjdGVkIFN0cmluZyBnZXRTZXF1ZW5jZVN1bW1hcnlUZXh0KCkgeworCQkJZmluYWwgSW50ZWdlclNlcXVlbmNlTW9kaWZpZXIgc2VxdWVuY2VNb2RpZmllciA9IChJbnRlZ2VyU2VxdWVuY2VNb2RpZmllcikgZ2V0RmVhdHVyZU1vZGlmaWVyKCk7CisJCQlmaW5hbCBTdHJpbmdCdWlsZGVyIHNiID0gbmV3IFN0cmluZ0J1aWxkZXIoKTsKKwkJCWludCBpID0gc2VxdWVuY2VNb2RpZmllci5nZXRTZXF1ZW5jZVNpemUoKTsKKwkJCWZvciAoSW50ZWdlciBpbnRlZ2VyIDogc2VxdWVuY2VNb2RpZmllci5nZXRTZXF1ZW5jZSgpKSB7CisJCQkJc2IuYXBwZW5kKGludGVnZXIudG9TdHJpbmcoKSk7CisJCQkJc2IuYXBwZW5kKC0taSA+IDAgPyAiLCAiIDogIiIpOworCQkJfSAvLyBmb3IgZWFjaAorCQkJcmV0dXJuIHNiLnRvU3RyaW5nKCk7CisJCX0gLy8gZ2V0U2VxdWVuY2VTdW1tYXJ5VGV4dAorCisJfSAvLyBJbnRlZ2VyU2VxdWVuY2VGZWF0dXJlTW9kaWZpZXJFZGl0Q29tcG9zaXRlQWRhcHRlcgorCisJcHJvdGVjdGVkIHN0YXRpYyBjbGFzcyBEb3VibGVTZXF1ZW5jZUZlYXR1cmVNb2RpZmllckVkaXRDb21wb3NpdGVBZGFwdGVyCisJCQlleHRlbmRzIE51bWVyaWNTZXF1ZW5jZUZlYXR1cmVNb2RpZmllckVkaXRDb21wb3NpdGVBZGFwdGVyIHsKKworCQlAT3ZlcnJpZGUKKwkJcHJvdGVjdGVkIHZvaWQgaW5pdGlhbGl6ZUZlYXR1cmVNb2RpZmllcihFT2JqZWN0IHRhcmdldCkgeworCQkJZmluYWwgRG91YmxlU2VxdWVuY2VNb2RpZmllciBzZXF1ZW5jZU1vZGlmaWVyID0gKERvdWJsZVNlcXVlbmNlTW9kaWZpZXIpIGdldEZlYXR1cmVNb2RpZmllcigpOworCQkJc2VxdWVuY2VNb2RpZmllci5nZXRTZXF1ZW5jZSgpLmFkZCgKKwkJCQkJKChEb3VibGUpICh0YXJnZXQuZUdldChnZXRGZWF0dXJlTW9kaWZpZXIoKQorCQkJCQkJCS5nZXRFU3RydWN0dXJhbEZlYXR1cmUoKSkpKSk7CisJCX0gLy8gaW5pdGlhbGl6ZUZlYXR1cmVNb2RpZmllcgorCisJCS8qKgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0udWkuYWRhcHRlcnMuZmVhdHVyZW1vZGlmaWVyZWRpdGNvbXBvc2l0ZS5TZXF1ZW5jZUZlYXR1cmVNb2RpZmllckVkaXRDb21wb3NpdGVBZGFwdGVyLk51bWVyaWNTZXF1ZW5jZUZlYXR1cmVNb2RpZmllckVkaXRDb21wb3NpdGVBZGFwdGVyI2dldFNlcXVlbmNlU3VtbWFyeVRleHQoKQorCQkgKi8KKwkJQE92ZXJyaWRlCisJCXByb3RlY3RlZCBTdHJpbmcgZ2V0U2VxdWVuY2VTdW1tYXJ5VGV4dCgpIHsKKwkJCWZpbmFsIERvdWJsZVNlcXVlbmNlTW9kaWZpZXIgc2VxdWVuY2VNb2RpZmllciA9IChEb3VibGVTZXF1ZW5jZU1vZGlmaWVyKSBnZXRGZWF0dXJlTW9kaWZpZXIoKTsKKwkJCWZpbmFsIFN0cmluZ0J1aWxkZXIgc2IgPSBuZXcgU3RyaW5nQnVpbGRlcigpOworCQkJaW50IGkgPSBzZXF1ZW5jZU1vZGlmaWVyLmdldFNlcXVlbmNlU2l6ZSgpOworCQkJZm9yIChEb3VibGUgZGIgOiBzZXF1ZW5jZU1vZGlmaWVyLmdldFNlcXVlbmNlKCkpIHsKKwkJCQlzYi5hcHBlbmQoZGIudG9TdHJpbmcoKSk7CisJCQkJc2IuYXBwZW5kKC0taSA+IDAgPyAiLCAiIDogIiIpOworCQkJfSAvLyBmb3IgZWFjaAorCQkJcmV0dXJuIHNiLnRvU3RyaW5nKCk7CisJCX0gLy8gZ2V0U2VxdWVuY2VTdW1tYXJ5VGV4dAorCisJfSAvLyBEb3VibGVTZXF1ZW5jZUZlYXR1cmVNb2RpZmllckVkaXRDb21wb3NpdGVBZGFwdGVyCisKKwlwcm90ZWN0ZWQgc3RhdGljIGNsYXNzIExvbmdTZXF1ZW5jZUZlYXR1cmVNb2RpZmllckVkaXRDb21wb3NpdGVBZGFwdGVyCisJCQlleHRlbmRzIE51bWVyaWNTZXF1ZW5jZUZlYXR1cmVNb2RpZmllckVkaXRDb21wb3NpdGVBZGFwdGVyIHsKKworCQlAT3ZlcnJpZGUKKwkJcHJvdGVjdGVkIHZvaWQgaW5pdGlhbGl6ZUZlYXR1cmVNb2RpZmllcihFT2JqZWN0IHRhcmdldCkgeworCQkJZmluYWwgTG9uZ1NlcXVlbmNlTW9kaWZpZXIgc2VxdWVuY2VNb2RpZmllciA9IChMb25nU2VxdWVuY2VNb2RpZmllcikgZ2V0RmVhdHVyZU1vZGlmaWVyKCk7CisJCQlzZXF1ZW5jZU1vZGlmaWVyLmdldFNlcXVlbmNlKCkuYWRkKAorCQkJCQkoKExvbmcpICh0YXJnZXQuZUdldChnZXRGZWF0dXJlTW9kaWZpZXIoKQorCQkJCQkJCS5nZXRFU3RydWN0dXJhbEZlYXR1cmUoKSkpKSk7CisJCX0gLy8gaW5pdGlhbGl6ZUZlYXR1cmVNb2RpZmllcgorCisJCS8qKgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0udWkuYWRhcHRlcnMuZmVhdHVyZW1vZGlmaWVyZWRpdGNvbXBvc2l0ZS5TZXF1ZW5jZUZlYXR1cmVNb2RpZmllckVkaXRDb21wb3NpdGVBZGFwdGVyLk51bWVyaWNTZXF1ZW5jZUZlYXR1cmVNb2RpZmllckVkaXRDb21wb3NpdGVBZGFwdGVyI2dldFNlcXVlbmNlU3VtbWFyeVRleHQoKQorCQkgKi8KKwkJQE92ZXJyaWRlCisJCXByb3RlY3RlZCBTdHJpbmcgZ2V0U2VxdWVuY2VTdW1tYXJ5VGV4dCgpIHsKKwkJCWZpbmFsIExvbmdTZXF1ZW5jZU1vZGlmaWVyIHNlcXVlbmNlTW9kaWZpZXIgPSAoTG9uZ1NlcXVlbmNlTW9kaWZpZXIpIGdldEZlYXR1cmVNb2RpZmllcigpOworCQkJZmluYWwgU3RyaW5nQnVpbGRlciBzYiA9IG5ldyBTdHJpbmdCdWlsZGVyKCk7CisJCQlpbnQgaSA9IHNlcXVlbmNlTW9kaWZpZXIuZ2V0U2VxdWVuY2VTaXplKCk7CisJCQlmb3IgKExvbmcgbG5nIDogc2VxdWVuY2VNb2RpZmllci5nZXRTZXF1ZW5jZSgpKSB7CisJCQkJc2IuYXBwZW5kKGxuZy50b1N0cmluZygpKTsKKwkJCQlzYi5hcHBlbmQoLS1pID4gMCA/ICIsICIgOiAiIik7CisJCQl9IC8vIGZvciBlYWNoCisJCQlyZXR1cm4gc2IudG9TdHJpbmcoKTsKKwkJfSAvLyBnZXRTZXF1ZW5jZVN1bW1hcnlUZXh0CisJfSAvLyBMb25nU2VxdWVuY2VGZWF0dXJlTW9kaWZpZXJFZGl0Q29tcG9zaXRlQWRhcHRlcgorCisJcHJvdGVjdGVkIHN0YXRpYyBjbGFzcyBTVEVNVGltZVNlcXVlbmNlRmVhdHVyZU1vZGlmaWVyRWRpdENvbXBvc2l0ZUFkYXB0ZXIKKwkJCWV4dGVuZHMgU2VxdWVuY2VGZWF0dXJlTW9kaWZpZXJFZGl0Q29tcG9zaXRlQWRhcHRlciB7CisKKwkJCisJCQorCQkKKwkJLyoqCisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS51aS5hZGFwdGVycy5mZWF0dXJlbW9kaWZpZXJlZGl0Y29tcG9zaXRlLlNlcXVlbmNlRmVhdHVyZU1vZGlmaWVyRWRpdENvbXBvc2l0ZUFkYXB0ZXIjY3JlYXRlRWRpdENvbXBvc2l0ZShvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGUsIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uSWRlbnRpZmlhYmxlLCBvcmcuZWNsaXBzZS5zdGVtLnVpLndpemFyZHMuTmV3TW9kaWZpZXJQYWdlKQorCQkgKi8KKwkJQE92ZXJyaWRlCisJCXB1YmxpYyBGZWF0dXJlTW9kaWZpZXJFZGl0Q29tcG9zaXRlIGNyZWF0ZUVkaXRDb21wb3NpdGUoCisJCQkJQ29tcG9zaXRlIHBhcmVudCwgRU9iamVjdCB0YXJnZXQsCisJCQkJTmV3TW9kaWZpZXJQYWdlIHBhcmVudE5ld01vZGlmaWVyUGFnZSkgeworCQkJaW5pdGlhbGl6ZUZlYXR1cmVNb2RpZmllcih0YXJnZXQpOworCisJCQlmaW5hbCBGZWF0dXJlTW9kaWZpZXJFZGl0Q29tcG9zaXRlIHJldFZhbHVlID0gbmV3IEZlYXR1cmVNb2RpZmllckVkaXRDb21wb3NpdGUoCisJCQkJCXBhcmVudCwgcGFyZW50TmV3TW9kaWZpZXJQYWdlLAorCQkJCQkoRmVhdHVyZU1vZGlmaWVyKSBnZXRUYXJnZXQoKSkgeworCQkJCUBPdmVycmlkZQorCQkJCXByb3RlY3RlZCBib29sZWFuIHZhbGlkYXRlKCkgeworCQkJCQkvLyBUT0RPIGNyZWF0ZUVkaXRDb21wb3NpdGUudmFsaWRhdGUoKQorCQkJCQlyZXR1cm4gdHJ1ZTsKKwkJCQl9CisJCQl9OworCisJCQlyZXRWYWx1ZS5zZXRMYXlvdXQobmV3IFJvd0xheW91dCgpKTsKKwkJCWZpbmFsIExhYmVsIGxhYmVsID0gbmV3IExhYmVsKHJldFZhbHVlLCBTV1QuQk9SREVSKTsKKworCQkJbGFiZWwuc2V0VGV4dChnZXRTZXF1ZW5jZVN1bW1hcnlUZXh0KCkpOworCisJCQlmaW5hbCBCdXR0b24gZWRpdEJ1dHRvbiA9IG5ldyBCdXR0b24ocmV0VmFsdWUsIFNXVC5QVVNIKTsKKwkJCWVkaXRCdXR0b24uc2V0VGV4dCgiRWRpdCIpOworCQkJZWRpdEJ1dHRvbi5hZGRTZWxlY3Rpb25MaXN0ZW5lcihuZXcgU2VsZWN0aW9uQWRhcHRlcigpIHsKKwkJCQlAT3ZlcnJpZGUKKwkJCQlwdWJsaWMgdm9pZCB3aWRnZXRTZWxlY3RlZChAU3VwcHJlc3NXYXJuaW5ncygidW51c2VkIikgU2VsZWN0aW9uRXZlbnQgZSkgeworCQkJCQkvLyBUT0RPIGltcGxlbWVudCB3aWRnZXRTZWxlY3RlZAorCQkJCX0KKwkJCX0pOworCQkJcmV0dXJuIHJldFZhbHVlOworCQl9IC8vIGNyZWF0ZUVkaXRDb21wb3NpdGUKKworCQlwcm90ZWN0ZWQgdm9pZCBpbml0aWFsaXplRmVhdHVyZU1vZGlmaWVyKEVPYmplY3QgdGFyZ2V0KSB7CisJCQlmaW5hbCBMb25nU2VxdWVuY2VNb2RpZmllciBzZXF1ZW5jZU1vZGlmaWVyID0gKExvbmdTZXF1ZW5jZU1vZGlmaWVyKSBnZXRGZWF0dXJlTW9kaWZpZXIoKTsKKwkJCXNlcXVlbmNlTW9kaWZpZXIuZ2V0U2VxdWVuY2UoKS5hZGQoCisJCQkJCSgoTG9uZykgKHRhcmdldC5lR2V0KGdldEZlYXR1cmVNb2RpZmllcigpCisJCQkJCQkJLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZSgpKSkpKTsKKwkJfSAvLyBpbml0aWFsaXplRmVhdHVyZU1vZGlmaWVyCisKKwkJLyoqCisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS51aS5hZGFwdGVycy5mZWF0dXJlbW9kaWZpZXJlZGl0Y29tcG9zaXRlLlNlcXVlbmNlRmVhdHVyZU1vZGlmaWVyRWRpdENvbXBvc2l0ZUFkYXB0ZXIuTnVtZXJpY1NlcXVlbmNlRmVhdHVyZU1vZGlmaWVyRWRpdENvbXBvc2l0ZUFkYXB0ZXIjZ2V0U2VxdWVuY2VTdW1tYXJ5VGV4dCgpCisJCSAqLworCQlwcm90ZWN0ZWQgU3RyaW5nIGdldFNlcXVlbmNlU3VtbWFyeVRleHQoKSB7CisJCQlmaW5hbCBTVEVNVGltZVNlcXVlbmNlTW9kaWZpZXIgc2VxdWVuY2VNb2RpZmllciA9IChTVEVNVGltZVNlcXVlbmNlTW9kaWZpZXIpIGdldEZlYXR1cmVNb2RpZmllcigpOworCQkJZmluYWwgU3RyaW5nQnVpbGRlciBzYiA9IG5ldyBTdHJpbmdCdWlsZGVyKCk7CisJCQlpbnQgaSA9IHNlcXVlbmNlTW9kaWZpZXIuZ2V0U2VxdWVuY2VTaXplKCk7CisJCQlmb3IgKFNURU1UaW1lIHRpbWUgOiBzZXF1ZW5jZU1vZGlmaWVyLmdldFNlcXVlbmNlKCkpIHsKKwkJCQlzYi5hcHBlbmQodGltZS50b1N0cmluZygpKTsKKwkJCQlzYi5hcHBlbmQoLS1pID4gMCA/ICIsICIgOiAiIik7CisJCQl9IC8vIGZvciBlYWNoCisJCQlyZXR1cm4gc2IudG9TdHJpbmcoKTsKKwkJfSAvLyBnZXRTZXF1ZW5jZVN1bW1hcnlUZXh0CisJfSAvLyBTVEVNVGltZVNlcXVlbmNlRmVhdHVyZU1vZGlmaWVyRWRpdENvbXBvc2l0ZUFkYXB0ZXIKKworfSAvLyBTZXF1ZW5jZUZlYXR1cmVNb2RpZmllckVkaXRDb21wb3NpdGVBZGFwdGVyCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvYWRhcHRlcnMvZmVhdHVyZW1vZGlmaWVyZWRpdGNvbXBvc2l0ZS9TaW5nbGVWYWx1ZUZlYXR1cmVNb2RpZmllckVkaXRDb21wb3NpdGVBZGFwdGVyLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvYWRhcHRlcnMvZmVhdHVyZW1vZGlmaWVyZWRpdGNvbXBvc2l0ZS9TaW5nbGVWYWx1ZUZlYXR1cmVNb2RpZmllckVkaXRDb21wb3NpdGVBZGFwdGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjM3MTFkMAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9hZGFwdGVycy9mZWF0dXJlbW9kaWZpZXJlZGl0Y29tcG9zaXRlL1NpbmdsZVZhbHVlRmVhdHVyZU1vZGlmaWVyRWRpdENvbXBvc2l0ZUFkYXB0ZXIuamF2YQpAQCAtMCwwICsxLDQyNSBAQAorLy8gUmFuZ2VGZWF0dXJlTW9kaWZpZXJFZGl0Q29tcG9zaXRlQWRhcHRlci5qYXZhCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0udWkuYWRhcHRlcnMuZmVhdHVyZW1vZGlmaWVyZWRpdGNvbXBvc2l0ZTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuU1RFTVRpbWU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLkRvdWJsZU1vZGlmaWVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5GZWF0dXJlTW9kaWZpZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLkludGVnZXJNb2RpZmllcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuTG9uZ01vZGlmaWVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5TVEVNVGltZU1vZGlmaWVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udWkud2l6YXJkcy5OZXdNb2RpZmllclBhZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS51aS53aXphcmRzLk5ld01vZGlmaWVyUGFnZS5GZWF0dXJlTW9kaWZpZXJFZGl0Q29tcG9zaXRlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5TV1Q7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5Gb3JtQXR0YWNobWVudDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QubGF5b3V0LkZvcm1EYXRhOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5sYXlvdXQuRm9ybUxheW91dDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QubGF5b3V0LlJvd0xheW91dDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5CdXR0b247CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkxhYmVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlRleHQ7CisKKy8qKgorICogVGhpcyBjbGFzcyBpcyBhIHtAbGluayBGZWF0dXJlTW9kaWZpZXJFZGl0Q29tcG9zaXRlQWRhcHRlcn0gZm9yCisgKiB7QGxpbmsgU2luZ2xlVmFsdWVNb2RpZmllcn1zLgorICovCithYnN0cmFjdCBwdWJsaWMgY2xhc3MgU2luZ2xlVmFsdWVGZWF0dXJlTW9kaWZpZXJFZGl0Q29tcG9zaXRlQWRhcHRlciBleHRlbmRzCisJCUZlYXR1cmVNb2RpZmllckVkaXRDb21wb3NpdGVBZGFwdGVyIHsKKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS51aS5hZGFwdGVycy5mZWF0dXJlbW9kaWZpZXJlZGl0Y29tcG9zaXRlLkZlYXR1cmVNb2RpZmllckVkaXRDb21wb3NpdGVBZGFwdGVyI3NldFNlbGVjdGVkQnV0dG9uKG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkJ1dHRvbiwKKwkgKiAgICAgIG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkJ1dHRvbiwgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQnV0dG9uKQorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIHNldFNlbGVjdGVkQnV0dG9uKGZpbmFsIEJ1dHRvbiBub25lQnV0dG9uLCBmaW5hbCBCdXR0b24gc2luZ2xlVmFsdWVCdXR0b24sCisJCQlmaW5hbCBCdXR0b24gcmFuZ2VCdXR0b24sIGZpbmFsIEJ1dHRvbiBzZXF1ZW5jZUJ1dHRvbikgeworCQlub25lQnV0dG9uLnNldFNlbGVjdGlvbihmYWxzZSk7CisJCXNpbmdsZVZhbHVlQnV0dG9uLnNldFNlbGVjdGlvbih0cnVlKTsKKwkJcmFuZ2VCdXR0b24uc2V0U2VsZWN0aW9uKGZhbHNlKTsKKwkJc2VxdWVuY2VCdXR0b24uc2V0U2VsZWN0aW9uKGZhbHNlKTsKKwl9IC8vIHNldFNlbGVjdGVkQnV0dG9uCisKKwkvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKwkvKioKKwkgKiBUaGlzIGNsYXNzIGlzIGEge0BsaW5rIEZlYXR1cmVNb2RpZmllckVkaXRDb21wb3NpdGVBZGFwdGVyfSBmb3IKKwkgKiB7QGxpbmsgU2luZ2xlVmFsdWVNb2RpZmllcn1zIHRoYXQgaGF2ZSBhIHJhbmdlIG9mIG51bWVyaWMgdmFsdWVzLgorCSAqLworCXByb3RlY3RlZCBzdGF0aWMgYWJzdHJhY3QgY2xhc3MgTnVtZXJpY1NpbmdsZVZhbHVlRmVhdHVyZU1vZGlmaWVyRWRpdENvbXBvc2l0ZUFkYXB0ZXIKKwkJCWV4dGVuZHMgU2luZ2xlVmFsdWVGZWF0dXJlTW9kaWZpZXJFZGl0Q29tcG9zaXRlQWRhcHRlciB7CisKKwkJcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IFRFWFRfV0lEVEggPSA2MDsKKworCQlwcm90ZWN0ZWQgVGV4dCB2YWx1ZVRleHQ7CisJCQorCQlhYnN0cmFjdCBwcm90ZWN0ZWQgdm9pZCBpbml0aWFsaXplRmVhdHVyZU1vZGlmaWVyKAorCQkJCUVPYmplY3QgdGFyZ2V0KTsKKworCQlhYnN0cmFjdCBwcm90ZWN0ZWQgU3RyaW5nIGdldFZhbHVlVGV4dCgpOworCisJCS8qKgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0udWkuYWRhcHRlcnMuZmVhdHVyZW1vZGlmaWVyZWRpdGNvbXBvc2l0ZS5GZWF0dXJlTW9kaWZpZXJFZGl0Q29tcG9zaXRlQWRhcHRlciNjcmVhdGVFZGl0Q29tcG9zaXRlKG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZSwKKwkJICogICAgICBJZGVudGlmaWFibGUsIE5ld01vZGlmaWVyUGFnZSkKKwkJICovCisJCUBPdmVycmlkZQorCQlwdWJsaWMgRmVhdHVyZU1vZGlmaWVyRWRpdENvbXBvc2l0ZSBjcmVhdGVFZGl0Q29tcG9zaXRlKAorCQkJCWZpbmFsIENvbXBvc2l0ZSBwYXJlbnQsIGZpbmFsIEVPYmplY3QgdGFyZ2V0LAorCQkJCWZpbmFsIE5ld01vZGlmaWVyUGFnZSBwYXJlbnROZXdNb2RpZmllclBhZ2UpIHsKKworCQkJaW5pdGlhbGl6ZUZlYXR1cmVNb2RpZmllcih0YXJnZXQpOworCisJCQlmaW5hbCBGZWF0dXJlTW9kaWZpZXJFZGl0Q29tcG9zaXRlIHJldFZhbHVlID0gZ2V0RmVhdHVyZU1vZGlmaWVyRWRpdENvbXBvc2l0ZSgKKwkJCQkJcGFyZW50LCBwYXJlbnROZXdNb2RpZmllclBhZ2UpOworCisJCQlmaW5hbCBGb3JtTGF5b3V0IGxheW91dCA9IG5ldyBGb3JtTGF5b3V0KCk7CisJCQlsYXlvdXQubWFyZ2luSGVpZ2h0ID0gMDsKKwkJCWxheW91dC5tYXJnaW5XaWR0aCA9IDA7CisJCQlyZXRWYWx1ZS5zZXRMYXlvdXQobGF5b3V0KTsKKworCQkJdmFsdWVUZXh0ID0gbmV3IFRleHQocmV0VmFsdWUsIFNXVC5CT1JERVIgfCBTV1QuVFJBSUwpOworCQkJdmFsdWVUZXh0LnNldFRleHQoZ2V0VmFsdWVUZXh0KCkpOworCQkJdmFsdWVUZXh0LnNldFRvb2xUaXBUZXh0KCJWYWx1ZSIpOworCQkJdmFsdWVUZXh0LmFkZE1vZGlmeUxpc3RlbmVyKHJldFZhbHVlLmdldE1vZGlmeUxpc3RlbmVyKCkpOworCQorCQkJb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5Gb3JtRGF0YSBmb3JtRGF0YSA9IG51bGw7CisKKwkJCS8vIHN0YXJ0CisJCQlmb3JtRGF0YSA9IG5ldyBGb3JtRGF0YSgpOworCQkJZm9ybURhdGEud2lkdGggPSBURVhUX1dJRFRIOworCQkJZm9ybURhdGEubGVmdCA9IG5ldyBGb3JtQXR0YWNobWVudCgwLCAwKTsKKwkJCWZvcm1EYXRhLmJvdHRvbSA9IG5ldyBGb3JtQXR0YWNobWVudCgxMDAsIDApOworCQkJdmFsdWVUZXh0LnNldExheW91dERhdGEoZm9ybURhdGEpOworCisJCQlyZXR1cm4gcmV0VmFsdWU7CisJCX0gLy8gY3JlYXRlRWRpdENvbXBvc2l0ZQorCisJCS8qKgorCQkgKiBAcGFyYW0gcGFyZW50CisJCSAqICAgICAgICAgICAgdGhlIHBhcmVudCBjb21wb3NpdGUKKwkJICogQHBhcmFtIHBhcmVudE5ld01vZGlmaWVyUGFnZQorCQkgKiAgICAgICAgICAgIHRoZSB7QGxpbmsgTmV3TW9kaWZpZXJQYWdlfSB0aGF0IGlzIHRoZSBwYXJlbnQgdG8gcGFyZW50CisJCSAqIEByZXR1cm4gYSBuZXcge0BsaW5rIEZlYXR1cmVNb2RpZmllckVkaXRDb21wb3NpdGV9CisJCSAqLworCQlwcm90ZWN0ZWQgYWJzdHJhY3QgRmVhdHVyZU1vZGlmaWVyRWRpdENvbXBvc2l0ZSBnZXRGZWF0dXJlTW9kaWZpZXJFZGl0Q29tcG9zaXRlKAorCQkJCUNvbXBvc2l0ZSBwYXJlbnQsIE5ld01vZGlmaWVyUGFnZSBwYXJlbnROZXdNb2RpZmllclBhZ2UpOworCisJfSAKKworCS8qKgorCSAqIFRoaXMgY2xhc3MgaXMgYSB7QGxpbmsgRmVhdHVyZU1vZGlmaWVyRWRpdENvbXBvc2l0ZUFkYXB0ZXJ9IGZvcgorCSAqIHtAbGluayBJbnRlZ2VyTW9kaWZpZXJ9cy4KKwkgKi8KKwlwdWJsaWMgc3RhdGljIGNsYXNzIEludGVnZXJGZWF0dXJlTW9kaWZpZXJFZGl0Q29tcG9zaXRlQWRhcHRlciBleHRlbmRzCisJCQlOdW1lcmljU2luZ2xlVmFsdWVGZWF0dXJlTW9kaWZpZXJFZGl0Q29tcG9zaXRlQWRhcHRlciB7CisKKwkJLyoqCisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS51aS5hZGFwdGVycy5mZWF0dXJlbW9kaWZpZXJlZGl0Y29tcG9zaXRlLlJhbmdlRmVhdHVyZU1vZGlmaWVyRWRpdENvbXBvc2l0ZUFkYXB0ZXIuTnVtZXJpY1JhbmdlRmVhdHVyZU1vZGlmaWVyRWRpdENvbXBvc2l0ZUFkYXB0ZXIjaW5pdGlhbGl6ZUZlYXR1cmVNb2RpZmllcihJZGVudGlmaWFibGUpCisJCSAqLworCQlAT3ZlcnJpZGUKKwkJcHJvdGVjdGVkIHZvaWQgaW5pdGlhbGl6ZUZlYXR1cmVNb2RpZmllcigKKwkJCQlAU3VwcHJlc3NXYXJuaW5ncygidW51c2VkIikgZmluYWwgRU9iamVjdCB0YXJnZXQpIHsKKwkJCWZpbmFsIEludGVnZXJNb2RpZmllciBtb2RpZmllciA9IChJbnRlZ2VyTW9kaWZpZXIpIGdldEZlYXR1cmVNb2RpZmllcigpOworCQkJbW9kaWZpZXIuc2V0VmFsdWUoKChJbnRlZ2VyKSAoZ2V0RmVhdHVyZU1vZGlmaWVyKCkKKwkJCQkJLmdldFRhcmdldCgpLmVHZXQoZ2V0RmVhdHVyZU1vZGlmaWVyKCkKKwkJCQkJLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZSgpKSkpLmludFZhbHVlKCkpOworCQl9IC8vIGluaXRpYWxpemVGZWF0dXJlTW9kaWZpZXIKKworCQkvKioKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnVpLmFkYXB0ZXJzLmZlYXR1cmVtb2RpZmllcmVkaXRjb21wb3NpdGUuUmFuZ2VGZWF0dXJlTW9kaWZpZXJFZGl0Q29tcG9zaXRlQWRhcHRlci5OdW1lcmljUmFuZ2VGZWF0dXJlTW9kaWZpZXJFZGl0Q29tcG9zaXRlQWRhcHRlciNnZXRJbml0aWFsRW5kVGV4dCgpCisJCSAqLworCQlAT3ZlcnJpZGUKKwkJcHJvdGVjdGVkIFN0cmluZyBnZXRWYWx1ZVRleHQoKSB7CisJCQlyZXR1cm4gSW50ZWdlcgorCQkJCQkudG9TdHJpbmcoKChJbnRlZ2VyTW9kaWZpZXIpIGdldEZlYXR1cmVNb2RpZmllcigpKQorCQkJCQkJCS5nZXRWYWx1ZSgpKTsKKwkJfQorCisKKwkJLyoqCisJCSAqIAorCQkgKi8KKwkJQE92ZXJyaWRlCisJCXByb3RlY3RlZCBGZWF0dXJlTW9kaWZpZXJFZGl0Q29tcG9zaXRlIGdldEZlYXR1cmVNb2RpZmllckVkaXRDb21wb3NpdGUoCisJCQkJZmluYWwgQ29tcG9zaXRlIHBhcmVudCwKKwkJCQlmaW5hbCBOZXdNb2RpZmllclBhZ2UgcGFyZW50TmV3TW9kaWZpZXJQYWdlKSB7CisJCQlmaW5hbCBGZWF0dXJlTW9kaWZpZXJFZGl0Q29tcG9zaXRlIHJldFZhbHVlID0gbmV3IEZlYXR1cmVNb2RpZmllckVkaXRDb21wb3NpdGUoCisJCQkJCXBhcmVudCwgcGFyZW50TmV3TW9kaWZpZXJQYWdlLAorCQkJCQkoRmVhdHVyZU1vZGlmaWVyKSBnZXRUYXJnZXQoKSkgeworCisJCQkJLyoqCisJCQkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnVpLndpemFyZHMuTmV3TW9kaWZpZXJQYWdlLkZlYXR1cmVNb2RpZmllckVkaXRDb21wb3NpdGUjdmFsaWRhdGUoKQorCQkJCSAqLworCQkJCUBPdmVycmlkZQorCQkJCXByb3RlY3RlZCBib29sZWFuIHZhbGlkYXRlKCkgeworCQkJCQlib29sZWFuIHJldFZhbHVlID0gdHJ1ZTsKKworCQkJCQlTdHJpbmcgbWVzc2FnZSA9IG51bGw7CisKKwkJCQkJaW50IHZhbHVlID0gMDsKKwkJCQkJLy8gU3RhcnQgdGV4dAorCQkJCQkvLyBTdGlsbCB2YWxpZD8KKwkJCQkJaWYgKHJldFZhbHVlKSB7CisJCQkJCQkvLyBZZXMKKwkJCQkJCXRyeSB7CisJCQkJCQkJLy8gVmFsaWQgc3RhcnQgdmFsdWU/CisJCQkJCQkJdmFsdWUgPSBJbnRlZ2VyLnBhcnNlSW50KHZhbHVlVGV4dC5nZXRUZXh0KCkpOworCQkJCQkJCSgoSW50ZWdlck1vZGlmaWVyKSBmZWF0dXJlTW9kaWZpZXIpCisJCQkJCQkJCQkuc2V0VmFsdWUodmFsdWUpOworCQkJCQkJfSBjYXRjaCAoZmluYWwgTnVtYmVyRm9ybWF0RXhjZXB0aW9uIGUpIHsKKwkJCQkJCQlyZXRWYWx1ZSA9IGZhbHNlOworCQkJCQkJCW1lc3NhZ2UgPSAiVmFsdWUgbm90IHZhbGlkIjsKKwkJCQkJCX0gLy8gY2F0Y2ggTnVtYmVyRm9ybWF0RXhjZXB0aW9uCisJCQkJCX0gLy8gaWYKKworCQkJCQkvLyBBbnkgZXJyb3IgbWVzc2FnZSB0byByZXBvcnQ/CisJCQkJCWlmIChtZXNzYWdlICE9IG51bGwpIHsKKwkJCQkJCS8vIFllcworCQkJCQkJcGFyZW50TmV3TW9kaWZpZXJQYWdlLnNldEVycm9yTWVzc2FnZShtZXNzYWdlKTsKKwkJCQkJfSAvLyBpZgorCisJCQkJCS8vIEV2ZXJ5dGhpbmcgT2s/CisJCQkJCWlmIChyZXRWYWx1ZSkgeworCQkJCQkJLy8gWWVzCisJCQkJCQkvLyBDaGVjayBvdXQgdGhlIHBhcmVudCB0aGVuCisJCQkJCQlyZXRWYWx1ZSA9IHBhcmVudE5ld01vZGlmaWVyUGFnZS52YWxpZGF0ZVBhZ2UoKTsKKwkJCQkJfSAvLyBpZgorCisJCQkJCXJldHVybiByZXRWYWx1ZTsKKwkJCQl9IC8vIHZhbGlkYXRlCisJCQl9OworCQkJcmV0dXJuIHJldFZhbHVlOworCQl9IC8vIGdldEZlYXR1cmVNb2RpZmllckVkaXRDb21wb3NpdGUKKworCX0gLy8KKwkKKwkvKioKKwkgKiBUaGlzIGNsYXNzIGlzIGEge0BsaW5rIEZlYXR1cmVNb2RpZmllckVkaXRDb21wb3NpdGVBZGFwdGVyfSBmb3IKKwkgKiB7QGxpbmsgTG9uZ01vZGlmaWVyfXMuCisJICovCisJcHVibGljIHN0YXRpYyBjbGFzcyBMb25nRmVhdHVyZU1vZGlmaWVyRWRpdENvbXBvc2l0ZUFkYXB0ZXIgZXh0ZW5kcworCQkJTnVtZXJpY1NpbmdsZVZhbHVlRmVhdHVyZU1vZGlmaWVyRWRpdENvbXBvc2l0ZUFkYXB0ZXIgeworCisJCS8qKgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0udWkuYWRhcHRlcnMuZmVhdHVyZW1vZGlmaWVyZWRpdGNvbXBvc2l0ZS5SYW5nZUZlYXR1cmVNb2RpZmllckVkaXRDb21wb3NpdGVBZGFwdGVyLk51bWVyaWNSYW5nZUZlYXR1cmVNb2RpZmllckVkaXRDb21wb3NpdGVBZGFwdGVyI2luaXRpYWxpemVGZWF0dXJlTW9kaWZpZXIoSWRlbnRpZmlhYmxlKQorCQkgKi8KKwkJQE92ZXJyaWRlCisJCXByb3RlY3RlZCB2b2lkIGluaXRpYWxpemVGZWF0dXJlTW9kaWZpZXIoCisJCQkJQFN1cHByZXNzV2FybmluZ3MoInVudXNlZCIpIGZpbmFsIEVPYmplY3QgdGFyZ2V0KSB7CisJCQlmaW5hbCBMb25nTW9kaWZpZXIgbW9kaWZpZXIgPSAoTG9uZ01vZGlmaWVyKSBnZXRGZWF0dXJlTW9kaWZpZXIoKTsKKwkJCW1vZGlmaWVyLnNldFZhbHVlKCgoTG9uZykgKGdldEZlYXR1cmVNb2RpZmllcigpCisJCQkJCS5nZXRUYXJnZXQoKS5lR2V0KGdldEZlYXR1cmVNb2RpZmllcigpCisJCQkJCS5nZXRFU3RydWN0dXJhbEZlYXR1cmUoKSkpKS5pbnRWYWx1ZSgpKTsKKwkJfSAvLyBpbml0aWFsaXplRmVhdHVyZU1vZGlmaWVyCisKKwkJLyoqCisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS51aS5hZGFwdGVycy5mZWF0dXJlbW9kaWZpZXJlZGl0Y29tcG9zaXRlLlJhbmdlRmVhdHVyZU1vZGlmaWVyRWRpdENvbXBvc2l0ZUFkYXB0ZXIuTnVtZXJpY1JhbmdlRmVhdHVyZU1vZGlmaWVyRWRpdENvbXBvc2l0ZUFkYXB0ZXIjZ2V0SW5pdGlhbEVuZFRleHQoKQorCQkgKi8KKwkJQE92ZXJyaWRlCisJCXByb3RlY3RlZCBTdHJpbmcgZ2V0VmFsdWVUZXh0KCkgeworCQkJcmV0dXJuIExvbmcKKwkJCQkJLnRvU3RyaW5nKCgoTG9uZ01vZGlmaWVyKSBnZXRGZWF0dXJlTW9kaWZpZXIoKSkKKwkJCQkJCQkuZ2V0VmFsdWUoKSk7CisJCX0KKworCisJCS8qKgorCQkgKiAKKwkJICovCisJCUBPdmVycmlkZQorCQlwcm90ZWN0ZWQgRmVhdHVyZU1vZGlmaWVyRWRpdENvbXBvc2l0ZSBnZXRGZWF0dXJlTW9kaWZpZXJFZGl0Q29tcG9zaXRlKAorCQkJCWZpbmFsIENvbXBvc2l0ZSBwYXJlbnQsCisJCQkJZmluYWwgTmV3TW9kaWZpZXJQYWdlIHBhcmVudE5ld01vZGlmaWVyUGFnZSkgeworCQkJZmluYWwgRmVhdHVyZU1vZGlmaWVyRWRpdENvbXBvc2l0ZSByZXRWYWx1ZSA9IG5ldyBGZWF0dXJlTW9kaWZpZXJFZGl0Q29tcG9zaXRlKAorCQkJCQlwYXJlbnQsIHBhcmVudE5ld01vZGlmaWVyUGFnZSwKKwkJCQkJKEZlYXR1cmVNb2RpZmllcikgZ2V0VGFyZ2V0KCkpIHsKKworCQkJCS8qKgorCQkJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS51aS53aXphcmRzLk5ld01vZGlmaWVyUGFnZS5GZWF0dXJlTW9kaWZpZXJFZGl0Q29tcG9zaXRlI3ZhbGlkYXRlKCkKKwkJCQkgKi8KKwkJCQlAT3ZlcnJpZGUKKwkJCQlwcm90ZWN0ZWQgYm9vbGVhbiB2YWxpZGF0ZSgpIHsKKwkJCQkJYm9vbGVhbiByZXRWYWx1ZSA9IHRydWU7CisKKwkJCQkJU3RyaW5nIG1lc3NhZ2UgPSBudWxsOworCisJCQkJCWxvbmcgdmFsdWUgPSAwOworCQkJCQkvLyBTdGFydCB0ZXh0CisJCQkJCS8vIFN0aWxsIHZhbGlkPworCQkJCQlpZiAocmV0VmFsdWUpIHsKKwkJCQkJCS8vIFllcworCQkJCQkJdHJ5IHsKKwkJCQkJCQkvLyBWYWxpZCBzdGFydCB2YWx1ZT8KKwkJCQkJCQl2YWx1ZSA9IExvbmcucGFyc2VMb25nKHZhbHVlVGV4dC5nZXRUZXh0KCkpOworCQkJCQkJCSgoTG9uZ01vZGlmaWVyKSBmZWF0dXJlTW9kaWZpZXIpCisJCQkJCQkJCQkuc2V0VmFsdWUodmFsdWUpOworCQkJCQkJfSBjYXRjaCAoZmluYWwgTnVtYmVyRm9ybWF0RXhjZXB0aW9uIGUpIHsKKwkJCQkJCQlyZXRWYWx1ZSA9IGZhbHNlOworCQkJCQkJCW1lc3NhZ2UgPSAiVmFsdWUgbm90IHZhbGlkIjsKKwkJCQkJCX0gLy8gY2F0Y2ggTnVtYmVyRm9ybWF0RXhjZXB0aW9uCisJCQkJCX0gLy8gaWYKKworCQkJCQkvLyBBbnkgZXJyb3IgbWVzc2FnZSB0byByZXBvcnQ/CisJCQkJCWlmIChtZXNzYWdlICE9IG51bGwpIHsKKwkJCQkJCS8vIFllcworCQkJCQkJcGFyZW50TmV3TW9kaWZpZXJQYWdlLnNldEVycm9yTWVzc2FnZShtZXNzYWdlKTsKKwkJCQkJfSAvLyBpZgorCisJCQkJCS8vIEV2ZXJ5dGhpbmcgT2s/CisJCQkJCWlmIChyZXRWYWx1ZSkgeworCQkJCQkJLy8gWWVzCisJCQkJCQkvLyBDaGVjayBvdXQgdGhlIHBhcmVudCB0aGVuCisJCQkJCQlyZXRWYWx1ZSA9IHBhcmVudE5ld01vZGlmaWVyUGFnZS52YWxpZGF0ZVBhZ2UoKTsKKwkJCQkJfSAvLyBpZgorCisJCQkJCXJldHVybiByZXRWYWx1ZTsKKwkJCQl9IC8vIHZhbGlkYXRlCisJCQl9OworCQkJcmV0dXJuIHJldFZhbHVlOworCQl9IC8vIGdldEZlYXR1cmVNb2RpZmllckVkaXRDb21wb3NpdGUKKworCX0KKwkvKioKKwkgKiBUaGlzIGNsYXNzIGlzIGEge0BsaW5rIEZlYXR1cmVNb2RpZmllckVkaXRDb21wb3NpdGVBZGFwdGVyfSBmb3IKKwkgKiB7QGxpbmsgRG91YmxlTW9kaWZpZXJ9cy4KKwkgKi8KKwlwdWJsaWMgc3RhdGljIGNsYXNzIERvdWJsZUZlYXR1cmVNb2RpZmllckVkaXRDb21wb3NpdGVBZGFwdGVyIGV4dGVuZHMKKwkJCU51bWVyaWNTaW5nbGVWYWx1ZUZlYXR1cmVNb2RpZmllckVkaXRDb21wb3NpdGVBZGFwdGVyIHsKKworCQkvKioKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnVpLmFkYXB0ZXJzLmZlYXR1cmVtb2RpZmllcmVkaXRjb21wb3NpdGUuUmFuZ2VGZWF0dXJlTW9kaWZpZXJFZGl0Q29tcG9zaXRlQWRhcHRlci5OdW1lcmljUmFuZ2VGZWF0dXJlTW9kaWZpZXJFZGl0Q29tcG9zaXRlQWRhcHRlciNpbml0aWFsaXplRmVhdHVyZU1vZGlmaWVyKElkZW50aWZpYWJsZSkKKwkJICovCisJCUBPdmVycmlkZQorCQlwcm90ZWN0ZWQgdm9pZCBpbml0aWFsaXplRmVhdHVyZU1vZGlmaWVyKAorCQkJCUBTdXBwcmVzc1dhcm5pbmdzKCJ1bnVzZWQiKSBmaW5hbCBFT2JqZWN0IHRhcmdldCkgeworCQkJZmluYWwgRG91YmxlTW9kaWZpZXIgbW9kaWZpZXIgPSAoRG91YmxlTW9kaWZpZXIpIGdldEZlYXR1cmVNb2RpZmllcigpOworCQkJbW9kaWZpZXIuc2V0VmFsdWUoKChEb3VibGUpIChnZXRGZWF0dXJlTW9kaWZpZXIoKQorCQkJCQkuZ2V0VGFyZ2V0KCkuZUdldChnZXRGZWF0dXJlTW9kaWZpZXIoKQorCQkJCQkuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlKCkpKSkuaW50VmFsdWUoKSk7CisJCX0gLy8gaW5pdGlhbGl6ZUZlYXR1cmVNb2RpZmllcgorCisJCS8qKgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0udWkuYWRhcHRlcnMuZmVhdHVyZW1vZGlmaWVyZWRpdGNvbXBvc2l0ZS5SYW5nZUZlYXR1cmVNb2RpZmllckVkaXRDb21wb3NpdGVBZGFwdGVyLk51bWVyaWNSYW5nZUZlYXR1cmVNb2RpZmllckVkaXRDb21wb3NpdGVBZGFwdGVyI2dldEluaXRpYWxFbmRUZXh0KCkKKwkJICovCisJCUBPdmVycmlkZQorCQlwcm90ZWN0ZWQgU3RyaW5nIGdldFZhbHVlVGV4dCgpIHsKKwkJCXJldHVybiBEb3VibGUKKwkJCQkJLnRvU3RyaW5nKCgoRG91YmxlTW9kaWZpZXIpIGdldEZlYXR1cmVNb2RpZmllcigpKQorCQkJCQkJCS5nZXRWYWx1ZSgpKTsKKwkJfQorCisKKwkJLyoqCisJCSAqIAorCQkgKi8KKwkJQE92ZXJyaWRlCisJCXByb3RlY3RlZCBGZWF0dXJlTW9kaWZpZXJFZGl0Q29tcG9zaXRlIGdldEZlYXR1cmVNb2RpZmllckVkaXRDb21wb3NpdGUoCisJCQkJZmluYWwgQ29tcG9zaXRlIHBhcmVudCwKKwkJCQlmaW5hbCBOZXdNb2RpZmllclBhZ2UgcGFyZW50TmV3TW9kaWZpZXJQYWdlKSB7CisJCQlmaW5hbCBGZWF0dXJlTW9kaWZpZXJFZGl0Q29tcG9zaXRlIHJldFZhbHVlID0gbmV3IEZlYXR1cmVNb2RpZmllckVkaXRDb21wb3NpdGUoCisJCQkJCXBhcmVudCwgcGFyZW50TmV3TW9kaWZpZXJQYWdlLAorCQkJCQkoRmVhdHVyZU1vZGlmaWVyKSBnZXRUYXJnZXQoKSkgeworCisJCQkJLyoqCisJCQkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnVpLndpemFyZHMuTmV3TW9kaWZpZXJQYWdlLkZlYXR1cmVNb2RpZmllckVkaXRDb21wb3NpdGUjdmFsaWRhdGUoKQorCQkJCSAqLworCQkJCUBPdmVycmlkZQorCQkJCXByb3RlY3RlZCBib29sZWFuIHZhbGlkYXRlKCkgeworCQkJCQlib29sZWFuIHJldFZhbHVlID0gdHJ1ZTsKKworCQkJCQlTdHJpbmcgbWVzc2FnZSA9IG51bGw7CisKKwkJCQkJZG91YmxlIHZhbHVlID0gMDsKKwkJCQkJLy8gU3RhcnQgdGV4dAorCQkJCQkvLyBTdGlsbCB2YWxpZD8KKwkJCQkJaWYgKHJldFZhbHVlKSB7CisJCQkJCQkvLyBZZXMKKwkJCQkJCXRyeSB7CisJCQkJCQkJLy8gVmFsaWQgc3RhcnQgdmFsdWU/CisJCQkJCQkJdmFsdWUgPSBEb3VibGUucGFyc2VEb3VibGUodmFsdWVUZXh0LmdldFRleHQoKSk7CisJCQkJCQkJKChEb3VibGVNb2RpZmllcikgZmVhdHVyZU1vZGlmaWVyKQorCQkJCQkJCQkJLnNldFZhbHVlKHZhbHVlKTsKKwkJCQkJCX0gY2F0Y2ggKGZpbmFsIE51bWJlckZvcm1hdEV4Y2VwdGlvbiBlKSB7CisJCQkJCQkJcmV0VmFsdWUgPSBmYWxzZTsKKwkJCQkJCQltZXNzYWdlID0gIlZhbHVlIG5vdCB2YWxpZCI7CisJCQkJCQl9IC8vIGNhdGNoIE51bWJlckZvcm1hdEV4Y2VwdGlvbgorCQkJCQl9IC8vIGlmCisKKwkJCQkJLy8gQW55IGVycm9yIG1lc3NhZ2UgdG8gcmVwb3J0PworCQkJCQlpZiAobWVzc2FnZSAhPSBudWxsKSB7CisJCQkJCQkvLyBZZXMKKwkJCQkJCXBhcmVudE5ld01vZGlmaWVyUGFnZS5zZXRFcnJvck1lc3NhZ2UobWVzc2FnZSk7CisJCQkJCX0gLy8gaWYKKworCQkJCQkvLyBFdmVyeXRoaW5nIE9rPworCQkJCQlpZiAocmV0VmFsdWUpIHsKKwkJCQkJCS8vIFllcworCQkJCQkJLy8gQ2hlY2sgb3V0IHRoZSBwYXJlbnQgdGhlbgorCQkJCQkJcmV0VmFsdWUgPSBwYXJlbnROZXdNb2RpZmllclBhZ2UudmFsaWRhdGVQYWdlKCk7CisJCQkJCX0gLy8gaWYKKworCQkJCQlyZXR1cm4gcmV0VmFsdWU7CisJCQkJfSAvLyB2YWxpZGF0ZQorCQkJfTsKKwkJCXJldHVybiByZXRWYWx1ZTsKKwkJfSAvLyBnZXRGZWF0dXJlTW9kaWZpZXJFZGl0Q29tcG9zaXRlCisKKwl9CisKKwkvKioKKwkgKiBUaGlzIGNsYXNzIGlzIGEge0BsaW5rIEZlYXR1cmVNb2RpZmllckVkaXRDb21wb3NpdGVBZGFwdGVyfSBmb3IKKwkgKiB7QGxpbmsgU1RFTVRpbWVNb2RpZmllcn1zLgorCSAqLworCXB1YmxpYyBzdGF0aWMgY2xhc3MgU1RFTVRpbWVGZWF0dXJlTW9kaWZpZXJFZGl0Q29tcG9zaXRlQWRhcHRlciBleHRlbmRzCisJCQlTaW5nbGVWYWx1ZUZlYXR1cmVNb2RpZmllckVkaXRDb21wb3NpdGVBZGFwdGVyIHsKKworCQkvKioKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnVpLmFkYXB0ZXJzLmZlYXR1cmVtb2RpZmllcmVkaXRjb21wb3NpdGUuRmVhdHVyZU1vZGlmaWVyRWRpdENvbXBvc2l0ZUFkYXB0ZXIjY3JlYXRlRWRpdENvbXBvc2l0ZShvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGUsCisJCSAqICAgICAgSWRlbnRpZmlhYmxlLCBOZXdNb2RpZmllclBhZ2UpCisJCSAqLworCQlAT3ZlcnJpZGUKKwkJcHVibGljIEZlYXR1cmVNb2RpZmllckVkaXRDb21wb3NpdGUgY3JlYXRlRWRpdENvbXBvc2l0ZSgKKwkJCQlmaW5hbCBDb21wb3NpdGUgcGFyZW50LAorCQkJCUBTdXBwcmVzc1dhcm5pbmdzKCJ1bnVzZWQiKSBmaW5hbCBFT2JqZWN0IHRhcmdldCwKKwkJCQlmaW5hbCBOZXdNb2RpZmllclBhZ2UgcGFyZW50TmV3TW9kaWZpZXJQYWdlKSB7CisJCQlmaW5hbCBGZWF0dXJlTW9kaWZpZXJFZGl0Q29tcG9zaXRlIHJldFZhbHVlID0gbmV3IEZlYXR1cmVNb2RpZmllckVkaXRDb21wb3NpdGUoCisJCQkJCXBhcmVudCwgcGFyZW50TmV3TW9kaWZpZXJQYWdlLAorCQkJCQkoRmVhdHVyZU1vZGlmaWVyKSBnZXRUYXJnZXQoKSkgeworCQkJCUBPdmVycmlkZQorCQkJCXByb3RlY3RlZCBib29sZWFuIHZhbGlkYXRlKCkgeworCQkJCQlmaW5hbCBib29sZWFuIHJldFZhbHVlID0gcGFyZW50TmV3TW9kaWZpZXJQYWdlCisJCQkJCQkJLnZhbGlkYXRlUGFnZSgpOworCisJCQkJCS8vIFN0cmluZyBtZXNzYWdlID0gbnVsbDsKKwkJCQkJcmV0dXJuIHJldFZhbHVlOworCQkJCX0gLy8gdmFsaWRhdGUKKwkJCX07CisJCQlyZXRWYWx1ZS5zZXRMYXlvdXQobmV3IFJvd0xheW91dCgpKTsKKwkJCWZpbmFsIExhYmVsIGxhYmVsID0gbmV3IExhYmVsKHJldFZhbHVlLCBTV1QuTk9ORSk7CisKKwkJCWZpbmFsIFNURU1UaW1lTW9kaWZpZXIgbW9kaWZpZXIgPSAoU1RFTVRpbWVNb2RpZmllcikgZ2V0RmVhdHVyZU1vZGlmaWVyKCk7CisJCQltb2RpZmllci5zZXRWYWx1ZSgoU1RFTVRpbWUpIGdldEZlYXR1cmVNb2RpZmllcigpCisJCQkJCS5nZXRUYXJnZXQoKS5lR2V0KAorCQkJCQkJCWdldEZlYXR1cmVNb2RpZmllcigpLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZSgpKSk7CisJCisJCQlmaW5hbCBTdHJpbmdCdWlsZGVyIHNiID0gbmV3IFN0cmluZ0J1aWxkZXIobW9kaWZpZXIKKwkJCQkJLmdldFZhbHVlKCkudG9TdHJpbmcoKSk7CisKKwkJCWxhYmVsLnNldFRleHQoc2IudG9TdHJpbmcoKSk7CisJCQlyZXR1cm4gcmV0VmFsdWU7CisJCX0gLy8gY3JlYXRlRWRpdENvbXBvc2l0ZQorCisJfSAvLyBTVEVNVGltZUZlYXR1cmVNb2RpZmllckVkaXRDb21wb3NpdGVBZGFwdGVyCisKK30gLy8gU2luZ2xlVmFsdWVGZWF0dXJlTW9kaWZpZXJFZGl0Q29tcG9zaXRlQWRhcHRlcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL2FkYXB0ZXJzL2lkZW50aWZpYWJsZS9EZWxlZ2F0aW5nV3JhcHBlckl0ZW1Qcm92aWRlcklkZW50aWZpYWJsZUFkYXB0ZXJGYWN0b3J5LmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvYWRhcHRlcnMvaWRlbnRpZmlhYmxlL0RlbGVnYXRpbmdXcmFwcGVySXRlbVByb3ZpZGVySWRlbnRpZmlhYmxlQWRhcHRlckZhY3RvcnkuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45OWU3ODNmCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL2FkYXB0ZXJzL2lkZW50aWZpYWJsZS9EZWxlZ2F0aW5nV3JhcHBlckl0ZW1Qcm92aWRlcklkZW50aWZpYWJsZUFkYXB0ZXJGYWN0b3J5LmphdmEKQEAgLTAsMCArMSw1NSBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnVpLmFkYXB0ZXJzLmlkZW50aWZpYWJsZTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGxhdGZvcm07CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuRGVsZWdhdGluZ1dyYXBwZXJJdGVtUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5JZGVudGlmaWFibGU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5qb2JzLmFkYXB0ZXJzLmlkZW50aWZpYWJsZS5JZGVudGlmaWFibGVBZGFwdGVyRmFjdG9yeTsKKworLyoqCisgKiBUaGlzIGNsYXNzIGlzIGFuCisgKiB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5qb2JzLmFkYXB0ZXJzLmV4ZWN1dGFibGUuRXhlY3V0YWJsZUFkYXB0ZXJGYWN0b3J5fQorICogdGhhdCBhZGFwdHMge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0udWkudmlld3MuSWRlbnRpZmlhYmxlRGVsZWdhdGV9cyB0bworICoge0BsaW5rIElkZW50aWZpYWJsZX1zLgorICovCitwdWJsaWMgY2xhc3MgRGVsZWdhdGluZ1dyYXBwZXJJdGVtUHJvdmlkZXJJZGVudGlmaWFibGVBZGFwdGVyRmFjdG9yeSBleHRlbmRzCisJCUlkZW50aWZpYWJsZUFkYXB0ZXJGYWN0b3J5IHsKKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklBZGFwdGVyRmFjdG9yeSNnZXRBZGFwdGVyKGphdmEubGFuZy5PYmplY3QsCisJICogICAgICBqYXZhLmxhbmcuQ2xhc3MpCisJICovCisJcHVibGljIE9iamVjdCBnZXRBZGFwdGVyKE9iamVjdCBhZGFwdGFibGVPYmplY3QsIENsYXNzIGFkYXB0ZXJUeXBlKSB7CisJCUlkZW50aWZpYWJsZSByZXRWYWx1ZSA9IG51bGw7CisKKwkJLy8gSXQgaXQgd2hhdCB3ZSdyZSBsb29raW5nIGZvcj8KKwkJaWYgKGFkYXB0YWJsZU9iamVjdCBpbnN0YW5jZW9mIERlbGVnYXRpbmdXcmFwcGVySXRlbVByb3ZpZGVyCisJCQkJJiYgYWRhcHRlclR5cGUuZXF1YWxzKElkZW50aWZpYWJsZS5jbGFzcykpIHsKKwkJCS8vIFllcworCQkJZmluYWwgRGVsZWdhdGluZ1dyYXBwZXJJdGVtUHJvdmlkZXIgZHdpcCA9IChEZWxlZ2F0aW5nV3JhcHBlckl0ZW1Qcm92aWRlcikgYWRhcHRhYmxlT2JqZWN0OworCQkJLy8gSXMgdGhpcyBhbiBJZGVudGlmaWFibGU/CisJCQlpZiAoZHdpcC5nZXRWYWx1ZSgpIGluc3RhbmNlb2YgSWRlbnRpZmlhYmxlKSB7CisJCQkJLy8gWWVzCisJCQkJcmV0VmFsdWUgPSAoSWRlbnRpZmlhYmxlKSBkd2lwLmdldFZhbHVlKCk7CisJCQl9IC8vIGlmIElkZW50aWZpYWJsZQorCQkJZWxzZSB7CisJCQkJLy8gTm8KKwkJCQkvLyBLZWVwIGFkYXB0aW5nLi4uCisJCQkJcmV0VmFsdWUgPSAoSWRlbnRpZmlhYmxlKSBQbGF0Zm9ybS5nZXRBZGFwdGVyTWFuYWdlcigpCisJCQkJCQkuZ2V0QWRhcHRlcihkd2lwLmdldFZhbHVlKCksIElkZW50aWZpYWJsZS5jbGFzcyk7CisJCQl9CisJCX0gLy8gaWYKKwkJcmV0dXJuIHJldFZhbHVlOworCX0gLy8gZ2V0QWRhcHRlcgorCit9IC8vIERlbGVnYXRpbmdXcmFwcGVySXRlbVByb3ZpZGVySWRlbnRpZmlhYmxlQWRhcHRlckZhY3RvcnkKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9hZGFwdGVycy9pZGVudGlmaWFibGUvSWRlbnRpZmlhYmxlRGVsZWdhdGVJZGVudGlmaWFibGVBZGFwdGVyRmFjdG9yeS5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL2FkYXB0ZXJzL2lkZW50aWZpYWJsZS9JZGVudGlmaWFibGVEZWxlZ2F0ZUlkZW50aWZpYWJsZUFkYXB0ZXJGYWN0b3J5LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTQxZjFkYwotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9hZGFwdGVycy9pZGVudGlmaWFibGUvSWRlbnRpZmlhYmxlRGVsZWdhdGVJZGVudGlmaWFibGVBZGFwdGVyRmFjdG9yeS5qYXZhCkBAIC0wLDAgKzEsNDEgQEAKKy8vIElkZW50aWZpYWJsZURlbGVnYXRlTW9kaWZpYWJsZUFkYXB0ZXJGYWN0b3J5LmphdmEKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS51aS5hZGFwdGVycy5pZGVudGlmaWFibGU7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5JZGVudGlmaWFibGU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5qb2JzLmFkYXB0ZXJzLmlkZW50aWZpYWJsZS5JZGVudGlmaWFibGVBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnVpLnZpZXdzLklkZW50aWZpYWJsZURlbGVnYXRlOworCisvKioKKyAqIFRoaXMgY2xhc3MgaXMgYW4ge0BsaW5rIElkZW50aWZpYWJsZUFkYXB0ZXJGYWN0b3J5fSB0aGF0IGFkYXB0cworICoge0BsaW5rIElkZW50aWZpYWJsZURlbGVnYXRlfXMgdG8ge0BsaW5rIElkZW50aWZpYWJsZX1zLgorICovCitwdWJsaWMgY2xhc3MgSWRlbnRpZmlhYmxlRGVsZWdhdGVJZGVudGlmaWFibGVBZGFwdGVyRmFjdG9yeSBleHRlbmRzCisJCUlkZW50aWZpYWJsZUFkYXB0ZXJGYWN0b3J5IHsKKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklBZGFwdGVyRmFjdG9yeSNnZXRBZGFwdGVyKGphdmEubGFuZy5PYmplY3QsCisJICogICAgICBqYXZhLmxhbmcuQ2xhc3MpCisJICovCisJcHVibGljIE9iamVjdCBnZXRBZGFwdGVyKE9iamVjdCBhZGFwdGFibGVPYmplY3QsIENsYXNzIGFkYXB0ZXJUeXBlKSB7CisJCUlkZW50aWZpYWJsZSByZXRWYWx1ZSA9IG51bGw7CisJCS8vIEl0IGl0IHdoYXQgd2UncmUgbG9va2luZyBmb3I/CisJCWlmIChhZGFwdGFibGVPYmplY3QgaW5zdGFuY2VvZiBJZGVudGlmaWFibGVEZWxlZ2F0ZQorCQkJCSYmIGFkYXB0ZXJUeXBlLmVxdWFscyhJZGVudGlmaWFibGUuY2xhc3MpKSB7CisJCQkvLyBZZXMKKwkJCXJldFZhbHVlID0gKChJZGVudGlmaWFibGVEZWxlZ2F0ZSkgYWRhcHRhYmxlT2JqZWN0KS5nZXRJZGVudGlmaWFibGUoKTsKKwkJfSAvLyBpZgorCQlyZXR1cm4gcmV0VmFsdWU7CisJfSAvLyBnZXRBZGFwdGVyCisKK30gLy8gSWRlbnRpZmlhYmxlRGVsZWdhdGVNb2RpZmlhYmxlQWRhcHRlckZhY3RvcnkKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9hZGFwdGVycy9tb2RpZmlhYmxlL0RlbGVnYXRpbmdXcmFwcGVySXRlbVByb3ZpZGVyTW9kaWZpYWJsZUFkYXB0ZXJGYWN0b3J5LmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvYWRhcHRlcnMvbW9kaWZpYWJsZS9EZWxlZ2F0aW5nV3JhcHBlckl0ZW1Qcm92aWRlck1vZGlmaWFibGVBZGFwdGVyRmFjdG9yeS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcxNWU2NGMKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvYWRhcHRlcnMvbW9kaWZpYWJsZS9EZWxlZ2F0aW5nV3JhcHBlckl0ZW1Qcm92aWRlck1vZGlmaWFibGVBZGFwdGVyRmFjdG9yeS5qYXZhCkBAIC0wLDAgKzEsNTggQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS51aS5hZGFwdGVycy5tb2RpZmlhYmxlOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QbGF0Zm9ybTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5EZWxlZ2F0aW5nV3JhcHBlckl0ZW1Qcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLklkZW50aWZpYWJsZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuTW9kaWZpYWJsZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmpvYnMuYWRhcHRlcnMuaWRlbnRpZmlhYmxlLklkZW50aWZpYWJsZUFkYXB0ZXJGYWN0b3J5OworCisvKioKKyAqIFRoaXMgY2xhc3MgaXMgYW4ge0BsaW5rIElkZW50aWZpYWJsZUFkYXB0ZXJGYWN0b3J5fSB0aGF0IGFkYXB0cworICoge0BsaW5rIERlbGVnYXRpbmdXcmFwcGVySXRlbVByb3ZpZGVyfXMgdG8ge0BsaW5rIE1vZGlmaWFibGV9cy4KKyAqLworcHVibGljIGNsYXNzIERlbGVnYXRpbmdXcmFwcGVySXRlbVByb3ZpZGVyTW9kaWZpYWJsZUFkYXB0ZXJGYWN0b3J5IGV4dGVuZHMKKwkJSWRlbnRpZmlhYmxlQWRhcHRlckZhY3RvcnkgeworCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSUFkYXB0ZXJGYWN0b3J5I2dldEFkYXB0ZXIoamF2YS5sYW5nLk9iamVjdCwKKwkgKiAgICAgIGphdmEubGFuZy5DbGFzcykKKwkgKi8KKwlwdWJsaWMgT2JqZWN0IGdldEFkYXB0ZXIoT2JqZWN0IGFkYXB0YWJsZU9iamVjdCwgQ2xhc3MgYWRhcHRlclR5cGUpIHsKKwkJTW9kaWZpYWJsZSByZXRWYWx1ZSA9IG51bGw7CisKKwkJLy8gSXQgaXQgd2hhdCB3ZSdyZSBsb29raW5nIGZvcj8KKwkJaWYgKGFkYXB0YWJsZU9iamVjdCBpbnN0YW5jZW9mIERlbGVnYXRpbmdXcmFwcGVySXRlbVByb3ZpZGVyCisJCQkJJiYgYWRhcHRlclR5cGUuZXF1YWxzKE1vZGlmaWFibGUuY2xhc3MpKSB7CisJCQkvLyBZZXMKKwkJCWZpbmFsIERlbGVnYXRpbmdXcmFwcGVySXRlbVByb3ZpZGVyIGR3aXAgPSAoRGVsZWdhdGluZ1dyYXBwZXJJdGVtUHJvdmlkZXIpIGFkYXB0YWJsZU9iamVjdDsKKwkJCS8vIElzIHRoaXMgYW4gSWRlbnRpZmlhYmxlPworCQkJaWYgKGR3aXAuZ2V0VmFsdWUoKSBpbnN0YW5jZW9mIElkZW50aWZpYWJsZSkgeworCQkJCS8vIFllcworCQkJCS8vIC4uLmFuZCBpcyBpdCBNb2RpZmlhYmxlPworCQkJCWlmIChkd2lwLmdldFZhbHVlKCkgaW5zdGFuY2VvZiBNb2RpZmlhYmxlKSB7CisJCQkJCS8vIFllcworCQkJCQlyZXRWYWx1ZSA9IChNb2RpZmlhYmxlKSBkd2lwLmdldFZhbHVlKCk7CisJCQkJfQorCQkJCS8vIGVsc2UgTk8KKwkJCX0gLy8gaWYgSWRlbnRpZmlhYmxlIAorCQkJZWxzZSB7CisJCQkJLy8gTm8KKwkJCQkvLyBLZWVwIGFkYXB0aW5nLi4uCisJCQkJcmV0VmFsdWUgPSAoTW9kaWZpYWJsZSkgUGxhdGZvcm0uZ2V0QWRhcHRlck1hbmFnZXIoKQorCQkJCQkJLmdldEFkYXB0ZXIoZHdpcC5nZXRWYWx1ZSgpLCBNb2RpZmlhYmxlLmNsYXNzKTsKKwkJCX0KKwkJfSAvLyBpZgorCQlyZXR1cm4gcmV0VmFsdWU7CisJfSAvLyBnZXRBZGFwdGVyCit9IC8vIERlbGVnYXRpbmdXcmFwcGVySXRlbVByb3ZpZGVyTW9kaWZpYWJsZUFkYXB0ZXJGYWN0b3J5CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvYWRhcHRlcnMvbW9kaWZpYWJsZS9JZGVudGlmaWFibGVEZWxlZ2F0ZU1vZGlmaWFibGVBZGFwdGVyRmFjdG9yeS5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL2FkYXB0ZXJzL21vZGlmaWFibGUvSWRlbnRpZmlhYmxlRGVsZWdhdGVNb2RpZmlhYmxlQWRhcHRlckZhY3RvcnkuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YTFmMTEzCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL2FkYXB0ZXJzL21vZGlmaWFibGUvSWRlbnRpZmlhYmxlRGVsZWdhdGVNb2RpZmlhYmxlQWRhcHRlckZhY3RvcnkuamF2YQpAQCAtMCwwICsxLDQ0IEBACisvLyBJZGVudGlmaWFibGVEZWxlZ2F0ZU1vZGlmaWFibGVBZGFwdGVyRmFjdG9yeS5qYXZhCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0udWkuYWRhcHRlcnMubW9kaWZpYWJsZTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLklkZW50aWZpYWJsZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuTW9kaWZpYWJsZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmpvYnMuYWRhcHRlcnMuaWRlbnRpZmlhYmxlLklkZW50aWZpYWJsZUFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udWkudmlld3MuSWRlbnRpZmlhYmxlRGVsZWdhdGU7CisKKy8qKgorICogVGhpcyBjbGFzcyBpcyBhbiB7QGxpbmsgSWRlbnRpZmlhYmxlQWRhcHRlckZhY3Rvcnl9IHRoYXQgYWRhcHRzCisgKiB7QGxpbmsgSWRlbnRpZmlhYmxlRGVsZWdhdGV9cyB0byB7QGxpbmsgSWRlbnRpZmlhYmxlfXMuCisgKi8KK3B1YmxpYyBjbGFzcyBJZGVudGlmaWFibGVEZWxlZ2F0ZU1vZGlmaWFibGVBZGFwdGVyRmFjdG9yeSBleHRlbmRzCisJCUlkZW50aWZpYWJsZUFkYXB0ZXJGYWN0b3J5IHsKKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklBZGFwdGVyRmFjdG9yeSNnZXRBZGFwdGVyKGphdmEubGFuZy5PYmplY3QsCisJICogICAgICBqYXZhLmxhbmcuQ2xhc3MpCisJICovCisJcHVibGljIE9iamVjdCBnZXRBZGFwdGVyKE9iamVjdCBhZGFwdGFibGVPYmplY3QsIENsYXNzIGFkYXB0ZXJUeXBlKSB7CisJCUlkZW50aWZpYWJsZSByZXRWYWx1ZSA9IG51bGw7CisJCS8vIEl0IGl0IHdoYXQgd2UncmUgbG9va2luZyBmb3I/CisJCWlmIChhZGFwdGFibGVPYmplY3QgaW5zdGFuY2VvZiBJZGVudGlmaWFibGVEZWxlZ2F0ZQorCQkJCSYmIGFkYXB0ZXJUeXBlLmVxdWFscyhNb2RpZmlhYmxlLmNsYXNzKSkgeworCQkJLy8gWWVzCisJCQlmaW5hbCBJZGVudGlmaWFibGUgdGVtcCA9ICgoSWRlbnRpZmlhYmxlRGVsZWdhdGUpIGFkYXB0YWJsZU9iamVjdCkuZ2V0SWRlbnRpZmlhYmxlKCk7CisJCQkKKwkJCXJldFZhbHVlID0gdGVtcCAhPSBudWxsICYmIHRlbXAgaW5zdGFuY2VvZiBNb2RpZmlhYmxlID8gdGVtcCA6IG51bGw7CisJCX0gLy8gaWYKKwkJcmV0dXJuIHJldFZhbHVlOworCX0gLy8gZ2V0QWRhcHRlcgorCit9IC8vIElkZW50aWZpYWJsZURlbGVnYXRlTW9kaWZpYWJsZUFkYXB0ZXJGYWN0b3J5CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvYWRhcHRlcnMvbmV3bW9kaWZpZXJwYWdlL0NvbW1vbk5ld01vZGlmaWVyUGFnZUFkYXB0ZXJGYWN0b3J5LmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvYWRhcHRlcnMvbmV3bW9kaWZpZXJwYWdlL0NvbW1vbk5ld01vZGlmaWVyUGFnZUFkYXB0ZXJGYWN0b3J5LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTA3Yjg1MgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9hZGFwdGVycy9uZXdtb2RpZmllcnBhZ2UvQ29tbW9uTmV3TW9kaWZpZXJQYWdlQWRhcHRlckZhY3RvcnkuamF2YQpAQCAtMCwwICsxLDExMyBAQAorLy8gRGlzZWFzZU5ld01vZGlmaWVyUGFnZUFkYXB0ZXJGYWN0b3J5LmphdmEKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS51aS5hZGFwdGVycy5uZXdtb2RpZmllcnBhZ2U7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuQWRhcHRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FU3RydWN0dXJhbEZlYXR1cmU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5Db21tb25QYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24udXRpbC5Db21tb25BZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnVpLndpemFyZHMuTmV3TW9kaWZpZXJQYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklTdGFydHVwOworCisvKioKKyAqIFRoaXMgY2xhc3MgaXMgYW4ge0BsaW5rIE5ld01vZGlmaWVyUGFnZUFkYXB0ZXJGYWN0b3J5fSB0aGF0IGFkYXB0cworICoge0BsaW5rIERpc2Vhc2VNb2RlbH1zIHRvIHtAbGluayBOZXdNb2RpZmllclBhZ2V9cy4KKyAqLworcHVibGljIGNsYXNzIENvbW1vbk5ld01vZGlmaWVyUGFnZUFkYXB0ZXJGYWN0b3J5IGV4dGVuZHMKKwkJQ29tbW9uQWRhcHRlckZhY3RvcnkgaW1wbGVtZW50cyBOZXdNb2RpZmllclBhZ2VBZGFwdGVyRmFjdG9yeSwgSVN0YXJ0dXAgeworCisJLyoqCisJICogRGVmYXVsdCBjb25zdHJ1Y3Rvci4KKwkgKi8KKwlwdWJsaWMgQ29tbW9uTmV3TW9kaWZpZXJQYWdlQWRhcHRlckZhY3RvcnkoKSB7CisJCXN1cGVyKCk7CisJCU5ld01vZGlmaWVyUGFnZUFkYXB0ZXJGYWN0b3J5LklOU1RBTkNFLmFkZEFkYXB0ZXJGYWN0b3J5KHRoaXMpOworCX0KKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2UudWkuSVN0YXJ0dXAjZWFybHlTdGFydHVwKCkKKwkgKi8KKwlwdWJsaWMgdm9pZCBlYXJseVN0YXJ0dXAoKSB7CisJCS8vIE5vdGhpbmcgdG8gZG8gdGhlIGNvbnN0cnVjdG9yIHdpbGwgZG8gZXZlcnl0aGluZy4JCQorCX0KKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNjZW5hcmlvLnV0aWwuU2NlbmFyaW9BZGFwdGVyRmFjdG9yeSNpc0ZhY3RvcnlGb3JUeXBlKGphdmEubGFuZy5PYmplY3QpCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIGJvb2xlYW4gaXNGYWN0b3J5Rm9yVHlwZShmaW5hbCBPYmplY3QgdHlwZSkgeworCQlyZXR1cm4gdHlwZSA9PSBOZXdNb2RpZmllclBhZ2VBZGFwdGVyLmNsYXNzIHx8IHN1cGVyLmlzRmFjdG9yeUZvclR5cGUodHlwZSk7CisJfQorCisKKwlAT3ZlcnJpZGUKKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVEb3VibGVWYWx1ZUFkYXB0ZXIoKSB7CisJCXJldHVybiBuZXcgQ29tbW9uTmV3TW9kaWZpZXJQYWdlQWRhcHRlcigpOworCX0KKworCUBPdmVycmlkZQorCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZVN0cmluZ1ZhbHVlQWRhcHRlcigpIHsKKwkJcmV0dXJuIG5ldyBDb21tb25OZXdNb2RpZmllclBhZ2VBZGFwdGVyKCk7CisJfQorCQorLyoqCisJICogVGhpcyBjbGFzcyBhZGFwdHMge0BsaW5rIERpc2Vhc2VNb2RlbH1zIHRvIHtAbGluayBOZXdNb2RpZmllclBhZ2V9cworCSAqLworCXByaXZhdGUgc3RhdGljIGNsYXNzIENvbW1vbk5ld01vZGlmaWVyUGFnZUFkYXB0ZXIgZXh0ZW5kcworCQkJTmV3TW9kaWZpZXJQYWdlQWRhcHRlciB7CisKKwkJLyoqCisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS51aS5hZGFwdGVycy5uZXdtb2RpZmllcnBhZ2UuTmV3TW9kaWZpZXJQYWdlQWRhcHRlciNjcmVhdGVOZXdNb2RpZmllclBhZ2UoKQorCQkgKi8KKwkJQE92ZXJyaWRlCisJCXB1YmxpYyBOZXdNb2RpZmllclBhZ2UgY3JlYXRlTmV3TW9kaWZpZXJQYWdlKCkgeworCQkJcmV0dXJuIG5ldyBOZXdNb2RpZmllclBhZ2UoKEVPYmplY3QpIGdldFRhcmdldCgpKSB7CisJCQkJQE92ZXJyaWRlCisJCQkJcHJvdGVjdGVkIGJvb2xlYW4gaXNVc2VyU3BlY2lmaWVkUHJvcGVydHkoCisJCQkJCQlmaW5hbCBFU3RydWN0dXJhbEZlYXR1cmUgZmVhdHVyZSkgeworCQkJCQlib29sZWFuIHJldFZhbHVlID0gZmFsc2U7CisJCQkJCWZpbmFsIEVDbGFzcyBjb250YWluaW5nQ2xhc3MgPSBmZWF0dXJlLmdldEVDb250YWluaW5nQ2xhc3MoKTsKKwkJCQkJLy8gSXMgaXQgYSBkaXNlYXNlIG1vZGVsIHByb3BlcnR5PworCQkJCQlpZiAoY29udGFpbmluZ0NsYXNzLmVxdWFscyhDb21tb25QYWNrYWdlLmVJTlNUQU5DRS5nZXREb3VibGVWYWx1ZSgpKQorCQkJCQkJCXx8IGNvbnRhaW5pbmdDbGFzcy5nZXRFQWxsU3VwZXJUeXBlcygpLmNvbnRhaW5zKAorCQkJCQkJCQkJQ29tbW9uUGFja2FnZS5lSU5TVEFOQ0UuZ2V0RG91YmxlVmFsdWUoKSkgfHwgCisJCQkJCQkJCQljb250YWluaW5nQ2xhc3MuZXF1YWxzKENvbW1vblBhY2thZ2UuZUlOU1RBTkNFLmdldFN0cmluZ1ZhbHVlKCkpCisJCQkJCQkJCQl8fCBjb250YWluaW5nQ2xhc3MuZ2V0RUFsbFN1cGVyVHlwZXMoKS5jb250YWlucygKKwkJCQkJCQkJCQkJQ29tbW9uUGFja2FnZS5lSU5TVEFOQ0UuZ2V0U3RyaW5nVmFsdWUoKSkpIHsKKwkJCQkJCQkJCQorCQkJCQkJLy8gWWVzCisJCQkJCQlyZXRWYWx1ZSA9IHRydWU7CisJCQkJCX0gLy8gaWYgYSBkaXNlYXNlIG1vZGVsIHByb3BlcnR5CisJCQkJCXJldHVybiByZXRWYWx1ZTsKKwkJCQl9IC8vIGlzVXNlclNwZWNpZmllZFByb3BlcnR5CisKKwkJCQlAT3ZlcnJpZGUKKwkJCQlwcm90ZWN0ZWQgU3RyaW5nIGdldEJvdHRvbVRleHQoKSB7CisJCQkJCXJldHVybiAiIjsKKwkJCQl9CisKKwkJCQlAT3ZlcnJpZGUKKwkJCQlwcm90ZWN0ZWQgYm9vbGVhbiBpc01vZGlmaWFibGVQcm9wZXJ0eSgKKwkJCQkJCWZpbmFsIEVTdHJ1Y3R1cmFsRmVhdHVyZSBmZWF0dXJlKSB7CisJCQkJCWJvb2xlYW4gcmV0VmFsdWUgPSBzdXBlci5pc01vZGlmaWFibGVQcm9wZXJ0eShmZWF0dXJlKTsKKworCQkJCQlyZXR1cm4gcmV0VmFsdWU7CisJCQkJfSAvLyBpc01vZGlmaWFibGVQcm9wZXJ0eQorCQkJfTsKKwkJfSAvLyBjcmVhdGVOZXdNb2RpZmllclBhZ2UKKworCX0gLy8gCisKK30gLy8gCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvYWRhcHRlcnMvbmV3bW9kaWZpZXJwYWdlL0VkZ2VzTmV3TW9kaWZpZXJQYWdlQWRhcHRlckZhY3RvcnkuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9hZGFwdGVycy9uZXdtb2RpZmllcnBhZ2UvRWRnZXNOZXdNb2RpZmllclBhZ2VBZGFwdGVyRmFjdG9yeS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc2ODM2NGYKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvYWRhcHRlcnMvbmV3bW9kaWZpZXJwYWdlL0VkZ2VzTmV3TW9kaWZpZXJQYWdlQWRhcHRlckZhY3RvcnkuamF2YQpAQCAtMCwwICsxLDg0IEBACisvLyBMYWJlbHNOZXdNb2RpZmllclBhZ2VBZGFwdGVyRmFjdG9yeS5qYXZhCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0udWkuYWRhcHRlcnMubmV3bW9kaWZpZXJwYWdlOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDExIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LkFkYXB0ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVTdHJ1Y3R1cmFsRmVhdHVyZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLklkZW50aWZpYWJsZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmVkZ2VzLkVkZ2VzUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmVkZ2VzLnV0aWwuRWRnZXNBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnVpLmFkYXB0ZXJzLm5ld21vZGlmaWVycGFnZS5HcmFwaE5ld01vZGlmaWVyUGFnZUFkYXB0ZXJGYWN0b3J5LlN0YXRpY0xhYmVsTmV3TW9kaWZpZXJQYWdlQWRhcHRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnVpLndpemFyZHMuTmV3TW9kaWZpZXJQYWdlOworCisvKioKKyAqIFRoaXMgY2xhc3MgaXMgYW4ge0BsaW5rIE5ld01vZGlmaWVyUGFnZUFkYXB0ZXJGYWN0b3J5fSB0aGF0IGFkYXB0cyBtZW1iZXJzIG9mCisgKiB0aGUgTGFiZWwgbW9kZWwgdG8ge0BsaW5rIE5ld01vZGlmaWVyUGFnZX1zLgorICovCitwdWJsaWMgY2xhc3MgRWRnZXNOZXdNb2RpZmllclBhZ2VBZGFwdGVyRmFjdG9yeSBleHRlbmRzIEVkZ2VzQWRhcHRlckZhY3RvcnkKKwkJaW1wbGVtZW50cyBOZXdNb2RpZmllclBhZ2VBZGFwdGVyRmFjdG9yeSB7CisKKwkvKioKKwkgKiBEZWZhdWx0IGNvbnN0cnVjdG9yCisJICovCisJcHVibGljIEVkZ2VzTmV3TW9kaWZpZXJQYWdlQWRhcHRlckZhY3RvcnkoKSB7CisJCXN1cGVyKCk7CisJCU5ld01vZGlmaWVyUGFnZUFkYXB0ZXJGYWN0b3J5LklOU1RBTkNFLmFkZEFkYXB0ZXJGYWN0b3J5KHRoaXMpOworCX0KKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLnV0aWwuR3JhcGhBZGFwdGVyRmFjdG9yeSNpc0ZhY3RvcnlGb3JUeXBlKGphdmEubGFuZy5PYmplY3QpCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIGJvb2xlYW4gaXNGYWN0b3J5Rm9yVHlwZShPYmplY3QgdHlwZSkgeworCQlyZXR1cm4gdHlwZSA9PSBOZXdNb2RpZmllclBhZ2VBZGFwdGVyLmNsYXNzCisJCQkJfHwgc3VwZXIuaXNGYWN0b3J5Rm9yVHlwZSh0eXBlKTsKKwl9CisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLnV0aWwuTGFiZWxzQWRhcHRlckZhY3RvcnkjY3JlYXRlUGh5c2ljYWxSZWxhdGlvbnNoaXBMYWJlbEFkYXB0ZXIoKQorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZU1pZ3JhdGlvbkVkZ2VMYWJlbEFkYXB0ZXIoKSB7CisJCXJldHVybiBuZXcgTWlncmF0aW9uRWRnZUxhYmVsTmV3TW9kaWZpZXJQYWdlQWRhcHRlcigpOworCX0KKworCS8qKgorCSAqIFRoaXMgY2xhc3MgaXMgZXh0ZW5kZWQgYnkgY2xhc3NlcyB0aGF0IGFkYXB0CisJICoge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLlBoeXNpY2FsUmVsYXRpb25zaGlwTGFiZWx9cyB0byB7QGxpbmsgTmV3TW9kaWZpZXJQYWdlfXMuCisJICovCisJcHVibGljIGNsYXNzIE1pZ3JhdGlvbkVkZ2VMYWJlbE5ld01vZGlmaWVyUGFnZUFkYXB0ZXIgZXh0ZW5kcworCQkJU3RhdGljTGFiZWxOZXdNb2RpZmllclBhZ2VBZGFwdGVyIHsKKworCQkvKioKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnVpLmFkYXB0ZXJzLm5ld21vZGlmaWVycGFnZS5HcmFwaE5ld01vZGlmaWVyUGFnZUFkYXB0ZXJGYWN0b3J5LlN0YXRpY0xhYmVsTmV3TW9kaWZpZXJQYWdlQWRhcHRlciNjcmVhdGVOZXdNb2RpZmllclBhZ2UoKQorCQkgKi8KKwkJQE92ZXJyaWRlCisJCXB1YmxpYyBOZXdNb2RpZmllclBhZ2UgY3JlYXRlTmV3TW9kaWZpZXJQYWdlKCkgeworCQkJcmV0dXJuIG5ldyBHcmFwaE5ld01vZGlmaWVyUGFnZUFkYXB0ZXJGYWN0b3J5LlN0YXRpY0xhYmVsTmV3TW9kaWZpZXJQYWdlKAorCQkJCQkoSWRlbnRpZmlhYmxlKSBnZXRUYXJnZXQoKSkgeworCQkJCUBPdmVycmlkZQorCQkJCXByb3RlY3RlZCBib29sZWFuIGlzVXNlclNwZWNpZmllZFByb3BlcnR5KAorCQkJCQkJRVN0cnVjdHVyYWxGZWF0dXJlIGZlYXR1cmUpIHsKKwkJCQkJYm9vbGVhbiByZXRWYWx1ZSA9IHN1cGVyLmlzVXNlclNwZWNpZmllZFByb3BlcnR5KGZlYXR1cmUpOworCisJCQkJCXJldFZhbHVlID0gcmV0VmFsdWUKKwkJCQkJCQkmJiAoZmVhdHVyZQorCQkJCQkJCQkJLmVxdWFscyhFZGdlc1BhY2thZ2UuTGl0ZXJhbHMuTUlHUkFUSU9OX0VER0VfTEFCRUxfVkFMVUVfX01JR1JBVElPTl9SQVRFKSk7CisKKwkJCQkJcmV0dXJuIHJldFZhbHVlOworCQkJCX0gLy8gaXNVc2VyU3BlY2lmaWVkUHJvcGVydHkKKwkJCX07CisJCX0gLy8gY3JlYXRlTmV3TW9kaWZpZXJQYWdlCisJCQorCX0gLy8gTWlncmF0aW9uRWRnZUxhYmVsTmV3TW9kaWZpZXJQYWdlQWRhcHRlcgorfSAvLyBFZGdlc05ld01vZGlmaWVyUGFnZUFkYXB0ZXJGYWN0b3J5CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvYWRhcHRlcnMvbmV3bW9kaWZpZXJwYWdlL0dyYXBoTmV3TW9kaWZpZXJQYWdlQWRhcHRlckZhY3RvcnkuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9hZGFwdGVycy9uZXdtb2RpZmllcnBhZ2UvR3JhcGhOZXdNb2RpZmllclBhZ2VBZGFwdGVyRmFjdG9yeS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdmNTYzOGQKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvYWRhcHRlcnMvbmV3bW9kaWZpZXJwYWdlL0dyYXBoTmV3TW9kaWZpZXJQYWdlQWRhcHRlckZhY3RvcnkuamF2YQpAQCAtMCwwICsxLDE0NCBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnVpLmFkYXB0ZXJzLm5ld21vZGlmaWVycGFnZTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5BZGFwdGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FU3RydWN0dXJhbEZlYXR1cmU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5JZGVudGlmaWFibGU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkVkZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkVkZ2VMYWJlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguR3JhcGhQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC51dGlsLkdyYXBoQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS51aS5BY3RpdmF0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS51aS53aXphcmRzLk5ld01vZGlmaWVyUGFnZTsKKworLyoqCisgKiBUaGlzIGNsYXNzIGlzIGFuIHtAbGluayBOZXdNb2RpZmllclBhZ2VBZGFwdGVyRmFjdG9yeX0gdGhhdCBhZGFwdHMgbWVtYmVycyBvZgorICogdGhlIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguR3JhcGh9IG1vZGVsIHRvIHtAbGluayBOZXdNb2RpZmllclBhZ2V9cy4KKyAqLworcHVibGljIGNsYXNzIEdyYXBoTmV3TW9kaWZpZXJQYWdlQWRhcHRlckZhY3RvcnkgZXh0ZW5kcyBHcmFwaEFkYXB0ZXJGYWN0b3J5CisJCWltcGxlbWVudHMgTmV3TW9kaWZpZXJQYWdlQWRhcHRlckZhY3RvcnkgeworCisJLyoqCisJICogRGVmYXVsdCBjb25zdHJ1Y3RvcgorCSAqLworCXB1YmxpYyBHcmFwaE5ld01vZGlmaWVyUGFnZUFkYXB0ZXJGYWN0b3J5KCkgeworCQlzdXBlcigpOworCQlOZXdNb2RpZmllclBhZ2VBZGFwdGVyRmFjdG9yeS5JTlNUQU5DRS5hZGRBZGFwdGVyRmFjdG9yeSh0aGlzKTsKKwl9CisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC51dGlsLkdyYXBoQWRhcHRlckZhY3RvcnkjaXNGYWN0b3J5Rm9yVHlwZShqYXZhLmxhbmcuT2JqZWN0KQorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBib29sZWFuIGlzRmFjdG9yeUZvclR5cGUoT2JqZWN0IHR5cGUpIHsKKwkJcmV0dXJuIHR5cGUgPT0gTmV3TW9kaWZpZXJQYWdlQWRhcHRlci5jbGFzcworCQkJCXx8IHN1cGVyLmlzRmFjdG9yeUZvclR5cGUodHlwZSk7CisJfQorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy51dGlsLkxhYmVsc0FkYXB0ZXJGYWN0b3J5I2NyZWF0ZVN0YXRpY0xhYmVsQWRhcHRlcigpCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlU3RhdGljTGFiZWxBZGFwdGVyKCkgeworCQlyZXR1cm4gbmV3IFN0YXRpY0xhYmVsTmV3TW9kaWZpZXJQYWdlQWRhcHRlcigpOworCX0KKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLnV0aWwuR3JhcGhBZGFwdGVyRmFjdG9yeSNjcmVhdGVFZGdlQWRhcHRlcigpCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlRWRnZUFkYXB0ZXIoKSB7CisJCXJldHVybiBuZXcgRWRnZU5ld01vZGlmaWVyUGFnZUFkYXB0ZXIoKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGNsYXNzIGlzIGV4dGVuZGVkIGJ5IGNsYXNzZXMgdGhhdCBhZGFwdCB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLlN0YXRpY0xhYmVsfXMgdG8KKwkgKiB7QGxpbmsgTmV3TW9kaWZpZXJQYWdlfXMuCisJICovCisJc3RhdGljIHB1YmxpYyBjbGFzcyBTdGF0aWNMYWJlbE5ld01vZGlmaWVyUGFnZUFkYXB0ZXIgZXh0ZW5kcworCQkJTmV3TW9kaWZpZXJQYWdlQWRhcHRlciB7CisKKwkJLyoqCisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS51aS5hZGFwdGVycy5uZXdtb2RpZmllcnBhZ2UuTmV3TW9kaWZpZXJQYWdlQWRhcHRlciNjcmVhdGVOZXdNb2RpZmllclBhZ2UoKQorCQkgKi8KKwkJQE92ZXJyaWRlCisJCXB1YmxpYyBOZXdNb2RpZmllclBhZ2UgY3JlYXRlTmV3TW9kaWZpZXJQYWdlKCkgeworCQkJcmV0dXJuIG5ldyBTdGF0aWNMYWJlbE5ld01vZGlmaWVyUGFnZSgoSWRlbnRpZmlhYmxlKSBnZXRUYXJnZXQoKSk7CisJCX0gLy8gY3JlYXRlTmV3TW9kaWZpZXJQYWdlCisKKwl9IC8vIFN0YXRpY0xhYmVsTmV3TW9kaWZpZXJQYWdlQWRhcHRlcgorCisJLyoqCisJICoge0BsaW5rIE5ld01vZGlmaWVyUGFnZX0gZm9yIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguU3RhdGljTGFiZWx9cy4KKwkgKi8KKwlzdGF0aWMgcHVibGljIGNsYXNzIFN0YXRpY0xhYmVsTmV3TW9kaWZpZXJQYWdlIGV4dGVuZHMgTmV3TW9kaWZpZXJQYWdlIHsKKwkJLyoqCisJCSAqIEBwYXJhbSB0YXJnZXQKKwkJICovCisJCXB1YmxpYyBTdGF0aWNMYWJlbE5ld01vZGlmaWVyUGFnZShJZGVudGlmaWFibGUgdGFyZ2V0KSB7CisJCQlzdXBlcih0YXJnZXQpOworCQl9CisKKwkJQE92ZXJyaWRlCisJCXByb3RlY3RlZCBib29sZWFuIGlzVXNlclNwZWNpZmllZFByb3BlcnR5KAorCQkJCWZpbmFsIEVTdHJ1Y3R1cmFsRmVhdHVyZSBmZWF0dXJlKSB7CisJCQlib29sZWFuIHJldFZhbHVlID0gc3VwZXIuaXNVc2VyU3BlY2lmaWVkUHJvcGVydHkoZmVhdHVyZSk7CisJCQlyZXRWYWx1ZSA9IHJldFZhbHVlCisJCQkJCSYmICFmZWF0dXJlLmVxdWFscyhHcmFwaFBhY2thZ2UuTGl0ZXJhbHMuRURHRV9MQUJFTF9fRURHRSk7CisJCQlyZXRWYWx1ZSA9IHJldFZhbHVlCisJCQkJCSYmICFmZWF0dXJlLmVxdWFscyhHcmFwaFBhY2thZ2UuTGl0ZXJhbHMuTk9ERV9MQUJFTF9fTk9ERSk7CisJCQlyZXRWYWx1ZSA9IHJldFZhbHVlCisJCQkJCSYmICFmZWF0dXJlCisJCQkJCQkJLmVxdWFscyhHcmFwaFBhY2thZ2UuTGl0ZXJhbHMuTEFCRUxfX1VSSV9PRl9JREVOVElGSUFCTEVfVE9fQkVfTEFCRUxFRCk7CisKKwkJCXJldHVybiByZXRWYWx1ZTsKKwkJfSAvLyBpc1VzZXJTcGVjaWZpZWRQcm9wZXJ0eQorCisJfSAvLyBTdGF0aWNMYWJlbE5ld01vZGlmaWVyUGFnZQorCisJLyoqCisJICogVGhpcyBjbGFzcyBpcyBleHRlbmRlZCBieSBjbGFzc2VzIHRoYXQgYWRhcHQge0BsaW5rIEVkZ2V9cyB0bworCSAqIHtAbGluayBOZXdNb2RpZmllclBhZ2V9cy4gSW4gcmVhbGl0eSB0aGUge0BsaW5rIEVkZ2V9IGlzIG5vdCBhZGFwdGVkLAorCSAqIGluc3RlYWQgaXQgYWRhcHRzIGl0cyBsYWJlbCB0byBhCisJICoge0BsaW5rIFN0YXRpY0xhYmVsTmV3TW9kaWZpZXJQYWdlQWRhcHRlcn0gYW5kIGRlbGVnYXRlcyB0byB0aGUgYWRhcHRlci4KKwkgKi8KKwlzdGF0aWMgcHVibGljIGNsYXNzIEVkZ2VOZXdNb2RpZmllclBhZ2VBZGFwdGVyIGV4dGVuZHMgTmV3TW9kaWZpZXJQYWdlQWRhcHRlciB7CisKKwkJU3RhdGljTGFiZWxOZXdNb2RpZmllclBhZ2VBZGFwdGVyIGxhYmVsQWRhcHRlciA9IG51bGw7CisKKwkJLyoqCisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS51aS5hZGFwdGVycy5uZXdtb2RpZmllcnBhZ2UuTmV3TW9kaWZpZXJQYWdlQWRhcHRlcgorCQkgKiAgICAgICNjcmVhdGVOZXdNb2RpZmllclBhZ2UoKQorCQkgKi8KKwkJQE92ZXJyaWRlCisJCXB1YmxpYyBOZXdNb2RpZmllclBhZ2UgY3JlYXRlTmV3TW9kaWZpZXJQYWdlKCkgeworCQkJTmV3TW9kaWZpZXJQYWdlIHJldFZhbHVlID0gbnVsbDsKKwkJCXRyeSB7CisJCQkJcmV0dXJuIGdldExhYmVsQWRhcHRlcigpLmNyZWF0ZU5ld01vZGlmaWVyUGFnZSgpOworCQkJfSBjYXRjaCAoTnVsbFBvaW50ZXJFeGNlcHRpb24gbnBlKSB7CisJCQkJQWN0aXZhdG9yLmxvZ0Vycm9yKCJDYW4ndCBjcmVhdGUgbW9kaWZlciBmb3IgXCIiICsgKCgoRWRnZSkgZ2V0VGFyZ2V0KCkpLmdldExhYmVsKCkpLmVDbGFzcygpLmdldE5hbWUoKSsgIlwiIiwgbnVsbCk7CisJCQl9CisJCQlyZXR1cm4gcmV0VmFsdWU7CisJCX0gLy8gY3JlYXRlTmV3TW9kaWZpZXJQYWdlCisKKwkJcHJpdmF0ZSBOZXdNb2RpZmllclBhZ2VBZGFwdGVyIGdldExhYmVsQWRhcHRlcigpIHsKKwkJCWlmIChsYWJlbEFkYXB0ZXIgPT0gbnVsbCkgeworCQkJCWZpbmFsIEVkZ2VMYWJlbCBlZGdlTGFiZWwgPSAoKEVkZ2UpIGdldFRhcmdldCgpKS5nZXRMYWJlbCgpOworCQkJCWxhYmVsQWRhcHRlciA9IChTdGF0aWNMYWJlbE5ld01vZGlmaWVyUGFnZUFkYXB0ZXIpIE5ld01vZGlmaWVyUGFnZUFkYXB0ZXJGYWN0b3J5LklOU1RBTkNFCisJCQkJCQkuYWRhcHQoZWRnZUxhYmVsLCBOZXdNb2RpZmllclBhZ2VBZGFwdGVyLmNsYXNzKTsKKwkJCX0KKwkJCXJldHVybiBsYWJlbEFkYXB0ZXI7CisJCX0KKworCX0gLy8gRWRnZU5ld01vZGlmaWVyUGFnZUFkYXB0ZXIKK30gLy8gR3JhcGhOZXdNb2RpZmllclBhZ2VBZGFwdGVyRmFjdG9yeQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL2FkYXB0ZXJzL25ld21vZGlmaWVycGFnZS9MYWJlbHNOZXdNb2RpZmllclBhZ2VBZGFwdGVyRmFjdG9yeS5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL2FkYXB0ZXJzL25ld21vZGlmaWVycGFnZS9MYWJlbHNOZXdNb2RpZmllclBhZ2VBZGFwdGVyRmFjdG9yeS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE2NGY0ZjMKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvYWRhcHRlcnMvbmV3bW9kaWZpZXJwYWdlL0xhYmVsc05ld01vZGlmaWVyUGFnZUFkYXB0ZXJGYWN0b3J5LmphdmEKQEAgLTAsMCArMSw4OCBAQAorLy8gTGFiZWxzTmV3TW9kaWZpZXJQYWdlQWRhcHRlckZhY3RvcnkuamF2YQorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnVpLmFkYXB0ZXJzLm5ld21vZGlmaWVycGFnZTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5BZGFwdGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FU3RydWN0dXJhbEZlYXR1cmU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5JZGVudGlmaWFibGU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuTGFiZWxzUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy51dGlsLkxhYmVsc0FkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udWkuYWRhcHRlcnMubmV3bW9kaWZpZXJwYWdlLkdyYXBoTmV3TW9kaWZpZXJQYWdlQWRhcHRlckZhY3RvcnkuU3RhdGljTGFiZWxOZXdNb2RpZmllclBhZ2VBZGFwdGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udWkud2l6YXJkcy5OZXdNb2RpZmllclBhZ2U7CisKKy8qKgorICogVGhpcyBjbGFzcyBpcyBhbiB7QGxpbmsgTmV3TW9kaWZpZXJQYWdlQWRhcHRlckZhY3Rvcnl9IHRoYXQgYWRhcHRzIG1lbWJlcnMgb2YKKyAqIHRoZSBMYWJlbCBtb2RlbCB0byB7QGxpbmsgTmV3TW9kaWZpZXJQYWdlfXMuCisgKi8KK3B1YmxpYyBjbGFzcyBMYWJlbHNOZXdNb2RpZmllclBhZ2VBZGFwdGVyRmFjdG9yeSBleHRlbmRzIExhYmVsc0FkYXB0ZXJGYWN0b3J5CisJCWltcGxlbWVudHMgTmV3TW9kaWZpZXJQYWdlQWRhcHRlckZhY3RvcnkgeworCisJLyoqCisJICogRGVmYXVsdCBjb25zdHJ1Y3RvcgorCSAqLworCXB1YmxpYyBMYWJlbHNOZXdNb2RpZmllclBhZ2VBZGFwdGVyRmFjdG9yeSgpIHsKKwkJc3VwZXIoKTsKKwkJTmV3TW9kaWZpZXJQYWdlQWRhcHRlckZhY3RvcnkuSU5TVEFOQ0UuYWRkQWRhcHRlckZhY3RvcnkodGhpcyk7CisJfQorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGgudXRpbC5HcmFwaEFkYXB0ZXJGYWN0b3J5I2lzRmFjdG9yeUZvclR5cGUoamF2YS5sYW5nLk9iamVjdCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgYm9vbGVhbiBpc0ZhY3RvcnlGb3JUeXBlKE9iamVjdCB0eXBlKSB7CisJCXJldHVybiB0eXBlID09IE5ld01vZGlmaWVyUGFnZUFkYXB0ZXIuY2xhc3MKKwkJCQl8fCBzdXBlci5pc0ZhY3RvcnlGb3JUeXBlKHR5cGUpOworCX0KKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMudXRpbC5MYWJlbHNBZGFwdGVyRmFjdG9yeSNjcmVhdGVQaHlzaWNhbFJlbGF0aW9uc2hpcExhYmVsQWRhcHRlcigpCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlUGh5c2ljYWxSZWxhdGlvbnNoaXBMYWJlbEFkYXB0ZXIoKSB7CisJCXJldHVybiBuZXcgUGh5c2ljYWxSZWxhdGlvbnNoaXBMYWJlbE5ld01vZGlmaWVyUGFnZUFkYXB0ZXIoKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGNsYXNzIGlzIGV4dGVuZGVkIGJ5IGNsYXNzZXMgdGhhdCBhZGFwdAorCSAqIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5QaHlzaWNhbFJlbGF0aW9uc2hpcExhYmVsfXMgdG8ge0BsaW5rIE5ld01vZGlmaWVyUGFnZX1zLgorCSAqLworCXB1YmxpYyBjbGFzcyBQaHlzaWNhbFJlbGF0aW9uc2hpcExhYmVsTmV3TW9kaWZpZXJQYWdlQWRhcHRlciBleHRlbmRzCisJCQlTdGF0aWNMYWJlbE5ld01vZGlmaWVyUGFnZUFkYXB0ZXIgeworCisJCS8qKgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0udWkuYWRhcHRlcnMubmV3bW9kaWZpZXJwYWdlLkdyYXBoTmV3TW9kaWZpZXJQYWdlQWRhcHRlckZhY3RvcnkuU3RhdGljTGFiZWxOZXdNb2RpZmllclBhZ2VBZGFwdGVyI2NyZWF0ZU5ld01vZGlmaWVyUGFnZSgpCisJCSAqLworCQlAT3ZlcnJpZGUKKwkJcHVibGljIE5ld01vZGlmaWVyUGFnZSBjcmVhdGVOZXdNb2RpZmllclBhZ2UoKSB7CisJCQlyZXR1cm4gbmV3IEdyYXBoTmV3TW9kaWZpZXJQYWdlQWRhcHRlckZhY3RvcnkuU3RhdGljTGFiZWxOZXdNb2RpZmllclBhZ2UoCisJCQkJCShJZGVudGlmaWFibGUpIGdldFRhcmdldCgpKSB7CisJCQkJQE92ZXJyaWRlCisJCQkJcHJvdGVjdGVkIGJvb2xlYW4gaXNVc2VyU3BlY2lmaWVkUHJvcGVydHkoCisJCQkJCQlFU3RydWN0dXJhbEZlYXR1cmUgZmVhdHVyZSkgeworCQkJCQlib29sZWFuIHJldFZhbHVlID0gc3VwZXIuaXNVc2VyU3BlY2lmaWVkUHJvcGVydHkoZmVhdHVyZSk7CisKKwkJCQkJcmV0VmFsdWUgPSByZXRWYWx1ZQorCQkJCQkJCSYmICEoZmVhdHVyZQorCQkJCQkJCQkJLmVxdWFscyhMYWJlbHNQYWNrYWdlLkxpdGVyYWxzLlJFTEFUSVZFX1BIWVNJQ0FMX1JFTEFUSU9OU0hJUF9MQUJFTF9WQUxVRV9fQURKQUNFTlQpKTsKKworCQkJCQlyZXRWYWx1ZSA9IHJldFZhbHVlCisJCQkJCQkJJiYgIShmZWF0dXJlCisJCQkJCQkJCQkuZXF1YWxzKExhYmVsc1BhY2thZ2UuTGl0ZXJhbHMuUkVMQVRJVkVfUEhZU0lDQUxfUkVMQVRJT05TSElQX0xBQkVMX1ZBTFVFX19SRUxBVElPTlNISVApKTsKKworCQkJCQlyZXR1cm4gcmV0VmFsdWU7CisJCQkJfSAvLyBpc1VzZXJTcGVjaWZpZWRQcm9wZXJ0eQorCQkJfTsKKwkJfSAvLyBjcmVhdGVOZXdNb2RpZmllclBhZ2UKKwkJCisJfSAvLyBQaHlzaWNhbFJlbGF0aW9uc2hpcE5ld01vZGlmaWVyUGFnZUFkYXB0ZXIKK30gLy8gTGFiZWxzTmV3TW9kaWZpZXJQYWdlQWRhcHRlckZhY3RvcnkKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9hZGFwdGVycy9uZXdtb2RpZmllcnBhZ2UvTmV3TW9kaWZpZXJQYWdlQWRhcHRlci5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL2FkYXB0ZXJzL25ld21vZGlmaWVycGFnZS9OZXdNb2RpZmllclBhZ2VBZGFwdGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDU0MzdmMQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9hZGFwdGVycy9uZXdtb2RpZmllcnBhZ2UvTmV3TW9kaWZpZXJQYWdlQWRhcHRlci5qYXZhCkBAIC0wLDAgKzEsMzkgQEAKKy8vIE5ld01vZGlmaWVyUGFnZUFkYXB0ZXIuamF2YQorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnVpLmFkYXB0ZXJzLm5ld21vZGlmaWVycGFnZTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5BZGFwdGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LmltcGwuQWRhcHRlckltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS51aS53aXphcmRzLk5ld01vZGlmaWVyUGFnZTsKKworLyoqCisgKiBUaGlzIGNsYXNzIGlzIGV4dGVuZGVkIGJ5IGNsYXNzZXMgdGhhdCBhZGFwdCB7QGxpbmsgT2JqZWN0fXMgdG8KKyAqIHtAbGluayBOZXdNb2RpZmllclBhZ2V9cy4KKyAqLworYWJzdHJhY3QgcHVibGljIGNsYXNzIE5ld01vZGlmaWVyUGFnZUFkYXB0ZXIgZXh0ZW5kcyBBZGFwdGVySW1wbCBpbXBsZW1lbnRzCisJCUFkYXB0ZXIgeworCisJLyoqCisJICogQHJldHVybiBhIHtAbGluayBOZXdNb2RpZmllclBhZ2V9CisJICovCisJYWJzdHJhY3QgcHVibGljIE5ld01vZGlmaWVyUGFnZSBjcmVhdGVOZXdNb2RpZmllclBhZ2UoKTsKKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuaW1wbC5BZGFwdGVySW1wbCNpc0FkYXB0ZXJGb3JUeXBlKGphdmEubGFuZy5PYmplY3QpCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIGJvb2xlYW4gaXNBZGFwdGVyRm9yVHlwZShPYmplY3QgdHlwZSkgeworCQlyZXR1cm4gdHlwZSA9PSBOZXdNb2RpZmllclBhZ2VBZGFwdGVyLmNsYXNzOworCX0KKworfSAvLyBOZXdNb2RpZmllclBhZ2VBZGFwdGVyCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvYWRhcHRlcnMvbmV3bW9kaWZpZXJwYWdlL05ld01vZGlmaWVyUGFnZUFkYXB0ZXJGYWN0b3J5LmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvYWRhcHRlcnMvbmV3bW9kaWZpZXJwYWdlL05ld01vZGlmaWVyUGFnZUFkYXB0ZXJGYWN0b3J5LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmExNGY5ZQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9hZGFwdGVycy9uZXdtb2RpZmllcnBhZ2UvTmV3TW9kaWZpZXJQYWdlQWRhcHRlckZhY3RvcnkuamF2YQpAQCAtMCwwICsxLDQ3IEBACisvLyBOZXdNb2RpZmllclBhZ2VBZGFwdGVyRmFjdG9yeS5qYXZhCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0udWkuYWRhcHRlcnMubmV3bW9kaWZpZXJwYWdlOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkNvbXBvc2VkQWRhcHRlckZhY3Rvcnk7CisKKy8qKgorICogVGhpcyBjbGFzcyBpcyBhbiBhZGFwdGVyIGZhY3RvcnkgdGhhdCBhZGFwdHMKKyAqIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLklkZW50aWZpYWJsZX1zIHRvCisgKiB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS51aS53aXphcmRzLk5ld01vZGlmaWVyUGFnZX1zLgorICovCitwdWJsaWMgaW50ZXJmYWNlIE5ld01vZGlmaWVyUGFnZUFkYXB0ZXJGYWN0b3J5IHsKKworCS8qKgorCSAqIFNpbmdsZXRvbiBpbnN0YW5jZSBvZiB0aGUgYWRhcHRlciBmYWN0b3J5LgorCSAqLworCU5ld01vZGlmaWVyUGFnZUFkYXRwZXJGYWN0b3J5SW1wbCBJTlNUQU5DRSA9IG5ldyBOZXdNb2RpZmllclBhZ2VBZGF0cGVyRmFjdG9yeUltcGwoKTsKKworCS8qKgorCSAqIFRoaXMgY2xhc3MgaXMgdGhlIHtAbGluayBDb21wb3NlZEFkYXB0ZXJGYWN0b3J5fSB0aGF0IG90aGVyCisJICoge0BsaW5rIE5ld01vZGlmaWVyUGFnZUFkYXB0ZXJGYWN0b3J5fXMgYWRkIHRoZW1zZWx2ZXMgdG8uCisJICovCisJY2xhc3MgTmV3TW9kaWZpZXJQYWdlQWRhdHBlckZhY3RvcnlJbXBsIGV4dGVuZHMgQ29tcG9zZWRBZGFwdGVyRmFjdG9yeQorCQkJaW1wbGVtZW50cyBOZXdNb2RpZmllclBhZ2VBZGFwdGVyRmFjdG9yeSB7CisKKwkJLyoqCisJCSAqIEBzZWUgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuQ29tcG9zZWRBZGFwdGVyRmFjdG9yeSNpc0ZhY3RvcnlGb3JUeXBlKGphdmEubGFuZy5PYmplY3QpCisJCSAqLworCQlAT3ZlcnJpZGUKKwkJcHVibGljIGJvb2xlYW4gaXNGYWN0b3J5Rm9yVHlwZShPYmplY3QgdHlwZSkgeworCQkJcmV0dXJuIHR5cGUgPT0gTmV3TW9kaWZpZXJQYWdlQWRhcHRlci5jbGFzcworCQkJCQl8fCBzdXBlci5pc0ZhY3RvcnlGb3JUeXBlKHR5cGUpOworCQl9CisKKwl9IC8vIElkZW50aWZpYWJsZU5ld01vZGlmaWVyUGFnZUFkYXRwZXJGYWN0b3J5SW1wbAorCit9IC8vIE5ld01vZGlmaWVyUGFnZUFkYXB0ZXJGYWN0b3J5CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvYWRhcHRlcnMvbmV3bW9kaWZpZXJwYWdlL1NlcXVlbmNlck5ld01vZGlmaWVyUGFnZUFkYXB0ZXJGYWN0b3J5LmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvYWRhcHRlcnMvbmV3bW9kaWZpZXJwYWdlL1NlcXVlbmNlck5ld01vZGlmaWVyUGFnZUFkYXB0ZXJGYWN0b3J5LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGE5MWQyYgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9hZGFwdGVycy9uZXdtb2RpZmllcnBhZ2UvU2VxdWVuY2VyTmV3TW9kaWZpZXJQYWdlQWRhcHRlckZhY3RvcnkuamF2YQpAQCAtMCwwICsxLDEwOSBAQAorLy8gU2VxdWVuY2VyTmV3TW9kaWZpZXJQYWdlQWRhcHRlckZhY3RvcnkuamF2YQorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnVpLmFkYXB0ZXJzLm5ld21vZGlmaWVycGFnZTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5BZGFwdGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FU3RydWN0dXJhbEZlYXR1cmU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5JZGVudGlmaWFibGU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNlcXVlbmNlci51dGlsLlNlcXVlbmNlckFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udWkud2l6YXJkcy5OZXdNb2RpZmllclBhZ2U7CisKKy8qKgorICogVGhpcyBjbGFzcyBpcyBhbiB7QGxpbmsgTmV3TW9kaWZpZXJQYWdlQWRhcHRlckZhY3Rvcnl9IHRoYXQKKyAqIGFkYXB0cyB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNlcXVlbmNlci5TZXF1ZW50aWFsU2VxdWVuY2VyfXMgdG8ge0BsaW5rIE5ld01vZGlmaWVyUGFnZX1zLgorICovCitwdWJsaWMgY2xhc3MgU2VxdWVuY2VyTmV3TW9kaWZpZXJQYWdlQWRhcHRlckZhY3RvcnkgZXh0ZW5kcworCQlTZXF1ZW5jZXJBZGFwdGVyRmFjdG9yeSBpbXBsZW1lbnRzCisJCU5ld01vZGlmaWVyUGFnZUFkYXB0ZXJGYWN0b3J5IHsKKworCS8qKgorCSAqIERlZmF1bHQgQ29uc3RydWN0b3IKKwkgKi8KKwlwdWJsaWMgU2VxdWVuY2VyTmV3TW9kaWZpZXJQYWdlQWRhcHRlckZhY3RvcnkoKSB7CisJCXN1cGVyKCk7CisJCU5ld01vZGlmaWVyUGFnZUFkYXB0ZXJGYWN0b3J5LklOU1RBTkNFCisJCQkJLmFkZEFkYXB0ZXJGYWN0b3J5KHRoaXMpOworCX0KKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNjZW5hcmlvLnV0aWwuU2NlbmFyaW9BZGFwdGVyRmFjdG9yeSNpc0ZhY3RvcnlGb3JUeXBlKGphdmEubGFuZy5PYmplY3QpCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIGJvb2xlYW4gaXNGYWN0b3J5Rm9yVHlwZShmaW5hbCBPYmplY3QgdHlwZSkgeworCQlyZXR1cm4gdHlwZSA9PSBOZXdNb2RpZmllclBhZ2UuY2xhc3MgfHwgc3VwZXIuaXNGYWN0b3J5Rm9yVHlwZSh0eXBlKTsKKwl9CisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zZXF1ZW5jZXIudXRpbC5TZXF1ZW5jZXJBZGFwdGVyRmFjdG9yeSNjcmVhdGVTZXF1ZW50aWFsU2VxdWVuY2VyQWRhcHRlcigpCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlU2VxdWVudGlhbFNlcXVlbmNlckFkYXB0ZXIoKSB7CisJCXJldHVybiBuZXcgU2VxdWVudGlhbFNlcXVlbmNlck5ld01vZGlmaWVyUGFnZUFkYXB0ZXIoKTsKKwl9CisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zZXF1ZW5jZXIudXRpbC5TZXF1ZW5jZXJBZGFwdGVyRmFjdG9yeSNjcmVhdGVSZWFsVGltZVNlcXVlbmNlckFkYXB0ZXIoKQorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZVJlYWxUaW1lU2VxdWVuY2VyQWRhcHRlcigpIHsKKwkJcmV0dXJuIG5ldyBSZWFsVGltZVNlcXVlbmNlck5ld01vZGlmaWVyUGFnZUFkYXB0ZXIoKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGNsYXNzIGFkYXB0cyB7QGxpbmsgU2VxdWVudGlhbFNlcXVlbmNlcn1zIHRvCisJICoge0BsaW5rIE5ld01vZGlmaWVyUGFnZX1zCisJICovCisJcHVibGljIHN0YXRpYyBjbGFzcyBTZXF1ZW50aWFsU2VxdWVuY2VyTmV3TW9kaWZpZXJQYWdlQWRhcHRlciBleHRlbmRzCisJCQlOZXdNb2RpZmllclBhZ2VBZGFwdGVyIHsKKworCQkvKioKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnVpLmFkYXB0ZXJzLm5ld21vZGlmaWVycGFnZS5OZXdNb2RpZmllclBhZ2VBZGFwdGVyI2NyZWF0ZU5ld01vZGlmaWVyUGFnZSgpCisJCSAqLworCQlAT3ZlcnJpZGUKKwkJcHVibGljIE5ld01vZGlmaWVyUGFnZSBjcmVhdGVOZXdNb2RpZmllclBhZ2UoKSB7CisJCQlyZXR1cm4gbmV3IE5ld01vZGlmaWVyUGFnZSgoSWRlbnRpZmlhYmxlKSBnZXRUYXJnZXQoKSkgeworCQkJCUBPdmVycmlkZQorCQkJCXByb3RlY3RlZCBib29sZWFuIGlzVXNlclNwZWNpZmllZFByb3BlcnR5KAorCQkJCQkJQFN1cHByZXNzV2FybmluZ3MoInVudXNlZCIpIGZpbmFsIEVTdHJ1Y3R1cmFsRmVhdHVyZSBmZWF0dXJlKSB7CisJCQkJCS8vIFRPRE8gaXNVc2VyU3BlY2lmaWVkUHJvcGVydHkKKwkJCQkJcmV0dXJuIHRydWU7CisJCQkJfQorCQkJfTsKKwkJfSAvLyBjcmVhdGVOZXdNb2RpZmllclBhZ2UKKworCX0gLy8gU2VxdWVudGlhbFNlcXVlbmNlck5ld01vZGlmaWVyUGFnZUFkYXB0ZXIKKworCS8qKgorCSAqIFRoaXMgY2xhc3MgYWRhcHRzIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2VxdWVuY2VyLlJlYWxUaW1lU2VxdWVuY2VyfXMgdG8ge0BsaW5rIE5ld01vZGlmaWVyUGFnZX1zCisJICovCisJcHVibGljIHN0YXRpYyBjbGFzcyBSZWFsVGltZVNlcXVlbmNlck5ld01vZGlmaWVyUGFnZUFkYXB0ZXIgZXh0ZW5kcworCQkJTmV3TW9kaWZpZXJQYWdlQWRhcHRlciB7CisKKwkJLyoqCisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS51aS5hZGFwdGVycy5uZXdtb2RpZmllcnBhZ2UuTmV3TW9kaWZpZXJQYWdlQWRhcHRlciNjcmVhdGVOZXdNb2RpZmllclBhZ2UoKQorCQkgKi8KKwkJQE92ZXJyaWRlCisJCXB1YmxpYyBOZXdNb2RpZmllclBhZ2UgY3JlYXRlTmV3TW9kaWZpZXJQYWdlKCkgeworCQkJcmV0dXJuIG5ldyBOZXdNb2RpZmllclBhZ2UoKElkZW50aWZpYWJsZSkgZ2V0VGFyZ2V0KCkpIHsKKwkJCQlAT3ZlcnJpZGUKKwkJCQlwcm90ZWN0ZWQgYm9vbGVhbiBpc1VzZXJTcGVjaWZpZWRQcm9wZXJ0eSgKKwkJCQkJCUBTdXBwcmVzc1dhcm5pbmdzKCJ1bnVzZWQiKSBmaW5hbCBFU3RydWN0dXJhbEZlYXR1cmUgZmVhdHVyZSkgeworCQkJCQkvLyBUT0RPIGlzVXNlclNwZWNpZmllZFByb3BlcnR5CisJCQkJCXJldHVybiB0cnVlOworCQkJCX0KKwkJCX07CisJCX0gLy8gY3JlYXRlTmV3TW9kaWZpZXJQYWdlCisKKwl9IC8vIFJlYWxUaW1lU2VxdWVuY2VyTmV3TW9kaWZpZXJQYWdlQWRhcHRlcgorCit9IC8vIFNlcXVlbmNlck5ld01vZGlmaWVyUGFnZUFkYXB0ZXJGYWN0b3J5CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvYWRhcHRlcnMvcHJvcGVydHlzdHJpbmdzL0RlZmF1bHRQcm9wZXJ0eVN0cmluZ1Byb3ZpZGVyQWRhcHRlci5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL2FkYXB0ZXJzL3Byb3BlcnR5c3RyaW5ncy9EZWZhdWx0UHJvcGVydHlTdHJpbmdQcm92aWRlckFkYXB0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNGE1Mzc5Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL2FkYXB0ZXJzL3Byb3BlcnR5c3RyaW5ncy9EZWZhdWx0UHJvcGVydHlTdHJpbmdQcm92aWRlckFkYXB0ZXIuamF2YQpAQCAtMCwwICsxLDU0IEBACisvLyBEZWZhdWx0UHJvcGVydHlTdHJpbmdQcm92aWRlckFkYXB0ZXIuamF2YQorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnVpLmFkYXB0ZXJzLnByb3BlcnR5c3RyaW5nczsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRVN0cnVjdHVyYWxGZWF0dXJlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtUHJvcGVydHlEZXNjcmlwdG9yOworCisvKioKKyAqIFRoaXMgY2xhc3MgaXMgdGhlIFByb3BlcnR5U3RyaW5nUHJvdmlkZXJBZGFwdGVyIHRoYXQgaXMgcmV0dXJuZWQgYnkgdGhlCisgKiB7QGxpbmsgUHJvcGVydHlTdHJpbmdQcm92aWRlckFkYXB0ZXJGYWN0b3J5fSB3aGVuIG5vIG90aGVyCisgKiB7QGxpbmsgUHJvcGVydHlTdHJpbmdQcm92aWRlckFkYXB0ZXJ9IGlzIGZvdW5kLgorICovCitwdWJsaWMgY2xhc3MgRGVmYXVsdFByb3BlcnR5U3RyaW5nUHJvdmlkZXJBZGFwdGVyIGV4dGVuZHMKKwkJUHJvcGVydHlTdHJpbmdQcm92aWRlckFkYXB0ZXIgeworCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnVpLmFkYXB0ZXJzLnByb3BlcnR5c3RyaW5ncy5Qcm9wZXJ0eVN0cmluZ1Byb3ZpZGVyI2dldFByb3BlcnR5TmFtZShvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbVByb3BlcnR5RGVzY3JpcHRvcikKKwkgKi8KKwlwdWJsaWMgU3RyaW5nIGdldFByb3BlcnR5TmFtZShmaW5hbCBJSXRlbVByb3BlcnR5RGVzY3JpcHRvciBkZXNjcmlwdG9yKSB7CisJCXJldHVybiAiISIKKwkJCQkrICgoRVN0cnVjdHVyYWxGZWF0dXJlKSBkZXNjcmlwdG9yLmdldEZlYXR1cmUobnVsbCkpLmdldE5hbWUoKQorCQkJCSsgIiEiOworCX0KKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS51aS5hZGFwdGVycy5wcm9wZXJ0eXN0cmluZ3MuUHJvcGVydHlTdHJpbmdQcm92aWRlciNnZXRQcm9wZXJ0eVRvb2xUaXAob3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IpCisJICovCisJcHVibGljIFN0cmluZyBnZXRQcm9wZXJ0eVRvb2xUaXAoZmluYWwgSUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IgZGVzY3JpcHRvcikgeworCQlyZXR1cm4gIiEiCisJCQkJKyAoKEVTdHJ1Y3R1cmFsRmVhdHVyZSkgZGVzY3JpcHRvci5nZXRGZWF0dXJlKG51bGwpKS5nZXROYW1lKCkKKwkJCQkrIFRUX1NVRkZJWCArICIhIjsKKwl9CisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0udWkuYWRhcHRlcnMucHJvcGVydHlzdHJpbmdzLlByb3BlcnR5U3RyaW5nUHJvdmlkZXIjZ2V0UHJvcGVydHlVbml0cyhvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbVByb3BlcnR5RGVzY3JpcHRvcikKKwkgKi8KKwlwdWJsaWMgU3RyaW5nIGdldFByb3BlcnR5VW5pdHMoZmluYWwgSUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IgZGVzY3JpcHRvcikgeworCQlyZXR1cm4gIiEiCisJCQkJKyAoKEVTdHJ1Y3R1cmFsRmVhdHVyZSkgZGVzY3JpcHRvci5nZXRGZWF0dXJlKG51bGwpKS5nZXROYW1lKCkKKwkJCQkrIFVOSVRfU1VGRklYICsgIiEiOworCX0KKworfSAvLyBEZWZhdWx0UHJvcGVydHlTdHJpbmdQcm92aWRlckFkYXB0ZXIKKwpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL2FkYXB0ZXJzL3Byb3BlcnR5c3RyaW5ncy9FZGdlc1Byb3BlcnR5U3RyaW5nUHJvdmlkZXJBZGFwdGVyRmFjdG9yeS5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL2FkYXB0ZXJzL3Byb3BlcnR5c3RyaW5ncy9FZGdlc1Byb3BlcnR5U3RyaW5nUHJvdmlkZXJBZGFwdGVyRmFjdG9yeS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhlMGE1YWYKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvYWRhcHRlcnMvcHJvcGVydHlzdHJpbmdzL0VkZ2VzUHJvcGVydHlTdHJpbmdQcm92aWRlckFkYXB0ZXJGYWN0b3J5LmphdmEKQEAgLTAsMCArMSwxMDkgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS51aS5hZGFwdGVycy5wcm9wZXJ0eXN0cmluZ3M7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5BZGFwdGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FU3RydWN0dXJhbEZlYXR1cmU7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5lZGdlcy51dGlsLkVkZ2VzQWRhcHRlckZhY3Rvcnk7CisKKy8qKgorICogVGhpcyBjbGFzcyBpcyB1c2VkIHRvIE5MUydkIHN0cmluZ3MgZm9yIExhYmVsIHByb3BlcnRpZXMuCisgKi8KK3B1YmxpYyBjbGFzcyBFZGdlc1Byb3BlcnR5U3RyaW5nUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSBleHRlbmRzCisJCUVkZ2VzQWRhcHRlckZhY3RvcnkgaW1wbGVtZW50cyBQcm9wZXJ0eVN0cmluZ1Byb3ZpZGVyQWRhcHRlckZhY3RvcnkgeworCisJUHJvcGVydHlTdHJpbmdQcm92aWRlckFkYXB0ZXIgYWRhcHRlciA9IG51bGw7CisKKwkvKioKKwkgKiBEZWZhdWx0IENvbnN0cnVjdG9yCisJICovCisJcHVibGljIEVkZ2VzUHJvcGVydHlTdHJpbmdQcm92aWRlckFkYXB0ZXJGYWN0b3J5KCkgeworCQlzdXBlcigpOworCQlQcm9wZXJ0eVN0cmluZ1Byb3ZpZGVyQWRhcHRlckZhY3RvcnkuSU5TVEFOQ0UuYWRkQWRhcHRlckZhY3RvcnkodGhpcyk7CisJfQorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5pbXBsLkFkYXB0ZXJGYWN0b3J5SW1wbCNpc0ZhY3RvcnlGb3JUeXBlKGphdmEubGFuZy5PYmplY3QpCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIGJvb2xlYW4gaXNGYWN0b3J5Rm9yVHlwZShPYmplY3QgdHlwZSkgeworCQlyZXR1cm4gdHlwZSA9PSBQcm9wZXJ0eVN0cmluZ1Byb3ZpZGVyLmNsYXNzCisJCQkJfHwgc3VwZXIuaXNGYWN0b3J5Rm9yVHlwZSh0eXBlKTsKKwl9CisKKy8vCS8qKgorLy8JICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy51dGlsLkxhYmVsc0FkYXB0ZXJGYWN0b3J5I2NyZWF0ZUFyZWFMYWJlbEFkYXB0ZXIoKQorLy8JICovCisvLwlAT3ZlcnJpZGUKKy8vCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZUFyZWFMYWJlbEFkYXB0ZXIoKSB7CisvLwkJLy8gSGF2ZSB3ZSBjcmVhdGVkIG9uZSBiZWZvcmU/CisvLwkJaWYgKGFkYXB0ZXIgPT0gbnVsbCkgeworLy8JCQkvLyBObworLy8JCQlhZGFwdGVyID0gbmV3IExhYmVsc1Byb3BlcnR5U3RyaW5nUHJvdmlkZXJBZGFwdGVyKCk7CisvLwkJfSAvLyBpZiB3ZSBkaWRuJ3QgY3JlYXRlIG9uZSBiZWZvcmUKKy8vCQlyZXR1cm4gYWRhcHRlcjsKKy8vCX0KKworCQorCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMudXRpbC5MYWJlbHNBZGFwdGVyRmFjdG9yeSNjcmVhdGVTdGF0aWNMYWJlbEFkYXB0ZXIoKQorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZU1pZ3JhdGlvbkVkZ2VMYWJlbEFkYXB0ZXIoKSB7CisJCS8vIEhhdmUgd2UgY3JlYXRlZCBvbmUgYmVmb3JlPworCQlpZiAoYWRhcHRlciA9PSBudWxsKSB7CisJCQkvLyBObworCQkJYWRhcHRlciA9IG5ldyBMYWJlbHNQcm9wZXJ0eVN0cmluZ1Byb3ZpZGVyQWRhcHRlcigpOworCQl9IC8vIGlmIHdlIGRpZG4ndCBjcmVhdGUgb25lIGJlZm9yZQorCQlyZXR1cm4gYWRhcHRlcjsKKwl9IC8vIGNyZWF0ZVN0YXRpY0xhYmVsQWRhcHRlcgorCQorCisKKwkvKioKKwkgKiBUaGlzIGNsYXNzIHJlcHJlc2VudHMKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGNsYXNzIExhYmVsc1Byb3BlcnR5U3RyaW5nUHJvdmlkZXJBZGFwdGVyIGV4dGVuZHMKKwkJCVByb3BlcnR5U3RyaW5nUHJvdmlkZXJBZGFwdGVyIHsKKworCQkvKioKKwkJICogQHBhcmFtIGRlc2NyaXB0b3IKKwkJICogQHJldHVybiB0aGUgTkxTJ2QgbmFtZSBvZiB0aGUgcHJvcGVydHkgdG8gZGlzcGxheSB0byB0aGUgdXNlcgorCQkgKi8KKwkJcHVibGljIFN0cmluZyBnZXRQcm9wZXJ0eU5hbWUoSUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IgZGVzY3JpcHRvcikgeworCQkJcmV0dXJuIE1lc3NhZ2VzLmdldFN0cmluZygoKEVTdHJ1Y3R1cmFsRmVhdHVyZSkgZGVzY3JpcHRvcgorCQkJCQkuZ2V0RmVhdHVyZShudWxsKSkuZ2V0TmFtZSgpKTsKKwkJfSAvLyBnZXRQcm9wZXJ0eU5hbWUKKworCQkvKioKKwkJICogQHBhcmFtIGRlc2NyaXB0b3IKKwkJICogQHJldHVybiB0aGUgTkxTJ2QgdG9vbCB0aXAgdGV4dCB0aGF0IGRlc2NyaWJlcyB0aGUgcHJvcGVydHkKKwkJICovCisJCXB1YmxpYyBTdHJpbmcgZ2V0UHJvcGVydHlUb29sVGlwKElJdGVtUHJvcGVydHlEZXNjcmlwdG9yIGRlc2NyaXB0b3IpIHsKKwkJCWZpbmFsIEVTdHJ1Y3R1cmFsRmVhdHVyZSBmZWF0dXJlID0gKEVTdHJ1Y3R1cmFsRmVhdHVyZSkgZGVzY3JpcHRvcgorCQkJCQkuZ2V0RmVhdHVyZShudWxsKTsKKwkJCXJldHVybiBNZXNzYWdlcy5nZXRTdHJpbmcoZmVhdHVyZS5nZXROYW1lKCkgKyBUVF9TVUZGSVgpOworCQl9IC8vIGdldFByb3BlcnR5VG9vbFRpcAorCisJCS8qKgorCQkgKiBAcGFyYW0gZGVzY3JpcHRvcgorCQkgKiBAcmV0dXJuIHRoZSBOTFMnZCB0ZXh0IHRoYXQgcmVwcmVzZW50cyB0aGUgdW5pdHMgb2YgdGhlIHByb3BlcnR5CisJCSAqLworCQlwdWJsaWMgU3RyaW5nIGdldFByb3BlcnR5VW5pdHMoSUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IgZGVzY3JpcHRvcikgeworCQkJZmluYWwgRVN0cnVjdHVyYWxGZWF0dXJlIGZlYXR1cmUgPSAoRVN0cnVjdHVyYWxGZWF0dXJlKSBkZXNjcmlwdG9yCisJCQkJCS5nZXRGZWF0dXJlKG51bGwpOworCQkJcmV0dXJuIE1lc3NhZ2VzLmdldFN0cmluZyhmZWF0dXJlLmdldE5hbWUoKSArIFVOSVRfU1VGRklYKTsKKwkJfSAvLyBnZXRQcm9wZXJ0eVVuaXRzCisKKwl9IC8vIExhYmVsc1Byb3BlcnR5U3RyaW5nUHJvdmlkZXJBZGFwdGVyCit9IC8vIExhYmVsc1Byb3BlcnR5U3RyaW5nUHJvdmlkZXJBZGFwdGVyRmFjdG9yeQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL2FkYXB0ZXJzL3Byb3BlcnR5c3RyaW5ncy9MYWJlbHNQcm9wZXJ0eVN0cmluZ1Byb3ZpZGVyQWRhcHRlckZhY3RvcnkuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9hZGFwdGVycy9wcm9wZXJ0eXN0cmluZ3MvTGFiZWxzUHJvcGVydHlTdHJpbmdQcm92aWRlckFkYXB0ZXJGYWN0b3J5LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzllNzFhYwotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9hZGFwdGVycy9wcm9wZXJ0eXN0cmluZ3MvTGFiZWxzUHJvcGVydHlTdHJpbmdQcm92aWRlckFkYXB0ZXJGYWN0b3J5LmphdmEKQEAgLTAsMCArMSwxMDkgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS51aS5hZGFwdGVycy5wcm9wZXJ0eXN0cmluZ3M7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5BZGFwdGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FU3RydWN0dXJhbEZlYXR1cmU7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMudXRpbC5MYWJlbHNBZGFwdGVyRmFjdG9yeTsKKworLyoqCisgKiBUaGlzIGNsYXNzIGlzIHVzZWQgdG8gTkxTJ2Qgc3RyaW5ncyBmb3IgTGFiZWwgcHJvcGVydGllcy4KKyAqLworcHVibGljIGNsYXNzIExhYmVsc1Byb3BlcnR5U3RyaW5nUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSBleHRlbmRzCisJCUxhYmVsc0FkYXB0ZXJGYWN0b3J5IGltcGxlbWVudHMgUHJvcGVydHlTdHJpbmdQcm92aWRlckFkYXB0ZXJGYWN0b3J5IHsKKworCVByb3BlcnR5U3RyaW5nUHJvdmlkZXJBZGFwdGVyIGFkYXB0ZXIgPSBudWxsOworCisJLyoqCisJICogRGVmYXVsdCBDb25zdHJ1Y3RvcgorCSAqLworCXB1YmxpYyBMYWJlbHNQcm9wZXJ0eVN0cmluZ1Byb3ZpZGVyQWRhcHRlckZhY3RvcnkoKSB7CisJCXN1cGVyKCk7CisJCVByb3BlcnR5U3RyaW5nUHJvdmlkZXJBZGFwdGVyRmFjdG9yeS5JTlNUQU5DRS5hZGRBZGFwdGVyRmFjdG9yeSh0aGlzKTsKKwl9CisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LmltcGwuQWRhcHRlckZhY3RvcnlJbXBsI2lzRmFjdG9yeUZvclR5cGUoamF2YS5sYW5nLk9iamVjdCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgYm9vbGVhbiBpc0ZhY3RvcnlGb3JUeXBlKE9iamVjdCB0eXBlKSB7CisJCXJldHVybiB0eXBlID09IFByb3BlcnR5U3RyaW5nUHJvdmlkZXIuY2xhc3MKKwkJCQl8fCBzdXBlci5pc0ZhY3RvcnlGb3JUeXBlKHR5cGUpOworCX0KKworLy8JLyoqCisvLwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLnV0aWwuTGFiZWxzQWRhcHRlckZhY3RvcnkjY3JlYXRlQXJlYUxhYmVsQWRhcHRlcigpCisvLwkgKi8KKy8vCUBPdmVycmlkZQorLy8JcHVibGljIEFkYXB0ZXIgY3JlYXRlQXJlYUxhYmVsQWRhcHRlcigpIHsKKy8vCQkvLyBIYXZlIHdlIGNyZWF0ZWQgb25lIGJlZm9yZT8KKy8vCQlpZiAoYWRhcHRlciA9PSBudWxsKSB7CisvLwkJCS8vIE5vCisvLwkJCWFkYXB0ZXIgPSBuZXcgTGFiZWxzUHJvcGVydHlTdHJpbmdQcm92aWRlckFkYXB0ZXIoKTsKKy8vCQl9IC8vIGlmIHdlIGRpZG4ndCBjcmVhdGUgb25lIGJlZm9yZQorLy8JCXJldHVybiBhZGFwdGVyOworLy8JfQorCisJCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy51dGlsLkxhYmVsc0FkYXB0ZXJGYWN0b3J5I2NyZWF0ZVN0YXRpY0xhYmVsQWRhcHRlcigpCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlU3RhdGljTGFiZWxBZGFwdGVyKCkgeworCQkvLyBIYXZlIHdlIGNyZWF0ZWQgb25lIGJlZm9yZT8KKwkJaWYgKGFkYXB0ZXIgPT0gbnVsbCkgeworCQkJLy8gTm8KKwkJCWFkYXB0ZXIgPSBuZXcgTGFiZWxzUHJvcGVydHlTdHJpbmdQcm92aWRlckFkYXB0ZXIoKTsKKwkJfSAvLyBpZiB3ZSBkaWRuJ3QgY3JlYXRlIG9uZSBiZWZvcmUKKwkJcmV0dXJuIGFkYXB0ZXI7CisJfSAvLyBjcmVhdGVTdGF0aWNMYWJlbEFkYXB0ZXIKKwkKKworCisJLyoqCisJICogVGhpcyBjbGFzcyByZXByZXNlbnRzCisJICovCisJcHVibGljIHN0YXRpYyBjbGFzcyBMYWJlbHNQcm9wZXJ0eVN0cmluZ1Byb3ZpZGVyQWRhcHRlciBleHRlbmRzCisJCQlQcm9wZXJ0eVN0cmluZ1Byb3ZpZGVyQWRhcHRlciB7CisKKwkJLyoqCisJCSAqIEBwYXJhbSBkZXNjcmlwdG9yCisJCSAqIEByZXR1cm4gdGhlIE5MUydkIG5hbWUgb2YgdGhlIHByb3BlcnR5IHRvIGRpc3BsYXkgdG8gdGhlIHVzZXIKKwkJICovCisJCXB1YmxpYyBTdHJpbmcgZ2V0UHJvcGVydHlOYW1lKElJdGVtUHJvcGVydHlEZXNjcmlwdG9yIGRlc2NyaXB0b3IpIHsKKwkJCXJldHVybiBNZXNzYWdlcy5nZXRTdHJpbmcoKChFU3RydWN0dXJhbEZlYXR1cmUpIGRlc2NyaXB0b3IKKwkJCQkJLmdldEZlYXR1cmUobnVsbCkpLmdldE5hbWUoKSk7CisJCX0gLy8gZ2V0UHJvcGVydHlOYW1lCisKKwkJLyoqCisJCSAqIEBwYXJhbSBkZXNjcmlwdG9yCisJCSAqIEByZXR1cm4gdGhlIE5MUydkIHRvb2wgdGlwIHRleHQgdGhhdCBkZXNjcmliZXMgdGhlIHByb3BlcnR5CisJCSAqLworCQlwdWJsaWMgU3RyaW5nIGdldFByb3BlcnR5VG9vbFRpcChJSXRlbVByb3BlcnR5RGVzY3JpcHRvciBkZXNjcmlwdG9yKSB7CisJCQlmaW5hbCBFU3RydWN0dXJhbEZlYXR1cmUgZmVhdHVyZSA9IChFU3RydWN0dXJhbEZlYXR1cmUpIGRlc2NyaXB0b3IKKwkJCQkJLmdldEZlYXR1cmUobnVsbCk7CisJCQlyZXR1cm4gTWVzc2FnZXMuZ2V0U3RyaW5nKGZlYXR1cmUuZ2V0TmFtZSgpICsgVFRfU1VGRklYKTsKKwkJfSAvLyBnZXRQcm9wZXJ0eVRvb2xUaXAKKworCQkvKioKKwkJICogQHBhcmFtIGRlc2NyaXB0b3IKKwkJICogQHJldHVybiB0aGUgTkxTJ2QgdGV4dCB0aGF0IHJlcHJlc2VudHMgdGhlIHVuaXRzIG9mIHRoZSBwcm9wZXJ0eQorCQkgKi8KKwkJcHVibGljIFN0cmluZyBnZXRQcm9wZXJ0eVVuaXRzKElJdGVtUHJvcGVydHlEZXNjcmlwdG9yIGRlc2NyaXB0b3IpIHsKKwkJCWZpbmFsIEVTdHJ1Y3R1cmFsRmVhdHVyZSBmZWF0dXJlID0gKEVTdHJ1Y3R1cmFsRmVhdHVyZSkgZGVzY3JpcHRvcgorCQkJCQkuZ2V0RmVhdHVyZShudWxsKTsKKwkJCXJldHVybiBNZXNzYWdlcy5nZXRTdHJpbmcoZmVhdHVyZS5nZXROYW1lKCkgKyBVTklUX1NVRkZJWCk7CisJCX0gLy8gZ2V0UHJvcGVydHlVbml0cworCisJfSAvLyBMYWJlbHNQcm9wZXJ0eVN0cmluZ1Byb3ZpZGVyQWRhcHRlcgorfSAvLyBMYWJlbHNQcm9wZXJ0eVN0cmluZ1Byb3ZpZGVyQWRhcHRlckZhY3RvcnkKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9hZGFwdGVycy9wcm9wZXJ0eXN0cmluZ3MvTWVzc2FnZXMuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9hZGFwdGVycy9wcm9wZXJ0eXN0cmluZ3MvTWVzc2FnZXMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZDI2NGJmCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL2FkYXB0ZXJzL3Byb3BlcnR5c3RyaW5ncy9NZXNzYWdlcy5qYXZhCkBAIC0wLDAgKzEsNDcgQEAKKy8vIE1lc3NhZ2VzLmphdmEKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS51aS5hZGFwdGVycy5wcm9wZXJ0eXN0cmluZ3M7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgamF2YS51dGlsLk1pc3NpbmdSZXNvdXJjZUV4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLnV0aWwuUmVzb3VyY2VCdW5kbGU7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuQ29uc3RhbnRzOworCisKKy8qKgorICogVGhpcyBjbGFzcyBpcyB0aGUgUmVzb3VyY2UgQnVuZGxlIGZvciB0aGlzIHBhY2thZ2UuCisgKi8KK3B1YmxpYyBjbGFzcyBNZXNzYWdlcyB7CisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEJVTkRMRV9OQU1FID0gQ29uc3RhbnRzLklEX1JPT1QKKwkJCSsgIi51aS5hZGFwdGVycy5wcm9wZXJ0eXN0cmluZ3MubWVzc2FnZXMiOyAvLyROT04tTkxTLTEkCisKKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBSZXNvdXJjZUJ1bmRsZSBSRVNPVVJDRV9CVU5ETEUgPSBSZXNvdXJjZUJ1bmRsZQorCQkJLmdldEJ1bmRsZShCVU5ETEVfTkFNRSk7CisKKwlwcml2YXRlIE1lc3NhZ2VzKCkgeworCQkvLyBlbXB0eQorCX0KKworCS8qKgorCSAqIEBwYXJhbSBrZXkKKwkgKiAgICAgICAgICAgIHRoZSBrZXkgZm9yIHRoZSBtZXNzYWdlCisJICogQHJldHVybiB0aGUgc3RyaW5nIHRoYXQgbWF0Y2hlcyB0aGUga2V5CisJICovCisJcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0U3RyaW5nKFN0cmluZyBrZXkpIHsKKwkJdHJ5IHsKKwkJCXJldHVybiBSRVNPVVJDRV9CVU5ETEUuZ2V0U3RyaW5nKGtleSk7CisJCX0gY2F0Y2ggKE1pc3NpbmdSZXNvdXJjZUV4Y2VwdGlvbiBlKSB7CisJCQlyZXR1cm4gJyEnICsga2V5ICsgJyEnOworCQl9CisJfSAvLyBnZXRTdHJpbmcKK30gLy8gTWVzc2FnZXMKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9hZGFwdGVycy9wcm9wZXJ0eXN0cmluZ3MvUHJvcGVydHlTdHJpbmdQcm92aWRlci5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL2FkYXB0ZXJzL3Byb3BlcnR5c3RyaW5ncy9Qcm9wZXJ0eVN0cmluZ1Byb3ZpZGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGY3YWJmMgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9hZGFwdGVycy9wcm9wZXJ0eXN0cmluZ3MvUHJvcGVydHlTdHJpbmdQcm92aWRlci5qYXZhCkBAIC0wLDAgKzEsNTMgQEAKKy8vIFByb3BlcnR5U3RyaW5nUHJvdmlkZXIuamF2YQorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnVpLmFkYXB0ZXJzLnByb3BlcnR5c3RyaW5nczsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNywgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbVByb3BlcnR5RGVzY3JpcHRvcjsKKworLyoqCisgKiBUaGlzIGludGVyZmFjZSBpcyBpbXBsZW1lbnRlZCBieSBjbGFzc2VzIHRoYXQgcHJvdmlkZSBOTFMnZCBzdHJpbmdzIGZvcgorICoge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uSWRlbnRpZmlhYmxlfSBwcm9wZXJ0aWVzLgorICovCitwdWJsaWMgaW50ZXJmYWNlIFByb3BlcnR5U3RyaW5nUHJvdmlkZXIgeworCisJLyoqCisJICogVGhpcyBpcyB0aGUgc3VmZml4IGFwcGVuZGVkIHRvIHRoZSBuYW1lIG9mIGEgcHJvcGVydHkgdG8gY3JlYXRlIHRoZSBrZXkKKwkgKiB0byBleHRyYWN0IHRoZSB0b29sIHRpcCB0ZXh0IGZyb20gdGhlIG1lc3NhZ2UgcHJvcGVydHkgZmlsZS4KKwkgKi8KKwlTdHJpbmcgVFRfU1VGRklYID0gIlRUIjsgLy8kTk9OLU5MUy0xJAorCisJLyoqCisJICogVGhpcyBpcyB0aGUgc3VmZml4IGFwcGVuZGVkIHRvIHRoZSBuYW1lIG9mIGEgcHJvcGVydHkgdG8gY3JlYXRlIHRoZSBrZXkKKwkgKiB0byBleHRyYWN0IHRoZSB0ZXh0IGZyb20gdGhlIG1lc3NhZ2UgcHJvcGVydHkgZmlsZSB0aGF0IHJlcHJlc2VudHMgdGhlCisJICogdW5pdHMgb2YgYSBwcm9wZXJ0eS4KKwkgKi8KKwlTdHJpbmcgVU5JVF9TVUZGSVggPSAiVU5JVCI7IC8vJE5PTi1OTFMtMSQKKworCS8qKgorCSAqIEBwYXJhbSBkZXNjcmlwdG9yCisJICogQHJldHVybiB0aGUgTkxTJ2QgbmFtZSBvZiB0aGUgcHJvcGVydHkgdG8gZGlzcGxheSB0byB0aGUgdXNlcgorCSAqLworCVN0cmluZyBnZXRQcm9wZXJ0eU5hbWUoSUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IgZGVzY3JpcHRvcik7CisKKwkvKioKKwkgKiBAcGFyYW0gZGVzY3JpcHRvcgorCSAqIEByZXR1cm4gdGhlIE5MUydkIHRvb2wgdGlwIHRleHQgdGhhdCBkZXNjcmliZXMgdGhlIHByb3BlcnR5CisJICovCisJU3RyaW5nIGdldFByb3BlcnR5VG9vbFRpcChJSXRlbVByb3BlcnR5RGVzY3JpcHRvciBkZXNjcmlwdG9yKTsKKworCS8qKgorCSAqIEBwYXJhbSBkZXNjcmlwdG9yCisJICogQHJldHVybiB0aGUgTkxTJ2QgdGV4dCB0aGF0IHJlcHJlc2VudHMgdGhlIHVuaXRzIG9mIHRoZSBwcm9wZXJ0eQorCSAqLworCVN0cmluZyBnZXRQcm9wZXJ0eVVuaXRzKElJdGVtUHJvcGVydHlEZXNjcmlwdG9yIGRlc2NyaXB0b3IpOworfSAvLyBQcm9wZXJ0eVN0cmluZ1Byb3ZpZGVyCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvYWRhcHRlcnMvcHJvcGVydHlzdHJpbmdzL1Byb3BlcnR5U3RyaW5nUHJvdmlkZXJBZGFwdGVyLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvYWRhcHRlcnMvcHJvcGVydHlzdHJpbmdzL1Byb3BlcnR5U3RyaW5nUHJvdmlkZXJBZGFwdGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjExOTAxMgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9hZGFwdGVycy9wcm9wZXJ0eXN0cmluZ3MvUHJvcGVydHlTdHJpbmdQcm92aWRlckFkYXB0ZXIuamF2YQpAQCAtMCwwICsxLDMyIEBACisvLyBQcm9wZXJ0eVN0cmluZ1Byb3ZpZGVyQWRhcHRlci5qYXZhCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0udWkuYWRhcHRlcnMucHJvcGVydHlzdHJpbmdzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LmltcGwuQWRhcHRlckltcGw7CisKKy8qKgorICogVGhpcyBjbGFzcyBpcyBleHRlbmRlZCBieSBjbGFzc2VzIHRoYXQgcHJvdmlkZSBOTFMnZCBzdHJpbmcgZm9yIGRpc2Vhc2UgbW9kZWwKKyAqIHByb3BlcnRpZXMuCisgKi8KK3B1YmxpYyBhYnN0cmFjdCBjbGFzcyBQcm9wZXJ0eVN0cmluZ1Byb3ZpZGVyQWRhcHRlciBleHRlbmRzIEFkYXB0ZXJJbXBsCisJCWltcGxlbWVudHMgUHJvcGVydHlTdHJpbmdQcm92aWRlciB7CisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LmltcGwuQWRhcHRlckltcGwjaXNBZGFwdGVyRm9yVHlwZShqYXZhLmxhbmcuT2JqZWN0KQorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBib29sZWFuIGlzQWRhcHRlckZvclR5cGUoZmluYWwgT2JqZWN0IHR5cGUpIHsKKwkJcmV0dXJuIHR5cGUgPT0gUHJvcGVydHlTdHJpbmdQcm92aWRlci5jbGFzczsKKwl9CisKK30gLy8gUHJvcGVydHlTdHJpbmdQcm92aWRlckFkYXB0ZXIKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9hZGFwdGVycy9wcm9wZXJ0eXN0cmluZ3MvUHJvcGVydHlTdHJpbmdQcm92aWRlckFkYXB0ZXJGYWN0b3J5LmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvYWRhcHRlcnMvcHJvcGVydHlzdHJpbmdzL1Byb3BlcnR5U3RyaW5nUHJvdmlkZXJBZGFwdGVyRmFjdG9yeS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYwZTEzYjMKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvYWRhcHRlcnMvcHJvcGVydHlzdHJpbmdzL1Byb3BlcnR5U3RyaW5nUHJvdmlkZXJBZGFwdGVyRmFjdG9yeS5qYXZhCkBAIC0wLDAgKzEsMTAxIEBACisvLyBQcm9wZXJ0eVN0cmluZ1Byb3ZpZGVyQWRhcHRlckZhY3RvcnkuamF2YQorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnVpLmFkYXB0ZXJzLnByb3BlcnR5c3RyaW5nczsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5BZGFwdGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkNvbXBvc2VhYmxlQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuQ29tcG9zZWRBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JQ2hhbmdlTm90aWZpZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSURpc3Bvc2FibGU7CisKKy8qKgorICogVGhpcyBpbnRlcmZhY2UgaXMgaW1wbGVtZW50ZWQgYnkgY2xhc3NlcyB0aGF0IGNyZWF0ZSB7QGxpbmsgQWRhcHRlcn1zIHRoYXQKKyAqIGFkYXB0IHRoZSBwcm9wZXJ0aWVzIG9mIHtAbGluayAgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5JZGVudGlmaWFibGV9cyB0byBOTFMnZCB7QGxpbmsgU3RyaW5nfXMuCisgKi8KK3B1YmxpYyBpbnRlcmZhY2UgUHJvcGVydHlTdHJpbmdQcm92aWRlckFkYXB0ZXJGYWN0b3J5IHsKKworCS8qKgorCSAqIFRoaXMgaXMgdGhlIHNpbmdsZXRvbiBpbnN0YW5jZSBvZiB0aGUgZmFjdG9yeSB0aGF0IGNyZWF0ZXMKKwkgKiB7QGxpbmsgUHJvcGVydHlTdHJpbmdQcm92aWRlcn0gaW5zdGFuY2VzLgorCSAqIDxwPgorCSAqIFRoaXMgaW5zdGFuY2UgaXMgYSB7QGxpbmsgQ29tcG9zZWRBZGFwdGVyRmFjdG9yeX0gd2hpY2ggbWVhbnMgdGhhdCBpdAorCSAqIGNvbGxlY3RzIHRvZ2V0aGVyIG90aGVyIHtAbGluayBDb21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5fSBhZGFwdGVyCisJICogZmFjdG9yaWVzLiBFYWNoIGNsYXNzIHRoYXQgaW1wbGVtZW50cworCSAqIHtAbGluayBQcm9wZXJ0eVN0cmluZ1Byb3ZpZGVyQWRhcHRlckZhY3Rvcnl9IG5lZWRzIHRvIGFkZCBpdHNlbGYgdG8gdGhpcworCSAqIGluc3RhbmNlIHdpdGggYSBjYWxsIHRvCisJICoge0BsaW5rIENvbXBvc2VkQWRhcHRlckZhY3RvcnkjYWRkQWRhcHRlckZhY3Rvcnkob3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuQWRhcHRlckZhY3RvcnkpfS4KKwkgKiBUaGlzIHdpbGwgdGhlbiBhbGxvdyBhZGFwdGVycyBjcmVhdGVkIGJ5IHRoYXQgZmFjdG9yeSB0byBiZSBmb3VuZCB3aGVuCisJICogYWRhcHRpbmcgY2xhc3MgaW5zdGFuY2VzIGhhbmRsZWQgYnkgdGhlIG5ldyBmYWN0b3J5LgorCSAqIDxwPgorCSAqIEJhc2ljYWxseSwgaWYgeW91IGNyZWF0ZSBhbiBFTUYgbW9kZWwgYW5kIGRlZmluZSBhCisJICoge0BsaW5rIFByb3BlcnR5U3RyaW5nUHJvdmlkZXJBZGFwdGVyRmFjdG9yeX0gZm9yIGl0IHNvIHRoYXQgdGhlIGNsYXNzZXMKKwkgKiBpbiB0aGF0IG1vZGVsIGNhbiBiZSBhZGFwdGVkLCB5b3UgbmVlZCB0byBob29rIHRoYXQgZmFjdG9yeSBpbnRvIHRoaXMgb25lCisJICogc28gdGhhdCBsYXRlciB3aGVuIGFuIGF0dGVtcHQgaXMgbWFkZSB0byBhZGFwdCBhIGNsYXNzIGZyb20gdGhhdCBtb2RlbCBpcworCSAqIG1hZGUgdGhlIGFzc29jaWF0ZWQgZmFjdG9yeSB3aWxsIGJlIGZvdW5kLiBZb3UgY2FuIGRvIHRoYXQgYnkgYWRkaW5nIHRoZQorCSAqIGxpbmU6IDxjb2RlPgorCSAqIFByb3BlcnR5U3RyaW5nUHJvdmlkZXJBZGFwdGVyRmFjdG9yeS5JTlNUQU5DRS5hZGRBZGFwdGVyRmFjdG9yeSh0aGlzKTsKKwkgKiA8L2NvZGU+CisJICogdG8gdGhlIGRlZmF1bHQgY29uc3RydWN0b3Igb2YgdGhlIG5ldyBmYWN0b3J5IGFmdGVyIHRoZSBzdXBlciBjYWxsLgorCSAqIFlvdSdyZSBub3QgZG9uZSBob3dldmVyLCB5b3UgYWxzbyBoYXZlIHRvICJmb3JjZSIgYW4gaW5zdGFuY2Ugb2YgdGhlCisJICogY2xhc3MgdG8gYmUgY3JlYXRlZCBzbyB0aGF0IHRoZSBjb25zdHJ1Y3RvciBpcyBydW4uIFRoaXMgaXMgdHlwaWNhbGx5CisJICogYWNoaWV2ZWQgYnkgYWxsb2NhdGluZyBhbiBpbnN0YW5jZSBpbiB0aGUgPGNvZGU+c3RhcnQ8L2NvZGU+IG1ldGhvZCBvZgorCSAqIHRoZSA8Y29kZT5BY3RpdmF0b3I8L2NvZGU+IG9mIHRoZSBwbHVnLWluIHRoYXQgZGVmaW5lcyB0aGUgZmFjdG9yeS4KKwkgKi8KKwlQcm9wZXJ0eVN0cmluZ1Byb3ZpZGVyQWRhcHRlckZhY3RvcnlJbXBsIElOU1RBTkNFID0gbmV3IFByb3BlcnR5U3RyaW5nUHJvdmlkZXJBZGFwdGVyRmFjdG9yeUltcGwoKTsKKworCS8qKgorCSAqIFRoaXMgY2xhc3MgaXMgdGhlIGltcGxlbWVudGF0aW9uIG9mIHRoZSBmYWN0b3J5IHRoYXQgY3JlYXRlcworCSAqIHtAbGluayBQcm9wZXJ0eVN0cmluZ1Byb3ZpZGVyfSdzCisJICovCisJcHVibGljIHN0YXRpYyBjbGFzcyBQcm9wZXJ0eVN0cmluZ1Byb3ZpZGVyQWRhcHRlckZhY3RvcnlJbXBsIGV4dGVuZHMKKwkJCUNvbXBvc2VkQWRhcHRlckZhY3RvcnkgaW1wbGVtZW50cyBDb21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5LAorCQkJSUNoYW5nZU5vdGlmaWVyLCBJRGlzcG9zYWJsZSwgUHJvcGVydHlTdHJpbmdQcm92aWRlckFkYXB0ZXJGYWN0b3J5IHsKKworCQlwcml2YXRlIHN0YXRpYyBEZWZhdWx0UHJvcGVydHlTdHJpbmdQcm92aWRlckFkYXB0ZXIgREVGQVVMVF9QUk9QRVJUWV9TVFJJTkdfUFJPVklERVIgPSBuZXcgRGVmYXVsdFByb3BlcnR5U3RyaW5nUHJvdmlkZXJBZGFwdGVyKCk7CisKKwkJLyoqCisJCSAqIEBzZWUgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuQ29tcG9zZWRBZGFwdGVyRmFjdG9yeSNhZGFwdChvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmllciwKKwkJICogICAgICBqYXZhLmxhbmcuT2JqZWN0KQorCQkgKi8KKwkJQE92ZXJyaWRlCisJCXB1YmxpYyBBZGFwdGVyIGFkYXB0KGZpbmFsIE5vdGlmaWVyIHRhcmdldCwgZmluYWwgT2JqZWN0IHR5cGUpIHsKKwkJCXJldHVybiByZXR1cm5EZWZhdWx0SWZOZWVkZWQoc3VwZXIuYWRhcHQodGFyZ2V0LCB0eXBlKSk7CisJCX0KKworCQkvKioKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5Db21wb3NlZEFkYXB0ZXJGYWN0b3J5I2FkYXB0TmV3KG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWVyLAorCQkgKiAgICAgIGphdmEubGFuZy5PYmplY3QpCisJCSAqLworCQlAT3ZlcnJpZGUKKwkJcHVibGljIEFkYXB0ZXIgYWRhcHROZXcoZmluYWwgTm90aWZpZXIgdGFyZ2V0LCBmaW5hbCBPYmplY3QgdHlwZSkgeworCQkJcmV0dXJuIHJldHVybkRlZmF1bHRJZk5lZWRlZChzdXBlci5hZGFwdE5ldyh0YXJnZXQsIHR5cGUpKTsKKwkJfQorCisJCXByaXZhdGUgQWRhcHRlciByZXR1cm5EZWZhdWx0SWZOZWVkZWQoZmluYWwgQWRhcHRlciBhZGFwdGVyKSB7CisJCQlpZiAoYWRhcHRlciA9PSBudWxsKSB7CisJCQkJLy8gWWVzCisJCQkJcmV0dXJuIERFRkFVTFRfUFJPUEVSVFlfU1RSSU5HX1BST1ZJREVSOworCQkJfSAvLyBpZgorCQkJcmV0dXJuIGFkYXB0ZXI7CisJCX0gLy8gcmV0dXJuRGVmYXVsdElmTmVlZGVkCisKKwkJLyoqCisJCSAqIEBzZWUgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuQWRhcHRlckZhY3RvcnkjaXNGYWN0b3J5Rm9yVHlwZShqYXZhLmxhbmcuT2JqZWN0KQorCQkgKi8KKwkJQE92ZXJyaWRlCisJCXB1YmxpYyBib29sZWFuIGlzRmFjdG9yeUZvclR5cGUoZmluYWwgT2JqZWN0IHR5cGUpIHsKKwkJCXJldHVybiB0eXBlID09IFByb3BlcnR5U3RyaW5nUHJvdmlkZXIuY2xhc3M7CisJCX0KKwl9IC8vIFByb3BlcnR5U3RyaW5nUHJvdmlkZXJBZGFwdGVyRmFjdG9yeUltcGwKK30gLy8gUHJvcGVydHlTdHJpbmdQcm92aWRlckFkYXB0ZXJGYWN0b3J5CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvYWRhcHRlcnMvcHJvcGVydHlzdHJpbmdzL21lc3NhZ2VzLnByb3BlcnRpZXMgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvYWRhcHRlcnMvcHJvcGVydHlzdHJpbmdzL21lc3NhZ2VzLnByb3BlcnRpZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzlhNGU1OAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9hZGFwdGVycy9wcm9wZXJ0eXN0cmluZ3MvbWVzc2FnZXMucHJvcGVydGllcwpAQCAtMCwwICsxLDU1IEBACisjIG1lc3NhZ2VzLnByb3BlcnRpZXMKKyMKKyMvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIyAqIENvcHlyaWdodCAoYykgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyMgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisjICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisjICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyMgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorIyAqCisjICogQ29udHJpYnV0b3JzOgorIyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworIyBBcmVhIExhYmVscworYXJlYSA9IGFyZWEKK2FyZWFVTklUID0ga21eMgorYXJlYVRUID0gYXJlYQorCisjIFJvYWQgTGFiZWxzCityb2FkTmFtZSA9IFJvYWQgTmFtZQorcm9hZE5hbWVVTklUID0KK3JvYWROYW1lVFQgPSBUaGUgbmFtZSBvZiB0aGUgcm9hZC4gCityb2FkQ2xhc3MgPSBDbGFzcworcm9hZENsYXNzVU5JVCA9IAorcm9hZENsYXNzVFQgPSBUaGUgdHlwZSBvZiByb2FkLgorbnVtYmVyQ3Jvc3NpbmdzID0gTnVtYmVyIG9mIENyb3NzaW5ncworbnVtYmVyQ3Jvc3NpbmdzVU5JVCA9IGNyb3NzaW5ncworbnVtYmVyQ29yc3NpbmdzVFQgPSBUaGUgbnVtYmVyIG9mIGNyb3NzaW5ncy4KKworIyBQb3B1bGF0aW9uIExhYmVscworY291bnQgPSBDb3VudAorY291bnRVTklUID0gUE0KK2NvdW50VFQgPSBUaGUgbnVtYmVyIG9mIHBvcHVsYXRpb24gbWVtYmVycworcG9wdWxhdGlvbklkZW50aWZpZXIgPSBQb3B1bGF0aW9uCitwb3B1bGF0aW9uSWRlbnRpZmllclVOSVQgPSAKK3BvcHVsYXRpb25JZGVudGlmaWVyVFQgPSBUaGUgbmFtZSBvZiB0aGUgcG9wdWxhdGlvbi4KK25hbWUgPSBOYW1lCituYW1lVU5JVCA9IAorbmFtZVRUID0gVGhlIG5hbWUKK3BvcHVsYXRlZEFyZWEgPSBBcmVhCitwb3B1bGF0ZWRBcmVhVU5JVCA9IGttXjIKK3BvcHVsYXRlZEFyZWFUVCA9IFRoZSB2YWx1ZSB0byB1c2Ugd2hlbiBjb21wdXRpbmcgdGhlIHBvcHVsYXRpb24gZGVuc2l0eSAob3ZlcnJpZGVzIHJlZ2lvbiBhcmVhKS4KKworIyBSZWxhdGlvbnNoaXBzCitib3JkZXJMZW5ndGggPSBCb3JkZXIgTGVuZ3RoCitib3JkZXJMZW5ndGhVTklUID0ga20KK2JvcmRlckxlbmd0aFRUID0gVGhlIGxlbmd0aCBvZiB0aGUgYm9yZGVyIGJldHdlZW4gdHdvIGdlb2dyYXBoaWMgcmVnaW9ucy4KK2FkamFjZW50ID0gQWRqYWNlbnQKK2FkamFjZW50VU5JVCA9IAorYWRqYWNlbnRUVCA9IElmIFRydWUgdGhlbiB0aGUgdHdvIG5vZGVzIGFyZSBhZGphY2VudAorcmVsYXRpb25zaGlwID0gUmVsYXRpb25zaGlwCityZWxhdGlvbnNoaXBVTklUID0gCityZWxhdGlvbnNoaXBUVCA9IFRoZSB0eXBlIG9mIHJlbGF0aW9uc2hpcAorCisgCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvYWRhcHRlcnMvcHJvcGVydHlzdHJpbmdzL21lc3NhZ2VzX2RlLnByb3BlcnRpZXMgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvYWRhcHRlcnMvcHJvcGVydHlzdHJpbmdzL21lc3NhZ2VzX2RlLnByb3BlcnRpZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGM2N2Y2OQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9hZGFwdGVycy9wcm9wZXJ0eXN0cmluZ3MvbWVzc2FnZXNfZGUucHJvcGVydGllcwpAQCAtMCwwICsxLDU1IEBACisjIG1lc3NhZ2VzLnByb3BlcnRpZXMKKyMKKyMvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIyAqIENvcHlyaWdodCAoYykgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyMgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisjICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisjICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyMgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorIyAqCisjICogQ29udHJpYnV0b3JzOgorIyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworIyBBcmVhIExhYmVscworYXJlYT1GbFx1MDBlNGNoZQorYXJlYVVOSVQ9a21eMgorYXJlYVRUPUZsXHUwMGU0Y2hlCisKKyMgUm9hZCBMYWJlbHMKK3JvYWROYW1lPVN0cmFcdTAwZGZlbm5hbWUKK3JvYWROYW1lVU5JVD0KK3JvYWROYW1lVFQ9RGVyIE5hbWUgZGVyIFN0cmFcdTAwZGZlLgorcm9hZENsYXNzPUtsYXNzZQorcm9hZENsYXNzVU5JVD0KK3JvYWRDbGFzc1RUPURpZSBBcnQgZGVyIFN0cmFcdTAwZGZlLgorbnVtYmVyQ3Jvc3NpbmdzPUFuemFobCBkZXIgS3JldXp1bmdlbgorbnVtYmVyQ3Jvc3NpbmdzVU5JVD1LcmV1enVuZ2VuCitudW1iZXJDb3Jzc2luZ3NUVD1EaWUgQW56YWhsIGRlciBLcmV1enVuZ2VuLgorCisjIFBvcHVsYXRpb24gTGFiZWxzCitjb3VudD1BbnphaGwKK2NvdW50VU5JVD1QTQorY291bnRUVD1EaWUgQW56YWhsIGRlciBCZXZcdTAwZjZsa2VydW5nc21pdGdsaWVkZXJuCitwb3B1bGF0aW9uSWRlbnRpZmllcj1CZXZcdTAwZjZsa2VydW5nCitwb3B1bGF0aW9uSWRlbnRpZmllclVOSVQ9Citwb3B1bGF0aW9uSWRlbnRpZmllclRUPURlciBOYW1lIGRlciBCZXZcdTAwZjZsa2VydW5nLgorbmFtZT1OYW1lCituYW1lVU5JVD0KK25hbWVUVD1EZXIgTmFtZQorcG9wdWxhdGVkQXJlYT1GbFx1MDBlNGNoZQorcG9wdWxhdGVkQXJlYVVOSVQ9a21eMgorcG9wdWxhdGVkQXJlYVRUPURlciBiZWkgZGVyIEJlcmVjaG51bmcgZGVyIEJldlx1MDBmNmxrZXJ1bmdzZGljaHRlIHp1IGJlbnV0emVuZGUgV2VydCAoXHUwMGZjYmVyc2NocmVpYnQgRmxcdTAwZTRjaGVuLUJlcmVpY2gpLgorCisjIFJlbGF0aW9uc2hpcHMKK2JvcmRlckxlbmd0aD1HcmVuemxcdTAwZTRuZ2UKK2JvcmRlckxlbmd0aFVOSVQ9a20KK2JvcmRlckxlbmd0aFRUPURpZSBMXHUwMGU0bmdlIGRlciBHcmVuemUgendpc2NoZW4gendlaSBnZW9ncmFmaXNjaGVuIFJlZ2lvbmVuLgorYWRqYWNlbnQ9QW5ncmVuemVuZAorYWRqYWNlbnRVTklUPQorYWRqYWNlbnRUVD1XZW5uIFdhaHIgZGFubiBzaW5kIGRpZSB6d2VpIEtub3RlbiBiZW5hY2hiYXJ0CityZWxhdGlvbnNoaXA9QmV6aWVodW5nCityZWxhdGlvbnNoaXBVTklUPQorcmVsYXRpb25zaGlwVFQ9RGllIEFydCBkZXIgQmV6aWVodW5nCisKKyAKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9hZGFwdGVycy9wcm9wZXJ0eXN0cmluZ3MvbWVzc2FnZXNfa3IucHJvcGVydGllcyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9hZGFwdGVycy9wcm9wZXJ0eXN0cmluZ3MvbWVzc2FnZXNfa3IucHJvcGVydGllcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YTY2YTdkCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL2FkYXB0ZXJzL3Byb3BlcnR5c3RyaW5ncy9tZXNzYWdlc19rci5wcm9wZXJ0aWVzCkBAIC0wLDAgKzEsNTUgQEAKKyMgbWVzc2FnZXMucHJvcGVydGllcworIworIy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjICogQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorIyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyMgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyMgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorIyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisjICoKKyMgKiBDb250cmlidXRvcnM6CisjICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorIyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjIEFyZWEgTGFiZWxzCithcmVhPVx1YzljMFx1YzVlZAorYXJlYVVOSVQ9a20gXiAyCithcmVhVFQ9XHVjOWMwXHVjNWVkCisKKyMgUm9hZCBMYWJlbHMKK3JvYWROYW1lPVx1YjNjNFx1Yjg1YyBcdWM3NzRcdWI5ODQKK3JvYWROYW1lVU5JVD0KK3JvYWROYW1lVFQ9XHViM2M0XHViODVjIFx1Yzc3NFx1Yjk4NAorcm9hZENsYXNzPUNsYXNzCityb2FkQ2xhc3NVTklUPQorcm9hZENsYXNzVFQ9XHViM2M0XHViODVjIFx1YzcyMFx1ZDYxNQorbnVtYmVyQ3Jvc3NpbmdzPVx1YWQ1MFx1Y2MyOCBcdWFjMmZcdWMyMTgKK251bWJlckNyb3NzaW5nc1VOSVQ9XHVhZDUwXHVjYzI4CitudW1iZXJDb3Jzc2luZ3NUVD1cdWQ2YTFcdWIyZTggXHVhYzFjXHVjMjE4CisKKyMgUG9wdWxhdGlvbiBMYWJlbHMKK2NvdW50PVx1ZDY5Zlx1YzIxOAorY291bnRVTklUPVBNCitjb3VudFRUPVx1Yzc3OFx1YWQ2YyBcdWFjMWNcdWNjYjRcdWFkNzAgXHVjMjJiXHVjNzkwCitwb3B1bGF0aW9uSWRlbnRpZmllcj1cdWM3NzhcdWFkNmMKK3BvcHVsYXRpb25JZGVudGlmaWVyVU5JVD0KK3BvcHVsYXRpb25JZGVudGlmaWVyVFQ9XHVjNzc4XHVhZDZjXHVjNzU4IFx1Yzc3NFx1Yjk4NAorbmFtZT1cdWM3NzRcdWI5ODQKK25hbWVVTklUPQorbmFtZVRUPVx1Yzc3NFx1Yjk4NAorcG9wdWxhdGVkQXJlYT1cdWM5YzBcdWM1ZWQKK3BvcHVsYXRlZEFyZWFVTklUPWttIF4gMgorcG9wdWxhdGVkQXJlYVRUPVx1Yzc3OFx1YWQ2YyBcdWJjMDBcdWIzYzQgXHVhY2M0XHVjMGIwIFx1YzJkYyBcdWMwYWNcdWM2YTlcdWQ1NjAgXHVhYzEyIChcdWM5YzBcdWM1ZWQgXHViYTc0XHVjODAxIFx1YmIzNFx1YzJkY1x1ZDU2OCkKKworIyBSZWxhdGlvbnNoaXBzCitib3JkZXJMZW5ndGg9XHVkMTRjXHViNDUwXHViOWFjIFx1YWUzOFx1Yzc3NAorYm9yZGVyTGVuZ3RoVU5JVD1rbQorYm9yZGVyTGVuZ3RoVFQ9XHViNDUwIFx1YzljMFx1YzVlZCBcdWFjMDRcdWM3NTggXHVhY2JkXHVhY2M0IFx1YWUzOFx1Yzc3NC4KK2FkamFjZW50PVx1Yzc3OFx1YzgxMQorYWRqYWNlbnRVTklUPQorYWRqYWNlbnRUVD1cdWI5Y2NcdWM1N2QgVHJ1ZVx1Yzc3NFx1YmE3NCBcdWI0NTAgXHViMTc4XHViNGRjXHViMjk0IFx1Yzc3OFx1YzgxMVx1ZDU2OAorcmVsYXRpb25zaGlwPVx1YWQwMFx1YWNjNAorcmVsYXRpb25zaGlwVU5JVD0KK3JlbGF0aW9uc2hpcFRUPVx1YWQwMFx1YWNjNCBcdWM3MjBcdWQ2MTUKKworIApkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL2FkYXB0ZXJzL3Byb3BlcnR5c3RyaW5ncy9tZXNzYWdlc196aC5wcm9wZXJ0aWVzIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL2FkYXB0ZXJzL3Byb3BlcnR5c3RyaW5ncy9tZXNzYWdlc196aC5wcm9wZXJ0aWVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEzNDZmNjAKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvYWRhcHRlcnMvcHJvcGVydHlzdHJpbmdzL21lc3NhZ2VzX3poLnByb3BlcnRpZXMKQEAgLTAsMCArMSw2MSBAQAorIyBtZXNzYWdlcy5wcm9wZXJ0aWVzCisjCisjLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyMgKiBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisjICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworIyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorIyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisjICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyMgKgorIyAqIENvbnRyaWJ1dG9yczoKKyMgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisjICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyMgQXJlYSBMYWJlbHMKK2FyZWE9XHU1NzMwXHU1MzNhCithcmVhVU5JVD1cdTVlNzNcdTY1YjlcdTUxNmNcdTkxY2MKK2FyZWFUVD1cdTU3MzBcdTUzM2EKKworIyBSb2FkIExhYmVscworcm9hZE5hbWU9XHU4ZGVmXHU1NDBkCityb2FkTmFtZVVOSVQ9Cityb2FkTmFtZVRUPVx1OGRlZlx1NTQwZAorcm9hZENsYXNzPVx1N2M3Ygorcm9hZENsYXNzVU5JVD0KK3JvYWRDbGFzc1RUPVx1OTA1M1x1OGRlZlx1N2M3Ylx1NTc4Ylx1MzAwMgorbnVtYmVyQ3Jvc3NpbmdzPVx1N2E3Zlx1OGZjN1x1OGZiOVx1NzU0Y1x1NzY4NFx1OGRlZlx1NzY4NFx1NjU3MFx1OTFjZgorbnVtYmVyQ3Jvc3NpbmdzVU5JVD1cdTdhN2ZcdTY4YWQKK251bWJlckNvcnNzaW5nc1RUPVx1NTcyOFx1OGZiOVx1NzU0Y1x1N2E3Zlx1NjhhZFx1NzY4NFx1NjU3MFx1NzZlZQorCisjIFBvcHVsYXRpb24gTGFiZWxzCitjb3VudD1cdThiYTFcdTY1NzAKK2NvdW50VU5JVD1QTQorY291bnRUVD1cdTc5Y2RcdTdmYTRcdTYyMTBcdTU0NThcdTc2ODRcdTY1NzBcdTc2ZWUKK3BvcHVsYXRpb25JZGVudGlmaWVyPVx1NzljZFx1N2ZhNAorcG9wdWxhdGlvbklkZW50aWZpZXJVTklUPQorcG9wdWxhdGlvbklkZW50aWZpZXJUVD1cdTc5Y2RcdTdmYTRcdTc2ODRcdTU0MGRcdTc5ZjAKK25hbWU9XHU1NDBkXHU3OWYwCituYW1lVU5JVD0KK25hbWVUVD1cdTU0MGRcdTc5ZjAKK3BvcHVsYXRlZEFyZWE9XHU5NzYyXHU3OWVmCitwb3B1bGF0ZWRBcmVhVU5JVD1cdTVlNzNcdTY1YjlcdTUxNmNcdTkxY2MKK3BvcHVsYXRlZEFyZWFUVD1cdThiYTFcdTdiOTdcdTc2ODRcdTc5Y2RcdTdmYTRcdTViYzZcdTVlYTZcdTY2MmZcdTg5ODFcdTRmN2ZcdTc1MjhcdTc2ODRcdTUwM2NcdWZmMDhcdTg5ODZcdTc2ZDZcdTUzM2FcdTU3ZGZcdTc2ODRcdTk3NjJcdTc5ZWZcdWZmMDlcdTMwMDIKKworIyBSZWxhdGlvbnNoaXBzCitib3JkZXJMZW5ndGg9XHU4ZmI5XHU3NTRjXHU5NTdmXHU1ZWE2Citib3JkZXJMZW5ndGhVTklUPVx1NTE2Y1x1OTFjYworYm9yZGVyTGVuZ3RoVFQ9XHU4MDBjXHU0ZTI0XHU0ZTJhXHU1NzMwXHU3NDA2XHU1MzNhXHU1N2RmXHU0ZTRiXHU5NWY0XHU3Njg0XHU4ZmI5XHU3NTRjXHU5NTdmXHU1ZWE2XHUzMDAyCithZGphY2VudD1cdTc2ZjhcdTkwYmIKK2FkamFjZW50VU5JVD0KK2FkamFjZW50VFQ9XHU1OTgyXHU2NzljXHU2NjJmXHU3NzFmXHU1MjE5XHU0ZTI0XHU0ZTJhXHU4MjgyXHU3MGI5XHU2NjJmXHU3NmY4XHU5MGJiXHU3Njg0CityZWxhdGlvbnNoaXA9XHU1MTczXHU3Y2ZiCityZWxhdGlvbnNoaXBVTklUPQorcmVsYXRpb25zaGlwVFQ9XHU1MTczXHU3Y2ZiXHU3YzdiXHU1NzhiCisKKyMgTWlncmF0aW9uIGVkZ2UgbGFiZWxzCittaWdyYXRpb25SYXRlPVx1OGZjMVx1NzlmYlx1NzM4NworbWlncmF0aW9uUmF0ZVVOSVQ9RnJhY3Rpb24gLyBUUAorbWlncmF0aW9uUmF0ZVRUPVRoZSBmcmFjdGlvbiBvZiBwb3B1bGF0aW9uIG1pZ3JhdGluZyBvbiB0aGUgZWRnZSBwZXIgdGltZSBwZXJpb2QKKworCisgCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvZWRpdG9ycy9HZW5lcmljUHJvcGVydHlFZGl0b3IuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9lZGl0b3JzL0dlbmVyaWNQcm9wZXJ0eUVkaXRvci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIzYTVlODYKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvZWRpdG9ycy9HZW5lcmljUHJvcGVydHlFZGl0b3IuamF2YQpAQCAtMCwwICsxLDUyNyBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnVpLmVkaXRvcnM7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTAgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CitpbXBvcnQgamF2YS51dGlsLk1hcDsKK2ltcG9ydCBqYXZhLnV0aWwuU3RyaW5nVG9rZW5pemVyOworaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuVVJJOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3NpZmllcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRVN0cnVjdHVyYWxGZWF0dXJlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FY29yZVBhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuQ29tcG9zZWRBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbVByb3BlcnR5RGVzY3JpcHRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbVByb3BlcnR5U291cmNlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5TVEVNVVJJOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uQ29tbW9uUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLklkZW50aWZpYWJsZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnVpLmFkYXB0ZXJzLnByb3BlcnR5c3RyaW5ncy5Qcm9wZXJ0eVN0cmluZ1Byb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udWkuYWRhcHRlcnMucHJvcGVydHlzdHJpbmdzLlByb3BlcnR5U3RyaW5nUHJvdmlkZXJBZGFwdGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udWkuYWRhcHRlcnMucHJvcGVydHlzdHJpbmdzLlByb3BlcnR5U3RyaW5nUHJvdmlkZXJBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnVpLndpZGdldHMuTG9jYXRpb25QaWNrZXJEaWFsb2c7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS51aS53aXphcmRzLk1lc3NhZ2VzOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5TV1Q7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5Nb2RpZnlMaXN0ZW5lcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLlNlbGVjdGlvbkFkYXB0ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5TZWxlY3Rpb25FdmVudDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLlNlbGVjdGlvbkxpc3RlbmVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5sYXlvdXQuRmlsbExheW91dDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QubGF5b3V0LkdyaWREYXRhOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5sYXlvdXQuR3JpZExheW91dDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QubGF5b3V0LlJvd0xheW91dDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5CdXR0b247CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkRpcmVjdG9yeURpYWxvZzsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5GaWxlRGlhbG9nOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkxhYmVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlNoZWxsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlRleHQ7CisKKy8qKgorICogUHJvZHVjaW5nIGEgZm9ybSBnaXZlbiBhbiBpZGVudGlmaWFibGUgb2JqZWN0IGlzIGNvbW1vbiBpbiBTVEVNLiBUaGlzIGNsYXNzCisgKiBjb25zb2xpZGF0ZXMgd2hhdCB1c2VkIHRvIGJlIGEgaGFuZGZ1bCBvZiBwbGFjZXMgd2UgZG8gdGhpcyBpbnRvIGEgc2luZ2xlCisgKiBwbGFjZS4KKyAqIAorICovCisKK3B1YmxpYyBhYnN0cmFjdCBjbGFzcyBHZW5lcmljUHJvcGVydHlFZGl0b3IgZXh0ZW5kcyBDb21wb3NpdGUgeworCXByb3RlY3RlZCBmaW5hbCBNYXA8RVN0cnVjdHVyYWxGZWF0dXJlLCBUZXh0PiBtYXAgPSBuZXcgSGFzaE1hcDxFU3RydWN0dXJhbEZlYXR1cmUsIFRleHQ+KCk7CisJcHJvdGVjdGVkIGZpbmFsIE1hcDxFU3RydWN0dXJhbEZlYXR1cmUsIEJ1dHRvbj4gYm9vbGVhbk1hcCA9IG5ldyBIYXNoTWFwPEVTdHJ1Y3R1cmFsRmVhdHVyZSwgQnV0dG9uPigpOworCisJcHJvdGVjdGVkIFN0cmluZyBlcnJvck1lc3NhZ2U7CisJcHJvdGVjdGVkIElQcm9qZWN0IHByb2plY3Q7CisKKwlwdWJsaWMgR2VuZXJpY1Byb3BlcnR5RWRpdG9yKENvbXBvc2l0ZSBwYXJlbnQsIGludCBzdHlsZSwgSVByb2plY3QgcHJvamVjdCkgeworCQlzdXBlcihwYXJlbnQsIHN0eWxlKTsKKwkJdGhpcy5wcm9qZWN0ID0gcHJvamVjdDsKKwl9CisKKwkvKioKKwkgKiBDcmVhdGUgdGhlIGNvbXBvc2l0ZQorCSAqIAorCSAqIEBwYXJhbSBwYXJlbnQKKwkgKiBAcGFyYW0gc3R5bGUKKwkgKiBAcGFyYW0gcHJvamVjdFZhbGlkYXRvcgorCSAqLworCXB1YmxpYyBHZW5lcmljUHJvcGVydHlFZGl0b3IoZmluYWwgQ29tcG9zaXRlIHBhcmVudCwgZmluYWwgaW50IHN0eWxlLAorCQkJZmluYWwgSWRlbnRpZmlhYmxlIGlkZW50aWZpYWJsZSwKKwkJCWZpbmFsIE1vZGlmeUxpc3RlbmVyIHByb2plY3RWYWxpZGF0b3IsIElQcm9qZWN0IHByb2plY3QpIHsKKwkJc3VwZXIocGFyZW50LCBzdHlsZSk7CisJCXRoaXMucHJvamVjdCA9IHByb2plY3Q7CisKKwkJZmluYWwgR3JpZExheW91dCBncmlkTGF5b3V0ID0gbmV3IEdyaWRMYXlvdXQoKTsKKwkJZ3JpZExheW91dC5udW1Db2x1bW5zID0gMzsKKwkJc2V0TGF5b3V0KGdyaWRMYXlvdXQpOworCisJCS8vIEdldCB0aGUgYWRhcHRlciB0aGF0IHdpbGwgcHJvdmlkZSBOTFMnZCBuYW1lcyBmb3IgdGhlCisJCS8vIHByb3BlcnRpZXMgb2YgdGhlIGRpc2Vhc2UgbW9kZWwKKwkJZmluYWwgUHJvcGVydHlTdHJpbmdQcm92aWRlckFkYXB0ZXIgcHNwYSA9IChQcm9wZXJ0eVN0cmluZ1Byb3ZpZGVyQWRhcHRlcikgUHJvcGVydHlTdHJpbmdQcm92aWRlckFkYXB0ZXJGYWN0b3J5LklOU1RBTkNFCisJCQkJLmFkYXB0KGlkZW50aWZpYWJsZSwgUHJvcGVydHlTdHJpbmdQcm92aWRlci5jbGFzcyk7CisKKwkJZmluYWwgQ29tcG9zZWRBZGFwdGVyRmFjdG9yeSBpdGVtUHJvdmlkZXJGYWN0b3J5ID0gbmV3IENvbXBvc2VkQWRhcHRlckZhY3RvcnkoCisJCQkJQ29tcG9zZWRBZGFwdGVyRmFjdG9yeS5EZXNjcmlwdG9yLlJlZ2lzdHJ5LklOU1RBTkNFKTsKKworCQlmaW5hbCBJSXRlbVByb3BlcnR5U291cmNlIHByb3BlcnR5U291cmNlID0gKElJdGVtUHJvcGVydHlTb3VyY2UpIGl0ZW1Qcm92aWRlckZhY3RvcnkKKwkJCQkuYWRhcHQoaWRlbnRpZmlhYmxlLCBJSXRlbVByb3BlcnR5U291cmNlLmNsYXNzKTsKKwkJZmluYWwgTGlzdDxJSXRlbVByb3BlcnR5RGVzY3JpcHRvcj4gcHJvcGVydGllcyA9IHByb3BlcnR5U291cmNlCisJCQkJLmdldFByb3BlcnR5RGVzY3JpcHRvcnMoaWRlbnRpZmlhYmxlKTsKKworCQlmb3IgKGZpbmFsIElJdGVtUHJvcGVydHlEZXNjcmlwdG9yIGRlc2NyaXB0b3IgOiBwcm9wZXJ0aWVzKSB7CisJCQlmaW5hbCBFU3RydWN0dXJhbEZlYXR1cmUgZmVhdHVyZSA9IChFU3RydWN0dXJhbEZlYXR1cmUpIGRlc2NyaXB0b3IKKwkJCQkJLmdldEZlYXR1cmUobnVsbCk7CisJCQlFQ2xhc3NpZmllciBjbGFzc2lmaWVyID0gZmVhdHVyZS5nZXRFVHlwZSgpOworCisJCQkvLyBJcyB0aGlzIGEgZGlzZWFzZSBtb2RlbCBwcm9wZXJ0eSB0aGF0IHRoZSB1c2VyIHNob3VsZCBzcGVjaWZ5PworCQkJaWYgKCFpc1VzZXJTcGVjaWZpZWRQcm9wZXJ0eShmZWF0dXJlKSkgeworCQkJCWNvbnRpbnVlOworCQkJfQorCisJCQlpZiAoY2xhc3NpZmllciAhPSBFY29yZVBhY2thZ2UuTGl0ZXJhbHMuRUJPT0xFQU4KKwkJCQkJJiYgY2xhc3NpZmllciAhPSBDb21tb25QYWNrYWdlLkxpdGVyYWxzLlVSSQorCQkJCQkmJiBjbGFzc2lmaWVyICE9IEVjb3JlUGFja2FnZS5MaXRlcmFscy5FU0hPUlQKKwkJCQkJJiYgY2xhc3NpZmllciAhPSBFY29yZVBhY2thZ2UuTGl0ZXJhbHMuRUlOVAorCQkJCQkmJiBjbGFzc2lmaWVyICE9IEVjb3JlUGFja2FnZS5MaXRlcmFscy5FTE9ORworCQkJCQkmJiBjbGFzc2lmaWVyICE9IEVjb3JlUGFja2FnZS5MaXRlcmFscy5FRkxPQVQKKwkJCQkJJiYgY2xhc3NpZmllciAhPSBFY29yZVBhY2thZ2UuTGl0ZXJhbHMuRURPVUJMRQorCQkJCQkmJiBjbGFzc2lmaWVyICE9IEVjb3JlUGFja2FnZS5MaXRlcmFscy5FU1RSSU5HKSB7CisJCQkJY29udGludWU7CisJCQl9CisKKwkJCWJvb2xlYW4gaXNEYXRhUGF0aCA9IGZhbHNlOworCQkJYm9vbGVhbiBpc1VSSSA9IGZhbHNlOworCisJCQlmaW5hbCBMYWJlbCBsYWJlbCA9IG5ldyBMYWJlbCh0aGlzLCBTV1QuTk9ORSk7CisJCQlsYWJlbC5zZXRUZXh0KHBzcGEuZ2V0UHJvcGVydHlOYW1lKGRlc2NyaXB0b3IpKTsKKworCQkJZmluYWwgR3JpZERhdGEgbGFiZWxHRCA9IG5ldyBHcmlkRGF0YShHcmlkRGF0YS5CRUdJTk5JTkcpOworCQkJbGFiZWxHRC5ncmFiRXhjZXNzSG9yaXpvbnRhbFNwYWNlID0gdHJ1ZTsKKwkJCWxhYmVsR0QuaG9yaXpvbnRhbEFsaWdubWVudCA9IFNXVC5GSUxMOworCQkJbGFiZWxHRC5ob3Jpem9udGFsSW5kZW50ID0gMDsKKwkJCWxhYmVsLnNldExheW91dERhdGEobGFiZWxHRCk7CisKKwkJCS8vIEdldCBhIHN0cmluZyB2YWx1ZSBmb3IgdGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlIGZlYXR1cmUKKwkJCWZpbmFsIFN0cmluZyBkZWZhdWx0VmFsdWVTdHJpbmcgPSBnZXRQcm9wZXJ0eURlZmF1bHRWYWx1ZVN0cmluZyhkZXNjcmlwdG9yKTsKKworCQkJaWYgKGNsYXNzaWZpZXIgPT0gRWNvcmVQYWNrYWdlLkxpdGVyYWxzLkVCT09MRUFOKSB7CisJCQkJQ29tcG9zaXRlIHJhZGlvQ29tcG9zaXRlID0gbmV3IENvbXBvc2l0ZSh0aGlzLCBTV1QuQk9SREVSKTsKKwkJCQlGaWxsTGF5b3V0IGZpbGxMYXlvdXQgPSBuZXcgRmlsbExheW91dCgpOworCQkJCWZpbGxMYXlvdXQudHlwZSA9IFNXVC5IT1JJWk9OVEFMOworCQkJCXJhZGlvQ29tcG9zaXRlLnNldExheW91dChmaWxsTGF5b3V0KTsKKworCQkJCWZpbmFsIEJ1dHRvbiBmYWxzZUJ1dHRvbiA9IG5ldyBCdXR0b24ocmFkaW9Db21wb3NpdGUsIFNXVC5SQURJTyk7CisJCQkJZmFsc2VCdXR0b24uc2V0VGV4dChNZXNzYWdlcy5nZXRTdHJpbmcoIk5PIikpOy8vJE5PTi1OTFMtMSQKKworCQkJCUJ1dHRvbiB0cnVlQnV0dG9uID0gbmV3IEJ1dHRvbihyYWRpb0NvbXBvc2l0ZSwgU1dULlJBRElPKTsKKwkJCQl0cnVlQnV0dG9uLnNldFRleHQoTWVzc2FnZXMuZ2V0U3RyaW5nKCJZRVMiKSk7Ly8kTk9OLU5MUy0xJAorCisJCQkJaWYgKGRlZmF1bHRWYWx1ZVN0cmluZyAhPSBudWxsKSB7CisJCQkJCXRydWVCdXR0b24uc2V0U2VsZWN0aW9uKGRlZmF1bHRWYWx1ZVN0cmluZy5lcXVhbHMoInRydWUiKSk7CisJCQkJCWZhbHNlQnV0dG9uCisJCQkJCQkJLnNldFNlbGVjdGlvbighZGVmYXVsdFZhbHVlU3RyaW5nLmVxdWFscygidHJ1ZSIpKTsKKwkJCQl9IGVsc2UgeworCQkJCQlmYWxzZUJ1dHRvbi5zZXRTZWxlY3Rpb24odHJ1ZSk7CisJCQkJCXRydWVCdXR0b24uc2V0U2VsZWN0aW9uKGZhbHNlKTsKKwkJCQl9CisKKwkJCQlib29sZWFuTWFwLnB1dChmZWF0dXJlLCB0cnVlQnV0dG9uKTsKKworCQkJCWZpbmFsIEdyaWREYXRhIGNHRCA9IG5ldyBHcmlkRGF0YShHcmlkRGF0YS5FTkQpOworCQkJCWNHRC5ncmFiRXhjZXNzSG9yaXpvbnRhbFNwYWNlID0gdHJ1ZTsKKwkJCQljR0QuaG9yaXpvbnRhbEFsaWdubWVudCA9IFNXVC5GSUxMOworCQkJCXJhZGlvQ29tcG9zaXRlLnNldExheW91dERhdGEoY0dEKTsKKwkJCX0gZWxzZSBpZiAoY2xhc3NpZmllciA9PSBDb21tb25QYWNrYWdlLkxpdGVyYWxzLlVSSSkgeworCQkJCS8vIEJyaW5nIHVwIGxvY2F0aW9uIHBpY2tlciBmb3IgVVJJJ3MKKwkJCQlpc1VSSSA9IHRydWU7CisKKwkJCQlmaW5hbCBUZXh0IGlzb2tleVZhbHVlVGV4dCA9IG5ldyBUZXh0KHRoaXMsIFNXVC5OT05FKTsKKwkJCQlpc29rZXlWYWx1ZVRleHQuc2V0VGV4dCgiIik7CisJCQkJbWFwLnB1dChmZWF0dXJlLCBpc29rZXlWYWx1ZVRleHQpOworCisJCQkJZmluYWwgR3JpZERhdGEgZ2RfaXNvS2V5TGFiZWxWYWx1ZSA9IG5ldyBHcmlkRGF0YShTV1QuRklMTCwKKwkJCQkJCVNXVC5DRU5URVIsIHRydWUsIGZhbHNlKTsKKwkJCQlpc29rZXlWYWx1ZVRleHQuc2V0TGF5b3V0RGF0YShnZF9pc29LZXlMYWJlbFZhbHVlKTsKKworCQkJCWZpbmFsIEJ1dHRvbiBsb2NhdGlvbkJ1dHRvbiA9IG5ldyBCdXR0b24odGhpcywgU1dULk5PTkUpOworCQkJCWxvY2F0aW9uQnV0dG9uLnNldFRleHQoTWVzc2FnZXMuZ2V0U3RyaW5nKCJOUGlja0xvYyIpKTsKKwkJCQlmaW5hbCBHcmlkRGF0YSBsYl9pc29LZXlMYWJlbCA9IG5ldyBHcmlkRGF0YShTV1QuRklMTCwKKwkJCQkJCVNXVC5DRU5URVIsIHRydWUsIGZhbHNlKTsKKwkJCQlsb2NhdGlvbkJ1dHRvbi5zZXRMYXlvdXREYXRhKGxiX2lzb0tleUxhYmVsKTsKKworCQkJCWxvY2F0aW9uQnV0dG9uLmFkZFNlbGVjdGlvbkxpc3RlbmVyKG5ldyBTZWxlY3Rpb25MaXN0ZW5lcigpIHsKKworCQkJCQlwdWJsaWMgdm9pZCB3aWRnZXRTZWxlY3RlZChTZWxlY3Rpb25FdmVudCBhcmcwKSB7CisJCQkJCQlMb2NhdGlvblBpY2tlckRpYWxvZyBscERpYWxvZyA9IG5ldyBMb2NhdGlvblBpY2tlckRpYWxvZygKKwkJCQkJCQkJR2VuZXJpY1Byb3BlcnR5RWRpdG9yLnRoaXMuZ2V0U2hlbGwoKSwKKwkJCQkJCQkJU1dULk5PTkUsIE1lc3NhZ2VzLmdldFN0cmluZygiTlBpY2tMb2NUaXRsZSIpLAorCQkJCQkJCQlpc29rZXlWYWx1ZVRleHQuZ2V0VGV4dCgpLAorCQkJCQkJCQlHZW5lcmljUHJvcGVydHlFZGl0b3IudGhpcy5wcm9qZWN0KTsKKworCQkJCQkJT2JqZWN0W10gcmV0ID0gbHBEaWFsb2cub3BlbigpOworCQkJCQkJaWYgKHJldCAhPSBudWxsKSB7CisJCQkJCQkJaWYgKHJldFsxXSAhPSBudWxsKQorCQkJCQkJCQlpc29rZXlWYWx1ZVRleHQuc2V0VGV4dCgoKFVSSSkgcmV0WzFdKQorCQkJCQkJCQkJCS50b1N0cmluZygpKTsKKwkJCQkJCQllbHNlCisJCQkJCQkJCWlzb2tleVZhbHVlVGV4dC5zZXRUZXh0KFNURU1VUkkuY3JlYXRlVVJJKAorCQkJCQkJCQkJCSJub2RlL2dlby9yZWdpb24vIiArICgoU3RyaW5nKSByZXRbMF0pKQorCQkJCQkJCQkJCS50b1N0cmluZygpKTsKKwkJCQkJCX0KKwkJCQkJfQorCisJCQkJCXB1YmxpYyB2b2lkIHdpZGdldERlZmF1bHRTZWxlY3RlZChTZWxlY3Rpb25FdmVudCBhcmcwKSB7CisKKwkJCQkJfQorCQkJCX0pOworCQkJfSBlbHNlIGlmIChjbGFzc2lmaWVyID09IEVjb3JlUGFja2FnZS5MaXRlcmFscy5FU0hPUlQKKwkJCQkJfHwgY2xhc3NpZmllciA9PSBFY29yZVBhY2thZ2UuTGl0ZXJhbHMuRUlOVAorCQkJCQl8fCBjbGFzc2lmaWVyID09IEVjb3JlUGFja2FnZS5MaXRlcmFscy5FTE9ORworCQkJCQl8fCBjbGFzc2lmaWVyID09IEVjb3JlUGFja2FnZS5MaXRlcmFscy5FRkxPQVQKKwkJCQkJfHwgY2xhc3NpZmllciA9PSBFY29yZVBhY2thZ2UuTGl0ZXJhbHMuRURPVUJMRQorCQkJCQl8fCBjbGFzc2lmaWVyID09IEVjb3JlUGFja2FnZS5MaXRlcmFscy5FU1RSSU5HKSB7CisJCQkJVGV4dCB0ZXh0ID0gbmV3IFRleHQodGhpcywgU1dULkJPUkRFUiB8IFNXVC5UUkFJTCk7CisJCQkJaWYgKGRlZmF1bHRWYWx1ZVN0cmluZyAhPSBudWxsKQorCQkJCQl0ZXh0LnNldFRleHQoZGVmYXVsdFZhbHVlU3RyaW5nKTsKKwkJCQl0ZXh0LnNldFRvb2xUaXBUZXh0KHBzcGEuZ2V0UHJvcGVydHlUb29sVGlwKGRlc2NyaXB0b3IpKTsKKwkJCQltYXAucHV0KGZlYXR1cmUsIHRleHQpOworCisJCQkJZmluYWwgR3JpZERhdGEgdGV4dEdEID0gbmV3IEdyaWREYXRhKEdyaWREYXRhLkVORCk7CisJCQkJdGV4dEdELmdyYWJFeGNlc3NIb3Jpem9udGFsU3BhY2UgPSB0cnVlOworCQkJCXRleHRHRC5ob3Jpem9udGFsQWxpZ25tZW50ID0gU1dULkZJTEw7CisJCQkJdGV4dC5zZXRMYXlvdXREYXRhKHRleHRHRCk7CisKKwkJCQl0ZXh0LmFkZE1vZGlmeUxpc3RlbmVyKHByb2plY3RWYWxpZGF0b3IpOworCisJCQkJaWYgKGZlYXR1cmUuZ2V0TmFtZSgpLmVxdWFscygiZGF0YVBhdGgiKSkgeyAvLyROT04tTkxTLTEkCisJCQkJCWlzRGF0YVBhdGggPSB0cnVlOworCQkJCQlmaW5hbCBDb21wb3NpdGUgYnV0dG9ucyA9IG5ldyBDb21wb3NpdGUodGhpcywgU1dULk5PTkUpOworCQkJCQlmaW5hbCBSb3dMYXlvdXQgYnV0dG9uc0xheW91dCA9IG5ldyBSb3dMYXlvdXQoKTsKKwkJCQkJYnV0dG9uc0xheW91dC5tYXJnaW5Ub3AgPSAwOworCQkJCQlidXR0b25zTGF5b3V0Lm1hcmdpbkJvdHRvbSA9IDA7CisJCQkJCWJ1dHRvbnMuc2V0TGF5b3V0KGJ1dHRvbnNMYXlvdXQpOworCQkJCQlmaW5hbCBTaGVsbCBzaGVsbCA9IHRoaXMuZ2V0U2hlbGwoKTsKKworCQkJCQlmaW5hbCBCdXR0b24gZmlsZUNob29zZXJCdXR0b24gPSBuZXcgQnV0dG9uKGJ1dHRvbnMsCisJCQkJCQkJU1dULk5PTkUpOworCQkJCQlmaWxlQ2hvb3NlckJ1dHRvbi5zZXRUZXh0KE1lc3NhZ2VzCisJCQkJCQkJLmdldFN0cmluZygiZmlsZUNob29zZXJCdXR0b25UZXh0IikpOyAvLyROT04tTkxTLTEkCisJCQkJCWZpbGVDaG9vc2VyQnV0dG9uLnNldFRvb2xUaXBUZXh0KE1lc3NhZ2VzCisJCQkJCQkJLmdldFN0cmluZygiZmlsZUNob29zZXJCdXR0b25Ub29sdGlwVGV4dCIpKTsgLy8kTk9OLU5MUy0xJAorCQkJCQlmaW5hbCBUZXh0IF90ZXh0ID0gdGV4dDsKKwkJCQkJZmlsZUNob29zZXJCdXR0b24KKwkJCQkJCQkuYWRkU2VsZWN0aW9uTGlzdGVuZXIobmV3IFNlbGVjdGlvbkFkYXB0ZXIoKSB7CisJCQkJCQkJCUBPdmVycmlkZQorCQkJCQkJCQlwdWJsaWMgdm9pZCB3aWRnZXRTZWxlY3RlZCgKKwkJCQkJCQkJCQlmaW5hbCBTZWxlY3Rpb25FdmVudCBlKSB7CisJCQkJCQkJCQlmaW5hbCBGaWxlRGlhbG9nIGZkID0gbmV3IEZpbGVEaWFsb2coc2hlbGwsCisJCQkJCQkJCQkJCVNXVC5PUEVOIHwgU1dULk1VTFRJKTsKKwkJCQkJCQkJCWZkLnNldFRleHQoTWVzc2FnZXMKKwkJCQkJCQkJCQkJLmdldFN0cmluZygiZmlsZUNob29zZXJEaWFsb2dUaXRsZSIpKTsgLy8kTk9OLU5MUy0xJAorCQkJCQkJCQkJZmluYWwgU3RyaW5nW10gZXh0ZW5zaW9uc0ZpbHRlciA9IHsKKwkJCQkJCQkJCQkJIioudHh0IiwgIiouY3N2IiB9OworCQkJCQkJCQkJZmQuc2V0RmlsdGVyRXh0ZW5zaW9ucyhleHRlbnNpb25zRmlsdGVyKTsKKworCQkJCQkJCQkJLy8gU3RyaW5nIGZvcm1hdCBmb3Igc2luZ2xlIHNlbGVjdGVkCisJCQkJCQkJCQkvLyBmaWxlCisJCQkJCQkJCQkvLyB3aWxsIGJlOgorCQkJCQkJCQkJLy8gInBhdGgvZmlsZV9uYW1lIgorCQkJCQkJCQkJLy8gRm9yIG11bHRpLWZpbGVzIHRoZSBmb3JtYXQgd2lsbCBiZToKKwkJCQkJCQkJCS8vICJwYXRoL2ZpbGVfbmFtZTEiICJmaWxlX25hbWUyIgorCQkJCQkJCQkJLy8gImZpbGVfbmFtZTMiLi4uCisKKwkJCQkJCQkJCVN0cmluZyBzZWxlY3RlZCA9ICJcIiIgKyBmZC5vcGVuKCkgKyAiXCIiOworCQkJCQkJCQkJZmluYWwgU3RyaW5nW10gc2VsZWN0ZWRGaWxlcyA9IGZkCisJCQkJCQkJCQkJCS5nZXRGaWxlTmFtZXMoKTsKKwkJCQkJCQkJCWlmIChzZWxlY3RlZEZpbGVzLmxlbmd0aCA+IDEpIHsgLy8gaWYKKwkJCQkJCQkJCQkvLyBtdWx0aS1maWxlcworCQkJCQkJCQkJCS8vIHNlbGVjdGVkCisJCQkJCQkJCQkJU3RyaW5nQnVpbGRlciBzdHIgPSBuZXcgU3RyaW5nQnVpbGRlcigKKwkJCQkJCQkJCQkJCXNlbGVjdGVkKTsKKwkJCQkJCQkJCQlmb3IgKGludCBpID0gMTsgaSA8IHNlbGVjdGVkRmlsZXMubGVuZ3RoOyBpKyspIHsKKwkJCQkJCQkJCQkJc3RyLmFwcGVuZCgiIFwiIik7CisJCQkJCQkJCQkJCXN0ci5hcHBlbmQoc2VsZWN0ZWRGaWxlc1tpXSk7CisJCQkJCQkJCQkJCXN0ci5hcHBlbmQoIlwiIik7CisJCQkJCQkJCQkJCS8vIHNlbGVjdGVkICs9ICIgXCIiCisJCQkJCQkJCQkJCS8vICsgc2VsZWN0ZWRGaWxlc1tpXSArICJcIiI7CisJCQkJCQkJCQkJfQorCQkJCQkJCQkJCXNlbGVjdGVkID0gc3RyLnRvU3RyaW5nKCk7CisJCQkJCQkJCQl9CisJCQkJCQkJCQlfdGV4dC5zZXRUZXh0KHNlbGVjdGVkKTsKKwkJCQkJCQkJfSAvLyB3aWRnZXRTZWxlY3RlZAorCQkJCQkJCX0gLy8gU2VsZWN0aW9uQWRhcHRlcgorCQkJCQkJCSk7CisKKwkJCQkJZmluYWwgQnV0dG9uIGRpckNob29zZXJCdXR0b24gPSBuZXcgQnV0dG9uKGJ1dHRvbnMsCisJCQkJCQkJU1dULk5PTkUpOworCQkJCQlkaXJDaG9vc2VyQnV0dG9uLnNldFRleHQoTWVzc2FnZXMKKwkJCQkJCQkuZ2V0U3RyaW5nKCJkaXJDaG9vc2VyQnV0dG9uVGV4dCIpKTsgLy8kTk9OLU5MUy0xJAorCQkJCQlkaXJDaG9vc2VyQnV0dG9uLnNldFRvb2xUaXBUZXh0KE1lc3NhZ2VzCisJCQkJCQkJLmdldFN0cmluZygiZGlyQ2hvb3NlckJ1dHRvblRvb2x0aXBUZXh0IikpOyAvLyROT04tTkxTLTEkCisJCQkJCWRpckNob29zZXJCdXR0b24KKwkJCQkJCQkuYWRkU2VsZWN0aW9uTGlzdGVuZXIobmV3IFNlbGVjdGlvbkFkYXB0ZXIoKSB7CisJCQkJCQkJCUBPdmVycmlkZQorCQkJCQkJCQlwdWJsaWMgdm9pZCB3aWRnZXRTZWxlY3RlZCgKKwkJCQkJCQkJCQlmaW5hbCBTZWxlY3Rpb25FdmVudCBlKSB7CisJCQkJCQkJCQlmaW5hbCBEaXJlY3RvcnlEaWFsb2cgZGQgPSBuZXcgRGlyZWN0b3J5RGlhbG9nKAorCQkJCQkJCQkJCQlzaGVsbCwgU1dULk9QRU4pOworCQkJCQkJCQkJZGQuc2V0VGV4dChNZXNzYWdlcworCQkJCQkJCQkJCQkuZ2V0U3RyaW5nKCJkaXJDaG9vc2VyRGlhbG9nVGl0bGUiKSk7IC8vJE5PTi1OTFMtMSQKKwkJCQkJCQkJCWZpbmFsIFN0cmluZyBzZWxlY3RlZCA9IGRkLm9wZW4oKTsKKwkJCQkJCQkJCV90ZXh0LnNldFRleHQoc2VsZWN0ZWQpOworCQkJCQkJCQl9IC8vIHdpZGdldFNlbGVjdGVkCisJCQkJCQkJfSAvLyBTZWxlY3Rpb25BZGFwdGVyCisJCQkJCQkJKTsKKworCQkJCQlmaW5hbCBHcmlkRGF0YSBmaWxlQnRuR0QgPSBuZXcgR3JpZERhdGEoR3JpZERhdGEuRU5EKTsKKwkJCQkJLy8gZmlsZUNob29zZXJCdXR0b24uc2V0TGF5b3V0RGF0YShmaWxlQnRuR0QpOworCQkJCQlidXR0b25zLnNldExheW91dERhdGEoZmlsZUJ0bkdEKTsKKwkJCQl9IGVsc2UgaWYgKGZlYXR1cmUuZ2V0TmFtZSgpLnN0YXJ0c1dpdGgoImRhdGFGaWxlIikpIHsgLy8kTk9OLU5MUy0xJAorCQkJCQlpc0RhdGFQYXRoID0gdHJ1ZTsKKwkJCQkJZmluYWwgQ29tcG9zaXRlIGJ1dHRvbnMgPSBuZXcgQ29tcG9zaXRlKHRoaXMsIFNXVC5OT05FKTsKKwkJCQkJZmluYWwgUm93TGF5b3V0IGJ1dHRvbnNMYXlvdXQgPSBuZXcgUm93TGF5b3V0KCk7CisJCQkJCWJ1dHRvbnNMYXlvdXQubWFyZ2luVG9wID0gMDsKKwkJCQkJYnV0dG9uc0xheW91dC5tYXJnaW5Cb3R0b20gPSAwOworCQkJCQlidXR0b25zLnNldExheW91dChidXR0b25zTGF5b3V0KTsKKwkJCQkJZmluYWwgU2hlbGwgc2hlbGwgPSB0aGlzLmdldFNoZWxsKCk7CisKKwkJCQkJZmluYWwgQnV0dG9uIGZpbGVDaG9vc2VyQnV0dG9uID0gbmV3IEJ1dHRvbihidXR0b25zLAorCQkJCQkJCVNXVC5OT05FKTsKKwkJCQkJZmlsZUNob29zZXJCdXR0b24uc2V0VGV4dChNZXNzYWdlcworCQkJCQkJCS5nZXRTdHJpbmcoImZpbGVDaG9vc2VyQnV0dG9uVGV4dCIpKTsgLy8kTk9OLU5MUy0xJAorCQkJCQlmaWxlQ2hvb3NlckJ1dHRvbi5zZXRUb29sVGlwVGV4dChNZXNzYWdlcworCQkJCQkJCS5nZXRTdHJpbmcoImZpbGVDaG9vc2VyQnV0dG9uVG9vbHRpcFRleHQiKSk7IC8vJE5PTi1OTFMtMSQKKwkJCQkJZmluYWwgVGV4dCBfdGV4dCA9IHRleHQ7CisJCQkJCWZpbGVDaG9vc2VyQnV0dG9uCisJCQkJCQkJLmFkZFNlbGVjdGlvbkxpc3RlbmVyKG5ldyBTZWxlY3Rpb25BZGFwdGVyKCkgeworCQkJCQkJCQlAT3ZlcnJpZGUKKwkJCQkJCQkJcHVibGljIHZvaWQgd2lkZ2V0U2VsZWN0ZWQoCisJCQkJCQkJCQkJZmluYWwgU2VsZWN0aW9uRXZlbnQgZSkgeworCQkJCQkJCQkJZmluYWwgRmlsZURpYWxvZyBmZCA9IG5ldyBGaWxlRGlhbG9nKHNoZWxsLAorCQkJCQkJCQkJCQlTV1QuT1BFTiB8IFNXVC5TSU5HTEUpOworCQkJCQkJCQkJZmQuc2V0VGV4dChNZXNzYWdlcworCQkJCQkJCQkJCQkuZ2V0U3RyaW5nKCJmaWxlQ2hvb3NlckRpYWxvZ1RpdGxlIikpOyAvLyROT04tTkxTLTEkCisJCQkJCQkJCQlTdHJpbmdUb2tlbml6ZXIgdG9rID0gbmV3IFN0cmluZ1Rva2VuaXplcigKKwkJCQkJCQkJCQkJZmVhdHVyZS5nZXROYW1lKCksICJfIik7CisJCQkJCQkJCQlWZWN0b3I8U3RyaW5nPiB2ID0gbmV3IFZlY3RvcjxTdHJpbmc+KCk7CisJCQkJCQkJCQl0b2submV4dFRva2VuKCk7CisJCQkJCQkJCQl3aGlsZSAodG9rLmhhc01vcmVUb2tlbnMoKSkgeworCQkJCQkJCQkJCXYuYWRkKCIqLiIgKyB0b2submV4dFRva2VuKCkpOworCQkJCQkJCQkJfQorCQkJCQkJCQkJdi5hZGQoIioiKTsKKwkJCQkJCQkJCWZpbmFsIFN0cmluZ1tdIGV4dGVuc2lvbnNGaWx0ZXIgPSBuZXcgU3RyaW5nW3YKKwkJCQkJCQkJCQkJLnNpemUoKV07CisJCQkJCQkJCQlmZC5zZXRGaWx0ZXJFeHRlbnNpb25zKHYKKwkJCQkJCQkJCQkJLnRvQXJyYXkoZXh0ZW5zaW9uc0ZpbHRlcikpOworCisJCQkJCQkJCQlfdGV4dC5zZXRUZXh0KGZkLm9wZW4oKSk7CisJCQkJCQkJCX0gLy8gd2lkZ2V0U2VsZWN0ZWQKKwkJCQkJCQl9IC8vIFNlbGVjdGlvbkFkYXB0ZXIKKwkJCQkJCQkpOworCisJCQkJCWZpbmFsIEdyaWREYXRhIGZpbGVCdG5HRCA9IG5ldyBHcmlkRGF0YShHcmlkRGF0YS5FTkQpOworCQkJCQkvLyBmaWxlQ2hvb3NlckJ1dHRvbi5zZXRMYXlvdXREYXRhKGZpbGVCdG5HRCk7CisJCQkJCWJ1dHRvbnMuc2V0TGF5b3V0RGF0YShmaWxlQnRuR0QpOworCQkJCX0KKwkJCX0KKwkJCWlmICghaXNEYXRhUGF0aCAmJiAhaXNVUkkpIHsKKwkJCQlmaW5hbCBMYWJlbCB1bml0TGFiZWwgPSBuZXcgTGFiZWwodGhpcywgU1dULk5PTkUpOworCQkJCXVuaXRMYWJlbC5zZXRUZXh0KHBzcGEuZ2V0UHJvcGVydHlVbml0cyhkZXNjcmlwdG9yKSk7CisJCQkJZmluYWwgR3JpZERhdGEgdW5pdExhYmVsR0QgPSBuZXcgR3JpZERhdGEoR3JpZERhdGEuRU5EKTsKKwkJCQl1bml0TGFiZWxHRC52ZXJ0aWNhbEFsaWdubWVudCA9IEdyaWREYXRhLkNFTlRFUjsKKwkJCQl1bml0TGFiZWwuc2V0TGF5b3V0RGF0YSh1bml0TGFiZWxHRCk7CisJCQl9CisJCX0gLy8gZm9yIGVhY2ggZGlzZWFzZSBtb2RlbCBwcm9wZXJ0eQorCisJfSAvLyBHcmFwaEdlbmVyYXRvclByb3BlcnR5RWRpdG9yCisKKwkvKioKKwkgKiBAcmV0dXJuIDxjb2RlPnRydWU8L2NvZGU+IGlmIHRoZSBjb250ZW50cyBhcmUgdmFsaWQsIDxjb2RlPmZhbHNlPC9jb2RlPgorCSAqICAgICAgICAgb3RoZXJ3aXNlLgorCSAqLworCXByb3RlY3RlZCBhYnN0cmFjdCBib29sZWFuIHZhbGlkYXRlKCk7CisKKwkvKioKKwkgKiBAcGFyYW0gZmVhdHVyZQorCSAqIEByZXR1cm4gPGNvZGU+dHJ1ZTwvY29kZT4gaWYgdGhlIGZlYXR1cmUgaXMgYSBkdWJsaW4gY29yZSBmZWF0dXJlIHRoYXQgaXMKKwkgKiAgICAgICAgIHNwZWNpZmllZCBieSBhIHVzZXIuCisJICovCisJcHJvdGVjdGVkIGFic3RyYWN0IGJvb2xlYW4gaXNVc2VyU3BlY2lmaWVkUHJvcGVydHkoCisJCQlmaW5hbCBFU3RydWN0dXJhbEZlYXR1cmUgZmVhdHVyZSk7CisKKwlwcm90ZWN0ZWQgYm9vbGVhbiBpc1ZhbGlkTG9uZ1ZhbHVlKGZpbmFsIFN0cmluZyB0ZXh0KSB7CisJCWJvb2xlYW4gcmV0VmFsdWUgPSB0cnVlOworCQl0cnkgeworCQkJTG9uZy5wYXJzZUxvbmcodGV4dCk7CisJCX0gY2F0Y2ggKGZpbmFsIE51bWJlckZvcm1hdEV4Y2VwdGlvbiBuZmUpIHsKKwkJCXJldFZhbHVlID0gZmFsc2U7CisJCX0gLy8gY2F0Y2ggUGFyc2VFeGNlcHRpb24KKwkJcmV0dXJuIHJldFZhbHVlOworCX0KKwkKKwkvKioKKwkgKiBAcGFyYW0gdGV4dAorCSAqIEBwYXJhbSBtaW5WYWx1ZQorCSAqIEByZXR1cm4KKwkgKi8KKwlwcm90ZWN0ZWQgYm9vbGVhbiBpc1ZhbGlkTG9uZ1ZhbHVlKGZpbmFsIFN0cmluZyB0ZXh0LCBmaW5hbCBsb25nIG1pblZhbHVlKSB7CisJCWJvb2xlYW4gcmV0VmFsdWUgPSB0cnVlOworCQl0cnkgeworCQkJZmluYWwgZG91YmxlIHZhbHVlID0gTG9uZy5wYXJzZUxvbmcodGV4dCk7CisJCQlyZXRWYWx1ZSA9IHZhbHVlID49IG1pblZhbHVlOworCQl9IGNhdGNoIChmaW5hbCBOdW1iZXJGb3JtYXRFeGNlcHRpb24gbmZlKSB7CisJCQlyZXRWYWx1ZSA9IGZhbHNlOworCQl9IC8vIGNhdGNoIFBhcnNlRXhjZXB0aW9uCisJCXJldHVybiByZXRWYWx1ZTsKKwl9CisKKwkvKioKKwkgKiBAcGFyYW0gdGV4dAorCSAqIEByZXR1cm4KKwkgKi8KKwlwcm90ZWN0ZWQgYm9vbGVhbiBpc1ZhbGlkUGVyY2VudGFnZShmaW5hbCBTdHJpbmcgdGV4dCkgeworCQlib29sZWFuIHJldFZhbHVlID0gdHJ1ZTsKKwkJdHJ5IHsKKwkJCWZpbmFsIGRvdWJsZSB2YWx1ZSA9IERvdWJsZS5wYXJzZURvdWJsZSh0ZXh0KTsKKwkJCXJldFZhbHVlID0gdmFsdWUgPj0gMC4wICYmIHZhbHVlIDw9IDEwMC47CisJCX0gY2F0Y2ggKGZpbmFsIE51bWJlckZvcm1hdEV4Y2VwdGlvbiBuZmUpIHsKKwkJCXJldFZhbHVlID0gZmFsc2U7CisJCX0gLy8gY2F0Y2ggUGFyc2VFeGNlcHRpb24KKwkJcmV0dXJuIHJldFZhbHVlOworCX0KKworCS8qKgorCSAqIEBwYXJhbSB0ZXh0CisJICogQHBhcmFtIG1pblZhbHVlCisJICogQHJldHVybgorCSAqLworCXByb3RlY3RlZCBib29sZWFuIGlzVmFsaWRWYWx1ZShmaW5hbCBTdHJpbmcgdGV4dCwgZmluYWwgZG91YmxlIG1pblZhbHVlKSB7CisJCWJvb2xlYW4gcmV0VmFsdWUgPSB0cnVlOworCQl0cnkgeworCQkJZmluYWwgZG91YmxlIHZhbHVlID0gRG91YmxlLnBhcnNlRG91YmxlKHRleHQpOworCQkJcmV0VmFsdWUgPSB2YWx1ZSA+PSBtaW5WYWx1ZTsKKwkJfSBjYXRjaCAoZmluYWwgTnVtYmVyRm9ybWF0RXhjZXB0aW9uIG5mZSkgeworCQkJcmV0VmFsdWUgPSBmYWxzZTsKKwkJfSAvLyBjYXRjaCBQYXJzZUV4Y2VwdGlvbgorCQlyZXR1cm4gcmV0VmFsdWU7CisJfSAvLyBpc1ZhbGlkUmF0ZQorCisJLyoqCisJICogQHBhcmFtIHRleHQKKwkgKiBAcGFyYW0gbWluVmFsdWUKKwkgKiBAcmV0dXJuCisJICovCisJcHJvdGVjdGVkIGJvb2xlYW4gaXNWYWxpZEludFZhbHVlKGZpbmFsIFN0cmluZyB0ZXh0LCBmaW5hbCBpbnQgbWluVmFsdWUpIHsKKwkJYm9vbGVhbiByZXRWYWx1ZSA9IHRydWU7CisJCXRyeSB7CisJCQlmaW5hbCBkb3VibGUgdmFsdWUgPSBJbnRlZ2VyLnBhcnNlSW50KHRleHQpOworCQkJcmV0VmFsdWUgPSB2YWx1ZSA+PSBtaW5WYWx1ZTsKKwkJfSBjYXRjaCAoZmluYWwgTnVtYmVyRm9ybWF0RXhjZXB0aW9uIG5mZSkgeworCQkJcmV0VmFsdWUgPSBmYWxzZTsKKwkJfSAvLyBjYXRjaCBQYXJzZUV4Y2VwdGlvbgorCQlyZXR1cm4gcmV0VmFsdWU7CisJfSAvLyBpc1ZhbGlkSW50UmF0ZQorCQorCXByb3RlY3RlZCBib29sZWFuIGlzVmFsaWREb3VibGVWYWx1ZShmaW5hbCBTdHJpbmcgdGV4dCkgeworCQlib29sZWFuIHJldFZhbHVlID0gdHJ1ZTsKKwkJdHJ5IHsKKwkJCURvdWJsZS5wYXJzZURvdWJsZSh0ZXh0KTsKKwkJfSBjYXRjaCAoZmluYWwgTnVtYmVyRm9ybWF0RXhjZXB0aW9uIG5mZSkgeworCQkJcmV0VmFsdWUgPSBmYWxzZTsKKwkJfSAvLyBjYXRjaCBQYXJzZUV4Y2VwdGlvbgorCQlyZXR1cm4gcmV0VmFsdWU7CisJfSAvLyBpc1ZhbGlkRG91YmxlVmFsdWUKKworCS8qKgorCSAqIEBwYXJhbSB0ZXh0CisJICogQHBhcmFtIG1pblZhbHVlCisJICogQHJldHVybgorCSAqLworCXByb3RlY3RlZCBib29sZWFuIGlzVmFsaWREb3VibGVWYWx1ZShmaW5hbCBTdHJpbmcgdGV4dCwgZmluYWwgZG91YmxlIG1pblZhbHVlKSB7CisJCWJvb2xlYW4gcmV0VmFsdWUgPSB0cnVlOworCQl0cnkgeworCQkJZmluYWwgZG91YmxlIHZhbHVlID0gRG91YmxlLnBhcnNlRG91YmxlKHRleHQpOworCQkJcmV0VmFsdWUgPSB2YWx1ZSA+PSBtaW5WYWx1ZTsKKwkJfSBjYXRjaCAoZmluYWwgTnVtYmVyRm9ybWF0RXhjZXB0aW9uIG5mZSkgeworCQkJcmV0VmFsdWUgPSBmYWxzZTsKKwkJfSAvLyBjYXRjaCBQYXJzZUV4Y2VwdGlvbgorCQlyZXR1cm4gcmV0VmFsdWU7CisJfSAvLyBpc1ZhbGlkRG91YmxlVmFsdWUKKwkKKwkvKioKKwkgKiBAcGFyYW0gdGV4dAorCSAqIEBwYXJhbSBtaW5WYWx1ZQorCSAqIEByZXR1cm4KKwkgKi8KKwlwcm90ZWN0ZWQgYm9vbGVhbiBpc1ZhbGlkRG91YmxlVmFsdWUoZmluYWwgU3RyaW5nIHRleHQsIGZpbmFsIGRvdWJsZSBtaW5WYWx1ZSwgZmluYWwgZG91YmxlIG1heFZhbHVlKSB7CisJCWJvb2xlYW4gcmV0VmFsdWUgPSB0cnVlOworCQl0cnkgeworCQkJZmluYWwgZG91YmxlIHZhbHVlID0gRG91YmxlLnBhcnNlRG91YmxlKHRleHQpOworCQkJcmV0VmFsdWUgPSB2YWx1ZSA+PSBtaW5WYWx1ZSAmJiB2YWx1ZSA8PSBtYXhWYWx1ZTsKKwkJfSBjYXRjaCAoZmluYWwgTnVtYmVyRm9ybWF0RXhjZXB0aW9uIG5mZSkgeworCQkJcmV0VmFsdWUgPSBmYWxzZTsKKwkJfSAvLyBjYXRjaCBQYXJzZUV4Y2VwdGlvbgorCQlyZXR1cm4gcmV0VmFsdWU7CisJfSAvLyBpc1ZhbGlkRG91YmxlVmFsdWUKKworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGRpc3Bvc2UoKSB7CisJCXN1cGVyLmRpc3Bvc2UoKTsKKwl9CisKKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgdm9pZCBjaGVja1N1YmNsYXNzKCkgeworCQkvLyBEaXNhYmxlIHRoZSBjaGVjayB0aGF0IHByZXZlbnRzIHN1Yi1jbGFzc2luZyBvZiBTV1QgY29tcG9uZW50cworCX0KKworCS8qKgorCSAqIEBwYXJhbSBkZXNjcmlwdG9yCisJICogQHJldHVybiB0aGUgc3RyaW5nIHRoYXQgcmVwcmVzZW50cyB0aGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgcHJvcGVydHkKKwkgKi8KKwlwcm90ZWN0ZWQgU3RyaW5nIGdldFByb3BlcnR5RGVmYXVsdFZhbHVlU3RyaW5nKAorCQkJZmluYWwgSUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IgZGVzY3JpcHRvcikgeworCQlmaW5hbCBFU3RydWN0dXJhbEZlYXR1cmUgZmVhdHVyZSA9IChFU3RydWN0dXJhbEZlYXR1cmUpIGRlc2NyaXB0b3IKKwkJCQkuZ2V0RmVhdHVyZShudWxsKTsKKworCQlyZXR1cm4gZmVhdHVyZS5nZXREZWZhdWx0VmFsdWVMaXRlcmFsKCk7CisJfQorCisJLyoqCisJICogQHJldHVybiB0aGUgZXJyb3IgbWVzc2FnZSB0aGF0IGRlc2NyaWJlcyB0aGUgcHJvYmxlbSB3aXRoIHRoZSBjb250ZW50cworCSAqLworCXB1YmxpYyBTdHJpbmcgZ2V0RXJyb3JNZXNzYWdlKCkgeworCQlyZXR1cm4gZXJyb3JNZXNzYWdlOworCX0KKworfSAvLyBHZW5lcmljUHJvcGVydHlFZGl0b3IKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9lZGl0b3JzL0lkZW50aWZpYWJsZUFjdGlvbkJhckNvbnRyaWJ1dG9yLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvZWRpdG9ycy9JZGVudGlmaWFibGVBY3Rpb25CYXJDb250cmlidXRvci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAzYTE4MzkKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvZWRpdG9ycy9JZGVudGlmaWFibGVBY3Rpb25CYXJDb250cmlidXRvci5qYXZhCkBAIC0wLDAgKzEsMzk2IEBACisvLyBJZGVudGlmaWFibGVBY3Rpb25CYXJDb250cmlidXRvci5qYXZhCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0udWkuZWRpdG9yczsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OworaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51aS52aWV3ZXIuSVZpZXdlclByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LmRvbWFpbi5FZGl0aW5nRG9tYWluOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LmRvbWFpbi5JRWRpdGluZ0RvbWFpblByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmFjdGlvbi5Db250cm9sQWN0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmFjdGlvbi5DcmVhdGVDaGlsZEFjdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5hY3Rpb24uQ3JlYXRlU2libGluZ0FjdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5hY3Rpb24uRWRpdGluZ0RvbWFpbkFjdGlvbkJhckNvbnRyaWJ1dG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmFjdGlvbi5Mb2FkUmVzb3VyY2VBY3Rpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkuYWN0aW9uLlZhbGlkYXRlQWN0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5BY3Rpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLkFjdGlvbkNvbnRyaWJ1dGlvbkl0ZW07CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklBY3Rpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklDb250cmlidXRpb25JdGVtOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JQ29udHJpYnV0aW9uTWFuYWdlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSU1lbnVMaXN0ZW5lcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSU1lbnVNYW5hZ2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JVG9vbEJhck1hbmFnZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLk1lbnVNYW5hZ2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5TZXBhcmF0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLlN1YkNvbnRyaWJ1dGlvbkl0ZW07CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb25Qcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTdHJ1Y3R1cmVkU2VsZWN0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuU2VsZWN0aW9uQ2hhbmdlZEV2ZW50OworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuVmlld2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udWkuQWN0aXZhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklFZGl0b3JQYXJ0OworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLlBhcnRJbml0RXhjZXB0aW9uOworCisvKioKKyAqIFRoaXMgY2xhc3MgdGhlIGFjdGlvbiBiYXIgY29udHJpYnV0b3IgZm9yIHRoZSBJZGVudGlmaWFibGUgbW9kZWwgZWRpdG9yLiBJdAorICogaXMgYmFzaWNhbGx5IGEgY29weSBvZiB0aGUgRU1GIGdlbmVyYXRlZCB2ZXJzaW9uIG9mIHRoaXMgY29kZS4gSXQgaGFzIGJlZW4KKyAqIHNsaWdodGx5IG1vZGlmaWVkIGJ5IG1ha2luZyBzb21lIHN0cmluZ3MgbW9yZSBnZW5lcmljLgorICovCitwdWJsaWMgY2xhc3MgSWRlbnRpZmlhYmxlQWN0aW9uQmFyQ29udHJpYnV0b3IgZXh0ZW5kcworCQlFZGl0aW5nRG9tYWluQWN0aW9uQmFyQ29udHJpYnV0b3IgaW1wbGVtZW50cyBJU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyIHsKKworCS8qKgorCSAqIFRoaXMga2VlcHMgdHJhY2sgb2YgdGhlIGFjdGl2ZSBlZGl0b3IuCisJICovCisJcHJvdGVjdGVkIElFZGl0b3JQYXJ0IGFjdGl2ZUVkaXRvclBhcnQ7CisKKwkvKioKKwkgKiBUaGlzIGtlZXBzIHRyYWNrIG9mIHRoZSBjdXJyZW50IHNlbGVjdGlvbiBwcm92aWRlci4KKwkgKi8KKwlwcm90ZWN0ZWQgSVNlbGVjdGlvblByb3ZpZGVyIHNlbGVjdGlvblByb3ZpZGVyOworCisJLyoqCisJICogVGhpcyBhY3Rpb24gb3BlbnMgdGhlIFByb3BlcnRpZXMgdmlldy4KKwkgKi8KKwlwcm90ZWN0ZWQgSUFjdGlvbiBzaG93UHJvcGVydGllc1ZpZXdBY3Rpb24gPSBuZXcgQWN0aW9uKAorCQkJIlNob3cgJlByb3BlcnRpZXMgVmlldyIpIC8vJE5PTi1OTFMtMSQKKwl7CisJCUBPdmVycmlkZQorCQlwdWJsaWMgdm9pZCBydW4oKSB7CisJCQl0cnkgeworCQkJCWdldFBhZ2UoKS5zaG93Vmlldygib3JnLmVjbGlwc2UudWkudmlld3MuUHJvcGVydHlTaGVldCIpOyAvLyROT04tTkxTLTEkCisJCQl9IGNhdGNoIChQYXJ0SW5pdEV4Y2VwdGlvbiBleGNlcHRpb24pIHsKKwkJCQlBY3RpdmF0b3IubG9nRXJyb3IoIlByb2JsZW0gc2hvd2luZyBwcm9wZXJ0eSB2aWV3IiwgZXhjZXB0aW9uKTsKKwkJCX0KKwkJfQorCX07CisKKwkvKioKKwkgKiBUaGlzIGFjdGlvbiByZWZyZXNoZXMgdGhlIHZpZXdlciBvZiB0aGUgY3VycmVudCBlZGl0b3IgaWYgdGhlIGVkaXRvcgorCSAqIGltcGxlbWVudHMge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5jb21tb24udWkudmlld2VyLklWaWV3ZXJQcm92aWRlcn0uCisJICovCisJcHJvdGVjdGVkIElBY3Rpb24gcmVmcmVzaFZpZXdlckFjdGlvbiA9IG5ldyBBY3Rpb24oIiZSZWZyZXNoIikgLy8kTk9OLU5MUy0xJAorCXsKKwkJQE92ZXJyaWRlCisJCXB1YmxpYyBib29sZWFuIGlzRW5hYmxlZCgpIHsKKwkJCXJldHVybiBhY3RpdmVFZGl0b3JQYXJ0IGluc3RhbmNlb2YgSVZpZXdlclByb3ZpZGVyOworCQl9CisKKwkJQE92ZXJyaWRlCisJCXB1YmxpYyB2b2lkIHJ1bigpIHsKKwkJCWlmIChhY3RpdmVFZGl0b3JQYXJ0IGluc3RhbmNlb2YgSVZpZXdlclByb3ZpZGVyKSB7CisJCQkJVmlld2VyIHZpZXdlciA9ICgoSVZpZXdlclByb3ZpZGVyKSBhY3RpdmVFZGl0b3JQYXJ0KQorCQkJCQkJLmdldFZpZXdlcigpOworCQkJCWlmICh2aWV3ZXIgIT0gbnVsbCkgeworCQkJCQl2aWV3ZXIucmVmcmVzaCgpOworCQkJCX0KKwkJCX0KKwkJfQorCX07CisKKwkvKioKKwkgKiBUaGlzIHdpbGwgY29udGFpbiBvbmUKKwkgKiB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkuYWN0aW9uLkNyZWF0ZUNoaWxkQWN0aW9ufSBjb3JyZXNwb25kaW5nIHRvCisJICogZWFjaCBkZXNjcmlwdG9yIGdlbmVyYXRlZCBmb3IgdGhlIGN1cnJlbnQgc2VsZWN0aW9uIGJ5IHRoZSBpdGVtIHByb3ZpZGVyLgorCSAqLworCXByb3RlY3RlZCBDb2xsZWN0aW9uPElBY3Rpb24+IGNyZWF0ZUNoaWxkQWN0aW9uczsKKworCS8qKgorCSAqIFRoaXMgaXMgdGhlIG1lbnUgbWFuYWdlciBpbnRvIHdoaWNoIG1lbnUgY29udHJpYnV0aW9uIGl0ZW1zIHNob3VsZCBiZQorCSAqIGFkZGVkIGZvciBDcmVhdGVDaGlsZCBhY3Rpb25zLgorCSAqLworCXByb3RlY3RlZCBJTWVudU1hbmFnZXIgY3JlYXRlQ2hpbGRNZW51TWFuYWdlcjsKKworCS8qKgorCSAqIFRoaXMgd2lsbCBjb250YWluIG9uZQorCSAqIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5hY3Rpb24uQ3JlYXRlU2libGluZ0FjdGlvbn0gY29ycmVzcG9uZGluZworCSAqIHRvIGVhY2ggZGVzY3JpcHRvciBnZW5lcmF0ZWQgZm9yIHRoZSBjdXJyZW50IHNlbGVjdGlvbiBieSB0aGUgaXRlbQorCSAqIHByb3ZpZGVyLgorCSAqLworCXByb3RlY3RlZCBDb2xsZWN0aW9uPElBY3Rpb24+IGNyZWF0ZVNpYmxpbmdBY3Rpb25zOworCisJLyoqCisJICogVGhpcyBpcyB0aGUgbWVudSBtYW5hZ2VyIGludG8gd2hpY2ggbWVudSBjb250cmlidXRpb24gaXRlbXMgc2hvdWxkIGJlCisJICogYWRkZWQgZm9yIENyZWF0ZVNpYmxpbmcgYWN0aW9ucy4KKwkgKi8KKwlwcm90ZWN0ZWQgSU1lbnVNYW5hZ2VyIGNyZWF0ZVNpYmxpbmdNZW51TWFuYWdlcjsKKworCS8qKgorCSAqIFRoaXMgY3JlYXRlcyBhbiBpbnN0YW5jZSBvZiB0aGUgY29udHJpYnV0b3IuCisJICovCisJcHVibGljIElkZW50aWZpYWJsZUFjdGlvbkJhckNvbnRyaWJ1dG9yKCkgeworCQlzdXBlcihBRERJVElPTlNfTEFTVF9TVFlMRSk7CisJCWxvYWRSZXNvdXJjZUFjdGlvbiA9IG5ldyBMb2FkUmVzb3VyY2VBY3Rpb24oKTsKKwkJdmFsaWRhdGVBY3Rpb24gPSBuZXcgVmFsaWRhdGVBY3Rpb24oKTsKKwkJY29udHJvbEFjdGlvbiA9IG5ldyBDb250cm9sQWN0aW9uKCk7CisJfSAvLyBJZGVudGlmaWFibGVBY3Rpb25CYXJDb250cmlidXRvcgorCisJLyoqCisJICogVGhpcyBhZGRzIFNlcGFyYXRvcnMgZm9yIGVkaXRvciBhZGRpdGlvbnMgdG8gdGhlIHRvb2wgYmFyLgorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGNvbnRyaWJ1dGVUb1Rvb2xCYXIoSVRvb2xCYXJNYW5hZ2VyIHRvb2xCYXJNYW5hZ2VyKSB7CisJCXRvb2xCYXJNYW5hZ2VyLmFkZChuZXcgU2VwYXJhdG9yKCJpZGVudGlmaWFibGUtc2V0dGluZ3MiKSk7IC8vJE5PTi1OTFMtMSQKKwkJdG9vbEJhck1hbmFnZXIuYWRkKG5ldyBTZXBhcmF0b3IoImlkZW50aWZpYWJsZS1hZGRpdGlvbnMiKSk7IC8vJE5PTi1OTFMtMSQKKwl9IC8vIGNvbnRyaWJ1dGVUb1Rvb2xCYXIKKworCS8qKgorCSAqIFRoaXMgYWRkcyB0byB0aGUgbWVudSBiYXIgYSBtZW51IGFuZCBzb21lIHNlcGFyYXRvcnMgZm9yIGVkaXRvcgorCSAqIGFkZGl0aW9ucywgYXMgd2VsbCBhcyB0aGUgc3ViLW1lbnVzIGZvciBvYmplY3QgY3JlYXRpb24gaXRlbXMuCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgY29udHJpYnV0ZVRvTWVudShJTWVudU1hbmFnZXIgbWVudU1hbmFnZXIpIHsKKwkJc3VwZXIuY29udHJpYnV0ZVRvTWVudShtZW51TWFuYWdlcik7CisKKwkJSU1lbnVNYW5hZ2VyIHN1Ym1lbnVNYW5hZ2VyID0gbmV3IE1lbnVNYW5hZ2VyKAorCQkJCSJJZGVudGlmaWFibGUgRWRpdG9yIiwgIm9yZy5lY2xpcHNlLnN0ZW0udWkuaWRlbnRpZmlhYmxlTWVudUlEIik7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAorCQltZW51TWFuYWdlci5pbnNlcnRBZnRlcigiYWRkaXRpb25zIiwgc3VibWVudU1hbmFnZXIpOyAvLyROT04tTkxTLTEkCisJCXN1Ym1lbnVNYW5hZ2VyLmFkZChuZXcgU2VwYXJhdG9yKCJzZXR0aW5ncyIpKTsgLy8kTk9OLU5MUy0xJAorCQlzdWJtZW51TWFuYWdlci5hZGQobmV3IFNlcGFyYXRvcigiYWN0aW9ucyIpKTsgLy8kTk9OLU5MUy0xJAorCQlzdWJtZW51TWFuYWdlci5hZGQobmV3IFNlcGFyYXRvcigiYWRkaXRpb25zIikpOyAvLyROT04tTkxTLTEkCisJCXN1Ym1lbnVNYW5hZ2VyLmFkZChuZXcgU2VwYXJhdG9yKCJhZGRpdGlvbnMtZW5kIikpOyAvLyROT04tTkxTLTEkCisKKwkJLy8gUHJlcGFyZSBmb3IgQ3JlYXRlQ2hpbGQgaXRlbSBhZGRpdGlvbiBvciByZW1vdmFsLgorCQljcmVhdGVDaGlsZE1lbnVNYW5hZ2VyID0gbmV3IE1lbnVNYW5hZ2VyKCImTmV3IENoaWxkIik7IC8vJE5PTi1OTFMtMSQKKwkJc3VibWVudU1hbmFnZXIuaW5zZXJ0QmVmb3JlKCJhZGRpdGlvbnMiLCBjcmVhdGVDaGlsZE1lbnVNYW5hZ2VyKTsgLy8kTk9OLU5MUy0xJAorCisJCS8vIFByZXBhcmUgZm9yIENyZWF0ZVNpYmxpbmcgaXRlbSBhZGRpdGlvbiBvciByZW1vdmFsLgorCQljcmVhdGVTaWJsaW5nTWVudU1hbmFnZXIgPSBuZXcgTWVudU1hbmFnZXIoIiZOZXcgU2libGluZyIpOyAvLyROT04tTkxTLTEkCisJCXN1Ym1lbnVNYW5hZ2VyLmluc2VydEJlZm9yZSgiYWRkaXRpb25zIiwgY3JlYXRlU2libGluZ01lbnVNYW5hZ2VyKTsgLy8kTk9OLU5MUy0xJAorCisJCS8vIEZvcmNlIGFuIHVwZGF0ZSBiZWNhdXNlIEVjbGlwc2UgaGlkZXMgZW1wdHkgbWVudXMgbm93LgorCQlzdWJtZW51TWFuYWdlci5hZGRNZW51TGlzdGVuZXIobmV3IElNZW51TGlzdGVuZXIoKSB7CisJCQlwdWJsaWMgdm9pZCBtZW51QWJvdXRUb1Nob3coSU1lbnVNYW5hZ2VyIG1lbnVNYW5hZ2VyKSB7CisJCQkJbWVudU1hbmFnZXIudXBkYXRlQWxsKHRydWUpOworCQkJfQorCQl9KTsKKworCQlhZGRHbG9iYWxBY3Rpb25zKHN1Ym1lbnVNYW5hZ2VyKTsKKwl9IC8vIGNvbnRyaWJ1dGVUb01lbnUKKworCS8qKgorCSAqIFdoZW4gdGhlIGFjdGl2ZSBlZGl0b3IgY2hhbmdlcywgdGhpcyByZW1lbWJlcnMgdGhlIGNoYW5nZSBhbmQgcmVnaXN0ZXJzCisJICogd2l0aCBpdCBhcyBhIHNlbGVjdGlvbiBwcm92aWRlci4KKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBzZXRBY3RpdmVFZGl0b3IoSUVkaXRvclBhcnQgcGFydCkgeworCQlzdXBlci5zZXRBY3RpdmVFZGl0b3IocGFydCk7CisJCWFjdGl2ZUVkaXRvclBhcnQgPSBwYXJ0OworCisJCS8vIFN3aXRjaCB0byB0aGUgbmV3IHNlbGVjdGlvbiBwcm92aWRlci4KKwkJLy8KKwkJaWYgKHNlbGVjdGlvblByb3ZpZGVyICE9IG51bGwpIHsKKwkJCXNlbGVjdGlvblByb3ZpZGVyLnJlbW92ZVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcih0aGlzKTsKKwkJfQorCQlpZiAocGFydCA9PSBudWxsKSB7CisJCQlzZWxlY3Rpb25Qcm92aWRlciA9IG51bGw7CisJCX0gZWxzZSB7CisJCQlzZWxlY3Rpb25Qcm92aWRlciA9IHBhcnQuZ2V0U2l0ZSgpLmdldFNlbGVjdGlvblByb3ZpZGVyKCk7CisJCQlzZWxlY3Rpb25Qcm92aWRlci5hZGRTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIodGhpcyk7CisKKwkJCS8vIEZha2UgYSBzZWxlY3Rpb24gY2hhbmdlZCBldmVudCB0byB1cGRhdGUgdGhlIG1lbnVzLgorCQkJLy8KKwkJCWlmIChzZWxlY3Rpb25Qcm92aWRlci5nZXRTZWxlY3Rpb24oKSAhPSBudWxsKSB7CisJCQkJc2VsZWN0aW9uQ2hhbmdlZChuZXcgU2VsZWN0aW9uQ2hhbmdlZEV2ZW50KHNlbGVjdGlvblByb3ZpZGVyLAorCQkJCQkJc2VsZWN0aW9uUHJvdmlkZXIuZ2V0U2VsZWN0aW9uKCkpKTsKKwkJCX0KKwkJfQorCX0KKworCS8qKgorCSAqIFRoaXMgaW1wbGVtZW50cworCSAqIHtAbGluayBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXJ9LCBoYW5kbGluZworCSAqIHtAbGluayBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlNlbGVjdGlvbkNoYW5nZWRFdmVudH1zIGJ5IHF1ZXJ5aW5nIGZvcgorCSAqIHRoZSBjaGlsZHJlbiBhbmQgc2libGluZ3MgdGhhdCBjYW4gYmUgYWRkZWQgdG8gdGhlIHNlbGVjdGVkIG9iamVjdCBhbmQKKwkgKiB1cGRhdGluZyB0aGUgbWVudXMgYWNjb3JkaW5nbHkuCisJICogCisJICogQHBhcmFtIGV2ZW50CisJICogICAgICAgICAgICB0aGUge0BsaW5rIFNlbGVjdGlvbkNoYW5nZWRFdmVudH0KKwkgKi8KKwlwdWJsaWMgdm9pZCBzZWxlY3Rpb25DaGFuZ2VkKFNlbGVjdGlvbkNoYW5nZWRFdmVudCBldmVudCkgeworCQkvLyBSZW1vdmUgYW55IG1lbnUgaXRlbXMgZm9yIG9sZCBzZWxlY3Rpb24uCisJCS8vCisJCWlmIChjcmVhdGVDaGlsZE1lbnVNYW5hZ2VyICE9IG51bGwpIHsKKwkJCWRlcG9wdWxhdGVNYW5hZ2VyKGNyZWF0ZUNoaWxkTWVudU1hbmFnZXIsIGNyZWF0ZUNoaWxkQWN0aW9ucyk7CisJCX0KKwkJaWYgKGNyZWF0ZVNpYmxpbmdNZW51TWFuYWdlciAhPSBudWxsKSB7CisJCQlkZXBvcHVsYXRlTWFuYWdlcihjcmVhdGVTaWJsaW5nTWVudU1hbmFnZXIsIGNyZWF0ZVNpYmxpbmdBY3Rpb25zKTsKKwkJfQorCisJCS8vIFF1ZXJ5IHRoZSBuZXcgc2VsZWN0aW9uIGZvciBhcHByb3ByaWF0ZSBuZXcgY2hpbGQvc2libGluZyBkZXNjcmlwdG9ycworCQlDb2xsZWN0aW9uPD8+IG5ld0NoaWxkRGVzY3JpcHRvcnMgPSBudWxsOworCQlDb2xsZWN0aW9uPD8+IG5ld1NpYmxpbmdEZXNjcmlwdG9ycyA9IG51bGw7CisKKwkJSVNlbGVjdGlvbiBzZWxlY3Rpb24gPSBldmVudC5nZXRTZWxlY3Rpb24oKTsKKwkJaWYgKHNlbGVjdGlvbiBpbnN0YW5jZW9mIElTdHJ1Y3R1cmVkU2VsZWN0aW9uCisJCQkJJiYgKChJU3RydWN0dXJlZFNlbGVjdGlvbikgc2VsZWN0aW9uKS5zaXplKCkgPT0gMSkgeworCQkJT2JqZWN0IG9iamVjdCA9ICgoSVN0cnVjdHVyZWRTZWxlY3Rpb24pIHNlbGVjdGlvbikKKwkJCQkJLmdldEZpcnN0RWxlbWVudCgpOworCisJCQlFZGl0aW5nRG9tYWluIGRvbWFpbiA9ICgoSUVkaXRpbmdEb21haW5Qcm92aWRlcikgYWN0aXZlRWRpdG9yUGFydCkKKwkJCQkJLmdldEVkaXRpbmdEb21haW4oKTsKKworCQkJbmV3Q2hpbGREZXNjcmlwdG9ycyA9IGRvbWFpbi5nZXROZXdDaGlsZERlc2NyaXB0b3JzKG9iamVjdCwgbnVsbCk7CisJCQluZXdTaWJsaW5nRGVzY3JpcHRvcnMgPSBkb21haW4uZ2V0TmV3Q2hpbGREZXNjcmlwdG9ycyhudWxsLCBvYmplY3QpOworCQl9CisKKwkJLy8gR2VuZXJhdGUgYWN0aW9ucyBmb3Igc2VsZWN0aW9uOyBwb3B1bGF0ZSBhbmQgcmVkcmF3IHRoZSBtZW51cy4KKwkJY3JlYXRlQ2hpbGRBY3Rpb25zID0gZ2VuZXJhdGVDcmVhdGVDaGlsZEFjdGlvbnMobmV3Q2hpbGREZXNjcmlwdG9ycywKKwkJCQlzZWxlY3Rpb24pOworCQljcmVhdGVTaWJsaW5nQWN0aW9ucyA9IGdlbmVyYXRlQ3JlYXRlU2libGluZ0FjdGlvbnMoCisJCQkJbmV3U2libGluZ0Rlc2NyaXB0b3JzLCBzZWxlY3Rpb24pOworCisJCWlmIChjcmVhdGVDaGlsZE1lbnVNYW5hZ2VyICE9IG51bGwpIHsKKwkJCXBvcHVsYXRlTWFuYWdlcihjcmVhdGVDaGlsZE1lbnVNYW5hZ2VyLCBjcmVhdGVDaGlsZEFjdGlvbnMsIG51bGwpOworCQkJY3JlYXRlQ2hpbGRNZW51TWFuYWdlci51cGRhdGUodHJ1ZSk7CisJCX0KKwkJaWYgKGNyZWF0ZVNpYmxpbmdNZW51TWFuYWdlciAhPSBudWxsKSB7CisJCQlwb3B1bGF0ZU1hbmFnZXIoY3JlYXRlU2libGluZ01lbnVNYW5hZ2VyLCBjcmVhdGVTaWJsaW5nQWN0aW9ucywKKwkJCQkJbnVsbCk7CisJCQljcmVhdGVTaWJsaW5nTWVudU1hbmFnZXIudXBkYXRlKHRydWUpOworCQl9CisJfSAvLyBzZWxlY3Rpb25DaGFuZ2VkCisKKwkvKioKKwkgKiBUaGlzIGdlbmVyYXRlcyBhIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5hY3Rpb24uQ3JlYXRlQ2hpbGRBY3Rpb259CisJICogZm9yIGVhY2ggb2JqZWN0IGluIDxjb2RlPmRlc2NyaXB0b3JzPC9jb2RlPiwgYW5kIHJldHVybnMgdGhlCisJICogY29sbGVjdGlvbiBvZiB0aGVzZSBhY3Rpb25zLgorCSAqLworCXByb3RlY3RlZCBDb2xsZWN0aW9uPElBY3Rpb24+IGdlbmVyYXRlQ3JlYXRlQ2hpbGRBY3Rpb25zKAorCQkJQ29sbGVjdGlvbjw/PiBkZXNjcmlwdG9ycywgSVNlbGVjdGlvbiBzZWxlY3Rpb24pIHsKKwkJQ29sbGVjdGlvbjxJQWN0aW9uPiBhY3Rpb25zID0gbmV3IEFycmF5TGlzdDxJQWN0aW9uPigpOworCQlpZiAoZGVzY3JpcHRvcnMgIT0gbnVsbCkgeworCQkJZm9yIChPYmplY3QgZGVzY3JpcHRvciA6IGRlc2NyaXB0b3JzKSB7CisJCQkJYWN0aW9ucy5hZGQobmV3IENyZWF0ZUNoaWxkQWN0aW9uKGFjdGl2ZUVkaXRvclBhcnQsIHNlbGVjdGlvbiwKKwkJCQkJCWRlc2NyaXB0b3IpKTsKKwkJCX0KKwkJfQorCQlyZXR1cm4gYWN0aW9uczsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGdlbmVyYXRlcyBhCisJICoge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmFjdGlvbi5DcmVhdGVTaWJsaW5nQWN0aW9ufSBmb3IgZWFjaAorCSAqIG9iamVjdCBpbiA8Y29kZT5kZXNjcmlwdG9yczwvY29kZT4sIGFuZCByZXR1cm5zIHRoZSBjb2xsZWN0aW9uIG9mCisJICogdGhlc2UgYWN0aW9ucy4KKwkgKi8KKwlwcm90ZWN0ZWQgQ29sbGVjdGlvbjxJQWN0aW9uPiBnZW5lcmF0ZUNyZWF0ZVNpYmxpbmdBY3Rpb25zKAorCQkJQ29sbGVjdGlvbjw/PiBkZXNjcmlwdG9ycywgSVNlbGVjdGlvbiBzZWxlY3Rpb24pIHsKKwkJQ29sbGVjdGlvbjxJQWN0aW9uPiBhY3Rpb25zID0gbmV3IEFycmF5TGlzdDxJQWN0aW9uPigpOworCQlpZiAoZGVzY3JpcHRvcnMgIT0gbnVsbCkgeworCQkJZm9yIChPYmplY3QgZGVzY3JpcHRvciA6IGRlc2NyaXB0b3JzKSB7CisJCQkJYWN0aW9ucy5hZGQobmV3IENyZWF0ZVNpYmxpbmdBY3Rpb24oYWN0aXZlRWRpdG9yUGFydCwKKwkJCQkJCXNlbGVjdGlvbiwgZGVzY3JpcHRvcikpOworCQkJfQorCQl9CisJCXJldHVybiBhY3Rpb25zOworCX0KKworCS8qKgorCSAqIFRoaXMgcG9wdWxhdGVzIHRoZSBzcGVjaWZpZWQgPGNvZGU+bWFuYWdlcjwvY29kZT4gd2l0aAorCSAqIHtAbGluayBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uQWN0aW9uQ29udHJpYnV0aW9uSXRlbX1zIGJhc2VkIG9uIHRoZQorCSAqIHtAbGluayBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSUFjdGlvbn1zIGNvbnRhaW5lZCBpbiB0aGUKKwkgKiA8Y29kZT5hY3Rpb25zPC9jb2RlPiBjb2xsZWN0aW9uLCBieSBpbnNlcnRpbmcgdGhlbSBiZWZvcmUgdGhlIHNwZWNpZmllZAorCSAqIGNvbnRyaWJ1dGlvbiBpdGVtIDxjb2RlPmNvbnRyaWJ1dGlvbklEPC9jb2RlPi4gSWYKKwkgKiA8Y29kZT5jb250cmlidXRpb25JRDwvY29kZT4gaXMgPGNvZGU+bnVsbDwvY29kZT4sIHRoZXkgYXJlIHNpbXBseQorCSAqIGFkZGVkLgorCSAqLworCXByb3RlY3RlZCB2b2lkIHBvcHVsYXRlTWFuYWdlcihJQ29udHJpYnV0aW9uTWFuYWdlciBtYW5hZ2VyLAorCQkJQ29sbGVjdGlvbjw/IGV4dGVuZHMgSUFjdGlvbj4gYWN0aW9ucywgU3RyaW5nIGNvbnRyaWJ1dGlvbklEKSB7CisJCWlmIChhY3Rpb25zICE9IG51bGwpIHsKKwkJCWZvciAoSUFjdGlvbiBhY3Rpb24gOiBhY3Rpb25zKSB7CisJCQkJaWYgKGNvbnRyaWJ1dGlvbklEICE9IG51bGwpIHsKKwkJCQkJbWFuYWdlci5pbnNlcnRCZWZvcmUoY29udHJpYnV0aW9uSUQsIGFjdGlvbik7CisJCQkJfSBlbHNlIHsKKwkJCQkJbWFuYWdlci5hZGQoYWN0aW9uKTsKKwkJCQl9CisJCQl9CisJCX0KKwl9IC8vIHBvcHVsYXRlTWFuYWdlcgorCisJLyoqCisJICogVGhpcyByZW1vdmVzIGZyb20gdGhlIHNwZWNpZmllZCA8Y29kZT5tYW5hZ2VyPC9jb2RlPiBhbGwKKwkgKiB7QGxpbmsgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLkFjdGlvbkNvbnRyaWJ1dGlvbkl0ZW19cyBiYXNlZCBvbiB0aGUKKwkgKiB7QGxpbmsgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklBY3Rpb259cyBjb250YWluZWQgaW4gdGhlCisJICogPGNvZGU+YWN0aW9uczwvY29kZT4gY29sbGVjdGlvbi4KKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBkZXBvcHVsYXRlTWFuYWdlcihJQ29udHJpYnV0aW9uTWFuYWdlciBtYW5hZ2VyLAorCQkJQ29sbGVjdGlvbjw/IGV4dGVuZHMgSUFjdGlvbj4gYWN0aW9ucykgeworCQlpZiAoYWN0aW9ucyAhPSBudWxsKSB7CisJCQlJQ29udHJpYnV0aW9uSXRlbVtdIGl0ZW1zID0gbWFuYWdlci5nZXRJdGVtcygpOworCQkJZm9yIChpbnQgaSA9IDA7IGkgPCBpdGVtcy5sZW5ndGg7IGkrKykgeworCQkJCS8vIExvb2sgaW50byBTdWJDb250cmlidXRpb25JdGVtcworCQkJCUlDb250cmlidXRpb25JdGVtIGNvbnRyaWJ1dGlvbkl0ZW0gPSBpdGVtc1tpXTsKKwkJCQl3aGlsZSAoY29udHJpYnV0aW9uSXRlbSBpbnN0YW5jZW9mIFN1YkNvbnRyaWJ1dGlvbkl0ZW0pIHsKKwkJCQkJY29udHJpYnV0aW9uSXRlbSA9ICgoU3ViQ29udHJpYnV0aW9uSXRlbSkgY29udHJpYnV0aW9uSXRlbSkKKwkJCQkJCQkuZ2V0SW5uZXJJdGVtKCk7CisJCQkJfQorCisJCQkJLy8gRGVsZXRlIHRoZSBBY3Rpb25Db250cmlidXRpb25JdGVtcyB3aXRoIG1hdGNoaW5nIGFjdGlvbi4KKwkJCQlpZiAoY29udHJpYnV0aW9uSXRlbSBpbnN0YW5jZW9mIEFjdGlvbkNvbnRyaWJ1dGlvbkl0ZW0pIHsKKwkJCQkJSUFjdGlvbiBhY3Rpb24gPSAoKEFjdGlvbkNvbnRyaWJ1dGlvbkl0ZW0pIGNvbnRyaWJ1dGlvbkl0ZW0pCisJCQkJCQkJLmdldEFjdGlvbigpOworCQkJCQlpZiAoYWN0aW9ucy5jb250YWlucyhhY3Rpb24pKSB7CisJCQkJCQltYW5hZ2VyLnJlbW92ZShjb250cmlidXRpb25JdGVtKTsKKwkJCQkJfQorCQkJCX0KKwkJCX0KKwkJfQorCX0gLy8gZGVwb3B1bGF0ZU1hbmFnZXIKKworCS8qKgorCSAqIFRoaXMgcG9wdWxhdGVzIHRoZSBwb3AtdXAgbWVudSBiZWZvcmUgaXQgYXBwZWFycy4KKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBtZW51QWJvdXRUb1Nob3coSU1lbnVNYW5hZ2VyIG1lbnVNYW5hZ2VyKSB7CisJCXN1cGVyLm1lbnVBYm91dFRvU2hvdyhtZW51TWFuYWdlcik7CisJCU1lbnVNYW5hZ2VyIHN1Ym1lbnVNYW5hZ2VyID0gbnVsbDsKKworCQlzdWJtZW51TWFuYWdlciA9IG5ldyBNZW51TWFuYWdlcigiTmV3IENoaWxkIik7IC8vJE5PTi1OTFMtMSQKKwkJcG9wdWxhdGVNYW5hZ2VyKHN1Ym1lbnVNYW5hZ2VyLCBjcmVhdGVDaGlsZEFjdGlvbnMsIG51bGwpOworCQltZW51TWFuYWdlci5pbnNlcnRCZWZvcmUoImVkaXQiLCBzdWJtZW51TWFuYWdlcik7IC8vJE5PTi1OTFMtMSQKKworCQlzdWJtZW51TWFuYWdlciA9IG5ldyBNZW51TWFuYWdlcigiTmV3IFNpYmxpbmciKTsgLy8kTk9OLU5MUy0xJAorCQlwb3B1bGF0ZU1hbmFnZXIoc3VibWVudU1hbmFnZXIsIGNyZWF0ZVNpYmxpbmdBY3Rpb25zLCBudWxsKTsKKwkJbWVudU1hbmFnZXIuaW5zZXJ0QmVmb3JlKCJlZGl0Iiwgc3VibWVudU1hbmFnZXIpOyAvLyROT04tTkxTLTEkCisJfSAvLyBtZW51QWJvdXRUb1Nob3cKKworCS8qKgorCSAqIFRoaXMgaW5zZXJ0cyBnbG9iYWwgYWN0aW9ucyBiZWZvcmUgdGhlICJhZGRpdGlvbnMtZW5kIiBzZXBhcmF0b3IuCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgYWRkR2xvYmFsQWN0aW9ucyhJTWVudU1hbmFnZXIgbWVudU1hbmFnZXIpIHsKKwkJbWVudU1hbmFnZXIuaW5zZXJ0QWZ0ZXIoImFkZGl0aW9ucy1lbmQiLCBuZXcgU2VwYXJhdG9yKCJ1aS1hY3Rpb25zIikpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKKwkJbWVudU1hbmFnZXIuaW5zZXJ0QWZ0ZXIoInVpLWFjdGlvbnMiLCBzaG93UHJvcGVydGllc1ZpZXdBY3Rpb24pOyAvLyROT04tTkxTLTEkCisKKwkJcmVmcmVzaFZpZXdlckFjdGlvbi5zZXRFbmFibGVkKHJlZnJlc2hWaWV3ZXJBY3Rpb24uaXNFbmFibGVkKCkpOworCQltZW51TWFuYWdlci5pbnNlcnRBZnRlcigidWktYWN0aW9ucyIsIHJlZnJlc2hWaWV3ZXJBY3Rpb24pOyAvLyROT04tTkxTLTEkCisKKwkJLy8gVGhlIGFjdGlvbnMgYWRkZWQgYXJlIFZhbGlkYXRlIGFuZCBMb2FkIFJlc291cmNlCisJCS8vIHN1cGVyLmFkZEdsb2JhbEFjdGlvbnMobWVudU1hbmFnZXIpOworCX0gLy8gYWRkR2xvYmFsQWN0aW9ucworCisJLyoqCisJICogVGhpcyBlbnN1cmVzIHRoYXQgYSBkZWxldGUgYWN0aW9uIHdpbGwgY2xlYW4gdXAgYWxsIHJlZmVyZW5jZXMgdG8gZGVsZXRlZAorCSAqIG9iamVjdHMuCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIGJvb2xlYW4gcmVtb3ZlQWxsUmVmZXJlbmNlc09uRGVsZXRlKCkgeworCQlyZXR1cm4gdHJ1ZTsKKwl9IC8vIHJlbW92ZUFsbFJlZmVyZW5jZXNPbkRlbGV0ZQorCit9IC8vIElkZW50aWZpYWJsZUFjdGlvbkJhckNvbnRyaWJ1dG9yCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvZWRpdG9ycy9JZGVudGlmaWFibGVFZGl0b3IuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9lZGl0b3JzL0lkZW50aWZpYWJsZUVkaXRvci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJkY2ZjNTMKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvZWRpdG9ycy9JZGVudGlmaWFibGVFZGl0b3IuamF2YQpAQCAtMCwwICsxLDY5MyBAQAorLy8gSWRlbnRpZmlhYmxlRWRpdG9yLmphdmEKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS51aS5lZGl0b3JzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7CitpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247CitpbXBvcnQgamF2YS51dGlsLkV2ZW50T2JqZWN0OworaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOworaW1wb3J0IGphdmEudXRpbC5NYXA7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JRmlsZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5SZXNvdXJjZXNQbHVnaW47CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQYXRoOworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUHJvZ3Jlc3NNb25pdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5OdWxsUHJvZ3Jlc3NNb25pdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24uY29tbWFuZC5CYXNpY0NvbW1hbmRTdGFjazsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLmNvbW1hbmQuQ29tbWFuZDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLmNvbW1hbmQuQ29tbWFuZFN0YWNrOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24uY29tbWFuZC5Db21tYW5kU3RhY2tMaXN0ZW5lcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5BZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuVVJJOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5wcm92aWRlci5FY29yZUl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5yZXNvdXJjZS5SZXNvdXJjZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5jb21tYW5kLkNvbW1hbmRQYXJhbWV0ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQuY29tbWFuZC5EZWxldGVDb21tYW5kOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LmRvbWFpbi5BZGFwdGVyRmFjdG9yeUVkaXRpbmdEb21haW47CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQuZG9tYWluLkVkaXRpbmdEb21haW47CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQuZG9tYWluLklFZGl0aW5nRG9tYWluUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuQ29tcG9zZWRBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5SZWZsZWN0aXZlSXRlbVByb3ZpZGVyQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIucmVzb3VyY2UuUmVzb3VyY2VJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5hY3Rpb24uRWRpdGluZ0RvbWFpbkFjdGlvbkJhckNvbnRyaWJ1dG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmNlbGxlZGl0b3IuQWRhcHRlckZhY3RvcnlUcmVlRWRpdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmRuZC5FZGl0aW5nRG9tYWluVmlld2VyRHJvcEFkYXB0ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkuZG5kLkxvY2FsVHJhbnNmZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkuZG5kLlZpZXdlckRyYWdBZGFwdGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLnByb3ZpZGVyLkFkYXB0ZXJGYWN0b3J5Q29udGVudFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLnByb3ZpZGVyLkFkYXB0ZXJGYWN0b3J5TGFiZWxQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS51dGlsLkVkaXRVSVV0aWw7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklNZW51TGlzdGVuZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklNZW51TWFuYWdlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSVN0YXR1c0xpbmVNYW5hZ2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5NZW51TWFuYWdlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uU2VwYXJhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmRpYWxvZ3MuUHJvZ3Jlc3NNb25pdG9yRGlhbG9nOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5TZWxlY3Rpb25DaGFuZ2VkRXZlbnQ7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5TdHJ1Y3R1cmVkU2VsZWN0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuU3RydWN0dXJlZFZpZXdlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlRyZWVWaWV3ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5WaWV3ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5wcm92aWRlci5Db21tb25JdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZXhwZXJpbWVudC5wcm92aWRlci5FeHBlcmltZW50SXRlbVByb3ZpZGVyQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLnByb3ZpZGVyLkdyYXBoSXRlbVByb3ZpZGVyQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLnByb3ZpZGVyLk1vZGVsSXRlbVByb3ZpZGVyQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNjZW5hcmlvLnByb3ZpZGVyLlNjZW5hcmlvSXRlbVByb3ZpZGVyQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNlcXVlbmNlci5wcm92aWRlci5TZXF1ZW5jZXJJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnVpLkFjdGl2YXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuU1dUOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5kbmQuRE5EOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5kbmQuRHJvcFRhcmdldEV2ZW50OworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5kbmQuVGV4dFRyYW5zZmVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5kbmQuVHJhbnNmZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuTWVudTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5UcmVlOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklFZGl0b3JJbnB1dDsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5JRWRpdG9yUGFydDsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5JRWRpdG9yU2l0ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5JUGFydExpc3RlbmVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2hQYXJ0OworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLmFjdGlvbnMuV29ya3NwYWNlTW9kaWZ5T3BlcmF0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLmRpYWxvZ3MuU2F2ZUFzRGlhbG9nOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLnBhcnQuRmlsZUVkaXRvcklucHV0OworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLnBhcnQuTXVsdGlQYWdlRWRpdG9yUGFydDsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS52aWV3cy5jb250ZW50b3V0bGluZS5Db250ZW50T3V0bGluZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS52aWV3cy5wcm9wZXJ0aWVzLlByb3BlcnR5U2hlZXQ7CisKKy8qKgorICogVGhpcyBjbGFzcyBpcyB0aGUgc3VwZXItY2xhc3Mgb2YgYWxsIGVkaXRvcnMgdGhhdCBlZGl0IHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLklkZW50aWZpYWJsZX1zLgorICovCithYnN0cmFjdCBwdWJsaWMgY2xhc3MgSWRlbnRpZmlhYmxlRWRpdG9yIGV4dGVuZHMgTXVsdGlQYWdlRWRpdG9yUGFydCBpbXBsZW1lbnRzCisJCUlNZW51TGlzdGVuZXIsIElTZWxlY3Rpb25Qcm92aWRlciwgSUVkaXRpbmdEb21haW5Qcm92aWRlciB7CisKKwkvKioKKwkgKiBUaGlzIG1hcCBob2xkcyB0aGUgb3B0aW9ucyBmb3Igc2F2aW5nIHJlc291cmNlcy4KKwkgKi8KKwlmaW5hbCBwcm90ZWN0ZWQgc3RhdGljIE1hcDxPYmplY3QsIE9iamVjdD4gc2F2ZU9wdGlvbnMgPSBuZXcgSGFzaE1hcDxPYmplY3QsIE9iamVjdD4oKTsKKwlzdGF0aWMgeworCQkvLyBPbmx5IHNhdmUgdGhpbmdzIHRoYXQgaGF2ZSBjaGFuZ2VkLgorCQlzYXZlT3B0aW9ucy5wdXQoUmVzb3VyY2UuT1BUSU9OX1NBVkVfT05MWV9JRl9DSEFOR0VELAorCQkJCVJlc291cmNlLk9QVElPTl9TQVZFX09OTFlfSUZfQ0hBTkdFRF9NRU1PUllfQlVGRkVSKTsKKwl9IC8vIHN0YXRpYworCisJLyoqCisJICogVGhpcyBpcyB0aGUgZWRpdG9yJ3Mge0BsaW5rIEVkaXRpbmdEb21haW59IHdoaWNoIGlzIGJhc2ljYWxseSB0aGUKKwkgKiBjb21iaW5hdGlvbiBvZiBhIHtAbGluayBSZXNvdXJjZVNldH0gYW5kIGEge0BsaW5rIENvbW1hbmRTdGFja30uIEl0CisJICoga2VlcHMgdHJhY2sgb2Ygd2hhdCBpcyBiZWluZyBlZGl0ZWQgYW5kIHRoZSBzdGFjayBvZiB7QGxpbmsgQ29tbWFuZH1zCisJICogdGhhdCBtYWRlIHRoZSBjaGFuZ2VzLgorCSAqLworCXByb3RlY3RlZCBBZGFwdGVyRmFjdG9yeUVkaXRpbmdEb21haW4gZWRpdGluZ0RvbWFpbjsKKworCS8qKgorCSAqIFRoaXMgYWRhcHRlciBmYWN0b3J5IHdpbGwgYmUgY29tcG9zZWQgb2YgdGhlIElkZW50aWZpYWJsZSBpdGVtIHByb3ZpZGVyCisJICogZmFjdG9yaWVzLgorCSAqIAorCSAqIEBzZWUgI2NyZWF0ZUFkYXB0ZXJGYWN0b3J5KCkKKwkgKi8KKwlwcm90ZWN0ZWQgQ29tcG9zZWRBZGFwdGVyRmFjdG9yeSBhZGFwdGVyRmFjdG9yeTsKKworCS8qKgorCSAqIFRoZSB7QGxpbmsgVmlld2VyfSBjdXJyZW50bHkgZGlzcGxheWVkCisJICovCisJcHJvdGVjdGVkIFZpZXdlciBjdXJyZW50Vmlld2VyOworCisJLyoqCisJICogVGhpcyBpcyB0aGUge0BsaW5rIFdvcmtzcGFjZU1vZGlmeU9wZXJhdGlvbn0gdGhhdCBzYXZlcyB0aGUgbW9kaWZpZWQKKwkgKiB7QGxpbmsgUmVzb3VyY2V9cy4KKwkgKi8KKwlmaW5hbCBwcml2YXRlIFdvcmtzcGFjZU1vZGlmeU9wZXJhdGlvbiBzYXZlT3BlcmF0aW9uID0gbmV3IFdvcmtzcGFjZU1vZGlmeU9wZXJhdGlvbigpIHsKKwkJLyoqCisJCSAqIEBwYXJhbSBtb25pdG9yCisJCSAqLworCQlAT3ZlcnJpZGUKKwkJcHJvdGVjdGVkIHZvaWQgZXhlY3V0ZShmaW5hbCBJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IpIHsKKworCQkJZm9yIChmaW5hbCBSZXNvdXJjZSByZXNvdXJjZSA6IGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKQorCQkJCQkuZ2V0UmVzb3VyY2VzKCkpIHsKKwkJCQkvLyBTaG91bGQgdGhpcyBSZXNvdXJjZSBiZSBzYXZlZD8KKwkJCQlpZiAocmVzb3VyY2UuZ2V0Q29udGVudHMoKS5pc0VtcHR5KCkgPT0gZmFsc2UKKwkJCQkJCSYmIGVkaXRpbmdEb21haW4uaXNSZWFkT25seShyZXNvdXJjZSkgPT0gZmFsc2UpIHsKKwkJCQkJLy8gWWVzCisJCQkJCXRyeSB7CisJCQkJCQlyZXNvdXJjZS5zYXZlKHNhdmVPcHRpb25zKTsKKwkJCQkJfSAvLyB0cnkKKwkJCQkJY2F0Y2ggKGZpbmFsIEV4Y2VwdGlvbiBlKSB7CisJCQkJCQlBY3RpdmF0b3IubG9nRXJyb3IoIlByb2JsZW0gc2F2aW5nIiwgZSk7CisJCQkJCX0gLy8gY2F0Y2ggRXhjZXB0aW9uCisJCQkJfSAvLyBpZiBzYXZlIHJlc291cmNlCisJCQl9IC8vIGZvciBlYWNoIFJlc291cmNlCisKKwkJfSAvLyBleGVjdXRlCisJfTsgLy8gc2F2ZU9wZXJhdGlvbgorCisJLyoqCisJICogVGhpcyBsaXN0ZW5zIGZvciB3aGVuIHRoZSBvdXRsaW5lIGJlY29tZXMgYWN0aXZlLgorCSAqLworCUBTdXBwcmVzc1dhcm5pbmdzKCJ1bnVzZWQiKQorCXByb3RlY3RlZCBJUGFydExpc3RlbmVyIHBhcnRMaXN0ZW5lciA9IG5ldyBJUGFydExpc3RlbmVyKCkgeworCisJCXB1YmxpYyB2b2lkIHBhcnRBY3RpdmF0ZWQoSVdvcmtiZW5jaFBhcnQgcGFydCkgeworCQkJLy8gQmFzaWNhbGx5IHRoZXJlIGFyZSB0aHJlZSB3YXlzIHRoZSBlZGl0b3IgZ2V0cyAiYWN0aXZhdGVkIiwKKwkJCS8vIGVpdGhlciB0aGUgQ29udGVudCBPdXRsaW5lIHZpZXcgb3IgdGhlIFByb3BlcnR5IFNoZWV0IHZpZXdzIGFyZQorCQkJLy8gYWN0aXZhdGVkIHdpdGggIm91ciIgcGFnZSBiZWluZyBkaXNwbGF5ZWQsIG9yIHRoZSBlZGl0b3IgaXRzZWxmCisJCQkvLyBpcyBhY3RpdmF0ZWQuIFdlIHNraW0gdGhyb3VnaCB0aGUgcG9zc2liaWxpdGllcyBiZWxvdywgaWdub3JpbmcKKwkJCS8vIGFueSBvdGhlciBwb3NzaWJpbGl0aWVzLgorCisJCQkvLyBJcyB0aGUgY29udGVudCBvdXRsaW5lIHZpZXcgYmVpbmcgYWN0aXZhdGVkPworCQkJaWYgKHBhcnQgaW5zdGFuY2VvZiBDb250ZW50T3V0bGluZSkgeworCQkJCS8vIFllcworCQkJCS8vIElzIHRoZSBjdXJyZW50IHBhZ2UgaW4gdGhlIENvbnRlbnQgT3V0bGluZSB2aWV3IG91ciBwYWdlPworCQkJCS8vIGlmICgoKENvbnRlbnRPdXRsaW5lKSBwYXJ0KS5nZXRDdXJyZW50UGFnZSgpID09CisJCQkJLy8gY29udGVudE91dGxpbmVQYWdlKSB7CisJCQkJLy8gLy8gWWVzCisJCQkJLy8gZ2V0QWN0aW9uQmFyQ29udHJpYnV0b3IoKS5zZXRBY3RpdmVFZGl0b3IoCisJCQkJLy8gSWRlbnRpZmlhYmxlRWRpdG9yLnRoaXMpOworCQkJCS8vIHNldEN1cnJlbnRWaWV3ZXIoY29udGVudE91dGxpbmVWaWV3ZXIpOworCQkJCS8vIH0gLy8gaWYgb3VyIG91dGxpbmUgcGFnZQorCisJCQl9IC8vIGlmIGNvbnRlbnQgb3V0bGluZSB2aWV3IGFjdGl2YXRlZAorCQkJLy8gSXMgdGhlIGN1cnJlbnQgcHJvcGVydHkgc2hlZXQgdmlldyBiZWluZyBhY3RpdmF0ZWQ/CisJCQllbHNlIGlmIChwYXJ0IGluc3RhbmNlb2YgUHJvcGVydHlTaGVldCkgeworCQkJCS8vIFllcworCQkJCS8vIElzIHRoZSBjdXJyZW50IHBhZ2UgaW4gdGhlIHByb3BlcnR5IHZpZXcgb3VyIHBhZ2U/CisJCQkJLy8gaWYgKCgoUHJvcGVydHlTaGVldCkgcGFydCkuZ2V0Q3VycmVudFBhZ2UoKSA9PQorCQkJCS8vIHByb3BlcnR5U2hlZXRQYWdlKSB7CisJCQkJLy8gLy8gWWVzCisJCQkJLy8gZ2V0QWN0aW9uQmFyQ29udHJpYnV0b3IoKS5zZXRBY3RpdmVFZGl0b3IoCisJCQkJLy8gSWRlbnRpZmFibGVFZGl0b3IudGhpcyk7CisJCQkJLy8gaGFuZGxlQWN0aXZhdGUoKTsKKwkJCQkvLyB9IC8vIGlmIG91ciBwcm9wZXJ0eSBwYWdlCisJCQl9IC8vIGlmIHByb3BlcnR5IHNoZWV0IHZpZXcKKwkJCS8vIElzIHRoaXMgZWRpdG9yIGJlaW5nIGFjdGl2YXRlZD8KKwkJCWVsc2UgaWYgKHBhcnQgPT0gSWRlbnRpZmlhYmxlRWRpdG9yLnRoaXMpIHsKKwkJCQkvLyBZZXMKKwkJCQloYW5kbGVBY3RpdmF0ZSgpOworCQkJfSAvLyBpZgorCisJCX0gLy8gcGFydEFjdGl2YXRlZAorCisJCXB1YmxpYyB2b2lkIHBhcnRCcm91Z2h0VG9Ub3AoSVdvcmtiZW5jaFBhcnQgcGFydCkgeworCQkJLy8gSWdub3JlCisJCX0KKworCQlwdWJsaWMgdm9pZCBwYXJ0Q2xvc2VkKElXb3JrYmVuY2hQYXJ0IHBhcnQpIHsKKwkJCS8vIElnbm9yZQorCQl9CisKKwkJcHVibGljIHZvaWQgcGFydERlYWN0aXZhdGVkKElXb3JrYmVuY2hQYXJ0IHBhcnQpIHsKKwkJCS8vIElnbm9yZQorCQl9CisKKwkJcHVibGljIHZvaWQgcGFydE9wZW5lZChJV29ya2JlbmNoUGFydCBwYXJ0KSB7CisJCQkvLyBJZ25vcmUKKwkJfQorCX07IC8vIHBhcnRMaXN0ZW5lcgorCisJLyoqCisJICogVGhpcyBpcyB0aGUge0BsaW5rIElTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXJ9IGZvciB0aGUgZWRpdG9yLiBJdCBpcworCSAqIGFsd2F5cyBsaXN0ZW5pbmcgdG8gdGhlIHtAbGluayBWaWV3ZXJ9IHJlZmVyZW5jZWQgYnkKKwkgKiB7QGxpbmsgI2N1cnJlbnRWaWV3ZXJ9LiBUaGUgbWV0aG9kIHtAbGluayAjc2V0Q3VycmVudFZpZXdlcihWaWV3ZXIpfQorCSAqIG1haW50YWlucyB0aGUgYXNzb2NpYXRpb24uCisJICovCisJcHJpdmF0ZSBmaW5hbCBJU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyIHNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lciA9IG5ldyBJU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyKCkgeworCQlwdWJsaWMgdm9pZCBzZWxlY3Rpb25DaGFuZ2VkKFNlbGVjdGlvbkNoYW5nZWRFdmVudCBldmVudCkgeworCQkJc2V0U2VsZWN0aW9uKGV2ZW50LmdldFNlbGVjdGlvbigpKTsKKwkJfQorCX07IC8vIHNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcgorCisJLyoqCisJICogVGhpcyBrZWVwcyB0cmFjayBvZiBhbGwgdGhlCisJICoge0BsaW5rIG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcn1zIHRoYXQgYXJlCisJICogbGlzdGVuaW5nIHRvIHRoaXMgZWRpdG9yLgorCSAqLworCXByb3RlY3RlZCBDb2xsZWN0aW9uPElTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXI+IHNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcnMgPSBuZXcgQXJyYXlMaXN0PElTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXI+KCk7CisKKwkvKioKKwkgKiBUaGUgZWRpdG9yJ3MgY3VycmVudCBzZWxlY3Rpb24uCisJICogCisJICogQHNlIHtAbGluayAjc2V0U2VsZWN0aW9uKElTZWxlY3Rpb24pfQorCSAqIEBzZWUgI2dldFNlbGVjdGlvbigpCisJICovCisJcHJvdGVjdGVkIElTZWxlY3Rpb24gZWRpdG9yU2VsZWN0aW9uID0gU3RydWN0dXJlZFNlbGVjdGlvbi5FTVBUWTsKKworCS8qKgorCSAqIERlZmF1bHQgQ29uc3RydWN0b3IKKwkgKi8KKwlwdWJsaWMgSWRlbnRpZmlhYmxlRWRpdG9yKCkgeworCQlzdXBlcigpOworCQlhZGFwdGVyRmFjdG9yeSA9IGNyZWF0ZUFkYXB0ZXJGYWN0b3J5KCk7CisJCWVkaXRpbmdEb21haW4gPSBjcmVhdGVFZGl0aW5nRG9tYWluKGFkYXB0ZXJGYWN0b3J5KTsKKwl9IC8vIElkZW50aWZpYWJsZUVkaXRvcgorCisJLyoqCisJICogQHJldHVybiB0aGUge0BsaW5rIEFkYXB0ZXJGYWN0b3J5fSB0aGF0IHdpbGwgcHJvdmlkZSB0aGUKKwkgKiAgICAgICAgIHtAbGluayBJdGVtUHJvdmlkZXJ9cyBuZWVkZWQgdG8gYWRhcHQgdGhlIHtAbGluayBJZGVudGlmaWFibGV9cworCSAqICAgICAgICAgZm9yIHRoZSBlZGl0b3IuCisJICovCisJcHJvdGVjdGVkIENvbXBvc2VkQWRhcHRlckZhY3RvcnkgY3JlYXRlQWRhcHRlckZhY3RvcnkoKSB7CisJCWZpbmFsIENvbXBvc2VkQWRhcHRlckZhY3RvcnkgcmV0VmFsdWUgPSBuZXcgQ29tcG9zZWRBZGFwdGVyRmFjdG9yeSgKKwkJCQlDb21wb3NlZEFkYXB0ZXJGYWN0b3J5LkRlc2NyaXB0b3IuUmVnaXN0cnkuSU5TVEFOQ0UpOworCQlyZXRWYWx1ZS5hZGRBZGFwdGVyRmFjdG9yeShuZXcgUmVzb3VyY2VJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSgpKTsKKwkJcmV0VmFsdWUuYWRkQWRhcHRlckZhY3RvcnkobmV3IENvbW1vbkl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5KCkpOworCQlyZXRWYWx1ZS5hZGRBZGFwdGVyRmFjdG9yeShuZXcgRXhwZXJpbWVudEl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5KCkpOworCQlyZXRWYWx1ZS5hZGRBZGFwdGVyRmFjdG9yeShuZXcgR3JhcGhJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSgpKTsKKwkJcmV0VmFsdWUuYWRkQWRhcHRlckZhY3RvcnkobmV3IE1vZGVsSXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkoKSk7CisJCXJldFZhbHVlLmFkZEFkYXB0ZXJGYWN0b3J5KG5ldyBTY2VuYXJpb0l0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5KCkpOworCQlyZXRWYWx1ZS5hZGRBZGFwdGVyRmFjdG9yeShuZXcgU2VxdWVuY2VySXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkoKSk7CisJCXJldFZhbHVlLmFkZEFkYXB0ZXJGYWN0b3J5KG5ldyBFY29yZUl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5KCkpOworCQlyZXRWYWx1ZS5hZGRBZGFwdGVyRmFjdG9yeShuZXcgUmVmbGVjdGl2ZUl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5KCkpOworCQlyZXR1cm4gcmV0VmFsdWU7CisJfSAvLyBjcmVhdGVBZGFwdGVyRmFjdG9yeQorCisJLyoqCisJICogQHBhcmFtIGFkYXB0ZXJGYWN0b3J5CisJICogICAgICAgICAgICB0aGUge0BsaW5rIEFkYXB0ZXJGYWN0b3J5fSB0aGF0IHdpbGwgYmUgdXNlZCB0byBjcmVhdGUgdGhlCisJICogICAgICAgICAgICB7QGxpbmsgRWRpdGluZ0RvbWFpbn0uCisJICogQHJldHVybiBhbiB7QGxpbmsgRWRpdGluZ0RvbWFpbn0KKwkgKi8KKwlwcml2YXRlIEFkYXB0ZXJGYWN0b3J5RWRpdGluZ0RvbWFpbiBjcmVhdGVFZGl0aW5nRG9tYWluKAorCQkJZmluYWwgQWRhcHRlckZhY3RvcnkgYWRhcHRlckZhY3RvcnkpIHsKKworCQkvLyBDcmVhdGUgdGhlIGNvbW1hbmQgc3RhY2sgZm9yIHRoZSBlZGl0IGNvbW1hbmRzCisJCWZpbmFsIEJhc2ljQ29tbWFuZFN0YWNrIGNvbW1hbmRTdGFjayA9IG5ldyBCYXNpY0NvbW1hbmRTdGFjaygpOworCisJCS8vIEFkZCBhIGxpc3RlbmVyIHRvIHRoZSBjb21tYW5kIHN0YWNrIHNvIHdlIGNhbiB0cmFjayB3aGljaCBvYmplY3RzIGFyZQorCQkvLyBjaGFuZ2VkIGJ5IHRoZSBjb21tYW5kIGFuZCB0aGVuIHVzZSB0aGVtIGFzIHRoZSBzZWxlY3Rpb24uCisKKwkJY29tbWFuZFN0YWNrLmFkZENvbW1hbmRTdGFja0xpc3RlbmVyKG5ldyBDb21tYW5kU3RhY2tMaXN0ZW5lcigpIHsKKwkJCUBTdXBwcmVzc1dhcm5pbmdzKCJzeW50aGV0aWMtYWNjZXNzIikKKwkJCXB1YmxpYyB2b2lkIGNvbW1hbmRTdGFja0NoYW5nZWQoZmluYWwgRXZlbnRPYmplY3QgZXZlbnQpIHsKKwkJCQlnZXRDb250YWluZXIoKS5nZXREaXNwbGF5KCkuYXN5bmNFeGVjKG5ldyBSdW5uYWJsZSgpIHsKKwkJCQkJcHVibGljIHZvaWQgcnVuKCkgeworCQkJCQkJLy8gVGVsbCBhbnkgbGlzdGVuZXJzIHRoYXQgdGhlIGVkaXRvciBpcyBub3cgImRpcnR5IgorCQkJCQkJZmlyZVByb3BlcnR5Q2hhbmdlKElFZGl0b3JQYXJ0LlBST1BfRElSVFkpOworCisJCQkJCQlmaW5hbCBDb21tYW5kIG1vc3RSZWNlbnRDb21tYW5kID0gKChDb21tYW5kU3RhY2spIGV2ZW50CisJCQkJCQkJCS5nZXRTb3VyY2UoKSkuZ2V0TW9zdFJlY2VudENvbW1hbmQoKTsKKwkJCQkJCS8vIFdhcyB0aGVyZSBhIGNvbW1hbmQ/CisJCQkJCQlpZiAobW9zdFJlY2VudENvbW1hbmQgIT0gbnVsbCkgeworCQkJCQkJCS8vIFllcworCQkJCQkJCXNldFNlbGVjdGlvblRvVmlld2VyKG1vc3RSZWNlbnRDb21tYW5kCisJCQkJCQkJCQkuZ2V0QWZmZWN0ZWRPYmplY3RzKCkpOworCQkJCQkJfSAvLyBpZiBjb21tYW5kCisKKwkJCQkJCS8vIFJlZnJlc2ggdGhlIHByb3BlcnR5IHNoZWV0CisJCQkJCQkvLyBpZiAocHJvcGVydHlTaGVldFBhZ2UgIT0gbnVsbCkgeworCQkJCQkJLy8gLy8gWWVzCisJCQkJCQkvLwkJCQkJCQkKKwkJCQkJCS8vIH0gLy8gaWYKKwkJCQkJfSAvLyBydW4KKworCQkJCQlwcml2YXRlIHZvaWQgc2V0U2VsZWN0aW9uVG9WaWV3ZXIoCisJCQkJCQkJZmluYWwgQ29sbGVjdGlvbjw/PiBzZWxlY3Rpb24pIHsKKwkJCQkJCS8vIEFueXRoaW5nIHRoZXJlPworCQkJCQkJaWYgKHNlbGVjdGlvbiAhPSBudWxsICYmIHNlbGVjdGlvbi5pc0VtcHR5KCkgPT0gZmFsc2UpIHsKKwkJCQkJCQkvLyBZZXMKKwkJCQkJCQluZXcgUnVubmFibGUoKSB7CisJCQkJCQkJCXB1YmxpYyB2b2lkIHJ1bigpIHsKKwkJCQkJCQkJCWlmIChjdXJyZW50Vmlld2VyICE9IG51bGwpIHsKKwkJCQkJCQkJCQkvLyBZZXMKKwkJCQkJCQkJCQljdXJyZW50Vmlld2VyCisJCQkJCQkJCQkJCQkuc2V0U2VsZWN0aW9uKG5ldyBTdHJ1Y3R1cmVkU2VsZWN0aW9uKAorCQkJCQkJCQkJCQkJCQlzZWxlY3Rpb24pKTsKKwkJCQkJCQkJCX0gLy8gaWYKKwkJCQkJCQkJfSAvLyBydW4KKwkJCQkJCQl9LnJ1bigpOworCQkJCQkJfSAvLyBpZgorCQkJCQl9IC8vIHNldFNlbGVjdGlvblRvVmlld2VyCisJCQkJfSk7CisJCQl9CisJCX0pOworCisJCXJldHVybiBuZXcgQWRhcHRlckZhY3RvcnlFZGl0aW5nRG9tYWluKGFkYXB0ZXJGYWN0b3J5LCBjb21tYW5kU3RhY2ssCisJCQkJbmV3IEhhc2hNYXA8UmVzb3VyY2UsIEJvb2xlYW4+KCkpIHsKKwkJCQkJQE92ZXJyaWRlCisJCQkJCXB1YmxpYyBDb21tYW5kIGNyZWF0ZUNvbW1hbmQoCisJCQkJCQkJQ2xhc3M8PyBleHRlbmRzIENvbW1hbmQ+IGNvbW1hbmRDbGFzcywKKwkJCQkJCQlDb21tYW5kUGFyYW1ldGVyIGNvbW1hbmRQYXJhbWV0ZXIpIHsKKwkJCQkJCWlmIChjb21tYW5kQ2xhc3MgPT0gRGVsZXRlQ29tbWFuZC5jbGFzcykgeworCQkJCQkJCS8vIFllcworLy8JCQkJCQkJSVN0cnVjdHVyZWRTZWxlY3Rpb24gc3M9IChJU3RydWN0dXJlZFNlbGVjdGlvbikgY3VycmVudFZpZXdlci5nZXRTZWxlY3Rpb24oKTsKKy8vCQkJCQkJCQorLy8JCQkJCQkJSVRyZWVTZWxlY3Rpb24gb2JqID0gKElUcmVlU2VsZWN0aW9uKSAgZWRpdG9yU2VsZWN0aW9uOworLy8JCQkJCQkJVHJlZVBhdGhbXSBwYXRocyA9IG9iai5nZXRQYXRocygpOworCQkJCQkJCXJldHVybiBzdXBlci5jcmVhdGVDb21tYW5kKGNvbW1hbmRDbGFzcywgY29tbWFuZFBhcmFtZXRlcik7CisJCQkJCQl9IC8vIGlmIAorCQkJCQkJcmV0dXJuIHN1cGVyLmNyZWF0ZUNvbW1hbmQoY29tbWFuZENsYXNzLCBjb21tYW5kUGFyYW1ldGVyKTsKKwkJCQkJfX07CisJfSAvLyBjcmVhdGVFZGl0aW5nRG9tYWluCisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnVpLnBhcnQuTXVsdGlQYWdlRWRpdG9yUGFydCNpbml0KG9yZy5lY2xpcHNlLnVpLklFZGl0b3JTaXRlLAorCSAqICAgICAgb3JnLmVjbGlwc2UudWkuSUVkaXRvcklucHV0KQorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGluaXQoSUVkaXRvclNpdGUgc2l0ZSwgSUVkaXRvcklucHV0IGlucHV0KSB7CisJCXNldFNpdGUoc2l0ZSk7CisJCXNldElucHV0KGlucHV0KTsKKwkJc2V0UGFydE5hbWUoaW5wdXQuZ2V0TmFtZSgpKTsKKwkJc2l0ZS5zZXRTZWxlY3Rpb25Qcm92aWRlcih0aGlzKTsKKwkJc2l0ZS5nZXRQYWdlKCkuYWRkUGFydExpc3RlbmVyKHBhcnRMaXN0ZW5lcik7CisJCS8vIFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5hZGRSZXNvdXJjZUNoYW5nZUxpc3RlbmVyKAorCQkvLyByZXNvdXJjZUNoYW5nZUxpc3RlbmVyLCBJUmVzb3VyY2VDaGFuZ2VFdmVudC5QT1NUX0NIQU5HRSk7CisJfSAvLyBpbml0CisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnVpLnBhcnQuTXVsdGlQYWdlRWRpdG9yUGFydCNjcmVhdGVQYWdlcygpCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgY3JlYXRlUGFnZXMoKSB7CisJCS8vIExvYWQgdGhlIElkZW50aWZpYWJsZSB0byBiZSBlZGl0ZWQKKwkJbG9hZElkZW50aWZpYWJsZSgpOworCisJCS8vIERpZCBhbnl0aGluZyBhY3R1YWxseSBnZXQgbG9hZGVkPworCQlpZiAoZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpLmdldFJlc291cmNlcygpLmlzRW1wdHkoKSA9PSBmYWxzZQorCQkJCSYmIGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKS5nZXRSZXNvdXJjZXMoKS5nZXQoMCkKKwkJCQkJCS5nZXRDb250ZW50cygpLmlzRW1wdHkoKSA9PSBmYWxzZSkgeworCQkJLy8gWWVzCisJCQkvLyBXZSBjcmVhdGUgYSBwYWdlIHRoYXQgaXMgYSB0cmVlIHZpZXcgb2YgdGhlIElkZW50aWZpYWJsZQorCQkJZmluYWwgVHJlZSB0cmVlID0gbmV3IFRyZWUoZ2V0Q29udGFpbmVyKCksIFNXVC5NVUxUSSk7CisJCQlmaW5hbCBUcmVlVmlld2VyIHRyZWVWaWV3ZXIgPSBuZXcgVHJlZVZpZXdlcih0cmVlKTsKKwkJCXNldEN1cnJlbnRWaWV3ZXIodHJlZVZpZXdlcik7CisKKwkJCXRyZWVWaWV3ZXIuc2V0Q29udGVudFByb3ZpZGVyKG5ldyBBZGFwdGVyRmFjdG9yeUNvbnRlbnRQcm92aWRlcigKKwkJCQkJYWRhcHRlckZhY3RvcnkpKTsKKwkJCXRyZWVWaWV3ZXIuc2V0TGFiZWxQcm92aWRlcihuZXcgQWRhcHRlckZhY3RvcnlMYWJlbFByb3ZpZGVyKAorCQkJCQlhZGFwdGVyRmFjdG9yeSkpOworCQkJdHJlZVZpZXdlci5zZXRJbnB1dChlZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkuZ2V0UmVzb3VyY2VzKCkKKwkJCQkJLmdldCgwKSk7CisJCQkvLyB0cmVlVmlld2VyLnNldFNlbGVjdGlvbihzZWxlY3Rpb24pOworCisJCQluZXcgQWRhcHRlckZhY3RvcnlUcmVlRWRpdG9yKHRyZWVWaWV3ZXIuZ2V0VHJlZSgpLCBhZGFwdGVyRmFjdG9yeSk7CisKKwkJCWNyZWF0ZUNvbnRleHRNZW51KHRyZWVWaWV3ZXIpOworCisJCQkvLyBTdXBwb3J0IGZvciBkcmFnZ2luZyBhbmQgZHJvcHBpbmcgSWRlbnRpZmlhYmxlcworCQkJYWRkRHJhZ05Ecm9wU3VwcG9ydCh0cmVlVmlld2VyKTsKKwkJCQorCQkJZmluYWwgaW50IHBhZ2VJbmRleCA9IGFkZFBhZ2UodHJlZSk7CisJCQlzZXRQYWdlVGV4dChwYWdlSW5kZXgsICJ0cmVlIGVkaXRvciIpOworCisJCQkvLyBPayBub3cgaXQncyB0aW1lIHRvIGNyZWF0ZSBhbmQgYWRkIGFueSBwYWdlcyB0aGF0IGFyZSBzcGVjaWZpYyB0bworCQkJLy8gdGhlIElkZW50aWZpYWJsZSAuCisJCQljcmVhdGVJZGVudGlmaWFibGVTcGVjaWZpY1BhZ2VzKCk7CisKKwkJCS8vIFN3aXRjaCB0byB0aGUgYWN0aXZlIHBhZ2UuCisJCQlnZXRTaXRlKCkuZ2V0U2hlbGwoKS5nZXREaXNwbGF5KCkuYXN5bmNFeGVjKG5ldyBSdW5uYWJsZSgpIHsKKwkJCQlAU3VwcHJlc3NXYXJuaW5ncygic3ludGhldGljLWFjY2VzcyIpCisJCQkJcHVibGljIHZvaWQgcnVuKCkgeworCQkJCQlzZXRBY3RpdmVQYWdlKDApOworCQkJCX0KKwkJCX0pOworCQl9IC8vIGlmCisJfSAvLyBjcmVhdGVQYWdlcworCisJLyoqCisJICogVGhpcyBtZXRob2QgbG9hZHMgYSByZXNvdXJjZSBpbnRvIHRoZSBlZGl0b3IncyB7QGxpbmsgRWRpdGluZ0RvbWFpbn0KKwkgKiB7QGxpbmsgUmVzb3VyY2VTZXR9LgorCSAqIDxwPgorCSAqIFRoaXMgaXMgYmFzaWNhbGx5IHRoZSBzYW1lIGFzIG1ldGhvZCAiY3JlYXRlTW9kZWwiIHRoZSBnZW5lcmF0ZWQgY29kZQorCSAqLworCXByaXZhdGUgdm9pZCBsb2FkSWRlbnRpZmlhYmxlKCkgeworCQlmaW5hbCBVUkkgcmVzb3VyY2VVUkkgPSBFZGl0VUlVdGlsLmdldFVSSShnZXRFZGl0b3JJbnB1dCgpKTsKKwkJQFN1cHByZXNzV2FybmluZ3MoInVudXNlZCIpCisJCUV4Y2VwdGlvbiBleGNlcHRpb24gPSBudWxsOworCQlAU3VwcHJlc3NXYXJuaW5ncygidW51c2VkIikKKwkJUmVzb3VyY2UgcmVzb3VyY2UgPSBudWxsOworCisJCXRyeSB7CisJCQkvLyBGaXJzdCB3ZSB0cnkgdG8gZGVtYW5kIGxvYWQgdGhlIHJlc291cmNlIC0+IHRydWUKKwkJCXJlc291cmNlID0gZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpLmdldFJlc291cmNlKHJlc291cmNlVVJJLAorCQkJCQl0cnVlKTsKKwkJfSBjYXRjaCAoZmluYWwgRXhjZXB0aW9uIGUpIHsKKwkJCS8vIFJlbWVtYmVyIHRoZSBleGNlcHRpb24KKwkJCWV4Y2VwdGlvbiA9IGU7CisJCQkvLyBUaGF0IGRpZG4ndCB3b3JrLCBzbyBkb24ndCBkZW1hbmQgbG9hZCB0aGUgcmVzb3VyY2UgLT4gZmFsc2UKKwkJCXJlc291cmNlID0gZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpLmdldFJlc291cmNlKHJlc291cmNlVVJJLAorCQkJCQlmYWxzZSk7CisJCX0gLy8gY2F0Y2ggRXhjZXB0aW9uCisJCS8vIE5lZWQgY29kZSBoZXJlIHRvIGFuYWx5emUgdGhlIGV4Y2VwdGlvbiBpZiB0aGVyZSB3YXMgb25lLiBzZWUKKwkJLy8gY3JlYXRlTW9kZWwoKQorCX0gLy8gbG9hZElkZW50aWZpYWJsZQorCisJLyoqCisJICogVGhpcyBtYWtlcyBzdXJlIHRoYXQgb25lIGNvbnRlbnQge0BsaW5rIFZpZXdlcn0sIGVpdGhlciB0aGUgb25lIGZvciB0aGUKKwkgKiBjdXJyZW50IHBhZ2UgaW4gdGhlIGVkaXRvciwgb3IgdGhlIG9uZSBpbiB0aGUgb3V0bGluZSB2aWV3LCBpZiBpdCBoYXMKKwkgKiBmb2N1cywgaXMgdGhlIGN1cnJlbnQgb25lLiBCYXNpY2FsbHksIHRoaXMgY29kZSBtYWludGFpbnMgd2hpY2gKKwkgKiB7QGxpbmsgVmlld2VyfSB7QGxpbmsgI3NlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcn0gaXMgbGlzdGVuaW5nIHRvLgorCSAqIAorCSAqIEBwYXJhbSBuZXdWaWV3ZXIKKwkgKiAgICAgICAgICAgIHRoZSBuZXcge0BsaW5rIFZpZXdlcn0KKwkgKi8KKwlwcml2YXRlIHZvaWQgc2V0Q3VycmVudFZpZXdlcihWaWV3ZXIgbmV3Vmlld2VyKSB7CisJCS8vIElzIHRoZSBuZXcgdmlld2VyIGRpZmZlcmVudCBmcm9tIHRoZSBjdXJyZW50IG9uZT8KKwkJaWYgKG5ld1ZpZXdlciAhPSBjdXJyZW50Vmlld2VyKSB7CisJCQkvLyBZZXMKKwkJCS8vIElzIHRoZXJlIGEgY3VycmVudCAoaS5lLiBvbGQpIHZpZXdlcj8KKwkJCWlmIChjdXJyZW50Vmlld2VyICE9IG51bGwpIHsKKwkJCQkvLyBZZXMKKwkJCQkvLyBXZSdyZSBub3QgbGlzdGVuaW5nIHRvIGl0IGFueSBtb3JlCisJCQkJY3VycmVudFZpZXdlcgorCQkJCQkJLnJlbW92ZVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcihzZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIpOworCQkJfSAvLyBpZgorCisJCQkvLyBJcyB0aGVyZSBhIG5ldyB2aWV3ZXI/CisJCQlpZiAobmV3Vmlld2VyICE9IG51bGwpIHsKKwkJCQkvLyBZZXMKKwkJCQkvLyBXZSdyZSBsaXN0ZW5pbmcgdG8gaXQgbm93CisJCQkJbmV3Vmlld2VyLmFkZFNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcihzZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIpOworCQkJfSAvLyBpZgorCisJCQljdXJyZW50Vmlld2VyID0gbmV3Vmlld2VyOworCisJCQkvLyBOb3cgd2UgbmVlZCB0byBzZXQgdGhlIHNlbGVjdGlvbiBpbiB0aGUgZWRpdG9yIGJhc2VkIG9uIHRoZSBuZXcKKwkJCS8vIHZpZXdlcidzIGN1cnJlbnQgc2VsZWN0aW9uLgorCQkJc2V0U2VsZWN0aW9uKG5ld1ZpZXdlciA9PSBudWxsID8gU3RydWN0dXJlZFNlbGVjdGlvbi5FTVBUWQorCQkJCQk6IG5ld1ZpZXdlci5nZXRTZWxlY3Rpb24oKSk7CisJCX0gLy8gaWYgZGlmZmVyZW50IHZpZXdlcgorCX0gLy8gc2V0Q3VycmVudFZpZXdlcgorCisJcHJpdmF0ZSB2b2lkIGNyZWF0ZUNvbnRleHRNZW51KFN0cnVjdHVyZWRWaWV3ZXIgdmlld2VyKSB7CisJCU1lbnVNYW5hZ2VyIGNvbnRleHRNZW51ID0gbmV3IE1lbnVNYW5hZ2VyKCIjUG9wVXAiKTsKKwkJY29udGV4dE1lbnUuYWRkKG5ldyBTZXBhcmF0b3IoImFkZGl0aW9ucyIpKTsKKworCQkvLyBJIHRoaW5rIHRoaXMgaXMgY2xlYXJpbmcgdGhlIG1lbnUgaW4gcHJlcGFyYXRpb24gZm9yIGJlaW5nIHJlY3JlYXRlZAorCQkvLyBqdXN0IGJlZm9yZSBpdCBpcyBkaXNwbGF5ZWQuCisJCWNvbnRleHRNZW51LnNldFJlbW92ZUFsbFdoZW5TaG93bih0cnVlKTsKKworCQkvLyBSZWdpc3RlciB0byBoYXZlIG91ciBtZW51QWJvdXRUb1Nob3coKSBtZXRob2QgYmUgY2FsbGVkIGp1c3QgYmVmb3JlCisJCS8vIHRoZSBjb250ZXh0IG1lbnUgaXMgZGlzcGxheWVkLgorCQljb250ZXh0TWVudS5hZGRNZW51TGlzdGVuZXIodGhpcyk7CisKKwkJZmluYWwgTWVudSBtZW51ID0gY29udGV4dE1lbnUuY3JlYXRlQ29udGV4dE1lbnUodmlld2VyLmdldENvbnRyb2woKSk7CisJCXZpZXdlci5nZXRDb250cm9sKCkuc2V0TWVudShtZW51KTsKKwkJZ2V0U2l0ZSgpLnJlZ2lzdGVyQ29udGV4dE1lbnUoY29udGV4dE1lbnUsIHZpZXdlcik7CisKKworCX0gLy8gY3JlYXRlQ29udGV4dE1lbnUKKworCXByaXZhdGUgdm9pZCBhZGREcmFnTkRyb3BTdXBwb3J0KFN0cnVjdHVyZWRWaWV3ZXIgdmlld2VyKSB7CisJCWZpbmFsIGludCBkbmRPcGVyYXRpb25zID0gRE5ELkRST1BfQ09QWSB8IERORC5EUk9QX01PVkUgfCBETkQuRFJPUF9MSU5LOworCQlmaW5hbCBUcmFuc2ZlcltdIHRyYW5zZmVycyA9IG5ldyBUcmFuc2ZlcltdIHsKKwkJCQlMb2NhbFRyYW5zZmVyLmdldEluc3RhbmNlKCksIFRleHRUcmFuc2Zlci5nZXRJbnN0YW5jZSgpIH07CisJCXZpZXdlci5hZGREcmFnU3VwcG9ydChkbmRPcGVyYXRpb25zLCB0cmFuc2ZlcnMsIG5ldyBWaWV3ZXJEcmFnQWRhcHRlcigKKwkJCQl2aWV3ZXIpKTsKKwkJdmlld2VyLmFkZERyb3BTdXBwb3J0KGRuZE9wZXJhdGlvbnMsIHRyYW5zZmVycywKKworCQluZXcgRWRpdGluZ0RvbWFpblZpZXdlckRyb3BBZGFwdGVyKGVkaXRpbmdEb21haW4sIHZpZXdlcikgeworCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgdm9pZCBkcmFnRW50ZXIoRHJvcFRhcmdldEV2ZW50IGV2ZW50KSB7CisJCQkJLy8gV2UgbWFrZSBhbGwgb3BlcmF0aW9ucyBhIGRyb3AgbGluaworCQkJCWV2ZW50LmRldGFpbCA9IERORC5EUk9QX0xJTks7CisJCQkJc3VwZXIuZHJhZ0VudGVyKGV2ZW50KTsKKwkJCX0KKworCQkJLyoqCisJCQkgKiBXZSBvdmVycmlkZSB0aGUgc3VwZXIgbWV0aG9kIGJlY2F1c2UgdGhlIElkZW50aWZpYWJsZVBsdWdpblZpZXcKKwkJCSAqIHByb3ZpZGVzIGEgQ29sbGVjdGlvbnMgb2YgSWRlbnRpZmlhYmxlcywgcmF0aGVyIHRoYW4gYW4KKwkJCSAqIElTdHJ1Y3R1cmVTZWxjdGlvbiBvZiBJZGVudGlmaWFibGVEZWxlZ2F0ZXMuCisJCQkgKi8KKwkJCUBPdmVycmlkZQorCQkJcHJvdGVjdGVkIENvbGxlY3Rpb248Pz4gZXh0cmFjdERyYWdTb3VyY2UoT2JqZWN0IG9iamVjdCkgeworCQkJCWlmIChvYmplY3QgaW5zdGFuY2VvZiBDb2xsZWN0aW9uKSB7CisJCQkJCS8vIFllcworCQkJCQlyZXR1cm4gKENvbGxlY3Rpb248Pz4pIG9iamVjdDsKKwkJCQl9IC8vIGlmCisJCQkJcmV0dXJuIHN1cGVyLmV4dHJhY3REcmFnU291cmNlKG9iamVjdCk7CisJCQl9CisJCX0pOworCX0gLy8gYWRkRHJhZ05Ecm9wU3VwcG9ydAorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSU1lbnVMaXN0ZW5lciNtZW51QWJvdXRUb1Nob3cob3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklNZW51TWFuYWdlcikKKwkgKi8KKwlwdWJsaWMgdm9pZCBtZW51QWJvdXRUb1Nob3coSU1lbnVNYW5hZ2VyIG1lbnVNYW5hZ2VyKSB7CisJCSgoSU1lbnVMaXN0ZW5lcikgZ2V0RWRpdG9yU2l0ZSgpLmdldEFjdGlvbkJhckNvbnRyaWJ1dG9yKCkpCisJCQkJLm1lbnVBYm91dFRvU2hvdyhtZW51TWFuYWdlcik7CisJfSAvLyBtZW51QWJvdXRUb1Nob3cKKworCXByb3RlY3RlZCBFZGl0aW5nRG9tYWluQWN0aW9uQmFyQ29udHJpYnV0b3IgZ2V0QWN0aW9uQmFyQ29udHJpYnV0b3IoKSB7CisJCXJldHVybiAoRWRpdGluZ0RvbWFpbkFjdGlvbkJhckNvbnRyaWJ1dG9yKSBnZXRFZGl0b3JTaXRlKCkKKwkJCQkuZ2V0QWN0aW9uQmFyQ29udHJpYnV0b3IoKTsKKwl9IC8vIGdldEFjdGlvbkJhckNvbnRyaWJ1dG9yCisKKwkvKioKKwkgKiBUaGlzIGhhbmRsZXMgdGhlIGFjdGl2YXRpb24gb2YgdGhlIGVkaXRvciBvciBpdCdzIGFzc29jaWF0ZWQgY29udGVudAorCSAqIG91dGxpbmUgb3IgcHJvcGVydHkgc2hlZXQgdmlldy4KKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBoYW5kbGVBY3RpdmF0ZSgpIHsKKwkJLy8gUmVjb21wdXRlIHRoZSByZWFkIG9ubHkgc3RhdGU/CisJCWlmIChlZGl0aW5nRG9tYWluLmdldFJlc291cmNlVG9SZWFkT25seU1hcCgpICE9IG51bGwpIHsKKwkJCS8vIFllcworCQkJZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVRvUmVhZE9ubHlNYXAoKS5jbGVhcigpOworCisJCQkvLyBSZWZyZXNoIGFueSBhY3Rpb25zIHRoYXQgbWF5IGJlY29tZSBlbmFibGVkIG9yIGRpc2FibGVkCisJCQlzZXRTZWxlY3Rpb24oZ2V0U2VsZWN0aW9uKCkpOworCQl9IC8vIGlmCisKKwkJLy8gVGhpcyBpcyBub3QgZmluaXNoZWQgeWV0LCB0aGUgcmVtb3ZlZCBhbmQgY2hhbmdlZCByZXNvdXJjZXMgYXJlIG5vdAorCQkvLyBpbml0aWFsaXplZC4KKwl9IC8vIGhhbmRsZUFjdGl2YXRlCisKKwkvKioKKwkgKiBUaGlzIG1ldGhvZCBpcyBvdmVycmlkZGVuIGJ5IGV4dGVuZGluZyBjbGFzc2VzIHNvIHRoYXQgdGhleSBjYW4gcHJvdmlkZSBhCisJICogcGFnZSB0byB0aGUgZWRpdG9yIHRoYXQgaXMgc3BlY2lmaWMgdG8gdGhlIHR5cGUgb2Yge0BsaW5rIElkZW50aWZpYWJsZX0KKwkgKiB0aGV5IGFyZSBlZGl0aW5nLgorCSAqLworCXByb3RlY3RlZCB2b2lkIGNyZWF0ZUlkZW50aWZpYWJsZVNwZWNpZmljUGFnZXMoKSB7CisJCS8vIE5vdGhpbmcKKwl9IC8vIGNyZWF0ZUlkZW50aWZpYWJsZVNwZWNpZmljUGFnZXMKKworCQorCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2UuZW1mLmVkaXQuZG9tYWluLklFZGl0aW5nRG9tYWluUHJvdmlkZXIjZ2V0RWRpdGluZ0RvbWFpbigpCisJICovCisJcHVibGljIEVkaXRpbmdEb21haW4gZ2V0RWRpdGluZ0RvbWFpbigpIHsKKwkJcmV0dXJuIGVkaXRpbmdEb21haW47CisJfQorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS51aS5wYXJ0LkVkaXRvclBhcnQjZG9TYXZlKG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUHJvZ3Jlc3NNb25pdG9yKQorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGRvU2F2ZSgKKwkJCUBTdXBwcmVzc1dhcm5pbmdzKCJ1bnVzZWQiKSBmaW5hbCBJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IpIHsKKwkJdHJ5IHsKKwkJCS8vIEZpcnN0ICJ0cnVlIiAtPiBmb3JrLCBzZWNvbmQgImZhbHNlIiAtPiBjYW5jZWxhYmxlCisJCQluZXcgUHJvZ3Jlc3NNb25pdG9yRGlhbG9nKGdldFNpdGUoKS5nZXRTaGVsbCgpKS5ydW4odHJ1ZSwgZmFsc2UsCisJCQkJCXNhdmVPcGVyYXRpb24pOworCQkJKChCYXNpY0NvbW1hbmRTdGFjaykgZWRpdGluZ0RvbWFpbi5nZXRDb21tYW5kU3RhY2soKSkuc2F2ZUlzRG9uZSgpOworCQkJZmlyZVByb3BlcnR5Q2hhbmdlKElFZGl0b3JQYXJ0LlBST1BfRElSVFkpOworCQl9IGNhdGNoIChmaW5hbCBFeGNlcHRpb24gZSkgeworCQkJQWN0aXZhdG9yLmxvZ0Vycm9yKCJQcm9ibGVtIHNhdmluZyIsIGUpOworCQl9IC8vIGNhdGNoIEV4Y2VwdGlvbgorCX0gLy8gZG9TYXZlCisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnVpLnBhcnQuRWRpdG9yUGFydCNkb1NhdmVBcygpCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgZG9TYXZlQXMoKSB7CisJCWZpbmFsIFNhdmVBc0RpYWxvZyBzYXZlQXNEaWFsb2cgPSBuZXcgU2F2ZUFzRGlhbG9nKGdldFNpdGUoKS5nZXRTaGVsbCgpKTsKKwkJc2F2ZUFzRGlhbG9nLm9wZW4oKTsKKwkJZmluYWwgSVBhdGggcGF0aCA9IHNhdmVBc0RpYWxvZy5nZXRSZXN1bHQoKTsKKwkJLy8gRGlkIHdlIGdldCBhIHBhdGg/CisJCWlmIChwYXRoICE9IG51bGwpIHsKKwkJCS8vIFllcworCQkJZmluYWwgSUZpbGUgZmlsZSA9IFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5nZXRSb290KCkKKwkJCQkJLmdldEZpbGUocGF0aCk7CisJCQkvLyBEaWQgd2UgZ2V0IGEgdmFsaWQgZmlsZT8KKwkJCWlmIChmaWxlICE9IG51bGwpIHsKKwkJCQkvLyBZZXMKKwkJCQlkb1NhdmVBcyhVUkkuY3JlYXRlUGxhdGZvcm1SZXNvdXJjZVVSSShmaWxlLmdldEZ1bGxQYXRoKCkKKwkJCQkJCS50b1N0cmluZygpLCB0cnVlKSwgbmV3IEZpbGVFZGl0b3JJbnB1dChmaWxlKSk7CisJCQl9IC8vIGlmCisJCX0gLy8gaWYKKworCX0gLy8gZG9TYXZlQXMKKworCXByaXZhdGUgdm9pZCBkb1NhdmVBcyhmaW5hbCBVUkkgdXJpLCBmaW5hbCBGaWxlRWRpdG9ySW5wdXQgZmlsZUVkaXRvcklucHV0KSB7CisJCS8vIFRoZSBVUkkgb2YgdGhlIHJlc291cmNlIGhhcyBjaGFuZ2VkLCB1cGRhdGUKKwkJKGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKS5nZXRSZXNvdXJjZXMoKS5nZXQoMCkpLnNldFVSSSh1cmkpOworCQkvLyBTZXQgdGhlIGVkaXRvcidzIGlucHV0IHRvIHRoZSBuZXcgRmlsZUVkaXRvcklucHV0CisJCXNldElucHV0V2l0aE5vdGlmeShmaWxlRWRpdG9ySW5wdXQpOworCQlzZXRQYXJ0TmFtZShmaWxlRWRpdG9ySW5wdXQuZ2V0TmFtZSgpKTsKKworCQlmaW5hbCBFZGl0aW5nRG9tYWluQWN0aW9uQmFyQ29udHJpYnV0b3IgZWRhYyA9IChFZGl0aW5nRG9tYWluQWN0aW9uQmFyQ29udHJpYnV0b3IpIGdldEVkaXRvclNpdGUoKQorCQkJCS5nZXRBY3Rpb25CYXJDb250cmlidXRvcigpOworCisJCWZpbmFsIElTdGF0dXNMaW5lTWFuYWdlciBpc2xtID0gZWRhYy5nZXRBY3Rpb25CYXJzKCkKKwkJCQkuZ2V0U3RhdHVzTGluZU1hbmFnZXIoKTsKKworCQkvLyBHZXQgYSBwcm9ncmVzcyBiYXIgZm9yIHRoZSBzYXZlLi4uLgorCQlmaW5hbCBJUHJvZ3Jlc3NNb25pdG9yIHByb2dyZXNzTW9uaXRvciA9IGlzbG0gIT0gbnVsbCA/IGlzbG0KKwkJCQkuZ2V0UHJvZ3Jlc3NNb25pdG9yKCkgOiBuZXcgTnVsbFByb2dyZXNzTW9uaXRvcigpOworCisJCS8vIE5vdyBzYXZlLi4uCisJCWRvU2F2ZShwcm9ncmVzc01vbml0b3IpOworCX0gLy8gZG9TYXZlQXMKKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2UudWkucGFydC5FZGl0b3JQYXJ0I2lzU2F2ZUFzQWxsb3dlZCgpCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIGJvb2xlYW4gaXNTYXZlQXNBbGxvd2VkKCkgeworCQlyZXR1cm4gdHJ1ZTsKKwl9IC8vIGlzU2F2ZUFzQWxsb3dlZAorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb25Qcm92aWRlciNhZGRTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIob3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyKQorCSAqLworCXB1YmxpYyB2b2lkIGFkZFNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcihJU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyIGxpc3RlbmVyKSB7CisJCXNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcnMuYWRkKGxpc3RlbmVyKTsKKwl9CisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvblByb3ZpZGVyI3JlbW92ZVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcihvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIpCisJICovCisJcHVibGljIHZvaWQgcmVtb3ZlU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyKAorCQkJSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lciBsaXN0ZW5lcikgeworCQlzZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXJzLnJlbW92ZShsaXN0ZW5lcik7CisJfQorCisJLyoqCisJICogVGhpcyBpbXBsZW1lbnRzIHtAbGluayBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb25Qcm92aWRlcn0gdG8KKwkgKiByZXR1cm4gdGhpcyBlZGl0b3IncyBvdmVyYWxsIHNlbGVjdGlvbi4KKwkgKiAKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvblByb3ZpZGVyI2dldFNlbGVjdGlvbigpCisJICovCisJcHVibGljIElTZWxlY3Rpb24gZ2V0U2VsZWN0aW9uKCkgeworCQlyZXR1cm4gZWRpdG9yU2VsZWN0aW9uOworCX0gLy8gZ2V0U2VsZWN0aW9uCisKKwkvKioKKwkgKiBUaGlzIGltcGxlbWVudHMge0BsaW5rIG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvblByb3ZpZGVyfSB0bworCSAqIHNldCB0aGlzIGVkaXRvcidzIG92ZXJhbGwgc2VsZWN0aW9uLiBDYWxsaW5nIHRoaXMgcmVzdWx0IHdpbGwgbm90aWZ5IHRoZQorCSAqIGxpc3RlbmVycy4KKwkgKiAKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvblByb3ZpZGVyI3NldFNlbGVjdGlvbihvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb24pCisJICovCisJcHVibGljIHZvaWQgc2V0U2VsZWN0aW9uKElTZWxlY3Rpb24gc2VsZWN0aW9uKSB7CisJCWVkaXRvclNlbGVjdGlvbiA9IHNlbGVjdGlvbjsKKworCQlmb3IgKElTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIgbGlzdGVuZXIgOiBzZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXJzKSB7CisJCQlsaXN0ZW5lcgorCQkJCQkuc2VsZWN0aW9uQ2hhbmdlZChuZXcgU2VsZWN0aW9uQ2hhbmdlZEV2ZW50KHRoaXMsIHNlbGVjdGlvbikpOworCQl9IC8vIGZvciBlYWNoIElTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIKKwkJLy8gc2V0U3RhdHVzTGluZU1hbmFnZXIoc2VsZWN0aW9uKTsKKwl9IC8vIHNldFNlbGVjdGlvbgorCit9IC8vIElkZW50aWZpYWJsZUVkaXRvcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL2VkaXRvcnMvU2NlbmFyaW9FZGl0b3IuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9lZGl0b3JzL1NjZW5hcmlvRWRpdG9yLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTU4NDBkZAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9lZGl0b3JzL1NjZW5hcmlvRWRpdG9yLmphdmEKQEAgLTAsMCArMSwzMCBAQAorLy8gU2NlbmFyaW9FZGl0b3IuamF2YQorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnVpLmVkaXRvcnM7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioKKyAqIFRoaXMgY2xhc3MgaXMgYW4ge0BsaW5rIG9yZy5lY2xpcHNlLnVpLnBhcnQuRWRpdG9yUGFydH0gdGhhdCBlZGl0cworICoge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zY2VuYXJpby5TY2VuYXJpb31zLgorICovCitwdWJsaWMgY2xhc3MgU2NlbmFyaW9FZGl0b3IgZXh0ZW5kcyBJZGVudGlmaWFibGVFZGl0b3IgeworCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnVpLmVkaXRvcnMuSWRlbnRpZmlhYmxlRWRpdG9yI2NyZWF0ZUlkZW50aWZpYWJsZVNwZWNpZmljUGFnZXMoKQorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIGNyZWF0ZUlkZW50aWZpYWJsZVNwZWNpZmljUGFnZXMoKSB7CisJCS8vIFRPRE8gQXV0by1nZW5lcmF0ZWQgbWV0aG9kIHN0dWIKKwkJc3VwZXIuY3JlYXRlSWRlbnRpZmlhYmxlU3BlY2lmaWNQYWdlcygpOworCX0KKworfSAvLyBTY2VuYXJpb0VkaXRvcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL2hhbmRsZXJzL0RlbGV0ZUhhbmRsZXIuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9oYW5kbGVycy9EZWxldGVIYW5kbGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGQ4MGU5NwotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9oYW5kbGVycy9EZWxldGVIYW5kbGVyLmphdmEKQEAgLTAsMCArMSwxMTQgQEAKKy8vIFNURU1FeGVjdXRpb25Db21tYW5kSGFuZGxlci5qYXZhCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0udWkuaGFuZGxlcnM7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTAgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUuY29tbWFuZHMuQWJzdHJhY3RIYW5kbGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUuY29tbWFuZHMuRXhlY3V0aW9uRXZlbnQ7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5jb21tYW5kcy5FeGVjdXRpb25FeGNlcHRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5jb21tYW5kcy5JSGFuZGxlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUmVzb3VyY2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBsYXRmb3JtOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlN0cnVjdHVyZWRTZWxlY3Rpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5UcmVlUGF0aDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlRyZWVTZWxlY3Rpb247CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5hZGFwdGVycy5maWxlLkZpbGU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS51aS5BY3RpdmF0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS51aS52aWV3cy5leHBsb3Jlci5JZGVudGlmaWFibGVUcmVlTm9kZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5oYW5kbGVycy5IYW5kbGVyVXRpbDsKKworLyoqCisgKiBUaGlzIGNsYXNzIGlzIHRoZSB0b3AtbGV2ZWwge0BsaW5rIElIYW5kbGVyfSBmb3IgdGhlIFNURU0gRGVsZXRlIGNvbW1hbmQKKyAqIGhhbmRsZXJzIAorICovCitwdWJsaWMgY2xhc3MgRGVsZXRlSGFuZGxlciBleHRlbmRzIEFic3RyYWN0SGFuZGxlcgorCQlpbXBsZW1lbnRzIElIYW5kbGVyIHsKKwkKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLmNvcmUuY29tbWFuZHMuQWJzdHJhY3RIYW5kbGVyI2V4ZWN1dGUob3JnLmVjbGlwc2UuY29yZS5jb21tYW5kcy5FeGVjdXRpb25FdmVudCkKKwkgKi8KKwlwdWJsaWMgT2JqZWN0IGV4ZWN1dGUoZmluYWwgRXhlY3V0aW9uRXZlbnQgZXhlY3V0aW9uRXZlbnQpCisJCQl0aHJvd3MgRXhlY3V0aW9uRXhjZXB0aW9uIHsKKworCQkKKwkJZmluYWwgSVNlbGVjdGlvbiBzZWxlY3Rpb24gPSBIYW5kbGVyVXRpbAorCQkJCS5nZXRDdXJyZW50U2VsZWN0aW9uQ2hlY2tlZChleGVjdXRpb25FdmVudCk7CisJCQorCQkvLyBTdHJ1Y3R1cmVkIFNlbGVjdGlvbj8KKwkJaWYgKHNlbGVjdGlvbiBpbnN0YW5jZW9mIFN0cnVjdHVyZWRTZWxlY3Rpb24pIHsKKwkJCQorCQkJLy8gWWVzCisJCQkvLyBJdGVyYXRlIHRocm91Z2ggZXZlcnl0aGluZyB0aGF0J3MgaW4gdGhlIHNlbGVjdGlvbiBhbmQgcHV0IGVhY2gKKwkJCS8vIG9iamVjdCBpbnRvIHRoZSBhcHByb3ByaWF0ZSBjb2xsZWN0aW9uLgorCQkJZm9yIChmaW5hbCBPYmplY3Qgb2JqIDogKChTdHJ1Y3R1cmVkU2VsZWN0aW9uKSBzZWxlY3Rpb24pLnRvTGlzdCgpKSB7CisJCQkJLy8gSUV4ZWN1dGFibGUgZXhlY3V0YWJsZSA9IChJRXhlY3V0YWJsZSkgRXhlY3V0YWJsZUFkYXB0ZXJGYWN0b3J5LklOU1RBTkNFCisJCQkJLy8gLmFkYXB0KG9iaiwgSUV4ZWN1dGFibGUuY2xhc3MpOworCQkJCQorCQkJCUZpbGUgZmlsZSA9IChGaWxlKSBQbGF0Zm9ybQorCQkJCS5nZXRBZGFwdGVyTWFuYWdlcigpLmdldEFkYXB0ZXIob2JqLCBGaWxlLmNsYXNzKTsgCisJCQorCisJCQkJCisJCQkJLy8gV2VyZSB3ZSBzdWNjZXNzZnVsIGluIGFkYXB0aW5nPworCQkJCWlmIChmaWxlICE9IG51bGwpIHsKKwkJCQkJLy8gWWVzCisJCQkJCWRvaXQoZmlsZSk7CisJCQkJfSAvLyBpZgorCQkJCWVsc2UgeworCQkJCQkvLyBJbnRlcm5hbCBlcnJvcgorCQkJCQlBY3RpdmF0b3IubG9nRXJyb3IoCisJCQkJCQkJIlNURU0gSW50ZXJuYWwgZXJyb3IgZGVsZXRlIGNvbW1hbmQgYXBwbGllZCB0byBcIiIKKwkJCQkJCQkJCSsgb2JqLmdldENsYXNzKCkuZ2V0TmFtZSgpICsgIlwiIiwgbnVsbCk7CisJCQkJfQorCQkJfSAvLyBmb3IgZWFjaCBzZWxlY3Rpb24KKwkJCQorCQkJCisJCX0gLy8gaWYgU3RydWN0dXJlZFNlbGVjdGlvbgorCisJCWlmKHNlbGVjdGlvbiBpbnN0YW5jZW9mIFRyZWVTZWxlY3Rpb24pIHsKKwkJCVRyZWVTZWxlY3Rpb24gdHMgPSAoVHJlZVNlbGVjdGlvbilzZWxlY3Rpb247CisJCQlUcmVlUGF0aFtdIHBhdGhzID0gIHRzLmdldFBhdGhzKCk7CisJCQlpZihwYXRocy5sZW5ndGggPiAwKSB7CisJCQkJVHJlZVBhdGggcGFyZW50ID0gcGF0aHNbMF0uZ2V0UGFyZW50UGF0aCgpOworCQkJCU9iamVjdCBwYXJlbnRTZWcgPSBwYXJlbnQuZ2V0TGFzdFNlZ21lbnQoKTsKKwkJCQlpZihwYXJlbnRTZWcgIT0gbnVsbCkgeworCQkJCQlJUHJvamVjdCBwcm9qZWN0ID0gbnVsbDsKKwkJCQkJaWYocGFyZW50U2VnIGluc3RhbmNlb2YgSWRlbnRpZmlhYmxlVHJlZU5vZGUpIHsgCisJCQkJCQlwcm9qZWN0ID0oKElkZW50aWZpYWJsZVRyZWVOb2RlKXBhcmVudFNlZykuZ2V0UHJvamVjdCgpOworCQkJCQl9IGlmKHBhcmVudFNlZyBpbnN0YW5jZW9mIElQcm9qZWN0KSBwcm9qZWN0ID0gKElQcm9qZWN0KXBhcmVudFNlZzsKKwkJCQkJCisJCQkJCXRyeSB7CisJCQkJCQlwcm9qZWN0LnJlZnJlc2hMb2NhbChJUmVzb3VyY2UuREVQVEhfSU5GSU5JVEUsIG51bGwpOworCQkJCQl9IGNhdGNoKEV4Y2VwdGlvbiBlKSB7CisJCQkJCQlBY3RpdmF0b3IubG9nRXJyb3IoZS5nZXRNZXNzYWdlKCksIGUpOworCQkJCQl9CisJCQkJfQorCQkJfQorCQl9CisJCXJldHVybiBudWxsOworCX0gLy8gZXhlY3V0ZQorCisJLyoqCisJICogRGVsZXRlIHRoZSBpZGVudGlmaWFibGUKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBkb2l0KEZpbGUgZmlsZSkgeworCQl0cnkgeworCQkJZmlsZS5kZWxldGUoKTsKKwkJfSBjYXRjaChJT0V4Y2VwdGlvbiBpb2UpIHsKKwkJCUFjdGl2YXRvci5sb2dFcnJvcihpb2UuZ2V0TWVzc2FnZSgpLCBpb2UpOworCQl9CisJfQorfSAvLyAgRGVsZXRlSGFuZGxlcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL2hhbmRsZXJzL0VkaXRvckFjdGlvblByb3ZpZGVyLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvaGFuZGxlcnMvRWRpdG9yQWN0aW9uUHJvdmlkZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hOWM4ZWM3Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL2hhbmRsZXJzL0VkaXRvckFjdGlvblByb3ZpZGVyLmphdmEKQEAgLTAsMCArMSwzNTAgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS51aS5oYW5kbGVyczsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JRmlsZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5SZXNvdXJjZXNQbHVnaW47CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQYXRoOworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QYXRoOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5BYnN0cmFjdEFjdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSUFjdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSU1lbnVDcmVhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnJlc291cmNlLkltYWdlRGVzY3JpcHRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU3RydWN0dXJlZFNlbGVjdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLklkZW50aWZpYWJsZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnVpLkFjdGl2YXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLkhlbHBMaXN0ZW5lcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5FdmVudDsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5JQWN0aW9uQmFyczsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5JV29ya2JlbmNoUGFnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5QYXJ0SW5pdEV4Y2VwdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5pZGUuSURFOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLm5hdmlnYXRvci5Db21tb25BY3Rpb25Qcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5uYXZpZ2F0b3IuSUNvbW1vbkFjdGlvbkNvbnN0YW50czsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5uYXZpZ2F0b3IuSUNvbW1vbkFjdGlvbkV4dGVuc2lvblNpdGU7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkubmF2aWdhdG9yLklDb21tb25WaWV3ZXJTaXRlOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLm5hdmlnYXRvci5JQ29tbW9uVmlld2VyV29ya2JlbmNoU2l0ZTsKKworLyoqCisgKiB7QGxpbmsgQWN0aW9ufSB0aGF0IG9wZW5zIHRoZSBlZGl0b3Igd2hlbiBhbiB7QGxpbmsgSWRlbnRpZmlhYmxlfSBpcworICogZG91YmxlLWNsaWNrZWQgaW4gdGhlIHByb2plY3QgZXhwbG9yZXIuCisgKi8KK0BTdXBwcmVzc1dhcm5pbmdzKCJ1bnVzZWQiKQorcHVibGljIGNsYXNzIEVkaXRvckFjdGlvblByb3ZpZGVyIGV4dGVuZHMgQ29tbW9uQWN0aW9uUHJvdmlkZXIgeworCisJSUFjdGlvbiBvcGVuQWN0aW9uID0gbnVsbDsKKworCS8qKgorCSAqIERlZmF1bHQgQ29uc3RydWN0b3IKKwkgKi8KKwlwdWJsaWMgRWRpdG9yQWN0aW9uUHJvdmlkZXIoKSB7CisJCS8vIE5vdGhpbmcKKwl9CisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnVpLm5hdmlnYXRvci5Db21tb25BY3Rpb25Qcm92aWRlciNpbml0KG9yZy5lY2xpcHNlLnVpLm5hdmlnYXRvci5JQ29tbW9uQWN0aW9uRXh0ZW5zaW9uU2l0ZSkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBpbml0KElDb21tb25BY3Rpb25FeHRlbnNpb25TaXRlIHNpdGUpIHsKKwkJSUNvbW1vblZpZXdlclNpdGUgYVNpdGUgPSBzaXRlLmdldFZpZXdTaXRlKCk7CisJCWlmIChhU2l0ZSBpbnN0YW5jZW9mIElDb21tb25WaWV3ZXJXb3JrYmVuY2hTaXRlKSB7CisJCQlJQ29tbW9uVmlld2VyV29ya2JlbmNoU2l0ZSBjdndzID0gKElDb21tb25WaWV3ZXJXb3JrYmVuY2hTaXRlKSBhU2l0ZTsKKwkJCW9wZW5BY3Rpb24gPSBuZXcgT3BlbklkZW50aWZpYWJsZUFjdGlvbihjdndzLmdldFBhZ2UoKSwgY3Z3cworCQkJCQkuZ2V0U2VsZWN0aW9uUHJvdmlkZXIoKSk7CisJCX0gLy8gaWYKKwl9IC8vIGluaXQKKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2UudWkuYWN0aW9ucy5BY3Rpb25Hcm91cCNmaWxsQWN0aW9uQmFycyhvcmcuZWNsaXBzZS51aS5JQWN0aW9uQmFycykKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBmaWxsQWN0aW9uQmFycyhJQWN0aW9uQmFycyBhY3Rpb25CYXJzKSB7CisJCWlmIChvcGVuQWN0aW9uLmlzRW5hYmxlZCgpKSB7CisJCQlhY3Rpb25CYXJzLnNldEdsb2JhbEFjdGlvbkhhbmRsZXIoSUNvbW1vbkFjdGlvbkNvbnN0YW50cy5PUEVOLAorCQkJCQlvcGVuQWN0aW9uKTsKKwkJfQorCX0KKworCS8qKgorCSAqIFRoZSB7QGxpbmsgQWN0aW9ufSB0aGF0IG9wZW5zIGFuIGVkaXRvciBvbiB0aGUgc2VsZWN0ZWQKKwkgKiB7QGxpbmsgSWRlbnRpZmlhYmxlfS4KKwkgKi8KKwlwdWJsaWMgc3RhdGljIGNsYXNzIE9wZW5JZGVudGlmaWFibGVBY3Rpb24gZXh0ZW5kcyBBYnN0cmFjdEFjdGlvbiBpbXBsZW1lbnRzCisJCQlJQWN0aW9uIHsKKworCQlwcml2YXRlIGZpbmFsIElXb3JrYmVuY2hQYWdlIHBhZ2U7CisJCXByaXZhdGUgZmluYWwgSVNlbGVjdGlvblByb3ZpZGVyIHNlbGVjdGlvblByb3ZpZGVyOworCQlwcml2YXRlIElkZW50aWZpYWJsZSBzZWxlY3RlZElkZW50aWZpYWJsZTsKKworCQkvKioKKwkJICogQ29uc3RydWN0b3IKKwkJICogCisJCSAqIEBwYXJhbSBwYWdlCisJCSAqIEBwYXJhbSBzZWxlY3Rpb25Qcm92aWRlcgorCQkgKi8KKwkJcHVibGljIE9wZW5JZGVudGlmaWFibGVBY3Rpb24oSVdvcmtiZW5jaFBhZ2UgcGFnZSwKKwkJCQlJU2VsZWN0aW9uUHJvdmlkZXIgc2VsZWN0aW9uUHJvdmlkZXIpIHsKKwkJCXRoaXMucGFnZSA9IHBhZ2U7CisJCQl0aGlzLnNlbGVjdGlvblByb3ZpZGVyID0gc2VsZWN0aW9uUHJvdmlkZXI7CisJCX0gLy8gT3BlbklkZW50aWZpYWJsZUFjdGlvbgorCisJCS8qKgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JQWN0aW9uI3J1bigpCisJCSAqLworCQlwdWJsaWMgdm9pZCBydW4oKSB7CisJCQlmaW5hbCBJUGF0aCBwYXRoID0gbmV3IFBhdGgoc2VsZWN0ZWRJZGVudGlmaWFibGUuZ2V0VVJJKCkKKwkJCQkJLnRvUGxhdGZvcm1TdHJpbmcodHJ1ZSkpOworCQkJZmluYWwgSUZpbGUgZmlsZSA9IFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5nZXRSb290KCkKKwkJCQkJLmdldEZpbGUocGF0aCk7CisKKwkJCS8vIEZvdW5kIHRoZSBmaWxlPworCQkJaWYgKGZpbGUgIT0gbnVsbCkgeworCQkJCS8vIFllcworCQkJCXRyeSB7CisJCQkJCUlERS5vcGVuRWRpdG9yKHBhZ2UsIGZpbGUsIHRydWUpOworCQkJCX0gY2F0Y2ggKFBhcnRJbml0RXhjZXB0aW9uIGUpIHsKKwkJCQkJQWN0aXZhdG9yLmxvZ0Vycm9yKCJQcm9ibGVtIG9wZW5pbmcgZWRpdG9yIiwgZSk7CisJCQkJfQorCQkJfSAvLyBpZiBmaWxlIGZvdW5kCisJCQllbHNlIHsKKwkJCQlBY3RpdmF0b3IubG9nRXJyb3IoIkNvdWxkIG5vdCBmaW5kIGZpbGUgXCIiICsgcGF0aC50b1N0cmluZygpCisJCQkJCQkrICJcIiIsIG51bGwpOworCQkJfQorCisJCX0gLy8gcnVuCisKKwkJLyoqCisJCSAqIEBzZWUgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklBY3Rpb24jaXNFbmFibGVkKCkKKwkJICovCisJCXB1YmxpYyBib29sZWFuIGlzRW5hYmxlZCgpIHsKKwkJCWJvb2xlYW4gcmV0VmFsdWUgPSBmYWxzZTsKKwkJCUlTZWxlY3Rpb24gc2VsZWN0aW9uID0gc2VsZWN0aW9uUHJvdmlkZXIuZ2V0U2VsZWN0aW9uKCk7CisJCQkvLyBBbnl0aGluZyBzZWxlY3RlZD8KKwkJCWlmICghc2VsZWN0aW9uLmlzRW1wdHkoKSkgeworCQkJCUlTdHJ1Y3R1cmVkU2VsZWN0aW9uIHNTZWxlY3Rpb24gPSAoSVN0cnVjdHVyZWRTZWxlY3Rpb24pIHNlbGVjdGlvbjsKKwkJCQlpZiAoc1NlbGVjdGlvbi5zaXplKCkgPT0gMQorCQkJCQkJJiYgc1NlbGVjdGlvbi5nZXRGaXJzdEVsZW1lbnQoKSBpbnN0YW5jZW9mIElkZW50aWZpYWJsZSkgeworCQkJCQkvLyBZZXMKKwkJCQkJc2VsZWN0ZWRJZGVudGlmaWFibGUgPSAoSWRlbnRpZmlhYmxlKSBzU2VsZWN0aW9uCisJCQkJCQkJLmdldEZpcnN0RWxlbWVudCgpOworCQkJCQlyZXRWYWx1ZSA9IHRydWU7CisJCQkJfQorCQkJfQorCQkJcmV0dXJuIHJldFZhbHVlOworCQl9IC8vIGlzRW5hYmxlZAorCisJCS8qKgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JQWN0aW9uI2dldEFjY2VsZXJhdG9yKCkKKwkJICovCisJCXB1YmxpYyBpbnQgZ2V0QWNjZWxlcmF0b3IoKSB7CisJCQlyZXR1cm4gMDsKKwkJfQorCisJCS8qKgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JQWN0aW9uI2dldEFjdGlvbkRlZmluaXRpb25JZCgpCisJCSAqLworCQlwdWJsaWMgU3RyaW5nIGdldEFjdGlvbkRlZmluaXRpb25JZCgpIHsKKwkJCXJldHVybiBudWxsOworCQl9CisKKwkJLyoqCisJCSAqIEBzZWUgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklBY3Rpb24jZ2V0RGVzY3JpcHRpb24oKQorCQkgKi8KKwkJcHVibGljIFN0cmluZyBnZXREZXNjcmlwdGlvbigpIHsKKwkJCXJldHVybiBudWxsOworCQl9CisKKwkJLyoqCisJCSAqIEBzZWUgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklBY3Rpb24jZ2V0RGlzYWJsZWRJbWFnZURlc2NyaXB0b3IoKQorCQkgKi8KKwkJcHVibGljIEltYWdlRGVzY3JpcHRvciBnZXREaXNhYmxlZEltYWdlRGVzY3JpcHRvcigpIHsKKwkJCXJldHVybiBudWxsOworCQl9CisKKwkJLyoqCisJCSAqIEBzZWUgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklBY3Rpb24jZ2V0SGVscExpc3RlbmVyKCkKKwkJICovCisJCXB1YmxpYyBIZWxwTGlzdGVuZXIgZ2V0SGVscExpc3RlbmVyKCkgeworCQkJcmV0dXJuIG51bGw7CisJCX0KKworCQkvKioKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSUFjdGlvbiNnZXRIb3ZlckltYWdlRGVzY3JpcHRvcigpCisJCSAqLworCQlwdWJsaWMgSW1hZ2VEZXNjcmlwdG9yIGdldEhvdmVySW1hZ2VEZXNjcmlwdG9yKCkgeworCQkJcmV0dXJuIG51bGw7CisJCX0KKworCQkvKioKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSUFjdGlvbiNnZXRJZCgpCisJCSAqLworCQlwdWJsaWMgU3RyaW5nIGdldElkKCkgeworCQkJcmV0dXJuIG51bGw7CisJCX0KKworCQkvKioKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSUFjdGlvbiNnZXRJbWFnZURlc2NyaXB0b3IoKQorCQkgKi8KKwkJcHVibGljIEltYWdlRGVzY3JpcHRvciBnZXRJbWFnZURlc2NyaXB0b3IoKSB7CisJCQlyZXR1cm4gbnVsbDsKKwkJfQorCisJCS8qKgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JQWN0aW9uI2dldE1lbnVDcmVhdG9yKCkKKwkJICovCisJCXB1YmxpYyBJTWVudUNyZWF0b3IgZ2V0TWVudUNyZWF0b3IoKSB7CisJCQlyZXR1cm4gbnVsbDsKKwkJfQorCisJCS8qKgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JQWN0aW9uI2dldFN0eWxlKCkKKwkJICovCisJCXB1YmxpYyBpbnQgZ2V0U3R5bGUoKSB7CisJCQlyZXR1cm4gMDsKKwkJfQorCisJCS8qKgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JQWN0aW9uI2dldFRleHQoKQorCQkgKi8KKwkJcHVibGljIFN0cmluZyBnZXRUZXh0KCkgeworCQkJcmV0dXJuIG51bGw7CisJCX0KKworCQkvKioKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSUFjdGlvbiNnZXRUb29sVGlwVGV4dCgpCisJCSAqLworCQlwdWJsaWMgU3RyaW5nIGdldFRvb2xUaXBUZXh0KCkgeworCQkJcmV0dXJuIG51bGw7CisJCX0KKworCQkvKioKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSUFjdGlvbiNpc0NoZWNrZWQoKQorCQkgKi8KKwkJcHVibGljIGJvb2xlYW4gaXNDaGVja2VkKCkgeworCQkJcmV0dXJuIGZhbHNlOworCQl9CisKKwkJLyoqCisJCSAqIEBzZWUgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklBY3Rpb24jaXNIYW5kbGVkKCkKKwkJICovCisJCXB1YmxpYyBib29sZWFuIGlzSGFuZGxlZCgpIHsKKwkJCS8vIFRPRE8gQXV0by1nZW5lcmF0ZWQgbWV0aG9kIHN0dWIKKwkJCXJldHVybiBmYWxzZTsKKwkJfQorCisJCS8qKgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JQWN0aW9uI3J1bldpdGhFdmVudChvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5FdmVudCkKKwkJICovCisJCXB1YmxpYyB2b2lkIHJ1bldpdGhFdmVudChFdmVudCBldmVudCkgeworCQkJLy8gTm90aGluZworCQl9CisKKwkJLyoqCisJCSAqIEBzZWUgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklBY3Rpb24jc2V0QWNjZWxlcmF0b3IoaW50KQorCQkgKi8KKwkJcHVibGljIHZvaWQgc2V0QWNjZWxlcmF0b3IoaW50IGtleWNvZGUpIHsKKwkJCS8vIE5vdGhpbmcKKwkJfQorCisJCS8qKgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JQWN0aW9uI3NldEFjdGlvbkRlZmluaXRpb25JZChqYXZhLmxhbmcuCisJCSAqICAgICAgU3RyaW5nKQorCQkgKi8KKwkJcHVibGljIHZvaWQgc2V0QWN0aW9uRGVmaW5pdGlvbklkKFN0cmluZyBpZCkgeworCQkJLy8gTm90aGluZworCQl9CisKKwkJLyoqCisJCSAqIEBzZWUgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklBY3Rpb24jc2V0Q2hlY2tlZChib29sZWFuKQorCQkgKi8KKwkJcHVibGljIHZvaWQgc2V0Q2hlY2tlZChib29sZWFuIGNoZWNrZWQpIHsKKwkJCS8vIE5vdGhpbmcKKwkJfQorCisJCS8qKgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JQWN0aW9uI3NldERlc2NyaXB0aW9uKGphdmEubGFuZy5TdHJpbmcpCisJCSAqLworCQlwdWJsaWMgdm9pZCBzZXREZXNjcmlwdGlvbihTdHJpbmcgdGV4dCkgeworCQkJLy8gTm90aGluZworCQl9CisKKwkJLyoqCisJCSAqIEBzZWUgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklBY3Rpb24jc2V0RGlzYWJsZWRJbWFnZURlc2NyaXB0b3Iob3JnLmVjbGlwc2UKKwkJICogICAgICAuamZhY2UucmVzb3VyY2UuSW1hZ2VEZXNjcmlwdG9yKQorCQkgKi8KKwkJcHVibGljIHZvaWQgc2V0RGlzYWJsZWRJbWFnZURlc2NyaXB0b3IoSW1hZ2VEZXNjcmlwdG9yIG5ld0ltYWdlKSB7CisJCQkvLyBOb3RoaW5nCisJCX0KKworCQkvKioKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSUFjdGlvbiNzZXRFbmFibGVkKGJvb2xlYW4pCisJCSAqLworCQlwdWJsaWMgdm9pZCBzZXRFbmFibGVkKGJvb2xlYW4gZW5hYmxlZCkgeworCQkJLy8gTm90aGluZworCQl9CisKKwkJLyoqCisJCSAqIEBzZWUgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklBY3Rpb24jc2V0SGVscExpc3RlbmVyKG9yZy5lY2xpcHNlLnN3dC4KKwkJICogICAgICBldmVudHMuSGVscExpc3RlbmVyKQorCQkgKi8KKwkJcHVibGljIHZvaWQgc2V0SGVscExpc3RlbmVyKEhlbHBMaXN0ZW5lciBsaXN0ZW5lcikgeworCQkJLy8gTm90aGluZworCQl9CisKKwkJLyoqCisJCSAqIEBzZWUgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklBY3Rpb24jc2V0SG92ZXJJbWFnZURlc2NyaXB0b3Iob3JnLmVjbGlwc2UuamZhY2UucmVzb3VyY2UuSW1hZ2VEZXNjcmlwdG9yKQorCQkgKi8KKwkJcHVibGljIHZvaWQgc2V0SG92ZXJJbWFnZURlc2NyaXB0b3IoSW1hZ2VEZXNjcmlwdG9yIG5ld0ltYWdlKSB7CisJCQkvLyBOb3RoaW5nCisJCX0KKworCQkvKioKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSUFjdGlvbiNzZXRJZChqYXZhLmxhbmcuU3RyaW5nKQorCQkgKi8KKwkJcHVibGljIHZvaWQgc2V0SWQoU3RyaW5nIGlkKSB7CisJCQkvLyBOb3RoaW5nCisJCX0KKworCQkvKioKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSUFjdGlvbiNzZXRJbWFnZURlc2NyaXB0b3Iob3JnLmVjbGlwc2UuamZhY2UucmVzb3VyY2UuSW1hZ2VEZXNjcmlwdG9yKQorCQkgKi8KKwkJcHVibGljIHZvaWQgc2V0SW1hZ2VEZXNjcmlwdG9yKEltYWdlRGVzY3JpcHRvciBuZXdJbWFnZSkgeworCQkJLy8gTm90aGluZworCQl9CisKKwkJLyoqCisJCSAqIEBwYXJhbSBjcmVhdG9yCisJCSAqIEBzZWUgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklBY3Rpb24jc2V0TWVudUNyZWF0b3Iob3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklNZW51Q3JlYXRvcikKKwkJICovCisJCXB1YmxpYyB2b2lkIHNldE1lbnVDcmVhdG9yKElNZW51Q3JlYXRvciBjcmVhdG9yKSB7CisJCQkvLyBOb3RoaW5nCisJCX0KKworCQkvKioKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSUFjdGlvbiNzZXRUZXh0KGphdmEubGFuZy5TdHJpbmcpCisJCSAqLworCQlwdWJsaWMgdm9pZCBzZXRUZXh0KFN0cmluZyB0ZXh0KSB7CisJCQkvLyBOb3RoaW5nCisJCX0KKworCQkvKioKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSUFjdGlvbiNzZXRUb29sVGlwVGV4dChqYXZhLmxhbmcuU3RyaW5nKQorCQkgKi8KKwkJcHVibGljIHZvaWQgc2V0VG9vbFRpcFRleHQoU3RyaW5nIHRleHQpIHsKKwkJCS8vIE5vdGhpbmcKKwkJfQorCisJfSAvLyBPcGVuSWRlbnRpZmlhYmxlQWN0aW9uCisKK30gLy8gRWRpdG9yQWN0aW9uUHJvdmlkZXIKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9oYW5kbGVycy9FeGVjdXRhYmxlUHJvcGVydHlUZXN0ZXIuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9oYW5kbGVycy9FeGVjdXRhYmxlUHJvcGVydHlUZXN0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yM2I3MDZmCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL2hhbmRsZXJzL0V4ZWN1dGFibGVQcm9wZXJ0eVRlc3Rlci5qYXZhCkBAIC0wLDAgKzEsNTYgQEAKKy8vIEV4ZWN1dGFibGVQcm9wZXJ0eVRlc3Rlci5qYXZhCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0udWkuaGFuZGxlcnM7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLmV4cHJlc3Npb25zLklQcm9wZXJ0eVRlc3RlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLmV4cHJlc3Npb25zLlByb3BlcnR5VGVzdGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uam9icy5leGVjdXRpb24uSUV4ZWN1dGFibGU7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioKKyAqIFRoaXMgY2xhc3MgaXMgYSB7QGxpbmsgUHJvcGVydHlUZXN0ZXJ9IGZvciB7QGxpbmsgSUV4ZWN1dGFibGV9cyBpbiAiY29yZQorICogZXhwcmVzc2lvbnMiLgorICovCitwdWJsaWMgY2xhc3MgRXhlY3V0YWJsZVByb3BlcnR5VGVzdGVyIGV4dGVuZHMgUHJvcGVydHlUZXN0ZXIgaW1wbGVtZW50cworCQlJUHJvcGVydHlUZXN0ZXIgeworCisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFBST1BFUlRZX0lTX1JVTk5JTkcgPSAicnVubmluZyI7CisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFBST1BFUlRZX0lTX1NUT1BQQUJMRSA9ICJzdG9wcGFibGUiOworCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5jb3JlLmV4cHJlc3Npb25zLklQcm9wZXJ0eVRlc3RlciN0ZXN0KGphdmEubGFuZy5PYmplY3QsCisJICogICAgICBqYXZhLmxhbmcuU3RyaW5nLCBqYXZhLmxhbmcuT2JqZWN0W10sIGphdmEubGFuZy5PYmplY3QpCisJICovCisJcHVibGljIGJvb2xlYW4gdGVzdChmaW5hbCBPYmplY3QgcmVjZWl2ZXIsIGZpbmFsIFN0cmluZyBwcm9wZXJ0eSwKKwkJCUBTdXBwcmVzc1dhcm5pbmdzKCJ1bnVzZWQiKQorCQkJZmluYWwgT2JqZWN0W10gYXJncywgQFN1cHByZXNzV2FybmluZ3MoInVudXNlZCIpCisJCQlmaW5hbCBPYmplY3QgZXhwZWN0ZWRWYWx1ZSkgeworCQkKKwkJYm9vbGVhbiByZXRWYWx1ZSA9IGZhbHNlOworCQlpZiAocmVjZWl2ZXIgaW5zdGFuY2VvZiBJRXhlY3V0YWJsZSkgeworCQkJLy8gWWVzCisJCQkvLyBSdW5uYWJsZT8KKwkJCWlmIChQUk9QRVJUWV9JU19SVU5OSU5HLmVxdWFscyhwcm9wZXJ0eSkpIHsKKwkJCQkvLyBZZXMKKwkJCQlyZXRWYWx1ZSA9ICgoSUV4ZWN1dGFibGUpIHJlY2VpdmVyKS5pc1J1bm5pbmcoKTsKKwkJCX0gLy8gaWYgcnVubmFibGUKKwkJCS8vIFN0b3BwYWJsZT8KKwkJCWVsc2UgaWYgKFBST1BFUlRZX0lTX1NUT1BQQUJMRS5lcXVhbHMocHJvcGVydHkpKSB7CisJCQkJLy8gWWVzCisJCQkJcmV0VmFsdWUgPSAoKElFeGVjdXRhYmxlKSByZWNlaXZlcikuaXNTdG9wcGFibGUoKTsKKwkJCX0gLy8gaWYgCisJCX0gLy8gaWYKKworCQlyZXR1cm4gcmV0VmFsdWU7CisJfSAvLyB0ZXN0CisKK30gLy8gRXhlY3V0YWJsZVByb3BlcnR5VGVzdGVyClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL2hhbmRsZXJzL0lkZW50aWZpYWJsZURlbGVnYXRlUHJvcGVydHlUZXN0ZXIuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9oYW5kbGVycy9JZGVudGlmaWFibGVEZWxlZ2F0ZVByb3BlcnR5VGVzdGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTQ4MDZmYwotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9oYW5kbGVycy9JZGVudGlmaWFibGVEZWxlZ2F0ZVByb3BlcnR5VGVzdGVyLmphdmEKQEAgLTAsMCArMSw3MyBAQAorLy8gUnVubmFibGVJZGVudGlmaWFibGVQcm9wZXJ0eVRlc3Rlci5qYXZhCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0udWkuaGFuZGxlcnM7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5leHByZXNzaW9ucy5Qcm9wZXJ0eVRlc3RlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZXhwZXJpbWVudC5FeHBlcmltZW50UGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2NlbmFyaW8uU2NlbmFyaW9QYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udWkudmlld3MuSWRlbnRpZmlhYmxlRGVsZWdhdGU7CisKKy8qKgorICogVGhpcyBjbGFzcyBpcyBhIHtAbGluayBQcm9wZXJ0eVRlc3Rlcn0gZm9yIHtAbGluayBJZGVudGlmaWFibGVEZWxlZ2F0ZX1zIGluCisgKiAiY29yZSBleHByZXNzaW9ucyIuCisgKi8KK3B1YmxpYyBjbGFzcyBJZGVudGlmaWFibGVEZWxlZ2F0ZVByb3BlcnR5VGVzdGVyIGV4dGVuZHMgUHJvcGVydHlUZXN0ZXIgeworCisJLy8gVGhpcyBjb2RlIGlzbid0IGJlaW5nIHVzZWQgcmlnaHQgbm93LCBidXQgaXQgaXMgYmVpbmcgcmV0YWluZWQgYmVjYXVzZSB3ZQorCS8vIG1hbnkgd2FudCB0byB0ZXN0IHByb3BlcnRpZXMgb2YgSWRlbnRpZmlhYmxlRGVsZWdhdGVzIGluIHRoZSBmdXR1cmUuCisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFBST1BFUlRZX0lTX1JVTk5BQkxFID0gInJ1bm5hYmxlIjsKKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2UuY29yZS5leHByZXNzaW9ucy5JUHJvcGVydHlUZXN0ZXIjdGVzdChqYXZhLmxhbmcuT2JqZWN0LAorCSAqIAlqYXZhLmxhbmcuU3RyaW5nLCBqYXZhLmxhbmcuT2JqZWN0W10sIGphdmEubGFuZy5PYmplY3QpCisJICovCisJcHVibGljIGJvb2xlYW4gdGVzdChmaW5hbCBPYmplY3QgcmVjZWl2ZXIsIGZpbmFsIFN0cmluZyBwcm9wZXJ0eSwKKwkJCUBTdXBwcmVzc1dhcm5pbmdzKCJ1bnVzZWQiKSBmaW5hbCBPYmplY3RbXSBhcmdzLAorCQkJQFN1cHByZXNzV2FybmluZ3MoInVudXNlZCIpIGZpbmFsIE9iamVjdCBleHBlY3RlZFZhbHVlKSB7CisJCWJvb2xlYW4gcmV0VmFsdWUgPSBmYWxzZTsKKwkJaWYgKElkZW50aWZpYWJsZURlbGVnYXRlLmNsYXNzLmVxdWFscyhyZWNlaXZlcikpIHsKKwkJCS8vIFllcworCQkJZmluYWwgSWRlbnRpZmlhYmxlRGVsZWdhdGUgaWQgPSAoSWRlbnRpZmlhYmxlRGVsZWdhdGUpIHJlY2VpdmVyOworCisJCQkvLyBSdW5uYWJsZT8KKwkJCWlmIChQUk9QRVJUWV9JU19SVU5OQUJMRS5lcXVhbHMocHJvcGVydHkpKSB7CisJCQkJLy8gWWVzCisJCQkJLy8gSXMgdGhlIGNvbmZpZ3VyYXRpb24gZWxlbWVudCBmb3IgYSBTY2VuYXJpbz8KKwkJCQlyZXRWYWx1ZSA9IGlzU2NlbmFyaW9Db25maWd1cmF0aW9uRWxlbWVudChpZC5nZXRGb3JtYXQoKSkKKwkJCQkJCXx8IGlzRXhwZXJpbWVudENvbmZpZ3VyYXRpb25FbGVtZW50KGlkLmdldEZvcm1hdCgpKTsKKwkJCX0gLy8gaWYgcnVubmFibGUKKwkJfSAvLyBpZgorCisJCXJldHVybiByZXRWYWx1ZTsKKwl9IC8vIHRlc3QKKworCS8qKgorCSAqIEBwYXJhbSBjb25maWdFbGVtZW50CisJICogCQlhIGNvbmZpZ3VyYXRpb24gZWxlbWVudCBmb3IgYSBwbHVnLWluCisJICogQHJldHVybiA8Y29kZT50cnVlPC9jb2RlPiBpZiB0aGUgY29uZmlndXJhdGlvbiBlbGVtZW50IGlzIGZvciBhIHtAbGluaworCSAqIAlvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZXhwZXJpbWVudC5FeHBlcmltZW50fS4KKwkgKi8KKwlwcml2YXRlIGJvb2xlYW4gaXNFeHBlcmltZW50Q29uZmlndXJhdGlvbkVsZW1lbnQoZmluYWwgU3RyaW5nIGZvcm1hdCkgeworCQlyZXR1cm4gZm9ybWF0ICE9IG51bGwgJiYgZm9ybWF0LmVxdWFscyhFeHBlcmltZW50UGFja2FnZS5lTlNfVVJJKTsKKwl9IC8vIGlzRXhwZXJpbWVudENvbmZpZ3VyYXRpb25FbGVtZW50CisKKwkvKioKKwkgKiBAcGFyYW0gY29uZmlnRWxlbWVudAorCSAqIAkJYSBjb25maWd1cmF0aW9uIGVsZW1lbnQgZm9yIGEgcGx1Zy1pbgorCSAqIEByZXR1cm4gPGNvZGU+dHJ1ZTwvY29kZT4gaWYgdGhlIGNvbmZpZ3VyYXRpb24gZWxlbWVudCBpcyBmb3IgYSB7QGxpbmsKKwkgKiAJb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNjZW5hcmlvLlNjZW5hcmlvfS4KKwkgKi8KKwlwcml2YXRlIGJvb2xlYW4gaXNTY2VuYXJpb0NvbmZpZ3VyYXRpb25FbGVtZW50KGZpbmFsIFN0cmluZyBmb3JtYXQpIHsKKwkJcmV0dXJuIGZvcm1hdCAhPSBudWxsICYmIGZvcm1hdC5lcXVhbHMoU2NlbmFyaW9QYWNrYWdlLmVOU19VUkkpOworCX0gLy8gaXNTY2VuYXJpb0NvbmZpZ3VyYXRpb25FbGVtZW50Cit9IC8vIElkZW50aWZpYWJsZVByb3BlcnR5VGVzdGVyCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvaGFuZGxlcnMvTWVzc2FnZXMuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9oYW5kbGVycy9NZXNzYWdlcy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMzMzFmMzMKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvaGFuZGxlcnMvTWVzc2FnZXMuamF2YQpAQCAtMCwwICsxLDMxIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDExIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS51aS5oYW5kbGVyczsKKworaW1wb3J0IG9yZy5lY2xpcHNlLm9zZ2kudXRpbC5OTFM7CisKK3B1YmxpYyBjbGFzcyBNZXNzYWdlcyBleHRlbmRzIE5MUyB7CisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEJVTkRMRV9OQU1FID0gIm9yZy5lY2xpcHNlLnN0ZW0udWkuaGFuZGxlcnMubWVzc2FnZXMiOyAvLyROT04tTkxTLTEkCisJcHVibGljIHN0YXRpYyBTdHJpbmcgU3dpdGNoTG9jYWxlQWN0aW9uX0NvbW1hbmRMaW5lRXJyb3I7CisJcHVibGljIHN0YXRpYyBTdHJpbmcgU3dpdGNoTG9jYWxlQWN0aW9uX0NvbW1hbmRMaW5lRXJyb3JNZXNzYWdlOworCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFN3aXRjaExvY2FsZUFjdGlvbl9Db25maXJtUmVzdGFydDsKKwlwdWJsaWMgc3RhdGljIFN0cmluZyBTd2l0Y2hMb2NhbGVBY3Rpb25fQ29uZmlybVJlc3RhcnRNZXNzYWdlOworCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFN3aXRjaExvY2FsZUFjdGlvbl9EZWZhdWx0U2V0dGluZzsKKwlwdWJsaWMgc3RhdGljIFN0cmluZyBTd2l0Y2hMb2NhbGVBY3Rpb25fU3dpdGNoTGFuZ2F1Z2VNZW51OworCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFN3aXRjaExvY2FsZUFjdGlvbl9Td2l0Y2hMYW5nYXVnZU1lbnVUVDsKKwlzdGF0aWMgeworCQkvLyBpbml0aWFsaXplIHJlc291cmNlIGJ1bmRsZQorCQlOTFMuaW5pdGlhbGl6ZU1lc3NhZ2VzKEJVTkRMRV9OQU1FLCBNZXNzYWdlcy5jbGFzcyk7CisJfQorCisJcHJpdmF0ZSBNZXNzYWdlcygpIHsKKwl9Cit9CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvaGFuZGxlcnMvUmVmYWN0b3JIYW5kbGVyLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvaGFuZGxlcnMvUmVmYWN0b3JIYW5kbGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjI2YzhlOAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9oYW5kbGVycy9SZWZhY3RvckhhbmRsZXIuamF2YQpAQCAtMCwwICsxLDE3NSBAQAorLy8gU1RFTUV4ZWN1dGlvbkNvbW1hbmRIYW5kbGVyLmphdmEKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS51aS5oYW5kbGVyczsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAxMCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OworCitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5jb21tYW5kcy5BYnN0cmFjdEhhbmRsZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5jb21tYW5kcy5FeGVjdXRpb25FdmVudDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLmNvbW1hbmRzLkV4ZWN1dGlvbkV4Y2VwdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLmNvbW1hbmRzLklIYW5kbGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0OworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklSZXNvdXJjZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGxhdGZvcm07CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlVSSTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUudXRpbC5FY29yZVV0aWw7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnhtaS5YTUlSZXNvdXJjZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5TdHJ1Y3R1cmVkU2VsZWN0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuVHJlZVBhdGg7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5UcmVlU2VsZWN0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uYWRhcHRlcnMuZmlsZS5GaWxlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5VdGlsaXR5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uSWRlbnRpZmlhYmxlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udWkuQWN0aXZhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udWkudmlld3MuZXhwbG9yZXIuSWRlbnRpZmlhYmxlVHJlZU5vZGU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS51aS53aWRnZXRzLlJlbmFtZURpYWxvZzsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnVpLndpemFyZHMuTWVzc2FnZXM7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LlNXVDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5EaXNwbGF5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlNoZWxsOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLmhhbmRsZXJzLkhhbmRsZXJVdGlsOworCisvKioKKyAqIFRoaXMgY2xhc3MgaXMgdGhlIHRvcC1sZXZlbCB7QGxpbmsgSUhhbmRsZXJ9IGZvciB0aGUgU1RFTSBSZW5hbWUgY29tbWFuZAorICogaGFuZGxlcnMgCisgKi8KK3B1YmxpYyBhYnN0cmFjdCBjbGFzcyBSZWZhY3RvckhhbmRsZXIgZXh0ZW5kcyBBYnN0cmFjdEhhbmRsZXIKKwkJaW1wbGVtZW50cyBJSGFuZGxlciB7CisJCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5jb3JlLmNvbW1hbmRzLkFic3RyYWN0SGFuZGxlciNleGVjdXRlKG9yZy5lY2xpcHNlLmNvcmUuY29tbWFuZHMuRXhlY3V0aW9uRXZlbnQpCisJICovCisJcHVibGljIE9iamVjdCBleGVjdXRlKGZpbmFsIEV4ZWN1dGlvbkV2ZW50IGV4ZWN1dGlvbkV2ZW50KQorCQkJdGhyb3dzIEV4ZWN1dGlvbkV4Y2VwdGlvbiB7CisKKwkJCisJCWZpbmFsIElTZWxlY3Rpb24gc2VsZWN0aW9uID0gSGFuZGxlclV0aWwKKwkJCQkuZ2V0Q3VycmVudFNlbGVjdGlvbkNoZWNrZWQoZXhlY3V0aW9uRXZlbnQpOworCQkKKwkJLy8gU3RydWN0dXJlZCBTZWxlY3Rpb24/CisJCWlmIChzZWxlY3Rpb24gaW5zdGFuY2VvZiBTdHJ1Y3R1cmVkU2VsZWN0aW9uKSB7CisJCQkvLyBZZXMKKwkJCS8vIEl0ZXJhdGUgdGhyb3VnaCBldmVyeXRoaW5nIHRoYXQncyBpbiB0aGUgc2VsZWN0aW9uIGFuZCBwdXQgZWFjaAorCQkJLy8gb2JqZWN0IGludG8gdGhlIGFwcHJvcHJpYXRlIGNvbGxlY3Rpb24uCisJCQlmb3IgKGZpbmFsIE9iamVjdCBvYmogOiAoKFN0cnVjdHVyZWRTZWxlY3Rpb24pIHNlbGVjdGlvbikudG9MaXN0KCkpIHsKKwkJCQkvLyBJRXhlY3V0YWJsZSBleGVjdXRhYmxlID0gKElFeGVjdXRhYmxlKSBFeGVjdXRhYmxlQWRhcHRlckZhY3RvcnkuSU5TVEFOQ0UKKwkJCQkvLyAuYWRhcHQob2JqLCBJRXhlY3V0YWJsZS5jbGFzcyk7CisJCQkJCisJCQkJRmlsZSBmaWxlID0gKEZpbGUpIFBsYXRmb3JtCisJCQkJLmdldEFkYXB0ZXJNYW5hZ2VyKCkuZ2V0QWRhcHRlcihvYmosIEZpbGUuY2xhc3MpOyAKKwkJCisJCQkJCisJCQkJLy8gV2VyZSB3ZSBzdWNjZXNzZnVsIGluIGFkYXB0aW5nPworCQkJCWlmIChmaWxlICE9IG51bGwpIHsKKwkJCQkJLy8gWWVzCisJCQkJCWRvaXQoZmlsZSk7CisJCQkJfSAvLyBpZgorCQkJCWVsc2UgeworCQkJCQkvLyBJbnRlcm5hbCBlcnJvcgorCQkJCQlBY3RpdmF0b3IubG9nRXJyb3IoCisJCQkJCQkJIlNURU0gSW50ZXJuYWwgZXJyb3IgcmVuYW1lIGNvbW1hbmQgYXBwbGllZCB0byBcIiIKKwkJCQkJCQkJCSsgb2JqLmdldENsYXNzKCkuZ2V0TmFtZSgpICsgIlwiIiwgbnVsbCk7CisJCQkJfQorCQkJfSAvLyBmb3IgZWFjaCBzZWxlY3Rpb24KKwkJfSAvLyBpZiBTdHJ1Y3R1cmVkU2VsZWN0aW9uCisKKwkJaWYoc2VsZWN0aW9uIGluc3RhbmNlb2YgVHJlZVNlbGVjdGlvbikgeworCQkJVHJlZVNlbGVjdGlvbiB0cyA9IChUcmVlU2VsZWN0aW9uKXNlbGVjdGlvbjsKKwkJCVRyZWVQYXRoW10gcGF0aHMgPSAgdHMuZ2V0UGF0aHMoKTsKKwkJCWlmKHBhdGhzLmxlbmd0aCA+IDApIHsKKwkJCQlUcmVlUGF0aCBwYXJlbnQgPSBwYXRoc1swXS5nZXRQYXJlbnRQYXRoKCk7CisJCQkJT2JqZWN0IHBhcmVudFNlZyA9IHBhcmVudC5nZXRMYXN0U2VnbWVudCgpOworCQkJCWlmKHBhcmVudFNlZyAhPSBudWxsKSB7CisJCQkJCUlQcm9qZWN0IHByb2plY3QgPSBudWxsOworCQkJCQlpZihwYXJlbnRTZWcgaW5zdGFuY2VvZiBJZGVudGlmaWFibGVUcmVlTm9kZSkgeyAKKwkJCQkJCXByb2plY3QgPSgoSWRlbnRpZmlhYmxlVHJlZU5vZGUpcGFyZW50U2VnKS5nZXRQcm9qZWN0KCk7CisJCQkJCX0gaWYocGFyZW50U2VnIGluc3RhbmNlb2YgSVByb2plY3QpIHByb2plY3QgPSAoSVByb2plY3QpcGFyZW50U2VnOworCQkJCQkKKwkJCQkJdHJ5IHsKKwkJCQkJCXByb2plY3QucmVmcmVzaExvY2FsKElSZXNvdXJjZS5ERVBUSF9JTkZJTklURSwgbnVsbCk7CisJCQkJCX0gY2F0Y2goRXhjZXB0aW9uIGUpIHsKKwkJCQkJCUFjdGl2YXRvci5sb2dFcnJvcihlLmdldE1lc3NhZ2UoKSwgZSk7CisJCQkJCX0KKwkJCQl9CisJCQl9CisJCQkKKwkJfQorCQkKKwkJcmV0dXJuIG51bGw7CisJfSAvLyBleGVjdXRlCisKKwkKKwlhYnN0cmFjdCB2b2lkIGRvaXQoRmlsZSBmaWxlKTsKKwkKKwlwdWJsaWMgc3RhdGljIGNsYXNzIFJlbmFtZUhhbmRsZXIgIGV4dGVuZHMgUmVmYWN0b3JIYW5kbGVyIHsKKwkJcHJvdGVjdGVkIHZvaWQgZG9pdChGaWxlIGZpbGUpIHsKKwkJCURpc3BsYXkgZGlzcGxheSA9IEFjdGl2YXRvci5nZXREZWZhdWx0KCkuZ2V0V29ya2JlbmNoKCkuZ2V0RGlzcGxheSgpOworCQkJU2hlbGwgc2hlbGwgPSBuZXcgU2hlbGwoZGlzcGxheSk7CisJCQlSZW5hbWVEaWFsb2cgcmQgPSBuZXcgUmVuYW1lRGlhbG9nKHNoZWxsLCBTV1QuUFVTSCwgZmlsZS5nZXRSZXNvdXJjZSgpLCBNZXNzYWdlcy5nZXRTdHJpbmcoInJlbmFtZSIpKTsKKwkJCVN0cmluZyBuZXduYW1lID0gcmQub3BlbigpOworCQkJaWYobmV3bmFtZSAhPSBudWxsKSB7CisJCQkJWE1JUmVzb3VyY2UgcmVzb3VyY2UgPSBmaWxlLmdldFJlc291cmNlKCk7CisJCQkJVVJJIG9sZFVSSSA9IHJlc291cmNlLmdldFVSSSgpOworCQkJCVVSSSBvbGRJZFVSSSA9IGZpbGUuZ2V0SWRlbnRpZmlhYmxlKCkuZ2V0VVJJKCk7CisJCQkJU3RyaW5nIHNfbmV3VVJJID0gb2xkVVJJLnRvU3RyaW5nKCkuc3Vic3RyaW5nKDAsIG9sZFVSSS50b1N0cmluZygpLmluZGV4T2Yob2xkVVJJLmxhc3RTZWdtZW50KCkpKTsKKwkJCQlTdHJpbmcgc19uZXdJZFVSSSA9IG9sZElkVVJJLnRvU3RyaW5nKCkuc3Vic3RyaW5nKDAsIG9sZElkVVJJLnRvU3RyaW5nKCkuaW5kZXhPZihvbGRJZFVSSS5sYXN0U2VnbWVudCgpKSk7CisJCQkJCisJCQkJCisJCQkJVVJJIG5ld1VSSSA9IFVSSS5jcmVhdGVVUkkoc19uZXdVUkkrbmV3bmFtZSk7CisJCQkJVVJJIG5ld0lEVVJJID0gVVJJLmNyZWF0ZVVSSShzX25ld0lkVVJJK25ld25hbWUpOworCQkJCQorCQkJCXRyeSB7CisJCQkJCUFycmF5TGlzdDxJZGVudGlmaWFibGU+bmV3bGlzdCA9IG5ldyBBcnJheUxpc3Q8SWRlbnRpZmlhYmxlPigpOworCQkJCQlJZGVudGlmaWFibGUgZSA9IChJZGVudGlmaWFibGUpRWNvcmVVdGlsLmNvcHkoZmlsZS5nZXRJZGVudGlmaWFibGUoKSk7CisJCQkJCWUuc2V0VVJJKG5ld0lEVVJJKTsKKwkJCQkJbmV3bGlzdC5hZGQoZSk7CisJCQkJCVV0aWxpdHkuc2VyaWFsaXplSWRlbnRpZmlhYmxlcyhuZXdsaXN0LCBuZXdVUkkpOworCQkJCQlyZXNvdXJjZS5kZWxldGUobnVsbCk7CisJCQkJfSBjYXRjaChFeGNlcHRpb24gZSkgeworCQkJCQlBY3RpdmF0b3IubG9nRXJyb3IoZS5nZXRNZXNzYWdlKCksIGUpOworCQkJCX0KKwkJCX0KKwkJfQorCX0KKwkKKwlwdWJsaWMgc3RhdGljIGNsYXNzIENvcHlIYW5kbGVyICBleHRlbmRzIFJlZmFjdG9ySGFuZGxlciB7CisJCXByb3RlY3RlZCB2b2lkIGRvaXQoRmlsZSBmaWxlKSB7CisJCQlEaXNwbGF5IGRpc3BsYXkgPSBBY3RpdmF0b3IuZ2V0RGVmYXVsdCgpLmdldFdvcmtiZW5jaCgpLmdldERpc3BsYXkoKTsKKwkJCVNoZWxsIHNoZWxsID0gbmV3IFNoZWxsKGRpc3BsYXkpOworCQkJUmVuYW1lRGlhbG9nIHJkID0gbmV3IFJlbmFtZURpYWxvZyhzaGVsbCwgU1dULlBVU0gsIGZpbGUuZ2V0UmVzb3VyY2UoKSwgTWVzc2FnZXMuZ2V0U3RyaW5nKCJjb3B5IikpOworCQkJU3RyaW5nIG5ld25hbWUgPSByZC5vcGVuKCk7CisJCQlpZihuZXduYW1lICE9IG51bGwpIHsKKwkJCQlYTUlSZXNvdXJjZSByZXNvdXJjZSA9IGZpbGUuZ2V0UmVzb3VyY2UoKTsKKwkJCQlVUkkgb2xkVVJJID0gcmVzb3VyY2UuZ2V0VVJJKCk7CisJCQkJVVJJIG9sZElkVVJJID0gZmlsZS5nZXRJZGVudGlmaWFibGUoKS5nZXRVUkkoKTsKKwkJCQlTdHJpbmcgc19uZXdVUkkgPSBvbGRVUkkudG9TdHJpbmcoKS5zdWJzdHJpbmcoMCwgb2xkVVJJLnRvU3RyaW5nKCkuaW5kZXhPZihvbGRVUkkubGFzdFNlZ21lbnQoKSkpOworCQkJCVN0cmluZyBzX25ld0lkVVJJID0gb2xkSWRVUkkudG9TdHJpbmcoKS5zdWJzdHJpbmcoMCwgb2xkSWRVUkkudG9TdHJpbmcoKS5pbmRleE9mKG9sZElkVVJJLmxhc3RTZWdtZW50KCkpKTsKKwkJCQkKKwkJCQkKKwkJCQlVUkkgbmV3VVJJID0gVVJJLmNyZWF0ZVVSSShzX25ld1VSSStuZXduYW1lKTsKKwkJCQlVUkkgbmV3SURVUkkgPSBVUkkuY3JlYXRlVVJJKHNfbmV3SWRVUkkrbmV3bmFtZSk7CisJCQkJCisJCQkJdHJ5IHsKKwkJCQkJQXJyYXlMaXN0PElkZW50aWZpYWJsZT5uZXdsaXN0ID0gbmV3IEFycmF5TGlzdDxJZGVudGlmaWFibGU+KCk7CisJCQkJCUlkZW50aWZpYWJsZSBlID0gKElkZW50aWZpYWJsZSlFY29yZVV0aWwuY29weShmaWxlLmdldElkZW50aWZpYWJsZSgpKTsKKwkJCQkJZS5zZXRVUkkobmV3SURVUkkpOworCQkJCQluZXdsaXN0LmFkZChlKTsKKwkJCQkJVXRpbGl0eS5zZXJpYWxpemVJZGVudGlmaWFibGVzKG5ld2xpc3QsIG5ld1VSSSk7CisJCQkJfSBjYXRjaChFeGNlcHRpb24gZSkgeworCQkJCQlBY3RpdmF0b3IubG9nRXJyb3IoZS5nZXRNZXNzYWdlKCksIGUpOworCQkJCX0KKwkJCX0KKwkJfQorCX0KK30gLy8gIFJlZmFjdG9ySGFuZGxlcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL2hhbmRsZXJzL1NURU1FeGVjdXRpb25Db21tYW5kSGFuZGxlci5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL2hhbmRsZXJzL1NURU1FeGVjdXRpb25Db21tYW5kSGFuZGxlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgyNTZjZGUKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvaGFuZGxlcnMvU1RFTUV4ZWN1dGlvbkNvbW1hbmRIYW5kbGVyLmphdmEKQEAgLTAsMCArMSwxOTQgQEAKKy8vIFNURU1FeGVjdXRpb25Db21tYW5kSGFuZGxlci5qYXZhCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0udWkuaGFuZGxlcnM7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5jb21tYW5kcy5BYnN0cmFjdEhhbmRsZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5jb21tYW5kcy5FeGVjdXRpb25FdmVudDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLmNvbW1hbmRzLkV4ZWN1dGlvbkV4Y2VwdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLmNvbW1hbmRzLklIYW5kbGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QbGF0Zm9ybTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5BZGFwdGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlN0cnVjdHVyZWRTZWxlY3Rpb247CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5qb2JzLmV4ZWN1dGlvbi5JRXhlY3V0YWJsZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnVpLkFjdGl2YXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnVpLnBlcnNwZWN0aXZlcy5TaW11bGF0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLmhhbmRsZXJzLkhhbmRsZXJVdGlsOworCisvKioKKyAqIFRoaXMgY2xhc3MgaXMgdGhlIHRvcC1sZXZlbCB7QGxpbmsgSUhhbmRsZXJ9IGZvciB0aGUgU1RFTSAiZXhlY3V0aW9uIiBjb21tYW5kCisgKiBoYW5kbGVycyB0aGF0IGJlZ2luIGFuZCBjb250cm9sIHRoZSBleGVjdXRpb24gb2YKKyAqIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZXhwZXJpbWVudC5FeHBlcmltZW50fXMgYW5kCisgKiB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNjZW5hcmlvLlNjZW5hcmlvfXMuCisgKiAKKyAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5qb2JzLmJhdGNoLkJhdGNoTWFuYWdlcgorICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmpvYnMuc2ltdWxhdGlvbi5TaW11bGF0aW9uTWFuYWdlcgorICovCithYnN0cmFjdCBwdWJsaWMgY2xhc3MgU1RFTUV4ZWN1dGlvbkNvbW1hbmRIYW5kbGVyIGV4dGVuZHMgQWJzdHJhY3RIYW5kbGVyCisJCWltcGxlbWVudHMgSUhhbmRsZXIgeworCQorCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2UuY29yZS5jb21tYW5kcy5BYnN0cmFjdEhhbmRsZXIjZXhlY3V0ZShvcmcuZWNsaXBzZS5jb3JlLmNvbW1hbmRzLkV4ZWN1dGlvbkV2ZW50KQorCSAqLworCXB1YmxpYyBPYmplY3QgZXhlY3V0ZShmaW5hbCBFeGVjdXRpb25FdmVudCBleGVjdXRpb25FdmVudCkKKwkJCXRocm93cyBFeGVjdXRpb25FeGNlcHRpb24geworCisJCWJvb2xlYW4gc3dpdGNoUGVyc3BlY3RpdmUgPSBmYWxzZTsKKwkJCisJCS8vU3RyaW5nIG5hbWUgPSBleGVjdXRpb25FdmVudC5nZXRBcHBsaWNhdGlvbkNvbnRleHQoKS5nZXRDbGFzcygpLmdldFNpbXBsZU5hbWUoKTsKKwkJCisJCWZpbmFsIElTZWxlY3Rpb24gc2VsZWN0aW9uID0gSGFuZGxlclV0aWwKKwkJCQkuZ2V0Q3VycmVudFNlbGVjdGlvbkNoZWNrZWQoZXhlY3V0aW9uRXZlbnQpOworCQkKKwkJYm9vbGVhbiB1c2VTaW11bGF0aW9uUGVyc3BlY3RpdmUgPSB0cnVlOworCisJCS8vIFN0cnVjdHVyZWQgU2VsZWN0aW9uPworCQlpZiAoc2VsZWN0aW9uIGluc3RhbmNlb2YgU3RydWN0dXJlZFNlbGVjdGlvbikgeworCQkJLy8gWWVzCisJCQkvLyBJdGVyYXRlIHRocm91Z2ggZXZlcnl0aGluZyB0aGF0J3MgaW4gdGhlIHNlbGVjdGlvbiBhbmQgcHV0IGVhY2gKKwkJCS8vIG9iamVjdCBpbnRvIHRoZSBhcHByb3ByaWF0ZSBjb2xsZWN0aW9uLgorCQkJZm9yIChmaW5hbCBPYmplY3Qgb2JqIDogKChTdHJ1Y3R1cmVkU2VsZWN0aW9uKSBzZWxlY3Rpb24pLnRvTGlzdCgpKSB7CisJCQkJLy8gSUV4ZWN1dGFibGUgZXhlY3V0YWJsZSA9IChJRXhlY3V0YWJsZSkgRXhlY3V0YWJsZUFkYXB0ZXJGYWN0b3J5LklOU1RBTkNFCisJCQkJLy8gLmFkYXB0KG9iaiwgSUV4ZWN1dGFibGUuY2xhc3MpOworCQkJCUlFeGVjdXRhYmxlIGV4ZWN1dGFibGUgPSAoSUV4ZWN1dGFibGUpIFBsYXRmb3JtCisJCQkJCQkuZ2V0QWRhcHRlck1hbmFnZXIoKS5nZXRBZGFwdGVyKG9iaiwgSUV4ZWN1dGFibGUuY2xhc3MpOyAKKwkJCQkKKwkJCQkvLyBPbmx5IHN3aXRjaCB0byB0aGUgU2ltdWxhdGlvbiBQZXJzZXBjdGl2ZSB3aGVuIHRoZSBleGVjdXRhYmxlIGlzIGEgc3RhbmRhcmQKKwkJCQkvLyBydW4gKHNjZW5hcmlvKS4gRm9yIG90aGVyIGV4ZWN1dGFibGVzIHdlIG1heSB3YW50IHRvIHN0YXkgaW4gb3RoZXIgc3BlY2lhbAorCQkJCS8vIHBlcnNwZWN0aXZlcworCQkJCWlmKGV4ZWN1dGFibGUgaW5zdGFuY2VvZiBBZGFwdGVyKSB7CisJCQkJCUFkYXB0ZXIgYSA9IChBZGFwdGVyKSBleGVjdXRhYmxlOworCQkJCQlPYmplY3QgYU9iaiA9IGEuZ2V0VGFyZ2V0KCk7CisJCQkJCWlmKCBhT2JqIGluc3RhbmNlb2Ygb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNjZW5hcmlvLmltcGwuU2NlbmFyaW9JbXBsICkgeworCQkJCQkJc3dpdGNoUGVyc3BlY3RpdmUgPSB0cnVlOworCQkJCQl9IGVsc2UgeworCQkJCQkJc3dpdGNoUGVyc3BlY3RpdmUgPSBmYWxzZTsKKwkJCQkJfQorCQkJCX0gLy8gaWYgYWRhcHRlciAodXN1YWxseSB0cnVlKQorCQkJCQorCQkJCS8vIFdlcmUgd2Ugc3VjY2Vzc2Z1bCBpbiBhZGFwdGluZz8KKwkJCQlpZiAoZXhlY3V0YWJsZSAhPSBudWxsKSB7CisJCQkJCS8vIFllcworCQkJCQlkb2l0KGV4ZWN1dGFibGUpOworCQkJCX0gLy8gaWYKKwkJCQllbHNlIHsKKwkJCQkJLy8gSW50ZXJuYWwgZXJyb3IKKwkJCQkJQWN0aXZhdG9yLmxvZ0Vycm9yKAorCQkJCQkJCSJTVEVNIEludGVybmFsIGVycm9yIGV4ZWN1dGlvbiBjb21tYW5kIGFwcGxpZWQgdG8gXCIiCisJCQkJCQkJCQkrIG9iai5nZXRDbGFzcygpLmdldE5hbWUoKSArICJcIiIsIG51bGwpOworCQkJCX0KKwkJCX0gLy8gZm9yIGVhY2ggc2VsZWN0aW9uCisJCX0gLy8gaWYgU3RydWN0dXJlZFNlbGVjdGlvbgorCisJCS8vIEZsaXAgdG8gU2ltdWxhdGlvbiBQZXJzcGVjdGl2ZT8KKwkJaWYgKHN3aXRjaFBlcnNwZWN0aXZlKSB7CisJCQkvLyBZZXMKKwkJCWlmKHVzZVNpbXVsYXRpb25QZXJzcGVjdGl2ZSkgeworCQkJCUFjdGl2YXRvci5zd2l0Y2hUb1BlcnNwZWN0aXZlKFNpbXVsYXRpb24uSURfU1RFTV9TSU1VTEFUSU9OX1BFUlNQRUNUSVZFKTsKKwkJCX1lbHNlIHsKKwkJCQkvLyBOb3RoaW5nCisJCQkJLy8gSnVzdCBkb24ndCBzd2l0Y2ggUGVyc3BlY3RpdmVzCisJCQkJLy8gc28gaWYgcnVubmluZywgZS5nLiwgaW4gdGhlIGF1dG9tYXRlZCBleHBlcmltZW50IHBlcnNwZWN0aXZlIGp1c3Qgc3RheSB0aGVyZQorCQkJfQorCQkJCisJCX0gLy8gaWYgZmxpcAorCisJCXJldHVybiBudWxsOworCX0gLy8gZXhlY3V0ZQorCisJLyoqCisJICogVGhpcyBtZXRob2QgaXMgaW1wbGVtZW50ZWQgYnkgc3ViY2xhc3NlcyB0byBpbnZva2UgdGhlIHNwZWNpZmljIG1ldGhvZCBvZgorCSAqIHRoZSB7QGxpbmsgSUV4ZWN1dGFibGV9IHRoYXQgaW1wbGVtZW50cyB0aGVpciBjb21tYW5kIGZvciB0aGUKKwkgKiB7QGxpbmsgSUV4ZWN1dGFibGV9LgorCSAqIAorCSAqIEBwYXJhbSBleGVjdXRhYmxlCisJICogICAgICAgICAgICB0aGUge0BsaW5rIElFeGVjdXRhYmxlfQorCSAqLworCWFic3RyYWN0IHByb3RlY3RlZCB2b2lkIGRvaXQoSUV4ZWN1dGFibGUgZXhlY3V0YWJsZSk7CisKKwkvKioKKwkgKiBUaGlzIGNsYXNzIGlzIGEge0BsaW5rIFNURU1FeGVjdXRpb25Db21tYW5kSGFuZGxlcn0gdGhhdCBpbnZva2VzCisJICoge0BsaW5rIElFeGVjdXRhYmxlI3J1bigpfS4KKwkgKi8KKwlwdWJsaWMgc3RhdGljIGNsYXNzIFJ1bkNvbW1hbmRIYW5kbGVyIGV4dGVuZHMgU1RFTUV4ZWN1dGlvbkNvbW1hbmRIYW5kbGVyIHsKKworCQkvKioKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnVpLmhhbmRsZXJzLlNURU1FeGVjdXRpb25Db21tYW5kSGFuZGxlciNkb2l0KG9yZy5lY2xpcHNlLnN0ZW0uam9icy5leGVjdXRpb24uSUV4ZWN1dGFibGUpCisJCSAqLworCQlAT3ZlcnJpZGUKKwkJcHJvdGVjdGVkIHZvaWQgZG9pdChJRXhlY3V0YWJsZSBleGVjdXRhYmxlKSB7CisJCQlleGVjdXRhYmxlLnJ1bigpOworCQl9CisJfSAvLyBSdW5Db21tYW5kSGFuZGxlcgorCisJLyoqCisJICogVGhpcyBjbGFzcyBpcyBhIHtAbGluayBTVEVNRXhlY3V0aW9uQ29tbWFuZEhhbmRsZXJ9IHRoYXQgaW52b2tlcworCSAqIHtAbGluayBJRXhlY3V0YWJsZSNwYXVzZSgpfS4KKwkgKi8KKwlwdWJsaWMgc3RhdGljIGNsYXNzIFBhdXNlQ29tbWFuZEhhbmRsZXIgZXh0ZW5kcyBTVEVNRXhlY3V0aW9uQ29tbWFuZEhhbmRsZXIgeworCisJCS8qKgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0udWkuaGFuZGxlcnMuU1RFTUV4ZWN1dGlvbkNvbW1hbmRIYW5kbGVyI2RvaXQob3JnLmVjbGlwc2Uuc3RlbS5qb2JzLmV4ZWN1dGlvbi5JRXhlY3V0YWJsZSkKKwkJICovCisJCUBPdmVycmlkZQorCQlwcm90ZWN0ZWQgdm9pZCBkb2l0KElFeGVjdXRhYmxlIGV4ZWN1dGFibGUpIHsKKwkJCWV4ZWN1dGFibGUucGF1c2UoKTsKKwkJfQorCX0gLy8gUGF1c2VDb21tYW5kSGFuZGxlcgorCisJLyoqCisJICogVGhpcyBjbGFzcyBpcyBhIHtAbGluayBTVEVNRXhlY3V0aW9uQ29tbWFuZEhhbmRsZXJ9IHRoYXQgaW52b2tlcworCSAqIHtAbGluayBJRXhlY3V0YWJsZSNzdGVwKCl9LgorCSAqLworCXB1YmxpYyBzdGF0aWMgY2xhc3MgU3RlcENvbW1hbmRIYW5kbGVyIGV4dGVuZHMgU1RFTUV4ZWN1dGlvbkNvbW1hbmRIYW5kbGVyIHsKKworCQkvKioKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnVpLmhhbmRsZXJzLlNURU1FeGVjdXRpb25Db21tYW5kSGFuZGxlciNkb2l0KG9yZy5lY2xpcHNlLnN0ZW0uam9icy5leGVjdXRpb24uSUV4ZWN1dGFibGUpCisJCSAqLworCQlAT3ZlcnJpZGUKKwkJcHJvdGVjdGVkIHZvaWQgZG9pdChJRXhlY3V0YWJsZSBleGVjdXRhYmxlKSB7CisJCQlleGVjdXRhYmxlLnN0ZXAoKTsKKwkJfQorCX0gLy8gU3RlcENvbW1hbmRIYW5kbGVyCisKKwkvKioKKwkgKiBUaGlzIGNsYXNzIGlzIGEge0BsaW5rIFNURU1FeGVjdXRpb25Db21tYW5kSGFuZGxlcn0gdGhhdCBpbnZva2VzCisJICoge0BsaW5rIElFeGVjdXRhYmxlI3Jlc2V0KCl9LgorCSAqLworCXB1YmxpYyBzdGF0aWMgY2xhc3MgUmVzZXRDb21tYW5kSGFuZGxlciBleHRlbmRzIFNURU1FeGVjdXRpb25Db21tYW5kSGFuZGxlciB7CisKKwkJLyoqCisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS51aS5oYW5kbGVycy5TVEVNRXhlY3V0aW9uQ29tbWFuZEhhbmRsZXIjZG9pdChvcmcuZWNsaXBzZS5zdGVtLmpvYnMuZXhlY3V0aW9uLklFeGVjdXRhYmxlKQorCQkgKi8KKwkJQE92ZXJyaWRlCisJCXByb3RlY3RlZCB2b2lkIGRvaXQoSUV4ZWN1dGFibGUgZXhlY3V0YWJsZSkgeworCQkJZXhlY3V0YWJsZS5yZXNldCgpOworCQl9CisJfSAvLyBSZXNldENvbW1hbmRIYW5kbGVyCisKKwkvKioKKwkgKiBUaGlzIGNsYXNzIGlzIGEge0BsaW5rIFNURU1FeGVjdXRpb25Db21tYW5kSGFuZGxlcn0gdGhhdCBpbnZva2VzCisJICoge0BsaW5rIElFeGVjdXRhYmxlI3N0b3AoKX0uCisJICovCisJcHVibGljIHN0YXRpYyBjbGFzcyBTdG9wQ29tbWFuZEhhbmRsZXIgZXh0ZW5kcyBTVEVNRXhlY3V0aW9uQ29tbWFuZEhhbmRsZXIgeworCisJCS8qKgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0udWkuaGFuZGxlcnMuU1RFTUV4ZWN1dGlvbkNvbW1hbmRIYW5kbGVyI2RvaXQob3JnLmVjbGlwc2Uuc3RlbS5qb2JzLmV4ZWN1dGlvbi5JRXhlY3V0YWJsZSkKKwkJICovCisJCUBPdmVycmlkZQorCQlwcm90ZWN0ZWQgdm9pZCBkb2l0KElFeGVjdXRhYmxlIGV4ZWN1dGFibGUpIHsKKwkJCWV4ZWN1dGFibGUuc3RvcCgpOworCQl9CisJfSAvLyBTdG9wQ29tbWFuZEhhbmRsZXIKKworfSAvLyBTVEVNRXhlY3V0aW9uQ29tbWFuZEhhbmRsZXIKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9oYW5kbGVycy9Td2l0Y2hMb2NhbGVBY3Rpb24uamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9oYW5kbGVycy9Td2l0Y2hMb2NhbGVBY3Rpb24uamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYTQ4ZDlmCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL2hhbmRsZXJzL1N3aXRjaExvY2FsZUFjdGlvbi5qYXZhCkBAIC0wLDAgKzEsMzY1IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA4LCAyMDExIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS51aS5oYW5kbGVyczsKKworaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uQWN0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5BY3Rpb25Db250cmlidXRpb25JdGVtOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JQWN0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JQ29udHJpYnV0aW9uSXRlbTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSU1lbnVDcmVhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JTWVudUxpc3RlbmVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JTWVudU1hbmFnZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLk1lbnVNYW5hZ2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmRpYWxvZ3MuTWVzc2FnZURpYWxvZzsKK2ltcG9ydCBvcmcuZWNsaXBzZS5vc2dpLnV0aWwuTkxTOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5TV1Q7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29udHJvbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5FdmVudDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5MaXN0ZW5lcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5NZW51OworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLk1lbnVJdGVtOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2hXaW5kb3c7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuYWN0aW9ucy5BY3Rpb25GYWN0b3J5OworCisKKy8qKgorICogUkNQIFdvcmtzcGFjZSBhY3Rpb24gdG8gaGFuZGxlIGludGVyYWN0aXZlIHN3aXRjaGluZyBvZiB0aGUgY3VycmVudCBsb2NhbGUuCisgKiBUaGlzIGNsYXNzIHByb3ZpZGVzIGEgbWVudSBsaXN0IG9mIGF2YWlsYWJsZSBsb2NhbGVzIChmcm9tIHRoZSBsaXN0IG9mIAorICogcGx1Z2luXyoucHJvcGVydGllcyBmaWxlcyBpbiBvcmcuZWNsaXBzZS5zdGVtLnVpKS4gIFdoZW4gc2VsZWN0ZWQsIAorICogdGhlbiB0aGUgYWN0aW9uIHJlLWJ1aWxkcyB0aGUgU1RFTSBsYXVuY2ggY29tbWFuZCBhbmQgZm9yY2VzIGEgd29ya3NwYWNlCisgKiByZXN0YXJ0IHdpdGggdGhlIHByb3BlciBleGl0ZGF0YSB0byBzd2l0Y2ggdG8gdGhlIG5ldyBsYW5ndWFnZS4KKyAqIAorICogVGhpcyBjbGFzcyBpcyBkZXJpdmVkIGZyb20gdGhlIEVjbGlwc2UgSURFIE9wZW5Xb3Jrc3BhY2VBY3Rpb24gYW5kIGZvbGxvd3MKKyAqIHRoZSB0aGUgc2FtZSBtZXRob2RvbG9neS4gIFRoYW5rcyB0byB0aGUgZGV2ZWxvcGVycyBvZiB0aGF0IGNsYXNzIGZvciB0aGUgCisgKiBtZXRob2RvbG9neS4KKyAqIAorICogQHNpbmNlIDEuMy4wCisgKi8KK3B1YmxpYyBjbGFzcyBTd2l0Y2hMb2NhbGVBY3Rpb24gZXh0ZW5kcyBBY3Rpb24gaW1wbGVtZW50cworCQlBY3Rpb25GYWN0b3J5LklXb3JrYmVuY2hBY3Rpb24geworCisJCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBBY3Rpb25GYWN0b3J5IFNXSVRDSF9MT0NBTEVfQUNUSU9OID0gbmV3IEFjdGlvbkZhY3RvcnkoInN3aXRjaExvY2FsZSIpIHsgLy8kTk9OLU5MUy0xJAorICAgICAgICAvKiAobm9uLWphdmFkb2MpIG1ldGhvZCBkZWNsYXJlZCBvbiBBY3Rpb25GYWN0b3J5ICovCisgICAgICAgIHB1YmxpYyBJV29ya2JlbmNoQWN0aW9uIGNyZWF0ZShJV29ya2JlbmNoV2luZG93IHdpbmRvdykgeworICAgICAgICAgICAgaWYgKHdpbmRvdyA9PSBudWxsKSB7CisgICAgICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgSVdvcmtiZW5jaEFjdGlvbiBhY3Rpb24gPSBuZXcgU3dpdGNoTG9jYWxlQWN0aW9uKHdpbmRvdyk7CisgICAgICAgICAgICBhY3Rpb24uc2V0SWQoZ2V0SWQoKSk7CisgICAgICAgICAgICByZXR1cm4gYWN0aW9uOworICAgICAgICB9CisgICAgfTsKKwkKKwljbGFzcyBDaGFuZ2VMYW5ndWFnZUFjdGlvbiBleHRlbmRzIEFjdGlvbiAKKwl7CisJCVN0cmluZyBsb2NhbGU7CisJCWJvb2xlYW4gc2VsZWN0ZWQgPSBmYWxzZTsKKworCQlDaGFuZ2VMYW5ndWFnZUFjdGlvbihTdHJpbmcgbG9jYWxlKSB7CisJCQl0aGlzLmxvY2FsZSA9IGxvY2FsZTsKKwkJCVN0cmluZyBkaXNwbGF5TmFtZSA9IG9yZy5lY2xpcHNlLnN0ZW0udWkuTkxTLmdldExvY2FsZURpc3BsYXlOYW1lKGxvY2FsZSk7CisJCQlpZiAob3JnLmVjbGlwc2Uuc3RlbS51aS5OTFMuaXNEZWZhdWx0TG9jYWxlKGxvY2FsZSkpIHsKKwkJCQlkaXNwbGF5TmFtZSA9IGRpc3BsYXlOYW1lICsgTWVzc2FnZXMuU3dpdGNoTG9jYWxlQWN0aW9uX0RlZmF1bHRTZXR0aW5nOworCQkJfQorCQkJCisJCQlzZXRUZXh0KGRpc3BsYXlOYW1lKTsKKwkJCXNldFRvb2xUaXBUZXh0KGRpc3BsYXlOYW1lKTsKKwkJCQorCQkJaWYgKG9yZy5lY2xpcHNlLnN0ZW0udWkuTkxTLmlzQ3VycmVudExvY2FsZShsb2NhbGUpKSB7CisJCQkJc2VsZWN0ZWQgPSB0cnVlOworCQkJCXNldENoZWNrZWQodHJ1ZSk7CisJCQl9CisJCX0KKworCQkvKgorCQkgKiAobm9uLUphdmFkb2MpCisJCSAqIAorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5BY3Rpb24jcnVuKCkKKwkJICovCisJCXB1YmxpYyB2b2lkIHJ1bigpIHsKKwkJCWlmIChzZWxlY3RlZCkgeworCQkJCXJldHVybjsKKwkJCX0KKwkJCQorCQkJYm9vbGVhbiBiID0gTWVzc2FnZURpYWxvZy5vcGVuQ29uZmlybSh3aW5kb3cuZ2V0U2hlbGwoKSwgTWVzc2FnZXMuU3dpdGNoTG9jYWxlQWN0aW9uX0NvbmZpcm1SZXN0YXJ0LCBNZXNzYWdlcy5Td2l0Y2hMb2NhbGVBY3Rpb25fQ29uZmlybVJlc3RhcnRNZXNzYWdlKTsKKwkJCWlmIChiKSB7CisJCQkJcmVzdGFydChsb2NhbGUpOworCQkJfQorCQl9CisJfQorCisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFBST1BfVk0gPSAiZWNsaXBzZS52bSI7IC8vJE5PTi1OTFMtMSQKKworCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBQUk9QX1ZNQVJHUyA9ICJlY2xpcHNlLnZtYXJncyI7IC8vJE5PTi1OTFMtMSQKKworCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBQUk9QX0NPTU1BTkRTID0gImVjbGlwc2UuY29tbWFuZHMiOyAvLyROT04tTkxTLTEkCisKKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgUFJPUF9FWElUX0NPREUgPSAiZWNsaXBzZS5leGl0Y29kZSI7IC8vJE5PTi1OTFMtMSQKKworCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBQUk9QX0VYSVRfREFUQSA9ICJlY2xpcHNlLmV4aXRkYXRhIjsgLy8kTk9OLU5MUy0xJAorCisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIENNRF9OTCA9ICItbmwiOyAvLyROT04tTkxTLTEkCisKKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgQ01EX1ZNQVJHUyA9ICItdm1hcmdzIjsgLy8kTk9OLU5MUy0xJAorCisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIE5FV19MSU5FID0gIlxuIjsgLy8kTk9OLU5MUy0xJAorCisJcHJpdmF0ZSBJV29ya2JlbmNoV2luZG93IHdpbmRvdzsKKwkKKwkKKwlwcml2YXRlIElDb250cmlidXRpb25JdGVtW10gZ2V0Q29udHJpYnV0aW9uSXRlbXMoKSB7CisJCQorCQlBcnJheUxpc3Q8SUNvbnRyaWJ1dGlvbkl0ZW0+IGxpc3QgPSBuZXcgQXJyYXlMaXN0PElDb250cmlidXRpb25JdGVtPigpOworCisJCWZvciAoU3RyaW5nIGxvY2FsZSA6IG9yZy5lY2xpcHNlLnN0ZW0udWkuTkxTLmdldEF2YWlsYWJsZUxvY2FsZXMoKSkgeworCQkJbGlzdC5hZGQobmV3IEFjdGlvbkNvbnRyaWJ1dGlvbkl0ZW0obmV3IENoYW5nZUxhbmd1YWdlQWN0aW9uKGxvY2FsZSkpKTsKKwkJfQorCisJCXJldHVybiAoSUNvbnRyaWJ1dGlvbkl0ZW1bXSkgbGlzdAorCQkJCS50b0FycmF5KG5ldyBJQ29udHJpYnV0aW9uSXRlbVtsaXN0LnNpemUoKV0pOworCX0KKwkKKwljbGFzcyBNZW51Q3JlYXRvciBpbXBsZW1lbnRzIElNZW51Q3JlYXRvciB7CisJCXByaXZhdGUgTWVudU1hbmFnZXIgZHJvcERvd25NZW51TWdyOworCisJCS8qKgorCQkgKiBDcmVhdGVzIHRoZSBtZW51IG1hbmFnZXIgZm9yIHRoZSBkcm9wLWRvd24uCisJCSAqLworCQlwcml2YXRlIHZvaWQgY3JlYXRlRHJvcERvd25NZW51TWdyKCkgeworCQkJaWYgKGRyb3BEb3duTWVudU1nciA9PSBudWxsKSB7CisJCQkJZHJvcERvd25NZW51TWdyID0gbmV3IE1lbnVNYW5hZ2VyKCk7CisJCQkJZHJvcERvd25NZW51TWdyLnNldFJlbW92ZUFsbFdoZW5TaG93bih0cnVlKTsKKwkJCX0KKwkJfQorCisJCS8qCisJCSAqIChub24tSmF2YWRvYykKKwkJICogCisJCSAqIEBzZWUgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklNZW51Q3JlYXRvciNnZXRNZW51KG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbnRyb2wpCisJCSAqLworCQlwdWJsaWMgTWVudSBnZXRNZW51KENvbnRyb2wgcGFyZW50KSB7CisJCQljcmVhdGVEcm9wRG93bk1lbnVNZ3IoKTsKKwkJCWRyb3BEb3duTWVudU1nci5hZGRNZW51TGlzdGVuZXIobmV3IElNZW51TGlzdGVuZXIoKSB7CisJCQkJcHVibGljIHZvaWQgbWVudUFib3V0VG9TaG93KElNZW51TWFuYWdlciBtYW5hZ2VyKSB7CisJCQkJCUlDb250cmlidXRpb25JdGVtW10gaXRlbXMgPSBnZXRDb250cmlidXRpb25JdGVtcygpOworCQkJCQlmb3IgKGludCBpID0gMDsgaSA8IGl0ZW1zLmxlbmd0aDsgaSsrKSB7CisJCQkJCQltYW5hZ2VyLmFkZChpdGVtc1tpXSk7CisJCQkJCX0KKwkJCQkJLy9tYW5hZ2VyLmFkZChuZXcgT3BlbkRpYWxvZ0FjdGlvbigpKTsKKwkJCQl9CisJCQl9KTsKKwkJCXJldHVybiBkcm9wRG93bk1lbnVNZ3IuY3JlYXRlQ29udGV4dE1lbnUocGFyZW50KTsKKwkJfQorCisJCS8qCisJCSAqIChub24tSmF2YWRvYykKKwkJICogCisJCSAqIEBzZWUgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklNZW51Q3JlYXRvciNnZXRNZW51KG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLk1lbnUpCisJCSAqLworCQlwdWJsaWMgTWVudSBnZXRNZW51KE1lbnUgcGFyZW50KSB7CisJCQljcmVhdGVEcm9wRG93bk1lbnVNZ3IoKTsKKwkJCWZpbmFsIE1lbnUgbWVudSA9IG5ldyBNZW51KHBhcmVudCk7CisKKwkJCW1lbnUuYWRkTGlzdGVuZXIoU1dULlNob3csIG5ldyBMaXN0ZW5lcigpIHsKKwkJCQlwdWJsaWMgdm9pZCBoYW5kbGVFdmVudChFdmVudCBldmVudCkgeworCQkJCQlpZiAobWVudS5pc0Rpc3Bvc2VkKCkpIHsKKwkJCQkJCXJldHVybjsKKwkJCQkJfQorCQkJCQlNZW51SXRlbVtdIGl0ZW1zID0gbWVudS5nZXRJdGVtcygpOworCQkJCQlmb3IgKGludCBpID0gMDsgaSA8IGl0ZW1zLmxlbmd0aDsgaSsrKSB7CisJCQkJCQlpdGVtc1tpXS5kaXNwb3NlKCk7CisJCQkJCX0KKwkJCQkJSUNvbnRyaWJ1dGlvbkl0ZW1bXSBjb250cmlidXRpb25zID0gZ2V0Q29udHJpYnV0aW9uSXRlbXMoKTsKKwkJCQkJZm9yIChpbnQgaSA9IDA7IGkgPCBjb250cmlidXRpb25zLmxlbmd0aDsgaSsrKSB7CisJCQkJCQljb250cmlidXRpb25zW2ldLmZpbGwobWVudSwgLTEpOworCQkJCQl9CisJCQkJfQorCQkJfSk7CisJCQlyZXR1cm4gbWVudTsKKwkJfQorCisJCS8qCisJCSAqIChub24tSmF2YWRvYykKKwkJICogCisJCSAqIEBzZWUgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklNZW51Q3JlYXRvciNkaXNwb3NlKCkKKwkJICovCisJCXB1YmxpYyB2b2lkIGRpc3Bvc2UoKSB7CisJCQlpZiAoZHJvcERvd25NZW51TWdyICE9IG51bGwpIHsKKwkJCQlkcm9wRG93bk1lbnVNZ3IuZGlzcG9zZSgpOworCQkJCWRyb3BEb3duTWVudU1nciA9IG51bGw7CisJCQl9CisJCX0KKwl9CisKKwkvKioKKwkgKiBTZXQgZGVmaW5pdGlvbiBmb3IgdGhpcyBhY3Rpb24gYW5kIHRleHQgc28gdGhhdCBpdCB3aWxsIGJlIHVzZWQgZm9yIEZpbGUKKwkgKiAtJmd0OyBPcGVuIFdvcmtzcGFjZSBpbiB0aGUgYXJndW1lbnQgd2luZG93LgorCSAqIAorCSAqIEBwYXJhbSB3aW5kb3cKKwkgKiAgICAgICAgICAgIHRoZSB3aW5kb3cgaW4gd2hpY2ggdGhpcyBhY3Rpb24gc2hvdWxkIGFwcGVhcgorCSAqLworCXB1YmxpYyBTd2l0Y2hMb2NhbGVBY3Rpb24oSVdvcmtiZW5jaFdpbmRvdyB3aW5kb3cpIHsKKwkJc3VwZXIoTWVzc2FnZXMuU3dpdGNoTG9jYWxlQWN0aW9uX1N3aXRjaExhbmdhdWdlTWVudSwKKwkJCQlJQWN0aW9uLkFTX0RST1BfRE9XTl9NRU5VKTsKKworCQlpZiAod2luZG93ID09IG51bGwpIHsKKwkJCXRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oKTsKKwkJfQorCisJCXRoaXMud2luZG93ID0gd2luZG93OworCQlzZXRUb29sVGlwVGV4dChNZXNzYWdlcy5Td2l0Y2hMb2NhbGVBY3Rpb25fU3dpdGNoTGFuZ2F1Z2VNZW51VFQpOworCQlzZXRBY3Rpb25EZWZpbml0aW9uSWQoIm9yZy5lY2xpcHNlLnN0ZW0udWkuc3dpdGNoTGFuZ3VhZ2UiKTsgLy8kTk9OLU5MUy0xJAorCQlzZXRNZW51Q3JlYXRvcihuZXcgTWVudUNyZWF0b3IoKSk7CisJfQorCisJLyoKKwkgKiAobm9uLUphdmFkb2MpCisJICogCisJICogQHNlZSBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uQWN0aW9uI3J1bigpCisJICovCisJcHVibGljIHZvaWQgcnVuKCkgeworCQkvL3Jlc3RhcnQocGF0aCk7CisJCXJldHVybjsKKwl9CisKKwkvKioKKwkgKiBSZXN0YXJ0IHRoZSB3b3JrYmVuY2ggdXNpbmcgdGhlIHNwZWNpZmllZCBwYXRoIGFzIHRoZSB3b3Jrc3BhY2UgbG9jYXRpb24uCisJICogCisJICogQHBhcmFtIHBhdGgKKwkgKiAgICAgICAgICAgIHRoZSBsb2NhdGlvbgorCSAqIEBzaW5jZSAzLjMKKwkgKi8KKwlwcml2YXRlIHZvaWQgcmVzdGFydChTdHJpbmcgcGF0aCkgeworCQlTdHJpbmcgY29tbWFuZF9saW5lID0gYnVpbGRDb21tYW5kTGluZShwYXRoKTsKKwkJaWYgKGNvbW1hbmRfbGluZSA9PSBudWxsKSB7CisJCQlyZXR1cm47CisJCX0KKworCQlTeXN0ZW0uc2V0UHJvcGVydHkoUFJPUF9FWElUX0NPREUsIEludGVnZXIudG9TdHJpbmcoMjQpKTsKKwkJU3lzdGVtLnNldFByb3BlcnR5KFBST1BfRVhJVF9EQVRBLCBjb21tYW5kX2xpbmUpOworCQl3aW5kb3cuZ2V0V29ya2JlbmNoKCkucmVzdGFydCgpOworCX0KKworCisKKwkvKioKKwkgKiBDcmVhdGUgYW5kIHJldHVybiBhIHN0cmluZyB3aXRoIGNvbW1hbmQgbGluZSBvcHRpb25zIGZvciBlY2xpcHNlLmV4ZSB0aGF0CisJICogd2lsbCBsYXVuY2ggYSBuZXcgd29ya2JlbmNoIHRoYXQgaXMgdGhlIHNhbWUgYXMgdGhlIGN1cnJlbnRseSBydW5uaW5nCisJICogb25lLCBidXQgdXNpbmcgdGhlIGFyZ3VtZW50IGRpcmVjdG9yeSBhcyBpdHMgd29ya3NwYWNlLgorCSAqIAorCSAqIEBwYXJhbSB3b3Jrc3BhY2UKKwkgKiAgICAgICAgICAgIHRoZSBkaXJlY3RvcnkgdG8gdXNlIGFzIHRoZSBuZXcgd29ya3NwYWNlCisJICogQHJldHVybiBhIHN0cmluZyBvZiBjb21tYW5kIGxpbmUgb3B0aW9ucyBvciBudWxsIG9uIGVycm9yCisJICovCisJcHJpdmF0ZSBTdHJpbmcgYnVpbGRDb21tYW5kTGluZShTdHJpbmcgd29ya3NwYWNlKSB7CisJCVN0cmluZyBwcm9wZXJ0eSA9IFN5c3RlbS5nZXRQcm9wZXJ0eShQUk9QX1ZNKTsKKwkJaWYgKHByb3BlcnR5ID09IG51bGwpIHsKKwkJCU1lc3NhZ2VEaWFsb2cKKwkJCQkJLm9wZW5FcnJvcigKKwkJCQkJCQl3aW5kb3cuZ2V0U2hlbGwoKSwKKwkJCQkJCQlNZXNzYWdlcy5Td2l0Y2hMb2NhbGVBY3Rpb25fQ29tbWFuZExpbmVFcnJvciwKKwkJCQkJCQlOTFMKKwkJCQkJCQkJCS5iaW5kKAorCQkJCQkJCQkJCQlNZXNzYWdlcy5Td2l0Y2hMb2NhbGVBY3Rpb25fQ29tbWFuZExpbmVFcnJvck1lc3NhZ2UsCisJCQkJCQkJCQkJCVBST1BfVk0pKTsKKwkJCXJldHVybiBudWxsOworCQl9CisKKwkJU3RyaW5nQnVmZmVyIHJlc3VsdCA9IG5ldyBTdHJpbmdCdWZmZXIoNTEyKTsKKwkJcmVzdWx0LmFwcGVuZChwcm9wZXJ0eSk7CisJCXJlc3VsdC5hcHBlbmQoTkVXX0xJTkUpOworCisJCS8vIGFwcGVuZCB0aGUgdm1hcmdzIGFuZCBjb21tYW5kcy4gQXNzdW1lIHRoYXQgdGhlc2UgYWxyZWFkeSBlbmQgaW4gXG4KKwkJU3RyaW5nIHZtYXJncyA9IFN5c3RlbS5nZXRQcm9wZXJ0eShQUk9QX1ZNQVJHUyk7CisKKwkJU3RyaW5nQnVmZmVyIHZtYXJnc0J1ZiA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKKworCQlpZiAoIXZtYXJncy5jb250YWlucyhvcmcuZWNsaXBzZS5zdGVtLnVpLk5MUy5TWVNURU1fTE9DQUxFX1BST1BFUlRZKSkgeworCQkJdm1hcmdzQnVmLmFwcGVuZCgiLUQiKTsgLy8kTk9OLU5MUy0xJAorCQkJdm1hcmdzQnVmLmFwcGVuZChvcmcuZWNsaXBzZS5zdGVtLnVpLk5MUy5TWVNURU1fTE9DQUxFX1BST1BFUlRZKTsKKwkJCXZtYXJnc0J1Zi5hcHBlbmQoIj0iKTsgLy8kTk9OLU5MUy0xJAorCQkJdm1hcmdzQnVmLmFwcGVuZChvcmcuZWNsaXBzZS5zdGVtLnVpLk5MUy5nZXRTeXN0ZW1Mb2NhbGUoKSk7CisJCQl2bWFyZ3NCdWYuYXBwZW5kKE5FV19MSU5FKTsKKwkJfQorCQl2bWFyZ3NCdWYuYXBwZW5kKHZtYXJncyk7CisJCQorCQlyZXN1bHQuYXBwZW5kKHZtYXJnc0J1Zi50b1N0cmluZygpKTsKKworCQkvLyBhcHBlbmQgdGhlIHJlc3Qgb2YgdGhlIGFyZ3MsIHJlcGxhY2luZyBvciBhZGRpbmcgLWRhdGEgYXMgcmVxdWlyZWQKKwkJcHJvcGVydHkgPSBTeXN0ZW0uZ2V0UHJvcGVydHkoUFJPUF9DT01NQU5EUyk7CisJCWlmIChwcm9wZXJ0eSA9PSBudWxsKSB7CisJCQlyZXN1bHQuYXBwZW5kKENNRF9OTCk7CisJCQlyZXN1bHQuYXBwZW5kKE5FV19MSU5FKTsKKwkJCXJlc3VsdC5hcHBlbmQod29ya3NwYWNlKTsKKwkJCXJlc3VsdC5hcHBlbmQoTkVXX0xJTkUpOworCQl9IGVsc2UgeworCQkJLy8gZmluZCB0aGUgaW5kZXggb2YgdGhlIGFyZyB0byByZXBsYWNlIGl0cyB2YWx1ZQorCQkJaW50IGNtZF9kYXRhX3BvcyA9IHByb3BlcnR5Lmxhc3RJbmRleE9mKENNRF9OTCk7CisJCQlpZiAoY21kX2RhdGFfcG9zICE9IC0xKSB7CisJCQkJY21kX2RhdGFfcG9zICs9IENNRF9OTC5sZW5ndGgoKSArIDE7CisJCQkJcmVzdWx0LmFwcGVuZChwcm9wZXJ0eS5zdWJzdHJpbmcoMCwgY21kX2RhdGFfcG9zKSk7CisJCQkJcmVzdWx0LmFwcGVuZCh3b3Jrc3BhY2UpOworCQkJCXJlc3VsdC5hcHBlbmQocHJvcGVydHkuc3Vic3RyaW5nKHByb3BlcnR5LmluZGV4T2YoJ1xuJywKKwkJCQkJCWNtZF9kYXRhX3BvcykpKTsKKwkJCX0gZWxzZSB7CisJCQkJcmVzdWx0LmFwcGVuZChDTURfTkwpOworCQkJCXJlc3VsdC5hcHBlbmQoTkVXX0xJTkUpOworCQkJCXJlc3VsdC5hcHBlbmQod29ya3NwYWNlKTsKKwkJCQlyZXN1bHQuYXBwZW5kKE5FV19MSU5FKTsKKwkJCQlyZXN1bHQuYXBwZW5kKHByb3BlcnR5KTsKKwkJCX0KKwkJfQorCQkKKwkJcmVzdWx0LmFwcGVuZChDTURfVk1BUkdTKTsKKwkJcmVzdWx0LmFwcGVuZChORVdfTElORSk7CisJCXJlc3VsdC5hcHBlbmQodm1hcmdzQnVmLnRvU3RyaW5nKCkpOworCQkJCisJCQkKKwkJLy8gcHV0IHRoZSB2bWFyZ3MgYmFjayBhdCB0aGUgdmVyeSBlbmQgKHRoZSBlY2xpcHNlLmNvbW1hbmRzIHByb3BlcnR5CisJCS8vIGFscmVhZHkgY29udGFpbnMgdGhlIC12bSBhcmcpCisvLwkJaWYgKHZtYXJncyAhPSBudWxsKSB7CisKKy8vCQkJaWYgKCF2bWFyZ3MuY29udGFpbnMob3JnLmVjbGlwc2Uuc3RlbS51aS5OTFMuU1lTVEVNX0xPQ0FMRV9QUk9QRVJUWSkpIHsKKy8vCQkJCXJlc3VsdC5hcHBlbmQoIi1EIik7IC8vJE5PTi1OTFMtMSQKKy8vCQkJCXJlc3VsdC5hcHBlbmQob3JnLmVjbGlwc2Uuc3RlbS51aS5OTFMuU1lTVEVNX0xPQ0FMRV9QUk9QRVJUWSk7CisvLwkJCQlyZXN1bHQuYXBwZW5kKCI9Iik7IC8vJE5PTi1OTFMtMSQKKy8vCQkJCXJlc3VsdC5hcHBlbmQob3JnLmVjbGlwc2Uuc3RlbS51aS5OTFMuZ2V0U3lzdGVtTG9jYWxlKCkpOworLy8JCQkJcmVzdWx0LmFwcGVuZChORVdfTElORSk7CisvLwkJCX0KKworCisvLwkJfSBlbHNlIHsKKy8vCQkJCisvLwkJCXJlc3VsdC5hcHBlbmQoQ01EX1ZNQVJHUyk7CisvLwkJCXJlc3VsdC5hcHBlbmQoTkVXX0xJTkUpOworLy8JCQlyZXN1bHQuYXBwZW5kKCItRCIpOyAvLyROT04tTkxTLTEkCisvLwkJCXJlc3VsdC5hcHBlbmQob3JnLmVjbGlwc2Uuc3RlbS51aS5OTFMuU1lTVEVNX0xPQ0FMRV9QUk9QRVJUWSk7CisvLwkJCXJlc3VsdC5hcHBlbmQoIj0iKTsgLy8kTk9OLU5MUy0xJAorLy8JCQlyZXN1bHQuYXBwZW5kKG9yZy5lY2xpcHNlLnN0ZW0udWkuTkxTLmdldFN5c3RlbUxvY2FsZSgpKTsKKy8vCQl9CisvLwkJCisJCQorCisJCXJldHVybiByZXN1bHQudG9TdHJpbmcoKTsKKwl9CisKKwkvKgorCSAqIChub24tSmF2YWRvYykKKwkgKiAKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5BY3Rpb24jZGlzcG9zZSgpCisJICovCisJcHVibGljIHZvaWQgZGlzcG9zZSgpIHsKKwkJd2luZG93ID0gbnVsbDsKKwl9Cit9CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvaGFuZGxlcnMvbWVzc2FnZXMucHJvcGVydGllcyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9oYW5kbGVycy9tZXNzYWdlcy5wcm9wZXJ0aWVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQxYWM2OWQKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvaGFuZGxlcnMvbWVzc2FnZXMucHJvcGVydGllcwpAQCAtMCwwICsxLDcgQEAKK1N3aXRjaExvY2FsZUFjdGlvbl9Db21tYW5kTGluZUVycm9yPUVycm9yCitTd2l0Y2hMb2NhbGVBY3Rpb25fQ29tbWFuZExpbmVFcnJvck1lc3NhZ2U9VW5hYmxlIHRvIHJlbGF1bmNoIHRoZSBwbGF0Zm9ybSBiZWNhdXNlIHRoZSB7MH0gcHJvcGVydHkgaGFzIG5vdCBiZWVuIHNldC4KK1N3aXRjaExvY2FsZUFjdGlvbl9Db25maXJtUmVzdGFydD1Db25maXJtCitTd2l0Y2hMb2NhbGVBY3Rpb25fQ29uZmlybVJlc3RhcnRNZXNzYWdlPUNoYW5naW5nIGxvY2FsZXMgcmVxdWlyZXMgeW91IHRvIHJlc3RhcnQgU1RFTS4gIERvIHlvdSB3aXNoIHRvIGNvbnRpbnVlPworU3dpdGNoTG9jYWxlQWN0aW9uX0RlZmF1bHRTZXR0aW5nPVwgKERlZmF1bHQpCitTd2l0Y2hMb2NhbGVBY3Rpb25fU3dpdGNoTGFuZ2F1Z2VNZW51PVN3aXRjaCBMYW5ndWFnZQorU3dpdGNoTG9jYWxlQWN0aW9uX1N3aXRjaExhbmdhdWdlTWVudVRUPVN3aXRjaCBMYW5ndWFnZQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL2xhdW5jaGVyL0NvbW1hbmRBcmd1bWVudFBhcnNlci5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL2xhdW5jaGVyL0NvbW1hbmRBcmd1bWVudFBhcnNlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc1OWMzZWUKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvbGF1bmNoZXIvQ29tbWFuZEFyZ3VtZW50UGFyc2VyLmphdmEKQEAgLTAsMCArMSw2NyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAxMSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0udWkubGF1bmNoZXI7CisKK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OworaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uczsKK2ltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuTWFwOworCisvKioKKyAqIFNpbXBsZSBjbGFzcyB0byByZWFkIGFuZCBwYXJzZSBjb21tYW5kIGxpbmUgb3B0aW9ucworICogcGFzc2VkIHRvIHRoZSBFY2xpcHNlIC8gU1RFTSBydW50aW1lLiAgUGFyc2VzIG91dCAKKyAqIGFyZ3VtZW50cyBiZWdpbm5pbmcgd2l0aCAiLSIgaW50byBrZXlzIGFuZCBzcGFjZS1zZXBhcmF0ZWQKKyAqIHZhbHVlcyBmb2xsb3dpbmcgdGhlIGtleSBhcyBhIGxpc3Qgb2YgdmFsdWVzLgorICoKKyAqLworcHVibGljIGNsYXNzIENvbW1hbmRBcmd1bWVudFBhcnNlciAKK3sKKwlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBOT19DT01NQU5EX0tFWSA9ICJOT05FIjsKKworCS8qKgorCSAqIFBhcnNlcyBhbiBhcnJheSBvZiBjb21tYW5kLWxpbmUgYXJndW1lbnRzIGludG8ga2V5L3ZhbHVlIAorCSAqIGdyb3VwaW5ncyBvZiBjb21tYW5kIGtleXMgKHN0YXJ0aW5nIHdpdGggJy0nKSBhbmQgdGhlIHZhbHVlcyB0aGF0CisJICogZm9sbG93IHRoZSBrZXlzLgorCSAqIAorCSAqIEBwYXJhbSBhcmdzIEFycmF5IG9mIGNvbW1hbmQgbGluZSBhcmd1bWVudHMKKwkgKiBAcmV0dXJuIFBhcnNlZCBtYXAgb2Yga2V5L3ZhbHVlIGNvbW1hbmRzCisJICovCisJcHVibGljIHN0YXRpYyBNYXA8U3RyaW5nLExpc3Q8U3RyaW5nPj4gcGFyc2UoU3RyaW5nW10gYXJncykKKwl7CisJCU1hcDxTdHJpbmcsTGlzdDxTdHJpbmc+PiBwYXJhbXMgPSBuZXcgSGFzaE1hcDxTdHJpbmcsTGlzdDxTdHJpbmc+PigpOworCQkKKwkJaWYgKGFyZ3MgIT0gbnVsbCAmJiBhcmdzLmxlbmd0aCA+IDApIHsKKwkJCVN0cmluZyBjdXJyZW50UGFyYW0gPSBudWxsOworCQkJTGlzdDxTdHJpbmc+IGN1cnJlbnRQYXJhbVZhbHVlcyA9IG51bGw7CisJCQkKKwkJCWZvciAoU3RyaW5nIGFyZyA6IGFyZ3MpIHsKKwkJCQlpZiAoYXJnLmNoYXJBdCgwKSA9PSAnLScpIHsKKwkJCQkJY3VycmVudFBhcmFtID0gYXJnLnN1YnN0cmluZygxKTsKKwkJCQkJY3VycmVudFBhcmFtVmFsdWVzID0gbmV3IEFycmF5TGlzdDxTdHJpbmc+KCk7CisJCQkJCXBhcmFtcy5wdXQoY3VycmVudFBhcmFtLCBjdXJyZW50UGFyYW1WYWx1ZXMpOworCisJCQkJfSBlbHNlIHsKKwkJCQkJaWYgKGN1cnJlbnRQYXJhbSA9PSBudWxsKSB7CisJCQkJCQljdXJyZW50UGFyYW0gPSBOT19DT01NQU5EX0tFWTsKKwkJCQkJCWN1cnJlbnRQYXJhbVZhbHVlcyA9IG5ldyBBcnJheUxpc3Q8U3RyaW5nPigpOworCQkJCQkJcGFyYW1zLnB1dChjdXJyZW50UGFyYW0sIGN1cnJlbnRQYXJhbVZhbHVlcyk7CisJCQkJCX0KKwkJCQkJCisJCQkJCWN1cnJlbnRQYXJhbVZhbHVlcy5hZGQoYXJnKTsKKwkJCQl9CisJCQl9CisJCX0KKwkJCisJCXJldHVybiBDb2xsZWN0aW9ucy51bm1vZGlmaWFibGVNYXAocGFyYW1zKTsKKwl9CisKK30KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9sYXVuY2hlci9MYXVuY2hlci5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL2xhdW5jaGVyL0xhdW5jaGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjkxNGYzZQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9sYXVuY2hlci9MYXVuY2hlci5qYXZhCkBAIC0wLDAgKzEsOTUgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTEgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnVpLmxhdW5jaGVyOworCitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CitpbXBvcnQgamF2YS51dGlsLk1hcDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVxdWlub3guYXBwLklBcHBsaWNhdGlvbkNvbnRleHQ7CisKKy8qKgorICogQWJzdHJhY3QgY2xhc3MgcmVwcmVzZW50aW5nIGEgU1RFTSBhcHBsaWNhdGlvbiBsYXVuY2hlcgorICogSW1wbGVtZW50aW5nIGNsYXNzZXMgc2hvdWxkIHBvcHVsYXRlIHRoZSBhYnN0cmFjdCAKKyAqIGxhdW5jaCgpIG1ldGhvZCBmb3IgaW52b2NhdGlvbi4KKyAqCisgKi8KK3B1YmxpYyBhYnN0cmFjdCBjbGFzcyBMYXVuY2hlciAKK3sKKwkvKioKKwkgKiBFY2xpcHNlIEFwcGxpY2F0aW9uIENvbnRleHQKKwkgKi8KKwlwcm90ZWN0ZWQgSUFwcGxpY2F0aW9uQ29udGV4dCBjb250ZXh0OworCQorCS8qKgorCSAqIFBhcnNlZCBjb21tYW5kIGxpbmUgYXJndW1lbnRzCisJICovCisJcHJvdGVjdGVkIE1hcDxTdHJpbmcsTGlzdDxTdHJpbmc+PiBhcmdzOworCQorCQorCXB1YmxpYyBMYXVuY2hlcigpCisJeworCQl0aGlzKG51bGwsbnVsbCk7CisJfQorCQorCS8qKgorCSAqIExhdW5jaGVyIHN1cGVyIGNvbnN0cnVjdG9yLiAgU2V0cyB0aGUgYXBwbGljYXRpb24gY29udGV4dCBhbmQgY29tbWFuZAorCSAqIGxpbmUgYXJndW1lbnRzIGZvciBhbGwgaW1wbGVtZW50YXRpb25zLiAKKwkgKiAKKwkgKiBAcGFyYW0gY29udGV4dCBFY2xpcHNlIEFwcGxpY2F0aW9uIENvbnRleHQgKHBhc3NlZCB0byBJQXBwbGljYXRpb24jc3RhcnQoKSkKKwkgKiBAcGFyYW0gYXJncyBQYXJzZWQgY29tbWFuZCBsaW5lIGFyZ3VtZW50cworCSAqLworCXB1YmxpYyBMYXVuY2hlcihJQXBwbGljYXRpb25Db250ZXh0IGNvbnRleHQsIE1hcDxTdHJpbmcsTGlzdDxTdHJpbmc+PiBhcmdzKQorCXsKKwkJdGhpcy5jb250ZXh0ID0gY29udGV4dDsKKwkJdGhpcy5hcmdzID0gYXJnczsKKwl9CisJCisJdm9pZCBzZXRDb250ZXh0KElBcHBsaWNhdGlvbkNvbnRleHQgY29udGV4dCkKKwl7CisJCXRoaXMuY29udGV4dCA9IGNvbnRleHQ7CisJfQorCQorCXZvaWQgc2V0Q29tbWFuZEFyZ3VtZW50cyhNYXA8U3RyaW5nLExpc3Q8U3RyaW5nPj4gYXJncykKKwl7CisJCXRoaXMuYXJncyA9IGFyZ3M7CisJfQorCQorCQorCS8qKgorCSAqIEByZXR1cm4gVGhlIEVjbGlwc2UgYXBwbGljYXRpb24gY29udGV4dAorCSAqLworCXByb3RlY3RlZCBJQXBwbGljYXRpb25Db250ZXh0IGdldENvbnRleHQoKQorCXsKKwkJcmV0dXJuIGNvbnRleHQ7CisJfQorCQorCS8qKgorCSAqIEByZXR1cm4gVGhlIHBhcnNlZCBjb21tYW5kIGxpbmUgYXJndW1lbnRzCisJICovCisJcHJvdGVjdGVkIE1hcDxTdHJpbmcsTGlzdDxTdHJpbmc+PiBnZXRDb21tYW5kQXJndW1lbnRzKCkKKwl7CisJCXJldHVybiBhcmdzOworCX0KKwkKKwkvKioKKwkgKiBMYXVuY2hlcyB0aGUgU1RFTSBhcHBsaWNhdGlvbi4gIEltcGxlbWVudGF0aW9ucyBzaG91bGQgCisJICogdXNlIHRoaXMgbWV0aG9kIHRvIHByZXBhcmUsIGxhdW5jaCwgYW5kIG1hbmFnZSB0aGUgbGlmZWN5Y2xlCisJICogb2YgdGhlIFNURU0gYXBwbGljYXRpb24gYmFzZWQgb24gdGhlIGNvbmRpdGlvbnMgb2YgdGhlIGxhdW5jaGVyIAorCSAqIGltcGxlbWVudGF0aW9uLgorCSAqIAorCSAqIFRoZSByZXR1cm4gZnJvbSB0aGlzIG1ldGhvZCByZXByZXNlbnRzIHRoZSBpbnRlbmRlZCByZXR1cm4gZnJvbQorCSAqIHtAbGluayBJQXBwbGljYXRpb24jc3RhcnQoSUFwcGxpY2F0aW9uQ29udGV4dCl9LCBhbiBpbnRlZ2VyIGZyb20gdGhlIHNldCBvZiBbe0BsaW5rIElBcHBsaWNhdGlvbiNFWElUX09LfSwKKwkgKiB7QGxpbmsgSUFwcGxpY2F0aW9uI0VYSVRfUkVMQVVOQ0h9LCB7QGxpbmsgSUFwcGxpY2F0aW9uI0VYSVRfUkVTVEFSVH1dLgorCSAqIAorCSAqIEByZXR1cm4gU2VlIHJldHVybiBmcm9tIElBcHBsaWNhdGlvbiNzdGFydChJQXBwbGljYXRpb25Db250ZXh0KQorCSAqLworCXB1YmxpYyBhYnN0cmFjdCBPYmplY3QgbGF1bmNoKCk7Cit9CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvbGF1bmNoZXIvTGF1bmNoZXJGYWN0b3J5LmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvbGF1bmNoZXIvTGF1bmNoZXJGYWN0b3J5LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGUxMjJjNQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9sYXVuY2hlci9MYXVuY2hlckZhY3RvcnkuamF2YQpAQCAtMCwwICsxLDkxIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDExIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS51aS5sYXVuY2hlcjsKKworaW1wb3J0IGphdmEudXRpbC5MaXN0OworaW1wb3J0IGphdmEudXRpbC5NYXA7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSUNvbmZpZ3VyYXRpb25FbGVtZW50OworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QbGF0Zm9ybTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lcXVpbm94LmFwcC5JQXBwbGljYXRpb25Db250ZXh0OworCisvKioKKyAqIEZhY3RvcnkgY2xhc3MgdG8gZGV0ZXJtaW5lIGFuZCByZXR1cm4gdGhlIGNvcnJlY3QgCisgKiBTVEVNIGxhdW5jaGVyIGltcGxlbWVudGF0aW9uIGJhc2VkIG9uIHRoZSBhcHBsaWNhdGlvbiAKKyAqIGNvbnRleHQgYW5kIGNvbW1hbmQgbGluZSBwYXJhbWV0ZXJzLgorICovCitwdWJsaWMgY2xhc3MgTGF1bmNoZXJGYWN0b3J5IAoreworCQorCS8qKgorCSAqIE5hbWUgb2YgdGhlIGV4dGVuc2lvbiBwb2ludHMgdGhhdCBwbHVnaW5zIHdpbGwgcmVnaXN0ZXIgbGF1bmNoZXJzIGludG8KKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBMQVVOQ0hFUlNfRVhURU5TSU9OX1BPSU5UX0lEID0gIm9yZy5lY2xpcHNlLnN0ZW0udWkubGF1bmNoZXJzIjsKKworCS8qKgorCSAqIFBhcnNlcyBjb21tYW5kIGxpbmUgYXJndW1lbnRzIGFuZCByZXR1cm5zIHRoZSByZXF1ZXN0ZWQKKwkgKiBTVEVNIGxhdW5jaGVyIGJhc2VkIG9uIHRoZSBhcmd1bWVudHMgcGFzc2VkLiAKKwkgKiAKKwkgKiBDdXJyZW50bHkgb25seSBzdXBwb3J0cyB0aGUgd29ya2JlbmNoIGFuZCB0aGUgaGVhZGxlc3MgbGF1bmNoZXJzLgorCSAqIAorCSAqIEBwYXJhbSBjb250ZXh0IEVjbGlwc2UgQXBwbGljYXRpb24gQ29udGV4dAorCSAqIEByZXR1cm4gTGF1bmNoZXIgdG8gdXNlIGZvciBsYXVuY2hpbmcgdGhlIFNURU0gYXBwbGljYXRpb24KKwkgKi8KKwlwdWJsaWMgc3RhdGljIExhdW5jaGVyIGdldExhdW5jaGVyKElBcHBsaWNhdGlvbkNvbnRleHQgY29udGV4dCkKKwl7CisJCS8vIFBhcnNlIHRoZSBjb21tYW5kIGxpbmUgYXJ1Z21lbnRzCisJCVN0cmluZ1tdIGFyZ3MgPSAoU3RyaW5nW10pY29udGV4dC5nZXRBcmd1bWVudHMoKS5nZXQoImFwcGxpY2F0aW9uLmFyZ3MiKTsKKwkJTWFwPFN0cmluZyxMaXN0PFN0cmluZz4+IGNvbW1hbmRBcmdzID0gQ29tbWFuZEFyZ3VtZW50UGFyc2VyLnBhcnNlKGFyZ3MpOworCQorCQkvLyBGaW5kIHRoZSBjb3JyZWN0IGxhdW5jaGVyIGJhc2VkIG9uIGNvbmZpZ3VyYXRpb24KKwkJTGF1bmNoZXIgbGF1bmNoZXIgPSBnZXRMYXVuY2hlckZyb21FeHRlbnNpb25zKGNvbW1hbmRBcmdzKTsKKyAgICAgICAgaWYgKGxhdW5jaGVyID09IG51bGwpIHsKKyAgICAgICAgCWxhdW5jaGVyID0gbmV3IFdvcmtiZW5jaExhdW5jaGVyKCk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIC8vIFNldCB0aGUgY29tbWFuZCBsaW5lIG9wdGlvbnMKKyAgICAgICAgbGF1bmNoZXIuc2V0Q29udGV4dChjb250ZXh0KTsKKyAgICAgICAgbGF1bmNoZXIuc2V0Q29tbWFuZEFyZ3VtZW50cyhjb21tYW5kQXJncyk7CisgICAgICAgIAorCQlyZXR1cm4gbGF1bmNoZXI7CisJfQorCQorCS8qKgorCSAqIEZpbmRzIHRoZSBjb3JyZWN0IGxhdW5jaGVyIGJhc2VkIG9uIGNvbW1hbmQgbGluZSBpbnB1dHMgZnJvbSB0aGUgbGlzdCBvZgorCSAqIGxhdW5jaGVycyBwcm92aWRlZCBieSBwbHVnaW5zLgorCSAqIAorCSAqIEBwYXJhbSBjb21tYW5kQXJncworCSAqIEByZXR1cm4KKwkgKi8KKwlwcml2YXRlIHN0YXRpYyBMYXVuY2hlciBnZXRMYXVuY2hlckZyb21FeHRlbnNpb25zKE1hcDxTdHJpbmcsTGlzdDxTdHJpbmc+PiBjb21tYW5kQXJncykKKwl7CisJCVN0cmluZyBsYXVuY2hlck5hbWUgPSBudWxsOworCQlpZiAoY29tbWFuZEFyZ3MuY29udGFpbnNLZXkoImxhdW5jaGVyIikgJiYgY29tbWFuZEFyZ3MuZ2V0KCJsYXVuY2hlciIpLnNpemUoKSA+IDApIHsKKwkJCWxhdW5jaGVyTmFtZSA9IGNvbW1hbmRBcmdzLmdldCgibGF1bmNoZXIiKS5nZXQoMCk7CisJCX0KKwkJCisJCUxhdW5jaGVyIGxhdW5jaGVyID0gbnVsbDsKKyAgICAgICAgSUNvbmZpZ3VyYXRpb25FbGVtZW50W10gZXh0ZW5zaW9ucyA9IFBsYXRmb3JtLmdldEV4dGVuc2lvblJlZ2lzdHJ5KCkuZ2V0Q29uZmlndXJhdGlvbkVsZW1lbnRzRm9yKExBVU5DSEVSU19FWFRFTlNJT05fUE9JTlRfSUQpOworICAgICAgICBmb3IgKElDb25maWd1cmF0aW9uRWxlbWVudCBlIDogZXh0ZW5zaW9ucykgeworICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIAlTdHJpbmcgbmFtZSA9IGUuZ2V0QXR0cmlidXRlKCJuYW1lIik7CisgICAgICAgIAkJaWYgKG5hbWUgIT0gbnVsbCAmJiAobmFtZS5lcXVhbHMobGF1bmNoZXJOYW1lKSB8fCBjb21tYW5kQXJncy5jb250YWluc0tleShuYW1lKSkpIHsKKyAgICAgICAgCQkJbGF1bmNoZXIgPSAoTGF1bmNoZXIpZS5jcmVhdGVFeGVjdXRhYmxlRXh0ZW5zaW9uKCJjbGFzcyIpOworICAgICAgICAJCQlicmVhazsKKyAgICAgICAgCQl9CisgICAgICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gY2UpIHsKKyAgICAgICAgICAgIAkvLyBpZ25vcmUsIGRvbid0IGNhcmUKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgcmV0dXJuIGxhdW5jaGVyOworCX0KK30KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9sYXVuY2hlci9Xb3JrYmVuY2hMYXVuY2hlci5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL2xhdW5jaGVyL1dvcmtiZW5jaExhdW5jaGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWU5MzZlZQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9sYXVuY2hlci9Xb3JrYmVuY2hMYXVuY2hlci5qYXZhCkBAIC0wLDAgKzEsNzIgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTEgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnVpLmxhdW5jaGVyOworCitpbXBvcnQgamF2YS51dGlsLlByb3BlcnRpZXM7CitpbXBvcnQgamF2YS51dGlsLk1hcC5FbnRyeTsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVxdWlub3guYXBwLklBcHBsaWNhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5kaWFsb2dzLk1lc3NhZ2VEaWFsb2c7CitpbXBvcnQgb3JnLmVjbGlwc2Uub3NnaS51dGlsLk5MUzsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLnByZXNlbnRhdGlvbi5Db3JlRWRpdG9yQWR2aXNvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5EaXNwbGF5OworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLlBsYXRmb3JtVUk7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuYXBwbGljYXRpb24uV29ya2JlbmNoQWR2aXNvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5pZGUuSURFV29ya2JlbmNoTWVzc2FnZXM7CisKKy8qKgorICogU3RhbmRhcmQgU1RFTSBXb3JrYmVuY2ggbGF1bmNoZXIuICBUaGlzIGxhdW5jaGVzIHRoZSBmdWxsCisgKiBTVEVNIHVzZXIgaW50ZXJmYWNlIGFuZCB3b3JrYmVuY2gsIGluY2x1ZGluZyBSQ1AgYXBwbGljYXRpb24uCisgKgorICovCitwdWJsaWMgY2xhc3MgV29ya2JlbmNoTGF1bmNoZXIgZXh0ZW5kcyBMYXVuY2hlcgoreworCS8qKgorCSAqIERlZmF1bHQgY29uc3RydWN0b3IgZm9yIHdvcmtiZW5jaCBsYXVuY2hlcgorCSAqLworCXB1YmxpYyBXb3JrYmVuY2hMYXVuY2hlcigpCisJeworCQlzdXBlcigpOworCX0KKwkKKwkKKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBJbnRlZ2VyIEVYSVRfUkVMQVVOQ0ggPSBuZXcgSW50ZWdlcigyNCk7CisJCisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFBST1BfRVhJVF9DT0RFID0gImVjbGlwc2UuZXhpdGNvZGUiOyAvLyROT04tTkxTLTEkCisJCisJLyogKG5vbi1KYXZhZG9jKQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmxhdW5jaGVyLkxhdW5jaGVyI2xhdW5jaCgpCisJICovCisJcHVibGljIE9iamVjdCBsYXVuY2goKQorCXsKKwkJV29ya2JlbmNoQWR2aXNvciB3b3JrYmVuY2hBZHZpc29yID0gbmV3IENvcmVFZGl0b3JBZHZpc29yKCk7CisJCURpc3BsYXkgZGlzcGxheSA9IFBsYXRmb3JtVUkuY3JlYXRlRGlzcGxheSgpOworCQl0cnkgeworCQkJaW50IHJldHVybkNvZGUgPSBQbGF0Zm9ybVVJLmNyZWF0ZUFuZFJ1bldvcmtiZW5jaChkaXNwbGF5LCB3b3JrYmVuY2hBZHZpc29yKTsKKwkJCWlmIChyZXR1cm5Db2RlID09IFBsYXRmb3JtVUkuUkVUVVJOX1JFU1RBUlQpIHsKKwkJCQkKKwkJCQkvLyBpZiB0aGUgZXhpdCBjb2RlIHByb3BlcnR5IGhhcyBiZWVuIHNldCB0byB0aGUgcmVsYXVuY2ggY29kZSwgdGhlbgorCQkJCS8vIHJldHVybiB0aGF0IGNvZGUgbm93LCBvdGhlcndpc2UgdGhpcyBpcyBhIG5vcm1hbCByZXN0YXJ0CisJCQkJLy8gTm90ZTogdGhpcyBzbmlwcGV0IHRha2VuIGZyb20gdGhlIEVjbGlwc2UgSURFIFdvcmtiZW5jaCBsYXVuY2hlcgorCQkJCXJldHVybiBFWElUX1JFTEFVTkNILmVxdWFscyhJbnRlZ2VyLmdldEludGVnZXIoUFJPUF9FWElUX0NPREUpKSA/IEVYSVRfUkVMQVVOQ0gKKwkJCQkJCSAgICAgICAgICAgICAgICAgICAgOiBJQXBwbGljYXRpb24uRVhJVF9SRVNUQVJUOworCQkJfQorCisJCQlyZXR1cm4gSUFwcGxpY2F0aW9uLkVYSVRfT0s7CisJCX0gZmluYWxseSB7CisJCQlkaXNwbGF5LmRpc3Bvc2UoKTsKKwkJfQorCX0KKwkKKwkKKworCQorfQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3BlcnNwZWN0aXZlcy9EZXNpZ25lci5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3BlcnNwZWN0aXZlcy9EZXNpZ25lci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZiOTgzOGIKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvcGVyc3BlY3RpdmVzL0Rlc2lnbmVyLmphdmEKQEAgLTAsMCArMSw5NyBAQAorLy8gRGVzaWduZXIuamF2YQorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnVpLnBlcnNwZWN0aXZlczsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNiwgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuQ29uc3RhbnRzOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udWkudmlld3MuRGVjb3JhdG9yc1ZpZXc7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS51aS52aWV3cy5HcmFwaHNWaWV3OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udWkudmlld3MuTW9kZWxzVmlldzsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnVpLnZpZXdzLlByZWRpY2F0ZXNWaWV3OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udWkudmlld3MuU2NlbmFyaW9zVmlldzsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnVpLnZpZXdzLlNlcXVlbmNlcnNWaWV3OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udWkudmlld3MuU2ltdWxhdGlvbkNvbnRyb2xWaWV3OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udWkudmlld3MuVHJpZ2dlcnNWaWV3OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udWkud2l6YXJkcy5OZXdTVEVNUHJvamVjdFdpemFyZDsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5JRm9sZGVyTGF5b3V0OworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklQYWdlTGF5b3V0OworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklQZXJzcGVjdGl2ZUZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkubmF2aWdhdG9yLnJlc291cmNlcy5Qcm9qZWN0RXhwbG9yZXI7CisKKy8qKgorICogVGhpcyBjbGFzcyBpbXBsZW1lbnRzIHRoZSAiRGVzaWduZXIiIHBlcnNwZWN0aXZlIG9mIFNURU0uIFRoaXMgUGVyc3BlY3RpdmUgaXMKKyAqIHVzZWQgdG8gY3JlYXRlIG9yICJkZXNpZ24iIHNpbXVsYXRpb25zLgorICovCitwdWJsaWMgY2xhc3MgRGVzaWduZXIgaW1wbGVtZW50cyBJUGVyc3BlY3RpdmVGYWN0b3J5IHsKKworCS8qKgorCSAqIFRoZSBpZGVudGlmaWVyIG9mIHRoZSBEZXNpZ25lciBQZXJzcGVjdGl2ZQorCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIElEX1NURU1fREVTSUdORVJfUEVSU1BFQ1RJVkUgPSBDb25zdGFudHMuSURfUk9PVAorCQkJKyAiLnVpLlNURU1EZXNpZ25lclBlcnNwZWN0aXZlIjsgLy8kTk9OLU5MUy0xJAorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS51aS5JUGVyc3BlY3RpdmVGYWN0b3J5I2NyZWF0ZUluaXRpYWxMYXlvdXQob3JnLmVjbGlwc2UudWkuSVBhZ2VMYXlvdXQpCisJICovCisJcHVibGljIHZvaWQgY3JlYXRlSW5pdGlhbExheW91dChmaW5hbCBJUGFnZUxheW91dCBsYXlvdXQpIHsKKwkJZmluYWwgU3RyaW5nIGVkaXRvckFyZWEgPSBsYXlvdXQuZ2V0RWRpdG9yQXJlYSgpOworCisJCS8vIFB1dCB0aGUgU1RFTSBQcm9qZWN0IEV4cGxvcmVyIHZpZXcgb24gdGhlIGxlZnQgc2lkZQorCQlmaW5hbCBJRm9sZGVyTGF5b3V0IGxlZnQgPSBsYXlvdXQuY3JlYXRlRm9sZGVyKAorCQkJCSJsZWZ0IiwgSVBhZ2VMYXlvdXQuTEVGVCwgLy8kTk9OLU5MUy0xJAorCQkJCTAuMjVmLCBlZGl0b3JBcmVhKTsKKwkJbGVmdC5hZGRWaWV3KFByb2plY3RFeHBsb3Jlci5WSUVXX0lEKTsKKworCQkvLyBQdXQgdGhlIEdyYXBocyBWaWV3IG9uIHRoZSBib3R0b20gd2l0aCB0aGUgVGFza3MgVmlldworCQlmaW5hbCBJRm9sZGVyTGF5b3V0IGJvdHRvbSA9IGxheW91dC5jcmVhdGVGb2xkZXIoImJvdHRvbSIsIC8vJE5PTi1OTFMtMSQKKwkJCQlJUGFnZUxheW91dC5CT1RUT00sIDAuNjZmLCBlZGl0b3JBcmVhKTsKKworCQlib3R0b20uYWRkVmlldyhTY2VuYXJpb3NWaWV3LklEX1NDRU5BUklPU19WSUVXKTsKKwkJYm90dG9tLmFkZFZpZXcoTW9kZWxzVmlldy5JRF9NT0RFTFNfVklFVyk7CisJCWJvdHRvbS5hZGRWaWV3KEdyYXBoc1ZpZXcuSURfR1JBUEhTX1ZJRVcpOworCisJCWJvdHRvbS5hZGRWaWV3KFRyaWdnZXJzVmlldy5JRF9UUklHR0VSU19WSUVXKTsKKwkJYm90dG9tLmFkZFZpZXcoUHJlZGljYXRlc1ZpZXcuSURfUFJFRElDQVRFU19WSUVXKTsKKwkJYm90dG9tLmFkZFZpZXcoU2VxdWVuY2Vyc1ZpZXcuSURfU0VRVUVOQ0VSU19WSUVXKTsKKwkJYm90dG9tLmFkZFZpZXcoRGVjb3JhdG9yc1ZpZXcuSURfREVDT1JBVE9SU19WSUVXKTsKKworCQlib3R0b20uYWRkVmlldyhJUGFnZUxheW91dC5JRF9QUk9QX1NIRUVUKTsKKwkJYm90dG9tLmFkZFZpZXcoSVBhZ2VMYXlvdXQuSURfVEFTS19MSVNUKTsKKwkJYm90dG9tLmFkZFBsYWNlaG9sZGVyKElQYWdlTGF5b3V0LklEX1BST0JMRU1fVklFVyk7CisJCS8vIGFkZCBFcnJvciBMb2cgdmlldworCQlib3R0b20uYWRkVmlldygib3JnLmVjbGlwc2UucGRlLnJ1bnRpbWUuTG9nVmlldyIpOyAvLyROT04tTkxTLTEkCisJCS8vIFB1dCB0aGUgT3V0bGluZSB2aWV3IG9uIHRoZSByaWdodAorCQlsYXlvdXQuYWRkVmlldyhJUGFnZUxheW91dC5JRF9PVVRMSU5FLCBJUGFnZUxheW91dC5SSUdIVCwgLjc1ZiwKKwkJCQllZGl0b3JBcmVhKTsKKworCQkvLyBBZGQgdGhlIFZpZXdzIHRvICJTaG93IFZpZXciIG1lbnUKKwkJbGF5b3V0CisJCQkJLmFkZFNob3dWaWV3U2hvcnRjdXQoU2ltdWxhdGlvbkNvbnRyb2xWaWV3LklEX1NJTVVMQVRJT05fQ09OVFJPTF9WSUVXKTsKKwkJbGF5b3V0LmFkZFNob3dWaWV3U2hvcnRjdXQoR3JhcGhzVmlldy5JRF9HUkFQSFNfVklFVyk7CisJCWxheW91dC5hZGRTaG93Vmlld1Nob3J0Y3V0KE1vZGVsc1ZpZXcuSURfTU9ERUxTX1ZJRVcpOworCQlsYXlvdXQuYWRkU2hvd1ZpZXdTaG9ydGN1dChTY2VuYXJpb3NWaWV3LklEX1NDRU5BUklPU19WSUVXKTsKKwkJbGF5b3V0LmFkZFNob3dWaWV3U2hvcnRjdXQoU2VxdWVuY2Vyc1ZpZXcuSURfU0VRVUVOQ0VSU19WSUVXKTsKKwkJbGF5b3V0LmFkZFNob3dWaWV3U2hvcnRjdXQoRGVjb3JhdG9yc1ZpZXcuSURfREVDT1JBVE9SU19WSUVXKTsKKwkJbGF5b3V0LmFkZFNob3dWaWV3U2hvcnRjdXQoVHJpZ2dlcnNWaWV3LklEX1RSSUdHRVJTX1ZJRVcpOworCQlsYXlvdXQuYWRkU2hvd1ZpZXdTaG9ydGN1dChQcmVkaWNhdGVzVmlldy5JRF9QUkVESUNBVEVTX1ZJRVcpOworCQlsYXlvdXQuYWRkU2hvd1ZpZXdTaG9ydGN1dChQcm9qZWN0RXhwbG9yZXIuVklFV19JRCk7CisKKwkJLy8gQWRkIHRoZSBXaXphcmRzIHRvIHRoZSAiTmV3Li4uIiBtZW51CisJCWxheW91dAorCQkJCS5hZGROZXdXaXphcmRTaG9ydGN1dChOZXdTVEVNUHJvamVjdFdpemFyZC5JRF9TVEVNX1BST0pFQ1RfV0laQVJEKTsKKworCQkvLyBBZGQgdGhlIERlc2lnbmVyIHBlcnNwZWN0aXZlIHRvIHRoZSAiT3BlbiBQZXJzcGVjdGl2ZSIgbWVudQorCQlsYXlvdXQuYWRkUGVyc3BlY3RpdmVTaG9ydGN1dChJRF9TVEVNX0RFU0lHTkVSX1BFUlNQRUNUSVZFKTsKKworCX0gLy8gY3JlYXRlSW5pdGlhbExheW91dAorCit9IC8vIERlc2lnbmVyCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvcGVyc3BlY3RpdmVzL1NpbXVsYXRpb24uamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9wZXJzcGVjdGl2ZXMvU2ltdWxhdGlvbi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ1MTczMDAKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvcGVyc3BlY3RpdmVzL1NpbXVsYXRpb24uamF2YQpAQCAtMCwwICsxLDk5IEBACisvLyBTaW11bGF0aW9uLmphdmEKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS51aS5wZXJzcGVjdGl2ZXM7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLkNvbnN0YW50czsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnVpLnZpZXdzLkFjdGl2ZUJhdGNoZXNWaWV3OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udWkudmlld3MuQWN0aXZlU2ltdWxhdGlvbnNWaWV3OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udWkudmlld3MuU2NlbmFyaW9zVmlldzsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnVpLnZpZXdzLlNpbXVsYXRpb25Db250cm9sVmlldzsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnVpLnZpZXdzLmdlb2dyYXBoaWMubWFwLk1hcFZpZXc7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuSUZvbGRlckxheW91dDsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5JUGFnZUxheW91dDsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5JUGVyc3BlY3RpdmVGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLm5hdmlnYXRvci5yZXNvdXJjZXMuUHJvamVjdEV4cGxvcmVyOworCisvKioKKyAqIFRoaXMgY2xhc3MgaW1wbGVtZW50cyB0aGUgIlNpbXVsYXRpb24iIHBlcnNwZWN0aXZlIG9mIFNURU0uIFRoaXMgUGVyc3BlY3RpdmUKKyAqIGlzIHVzZWQgdG8gY29udHJvbCBhbmQgdmlzdWFsaXplIHNpbXVsYXRpb25zLgorICovCitwdWJsaWMgY2xhc3MgU2ltdWxhdGlvbiBpbXBsZW1lbnRzIElQZXJzcGVjdGl2ZUZhY3RvcnkgeworCisJLyoqCisJICogVGhlIGlkZW50aWZpZXIgb2YgdGhlIFNpbXVsYXRpb24gUGVyc3BlY3RpdmUKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBJRF9TVEVNX1NJTVVMQVRJT05fUEVSU1BFQ1RJVkUgPSBDb25zdGFudHMuSURfUk9PVAorCQkJKyAiLnVpLlNURU1TaW11bGF0aW9uUGVyc3BlY3RpdmUiOyAvLyROT04tTkxTLTEkCisKKwkvKioKKwkgKiBDcmVhdGUgdGhlIGluaXRpYWwgbGF5b3V0LiBBZnRlciB0aGUgaW5pdGlhbCBpbnZvY2F0aW9uLCB0aGUgbGFzdCB3aW5kb3cKKwkgKiBzZXR1cCB3aWxsIGJlIHVzZWQgc28gdGhpcyBpcyBwcm9iYWJseSBhIG9uZSB0aW1lIHNldHVwIGJ1dCBpdCBpcworCSAqIGltcG9ydGFudCB0byBnZXQgdGhlIHVzZXIgc3RhcnRlZCBvbiB0aGUgcmlnaHQgZm9vdC4KKwkgKiAKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnVpLklQZXJzcGVjdGl2ZUZhY3RvcnkjY3JlYXRlSW5pdGlhbExheW91dChvcmcuZWNsaXBzZS51aS5JUGFnZUxheW91dCkKKwkgKi8KKwlwdWJsaWMgdm9pZCBjcmVhdGVJbml0aWFsTGF5b3V0KGZpbmFsIElQYWdlTGF5b3V0IGxheW91dCkgeworCQlmaW5hbCBTdHJpbmcgZWRpdG9yQXJlYSA9IGxheW91dC5nZXRFZGl0b3JBcmVhKCk7CisKKwkJLy8gUHV0IHRoZSBNYXAgYnkgaXRzZWxmIG9uIHRoZSB0b3AKKwkJbGF5b3V0LmFkZFN0YW5kYWxvbmVWaWV3KE1hcFZpZXcuSURfTUFQX1ZJRVcsIHRydWUsIElQYWdlTGF5b3V0LlJJR0hULAorCQkJCTAuMGYsIGVkaXRvckFyZWEpOworCisJCS8vIFB1dCB0aGUgU2ltdWxhdGlvbiBDb250cm9sIHZpZXcgYmVsb3cgdGhlIG1hcCBvbiB0aGUgbGVmdAorCQlmaW5hbCBJRm9sZGVyTGF5b3V0IGxlZnQgPSBsYXlvdXQuY3JlYXRlRm9sZGVyKAorCQkJCSJsZWZ0IiwgSVBhZ2VMYXlvdXQuQk9UVE9NLCAvLyROT04tTkxTLTEkCisJCQkJMC42MGYsIE1hcFZpZXcuSURfTUFQX1ZJRVcpOworCQlsZWZ0LmFkZFZpZXcoU2ltdWxhdGlvbkNvbnRyb2xWaWV3LklEX1NJTVVMQVRJT05fQ09OVFJPTF9WSUVXKTsKKwkJbGVmdC5hZGRWaWV3KFByb2plY3RFeHBsb3Jlci5WSUVXX0lEKTsKKwkJbGVmdC5hZGRWaWV3KFNjZW5hcmlvc1ZpZXcuSURfU0NFTkFSSU9TX1ZJRVcpOworCQkKKwkJLy8gUHV0IHRoZSBTY2VuYXJpbyBWaWV3IG9uIHRoZSBib3R0b20gcmlnaHQKKwkJLy8gYW5kIGFkZCBhbGwgdGhlIHNob3J0Y3V0cyB0aGVyZSBhbHNvLgorCQlmaW5hbCBJRm9sZGVyTGF5b3V0IGJvdHRvbSA9IGxheW91dC5jcmVhdGVGb2xkZXIoImJvdHRvbSIsIC8vJE5PTi1OTFMtMSQKKwkJCQlJUGFnZUxheW91dC5SSUdIVCwgMC4zMGYsICJsZWZ0Iik7CisKKwkJYm90dG9tLmFkZFZpZXcoU2NlbmFyaW9zVmlldy5JRF9TQ0VOQVJJT1NfVklFVyk7CisKKwkJLy8gQWRkIHRpbWUgc2VyaWVzIHZpZXcKKwkJYm90dG9tLmFkZFZpZXcoIm9yZy5lY2xpcHNlLnN0ZW0udWkudmlld3MucmVwb3J0cyIpOworCQkvLyBBZGQgcGhhc2UgcGxvdCB2aWV3CisJCWJvdHRvbS5hZGRWaWV3KCJvcmcuZWNsaXBzZS5zdGVtLnVpLnZpZXdzLnJlcG9ydHMucGhhc2VTcGFjZSIpOworCQkvLyBBZGQgQ1NWIGxvZ2dlciB2aWV3CisJCWJvdHRvbS5hZGRWaWV3KCJvcmcuZWNsaXBzZS5zdGVtLnVpLnZpZXdzLnJlcG9ydHMucGhhc2VTcGFjZSIpOworCQkvLyBhZGQgRXJyb3IgTG9nIHZpZXcKKwkJYm90dG9tLmFkZFZpZXcoIm9yZy5lY2xpcHNlLnN0ZW0udXRpbC5sb2dnZXJzIik7IC8vJE5PTi1OTFMtMSQKKworCQkvLyBBZGQgdGhlIFZpZXdzIHRvICJTaG93IFZpZXciIG1lbnUKKwkJbGF5b3V0CisJCQkJLmFkZFNob3dWaWV3U2hvcnRjdXQoU2ltdWxhdGlvbkNvbnRyb2xWaWV3LklEX1NJTVVMQVRJT05fQ09OVFJPTF9WSUVXKTsKKwkJbGF5b3V0LmFkZFNob3dWaWV3U2hvcnRjdXQoSVBhZ2VMYXlvdXQuSURfUFJPR1JFU1NfVklFVyk7CisJCWxheW91dC5hZGRTaG93Vmlld1Nob3J0Y3V0KFNjZW5hcmlvc1ZpZXcuSURfU0NFTkFSSU9TX1ZJRVcpOworCQlsYXlvdXQKKwkJCQkuYWRkU2hvd1ZpZXdTaG9ydGN1dChBY3RpdmVTaW11bGF0aW9uc1ZpZXcuSURfQUNUSVZFX1NJTVVMQVRJT05TX1ZJRVcpOworCQlsYXlvdXQuYWRkU2hvd1ZpZXdTaG9ydGN1dChBY3RpdmVCYXRjaGVzVmlldy5JRF9BQ1RJVkVfQkFUQ0hFU19WSUVXKTsKKwkJbGF5b3V0LmFkZFNob3dWaWV3U2hvcnRjdXQoTWFwVmlldy5JRF9NQVBfVklFVyk7CisKKwkJLy8gVE9ETyBmaXggaGFyZCBjb2RlZCBmb3IgR0VWaWV3LkdFX1ZJRVdfSUQKKwkJbGF5b3V0LmFkZFNob3dWaWV3U2hvcnRjdXQoIm9yZy5lY2xpcHNlLnN0ZW0udWkudmlld3MuZ2UiKTsKKwkJbGF5b3V0LmFkZFNob3dWaWV3U2hvcnRjdXQoIm9yZy5lY2xpcHNlLnN0ZW0udWkudmlld3MucmVwb3J0cyIpOworCQlsYXlvdXQKKwkJCQkuYWRkU2hvd1ZpZXdTaG9ydGN1dCgib3JnLmVjbGlwc2Uuc3RlbS51aS52aWV3cy5yZXBvcnRzLnBoYXNlU3BhY2UiKTsKKwkJLy8gV2UgZG9uJ3Qgd2FudCB0byBzZWUgdGhlIGVkaXRvcgorCQlsYXlvdXQuc2V0RWRpdG9yQXJlYVZpc2libGUoZmFsc2UpOworCisJCS8vIEFkZCB0aGUgU2ltdWxhdGlvbiBwZXJzcGVjdGl2ZSB0byB0aGUgIk9wZW4gUGVyc3BlY3RpdmUiIG1lbnUKKwkJbGF5b3V0LmFkZFBlcnNwZWN0aXZlU2hvcnRjdXQoSURfU1RFTV9TSU1VTEFUSU9OX1BFUlNQRUNUSVZFKTsKKworCX0gLy8gY3JlYXRlSW5pdGlhbExheW91dAorCit9IC8vIFNpbXVsYXRpb24KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9wcmVmZXJlbmNlcy9NYXBzQ29sb3JzUHJlZmVyZW5jZUluaXRpYWxpemVyLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvcHJlZmVyZW5jZXMvTWFwc0NvbG9yc1ByZWZlcmVuY2VJbml0aWFsaXplci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJhYzM4YzYKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvcHJlZmVyZW5jZXMvTWFwc0NvbG9yc1ByZWZlcmVuY2VJbml0aWFsaXplci5qYXZhCkBAIC0wLDAgKzEsNDkgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS51aS5wcmVmZXJlbmNlczsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUucHJlZmVyZW5jZXMuQWJzdHJhY3RQcmVmZXJlbmNlSW5pdGlhbGl6ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UucHJlZmVyZW5jZS5JUHJlZmVyZW5jZVN0b3JlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udWkuQWN0aXZhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udWkuYWRhcHRlcnMuY29sb3IuUmVsYXRpdmVWYWx1ZUNvbG9yUHJlZmVyZW5jZXM7CisKKy8qKgorICogQ2xhc3MgdXNlZCB0byBpbml0aWFsaXplIGRlZmF1bHQgcHJlZmVyZW5jZSB2YWx1ZXMuCisgKi8KK3B1YmxpYyBjbGFzcyBNYXBzQ29sb3JzUHJlZmVyZW5jZUluaXRpYWxpemVyIGV4dGVuZHMgQWJzdHJhY3RQcmVmZXJlbmNlSW5pdGlhbGl6ZXIgeworCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUucHJlZmVyZW5jZXMuQWJzdHJhY3RQcmVmZXJlbmNlSW5pdGlhbGl6ZXIjaW5pdGlhbGl6ZURlZmF1bHRQcmVmZXJlbmNlcygpCisJICovCisJcHVibGljIHZvaWQgaW5pdGlhbGl6ZURlZmF1bHRQcmVmZXJlbmNlcygpIHsKKwkJSVByZWZlcmVuY2VTdG9yZSBzdG9yZSA9IEFjdGl2YXRvci5nZXREZWZhdWx0KCkuZ2V0UHJlZmVyZW5jZVN0b3JlKCk7CisJCXN0b3JlLnNldERlZmF1bHQoTWFwc0NvbG9yc1ByZWZlcmVuY2VQYWdlLkZPUkVHUk9VTkRfQ09MT1JfSUQsIE1hcHNDb2xvcnNQcmVmZXJlbmNlUGFnZS5GT1JFR1JPVU5EX0NPTE9SX0RFRkFVTFRfUkdCX1NUUklORyk7CisJCXN0b3JlLnNldERlZmF1bHQoTWFwc0NvbG9yc1ByZWZlcmVuY2VQYWdlLkJBQ0tHUk9VTkRfQ09MT1JfSUQsIE1hcHNDb2xvcnNQcmVmZXJlbmNlUGFnZS5CQUNLR1JPVU5EX0NPTE9SX0RFRkFVTFRfUkdCX1NUUklORyk7CisJCXN0b3JlLnNldERlZmF1bHQoTWFwc0NvbG9yc1ByZWZlcmVuY2VQYWdlLkJPUkRFUlNfQ09MT1JfSUQsIE1hcHNDb2xvcnNQcmVmZXJlbmNlUGFnZS5CT1JERVJTX0NPTE9SX0RFRkFVTFRfUkdCX1NUUklORyk7CisJCXN0b3JlLnNldERlZmF1bHQoTWFwc0NvbG9yc1ByZWZlcmVuY2VQYWdlLkVER0VTX0NPTE9SX0lELCBNYXBzQ29sb3JzUHJlZmVyZW5jZVBhZ2UuRURHRVNfQ09MT1JfREVGQVVMVF9SR0JfU1RSSU5HKTsKKwkJCisJCS8vVGhpcyB0b28gc2hvdWxkIGJlIGRvbmUgYnkgdXNpbmcgdGhlIGV4dGVuc2lvbi1wb2ludHMgbWVjaGFuaXNtLiBUaGUgY29sb3IgcHJvdmlkZXJzIGFyZSB1bmtub3duLgorCQlzdG9yZS5zZXREZWZhdWx0KFJlbGF0aXZlVmFsdWVDb2xvclByZWZlcmVuY2VzLkZPUkVHUk9VTkRfQ09MT1JfWkVST19SRUxBVElWRV9WQUxVRV9JRCwgUmVsYXRpdmVWYWx1ZUNvbG9yUHJlZmVyZW5jZXMuRk9SRUdST1VORF9DT0xPUl9aRVJPX1JFTEFUSVZFX1ZBTFVFX0RFRkFVTFRfUkdCX1NUUklORyk7CisJCXN0b3JlLnNldERlZmF1bHQoUmVsYXRpdmVWYWx1ZUNvbG9yUHJlZmVyZW5jZXMuRk9SRUdST1VORF9DT0xPUl9SQU5HRV8xX0lELCBSZWxhdGl2ZVZhbHVlQ29sb3JQcmVmZXJlbmNlcy5GT1JFR1JPVU5EX0NPTE9SX1JBTkdFXzFfREVGQVVMVF9SR0JfU1RSSU5HKTsKKwkJc3RvcmUuc2V0RGVmYXVsdChSZWxhdGl2ZVZhbHVlQ29sb3JQcmVmZXJlbmNlcy5GT1JFR1JPVU5EX0NPTE9SX1JBTkdFXzJfSUQsIFJlbGF0aXZlVmFsdWVDb2xvclByZWZlcmVuY2VzLkZPUkVHUk9VTkRfQ09MT1JfUkFOR0VfMl9ERUZBVUxUX1JHQl9TVFJJTkcpOworCQlzdG9yZS5zZXREZWZhdWx0KFJlbGF0aXZlVmFsdWVDb2xvclByZWZlcmVuY2VzLkZPUkVHUk9VTkRfQ09MT1JfUkFOR0VfM19JRCwgUmVsYXRpdmVWYWx1ZUNvbG9yUHJlZmVyZW5jZXMuRk9SRUdST1VORF9DT0xPUl9SQU5HRV8zX0RFRkFVTFRfUkdCX1NUUklORyk7CisJCXN0b3JlLnNldERlZmF1bHQoUmVsYXRpdmVWYWx1ZUNvbG9yUHJlZmVyZW5jZXMuRk9SRUdST1VORF9DT0xPUl9SQU5HRV80X0lELCBSZWxhdGl2ZVZhbHVlQ29sb3JQcmVmZXJlbmNlcy5GT1JFR1JPVU5EX0NPTE9SX1JBTkdFXzRfREVGQVVMVF9SR0JfU1RSSU5HKTsKKwkJc3RvcmUuc2V0RGVmYXVsdChSZWxhdGl2ZVZhbHVlQ29sb3JQcmVmZXJlbmNlcy5GT1JFR1JPVU5EX0NPTE9SX1JBTkdFXzVfSUQsIFJlbGF0aXZlVmFsdWVDb2xvclByZWZlcmVuY2VzLkZPUkVHUk9VTkRfQ09MT1JfUkFOR0VfNV9ERUZBVUxUX1JHQl9TVFJJTkcpOworCQlzdG9yZS5zZXREZWZhdWx0KFJlbGF0aXZlVmFsdWVDb2xvclByZWZlcmVuY2VzLkZPUkVHUk9VTkRfQ09MT1JfUkFOR0VfNl9JRCwgUmVsYXRpdmVWYWx1ZUNvbG9yUHJlZmVyZW5jZXMuRk9SRUdST1VORF9DT0xPUl9SQU5HRV82X0RFRkFVTFRfUkdCX1NUUklORyk7CisJCXN0b3JlLnNldERlZmF1bHQoUmVsYXRpdmVWYWx1ZUNvbG9yUHJlZmVyZW5jZXMuRk9SRUdST1VORF9DT0xPUl9SQU5HRV83X0lELCBSZWxhdGl2ZVZhbHVlQ29sb3JQcmVmZXJlbmNlcy5GT1JFR1JPVU5EX0NPTE9SX1JBTkdFXzdfREVGQVVMVF9SR0JfU1RSSU5HKTsKKwkJc3RvcmUuc2V0RGVmYXVsdChSZWxhdGl2ZVZhbHVlQ29sb3JQcmVmZXJlbmNlcy5GT1JFR1JPVU5EX0NPTE9SX1JBTkdFXzhfSUQsIFJlbGF0aXZlVmFsdWVDb2xvclByZWZlcmVuY2VzLkZPUkVHUk9VTkRfQ09MT1JfUkFOR0VfOF9ERUZBVUxUX1JHQl9TVFJJTkcpOworCQlzdG9yZS5zZXREZWZhdWx0KFJlbGF0aXZlVmFsdWVDb2xvclByZWZlcmVuY2VzLkZPUkVHUk9VTkRfQ09MT1JfUkFOR0VfOV9JRCwgUmVsYXRpdmVWYWx1ZUNvbG9yUHJlZmVyZW5jZXMuRk9SRUdST1VORF9DT0xPUl9SQU5HRV85X0RFRkFVTFRfUkdCX1NUUklORyk7CisJCXN0b3JlLnNldERlZmF1bHQoUmVsYXRpdmVWYWx1ZUNvbG9yUHJlZmVyZW5jZXMuRk9SRUdST1VORF9DT0xPUl9SQU5HRV8xMF9JRCwgUmVsYXRpdmVWYWx1ZUNvbG9yUHJlZmVyZW5jZXMuRk9SRUdST1VORF9DT0xPUl9SQU5HRV8xMF9ERUZBVUxUX1JHQl9TVFJJTkcpOworCQlzdG9yZS5zZXREZWZhdWx0KFJlbGF0aXZlVmFsdWVDb2xvclByZWZlcmVuY2VzLkZPUkVHUk9VTkRfQ09MT1JfTUFYSU1VTV9SRUxBVElWRV9WQUxVRV9JRCwgUmVsYXRpdmVWYWx1ZUNvbG9yUHJlZmVyZW5jZXMuRk9SRUdST1VORF9DT0xPUl9NQVhJTVVNX1JFTEFUSVZFX1ZBTFVFX0RFRkFVTFRfUkdCX1NUUklORyk7CisJfSAvLyBpbml0aWFsaXplRGVmYXVsdFByZWZlcmVuY2VzCisKK30gLy8gUHJlZmVyZW5jZUluaXRpYWxpemVyCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvcHJlZmVyZW5jZXMvTWFwc0NvbG9yc1ByZWZlcmVuY2VQYWdlLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvcHJlZmVyZW5jZXMvTWFwc0NvbG9yc1ByZWZlcmVuY2VQYWdlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjA3NjBjMwotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9wcmVmZXJlbmNlcy9NYXBzQ29sb3JzUHJlZmVyZW5jZVBhZ2UuamF2YQpAQCAtMCwwICsxLDIxMiBAQAorLy8gTWFwc0NvbG9yc1ByZWZlcmVuY2VQYWdlLmphdmEKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS51aS5wcmVmZXJlbmNlczsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuY29uY3VycmVudC5Db3B5T25Xcml0ZUFycmF5TGlzdDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnByZWZlcmVuY2UuQ29sb3JGaWVsZEVkaXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5wcmVmZXJlbmNlLkZpZWxkRWRpdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnByZWZlcmVuY2UuRmllbGRFZGl0b3JQcmVmZXJlbmNlUGFnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5yZXNvdXJjZS5TdHJpbmdDb252ZXJ0ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudXRpbC5Qcm9wZXJ0eUNoYW5nZUV2ZW50OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udWkuQWN0aXZhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udWkuYWRhcHRlcnMuY29sb3IuSVByZWZlcmVuY2VzQ29udHJpYnV0ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS51aS5hZGFwdGVycy5jb2xvci5SZWxhdGl2ZVZhbHVlQ29sb3JQcmVmZXJlbmNlczsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGU7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaDsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5JV29ya2JlbmNoUHJlZmVyZW5jZVBhZ2U7CisKKy8qKgorICogVGhpcyBjbGFzcyBpcyBhIHByZWZlcmVuY2UgcGFnZSBmb3IgTWFwcyBDb2xvcnMuIEl0IGhvbGRzIGNvbW1vbiBtYXBzIGNvbG9ycworICogcHJlZmVyZW5jZXMgYW5kIGFuIGV4dGVuc2lvbiBwb2ludCB3aGVyZSBvdGhlciBwcmVmZXJlbmNlcyBjb250cmlidXRlcnMgKAorICoge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0udWkuYWRhcHRlcnMuY29sb3IuQ29sb3JQcm92aWRlcn1zKSBjYW4gYWRkIHRoZWlyIG93bgorICogcHJlZmVyZW5jZXMuCisgKi8KK3B1YmxpYyBjbGFzcyBNYXBzQ29sb3JzUHJlZmVyZW5jZVBhZ2UgZXh0ZW5kcyBGaWVsZEVkaXRvclByZWZlcmVuY2VQYWdlCisJCWltcGxlbWVudHMgSVdvcmtiZW5jaFByZWZlcmVuY2VQYWdlIHsKKworCS8qKgorCSAqIElEIGZvciB0aGUgdGhpcyBwcmVmZXJlbmNlIHBhZ2UKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBJRF9TVEVNX01BUFNfQ09MT1JTX1BBR0UgPSAib3JnLmVjbGlwc2Uuc3RlbS51aS5wcmVmZXJlbmNlcy5NYXBzQ29sb3JzUHJlZmVyZW5jZVBhZ2UiOworCS8qKgorCSAqIElEIGZvciB0aGUgZm9yZWdyb3VuZCBjb2xvciBmaWVsZAorCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEZPUkVHUk9VTkRfQ09MT1JfSUQgPSAib3JnLmVjbGlwc2Uuc3RlbS51aS52aWV3cy5nZW9ncmFwaGljLm1hcC5wcmVmZXJlbmNlcy5mb3JlZ3JvdW5kY29sb3IiOworCS8qKgorCSAqIElEIGZvciB0aGUgYmFja2dyb3VuZCBjb2xvciBmaWVsZAorCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEJBQ0tHUk9VTkRfQ09MT1JfSUQgPSAib3JnLmVjbGlwc2Uuc3RlbS51aS52aWV3cy5nZW9ncmFwaGljLm1hcC5wcmVmZXJlbmNlcy5iYWNrZ3JvdW5kY29sb3IiOworCS8qKgorCSAqIElEIGZvciB0aGUgYm9yZGVycyBjb2xvciBmaWVsZAorCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEJPUkRFUlNfQ09MT1JfSUQgPSAib3JnLmVjbGlwc2Uuc3RlbS51aS52aWV3cy5nZW9ncmFwaGljLm1hcC5wcmVmZXJlbmNlcy5ib3JkZXJzY29sb3IiOworCS8qKgorCSAqIElEIGZvciB0aGUgZWRnZXMgY29sb3IgZmllbGQKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBFREdFU19DT0xPUl9JRCA9ICJvcmcuZWNsaXBzZS5zdGVtLnVpLnZpZXdzLmdlb2dyYXBoaWMubWFwLnByZWZlcmVuY2VzLmVkZ2VzY29sb3IiOworCS8qKgorCSAqIERlZmF1bHQgZm9yZWdyb3VuZCBjb2xvcgorCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEZPUkVHUk9VTkRfQ09MT1JfREVGQVVMVF9SR0JfU1RSSU5HID0gIjI1NSwwLDAiOyAvLyBEZWZhdWx0CisJLy8gaXMKKwkvLyBSZWQKKwkvKioKKwkgKiBEZWZhdWx0IGJhY2tncm91bmQgY29sb3IKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBCQUNLR1JPVU5EX0NPTE9SX0RFRkFVTFRfUkdCX1NUUklORyA9ICIyNTUsMjU1LDI1NSI7IC8vIERlZmF1bHQKKwkvLyBERUZBVUxUIEJBQ0tHUk9VTkQgQ09MT1IgaXMKKwkvLyBXaGl0ZQorCS8qKgorCSAqIERlZmF1bHQgYm9yZGVycyBjb2xvcgorCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEJPUkRFUlNfQ09MT1JfREVGQVVMVF9SR0JfU1RSSU5HID0gIjAsODAsODAiOyAvLyBEZWZhdWx0CisJLy8gaXMKKwkvLyBEYXJrIGJsdWUgZ3JlZW4KKwkvKioKKwkgKiBEZWZhdWx0IGJvcmRlcnMgY29sb3IKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBFREdFU19DT0xPUl9ERUZBVUxUX1JHQl9TVFJJTkcgPSAiMjU1LDAsMjU1IjsgLy8gRGVmYXVsdAorCS8vIGlzCisJLy8gTWFnZW50YQorCS8qKgorCSAqIFRoZSBjb2xvciBmaWVsZCBlZGl0b3IgZm9yIHRoZSBiYWNrZ3JvdW5kIGNvbG9yCisJICovCisJcHJpdmF0ZSBzdGF0aWMgQ29sb3JGaWVsZEVkaXRvciBiYWNrZ3JvdW5kQ29sb3JGaWVsZEVkaXRvcjsKKwkvKioKKwkgKiBUaGUgY29sb3IgZmllbGQgZWRpdG9yIGZvciB0aGUgZm9yZWdyb3VuZCBjb2xvcgorCSAqLworCXByaXZhdGUgc3RhdGljIENvbG9yRmllbGRFZGl0b3IgZm9yZWdyb3VuZENvbG9yRmllbGRFZGl0b3I7CisJLyoqCisJICogVGhlIGNvbG9yIGZpZWxkIGVkaXRvciBmb3IgdGhlIGJvcmRlcnMgY29sb3IKKwkgKi8KKwlwcml2YXRlIHN0YXRpYyBDb2xvckZpZWxkRWRpdG9yIGJvcmRlcnNDb2xvckZpZWxkRWRpdG9yOworCS8qKgorCSAqIFRoZSBjb2xvciBmaWVsZCBlZGl0b3IgZm9yIHRoZSBlZGdlcyBjb2xvcgorCSAqLworCXByaXZhdGUgc3RhdGljIENvbG9yRmllbGRFZGl0b3IgZWRnZXNDb2xvckZpZWxkRWRpdG9yOworCS8qKgorCSAqIFRoZSBsaXN0IG9mIHtAbGluayBJUHJlZmVyZW5jZXNDb250cmlidXRlcn1zCisJICovCisJcHJpdmF0ZSBmaW5hbCBMaXN0PElQcmVmZXJlbmNlc0NvbnRyaWJ1dGVyPiBwcmVmZXJlbmNlc0V4dGVuZGVycyA9IG5ldyBDb3B5T25Xcml0ZUFycmF5TGlzdDxJUHJlZmVyZW5jZXNDb250cmlidXRlcj4oKTsKKworCS8qKgorCSAqIENvbnN0cnVjdG9yCisJICovCisJcHVibGljIE1hcHNDb2xvcnNQcmVmZXJlbmNlUGFnZSgpIHsKKwkJc3VwZXIoR1JJRCk7CisJCXNldFByZWZlcmVuY2VTdG9yZShBY3RpdmF0b3IuZ2V0RGVmYXVsdCgpLmdldFByZWZlcmVuY2VTdG9yZSgpKTsKKwkJc2V0RGVzY3JpcHRpb24oIkNob29zZSB0aGUgY29sb3JzIHRvIGJlIHVzZWQgZm9yIGRyYXdpbmcgbWFwcyIpOworCisJCS8vIFRPRE8gc3VwcG9ydCBleHRlbnNpb24tcG9pbnRzIG1lY2hhbmlzbQorCQlmaW5hbCBJUHJlZmVyZW5jZXNDb250cmlidXRlciBwcmVmZXJlbmNlc0V4dGVuZGVyID0gbmV3IFJlbGF0aXZlVmFsdWVDb2xvclByZWZlcmVuY2VzKCk7CisJCXByZWZlcmVuY2VzRXh0ZW5kZXIuc2V0UHJlZmVyZW5jZVBhZ2UodGhpcyk7CisKKwkJcHJlZmVyZW5jZXNFeHRlbmRlcnMuYWRkKHByZWZlcmVuY2VzRXh0ZW5kZXIpOworCX0gLy8gTWFwc0NvbG9yc1ByZWZlcmVuY2VQYWdlCisKKwkvKgorCSAqIChub24tSmF2YWRvYykKKwkgKgorCSAqIEBzZWUgb3JnLmVjbGlwc2UuamZhY2UucHJlZmVyZW5jZS5GaWVsZEVkaXRvclByZWZlcmVuY2VQYWdlI2NyZWF0ZUZpZWxkRWRpdG9ycygpCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgY3JlYXRlRmllbGRFZGl0b3JzKCkgeworCQliYWNrZ3JvdW5kQ29sb3JGaWVsZEVkaXRvciA9IG5ldyBDb2xvckZpZWxkRWRpdG9yKEJBQ0tHUk9VTkRfQ09MT1JfSUQsCisJCQkJIkJhY2tncm91bmQgQ29sb3IiLCBnZXRGaWVsZEVkaXRvclBhcmVudCgpKTsKKwkJZm9yZWdyb3VuZENvbG9yRmllbGRFZGl0b3IgPSBuZXcgQ29sb3JGaWVsZEVkaXRvcihGT1JFR1JPVU5EX0NPTE9SX0lELAorCQkJCSJGb3JlZ3JvdW5kIENvbG9yIiwgZ2V0RmllbGRFZGl0b3JQYXJlbnQoKSk7CisJCWJvcmRlcnNDb2xvckZpZWxkRWRpdG9yID0gbmV3IENvbG9yRmllbGRFZGl0b3IoQk9SREVSU19DT0xPUl9JRCwKKwkJCQkiQm9yZGVycyBDb2xvciIsIGdldEZpZWxkRWRpdG9yUGFyZW50KCkpOworCQllZGdlc0NvbG9yRmllbGRFZGl0b3IgPSBuZXcgQ29sb3JGaWVsZEVkaXRvcihFREdFU19DT0xPUl9JRCwKKwkJCQkiRWRnZXMgQ29sb3IiLCBnZXRGaWVsZEVkaXRvclBhcmVudCgpKTsKKworCQlhZGRGaWVsZChiYWNrZ3JvdW5kQ29sb3JGaWVsZEVkaXRvcik7CisJCWFkZEZpZWxkKGZvcmVncm91bmRDb2xvckZpZWxkRWRpdG9yKTsKKwkJYWRkRmllbGQoYm9yZGVyc0NvbG9yRmllbGRFZGl0b3IpOworCQlhZGRGaWVsZChlZGdlc0NvbG9yRmllbGRFZGl0b3IpOworCisJCWZvciAoZmluYWwgSVByZWZlcmVuY2VzQ29udHJpYnV0ZXIgcHJlZmVyZW5jZXNFeHRlbmRlciA6IHByZWZlcmVuY2VzRXh0ZW5kZXJzKSB7CisJCQlwcmVmZXJlbmNlc0V4dGVuZGVyLmNyZWF0ZUZpZWxkRWRpdG9ycygpOworCQl9CisJfSAvLyBjcmVhdGVGaWVsZEVkaXRvcnMKKworCS8qCisJICogKG5vbi1KYXZhZG9jKQorCSAqCisJICogQHNlZSBvcmcuZWNsaXBzZS5qZmFjZS5wcmVmZXJlbmNlLkZpZWxkRWRpdG9yUHJlZmVyZW5jZVBhZ2UjaW5pdGlhbGl6ZSgpCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgaW5pdGlhbGl6ZSgpIHsKKwkJZm9yIChmaW5hbCBJUHJlZmVyZW5jZXNDb250cmlidXRlciBwcmVmZXJlbmNlc0V4dGVuZGVyIDogcHJlZmVyZW5jZXNFeHRlbmRlcnMpIHsKKwkJCXByZWZlcmVuY2VzRXh0ZW5kZXIuaW5pdGlhbGl6ZSgpOworCQl9CisJCXN1cGVyLmluaXRpYWxpemUoKTsKKwl9IC8vIGluaXRpYWxpemUKKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2UuamZhY2UucHJlZmVyZW5jZS5GaWVsZEVkaXRvclByZWZlcmVuY2VQYWdlI3Byb3BlcnR5Q2hhbmdlKG9yZy5lY2xpcHNlLmpmYWNlLnV0aWwuUHJvcGVydHlDaGFuZ2VFdmVudCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBwcm9wZXJ0eUNoYW5nZShmaW5hbCBQcm9wZXJ0eUNoYW5nZUV2ZW50IGV2ZW50KSB7CisJCWZvciAoZmluYWwgSVByZWZlcmVuY2VzQ29udHJpYnV0ZXIgcHJlZmVyZW5jZXNFeHRlbmRlciA6IHByZWZlcmVuY2VzRXh0ZW5kZXJzKSB7CisJCQlwcmVmZXJlbmNlc0V4dGVuZGVyLnByb3BlcnR5Q2hhbmdlKGV2ZW50KTsKKwkJfQorCQlzdXBlci5wcm9wZXJ0eUNoYW5nZShldmVudCk7CisJfSAvLyBwcm9wZXJ0eUNoYW5nZQorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5qZmFjZS5wcmVmZXJlbmNlLkZpZWxkRWRpdG9yUHJlZmVyZW5jZVBhZ2UjcGVyZm9ybURlZmF1bHRzKCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgdm9pZCBwZXJmb3JtRGVmYXVsdHMoKSB7CisJCWZvcmVncm91bmRDb2xvckZpZWxkRWRpdG9yLmdldENvbG9yU2VsZWN0b3IoKS5zZXRDb2xvclZhbHVlKAorCQkJCVN0cmluZ0NvbnZlcnRlci5hc1JHQihGT1JFR1JPVU5EX0NPTE9SX0RFRkFVTFRfUkdCX1NUUklORykpOworCQliYWNrZ3JvdW5kQ29sb3JGaWVsZEVkaXRvci5nZXRDb2xvclNlbGVjdG9yKCkuc2V0Q29sb3JWYWx1ZSgKKwkJCQlTdHJpbmdDb252ZXJ0ZXIuYXNSR0IoQkFDS0dST1VORF9DT0xPUl9ERUZBVUxUX1JHQl9TVFJJTkcpKTsKKwkJYm9yZGVyc0NvbG9yRmllbGRFZGl0b3IuZ2V0Q29sb3JTZWxlY3RvcigpLnNldENvbG9yVmFsdWUoCisJCQkJU3RyaW5nQ29udmVydGVyLmFzUkdCKEJPUkRFUlNfQ09MT1JfREVGQVVMVF9SR0JfU1RSSU5HKSk7CisJCWVkZ2VzQ29sb3JGaWVsZEVkaXRvci5nZXRDb2xvclNlbGVjdG9yKCkuc2V0Q29sb3JWYWx1ZSgKKwkJCQlTdHJpbmdDb252ZXJ0ZXIuYXNSR0IoRURHRVNfQ09MT1JfREVGQVVMVF9SR0JfU1RSSU5HKSk7CisKKwkJZm9yIChmaW5hbCBJUHJlZmVyZW5jZXNDb250cmlidXRlciBwcmVmZXJlbmNlc0V4dGVuZGVyIDogcHJlZmVyZW5jZXNFeHRlbmRlcnMpIHsKKwkJCXByZWZlcmVuY2VzRXh0ZW5kZXIucGVyZm9ybURlZmF1bHRzKCk7CisJCX0KKwl9IC8vIHBlcmZvcm1EZWZhdWx0cworCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS51aS5JV29ya2JlbmNoUHJlZmVyZW5jZVBhZ2UjaW5pdChvcmcuZWNsaXBzZS51aS5JV29ya2JlbmNoKQorCSAqLworCXB1YmxpYyB2b2lkIGluaXQoQFN1cHByZXNzV2FybmluZ3MoInVudXNlZCIpCisJZmluYWwgSVdvcmtiZW5jaCBhcmcwKSB7CisJCS8vIERvIG5vdGhpbmcKKwl9IC8vIGluaXQKKworCS8qKgorCSAqIFRoaXMgbWFrZXMgYWRkRmllbGQgcHVibGljCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgYWRkRmllbGQoZmluYWwgRmllbGRFZGl0b3IgZWRpdG9yKSB7CisJCXN1cGVyLmFkZEZpZWxkKGVkaXRvcik7CisJfSAvLyBhZGRGaWVsZAorCisJLyoqCisJICogVGhpcyBtYWtlcyBnZXRGaWVsZEVkaXRvclBhcmVudCBwdWJsaWMKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgQ29tcG9zaXRlIGdldEZpZWxkRWRpdG9yUGFyZW50KCkgeworCQlyZXR1cm4gc3VwZXIuZ2V0RmllbGRFZGl0b3JQYXJlbnQoKTsKKwl9IC8vIGdldEZpZWxkRWRpdG9yUGFyZW50CisKK30gLy8gTWFwc0NvbG9yc1ByZWZlcmVuY2VQYWdlCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvcHJlZmVyZW5jZXMvTWVzc2FnZXMuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9wcmVmZXJlbmNlcy9NZXNzYWdlcy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMzOGViNDcKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvcHJlZmVyZW5jZXMvTWVzc2FnZXMuamF2YQpAQCAtMCwwICsxLDQyIEBACisvLyBNZXNzYWdlcy5qYXZhCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0udWkucHJlZmVyZW5jZXM7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgamF2YS51dGlsLk1pc3NpbmdSZXNvdXJjZUV4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLnV0aWwuUmVzb3VyY2VCdW5kbGU7CisKKy8qKgorICogVGhpcyBjbGFzcyByZXRyaWV2ZXMgbWVzc2FnZXMgZm9yIFNURU0gcHJlZmVyZW5jZXMuCisgKi8KK3B1YmxpYyBjbGFzcyBNZXNzYWdlcyB7CisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEJVTkRMRV9OQU1FID0gIm9yZy5lY2xpcHNlLnN0ZW0udWkucHJlZmVyZW5jZXMubWVzc2FnZXMiOyAvLyROT04tTkxTLTEkCisKKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBSZXNvdXJjZUJ1bmRsZSBSRVNPVVJDRV9CVU5ETEUgPSBSZXNvdXJjZUJ1bmRsZQorCQkJLmdldEJ1bmRsZShCVU5ETEVfTkFNRSk7CisKKwlwcml2YXRlIE1lc3NhZ2VzKCkgeworCQkvLyBOb3RoaW5nCisJfQorCisJLyoqCisJICogQHBhcmFtIGtleQorCSAqIEByZXR1cm4gdGhlIHN0cmluZyBtYXRjaGluZyB0aGUga2V5CisJICovCisJcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0U3RyaW5nKFN0cmluZyBrZXkpIHsKKwkJdHJ5IHsKKwkJCXJldHVybiBSRVNPVVJDRV9CVU5ETEUuZ2V0U3RyaW5nKGtleSk7CisJCX0gY2F0Y2ggKE1pc3NpbmdSZXNvdXJjZUV4Y2VwdGlvbiBlKSB7CisJCQlyZXR1cm4gJyEnICsga2V5ICsgJyEnOworCQl9CisJfQorfSAvLyBNZXNzYWdlcwpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3ByZWZlcmVuY2VzL1ByZWZlcmVuY2VDb25zdGFudHMuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9wcmVmZXJlbmNlcy9QcmVmZXJlbmNlQ29uc3RhbnRzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDRiNDM5OAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9wcmVmZXJlbmNlcy9QcmVmZXJlbmNlQ29uc3RhbnRzLmphdmEKQEAgLTAsMCArMSwxMzkgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS51aS5wcmVmZXJlbmNlczsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKgorICogQ29uc3RhbnQgZGVmaW5pdGlvbnMgZm9yIHBsdWctaW4gcHJlZmVyZW5jZXMKKyAqLworcHVibGljIGNsYXNzIFByZWZlcmVuY2VDb25zdGFudHMgeworCisJLyoqCisJICogVGhlIHByZWZlcmVuY2UgaWQgZm9yIHRoZSBuYW1lIG9mIHRoZSBhdHRyaWJ1dGUgdG8gZGlzcGxheSB3aGVuIGEKKwkgKiB2aXN1YWxpemF0aW9uIGlzIGZpcnN0IGRpc3BsYXllZC4gVXNlZCBmb3IgRGF0YSBEaXNwbGF5IFkgYXhpcy4KKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBJTklUSUFMX0FUVFJJQlVURV9OQU1FX1NUUklOR19QUkVGRVJFTkNFID0gIm9yZy5lY2xpcHNlLnN0ZW0udWkuaW5pdGlhbGF0dHJpYnV0ZW5hbWUiOworCisKKwkvKioKKwkgKiBUaGUgcHJlZmVyZW5jZSBpZCBmb3IgdGhlIG5hbWUgb2YgdGhlIGF0dHJpYnV0ZSB0byBkaXNwbGF5IHdoZW4gYQorCSAqIHZpc3VhbGl6YXRpb24gaXMgZmlyc3QgZGlzcGxheWVkLiBVc2VkIGZvciBQaGFzZSBTcGFjZSBEaXNwbGF5IFggYXhpcy4KKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBJTklUSUFMX0FUVFJJQlVURV9OQU1FX1NUUklOR19QUkVGRVJFTkNFMiA9ICJvcmcuZWNsaXBzZS5zdGVtLnVpLmluaXRpYWxhdHRyaWJ1dGVuYW1lMiI7CisKKwkKKwkvKioKKwkgKiBUaGUgcHJlZmVyZW5jZSBpZCBmb3IgZGlmZmVyZW50IGZvcmVncm91bmQgY29sb3JzIGZvciB2YXJpb3VzIGxhYmVscy4gSWYKKwkgKiBhIGxhYmVsIGlzIG5vdCBvbiB0aGUgbGlzdCwgZm9yZWdyb3VuZCBjb2xvciB1c2VzIHRoZSBkZWZhdWx0LgorCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEZPUkVHUk9VTkRfQ09MT1JfREVGQVVMVCA9ICJvcmcuZWNsaXBzZS5zdGVtLnVpLnZpZXdzLmdlb2dyYXBoaWMubWFwLnByZWZlcmVuY2VzLmZvcmVncm91bmRkZWZhdWx0Y29sb3IiOworCS8qKgorCSAqIFRoZSBwcmVmZXJlbmNlIElEIGZvciBhIGZpcnN0IHVzZXIgc2VsZWN0YWJsZSBjb2xvciB0aGF0IGNhbiBiZSBjaG9zZW4gYW5kIGFzc2lnbmVkIHRvIGEgcHJvcGVydHkgKGUuZy4sIFMpIGJlaW5nIHZpc3VhbGl6ZWQgKGVnIGluIGEgdGltZSBzZXJpZXMgcGxvdCkKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBGT1JFR1JPVU5EX0NPTE9SX0xBQkVMXzEgPSAib3JnLmVjbGlwc2Uuc3RlbS51aS52aWV3cy5nZW9ncmFwaGljLm1hcC5wcmVmZXJlbmNlcy5mb3JlZ3JvdW5kY29sb3JvbmUiOworCS8qKgorCSAqICBUaGUgcHJlZmVyZW5jZSBJRCBmb3IgYSBzZWNvbmQgdXNlciBzZWxlY3RhYmxlIGNvbG9yIHRoYXQgY2FuIGJlIGNob3NlbiBhbmQgYXNzaWduZWQgdG8gYSBwcm9wZXJ0eSAoZS5nLiwgRSkgYmVpbmcgdmlzdWFsaXplZCAoZWcgaW4gYSB0aW1lIHNlcmllcyBwbG90KQorCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEZPUkVHUk9VTkRfQ09MT1JfTEFCRUxfMiA9ICJvcmcuZWNsaXBzZS5zdGVtLnVpLnZpZXdzLmdlb2dyYXBoaWMubWFwLnByZWZlcmVuY2VzLmZvcmVncm91bmRjb2xvcnR3byI7CisJLyoqCisJICogIFRoZSBwcmVmZXJlbmNlIElEIGZvciBhIHRoaXJkIHVzZXIgc2VsZWN0YWJsZSBjb2xvciB0aGF0IGNhbiBiZSBjaG9zZW4gYW5kIGFzc2lnbmVkIHRvIGEgcHJvcGVydHkgKGUuZy4sIEkpIGJlaW5nIHZpc3VhbGl6ZWQgKGVnIGluIGEgdGltZSBzZXJpZXMgcGxvdCkKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBGT1JFR1JPVU5EX0NPTE9SX0xBQkVMXzMgPSAib3JnLmVjbGlwc2Uuc3RlbS51aS52aWV3cy5nZW9ncmFwaGljLm1hcC5wcmVmZXJlbmNlcy5mb3JlZ3JvdW5kY29sb3J0aGVlIjsKKwkvKioKKwkgKiAgVGhlIHByZWZlcmVuY2UgSUQgZm9yIGEgZm91cnRoIHVzZXIgc2VsZWN0YWJsZSBjb2xvciB0aGF0IGNhbiBiZSBjaG9zZW4gYW5kIGFzc2lnbmVkIHRvIGEgcHJvcGVydHkgKGUuZy4sIFIpIGJlaW5nIHZpc3VhbGl6ZWQgKGVnIGluIGEgdGltZSBzZXJpZXMgcGxvdCkKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBGT1JFR1JPVU5EX0NPTE9SX0xBQkVMXzQgPSAib3JnLmVjbGlwc2Uuc3RlbS51aS52aWV3cy5nZW9ncmFwaGljLm1hcC5wcmVmZXJlbmNlcy5mb3JlZ3JvdW5kY29sb3Jmb3VyIjsKKwkvKioKKwkgKiAgVGhlIHByZWZlcmVuY2UgSUQgZm9yIGEgZmlmdGggdXNlciBzZWxlY3RhYmxlIGNvbG9yIHRoYXQgY2FuIGJlIGNob3NlbiBhbmQgYXNzaWduZWQgdG8gYSBwcm9wZXJ0eSAoZS5nLiwgUCkgYmVpbmcgdmlzdWFsaXplZCAoZWcgaW4gYSB0aW1lIHNlcmllcyBwbG90KQorCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEZPUkVHUk9VTkRfQ09MT1JfTEFCRUxfNSA9ICJvcmcuZWNsaXBzZS5zdGVtLnVpLnZpZXdzLmdlb2dyYXBoaWMubWFwLnByZWZlcmVuY2VzLmZvcmVncm91bmRjb2xvcmZpdmUiOworCS8qKgorCSAqICBUaGUgcHJlZmVyZW5jZSBJRCBmb3IgYSBzaXh0aCB1c2VyIHNlbGVjdGFibGUgY29sb3IgdGhhdCBjYW4gYmUgY2hvc2VuIGFuZCBhc3NpZ25lZCB0byBhIHByb3BlcnR5IChlLmcuLCBJUikgYmVpbmcgdmlzdWFsaXplZCAoZWcgaW4gYSB0aW1lIHNlcmllcyBwbG90KQorCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEZPUkVHUk9VTkRfQ09MT1JfTEFCRUxfNiA9ICJvcmcuZWNsaXBzZS5zdGVtLnVpLnZpZXdzLmdlb2dyYXBoaWMubWFwLnByZWZlcmVuY2VzLmZvcmVncm91bmRjb2xvcnNpeCI7CisJLyoqCisJICogIFRoZSBwcmVmZXJlbmNlIElEIGZvciBhIHNldmVudGggdXNlciBzZWxlY3RhYmxlIGNvbG9yIHRoYXQgY2FuIGJlIGNob3NlbiBhbmQgYXNzaWduZWQgdG8gYSBwcm9wZXJ0eSAoZS5nLiwgKSBiZWluZyB2aXN1YWxpemVkIChlZyBpbiBhIHRpbWUgc2VyaWVzIHBsb3QpCisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgRk9SRUdST1VORF9DT0xPUl9MQUJFTF83ID0gIm9yZy5lY2xpcHNlLnN0ZW0udWkudmlld3MuZ2VvZ3JhcGhpYy5tYXAucHJlZmVyZW5jZXMuZm9yZWdyb3VuZGNvbG9yc2V2ZW4iOworCQorCS8qKgorCSAqICBUaGUgcHJlZmVyZW5jZSBJRCBmb3IgYSBzZXZlbnRoIHVzZXIgc2VsZWN0YWJsZSBjb2xvciB0aGF0IGNhbiBiZSBjaG9zZW4gYW5kIGFzc2lnbmVkIHRvIGEgcHJvcGVydHkgKGUuZy4sICkgYmVpbmcgdmlzdWFsaXplZCAoZWcgaW4gYSB0aW1lIHNlcmllcyBwbG90KQorCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEZPUkVHUk9VTkRfQ09MT1JfTEFCRUxfOCA9ICJvcmcuZWNsaXBzZS5zdGVtLnVpLnZpZXdzLmdlb2dyYXBoaWMubWFwLnByZWZlcmVuY2VzLmZvcmVncm91bmRjb2xvcmVpZ2h0IjsKKwkvKioKKwkgKiAgVGhlIHByZWZlcmVuY2UgSUQgZm9yIGEgc2V2ZW50aCB1c2VyIHNlbGVjdGFibGUgY29sb3IgdGhhdCBjYW4gYmUgY2hvc2VuIGFuZCBhc3NpZ25lZCB0byBhIHByb3BlcnR5IChlLmcuLCApIGJlaW5nIHZpc3VhbGl6ZWQgKGVnIGluIGEgdGltZSBzZXJpZXMgcGxvdCkKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBGT1JFR1JPVU5EX0NPTE9SX0xBQkVMXzkgPSAib3JnLmVjbGlwc2Uuc3RlbS51aS52aWV3cy5nZW9ncmFwaGljLm1hcC5wcmVmZXJlbmNlcy5mb3JlZ3JvdW5kY29sb3JuaW5lIjsKKwkvKioKKwkgKiAgVGhlIHByZWZlcmVuY2UgSUQgZm9yIGEgc2V2ZW50aCB1c2VyIHNlbGVjdGFibGUgY29sb3IgdGhhdCBjYW4gYmUgY2hvc2VuIGFuZCBhc3NpZ25lZCB0byBhIHByb3BlcnR5IChlLmcuLCApIGJlaW5nIHZpc3VhbGl6ZWQgKGVnIGluIGEgdGltZSBzZXJpZXMgcGxvdCkKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBGT1JFR1JPVU5EX0NPTE9SX0xBQkVMXzEwID0gIm9yZy5lY2xpcHNlLnN0ZW0udWkudmlld3MuZ2VvZ3JhcGhpYy5tYXAucHJlZmVyZW5jZXMuZm9yZWdyb3VuZGNvbG9ydGVuIjsKKworCQorCS8qKgorCSAqIFRoZSBwcmVmZXJlbmNlIGlkIGZvciBkaWZmZXJlbnQgc3RyaW5ncyByZXByZXNlbnRpbmcgdmFyaW91cyBsYWJlbHMuIElmIGEKKwkgKiBsYWJlbCBpcyBub3Qgb24gdGhlIGxpc3QsIGZvcmVncm91bmQgY29sb3IgdXNlcyB0aGUgZGVmYXVsdC4KKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBGT1JFR1JPVU5EX1NUUklOR19MQUJFTF9ERUZBVUxUID0gIm9yZy5lY2xpcHNlLnN0ZW0udWkudmlld3MuZ2VvZ3JhcGhpYy5tYXAucHJlZmVyZW5jZXMuZm9yZWdyb3VuZGRlZmF1bHRzdHJpbmciOworCS8qKgorCSAqIEEgU3RyaW5nIGxhYmVsIHRoYXQgZGVmaW5lcyB0aGUgdXNlciBzZWxlY3RhYmxlIHByb3BlcnR5IHRvIHdoaWNoIGEgdXNlciBzZWxlY3RhYmxlIGNvbG9yIGNhbiBiZSBhc3NpZ25lZCAoZS5nLiwgd2hlbiB2aXN1YWxpemluZyB0aGUgcHJvcGVydHkgaW4gYSBwbG90KQorCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEZPUkVHUk9VTkRfU1RSSU5HX0xBQkVMXzEgPSAib3JnLmVjbGlwc2Uuc3RlbS51aS52aWV3cy5nZW9ncmFwaGljLm1hcC5wcmVmZXJlbmNlcy5mb3JlZ3JvdW5kc3RyaW5nb25lIjsKKwkvKioKKwkgKiBBIFN0cmluZyBsYWJlbCB0aGF0IGRlZmluZXMgdGhlIHVzZXIgc2VsZWN0YWJsZSBwcm9wZXJ0eSB0byB3aGljaCBhIHVzZXIgc2VsZWN0YWJsZSBjb2xvciBjYW4gYmUgYXNzaWduZWQgKGUuZy4sIHdoZW4gdmlzdWFsaXppbmcgdGhlIHByb3BlcnR5IGluIGEgcGxvdCkKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBGT1JFR1JPVU5EX1NUUklOR19MQUJFTF8yID0gIm9yZy5lY2xpcHNlLnN0ZW0udWkudmlld3MuZ2VvZ3JhcGhpYy5tYXAucHJlZmVyZW5jZXMuZm9yZWdyb3VuZHN0cmluZ3R3byI7CisJLyoqCisJICogQSBTdHJpbmcgbGFiZWwgdGhhdCBkZWZpbmVzIHRoZSB1c2VyIHNlbGVjdGFibGUgcHJvcGVydHkgdG8gd2hpY2ggYSB1c2VyIHNlbGVjdGFibGUgY29sb3IgY2FuIGJlIGFzc2lnbmVkIChlLmcuLCB3aGVuIHZpc3VhbGl6aW5nIHRoZSBwcm9wZXJ0eSBpbiBhIHBsb3QpCisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgRk9SRUdST1VORF9TVFJJTkdfTEFCRUxfMyA9ICJvcmcuZWNsaXBzZS5zdGVtLnVpLnZpZXdzLmdlb2dyYXBoaWMubWFwLnByZWZlcmVuY2VzLmZvcmVncm91bmRzdHJpbmd0aGVlIjsKKwkvKioKKwkgKiBBIFN0cmluZyBsYWJlbCB0aGF0IGRlZmluZXMgdGhlIHVzZXIgc2VsZWN0YWJsZSBwcm9wZXJ0eSB0byB3aGljaCBhIHVzZXIgc2VsZWN0YWJsZSBjb2xvciBjYW4gYmUgYXNzaWduZWQgKGUuZy4sIHdoZW4gdmlzdWFsaXppbmcgdGhlIHByb3BlcnR5IGluIGEgcGxvdCkKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBGT1JFR1JPVU5EX1NUUklOR19MQUJFTF80ID0gIm9yZy5lY2xpcHNlLnN0ZW0udWkudmlld3MuZ2VvZ3JhcGhpYy5tYXAucHJlZmVyZW5jZXMuZm9yZWdyb3VuZHN0cmluZ2ZvdXIiOworCS8qKgorCSAqIEEgU3RyaW5nIGxhYmVsIHRoYXQgZGVmaW5lcyB0aGUgdXNlciBzZWxlY3RhYmxlIHByb3BlcnR5IHRvIHdoaWNoIGEgdXNlciBzZWxlY3RhYmxlIGNvbG9yIGNhbiBiZSBhc3NpZ25lZCAoZS5nLiwgd2hlbiB2aXN1YWxpemluZyB0aGUgcHJvcGVydHkgaW4gYSBwbG90KQorCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEZPUkVHUk9VTkRfU1RSSU5HX0xBQkVMXzUgPSAib3JnLmVjbGlwc2Uuc3RlbS51aS52aWV3cy5nZW9ncmFwaGljLm1hcC5wcmVmZXJlbmNlcy5mb3JlZ3JvdW5kc3RyaW5nZml2ZSI7CisJLyoqCisJICogQSBTdHJpbmcgbGFiZWwgdGhhdCBkZWZpbmVzIHRoZSB1c2VyIHNlbGVjdGFibGUgcHJvcGVydHkgdG8gd2hpY2ggYSB1c2VyIHNlbGVjdGFibGUgY29sb3IgY2FuIGJlIGFzc2lnbmVkIChlLmcuLCB3aGVuIHZpc3VhbGl6aW5nIHRoZSBwcm9wZXJ0eSBpbiBhIHBsb3QpCisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgRk9SRUdST1VORF9TVFJJTkdfTEFCRUxfNiA9ICJvcmcuZWNsaXBzZS5zdGVtLnVpLnZpZXdzLmdlb2dyYXBoaWMubWFwLnByZWZlcmVuY2VzLmZvcmVncm91bmRzdHJpbmdzaXgiOworCS8qKgorCSAqIEEgU3RyaW5nIGxhYmVsIHRoYXQgZGVmaW5lcyB0aGUgdXNlciBzZWxlY3RhYmxlIHByb3BlcnR5IHRvIHdoaWNoIGEgdXNlciBzZWxlY3RhYmxlIGNvbG9yIGNhbiBiZSBhc3NpZ25lZCAoZS5nLiwgd2hlbiB2aXN1YWxpemluZyB0aGUgcHJvcGVydHkgaW4gYSBwbG90KQorCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEZPUkVHUk9VTkRfU1RSSU5HX0xBQkVMXzcgPSAib3JnLmVjbGlwc2Uuc3RlbS51aS52aWV3cy5nZW9ncmFwaGljLm1hcC5wcmVmZXJlbmNlcy5mb3JlZ3JvdW5kc3RyaW5nc2V2ZW4iOworCQorCS8qKgorCSAqIEEgU3RyaW5nIGxhYmVsIHRoYXQgZGVmaW5lcyB0aGUgdXNlciBzZWxlY3RhYmxlIHByb3BlcnR5IHRvIHdoaWNoIGEgdXNlciBzZWxlY3RhYmxlIGNvbG9yIGNhbiBiZSBhc3NpZ25lZCAoZS5nLiwgd2hlbiB2aXN1YWxpemluZyB0aGUgcHJvcGVydHkgaW4gYSBwbG90KQorCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEZPUkVHUk9VTkRfU1RSSU5HX0xBQkVMXzggPSAib3JnLmVjbGlwc2Uuc3RlbS51aS52aWV3cy5nZW9ncmFwaGljLm1hcC5wcmVmZXJlbmNlcy5mb3JlZ3JvdW5kc3RyaW5nZWlnaHQiOworCS8qKgorCSAqIEEgU3RyaW5nIGxhYmVsIHRoYXQgZGVmaW5lcyB0aGUgdXNlciBzZWxlY3RhYmxlIHByb3BlcnR5IHRvIHdoaWNoIGEgdXNlciBzZWxlY3RhYmxlIGNvbG9yIGNhbiBiZSBhc3NpZ25lZCAoZS5nLiwgd2hlbiB2aXN1YWxpemluZyB0aGUgcHJvcGVydHkgaW4gYSBwbG90KQorCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEZPUkVHUk9VTkRfU1RSSU5HX0xBQkVMXzkgPSAib3JnLmVjbGlwc2Uuc3RlbS51aS52aWV3cy5nZW9ncmFwaGljLm1hcC5wcmVmZXJlbmNlcy5mb3JlZ3JvdW5kc3RyaW5nbmluZSI7CisJLyoqCisJICogQSBTdHJpbmcgbGFiZWwgdGhhdCBkZWZpbmVzIHRoZSB1c2VyIHNlbGVjdGFibGUgcHJvcGVydHkgdG8gd2hpY2ggYSB1c2VyIHNlbGVjdGFibGUgY29sb3IgY2FuIGJlIGFzc2lnbmVkIChlLmcuLCB3aGVuIHZpc3VhbGl6aW5nIHRoZSBwcm9wZXJ0eSBpbiBhIHBsb3QpCisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgRk9SRUdST1VORF9TVFJJTkdfTEFCRUxfMTAgPSAib3JnLmVjbGlwc2Uuc3RlbS51aS52aWV3cy5nZW9ncmFwaGljLm1hcC5wcmVmZXJlbmNlcy5mb3JlZ3JvdW5kc3RyaW5ndGVuIjsKKworCS8qKgorCSAqIFRoaXMgaXMgdGhlIHByZWZlcmVuY2UgZm9yIGhvdyBtYW55IHRocmVhZHMgdG8gdXNlIHdoZW4gcnVubmluZworCSAqIGEgc2ltdWxhdGlvbgorCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFNJTVVMQVRJT05fVEhSRUFEUyA9ICJzaW11bGF0aW9uVGhyZWFkcyI7IC8vJE5PTi1OTFMtMSQKKworCS8qKgorCSAqIFRoaXMgaXMgdGhlIHByZWZlcmVuY2UgZm9yIHdoaWNoIGRlZmF1bHQgc29sdmVyIHRvIHVzZSAKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBERUZBVUxUX1NPTFZFUiA9ICJkZWZhdWx0U29sdmVyIjsgLy8kTk9OLU5MUy0xJAorCit9IC8vIFByZWZlcmVuY2VDb25zdGFudHMKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9wcmVmZXJlbmNlcy9QcmVmZXJlbmNlSW5pdGlhbGl6ZXIuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9wcmVmZXJlbmNlcy9QcmVmZXJlbmNlSW5pdGlhbGl6ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zM2M5MWJmCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3ByZWZlcmVuY2VzL1ByZWZlcmVuY2VJbml0aWFsaXplci5qYXZhCkBAIC0wLDAgKzEsMTYxIEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0udWkucHJlZmVyZW5jZXM7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgamF2YS5pby5CdWZmZXJlZFJlYWRlcjsKK2ltcG9ydCBqYXZhLmlvLkZpbGVOb3RGb3VuZEV4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLmlvLkZpbGVSZWFkZXI7CitpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5wcmVmZXJlbmNlcy5BYnN0cmFjdFByZWZlcmVuY2VJbml0aWFsaXplcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5wcmVmZXJlbmNlLklQcmVmZXJlbmNlU3RvcmU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS51aS5BY3RpdmF0b3I7CisKKy8qKgorICogQ2xhc3MgdXNlZCB0byBpbml0aWFsaXplIGRlZmF1bHQgcHJlZmVyZW5jZSB2YWx1ZXMuCisgKi8KK3B1YmxpYyBjbGFzcyBQcmVmZXJlbmNlSW5pdGlhbGl6ZXIgZXh0ZW5kcyBBYnN0cmFjdFByZWZlcmVuY2VJbml0aWFsaXplciB7CisKKwlwcml2YXRlIHN0YXRpYyBTdHJpbmcgW10gVU5JWF9PUyA9IHsiTGludXgiLCAiVW5peCJ9OworCQorCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLnByZWZlcmVuY2VzLkFic3RyYWN0UHJlZmVyZW5jZUluaXRpYWxpemVyI2luaXRpYWxpemVEZWZhdWx0UHJlZmVyZW5jZXMoKQorCSAqLworCXB1YmxpYyB2b2lkIGluaXRpYWxpemVEZWZhdWx0UHJlZmVyZW5jZXMoKSB7CisJCUlQcmVmZXJlbmNlU3RvcmUgc3RvcmUgPSBBY3RpdmF0b3IuZ2V0RGVmYXVsdCgpLmdldFByZWZlcmVuY2VTdG9yZSgpOworCQkvLyBmb3IgbWFwIGFuZCB5LWF4aXMgZGF0YSBkaXNwbGF5CisJCXN0b3JlLnNldERlZmF1bHQoUHJlZmVyZW5jZUNvbnN0YW50cy5JTklUSUFMX0FUVFJJQlVURV9OQU1FX1NUUklOR19QUkVGRVJFTkNFLAorCQkJCQkJVmlzdWFsaXphdGlvblByZWZlcmVuY2VQYWdlLkRFRkFVTFRfSU5JVElBTF9BVFRSSUJVVEVfTkFNRV9TVFJJTkcpOworCQkKKwkJLy8gZm9yIHBoYXNlIHNwYWNlIGRpc3BsYXkgb25seSAoeC1heGlzIGluaXRpYWwpCisJCXN0b3JlLnNldERlZmF1bHQoUHJlZmVyZW5jZUNvbnN0YW50cy5JTklUSUFMX0FUVFJJQlVURV9OQU1FX1NUUklOR19QUkVGRVJFTkNFMiwKKwkJCQlWaXN1YWxpemF0aW9uUHJlZmVyZW5jZVBhZ2UuREVGQVVMVF9JTklUSUFMX0FUVFJJQlVURV9OQU1FX1NUUklORzIpOworCisJCQorCQkvLyBTZXQgdXAgdGhlIGRlZmF1bHQgY29sb3IgdmFsdWVzIHdoaWNoIHdlIHdpbGwgYXNzaWduIHRvIGxhYmVscworCQlzdG9yZS5zZXREZWZhdWx0KFByZWZlcmVuY2VDb25zdGFudHMuRk9SRUdST1VORF9DT0xPUl9ERUZBVUxULAorCQkJCVZpc3VhbGl6YXRpb25QcmVmZXJlbmNlUGFnZS5GT1JFR1JPVU5EX0NPTE9SX0RFRkFVTFRfUkdCX1NUUklORyk7CisJCXN0b3JlLnNldERlZmF1bHQoUHJlZmVyZW5jZUNvbnN0YW50cy5GT1JFR1JPVU5EX0NPTE9SX0xBQkVMXzEsCisJCQkJVmlzdWFsaXphdGlvblByZWZlcmVuY2VQYWdlLkZPUkVHUk9VTkRfQ09MT1JfMV9SR0JfU1RSSU5HKTsKKwkJc3RvcmUuc2V0RGVmYXVsdChQcmVmZXJlbmNlQ29uc3RhbnRzLkZPUkVHUk9VTkRfQ09MT1JfTEFCRUxfMiwKKwkJCQlWaXN1YWxpemF0aW9uUHJlZmVyZW5jZVBhZ2UuRk9SRUdST1VORF9DT0xPUl8yX1JHQl9TVFJJTkcpOworCQlzdG9yZS5zZXREZWZhdWx0KFByZWZlcmVuY2VDb25zdGFudHMuRk9SRUdST1VORF9DT0xPUl9MQUJFTF8zLAorCQkJCVZpc3VhbGl6YXRpb25QcmVmZXJlbmNlUGFnZS5GT1JFR1JPVU5EX0NPTE9SXzNfUkdCX1NUUklORyk7CisJCXN0b3JlLnNldERlZmF1bHQoUHJlZmVyZW5jZUNvbnN0YW50cy5GT1JFR1JPVU5EX0NPTE9SX0xBQkVMXzQsCisJCQkJVmlzdWFsaXphdGlvblByZWZlcmVuY2VQYWdlLkZPUkVHUk9VTkRfQ09MT1JfNF9SR0JfU1RSSU5HKTsKKwkJc3RvcmUuc2V0RGVmYXVsdChQcmVmZXJlbmNlQ29uc3RhbnRzLkZPUkVHUk9VTkRfQ09MT1JfTEFCRUxfNSwKKwkJCQlWaXN1YWxpemF0aW9uUHJlZmVyZW5jZVBhZ2UuRk9SRUdST1VORF9DT0xPUl81X1JHQl9TVFJJTkcpOworCQlzdG9yZS5zZXREZWZhdWx0KFByZWZlcmVuY2VDb25zdGFudHMuRk9SRUdST1VORF9DT0xPUl9MQUJFTF82LAorCQkJCVZpc3VhbGl6YXRpb25QcmVmZXJlbmNlUGFnZS5GT1JFR1JPVU5EX0NPTE9SXzZfUkdCX1NUUklORyk7CisJCXN0b3JlLnNldERlZmF1bHQoUHJlZmVyZW5jZUNvbnN0YW50cy5GT1JFR1JPVU5EX0NPTE9SX0xBQkVMXzcsCisJCQkJVmlzdWFsaXphdGlvblByZWZlcmVuY2VQYWdlLkZPUkVHUk9VTkRfQ09MT1JfN19SR0JfU1RSSU5HKTsKKwkJCisJCXN0b3JlLnNldERlZmF1bHQoUHJlZmVyZW5jZUNvbnN0YW50cy5GT1JFR1JPVU5EX0NPTE9SX0xBQkVMXzgsCisJCQkJVmlzdWFsaXphdGlvblByZWZlcmVuY2VQYWdlLkZPUkVHUk9VTkRfQ09MT1JfOF9SR0JfU1RSSU5HKTsKKwkJc3RvcmUuc2V0RGVmYXVsdChQcmVmZXJlbmNlQ29uc3RhbnRzLkZPUkVHUk9VTkRfQ09MT1JfTEFCRUxfOSwKKwkJCQlWaXN1YWxpemF0aW9uUHJlZmVyZW5jZVBhZ2UuRk9SRUdST1VORF9DT0xPUl85X1JHQl9TVFJJTkcpOworCQlzdG9yZS5zZXREZWZhdWx0KFByZWZlcmVuY2VDb25zdGFudHMuRk9SRUdST1VORF9DT0xPUl9MQUJFTF8xMCwKKwkJCQlWaXN1YWxpemF0aW9uUHJlZmVyZW5jZVBhZ2UuRk9SRUdST1VORF9DT0xPUl8xMF9SR0JfU1RSSU5HKTsKKwkJCisJCS8vIFNldCB1cCB0aGUgZGVmYXVsdCBzdHJpbmcgdmFsdWVzIHdoaWNoIHdlIHdpbGwgYXNzaWduIHRvIGxhYmVscworCQlzdG9yZS5zZXREZWZhdWx0KFByZWZlcmVuY2VDb25zdGFudHMuRk9SRUdST1VORF9TVFJJTkdfTEFCRUxfREVGQVVMVCwKKwkJCQlWaXN1YWxpemF0aW9uUHJlZmVyZW5jZVBhZ2UuRk9SRUdST1VORF9BVFRSSUJVVEVfTkFNRV9ERUZBVUxUX1NUUklORyk7CisJCXN0b3JlLnNldERlZmF1bHQoUHJlZmVyZW5jZUNvbnN0YW50cy5GT1JFR1JPVU5EX1NUUklOR19MQUJFTF8xLAorCQkJCVZpc3VhbGl6YXRpb25QcmVmZXJlbmNlUGFnZS5GT1JFR1JPVU5EX0FUVFJJQlVURV9OQU1FXzFfU1RSSU5HKTsKKwkJc3RvcmUuc2V0RGVmYXVsdChQcmVmZXJlbmNlQ29uc3RhbnRzLkZPUkVHUk9VTkRfU1RSSU5HX0xBQkVMXzIsCisJCQkJVmlzdWFsaXphdGlvblByZWZlcmVuY2VQYWdlLkZPUkVHUk9VTkRfQVRUUklCVVRFX05BTUVfMl9TVFJJTkcpOworCQlzdG9yZS5zZXREZWZhdWx0KFByZWZlcmVuY2VDb25zdGFudHMuRk9SRUdST1VORF9TVFJJTkdfTEFCRUxfMywKKwkJCQlWaXN1YWxpemF0aW9uUHJlZmVyZW5jZVBhZ2UuRk9SRUdST1VORF9BVFRSSUJVVEVfTkFNRV8zX1NUUklORyk7CisJCXN0b3JlLnNldERlZmF1bHQoUHJlZmVyZW5jZUNvbnN0YW50cy5GT1JFR1JPVU5EX1NUUklOR19MQUJFTF80LAorCQkJCVZpc3VhbGl6YXRpb25QcmVmZXJlbmNlUGFnZS5GT1JFR1JPVU5EX0FUVFJJQlVURV9OQU1FXzRfU1RSSU5HKTsKKwkJc3RvcmUuc2V0RGVmYXVsdChQcmVmZXJlbmNlQ29uc3RhbnRzLkZPUkVHUk9VTkRfU1RSSU5HX0xBQkVMXzUsCisJCQkJVmlzdWFsaXphdGlvblByZWZlcmVuY2VQYWdlLkZPUkVHUk9VTkRfQVRUUklCVVRFX05BTUVfNV9TVFJJTkcpOworCQlzdG9yZS5zZXREZWZhdWx0KFByZWZlcmVuY2VDb25zdGFudHMuRk9SRUdST1VORF9TVFJJTkdfTEFCRUxfNiwKKwkJCQlWaXN1YWxpemF0aW9uUHJlZmVyZW5jZVBhZ2UuRk9SRUdST1VORF9BVFRSSUJVVEVfTkFNRV82X1NUUklORyk7CisJCXN0b3JlLnNldERlZmF1bHQoUHJlZmVyZW5jZUNvbnN0YW50cy5GT1JFR1JPVU5EX1NUUklOR19MQUJFTF83LAorCQkJCVZpc3VhbGl6YXRpb25QcmVmZXJlbmNlUGFnZS5GT1JFR1JPVU5EX0FUVFJJQlVURV9OQU1FXzdfU1RSSU5HKTsKKworCQkKKwkJLy8gc3RvcmUuc2V0RGVmYXVsdChQcmVmZXJlbmNlQ29uc3RhbnRzLlBfQk9PTEVBTiwgdHJ1ZSk7CisJCS8vIHN0b3JlLnNldERlZmF1bHQoUHJlZmVyZW5jZUNvbnN0YW50cy5QX0NIT0lDRSwgImNob2ljZTIiKTsKKwkJLy8gc3RvcmUuc2V0RGVmYXVsdChQcmVmZXJlbmNlQ29uc3RhbnRzLlBfU1RSSU5HLAorCQkvLyAiRGVmYXVsdCB2YWx1ZSIpOworCQkKKwkJLy8gR2V0ICMgb2YgcHJvY2Vzc29ycyBmcm9tIE9TIGhlcmUgaWYgcG9zc2libGUKKwkJCisJCVN0cmluZyBvc05hbWUgPSBTeXN0ZW0uZ2V0UHJvcGVydHkoIm9zLm5hbWUiKTsKKwkJc2hvcnQgbnVtVGhyZWFkcyA9IHRoaXMuZ2V0TnVtQ1BVcyhvc05hbWUpOworCQlpZihudW1UaHJlYWRzID09IDApIG51bVRocmVhZHMgPSBTb2x2ZXJQcmVmZXJlbmNlUGFnZS5ERUZBVUxUX1NJTVVMQVRJT05fVEhSRUFEUzsKKwkJc3RvcmUKKwkJLnNldERlZmF1bHQoCisJCQkJUHJlZmVyZW5jZUNvbnN0YW50cy5TSU1VTEFUSU9OX1RIUkVBRFMsCisJCQkJU29sdmVyUHJlZmVyZW5jZVBhZ2UuREVGQVVMVF9TSU1VTEFUSU9OX1RIUkVBRFMpOworCQkKKwkJLy8gU2V0IHRoZSBkZWZhdWx0IHNvbHZlciB0byBGaW5pdGUgRGlmZmVyZW5jZQorCQlzdG9yZQorCQkuc2V0RGVmYXVsdCgKKwkJCQlQcmVmZXJlbmNlQ29uc3RhbnRzLkRFRkFVTFRfU09MVkVSLAorCQkJCVNvbHZlclByZWZlcmVuY2VQYWdlLkRFRkFVTFRfU09MVkVSKTsKKwkJCisJfQorCisJLyoqCisJICogUmV0dXJuIHRoZSBudW1iZXIgb2YgQ1BVcyBhdmFpbGFibGUgb24gdGhlIGhhcmR3YXJlIChpZiBwb3NzaWJsZSkKKwkgKiAKKwkgKiBAcGFyYW0gb3MKKwkgKiBAcmV0dXJuIHNob3J0IE51bWJlciBvZiBDUFVzLCBvciAwIGlmIG5vdCBmb3VuZAorCSAqLworCXByaXZhdGUgc2hvcnQgZ2V0TnVtQ1BVcyhTdHJpbmcgb3MpIHsKKwkJLy8gT25seSBmb3IgdW5peCBvcyBmb3Igbm93CisJCWJvb2xlYW4gdW5peCA9IGZhbHNlOworCQlmb3IoU3RyaW5nIG8gOiBVTklYX09TKSBpZihvcy5lcXVhbHNJZ25vcmVDYXNlKG8pKSB1bml4ID0gdHJ1ZTsKKwkJaWYoIXVuaXgpIHJldHVybiAwOyAKKwkJLy8gRm9yIHVuaXgsIGdldCB0aGUgQ1BVJ3MgZnJvbSAvcHJvYy9jcHVpbmZvCisKKwkJc2hvcnQgbnVtQ1BVcyA9IDA7CisJCUJ1ZmZlcmVkUmVhZGVyIGZpbGVSZWFkZXIgPSBudWxsOworCQl0cnkgeworCQkJZmlsZVJlYWRlciA9IG5ldyBCdWZmZXJlZFJlYWRlcihuZXcgRmlsZVJlYWRlcigiL3Byb2MvY3B1aW5mbyIpKTsKKworCQkJaWYgKGZpbGVSZWFkZXIgIT0gbnVsbCkgeworCQkJCVN0cmluZyBidWZmZXIgPSBudWxsOworCQkJCXdoaWxlIChFT0YoYnVmZmVyID0gZmlsZVJlYWRlci5yZWFkTGluZSgpKSAhPSB0cnVlKSB7CisJCQkJCWlmKGJ1ZmZlci5zdGFydHNXaXRoKCJwcm9jZXNzb3IiKSkgKytudW1DUFVzOworCQkJCX0KKwkJCX0KKwkJfSBjYXRjaCAoRmlsZU5vdEZvdW5kRXhjZXB0aW9uIGZuZmUpIHsKKwkJCS8vIElnbm9yZSwgdW5hYmxlIHRvIGRldGVybWluZSBudW1iZXIgb2YgcHJvY2Vzc29ycworCQl9IGNhdGNoIChJT0V4Y2VwdGlvbiBpb2UpIHsKKwkJCS8vIElnbm9yZSwgdW5hYmxlIHRvIGRldGVybWluZSBudW1iZXIgb2YgcHJvY2Vzc29ycworCQl9IGZpbmFsbHkgeworCQkJdHJ5IHsKKwkJCQlmaWxlUmVhZGVyLmNsb3NlKCk7CisJCQl9IGNhdGNoIChFeGNlcHRpb24gZSkgeworCQkJCS8vIGV4Y2VwdGlvbiBvbiBjbG9zZSBkb2VzIG5vdCBtYXR0ZXIKKwkJCX0KKwkJfQorCQlyZXR1cm4gbnVtQ1BVczsKKwl9CisJCisJLyoqCisJIEBwYXJhbSBidWZmZXIKKwkgKiAgICAgICAgICAgIEEgYnVmZmVyIG9mIGRpdmEgZGF0YQorCSAqIAorCSAqIEByZXR1cm4gVHJ1ZSBpZiB3ZSBoYXZlIHJlYWNoZWQgRW5kLU9mLUZpbGUKKwkgKi8KKwlzdGF0aWMgcHJvdGVjdGVkIGJvb2xlYW4gRU9GKFN0cmluZyBidWZmZXIpIHsKKwkJaWYgKGJ1ZmZlciA9PSBudWxsKQorCQkJcmV0dXJuIHRydWU7CisJCXJldHVybiBmYWxzZTsKKwl9CisJCit9IC8vIFByZWZlcmVuY2VJbml0aWFsaXplcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3ByZWZlcmVuY2VzL1NURU1QcmVmZXJlbmNlUGFnZS5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3ByZWZlcmVuY2VzL1NURU1QcmVmZXJlbmNlUGFnZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU5YTBkZDMKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvcHJlZmVyZW5jZXMvU1RFTVByZWZlcmVuY2VQYWdlLmphdmEKQEAgLTAsMCArMSw2NCBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnVpLnByZWZlcmVuY2VzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnByZWZlcmVuY2UuRmllbGRFZGl0b3JQcmVmZXJlbmNlUGFnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnVpLkFjdGl2YXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5JV29ya2JlbmNoOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2hQcmVmZXJlbmNlUGFnZTsKKworLyoqCisgKiBUaGlzIGNsYXNzIHJlcHJlc2VudHMgYSBwcmVmZXJlbmNlIHBhZ2UgdGhhdCBpcyBjb250cmlidXRlZCB0byB0aGUKKyAqIFByZWZlcmVuY2VzIGRpYWxvZy4gQnkgc3ViLWNsYXNzaW5nIDxzYW1wPkZpZWxkRWRpdG9yUHJlZmVyZW5jZVBhZ2U8L3NhbXA+LAorICogd2UgY2FuIHVzZSB0aGUgZmllbGQgc3VwcG9ydCBidWlsdCBpbnRvIEpGYWNlIHRoYXQgYWxsb3dzIHVzIHRvIGNyZWF0ZSBhIHBhZ2UKKyAqIHRoYXQgaXMgc21hbGwgYW5kIGtub3dzIGhvdyB0byBzYXZlLCByZXN0b3JlIGFuZCBhcHBseSBpdHNlbGYuCisgKiA8cD4KKyAqIFRoaXMgcGFnZSBpcyB1c2VkIHRvIG1vZGlmeSBwcmVmZXJlbmNlcyBvbmx5LiBUaGV5IGFyZSBzdG9yZWQgaW4gdGhlCisgKiBwcmVmZXJlbmNlIHN0b3JlIHRoYXQgYmVsb25ncyB0byB0aGUgbWFpbiBwbHVnLWluIGNsYXNzLiBUaGF0IHdheSwKKyAqIHByZWZlcmVuY2VzIGNhbiBiZSBhY2Nlc3NlZCBkaXJlY3RseSB2aWEgdGhlIHByZWZlcmVuY2Ugc3RvcmUuCisgKi8KKworcHVibGljIGNsYXNzIFNURU1QcmVmZXJlbmNlUGFnZSBleHRlbmRzIEZpZWxkRWRpdG9yUHJlZmVyZW5jZVBhZ2UgaW1wbGVtZW50cworCQlJV29ya2JlbmNoUHJlZmVyZW5jZVBhZ2UgeworCisJLyoqCisJICogVGhlIElEIG9mIHRoZSBTVEVNIFByZWZlcmVuY2UgcGFnZS4KKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBJRF9TVEVNX1BSRUZFUkVOQ0VfUEFHRSA9ICJvcmcuZWNsaXBzZS5zdGVtLnVpLnByZWZlcmVuY2VzLlNURU1QcmVmZXJlbmNlUGFnZSI7CisKKwkvKioKKwkgKiBDb25zdHJ1Y3RvcgorCSAqLworCXB1YmxpYyBTVEVNUHJlZmVyZW5jZVBhZ2UoKSB7CisJCXN1cGVyKEdSSUQpOworCQlzZXRQcmVmZXJlbmNlU3RvcmUoQWN0aXZhdG9yLmdldERlZmF1bHQoKS5nZXRQcmVmZXJlbmNlU3RvcmUoKSk7CisJCXNldERlc2NyaXB0aW9uKE1lc3NhZ2VzLmdldFN0cmluZygiU1RFTVBQYWdlLlNURU0iKSk7IC8vJE5PTi1OTFMtMSQKKwl9IC8vIFNURU1QcmVmZXJlbmNlUGFnZQorCisJLyoqCisJICogQ3JlYXRlcyB0aGUgZmllbGQgZWRpdG9ycy4gRmllbGQgZWRpdG9ycyBhcmUgYWJzdHJhY3Rpb25zIG9mIHRoZSBjb21tb24KKwkgKiBHVUkgYmxvY2tzIG5lZWRlZCB0byBtYW5pcHVsYXRlIHZhcmlvdXMgdHlwZXMgb2YgcHJlZmVyZW5jZXMuIEVhY2ggZmllbGQKKwkgKiBlZGl0b3Iga25vd3MgaG93IHRvIHNhdmUgYW5kIHJlc3RvcmUgaXRzZWxmLgorCSAqLworCXB1YmxpYyB2b2lkIGNyZWF0ZUZpZWxkRWRpdG9ycygpIHsKKwkJLy8gTm90aGluZworCX0gLy8gY3JlYXRlRmllbGRFZGl0b3JzCisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2hQcmVmZXJlbmNlUGFnZSNpbml0KG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2gpCisJICovCisJcHVibGljIHZvaWQgaW5pdChAU3VwcHJlc3NXYXJuaW5ncygidW51c2VkIikvLyROT04tTkxTLTEkCisJCQlJV29ya2JlbmNoIHdvcmtiZW5jaCkgeworCQkvLyBOb3RoaW5nCisJfSAvLyBpbml0CisKK30gLy8gU1RFTVByZWZlcmVuY2VQYWdlCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvcHJlZmVyZW5jZXMvU29sdmVyUHJlZmVyZW5jZVBhZ2UuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9wcmVmZXJlbmNlcy9Tb2x2ZXJQcmVmZXJlbmNlUGFnZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA1MmZjYWUKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvcHJlZmVyZW5jZXMvU29sdmVyUHJlZmVyZW5jZVBhZ2UuamF2YQpAQCAtMCwwICsxLDE0MyBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnVpLnByZWZlcmVuY2VzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQ29yZUV4Y2VwdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSUNvbmZpZ3VyYXRpb25FbGVtZW50OworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JRXh0ZW5zaW9uUmVnaXN0cnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBsYXRmb3JtOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnByZWZlcmVuY2UuQ29tYm9GaWVsZEVkaXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5wcmVmZXJlbmNlLkZpZWxkRWRpdG9yUHJlZmVyZW5jZVBhZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UucHJlZmVyZW5jZS5JbnRlZ2VyRmllbGRFZGl0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLkNvbnN0YW50czsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc29sdmVyLlNvbHZlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnVpLkFjdGl2YXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5JV29ya2JlbmNoOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2hQcmVmZXJlbmNlUGFnZTsKKworLyoqCisgKiBUaGlzIGNsYXNzIHJlcHJlc2VudHMgYSBwcmVmZXJlbmNlIHBhZ2UgdGhhdCBpcyBjb250cmlidXRlZCB0byB0aGUKKyAqIFByZWZlcmVuY2VzIGRpYWxvZy4gQnkgc3ViLWNsYXNzaW5nIDxzYW1wPkZpZWxkRWRpdG9yUHJlZmVyZW5jZVBhZ2U8L3NhbXA+LAorICogd2UgY2FuIHVzZSB0aGUgZmllbGQgc3VwcG9ydCBidWlsdCBpbnRvIEpGYWNlIHRoYXQgYWxsb3dzIHVzIHRvIGNyZWF0ZSBhIHBhZ2UKKyAqIHRoYXQgaXMgc21hbGwgYW5kIGtub3dzIGhvdyB0byBzYXZlLCByZXN0b3JlIGFuZCBhcHBseSBpdHNlbGYuCisgKiA8cD4KKyAqIFRoaXMgcGFnZSBpcyB1c2VkIHRvIG1vZGlmeSBwcmVmZXJlbmNlcyBvbmx5LiBUaGV5IGFyZSBzdG9yZWQgaW4gdGhlCisgKiBwcmVmZXJlbmNlIHN0b3JlIHRoYXQgYmVsb25ncyB0byB0aGUgbWFpbiBwbHVnLWluIGNsYXNzLiBUaGF0IHdheSwKKyAqIHByZWZlcmVuY2VzIGNhbiBiZSBhY2Nlc3NlZCBkaXJlY3RseSB2aWEgdGhlIHByZWZlcmVuY2Ugc3RvcmUuCisgKi8KKworcHVibGljIGNsYXNzIFNvbHZlclByZWZlcmVuY2VQYWdlIGV4dGVuZHMKK0ZpZWxkRWRpdG9yUHJlZmVyZW5jZVBhZ2UgaW1wbGVtZW50cyBJV29ya2JlbmNoUHJlZmVyZW5jZVBhZ2UgeworCisJLyoqCisJICogVGhpcyBpcyB0aGUgZGVmYXVsdCBudW1iZXIgb2YgdGhyZWFkcyB0byB1c2Ugd2hlbiBydW5uaW5nCisJICogYSBzaW11bGF0aW9uLiBUaGUgZGVmYXVsdCBpcyB1c2VkIGlmIHRoZSBudW1iZXIgb2YgQ1BVcyBjYW5ub3QKKwkgKiBiZSBkZXRlY3RlZAorCSAqLworCisJcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgREVGQVVMVF9TSU1VTEFUSU9OX1RIUkVBRFMgPSAyOworCisJLyoqCisJICogVGhlIGRlZmF1bHQgc29sdmVyLiBGaW5pdGUgZGlmZmVyZW5jZSBzb2x2ZXIgaXMKKwkgKiBhbHdheXMgYXNzdW1lZCB0byBiZSBhdmFpbGFibGUuCisJICovCisKKwlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBERUZBVUxUX1NPTFZFUiA9ICJvcmcuZWNsaXBzZS5zdGVtLnNvbHZlcnMuZmQuaW1wbC5GaW5pdGVEaWZmZXJlbmNlSW1wbCI7CisKKwkvKioKKwkgKiBDb25zdHJ1Y3RvcgorCSAqLworCXB1YmxpYyBTb2x2ZXJQcmVmZXJlbmNlUGFnZSgpIHsKKwkJc3VwZXIoR1JJRCk7CisJCXNldFByZWZlcmVuY2VTdG9yZShBY3RpdmF0b3IuZ2V0RGVmYXVsdCgpLmdldFByZWZlcmVuY2VTdG9yZSgpKTsKKwkJc2V0RGVzY3JpcHRpb24oTWVzc2FnZXMuZ2V0U3RyaW5nKCJETVBQYWdlVElUTEUiKSk7IC8vJE5PTi1OTFMtMSQKKwl9CisKKwkvKioKKwkgKiBDcmVhdGVzIHRoZSBmaWVsZCBlZGl0b3JzLiBGaWVsZCBlZGl0b3JzIGFyZSBhYnN0cmFjdGlvbnMgb2YgdGhlIGNvbW1vbgorCSAqIEdVSSBibG9ja3MgbmVlZGVkIHRvIG1hbmlwdWxhdGUgdmFyaW91cyB0eXBlcyBvZiBwcmVmZXJlbmNlcy4gRWFjaCBmaWVsZAorCSAqIGVkaXRvciBrbm93cyBob3cgdG8gc2F2ZSBhbmQgcmVzdG9yZSBpdHNlbGYuCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgY3JlYXRlRmllbGRFZGl0b3JzKCkgeworCisJCWZpbmFsIEludGVnZXJGaWVsZEVkaXRvciBzaW11bGF0aW9uVGhyZWFkc0ZpZWxkRWRpdG9yID0gbmV3IEludGVnZXJGaWVsZEVkaXRvcigKKwkJCQlQcmVmZXJlbmNlQ29uc3RhbnRzLlNJTVVMQVRJT05fVEhSRUFEUywKKwkJCQlNZXNzYWdlcy5nZXRTdHJpbmcoIkRNUFBhZ2VTaW1UaHJlYWRzIiksIGdldEZpZWxkRWRpdG9yUGFyZW50KCkpOyAvLyROT04tTkxTLTEkCisKKwkJYWRkRmllbGQoc2ltdWxhdGlvblRocmVhZHNGaWVsZEVkaXRvcik7CisKKworCQlTb2x2ZXIgW10gc29sdmVycyA9IGdldFNvbHZlcnMoKTsKKwkJU3RyaW5nIFtdW10gbmFtZXNBbmRWYWx1ZXMgPSBuZXcgU3RyaW5nW3NvbHZlcnMubGVuZ3RoXVtzb2x2ZXJzLmxlbmd0aF07CisKKwkJZm9yKGludCBpPTA7aTxzb2x2ZXJzLmxlbmd0aDsrK2kpIHsKKwkJCW5hbWVzQW5kVmFsdWVzW2ldWzBdID0gc29sdmVyc1tpXS5nZXRDbGFzcygpLmdldFNpbXBsZU5hbWUoKTsKKwkJCW5hbWVzQW5kVmFsdWVzW2ldWzFdID0gc29sdmVyc1tpXS5nZXRDbGFzcygpLmdldE5hbWUoKTsKKwkJfQorCisJCWZpbmFsIENvbWJvRmllbGRFZGl0b3IgY29tYm9GaWVsZEVkaXRvciA9IG5ldyBDb21ib0ZpZWxkRWRpdG9yKAorCQkJCVByZWZlcmVuY2VDb25zdGFudHMuREVGQVVMVF9TT0xWRVIsCisJCQkJTWVzc2FnZXMuZ2V0U3RyaW5nKCJETVBQYWdlRGVmYXVsdFNvbHZlciIpLAorCQkJCW5hbWVzQW5kVmFsdWVzLCBnZXRGaWVsZEVkaXRvclBhcmVudCgpKTsKKworCQlhZGRGaWVsZChjb21ib0ZpZWxkRWRpdG9yKTsKKworCX0gLy8gY3JlYXRlRmllbGRFZGl0b3JzCisKKwkvKioKKwkgKiBnZXRTb2x2ZXJzIFJldHVybiByZWdpc3RlcmVkIHNvbHZlcnMKKwkgKiAKKwkgKiBAcmV0dXJuIFNvbHZlciBbXSBBdmFpbGFibGUgc29sdmVycworCSAqLworCisJcHVibGljIHN0YXRpYyBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc29sdmVyLlNvbHZlciBbXSBnZXRTb2x2ZXJzKCkgeworCQlTb2x2ZXIgW10gc29sdmVyczsKKwkJZmluYWwgSUV4dGVuc2lvblJlZ2lzdHJ5IHJlZ2lzdHJ5ID0gUGxhdGZvcm0uZ2V0RXh0ZW5zaW9uUmVnaXN0cnkoKTsKKwkJZmluYWwgSUNvbmZpZ3VyYXRpb25FbGVtZW50W10gc29sdmVyQ29uZmlnRWxlbWVudHMgPSByZWdpc3RyeQorCQkuZ2V0Q29uZmlndXJhdGlvbkVsZW1lbnRzRm9yKG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5Db25zdGFudHMuSURfU09MVkVSX0VYVEVOU0lPTl9QT0lOVCk7CisKKwkJZmluYWwgTGlzdDxTb2x2ZXI+IHRlbXAgPSBuZXcgQXJyYXlMaXN0PFNvbHZlcj4oKTsKKworCQkvL3NvbHZlcnMgPSBuZXcgU29sdmVyW3NvbHZlckNvbmZpZ0VsZW1lbnRzLmxlbmd0aF07CisKKwkJZm9yIChpbnQgaSA9IDA7IGkgPCBzb2x2ZXJDb25maWdFbGVtZW50cy5sZW5ndGg7IGkrKykgeworCQkJZmluYWwgSUNvbmZpZ3VyYXRpb25FbGVtZW50IGVsZW1lbnQgPSBzb2x2ZXJDb25maWdFbGVtZW50c1tpXTsKKwkJCS8vIERvZXMgdGhlIGVsZW1lbnQgc3BlY2lmeSB0aGUgY2xhc3Mgb2YgdGhlIGRpc2Vhc2UgbW9kZWw/CisJCQlpZiAoZWxlbWVudC5nZXROYW1lKCkuZXF1YWxzKENvbnN0YW50cy5TT0xWRVJfRUxFTUVOVCkpIHsKKwkJCQkvLyBZZXMKKwkJCQl0cnkgeworCQkJCQl0ZW1wLmFkZCgoU29sdmVyKSBlbGVtZW50CisJCQkJCQkJLmNyZWF0ZUV4ZWN1dGFibGVFeHRlbnNpb24oImNsYXNzIikpOyAvLyROT04tTkxTLTEkCisJCQkJfSBjYXRjaCAoZmluYWwgQ29yZUV4Y2VwdGlvbiBlKSB7CisJCQkJCUFjdGl2YXRvci5sb2dFcnJvcigKKwkJCQkJCQkiQ2FuJ3QgY3JlYXRlIHNvbHZlciIsIGUpOyAvLyROT04tTkxTLTEkCisJCQkJfQorCQkJfSAvLyBpZgorCQl9IC8vIGZvciBlYWNoIGNvbmZpZ3VyYXRpb24gZWxlbWVudAorCisJCXNvbHZlcnMgPSB0ZW1wLnRvQXJyYXkobmV3IFNvbHZlcltdIHt9KTsKKworCQlyZXR1cm4gc29sdmVyczsKKwl9CisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2hQcmVmZXJlbmNlUGFnZSNpbml0KG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2gpCisJICovCisJcHVibGljIHZvaWQgaW5pdChJV29ya2JlbmNoIHdvcmtiZW5jaCkgeworCQkvLyBOb3RoaW5nCisJfQorCit9IC8vIFNpbXVsYXRpb25NYW5hZ2VtZW50UHJlZmVyZW5jZVBhZ2UKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9wcmVmZXJlbmNlcy9WaXN1YWxpemF0aW9uUHJlZmVyZW5jZVBhZ2UuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9wcmVmZXJlbmNlcy9WaXN1YWxpemF0aW9uUHJlZmVyZW5jZVBhZ2UuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMGYzODNlCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3ByZWZlcmVuY2VzL1Zpc3VhbGl6YXRpb25QcmVmZXJlbmNlUGFnZS5qYXZhCkBAIC0wLDAgKzEsNTMxIEBACisvLyBWaXN1YWxpemF0aW9uUHJlZmVyZW5jZVBhZ2UuamF2YQorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnVpLnByZWZlcmVuY2VzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOworaW1wb3J0IGphdmEudXRpbC5IYXNoU2V0OworaW1wb3J0IGphdmEudXRpbC5NYXA7CitpbXBvcnQgamF2YS51dGlsLlNldDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QcmVmZXJlbmNlczsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5wcmVmZXJlbmNlLkNvbG9yRmllbGRFZGl0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UucHJlZmVyZW5jZS5GaWVsZEVkaXRvclByZWZlcmVuY2VQYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnByZWZlcmVuY2UuU3RyaW5nRmllbGRFZGl0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UucmVzb3VyY2UuU3RyaW5nQ29udmVydGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udWkuQWN0aXZhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ncmFwaGljcy5Db2xvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZ3JhcGhpY3MuRGV2aWNlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ncmFwaGljcy5SR0I7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaDsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5JV29ya2JlbmNoUHJlZmVyZW5jZVBhZ2U7CisKKy8qKgorICogVGhpcyBjbGFzcyByZXByZXNlbnRzIHRoZSBwcmVmZXJlbmNlcyBmb3IgdmlzdWFsaXphdGlvbiBvZiBhIHNpbXVsYXRpb24uCisgKi8KK3B1YmxpYyBjbGFzcyBWaXN1YWxpemF0aW9uUHJlZmVyZW5jZVBhZ2UgZXh0ZW5kcyBGaWVsZEVkaXRvclByZWZlcmVuY2VQYWdlCisJCWltcGxlbWVudHMgSVdvcmtiZW5jaFByZWZlcmVuY2VQYWdlIHsKKworCS8qKgorCSAqIFRoZSBJRCBvZiB0aGUgU1RFTSBQcmVmZXJlbmNlIHBhZ2UuCisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgSURfU1RFTV9WSVNVQUxJWkFUSU9OX1BBR0UgPSAib3JnLmVjbGlwc2Uuc3RlbS51aS5wcmVmZXJlbmNlcy5WaXN1YWxpemF0aW9uUHJlZmVyZW5jZVBhZ2UiOworCisJLyoqCisJICogVGhlIGRlZmF1bHQgbmFtZSBvZiB0aGUgYXR0cmlidXRlIHRvIGRpc3BsYXkgZmlyc3QgaW4gYSB2aXN1YWxpemF0aW9uLgorCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIERFRkFVTFRfSU5JVElBTF9BVFRSSUJVVEVfTkFNRV9TVFJJTkcgPSAiSSI7CisKKwkvKioKKwkgKiBUaGUgZGVmYXVsdCBuYW1lIG9mIHRoZSBhdHRyaWJ1dGUgdG8gZGlzcGxheSBmaXJzdCBpbiBhIHZpc3VhbGl6YXRpb24uCisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgREVGQVVMVF9JTklUSUFMX0FUVFJJQlVURV9OQU1FX1NUUklORzIgPSAiUyI7CisKKwkKKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgQVRUUklCVVRFX05BTUVfRklFTERfV0lEVEggPSAxMTsKKworCS8qKgorCSAqIEEgbWFwcGluZyBiZXR3ZWVuIGF0dHJpYnV0ZSBuYW1lcyBhbmQgYXR0cmlidXRlIGNvbG9ycyBpcyBtYWludGFpbmVkIGluCisJICogdGhpcyBjb2xvciBwcmVmZXJlbmNlIG1hcC4KKwkgKi8KKwlwcml2YXRlIHN0YXRpYyBNYXA8U3RyaW5nLCBDb2xvcj4gY29sb3JQcmVmZXJlbmNlTWFwID0gbmV3IEhhc2hNYXA8U3RyaW5nLCBDb2xvcj4oKTsKKworCS8qKgorCSAqIERlZmluZSBzZXZlcmFsIGxhYmVsIG5hbWVzIChzdHJpbmdzKSB0aGF0IG1pZ2h0IG5lZWQgdW5pcXVlIGZvcmVncm91bmQKKwkgKiBjb2xvciBhc3NpZ25tZW50cy4KKwkgKiAKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBGT1JFR1JPVU5EX0FUVFJJQlVURV9OQU1FX0RFRkFVTFRfU1RSSU5HID0gIkRFRkFVTFQiOworCisJLyoqCisJICogU3VzY2VwdGlibGUKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBGT1JFR1JPVU5EX0FUVFJJQlVURV9OQU1FXzFfU1RSSU5HID0gIlMiOworCS8qKgorCSAqIEV4cG9zZWQKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBGT1JFR1JPVU5EX0FUVFJJQlVURV9OQU1FXzJfU1RSSU5HID0gIkUiOworCS8qKgorCSAqIEluZmVjdGlvdXMKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBGT1JFR1JPVU5EX0FUVFJJQlVURV9OQU1FXzNfU1RSSU5HID0gIkkiOworCS8qKgorCSAqIFJlY292ZXJlZAorCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEZPUkVHUk9VTkRfQVRUUklCVVRFX05BTUVfNF9TVFJJTkcgPSAiUiI7CisJLyoqCisJICogVG90YWwgUG9wdWxhdGlvbgorCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEZPUkVHUk9VTkRfQVRUUklCVVRFX05BTUVfNV9TVFJJTkcgPSAiQ291bnQiOworCQorCS8qKgorCSAqIFBvcHVsYXRpb24gRGVuc2l0eQorCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEZPUkVHUk9VTkRfQVRUUklCVVRFX05BTUVfNl9TVFJJTkcgPSAiRGVuc2l0eSI7CisJLyoqCisJICogSW5mZWN0aW91cyB0aGF0IERpZSBvZiB0aGUgZGlzZWFzZQorCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEZPUkVHUk9VTkRfQVRUUklCVVRFX05BTUVfN19TVFJJTkcgPSAiSW5jaWRlbmNlIjsKKwkvKioKKwkgKiBVbmFzc2lnbmVkCisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgRk9SRUdST1VORF9BVFRSSUJVVEVfTkFNRV84X1NUUklORyA9ICItIjsKKwkvKioKKwkgKiBVbmFzc2lnbmVkCisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgRk9SRUdST1VORF9BVFRSSUJVVEVfTkFNRV85X1NUUklORyA9ICItIjsKKwkvKioKKwkgKiBVbmFzc2lnbmVkCisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgRk9SRUdST1VORF9BVFRSSUJVVEVfTkFNRV8xMF9TVFJJTkcgPSAiLSI7CisKKwkvKioKKwkgKiBEZWZhdWx0IGNvbG9yIAorCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEZPUkVHUk9VTkRfQ09MT1JfREVGQVVMVF9SR0JfU1RSSU5HID0gIjAsMCwxNzIiOworCisJLyoqCisJICogUyBjb2xvciA9IGJsdWUKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBGT1JFR1JPVU5EX0NPTE9SXzFfUkdCX1NUUklORyA9ICIwLDAsMjU1IjsKKworCS8qKgorCSAqIEUgY29sb3IgPSB5ZWxsb3cKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBGT1JFR1JPVU5EX0NPTE9SXzJfUkdCX1NUUklORyA9ICIyNTUsMjU1LDAiOworCisJLyoqCisJICogSSBjb2xvciA9IHJlZAorCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEZPUkVHUk9VTkRfQ09MT1JfM19SR0JfU1RSSU5HID0gIjI1NSwwLDAiOworCisJLyoqCisJICogUiBjb2xvciA9IGdyZWVuCisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgRk9SRUdST1VORF9DT0xPUl80X1JHQl9TVFJJTkcgPSAiMCwyNTUsMCI7CisKKwkvKioKKwkgKiBQIChQb3B1bGF0aW9uKSBjb2xvciA9IGJsYWNrCisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgRk9SRUdST1VORF9DT0xPUl81X1JHQl9TVFJJTkcgPSAiMCwwLDAiOworCQorCisJLyoqCisJICogRGVuc2l0eSAoQ3lhbikKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBGT1JFR1JPVU5EX0NPTE9SXzZfUkdCX1NUUklORyA9ICIwLDI1NSwyNTUiOworCQorCisJLyoqCisJICogSW5jaWRlbmNlIGNvbG9yID0gZ3JleS1yZWQKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBGT1JFR1JPVU5EX0NPTE9SXzdfUkdCX1NUUklORyA9ICIyMTAsMjAwLDIwMCI7CisJCisJLyoqCisJICogRXh0cmEgY29sb3IgPSBncmV5CisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgRk9SRUdST1VORF9DT0xPUl84X1JHQl9TVFJJTkcgPSAiMTkyLDE5MiwxOTIiOworCQorCS8qKgorCSAqIEV4dHJhIGNvbG9yID0gZ3JleQorCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEZPUkVHUk9VTkRfQ09MT1JfOV9SR0JfU1RSSU5HID0gIjEyOCwxMjgsMTI4IjsKKwkKKwkvKioKKwkgKiBFeHRyYSBjb2xvciA9IGdyZXkKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBGT1JFR1JPVU5EX0NPTE9SXzEwX1JHQl9TVFJJTkcgPSAiNjQsNjQsNjQiOworCisJLyoqCisJICogZGVmaW5lIHNldmVyYWwgcHJpbWFyeSBmb3JlZ3JvdW5kIGNvbG9ycyBlYWNoIGNhbiBiZSBhc3NvY2lhdGVkIHdpdGggYSBkaWZmZXJlbnQgbGFiZWwKKwkgKiAoZS5nLiwgUyxFLEksUiwgUCwgSVIsIElGKSBJZiB0aGUgTGFiZWwgaXMgbm90IGZvdW5kLCB1c2UgdGhlIGRlZmF1bHQgZm9yZWdyb3VuZAorCSAqIGNvbG9yIGZpZWxkIGVkaXRvcgorCSAqLworCXByaXZhdGUgc3RhdGljIENvbG9yRmllbGRFZGl0b3IgZm9yZWdyb3VuZENvbG9yRmllbGRFZGl0b3JEZWZhdWx0OworCXByaXZhdGUgc3RhdGljIENvbG9yRmllbGRFZGl0b3IgZm9yZWdyb3VuZENvbG9yRmllbGRFZGl0b3IxOworCXByaXZhdGUgc3RhdGljIENvbG9yRmllbGRFZGl0b3IgZm9yZWdyb3VuZENvbG9yRmllbGRFZGl0b3IyOworCXByaXZhdGUgc3RhdGljIENvbG9yRmllbGRFZGl0b3IgZm9yZWdyb3VuZENvbG9yRmllbGRFZGl0b3IzOworCXByaXZhdGUgc3RhdGljIENvbG9yRmllbGRFZGl0b3IgZm9yZWdyb3VuZENvbG9yRmllbGRFZGl0b3I0OworCXByaXZhdGUgc3RhdGljIENvbG9yRmllbGRFZGl0b3IgZm9yZWdyb3VuZENvbG9yRmllbGRFZGl0b3I1OworCXByaXZhdGUgc3RhdGljIENvbG9yRmllbGRFZGl0b3IgZm9yZWdyb3VuZENvbG9yRmllbGRFZGl0b3I2OworCXByaXZhdGUgc3RhdGljIENvbG9yRmllbGRFZGl0b3IgZm9yZWdyb3VuZENvbG9yRmllbGRFZGl0b3I3OworCXByaXZhdGUgc3RhdGljIENvbG9yRmllbGRFZGl0b3IgZm9yZWdyb3VuZENvbG9yRmllbGRFZGl0b3I4OworCXByaXZhdGUgc3RhdGljIENvbG9yRmllbGRFZGl0b3IgZm9yZWdyb3VuZENvbG9yRmllbGRFZGl0b3I5OworCXByaXZhdGUgc3RhdGljIENvbG9yRmllbGRFZGl0b3IgZm9yZWdyb3VuZENvbG9yRmllbGRFZGl0b3IxMDsKKwkKKworCS8qKgorCSAqIERlZmluZSBzZXZlcmFsIHN0cmluZyBmaWVsZCBlZGl0b3JzIHRvIGFzc2lnbiBzdHJpbmcgdmFsdWVzIHRvIHRoZSBsYWJlbHMKKwkgKiB0aGF0IHJlcXVpcmUgY29sb3IgYXNzaWdubWVudHMKKwkgKi8KKwkvLyBwcml2YXRlIFN0cmluZ0ZpZWxkRWRpdG9yIGZvcmVncm91bmRMYWJlbEZpZWxkRWRpdG9yRGVmYXVsdDsKKwlwcml2YXRlIHN0YXRpYyBTdHJpbmdGaWVsZEVkaXRvciBmb3JlZ3JvdW5kTGFiZWxGaWVsZEVkaXRvcjE7CisJcHJpdmF0ZSBzdGF0aWMgU3RyaW5nRmllbGRFZGl0b3IgZm9yZWdyb3VuZExhYmVsRmllbGRFZGl0b3IyOworCXByaXZhdGUgc3RhdGljIFN0cmluZ0ZpZWxkRWRpdG9yIGZvcmVncm91bmRMYWJlbEZpZWxkRWRpdG9yMzsKKwlwcml2YXRlIHN0YXRpYyBTdHJpbmdGaWVsZEVkaXRvciBmb3JlZ3JvdW5kTGFiZWxGaWVsZEVkaXRvcjQ7CisJcHJpdmF0ZSBzdGF0aWMgU3RyaW5nRmllbGRFZGl0b3IgZm9yZWdyb3VuZExhYmVsRmllbGRFZGl0b3I1OworCXByaXZhdGUgc3RhdGljIFN0cmluZ0ZpZWxkRWRpdG9yIGZvcmVncm91bmRMYWJlbEZpZWxkRWRpdG9yNjsKKwlwcml2YXRlIHN0YXRpYyBTdHJpbmdGaWVsZEVkaXRvciBmb3JlZ3JvdW5kTGFiZWxGaWVsZEVkaXRvcjc7CisJcHJpdmF0ZSBzdGF0aWMgU3RyaW5nRmllbGRFZGl0b3IgZm9yZWdyb3VuZExhYmVsRmllbGRFZGl0b3I4OworCXByaXZhdGUgc3RhdGljIFN0cmluZ0ZpZWxkRWRpdG9yIGZvcmVncm91bmRMYWJlbEZpZWxkRWRpdG9yOTsKKwlwcml2YXRlIHN0YXRpYyBTdHJpbmdGaWVsZEVkaXRvciBmb3JlZ3JvdW5kTGFiZWxGaWVsZEVkaXRvcjEwOworCisJcHJpdmF0ZSBTdHJpbmdGaWVsZEVkaXRvciBpbml0aWFsQXR0cmlidXRlTmFtZUZpZWxkRWRpdG9yMTsKKwlwcml2YXRlIFN0cmluZ0ZpZWxkRWRpdG9yIGluaXRpYWxBdHRyaWJ1dGVOYW1lRmllbGRFZGl0b3IyOworCisJLyoqCisJICogQ29uc3RydWN0b3IKKwkgKi8KKwlwdWJsaWMgVmlzdWFsaXphdGlvblByZWZlcmVuY2VQYWdlKCkgeworCQlzdXBlcihHUklEKTsKKwkJc2V0UHJlZmVyZW5jZVN0b3JlKEFjdGl2YXRvci5nZXREZWZhdWx0KCkuZ2V0UHJlZmVyZW5jZVN0b3JlKCkpOworCQlzZXREZXNjcmlwdGlvbihNZXNzYWdlcy5nZXRTdHJpbmcoIlNURU1WUGFnZS5WaXoiKSk7CisKKwl9IC8vIFZpc3VhbGl6YXRpb25QcmVmZXJlbmNlUGFnZQorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5qZmFjZS5wcmVmZXJlbmNlLkZpZWxkRWRpdG9yUHJlZmVyZW5jZVBhZ2UjY3JlYXRlRmllbGRFZGl0b3JzKCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgdm9pZCBjcmVhdGVGaWVsZEVkaXRvcnMoKSB7CisJCWluaXRpYWxBdHRyaWJ1dGVOYW1lRmllbGRFZGl0b3IxID0gbmV3IFN0cmluZ0ZpZWxkRWRpdG9yKAorCQkJCVByZWZlcmVuY2VDb25zdGFudHMuSU5JVElBTF9BVFRSSUJVVEVfTkFNRV9TVFJJTkdfUFJFRkVSRU5DRSwKKwkJCQlNZXNzYWdlcy5nZXRTdHJpbmcoIlZpelBQYWdlLkluaXRpYWxOYW1lMSIpLAorCQkJCUFUVFJJQlVURV9OQU1FX0ZJRUxEX1dJRFRILCBnZXRGaWVsZEVkaXRvclBhcmVudCgpKTsKKworCQlpbml0aWFsQXR0cmlidXRlTmFtZUZpZWxkRWRpdG9yMiA9IG5ldyBTdHJpbmdGaWVsZEVkaXRvcigKKwkJCQlQcmVmZXJlbmNlQ29uc3RhbnRzLklOSVRJQUxfQVRUUklCVVRFX05BTUVfU1RSSU5HX1BSRUZFUkVOQ0UyLAorCQkJCU1lc3NhZ2VzLmdldFN0cmluZygiVml6UFBhZ2UuSW5pdGlhbE5hbWUyIiksCisJCQkJQVRUUklCVVRFX05BTUVfRklFTERfV0lEVEgsIGdldEZpZWxkRWRpdG9yUGFyZW50KCkpOworCisJCS8vIEZvciBDb2xvciBBc3NpZ25tZW50CisJCWZvcmVncm91bmRDb2xvckZpZWxkRWRpdG9yRGVmYXVsdCA9IG5ldyBDb2xvckZpZWxkRWRpdG9yKAorCQkJCVByZWZlcmVuY2VDb25zdGFudHMuRk9SRUdST1VORF9DT0xPUl9ERUZBVUxULCBNZXNzYWdlcworCQkJCQkJLmdldFN0cmluZygiVml6UFBhZ2UuZmdjZCIpLCBnZXRGaWVsZEVkaXRvclBhcmVudCgpKTsKKwkJZm9yZWdyb3VuZENvbG9yRmllbGRFZGl0b3IxID0gbmV3IENvbG9yRmllbGRFZGl0b3IoCisJCQkJUHJlZmVyZW5jZUNvbnN0YW50cy5GT1JFR1JPVU5EX0NPTE9SX0xBQkVMXzEsIE1lc3NhZ2VzCisJCQkJCQkuZ2V0U3RyaW5nKCJWaXpQUGFnZS5mZ2MxIiksIGdldEZpZWxkRWRpdG9yUGFyZW50KCkpOworCQlmb3JlZ3JvdW5kQ29sb3JGaWVsZEVkaXRvcjIgPSBuZXcgQ29sb3JGaWVsZEVkaXRvcigKKwkJCQlQcmVmZXJlbmNlQ29uc3RhbnRzLkZPUkVHUk9VTkRfQ09MT1JfTEFCRUxfMiwgTWVzc2FnZXMKKwkJCQkJCS5nZXRTdHJpbmcoIlZpelBQYWdlLmZnYzIiKSwgZ2V0RmllbGRFZGl0b3JQYXJlbnQoKSk7CisJCWZvcmVncm91bmRDb2xvckZpZWxkRWRpdG9yMyA9IG5ldyBDb2xvckZpZWxkRWRpdG9yKAorCQkJCVByZWZlcmVuY2VDb25zdGFudHMuRk9SRUdST1VORF9DT0xPUl9MQUJFTF8zLCBNZXNzYWdlcworCQkJCQkJLmdldFN0cmluZygiVml6UFBhZ2UuZmdjMyIpLCBnZXRGaWVsZEVkaXRvclBhcmVudCgpKTsKKwkJZm9yZWdyb3VuZENvbG9yRmllbGRFZGl0b3I0ID0gbmV3IENvbG9yRmllbGRFZGl0b3IoCisJCQkJUHJlZmVyZW5jZUNvbnN0YW50cy5GT1JFR1JPVU5EX0NPTE9SX0xBQkVMXzQsIE1lc3NhZ2VzCisJCQkJCQkuZ2V0U3RyaW5nKCJWaXpQUGFnZS5mZ2M0IiksIGdldEZpZWxkRWRpdG9yUGFyZW50KCkpOworCQlmb3JlZ3JvdW5kQ29sb3JGaWVsZEVkaXRvcjUgPSBuZXcgQ29sb3JGaWVsZEVkaXRvcigKKwkJCQlQcmVmZXJlbmNlQ29uc3RhbnRzLkZPUkVHUk9VTkRfQ09MT1JfTEFCRUxfNSwgTWVzc2FnZXMKKwkJCQkJCS5nZXRTdHJpbmcoIlZpelBQYWdlLmZnYzUiKSwgZ2V0RmllbGRFZGl0b3JQYXJlbnQoKSk7CisJCWZvcmVncm91bmRDb2xvckZpZWxkRWRpdG9yNiA9IG5ldyBDb2xvckZpZWxkRWRpdG9yKAorCQkJCVByZWZlcmVuY2VDb25zdGFudHMuRk9SRUdST1VORF9DT0xPUl9MQUJFTF82LCBNZXNzYWdlcworCQkJCQkJLmdldFN0cmluZygiVml6UFBhZ2UuZmdjNiIpLCBnZXRGaWVsZEVkaXRvclBhcmVudCgpKTsKKwkJZm9yZWdyb3VuZENvbG9yRmllbGRFZGl0b3I3ID0gbmV3IENvbG9yRmllbGRFZGl0b3IoCisJCQkJUHJlZmVyZW5jZUNvbnN0YW50cy5GT1JFR1JPVU5EX0NPTE9SX0xBQkVMXzcsIE1lc3NhZ2VzCisJCQkJCQkuZ2V0U3RyaW5nKCJWaXpQUGFnZS5mZ2M3IiksIGdldEZpZWxkRWRpdG9yUGFyZW50KCkpOworCQkKKwkJZm9yZWdyb3VuZENvbG9yRmllbGRFZGl0b3I4ID0gbmV3IENvbG9yRmllbGRFZGl0b3IoCisJCQkJUHJlZmVyZW5jZUNvbnN0YW50cy5GT1JFR1JPVU5EX0NPTE9SX0xBQkVMXzgsIE1lc3NhZ2VzCisJCQkJCQkuZ2V0U3RyaW5nKCJWaXpQUGFnZS5mZ2M4IiksIGdldEZpZWxkRWRpdG9yUGFyZW50KCkpOworCQlmb3JlZ3JvdW5kQ29sb3JGaWVsZEVkaXRvcjkgPSBuZXcgQ29sb3JGaWVsZEVkaXRvcigKKwkJCQlQcmVmZXJlbmNlQ29uc3RhbnRzLkZPUkVHUk9VTkRfQ09MT1JfTEFCRUxfOSwgTWVzc2FnZXMKKwkJCQkJCS5nZXRTdHJpbmcoIlZpelBQYWdlLmZnYzkiKSwgZ2V0RmllbGRFZGl0b3JQYXJlbnQoKSk7CisJCWZvcmVncm91bmRDb2xvckZpZWxkRWRpdG9yMTAgPSBuZXcgQ29sb3JGaWVsZEVkaXRvcigKKwkJCQlQcmVmZXJlbmNlQ29uc3RhbnRzLkZPUkVHUk9VTkRfQ09MT1JfTEFCRUxfMTAsIE1lc3NhZ2VzCisJCQkJCQkuZ2V0U3RyaW5nKCJWaXpQUGFnZS5mZ2MxMCIpLCBnZXRGaWVsZEVkaXRvclBhcmVudCgpKTsKKworCQkvLyBEbyBOT1QgYWRkIHRoZSBsYWJlbCBmaWVsZCBlZGl0b3IgZm9yIG5hbWUgREVGQVVMVAorCQkvLyBUaGlzIG11c3QgYmUgaGFyZCBjb2RlZCBhbmQgbm90IGV4cG9zZWQKKwkJLyoKKwkJICogZm9yZWdyb3VuZExhYmVsRmllbGRFZGl0b3JEZWZhdWx0ID0gbmV3IFN0cmluZ0ZpZWxkRWRpdG9yKAorCQkgKiBQcmVmZXJlbmNlQ29uc3RhbnRzLkZPUkVHUk9VTkRfU1RSSU5HX0xBQkVMX0RFRkFVTFQsCisJCSAqIE1lc3NhZ2VzLmdldFN0cmluZygiVml6UFBhZ2UuQkdkZWZhdWx0TmFtZSIpLAorCQkgKiBBVFRSSUJVVEVfTkFNRV9GSUVMRF9XSURUSCwgZ2V0RmllbGRFZGl0b3JQYXJlbnQoKSk7CisJCSAqLworCQkvLyBGb3IgbGFiZWwgbmFtZSBCRzFOYW1lID0gUyAoc2VlIG1lc3NhZ2VzLnByb3BlcnRpZXMpCisJCWZvcmVncm91bmRMYWJlbEZpZWxkRWRpdG9yMSA9IG5ldyBTdHJpbmdGaWVsZEVkaXRvcigKKwkJCQlQcmVmZXJlbmNlQ29uc3RhbnRzLkZPUkVHUk9VTkRfU1RSSU5HX0xBQkVMXzEsIE1lc3NhZ2VzCisJCQkJCQkuZ2V0U3RyaW5nKCJWaXpQUGFnZS5CRzFOYW1lIiksCisJCQkJQVRUUklCVVRFX05BTUVfRklFTERfV0lEVEgsIGdldEZpZWxkRWRpdG9yUGFyZW50KCkpOworCQkvLyBGb3IgbGFiZWwgbmFtZSBCRzJOYW1lID0gRSAoc2VlIG1lc3NhZ2VzLnByb3BlcnRpZXMpCisJCWZvcmVncm91bmRMYWJlbEZpZWxkRWRpdG9yMiA9IG5ldyBTdHJpbmdGaWVsZEVkaXRvcigKKwkJCQlQcmVmZXJlbmNlQ29uc3RhbnRzLkZPUkVHUk9VTkRfU1RSSU5HX0xBQkVMXzIsIE1lc3NhZ2VzCisJCQkJCQkuZ2V0U3RyaW5nKCJWaXpQUGFnZS5CRzJOYW1lIiksCisJCQkJQVRUUklCVVRFX05BTUVfRklFTERfV0lEVEgsIGdldEZpZWxkRWRpdG9yUGFyZW50KCkpOworCQkvLyBGb3IgbGFiZWwgbmFtZSBCRzNOYW1lID0gSSAoc2VlIG1lc3NhZ2VzLnByb3BlcnRpZXMpCisJCWZvcmVncm91bmRMYWJlbEZpZWxkRWRpdG9yMyA9IG5ldyBTdHJpbmdGaWVsZEVkaXRvcigKKwkJCQlQcmVmZXJlbmNlQ29uc3RhbnRzLkZPUkVHUk9VTkRfU1RSSU5HX0xBQkVMXzMsIE1lc3NhZ2VzCisJCQkJCQkuZ2V0U3RyaW5nKCJWaXpQUGFnZS5CRzNOYW1lIiksCisJCQkJQVRUUklCVVRFX05BTUVfRklFTERfV0lEVEgsIGdldEZpZWxkRWRpdG9yUGFyZW50KCkpOworCQkvLyBGb3IgbGFiZWwgbmFtZSBCRzROYW1lID0gUiAoc2VlIG1lc3NhZ2VzLnByb3BlcnRpZXMpCisJCWZvcmVncm91bmRMYWJlbEZpZWxkRWRpdG9yNCA9IG5ldyBTdHJpbmdGaWVsZEVkaXRvcigKKwkJCQlQcmVmZXJlbmNlQ29uc3RhbnRzLkZPUkVHUk9VTkRfU1RSSU5HX0xBQkVMXzQsIE1lc3NhZ2VzCisJCQkJCQkuZ2V0U3RyaW5nKCJWaXpQUGFnZS5CRzROYW1lIiksCisJCQkJQVRUUklCVVRFX05BTUVfRklFTERfV0lEVEgsIGdldEZpZWxkRWRpdG9yUGFyZW50KCkpOworCQkvLyBGb3IgbGFiZWwgbmFtZSBCRzVOYW1lID0gUCAoc2VlIG1lc3NhZ2VzLnByb3BlcnRpZXMpCisJCWZvcmVncm91bmRMYWJlbEZpZWxkRWRpdG9yNSA9IG5ldyBTdHJpbmdGaWVsZEVkaXRvcigKKwkJCQlQcmVmZXJlbmNlQ29uc3RhbnRzLkZPUkVHUk9VTkRfU1RSSU5HX0xBQkVMXzUsIE1lc3NhZ2VzCisJCQkJCQkuZ2V0U3RyaW5nKCJWaXpQUGFnZS5CRzVOYW1lIiksCisJCQkJQVRUUklCVVRFX05BTUVfRklFTERfV0lEVEgsIGdldEZpZWxkRWRpdG9yUGFyZW50KCkpOworCQkvLyBGb3IgbGFiZWwgbmFtZSBCRzZOYW1lID0gSVIgKHNlZSBtZXNzYWdlcy5wcm9wZXJ0aWVzKQorCQlmb3JlZ3JvdW5kTGFiZWxGaWVsZEVkaXRvcjYgPSBuZXcgU3RyaW5nRmllbGRFZGl0b3IoCisJCQkJUHJlZmVyZW5jZUNvbnN0YW50cy5GT1JFR1JPVU5EX1NUUklOR19MQUJFTF82LCBNZXNzYWdlcworCQkJCQkJLmdldFN0cmluZygiVml6UFBhZ2UuQkc2TmFtZSIpLAorCQkJCUFUVFJJQlVURV9OQU1FX0ZJRUxEX1dJRFRILCBnZXRGaWVsZEVkaXRvclBhcmVudCgpKTsKKwkJLy8gRm9yIGxhYmVsIG5hbWUgQkc3TmFtZSA9IElGIChzZWUgbWVzc2FnZXMucHJvcGVydGllcykKKwkJZm9yZWdyb3VuZExhYmVsRmllbGRFZGl0b3I3ID0gbmV3IFN0cmluZ0ZpZWxkRWRpdG9yKAorCQkJCVByZWZlcmVuY2VDb25zdGFudHMuRk9SRUdST1VORF9TVFJJTkdfTEFCRUxfNywgTWVzc2FnZXMKKwkJCQkJCS5nZXRTdHJpbmcoIlZpelBQYWdlLkJHN05hbWUiKSwKKwkJCQlBVFRSSUJVVEVfTkFNRV9GSUVMRF9XSURUSCwgZ2V0RmllbGRFZGl0b3JQYXJlbnQoKSk7CisJCQorCQkvLyBGb3IgbGFiZWwgbmFtZSBCRzhOYW1lID0gSUYgKHNlZSBtZXNzYWdlcy5wcm9wZXJ0aWVzKQorCQlmb3JlZ3JvdW5kTGFiZWxGaWVsZEVkaXRvcjggPSBuZXcgU3RyaW5nRmllbGRFZGl0b3IoCisJCQkJUHJlZmVyZW5jZUNvbnN0YW50cy5GT1JFR1JPVU5EX1NUUklOR19MQUJFTF84LCBNZXNzYWdlcworCQkJCQkJLmdldFN0cmluZygiVml6UFBhZ2UuQkc4TmFtZSIpLAorCQkJCUFUVFJJQlVURV9OQU1FX0ZJRUxEX1dJRFRILCBnZXRGaWVsZEVkaXRvclBhcmVudCgpKTsKKwkJLy8gRm9yIGxhYmVsIG5hbWUgQkc5TmFtZSA9IElGIChzZWUgbWVzc2FnZXMucHJvcGVydGllcykKKwkJZm9yZWdyb3VuZExhYmVsRmllbGRFZGl0b3I5ID0gbmV3IFN0cmluZ0ZpZWxkRWRpdG9yKAorCQkJCVByZWZlcmVuY2VDb25zdGFudHMuRk9SRUdST1VORF9TVFJJTkdfTEFCRUxfOSwgTWVzc2FnZXMKKwkJCQkJCS5nZXRTdHJpbmcoIlZpelBQYWdlLkJHOU5hbWUiKSwKKwkJCQlBVFRSSUJVVEVfTkFNRV9GSUVMRF9XSURUSCwgZ2V0RmllbGRFZGl0b3JQYXJlbnQoKSk7CisJCS8vIEZvciBsYWJlbCBuYW1lIEJHMTBOYW1lID0gSUYgKHNlZSBtZXNzYWdlcy5wcm9wZXJ0aWVzKQorCQlmb3JlZ3JvdW5kTGFiZWxGaWVsZEVkaXRvcjEwID0gbmV3IFN0cmluZ0ZpZWxkRWRpdG9yKAorCQkJCVByZWZlcmVuY2VDb25zdGFudHMuRk9SRUdST1VORF9TVFJJTkdfTEFCRUxfMTAsIE1lc3NhZ2VzCisJCQkJCQkuZ2V0U3RyaW5nKCJWaXpQUGFnZS5CRzEwTmFtZSIpLAorCQkJCUFUVFJJQlVURV9OQU1FX0ZJRUxEX1dJRFRILCBnZXRGaWVsZEVkaXRvclBhcmVudCgpKTsKKworCQkvLyBhZGQgYWxsIGNvbXBvbmVudHMKKwkJYWRkRmllbGQoaW5pdGlhbEF0dHJpYnV0ZU5hbWVGaWVsZEVkaXRvcjEpOworCQlhZGRGaWVsZChpbml0aWFsQXR0cmlidXRlTmFtZUZpZWxkRWRpdG9yMik7CisJCS8vIEFkZCB0aGUgY29sb3IgZmllbGQgZWRpdG9ycworCQlhZGRGaWVsZChmb3JlZ3JvdW5kQ29sb3JGaWVsZEVkaXRvckRlZmF1bHQpOworCQkvLyBEbyBOT1QgYWRkIHRoZSBsYWJlbCBmaWVsZCBlZGl0b3IgZm9yIG5hbWUgREVGQVVMVAorCQkvLyBUaGlzIG11c3QgYmUgaGFyZCBjb2RlZCBhbmQgbm90IGV4cG9zZWQKKwkJLy8gYWRkRmllbGQoZm9yZWdyb3VuZExhYmVsRmllbGRFZGl0b3JEZWZhdWx0KTsKKworCQlhZGRGaWVsZChmb3JlZ3JvdW5kQ29sb3JGaWVsZEVkaXRvcjEpOworCQlhZGRGaWVsZChmb3JlZ3JvdW5kTGFiZWxGaWVsZEVkaXRvcjEpOworCisJCWFkZEZpZWxkKGZvcmVncm91bmRDb2xvckZpZWxkRWRpdG9yMik7CisJCWFkZEZpZWxkKGZvcmVncm91bmRMYWJlbEZpZWxkRWRpdG9yMik7CisKKwkJYWRkRmllbGQoZm9yZWdyb3VuZENvbG9yRmllbGRFZGl0b3IzKTsKKwkJYWRkRmllbGQoZm9yZWdyb3VuZExhYmVsRmllbGRFZGl0b3IzKTsKKworCQlhZGRGaWVsZChmb3JlZ3JvdW5kQ29sb3JGaWVsZEVkaXRvcjQpOworCQlhZGRGaWVsZChmb3JlZ3JvdW5kTGFiZWxGaWVsZEVkaXRvcjQpOworCisJCWFkZEZpZWxkKGZvcmVncm91bmRDb2xvckZpZWxkRWRpdG9yNSk7CisJCWFkZEZpZWxkKGZvcmVncm91bmRMYWJlbEZpZWxkRWRpdG9yNSk7CisKKworCQlhZGRGaWVsZChmb3JlZ3JvdW5kQ29sb3JGaWVsZEVkaXRvcjYpOworCQlhZGRGaWVsZChmb3JlZ3JvdW5kTGFiZWxGaWVsZEVkaXRvcjYpOworCisKKwkJYWRkRmllbGQoZm9yZWdyb3VuZENvbG9yRmllbGRFZGl0b3I3KTsKKwkJYWRkRmllbGQoZm9yZWdyb3VuZExhYmVsRmllbGRFZGl0b3I3KTsKKwkJCisJCWFkZEZpZWxkKGZvcmVncm91bmRDb2xvckZpZWxkRWRpdG9yOCk7CisJCWFkZEZpZWxkKGZvcmVncm91bmRMYWJlbEZpZWxkRWRpdG9yOCk7CisJCQorCQlhZGRGaWVsZChmb3JlZ3JvdW5kQ29sb3JGaWVsZEVkaXRvcjkpOworCQlhZGRGaWVsZChmb3JlZ3JvdW5kTGFiZWxGaWVsZEVkaXRvcjkpOworCQkKKwkJYWRkRmllbGQoZm9yZWdyb3VuZENvbG9yRmllbGRFZGl0b3IxMCk7CisJCWFkZEZpZWxkKGZvcmVncm91bmRMYWJlbEZpZWxkRWRpdG9yMTApOworCisJfS8vIGNyZWF0ZUZpZWxkRWRpdG9ycworCisJLyoqCisJICogQHJldHVybiB0aGUgbWFwcGluZyBiZXR3ZWVuIHRoZSBkaXNwbGF5IG5hbWUgb2YgYW4gYXR0cmlidXRlIGFuZCB0aGUKKwkgKiAgICAgICAgIGNvbG9yIHRvIGJlIHVzZWQgdG8gZGlzcGxheSBpdHMgdmFsdWUuCisJICovCisJcHVibGljIHN0YXRpYyBNYXA8U3RyaW5nLCBDb2xvcj4gZ2V0Q29sb3JNYXBwaW5nKCkgeworCisJCS8vCisJCWZpbmFsIFByZWZlcmVuY2VzIHByZWZlcmVuY2VzID0gQWN0aXZhdG9yLmdldERlZmF1bHQoKQorCQkJCS5nZXRQbHVnaW5QcmVmZXJlbmNlcygpOworCisJCURldmljZSBkZXZpY2UgPSBBY3RpdmF0b3IuZ2V0RGVmYXVsdCgpLmdldFdvcmtiZW5jaCgpLmdldERpc3BsYXkoKTsKKwkJCisJCS8vIEFkZCB0aGUgZGVmYXVsdCBjb2xvciAoYWx3YXlzIHRoZSBzYW1lIGtleSkKKwkJZmluYWwgUkdCIGRlZmF1bHRSR0IgPSBTdHJpbmdDb252ZXJ0ZXIuYXNSR0IocHJlZmVyZW5jZXMKKwkJCQkuZ2V0U3RyaW5nKFByZWZlcmVuY2VDb25zdGFudHMuRk9SRUdST1VORF9DT0xPUl9ERUZBVUxUKSk7CisJCQorCQlmaW5hbCBDb2xvciBjb2xvckRlZiA9IG5ldyBDb2xvcihkZXZpY2UsIGRlZmF1bHRSR0IucmVkLAorCQkJCWRlZmF1bHRSR0IuZ3JlZW4sIGRlZmF1bHRSR0IuYmx1ZSk7CisJCWNvbG9yUHJlZmVyZW5jZU1hcC5wdXQoRk9SRUdST1VORF9BVFRSSUJVVEVfTkFNRV9ERUZBVUxUX1NUUklORywKKwkJCQljb2xvckRlZik7CisKKwkJLy8gQWRkIHRoZSBhdHRyaWJ1dGUgbGFiZWxzIGFzIGtleXMgYW5kIHRoZSBwcmVmZXJyZWQgY29sb3JzCisJCWZpbmFsIFJHQiByZ2IxID0gU3RyaW5nQ29udmVydGVyLmFzUkdCKHByZWZlcmVuY2VzCisJCQkJLmdldFN0cmluZyhQcmVmZXJlbmNlQ29uc3RhbnRzLkZPUkVHUk9VTkRfQ09MT1JfTEFCRUxfMSkpOworCQlmaW5hbCBDb2xvciBjb2xvcjEgPSBuZXcgQ29sb3IoZGV2aWNlLCByZ2IxLnJlZCwgcmdiMS5ncmVlbiwKKwkJCQlyZ2IxLmJsdWUpOworCisJCWZpbmFsIFJHQiByZ2IyID0gU3RyaW5nQ29udmVydGVyLmFzUkdCKHByZWZlcmVuY2VzCisJCQkJLmdldFN0cmluZyhQcmVmZXJlbmNlQ29uc3RhbnRzLkZPUkVHUk9VTkRfQ09MT1JfTEFCRUxfMikpOworCQlmaW5hbCBDb2xvciBjb2xvcjIgPSBuZXcgQ29sb3IoZGV2aWNlLCByZ2IyLnJlZCwgcmdiMi5ncmVlbiwKKwkJCQlyZ2IyLmJsdWUpOworCisJCWZpbmFsIFJHQiByZ2IzID0gU3RyaW5nQ29udmVydGVyLmFzUkdCKHByZWZlcmVuY2VzCisJCQkJLmdldFN0cmluZyhQcmVmZXJlbmNlQ29uc3RhbnRzLkZPUkVHUk9VTkRfQ09MT1JfTEFCRUxfMykpOworCQlmaW5hbCBDb2xvciBjb2xvcjMgPSBuZXcgQ29sb3IoZGV2aWNlLCByZ2IzLnJlZCwgcmdiMy5ncmVlbiwKKwkJCQlyZ2IzLmJsdWUpOworCisJCWZpbmFsIFJHQiByZ2I0ID0gU3RyaW5nQ29udmVydGVyLmFzUkdCKHByZWZlcmVuY2VzCisJCQkJLmdldFN0cmluZyhQcmVmZXJlbmNlQ29uc3RhbnRzLkZPUkVHUk9VTkRfQ09MT1JfTEFCRUxfNCkpOworCQlmaW5hbCBDb2xvciBjb2xvcjQgPSBuZXcgQ29sb3IoZGV2aWNlLCByZ2I0LnJlZCwgcmdiNC5ncmVlbiwKKwkJCQlyZ2I0LmJsdWUpOworCisJCWZpbmFsIFJHQiByZ2I1ID0gU3RyaW5nQ29udmVydGVyLmFzUkdCKHByZWZlcmVuY2VzCisJCQkJLmdldFN0cmluZyhQcmVmZXJlbmNlQ29uc3RhbnRzLkZPUkVHUk9VTkRfQ09MT1JfTEFCRUxfNSkpOworCQlmaW5hbCBDb2xvciBjb2xvcjUgPSBuZXcgQ29sb3IoZGV2aWNlLCByZ2I1LnJlZCwgcmdiNS5ncmVlbiwKKwkJCQlyZ2I1LmJsdWUpOworCQorCQlmaW5hbCBSR0IgcmdiNiA9IFN0cmluZ0NvbnZlcnRlci5hc1JHQihwcmVmZXJlbmNlcworCQkJCS5nZXRTdHJpbmcoUHJlZmVyZW5jZUNvbnN0YW50cy5GT1JFR1JPVU5EX0NPTE9SX0xBQkVMXzYpKTsKKwkJZmluYWwgQ29sb3IgY29sb3I2ID0gbmV3IENvbG9yKGRldmljZSwgcmdiNi5yZWQsIHJnYjYuZ3JlZW4sCisJCQkJcmdiNi5ibHVlKTsKKworCQlmaW5hbCBSR0IgcmdiNyA9IFN0cmluZ0NvbnZlcnRlci5hc1JHQihwcmVmZXJlbmNlcworCQkJCS5nZXRTdHJpbmcoUHJlZmVyZW5jZUNvbnN0YW50cy5GT1JFR1JPVU5EX0NPTE9SX0xBQkVMXzcpKTsKKwkJZmluYWwgQ29sb3IgY29sb3I3ID0gbmV3IENvbG9yKGRldmljZSwgcmdiNy5yZWQsIHJnYjcuZ3JlZW4sCisJCQkJcmdiNy5ibHVlKTsKKwkJCisJCQorCQlmaW5hbCBSR0IgcmdiOCA9IFN0cmluZ0NvbnZlcnRlci5hc1JHQihwcmVmZXJlbmNlcworCQkJCS5nZXRTdHJpbmcoUHJlZmVyZW5jZUNvbnN0YW50cy5GT1JFR1JPVU5EX0NPTE9SX0xBQkVMXzgpKTsKKwkJZmluYWwgQ29sb3IgY29sb3I4ID0gbmV3IENvbG9yKGRldmljZSwgcmdiOC5yZWQsIHJnYjguZ3JlZW4sCisJCQkJcmdiOC5ibHVlKTsKKwkJCisJCWZpbmFsIFJHQiByZ2I5ID0gU3RyaW5nQ29udmVydGVyLmFzUkdCKHByZWZlcmVuY2VzCisJCQkJLmdldFN0cmluZyhQcmVmZXJlbmNlQ29uc3RhbnRzLkZPUkVHUk9VTkRfQ09MT1JfTEFCRUxfOSkpOworCQlmaW5hbCBDb2xvciBjb2xvcjkgPSBuZXcgQ29sb3IoZGV2aWNlLCByZ2I5LnJlZCwgcmdiOS5ncmVlbiwKKwkJCQlyZ2I5LmJsdWUpOworCQkKKwkJZmluYWwgUkdCIHJnYjEwID0gU3RyaW5nQ29udmVydGVyLmFzUkdCKHByZWZlcmVuY2VzCisJCQkJLmdldFN0cmluZyhQcmVmZXJlbmNlQ29uc3RhbnRzLkZPUkVHUk9VTkRfQ09MT1JfTEFCRUxfMTApKTsKKwkJZmluYWwgQ29sb3IgY29sb3IxMCA9IG5ldyBDb2xvcihkZXZpY2UsIHJnYjEwLnJlZCwgcmdiMTAuZ3JlZW4sCisJCQkJcmdiMTAuYmx1ZSk7CisJCQorCisKKwkJZmluYWwgU3RyaW5nIGtleTEgPSBwcmVmZXJlbmNlcworCQkJCS5nZXRTdHJpbmcoUHJlZmVyZW5jZUNvbnN0YW50cy5GT1JFR1JPVU5EX1NUUklOR19MQUJFTF8xKTsKKwkJZmluYWwgU3RyaW5nIGtleTIgPSBwcmVmZXJlbmNlcworCQkJCS5nZXRTdHJpbmcoUHJlZmVyZW5jZUNvbnN0YW50cy5GT1JFR1JPVU5EX1NUUklOR19MQUJFTF8yKTsKKwkJZmluYWwgU3RyaW5nIGtleTMgPSBwcmVmZXJlbmNlcworCQkJCS5nZXRTdHJpbmcoUHJlZmVyZW5jZUNvbnN0YW50cy5GT1JFR1JPVU5EX1NUUklOR19MQUJFTF8zKTsKKwkJZmluYWwgU3RyaW5nIGtleTQgPSBwcmVmZXJlbmNlcworCQkJCS5nZXRTdHJpbmcoUHJlZmVyZW5jZUNvbnN0YW50cy5GT1JFR1JPVU5EX1NUUklOR19MQUJFTF80KTsKKwkJZmluYWwgU3RyaW5nIGtleTUgPSBwcmVmZXJlbmNlcworCQkJCS5nZXRTdHJpbmcoUHJlZmVyZW5jZUNvbnN0YW50cy5GT1JFR1JPVU5EX1NUUklOR19MQUJFTF81KTsKKwkJZmluYWwgU3RyaW5nIGtleTYgPSBwcmVmZXJlbmNlcworCQkJCS5nZXRTdHJpbmcoUHJlZmVyZW5jZUNvbnN0YW50cy5GT1JFR1JPVU5EX1NUUklOR19MQUJFTF82KTsKKwkJZmluYWwgU3RyaW5nIGtleTcgPSBwcmVmZXJlbmNlcworCQkJCS5nZXRTdHJpbmcoUHJlZmVyZW5jZUNvbnN0YW50cy5GT1JFR1JPVU5EX1NUUklOR19MQUJFTF83KTsKKwkJZmluYWwgU3RyaW5nIGtleTggPSBwcmVmZXJlbmNlcworCQkuZ2V0U3RyaW5nKFByZWZlcmVuY2VDb25zdGFudHMuRk9SRUdST1VORF9TVFJJTkdfTEFCRUxfOCk7CisJCWZpbmFsIFN0cmluZyBrZXk5ID0gcHJlZmVyZW5jZXMKKwkJLmdldFN0cmluZyhQcmVmZXJlbmNlQ29uc3RhbnRzLkZPUkVHUk9VTkRfU1RSSU5HX0xBQkVMXzkpOworCQlmaW5hbCBTdHJpbmcga2V5MTAgPSBwcmVmZXJlbmNlcworCQkuZ2V0U3RyaW5nKFByZWZlcmVuY2VDb25zdGFudHMuRk9SRUdST1VORF9TVFJJTkdfTEFCRUxfMTApOworCisJCWNvbG9yUHJlZmVyZW5jZU1hcC5wdXQoa2V5MSwgY29sb3IxKTsKKwkJY29sb3JQcmVmZXJlbmNlTWFwLnB1dChrZXkyLCBjb2xvcjIpOworCQljb2xvclByZWZlcmVuY2VNYXAucHV0KGtleTMsIGNvbG9yMyk7CisJCWNvbG9yUHJlZmVyZW5jZU1hcC5wdXQoa2V5NCwgY29sb3I0KTsKKwkJY29sb3JQcmVmZXJlbmNlTWFwLnB1dChrZXk1LCBjb2xvcjUpOworCQljb2xvclByZWZlcmVuY2VNYXAucHV0KGtleTYsIGNvbG9yNik7CisJCWNvbG9yUHJlZmVyZW5jZU1hcC5wdXQoa2V5NywgY29sb3I3KTsKKwkJY29sb3JQcmVmZXJlbmNlTWFwLnB1dChrZXk4LCBjb2xvcjgpOworCQljb2xvclByZWZlcmVuY2VNYXAucHV0KGtleTksIGNvbG9yOSk7CisJCWNvbG9yUHJlZmVyZW5jZU1hcC5wdXQoa2V5MTAsIGNvbG9yMTApOworCQkKKwkJcmV0dXJuIGNvbG9yUHJlZmVyZW5jZU1hcDsKKwl9IC8vIGdldENvbG9yTWFwcGluZworCQorCS8qKgorCSAqIEByZXR1cm4gYSBzZXQgb2YgU3RyaW5ncyAobGFiZWxzKSBmb3Igd2hpY2ggdGhlIHVzZXIgaGFzCisJICogZGVmaW5lZCBjb2xvciBwcmVmZXJlbmNlcy4KKwkgKi8KKwlwdWJsaWMgc3RhdGljIFNldDxTdHJpbmc+IGdldFByZWZlcmVuY2VTZXQoKSB7CisJCQorCQlIYXNoU2V0PFN0cmluZz4gcHJlZlNldCA9IG5ldyBIYXNoU2V0PFN0cmluZz4oKTsKKwkJZmluYWwgUHJlZmVyZW5jZXMgcHJlZmVyZW5jZXMgPSBBY3RpdmF0b3IuZ2V0RGVmYXVsdCgpCisJCQkJLmdldFBsdWdpblByZWZlcmVuY2VzKCk7CisJCWZpbmFsIFN0cmluZyBrZXkxID0gcHJlZmVyZW5jZXMKKwkJCQkuZ2V0U3RyaW5nKFByZWZlcmVuY2VDb25zdGFudHMuRk9SRUdST1VORF9TVFJJTkdfTEFCRUxfMSk7CisJCWZpbmFsIFN0cmluZyBrZXkyID0gcHJlZmVyZW5jZXMKKwkJCQkuZ2V0U3RyaW5nKFByZWZlcmVuY2VDb25zdGFudHMuRk9SRUdST1VORF9TVFJJTkdfTEFCRUxfMik7CisJCWZpbmFsIFN0cmluZyBrZXkzID0gcHJlZmVyZW5jZXMKKwkJCQkuZ2V0U3RyaW5nKFByZWZlcmVuY2VDb25zdGFudHMuRk9SRUdST1VORF9TVFJJTkdfTEFCRUxfMyk7CisJCWZpbmFsIFN0cmluZyBrZXk0ID0gcHJlZmVyZW5jZXMKKwkJCQkuZ2V0U3RyaW5nKFByZWZlcmVuY2VDb25zdGFudHMuRk9SRUdST1VORF9TVFJJTkdfTEFCRUxfNCk7CisJCWZpbmFsIFN0cmluZyBrZXk1ID0gcHJlZmVyZW5jZXMKKwkJCQkuZ2V0U3RyaW5nKFByZWZlcmVuY2VDb25zdGFudHMuRk9SRUdST1VORF9TVFJJTkdfTEFCRUxfNSk7CisJCWZpbmFsIFN0cmluZyBrZXk2ID0gcHJlZmVyZW5jZXMKKwkJCQkuZ2V0U3RyaW5nKFByZWZlcmVuY2VDb25zdGFudHMuRk9SRUdST1VORF9TVFJJTkdfTEFCRUxfNik7CisJCWZpbmFsIFN0cmluZyBrZXk3ID0gcHJlZmVyZW5jZXMKKwkJCQkuZ2V0U3RyaW5nKFByZWZlcmVuY2VDb25zdGFudHMuRk9SRUdST1VORF9TVFJJTkdfTEFCRUxfNyk7CisJCWZpbmFsIFN0cmluZyBrZXk4ID0gcHJlZmVyZW5jZXMKKwkJLmdldFN0cmluZyhQcmVmZXJlbmNlQ29uc3RhbnRzLkZPUkVHUk9VTkRfU1RSSU5HX0xBQkVMXzgpOworCQlmaW5hbCBTdHJpbmcga2V5OSA9IHByZWZlcmVuY2VzCisJCS5nZXRTdHJpbmcoUHJlZmVyZW5jZUNvbnN0YW50cy5GT1JFR1JPVU5EX1NUUklOR19MQUJFTF85KTsKKwkJZmluYWwgU3RyaW5nIGtleTEwID0gcHJlZmVyZW5jZXMKKwkJLmdldFN0cmluZyhQcmVmZXJlbmNlQ29uc3RhbnRzLkZPUkVHUk9VTkRfU1RSSU5HX0xBQkVMXzEwKTsKKworCQlwcmVmU2V0LmFkZChrZXkxKTsKKwkJcHJlZlNldC5hZGQoa2V5Mik7CisJCXByZWZTZXQuYWRkKGtleTMpOworCQlwcmVmU2V0LmFkZChrZXk0KTsKKwkJcHJlZlNldC5hZGQoa2V5NSk7CisJCXByZWZTZXQuYWRkKGtleTYpOworCQlwcmVmU2V0LmFkZChrZXk3KTsKKwkJcHJlZlNldC5hZGQoa2V5OCk7CisJCXByZWZTZXQuYWRkKGtleTkpOworCQlwcmVmU2V0LmFkZChrZXkxMCk7CisJCQorCQlyZXR1cm4gcHJlZlNldDsKKwl9Ly8gZ2V0IHByZWZTZXQKKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaFByZWZlcmVuY2VQYWdlI2luaXQob3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaCkKKwkgKi8KKwlwdWJsaWMgdm9pZCBpbml0KEBTdXBwcmVzc1dhcm5pbmdzKCJ1bnVzZWQiKQorCWZpbmFsIElXb3JrYmVuY2ggd29ya2JlbmNoKSB7CisJCS8vIE5vdGhpbmcKKwl9IC8vIGluaXQKKworfSAvLyBWaXN1YWxpemF0aW9uUHJlZmVyZW5jZVBhZ2UKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9wcmVmZXJlbmNlcy9tZXNzYWdlcy5wcm9wZXJ0aWVzIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3ByZWZlcmVuY2VzL21lc3NhZ2VzLnByb3BlcnRpZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGFmNjZlNQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9wcmVmZXJlbmNlcy9tZXNzYWdlcy5wcm9wZXJ0aWVzCkBAIC0wLDAgKzEsNTggQEAKKyMgUHJlZmVyZW5jZU1lc3NhZ2VzLnByb3BlcnRpZXMKKyMKKyMgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyMgKiBDb3B5cmlnaHQgKGMpIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisjICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworIyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorIyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisjICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyMgKgorIyAqIENvbnRyaWJ1dG9yczoKKyMgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisjICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK1NURU1QUGFnZS5TVEVNPVNURU0KK1NURU1WUGFnZS5WaXo9VmlzdWFsaXphdGlvbgorCitWaXpQUGFnZS5Jbml0aWFsTmFtZTEgPSAmSW5pdGlhbCBZLWF4aXMgYXR0cmlidXRlOgorVml6UFBhZ2UuSW5pdGlhbE5hbWUyID0gJkluaXRpYWwgWC1heGlzIGF0dHJpYnV0ZToKKworVml6UFBhZ2UuZmdjZCA9ICZEZWZhdWx0IEZvcmVncm91bmQgQ29sb3IKK1ZpelBQYWdlLmZnYzEgPSAmRm9yZWdyb3VuZCBDb2xvcjEKK1ZpelBQYWdlLmZnYzIgPSAmRm9yZWdyb3VuZCBDb2xvcjIKK1ZpelBQYWdlLmZnYzMgPSAmRm9yZWdyb3VuZCBDb2xvcjMKK1ZpelBQYWdlLmZnYzQgPSAmRm9yZWdyb3VuZCBDb2xvcjQKK1ZpelBQYWdlLmZnYzUgPSAmRm9yZWdyb3VuZCBDb2xvcjUKK1ZpelBQYWdlLmZnYzYgPSAmRm9yZWdyb3VuZCBDb2xvcjYKK1ZpelBQYWdlLmZnYzcgPSAmRm9yZWdyb3VuZCBDb2xvcjcKK1ZpelBQYWdlLmZnYzggPSAmRm9yZWdyb3VuZCBDb2xvcjgKK1ZpelBQYWdlLmZnYzkgPSAmRm9yZWdyb3VuZCBDb2xvcjkKK1ZpelBQYWdlLmZnYzEwID0gJkZvcmVncm91bmQgQ29sb3IxMAorCitWaXpQUGFnZS5CR2RlZmF1bHROYW1lID0gJkRlZmF1bHQgRm9yZWdyb3VuZAorVml6UFBhZ2UuQkcxTmFtZSA9ICZGb3JlZ3JvdW5kIFByb3BlcnR5MQorVml6UFBhZ2UuQkcyTmFtZSA9ICZGb3JlZ3JvdW5kIFByb3BlcnR5MgorVml6UFBhZ2UuQkczTmFtZSA9ICZGb3JlZ3JvdW5kIFByb3BlcnR5MworVml6UFBhZ2UuQkc0TmFtZSA9ICZGb3JlZ3JvdW5kIFByb3BlcnR5NAorVml6UFBhZ2UuQkc1TmFtZSA9ICZGb3JlZ3JvdW5kIFByb3BlcnR5NQorVml6UFBhZ2UuQkc2TmFtZSA9ICZGb3JlZ3JvdW5kIFByb3BlcnR5NgorVml6UFBhZ2UuQkc3TmFtZSA9ICZGb3JlZ3JvdW5kIFByb3BlcnR5NworVml6UFBhZ2UuQkc4TmFtZSA9ICZGb3JlZ3JvdW5kIFByb3BlcnR5OAorVml6UFBhZ2UuQkc5TmFtZSA9ICZGb3JlZ3JvdW5kIFByb3BlcnR5OQorVml6UFBhZ2UuQkcxME5hbWUgPSAmRm9yZWdyb3VuZCBQcm9wZXJ0eTEwCisKK0RNUFBhZ2VTaW1UaHJlYWRzPSZOdW1iZXIgb2YgY29uY3VycmVudCB3b3JrZXIgdGhyZWFkcyAKK0RNUFBhZ2VUSVRMRT0mU29sdmVyIFByZWZlcmVuY2VzCitETVBQYWdlRGVmYXVsdFNvbHZlcj0mRGVmYXVsdCBzb2x2ZXIKKworc3RlbVw6Ly9vcmcuZWNsaXBzZS5zdGVtL2VkZ2UvbWlncmF0aW9uID0gSHVtYW4gTWlncmF0aW9uCitzdGVtXDovL29yZy5lY2xpcHNlLnN0ZW0vZWRnZS9waXBldHJhbnNwb3J0ID0gQWlyIFRyYW5zcG9ydAorc3RlbVw6Ly9vcmcuZWNsaXBzZS5zdGVtL2VkZ2UvcmVsYXRpb25zaGlwL2NvbW1vbmJvcmRlciA9IENvbW1vbiBCb3JkZXJzCitzdGVtXDovL29yZy5lY2xpcHNlLnN0ZW0vZWRnZS9yZWxhdGlvbnNoaXAvcmVsYXRpdmVwaHlzaWNhbCA9IFJlbGF0aXZlIFBoeXNpY2Fscworc3RlbVw6Ly9vcmcuZWNsaXBzZS5zdGVtL2VkZ2UvcmVsYXRpb25zaGlwL3JvYWQgPSBSb2Fkcworc3RlbVw6Ly9vcmcuZWNsaXBzZS5zdGVtL2VkZ2UvcmVsYXRpb25zaGlwL2FpciA9IEFpcgorc3RlbVw6Ly9vcmcuZWNsaXBzZS5zdGVtL2VkZ2UvcmVsYXRpb25zaGlwL3JvYWR0cmFuc3BvcnQyMDAxID0gUm9hZCBUcmFuc3BvcnQgMjAwMQorc3RlbVw6Ly9vcmcuZWNsaXBzZS5zdGVtL2VkZ2UvcmVsYXRpb25zaGlwL3JvYWR0cmFuc3BvcnQyMDA0ID0gUm9hZCBUcmFuc3BvcnQgMjAwNAorc3RlbVw6Ly9vcmcuZWNsaXBzZS5zdGVtL2VkZ2UvcmVsYXRpb25zaGlwL3JvYWR0cmFuc3BvcnQyMDA3ID0gUm9hZCBUcmFuc3BvcnQgMjAwNworc3RlbVw6Ly9vcmcuZWNsaXBzZS5zdGVtL2VkZ2UvcmVsYXRpb25zaGlwL2FpcnRyYW5zcG9ydDIwMDYgPSBBaXIgVHJhbnNwb3J0IDIwMDYKK3N0ZW1cOi8vb3JnLmVjbGlwc2Uuc3RlbS9lZGdlL21pZ3JhdGlvbi9yZWxhdGlvbnNoaXAgPSBNaWdyYXRpb24KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9wcmVmZXJlbmNlcy9tZXNzYWdlc19kZS5wcm9wZXJ0aWVzIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3ByZWZlcmVuY2VzL21lc3NhZ2VzX2RlLnByb3BlcnRpZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGU1NWIwYQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9wcmVmZXJlbmNlcy9tZXNzYWdlc19kZS5wcm9wZXJ0aWVzCkBAIC0wLDAgKzEsNTggQEAKKyMgUHJlZmVyZW5jZU1lc3NhZ2VzLnByb3BlcnRpZXMKKyMKKyMgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyMgKiBDb3B5cmlnaHQgKGMpIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisjICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworIyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorIyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisjICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyMgKgorIyAqIENvbnRyaWJ1dG9yczoKKyMgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisjICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK1NURU1QUGFnZS5TVEVNPVNURU0KK1NURU1WUGFnZS5WaXo9VmlzdWFsaXNpZXJ1bmcKKworVml6UFBhZ2UuSW5pdGlhbE5hbWUxPSZJbml0aWFsIFktYXhpcyBhdHRyaWJ1dGU6CitWaXpQUGFnZS5Jbml0aWFsTmFtZTI9JkluaXRpYWwgWC1heGlzIGF0dHJpYnV0ZToKKworVml6UFBhZ2UuZmdjZD0mRGVmYXVsdCBGb3JlZ3JvdW5kIENvbG9yCitWaXpQUGFnZS5mZ2MxPSZGb3JlZ3JvdW5kIENvbG9yMQorVml6UFBhZ2UuZmdjMj0mRm9yZWdyb3VuZCBDb2xvcjIKK1ZpelBQYWdlLmZnYzM9JkZvcmVncm91bmQgQ29sb3IzCitWaXpQUGFnZS5mZ2M0PSZGb3JlZ3JvdW5kIENvbG9yNAorVml6UFBhZ2UuZmdjNT0mRm9yZWdyb3VuZCBDb2xvcjUKK1ZpelBQYWdlLmZnYzY9JkZvcmVncm91bmQgQ29sb3I2CitWaXpQUGFnZS5mZ2M3PSZGb3JlZ3JvdW5kIENvbG9yNworVml6UFBhZ2UuZmdjOD0mRm9yZWdyb3VuZCBDb2xvcjgKK1ZpelBQYWdlLmZnYzk9JkZvcmVncm91bmQgQ29sb3I5CitWaXpQUGFnZS5mZ2MxMD0mRm9yZWdyb3VuZCBDb2xvcjEwCisKK1ZpelBQYWdlLkJHZGVmYXVsdE5hbWU9JkRlZmF1bHQgRm9yZWdyb3VuZAorVml6UFBhZ2UuQkcxTmFtZT0mRm9yZWdyb3VuZCBQcm9wZXJ0eTEKK1ZpelBQYWdlLkJHMk5hbWU9JkZvcmVncm91bmQgUHJvcGVydHkyCitWaXpQUGFnZS5CRzNOYW1lPSZGb3JlZ3JvdW5kIFByb3BlcnR5MworVml6UFBhZ2UuQkc0TmFtZT0mRm9yZWdyb3VuZCBQcm9wZXJ0eTQKK1ZpelBQYWdlLkJHNU5hbWU9JkZvcmVncm91bmQgUHJvcGVydHk1CitWaXpQUGFnZS5CRzZOYW1lPSZGb3JlZ3JvdW5kIFByb3BlcnR5NgorVml6UFBhZ2UuQkc3TmFtZT0mRm9yZWdyb3VuZCBQcm9wZXJ0eTcKK1ZpelBQYWdlLkJHOE5hbWU9JkZvcmVncm91bmQgUHJvcGVydHk4CitWaXpQUGFnZS5CRzlOYW1lPSZGb3JlZ3JvdW5kIFByb3BlcnR5OQorVml6UFBhZ2UuQkcxME5hbWU9JkZvcmVncm91bmQgUHJvcGVydHkxMAorCitETVBQYWdlU2ltVGhyZWFkcz0mTnVtYmVyIG9mIGNvbmN1cnJlbnQgd29ya2VyIHRocmVhZHMKK0RNUFBhZ2VUSVRMRT0mU29sdmVyIFByZWZlcmVuY2VzCitETVBQYWdlRGVmYXVsdFNvbHZlcj0mRGVmYXVsdCBzb2x2ZXIKKworc3RlbVw6Ly9vcmcuZWNsaXBzZS5zdGVtL2VkZ2UvbWlncmF0aW9uPU1pZ3JhdGlvbiB2b24gTWVuc2NoZW4KK3N0ZW1cOi8vb3JnLmVjbGlwc2Uuc3RlbS9lZGdlL3BpcGV0cmFuc3BvcnQ9THVmdHZlcmtlaHIKK3N0ZW1cOi8vb3JnLmVjbGlwc2Uuc3RlbS9lZGdlL3JlbGF0aW9uc2hpcC9jb21tb25ib3JkZXI9R2VtZWluc2FtZW4gR3Jlbnplbgorc3RlbVw6Ly9vcmcuZWNsaXBzZS5zdGVtL2VkZ2UvcmVsYXRpb25zaGlwL3JlbGF0aXZlcGh5c2ljYWw9UmVsYXRpdmUgVW50ZXJzdWNodW5nZW4KK3N0ZW1cOi8vb3JnLmVjbGlwc2Uuc3RlbS9lZGdlL3JlbGF0aW9uc2hpcC9yb2FkPVN0cmFcdTAwZGZlbgorc3RlbVw6Ly9vcmcuZWNsaXBzZS5zdGVtL2VkZ2UvcmVsYXRpb25zaGlwL2Fpcj1MdWZ0CitzdGVtXDovL29yZy5lY2xpcHNlLnN0ZW0vZWRnZS9yZWxhdGlvbnNoaXAvcm9hZHRyYW5zcG9ydDIwMDE9U3RyYVx1MDBkZmVudmVya2VociAyMDAxCitzdGVtXDovL29yZy5lY2xpcHNlLnN0ZW0vZWRnZS9yZWxhdGlvbnNoaXAvcm9hZHRyYW5zcG9ydDIwMDQ9U3RyYVx1MDBkZmVudmVya2VociAyMDA0CitzdGVtXDovL29yZy5lY2xpcHNlLnN0ZW0vZWRnZS9yZWxhdGlvbnNoaXAvcm9hZHRyYW5zcG9ydDIwMDc9U3RyYVx1MDBkZmVudmVya2VociAyMDA3CitzdGVtXDovL29yZy5lY2xpcHNlLnN0ZW0vZWRnZS9yZWxhdGlvbnNoaXAvYWlydHJhbnNwb3J0MjAwNj1MdWZ0dmVya2VociAyMDA2CitzdGVtXDovL29yZy5lY2xpcHNlLnN0ZW0vZWRnZS9taWdyYXRpb24vcmVsYXRpb25zaGlwPU1pZ3JhdGlvbgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3ByZWZlcmVuY2VzL21lc3NhZ2VzX2tyLnByb3BlcnRpZXMgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvcHJlZmVyZW5jZXMvbWVzc2FnZXNfa3IucHJvcGVydGllcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lODZlMjQ2Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3ByZWZlcmVuY2VzL21lc3NhZ2VzX2tyLnByb3BlcnRpZXMKQEAgLTAsMCArMSw1OCBAQAorIyBQcmVmZXJlbmNlTWVzc2FnZXMucHJvcGVydGllcworIworIyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIyAqIENvcHlyaWdodCAoYykgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyMgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisjICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisjICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyMgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorIyAqCisjICogQ29udHJpYnV0b3JzOgorIyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworU1RFTVBQYWdlLlNURU09U1RFTQorU1RFTVZQYWdlLlZpej1cdWMyZGNcdWFjMDFcdWQ2NTQKKworVml6UFBhZ2UuSW5pdGlhbE5hbWUxPSZJbml0aWFsIFktYXhpcyBhdHRyaWJ1dGU6CitWaXpQUGFnZS5Jbml0aWFsTmFtZTI9JkluaXRpYWwgWC1heGlzIGF0dHJpYnV0ZToKKworVml6UFBhZ2UuZmdjZD0mRGVmYXVsdCBGb3JlZ3JvdW5kIENvbG9yCitWaXpQUGFnZS5mZ2MxPSZGb3JlZ3JvdW5kIENvbG9yMQorVml6UFBhZ2UuZmdjMj0mRm9yZWdyb3VuZCBDb2xvcjIKK1ZpelBQYWdlLmZnYzM9JkZvcmVncm91bmQgQ29sb3IzCitWaXpQUGFnZS5mZ2M0PSZGb3JlZ3JvdW5kIENvbG9yNAorVml6UFBhZ2UuZmdjNT0mRm9yZWdyb3VuZCBDb2xvcjUKK1ZpelBQYWdlLmZnYzY9JkZvcmVncm91bmQgQ29sb3I2CitWaXpQUGFnZS5mZ2M3PSZGb3JlZ3JvdW5kIENvbG9yNworVml6UFBhZ2UuZmdjOD0mRm9yZWdyb3VuZCBDb2xvcjgKK1ZpelBQYWdlLmZnYzk9JkZvcmVncm91bmQgQ29sb3I5CitWaXpQUGFnZS5mZ2MxMD0mRm9yZWdyb3VuZCBDb2xvcjEwCisKK1ZpelBQYWdlLkJHZGVmYXVsdE5hbWU9JkRlZmF1bHQgRm9yZWdyb3VuZAorVml6UFBhZ2UuQkcxTmFtZT0mRm9yZWdyb3VuZCBQcm9wZXJ0eTEKK1ZpelBQYWdlLkJHMk5hbWU9JkZvcmVncm91bmQgUHJvcGVydHkyCitWaXpQUGFnZS5CRzNOYW1lPSZGb3JlZ3JvdW5kIFByb3BlcnR5MworVml6UFBhZ2UuQkc0TmFtZT0mRm9yZWdyb3VuZCBQcm9wZXJ0eTQKK1ZpelBQYWdlLkJHNU5hbWU9JkZvcmVncm91bmQgUHJvcGVydHk1CitWaXpQUGFnZS5CRzZOYW1lPSZGb3JlZ3JvdW5kIFByb3BlcnR5NgorVml6UFBhZ2UuQkc3TmFtZT0mRm9yZWdyb3VuZCBQcm9wZXJ0eTcKK1ZpelBQYWdlLkJHOE5hbWU9JkZvcmVncm91bmQgUHJvcGVydHk4CitWaXpQUGFnZS5CRzlOYW1lPSZGb3JlZ3JvdW5kIFByb3BlcnR5OQorVml6UFBhZ2UuQkcxME5hbWU9JkZvcmVncm91bmQgUHJvcGVydHkxMAorCitETVBQYWdlU2ltVGhyZWFkcz0mTnVtYmVyIG9mIGNvbmN1cnJlbnQgd29ya2VyIHRocmVhZHMKK0RNUFBhZ2VUSVRMRT0mU29sdmVyIFByZWZlcmVuY2VzCitETVBQYWdlRGVmYXVsdFNvbHZlcj0mRGVmYXVsdCBzb2x2ZXIKKworc3RlbVw6Ly9vcmcuZWNsaXBzZS5zdGVtL2VkZ2UvbWlncmF0aW9uPVx1Yzc3OFx1YWMwNCBcdWM3NzRcdWIzZDkKK3N0ZW1cOi8vb3JnLmVjbGlwc2Uuc3RlbS9lZGdlL3BpcGV0cmFuc3BvcnQ9XHVkNTZkXHVhY2Y1IFx1YzZiNFx1YzFhMQorc3RlbVw6Ly9vcmcuZWNsaXBzZS5zdGVtL2VkZ2UvcmVsYXRpb25zaGlwL2NvbW1vbmJvcmRlcj1cdWM3N2NcdWJjMTggXHVkMTRjXHViNDUwXHViOWFjCitzdGVtXDovL29yZy5lY2xpcHNlLnN0ZW0vZWRnZS9yZWxhdGlvbnNoaXAvcmVsYXRpdmVwaHlzaWNhbD1cdWMwYzFcdWIzMDBcdWM4MDEgXHViYjNjXHViOWFjXHVjODAxIFx1ZDJiOVx1YzEzMQorc3RlbVw6Ly9vcmcuZWNsaXBzZS5zdGVtL2VkZ2UvcmVsYXRpb25zaGlwL3JvYWQ9XHViM2M0XHViODVjCitzdGVtXDovL29yZy5lY2xpcHNlLnN0ZW0vZWRnZS9yZWxhdGlvbnNoaXAvYWlyPVx1YWNmNVx1YWUzMAorc3RlbVw6Ly9vcmcuZWNsaXBzZS5zdGVtL2VkZ2UvcmVsYXRpb25zaGlwL3JvYWR0cmFuc3BvcnQyMDAxPVx1YjNjNFx1Yjg1YyBcdWFkNTBcdWQxYjUgMjAwMQorc3RlbVw6Ly9vcmcuZWNsaXBzZS5zdGVtL2VkZ2UvcmVsYXRpb25zaGlwL3JvYWR0cmFuc3BvcnQyMDA0PVx1YjNjNFx1Yjg1YyBcdWFkNTBcdWQxYjUgMjAwNAorc3RlbVw6Ly9vcmcuZWNsaXBzZS5zdGVtL2VkZ2UvcmVsYXRpb25zaGlwL3JvYWR0cmFuc3BvcnQyMDA3PVx1YjNjNFx1Yjg1YyBcdWFkNTBcdWQxYjUgMjAwNworc3RlbVw6Ly9vcmcuZWNsaXBzZS5zdGVtL2VkZ2UvcmVsYXRpb25zaGlwL2FpcnRyYW5zcG9ydDIwMDY9XHVkNTZkXHVhY2Y1IFx1YzZiNFx1YzFhMSAyMDA2CitzdGVtXDovL29yZy5lY2xpcHNlLnN0ZW0vZWRnZS9taWdyYXRpb24vcmVsYXRpb25zaGlwPVx1Yzc3NFx1YjNkOQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3ByZWZlcmVuY2VzL21lc3NhZ2VzX3poLnByb3BlcnRpZXMgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvcHJlZmVyZW5jZXMvbWVzc2FnZXNfemgucHJvcGVydGllcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNmU2M2I3Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3ByZWZlcmVuY2VzL21lc3NhZ2VzX3poLnByb3BlcnRpZXMKQEAgLTAsMCArMSw1OCBAQAorIyBQcmVmZXJlbmNlTWVzc2FnZXMucHJvcGVydGllcworIworIyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIyAqIENvcHlyaWdodCAoYykgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyMgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisjICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisjICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyMgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorIyAqCisjICogQ29udHJpYnV0b3JzOgorIyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworU1RFTVBQYWdlLlNURU09U1RFTQorU1RFTVZQYWdlLlZpej1cdTUzZWZcdTg5YzZcdTUzMTYKKworVml6UFBhZ2UuSW5pdGlhbE5hbWUxPSZJbml0aWFsIFktYXhpcyBhdHRyaWJ1dGU6CitWaXpQUGFnZS5Jbml0aWFsTmFtZTI9JkluaXRpYWwgWC1heGlzIGF0dHJpYnV0ZToKKworVml6UFBhZ2UuZmdjZD0mRGVmYXVsdCBGb3JlZ3JvdW5kIENvbG9yCitWaXpQUGFnZS5mZ2MxPSZGb3JlZ3JvdW5kIENvbG9yMQorVml6UFBhZ2UuZmdjMj0mRm9yZWdyb3VuZCBDb2xvcjIKK1ZpelBQYWdlLmZnYzM9JkZvcmVncm91bmQgQ29sb3IzCitWaXpQUGFnZS5mZ2M0PSZGb3JlZ3JvdW5kIENvbG9yNAorVml6UFBhZ2UuZmdjNT0mRm9yZWdyb3VuZCBDb2xvcjUKK1ZpelBQYWdlLmZnYzY9JkZvcmVncm91bmQgQ29sb3I2CitWaXpQUGFnZS5mZ2M3PSZGb3JlZ3JvdW5kIENvbG9yNworVml6UFBhZ2UuZmdjOD0mRm9yZWdyb3VuZCBDb2xvcjgKK1ZpelBQYWdlLmZnYzk9JkZvcmVncm91bmQgQ29sb3I5CitWaXpQUGFnZS5mZ2MxMD0mRm9yZWdyb3VuZCBDb2xvcjEwCisKK1ZpelBQYWdlLkJHZGVmYXVsdE5hbWU9JkRlZmF1bHQgRm9yZWdyb3VuZAorVml6UFBhZ2UuQkcxTmFtZT0mRm9yZWdyb3VuZCBQcm9wZXJ0eTEKK1ZpelBQYWdlLkJHMk5hbWU9JkZvcmVncm91bmQgUHJvcGVydHkyCitWaXpQUGFnZS5CRzNOYW1lPSZGb3JlZ3JvdW5kIFByb3BlcnR5MworVml6UFBhZ2UuQkc0TmFtZT0mRm9yZWdyb3VuZCBQcm9wZXJ0eTQKK1ZpelBQYWdlLkJHNU5hbWU9JkZvcmVncm91bmQgUHJvcGVydHk1CitWaXpQUGFnZS5CRzZOYW1lPSZGb3JlZ3JvdW5kIFByb3BlcnR5NgorVml6UFBhZ2UuQkc3TmFtZT0mRm9yZWdyb3VuZCBQcm9wZXJ0eTcKK1ZpelBQYWdlLkJHOE5hbWU9JkZvcmVncm91bmQgUHJvcGVydHk4CitWaXpQUGFnZS5CRzlOYW1lPSZGb3JlZ3JvdW5kIFByb3BlcnR5OQorVml6UFBhZ2UuQkcxME5hbWU9JkZvcmVncm91bmQgUHJvcGVydHkxMAorCitETVBQYWdlU2ltVGhyZWFkcz0mTnVtYmVyIG9mIGNvbmN1cnJlbnQgd29ya2VyIHRocmVhZHMKK0RNUFBhZ2VUSVRMRT0mU29sdmVyIFByZWZlcmVuY2VzCitETVBQYWdlRGVmYXVsdFNvbHZlcj0mRGVmYXVsdCBzb2x2ZXIKKworc3RlbVw6Ly9vcmcuZWNsaXBzZS5zdGVtL2VkZ2UvbWlncmF0aW9uPVx1NGViYVx1N2M3Ylx1OGZjMVx1NWY5OQorc3RlbVw6Ly9vcmcuZWNsaXBzZS5zdGVtL2VkZ2UvcGlwZXRyYW5zcG9ydD1cdTgyMmFcdTdhN2FcdThmZDBcdThmOTMKK3N0ZW1cOi8vb3JnLmVjbGlwc2Uuc3RlbS9lZGdlL3JlbGF0aW9uc2hpcC9jb21tb25ib3JkZXI9XHU1MTcxXHU1NDBjXHU4ZmI5XHU3NTRjCitzdGVtXDovL29yZy5lY2xpcHNlLnN0ZW0vZWRnZS9yZWxhdGlvbnNoaXAvcmVsYXRpdmVwaHlzaWNhbD1cdTc2ZjhcdTViZjlcdTUzMDVcdTU0MmIKK3N0ZW1cOi8vb3JnLmVjbGlwc2Uuc3RlbS9lZGdlL3JlbGF0aW9uc2hpcC9yb2FkPVx1OTA1M1x1OGRlZgorc3RlbVw6Ly9vcmcuZWNsaXBzZS5zdGVtL2VkZ2UvcmVsYXRpb25zaGlwL2Fpcj1cdTgyMmFcdTdhN2EKK3N0ZW1cOi8vb3JnLmVjbGlwc2Uuc3RlbS9lZGdlL3JlbGF0aW9uc2hpcC9yb2FkdHJhbnNwb3J0MjAwMT1cdTUxNmNcdThkZWZcdThmZDBcdThmOTMyMDAxCitzdGVtXDovL29yZy5lY2xpcHNlLnN0ZW0vZWRnZS9yZWxhdGlvbnNoaXAvcm9hZHRyYW5zcG9ydDIwMDQ9XHU1MTZjXHU4ZGVmXHU4ZmQwXHU4ZjkzMjAwNFx1NWU3NAorc3RlbVw6Ly9vcmcuZWNsaXBzZS5zdGVtL2VkZ2UvcmVsYXRpb25zaGlwL3JvYWR0cmFuc3BvcnQyMDA3PVx1NTE2Y1x1OGRlZlx1OGZkMFx1OGY5MzIwMDcKK3N0ZW1cOi8vb3JnLmVjbGlwc2Uuc3RlbS9lZGdlL3JlbGF0aW9uc2hpcC9haXJ0cmFuc3BvcnQyMDA2PTIwMDZcdTVlNzRcdTgyMmFcdTdhN2FcdThmZDBcdThmOTMKK3N0ZW1cOi8vb3JnLmVjbGlwc2Uuc3RlbS9lZGdlL21pZ3JhdGlvbi9yZWxhdGlvbnNoaXA9XHU4ZmMxXHU3OWZiCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvc3BsYXNoaGFuZGxlci9TcGxhc2hIYW5kbGVyLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvc3BsYXNoaGFuZGxlci9TcGxhc2hIYW5kbGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWQ4ZDRlZQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9zcGxhc2hoYW5kbGVyL1NwbGFzaEhhbmRsZXIuamF2YQpAQCAtMCwwICsxLDc1IEBACisvLyBTcGxhc2hIYW5kbGVyLmphdmEKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS51aS5zcGxhc2hoYW5kbGVyOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA5IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnJlc291cmNlLlN0cmluZ0NvbnZlcnRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLlBhaW50RXZlbnQ7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5QYWludExpc3RlbmVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ncmFwaGljcy5Qb2ludDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZ3JhcGhpY3MuUkdCOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ncmFwaGljcy5SZWN0YW5nbGU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuU2hlbGw7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuc3BsYXNoLkJhc2ljU3BsYXNoSGFuZGxlcjsKKworLyoqCisgKiBUaGlzIGlzIGJhc2VkIG9uIEVjbGlwc2VTcGxhc2hIYW5kbGVyCisgKi8KK3B1YmxpYyBjbGFzcyBTcGxhc2hIYW5kbGVyIGV4dGVuZHMgQmFzaWNTcGxhc2hIYW5kbGVyIHsKKworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGluaXQoU2hlbGwgc3BsYXNoKSB7CisJCXN1cGVyLmluaXQoc3BsYXNoKTsKKwkJU3RyaW5nIHByb2dyZXNzUmVjdFN0cmluZyA9ICIwLDM4Niw2OTcsMTUiOyAvLyROT04tTkxTLTEkCisJCVN0cmluZyBtZXNzYWdlUmVjdFN0cmluZyA9ICIxMCwzNTAsNjk3LDIwIjsgLy8kTk9OLU5MUy0xJAorCQlTdHJpbmcgYnVpbGRJZExvY1N0cmluZyA9ICI1MDAsMzI1IjsgLy8kTk9OLU5MUy0xJAorCisJCVN0cmluZyBmb3JlZ3JvdW5kQ29sb3JTdHJpbmcgPSBudWxsOworCisJCVJlY3RhbmdsZSBwcm9ncmVzc1JlY3QgPSBTdHJpbmdDb252ZXJ0ZXIuYXNSZWN0YW5nbGUoCisJCQkJcHJvZ3Jlc3NSZWN0U3RyaW5nLCBuZXcgUmVjdGFuZ2xlKDAsIDE2NSwgNDAwLCAxNSkpOworCQlzZXRQcm9ncmVzc1JlY3QocHJvZ3Jlc3NSZWN0KTsKKworCQlSZWN0YW5nbGUgbWVzc2FnZVJlY3QgPSBTdHJpbmdDb252ZXJ0ZXIuYXNSZWN0YW5nbGUobWVzc2FnZVJlY3RTdHJpbmcsCisJCQkJbmV3IFJlY3RhbmdsZSgxMCwgMTUwLCAzOTAsIDUwKSk7CisJCXNldE1lc3NhZ2VSZWN0KG1lc3NhZ2VSZWN0KTsKKworCQlmaW5hbCBQb2ludCBidWlsZElkUG9pbnQgPSBTdHJpbmdDb252ZXJ0ZXIuYXNQb2ludChidWlsZElkTG9jU3RyaW5nLAorCQkJCW5ldyBQb2ludCgzMjIsIDE5MCkpOworCisJCWludCBmb3JlZ3JvdW5kQ29sb3JJbnRlZ2VyOworCQl0cnkgeworCQkJZm9yZWdyb3VuZENvbG9ySW50ZWdlciA9IEludGVnZXIKKwkJCQkJLnBhcnNlSW50KGZvcmVncm91bmRDb2xvclN0cmluZywgMTYpOworCQl9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKKwkJCWZvcmVncm91bmRDb2xvckludGVnZXIgPSAweEQyRDdGRjsgLy8gb2ZmIHdoaXRlCisJCX0KKworCQlzZXRGb3JlZ3JvdW5kKG5ldyBSR0IoKGZvcmVncm91bmRDb2xvckludGVnZXIgJiAweEZGMDAwMCkgPj4gMTYsCisJCQkJKGZvcmVncm91bmRDb2xvckludGVnZXIgJiAweEZGMDApID4+IDgsCisJCQkJZm9yZWdyb3VuZENvbG9ySW50ZWdlciAmIDB4RkYpKTsKKworCQlmaW5hbCBTdHJpbmcgYnVpbGRJZCA9IGdldEJ1aWxkSWQoKTsKKworCQlnZXRDb250ZW50KCkuYWRkUGFpbnRMaXN0ZW5lcihuZXcgUGFpbnRMaXN0ZW5lcigpIHsKKwkJCUBTdXBwcmVzc1dhcm5pbmdzKCJzeW50aGV0aWMtYWNjZXNzIikKKwkJCXB1YmxpYyB2b2lkIHBhaW50Q29udHJvbChQYWludEV2ZW50IGUpIHsKKwkJCQllLmdjLnNldEZvcmVncm91bmQoZ2V0Rm9yZWdyb3VuZCgpKTsKKwkJCQllLmdjLmRyYXdUZXh0KGJ1aWxkSWQsIGJ1aWxkSWRQb2ludC54LCBidWlsZElkUG9pbnQueSwgdHJ1ZSk7CisJCQl9CisJCX0pOworCX0gLy8gaW5pdAorCisJcHJpdmF0ZSBTdHJpbmcgZ2V0QnVpbGRJZCgpIHsKKwkJcmV0dXJuIFN5c3RlbS5nZXRQcm9wZXJ0eSgic3RlbS5idWlsZElkIiwgIlVua25vd24gQnVpbGQiKTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCisJfQorfSAvLyBTcGxhc2hIYW5kbGVyCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvdmlld3MvQWN0aXZlQmF0Y2hlc1ZpZXcuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS92aWV3cy9BY3RpdmVCYXRjaGVzVmlldy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYyMzdiMjQKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvdmlld3MvQWN0aXZlQmF0Y2hlc1ZpZXcuamF2YQpAQCAtMCwwICsxLDE4NiBAQAorLy8gQWN0aXZlQmF0Y2hlc1ZpZXcuamF2YQorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnVpLnZpZXdzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSUxhYmVsUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JTGFiZWxQcm92aWRlckxpc3RlbmVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVN0cnVjdHVyZWRDb250ZW50UHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5MaXN0Vmlld2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuVmlld2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uam9icy5iYXRjaC5CYXRjaE1hbmFnZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5qb2JzLmJhdGNoLkJhdGNoTWFuYWdlckV2ZW50OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uam9icy5iYXRjaC5JQmF0Y2g7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5qb2JzLmJhdGNoLklCYXRjaE1hbmFnZXJMaXN0ZW5lcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZ3JhcGhpY3MuSW1hZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLnBhcnQuVmlld1BhcnQ7CisKKy8qKgorICogVGhpcyBjbGFzcyBpcyBhbiBFY2xpcHNlIHtAbGluayBWaWV3UGFydH0gdGhhdCBkaXNwbGF5cyB0aGUgY3VycmVudGx5IGFjdGl2ZQorICoge0BsaW5rIElCYXRjaH1zIGFuZCB0aGVpciBzdGF0dXMuCisgKiAKKyAqIEBzZWUgQmF0Y2hNYW5hZ2VyCisgKi8KK3B1YmxpYyBjbGFzcyBBY3RpdmVCYXRjaGVzVmlldyBleHRlbmRzIFZpZXdQYXJ0IHsKKworCS8qKgorCSAqIFRoZSBpZGVudGlmaWVyIG9mIHRoZSBBY3RpdmUgQmF0Y2hlcyBWaWV3CisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgSURfQUNUSVZFX0JBVENIRVNfVklFVyA9ICJvcmcuZWNsaXBzZS5zdGVtLnVpLnZpZXdzLmFjdGl2ZWJhdGNoZXMiOyAvLyROT04tTkxTLTEkCisKKwlwcml2YXRlIExpc3RWaWV3ZXIgbHYgPSBudWxsOworCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS51aS5wYXJ0LldvcmtiZW5jaFBhcnQjY3JlYXRlUGFydENvbnRyb2wob3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlKQorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGNyZWF0ZVBhcnRDb250cm9sKGZpbmFsIENvbXBvc2l0ZSBwYXJlbnQpIHsKKwkJbHYgPSBuZXcgTGlzdFZpZXdlcihwYXJlbnQpOworCQlsdi5zZXRDb250ZW50UHJvdmlkZXIobmV3IEFjdGl2ZUJhdGNoZXNDb250ZW50UHJvdmlkZXIoKSk7CisJCWx2LnNldExhYmVsUHJvdmlkZXIobmV3IEFjdGl2ZUJhdGNoZXNMYWJlbFByb3ZpZGVyKCkpOworCQlsdi5zZXRJbnB1dChCYXRjaE1hbmFnZXIuSU5TVEFOQ0UpOworCisJCS8vIFByb3ZpZGUgb3VyIHNlbGVjdGlvbiBsaXN0ZW5lcgorCQlnZXRTaXRlKCkuc2V0U2VsZWN0aW9uUHJvdmlkZXIobHYpOworCX0gLy8gY3JlYXRlUGFydENvbnRyb2wKKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2UudWkucGFydC5Xb3JrYmVuY2hQYXJ0I3NldEZvY3VzKCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBzZXRGb2N1cygpIHsKKwkJLy8gTm90aGluZworCX0KKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2UudWkucGFydC5Xb3JrYmVuY2hQYXJ0I2Rpc3Bvc2UoKQorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGRpc3Bvc2UoKSB7CisJCXN1cGVyLmRpc3Bvc2UoKTsKKwkJZ2V0U2l0ZSgpLnNldFNlbGVjdGlvblByb3ZpZGVyKG51bGwpOworCQlsdiA9IG51bGw7CisJfSAvLyBkaXNwb3NlCisKKwlwcm90ZWN0ZWQgc3RhdGljIGNsYXNzIEFjdGl2ZUJhdGNoZXNDb250ZW50UHJvdmlkZXIgaW1wbGVtZW50cworCQkJSVN0cnVjdHVyZWRDb250ZW50UHJvdmlkZXIsIElCYXRjaE1hbmFnZXJMaXN0ZW5lciB7CisKKwkJcHJpdmF0ZSBMaXN0Vmlld2VyIHZpZXdlciA9IG51bGw7CisKKwkJcHJpdmF0ZSBCYXRjaE1hbmFnZXIgYmF0Y2hNYW5hZ2VyID0gbnVsbDsKKworCQkvKioKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTdHJ1Y3R1cmVkQ29udGVudFByb3ZpZGVyI2dldEVsZW1lbnRzKGphdmEubGFuZy5PYmplY3QpCisJCSAqLworCQlwdWJsaWMgT2JqZWN0W10gZ2V0RWxlbWVudHMoZmluYWwgT2JqZWN0IGlucHV0RWxlbWVudCkgeworCQkJcmV0dXJuICgoQmF0Y2hNYW5hZ2VyKSBpbnB1dEVsZW1lbnQpLmdldEFjdGl2ZUJhdGNoZXMoKS50b0FycmF5KCk7CisJCX0gLy8gZ2V0RWxlbWVudHMKKworCQkvKioKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklDb250ZW50UHJvdmlkZXIjZGlzcG9zZSgpCisJCSAqLworCQlwdWJsaWMgdm9pZCBkaXNwb3NlKCkgeworCQkJdmlld2VyID0gbnVsbDsKKwkJCWJhdGNoTWFuYWdlciA9IG51bGw7CisJCX0KKworCQkvKioKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklDb250ZW50UHJvdmlkZXIjaW5wdXRDaGFuZ2VkKG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuVmlld2VyLAorCQkgKiAgICAgIGphdmEubGFuZy5PYmplY3QsIGphdmEubGFuZy5PYmplY3QpCisJCSAqLworCQlwdWJsaWMgdm9pZCBpbnB1dENoYW5nZWQoZmluYWwgVmlld2VyIHZpZXdlciwKKwkJCQlAU3VwcHJlc3NXYXJuaW5ncygidW51c2VkIikKKwkJCQlmaW5hbCBPYmplY3Qgb2xkSW5wdXQsIGZpbmFsIE9iamVjdCBuZXdJbnB1dCkgeworCQkJdGhpcy52aWV3ZXIgPSAoTGlzdFZpZXdlcikgdmlld2VyOworCQkJLy8gSXMgb3VyIGJhdGNoIG1hbmFnZXIgY2hhbmdpbmc/CisJCQlpZiAoYmF0Y2hNYW5hZ2VyICE9IG51bGwpIHsKKwkJCQkvLyBZZXMKKwkJCQliYXRjaE1hbmFnZXIucmVtb3ZlTGlzdGVuZXIodGhpcyk7CisJCQl9CisJCQliYXRjaE1hbmFnZXIgPSAoQmF0Y2hNYW5hZ2VyKSBuZXdJbnB1dDsKKworCQkJLy8gRG8gd2UgaGF2ZSBhIG5ldyBiYXRjaCBtYW5hZ2VyIHRvIGxpc3RlbiB0bz8KKwkJCWlmIChiYXRjaE1hbmFnZXIgIT0gbnVsbCkgeworCQkJCS8vIFllcworCQkJCWJhdGNoTWFuYWdlci5hZGRCYXRjaE1hbmFnZXJMaXN0ZW5lcih0aGlzKTsKKwkJCX0KKwkJfSAvLyBpbnB1dENoYW5nZWQKKworCQkvKioKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmpvYnMuYmF0Y2guSUJhdGNoTWFuYWdlckxpc3RlbmVyI2JhdGNoZXNDaGFuZ2VkKG9yZy5lY2xpcHNlLnN0ZW0uam9icy5iYXRjaC5CYXRjaE1hbmFnZXJFdmVudCkKKwkJICovCisJCXB1YmxpYyB2b2lkIGJhdGNoZXNDaGFuZ2VkKGZpbmFsIEJhdGNoTWFuYWdlckV2ZW50IGV2ZW50KSB7CisJCQl2aWV3ZXIuZ2V0TGlzdCgpLnNldFJlZHJhdyhmYWxzZSk7CisJCQl0cnkgeworCQkJCXZpZXdlci5yZW1vdmUoZXZlbnQuZ2V0QmF0Y2hlc1JlbW92ZWQoKSk7CisJCQkJdmlld2VyLmFkZChldmVudC5nZXRCYXRjaGVzQWRkZWQoKSk7CisJCQl9IGZpbmFsbHkgeworCQkJCXZpZXdlci5nZXRMaXN0KCkuc2V0UmVkcmF3KHRydWUpOworCQkJfQorCisJCX0gLy8gYmF0Y2hlc0NoYW5nZWQKKworCX0gLy8gQWN0aXZlQmF0Y2hlc0NvbnRlbnRQcm92aWRlcgorCisJcHJvdGVjdGVkIHN0YXRpYyBjbGFzcyBBY3RpdmVCYXRjaGVzTGFiZWxQcm92aWRlciBpbXBsZW1lbnRzIElMYWJlbFByb3ZpZGVyIHsKKworCQkvKioKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklMYWJlbFByb3ZpZGVyI2dldEltYWdlKGphdmEubGFuZy5PYmplY3QpCisJCSAqLworCQlwdWJsaWMgSW1hZ2UgZ2V0SW1hZ2UoQFN1cHByZXNzV2FybmluZ3MoInVudXNlZCIpCisJCWZpbmFsIE9iamVjdCBlbGVtZW50KSB7CisJCQlyZXR1cm4gbnVsbDsKKwkJfSAvLyBnZXRJbWFnZQorCisJCS8qKgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSUxhYmVsUHJvdmlkZXIjZ2V0VGV4dChqYXZhLmxhbmcuT2JqZWN0KQorCQkgKi8KKwkJcHVibGljIFN0cmluZyBnZXRUZXh0KGZpbmFsIE9iamVjdCBlbGVtZW50KSB7CisJCQlmaW5hbCBJQmF0Y2ggYmF0Y2ggPSAoSUJhdGNoKSBlbGVtZW50OworCQkJcmV0dXJuIGJhdGNoLmdldE5hbWVXaXRoU2VxdWVuY2VOdW1iZXIoKTsKKwkJfSAvLyBnZXRUZXh0CisKKwkJLyoqCisJCSAqIEBzZWUgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JQmFzZUxhYmVsUHJvdmlkZXIjYWRkTGlzdGVuZXIob3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JTGFiZWxQcm92aWRlckxpc3RlbmVyKQorCQkgKi8KKwkJcHVibGljIHZvaWQgYWRkTGlzdGVuZXIoQFN1cHByZXNzV2FybmluZ3MoInVudXNlZCIpCisJCWZpbmFsIElMYWJlbFByb3ZpZGVyTGlzdGVuZXIgbGlzdGVuZXIpIHsKKwkJCS8vIG5vdGhpbmcKKwkJfQorCisJCS8qKgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSUJhc2VMYWJlbFByb3ZpZGVyI2Rpc3Bvc2UoKQorCQkgKi8KKwkJcHVibGljIHZvaWQgZGlzcG9zZSgpIHsKKwkJCS8vIG5vdGhpbmcKKwkJfQorCisJCS8qKgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSUJhc2VMYWJlbFByb3ZpZGVyI2lzTGFiZWxQcm9wZXJ0eShqYXZhLmxhbmcuT2JqZWN0LAorCQkgKiAgICAgIGphdmEubGFuZy5TdHJpbmcpCisJCSAqLworCQlwdWJsaWMgYm9vbGVhbiBpc0xhYmVsUHJvcGVydHkoQFN1cHByZXNzV2FybmluZ3MoInVudXNlZCIpCisJCWZpbmFsIE9iamVjdCBlbGVtZW50LCBAU3VwcHJlc3NXYXJuaW5ncygidW51c2VkIikKKwkJZmluYWwgU3RyaW5nIHByb3BlcnR5KSB7CisJCQlyZXR1cm4gZmFsc2U7CisJCX0KKworCQkvKioKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklCYXNlTGFiZWxQcm92aWRlciNyZW1vdmVMaXN0ZW5lcihvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklMYWJlbFByb3ZpZGVyTGlzdGVuZXIpCisJCSAqLworCQlwdWJsaWMgdm9pZCByZW1vdmVMaXN0ZW5lcihAU3VwcHJlc3NXYXJuaW5ncygidW51c2VkIikKKwkJZmluYWwgSUxhYmVsUHJvdmlkZXJMaXN0ZW5lciBsaXN0ZW5lcikgeworCQkJLy8gbm90aGluZworCQl9CisJfSAvLyBBY3RpdmVCYXRjaGVzTGFiZWxQcm92aWRlcgorfSAvLyBBY3RpdmVCYXRjaGVzVmlldwpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3ZpZXdzL0FjdGl2ZVNpbXVsYXRpb25zVmlldy5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3ZpZXdzL0FjdGl2ZVNpbXVsYXRpb25zVmlldy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjljNjgxZDEKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvdmlld3MvQWN0aXZlU2ltdWxhdGlvbnNWaWV3LmphdmEKQEAgLTAsMCArMSwxODggQEAKKy8vIEFjdGl2ZVNpbXVsYXRpb25zVmlldy5qYXZhCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0udWkudmlld3M7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYsMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklMYWJlbFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSUxhYmVsUHJvdmlkZXJMaXN0ZW5lcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTdHJ1Y3R1cmVkQ29udGVudFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuTGlzdFZpZXdlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlZpZXdlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmpvYnMuc2ltdWxhdGlvbi5JU2ltdWxhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmpvYnMuc2ltdWxhdGlvbi5JU2ltdWxhdGlvbk1hbmFnZXJMaXN0ZW5lcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmpvYnMuc2ltdWxhdGlvbi5TaW11bGF0aW9uTWFuYWdlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmpvYnMuc2ltdWxhdGlvbi5TaW11bGF0aW9uTWFuYWdlckV2ZW50OworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ncmFwaGljcy5JbWFnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGU7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkucGFydC5WaWV3UGFydDsKKworLyoqCisgKiBUaGlzIGNsYXNzIGlzIGFuIEVjbGlwc2Uge0BsaW5rIFZpZXdQYXJ0fSB0aGF0IGRpc3BsYXlzIHRoZSBjdXJyZW50bHkgYWN0aXZlCisgKiB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5qb2JzLnNpbXVsYXRpb24uU2ltdWxhdGlvbn1zIGFuZCB0aGVpciBzdGF0dXMuCisgKiAKKyAqIEBzZWUgU2ltdWxhdGlvbk1hbmFnZXIKKyAqLworcHVibGljIGNsYXNzIEFjdGl2ZVNpbXVsYXRpb25zVmlldyBleHRlbmRzIFZpZXdQYXJ0IHsKKworCS8qKgorCSAqIFRoZSBpZGVudGlmaWVyIG9mIHRoZSBBY3RpdmUgU2ltdWxhdGlvbnMgVmlldworCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIElEX0FDVElWRV9TSU1VTEFUSU9OU19WSUVXID0gIm9yZy5lY2xpcHNlLnN0ZW0udWkudmlld3MuYWN0aXZlc2ltdWxhdGlvbnMiOyAvLyROT04tTkxTLTEkCisKKwlwcml2YXRlIExpc3RWaWV3ZXIgbHYgPSBudWxsOworCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS51aS5wYXJ0LldvcmtiZW5jaFBhcnQjY3JlYXRlUGFydENvbnRyb2wob3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlKQorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGNyZWF0ZVBhcnRDb250cm9sKGZpbmFsIENvbXBvc2l0ZSBwYXJlbnQpIHsKKwkJbHYgPSBuZXcgTGlzdFZpZXdlcihwYXJlbnQpOworCQlsdi5zZXRDb250ZW50UHJvdmlkZXIobmV3IEFjdGl2ZVNpbXVsYXRpb25zQ29udGVudFByb3ZpZGVyKCkpOworCQlsdi5zZXRMYWJlbFByb3ZpZGVyKG5ldyBBY3RpdmVTaW11bGF0aW9uc0xhYmVsUHJvdmlkZXIoKSk7CisJCWx2LnNldElucHV0KFNpbXVsYXRpb25NYW5hZ2VyLmdldE1hbmFnZXIoKSk7CisKKwkJLy8gUHJvdmlkZSBvdXIgc2VsZWN0aW9uIGxpc3RlbmVyCisJCWdldFNpdGUoKS5zZXRTZWxlY3Rpb25Qcm92aWRlcihsdik7CisJfSAvLyBjcmVhdGVQYXJ0Q29udHJvbAorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS51aS5wYXJ0LldvcmtiZW5jaFBhcnQjc2V0Rm9jdXMoKQorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIHNldEZvY3VzKCkgeworCQkvLyBOb3RoaW5nCisJfQorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS51aS5wYXJ0LldvcmtiZW5jaFBhcnQjZGlzcG9zZSgpCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgZGlzcG9zZSgpIHsKKwkJc3VwZXIuZGlzcG9zZSgpOworCQlnZXRTaXRlKCkuc2V0U2VsZWN0aW9uUHJvdmlkZXIobnVsbCk7CisJCWx2ID0gbnVsbDsKKwl9IC8vIGRpc3Bvc2UKKworCXByb3RlY3RlZCBzdGF0aWMgY2xhc3MgQWN0aXZlU2ltdWxhdGlvbnNDb250ZW50UHJvdmlkZXIgaW1wbGVtZW50cworCQkJSVN0cnVjdHVyZWRDb250ZW50UHJvdmlkZXIsIElTaW11bGF0aW9uTWFuYWdlckxpc3RlbmVyIHsKKworCQlwcml2YXRlIExpc3RWaWV3ZXIgdmlld2VyID0gbnVsbDsKKworCQlwcml2YXRlIFNpbXVsYXRpb25NYW5hZ2VyIHNpbXVsYXRpb25NYW5hZ2VyID0gbnVsbDsKKworCQkvKioKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTdHJ1Y3R1cmVkQ29udGVudFByb3ZpZGVyI2dldEVsZW1lbnRzKGphdmEubGFuZy5PYmplY3QpCisJCSAqLworCQlwdWJsaWMgT2JqZWN0W10gZ2V0RWxlbWVudHMoZmluYWwgT2JqZWN0IGlucHV0RWxlbWVudCkgeworCQkJcmV0dXJuICgoU2ltdWxhdGlvbk1hbmFnZXIpIGlucHV0RWxlbWVudCkuZ2V0QWN0aXZlU2ltdWxhdGlvbnMoKQorCQkJCQkudG9BcnJheSgpOworCQl9IC8vIGdldEVsZW1lbnRzCisKKwkJLyoqCisJCSAqIEBzZWUgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JQ29udGVudFByb3ZpZGVyI2Rpc3Bvc2UoKQorCQkgKi8KKwkJcHVibGljIHZvaWQgZGlzcG9zZSgpIHsKKwkJCXZpZXdlciA9IG51bGw7CisJCQlzaW11bGF0aW9uTWFuYWdlciA9IG51bGw7CisJCX0KKworCQkvKioKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklDb250ZW50UHJvdmlkZXIjaW5wdXRDaGFuZ2VkKG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuVmlld2VyLAorCQkgKiAgICAgIGphdmEubGFuZy5PYmplY3QsIGphdmEubGFuZy5PYmplY3QpCisJCSAqLworCQlwdWJsaWMgdm9pZCBpbnB1dENoYW5nZWQoZmluYWwgVmlld2VyIHZpZXdlciwKKwkJCQlAU3VwcHJlc3NXYXJuaW5ncygidW51c2VkIikKKwkJCQlmaW5hbCBPYmplY3Qgb2xkSW5wdXQsIGZpbmFsIE9iamVjdCBuZXdJbnB1dCkgeworCQkJdGhpcy52aWV3ZXIgPSAoTGlzdFZpZXdlcikgdmlld2VyOworCQkJLy8gSXMgb3VyIHNpbXVsYXRpb24gbWFuYWdlciBjaGFuZ2luZz8KKwkJCWlmIChzaW11bGF0aW9uTWFuYWdlciAhPSBudWxsKSB7CisJCQkJLy8gWWVzCisJCQkJc2ltdWxhdGlvbk1hbmFnZXIucmVtb3ZlTGlzdGVuZXIodGhpcyk7CisJCQl9CisJCQlzaW11bGF0aW9uTWFuYWdlciA9IChTaW11bGF0aW9uTWFuYWdlcikgbmV3SW5wdXQ7CisKKwkJCS8vIERvIHdlIGhhdmUgYSBuZXcgc2ltdWxhdGlvbiBtYW5hZ2VyIHRvIGxpc3RlbiB0bz8KKwkJCWlmIChzaW11bGF0aW9uTWFuYWdlciAhPSBudWxsKSB7CisJCQkJLy8gWWVzCisJCQkJc2ltdWxhdGlvbk1hbmFnZXIuYWRkU2ltdWxhdGlvbk1hbmFnZXJMaXN0ZW5lcih0aGlzKTsKKwkJCX0KKwkJfSAvLyBpbnB1dENoYW5nZWQKKworCQkvKioKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmpvYnMuc2ltdWxhdGlvbi5JU2ltdWxhdGlvbk1hbmFnZXJMaXN0ZW5lciNzaW11bGF0aW9uc0NoYW5nZWQob3JnLmVjbGlwc2Uuc3RlbS5qb2JzLnNpbXVsYXRpb24uU2ltdWxhdGlvbk1hbmFnZXJFdmVudCkKKwkJICovCisJCXB1YmxpYyB2b2lkIHNpbXVsYXRpb25zQ2hhbmdlZChmaW5hbCBTaW11bGF0aW9uTWFuYWdlckV2ZW50IGV2ZW50KSB7CisJCQl2aWV3ZXIuZ2V0TGlzdCgpLnNldFJlZHJhdyhmYWxzZSk7CisJCQl0cnkgeworCQkJCXZpZXdlci5yZW1vdmUoZXZlbnQuZ2V0U2ltdWxhdGlvbnNSZW1vdmVkKCkpOworCQkJCXZpZXdlci5hZGQoZXZlbnQuZ2V0U2ltdWxhdGlvbnNBZGRlZCgpKTsKKwkJCX0gZmluYWxseSB7CisJCQkJdmlld2VyLmdldExpc3QoKS5zZXRSZWRyYXcodHJ1ZSk7CisJCQl9CisKKwkJfSAvLyBzaW11bGF0aW9uc0NoYW5nZWQKKworCX0gLy8gQWN0aXZlU2ltdWxhdGlvbnNDb250ZW50UHJvdmlkZXIKKworCXByb3RlY3RlZCBzdGF0aWMgY2xhc3MgQWN0aXZlU2ltdWxhdGlvbnNMYWJlbFByb3ZpZGVyIGltcGxlbWVudHMKKwkJCUlMYWJlbFByb3ZpZGVyIHsKKworCQkvKioKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklMYWJlbFByb3ZpZGVyI2dldEltYWdlKGphdmEubGFuZy5PYmplY3QpCisJCSAqLworCQlwdWJsaWMgSW1hZ2UgZ2V0SW1hZ2UoQFN1cHByZXNzV2FybmluZ3MoInVudXNlZCIpCisJCWZpbmFsIE9iamVjdCBlbGVtZW50KSB7CisJCQlyZXR1cm4gbnVsbDsKKwkJfSAvLyBnZXRJbWFnZQorCisJCS8qKgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSUxhYmVsUHJvdmlkZXIjZ2V0VGV4dChqYXZhLmxhbmcuT2JqZWN0KQorCQkgKi8KKwkJcHVibGljIFN0cmluZyBnZXRUZXh0KGZpbmFsIE9iamVjdCBlbGVtZW50KSB7CisJCQlmaW5hbCBJU2ltdWxhdGlvbiBzaW11bGF0aW9uID0gKElTaW11bGF0aW9uKSBlbGVtZW50OworCQkJcmV0dXJuIHNpbXVsYXRpb24uZ2V0TmFtZVdpdGhTZXF1ZW5jZU51bWJlcigpOworCQl9IC8vIGdldFRleHQKKworCQkvKioKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklCYXNlTGFiZWxQcm92aWRlciNhZGRMaXN0ZW5lcihvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklMYWJlbFByb3ZpZGVyTGlzdGVuZXIpCisJCSAqLworCQlwdWJsaWMgdm9pZCBhZGRMaXN0ZW5lcihAU3VwcHJlc3NXYXJuaW5ncygidW51c2VkIikKKwkJZmluYWwgSUxhYmVsUHJvdmlkZXJMaXN0ZW5lciBsaXN0ZW5lcikgeworCQkJLy8gbm90aGluZworCQl9CisKKwkJLyoqCisJCSAqIEBzZWUgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JQmFzZUxhYmVsUHJvdmlkZXIjZGlzcG9zZSgpCisJCSAqLworCQlwdWJsaWMgdm9pZCBkaXNwb3NlKCkgeworCQkJLy8gbm90aGluZworCQl9CisKKwkJLyoqCisJCSAqIEBzZWUgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JQmFzZUxhYmVsUHJvdmlkZXIjaXNMYWJlbFByb3BlcnR5KGphdmEubGFuZy5PYmplY3QsCisJCSAqICAgICAgamF2YS5sYW5nLlN0cmluZykKKwkJICovCisJCXB1YmxpYyBib29sZWFuIGlzTGFiZWxQcm9wZXJ0eShAU3VwcHJlc3NXYXJuaW5ncygidW51c2VkIikKKwkJZmluYWwgT2JqZWN0IGVsZW1lbnQsIEBTdXBwcmVzc1dhcm5pbmdzKCJ1bnVzZWQiKQorCQlmaW5hbCBTdHJpbmcgcHJvcGVydHkpIHsKKwkJCXJldHVybiBmYWxzZTsKKwkJfQorCisJCS8qKgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSUJhc2VMYWJlbFByb3ZpZGVyI3JlbW92ZUxpc3RlbmVyKG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSUxhYmVsUHJvdmlkZXJMaXN0ZW5lcikKKwkJICovCisJCXB1YmxpYyB2b2lkIHJlbW92ZUxpc3RlbmVyKEBTdXBwcmVzc1dhcm5pbmdzKCJ1bnVzZWQiKQorCQlmaW5hbCBJTGFiZWxQcm92aWRlckxpc3RlbmVyIGxpc3RlbmVyKSB7CisJCQkvLyBub3RoaW5nCisJCX0KKwl9IC8vIEFjdGl2ZVNpbXVsYXRpb25zTGFiZWxQcm92aWRlcgorfSAvLyBBY3RpdmVTaW11bGF0aW9uc1ZpZXcKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS92aWV3cy9EZWNvcmF0b3JzVmlldy5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3ZpZXdzL0RlY29yYXRvcnNWaWV3LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjAyYjY2NgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS92aWV3cy9EZWNvcmF0b3JzVmlldy5qYXZhCkBAIC0wLDAgKzEsMTIyIEBACisvLyBEZWNvcmF0b3JzVmlldy5qYXZhCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0udWkudmlld3M7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UucmVzb3VyY2UuSW1hZ2VEZXNjcmlwdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5Db25zdGFudHM7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmdyYXBoaWNzLkltYWdlOworCisvKioKKyAqIFRoaXMgY2xhc3MgcmVwcmVzZW50cyB0aGUgZWNsaXBzZSB2aWV3IG9mIHRoZSB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLkRlY29yYXRvcn1zIHRoYXQgaGF2ZQorICogYmVlbiBpbXBvcnRlZCBpbnRvIGVjbGlwc2UgYXMgcGx1Zy1pbnMuCisgKgorICogQHNlZSBTZXF1ZW5jZXJzVmlldworICovCitwdWJsaWMgY2xhc3MgRGVjb3JhdG9yc1ZpZXcgZXh0ZW5kcyBJZGVudGlmaWFibGVQbHVnaW5WaWV3IHsKKworCS8qKgorCSAqIFRoZSBpZGVudGlmaWVyIG9mIHRoZSBEZWNvcmF0b3JzIFZpZXcKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBJRF9ERUNPUkFUT1JTX1ZJRVcgPSAib3JnLmVjbGlwc2Uuc3RlbS51aS52aWV3cy5kZWNvcmF0b3JzIjsgLy8kTk9OLU5MUy0xJAorCisJLyoqCisJICogRGVmYXVsdCBDb25zdHJ1Y3RvcgorCSAqLworCXB1YmxpYyBEZWNvcmF0b3JzVmlldygpIHsKKwkJc3VwZXIoKTsKKwl9IC8vIERlY29yYXRvcnNWaWV3CisKKwkvKioKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgSWRlbnRpZmlhYmxlVmlld01vZGVsIGdldElucHV0KCkgeworCQlyZXR1cm4gRGVjb3JhdG9yTW9kZWwuZ2V0TW9kZWwoKTsKKwl9IC8vIGdldElucHV0CisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0udWkudmlld3MuSWRlbnRpZmlhYmxlUGx1Z2luVmlldyNnZXRJZGVudGlmaWFibGVQbHVnaW5WaWV3TGFiZWxDb250ZW50UHJvdmlkZXIoKQorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCBJZGVudGlmaWFibGVQbHVnaW5WaWV3TGFiZWxDb250ZW50UHJvdmlkZXIgZ2V0SWRlbnRpZmlhYmxlUGx1Z2luVmlld0xhYmVsQ29udGVudFByb3ZpZGVyKCkgeworCQlyZXR1cm4gbmV3IERlY29yYXRvclZpZXdUcmVlQ29udGVudFByb3ZpZGVyKCk7CisJfSAvLyBnZXRJZGVudGlmaWFibGVQbHVnaW5WaWV3TGFiZWxDb250ZW50UHJvdmlkZXIKKworCS8qKgorCSAqIFRoaXMgY2xhc3MgcmVwcmVzZW50cyB0aGUgbW9kZWwgb2YgdGhlIHtAbGluayBEZWNvcmF0b3J9cyB0aGF0IGV4dGVuZCBhCisJICogb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmRlY29yYXRvcnMgZXh0ZW5zaW9uIHBvaW50LgorCSAqLworCXByb3RlY3RlZCBzdGF0aWMgY2xhc3MgRGVjb3JhdG9yTW9kZWwgZXh0ZW5kcyBJZGVudGlmaWFibGVWaWV3TW9kZWwgeworCisJCS8vIFRoZSBzaW5nbGV0b24gaW5zdGFuY2UKKwkJcHJpdmF0ZSBzdGF0aWMgRGVjb3JhdG9yTW9kZWwgZGVjTW9kZWw7CisKKwkJLyoqCisJCSAqIENvbnN0cnVjdG9yCisJCSAqLworCQlwcml2YXRlIERlY29yYXRvck1vZGVsKGZpbmFsIFN0cmluZyBleHRlbnNpb25Qb2ludElEKSB7CisJCQlzdXBlcihleHRlbnNpb25Qb2ludElEKTsKKwkJfSAvLyBEZWNvcmF0b3JNb2RlbAorCisJCS8qKgorCQkgKiBAcmV0dXJuIHRoZSBzaW5nbGV0b24gaW5zdGFuY2Ugb2YgdGhlIG1vZGVsCisJCSAqLworCQlwdWJsaWMgc3RhdGljIERlY29yYXRvck1vZGVsIGdldE1vZGVsKCkgeworCQkJLy8gRG8gd2UgbmVlZCB0byBtYWtlIHRoZSBtb2RlbD8KKwkJCWlmIChkZWNNb2RlbCA9PSBudWxsKSB7CisJCQkJLy8gWWVzCisJCQkJZGVjTW9kZWwgPSBuZXcgRGVjb3JhdG9yTW9kZWwoCisJCQkJCQlDb25zdGFudHMuSURfREVDT1JBVE9SX0VYVEVOU0lPTl9QT0lOVCk7CisJCQl9CisJCQlyZXR1cm4gZGVjTW9kZWw7CisJCX0gLy8gZ2V0TW9kZWwKKwl9IC8vIERlY29yYXRvck1vZGVsCisKKwkvKioKKwkgKiBUaGlzIGNsYXNzIGlzIHRoZSBjb250ZW50IHByb3ZpZGVyIG9mIHRoZSBkZWNvcmF0b3JzIHZpZXcuCisJICovCisJcHJvdGVjdGVkIHN0YXRpYyBjbGFzcyBEZWNvcmF0b3JWaWV3VHJlZUNvbnRlbnRQcm92aWRlciBleHRlbmRzCisJCQlJZGVudGlmaWFibGVQbHVnaW5WaWV3TGFiZWxDb250ZW50UHJvdmlkZXIgeworCisJCS8vIFRoaXMgaXMgdGhlIGltYWdlIHVzZWQgdG8gcmVwcmVzZW50IGRlY29yYXRvcnMgaW4gdGhlIGRlY29yYXRvcnMgdmlldworCQlzdGF0aWMgSW1hZ2VEZXNjcmlwdG9yIGRpc2Vhc2VJY29uID0gbnVsbDsKKworCQkvLyBJZiB0cnVlIHRoZW4gd2UndmUgbmV2ZXIgdHJpZWQgdG8gZ2V0IHRoZSBpY29uCisJCXN0YXRpYyBib29sZWFuIGRpc2Vhc2VJY29uRmlyc3RUaW1lID0gdHJ1ZTsKKworCQkvKioKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnVpLnZpZXdzLklkZW50aWZpYWJsZVBsdWdpblZpZXcuSWRlbnRpZmlhYmxlUGx1Z2luVmlld0xhYmVsQ29udGVudFByb3ZpZGVyI2dldEltYWdlKGphdmEubGFuZy5PYmplY3QpCisJCSAqLworCQlAT3ZlcnJpZGUKKwkJcHVibGljIEltYWdlIGdldEltYWdlKGZpbmFsIE9iamVjdCBlbGVtZW50KSB7CisJCQlyZXR1cm4gKGVsZW1lbnQgaW5zdGFuY2VvZiBJZGVudGlmaWFibGVEZWxlZ2F0ZSkgPyBnZXREaXNlYXNlSWNvbigpCisJCQkJCTogc3VwZXIuZ2V0SW1hZ2UoZWxlbWVudCk7CisJCX0gLy8gZ2V0SW1hZ2UKKworCQkvKioKKwkJICogQHJldHVybiB0aGUgaWNvbiB0byBiZSB1c2VkIHRvIHJlcHJlc2VudCBkZWNvcmF0b3JzLCBvciBudWxsIGlmIGl0CisJCSAqICAgICAgICAgY2FuJ3QgYmUgbG9hZGVkLgorCQkgKi8KKwkJcHJpdmF0ZSBJbWFnZSBnZXREaXNlYXNlSWNvbigpIHsKKwkJCXJldHVybiBudWxsOworCQkJLy8gLy8gU2hvdWxkIHdlIHRyeSB0byBsb2FkIHRoZSBpY29uPworCQkJLy8gaWYgKGRpc2Vhc2VJY29uRmlyc3RUaW1lICYmIGRpc2Vhc2VJY29uID09IG51bGwpIHsKKwkJCS8vIC8vIFllcworCQkJLy8gZGlzZWFzZUljb25GaXJzdFRpbWUgPSBmYWxzZTsKKwkJCS8vIGRpc2Vhc2VJY29uID0gQWJzdHJhY3RVSVBsdWdpbi5pbWFnZURlc2NyaXB0b3JGcm9tUGx1Z2luKAorCQkJLy8gIm9yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscyIsCisJCQkvLyAiaWNvbnMvZnVsbC9jdXN0b20xNi8iICsgImRpc2Vhc2UuZ2lmIik7CisJCQkvLyB9IC8vIGlmIHdlIHNob3VsZCBsb2FkIHRoZSBpY29uCisJCQkvLyByZXR1cm4gZGlzZWFzZUljb24uY3JlYXRlSW1hZ2UoKTsKKwkJfSAvLyBnZXRkaXNlYXNlSWNvbgorCX0gLy8gRGVjb3JhdG9yVmlld1RyZWVDb250ZW50UHJvdmlkZXIKK30gLy8gRGVjb3JhdG9yc1ZpZXcKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS92aWV3cy9FeGVjdXRhYmxlUGx1Z2luVmlldy5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3ZpZXdzL0V4ZWN1dGFibGVQbHVnaW5WaWV3LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWI2YTQ0MwotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS92aWV3cy9FeGVjdXRhYmxlUGx1Z2luVmlldy5qYXZhCkBAIC0wLDAgKzEsMjE3IEBACisvLyBFeGVjdXRhYmxlUGx1Z2luVmlldy5qYXZhCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0udWkudmlld3M7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgamF2YS50ZXh0Lk1lc3NhZ2VGb3JtYXQ7CitpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JQ29uZmlndXJhdGlvbkVsZW1lbnQ7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklFeHRlbnNpb25SZWdpc3RyeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGxhdGZvcm07CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JTGFiZWxQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklMYWJlbFByb3ZpZGVyTGlzdGVuZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU3RydWN0dXJlZENvbnRlbnRQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLkxpc3RWaWV3ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5WaWV3ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLkNvbnN0YW50czsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnVpLkFjdGl2YXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZ3JhcGhpY3MuSW1hZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLnBhcnQuVmlld1BhcnQ7CisKKy8qKgorICogVGhpcyBjbGFzcyByZXByZXNlbnRzIGFuIGVjbGlwc2UgdmlldyBvZiB0aGUgZXhlY3V0YWJsZSBwbHVnLWluIHJlc291cmNlcyBvZgorICogYSBwYXJ0aWN1bGFyIHR5cGUgdGhhdCBoYXZlIGJlZW4gaW1wb3J0ZWQgaW50byBlY2xpcHNlIGFzIHBsdWctaW5zLgorICovCitwdWJsaWMgYWJzdHJhY3QgY2xhc3MgRXhlY3V0YWJsZVBsdWdpblZpZXcgZXh0ZW5kcyBWaWV3UGFydCB7CisKKwkvKioKKwkgKiBUaGUgTGlzdCBvZiB0aGluZ3MgdG8gYmUgc2hvd24gaW4gdGhlIHZpZXcuCisJICovCisJcHJpdmF0ZSBMaXN0Vmlld2VyIGx2OworCisJLyoqCisJICogQHJldHVybiB0aGUgaW5wdXQgbW9kZWwgc3BlY2lmaWMgdG8gdGhpcyB2aWV3CisJICovCisJcHJvdGVjdGVkIGFic3RyYWN0IEV4ZWN1dGFibGVWaWV3TW9kZWwgZ2V0SW5wdXQoKTsKKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2UudWkucGFydC5Xb3JrYmVuY2hQYXJ0I2NyZWF0ZVBhcnRDb250cm9sKG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZSkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBjcmVhdGVQYXJ0Q29udHJvbChDb21wb3NpdGUgcGFyZW50KSB7CisJCWx2ID0gbmV3IExpc3RWaWV3ZXIocGFyZW50KTsKKwkJbHYuc2V0Q29udGVudFByb3ZpZGVyKG5ldyBFeGVjdXRhYmxlQ29udGVudFByb3ZpZGVyKCkpOworCQlsdi5zZXRMYWJlbFByb3ZpZGVyKG5ldyBFeGVjdXRhYmxlTGFiZWxQcm92aWRlcigpKTsKKwkJbHYuc2V0SW5wdXQoZ2V0SW5wdXQoKSk7CisKKwkJLy8gUHJvdmlkZSBvdXIgc2VsZWN0aW9uCisJCWdldFNpdGUoKS5zZXRTZWxlY3Rpb25Qcm92aWRlcihsdik7CisJfSAvLyBjcmVhdGVQYXJ0Q29udHJvbAorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS51aS5wYXJ0LldvcmtiZW5jaFBhcnQjc2V0Rm9jdXMoKQorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIHNldEZvY3VzKCkgeworCQkvLyBOb3RoaW5nCisJfQorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS51aS5wYXJ0LldvcmtiZW5jaFBhcnQjZGlzcG9zZSgpCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgZGlzcG9zZSgpIHsKKwkJLy8gVE9ETyBpbXBsZW1lbnQgZGlzcG9zZSBzZWUgc2VsZWN0aW9uIHNlcnZpY2UgZG9jCisJCS8vIGdldFNpdGUoKS5zZXRTZWxlY3Rpb25Qcm92aWRlcihudWxsKTsKKwkJc3VwZXIuZGlzcG9zZSgpOworCX0KKworCS8qKgorCSAqIFRoaXMgY2xhc3MgcmVwcmVzZW50cyB0aGUgbW9kZWwgb2YgdGhlIGV4ZWN1dGFibGUgcGx1Zy1pbnMgdGhhdCBleHRlbmQgYQorCSAqIFNURU0gZXh0ZW5zaW9uIHBvaW50LgorCSAqLworCXB1YmxpYyBhYnN0cmFjdCBzdGF0aWMgY2xhc3MgRXhlY3V0YWJsZVZpZXdNb2RlbCB7CisKKwkJcHJpdmF0ZSBMaXN0PElDb25maWd1cmF0aW9uRWxlbWVudD4gZXhlY3V0YWJsZXM7CisKKwkJLyoqCisJCSAqIENvbnN0cnVjdG9yCisJCSAqLworCQlwcm90ZWN0ZWQgRXhlY3V0YWJsZVZpZXdNb2RlbChmaW5hbCBTdHJpbmcgZXh0ZW5zaW9uUG9pbnRJRCwKKwkJCQlmaW5hbCBTdHJpbmcgZXhlY3V0YWJsZUVsZW1lbnROYW1lKSB7CisJCQlleGVjdXRhYmxlcyA9IG5ldyBBcnJheUxpc3Q8SUNvbmZpZ3VyYXRpb25FbGVtZW50PigpOworCQkJLy8gR2V0IHRoZSBjb25maWd1cmF0aW9uIGVsZW1lbnRzIGZvciB0aGlzIGV4dGVuc2lvbiBwb2ludAorCQkJZmluYWwgSUV4dGVuc2lvblJlZ2lzdHJ5IHJlZ2lzdHJ5ID0gUGxhdGZvcm0uZ2V0RXh0ZW5zaW9uUmVnaXN0cnkoKTsKKwkJCWZpbmFsIElDb25maWd1cmF0aW9uRWxlbWVudFtdIGNvbmZpZ0VsZW1lbnRzID0gcmVnaXN0cnkKKwkJCQkJLmdldENvbmZpZ3VyYXRpb25FbGVtZW50c0ZvcihleHRlbnNpb25Qb2ludElEKTsKKworCQkJLy8gSXRlcmF0ZSB0aHJvdWdoIHRoZSBlbGVtZW50cy4KKwkJCWZvciAoaW50IGkgPSAwOyBpIDwgY29uZmlnRWxlbWVudHMubGVuZ3RoOyBpKyspIHsKKwkJCQlmaW5hbCBJQ29uZmlndXJhdGlvbkVsZW1lbnQgZWxlbWVudCA9IGNvbmZpZ0VsZW1lbnRzW2ldOworCQkJCS8vIElzIHRoaXMgYW4gT2JzZXJ2ZXI/CisJCQkJaWYgKGV4ZWN1dGFibGVFbGVtZW50TmFtZS5lcXVhbHMoZWxlbWVudC5nZXROYW1lKCkpKSB7CisJCQkJCS8vIFllcworCQkJCQlleGVjdXRhYmxlcy5hZGQoZWxlbWVudCk7CisJCQkJfSBlbHNlIHsKKwkJCQkJQWN0aXZhdG9yLmxvZ0Vycm9yKE1lc3NhZ2VGb3JtYXQuZm9ybWF0KE1lc3NhZ2VzCisJCQkJCQkJLmdldFN0cmluZygiSVBWaWV3LlVuZXhwZWN0ZWRfRWxlbWVudCIpLCBlbGVtZW50IC8vJE5PTi1OTFMtMSQKKwkJCQkJCQkuZ2V0TmFtZSgpLCBleHRlbnNpb25Qb2ludElEKSwgbnVsbCk7CisJCQkJfSAvLyBlbHNlCisJCQl9IC8vIGZvciBlYWNoIGNvbmZpZ3VyYXRpb24gZWxlbWVudAorCisJCX0gLy8gRXhlY3V0YWJsZVZpZXdNb2RlbAorCisJCS8qKgorCQkgKiBAcmV0dXJuIHRoZSBleGVjdXRhYmxlcworCQkgKi8KKwkJcHJvdGVjdGVkIGZpbmFsIExpc3Q8SUNvbmZpZ3VyYXRpb25FbGVtZW50PiBnZXRFeGVjdXRhYmxlcygpIHsKKwkJCXJldHVybiBleGVjdXRhYmxlczsKKwkJfQorCisJfSAvLyBFeGVjdXRhYmxlVmlld01vZGVsCisKKwkvKioKKwkgKiBUaGlzIGNsYXNzIHByb3ZpZGVzIGNvbnRlbnQgZm9yIHRoZSBsaXN0IHZpZXcgb2YgdGhlIGV4ZWN1dGFibGVzIHRoYXQgYXJlCisJICogYXZhaWxhYmxlIGFzIHBhcnRzIG9mIHBsdWctaW5zLgorCSAqLworCXB1YmxpYyBzdGF0aWMgY2xhc3MgRXhlY3V0YWJsZUNvbnRlbnRQcm92aWRlciBpbXBsZW1lbnRzCisJCQlJU3RydWN0dXJlZENvbnRlbnRQcm92aWRlciB7CisKKwkJLyoqCisJCSAqIEBzZWUgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU3RydWN0dXJlZENvbnRlbnRQcm92aWRlciNnZXRFbGVtZW50cyhqYXZhLmxhbmcuT2JqZWN0KQorCQkgKi8KKwkJcHVibGljIE9iamVjdFtdIGdldEVsZW1lbnRzKE9iamVjdCBpbnB1dEVsZW1lbnQpIHsKKwkJCXJldHVybiAoKEV4ZWN1dGFibGVWaWV3TW9kZWwpIGlucHV0RWxlbWVudCkuZ2V0RXhlY3V0YWJsZXMoKQorCQkJCQkudG9BcnJheSgpOworCQl9IC8vIGdldEVsZW1lbnRzCisKKwkJLyoqCisJCSAqIEBzZWUgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JQ29udGVudFByb3ZpZGVyI2Rpc3Bvc2UoKQorCQkgKi8KKwkJcHVibGljIHZvaWQgZGlzcG9zZSgpIHsKKwkJCS8vIE5vdGhpbmcgdG8gZG8KKwkJfQorCisJCS8qKgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSUNvbnRlbnRQcm92aWRlciNpbnB1dENoYW5nZWQob3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5WaWV3ZXIsCisJCSAqICAgICAgamF2YS5sYW5nLk9iamVjdCwgamF2YS5sYW5nLk9iamVjdCkKKwkJICovCisJCXB1YmxpYyB2b2lkIGlucHV0Q2hhbmdlZChAU3VwcHJlc3NXYXJuaW5ncygidW51c2VkIikgLy8kTk9OLU5MUy0xJAorCQlWaWV3ZXIgdmlld2VyLCBAU3VwcHJlc3NXYXJuaW5ncygidW51c2VkIikgLy8kTk9OLU5MUy0xJAorCQlPYmplY3Qgb2xkSW5wdXQsIEBTdXBwcmVzc1dhcm5pbmdzKCJ1bnVzZWQiKSAvLyROT04tTkxTLTEkCisJCU9iamVjdCBuZXdJbnB1dCkgeworCQkJLy8gTm90aGluZyB0byBkbworCQl9CisJfSAvLyBFeGVjdXRhYmxlQ29udGVudFByb3ZpZGVyCisKKwkvKioKKwkgKiBUaGlzIGNsYXNzIHByb3ZpZGVzIGxhYmVscyB0aGUgZGVzY3JpYmUgdGhlIGV4ZWN1dGFibGVzIGF2YWlsYWJsZSBhcyBwYXJ0CisJICogb2YgcGx1Zy1pbnMuCisJICovCisJcHJvdGVjdGVkIHN0YXRpYyBjbGFzcyBFeGVjdXRhYmxlTGFiZWxQcm92aWRlciBpbXBsZW1lbnRzIElMYWJlbFByb3ZpZGVyIHsKKworCQkvKioKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklMYWJlbFByb3ZpZGVyI2dldEltYWdlKGphdmEubGFuZy5PYmplY3QpCisJCSAqLworCQlwdWJsaWMgSW1hZ2UgZ2V0SW1hZ2UoQFN1cHByZXNzV2FybmluZ3MoInVudXNlZCIpIC8vJE5PTi1OTFMtMSQKKwkJT2JqZWN0IGVsZW1lbnQpIHsKKwkJCXJldHVybiBudWxsOworCQl9CisKKwkJLyoqCisJCSAqIEBzZWUgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JTGFiZWxQcm92aWRlciNnZXRUZXh0KGphdmEubGFuZy5PYmplY3QpCisJCSAqLworCQlwdWJsaWMgU3RyaW5nIGdldFRleHQoT2JqZWN0IGVsZW1lbnQpIHsKKwkJCUlDb25maWd1cmF0aW9uRWxlbWVudCBjb25maWdFbGVtZW50ID0gKElDb25maWd1cmF0aW9uRWxlbWVudCkgZWxlbWVudDsKKwkJCVN0cmluZyByZXRWYWx1ZSA9IGNvbmZpZ0VsZW1lbnQKKwkJCQkJLmdldEF0dHJpYnV0ZShDb25zdGFudHMuRVhFQ1VUQUJMRV9OQU1FX0FUVFJJQlVURSk7CisJCQlyZXR1cm4gcmV0VmFsdWU7CisJCX0gLy8gZ2V0VGV4dAorCisJCS8qKgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSUJhc2VMYWJlbFByb3ZpZGVyI2FkZExpc3RlbmVyKG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSUxhYmVsUHJvdmlkZXJMaXN0ZW5lcikKKwkJICovCisJCXB1YmxpYyB2b2lkIGFkZExpc3RlbmVyKEBTdXBwcmVzc1dhcm5pbmdzKCJ1bnVzZWQiKSAvLyROT04tTkxTLTEkCisJCUlMYWJlbFByb3ZpZGVyTGlzdGVuZXIgbGlzdGVuZXIpIHsKKwkJCS8vIE5vdGhpbmcKKwkJfQorCisJCS8qKgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSUJhc2VMYWJlbFByb3ZpZGVyI2Rpc3Bvc2UoKQorCQkgKi8KKwkJcHVibGljIHZvaWQgZGlzcG9zZSgpIHsKKwkJCS8vIE5vdGhpbmcKKwkJfQorCisJCS8qKgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSUJhc2VMYWJlbFByb3ZpZGVyI2lzTGFiZWxQcm9wZXJ0eShqYXZhLmxhbmcuT2JqZWN0LAorCQkgKiAgICAgIGphdmEubGFuZy5TdHJpbmcpCisJCSAqLworCQlwdWJsaWMgYm9vbGVhbiBpc0xhYmVsUHJvcGVydHkoQFN1cHByZXNzV2FybmluZ3MoInVudXNlZCIpIC8vJE5PTi1OTFMtMSQKKwkJT2JqZWN0IGVsZW1lbnQsIEBTdXBwcmVzc1dhcm5pbmdzKCJ1bnVzZWQiKSAvLyROT04tTkxTLTEkCisJCVN0cmluZyBwcm9wZXJ0eSkgeworCQkJcmV0dXJuIGZhbHNlOworCQl9CisKKwkJLyoqCisJCSAqIEBzZWUgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JQmFzZUxhYmVsUHJvdmlkZXIjcmVtb3ZlTGlzdGVuZXIob3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JTGFiZWxQcm92aWRlckxpc3RlbmVyKQorCQkgKi8KKwkJcHVibGljIHZvaWQgcmVtb3ZlTGlzdGVuZXIoQFN1cHByZXNzV2FybmluZ3MoInVudXNlZCIpIC8vJE5PTi1OTFMtMSQKKwkJSUxhYmVsUHJvdmlkZXJMaXN0ZW5lciBsaXN0ZW5lcikgeworCQkJLy8gTm90aGluZworCQl9CisJfSAvLyBFeGVjdXRhYmxlTGFiZWxQcm92aWRlcgorCit9IC8vIEV4ZWN1dGFibGVQbHVnaW5WaWV3CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvdmlld3MvRXhwZXJpbWVudHNWaWV3LmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvdmlld3MvRXhwZXJpbWVudHNWaWV3LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzE2MGQyNgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS92aWV3cy9FeHBlcmltZW50c1ZpZXcuamF2YQpAQCAtMCwwICsxLDEwNiBAQAorLy8gRXhwZXJpbWVudHNWaWV3LmphdmEKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS51aS52aWV3czsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuQ29uc3RhbnRzOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udWkuQWN0aXZhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udWkuSVNoYXJlZEltYWdlczsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZ3JhcGhpY3MuSW1hZ2U7CisKKy8qKgorICogVGhpcyBjbGFzcyByZXByZXNlbnRzIHRoZSBlY2xpcHNlIHZpZXcgb2YgdGhlCisgKiB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmV4cGVyaW1lbnQuRXhwZXJpbWVudH1zIHRoYXQgaGF2ZSBiZWVuIGltcG9ydGVkCisgKiBpbnRvIGVjbGlwc2UgYXMgcGx1Zy1pbnMuCisgKi8KK3B1YmxpYyBjbGFzcyBFeHBlcmltZW50c1ZpZXcgZXh0ZW5kcyBJZGVudGlmaWFibGVQbHVnaW5WaWV3IHsKKworCS8qKgorCSAqIFRoZSBpZGVudGlmaWVyIG9mIHRoZSBFeHBlcmltZW50cyBWaWV3IHtAdmFsdWV9CisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgSURfRVhQRVJJTUVOVFNfVklFVyA9IENvbnN0YW50cy5JRF9ST09UCisJCQkrICIudWkudmlld3MuZXhwZXJpbWVudHMiOyAvLyROT04tTkxTLTEkCisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0udWkudmlld3MuSWRlbnRpZmlhYmxlUGx1Z2luVmlldyNnZXRJZGVudGlmaWFibGVQbHVnaW5WaWV3TGFiZWxDb250ZW50UHJvdmlkZXIoKQorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCBJZGVudGlmaWFibGVQbHVnaW5WaWV3TGFiZWxDb250ZW50UHJvdmlkZXIgZ2V0SWRlbnRpZmlhYmxlUGx1Z2luVmlld0xhYmVsQ29udGVudFByb3ZpZGVyKCkgeworCQlyZXR1cm4gbmV3IEV4cGVyaW1lbnRQbHVnaW5WaWV3TGFiZWxDb250ZW50UHJvdmlkZXIoKTsKKwl9CisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0udWkudmlld3MuSWRlbnRpZmlhYmxlUGx1Z2luVmlldyNnZXRJbnB1dCgpCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIElkZW50aWZpYWJsZVZpZXdNb2RlbCBnZXRJbnB1dCgpIHsKKwkJcmV0dXJuIEV4cGVyaW1lbnRzVmlld01vZGVsLmdldE1vZGVsKCk7CisJfQorCisJLyoqCisJICogVGhpcyBjbGFzcyByZXByZXNlbnRzIGEgc2luZ2xldG9uIGluc3RhbmNlIG9mIGEgbW9kZWwgb2YgdGhlIFNURU0KKwkgKiB7QGxpbmsgRXhwZXJpbWVudH1zIHRoYXQgYXJlIHBsdWdnZWQgaW50byB0aGUgc3lzdGVtLgorCSAqLworCXByb3RlY3RlZCBzdGF0aWMgY2xhc3MgRXhwZXJpbWVudHNWaWV3TW9kZWwgZXh0ZW5kcyBJZGVudGlmaWFibGVWaWV3TW9kZWwgeworCQkvLyBUaGUgc2luZ2xldG9uIGluc3RhbmNlCisJCXByaXZhdGUgc3RhdGljIEV4cGVyaW1lbnRzVmlld01vZGVsIGV2TW9kZWw7CisKKwkJcHJpdmF0ZSBFeHBlcmltZW50c1ZpZXdNb2RlbCgpIHsKKwkJCXN1cGVyKENvbnN0YW50cy5JRF9FWFBFUklNRU5UX0VYVEVOU0lPTl9QT0lOVCk7CisJCX0KKworCQkvKioKKwkJICogQHJldHVybiB0aGUgc2luZ2xldG9uIGluc3RhbmNlIG9mIHRoZSBNb2RlbFZpZXdNb2RlbAorCQkgKi8KKwkJcHVibGljIHN0YXRpYyBFeHBlcmltZW50c1ZpZXdNb2RlbCBnZXRNb2RlbCgpIHsKKwkJCWlmIChldk1vZGVsID09IG51bGwpIHsKKwkJCQlldk1vZGVsID0gbmV3IEV4cGVyaW1lbnRzVmlld01vZGVsKCk7CisJCQl9CisJCQlyZXR1cm4gZXZNb2RlbDsKKwkJfSAvLyBnZXRNb2RlbAorCX0gLy8gRXhwZXJpbWVudHNWaWV3TW9kZWwKKworCXByb3RlY3RlZCBzdGF0aWMgY2xhc3MgRXhwZXJpbWVudFBsdWdpblZpZXdMYWJlbENvbnRlbnRQcm92aWRlciBleHRlbmRzCisJCQlJZGVudGlmaWFibGVQbHVnaW5WaWV3TGFiZWxDb250ZW50UHJvdmlkZXIgeworCisJCS8vIFRoaXMgaXMgdGhlIGltYWdlIHVzZWQgdG8gcmVwcmVzZW50IGV4cGVyaW1lbnRzIGluIHRoZSBFeHBlcmltZW50cyB2aWV3CisJCXN0YXRpYyBJbWFnZSBleHBlcmltZW50SWNvbiA9IG51bGw7CisKKwkJLy8gSWYgdHJ1ZSB0aGVuIHdlJ3ZlIG5ldmVyIHRyaWVkIHRvIGdldCB0aGUgaWNvbgorCQlzdGF0aWMgYm9vbGVhbiBleHBlcmltZW50SWNvbkZpcnN0VGltZSA9IHRydWU7CisKKwkJLyoqCisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS51aS52aWV3cy5JZGVudGlmaWFibGVQbHVnaW5WaWV3LklkZW50aWZpYWJsZVBsdWdpblZpZXdMYWJlbENvbnRlbnRQcm92aWRlciNnZXRJbWFnZShqYXZhLmxhbmcuT2JqZWN0KQorCQkgKi8KKwkJQE92ZXJyaWRlCisJCXB1YmxpYyBJbWFnZSBnZXRJbWFnZShPYmplY3QgZWxlbWVudCkgeworCQkJcmV0dXJuIChlbGVtZW50IGluc3RhbmNlb2YgSWRlbnRpZmlhYmxlRGVsZWdhdGUpID8gZ2V0RXhwZXJpbWVudEljb24oKQorCQkJCQk6IHN1cGVyLmdldEltYWdlKGVsZW1lbnQpOworCQl9IC8vIGdldEltYWdlCisKKwkJLyoqCisJCSAqIEByZXR1cm4gdGhlIGljb24gdG8gYmUgdXNlZCB0byByZXByZXNlbnQgZXhwZXJpbWVudHMsIG9yIG51bGwgaWYgaXQKKwkJICogICAgICAgICBjYW4ndCBiZSBsb2FkZWQuCisJCSAqLworCQlwcml2YXRlIEltYWdlIGdldEV4cGVyaW1lbnRJY29uKCkgeworCQkJLy8gU2hvdWxkIHdlIHRyeSB0byBsb2FkIHRoZSBpY29uPworCQkJaWYgKGV4cGVyaW1lbnRJY29uRmlyc3RUaW1lICYmIGV4cGVyaW1lbnRJY29uID09IG51bGwpIHsKKwkJCQkvLyBZZXMKKwkJCQlleHBlcmltZW50SWNvbkZpcnN0VGltZSA9IGZhbHNlOworCQkJCWV4cGVyaW1lbnRJY29uID0gQWN0aXZhdG9yLmdldERlZmF1bHQoKS5nZXRJbWFnZVJlZ2lzdHJ5KCkuZ2V0KAorCQkJCQkJSVNoYXJlZEltYWdlcy5FWFBFUklNRU5UX0lDT04pOworCQkJfSAvLyBpZiB3ZSBzaG91bGQgbG9hZCB0aGUgaWNvbgorCQkJcmV0dXJuIGV4cGVyaW1lbnRJY29uOworCQl9IC8vIGdldEV4cGVyaW1lbnRJY29uCisKKwl9IC8vIEV4cGVyaW1lbnRQbHVnaW5WaWV3TGFiZWxDb250ZW50UHJvdmlkZXIKK30gLy8gRXhwZXJpbWVudHNWaWV3ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3ZpZXdzL0dyYXBoc1ZpZXcuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS92aWV3cy9HcmFwaHNWaWV3LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2Y5OTZhYwotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS92aWV3cy9HcmFwaHNWaWV3LmphdmEKQEAgLTAsMCArMSwxMTggQEAKKy8vIEdyYXBoc1ZpZXcuamF2YQorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnVpLnZpZXdzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA2LCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5Db25zdGFudHM7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS51aS5BY3RpdmF0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS51aS5JU2hhcmVkSW1hZ2VzOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ncmFwaGljcy5JbWFnZTsKKworLyoqCisgKiBUaGlzIGNsYXNzIHJlcHJlc2VudHMgdGhlIGVjbGlwc2UgdmlldyBvZiB0aGUKKyAqIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguR3JhcGh9cyB0aGF0IGhhdmUgYmVlbiBpbXBvcnRlZCBpbnRvCisgKiBlY2xpcHNlIGFzIHBsdWctaW5zLgorICovCitwdWJsaWMgY2xhc3MgR3JhcGhzVmlldyBleHRlbmRzIElkZW50aWZpYWJsZVBsdWdpblZpZXcgeworCisJLyoqCisJICogVGhlIGlkZW50aWZpZXIgb2YgdGhlIEdyYXBoIFZpZXcKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBJRF9HUkFQSFNfVklFVyA9ICJvcmcuZWNsaXBzZS5zdGVtLnVpLnZpZXdzLmdyYXBocyI7IC8vJE5PTi1OTFMtMSQKKworCS8qKgorCSAqIENvbnN0cnVjdG9yCisJICovCisJcHVibGljIEdyYXBoc1ZpZXcoKSB7CisJCXN1cGVyKCk7CisJfSAvLyBHcmFwaHNWaWV3CisKKwkvKioKKwkgKiBAcmV0dXJuIHRoZSBpbnB1dCBtb2RlbCBzcGVjaWZpYyB0byB0aGlzIHZpZXcKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgSWRlbnRpZmlhYmxlVmlld01vZGVsIGdldElucHV0KCkgeworCQlyZXR1cm4gR3JhcGhWaWV3TW9kZWwuZ2V0TW9kZWwoKTsKKwl9IC8vIGdldElucHV0CisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0udWkudmlld3MuSWRlbnRpZmlhYmxlUGx1Z2luVmlldyNnZXRJZGVudGlmaWFibGVQbHVnaW5WaWV3TGFiZWxDb250ZW50UHJvdmlkZXIoKQorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCBJZGVudGlmaWFibGVQbHVnaW5WaWV3TGFiZWxDb250ZW50UHJvdmlkZXIgZ2V0SWRlbnRpZmlhYmxlUGx1Z2luVmlld0xhYmVsQ29udGVudFByb3ZpZGVyKCkgeworCQlyZXR1cm4gbmV3IEdyYXBoUGx1Z2luVmlld0xhYmVsQ29udGVudFByb3ZpZGVyKCk7CisJfSAvLyBnZXRJZGVudGlmaWFibGVQbHVnaW5WaWV3TGFiZWxDb250ZW50UHJvdmlkZXIKKworCS8qKgorCSAqIFRoaXMgY2xhc3MgcmVwcmVzZW50cyBhIHNpbmdsZXRvbiBpbnN0YW5jZSBvZiBhIG1vZGVsIG9mIHRoZQorCSAqIHtAbGluayBHcmFwaH1zIHRoYXQgYXJlIHBsdWdnZWQtaW4gdG8gdGhlIHN5c3RlbS4KKwkgKi8KKwlwcm90ZWN0ZWQgc3RhdGljIGNsYXNzIEdyYXBoVmlld01vZGVsIGV4dGVuZHMgSWRlbnRpZmlhYmxlVmlld01vZGVsIHsKKwkJLy8gVGhlIHNpbmdsZXRvbiBpbnN0YW5jZQorCQlwcml2YXRlIHN0YXRpYyBHcmFwaFZpZXdNb2RlbCBndk1vZGVsOworCisJCS8qKgorCQkgKiBDb25zdHJ1Y3RvcgorCQkgKi8KKwkJcHJpdmF0ZSBHcmFwaFZpZXdNb2RlbCgpIHsKKwkJCXN1cGVyKENvbnN0YW50cy5JRF9HUkFQSF9FWFRFTlNJT05fUE9JTlQpOworCQl9IC8vIEdyYXBoVmlld01vZGVsCisKKwkJLyoqCisJCSAqIEByZXR1cm4gdGhlIHNpbmdsZSBpbnN0YW5jZSBvZiB0aGUgR3JhcGhWaWV3TW9kZWwKKwkJICovCisJCXB1YmxpYyBzdGF0aWMgR3JhcGhWaWV3TW9kZWwgZ2V0TW9kZWwoKSB7CisJCQkvLyBEbyB3ZSBuZWVkIHRvIG1ha2UgdGhlIG1vZGVsPworCQkJaWYgKGd2TW9kZWwgPT0gbnVsbCkgeworCQkJCS8vIFllcworCQkJCWd2TW9kZWwgPSBuZXcgR3JhcGhWaWV3TW9kZWwoKTsKKwkJCX0KKwkJCXJldHVybiBndk1vZGVsOworCQl9IC8vIGdldE1vZGVsCisKKwl9IC8vIEdyYXBoVmlld01vZGVsCisKKwlwcm90ZWN0ZWQgc3RhdGljIGNsYXNzIEdyYXBoUGx1Z2luVmlld0xhYmVsQ29udGVudFByb3ZpZGVyIGV4dGVuZHMKKwkJCUlkZW50aWZpYWJsZVBsdWdpblZpZXdMYWJlbENvbnRlbnRQcm92aWRlciB7CisKKwkJLy8gVGhpcyBpcyB0aGUgaW1hZ2UgdXNlZCB0byByZXByZXNlbnQgZ3JhcGhzIGluIHRoZSBncmFwaCB2aWV3CisJCXN0YXRpYyBJbWFnZSBncmFwaEljb24gPSBudWxsOworCisJCS8vIElmIHRydWUgdGhlbiB3ZSd2ZSBuZXZlciB0cmllZCB0byBnZXQgdGhlIGljb24KKwkJc3RhdGljIGJvb2xlYW4gZ3JhcGhJY29uRmlyc3RUaW1lID0gdHJ1ZTsKKworCQkvKioKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnVpLnZpZXdzLklkZW50aWZpYWJsZVBsdWdpblZpZXcuSWRlbnRpZmlhYmxlUGx1Z2luVmlld0xhYmVsQ29udGVudFByb3ZpZGVyI2dldEltYWdlKGphdmEubGFuZy5PYmplY3QpCisJCSAqLworCQlAT3ZlcnJpZGUKKwkJcHVibGljIEltYWdlIGdldEltYWdlKGZpbmFsIE9iamVjdCBlbGVtZW50KSB7CisJCQlyZXR1cm4gKGVsZW1lbnQgaW5zdGFuY2VvZiBJZGVudGlmaWFibGVEZWxlZ2F0ZSkgPyBnZXRHcmFwaEljb24oKQorCQkJCQk6IHN1cGVyLmdldEltYWdlKGVsZW1lbnQpOworCQl9IC8vIGdldEltYWdlCisKKwkJLyoqCisJCSAqIEByZXR1cm4gdGhlIGljb24gdG8gYmUgdXNlZCB0byByZXByZXNlbnQgZ3JhcGhzLCBvciBudWxsIGlmIGl0IGNhbid0CisJCSAqICAgICAgICAgYmUgbG9hZGVkLgorCQkgKi8KKwkJcHJpdmF0ZSBJbWFnZSBnZXRHcmFwaEljb24oKSB7CisJCQkvLyBTaG91bGQgd2UgdHJ5IHRvIGxvYWQgdGhlIGljb24/CisJCQlpZiAoZ3JhcGhJY29uRmlyc3RUaW1lICYmIGdyYXBoSWNvbiA9PSBudWxsKSB7CisJCQkJLy8gWWVzCisJCQkJZ3JhcGhJY29uRmlyc3RUaW1lID0gZmFsc2U7CisJCQkJZ3JhcGhJY29uID0gQWN0aXZhdG9yLmdldERlZmF1bHQoKS5nZXRJbWFnZVJlZ2lzdHJ5KCkuZ2V0KAorCQkJCQkJSVNoYXJlZEltYWdlcy5HUkFQSF9JQ09OKTsKKwkJCX0gLy8gaWYgd2Ugc2hvdWxkIGxvYWQgdGhlIGljb24KKwkJCXJldHVybiBncmFwaEljb247CisJCX0gLy8gZ2V0R3JhcGhJY29uCisKKwl9IC8vIEdyYXBoUGx1Z2luVmlld0xhYmVsQ29udGVudFByb3ZpZGVyCit9IC8vIEdyYXBoc1ZpZXcKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS92aWV3cy9JQ29udGV4dE1lbnVVcGRhdGVzTGlzdGVuZXIuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS92aWV3cy9JQ29udGV4dE1lbnVVcGRhdGVzTGlzdGVuZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYzgxNjI2Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3ZpZXdzL0lDb250ZXh0TWVudVVwZGF0ZXNMaXN0ZW5lci5qYXZhCkBAIC0wLDAgKzEsMzEgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS51aS52aWV3czsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uTWVudU1hbmFnZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uUHJvdmlkZXI7CisKKy8qKgorICogVGhlIGludGVyZmFjZSBkZWZpbmVzIGEgbGlzdGVuZXIgdGhhdCBnZXQgbm90aWZpY2F0aW9ucyBhYm91dCBuZXdseSBnZW5lcmF0ZWQgY29udGV4dAorICogbWVudXMuIFVzdWFsbHkgdGhlIGxpc3RlbmVyIHdpbGwgYmUgYSA8Y29kZT5WaWV3UGFydDwvY29kZT4gdGhhdCBuZWVkcyB0byByZWdpc3RlcgorICogdGhlIGNvbnRleHQgbWVudSBzbyB0aGF0IGV4dGVybmFsbHkgZGVmaW5lZCBhZGRpdGlvbnMgdG8gdGhlIG1lbnUgd2lsbCBiZSBhZGRlZC4KKyAqLworcHVibGljIGludGVyZmFjZSBJQ29udGV4dE1lbnVVcGRhdGVzTGlzdGVuZXIgeworCQorCS8qKgorCSAqIFRoZSBtZXRob2QgaXMgYmVpbmcgY2FsbGVkIHdoZW4gbmV3IGNvbnRleHQgbWVudSBoYXMgYmVlbiBjcmVhdGVkLgorCSAqIEBwYXJhbSBtZW51TWFuYWdlciBUaGUgbmV3IE1lbnVNYW5hZ2VyCisJICogQHBhcmFtIHNlbGVjdGlvblByb3ZpZGVyIFRoZSBJU2VsZWN0aW9uUHJvdmlkZXIgZm9yIHRoZSBNZW51TWFuYWdlcgorCSAqLworCXB1YmxpYyB2b2lkIG9uQ29udGV4dE1lbnVVcGRhdGUoTWVudU1hbmFnZXIgbWVudU1hbmFnZXIsIElTZWxlY3Rpb25Qcm92aWRlciBzZWxlY3Rpb25Qcm92aWRlcik7CisKK30KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS92aWV3cy9JZGVudGlmaWFibGVEZWxlZ2F0ZS5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3ZpZXdzL0lkZW50aWZpYWJsZURlbGVnYXRlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzQwZjBkZgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS92aWV3cy9JZGVudGlmaWFibGVEZWxlZ2F0ZS5qYXZhCkBAIC0wLDAgKzEsMTUwIEBACisvLyBJZGVudGlmaWFibGVEZWxlZ2F0ZQorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnVpLnZpZXdzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JQ29uZmlndXJhdGlvbkVsZW1lbnQ7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBsYXRmb3JtT2JqZWN0OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5VUkk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLlV0aWxpdHk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5JZGVudGlmaWFibGU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5pbXBsLkR1YmxpbkNvcmVJbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uam9icy5BY3RpdmF0b3I7CisKKy8qKgorICogVGhpcyBjbGFzcyByZXByZXNlbnRzIGEgc2VyaWFsaXplZCB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5JZGVudGlmaWFibGV9LgorICovCitwdWJsaWMgY2xhc3MgSWRlbnRpZmlhYmxlRGVsZWdhdGUgZXh0ZW5kcyBQbGF0Zm9ybU9iamVjdCBpbXBsZW1lbnRzCisJCUNvbXBhcmFibGU8SWRlbnRpZmlhYmxlRGVsZWdhdGU+IHsKKworCS8vIFRoZSBDYXRlZ29yeSB0aGlzIElkZW50aWZpYWJsZSBiZWxvbmdzIHRvCisJLy8gSSB0aGluayB0aGlzIGNhbiBiZSBkZWxldGVkCisJcHJpdmF0ZSBPYmplY3QgcGFyZW50OworCisJLy8gVGhlIFVSSSBvZiB0aGUgSWRlbnRpZmlhYmxlCisJcHJpdmF0ZSBVUkkgdXJpOworCisJLy8gVGhlIER1YmxpbiBDb3JlIGluc3RhbmNlIHRoYXQgd2FzIGluaXRpYWxpemVkIGZyb20gdGhlIGNvbmZpZ3VyYXRpb24KKwkvLyBlbGVtZW50CisJcHJpdmF0ZSBmaW5hbCBEdWJsaW5Db3JlSW1wbCBkdWJsaW5Db3JlOworCisJLyoqCisJICogQ3JlYXRlIGFuIHtAbGluayBJZGVudGlmaWFibGVEZWxlZ2F0ZX0gZnJvbSB0aGUge0BsaW5rCisJICogSUNvbmZpZ3VyYXRpb25FbGVtZW50fSBvYnRhaW5lZCBmcm9tIGFuIGV4dGVuc2lvbiBwb2ludC4gVGhlIHtAbGluaworCSAqIER1YmxpbkNvcmV9IGluc3RhbmNlIHdpbGwgYmUgaW5pdGlhbGl6ZSBmcm9tIHRoZSB7QGxpbmsKKwkgKiBJQ29uZmlndXJhdGlvbkVsZW1lbnR9CisJICogCisJICogQHBhcmFtIGNvbmZpZ0VsZW1lbnQKKwkgKiAJCXRoZSB7QGxpbmsgSUNvbmZpZ3VyYXRpb25FbGVtZW50fSB0aGF0IGRlZmluZXMgYW4ge0BsaW5rCisJICogCQlJZGVudGlmaWFibGV9IHRoYXQgaGFzIGJlZW4gcGx1Z2dlZCBpbi4KKwkgKi8KKwlwdWJsaWMgSWRlbnRpZmlhYmxlRGVsZWdhdGUoZmluYWwgSUNvbmZpZ3VyYXRpb25FbGVtZW50IGNvbmZpZ0VsZW1lbnQpIHsKKwkJdGhpcy5kdWJsaW5Db3JlID0gbmV3IER1YmxpbkNvcmVJbXBsKGNvbmZpZ0VsZW1lbnQpOworCX0gLy8gSWRlbnRpZmlhYmxlRGVsZWdhdGUKKworCS8qKgorCSAqIEBzZWUgamF2YS5sYW5nLk9iamVjdCN0b1N0cmluZygpCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIFN0cmluZyB0b1N0cmluZygpIHsKKwkJZmluYWwgU3RyaW5nIHJldFZhbHVlID0gZHVibGluQ29yZSAhPSBudWxsID8gZHVibGluQ29yZS5nZXRUaXRsZSgpIDogIiI7IC8vJE5PTi1OTFMtMSQKKwkJcmV0dXJuIHJldFZhbHVlICE9IG51bGwgPyByZXRWYWx1ZSA6ICIiOworCX0KKworCS8qKgorCSAqIEByZXR1cm4gdGhlIHtAbGluayBJZGVudGlmaWFibGV9IGluc3RhbmNlCisJICovCisJcHVibGljIElkZW50aWZpYWJsZSBnZXRJZGVudGlmaWFibGUoKSB7CisJCUlkZW50aWZpYWJsZSByZXRWYWx1ZSA9IG51bGw7CisJCXRyeSB7CisJCQlyZXRWYWx1ZSA9IFV0aWxpdHkuZ2V0SWRlbnRpZmlhYmxlKGdldFVSSSgpKTsKKwkJfSBjYXRjaCAoZmluYWwgRXhjZXB0aW9uIGUpIHsKKwkJCUFjdGl2YXRvci5sb2dFcnJvcigiVGhlIHJlc291cmNlIFwiIiArIGdldFVSSSgpLnRvU3RyaW5nKCkKKwkJCQkJKyAiXCIgd2FzIG5vdCBmb3VuZCBvciB3YXMgb2YgdGhlIHdyb25nIGZvcm1hdCIsIGUpOworCQkJcmV0VmFsdWUgPSBudWxsOworCQl9CisJCXJldHVybiByZXRWYWx1ZTsKKwl9IC8vIGdldElkZW50aWZpYWJsZQorCisJLyoqCisJICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlIHtAbGluayBJZGVudGlmaWFibGV9J3MgZU5TX1VSSS4gVGhpcyBpcyByZWNvcmRlZAorCSAqIAlhcyB0aGUge0BsaW5rIER1YmxpbkNvcmUjZ2V0Rm9ybWF0KCl9IG9mIHRoZSB7QGxpbmsgSWRlbnRpZmlhYmxlfS4KKwkgKiBAc2VlIEdyYXBoUGFja2FnZSNlTlNfVVJJCisJICogQHNlZSBNb2RlbFBhY2thZ2UjZU5TX1VSSQorCSAqIEBzZWUgU2NlbmFyaW9QYWNrYWdlI2VOU19VUkkKKwkgKiBAc2VlIFNlcXVlbmNlclBhY2thZ2UjZU5TX1VSSQorCSAqIEBzZWUgRXhwZXJpbWVudFBhY2thZ2UjZU5TX1VSSQorCSAqLworCXB1YmxpYyBTdHJpbmcgZ2V0Rm9ybWF0KCkgeworCQlyZXR1cm4gZ2V0RHVibGluQ29yZSgpLmdldEZvcm1hdCgpOworCX0gLy8gZ2V0Rm9ybWF0CisKKwkvKioKKwkgKiBAcmV0dXJuIHRoZSB7QGxpbmsgVVJJfSB0byB0aGUgc2VyaWFsaXplZCB7QGxpbmsgSWRlbnRpZmlhYmxlfS4KKwkgKi8KKwlwcml2YXRlIGZpbmFsIFVSSSBnZXRVUkkoKSB7CisJCS8vIEFscmVhZHkgaGF2ZSB0aGUgVVJJPworCQlpZiAodXJpID09IG51bGwpIHsKKwkJCS8vIE5vCisJCQl1cmkgPSBVUkkuY3JlYXRlVVJJKGR1YmxpbkNvcmUuZ2V0SWRlbnRpZmllcigpKTsKKwkJfSAvLyBpZgorCQlyZXR1cm4gdXJpOworCX0gLy8gZ2V0VVJJCisKKwkvKioKKwkgKiBAcmV0dXJuIHRoZSB7QGxpbmsgRHVibGluQ29yZX0KKwkgKi8KKwlwdWJsaWMgZmluYWwgRHVibGluQ29yZUltcGwgZ2V0RHVibGluQ29yZSgpIHsKKwkJcmV0dXJuIGR1YmxpbkNvcmU7CisJfQorCisJLyoqCisJICogQHBhcmFtIG8KKwkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgY29tcGFyZQorCSAqIEBzZWUgamF2YS5sYW5nLkNvbXBhcmFibGUjY29tcGFyZVRvKGphdmEubGFuZy5PYmplY3QpCisJICovCisJcHVibGljIGludCBjb21wYXJlVG8oZmluYWwgSWRlbnRpZmlhYmxlRGVsZWdhdGUgbykgeworCQlyZXR1cm4gdG9TdHJpbmcoKS5jb21wYXJlVG8oby50b1N0cmluZygpKTsKKwl9CisKKwkvKioKKwkgKiBAc2VlIGphdmEubGFuZy5PYmplY3QjZXF1YWxzKGphdmEubGFuZy5PYmplY3QpCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIGJvb2xlYW4gZXF1YWxzKGZpbmFsIE9iamVjdCBvKSB7CisJCWJvb2xlYW4gcmV0VmFsdWUgPSBmYWxzZTsKKwkJaWYgKG8gIT0gbnVsbCkgeworCQkJLy8gWWVzCisJCQlyZXRWYWx1ZSA9IHRvU3RyaW5nKCkuZXF1YWxzKG8udG9TdHJpbmcoKSk7CisJCX0gLy8gaWYKKwkJcmV0dXJuIHJldFZhbHVlOworCX0KKworCS8qKgorCSAqIEBzZWUgamF2YS5sYW5nLk9iamVjdCNoYXNoQ29kZSgpCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIGludCBoYXNoQ29kZSgpIHsKKwkJcmV0dXJuIHRvU3RyaW5nKCkuaGFzaENvZGUoKTsKKwl9CisKKwkvKioKKwkgKiBJIGRvbid0IHRoaW5rIHRoaXMgaXMgZXZlciBjYWxsZWQsIHRoZXJlIGlzIGEgcmVmZXJlbmNlIHRvIGl0LCBidXQgSQorCSAqIGRvbid0IHRoaW5rIGl0IGV2ZXIgZ2V0cyBpbnZva2VkLgorCSAqIAorCSAqIEByZXR1cm4gdGhlIHBhcmVudAorCSAqLworCXB1YmxpYyBPYmplY3QgZ2V0UGFyZW50KCkgeworCQlyZXR1cm4gcGFyZW50OworCX0KKworfSAvLyBJZGVudGlmaWFibGVEZWxlZ2F0ZQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS92aWV3cy9JZGVudGlmaWFibGVQbHVnaW5WaWV3LmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvdmlld3MvSWRlbnRpZmlhYmxlUGx1Z2luVmlldy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM5MDlkMTUKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvdmlld3MvSWRlbnRpZmlhYmxlUGx1Z2luVmlldy5qYXZhCkBAIC0wLDAgKzEsMTA0MyBAQAorLy8gSWRlbnRpZmlhYmxlUGx1Z2luVmlldy5qYXZhCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0udWkudmlld3M7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgamF2YS50ZXh0Lk1lc3NhZ2VGb3JtYXQ7CitpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlzOworaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uczsKK2ltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKK2ltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CitpbXBvcnQgamF2YS51dGlsLk1hcDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JQ29uZmlndXJhdGlvbkVsZW1lbnQ7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklFeHRlbnNpb25SZWdpc3RyeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGxhdGZvcm07CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuQWRhcHRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuVVJJOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmRuZC5Mb2NhbFRyYW5zZmVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5NZW51TWFuYWdlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uU2VwYXJhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnV0aWwuTG9jYWxTZWxlY3Rpb25UcmFuc2ZlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLkRvdWJsZUNsaWNrRXZlbnQ7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JRG91YmxlQ2xpY2tMaXN0ZW5lcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklMYWJlbFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSUxhYmVsUHJvdmlkZXJMaXN0ZW5lcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU3RydWN0dXJlZFNlbGVjdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklUcmVlQ29udGVudFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuU3RydWN0dXJlZFNlbGVjdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlRyZWVWaWV3ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5WaWV3ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLkNvbnN0YW50czsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLkR1YmxpbkNvcmU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5JZGVudGlmaWFibGU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS5HZW9ncmFwaGljTmFtZXM7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5qb2JzLmV4ZWN1dGlvbi5JRXhlY3V0YWJsZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnVpLkFjdGl2YXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnVpLnBlcnNwZWN0aXZlcy5TaW11bGF0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5TV1Q7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmRuZC5ETkQ7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmRuZC5EcmFnU291cmNlRXZlbnQ7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmRuZC5EcmFnU291cmNlTGlzdGVuZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmRuZC5UcmFuc2ZlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLk1vdXNlQWRhcHRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLk1vdXNlRXZlbnQ7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5Nb3VzZVRyYWNrQWRhcHRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZ3JhcGhpY3MuQ29sb3I7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmdyYXBoaWNzLkltYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ncmFwaGljcy5Qb2ludDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZ3JhcGhpY3MuUmVjdGFuZ2xlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5sYXlvdXQuR3JpZERhdGE7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5HcmlkTGF5b3V0OworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db250cm9sOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkRpc3BsYXk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuTGFiZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuU2hlbGw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuVHJlZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5UcmVlSXRlbTsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5JU2hhcmVkSW1hZ2VzOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLlBsYXRmb3JtVUk7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkucGFydC5WaWV3UGFydDsKKworLyoqCisgKiBUaGlzIGNsYXNzIHJlcHJlc2VudHMgYW4gZWNsaXBzZSB2aWV3IG9mIHRoZSB7QGxpbmsgSWRlbnRpZmlhYmxlfSByZXNvdXJjZXMKKyAqIG9mIGEgcGFydGljdWxhciB0eXBlIHRoYXQgaGF2ZSBiZWVuIGltcG9ydGVkIGludG8gZWNsaXBzZSBhcyBwbHVnLWlucy4KKyAqIAorICogQHNlZSBJZGVudGlmaWFibGUKKyAqIEBzZWUgR3JhcGhzVmlldworICogQHNlZSBNb2RlbHNWaWV3CisgKiBAc2VlIFNjZW5hcmlvc1ZpZXcKKyAqLworcHVibGljIGFic3RyYWN0IGNsYXNzIElkZW50aWZpYWJsZVBsdWdpblZpZXcgZXh0ZW5kcyBWaWV3UGFydCB7CisKKwlwcm90ZWN0ZWQgVHJlZVZpZXdlciB0cmVlVmlld2VyOworCisJcHJpdmF0ZSBEdWJsaW5Db3JlVG9vbFRpcEhhbmRsZXIgZGNUVGlwSGFuZGxlcjsKKworCS8qKgorCSAqIFRoaXMgaXMgdGhlIHNlbGVjdGlvbiB0aGF0IGlzIGluIGVmZmVjdCBhdCB0aGUgc3RhcnQgb2YgYSBkcmFnIG9wZXJhdGlvbgorCSAqLworCXByb3RlY3RlZCBJU2VsZWN0aW9uIHNlbGVjdGlvbjsKKworCS8qKgorCSAqIFRoaXMgbWFwIGtlZXBzIHRyYWNrIG9mIHRoZSB7QGxpbmsgSWRlbnRpZmlhYmxlfSB0aGF0IHdlJ3ZlIGRlc2VyaWFsaXplZAorCSAqIHNvIHdlIGRvbid0IG5lZWQgdG8gZG8gdGhhdCBtb3JlIHRoYW4gb25jZS4KKwkgKiAKKwkgKiBAc2VlICNnZXRJZGVudGlmaWFibGUoVVJJKQorCSAqLworCXByb3RlY3RlZCBNYXA8VVJJLCBJZGVudGlmaWFibGU+IGRlc2VyaWFsaXplZElkZW50aWZpYWJsZXNNYXAgPSBuZXcgSGFzaE1hcDxVUkksIElkZW50aWZpYWJsZT4oKTsKKworCS8qKgorCSAqIENvbnN0cnVjdG9yCisJICovCisJcHVibGljIElkZW50aWZpYWJsZVBsdWdpblZpZXcoKSB7CisJCXN1cGVyKCk7CisJfQorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS51aS5wYXJ0LldvcmtiZW5jaFBhcnQjY3JlYXRlUGFydENvbnRyb2wob3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlKQorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGNyZWF0ZVBhcnRDb250cm9sKGZpbmFsIENvbXBvc2l0ZSBwYXJlbnQpIHsKKwkJZGNUVGlwSGFuZGxlciA9IG5ldyBEdWJsaW5Db3JlVG9vbFRpcEhhbmRsZXIocGFyZW50LmdldFNoZWxsKCkpOworCisJCXRyZWVWaWV3ZXIgPSBuZXcgVHJlZVZpZXdlcihwYXJlbnQpOworCQl0cmVlVmlld2VyCisJCQkJLnNldENvbnRlbnRQcm92aWRlcihuZXcgSWRlbnRpZmlhYmxlUGx1Z2luVmlld1RyZWVDb250ZW50UHJvdmlkZXIoKSk7CisJCXRyZWVWaWV3ZXIKKwkJCQkuc2V0TGFiZWxQcm92aWRlcihnZXRJZGVudGlmaWFibGVQbHVnaW5WaWV3TGFiZWxDb250ZW50UHJvdmlkZXIoKSk7CisJCXRyZWVWaWV3ZXIuc2V0VXNlSGFzaGxvb2t1cCh0cnVlKTsKKwkJdHJlZVZpZXdlci5zZXRJbnB1dChnZXRJbnB1dCgpKTsKKworCQkvLyBIb29rIHVwIHRoZSBkdWJsaW4gY29yZSB0b29sIHRpcCBoYW5kbGVyCisJCWRjVFRpcEhhbmRsZXIuYWRkRENUb29sVGlwSGVscCh0cmVlVmlld2VyLmdldFRyZWUoKSk7CisKKwkJLy8gV2UgYmVjb21lIGEgc2VsZWN0aW9uIHByb3ZpZGVyIHRvbworCQlnZXRTaXRlKCkuc2V0U2VsZWN0aW9uUHJvdmlkZXIodHJlZVZpZXdlcik7CisKKwkJLy8gQ29udGV4dCBNZW51CisJCWZpbmFsIE1lbnVNYW5hZ2VyIGNvbnRleHRNZW51TWFuYWdlciA9IG5ldyBNZW51TWFuYWdlcigpOworCQkvLyBQbGFjZSBIb2xkZXIgZm9yIE1lbnUgQWRkaXRpb25zCisJCWNvbnRleHRNZW51TWFuYWdlci5hZGQobmV3IFNlcGFyYXRvcigiZXhlY3V0aW9uIikpOworCisJCS8vIFNldCB0aGUgY29udGV4dCBtZW51IGZvciB0aGUgdmlld2VyCisJCXRyZWVWaWV3ZXIuZ2V0Q29udHJvbCgpLnNldE1lbnUoCisJCQkJY29udGV4dE1lbnVNYW5hZ2VyLmNyZWF0ZUNvbnRleHRNZW51KHRyZWVWaWV3ZXIuZ2V0Q29udHJvbCgpKSk7CisJCWdldFNpdGUoKS5yZWdpc3RlckNvbnRleHRNZW51KGNvbnRleHRNZW51TWFuYWdlciwgdHJlZVZpZXdlcik7CisKKwkJLy8gTGlzdGVuIGZvciBkb3VibGUtY2xpY2tzIG9uIEV4ZWN1dGFibGVzCisJCXRyZWVWaWV3ZXIuYWRkRG91YmxlQ2xpY2tMaXN0ZW5lcihuZXcgSURvdWJsZUNsaWNrTGlzdGVuZXIoKSB7CisJCQlwdWJsaWMgdm9pZCBkb3VibGVDbGljayhmaW5hbCBEb3VibGVDbGlja0V2ZW50IGV2ZW50KSB7CisJCQkJZmluYWwgSUV4ZWN1dGFibGUgZXhlY3V0YWJsZSA9IChJRXhlY3V0YWJsZSkgUGxhdGZvcm0uZ2V0QWRhcHRlck1hbmFnZXIoKS5nZXRBZGFwdGVyKCgoU3RydWN0dXJlZFNlbGVjdGlvbikgZXZlbnQuZ2V0U2VsZWN0aW9uKCkpLnRvTGlzdCgpLmdldCgwKSwgSUV4ZWN1dGFibGUuY2xhc3MpOworCisJCQkJLy8gV2VyZSB3ZSBzdWNjZXNzZnVsIGluIGFkYXB0aW5nPworCQkJCWlmIChleGVjdXRhYmxlICE9IG51bGwpIHsKKwkJCQkJLy8gWWVzCisJCQkJCWV4ZWN1dGFibGUucnVuKCk7CisJCQkJCQorCQkJCQkvLyBPbmx5IHN3aXRjaCB0byB0aGUgU2ltdWxhdGlvbiBQZXJzZXBjdGl2ZSB3aGVuIHRoZSBleGVjdXRhYmxlIGlzIGEgc3RhbmRhcmQKKwkJCQkJLy8gcnVuIChzY2VuYXJpbykuIEZvciBvdGhlciBleGVjdXRhYmxlcyB3ZSBtYXkgd2FudCB0byBzdGF5IGluIG90aGVyIHNwZWNpYWwKKwkJCQkJLy8gcGVyc3BlY3RpdmVzCisJCQkJCWlmKGV4ZWN1dGFibGUgaW5zdGFuY2VvZiBBZGFwdGVyKSB7CisJCQkJCQlBZGFwdGVyIGEgPSAoQWRhcHRlcikgZXhlY3V0YWJsZTsKKwkJCQkJCU9iamVjdCBvYmogPSBhLmdldFRhcmdldCgpOworCQkJCQkJaWYoIG9iaiBpbnN0YW5jZW9mIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zY2VuYXJpby5pbXBsLlNjZW5hcmlvSW1wbCApIHsKKwkJCQkJCQlBY3RpdmF0b3Iuc3dpdGNoVG9QZXJzcGVjdGl2ZShTaW11bGF0aW9uLklEX1NURU1fU0lNVUxBVElPTl9QRVJTUEVDVElWRSk7CisJCQkJCQl9CQorCQkJCQl9IC8vIGlmIGFkYXB0ZXIgKHVzdWFsbHkgdHJ1ZSkKKwkJCQkJCisJCQkJfSAvLyBpZgorCQkJfSAvLyBkb3VibGVDbGljaworCQl9KTsKKworCQkvLyBTZXQgdXAgZHJhZyBzdXBwb3J0CisJCWZpbmFsIGludCBvcHMgPSBETkQuRFJPUF9MSU5LIHwgRE5ELkRST1BfQ09QWSB8IERORC5EUk9QX01PVkU7CisJCWZpbmFsIFRyYW5zZmVyW10gdHJhbnNmZXJzID0gbmV3IFRyYW5zZmVyW10geworCQkJCUxvY2FsU2VsZWN0aW9uVHJhbnNmZXIuZ2V0VHJhbnNmZXIoKSwKKwkJCQlMb2NhbFRyYW5zZmVyLmdldEluc3RhbmNlKCkgfTsKKwkJdHJlZVZpZXdlci5hZGREcmFnU3VwcG9ydChvcHMsIHRyYW5zZmVycywgbmV3IERyYWdTb3VyY2VMaXN0ZW5lcigpIHsKKworCQkJLyoqCisJCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN3dC5kbmQuRHJhZ1NvdXJjZUxpc3RlbmVyI2RyYWdTdGFydChvcmcuZWNsaXBzZS5zd3QuZG5kLkRyYWdTb3VyY2VFdmVudCkKKwkJCSAqLworCQkJcHVibGljIHZvaWQgZHJhZ1N0YXJ0KGZpbmFsIERyYWdTb3VyY2VFdmVudCBldmVudCkgeworCQkJCS8vIFdlIG5lZWQgdG8gZmlndXJlIG91dCB3aGVuIHRoZSBkcmFnIGNhbiBzdGFydCBoZXJlCisJCQkJLy8gSnVzdCBzYXkgInllcyIgcmlnaHQgbm93CisJCQkJZXZlbnQuZG9pdCA9IHRydWU7CisJCQkJc2VsZWN0aW9uID0gdHJlZVZpZXdlci5nZXRTZWxlY3Rpb24oKTsKKwkJCQkvLyBMb2NhbFNlbGVjdGlvblRyYW5zZmVyLmdldFRyYW5zZmVyKCkuc2V0U2VsZWN0aW9uKHNlbGVjdGlvbik7CisJCQl9IC8vIGRyYWdTdGFydAorCisJCQkvKioKKwkJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3d0LmRuZC5EcmFnU291cmNlTGlzdGVuZXIjZHJhZ1NldERhdGEob3JnLmVjbGlwc2Uuc3d0LmRuZC5EcmFnU291cmNlRXZlbnQpCisJCQkgKi8KKwkJCXB1YmxpYyB2b2lkIGRyYWdTZXREYXRhKGZpbmFsIERyYWdTb3VyY2VFdmVudCBldmVudCkgeworCisJCQkJaWYgKExvY2FsU2VsZWN0aW9uVHJhbnNmZXIuZ2V0VHJhbnNmZXIoKS5pc1N1cHBvcnRlZFR5cGUoCisJCQkJCQlldmVudC5kYXRhVHlwZSkpIHsKKwkJCQkJLy8gWWVzCisJCQkJCWV2ZW50LmRhdGEgPSBleHRyYWN0VVJJU3RyaW5nc0Zyb21JZGVudGlmaWFibGVEZWxlZ2F0ZXMoKElTdHJ1Y3R1cmVkU2VsZWN0aW9uKSBzZWxlY3Rpb24pOworCQkJCQlMb2NhbFNlbGVjdGlvblRyYW5zZmVyLmdldFRyYW5zZmVyKCkuc2V0U2VsZWN0aW9uKAorCQkJCQkJCShJU3RydWN0dXJlZFNlbGVjdGlvbikgZXZlbnQuZGF0YSk7CisJCQkJfSAvLyBpZgorCQkJCWVsc2UgaWYgKExvY2FsVHJhbnNmZXIuZ2V0SW5zdGFuY2UoKS5pc1N1cHBvcnRlZFR5cGUoCisJCQkJCQlldmVudC5kYXRhVHlwZSkpIHsKKwkJCQkJLy8gWWVzCisJCQkJCWV2ZW50LmRhdGEgPSBleHRyYWN0VVJJU3RyaW5nc0Zyb21JZGVudGlmaWFibGVEZWxlZ2F0ZXMoKElTdHJ1Y3R1cmVkU2VsZWN0aW9uKSBzZWxlY3Rpb24pOworCQkJCX0gLy8gaWYKKworCQkJfSAvLyBkcmFnU2V0RGF0YQorCisJCQlwcml2YXRlIElTdHJ1Y3R1cmVkU2VsZWN0aW9uIGV4dHJhY3RVUklTdHJpbmdzRnJvbUlkZW50aWZpYWJsZURlbGVnYXRlcygKKwkJCQkJZmluYWwgSVN0cnVjdHVyZWRTZWxlY3Rpb24gc2VsZWN0ZWREZWxlZ2F0ZXMpIHsKKwkJCQlmaW5hbCBMaXN0PFN0cmluZz4gY29sbGVjdGlvbiA9IG5ldyBBcnJheUxpc3Q8U3RyaW5nPigpOworCQkJCWZvciAoZmluYWwgSXRlcmF0b3Igc2VsZWN0aW9uSXRlciA9IHNlbGVjdGVkRGVsZWdhdGVzCisJCQkJCQkuaXRlcmF0b3IoKTsgc2VsZWN0aW9uSXRlci5oYXNOZXh0KCk7KSB7CisJCQkJCWZpbmFsIE9iamVjdCBlbGVtZW50ID0gc2VsZWN0aW9uSXRlci5uZXh0KCk7CisJCQkJCS8vIFdhcyBhbiBJZGVudGlmaWFibGUgRGVsZWdhdGUgc2VsZWN0ZWQ/CisJCQkJCWlmIChlbGVtZW50IGluc3RhbmNlb2YgSWRlbnRpZmlhYmxlRGVsZWdhdGUpIHsKKwkJCQkJCS8vIFllcworCQkJCQkJLy8gSXQgaGFzIGEgVVJJIHRoYXQgc3BlY2lmaWVzIHRoZSBzZXJpYWxpemVkCisJCQkJCQkvLyByZXByZXNlbnRhdGlvbiBvZiB0aGUgSWRlbnRpZmlhYmxlCisJCQkJCQlmaW5hbCBTdHJpbmcgdXJpU3RyaW5nID0gKChJZGVudGlmaWFibGVEZWxlZ2F0ZSkgZWxlbWVudCkKKwkJCQkJCQkJLmdldER1YmxpbkNvcmUoKS5nZXRJZGVudGlmaWVyKCk7CisJCQkJCQkvLyBXZXJlIHdlIHN1Y2Nlc3NmdWwgaW4gZ2V0dGluZyB0aGUgdXJpIHN0cmluZz8KKwkJCQkJCWlmICh1cmlTdHJpbmcgIT0gbnVsbCkgeworCQkJCQkJCS8vIFllcworCQkJCQkJCWNvbGxlY3Rpb24uYWRkKHVyaVN0cmluZyk7CisJCQkJCQl9CisJCQkJCX0gLy8gaWYKKwkJCQl9IC8vIGZvciBlYWNoIHNlbGVjdGlvbgorCisJCQkJcmV0dXJuIG5ldyBJU3RydWN0dXJlZFNlbGVjdGlvbigpIHsKKworCQkJCQlmaW5hbCBMaXN0PFN0cmluZz4gbGlzdDsKKwkJCQkJeworCQkJCQkJbGlzdCA9IGNvbGxlY3Rpb247CisJCQkJCX0KKworCQkJCQlwdWJsaWMgT2JqZWN0IGdldEZpcnN0RWxlbWVudCgpIHsKKwkJCQkJCXJldHVybiBsaXN0LmdldCgwKTsKKwkJCQkJfQorCisJCQkJCXB1YmxpYyBJdGVyYXRvcjxTdHJpbmc+IGl0ZXJhdG9yKCkgeworCQkJCQkJcmV0dXJuIGxpc3QuaXRlcmF0b3IoKTsKKwkJCQkJfQorCisJCQkJCXB1YmxpYyBpbnQgc2l6ZSgpIHsKKwkJCQkJCXJldHVybiBsaXN0LnNpemUoKTsKKwkJCQkJfQorCisJCQkJCXB1YmxpYyBPYmplY3RbXSB0b0FycmF5KCkgeworCQkJCQkJcmV0dXJuIGxpc3QudG9BcnJheSgpOworCQkJCQl9CisKKwkJCQkJcHVibGljIExpc3Q8U3RyaW5nPiB0b0xpc3QoKSB7CisJCQkJCQlyZXR1cm4gbGlzdDsKKwkJCQkJfQorCisJCQkJCXB1YmxpYyBib29sZWFuIGlzRW1wdHkoKSB7CisJCQkJCQlyZXR1cm4gbGlzdC5pc0VtcHR5KCk7CisJCQkJCX0KKwkJCQl9OworCQkJfSAvLyBleHRyYWN0VVJJU3RyaW5ncworCisJCQkvKioKKwkJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3d0LmRuZC5EcmFnU291cmNlTGlzdGVuZXIjZHJhZ0ZpbmlzaGVkKG9yZy5lY2xpcHNlLnN3dC5kbmQuRHJhZ1NvdXJjZUV2ZW50KQorCQkJICovCisJCQlwdWJsaWMgdm9pZCBkcmFnRmluaXNoZWQoCisJCQkJCUBTdXBwcmVzc1dhcm5pbmdzKCJ1bnVzZWQiKSBmaW5hbCBEcmFnU291cmNlRXZlbnQgZXZlbnQpIHsKKwkJCQlzZWxlY3Rpb24gPSBudWxsOworCQkJCUxvY2FsVHJhbnNmZXIuZ2V0SW5zdGFuY2UoKS5qYXZhVG9OYXRpdmUobnVsbCwgbnVsbCk7CisJCQl9IC8vIGRyYWdGaW5pc2hlZAorCisJCX0pOworCX0gLy8gY3JlYXRlUGFydENvbnRyb2wKKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2UudWkucGFydC5Xb3JrYmVuY2hQYXJ0I3NldEZvY3VzKCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBzZXRGb2N1cygpIHsKKwkJLy8gTm90aGluZworCX0KKworCS8qKgorCSAqIEByZXR1cm4gdGhlIGlucHV0IG1vZGVsIHNwZWNpZmljIHRvIHRoaXMgdmlldworCSAqLworCXByb3RlY3RlZCBhYnN0cmFjdCBJZGVudGlmaWFibGVWaWV3TW9kZWwgZ2V0SW5wdXQoKTsKKworCS8qKgorCSAqIEByZXR1cm4gdGhlIHtAbGluayBJZGVudGlmaWFibGVQbHVnaW5WaWV3TGFiZWxDb250ZW50UHJvdmlkZXJ9CisJICogICAgICAgICBhcHByb3ByaWF0ZSBmb3IgdGhlIG1vZGVsCisJICovCisJcHJvdGVjdGVkIGFic3RyYWN0IElkZW50aWZpYWJsZVBsdWdpblZpZXdMYWJlbENvbnRlbnRQcm92aWRlciBnZXRJZGVudGlmaWFibGVQbHVnaW5WaWV3TGFiZWxDb250ZW50UHJvdmlkZXIoKTsKKworCS8qKgorCSAqIFRoaXMgY2xhc3MgcmVwcmVzZW50cyB0aGUgbW9kZWwgb2YgdGhlIHtAbGluayBJZGVudGlmaWFibGV9J3MgdGhhdCBleHRlbmQKKwkgKiBhIHBhcnRpY3VsYXIgZXh0ZW5zaW9uIHBvaW50LgorCSAqLworCXByb3RlY3RlZCBhYnN0cmFjdCBzdGF0aWMgY2xhc3MgSWRlbnRpZmlhYmxlVmlld01vZGVsIHsKKwkJLy8gVGhlIHJvb3Qgb2YgdGhlIHRyZWUgb2YgY2F0ZWdvcmllcyBhbmQgaWRlbnRpZmlhYmxlcworCQlwcml2YXRlIGZpbmFsIENhdGVnb3J5IHJvb3Q7CisKKwkJLy8gTWFwcGluZyBiZXR3ZWVuIGEgY2F0ZWdvcnkgaWQgYW5kIGEgY2F0ZWdvcnkKKwkJcHJpdmF0ZSBmaW5hbCBNYXA8U3RyaW5nLCBDYXRlZ29yeT4gY2F0ZWdvcnlNYXA7CisKKwkJLyoqCisJCSAqIEBwYXJhbSBleHRlbnNpb25Qb2ludElECisJCSAqICAgICAgICAgICAgdGhlIGlkZW50aWZpZXIgb2YgdGhlIGV4dGVuc2lvbiBwb2ludCB0aGF0IElkZW50aWZpYWJsZXMKKwkJICogICAgICAgICAgICB1c2UgdG8gcGx1Zy1pbi4KKwkJICovCisJCXB1YmxpYyBJZGVudGlmaWFibGVWaWV3TW9kZWwoZmluYWwgU3RyaW5nIGV4dGVuc2lvblBvaW50SUQpIHsKKwkJCXJvb3QgPSBuZXcgQ2F0ZWdvcnkoQ29uc3RhbnRzLklERU5USUZJQUJMRV9ST09UX0NBVEVHT1JZX05BTUUsCisJCQkJCUNvbnN0YW50cy5JREVOVElGSUFCTEVfUk9PVF9DQVRFR09SWV9JRCwgIiIpOyAvLyROT04tTkxTLTEkCisJCQljYXRlZ29yeU1hcCA9IG5ldyBIYXNoTWFwPFN0cmluZywgQ2F0ZWdvcnk+KCk7CisJCQljYXRlZ29yeU1hcC5wdXQocm9vdC5nZXRDYXRlZ29yeUlkKCksIHJvb3QpOworCisJCQkvLyBHZXQgdGhlIGNvbmZpZ3VyYXRpb24gZWxlbWVudHMgZm9yIHRoaXMgZXh0ZW5zaW9uIHBvaW50CisJCQlmaW5hbCBJRXh0ZW5zaW9uUmVnaXN0cnkgcmVnaXN0cnkgPSBQbGF0Zm9ybS5nZXRFeHRlbnNpb25SZWdpc3RyeSgpOworCQkJZmluYWwgSUNvbmZpZ3VyYXRpb25FbGVtZW50W10gY29uZmlnRWxlbWVudHMgPSByZWdpc3RyeQorCQkJCQkuZ2V0Q29uZmlndXJhdGlvbkVsZW1lbnRzRm9yKGV4dGVuc2lvblBvaW50SUQpOworCisJCQkvLyBNYWtlIGEgZmlyc3QgcGFzcyB0aHJvdWdoIHRoZSBlbGVtZW50cyBsb29raW5nIGZvciBjYXRlZ29yaWVzCisJCQlmb3IgKGZpbmFsIElDb25maWd1cmF0aW9uRWxlbWVudCBlbGVtZW50IDogY29uZmlnRWxlbWVudHMpIHsKKwkJCQkvLyBJcyB0aGlzIGEgQ2F0ZWdvcnk/CisJCQkJaWYgKENvbnN0YW50cy5DQVRFR09SWV9FTEVNRU5ULmVxdWFscyhlbGVtZW50LmdldE5hbWUoKSkpIHsKKwkJCQkJLy8gWWVzCisJCQkJCWlmKGVsZW1lbnQuZ2V0QXR0cmlidXRlKENvbnN0YW50cy5DQVRFR09SWV9OQU1FX0FUVFJJQlVURSkuc3RhcnRzV2l0aCgiJSIpKQorCQkJCQkJY29udGludWU7IC8vIFNraXAgdW50cmFuc2xhdGVkIGNhdGVnb3JpZXMKKwkJCQkJYWRkQ2F0ZWdvcnkoZWxlbWVudCk7CisJCQkJfQorCQkJfSAvLyBmb3IgZWFjaCBjb25maWd1cmF0aW9uIGVsZW1lbnQKKworCQkJLy8gUmVzb2x2ZSB0aGUgY29ubmVjdGlvbnMgYmV0d2VlbiBwYXJlbnQgYW5kIGNoaWxkIGNhdGVnb3JpZXMKKwkJCXJlc29sdmVDYXRlZ29yaWVzKCk7CisKKwkJCS8vIEl0ZXJhdGUgdGhyb3VnaCB0aGUgZWxlbWVudHMuIFByb2Nlc3NpbmcgdGhlIGlkZW50aWZpYWJsZXMKKwkJCWZvciAoZmluYWwgSUNvbmZpZ3VyYXRpb25FbGVtZW50IGVsZW1lbnQgOiBjb25maWdFbGVtZW50cykgeworCQkJCS8vIElzIHRoaXMgYSBDYXRlZ29yeT8KKwkJCQlpZiAoQ29uc3RhbnRzLkNBVEVHT1JZX0VMRU1FTlQuZXF1YWxzKGVsZW1lbnQuZ2V0TmFtZSgpKSkgeworCQkJCQkvLyBZZXMKKwkJCQkJY29udGludWU7CisJCQkJfQorCQkJCS8vIElzIHRoaXMgYSBkdWJsaW4gY29yZSBlbGVtZW50PworCQkJCWVsc2UgaWYgKENvbnN0YW50cy5EVUJMSU5fQ09SRV9FTEVNRU5UCisJCQkJCQkuZXF1YWxzKGVsZW1lbnQuZ2V0TmFtZSgpKSkgeworCQkJCQkvLyBZZXMKKwkJCQkJLy8gV2FzIGEgY2F0ZWdvcnkgaWQgc3BlY2lmaWVkIGluIHRoZSBlbGVtZW50PworCQkJCQlDYXRlZ29yeSBjYXRlZ29yeSA9IHJvb3Q7CisJCQkJCWZpbmFsIFN0cmluZyBjYXRlZ29yeUlkID0gZWxlbWVudAorCQkJCQkJCS5nZXRBdHRyaWJ1dGUoImNhdGVnb3J5X2lkIik7IC8vJE5PTi1OTFMtMSQKKwkJCQkJaWYgKGNhdGVnb3J5SWQgIT0gbnVsbCkgeworCQkJCQkJLy8gWWVzCisJCQkJCQljYXRlZ29yeSA9IGNhdGVnb3J5TWFwLmdldChjYXRlZ29yeUlkKTsKKwkJCQkJCS8vIERpZCB3ZSBmaW5kIHRoZSBjYXRlZ29yeT8KKwkJCQkJCWlmIChjYXRlZ29yeSA9PSBudWxsKSB7CisJCQkJCQkJLy8gTm8KKwkJCQkJCQlBY3RpdmF0b3IubG9nRXJyb3IoTWVzc2FnZUZvcm1hdC5mb3JtYXQoTWVzc2FnZXMKKwkJCQkJCQkJCS5nZXRTdHJpbmcoIklQVmlldy5Ob19DYXRlZ29yeSIpLCAvLyROT04tTkxTLTEkCisJCQkJCQkJCQljYXRlZ29yeUlkKSwgbnVsbCk7CisJCQkJCQkJY2F0ZWdvcnkgPSByb290OworCQkJCQkJfQorCisJCQkJCQljYXRlZ29yeSA9IGNhdGVnb3J5ID09IG51bGwgPyByb290IDogY2F0ZWdvcnk7CisJCQkJCX0KKwkJCQkJYWRkSWRlbnRpZmlhYmxlRGVsZWdhdGUoY2F0ZWdvcnksIGVsZW1lbnQpOworCQkJCX0gLy8gaWYgZHVibGluIGNvcmUKKwkJCQkvLyBJcyBpdCBhbiBlbGVtZW50IHdpdGggYSAibmFtZSIgYXR0cmlidXRlPworCQkJCWVsc2UgaWYgKGVsZW1lbnQuZ2V0QXR0cmlidXRlKCJuYW1lIikgIT0gbnVsbCkgeworCQkJCQkvLyBZZXMKKwkJCQkJYWRkSWRlbnRpZmlhYmxlRGVsZWdhdGUocm9vdCwgZWxlbWVudCk7CisJCQkJfSAvLyBpZgorCQkJCWVsc2UgeworCQkJCQlBY3RpdmF0b3IubG9nRXJyb3IoTWVzc2FnZUZvcm1hdC5mb3JtYXQoTWVzc2FnZXMKKwkJCQkJCQkuZ2V0U3RyaW5nKCJJUFZpZXcuVW5leHBlY3RlZF9FbGVtZW50IiksIGVsZW1lbnQKKwkJCQkJCQkuZ2V0TmFtZSgpLCBleHRlbnNpb25Qb2ludElEKSwgbnVsbCk7CisJCQkJfSAvLyBlbHNlCisJCQl9IC8vIGZvciBlYWNoIGNvbmZpZ3VyYXRpb24gZWxlbWVudAorCisJCX0gLy8gSWRlbnRpZmlhYmxlVmlld01vZGVsCisKKwkJLyoqCisJCSAqIEFkZCBhbiB7QGxpbmsgSWRlbnRpZmlhYmxlRGVsZWdhdGV9IHRvIHRoZSBtb2RlbC4KKwkJICogCisJCSAqIEBwYXJhbSBjYXRlZ29yeQorCQkgKiAgICAgICAgICAgIHRoZSB7QGxpbmsgQ2F0ZWdvcnl9IHRvIGFkZCB0aGUgZGVsZWdhdGUgdG8KKwkJICogCisJCSAqIEBwYXJhbSBlbGVtZW50CisJCSAqICAgICAgICAgICAgdGhlIHtAbGluayBEdWJsaW5Db3JlfSBlbGVtZW50IHRoYXQgZGVmaW5lcyB0aGUgZGVsZWdhdGUKKwkJICovCisJCXByaXZhdGUgdm9pZCBhZGRJZGVudGlmaWFibGVEZWxlZ2F0ZShmaW5hbCBDYXRlZ29yeSBjYXRlZ29yeSwKKwkJCQlmaW5hbCBJQ29uZmlndXJhdGlvbkVsZW1lbnQgZWxlbWVudCkgeworCQkJZmluYWwgSWRlbnRpZmlhYmxlRGVsZWdhdGUgaWRlbnRpZmlhYmxlRGVsZWdhdGUgPSBuZXcgSWRlbnRpZmlhYmxlRGVsZWdhdGUoCisJCQkJCWVsZW1lbnQpOworCQkJY2F0ZWdvcnkuYWRkSWRlbnRpZmlhYmxlRGVsZWdhdGUoaWRlbnRpZmlhYmxlRGVsZWdhdGUpOworCQl9IC8vIGFkZElkZW50aWZpYWJsZURlbGVnYXRlCisKKwkJLyoqCisJCSAqIEFkZCBhIHtAbGluayBDYXRlZ29yeX0gdG8gdGhlIG1vZGVsLgorCQkgKiAKKwkJICogQHBhcmFtIGVsZW1lbnQKKwkJICogICAgICAgICAgICB0aGUgY2F0ZWdvcnkgZWxlbWVudCB0aGF0IGRlZmluZXMgdGhlIGNhdGVnb3J5CisJCSAqLworCQlwcml2YXRlIENhdGVnb3J5IGFkZENhdGVnb3J5KGZpbmFsIElDb25maWd1cmF0aW9uRWxlbWVudCBlbGVtZW50KSB7CisJCQlmaW5hbCBDYXRlZ29yeSBjYXRlZ29yeSA9IG5ldyBDYXRlZ29yeShlbGVtZW50KTsKKwkJCS8vIERvZXMgdGhlIGNhdGVnb3J5IGFscmVhZHkgZXhpc3Q/CisJCQlDYXRlZ29yeSByZXRWYWx1ZSA9IGNhdGVnb3J5TWFwLmdldChjYXRlZ29yeS5nZXRDYXRlZ29yeUlkKCkpOworCisJCQlpZiAocmV0VmFsdWUgPT0gbnVsbCkgeworCQkJCS8vIE5vCisJCQkJLy8gSXQncyBuZXcKKwkJCQlyZXRWYWx1ZSA9IGNhdGVnb3J5OworCQkJCWNhdGVnb3J5TWFwLnB1dChjYXRlZ29yeS5nZXRDYXRlZ29yeUlkKCksIGNhdGVnb3J5KTsKKwkJCX0KKworCQkJcmV0dXJuIHJldFZhbHVlOworCQl9IC8vIGFkZENhdGVnb3J5CisKKwkJLyoqCisJCSAqIEhvb2sgdXAgcGFyZW50IGFuZCBjaGlsZCBjYXRlZ29yaWVzLgorCQkgKi8KKwkJcHJpdmF0ZSB2b2lkIHJlc29sdmVDYXRlZ29yaWVzKCkgeworCQkJLy8gR28gdGhyb3VnaCBlYWNoIG9mIHRoZSBjYXRlZ29yaWVzIGhvb2tpbmcgdXAgcGFyZW50IHdpdGggY2hpbGQKKwkJCWZvciAoZmluYWwgQ2F0ZWdvcnkgY2F0ZWdvcnkgOiBjYXRlZ29yeU1hcC52YWx1ZXMoKSkgeworCQkJCS8vIElzIHRoaXMgdGhlIHJvb3QgY2F0ZWdvcnk/CisJCQkJaWYgKGNhdGVnb3J5ID09IHJvb3QpIHsKKwkJCQkJLy8gWWVzCisJCQkJCWNvbnRpbnVlOworCQkJCX0KKworCQkJCS8vIERvZXMgaXQncyBwYXJlbnQgZXhpc3Q/CisJCQkJQ2F0ZWdvcnkgcGFyZW50Q2F0ZWdvcnkgPSBjYXRlZ29yeU1hcC5nZXQoY2F0ZWdvcnkKKwkJCQkJCS5nZXRQYXJlbnRJZCgpKTsKKwkJCQlpZiAocGFyZW50Q2F0ZWdvcnkgPT0gbnVsbCkgeworCQkJCQkvLyBObworCQkJCQlBY3RpdmF0b3IKKwkJCQkJCQkubG9nSW5mb3JtYXRpb24oCisJCQkJCQkJCQkiV2hlbiBvcmdhbml6aW5nIGNhdGVnb3JpZXMsIHRoZSBzcGVjaWZpZWQgcGFyZW50IGNhdGVnb3J5IFwiIiAvLyROT04tTkxTLTEkCisJCQkJCQkJCQkJCSsgY2F0ZWdvcnkuZ2V0UGFyZW50SWQoKQorCQkJCQkJCQkJCQkrICJcIiBmb3IgdGhlIGNhdGVnb3J5IFwiIiAvLyROT04tTkxTLTEkCisJCQkJCQkJCQkJCSsgY2F0ZWdvcnkuZ2V0Q2F0ZWdvcnlJZCgpCisJCQkJCQkJCQkJCSsgIlwiIGNvdWxkIG5vdCBiZSBmb3VuZC4gIFVzaW5nIFwiL1wiIGluc3RlYWQuIiwgLy8kTk9OLU5MUy0xJAorCQkJCQkJCQkJbnVsbCk7CisJCQkJCXBhcmVudENhdGVnb3J5ID0gcm9vdDsKKwkJCQl9IC8vIGlmIHBhcmVudCBleGlzdHMKKworCQkJCWNhdGVnb3J5LnNldFBhcmVudChwYXJlbnRDYXRlZ29yeSk7CisJCQkJcGFyZW50Q2F0ZWdvcnkuYWRkQ2hpbGRDYXRlZ29yeShjYXRlZ29yeSk7CisKKwkJCX0gLy8gZm9yIGVhY2ggY2F0ZWdvcnkKKwkJfSAvLyByZXNvbHZlQ2F0ZWdvcmllcworCisJCS8qKgorCQkgKiBAcmV0dXJuIHRoZSByb290CisJCSAqLworCQlwcm90ZWN0ZWQgZmluYWwgQ2F0ZWdvcnkgZ2V0Um9vdCgpIHsKKwkJCXJldHVybiByb290OworCQl9CisKKwl9IC8vIElkZW50aWZpYWJsZVZpZXdNb2RlbAorCisJLyoqCisJICogVGhpcyBjbGFzcyByZXByZXNlbnRzIGFuIGVsZW1lbnQgaW4gdGhlIHRyZWUgdGhhdCBpcyB0aGUgbW9kZWwgb2YgdGhlCisJICogcGx1Z2dlZCBpbiBncmFwaHMuCisJICovCisJcHJvdGVjdGVkIHN0YXRpYyBjbGFzcyBDYXRlZ29yeSBpbXBsZW1lbnRzIENvbXBhcmFibGU8T2JqZWN0PiB7CisJCUNhdGVnb3J5IHBhcmVudDsKKworCQlTdHJpbmcgcGFyZW50SWQ7CisKKwkJU3RyaW5nIGNhdGVnb3J5SWQ7CisKKwkJU3RyaW5nIGNhdGVnb3J5TmFtZTsKKworCQlMaXN0PENhdGVnb3J5PiBjaGlsZENhdGVnb3JpZXM7CisKKwkJTGlzdDxJZGVudGlmaWFibGVEZWxlZ2F0ZT4gY2hpbGRJZGVudGlmaWFibGVzOworCisJCXByb3RlY3RlZCBDYXRlZ29yeShmaW5hbCBTdHJpbmcgY2F0ZWdvcnlOYW1lLCBmaW5hbCBTdHJpbmcgY2F0ZWdvcnlJZCwKKwkJCQlmaW5hbCBTdHJpbmcgcGFyZW50SWQpIHsKKwkJCXRoaXMuY2F0ZWdvcnlOYW1lID0gY2F0ZWdvcnlOYW1lOworCQkJdGhpcy5jYXRlZ29yeUlkID0gY2F0ZWdvcnlJZDsKKwkJCXRoaXMucGFyZW50SWQgPSBwYXJlbnRJZDsKKwkJCXRoaXMucGFyZW50ID0gbnVsbDsKKwkJCXRoaXMuY2hpbGRDYXRlZ29yaWVzID0gbmV3IEFycmF5TGlzdDxDYXRlZ29yeT4oKTsKKwkJCXRoaXMuY2hpbGRJZGVudGlmaWFibGVzID0gbmV3IEFycmF5TGlzdDxJZGVudGlmaWFibGVEZWxlZ2F0ZT4oKTsKKwkJfQorCisJCXByb3RlY3RlZCBDYXRlZ29yeShmaW5hbCBJQ29uZmlndXJhdGlvbkVsZW1lbnQgZWxlbWVudCkgeworCQkJdGhpcyhnZXROTFNDYXRhZ29yeU5hbWUoZWxlbWVudAorCQkJCQkuZ2V0QXR0cmlidXRlKENvbnN0YW50cy5DQVRFR09SWV9OQU1FX0FUVFJJQlVURSkpLCBlbGVtZW50CisJCQkJCS5nZXRBdHRyaWJ1dGUoQ29uc3RhbnRzLkNBVEVHT1JZX0lEX0FUVFJJQlVURSksIGVsZW1lbnQKKwkJCQkJLmdldEF0dHJpYnV0ZShDb25zdGFudHMuUEFSRU5UX0lEX0FUVFJJQlVURSkpOworCQl9CisKKwkJLyoqCisJCSAqIEBwYXJhbSBjYXRlZ29yeQorCQkgKiAgICAgICAgICAgIGEgY2hpbGQge0BsaW5rIENhdGVnb3J5fSB0byBhZGQgdG8gdGhpcyBwYXJlbnQKKwkJICovCisJCXB1YmxpYyB2b2lkIGFkZENoaWxkQ2F0ZWdvcnkoZmluYWwgQ2F0ZWdvcnkgY2F0ZWdvcnkpIHsKKwkJCWNoaWxkQ2F0ZWdvcmllcy5hZGQoY2F0ZWdvcnkpOworCQl9CisKKwkJLyoqCisJCSAqIEBwYXJhbSBpZGVudGlmaWFibGVEZWxlZ2F0ZQorCQkgKiAgICAgICAgICAgIHRoZSB7QGxpbmsgSWRlbnRpZmlhYmxlRGVsZWdhdGV9IHRvIGFkZCB0byB0aGUgY2F0ZWdvcnkKKwkJICovCisJCXB1YmxpYyB2b2lkIGFkZElkZW50aWZpYWJsZURlbGVnYXRlKAorCQkJCWZpbmFsIElkZW50aWZpYWJsZURlbGVnYXRlIGlkZW50aWZpYWJsZURlbGVnYXRlKSB7CisJCQljaGlsZElkZW50aWZpYWJsZXMuYWRkKGlkZW50aWZpYWJsZURlbGVnYXRlKTsKKwkJfQorCisJCS8qKgorCQkgKiBAcGFyYW0gYXR0cmlidXRlCisJCSAqICAgICAgICAgICAgdGhlIHZhbHVlIG9mIHtAbGluayBDb25zdGFudHMjQ0FURUdPUllfTkFNRV9BVFRSSUJVVEV9CisJCSAqIEByZXR1cm4gdGhlIE5MUydkIHZlcnNpb24gb2YgdGhlIGNhdGVnb3J5IG5hbWUKKwkJICovCisJCXByaXZhdGUgc3RhdGljIFN0cmluZyBnZXROTFNDYXRhZ29yeU5hbWUoZmluYWwgU3RyaW5nIGF0dHJpYnV0ZSkgeworCQkJZmluYWwgU3RyaW5nIG5hbWUgPSBHZW9ncmFwaGljTmFtZXMuZ2V0TmFtZShhdHRyaWJ1dGUpOworCQkJcmV0dXJuIG5hbWUuc3RhcnRzV2l0aCgiISIpID8gYXR0cmlidXRlIDogbmFtZTsKKwkJfSAvLyBnZXROTFNDYXRhZ29yeU5hbWUKKworCQkvKioKKwkJICogQHJldHVybiB0aGUgY2F0ZWdvcnlJZCBvZiB0aGlzIHtAbGluayBDYXRlZ29yeX0KKwkJICovCisJCXByb3RlY3RlZCBmaW5hbCBTdHJpbmcgZ2V0Q2F0ZWdvcnlJZCgpIHsKKwkJCXJldHVybiBjYXRlZ29yeUlkOworCQl9CisKKwkJLyoqCisJCSAqIEByZXR1cm4gdGhlIHBhcmVudElkCisJCSAqLworCQlwcm90ZWN0ZWQgZmluYWwgU3RyaW5nIGdldFBhcmVudElkKCkgeworCQkJcmV0dXJuIHBhcmVudElkOworCQl9CisKKwkJLyoqCisJCSAqIEByZXR1cm4gdGhlIHBhcmVudAorCQkgKi8KKwkJcHJvdGVjdGVkIGZpbmFsIENhdGVnb3J5IGdldFBhcmVudCgpIHsKKwkJCXJldHVybiBwYXJlbnQ7CisJCX0KKworCQkvKioKKwkJICogQHBhcmFtIHBhcmVudAorCQkgKiAgICAgICAgICAgIHRoZSBwYXJlbnQgdG8gc2V0CisJCSAqLworCQlwcm90ZWN0ZWQgZmluYWwgdm9pZCBzZXRQYXJlbnQoZmluYWwgQ2F0ZWdvcnkgcGFyZW50KSB7CisJCQl0aGlzLnBhcmVudCA9IHBhcmVudDsKKwkJfQorCisJCS8qKgorCQkgKiBAcmV0dXJuIHRoZSBjaGlsZHJlbiBvZiB0aGUge0BsaW5rIENhdGVnb3J5fQorCQkgKi8KKwkJcHVibGljIE9iamVjdFtdIGdldENoaWxkcmVuKCkgeworCQkJZmluYWwgTGlzdDxPYmplY3Q+IGtpZExpc3QgPSBuZXcgQXJyYXlMaXN0PE9iamVjdD4oKTsKKwkJCUNvbGxlY3Rpb25zLnNvcnQoY2hpbGRDYXRlZ29yaWVzKTsKKwkJCUNvbGxlY3Rpb25zLnNvcnQoY2hpbGRJZGVudGlmaWFibGVzKTsKKwkJCWtpZExpc3QuYWRkQWxsKGNoaWxkQ2F0ZWdvcmllcyk7CisJCQlraWRMaXN0LmFkZEFsbChjaGlsZElkZW50aWZpYWJsZXMpOworCQkJcmV0dXJuIGtpZExpc3QudG9BcnJheSgpOworCQl9IC8vIGdldENoaWxkcmVuCisKKwkJLyoqCisJCSAqIEBzZWUgamF2YS5sYW5nLk9iamVjdCN0b1N0cmluZygpCisJCSAqLworCQlAT3ZlcnJpZGUKKwkJcHVibGljIFN0cmluZyB0b1N0cmluZygpIHsKKwkJCWZpbmFsIFN0cmluZ0J1aWxkZXIgcmV0VmFsdWUgPSBuZXcgU3RyaW5nQnVpbGRlcihjYXRlZ29yeU5hbWUpOworCQkJcmV0VmFsdWUuYXBwZW5kKCIsICIpOyAvLyROT04tTkxTLTEkCisJCQlyZXRWYWx1ZS5hcHBlbmQoY2F0ZWdvcnlJZCk7CisJCQlyZXRWYWx1ZS5hcHBlbmQoIiwgIik7IC8vJE5PTi1OTFMtMSQKKwkJCXJldFZhbHVlLmFwcGVuZChwYXJlbnRJZCk7CisJCQlyZXR1cm4gcmV0VmFsdWUudG9TdHJpbmcoKTsKKwkJfQorCisJCS8qKgorCQkgKiBAc2VlIGphdmEubGFuZy5PYmplY3QjaGFzaENvZGUoKQorCQkgKi8KKwkJQE92ZXJyaWRlCisJCXB1YmxpYyBpbnQgaGFzaENvZGUoKSB7CisJCQlmaW5hbCBpbnQgUFJJTUUgPSAzMTsKKwkJCWludCByZXN1bHQgPSAxOworCQkJcmVzdWx0ID0gUFJJTUUgKiByZXN1bHQKKwkJCQkJKyAoKGNhdGVnb3J5SWQgPT0gbnVsbCkgPyAwIDogY2F0ZWdvcnlJZC5oYXNoQ29kZSgpKTsKKwkJCXJldHVybiByZXN1bHQ7CisJCX0KKworCQkvKioKKwkJICogQHNlZSBqYXZhLmxhbmcuT2JqZWN0I2VxdWFscyhqYXZhLmxhbmcuT2JqZWN0KQorCQkgKi8KKwkJQE92ZXJyaWRlCisJCXB1YmxpYyBib29sZWFuIGVxdWFscyhmaW5hbCBPYmplY3Qgb2JqKSB7CisJCQlpZiAodGhpcyA9PSBvYmopIHsKKwkJCQlyZXR1cm4gdHJ1ZTsKKwkJCX0KKwkJCWlmIChvYmogPT0gbnVsbCkgeworCQkJCXJldHVybiBmYWxzZTsKKwkJCX0KKwkJCWlmIChnZXRDbGFzcygpICE9IG9iai5nZXRDbGFzcygpKSB7CisJCQkJcmV0dXJuIGZhbHNlOworCQkJfQorCQkJZmluYWwgQ2F0ZWdvcnkgb3RoZXIgPSAoQ2F0ZWdvcnkpIG9iajsKKwkJCWlmIChjYXRlZ29yeUlkID09IG51bGwpIHsKKwkJCQlpZiAob3RoZXIuY2F0ZWdvcnlJZCAhPSBudWxsKSB7CisJCQkJCXJldHVybiBmYWxzZTsKKwkJCQl9CisJCQl9IGVsc2UgaWYgKCFjYXRlZ29yeUlkLmVxdWFscyhvdGhlci5jYXRlZ29yeUlkKSkgeworCQkJCXJldHVybiBmYWxzZTsKKwkJCX0KKwkJCXJldHVybiB0cnVlOworCQl9CisKKwkJLyoqCisJCSAqIEBwYXJhbSBvCisJCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSBjb21wYXJlCisJCSAqIEBzZWUgamF2YS5sYW5nLkNvbXBhcmFibGUjY29tcGFyZVRvKGphdmEubGFuZy5PYmplY3QpCisJCSAqLworCQlwdWJsaWMgaW50IGNvbXBhcmVUbyhmaW5hbCBPYmplY3QgbykgeworCQkJaW50IHJldFZhbHVlID0gMDsKKwkJCWlmIChvIGluc3RhbmNlb2YgQ2F0ZWdvcnkpIHsKKwkJCQkvLyBZZXMKKwkJCQlmaW5hbCBDYXRlZ29yeSBjYXRlZ29yeSA9IChDYXRlZ29yeSkgbzsKKwkJCQlyZXRWYWx1ZSA9IGNhdGVnb3J5TmFtZS5jb21wYXJlVG8oY2F0ZWdvcnkuY2F0ZWdvcnlOYW1lKTsKKwkJCX0gLy8gaWYgQ2F0ZWdvcnkKKwkJCWVsc2UgaWYgKG8gaW5zdGFuY2VvZiBJZGVudGlmaWFibGVEZWxlZ2F0ZSkgeworCQkJCS8vIFllcworCQkJCS8vIEluIGEgdHJlZSBsaXN0aW5nIHRoYXQgbWl4ZXMgY2F0ZWdvcmllcyBhbmQKKwkJCQkvLyBJZGVudGlmaWFibGVEZWxlZ2F0ZXMgd2Ugd2FudCB0aGUgY2F0ZWdvcmllcyB0byBhcHBlYXIgZmlyc3QsCisJCQkJLy8gc28gd2UgYWx3YXlzIHJldHVybiB0aGUgc2FtZSB2YWx1ZS4KKwkJCQlyZXRWYWx1ZSA9IDE7CisJCQl9IC8vIGlmIElkZW50aWZpYWJsZURlbGVnYXRlCisJCQlyZXR1cm4gcmV0VmFsdWU7CisJCX0gLy8gY29tcGFyZVRvCisKKwl9IC8vIENhdGVnb3J5CisKKwkvKioKKwkgKiBUaGlzIGNsYXNzIHByb3ZpZGVzIGNvbnRlbnQgZm9yIHRoZSB0cmVlIHZpZXcgb2YgdGhlIHtAbGluayBJZGVudGlmaWFibGV9CisJICogcyB0aGF0IGFyZSBhdmFpbGFibGUgYXMgcGFydHMgb2YgcGx1Zy1pbnMuCisJICovCisJcHJvdGVjdGVkIHN0YXRpYyBjbGFzcyBJZGVudGlmaWFibGVQbHVnaW5WaWV3VHJlZUNvbnRlbnRQcm92aWRlciBpbXBsZW1lbnRzCisJCQlJVHJlZUNvbnRlbnRQcm92aWRlciB7CisKKwkJLyoqCisJCSAqIEBzZWUgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JVHJlZUNvbnRlbnRQcm92aWRlciNnZXRDaGlsZHJlbihqYXZhLmxhbmcuT2JqZWN0KQorCQkgKi8KKwkJcHVibGljIE9iamVjdFtdIGdldENoaWxkcmVuKGZpbmFsIE9iamVjdCBwYXJlbnRFbGVtZW50KSB7CisJCQlPYmplY3RbXSByZXRWYWx1ZSA9IG51bGw7CisJCQlpZiAocGFyZW50RWxlbWVudCBpbnN0YW5jZW9mIENhdGVnb3J5KSB7CisJCQkJZmluYWwgQ2F0ZWdvcnkgY2F0ZWdvcnkgPSAoQ2F0ZWdvcnkpIHBhcmVudEVsZW1lbnQ7CisJCQkJZmluYWwgTGlzdDxPYmplY3Q+IGtpZExpc3QgPSBuZXcgQXJyYXlMaXN0PE9iamVjdD4oKTsKKwkJCQlDb2xsZWN0aW9ucy5zb3J0KGNhdGVnb3J5LmNoaWxkQ2F0ZWdvcmllcyk7CisJCQkJQ29sbGVjdGlvbnMuc29ydChjYXRlZ29yeS5jaGlsZElkZW50aWZpYWJsZXMpOworCQkJCWtpZExpc3QuYWRkQWxsKGNhdGVnb3J5LmNoaWxkQ2F0ZWdvcmllcyk7CisJCQkJa2lkTGlzdC5hZGRBbGwoY2F0ZWdvcnkuY2hpbGRJZGVudGlmaWFibGVzKTsKKwkJCQlyZXRWYWx1ZSA9IGtpZExpc3QudG9BcnJheSgpOworCQkJfQorCQkJcmV0dXJuIHJldFZhbHVlOworCQl9IC8vIGdldENoaWxkcmVuCisKKwkJLyoqCisJCSAqIEBzZWUgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JVHJlZUNvbnRlbnRQcm92aWRlciNnZXRQYXJlbnQoamF2YS5sYW5nLk9iamVjdCkKKwkJICovCisJCXB1YmxpYyBPYmplY3QgZ2V0UGFyZW50KGZpbmFsIE9iamVjdCBlbGVtZW50KSB7CisJCQlPYmplY3QgcmV0VmFsdWUgPSBudWxsOworCQkJaWYgKGVsZW1lbnQgaW5zdGFuY2VvZiBDYXRlZ29yeSkgeworCQkJCXJldFZhbHVlID0gKChDYXRlZ29yeSkgZWxlbWVudCkucGFyZW50OworCQkJfSBlbHNlIHsKKwkJCQlyZXRWYWx1ZSA9ICgoSWRlbnRpZmlhYmxlRGVsZWdhdGUpIGVsZW1lbnQpLmdldFBhcmVudCgpOworCQkJfQorCQkJcmV0dXJuIHJldFZhbHVlOworCQl9IC8vIGdldFBhcmVudAorCisJCS8qKgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVRyZWVDb250ZW50UHJvdmlkZXIjaGFzQ2hpbGRyZW4oamF2YS5sYW5nLk9iamVjdCkKKwkJICovCisJCXB1YmxpYyBib29sZWFuIGhhc0NoaWxkcmVuKGZpbmFsIE9iamVjdCBlbGVtZW50KSB7CisJCQlib29sZWFuIHJldFZhbHVlID0gZmFsc2U7CisJCQlpZiAoZWxlbWVudCBpbnN0YW5jZW9mIENhdGVnb3J5KSB7CisJCQkJZmluYWwgQ2F0ZWdvcnkgY2FnYXRvcnkgPSAoQ2F0ZWdvcnkpIGVsZW1lbnQ7CisJCQkJcmV0VmFsdWUgPSBjYWdhdG9yeS5jaGlsZENhdGVnb3JpZXMuc2l6ZSgpID4gMAorCQkJCQkJfHwgY2FnYXRvcnkuY2hpbGRJZGVudGlmaWFibGVzLnNpemUoKSA+IDA7CisJCQl9CisJCQlyZXR1cm4gcmV0VmFsdWU7CisJCX0gLy8gaGFzQ2hpbGRyZW4KKworCQkvKioKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTdHJ1Y3R1cmVkQ29udGVudFByb3ZpZGVyI2dldEVsZW1lbnRzKGphdmEubGFuZy5PYmplY3QpCisJCSAqLworCQlwdWJsaWMgT2JqZWN0W10gZ2V0RWxlbWVudHMoZmluYWwgT2JqZWN0IGlucHV0RWxlbWVudCkgeworCQkJZmluYWwgSWRlbnRpZmlhYmxlVmlld01vZGVsIG1vZGVsID0gKElkZW50aWZpYWJsZVZpZXdNb2RlbCkgaW5wdXRFbGVtZW50OworCQkJLy8gcmV0dXJuIG5ldyBPYmplY3RbXSB7IG1vZGVsLmdldFJvb3QoKSB9OworCQkJQXJyYXlzLnNvcnQobW9kZWwuZ2V0Um9vdCgpLmdldENoaWxkcmVuKCkpOworCQkJcmV0dXJuIG1vZGVsLmdldFJvb3QoKS5nZXRDaGlsZHJlbigpOworCQl9IC8vIGdldEVsZW1lbnRzCisKKwkJLyoqCisJCSAqIEBzZWUgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JQ29udGVudFByb3ZpZGVyI2Rpc3Bvc2UoKQorCQkgKi8KKwkJcHVibGljIHZvaWQgZGlzcG9zZSgpIHsKKwkJCS8vIE5vdGhpbmcgdG8gZGlzcG9zZQorCQl9IC8vIGRpc3Bvc2UKKworCQkvKioKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklDb250ZW50UHJvdmlkZXIjaW5wdXRDaGFuZ2VkKG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuVmlld2VyLAorCQkgKiAgICAgIGphdmEubGFuZy5PYmplY3QsIGphdmEubGFuZy5PYmplY3QpCisJCSAqLworCQlwdWJsaWMgdm9pZCBpbnB1dENoYW5nZWQoCisJCQkJQFN1cHByZXNzV2FybmluZ3MoInVudXNlZCIpIGZpbmFsIFZpZXdlciB2aWV3ZXIsCisJCQkJQFN1cHByZXNzV2FybmluZ3MoInVudXNlZCIpIGZpbmFsIE9iamVjdCBvbGRJbnB1dCwKKwkJCQlAU3VwcHJlc3NXYXJuaW5ncygidW51c2VkIikgZmluYWwgT2JqZWN0IG5ld0lucHV0KSB7CisJCQkvLyBOb3RoaW5nIHRvIGRvIHJpZ2h0IG5vdworCQl9IC8vIGlucHV0Q2hhbmdlZAorCisJfSAvLyBJZGVudGlmaWFibGVQbHVnaW5WaWV3VHJlZUNvbnRlbnRQcm92aWRlcgorCisJLyoqCisJICogVGhpcyBjbGFzcyBwcm92aWRlcyBsYWJlbHMgdGhlIGRlc2NyaWJlIHRoZSB7QGxpbmsgSWRlbnRpZmlhYmxlfXMKKwkgKiBhdmFpbGFibGUgYXMgcGFydCBvZiBwbHVnLWlucy4KKwkgKi8KKwlwcm90ZWN0ZWQgc3RhdGljIGFic3RyYWN0IGNsYXNzIElkZW50aWZpYWJsZVBsdWdpblZpZXdMYWJlbENvbnRlbnRQcm92aWRlcgorCQkJaW1wbGVtZW50cyBJTGFiZWxQcm92aWRlciB7CisKKwkJcHJpdmF0ZSBzdGF0aWMgSW1hZ2UgY2F0ZWdvcnlJY29uID0gbnVsbDsKKworCQkvLyBJZiB0cnVlIHRoZW4gd2UndmUgbmV2ZXIgdHJpZWQgdG8gZ2V0IHRoZSBpY29uCisJCXN0YXRpYyBib29sZWFuIGNhdGVnb3J5SWNvbkZpcnN0VGltZSA9IHRydWU7CisKKwkJcHJpdmF0ZSBmaW5hbCBMaXN0PElMYWJlbFByb3ZpZGVyTGlzdGVuZXI+IGxpc3RlbmVyczsKKworCQkvKioKKwkJICogQ29uc3RydWN0b3IKKwkJICovCisJCXB1YmxpYyBJZGVudGlmaWFibGVQbHVnaW5WaWV3TGFiZWxDb250ZW50UHJvdmlkZXIoKSB7CisJCQlsaXN0ZW5lcnMgPSBuZXcgQXJyYXlMaXN0PElMYWJlbFByb3ZpZGVyTGlzdGVuZXI+KCk7CisJCX0gLy8gSWRlbnRpZmlhYmxlUGx1Z2luVmlld0xhYmVsQ29udGVudFByb3ZpZGVyCisKKwkJLyoqCisJCSAqIEBzZWUgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JTGFiZWxQcm92aWRlciNnZXRJbWFnZShqYXZhLmxhbmcuT2JqZWN0KQorCQkgKi8KKwkJcHVibGljIEltYWdlIGdldEltYWdlKGZpbmFsIE9iamVjdCBlbGVtZW50KSB7CisJCQlJbWFnZSByZXRWYWx1ZSA9IG51bGw7CisJCQlpZiAoZWxlbWVudCBpbnN0YW5jZW9mIENhdGVnb3J5KSB7CisJCQkJcmV0VmFsdWUgPSBnZXRDYXRlZ29yeUljb24oKTsKKwkJCX0KKwkJCXJldHVybiByZXRWYWx1ZTsKKwkJfSAvLyBnZXRJbWFnZQorCisJCS8qKgorCQkgKiBAcmV0dXJuIHRoZSBpY29uIHRvIGJlIHVzZWQgdG8gcmVwcmVzZW50IHtAbGluayBDYXRlZ29yeX1zLCBvcgorCQkgKiAgICAgICAgIDxjb2RlPm51bGw8L2NvZGU+IGlmIGl0IGNhbid0IGJlIGxvYWRlZC4KKwkJICovCisJCXByb3RlY3RlZCBJbWFnZSBnZXRDYXRlZ29yeUljb24oKSB7CisJCQkvLyBTaG91bGQgd2UgdHJ5IHRvIGxvYWQgdGhlIGljb24/CisJCQlpZiAoY2F0ZWdvcnlJY29uRmlyc3RUaW1lICYmIGNhdGVnb3J5SWNvbiA9PSBudWxsKSB7CisJCQkJLy8gWWVzCisJCQkJY2F0ZWdvcnlJY29uRmlyc3RUaW1lID0gZmFsc2U7CisJCQkJY2F0ZWdvcnlJY29uID0gUGxhdGZvcm1VSS5nZXRXb3JrYmVuY2goKS5nZXRTaGFyZWRJbWFnZXMoKQorCQkJCQkJLmdldEltYWdlKElTaGFyZWRJbWFnZXMuSU1HX09CSl9GT0xERVIpOworCQkJfSAvLyBpZiB3ZSBzaG91bGQgbG9hZCB0aGUgaWNvbgorCQkJcmV0dXJuIGNhdGVnb3J5SWNvbjsKKwkJfSAvLyBnZXRDYXRlZ29yeUljb24KKworCQkvKioKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklMYWJlbFByb3ZpZGVyI2dldFRleHQoamF2YS5sYW5nLk9iamVjdCkKKwkJICovCisJCXB1YmxpYyBTdHJpbmcgZ2V0VGV4dChmaW5hbCBPYmplY3QgZWxlbWVudCkgeworCQkJU3RyaW5nIHJldFZhbHVlID0gIiI7IC8vJE5PTi1OTFMtMSQKKwkJCWlmIChlbGVtZW50IGluc3RhbmNlb2YgQ2F0ZWdvcnkpIHsKKwkJCQlmaW5hbCBDYXRlZ29yeSBjYXRlZ29yeSA9IChDYXRlZ29yeSkgZWxlbWVudDsKKwkJCQlyZXRWYWx1ZSA9IGNhdGVnb3J5LmNhdGVnb3J5TmFtZTsKKwkJCX0gZWxzZSBpZiAoZWxlbWVudCBpbnN0YW5jZW9mIElkZW50aWZpYWJsZURlbGVnYXRlKSB7CisJCQkJZmluYWwgSWRlbnRpZmlhYmxlRGVsZWdhdGUgaWRlbnRpZmlhYmxlRGVsZWdhdGUgPSAoSWRlbnRpZmlhYmxlRGVsZWdhdGUpIGVsZW1lbnQ7CisJCQkJcmV0VmFsdWUgPSBpZGVudGlmaWFibGVEZWxlZ2F0ZS50b1N0cmluZygpOworCQkJfQorCQkJcmV0dXJuIHJldFZhbHVlOworCQl9IC8vIGdldFRleHQKKworCQkvKioKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklCYXNlTGFiZWxQcm92aWRlciNhZGRMaXN0ZW5lcihvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklMYWJlbFByb3ZpZGVyTGlzdGVuZXIpCisJCSAqLworCQlwdWJsaWMgdm9pZCBhZGRMaXN0ZW5lcihmaW5hbCBJTGFiZWxQcm92aWRlckxpc3RlbmVyIGxpc3RlbmVyKSB7CisJCQlsaXN0ZW5lcnMuYWRkKGxpc3RlbmVyKTsKKwkJfSAvLyBhZGRMaXN0ZW5lcgorCisJCS8qKgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSUJhc2VMYWJlbFByb3ZpZGVyI2Rpc3Bvc2UoKQorCQkgKi8KKwkJcHVibGljIHZvaWQgZGlzcG9zZSgpIHsKKwkJCS8vIE5vdGhpbmcgdG8gZG8uIFRoZSBpbWFnZXMgYXJlIGRpc3Bvc2VkIG9mIGVsc2V3aGVyZSwKKwkJfSAvLyBkaXNwb3NlCisKKwkJLyoqCisJCSAqIEBzZWUgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JQmFzZUxhYmVsUHJvdmlkZXIjaXNMYWJlbFByb3BlcnR5KGphdmEubGFuZy5PYmplY3QsCisJCSAqICAgICAgamF2YS5sYW5nLlN0cmluZykKKwkJICovCisJCXB1YmxpYyBib29sZWFuIGlzTGFiZWxQcm9wZXJ0eSgKKwkJCQlAU3VwcHJlc3NXYXJuaW5ncygidW51c2VkIikgZmluYWwgT2JqZWN0IGVsZW1lbnQsCisJCQkJQFN1cHByZXNzV2FybmluZ3MoInVudXNlZCIpIGZpbmFsIFN0cmluZyBwcm9wZXJ0eSkgeworCQkJcmV0dXJuIGZhbHNlOworCQl9IC8vIGlzTGFiZWxQcm9wZXJ0eQorCisJCS8qKgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSUJhc2VMYWJlbFByb3ZpZGVyI3JlbW92ZUxpc3RlbmVyKG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSUxhYmVsUHJvdmlkZXJMaXN0ZW5lcikKKwkJICovCisJCXB1YmxpYyB2b2lkIHJlbW92ZUxpc3RlbmVyKGZpbmFsIElMYWJlbFByb3ZpZGVyTGlzdGVuZXIgbGlzdGVuZXIpIHsKKwkJCWxpc3RlbmVycy5yZW1vdmUobGlzdGVuZXIpOworCQl9IC8vIHJlbW92ZUxpc3RlbmVyCisKKwl9IC8vIElkZW50aWZpYWJsZVBsdWdpblZpZXdMYWJlbENvbnRlbnRQcm92aWRlcgorCisJLyoqCisJICogVGhpcyBjbGFzcyBkaXNwbGF5cyB0aGUge0BsaW5rIER1YmxpbkNvcmV9IG1ldGFkYXRhIG9mCisJICoge0BsaW5rIElkZW50aWZpYWJsZX1zIHdoZW4gdGhlIG1vdXNlIGhvdmVycyBvdmVyIGl0LgorCSAqLworCXByaXZhdGUgc3RhdGljIGNsYXNzIER1YmxpbkNvcmVUb29sVGlwSGFuZGxlciB7CisJCS8vIFRoaXMgaXMgdGhlIG51bWJlciBvZiBwaXhlbHMgYmVsb3cgdGhlIGN1cnJlbnQgbW91c2UgcG9zaXRpb24gYXQKKwkJLy8gd2hpY2ggdG8gcG9zaXRpb24gdGhlIGR1YmxpbiBjb3JlCisJCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgaW50IFlfT0ZGU0VUID0gMTY7CisKKwkJcHJvdGVjdGVkIFNoZWxsIGRjVGlwU2hlbGw7CisKKwkJTGFiZWwgZGNEZXNjcmlwdGlvblRleHQ7CisKKwkJTGFiZWwgZGNDcmVhdG9yVGV4dDsKKworCQlMYWJlbCBkY1ZhbGlkVGV4dDsKKworCQlMYWJlbCBkY1NvdXJjZVRleHQ7CisKKwkJRHVibGluQ29yZVRvb2xUaXBIYW5kbGVyKGZpbmFsIFNoZWxsIHBhcmVudCkgeworCQkJZmluYWwgRGlzcGxheSBkaXNwbGF5ID0gcGFyZW50LmdldERpc3BsYXkoKTsKKworCQkJZGNUaXBTaGVsbCA9IG5ldyBTaGVsbChwYXJlbnQsIFNXVC5PTl9UT1AgfCBTV1QuVE9PTCk7CisJCQlmaW5hbCBHcmlkTGF5b3V0IGdyaWRMYXlvdXQgPSBuZXcgR3JpZExheW91dCgpOworCQkJZ3JpZExheW91dC5udW1Db2x1bW5zID0gMTsKKwkJCWRjVGlwU2hlbGwuc2V0TGF5b3V0KGdyaWRMYXlvdXQpOworCisJCQlmaW5hbCBDb2xvciBiYWNrZ3JvdW5kQ29sb3IgPSBkaXNwbGF5CisJCQkJCS5nZXRTeXN0ZW1Db2xvcihTV1QuQ09MT1JfSU5GT19CQUNLR1JPVU5EKTsKKwkJCWZpbmFsIENvbG9yIGZvcmVncm91bmRDb2xvciA9IGRpc3BsYXkKKwkJCQkJLmdldFN5c3RlbUNvbG9yKFNXVC5DT0xPUl9JTkZPX0ZPUkVHUk9VTkQpOworCisJCQlkY1RpcFNoZWxsLnNldEJhY2tncm91bmQoYmFja2dyb3VuZENvbG9yKTsKKworCQkJZGNEZXNjcmlwdGlvblRleHQgPSBjcmVhdGVEQ0F0dHJpYnV0ZUxhYmVsKGRjVGlwU2hlbGwsCisJCQkJCWJhY2tncm91bmRDb2xvciwgZm9yZWdyb3VuZENvbG9yKTsKKworCQkJZGNDcmVhdG9yVGV4dCA9IGNyZWF0ZURDQXR0cmlidXRlTGFiZWwoZGNUaXBTaGVsbCwgYmFja2dyb3VuZENvbG9yLAorCQkJCQlmb3JlZ3JvdW5kQ29sb3IpOworCisJCQlkY1ZhbGlkVGV4dCA9IGNyZWF0ZURDQXR0cmlidXRlTGFiZWwoZGNUaXBTaGVsbCwgYmFja2dyb3VuZENvbG9yLAorCQkJCQlmb3JlZ3JvdW5kQ29sb3IpOworCQkJZGNTb3VyY2VUZXh0ID0gY3JlYXRlRENBdHRyaWJ1dGVMYWJlbChkY1RpcFNoZWxsLCBiYWNrZ3JvdW5kQ29sb3IsCisJCQkJCWZvcmVncm91bmRDb2xvcik7CisKKwkJCWRjVGlwU2hlbGwucGFjaygpOworCQl9IC8vIER1YmxpbkNvcmVUb29sVGlwSGFuZGxlcgorCisJCXByaXZhdGUgTGFiZWwgY3JlYXRlRENBdHRyaWJ1dGVMYWJlbChmaW5hbCBTaGVsbCBwYXJlbnQsCisJCQkJZmluYWwgQ29sb3IgYmFja2dyb3VuZENvbG9yLCBmaW5hbCBDb2xvciBmb3JlZ3JvdW5kQ29sb3IpIHsKKwkJCWZpbmFsIExhYmVsIHJldFZhbHVlID0gbmV3IExhYmVsKHBhcmVudCwgU1dULk5PTkUpOworCQkJcmV0VmFsdWUuc2V0QmFja2dyb3VuZChiYWNrZ3JvdW5kQ29sb3IpOworCQkJcmV0VmFsdWUuc2V0Rm9yZWdyb3VuZChmb3JlZ3JvdW5kQ29sb3IpOworCQkJcmV0VmFsdWUuc2V0TGF5b3V0RGF0YShuZXcgR3JpZERhdGEoR3JpZERhdGEuRklMTF9IT1JJWk9OVEFMCisJCQkJCXwgR3JpZERhdGEuVkVSVElDQUxfQUxJR05fQ0VOVEVSKSk7CisJCQlyZXR1cm4gcmV0VmFsdWU7CisJCX0gLy8gY3JlYXRlRENBdHRyaWJ1dGVMYWJlbAorCisJCS8qKgorCQkgKiBBZGQgdGhlIG5lY2Vzc2FyeSBsaXN0ZW5lcnMgdG8gdGhlIHtAbGluayBDb250cm9sfSB0byBjYXRjaCB0aGUgbW91c2UKKwkJICogZXZlbnRzIGFuZCBwb3AgdGhlIHRvb2wgdGlwIHVwLgorCQkgKiAKKwkJICogQHBhcmFtIGNvbnRyb2wKKwkJICovCisJCXB1YmxpYyB2b2lkIGFkZERDVG9vbFRpcEhlbHAoZmluYWwgQ29udHJvbCBjb250cm9sKSB7CisJCQkvLyBJZiB0aGUgdXNlciBjbGlja3Mgd2l0aCB0aGUgbW91c2Ugd2Ugd2FudCB0byBnZXQgcmlkIG9mIHRoZQorCQkJLy8gZHVibGluIGNvcmUKKwkJCWNvbnRyb2wuYWRkTW91c2VMaXN0ZW5lcihuZXcgTW91c2VBZGFwdGVyKCkgeworCisJCQkJLyoqCisJCQkJICogQHNlZSBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLk1vdXNlQWRhcHRlciNtb3VzZURvd24ob3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5Nb3VzZUV2ZW50KQorCQkJCSAqLworCQkJCUBPdmVycmlkZQorCQkJCXB1YmxpYyB2b2lkIG1vdXNlRG93bigKKwkJCQkJCUBTdXBwcmVzc1dhcm5pbmdzKCJ1bnVzZWQiKSBmaW5hbCBNb3VzZUV2ZW50IGUpIHsKKwkJCQkJLy8gSXMgdGhlIGR1YmxpbiBjb3JlIHZpc2libGU/CisJCQkJCWlmIChkY1RpcFNoZWxsLmlzVmlzaWJsZSgpKSB7CisJCQkJCQkvLyBZZXMKKwkJCQkJCS8vIE5vdCBhbnkgbW9yZQorCQkJCQkJZGNUaXBTaGVsbC5zZXRWaXNpYmxlKGZhbHNlKTsKKwkJCQkJfSAvLyBpZiB2aXNpYmxlCisJCQkJfSAvLyBtb3VzZURvd24KKworCQkJfSk7CisKKwkJCS8vIElmIHRoZSBtb3VzZSBob3ZlcnMgd2Ugd2FudCB0byBwb3AgdXAgdGhlIGR1YmxpbiBjb3JlLCBidXQgaWYgaXQKKwkJCS8vIGV4aXRzIHdlIHdhbnQgdG8gZ2V0IHJpZ2h0IG9mIGl0LgorCQkJY29udHJvbC5hZGRNb3VzZVRyYWNrTGlzdGVuZXIobmV3IE1vdXNlVHJhY2tBZGFwdGVyKCkgeworCisJCQkJLyoqCisJCQkJICogQHNlZSBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLk1vdXNlVHJhY2tBZGFwdGVyI21vdXNlSG92ZXIob3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5Nb3VzZUV2ZW50KQorCQkJCSAqLworCQkJCUBPdmVycmlkZQorCQkJCXB1YmxpYyB2b2lkIG1vdXNlSG92ZXIoZmluYWwgTW91c2VFdmVudCBlKSB7CisJCQkJCWZpbmFsIFBvaW50IHB0ID0gbmV3IFBvaW50KGUueCwgZS55KTsKKwkJCQkJLy8gSXMgdGhlIGV2ZW50J3MgV2lkZ2V0IGEgVHJlZSAoaXQgc2hvdWxkIGJlKT8KKwkJCQkJaWYgKGUud2lkZ2V0IGluc3RhbmNlb2YgVHJlZSkgeworCQkJCQkJLy8gWWVzCisJCQkJCQlmaW5hbCBUcmVlIHRyZWUgPSAoVHJlZSkgZS53aWRnZXQ7CisJCQkJCQlmaW5hbCBUcmVlSXRlbSB0cmVlSXRlbSA9IHRyZWUuZ2V0SXRlbShwdCk7CisJCQkJCQkvLyBBcmUgd2Ugb3ZlciBhbnl0aGluZz8KKwkJCQkJCWlmICh0cmVlSXRlbSAhPSBudWxsKSB7CisJCQkJCQkJLy8gWWVzCisJCQkJCQkJZmluYWwgT2JqZWN0IG9iaiA9IHRyZWVJdGVtLmdldERhdGEoKTsKKworCQkJCQkJCS8vIERvZXMgaXQgaGF2ZSBEQyBtZXRhIGRhdGE/CisJCQkJCQkJaWYgKG9iaiBpbnN0YW5jZW9mIElkZW50aWZpYWJsZURlbGVnYXRlKSB7CisJCQkJCQkJCS8vIFllcworCQkJCQkJCQlmaW5hbCBJZGVudGlmaWFibGVEZWxlZ2F0ZSBpZCA9IChJZGVudGlmaWFibGVEZWxlZ2F0ZSkgb2JqOworCQkJCQkJCQlmaW5hbCBEdWJsaW5Db3JlIGRjID0gaWQuZ2V0RHVibGluQ29yZSgpOworCisJCQkJCQkJCWZpbmFsIFN0cmluZyBkZXNjcmlwdGlvbiA9IGRjLmdldERlc2NyaXB0aW9uKCk7CisJCQkJCQkJCWZpbmFsIFN0cmluZyBjcmVhdG9yID0gZGMuZ2V0Q3JlYXRvcigpOworCQkJCQkJCQlmaW5hbCBTdHJpbmcgdmFsaWQgPSBkYy5nZXRWYWxpZCgpOworCQkJCQkJCQlmaW5hbCBTdHJpbmcgc291cmNlID0gZGMuZ2V0U291cmNlKCk7CisKKwkJCQkJCQkJLy8gSXMgdGhlcmUgYSBkZXNjcmlwdGlvbj8KKwkJCQkJCQkJaWYgKGRlc2NyaXB0aW9uICE9IG51bGwKKwkJCQkJCQkJCQkmJiAhZGVzY3JpcHRpb24uZXF1YWxzKCIiKSkgeworCQkJCQkJCQkJLy8gWWVzCisJCQkJCQkJCQlkY0Rlc2NyaXB0aW9uVGV4dC5zZXRUZXh0KGRlc2NyaXB0aW9uKTsKKwkJCQkJCQkJCWRjRGVzY3JpcHRpb25UZXh0LnNldFZpc2libGUodHJ1ZSk7CisJCQkJCQkJCX0gLy8gaWYKKwkJCQkJCQkJZWxzZSB7CisJCQkJCQkJCQkvLyBObworCQkJCQkJCQkJZGNEZXNjcmlwdGlvblRleHQuc2V0VmlzaWJsZShmYWxzZSk7CisJCQkJCQkJCX0KKworCQkJCQkJCQkvLyBJcyB0aGVyZSBhIGNyZWF0b3I/CisJCQkJCQkJCWlmIChjcmVhdG9yICE9IG51bGwgJiYgIWNyZWF0b3IuZXF1YWxzKCIiKSkgeworCQkJCQkJCQkJLy8gWWVzCisJCQkJCQkJCQlkY0NyZWF0b3JUZXh0LnNldFRleHQoY3JlYXRvcik7CisJCQkJCQkJCQlkY0NyZWF0b3JUZXh0LnNldFZpc2libGUodHJ1ZSk7CisJCQkJCQkJCX0gLy8gaWYKKwkJCQkJCQkJZWxzZSB7CisJCQkJCQkJCQkvLyBObworCQkJCQkJCQkJZGNDcmVhdG9yVGV4dC5zZXRWaXNpYmxlKGZhbHNlKTsKKwkJCQkJCQkJfQorCQkJCQkJCQkvLyBJcyB0aGVyZSBhIHZhbGlkIHJhbmdlPworCQkJCQkJCQlpZiAodmFsaWQgIT0gbnVsbCAmJiAhdmFsaWQuZXF1YWxzKCIiKSkgeworCQkJCQkJCQkJLy8gWWVzCisJCQkJCQkJCQlkY1ZhbGlkVGV4dC5zZXRUZXh0KHZhbGlkKTsKKwkJCQkJCQkJCWRjVmFsaWRUZXh0LnNldFZpc2libGUodHJ1ZSk7CisJCQkJCQkJCX0gLy8gaWYKKwkJCQkJCQkJZWxzZSB7CisJCQkJCQkJCQkvLyBObworCQkJCQkJCQkJZGNWYWxpZFRleHQuc2V0VmlzaWJsZShmYWxzZSk7CisJCQkJCQkJCX0KKworCQkJCQkJCQkvLyBJcyB0aGVyZSBhIHNvdXJjZT8KKwkJCQkJCQkJaWYgKHNvdXJjZSAhPSBudWxsICYmICFzb3VyY2UuZXF1YWxzKCIiKSkgeworCQkJCQkJCQkJLy8gWWVzCisJCQkJCQkJCQlkY1NvdXJjZVRleHQuc2V0VGV4dChzb3VyY2UpOworCQkJCQkJCQkJZGNTb3VyY2VUZXh0LnNldFZpc2libGUodHJ1ZSk7CisJCQkJCQkJCX0gLy8gaWYKKwkJCQkJCQkJZWxzZSB7CisJCQkJCQkJCQkvLyBObworCQkJCQkJCQkJZGNTb3VyY2VUZXh0LnNldFZpc2libGUoZmFsc2UpOworCQkJCQkJCQl9CisKKwkJCQkJCQkJZGNUaXBTaGVsbC5wYWNrKCk7CisKKwkJCQkJCQkJLy8gTm93IHdlIG5lZWQgdG8gZmlndXJlIG91dCB3aGVyZSB0byBwb3NpdGlvbgorCQkJCQkJCQkvLyB0aGUgc2hlbGwgY29udGFpbmluZyB0aGUgZHVibGluIGNvcmUgdG9vbCB0aXAKKwkJCQkJCQkJLy8gZ2l2ZW4gdGhlIHNpemUgb2YgdGhlIHRvb2wgdGlwIGFuZCB0aGUgYm91bmRzCisJCQkJCQkJCS8vIG9mIHRoZSBEaXNwbGF5LgorCQkJCQkJCQlkY1RpcFNoZWxsLnNldEJvdW5kcyhjb21wdXRlSG92ZXJMb2NhdGlvbigKKwkJCQkJCQkJCQlkY1RpcFNoZWxsLCBjb250cm9sLnRvRGlzcGxheShwdCkpKTsKKworCQkJCQkJCQkvLyBNYWtlIHRoZSBEdWJsaW4gQ29yZSB0b29sIHRpcCB2aXNpYmxlCisJCQkJCQkJCWRjVGlwU2hlbGwuc2V0VmlzaWJsZSh0cnVlKTsKKwkJCQkJCQl9IC8vIGlmIElDb25maWd1cmF0aW9uRWxlbWVudAorCisJCQkJCQkJZWxzZSB7CisJCQkJCQkJCS8vIE5vCisJCQkJCQkJCWRjVGlwU2hlbGwuc2V0VmlzaWJsZShmYWxzZSk7CisJCQkJCQkJfQorCQkJCQkJfSAvLyBpZiBkaXNwbGF5IERDCisJCQkJCQllbHNlIHsKKwkJCQkJCQkvLyBObworCQkJCQkJCWRjVGlwU2hlbGwuc2V0VmlzaWJsZShmYWxzZSk7CisJCQkJCQl9CisKKwkJCQkJfSAvLyBpZiBUcmVlCisKKwkJCQl9IC8vIG1vdXNlSG92ZXIKKworCQkJCS8qKgorCQkJCSAqIEZpZ3VyZSBvdXQgd2hlcmUgdG8gcG9zaXRpb24gdGhlIHRvb2wgdGlwCisJCQkJICogCisJCQkJICogQHBhcmFtIGRjVGlwU2hlbGwKKwkJCQkgKiAgICAgICAgICAgIHRoZSB7QGxpbmsgU2hlbGx9IHRoYXQgY29udGFpbnMgdGhlIGR1YmxpbiBjb3JlCisJCQkJICogQHBhcmFtIG1vdXNlUG9zaXRpb24KKwkJCQkgKiAgICAgICAgICAgIHRoZSBjdXJyZW50IHBvc2l0aW9uIG9mIHRoZSBNb3VzZSByZWxhdGl2ZSB0byB0aGUKKwkJCQkgKiAgICAgICAgICAgIERpc3BsYXkKKwkJCQkgKi8KKwkJCQlwcml2YXRlIFJlY3RhbmdsZSBjb21wdXRlSG92ZXJMb2NhdGlvbihmaW5hbCBTaGVsbCBkY1RpcFNoZWxsLAorCQkJCQkJZmluYWwgUG9pbnQgbW91c2VQb3NpdGlvbikgeworCQkJCQkvLyBHZXQgdGhlIGN1cnJlbnQgYm91bmRzIG9mIHRoZSB0b29sVGlwCisJCQkJCWZpbmFsIFJlY3RhbmdsZSByZXRWYWx1ZSA9IGRjVGlwU2hlbGwuZ2V0Qm91bmRzKCk7CisKKwkJCQkJZmluYWwgUmVjdGFuZ2xlIGRpc3BsYXlCb3VuZHMgPSBkY1RpcFNoZWxsLmdldERpc3BsYXkoKQorCQkJCQkJCS5nZXRCb3VuZHMoKTsKKwkJCQkJLy8gVGhlIHggcG9zaXRpb24gaXMgZWl0aGVyIHRoZSBjdXJyZW50IG1vdXNlIHBvc2l0aW9uIGlmCisJCQkJCS8vIHRoZSBkdWJsaW4gY29yZSBjYW4gYmUgZGlzcGxheWVkIGVudGlyZWx5IHRvIHRoZSByaWdodCBvZgorCQkJCQkvLyB0aGF0LCBvciBhIHZhbHVlIHRvIHRoZSBsZWZ0IG9mIHRoYXQgdGhhdCBhbGxvd3MgaXQgdG8gYmUKKwkJCQkJLy8gZGlzcGxheWVkLCB3aXRoIDAgYmVpbmcgdGhlIGxpbWl0LgorCQkJCQlyZXRWYWx1ZS54ID0gTWF0aC5tYXgoTWF0aC5taW4obW91c2VQb3NpdGlvbi54LAorCQkJCQkJCWRpc3BsYXlCb3VuZHMud2lkdGggLSByZXRWYWx1ZS53aWR0aCksIDApOworCisJCQkJCS8vIFRoZSB5IHBvc2l0aW9uIGlzIFlfT0ZGU0VUIHBpeGVscyBiZWxvdyB0aGUgY3VycmVudCBtb3VzZQorCQkJCQkvLyBwb3NpdGlvbiwgb3IgaWYgdGhlIGVudGlyZSBkdWJsaW4gY29yZSB3b24ndCBmaXQgaW4gdGhlCisJCQkJCS8vIHdpbmRvdyBhdCB0aGF0IHBvc2l0aW9uLCB0aGVuIHRoZSBsb3dlc3QgcG9zaXRpb24gYWJvdmUKKwkJCQkJLy8gdGhhdCB3aGVyZSBpdCBjYW4sIHdpdGggMCAodGhlIHRvcCBvZiB0aGUgRGlzcGxheSkgYmVpbmcKKwkJCQkJLy8gdGhlIGxpbWl0CisJCQkJCXJldFZhbHVlLnkgPSBNYXRoLm1heChNYXRoLm1pbihtb3VzZVBvc2l0aW9uLnkgKyBZX09GRlNFVCwKKwkJCQkJCQlkaXNwbGF5Qm91bmRzLmhlaWdodCAtIHJldFZhbHVlLmhlaWdodCksIDApOworCisJCQkJCXJldHVybiByZXRWYWx1ZTsKKwkJCQl9IC8vIGNvbXB1dGVIb3ZlckxvY2F0aW9uCisKKwkJCQkvKioKKwkJCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuTW91c2VUcmFja0FkYXB0ZXIjbW91c2VFeGl0KG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuTW91c2VFdmVudCkKKwkJCQkgKi8KKwkJCQlAT3ZlcnJpZGUKKwkJCQlwdWJsaWMgdm9pZCBtb3VzZUV4aXQoCisJCQkJCQlAU3VwcHJlc3NXYXJuaW5ncygidW51c2VkIikgZmluYWwgTW91c2VFdmVudCBlKSB7CisJCQkJCS8vIElzIHRoZSBkdWJsaW4gY29yZSB2aXNpYmxlPworCQkJCQlpZiAoZGNUaXBTaGVsbC5pc1Zpc2libGUoKSkgeworCQkJCQkJLy8gWWVzCisJCQkJCQkvLyBOb3QgYW55IG1vcmUKKwkJCQkJCWRjVGlwU2hlbGwuc2V0VmlzaWJsZShmYWxzZSk7CisJCQkJCX0gLy8gaWYgdmlzaWJsZQorCQkJCX0gLy8gbW91c2VFeGl0CisJCQl9KTsKKwkJfSAvLyBhZGREQ1Rvb2xUaXBIZWxwCisJfSAvLyBEdWJsaW5Db3JlVG9vbFRpcEhhbmRsZXIKK30gLy8gSWRlbnRpZmlhYmxlUGx1Z2luVmlldwpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3ZpZXdzL01lc3NhZ2VzLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvdmlld3MvTWVzc2FnZXMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMDFhZTczCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3ZpZXdzL01lc3NhZ2VzLmphdmEKQEAgLTAsMCArMSw0MiBAQAorLy8gTWVzc2FnZXMuamF2YQorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnVpLnZpZXdzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGphdmEudXRpbC5NaXNzaW5nUmVzb3VyY2VFeGNlcHRpb247CitpbXBvcnQgamF2YS51dGlsLlJlc291cmNlQnVuZGxlOworCisvKioKKyAqIFRoaXMgY2xhc3MgcmVwcmVzZW50cworICovCitwdWJsaWMgY2xhc3MgTWVzc2FnZXMgeworCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBCVU5ETEVfTkFNRSA9ICJvcmcuZWNsaXBzZS5zdGVtLnVpLnZpZXdzLm1lc3NhZ2VzIjsgLy8kTk9OLU5MUy0xJAorCisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgUmVzb3VyY2VCdW5kbGUgUkVTT1VSQ0VfQlVORExFID0gUmVzb3VyY2VCdW5kbGUKKwkJCS5nZXRCdW5kbGUoQlVORExFX05BTUUpOworCisJcHJpdmF0ZSBNZXNzYWdlcygpIHsKKwkJLy8gTm90aGluZworCX0KKworCS8qKgorCSAqIEBwYXJhbSBrZXkKKwkgKiBAcmV0dXJuIHRoZSBzdHJpbmcgbWF0Y2hpbmcgdGhlIGtleQorCSAqLworCXB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldFN0cmluZyhTdHJpbmcga2V5KSB7CisJCXRyeSB7CisJCQlyZXR1cm4gUkVTT1VSQ0VfQlVORExFLmdldFN0cmluZyhrZXkpOworCQl9IGNhdGNoIChNaXNzaW5nUmVzb3VyY2VFeGNlcHRpb24gZSkgeworCQkJcmV0dXJuICchJyArIGtleSArICchJzsKKwkJfQorCX0KK30gLy8gTWVzc2FnZXMKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS92aWV3cy9Nb2RlbHNWaWV3LmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvdmlld3MvTW9kZWxzVmlldy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFmMTNiODQKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvdmlld3MvTW9kZWxzVmlldy5qYXZhCkBAIC0wLDAgKzEsMTEyIEBACisvLyBNb2RlbHNWaWV3LmphdmEKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS51aS52aWV3czsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNiwgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuQ29uc3RhbnRzOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udWkuQWN0aXZhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udWkuSVNoYXJlZEltYWdlczsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZ3JhcGhpY3MuSW1hZ2U7CisKKy8qKgorICogVGhpcyBjbGFzcyByZXByZXNlbnRzIHRoZSBlY2xpcHNlIHZpZXcgb2YgdGhlIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuTW9kZWx9cyB0aGF0IGhhdmUgYmVlbgorICogaW1wb3J0ZWQgaW50byBlY2xpcHNlIGFzIHBsdWctaW5zLgorICovCitwdWJsaWMgY2xhc3MgTW9kZWxzVmlldyBleHRlbmRzIElkZW50aWZpYWJsZVBsdWdpblZpZXcgeworCisJLyoqCisJICogVGhlIGlkZW50aWZpZXIgb2YgdGhlIE1vZGVsIFZpZXcKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBJRF9NT0RFTFNfVklFVyA9ICJvcmcuZWNsaXBzZS5zdGVtLnVpLnZpZXdzLm1vZGVscyI7IC8vJE5PTi1OTFMtMSQKKworCS8qKgorCSAqIENvbnN0cnVjdG9yCisJICovCisJcHVibGljIE1vZGVsc1ZpZXcoKSB7CisJCXN1cGVyKCk7CisJfQorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnVpLnZpZXdzLklkZW50aWZpYWJsZVBsdWdpblZpZXcjZ2V0SWRlbnRpZmlhYmxlUGx1Z2luVmlld0xhYmVsQ29udGVudFByb3ZpZGVyKCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgSWRlbnRpZmlhYmxlUGx1Z2luVmlld0xhYmVsQ29udGVudFByb3ZpZGVyIGdldElkZW50aWZpYWJsZVBsdWdpblZpZXdMYWJlbENvbnRlbnRQcm92aWRlcigpIHsKKwkJcmV0dXJuIG5ldyBNb2RlbFBsdWdpblZpZXdMYWJlbENvbnRlbnRQcm92aWRlcigpOworCX0KKworCS8qKgorCSAqIEByZXR1cm4gdGhlIGlucHV0IG1vZGVsIHNwZWNpZmljIHRvIHRoaXMgdmlldworCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCBJZGVudGlmaWFibGVWaWV3TW9kZWwgZ2V0SW5wdXQoKSB7CisJCXJldHVybiBNb2RlbFZpZXdNb2RlbC5nZXRNb2RlbCgpOworCX0gLy8gZ2V0SW5wdXQKKworCS8qKgorCSAqIFRoaXMgY2xhc3MgcmVwcmVzZW50cyBhIHNpbmdsZXRvbiBpbnN0YW5jZSBvZiBhIG1vZGVsIG9mIHRoZSBTVEVNCisJICoge0BsaW5rIE1vZGVsfSB0aGF0IGFyZSBwbHVnZ2VkIGludG8gdGhlIHN5c3RlbS4KKwkgKi8KKwlwcm90ZWN0ZWQgc3RhdGljIGNsYXNzIE1vZGVsVmlld01vZGVsIGV4dGVuZHMgSWRlbnRpZmlhYmxlVmlld01vZGVsIHsKKwkJLy8gVGhlIHNpbmdsZXRvbiBpbnN0YW5jZQorCQlwcml2YXRlIHN0YXRpYyBNb2RlbFZpZXdNb2RlbCBtdk1vZGVsOworCisJCXByaXZhdGUgTW9kZWxWaWV3TW9kZWwoKSB7CisJCQlzdXBlcihDb25zdGFudHMuSURfTU9ERUxfRVhURU5TSU9OX1BPSU5UKTsKKwkJfQorCisJCS8qKgorCQkgKiBAcmV0dXJuIHRoZSBzaW5nbGV0b24gaW5zdGFuY2Ugb2YgdGhlIE1vZGVsVmlld01vZGVsCisJCSAqLworCQlwdWJsaWMgc3RhdGljIE1vZGVsVmlld01vZGVsIGdldE1vZGVsKCkgeworCQkJaWYgKG12TW9kZWwgPT0gbnVsbCkgeworCQkJCW12TW9kZWwgPSBuZXcgTW9kZWxWaWV3TW9kZWwoKTsKKwkJCX0KKwkJCXJldHVybiBtdk1vZGVsOworCQl9IC8vIGdldE1vZGVsCisKKwl9IC8vIE1vZGVsVmlld3NNb2RlbAorCisJcHJvdGVjdGVkIHN0YXRpYyBjbGFzcyBNb2RlbFBsdWdpblZpZXdMYWJlbENvbnRlbnRQcm92aWRlciBleHRlbmRzCisJCQlJZGVudGlmaWFibGVQbHVnaW5WaWV3TGFiZWxDb250ZW50UHJvdmlkZXIgeworCisJCS8vIFRoaXMgaXMgdGhlIGltYWdlIHVzZWQgdG8gcmVwcmVzZW50IG1vZGVscyBpbiB0aGUgbW9kZWwgdmlldworCQlzdGF0aWMgSW1hZ2UgbW9kZWxJY29uID0gbnVsbDsKKworCQkvLyBJZiB0cnVlIHRoZW4gd2UndmUgbmV2ZXIgdHJpZWQgdG8gZ2V0IHRoZSBpY29uCisJCXN0YXRpYyBib29sZWFuIG1vZGVsSWNvbkZpcnN0VGltZSA9IHRydWU7CisKKwkJLyoqCisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS51aS52aWV3cy5JZGVudGlmaWFibGVQbHVnaW5WaWV3LklkZW50aWZpYWJsZVBsdWdpblZpZXdMYWJlbENvbnRlbnRQcm92aWRlciNnZXRJbWFnZShqYXZhLmxhbmcuT2JqZWN0KQorCQkgKi8KKwkJQE92ZXJyaWRlCisJCXB1YmxpYyBJbWFnZSBnZXRJbWFnZShmaW5hbCBPYmplY3QgZWxlbWVudCkgeworCQkJcmV0dXJuIChlbGVtZW50IGluc3RhbmNlb2YgSWRlbnRpZmlhYmxlRGVsZWdhdGUpID8gZ2V0TW9kZWxJY29uKCkKKwkJCQkJOiBzdXBlci5nZXRJbWFnZShlbGVtZW50KTsKKwkJfSAvLyBnZXRJbWFnZQorCisJCS8qKgorCQkgKiBAcmV0dXJuIHRoZSBpY29uIHRvIGJlIHVzZWQgdG8gcmVwcmVzZW50IG1vZGVscywgb3IgbnVsbCBpZiBpdCBjYW4ndAorCQkgKiAgICAgICAgIGJlIGxvYWRlZC4KKwkJICovCisJCXByaXZhdGUgSW1hZ2UgZ2V0TW9kZWxJY29uKCkgeworCQkJLy8gU2hvdWxkIHdlIHRyeSB0byBsb2FkIHRoZSBpY29uPworCQkJaWYgKG1vZGVsSWNvbkZpcnN0VGltZSAmJiBtb2RlbEljb24gPT0gbnVsbCkgeworCQkJCS8vIFllcworCQkJCW1vZGVsSWNvbkZpcnN0VGltZSA9IGZhbHNlOworCQkJCW1vZGVsSWNvbiA9IEFjdGl2YXRvci5nZXREZWZhdWx0KCkuZ2V0SW1hZ2VSZWdpc3RyeSgpLmdldCgKKwkJCQkJCUlTaGFyZWRJbWFnZXMuTU9ERUxfSUNPTik7CisJCQl9IC8vIGlmIHdlIHNob3VsZCBsb2FkIHRoZSBpY29uCisJCQlyZXR1cm4gbW9kZWxJY29uOworCQl9IC8vIGdldE1vZGVsSWNvbgorCisJfSAvLyBNb2RlbFBsdWdpblZpZXdMYWJlbENvbnRlbnRQcm92aWRlcgorfSAvLyBNb2RlbHNWaWV3CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvdmlld3MvUHJlZGljYXRlc1ZpZXcuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS92aWV3cy9QcmVkaWNhdGVzVmlldy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI2ZTRiZmQKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvdmlld3MvUHJlZGljYXRlc1ZpZXcuamF2YQpAQCAtMCwwICsxLDExMiBAQAorLy8gUHJlZGljYXRlc1ZpZXcuamF2YQorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnVpLnZpZXdzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5Db25zdGFudHM7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS51aS5BY3RpdmF0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS51aS5JU2hhcmVkSW1hZ2VzOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ncmFwaGljcy5JbWFnZTsKKworLyoqCisgKiBUaGlzIGNsYXNzIHJlcHJlc2VudHMgdGhlIGVjbGlwc2UgdmlldyBvZiB0aGUKKyAqIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlLlByZWRpY2F0ZX1zIHRoYXQgaGF2ZSBiZWVuIGltcG9ydGVkCisgKiBpbnRvIGVjbGlwc2UgYXMgcGx1Zy1pbnMuCisgKi8KK3B1YmxpYyBjbGFzcyBQcmVkaWNhdGVzVmlldyBleHRlbmRzIElkZW50aWZpYWJsZVBsdWdpblZpZXcgeworCisJLyoqCisJICogVGhlIGlkZW50aWZpZXIgb2YgdGhlIFByZWRpY2F0ZXMgVmlldyB7QHZhbHVlfQorCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIElEX1BSRURJQ0FURVNfVklFVyA9ICJvcmcuZWNsaXBzZS5zdGVtLnVpLnZpZXdzLnByZWRpY2F0ZXMiOyAvLyROT04tTkxTLTEkCisKKwkvKioKKwkgKiBDb25zdHJ1Y3RvcgorCSAqLworCXB1YmxpYyBQcmVkaWNhdGVzVmlldygpIHsKKwkJc3VwZXIoKTsKKwl9CisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0udWkudmlld3MuSWRlbnRpZmlhYmxlUGx1Z2luVmlldyNnZXRJZGVudGlmaWFibGVQbHVnaW5WaWV3TGFiZWxDb250ZW50UHJvdmlkZXIoKQorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCBJZGVudGlmaWFibGVQbHVnaW5WaWV3TGFiZWxDb250ZW50UHJvdmlkZXIgZ2V0SWRlbnRpZmlhYmxlUGx1Z2luVmlld0xhYmVsQ29udGVudFByb3ZpZGVyKCkgeworCQlyZXR1cm4gbmV3IFByZWRpY2F0ZVBsdWdpblZpZXdMYWJlbENvbnRlbnRQcm92aWRlcigpOworCX0KKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS51aS52aWV3cy5JZGVudGlmaWFibGVQbHVnaW5WaWV3I2dldElucHV0KCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgSWRlbnRpZmlhYmxlVmlld01vZGVsIGdldElucHV0KCkgeworCQlyZXR1cm4gUHJlZGljYXRlVmlld01vZGVsLmdldE1vZGVsKCk7CisJfSAvLyBnZXRJbnB1dAorCisJLyoqCisJICogVGhpcyBjbGFzcyByZXByZXNlbnRzIGEgc2luZ2xldG9uIGluc3RhbmNlIG9mIGEgbW9kZWwgb2YgdGhlIFNURU0KKwkgKiB7QGxpbmsgUHJlZGljYXRlfXMgdGhhdCBhcmUgcGx1Z2dlZCBpbnRvIHRoZSBzeXN0ZW0uCisJICovCisJcHJvdGVjdGVkIHN0YXRpYyBjbGFzcyBQcmVkaWNhdGVWaWV3TW9kZWwgZXh0ZW5kcyBJZGVudGlmaWFibGVWaWV3TW9kZWwgeworCQkvLyBUaGUgc2luZ2xldG9uIGluc3RhbmNlCisJCXByaXZhdGUgc3RhdGljIFByZWRpY2F0ZVZpZXdNb2RlbCBwdk1vZGVsOworCisJCXByaXZhdGUgUHJlZGljYXRlVmlld01vZGVsKCkgeworCQkJc3VwZXIoQ29uc3RhbnRzLklEX1BSRURJQ0FURV9FWFRFTlNJT05fUE9JTlQpOworCQl9CisKKwkJLyoqCisJCSAqIEByZXR1cm4gdGhlIHNpbmdsZXRvbiBpbnN0YW5jZSBvZiB0aGUgTW9kZWxWaWV3TW9kZWwKKwkJICovCisJCXB1YmxpYyBzdGF0aWMgUHJlZGljYXRlVmlld01vZGVsIGdldE1vZGVsKCkgeworCQkJaWYgKHB2TW9kZWwgPT0gbnVsbCkgeworCQkJCXB2TW9kZWwgPSBuZXcgUHJlZGljYXRlVmlld01vZGVsKCk7CisJCQl9CisJCQlyZXR1cm4gcHZNb2RlbDsKKwkJfSAvLyBnZXRNb2RlbAorCX0gLy8gUHJlZGljYXRlVmlld01vZGVsCisKKwlwcm90ZWN0ZWQgc3RhdGljIGNsYXNzIFByZWRpY2F0ZVBsdWdpblZpZXdMYWJlbENvbnRlbnRQcm92aWRlciBleHRlbmRzCisJCQlJZGVudGlmaWFibGVQbHVnaW5WaWV3TGFiZWxDb250ZW50UHJvdmlkZXIgeworCisJCS8vIFRoaXMgaXMgdGhlIGltYWdlIHVzZWQgdG8gcmVwcmVzZW50IHByZWRpY2F0ZXMgaW4gdGhlIHByZWRpY2F0ZSB2aWV3CisJCXN0YXRpYyBJbWFnZSBwcmVkaWNhdGVJY29uID0gbnVsbDsKKworCQkvLyBJZiB0cnVlIHRoZW4gd2UndmUgbmV2ZXIgdHJpZWQgdG8gZ2V0IHRoZSBpY29uCisJCXN0YXRpYyBib29sZWFuIHByZWRpY2F0ZUljb25GaXJzdFRpbWUgPSB0cnVlOworCisJCS8qKgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0udWkudmlld3MuSWRlbnRpZmlhYmxlUGx1Z2luVmlldy5JZGVudGlmaWFibGVQbHVnaW5WaWV3TGFiZWxDb250ZW50UHJvdmlkZXIjZ2V0SW1hZ2UoamF2YS5sYW5nLk9iamVjdCkKKwkJICovCisJCUBPdmVycmlkZQorCQlwdWJsaWMgSW1hZ2UgZ2V0SW1hZ2UoT2JqZWN0IGVsZW1lbnQpIHsKKwkJCXJldHVybiAoZWxlbWVudCBpbnN0YW5jZW9mIElkZW50aWZpYWJsZURlbGVnYXRlKSA/IGdldFByZWRpY2F0ZUljb24oKQorCQkJCQk6IHN1cGVyLmdldEltYWdlKGVsZW1lbnQpOworCQl9IC8vIGdldEltYWdlCisKKwkJLyoqCisJCSAqIEByZXR1cm4gdGhlIGljb24gdG8gYmUgdXNlZCB0byByZXByZXNlbnQgcHJlZGljYXRlcywgb3IgbnVsbCBpZiBpdAorCQkgKiAgICAgICAgIGNhbid0IGJlIGxvYWRlZC4KKwkJICovCisJCXByaXZhdGUgSW1hZ2UgZ2V0UHJlZGljYXRlSWNvbigpIHsKKwkJCS8vIFNob3VsZCB3ZSB0cnkgdG8gbG9hZCB0aGUgaWNvbj8KKwkJCWlmIChwcmVkaWNhdGVJY29uRmlyc3RUaW1lICYmIHByZWRpY2F0ZUljb24gPT0gbnVsbCkgeworCQkJCS8vIFllcworCQkJCXByZWRpY2F0ZUljb25GaXJzdFRpbWUgPSBmYWxzZTsKKwkJCQlwcmVkaWNhdGVJY29uID0gQWN0aXZhdG9yLmdldERlZmF1bHQoKS5nZXRJbWFnZVJlZ2lzdHJ5KCkuZ2V0KAorCQkJCQkJSVNoYXJlZEltYWdlcy5QUkVESUNBVEVfSUNPTik7CisJCQl9IC8vIGlmIHdlIHNob3VsZCBsb2FkIHRoZSBpY29uCisJCQlyZXR1cm4gcHJlZGljYXRlSWNvbjsKKwkJfSAvLyBnZXRQcmVkaWNhdGVJY29uCisKKwl9IC8vIFByZWRpY2F0ZVBsdWdpblZpZXdMYWJlbENvbnRlbnRQcm92aWRlcgorfSAvLyBQcmVkaWNhdGVzVmlldwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS92aWV3cy9TY2VuYXJpb3NWaWV3LmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvdmlld3MvU2NlbmFyaW9zVmlldy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjExZjFhODEKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvdmlld3MvU2NlbmFyaW9zVmlldy5qYXZhCkBAIC0wLDAgKzEsMTEyIEBACisvLyBTY2VuYXJpb3NWaWV3LmphdmEKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS51aS52aWV3czsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNiwgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuQ29uc3RhbnRzOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udWkuQWN0aXZhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udWkuSVNoYXJlZEltYWdlczsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZ3JhcGhpY3MuSW1hZ2U7CisKKy8qKgorICogVGhpcyBjbGFzcyByZXByZXNlbnRzIHRoZSBlY2xpcHNlIHZpZXcgb2YgdGhlCisgKiB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNjZW5hcmlvLlNjZW5hcmlvfXMgdGhhdCBoYXZlIGJlZW4gaW1wb3J0ZWQgaW50bworICogZWNsaXBzZSBhcyBwbHVnLWlucy4KKyAqLworcHVibGljIGNsYXNzIFNjZW5hcmlvc1ZpZXcgZXh0ZW5kcyBJZGVudGlmaWFibGVQbHVnaW5WaWV3IHsKKworCS8qKgorCSAqIFRoZSBpZGVudGlmaWVyIG9mIHRoZSBTY2VuYXJpb3MgVmlldyB7QHZhbHVlfQorCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIElEX1NDRU5BUklPU19WSUVXID0gIm9yZy5lY2xpcHNlLnN0ZW0udWkudmlld3Muc2NlbmFyaW9zIjsgLy8kTk9OLU5MUy0xJAorCisJLyoqCisJICogQ29uc3RydWN0b3IKKwkgKi8KKwlwdWJsaWMgU2NlbmFyaW9zVmlldygpIHsKKwkJc3VwZXIoKTsKKwl9CisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0udWkudmlld3MuSWRlbnRpZmlhYmxlUGx1Z2luVmlldyNnZXRJZGVudGlmaWFibGVQbHVnaW5WaWV3TGFiZWxDb250ZW50UHJvdmlkZXIoKQorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCBJZGVudGlmaWFibGVQbHVnaW5WaWV3TGFiZWxDb250ZW50UHJvdmlkZXIgZ2V0SWRlbnRpZmlhYmxlUGx1Z2luVmlld0xhYmVsQ29udGVudFByb3ZpZGVyKCkgeworCQlyZXR1cm4gbmV3IFNjZW5hcmlvUGx1Z2luVmlld0xhYmVsQ29udGVudFByb3ZpZGVyKCk7CisJfQorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnVpLnZpZXdzLklkZW50aWZpYWJsZVBsdWdpblZpZXcjZ2V0SW5wdXQoKQorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCBJZGVudGlmaWFibGVWaWV3TW9kZWwgZ2V0SW5wdXQoKSB7CisJCXJldHVybiBTY2VuYXJpb1ZpZXdNb2RlbC5nZXRNb2RlbCgpOworCX0gLy8gZ2V0SW5wdXQKKworCS8qKgorCSAqIFRoaXMgY2xhc3MgcmVwcmVzZW50cyBhIHNpbmdsZXRvbiBpbnN0YW5jZSBvZiBhIG1vZGVsIG9mIHRoZSBTVEVNCisJICoge0BsaW5rIFNjZW5hcmlvfXMgdGhhdCBhcmUgcGx1Z2dlZCBpbnRvIHRoZSBzeXN0ZW0uCisJICovCisJcHJvdGVjdGVkIHN0YXRpYyBjbGFzcyBTY2VuYXJpb1ZpZXdNb2RlbCBleHRlbmRzIElkZW50aWZpYWJsZVZpZXdNb2RlbCB7CisJCS8vIFRoZSBzaW5nbGV0b24gaW5zdGFuY2UKKwkJcHJpdmF0ZSBzdGF0aWMgU2NlbmFyaW9WaWV3TW9kZWwgc3ZNb2RlbDsKKworCQlwcml2YXRlIFNjZW5hcmlvVmlld01vZGVsKCkgeworCQkJc3VwZXIoQ29uc3RhbnRzLklEX1NDRU5BUklPX0VYVEVOU0lPTl9QT0lOVCk7CisJCX0KKworCQkvKioKKwkJICogQHJldHVybiB0aGUgc2luZ2xldG9uIGluc3RhbmNlIG9mIHRoZSBNb2RlbFZpZXdNb2RlbAorCQkgKi8KKwkJcHVibGljIHN0YXRpYyBTY2VuYXJpb1ZpZXdNb2RlbCBnZXRNb2RlbCgpIHsKKwkJCWlmIChzdk1vZGVsID09IG51bGwpIHsKKwkJCQlzdk1vZGVsID0gbmV3IFNjZW5hcmlvVmlld01vZGVsKCk7CisJCQl9CisJCQlyZXR1cm4gc3ZNb2RlbDsKKwkJfSAvLyBnZXRNb2RlbAorCX0gLy8gU2NlbmFyaW9WaWV3TW9kZWwKKworCXByb3RlY3RlZCBzdGF0aWMgY2xhc3MgU2NlbmFyaW9QbHVnaW5WaWV3TGFiZWxDb250ZW50UHJvdmlkZXIgZXh0ZW5kcworCQkJSWRlbnRpZmlhYmxlUGx1Z2luVmlld0xhYmVsQ29udGVudFByb3ZpZGVyIHsKKworCQkvLyBUaGlzIGlzIHRoZSBpbWFnZSB1c2VkIHRvIHJlcHJlc2VudCBzY2VuYXJpb3MgaW4gdGhlIHNjZW5hcmlvIHZpZXcKKwkJc3RhdGljIEltYWdlIHNjZW5hcmlvSWNvbiA9IG51bGw7CisKKwkJLy8gSWYgdHJ1ZSB0aGVuIHdlJ3ZlIG5ldmVyIHRyaWVkIHRvIGdldCB0aGUgaWNvbgorCQlzdGF0aWMgYm9vbGVhbiBzY2VuYXJpb0ljb25GaXJzdFRpbWUgPSB0cnVlOworCisJCS8qKgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0udWkudmlld3MuSWRlbnRpZmlhYmxlUGx1Z2luVmlldy5JZGVudGlmaWFibGVQbHVnaW5WaWV3TGFiZWxDb250ZW50UHJvdmlkZXIjZ2V0SW1hZ2UoamF2YS5sYW5nLk9iamVjdCkKKwkJICovCisJCUBPdmVycmlkZQorCQlwdWJsaWMgSW1hZ2UgZ2V0SW1hZ2UoT2JqZWN0IGVsZW1lbnQpIHsKKwkJCXJldHVybiAoZWxlbWVudCBpbnN0YW5jZW9mIElkZW50aWZpYWJsZURlbGVnYXRlKSA/IGdldFNjZW5hcmlvSWNvbigpCisJCQkJCTogc3VwZXIuZ2V0SW1hZ2UoZWxlbWVudCk7CisJCX0gLy8gZ2V0SW1hZ2UKKworCQkvKioKKwkJICogQHJldHVybiB0aGUgaWNvbiB0byBiZSB1c2VkIHRvIHJlcHJlc2VudCBzY2VuYXJpb3MsIG9yIG51bGwgaWYgaXQKKwkJICogICAgICAgICBjYW4ndCBiZSBsb2FkZWQuCisJCSAqLworCQlwcml2YXRlIEltYWdlIGdldFNjZW5hcmlvSWNvbigpIHsKKwkJCS8vIFNob3VsZCB3ZSB0cnkgdG8gbG9hZCB0aGUgaWNvbj8KKwkJCWlmIChzY2VuYXJpb0ljb25GaXJzdFRpbWUgJiYgc2NlbmFyaW9JY29uID09IG51bGwpIHsKKwkJCQkvLyBZZXMKKwkJCQlzY2VuYXJpb0ljb25GaXJzdFRpbWUgPSBmYWxzZTsKKwkJCQlzY2VuYXJpb0ljb24gPSBBY3RpdmF0b3IuZ2V0RGVmYXVsdCgpLmdldEltYWdlUmVnaXN0cnkoKS5nZXQoCisJCQkJCQlJU2hhcmVkSW1hZ2VzLlNDRU5BUklPX0lDT04pOworCQkJfSAvLyBpZiB3ZSBzaG91bGQgbG9hZCB0aGUgaWNvbgorCQkJcmV0dXJuIHNjZW5hcmlvSWNvbjsKKwkJfSAvLyBnZXRTY2VuYXJpb0ljb24KKworCX0gLy8gU2NlbmFyaW9QbHVnaW5WaWV3TGFiZWxDb250ZW50UHJvdmlkZXIKK30vLyBTY2VuYXJpb3NWaWV3CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvdmlld3MvU2VxdWVuY2Vyc1ZpZXcuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS92aWV3cy9TZXF1ZW5jZXJzVmlldy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIzOTkxOGQKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvdmlld3MvU2VxdWVuY2Vyc1ZpZXcuamF2YQpAQCAtMCwwICsxLDExNCBAQAorLy8gU2VxdWVuY2Vyc1ZpZXcuamF2YQorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnVpLnZpZXdzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5Db25zdGFudHM7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS51aS5BY3RpdmF0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS51aS5JU2hhcmVkSW1hZ2VzOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ncmFwaGljcy5JbWFnZTsKKworLyoqCisgKiBUaGlzIGNsYXNzIHJlcHJlc2VudHMgdGhlIGVjbGlwc2UgdmlldyBvZiB0aGUKKyAqIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2VxdWVuY2VyLlNlcXVlbmNlcn1zIHRoYXQgaGF2ZSBiZWVuCisgKiBpbXBvcnRlZCBpbnRvIGVjbGlwc2UgYXMgcGx1Zy1pbnMuCisgKgorICovCitwdWJsaWMgY2xhc3MgU2VxdWVuY2Vyc1ZpZXcgZXh0ZW5kcyBJZGVudGlmaWFibGVQbHVnaW5WaWV3IHsKKwkvKioKKwkgKiBUaGUgaWRlbnRpZmllciBvZiB0aGUgU2VxdWVuY2VycyBWaWV3CisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgSURfU0VRVUVOQ0VSU19WSUVXID0gIm9yZy5lY2xpcHNlLnN0ZW0udWkudmlld3Muc2VxdWVuY2VycyI7IC8vJE5PTi1OTFMtMSQKKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS51aS52aWV3cy5FeGVjdXRhYmxlUGx1Z2luVmlldyNnZXRJbnB1dCgpCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIElkZW50aWZpYWJsZVZpZXdNb2RlbCBnZXRJbnB1dCgpIHsKKwkJcmV0dXJuIFNlcXVlbmNlck1vZGVsLmdldE1vZGVsKCk7CisJfSAvLyBFeGVjdXRhYmxlVmlld01vZGVsCisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0udWkudmlld3MuSWRlbnRpZmlhYmxlUGx1Z2luVmlldyNnZXRJZGVudGlmaWFibGVQbHVnaW5WaWV3TGFiZWxDb250ZW50UHJvdmlkZXIoKQorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCBJZGVudGlmaWFibGVQbHVnaW5WaWV3TGFiZWxDb250ZW50UHJvdmlkZXIgZ2V0SWRlbnRpZmlhYmxlUGx1Z2luVmlld0xhYmVsQ29udGVudFByb3ZpZGVyKCkgeworCQlyZXR1cm4gbmV3IFNlcXVlbmNlclZpZXdUcmVlQ29udGVudFByb3ZpZGVyKCk7CisJfSAvLyBnZXRJZGVudGlmaWFibGVQbHVnaW5WaWV3TGFiZWxDb250ZW50UHJvdmlkZXIKKworCS8qKgorCSAqIFRoaXMgY2xhc3MgcmVwcmVzZW50cyB0aGUgbW9kZWwgb2YgdGhlIFNlcXVlbmNlcnMgdGhhdCBleHRlbmQgYQorCSAqIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zZXF1ZW5jZXJzIGV4dGVuc2lvbiBwb2ludC4KKwkgKi8KKwlwcml2YXRlIHN0YXRpYyBjbGFzcyBTZXF1ZW5jZXJNb2RlbCBleHRlbmRzIElkZW50aWZpYWJsZVZpZXdNb2RlbCB7CisKKwkJLy8gVGhlIHNpbmdsZXRvbiBpbnN0YW5jZQorCQlwcml2YXRlIHN0YXRpYyBTZXF1ZW5jZXJNb2RlbCBzZXFNb2RlbDsKKworCQkvKioKKwkJICogQ29uc3RydWN0b3IKKwkJICovCisJCXB1YmxpYyBTZXF1ZW5jZXJNb2RlbCgpIHsKKwkJCXN1cGVyKENvbnN0YW50cy5JRF9TRVFVRU5DRVJfRVhURU5TSU9OX1BPSU5UKTsKKwkJfSAvLyBTZXF1ZW5jZXJNb2RlbAorCisJCS8qKgorCQkgKiBAcmV0dXJuIHRoZSBzaW5nbGV0b24gaW5zdGFuY2Ugb2YgdGhlIG1vZGVsCisJCSAqLworCQlwdWJsaWMgc3RhdGljIFNlcXVlbmNlck1vZGVsIGdldE1vZGVsKCkgeworCQkJLy8gRG8gd2UgbmVlZCB0byBtYWtlIHRoZSBtb2RlbD8KKwkJCWlmIChzZXFNb2RlbCA9PSBudWxsKSB7CisJCQkJLy8gWWVzCisJCQkJc2VxTW9kZWwgPSBuZXcgU2VxdWVuY2VyTW9kZWwoKTsKKwkJCX0KKwkJCXJldHVybiBzZXFNb2RlbDsKKwkJfSAvLyBnZXRNb2RlbAorCX0gLy8gU2VxdWVuY2VyTW9kZWwKKworCS8qKgorCSAqIFRoaXMgY2xhc3MgaXMgdGhlIGNvbnRlbnQgcHJvdmlkZXIgb2YgdGhlIHNlcXVlbmNlcnMgdmlldy4KKwkgKi8KKwlwcm90ZWN0ZWQgc3RhdGljIGNsYXNzIFNlcXVlbmNlclZpZXdUcmVlQ29udGVudFByb3ZpZGVyIGV4dGVuZHMKKwkJCUlkZW50aWZpYWJsZVBsdWdpblZpZXdMYWJlbENvbnRlbnRQcm92aWRlciB7CisKKwkJLy8gVGhpcyBpcyB0aGUgaW1hZ2UgdXNlZCB0byByZXByZXNlbnQgc2VxdWVuY2VycyBpbiB0aGUgc2VxdWVuY2VycyB2aWV3CisJCXN0YXRpYyBJbWFnZSBzZXF1ZW5jZXJJY29uID0gbnVsbDsKKworCQkvLyBJZiB0cnVlIHRoZW4gd2UndmUgbmV2ZXIgdHJpZWQgdG8gZ2V0IHRoZSBpY29uCisJCXN0YXRpYyBib29sZWFuIHNlcXVlbmNlckljb25GaXJzdFRpbWUgPSB0cnVlOworCisJCS8qKgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0udWkudmlld3MuSWRlbnRpZmlhYmxlUGx1Z2luVmlldy5JZGVudGlmaWFibGVQbHVnaW5WaWV3TGFiZWxDb250ZW50UHJvdmlkZXIjZ2V0SW1hZ2UoamF2YS5sYW5nLk9iamVjdCkKKwkJICovCisJCUBPdmVycmlkZQorCQlwdWJsaWMgSW1hZ2UgZ2V0SW1hZ2UoZmluYWwgT2JqZWN0IGVsZW1lbnQpIHsKKwkJCXJldHVybiAoZWxlbWVudCBpbnN0YW5jZW9mIElkZW50aWZpYWJsZURlbGVnYXRlKSA/IGdldERpc2Vhc2VJY29uKCkKKwkJCQkJOiBzdXBlci5nZXRJbWFnZShlbGVtZW50KTsKKwkJfSAvLyBnZXRJbWFnZQorCisJCS8qKgorCQkgKiBAcmV0dXJuIHRoZSBpY29uIHRvIGJlIHVzZWQgdG8gcmVwcmVzZW50IHNlcXVlbmNlcnMsIG9yIG51bGwgaWYgaXQKKwkJICogICAgICAgICBjYW4ndCBiZSBsb2FkZWQuCisJCSAqLworCQlwcml2YXRlIEltYWdlIGdldERpc2Vhc2VJY29uKCkgeworCQkJLy8gU2hvdWxkIHdlIHRyeSB0byBsb2FkIHRoZSBpY29uPworCQkJaWYgKHNlcXVlbmNlckljb25GaXJzdFRpbWUgJiYgc2VxdWVuY2VySWNvbiA9PSBudWxsKSB7CisJCQkJLy8gWWVzCisJCQkJc2VxdWVuY2VySWNvbkZpcnN0VGltZSA9IGZhbHNlOworCisJCQkJc2VxdWVuY2VySWNvbiA9IEFjdGl2YXRvci5nZXREZWZhdWx0KCkuZ2V0SW1hZ2VSZWdpc3RyeSgpLmdldCgKKwkJCQkJCUlTaGFyZWRJbWFnZXMuU0VRVUVOQ0VSX0lDT04pOworCQkJfSAvLyBpZiB3ZSBzaG91bGQgbG9hZCB0aGUgaWNvbgorCQkJcmV0dXJuIHNlcXVlbmNlckljb247CisJCX0gLy8gZ2V0ZGlzZWFzZUljb24KKwl9IC8vIFNlcXVlbmNlclZpZXdUcmVlQ29udGVudFByb3ZpZGVyCit9IC8vIFNlcXVlbmNlcnNWaWV3CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvdmlld3MvU2ltdWxhdGlvbkNvbnRyb2wuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS92aWV3cy9TaW11bGF0aW9uQ29udHJvbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI2MzU5Y2EKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvdmlld3MvU2ltdWxhdGlvbkNvbnRyb2wuamF2YQpAQCAtMCwwICsxLDgyMCBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnVpLnZpZXdzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzCisgKiBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mCisgKiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMKKyAqIGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICogCisgKiBDb250cmlidXRvcnM6IElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnJlc291cmNlLkNvbG9yUmVnaXN0cnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UucmVzb3VyY2UuRm9udFJlZ2lzdHJ5OworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnJlc291cmNlLkltYWdlUmVnaXN0cnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLlNURU1UaW1lOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zY2VuYXJpby5TY2VuYXJpbzsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2VxdWVuY2VyLlNlcXVlbmNlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmpvYnMuZXhlY3V0aW9uLklFeGVjdXRhYmxlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uam9icy5zaW11bGF0aW9uLklTaW11bGF0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uam9icy5zaW11bGF0aW9uLklTaW11bGF0aW9uTGlzdGVuZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5qb2JzLnNpbXVsYXRpb24uU2ltdWxhdGlvbkV2ZW50OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uam9icy5zaW11bGF0aW9uLlNpbXVsYXRpb25TdGF0ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnVpLkFjdGl2YXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnVpLklTaGFyZWRDb2xvcnM7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS51aS5JU2hhcmVkRm9udHM7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS51aS5JU2hhcmVkSW1hZ2VzOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5TV1Q7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5Db250cm9sRXZlbnQ7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5Db250cm9sTGlzdGVuZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmdyYXBoaWNzLlJlY3RhbmdsZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QubGF5b3V0LkZvcm1BdHRhY2htZW50OworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5sYXlvdXQuRm9ybURhdGE7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5Gb3JtTGF5b3V0OworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5sYXlvdXQuR3JpZERhdGE7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5HcmlkTGF5b3V0OworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkJ1dHRvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuRXZlbnQ7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuTGlzdGVuZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuUHJvZ3Jlc3NCYXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuVGV4dDsKKworLyoqCisgKiBUaGlzIGNsYXNzIGlzIGFuIFNXVCBjb250cm9sIHRoYXQgZGlzcGxheXMgdGhlIHN0YXR1cy9zdGF0ZSBvZiBhbiBJU2ltdWxhdGlvbgorICogYW5kIGFsbG93cyB0aGUgSVNpbXVsYXRpb24gdG8gYmUgbWFuYWdlZC4KKyAqIAorICovCitwdWJsaWMgY2xhc3MgU2ltdWxhdGlvbkNvbnRyb2wgZXh0ZW5kcyBDb21wb3NpdGUgaW1wbGVtZW50cworCQlJU2ltdWxhdGlvbkxpc3RlbmVyLCBDb250cm9sTGlzdGVuZXIgeworCisJLyoqCisJICogVGhpcyBpcyB0aGUgYWN0aXZlIHNpbXVsYXRpb24gam9iIHRvIHdoaWNoIHRoaXMgY2xhc3MgaXMgYXR0YWNoZWQgJiBoYXMKKwkgKiBjb250cm9sIHVwb24uCisJICovCisJcHJvdGVjdGVkIElTaW11bGF0aW9uIHNpbXVsYXRpb24gPSBudWxsOworCisJCisJLyoqCisJICogQm9vbGVhbiB1c2VkIHRvIGtlZXAgdHJhY2sgb2YgcmVzZXR0aW5ncyA6IFdlIG5lZWQgdGhpcyB2YXJpYWJsZSBiZWNhdXNlCisJICogc29tZXRpbWVzIGFmdGVyIGEgcmVzZXQgdGhlcmUgaXMgc3RpbGwgb25lIG9yIHR3byBjb21wbGV0ZV9jeWNsZXMgZnJvbQorCSAqIG9sZCBzaW11bGF0aW9uIHJ1biAoYmVmb3JlIHJlc2V0dGluZykgdGhhdCBzaG91bGQgbm90IGJlIHByb2Nlc3NlZC4KKwkgKiAKKwkgKi8KKwlwcml2YXRlIGJvb2xlYW4gcmVzZXQgPSBmYWxzZTsKKworCS8qKgorCSAqIFRoZSBJbWFnZSByZWdpc3RyeSBtYW5hZ2VzIGltYWdlcywgY3JlYXRlcyB0aGVtIG9uLWRlbWFuZCwgYW5kIGRpc3Bvc2VzCisJICogdGhlbSB3aGVuIHRoZSBhc3NvY2lhdGVkIGRpc3BsYXkgaXMgZGlzcG9zZWQuCisJICovCisJcHJpdmF0ZSBzdGF0aWMgSW1hZ2VSZWdpc3RyeSBpbWFnZVJlZ2lzdHJ5ID0gbnVsbDsKKworCS8qKgorCSAqIFRoZSBjb2xvciByZWdpc3RyeSBtYW5hZ2VzIFNXVCBjb2xvcnMsIGNyZWF0ZXMgdGhlbSBvbi1kZW1hbmQsIGFuZCB0YWtlcworCSAqIGNhcmUgb2YgZGlzcG9zYWwuCisJICovCisJcHJpdmF0ZSBzdGF0aWMgQ29sb3JSZWdpc3RyeSBjb2xvclJlZ2lzdHJ5ID0gbnVsbDsKKworCS8qKgorCSAqIEpGYWNlIGZvbnQgcmVnaXN0cnkKKwkgKi8KKwlwcml2YXRlIHN0YXRpYyBGb250UmVnaXN0cnkgZm9udFJlZ2lzdHJ5ID0gbnVsbDsKKworCS8qKgorCSAqIFdJREdFVFMgZm9yIHNpbXVsYXRpb24gY29udHJvbAorCSAqLworCisJLyoqCisJICogVGhlIHRvcCBsZXZlbCBjb250YWluZXIgZm9yIHRoZSBzaW11bGF0aW9uIGNvbnRyb2wKKwkgKi8KKwlwcml2YXRlIENvbXBvc2l0ZSBtYWluQ29udGFpbmVyID0gbnVsbDsKKworCXByaXZhdGUgQ29tcG9zaXRlIGJ0bkNvbnRhaW5lciA9IG51bGw7CisKKwlwcml2YXRlIFRleHQgc2ltdWxhdGlvblByb2dyZXNzVGV4dDsKKwlwcml2YXRlIFRleHQgIHNpbXVsYXRpb25TdGF0ZVRleHQ7CisJcHJpdmF0ZSBUZXh0ICBzaW11bGF0aW9uVGltZVRleHQ7CisKKwlwcml2YXRlIFByb2dyZXNzQmFyIHBiID0gbnVsbDsKKwkKKwlwcml2YXRlIFRleHQgc2ltdWxhdGlvblRpdGxlVGV4dCA9IG51bGw7CisKKwkvKioKKwkgKiBTeW1ib2xpYyBjb25zdGFudCBpbmRpY2F0aW5nIG5vIHdvcmsgaGFzIGJlZW4gZG9uZQorCSAqLworCXByaXZhdGUgc3RhdGljIGludCBCRUdJTl9XT1JLID0gMDsKKworCS8qKgorCSAqIEJvb2xlYW4gdmFyaWFibGUgdXNlZCB0byBpbmRpY2F0ZSB3aGV0aGVyIHdlIHNob3VsZCBidWlsZCBhIHByb2dyZXNzIGJhcgorCSAqIHVzaW5nIFNXVC5JTkRFVEVSTUlOQVRFCisJICovCisJcHJpdmF0ZSBib29sZWFuIFVOS05PV05fRFVSQVRJT04gPSBmYWxzZTsKKworCS8qKgorCSAqIFNvbWUgY29uc3RhbnRzIHdlIG5lZWQgdG8gc2V0IHByZWZlcnJlZCBzaXplcyBvZiBTV1QgY29udHJvbHMgYW5kCisJICogY29udGFpbmVycy4KKwkgKi8KKworCXByaXZhdGUgc3RhdGljIGZpbmFsIGludCBTVEFOREFSRF9MRU5HVEggPSAxMDA7CisKKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgU1RBTkRBUkRfSEVJR0hUID0gMjI7CisKKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgQ09OVEFJTkVSX0hFSUdIVCA9IDIyNTsKKwkKKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgTUFSR0lOID0gMTA7CisJLyoqCisJICogQ29uc3RydWN0b3IKKwkgKiAKKwkgKiBAcGFyYW0gcGFyZW50CisJICogQHBhcmFtIHNpbXVsYXRpb24KKwkgKiAKKwkgKi8KKwlwdWJsaWMgU2ltdWxhdGlvbkNvbnRyb2woQ29tcG9zaXRlIHBhcmVudCwgSVNpbXVsYXRpb24gc2ltdWxhdGlvbikgeworCQlzdXBlcihwYXJlbnQsIFNXVC5OT05FKTsKKworCQkvLyBGaXJzdCwgcmVnaXN0ZXIgYXMgYSBsaXN0ZW5lciBvZiBzaW11bGF0aW9uIG1hbmFnZXIgZXZlbnRzCisJCXNpbXVsYXRpb24uYWRkU2ltdWxhdGlvbkxpc3RlbmVyKHRoaXMpOworCisJCS8vIFNldHMgdGhlIGFjdGl2ZSBzaW11bGF0aW9uIHdlIGFyZSBnb2luZyB0byBjb250cm9sCisJCXRoaXMuc2ltdWxhdGlvbiA9IHNpbXVsYXRpb247CisKKwkJCisJCVNlcXVlbmNlciBzZXF1ZW5jZXIgPSBzaW11bGF0aW9uLmdldFNjZW5hcmlvKCkuZ2V0U2VxdWVuY2VyKCk7CisJCS8vIENoZWNrIHRvIHNlZSBpZiB3ZSBoYXZlIHRvIGNyZWF0ZSBhbiBpbmRldGVybWluYXRlIHByb2dyZXNzIGJhci4KKwkJVU5LTk9XTl9EVVJBVElPTiA9IAorCQkJKHNlcXVlbmNlci5nZXREdXJhdGlvbigpID09IFNlcXVlbmNlci5VTktOT1dOX0RVUkFUSU9OKSAKKwkJCT8gdHJ1ZSA6IGZhbHNlOworCisJCS8vIFNldCB0aGUgaW1hZ2UgcmVnaXN0cnkKKwkJaWYgKGltYWdlUmVnaXN0cnkgPT0gbnVsbCkgeworCQkJQWN0aXZhdG9yIGFjdGl2YXRvciA9IEFjdGl2YXRvci5nZXREZWZhdWx0KCk7CisJCQlpbWFnZVJlZ2lzdHJ5ID0gYWN0aXZhdG9yLmdldEltYWdlUmVnaXN0cnkoKTsKKwkJfQorCQkvLyBTZXQgdGhlIGNvbG9yIHJlZ2lzdHJ5CisJCWlmIChjb2xvclJlZ2lzdHJ5ID09IG51bGwpIHsKKwkJCUFjdGl2YXRvciBhY3RpdmF0b3IgPSBBY3RpdmF0b3IuZ2V0RGVmYXVsdCgpOworCQkJY29sb3JSZWdpc3RyeSA9IGFjdGl2YXRvci5nZXRDb2xvclJlZ2lzdHJ5KCk7CisJCX0KKwkJLy8gU2V0IHRoZSBmb250IHJlZ2lzdHJ5CisJCWlmIChmb250UmVnaXN0cnkgPT0gbnVsbCkgeworCQkJQWN0aXZhdG9yIGFjdGl2YXRvciA9IEFjdGl2YXRvci5nZXREZWZhdWx0KCk7CisJCQlmb250UmVnaXN0cnkgPSBhY3RpdmF0b3IuZ2V0Rm9udFJlZ2lzdHJ5KCk7CisJCX0KKworCQkvLyBTZXQgdGhlIGxheW91dCBkYXRhIGZvciB0aGUgc2ltdWxhdGlvbiBjb250cm9sCisJCS8vIFRoZSBwYXJlbnQgaGFzIGJlZW4gc2V0IHRvIEdyaWRMYXlvdXQoKSBwcmV2aW91c2x5LgorCQl0aGlzLnNldExheW91dERhdGEobmV3IEdyaWREYXRhKFNXVC5GSUxMLCBTV1QuTk9ORSwgdHJ1ZSwgZmFsc2UpKTsKKwkJCisJCS8vIE5vdyBjcmVhdGUgYWxsIHRoZSB3aWRnZXRzCisJCWNyZWF0ZUNvbnRlbnRzKHRoaXMpOworCQlwYXJlbnQucmVkcmF3KCk7CisJfQorCisJLyoqCisJICogQ29tcHV0ZSB0aGUgbmV3IGJvdW5kcyBmb3IgdGhlIHNpbXVsYXRpb24gY29udHJvbCBhZnRlciByZXNpemluZy4KKwkgKiAKKwkgKiBAcGFyYW0gZXZlbnQKKwkgKi8KKwlwdWJsaWMgdm9pZCBjb250cm9sUmVzaXplZChDb250cm9sRXZlbnQgZXZlbnQpIHsKKyAgICAgIAorCQkKKwkJZmluYWwgaW50IE1VTFRJUExJRVIgPSA1OworCisJCisJCS8vIEdldCB0aGUgY2xpZW50IGFyZWEgYm91bmRhcmllcy4KKwkJUmVjdGFuZ2xlIGNsaWVudEJvdW5kcyA9IG51bGw7CisJCWlmICh0aGlzLmdldFBhcmVudCgpICE9IG51bGwpIHsKKwkJCWlmICh0aGlzLmdldFBhcmVudCgpLmdldFBhcmVudCgpICE9IG51bGwpIHsKKwkJCQljbGllbnRCb3VuZHMgPSB0aGlzLmdldFBhcmVudCgpLmdldFBhcmVudCgpLmdldENsaWVudEFyZWEoKTsKKwkJCX0KKwkJfQorCisJCS8vIE1ha2Ugc3VyZSB3ZSBkb24ndCBnZXQgYW4gTlBFCisJCWlmIChjbGllbnRCb3VuZHMgPT0gbnVsbCkgeworCQkJcmV0dXJuOworCQl9CisgICAgICAgIAorICAgICAgICBpbnQgd2lkdGggPSBjbGllbnRCb3VuZHMud2lkdGgtIChNQVJHSU4gKiBNVUxUSVBMSUVSKTsKKyAgICAgICAgaW50IGhlaWdodCA9IFNUQU5EQVJEX0hFSUdIVDsKKyAgICAgICAgCisgICAgICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisgICAgICAgIC8vIEpISyBUaGlzIGNvZGUgd2FzIHJlbW92ZWQgYmVjYXVzZSB0aGUgY29udHJvbHMgZGlkIG5vdCBkaXNwbGF5IHdlbGwgb24gdGhlIE1BQy4KKyAgICAgICAgLy8gU3dpY2hpbmcgZnJvbSBhIGdyaWQgbGF5b3V0IHRvIGZsb3cgbGF5b3V0IHNlZW1zIHRvIGZpeCB0aGUgcHJvYmxlbS4KKyAgICAgICAgLy8gdGhlIGZvbG93aW5nIGlzIG5vIGxvbmdlciBuZWVkZWQuCisgICAgICAgIC8vCisJCS8vIENvbXB1dGUgdGhlIG5ldyBkaXNwbGF5aW5nIGJvdW5kcy4KKwkJLypSZWN0YW5nbGUgcGJCb3VuZHMgPSB0aGlzLmNvbXB1dGVUcmltKHBiLmdldEJvdW5kcygpLngsCisJCQkJcGIuZ2V0Qm91bmRzKCkueSwgd2lkdGgsaGVpZ2h0KTsKKwkJUmVjdGFuZ2xlIHRpdGxlQm91bmRzID0gdGhpcy5jb21wdXRlVHJpbSgKKwkJCQkgICAgICAgIHNpbXVsYXRpb25UaXRsZVRleHQuZ2V0Qm91bmRzKCkueCwgCisJCQkJICAgICAgICBzaW11bGF0aW9uVGl0bGVUZXh0LmdldEJvdW5kcygpLnksIHdpZHRoLCBoZWlnaHQpOworCQlSZWN0YW5nbGUgc3RhdGVCb3VuZHMgPSB0aGlzLmNvbXB1dGVUcmltKAorCQkJCSAgICAgICAgc2ltdWxhdGlvblN0YXRlVGV4dC5nZXRCb3VuZHMoKS54LCAKKwkJCQkgICAgICAgIHNpbXVsYXRpb25TdGF0ZVRleHQuZ2V0Qm91bmRzKCkueSwgd2lkdGgsIGhlaWdodCk7CisJCVJlY3RhbmdsZSB0aW1lQm91bmRzID0gdGhpcy5jb21wdXRlVHJpbSgKKwkJICAgICAgICBzaW11bGF0aW9uVGltZVRleHQuZ2V0Qm91bmRzKCkueCwgCisJCSAgICAgICAgc2ltdWxhdGlvblRpbWVUZXh0LmdldEJvdW5kcygpLnksIHdpZHRoLCBoZWlnaHQpOworCQlSZWN0YW5nbGUgcHJvZ3Jlc3NCb3VuZHMgPSB0aGlzLmNvbXB1dGVUcmltKAorCQkgICAgICAgIHNpbXVsYXRpb25Qcm9ncmVzc1RleHQuZ2V0Qm91bmRzKCkueCwgCisJCSAgICAgICAgc2ltdWxhdGlvblByb2dyZXNzVGV4dC5nZXRCb3VuZHMoKS55LCB3aWR0aCwgaGVpZ2h0KTsqLworCQkKKwkJUmVjdGFuZ2xlIG1haW5Cb3VuZHMgPSB0aGlzLmNvbXB1dGVUcmltKGNsaWVudEJvdW5kcy54LCBjbGllbnRCb3VuZHMueSwKKwkJCQljbGllbnRCb3VuZHMud2lkdGggLSBNQVJHSU4sIENPTlRBSU5FUl9IRUlHSFQpOworCQlSZWN0YW5nbGUgYnRuQm91bmRzID0gdGhpcy5jb21wdXRlVHJpbShidG5Db250YWluZXIuZ2V0Qm91bmRzKCkueCwgCisJCQkJYnRuQ29udGFpbmVyLmdldEJvdW5kcygpLnksd2lkdGgsaGVpZ2h0KzIqTUFSR0lOKTsKKwkJCisJCS8vIFNldCB0aGUgbmV3IGJvdW5kYXJpZXMuCisvLwkJcGIuc2V0Qm91bmRzKHBiQm91bmRzKTsKKy8vCQlzaW11bGF0aW9uVGl0bGVUZXh0LnNldEJvdW5kcyh0aXRsZUJvdW5kcyk7CisvLwkJc2ltdWxhdGlvblN0YXRlVGV4dC5zZXRCb3VuZHMoc3RhdGVCb3VuZHMpOworLy8JCXNpbXVsYXRpb25UaW1lVGV4dC5zZXRCb3VuZHModGltZUJvdW5kcyk7CisvLwkJc2ltdWxhdGlvblByb2dyZXNzVGV4dC5zZXRCb3VuZHMocHJvZ3Jlc3NCb3VuZHMpOworCQkKKwkJYnRuQ29udGFpbmVyLnNldEJvdW5kcyhidG5Cb3VuZHMpOworCQltYWluQ29udGFpbmVyLnNldEJvdW5kcyhtYWluQm91bmRzKTsKKwkJLy8gUmVkcmF3IHRoZSB3aWRnZXRzLgorCQkKKwkJbWFpbkNvbnRhaW5lci5yZWRyYXcoKTsKKwkJCisJfQorCisJLyoqCisJICogRXZlbnQgaGFuZGxlciBtZXRob2QgZm9yIG1vdmVkIHdpbmRvdyBldmVudHMuCisJICogCisJICogQHBhcmFtIGV2ZW50CisJICovCisJcHVibGljIHZvaWQgY29udHJvbE1vdmVkKENvbnRyb2xFdmVudCBldmVudCkgeworCQkvLyBETyBOT1RISU5HCisJfQorCisJLyoqCisJICogUmVzZXQgdGhlIHByb2dyZXNzIGJhciB0byBpbml0aWFsIHN0YXRlCisJICogCisJICovCisJcHJvdGVjdGVkIHZvaWQgcmVzZXRQcm9ncmVzc0JhcigpIHsKKworCQlpZiAobnVsbCA9PSBwYiB8fCBwYi5pc0Rpc3Bvc2VkKCkgKSB7CisJCQlyZXR1cm47CisJCX0KKy8vCQlpZiAoVU5LTk9XTl9EVVJBVElPTikgeworLy8JCQlyZXR1cm47CisvLwkJfQorCQlwYi5zZXRNaW5pbXVtKEJFR0lOX1dPUkspOworCQlwYi5zZXRNYXhpbXVtKElFeGVjdXRhYmxlLlRPVEFMX1dPUkspOworCQlwYi5zZXRTZWxlY3Rpb24oQkVHSU5fV09SSyk7CisJCXBiLnJlZHJhdygpOworCX0KKworCS8qKgorCSAqIFVwZGF0ZSBzaW11bGF0aW9uIHN0YXRlIGxhYmVsIHdoZW5ldmVyIHNpbXVsYXRpb24gY2hhbmdlcyBzdGF0ZQorCSAqIAorCSAqIEBwYXJhbSBzdGF0ZQorCSAqICAgICAgICAgICAgb2Ygc2ltdWxhdGlvbgorCSAqLworCXByb3RlY3RlZCB2b2lkIHVwZGF0ZVN0YXRlTGFiZWwoU2ltdWxhdGlvblN0YXRlIHN0YXRlKSB7CisKKwkJaWYgKG51bGwgPT0gc2ltdWxhdGlvblN0YXRlVGV4dCB8fCBzaW11bGF0aW9uU3RhdGVUZXh0LmlzRGlzcG9zZWQoKSkgeworCQkJcmV0dXJuOworCQl9CisgICAgICAgIFJlY3RhbmdsZSBib3VuZHMgPSBzaW11bGF0aW9uU3RhdGVUZXh0LmdldEJvdW5kcygpOworCQlpZiAoc3RhdGUuZXF1YWxzKFNpbXVsYXRpb25TdGF0ZS5SVU5OSU5HKSB8fAorCQkJCXN0YXRlLmVxdWFscyhTaW11bGF0aW9uU3RhdGUuQ09NUExFVEVEX0NZQ0xFKSApIHsKKwkJCXNpbXVsYXRpb25TdGF0ZVRleHQuc2V0VGV4dChNZXNzYWdlcy5nZXRTdHJpbmcoIlNDdHJsLlJ1bm5pbmciKSk7IC8vJE5PTi1OTFMtMSQKKwkJCXNpbXVsYXRpb25TdGF0ZVRleHQuc2V0QmFja2dyb3VuZChjb2xvclJlZ2lzdHJ5CisJCQkJCS5nZXQoSVNoYXJlZENvbG9ycy5HUkVFTikpOworCQkJCisJCX0gZWxzZSBpZiAoc3RhdGUuZXF1YWxzKFNpbXVsYXRpb25TdGF0ZS5QQVVTRUQpKSB7CisJCQlzaW11bGF0aW9uU3RhdGVUZXh0LnNldFRleHQoTWVzc2FnZXMuZ2V0U3RyaW5nKCJTQ3RybC5QYXVzZWQiKSk7IC8vJE5PTi1OTFMtMSQKKwkJCXNpbXVsYXRpb25TdGF0ZVRleHQuc2V0QmFja2dyb3VuZChjb2xvclJlZ2lzdHJ5CisJCQkJCS5nZXQoSVNoYXJlZENvbG9ycy5ZRUxMT1cpKTsKKwkJfSBlbHNlIGlmIChzdGF0ZS5lcXVhbHMoU2ltdWxhdGlvblN0YXRlLlJFU0VUKSkgeworCQkJc2ltdWxhdGlvblN0YXRlVGV4dC5zZXRUZXh0KE1lc3NhZ2VzLmdldFN0cmluZygiU0N0cmwuUmVzZXQiKSk7IC8vJE5PTi1OTFMtMSQKKwkJCXNpbXVsYXRpb25TdGF0ZVRleHQuc2V0QmFja2dyb3VuZChjb2xvclJlZ2lzdHJ5CisJCQkJCS5nZXQoSVNoYXJlZENvbG9ycy5PUkFOR0UpKTsKKwkJCXBiLnNldFNlbGVjdGlvbigwKTsKKwkJfQorCQkKKyAgICAgICAgc2ltdWxhdGlvblN0YXRlVGV4dC5zZXRCb3VuZHMoYm91bmRzKTsKKwkJc2ltdWxhdGlvblN0YXRlVGV4dC5yZWRyYXcoKTsKKwl9CisKKwkKKwkKKwkvKioKKwkgKiBVcGRhdGUgcHJvZ3Jlc3MgYmFyIGFuZCBwcm9ncmVzcyBMYWJlbAorCSAqIElmIG5vIGR1cmF0aW9uIHRoZW4gdXNlIHNlcXVlbmNlciBjeWNsZSBjb3VudCB0byAKKwkgKiAobW9kdWxvIDEwMCkgdG8gcmVmbGVjdCB0aGUgcHJvZ3Jlc3MuCisJICogSWYgdGhlcmUgaXMgYSBkdXJhdGlvbiB0aGVuIHVzZSB0aGUgd29yayBjb21wbGV0ZWQgCisJICogdmFsdWUuCisJICogCisJICogQHBhcmFtIHdvcmtDb21wbGV0ZWQKKwkgKiBAcGFyYW0gc3RhdGUgIFNpbXVsYXRpb24gc3RhdGUgKHJ1bm5pbmcsIHBhdXNlZCAuLi4pCisJICovCisKKwkKKwlwcm90ZWN0ZWQgdm9pZCB1cGRhdGVQcm9ncmVzc0xhYmVsKGludCB3b3JrQ29tcGxldGVkLCBTaW11bGF0aW9uU3RhdGUgc3RhdGUpIHsKKwkJU2VxdWVuY2VyIHNlcXVlbmNlciA9IHNpbXVsYXRpb24uZ2V0U2NlbmFyaW8oKS5nZXRTZXF1ZW5jZXIoKTsKKwkJaW50IGN1cnJlbnQgPSBzZXF1ZW5jZXIuZ2V0Q3ljbGUoKSA7CisJCQorCQlSZWN0YW5nbGUgYm91bmRzID0gc2ltdWxhdGlvblByb2dyZXNzVGV4dC5nZXRCb3VuZHMoKTsKKwkKKwkJaWYgKFVOS05PV05fRFVSQVRJT04gPT0gdHJ1ZSkgeworCQkJLy8gV0UgSEFWRSBVTktOT1dOIERVUkFUSU9OCisJCQlzaW11bGF0aW9uUHJvZ3Jlc3NUZXh0LnNldFRleHQoCisJCQkJCU1lc3NhZ2VzLmdldFN0cmluZygiU0N0cmwuUHJvZ3Jlc3MiKSArIAorCQkJCQkiIDogdW5rbm93biBkdXJhdGlvbiIpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKKwkJCWN1cnJlbnQgPSBjdXJyZW50JTEwMDsKKwkJCQorCQl9IGVsc2UgaWYgKHdvcmtDb21wbGV0ZWQgPD0gSUV4ZWN1dGFibGUuVE9UQUxfV09SSykgeworCQkJc2ltdWxhdGlvblByb2dyZXNzVGV4dC5zZXRUZXh0KAorCQkJCQlNZXNzYWdlcy5nZXRTdHJpbmcoIlNDdHJsLlByb2dyZXNzIikgKworCQkJCQkiIDogIiArIHdvcmtDb21wbGV0ZWQgKyAiJSIpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQgLy8kTk9OLU5MUy0zJAorCQl9CisKKworCQlzaW11bGF0aW9uUHJvZ3Jlc3NUZXh0LnNldEJvdW5kcyhib3VuZHMpOworCQlzaW11bGF0aW9uUHJvZ3Jlc3NUZXh0LnJlZHJhdygpOworLy8JCXBiLnNldFNlbGVjdGlvbihjdXJyZW50KTsKKwl9CisKKwkvKioKKwkgKiBVcGRhdGUgc2ltdWxhdGlvbiB0aW1lIGxhYmVsCisJICogCSAKKwkgKiBAcGFyYW0gc3RhdGUgU2ltdWxhdGlvbiBzdGF0ZQorCSAqLworCXByb3RlY3RlZCB2b2lkIHVwZGF0ZVRpbWVMYWJlbChTaW11bGF0aW9uU3RhdGUgc3RhdGUpIHsKKwkJaWYoc2ltdWxhdGlvblRpbWVUZXh0LmlzRGlzcG9zZWQoKSkgcmV0dXJuOworCQlSZWN0YW5nbGUgYm91bmRzID0gc2ltdWxhdGlvblRpbWVUZXh0LmdldEJvdW5kcygpOworCQkvLyBHZXQgdGhlIGN1cnJlbnQgdGltZSA6CisJCVNlcXVlbmNlciBzZXF1ZW5jZXIgPSBzaW11bGF0aW9uLmdldFNjZW5hcmlvKCkuZ2V0U2VxdWVuY2VyKCk7CisJCVNURU1UaW1lIHRpbWUgPSBzZXF1ZW5jZXIuZ2V0Q3VycmVudFRpbWUoKTsKKworCQlpZiAoKHN0YXRlLm5hbWUoKS5lcXVhbHMoIlJVTk5JTkciKSA9PSBmYWxzZSkgLy8kTk9OLU5MUy0xJAorCQkJCSYmIChzdGF0ZS5uYW1lKCkuZXF1YWxzKCJDT01QTEVURURfQ1lDTEUiKSA9PSBmYWxzZSkpIHsgLy8kTk9OLU5MUy0xJAorCQkJLy8gRE9OVCBVUERBVEUgVU5MRVNTIFNUQVRFIElTIFJVTk5JTkcgT1IgQ09NUExFVEVEX0NZQ0xFCisJCQkvL3JldHVybjsKKwkJfQorCisJCWlmIChzZXF1ZW5jZXIuZ2V0Q3ljbGUoKSA+IDAgJiYgcmVzZXQgPT0gdHJ1ZSkgeworCQkJLy8gRE8gTk9USElORyA6IGlnbm9yZSBzcHVyaW91cyBjb21wbGV0ZWQgY3ljbGVzIGFmdGVyIGEgcmVzZXQuCisJCQlyZXNldCA9IGZhbHNlOworCQkJcmV0dXJuOworCQl9CisgICAgICAgIFN0cmluZyB0aW1lTGFiZWw9ICJbIiArIHNlcXVlbmNlci5nZXRDeWNsZSgpICsgIl0gIiArIAorICAgICAgICAgICAgICAgICAgICAgICAgTWVzc2FnZXMuZ2V0U3RyaW5nKCJTQ3RybC5UaW1lIikgKyAKKyAgICAgICAgICAgICAgICAgICAgICAgICIgOiAiICsgdGltZS50b1N0cmluZygpOyAKKyAgICAgICAgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkIC8vJE5PTi1OTFMtMyQgLy8kTk9OLU5MUy00JAkKKwkJc2ltdWxhdGlvblRpbWVUZXh0LnNldFRleHQodGltZUxhYmVsKTsJCisJCXNpbXVsYXRpb25UaW1lVGV4dC5zZXRUb29sVGlwVGV4dCh0aW1lTGFiZWwpOworCQkKKwkJc2ltdWxhdGlvblRpbWVUZXh0LnNldEJvdW5kcyhib3VuZHMpOworCQlzaW11bGF0aW9uVGltZVRleHQucmVkcmF3KCk7CisKKwl9CisKKwkvKioKKwkgKiBAcmV0dXJuIHRoZSBzaW11bGF0aW9uIHRvIHdoaWNoIHRoaXMgY29udHJvbCBpcyBhdHRhY2hlZCBvciBhc3NvY2lhdGVkCisJICovCisJcHVibGljIElTaW11bGF0aW9uIGdldFNpbXVsYXRpb24oKSB7CisJCXJldHVybiBzaW11bGF0aW9uOworCX0KKworCS8qKgorCSAqIFRoaXMgaXMgd2hlcmUgd2UgY3JlYXRlICYgaW5pdGlhbGl6ZSB0aGUgY29tcG9uZW50cyB0aGF0IGdvIGludG8gdGhlCisJICogc2ltdWxhdGlvbiBjb250cm9sLgorCSAqIAorCSAqIDxwcmU+CisJICogLSBUaXRsZSBvZiBTaW11bGF0aW9uCisJICogLSBQcm9ncmVzcyBzdGF0dXMKKwkgKiAtIFN0YXRlIChSdW5uaW5nIFBhdXNlZCkKKwkgKiAtIHByb2dyZXNzIGJhcgorCSAqIC0gQ29udHJvbCBidXR0b25zCisJICogCisJICogQHBhcmFtIHBhcmVudCAgU2ltdWxhdGlvbkNvbnRyb2wgQ29tcG9zaXRlIChvdXJzZWx2ZXMpCisJICogCisJICovCisJcHJpdmF0ZSB2b2lkIGNyZWF0ZUNvbnRlbnRzKENvbXBvc2l0ZSBwYXJlbnQpIHsKKworCQkvLyBDcmVhdGUgdGhlIHRvcCBsZXZlbCBjb250YWluZXIgZm9yIHRoZSBTV1QgV2lkZ2V0cyBvZiB0aGUgc2ltdWxhdGlvbgorCQkvLyBjb250cm9sCisJCW1haW5Db250YWluZXIgPSBuZXcgQ29tcG9zaXRlKHBhcmVudCwgU1dULlNNT09USCB8IFNXVC5CT1JERVIpOworCQkvLyBTZXQgTGF5b3V0IGRhdGEgZm9yIE1haW5Db250YWluZXIgd2l0aGluIFNpbXVsYXRpb25Db250cm9sCisJCW1haW5Db250YWluZXIuc2V0TGF5b3V0RGF0YShnZXRNYWluQ29udGFpbmVyR3JpZERhdGEoKSk7CisJCS8vIFNldCB0aGUgbGF5b3V0IG1hbmFnZXIgZm9yIHRoZSB0b3AgbGV2ZWwgY29udGFpbmVyCisJCUdyaWRMYXlvdXQgZ3JpZExheW91dCA9IG5ldyBHcmlkTGF5b3V0KCk7CisJCWdyaWRMYXlvdXQubnVtQ29sdW1ucyA9IDE7CisJCW1haW5Db250YWluZXIuc2V0TGF5b3V0KG5ldyBGb3JtTGF5b3V0KCkpOworCQkKKworCQlzaW11bGF0aW9uVGl0bGVUZXh0ID0gbmV3IFRleHQobWFpbkNvbnRhaW5lciwgU1dULk1VTFRJIHwgU1dULldSQVApOworCQlzaW11bGF0aW9uVGl0bGVUZXh0LnNldFRleHQoc2ltdWxhdGlvbi5nZXROYW1lV2l0aFNlcXVlbmNlTnVtYmVyKCkpOworCQlzaW11bGF0aW9uVGl0bGVUZXh0LnNldFRvb2xUaXBUZXh0KHNpbXVsYXRpb24uZ2V0TmFtZSgpKTsKKwkJc2ltdWxhdGlvblRpdGxlVGV4dAorCQkJCS5zZXRCYWNrZ3JvdW5kKGNvbG9yUmVnaXN0cnkuZ2V0KElTaGFyZWRDb2xvcnMuR1JBWSkpOworCQlzaW11bGF0aW9uVGl0bGVUZXh0LnNldEZvbnQoZm9udFJlZ2lzdHJ5LmdldChJU2hhcmVkRm9udHMuREVGQVVMVCkpOworCQlzaW11bGF0aW9uVGl0bGVUZXh0LnNldEVkaXRhYmxlKGZhbHNlKTsKKwkJLy8KKwkJRm9ybURhdGEgc3R0Rm9ybURhdGEgPSBuZXcgRm9ybURhdGEoKTsKKwkJc3R0Rm9ybURhdGEubGVmdCA9IG5ldyBGb3JtQXR0YWNobWVudCgwLCAwKTsKKwkJc3R0Rm9ybURhdGEucmlnaHQgPSBuZXcgRm9ybUF0dGFjaG1lbnQoMTAwLCAwKTsKKwkJc3R0Rm9ybURhdGEudG9wID0gbmV3IEZvcm1BdHRhY2htZW50KDEsIDApOworCQlzaW11bGF0aW9uVGl0bGVUZXh0LnNldExheW91dERhdGEoc3R0Rm9ybURhdGEpOworCQkKKworCQlzaW11bGF0aW9uUHJvZ3Jlc3NUZXh0ID0gbmV3IFRleHQobWFpbkNvbnRhaW5lciwgU1dULlNNT09USAorCQkJCXwgU1dULkJPUkRFUik7CisJCXNpbXVsYXRpb25Qcm9ncmVzc1RleHQuc2V0QmFja2dyb3VuZChjb2xvclJlZ2lzdHJ5CisJCQkJLmdldChJU2hhcmVkQ29sb3JzLkdSRUVOKSk7CisJCXNpbXVsYXRpb25Qcm9ncmVzc1RleHQuc2V0RWRpdGFibGUoZmFsc2UpOworCQlzaW11bGF0aW9uUHJvZ3Jlc3NUZXh0LnNldEZvbnQoZm9udFJlZ2lzdHJ5LmdldChJU2hhcmVkRm9udHMuREVGQVVMVCkpOworCQkvLworCQlGb3JtRGF0YSBzcHRGb3JtRGF0YSA9IG5ldyBGb3JtRGF0YSgpOworCQlzcHRGb3JtRGF0YS5sZWZ0ID0gbmV3IEZvcm1BdHRhY2htZW50KDAsIDApOworCQlzcHRGb3JtRGF0YS5yaWdodCA9IG5ldyBGb3JtQXR0YWNobWVudCgxMDAsIDApOworCQlzcHRGb3JtRGF0YS50b3AgPSBuZXcgRm9ybUF0dGFjaG1lbnQoc2ltdWxhdGlvblRpdGxlVGV4dCwgMCk7CisJCXNpbXVsYXRpb25Qcm9ncmVzc1RleHQuc2V0TGF5b3V0RGF0YShzcHRGb3JtRGF0YSk7CisKKwkJc2ltdWxhdGlvblN0YXRlVGV4dCA9IG5ldyBUZXh0KG1haW5Db250YWluZXIsIFNXVC5TTU9PVEggfCBTV1QuQk9SREVSKTsKKwkJc2ltdWxhdGlvblN0YXRlVGV4dC5zZXRCYWNrZ3JvdW5kKGNvbG9yUmVnaXN0cnkKKwkJCQkuZ2V0KElTaGFyZWRDb2xvcnMuR1JFRU4pKTsKKwkJc2ltdWxhdGlvblN0YXRlVGV4dC5zZXRFZGl0YWJsZShmYWxzZSk7CisJCXNpbXVsYXRpb25TdGF0ZVRleHQuc2V0Rm9udChmb250UmVnaXN0cnkuZ2V0KElTaGFyZWRGb250cy5ERUZBVUxUKSk7CisJCUZvcm1EYXRhIHNzdEZvcm1EYXRhID0gbmV3IEZvcm1EYXRhKCk7CisJCXNzdEZvcm1EYXRhLmxlZnQgPSBuZXcgRm9ybUF0dGFjaG1lbnQoMCwgMCk7CisJCXNzdEZvcm1EYXRhLnJpZ2h0ID0gbmV3IEZvcm1BdHRhY2htZW50KDEwMCwgMCk7CisJCXNzdEZvcm1EYXRhLnRvcCA9IG5ldyBGb3JtQXR0YWNobWVudChzaW11bGF0aW9uUHJvZ3Jlc3NUZXh0LCAwKTsKKwkJc2ltdWxhdGlvblN0YXRlVGV4dC5zZXRMYXlvdXREYXRhKHNzdEZvcm1EYXRhKTsKKworCQlwYiA9IG5ldyBQcm9ncmVzc0JhcihtYWluQ29udGFpbmVyLCBTV1QuU01PT1RIIHwgU1dULkJPUkRFUik7CisJCXBiLnNldEZvbnQoZm9udFJlZ2lzdHJ5LmdldChJU2hhcmVkRm9udHMuREVGQVVMVCkpOworCQlGb3JtRGF0YSBwYkZvcm1EYXRhID0gbmV3IEZvcm1EYXRhKCk7CisJCXBiRm9ybURhdGEubGVmdCA9IG5ldyBGb3JtQXR0YWNobWVudCgwLCAwKTsKKwkJcGJGb3JtRGF0YS5yaWdodCA9IG5ldyBGb3JtQXR0YWNobWVudCgxMDAsIDApOworCQlwYkZvcm1EYXRhLnRvcCA9IG5ldyBGb3JtQXR0YWNobWVudChzaW11bGF0aW9uU3RhdGVUZXh0LCAwKTsKKwkJcGIuc2V0TGF5b3V0RGF0YShwYkZvcm1EYXRhKTsKKwkJCisJCXNpbXVsYXRpb25UaW1lVGV4dCA9IG5ldyBUZXh0KG1haW5Db250YWluZXIsIFNXVC5TTU9PVEggfCBTV1QuQk9SREVSKTsKKwkJc2ltdWxhdGlvblRpbWVUZXh0LnNldEJhY2tncm91bmQoY29sb3JSZWdpc3RyeQorCQkJCS5nZXQoSVNoYXJlZENvbG9ycy5HUkVFTikpOworCQlzaW11bGF0aW9uVGltZVRleHQuc2V0RWRpdGFibGUoZmFsc2UpOworCQlzaW11bGF0aW9uVGltZVRleHQuc2V0Rm9udChmb250UmVnaXN0cnkuZ2V0KElTaGFyZWRGb250cy5ERUZBVUxUKSk7CisJCUZvcm1EYXRhIHN0bXRGb3JtRGF0YSA9IG5ldyBGb3JtRGF0YSgpOworCQlzdG10Rm9ybURhdGEubGVmdCA9IG5ldyBGb3JtQXR0YWNobWVudCgwLCAwKTsKKwkJc3RtdEZvcm1EYXRhLnJpZ2h0ID0gbmV3IEZvcm1BdHRhY2htZW50KDEwMCwgMCk7CisJCXN0bXRGb3JtRGF0YS50b3AgPSBuZXcgRm9ybUF0dGFjaG1lbnQocGIsIDApOworCQlzaW11bGF0aW9uVGltZVRleHQuc2V0TGF5b3V0RGF0YShzdG10Rm9ybURhdGEpOworCQkKKwkJQ29tcG9zaXRlIGNvbnRyb2xCdXR0b25zID0gY3JlYXRlQ29udHJvbEJ1dHRvbnMobWFpbkNvbnRhaW5lcik7CisJCUZvcm1EYXRhIGNvbnRyb2xzRm9ybURhdGEgPSBuZXcgRm9ybURhdGEoKTsKKwkJY29udHJvbHNGb3JtRGF0YS5sZWZ0ID0gbmV3IEZvcm1BdHRhY2htZW50KDAsIDApOworCQljb250cm9sc0Zvcm1EYXRhLnJpZ2h0ID0gbmV3IEZvcm1BdHRhY2htZW50KDgwLCAwKTsKKwkJY29udHJvbHNGb3JtRGF0YS50b3AgPSBuZXcgRm9ybUF0dGFjaG1lbnQoc2ltdWxhdGlvblRpbWVUZXh0LCAwKTsKKwkJY29udHJvbEJ1dHRvbnMuc2V0TGF5b3V0RGF0YShjb250cm9sc0Zvcm1EYXRhKTsKKwkJCisJCXJlc2V0UHJvZ3Jlc3NCYXIoKTsgLy8gU2V0IGFuZCBkaXNwbGF5IHByb2dyZXNzIGJhcidzIGluaXRpYWwgdmFsdWUKKwkJdXBkYXRlU3RhdGVMYWJlbChzaW11bGF0aW9uLmdldFNpbXVsYXRpb25TdGF0ZSgpKTsKKwkJdXBkYXRlUHJvZ3Jlc3NMYWJlbChCRUdJTl9XT1JLLCBzaW11bGF0aW9uLmdldFNpbXVsYXRpb25TdGF0ZSgpKTsKKyAgICAgICAgdXBkYXRlVGltZUxhYmVsKHNpbXVsYXRpb24uZ2V0U2ltdWxhdGlvblN0YXRlKCkpOworCQkvL21haW5Db250YWluZXIucmVkcmF3KCk7CisJfQorCisJLyoqCisJICogQ3JlYXRlIGEgbmV3IGdyaWQgZGF0YSBvYmplY3Qgd2l0aCBkZWZhdWx0IHZhbHVlcy4KKwkgKiAKKwkgKiBAcmV0dXJuIHRoZSBuZXcgZ3JpZCBkYXRhIG9iamVjdAorCSAqLworCXByb3RlY3RlZCBHcmlkRGF0YSBnZXREZWZhdWx0R3JpZERhdGEoKSB7CisJCUdyaWREYXRhIGdyaWREYXRhID0gbmV3IEdyaWREYXRhKCk7CisJCWdyaWREYXRhLmdyYWJFeGNlc3NIb3Jpem9udGFsU3BhY2UgPSBmYWxzZTsKKwkJZ3JpZERhdGEuZ3JhYkV4Y2Vzc1ZlcnRpY2FsU3BhY2UgPSBmYWxzZTsKKwkJZ3JpZERhdGEuaGVpZ2h0SGludCA9IFNUQU5EQVJEX0hFSUdIVDsKKwkJZ3JpZERhdGEubWluaW11bUhlaWdodCA9IFNUQU5EQVJEX0hFSUdIVDsKKwkJZ3JpZERhdGEud2lkdGhIaW50ID0gU1RBTkRBUkRfTEVOR1RIOworCQlncmlkRGF0YS5taW5pbXVtV2lkdGggPSBTVEFOREFSRF9MRU5HVEg7CisJCWdyaWREYXRhLmhvcml6b250YWxBbGlnbm1lbnQgPSBTV1QuTEVGVDsKKwkJcmV0dXJuIGdyaWREYXRhOworCX0KKworCS8qKgorCSAqIENyZWF0ZSBhIG5ldyBncmlkIGRhdGEgY3VzdG9taXplZCBmb3IgYSB0ZXh0IGZpZWxkLgorCSAqIAorCSAqIEByZXR1cm4gZ3JpZERhdGEgdGhlIG5ldyBncmlkIGRhdGEgb2JqZWN0CisJICovCisJcHJvdGVjdGVkIEdyaWREYXRhIGdldFRleHRHcmlkRGF0YSgpIHsKKwkJR3JpZERhdGEgZ3JpZERhdGEgPSBuZXcgR3JpZERhdGEoU1dULkZJTEwsIFNXVC5OT05FLCB0cnVlLCBmYWxzZSk7CisJCWdyaWREYXRhLmdyYWJFeGNlc3NIb3Jpem9udGFsU3BhY2UgPSB0cnVlOworCQlncmlkRGF0YS5ncmFiRXhjZXNzVmVydGljYWxTcGFjZSA9IGZhbHNlOworCQlncmlkRGF0YS5oZWlnaHRIaW50ID0gU1RBTkRBUkRfSEVJR0hUOworCQlncmlkRGF0YS5taW5pbXVtSGVpZ2h0ID0gU1RBTkRBUkRfSEVJR0hULTI7CisJCWdyaWREYXRhLndpZHRoSGludCA9IFNUQU5EQVJEX0xFTkdUSDsKKwkJZ3JpZERhdGEubWluaW11bVdpZHRoID0gU1RBTkRBUkRfTEVOR1RIOworCQlncmlkRGF0YS5ob3Jpem9udGFsQWxpZ25tZW50ID0gU1dULkZJTEw7CisJCXJldHVybiBncmlkRGF0YTsKKwl9CisKKwkvKioKKwkgKiBDcmVhdGUgYSBuZXcgZ3JpZCBkYXRhIGN1c3RvbWl6ZWQgZm9yIGEgcHJvZ3Jlc3MgYmFyLgorCSAqIAorCSAqIEByZXR1cm4gZ3JpZERhdGEgdGhlIG5ldyBncmlkIGRhdGEgb2JqZWN0CisJICovCisJcHJvdGVjdGVkIEdyaWREYXRhIGdldFByb2dyZXNzQmFyR3JpZERhdGEoKSB7CisJCUdyaWREYXRhIGdyaWREYXRhID0gbmV3IEdyaWREYXRhKFNXVC5GSUxMLCBTV1QuTk9ORSwgdHJ1ZSwgZmFsc2UpOworCQlncmlkRGF0YS5ncmFiRXhjZXNzSG9yaXpvbnRhbFNwYWNlID0gdHJ1ZTsKKwkJZ3JpZERhdGEuZ3JhYkV4Y2Vzc1ZlcnRpY2FsU3BhY2UgPSBmYWxzZTsKKwkJZ3JpZERhdGEuaG9yaXpvbnRhbEFsaWdubWVudCA9IFNXVC5GSUxMOworCQlyZXR1cm4gZ3JpZERhdGE7CisJfQorCisJLyoqCisJICogQ3JlYXRlIGEgbmV3IGdyaWQgZGF0YSBjdXN0b21pemVkIGZvciB0aGUgbWFpbiBjb250YWluZXIgb2YgdGhlCisJICogc2ltdWxhdGlvbiBjb250cm9sLgorCSAqIAorCSAqIEByZXR1cm4gZ3JpZERhdGEgdGhlIG5ldyBncmlkIGRhdGEgb2JqZWN0CisJICovCisJcHJvdGVjdGVkIEdyaWREYXRhIGdldE1haW5Db250YWluZXJHcmlkRGF0YSgpIHsKKwkJR3JpZERhdGEgZ3JpZERhdGEgPSBuZXcgR3JpZERhdGEoKTsKKwkJZ3JpZERhdGEuZ3JhYkV4Y2Vzc1ZlcnRpY2FsU3BhY2UgPSBmYWxzZTsKKwkJZ3JpZERhdGEuZ3JhYkV4Y2Vzc0hvcml6b250YWxTcGFjZSA9IHRydWU7CisJCS8vIFNldCB0aGUgcHJlZmVycmVkIHNpemUuCisJCWdyaWREYXRhLndpZHRoSGludCA9IFNUQU5EQVJEX0xFTkdUSDsKKwkJZ3JpZERhdGEubWluaW11bVdpZHRoID0gU1RBTkRBUkRfTEVOR1RIOworCQkvL2dyaWREYXRhLmhlaWdodEhpbnQgPSBTVEFOREFSRF9IRUlHSFQ7CisJCS8vZ3JpZERhdGEubWluaW11bUhlaWdodCA9IFNUQU5EQVJEX0hFSUdIVDsKKwkJZ3JpZERhdGEuaGVpZ2h0SGludCA9IENPTlRBSU5FUl9IRUlHSFQ7CisJCWdyaWREYXRhLm1pbmltdW1IZWlnaHQgPSBDT05UQUlORVJfSEVJR0hUOworCQlyZXR1cm4gZ3JpZERhdGE7CisJfQorCisJLyoqCisJICogQ3JlYXRlIGEgbmV3IGdyaWQgZGF0YSBjdXN0b21pemVkIGZvciB0aGUgcHVzaCBidXR0b25zLgorCSAqIAorCSAqIEByZXR1cm4gZ3JpZERhdGEgdGhlIG5ldyBncmlkIGRhdGEgb2JqZWN0CisJICovCisJcHJvdGVjdGVkIEdyaWREYXRhIGdldEJ1dHRvbkdyaWREYXRhKCkgeworCQkKKwkJR3JpZERhdGEgZ3JpZERhdGEgPSBuZXcgR3JpZERhdGEoKTsKKwkJZ3JpZERhdGEuZ3JhYkV4Y2Vzc1ZlcnRpY2FsU3BhY2UgPSBmYWxzZTsKKwkJZ3JpZERhdGEuZ3JhYkV4Y2Vzc0hvcml6b250YWxTcGFjZSA9IHRydWU7CisJCWdyaWREYXRhLmhvcml6b250YWxBbGlnbm1lbnQgPSBTV1QuRklMTDsKKwkJZ3JpZERhdGEudmVydGljYWxBbGlnbm1lbnQgPSBTV1QuQ0VOVEVSOworCQlncmlkRGF0YS5oZWlnaHRIaW50ID0gU1RBTkRBUkRfSEVJR0hULTIrTUFSR0lOOworCQlncmlkRGF0YS5taW5pbXVtSGVpZ2h0ID0gU1RBTkRBUkRfSEVJR0hULTI7CisJCXJldHVybiBncmlkRGF0YTsKKwl9CisKKwkvKioKKwkgKiBDcmVhdGVzIHRoZSBhcnJheSBvZiBTV1QgcHVzaCBidXR0b25zLgorCSAqIGJ0bkNvbnRhaW5lciBpcyBhIG5ldyBDb21wb3NpdGUgdGhhdCB3aWxsIGNvbnRhaW4KKwkgKiBhIHJvdyBvZiA1IGJ1dHRvbnMuCisJICogQHBhcmFtIHBhcmVudCBtYWluQ29udGFpbmVyCisJICovCisJcHJvdGVjdGVkIENvbXBvc2l0ZSBjcmVhdGVDb250cm9sQnV0dG9ucyhDb21wb3NpdGUgcGFyZW50KSB7CisJCQorCQlmaW5hbCBpbnQgT0ZGU0VUID0gMTY7CisJCWJ0bkNvbnRhaW5lciA9IG5ldyBDb21wb3NpdGUocGFyZW50LDApOworICAgICAgICAvL2J0bkNvbnRhaW5lci5zZXRTaXplKFNUQU5EQVJEX0xFTkdUSCwgU1RBTkRBUkRfSEVJR0hUK09GRlNFVCk7CisgICAgICAgIAorCQlHcmlkTGF5b3V0IGdyaWRMYXlvdXQgPSBuZXcgR3JpZExheW91dCgpOworCQlncmlkTGF5b3V0Lm51bUNvbHVtbnMgPSA1OworCQlncmlkTGF5b3V0Lm1ha2VDb2x1bW5zRXF1YWxXaWR0aCA9IHRydWU7CisJCWJ0bkNvbnRhaW5lci5zZXRMYXlvdXQoZ3JpZExheW91dCk7CisgICAgICAgIC8vIHNldCBncmlkRGF0YSBmb3IgYnRuQ29udGFpbmVyIHdpdGhpbiBtYWluQ29udGFpbmVyCisJCUdyaWREYXRhIGdyaWREYXRhID0gbmV3IEdyaWREYXRhKCk7CisJCWdyaWREYXRhLmdyYWJFeGNlc3NIb3Jpem9udGFsU3BhY2UgPSBmYWxzZTsKKwkJZ3JpZERhdGEuaG9yaXpvbnRhbEFsaWdubWVudCA9IEdyaWREYXRhLkZJTEw7CisJCWdyaWREYXRhLnZlcnRpY2FsQWxpZ25tZW50ID0gR3JpZERhdGEuRklMTDsKKwkJZ3JpZERhdGEuZ3JhYkV4Y2Vzc1ZlcnRpY2FsU3BhY2UgPSB0cnVlOworCQlncmlkRGF0YS5oZWlnaHRIaW50ID0gU1RBTkRBUkRfSEVJR0hUICsgT0ZGU0VUK01BUkdJTjsKKwkJZ3JpZERhdGEubWluaW11bUhlaWdodCA9IFNUQU5EQVJEX0hFSUdIVCsgT0ZGU0VUK01BUkdJTjsKKwkJZ3JpZERhdGEud2lkdGhIaW50ID0gU1RBTkRBUkRfTEVOR1RIOworCQlncmlkRGF0YS5taW5pbXVtV2lkdGggPSBTVEFOREFSRF9MRU5HVEg7CisJCWJ0bkNvbnRhaW5lci5zZXRMYXlvdXREYXRhKGdyaWREYXRhKTsKKworCQkvLyBjcmVhdGUgdGhlIHNpbXVsYXRpb24gY29udHJvbCBidXR0b25zCisJCUJ1dHRvbiBydW4gPSBuZXcgQnV0dG9uKGJ0bkNvbnRhaW5lciwgU1dULlBVU0gpOworCQlCdXR0b24gcGF1c2UgPSBuZXcgQnV0dG9uKGJ0bkNvbnRhaW5lciwgU1dULlBVU0gpOworCQlCdXR0b24gcmVzZXQgPSBuZXcgQnV0dG9uKGJ0bkNvbnRhaW5lciwgU1dULlBVU0gpOworCQlCdXR0b24gc3RlcCA9IG5ldyBCdXR0b24oYnRuQ29udGFpbmVyLCBTV1QuUFVTSCk7CisJCUJ1dHRvbiBzdG9wID0gbmV3IEJ1dHRvbihidG5Db250YWluZXIsIFNXVC5QVVNIKTsKKworCQkvLyBzZXQgYWxpZ25tZW50IGFuZCBiYWNrZ3JvdW5kIGNvbG9yCisJCXJ1bi5zZXRCYWNrZ3JvdW5kKHBhcmVudC5nZXREaXNwbGF5KCkuZ2V0U3lzdGVtQ29sb3IoU1dULkNPTE9SX0dSQVkpKTsKKwkJcnVuLnNldFRvb2xUaXBUZXh0KE1lc3NhZ2VzLmdldFN0cmluZygiU0N0cmwuU3RhcnRTaW0iKSk7IC8vJE5PTi1OTFMtMSQKKwkJcnVuLnNldExheW91dERhdGEoZ2V0QnV0dG9uR3JpZERhdGEoKSk7CisKKwkJcGF1c2UKKwkJCQkuc2V0QmFja2dyb3VuZChwYXJlbnQuZ2V0RGlzcGxheSgpLmdldFN5c3RlbUNvbG9yKAorCQkJCQkJU1dULkNPTE9SX0dSQVkpKTsKKwkJcGF1c2Uuc2V0VG9vbFRpcFRleHQoTWVzc2FnZXMuZ2V0U3RyaW5nKCJTQ3RybC5QYXVzZVNpbSIpKTsgLy8kTk9OLU5MUy0xJAorCQlwYXVzZS5zZXRMYXlvdXREYXRhKGdldEJ1dHRvbkdyaWREYXRhKCkpOworCisJCXJlc2V0CisJCQkJLnNldEJhY2tncm91bmQocGFyZW50LmdldERpc3BsYXkoKS5nZXRTeXN0ZW1Db2xvcigKKwkJCQkJCVNXVC5DT0xPUl9HUkFZKSk7CisJCXJlc2V0LnNldFRvb2xUaXBUZXh0KE1lc3NhZ2VzLmdldFN0cmluZygiU0N0cmwuUmVzdG9yZVNpbSIpKTsgLy8kTk9OLU5MUy0xJAorCQlyZXNldC5zZXRMYXlvdXREYXRhKGdldEJ1dHRvbkdyaWREYXRhKCkpOworCisJCXN0ZXAuc2V0QmFja2dyb3VuZChwYXJlbnQuZ2V0RGlzcGxheSgpLmdldFN5c3RlbUNvbG9yKFNXVC5DT0xPUl9HUkFZKSk7CisJCXN0ZXAuc2V0VG9vbFRpcFRleHQoTWVzc2FnZXMuZ2V0U3RyaW5nKCJTQ3RybC5TdGVwU2ltIikpOyAvLyROT04tTkxTLTEkCisJCXN0ZXAuc2V0TGF5b3V0RGF0YShnZXRCdXR0b25HcmlkRGF0YSgpKTsKKworCQlzdG9wLnNldEJhY2tncm91bmQocGFyZW50LmdldERpc3BsYXkoKS5nZXRTeXN0ZW1Db2xvcihTV1QuQ09MT1JfR1JBWSkpOworCQlzdG9wLnNldFRvb2xUaXBUZXh0KE1lc3NhZ2VzLmdldFN0cmluZygiU0N0cmwuU3RvcFNpbSIpKTsgLy8kTk9OLU5MUy0xJAorCQlzdG9wLnNldExheW91dERhdGEoZ2V0QnV0dG9uR3JpZERhdGEoKSk7CisKKwkJcnVuLnNldEltYWdlKGltYWdlUmVnaXN0cnkuZ2V0KElTaGFyZWRJbWFnZXMuUlVOX0lDT04pKTsKKwkJcGF1c2Uuc2V0SW1hZ2UoaW1hZ2VSZWdpc3RyeS5nZXQoSVNoYXJlZEltYWdlcy5QQVVTRV9JQ09OKSk7CisJCXJlc2V0LnNldEltYWdlKGltYWdlUmVnaXN0cnkuZ2V0KElTaGFyZWRJbWFnZXMuUkVTRVRfSUNPTikpOworCQlzdGVwLnNldEltYWdlKGltYWdlUmVnaXN0cnkuZ2V0KElTaGFyZWRJbWFnZXMuU1RFUF9JQ09OKSk7CisJCXN0b3Auc2V0SW1hZ2UoaW1hZ2VSZWdpc3RyeS5nZXQoSVNoYXJlZEltYWdlcy5TVE9QX0lDT04pKTsKKyAgICAgICAgCisKKwkJLy8gc2V0IGV2ZW50IGxpc3RlbmVycyBmb3IgYnV0dG9ucworCQlydW4uYWRkTGlzdGVuZXIoU1dULlNlbGVjdGlvbiwgbmV3IExpc3RlbmVyKCkgeworCQkJcHVibGljIHZvaWQgaGFuZGxlRXZlbnQoRXZlbnQgZSkgeworCQkJCXN3aXRjaCAoZS50eXBlKSB7CisJCQkJY2FzZSBTV1QuU2VsZWN0aW9uOgorCQkJCQlydW4oKTsKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJfQorCQl9KTsKKwkJcGF1c2UuYWRkTGlzdGVuZXIoU1dULlNlbGVjdGlvbiwgbmV3IExpc3RlbmVyKCkgeworCQkJcHVibGljIHZvaWQgaGFuZGxlRXZlbnQoRXZlbnQgZSkgeworCQkJCXN3aXRjaCAoZS50eXBlKSB7CisJCQkJY2FzZSBTV1QuU2VsZWN0aW9uOgorCQkJCQlwYXVzZSgpOworCQkJCQlicmVhazsKKwkJCQl9CisJCQl9CisJCX0pOworCQlyZXNldC5hZGRMaXN0ZW5lcihTV1QuU2VsZWN0aW9uLCBuZXcgTGlzdGVuZXIoKSB7CisJCQlwdWJsaWMgdm9pZCBoYW5kbGVFdmVudChFdmVudCBlKSB7CisJCQkJc3dpdGNoIChlLnR5cGUpIHsKKwkJCQljYXNlIFNXVC5TZWxlY3Rpb246CisJCQkJCXJlc2V0KCk7CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCX0KKwkJfSk7CisJCXN0ZXAuYWRkTGlzdGVuZXIoU1dULlNlbGVjdGlvbiwgbmV3IExpc3RlbmVyKCkgeworCQkJcHVibGljIHZvaWQgaGFuZGxlRXZlbnQoRXZlbnQgZSkgeworCQkJCXN3aXRjaCAoZS50eXBlKSB7CisJCQkJY2FzZSBTV1QuU2VsZWN0aW9uOgorCQkJCQlzdGVwKCk7CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCX0KKwkJfSk7CisJCXN0b3AuYWRkTGlzdGVuZXIoU1dULlNlbGVjdGlvbiwgbmV3IExpc3RlbmVyKCkgeworCQkJcHVibGljIHZvaWQgaGFuZGxlRXZlbnQoRXZlbnQgZSkgeworCQkJCXN3aXRjaCAoZS50eXBlKSB7CisJCQkJY2FzZSBTV1QuU2VsZWN0aW9uOgorCQkJCQlzdG9wKCk7CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCX0KKwkJfSk7CisJCXJldHVybiBidG5Db250YWluZXI7CisJfQorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5XaWRnZXQjZGlzcG9zZSgpCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgZGlzcG9zZSgpIHsKKyAgICAgICAgCisJCS8vIE51bGxpZnkgYWxsIG91ciByZWZlcmVuY2VzLgorCQlpZiAoc2ltdWxhdGlvbiAhPSBudWxsKSB7CisJCQlzaW11bGF0aW9uLnJlbW92ZVNpbXVsYXRpb25MaXN0ZW5lcih0aGlzKTsKKwkJCXNpbXVsYXRpb24gPSBudWxsOworCQl9CisKKwkJCisJCS8vIEZvcmNlIGRpc3Bvc2FsIG9mIHRoZSBtYWluIHdpZGdldCBmb3IgdGhlIHNpbXVsYXRpb24gY29udHJvbC4KKwkJaWYgKG1haW5Db250YWluZXIgIT0gbnVsbCkgeworCQkJbWFpbkNvbnRhaW5lci5kaXNwb3NlKCk7CisJCX0KKworCX0gLy8gZGlzcG9zZQorCisJaW50IGxhc3RXb3JrQ29tcGxldGVkID0gLTE7CisJLyoqCisJICogVGhpcyBpcyB3aGVyZSB0aGUgc2ltdWxhdGlvbiBjb250cm9sIGhlYXJzIGFib3V0IGNoYW5nZXMgaW4gdGhlCisJICogc2ltdWxhdGlvbiBpdCBpcyBtYW5hZ2luZy4gSXQgaXMgcmVhbGx5IG9ubHkgaW50ZXJlc3RlZCBpbiBhbGwgZXZlbnRzCisJICogZ2VuZXJhdGVkIGJ5IHRoZSBhY3RpdmUgc2ltdWxhdGlvbgorCSAqIAorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5qb2JzLnNpbXVsYXRpb24uSVNpbXVsYXRpb25MaXN0ZW5lciNzaW11bGF0aW9uQ2hhbmdlZChvcmcuZWNsaXBzZS5zdGVtLmpvYnMuc2ltdWxhdGlvbi5TaW11bGF0aW9uRXZlbnQpCisJICovCisJcHVibGljIHZvaWQgc2ltdWxhdGlvbkNoYW5nZWQoU2ltdWxhdGlvbkV2ZW50IGV2ZW50KSB7CisKKwkJLy8gR2V0IHRoZSBjdXJyZW50IHNpbXVsYXRpb24gc3RhdGUKKwkJZmluYWwgU2ltdWxhdGlvblN0YXRlIHNpbXVsYXRpb25TdGF0ZSA9IGV2ZW50LmdldFNpbXVsYXRpb25TdGF0ZSgpOworCisJCXN3aXRjaCAoc2ltdWxhdGlvblN0YXRlKSB7CisJCWNhc2UgU1RPUFBFRDoKKwkJCS8vIFdlJ3JlIGRvbmUsIHdlJ2xsIGdldCBhbiBldmVudCBmcm9tIHRoZSBTaW11bGF0aW9uTWFuYWdlciB0ZWxsaW5nCisJCQkvLyB1cyB0aGF0IHRoZSBTaW11bGF0aW9uIGlzIG5vIGxvbmdlciBhcm91bmQuCisJCQlyZXR1cm47CisKKwkJY2FzZSBDT01QTEVURURfQ1lDTEU6CisJCQlpZihzaW11bGF0aW9uICE9IG51bGwpIHsKKwkJCQlTY2VuYXJpbyBzY2VuYXJpbyA9IHNpbXVsYXRpb24uZ2V0U2NlbmFyaW8oKTsKKwkJCQkvLyBJZiBzZXF1ZW5jZXIgaXMgbnVsbCwgdGhlbiB3ZSBoYXZlIGRpc3Bvc2VkIHRoZSB3aWRnZXQuCisJCQkJaWYgKHNjZW5hcmlvID09IG51bGwpIHsKKwkJCQkJLy8gV2lkZ2V0IGRpc3Bvc2VkLCBkbyBub3RoaW5nLgorCQkJCQlyZXR1cm47CisJCQkJfQorCQkJCVNlcXVlbmNlciBzZXF1ZW5jZXIgPSBzY2VuYXJpby5nZXRTZXF1ZW5jZXIoKTsKKwkJCQlpZiAoc2VxdWVuY2VyID09IG51bGwpIHsKKwkJCQkJLy8gV2lkZ2V0IGRpc3Bvc2VkLCBkbyBub3RoaW5nLgorCQkJCQlyZXR1cm47CisJCQkJfQorCQkJCQorCQkJCWZpbmFsIGludCB3b3JrQ29tcGxldGUgPSAoaW50KSBzZXF1ZW5jZXIuZ2V0V29ya0NvbXBsZXRlKCk7CisJCQkJaWYgKHdvcmtDb21wbGV0ZSA8IElFeGVjdXRhYmxlLlRPVEFMX1dPUkspIHsKKwkJCQkJLy8gSGFzIHRoZSB3aWRnZXQgYmVlbiBkaXNwb3NlZCA/CisJCQkJCWlmIChwYi5pc0Rpc3Bvc2VkKCkgPT0gdHJ1ZSkgeworCQkJCQkJLy8gWWVzLCBkbyBub3RoaW5nLgorCQkJCQkJcmV0dXJuOworCQkJCQl9CisJCQkJCWlmKGxhc3RXb3JrQ29tcGxldGVkID09IHdvcmtDb21wbGV0ZSkgYnJlYWs7CisJCQkJCWxhc3RXb3JrQ29tcGxldGVkID0gd29ya0NvbXBsZXRlOworCQkJCQlwYi5zZXRTZWxlY3Rpb24od29ya0NvbXBsZXRlKTsKKwkJCQkJdXBkYXRlUHJvZ3Jlc3NMYWJlbCh3b3JrQ29tcGxldGUsIHNpbXVsYXRpb25TdGF0ZSk7CisJCQkJfQorCQkJfQorCQkJYnJlYWs7CisJCWNhc2UgUlVOTklORzoKKwkJCWJyZWFrOwkKKwkJY2FzZSBDT01QTEVURURfU0VRVUVOQ0U6CisJCWNhc2UgUEFVU0VEOgorCQljYXNlIFJFU0VUOgorCQkJLy8gTm90aGluZworCQkJYnJlYWs7CisKKwkJfSAvLyBzd2l0Y2ggc2ltdWxhdGlvbiBzdGF0ZQorCQl1cGRhdGVTdGF0ZUxhYmVsKHNpbXVsYXRpb25TdGF0ZSk7CisJCXVwZGF0ZVRpbWVMYWJlbChzaW11bGF0aW9uU3RhdGUpOworCX0gLy8gc2ltdWxhdGlvbkNoYW5nZWQKKworCS8qKgorCSAqIFJlc2V0IHRoZSB0aW1lIGxhYmVsCisJICogCisJICovCisJcHJvdGVjdGVkIHZvaWQgcmVzZXRUaW1lTGFiZWwoKSB7CisJCWZpbmFsIGludCBaRVJPID0gMDsKKworCQlzaW11bGF0aW9uVGltZVRleHQKKwkJCQkuc2V0VGV4dCgiWyAiICsgWkVSTyArICIgXSAiICsgTWVzc2FnZXMuZ2V0U3RyaW5nKCJTQ3RybC5UaW1lIikgKyAiIDogIiArIFpFUk8pOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQgLy8kTk9OLU5MUy0zJCAgLy8kTk9OLU5MUy00JAorCQkKKwkJc2ltdWxhdGlvblRpbWVUZXh0LnJlZHJhdygpOworCX0KKworCS8qKgorCSAqIFJ1biB0aGUgc2ltdWxhdGlvbgorCSAqIAorCSAqLworCXB1YmxpYyB2b2lkIHJ1bigpIHsKKwkJc2ltdWxhdGlvbi5ydW4oKTsKKwl9CisKKwkvKioKKwkgKiBQYXVzZSB0aGUgc2ltdWxhdGlvbgorCSAqIAorCSAqLworCXB1YmxpYyB2b2lkIHBhdXNlKCkgeworCQlzaW11bGF0aW9uLnBhdXNlKCk7CisJfQorCisJLyoqCisJICogUmVzZXQgdGhlIHNpbXVsYXRpb24gYW5kIHRoZSBjb250cm9scy4KKwkgKiAKKwkgKi8KKwlwdWJsaWMgdm9pZCByZXNldCgpIHsKKwkJLy8gUmVzZXQgdGhlIHNpbXVsYXRpb24KKwkJc2ltdWxhdGlvbi5yZXNldCgpOworCisJCS8vIFR1cm4gZmxhZyBmb3IgcmVzZXRzIE9OIDoKKwkJcmVzZXQgPSB0cnVlOworCQkvLyBOb3cgcmVzZXQgdGhlIHdpZGdldCA6CisJCXJlc2V0VGltZUxhYmVsKCk7CisJfQorCisJLyoqCisJICogU3RlcCB0aGUgc2ltdWxhdGlvbgorCSAqIAorCSAqLworCXB1YmxpYyB2b2lkIHN0ZXAoKSB7CisJCXNpbXVsYXRpb24uc3RlcCgpOworCX0KKworCS8qKgorCSAqIFN0b3AgdGhlIHNpbXVsYXRpb24KKwkgKi8KKwlwdWJsaWMgdm9pZCBzdG9wKCkgeworCQlzaW11bGF0aW9uLnN0b3AoKTsKKwl9CisKK30gLy8gU2ltdWxhdGlvbkNvbnRyb2wKKwpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3ZpZXdzL1NpbXVsYXRpb25Db250cm9sVmlldy5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3ZpZXdzL1NpbXVsYXRpb25Db250cm9sVmlldy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRmOGU2NzEKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvdmlld3MvU2ltdWxhdGlvbkNvbnRyb2xWaWV3LmphdmEKQEAgLTAsMCArMSw0MzkgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS51aS52aWV3czsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OworaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5BY3Rpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklNZW51TWFuYWdlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSVRvb2xCYXJNYW5hZ2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnJlc291cmNlLkltYWdlRGVzY3JpcHRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmpvYnMuc2ltdWxhdGlvbi5JU2ltdWxhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmpvYnMuc2ltdWxhdGlvbi5JU2ltdWxhdGlvbk1hbmFnZXJMaXN0ZW5lcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmpvYnMuc2ltdWxhdGlvbi5TaW11bGF0aW9uTWFuYWdlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmpvYnMuc2ltdWxhdGlvbi5TaW11bGF0aW9uTWFuYWdlckV2ZW50OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udWkuQWN0aXZhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udWkuSVNoYXJlZEltYWdlczsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuU1dUOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5jdXN0b20uU2Nyb2xsZWRDb21wb3NpdGU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5HcmlkRGF0YTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QubGF5b3V0LkdyaWRMYXlvdXQ7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbnRyb2w7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuSUFjdGlvbkJhcnM7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkucGFydC5WaWV3UGFydDsKKworLyoqCisgKiBUaGlzIGNsYXNzIGltcGxlbWVudHMgYW4gZWNsaXBzZSB2aWV3IHRoYXQgZGlzcGxheXMgdGhlIHN0YXRlIG9mIHRoZQorICogY3VycmVudGx5IGFjdGl2ZSBzaW11bGF0aW9ucyBhbmQgR1VJIGNvbnRyb2xzIHRoYXQgYWxsb3cgdGhlIHNpbXVsYXRpb25zIHRvCisgKiBiZSBtYW5hZ2VkLgorICogCisgKi8KK3B1YmxpYyBjbGFzcyBTaW11bGF0aW9uQ29udHJvbFZpZXcgZXh0ZW5kcyBWaWV3UGFydCBpbXBsZW1lbnRzCisJCUlTaW11bGF0aW9uTWFuYWdlckxpc3RlbmVyIHsKKworCS8qKgorCSAqIE91ciByZWZlcmVuY2UgdG8gdGhlIHNpbXVsYXRpb24gbWFuYWdlcgorCSAqLworCXByaXZhdGUgU2ltdWxhdGlvbk1hbmFnZXIgc2ltdWxhdGlvbk1hbmFnZXIgPSBudWxsOworCisJLyoqCisJICogVGhlIGNvbGxlY3Rpb24gb2Ygc2ltdWxhdGlvbiBjb250cm9scworCSAqLworCXByaXZhdGUgTGlzdDxTaW11bGF0aW9uQ29udHJvbD4gY29udHJvbExpc3QgPSBuZXcgQXJyYXlMaXN0PFNpbXVsYXRpb25Db250cm9sPigpOworCisJLyoqCisJICogVGhlIGlkZW50aWZpZXIgb2YgdGhlIFNpbXVsYXRpb24gQ29udHJvbCBWaWV3CisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgSURfU0lNVUxBVElPTl9DT05UUk9MX1ZJRVcgPSAib3JnLmVjbGlwc2Uuc3RlbS51aS52aWV3cy5zaW11bGF0aW9uY29udHJvbHZpZXciOyAvLyROT04tTkxTLTEkCisKKwkvLyBUaGUgc2Nyb2xsZWQgY29tcG9zaXRlIC0tIGFsbG93cyBjb250cm9sIGNvbXBvc2l0ZSB0byBzY3JvbGwKKwlwcml2YXRlIFNjcm9sbGVkQ29tcG9zaXRlIHNjcm9sbENvbXBvc2l0ZSA9IG51bGw7CisKKwkvLyBUaGUgY29udHJvbCBjb21wb3NpdGUgLS0gaG9sZHMgdGhlIGNvbnRyb2xzCisJcHJpdmF0ZSBDb21wb3NpdGUgY29udHJvbENvbXBvc2l0ZSA9IG51bGw7CisKKwkvLyBBY3Rpb25zIGZvciBtYXN0ZXIgc2ltdWxhdGlvbiBjb250cm9sCisJQWN0aW9uIHJ1bkFjdGlvbiwgcmVzZXRBY3Rpb24sIHBhdXNlQWN0aW9uLCBzdGVwQWN0aW9uLCBzdG9wQWN0aW9uOworCisJLy8gVXNlZCBieSBhIHBhcnQgdG8gYWNjZXNzIGl0cyBtZW51LCB0b29sIGJhciwgYW5kIHN0YXR1cyBsaW5lIG1hbmFnZXJzLgorCUlBY3Rpb25CYXJzIGFjdGlvbkJhcnMgPSBudWxsOworCisJLy8gTWVudSBtYW5hZ2VyIGZvciB0aGlzIHZpZXcKKwlJTWVudU1hbmFnZXIgZHJvcERvd25NZW51ID0gbnVsbDsKKworCS8vIFRvb2wgYmFyIG1hbmFnZXIgZm9yIHRoaXMgdmlldworCUlUb29sQmFyTWFuYWdlciB0b29sQmFyID0gbnVsbDsKKworCS8vIFNvbWUgY29uc3RhbnRzIHdlIG5lZWQgdG8gc2V0IHByZWZlcnJlZCBzaXplcyBvZiBTV1QgY29udHJvbHMKKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgU0NST0xMX01JTl9MRU5HVEggPSAxMDA7CisKKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgU0NST0xMX01JTl9IRUlHVEggPSAxNjAwOworCisJLyoqCisJICogQ29uc3RydWN0b3IKKwkgKiAKKwkgKi8KKwlwdWJsaWMgU2ltdWxhdGlvbkNvbnRyb2xWaWV3KCkgeworCQlzdXBlcigpOworCQkvLyBTZXQgb3VyIHJlZmVyZW5jZSB0byB0aGUgc2ltdWxhdGlvbiBtYW5hZ2VyCisJCXNpbXVsYXRpb25NYW5hZ2VyID0gU2ltdWxhdGlvbk1hbmFnZXIuZ2V0TWFuYWdlcigpOworCQlzaW11bGF0aW9uTWFuYWdlci5hZGRTaW11bGF0aW9uTWFuYWdlckxpc3RlbmVyKHRoaXMpOworCX0KKworCS8qKgorCSAqIFRoaXMgaXMgdGhlIG1ldGhvZCB3aGVyZSB0aGUgdmlldyBpcyBwdXQgdG9nZXRoZXIgcGllY2UgYnkgcGllY2UKKwkgKiAKKwkgKiBAcGFyYW0gcGFyZW50CisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgY3JlYXRlUGFydENvbnRyb2woQ29tcG9zaXRlIHBhcmVudCkgeworCisJCWZpbmFsIGludCBDT0xVTU5TID0gMTsKKworCQlzY3JvbGxDb21wb3NpdGUgPSBuZXcgU2Nyb2xsZWRDb21wb3NpdGUocGFyZW50LCBTV1QuVl9TQ1JPTEwKKwkJCQl8IFNXVC5CT1JERVIpOworCQlzY3JvbGxDb21wb3NpdGUuc2V0RXhwYW5kSG9yaXpvbnRhbCh0cnVlKTsKKwkJc2Nyb2xsQ29tcG9zaXRlLnNldEV4cGFuZFZlcnRpY2FsKHRydWUpOworCQlzY3JvbGxDb21wb3NpdGUuc2V0TWluU2l6ZShTQ1JPTExfTUlOX0xFTkdUSCwgU0NST0xMX01JTl9IRUlHVEgpOworCQlzY3JvbGxDb21wb3NpdGUuc2V0TGF5b3V0KG5ldyBHcmlkTGF5b3V0KCkpOworCQljb250cm9sQ29tcG9zaXRlID0gbmV3IENvbXBvc2l0ZShzY3JvbGxDb21wb3NpdGUsIFNXVC5OT05FKTsKKwkJc2Nyb2xsQ29tcG9zaXRlLnNldENvbnRlbnQoY29udHJvbENvbXBvc2l0ZSk7CisJCS8vIHNldHVwIHRoZSBsYXlvdXQKKwkJR3JpZERhdGEgZGF0YSA9IG5ldyBHcmlkRGF0YShHcmlkRGF0YS5GSUxMX0JPVEgpOworCQljb250cm9sQ29tcG9zaXRlLnNldExheW91dERhdGEoZGF0YSk7CisJCUdyaWRMYXlvdXQgbGF5b3V0ID0gbmV3IEdyaWRMYXlvdXQoKTsKKwkJbGF5b3V0Lm51bUNvbHVtbnMgPSBDT0xVTU5TOworCQlsYXlvdXQubWFyZ2luSGVpZ2h0ID0gMDsKKwkJbGF5b3V0Lm1hcmdpbldpZHRoID0gMDsKKwkJY29udHJvbENvbXBvc2l0ZS5zZXRMYXlvdXQobGF5b3V0KTsKKwkJCisKKwkJLy8gQ3JlYXRlIHRoZSBhY3Rpb25zIGZvciBtYXN0ZXIgc2ltdWxhdGlvbiBjb250cm9sCisJCXJ1bkFjdGlvbiA9IG5ldyBBY3Rpb24oCisJCQkJTWVzc2FnZXMuZ2V0U3RyaW5nKCJTQ1ZpZXcuUnVuIiksIEltYWdlRGVzY3JpcHRvci5jcmVhdGVGcm9tSW1hZ2UoQWN0aXZhdG9yIC8vJE5PTi1OTFMtMSQKKwkJCQkJCQkJLmdldERlZmF1bHQoKS5nZXRJbWFnZVJlZ2lzdHJ5KCkuZ2V0KAorCQkJCQkJCQkJCUlTaGFyZWRJbWFnZXMuUlVOX0lDT04pKSkgeworCQkJcHVibGljIHZvaWQgcnVuKCkgeworCQkJCW1hc3RlclJ1bkFjdGlvbigpOworCQkJfQorCQl9OworCisJCXBhdXNlQWN0aW9uID0gbmV3IEFjdGlvbigKKwkJCQlNZXNzYWdlcy5nZXRTdHJpbmcoIlNDVmlldy5QYXVzZSIpLCBJbWFnZURlc2NyaXB0b3IgLy8kTk9OLU5MUy0xJAorCQkJCQkJLmNyZWF0ZUZyb21JbWFnZShBY3RpdmF0b3IuZ2V0RGVmYXVsdCgpCisJCQkJCQkJCS5nZXRJbWFnZVJlZ2lzdHJ5KCkuZ2V0KAorCQkJCQkJCQkJCUlTaGFyZWRJbWFnZXMuUEFVU0VfSUNPTikpKSB7CisJCQlwdWJsaWMgdm9pZCBydW4oKSB7CisJCQkJbWFzdGVyUGF1c2VBY3Rpb24oKTsKKwkJCX0KKwkJfTsKKworCQlyZXNldEFjdGlvbiA9IG5ldyBBY3Rpb24oCisJCQkJTWVzc2FnZXMuZ2V0U3RyaW5nKCJTQ1ZpZXcuUmVzZXQiKSwgSW1hZ2VEZXNjcmlwdG9yIC8vJE5PTi1OTFMtMSQKKwkJCQkJCS5jcmVhdGVGcm9tSW1hZ2UoQWN0aXZhdG9yLmdldERlZmF1bHQoKQorCQkJCQkJCQkuZ2V0SW1hZ2VSZWdpc3RyeSgpLmdldCgKKwkJCQkJCQkJCQlJU2hhcmVkSW1hZ2VzLlJFU0VUX0lDT04pKSkgeworCQkJcHVibGljIHZvaWQgcnVuKCkgeworCQkJCW1hc3RlclJlc2V0QWN0aW9uKCk7CisJCQl9CisJCX07CisKKwkJc3RlcEFjdGlvbiA9IG5ldyBBY3Rpb24oCisJCQkJTWVzc2FnZXMuZ2V0U3RyaW5nKCJTQ1ZpZXcuU3RlcCIpLCBJbWFnZURlc2NyaXB0b3IgLy8kTk9OLU5MUy0xJAorCQkJCQkJLmNyZWF0ZUZyb21JbWFnZShBY3RpdmF0b3IuZ2V0RGVmYXVsdCgpCisJCQkJCQkJCS5nZXRJbWFnZVJlZ2lzdHJ5KCkKKwkJCQkJCQkJLmdldChJU2hhcmVkSW1hZ2VzLlNURVBfSUNPTikpKSB7CisJCQlwdWJsaWMgdm9pZCBydW4oKSB7CisJCQkJbWFzdGVyU3RlcEFjdGlvbigpOworCQkJfQorCQl9OworCisJCXN0b3BBY3Rpb24gPSBuZXcgQWN0aW9uKAorCQkJCU1lc3NhZ2VzLmdldFN0cmluZygiU0NWaWV3LlN0b3AiKSwgSW1hZ2VEZXNjcmlwdG9yIC8vJE5PTi1OTFMtMSQKKwkJCQkJCS5jcmVhdGVGcm9tSW1hZ2UoQWN0aXZhdG9yLmdldERlZmF1bHQoKQorCQkJCQkJCQkuZ2V0SW1hZ2VSZWdpc3RyeSgpCisJCQkJCQkJCS5nZXQoSVNoYXJlZEltYWdlcy5TVE9QX0lDT04pKSkgeworCQkJcHVibGljIHZvaWQgcnVuKCkgeworCQkJCW1hc3RlclN0b3BBY3Rpb24oKTsKKwkJCX0KKwkJfTsKKworCQkvLyBTZXQgZGlzYWJsZWQgaWNvbnMgZm9yIG91ciBtYXN0ZXIgY29udHJvbAorCisJCXJ1bkFjdGlvbi5zZXREaXNhYmxlZEltYWdlRGVzY3JpcHRvcihJbWFnZURlc2NyaXB0b3IKKwkJCQkuY3JlYXRlRnJvbUltYWdlKEFjdGl2YXRvci5nZXREZWZhdWx0KCkuZ2V0SW1hZ2VSZWdpc3RyeSgpLmdldCgKKwkJCQkJCUlTaGFyZWRJbWFnZXMuRElTQUJMRURfUlVOX0lDT04pKSk7CisKKwkJcGF1c2VBY3Rpb24uc2V0RGlzYWJsZWRJbWFnZURlc2NyaXB0b3IoSW1hZ2VEZXNjcmlwdG9yCisJCQkJLmNyZWF0ZUZyb21JbWFnZShBY3RpdmF0b3IuZ2V0RGVmYXVsdCgpLmdldEltYWdlUmVnaXN0cnkoKS5nZXQoCisJCQkJCQlJU2hhcmVkSW1hZ2VzLkRJU0FCTEVEX1BBVVNFX0lDT04pKSk7CisKKwkJcmVzZXRBY3Rpb24uc2V0RGlzYWJsZWRJbWFnZURlc2NyaXB0b3IoSW1hZ2VEZXNjcmlwdG9yCisJCQkJLmNyZWF0ZUZyb21JbWFnZShBY3RpdmF0b3IuZ2V0RGVmYXVsdCgpLmdldEltYWdlUmVnaXN0cnkoKS5nZXQoCisJCQkJCQlJU2hhcmVkSW1hZ2VzLkRJU0FCTEVEX1JFU0VUX0lDT04pKSk7CisKKwkJc3RlcEFjdGlvbi5zZXREaXNhYmxlZEltYWdlRGVzY3JpcHRvcihJbWFnZURlc2NyaXB0b3IKKwkJCQkuY3JlYXRlRnJvbUltYWdlKEFjdGl2YXRvci5nZXREZWZhdWx0KCkuZ2V0SW1hZ2VSZWdpc3RyeSgpLmdldCgKKwkJCQkJCUlTaGFyZWRJbWFnZXMuRElTQUJMRURfU1RFUF9JQ09OKSkpOworCisJCXN0b3BBY3Rpb24uc2V0RGlzYWJsZWRJbWFnZURlc2NyaXB0b3IoSW1hZ2VEZXNjcmlwdG9yCisJCQkJLmNyZWF0ZUZyb21JbWFnZShBY3RpdmF0b3IuZ2V0RGVmYXVsdCgpLmdldEltYWdlUmVnaXN0cnkoKS5nZXQoCisJCQkJCQlJU2hhcmVkSW1hZ2VzLkRJU0FCTEVEX1NUT1BfSUNPTikpKTsKKworCQkvLyBJbml0aWFsIHN0YXRlIGlmIG1hc3RlciBjb250cm9sIHNob3VsZCBiZSBESVNBQkxFRAorCQlydW5BY3Rpb24uc2V0RW5hYmxlZChmYWxzZSk7CisJCXBhdXNlQWN0aW9uLnNldEVuYWJsZWQoZmFsc2UpOworCQlyZXNldEFjdGlvbi5zZXRFbmFibGVkKGZhbHNlKTsKKwkJc3RlcEFjdGlvbi5zZXRFbmFibGVkKGZhbHNlKTsKKwkJc3RvcEFjdGlvbi5zZXRFbmFibGVkKGZhbHNlKTsKKworCQkvLyBnZXQgdGhlIGFjdGlvbiBtYW5hZ2VyIGZvciB0aGlzIHZpZXcKKwkJYWN0aW9uQmFycyA9IGdldFZpZXdTaXRlKCkuZ2V0QWN0aW9uQmFycygpOworCisJCS8vIGdldCB0aGUgZHJvcCBkb3duIG1lbnUgbWFuYWdlciBmb3IgdGhpcyB2aWV3CisJCWRyb3BEb3duTWVudSA9IGFjdGlvbkJhcnMuZ2V0TWVudU1hbmFnZXIoKTsKKworCQkvLyBnZXQgdGhlIHRvb2wgYmFyIG1hbmFnZXIgZm9yIHRoaXMgdmlldworCQl0b29sQmFyID0gYWN0aW9uQmFycy5nZXRUb29sQmFyTWFuYWdlcigpOworCisJCS8vIEFkZCBhbGwgYWN0aW9ucyB0byBkcm9wIGRvd24gbWVudSBvbiB0aGUgcmlnaHQgY29ybmVyIG9mIHRoaXMgdmlldworCQlkcm9wRG93bk1lbnUuYWRkKHJ1bkFjdGlvbik7CisJCWRyb3BEb3duTWVudS5hZGQocGF1c2VBY3Rpb24pOworCQlkcm9wRG93bk1lbnUuYWRkKHJlc2V0QWN0aW9uKTsKKwkJZHJvcERvd25NZW51LmFkZChzdGVwQWN0aW9uKTsKKwkJZHJvcERvd25NZW51LmFkZChzdG9wQWN0aW9uKTsKKworCQkvLyBBZGQgYWxsIGFjdGlvbnMgdG8gdGhlIHRvb2wgYmFyIG9mIHRoaXMgdmlldworCQl0b29sQmFyLmFkZChydW5BY3Rpb24pOworCQl0b29sQmFyLmFkZChwYXVzZUFjdGlvbik7CisJCXRvb2xCYXIuYWRkKHJlc2V0QWN0aW9uKTsKKwkJdG9vbEJhci5hZGQoc3RlcEFjdGlvbik7CisJCXRvb2xCYXIuYWRkKHN0b3BBY3Rpb24pOworCisJCS8vIGlmIGFueSBhY3RpdmUgU2ltdWxhdGlvbnMsIHVzZSB0aGVtCisJCUxpc3Q8SVNpbXVsYXRpb24+bGlzdCA9IHNpbXVsYXRpb25NYW5hZ2VyLmdldEFjdGl2ZVNpbXVsYXRpb25zKCk7CisJCQorCQlmb3IgKElTaW11bGF0aW9uIHNpbTogbGlzdCkgeworCQkJYWRkU2ltdWxhdGlvbihzaW0pOwkJCisJCX0KKwl9CisKKwkvKioKKwkgKiBFbmFibGUgdXNlIG9mIG1hc3RlciBjb250cm9sIGZvciBhY3RpdmUgc2ltdWxhdGlvbnMKKwkgKiAKKwkgKiBAcGFyYW0gZW5hYmxlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIGVuYWJsZU1hc3RlckNvbnRyb2woYm9vbGVhbiBlbmFibGVkKSB7CisJCS8vIEluaXRpYWwgc3RhdGUgaWYgbWFzdGVyIGNvbnRyb2wgc2hvdWxkIGJlIERJU0FCTEVECisJCXJ1bkFjdGlvbi5zZXRFbmFibGVkKGVuYWJsZWQpOworCQlwYXVzZUFjdGlvbi5zZXRFbmFibGVkKGVuYWJsZWQpOworCQlyZXNldEFjdGlvbi5zZXRFbmFibGVkKGVuYWJsZWQpOworCQlzdGVwQWN0aW9uLnNldEVuYWJsZWQoZW5hYmxlZCk7CisJCXN0b3BBY3Rpb24uc2V0RW5hYmxlZChlbmFibGVkKTsKKwl9CisKKwkvLyBSdW4gYWxsIHNpbXVsYXRpb25zIC0tIHNldCBzdGF0ZSBvZiBhbGwgc2ltdWxhdGlvbnMgdG8gUlVOTklORworCXByb3RlY3RlZCB2b2lkIG1hc3RlclJ1bkFjdGlvbigpIHsKKwkJSXRlcmF0b3IgaXRlciA9IGNvbnRyb2xMaXN0Lml0ZXJhdG9yKCk7CisJCXdoaWxlIChpdGVyLmhhc05leHQoKSkgeworCQkJU2ltdWxhdGlvbkNvbnRyb2wgc2ltdWxhdGlvbkNvbnRyb2wgPSAoU2ltdWxhdGlvbkNvbnRyb2wpIGl0ZXIKKwkJCQkJLm5leHQoKTsKKwkJCXNpbXVsYXRpb25Db250cm9sLnJ1bigpOworCQl9CisJfQorCisJLy8gUGF1c2UgYWxsIHNpbXVsYXRpb25zIC0tIHNldCBzdGF0ZSBvZiBhbGwgc2ltdWxhdGlvbnMgdG8gUEFVU0VECisJcHJvdGVjdGVkIHZvaWQgbWFzdGVyUGF1c2VBY3Rpb24oKSB7CisJCUl0ZXJhdG9yIGl0ZXIgPSBjb250cm9sTGlzdC5pdGVyYXRvcigpOworCQl3aGlsZSAoaXRlci5oYXNOZXh0KCkpIHsKKwkJCVNpbXVsYXRpb25Db250cm9sIHNpbXVsYXRpb25Db250cm9sID0gKFNpbXVsYXRpb25Db250cm9sKSBpdGVyCisJCQkJCS5uZXh0KCk7CisJCQlzaW11bGF0aW9uQ29udHJvbC5wYXVzZSgpOworCQl9CisJfQorCisJLy8gUmVzZXQgYWxsIHNpbXVsYXRpb25zIC0tIHNldCBzdGF0ZSBvZiBhbGwgc2ltdWxhdGlvbnMgdG8gUkVTRVQKKwlwcm90ZWN0ZWQgdm9pZCBtYXN0ZXJSZXNldEFjdGlvbigpIHsKKwkJSXRlcmF0b3IgaXRlciA9IGNvbnRyb2xMaXN0Lml0ZXJhdG9yKCk7CisJCXdoaWxlIChpdGVyLmhhc05leHQoKSkgeworCQkJU2ltdWxhdGlvbkNvbnRyb2wgc2ltdWxhdGlvbkNvbnRyb2wgPSAoU2ltdWxhdGlvbkNvbnRyb2wpIGl0ZXIKKwkJCQkJLm5leHQoKTsKKwkJCXNpbXVsYXRpb25Db250cm9sLnJlc2V0KCk7CisJCX0KKwl9CisKKwkvLyBTdGVwIGFsbCBzaW11bGF0aW9ucyAtLSBzdGVwIGluIGFsbCBzaW11bGF0aW9ucworCXByb3RlY3RlZCB2b2lkIG1hc3RlclN0ZXBBY3Rpb24oKSB7CisJCUl0ZXJhdG9yIGl0ZXIgPSBjb250cm9sTGlzdC5pdGVyYXRvcigpOworCQl3aGlsZSAoaXRlci5oYXNOZXh0KCkpIHsKKwkJCVNpbXVsYXRpb25Db250cm9sIHNpbXVsYXRpb25Db250cm9sID0gKFNpbXVsYXRpb25Db250cm9sKSBpdGVyCisJCQkJCS5uZXh0KCk7CisJCQlzaW11bGF0aW9uQ29udHJvbC5zdGVwKCk7CisJCX0KKwl9CisKKwkvLyBTdG9wIGFsbCBzaW11bGF0aW9ucworCXByb3RlY3RlZCB2b2lkIG1hc3RlclN0b3BBY3Rpb24oKSB7CisJCUl0ZXJhdG9yIGl0ZXIgPSBjb250cm9sTGlzdC5pdGVyYXRvcigpOworCQl3aGlsZSAoaXRlci5oYXNOZXh0KCkpIHsKKwkJCVNpbXVsYXRpb25Db250cm9sIHNpbXVsYXRpb25Db250cm9sID0gKFNpbXVsYXRpb25Db250cm9sKSBpdGVyCisJCQkJCS5uZXh0KCk7CisJCQlzaW11bGF0aW9uQ29udHJvbC5zdG9wKCk7CisJCX0KKwl9CisKKwkvKioKKwkgKiAKKwkgKiBAcmV0dXJuIHRoZSBsaXN0IG9mIHNpbXVsYXRpb24gY29udHJvbHMKKwkgKi8KKwlwdWJsaWMgTGlzdDxTaW11bGF0aW9uQ29udHJvbD4gZ2V0U2ltdWxhdGlvbkNvbnRyb2xMaXN0KCkgeworCQlyZXR1cm4gY29udHJvbExpc3Q7CisJfQorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS51aS5wYXJ0LldvcmtiZW5jaFBhcnQjc2V0Rm9jdXMoKQorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIHNldEZvY3VzKCkgeworCQkvLyBOb3RoaW5nCisJfQorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS51aS5wYXJ0LldvcmtiZW5jaFBhcnQjZGlzcG9zZSgpCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgZGlzcG9zZSgpIHsKKworCQkvLyBBcmUgd2UgbGlzdGVuaW5nIHRvIHRoZSBzaW11bGF0aW9uIG1hbmFnZXI/CisJCWlmIChzaW11bGF0aW9uTWFuYWdlciAhPSBudWxsKSB7CisJCQkvLyBZZXMKKwkJCS8vIE5vdCBhbnkgbW9yZQorCQkJc2ltdWxhdGlvbk1hbmFnZXIucmVtb3ZlTGlzdGVuZXIodGhpcyk7CisJCX0KKworCQlpZiAoY29udHJvbExpc3QuaXNFbXB0eSgpID09IGZhbHNlKSB7CisJCQlJdGVyYXRvciBpdGVyID0gY29udHJvbExpc3QubGlzdEl0ZXJhdG9yKCk7CisJCQl3aGlsZSAoaXRlci5oYXNOZXh0KCkpIHsKKwkJCQlTaW11bGF0aW9uQ29udHJvbCBzY3RybCA9IChTaW11bGF0aW9uQ29udHJvbClpdGVyLm5leHQoKTsKKwkJCQlzY3RybC5kaXNwb3NlKCk7CisJCQkJaXRlci5yZW1vdmUoKTsKKwkJCX0KKwkJfQorCisJfSAvLyBkaXNwb3NlCisKKwkvKioKKwkgKiBBIHNpbXVsYXRpb24gaGFzIGJlZW4gc3RhcnRlZCBvciBzdG9wcGVkLgorCSAqIFdlIGhhdmUgcmVnaXN0ZXJlZCBmb3IgU2ltdWxhdGlvbk1hbmFnZXIuYWRkTGlzdGVuZXIoKSBhbmQgCisJICogc28gd2UgYXJlIGluZm9ybWVkIHdoZW4gYSBzaW11bGF0aW9uIGlzIHN0YXJ0ZWQgYW5kIHdoZW4KKwkgKiBvbmUgaXMgc3RvcHBlZC4gCisJICogCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmpvYnMuc2ltdWxhdGlvbi5JU2ltdWxhdGlvbk1hbmFnZXJMaXN0ZW5lciNzaW11bGF0aW9uc0NoYW5nZWQob3JnLmVjbGlwc2Uuc3RlbS5qb2JzLnNpbXVsYXRpb24uU2ltdWxhdGlvbk1hbmFnZXJFdmVudCkKKwkgKi8KKwlwdWJsaWMgdm9pZCBzaW11bGF0aW9uc0NoYW5nZWQoU2ltdWxhdGlvbk1hbmFnZXJFdmVudCBldmVudCkgeworCisJCUlTaW11bGF0aW9uW10gc2ltdWxhdGlvbnMgPSBudWxsOworCisJCS8vIGFkZCBhIHNpbXVsYXRpb24gY29udHJvbCBmb3IgZWFjaCBuZXcgc2ltdWxhdGlvbi4uLgorCQlzaW11bGF0aW9ucyA9IGV2ZW50LmdldFNpbXVsYXRpb25zQWRkZWQoKTsKKwkJZm9yIChpbnQgaSA9IDA7IGkgPCBzaW11bGF0aW9ucy5sZW5ndGg7IGkrKykgeworCQkJYWRkU2ltdWxhdGlvbihzaW11bGF0aW9uc1tpXSk7CQkKKwkJfQorCisJCS8vIHJlbW92ZSB0aGUgY29ycmVzcG9uZGluZyBzaW11bGF0aW9uIGNvbnRyb2wgZm9yIGFsbCBzdG9wcGVkCisJCS8vIHNpbXVsYXRpb25zLi4uCisJCXNpbXVsYXRpb25zID0gZXZlbnQuZ2V0U2ltdWxhdGlvbnNSZW1vdmVkKCk7CisJCWZvciAoaW50IGkgPSAwOyBpIDwgc2ltdWxhdGlvbnMubGVuZ3RoOyBpKyspIHsKKwkJCXJlbW92ZVNpbXVsYXRpb24oc2ltdWxhdGlvbnNbaV0pOwkJCQorCQl9CisKKwkJCisJCXNjcm9sbENvbXBvc2l0ZS5zZXRDb250ZW50KGNvbnRyb2xDb21wb3NpdGUpOworCQljb250cm9sQ29tcG9zaXRlLmxheW91dCh0cnVlKTsKKwkJc2Nyb2xsQ29tcG9zaXRlLmxheW91dCh0cnVlKTsKKworCQkKKwkJLy9jb250cm9sQ29tcG9zaXRlLnJlZHJhdygpOworCQlzY3JvbGxDb21wb3NpdGUucmVkcmF3KCk7CisJCQorCQkvLyBSZWZyZXNoIG91ciByZWZlcmVuY2UgdG8gdGhlIHNpbXVsYXRpb24gbWFuYWdlcgorLy8JCXNpbXVsYXRpb25NYW5hZ2VyID0gU2ltdWxhdGlvbk1hbmFnZXIuZ2V0TWFuYWdlcigpOworLy8JCXNpbXVsYXRpb25NYW5hZ2VyLmFkZFNpbXVsYXRpb25NYW5hZ2VyTGlzdGVuZXIodGhpcyk7CisKKwl9CisKKwkvKioKKwkgKiBhZGQgYSBzaW11bGF0aW9uIGNvbnRyb2wgcGFuZWwgCisJICogZm9yIGFuIGFkZGVkIG9yIGV4aXN0aW5nIElTaW11bGF0aW9uIAorCSAqIAorCSAqIEBwYXJhbSBzaW0gIEluc3RhbmNlIG9mIElTaW11bGF0aW9uCisJICovCisJcHJpdmF0ZSB2b2lkIGFkZFNpbXVsYXRpb24oSVNpbXVsYXRpb24gc2ltKSB7CisJCWNvbnRyb2xDb21wb3NpdGUuc2V0UmVkcmF3KHRydWUpOworCQlzY3JvbGxDb21wb3NpdGUuc2V0UmVkcmF3KHRydWUpOworCQlTaW11bGF0aW9uQ29udHJvbCBzaW11bGF0aW9uQ29udHJvbCA9IAorCQkJbmV3IFNpbXVsYXRpb25Db250cm9sKGNvbnRyb2xDb21wb3NpdGUsIHNpbSk7CisJCWNvbnRyb2xDb21wb3NpdGUuYWRkQ29udHJvbExpc3RlbmVyKHNpbXVsYXRpb25Db250cm9sKTsKKwkJY29udHJvbExpc3QuYWRkKHNpbXVsYXRpb25Db250cm9sKTsKKwkJaWYgKGNvbnRyb2xMaXN0LnNpemUoKSA+IDApIHsKKwkJCWVuYWJsZU1hc3RlckNvbnRyb2wodHJ1ZSk7CisJCX0gCisJCQorCQljb250cm9sQ29tcG9zaXRlLmxheW91dCh0cnVlKTsKKwkJc2Nyb2xsQ29tcG9zaXRlLmxheW91dCh0cnVlKTsKKwkJCisJCXNjcm9sbENvbXBvc2l0ZS5yZWRyYXcoKTsJCQorCX0KKwkKKwkvKioKKwkgKiByZW1vdmUgYSBzaW11bGF0aW9uIGNvbnRyb2wgcGFuZWwgCisJICogZm9yIGFuIGFkZGVkIG9yIGV4aXN0aW5nIElTaW11bGF0aW9uIAorCSAqIAorCSAqIEBwYXJhbSBzaW0gIEluc3RhbmNlIG9mIElTaW11bGF0aW9uCisJICovCisJcHJpdmF0ZSB2b2lkIHJlbW92ZVNpbXVsYXRpb24oSVNpbXVsYXRpb24gc2ltdWxhdGlvbikgeworCQljb250cm9sQ29tcG9zaXRlLnNldFJlZHJhdyh0cnVlKTsKKwkJc2Nyb2xsQ29tcG9zaXRlLnNldFJlZHJhdyh0cnVlKTsKKwkJCQkKKwkJQ29udHJvbFtdIGN0cmxzID0gY29udHJvbENvbXBvc2l0ZS5nZXRDaGlsZHJlbigpOworCisJCWZvciAoaW50IGogPSAwOyBqIDwgY3RybHMubGVuZ3RoOyBqKyspIHsKKwkJCVNpbXVsYXRpb25Db250cm9sIHNpbXVsYXRpb25Db250cm9sID0gKFNpbXVsYXRpb25Db250cm9sKSBjdHJsc1tqXTsKKwkJCWlmIChzaW11bGF0aW9uLmVxdWFscyhzaW11bGF0aW9uQ29udHJvbC5nZXRTaW11bGF0aW9uKCkpKSB7CisJCQkJY29udHJvbENvbXBvc2l0ZS5yZW1vdmVDb250cm9sTGlzdGVuZXIoc2ltdWxhdGlvbkNvbnRyb2wpOworCQkJCWNvbnRyb2xMaXN0LnJlbW92ZShzaW11bGF0aW9uQ29udHJvbCk7CisJCQkJLy8gQ3JlYXRlIGEgdGVtcG9yYXJ5IGNvbXBvc2l0ZQorCQkJCUNvbXBvc2l0ZSB0ZW1wQ29tcG9zaXRlID0gbmV3IENvbXBvc2l0ZShzY3JvbGxDb21wb3NpdGUsCisJCQkJCQlTV1QuTk9ORSk7CisJCQkJLy8gU2V0IHRoZSB0ZW1wb3JhcnkgY29tcG9zaXRlIHRvIGJlIHRoZSBwYXJlbnQgb2YgdGhlCisJCQkJLy8gY29udHJvbCB3ZSB3YW50IHRvIHJlbW92ZSA6CisJCQkJc2ltdWxhdGlvbkNvbnRyb2wuc2V0UGFyZW50KHRlbXBDb21wb3NpdGUpOworCQkJCS8vIE5vdyBnZXQgcmlkIG9mIHRoZSB0ZW1wb3JhcnkgY29tcG9zaXRlIGFuZCBpdHMgY2hpbGRyZW4KKwkJCQl0ZW1wQ29tcG9zaXRlLmRpc3Bvc2UoKTsKKwkJCQlzaW11bGF0aW9uQ29udHJvbC5kaXNwb3NlKCk7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKworCQlpZiAoY29udHJvbExpc3Quc2l6ZSgpID09IDApIHsJCQkKKwkJCWVuYWJsZU1hc3RlckNvbnRyb2woZmFsc2UpOworCQl9CisJCQorCQljb250cm9sQ29tcG9zaXRlLmxheW91dCh0cnVlKTsKKwkJc2Nyb2xsQ29tcG9zaXRlLmxheW91dCh0cnVlKTsKKwkJCisJCXNjcm9sbENvbXBvc2l0ZS5yZWRyYXcoKTsJCQorCX0KK30KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS92aWV3cy9UcmlnZ2Vyc1ZpZXcuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS92aWV3cy9UcmlnZ2Vyc1ZpZXcuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZmNhMTc2Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3ZpZXdzL1RyaWdnZXJzVmlldy5qYXZhCkBAIC0wLDAgKzEsMTEzIEBACisvLyBUcmlnZ2Vyc1ZpZXcuamF2YQorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnVpLnZpZXdzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5Db25zdGFudHM7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS51aS5BY3RpdmF0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS51aS5JU2hhcmVkSW1hZ2VzOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ncmFwaGljcy5JbWFnZTsKKworLyoqCisgKiBUaGlzIGNsYXNzIHJlcHJlc2VudHMgdGhlIGVjbGlwc2UgdmlldyBvZiB0aGUKKyAqIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUudHJpZ2dlci5UcmlnZ2VyfXMgdGhhdCBoYXZlIGJlZW4gaW1wb3J0ZWQgaW50bworICogZWNsaXBzZSBhcyBwbHVnLWlucy4KKyAqLworcHVibGljIGNsYXNzIFRyaWdnZXJzVmlldyBleHRlbmRzIElkZW50aWZpYWJsZVBsdWdpblZpZXcgeworCisJLyoqCisJICogVGhlIGlkZW50aWZpZXIgb2YgdGhlIFRyaWdnZXJzIFZpZXcge0B2YWx1ZX0KKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBJRF9UUklHR0VSU19WSUVXID0gIm9yZy5lY2xpcHNlLnN0ZW0udWkudmlld3MudHJpZ2dlcnMiOyAvLyROT04tTkxTLTEkCisKKwkvKioKKwkgKiBDb25zdHJ1Y3RvcgorCSAqLworCXB1YmxpYyBUcmlnZ2Vyc1ZpZXcoKSB7CisJCXN1cGVyKCk7CisJfQorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnVpLnZpZXdzLklkZW50aWZpYWJsZVBsdWdpblZpZXcjZ2V0SWRlbnRpZmlhYmxlUGx1Z2luVmlld0xhYmVsQ29udGVudFByb3ZpZGVyKCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgSWRlbnRpZmlhYmxlUGx1Z2luVmlld0xhYmVsQ29udGVudFByb3ZpZGVyIGdldElkZW50aWZpYWJsZVBsdWdpblZpZXdMYWJlbENvbnRlbnRQcm92aWRlcigpIHsKKwkJcmV0dXJuIG5ldyBUcmlnZ2VyUGx1Z2luVmlld0xhYmVsQ29udGVudFByb3ZpZGVyKCk7CisJfQorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnVpLnZpZXdzLklkZW50aWZpYWJsZVBsdWdpblZpZXcjZ2V0SW5wdXQoKQorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCBJZGVudGlmaWFibGVWaWV3TW9kZWwgZ2V0SW5wdXQoKSB7CisJCXJldHVybiBUcmlnZ2VyVmlld01vZGVsLmdldE1vZGVsKCk7CisJfSAvLyBnZXRJbnB1dAorCisJLyoqCisJICogVGhpcyBjbGFzcyByZXByZXNlbnRzIGEgc2luZ2xldG9uIGluc3RhbmNlIG9mIGEgbW9kZWwgb2YgdGhlIFNURU0KKwkgKiB7QGxpbmsgVHJpZ2dlcn1zIHRoYXQgYXJlIHBsdWdnZWQgaW50byB0aGUgc3lzdGVtLgorCSAqLworCXByb3RlY3RlZCBzdGF0aWMgY2xhc3MgVHJpZ2dlclZpZXdNb2RlbCBleHRlbmRzIElkZW50aWZpYWJsZVZpZXdNb2RlbCB7CisJCS8vIFRoZSBzaW5nbGV0b24gaW5zdGFuY2UKKwkJcHJpdmF0ZSBzdGF0aWMgVHJpZ2dlclZpZXdNb2RlbCB0dk1vZGVsOworCisJCXByaXZhdGUgVHJpZ2dlclZpZXdNb2RlbCgpIHsKKwkJCXN1cGVyKENvbnN0YW50cy5JRF9UUklHR0VSX0VYVEVOU0lPTl9QT0lOVCk7CisJCX0KKworCQkvKioKKwkJICogQHJldHVybiB0aGUgc2luZ2xldG9uIGluc3RhbmNlIG9mIHRoZSBNb2RlbFZpZXdNb2RlbAorCQkgKi8KKwkJcHVibGljIHN0YXRpYyBUcmlnZ2VyVmlld01vZGVsIGdldE1vZGVsKCkgeworCQkJaWYgKHR2TW9kZWwgPT0gbnVsbCkgeworCQkJCXR2TW9kZWwgPSBuZXcgVHJpZ2dlclZpZXdNb2RlbCgpOworCQkJfQorCQkJcmV0dXJuIHR2TW9kZWw7CisJCX0gLy8gZ2V0TW9kZWwKKwl9IC8vIFRyaWdnZXJWaWV3TW9kZWwKKworCXByb3RlY3RlZCBzdGF0aWMgY2xhc3MgVHJpZ2dlclBsdWdpblZpZXdMYWJlbENvbnRlbnRQcm92aWRlciBleHRlbmRzCisJCQlJZGVudGlmaWFibGVQbHVnaW5WaWV3TGFiZWxDb250ZW50UHJvdmlkZXIgeworCisJCS8vIFRoaXMgaXMgdGhlIGltYWdlIHVzZWQgdG8gcmVwcmVzZW50IHRyaWdnZXJzIGluIHRoZSB0cmlnZ2VyIHZpZXcKKwkJc3RhdGljIEltYWdlIHRyaWdnZXJJY29uID0gbnVsbDsKKworCQkvLyBJZiB0cnVlIHRoZW4gd2UndmUgbmV2ZXIgdHJpZWQgdG8gZ2V0IHRoZSBpY29uCisJCXN0YXRpYyBib29sZWFuIHRyaWdnZXJJY29uRmlyc3RUaW1lID0gdHJ1ZTsKKworCQkvKioKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnVpLnZpZXdzLklkZW50aWZpYWJsZVBsdWdpblZpZXcuSWRlbnRpZmlhYmxlUGx1Z2luVmlld0xhYmVsQ29udGVudFByb3ZpZGVyI2dldEltYWdlKGphdmEubGFuZy5PYmplY3QpCisJCSAqLworCQlAT3ZlcnJpZGUKKwkJcHVibGljIEltYWdlIGdldEltYWdlKE9iamVjdCBlbGVtZW50KSB7CisJCQlyZXR1cm4gKGVsZW1lbnQgaW5zdGFuY2VvZiBJZGVudGlmaWFibGVEZWxlZ2F0ZSkgPyBnZXRUcmlnZ2VySWNvbigpCisJCQkJCTogc3VwZXIuZ2V0SW1hZ2UoZWxlbWVudCk7CisJCX0gLy8gZ2V0SW1hZ2UKKworCQkvKioKKwkJICogQHJldHVybiB0aGUgaWNvbiB0byBiZSB1c2VkIHRvIHJlcHJlc2VudCB0cmlnZ2Vycywgb3IgbnVsbCBpZiBpdAorCQkgKiAgICAgICAgIGNhbid0IGJlIGxvYWRlZC4KKwkJICovCisJCXByaXZhdGUgSW1hZ2UgZ2V0VHJpZ2dlckljb24oKSB7CisJCQkvLyBTaG91bGQgd2UgdHJ5IHRvIGxvYWQgdGhlIGljb24/CisJCQlpZiAodHJpZ2dlckljb25GaXJzdFRpbWUgJiYgdHJpZ2dlckljb24gPT0gbnVsbCkgeworCQkJCS8vIFllcworCQkJCXRyaWdnZXJJY29uRmlyc3RUaW1lID0gZmFsc2U7CisJCQkJdHJpZ2dlckljb24gPSBBY3RpdmF0b3IuZ2V0RGVmYXVsdCgpLmdldEltYWdlUmVnaXN0cnkoKS5nZXQoCisJCQkJCQlJU2hhcmVkSW1hZ2VzLlRSSUdHRVJfSUNPTik7CisJCQl9IC8vIGlmIHdlIHNob3VsZCBsb2FkIHRoZSBpY29uCisJCQlyZXR1cm4gdHJpZ2dlckljb247CisJCX0gLy8gZ2V0VHJpZ2dlckljb24KKworCX0gLy8gVHJpZ2dlclBsdWdpblZpZXdMYWJlbENvbnRlbnRQcm92aWRlcgorCit9IC8vIFRyaWdnZXJzVmlldwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS92aWV3cy9leHBsb3Jlci9JZGVudGlmaWFibGVDb250ZW50UHJvdmlkZXIuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS92aWV3cy9leHBsb3Jlci9JZGVudGlmaWFibGVDb250ZW50UHJvdmlkZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNDQzNjZlCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3ZpZXdzL2V4cGxvcmVyL0lkZW50aWZpYWJsZUNvbnRlbnRQcm92aWRlci5qYXZhCkBAIC0wLDAgKzEsNjU3IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0udWkudmlld3MuZXhwbG9yZXI7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklGaWxlOworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklGb2xkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3Q7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVJlc291cmNlOworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklSZXNvdXJjZUNoYW5nZUV2ZW50OworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklSZXNvdXJjZUNoYW5nZUxpc3RlbmVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklSZXNvdXJjZURlbHRhOworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklSZXNvdXJjZURlbHRhVmlzaXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5SZXNvdXJjZXNQbHVnaW47CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkNvcmVFeGNlcHRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQYXRoOworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUHJvZ3Jlc3NNb25pdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TdGF0dXM7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLkJhc2ljRUxpc3Q7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLkVMaXN0OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5VUkk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3Q7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnJlc291cmNlLlJlc291cmNlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkRlbGVnYXRpbmdXcmFwcGVySXRlbVByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSUVsZW1lbnRDb21wYXJlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklUcmVlQ29udGVudFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuU3RydWN0dXJlZFZpZXdlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlRyZWVQYXRoOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuVmlld2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5Db3JlUGx1Z2luOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uSWRlbnRpZmlhYmxlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5leHBlcmltZW50LkV4cGVyaW1lbnQ7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkdyYXBoOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5EZWNvcmF0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLk1vZGVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUuSWRlbnRpZmlhYmxlUHJlZGljYXRlRXhwcmVzc2lvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2NlbmFyaW8uU2NlbmFyaW87CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnRyaWdnZXIuVHJpZ2dlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnVpLkFjdGl2YXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnVpLlV0aWxpdHk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuRGlzcGxheTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5UcmVlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlRyZWVJdGVtOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklFZGl0b3JSZWZlcmVuY2U7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuUGxhdGZvcm1VSTsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5uYXZpZ2F0b3IuQ29tbW9uVmlld2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLnByb2dyZXNzLlVJSm9iOworCisvKioKKyAqIFRoaXMgY2xhc3MgaXMgYSB7QGxpbmsgSVRyZWVDb250ZW50UHJvdmlkZXJ9IGZvcgorICoge0BsaW5rIElkZW50aWZpYWJsZUluc3RhbmNlVHJlZU5vZGV9cyB3aGljaCBhcHBlYXIgaW4gdGhlCisgKiB7QGxpbmsgQ29tbW9uTmF2aWdhdG9yfSBmcmFtZXdvcmsgdGhhdCBpcyB1c2VkIHRvIGV4cGxvcmUgU1RFTSBQcm9qZWN0cy4KKyAqLworQFN1cHByZXNzV2FybmluZ3MoInVudXNlZCIpCitwdWJsaWMgY2xhc3MgSWRlbnRpZmlhYmxlQ29udGVudFByb3ZpZGVyIGltcGxlbWVudHMgSVRyZWVDb250ZW50UHJvdmlkZXIsCisJCUlSZXNvdXJjZUNoYW5nZUxpc3RlbmVyLCBJUmVzb3VyY2VEZWx0YVZpc2l0b3IgeworCisJVmlld2VyIHZpZXdlcjsKKworCS8qKgorCSAqIERlZmF1bHQgQ29uc3RydWN0b3IKKwkgKi8KKwlwdWJsaWMgSWRlbnRpZmlhYmxlQ29udGVudFByb3ZpZGVyKCkgeworCQlSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuYWRkUmVzb3VyY2VDaGFuZ2VMaXN0ZW5lcih0aGlzLAorCQkJCUlSZXNvdXJjZUNoYW5nZUV2ZW50LlBPU1RfQ0hBTkdFKTsKKwl9CisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVRyZWVDb250ZW50UHJvdmlkZXIjZ2V0Q2hpbGRyZW4oamF2YS5sYW5nLk9iamVjdCkKKwkgKi8KKwlwdWJsaWMgT2JqZWN0W10gZ2V0Q2hpbGRyZW4oT2JqZWN0IHBhcmVudEVsZW1lbnQpIHsKKwkJT2JqZWN0W10gcmV0VmFsdWUgPSBudWxsOworCQkvLyBSaWdodCBraW5kIG9mIHBhcmVudD8KKwkJaWYgKHBhcmVudEVsZW1lbnQgaW5zdGFuY2VvZiBJZGVudGlmaWFibGVUcmVlTm9kZSkgeworCQkJLy8gWWVzCisJCQkvLyBpZiBJZGVudGlmaWFibGVUcmVlTm9kZQorCQkJZmluYWwgTGlzdDxJZGVudGlmaWFibGU+IHRlbXAgPSBuZXcgQXJyYXlMaXN0PElkZW50aWZpYWJsZT4oKTsKKworCQkJZmluYWwgSWRlbnRpZmlhYmxlVHJlZU5vZGUgaXRuID0gKElkZW50aWZpYWJsZVRyZWVOb2RlKSBwYXJlbnRFbGVtZW50OworCisJCQlmaW5hbCBJRm9sZGVyIGZvbGRlciA9IGl0bi5nZXRQcm9qZWN0KCkuZ2V0Rm9sZGVyKAorCQkJCQlpdG4uZ2V0Rm9sZGVyTmFtZSgpKTsKKworCQkJLy8gRG9lcyB0aGUgZm9sZGVyIGV4aXN0PworCQkJaWYgKGZvbGRlci5leGlzdHMoKSkgeworCQkJCS8vIFllcworCQkJCXRyeSB7CisJCQkJCWZvciAoZmluYWwgSVJlc291cmNlIGlkZW50aWZpYWJsZUZpbGUgOiBmb2xkZXIubWVtYmVycygpKSB7CisJCQkJCQlpZihpZGVudGlmaWFibGVGaWxlIGluc3RhbmNlb2YgSUZpbGUpIHsKKwkJCQkJCQlJRmlsZSBpZmlsZSA9IChJRmlsZSkgaWRlbnRpZmlhYmxlRmlsZTsKKwkJCQkJCQkvLyBleGNsdWRlIGFueSBvcGVyYXRpbmcgc3lzdGVtIGZpbGVzIHN0YXJ0aW5nIHdpdGggJy4nCisJCQkJCQkJaWYoKGlmaWxlLmdldE5hbWUoKS5sZW5ndGgoKT4wKSYmKCBpZmlsZS5nZXROYW1lKCkuY2hhckF0KDApIT0nLicgKSAmJiAhaWZpbGUuZ2V0TmFtZSgpLmVuZHNXaXRoKCJ+IikpIHsKKwkJCQkJCQkJdHJ5IHsKKwkJCQkJCQkJCWZpbmFsIElkZW50aWZpYWJsZSBpZGVudGlmaWFibGUgPSBVdGlsaXR5LmdldElkZW50aWZpYWJsZSgoSUZpbGUpIGlkZW50aWZpYWJsZUZpbGUpOworCQkJCQkJCQkJaWYoaWRlbnRpZmlhYmxlICE9IG51bGwpIHRlbXAuYWRkKGlkZW50aWZpYWJsZSk7CisJCQkJCQkJCX0gY2F0Y2ggKGZpbmFsIFRocm93YWJsZSB0KSB7CisJCQkJCQkJCQkvLyBoZXJlIHdlIHdhbnQgdG8gcHJvdGVjdCB0aGUgdXNlciBhbmQgYWxsb3cgbm9uIFNURU0gZmlsZXMgaW4gZWFjaCBEaXJlY3RvcnkKKwkJCQkJCQkJCS8vIEp1c3QgY2F0Y2ggYW55IGV4Y2VwdGlvbiBhbmQgY29udGludWUKKwkJCQkJCQkJCUFjdGl2YXRvci5sb2dJbmZvcm1hdGlvbigiRXJyb3IgbG9hZGluZyBmaWxlICIraWZpbGUuZ2V0TmFtZSgpKyIgZm9yIGRpc3BsYXkiLCB0KTsKKwkJCQkJCQkJfQorCisJCQkJCQkJfQorCQkJCQkJfSAvLyBpZiBpbnN0YW5jZU9GIElGSUxFIGVsc2UgbWlnaHQgYmUgZm9sZGVyIG9yIHNvbWUgb3RoZXIgb2JqZWN0IGNyZWF0ZWQgb3V0c2lkZSBvZiBTVEVNIC4uLgorCQkJCQkJCisJCQkJCX0KKwkJCQl9IGNhdGNoIChmaW5hbCBDb3JlRXhjZXB0aW9uIGNlKSB7CisJCQkJCUFjdGl2YXRvci5sb2dFcnJvcigiIiwgY2UpOworCQkJCX0gLy8gZm9yIGVhY2ggSVJlc291cmNlIGZvbGRlci5tZW1iZXJzKCkKKwkJCX0gLy8gaWYgZm9sZGVyIGV4aXN0cworCisJCQlyZXRWYWx1ZSA9IHRlbXAudG9BcnJheSgpOworCisJCX0gZWxzZSB7CisJCQlyZXRWYWx1ZSA9IG5ldyBPYmplY3RbMF07CisJCX0KKworCQlyZXR1cm4gcmV0VmFsdWU7CisJfSAvLyBnZXRDaGlsZHJlbgorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklUcmVlQ29udGVudFByb3ZpZGVyI2dldFBhcmVudChqYXZhLmxhbmcuT2JqZWN0KQorCSAqLworCXB1YmxpYyBPYmplY3QgZ2V0UGFyZW50KE9iamVjdCBlbGVtZW50KSB7CisJCU9iamVjdCByZXRWYWx1ZSA9IG51bGw7CisJCWlmIChlbGVtZW50IGluc3RhbmNlb2YgSWRlbnRpZmlhYmxlSW5zdGFuY2VUcmVlTm9kZSkgeworCQkJcmV0VmFsdWUgPSAoKElkZW50aWZpYWJsZUluc3RhbmNlVHJlZU5vZGUpIGVsZW1lbnQpLmdldFBhcmVudCgpOworCQl9IC8vIGlmIElkZW50aWZpYWJsZUluc3RhbmNlVHJlZU5vZGUKKwkJcmV0dXJuIHJldFZhbHVlOworCX0KKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JVHJlZUNvbnRlbnRQcm92aWRlciNoYXNDaGlsZHJlbihqYXZhLmxhbmcuT2JqZWN0KQorCSAqLworCXB1YmxpYyBib29sZWFuIGhhc0NoaWxkcmVuKE9iamVjdCBlbGVtZW50KSB7CisJCU9iamVjdFtdIGNoaWxkcmVuID0gZ2V0Q2hpbGRyZW4oZWxlbWVudCk7CisJCXJldHVybiBjaGlsZHJlbiAhPSBudWxsICYmIGNoaWxkcmVuLmxlbmd0aCA+IDA7CisJfQorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTdHJ1Y3R1cmVkQ29udGVudFByb3ZpZGVyI2dldEVsZW1lbnRzKGphdmEubGFuZy5PYmplY3QpCisJICovCisJcHVibGljIE9iamVjdFtdIGdldEVsZW1lbnRzKE9iamVjdCBpbnB1dEVsZW1lbnQpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklDb250ZW50UHJvdmlkZXIjZGlzcG9zZSgpCisJICovCisJcHVibGljIHZvaWQgZGlzcG9zZSgpIHsKKwkJUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLnJlbW92ZVJlc291cmNlQ2hhbmdlTGlzdGVuZXIodGhpcyk7CisJfQorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklDb250ZW50UHJvdmlkZXIjaW5wdXRDaGFuZ2VkKG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuVmlld2VyLAorCSAqICAgICAgamF2YS5sYW5nLk9iamVjdCwgamF2YS5sYW5nLk9iamVjdCkKKwkgKi8KKwlwdWJsaWMgdm9pZCBpbnB1dENoYW5nZWQoVmlld2VyIHZpZXdlciwgT2JqZWN0IG9sZElucHV0LCBPYmplY3QgbmV3SW5wdXQpIHsKKwkJdGhpcy52aWV3ZXIgPSB2aWV3ZXI7CisJCQorCQkoKFN0cnVjdHVyZWRWaWV3ZXIpdmlld2VyKS5zZXRDb21wYXJlcihuZXcgSUVsZW1lbnRDb21wYXJlcigpIHsKKwkJCQorCQkJcHVibGljIGludCBoYXNoQ29kZShPYmplY3QgZWxlbWVudCkgeworCQkJCXJldHVybiBlbGVtZW50Lmhhc2hDb2RlKCk7CisJCQl9CisJCQkKKwkJCXB1YmxpYyBib29sZWFuIGVxdWFscyhPYmplY3QgYSwgT2JqZWN0IGIpIHsKKwkJCQlPYmplY3QgYVJlcD1hLCBiUmVwPWI7CisJCQkJd2hpbGUoYVJlcCBpbnN0YW5jZW9mIERlbGVnYXRpbmdXcmFwcGVySXRlbVByb3ZpZGVyKQorCQkJCQlhUmVwID0gKChEZWxlZ2F0aW5nV3JhcHBlckl0ZW1Qcm92aWRlcilhUmVwKS5nZXRWYWx1ZSgpOworCQkJCXdoaWxlKGJSZXAgaW5zdGFuY2VvZiBEZWxlZ2F0aW5nV3JhcHBlckl0ZW1Qcm92aWRlcikKKwkJCQkJYlJlcCA9ICgoRGVsZWdhdGluZ1dyYXBwZXJJdGVtUHJvdmlkZXIpYlJlcCkuZ2V0VmFsdWUoKTsKKwkJCQkKKwkJCQlpZihhUmVwIGluc3RhbmNlb2YgSWRlbnRpZmlhYmxlICYmIGJSZXAgaW5zdGFuY2VvZiBJZGVudGlmaWFibGUpCisJCQkJCXJldHVybiAoKElkZW50aWZpYWJsZSlhUmVwKS5nZXRVUkkoKS50b1N0cmluZygpLmVxdWFscygoKElkZW50aWZpYWJsZSliUmVwKS5nZXRVUkkoKS50b1N0cmluZygpKTsKKwkJCQkKKwkJCQlyZXR1cm4gYVJlcC5lcXVhbHMoYlJlcCk7CisJCQl9CisJCX0pOworCX0KKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVJlc291cmNlQ2hhbmdlTGlzdGVuZXIjcmVzb3VyY2VDaGFuZ2VkKG9yZworCSAqICAgICAgLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVJlc291cmNlQ2hhbmdlRXZlbnQpCisJICovCisJcHVibGljIHZvaWQgcmVzb3VyY2VDaGFuZ2VkKGZpbmFsIElSZXNvdXJjZUNoYW5nZUV2ZW50IGV2ZW50KSB7CisJCXRyeSB7CisJCQlldmVudC5nZXREZWx0YSgpLmFjY2VwdCh0aGlzKTsKKwkJfSBjYXRjaCAoZmluYWwgQ29yZUV4Y2VwdGlvbiBlKSB7CisJCQlBY3RpdmF0b3IubG9nRXJyb3IoIiIsIGUpOworCQl9CisJfSAvLyByZXNvdXJjZUNoYW5nZWQKKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVJlc291cmNlRGVsdGFWaXNpdG9yI3Zpc2l0KG9yZy5lY2xpcHNlLmNvcmUKKwkgKiAgICAgIC5yZXNvdXJjZXMuSVJlc291cmNlRGVsdGEpCisJICovCisJcHVibGljIGJvb2xlYW4gdmlzaXQoZmluYWwgSVJlc291cmNlRGVsdGEgZGVsdGEpIHRocm93cyBDb3JlRXhjZXB0aW9uIHsKKwkJCisJCWZpbmFsIElSZXNvdXJjZSBzb3VyY2UgPSBkZWx0YS5nZXRSZXNvdXJjZSgpOyAKKworCQorCQlJUGF0aCBwYXRoID0gZGVsdGEuZ2V0RnVsbFBhdGgoKTsKKworLyoJCUFjdGl2YXRvci5sb2dJbmZvcm1hdGlvbigiUGF0aDogIitwYXRoKTsKKwkJaWYoKGRlbHRhLmdldEtpbmQoKSZJUmVzb3VyY2VEZWx0YS5BRERFRCkgPT0gSVJlc291cmNlRGVsdGEuQURERUQpIEFjdGl2YXRvci5sb2dJbmZvcm1hdGlvbigiQURERUQiKTsKKwkJaWYoKGRlbHRhLmdldEtpbmQoKSZJUmVzb3VyY2VEZWx0YS5BRERFRF9QSEFOVE9NKSA9PSBJUmVzb3VyY2VEZWx0YS5BRERFRF9QSEFOVE9NKSBBY3RpdmF0b3IubG9nSW5mb3JtYXRpb24oIkFEREVEX1BIQU5UT00iKTsKKwkJaWYoKGRlbHRhLmdldEtpbmQoKSZJUmVzb3VyY2VEZWx0YS5BTExfV0lUSF9QSEFOVE9NUykgPT0gSVJlc291cmNlRGVsdGEuQUxMX1dJVEhfUEhBTlRPTVMpIEFjdGl2YXRvci5sb2dJbmZvcm1hdGlvbigiQUxMX1dJVEhfUEhBTlRPTVMiKTsKKwkJaWYoKGRlbHRhLmdldEtpbmQoKSZJUmVzb3VyY2VEZWx0YS5DSEFOR0VEKSA9PSBJUmVzb3VyY2VEZWx0YS5DSEFOR0VEKSBBY3RpdmF0b3IubG9nSW5mb3JtYXRpb24oIkNIQU5HRUQiKTsKKwkJaWYoKGRlbHRhLmdldEtpbmQoKSZJUmVzb3VyY2VEZWx0YS5DT05URU5UKSA9PSBJUmVzb3VyY2VEZWx0YS5DT05URU5UKSBBY3RpdmF0b3IubG9nSW5mb3JtYXRpb24oIkNPTlRFTlQiKTsKKwkJaWYoKGRlbHRhLmdldEtpbmQoKSZJUmVzb3VyY2VEZWx0YS5DT1BJRURfRlJPTSkgPT0gSVJlc291cmNlRGVsdGEuQ09QSUVEX0ZST00pIEFjdGl2YXRvci5sb2dJbmZvcm1hdGlvbigiQ09QSUVEX0ZST00iKTsKKwkJaWYoKGRlbHRhLmdldEtpbmQoKSZJUmVzb3VyY2VEZWx0YS5ERVNDUklQVElPTikgPT0gSVJlc291cmNlRGVsdGEuREVTQ1JJUFRJT04pIEFjdGl2YXRvci5sb2dJbmZvcm1hdGlvbigiREVTQ1JJUFRJT04iKTsKKwkJaWYoKGRlbHRhLmdldEtpbmQoKSZJUmVzb3VyY2VEZWx0YS5FTkNPRElORykgPT0gSVJlc291cmNlRGVsdGEuRU5DT0RJTkcpIEFjdGl2YXRvci5sb2dJbmZvcm1hdGlvbigiRU5DT0RJTkciKTsKKwkJaWYoKGRlbHRhLmdldEtpbmQoKSZJUmVzb3VyY2VEZWx0YS5MT0NBTF9DSEFOR0VEKSA9PSBJUmVzb3VyY2VEZWx0YS5MT0NBTF9DSEFOR0VEKSBBY3RpdmF0b3IubG9nSW5mb3JtYXRpb24oIkxPQ0FMX0NIQU5HRUQiKTsKKwkJaWYoKGRlbHRhLmdldEtpbmQoKSZJUmVzb3VyY2VEZWx0YS5NQVJLRVJTKSA9PSBJUmVzb3VyY2VEZWx0YS5NQVJLRVJTKSBBY3RpdmF0b3IubG9nSW5mb3JtYXRpb24oIk1BUktFUlMiKTsKKwkJaWYoKGRlbHRhLmdldEtpbmQoKSZJUmVzb3VyY2VEZWx0YS5NT1ZFRF9GUk9NKSA9PSBJUmVzb3VyY2VEZWx0YS5NT1ZFRF9GUk9NKSBBY3RpdmF0b3IubG9nSW5mb3JtYXRpb24oIk1PVkVEX0ZST00iKTsKKwkJaWYoKGRlbHRhLmdldEtpbmQoKSZJUmVzb3VyY2VEZWx0YS5NT1ZFRF9UTykgPT0gSVJlc291cmNlRGVsdGEuTU9WRURfVE8pIEFjdGl2YXRvci5sb2dJbmZvcm1hdGlvbigiTU9WRURfVE8iKTsKKwkJLy9pZigoZGVsdGEuZ2V0S2luZCgpJklSZXNvdXJjZURlbHRhLk5PX0NIQU5HRSkgPT0gSVJlc291cmNlRGVsdGEuTk9fQ0hBTkdFKSBBY3RpdmF0b3IubG9nSW5mb3JtYXRpb24oIk5PX0NIQU5HRSIpOworCQlpZigoZGVsdGEuZ2V0S2luZCgpJklSZXNvdXJjZURlbHRhLk9QRU4pID09IElSZXNvdXJjZURlbHRhLk9QRU4pIEFjdGl2YXRvci5sb2dJbmZvcm1hdGlvbigiT1BFTiIpOworCQlpZigoZGVsdGEuZ2V0S2luZCgpJklSZXNvdXJjZURlbHRhLlJFTU9WRUQpID09IElSZXNvdXJjZURlbHRhLlJFTU9WRUQpIEFjdGl2YXRvci5sb2dJbmZvcm1hdGlvbigiUkVNT1ZFRCIpOworCQlpZigoZGVsdGEuZ2V0S2luZCgpJklSZXNvdXJjZURlbHRhLlJFTU9WRURfUEhBTlRPTSkgPT0gSVJlc291cmNlRGVsdGEuUkVNT1ZFRF9QSEFOVE9NKSBBY3RpdmF0b3IubG9nSW5mb3JtYXRpb24oIlJFTU9WRURfUEhBTlRPTSIpOworCQlpZigoZGVsdGEuZ2V0S2luZCgpJklSZXNvdXJjZURlbHRhLlJFUExBQ0VEKSA9PSBJUmVzb3VyY2VEZWx0YS5SRVBMQUNFRCkgQWN0aXZhdG9yLmxvZ0luZm9ybWF0aW9uKCJSRVBMQUNFRCIpOworCQlpZigoZGVsdGEuZ2V0S2luZCgpJklSZXNvdXJjZURlbHRhLlJFTU9WRURfUEhBTlRPTSkgPT0gSVJlc291cmNlRGVsdGEuUkVNT1ZFRF9QSEFOVE9NKSBBY3RpdmF0b3IubG9nSW5mb3JtYXRpb24oIlJFTU9WRURfUEhBTlRPTSIpOworCQlpZigoZGVsdGEuZ2V0S2luZCgpJklSZXNvdXJjZURlbHRhLlJFUExBQ0VEKSA9PSBJUmVzb3VyY2VEZWx0YS5SRVBMQUNFRCkgQWN0aXZhdG9yLmxvZ0luZm9ybWF0aW9uKCJSRVBMQUNFRCIpOworCQlpZigoZGVsdGEuZ2V0S2luZCgpJklSZXNvdXJjZURlbHRhLlNZTkMpID09IElSZXNvdXJjZURlbHRhLlNZTkMpIEFjdGl2YXRvci5sb2dJbmZvcm1hdGlvbigiU1lOQyIpOworCQlpZigoZGVsdGEuZ2V0S2luZCgpJklSZXNvdXJjZURlbHRhLlRZUEUpID09IElSZXNvdXJjZURlbHRhLlRZUEUpIEFjdGl2YXRvci5sb2dJbmZvcm1hdGlvbigiVFlQRSIpOworKi8JCisJCQkJCisJCQorCQlVUkkgdXJpID0gVVJJLmNyZWF0ZVBsYXRmb3JtUmVzb3VyY2VVUkkocGF0aC50b1N0cmluZygpLCBmYWxzZSk7CisJCQorCQlmb3IoUmVzb3VyY2Ugcjogb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLlV0aWxpdHkucmVzb3VyY2VTZXQuZ2V0UmVzb3VyY2VzKCkpIAorCQkJaWYoci5nZXRVUkkoKS5lcXVhbHModXJpKSkgeworCQkJCXIuc2V0TW9kaWZpZWQodHJ1ZSk7CisJCQkJYnJlYWs7CisJCQl9CisJCQorCQlzd2l0Y2ggKCBzb3VyY2UuZ2V0VHlwZSgpICkgeyAKKwkJCWNhc2UgSVJlc291cmNlLkZPTERFUjogCisJCQkJZmluYWwgSUZvbGRlciBmID0gKElGb2xkZXIpc291cmNlOyAKKwkJCQluZXcgVUlKb2IoIlVwZGF0ZSBGb2xkZXIiKSB7IAorCQkJCQlwdWJsaWMgSVN0YXR1cyBydW5JblVJVGhyZWFkKElQcm9ncmVzc01vbml0b3IgbW9uaXRvcikgeyAKKwkJCQkJCWlmICh2aWV3ZXIgIT0gbnVsbCAKKwkJCQkJCQkJJiYgIXZpZXdlci5nZXRDb250cm9sKCkuaXNEaXNwb3NlZCgpKSB7CisJCQkJCQkJcmVmcmVzaFZpZXdlcigoQ29tbW9uVmlld2VyKXZpZXdlciwgZik7CQkJCQkJCisJCQkJCQl9IAorCQkJCQkJcmV0dXJuIFN0YXR1cy5PS19TVEFUVVM7IAorCQkJCQl9IAorCQkJCX0uc2NoZWR1bGUoKTsgCisJCQkJYnJlYWs7CisJCWNhc2UgSVJlc291cmNlLlJPT1Q6IAorCQkJbmV3IFVJSm9iKCJVcGRhdGUgUm9vdCIpIHsgCisJCQkJcHVibGljIElTdGF0dXMgcnVuSW5VSVRocmVhZChJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IpIHsgCisJCQkJCWlmICh2aWV3ZXIgIT0gbnVsbCAKKwkJCQkJCQkmJiAhdmlld2VyLmdldENvbnRyb2woKS5pc0Rpc3Bvc2VkKCkpIHsgCisJCQkJCQlyZWZyZXNoVmlld2VyKChDb21tb25WaWV3ZXIpdmlld2VyLCBzb3VyY2UpOworCQkJCQl9IAorCQkJCQlyZXR1cm4gU3RhdHVzLk9LX1NUQVRVUzsgCisJCQkJfSAKKwkJCX0uc2NoZWR1bGUoKTsgCisJCQlicmVhazsKKwkJY2FzZSBJUmVzb3VyY2UuUFJPSkVDVDogCisJCQlmaW5hbCBJUHJvamVjdCBwcm9qZWN0ID0gKElQcm9qZWN0KXNvdXJjZTsgCisJCQluZXcgVUlKb2IoIlVwZGF0ZSBQcm9qZWN0IikgeyAKKwkJCQlwdWJsaWMgSVN0YXR1cyBydW5JblVJVGhyZWFkKElQcm9ncmVzc01vbml0b3IgbW9uaXRvcikgeyAKKwkJCQkJaWYgKHZpZXdlciAhPSBudWxsIAorCQkJCQkJCSYmICF2aWV3ZXIuZ2V0Q29udHJvbCgpLmlzRGlzcG9zZWQoKSkgeyAKKwkJCQkJCXJlZnJlc2hWaWV3ZXIoKENvbW1vblZpZXdlcil2aWV3ZXIsIHByb2plY3QpOworCQkJCQl9IAorCQkJCQlyZXR1cm4gU3RhdHVzLk9LX1NUQVRVUzsgCisJCQkJfSAKKwkJCX0uc2NoZWR1bGUoKTsgIAorCQkJYnJlYWs7CisJCWNhc2UgSVJlc291cmNlLkZJTEU6IAorCQkJZmluYWwgSUZpbGUgZmlsZSA9IChJRmlsZSkgc291cmNlOyAKKwkJCS8vIFdoZW4gZmlsZXMgYXJlIHVwZGF0ZWQsIHdlIG5lZWQgdG8gbWFyayBhcyBtb2RpZmllZCBvdGhlciBmaWxlcyB0aGF0IGFsc28gbmVlZHMgdG8gCisJCQkvLyBiZSByZWZyZXNoZWQgc2luY2UgdGhleSBhcmUgaW5kaXJlY3RseSByZWZlcmVuY2luZyB0aGUgY2hhbmdlZCBmaWxlCisJCQl0aGlzLm1hcmtJbmRpcmVjdEZpbGVzKGRlbHRhKTsKKwkJCW5ldyBVSUpvYigiVXBkYXRlIEZpbGUiKSB7IAorCQkJCXB1YmxpYyBJU3RhdHVzIHJ1bkluVUlUaHJlYWQoSVByb2dyZXNzTW9uaXRvciBtb25pdG9yKSAKKwkJCQl7IAorCQkJCQlpZiAodmlld2VyICE9IG51bGwgCisJCQkJCQkJJiYgIXZpZXdlci5nZXRDb250cm9sKCkuaXNEaXNwb3NlZCgpKSB7IAorCQkJCQkJcmVmcmVzaFZpZXdlcigoQ29tbW9uVmlld2VyKXZpZXdlciwgZmlsZSk7CisJCQkJCX0gCisJCQkJCXJldHVybiBTdGF0dXMuT0tfU1RBVFVTOyAKKwkJCQl9IAorCQkJfS5zY2hlZHVsZSgpOyAKKwkJCXJldHVybiBmYWxzZTsgCisJCWRlZmF1bHQ6IAorCQkJYnJlYWs7CisJCX0KKwkJcmV0dXJuIHRydWU7IAkJCisJfSAvLyB2aXNpdAorCisJcHJpdmF0ZSB2b2lkIHJlZnJlc2hWaWV3ZXIoQ29tbW9uVmlld2VyIHYsIE9iamVjdCBlbG0pIHsKKwkJVHJlZVBhdGggW10gZXhwUGF0aHMgPSB2LmdldEV4cGFuZGVkVHJlZVBhdGhzKCk7CisJCXYucmVmcmVzaChlbG0pOyAKKwkJLy8gVGhlIGxhc3QgZWxlbWVudCBpbiB0aGUgdHJlZSBwYXRocyBjb250YWluaW5nIG1vZGVscywgc2NlbmFyaW9zIGV0Yy4gaGF2ZQorCQkvLyBwb3RlbnRpYWxseSBiZWVuIHJlbG9hZGVkIGluIHRoZSB2aWV3ZXIsIHNvIHRoZSB2YWx1ZXMgaW4gZXhwUGF0aHMgYXJlIAorCQkvLyB3cm9uZy4gV2UgbmVlZCB0byBmaW5kIHRoZSBuZXcgb25lcyBhbmQgZXhwYW5kIHRob3NlLgorCQkKKwkJQXJyYXlMaXN0PFRyZWVJdGVtPmFsbEl0ZW1zID0gbmV3IEFycmF5TGlzdDxUcmVlSXRlbT4oKTsKKwkJZ2V0QWxsSXRlbXModi5nZXRDb250cm9sKCksIGFsbEl0ZW1zKTsKKwkJQXJyYXlMaXN0PFRyZWVQYXRoPiBuZXdQYXRoc1RvRXhwYW5kID0gbmV3IEFycmF5TGlzdDxUcmVlUGF0aD4oKTsKKwkJZm9yKFRyZWVQYXRoIHRwOmV4cFBhdGhzKSB7CisJCQlPYmplY3QgbGFzdFNlZyA9IHRwLmdldExhc3RTZWdtZW50KCk7CisJCQl3aGlsZShsYXN0U2VnIGluc3RhbmNlb2YgRGVsZWdhdGluZ1dyYXBwZXJJdGVtUHJvdmlkZXIpCisJCQkJbGFzdFNlZyA9ICgoRGVsZWdhdGluZ1dyYXBwZXJJdGVtUHJvdmlkZXIpbGFzdFNlZykuZ2V0VmFsdWUoKTsKKworCisJCQlpZihsYXN0U2VnIGluc3RhbmNlb2YgSWRlbnRpZmlhYmxlKSB7CisJCQkJLy8gU2VlIGlmIHdlIGNhbiBmaW5kIHRoZSBuZXcgaWRlbnRpZmlhYmxlIG9iamVjdCBpbiB0aGUgbGlzdCBvZiBpdGVtcworCQkJCWJvb2xlYW4gZm91bmROZXdQYXRoID0gZmFsc2U7CisJCQkJZm9yKFRyZWVJdGVtIHRpOmFsbEl0ZW1zKSB7CisJCQkJCU9iamVjdCBkYXRhID0gdGkuZ2V0RGF0YSgpOworCQkJCQl3aGlsZShkYXRhIGluc3RhbmNlb2YgRGVsZWdhdGluZ1dyYXBwZXJJdGVtUHJvdmlkZXIpCisJCQkJCQlkYXRhID0gKChEZWxlZ2F0aW5nV3JhcHBlckl0ZW1Qcm92aWRlcilkYXRhKS5nZXRWYWx1ZSgpOworCQkJCQkKKy8vCQkJCQlBY3RpdmF0b3IubG9nSW5mb3JtYXRpb24oIkNvbXBhcmluZyAiK2RhdGErIiB3aXRoICIrbGFzdFNlZyk7CisJCQkJCWlmKGRhdGEgaW5zdGFuY2VvZiBJZGVudGlmaWFibGUgJiYgCisJCQkJCQkJKChJZGVudGlmaWFibGUpZGF0YSkuZ2V0VVJJKCkuZXF1YWxzKCgoSWRlbnRpZmlhYmxlKWxhc3RTZWcpLmdldFVSSSgpKSAmJgorCQkJCQkJCSFkYXRhLmVxdWFscyhsYXN0U2VnKSkKKwkJCQkJeworCQkJCQkJT2JqZWN0IFtdIHNlZ21lbnRzID0gbmV3IE9iamVjdFt0cC5nZXRTZWdtZW50Q291bnQoKV07CisJCQkJCQlpbnQgaSA9IDA7CisJCQkJCQlmb3IoaT0wO2k8dHAuZ2V0U2VnbWVudENvdW50KCktMTsrK2kpIHNlZ21lbnRzW2ldID0gdHAuZ2V0U2VnbWVudChpKTsKKwkJCQkJCXNlZ21lbnRzW2ldID0gdGkuZ2V0RGF0YSgpOworCQkJCQkJVHJlZVBhdGggbmV3UGF0aCA9IG5ldyBUcmVlUGF0aChzZWdtZW50cyk7CisJCQkJCQluZXdQYXRoc1RvRXhwYW5kLmFkZChuZXdQYXRoKTsKKwkJCQkJCWZvdW5kTmV3UGF0aCA9IHRydWU7CisJCQkJCX0KKwkJCQl9CisJCQkJaWYoIWZvdW5kTmV3UGF0aCkgeworCQkJCQkvLyBUcnkgYW5kIGV4cGFuZCBhbnl3YXkgdXNpbmcgdGhlIG9sZCBvYmplY3QKKwkJCQkJT2JqZWN0IFtdIHNlZ21lbnRzID0gbmV3IE9iamVjdFt0cC5nZXRTZWdtZW50Q291bnQoKV07CisJCQkJCWludCBpPTA7CisJCQkJCWZvcihpPTA7aTx0cC5nZXRTZWdtZW50Q291bnQoKTsrK2kpIHNlZ21lbnRzW2ldID0gdHAuZ2V0U2VnbWVudChpKTsKKwkJCQkJVHJlZVBhdGggbmV3UGF0aCA9IG5ldyBUcmVlUGF0aChzZWdtZW50cyk7CisJCQkJCW5ld1BhdGhzVG9FeHBhbmQuYWRkKG5ld1BhdGgpOworCQkJCX0KKwkJCX0KKwkJfQorCQl2LnNldEV4cGFuZGVkVHJlZVBhdGhzKGV4cFBhdGhzKTsKKwkJZm9yKFRyZWVQYXRoIHRwOm5ld1BhdGhzVG9FeHBhbmQpCisJCQl2LmV4cGFuZFRvTGV2ZWwodHAsIDEpOworCX0KKwkKKwlwcml2YXRlIHZvaWQgZ2V0QWxsSXRlbXMoT2JqZWN0IG8sIEFycmF5TGlzdDxUcmVlSXRlbT5pdGVtcykgeworCQkKKwkJaWYobyBpbnN0YW5jZW9mIFRyZWUpCisJCQlmb3IoVHJlZUl0ZW0gdDooKFRyZWUpbykuZ2V0SXRlbXMoKSkgeworCQkJCWl0ZW1zLmFkZCh0KTsKKwkJCQlmb3IoVHJlZUl0ZW0gdDI6dC5nZXRJdGVtcygpKQorCQkJCQlnZXRBbGxJdGVtcyh0MiwgaXRlbXMpOworCQkJfQorCQkKKwkJaWYobyBpbnN0YW5jZW9mIFRyZWVJdGVtKSAKKwkJCWZvcihUcmVlSXRlbSB0OigoVHJlZUl0ZW0pbykuZ2V0SXRlbXMoKSkgeworCQkJCWl0ZW1zLmFkZCh0KTsKKwkJCQlnZXRBbGxJdGVtcyh0LCBpdGVtcyk7CisJCQl9CisJfQorCQorCXByaXZhdGUgc3RhdGljIGNsYXNzIE15UnVubmFibGUgaW1wbGVtZW50cyBSdW5uYWJsZSB7CisJCXB1YmxpYyBJRWRpdG9yUmVmZXJlbmNlIFtdIHJlZmVyZW5jZXM7CisJCXB1YmxpYyB2b2lkIHJ1bigpIHsKKwkJCXJlZmVyZW5jZXMgPSBQbGF0Zm9ybVVJLmdldFdvcmtiZW5jaCgpLmdldEFjdGl2ZVdvcmtiZW5jaFdpbmRvdygpLmdldEFjdGl2ZVBhZ2UoKS5nZXRFZGl0b3JSZWZlcmVuY2VzKCk7CisJCX0KKwkJcHVibGljIElFZGl0b3JSZWZlcmVuY2UgW10gZ2V0UmVmZXJlbmNlcygpIHsKKwkJCXJldHVybiByZWZlcmVuY2VzOworCQl9CisJfQorCS8qKgorCSAqIEluIFNURU0sIG1vZGVscyBjb250YWluIG90aGVyIG1vZGVscyBhbmQgZ3JhcGhzLCBhbmQgc2NlbmFyaW9zIGNvbnRhaW4gb3RoZXIgbW9kZWxzIGV0Yy4gV2hlbiBhIHJlc291cmNlIGlzIGNoYW5nZWQsIHdlIG5lZWQgdG8gc2VlCisJICogd2hhdCBvdGhlciByZXNvdXJjZXMgYXJlIHBvdGVudGlhbGx5IGFmZmVjdGVkIGFuZCBuZWVkIHRvIGJlIG1hcmtlZCBhcyBtb2RpZmllZAorCSAqIAorCSAqIEBwYXJhbSBkZWx0YSBUaGUgZGVsdGEKKwkgKi8KKwkKKwlwcml2YXRlIHZvaWQgbWFya0luZGlyZWN0RmlsZXMoSVJlc291cmNlRGVsdGEgZGVsdGEpIHsKKwkJVVJJIHVyaSA9IFVSSS5jcmVhdGVQbGF0Zm9ybVJlc291cmNlVVJJKGRlbHRhLmdldFJlc291cmNlKCkuZ2V0RnVsbFBhdGgoKS50b1N0cmluZygpLCBmYWxzZSk7CisJCS8vU3RyaW5nIGZpbGVuYW1lID0gdXJpLmxhc3RTZWdtZW50KCk7CisJCVN0cmluZyBwcm9qZWN0ID0gZ2V0UHJvamVjdCh1cmkpOworCQlTdHJpbmcgdHlwZSA9IGdldFR5cGUodXJpKTsKKwkJTXlSdW5uYWJsZSBydW5uYWJsZSA9IG5ldyBNeVJ1bm5hYmxlKCk7CisJCQorCQlmaW5hbCBJRWRpdG9yUmVmZXJlbmNlIFtdIGVkaXRvclJlZmVyZW5jZXM7CisJCURpc3BsYXkuZ2V0RGVmYXVsdCgpLnN5bmNFeGVjKHJ1bm5hYmxlKTsKKwkJCisJCWVkaXRvclJlZmVyZW5jZXMgPSBydW5uYWJsZS5nZXRSZWZlcmVuY2VzKCk7CisJCisJCQorCQkvLyBXZSBuZWVkIHRvIGdldCBhIHNuYXBzaG90IG9mIHRoZSByZXNvdXJjZXMgY3VycmVudGx5IGluIHRoZSByZXNvdXJjZSBzZXQgc2luY2UgCisJCS8vIHRoZSBsb29wIGJlbG93IGNvdWxkIHBvdGVudGlhbGx5IGFkZCBtb3JlIGVsZW1lbnRzIHRvIHRoZSBsaXN0IGluc2lkZSBpdC4KKwkJCisJCUVMaXN0PFJlc291cmNlPiByZXNTbmFwID0gbmV3IEJhc2ljRUxpc3Q8UmVzb3VyY2U+KCk7CisJCXN5bmNocm9uaXplZChvcmcuZWNsaXBzZS5zdGVtLmNvcmUuVXRpbGl0eS5yZXNvdXJjZVNldCkgewkJCQorCQkJZm9yKFJlc291cmNlIHI6b3JnLmVjbGlwc2Uuc3RlbS5jb3JlLlV0aWxpdHkucmVzb3VyY2VTZXQuZ2V0UmVzb3VyY2VzKCkpIHJlc1NuYXAuYWRkKHIpOworCQkKKwkJCS8vIFRoZSByZWFzb24gd2UgZG8gbm90IHJlbGVhc2UgdGhlIHN5bmNocm9uaXphdGlvbiBsb2NrIGhlcmUKKwkJCS8vIGlzIHRoYXQgVXRpbGl0eS5nZXRJZGVudGlmaWFibGUoLi4uKSBjb3VsZCBiZSBjYWxsZWQgYXN5bmNocm9ub3VzbHkKKwkJCS8vIGJ5IHRoZSBwcm9qZWN0IGV4cGxvcmVyIHRyZWUgdmlld2VyLCBhbmQgdGhlIG1ldGhvZCB3aWxsIGl0ZXJhdGUKKwkJCS8vIG92ZXIgdGhlIHJlc291cmNlcyBzZWFyY2hpbmcgZm9yIGEgbWF0Y2guIFRoYXQgbG9vcCBuZWVkIHRvIGJlCisJCQkvLyBwcm90ZWN0ZWQgYnkgY2FsbHMgYmVsb3cgYWRkaW5nIG5ldyByZXNvdXJjZXMgdG8gdGhlIHJlc291cmNlIHNldC4KKwkJCQorCQkJZm9yKFJlc291cmNlIHI6cmVzU25hcCkgeworCQkJCVN0cmluZyBwX3Byb2plY3QgPSBnZXRQcm9qZWN0KHIuZ2V0VVJJKCkpOworCQkJCWlmKCFwcm9qZWN0LmVxdWFscyhwX3Byb2plY3QpKSBjb250aW51ZTsKKwkJCQlFTGlzdDxFT2JqZWN0PiBjb250ZW50ID0gci5nZXRDb250ZW50cygpOworCQkJCWlmKGNvbnRlbnQgPT0gbnVsbCB8fCBjb250ZW50LnNpemUoKSA9PSAwKSBjb250aW51ZTsKKwkJCQlFT2JqZWN0IGZpcnN0ID0gY29udGVudC5nZXQoMCk7CisJCQkJVVJJIHUgPSAoKElkZW50aWZpYWJsZSlmaXJzdCkuZ2V0VVJJKCk7CisJCQkJCisJCQkJCisJCQkJaWYodSA9PSBudWxsKSBjb250aW51ZTsKKwkJCQkKKwkJCQlpZih1LmVxdWFscyh1cmkpKSB7CisJCQkJCXIuc2V0TW9kaWZpZWQodHJ1ZSk7CisJCQkJCXIudW5sb2FkKCk7CisJCQkJCWNvbnRpbnVlOworCQkJCX0KKwkJCQlTdHJpbmcgcHJvaiA9IGdldFByb2plY3QodSk7CisJCQkJaWYocHJvaiA9PSBudWxsKSBjb250aW51ZTsKKwkJCQlpZighcHJvai5lcXVhbHMocHJvamVjdCkpIGNvbnRpbnVlOyAvLyB3cm9uZyBwcm9qZWN0CisJCQkJYm9vbGVhbiBtb2RpZmllZCA9IGZhbHNlOworCQkJCWlmKHR5cGUuZXF1YWxzKCJtb2RlbHMiKSkgeworCQkJCQlpZighKGZpcnN0IGluc3RhbmNlb2YgTW9kZWwpICYmICEoZmlyc3QgaW5zdGFuY2VvZiBTY2VuYXJpbykKKwkJCQkJCQkmJiAhKGZpcnN0IGluc3RhbmNlb2YgRXhwZXJpbWVudCkpIGNvbnRpbnVlOyAvLyBvbmx5IG1vZGVscyxzY2VuYXJpb3MgYW5kIGV4cGVyaW1lbnRzIGNvbnRhaW4gb3RoZXIgbW9kZWxzCQkJCQorCQkJCQlpZihmaXJzdCBpbnN0YW5jZW9mIE1vZGVsKQorCQkJCQkJbW9kaWZpZWQgPSBjaGVja01vZGVsKChNb2RlbClmaXJzdCwgdXJpKTsKKwkJCQkJZWxzZSBpZihmaXJzdCBpbnN0YW5jZW9mIFNjZW5hcmlvKQorCQkJCQkJbW9kaWZpZWQgPSBjaGVja1NjZW5hcmlvKChTY2VuYXJpbylmaXJzdCwgdXJpKTsJCQkKKwkJCQkJZWxzZSBpZihmaXJzdCBpbnN0YW5jZW9mIEV4cGVyaW1lbnQpCisJCQkJCQltb2RpZmllZCA9IGNoZWNrRXhwZXJpbWVudCgoRXhwZXJpbWVudClmaXJzdCwgdXJpKTsJCisJCQkJCWlmKG1vZGlmaWVkKSByLnNldE1vZGlmaWVkKHRydWUpOwkJCQkJCQorCQkJCX0gZWxzZSBpZih0eXBlLmVxdWFscygiZGVjb3JhdG9ycyIpKSB7CisJCQkJCWlmKCEoZmlyc3QgaW5zdGFuY2VvZiBNb2RlbCkgJiYgIShmaXJzdCBpbnN0YW5jZW9mIFNjZW5hcmlvKSkgY29udGludWU7IC8vIG9ubHkgbW9kZWxzIGFuZCBzY2VuYXJpb3MgY29udGFpbiBkZWNvcmF0b3JzCQkJCQorCQkJCQlpZihmaXJzdCBpbnN0YW5jZW9mIE1vZGVsKQorCQkJCQkJbW9kaWZpZWQgPSBjaGVja01vZGVsRGVjb3JhdG9ycygoTW9kZWwpZmlyc3QsIHVyaSk7CisJCQkJCWVsc2UgaWYoZmlyc3QgaW5zdGFuY2VvZiBTY2VuYXJpbykKKwkJCQkJCW1vZGlmaWVkID0gY2hlY2tTY2VuYXJpb0RlY29yYXRvcnMoKFNjZW5hcmlvKWZpcnN0LCB1cmkpOwkJCQorCQkJCX0gZWxzZSBpZih0eXBlLmVxdWFscygiZ3JhcGhzIikpIHsKKwkJCQkJaWYoIShmaXJzdCBpbnN0YW5jZW9mIE1vZGVsKSAmJiAhKGZpcnN0IGluc3RhbmNlb2YgU2NlbmFyaW8pKSBjb250aW51ZTsgLy8gb25seSBtb2RlbHMgJiBzY2VuYXJpb3MgIGNvbnRhaW4gZ3JhcGhzCQkKKwkJCQkJaWYoZmlyc3QgaW5zdGFuY2VvZiBNb2RlbCkgbW9kaWZpZWQgPSBjaGVja01vZGVsR3JhcGhzKChNb2RlbClmaXJzdCwgdXJpKTsKKwkJCQkJZWxzZSBtb2RpZmllZCA9IGNoZWNrU2NlbmFyaW9HcmFwaHMoKFNjZW5hcmlvKWZpcnN0LCB1cmkpOworCQkJCX0gIGVsc2UgaWYgKHR5cGUuZXF1YWxzKCJwcmVkaWNhdGVzIikpIHsKKwkJCQkJaWYoIShmaXJzdCBpbnN0YW5jZW9mIFNjZW5hcmlvKSAmJiAhKGZpcnN0IGluc3RhbmNlb2YgVHJpZ2dlcikpIGNvbnRpbnVlOyAvLyBPbmx5IHNjZW5hcmlvcyAmIHRyaWdnZXJzICYgYm9vbGVhbiBleHByZXNzaW9ucyBoYXZlIHByZWRpY2F0ZXMgaW4gdGhlbQorCQkJCQlpZihmaXJzdCBpbnN0YW5jZW9mIFNjZW5hcmlvKSBtb2RpZmllZCA9IGNoZWNrU2NlbmFyaW9QcmVkaWNhdGUoKFNjZW5hcmlvKWZpcnN0LCB1cmkpOworCQkJCQllbHNlIG1vZGlmaWVkID0gY2hlY2tUcmlnZ2VyUHJlZGljYXRlKChUcmlnZ2VyKWZpcnN0LCB1cmkpOworCQkJCX0gZWxzZSBpZih0eXBlLmVxdWFscygibW9kaWZpZXJzIikpIHsKKwkJCQkJaWYoIShmaXJzdCBpbnN0YW5jZW9mIFNjZW5hcmlvKSAmJiAhKGZpcnN0IGluc3RhbmNlb2YgVHJpZ2dlcikpIGNvbnRpbnVlOyAvLyBPbmx5IHNjZW5hcmlvcyAmIHRyaWdnZXJzIGhhdmUgbW9kaWZpZXJzIGluIHRoZW0KKwkJCQkJaWYoZmlyc3QgaW5zdGFuY2VvZiBTY2VuYXJpbykgbW9kaWZpZWQgPSBjaGVja1NjZW5hcmlvTW9kaWZpZXIoKFNjZW5hcmlvKWZpcnN0LCB1cmkpOworCQkJCQllbHNlIG1vZGlmaWVkID0gY2hlY2tUcmlnZ2VyTW9kaWZpZXIoKFRyaWdnZXIpZmlyc3QsIHVyaSk7CisJCQkJCQorCQkJCX0gZWxzZSBpZih0eXBlLmVxdWFscygidHJpZ2dlcnMiKSkgeworCQkJCQlpZighKGZpcnN0IGluc3RhbmNlb2YgU2NlbmFyaW8pKSBjb250aW51ZTsgLy8gT25seSBzY2VuYXJpb3MgaGF2ZSB0cmlnZ2VycyBpbiB0aGVtCisJCQkJCW1vZGlmaWVkID0gY2hlY2tTY2VuYXJpb1RyaWdnZXJzKChTY2VuYXJpbylmaXJzdCwgdXJpKTsKKwkJCQl9CisJCQkJaWYobW9kaWZpZWQpIAorCQkJCQlyLnNldE1vZGlmaWVkKHRydWUpOworCQkJfSAvLyBmb3IgZWFjaCByZXNvdXJjZQorCQkJCisJCQkvLyBGaW5hbGx5IGNoZWNrIGFueSBlZGl0b3JzIG9wZW4gdGhhdCBuZWVkcyB0byBiZSByZWxvYWRlZAorCQkJY2hlY2tFZGl0b3JzKGVkaXRvclJlZmVyZW5jZXMsIHVyaSk7CisJCX0KKwl9IC8vIHJlc291cmNlU2V0IGlzIG5vdCB0aHJlYWQgc2FmZQorCQorCXByaXZhdGUgdm9pZCBjaGVja0VkaXRvcnMoSUVkaXRvclJlZmVyZW5jZSBbXSBlZGl0b3JSZWZlcmVuY2VzLCBVUkkgdXJpKSB7CisvKgkJZm9yKElFZGl0b3JSZWZlcmVuY2UgaWVyOmVkaXRvclJlZmVyZW5jZXMpIHsKKwkJCUFjdGl2YXRvci5sb2dJbmZvcm1hdGlvbihpZXIpOworCQkJdHJ5IHsKKwkJCQlJRWRpdG9ySW5wdXQgaW5wdXQgPSBpZXIuZ2V0RWRpdG9ySW5wdXQoKTsKKwkJCQlGaWxlRWRpdG9ySW5wdXQgZmVpID0gKEZpbGVFZGl0b3JJbnB1dClpbnB1dDsKKwkJCQlJRWRpdG9yUGFydCBlZGl0b3IgPSBpZXIuZ2V0RWRpdG9yKGZhbHNlKTsKKwkJCQkKKwkJCX0gY2F0Y2goRXhjZXB0aW9uIGUpIHsKKwkJCQllLnByaW50U3RhY2tUcmFjZSgpOworCQkJfQorCQl9CisqLworCX0KKwkKKwlwcml2YXRlIGJvb2xlYW4gY2hlY2tNb2RlbChNb2RlbCBtb2RlbCwgVVJJIG1vZGlmaWVkVVJJKSB7CisJCWlmKG1vZGVsID09IG51bGwgfHwgbW9kaWZpZWRVUkkgPT0gbnVsbCkgCisJCQlDb3JlUGx1Z2luLmxvZ0Vycm9yKCJOdWxsIG1vZGVsIiwgbmV3IEV4Y2VwdGlvbigpKTsKKwkJaWYobW9kZWwuZ2V0VVJJKCkubGFzdFNlZ21lbnQoKS5lcXVhbHMobW9kaWZpZWRVUkkubGFzdFNlZ21lbnQoKSkpIHJldHVybiB0cnVlOworCQlmb3IoTW9kZWwgbTptb2RlbC5nZXRNb2RlbHMoKSkgeworCQkJYm9vbGVhbiBtb2RpZmllZCA9IGNoZWNrTW9kZWwobSwgbW9kaWZpZWRVUkkpOworCQkJaWYobW9kaWZpZWQpIHJldHVybiB0cnVlOworCQl9CisJCXJldHVybiBmYWxzZTsKKwl9CisJCisJcHJpdmF0ZSBib29sZWFuIGNoZWNrU2NlbmFyaW8oU2NlbmFyaW8gc2NlbmFyaW8sIFVSSSBtb2RpZmllZFVSSSkgeworCQlNb2RlbCBtID0gc2NlbmFyaW8uZ2V0TW9kZWwoKTsKKwkJaWYobSA9PSBudWxsKSByZXR1cm4gZmFsc2U7IC8vIG5vIG1vZGVsIGluIHNjZW5hcmlvCisJCXJldHVybiBjaGVja01vZGVsKG0sIG1vZGlmaWVkVVJJKTsKKwl9CisJCisJcHJpdmF0ZSBib29sZWFuIGNoZWNrRXhwZXJpbWVudChFeHBlcmltZW50IGV4cGVyaW1lbnQsIFVSSSBtb2RpZmllZFVSSSkgeworCQlTY2VuYXJpbyBzY2VuYXJpbyA9IGV4cGVyaW1lbnQuZ2V0U2NlbmFyaW8oKTsKKwkJaWYoc2NlbmFyaW8gPT0gbnVsbCkgcmV0dXJuIGZhbHNlOworCQlyZXR1cm4gY2hlY2tTY2VuYXJpbyhzY2VuYXJpbywgbW9kaWZpZWRVUkkpOworCX0KKwkKKwlwcml2YXRlIGJvb2xlYW4gY2hlY2tNb2RlbERlY29yYXRvcnMoTW9kZWwgbW9kZWwsIFVSSSBtb2RpZmllZFVSSSkgeworCQlpZihtb2RlbCA9PSBudWxsIHx8IG1vZGlmaWVkVVJJID09IG51bGwpIAorCQkJQ29yZVBsdWdpbi5sb2dFcnJvcigiTnVsbCBtb2RlbCBvciBkZWNvcmF0b3IiLCBuZXcgRXhjZXB0aW9uKCkpOworCQkKKwkJZm9yKERlY29yYXRvciBkOm1vZGVsLmdldE5vZGVEZWNvcmF0b3JzKCkpCisJCQlpZihkLmdldFVSSSgpLmxhc3RTZWdtZW50KCkuZXF1YWxzKG1vZGlmaWVkVVJJLmxhc3RTZWdtZW50KCkpKSByZXR1cm4gdHJ1ZTsKKwkJCisJCS8vIENoZWNrIHN1YiBtb2RlbAorCQlmb3IoTW9kZWwgbTptb2RlbC5nZXRNb2RlbHMoKSkgeworCQkJYm9vbGVhbiBtb2RpZmllZCA9IGNoZWNrTW9kZWxEZWNvcmF0b3JzKG0sIG1vZGlmaWVkVVJJKTsKKwkJCWlmKG1vZGlmaWVkKSByZXR1cm4gdHJ1ZTsKKwkJfQorCQlyZXR1cm4gZmFsc2U7CisJfQorCQorCXByaXZhdGUgYm9vbGVhbiBjaGVja1NjZW5hcmlvRGVjb3JhdG9ycyhTY2VuYXJpbyBzY2VuYXJpbywgVVJJIG1vZGlmaWVkVVJJKSB7CisJCU1vZGVsIG0gPSBzY2VuYXJpby5nZXRNb2RlbCgpOworCQlpZihtID09IG51bGwpIHJldHVybiBmYWxzZTsKKwkJYm9vbGVhbiBtb2RpZmllZCA9ICBjaGVja01vZGVsRGVjb3JhdG9ycyhtLCBtb2RpZmllZFVSSSk7CisJCWlmKG1vZGlmaWVkKSByZXR1cm4gdHJ1ZTsKKwkJLy8gQ2hlY2sgc2NlbmFyaW8gZGVjb3JhdG9yCisJCWZvcihEZWNvcmF0b3IgZDpzY2VuYXJpby5nZXRTY2VuYXJpb0RlY29yYXRvcnMoKSkgCisJCQlpZighZC5lSXNQcm94eSgpICYmIGQuZ2V0VVJJKCkubGFzdFNlZ21lbnQoKS5lcXVhbHMobW9kaWZpZWRVUkkubGFzdFNlZ21lbnQoKSkpIHJldHVybiB0cnVlOworCQlyZXR1cm4gZmFsc2U7CisJfQorCQorCXByaXZhdGUgYm9vbGVhbiBjaGVja01vZGVsR3JhcGhzKE1vZGVsIG1vZGVsLCBVUkkgbW9kaWZpZWRVUkkpIHsKKwkJaWYobW9kZWwgPT0gbnVsbCB8fCBtb2RpZmllZFVSSSA9PSBudWxsKSAKKwkJCUNvcmVQbHVnaW4ubG9nRXJyb3IoIk51bGwgbW9kZWwgb3IgdXJpIiwgbmV3IEV4Y2VwdGlvbigpKTsKKwkJCisJCWZvcihHcmFwaCBnOm1vZGVsLmdldEdyYXBocygpKQorCQkJaWYoZy5nZXRVUkkoKS5sYXN0U2VnbWVudCgpLmVxdWFscyhtb2RpZmllZFVSSS5sYXN0U2VnbWVudCgpKSkgcmV0dXJuIHRydWU7CisJCQorCQkvLyBDaGVjayBzdWIgbW9kZWwKKwkJZm9yKE1vZGVsIG06bW9kZWwuZ2V0TW9kZWxzKCkpIHsKKwkJCWJvb2xlYW4gbW9kaWZpZWQgPSBjaGVja01vZGVsR3JhcGhzKG0sIG1vZGlmaWVkVVJJKTsKKwkJCWlmKG1vZGlmaWVkKSByZXR1cm4gdHJ1ZTsKKwkJfQorCQlyZXR1cm4gZmFsc2U7CisJfQorCQorCXByaXZhdGUgYm9vbGVhbiBjaGVja1NjZW5hcmlvR3JhcGhzKFNjZW5hcmlvIHNjZW5hcmlvLCBVUkkgbW9kaWZpZWRVUkkpIHsKKwkJaWYoc2NlbmFyaW8gPT0gbnVsbCB8fCBtb2RpZmllZFVSSSA9PSBudWxsKSAKKwkJCUNvcmVQbHVnaW4ubG9nRXJyb3IoIk51bGwgbW9kZWwgb3IgdXJpIiwgbmV3IEV4Y2VwdGlvbigpKTsKKwkJCisJCU1vZGVsIG0gPSBzY2VuYXJpby5nZXRNb2RlbCgpOworCQkKKwkJcmV0dXJuIGNoZWNrTW9kZWxHcmFwaHMobSwgbW9kaWZpZWRVUkkpOworCX0KKworCQorCXByaXZhdGUgYm9vbGVhbiBjaGVja1NjZW5hcmlvUHJlZGljYXRlKFNjZW5hcmlvIHNjZW5hcmlvLCBVUkkgbW9kaWZpZWRVUkkpIHsKKwkJaWYoc2NlbmFyaW8gPT0gbnVsbCB8fCBtb2RpZmllZFVSSSA9PSBudWxsKSAKKwkJCUNvcmVQbHVnaW4ubG9nRXJyb3IoIk51bGwgbW9kZWwgb3IgdXJpIiwgbmV3IEV4Y2VwdGlvbigpKTsKKwkJCisJCWZvcihEZWNvcmF0b3IgZCA6IHNjZW5hcmlvLmdldFNjZW5hcmlvRGVjb3JhdG9ycygpKQorCQkJaWYoZCBpbnN0YW5jZW9mIFRyaWdnZXIpIHsKKwkJCQlUcmlnZ2VyIHRnID0gKFRyaWdnZXIpZDsKKwkJCQlJZGVudGlmaWFibGVQcmVkaWNhdGVFeHByZXNzaW9uIGlwZSA9IChJZGVudGlmaWFibGVQcmVkaWNhdGVFeHByZXNzaW9uKXRnLmdldFByZWRpY2F0ZSgpOworCQkJCWlmKGlwZS5nZXRVUkkoKS5lcXVhbHMobW9kaWZpZWRVUkkpKQorCQkJCQlyZXR1cm4gdHJ1ZTsKKwkJCX0KKwkJCisJCXJldHVybiBmYWxzZTsKKwl9CisJCisJcHJpdmF0ZSBib29sZWFuIGNoZWNrVHJpZ2dlclByZWRpY2F0ZShUcmlnZ2VyIHRyaWdnZXIsIFVSSSBtb2RpZmllZFVSSSkgeworCQlpZih0cmlnZ2VyID09IG51bGwgfHwgbW9kaWZpZWRVUkkgPT0gbnVsbCkgCisJCQlDb3JlUGx1Z2luLmxvZ0Vycm9yKCJOdWxsIG1vZGVsIG9yIHVyaSIsIG5ldyBFeGNlcHRpb24oKSk7CisJCQorCSAJIElkZW50aWZpYWJsZVByZWRpY2F0ZUV4cHJlc3Npb24gaXBlID0gKElkZW50aWZpYWJsZVByZWRpY2F0ZUV4cHJlc3Npb24pdHJpZ2dlci5nZXRQcmVkaWNhdGUoKTsKKwkJIGlmKGlwZS5nZXRVUkkoKS5lcXVhbHMobW9kaWZpZWRVUkkpKQorCQkJCQlyZXR1cm4gdHJ1ZTsKKwkJCisJCXJldHVybiBmYWxzZTsKKwl9CisKKwlwcml2YXRlIGJvb2xlYW4gY2hlY2tTY2VuYXJpb01vZGlmaWVyKFNjZW5hcmlvIHNjZW5hcmlvLCBVUkkgbW9kaWZpZWRVUkkpIHsKKwkJaWYoc2NlbmFyaW8gPT0gbnVsbCB8fCBtb2RpZmllZFVSSSA9PSBudWxsKSAKKwkJCUNvcmVQbHVnaW4ubG9nRXJyb3IoIk51bGwgbW9kZWwgb3IgdXJpIiwgbmV3IEV4Y2VwdGlvbigpKTsKKwkJCisJCWZvcihEZWNvcmF0b3IgZCA6IHNjZW5hcmlvLmdldFNjZW5hcmlvRGVjb3JhdG9ycygpKQorCQkJaWYoZCBpbnN0YW5jZW9mIFRyaWdnZXIpIHsKKwkJCQlUcmlnZ2VyIHRnID0gKFRyaWdnZXIpZDsKKwkJCQlmb3IoRGVjb3JhdG9yIGRlYzp0Zy5nZXRBY3Rpb25zKCkpIHsKKwkJCQkJaWYoZGVjLmdldFVSSSgpLmVxdWFscyhtb2RpZmllZFVSSSkpCisJCQkJCQlyZXR1cm4gdHJ1ZTsKKwkJCQl9CisJCQl9CisJCQorCQlyZXR1cm4gZmFsc2U7CisJfQorCQorCXByaXZhdGUgYm9vbGVhbiBjaGVja1NjZW5hcmlvVHJpZ2dlcnMoU2NlbmFyaW8gc2NlbmFyaW8sIFVSSSBtb2RpZmllZFVSSSkgeworCQlpZihzY2VuYXJpbyA9PSBudWxsIHx8IG1vZGlmaWVkVVJJID09IG51bGwpIAorCQkJQ29yZVBsdWdpbi5sb2dFcnJvcigiTnVsbCBtb2RlbCBvciB1cmkiLCBuZXcgRXhjZXB0aW9uKCkpOworCQkKKwkJZm9yKERlY29yYXRvciBkIDogc2NlbmFyaW8uZ2V0U2NlbmFyaW9EZWNvcmF0b3JzKCkpCisJCQlpZihkIGluc3RhbmNlb2YgVHJpZ2dlcikgeworCQkJCVRyaWdnZXIgdGcgPSAoVHJpZ2dlcilkOworCQkJCWlmKHRnLmdldFVSSSgpLmVxdWFscyhtb2RpZmllZFVSSSkpCisJCQkJCXJldHVybiB0cnVlOworCQkJfQorCQkKKwkJcmV0dXJuIGZhbHNlOworCX0KKwkKKwlwcml2YXRlIGJvb2xlYW4gY2hlY2tUcmlnZ2VyTW9kaWZpZXIoVHJpZ2dlciB0cmlnZ2VyLCBVUkkgbW9kaWZpZWRVUkkpIHsKKwkJaWYodHJpZ2dlciA9PSBudWxsIHx8IG1vZGlmaWVkVVJJID09IG51bGwpIAorCQkJQ29yZVBsdWdpbi5sb2dFcnJvcigiTnVsbCBtb2RlbCBvciB1cmkiLCBuZXcgRXhjZXB0aW9uKCkpOworCQkKKwkJIGZvcihEZWNvcmF0b3IgZGVjOnRyaWdnZXIuZ2V0QWN0aW9ucygpKSB7CisJCQkgaWYoZGVjICE9IG51bGwgJiYgZGVjLmdldFVSSSgpICE9IG51bGwgJiYgZGVjLmdldFVSSSgpLmVxdWFscyhtb2RpZmllZFVSSSkpCisJCQkJIHJldHVybiB0cnVlOworCQkgfQorCQkKKwkJcmV0dXJuIGZhbHNlOworCX0KKworCXByaXZhdGUgU3RyaW5nIGdldFByb2plY3QoVVJJIHVyaSkgeworCQlpZighdXJpLnRvU3RyaW5nKCkuc3RhcnRzV2l0aCgicGxhdGZvcm06L3Jlc291cmNlIikpIHJldHVybiBudWxsOworCisJCVN0cmluZyBzMSA9IHVyaS50b1N0cmluZygpLnN1YnN0cmluZygxOSk7IC8vICJwbGF0Zm9ybTovcmVzb3VyY2UiCisJCWludCBpcyA9IHMxLmluZGV4T2YoIi8iKTsKKwkJU3RyaW5nIHByb2plY3QgPSBzMS5zdWJzdHJpbmcoMCwgaXMpOyAKKwkJcmV0dXJuIHByb2plY3Q7CisJfQorCQorCXByaXZhdGUgU3RyaW5nIGdldFR5cGUoVVJJIHVyaSkgeworCQlpZighdXJpLnRvU3RyaW5nKCkuc3RhcnRzV2l0aCgicGxhdGZvcm06L3Jlc291cmNlIikpIHJldHVybiBudWxsOworCisJCVN0cmluZyBzMSA9IHVyaS50b1N0cmluZygpLnN1YnN0cmluZygxOSk7IC8vICJwbGF0Zm9ybTovcmVzb3VyY2UiCisJCWludCBpcyA9IHMxLmluZGV4T2YoIi8iKTsKKwkJU3RyaW5nIF9wcm9qZWN0ID0gczEuc3Vic3RyaW5nKGlzKzEpOworCQlpbnQgaXMyID0gX3Byb2plY3QuaW5kZXhPZigiLyIpOworCQlpZihpczIgPT0gLTEpIHJldHVybiAiIjsgLy8gbm8gdHlwZQorCQlTdHJpbmcgdHlwZSA9IF9wcm9qZWN0LnN1YnN0cmluZygwLCBpczIpOworCQlyZXR1cm4gdHlwZTsKKwl9Cit9IC8vIElkZW50aWZpYWJsZUNvbnRlbnRQcm92aWRlcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3ZpZXdzL2V4cGxvcmVyL0lkZW50aWZpYWJsZURyb3BBZGFwdGVyQXNzaXN0YW50LmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvdmlld3MvZXhwbG9yZXIvSWRlbnRpZmlhYmxlRHJvcEFkYXB0ZXJBc3Npc3RhbnQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wOTI3NjRiCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3ZpZXdzL2V4cGxvcmVyL0lkZW50aWZpYWJsZURyb3BBZGFwdGVyQXNzaXN0YW50LmphdmEKQEAgLTAsMCArMSwxMzQgQEAKKy8vIElkZW50aWZpYWJsZURyb3BBZGFwdGVyQXNzaXN0YW50LmphdmEKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS51aS52aWV3cy5leHBsb3JlcjsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuIAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyAKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0IAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwgCisgKiAKKyAqIENvbnRyaWJ1dG9yczogCisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU3RhdHVzOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5VUkk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnV0aWwuRWNvcmVVdGlsOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnV0aWwuTG9jYWxTZWxlY3Rpb25UcmFuc2ZlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTdHJ1Y3R1cmVkU2VsZWN0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5VdGlsaXR5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uRHVibGluQ29yZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLklkZW50aWZpYWJsZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2NlbmFyaW8uU2NlbmFyaW87CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS51aS5BY3RpdmF0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmRuZC5Ecm9wVGFyZ2V0RXZlbnQ7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmRuZC5UcmFuc2ZlckRhdGE7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkubmF2aWdhdG9yLkNvbW1vbkRyb3BBZGFwdGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLm5hdmlnYXRvci5Db21tb25Ecm9wQWRhcHRlckFzc2lzdGFudDsKKworLyoqCisgKiBUaGlzIGNsYXNzIHJlcHJlc2VudHMKKyAqLworcHVibGljIGNsYXNzIElkZW50aWZpYWJsZURyb3BBZGFwdGVyQXNzaXN0YW50IGV4dGVuZHMgQ29tbW9uRHJvcEFkYXB0ZXJBc3Npc3RhbnQgeworCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS51aS5uYXZpZ2F0b3IuQ29tbW9uRHJvcEFkYXB0ZXJBc3Npc3RhbnQjaXNTdXBwb3J0ZWRUeXBlKG9yZy5lY2xpcHNlLnN3dC5kbmQuVHJhbnNmZXJEYXRhKQorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBib29sZWFuIGlzU3VwcG9ydGVkVHlwZShUcmFuc2ZlckRhdGEgdHJhbnNmZXJUeXBlKSB7CisJCWZpbmFsIGJvb2xlYW4gcmV0VmFsdWUgPSBMb2NhbFNlbGVjdGlvblRyYW5zZmVyLmdldFRyYW5zZmVyKCkKKwkJCQkuaXNTdXBwb3J0ZWRUeXBlKHRyYW5zZmVyVHlwZSk7CisJCXJldHVybiByZXRWYWx1ZTsKKwl9CisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnVpLm5hdmlnYXRvci5Db21tb25Ecm9wQWRhcHRlckFzc2lzdGFudCNoYW5kbGVEcm9wKG9yZy5lY2xpcHNlLnVpLm5hdmlnYXRvci5Db21tb25Ecm9wQWRhcHRlciwKKwkgKiAgICAgIG9yZy5lY2xpcHNlLnN3dC5kbmQuRHJvcFRhcmdldEV2ZW50LCBqYXZhLmxhbmcuT2JqZWN0KQorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBJU3RhdHVzIGhhbmRsZURyb3AoQFN1cHByZXNzV2FybmluZ3MoInVudXNlZCIpIENvbW1vbkRyb3BBZGFwdGVyIGRyb3BBZGFwdGVyLAorCQkJRHJvcFRhcmdldEV2ZW50IGV2ZW50LCBPYmplY3QgdGFyZ2V0KSB7CisJCUlTdGF0dXMgcmV0VmFsdWUgPSBTdGF0dXMuQ0FOQ0VMX1NUQVRVUzsKKwkJLy8gU3RydWN0dXJlZCBTZWxlY3Rpb24/CisJCWlmIChldmVudC5kYXRhIGluc3RhbmNlb2YgSVN0cnVjdHVyZWRTZWxlY3Rpb24pIHsKKwkJCS8vIFllcworCQkJZm9yIChPYmplY3Qgb2JqIDogKChJU3RydWN0dXJlZFNlbGVjdGlvbikgZXZlbnQuZGF0YSkudG9MaXN0KCkpIHsKKwkJCQlpZiAob2JqIGluc3RhbmNlb2YgU3RyaW5nKSB7CisJCQkJCS8vIFllcworCQkJCQkvLyBUaGVzZSBhcmUgVVJJJ3MgZnJvbSBJZGVudGlmYWJsZVBsdWdpblZpZXcKKwkJCQkJZmluYWwgU3RyaW5nIHVyaVN0cmluZyA9IChTdHJpbmcpIG9iajsKKwkJCQkJdHJ5IHsKKwkJCQkJCS8vIFdlJ3JlIGdvaW5nIHRvIGRlc2VyaWFsaXplZCB0aGUgSWRlbnRpZmlhYmxlLCBjaGFuZ2UKKwkJCQkJCS8vIGl0J3MgVVJJIGFuZCB0aGVuIHNlcmlhbGl6ZSBpdCBhZ2FpbiBpbiB0aGUgbmV3CisJCQkJCQkvLyBsb2NhdGlvbi4KKwkJCQkJCWZpbmFsIFVSSSB1cmkgPSBVUkkuY3JlYXRlVVJJKHVyaVN0cmluZyk7CisJCQkJCQlmaW5hbCBJZGVudGlmaWFibGUgaWRlbnRpZmFibGUgPSBVdGlsaXR5CisJCQkJCQkJCS5nZXRJZGVudGlmaWFibGUodXJpKTsKKwkJCQkJCQorCQkJCQkJLy8gRml4IHByb2JsZW0gcmVwb3J0ZWQgYnkgTWF0dGhpYXMuIERvIG5vdCBhbGxvdyBkcmFnZ2luZyBvZiBidWlsdC1pbiBzY2VuYXJpb3MuCisJCQkJCQlpZihpZGVudGlmYWJsZSBpbnN0YW5jZW9mIFNjZW5hcmlvKQorCQkJCQkJCXJldHVybiByZXRWYWx1ZTsgLy8gY2FuY2VsCisJCQkJCQkKKwkJCQkJCS8vIFNFRCBmaXguIFdlIG11c3QgZG8gdGhlIGNvcHkgaGVyZS4gSWYgd2UgZG8gbm90IGRvIHRoaXMsIHRoZSBpZGVudGlmaWFibGUKKwkJCQkJCS8vIHdpbGwgYmUgcmVtb3ZlZCBmcm9tIHRoZSBzb3VyY2UgUmVzb3VyY2VTZXQgd2hlbiBzYXZlZCB0byB0aGUgbmV3IGxvY2F0aW9uLgorCQkJCQkJZmluYWwgSWRlbnRpZmlhYmxlIGlkZW50aWZpYWJsZUNvcHkgPSBFY29yZVV0aWwuY29weShpZGVudGlmYWJsZSk7CisJCQkJCQlmaW5hbCBEdWJsaW5Db3JlIGRjID0gaWRlbnRpZmlhYmxlQ29weS5nZXREdWJsaW5Db3JlKCk7CisJCQkJCQlmaW5hbCBVUkkgc2VyaWFsaXphdGlvblVSSSA9IGNyZWF0ZVNlcmlhbGl6YXRpb25VUkkoCisJCQkJCQkJCXVyaSwgKElkZW50aWZpYWJsZVRyZWVOb2RlKSB0YXJnZXQpOworCQkJCQkJaWRlbnRpZmlhYmxlQ29weS5zZXRVUkkoc2VyaWFsaXphdGlvblVSSSk7CisJCQkJCQlkYy5zZXRUaXRsZSgiQ29weSBvZiBcIiIgKyBkYy5nZXRUaXRsZSgpICsgIlwiIik7CisJCQkJCQlkYy5zZXREZXNjcmlwdGlvbigiQ29weSBvZiBcIiIgKyBkYy5nZXREZXNjcmlwdGlvbigpCisJCQkJCQkJCSsgIlwiIik7CisJCQkJCQlkYy5wb3B1bGF0ZSgpOworCQkJCQkJVXRpbGl0eS5zZXJpYWxpemVJZGVudGlmaWFibGUoaWRlbnRpZmlhYmxlQ29weSwKKwkJCQkJCQkJc2VyaWFsaXphdGlvblVSSSk7CisJCQkJCQlyZXRWYWx1ZSA9IFN0YXR1cy5PS19TVEFUVVM7CisJCQkJCX0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CisJCQkJCQlBY3RpdmF0b3IubG9nRXJyb3IoCisJCQkJCQkJCSJQcm9ibGVtIGRlc2VyaWFsaXppbmcgSWRlbnRpZmlhYmxlIGZyb20gXCIiCisJCQkJCQkJCQkJKyB1cmlTdHJpbmcgKyAiXCIiLCBlKTsKKwkJCQkJfQorCQkJCX0gLy8gaWYKKwkJCX0gLy8gZm9yIGVhY2ggT2JqZWN0CisJCX0gLy8gaWYgSVN0cnVjdHVyZWRTZWxlY3Rpb24KKworCQkvLyBMb2NhbFNlbGVjdGlvblRyYW5zZmVyLmdldFRyYW5zZmVyKCkuc2V0U2VsZWN0aW9uKG51bGwpOworCQlyZXR1cm4gcmV0VmFsdWU7CisJfSAvLyBoYW5kbGVEcm9wCisKKwlwcml2YXRlIFVSSSBjcmVhdGVTZXJpYWxpemF0aW9uVVJJKFVSSSB1cmksIElkZW50aWZpYWJsZVRyZWVOb2RlIHRyZWVOb2RlKSB7CisJCWZpbmFsIFN0cmluZ0J1aWxkZXIgc2IgPSBuZXcgU3RyaW5nQnVpbGRlcih0cmVlTm9kZS5nZXRQcm9qZWN0KCkKKwkJCQkuZ2V0TmFtZSgpKTsKKwkJc2IuYXBwZW5kKCIvIik7CisJCXNiLmFwcGVuZCh0cmVlTm9kZS5nZXRGb2xkZXJOYW1lKCkpOworCQlzYi5hcHBlbmQoIi8iKTsKKwkJc2IuYXBwZW5kKHVyaS5zZWdtZW50KHVyaS5zZWdtZW50Q291bnQoKSAtIDEpKTsKKwkJcmV0dXJuIFVSSS5jcmVhdGVQbGF0Zm9ybVJlc291cmNlVVJJKHNiLnRvU3RyaW5nKCksIGZhbHNlKTsKKwl9IC8vIGNyZWF0ZVNlcmlhbGl6YXRpb25VUkkKKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2UudWkubmF2aWdhdG9yLkNvbW1vbkRyb3BBZGFwdGVyQXNzaXN0YW50I3ZhbGlkYXRlRHJvcChqYXZhLmxhbmcuT2JqZWN0LAorCSAqICAgICAgaW50LCBvcmcuZWNsaXBzZS5zd3QuZG5kLlRyYW5zZmVyRGF0YSkKKwkgKi8KKwlAU3VwcHJlc3NXYXJuaW5ncygidW51c2VkIikgCisJQE92ZXJyaWRlCisJcHVibGljIElTdGF0dXMgdmFsaWRhdGVEcm9wKE9iamVjdCB0YXJnZXQsIGludCBvcGVyYXRpb24sCisJCQlUcmFuc2ZlckRhdGEgdHJhbnNmZXJUeXBlKSB7CisJCS8vIElTdGF0dXMgcmV0VmFsdWUgPSBTdGF0dXMuQ0FOQ0VMX1NUQVRVUzsKKwkJLy8KKwkJLy8gaWYgKExvY2FsU2VsZWN0aW9uVHJhbnNmZXIuZ2V0VHJhbnNmZXIoKS5lcXVhbHModHJhbnNmZXJUeXBlKSkgeworCQkvLyAvLyBZZXMKKwkJLy8gcmV0VmFsdWUgPSBTdGF0dXMuT0tfU1RBVFVTOworCQkvLyB9IC8vIGlmCisJCS8vIGVsc2UgaWYgKExvY2FsVHJhbnNmZXIuZ2V0SW5zdGFuY2UoKS5lcXVhbHModHJhbnNmZXJUeXBlKSkgeworCQkvLyAvLyBZZXMKKwkJLy8gcmV0VmFsdWUgPSBTdGF0dXMuT0tfU1RBVFVTOworCQkvLyB9IC8vIGlmCisJCS8vCisJCS8vIHJldHVybiByZXRWYWx1ZTsKKwkJcmV0dXJuIFN0YXR1cy5PS19TVEFUVVM7CisJfSAvLyB2YWxpZGF0ZURyb3AKKworfSAvLyBJZGVudGlmaWFibGVEcm9wQWRhcHRlckFzc2lzdGFudApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS92aWV3cy9leHBsb3Jlci9JZGVudGlmaWFibGVJbnN0YW5jZVRyZWVOb2RlLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvdmlld3MvZXhwbG9yZXIvSWRlbnRpZmlhYmxlSW5zdGFuY2VUcmVlTm9kZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI0MjBhNDcKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvdmlld3MvZXhwbG9yZXIvSWRlbnRpZmlhYmxlSW5zdGFuY2VUcmVlTm9kZS5qYXZhCkBAIC0wLDAgKzEsNzMgQEAKKy8vIElkZW50aWZpYWJsZUluc3RhbmNlVHJlZU5vZGUuamF2YQorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnVpLnZpZXdzLmV4cGxvcmVyOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqCisgKiBUaGlzIGNsYXNzIHJlcHJlc2VudHMge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uSWRlbnRpZmlhYmxlfXMgaW4KKyAqIHRoZSBTVEVNIFByb2plY3QgRXhwbG9yZXIgdmlldyB0aGF0IGlzIGltcGxlbWVudGVkIHVzaW5nIHRoZQorICoge0BsaW5rIG9yZy5lY2xpcHNlLnVpLm5hdmlnYXRvci5Db21tb25OYXZpZ2F0b3J9IGZyYW1ld29yay4gQW4gaW5zdGFuY2UKKyAqIHR5cGljYWxseSBzZXJ2ZXMgYXMgYSBwcm94eSBmb3IgdGhlIGZpbGUgdGhhdCBzZXJpYWxpemVzIHRoZQorICoge0BsaW5rIElkZW50aWZpYWJsZX0uCisgKiAKKyAqIEBzZWUgSWRlbnRpZmlhYmxlSW5zdGFuY2VUcmVlTm9kZUNvbnRlbnRQcm92aWRlcgorICogQHNlZSBJZGVudGlmaWFibGVJbnN0YW5jZVRyZWVOb2RlTGFiZWxQcm92aWRlcgorICovCitwdWJsaWMgY2xhc3MgSWRlbnRpZmlhYmxlSW5zdGFuY2VUcmVlTm9kZSB7CisKKwlwcml2YXRlIGZpbmFsIElkZW50aWZpYWJsZVRyZWVOb2RlIHBhcmVudDsKKwlwcml2YXRlIGZpbmFsIFN0cmluZyBuYW1lOworCXByaXZhdGUgZmluYWwgU3RyaW5nIGV4dGVuc2lvbjsKKworCS8qKgorCSAqIEBwYXJhbSBpdG4KKwkgKiBAcGFyYW0gbmFtZQorCSAqIEBwYXJhbSBleHRlbnNpb24KKwkgKiAJCXRoZSBmaWxlIG5hbWUgZXh0ZW5zaW9uIG9mIHRoZSBzZXJpYWxpemVkIGZpbGUuCisJICovCisJcHVibGljIElkZW50aWZpYWJsZUluc3RhbmNlVHJlZU5vZGUoSWRlbnRpZmlhYmxlVHJlZU5vZGUgaXRuLCBTdHJpbmcgbmFtZSwKKwkJCVN0cmluZyBleHRlbnNpb24pIHsKKwkJdGhpcy5wYXJlbnQgPSBpdG47CisJCXRoaXMubmFtZSA9IG5hbWU7CisJCXRoaXMuZXh0ZW5zaW9uID0gZXh0ZW5zaW9uOworCX0KKworCS8qKgorCSAqIEByZXR1cm4gdGhlIHtAbGluayBJZGVudGlmaWFibGVUcmVlTm9kZX0gdGhhdCBpcyB0aGUgcGFyZW50IG9mIHRoaXMgbm9kZS4KKwkgKi8KKwlwdWJsaWMgZmluYWwgSWRlbnRpZmlhYmxlVHJlZU5vZGUgZ2V0UGFyZW50KCkgeworCQlyZXR1cm4gcGFyZW50OworCX0KKworCS8qKgorCSAqIEByZXR1cm4gdGhlIG5hbWUKKwkgKi8KKwlwdWJsaWMgZmluYWwgU3RyaW5nIGdldE5hbWUoKSB7CisJCXJldHVybiBuYW1lOworCX0KKworCS8qKgorCSAqIEBzZWUgamF2YS5sYW5nLk9iamVjdCN0b1N0cmluZygpCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIFN0cmluZyB0b1N0cmluZygpIHsKKwkJcmV0dXJuIG5hbWU7CisJfQorCisJLyoqCisJICogQHJldHVybiB0aGUgZXh0ZW5zaW9uCisJICovCisJcHVibGljIGZpbmFsIFN0cmluZyBnZXRFeHRlbnNpb24oKSB7CisJCXJldHVybiBleHRlbnNpb247CisJfQorCit9IC8vIElkZW50aWZpYWJsZUluc3RhbmNlVHJlZU5vZGUKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvdmlld3MvZXhwbG9yZXIvSWRlbnRpZmlhYmxlSW5zdGFuY2VUcmVlTm9kZUNvbnRlbnRQcm92aWRlci5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3ZpZXdzL2V4cGxvcmVyL0lkZW50aWZpYWJsZUluc3RhbmNlVHJlZU5vZGVDb250ZW50UHJvdmlkZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMjRlYTJiCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3ZpZXdzL2V4cGxvcmVyL0lkZW50aWZpYWJsZUluc3RhbmNlVHJlZU5vZGVDb250ZW50UHJvdmlkZXIuamF2YQpAQCAtMCwwICsxLDE2OSBAQAorLy8gSWRlbnRpZmlhYmxlSW5zdGFuY2VUcmVlTm9kZUNvbnRlbnRQcm92aWRlci5qYXZhCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0udWkudmlld3MuZXhwbG9yZXI7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklGb2xkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVJlc291cmNlOworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklSZXNvdXJjZUNoYW5nZUV2ZW50OworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklSZXNvdXJjZUNoYW5nZUxpc3RlbmVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklSZXNvdXJjZURlbHRhOworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklSZXNvdXJjZURlbHRhVmlzaXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5SZXNvdXJjZXNQbHVnaW47CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkNvcmVFeGNlcHRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JVHJlZUNvbnRlbnRQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlZpZXdlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnVpLkFjdGl2YXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5EaXNwbGF5OworCisvKioKKyAqIFRoaXMgY2xhc3MgaXMgYSB7QGxpbmsgSVRyZWVDb250ZW50UHJvdmlkZXJ9IGZvcgorICoge0BsaW5rIElkZW50aWZpYWJsZUluc3RhbmNlVHJlZU5vZGV9cyB3aGljaCBhcHBlYXIgaW4gdGhlCisgKiB7QGxpbmsgQ29tbW9uTmF2aWdhdG9yfSBmcmFtZXdvcmsgdGhhdCBpcyB1c2VkIHRvIGV4cGxvcmUgU1RFTSBQcm9qZWN0cy4KKyAqLworQFN1cHByZXNzV2FybmluZ3MoInVudXNlZCIpCitwdWJsaWMgY2xhc3MgSWRlbnRpZmlhYmxlSW5zdGFuY2VUcmVlTm9kZUNvbnRlbnRQcm92aWRlciBpbXBsZW1lbnRzCisJCUlUcmVlQ29udGVudFByb3ZpZGVyLCBJUmVzb3VyY2VDaGFuZ2VMaXN0ZW5lciwgSVJlc291cmNlRGVsdGFWaXNpdG9yIHsKKworCVZpZXdlciB2aWV3ZXI7CisKKwkvKioKKwkgKiBEZWZhdWx0IENvbnN0cnVjdG9yCisJICovCisJcHVibGljIElkZW50aWZpYWJsZUluc3RhbmNlVHJlZU5vZGVDb250ZW50UHJvdmlkZXIoKSB7CisJCVJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5hZGRSZXNvdXJjZUNoYW5nZUxpc3RlbmVyKHRoaXMsCisJCQkJSVJlc291cmNlQ2hhbmdlRXZlbnQuUE9TVF9DSEFOR0UpOworCX0gLy8gSWRlbnRpZmlhYmxlSW5zdGFuY2VUcmVlTm9kZUNvbnRlbnRQcm92aWRlcgorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklUcmVlQ29udGVudFByb3ZpZGVyI2dldENoaWxkcmVuKGphdmEubGFuZy4KKwkgKiAgICAgIE9iamVjdCkKKwkgKi8KKwlwdWJsaWMgT2JqZWN0W10gZ2V0Q2hpbGRyZW4oZmluYWwgT2JqZWN0IHBhcmVudEVsZW1lbnQpIHsKKwkJT2JqZWN0W10gcmV0VmFsdWUgPSBudWxsOworCQkvLyBSaWdodCBraW5kIG9mIHBhcmVudD8KKwkJaWYgKHBhcmVudEVsZW1lbnQgaW5zdGFuY2VvZiBJZGVudGlmaWFibGVUcmVlTm9kZSkgeworCQkJLy8gWWVzCisJCQlmaW5hbCBMaXN0PElkZW50aWZpYWJsZUluc3RhbmNlVHJlZU5vZGU+IHRlbXAgPSBuZXcgQXJyYXlMaXN0PElkZW50aWZpYWJsZUluc3RhbmNlVHJlZU5vZGU+KCk7CisJCQkKKwkJCWZpbmFsIElkZW50aWZpYWJsZVRyZWVOb2RlIGl0biA9IChJZGVudGlmaWFibGVUcmVlTm9kZSkgcGFyZW50RWxlbWVudDsKKworCQkJZmluYWwgSUZvbGRlciBmb2xkZXIgPSBpdG4uZ2V0UHJvamVjdCgpLmdldEZvbGRlcigKKwkJCQkJaXRuLmdldEZvbGRlck5hbWUoKSk7CisJCQkKKwkJCS8vIERvZXMgdGhlIGZvbGRlciBleGlzdD8KKwkJCWlmIChmb2xkZXIuZXhpc3RzKCkpIHsKKwkJCQkvLyBZZXMKKwkJCQl0cnkgeworCQkJCQlmb3IgKGZpbmFsIElSZXNvdXJjZSBpZGVudGlmaWFibGVGaWxlIDogZm9sZGVyLm1lbWJlcnMoKSkgeworCQkJCQkJZmluYWwgU3RyaW5nIGlkZW50aWZpYWJsZU5hbWUgPSBpZGVudGlmaWFibGVGaWxlCisJCQkJCQkJCS5nZXROYW1lKCk7CisJCQkJCQlmaW5hbCBTdHJpbmcgZXh0ZW5zaW9uID0gaWRlbnRpZmlhYmxlRmlsZQorCQkJCQkJCQkuZ2V0RmlsZUV4dGVuc2lvbigpOworCQkJCQkJZmluYWwgU3RyaW5nIG5hbWVXaXRob3V0RXh0ZW5zaW9uID0gaWRlbnRpZmlhYmxlTmFtZQorCQkJCQkJCQkuc3Vic3RyaW5nKDAsIGlkZW50aWZpYWJsZU5hbWUKKwkJCQkJCQkJCQkubGFzdEluZGV4T2YoZXh0ZW5zaW9uKSAtIDEpOworCQkJCQkJdGVtcC5hZGQobmV3IElkZW50aWZpYWJsZUluc3RhbmNlVHJlZU5vZGUoaXRuLAorCQkJCQkJCQluYW1lV2l0aG91dEV4dGVuc2lvbiwgZXh0ZW5zaW9uKSk7CisJCQkJCX0KKwkJCQl9IGNhdGNoIChmaW5hbCBDb3JlRXhjZXB0aW9uIGUpIHsKKwkJCQkJQWN0aXZhdG9yLmxvZ0Vycm9yKCIiLCBlKTsKKwkJCQl9IC8vIGZvciBlYWNoIElSZXNvdXJjZSBmb2xkZXIubWVtYmVycygpCisJCQl9IC8vIGlmIGZvbGRlciBleGlzdHMKKwkJCQorCQkJcmV0VmFsdWUgPSB0ZW1wLnRvQXJyYXkoKTsKKworCQl9IC8vIGlmIElkZW50aWZpYWJsZVRyZWVOb2RlCisKKwkJcmV0dXJuIHJldFZhbHVlOworCX0gLy8gZ2V0Q2hpbGRyZW4KKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JVHJlZUNvbnRlbnRQcm92aWRlciNnZXRQYXJlbnQoamF2YS5sYW5nLgorCSAqICAgICAgT2JqZWN0KQorCSAqLworCXB1YmxpYyBPYmplY3QgZ2V0UGFyZW50KGZpbmFsIE9iamVjdCBlbGVtZW50KSB7CisJCU9iamVjdCByZXRWYWx1ZSA9IG51bGw7CisJCWlmIChlbGVtZW50IGluc3RhbmNlb2YgSWRlbnRpZmlhYmxlSW5zdGFuY2VUcmVlTm9kZSkgeworCQkJcmV0VmFsdWUgPSAoKElkZW50aWZpYWJsZUluc3RhbmNlVHJlZU5vZGUpIGVsZW1lbnQpLmdldFBhcmVudCgpOworCQl9IC8vIGlmIElkZW50aWZpYWJsZUluc3RhbmNlVHJlZU5vZGUKKwkJcmV0dXJuIHJldFZhbHVlOworCX0gLy8gZ2V0UGFyZW50CisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVRyZWVDb250ZW50UHJvdmlkZXIjaGFzQ2hpbGRyZW4oamF2YS5sYW5nLgorCSAqICAgICAgT2JqZWN0KQorCSAqLworCXB1YmxpYyBib29sZWFuIGhhc0NoaWxkcmVuKGZpbmFsIE9iamVjdCBwYXJlbnRFbGVtZW50KSB7CisJCU9iamVjdFtdIGNoaWxkcmVuID0gZ2V0Q2hpbGRyZW4ocGFyZW50RWxlbWVudCk7CisJCXJldHVybiBjaGlsZHJlbiAhPSBudWxsICYmIGNoaWxkcmVuLmxlbmd0aCA+IDA7CisJfQorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTdHJ1Y3R1cmVkQ29udGVudFByb3ZpZGVyI2dldEVsZW1lbnRzKGphdmEKKwkgKiAgICAgIC5sYW5nLk9iamVjdCkKKwkgKi8KKwlwdWJsaWMgT2JqZWN0W10gZ2V0RWxlbWVudHMoZmluYWwgT2JqZWN0IGlucHV0RWxlbWVudCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSUNvbnRlbnRQcm92aWRlciNkaXNwb3NlKCkKKwkgKi8KKwlwdWJsaWMgdm9pZCBkaXNwb3NlKCkgeworCQlSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkucmVtb3ZlUmVzb3VyY2VDaGFuZ2VMaXN0ZW5lcih0aGlzKTsKKwl9CisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSUNvbnRlbnRQcm92aWRlciNpbnB1dENoYW5nZWQob3JnLmVjbGlwc2UuCisJICogICAgICBqZmFjZS52aWV3ZXJzLlZpZXdlciwgamF2YS5sYW5nLk9iamVjdCwgamF2YS5sYW5nLk9iamVjdCkKKwkgKi8KKwlwdWJsaWMgdm9pZCBpbnB1dENoYW5nZWQoZmluYWwgVmlld2VyIHZpZXdlciwgZmluYWwgT2JqZWN0IG9sZElucHV0LAorCQkJZmluYWwgT2JqZWN0IG5ld0lucHV0KSB7CisJCXRoaXMudmlld2VyID0gdmlld2VyOworCX0KKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVJlc291cmNlQ2hhbmdlTGlzdGVuZXIjcmVzb3VyY2VDaGFuZ2VkKG9yZworCSAqICAgICAgLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVJlc291cmNlQ2hhbmdlRXZlbnQpCisJICovCisJcHVibGljIHZvaWQgcmVzb3VyY2VDaGFuZ2VkKGZpbmFsIElSZXNvdXJjZUNoYW5nZUV2ZW50IGV2ZW50KSB7CisJCXRyeSB7CisJCQlldmVudC5nZXREZWx0YSgpLmFjY2VwdCh0aGlzKTsKKwkJfSBjYXRjaCAoZmluYWwgQ29yZUV4Y2VwdGlvbiBlKSB7CisJCQlBY3RpdmF0b3IubG9nRXJyb3IoIiIsIGUpOworCQl9CisJfSAvLyByZXNvdXJjZUNoYW5nZWQKKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVJlc291cmNlRGVsdGFWaXNpdG9yI3Zpc2l0KG9yZy5lY2xpcHNlLmNvcmUKKwkgKiAgICAgIC5yZXNvdXJjZXMuSVJlc291cmNlRGVsdGEpCisJICovCisJcHVibGljIGJvb2xlYW4gdmlzaXQoZmluYWwgSVJlc291cmNlRGVsdGEgZGVsdGEpIHRocm93cyBDb3JlRXhjZXB0aW9uIHsKKwkJZmluYWwgRGlzcGxheSBkaXNwbGF5ID0gRGlzcGxheS5nZXREZWZhdWx0KCk7CisJCS8vIElzIHRoZSBkaXNwbGF5IHZhbGlkPworCQlpZiAoZGlzcGxheSAhPSBudWxsKSB7CisJCQkvLyBZZXMKKwkJCWRpc3BsYXkuYXN5bmNFeGVjKG5ldyBSdW5uYWJsZSgpIHsKKwkJCQlwdWJsaWMgdm9pZCBydW4oKSB7CisJCQkJCXZpZXdlci5yZWZyZXNoKCk7CisJCQkJfQorCQkJfSk7CisJCX0gLy8gaWYKKworCQlyZXR1cm4gdHJ1ZTsKKwl9IC8vIHZpc2l0CisKK30gLy8gSWRlbnRpZmlhYmxlSW5zdGFuY2VUcmVlTm9kZUNvbnRlbnRQcm92aWRlcgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS92aWV3cy9leHBsb3Jlci9JZGVudGlmaWFibGVJbnN0YW5jZVRyZWVOb2RlTGFiZWxQcm92aWRlci5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3ZpZXdzL2V4cGxvcmVyL0lkZW50aWZpYWJsZUluc3RhbmNlVHJlZU5vZGVMYWJlbFByb3ZpZGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2YyMWNmYwotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS92aWV3cy9leHBsb3Jlci9JZGVudGlmaWFibGVJbnN0YW5jZVRyZWVOb2RlTGFiZWxQcm92aWRlci5qYXZhCkBAIC0wLDAgKzEsOTcgQEAKKy8vIElkZW50aWZpYWJsZUluc3RhbmNlVHJlZU5vZGVMYWJlbFByb3ZpZGVyLmphdmEKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS51aS52aWV3cy5leHBsb3JlcjsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklMYWJlbFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSUxhYmVsUHJvdmlkZXJMaXN0ZW5lcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnVpLkFjdGl2YXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZ3JhcGhpY3MuSW1hZ2U7CisKKy8qKgorICogVGhpcyBjbGFzcyBpcyBhIHtAbGluayBJTGFiZWxQcm92aWRlcn0gZm9yCisgKiB7QGxpbmsgSWRlbnRpZmlhYmxlSW5zdGFuY2VUcmVlTm9kZX1zIHdoaWNoIGFwcGVhciBpbiB0aGUKKyAqIHtAbGluayBvcmcuZWNsaXBzZS51aS5uYXZpZ2F0b3IuQ29tbW9uTmF2aWdhdG9yfSBmcmFtZXdvcmsgdGhhdCBpcyB1c2VkIHRvCisgKiBleHBsb3JlIFNURU0gUHJvamVjdHMuCisgKiAKKyAqIEBzZWUgSWRlbnRpZmlhYmxlSW5zdGFuY2VUcmVlTm9kZUNvbnRlbnRQcm92aWRlcgorICovCitwdWJsaWMgY2xhc3MgSWRlbnRpZmlhYmxlSW5zdGFuY2VUcmVlTm9kZUxhYmVsUHJvdmlkZXIgaW1wbGVtZW50cworCQlJTGFiZWxQcm92aWRlciB7CisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSUxhYmVsUHJvdmlkZXIjZ2V0SW1hZ2UoamF2YS5sYW5nLk9iamVjdCkKKwkgKi8KKwlwdWJsaWMgSW1hZ2UgZ2V0SW1hZ2UoT2JqZWN0IGVsZW1lbnQpIHsKKwkJSW1hZ2UgcmV0VmFsdWUgPSBudWxsOworCQlpZiAoZWxlbWVudCBpbnN0YW5jZW9mIElkZW50aWZpYWJsZUluc3RhbmNlVHJlZU5vZGUpIHsKKwkJCS8vIFllcworCQkJZmluYWwgSWRlbnRpZmlhYmxlSW5zdGFuY2VUcmVlTm9kZSBpaXRuID0gKElkZW50aWZpYWJsZUluc3RhbmNlVHJlZU5vZGUpIGVsZW1lbnQ7CisKKwkJCXJldFZhbHVlID0gQWN0aXZhdG9yLmdldERlZmF1bHQoKS5nZXRJbWFnZVJlZ2lzdHJ5KCkuZ2V0KAorCQkJCQlpaXRuLmdldFBhcmVudCgpLmdldEltYWdlS2V5KCkpOworCisJCX0gLy8gaWYgSWRlbnRpZmlhYmxlSW5zdGFuY2VUcmVlTm9kZQorCQlyZXR1cm4gcmV0VmFsdWU7CisJfSAvLyBnZXRJbWFnZQorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklMYWJlbFByb3ZpZGVyI2dldFRleHQoamF2YS5sYW5nLk9iamVjdCkKKwkgKi8KKwlwdWJsaWMgU3RyaW5nIGdldFRleHQoT2JqZWN0IGVsZW1lbnQpIHsKKwkJU3RyaW5nIHJldFZhbHVlID0gbnVsbDsKKwkJaWYgKGVsZW1lbnQgaW5zdGFuY2VvZiBJZGVudGlmaWFibGVJbnN0YW5jZVRyZWVOb2RlKSB7CisJCQkvLyBZZXMKKwkJCWZpbmFsIElkZW50aWZpYWJsZUluc3RhbmNlVHJlZU5vZGUgaWl0biA9IChJZGVudGlmaWFibGVJbnN0YW5jZVRyZWVOb2RlKSBlbGVtZW50OworCQkJcmV0VmFsdWUgPSBpaXRuLmdldE5hbWUoKTsKKwkJfSAvLyBpZiBJZGVudGlmaWFibGVJbnN0YW5jZVRyZWVOb2RlCisJCXJldHVybiByZXRWYWx1ZTsKKwl9CisKKwkvKioKKwkgKiBAc2VlCisJICogCW9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSUJhc2VMYWJlbFByb3ZpZGVyI2FkZExpc3RlbmVyKG9yZy5lY2xpcHNlLgorCSAqIAlqZmFjZS52aWV3ZXJzLklMYWJlbFByb3ZpZGVyTGlzdGVuZXIpCisJICovCisJcHVibGljIHZvaWQgYWRkTGlzdGVuZXIoCisJCQlAU3VwcHJlc3NXYXJuaW5ncygidW51c2VkIikgSUxhYmVsUHJvdmlkZXJMaXN0ZW5lciBsaXN0ZW5lcikgeworCQkvLyBOb3RoaW5nCisJfQorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklCYXNlTGFiZWxQcm92aWRlciNkaXNwb3NlKCkKKwkgKi8KKwlwdWJsaWMgdm9pZCBkaXNwb3NlKCkgeworCQkvLyBOb3RoaW5nCisJfQorCisJLyoqCisJICogQHNlZQorCSAqIAlvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklCYXNlTGFiZWxQcm92aWRlciNpc0xhYmVsUHJvcGVydHkoamF2YS5sYW5nCisJICogCS5PYmplY3QsIGphdmEubGFuZy5TdHJpbmcpCisJICovCisJcHVibGljIGJvb2xlYW4gaXNMYWJlbFByb3BlcnR5KEBTdXBwcmVzc1dhcm5pbmdzKCJ1bnVzZWQiKSBPYmplY3QgZWxlbWVudCwKKwkJCUBTdXBwcmVzc1dhcm5pbmdzKCJ1bnVzZWQiKSBTdHJpbmcgcHJvcGVydHkpIHsKKwkJcmV0dXJuIGZhbHNlOworCX0KKworCS8qKgorCSAqIEBzZWUKKwkgKiAJb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JQmFzZUxhYmVsUHJvdmlkZXIjcmVtb3ZlTGlzdGVuZXIob3JnLmVjbGlwc2UKKwkgKiAJLmpmYWNlLnZpZXdlcnMuSUxhYmVsUHJvdmlkZXJMaXN0ZW5lcikKKwkgKi8KKwlwdWJsaWMgdm9pZCByZW1vdmVMaXN0ZW5lcigKKwkJCUBTdXBwcmVzc1dhcm5pbmdzKCJ1bnVzZWQiKSBJTGFiZWxQcm92aWRlckxpc3RlbmVyIGxpc3RlbmVyKSB7CisJCS8vIE5vdGhpbmcKKwl9CisKK30gLy8gSWRlbnRpZmlhYmxlSW5zdGFuY2VUcmVlTm9kZUxhYmVsUHJvdmlkZXIKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvdmlld3MvZXhwbG9yZXIvSWRlbnRpZmlhYmxlUHJvdmlkZXIuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS92aWV3cy9leHBsb3Jlci9JZGVudGlmaWFibGVQcm92aWRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk3Yjk3ZWYKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvdmlld3MvZXhwbG9yZXIvSWRlbnRpZmlhYmxlUHJvdmlkZXIuamF2YQpAQCAtMCwwICsxLDE2NyBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnVpLnZpZXdzLmV4cGxvcmVyOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuQ29tcG9zZWRBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbUxhYmVsUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVRyZWVJdGVtQ29udGVudFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLnByb3ZpZGVyLkV4dGVuZGVkSW1hZ2VSZWdpc3RyeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklMYWJlbFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSUxhYmVsUHJvdmlkZXJMaXN0ZW5lcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklUcmVlQ29udGVudFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVRyZWVTZWxlY3Rpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5WaWV3ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmdyYXBoaWNzLkltYWdlOworCisvKioKKyAqIAorICovCitwdWJsaWMgY2xhc3MgSWRlbnRpZmlhYmxlUHJvdmlkZXIgaW1wbGVtZW50cyBJTGFiZWxQcm92aWRlciwKKwkJSVRyZWVDb250ZW50UHJvdmlkZXIgeworCisJLyoqCisJICogRGVmYXVsdCBDb25zdHJ1Y3RvcgorCSAqLworCXB1YmxpYyBJZGVudGlmaWFibGVQcm92aWRlcigpIHsKKwkJLy8gTm90aGluZworCX0KKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JTGFiZWxQcm92aWRlciNnZXRJbWFnZShqYXZhLmxhbmcuT2JqZWN0KQorCSAqLworCXB1YmxpYyBJbWFnZSBnZXRJbWFnZShPYmplY3Qgb2JqZWN0KSB7CisJCS8vIFRyZWUgU2VsZWN0aW9uPworCQlpZiAob2JqZWN0IGluc3RhbmNlb2YgSVRyZWVTZWxlY3Rpb24pIHsKKwkJCUlUcmVlU2VsZWN0aW9uIHNlbGVjdGlvbiA9IChJVHJlZVNlbGVjdGlvbikgb2JqZWN0OworCQkJb2JqZWN0ID0gc2VsZWN0aW9uLmdldEZpcnN0RWxlbWVudCgpOworCQl9CisJCUlJdGVtTGFiZWxQcm92aWRlciAgaXQgPSBnZXRMYWJlbFByb3ZpZGVyKG9iamVjdCk7CisJCQorCQkvLyBEaWQgd2UgZmluZCB0aGUgcHJvdmlkZXI/CisJCWlmIChpdCAhPSBudWxsKSB7CisJCQkvLyBZZXMKKwkJCU9iamVjdCB0ZW1wID0gaXQuZ2V0SW1hZ2Uob2JqZWN0KTsKKwkJCXJldHVybiAodGVtcCBpbnN0YW5jZW9mIEltYWdlKSA/IChJbWFnZSl0ZW1wIDogZ2V0SW1hZ2VGcm9tT2JqZWN0KHRlbXApOworCQl9CisJCXJldHVybiBudWxsOworCQkKKwl9IC8vIGdldEltYWdlCisKKwkgcHJvdGVjdGVkIEltYWdlIGdldEltYWdlRnJvbU9iamVjdChPYmplY3Qgb2JqZWN0KQorCSAgeworCSAgICByZXR1cm4gRXh0ZW5kZWRJbWFnZVJlZ2lzdHJ5LmdldEluc3RhbmNlKCkuZ2V0SW1hZ2Uob2JqZWN0KTsKKwkgIH0KKwkgCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklMYWJlbFByb3ZpZGVyI2dldFRleHQoamF2YS5sYW5nLk9iamVjdCkKKwkgKi8KKwlwdWJsaWMgU3RyaW5nIGdldFRleHQoT2JqZWN0IGVsZW1lbnQpIHsKKwkJLy8gVHJlZSBTZWxlY3Rpb24/CisJCWlmIChlbGVtZW50IGluc3RhbmNlb2YgSVRyZWVTZWxlY3Rpb24pIHsKKwkJCUlUcmVlU2VsZWN0aW9uIHNlbGVjdGlvbiA9IChJVHJlZVNlbGVjdGlvbikgZWxlbWVudDsKKwkJCWVsZW1lbnQgPSBzZWxlY3Rpb24uZ2V0Rmlyc3RFbGVtZW50KCk7CisJCX0KKwkJT2JqZWN0IG9iaiA9IGdldExhYmVsUHJvdmlkZXIoZWxlbWVudCk7CisJCVN0cmluZyB0ZW1wID0gKChJSXRlbUxhYmVsUHJvdmlkZXIpb2JqKS5nZXRUZXh0KGVsZW1lbnQpOworCQlyZXR1cm4gdGVtcDsKKwl9CisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVRyZWVDb250ZW50UHJvdmlkZXIjZ2V0Q2hpbGRyZW4oamF2YS5sYW5nLk9iamVjdCkKKwkgKi8KKwlwdWJsaWMgT2JqZWN0W10gZ2V0Q2hpbGRyZW4oT2JqZWN0IHBhcmVudEVsZW1lbnQpIHsKKwkJZmluYWwgQ29sbGVjdGlvbjw/PiBjaGlsZHJlbiA9IGdldFRyZWVDb250ZW50UHJvdmlkZXIocGFyZW50RWxlbWVudCkuZ2V0Q2hpbGRyZW4ocGFyZW50RWxlbWVudCk7CisJCXJldHVybiBjaGlsZHJlbi50b0FycmF5KCk7CisJfQorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklUcmVlQ29udGVudFByb3ZpZGVyI2dldFBhcmVudChqYXZhLmxhbmcuT2JqZWN0KQorCSAqLworCXB1YmxpYyBPYmplY3QgZ2V0UGFyZW50KE9iamVjdCBlbGVtZW50KSB7CisJCXJldHVybiBnZXRUcmVlQ29udGVudFByb3ZpZGVyKGVsZW1lbnQpLmdldFBhcmVudChlbGVtZW50KTsKKwl9CisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVRyZWVDb250ZW50UHJvdmlkZXIjaGFzQ2hpbGRyZW4oamF2YS5sYW5nLk9iamVjdCkKKwkgKi8KKwlwdWJsaWMgYm9vbGVhbiBoYXNDaGlsZHJlbihPYmplY3QgZWxlbWVudCkgeworCQlyZXR1cm4gZ2V0VHJlZUNvbnRlbnRQcm92aWRlcihlbGVtZW50KS5oYXNDaGlsZHJlbihlbGVtZW50KTsKKwl9CisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVN0cnVjdHVyZWRDb250ZW50UHJvdmlkZXIjZ2V0RWxlbWVudHMoamF2YS5sYW5nLk9iamVjdCkKKwkgKi8KKwlwdWJsaWMgT2JqZWN0W10gZ2V0RWxlbWVudHMoT2JqZWN0IGlucHV0RWxlbWVudCkgeworCQlmaW5hbCBDb2xsZWN0aW9uPD8+IGVsZW1lbnRzID0gZ2V0VHJlZUNvbnRlbnRQcm92aWRlcihpbnB1dEVsZW1lbnQpLmdldEVsZW1lbnRzKGlucHV0RWxlbWVudCk7CisJCXJldHVybiBlbGVtZW50cy50b0FycmF5KCk7CisJfQorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklDb250ZW50UHJvdmlkZXIjaW5wdXRDaGFuZ2VkKG9yZy5lY2xpcHNlLmpmYWNlCisJICogICAgICAudmlld2Vycy5WaWV3ZXIsIGphdmEubGFuZy5PYmplY3QsIGphdmEubGFuZy5PYmplY3QpCisJICovCisJQFN1cHByZXNzV2FybmluZ3MoInVudXNlZCIpCisJcHVibGljIHZvaWQgaW5wdXRDaGFuZ2VkKFZpZXdlciB2aWV3ZXIsIE9iamVjdCBvbGRJbnB1dCwgIE9iamVjdCBuZXdJbnB1dCkgeworCQkvLyBOb3RoaW5nCisJfQorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklCYXNlTGFiZWxQcm92aWRlciNhZGRMaXN0ZW5lcihvcmcuZWNsaXBzZS4KKwkgKiAgICAgIGpmYWNlLnZpZXdlcnMuSUxhYmVsUHJvdmlkZXJMaXN0ZW5lcikKKwkgKi8KKwlAU3VwcHJlc3NXYXJuaW5ncygidW51c2VkIikKKwlwdWJsaWMgdm9pZCBhZGRMaXN0ZW5lcihJTGFiZWxQcm92aWRlckxpc3RlbmVyIGxpc3RlbmVyKSB7CisJCS8vIE5vdGhpbmcKKwl9CisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSUJhc2VMYWJlbFByb3ZpZGVyI2Rpc3Bvc2UoKQorCSAqLworCXB1YmxpYyB2b2lkIGRpc3Bvc2UoKSB7CisJCS8vIE5vdGhpbmcKKwl9CisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSUJhc2VMYWJlbFByb3ZpZGVyI2lzTGFiZWxQcm9wZXJ0eShqYXZhLmxhbmcKKwkgKiAgICAgIC5PYmplY3QsIGphdmEubGFuZy5TdHJpbmcpCisJICovCisJQFN1cHByZXNzV2FybmluZ3MoInVudXNlZCIpCisJcHVibGljIGJvb2xlYW4gaXNMYWJlbFByb3BlcnR5KE9iamVjdCBlbGVtZW50LCBTdHJpbmcgcHJvcGVydHkpIHsKKwkJcmV0dXJuIGZhbHNlOworCX0KKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JQmFzZUxhYmVsUHJvdmlkZXIjcmVtb3ZlTGlzdGVuZXIob3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JTGFiZWxQcm92aWRlckxpc3RlbmVyKQorCSAqLworCUBTdXBwcmVzc1dhcm5pbmdzKCJ1bnVzZWQiKQorCXB1YmxpYyB2b2lkIHJlbW92ZUxpc3RlbmVyKElMYWJlbFByb3ZpZGVyTGlzdGVuZXIgbGlzdGVuZXIpIHsKKwkJLy8gTm90aGluZworCX0KKworCXByaXZhdGUgQ29tcG9zZWRBZGFwdGVyRmFjdG9yeSBnZXRBZGFwdGVyRmFjdG9yeSgpIHsKKwkJQ29tcG9zZWRBZGFwdGVyRmFjdG9yeSByZXRWYWx1ZSA9IG5ldyBDb21wb3NlZEFkYXB0ZXJGYWN0b3J5KAorCQkJCUNvbXBvc2VkQWRhcHRlckZhY3RvcnkuRGVzY3JpcHRvci5SZWdpc3RyeS5JTlNUQU5DRSk7CisJCXJldHVybiByZXRWYWx1ZTsKKwl9CisKKwlwcml2YXRlIElJdGVtTGFiZWxQcm92aWRlciBnZXRMYWJlbFByb3ZpZGVyKGZpbmFsIE9iamVjdCBlbGVtZW50KSB7CisJCXJldHVybiAoSUl0ZW1MYWJlbFByb3ZpZGVyKSBnZXRBZGFwdGVyRmFjdG9yeSgpLmFkYXB0KGVsZW1lbnQsCisJCQkJSUl0ZW1MYWJlbFByb3ZpZGVyLmNsYXNzKTsKKwl9CisKKwlwcml2YXRlIElUcmVlSXRlbUNvbnRlbnRQcm92aWRlciBnZXRUcmVlQ29udGVudFByb3ZpZGVyKGZpbmFsIE9iamVjdCBlbGVtZW50KSB7CisJCXJldHVybiAoSVRyZWVJdGVtQ29udGVudFByb3ZpZGVyKSBnZXRBZGFwdGVyRmFjdG9yeSgpLmFkYXB0KGVsZW1lbnQsCisJCQkJSVRyZWVJdGVtQ29udGVudFByb3ZpZGVyLmNsYXNzKTsKKwl9Cit9IC8vIElkZW50aWZpYWJsZVByb3ZpZGVyCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvdmlld3MvZXhwbG9yZXIvSWRlbnRpZmlhYmxlVHJlZU5vZGUuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS92aWV3cy9leHBsb3Jlci9JZGVudGlmaWFibGVUcmVlTm9kZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc2NjgwN2UKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvdmlld3MvZXhwbG9yZXIvSWRlbnRpZmlhYmxlVHJlZU5vZGUuamF2YQpAQCAtMCwwICsxLDMwNSBAQAorLy8gSWRlbnRpZmlhYmxlVHJlZU5vZGUuamF2YQorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnVpLnZpZXdzLmV4cGxvcmVyOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udWkud2l6YXJkcy5OZXdTVEVNUHJvamVjdFdpemFyZDsKKworLyoqCisgKiBUaGlzIGNsYXNzIGlzIHVzZWQgaW4gdGhlIHtAbGluayBvcmcuZWNsaXBzZS51aS5uYXZpZ2F0b3IuQ29tbW9uTmF2aWdhdG9yfQorICogYmFzZWQgU1RFTSBQcm9qZWN0IEV4cGxvcmVyIHZpZXcgdG8gcmVwcmVzZW50IGEgZ3JvdXAgb2Ygb25lIHR5cGUgb2YKKyAqIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLklkZW50aWZpYWJsZX0gY29tcG9uZW50IChlLmcuLAorICoge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5Nb2RlbH0sCisgKiB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkdyYXBofSwKKyAqIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuRGVjb3JhdG9yfSwKKyAqIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2NlbmFyaW8uU2NlbmFyaW99LAorICoge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zZXF1ZW5jZXIuU2VxdWVuY2VyfSAsCisgKiB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmV4cGVyaW1lbnQuRXhwZXJpbWVudH0sCisgKiB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnRyaWdnZXIuVHJpZ2dlcn0sCisgKiB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLk1vZGlmaWVyfSwKKyAqIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlLlByZWRpY2F0ZX0pIHRoYXQgYmVsb25nIHRvIGEKKyAqIHBhcnRpY3VsYXIgU1RFTSBQcm9qZWN0IGluc3RhbmNlLgorICovCithYnN0cmFjdCBwdWJsaWMgY2xhc3MgSWRlbnRpZmlhYmxlVHJlZU5vZGUgeworCisJcHJpdmF0ZSBmaW5hbCBTdHJpbmcgY29tcG9uZW50TmFtZTsKKwlwcml2YXRlIGZpbmFsIFN0cmluZyBmb2xkZXJOYW1lOworCXByaXZhdGUgZmluYWwgSVByb2plY3QgcHJvamVjdDsKKwlwcml2YXRlIGZpbmFsIFN0cmluZyBpbWFnZUtleTsKKworCS8qKgorCSAqIEBwYXJhbSBwcm9qZWN0CisJICogICAgICAgICAgICB0aGUge0BsaW5rIElQcm9qZWN0fSB0aGF0IGlzIHRoZSBwYXJlbnQgb2YgdGhpcworCSAqICAgICAgICAgICAge0BsaW5rIElkZW50aWZpYWJsZVRyZWVOb2RlfS4KKwkgKiBAcGFyYW0gY29tcG9uZW50TmFtZQorCSAqICAgICAgICAgICAgdGhlIG5hbWUgb2YgdGhlIGNvbXBvbmVudCAoZS5nLiwgIlNjZW5hcmlvcyIpCisJICogQHBhcmFtIGZvbGRlck5hbWUKKwkgKiAgICAgICAgICAgIHRoZSBub24tTkxTJ2QgbmFtZSBvZiB0aGUgZm9sZGVyIGluIHRoZSBwcm9qZWN0IHRoYXQKKwkgKiAgICAgICAgICAgIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLklkZW50aWZpYWJsZX1zIHRoYXQgY29ycmVzcG9uZCB0byB0aGlzIG5vZGUgYXJlCisJICogICAgICAgICAgICBzZXJpYWxpemVkIGluLgorCSAqIEBwYXJhbSBpbWFnZUtleQorCSAqICAgICAgICAgICAgdGhlIHN0cmluZyB0aGF0IGlzIHVzZWQgYXMgYSBrZXkgaW50byB0aGUKKwkgKiAgICAgICAgICAgIHtAbGluayBvcmcuZWNsaXBzZS5qZmFjZS5yZXNvdXJjZS5JbWFnZVJlZ2lzdHJ5fSBvZiB0aGUgcGx1Zy1pbi4KKwkgKi8KKwlwdWJsaWMgSWRlbnRpZmlhYmxlVHJlZU5vZGUoZmluYWwgSVByb2plY3QgcHJvamVjdCwKKwkJCWZpbmFsIFN0cmluZyBjb21wb25lbnROYW1lLCBTdHJpbmcgZm9sZGVyTmFtZSwgU3RyaW5nIGltYWdlS2V5KSB7CisJCXRoaXMucHJvamVjdCA9IHByb2plY3Q7CisJCXRoaXMuY29tcG9uZW50TmFtZSA9IGNvbXBvbmVudE5hbWU7CisJCXRoaXMuZm9sZGVyTmFtZSA9IGZvbGRlck5hbWU7CisJCXRoaXMuaW1hZ2VLZXkgPSBpbWFnZUtleTsKKwl9IC8vIElkZW50aWZpYWJsZVRyZWVOb2RlCisKKwkvKioKKwkgKiBAcmV0dXJuIHRoZSB7QGxpbmsgSVByb2plY3R9IGFzc29jaWF0ZWQgd2l0aCB0aGUKKwkgKiAgICAgICAgIHtAbGluayBJZGVudGlmaWFibGVUcmVlTm9kZX0gaW5zdGFuY2UuICoKKwkgKi8KKwlwdWJsaWMgSVByb2plY3QgZ2V0UHJvamVjdCgpIHsKKwkJcmV0dXJuIHByb2plY3Q7CisJfQorCisJLyoqCisJICogQHJldHVybiB0aGUgbmFtZSBvZiB0aGUgY29tcG9uZW50CisJICovCisJcHVibGljIFN0cmluZyBnZXRDb21wb25lbnROYW1lKCkgeworCQlyZXR1cm4gY29tcG9uZW50TmFtZTsKKwl9CisKKwkvKioKKwkgKiBAcmV0dXJuIHRoZSBub24tTkxTJ2QgbmFtZSBvZiB0aGUgZm9sZGVyIGluIHRoZSBwcm9qZWN0IHRoYXQKKwkgKiAgICAgICAgIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLklkZW50aWZpYWJsZX1zIHRoYXQgY29ycmVzcG9uZCB0byB0aGlzIG5vZGUgYXJlIHNlcmlhbGl6ZWQKKwkgKiAgICAgICAgIGluLgorCSAqLworCXB1YmxpYyBTdHJpbmcgZ2V0Rm9sZGVyTmFtZSgpIHsKKwkJcmV0dXJuIGZvbGRlck5hbWU7CisJfQorCisJLyoqCisJICogQHJldHVybiB0aGUga2V5IHVzZWQgdG8gZmluZCBhbiBpbWFnZSBmb3IgdGhlIGNvbXBvbmVudCBpbiB0aGUgc2hhcmVkCisJICogICAgICAgICBpbWFnZSByZWdpc3RyeQorCSAqLworCXB1YmxpYyBTdHJpbmcgZ2V0SW1hZ2VLZXkoKSB7CisJCXJldHVybiBpbWFnZUtleTsKKwl9CisKKwkvKioKKwkgKiBAc2VlIGphdmEubGFuZy5PYmplY3QjdG9TdHJpbmcoKQorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKSB7CisJCWZpbmFsIFN0cmluZ0J1aWxkZXIgc2IgPSBuZXcgU3RyaW5nQnVpbGRlcihjb21wb25lbnROYW1lKTsKKwkJcmV0dXJuIHNiLnRvU3RyaW5nKCk7CisJfSAvLyB0b1N0cmluZworCisJLyoqCisJICogaGFzaENvZGUuIE92ZXJyaWRlIHRvIGZpeCBuYXZpZ2F0b3IgcHJvYmxlbS4gVGhlIG5hdmlnYXRvciBpbiBlY2xpcHNlIHN0b3JlcyB0aGUgdHJlZSBub2RlcworCSAqIGluIGEgaGFzaCB0YWJsZSBhbmQgd2UgbmVlZCB0byBvdmVycmlkZSBoYXNoQ29kZSBhbmQgZXF1YWxzIHRvIG1ha2Ugc3VyZSB0aGV5IGNhbiBiZQorCSAqIGZvdW5kLiBBIGNvbWJpbmF0aW9uIG9mIHRoZSBmb2xkZXIgbmFtZSBhbmQgdGhlIHByb2plY3QgbmFtZSBpcyB1bmlxdWUgd2l0aGluIFNURU0uCisJICovCisJCisJQE92ZXJyaWRlCisJcHVibGljIGludCBoYXNoQ29kZSgpIHsKKwkJcmV0dXJuIGZvbGRlck5hbWUuaGFzaENvZGUoKV5wcm9qZWN0LmdldE5hbWUoKS5oYXNoQ29kZSgpOyAvLyBYT1IKKwl9CisJCisJLyoqCisJICogZXF1YWxzLiBPdmVycmlkZSB0byBmaXggbmF2aWdhdG9yIHByb2JsZW0KKwkgKi8KKwkKKwlAT3ZlcnJpZGUKKwlwdWJsaWMgYm9vbGVhbiBlcXVhbHMoT2JqZWN0IG8pIHsKKwkJaWYoIShvIGluc3RhbmNlb2YgSWRlbnRpZmlhYmxlVHJlZU5vZGUpKSByZXR1cm4gZmFsc2U7CisJCQorCQlyZXR1cm4gKCgoSWRlbnRpZmlhYmxlVHJlZU5vZGUpbykuZ2V0Rm9sZGVyTmFtZSgpLmVxdWFscyh0aGlzLmZvbGRlck5hbWUpICYmCisJCQkJKChJZGVudGlmaWFibGVUcmVlTm9kZSlvKS5nZXRQcm9qZWN0KCkuZ2V0TmFtZSgpLmVxdWFscyh0aGlzLmdldFByb2plY3QoKS5nZXROYW1lKCkpKTsKKwl9CisJLyoqCisJICogVGhpcyBjbGFzcyBpcyBhIHtAbGluayBJZGVudGlmaWFibGVUcmVlTm9kZX0gdGhhdCByZXByZXNlbnRzCisJICoge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5EZWNvcmF0b3J9cy4KKwkgKi8KKwlwdWJsaWMgc3RhdGljIGNsYXNzIERlY29yYXRvcnNUcmVlTm9kZSBleHRlbmRzIElkZW50aWZpYWJsZVRyZWVOb2RlIHsKKworCQkvKioKKwkJICogQHBhcmFtIHByb2plY3QKKwkJICogICAgICAgICAgICB0aGUge0BsaW5rIElQcm9qZWN0fSB0aGF0IGlzIHRoZSBwYXJlbnQgb2YgdGhpcworCQkgKiAgICAgICAgICAgIHtAbGluayBJZGVudGlmaWFibGVUcmVlTm9kZX0uCisJCSAqLworCQlwdWJsaWMgRGVjb3JhdG9yc1RyZWVOb2RlKElQcm9qZWN0IHByb2plY3QpIHsKKwkJCXN1cGVyKHByb2plY3QsIE1lc3NhZ2VzLmdldFN0cmluZygiRVhQTE9SRVIuREVDT1JBVE9SX0ZPTERFUiIpLAorCQkJCQlOZXdTVEVNUHJvamVjdFdpemFyZC5ERUNPUkFUT1JTX0ZPTERFUl9OQU1FLAorCQkJCQlvcmcuZWNsaXBzZS5zdGVtLnVpLklTaGFyZWRJbWFnZXMuREVDT1JBVE9SX0ZPTERFUl9JQ09OKTsKKwkJfQorCX0gLy8gRGVjb3JhdG9yc1RyZWVOb2RlCisKKwkvKioKKwkgKiBUaGlzIGNsYXNzIGlzIGEge0BsaW5rIElkZW50aWZpYWJsZVRyZWVOb2RlfSB0aGF0IHJlcHJlc2VudHMKKwkgKiB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNjZW5hcmlvLlNjZW5hcmlvfXMuCisJICovCisJcHVibGljIHN0YXRpYyBjbGFzcyBTY2VuYXJpb3NUcmVlTm9kZSBleHRlbmRzIElkZW50aWZpYWJsZVRyZWVOb2RlIHsKKworCQkvKioKKwkJICogQHBhcmFtIHByb2plY3QKKwkJICogICAgICAgICAgICB0aGUge0BsaW5rIElQcm9qZWN0fSB0aGF0IGlzIHRoZSBwYXJlbnQgb2YgdGhpcworCQkgKiAgICAgICAgICAgIHtAbGluayBJZGVudGlmaWFibGVUcmVlTm9kZX0uCisJCSAqLworCQlwdWJsaWMgU2NlbmFyaW9zVHJlZU5vZGUoSVByb2plY3QgcHJvamVjdCkgeworCQkJc3VwZXIocHJvamVjdCwgTWVzc2FnZXMuZ2V0U3RyaW5nKCJFWFBMT1JFUi5TQ0VOQVJJT19GT0xERVIiKSwKKwkJCQkJTmV3U1RFTVByb2plY3RXaXphcmQuU0NFQU5BUklPU19GT0xERVJfTkFNRSwKKwkJCQkJb3JnLmVjbGlwc2Uuc3RlbS51aS5JU2hhcmVkSW1hZ2VzLlNDRU5BUklPX0ZPTERFUl9JQ09OKTsKKwkJfQorCX0gLy8gU2NlbmFyaW9zVHJlZU5vZGUKKworCS8qKgorCSAqIFRoaXMgY2xhc3MgaXMgYSB7QGxpbmsgSWRlbnRpZmlhYmxlVHJlZU5vZGV9IHRoYXQgcmVwcmVzZW50cworCSAqIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZXhwZXJpbWVudC5FeHBlcmltZW50fXMuCisJICovCisJcHVibGljIHN0YXRpYyBjbGFzcyBFeHBlcmltZW50c1RyZWVOb2RlIGV4dGVuZHMgSWRlbnRpZmlhYmxlVHJlZU5vZGUgeworCisJCS8qKgorCQkgKiBAcGFyYW0gcHJvamVjdAorCQkgKiAgICAgICAgICAgIHRoZSB7QGxpbmsgSVByb2plY3R9IHRoYXQgaXMgdGhlIHBhcmVudCBvZiB0aGlzCisJCSAqICAgICAgICAgICAge0BsaW5rIElkZW50aWZpYWJsZVRyZWVOb2RlfS4KKwkJICovCisJCXB1YmxpYyBFeHBlcmltZW50c1RyZWVOb2RlKElQcm9qZWN0IHByb2plY3QpIHsKKwkJCXN1cGVyKHByb2plY3QsIE1lc3NhZ2VzLmdldFN0cmluZygiRVhQTE9SRVIuRVhQRVJJTUVOVF9GT0xERVIiKSwKKwkJCQkJTmV3U1RFTVByb2plY3RXaXphcmQuRVhQRVJJTUVOVFNfRk9MREVSX05BTUUsCisJCQkJCW9yZy5lY2xpcHNlLnN0ZW0udWkuSVNoYXJlZEltYWdlcy5FWFBFUklNRU5UX0ZPTERFUl9JQ09OKTsKKwkJfQorCX0gLy8gRXhwZXJpbWVudHNUcmVlTm9kZQorCisJLyoqCisJICogVGhpcyBjbGFzcyBpcyBhIHtAbGluayBJZGVudGlmaWFibGVUcmVlTm9kZX0gdGhhdCByZXByZXNlbnRzCisJICoge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zZXF1ZW5jZXIuU2VxdWVuY2VyfXMuCisJICovCisJcHVibGljIHN0YXRpYyBjbGFzcyBTZXF1ZW5jZXJzVHJlZU5vZGUgZXh0ZW5kcyBJZGVudGlmaWFibGVUcmVlTm9kZSB7CisKKwkJLyoqCisJCSAqIEBwYXJhbSBwcm9qZWN0CisJCSAqICAgICAgICAgICAgdGhlIHtAbGluayBJUHJvamVjdH0gdGhhdCBpcyB0aGUgcGFyZW50IG9mIHRoaXMKKwkJICogICAgICAgICAgICB7QGxpbmsgSWRlbnRpZmlhYmxlVHJlZU5vZGV9LgorCQkgKi8KKwkJcHVibGljIFNlcXVlbmNlcnNUcmVlTm9kZShJUHJvamVjdCBwcm9qZWN0KSB7CisJCQlzdXBlcihwcm9qZWN0LCBNZXNzYWdlcy5nZXRTdHJpbmcoIkVYUExPUkVSLlNFUVVFTkNFUl9GT0xERVIiKSwKKwkJCQkJTmV3U1RFTVByb2plY3RXaXphcmQuU0VRVUVOQ0VSU19GT0xERVJfTkFNRSwKKwkJCQkJb3JnLmVjbGlwc2Uuc3RlbS51aS5JU2hhcmVkSW1hZ2VzLlNFUVVFTkNFUl9GT0xERVJfSUNPTik7CisJCX0KKwl9IC8vIFNlcXVlbmNlcnNUcmVlTm9kZQorCisJLyoqCisJICogVGhpcyBjbGFzcyBpcyBhIHtAbGluayBJZGVudGlmaWFibGVUcmVlTm9kZX0gdGhhdCByZXByZXNlbnRzCisJICoge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5Nb2RlbH1zLgorCSAqLworCXB1YmxpYyBzdGF0aWMgY2xhc3MgTW9kZWxzVHJlZU5vZGUgZXh0ZW5kcyBJZGVudGlmaWFibGVUcmVlTm9kZSB7CisKKwkJLyoqCisJCSAqIEBwYXJhbSBwcm9qZWN0CisJCSAqICAgICAgICAgICAgdGhlIHtAbGluayBJUHJvamVjdH0gdGhhdCBpcyB0aGUgcGFyZW50IG9mIHRoaXMKKwkJICogICAgICAgICAgICB7QGxpbmsgSWRlbnRpZmlhYmxlVHJlZU5vZGV9LgorCQkgKi8KKwkJcHVibGljIE1vZGVsc1RyZWVOb2RlKElQcm9qZWN0IHByb2plY3QpIHsKKwkJCXN1cGVyKHByb2plY3QsIE1lc3NhZ2VzLmdldFN0cmluZygiRVhQTE9SRVIuTU9ERUxfRk9MREVSIiksIAorCQkJCQlOZXdTVEVNUHJvamVjdFdpemFyZC5NT0RFTFNfRk9MREVSX05BTUUsCisJCQkJCW9yZy5lY2xpcHNlLnN0ZW0udWkuSVNoYXJlZEltYWdlcy5NT0RFTF9GT0xERVJfSUNPTik7CisJCX0KKwl9IC8vIE1vZGVsc1RyZWVOb2RlCisKKwkvKioKKwkgKiBUaGlzIGNsYXNzIGlzIGEge0BsaW5rIElkZW50aWZpYWJsZVRyZWVOb2RlfSB0aGF0IHJlcHJlc2VudHMKKwkgKiB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkdyYXBofXMuCisJICovCisJcHVibGljIHN0YXRpYyBjbGFzcyBHcmFwaHNUcmVlTm9kZSBleHRlbmRzIElkZW50aWZpYWJsZVRyZWVOb2RlIHsKKworCQkvKioKKwkJICogQHBhcmFtIHByb2plY3QKKwkJICogICAgICAgICAgICB0aGUge0BsaW5rIElQcm9qZWN0fSB0aGF0IGlzIHRoZSBwYXJlbnQgb2YgdGhpcworCQkgKiAgICAgICAgICAgIHtAbGluayBJZGVudGlmaWFibGVUcmVlTm9kZX0uCisJCSAqLworCQlwdWJsaWMgR3JhcGhzVHJlZU5vZGUoSVByb2plY3QgcHJvamVjdCkgeworCQkJc3VwZXIocHJvamVjdCwgTWVzc2FnZXMuZ2V0U3RyaW5nKCJFWFBMT1JFUi5HUkFQSF9GT0xERVIiKSwgCisJCQkJCU5ld1NURU1Qcm9qZWN0V2l6YXJkLkdSQVBIU19GT0xERVJfTkFNRSwKKwkJCQkJb3JnLmVjbGlwc2Uuc3RlbS51aS5JU2hhcmVkSW1hZ2VzLkdSQVBIX0ZPTERFUl9JQ09OKTsKKwkJfQorCX0gLy8gR3JhcGhzVHJlZU5vZGUKKworCS8qKgorCSAqIFRoaXMgY2xhc3MgaXMgYSB7QGxpbmsgSWRlbnRpZmlhYmxlVHJlZU5vZGV9IHRoYXQgcmVwcmVzZW50cworCSAqIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUudHJpZ2dlci5UcmlnZ2VyfXMuCisJICovCisJcHVibGljIHN0YXRpYyBjbGFzcyBUcmlnZ2Vyc1RyZWVOb2RlIGV4dGVuZHMgSWRlbnRpZmlhYmxlVHJlZU5vZGUgeworCisJCS8qKgorCQkgKiBAcGFyYW0gcHJvamVjdAorCQkgKiAgICAgICAgICAgIHRoZSB7QGxpbmsgSVByb2plY3R9IHRoYXQgaXMgdGhlIHBhcmVudCBvZiB0aGlzCisJCSAqICAgICAgICAgICAge0BsaW5rIElkZW50aWZpYWJsZVRyZWVOb2RlfS4KKwkJICovCisJCXB1YmxpYyBUcmlnZ2Vyc1RyZWVOb2RlKElQcm9qZWN0IHByb2plY3QpIHsKKwkJCXN1cGVyKHByb2plY3QsIE1lc3NhZ2VzLmdldFN0cmluZygiRVhQTE9SRVIuVFJJR0dFUl9GT0xERVIiKSwgCisJCQkJCU5ld1NURU1Qcm9qZWN0V2l6YXJkLlRSSUdHRVJTX0ZPTERFUl9OQU1FLAorCQkJCQlvcmcuZWNsaXBzZS5zdGVtLnVpLklTaGFyZWRJbWFnZXMuVFJJR0dFUl9GT0xERVJfSUNPTik7CisJCX0KKwl9IC8vIFRyaWdnZXJzVHJlZU5vZGUKKworCS8qKgorCSAqIFRoaXMgY2xhc3MgaXMgYSB7QGxpbmsgSWRlbnRpZmlhYmxlVHJlZU5vZGV9IHRoYXQgcmVwcmVzZW50cworCSAqIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlLlByZWRpY2F0ZX1zLgorCSAqLworCXB1YmxpYyBzdGF0aWMgY2xhc3MgUHJlZGljYXRlc1RyZWVOb2RlIGV4dGVuZHMgSWRlbnRpZmlhYmxlVHJlZU5vZGUgeworCQorCQkvKioKKwkJICogQHBhcmFtIHByb2plY3QKKwkJICogICAgICAgICAgICB0aGUge0BsaW5rIElQcm9qZWN0fSB0aGF0IGlzIHRoZSBwYXJlbnQgb2YgdGhpcworCQkgKiAgICAgICAgICAgIHtAbGluayBJZGVudGlmaWFibGVUcmVlTm9kZX0uCisJCSAqLworCQlwdWJsaWMgUHJlZGljYXRlc1RyZWVOb2RlKElQcm9qZWN0IHByb2plY3QpIHsKKwkJCXN1cGVyKHByb2plY3QsIE1lc3NhZ2VzLmdldFN0cmluZygiRVhQTE9SRVIuUFJFRElDQVRFX0ZPTERFUiIpLCAKKwkJCQkJTmV3U1RFTVByb2plY3RXaXphcmQuUFJFRElDQVRFU19GT0xERVJfTkFNRSwKKwkJCQkJb3JnLmVjbGlwc2Uuc3RlbS51aS5JU2hhcmVkSW1hZ2VzLlBSRURJQ0FURV9GT0xERVJfSUNPTik7CisJCX0KKwl9IC8vIFByZWRpY2F0ZXNUcmVlTm9kZQorCisJLyoqCisJICogVGhpcyBjbGFzcyBpcyBhIHtAbGluayBJZGVudGlmaWFibGVUcmVlTm9kZX0gdGhhdCByZXByZXNlbnRzCisJICoge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5Nb2RpZmllcn1zLgorCSAqLworCXB1YmxpYyBzdGF0aWMgY2xhc3MgTW9kaWZpZXJzVHJlZU5vZGUgZXh0ZW5kcyBJZGVudGlmaWFibGVUcmVlTm9kZSB7CisJCS8qKgorCQkgKiBAcGFyYW0gcHJvamVjdAorCQkgKiAgICAgICAgICAgIHRoZSB7QGxpbmsgSVByb2plY3R9IHRoYXQgaXMgdGhlIHBhcmVudCBvZiB0aGlzCisJCSAqICAgICAgICAgICAge0BsaW5rIElkZW50aWZpYWJsZVRyZWVOb2RlfS4KKwkJICovCisJCXB1YmxpYyBNb2RpZmllcnNUcmVlTm9kZShJUHJvamVjdCBwcm9qZWN0KSB7CisJCQlzdXBlcihwcm9qZWN0LCBNZXNzYWdlcy5nZXRTdHJpbmcoIkVYUExPUkVSLk1PRElGSUVSX0ZPTERFUiIpLCAKKwkJCQkJTmV3U1RFTVByb2plY3RXaXphcmQuTU9ESUZJRVJTX0ZPTERFUl9OQU1FLAorCQkJCQlvcmcuZWNsaXBzZS5zdGVtLnVpLklTaGFyZWRJbWFnZXMuTU9ESUZJRVJfRk9MREVSX0lDT04pOworCQl9CisJfSAvLyBNb2RpZmllcnNUcmVlTm9kZQorCisJCisJLyoqCisJICogVGhpcyBjbGFzcyBpcyBhIHtAbGluayBJZGVudGlmaWFibGVUcmVlTm9kZX0gdGhhdCByZXByZXNlbnRzCisJICoge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5sb2dnZXIuTG9nZ2VyfXMuCisJICovCisJcHVibGljIHN0YXRpYyBjbGFzcyBMb2dnZXJzVHJlZU5vZGUgZXh0ZW5kcyBJZGVudGlmaWFibGVUcmVlTm9kZSB7CisJCisJCS8qKgorCQkgKiBAcGFyYW0gcHJvamVjdAorCQkgKiAgICAgICAgICAgIHRoZSB7QGxpbmsgSVByb2plY3R9IHRoYXQgaXMgdGhlIHBhcmVudCBvZiB0aGlzCisJCSAqICAgICAgICAgICAge0BsaW5rIElkZW50aWZpYWJsZVRyZWVOb2RlfS4KKwkJICovCisJCXB1YmxpYyBMb2dnZXJzVHJlZU5vZGUoSVByb2plY3QgcHJvamVjdCkgeworCQkJc3VwZXIocHJvamVjdCwgTWVzc2FnZXMuZ2V0U3RyaW5nKCJFWFBMT1JFUi5MT0dHRVJfRk9MREVSIiksIAorCQkJCQlOZXdTVEVNUHJvamVjdFdpemFyZC5MT0dHRVJTX0ZPTERFUl9OQU1FLAorCQkJCQlvcmcuZWNsaXBzZS5zdGVtLnVpLklTaGFyZWRJbWFnZXMuTE9HR0VSX0ZPTERFUl9JQ09OKTsKKwkJfQorCX0gLy8gTG9nZ2Vyc1RyZWVOb2RlCisJCit9IC8vIElkZW50aWZpYWJsZVRyZWVOb2RlClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3ZpZXdzL2V4cGxvcmVyL0lkZW50aWZpYWJsZVRyZWVOb2RlQ29udGVudFByb3ZpZGVyLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvdmlld3MvZXhwbG9yZXIvSWRlbnRpZmlhYmxlVHJlZU5vZGVDb250ZW50UHJvdmlkZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMjhlY2Y0Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3ZpZXdzL2V4cGxvcmVyL0lkZW50aWZpYWJsZVRyZWVOb2RlQ29udGVudFByb3ZpZGVyLmphdmEKQEAgLTAsMCArMSwxMzEgQEAKKy8vIElkZW50aWZpYWJsZVRyZWVOb2RlQ29udGVudFByb3ZpZGVyLmphdmEKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS51aS52aWV3cy5leHBsb3JlcjsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklUcmVlQ29udGVudFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuVmlld2VyOworCisvKioKKyAqIFRoaXMgY2xhc3MgaXMgYSB7QGxpbmsgSUNvbnRlbnRQcm92aWRlcn0gZm9yIHRoZSBjb250cmlidXRpb25zIHRvIHRoZQorICogb3JnLmVjbGlwc2UudWksbmF2aWdhdG9yLm5hdmlnYXRvckNvbnRlbnRzIGV4dGVuc2lvbiBwb2ludCB0aGF0IHJlcHJlc2VudCB0aGUKKyAqIGNvbXBvbmVudHMgb2YgdGhlIFNURU0gbW9kZWxpbmcgZnJhbWV3b3JrLiBUaGVzZSBjb250cmlidXRpb25zIGFyZSBpbnN0YW5jZXMKKyAqIG9mIHtAbGluayBJZGVudGlmaWFibGVUcmVlTm9kZX0gd2hpY2ggYXJlIHVzZWQgdG8gYWdncmVnYXRlIGluc3RhbmNlcyBvZiBhCisgKiBzaW5nbGUgdHlwZSBvZiBjb21wb25lbnQgaW4gYSBTVEVNIHByb2plY3QuIEZvciBpbnN0YW5jZSwgYWxsIG9mIHRoZQorICogc2VyaWFsaXplZCB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLkRlY29yYXRvcn0gaW5zdGFuY2VzLCBvciBhbGwgb2YKKyAqIHRoZSB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNjZW5hcmlvLlNjZW5hcmlvfSBpbnN0YW5jZXMuCisgKi8KK3B1YmxpYyBjbGFzcyBJZGVudGlmaWFibGVUcmVlTm9kZUNvbnRlbnRQcm92aWRlciBpbXBsZW1lbnRzCisJCUlUcmVlQ29udGVudFByb3ZpZGVyIHsKKworCXByb3RlY3RlZCBPYmplY3QgaW5wdXQgPSBudWxsOworCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklUcmVlQ29udGVudFByb3ZpZGVyI2dldENoaWxkcmVuKGphdmEubGFuZy4KKwkgKiAgICAgIE9iamVjdCkKKwkgKi8KKwlwdWJsaWMgT2JqZWN0W10gZ2V0Q2hpbGRyZW4oT2JqZWN0IHBhcmVudEVsZW1lbnQpIHsKKwkJT2JqZWN0W10gcmV0VmFsdWUgPSBudWxsOworCQlpZiAocGFyZW50RWxlbWVudCBpbnN0YW5jZW9mIElQcm9qZWN0KSB7CisJCQkvLyBZZXMKKwkJCXJldFZhbHVlID0gbmV3IE9iamVjdFtdIHsKKwkJCQkJbmV3IElkZW50aWZpYWJsZVRyZWVOb2RlLlNjZW5hcmlvc1RyZWVOb2RlKAorCQkJCQkJCShJUHJvamVjdCkgcGFyZW50RWxlbWVudCksCisKKwkJCQkJbmV3IElkZW50aWZpYWJsZVRyZWVOb2RlLkV4cGVyaW1lbnRzVHJlZU5vZGUoCisJCQkJCQkJKElQcm9qZWN0KSBwYXJlbnRFbGVtZW50KSwKKworCQkJCQluZXcgSWRlbnRpZmlhYmxlVHJlZU5vZGUuU2VxdWVuY2Vyc1RyZWVOb2RlKAorCQkJCQkJCShJUHJvamVjdCkgcGFyZW50RWxlbWVudCksCisKKwkJCQkJbmV3IElkZW50aWZpYWJsZVRyZWVOb2RlLk1vZGVsc1RyZWVOb2RlKAorCQkJCQkJCShJUHJvamVjdCkgcGFyZW50RWxlbWVudCksCisKKwkJCQkJbmV3IElkZW50aWZpYWJsZVRyZWVOb2RlLkdyYXBoc1RyZWVOb2RlKAorCQkJCQkJCShJUHJvamVjdCkgcGFyZW50RWxlbWVudCksCisKKwkJCQkJbmV3IElkZW50aWZpYWJsZVRyZWVOb2RlLkRlY29yYXRvcnNUcmVlTm9kZSgKKwkJCQkJCQkoSVByb2plY3QpIHBhcmVudEVsZW1lbnQpLAorCisJCQkJCW5ldyBJZGVudGlmaWFibGVUcmVlTm9kZS5UcmlnZ2Vyc1RyZWVOb2RlKAorCQkJCQkJCShJUHJvamVjdCkgcGFyZW50RWxlbWVudCksCisKKwkJCQkJbmV3IElkZW50aWZpYWJsZVRyZWVOb2RlLlByZWRpY2F0ZXNUcmVlTm9kZSgKKwkJCQkJCQkoSVByb2plY3QpIHBhcmVudEVsZW1lbnQpLAorCQkJCQkJCQorCQkJCQluZXcgSWRlbnRpZmlhYmxlVHJlZU5vZGUuTW9kaWZpZXJzVHJlZU5vZGUoCisJCQkJCQkJCQkoSVByb2plY3QpIHBhcmVudEVsZW1lbnQpLAorCisJCQkJCW5ldyBJZGVudGlmaWFibGVUcmVlTm9kZS5Mb2dnZXJzVHJlZU5vZGUoCisJCQkJCQkJKElQcm9qZWN0KSBwYXJlbnRFbGVtZW50KSwKKwkJCQkJCisJCQl9OyAvLyBuZXcgT2JqZWN0CisJCX0gLy8gaWYgSVByb2plY3QKKwkJZWxzZSBpZiAocGFyZW50RWxlbWVudCBpbnN0YW5jZW9mIElkZW50aWZpYWJsZVRyZWVOb2RlKSB7CisJCQkvLyBZZXMKKwkJCS8vIGZpbmFsIElkZW50aWZpYWJsZVRyZWVOb2RlIGN0biA9IChJZGVudGlmaWFibGVUcmVlTm9kZSkKKwkJCS8vIHBhcmVudEVsZW1lbnQ7CisJCQlyZXRWYWx1ZSA9IG5ldyBPYmplY3RbMF07IC8vIG5ldmVyIG51bGwKKworCQl9IC8vIGlmIElkZW50aWZpYWJsZVRyZWVOb2RlCisJCXJldHVybiByZXRWYWx1ZTsKKwl9IC8vIGdldENoaWxkcmVuCisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVRyZWVDb250ZW50UHJvdmlkZXIjZ2V0UGFyZW50KGphdmEubGFuZy4KKwkgKiAgICAgIE9iamVjdCkKKwkgKi8KKwlwdWJsaWMgT2JqZWN0IGdldFBhcmVudChPYmplY3QgZWxlbWVudCkgeworCQlPYmplY3QgcmV0VmFsdWUgPSBudWxsOworCQlpZiAoZWxlbWVudCBpbnN0YW5jZW9mIElkZW50aWZpYWJsZVRyZWVOb2RlKSB7CisJCQkvLyBZZXMKKwkJCWZpbmFsIElkZW50aWZpYWJsZVRyZWVOb2RlIGN0biA9IChJZGVudGlmaWFibGVUcmVlTm9kZSkgZWxlbWVudDsKKwkJCXJldFZhbHVlID0gY3RuLmdldFByb2plY3QoKTsKKwkJfSAvLyBpZiBJZGVudGlmaWFibGVUcmVlTm9kZQorCisJCXJldHVybiByZXRWYWx1ZTsKKwl9IC8vIGdldFBhcmVudAorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTdHJ1Y3R1cmVkQ29udGVudFByb3ZpZGVyI2dldEVsZW1lbnRzKGphdmEKKwkgKiAgICAgIC5sYW5nLk9iamVjdCkKKwkgKi8KKwlwdWJsaWMgT2JqZWN0W10gZ2V0RWxlbWVudHMoT2JqZWN0IGlucHV0RWxlbWVudCkgeworCQlyZXR1cm4gZ2V0Q2hpbGRyZW4oaW5wdXRFbGVtZW50KTsKKwl9CisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVRyZWVDb250ZW50UHJvdmlkZXIjaGFzQ2hpbGRyZW4oamF2YS5sYW5nLgorCSAqICAgICAgT2JqZWN0KQorCSAqLworCXB1YmxpYyBib29sZWFuIGhhc0NoaWxkcmVuKEBTdXBwcmVzc1dhcm5pbmdzKCJ1bnVzZWQiKSBPYmplY3QgZWxlbWVudCkgeworCQlyZXR1cm4gZmFsc2U7CisJfQorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklDb250ZW50UHJvdmlkZXIjZGlzcG9zZSgpCisJICovCisJcHVibGljIHZvaWQgZGlzcG9zZSgpIHsKKwkJLy8gTm90aGluZworCX0KKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JQ29udGVudFByb3ZpZGVyI2lucHV0Q2hhbmdlZChvcmcuZWNsaXBzZS4KKwkgKiAgICAgIGpmYWNlLnZpZXdlcnMuVmlld2VyLCBqYXZhLmxhbmcuT2JqZWN0LCBqYXZhLmxhbmcuT2JqZWN0KQorCSAqLworCXB1YmxpYyB2b2lkIGlucHV0Q2hhbmdlZChAU3VwcHJlc3NXYXJuaW5ncygidW51c2VkIikgVmlld2VyIHZpZXdlciwKKwkJCUBTdXBwcmVzc1dhcm5pbmdzKCJ1bnVzZWQiKSBPYmplY3Qgb2xkSW5wdXQsIE9iamVjdCBuZXdJbnB1dCkgeworCQlpbnB1dCA9IG5ld0lucHV0OworCX0KKworfSAvLyBJZGVudGlmaWFibGVUcmVlTm9kZUNvbnRlbnRQcm92aWRlcgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS92aWV3cy9leHBsb3Jlci9JZGVudGlmaWFibGVUcmVlTm9kZUxhYmVsUHJvdmlkZXIuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS92aWV3cy9leHBsb3Jlci9JZGVudGlmaWFibGVUcmVlTm9kZUxhYmVsUHJvdmlkZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yODdiNDBmCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3ZpZXdzL2V4cGxvcmVyL0lkZW50aWZpYWJsZVRyZWVOb2RlTGFiZWxQcm92aWRlci5qYXZhCkBAIC0wLDAgKzEsODkgQEAKKy8vIElkZW50aWZpYWJsZVRyZWVOb2RlTGFiZWxQcm92aWRlci5qYXZhCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0udWkudmlld3MuZXhwbG9yZXI7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JTGFiZWxQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklMYWJlbFByb3ZpZGVyTGlzdGVuZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS51aS5BY3RpdmF0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmdyYXBoaWNzLkltYWdlOworCisvKioKKyAqIFRoaXMgY2xhc3MgaXMgYW4ge0BsaW5rIElMYWJlbFByb3ZpZGVyfSBmb3IgdGhlIGNvbnRyaWJ1dGlvbnMgdG8gdGhlCisgKiBvcmcuZWNsaXBzZS51aSxuYXZpZ2F0b3IubmF2aWdhdG9yQ29udGVudHMgZXh0ZW5zaW9uIHBvaW50IHRoYXQgcmVwcmVzZW50IHRoZQorICogY29tcG9uZW50cyBvZiB0aGUgU1RFTSBtb2RlbGluZyBmcmFtZXdvcmsuIFRoZXNlIGNvbnRyaWJ1dGlvbnMgYXJlIGluc3RhbmNlcworICogb2Yge0BsaW5rIElkZW50aWZpYWJsZVRyZWVOb2RlfSB3aGljaCBhcmUgdXNlZCB0byBhZ2dyZWdhdGUgaW5zdGFuY2VzIG9mIGEKKyAqIHNpbmdsZSB0eXBlIG9mIGNvbXBvbmVudCBpbiBhIFNURU0gcHJvamVjdC4gRm9yIGluc3RhbmNlLCBhbGwgb2YgdGhlCisgKiBzZXJpYWxpemVkIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuRGVjb3JhdG9yfSBpbnN0YW5jZXMsIG9yIGFsbCBvZgorICogdGhlIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2NlbmFyaW8uU2NlbmFyaW99IGluc3RhbmNlcy4KKyAqLworcHVibGljIGNsYXNzIElkZW50aWZpYWJsZVRyZWVOb2RlTGFiZWxQcm92aWRlciBpbXBsZW1lbnRzIElMYWJlbFByb3ZpZGVyIHsKKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JTGFiZWxQcm92aWRlciNnZXRJbWFnZShqYXZhLmxhbmcuT2JqZWN0KQorCSAqLworCXB1YmxpYyBJbWFnZSBnZXRJbWFnZShPYmplY3QgZWxlbWVudCkgeworCQlJbWFnZSByZXRWYWx1ZSA9IG51bGw7CisJCWlmIChlbGVtZW50IGluc3RhbmNlb2YgSWRlbnRpZmlhYmxlVHJlZU5vZGUpIHsKKwkJCS8vIFllcworCQkJZmluYWwgSWRlbnRpZmlhYmxlVHJlZU5vZGUgY3RuID0gKElkZW50aWZpYWJsZVRyZWVOb2RlKSBlbGVtZW50OworCQkJcmV0VmFsdWUgPSBBY3RpdmF0b3IuZ2V0RGVmYXVsdCgpLmdldEltYWdlUmVnaXN0cnkoKS5nZXQoCisJCQkJCWN0bi5nZXRJbWFnZUtleSgpKTsKKwkJfSAvLyBpZiBJZGVudGlmaWFibGVUcmVlTm9kZQorCQlyZXR1cm4gcmV0VmFsdWU7CisJfSAvLyBnZXRJbWFnZQorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklMYWJlbFByb3ZpZGVyI2dldFRleHQoamF2YS5sYW5nLk9iamVjdCkKKwkgKi8KKwlwdWJsaWMgU3RyaW5nIGdldFRleHQoT2JqZWN0IGVsZW1lbnQpIHsKKwkJcmV0dXJuICgoSWRlbnRpZmlhYmxlVHJlZU5vZGUpIGVsZW1lbnQpLmdldENvbXBvbmVudE5hbWUoKTsKKwl9CisKKwkvKioKKwkgKiBAc2VlCisJICogCW9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSUJhc2VMYWJlbFByb3ZpZGVyI2FkZExpc3RlbmVyKG9yZy5lY2xpcHNlLgorCSAqIAlqZmFjZS52aWV3ZXJzLklMYWJlbFByb3ZpZGVyTGlzdGVuZXIpCisJICovCisJcHVibGljIHZvaWQgYWRkTGlzdGVuZXIoCisJCQlAU3VwcHJlc3NXYXJuaW5ncygidW51c2VkIikgSUxhYmVsUHJvdmlkZXJMaXN0ZW5lciBsaXN0ZW5lcikgeworCQkvLyBOb3RoaW5nCisJfQorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklCYXNlTGFiZWxQcm92aWRlciNkaXNwb3NlKCkKKwkgKi8KKwlwdWJsaWMgdm9pZCBkaXNwb3NlKCkgeworCQkvLyBOb3RoaW5nCisJfQorCisJLyoqCisJICogQHNlZQorCSAqIAlvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklCYXNlTGFiZWxQcm92aWRlciNpc0xhYmVsUHJvcGVydHkoamF2YS5sYW5nCisJICogCS5PYmplY3QsIGphdmEubGFuZy5TdHJpbmcpCisJICovCisJcHVibGljIGJvb2xlYW4gaXNMYWJlbFByb3BlcnR5KEBTdXBwcmVzc1dhcm5pbmdzKCJ1bnVzZWQiKSBPYmplY3QgZWxlbWVudCwKKwkJCUBTdXBwcmVzc1dhcm5pbmdzKCJ1bnVzZWQiKSBTdHJpbmcgcHJvcGVydHkpIHsKKwkJcmV0dXJuIGZhbHNlOworCX0KKworCS8qKgorCSAqIEBzZWUKKwkgKiAJb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JQmFzZUxhYmVsUHJvdmlkZXIjcmVtb3ZlTGlzdGVuZXIob3JnLmVjbGlwc2UKKwkgKiAJLmpmYWNlLnZpZXdlcnMuSUxhYmVsUHJvdmlkZXJMaXN0ZW5lcikKKwkgKi8KKwlwdWJsaWMgdm9pZCByZW1vdmVMaXN0ZW5lcigKKwkJCUBTdXBwcmVzc1dhcm5pbmdzKCJ1bnVzZWQiKSBJTGFiZWxQcm92aWRlckxpc3RlbmVyIGxpc3RlbmVyKSB7CisJCS8vIE5vdGhpbmcKKwl9CisKK30gLy8gSWRlbnRpZmlhYmxlVHJlZU5vZGVMYWJlbFByb3ZpZGVyClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3ZpZXdzL2V4cGxvcmVyL01lc3NhZ2VzLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvdmlld3MvZXhwbG9yZXIvTWVzc2FnZXMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNGRjZWE5Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3ZpZXdzL2V4cGxvcmVyL01lc3NhZ2VzLmphdmEKQEAgLTAsMCArMSw0NSBAQAorLy8gTWVzc2FnZXMuamF2YQorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnVpLnZpZXdzLmV4cGxvcmVyOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGphdmEudXRpbC5NaXNzaW5nUmVzb3VyY2VFeGNlcHRpb247CitpbXBvcnQgamF2YS51dGlsLlJlc291cmNlQnVuZGxlOworCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLkNvbnN0YW50czsKKworCisvKioKKyAqIFRoaXMgY2xhc3MgaXMgdGhlIFJlc291cmNlIEJ1bmRsZSBmb3IgdGhpcyBwYWNrYWdlLgorICovCitwdWJsaWMgY2xhc3MgTWVzc2FnZXMgeworCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBCVU5ETEVfTkFNRSA9IENvbnN0YW50cy5JRF9ST09UICsgIi51aS52aWV3cy5leHBsb3Jlci5tZXNzYWdlcyI7IC8vJE5PTi1OTFMtMSQKKworCXByaXZhdGUgc3RhdGljIGZpbmFsIFJlc291cmNlQnVuZGxlIFJFU09VUkNFX0JVTkRMRSA9IFJlc291cmNlQnVuZGxlLmdldEJ1bmRsZShCVU5ETEVfTkFNRSk7CisKKwlwcml2YXRlIE1lc3NhZ2VzKCkgeworCQkvLyBlbXB0eQorCX0KKworCS8qKgorCSAqIEBwYXJhbSBrZXkKKwkgKiAgICAgICAgICAgIHRoZSBrZXkgZm9yIHRoZSBtZXNzYWdlCisJICogQHJldHVybiB0aGUgc3RyaW5nIHRoYXQgbWF0Y2hlcyB0aGUga2V5CisJICovCisJcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0U3RyaW5nKFN0cmluZyBrZXkpIHsKKwkJdHJ5IHsKKwkJCXJldHVybiBSRVNPVVJDRV9CVU5ETEUuZ2V0U3RyaW5nKGtleSk7CisJCX0gY2F0Y2ggKE1pc3NpbmdSZXNvdXJjZUV4Y2VwdGlvbiBlKSB7CisJCQlyZXR1cm4gJyEnICsga2V5ICsgJyEnOworCQl9CisJfSAvLyBnZXRTdHJpbmcKK30gLy8gV2l6YXJkTWVzc2FnZXMKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS92aWV3cy9leHBsb3Jlci9SZWNvcmRlZEluc3RhbmNlVHJlZU5vZGUuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS92aWV3cy9leHBsb3Jlci9SZWNvcmRlZEluc3RhbmNlVHJlZU5vZGUuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNDY4MzFkCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3ZpZXdzL2V4cGxvcmVyL1JlY29yZGVkSW5zdGFuY2VUcmVlTm9kZS5qYXZhCkBAIC0wLDAgKzEsNzYgQEAKKy8vIFJlY29yZGVkSW5zdGFuY2VUcmVlTm9kZS5qYXZhCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0udWkudmlld3MuZXhwbG9yZXI7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioKKyAqIFRoaXMgY2xhc3MgcmVwcmVzZW50cyBhbiBpbnN0YW5jZSBvZiBhIHJlY29yZGVkCisgKiB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5qb2JzLnNpbXVsYXRpb24uU2ltdWxhdGlvbn0uCisgKi8KK3B1YmxpYyBjbGFzcyBSZWNvcmRlZEluc3RhbmNlVHJlZU5vZGUgeworCisJcHJpdmF0ZSBmaW5hbCBSZWNvcmRlZFRyZWVOb2RlIHBhcmVudDsKKwlwcml2YXRlIGZpbmFsIFJlY29yZGVkSW5zdGFuY2VUcmVlTm9kZSBpbnN0YW5jZVBhcmVudDsKKwlwcml2YXRlIGZpbmFsIFN0cmluZyBuYW1lOworCisJLyoqCisJICogQHBhcmFtIHBhcmVudAorCSAqIEBwYXJhbSBuYW1lCisJICovCisJcHVibGljIFJlY29yZGVkSW5zdGFuY2VUcmVlTm9kZShmaW5hbCBSZWNvcmRlZFRyZWVOb2RlIHBhcmVudCwKKwkJCWZpbmFsIFN0cmluZyBuYW1lKSB7CisJCXN1cGVyKCk7CisJCXRoaXMucGFyZW50ID0gcGFyZW50OworCQl0aGlzLm5hbWUgPSBuYW1lOworCQl0aGlzLmluc3RhbmNlUGFyZW50ID0gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBAcGFyYW0gcGFyZW50CisJICogQHBhcmFtIG5hbWUKKwkgKi8KKwlwdWJsaWMgUmVjb3JkZWRJbnN0YW5jZVRyZWVOb2RlKGZpbmFsIFJlY29yZGVkSW5zdGFuY2VUcmVlTm9kZSBwYXJlbnQsCisJCQlmaW5hbCBTdHJpbmcgbmFtZSkgeworCQlzdXBlcigpOworCQl0aGlzLnBhcmVudCA9IG51bGw7CisJCXRoaXMubmFtZSA9IG5hbWU7CisJCXRoaXMuaW5zdGFuY2VQYXJlbnQgPSBwYXJlbnQ7CisJfQorCS8qKgorCSAqIEByZXR1cm4gdGhlIHBhcmVudAorCSAqLworCXB1YmxpYyBPYmplY3QgZ2V0UGFyZW50KCkgeworCQlyZXR1cm4gcGFyZW50OworCX0KKwkvKioKKwkgKiBAcmV0dXJuIHRoZSBpbnN0YW5jZSBwYXJlbnQKKwkgKi8KKwlwdWJsaWMgT2JqZWN0IGdldEluc3RhbmNlUGFyZW50KCkgeworCQlyZXR1cm4gaW5zdGFuY2VQYXJlbnQ7CisJfQorCisJLyoqCisJICogQHJldHVybiB0aGUgbmFtZQorCSAqLworCXB1YmxpYyBmaW5hbCBTdHJpbmcgZ2V0TmFtZSgpIHsKKwkJcmV0dXJuIG5hbWU7CisJfQorCisJLyoqCisJICogQHNlZSBqYXZhLmxhbmcuT2JqZWN0I3RvU3RyaW5nKCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkgeworCQlyZXR1cm4gZ2V0TmFtZSgpOworCX0KKworfSAvLyBSZWNvcmRlZEluc3RhbmNlVHJlZU5vZGUKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvdmlld3MvZXhwbG9yZXIvUmVjb3JkZWRJbnN0YW5jZVRyZWVOb2RlQ29udGVudFByb3ZpZGVyLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvdmlld3MvZXhwbG9yZXIvUmVjb3JkZWRJbnN0YW5jZVRyZWVOb2RlQ29udGVudFByb3ZpZGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTM0M2RhYQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS92aWV3cy9leHBsb3Jlci9SZWNvcmRlZEluc3RhbmNlVHJlZU5vZGVDb250ZW50UHJvdmlkZXIuamF2YQpAQCAtMCwwICsxLDc5IEBACisvLyBSZWNvcmRlZEluc3RhbmNlVHJlZU5vZGVDb250ZW50UHJvdmlkZXIuamF2YQorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnVpLnZpZXdzLmV4cGxvcmVyOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVRyZWVDb250ZW50UHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5WaWV3ZXI7CisKKy8qKgorICogVGhpcyBjbGFzcyBpcyBhIHtAbGluayBJVHJlZUNvbnRlbnRQcm92aWRlcn0gZm9yIHtAbGluaworICogUmVjb3JkZWRJbnN0YW5jZVRyZWVOb2RlfXMgd2hpY2ggYXBwZWFyIGluIHRoZSB7QGxpbmsgQ29tbW9uTmF2aWdhdG9yfQorICogZnJhbWV3b3JrIHRoYXQgaXMgdXNlZCB0byBleHBsb3JlIFNURU0gUHJvamVjdHMuCisgKiAKKyAqIEBzZWUgUmVjb3JkZWRJbnN0YW5jZVRyZWVOb2RlTGFiZWxQcm92aWRlcgorICovCitAU3VwcHJlc3NXYXJuaW5ncygidW51c2VkIikKK3B1YmxpYyBhYnN0cmFjdCBjbGFzcyBSZWNvcmRlZEluc3RhbmNlVHJlZU5vZGVDb250ZW50UHJvdmlkZXIgaW1wbGVtZW50cworCQlJVHJlZUNvbnRlbnRQcm92aWRlciB7CisKKwkvKioKKwkgKiBAc2VlCisJICogCW9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVRyZWVDb250ZW50UHJvdmlkZXIjZ2V0Q2hpbGRyZW4oamF2YS5sYW5nLgorCSAqIAlPYmplY3QpCisJICovCisJYWJzdHJhY3QgcHVibGljIE9iamVjdFtdIGdldENoaWxkcmVuKE9iamVjdCBwYXJlbnRFbGVtZW50KTsKKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JVHJlZUNvbnRlbnRQcm92aWRlciNnZXRQYXJlbnQoamF2YS5sYW5nLgorCSAqIAlPYmplY3QpCisJICovCisJcHVibGljIE9iamVjdCBnZXRQYXJlbnQoT2JqZWN0IGVsZW1lbnQpIHsKKwkJT2JqZWN0IHJldFZhbHVlID0gbnVsbDsKKwkJaWYgKGVsZW1lbnQgaW5zdGFuY2VvZiBSZWNvcmRlZEluc3RhbmNlVHJlZU5vZGUpIHsKKwkJCXJldFZhbHVlID0gKChSZWNvcmRlZEluc3RhbmNlVHJlZU5vZGUpIGVsZW1lbnQpLmdldFBhcmVudCgpOworCQl9IC8vIGlmIElkZW50aWZpYWJsZUluc3RhbmNlVHJlZU5vZGUKKwkJcmV0dXJuIHJldFZhbHVlOworCX0KKworCS8qKgorCSAqIEBzZWUKKwkgKiAJb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JVHJlZUNvbnRlbnRQcm92aWRlciNoYXNDaGlsZHJlbihqYXZhLmxhbmcuCisJICogCU9iamVjdCkKKwkgKi8KKwlhYnN0cmFjdCBwdWJsaWMgYm9vbGVhbiBoYXNDaGlsZHJlbihPYmplY3QgZWxlbWVudCk7CisKKwkvKioKKwkgKiBAc2VlCisJICogCW9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVN0cnVjdHVyZWRDb250ZW50UHJvdmlkZXIjZ2V0RWxlbWVudHMoamF2YQorCSAqIAkubGFuZy5PYmplY3QpCisJICovCisJcHVibGljIE9iamVjdFtdIGdldEVsZW1lbnRzKE9iamVjdCBpbnB1dEVsZW1lbnQpIHsKKwkJcmV0dXJuIGdldENoaWxkcmVuKGlucHV0RWxlbWVudCk7CisJfQorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklDb250ZW50UHJvdmlkZXIjZGlzcG9zZSgpCisJICovCisJcHVibGljIHZvaWQgZGlzcG9zZSgpIHsKKwkJLy8gTm90aGluZworCX0KKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JQ29udGVudFByb3ZpZGVyI2lucHV0Q2hhbmdlZChvcmcuZWNsaXBzZS4KKwkgKiAJamZhY2Uudmlld2Vycy5WaWV3ZXIsIGphdmEubGFuZy5PYmplY3QsIGphdmEubGFuZy5PYmplY3QpCisJICovCisJcHVibGljIHZvaWQgaW5wdXRDaGFuZ2VkKFZpZXdlciB2aWV3ZXIsIE9iamVjdCBvbGRJbnB1dCwgT2JqZWN0IG5ld0lucHV0KSB7CisJCS8vIE5vdGhpbmcKKwl9CisKK30gLy8gUmVjb3JkZWRJbnN0YW5jZVRyZWVOb2RlQ29udGVudFByb3ZpZGVyClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3ZpZXdzL2V4cGxvcmVyL1JlY29yZGVkSW5zdGFuY2VUcmVlTm9kZUxhYmVsUHJvdmlkZXIuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS92aWV3cy9leHBsb3Jlci9SZWNvcmRlZEluc3RhbmNlVHJlZU5vZGVMYWJlbFByb3ZpZGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjFkOTMzZAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS92aWV3cy9leHBsb3Jlci9SZWNvcmRlZEluc3RhbmNlVHJlZU5vZGVMYWJlbFByb3ZpZGVyLmphdmEKQEAgLTAsMCArMSw3NCBAQAorLy8gUmVjb3JkZWRJbnN0YW5jZVRyZWVOb2RlTGFiZWxQcm92aWRlci5qYXZhCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0udWkudmlld3MuZXhwbG9yZXI7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JTGFiZWxQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklMYWJlbFByb3ZpZGVyTGlzdGVuZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmdyYXBoaWNzLkltYWdlOworCisvKioKKyAqIFRoaXMgY2xhc3MgaXMgYSB7QGxpbmsgSUxhYmVsUHJvdmlkZXJ9IGZvciB7QGxpbmsgUmVjb3JkZWRJbnN0YW5jZVRyZWVOb2RlfXMKKyAqIHdoaWNoIGFwcGVhciBpbiB0aGUge0BsaW5rIENvbW1vbk5hdmlnYXRvcn0gZnJhbWV3b3JrIHRoYXQgaXMgdXNlZCB0byBleHBsb3JlCisgKiBTVEVNIFByb2plY3RzLgorICogCisgKiBAc2VlIFJlY29yZGVkSW5zdGFuY2VUcmVlTm9kZUNvbnRlbnRQcm92aWRlcgorICovCitAU3VwcHJlc3NXYXJuaW5ncygidW51c2VkIikKK3B1YmxpYyBhYnN0cmFjdCBjbGFzcyBSZWNvcmRlZEluc3RhbmNlVHJlZU5vZGVMYWJlbFByb3ZpZGVyIGltcGxlbWVudHMKKwkJSUxhYmVsUHJvdmlkZXIgeworCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklMYWJlbFByb3ZpZGVyI2dldEltYWdlKGphdmEubGFuZy5PYmplY3QpCisJICovCisJYWJzdHJhY3QgcHVibGljIEltYWdlIGdldEltYWdlKGZpbmFsIE9iamVjdCBlbGVtZW50KTsKKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JTGFiZWxQcm92aWRlciNnZXRUZXh0KGphdmEubGFuZy5PYmplY3QpCisJICovCisJYWJzdHJhY3QgcHVibGljIFN0cmluZyBnZXRUZXh0KGZpbmFsIE9iamVjdCBlbGVtZW50KTsKKworCS8qKgorCSAqIEBzZWUKKwkgKiAJb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JQmFzZUxhYmVsUHJvdmlkZXIjYWRkTGlzdGVuZXIob3JnLmVjbGlwc2UuCisJICogCWpmYWNlLnZpZXdlcnMuSUxhYmVsUHJvdmlkZXJMaXN0ZW5lcikKKwkgKi8KKwlwdWJsaWMgdm9pZCBhZGRMaXN0ZW5lcihmaW5hbCBJTGFiZWxQcm92aWRlckxpc3RlbmVyIGxpc3RlbmVyKSB7CisJCS8vIE5vdGhpbmcKKwl9CisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSUJhc2VMYWJlbFByb3ZpZGVyI2Rpc3Bvc2UoKQorCSAqLworCXB1YmxpYyB2b2lkIGRpc3Bvc2UoKSB7CisJCS8vIE5vdGhpbmcKKwl9CisKKwkvKioKKwkgKiBAc2VlCisJICogCW9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSUJhc2VMYWJlbFByb3ZpZGVyI2lzTGFiZWxQcm9wZXJ0eShqYXZhLmxhbmcKKwkgKiAJLk9iamVjdCwgamF2YS5sYW5nLlN0cmluZykKKwkgKi8KKwlwdWJsaWMgYm9vbGVhbiBpc0xhYmVsUHJvcGVydHkoZmluYWwgT2JqZWN0IGVsZW1lbnQsIGZpbmFsIFN0cmluZyBwcm9wZXJ0eSkgeworCQlyZXR1cm4gZmFsc2U7CisJfQorCisJLyoqCisJICogQHNlZQorCSAqIAlvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklCYXNlTGFiZWxQcm92aWRlciNyZW1vdmVMaXN0ZW5lcihvcmcuZWNsaXBzZQorCSAqIAkuamZhY2Uudmlld2Vycy5JTGFiZWxQcm92aWRlckxpc3RlbmVyKQorCSAqLworCXB1YmxpYyB2b2lkIHJlbW92ZUxpc3RlbmVyKGZpbmFsIElMYWJlbFByb3ZpZGVyTGlzdGVuZXIgbGlzdGVuZXIpIHsKKwkJLy8gTm90aGluZworCX0KKworfSAvLyBSZWNvcmRlZEluc3RhbmNlVHJlZU5vZGVMYWJlbFByb3ZpZGVyClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3ZpZXdzL2V4cGxvcmVyL1JlY29yZGVkVHJlZU5vZGUuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS92aWV3cy9leHBsb3Jlci9SZWNvcmRlZFRyZWVOb2RlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTY0OTI2NQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS92aWV3cy9leHBsb3Jlci9SZWNvcmRlZFRyZWVOb2RlLmphdmEKQEAgLTAsMCArMSw0MCBAQAorLy8gUmVjb3JkZWRUcmVlTm9kZS5qYXZhCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0udWkudmlld3MuZXhwbG9yZXI7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMKKyAqIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YKKyAqIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcworICogYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKiAKKyAqIENvbnRyaWJ1dG9yczogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0OworCisvKioKKyAqIFRoaXMgY2xhc3MgaXMgdXNlZCBpbiB0aGUge0BsaW5rIG9yZy5lY2xpcHNlLnVpLm5hdmlnYXRvci5Db21tb25OYXZpZ2F0b3J9CisgKiBiYXNlZCBTVEVNIFByb2plY3QgRXhwbG9yZXIgdmlldyB0byByZXByZXNlbnQgYSBncm91cCByZWNvcmRlZAorICoge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uam9icy5zaW11bGF0aW9uLlNpbXVsYXRpb259IHJ1bnMgdGhhdCBiZWxvbmcgdG8gYQorICogcGFydGljdWxhciBTVEVNIFByb2plY3QgaW5zdGFuY2UuCisgKi8KK3B1YmxpYyBjbGFzcyBSZWNvcmRlZFRyZWVOb2RlICB7CisKKwlwcml2YXRlIGZpbmFsIElQcm9qZWN0IHByb2plY3Q7CisKKwkvKioKKwkgKkBwYXJhbSBwcm9qZWN0CisJICogICAgICAgICAgICB0aGUge0BsaW5rIElQcm9qZWN0fSB0aGF0IGlzIHRoZSBwYXJlbnQgb2YgdGhpcworCSAqICAgICAgICAgICAge0BsaW5rIFJlY29yZGVkVHJlZU5vZGV9LgorCSAqLworCXB1YmxpYyBSZWNvcmRlZFRyZWVOb2RlKElQcm9qZWN0IHByb2plY3QpIHsKKwkJdGhpcy5wcm9qZWN0ID0gcHJvamVjdDsKKwl9IC8vIFJlY29yZGVkVHJlZU5vZGUKKworCS8qKgorCSAqIEByZXR1cm4gdGhlIHtAbGluayBJUHJvamVjdH0uCisJICovCisJcHVibGljIElQcm9qZWN0IGdldFByb2plY3QoKSB7CisJCXJldHVybiBwcm9qZWN0OworCX0KK30gLy8gUmVjb3JkZWRUcmVlTm9kZQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS92aWV3cy9leHBsb3Jlci9SZWNvcmRlZFRyZWVOb2RlQ29udGVudFByb3ZpZGVyLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvdmlld3MvZXhwbG9yZXIvUmVjb3JkZWRUcmVlTm9kZUNvbnRlbnRQcm92aWRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBkY2E4ZmQKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvdmlld3MvZXhwbG9yZXIvUmVjb3JkZWRUcmVlTm9kZUNvbnRlbnRQcm92aWRlci5qYXZhCkBAIC0wLDAgKzEsOTUgQEAKKy8vIFJlY29yZGVkVHJlZU5vZGVDb250ZW50UHJvdmlkZXIuamF2YQorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnVpLnZpZXdzLmV4cGxvcmVyOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0OworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVRyZWVDb250ZW50UHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5WaWV3ZXI7CisKKy8qKgorICogVGhpcyBjbGFzcyBpcyBhIHtAbGluayBJQ29udGVudFByb3ZpZGVyfSBmb3IgdGhlIGNvbnRyaWJ1dGlvbnMgdG8gdGhlCisgKiBvcmcuZWNsaXBzZS51aSxuYXZpZ2F0b3IubmF2aWdhdG9yQ29udGVudHMgZXh0ZW5zaW9uIHBvaW50IHRoYXQgcmVwcmVzZW50CisgKiByZWNvcmRlZCB7QGxpbmsgU2ltdWxhdGlvbn0gcnVucy4KKyAqLworQFN1cHByZXNzV2FybmluZ3MoInVudXNlZCIpCitwdWJsaWMgY2xhc3MgUmVjb3JkZWRUcmVlTm9kZUNvbnRlbnRQcm92aWRlciBpbXBsZW1lbnRzIElUcmVlQ29udGVudFByb3ZpZGVyIHsKKworCS8qKgorCSAqIEBzZWUKKwkgKiAJb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JVHJlZUNvbnRlbnRQcm92aWRlciNnZXRDaGlsZHJlbihqYXZhLmxhbmcuCisJICogCU9iamVjdCkKKwkgKi8KKwlwdWJsaWMgT2JqZWN0W10gZ2V0Q2hpbGRyZW4oZmluYWwgT2JqZWN0IHBhcmVudEVsZW1lbnQpIHsKKwkJT2JqZWN0W10gcmV0VmFsdWUgPSBudWxsOworCQlpZiAocGFyZW50RWxlbWVudCBpbnN0YW5jZW9mIElQcm9qZWN0KSB7CisJCQkvLyBZZXMKKwkJCXJldFZhbHVlID0gbmV3IE9iamVjdFtdIHsgbmV3IFJlY29yZGVkVHJlZU5vZGUoCisJCQkJCShJUHJvamVjdCkgcGFyZW50RWxlbWVudCkgfTsgLy8gbmV3IE9iamVjdAorCQl9IGVsc2UgaWYgKHBhcmVudEVsZW1lbnQgaW5zdGFuY2VvZiBSZWNvcmRlZFRyZWVOb2RlKSB7CisJCQkvLyBZZXMKKwkJCS8vIGZpbmFsIElkZW50aWZpYWJsZVRyZWVOb2RlIGN0biA9IChJZGVudGlmaWFibGVUcmVlTm9kZSkKKwkJCS8vIHBhcmVudEVsZW1lbnQ7CisJCQlyZXRWYWx1ZSA9IG5ldyBPYmplY3RbMF07IC8vIG5ldmVyIG51bGwKKwkJfSAvLyBpZiBJZGVudGlmaWFibGVUcmVlTm9kZQorCQlyZXR1cm4gcmV0VmFsdWU7CisJfSAvLyBnZXRDaGlsZHJlbgorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklUcmVlQ29udGVudFByb3ZpZGVyI2dldFBhcmVudChqYXZhLmxhbmcuCisJICogCU9iamVjdCkKKwkgKi8KKwlwdWJsaWMgT2JqZWN0IGdldFBhcmVudChmaW5hbCBPYmplY3QgZWxlbWVudCkgeworCQlPYmplY3QgcmV0VmFsdWUgPSBudWxsOworCQlpZiAoZWxlbWVudCBpbnN0YW5jZW9mIFJlY29yZGVkVHJlZU5vZGUpIHsKKwkJCS8vIFllcworCQkJcmV0VmFsdWUgPSAoKFJlY29yZGVkVHJlZU5vZGUpIGVsZW1lbnQpLmdldFByb2plY3QoKTsKKwkJfSAvLyBpZiBJZGVudGlmaWFibGVUcmVlTm9kZQorCisJCXJldHVybiByZXRWYWx1ZTsKKwl9CisKKwkvKioKKwkgKiBAc2VlCisJICogCW9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVRyZWVDb250ZW50UHJvdmlkZXIjaGFzQ2hpbGRyZW4oamF2YS5sYW5nLgorCSAqIAlPYmplY3QpCisJICovCisJcHVibGljIGJvb2xlYW4gaGFzQ2hpbGRyZW4oZmluYWwgT2JqZWN0IGVsZW1lbnQpIHsKKwkJcmV0dXJuIGZhbHNlOworCX0KKworCS8qKgorCSAqIEBzZWUKKwkgKiAJb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU3RydWN0dXJlZENvbnRlbnRQcm92aWRlciNnZXRFbGVtZW50cyhqYXZhCisJICogCS5sYW5nLk9iamVjdCkKKwkgKi8KKwlwdWJsaWMgT2JqZWN0W10gZ2V0RWxlbWVudHMoZmluYWwgT2JqZWN0IGlucHV0RWxlbWVudCkgeworCQlyZXR1cm4gZ2V0Q2hpbGRyZW4oaW5wdXRFbGVtZW50KTsKKwl9CisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSUNvbnRlbnRQcm92aWRlciNkaXNwb3NlKCkKKwkgKi8KKwlwdWJsaWMgdm9pZCBkaXNwb3NlKCkgeworCQkvLyBOb3RoaW5nCisJfQorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklDb250ZW50UHJvdmlkZXIjaW5wdXRDaGFuZ2VkKG9yZy5lY2xpcHNlLgorCSAqIAlqZmFjZS52aWV3ZXJzLlZpZXdlciwgamF2YS5sYW5nLk9iamVjdCwgamF2YS5sYW5nLk9iamVjdCkKKwkgKi8KKwlwdWJsaWMgdm9pZCBpbnB1dENoYW5nZWQoZmluYWwgVmlld2VyIHZpZXdlciwgZmluYWwgT2JqZWN0IG9sZElucHV0LAorCQkJZmluYWwgT2JqZWN0IG5ld0lucHV0KSB7CisJCS8vIE5vdGhpbmcKKwl9CisKK30gLy8gUmVjb3JkZWRUcmVlTm9kZUNvbnRlbnRQcm92aWRlcgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS92aWV3cy9leHBsb3Jlci9SZWNvcmRlZFRyZWVOb2RlTGFiZWxQcm92aWRlci5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3ZpZXdzL2V4cGxvcmVyL1JlY29yZGVkVHJlZU5vZGVMYWJlbFByb3ZpZGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmU0MzJlNQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS92aWV3cy9leHBsb3Jlci9SZWNvcmRlZFRyZWVOb2RlTGFiZWxQcm92aWRlci5qYXZhCkBAIC0wLDAgKzEsODUgQEAKKy8vIFJlY29yZGVkVHJlZU5vZGVMYWJlbFByb3ZpZGVyLmphdmEKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS51aS52aWV3cy5leHBsb3JlcjsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklMYWJlbFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSUxhYmVsUHJvdmlkZXJMaXN0ZW5lcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnVpLkFjdGl2YXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnVpLklTaGFyZWRJbWFnZXM7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmdyYXBoaWNzLkltYWdlOworCisvKioKKyAqIFRoaXMgY2xhc3MgaXMgYW4ge0BsaW5rIElMYWJlbFByb3ZpZGVyfSBmb3IgdGhlIGNvbnRyaWJ1dGlvbnMgdG8gdGhlCisgKiBvcmcuZWNsaXBzZS51aSxuYXZpZ2F0b3IubmF2aWdhdG9yQ29udGVudHMgZXh0ZW5zaW9uIHBvaW50IHRoYXQgcmVwcmVzZW50CisgKiByZWNvcmRlZCB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5qb2JzLnNpbXVsYXRpb24uU2ltdWxhdGlvbn1zLgorICovCitwdWJsaWMgY2xhc3MgUmVjb3JkZWRUcmVlTm9kZUxhYmVsUHJvdmlkZXIgaW1wbGVtZW50cyBJTGFiZWxQcm92aWRlciB7CisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSUxhYmVsUHJvdmlkZXIjZ2V0SW1hZ2UoamF2YS5sYW5nLk9iamVjdCkKKwkgKi8KKwlwdWJsaWMgSW1hZ2UgZ2V0SW1hZ2UoIE9iamVjdCBlbGVtZW50KSB7CisJCUltYWdlIHJldFZhbHVlID0gbnVsbDsKKwkJaWYgKGVsZW1lbnQgaW5zdGFuY2VvZiBSZWNvcmRlZFRyZWVOb2RlKSB7CisJCQlyZXRWYWx1ZSA9IEFjdGl2YXRvci5nZXREZWZhdWx0KCkuZ2V0SW1hZ2VSZWdpc3RyeSgpLmdldCgKKwkJCQkJSVNoYXJlZEltYWdlcy5SRUNPUkRFRF9TSU1VTEFUSU9OX0ZPTERFUl9JQ09OKTsKKworCQl9IC8vIGlmIElkZW50aWZpYWJsZUluc3RhbmNlVHJlZU5vZGUKKwkJcmV0dXJuIHJldFZhbHVlOworCX0KKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JTGFiZWxQcm92aWRlciNnZXRUZXh0KGphdmEubGFuZy5PYmplY3QpCisJICovCisJcHVibGljIFN0cmluZyBnZXRUZXh0KEBTdXBwcmVzc1dhcm5pbmdzKCJ1bnVzZWQiKSBPYmplY3QgZWxlbWVudCkgeworCQlyZXR1cm4gTWVzc2FnZXMuZ2V0U3RyaW5nKCJFWFBMT1JFUi5SRUNPUkRFRF9TSU1VTEFUSU9OU19GT0xERVIiKTsKKwl9CisKKwkvKioKKwkgKiBAc2VlCisJICogCW9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSUJhc2VMYWJlbFByb3ZpZGVyI2FkZExpc3RlbmVyKG9yZy5lY2xpcHNlLgorCSAqIAlqZmFjZS52aWV3ZXJzLklMYWJlbFByb3ZpZGVyTGlzdGVuZXIpCisJICovCisJcHVibGljIHZvaWQgYWRkTGlzdGVuZXIoCisJCQlAU3VwcHJlc3NXYXJuaW5ncygidW51c2VkIikgSUxhYmVsUHJvdmlkZXJMaXN0ZW5lciBsaXN0ZW5lcikgeworCQkvLyBOb3RoaW5nCisJfQorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklCYXNlTGFiZWxQcm92aWRlciNkaXNwb3NlKCkKKwkgKi8KKwlwdWJsaWMgdm9pZCBkaXNwb3NlKCkgeworCQkvLyBOb3RoaW5nCisJfQorCisJLyoqCisJICogQHNlZQorCSAqIAlvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklCYXNlTGFiZWxQcm92aWRlciNpc0xhYmVsUHJvcGVydHkoamF2YS5sYW5nCisJICogCS5PYmplY3QsIGphdmEubGFuZy5TdHJpbmcpCisJICovCisJcHVibGljIGJvb2xlYW4gaXNMYWJlbFByb3BlcnR5KEBTdXBwcmVzc1dhcm5pbmdzKCJ1bnVzZWQiKSBPYmplY3QgZWxlbWVudCwKKwkJCUBTdXBwcmVzc1dhcm5pbmdzKCJ1bnVzZWQiKSBTdHJpbmcgcHJvcGVydHkpIHsKKwkJcmV0dXJuIGZhbHNlOworCX0KKworCS8qKgorCSAqIEBzZWUKKwkgKiAJb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JQmFzZUxhYmVsUHJvdmlkZXIjcmVtb3ZlTGlzdGVuZXIob3JnLmVjbGlwc2UKKwkgKiAJLmpmYWNlLnZpZXdlcnMuSUxhYmVsUHJvdmlkZXJMaXN0ZW5lcikKKwkgKi8KKwlwdWJsaWMgdm9pZCByZW1vdmVMaXN0ZW5lcigKKwkJCUBTdXBwcmVzc1dhcm5pbmdzKCJ1bnVzZWQiKSBJTGFiZWxQcm92aWRlckxpc3RlbmVyIGxpc3RlbmVyKSB7CisJCS8vIE5vdGhpbmcKKwl9CisKK30gLy8gUmVjb3JkZWRUcmVlTm9kZUxhYmVsUHJvdmlkZXIKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvdmlld3MvZXhwbG9yZXIvbWVzc2FnZXMucHJvcGVydGllcyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS92aWV3cy9leHBsb3Jlci9tZXNzYWdlcy5wcm9wZXJ0aWVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI2MDNiNTcKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvdmlld3MvZXhwbG9yZXIvbWVzc2FnZXMucHJvcGVydGllcwpAQCAtMCwwICsxLDI1IEBACisjIEV4cGxvcmVyIG1lc3NhZ2VzLnByb3BlcnRpZXMKKyMKKyMvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIyAqIENvcHlyaWdodCAoYykgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyMgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisjICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisjICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyMgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorIyAqCisjICogQ29udHJpYnV0b3JzOgorIyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworIyBFeHBsb3JlcgorRVhQTE9SRVIuREVDT1JBVE9SX0ZPTERFUj1EZWNvcmF0b3JzCitFWFBMT1JFUi5FWFBFUklNRU5UX0ZPTERFUj1FeHBlcmltZW50cworRVhQTE9SRVIuR1JBUEhfRk9MREVSPUdyYXBocworRVhQTE9SRVIuTU9ERUxfRk9MREVSPU1vZGVscworRVhQTE9SRVIuTU9ESUZJRVJfRk9MREVSPU1vZGlmaWVycworRVhQTE9SRVIuUFJFRElDQVRFX0ZPTERFUj1QcmVkaWNhdGUKK0VYUExPUkVSLlNDRU5BUklPX0ZPTERFUj1TY2VuYXJpb3MKK0VYUExPUkVSLlNFUVVFTkNFUl9GT0xERVI9U2VxdWVuY2VycworRVhQTE9SRVIuVFJJR0dFUl9GT0xERVI9VHJpZ2dlcnMKK0VYUExPUkVSLlJFQ09SREVEX1NJTVVMQVRJT05TX0ZPTERFUj1SZWNvcmRlZCBTaW11bGF0aW9ucworRVhQTE9SRVIuTE9HR0VSX0ZPTERFUj1Mb2dnZXJzCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvdmlld3MvZXhwbG9yZXIvbWVzc2FnZXNfZGUucHJvcGVydGllcyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS92aWV3cy9leHBsb3Jlci9tZXNzYWdlc19kZS5wcm9wZXJ0aWVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBmN2MwZDMKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvdmlld3MvZXhwbG9yZXIvbWVzc2FnZXNfZGUucHJvcGVydGllcwpAQCAtMCwwICsxLDI1IEBACisjIEV4cGxvcmVyIG1lc3NhZ2VzLnByb3BlcnRpZXMKKyMKKyMvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIyAqIENvcHlyaWdodCAoYykgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyMgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisjICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisjICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyMgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorIyAqCisjICogQ29udHJpYnV0b3JzOgorIyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworIyBFeHBsb3JlcgorRVhQTE9SRVIuREVDT1JBVE9SX0ZPTERFUj1EZWtvcmllcmVyCitFWFBMT1JFUi5FWFBFUklNRU5UX0ZPTERFUj1FeHBlcmltZW50ZQorRVhQTE9SRVIuR1JBUEhfRk9MREVSPUdyYXBoZW4KK0VYUExPUkVSLk1PREVMX0ZPTERFUj1Nb2RlbGxlCitFWFBMT1JFUi5NT0RJRklFUl9GT0xERVI9TW9kaWZpa2F0b3JlbgorRVhQTE9SRVIuUFJFRElDQVRFX0ZPTERFUj1FaWdlbnNjaGFmdAorRVhQTE9SRVIuU0NFTkFSSU9fRk9MREVSPVN6ZW5hcmllbgorRVhQTE9SRVIuU0VRVUVOQ0VSX0ZPTERFUj1TZXF1ZW56ZXIKK0VYUExPUkVSLlRSSUdHRVJfRk9MREVSPUF1c2xcdTAwZjZzZXIKK0VYUExPUkVSLlJFQ09SREVEX1NJTVVMQVRJT05TX0ZPTERFUj1BdWZnZW5vbW1lbiBTaW11bGF0aW9uZW4KK0VYUExPUkVSLkxPR0dFUl9GT0xERVI9TG9nZ2VycwpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3ZpZXdzL2V4cGxvcmVyL21lc3NhZ2VzX2tyLnByb3BlcnRpZXMgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvdmlld3MvZXhwbG9yZXIvbWVzc2FnZXNfa3IucHJvcGVydGllcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NjM4MjM0Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3ZpZXdzL2V4cGxvcmVyL21lc3NhZ2VzX2tyLnByb3BlcnRpZXMKQEAgLTAsMCArMSwyNSBAQAorIyBFeHBsb3JlciBtZXNzYWdlcy5wcm9wZXJ0aWVzCisjCisjLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyMgKiBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisjICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworIyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorIyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisjICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyMgKgorIyAqIENvbnRyaWJ1dG9yczoKKyMgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisjICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyMgRXhwbG9yZXIKK0VYUExPUkVSLkRFQ09SQVRPUl9GT0xERVI9XHVjN2E1XHVjMmRkXHVjNzkwXHViNGU0CitFWFBMT1JFUi5FWFBFUklNRU5UX0ZPTERFUj1cdWMyZTRcdWQ1ZDgKK0VYUExPUkVSLkdSQVBIX0ZPTERFUj1cdWFkZjhcdWI3OThcdWQ1MDQKK0VYUExPUkVSLk1PREVMX0ZPTERFUj1cdWJhYThcdWIzNzgKK0VYUExPUkVSLk1PRElGSUVSX0ZPTERFUj1cdWMyMThcdWM4MTVcdWM3OTAKK0VYUExPUkVSLlBSRURJQ0FURV9GT0xERVI9XHVjMjIwXHVjNWI0CitFWFBMT1JFUi5TQ0VOQVJJT19GT0xERVI9XHVjMmRjXHViMDk4XHViOWFjXHVjNjI0CitFWFBMT1JFUi5TRVFVRU5DRVJfRk9MREVSPVx1YzJkY1x1ZDAwMFx1YzExYworRVhQTE9SRVIuVFJJR0dFUl9GT0xERVI9XHVkMmI4XHViOWFjXHVhYzcwCitFWFBMT1JFUi5SRUNPUkRFRF9TSU1VTEFUSU9OU19GT0xERVI9XHVhZTMwXHViODVkXHViNDFjIFx1YzJkY1x1YmJhY1x1YjgwOFx1Yzc3NFx1YzE1OAorRVhQTE9SRVIuTE9HR0VSX0ZPTERFUj1Mb2dnZXJzCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvdmlld3MvZXhwbG9yZXIvbWVzc2FnZXNfemgucHJvcGVydGllcyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS92aWV3cy9leHBsb3Jlci9tZXNzYWdlc196aC5wcm9wZXJ0aWVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZkZDljMDYKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvdmlld3MvZXhwbG9yZXIvbWVzc2FnZXNfemgucHJvcGVydGllcwpAQCAtMCwwICsxLDI1IEBACisjIEV4cGxvcmVyIG1lc3NhZ2VzLnByb3BlcnRpZXMKKyMKKyMvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIyAqIENvcHlyaWdodCAoYykgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyMgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisjICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisjICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyMgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorIyAqCisjICogQ29udHJpYnV0b3JzOgorIyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworIyBFeHBsb3JlcgorRVhQTE9SRVIuREVDT1JBVE9SX0ZPTERFUj1cdTg4YzVcdTk5NzBcdTU2NjgKK0VYUExPUkVSLkVYUEVSSU1FTlRfRk9MREVSPVx1NWI5ZVx1OWE4YworRVhQTE9SRVIuR1JBUEhfRk9MREVSPVx1NTZmZQorRVhQTE9SRVIuTU9ERUxfRk9MREVSPVx1NmEyMVx1NTc4YgorRVhQTE9SRVIuTU9ESUZJRVJfRk9MREVSPVx1NGZlZVx1NjUzOVx1NTY2OAorRVhQTE9SRVIuUFJFRElDQVRFX0ZPTERFUj1cdTYzY2ZcdThmZjAKK0VYUExPUkVSLlNDRU5BUklPX0ZPTERFUj1cdTY1YjlcdTY4NDgKK0VYUExPUkVSLlNFUVVFTkNFUl9GT0xERVI9XHU1ZThmXHU1MjE3XHU1M2QxXHU3NTFmXHU1NjY4CitFWFBMT1JFUi5UUklHR0VSX0ZPTERFUj1cdTg5ZTZcdTUzZDFcdTU2NjgKK0VYUExPUkVSLlJFQ09SREVEX1NJTVVMQVRJT05TX0ZPTERFUj1cdThiYjBcdTVmNTVcdTc2ODRcdTRlZmZcdTc3MWYKKwpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3ZpZXdzL2dlb2dyYXBoaWMvR2VvZ3JhcGhpY0NvbnRyb2wuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS92aWV3cy9nZW9ncmFwaGljL0dlb2dyYXBoaWNDb250cm9sLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTAwNjg4NAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS92aWV3cy9nZW9ncmFwaGljL0dlb2dyYXBoaWNDb250cm9sLmphdmEKQEAgLTAsMCArMSwxMjM5IEBACisvLyBHZW9ncmFwaGljQ29udHJvbC5qYXZhCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0udWkudmlld3MuZ2VvZ3JhcGhpYzsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqYXZhLmlvLkZpbGU7CitpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLnRleHQuU2ltcGxlRGF0ZUZvcm1hdDsKK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OworaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOworaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKK2ltcG9ydCBqYXZhLnV0aWwuTGlua2VkTGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuTG9jYWxlOworaW1wb3J0IGphdmEudXRpbC5NYXA7CitpbXBvcnQgamF2YS51dGlsLmNvbmN1cnJlbnQuQ29weU9uV3JpdGVBcnJheUxpc3Q7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5SZXNvdXJjZXNQbHVnaW47CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQYXRoOworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUHJvZ3Jlc3NNb25pdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QcmVmZXJlbmNlcy5JUHJvcGVydHlDaGFuZ2VMaXN0ZW5lcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUHJlZmVyZW5jZXMuUHJvcGVydHlDaGFuZ2VFdmVudDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU3RhdHVzOworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5qb2JzLkpvYjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5BZGFwdGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LkFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5FTWFwOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5VUkk7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLkFjdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uTWVudU1hbmFnZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLlNlcGFyYXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvblByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuU2VsZWN0aW9uQ2hhbmdlZEV2ZW50OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uSWRlbnRpZmlhYmxlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5EeW5hbWljTm9kZUxhYmVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5FZGdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5HcmFwaDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguTm9kZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuRGVjb3JhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkuY2VudGVycy5HZW9ncmFwaGljQ2VudGVyczsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmFkYXB0ZXJzLnJlbGF0aXZldmFsdWUuUmVsYXRpdmVWYWx1ZVByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuYWRhcHRlcnMucmVsYXRpdmV2YWx1ZS5SZWxhdGl2ZVZhbHVlUHJvdmlkZXJBZGFwdGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuYWRhcHRlcnMucmVsYXRpdmV2YWx1ZS5SZWxhdGl2ZVZhbHVlUHJvdmlkZXJBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmFkYXB0ZXJzLnNwYXRpYWwuZ2VvLkxhdExvbmc7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5hZGFwdGVycy5zcGF0aWFsLmdlby5MYXRMb25nLlNlZ21lbnQ7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5hZGFwdGVycy5zcGF0aWFsLmdlby5MYXRMb25nUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5hZGFwdGVycy5zcGF0aWFsLmdlby5MYXRMb25nUHJvdmlkZXJBZGFwdGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuYWRhcHRlcnMuc3BhdGlhbC5nZW8uTGF0TG9uZ1Byb3ZpZGVyQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5lZGdlcy5Qb3B1bGF0aW9uRWRnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuRGlzZWFzZU1vZGVsTGFiZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5qb2JzLnNpbXVsYXRpb24uSVNpbXVsYXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5qb2JzLnNpbXVsYXRpb24uSVNpbXVsYXRpb25MaXN0ZW5lcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmpvYnMuc2ltdWxhdGlvbi5TaW11bGF0aW9uRXZlbnQ7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLlBvcHVsYXRpb25Nb2RlbExhYmVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udWkuQWN0aXZhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udWkuYWRhcHRlcnMuY29sb3IuQ29sb3JQcm92aWRlckFkYXB0ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS51aS5hZGFwdGVycy5jb2xvci5Db2xvclByb3ZpZGVyQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS51aS5hZGFwdGVycy5jb2xvci5JQ29sb3JQcm92aWRlckNoYW5nZWRMaXN0ZW5lcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnVpLnZpZXdzLmdlb2dyYXBoaWMubWFwLk1hcFJlbmRlcmVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udWkudmlld3MuZ2VvZ3JhcGhpYy5tYXAuTWVzc2FnZXM7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS51aS52aWV3cy5nZW9ncmFwaGljLm1hcC5TdGVtUG9seWdvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnVpLnZpZXdzLmdlb2dyYXBoaWMubWFwLlN0ZW1Qb2x5Z29uc0xpc3Q7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS51aS53aWRnZXRzLkdlb1ZpZXdPcHRpb25zQmFyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udWkud2lkZ2V0cy5HZW9WaWV3T3B0aW9uc0Jhci5Qcm9wZXJ0eVNlbGVjdGlvbkV2ZW50OworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5TV1Q7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmdyYXBoaWNzLkltYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5sYXlvdXQuRmlsbExheW91dDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QubGF5b3V0LkZvcm1BdHRhY2htZW50OworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5sYXlvdXQuRm9ybURhdGE7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5Gb3JtTGF5b3V0OworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5EaXNwbGF5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkxhYmVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLk1lbnU7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaEFjdGlvbkNvbnN0YW50czsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5mb3Jtcy53aWRnZXRzLkZvcm1Ub29sa2l0OworCisvKioKKyAqIFRoaXMgY2xhc3MgcmVwcmVzZW50cyBhIHZpc3VhbGl6YXRpb24gb2YgdGhlIGdlb2dyYXBoaWMgYXR0cmlidXRlcyBvZiBhCisgKiB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5qb2JzLnNpbXVsYXRpb24ub3JnLmVjbGlwc2Uuc3RlbS5qb2JzLnNpbXVsYXRpb24uU2ltdWxhdGlvbn0uCisgKi8KK2Fic3RyYWN0IHB1YmxpYyBjbGFzcyBHZW9ncmFwaGljQ29udHJvbCBleHRlbmRzIENvbXBvc2l0ZSBpbXBsZW1lbnRzCisJCUlTaW11bGF0aW9uTGlzdGVuZXIsIElTZWxlY3Rpb25Qcm92aWRlciwgSUNvbG9yUHJvdmlkZXJDaGFuZ2VkTGlzdGVuZXIsCisJCUlQcm9wZXJ0eUNoYW5nZUxpc3RlbmVyLCBJU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyLAorCQlHZW9WaWV3T3B0aW9uc0Jhci5Qcm9wZXJ0eVNlbGVjdGlvbkxpc3RlbmVyIHsKKworCQorCS8qKgorCSAqIGNvbnRhaW5zIGV4cGFuZGFibGUgY29tcG9zaXRlcyBhbmQgb3RoZXIgdG9vbHMKKwkgKi8KKwlwcml2YXRlIEZvcm1Ub29sa2l0IHRvb2xraXQ7CisJCisJLyoqCisJICogcmVtZW1iZXIgdGhlIGV4cGFuc2lvbiBzdGF0ZQorCSAqLworCXB1YmxpYyBib29sZWFuIGV4cGFuc2lvblN0YXRlID0gdHJ1ZTsKKwkKKwkvKioKKwkgKiBUaGUgd2lkdGggb2YgdGhlIGxheW91dCBtYXJnaW4uCisJICovCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBpbnQgTUFSR0lOX1dJRFRIID0gNTsKKworCS8qKgorCSAqIFRoZSBoZWlnaHQgb2YgdGhlIGxheW91dCBtYXJnaW4uCisJICovCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBpbnQgTUFSR0lOX0hFSUdIVCA9IDU7CisKKwkvKioKKwkgKiBUaGlzIGlzIHRoZSB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5qb2JzLnNpbXVsYXRpb24uU2ltdWxhdGlvbn0gdGhhdCB0aGlzIGNvbnRyb2wgaXMgbGlzdGVuaW5nIHRvIGFuZAorCSAqIHZpc3VhbGl6aW5nIGJ5IHJlbmRlcmluZyBMYXQvTG9uZyBkYXRhIG9uIHRoZSB7QGxpbmsgI21hcENhbnZhc30uCisJICovCisJcHJpdmF0ZSBJU2ltdWxhdGlvbiBzaW11bGF0aW9uID0gbnVsbDsKKworCS8qKgorCSAqIFRoZSB7QGxpbmsgSWRlbnRpZmlhYmxlfSB0aGF0IHdhcyBtb3N0IHJlY2VudGx5IHNlbGVjdGVkLCBvcgorCSAqIDxjb2RlPm51bGw8L2NvZGU+LCBpZiBub25lIGhhcyBiZWVuIHNlbGVjdGVkLgorCSAqLworCUlTZWxlY3Rpb24gc2VsZWN0aW9uID0gbnVsbDsKKworCS8qKgorCSAqIFRoZSBjb2xsZWN0aW9uIG9mIHtAbGluayBJU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyfSB3YWl0aW5nIHRvIGJlIHRvbGQKKwkgKiBhYm91dCBzZWxlY3Rpb25zLgorCSAqLworCXByb3RlY3RlZCBmaW5hbCBMaXN0PElTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXI+IGxpc3RlbmVycyA9IG5ldyBDb3B5T25Xcml0ZUFycmF5TGlzdDxJU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyPigpOworCisJcHJvdGVjdGVkIEdlb2dyYXBoaWNSZW5kZXJlciBnZW9ncmFwaGljUmVuZGVyZXI7CisKKwlwcm90ZWN0ZWQgU3RyaW5nIHNlbGVjdGVkRWRnZSA9ICIiOworCisJLyoqCisJICogSWYgPGNvZGU+dHJ1ZTwvY29kZT4gdGhlbiB0aGVyZSBpcyBhIG1hcCByZWZyZXNoIHJlcXVlc3QgcGVuZGluZy4KKwkgKi8KKwlib29sZWFuIHJlZnJlc2hQZW5kaW5nID0gZmFsc2U7CisKKwkvKioKKwkgKiBUaGlzIGlzIHRoZSA8Y29kZT5Kb2I8L2NvZGU+IHRoYXQgY29tcHV0ZXMgdGhlIHBvbHlnb24gdmFsdWVzIGluIHRoZQorCSAqIGJhY2tncm91bmQuCisJICovCisJSm9iIHJlZnJlc2hKb2I7CisJLyoqCisJICogQWRhcHRlciBpbnN0YW5jZSBvZiB0aGUgc2VsZWN0ZWQgY29sb3IgcHJvdmlkZXIgKHRvIGJlIHJldXNlZCBieSBvbmx5CisJICogc2V0dGluZyB0aGUgdGFyZ2V0KQorCSAqLworCXByb3RlY3RlZCBDb2xvclByb3ZpZGVyQWRhcHRlciBjb2xvclByb3ZpZGVyQWRhcHRlciA9IG51bGw7CisKKwlwcml2YXRlIExhYmVsIHNpbXVsYXRpb25OYW1lTGFiZWw7CisJCisJcHJpdmF0ZSBHZW9WaWV3T3B0aW9uc0JhciBvcHRpb25zQmFyOworCisJLyoqCisJICogVGhpcyBjb250YWlucyBhIG1hcHBpbmcgYmV0d2VlbiB0aGUge0BsaW5rIERlY29yYXRvcn1zIHdlIGRpc3BsYXkgYW5kIHRoZQorCSAqIGRhdGEgd2UgbmVlZCB0byBkaXNwbGF5IHRoZW0uIE5vdCB1c2VkIHlldC4KKwkgKi8KKwlwcm90ZWN0ZWQgZmluYWwgTWFwPERlY29yYXRvciwgRGVjb3JhdG9yRGlzcGxheURhdGE+IGRlY29yYXRvclRvRGVjb3JhdG9yRGlzcGxheURhdGFNYXAgPSBuZXcgSGFzaE1hcDxEZWNvcmF0b3IsIERlY29yYXRvckRpc3BsYXlEYXRhPigpOworCisJLy8gQ2FjaGUgb2YgZ2VuZXJhdGVkIFN0ZW1Qb2x5Z29uc0xpc3QgaW5zdGFuY2VzCisJcHJpdmF0ZSBmaW5hbCBNYXA8TGF0TG9uZywgU3RlbVBvbHlnb25zTGlzdD4gcG9seWdvbkxpc3RNYXAgPSBuZXcgSGFzaE1hcDxMYXRMb25nLCBTdGVtUG9seWdvbnNMaXN0PigpOworCisJLyoqCisJICogQHBhcmFtIHBhcmVudAorCSAqIEBwYXJhbSBzdHlsZQorCSAqLworCXB1YmxpYyBHZW9ncmFwaGljQ29udHJvbChmaW5hbCBDb21wb3NpdGUgcGFyZW50LCBmaW5hbCBpbnQgc3R5bGUpIHsKKwkJc3VwZXIocGFyZW50LCBzdHlsZSk7CisKKwkJQWN0aXZhdG9yLmdldERlZmF1bHQoKS5nZXRQbHVnaW5QcmVmZXJlbmNlcygpCisJCQkJLmFkZFByb3BlcnR5Q2hhbmdlTGlzdGVuZXIodGhpcyk7CisKKwkJc2V0UHJlZmVyZW5jZXMoKTsKKworCQljcmVhdGVDb250ZXh0TWVudSh0aGlzKTsKKworCQlmaW5hbCBGb3JtTGF5b3V0IGxheW91dCA9IG5ldyBGb3JtTGF5b3V0KCk7CisJCWxheW91dC5tYXJnaW5IZWlnaHQgPSBNQVJHSU5fSEVJR0hUOworCQlsYXlvdXQubWFyZ2luV2lkdGggPSBNQVJHSU5fV0lEVEg7CisJCXNldExheW91dChsYXlvdXQpOworCisJCQorCQlnZW9ncmFwaGljUmVuZGVyZXIgPSBjcmVhdGVHZW9ncmFwaGljUmVuZGVyZXIoKTsKKwkJZ2VvZ3JhcGhpY1JlbmRlcmVyLnNldENvbG9yUHJvdmlkZXJBZGFwdGVyKGNvbG9yUHJvdmlkZXJBZGFwdGVyKTsKKwkJZ2VvZ3JhcGhpY1JlbmRlcmVyLmFkZFNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcih0aGlzKTsKKwkJCisJCWZpbmFsIENvbXBvc2l0ZSB0b3BDb21wb3NpdGUgPSBjcmVhdGVUb3BDb21wb3NpdGUodGhpcyk7CisKKwkJZmluYWwgQ29tcG9zaXRlIGJvdHRvbUNvbXBvc2l0ZSA9IGNyZWF0ZUJvdHRvbUNvbXBvc2l0ZSh0aGlzKTsKKworCQlmaW5hbCBGb3JtRGF0YSB0b3BDb21wb3NpdGVGb3JtRGF0YSA9IG5ldyBGb3JtRGF0YSgpOworCQl0b3BDb21wb3NpdGUuc2V0TGF5b3V0RGF0YSh0b3BDb21wb3NpdGVGb3JtRGF0YSk7CisJCXRvcENvbXBvc2l0ZUZvcm1EYXRhLnRvcCA9IG5ldyBGb3JtQXR0YWNobWVudCgwLCAwKTsKKwkJdG9wQ29tcG9zaXRlRm9ybURhdGEubGVmdCA9IG5ldyBGb3JtQXR0YWNobWVudCgwLCAwKTsKKwkJdG9wQ29tcG9zaXRlRm9ybURhdGEucmlnaHQgPSBuZXcgRm9ybUF0dGFjaG1lbnQoMTAwLCAwKTsKKworCQlmaW5hbCBGb3JtRGF0YSBnZW9SZW5kZXJlckZvcm1EYXRhID0gbmV3IEZvcm1EYXRhKCk7CisJCWdlb2dyYXBoaWNSZW5kZXJlci5zZXRMYXlvdXREYXRhKGdlb1JlbmRlcmVyRm9ybURhdGEpOworCQlnZW9SZW5kZXJlckZvcm1EYXRhLnRvcCA9IG5ldyBGb3JtQXR0YWNobWVudCh0b3BDb21wb3NpdGUsIDApOworCQlnZW9SZW5kZXJlckZvcm1EYXRhLmJvdHRvbSA9IG5ldyBGb3JtQXR0YWNobWVudChib3R0b21Db21wb3NpdGUsIDApOworCQlnZW9SZW5kZXJlckZvcm1EYXRhLmxlZnQgPSBuZXcgRm9ybUF0dGFjaG1lbnQoMCwgMCk7CisJCWdlb1JlbmRlcmVyRm9ybURhdGEucmlnaHQgPSBuZXcgRm9ybUF0dGFjaG1lbnQoMTAwLCAwKTsKKworCQkvLyBCb3R0b20gQ29tcG9zaXRlCisJCWZpbmFsIEZvcm1EYXRhIGJvdHRvbUNvbXBvc2l0ZUZvcm1EYXRhID0gbmV3IEZvcm1EYXRhKCk7CisJCWJvdHRvbUNvbXBvc2l0ZS5zZXRMYXlvdXREYXRhKGJvdHRvbUNvbXBvc2l0ZUZvcm1EYXRhKTsKKwkJYm90dG9tQ29tcG9zaXRlRm9ybURhdGEuYm90dG9tID0gbmV3IEZvcm1BdHRhY2htZW50KDEwMCwgMCk7CisJCWJvdHRvbUNvbXBvc2l0ZUZvcm1EYXRhLmxlZnQgPSBuZXcgRm9ybUF0dGFjaG1lbnQoMCwgMCk7CisJCWJvdHRvbUNvbXBvc2l0ZUZvcm1EYXRhLnJpZ2h0ID0gbmV3IEZvcm1BdHRhY2htZW50KDEwMCwgMCk7CisKKwkJcGFjaygpOworCX0gLy8gR2VvZ3JhcGhpY0NvbnRyb2wKKworCS8qKgorCSAqIEByZXR1cm4KKwkgKi8KKwlhYnN0cmFjdCBwcm90ZWN0ZWQgR2VvZ3JhcGhpY1JlbmRlcmVyIGNyZWF0ZUdlb2dyYXBoaWNSZW5kZXJlcigpOworCisJLyoqCisJICogU2V0IHZpc3VhbGl6YXRpb24gcHJlZmVyZW5jZXMKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBzZXRQcmVmZXJlbmNlcygpIHsKKwkJLy8gTm90aGluZyB5ZXQKKwkJLy8gdHJ5IHsKKwkJLy8gLy8gSVByZWZlcmVuY2VTdG9yZQorCQkvLyBmaW5hbCBQcmVmZXJlbmNlcyBwcmVmZXJlbmNlcyA9IEFjdGl2YXRvci5nZXREZWZhdWx0KCkKKwkJLy8gLmdldFBsdWdpblByZWZlcmVuY2VzKCk7CisJCS8vCisJCS8vIGluaXRpYWxTY2FsZVJ1bGVyU2VsZWN0aW9uID0gcHJlZmVyZW5jZXMKKwkJLy8gLmdldEludChvcmcuZWNsaXBzZS5zdGVtLnVpLnZpZXdzLmdlb2dyYXBoaWMubWFwLnByZWZlcmVuY2VzLgorCQkvLyBQcmVmZXJlbmNlQ29uc3RhbnRzLklOSVRJQUxfU0NBTEVfU0VMRUNUSU9OX1BSRUZFUkVOQ0UpOworCQkvLyB9IGNhdGNoIChmaW5hbCBOdWxsUG9pbnRlckV4Y2VwdGlvbiBlKSB7CisJCS8vIC8vIElnbm9yZQorCQkvLyB9IC8vIGNhdGNoIE51bGxQb2ludGVyRXhjZXB0aW9uCisJfSAvLyBzZXRQcmVmZXJlbmNlcworCisJLyoqCisJICogQHJldHVybiB0aGUge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uam9icy5zaW11bGF0aW9uLm9yZy5lY2xpcHNlLnN0ZW0uam9icy5zaW11bGF0aW9uLlNpbXVsYXRpb259CisJICovCisJcHVibGljIGZpbmFsIElTaW11bGF0aW9uIGdldFNpbXVsYXRpb24oKSB7CisJCXJldHVybiBzaW11bGF0aW9uOworCX0gLy8gZ2V0U2ltdWxhdGlvbgorCisJLyoqCisJICogU2V0dGluZyB0aGUge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uam9icy5zaW11bGF0aW9uLlNpbXVsYXRpb259IGhhcworCSAqIHRoZSBzaWRlLWVmZmVjdCBvZiBjYXVzaW5nIHRoZSBjb250cm9sIHRvIHJlbW92ZSBpdHNlbGYgYXMgYSBsaXN0ZW5lcgorCSAqIGZyb20gYW55IHByZXZpb3VzbHkgc2V0CisJICoge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uam9icy5zaW11bGF0aW9uLlNpbXVsYXRpb259IGFuZCBhZGRpbmcgaXRzZWxmCisJICogYXMgYSBsaXN0ZW5lciB0byB0aGUgbmV3IG9uZS4gSXQgd2lsbCBhbHNvIGNhdXNlIHRoZSBpbWFnZSB0byBiZQorCSAqIGluaXRpYWxpemVkIGZyb20gdGhlIGNvbnRlbnRzIG9mIHRoZSBuZXcKKwkgKiB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5qb2JzLnNpbXVsYXRpb24uU2ltdWxhdGlvbn0gYXMgYXBwcm9wcmlhdGUuCisJICogCisJICogQHBhcmFtIHNpbXVsYXRpb24KKwkgKiAgICAgICAgICAgIHRoZSB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5qb2JzLnNpbXVsYXRpb24uU2ltdWxhdGlvbn0KKwkgKiAgICAgICAgICAgIHdob3NlIExhdC9Mb25nIGRhdGEgd2lsbCBiZSByZW5kZXJlZC4KKwkgKi8KKwlwdWJsaWMgZmluYWwgdm9pZCBzZXRTaW11bGF0aW9uKGZpbmFsIElTaW11bGF0aW9uIHNpbXVsYXRpb24pIHsKKwkJLy8gQW55IG5lZWQgdG8gc3dpdGNoPworCQlpZiAodGhpcy5zaW11bGF0aW9uID09IHNpbXVsYXRpb24pIHsKKwkJCS8vIE5vCisJCQlyZXR1cm47CisJCX0gLy8gaWYgbm8gbmVlZCB0byBzd2l0Y2g/CisKKwkJLy8gU2hvdWxkIHdlIHJlbW92ZSBvdXJzZWx2ZXMgYXMgbGlzdGVuZXJzIGZyb20gdGhlIGN1cnJlbnQgc2ltdWxhdGlvbj8KKwkJaWYgKHRoaXMuc2ltdWxhdGlvbiAhPSBudWxsKSB7CisJCQkvLyBZZXMKKwkJCXRoaXMuc2ltdWxhdGlvbi5yZW1vdmVTaW11bGF0aW9uTGlzdGVuZXIodGhpcyk7CisJCX0KKworCQl0aGlzLnNpbXVsYXRpb24gPSBzaW11bGF0aW9uOworCQlzZWxlY3Rpb24gPSBudWxsOworCQkvLyBXYXMgdGhlcmUgYSBuZXcgc2ltdWxhdGlvbiB0byBzd2l0Y2ggdG8/CisJCWlmICh0aGlzLnNpbXVsYXRpb24gIT0gbnVsbCkgeworCQkJLy8gWWVzCisJCQl0aGlzLnNpbXVsYXRpb24uYWRkU2ltdWxhdGlvbkxpc3RlbmVyKHRoaXMpOworCQkJaW5pdGlhbGl6ZUZyb21TaW11bGF0aW9uKHRoaXMuc2ltdWxhdGlvbik7CisJCX0KKworCQlyZWZyZXNoKCk7CisJfSAvLyBzZXRTaW11bGF0aW9uCisKKwkvKioKKwkgKiBJbml0aWFsaXplIHRoZSBjb250cm9sIGZyb20gYQorCSAqIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmpvYnMuc2ltdWxhdGlvbi5TaW11bGF0aW9ufSBpbnN0YW5jZS4KKwkgKiAKKwkgKiBAcGFyYW0gc2ltdWxhdGlvbgorCSAqICAgICAgICAgICAgdGhlIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmpvYnMuc2ltdWxhdGlvbi5TaW11bGF0aW9ufQorCSAqICAgICAgICAgICAgd2hvc2Ugc3RhdGUgd2lsbCBiZSB2aXN1YWxpemVkIGluIHRoZSBjb250cm9sLgorCSAqLworCXByb3RlY3RlZCB2b2lkIGluaXRpYWxpemVGcm9tU2ltdWxhdGlvbihmaW5hbCBJU2ltdWxhdGlvbiBzaW11bGF0aW9uKSB7CisJCXNpbXVsYXRpb25OYW1lTGFiZWwuc2V0VGV4dChzaW11bGF0aW9uLmdldE5hbWUoKSk7CisJCW9wdGlvbnNCYXIuc2V0U2ltdWxhdGlvbihzaW11bGF0aW9uKTsKKwl9IC8vIGluaXRpYWxpemVGcm9tU2ltdWxhdGlvbgorCisJLyoqCisJICogVXBkYXRlIHRoZSBjb250ZW50cyBvZiB7QGxpbmsgI2dlb2dyYXBoaWNSZW5kZXJlcn0gZnJvbSB0aGUgY29udGVudHMgb2YKKwkgKiB0aGUge0BsaW5rICNzaW11bGF0aW9ufS4gVGhpcyBtZXRob2Qgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIGJ5IHRoZSBVSQorCSAqIHRocmVhZCBvdGhlcndpc2UgaXQgY29udGFpbnMgYSByYWNlIGNvbmRpdGlvbiB0aGF0IGNhbiBsb2NrIHVwIHRoZQorCSAqIHJlZnJlc2hpbmcgb2YgdGhlIG1hcCBjYW52YXMuCisJICovCisJdm9pZCByZWZyZXNoKCkgeworCQkvLyBUaGlzIGlzIGNvbXBsZXggYW5kIHBvdGVudGlhbCBjb25mdXNpbmcgY29kZS4gVGhlIGJhc2ljIGlkZWEgaXMgdGhhdAorCQkvLyB3ZSB3YW50IHRvIGRldGVybWluZSB3aGF0IHRvIGRyYXcgb24gdGhlIG1hcENhbnZhcyBpbiBhIHRocmVhZAorCQkvLyBzZXBhcmF0ZSBmcm9tIHRoZSBVSSB0aHJlYWQsIGJ1dCB3ZSBhbHNvIHdhbnQgdG8gY2FwdHVyZSBhIHJlcXVlc3QgdG8KKwkJLy8gcmVmcmVzaCB0aGUgbWFwQ2FudmFzIHRoYXQgY29tZXMgd2hpbGUgYSBiYWNrZ3JvdW5kIEpvYiBpcyBhbHJlYWR5CisJCS8vIHJ1bm5pbmcuIFRoaXMgcmVxdWVzdCBjb3VsZCBoYXZlIGJlZW4gZ2VuZXJhdGVkIGJlY2F1c2Ugc29tZXRoaW5nCisJCS8vIHNpZ25pZmljYW50IGxpa2UgYSBkZWNvcmF0b3Igb3IgYSBwcm9wZXJ0eSBoYXMgY2hhbmdlZCBhbmQKKwkJLy8gd2UgZG9uJ3Qgd2FudCB0byBsb3NlIHRoYXQgc3dpdGNoLgorCQkvLyBXZSBoYXZlIHR3byBmaWVsZHMgdGhhdCBjYXB0dXJlIHRoZSBzdGF0ZSBvZiB0aGUgcmVmcmVzaC4gVGhlIGZpcnN0CisJCS8vIGlzIHRoZSBmbGFnIHJlZnJlc2hQZW5kaW5nIHdoaWNoIGlmIHRydWUgaW5kaWNhdGVzIHRoYXQgYSBjYWxsIHRvCisJCS8vIHJlZnJlc2hNYXBDYW52YXMgd2FzIHByb2Nlc3NlZCB3aGlsZSBhIGJhY2tncm91bmQgSm9iIHdhcyBleGVjdXRpbmcuCisJCS8vIFRoaXMgZmxhZyBpcyBzZXQgaW5zdGVhZCBvZiBjcmVhdGluZyBhbm90aGVyIGJhY2tncm91bmQgSm9iLiBUaGUKKwkJLy8gc2Vjb25kIGlzIHRoZSBmaWVsZCByZWZyZXNoSm9iIHdoaWNoIGlzIHNldCB0byB0aGUgYmFja2dyb3VuZCBKb2IgaWYKKwkJLy8gaXQgaXMgcHJlc2VudCBhbmQgcnVubmluZy4KKwkJLy8KKwkJLy8gSWYgd2UgZW50ZXIgdGhlIG1ldGhvZCBhbmQgcmVmcmVzaFBlbmRpbmcgaXMgdHJ1ZSB0aGVuIHdlIGltbWVkaWF0ZWx5CisJCS8vIGV4aXQgYmVjYXVzZSBhIHJlZnJlc2ggam9iIHdpbGwgYmUgY3JlYXRlZCBhbmQgdGhlcmUncyBub3RoaW5nIG1vcmUKKwkJLy8gZm9yIHVzIHRvIHJlcXVlc3QuIElmLCBpbnN0ZWFkLCByZWZyZXNoUGVuZGluZyBpcyBmYWxzZSwgdGhlbiB3ZQorCQkvLyBjaGVjayB0byBzZWUgaWYgYSByZWZyZXNoSm9iIGlzIGFscmVhZHkgcnVubmluZy4gSWYgc28sIHdlIHNldAorCQkvLyByZWZyZXNoUGVuZGluZyB0byB0cnVlLCBhbmQgZXhpdC4gSWYgbm90LCB3ZSBjcmVhdGUgdGhlIGJhY2tncm91bmQKKwkJLy8gcmVmcmVzaCBqb2IgYW5kIGFzc2lnbiBpdCB0byB0aGUgZmllbGQgcmVmcmVzaEpvYi4KKwkJLy8KKwkJLy8gSW4gdGhlIGJhY2tncm91bmQgcmVmcmVzaGluZyBqb2Igd2UgcHJvY2VzcyB0aGUgTGF0L0xvbmcgZGF0YSBhbmQKKwkJLy8gdGhlbiB3aGVuIGRvbmUgd2UgYWRkIGEgUnVubmFibGUgb24gdG8gdGhlIFVJIHRocmVhZCB0byByZWRyYXcgdGhlCisJCS8vIG1hcENhbnZhcy4gVGhhdCBSdW5uYWJsZSBhbHNvIGNoZWNrcyB0byBzZWUgaWYgdGhlIHJlZnJlc2ggcGVuZGluZworCQkvLyBmbGFnIGlzIHNldCBhbmQgaWYgc28sIHJlc2V0cyB0aGUgZmxhZyBhbmQgdGhlbiBhZGRzIGFub3RoZXIgUnVubmFibGUKKwkJLy8gdG8gdGhlIFVJIHRocmVhZCB0byByZS1lbnRlciB0aGUgcmVmcmVzaE1hcENhbnZhcyBtZXRob2QuCisJCS8vCisJCS8vIFRoZXJlIGlzIGEgcmFjZSBjb25kaXRpb24gaW4gdGhlIG1ldGhvZCBpZiBjYWxsZWQgYnkgb3RoZXIgdGhhbiB0aGUKKwkJLy8gVUkgdGhyZWFkLiBJZiBhIHRocmVhZCBkaWZmZXJlbnQgZnJvbSB0aGUgVUkgdGhyZWFkIHdlcmUgdG8gY2FsbCB0aGlzCisJCS8vIG1ldGhvZCB0aGVuIGl0IGNvdWxkIHJlYWNoIHBvc2l0aW9uICJSQyAjMiIgaW4gdGhlIGNvZGUgYmVsb3cgYW5kCisJCS8vIHRoZW4gYmUgcHJlZW1wdGVkLiBUaGUgVUkgdGhyZWFkIGNvdWxkIHRoZW4gZXhlY3V0ZSB0aGUgdGVzdCBhdCAiUkMKKwkJLy8gIzEiIGJlbG93IGFuZCBmaW5kIHRoYXQgdGhlcmUgaXMgbm8gcmVmcmVzaCBwZW5kaW5nLiBJdCB3b3VsZCBleGl0CisJCS8vIGFuZCB0aGVuIHRoZSBvdGhlciB0aHJlYWQgd291bGQgcmVzdW1lIGF0ICJSQyAjMiIgYW5kIHNldCB0aGUKKwkJLy8gcmVmcmVzaFBlbmRpbmcgZmxhZy4gVGhpcyB3b3VsZCBjYXVzZSBhbGwgc3Vic2VxdWVudCBtZXRob2QKKwkJLy8gaW52b2NhdGlvbnMgdG8gaW1tZWRpYXRlbHkgZXhpdCBhbmQgdGhlIG1hcCBjYW52YXMgd291bGQgbmV2ZXIgYmUKKwkJLy8gcmVmcmVzaGVkIGFnYWluLgorCisJCS8vIElzIHRoZXJlIGEgcmVmcmVzaCBwZW5kaW5nPworCQlpZiAoIXJlZnJlc2hQZW5kaW5nKSB7CisJCQkvLyBObworCQkJLy8gSXMgdGhlcmUgYWxyZWFkeSBhIHJlZnJlc2ggam9iPworCQkJaWYgKHJlZnJlc2hKb2IgPT0gbnVsbCkgeworCQkJCS8vIE5vCisJCQkJLy8gUmVmcmVzaCB0aGUgbWFwIGNhbnZhcyBpbiB0aGUgYmFja2dyb3VuZAorCQkJCXJlZnJlc2hKb2IgPSBuZXcgSm9iKE1lc3NhZ2VzLmdldFN0cmluZygiSU1WaWV3Lk1SZWZyZXNoIikpIHsKKwkJCQkJLyoqCisJCQkJCSAqIEBzZWUgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLmpvYnMuSm9iI3J1bihvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVByb2dyZXNzTW9uaXRvcikKKwkJCQkJICovCisJCQkJCUBPdmVycmlkZQorCQkJCQlwcm90ZWN0ZWQgSVN0YXR1cyBydW4oZmluYWwgSVByb2dyZXNzTW9uaXRvciBtb25pdG9yKSB7CisKKwkJCQkJCWZpbmFsIFN0ZW1Qb2x5Z29uc0xpc3QgcG9seWdvbnNUb0RyYXcgPSBjcmVhdGVQb2x5Z29uc1RvRHJhdyhtb25pdG9yKTsKKwkJCQkJCS8vIFN0aWxsIG9rIHRvIHJ1bj8KKwkJCQkJCWlmKHBvbHlnb25zVG9EcmF3ID09IG51bGwpIHJldHVybiBTdGF0dXMuT0tfU1RBVFVTOworCQkJCQkJZmluYWwgRGlzcGxheSBkaXNwbGF5ID0gRGlzcGxheS5nZXREZWZhdWx0KCk7CisJCQkJCQlpZiAoIWRpc3BsYXkuaXNEaXNwb3NlZCgpKSB7CisJCQkJCQkJLy8gWWVzCisJCQkJCQkJdHJ5IHsKKwkJCQkJCQkJZGlzcGxheS5hc3luY0V4ZWMobmV3IFJ1bm5hYmxlKCkgeworCQkJCQkJCQkJcHVibGljIHZvaWQgcnVuKCkgeworCQkJCQkJCQkJCS8vIFRoaXMgcnVucyBpbiB0aGUgVUkgdGhyZWFkCisJCQkJCQkJCQkJLy8gSXMgdGhlIHJlbmRlcmVyIHN0aWxsIGFyb3VuZD8KKwkJCQkJCQkJCQlpZiAoIWdlb2dyYXBoaWNSZW5kZXJlci5pc0Rpc3Bvc2VkKCkpIHsKKwkJCQkJCQkJCQkJLy8gWWVzCisJCQkJCQkJCQkJCWdlb2dyYXBoaWNSZW5kZXJlcgorCQkJCQkJCQkJCQkJCS5yZW5kZXIocG9seWdvbnNUb0RyYXcsIHNpbXVsYXRpb24pOworCisJCQkJCQkJCQkJCXJlZnJlc2hKb2IgPSBudWxsOworCQkJCQkJCQkJCQkvLyBSQyAjMQorCQkJCQkJCQkJCQkvLyBJcyB0aGVyZSBhIHJlZnJlc2ggcGVuZGluZz8KKwkJCQkJCQkJCQkJaWYgKHJlZnJlc2hQZW5kaW5nKSB7CisJCQkJCQkJCQkJCQkvLyBZZXMKKwkJCQkJCQkJCQkJCXJlZnJlc2hQZW5kaW5nID0gZmFsc2U7CisJCQkJCQkJCQkJCQkvLyBXZSBjcmVhdGUgYSBuZXcgUnVubmFibGUgdG8KKwkJCQkJCQkJCQkJCS8vIGF2b2lkIHJlY3Vyc2lvbgorCQkJCQkJCQkJCQkJLy8gT2sgdG8gcnVuPworCQkJCQkJCQkJCQkJZmluYWwgRGlzcGxheSBkaXNwbGF5MiA9IERpc3BsYXkKKwkJCQkJCQkJCQkJCQkJLmdldERlZmF1bHQoKTsKKwkJCQkJCQkJCQkJCWlmICghZGlzcGxheTIuaXNEaXNwb3NlZCgpKSB7CisJCQkJCQkJCQkJCQkJLy8gWWVzCisJCQkJCQkJCQkJCQkJZGlzcGxheTIKKwkJCQkJCQkJCQkJCQkJCS5hc3luY0V4ZWMobmV3IFJ1bm5hYmxlKCkgeworCQkJCQkJCQkJCQkJCQkJCXB1YmxpYyB2b2lkIHJ1bigpIHsKKwkJCQkJCQkJCQkJCQkJCQkJLy8gVGhpcyBydW5zCisJCQkJCQkJCQkJCQkJCQkJCS8vIGluIHRoZSBVSQorCQkJCQkJCQkJCQkJCQkJCQkvLyB0aHJlYWQKKwkJCQkJCQkJCQkJCQkJCQkJcmVmcmVzaCgpOworCQkJCQkJCQkJCQkJCQkJCX0gLy8gYXN5bmNFeGVjCisJCQkJCQkJCQkJCQkJCQl9KTsKKwkJCQkJCQkJCQkJCX0gLy8gaWYgb2sgdG8gcnVuCisJCQkJCQkJCQkJCX0gLy8gaWYgcmVmcmVzaCBwZW5kaW5nCisJCQkJCQkJCQkJfSAvLyBpZiB0aGUgbWFwQ2FudmFzIHN0aWxsIGFyb3VuZD8KKwkJCQkJCQkJCX0gLy8gcnVuIChVSSB0aHJlYWQgbWFwQ2FudmFzLnJlZHJhdygpKQorCQkJCQkJCQl9KTsKKwkJCQkJCQl9IC8vIHRyeQorCQkJCQkJCWNhdGNoIChmaW5hbCBOdWxsUG9pbnRlckV4Y2VwdGlvbiBucGUpIHsKKwkJCQkJCQkJLy8gc2VlIDE3Nzk2NgorCQkJCQkJCQkvLyBXZSBpZ25vcmUgdGhlIGV4Y2VwdGlvbiwgdGhlcmUncyBub3RoaW5nIHRvCisJCQkJCQkJCS8vIGRvCisJCQkJCQkJfSAvLyBjYXRjaCBOdWxsUG9pbnRlckV4Y2VwdGlvbgorCQkJCQkJfSAvLyBpZiBvayB0byBydW4KKwkJCQkJCW1vbml0b3IuZG9uZSgpOworCQkJCQkJcmV0dXJuIFN0YXR1cy5PS19TVEFUVVM7CisJCQkJCX0gLy8gcnVuIChiYWNrZ3JvdW5kIHBvbHlnb24gcHJvY2Vzc2luZyBKb2IpCisKKwkJCQl9OworCQkJCXJlZnJlc2hQZW5kaW5nID0gZmFsc2U7CisJCQkJcmVmcmVzaEpvYi5zY2hlZHVsZSgpOworCQkJfSAvLyBpZiBub3QgYWxyZWFkeSBhIHJlZnJlc2ggam9iCisJCQllbHNlIHsKKwkJCQkvLyBZZXMKKwkJCQkvLyBUaGVyZSBpcyBhbHJlYWR5IGEgcmVmcmVzaCBqb2Igc28gcmVtZW1iZXIgdGhhdCBhIHJlZnJlc2ggaXMKKwkJCQkvLyBwZW5kaW5nCisJCQkJLy8gUkMgIzIKKwkJCQlyZWZyZXNoUGVuZGluZyA9IHRydWU7CisJCQl9IC8vIGVsc2UKKwkJfSAvLyBpZiBubyByZWZyZXNoIGlzIHBlbmRpbmcKKworCX0gLy8gcmVmcmVzaAorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5XaWRnZXQjZGlzcG9zZSgpCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgZGlzcG9zZSgpIHsKKwkJc3VwZXIuZGlzcG9zZSgpOworCQkvLyBJcyB0aGVyZSBhIHNpbXVsYXRpb24gd2UncmUgbGlzdGVuaW5nIHRvPworCQlpZiAoc2ltdWxhdGlvbiAhPSBudWxsKSB7CisJCQkvLyBZZXMKKwkJCS8vIE5vdCBhbnkgbW9yZQorCQkJc2ltdWxhdGlvbi5yZW1vdmVTaW11bGF0aW9uTGlzdGVuZXIodGhpcyk7CisJCX0KKworCQlvcHRpb25zQmFyLnJlbW92ZUNvbG9yUHJvdmlkZXJDaGFuZ2VkTGlzdGVuZXIodGhpcyk7CisJCW9wdGlvbnNCYXIucmVtb3ZlUHJvcGVydHlTZWxlY3Rpb25MaXN0ZW5lcih0aGlzKTsKKworCQlnZW9ncmFwaGljUmVuZGVyZXIucmVtb3ZlU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyKHRoaXMpOworCisJCS8vIFNob3VsZG4ndCBiZSBhbnkgc2VsZWN0aW9uIGNoYW5nZWQgbGlzdGVuZXJzCisJCWFzc2VydCBsaXN0ZW5lcnMuc2l6ZSgpID09IDA7CisKKwkJQWN0aXZhdG9yLmdldERlZmF1bHQoKS5nZXRQbHVnaW5QcmVmZXJlbmNlcygpCisJCQkJLnJlbW92ZVByb3BlcnR5Q2hhbmdlTGlzdGVuZXIodGhpcyk7CisKKwl9IC8vIGRpc3Bvc2UKKworCS8qKgorCSAqIENyZWF0ZSB0aGUgdmlldydzIGNvbnRleHQgbWVudSBhbmQgYWRkIHRoZSBhY3Rpb24gaGFuZGxlcnMgdG8gaXQuCisJICovCisJcHJpdmF0ZSB2b2lkIGNyZWF0ZUNvbnRleHRNZW51KGZpbmFsIENvbXBvc2l0ZSBwYXJlbnQpIHsKKworCQkvLyBDb250ZXh0IE1lbnUKKwkJZmluYWwgTWVudU1hbmFnZXIgY29udGV4dE1lbnVNYW5hZ2VyID0gbmV3IE1lbnVNYW5hZ2VyKCk7CisKKwkJLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKwkJY29udGV4dE1lbnVNYW5hZ2VyLmFkZChuZXcgUmVzZXRSZW5kZXJlcigpKTsKKworCQkvLyBQbGFjZSBIb2xkZXIgZm9yIE1lbnUgQWRkaXRpb25zCisJCWNvbnRleHRNZW51TWFuYWdlci5hZGQobmV3IFNlcGFyYXRvcigKKwkJCQlJV29ya2JlbmNoQWN0aW9uQ29uc3RhbnRzLk1CX0FERElUSU9OUykpOworCisJCS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisJCWZpbmFsIE1lbnUgcG9wVXBNZW51ID0gY29udGV4dE1lbnVNYW5hZ2VyLmNyZWF0ZUNvbnRleHRNZW51KHBhcmVudCk7CisKKwkJLy8gU2V0IHRoZSBjb250ZXh0IG1lbnUgZm9yIHRoZSB2aWV3ZXIKKwkJcGFyZW50LnNldE1lbnUocG9wVXBNZW51KTsKKworCX0gLy8gY3JlYXRlQ29udGV4dE1lbnUKKworCS8qKgorCSAqIEBwYXJhbSBldmVudAorCSAqLworCXB1YmxpYyB2b2lkIHByb3BlcnR5Q2hhbmdlKGZpbmFsIFByb3BlcnR5Q2hhbmdlRXZlbnQgZXZlbnQpIHsKKwkJc2V0UHJlZmVyZW5jZXMoKTsKKwl9IC8vIHByb3BlcnR5Q2hhbmdlCisKKwkvKioKKwkgKiBAcGFyYW0gZXZlbnQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZWxlY3Rpb25DaGFuZ2VkKGZpbmFsIFNlbGVjdGlvbkNoYW5nZWRFdmVudCBldmVudCkgeworCQlmaXJlU2VsZWN0aW9uKGV2ZW50LmdldFNlbGVjdGlvbigpKTsKKwl9CisKKwlwcm90ZWN0ZWQgY2xhc3MgUmVzZXRSZW5kZXJlciBleHRlbmRzIEFjdGlvbiB7CisKKwkJLyoqCisJCSAqIEBzZWUgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLkFjdGlvbiNnZXRUZXh0KCkKKwkJICovCisJCUBPdmVycmlkZQorCQlwdWJsaWMgU3RyaW5nIGdldFRleHQoKSB7CisJCQlyZXR1cm4gTWVzc2FnZXMuZ2V0U3RyaW5nKCJNYXBNZW51LlJlc2V0Iik7CisJCX0KKworCQkvKioKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uQWN0aW9uI3J1bigpCisJCSAqLworCQlAT3ZlcnJpZGUKKwkJcHVibGljIHZvaWQgcnVuKCkgeworCQkJZ2VvZ3JhcGhpY1JlbmRlcmVyLnJlc2V0KCk7CisKKwkJCS8vIHNldFRyYW5zbGF0aW9uKERFRkFVTFRfSU5JVElBTF9YX1RSQU5TTEFUSU9OLAorCQkJLy8gREVGQVVMVF9JTklUSUFMX1lfVFJBTlNMQVRJT04pOworCQkJLy8gem9vbUZhY3RvciA9IElOSVRJQUxfWk9PTV9GQUNUT1I7CisJCQkvLworCQkJLy8gLy8gUmVzZXQgdGhlIGdhaW4gZmFjdG9yIGFuZCB1cGRhdGUgdGhlIGNoZWNrcyBpbiB0aGUgY29udGV4dAorCQkJLy8gbWVudQorCQkJLy8gbGFzdEdhaW5GYWN0b3JBY3Rpb24uc2V0Q2hlY2tlZChmYWxzZSk7CisJCQkvLyBkZWZhdWx0R2FpbkZhY3RvckFjdGlvbi5ydW4oKTsKKwkJCS8vIGRlZmF1bHRHYWluRmFjdG9yQWN0aW9uLnNldENoZWNrZWQodHJ1ZSk7CisJCQkvLworCQkJLy8gdXNlTG9nU2NhbGluZyA9IERFRkFVTFRfVVNFX0xPR1NDQUxJTkc7CisJCQkvLyBsb2dhcml0aG1pY0FjdGlvbi5zZXRDaGVja2VkKHVzZUxvZ1NjYWxpbmcpOworCQkJLy8KKwkJCS8vIGRyYXdQb2x5Z29uQm9yZGVycyA9IERFRkFVTFRfRFJBV19QT0xZR09OX0JPUkRFUlM7CisJCQkvLyBkcmF3UG9seWdvbkJvcmRlcnNBY3Rpb24uc2V0Q2hlY2tlZChkcmF3UG9seWdvbkJvcmRlcnMpOworCQkJLy8KKwkJCS8vIGRyYXdQb2x5Z29uQ2VudGVyQ29ubmVjdGlvbnMgPQorCQkJLy8gREVGQVVMVF9EUkFXX1BPTFlHT05fQ0VOVEVSX0NPTk5FQ1RJT05TOworCQkJLy8gY29ubmVjdFBvbHlnb25DZW50ZXJzQWN0aW9uCisJCQkvLyAuc2V0Q2hlY2tlZChkcmF3UG9seWdvbkNlbnRlckNvbm5lY3Rpb25zKTsKKworCQkJZ2VvZ3JhcGhpY1JlbmRlcmVyLnJlZHJhdygpOworCQl9CisJfSAvLyBSZXNldE1hcENhbnZhc0FjdGlvbgorCisJLyoqCisJICogVGhpcyBjbGFzcyBpcyB1c2VkIHRvIGhvbGQgZGF0YSB1c2VkIHRvIGRpc3BsYXkgdGhlIHJlbGF0aXZlIHZhbHVlcyBvZiBhCisJICoge0BsaW5rIERlY29yYXRvcn0uIEluc3RhbmNlcyBvZiB0aGlzIGNsYXNzIGFyZSBjcmVhdGVkIHdoZW4gdGhlIGxhYmVsCisJICogdmFsdWVzIG9mIGEge0BsaW5rIERlY29yYXRvcn0gYXJlIGZpcnN0IGRyYXduIGFuZCB0aGVuIHN1YnNlcXVlbnRseQorCSAqIGNhY2hlZCBpbiB7QGxpbmsgI2RlY29yYXRvclRvRGVjb3JhdG9yRGlzcGxheURhdGFNYXB9IGZvciBmdXR1cmUKKwkgKiByZXRyaWV2YWwuCisJICovCisJcHJvdGVjdGVkIHN0YXRpYyBjbGFzcyBEZWNvcmF0b3JEaXNwbGF5RGF0YSB7CisKKwkJcHJpdmF0ZSBSZWxhdGl2ZVZhbHVlUHJvdmlkZXJBZGFwdGVyIHJ2cDsKKworCQlwcml2YXRlIExhdExvbmdQcm92aWRlckFkYXB0ZXIgbGF0TG9uZ1Byb3ZpZGVyOworCisJCXByaXZhdGUgZmluYWwgTGlzdDxMYWJlbERhdGE+IGxhYmVsRGF0YXMgPSBuZXcgQXJyYXlMaXN0PExhYmVsRGF0YT4oKTsKKworCQlwcml2YXRlIGZpbmFsIExpc3Q8TGFiZWxEYXRhPiBsYWJlbHNXaXRoVW5yZXNvbHZlZExhdExvbmcgPSBuZXcgQXJyYXlMaXN0PExhYmVsRGF0YT4oKTsKKworCQkvKioKKwkJICogRGVmYXVsdCBjb25zdHJ1Y3RvcgorCQkgKi8KKwkJcHVibGljIERlY29yYXRvckRpc3BsYXlEYXRhKCkgeworCQkJLy8gbm90aGluZworCQl9CisKKwkJLyoqCisJCSAqIEByZXR1cm4gPGNvZGU+dHJ1ZTwvY29kZT4gaWYgYWxsIG9mIHRoZSBsYWJlbHMgaGF2ZSB2YWxpZAorCQkgKiAgICAgICAgIGxhdGl0dWRlL2xvbmdpdHVkZSBkYXRhIHJldHJpZXZlZC4KKwkJICovCisJCXB1YmxpYyBib29sZWFuIGhhc0FsbExhdExvbmcoKSB7CisJCQlyZXR1cm4gbGFiZWxzV2l0aFVucmVzb2x2ZWRMYXRMb25nLnNpemUoKSA9PSAwOworCQl9CisKKwkJLyoqCisJCSAqIEByZXR1cm4gdGhlIGxhYmVsIGRhdGEgZm9yIHRoZSBkZWNvcmF0b3IKKwkJICovCisJCXB1YmxpYyBMaXN0PExhYmVsRGF0YT4gZ2V0TGFiZWxEYXRhKCkgeworCQkJcmV0dXJuIGxhYmVsRGF0YXM7CisJCX0KKworCQkvKioKKwkJICogQHJldHVybiB0aGUge0BsaW5rIFJlbGF0aXZlVmFsdWVQcm92aWRlckFkYXB0ZXJ9CisJCSAqLworCQlwdWJsaWMgUmVsYXRpdmVWYWx1ZVByb3ZpZGVyQWRhcHRlciBnZXRSZWxhdGl2ZVZhbHVlUHJvdmlkZXJBZGFwdGVyKCkgeworCQkJcmV0dXJuIHJ2cDsKKwkJfSAvLyBnZXRSZWxhdGl2ZVZhbHVlUHJvdmlkZXJBZGFwdGVyCisKKwkJLyoqCisJCSAqIEdvIHRocm91Z2ggZWFjaCBvZiB0aGUgbGFiZWwgZGF0YSBlbnRyaWVzIGFuZCB0cnkgdG8gcmV0cmlldmUgdGhlCisJCSAqIG9uZXMgdGhhdCBkbyBub3QgaGF2ZSBsYXQvbG9uZyBkYXRhIHlldC4KKwkJICogCisJCSAqIEBwYXJhbSBtb25pdG9yCisJCSAqICAgICAgICAgICAgcHJvZ3Jlc3MgbW9uaXRvcgorCQkgKi8KKwkJdm9pZCB1cGRhdGVMYXRMb25nKGZpbmFsIElQcm9ncmVzc01vbml0b3IgbW9uaXRvcikgeworCQkJZm9yIChmaW5hbCBJdGVyYXRvcjxMYWJlbERhdGE+IGl0ZXIgPSBsYWJlbHNXaXRoVW5yZXNvbHZlZExhdExvbmcKKwkJCQkJLml0ZXJhdG9yKCk7IGl0ZXIuaGFzTmV4dCgpOykgeworCQkJCWZpbmFsIExhYmVsRGF0YSBsZCA9IGl0ZXIubmV4dCgpOworCisJCQkJbGF0TG9uZ1Byb3ZpZGVyLnNldFRhcmdldChsZC5nZXRMYWJlbCgpLmdldE5vZGUoKSk7CisJCQkJbGQuc2V0TGF0TG9uZ0RhdGEobGF0TG9uZ1Byb3ZpZGVyLmdldExhdExvbmdOb1dhaXQoKSk7CisJCQkJLy8gRGlkIHdlIGdldCBzb21lIGRhdGE/CisJCQkJCisJCQkJTGF0TG9uZyBkYXRhID0gbGQuZ2V0TGF0TG9uZ0RhdGEoKTsKKwkJCQkKKwkJCQlpZiAoZGF0YSAhPSBudWxsICYmIGRhdGEuc2l6ZSgpICE9IDApIHsKKwkJCQkJLy8gWWVzCisJCQkJCS8vIE5vIG5lZWQgdG8ga2VlcCB0aGlzIG9uZSBvbiB0aGUgbGlzdAorCQkJCQlpdGVyLnJlbW92ZSgpOworCQkJCX0gLy8gaWYgd2UgZ290IHNvbWUgZGF0YQorCQkJfSAvLyBmb3IgZWFjaCBEeW5hbWljTm9kZUxhYmVsSW1wbAorCQl9IC8vIHVwZGF0ZUxhdExvbmcKKworCQkvKioKKwkJICogQHBhcmFtIGxhYmVsCisJCSAqICAgICAgICAgICAgYSB7QGxpbmsgRHluYW1pY05vZGVMYWJlbH0gdG8gYWRkIHRvIHRoZSBzZXQuCisJCSAqLworCQlwdWJsaWMgdm9pZCBhZGRMYWJlbChmaW5hbCBEeW5hbWljTm9kZUxhYmVsIGxhYmVsKSB7CisJCQlmaW5hbCBMYWJlbERhdGEgbGQgPSBuZXcgTGFiZWxEYXRhKGxhYmVsKTsKKwkJCWxhYmVsRGF0YXMuYWRkKGxkKTsKKwkJCWxhYmVsc1dpdGhVbnJlc29sdmVkTGF0TG9uZy5hZGQobGQpOworCQl9IC8vIGFkZExhYmVsCisKKwkJLyoqCisJCSAqIEBwYXJhbSBsYXRMb25nUHJvdmlkZXIKKwkJICogICAgICAgICAgICB0aGUge0BsaW5rIExhdExvbmdQcm92aWRlckFkYXB0ZXJ9IHRoYXQgd2lsbCBwcm92aWRlIHRoZQorCQkgKiAgICAgICAgICAgIGxhdGl0dWRlL2xvbmdpdHVkZSBkYXRhIGZvciB0aGUgbGFiZWxzLgorCQkgKi8KKwkJcHVibGljIHZvaWQgc2V0TGF0TG9uZ1Byb3ZpZGVyQWRhcHRlcigKKwkJCQlmaW5hbCBMYXRMb25nUHJvdmlkZXJBZGFwdGVyIGxhdExvbmdQcm92aWRlcikgeworCQkJdGhpcy5sYXRMb25nUHJvdmlkZXIgPSBsYXRMb25nUHJvdmlkZXI7CisJCX0KKworCQkvKioKKwkJICogQHBhcmFtIHJ2cAorCQkgKiAgICAgICAgICAgIHRoZSB7QGxpbmsgUmVsYXRpdmVWYWx1ZVByb3ZpZGVyQWRhcHRlcn0gdGhhdCB3aWxsIHByb3ZpZGUKKwkJICogICAgICAgICAgICB0aGUgcmVsYXRpdmUgdmFsdWVzIGZvciB0aGUgbGFiZWxzLgorCQkgKi8KKwkJcHVibGljIHZvaWQgc2V0UmVsYXRpdmVWYWx1ZVByb3ZpZGVyQWRhcHRlcigKKwkJCQlmaW5hbCBSZWxhdGl2ZVZhbHVlUHJvdmlkZXJBZGFwdGVyIHJ2cCkgeworCQkJdGhpcy5ydnAgPSBydnA7CisJCX0gLy8gc2V0UmVsYXRpdmVWYWx1ZVByb3ZpZGVyQWRhcHRlcgorCisJCS8qKgorCQkgKiBUaGlzIGNsYXNzIG1haW50YWlucyBhIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIGEKKwkJICoge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5MYWJlbH0gYW5kIGl0cworCQkgKiBsYXRpdHVkZS9sb25naXR1ZGUgZGF0YS4KKwkJICovCisJCXB1YmxpYyBzdGF0aWMgY2xhc3MgTGFiZWxEYXRhIHsKKworCQkJcHJpdmF0ZSBmaW5hbCBEeW5hbWljTm9kZUxhYmVsIGxhYmVsOworCisJCQlwcml2YXRlIExhdExvbmcgbGF0TG9uZ0RhdGE7CisKKwkJCS8qKgorCQkJICogQHBhcmFtIGxhYmVsCisJCQkgKi8KKwkJCXB1YmxpYyBMYWJlbERhdGEoZmluYWwgRHluYW1pY05vZGVMYWJlbCBsYWJlbCkgeworCQkJCXRoaXMubGFiZWwgPSBsYWJlbDsKKwkJCX0KKworCQkJLyoqCisJCQkgKiBAcmV0dXJuIHRoZSBsYWJlbAorCQkJICovCisJCQlwdWJsaWMgRHluYW1pY05vZGVMYWJlbCBnZXRMYWJlbCgpIHsKKwkJCQlyZXR1cm4gbGFiZWw7CisJCQl9CisKKwkJCS8qKgorCQkJICogQHJldHVybiB0aGUgbGF0aXR1ZGUvbG9uZ2l0dWRlIGRhdGEKKwkJCSAqLworCQkJcHVibGljIExhdExvbmcgZ2V0TGF0TG9uZ0RhdGEoKSB7CisJCQkJcmV0dXJuIGxhdExvbmdEYXRhOworCQkJfQorCisJCQkvKioKKwkJCSAqIEBwYXJhbSBsYXRMb25nRGF0YQorCQkJICovCisJCQlwdWJsaWMgdm9pZCBzZXRMYXRMb25nRGF0YShmaW5hbCBMYXRMb25nIGxhdExvbmdEYXRhKSB7CisJCQkJdGhpcy5sYXRMb25nRGF0YSA9IGxhdExvbmdEYXRhOworCQkJfQorCisJCX0gLy8gTGFiZWxEYXRhCisJfQorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb25Qcm92aWRlciNhZGRTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIob3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyKQorCSAqLworCXB1YmxpYyB2b2lkIGFkZFNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcigKKwkJCWZpbmFsIElTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIgbGlzdGVuZXIpIHsKKwkJbGlzdGVuZXJzLmFkZChsaXN0ZW5lcik7CisJfQorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb25Qcm92aWRlciNyZW1vdmVTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIob3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyKQorCSAqLworCXB1YmxpYyB2b2lkIHJlbW92ZVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcigKKwkJCWZpbmFsIElTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIgbGlzdGVuZXIpIHsKKwkJbGlzdGVuZXJzLnJlbW92ZShsaXN0ZW5lcik7CisJfQorCisJLyoqCisJICogQHJldHVybiB0aGUgc2VsZWN0aW9uCisJICovCisJcHVibGljIGZpbmFsIElTZWxlY3Rpb24gZ2V0U2VsZWN0aW9uKCkgeworCQlyZXR1cm4gc2VsZWN0aW9uOworCX0KKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uUHJvdmlkZXIjc2V0U2VsZWN0aW9uKG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvbikKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRTZWxlY3Rpb24oZmluYWwgSVNlbGVjdGlvbiBzZWxlY3Rpb24pIHsKKwkJdGhpcy5zZWxlY3Rpb24gPSBzZWxlY3Rpb247CisJCWZpcmVTZWxlY3Rpb24oc2VsZWN0aW9uKTsKKwl9CisKKwkvKioKKwkgKiBQYXNzIGEge0BsaW5rIFNlbGVjdGlvbkNoYW5nZWRFdmVudH0gYWxvbmcgdG8gbGlzdGVuZXJzLgorCSAqIAorCSAqIEBwYXJhbSBzZWxlY3Rpb24KKwkgKiAgICAgICAgICAgIHRoZSB7QGxpbmsgSVNlbGVjdGlvbn0gdG8gYmUgZ2l2aW5nIHRvIHRoZSBsaXN0ZW5lcnMuCisJICovCisJcHVibGljIHZvaWQgZmlyZVNlbGVjdGlvbihmaW5hbCBJU2VsZWN0aW9uIHNlbGVjdGlvbikgeworCisJCWZpbmFsIFNlbGVjdGlvbkNoYW5nZWRFdmVudCBldmVudCA9IG5ldyBTZWxlY3Rpb25DaGFuZ2VkRXZlbnQodGhpcywKKwkJCQlzZWxlY3Rpb24pOworCQlmb3IgKGZpbmFsIElTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIgbGlzdGVuZXIgOiBsaXN0ZW5lcnMpIHsKKwkJCWxpc3RlbmVyLnNlbGVjdGlvbkNoYW5nZWQoZXZlbnQpOworCQl9IC8vIGZvciBlYWNoIElTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIKKworCX0gLy8gZmlyZVNlbGVjdGlvbgorCisJLyoqCisJICogQHBhcmFtIHBhcmVudAorCSAqIEByZXR1cm4KKwkgKi8KKwlwcm90ZWN0ZWQgQ29tcG9zaXRlIGNyZWF0ZUJvdHRvbUNvbXBvc2l0ZShmaW5hbCBDb21wb3NpdGUgcGFyZW50KSB7CisJCQkKKy8vCQl0b29sa2l0ID0gbmV3IEZvcm1Ub29sa2l0KHBhcmVudC5nZXREaXNwbGF5KCkpOworLy8JCUV4cGFuZGFibGVDb21wb3NpdGUgZWMgPSAgdG9vbGtpdC5jcmVhdGVFeHBhbmRhYmxlQ29tcG9zaXRlKHBhcmVudCwgRXhwYW5kYWJsZUNvbXBvc2l0ZS5UUkVFX05PREUpOworLy8JCWVjLnNldFRleHQoIk1hcCBDb250cm9scyIpOworLy8JCWVjLnNldEV4cGFuZGVkKGV4cGFuc2lvblN0YXRlKTsKKy8vCQllYy5hZGRFeHBhbnNpb25MaXN0ZW5lcihuZXcgRXhwYW5zaW9uQWRhcHRlcigpIHsKKy8vCQkJcHVibGljIHZvaWQgZXhwYW5zaW9uU3RhdGVDaGFuZ2VkKEV4cGFuc2lvbkV2ZW50IGUpIHsKKy8vCQkJCS8vQWN0aXZhdG9yLmxvZ0luZm9ybWF0aW9uKCJ0b2dnbGUgbWUgbm93Iik7CisvLwkJCX0KKy8vCQl9KTsKKy8vCQlvcHRpb25zQmFyID0gbmV3IEdlb1ZpZXdPcHRpb25zQmFyKGVjLCBTV1QuTk9ORSk7CisJCQorCQlvcHRpb25zQmFyID0gbmV3IEdlb1ZpZXdPcHRpb25zQmFyKHBhcmVudCwgU1dULk5PTkUpOworCQkKKwkJb3B0aW9uc0Jhci5hZGRDb2xvclByb3ZpZGVyQ2hhbmdlZExpc3RlbmVyKHRoaXMpOworCQlvcHRpb25zQmFyLmFkZFByb3BlcnR5U2VsZWN0aW9uTGlzdGVuZXIodGhpcyk7CisJCQorLy8JCWVjLnNldENsaWVudChvcHRpb25zQmFyKTsKKy8vCSAgICByZXR1cm4gZWM7CisJCQorCQkgcmV0dXJuIG9wdGlvbnNCYXI7CisJfSAvLyBjcmVhdGVCb3R0b21Db21wb3NpdGUKKworCS8qKgorCSAqIEBwYXJhbSBwcm9wZXJ0eVNlbGVjdGlvbkV2ZW50CisJICovCisJcHVibGljIHZvaWQgcHJvcGVydHlTZWxlY3RlZCgKKwkJCWZpbmFsIFByb3BlcnR5U2VsZWN0aW9uRXZlbnQgcHJvcGVydHlTZWxlY3Rpb25FdmVudCkgeworCQlpZiAocHJvcGVydHlTZWxlY3Rpb25FdmVudCA9PSBudWxsKSB7CisJCQlzZWxlY3RlZEVkZ2UgPSAiIjsKKwkJfQorCQkvLyBIYWNrCisJCWVsc2UgaWYgKHByb3BlcnR5U2VsZWN0aW9uRXZlbnQuZ2V0U291cmNlKCkgaW5zdGFuY2VvZiBTdHJpbmcpIHsKKwkJCXNlbGVjdGVkRWRnZSA9IChTdHJpbmcpIHByb3BlcnR5U2VsZWN0aW9uRXZlbnQuZ2V0U291cmNlKCk7CisJCX0KKwkJcmVmcmVzaCgpOworCX0KKworCS8qKgorCSAqIEBwYXJhbSBwYXJlbnQKKwkgKiAgICAgICAgICAgIHRoZSBwYXJlbnQgU1dUIGNvbnRyb2wgdGhhdCB0aGlzIHtAbGluayBDb21wb3NpdGV9IHdpbGwgYmUgYQorCSAqICAgICAgICAgICAgY2hpbGQgb2YKKwkgKiBAcmV0dXJuIHRoZSBTV1Qge0BsaW5rIENvbXBvc2l0ZX0gdG8gYmUgZGlzcGxheWVkIGFib3ZlIHRoZQorCSAqICAgICAgICAge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0udWkudmlld3MuZ2VvZ3JhcGhpYy5tYXAuTWFwQ2FudmFzfSBpbiB0aGUKKwkgKiAgICAgICAgIGNvbnRyb2wKKwkgKi8KKwlwcm90ZWN0ZWQgQ29tcG9zaXRlIGNyZWF0ZVRvcENvbXBvc2l0ZShmaW5hbCBDb21wb3NpdGUgcGFyZW50KSB7CisJCWZpbmFsIENvbXBvc2l0ZSB0b3BDb21wb3NpdGUgPSBuZXcgQ29tcG9zaXRlKHBhcmVudCwgU1dULk5PTkUpOworCisJCWZpbmFsIEZpbGxMYXlvdXQgdG9wQ29tcG9zaXRlTGF5b3V0ID0gbmV3IEZpbGxMYXlvdXQoU1dULkhPUklaT05UQUwpOworCQl0b3BDb21wb3NpdGUuc2V0TGF5b3V0KHRvcENvbXBvc2l0ZUxheW91dCk7CisKKwkJc2ltdWxhdGlvbk5hbWVMYWJlbCA9IG5ldyBMYWJlbCh0b3BDb21wb3NpdGUsIFNXVC5MRUZUKTsKKwkJc2ltdWxhdGlvbk5hbWVMYWJlbC5zZXRUZXh0KCIiKTsKKworCQkvLyAgSkhLOiBBZGRpbmcgZ2FpbiBhbmQgbG9nL2xpbmVhciBzY2FsZSBpbmZvIHRvIHRoZSB0b3AgY29tcG9zaXRlCisJCWdlb2dyYXBoaWNSZW5kZXJlci5nYWluU2NhbGVMYWJlbCA9IG5ldyBMYWJlbCh0b3BDb21wb3NpdGUsIFNXVC5SSUdIVCk7CisJCWdlb2dyYXBoaWNSZW5kZXJlci51cGRhdGVTY2FsZUxvZ0xpbkxhYmVsKCk7CisKKwkJcmV0dXJuIHRvcENvbXBvc2l0ZTsKKwl9IC8vIGNyZWF0ZVRvcENvbXBvc2l0ZQorCQorCQorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmpvYnMuc2ltdWxhdGlvbi5JU2ltdWxhdGlvbkxpc3RlbmVyI3NpbXVsYXRpb25DaGFuZ2VkKG9yZy5lY2xpcHNlLnN0ZW0uam9icy5zaW11bGF0aW9uLlNpbXVsYXRpb25FdmVudCkKKwkgKi8KKwlwdWJsaWMgdm9pZCBzaW11bGF0aW9uQ2hhbmdlZChmaW5hbCBTaW11bGF0aW9uRXZlbnQgZXZlbnQpIHsKKworCQlzd2l0Y2ggKGV2ZW50LmdldFNpbXVsYXRpb25TdGF0ZSgpKSB7CisJCWNhc2UgQ09NUExFVEVEX0NZQ0xFOgorCQkJLy8gSXQgY291bGQgYmUgdGhhdCB0aGUgcHJvcGVydHlTZWxlY3RvciBpcyBub3QgaW5pdGlhbGl6ZWQKKwkJCS8vIHlldC4gVGhpcyBjb3VsZCBoYXBwZW4gaWYsIHdoZW4gdGhlIHNpbXVsYXRpb24gaXMgZmlyc3Qgc2V0LCBpdHMKKwkJCS8vIHNjZW5hcmlvIHdhcyBub3QgY29tcGxldGVseSBpbml0aWFsaXplZCwgYW5kIHNvIGRpZG4ndCBoYXZlIGEKKwkJCS8vIGNhbm9uaWNhbCBncmFwaC4gSWYgdGhpcyBpcyB0aGUgY2FzZSwgd2UgbmVlZCB0byB0cnkgYWdhaW4uCisKKwkJCS8vIElzIHRoZSBjb250cm9sIGluaXRpYWxpemVkPworCQkJaWYgKCFvcHRpb25zQmFyLmlzSW5pdGlhbGl6ZWQoKSkgeworCQkJCS8vIE5vCisJCQkJb3B0aW9uc0Jhci5zZXRTaW11bGF0aW9uKGdldFNpbXVsYXRpb24oKSk7CisJCQl9IC8vIGlmCisKKwkJCXJlZnJlc2goKTsKKwkJCQorCQkJLy8gdW4tY29tbWVudCB0aGlzIHRvIHNhdmUgYSBiaXQgbWFwIGltYWdlIGZpbGUgb2YgdGhlIG1hcAorCQkJLy8KKwkJCS8vIHNhdmVDYW52YXNJbWFnZShldmVudC5nZXRTaW11bGF0aW9uKCkpOworCQkJLy8KKwkJCS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworCQkJCisJCQlicmVhazsKKworCQljYXNlIFJFU0VUOgorCQkJcmVmcmVzaCgpOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQkvLyBJZ25vcmUKKwkJCWJyZWFrOworCQl9IC8vIHN3aXRjaAorCX0gLy8gc2ltdWxhdGlvbkNoYW5nZWQKKworCS8qKgorCSAqIFRoaXMgcnVucyBpbiB0aGUgYmFja2dyb3VuZCB7QGxpbmsgSm9ifSBjcmVhdGVkIGluIHtAbGluayAjcmVmcmVzaCgpfQorCSAqIAorCSAqIEBwYXJhbSBkZWNvcmF0b3IKKwkgKiAgICAgICAgICAgIHRoZSB7QGxpbmsgRGVjb3JhdG9yfSBmb3Igd2hvbSB0aGF0IGRhdGEgaXMgYmVpbmcgcmV0cmlldmVkLgorCSAqIEBwYXJhbSBtb25pdG9yCisJICogICAgICAgICAgICB0aGUgcHJvZ3Jlc3MgbW9uaXRvciB0byB1c2UgdG8gcmVwb3J0IHRoZSBwcm9ncmVzcyBvZgorCSAqICAgICAgICAgICAgb2J0YWluaW5nIHRoZSBkYXRhCisJICogQHJldHVybiB0aGUge0BsaW5rIERlY29yYXRvckRpc3BsYXlEYXRhfSBmb3IgdGhlIHtAbGluayBEZWNvcmF0b3J9LgorCSAqLworCXByb3RlY3RlZCBEZWNvcmF0b3JEaXNwbGF5RGF0YSBnZXREZWNvcmF0b3JEaXNwbGF5RGF0YSgKKwkJCWZpbmFsIERlY29yYXRvciBkZWNvcmF0b3IsIGZpbmFsIElQcm9ncmVzc01vbml0b3IgbW9uaXRvcikgeworCQlEZWNvcmF0b3JEaXNwbGF5RGF0YSByZXRWYWx1ZSA9IGRlY29yYXRvclRvRGVjb3JhdG9yRGlzcGxheURhdGFNYXAKKwkJCQkuZ2V0KGRlY29yYXRvcik7CisJCS8vIElzIHRoZXJlIGFscmVhZHkgYW4gaW5zdGFuY2UgZm9yIHRoaXMgZGVjb3JhdG9yPworCQlpZiAocmV0VmFsdWUgPT0gbnVsbCkgeworCQkJLy8gTm8KKwkJCS8vIENyZWF0ZSBvbmUgdGhlbgorCQkJcmV0VmFsdWUgPSBuZXcgRGVjb3JhdG9yRGlzcGxheURhdGEoKTsKKwkJCWRlY29yYXRvclRvRGVjb3JhdG9yRGlzcGxheURhdGFNYXAucHV0KGRlY29yYXRvciwgcmV0VmFsdWUpOworCisJCQlpZiAoZGVjb3JhdG9yLmdldExhYmVsc1RvVXBkYXRlKCkgPT0gbnVsbAorCQkJCQl8fCBkZWNvcmF0b3IuZ2V0TGFiZWxzVG9VcGRhdGUoKS5pc0VtcHR5KCkpIHsKKwkJCQlyZXR1cm4gcmV0VmFsdWU7CisJCQl9CisKKwkJCS8vIEdldCB0aGUgcmVsYXRpdmUgdmFsdWUgcHJvdmlkZXIgYWRhcHRlciB0aGF0IHdlJ2xsIHVzZSBmb3IgYWxsIG9mCisJCQkvLyB0aGUgZGVjb3JhdG9yJ3MgbGFiZWxzLiBXZSBvbmx5IGdldCBpdCBvbmNlIGJlY2F1c2UgaXQgaXMKKwkJCS8vIGltcGxlbWVudGVkIHVzaW5nIHRoZSBzaW5nbGV0b24gcGF0dGVybiBzbyB3ZSdsbCBhbHdheXMgZ2V0IHRoZQorCQkJLy8gc2FtZSBvbmUuCisJCQlmaW5hbCBEeW5hbWljTm9kZUxhYmVsIGZpcnN0Tm9kZUxhYmVsID0gKER5bmFtaWNOb2RlTGFiZWwpIGRlY29yYXRvcgorCQkJCQkuZ2V0TGFiZWxzVG9VcGRhdGUoKS5nZXQoMCk7CisJCQkvLyBXYXMgdGhlcmUgYSBsYWJlbCB0byB1cGRhdGU/CisJCQlpZiAoZmlyc3ROb2RlTGFiZWwgIT0gbnVsbCkgeworCQkJCS8vIFllcworCQkJCS8vIEdldCB0aGUgcmVsYXRpdmUgdmFsdWUgZnJvbSB0aGUgZHluYW1pYyBsYWJlbAorCQkJCWZpbmFsIFJlbGF0aXZlVmFsdWVQcm92aWRlckFkYXB0ZXIgcnZwID0gKFJlbGF0aXZlVmFsdWVQcm92aWRlckFkYXB0ZXIpIFJlbGF0aXZlVmFsdWVQcm92aWRlckFkYXB0ZXJGYWN0b3J5LklOU1RBTkNFCisJCQkJCQkuYWRhcHQoZmlyc3ROb2RlTGFiZWwsIFJlbGF0aXZlVmFsdWVQcm92aWRlci5jbGFzcyk7CisJCQkJaWYocnZwID09IG51bGwpIHJldHVybiBudWxsOworCQkJCXJldFZhbHVlLnNldFJlbGF0aXZlVmFsdWVQcm92aWRlckFkYXB0ZXIocnZwKTsKKworCQkJCWZpbmFsIE5vZGUgbm9kZSA9IGZpcnN0Tm9kZUxhYmVsLmdldE5vZGUoKTsKKwkJCQkvLyBTdHJpbmcgbm9kZVRpdGxlID0gbm9kZS5nZXREdWJsaW5Db3JlKCkuZ2V0VGl0bGUoKTsKKworCQkJCWZpbmFsIExhdExvbmdQcm92aWRlckFkYXB0ZXIgbGF0TG9uZ1Byb3ZpZGVyID0gKExhdExvbmdQcm92aWRlckFkYXB0ZXIpIExhdExvbmdQcm92aWRlckFkYXB0ZXJGYWN0b3J5LklOU1RBTkNFCisJCQkJCQkuYWRhcHQobm9kZSwgTGF0TG9uZ1Byb3ZpZGVyLmNsYXNzKTsKKwkJCQlyZXRWYWx1ZS5zZXRMYXRMb25nUHJvdmlkZXJBZGFwdGVyKGxhdExvbmdQcm92aWRlcik7CisJCQl9IC8vIGlmIHRoZXJlIGlzIGEgbGFiZWwKKworCQkJZm9yIChmaW5hbCBPYmplY3QgZWxlbWVudCA6IGRlY29yYXRvci5nZXRMYWJlbHNUb1VwZGF0ZSgpKSB7CisJCQkJZmluYWwgRHluYW1pY05vZGVMYWJlbCBub2RlTGFiZWwgPSAoRHluYW1pY05vZGVMYWJlbCkgZWxlbWVudDsKKwkJCQlyZXRWYWx1ZS5hZGRMYWJlbChub2RlTGFiZWwpOworCQkJfSAvLyBmb3IKKworCQl9IC8vIGlmIG5vIGluc3RhbmNlCisKKwkJLy8gRG9lcyB0aGUgaW5zdGFuY2UgaGF2ZSBhbGwgb2YgaXQncyBsYXQvbG9uZyBkYXRhIHJldHJpZXZlZCB5ZXQ/CisJCWlmICghcmV0VmFsdWUuaGFzQWxsTGF0TG9uZygpKSB7CisJCQkvLyBObworCQkJLy8gVHJ5IHRvIGdldCBpdAorCQkJbW9uaXRvci5zdWJUYXNrKGRlY29yYXRvci5nZXREdWJsaW5Db3JlKCkuZ2V0VGl0bGUoKSk7CisJCQlyZXRWYWx1ZS51cGRhdGVMYXRMb25nKG1vbml0b3IpOworCQl9IC8vIGlmIG1pc3NpbmcgbGF0L2xvbmcKKworCQlyZXR1cm4gcmV0VmFsdWU7CisJfSAvLyBnZXREZWNvcmF0b3JEaXNwbGF5RGF0YQorCisJcHJvdGVjdGVkIFN0ZW1Qb2x5Z29uc0xpc3QgY3JlYXRlUG9seWdvbnNUb0RyYXcoCisJCQlmaW5hbCBJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IpIHsKKwkJcmV0dXJuIGNyZWF0ZVBvbHlnb25zVG9EcmF3KG9wdGlvbnNCYXIuZ2V0U2VsZWN0ZWREZWNvcmF0b3IoKSwgb3B0aW9uc0Jhci5nZXRTZWxlY3RlZFBvcHVsYXRpb25JZGVudGlmaWVyKCksIG1vbml0b3IpOworCX0gLy8gY3JlYXRlUG9seWdvbnNUb0RyYXcKKworCS8qKgorCSAqIFRoaXMgcnVucyBpbiB0aGUgYmFja2dyb3VuZCB7QGxpbmsgSm9ifSBjcmVhdGVkIGluCisJICoge0BsaW5rICNyZWZyZXNoTWFwQ2FudmFzKCl9LgorCSAqIAorCSAqIEBwYXJhbSBzZWxlY3RlZERlY29yYXRvcgorCSAqICAgICAgICAgICAgdGhlIHtAbGluayBEZWNvcmF0b3J9IHRoYXQgY29udGFpbnMgdGhlIHNlbGVjdGVkIHByb3BlcnR5LgorCSAqIEBwYXJhbSBzZWxldGVkUG9wdWxhdGlvbklkZW50aWZpZXIgVGhlIHNlbGVjdGVkIHBvcHVsYXRpb24gaWRlbnRpZmllcgorCSAqIEBwYXJhbSBzZWxlY3RlZFByb3BlcnR5CisJICogICAgICAgICAgICB0aGUgcHJvcGVydHkgb2YgdGhlIHNlbGVjdGVkIHtAbGluayBEZWNvcmF0b3J9IHRvIHZpc3VhbGl6ZQorCSAqIEBwYXJhbSBtb25pdG9yCisJICogICAgICAgICAgICBwcm9ncmVzcyBtb25pdG9yIGZvciBvYnRhaW5pbmcgdGhlIHBvbHlnb25zCisJICogQHJldHVybiBhIGNvbGxlY3Rpb24gb2YgcG9seWdvbiB2YWx1ZXMgdG8gcmVuZGVyIGluIHRoZQorCSAqICAgICAgICAge0BsaW5rICNtYXBDYW52YXN9CisJICovCisJU3RlbVBvbHlnb25zTGlzdCBjcmVhdGVQb2x5Z29uc1RvRHJhdyhmaW5hbCBEZWNvcmF0b3Igc2VsZWN0ZWREZWNvcmF0b3IsIFN0cmluZyBzZWxlY3RlZFBvcHVsYXRpb25JZGVudGlmaWVyLAorCQkJZmluYWwgSVByb2dyZXNzTW9uaXRvciBtb25pdG9yKSB7CisJCWZpbmFsIFN0ZW1Qb2x5Z29uc0xpc3QgcmV0VmFsdWUgPSBuZXcgU3RlbVBvbHlnb25zTGlzdCgpOworCisJCS8vIElzIHRoZXJlIGEgZGVjb3JhdG9yIHNlbGVjdGVkPworCQlpZiAoc2VsZWN0ZWREZWNvcmF0b3IgIT0gbnVsbCkgeworCQkJLy8gWWVzCisJCQkvLyBHZXQgdGhlIGRpc3BsYXkgZGF0YSBmb3IgdGhpcyBkZWNvcmF0b3IKKwkJCWZpbmFsIERlY29yYXRvckRpc3BsYXlEYXRhIGRpc3BsYXlEYXRhID0gZ2V0RGVjb3JhdG9yRGlzcGxheURhdGEoCisJCQkJCXNlbGVjdGVkRGVjb3JhdG9yLCBtb25pdG9yKTsKKwkJCQorCQkJaWYoZGlzcGxheURhdGEgPT0gbnVsbCkgcmV0dXJuIG51bGw7CisJCQlmaW5hbCBSZWxhdGl2ZVZhbHVlUHJvdmlkZXJBZGFwdGVyIHJ2cCA9IGRpc3BsYXlEYXRhCisJCQkJCS5nZXRSZWxhdGl2ZVZhbHVlUHJvdmlkZXJBZGFwdGVyKCk7CisJCQlpZihydnAgPT0gbnVsbCkgcmV0dXJuIG51bGw7CisJCQkKKwkJCW1vbml0b3IuYmVnaW5UYXNrKHNlbGVjdGVkRGVjb3JhdG9yLmdldER1YmxpbkNvcmUoKS5nZXRUaXRsZSgpLAorCQkJCQlkaXNwbGF5RGF0YS5nZXRMYWJlbERhdGEoKS5zaXplKCkpOworCisJCQlmb3IgKGZpbmFsIERlY29yYXRvckRpc3BsYXlEYXRhLkxhYmVsRGF0YSBsYWJlbERhdGEgOiBkaXNwbGF5RGF0YQorCQkJCQkuZ2V0TGFiZWxEYXRhKCkpIHsKKworCQkJCS8vIENoZWNrIHRoYXQgdGhlIHBvcHVsYXRpb24gaWRlbnRpZmllciBtYXRjaGVzLiBJZiBub3QsIHNraXAgaXQKKwkJCQlEeW5hbWljTm9kZUxhYmVsIGxhYiA9IGxhYmVsRGF0YS5nZXRMYWJlbCgpOworCQkJCWlmKGxhYiBpbnN0YW5jZW9mIERpc2Vhc2VNb2RlbExhYmVsICYmIAorCQkJCQkJISgoRGlzZWFzZU1vZGVsTGFiZWwpbGFiKS5nZXRQb3B1bGF0aW9uTW9kZWxMYWJlbCgpLmdldFBvcHVsYXRpb25JZGVudGlmaWVyKCkuZXF1YWxzKHNlbGVjdGVkUG9wdWxhdGlvbklkZW50aWZpZXIpKSBjb250aW51ZTsKKwkJCQkKKwkJCQlpZihsYWIgaW5zdGFuY2VvZiBQb3B1bGF0aW9uTW9kZWxMYWJlbCAmJiAKKwkJCQkJCSEoKFBvcHVsYXRpb25Nb2RlbExhYmVsKWxhYikuZ2V0UG9wdWxhdGlvbklkZW50aWZpZXIoKS5lcXVhbHMoc2VsZWN0ZWRQb3B1bGF0aW9uSWRlbnRpZmllcikpIGNvbnRpbnVlOworCQkJCQorCQkJCS8vIFRoaXMgaXMgdGhlIElkZW50aWZpYWJsZSB0aGF0IHdpbGwgcHJvZHVjZSB0aGUgbGF0L2xvbmcgZGF0YQorCQkJCS8vIChpZiBhdmFpbGFibGUpLgorCQkJCWZpbmFsIElkZW50aWZpYWJsZSBpZGVudGlmaWFibGUgPSBsYWJlbERhdGEuZ2V0TGFiZWwoKQorCQkJCQkJLmdldElkZW50aWZpYWJsZSgpOworCisJCQkJbW9uaXRvci5zdWJUYXNrKGlkZW50aWZpYWJsZS5nZXREdWJsaW5Db3JlKCkuZ2V0VGl0bGUoKSk7CisKKwkJCQlmaW5hbCBMYXRMb25nIGxhdExvbmcgPSBsYWJlbERhdGEuZ2V0TGF0TG9uZ0RhdGEoKTsKKwkJCQkvLyBBbnkgbGF0L2xvbmcgZGF0YSBmb3IgdGhpcyBsYWJlbD8KKwkJCQlpZiAobGF0TG9uZyAhPSBudWxsICYmIGxhdExvbmcuc2l6ZSgpID4gMCkgeworCQkJCQkvLyBZZXMKKwkJCQkJZmluYWwgU3RlbVBvbHlnb25zTGlzdCBzdGVtUG9seWdvbnNMaXN0ID0gZ2V0U3RlbVBvbHlnb25zTGlzdCgKKwkJCQkJCQlsYXRMb25nLCBpZGVudGlmaWFibGUsIHJ2cCwgbGFiZWxEYXRhKTsKKworCQkJCQkvLyBhZGRpbmcgaXQgdG8gdGhlIGxpc3Qgb2YgcG9seWdvbnMgdG8gYmUgZHJhd24KKwkJCQkJcmV0VmFsdWUuYWRkQWxsKHN0ZW1Qb2x5Z29uc0xpc3QpOworCQkJCX0gLy8gaWYgQW55IGxhdC9sb25nIGRhdGEgZm9yIHRoaXMgbGFiZWwKKwkJCQltb25pdG9yLndvcmtlZCgxKTsKKworCQkJfSAvLyBmb3IgZWFjaCBMYWJlbERhdGEKKworCQkJaWYgKHNlbGVjdGVkRWRnZSAhPSBudWxsICYmICFzZWxlY3RlZEVkZ2UuZXF1YWxzKCIiKSkgeworCisJCQkJZmluYWwgTGlzdDxVUkk+IGVkZ2VUeXBlcyA9IG5ldyBMaW5rZWRMaXN0PFVSST4oKTsKKworCQkJCWZpbmFsIEdyYXBoIGdyYXBoID0gc2VsZWN0ZWREZWNvcmF0b3IuZ2V0R3JhcGgoKTsKKwkJCQlmaW5hbCBFTWFwPFVSSSwgRWRnZT4gYWxsRWRnZXMgPSBncmFwaC5nZXRFZGdlcygpOworCQkJCWZpbmFsIEl0ZXJhdG9yPFVSST4gaXRlciA9IGFsbEVkZ2VzLmtleVNldCgpLml0ZXJhdG9yKCk7CisJCQkJZmluYWwgTGlzdDxFZGdlPiBlZGdlcyA9IG5ldyBBcnJheUxpc3Q8RWRnZT4oKTsKKwkJCQl3aGlsZSAoaXRlci5oYXNOZXh0KCkpIHsKKwkJCQkJZmluYWwgVVJJIHVyaSA9IGl0ZXIubmV4dCgpOworCQkJCQlpZiAoZWRnZVR5cGVzLmNvbnRhaW5zKHVyaSkpIHsKKwkJCQkJCWVkZ2VUeXBlcy5hZGQodXJpKTsKKwkJCQkJfQorCQkJCQlpZiAodXJpLnRvU3RyaW5nKCkuc3RhcnRzV2l0aChzZWxlY3RlZEVkZ2UpKSB7CisJCQkJCQlFZGdlIGVkZ2UgPSBhbGxFZGdlcy5nZXQodXJpKTsKKwkJCQkJCWlmIChlZGdlIGluc3RhbmNlb2YgUG9wdWxhdGlvbkVkZ2UpIHsKKwkJCQkJCQlTdHJpbmcgcG9wSUQgPSAoKFBvcHVsYXRpb25FZGdlKSBlZGdlKS5nZXRQb3B1bGF0aW9uSWRlbnRpZmllcigpOworCQkJCQkJCWlmIChzZWxlY3RlZFBvcHVsYXRpb25JZGVudGlmaWVyLmVxdWFscyhwb3BJRCkpIGVkZ2VzLmFkZChlZGdlKTsKKwkJCQkJCX0KKwkJCQkJCWVsc2UgeworCQkJCQkJCWVkZ2VzLmFkZChlZGdlKTsKKwkJCQkJCX0KKwkJCQkJfQorCQkJCX0KKworCQkJCWlmICghZWRnZXMuaXNFbXB0eSgpKSB7CisJCQkJCWZpbmFsIEl0ZXJhdG9yPEVkZ2U+IGVkZ2VzSXRlciA9IGVkZ2VzLml0ZXJhdG9yKCk7CisJCQkJCWZpbmFsIExpc3Q8VVJJPiBhZGRlZEVkZ2VzID0gbmV3IEFycmF5TGlzdDxVUkk+KCk7CisJCQkJCXdoaWxlIChlZGdlc0l0ZXIuaGFzTmV4dCgpKSB7CisJCQkJCQlmaW5hbCBFZGdlIG5leHRFZGdlID0gZWRnZXNJdGVyLm5leHQoKTsKKworCQkJCQkJZmluYWwgTm9kZSBub2RlQSA9IG5leHRFZGdlLmdldEEoKTsKKwkJCQkJCWZpbmFsIE5vZGUgbm9kZUIgPSBuZXh0RWRnZS5nZXRCKCk7CisJCQkJCQlpZiAobm9kZUEgPT0gbnVsbCB8fCBub2RlQiA9PSBudWxsKSB7CisJCQkJCQkJLy8gQ29tbWVudGVkIG91dCA0LzIvMjAwOSBzaW5jZSBpdCBpcyBwb3NzaWJsZSAKKwkJCQkJCQkvLyB0aGF0IGVkZ2VzIGZvciBhaXIgdHJhbnNwb3J0IGhhcyBhIG1pc3Npbmcgbm9kZSBpZiAKKwkJCQkJCQkvLyBhIHN1YiBtb2RlbCBpcyBub3QgaW5jbHVkZWQgaW4gdGhlIHNjZW5hcmlvCisJCQkJCQkJLypmaW5hbCBTdHJpbmdCdWZmZXIgbWlzc2luZ0VkZ2VSZXBvcnQgPSBuZXcgU3RyaW5nQnVmZmVyKCk7CisJCQkJCQkJbWlzc2luZ0VkZ2VSZXBvcnQKKwkJCQkJCQkJCS5hcHBlbmQoIlRoZSBmb2xsb3dpbmcgZWRnZSBoYXMgYSBtaXNzaW5nIG5vZGU6XG4iKTsKKwkJCQkJCQltaXNzaW5nRWRnZVJlcG9ydC5hcHBlbmQoIiBFZGdlIFVSSTogIgorCQkJCQkJCQkJKyBuZXh0RWRnZS5nZXRVUkkoKSArICJcbiIpOworCQkJCQkJCWlmIChub2RlQSA9PSBudWxsICYmIG5vZGVCID09IG51bGwpIHsKKwkJCQkJCQkJbWlzc2luZ0VkZ2VSZXBvcnQuYXBwZW5kKCIgTWlzc2luZyBOb2RlOiBCb3RoIik7CisJCQkJCQkJfSBlbHNlIHsKKwkJCQkJCQkJbWlzc2luZ0VkZ2VSZXBvcnQuYXBwZW5kKCIgTWlzc2luZyBOb2RlOiAiCisJCQkJCQkJCQkJKyAobm9kZUEgPT0gbnVsbCA/ICJBIiA6ICJCIikpOworCQkJCQkJCQltaXNzaW5nRWRnZVJlcG9ydC5hcHBlbmQoIiBOb24tbWlzc2luZyBOb2RlOiAiCisJCQkJCQkJCQkJKyAobm9kZUEgPT0gbnVsbCA/ICJCIiA6ICJBIikpOworCQkJCQkJCX0KKwkJCQkJCQlBY3RpdmF0b3IubG9nRXJyb3IobWlzc2luZ0VkZ2VSZXBvcnQudG9TdHJpbmcoKSwKKwkJCQkJCQkJCW51bGwpOworCQkJCQkJCSovCisJCQkJCQkJY29udGludWU7CisJCQkJCQl9CisKKwkJCQkJCWZpbmFsIFN0cmluZyBub2RlQUlTT0tleSA9IG5vZGVBLmdldFVSSSgpLmxhc3RTZWdtZW50KCk7CisJCQkJCQlkb3VibGVbXSBjZW50ZXJBID0gR2VvZ3JhcGhpY0NlbnRlcnMKKwkJCQkJCQkJLmdldENlbnRlcihub2RlQUlTT0tleSk7CisKKwkJCQkJCS8vIERpZCB3ZSBnZXQgaXQ/CisJCQkJCQlpZiAoY2VudGVyQSA9PSBudWxsKSB7CisJCQkJCQkJLy8gTm8KKwkJCQkJCQkvLyBDb21wdXRlIHRoZSBsYXQvbG9uZyBvZiB0aGUgY2VudGVyIG9mIHRoZSBub2RlCisJCQkJCQkJZmluYWwgTGF0TG9uZ1Byb3ZpZGVyQWRhcHRlciBsYXRMb25nUHJvdmlkZXJBID0gKExhdExvbmdQcm92aWRlckFkYXB0ZXIpIExhdExvbmdQcm92aWRlckFkYXB0ZXJGYWN0b3J5LklOU1RBTkNFCisJCQkJCQkJCQkuYWRhcHQobm9kZUEsIExhdExvbmdQcm92aWRlci5jbGFzcyk7CisJCQkJCQkJbGF0TG9uZ1Byb3ZpZGVyQS5zZXRUYXJnZXQobm9kZUEpOworCQkJCQkJCWNlbnRlckEgPSBsYXRMb25nUHJvdmlkZXJBLmdldENlbnRlcigpOworCQkJCQkJfSAvLyBpZgorCisJCQkJCQlmaW5hbCBTdHJpbmcgbm9kZUJJU09LZXkgPSBub2RlQi5nZXRVUkkoKS5sYXN0U2VnbWVudCgpOworCQkJCQkJZG91YmxlW10gY2VudGVyQiA9IEdlb2dyYXBoaWNDZW50ZXJzCisJCQkJCQkJCS5nZXRDZW50ZXIobm9kZUJJU09LZXkpOworCQkJCQkJLy8gRGlkIHdlIGdldCBpdD8KKwkJCQkJCWlmIChjZW50ZXJCID09IG51bGwpIHsKKwkJCQkJCQkvLyBObworCisJCQkJCQkJLy8gR2V0IHRoZSBsYXQvbG9uZyBvZiB0aGUgY2VudGVyIG9mIHRoZSBub2RlCisJCQkJCQkJZmluYWwgTGF0TG9uZ1Byb3ZpZGVyQWRhcHRlciBsYXRMb25nUHJvdmlkZXJCID0gKExhdExvbmdQcm92aWRlckFkYXB0ZXIpIExhdExvbmdQcm92aWRlckFkYXB0ZXJGYWN0b3J5LklOU1RBTkNFCisJCQkJCQkJCQkuYWRhcHQobm9kZUIsIExhdExvbmdQcm92aWRlci5jbGFzcyk7CisJCQkJCQkJbGF0TG9uZ1Byb3ZpZGVyQi5zZXRUYXJnZXQobm9kZUIpOworCQkJCQkJCWNlbnRlckIgPSBsYXRMb25nUHJvdmlkZXJCLmdldENlbnRlcigpOworCQkJCQkJfSAvLyBpZiBjZW50ZXJCCisKKwkJCQkJCWlmIChjZW50ZXJBID09IG51bGwgfHwgY2VudGVyQiA9PSBudWxsKSB7CisJCQkJCQkJY29udGludWU7CisJCQkJCQl9CisKKwkJCQkJCWZpbmFsIGRvdWJsZVtdW10gZGF0YSA9IG5ldyBkb3VibGVbMl1bMl07CisKKwkJCQkJCWRhdGFbMF1bMF0gPSBjZW50ZXJBWzBdOworCQkJCQkJZGF0YVswXVsxXSA9IGNlbnRlckFbMV07CisJCQkJCQlkYXRhWzFdWzBdID0gY2VudGVyQlswXTsKKwkJCQkJCWRhdGFbMV1bMV0gPSBjZW50ZXJCWzFdOworCisJCQkJCQlpZiAoIWFkZGVkRWRnZXMuY29udGFpbnMobmV4dEVkZ2UuZ2V0VVJJKCkpKSB7CisJCQkJCQkJZmluYWwgU2VnbWVudCBlZGdlU2VnbWVudCA9IG5ldyBTZWdtZW50KGRhdGEpOworCQkJCQkJCWZpbmFsIFN0ZW1Qb2x5Z29uIHN0ZW1Qb2x5Z29uID0gbmV3IFN0ZW1Qb2x5Z29uKAorCQkJCQkJCQkJZWRnZVNlZ21lbnQsIG5leHRFZGdlKTsKKwkJCQkJCQlyZXRWYWx1ZS5hZGQoc3RlbVBvbHlnb24pOworCQkJCQkJCWFkZGVkRWRnZXMuYWRkKG5leHRFZGdlLmdldFVSSSgpKTsKKwkJCQkJCX0KKwkJCQkJfQorCQkJCX0KKwkJCX0KKwkJfSAvLyBpZiB0aGVyZSBhIGRlY29yYXRvciBhbmQgYSBjdXJyZW50bHkgc2VsZWN0ZWQgcHJvcGVydHkKKworCQlyZXR1cm4gcmV0VmFsdWU7CisJfS8vIGNyZWF0ZVBvbHlnb25zVG9EcmF3CisKKwkvKioKKwkgKiBAcGFyYW0gbGF0TG9uZworCSAqIEBwYXJhbSBydnAKKwkgKiBAcmV0dXJuCisJICovCisJcHJpdmF0ZSBTdGVtUG9seWdvbnNMaXN0IGdldFN0ZW1Qb2x5Z29uc0xpc3QoZmluYWwgTGF0TG9uZyBsYXRMb25nLAorCQkJZmluYWwgSWRlbnRpZmlhYmxlIGlkZW50aWZpYWJsZSwKKwkJCWZpbmFsIFJlbGF0aXZlVmFsdWVQcm92aWRlckFkYXB0ZXIgcnZwLAorCQkJZmluYWwgRGVjb3JhdG9yRGlzcGxheURhdGEuTGFiZWxEYXRhIGxhYmVsRGF0YSkgeworCisJCVN0ZW1Qb2x5Z29uc0xpc3QgcmV0VmFsdWUgPSBwb2x5Z29uTGlzdE1hcC5nZXQobGF0TG9uZyk7CisJCXJ2cC5zZXRUYXJnZXQobGFiZWxEYXRhLmdldExhYmVsKCkpOworCQkvLyBmaW5hbCBJdGVtUHJvcGVydHlEZXNjcmlwdG9yIHNlbGVjdGVkUHJvcGVydHkgPQorCQkvLyBudWxsOy8vYm90dG9tQ29tcG9zaXRlLmdldAorCQkvLyBEaWQgd2UgZmluZCBhIHByZXZpb3VzbHkgZ2VuZXJhdGVkIHBvbHlnb24gbGlzdD8KKwkJaWYgKHJldFZhbHVlID09IG51bGwpIHsKKwkJCS8vIC8vIE5vCisJCQkvLyAvLyBBbGxvY2F0ZSBhIG1hcHBpbmcgYmV0d2VlbiB0aGUgcHJvcGVydHkgbmFtZXMgYW5kIHRoZWlyCisJCQkvLyAvLyByZWxhdGl2ZSB2YWx1ZXMuCisJCQkvLyBmaW5hbCBNYXA8U3RyaW5nLCBEb3VibGU+IHJlbGF0aXZlVmFsdWVNYXAgPSBuZXcgSGFzaE1hcDxTdHJpbmcsCisJCQkvLyBEb3VibGU+KCk7CisJCQkvLworCQkJLy8gLy8gRmlyc3QgcHV0IHRoZSBTZWxlY3RlZCBwcm9wZXJ0eSBpbiB0aGUgdmFsdWVNYXAgdG8KKwkJCS8vIC8vIGRpc3BsYXkKKwkJCS8vIHJlbGF0aXZlVmFsdWVNYXAucHV0KHNlbGVjdGVkUHJvcGVydHkKKwkJCS8vIC5nZXREaXNwbGF5TmFtZShzZWxlY3RlZFByb3BlcnR5KSwgbmV3IERvdWJsZShydnAKKwkJCS8vIC5nZXRSZWxhdGl2ZVZhbHVlKHNlbGVjdGVkUHJvcGVydHkpKSk7CisKKwkJCS8vIEFyZSB3ZSBpbiBtdWx0aWNvbG9yIGRpc3BsYXkgbW9kZT8KKwkJCS8vIGlmIChmYWxzZSAvKiBtYXBDYW52YXMuZW5hYmxlTXVsdGlDb2xvck1vZGUgKi8pIHsKKwkJCS8vIC8vIFllcworCQkJLy8gLy8gQWRkIGFsbCByZWxhdGl2ZSB2YWx1ZXMgYnkgcHJvcGVydHkgYXR0cmlidXRlIGtleQorCQkJLy8gZmluYWwgTGlzdDxJSXRlbVByb3BlcnR5RGVzY3JpcHRvcj4gcHJvcGVydGllcyA9IHJ2cAorCQkJLy8gLmdldFByb3BlcnRpZXMoKTsKKwkJCS8vIC8vIEpISyB3ZSBkb24ndCBuZWVkIHRvIGFkZCB0aGUgc2VsZWN0ZWQgb25lIHNlcGFyYXRlbHkKKwkJCS8vIC8vIGFib3ZlIGFzIHRoZSBjb2RlIGJlbG93IHNob3VsZCBnZXQgaXQgYXMgd2VsbCAtIGNoZWNrCisJCQkvLyAvLyB0aGlzLi4uCisJCQkvLyBhc3NlcnQgKHByb3BlcnRpZXMuY29udGFpbnMoc2VsZWN0ZWRQcm9wZXJ0eSkpOworCQkJLy8gLy8gQWRkIEFMTCB0aGUgcHJvcGVydGllcyBmb3IgTXVsdGlDb2xvciBEaXNwbGF5IE1vZGUKKwkJCS8vIGZvciAoaW50IGkgPSAwOyBpIDwgcHJvcGVydGllcy5zaXplKCk7IGkrKykgeworCQkJLy8gZmluYWwgSXRlbVByb3BlcnR5RGVzY3JpcHRvciBpdGVtS2V5ID0gKEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IpCisJCQkvLyBwcm9wZXJ0aWVzCisJCQkvLyAuZ2V0KGkpOworCQkJLy8ga2V5ID0gaXRlbUtleS5nZXREaXNwbGF5TmFtZShpdGVtS2V5KTsKKwkJCS8vIHJlbGF0aXZlVmFsdWUgPSBuZXcgRG91YmxlKHJ2cC5nZXRSZWxhdGl2ZVZhbHVlKGl0ZW1LZXkpKTsKKwkJCS8vIHZhbHVlTWFwLnB1dChrZXksIHJlbGF0aXZlVmFsdWUpOworCQkJLy8gfSAvLyBmb3IgYWxsIHByb3BlcnRpZXMKKwkJCS8vIH0gLy8gaWYgbXVsdGkgY29sb3IgbW9kZQorCisJCQkvLyBjcmVhdGluZyB0aGUgcG9seWdvbiBmcm9tIHRoYXQgbGFiZWwKKwkJCXJldFZhbHVlID0gbmV3IFN0ZW1Qb2x5Z29uc0xpc3QobGF0TG9uZywgLy8gcmVsYXRpdmVWYWx1ZU1hcCwKKwkJCQkJaWRlbnRpZmlhYmxlKTsKKwkJCXBvbHlnb25MaXN0TWFwLnB1dChsYXRMb25nLCByZXRWYWx1ZSk7CisJCX0gLy8gaWYgZGlkbid0IGZpbmQgZ2VuZXJhdGVkIGluc3RhbmNlCisJCS8vIGVsc2UgeworCQkvLyAvLyBVcGRhdGUgdGhlIHJlbGF0aXZlIHZhbHVlcyBvZiB0aGUgcHJvcGVydGllcyBpbiB0aGUgdmFsdWUgbWFwCisJCS8vIHJldFZhbHVlLmNsZWFyUmVsYXRpdmVWYWx1ZXMoKTsKKwkJLy8gcmV0VmFsdWUuYWRkUmVsYXRpdmVWYWx1ZShzZWxlY3RlZFByb3BlcnR5CisJCS8vIC5nZXREaXNwbGF5TmFtZShzZWxlY3RlZFByb3BlcnR5KSwgbmV3IERvdWJsZShydnAKKwkJLy8gLmdldFJlbGF0aXZlVmFsdWUoc2VsZWN0ZWRQcm9wZXJ0eSkpKTsKKwkJLy8gfSAvLyBlbHNlCisJCXJldHVybiByZXRWYWx1ZTsKKwl9IC8vIGdldFN0ZW1Qb2x5Z29uc0xpc3QKKworCS8qKgorCSAqIFRoZSBtZXRob2Qgd2lsbCByZXR1cm4gdGhlIHtAbGluayBHZW9ncmFwaGljUmVuZGVyZXJ9IHVzZWQgYnkgdGhpcworCSAqIG9iamVjdC4KKwkgKiAKKwkgKiBAcmV0dXJuIFRoZSBHZW9ncmFwaGljUmVuZGVyZXIgdXNlZCBieSB0aGlzIG9iamVjdAorCSAqIEBzZWUgR2VvZ3JhcGhpY1JlbmRlcmVyCisJICovCisJcHVibGljIEdlb2dyYXBoaWNSZW5kZXJlciBnZXRHZW9ncmFwaGljUmVuZGVyZXIoKSB7CisJCXJldHVybiBnZW9ncmFwaGljUmVuZGVyZXI7CisJfSAvLyBnZXRHZW9ncmFwaGljUmVuZGVyZXIKKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS51aS5hZGFwdGVycy5jb2xvci5JQ29sb3JQcm92aWRlckNoYW5nZWRMaXN0ZW5lciNjb2xvclByb3ZpZGVyQ2hhbmdlZChqYXZhLmxhbmcuQ2xhc3MpCisJICovCisJcHVibGljIHZvaWQgY29sb3JQcm92aWRlckNoYW5nZWQoZmluYWwgQ2xhc3Mgc2VsZWN0ZWRDb2xvclByb3ZpZGVyKSB7CisJCWZpbmFsIERlY29yYXRvciBkZWNvcmF0b3IgPSBvcHRpb25zQmFyLmdldFNlbGVjdGVkRGVjb3JhdG9yKCk7CisJCQorCQlpZihkZWNvcmF0b3IgPT0gbnVsbCkgcmV0dXJuOworCQlmaW5hbCBBZGFwdGVyRmFjdG9yeSBhZGFwdGVyRmFjdG9yeSA9IENvbG9yUHJvdmlkZXJBZGFwdGVyRmFjdG9yeS5JTlNUQU5DRQorCQkJCS5nZXRGYWN0b3J5Rm9yVHlwZShzZWxlY3RlZENvbG9yUHJvdmlkZXIpOworCQlmaW5hbCBBZGFwdGVyIGFkYXB0ZXIgPSBhZGFwdGVyRmFjdG9yeS5hZGFwdChkZWNvcmF0b3IuZ2V0R3JhcGgoKSwKKwkJCQlzZWxlY3RlZENvbG9yUHJvdmlkZXIpOworCQlpZiAoYWRhcHRlciBpbnN0YW5jZW9mIENvbG9yUHJvdmlkZXJBZGFwdGVyKSB7CisJCQljb2xvclByb3ZpZGVyQWRhcHRlciA9IChDb2xvclByb3ZpZGVyQWRhcHRlcikgYWRhcHRlcjsKKwkJCWNvbG9yUHJvdmlkZXJBZGFwdGVyLnNldFNlbGVjdGVkRGVjb3JhdG9yKG9wdGlvbnNCYXIKKwkJCQkJLmdldFNlbGVjdGVkRGVjb3JhdG9yKCkpOworCQkJY29sb3JQcm92aWRlckFkYXB0ZXIuc2V0U2VsZWN0ZWRQb3B1bGF0aW9uSWRlbnRpZmllcihvcHRpb25zQmFyLmdldFNlbGVjdGVkUG9wdWxhdGlvbklkZW50aWZpZXIoKSk7CisJCQlnZW9ncmFwaGljUmVuZGVyZXIuc2V0Q29sb3JQcm92aWRlckFkYXB0ZXIoY29sb3JQcm92aWRlckFkYXB0ZXIpOworCQkJbGF5b3V0KCk7CisJCX0KKwl9IC8vIGNvbG9yUHJvdmlkZXJDaGFuZ2VkCisJCisJCisJCisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgSVBhdGggV09SS1NQQUNFX1BBVEggPSBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuZ2V0Um9vdCgpLmdldExvY2F0aW9uKCk7CisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIHNlcCA9IEZpbGUuc2VwYXJhdG9yOworCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBzY2VuYXJpb3NVUkxQcmVmaXggPSAicGxhdGZvcm06L3Jlc291cmNlLyI7CisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIGJ1aWx0SW5TY2VuYXJpb1Byb2plY3RGb2xkZXIgPSAiQnVpbHRJblNjZW5hcmlvcyI7CisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIHJlY29yZGVkU2ltdWxhdGlvbnNGb2xkZXJOYW1lID0gIlJlY29yZGVkTWFwSW1hZ2VzIjsKKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBTaW1wbGVEYXRlRm9ybWF0IERBVEVfRk9STUFUVEVSID0gbmV3IFNpbXBsZURhdGVGb3JtYXQoInl5eXlNTWRkSEhtbXNzIiwgTG9jYWxlLmdldERlZmF1bHQoKSk7CisJCisJcHJpdmF0ZSBzdGF0aWMgRmlsZSBnZXRJbWFnZUZpbGVUb0xvZyhJU2ltdWxhdGlvbiBzaW0pIHsKKwkJCisJCVN0cmluZyBzY2VuYXJpb1VSTCA9IHNpbS5nZXRTY2VuYXJpbygpLmdldFVSSSgpLnRvU3RyaW5nKCk7CisJCQorCQlib29sZWFuIGJ1aWx0SW5TY2VuYXJpbyA9IHNjZW5hcmlvVVJMLnN0YXJ0c1dpdGgoc2NlbmFyaW9zVVJMUHJlZml4KTsKKwkJSVBhdGggcGF0aDE7CisJCWlmKGJ1aWx0SW5TY2VuYXJpbykgeworCQkJU3RyaW5nIHNjZW5hcmlvUmVsYXRpdmVQYXRoID0gc2NlbmFyaW9VUkwuc3Vic3RyaW5nKHNjZW5hcmlvc1VSTFByZWZpeC5sZW5ndGgoKSk7CisJCQlwYXRoMSA9IFdPUktTUEFDRV9QQVRILmFwcGVuZChzY2VuYXJpb1JlbGF0aXZlUGF0aCkucmVtb3ZlTGFzdFNlZ21lbnRzKDIpOworCQl9IGVsc2UgeworCQkJcGF0aDEgPSBXT1JLU1BBQ0VfUEFUSC5hcHBlbmQoYnVpbHRJblNjZW5hcmlvUHJvamVjdEZvbGRlcik7CisJCX0KKwkJU3RyaW5nIHBhdGggPSBwYXRoMQorCQkuYXBwZW5kKHJlY29yZGVkU2ltdWxhdGlvbnNGb2xkZXJOYW1lKQorCQkuYXBwZW5kKHNpbS5nZXRVbmlxdWVJRFN0cmluZygpKQorCQkuYXBwZW5kKERBVEVfRk9STUFUVEVSLmZvcm1hdChzaW0uZ2V0U2NlbmFyaW8oKS5nZXRTZXF1ZW5jZXIoKS5nZXRDdXJyZW50VGltZSgpLmdldFRpbWUoKSkgKyIucG5nIikKKwkJLnRvT1NTdHJpbmcoKTsKKworCQlGaWxlIGYgPSBuZXcgRmlsZShwYXRoKTsKKwkJZi5nZXRQYXJlbnRGaWxlKCkubWtkaXJzKCk7CisJCXJldHVybiBmOworCX0KKwkKKwkKKwlwdWJsaWMgSW1hZ2UgZ2V0TWFwQ2FudmFzSW1hZ2UoKQorCXsKKwkJaWYgKGdlb2dyYXBoaWNSZW5kZXJlciBpbnN0YW5jZW9mIE1hcFJlbmRlcmVyKSB7CisJCQlyZXR1cm4gKChNYXBSZW5kZXJlcilnZW9ncmFwaGljUmVuZGVyZXIpLmdldENhbnZhcygpLmdldENhbnZhc0ltYWdlKCk7CQkKKwkJfQorCQlyZXR1cm4gbnVsbDsKKwl9CisJCisJCisJCisJLyoqCisJICogU2F2ZXMgdGhlIGN1cnJlbnQgbWFwIGNhbnZhcyBpbWFnZSB0byBhIGZpbGUgYmFzZWQgb24gdGhlIHNpbXVsYXRpb24vc2NlbmFyaW8gCisJICogbmFtZSBhbmQgY3VycmVudCBzaW11bGF0aW9uIGRhdGUuCisJICogCisJICogQHBhcmFtIHNpbSBTaW11bGF0aW9uL1NjZW5hcmlvIHRvIHNhdmUgbWFwIGNhbnZhcyBmb3IKKwkgKi8KKwlwcml2YXRlIHZvaWQgc2F2ZUNhbnZhc0ltYWdlKElTaW11bGF0aW9uIHNpbSkKKwl7CisJCWlmIChnZW9ncmFwaGljUmVuZGVyZXIgaW5zdGFuY2VvZiBNYXBSZW5kZXJlcikgeworCQkJdHJ5IHsKKwkJCQkoKE1hcFJlbmRlcmVyKWdlb2dyYXBoaWNSZW5kZXJlcikuZ2V0Q2FudmFzKCkuc2F2ZUNhbnZhc0ltYWdlKGdldEltYWdlRmlsZVRvTG9nKHNpbSkpOworCQkJfSBjYXRjaCAoSU9FeGNlcHRpb24gaW9lKSB7CisJCQkJQWN0aXZhdG9yLmxvZ0luZm9ybWF0aW9uKCJFcnJvciBzYXZpbmcgbWFwIGNhbnZhcyBpbWFnZSIsIGlvZSk7CisJCQl9CQkJCisJCX0KKworCX0KKwkKKwkKK30gLy8gR2VvZ3JhcGhpY0NvbnRyb2wKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS92aWV3cy9nZW9ncmFwaGljL0dlb2dyYXBoaWNDb250cm9sRmFjdG9yeS5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3ZpZXdzL2dlb2dyYXBoaWMvR2VvZ3JhcGhpY0NvbnRyb2xGYWN0b3J5LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzdkNjllOAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS92aWV3cy9nZW9ncmFwaGljL0dlb2dyYXBoaWNDb250cm9sRmFjdG9yeS5qYXZhCkBAIC0wLDAgKzEsMzAgQEAKKy8vIEdlb2dyYXBoaWNDb250cm9sRmFjdG9yeS5qYXZhCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0udWkudmlld3MuZ2VvZ3JhcGhpYzsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGU7CisKKy8qKgorICogVGhpcyBpbnRlcmZhY2UgaXMgaW1wbGVtZW50ZWQgYnkgZmFjdG9yaWVzIHRoYXQgY3JlYXRlIGluc3RhbmNlcyBvZgorICoge0BsaW5rIEdlb2dyYXBoaWNDb250cm9sfS4KKyAqLworcHVibGljIGludGVyZmFjZSBHZW9ncmFwaGljQ29udHJvbEZhY3RvcnkgeworCisJLyoqCisJICogQHBhcmFtIHBhcmVudAorCSAqICAgICAgICAgICAgdGhlIHBhcmVudCBvZiB0aGUgY29udHJvbAorCSAqIEByZXR1cm4gYSBuZXcge0BsaW5rIEdlb2dyYXBoaWNDb250cm9sfSBpbnN0YW5jZS4KKwkgKi8KKwlHZW9ncmFwaGljQ29udHJvbCBjcmVhdGUoZmluYWwgQ29tcG9zaXRlIHBhcmVudCk7CisKK30gLy8gR2VvZ3JhcGhpY0NvbnRyb2xGYWN0b3J5CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvdmlld3MvZ2VvZ3JhcGhpYy9HZW9ncmFwaGljUmVuZGVyZXIuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS92aWV3cy9nZW9ncmFwaGljL0dlb2dyYXBoaWNSZW5kZXJlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU1N2M2N2EKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvdmlld3MvZ2VvZ3JhcGhpYy9HZW9ncmFwaGljUmVuZGVyZXIuamF2YQpAQCAtMCwwICsxLDQ3MCBAQAorLy8gR2VvZ3JhcGhpY1JlbmRlcmVyLmphdmEKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS51aS52aWV3cy5nZW9ncmFwaGljOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGphdmEuYXd0LkJhc2ljU3Ryb2tlOworaW1wb3J0IGphdmEuYXd0LlN0cm9rZTsKK2ltcG9ydCBqYXZhLnRleHQuRGVjaW1hbEZvcm1hdDsKK2ltcG9ydCBqYXZhLnRleHQuTnVtYmVyRm9ybWF0OworaW1wb3J0IGphdmEudGV4dC5QYXJzZUV4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuY29uY3VycmVudC5Db3B5T25Xcml0ZUFycmF5TGlzdDsKKworaW1wb3J0IGphdmF4LnN3aW5nLnRleHQuTnVtYmVyRm9ybWF0dGVyOworCitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLkFjdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSUFjdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uTWVudU1hbmFnZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLlNlcGFyYXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvblByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuU2VsZWN0aW9uQ2hhbmdlZEV2ZW50OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uam9icy5zaW11bGF0aW9uLklTaW11bGF0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udWkuQWN0aXZhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udWkuYWRhcHRlcnMuY29sb3IuQ29sb3JQcm92aWRlckFkYXB0ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS51aS52aWV3cy5nZW9ncmFwaGljLm1hcC5NZXNzYWdlczsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnVpLnZpZXdzLmdlb2dyYXBoaWMubWFwLlN0ZW1Qb2x5Z29uc0xpc3Q7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5EaXNwb3NlRXZlbnQ7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5EaXNwb3NlTGlzdGVuZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkxhYmVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2hBY3Rpb25Db25zdGFudHM7CisKKy8qKgorICogVGhpcyBjbGFzcyBpcyBleHRlbmRlZCBieSBjbGFzc2VzIHRoYXQgcmVuZGVyIGdlb2dyYXBoaWMgKGxhdC9sb25nKSBkYXRhIGludG8KKyAqIGEgdmlzdWFsIHJlcHJlc2VudGF0aW9uLgorICovCitwdWJsaWMgYWJzdHJhY3QgY2xhc3MgR2VvZ3JhcGhpY1JlbmRlcmVyIGV4dGVuZHMgQ29tcG9zaXRlIGltcGxlbWVudHMKKwkJSVNlbGVjdGlvblByb3ZpZGVyIHsKKwlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIGZsb2F0IElOSVRJQUxfR0FJTl9GQUNUT1IgPSAxLjBmOworCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgYm9vbGVhbiBJTklUSUFMX0RSQVdfUE9MWUdPTl9CT1JERVJTID0gdHJ1ZTsKKwlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIGJvb2xlYW4gSU5JVElBTF9VU0VfTE9HX1NDQUxJTkcgPSB0cnVlOworCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgaW50IE1BUkdJTl9IRUlHSFQgPSA1OworCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgaW50IE1BUkdJTl9XSURUSCA9IDU7CisKKwlwcml2YXRlIHN0YXRpYyBOdW1iZXJGb3JtYXR0ZXIgZm9ybWF0dGVyID0gbmV3IE51bWJlckZvcm1hdHRlcigpOworCisJcHJvdGVjdGVkIGJvb2xlYW4gZHJhd1BvbHlnb25Cb3JkZXJzID0gSU5JVElBTF9EUkFXX1BPTFlHT05fQk9SREVSUzsKKwlwcm90ZWN0ZWQgU3Ryb2tlIHBvbHlnb25TdHJva2UgPSBuZXcgQmFzaWNTdHJva2UoMWYpOworCXByb3RlY3RlZCBib29sZWFuIHVzZUxvZ1NjYWxpbmcgPSBJTklUSUFMX1VTRV9MT0dfU0NBTElORzsKKwlwcm90ZWN0ZWQgZmxvYXQgZ2FpbkZhY3RvciA9IElOSVRJQUxfR0FJTl9GQUNUT1I7CisKKwlwcml2YXRlIEdhaW5GYWN0b3JBY3Rpb24gZGVmYXVsdEdhaW5GYWN0b3JBY3Rpb247CisJR2FpbkZhY3RvckFjdGlvbiBsYXN0R2FpbkZhY3RvckFjdGlvbjsKKwlwcml2YXRlIExvZ2FyaXRobWljQWN0aW9uIGxvZ2FyaXRobWljQWN0aW9uOworCXByaXZhdGUgRHJhd1BvbHlnb25Cb3JkZXJzQWN0aW9uIGRyYXdQb2x5Z29uQm9yZGVyc0FjdGlvbjsKKwkKKwlwcm90ZWN0ZWQgQ29sb3JQcm92aWRlckFkYXB0ZXIgY29sb3JQcm92aWRlckFkYXB0ZXIgPSBudWxsOworCisJLyoqCisJICogVGhlIGNvbGxlY3Rpb24gb2YgSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lciB3YWl0aW5nIHRvIGJlIHRvbGQgYWJvdXQKKwkgKiBzZWxlY3Rpb25zLgorCSAqLworCXByb3RlY3RlZCBmaW5hbCBMaXN0PElTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXI+IGxpc3RlbmVycyA9IG5ldyBDb3B5T25Xcml0ZUFycmF5TGlzdDxJU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyPigpOworCisJcHJpdmF0ZSBJU2VsZWN0aW9uIHNlbGVjdGlvbjsKKwkKKwkvKgorCSAqIHJlcG9ydHMgdGhlIGdhaW4gYW5kIGxvZyBvciBsaW5lYXIgc2NhbGUKKwkgKi8KKwlwcm90ZWN0ZWQgTGFiZWwgZ2FpblNjYWxlTGFiZWw7CisJcHJvdGVjdGVkIE51bWJlckZvcm1hdCBnYWluRm9ybWF0dGVyID0gbmV3IERlY2ltYWxGb3JtYXQoIiMwLjAwMCIpOworCisJLyoqCisJICogQHBhcmFtIHBhcmVudAorCSAqIEBwYXJhbSBzdHlsZQorCSAqLworCXB1YmxpYyBHZW9ncmFwaGljUmVuZGVyZXIoZmluYWwgQ29tcG9zaXRlIHBhcmVudCwgZmluYWwgaW50IHN0eWxlKSB7CisJCXN1cGVyKHBhcmVudCwgc3R5bGUpOworCQl0aGlzLmFkZERpc3Bvc2VMaXN0ZW5lcihuZXcgRGlzcG9zZUxpc3RlbmVyKCkgeworCQkJLyoqCisJCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuRGlzcG9zZUxpc3RlbmVyI3dpZGdldERpc3Bvc2VkKG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuRGlzcG9zZUV2ZW50KQorCQkJICovCisJCQlwdWJsaWMgdm9pZCB3aWRnZXREaXNwb3NlZCgKKwkJCQkJQFN1cHByZXNzV2FybmluZ3MoInVudXNlZCIpIGZpbmFsIERpc3Bvc2VFdmVudCBlKSB7CisJCQkJaWYgKCFpc0Rpc3Bvc2VkKCkpIHsKKwkJCQkJZGlzcG9zZSgpOworCQkJCX0KKwkJCX0KKwkJfSk7CisJfSAvLyBHZW9ncmFwaGljUmVuZGVyZXIKKworCS8qKgorCSAqIEBwYXJhbSBwb2x5Z29uc1RvUmVuZGVyCisJICovCisJYWJzdHJhY3QgcHVibGljIHZvaWQgcmVuZGVyKFN0ZW1Qb2x5Z29uc0xpc3QgcG9seWdvbnNUb1JlbmRlciwgSVNpbXVsYXRpb24gc2ltdWxhdGlvbik7CisKKwlwcm90ZWN0ZWQgamF2YS5hd3QuQ29sb3IgZ2V0Q29sb3JGb3JSZWxhdGl2ZVZhbHVlKAorCQkJQFN1cHByZXNzV2FybmluZ3MoInVudXNlZCIpCisJCQlmaW5hbCBkb3VibGUgcmVsYXRpdmVWYWx1ZSkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLldpZGdldCNkaXNwb3NlKCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBkaXNwb3NlKCkgeworCQkvL05vdGhpbmcgdG8gZG8KKwl9CisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvblByb3ZpZGVyI2FkZFNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcihvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIpCisJICovCisJcHVibGljIHZvaWQgYWRkU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyKAorCQkJZmluYWwgSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lciBsaXN0ZW5lcikgeworCQlsaXN0ZW5lcnMuYWRkKGxpc3RlbmVyKTsKKwl9CisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvblByb3ZpZGVyI3JlbW92ZVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcihvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIpCisJICovCisJcHVibGljIHZvaWQgcmVtb3ZlU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyKAorCQkJZmluYWwgSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lciBsaXN0ZW5lcikgeworCQlsaXN0ZW5lcnMucmVtb3ZlKGxpc3RlbmVyKTsKKwl9CisKKwkvKioKKwkgKiBAcmV0dXJuIHRoZSBzZWxlY3Rpb24KKwkgKi8KKwlwdWJsaWMgZmluYWwgSVNlbGVjdGlvbiBnZXRTZWxlY3Rpb24oKSB7CisJCXJldHVybiBzZWxlY3Rpb247CisJfQorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb25Qcm92aWRlciNzZXRTZWxlY3Rpb24ob3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uKQorCSAqLworCXB1YmxpYyB2b2lkIHNldFNlbGVjdGlvbihmaW5hbCBJU2VsZWN0aW9uIHNlbGVjdGlvbikgeworCQl0aGlzLnNlbGVjdGlvbiA9IHNlbGVjdGlvbjsKKwkJZmlyZVNlbGVjdGlvbihzZWxlY3Rpb24pOworCX0KKworCS8qKgorCSAqIFBhc3MgYSB7QGxpbmsgU2VsZWN0aW9uQ2hhbmdlZEV2ZW50fSBhbG9uZyB0byBsaXN0ZW5lcnMuCisJICogCisJICogQHBhcmFtIHNlbGVjdGlvbgorCSAqICAgICAgICAgICAgdGhlIHtAbGluayBJU2VsZWN0aW9ufSB0byBiZSBnaXZpbmcgdG8gdGhlIGxpc3RlbmVycy4KKwkgKi8KKwlwdWJsaWMgdm9pZCBmaXJlU2VsZWN0aW9uKGZpbmFsIElTZWxlY3Rpb24gc2VsZWN0aW9uKSB7CisKKwkJZmluYWwgU2VsZWN0aW9uQ2hhbmdlZEV2ZW50IGV2ZW50ID0gbmV3IFNlbGVjdGlvbkNoYW5nZWRFdmVudCh0aGlzLAorCQkJCXNlbGVjdGlvbik7CisJCWZvciAoZmluYWwgSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lciBsaXN0ZW5lciA6IGxpc3RlbmVycykgeworCQkJbGlzdGVuZXIuc2VsZWN0aW9uQ2hhbmdlZChldmVudCk7CisJCX0gLy8gZm9yIGVhY2ggSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcgorCX0gLy8gZmlyZVNlbGVjdGlvbgorCisJLyoqCisJICogUmVzZXQgdGhlIHJlbmRlcmVyLgorCSAqLworCXB1YmxpYyB2b2lkIHJlc2V0KCkgeworCQkvLyBSZXNldCB0aGUgZ2FpbiBmYWN0b3IgYW5kIHVwZGF0ZSB0aGUgY2hlY2tzIGluIHRoZSBjb250ZXh0IG1lbnUKKwkJbGFzdEdhaW5GYWN0b3JBY3Rpb24uc2V0Q2hlY2tlZChmYWxzZSk7CisJCWRlZmF1bHRHYWluRmFjdG9yQWN0aW9uLnJ1bigpOworCQlkZWZhdWx0R2FpbkZhY3RvckFjdGlvbi5zZXRDaGVja2VkKHRydWUpOworCisJCXVzZUxvZ1NjYWxpbmcgPSBJTklUSUFMX1VTRV9MT0dfU0NBTElORzsKKwkJbG9nYXJpdGhtaWNBY3Rpb24uc2V0Q2hlY2tlZCh1c2VMb2dTY2FsaW5nKTsKKworCQlkcmF3UG9seWdvbkJvcmRlcnMgPSBJTklUSUFMX0RSQVdfUE9MWUdPTl9CT1JERVJTOworCQlkcmF3UG9seWdvbkJvcmRlcnNBY3Rpb24uc2V0Q2hlY2tlZChkcmF3UG9seWdvbkJvcmRlcnMpOworCisJCS8vIGRyYXdQb2x5Z29uQ2VudGVyQ29ubmVjdGlvbnMgPQorCQkvLyBERUZBVUxUX0RSQVdfUE9MWUdPTl9DRU5URVJfQ09OTkVDVElPTlM7CisJCS8vIGNvbm5lY3RQb2x5Z29uQ2VudGVyc0FjdGlvbi5zZXRDaGVja2VkKGRyYXdQb2x5Z29uQ2VudGVyQ29ubmVjdGlvbnMpOworCX0gLy8gcmVzZXQKKwkKKwkKKwkvKioKKwkgKiBsYWJlbHMgdGhlIG1hcCB3aXRoIGN1cnJlbnQgZ2FpbiBhbmQgbG9nL2xpbiBtb2RlCisJICovCisJcHVibGljIHZvaWQgdXBkYXRlU2NhbGVMb2dMaW5MYWJlbCgpeworCQkJU3RyaW5nQnVpbGRlciBzYiA9IG5ldyBTdHJpbmdCdWlsZGVyKCk7IC8vIGNyZWF0ZXMgZW1wdHkgYnVpbGRlciwgY2FwYWNpdHkgMTYKKwkJCWlmKHVzZUxvZ1NjYWxpbmcpIHsKKwkJCQlzYi5hcHBlbmQoTWVzc2FnZXMuZ2V0U3RyaW5nKCJNYXBNZW51LkxvZ1NjYWxlIikpOworCQkJfWVsc2UgeworCQkJCXNiLmFwcGVuZChNZXNzYWdlcy5nZXRTdHJpbmcoIk1hcE1lbnUuTGluU2NhbGUiKSk7CisJCQl9CisJCQlzYi5hcHBlbmQoIiAgIik7CisJCQlzYi5hcHBlbmQoTWVzc2FnZXMuZ2V0U3RyaW5nKCJNYXBNZW51LkdhaW4iKSk7CisJCQlzYi5hcHBlbmQoIiB4Iik7CisJCQlzYi5hcHBlbmQoZ2FpbkZvcm1hdHRlci5mb3JtYXQoZ2FpbkZhY3RvcikpOworCQkJZ2FpblNjYWxlTGFiZWwuc2V0VGV4dChzYi50b1N0cmluZygpKTsKKwl9CisKKwkvKioKKwkgKiAKKwkgKiBAcGFyYW0gZ2FpbkZhY3RvcgorCSAqLworCXByb3RlY3RlZCB2b2lkIHNldEdhaW5GYWN0b3IoZmluYWwgZmxvYXQgZ2FpbkZhY3RvcikgeworCQl0aGlzLmdhaW5GYWN0b3IgPSBnYWluRmFjdG9yOworCQl1cGRhdGVTY2FsZUxvZ0xpbkxhYmVsKCk7CisJfSAvLyBzZXRHYWluRmFjdG9yCisKKwkvKioKKwkgKiBTd2l0Y2ggdGhlIG9wdGlvbiBvZiBkcmF3aW5nIHRoZSBib3JkZXJzIG9mIHBvbHlnb25zIG9uIHRoZSBtYXAuCisJICovCisJcHJvdGVjdGVkIHZvaWQgdG9nZ2xlRHJhd1BvbHlnb25Cb3JkZXJzQ2hvaWNlKCkgeworCQlkcmF3UG9seWdvbkJvcmRlcnMgPSAhZHJhd1BvbHlnb25Cb3JkZXJzOworCQlyZWRyYXcoKTsKKwl9IC8vIHRvZ2dsZURyYXdQb2x5Z29uQm9yZGVyc0Nob2ljZQorCisJLyoqCisJICogU3dpdGNoIHRoZSBvcHRpb24gb2Ygc2NhbGluZyB0aGUgZGlzcGxheSB2YWx1ZXMgbG9ncml0aG1pY2FsbHkuCisJICovCisJcHJvdGVjdGVkIHZvaWQgdG9nZ2xlVXNlTG9nU2NhbGluZygpIHsKKwkJdXNlTG9nU2NhbGluZyA9ICF1c2VMb2dTY2FsaW5nOworCQl1cGRhdGVTY2FsZUxvZ0xpbkxhYmVsKCk7CisJCXJlZHJhdygpOworCX0gLy8gdG9nZ2xlVXNlTG9nU2NhbGluZworCisJLyoqCisJICogQ3JlYXRlIHRoZSB2aWV3J3MgY29udGV4dCBtZW51IGFuZCBhZGQgdGhlIGFjdGlvbiBoYW5kbGVycyB0byBpdC4KKwkgKiBAcmV0dXJuIHRoZSBNZW51TWFuYWdlcgorCSAqLworCXB1YmxpYyBNZW51TWFuYWdlciBjcmVhdGVDb250ZXh0TWVudU1hbmFnZXIoKSB7CisKKwkJLy8gQ29udGV4dCBNZW51CisJCWZpbmFsIE1lbnVNYW5hZ2VyIGNvbnRleHRNZW51TWFuYWdlciA9IG5ldyBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uTWVudU1hbmFnZXIoKTsKKworCQljb250ZXh0TWVudU1hbmFnZXIuYWRkKGNyZWF0ZUdhaW5GYWN0b3JNZW51KCkpOworCisJCWxvZ2FyaXRobWljQWN0aW9uID0gbmV3IExvZ2FyaXRobWljQWN0aW9uKCk7CisJCWNvbnRleHRNZW51TWFuYWdlci5hZGQobG9nYXJpdGhtaWNBY3Rpb24pOworCisJCWNvbnRleHRNZW51TWFuYWdlci5hZGQobmV3IFNlcGFyYXRvcigpKTsKKwkJZHJhd1BvbHlnb25Cb3JkZXJzQWN0aW9uID0gbmV3IERyYXdQb2x5Z29uQm9yZGVyc0FjdGlvbigpOworCQljb250ZXh0TWVudU1hbmFnZXIuYWRkKGRyYXdQb2x5Z29uQm9yZGVyc0FjdGlvbik7CisKKwkJLy8gY29ubmVjdFBvbHlnb25DZW50ZXJzQWN0aW9uID0gbmV3IENvbm5lY3RQb2x5Z29uQ2VudGVyc0FjdGlvbigpOworCQkvLyBjb250ZXh0TWVudU1hbmFnZXIuYWRkKGNvbm5lY3RQb2x5Z29uQ2VudGVyc0FjdGlvbik7CisKKwkJY29udGV4dE1lbnVNYW5hZ2VyLmFkZChuZXcgU2VwYXJhdG9yKCkpOworCisvLyBEZWZlY3QgMzAyNjYzCisvLwkJY29udGV4dE1lbnVNYW5hZ2VyLmFkZChjcmVhdGVSZXBvcnRzU2VsZWN0aW9uTWVudSgpKTsKKwkJCisJCWNvbnRleHRNZW51TWFuYWdlci5hZGQobmV3IFNlcGFyYXRvcigpKTsKKworCQkvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworCQljb250ZXh0TWVudU1hbmFnZXIuYWRkKG5ldyBSZXNldE1hcENhbnZhc0FjdGlvbigpKTsKKworCQkvLyBQbGFjZSBIb2xkZXIgZm9yIE1lbnUgQWRkaXRpb25zCisJCWNvbnRleHRNZW51TWFuYWdlci5hZGQobmV3IFNlcGFyYXRvcigKKwkJCQlJV29ya2JlbmNoQWN0aW9uQ29uc3RhbnRzLk1CX0FERElUSU9OUykpOworCisJCS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisJCXJldHVybiBjb250ZXh0TWVudU1hbmFnZXI7CisJCQorCX0gLy8gY3JlYXRlQ29udGV4dE1lbnUKKworCS8qKgorCSAqIEByZXR1cm4KKwkgKi8KKwlwcml2YXRlIE1lbnVNYW5hZ2VyIGNyZWF0ZUdhaW5GYWN0b3JNZW51KCkgeworCQlmaW5hbCBNZW51TWFuYWdlciBnYWluRmFjdG9yTWVudSA9IG5ldyBNZW51TWFuYWdlcihNZXNzYWdlcworCQkJCS5nZXRTdHJpbmcoIk1hcE1lbnUuR2FpbkZhY3RvciIpKTsKKwkJZ2FpbkZhY3Rvck1lbnUuYWRkKG5ldyBHYWluRmFjdG9yQWN0aW9uKDAuMDAxKSk7CisJCWdhaW5GYWN0b3JNZW51LmFkZChuZXcgR2FpbkZhY3RvckFjdGlvbigwLjAxKSk7CisJCWdhaW5GYWN0b3JNZW51LmFkZChuZXcgR2FpbkZhY3RvckFjdGlvbigwLjEpKTsKKworCQlkZWZhdWx0R2FpbkZhY3RvckFjdGlvbiA9IG5ldyBHYWluRmFjdG9yQWN0aW9uKDEuMCk7IC8vIERlZmF1bHQKKwkJbGFzdEdhaW5GYWN0b3JBY3Rpb24gPSBkZWZhdWx0R2FpbkZhY3RvckFjdGlvbjsKKwkJZ2FpbkZhY3Rvck1lbnUuYWRkKGRlZmF1bHRHYWluRmFjdG9yQWN0aW9uKTsKKworCQlnYWluRmFjdG9yTWVudS5hZGQobmV3IEdhaW5GYWN0b3JBY3Rpb24oMTAuMCkpOworCQlnYWluRmFjdG9yTWVudS5hZGQobmV3IEdhaW5GYWN0b3JBY3Rpb24oMTAwLjApKTsKKwkJZ2FpbkZhY3Rvck1lbnUuYWRkKG5ldyBHYWluRmFjdG9yQWN0aW9uKDEwMDAuMCkpOworCQlnYWluRmFjdG9yTWVudS5hZGQobmV3IEdhaW5GYWN0b3JBY3Rpb24oMTAwMDAuMCkpOworCQlnYWluRmFjdG9yTWVudS5hZGQobmV3IEdhaW5GYWN0b3JBY3Rpb24oMTAwMDAwLjApKTsKKwkJZ2FpbkZhY3Rvck1lbnUuYWRkKG5ldyBHYWluRmFjdG9yQWN0aW9uKDEwMDAwMDAuMCkpOworCQlnYWluRmFjdG9yTWVudS5hZGQobmV3IEdhaW5GYWN0b3JBY3Rpb24oMTAwMDAwMDAuMCkpOworCQlyZXR1cm4gZ2FpbkZhY3Rvck1lbnU7CisJfQorCQorCS8qKgorCSAqIEByZXR1cm4KKwkgKi8KKwlwcml2YXRlIE1lbnVNYW5hZ2VyIGNyZWF0ZVJlcG9ydHNTZWxlY3Rpb25NZW51KCkgeworCQlmaW5hbCBNZW51TWFuYWdlciByZXBvcnRzU2VsZWN0aW9uTWVudSA9IG5ldyBNZW51TWFuYWdlcihNZXNzYWdlcworCQkJCS5nZXRTdHJpbmcoIk1hcE1lbnUuUmVwb3J0c19TZWxlY3QiKSwgInJlcG9ydHMiKTsKKwkJcmVwb3J0c1NlbGVjdGlvbk1lbnUuYWRkKG5ldyBTZXBhcmF0b3IoCisJCQkJSVdvcmtiZW5jaEFjdGlvbkNvbnN0YW50cy5NQl9BRERJVElPTlMpKTsKKwkJcmV0dXJuIHJlcG9ydHNTZWxlY3Rpb25NZW51OworCX0gLy8gY3JlYXRlUmVwb3J0c1NlbGVjdGlvbk1lbnUKKworCXByb3RlY3RlZCBjbGFzcyBHYWluRmFjdG9yQWN0aW9uIGV4dGVuZHMgQWN0aW9uIHsKKworCQlwcml2YXRlIGZpbmFsIGRvdWJsZSBmYWN0b3I7CisKKwkJR2FpbkZhY3RvckFjdGlvbihmaW5hbCBkb3VibGUgZmFjdG9yKSB7CisJCQlzdXBlcihHZW9ncmFwaGljUmVuZGVyZXIudGhpcy5nZXRUZXh0KGZhY3RvciksCisJCQkJCUlBY3Rpb24uQVNfUkFESU9fQlVUVE9OKTsKKwkJCXRoaXMuZmFjdG9yID0gZmFjdG9yOworCQkJc2V0Q2hlY2tlZChmYWN0b3IgPT0gSU5JVElBTF9HQUlOX0ZBQ1RPUik7CisJCX0KKworCQkvKioKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uQWN0aW9uI2dldFRleHQoKQorCQkgKi8KKwkJQE92ZXJyaWRlCisJCXB1YmxpYyBTdHJpbmcgZ2V0VGV4dCgpIHsKKwkJCXJldHVybiBHZW9ncmFwaGljUmVuZGVyZXIudGhpcy5nZXRUZXh0KGZhY3Rvcik7CisJCX0gLy8gZ2V0VGV4dAorCisJCS8qKgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5BY3Rpb24jcnVuKCkKKwkJICovCisJCUBPdmVycmlkZQorCQlwdWJsaWMgdm9pZCBydW4oKSB7CisJCQlzZXRHYWluRmFjdG9yKChmbG9hdClmYWN0b3IpOworCQkJbGFzdEdhaW5GYWN0b3JBY3Rpb24gPSB0aGlzOworCQkJQ29tcG9zaXRlIHBhcmVudCA9IEdlb2dyYXBoaWNSZW5kZXJlci50aGlzLmdldFBhcmVudCgpOworCQkJKChHZW9ncmFwaGljQ29udHJvbClwYXJlbnQpLnJlZnJlc2goKTsgCisJCX0KKworCX0gLy8gR2FpbkZhY3RvckFjdGlvbgorCisJU3RyaW5nIGdldFRleHQoZmluYWwgZG91YmxlIGZhY3RvcikgeworCQlTdHJpbmcgcmV0VmFsdWUgPSAiIjsKKwkJdHJ5IHsKKwkJCXJldFZhbHVlID0gZm9ybWF0dGVyLnZhbHVlVG9TdHJpbmcobmV3IERvdWJsZShmYWN0b3IpKTsKKwkJfSBjYXRjaCAoZmluYWwgUGFyc2VFeGNlcHRpb24gZSkgeworCQkJQWN0aXZhdG9yLmxvZ0Vycm9yKCJQcm9ibGVtIHBhcnNpbmcgZ2FpbiBmYWN0b3IgdmFsdWUgXCIiICsgZmFjdG9yCisJCQkJCSsgIlwiIiwgZSk7CisJCX0KKwkJcmV0dXJuIHJldFZhbHVlOworCX0gLy8gZ2V0VGV4dAorCisJcHJvdGVjdGVkIGNsYXNzIExvZ2FyaXRobWljQWN0aW9uIGV4dGVuZHMgQWN0aW9uIHsKKworCQkvKioKKwkJICogRGVmYXVsdCBDb25zdHJ1Y3RvcgorCQkgKi8KKwkJcHVibGljIExvZ2FyaXRobWljQWN0aW9uKCkgeworCQkJc3VwZXIoTWVzc2FnZXMuZ2V0U3RyaW5nKCJNYXBNZW51LkxvZ3JpdGhtaWNfU2NhbGluZyIpLAorCQkJCQlJQWN0aW9uLkFTX0NIRUNLX0JPWCk7CisJCQlzZXRDaGVja2VkKHVzZUxvZ1NjYWxpbmcpOworCQl9CisKKwkJLyoqCisJCSAqIEBzZWUgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLkFjdGlvbiNnZXRUZXh0KCkKKwkJICovCisJCUBPdmVycmlkZQorCQlwdWJsaWMgU3RyaW5nIGdldFRleHQoKSB7CisJCQlyZXR1cm4gTWVzc2FnZXMuZ2V0U3RyaW5nKCJNYXBNZW51LkxvZ3JpdGhtaWNfU2NhbGluZyIpOworCQl9CisKKwkJLyoqCisJCSAqIEBzZWUgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLkFjdGlvbiNydW4oKQorCQkgKi8KKwkJQE92ZXJyaWRlCisJCXB1YmxpYyB2b2lkIHJ1bigpIHsKKwkJCXRvZ2dsZVVzZUxvZ1NjYWxpbmcoKTsKKwkJCUNvbXBvc2l0ZSBwYXJlbnQgPSBHZW9ncmFwaGljUmVuZGVyZXIudGhpcy5nZXRQYXJlbnQoKTsKKwkJCSgoR2VvZ3JhcGhpY0NvbnRyb2wpcGFyZW50KS5yZWZyZXNoKCk7IAorCQl9CisJfSAvLyBMb2dhcmlnaG1pY0FjdGlvbgorCisJcHJvdGVjdGVkIGNsYXNzIERyYXdQb2x5Z29uQm9yZGVyc0FjdGlvbiBleHRlbmRzIEFjdGlvbiB7CisKKwkJLyoqCisJCSAqIERlZmF1bHQgQ29uc3RydWN0b3IKKwkJICovCisJCXB1YmxpYyBEcmF3UG9seWdvbkJvcmRlcnNBY3Rpb24oKSB7CisJCQlzdXBlcihNZXNzYWdlcy5nZXRTdHJpbmcoIk1hcE1lbnUuUG9seWdvbl9Cb3JkZXJzIiksCisJCQkJCUlBY3Rpb24uQVNfQ0hFQ0tfQk9YKTsKKwkJCS8vIENoZWNrZWQgaW4gdGhlIG1lbnU/CisJCQlpZiAoZHJhd1BvbHlnb25Cb3JkZXJzKSB7CisJCQkJLy8gWWVzCisJCQkJc2V0Q2hlY2tlZCh0cnVlKTsKKwkJCX0gLy8gaWYKKwkJfQorCisJCS8qKgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5BY3Rpb24jZ2V0VGV4dCgpCisJCSAqLworCQlAT3ZlcnJpZGUKKwkJcHVibGljIFN0cmluZyBnZXRUZXh0KCkgeworCQkJcmV0dXJuIE1lc3NhZ2VzLmdldFN0cmluZygiTWFwTWVudS5Qb2x5Z29uX0JvcmRlcnMiKTsKKwkJfQorCisJCS8qKgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5BY3Rpb24jcnVuKCkKKwkJICovCisJCUBPdmVycmlkZQorCQlwdWJsaWMgdm9pZCBydW4oKSB7CisJCQl0b2dnbGVEcmF3UG9seWdvbkJvcmRlcnNDaG9pY2UoKTsKKwkJCUNvbXBvc2l0ZSBwYXJlbnQgPSBHZW9ncmFwaGljUmVuZGVyZXIudGhpcy5nZXRQYXJlbnQoKTsKKwkJCSgoR2VvZ3JhcGhpY0NvbnRyb2wpcGFyZW50KS5yZWZyZXNoKCk7IAorCQl9CisJfSAvLyBEcmF3UG9seWdvbkJvcmRlcnNBY3Rpb24KKworCS8vIHByb3RlY3RlZCBjbGFzcyBDb25uZWN0UG9seWdvbkNlbnRlcnNBY3Rpb24gZXh0ZW5kcyBBY3Rpb24geworCS8vCisJLy8gLyoqCisJLy8gKiBEZWZhdWx0IENvbnN0cnVjdG9yCisJLy8gKi8KKwkvLyBwdWJsaWMgQ29ubmVjdFBvbHlnb25DZW50ZXJzQWN0aW9uKCkgeworCS8vIHN1cGVyKE1lc3NhZ2VzLmdldFN0cmluZygiTWFwTWVudS5Qb2x5Z29uX0NlbnRlcnMiKSwKKwkvLyBJQWN0aW9uLkFTX0NIRUNLX0JPWCk7CisJLy8gc2V0RW5hYmxlZChmYWxzZSk7CisJLy8gc2V0Q2hlY2tlZChkcmF3UG9seWdvbkNlbnRlckNvbm5lY3Rpb25zKTsKKwkvLyB9CisJLy8KKwkvLyAvKioKKwkvLyAqIEBzZWUgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLkFjdGlvbiNnZXRUZXh0KCkKKwkvLyAqLworCS8vIEBPdmVycmlkZQorCS8vIHB1YmxpYyBTdHJpbmcgZ2V0VGV4dCgpIHsKKwkvLyByZXR1cm4gTWVzc2FnZXMuZ2V0U3RyaW5nKCJNYXBNZW51LlBvbHlnb25fQ2VudGVycyIpOworCS8vIH0KKwkvLworCS8vIC8qKgorCS8vICogQHNlZSBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uQWN0aW9uI3J1bigpCisJLy8gKi8KKwkvLyBAT3ZlcnJpZGUKKwkvLyBwdWJsaWMgdm9pZCBydW4oKSB7CisJLy8gdG9nZ2xlRHJhd1BvbHlnb25zQ2VudGVyc0Nvbm5lY3Rpb25zKCk7CisJLy8gfQorCS8vIH0gLy8gQ29ubmVjdFBvbHlnb25DZW50ZXJzQWN0aW9uCisKKwlwcm90ZWN0ZWQgY2xhc3MgUmVzZXRNYXBDYW52YXNBY3Rpb24gZXh0ZW5kcyBBY3Rpb24geworCisJCS8qKgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5BY3Rpb24jZ2V0VGV4dCgpCisJCSAqLworCQlAT3ZlcnJpZGUKKwkJcHVibGljIFN0cmluZyBnZXRUZXh0KCkgeworCQkJcmV0dXJuIE1lc3NhZ2VzLmdldFN0cmluZygiTWFwTWVudS5SZXNldCIpOworCQl9CisKKwkJLyoqCisJCSAqIEBzZWUgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLkFjdGlvbiNydW4oKQorCQkgKi8KKwkJQE92ZXJyaWRlCisJCXB1YmxpYyB2b2lkIHJ1bigpIHsKKwkJCXJlc2V0KCk7CisJCX0KKwl9IC8vIFJlc2V0TWFwQ2FudmFzQWN0aW9uCisKKwkvKioKKwkgKiBAcGFyYW0gY29sb3JQcm92aWRlciB0aGUgY29sb3JQcm92aWRlciB0byBzZXQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRDb2xvclByb3ZpZGVyQWRhcHRlcihDb2xvclByb3ZpZGVyQWRhcHRlciBjb2xvclByb3ZpZGVyKSB7CisJCXRoaXMuY29sb3JQcm92aWRlckFkYXB0ZXIgPSBjb2xvclByb3ZpZGVyOworCX0KK30gLy8gR2VvZ3JhcGhpY1JlbmRlcmVyCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvdmlld3MvZ2VvZ3JhcGhpYy9HZW9ncmFwaGljVmlld2VyLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvdmlld3MvZ2VvZ3JhcGhpYy9HZW9ncmFwaGljVmlld2VyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmRkOGQzZAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS92aWV3cy9nZW9ncmFwaGljL0dlb2dyYXBoaWNWaWV3ZXIuamF2YQpAQCAtMCwwICsxLDQwMiBAQAorLy8gR2VvZ3JhcGhpY1ZpZXdlci5qYXZhCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0udWkudmlld3MuZ2VvZ3JhcGhpYzsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OworaW1wb3J0IGphdmEudXRpbC5BcnJheXM7CitpbXBvcnQgamF2YS51dGlsLkhhc2hTZXQ7CitpbXBvcnQgamF2YS51dGlsLkxpbmtlZEhhc2hTZXQ7CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CitpbXBvcnQgamF2YS51dGlsLlNldDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5NZW51TWFuYWdlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvblByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuU2VsZWN0aW9uQ2hhbmdlZEV2ZW50OworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuVmlld2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uam9icy5zaW11bGF0aW9uLklTaW11bGF0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uam9icy5zaW11bGF0aW9uLklTaW11bGF0aW9uTWFuYWdlckxpc3RlbmVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uam9icy5zaW11bGF0aW9uLlNpbXVsYXRpb25NYW5hZ2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uam9icy5zaW11bGF0aW9uLlNpbXVsYXRpb25NYW5hZ2VyRXZlbnQ7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS51aS52aWV3cy5JQ29udGV4dE1lbnVVcGRhdGVzTGlzdGVuZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS51aS52aWV3cy5nZW9ncmFwaGljLm1hcC5NYXBSZW5kZXJlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuU1dUOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5sYXlvdXQuRmlsbExheW91dDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29udHJvbDsKKworLyoqCisgKiBUaGlzIGNsYXNzIHByZXNlbnRzICJ2aWV3cyIgb2YgdGhlIHJ1bm5pbmcgc2ltdWxhdGlvbnMuCisgKi8KK3B1YmxpYyBjbGFzcyBHZW9ncmFwaGljVmlld2VyIGV4dGVuZHMgVmlld2VyIGltcGxlbWVudHMKKwkJSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lciwgSVNpbXVsYXRpb25NYW5hZ2VyTGlzdGVuZXIgeworCisJLyoqCisJICogVGhpcyBpcyB0aGUgY29sbGVjdGlvbiBvZgorCSAqIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmpvYnMuc2ltdWxhdGlvbi5TaW11bGF0aW9ufXMgdGhhdCBzaG91bGQgYmUKKwkgKiBkaXNwbGF5ZWQuCisJICovCisJcHJpdmF0ZSBmaW5hbCBTZXQ8SVNpbXVsYXRpb24+IHNpbXVsYXRpb25zVG9EaXNwbGF5ID0gbmV3IExpbmtlZEhhc2hTZXQ8SVNpbXVsYXRpb24+KCk7CisKKwkvKioKKwkgKiBUaGlzIGlzIHRoZSB7QGxpbmsgU2ltdWxhdGlvbk1hbmFnZXJ9IHRoYXQgaXMgdGhlIGlucHV0IHRvIHRoZSB2aWV3ZXIuIEl0CisJICogbWFpbnRhaW5zIGEgY29sbGVjdGlvbiBvZiBhY3RpdmUKKwkgKiB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5qb2JzLnNpbXVsYXRpb24uU2ltdWxhdGlvbn1zIGluIHRoZSBzeXN0ZW0uCisJICogVGhpcyB2aWV3ZXIgbGlzdGVucyB0byBpdCB0byBkaXNjb3ZlciB3aGVuIG5ldworCSAqIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmpvYnMuc2ltdWxhdGlvbi5TaW11bGF0aW9ufXMgYXJlIGNyZWF0ZWQgYW5kCisJICogb2xkIG9uZXMgZGlzYXBwZWFyLgorCSAqIAorCSAqIEBzZWUgI3NpbXVsYXRpb25zQ2hhbmdlZChTaW11bGF0aW9uTWFuYWdlckV2ZW50KQorCSAqLworCXByaXZhdGUgU2ltdWxhdGlvbk1hbmFnZXIgc2ltdWxhdGlvbk1hbmFnZXI7CisKKwkvKioKKwkgKiBUaGUgPGNvZGU+SWRlbnRpZmlhYmxlPC9jb2RlPiB0aGF0IHdhcyBtb3N0IHJlY2VudGx5IHNlbGVjdGVkIGJ5IGEgdXNlcgorCSAqIGNsaWNraW5nIG9uIG9uZSBvZiB0aGUKKwkgKiB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS51aS52aWV3cy5nZW9ncmFwaGljLm1hcC5NYXBDb250cm9sfXMsIG9yCisJICogPGNvZGU+bnVsbDwvY29kZT4gaWYgbm9uZSBoYXMgYmVlbiBzZWxlY3RlZC4KKwkgKi8KKwlwcml2YXRlIElTZWxlY3Rpb24gc2VsZWN0aW9uID0gbnVsbDsKKworCS8qKgorCSAqIFRoaXMgaXMgdGhlIHRvcC1sZXZlbCBjb250cm9sIG9mIHRoZSB2aWV3ZXIuIEl0IGNvbnRhaW5zIHRoZQorCSAqIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLnVpLnZpZXdzLmdlb2dyYXBoaWMubWFwLk1hcENvbnRyb2x9cyB0aGF0CisJICogZGlzcGxheSB0aGUgY3VycmVudCBzdGF0ZSBvZiB0aGUKKwkgKiB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5qb2JzLnNpbXVsYXRpb24uU2ltdWxhdGlvbn1zLgorCSAqLworCXByaXZhdGUgQ29tcG9zaXRlIGNvbXBvc2l0ZTsKKworCS8qKgorCSAqIFRoaXMgZmFjdG9yeSBpcyB1c2VkIHRvIGNyZWF0ZSBpbnN0YW5jZXMgb2Yge0BsaW5rIEdlb2dyYXBoaWNDb250cm9sfSBpbgorCSAqIHRoZSBtZXRob2Qge0BsaW5rICNwb3B1bGF0ZVZpZXcoKX0KKwkgKi8KKwlwcml2YXRlIEdlb2dyYXBoaWNDb250cm9sRmFjdG9yeSBnY2Y7CisKKwkvKioKKwkgKiBUaGlzIGlzIGEgbGlzdCBvZiBsaXN0ZW5lcnMgdG8gZ2V0IG5vdGlmaWNhdGlvbnMgYWJvdXQgbmV3bHkgZ2VuZXJhdGVkCisJICogY29udGV4dCBtZW51cy4KKwkgKi8KKwlwcml2YXRlIExpc3Q8SUNvbnRleHRNZW51VXBkYXRlc0xpc3RlbmVyPiBjb250ZXh0TWVudVVwZGF0ZUxpc3RlbmVycyA9IG5ldyBBcnJheUxpc3Q8SUNvbnRleHRNZW51VXBkYXRlc0xpc3RlbmVyPigpOworCisJLyoqCisJICogQHBhcmFtIHBhcmVudAorCSAqICAgICAgICAgICAgdGhlIFNXVCBwYXJlbnQgb2YgdGhlIGNvbnRyb2wgdGhhdCBtYWtlcyB1cCB0aGUgdmlld2VyCisJICogQHBhcmFtIGdjZgorCSAqICAgICAgICAgICAgdGhlIGZhY3RvcnkgdGhhdCBjcmVhdGVzIGluc3RhbmNlIG9mIHtAbGluayBHZW9ncmFwaGljQ29udHJvbH0KKwkgKi8KKwlwdWJsaWMgR2VvZ3JhcGhpY1ZpZXdlcihDb21wb3NpdGUgcGFyZW50LCBHZW9ncmFwaGljQ29udHJvbEZhY3RvcnkgZ2NmKSB7CisJCWNvbXBvc2l0ZSA9IG5ldyBDb21wb3NpdGUocGFyZW50LCBTV1QuTk9ORSk7CisJCWZpbmFsIEZpbGxMYXlvdXQgY29tcG9zaXRlTGF5b3V0ID0gbmV3IEZpbGxMYXlvdXQoU1dULkhPUklaT05UQUwpOworCQljb21wb3NpdGUuc2V0TGF5b3V0KGNvbXBvc2l0ZUxheW91dCk7CisKKwkJLy8gUmVtZW1iZXIgdGhlIGZhY3RvcnkgdGhhdCB3ZSdsbCB1c2UgdG8gY3JlYXRlIGluc3RhbmNlcyBvZgorCQkvLyBHZW9ncmFwaGljQ29udHJvbAorCQl0aGlzLmdjZiA9IGdjZjsKKworCQlyZWZyZXNoKCk7CisKKwkJY29tcG9zaXRlLnBhY2soKTsKKwl9IC8vIEdlb2dyYXBoaWNWaWV3ZXIKKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5WaWV3ZXIjZ2V0Q29udHJvbCgpCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIENvbnRyb2wgZ2V0Q29udHJvbCgpIHsKKwkJcmV0dXJuIGNvbXBvc2l0ZTsKKwl9IC8vIGdldENvbnRyb2wKKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5WaWV3ZXIjZ2V0U2VsZWN0aW9uKCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgSVNlbGVjdGlvbiBnZXRTZWxlY3Rpb24oKSB7CisJCXJldHVybiBzZWxlY3Rpb247CisJfQorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlZpZXdlciNyZWZyZXNoKCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCByZWZyZXNoKCkgeworCQlpZiAoc2ltdWxhdGlvbk1hbmFnZXIgIT0gbnVsbCkgeworCQkJLy8gWWVzCisJCQlzaW11bGF0aW9uc1RvRGlzcGxheS5jbGVhcigpOworCQkJc2ltdWxhdGlvbnNUb0Rpc3BsYXkuYWRkQWxsKHNpbXVsYXRpb25NYW5hZ2VyCisJCQkJCS5nZXRBY3RpdmVTaW11bGF0aW9ucygpKTsKKwkJfSAvLyBpZgorCQlwb3B1bGF0ZVZpZXcoKTsKKwl9IC8vIHJlZnJlc2gKKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5WaWV3ZXIjZ2V0SW5wdXQoKQorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBPYmplY3QgZ2V0SW5wdXQoKSB7CisJCXJldHVybiBzaW11bGF0aW9uTWFuYWdlcjsKKwl9CisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuVmlld2VyI3NldElucHV0KGphdmEubGFuZy5PYmplY3QpCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgc2V0SW5wdXQoT2JqZWN0IGlucHV0KSB7CisJCWZpbmFsIE9iamVjdCBvbGRJbnB1dCA9IHNpbXVsYXRpb25NYW5hZ2VyOworCQlzaW11bGF0aW9uTWFuYWdlciA9IChTaW11bGF0aW9uTWFuYWdlcikgaW5wdXQ7CisJCWlucHV0Q2hhbmdlZChpbnB1dCwgb2xkSW5wdXQpOworCX0gLy8gc2V0SW5wdXQKKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5WaWV3ZXIjaW5wdXRDaGFuZ2VkKGphdmEubGFuZy5PYmplY3QsCisJICogICAgICBqYXZhLmxhbmcuT2JqZWN0KQorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIGlucHV0Q2hhbmdlZChPYmplY3QgaW5wdXQsIE9iamVjdCBvbGRJbnB1dCkgeworCQkvLyBJcyB0aGVyZSBhbHJlYWR5IGEgc2ltdWxhdGlvbiBtYW5hZ2VyPworCQlpZiAob2xkSW5wdXQgIT0gbnVsbCkgeworCQkJLy8gWWVzCisJCQkoKFNpbXVsYXRpb25NYW5hZ2VyKSBvbGRJbnB1dCkucmVtb3ZlTGlzdGVuZXIodGhpcyk7CisJCX0gLy8gaWYKKworCQkvLyBSZWdpc3RlciB3aXRoIHRoZSBTaW11bGF0aW9uTWFuYWdlciB0byBsaXN0ZW4gZm9yIGNoYW5nZXMgaW4gdGhlIHNldAorCQkvLyBvZiBhY3RpdmUgU2ltdWxhdGlvbnMuCisJCS8vIEdvdCBpbnB1dD8KKwkJaWYgKGlucHV0ICE9IG51bGwpIHsKKwkJCS8vIFllcworCQkJKChTaW11bGF0aW9uTWFuYWdlcikgaW5wdXQpLmFkZFNpbXVsYXRpb25NYW5hZ2VyTGlzdGVuZXIodGhpcyk7CisJCX0gLy8gaWYKKworCQkvLyBVcGRhdGUgdGhlIHZpZXdlciB3aXRoIHRoZSBjb250ZW50cyBvZiB0aGUgbmV3IGlucHV0IHNvdXJjZQorCQlyZWZyZXNoKCk7CisJfSAvLyBpbnB1dENoYW5nZWQKKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5WaWV3ZXIjc2V0U2VsZWN0aW9uKG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvbiwKKwkgKiAgICAgIGJvb2xlYW4pCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgc2V0U2VsZWN0aW9uKElTZWxlY3Rpb24gc2VsZWN0aW9uLCBAU3VwcHJlc3NXYXJuaW5ncygidW51c2VkIikKKwlib29sZWFuIHJldmVhbCkgeworCQl0aGlzLnNlbGVjdGlvbiA9IHNlbGVjdGlvbjsKKwl9CisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lciNzZWxlY3Rpb25DaGFuZ2VkKG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuU2VsZWN0aW9uQ2hhbmdlZEV2ZW50KQorCSAqLworCXB1YmxpYyB2b2lkIHNlbGVjdGlvbkNoYW5nZWQoZmluYWwgU2VsZWN0aW9uQ2hhbmdlZEV2ZW50IGV2ZW50KSB7CisJCS8vIERpZCB0aGUgZXZlbnQgY29tZSBmcm9tIGEgR2VvZ3JhcGhpY0NvbnRyb2w/CisJCWlmIChldmVudC5nZXRTZWxlY3Rpb25Qcm92aWRlcigpIGluc3RhbmNlb2YgR2VvZ3JhcGhpY0NvbnRyb2wpIHsKKwkJCS8vIFllcworCQkJLy8gSnVzdCBwYXNzIGl0IGFsb25nCisJCQlzZWxlY3Rpb24gPSBldmVudC5nZXRTZWxlY3Rpb24oKTsKKwkJCWZpcmVTZWxlY3Rpb25DaGFuZ2VkKGV2ZW50KTsKKwkJfSAvLyBpZgorCX0gLy8gc2VsZWN0aW9uQ2hhbmdlZAorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmpvYnMuc2ltdWxhdGlvbi5JU2ltdWxhdGlvbk1hbmFnZXJMaXN0ZW5lciNzaW11bGF0aW9uc0NoYW5nZWQob3JnLmVjbGlwc2Uuc3RlbS5qb2JzLnNpbXVsYXRpb24uU2ltdWxhdGlvbk1hbmFnZXJFdmVudCkKKwkgKi8KKwlwdWJsaWMgdm9pZCBzaW11bGF0aW9uc0NoYW5nZWQoZmluYWwgU2ltdWxhdGlvbk1hbmFnZXJFdmVudCBldmVudCkgeworCQlhZGRUb0Rpc3BsYXllZFNpbXVsYXRpb25TZXQoQXJyYXlzLmFzTGlzdChldmVudC5nZXRTaW11bGF0aW9uc0FkZGVkKCkpKTsKKworCQlyZW1vdmVGcm9tRGlzcGxheWVkU2ltdWxhdGlvblNldChBcnJheXMuYXNMaXN0KGV2ZW50CisJCQkJLmdldFNpbXVsYXRpb25zUmVtb3ZlZCgpKSk7CisKKwkJcG9wdWxhdGVWaWV3KCk7CisJfSAvLyBzaW11bGF0aW9uc0NoYW5nZWQKKworCS8qKgorCSAqIEBwYXJhbSBzaW11bGF0aW9ucworCSAqICAgICAgICAgICAgdGhlIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmpvYnMuc2ltdWxhdGlvbi5TaW11bGF0aW9ufXMKKwkgKiAgICAgICAgICAgIHRvIGFkZCB0byB0aGUgc2V0IGJlaW5nIGRpc3BsYXllZC4KKwkgKi8KKwlwcml2YXRlIHZvaWQgYWRkVG9EaXNwbGF5ZWRTaW11bGF0aW9uU2V0KGZpbmFsIExpc3Q8SVNpbXVsYXRpb24+IHNpbXVsYXRpb25zKSB7CisJCS8vIEFueSBzaW11bGF0aW9ucyB0byBhZGQ/CisJCWlmICghc2ltdWxhdGlvbnMuaXNFbXB0eSgpKSB7CisJCQkvLyBZZXMKKwkJCXNpbXVsYXRpb25zVG9EaXNwbGF5LmFkZEFsbChzaW11bGF0aW9ucyk7CisJCX0gLy8gaWYgYW55IHNpbXVsYXRpb25zCisJfSAvLyBhZGRUb0Rpc3BsYXllZFNpbXVsYXRpb25TZXQKKworCS8qKgorCSAqIEBwYXJhbSBzaW11bGF0aW9ucworCSAqICAgICAgICAgICAgdGhlIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmpvYnMuc2ltdWxhdGlvbi5TaW11bGF0aW9ufXMKKwkgKiAgICAgICAgICAgIHRvIHJlbW92ZSBmcm9tIHRoZSBzZXQgYmVpbmcgZGlzcGxheWVkLgorCSAqLworCXByaXZhdGUgdm9pZCByZW1vdmVGcm9tRGlzcGxheWVkU2ltdWxhdGlvblNldCgKKwkJCWZpbmFsIExpc3Q8SVNpbXVsYXRpb24+IHNpbXVsYXRpb25zKSB7CisJCS8vIEFueSBzaW11bGF0aW9ucyB0byByZW1vdmU/CisJCWlmICghc2ltdWxhdGlvbnMuaXNFbXB0eSgpKSB7CisJCQkvLyBZZXMKKwkJCXNpbXVsYXRpb25zVG9EaXNwbGF5LnJlbW92ZUFsbChzaW11bGF0aW9ucyk7CisJCX0gLy8gaWYKKwl9IC8vIHJlbW92ZUZyb21EaXNwbGF5ZWRTaW11bGF0aW9uU2V0CisKKwkvKioKKwkgKiBDcmVhdGUgYW5kIGRpc3Bvc2Ugb2YgTWFwQ29udHJvbHMgYXMgbmVjZXNzYXJ5IHRvIGRpc3BsYXkgdGhlIHNlbGVjdGVkCisJICogU2ltdWxhdGlvbnMuCisJICovCisJcHJpdmF0ZSB2b2lkIHBvcHVsYXRlVmlldygpIHsKKworCQkvLyBBcmUgd2UgZG9uZT8KKwkJaWYgKGNvbXBvc2l0ZS5pc0Rpc3Bvc2VkKCkpIHsKKwkJCS8vIFllcworCQkJcmV0dXJuOworCQl9IC8vIGlmCisKKwkJc2VsZWN0aW9uID0gbnVsbDsKKworCQkvLyBGaW5kIHRoZSBTaW11bGF0aW9ucyB0aGF0IGFyZSBub3QgY3VycmVudGx5IGJlaW5nIGRpc3BsYXllZCBhbmQgcHV0CisJCS8vIHRoZW0gaW50byB0aGUgU2V0IHVuZGlzcGxheWVkU2ltdWxhdGlvbnMuCisJCWZpbmFsIFNldDxJU2ltdWxhdGlvbj4gdW5kaXNwbGF5ZWRTaW11bGF0aW9ucyA9IG5ldyBIYXNoU2V0PElTaW11bGF0aW9uPigpOworCQlmb3IgKGZpbmFsIElTaW11bGF0aW9uIHNpbXVsYXRpb24gOiBzaW11bGF0aW9uc1RvRGlzcGxheSkgeworCQkJLy8gSXMgdGhpcyBvbmUgYXNzb2NpYXRlZCB3aXRoIGEgR2VvZ3JhcGhpY0NvbnRyb2wgYWxyZWFkeT8KKwkJCWlmICghaXNEaXNwbGF5ZWQoc2ltdWxhdGlvbikpIHsKKwkJCQkvLyBObworCQkJCXVuZGlzcGxheWVkU2ltdWxhdGlvbnMuYWRkKHNpbXVsYXRpb24pOworCQkJfSAvLyBpZiBub3QgZGlzcGxheWVkCisJCX0gLy8gZm9yIGVhY2ggSVNpbXVsYXRpb24KKworCQkvLyBHbyB0aHJvdWdoIHRoZSBjdXJyZW50IHNldCBvZiBDb250cm9scyBsb29raW5nIGZvciBvbmVzIHRoYXQKKwkJLy8gd2UgY2FuIHJlYXNzaWduCisJCWZpbmFsIENvbnRyb2xbXSBjb250cm9scyA9IGNvbXBvc2l0ZS5nZXRDaGlsZHJlbigpOworCQlmb3IgKGZpbmFsIENvbnRyb2wgZWxlbWVudCA6IGNvbnRyb2xzKSB7CisJCQkvLyBEb2VzIHRoaXMgR2VvZ3JhcGhpY0NvbnRyb2wgaGF2ZSBhIHNpbXVsYXRpb24gdGhhdCBpcyBzdGlsbCB2YWxpZAorCQkJLy8gdG8gZGlzcGxheT8KKwkJCWZpbmFsIEdlb2dyYXBoaWNDb250cm9sIGdlb0NvbnRyb2wgPSAoR2VvZ3JhcGhpY0NvbnRyb2wpIGVsZW1lbnQ7CisJCQlpZiAoIXNpbXVsYXRpb25zVG9EaXNwbGF5LmNvbnRhaW5zKGdlb0NvbnRyb2wuZ2V0U2ltdWxhdGlvbigpKQorCQkJCQkmJiAhdW5kaXNwbGF5ZWRTaW11bGF0aW9ucy5pc0VtcHR5KCkpIHsKKwkJCQkvLyBObworCQkJCS8vIFJlYXNzaWduIGl0IHRvIG9uZSB0aGF0IGlzIHZhbGlkCisJCQkJZmluYWwgSVNpbXVsYXRpb24gc2ltdWxhdGlvbiA9IChJU2ltdWxhdGlvbikgdW5kaXNwbGF5ZWRTaW11bGF0aW9ucworCQkJCQkJLnRvQXJyYXkoKVswXTsKKwkJCQlnZW9Db250cm9sLnNldFNpbXVsYXRpb24oc2ltdWxhdGlvbik7CisJCQkJLy8gTm90aWZ5IFZpZXdQYXJ0IHRoYXQgYSBuZXcgY29udGV4dCBtZW51IGhhcyBiZWVuIGdlbmVyYXRlZAorCQkJCW5vdGlmeUNvbnRleHRNZW51VXBkYXRlTGlzdGVuZXJzKGdlb0NvbnRyb2wpOworCQkJCXVuZGlzcGxheWVkU2ltdWxhdGlvbnMucmVtb3ZlKHNpbXVsYXRpb24pOworCQkJfSAvLyBpZgorCQl9IC8vIGZvciBlYWNoIE1hcENvbnRyb2wKKworCQkvLyBBdCB0aGlzIHBvaW50IHdlIHN0aWxsIGNvdWxkIGhhdmUgbWFwIGNvbnRyb2xzIHdpdGggaW52YWxpZAorCQkvLyBTaW11bGF0aW9ucywgbGV0J3MgZ2V0IHJpZCBvZiB0aGVtCisJCWZvciAoZmluYWwgQ29udHJvbCBlbGVtZW50IDogY29udHJvbHMpIHsKKwkJCWZpbmFsIEdlb2dyYXBoaWNDb250cm9sIGdlb0NvbnRyb2wgPSAoR2VvZ3JhcGhpY0NvbnRyb2wpIGVsZW1lbnQ7CisJCQkvLyBEb2VzIHRoaXMgTWFwQ29udHJvbCBoYXZlIGEgc2ltdWxhdGlvbiB0aGF0IGlzIHN0aWxsIHZhbGlkIHRvCisJCQkvLyBkaXNwbGF5PworCQkJSVNpbXVsYXRpb24gc2ltdWxhdGlvbiA9IGdlb0NvbnRyb2wuZ2V0U2ltdWxhdGlvbigpOworCQkJaWYgKHNpbXVsYXRpb24gIT0gbnVsbAorCQkJCQkmJiAhc2ltdWxhdGlvbnNUb0Rpc3BsYXkuY29udGFpbnMoc2ltdWxhdGlvbikpIHsKKwkJCQkvLyBObworCQkJCWdlb0NvbnRyb2wucmVtb3ZlU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyKHRoaXMpOwkJCQkJCQkJCisJCQkJZ2VvQ29udHJvbC5kaXNwb3NlKCk7CisJCQl9CisJCX0vLyBmb3IgZWFjaCBNYXBDb250cm9sCisKKwkJLy8gSWYgdGhlcmUncmUgYW55IFNpbXVsYXRpb25zIG5vdCBhc3NpZ25lZCB0byBhIEdlb2dyYXBoaWNDb250cm9sLAorCQkvLyBsZXQncyB0YWtlIGNhcmUgb2YgdGhhdCBub3cuCisJCWZvciAoZmluYWwgSVNpbXVsYXRpb24gc2ltdWxhdGlvbjIgOiB1bmRpc3BsYXllZFNpbXVsYXRpb25zKSB7CisJCQlmaW5hbCBHZW9ncmFwaGljQ29udHJvbCBnZW9Db250cm9sID0gZ2NmLmNyZWF0ZShjb21wb3NpdGUpOworCQkJLy8gTm90aWZ5IFZpZXdQYXJ0IHRoYXQgYSBuZXcgY29udGV4dCBtZW51IGhhcyBiZWVuIGdlbmVyYXRlZAorCQkJbm90aWZ5Q29udGV4dE1lbnVVcGRhdGVMaXN0ZW5lcnMoZ2VvQ29udHJvbCk7CisJCQlnZW9Db250cm9sLmFkZFNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcih0aGlzKTsKKwkJCWdlb0NvbnRyb2wuc2V0U2ltdWxhdGlvbihzaW11bGF0aW9uMik7CisJCX0gLy8gZm9yIGVhY2ggSVNpbXVsYXRpb24KKworCQkvLyBJZiB0aGVyZSBhcmUgbm8gc2ltdWxhdGlvbnMgdG8gZGlzcGxheSwgd2UganVzdCBwdXQgdXAgYSAiYmxhbmsiCisJCS8vIEdlb2dyYXBoaWNDb250cm9sCisJCWlmIChjb21wb3NpdGUuZ2V0Q2hpbGRyZW4oKS5sZW5ndGggPT0gMCkgeworCQkJLy8gWWVzCisJCQlmaW5hbCBHZW9ncmFwaGljQ29udHJvbCBnZW9Db250cm9sID0gZ2NmLmNyZWF0ZShjb21wb3NpdGUpOworCQkJZ2VvQ29udHJvbC5hZGRTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIodGhpcyk7CisJCX0gLy8gaWYKKwkJY29tcG9zaXRlLmxheW91dCh0cnVlLCB0cnVlKTsKKwkJY29tcG9zaXRlLnJlZHJhdygpOworCX0gLy8gcG9wdWxhdGVWaWV3CisKKwkvKioKKwkgKiBAcGFyYW0gc2ltdWxhdGlvbgorCSAqIEByZXR1cm4KKwkgKi8KKwlwcml2YXRlIGJvb2xlYW4gaXNEaXNwbGF5ZWQoZmluYWwgSVNpbXVsYXRpb24gc2ltdWxhdGlvbikgeworCQlib29sZWFuIHJldFZhbHVlID0gZmFsc2U7CisJCWZpbmFsIENvbnRyb2xbXSBmb28gPSBjb21wb3NpdGUuZ2V0Q2hpbGRyZW4oKTsKKwkJZm9yIChmaW5hbCBDb250cm9sIGVsZW1lbnQgOiBmb28pIHsKKwkJCWZpbmFsIEdlb2dyYXBoaWNDb250cm9sIGdlb0NvbnRyb2wgPSAoR2VvZ3JhcGhpY0NvbnRyb2wpIGVsZW1lbnQ7CisJCQlmaW5hbCBJU2ltdWxhdGlvbiB0ZXN0U2ltdWxhdGlvbiA9IGdlb0NvbnRyb2wuZ2V0U2ltdWxhdGlvbigpOworCQkJaWYgKHRlc3RTaW11bGF0aW9uICE9IG51bGwgJiYgdGVzdFNpbXVsYXRpb24uZXF1YWxzKHNpbXVsYXRpb24pKSB7CisJCQkJcmV0VmFsdWUgPSB0cnVlOworCQkJCWJyZWFrOworCQkJfSAvLyBpZgorCQl9IC8vIGZvciBlYWNoIE1hcENvbnRyb2wKKwkJcmV0dXJuIHJldFZhbHVlOworCX0gLy8gaXNEaXNwbGF5ZWQKKworCS8qKgorCSAqIFRoZSBtZXRob2QgYWRkcyB0aGUgc3BlY2lmaWVkIGxpc3RlbmVyIHRvIHRoZSBsaXN0IG9mIGxpc3RlbmVycworCSAqIAorCSAqIEBwYXJhbSBuZXdMaXN0ZW5lcgorCSAqICAgICAgICAgICAgQSBsaXN0ZW5lciB0byBiZSBhZGRlZAorCSAqLworCXB1YmxpYyB2b2lkIGFkZENvbnRleHRNZW51VXBkYXRlTGlzdGVuZXIoCisJCQlJQ29udGV4dE1lbnVVcGRhdGVzTGlzdGVuZXIgbmV3TGlzdGVuZXIpIHsKKwkJaWYgKCFjb250ZXh0TWVudVVwZGF0ZUxpc3RlbmVycy5jb250YWlucyhuZXdMaXN0ZW5lcikpIHsKKwkJCWNvbnRleHRNZW51VXBkYXRlTGlzdGVuZXJzLmFkZChuZXdMaXN0ZW5lcik7CisJCX0gLy8gaWYKKwl9IC8vIGFkZENvbnRleHRNZW51VXBkYXRlTGlzdGVuZXIKKwkKKwkvKioKKwkgKiBUaGUgbWV0aG9kIHJlbW92ZXMgdGhlIHNwZWNpZmllZCBsaXN0ZW5lciB0byB0aGUgbGlzdCBvZiBsaXN0ZW5lcnMKKwkgKiAKKwkgKiBAcGFyYW0gbmV3TGlzdGVuZXIKKwkgKiAgICAgICAgICAgIEEgbGlzdGVuZXIgdG8gYmUgYWRkZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCByZW1vdmVDb250ZXh0TWVudVVwZGF0ZUxpc3RlbmVyKAorCQkJSUNvbnRleHRNZW51VXBkYXRlc0xpc3RlbmVyIG5ld0xpc3RlbmVyKSB7CisJCWNvbnRleHRNZW51VXBkYXRlTGlzdGVuZXJzLnJlbW92ZShuZXdMaXN0ZW5lcik7CisJfSAvLyBhZGRDb250ZXh0TWVudVVwZGF0ZUxpc3RlbmVyCisKKwkvKioKKwkgKiBUaGUgbWV0aG9kIHdpbGwgc2VuZCBub3RpZmljYXRpb24gdG8gYWxsIGxpc3RlbmVycyBhYm91dCBuZXcgbWVudSB0aGF0CisJICogaGFzIGJlZW4gY3JlYXRlZC4KKwkgKiAKKwkgKiBAcGFyYW0gZ2VvQ29udHJvbAorCSAqICAgICAgICAgICAgVGhlIDxjb2RlPkdlb2dyYXBoaWNDb250cm9sPC9jb2RlPiB0aGF0IGhhcyB0aGUgbmV3CisJICogICAgICAgICAgICA8Y29kZT5NZW51TWFuYWdlcjwvY29kZT4gYXMgYSBmaWVsZC4KKwkgKi8KKwlwcml2YXRlIHZvaWQgbm90aWZ5Q29udGV4dE1lbnVVcGRhdGVMaXN0ZW5lcnMoR2VvZ3JhcGhpY0NvbnRyb2wgZ2VvQ29udHJvbCkgeworCQlHZW9ncmFwaGljUmVuZGVyZXIgZ2VvUmVuZGVyZXIgPSBnZW9Db250cm9sLmdldEdlb2dyYXBoaWNSZW5kZXJlcigpOworCQlpZiAoZ2VvUmVuZGVyZXIgaW5zdGFuY2VvZiBNYXBSZW5kZXJlcikgeworCQkJTWFwUmVuZGVyZXIgbWFwUmVuZGVyZXIgPSAoTWFwUmVuZGVyZXIpIGdlb1JlbmRlcmVyOworCQkJbm90aWZ5Q29udGV4dE1lbnVVcGRhdGVMaXN0ZW5lcnMobWFwUmVuZGVyZXIuZ2V0TWVudU1hbmFnZXIoKSwKKwkJCQkJbWFwUmVuZGVyZXIpOworCQl9IC8vIGlmCisJfSAvLyBub3RpZnlDb250ZXh0TWVudVVwZGF0ZUxpc3RlbmVycworCisJLyoqCisJICogVGhlIG1ldGhvZCB3aWxsIHNlbmQgbm90aWZpY2F0aW9uIHRvIGFsbCBsaXN0ZW5lcnMgYWJvdXQgbmV3IG1lbnUgdGhhdAorCSAqIGhhcyBiZWVuIGNyZWF0ZWQuCisJICogCisJICogQHBhcmFtIG1lbnVNYW5hZ2VyCisJICogICAgICAgICAgICBUaGUgbmV3bHkgYWRkZWQgPGNvZGU+TWVudU1hbmFnZXI8L2NvZGU+CisJICogQHBhcmFtIHNlbGVjdGlvblByb3ZpZGVyCisJICogICAgICAgICAgICBBIDxjb2RlPklTZWxlY3Rpb25Qcm92aWRlcjwvY29kZT4gZm9yIHRoZSBtZW51CisJICovCisJcHJpdmF0ZSB2b2lkIG5vdGlmeUNvbnRleHRNZW51VXBkYXRlTGlzdGVuZXJzKE1lbnVNYW5hZ2VyIG1lbnVNYW5hZ2VyLAorCQkJSVNlbGVjdGlvblByb3ZpZGVyIHNlbGVjdGlvblByb3ZpZGVyKSB7CisJCWZvciAoZmluYWwgSUNvbnRleHRNZW51VXBkYXRlc0xpc3RlbmVyIGxpc3RlbmVyIDogY29udGV4dE1lbnVVcGRhdGVMaXN0ZW5lcnMpIHsKKwkJCWxpc3RlbmVyLm9uQ29udGV4dE1lbnVVcGRhdGUobWVudU1hbmFnZXIsIHNlbGVjdGlvblByb3ZpZGVyKTsKKwkJfSAvLyBmb3IgZWFjaCBJQ29udGV4dE1lbnVVcGRhdGVzTGlzdGVuZXIKKwl9IC8vIG5vdGlmeUNvbnRleHRNZW51VXBkYXRlTGlzdGVuZXJzCisJCit9IC8vIEdlb2dyYXBoaWNWaWV3ZXIKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS92aWV3cy9nZW9ncmFwaGljL21hcC9HZW9ncmFwaGljU2VsZWN0aW9uRWxlbWVudHMuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS92aWV3cy9nZW9ncmFwaGljL21hcC9HZW9ncmFwaGljU2VsZWN0aW9uRWxlbWVudHMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNGRkZGMwCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3ZpZXdzL2dlb2dyYXBoaWMvbWFwL0dlb2dyYXBoaWNTZWxlY3Rpb25FbGVtZW50cy5qYXZhCkBAIC0wLDAgKzEsNzUgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS51aS52aWV3cy5nZW9ncmFwaGljLm1hcDsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKgorICogU3BlY2lmeSB0aGUgaW5mb3JtYXRpb24gdGhhdCBpcyBwYXNzZWQgaW4gdGhlIFN0cnVjdHVyZWRTZWxlY3Rpb24gZXZlbnQgdGhhdAorICogaXMgY3JlYXRlZCBieSBNYXBWaWV3IG9uIGEgbW91c2UgY2xpY2sgb24gdGhlIG1hcC4KKyAqIAorICogPHByZT4KKyAqIFRoZSBpbnN0YW5jZSBvZiB0aGlzIGNsYXNzIGlzIHBhc3NlZCBhcyB0aGUgMm5kIGVsZW1lbnQgaW4gdGhlCisgKiBTdHJ1Y3R1cmVkU2VsZWN0aW9uIGluc3RhbmNlLiAKKyAqIAorICogVGhlIGluZm9ybWF0aW9uIHBhc3NlZCBpcyB0aGUgZm9sbG93aW5nOiAKKyAqIC0gSWRlbnRpZmlhYmxlIHRoYXQgZGVzY3JpYmVzIHRoZSBtYXAgcG9seWdvbiAoaW4gdGhlIDFzdCBlbGVtZW50KQorICogLSBHZW9ncmFwaGljU2VsZWN0aW9uRWxlbWVudCAoaW4gdGhlIDJuZCBlbGVtZW50KQorICogICAtIFBvaW50IChsb25naXR1ZGUvbGF0aXR1ZGUpIG9mIHRoZSBhY3R1YWwgY2xpY2sgCisgKiAgIC0gTWFwIG9mIHJlbGF0aXZlIHZhbHVlcyBhdCB0aGUgaW5zdGFuY2Ugb2YgdGhlIGNsaWNrLgorICogCisgKiBOb3RlOiBPbmUgbWlnaHQgdGhpbmsgdGhhdCB0aGUgU3RydWN0dXJlZFNlbGVjdGlvbiBzaG91bGQgaGF2ZSBiZWVuIHN1YmNsYXNzZWQKKyAqIGJ1dCBpdCBpcyBzcGVjaWZpY2x5IGZvcmJpZGRlbi4KKyAqIAorICogPC9wcmU+CisgKi8KK3B1YmxpYyBjbGFzcyBHZW9ncmFwaGljU2VsZWN0aW9uRWxlbWVudHMgeworCisJLyoqCisJICogTG9uZ2l0dWRlIG9mIHNlbGVjdGlvbiBwb2ludAorCSAqLworCXByaXZhdGUgZG91YmxlIGxvbmdpdHVkZSA9IDAuMDsKKwkvKioKKwkgKiBsYXRpdHVkZSBvZiBzZWxlY3Rpb24gcG9pbnQKKwkgKi8KKwlwcml2YXRlIGRvdWJsZSBsYXRpdHVkZSA9IDAuMDsKKworCS8qKgorCSAqIGRlZmF1bHQgY29uc3RydWN0b3IKKwkgKi8KKwlwdWJsaWMgR2VvZ3JhcGhpY1NlbGVjdGlvbkVsZW1lbnRzKCkgeworCQkvLyBkZWZhdWx0IGNvbnN0cnVjdG9yCisJfQorCisJLyoqCisJICogQHJldHVybiB0aGUgcG9pbnQKKwkgKi8KKwlwdWJsaWMgZG91YmxlIGdldExvbmdpdHVkZSgpIHsKKwkJcmV0dXJuIGxvbmdpdHVkZTsKKwl9CisKKwkvKioKKwkgKiBAcmV0dXJuIHRoZSBwb2ludAorCSAqLworCXB1YmxpYyBkb3VibGUgZ2V0TGF0aXR1ZGUoKSB7CisJCXJldHVybiBsYXRpdHVkZTsKKwl9CisKKwkvKioKKwkgKiBzZXQgdGhlIGxvbmdpdHVkZSBhbmQgbGF0aXR1ZGUgb2YgdGhlIHNlbGVjdGVkIHBvaW50CisJICogCisJICogQHBhcmFtIGxvbmdpdHVkZQorCSAqIEBwYXJhbSBsYXRpdHVkZQorCSAqLworCXB1YmxpYyB2b2lkIHNldFBvaW50KGZpbmFsIGRvdWJsZSBsb25naXR1ZGUsIGZpbmFsIGRvdWJsZSBsYXRpdHVkZSkgeworCQl0aGlzLmxvbmdpdHVkZSA9IGxvbmdpdHVkZTsKKwkJdGhpcy5sYXRpdHVkZSA9IGxhdGl0dWRlOworCX0KK30KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS92aWV3cy9nZW9ncmFwaGljL21hcC9HcmFwaGljczJEUmVuZGVyZXIuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS92aWV3cy9nZW9ncmFwaGljL21hcC9HcmFwaGljczJEUmVuZGVyZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNWVkMThmCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3ZpZXdzL2dlb2dyYXBoaWMvbWFwL0dyYXBoaWNzMkRSZW5kZXJlci5qYXZhCkBAIC0wLDAgKzEsMTU5IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0udWkudmlld3MuZ2VvZ3JhcGhpYy5tYXA7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIAorICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiAKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdCAKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sIAorICogCisgKiBDb250cmlidXRvcnM6IAorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiAKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgamF2YS5hd3QuR3JhcGhpY3MyRDsKK2ltcG9ydCBqYXZhLmF3dC5pbWFnZS5CdWZmZXJlZEltYWdlOworCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmdyYXBoaWNzLkdDOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ncmFwaGljcy5JbWFnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZ3JhcGhpY3MuSW1hZ2VEYXRhOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ncmFwaGljcy5QYWxldHRlRGF0YTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5EaXNwbGF5OworCisvKioKKyAqIEhlbHBlciBjbGFzcyBhbGxvd2luZyB0aGUgdXNlIG9mIEphdmEgMkQgb24gU1dUIG9yIERyYXcyRCBncmFwaGljYWwgY29udGV4dC4KKyAqIFNlZToKKyAqIGh0dHA6Ly93d3ctMTI4LmlibS5jb20vZGV2ZWxvcGVyd29ya3MvamF2YS9saWJyYXJ5L2otMmRzd3QvP2NhPWRnci1qdzE3ai0yZHN3dAorICogCisgKiBAYXV0aG9yIFlhbm5pY2sgU2FpbGxldCAvIElCTQorICovCisKK3B1YmxpYyBjbGFzcyBHcmFwaGljczJEUmVuZGVyZXIgeworCXByaXZhdGUgc3RhdGljIGZpbmFsIFBhbGV0dGVEYXRhIFBBTEVUVEVfREFUQSA9IG5ldyBQYWxldHRlRGF0YSgweEZGMDAwMCwKKwkJCTB4RkYwMCwgMHhGRik7CisKKwlwcml2YXRlIEJ1ZmZlcmVkSW1hZ2UgYXd0SW1hZ2U7CisKKwlwcml2YXRlIEltYWdlIHN3dEltYWdlOworCisJcHJpdmF0ZSBJbWFnZURhdGEgc3d0SW1hZ2VEYXRhOworCisJcHJpdmF0ZSBpbnRbXSBhd3RQaXhlbHM7CisKKwkvKiogUkdCIHZhbHVlIHRvIHVzZSBhcyB0cmFuc3BhcmVudCBjb2xvciAqLworCXByaXZhdGUgc3RhdGljIGZpbmFsIGludCBUUkFOU1BBUkVOVF9DT0xPUiA9IDB4MTIzNDU2OworCisJLyoqCisJICogUHJlcGFyZSB0byByZW5kZXIgb24gYSBTV1QgZ3JhcGhpY3MgY29udGV4dC4KKwkgKiAKKwkgKiBAcGFyYW0gZ2MKKwkgKi8KKwlwdWJsaWMgdm9pZCBwcmVwYXJlUmVuZGVyaW5nKEdDIGdjKSB7CisJCW9yZy5lY2xpcHNlLnN3dC5ncmFwaGljcy5SZWN0YW5nbGUgY2xpcCA9IGdjLmdldENsaXBwaW5nKCk7CisJCXByZXBhcmVSZW5kZXJpbmcoY2xpcC54LCBjbGlwLnksIGNsaXAud2lkdGgsIGNsaXAuaGVpZ2h0KTsKKwl9CisKKwkvKioKKwkgKiBQcmVwYXJlIHRoZSBBV1Qgb2ZmIHNjcmVlbiBpbWFnZSBmb3IgdGhlIHJlbmRlcmluZyBvZiB0aGUgcmVjdGFuZ3VsYXIKKwkgKiByZWdpb24gZ2l2ZW4gYXMgcGFyYW1ldGVyLgorCSAqIAorCSAqIEBwYXJhbSBjbGlwWAorCSAqIEBwYXJhbSBjbGlwWQorCSAqIEBwYXJhbSBjbGlwVworCSAqIEBwYXJhbSBjbGlwSAorCSAqLworCXB1YmxpYyB2b2lkIHByZXBhcmVSZW5kZXJpbmcoaW50IGNsaXBYLCBpbnQgY2xpcFksIGludCBjbGlwVywgaW50IGNsaXBIKSB7CisJCS8vIGNoZWNrIHRoYXQgdGhlIG9mZiBzY3JlZW4gaW1hZ2VzIGFyZSBpbml0aWFsaXplZCBhbmQgbGFyZ2UgZW5vdWdoCisJCWNoZWNrT2ZmU2NyZWVuSW1hZ2VzKGNsaXBXLCBjbGlwSCk7CisJCS8vIGZpbGwgdGhlIHJlZ2lvbiBpbiB0aGUgQVdUIGltYWdlIHdpdGggdGhlIHRyYW5zcGFyZW50IGNvbG9yCisJCWphdmEuYXd0LkdyYXBoaWNzIGF3dEdyYXBoaWNzID0gYXd0SW1hZ2UuZ2V0R3JhcGhpY3MoKTsKKwkJYXd0R3JhcGhpY3Muc2V0Q29sb3IobmV3IGphdmEuYXd0LkNvbG9yKFRSQU5TUEFSRU5UX0NPTE9SKSk7CisJCWF3dEdyYXBoaWNzLmZpbGxSZWN0KGNsaXBYLCBjbGlwWSwgY2xpcFcsIGNsaXBIKTsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBHcmFwaGljczJEIGNvbnRleHQgdG8gdXNlLgorCSAqIAorCSAqIEByZXR1cm4gR3JhcGhpY3MyRAorCSAqLworCXB1YmxpYyBHcmFwaGljczJEIGdldEdyYXBoaWNzMkQoKSB7CisJCWlmIChhd3RJbWFnZSA9PSBudWxsKQorCQkJcmV0dXJuIG51bGw7CisJCXJldHVybiAoR3JhcGhpY3MyRCkgYXd0SW1hZ2UuZ2V0R3JhcGhpY3MoKTsKKwl9CisKKwkvKioKKwkgKiBDb21wbGV0ZSB0aGUgcmVuZGVyaW5nIGJ5IGZsdXNoaW5nIHRoZSAyRCByZW5kZXJlciBvbiBhIFNXVCBncmFwaGljYWwKKwkgKiBjb250ZXh0LgorCSAqIAorCSAqIEBwYXJhbSBnYworCSAqLworCXB1YmxpYyB2b2lkIHJlbmRlcihHQyBnYykgeworCQlpZiAoYXd0SW1hZ2UgPT0gbnVsbCkKKwkJCXJldHVybjsKKworCQlvcmcuZWNsaXBzZS5zd3QuZ3JhcGhpY3MuUmVjdGFuZ2xlIGNsaXAgPSBnYy5nZXRDbGlwcGluZygpOworCQl0cmFuc2ZlclBpeGVscyhjbGlwLngsIGNsaXAueSwgY2xpcC53aWR0aCwgY2xpcC5oZWlnaHQpOworCQlnYy5kcmF3SW1hZ2Uoc3d0SW1hZ2UsIGNsaXAueCwgY2xpcC55LCBjbGlwLndpZHRoLCBjbGlwLmhlaWdodCwgY2xpcC54LAorCQkJCWNsaXAueSwgY2xpcC53aWR0aCwgY2xpcC5oZWlnaHQpOworCX0KKworCS8qKgorCSAqIFRyYW5zZmVyIGEgcmVjdGFuZ3VsYXIgcmVnaW9uIGZyb20gdGhlIEFXVCBpbWFnZSB0byB0aGUgU1dUIGltYWdlLgorCSAqLworCXByaXZhdGUgdm9pZCB0cmFuc2ZlclBpeGVscyhpbnQgY2xpcFgsIGludCBjbGlwWSwgaW50IGNsaXBXLCBpbnQgY2xpcEgpIHsKKwkJaW50IHN0ZXAgPSBzd3RJbWFnZURhdGEuZGVwdGggLyA4OworCQlieXRlW10gZGF0YSA9IHN3dEltYWdlRGF0YS5kYXRhOworCQlhd3RJbWFnZS5nZXRSR0IoY2xpcFgsIGNsaXBZLCBjbGlwVywgY2xpcEgsIGF3dFBpeGVscywgMCwgY2xpcFcpOworCQlmb3IgKGludCBpID0gMDsgaSA8IGNsaXBIOyBpKyspIHsKKwkJCWludCBpZHggPSAoY2xpcFkgKyBpKSAqIHN3dEltYWdlRGF0YS5ieXRlc1BlckxpbmUgKyBjbGlwWCAqIHN0ZXA7CisJCQlmb3IgKGludCBqID0gMDsgaiA8IGNsaXBXOyBqKyspIHsKKwkJCQlpbnQgcmdiID0gYXd0UGl4ZWxzW2ogKyBpICogY2xpcFddOworCQkJCWZvciAoaW50IGsgPSBzd3RJbWFnZURhdGEuZGVwdGggLSA4OyBrID49IDA7IGsgLT0gOCkgeworCQkJCQlkYXRhW2lkeCsrXSA9IChieXRlKSAoKHJnYiA+PiBrKSAmIDB4RkYpOworCQkJCX0KKwkJCX0KKwkJfQorCQlpZiAoc3d0SW1hZ2UgIT0gbnVsbCkKKwkJCXN3dEltYWdlLmRpc3Bvc2UoKTsKKwkJc3d0SW1hZ2UgPSBuZXcgSW1hZ2UoRGlzcGxheS5nZXREZWZhdWx0KCksIHN3dEltYWdlRGF0YSk7CisJfQorCisJLyoqCisJICogRGlzcG9zZSB0aGUgcmVzb3VyY2VzIGF0dGFjaGVkIHRvIHRoaXMgMkQgcmVuZGVyZXIuCisJICovCisJcHVibGljIHZvaWQgZGlzcG9zZSgpIHsKKwkJaWYgKGF3dEltYWdlICE9IG51bGwpCisJCQlhd3RJbWFnZS5mbHVzaCgpOworCQlpZiAoc3d0SW1hZ2UgIT0gbnVsbCkKKwkJCXN3dEltYWdlLmRpc3Bvc2UoKTsKKwkJYXd0SW1hZ2UgPSBudWxsOworCQlzd3RJbWFnZURhdGEgPSBudWxsOworCQlhd3RQaXhlbHMgPSBudWxsOworCX0KKworCS8qKgorCSAqIEVuc3VyZSB0aGF0IHRoZSBvZmYgc2NyZWVuIGltYWdlcyBhcmUgaW5pdGlhbGl6ZWQgYW5kIGFyZSBhdCBsZWFzdCBhcworCSAqIGxhcmdlIGFzIHRoZSBzaXplIGdpdmVuIGFzIHBhcmFtZXRlci4KKwkgKi8KKwlwcml2YXRlIHZvaWQgY2hlY2tPZmZTY3JlZW5JbWFnZXMoaW50IHdpZHRoLCBpbnQgaGVpZ2h0KSB7CisJCWludCBjdXJyZW50SW1hZ2VXaWR0aCA9IDA7CisJCWludCBjdXJyZW50SW1hZ2VIZWlnaHQgPSAwOworCQlpZiAoc3d0SW1hZ2UgIT0gbnVsbCkgeworCQkJY3VycmVudEltYWdlV2lkdGggPSBzd3RJbWFnZS5nZXRJbWFnZURhdGEoKS53aWR0aDsKKwkJCWN1cnJlbnRJbWFnZUhlaWdodCA9IHN3dEltYWdlLmdldEltYWdlRGF0YSgpLmhlaWdodDsKKwkJfQorCisJCS8vIGlmIHRoZSBvZmYgc2NyZWVuIGltYWdlcyBhcmUgdG9vIHNtYWxsLCByZWNyZWF0ZSB0aGVtCisJCWlmICh3aWR0aCA+IGN1cnJlbnRJbWFnZVdpZHRoIHx8IGhlaWdodCA+IGN1cnJlbnRJbWFnZUhlaWdodCkgeworCQkJZGlzcG9zZSgpOworCQkJd2lkdGggPSBNYXRoLm1heCh3aWR0aCwgY3VycmVudEltYWdlV2lkdGgpOworCQkJaGVpZ2h0ID0gTWF0aC5tYXgoaGVpZ2h0LCBjdXJyZW50SW1hZ2VIZWlnaHQpOworCQkJYXd0SW1hZ2UgPSBuZXcgQnVmZmVyZWRJbWFnZSh3aWR0aCwgaGVpZ2h0LAorCQkJCQlCdWZmZXJlZEltYWdlLlRZUEVfSU5UX0FSR0IpOworCQkJc3d0SW1hZ2VEYXRhID0gbmV3IEltYWdlRGF0YSh3aWR0aCwgaGVpZ2h0LCAyNCwgUEFMRVRURV9EQVRBKTsKKwkJCXN3dEltYWdlRGF0YS50cmFuc3BhcmVudFBpeGVsID0gVFJBTlNQQVJFTlRfQ09MT1I7CisJCQlhd3RQaXhlbHMgPSBuZXcgaW50W3dpZHRoICogaGVpZ2h0XTsKKwkJfQorCX0KK30KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS92aWV3cy9nZW9ncmFwaGljL21hcC9NYXBDYW52YXMuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS92aWV3cy9nZW9ncmFwaGljL21hcC9NYXBDYW52YXMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYmRmNmMwCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3ZpZXdzL2dlb2dyYXBoaWMvbWFwL01hcENhbnZhcy5qYXZhCkBAIC0wLDAgKzEsNzk3IEBACisvLyBNYXBDYW52YXMuamF2YQorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnVpLnZpZXdzLmdlb2dyYXBoaWMubWFwOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGphdmEuaW8uRmlsZTsKK2ltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOworaW1wb3J0IGphdmEudXRpbC5Db25jdXJyZW50TW9kaWZpY2F0aW9uRXhjZXB0aW9uOworaW1wb3J0IGphdmEudXRpbC5MaXN0OworaW1wb3J0IGphdmEudXRpbC5jb25jdXJyZW50LkNvcHlPbldyaXRlQXJyYXlMaXN0OworCitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb25Qcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTdHJ1Y3R1cmVkU2VsZWN0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuU2VsZWN0aW9uQ2hhbmdlZEV2ZW50OworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuU3RydWN0dXJlZFNlbGVjdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS53aW5kb3cuRGVmYXVsdFRvb2xUaXA7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5EdWJsaW5Db3JlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uSWRlbnRpZmlhYmxlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5FZGdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5Ob2RlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5Ob2RlTGFiZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLlNURU1UaW1lOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zZXF1ZW5jZXIuU2VxdWVuY2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkuR2VvZ3JhcGhpY05hbWVzOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLkFyZWFMYWJlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5Qb3B1bGF0aW9uTGFiZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5ub2Rlcy5SZWdpb247CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5qb2JzLnNpbXVsYXRpb24uSVNpbXVsYXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLlBvcHVsYXRpb25Nb2RlbExhYmVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udWkuYWRhcHRlcnMuY29sb3IuQ29sb3JQcm92aWRlckFkYXB0ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS51aS5hZGFwdGVycy5jb2xvci5Db2xvclNjYWxlQ29tcG9zaXRlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udWkuYWRhcHRlcnMuY29sb3IuU3RhbmRhcmRDb2xvclByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5TV1Q7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5EaXNwb3NlRXZlbnQ7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5EaXNwb3NlTGlzdGVuZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5LZXlBZGFwdGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuS2V5RXZlbnQ7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5Nb3VzZUFkYXB0ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5Nb3VzZUV2ZW50OworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuTW91c2VNb3ZlTGlzdGVuZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5Nb3VzZVRyYWNrQWRhcHRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLk1vdXNlV2hlZWxMaXN0ZW5lcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLlBhaW50RXZlbnQ7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5QYWludExpc3RlbmVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ncmFwaGljcy5Db2xvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZ3JhcGhpY3MuR0M7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmdyYXBoaWNzLkltYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ncmFwaGljcy5JbWFnZURhdGE7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmdyYXBoaWNzLkltYWdlTG9hZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ncmFwaGljcy5Qb2ludDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZ3JhcGhpY3MuUmVjdGFuZ2xlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNhbnZhczsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29udHJvbDsKKworLyoqCisgKiBUaGlzIGNsYXNzIGlzIGEgU1dUIFdpZGdldCB0aGF0IGRpc3BsYXlzIGEgIm1hcCIgdmlldyBvZiB0aGUgZ2VvZ3JhcGhpYworICogZmVhdHVyZXMgb2YgYSB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5qb2JzLnNpbXVsYXRpb24uU2ltdWxhdGlvbn0uCisgKi8KK3B1YmxpYyBjbGFzcyBNYXBDYW52YXMgCisJZXh0ZW5kcyBDYW52YXMgCisJaW1wbGVtZW50cyBJU2VsZWN0aW9uUHJvdmlkZXIsIFBhaW50TGlzdGVuZXIsIE1vdXNlV2hlZWxMaXN0ZW5lciwgTW91c2VNb3ZlTGlzdGVuZXIsIERpc3Bvc2VMaXN0ZW5lciAKK3sKKworCXByaXZhdGUgc3RhdGljIGZpbmFsIGludCBUT09MVElQX0hJREVfREVMQVkgPSAzMDAwMDsgLy8gbWlsbGlzZWNvbmRzCisJCisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgZG91YmxlIElOSVRJQUxfWk9PTV9GQUNUT1IgPSAxOworCXByaXZhdGUgc3RhdGljIGZpbmFsIGRvdWJsZSBJTklUSUFMX1hfVFJBTlNMQVRJT04gPSAwOworCXByaXZhdGUgc3RhdGljIGZpbmFsIGRvdWJsZSBJTklUSUFMX1lfVFJBTlNMQVRJT04gPSAwOworCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBkb3VibGUgWk9PTUlOR19GQUNUT1IgPSAxLjE7CisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBkb3VibGUgVU5aT09NSU5HX0ZBQ1RPUiA9IDEgLyBaT09NSU5HX0ZBQ1RPUjsKKworCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgaW50IEJPUkRFUl9BTFBIQSA9IDI1OworCQorCS8qKgorCSAqIFRoaXMgaXMgdGhlIGxpc3Qgb2YgcG9seWdvbnMgdGhhdCBhcmUgcmVuZGVyZWQuCisJICovCisJcHJpdmF0ZSBTdGVtUG9seWdvbnNMaXN0IHBvbHlnb25zVG9SZW5kZXI7CisKKwlkb3VibGUgem9vbUZhY3RvciA9IElOSVRJQUxfWk9PTV9GQUNUT1I7CisJcHJpdmF0ZSBmbG9hdCBnYWluRmFjdG9yID0gMS4wZjsKKwlwcml2YXRlIGRvdWJsZSB4VHJhbnNsYXRpb24gPSBJTklUSUFMX1hfVFJBTlNMQVRJT047CisJcHJpdmF0ZSBkb3VibGUgeVRyYW5zbGF0aW9uID0gSU5JVElBTF9ZX1RSQU5TTEFUSU9OOworCWJvb2xlYW4gZHJhd1BvbHlnb25Cb3JkZXJzID0gdHJ1ZTsKKwlTdGVtUG9seWdvblRyYW5zZm9ybSBwb2ludHNUcmFuc2Zvcm1lciA9IG5ldyBTdGVtUG9seWdvblRyYW5zZm9ybSgpOworCWJvb2xlYW4gdG9VcGRhdGVUcmFuZm9ybSA9IHRydWU7CisJCisJcHJpdmF0ZSBmaW5hbCBTdGFuZGFyZENvbG9yUHJvdmlkZXIgc3RkQ29sb3JQcm92aWRlciA9IG5ldyBTdGFuZGFyZENvbG9yUHJvdmlkZXIodGhpcy5nZXREaXNwbGF5KCkpOworCXByaXZhdGUgQ29sb3JQcm92aWRlckFkYXB0ZXIgY29sb3JQcm92aWRlciA9IG51bGw7CisKKwlwcml2YXRlIGJvb2xlYW4gdXNlTG9nU2NhbGluZyA9IHRydWU7CisJCisJYm9vbGVhbiBsZWZ0TW91c2VCdXR0b25QcmVzc2VkID0gZmFsc2U7CisJaW50IGxhc3RPZmZzZXRYOworCWludCBsYXN0T2Zmc2V0WTsKKwlDb2xvclNjYWxlQ29tcG9zaXRlIGNvbG9yU2NhbGUgPSBudWxsOworCisJcHJpdmF0ZSBJU2VsZWN0aW9uIHNlbGVjdGlvbjsKKwkvKioKKwkgKiBUaGUgY29sbGVjdGlvbiBvZiBJU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyIHdhaXRpbmcgdG8gYmUgdG9sZCBhYm91dAorCSAqIHNlbGVjdGlvbnMuCisJICovCisJcHJvdGVjdGVkIGZpbmFsIExpc3Q8SVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcj4gc2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVycyA9IG5ldyBDb3B5T25Xcml0ZUFycmF5TGlzdDxJU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyPigpOworCXByaXZhdGUgUmVjdGFuZ2xlIHBvbHlnb25zQm91bmRzUmVjdCA9IG51bGw7CisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IE1BUkdJTiA9IDEwOworCQorCXByaXZhdGUgZmluYWwgTW91c2VUcmFja0hhbmRsZXIgbW91c2VUcmFja0hhbmRsZXIgPSBuZXcgTW91c2VUcmFja0hhbmRsZXIoKTsKKwlwcml2YXRlIGZpbmFsIE1vdXNlQnV0dG9uSGFuZGxlciBtb3VzZUJ1dHRvbkhhbmRsZXIgPSBuZXcgTW91c2VCdXR0b25IYW5kbGVyKCk7CisJcHJpdmF0ZSBmaW5hbCBNb3VzZUhvdmVySGFuZGxlciBtb3VzZUhvdmVySGFuZGxlciA9IG5ldyBNb3VzZUhvdmVySGFuZGxlcigpOworCXByaXZhdGUgZmluYWwgS2V5SGFuZGxlciBrZXlIYW5kbGVyID0gbmV3IEtleUhhbmRsZXIoKTsKKworCXByb3RlY3RlZCBJbWFnZSBjYW52YXNJbWFnZTsKKwkKKwlwcml2YXRlIElTaW11bGF0aW9uIHNpbXVsYXRpb247CisJcHJpdmF0ZSBTVEVNVGltZSB0aW1lOworCXByaXZhdGUgU2VxdWVuY2VyIHNlcXVlbmNlcjsKKworCXByaXZhdGUgRGVmYXVsdFRvb2xUaXAgdG9vbHRpcDsKKwkKKwkvKioKKwkgKiBAcGFyYW0gcGFyZW50CisJICogQHBhcmFtIHN0eWxlCisJICovCisJcHVibGljIE1hcENhbnZhcyhmaW5hbCBDb21wb3NpdGUgcGFyZW50LCBmaW5hbCBpbnQgc3R5bGUpIHsKKwkJc3VwZXIocGFyZW50LCBTV1QuRE9VQkxFX0JVRkZFUkVEIHwgU1dULk5PX0JBQ0tHUk9VTkQpOworCisJCWFkZFBhaW50TGlzdGVuZXIodGhpcyk7CisJCWFkZE1vdXNlV2hlZWxMaXN0ZW5lcih0aGlzKTsKKwkJYWRkTW91c2VUcmFja0xpc3RlbmVyKG1vdXNlVHJhY2tIYW5kbGVyKTsKKwkJYWRkTW91c2VNb3ZlTGlzdGVuZXIodGhpcyk7CisJCWFkZEtleUxpc3RlbmVyKGtleUhhbmRsZXIpOwkJCisJCWFkZERpc3Bvc2VMaXN0ZW5lcih0aGlzKTsKKwkJYWRkTW91c2VMaXN0ZW5lcihtb3VzZUJ1dHRvbkhhbmRsZXIpOworCQlhZGRNb3VzZVRyYWNrTGlzdGVuZXIobW91c2VIb3ZlckhhbmRsZXIpOworCisJCXRvb2x0aXAgPSBuZXcgRGVmYXVsdFRvb2xUaXAodGhpcyk7CisJCXRvb2x0aXAuc2V0SGlkZURlbGF5KFRPT0xUSVBfSElERV9ERUxBWSk7CisKKwl9IC8vIE1hcENhbnZhcworCQorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLlBhaW50TGlzdGVuZXIjcGFpbnRDb250cm9sKG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuUGFpbnRFdmVudCkKKwkgKi8KKwlwdWJsaWMgdm9pZCBwYWludENvbnRyb2woZmluYWwgUGFpbnRFdmVudCBlKSB7CisJCWZpbmFsIEdDIGdjID0gZS5nYzsKKwkJZmluYWwgUG9pbnQgY29udHJvbFNpemUgPSAoKENvbnRyb2wpIGUuZ2V0U291cmNlKCkpLmdldFNpemUoKTsKKwkJdG9VcGRhdGVUcmFuZm9ybSA9IHRydWU7CisJCQorCQlJbWFnZSBuZXdDYW52YXNJbWFnZSA9IG5ldyBJbWFnZShlLmRpc3BsYXksIGNvbnRyb2xTaXplLngsIGNvbnRyb2xTaXplLnkpOworCQkKKwkJR0MgbG9jYWxHQyA9IG5ldyBHQyhuZXdDYW52YXNJbWFnZSk7CisJCWRyYXcobG9jYWxHQywgMCwgMCwgY29udHJvbFNpemUueCwgY29udHJvbFNpemUueSk7CisJCWxvY2FsR0MuZGlzcG9zZSgpOworCisJCWdjLmRyYXdJbWFnZShuZXdDYW52YXNJbWFnZSwgMCwgMCk7CisKKwkgICAgSW1hZ2Ugb2xkQ2FudmFzSW1hZ2UgPSBjYW52YXNJbWFnZTsKKwkgICAgY2FudmFzSW1hZ2UgPSBuZXdDYW52YXNJbWFnZTsKKwkgICAgaWYgKG9sZENhbnZhc0ltYWdlICE9IG51bGwgJiYgIW9sZENhbnZhc0ltYWdlLmlzRGlzcG9zZWQoKSkgeworCSAgICAJb2xkQ2FudmFzSW1hZ2UuZGlzcG9zZSgpOworCSAgICB9CisJCQorCX0KKwkKKwkKKwkvKioKKwkgKiBAcGFyYW0gcGF0aAorCSAqIEB0aHJvd3MgSU9FeGNlcHRpb24KKwkgKi8KKwlwdWJsaWMgdm9pZCBzYXZlQ2FudmFzSW1hZ2UoRmlsZSBwYXRoKSB0aHJvd3MgSU9FeGNlcHRpb24KKwl7CisJCXRyeSB7CisJCQlpZiAoY2FudmFzSW1hZ2UgIT0gbnVsbCAmJiAhY2FudmFzSW1hZ2UuaXNEaXNwb3NlZCgpKSB7CisJCQkJSW1hZ2VMb2FkZXIgbG9hZGVyID0gbmV3IEltYWdlTG9hZGVyKCk7CisJCQkJbG9hZGVyLmRhdGEgPSBuZXcgSW1hZ2VEYXRhW10ge2NhbnZhc0ltYWdlLmdldEltYWdlRGF0YSgpfTsKKwkJCQlsb2FkZXIuc2F2ZShwYXRoLmdldEFic29sdXRlUGF0aCgpLCBTV1QuSU1BR0VfUE5HKTsKKwkJCX0KKwkJfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKKwkJCXRocm93IG5ldyBJT0V4Y2VwdGlvbigiTWFwQ2FudmFzOnNhdmVDYW52YXNJbWFnZSgpIFVuYWJsZSB0byBzYXZlIG1hcCBjYW52YXMgaW1hZ2UgdG8gdGhlIGZpbGUgIisgcGF0aC5nZXRBYnNvbHV0ZVBhdGgoKSk7CisJCX0KKwl9CisJCisJLyoqCisJICogQHJldHVybgorCSAqLworCXB1YmxpYyBJbWFnZSBnZXRDYW52YXNJbWFnZSgpCisJeworCQlyZXR1cm4gY2FudmFzSW1hZ2U7CisJfQorCQorCS8qKgorCSAqIEBwYXJhbSBlCisJICovCisJcHVibGljIHZvaWQgbW91c2VTY3JvbGxlZChmaW5hbCBNb3VzZUV2ZW50IGUpIHsKKwkJLy8gWm9vbSBPdXQ/CisJCWlmIChlLmNvdW50ID49IDApIHsKKwkJCS8vIFllcworCQkJem9vbUluKCk7CisJCX0gZWxzZSB7CisJCQl6b29tT3V0KCk7CisJCX0KKwl9CisJCisJLyoqCisJICogQHBhcmFtIGUKKwkgKi8KKwlwdWJsaWMgdm9pZCBtb3VzZU1vdmUoTW91c2VFdmVudCBlKSB7CisKKwkJaWYgKGxlZnRNb3VzZUJ1dHRvblByZXNzZWQpIHsKKwkJCS8vIFllcworCQkJLy8gbmV3IHggYW5kIHkgYXJlIGRlZmluZWQgYnkgY3VycmVudCBtb3VzZSBsb2NhdGlvbiBzdWJ0cmFjdGVkCisJCQkvLyBieSBwcmV2aW91c2x5IHByb2Nlc3NlZCBtb3VzZSBsb2NhdGlvbgorCQkJZmluYWwgaW50IG5ld1ggPSBlLnggLSBsYXN0T2Zmc2V0WDsKKwkJCWZpbmFsIGludCBuZXdZID0gZS55IC0gbGFzdE9mZnNldFk7CisJCQlsYXN0T2Zmc2V0WCA9IGUueDsKKwkJCWxhc3RPZmZzZXRZID0gZS55OworCisJCQkvLyBEaWQgd2UgbW92ZSBmcm9tIHRoZSBzcG90IHdoZXJlIHRoZSBtb3VzZSB3ZW50IGRvd24/CisJCQlpZiAobmV3WCAhPSAwIHx8IG5ld1kgIT0gMCkgeworCQkJCS8vIFllcworCQkJCS8vIFRoaXMgaXMgYSB0cmFuc2xhdGlvbiBvZiB0aGUgbWFwIHRoZW4KKwkJCQkvLyB1cGRhdGUgdGhlIGNhbnZhcyB0cmFuc2xhdGlvbgorCQkJCWFkZFRyYW5zbGF0aW9uKG5ld1gsIG5ld1kpOworCQkJfSAvLyBpZiBtb3ZlZAorCQl9CisJfQorCQorCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5EaXNwb3NlTGlzdGVuZXIjd2lkZ2V0RGlzcG9zZWQob3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5EaXNwb3NlRXZlbnQpCisJICovCisJcHVibGljIHZvaWQgd2lkZ2V0RGlzcG9zZWQoQFN1cHByZXNzV2FybmluZ3MoInVudXNlZCIpIGZpbmFsIERpc3Bvc2VFdmVudCBlKSB7CisJCWlmICghaXNEaXNwb3NlZCgpKSB7CisJCQlkaXNwb3NlKCk7CisJCX0KKwl9CisKKwkvKioKKwkgKiBAcGFyYW0gcG9seWdvbnNUb1JlbmRlcgorCSAqLworCXB1YmxpYyB2b2lkIHJlbmRlcihmaW5hbCBTdGVtUG9seWdvbnNMaXN0IHBvbHlnb25zVG9SZW5kZXIsIElTaW11bGF0aW9uIHNpbSkgeworCQlzaW11bGF0aW9uID0gc2ltOworCQl0aGlzLnBvbHlnb25zVG9SZW5kZXIgPSBwb2x5Z29uc1RvUmVuZGVyOworCQlyZWRyYXcoKTsKKwl9IC8vIHJlbmRlcgorCisJLyoqCisJICogQHBhcmFtIGRyYXdQb2x5Z29uQm9yZGVycworCSAqLworCXB1YmxpYyBmaW5hbCB2b2lkIHNldERyYXdQb2x5Z29uQm9yZGVycyhmaW5hbCBib29sZWFuIGRyYXdQb2x5Z29uQm9yZGVycykgeworCQl0aGlzLmRyYXdQb2x5Z29uQm9yZGVycyA9IGRyYXdQb2x5Z29uQm9yZGVyczsKKwl9CisKKwkvKioKKwkgKiBAcGFyYW0gZ2FpbkZhY3RvcgorCSAqLworCXB1YmxpYyBmaW5hbCB2b2lkIHNldEdhaW5GYWN0b3IoZmluYWwgZmxvYXQgZ2FpbkZhY3RvcikgeworCQl0aGlzLmdhaW5GYWN0b3IgPSBnYWluRmFjdG9yOworCX0KKworCS8qKgorCSAqIEBwYXJhbSB1c2VMb2dTY2FsaW5nCisJICovCisJcHVibGljIGZpbmFsIHZvaWQgc2V0VXNlTG9nU2NhbGluZyhmaW5hbCBib29sZWFuIHVzZUxvZ1NjYWxpbmcpIHsKKwkJdGhpcy51c2VMb2dTY2FsaW5nID0gdXNlTG9nU2NhbGluZzsKKwl9CisKKwkvKioKKwkgKiBSZXNldAorCSAqLworCXB1YmxpYyB2b2lkIHJlc2V0KCkgeworCQl4VHJhbnNsYXRpb24gPSBJTklUSUFMX1hfVFJBTlNMQVRJT047CisJCXlUcmFuc2xhdGlvbiA9IElOSVRJQUxfWV9UUkFOU0xBVElPTjsKKwkJem9vbUZhY3RvciA9IElOSVRJQUxfWk9PTV9GQUNUT1I7CisJfSAvLyByZXNldAorCisJLyoqCisJICogVGhlIG1ldGhvZCB3aGljaCBnZXRzIHRoZSBNYXBDYW52YXMnIHBvbHlnb25zIGxpc3QsIGFuZCBkcmF3cyBpdCBvbiB0aGUKKwkgKiBNYXBDYW52YXMuCisJICogCisJICogQHBhcmFtIGdjCisJICogQHBhcmFtIHgKKwkgKiBAcGFyYW0geQorCSAqIEBwYXJhbSB3aWR0aAorCSAqIEBwYXJhbSBoZWlnaHQKKwkgKi8KKwl2b2lkIGRyYXcoZmluYWwgR0MgZ2MsIGZpbmFsIGludCB4LCBmaW5hbCBpbnQgeSwgZmluYWwgaW50IHdpZHRoLAorCQkJZmluYWwgaW50IGhlaWdodCkgeworCQkKKwkJZ2Muc2V0QmFja2dyb3VuZChzdGRDb2xvclByb3ZpZGVyLmdldEJhY2tncm91bmRDb2xvcigpKTsKKwkJZHJhd0JhY2tncm91bmQoZ2MsIHgsIHksIHdpZHRoLCBoZWlnaHQpOworCQlnYy5zZXRMaW5lV2lkdGgoMCk7IC8vWmVybyBtZWFucyB0aGUgZmFzdGVzdCBwb3NzaWJsZSBsaW5lIGRyYXdpbmcgYWxnb3JpdGhtCisJCQorCQorCQkKKwkJaWYgKHBvbHlnb25zVG9SZW5kZXIgPT0gbnVsbCB8fCBwb2x5Z29uc1RvUmVuZGVyLmlzRW1wdHkoKSkgeworCQkJcmV0dXJuOworCQl9CisJCQorCQkvL0RvIHdlIG5lZWQgdG8gcmVjYWxjdWxhdGUgdGhlIHRyYW5zZm9ybT8KKwkJaWYgKHRvVXBkYXRlVHJhbmZvcm0pIHsKKwkJCS8vWWVzLCBjb21wdXRlIGl0CisJCQljb21wdXRlVHJhbnNmb3JtKHBvbHlnb25zVG9SZW5kZXIpOworCQkJLy9VcGRhdGUgYWxsIHBvbHlnb25zIGFib3V0IHRoZSBjaGFuZ2VzIGluIHRoZSB0cmFuc2Zvcm0KKwkJCWZvciAoU3RlbVBvbHlnb24gc3RlbXBvbHkgOiBwb2x5Z29uc1RvUmVuZGVyKSB7CisJCQkJc3RlbXBvbHkuc2V0UG9pbnRzVHJhbnNmb3JtZXIocG9pbnRzVHJhbnNmb3JtZXIpOworCQkJfQorCQkJdG9VcGRhdGVUcmFuZm9ybSA9IGZhbHNlOworCQl9CisJCQorCQlDb2xvciBib3JkZXJzQ29sb3IgPSBzdGRDb2xvclByb3ZpZGVyLmdldEJvcmRlcnNDb2xvcigpOworCQkKKwkJZm9yIChmaW5hbCBTdGVtUG9seWdvbiBzdGVtcG9seSA6IHBvbHlnb25zVG9SZW5kZXIpIHsKKwkJCQorCQkJSWRlbnRpZmlhYmxlIGlkZW50aWZpYWJsZSA9IHN0ZW1wb2x5LmdldElkZW50aWZpYWJsZSgpOworCQkJCisJCQlpZiAoaWRlbnRpZmlhYmxlIGluc3RhbmNlb2YgTm9kZSkgeworCQkJCWNvbG9yUHJvdmlkZXIuc2V0VGFyZ2V0KGlkZW50aWZpYWJsZSk7CisJCQkJIAorCQkJCS8vVXBkYXRlIHRoZSBHMkQgd2l0aCB0aGUgYXBwcm9wcmlhdGUgY29sb3IgYmVmb3JlIGZpbGxpbmcgdGhlIHBvbHlnb24KKwkJCQljb2xvclByb3ZpZGVyLnVwZGF0ZUdDKGdjLCBnYWluRmFjdG9yLCB1c2VMb2dTY2FsaW5nKTsKKwkJCQlnYy5maWxsUG9seWdvbihzdGVtcG9seS50cmFuc2Zvcm1lZFBvaW50cyk7CisJCQkJCQorCQkJCWlmIChkcmF3UG9seWdvbkJvcmRlcnMpIHsKKwkJCQkJZ2Muc2V0Rm9yZWdyb3VuZChib3JkZXJzQ29sb3IpOworCQkJCQlnYy5zZXRBbHBoYShCT1JERVJfQUxQSEEpOworCQkJCQlnYy5kcmF3UG9seWdvbihzdGVtcG9seS50cmFuc2Zvcm1lZFBvaW50cyk7CisJCQkJCWdjLnNldEFscGhhKDI1NSk7IC8vIHNldCBpdCBiYWNrCisJCQkJfQorCQkJfQorCQkJCisJCQlpZiAoaWRlbnRpZmlhYmxlIGluc3RhbmNlb2YgRWRnZSkgeworCQkJCQorCQkJCWdjLnNldEZvcmVncm91bmQoc3RkQ29sb3JQcm92aWRlci5nZXRFZGdlc0NvbG9yKCkpOworCQkJCWlmIChzdGVtcG9seS50cmFuc2Zvcm1lZFBvaW50cyA9PSBudWxsKSB7CisJCQkJCXN0ZW1wb2x5LnNldFBvaW50c1RyYW5zZm9ybWVyKHBvaW50c1RyYW5zZm9ybWVyKTsKKwkJCQl9CisJCQkJZ2MuZHJhd0xpbmUoCisJCQkJCQlzdGVtcG9seS50cmFuc2Zvcm1lZFBvaW50c1swXSwgCisJCQkJCQlzdGVtcG9seS50cmFuc2Zvcm1lZFBvaW50c1sxXSwgCisJCQkJCQlzdGVtcG9seS50cmFuc2Zvcm1lZFBvaW50c1syXSwgCisJCQkJCQlzdGVtcG9seS50cmFuc2Zvcm1lZFBvaW50c1szXSk7CisJCQl9CisJCX0gLy8gZm9yIGVhY2ggU3RlbVBvbHlnb24KKwkJCisJCQorLy8JCWlmKGNvbG9yUHJvdmlkZXIgaW5zdGFuY2VvZiBBYnN0cmFjdFJlbGF0aXZlVmFsdWVDb2xvclByb3ZpZGVyQWRhcHRlcikgeworLy8JCQlBYnN0cmFjdFJlbGF0aXZlVmFsdWVDb2xvclByb3ZpZGVyQWRhcHRlciBjID0gKEFic3RyYWN0UmVsYXRpdmVWYWx1ZUNvbG9yUHJvdmlkZXJBZGFwdGVyKSBjb2xvclByb3ZpZGVyOworLy8JCQlkcmF3Q29sb3JTY2FsZShjKTsKKy8vCQl9CisJCQorCQlnYy5zZXRGb3JlZ3JvdW5kKGdldERpc3BsYXkoKS5nZXRTeXN0ZW1Db2xvcihTV1QuQ09MT1JfQkxBQ0spKTsJCQorCX0gLy8gZHJhdworCQorCQorCQorCS8qKgorCSAqIAorCSAqIEBwYXJhbSBhZGFwdGVyCisJICovCisvLwlwcml2YXRlIHZvaWQgZHJhd0NvbG9yU2NhbGUoQWJzdHJhY3RSZWxhdGl2ZVZhbHVlQ29sb3JQcm92aWRlckFkYXB0ZXIgYWRhcHRlcikgeworLy8JCUNvbG9yIHNhdHVyYXRlZENvbG9yID0gYWRhcHRlci5nZXRGb3JlZ3JvdW5kRmlsbENvbG9yKCk7IC8vIHRvIHRyYW5zcGFyZW50IGNvbG9yIG92ZXIgdGhlIGJhY2tncm91bmQKKy8vCQlDb2xvciB0ZXh0Q29sb3IgPSBzYXR1cmF0ZWRDb2xvcjsgLy8gdGV4dAorLy8JCUNvbG9yIGJhY2tHcm91bmQgPSBhZGFwdGVyLmdldEJhY2tncm91bmRGaWxsQ29sb3IoKTsgLy8gdGV4dEJhY2tncm91bmQKKy8vCQkKKy8vCQlpZiAoY29sb3JTY2FsZSA9PSBudWxsKSB7CisvLwkJCWNvbG9yU2NhbGUgPSBuZXcgQ29sb3JTY2FsZUNvbXBvc2l0ZSh0aGlzLCBzYXR1cmF0ZWRDb2xvciwgbmV3IGRvdWJsZVtdezAuMCwgMS4wL2dhaW5GYWN0b3J9LCB1c2VMb2dTY2FsaW5nLCBTV1QuQk9SREVSLCBiYWNrR3JvdW5kLCB0ZXh0Q29sb3IpOworLy8JCX0KKy8vCQljb2xvclNjYWxlLnVwZGF0ZUNvbG9yU2NhbGUoc2F0dXJhdGVkQ29sb3IsIG5ldyBkb3VibGVbXXswLjAsIDEuMC9nYWluRmFjdG9yfSx1c2VMb2dTY2FsaW5nLCBiYWNrR3JvdW5kLCB0ZXh0Q29sb3IpOworLy8JfQorCisJLyoqCisJICogQHBhcmFtIHBvbHlnb25MaXN0CisJICovCisJcHJpdmF0ZSB2b2lkIGNvbXB1dGVUcmFuc2Zvcm0oZmluYWwgU3RlbVBvbHlnb25zTGlzdCBwb2x5Z29uTGlzdCkgeworCQlpZiAocG9seWdvbnNCb3VuZHNSZWN0ID09IG51bGwpIHsKKwkJCXBvbHlnb25zQm91bmRzUmVjdCA9IHBvbHlnb25MaXN0LmdldEJvdW5kcygpOworCQkJaWYgKHBvbHlnb25zQm91bmRzUmVjdCA9PSBudWxsKSB7CisJCQkJcmV0dXJuOworCQkJfQorCQl9CisJCQorCQlmaW5hbCBSZWN0YW5nbGUgY2FudmFzQm91bmRzID0gZ2V0Qm91bmRzKCk7CisKKwkJZmluYWwgaW50IGVmZmVjdGl2ZUNhbnZhc1dpZHRoID0gY2FudmFzQm91bmRzLndpZHRoIC0gMiAqIE1BUkdJTjsKKwkJZmluYWwgaW50IGVmZmVjdGl2ZUNhbnZhc0hlaWdodCA9IGNhbnZhc0JvdW5kcy5oZWlnaHQgLSAyICogTUFSR0lOOworCQlmaW5hbCBkb3VibGUgd2lkdGggPSBwb2x5Z29uc0JvdW5kc1JlY3Qud2lkdGg7CisJCWZpbmFsIGRvdWJsZSBoZWlnaHQgPSBwb2x5Z29uc0JvdW5kc1JlY3QuaGVpZ2h0OworCQlmaW5hbCBkb3VibGUgV0lEVEhfUkFUSU8gPSBlZmZlY3RpdmVDYW52YXNXaWR0aCAvIHdpZHRoOworCQlmaW5hbCBkb3VibGUgSEVJR0hUX1JBVElPID0gZWZmZWN0aXZlQ2FudmFzSGVpZ2h0IC8gaGVpZ2h0OworCQlmaW5hbCBkb3VibGUgU0NBTEVfRkFDVE9SID0gTWF0aC5taW4oV0lEVEhfUkFUSU8sIEhFSUdIVF9SQVRJTykKKwkJCQkqIHpvb21GYWN0b3I7CisKKwkJLy8gRmlndXJlIG91dCB0aGUgZXh0cmEgdHJhbnNsYXRpb24gbmVlZGVkIHRvIGNlbnRlciB0aGUgaW1hZ2UgZWl0aGVyCisJCS8vIHZlcnRpY2FsbHkgb3IgaG9yaXpvbnRhbGx5IGluIHRoZSBjYW52YXMKKwkJaW50IHhDZW50ZXJpbmdUcmFuc2xhdGlvbiA9IDA7CisJCWludCB5Q2VudGVyaW5nVHJhbnNsYXRpb24gPSAwOworCQkvLyBBbnl0aGluZyB0byBjZW50ZXI/CisJCWlmICh3aWR0aCA+IDAgJiYgaGVpZ2h0ID4gMCkgeworCQkJLy8gWWVzCisJCQl4Q2VudGVyaW5nVHJhbnNsYXRpb24gPSAoZWZmZWN0aXZlQ2FudmFzV2lkdGggLSAoaW50KSAod2lkdGggKiBTQ0FMRV9GQUNUT1IpKSAvIDI7CisJCQl5Q2VudGVyaW5nVHJhbnNsYXRpb24gPSAoZWZmZWN0aXZlQ2FudmFzSGVpZ2h0IC0gKGludCkgKGhlaWdodCAqIFNDQUxFX0ZBQ1RPUikpIC8gMjsKKwkJfSAvLyBpZiBhbnl0aGluZyB0byBjZW50ZXIKKwkJaW50IGJvdW5kc01pblggPSBwb2x5Z29uc0JvdW5kc1JlY3QueDsKKwkJaW50IGJvdW5kc01pblkgPSBwb2x5Z29uc0JvdW5kc1JlY3QueTsKKwkJCisJCXBvaW50c1RyYW5zZm9ybWVyLnNldE9mZnNldFgoLWJvdW5kc01pblggKiBTQ0FMRV9GQUNUT1IgKyBNQVJHSU4gKyB4Q2VudGVyaW5nVHJhbnNsYXRpb24gKyB4VHJhbnNsYXRpb24gKiB6b29tRmFjdG9yKTsKKwkJcG9pbnRzVHJhbnNmb3JtZXIuc2V0T2Zmc2V0WSgtYm91bmRzTWluWSAqIFNDQUxFX0ZBQ1RPUiArIE1BUkdJTiArIHlDZW50ZXJpbmdUcmFuc2xhdGlvbiArIHlUcmFuc2xhdGlvbiAqIHpvb21GYWN0b3IpOworCQlwb2ludHNUcmFuc2Zvcm1lci5zZXRTY2FsZShTQ0FMRV9GQUNUT1IpOworCX0gLy8gY29tcHV0ZVRyYW5zZm9ybQorCisJdm9pZCB6b29tSW4oKSB7CisJCXpvb21GYWN0b3IgKj0gWk9PTUlOR19GQUNUT1I7CisJCXRvVXBkYXRlVHJhbmZvcm0gPSB0cnVlOworCQlyZWRyYXcoKTsKKwl9CisKKwl2b2lkIHpvb21PdXQoKSB7CisJCXpvb21GYWN0b3IgKj0gVU5aT09NSU5HX0ZBQ1RPUjsKKwkJdG9VcGRhdGVUcmFuZm9ybSA9IHRydWU7CisJCXJlZHJhdygpOworCX0KKwkKKwkvKioKKwkgKgorCSAqLworCXByb3RlY3RlZCBzdGF0aWMgY2xhc3MgTW91c2VUcmFja0hhbmRsZXIgZXh0ZW5kcyBNb3VzZVRyYWNrQWRhcHRlciB7CisJCUBPdmVycmlkZQorCQlwdWJsaWMgdm9pZCBtb3VzZUVudGVyKEBTdXBwcmVzc1dhcm5pbmdzKCJ1bnVzZWQiKQorCQlmaW5hbCBNb3VzZUV2ZW50IGUpIHsKKwkJCQorCQkJLy8gVGhlIE1hcCBkb2VzIG5vdCBORUVEIHRvIHN0ZWFsIGZvY3VzIGF0IGFsbAorCQkJLy8gSUYgaW4gdGhlIGZ1dHVyZSB3ZSBuZWVkIGZvY3VzIHRoZW4gdGhlIGZvbGxvd2luZworCQkJLy8gR3VhcmQgY2xhdXNlZCBwcm90ZWN0cyBhZ2FpbnN0IGlycmVsZXZhbnQvdW5uZWVkZWQgc3RlYWxpbmcgb2YgZm9jdXMKKwkJCQorCQkJLy8gaWYgdGhlcmUgaXMgTk9USElORyBpbiB0aGUgbWFwLCBkb24ndCBzdGVhbCBmb2N1cworCQkJLy9pZiAocG9seWdvbnNUb1JlbmRlciAhPSBudWxsICYmICFwb2x5Z29uc1RvUmVuZGVyLmlzRW1wdHkoKSkgeworCQkJCS8vZm9yY2VGb2N1cygpOworCQkJLy99CisJCX0KKwl9CisJCisJLyoqCisJICogCisJICovCisJcHJvdGVjdGVkIGNsYXNzIEtleUhhbmRsZXIgZXh0ZW5kcyBLZXlBZGFwdGVyIHsKKwkJQE92ZXJyaWRlCisJCXB1YmxpYyB2b2lkIGtleVJlbGVhc2VkKGZpbmFsIEtleUV2ZW50IGUpIHsKKwkJCXN3aXRjaCAoZS5rZXlDb2RlKSB7CisJCQljYXNlIFNXVC5BUlJPV19VUDoKKwkJCQl6b29tSW4oKTsKKwkJCQlicmVhazsKKwkJCWNhc2UgU1dULkFSUk9XX0RPV046CisJCQkJem9vbU91dCgpOworCQkJCWJyZWFrOworCQkJZGVmYXVsdDoKKwkJCQlicmVhazsKKwkJCX0gLy8gc3dpdGNoCisJCX0KKwl9CisKKwkvKioKKwkgKiBBIGhlbHBlciBjbGFzcyB0aGF0IGRlZmluZXMgYSBtb3VzZS1saXN0ZW5lciB0aGF0IHdpbGwgcHJvdmlkZSB0aGUgdXNlcgorCSAqIHRoZSBhYmlsaXR5IHRvIG1vdmUgdGhlIG1hcCBpbnNpZGUgdGhlIHZpZXcuCisJICogCisJICovCisJcHJvdGVjdGVkIGNsYXNzIE1vdXNlQnV0dG9uSGFuZGxlciBleHRlbmRzIE1vdXNlQWRhcHRlciB7CisJCS8qKgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuTW91c2VMaXN0ZW5lciNtb3VzZURvd24ob3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5Nb3VzZUV2ZW50KQorCQkgKi8KKwkJQE92ZXJyaWRlCisJCXB1YmxpYyB2b2lkIG1vdXNlRG93bihmaW5hbCBNb3VzZUV2ZW50IGUpIHsKKwkJCS8vIElzIHRoZSBsZWZ0IG1vdXNlIGJ1dHRvbj8KKwkJCWlmIChlLmJ1dHRvbiA9PSAxKSB7CisJCQkJLy8gWWVzCisJCQkJLy8gQ2FwdHVyZSB0aGUgc3RhcnRpbmcgcG9pbnQKKwkJCQlsYXN0T2Zmc2V0WCA9IGUueDsKKwkJCQlsYXN0T2Zmc2V0WSA9IGUueTsKKwkJCQlsZWZ0TW91c2VCdXR0b25QcmVzc2VkID0gdHJ1ZTsKKwkJCX0gLy8gaWYKKwkJfSAvLyBtb3VzZURvd24KKworCQkvKioKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLk1vdXNlTGlzdGVuZXIjbW91c2VVcChvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLk1vdXNlRXZlbnQpCisJCSAqLworCQlAT3ZlcnJpZGUKKwkJcHVibGljIHZvaWQgbW91c2VVcChmaW5hbCBNb3VzZUV2ZW50IGUpIHsKKwkJCS8vIElzIGl0IHRoZSBsZWZ0IG1vdXNlIGJ1dHRvbj8KKwkJCWlmIChlLmJ1dHRvbiA9PSAxKSB7CisJCQkJLy8gWWVzCisJCQkJLy8gbmV3IHggYW5kIHkgYXJlIGRlZmluZWQgYnkgY3VycmVudCBtb3VzZSBsb2NhdGlvbiBzdWJ0cmFjdGVkCisJCQkJLy8gYnkgcHJldmlvdXNseSBwcm9jZXNzZWQgbW91c2UgbG9jYXRpb24KKwkJCQlmaW5hbCBpbnQgbmV3WCA9IGUueCAtIGxhc3RPZmZzZXRYOworCQkJCWZpbmFsIGludCBuZXdZID0gZS55IC0gbGFzdE9mZnNldFk7CisKKwkJCQkvLyBEaWQgd2UgbW92ZSBmcm9tIHRoZSBzcG90IHdoZXJlIHRoZSBtb3VzZSB3ZW50IGRvd24/CisJCQkJaWYgKG5ld1ggIT0gMCB8fCBuZXdZICE9IDApIHsKKwkJCQkJLy8gWWVzCisJCQkJCS8vIFRoaXMgaXMgYSB0cmFuc2xhdGlvbiBvZiB0aGUgbWFwIHRoZW4KKwkJCQkJLy8gdXBkYXRlIHRoZSBjYW52YXMgdHJhbnNsYXRpb24KKwkJCQkJYWRkVHJhbnNsYXRpb24obmV3WCwgbmV3WSk7CisJCQkJfSAvLyBpZiBtb3ZlZAorCQkJCWVsc2UgeworCQkJCQkvLyBObworCQkJCQkvLyBUaGlzIGlzIGEgcG90ZW50aWFsIHNlbGVjdGlvbiBvZiBhIHBvbHlnb24KKwkJCQkJZmluYWwgU3RlbVBvbHlnb24gcG9seWdvbiA9IGdldFBvbHlnb24oZSk7CisJCQkJCS8vIEFyZSB3ZSBjbGlja2luZyBvbiBhIHBvbHlnb24/CisJCQkJCWlmIChwb2x5Z29uICE9IG51bGwpIHsKKwkJCQkJCS8vIFllcworCQkJCQkJLy8gR2V0IHRoZSBJZGVudGlmaWFibGUgYXNzb2NpYXRlZCB3aXRoIHRoZSBwb2x5Z29uIGFuZAorCQkJCQkJLy8gbWFrZSBpdCB0aGUgY3VycmVudCBzZWxlY3Rpb24uCisJCQkJCQkvLyBCdWlsZCB0aGUgR2VvZ3JhcGhpY1NlbGVjdGlvbkVsZW1lbnRzCisJCQkJCQkvLyBhbmQgcGFzcyBpdCB2aWEgdGhlIFN0cnVjdHVyZWRTZWxlY3Rpb24gYXMgdGhlIDJuZAorCQkJCQkJLy8gZWxlbWVudAorCQkJCQkJZmluYWwgR2VvZ3JhcGhpY1NlbGVjdGlvbkVsZW1lbnRzIGdzZSA9IG5ldyBHZW9ncmFwaGljU2VsZWN0aW9uRWxlbWVudHMoKTsKKworCQkJCQkJLy8gQ29udmVydCBmcm9tIGNhbnZhcyBzcGFjZSBjb29yZGluYXRlcyB0byBsYXQvbG9uZyBieQorCQkJCQkJLy8gdGhlIGludmVyc2UKKwkJCQkJCS8vIHRyYW5zZm9ybS4KKwkJCQkJCWZpbmFsIFBvaW50IGxhdExvbmdQb3NpdGlvbiA9IHBvaW50c1RyYW5zZm9ybWVyLmdldEludmVyc2VkUG9pbnQoZS54LCBlLnkpOy8vaW52ZXJzZU1hcChuZXcgUG9pbnQoZS54LCBlLnkpKTsKKwkJCQkJCWZpbmFsIGRvdWJsZSBsb25naXR1ZGUgPSBwb2x5Z29uCisJCQkJCQkJCS51blNjYWxlTG9uZ2l0dWRlKGxhdExvbmdQb3NpdGlvbi54KTsKKwkJCQkJCWZpbmFsIGRvdWJsZSBsYXRpdHVkZSA9IHBvbHlnb24KKwkJCQkJCQkJLnVuU2NhbGVMYXRpdHVkZShsYXRMb25nUG9zaXRpb24ueSk7CisJCQkJCQlnc2Uuc2V0UG9pbnQobG9uZ2l0dWRlLCBsYXRpdHVkZSk7CisJCQkJCQlmaW5hbCBJZGVudGlmaWFibGUgcmVnbkltcGwgPSBwb2x5Z29uLmdldElkZW50aWZpYWJsZSgpOworCQkJCQkJZmluYWwgT2JqZWN0W10gZWxlbWVudHMgPSBuZXcgT2JqZWN0W10geyByZWduSW1wbCwgZ3NlIH07CisJCQkJCQlmaW5hbCBJU3RydWN0dXJlZFNlbGVjdGlvbiBzZWxlY3Rpb24gPSBuZXcgU3RydWN0dXJlZFNlbGVjdGlvbigKKwkJCQkJCQkJZWxlbWVudHMpOworCQkJCQkJZmlyZVNlbGVjdGlvbihzZWxlY3Rpb24pOworCQkJCQl9CisJCQkJfSAvLyBlbHNlIGRpZG4ndCBtb3ZlCisJCQkJbGVmdE1vdXNlQnV0dG9uUHJlc3NlZCA9IGZhbHNlOworCQkJfSAvLyBpZiBsZWZ0IG1vdXNlIGJ1dHRvbgorCQkJLy9SZW1lbWJlciB0aGUgbWFwIGNhbnZhcyB0aGF0IGhhcyBiZWVuIGNsaWNrZWQgb24KKwkJCVNlbGVjdGVkUmVwb3J0c01hbmFnZXIuZ2V0SW5zdGFuY2UoKS5zZXRSZWNlbnRDbGlja2VkTWFwQ2FudmFzKChNYXBDYW52YXMpZS5nZXRTb3VyY2UoKSk7CisJCX0gLy8gbW91c2VVcAkJCisJfSAvLyBNb3VzZUJ1dHRvbkhhbmRsZXIKKworCXByb3RlY3RlZCBjbGFzcyBNb3VzZUhvdmVySGFuZGxlciBleHRlbmRzIE1vdXNlVHJhY2tBZGFwdGVyIHsKKworLy8JCUBPdmVycmlkZQorLy8JCXB1YmxpYyB2b2lkIG1vdXNlRW50ZXIoTW91c2VFdmVudCBlKSB7CisvLwkJCWZpbmFsIEN1cnNvciBjdXJzb3IgPSBuZXcgQ3Vyc29yKGdldERpc3BsYXkoKSwgU1dULkNVUlNPUl9TSVpFQUxMKTsKKy8vCQkJQ2FudmFzIG1hcENhbnZhcyA9IChDYW52YXMpZS5nZXRTb3VyY2UoKTsKKy8vCQkJbWFwQ2FudmFzLnNldEN1cnNvcihjdXJzb3IpOworLy8JCQlzdXBlci5tb3VzZUVudGVyKGUpOworLy8JCX0KKy8vCisvLwkJQE92ZXJyaWRlCisvLwkJcHVibGljIHZvaWQgbW91c2VFeGl0KE1vdXNlRXZlbnQgZSkgeworLy8JCQlmaW5hbCBDdXJzb3IgY3Vyc29yID0gbmV3IEN1cnNvcihnZXREaXNwbGF5KCksIFNXVC5DVVJTT1JfQVJST1cpOworLy8JCQlDYW52YXMgbWFwQ2FudmFzID0gKENhbnZhcyllLmdldFNvdXJjZSgpOworLy8JCQltYXBDYW52YXMuc2V0Q3Vyc29yKGN1cnNvcik7CisvLwkJCXN1cGVyLm1vdXNlRXhpdChlKTsKKy8vCQl9CisKKwkJLyoqCisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5Nb3VzZVRyYWNrTGlzdGVuZXIjbW91c2VIb3ZlcihvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLk1vdXNlRXZlbnQpCisJCSAqLworCQlAT3ZlcnJpZGUKKwkJcHVibGljIHZvaWQgbW91c2VIb3ZlcihmaW5hbCBNb3VzZUV2ZW50IGUpIHsKKworCQkJLy8gQ29udmVydCBmcm9tIGNhbnZhcyBzcGFjZSBjb29yZGluYXRlcyB0byBsYXQvbG9uZyBieSB0aGUgaW52ZXJzZQorCQkJLy8gdHJhbnNmb3JtLgorCQkJZmluYWwgUG9pbnQgbGF0TG9uZ1Bvc2l0aW9uID0gcG9pbnRzVHJhbnNmb3JtZXIuZ2V0SW52ZXJzZWRQb2ludChlLngsIGUueSk7Ly9pbnZlcnNlTWFwKG5ldyBQb2ludChlLngsIGUueSkpOworCQkJCisJCQkvLyBUcnkgdG8gZ2V0IHRoZSBwb2x5Z29uIHRoYXQgbWF0Y2hlcyB0aGUgcG9zaXRpb24gb2YgdGhlIG1vdXNlCisJCQlmaW5hbCBTdGVtUG9seWdvbiBwb2x5Z29uID0gZ2V0UG9seWdvbihsYXRMb25nUG9zaXRpb24pOworCisJCQkvLyBEaWQgd2UgZmluZCBhbiBlbmNsb3NpbmcgcG9seWdvbj8KKwkJCWlmIChwb2x5Z29uICE9IG51bGwpIHsKKwkJCQkvLyBZZXMKKwkJCQkvLyBXZSB3YW50IHRvIGdldCB0aGUgSVNPLWtleSBmb3IgdGhlIGlkZW50aWZpYWJsZSwgaXQgd2lsbCBiZQorCQkJCS8vIGF0IHRoZSBlbmQgb2YgdGhlIHZhbHVlIG9mIHRoZSBkdWJsaW4gY29yZSAiaWRlbnRpZmllciIKKwkJCQkvLyBhdHRyaWJ1dGUKKwkJCQlJZGVudGlmaWFibGUgaWRlbnRpZmlhYmxlID0gcG9seWdvbi5nZXRJZGVudGlmaWFibGUoKTsKKwkJCQlmaW5hbCBEdWJsaW5Db3JlIGRjID0gaWRlbnRpZmlhYmxlLmdldER1YmxpbkNvcmUoKTsKKwkJCQlmaW5hbCBTdHJpbmcgZGNJZGVudGlmaWVyID0gZGMuZ2V0SWRlbnRpZmllcigpOworCisJCQkJZmluYWwgU3RyaW5nIGlzb0tleSA9IGRjSWRlbnRpZmllci5zdWJzdHJpbmcoZGNJZGVudGlmaWVyCisJCQkJCQkubGFzdEluZGV4T2YoIi8iKSArIDEpOwkJCQkKKwkJCQkvLyBEaWQgd2UgZ2V0IGl0PworCQkJCQorCQkJCVN0cmluZyB0b29sVGlwVGV4dCA9IG51bGw7CisJCQkJCisJCQkJaWYgKGlzb0tleSAhPSBudWxsICYmICFpc29LZXkuZXF1YWxzKCIiKSkgeworCQkJCQkvLyBZZXMKKwkJCQkJZmluYWwgU3RyaW5nIGdlb2dyYXBoaWNOYW1lID0gR2VvZ3JhcGhpY05hbWVzCisJCQkJCQkJLmdldE5hbWUoaXNvS2V5KTsKKwkJCQkJYm9vbGVhbiByZXRyeSA9IHRydWU7CisJCQkJCVN0cmluZ0J1aWxkZXIgc2I9bnVsbDsKKwkJCQkJd2hpbGUocmV0cnkpIHsKKwkJCQkJCXJldHJ5ID0gZmFsc2U7CisJCQkJCQl0cnkgeworCQkJCQkJCXNiID0gbmV3IFN0cmluZ0J1aWxkZXIoZ2VvZ3JhcGhpY05hbWUpOworCQkJCQkJCXNiLmFwcGVuZCgiICgiKTsKKwkJCQkJCQlzYi5hcHBlbmQoaXNvS2V5KTsKKwkJCQkJCQlzYi5hcHBlbmQoIikiKTsKKwkJCQkJCQkKKwkJCQkJCQlSZWdpb24gcmVnaW9uID0gKFJlZ2lvbilpZGVudGlmaWFibGU7CisJCQkJCQkJZm9yIChOb2RlTGFiZWwgbmV4dExhYmVsIDogcmVnaW9uLmdldExhYmVscygpKSB7CisJCQkJCQkJCWlmIChuZXh0TGFiZWwgaW5zdGFuY2VvZiBQb3B1bGF0aW9uTW9kZWxMYWJlbCkgeworCQkJCQkJCQkJc2IuYXBwZW5kKCJcblBvcHVsYXRpb24gKG5vdyk6ICIgKyBuZXh0TGFiZWwpOworCQkJCQkJCQl9CisJCQkJCQkJCWlmKG5leHRMYWJlbCBpbnN0YW5jZW9mIFBvcHVsYXRpb25MYWJlbCkgeworCQkJCQkJCQkJc2IuYXBwZW5kKCJcblBvcHVsYXRpb24gKCIrKChQb3B1bGF0aW9uTGFiZWwpbmV4dExhYmVsKS5nZXRWYWxpZFllYXIoKSsiKToiK25leHRMYWJlbCk7CisJCQkJCQkJCX0KKwkJCQkJCQkJaWYgKG5leHRMYWJlbCBpbnN0YW5jZW9mIEFyZWFMYWJlbCkgeworCQkJCQkJCQkJc2IuYXBwZW5kKCJcbkFyZWE6ICIgKyBuZXh0TGFiZWwpOworCQkJCQkJCQl9CisJCQkJCQkJCWlmIChuZXh0TGFiZWwgaW5zdGFuY2VvZiBTdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsKSB7CisJCQkJCQkJCQlzYi5hcHBlbmQoIlxuIiArICgoU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbCluZXh0TGFiZWwpLnRvVG9vbHRpcFN0cmluZygpKTsKKwkJCQkJCQkJfQorCQkJCQkJCX0KKwkJCQkJCQkKKwkJCQkJCQlpZiAobGF0TG9uZ1Bvc2l0aW9uICE9IG51bGwpIHsKKwkJCQkJCQkJZG91YmxlIGxhdGl0dWRlID0gLTEgKiBTdGVtUG9seWdvbi5nZXRVbnNjYWxlZExhdGl0dWRlKGxhdExvbmdQb3NpdGlvbi55KTsKKwkJCQkJCQkJZG91YmxlIGxvbmdpdHVkZSA9IC0xICogU3RlbVBvbHlnb24uZ2V0VW5zY2FsZWRMb25naXR1ZGUobGF0TG9uZ1Bvc2l0aW9uLngpOworCQkJCQkJCQlzYi5hcHBlbmQoIlxuTGF0aXR1ZGU6ICIgKyBsYXRpdHVkZSAgKyAiLCBMb25naXR1ZGU6ICIgKyBsb25naXR1ZGUpOworCQkJCQkJCX0KKwkJCQkJCQkKKwkJCQkJCQlzZXF1ZW5jZXIgPSBzaW11bGF0aW9uLmdldFNjZW5hcmlvKCkuZ2V0U2VxdWVuY2VyKCk7CisJCQkJCQkJdGltZSA9IHNlcXVlbmNlci5nZXRDdXJyZW50VGltZSgpOworCQkJCQkJCXNiLmFwcGVuZCgiXG5UaW1lOiAiKyB0aW1lLnRvU3RyaW5nKCkpOworCQkJCQkJfSBjYXRjaChDb25jdXJyZW50TW9kaWZpY2F0aW9uRXhjZXB0aW9uIGNtZSkgeworCQkJCQkJCXJldHJ5ICA9IHRydWU7IC8vIFNob3VsZCBiZSByYXJlLCBqdXN0IHJldHJ5CisJCQkJCQl9CisJCQkJCX0KKwkJCQkJCisJCQkJCXRvb2xUaXBUZXh0ID0gc2IudG9TdHJpbmcoKTsKKworCQkJCX0gLy8gaWYKKwkJCQllbHNlIHsKKwkJCQkJdG9vbFRpcFRleHQgPSBwb2x5Z29uLmdldFRpdGxlKCk7CisJCQkJfQorCQkJCQorCQkJCWlmICh0b29sdGlwICE9IG51bGwpIHsKKwkJCQkJaWYgKHRvb2xUaXBUZXh0ICE9IG51bGwpIHsKKwkJCQkJCXRvb2x0aXAuc2V0VGV4dCh0b29sVGlwVGV4dCk7CisJCQkJCQl0b29sdGlwLnNob3cobmV3IFBvaW50KGUueCwgZS55KSk7CisJCQkJCX0gZWxzZSB7CisJCQkJCQl0b29sdGlwLmhpZGUoKTsKKwkJCQkJfQorCQkJCX0KKwkJCQkKKwkJCQkKKwkJCQkKKwkJCQkvKgorCQkJCSAqIC8vIFllcyAvL21hcENhbnZhcy5zZXRUb29sVGlwVGV4dChwb2x5Z29uLmdldFRpdGxlKCkgKyAiXG4iCisJCQkJICogK3BvbHlnb24uZ2V0UmVsYXRpdmVWYWx1ZSgpKTsKKwkJCQkgKiAKKwkJCQkgKiBTdHJpbmcga2V5ID0KKwkJCQkgKiBwcm9wZXJ0eVNlbGVjdGlvbkNvbnRyb2wuZ2V0U2VsZWN0ZWRQcm9wZXJ0eVN0cmluZygpOworCQkJCSAqIG1hcENhbnZhcy5zZXRUb29sVGlwVGV4dCgiTmFtZTogIiArIHBvbHlnb24uZ2V0VGl0bGUoKSArICJcbiIgKworCQkJCSAqICJSZWxhdGl2ZSBWYWx1ZTogIiArIHBvbHlnb24uZ2V0UmVsYXRpdmVWYWx1ZShrZXkpKTsKKwkJCQkgKi8KKwkJCX0gLy8gaWYKKwkJCWVsc2UgeworCQkJCS8vIE5vCisJCQkJaWYgKHRvb2x0aXAgIT0gbnVsbCkgeworCQkJCQl0b29sdGlwLmhpZGUoKTsKKwkJCQl9CisJCQl9CisJCX0gLy8gbW91c2VIb3ZlcgorCisJfSAvLyBNb3VzZUhvdmVySGFuZGxlcgorCisJLyoqCisJICogQHBhcmFtIGUKKwkgKiAgICAgICAgICAgIGEgbW91c2UgZXZlbnQKKwkgKiBAcmV0dXJuIHRoZSBwb2x5Z29uIHRoZSBtYXRjaGVzIHRoZSBwb3NpdGlvbiBvZiB0aGUgbW91c2UsIG9yCisJICogICAgICAgICA8Y29kZT5udWxsPC9jb2RlPiBpZiB0aGVyZSBpcyBubyBzdWNoIHBvbHlnb24uCisJICovCisJU3RlbVBvbHlnb24gZ2V0UG9seWdvbihmaW5hbCBNb3VzZUV2ZW50IGUpIHsKKwkJLy8gQ29udmVydCBmcm9tIGNhbnZhcyBzcGFjZSBjb29yZGluYXRlcyB0byBsYXQvbG9uZyBieSB0aGUgaW52ZXJzZQorCQkvLyB0cmFuc2Zvcm0uCisJCS8vZmluYWwgUG9pbnQgbGF0TG9uZ1Bvc2l0aW9uID0gaW52ZXJzZU1hcChuZXcgUG9pbnQoZS54LCBlLnkpKTsKKwkJZmluYWwgUG9pbnQgbGF0TG9uZ1Bvc2l0aW9uID0gcG9pbnRzVHJhbnNmb3JtZXIuZ2V0SW52ZXJzZWRQb2ludChlLngsIGUueSk7CisJCXJldHVybiBnZXRQb2x5Z29uKGxhdExvbmdQb3NpdGlvbik7CisJCQorCX0gLy8gZ2V0UG9seWdvbgorCQorCS8qKgorCSAqIEBwYXJhbSBwb2ludCBhIHBvaW50IChwcm9iYWJseSB3aXRoaW4gdGhlIHBvbHlnb24pCisJICogQHJldHVybiB0aGUgcG9seWdvbiB0aGUgbWF0Y2hlcyB0aGUgcG9zaXRpb24gb2YgdGhlIHBvaW50LCBvcgorCSAqICAgICAgICAgPGNvZGU+bnVsbDwvY29kZT4gaWYgdGhlcmUgaXMgbm8gc3VjaCBwb2x5Z29uLgorCSAqLworCVN0ZW1Qb2x5Z29uIGdldFBvbHlnb24oZmluYWwgUG9pbnQgcG9pbnQpIHsKKwkJU3RlbVBvbHlnb24gcmV0VmFsdWUgPSBudWxsOworCQkKKwkJaWYgKHBvaW50ICE9IG51bGwgJiYgcG9seWdvbnNUb1JlbmRlciAhPSBudWxsKSB7CisJCQkvLyBGaW5kIHRoZSBQb2x5Z29uIHRoYXQgY29udGFpbnMgdGhlIGxhdC9sb25nIGNvb3JkaW5hdGVzCisJCQlyZXRWYWx1ZSA9IHBvbHlnb25zVG9SZW5kZXIuZ2V0Q29udGFpbmluZ1JlZ2lvblBvbHlnb24ocG9pbnQpOworCQl9IC8vIGlmCisJCXJldHVybiByZXRWYWx1ZTsKKwl9IC8vIGdldFBvbHlnb24KKworCS8qKgorCSAqIEFkZHMgb2Zmc2V0cyB0byB0aGUgY3VycmVudCB0cmFuc2xhdGlvbi4KKwkgKiAKKwkgKiBAcGFyYW0geFRyYW5zbGF0aW9uQWRkaXRpb24KKwkgKiBAcGFyYW0geVRyYW5zbGF0aW9uQWRkaXRpb24KKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBhZGRUcmFuc2xhdGlvbihmaW5hbCBkb3VibGUgeFRyYW5zbGF0aW9uQWRkaXRpb24sCisJCQlmaW5hbCBkb3VibGUgeVRyYW5zbGF0aW9uQWRkaXRpb24pIHsKKwkJdGhpcy54VHJhbnNsYXRpb24gKz0gKHhUcmFuc2xhdGlvbkFkZGl0aW9uIC8gem9vbUZhY3Rvcik7CisJCXRoaXMueVRyYW5zbGF0aW9uICs9ICh5VHJhbnNsYXRpb25BZGRpdGlvbiAvIHpvb21GYWN0b3IpOworCQl0b1VwZGF0ZVRyYW5mb3JtID0gdHJ1ZTsKKwkJcmVkcmF3KCk7CisJfSAvLyBhZGRUcmFuc2xhdGlvbgorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb25Qcm92aWRlciNhZGRTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIob3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyKQorCSAqLworCXB1YmxpYyB2b2lkIGFkZFNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcigKKwkJCWZpbmFsIElTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIgbGlzdGVuZXIpIHsKKwkJc2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVycy5hZGQobGlzdGVuZXIpOworCX0KKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uUHJvdmlkZXIjcmVtb3ZlU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyKG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcikKKwkgKi8KKwlwdWJsaWMgdm9pZCByZW1vdmVTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIoCisJCQlmaW5hbCBJU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyIGxpc3RlbmVyKSB7CisJCXNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcnMucmVtb3ZlKGxpc3RlbmVyKTsKKwl9CisKKwkvKioKKwkgKiBAcmV0dXJuIHRoZSBzZWxlY3Rpb24KKwkgKi8KKwlwdWJsaWMgZmluYWwgSVNlbGVjdGlvbiBnZXRTZWxlY3Rpb24oKSB7CisJCXJldHVybiBzZWxlY3Rpb247CisJfQorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb25Qcm92aWRlciNzZXRTZWxlY3Rpb24ob3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uKQorCSAqLworCXB1YmxpYyB2b2lkIHNldFNlbGVjdGlvbihmaW5hbCBJU2VsZWN0aW9uIHNlbGVjdGlvbikgeworCQl0aGlzLnNlbGVjdGlvbiA9IHNlbGVjdGlvbjsKKwkJZmlyZVNlbGVjdGlvbihzZWxlY3Rpb24pOworCX0KKworCXZvaWQgZmlyZVNlbGVjdGlvbihmaW5hbCBJU2VsZWN0aW9uIHNlbGVjdGlvbikgeworCisJCWZpbmFsIFNlbGVjdGlvbkNoYW5nZWRFdmVudCBldmVudCA9IG5ldyBTZWxlY3Rpb25DaGFuZ2VkRXZlbnQodGhpcywKKwkJCQlzZWxlY3Rpb24pOworCQlmb3IgKGZpbmFsIElTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIgbGlzdGVuZXIgOiBzZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXJzKSB7CisJCQlsaXN0ZW5lci5zZWxlY3Rpb25DaGFuZ2VkKGV2ZW50KTsKKwkJfSAvLyBmb3IgZWFjaCBJU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyCisKKwl9IC8vIGZpcmVTZWxlY3Rpb24KKworCS8qKgorCSAqIEBwYXJhbSBjb2xvclByb3ZpZGVyIHRoZSBjb2xvclByb3ZpZGVyIHRvIHNldAorCSAqLworCXB1YmxpYyB2b2lkIHNldENvbG9yUHJvdmlkZXIoQ29sb3JQcm92aWRlckFkYXB0ZXIgY29sb3JQcm92aWRlcikgeworCQl0aGlzLmNvbG9yUHJvdmlkZXIgPSBjb2xvclByb3ZpZGVyOworCQkKKy8vCQlpZihjb2xvclByb3ZpZGVyIGluc3RhbmNlb2YgQWJzdHJhY3RSZWxhdGl2ZVZhbHVlQ29sb3JQcm92aWRlckFkYXB0ZXIpIHsKKy8vCQkJQWJzdHJhY3RSZWxhdGl2ZVZhbHVlQ29sb3JQcm92aWRlckFkYXB0ZXIgYyA9IChBYnN0cmFjdFJlbGF0aXZlVmFsdWVDb2xvclByb3ZpZGVyQWRhcHRlcikgY29sb3JQcm92aWRlcjsKKy8vCQkJZHJhd0NvbG9yU2NhbGUoYyk7CisvLwkJfQorCQkKKwl9CisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLldpZGdldCNkaXNwb3NlKCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBkaXNwb3NlKCkgewkKKwkJdG9vbHRpcCA9IG51bGw7CisKKwkJcmVtb3ZlUGFpbnRMaXN0ZW5lcih0aGlzKTsKKwkJcmVtb3ZlTW91c2VXaGVlbExpc3RlbmVyKHRoaXMpOworCQlyZW1vdmVNb3VzZVRyYWNrTGlzdGVuZXIobW91c2VUcmFja0hhbmRsZXIpOworCQlyZW1vdmVNb3VzZU1vdmVMaXN0ZW5lcih0aGlzKTsKKwkJcmVtb3ZlS2V5TGlzdGVuZXIoa2V5SGFuZGxlcik7CQkKKwkJcmVtb3ZlRGlzcG9zZUxpc3RlbmVyKHRoaXMpOworCQlyZW1vdmVNb3VzZUxpc3RlbmVyKG1vdXNlQnV0dG9uSGFuZGxlcik7CisJCXJlbW92ZU1vdXNlVHJhY2tMaXN0ZW5lcihtb3VzZUhvdmVySGFuZGxlcik7CisJfQorCit9IC8vIE1hcENhbnZhcwpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3ZpZXdzL2dlb2dyYXBoaWMvbWFwL01hcENvbnRyb2wuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS92aWV3cy9nZW9ncmFwaGljL21hcC9NYXBDb250cm9sLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzM3MGM3YQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS92aWV3cy9nZW9ncmFwaGljL21hcC9NYXBDb250cm9sLmphdmEKQEAgLTAsMCArMSw0NCBAQAorLy8gTWFwQ29udHJvbC5qYXZhCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0udWkudmlld3MuZ2VvZ3JhcGhpYy5tYXA7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS51aS52aWV3cy5nZW9ncmFwaGljLkdlb2dyYXBoaWNDb250cm9sOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udWkudmlld3MuZ2VvZ3JhcGhpYy5HZW9ncmFwaGljUmVuZGVyZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LlNXVDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGU7CisKKy8qKgorICogVGhpcyBjbGFzcyBpcyBhIFNXVCB7QGxpbmsgQ29tcG9zaXRlfSB0aGF0IGRpc3BsYXlzIExhdC9Mb25nIGRhdGEgYWRhcHRlZAorICogZnJvbSB0aGUgY29udGVudHMgb2YgdGhlIGNhbm9uaWNhbCBncmFwaCBpbiBhCisgKiB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNjZW5hcmlvLlNjZW5hcmlvfSBiZWluZyBzaW11bGF0ZWQuIEl0CisgKiBsaXN0ZW5zIGZvciBjaGFuZ2VzIGluIHRoZQorICoge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uam9icy5zaW11bGF0aW9uLlNpbXVsYXRpb259IGFuZCB0aGVuIHJlZHJhd3MgaXRzCisgKiB2aWV3IGFzIGFwcHJvcHJpYXRlLgorICovCitwdWJsaWMgY2xhc3MgTWFwQ29udHJvbCBleHRlbmRzIEdlb2dyYXBoaWNDb250cm9sIHsKKworCS8qKgorCSAqIEBwYXJhbSBwYXJlbnQKKwkgKiAgICAgICAgICAgIHRoZSBwYXJlbnQge0BsaW5rIENvbXBvc2l0ZX0gb2YgdGhlIDxjb2RlPk1hcENvbnRyb2w8L2NvZGU+CisJICovCisJcHVibGljIE1hcENvbnRyb2woZmluYWwgQ29tcG9zaXRlIHBhcmVudCkgeworCQlzdXBlcihwYXJlbnQsIFNXVC5OT05FKTsKKwl9IC8vIE1hcENvbnRyb2wKKworCS8qKgorCSAqIEByZXR1cm4gdGhlIHtAbGluayBHZW9ncmFwaGljUmVuZGVyZXJ9IHRvIHVzZS4KKwkgKi8KKwlwcm90ZWN0ZWQgR2VvZ3JhcGhpY1JlbmRlcmVyIGNyZWF0ZUdlb2dyYXBoaWNSZW5kZXJlcigpIHsKKwkJcmV0dXJuIG5ldyBNYXBSZW5kZXJlcih0aGlzLCBTV1QuTk9ORSk7CisJfQorfSAvLyBNYXBDb250cm9sCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvdmlld3MvZ2VvZ3JhcGhpYy9tYXAvTWFwQ29udHJvbEZhY3RvcnkuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS92aWV3cy9nZW9ncmFwaGljL21hcC9NYXBDb250cm9sRmFjdG9yeS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMxZTdiMmYKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvdmlld3MvZ2VvZ3JhcGhpYy9tYXAvTWFwQ29udHJvbEZhY3RvcnkuamF2YQpAQCAtMCwwICsxLDMzIEBACisvLyBNYXBDb250cm9sRmFjdG9yeS5qYXZhCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0udWkudmlld3MuZ2VvZ3JhcGhpYy5tYXA7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnVpLnZpZXdzLmdlb2dyYXBoaWMuR2VvZ3JhcGhpY0NvbnRyb2w7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS51aS52aWV3cy5nZW9ncmFwaGljLkdlb2dyYXBoaWNDb250cm9sRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGU7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioKKyAqIFRoaXMgY2xhc3MgcmVwcmVzZW50cworICovCitjbGFzcyBNYXBDb250cm9sRmFjdG9yeSBpbXBsZW1lbnRzIEdlb2dyYXBoaWNDb250cm9sRmFjdG9yeSB7CisKKwlzdGF0aWMgTWFwQ29udHJvbEZhY3RvcnkgSU5TVEFOQ0UgPSBuZXcgTWFwQ29udHJvbEZhY3RvcnkoKTsKKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS51aS52aWV3cy5nZW9ncmFwaGljLkdlb2dyYXBoaWNDb250cm9sRmFjdG9yeSNjcmVhdGUoQ29tcG9zaXRlKQorCSAqLworCXB1YmxpYyBHZW9ncmFwaGljQ29udHJvbCBjcmVhdGUoZmluYWwgQ29tcG9zaXRlIHBhcmVudCkgeworCQlyZXR1cm4gbmV3IE1hcENvbnRyb2wocGFyZW50KTsKKwl9CisKK30gLy8gTWFwQ29udHJvbEZhY3RvcnkKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS92aWV3cy9nZW9ncmFwaGljL21hcC9NYXBSZW5kZXJlci5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3ZpZXdzL2dlb2dyYXBoaWMvbWFwL01hcFJlbmRlcmVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTJmN2NlZQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS92aWV3cy9nZW9ncmFwaGljL21hcC9NYXBSZW5kZXJlci5qYXZhCkBAIC0wLDAgKzEsMTM2IEBACisvLyBNYXBSZW5kZXJlci5qYXZhCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0udWkudmlld3MuZ2VvZ3JhcGhpYy5tYXA7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLk1lbnVNYW5hZ2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlNlbGVjdGlvbkNoYW5nZWRFdmVudDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmpvYnMuc2ltdWxhdGlvbi5JU2ltdWxhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnVpLmFkYXB0ZXJzLmNvbG9yLkNvbG9yUHJvdmlkZXJBZGFwdGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udWkudmlld3MuZ2VvZ3JhcGhpYy5HZW9ncmFwaGljUmVuZGVyZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LlNXVDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QubGF5b3V0LkZpbGxMYXlvdXQ7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlOworCisvKioKKyAqIFRoaXMgY2xhc3MgcmVuZGVycyBnZW9ncmFwaGljIGRhdGEgKGxhdC9sb25nKSBpbnRvIGEgImZsYXQgbWFwIiB2aXN1YWwKKyAqIHJlcHJlc2VudGF0aW9uLgorICovCitwdWJsaWMgY2xhc3MgTWFwUmVuZGVyZXIgZXh0ZW5kcyBHZW9ncmFwaGljUmVuZGVyZXIgaW1wbGVtZW50cyBJU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyIHsKKworCXByaXZhdGUgTWFwQ2FudmFzIG1hcENhbnZhczsKKwlwcml2YXRlIE1lbnVNYW5hZ2VyIG1lbnVNYW5hZ2VyOworCisJLyoqCisJICogQHBhcmFtIHBhcmVudAorCSAqIEBwYXJhbSBzdHlsZQorCSAqLworCXB1YmxpYyBNYXBSZW5kZXJlcihDb21wb3NpdGUgcGFyZW50LCBpbnQgc3R5bGUpIHsKKwkJc3VwZXIocGFyZW50LCBzdHlsZSk7CisJCXNldFNpemUoU1dULkRFRkFVTFQsIDEwMCk7CisJCQorCQlmaW5hbCBGaWxsTGF5b3V0IGxheW91dCA9IG5ldyBGaWxsTGF5b3V0KCk7CisJCWxheW91dC5tYXJnaW5IZWlnaHQgPSBNQVJHSU5fSEVJR0hUOworCQlsYXlvdXQubWFyZ2luV2lkdGggPSBNQVJHSU5fV0lEVEg7CisJCXNldExheW91dChsYXlvdXQpOworCisJCQorCQltYXBDYW52YXMgPSBuZXcgTWFwQ2FudmFzKHRoaXMsIFNXVC5OT05FKTsKKwkJbWFwQ2FudmFzLnNldEdhaW5GYWN0b3IoZ2FpbkZhY3Rvcik7CisJCW1hcENhbnZhcy5zZXREcmF3UG9seWdvbkJvcmRlcnMoZHJhd1BvbHlnb25Cb3JkZXJzKTsKKy8vCQltYXBDYW52YXMuc2V0UG9seWdvblN0cm9rZShwb2x5Z29uU3Ryb2tlKTsKKwkJbWFwQ2FudmFzLnNldENvbG9yUHJvdmlkZXIoY29sb3JQcm92aWRlckFkYXB0ZXIpOworCQkKKwkJcGFjaygpOworCisJCW1hcENhbnZhcy5hZGRTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIodGhpcyk7CisKKwkJbWVudU1hbmFnZXIgPSBjcmVhdGVDb250ZXh0TWVudU1hbmFnZXIoKTsKKwkJbWFwQ2FudmFzLnNldE1lbnUobWVudU1hbmFnZXIuY3JlYXRlQ29udGV4dE1lbnUodGhpcykpOworCX0gLy8gTWFwUmVuZGVyZXIKKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS51aS52aWV3cy5nZW9ncmFwaGljLkdlb2dyYXBoaWNSZW5kZXJlciNyZW5kZXIob3JnLmVjbGlwc2Uuc3RlbS51aS52aWV3cy5nZW9ncmFwaGljLm1hcC5TdGVtUG9seWdvbnNMaXN0KQorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIHJlbmRlcihTdGVtUG9seWdvbnNMaXN0IHBvbHlnb25zVG9SZW5kZXIsIElTaW11bGF0aW9uIHNpbXVsYXRpb24pIHsKKwkJbWFwQ2FudmFzLnNldEdhaW5GYWN0b3IodGhpcy5nYWluRmFjdG9yKTsKKwkJbWFwQ2FudmFzLnNldFVzZUxvZ1NjYWxpbmcodGhpcy51c2VMb2dTY2FsaW5nKTsKKwkJbWFwQ2FudmFzLnJlbmRlcihwb2x5Z29uc1RvUmVuZGVyLCBzaW11bGF0aW9uKTsKKwl9CisKKwkKKwkvKioKKwkgKiBAcmV0dXJuCisJICovCisJcHVibGljIE1hcENhbnZhcyBnZXRDYW52YXMoKQorCXsKKwkJcmV0dXJuIG1hcENhbnZhczsKKwl9CisJCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnVpLnZpZXdzLmdlb2dyYXBoaWMuR2VvZ3JhcGhpY1JlbmRlcmVyI3Jlc2V0KCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCByZXNldCgpIHsKKwkJc3VwZXIucmVzZXQoKTsKKwkJbWFwQ2FudmFzLnJlc2V0KCk7CisJCW1hcENhbnZhcy5zZXREcmF3UG9seWdvbkJvcmRlcnMoZHJhd1BvbHlnb25Cb3JkZXJzKTsKKwkJbWFwQ2FudmFzLnNldEdhaW5GYWN0b3IoZ2FpbkZhY3Rvcik7CisJCW1hcENhbnZhcy5zZXRVc2VMb2dTY2FsaW5nKHVzZUxvZ1NjYWxpbmcpOworCX0gLy8gcmVzZXQKKworCXByb3RlY3RlZCB2b2lkIHRvZ2dsZURyYXdQb2x5Z29uQm9yZGVyc0Nob2ljZSgpIHsKKwkJc3VwZXIudG9nZ2xlRHJhd1BvbHlnb25Cb3JkZXJzQ2hvaWNlKCk7CisJCW1hcENhbnZhcy5zZXREcmF3UG9seWdvbkJvcmRlcnMoZHJhd1BvbHlnb25Cb3JkZXJzKTsKKwkJcmVkcmF3KCk7CisJfSAvLyB0b2dnbGVEcmF3UG9seWdvbkJvcmRlcnNDaG9pY2UKKworCXByb3RlY3RlZCB2b2lkIHRvZ2dsZVVzZUxvZ1NjYWxpbmcoKSB7CisJCXN1cGVyLnRvZ2dsZVVzZUxvZ1NjYWxpbmcoKTsKKwkJbWFwQ2FudmFzLnNldFVzZUxvZ1NjYWxpbmcodXNlTG9nU2NhbGluZyk7CisJfSAvLyB0b2dnbGVVc2VMb2dTY2FsaW5nCisKKwkvKioKKwkgKiBAcmV0dXJuIHRoZSBNZW51TWFuYWdlcgorCSAqLworCXB1YmxpYyBNZW51TWFuYWdlciBnZXRNZW51TWFuYWdlcigpIHsKKwkJcmV0dXJuIG1lbnVNYW5hZ2VyOworCX0gLy8gZ2V0TWVudU1hbmFnZXIKKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS51aS52aWV3cy5nZW9ncmFwaGljLkdlb2dyYXBoaWNSZW5kZXJlciNzZXRDb2xvclByb3ZpZGVyQWRhcHRlcihvcmcuZWNsaXBzZS5zdGVtLnVpLmFkYXB0ZXJzLmNvbG9yLkNvbG9yUHJvdmlkZXJBZGFwdGVyKQorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIHNldENvbG9yUHJvdmlkZXJBZGFwdGVyKENvbG9yUHJvdmlkZXJBZGFwdGVyIGNvbG9yUHJvdmlkZXIpIHsKKwkJc3VwZXIuc2V0Q29sb3JQcm92aWRlckFkYXB0ZXIoY29sb3JQcm92aWRlcik7CisJCW1hcENhbnZhcy5zZXRDb2xvclByb3ZpZGVyKGNvbG9yUHJvdmlkZXIpOworCX0KKwkKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lciNzZWxlY3Rpb25DaGFuZ2VkKG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuU2VsZWN0aW9uQ2hhbmdlZEV2ZW50KQorCSAqLworCXB1YmxpYyB2b2lkIHNlbGVjdGlvbkNoYW5nZWQoU2VsZWN0aW9uQ2hhbmdlZEV2ZW50IGV2ZW50KSB7CisJCWZpcmVTZWxlY3Rpb24oZXZlbnQuZ2V0U2VsZWN0aW9uKCkpOworCX0KKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS51aS52aWV3cy5nZW9ncmFwaGljLkdlb2dyYXBoaWNSZW5kZXJlciNkaXNwb3NlKCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBkaXNwb3NlKCkgewkJCisJCXN1cGVyLmRpc3Bvc2UoKTsKKwkJbWFwQ2FudmFzLnJlbW92ZVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcih0aGlzKTsKKwl9CisKK30gLy8gTWFwUmVuZGVyZXIKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS92aWV3cy9nZW9ncmFwaGljL21hcC9NYXBWaWV3LmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvdmlld3MvZ2VvZ3JhcGhpYy9tYXAvTWFwVmlldy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY0YzExNjkKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvdmlld3MvZ2VvZ3JhcGhpYy9tYXAvTWFwVmlldy5qYXZhCkBAIC0wLDAgKzEsMTEyIEBACisvLyBNYXBWaWV3LmphdmEKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS51aS52aWV3cy5nZW9ncmFwaGljLm1hcDsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUHJlZmVyZW5jZXMuSVByb3BlcnR5Q2hhbmdlTGlzdGVuZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlByZWZlcmVuY2VzLlByb3BlcnR5Q2hhbmdlRXZlbnQ7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLk1lbnVNYW5hZ2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvblByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uam9icy5zaW11bGF0aW9uLlNpbXVsYXRpb25NYW5hZ2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udWkuQWN0aXZhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udWkudmlld3MuSUNvbnRleHRNZW51VXBkYXRlc0xpc3RlbmVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udWkudmlld3MuZ2VvZ3JhcGhpYy5HZW9ncmFwaGljVmlld2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5wYXJ0LlZpZXdQYXJ0OworCisvKioKKyAqIFRoaXMgY2xhc3MgaXMgYSB7QGxpbmsgVmlld1BhcnR9IHRoYXQgcmVuZGVycyBMYXQvTG9uZyBkYXRhIGZvciBhY3RpdmUKKyAqIFNpbXVsYXRpb25zLgorICovCitwdWJsaWMgY2xhc3MgTWFwVmlldyBleHRlbmRzIFZpZXdQYXJ0IGltcGxlbWVudHMgSUNvbnRleHRNZW51VXBkYXRlc0xpc3RlbmVyIHsKKworCS8qKgorCSAqIFRoZSBJRCBvZiB0aGUgTWFwIFZpZXcuCisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgSURfTUFQX1ZJRVcgPSAib3JnLmVjbGlwc2Uuc3RlbS51aS52aWV3cy5nZW9ncmFwaGljLm1hcCI7CisKKwkvKioKKwkgKiBUaGUgdmlld2VyIHRoYXQgZGlzcGxheXMgdGhlIGdlb2dyYXBoaWMgc3RhdGUgb2YgdGhlIHNpbXVsYXRpb25zLgorCSAqLworCXByaXZhdGUgR2VvZ3JhcGhpY1ZpZXdlciBnZW9ncmFwaGljVmlld2VyOworCisJLyoqCisJICogRGVmYXVsdCBDb25zdHJ1Y3RvcgorCSAqLworCXB1YmxpYyBNYXBWaWV3KCkgeworCQlzdXBlcigpOworCQkvLyBTZXQgdGhlIHZhbHVlcyBvZiB2YXJpb3VzIHZpc3VhbGl6YXRpb24gcHJlZmVyZW5jZXMKKwkJc2V0UHJlZmVyZW5jZXMoKTsKKworCQl0cnkgeworCQkJLy8gTGlzdGVuIGZvciBjaGFuZ2VzIHRvIHRoZSBwcmVmZXJlbmNlcyBhbmQgY2hhbmdlIHRoZSB2YWx1ZSB3ZQorCQkJLy8gdXNlIGlmIHRoZSB1c2VyIGNoYW5nZXMgdGhlIHZhbHVlIG9uIHRoZSBwcmVmZXJlbmNlIHBhZ2UuCisJCQlBY3RpdmF0b3IuZ2V0RGVmYXVsdCgpLmdldFBsdWdpblByZWZlcmVuY2VzKCkKKwkJCQkJLmFkZFByb3BlcnR5Q2hhbmdlTGlzdGVuZXIobmV3IElQcm9wZXJ0eUNoYW5nZUxpc3RlbmVyKCkgeworCQkJCQkJcHVibGljIHZvaWQgcHJvcGVydHlDaGFuZ2UoQFN1cHByZXNzV2FybmluZ3MoInVudXNlZCIpCisJCQkJCQlmaW5hbCBQcm9wZXJ0eUNoYW5nZUV2ZW50IGV2ZW50KSB7CisJCQkJCQkJc2V0UHJlZmVyZW5jZXMoKTsKKwkJCQkJCX0gLy8gcHJvcGVydHlDaGFuZ2UKKwkJCQkJfSAvLyBJUHJvcGVydHlDaGFuZ2VMaXN0ZW5lcgorCQkJCQkpOworCQl9IGNhdGNoIChmaW5hbCBFeGNlcHRpb24gZSkgeworCQkJLy8gSWdub3JlCisJCX0gLy8gY2F0Y2ggRXhjZXB0aW9uCisKKwl9IC8vIE1hcFZpZXcKKworCS8qKgorCSAqIFNldCBwcmVmZXJlbmNlcworCSAqLworCXZvaWQgc2V0UHJlZmVyZW5jZXMoKSB7CisJCS8vIE5vdGhpbmcgeWV0CisJfSAvLyBzZXRQcmVmZXJlbmNlcworCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS51aS5wYXJ0LldvcmtiZW5jaFBhcnQjY3JlYXRlUGFydENvbnRyb2wob3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlKQorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGNyZWF0ZVBhcnRDb250cm9sKGZpbmFsIENvbXBvc2l0ZSBwYXJlbnQpIHsKKwkJZ2VvZ3JhcGhpY1ZpZXdlciA9IG5ldyBHZW9ncmFwaGljVmlld2VyKHBhcmVudCwKKwkJCQlNYXBDb250cm9sRmFjdG9yeS5JTlNUQU5DRSk7CisJCS8vU2V0IHRoaXMgaW5zdGFuY2UgdG8gYmUgYSBsaXN0ZW5lciBmb3IgY29udGV4dCBtZW51IHVwZGF0ZXMKKwkJZ2VvZ3JhcGhpY1ZpZXdlci5hZGRDb250ZXh0TWVudVVwZGF0ZUxpc3RlbmVyKHRoaXMpOworCQlnZW9ncmFwaGljVmlld2VyLnNldElucHV0KFNpbXVsYXRpb25NYW5hZ2VyLmdldE1hbmFnZXIoKSk7CisJCWdldFNpdGUoKS5zZXRTZWxlY3Rpb25Qcm92aWRlcihnZW9ncmFwaGljVmlld2VyKTsKKwl9IC8vIGNyZWF0ZVBhcnRDb250cm9sCisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnVpLnBhcnQuV29ya2JlbmNoUGFydCNzZXRGb2N1cygpCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgc2V0Rm9jdXMoKSB7CisJCS8vIE5vdGhpbmcKKwl9CisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnVpLnBhcnQuV29ya2JlbmNoUGFydCNkaXNwb3NlKCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBkaXNwb3NlKCkgeworCQlnZXRTaXRlKCkuc2V0U2VsZWN0aW9uUHJvdmlkZXIobnVsbCk7CisJCWdlb2dyYXBoaWNWaWV3ZXIucmVtb3ZlQ29udGV4dE1lbnVVcGRhdGVMaXN0ZW5lcih0aGlzKTsKKwkJZ2VvZ3JhcGhpY1ZpZXdlci5zZXRJbnB1dChudWxsKTsJCQorCX0gLy8gZGlzcG9zZQorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnVpLnZpZXdzLklDb250ZXh0TWVudVVwZGF0ZXNMaXN0ZW5lciNvbkNvbnRleHRNZW51VXBkYXRlKG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5NZW51TWFuYWdlciwgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uUHJvdmlkZXIpCisJICovCisJcHVibGljIHZvaWQgb25Db250ZXh0TWVudVVwZGF0ZShNZW51TWFuYWdlciBtZW51TWFuYWdlciwgSVNlbGVjdGlvblByb3ZpZGVyIHNlbGVjdGlvblByb3ZpZGVyKSB7CisJCWdldFNpdGUoKS5yZWdpc3RlckNvbnRleHRNZW51KCJvcmcuZWNsaXBzZS5zdGVtLnVpLnZpZXdzLmdlb2dyYXBoaWMubWFwLmNvbnRleHQiLCBtZW51TWFuYWdlciwgc2VsZWN0aW9uUHJvdmlkZXIpOworCX0KKworfSAvLyBNYXBWaWV3CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvdmlld3MvZ2VvZ3JhcGhpYy9tYXAvTWVzc2FnZXMuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS92aWV3cy9nZW9ncmFwaGljL21hcC9NZXNzYWdlcy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZkNzljZTMKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvdmlld3MvZ2VvZ3JhcGhpYy9tYXAvTWVzc2FnZXMuamF2YQpAQCAtMCwwICsxLDQyIEBACisvLyBNZXNzYWdlcy5qYXZhCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0udWkudmlld3MuZ2VvZ3JhcGhpYy5tYXA7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgamF2YS51dGlsLk1pc3NpbmdSZXNvdXJjZUV4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLnV0aWwuUmVzb3VyY2VCdW5kbGU7CisKKy8qKgorICogVGhpcyBjbGFzcyBnZXRzIE5MUyB2YWx1ZXMuCisgKi8KK3B1YmxpYyBjbGFzcyBNZXNzYWdlcyB7CisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEJVTkRMRV9OQU1FID0gIm9yZy5lY2xpcHNlLnN0ZW0udWkudmlld3MuZ2VvZ3JhcGhpYy5tYXAubWVzc2FnZXMiOyAvLyROT04tTkxTLTEkCisKKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBSZXNvdXJjZUJ1bmRsZSBSRVNPVVJDRV9CVU5ETEUgPSBSZXNvdXJjZUJ1bmRsZQorCQkJLmdldEJ1bmRsZShCVU5ETEVfTkFNRSk7CisKKwlwcml2YXRlIE1lc3NhZ2VzKCkgeworCQkvLyBOb3RoaW5nCisJfQorCisJLyoqCisJICogQHBhcmFtIGtleQorCSAqIEByZXR1cm4gdGhlIHN0cmluZyBtYXRjaGluZyB0aGUga2V5CisJICovCisJcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0U3RyaW5nKFN0cmluZyBrZXkpIHsKKwkJdHJ5IHsKKwkJCXJldHVybiBSRVNPVVJDRV9CVU5ETEUuZ2V0U3RyaW5nKGtleSk7CisJCX0gY2F0Y2ggKE1pc3NpbmdSZXNvdXJjZUV4Y2VwdGlvbiBlKSB7CisJCQlyZXR1cm4gJyEnICsga2V5ICsgJyEnOworCQl9CisJfQorfSAvLyBNZXNzYWdlcwpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3ZpZXdzL2dlb2dyYXBoaWMvbWFwL1NlbGVjdGVkUmVwb3J0c01hbmFnZXIuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS92aWV3cy9nZW9ncmFwaGljL21hcC9TZWxlY3RlZFJlcG9ydHNNYW5hZ2VyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzI3NzI4ZQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS92aWV3cy9nZW9ncmFwaGljL21hcC9TZWxlY3RlZFJlcG9ydHNNYW5hZ2VyLmphdmEKQEAgLTAsMCArMSwxNjYgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS51aS52aWV3cy5nZW9ncmFwaGljLm1hcDsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OworaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOworaW1wb3J0IGphdmEudXRpbC5MaXN0OworaW1wb3J0IGphdmEudXRpbC5NYXA7CisKKy8vJEFOQUxZU0lTLUlHTk9SRQorLyoqCisgKiBUaGUgcHVycG9zZSBvZiB0aGlzIDxpPlNpbmdsZXRvbjwvaT4gY2xhc3MgaXQgdG8ga2VlcCB0aGUgY3VycmVudCBzdGF0dXMgb2YKKyAqIGFsbCBlbmFibGVkL2Rpc2FibGVkIHJlcG9ydHMgZm9yIHRoZSBzcGVjaWZpYyBNYXBDb250cm9sLiBFYWNoIE1hcENvbnRyb2wgaGFzCisgKiBhIGNvbnRleHQgbWVudSB3aXRoIGEgbGlzdCBvZiByZXBvcnRzIHRoYXQgY2FuIGJlIGdlbmVyYXRlZCBvbmNlIHRoZSB1c2VyCisgKiBsZWZ0LWNsaWNrcyBvbiBhbiBhcmVhIGluIHRoZSBtYXAuIFRoZSB1c2VyIGNhbiBkaXNhYmxlL2VuYWJsZSBzb21lIG9yIGFsbCBvZgorICogdGhlIHJlcG9ydHMgdXNpbmcgdGhpcyBjb250ZXh0IG1lbnUuIFRoaXMgY2xhc3Mga2VlcHMgY3VycmVudCBzdGF0dXMgZm9yIGVhY2gKKyAqIG9uZSBvZiB0aGVzZSBtZW51cy4KKyAqLworcHVibGljIGNsYXNzIFNlbGVjdGVkUmVwb3J0c01hbmFnZXIgeworCS8qKgorCSAqIFRoZSBzaW5nbGUgaW5zdGFuY2Ugb2YgdGhpcyBjbGFzcworCSAqLworCXByaXZhdGUgc3RhdGljIFNlbGVjdGVkUmVwb3J0c01hbmFnZXIgaW5zdGFuY2U7CisJLyoqCisJICogTGlzdCBvZiByZXBvcnRzIElEcyB0aGF0IGhhcyBiZWVuIGVuYWJsZWQgZm9yIHRoZSBzcGVjaWZpYyBNYXBDYW52YXMKKwkgKi8KKwlwcml2YXRlIGZpbmFsIE1hcDxNYXBDYW52YXMsIExpc3Q8U3RyaW5nPj4gZW5hYmxlZFJlcG9ydHNNYXAgPSBuZXcgSGFzaE1hcDxNYXBDYW52YXMsIExpc3Q8U3RyaW5nPj4oKTsKKwkvKioKKwkgKiBMaXN0IG9mIHJlcG9ydHMgdGhhdCBoYXMgYmVlbiBjbGlja2VkIGJlZm9yZS4gSW5pdCBzdGF0ZSBpcyB0aGF0IGFsbAorCSAqIHJlcG9ydHMgYXJlIGVuYWJsZWQuCisJICovCisJcHJpdmF0ZSBmaW5hbCBNYXA8TWFwQ2FudmFzLCBMaXN0PFN0cmluZz4+IGFscmVhZHlTZWxlY3RlZFJlcG9ydHMgPSBuZXcgSGFzaE1hcDxNYXBDYW52YXMsIExpc3Q8U3RyaW5nPj4oKTsKKwkvKioKKwkgKiBUaGUgcmVjZW50IE1hcENhbnZhcyB0aGF0IHRoZSB1c2VyIGNsaWNrZWQgb24gd2l0aCB0aGUgbW91c2UgKGFueSBtb3VzZQorCSAqIGJ1dHRvbikKKwkgKi8KKwlwcml2YXRlIE1hcENhbnZhcyByZWNlbnRDbGlja2VkTWFwQ2FudmFzID0gbnVsbDsKKworCS8qKgorCSAqIFByaXZhdGUgY29uc3RydWN0b3IgYXMgaXQgaXMgU2luZ2xldG9uIGNsYXNzCisJICovCisJcHJpdmF0ZSBTZWxlY3RlZFJlcG9ydHNNYW5hZ2VyKCkgeworCQkvLyBEbyBub3RoaW5nCisJfQorCisJLyoqCisJICogVGhlIG1ldGhvZCB3aWxsIHJldHVybiB0aGUgc2luZ2xlIGluc3RhbmNlIG9mIHRoaXMgY2xhc3MKKwkgKiAKKwkgKiBAcmV0dXJuIFRoZSBzaW5nbGUgaW5zdGFuY2Ugb2YgdGhpcyBjbGFzcworCSAqLworCXB1YmxpYyBzdGF0aWMgU2VsZWN0ZWRSZXBvcnRzTWFuYWdlciBnZXRJbnN0YW5jZSgpIHsKKwkJaWYgKGluc3RhbmNlID09IG51bGwpIHsKKwkJCWluc3RhbmNlID0gbmV3IFNlbGVjdGVkUmVwb3J0c01hbmFnZXIoKTsKKwkJfQorCQlyZXR1cm4gaW5zdGFuY2U7CisJfQorCisJLyoqCisJICogVGhlIG1ldGhvZCB3aWxsIG1hcmsgdGhlIHNwZWNpZmljIHJlcG9ydCBhcyBlbmFibGVkLgorCSAqIAorCSAqIEBwYXJhbSByZXBvcnRJRAorCSAqICAgICAgICAgICAgVGhlIHJlcG9ydCBJRCB0byBiZSBlbmFibGVkCisJICovCisJcHVibGljIHZvaWQgZW5hYmxlUmVwb3J0Rm9ySWRlbnRpZmlhYmxlKGZpbmFsIFN0cmluZyByZXBvcnRJRCkgeworCQlMaXN0PFN0cmluZz4gZW5hYmxlZFJlcG9ydHMgPSBudWxsOworCQlpZiAoZW5hYmxlZFJlcG9ydHNNYXAuY29udGFpbnNLZXkocmVjZW50Q2xpY2tlZE1hcENhbnZhcykpIHsKKwkJCWVuYWJsZWRSZXBvcnRzID0gZW5hYmxlZFJlcG9ydHNNYXAuZ2V0KHJlY2VudENsaWNrZWRNYXBDYW52YXMpOworCQkJZW5hYmxlZFJlcG9ydHNNYXAucmVtb3ZlKHJlY2VudENsaWNrZWRNYXBDYW52YXMpOworCQl9CisJCWlmIChudWxsID09IGVuYWJsZWRSZXBvcnRzKSB7CisJCQllbmFibGVkUmVwb3J0cyA9IG5ldyBBcnJheUxpc3Q8U3RyaW5nPigpOworCQl9CisJCWVuYWJsZWRSZXBvcnRzLmFkZChyZXBvcnRJRCk7CisJCWVuYWJsZWRSZXBvcnRzTWFwLnB1dChyZWNlbnRDbGlja2VkTWFwQ2FudmFzLCBlbmFibGVkUmVwb3J0cyk7CisJfQorCisJLyoqCisJICogVGhlIG1ldGhvZCB3aWxsIG1hcmsgdGhlIHNwZWNpZmljIHJlcG9ydCBhcyBkaXNhYmxlZC4KKwkgKiAKKwkgKiBAcGFyYW0gcmVwb3J0SUQKKwkgKiAgICAgICAgICAgIFRoZSByZXBvcnQgSUQgdG8gYmUgZGlzYWJsZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBkaXNhYmxlUmVwb3J0Rm9ySWRlbnRpZmlhYmxlKGZpbmFsIFN0cmluZyByZXBvcnRJRCkgeworCQlMaXN0PFN0cmluZz4gZW5hYmxlZFJlcG9ydHMgPSBudWxsOworCQlpZiAoZW5hYmxlZFJlcG9ydHNNYXAuY29udGFpbnNLZXkocmVjZW50Q2xpY2tlZE1hcENhbnZhcykpIHsKKwkJCWVuYWJsZWRSZXBvcnRzID0gZW5hYmxlZFJlcG9ydHNNYXAuZ2V0KHJlY2VudENsaWNrZWRNYXBDYW52YXMpOworCQkJZW5hYmxlZFJlcG9ydHNNYXAucmVtb3ZlKHJlY2VudENsaWNrZWRNYXBDYW52YXMpOworCQl9CisJCWlmIChudWxsICE9IGVuYWJsZWRSZXBvcnRzKSB7CisJCQllbmFibGVkUmVwb3J0cy5yZW1vdmUocmVwb3J0SUQpOworCQl9CisJCUxpc3Q8U3RyaW5nPiBpbml0aWFsaXplZFJlcG9ydHMgPSBhbHJlYWR5U2VsZWN0ZWRSZXBvcnRzCisJCQkJLmdldChyZWNlbnRDbGlja2VkTWFwQ2FudmFzKTsKKwkJaWYgKGluaXRpYWxpemVkUmVwb3J0cyA9PSBudWxsKSB7CisJCQlpbml0aWFsaXplZFJlcG9ydHMgPSBuZXcgQXJyYXlMaXN0PFN0cmluZz4oKTsKKwkJfQorCQlpbml0aWFsaXplZFJlcG9ydHMuYWRkKHJlcG9ydElEKTsKKwkJaWYgKGFscmVhZHlTZWxlY3RlZFJlcG9ydHMuY29udGFpbnNLZXkocmVjZW50Q2xpY2tlZE1hcENhbnZhcykpIHsKKwkJCWFscmVhZHlTZWxlY3RlZFJlcG9ydHMucmVtb3ZlKHJlY2VudENsaWNrZWRNYXBDYW52YXMpOworCQl9CisJCWFscmVhZHlTZWxlY3RlZFJlcG9ydHMucHV0KHJlY2VudENsaWNrZWRNYXBDYW52YXMsIGluaXRpYWxpemVkUmVwb3J0cyk7CisJfQorCisJLyoqCisJICogVGhlIG1ldGhvZCB3aWxsIGNoZWNrIHdoZXRoZXIgdGhlIHNwZWNpZmljIHJlcG9ydCBpcyBlbmFibGVkIG9yIGRpc2FibGVkCisJICogZm9yIHRoZSBjdXJyZW50IE1hcENhbnZhcy4KKwkgKiAKKwkgKiBAcGFyYW0gcmVwb3J0SUQKKwkgKiAgICAgICAgICAgIFJlcG9ydCBJRCB0byBiZSBjaGVja2VkCisJICogQHJldHVybiA8Y29kZT50cnVlPC9jb2RlPiBpZiB0aGUgcmVwb3J0IGlzIGVuYWJsZWQgYW5kCisJICogICAgICAgICA8Y29kZT5mYWxzZTwvY29kZT4gaWYgbm90CisJICovCisJcHVibGljIGJvb2xlYW4gaXNSZXBvcnRFbmFibGVkKGZpbmFsIFN0cmluZyByZXBvcnRJRCkgeworCQlmaW5hbCBMaXN0PFN0cmluZz4gaW5pdGlhbGl6ZWRSZXBvcnRzID0gYWxyZWFkeVNlbGVjdGVkUmVwb3J0cworCQkJCS5nZXQocmVjZW50Q2xpY2tlZE1hcENhbnZhcyk7CisJCWlmIChpbml0aWFsaXplZFJlcG9ydHMgPT0gbnVsbAorCQkJCXx8ICFpbml0aWFsaXplZFJlcG9ydHMuY29udGFpbnMocmVwb3J0SUQpKSB7CisJCQlyZXR1cm4gdHJ1ZTsKKwkJfQorCisJCWlmICghZW5hYmxlZFJlcG9ydHNNYXAuY29udGFpbnNLZXkocmVjZW50Q2xpY2tlZE1hcENhbnZhcykpIHsKKwkJCXJldHVybiBmYWxzZTsKKwkJfQorCQlmaW5hbCBMaXN0PFN0cmluZz4gZW5hYmxlZFJlcG9ydHMgPSBlbmFibGVkUmVwb3J0c01hcAorCQkJCS5nZXQocmVjZW50Q2xpY2tlZE1hcENhbnZhcyk7CisJCWlmIChlbmFibGVkUmVwb3J0cyA9PSBudWxsIHx8ICFlbmFibGVkUmVwb3J0cy5jb250YWlucyhyZXBvcnRJRCkpIHsKKwkJCXJldHVybiBmYWxzZTsKKwkJfQorCQlyZXR1cm4gdHJ1ZTsKKwl9CisKKwkvKioKKwkgKiBHZXQgdGhlIE1hcENhbnZhcyB0aGF0IHRoZSB1c2VyIGNsaWNrZWQgb24KKwkgKiAKKwkgKiBAcmV0dXJuIHRoZSBNYXBDYW52YXMgdGhhdCB0aGUgdXNlciBjbGlja2VkIG9uCisJICovCisJcHVibGljIE1hcENhbnZhcyBnZXRSZWNlbnRDbGlja2VkTWFwQ2FudmFzKCkgeworCQlyZXR1cm4gcmVjZW50Q2xpY2tlZE1hcENhbnZhczsKKwl9CisKKwkvKioKKwkgKiBTZXQgdGhlIE1hcENhbnZhcyB0aGF0IHRoZSB1c2VyIGNsaWNrZWQgb24KKwkgKiAKKwkgKiBAcGFyYW0gcmVjZW50Q2xpY2tlZE1hcENhbnZhcworCSAqICAgICAgICAgICAgdGhlIE1hcENhbnZhcyB0aGF0IHRoZSB1c2VyIGNsaWNrZWQgb24KKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRSZWNlbnRDbGlja2VkTWFwQ2FudmFzKGZpbmFsIE1hcENhbnZhcyByZWNlbnRDbGlja2VkTWFwQ2FudmFzKSB7CisJCXRoaXMucmVjZW50Q2xpY2tlZE1hcENhbnZhcyA9IHJlY2VudENsaWNrZWRNYXBDYW52YXM7CisJfQorCisJLyoqCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIE9iamVjdCBjbG9uZSgpIHRocm93cyBDbG9uZU5vdFN1cHBvcnRlZEV4Y2VwdGlvbiB7CisJCXRocm93IG5ldyBDbG9uZU5vdFN1cHBvcnRlZEV4Y2VwdGlvbigpOworCX0KK30KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS92aWV3cy9nZW9ncmFwaGljL21hcC9TdGVtUG9seWdvbi5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3ZpZXdzL2dlb2dyYXBoaWMvbWFwL1N0ZW1Qb2x5Z29uLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODQzNGNiMAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS92aWV3cy9nZW9ncmFwaGljL21hcC9TdGVtUG9seWdvbi5qYXZhCkBAIC0wLDAgKzEsMjY5IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0udWkudmlld3MuZ2VvZ3JhcGhpYy5tYXA7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIAorICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiAKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdCAKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sIAorICogCisgKiBDb250cmlidXRvcnM6IAorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiAKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5JZGVudGlmaWFibGU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5hZGFwdGVycy5zcGF0aWFsLmdlby5MYXRMb25nLlNlZ21lbnQ7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmdyYXBoaWNzLlBvaW50OworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ncmFwaGljcy5SZWN0YW5nbGU7CisKKy8qKgorICogQSBzdWItY2xhc3Mgb2YgamF2YS5hd3QuUG9seWdvbiB0aGF0IGhhcyBhbiBleHRyYSBmaWVsZCBzYXZpbmcgdGhlIHJlbGF0aXZlCisgKiB2YWx1ZSBvZiB0aGUgcG9seWdvbi4gVGhlIHJlbGF0aXZlIHZhbHVlcyBjb3VsZCBiZSB1c2VkIGZvciBpbnRlbnNpdHkgdmFsdWVzCisgKiBvZiB0aGUgbGFiZWxzLgorICovCitwdWJsaWMgY2xhc3MgU3RlbVBvbHlnb24geworCisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IExBVElUVURFX0RJUkVDVElPTiA9IC0xOworCisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgbG9uZyBzZXJpYWxWZXJzaW9uVUlEID0gMUw7CisJCisJLyoqCisJICogVGhpcyB2YWx1ZSBpcyBzZWxlY3RlZCB0byBjb252ZXJ0IGxhdC9sb25nIHZhbHVlcyB0byBpbnRlZ2VycyB3aXRoIHNpeAorCSAqIGRpZ2l0cyBvZiBwcmVjaXNpb24gZXh0cmFjdGVkIGZyb20gdGhlIG9yaWdpbmFsIGRvdWJsZSB2YWx1ZXMuCisJICovCisJcHJpdmF0ZSBmaW5hbCBzdGF0aWMgaW50IHNjYWxpbmdGYWN0b3JGb3JEYXRhID0gMTAwMDAwMDsKKworCS8qKgorCSAqIFRoaXMgaXMgdGhlIHtAbGluayBJZGVudGlmaWFibGV9IGluc3RhbmNlIGFzc29jaWF0ZWQgd2l0aCB0aGUgcG9seWdvbi4KKwkgKi8KKwlwcml2YXRlIHRyYW5zaWVudCBJZGVudGlmaWFibGUgaWRlbnRpZmlhYmxlOworCQorCS8qKgorCSAqIEFuIGFycmF5IG9mIGFsbCBwb2ludHMgKGJldHRlciB1c2VkIGJ5IFNXVCBkcmF3aW5nKQorCSAqLworCXB1YmxpYyBpbnRbXSBwb2ludHMgPSBudWxsOworCS8qKgorCSAqIEFuIGFycmF5IG9mIGFsbCBwb2ludHMsIHRyYW5zZm9ybWVkIHRvIHNjYWxlIGFuZCBvZmZzZXRzCisJICovCisJcHVibGljIGludFtdIHRyYW5zZm9ybWVkUG9pbnRzID0gbnVsbDsKKwlwcml2YXRlIGludCBtaW5YID0gSW50ZWdlci5NQVhfVkFMVUUsIG1pblkgPSBJbnRlZ2VyLk1BWF9WQUxVRSwgbWF4WCA9IEludGVnZXIuTUlOX1ZBTFVFLCBtYXhZID0gSW50ZWdlci5NSU5fVkFMVUU7CisKKwkvKioKKwkgKiBFbXB0eSBjb25zdHJ1Y3Rvci4KKwkgKiAKKwkgKi8KKwlwdWJsaWMgU3RlbVBvbHlnb24oKSB7CisJCXN1cGVyKCk7CisJfQorCisJLyoqCisJICogR2V0cyBhIGxpc3Qgb2YgYSBsYXRMb25nRGF0YSBhcnJheXMsIGFuZCB0cmFuc2Zvcm1zIGl0IGludG8gYSBQb2x5Z29uLgorCSAqIAorCSAqIEBwYXJhbSBsYXRMb25nU2VnbWVudAorCSAqIEBwYXJhbSBpZGVudGlmaWFibGUKKwkgKiAgICAgICAgICAgIHRoZSB7QGxpbmsgSWRlbnRpZmlhYmxlfSBhc3NvY2lhdGVkIHdpdGggdGhlIHBvbHlnb24uCisJICovCisJcHVibGljIFN0ZW1Qb2x5Z29uKGZpbmFsIFNlZ21lbnQgbGF0TG9uZ1NlZ21lbnQsIGZpbmFsIElkZW50aWZpYWJsZSBpZGVudGlmaWFibGUpIHsKKwkJc3VwZXIoKTsKKwkJdGhpcy5pZGVudGlmaWFibGUgPSBpZGVudGlmaWFibGU7CisKKwkJZmluYWwgaW50IHNpemUgPSBsYXRMb25nU2VnbWVudC5zaXplKCk7CisJCXBvaW50cyA9IG5ldyBpbnRbMipzaXplXTsKKworCQlmb3IgKGludCBpID0gMCwgcG9pbnRzSW5kZXggPSAwOyBpIDwgc2l6ZTsgaSsrLCBwb2ludHNJbmRleCs9MikgeworCQkJYWRkUG9pbnQobGF0TG9uZ1NlZ21lbnQubG9uZ2l0dWRlKGkpLCBsYXRMb25nU2VnbWVudC5sYXRpdHVkZShpKSwgcG9pbnRzSW5kZXgpOworCQl9CisJCS8vIH0KKwl9IC8vIFN0ZW1Qb2x5Z29uCisKKy8vCS8qKgorLy8JICogQWRkIGxhdExvbmcgY29vcmRpbmF0ZXMgdG8gYSBwb2x5Z29uLgorLy8JICogCisvLwkgKiBAcGFyYW0gbGF0TG9uZ0RhdGEKKy8vCSAqLworLy8JcHVibGljIHZvaWQgYWRkTGF0TG9uZ0RhdGEoZmluYWwgTGF0TG9uZyBsYXRMb25nRGF0YSkgeworLy8JCWZpbmFsIExpc3Q8U2VnbWVudD4gbGF0TG9uZ1NlZ21lbnRzTGlzdCA9IGxhdExvbmdEYXRhLmdldFNlZ21lbnRzKCk7CisvLworLy8JCWZvciAoZmluYWwgU2VnbWVudCBsYXRMb25nU2VnbWVudCA6IGxhdExvbmdTZWdtZW50c0xpc3QpIHsKKy8vCQkJaWYgKGxhdExvbmdTZWdtZW50LmlzUG9seWdvbigpKSB7CisvLwkJCQlmaW5hbCBpbnQgc2l6ZSA9IGxhdExvbmdTZWdtZW50LnNpemUoKTsKKy8vCQkJCWZvciAoaW50IGkgPSAwLCBwb2ludHNJbmRleCA9IDA7IGkgPCBzaXplOyBpKyssIHBvaW50c0luZGV4Kz0yKSB7CisvLwkJCQkJYWRkUG9pbnQobGF0TG9uZ1NlZ21lbnQubG9uZ2l0dWRlKGkpLCBsYXRMb25nU2VnbWVudAorLy8JCQkJCQkJLmxhdGl0dWRlKGkpLCBwb2ludHNJbmRleCk7CisvLwkJCQl9CisvLwkJCX0KKy8vCQl9IC8vIGZvcgorLy8JfSAvLyBhZGRMYXRMb25nRGF0YQorCisJLyoqCisJICogCisJICogQHBhcmFtIGxvbmdpdHVkZQorCSAqICAgICAgICAgICAgbG9uZ2l0dWRlIHZhbHVlCisJICogQHBhcmFtIGxhdGl0dWRlCisJICogICAgICAgICAgICBsYXRpdHVkZSB2YWx1ZQorCSAqIEBwYXJhbSBwb2ludHNJbmRleCAKKwkgKi8KKwlwcml2YXRlIHZvaWQgYWRkUG9pbnQoZmluYWwgZG91YmxlIGxvbmdpdHVkZSwgZmluYWwgZG91YmxlIGxhdGl0dWRlLCBmaW5hbCBpbnQgcG9pbnRzSW5kZXgpIHsKKwkJaW50IHggPSAoaW50KShsb25naXR1ZGUgKiBzY2FsaW5nRmFjdG9yRm9yRGF0YSk7IAorCQlpbnQgeSA9IChpbnQpKGxhdGl0dWRlICogc2NhbGluZ0ZhY3RvckZvckRhdGEgKiBMQVRJVFVERV9ESVJFQ1RJT04pOworCQlwb2ludHNbcG9pbnRzSW5kZXhdID0geDsKKwkJcG9pbnRzW3BvaW50c0luZGV4KzFdID0geTsKKwkJCisJCW1heFggPSBNYXRoLm1heCh4LCBtYXhYKTsKKwkJbWF4WSA9IE1hdGgubWF4KHksIG1heFkpOworCQltaW5YID0gTWF0aC5taW4oeCwgbWluWCk7CisJCW1pblkgPSBNYXRoLm1pbih5LCBtaW5ZKTsgCisJfSAvLyBhZGRQb2ludAorCQorCS8qKgorCSAqIEBwYXJhbSBwb2ludHNUcmFuc2Zvcm1lciB0aGUgcG9pbnRzVHJhbnNmb3JtZXIgdG8gc2V0CisJICovCisJcHVibGljIHZvaWQgc2V0UG9pbnRzVHJhbnNmb3JtZXIoU3RlbVBvbHlnb25UcmFuc2Zvcm0gcG9pbnRzVHJhbnNmb3JtZXIpIHsKKwkJdHJhbnNmb3JtZWRQb2ludHMgPSBuZXcgaW50W2dldE51bWJlck9mUG9pbnRzKCkqMl07CQkKKwkJZm9yIChpbnQgaT0wOyBpPGdldE51bWJlck9mUG9pbnRzKCk7IGkrKykgeworCQkJaW50IHhCZWZvcmUgPSBwb2ludHNbMippXTsKKwkJCWludCB5QmVmb3JlID0gcG9pbnRzWzIqaSsxXTsKKwkJCWludCB4QWZ0ZXIgPSAoaW50KSAoKHhCZWZvcmUgKiBwb2ludHNUcmFuc2Zvcm1lci5nZXRTY2FsZSgpKSArIHBvaW50c1RyYW5zZm9ybWVyLmdldE9mZnNldFgoKSk7CisJCQlpbnQgeUFmdGVyID0gKGludCkoKHlCZWZvcmUgKiBwb2ludHNUcmFuc2Zvcm1lci5nZXRTY2FsZSgpKSArIHBvaW50c1RyYW5zZm9ybWVyLmdldE9mZnNldFkoKSk7CisJCQl0cmFuc2Zvcm1lZFBvaW50c1syKmldID0geEFmdGVyOworCQkJdHJhbnNmb3JtZWRQb2ludHNbMippKzFdID0geUFmdGVyOworCQl9CisJfQorCisJLyoqCisJICogbWV0aG9kIHRvIHVuc2NhbGUgdGhlIHZhbHVlIHRoYXQgaGFkIGJlZW4gc2NhbGVkIGJ5IHRoZSBhYm92ZSBhZGRQb2ludAorCSAqIG1ldGhvZC4KKwkgKiAKKwkgKiBAcGFyYW0gbG9uZ2l0dWRlCisJICogQHJldHVybiB1bnNjYWxlZCB2YWx1ZQorCSAqLworCXB1YmxpYyBkb3VibGUgdW5TY2FsZUxvbmdpdHVkZShmaW5hbCBkb3VibGUgbG9uZ2l0dWRlKSB7CisJCXJldHVybiBsb25naXR1ZGUgLyBzY2FsaW5nRmFjdG9yRm9yRGF0YTsKKwl9CisKKwkvKioKKwkgKiBtZXRob2QgdG8gdW5zY2FsZSB0aGUgdmFsdWUgdGhhdCBoYWQgYmVlbiBzY2FsZWQgYnkgdGhlIGFib3ZlIGFkZFBvaW50CisJICogbWV0aG9kLgorCSAqIAorCSAqIEBwYXJhbSBsYXRpdHVkZQorCSAqIEByZXR1cm4gdW5zY2FsZWQgdmFsdWUKKwkgKi8KKwlwdWJsaWMgZG91YmxlIHVuU2NhbGVMYXRpdHVkZShmaW5hbCBkb3VibGUgbGF0aXR1ZGUpIHsKKwkJcmV0dXJuIGxhdGl0dWRlIC8gc2NhbGluZ0ZhY3RvckZvckRhdGEgKiBMQVRJVFVERV9ESVJFQ1RJT047CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgdGl0bGUgb2YgdGhlIHBvbHlnb24uCisJICogCisJICogQHJldHVybiBTdHJpbmcKKwkgKi8KKwlwdWJsaWMgU3RyaW5nIGdldFRpdGxlKCkgeworCQlyZXR1cm4gaWRlbnRpZmlhYmxlLmdldER1YmxpbkNvcmUoKS5nZXRUaXRsZSgpOworCX0gLy8gZ2V0VGl0bGUKKworCS8qKgorCSAqIEByZXR1cm4gdGhlIDxjb2RlPklkZW50aWZpYWJsZTwvY29kZT4KKwkgKi8KKwlwdWJsaWMgZmluYWwgSWRlbnRpZmlhYmxlIGdldElkZW50aWZpYWJsZSgpIHsKKwkJcmV0dXJuIGlkZW50aWZpYWJsZTsKKwl9CisKKwkvKioKKwkgKiBAcGFyYW0gaWRlbnRpZmlhYmxlCisJICogICAgICAgICAgICB0aGUgPGNvZGU+SWRlbnRpZmlhYmxlPC9jb2RlPiB0byBzZXQKKwkgKi8KKwlwdWJsaWMgZmluYWwgdm9pZCBzZXRJZGVudGlmaWFibGUoZmluYWwgSWRlbnRpZmlhYmxlIGlkZW50aWZpYWJsZSkgeworCQl0aGlzLmlkZW50aWZpYWJsZSA9IGlkZW50aWZpYWJsZTsKKwl9CisJCisJLyoqCisJICogVGhlIG1ldGhvZCByZXR1cm5zIHRoZSBzbWFsbGVzdCB7QGxpbmsgUmVjdGFuZ2xlfSB0aGF0IGJvdW5kcyBvZiB0aGUgcG9seWdvbi4KKwkgKiBAcmV0dXJuIHtAbGluayBSZWN0YW5nbGV9IG9mIHRoZSBib3VuZHMgb2YgdGhlIHBvbHlnb24KKwkgKi8KKwlwdWJsaWMgUmVjdGFuZ2xlIGdldEJvdW5kcygpIHsKKwkJaWYgKG1pblggPT0gSW50ZWdlci5NQVhfVkFMVUUgJiYgbWF4WSA9PSBJbnRlZ2VyLk1JTl9WQUxVRSkgeworCQkJcmV0dXJuIG51bGw7CisJCX0KKwkJUmVjdGFuZ2xlIGJvdW5kcyA9IG5ldyBSZWN0YW5nbGUobWluWCwgbWluWSwgKG1heFggLSBtaW5YKSwgKG1heFkgLSBtaW5ZKSk7CisJCXJldHVybiBib3VuZHM7CisJfQorCQorCS8qKgorCSAqIFJldHVybnMgd2hldGhlciB0aGUgcG9pbnQgKHgseSkgaXMgY29udGFpbmVkIGluc2lkZSB0aGlzIHBvbHlnb24uIAorCSAqIEBwYXJhbSBwb2ludCB0aGUgWCBhbmQgWSBjb29yZGluYXRlcworCSAqIEByZXR1cm4gd2hldGhlciB0aGUgcG9pbnQgKHgseSkgaXMgY29udGFpbmVkIGluIHRoaXMgcG9seWdvbgorCSAqLworCXB1YmxpYyBib29sZWFuIGNvbnRhaW5zUG9pbnQoUG9pbnQgcG9pbnQpIHsKKwkJcmV0dXJuIGNvbnRhaW5zUG9pbnQocG9pbnQueCwgcG9pbnQueSk7CisJfQorCQorCS8qKgorCSAqIFJldHVybnMgd2hldGhlciB0aGUgcG9pbnQgKHgseSkgaXMgY29udGFpbmVkIGluc2lkZSB0aGlzIHBvbHlnb24uIAorCSAqIEBwYXJhbSB4IFRoZSBYIHZhbHVlIG9mIHRoZSBwb2ludAorCSAqIEBwYXJhbSB5IFRoZSBZIHZhbHVlIG9mIHRoZSBwb2ludAorCSAqIEByZXR1cm4gd2hldGhlciB0aGUgcG9pbnQgKHgseSkgaXMgY29udGFpbmVkIGluIHRoaXMgcG9seWdvbgorCSAqLworCXB1YmxpYyBib29sZWFuIGNvbnRhaW5zUG9pbnQoaW50IHgsIGludCB5KSB7CisJCWludCBpLCBqOworCQlib29sZWFuIGlzSW5zaWRlID0gZmFsc2U7CisJCWludCBudW1PZlBvaW50cyA9IHBvaW50cy5sZW5ndGggLyAyOworICAgICAgICAKKwkJZm9yIChpID0gMCwgaiA9IChudW1PZlBvaW50cy0xKSoyOyBpIDwgcG9pbnRzLmxlbmd0aC0xOyApIHsKKwkJCWlmICgoKChwb2ludHNbaSsxXTw9eSkgJiYgKHk8cG9pbnRzW2orMV0pKSB8fAorCQkJCSgocG9pbnRzW2orMV08PXkpICYmICh5PHBvaW50c1tpKzFdKSkpICYmCisJCQkJKHggPCAocG9pbnRzW2pdIC0gIHBvaW50c1tpXSkgKiAoeSAtIHBvaW50c1tpKzFdKSAvIChwb2ludHNbaisxXSAtIHBvaW50c1tpKzFdKSArIHBvaW50c1tpXSkpIHsKKwkJCQlpc0luc2lkZSA9ICFpc0luc2lkZTsKKwkJCX0KKwkJCWogPSBpOworCQkJaSArPSAyOwkJCQorCQl9CisJCXJldHVybiBpc0luc2lkZTsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBudW1iZXIgb2YgbGF0L2xvbmcgcG9pbnRzIHRoYXQgdGhpcyBwb2x5Z29uIGhhcworCSAqIEByZXR1cm4gdGhlIG51bWJlciBvZiBsYXQvbG9uZyBwb2ludHMKKwkgKi8KKwlwdWJsaWMgaW50IGdldE51bWJlck9mUG9pbnRzKCkgeworCQlpZiAocG9pbnRzID09IG51bGwpCisJCQlyZXR1cm4gMDsKKwkJcmV0dXJuIHBvaW50cy5sZW5ndGggLyAyOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIG5vbi1zY2FsZWQgdmFsdWUgb2YgdGhlIGxhdGl0dWRlIG9mIHRoZSBzcGVjaWZpYyBwb2ludAorCSAqIEBwYXJhbSBpIFBvaW50IGluZGV4CisJICogQHJldHVybiB0aGUgbm9uLXNjYWxlZCB2YWx1ZSBvZiB0aGUgbGF0aXR1ZGUgb2YgdGhlIHNwZWNpZmljIHBvaW50CisJICovCisJcHVibGljIGRvdWJsZSBnZXROb25TY2FsZWRMYXRpdHVkZShmaW5hbCBpbnQgaSkgeworCQlyZXR1cm4gKGRvdWJsZSlwb2ludHNbMippKzFdIC8gKGRvdWJsZSlzY2FsaW5nRmFjdG9yRm9yRGF0YTsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBub24tc2NhbGVkIHZhbHVlIG9mIHRoZSBsb25naXR1ZGUgb2YgdGhlIHNwZWNpZmljIHBvaW50CisJICogQHBhcmFtIGkgUG9pbnQgaW5kZXgKKwkgKiBAcmV0dXJuIHRoZSBub24tc2NhbGVkIHZhbHVlIG9mIHRoZSBsb25naXR1ZGUgb2YgdGhlIHNwZWNpZmljIHBvaW50CisJICovCisJcHVibGljIGRvdWJsZSBnZXROb25TY2FsZWRMb25naXR1ZGUoZmluYWwgaW50IGkpIHsKKwkJcmV0dXJuIChkb3VibGUpcG9pbnRzWzIqaV0gLyBzY2FsaW5nRmFjdG9yRm9yRGF0YSAqIExBVElUVURFX0RJUkVDVElPTjsKKwl9CisJCisJLyoqCisJICogUmV0dXJucyB0aGUgdW5zY2FsZWQgdmFsdWUgb2YgdGhlIHByb3ZpZGVkIGxhdGl0dWRlCisJICogQHBhcmFtIGxhdFZhbHVlIHRoZSBzY2FsZWQgbGF0aXR1ZGUgdmFsdWUKKwkgKiBAcmV0dXJuIHRoZSB1bnNjYWxlZCB2YWx1ZSBvZiB0aGUgcHJvdmlkZWQgbGF0aXR1ZGUKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGRvdWJsZSBnZXRVbnNjYWxlZExhdGl0dWRlKGZpbmFsIGludCBsYXRWYWx1ZSkgeworCQlyZXR1cm4gKGRvdWJsZSlsYXRWYWx1ZSAvIChkb3VibGUpc2NhbGluZ0ZhY3RvckZvckRhdGE7CisJfQorCQorCS8qKgorCSAqIFJldHVybnMgdGhlIHVuc2NhbGVkIHZhbHVlIG9mIHRoZSBwcm92aWRlZCBsb25naXR1ZGUKKwkgKiBAcGFyYW0gbG9uZ1ZhbHVlIHRoZSBzY2FsZWQgbGF0aXR1ZGUgdmFsdWUKKwkgKiBAcmV0dXJuIHRoZSB1bnNjYWxlZCB2YWx1ZSBvZiB0aGUgcHJvdmlkZWQgbG9uZ2l0dWRlCisJICovCisJcHVibGljIHN0YXRpYyBkb3VibGUgZ2V0VW5zY2FsZWRMb25naXR1ZGUoZmluYWwgaW50IGxvbmdWYWx1ZSkgeworCQlyZXR1cm4gKGRvdWJsZSlsb25nVmFsdWUgLyBzY2FsaW5nRmFjdG9yRm9yRGF0YSAqIExBVElUVURFX0RJUkVDVElPTjsKKwl9CisKK30gLy8gU3RlbVBvbHlnb24KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS92aWV3cy9nZW9ncmFwaGljL21hcC9TdGVtUG9seWdvblRyYW5zZm9ybS5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3ZpZXdzL2dlb2dyYXBoaWMvbWFwL1N0ZW1Qb2x5Z29uVHJhbnNmb3JtLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDNkYWZhMQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS92aWV3cy9nZW9ncmFwaGljL21hcC9TdGVtUG9seWdvblRyYW5zZm9ybS5qYXZhCkBAIC0wLDAgKzEsMTAwIEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0udWkudmlld3MuZ2VvZ3JhcGhpYy5tYXA7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDkgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgamF2YS5hd3QuUG9pbnQ7CitpbXBvcnQgamF2YS5hd3QuZ2VvbS5BZmZpbmVUcmFuc2Zvcm07CitpbXBvcnQgamF2YS5hd3QuZ2VvbS5Ob25pbnZlcnRpYmxlVHJhbnNmb3JtRXhjZXB0aW9uOworaW1wb3J0IGphdmEuYXd0Lmdlb20uUG9pbnQyRDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udWkuQWN0aXZhdG9yOworCisvKioKKyAqIFRyYW5zZm9ybSBjbGFzcyB0byB0cmFuc2Zvcm0gcG9pbnRzIGZyb20gb25lIGNvb3JkaW5hdGVzIHNwYWNlIHRvIGFub3RoZXIuCisgKiBPZmZzZXQgYW5kIHNjYWxlIHZhbHVlcyBhcmUgdGhlIHZhbHVlcyB0aGF0IHdpbGwgYWZmZWN0IHRoZSB0cmFuc2Zvcm1hdGlvbi4KKyAqIEBhdXRob3IgWW9zc2kgTWVzaWthIChJQk0pCisgKi8KK3B1YmxpYyBjbGFzcyBTdGVtUG9seWdvblRyYW5zZm9ybSB7CisJCisJcHJpdmF0ZSBkb3VibGUgb2Zmc2V0WCA9IDAuMGQ7CisJcHJpdmF0ZSBkb3VibGUgb2Zmc2V0WSA9IDAuMGQ7CisJcHJpdmF0ZSBkb3VibGUgc2NhbGUgPSAxLjBkOworCQorCXByaXZhdGUgUG9pbnQyRCBnZXRJbnZlcnNlZFBvaW50KFBvaW50IHRvSW52ZXJzZSkgeworCQlBZmZpbmVUcmFuc2Zvcm0gdHJhbnNmb3JtID0gbmV3IEFmZmluZVRyYW5zZm9ybSgpOworCQl0cmFuc2Zvcm0uc2V0VG9UcmFuc2xhdGlvbihvZmZzZXRYLCBvZmZzZXRZKTsKKwkJdHJhbnNmb3JtLnNjYWxlKHNjYWxlLCBzY2FsZSk7CisJCVBvaW50MkQgdG9SZXR1cm4gPSBuZXcgUG9pbnQyRC5Eb3VibGUoMCwgMCk7CisJCXRyeSB7CisJCQl0b1JldHVybiA9IHRyYW5zZm9ybS5pbnZlcnNlVHJhbnNmb3JtKHRvSW52ZXJzZSwgdG9SZXR1cm4pOworCQl9IGNhdGNoIChOb25pbnZlcnRpYmxlVHJhbnNmb3JtRXhjZXB0aW9uIGUpIHsKKwkJCUFjdGl2YXRvci5sb2dFcnJvcigiUHJvYmxlbSBpbnZlcnRpbmcgcG9pbnQgIiArIHRvSW52ZXJzZSwgZSk7CisJCQlyZXR1cm4gbmV3IFBvaW50KCk7CisJCX0KKwkJcmV0dXJuIHRvUmV0dXJuOworCX0KKwkKKwkvKioKKwkgKiBUaGUgbWV0aG9kIHdpbGwgcmV0dXJuIHRoZSBpbnZlcnRlZCBwb2ludCBvZiB0aGUgc3BlY2lmaWVkIGNvb3JkaW5hdGVzLgorCSAqIEkuZS4gaXQgd2lsbCBkbyByZXZlcnNlZCB0cmFuc2Zvcm1hdGlvbi4KKwkgKiBAcGFyYW0geCBYIHZhbHVlIG9mIHRoZSBwb2ludCB0byBiZSBpbnZlcnRlZAorCSAqIEBwYXJhbSB5IFkgdmFsdWUgb2YgdGhlIHBvaW50IHRvIGJlIGludmVydGVkCisJICogQHJldHVybiB0aGUgaW52ZXJ0ZWQgcG9pbnQgYXMgYW4gU1dUIHtAbGluayBvcmcuZWNsaXBzZS5zd3QuZ3JhcGhpY3MuUG9pbnR9CisJICovCisJcHVibGljIG9yZy5lY2xpcHNlLnN3dC5ncmFwaGljcy5Qb2ludCBnZXRJbnZlcnNlZFBvaW50KGZpbmFsIGludCB4LCBmaW5hbCBpbnQgeSkgeworCQlQb2ludDJEIHRyYW5zZm9ybWVkID0gZ2V0SW52ZXJzZWRQb2ludChuZXcgUG9pbnQoeCwgeSkpOworCQlyZXR1cm4gbmV3IG9yZy5lY2xpcHNlLnN3dC5ncmFwaGljcy5Qb2ludCgoaW50KXRyYW5zZm9ybWVkLmdldFgoKSwgKGludCl0cmFuc2Zvcm1lZC5nZXRZKCkpOwkJCisJfQorCisJLyoqCisJICogQHJldHVybiB0aGUgb2Zmc2V0WAorCSAqLworCXB1YmxpYyBkb3VibGUgZ2V0T2Zmc2V0WCgpIHsKKwkJcmV0dXJuIG9mZnNldFg7CisJfQorCisJLyoqCisJICogQHBhcmFtIG9mZnNldFggdGhlIG9mZnNldFggdG8gc2V0CisJICovCisJcHVibGljIHZvaWQgc2V0T2Zmc2V0WChkb3VibGUgb2Zmc2V0WCkgeworCQl0aGlzLm9mZnNldFggPSBvZmZzZXRYOworCX0KKworCS8qKgorCSAqIEByZXR1cm4gdGhlIG9mZnNldFkKKwkgKi8KKwlwdWJsaWMgZG91YmxlIGdldE9mZnNldFkoKSB7CisJCXJldHVybiBvZmZzZXRZOworCX0KKworCS8qKgorCSAqIEBwYXJhbSBvZmZzZXRZIHRoZSBvZmZzZXRZIHRvIHNldAorCSAqLworCXB1YmxpYyB2b2lkIHNldE9mZnNldFkoZG91YmxlIG9mZnNldFkpIHsKKwkJdGhpcy5vZmZzZXRZID0gb2Zmc2V0WTsKKwl9CisKKwkvKioKKwkgKiBAcmV0dXJuIHRoZSBzY2FsZQorCSAqLworCXB1YmxpYyBkb3VibGUgZ2V0U2NhbGUoKSB7CisJCXJldHVybiBzY2FsZTsKKwl9CisKKwkvKioKKwkgKiBAcGFyYW0gc2NhbGUgdGhlIHNjYWxlIHRvIHNldAorCSAqLworCXB1YmxpYyB2b2lkIHNldFNjYWxlKGRvdWJsZSBzY2FsZSkgeworCQl0aGlzLnNjYWxlID0gc2NhbGU7CisJfQorCQorfQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3ZpZXdzL2dlb2dyYXBoaWMvbWFwL1N0ZW1Qb2x5Z29uc0xpc3QuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS92aWV3cy9nZW9ncmFwaGljL21hcC9TdGVtUG9seWdvbnNMaXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTFiOGI0NAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS92aWV3cy9nZW9ncmFwaGljL21hcC9TdGVtUG9seWdvbnNMaXN0LmphdmEKQEAgLTAsMCArMSwxMTQgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS51aS52aWV3cy5nZW9ncmFwaGljLm1hcDsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuIAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyAKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0IAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwgCisgKiAKKyAqIENvbnRyaWJ1dG9yczogCisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqYXZhLnV0aWwuTGlua2VkTGlzdDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uSWRlbnRpZmlhYmxlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5FZGdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuYWRhcHRlcnMuc3BhdGlhbC5nZW8uTGF0TG9uZzsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmFkYXB0ZXJzLnNwYXRpYWwuZ2VvLkxhdExvbmcuU2VnbWVudDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLm5vZGVzLlJlZ2lvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZ3JhcGhpY3MuUG9pbnQ7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmdyYXBoaWNzLlJlY3RhbmdsZTsKKworLyoqCisgKiBBIGNsYXNzIHRoYXQgZXh0ZW5kcyB0aGUgTGlua2VkTGlzdDxzdGVtUG9seWdvbj4gY2xhc3MuIEl0IGhhcyBzb21lIGZpZWxkcworICogdGhhdCBoZWxwIGluIG1hbmFnaW5nIHRoZSBwb2x5Z29ucyBsaXN0IG9mIGEgbWFwLCBzdWNoIGFzIHRoZSBvZmZzZXQgbmVlZGVkCisgKiB0byBiZSBtYWRlIGluIG9yZGVyIHRvIGNlbnRyYWxpemUgdGhlIG1hcCwgdGhlIG9wdGltdW0gdmFsdWVzIG9mIHRoZSBtYXAKKyAqIGNvb3JkaW5hdGVzLCBldGMuCisgKiAKKyAqLworcHVibGljIGNsYXNzIFN0ZW1Qb2x5Z29uc0xpc3QgZXh0ZW5kcyBMaW5rZWRMaXN0PFN0ZW1Qb2x5Z29uPiB7CisKKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBsb25nIHNlcmlhbFZlcnNpb25VSUQgPSAxTDsKKworCXByaXZhdGUgdHJhbnNpZW50IFJlY3RhbmdsZSBib3VuZHMgPSBudWxsOworCisJLyoqCisJICogRW1wdHkgQ29uc3RydWN0b3IKKwkgKiAKKwkgKi8KKwlwdWJsaWMgU3RlbVBvbHlnb25zTGlzdCgpIHsKKwkJc3VwZXIoKTsKKwl9CisKKwkvKioKKwkgKiBDb25zdHJ1Y3RvciB3aGljaCBnZXRzIGEgTGF0TG9uZyBvYmplY3QgYW5kIGNvbnN0cnVjdHMgYSBsaXN0IG9mIHBvbHlnb25zCisJICogCisJICogQHBhcmFtIGxhdExvbmdEYXRhCisJICogQHBhcmFtIGlkZW50aWZpYWJsZQorCSAqICAgICAgICAgICAgdGhlIDxjb2RlPklkZW50aWZpYWJsZTwvY29kZT4gdGhhdCBpcyBhc3NvY2lhdGVkIHdpdGggdGhlCisJICogICAgICAgICAgICBwb2x5Z29uIGRhdGEuCisJICovCisJcHVibGljIFN0ZW1Qb2x5Z29uc0xpc3QoZmluYWwgTGF0TG9uZyBsYXRMb25nRGF0YSwKKwkJCWZpbmFsIElkZW50aWZpYWJsZSBpZGVudGlmaWFibGUpIHsKKwkJc3VwZXIoKTsKKwkJZm9yIChmaW5hbCBTZWdtZW50IGxhdExvbmdTZWdtZW50IDogbGF0TG9uZ0RhdGEuZ2V0U2VnbWVudHMoKSkgeworCQkJYWRkKG5ldyBTdGVtUG9seWdvbihsYXRMb25nU2VnbWVudCwgaWRlbnRpZmlhYmxlKSk7CisJCX0KKwl9IC8vIFN0ZW1Qb2x5Z29uc0xpc3QKKworCS8qKgorCSAqIENvbXBhcmUgdGhlIGJvdW5kYXJpZXMgb2YgYSBwb2x5Z29uIHRvIHRob3NlIG9mIHRoZSBsaXN0IGFuZCB1cGRhdGUgaWYKKwkgKiBuZWNlc3NhcnkuCisJICogCisJICogQHBhcmFtIHBvbHlnb24KKwkgKiAgICAgICAgICAgIHRoZSBwb2x5Z29uIHRvIHVzZSB0byB1cGRhdGUgdGhlIG1pbmltdW0vbWF4aW11bSB2YWx1ZXMKKwkgKi8KKwlwcml2YXRlIHZvaWQgdXBkYXRlQm91bmRzKGZpbmFsIFN0ZW1Qb2x5Z29uIHBvbHlnb24pIHsKKwkJLy9Pbmx5IHVwZGF0ZSB0aGUgYm91bmRzIGZvciBwb2x5Z29uIG9mIG5vZGVzCisJCWlmIChwb2x5Z29uLmdldElkZW50aWZpYWJsZSgpIGluc3RhbmNlb2YgRWRnZSkKKwkJCXJldHVybjsKKwkJLy8gQm91bmRzIHlldD8KKwkJaWYgKGJvdW5kcyAhPSBudWxsKSB7CisJCQkvLyBZZXMJCQkKKwkJCWJvdW5kcyA9IGJvdW5kcy51bmlvbihwb2x5Z29uLmdldEJvdW5kcygpKTsKKwkJfSAvLyBpZgorCQllbHNlIHsgCisJCQlib3VuZHMgPSBwb2x5Z29uLmdldEJvdW5kcygpOworCQl9CisJfSAvLyB1cGRhdGVCb3VuZHMKKworCS8qKgorCSAqIEByZXR1cm4gdGhlIGJvdW5kaW5nIGJveCB0aGF0IGNvbnRhaW5zIGFsbCBvZiB0aGUgcG9seWdvbnMgaW4gdGhlIGxpc3QuCisJICovCisJcHVibGljIGZpbmFsIFJlY3RhbmdsZSBnZXRCb3VuZHMoKSB7CisJCWZvciAoU3RlbVBvbHlnb24gcG9seWdvbiA6IHRoaXMpIHsKKwkJCXVwZGF0ZUJvdW5kcyhwb2x5Z29uKTsKKwkJfQorCQlyZXR1cm4gYm91bmRzOworCX0gLy8gZ2V0Qm91bmRzCisKKwkvKioKKwkgKiBAcGFyYW0gbGF0TG9uZ1Bvc2l0aW9uCisJICogICAgICAgICAgICB0aGUgcG9zaXRpb24gY29udGFpbmVkIGJ5IGEgcG9seWdvbiAob3Igbm90KQorCSAqIEByZXR1cm4gdGhlIHBvbHlnb24gdGhhdCBjb250YWlucyB0aGUgcG9pbnQsIG9yIDxjb2RlPm51bGw8L2NvZGU+IGlmCisJICogICAgICAgICB0aGUgcG9pbnQgbGllcyBvdXRzaWRlIG9mIGEgcG9seWdvbi4KKwkgKi8KKwlwdWJsaWMgU3RlbVBvbHlnb24gZ2V0Q29udGFpbmluZ1JlZ2lvblBvbHlnb24oZmluYWwgUG9pbnQgbGF0TG9uZ1Bvc2l0aW9uKSB7CisJCVN0ZW1Qb2x5Z29uIHJldFZhbHVlID0gbnVsbDsKKwkJZm9yIChmaW5hbCBTdGVtUG9seWdvbiBwb2x5Z29uIDogdGhpcykgeworCQkJLy8gRG9lcyB0aGUgcG9seWdvbiBjb250YWluIHRoZSBwb2ludD8KKwkJCWlmIChwb2x5Z29uLmNvbnRhaW5zUG9pbnQobGF0TG9uZ1Bvc2l0aW9uKSkgeworCQkJCS8vIFllcworCQkJCS8vSXMgdGhpcyBwb2x5Z29uIGEgcmVnaW9uPworCQkJCWlmIChwb2x5Z29uLmdldElkZW50aWZpYWJsZSgpIGluc3RhbmNlb2YgUmVnaW9uKSB7CisJCQkJCS8vWWVzCisJCQkJCXJldFZhbHVlID0gcG9seWdvbjsKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJfSAvLyBpZgorCQl9IC8vIGZvciBlYWNoIFN0ZW1Qb2x5Z29uCisJCXJldHVybiByZXRWYWx1ZTsKKwl9IC8vIGdldENvbnRhaW5pbmdQb2x5Z29uCit9IC8vIFN0ZW1Qb2x5Z29uc0xpc3QKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS92aWV3cy9nZW9ncmFwaGljL21hcC9tZXNzYWdlcy5wcm9wZXJ0aWVzIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3ZpZXdzL2dlb2dyYXBoaWMvbWFwL21lc3NhZ2VzLnByb3BlcnRpZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2NhZDI0NwotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS92aWV3cy9nZW9ncmFwaGljL21hcC9tZXNzYWdlcy5wcm9wZXJ0aWVzCkBAIC0wLDAgKzEsMzEgQEAKKyMgbWVzc2FnZXMucHJvcGVydGllcworIworIyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIyAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyMgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisjICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisjICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyMgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorIyAqCisjICogQ29udHJpYnV0b3JzOgorIyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworIyBTdGVtIFBvbHlnb24KKyMgTm90aGluZywgYWxsIGNvbW1vbgorCisjIEludGVybmFsIE1hcCBWaWV3CitJTVZpZXcuTVJlZnJlc2ggPSBQb2x5Z29uIFJlZnJlc2gKK0lNVmlldy5NUHJvcD1Ob3cgRGlzcGxheWluZworSU1WaWV3LkVkZ2VzID0gRWRnZXMKKworIyBNYXAgQ2FudmFzIGNvbnRleHQgbWVudSBtZXNzYWdlcworTWFwTWVudS5SZXNldD1SZXNldCBNYXAKK01hcE1lbnUuR2FpbkZhY3Rvcj1HYWluIEZhY3RvcgorTWFwTWVudS5Mb2dyaXRobWljX1NjYWxpbmc9TG9nYXJpdGhtaWMgU2NhbGluZworTWFwTWVudS5HYWluPUdhaW4KK01hcE1lbnUuTG9nU2NhbGU9TG9nIFNjYWxlCitNYXBNZW51LkxpblNjYWxlPUxpbmVhciBTY2FsZQorTWFwTWVudS5Qb2x5Z29uX0JvcmRlcnM9RHJhdyBQb2x5Z29uIEJvcmRlcnMKK01hcE1lbnUuUG9seWdvbl9DZW50ZXJzPUNvbm5lY3QgUG9seWdvbiBDZW50ZXJzCitNYXBNZW51LlJlcG9ydHNfU2VsZWN0PVNlbGVjdCBSZXBvcnRzCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvdmlld3MvZ2VvZ3JhcGhpYy9tYXAvbWVzc2FnZXNfZGUucHJvcGVydGllcyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS92aWV3cy9nZW9ncmFwaGljL21hcC9tZXNzYWdlc19kZS5wcm9wZXJ0aWVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFhMDg0YjUKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvdmlld3MvZ2VvZ3JhcGhpYy9tYXAvbWVzc2FnZXNfZGUucHJvcGVydGllcwpAQCAtMCwwICsxLDMxIEBACisjIG1lc3NhZ2VzLnByb3BlcnRpZXMKKyMKKyMgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyMgKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisjICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworIyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorIyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisjICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyMgKgorIyAqIENvbnRyaWJ1dG9yczoKKyMgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisjICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyMgU3RlbSBQb2x5Z29uCisjIE5vdGhpbmcsIGFsbCBjb21tb24KKworIyBJbnRlcm5hbCBNYXAgVmlldworSU1WaWV3Lk1SZWZyZXNoPVBvbHlnb25ha3R1YWxpc2llcnVuZworSU1WaWV3Lk1Qcm9wPUpldHp0IGFuZ2V6ZWlndAorSU1WaWV3LkVkZ2VzPUthbnRlbgorCisjIE1hcCBDYW52YXMgY29udGV4dCBtZW51IG1lc3NhZ2VzCitNYXBNZW51LlJlc2V0PUthcnRlIHp1clx1MDBmY2Nrc2V0emVuCitNYXBNZW51LkdhaW5GYWN0b3I9WnVuYWhtZWZha3RvcgorTWFwTWVudS5Mb2dyaXRobWljX1NjYWxpbmc9TG9nYXJpdGhtaXNjaGUgU2thbGllcnVuZworTWFwTWVudS5HYWluPUdhaW4KK01hcE1lbnUuTG9nU2NhbGU9TG9nIFNjYWxlCitNYXBNZW51LkxpblNjYWxlPUxpbmVhciBTY2FsZQorTWFwTWVudS5Qb2x5Z29uX0JvcmRlcnM9UG9seWdvbmdyZW56ZW4gemVpY2huZW4KK01hcE1lbnUuUG9seWdvbl9DZW50ZXJzPVBvbHlnb25taXR0ZWxwdW5rdGUgdmVyYmluZGVuCitNYXBNZW51LlJlcG9ydHNfU2VsZWN0PUJlcmljaHRlIHdcdTAwZTRobGVuCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvdmlld3MvZ2VvZ3JhcGhpYy9tYXAvbWVzc2FnZXNfa3IucHJvcGVydGllcyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS92aWV3cy9nZW9ncmFwaGljL21hcC9tZXNzYWdlc19rci5wcm9wZXJ0aWVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY1OTBlMDkKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvdmlld3MvZ2VvZ3JhcGhpYy9tYXAvbWVzc2FnZXNfa3IucHJvcGVydGllcwpAQCAtMCwwICsxLDMxIEBACisjIG1lc3NhZ2VzLnByb3BlcnRpZXMKKyMKKyMgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyMgKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisjICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworIyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorIyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisjICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyMgKgorIyAqIENvbnRyaWJ1dG9yczoKKyMgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisjICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyMgU3RlbSBQb2x5Z29uCisjIE5vdGhpbmcsIGFsbCBjb21tb24KKworIyBJbnRlcm5hbCBNYXAgVmlldworSU1WaWV3Lk1SZWZyZXNoPVx1YjJlNFx1YWMwMVx1ZDYxNSBcdWMwYzhcdWI4NWNcdWFjZTBcdWNlNjgKK0lNVmlldy5NUHJvcD1cdWM5YzBcdWFlMDggXHVkNDVjXHVjMmRjIFx1YzkxMQorSU1WaWV3LkVkZ2VzPVx1YWMwMFx1YzdhNVx1Yzc5MFx1YjlhYworCisjIE1hcCBDYW52YXMgY29udGV4dCBtZW51IG1lc3NhZ2VzCitNYXBNZW51LlJlc2V0PVx1YzljMFx1YjNjNCBcdWM3YWNcdWMxMjRcdWM4MTUKK01hcE1lbnUuR2FpbkZhY3Rvcj1cdWM3NzRcdWI0ZGQgXHVjNzc4XHVjNzkwCitNYXBNZW51LkxvZ3JpdGhtaWNfU2NhbGluZz1cdWI4NWNcdWFkZjggXHVjMmE0XHVjZjAwXHVjNzdjXHViOWMxCitNYXBNZW51LkdhaW49XHVjNzc0XHViNGRkCitNYXBNZW51LkxvZ1NjYWxlPVx1Yjg1Y1x1YWRmOCBcdWMyYTRcdWNmMDBcdWM3N2MKK01hcE1lbnUuTGluU2NhbGU9XHVjMTIwXHVkNjE1IFx1YzJhNFx1Y2YwMFx1Yzc3YworTWFwTWVudS5Qb2x5Z29uX0JvcmRlcnM9XHViMmU0XHVhYzAxXHVkNjE1XHVjNzU4IFx1ZDE0Y1x1YjQ1MFx1YjlhY1x1Yjk3YyBcdWFkZjhcdWI5YWNcdWFlMzAKK01hcE1lbnUuUG9seWdvbl9DZW50ZXJzPVx1YjJlNFx1YWMwMVx1ZDYxNSBcdWM5MTFcdWM1NTkgXHVjOWMwXHVjODEwXHVjNzQ0IFx1YzVmMFx1YWNiMAorTWFwTWVudS5SZXBvcnRzX1NlbGVjdD1cdWJjZjRcdWFjZTBcdWMxMWMgXHVjMTIwXHVkMGRkCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvdmlld3MvZ2VvZ3JhcGhpYy9tYXAvbWVzc2FnZXNfemgucHJvcGVydGllcyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS92aWV3cy9nZW9ncmFwaGljL21hcC9tZXNzYWdlc196aC5wcm9wZXJ0aWVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUyZGFjYTMKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvdmlld3MvZ2VvZ3JhcGhpYy9tYXAvbWVzc2FnZXNfemgucHJvcGVydGllcwpAQCAtMCwwICsxLDMxIEBACisjIG1lc3NhZ2VzLnByb3BlcnRpZXMKKyMKKyMgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyMgKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisjICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworIyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorIyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisjICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyMgKgorIyAqIENvbnRyaWJ1dG9yczoKKyMgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisjICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyMgU3RlbSBQb2x5Z29uCisjIE5vdGhpbmcsIGFsbCBjb21tb24KKworIyBJbnRlcm5hbCBNYXAgVmlldworSU1WaWV3Lk1SZWZyZXNoPVx1NTkxYVx1OGZiOVx1NWY2Mlx1NTIzN1x1NjViMAorSU1WaWV3Lk1Qcm9wPVx1NzNiMFx1NTcyOFx1NjYzZVx1NzkzYQorSU1WaWV3LkVkZ2VzPVx1OGZiOQorCisjIE1hcCBDYW52YXMgY29udGV4dCBtZW51IG1lc3NhZ2VzCitNYXBNZW51LlJlc2V0PVx1OTFjZFx1N2Y2ZVx1NTczMFx1NTZmZQorTWFwTWVudS5HYWluRmFjdG9yPVx1NTg5ZVx1NzZjYVx1NTZlMFx1NWI1MAorTWFwTWVudS5Mb2dyaXRobWljX1NjYWxpbmc9XHU1YmY5XHU2NTcwXHU3ZWE3CitNYXBNZW51LkdhaW49R2FpbgorTWFwTWVudS5Mb2dTY2FsZT1Mb2cgU2NhbGUKK01hcE1lbnUuTGluU2NhbGU9TGluZWFyIFNjYWxlCitNYXBNZW51LlBvbHlnb25fQm9yZGVycz1cdTdlZDhcdTUyMzZcdTU5MWFcdThmYjlcdTVmNjJcdThmYjlcdTY4NDYKK01hcE1lbnUuUG9seWdvbl9DZW50ZXJzPVx1OGZkZVx1NjNhNVx1NTkxYVx1OGZiOVx1NWY2Mlx1NGUyZFx1NWZjMworTWFwTWVudS5SZXBvcnRzX1NlbGVjdD1cdTkwMDlcdTYyZTlcdTYyYTVcdTU0NGEKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS92aWV3cy9nZW9ncmFwaGljL21hcC9wcmVmZXJlbmNlcy9NYXBWaWV3UHJlZmVyZW5jZVBhZ2UuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS92aWV3cy9nZW9ncmFwaGljL21hcC9wcmVmZXJlbmNlcy9NYXBWaWV3UHJlZmVyZW5jZVBhZ2UuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43OTcxNWYzCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3ZpZXdzL2dlb2dyYXBoaWMvbWFwL3ByZWZlcmVuY2VzL01hcFZpZXdQcmVmZXJlbmNlUGFnZS5qYXZhCkBAIC0wLDAgKzEsMTY4IEBACisvLyBHZW9ncmFwaGljUHJlZmVyZW5jZVBhZ2UuamF2YQorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnVpLnZpZXdzLmdlb2dyYXBoaWMubWFwLnByZWZlcmVuY2VzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnByZWZlcmVuY2UuQm9vbGVhbkZpZWxkRWRpdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnByZWZlcmVuY2UuQ29sb3JGaWVsZEVkaXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5wcmVmZXJlbmNlLkZpZWxkRWRpdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnByZWZlcmVuY2UuRmllbGRFZGl0b3JQcmVmZXJlbmNlUGFnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5wcmVmZXJlbmNlLlN0cmluZ0ZpZWxkRWRpdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnV0aWwuUHJvcGVydHlDaGFuZ2VFdmVudDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnVpLkFjdGl2YXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5JV29ya2JlbmNoOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2hQcmVmZXJlbmNlUGFnZTsKKworLyoqCisgKiBUaGlzIGNsYXNzIHJlcHJlc2VudHMgdGhlIHByZWZlcmVuY2VzIGZvciB0aGUgTWFwIHZpZXcgb2YgYSBzaW11bGF0aW9uLgorICovCitwdWJsaWMgY2xhc3MgTWFwVmlld1ByZWZlcmVuY2VQYWdlIGV4dGVuZHMgRmllbGRFZGl0b3JQcmVmZXJlbmNlUGFnZSBpbXBsZW1lbnRzCisJCUlXb3JrYmVuY2hQcmVmZXJlbmNlUGFnZSB7CisKKwkvKioKKwkgKiBUaGUgSUQgb2YgdGhlIFNURU0gUHJlZmVyZW5jZSBwYWdlLgorCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIElEX1NURU1fTUFQX1ZJRVdfUEFHRSA9ICJvcmcuZWNsaXBzZS5zdGVtLnVpLnZpZXdzLmdlb2dyYXBoaWMubWFwLnByZWZlcmVuY2VzLk1hcFZpZXdQcmVmZXJlbmNlUGFnZSI7CisKKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgRklFTERfV0lEVEggPSAxMTsKKworCXByaXZhdGUgQ29sb3JGaWVsZEVkaXRvciBiYWNrZ3JvdW5kQ29sb3JGaWVsZEVkaXRvcjsKKworCXByaXZhdGUgQ29sb3JGaWVsZEVkaXRvciBmb3JlZ3JvdW5kQ29sb3JSZWxhdGl2ZVZhbHVlWmVyb0ZpZWxkRWRpdG9yOworCisJcHJpdmF0ZSBCb29sZWFuRmllbGRFZGl0b3IgZW5hYmxlTXVsdGlDb2xvckRpc3BsYXlGaWVsZEVkaXRvcjsKKwlwcml2YXRlIFN0cmluZ0ZpZWxkRWRpdG9yIHNGYWN0b3JGaWVsZEVkaXRvcjsKKwlwcml2YXRlIFN0cmluZ0ZpZWxkRWRpdG9yIGVGYWN0b3JGaWVsZEVkaXRvcjsKKwlwcml2YXRlIFN0cmluZ0ZpZWxkRWRpdG9yIGlGYWN0b3JGaWVsZEVkaXRvcjsKKwlwcml2YXRlIFN0cmluZ0ZpZWxkRWRpdG9yIHJGYWN0b3JGaWVsZEVkaXRvcjsKKworCXByaXZhdGUgU3RyaW5nRmllbGRFZGl0b3IgZ3VpU2NhbGluZ0ZhY3RvckZpZWxkRWRpdG9yOworCisJLyoqCisJICogQ29uc3RydWN0b3IKKwkgKi8KKwlwdWJsaWMgTWFwVmlld1ByZWZlcmVuY2VQYWdlKCkgeworCQlzdXBlcihHUklEKTsKKwkJc2V0UHJlZmVyZW5jZVN0b3JlKEFjdGl2YXRvci5nZXREZWZhdWx0KCkuZ2V0UHJlZmVyZW5jZVN0b3JlKCkpOworCQlzZXREZXNjcmlwdGlvbihNZXNzYWdlcy5nZXRTdHJpbmcoIk1hcFZQUGFnZS5WaXoiKSk7CisJfSAvLyBHZW9ncmFwaGljUHJlZmVyZW5jZVBhZ2UKKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2UuamZhY2UucHJlZmVyZW5jZS5GaWVsZEVkaXRvclByZWZlcmVuY2VQYWdlI2NyZWF0ZUZpZWxkRWRpdG9ycygpCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgY3JlYXRlRmllbGRFZGl0b3JzKCkgeworCQliYWNrZ3JvdW5kQ29sb3JGaWVsZEVkaXRvciA9IG5ldyBDb2xvckZpZWxkRWRpdG9yKAorCQkJCVByZWZlcmVuY2VDb25zdGFudHMuQkFDS0dST1VORF9DT0xPUl9QUkVGRVJFTkNFLCBNZXNzYWdlcworCQkJCQkJLmdldFN0cmluZygiTWFwVlBQYWdlLmJnYyIpLCBnZXRGaWVsZEVkaXRvclBhcmVudCgpKTsKKworCQlmb3JlZ3JvdW5kQ29sb3JSZWxhdGl2ZVZhbHVlWmVyb0ZpZWxkRWRpdG9yID0gbmV3IENvbG9yRmllbGRFZGl0b3IoCisJCQkJUHJlZmVyZW5jZUNvbnN0YW50cy5GT1JFR1JPVU5EX1JFTEFUSVZFX1ZBTFVFX1pFUk9fQ09MT1JfUFJFRkVSRU5DRSwKKwkJCQlNZXNzYWdlcy5nZXRTdHJpbmcoIk1hcFZQUGFnZS5mZ3J2emVyb2MiKSwKKwkJCQlnZXRGaWVsZEVkaXRvclBhcmVudCgpKTsKKworCQllbmFibGVNdWx0aUNvbG9yRGlzcGxheUZpZWxkRWRpdG9yID0gbmV3IEJvb2xlYW5GaWVsZEVkaXRvcigKKwkJCQlQcmVmZXJlbmNlQ29uc3RhbnRzLk1VTFRJX0NPTE9SX0RJU1BMQVlfQk9PTEVBTl9QUkVGRVJFTkNFLAorCQkJCU1lc3NhZ2VzLmdldFN0cmluZygiTWFwVlBQYWdlLm11bHRpY29sb3JkaXNwbGF5IiksCisJCQkJZ2V0RmllbGRFZGl0b3JQYXJlbnQoKSk7CisKKwkJc0ZhY3RvckZpZWxkRWRpdG9yID0gbmV3IFN0cmluZ0ZpZWxkRWRpdG9yKAorCQkJCVByZWZlcmVuY2VDb25zdGFudHMuU19DT0xPUl9XRUlHSFRfUFJFRkVSRU5DRSwgTWVzc2FnZXMKKwkJCQkJCS5nZXRTdHJpbmcoIk1hcFZQUGFnZS5TY29sb3JXZWlnaHQiKSwgRklFTERfV0lEVEgsCisJCQkJZ2V0RmllbGRFZGl0b3JQYXJlbnQoKSk7CisJCXNGYWN0b3JGaWVsZEVkaXRvci5zZXRFbXB0eVN0cmluZ0FsbG93ZWQoZmFsc2UpOworCisJCWVGYWN0b3JGaWVsZEVkaXRvciA9IG5ldyBTdHJpbmdGaWVsZEVkaXRvcigKKwkJCQlQcmVmZXJlbmNlQ29uc3RhbnRzLkVfQ09MT1JfV0VJR0hUX1BSRUZFUkVOQ0UsIE1lc3NhZ2VzCisJCQkJCQkuZ2V0U3RyaW5nKCJNYXBWUFBhZ2UuRWNvbG9yV2VpZ2h0IiksIEZJRUxEX1dJRFRILAorCQkJCWdldEZpZWxkRWRpdG9yUGFyZW50KCkpOworCQllRmFjdG9yRmllbGRFZGl0b3Iuc2V0RW1wdHlTdHJpbmdBbGxvd2VkKGZhbHNlKTsKKworCQlpRmFjdG9yRmllbGRFZGl0b3IgPSBuZXcgU3RyaW5nRmllbGRFZGl0b3IoCisJCQkJUHJlZmVyZW5jZUNvbnN0YW50cy5JX0NPTE9SX1dFSUdIVF9QUkVGRVJFTkNFLCBNZXNzYWdlcworCQkJCQkJLmdldFN0cmluZygiTWFwVlBQYWdlLkljb2xvcldlaWdodCIpLCBGSUVMRF9XSURUSCwKKwkJCQlnZXRGaWVsZEVkaXRvclBhcmVudCgpKTsKKwkJaUZhY3RvckZpZWxkRWRpdG9yLnNldEVtcHR5U3RyaW5nQWxsb3dlZChmYWxzZSk7CisKKwkJckZhY3RvckZpZWxkRWRpdG9yID0gbmV3IFN0cmluZ0ZpZWxkRWRpdG9yKAorCQkJCVByZWZlcmVuY2VDb25zdGFudHMuUl9DT0xPUl9XRUlHSFRfUFJFRkVSRU5DRSwgTWVzc2FnZXMKKwkJCQkJCS5nZXRTdHJpbmcoIk1hcFZQUGFnZS5SY29sb3JXZWlnaHQiKSwgRklFTERfV0lEVEgsCisJCQkJZ2V0RmllbGRFZGl0b3JQYXJlbnQoKSk7CisJCXJGYWN0b3JGaWVsZEVkaXRvci5zZXRFbXB0eVN0cmluZ0FsbG93ZWQoZmFsc2UpOworCisJCWd1aVNjYWxpbmdGYWN0b3JGaWVsZEVkaXRvciA9IG5ldyBTdHJpbmdGaWVsZEVkaXRvcigKKwkJCQlQcmVmZXJlbmNlQ29uc3RhbnRzLkdVSV9TQ0FMSU5HX0ZBQ1RPUl9ET1VCTEVfUFJFRkVSRU5DRSwKKwkJCQlNZXNzYWdlcy5nZXRTdHJpbmcoIk1hcFZQUGFnZS5nc2YiKSwgRklFTERfV0lEVEgsCisJCQkJZ2V0RmllbGRFZGl0b3JQYXJlbnQoKSk7CisJCWd1aVNjYWxpbmdGYWN0b3JGaWVsZEVkaXRvci5zZXRFbXB0eVN0cmluZ0FsbG93ZWQoZmFsc2UpOworCisJCWFkZEZpZWxkKGJhY2tncm91bmRDb2xvckZpZWxkRWRpdG9yKTsKKwkJYWRkRmllbGQoZm9yZWdyb3VuZENvbG9yUmVsYXRpdmVWYWx1ZVplcm9GaWVsZEVkaXRvcik7CisJCWFkZEZpZWxkKGVuYWJsZU11bHRpQ29sb3JEaXNwbGF5RmllbGRFZGl0b3IpOworCQlhZGRGaWVsZChzRmFjdG9yRmllbGRFZGl0b3IpOworCQlhZGRGaWVsZChlRmFjdG9yRmllbGRFZGl0b3IpOworCQlhZGRGaWVsZChpRmFjdG9yRmllbGRFZGl0b3IpOworCQlhZGRGaWVsZChyRmFjdG9yRmllbGRFZGl0b3IpOworCQlhZGRGaWVsZChndWlTY2FsaW5nRmFjdG9yRmllbGRFZGl0b3IpOworCX0gLy8gY3JlYXRlRmllbGRFZGl0b3JzCisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLmpmYWNlLnByZWZlcmVuY2UuRmllbGRFZGl0b3JQcmVmZXJlbmNlUGFnZSNjaGVja1N0YXRlKCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgdm9pZCBjaGVja1N0YXRlKCkgeworCQlzdXBlci5jaGVja1N0YXRlKCk7CisKKwkJLy8gVE9ETyBmb3Igc29tZSByZWFzb24gb25seSB0aGUgR1VJIHNjYWxpbmcgZmFjdG9yIGlzIHZhbGlkYXRlZCBvbgorCQkvLyBmaWVsZCBjaGFuZ2UKKwkJLy8gQ2hlY2sgR1VJIFNjYWxpbmcgZmFjdG9yPworCQlpZiAoaXNWYWxpZCgpKSB7CisJCQkvLyBZZXMKKwkJCS8vIElzIHRoZSBHVUkgc2NhbGUgZmFjdG9yIG9rPworCQkJdHJ5IHsKKwkJCQlmaW5hbCBkb3VibGUgZmFjdG9yID0gRG91YmxlCisJCQkJCQkucGFyc2VEb3VibGUoZ3VpU2NhbGluZ0ZhY3RvckZpZWxkRWRpdG9yCisJCQkJCQkJCS5nZXRTdHJpbmdWYWx1ZSgpKTsKKwkJCQlpZiAoZmFjdG9yIDw9IDAuMCkgeworCQkJCQlzZXRFcnJvck1lc3NhZ2UoTWVzc2FnZXMuZ2V0U3RyaW5nKCJHVUlTY2FsZS5uZWdFcnIiKSk7CisJCQkJCXNldFZhbGlkKGZhbHNlKTsKKwkJCQl9IC8vIGlmCisJCQl9IGNhdGNoIChFeGNlcHRpb24gZSkgeworCQkJCXNldEVycm9yTWVzc2FnZShNZXNzYWdlcy5nZXRTdHJpbmcoIk1hcFZQUGFnZS5udW1FcnIiKSk7CisJCQkJc2V0VmFsaWQoZmFsc2UpOworCQkJfSAvLyBjYXRjaCBFeGNlcHRpb24KKwkJfSAvLyBDaGVjayBndWkgU2NhbGluZyBmYWN0b3IKKworCX0gLy8gY2hlY2tTdGF0ZQorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5qZmFjZS5wcmVmZXJlbmNlLkZpZWxkRWRpdG9yUHJlZmVyZW5jZVBhZ2UjcHJvcGVydHlDaGFuZ2Uob3JnLmVjbGlwc2UuamZhY2UudXRpbC5Qcm9wZXJ0eUNoYW5nZUV2ZW50KQorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIHByb3BlcnR5Q2hhbmdlKFByb3BlcnR5Q2hhbmdlRXZlbnQgZXZlbnQpIHsKKwkJc3VwZXIucHJvcGVydHlDaGFuZ2UoZXZlbnQpOworCQlpZiAoZXZlbnQuZ2V0UHJvcGVydHkoKS5lcXVhbHMoRmllbGRFZGl0b3IuVkFMVUUpKSB7CisJCQlpZiAoZXZlbnQuZ2V0U291cmNlKCkgPT0gZ3VpU2NhbGluZ0ZhY3RvckZpZWxkRWRpdG9yKSB7CisJCQkJY2hlY2tTdGF0ZSgpOworCQkJfSAvLyBpZgorCQl9IC8vIGlmCisJfSAvLyBwcm9wZXJ0eUNoYW5nZQorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS51aS5JV29ya2JlbmNoUHJlZmVyZW5jZVBhZ2UjaW5pdChvcmcuZWNsaXBzZS51aS5JV29ya2JlbmNoKQorCSAqLworCXB1YmxpYyB2b2lkIGluaXQoQFN1cHByZXNzV2FybmluZ3MoInVudXNlZCIpCisJSVdvcmtiZW5jaCB3b3JrYmVuY2gpIHsKKwkJLy8gTm90aGluZworCX0gLy8gaW5pdAorCit9IC8vIEdlb2dyYXBoaWNQcmVmZXJlbmNlUGFnZQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3ZpZXdzL2dlb2dyYXBoaWMvbWFwL3ByZWZlcmVuY2VzL01lc3NhZ2VzLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvdmlld3MvZ2VvZ3JhcGhpYy9tYXAvcHJlZmVyZW5jZXMvTWVzc2FnZXMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NDUwZjgyCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3ZpZXdzL2dlb2dyYXBoaWMvbWFwL3ByZWZlcmVuY2VzL01lc3NhZ2VzLmphdmEKQEAgLTAsMCArMSw0MiBAQAorLy8gTWVzc2FnZXMuamF2YQorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnVpLnZpZXdzLmdlb2dyYXBoaWMubWFwLnByZWZlcmVuY2VzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGphdmEudXRpbC5NaXNzaW5nUmVzb3VyY2VFeGNlcHRpb247CitpbXBvcnQgamF2YS51dGlsLlJlc291cmNlQnVuZGxlOworCisvKioKKyAqIFRoaXMgY2xhc3MgZ2V0cyBOTFMgdmFsdWVzLgorICovCitwdWJsaWMgY2xhc3MgTWVzc2FnZXMgeworCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBCVU5ETEVfTkFNRSA9ICJvcmcuZWNsaXBzZS5zdGVtLnVpLnZpZXdzLmdlb2dyYXBoaWMubWFwLnByZWZlcmVuY2VzLm1lc3NhZ2VzIjsgLy8kTk9OLU5MUy0xJAorCisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgUmVzb3VyY2VCdW5kbGUgUkVTT1VSQ0VfQlVORExFID0gUmVzb3VyY2VCdW5kbGUKKwkJCS5nZXRCdW5kbGUoQlVORExFX05BTUUpOworCisJcHJpdmF0ZSBNZXNzYWdlcygpIHsKKwkJLy8gTm90aGluZworCX0KKworCS8qKgorCSAqIEBwYXJhbSBrZXkKKwkgKiBAcmV0dXJuIHRoZSBzdHJpbmcgbWF0Y2hpbmcgdGhlIGtleQorCSAqLworCXB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldFN0cmluZyhTdHJpbmcga2V5KSB7CisJCXRyeSB7CisJCQlyZXR1cm4gUkVTT1VSQ0VfQlVORExFLmdldFN0cmluZyhrZXkpOworCQl9IGNhdGNoIChNaXNzaW5nUmVzb3VyY2VFeGNlcHRpb24gZSkgeworCQkJcmV0dXJuICchJyArIGtleSArICchJzsKKwkJfQorCX0KK30gLy8gTWVzc2FnZXMKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS92aWV3cy9nZW9ncmFwaGljL21hcC9wcmVmZXJlbmNlcy9QcmVmZXJlbmNlQ29uc3RhbnRzLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvdmlld3MvZ2VvZ3JhcGhpYy9tYXAvcHJlZmVyZW5jZXMvUHJlZmVyZW5jZUNvbnN0YW50cy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBiZmZlMzMKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvdmlld3MvZ2VvZ3JhcGhpYy9tYXAvcHJlZmVyZW5jZXMvUHJlZmVyZW5jZUNvbnN0YW50cy5qYXZhCkBAIC0wLDAgKzEsNjYgQEAKKy8vIFByZWZlcmVuY2VDb25zdGFudHMuamF2YQorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnVpLnZpZXdzLmdlb2dyYXBoaWMubWFwLnByZWZlcmVuY2VzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqCisgKiBDb25zdGFudCBkZWZpbml0aW9ucyBmb3IgcGx1Zy1pbiBwcmVmZXJlbmNlcworICovCitwdWJsaWMgaW50ZXJmYWNlIFByZWZlcmVuY2VDb25zdGFudHMgeworCisJLyoqCisJICogVGhlIHByZWZlcmVuY2UgaWQgZm9yIHRoZSBtYXAncyBiYWNrZ3JvdW5kIGNvbG9yCisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgQkFDS0dST1VORF9DT0xPUl9QUkVGRVJFTkNFID0gIm9yZy5lY2xpcHNlLnN0ZW0udWkudmlld3MuZ2VvZ3JhcGhpYy5tYXAucHJlZmVyZW5jZXMuYmFja2dyb3VuZGNvbG9yIjsKKworCS8qKgorCSAqIFRoZSBwcmVmZXJlbmNlIGlkIGZvciB0aGUgbWFwJ3MgZm9yZWdyb3VuZCBjb2xvcgorCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEZPUkVHUk9VTkRfQ09MT1JfUFJFRkVSRU5DRSA9ICJvcmcuZWNsaXBzZS5zdGVtLnVpLnZpZXdzLmdlb2dyYXBoaWMubWFwLnByZWZlcmVuY2VzLmZvcmVncm91bmRjb2xvciI7CisKKwkvKioKKwkgKiBUaGUgcHJlZmVyZW5jZSBpZCBmb3IgdGhlIG1hcCdzIGZvcmVncm91bmQgY29sb3Igd2hlbiB0aGUgcmVsYXRpdmUgdmFsdWUgPQorCSAqIDAKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBGT1JFR1JPVU5EX1JFTEFUSVZFX1ZBTFVFX1pFUk9fQ09MT1JfUFJFRkVSRU5DRSA9ICJvcmcuZWNsaXBzZS5zdGVtLnVpLnZpZXdzLmdlb2dyYXBoaWMubWFwLnByZWZlcmVuY2VzLmZvcmVncm91bmRyZWxhdGl2ZXZhbHVlemVyb2NvbG9yIjsKKworCS8qKgorCSAqIFRoZSBwcmVmZXJlbmNlIGlkIGZvciB0aGUgbXVsdGljb2xvci9tdWx0aS12YXJpYWJsZSBtYXAgZGlzcGxheSBtb2RlLgorCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIE1VTFRJX0NPTE9SX0RJU1BMQVlfQk9PTEVBTl9QUkVGRVJFTkNFID0gIm9yZy5lY2xpcHNlLnN0ZW0udWkudmlld3MuZ2VvZ3JhcGhpYy5tYXAucHJlZmVyZW5jZXMubXVsdGljb2xvcmRpc3BsYXkiOworCisJLyoqCisJICogTXVsdGljb2xvciBEaXNwbGF5IEludGVuc2l0eSB3ZWlnaHRpbmcgZm9yIHZhcmlhYmxlIFMKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBTX0NPTE9SX1dFSUdIVF9QUkVGRVJFTkNFID0gIm9yZy5lY2xpcHNlLnN0ZW0udWkudmlld3MuZ2VvZ3JhcGhpYy5tYXAucHJlZmVyZW5jZXMuc2NvbG9yd2VpZ2h0IjsKKworCS8qKgorCSAqIE11bHRpY29sb3IgRGlzcGxheSBJbnRlbnNpdHkgd2VpZ2h0aW5nIGZvciB2YXJpYWJsZSBFCisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgRV9DT0xPUl9XRUlHSFRfUFJFRkVSRU5DRSA9ICJvcmcuZWNsaXBzZS5zdGVtLnVpLnZpZXdzLmdlb2dyYXBoaWMubWFwLnByZWZlcmVuY2VzLmVjb2xvcndlaWdodCI7CisKKwkvKioKKwkgKiBNdWx0aWNvbG9yIERpc3BsYXkgSW50ZW5zaXR5IHdlaWdodGluZyBmb3IgdmFyaWFibGUgSQorCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIElfQ09MT1JfV0VJR0hUX1BSRUZFUkVOQ0UgPSAib3JnLmVjbGlwc2Uuc3RlbS51aS52aWV3cy5nZW9ncmFwaGljLm1hcC5wcmVmZXJlbmNlcy5pY29sb3J3ZWlnaHQiOworCisJLyoqCisJICogTXVsdGljb2xvciBEaXNwbGF5IEludGVuc2l0eSB3ZWlnaHRpbmcgZm9yIHZhcmlhYmxlIFIKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBSX0NPTE9SX1dFSUdIVF9QUkVGRVJFTkNFID0gIm9yZy5lY2xpcHNlLnN0ZW0udWkudmlld3MuZ2VvZ3JhcGhpYy5tYXAucHJlZmVyZW5jZXMucmNvbG9yd2VpZ2h0IjsKKworCS8qKgorCSAqIFRoZSBwcmVmZXJlbmNlIGlkIGZvciB0aGUgbWFwJ3MgaW5pdGlhbCBzY2FsaW5nCisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgR1VJX1NDQUxJTkdfRkFDVE9SX0RPVUJMRV9QUkVGRVJFTkNFID0gIm9yZy5lY2xpcHNlLnN0ZW0udWkudmlld3MuZ2VvZ3JhcGhpYy5tYXAucHJlZmVyZW5jZXMuZ3Vpc2NhbGluZyI7CisKK30gLy8gUHJlZmVyZW5jZUNvbnN0YW50cwpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3ZpZXdzL2dlb2dyYXBoaWMvbWFwL3ByZWZlcmVuY2VzL1ByZWZlcmVuY2VJbml0aWFsaXplci5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3ZpZXdzL2dlb2dyYXBoaWMvbWFwL3ByZWZlcmVuY2VzL1ByZWZlcmVuY2VJbml0aWFsaXplci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIyMjhiYTkKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvdmlld3MvZ2VvZ3JhcGhpYy9tYXAvcHJlZmVyZW5jZXMvUHJlZmVyZW5jZUluaXRpYWxpemVyLmphdmEKQEAgLTAsMCArMSw3MiBAQAorLy8gUHJlZmVyZW5jZUluaXRpYWxpemVyLmphdmEKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS51aS52aWV3cy5nZW9ncmFwaGljLm1hcC5wcmVmZXJlbmNlczsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUucHJlZmVyZW5jZXMuQWJzdHJhY3RQcmVmZXJlbmNlSW5pdGlhbGl6ZXI7CisKKy8qKgorICogQ2xhc3MgdXNlZCB0byBpbml0aWFsaXplIGRlZmF1bHQgcHJlZmVyZW5jZSB2YWx1ZXMuCisgKi8KK3B1YmxpYyBjbGFzcyBQcmVmZXJlbmNlSW5pdGlhbGl6ZXIgZXh0ZW5kcyBBYnN0cmFjdFByZWZlcmVuY2VJbml0aWFsaXplciB7CisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5wcmVmZXJlbmNlcy5BYnN0cmFjdFByZWZlcmVuY2VJbml0aWFsaXplciNpbml0aWFsaXplRGVmYXVsdFByZWZlcmVuY2VzKCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBpbml0aWFsaXplRGVmYXVsdFByZWZlcmVuY2VzKCkgeworLy8JCUBTdXBwcmVzc1dhcm5pbmdzKCJ1bnVzZWQiKS8vJE5PTi1OTFMtMSQKKy8vCQlJUHJlZmVyZW5jZVN0b3JlIHN0b3JlID0gQWN0aXZhdG9yLmdldERlZmF1bHQoKS5nZXRQcmVmZXJlbmNlU3RvcmUoKTsKKwkJLy8gc3RvcmUuc2V0RGVmYXVsdChQcmVmZXJlbmNlQ29uc3RhbnRzLkJBQ0tHUk9VTkRfQ09MT1JfUFJFRkVSRU5DRSwKKwkJLy8gTWFwQ2FudmFzLkRFRkFVTFRfQkFDS0dST1VORF9DT0xPUl9SR0JfU1RSSU5HKTsKKwkJLy8gc3RvcmUKKwkJLy8gLnNldERlZmF1bHQoCisJCS8vIFByZWZlcmVuY2VDb25zdGFudHMuRk9SRUdST1VORF9SRUxBVElWRV9WQUxVRV9aRVJPX0NPTE9SX1BSRUZFUkVOQ0UsCisJCS8vIE1hcENhbnZhcy5ERUZBVUxUX1pFUk9fUE9MWUdPTl9DT0xPUl9SR0JfU1RSSU5HKTsKKwkJLy8gc3RvcmUKKwkJLy8gLnNldERlZmF1bHQoCisJCS8vIG9yZy5lY2xpcHNlLnN0ZW0udWkudmlld3MuZ2VvZ3JhcGhpYy5wcmVmZXJlbmNlcy5QcmVmZXJlbmNlQ29uc3RhbnRzLkJPUkRFUl9DT0xPUl9QUkVGRVJFTkNFLAorCQkvLyBNYXBDYW52YXMuREVGQVVMVF9QT0xZR09OX0JPUkRFUl9DT0xPUl9SR0JfU1RSSU5HKTsKKworLy8JCXN0b3JlCisvLwkJCQkuc2V0RGVmYXVsdCgKKy8vCQkJCQkJb3JnLmVjbGlwc2Uuc3RlbS51aS52aWV3cy5nZW9ncmFwaGljLnByZWZlcmVuY2VzLlByZWZlcmVuY2VDb25zdGFudHMuRFJBV19QT0xZR09OX0JPUkRFUlNfQk9PTEVBTl9QUkVGRVJFTkNFLAorLy8JCQkJCQlNYXBDYW52YXMuREVGQVVMVF9EUkFXX1BPTFlHT05fQk9SREVSUyk7CisJCS8vCisJCS8vIHN0b3JlLnNldERlZmF1bHQoCisJCS8vIFByZWZlcmVuY2VDb25zdGFudHMuTVVMVElfQ09MT1JfRElTUExBWV9CT09MRUFOX1BSRUZFUkVOQ0UsCisJCS8vIE1hcENhbnZhcy5ERUZBVUxUX01VTFRJX0NPTE9SX01PREUpOworCQkvLworCQkvLyBzdG9yZS5zZXREZWZhdWx0KFByZWZlcmVuY2VDb25zdGFudHMuU19DT0xPUl9XRUlHSFRfUFJFRkVSRU5DRSwKKwkJLy8gTWFwQ2FudmFzLkRFRkFVTFRfU19XRUlHSFRJTkcpOworCQkvLworCQkvLyBzdG9yZS5zZXREZWZhdWx0KFByZWZlcmVuY2VDb25zdGFudHMuRV9DT0xPUl9XRUlHSFRfUFJFRkVSRU5DRSwKKwkJLy8gTWFwQ2FudmFzLkRFRkFVTFRfRV9XRUlHSFRJTkcpOworCQkvLworCQkvLyBzdG9yZS5zZXREZWZhdWx0KFByZWZlcmVuY2VDb25zdGFudHMuSV9DT0xPUl9XRUlHSFRfUFJFRkVSRU5DRSwKKwkJLy8gTWFwQ2FudmFzLkRFRkFVTFRfSV9XRUlHSFRJTkcpOworCQkvLworCQkvLyBzdG9yZS5zZXREZWZhdWx0KFByZWZlcmVuY2VDb25zdGFudHMuUl9DT0xPUl9XRUlHSFRfUFJFRkVSRU5DRSwKKwkJLy8gTWFwQ2FudmFzLkRFRkFVTFRfUl9XRUlHSFRJTkcpOworCisvLwkJc3RvcmUKKy8vCQkJCS5zZXREZWZhdWx0KAorLy8JCQkJCQlvcmcuZWNsaXBzZS5zdGVtLnVpLnZpZXdzLmdlb2dyYXBoaWMucHJlZmVyZW5jZXMuUHJlZmVyZW5jZUNvbnN0YW50cy5MT0dTQ0FMRV9CT09MRUFOX1BSRUZFUkVOQ0UsCisvLwkJCQkJCU1hcENhbnZhcy5ERUZBVUxUX1VTRV9MT0dTQ0FMSU5HKTsKKy8vCisvLwkJc3RvcmUKKy8vCQkJCS5zZXREZWZhdWx0KAorLy8JCQkJCQlvcmcuZWNsaXBzZS5zdGVtLnVpLnZpZXdzLmdlb2dyYXBoaWMucHJlZmVyZW5jZXMuUHJlZmVyZW5jZUNvbnN0YW50cy5HQUlOX0ZBQ1RPUl9QUkVGRVJFTkNFLAorLy8JCQkJCQlNYXBDYW52YXMuREVGQVVMVF9HQUlOX0ZBQ1RPUik7CisKKwl9IC8vIGluaXRpYWxpemVEZWZhdWx0UHJlZmVyZW5jZXMKK30gLy8gUHJlZmVyZW5jZUluaXRpYWxpemVyCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvdmlld3MvZ2VvZ3JhcGhpYy9tYXAvcHJlZmVyZW5jZXMvbWVzc2FnZXMucHJvcGVydGllcyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS92aWV3cy9nZW9ncmFwaGljL21hcC9wcmVmZXJlbmNlcy9tZXNzYWdlcy5wcm9wZXJ0aWVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY3OWI5OGMKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvdmlld3MvZ2VvZ3JhcGhpYy9tYXAvcHJlZmVyZW5jZXMvbWVzc2FnZXMucHJvcGVydGllcwpAQCAtMCwwICsxLDM4IEBACisjIG1lc3NhZ2VzLnByb3BlcnRpZXMKKyMKKyMgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyMgKiBDb3B5cmlnaHQgKGMpIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisjICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworIyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorIyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisjICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyMgKgorIyAqIENvbnRyaWJ1dG9yczoKKyMgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisjICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK01hcFZQUGFnZS5WaXogPSBNYXAgUHJlZmVyZW5jZXMKKworCitNYXBWUFBhZ2UuYmdjID0gJkJhY2tncm91bmQgQ29sb3IKK01hcFZQUGFnZS5mZ2MgPSAmRm9yZWdyb3VuZCBDb2xvcgorTWFwVlBQYWdlLmZncnZ6ZXJvYyA9ICZaZXJvIFJlbGF0aXZlIFZhbHVlIENvbG9yCitNYXBWUFBhZ2UuYmMgPSAmQm9yZGVycyBDb2xvcgorTWFwVlBQYWdlLmRyYXdwb2x5Ym9yZGVycyA9IERyYXcgJlBvbHlnb24gQm9yZGVycworTWFwVlBQYWdlLm11bHRpY29sb3JkaXNwbGF5ID0gRW5hYmxlICZNdWx0aWNvbG9yIERpc3BsYXkKK01hcFZQUGFnZS5TY29sb3JXZWlnaHQgPSAmUyBDb2xvciBXZWlnaHQKK01hcFZQUGFnZS5FY29sb3JXZWlnaHQgPSAmRSBDb2xvciBXZWlnaHQKK01hcFZQUGFnZS5JY29sb3JXZWlnaHQgPSAmSSBDb2xvciBXZWlnaHQKK01hcFZQUGFnZS5SY29sb3JXZWlnaHQgPSAmUiBDb2xvciBXZWlnaHQKK01hcFZQUGFnZS5sb2dzY2FsZSA9IFVzZSBMb2dhcml0aG1pYyBTY2FsZQorTWFwVlBQYWdlLmdhaW5mID0gR2FpbiAmRmFjdG9yCitNYXBWUFBhZ2UuZ3NmID0gJkdVSSBTY2FsaW5nIEZhY3RvcgorTWFwVlBQYWdlLnh0ID0gCUluaXRpYWwgJlggVHJhbnNsYXRpb24KK01hcFZQUGFnZS55dCA9IAlJbml0aWFsICZZIFRyYW5zbGF0aW9uCitNYXBWUFBhZ2UuenJzZiA9ICZab29tIFJ1bGVyIFNjYWxpbmcgRmFjdG9yCitNYXBWUFBhZ2UuaXNzID0gSW5pdGlhbCAmU2NhbGUgU2VsZWN0aW9uICh7MH0tezF9KQorTWFwVlBQYWdlLm51bUVyciA9IFRoZSBmaWVsZCBpcyBub3QgYSB2YWxpZCBudW1iZXIuCisKK0dGYWN0b3IubmVnRXJyID0gVGhlIEdhaW4gRmFjdG9yIG11c3QgYmUgZ3JlYXRlciB0aGFuIDAuMAorR1VJU2NhbGUubmVnRXJyID0gVGhlIEdVSSBTY2FsaW5nIEZhY3RvciBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAwLjAKK1pSU2NhbGUubmVnRXJyID0gVGhlIFpvb20gUnVsZXIgU2NhbGluZyBmYWN0b3IgbXVzdCBiZSBncmVhdGVyIHRoYW4gMC4wCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvdmlld3MvZ2VvZ3JhcGhpYy9tYXAvcHJlZmVyZW5jZXMvbWVzc2FnZXNfZGUucHJvcGVydGllcyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS92aWV3cy9nZW9ncmFwaGljL21hcC9wcmVmZXJlbmNlcy9tZXNzYWdlc19kZS5wcm9wZXJ0aWVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc0ODE2YjQKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvdmlld3MvZ2VvZ3JhcGhpYy9tYXAvcHJlZmVyZW5jZXMvbWVzc2FnZXNfZGUucHJvcGVydGllcwpAQCAtMCwwICsxLDM4IEBACisjIG1lc3NhZ2VzLnByb3BlcnRpZXMKKyMKKyMgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyMgKiBDb3B5cmlnaHQgKGMpIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisjICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworIyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorIyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisjICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyMgKgorIyAqIENvbnRyaWJ1dG9yczoKKyMgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisjICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK01hcFZQUGFnZS5WaXo9S2FydGVzZWluc3RlbGx1bmdlbgorCisKK01hcFZQUGFnZS5iZ2M9JkJhY2tncm91bmQgQ29sb3IKK01hcFZQUGFnZS5mZ2M9JkZvcmVncm91bmQgQ29sb3IKK01hcFZQUGFnZS5mZ3J2emVyb2M9Jlplcm8gUmVsYXRpdmUgVmFsdWUgQ29sb3IKK01hcFZQUGFnZS5iYz0mQm9yZGVycyBDb2xvcgorTWFwVlBQYWdlLmRyYXdwb2x5Ym9yZGVycz0mUG9seWdvbmdyZW56ZW4gemVpY2huZW4KK01hcFZQUGFnZS5tdWx0aWNvbG9yZGlzcGxheT0mTWVocmZhcmJlbmFuemVpZ2UgYWt0aXZpZXJlbgorTWFwVlBQYWdlLlNjb2xvcldlaWdodD0mUyBDb2xvciBXZWlnaHQKK01hcFZQUGFnZS5FY29sb3JXZWlnaHQ9JkUgQ29sb3IgV2VpZ2h0CitNYXBWUFBhZ2UuSWNvbG9yV2VpZ2h0PSZJIENvbG9yIFdlaWdodAorTWFwVlBQYWdlLlJjb2xvcldlaWdodD0mUiBDb2xvciBXZWlnaHQKK01hcFZQUGFnZS5sb2dzY2FsZT1Mb2dhcml0aG1pc2NoZSBTa2FsaWVydW5nIGJlbnV0emVuCitNYXBWUFBhZ2UuZ2FpbmY9WnVuYWhtZSAmRmFrdG9yCitNYXBWUFBhZ2UuZ3NmPSZHVUkgU2NhbGluZyBGYWN0b3IKK01hcFZQUGFnZS54dD1Jbml0aWFsZSAmWCBUcmFuc2xhdGlvbgorTWFwVlBQYWdlLnl0PUluaXRpYWxlICZZIFRyYW5zbGF0aW9uCitNYXBWUFBhZ2UuenJzZj0mWm9vbSBSdWxlciBTY2FsaW5nIEZhY3RvcgorTWFwVlBQYWdlLmlzcz1Jbml0aWFsZSAmU2thbGllcnVuZ3NhdXN3YWhsICh7MH0gLSB7MX0pCitNYXBWUFBhZ2UubnVtRXJyPURhcyBGZWxkIGlzdCBrZWluZSBnXHUwMGZjbHRpZ2UgTnVtbWVyLgorCitHRmFjdG9yLm5lZ0Vycj1EZXIgWnV3YWNocy1GYWt0b3IgbXVzcyBnclx1MDBmNlx1MDBkZmVyIGFscyAwLjAgc2VpbgorR1VJU2NhbGUubmVnRXJyPURpZSBHVUktU2thbGllcnVuZ3NmYWt0b3IgbXVzcyBnclx1MDBmNlx1MDBkZmVyIGFscyAwLjAgc2VpbgorWlJTY2FsZS5uZWdFcnI9RGllIFpvb20tTWFcdTAwZGZzdGFiLVNrYWxpZXJ1bmdzZmFrdG9yIG11c3MgZ3JcdTAwZjZcdTAwZGZlciBzZWluIGFscyAwLDAKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS92aWV3cy9nZW9ncmFwaGljL21hcC9wcmVmZXJlbmNlcy9tZXNzYWdlc19rci5wcm9wZXJ0aWVzIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3ZpZXdzL2dlb2dyYXBoaWMvbWFwL3ByZWZlcmVuY2VzL21lc3NhZ2VzX2tyLnByb3BlcnRpZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGNhYjQ0ZgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS92aWV3cy9nZW9ncmFwaGljL21hcC9wcmVmZXJlbmNlcy9tZXNzYWdlc19rci5wcm9wZXJ0aWVzCkBAIC0wLDAgKzEsMzggQEAKKyMgbWVzc2FnZXMucHJvcGVydGllcworIworIyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIyAqIENvcHlyaWdodCAoYykgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyMgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisjICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisjICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyMgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorIyAqCisjICogQ29udHJpYnV0b3JzOgorIyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworTWFwVlBQYWdlLlZpej1cdWM5YzBcdWIzYzQgXHVkNjU4XHVhY2JkIFx1YzEyNFx1YzgxNQorCisKK01hcFZQUGFnZS5iZ2M9JkJhY2tncm91bmQgQ29sb3IKK01hcFZQUGFnZS5mZ2M9JkZvcmVncm91bmQgQ29sb3IKK01hcFZQUGFnZS5mZ3J2emVyb2M9Jlplcm8gUmVsYXRpdmUgVmFsdWUgQ29sb3IKK01hcFZQUGFnZS5iYz0mQm9yZGVycyBDb2xvcgorTWFwVlBQYWdlLmRyYXdwb2x5Ym9yZGVycz0mIFx1YjJlNFx1YWMwMVx1ZDYxNSBcdWQxNGNcdWI0NTBcdWI5YWNcdWI5N2MgXHVhZGY4XHViOWFjXHVhZTMwCitNYXBWUFBhZ2UubXVsdGljb2xvcmRpc3BsYXk9XHVjODAxXHVjNmE5ICZcdWJhNDBcdWQyZjBcdWNlZWNcdWI3ZWMgXHViNTE0XHVjMmE0XHVkNTBjXHViODA4XHVjNzc0CitNYXBWUFBhZ2UuU2NvbG9yV2VpZ2h0PSZTIENvbG9yIFdlaWdodAorTWFwVlBQYWdlLkVjb2xvcldlaWdodD0mRSBDb2xvciBXZWlnaHQKK01hcFZQUGFnZS5JY29sb3JXZWlnaHQ9JkkgQ29sb3IgV2VpZ2h0CitNYXBWUFBhZ2UuUmNvbG9yV2VpZ2h0PSZSIENvbG9yIFdlaWdodAorTWFwVlBQYWdlLmxvZ3NjYWxlPVx1Yjg1Y1x1YWRmOCBcdWMyYTRcdWNmMDBcdWM3N2MgXHVjMGFjXHVjNmE5CitNYXBWUFBhZ2UuZ2FpbmY9XHVjNzc0XHViNGRkICZcdWM3NzhcdWM3OTAKK01hcFZQUGFnZS5nc2Y9JkdVSSBTY2FsaW5nIEZhY3RvcgorTWFwVlBQYWdlLnh0PVx1Y2QwOFx1YWUzMCAmIFggXHViYzg4XHVjNWVkCitNYXBWUFBhZ2UueXQ9XHVjZDA4XHVhZTMwICYgWSBcdWJjODhcdWM1ZWQKK01hcFZQUGFnZS56cnNmPSZab29tIFJ1bGVyIFNjYWxpbmcgRmFjdG9yCitNYXBWUFBhZ2UuaXNzPVx1Y2QwOFx1YWUzMCBcdWJjMGYgXHVkMDZjXHUyMDBiXHUyMDBiXHVhZTMwIFx1YzEyMFx1ZDBkZCAoezB9IC0gezF9KQorTWFwVlBQYWdlLm51bUVycj1cdWQ1NDRcdWI0ZGNcdWIyOTQgXHVjNzIwXHVkNmE4XHVkNTVjIFx1YmM4OFx1ZDYzOFx1YWMwMCBcdWM1NDRcdWIyZDguCisKK0dGYWN0b3IubmVnRXJyPVx1Yzc3NFx1YjRkZCBcdWFjYzRcdWMyMThcdWIyOTQgMC4wXHViY2Y0XHViMmU0IFx1Y2VlNFx1YzU3Y1x1ZDU2OAorR1VJU2NhbGUubmVnRXJyPUdVSSBcdWMyYTRcdWNmMDBcdWM3N2NcdWI5YzEgXHVhY2M0XHVjMjE4XHViMjk0IDAuMFx1YmNmNFx1YjJlNCBcdWNlZTRcdWM1N2NcdWQ1NjgKK1pSU2NhbGUubmVnRXJyPVx1YzkwYyBcdWI4ZjBcdWI3ZWMgXHVjMmE0XHVjZjAwXHVjNzdjXHViOWMxIFx1YWNjNFx1YzIxOFx1YjI5NCAwLjBcdWJjZjRcdWIyZTQgXHVjZWU0XHVjNTdjXHVkNTY4CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvdmlld3MvZ2VvZ3JhcGhpYy9tYXAvcHJlZmVyZW5jZXMvbWVzc2FnZXNfemgucHJvcGVydGllcyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS92aWV3cy9nZW9ncmFwaGljL21hcC9wcmVmZXJlbmNlcy9tZXNzYWdlc196aC5wcm9wZXJ0aWVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUyNzY4ZGMKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvdmlld3MvZ2VvZ3JhcGhpYy9tYXAvcHJlZmVyZW5jZXMvbWVzc2FnZXNfemgucHJvcGVydGllcwpAQCAtMCwwICsxLDM4IEBACisjIG1lc3NhZ2VzLnByb3BlcnRpZXMKKyMKKyMgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyMgKiBDb3B5cmlnaHQgKGMpIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisjICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworIyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorIyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisjICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyMgKgorIyAqIENvbnRyaWJ1dG9yczoKKyMgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisjICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK01hcFZQUGFnZS5WaXo9XHU1NzMwXHU1NmZlXHU1MDRmXHU1OTdkCisKKworTWFwVlBQYWdlLmJnYz0mQmFja2dyb3VuZCBDb2xvcgorTWFwVlBQYWdlLmZnYz0mRm9yZWdyb3VuZCBDb2xvcgorTWFwVlBQYWdlLmZncnZ6ZXJvYz0mWmVybyBSZWxhdGl2ZSBWYWx1ZSBDb2xvcgorTWFwVlBQYWdlLmJjPSZCb3JkZXJzIENvbG9yCitNYXBWUFBhZ2UuZHJhd3BvbHlib3JkZXJzPVx1N2VkOFx1NTIzNlx1NTkxYVx1OGZiOVx1NWY2Mlx1OGZiOVx1Njg0NgorTWFwVlBQYWdlLm11bHRpY29sb3JkaXNwbGF5PVx1NTQyZlx1NzUyOFx1NWY2OVx1ODI3Mlx1NjYzZVx1NzkzYQorTWFwVlBQYWdlLlNjb2xvcldlaWdodD0mUyBDb2xvciBXZWlnaHQKK01hcFZQUGFnZS5FY29sb3JXZWlnaHQ9JkUgQ29sb3IgV2VpZ2h0CitNYXBWUFBhZ2UuSWNvbG9yV2VpZ2h0PSZJIENvbG9yIFdlaWdodAorTWFwVlBQYWdlLlJjb2xvcldlaWdodD0mUiBDb2xvciBXZWlnaHQKK01hcFZQUGFnZS5sb2dzY2FsZT1cdTc1MjhcdTViZjlcdTY1NzBcdTgzMDNcdTU2ZjQKK01hcFZQUGFnZS5nYWluZj1cdTU4OWVcdTc2Y2FcdTU0OGNcdTU2ZTBcdTViNTAKK01hcFZQUGFnZS5nc2Y9JkdVSSBTY2FsaW5nIEZhY3RvcgorTWFwVlBQYWdlLnh0PVx1NTIxZFx1NTljYlx1NzY4NFhcdTU3NTBcdTY4MDdcdThmNmNcdTYzNjIKK01hcFZQUGFnZS55dD1cdTUyMWRcdTU5Y2JcdTc2ODRZXHU1NzUwXHU2ODA3XHU4ZjZjXHU2MzYyCitNYXBWUFBhZ2UuenJzZj0mWm9vbSBSdWxlciBTY2FsaW5nIEZhY3RvcgorTWFwVlBQYWdlLmlzcz1cdTUyMWRcdTU5Y2JcdTU0OGNcdTg5YzRcdTZhMjFcdTc2ODRcdTkwMDlcdTYyZTlcdWZmMDh7MH0gLSB7MX1cdWZmMDkKK01hcFZQUGFnZS5udW1FcnI9XHU4YmU1XHU1MzNhXHU1N2RmXHU0ZTBkXHU2NjJmXHU0ZTAwXHU0ZTJhXHU2NzA5XHU2NTQ4XHU3Njg0XHU2NTcwXHU1YjU3CisKK0dGYWN0b3IubmVnRXJyPVx1NTg5ZVx1NzZjYVx1NTZlMFx1NWI1MFx1NWZjNVx1OTg3Ylx1NTkyN1x1NGU4ZTAuMAorR1VJU2NhbGUubmVnRXJyPVx1NTZmZVx1NWY2Mlx1NzUyOFx1NjIzN1x1NzU0Y1x1OTc2Mlx1N2YyOVx1NjUzZVx1N2NmYlx1NjU3MFx1NWZjNVx1OTg3Ylx1NTkyN1x1NGU4ZTAuMAorWlJTY2FsZS5uZWdFcnI9XHU3ZjI5XHU2NTNlXHU2ODA3XHU1YzNhXHU3ZjI5XHU2NTNlXHU3Y2ZiXHU2NTcwXHU1ZmM1XHU5ODdiXHU1OTI3XHU0ZThlMC4wCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvdmlld3MvZ2VvZ3JhcGhpYy9wcmVmZXJlbmNlcy9HZW9ncmFwaGljUHJlZmVyZW5jZVBhZ2UuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS92aWV3cy9nZW9ncmFwaGljL3ByZWZlcmVuY2VzL0dlb2dyYXBoaWNQcmVmZXJlbmNlUGFnZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEzODkwYzkKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvdmlld3MvZ2VvZ3JhcGhpYy9wcmVmZXJlbmNlcy9HZW9ncmFwaGljUHJlZmVyZW5jZVBhZ2UuamF2YQpAQCAtMCwwICsxLDExOCBAQAorLy8gR2VvZ3JhcGhpY1ByZWZlcmVuY2VQYWdlLmphdmEKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS51aS52aWV3cy5nZW9ncmFwaGljLnByZWZlcmVuY2VzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnByZWZlcmVuY2UuQm9vbGVhbkZpZWxkRWRpdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnByZWZlcmVuY2UuQ29sb3JGaWVsZEVkaXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5wcmVmZXJlbmNlLkZpZWxkRWRpdG9yUHJlZmVyZW5jZVBhZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UucHJlZmVyZW5jZS5TdHJpbmdGaWVsZEVkaXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnVpLkFjdGl2YXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5JV29ya2JlbmNoOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2hQcmVmZXJlbmNlUGFnZTsKKworLyoqCisgKiBUaGlzIGNsYXNzIHJlcHJlc2VudHMgdGhlIHByZWZlcmVuY2VzIGZvciB0aGUgTWFwIHZpZXcgb2YgYSBzaW11bGF0aW9uLgorICovCitwdWJsaWMgY2xhc3MgR2VvZ3JhcGhpY1ByZWZlcmVuY2VQYWdlIGV4dGVuZHMgRmllbGRFZGl0b3JQcmVmZXJlbmNlUGFnZQorCQlpbXBsZW1lbnRzIElXb3JrYmVuY2hQcmVmZXJlbmNlUGFnZSB7CisKKwkvKioKKwkgKiBUaGUgSUQgb2YgdGhlIFNURU0gR2VvZ3JhcGhpYyB2aWV3IFByZWZlcmVuY2UgcGFnZS4KKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBJRF9TVEVNX0dFT0dSQVBISUNfVklFV19QUkVGRVJFTkNFX1BBR0UgPSAib3JnLmVjbGlwc2Uuc3RlbS51aS52aWV3cy5nZW9ncmFwaGljLnByZWZlcmVuY2VzLkdlb2dyYXBoaWNWaWV3UHJlZmVyZW5jZVBhZ2UiOworCisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IEZJRUxEX1dJRFRIID0gMTE7CisKKwlwcml2YXRlIEJvb2xlYW5GaWVsZEVkaXRvciBkcmF3UG9seWdvbkJvcmRlcnNGaWVsZEVkaXRvcjsKKworCXByaXZhdGUgQ29sb3JGaWVsZEVkaXRvciBib3JkZXJDb2xvckZpZWxkRWRpdG9yOworCisJcHJpdmF0ZSBCb29sZWFuRmllbGRFZGl0b3IgbG9nU2NhbGVGaWVsZEVkaXRvcjsKKworCXByaXZhdGUgU3RyaW5nRmllbGRFZGl0b3IgZ2FpbkZhY3RvckZpZWxkRWRpdG9yOworCisJLyoqCisJICogQ29uc3RydWN0b3IKKwkgKi8KKwlwdWJsaWMgR2VvZ3JhcGhpY1ByZWZlcmVuY2VQYWdlKCkgeworCQlzdXBlcihHUklEKTsKKwkJc2V0UHJlZmVyZW5jZVN0b3JlKEFjdGl2YXRvci5nZXREZWZhdWx0KCkuZ2V0UHJlZmVyZW5jZVN0b3JlKCkpOworCQlzZXREZXNjcmlwdGlvbihNZXNzYWdlcy5nZXRTdHJpbmcoIkdlb1BQYWdlLlZpeiIpKTsKKwl9IC8vIEdlb2dyYXBoaWNQcmVmZXJlbmNlUGFnZQorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5qZmFjZS5wcmVmZXJlbmNlLkZpZWxkRWRpdG9yUHJlZmVyZW5jZVBhZ2UjY3JlYXRlRmllbGRFZGl0b3JzKCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgdm9pZCBjcmVhdGVGaWVsZEVkaXRvcnMoKSB7CisKKwkJZHJhd1BvbHlnb25Cb3JkZXJzRmllbGRFZGl0b3IgPSBuZXcgQm9vbGVhbkZpZWxkRWRpdG9yKAorCQkJCVByZWZlcmVuY2VDb25zdGFudHMuRFJBV19QT0xZR09OX0JPUkRFUlNfQk9PTEVBTl9QUkVGRVJFTkNFLAorCQkJCU1lc3NhZ2VzLmdldFN0cmluZygiR2VvUFBhZ2UuZHJhd3BvbHlib3JkZXJzIiksCisJCQkJZ2V0RmllbGRFZGl0b3JQYXJlbnQoKSk7CisKKwkJYm9yZGVyQ29sb3JGaWVsZEVkaXRvciA9IG5ldyBDb2xvckZpZWxkRWRpdG9yKAorCQkJCVByZWZlcmVuY2VDb25zdGFudHMuQk9SREVSX0NPTE9SX1BSRUZFUkVOQ0UsIE1lc3NhZ2VzCisJCQkJCQkuZ2V0U3RyaW5nKCJHZW9QUGFnZS5iYyIpLCBnZXRGaWVsZEVkaXRvclBhcmVudCgpKTsKKworCQlsb2dTY2FsZUZpZWxkRWRpdG9yID0gbmV3IEJvb2xlYW5GaWVsZEVkaXRvcigKKwkJCQlQcmVmZXJlbmNlQ29uc3RhbnRzLkxPR1NDQUxFX0JPT0xFQU5fUFJFRkVSRU5DRSwgTWVzc2FnZXMKKwkJCQkJCS5nZXRTdHJpbmcoIkdlb1BQYWdlLmxvZ3NjYWxlIiksIGdldEZpZWxkRWRpdG9yUGFyZW50KCkpOworCisJCWdhaW5GYWN0b3JGaWVsZEVkaXRvciA9IG5ldyBTdHJpbmdGaWVsZEVkaXRvcigKKwkJCQlQcmVmZXJlbmNlQ29uc3RhbnRzLkdBSU5fRkFDVE9SX1BSRUZFUkVOQ0UsIE1lc3NhZ2VzCisJCQkJCQkuZ2V0U3RyaW5nKCJHZW9QUGFnZS5nYWluZiIpLCBGSUVMRF9XSURUSCwKKwkJCQlnZXRGaWVsZEVkaXRvclBhcmVudCgpKTsKKwkJZ2FpbkZhY3RvckZpZWxkRWRpdG9yLnNldEVtcHR5U3RyaW5nQWxsb3dlZChmYWxzZSk7CisKKwkJYWRkRmllbGQoZHJhd1BvbHlnb25Cb3JkZXJzRmllbGRFZGl0b3IpOworCQlhZGRGaWVsZChib3JkZXJDb2xvckZpZWxkRWRpdG9yKTsKKwkJYWRkRmllbGQobG9nU2NhbGVGaWVsZEVkaXRvcik7CisJCWFkZEZpZWxkKGdhaW5GYWN0b3JGaWVsZEVkaXRvcik7CisJfSAvLyBjcmVhdGVGaWVsZEVkaXRvcnMKKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2UuamZhY2UucHJlZmVyZW5jZS5GaWVsZEVkaXRvclByZWZlcmVuY2VQYWdlI2NoZWNrU3RhdGUoKQorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIGNoZWNrU3RhdGUoKSB7CisJCXN1cGVyLmNoZWNrU3RhdGUoKTsKKworCQkvLyBDaGVjayBHYWluIGZhY3Rvcj8KKwkJaWYgKGlzVmFsaWQoKSkgeworCQkJLy8gWWVzCisJCQkvLyBJcyB0aGUgR2FpbiBmYWN0b3Igb2s/CisJCQl0cnkgeworCQkJCWZpbmFsIGRvdWJsZSBmYWN0b3IgPSBEb3VibGUucGFyc2VEb3VibGUoZ2FpbkZhY3RvckZpZWxkRWRpdG9yCisJCQkJCQkuZ2V0U3RyaW5nVmFsdWUoKSk7CisJCQkJaWYgKGZhY3RvciA8PSAwLjApIHsKKwkJCQkJc2V0RXJyb3JNZXNzYWdlKE1lc3NhZ2VzLmdldFN0cmluZygiR0ZhY3Rvci5uZWdFcnIiKSk7CisJCQkJCXNldFZhbGlkKGZhbHNlKTsKKwkJCQl9IC8vIGlmCisJCQl9IGNhdGNoIChFeGNlcHRpb24gZSkgeworCQkJCXNldEVycm9yTWVzc2FnZShNZXNzYWdlcy5nZXRTdHJpbmcoIkdlb1BQYWdlLm51bUVyciIpKTsKKwkJCQlzZXRWYWxpZChmYWxzZSk7CisJCQl9IC8vIGNhdGNoIEV4Y2VwdGlvbgorCQl9IC8vIENoZWNrIGd1aSBTY2FsaW5nIGZhY3RvcgorCisJfSAvLyBjaGVja1N0YXRlCisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2hQcmVmZXJlbmNlUGFnZSNpbml0KG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2gpCisJICovCisJcHVibGljIHZvaWQgaW5pdChAU3VwcHJlc3NXYXJuaW5ncygidW51c2VkIikKKwlJV29ya2JlbmNoIHdvcmtiZW5jaCkgeworCQkvLyBOb3RoaW5nCisJfSAvLyBpbml0CisKK30gLy8gR2VvZ3JhcGhpY1ByZWZlcmVuY2VQYWdlCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvdmlld3MvZ2VvZ3JhcGhpYy9wcmVmZXJlbmNlcy9NZXNzYWdlcy5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3ZpZXdzL2dlb2dyYXBoaWMvcHJlZmVyZW5jZXMvTWVzc2FnZXMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZjBjY2VmCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3ZpZXdzL2dlb2dyYXBoaWMvcHJlZmVyZW5jZXMvTWVzc2FnZXMuamF2YQpAQCAtMCwwICsxLDQyIEBACisvLyBNZXNzYWdlcy5qYXZhCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0udWkudmlld3MuZ2VvZ3JhcGhpYy5wcmVmZXJlbmNlczsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqYXZhLnV0aWwuTWlzc2luZ1Jlc291cmNlRXhjZXB0aW9uOworaW1wb3J0IGphdmEudXRpbC5SZXNvdXJjZUJ1bmRsZTsKKworLyoqCisgKiBUaGlzIGNsYXNzIGdldHMgTkxTIHZhbHVlcy4KKyAqLworcHVibGljIGNsYXNzIE1lc3NhZ2VzIHsKKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgQlVORExFX05BTUUgPSAib3JnLmVjbGlwc2Uuc3RlbS51aS52aWV3cy5nZW9ncmFwaGljLnByZWZlcmVuY2VzLm1lc3NhZ2VzIjsgLy8kTk9OLU5MUy0xJAorCisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgUmVzb3VyY2VCdW5kbGUgUkVTT1VSQ0VfQlVORExFID0gUmVzb3VyY2VCdW5kbGUKKwkJCS5nZXRCdW5kbGUoQlVORExFX05BTUUpOworCisJcHJpdmF0ZSBNZXNzYWdlcygpIHsKKwkJLy8gTm90aGluZworCX0KKworCS8qKgorCSAqIEBwYXJhbSBrZXkKKwkgKiBAcmV0dXJuIHRoZSBzdHJpbmcgbWF0Y2hpbmcgdGhlIGtleQorCSAqLworCXB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldFN0cmluZyhTdHJpbmcga2V5KSB7CisJCXRyeSB7CisJCQlyZXR1cm4gUkVTT1VSQ0VfQlVORExFLmdldFN0cmluZyhrZXkpOworCQl9IGNhdGNoIChNaXNzaW5nUmVzb3VyY2VFeGNlcHRpb24gZSkgeworCQkJcmV0dXJuICchJyArIGtleSArICchJzsKKwkJfQorCX0KK30gLy8gTWVzc2FnZXMKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS92aWV3cy9nZW9ncmFwaGljL3ByZWZlcmVuY2VzL1ByZWZlcmVuY2VDb25zdGFudHMuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS92aWV3cy9nZW9ncmFwaGljL3ByZWZlcmVuY2VzL1ByZWZlcmVuY2VDb25zdGFudHMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZTY2MjY2Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3ZpZXdzL2dlb2dyYXBoaWMvcHJlZmVyZW5jZXMvUHJlZmVyZW5jZUNvbnN0YW50cy5qYXZhCkBAIC0wLDAgKzEsMzggQEAKKy8vIFByZWZlcmVuY2VDb25zdGFudHMuamF2YQorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnVpLnZpZXdzLmdlb2dyYXBoaWMucHJlZmVyZW5jZXM7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioKKyAqIENvbnN0YW50IGRlZmluaXRpb25zIGZvciBwbHVnLWluIHByZWZlcmVuY2VzCisgKi8KK3B1YmxpYyBpbnRlcmZhY2UgUHJlZmVyZW5jZUNvbnN0YW50cyB7CisKKwkvKioKKwkgKiBUaGUgcHJlZmVyZW5jZSBpZCBmb3IgdGhlIGRyYXdpbmcgcG9seWdvbiBib3JkZXJzLgorCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIERSQVdfUE9MWUdPTl9CT1JERVJTX0JPT0xFQU5fUFJFRkVSRU5DRSA9ICJvcmcuZWNsaXBzZS5zdGVtLnVpLnZpZXdzLmdlb2dyYXBoaWMubWFwLnByZWZlcmVuY2VzLnBvbHlnb25ib3JkZXJzIjsKKwkvKioKKwkgKiBUaGUgcHJlZmVyZW5jZSBpZCBmb3IgdXNpbmcgYSBsb2dhcml0aG1pYyBzY2FsZSBvZiB0aGUgdmFsdWVzIGluIHRoZQorCSAqIGRpc3BsYXkuCisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgTE9HU0NBTEVfQk9PTEVBTl9QUkVGRVJFTkNFID0gIm9yZy5lY2xpcHNlLnN0ZW0udWkudmlld3MuZ2VvZ3JhcGhpYy5tYXAucHJlZmVyZW5jZXMubG9nc2NhbGUiOworCS8qKgorCSAqIFRoZSBwcmVmZXJlbmNlIGlkIGZvciB0aGUgbWFwIGdhaW4gZmFjdG9yCisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgR0FJTl9GQUNUT1JfUFJFRkVSRU5DRSA9ICJvcmcuZWNsaXBzZS5zdGVtLnVpLnZpZXdzLmdlb2dyYXBoaWMubWFwLnByZWZlcmVuY2VzLmdhaW5mYWN0b3IiOworCS8qKgorCSAqIFRoZSBwcmVmZXJlbmNlIGlkIGZvciB0aGUgbWFwJ3MgYm9yZGVyIGNvbG9yCisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgQk9SREVSX0NPTE9SX1BSRUZFUkVOQ0UgPSAib3JnLmVjbGlwc2Uuc3RlbS51aS52aWV3cy5nZW9ncmFwaGljLm1hcC5wcmVmZXJlbmNlcy5ib3JkZXJjb2xvciI7CisKK30gLy8gUHJlZmVyZW5jZUNvbnN0YW50cwpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3ZpZXdzL2dlb2dyYXBoaWMvcHJlZmVyZW5jZXMvUHJlZmVyZW5jZUluaXRpYWxpemVyLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvdmlld3MvZ2VvZ3JhcGhpYy9wcmVmZXJlbmNlcy9QcmVmZXJlbmNlSW5pdGlhbGl6ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YjQxMWE5Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3ZpZXdzL2dlb2dyYXBoaWMvcHJlZmVyZW5jZXMvUHJlZmVyZW5jZUluaXRpYWxpemVyLmphdmEKQEAgLTAsMCArMSw1MiBAQAorLy8gUHJlZmVyZW5jZUluaXRpYWxpemVyLmphdmEKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS51aS52aWV3cy5nZW9ncmFwaGljLnByZWZlcmVuY2VzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5wcmVmZXJlbmNlcy5BYnN0cmFjdFByZWZlcmVuY2VJbml0aWFsaXplcjsKKworLyoqCisgKiBDbGFzcyB1c2VkIHRvIGluaXRpYWxpemUgZGVmYXVsdCBwcmVmZXJlbmNlIHZhbHVlcy4KKyAqLworcHVibGljIGNsYXNzIFByZWZlcmVuY2VJbml0aWFsaXplciBleHRlbmRzIEFic3RyYWN0UHJlZmVyZW5jZUluaXRpYWxpemVyIHsKKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLnByZWZlcmVuY2VzLkFic3RyYWN0UHJlZmVyZW5jZUluaXRpYWxpemVyI2luaXRpYWxpemVEZWZhdWx0UHJlZmVyZW5jZXMoKQorCSAqLworCXB1YmxpYyB2b2lkIGluaXRpYWxpemVEZWZhdWx0UHJlZmVyZW5jZXMoKSB7CisvLwkJQFN1cHByZXNzV2FybmluZ3MoInVudXNlZCIpLy8kTk9OLU5MUy0xJAorLy8JCUlQcmVmZXJlbmNlU3RvcmUgc3RvcmUgPSBBY3RpdmF0b3IuZ2V0RGVmYXVsdCgpLmdldFByZWZlcmVuY2VTdG9yZSgpOworLy8JCXN0b3JlLnNldERlZmF1bHQoUHJlZmVyZW5jZUNvbnN0YW50cy5CQUNLR1JPVU5EX0NPTE9SX1BSRUZFUkVOQ0UsCisvLwkJCQlNYXBDYW52YXMuREVGQVVMVF9CQUNLR1JPVU5EX0NPTE9SX1JHQl9TVFJJTkcpOworLy8KKy8vCQlzdG9yZQorLy8JCQkJLnNldERlZmF1bHQoCisvLwkJCQkJCW9yZy5lY2xpcHNlLnN0ZW0udWkudmlld3MuZ2VvZ3JhcGhpYy5wcmVmZXJlbmNlcy5QcmVmZXJlbmNlQ29uc3RhbnRzLkJPUkRFUl9DT0xPUl9QUkVGRVJFTkNFLAorLy8JCQkJCQlNYXBDYW52YXMuREVGQVVMVF9QT0xZR09OX0JPUkRFUl9DT0xPUl9SR0JfU1RSSU5HKTsKKy8vCisvLwkJc3RvcmUKKy8vCQkJCS5zZXREZWZhdWx0KAorLy8JCQkJCQlvcmcuZWNsaXBzZS5zdGVtLnVpLnZpZXdzLmdlb2dyYXBoaWMucHJlZmVyZW5jZXMuUHJlZmVyZW5jZUNvbnN0YW50cy5EUkFXX1BPTFlHT05fQk9SREVSU19CT09MRUFOX1BSRUZFUkVOQ0UsCisvLwkJCQkJCU1hcENhbnZhcy5ERUZBVUxUX0RSQVdfUE9MWUdPTl9CT1JERVJTKTsKKy8vCisvLwkJc3RvcmUKKy8vCQkJCS5zZXREZWZhdWx0KAorLy8JCQkJCQlvcmcuZWNsaXBzZS5zdGVtLnVpLnZpZXdzLmdlb2dyYXBoaWMucHJlZmVyZW5jZXMuUHJlZmVyZW5jZUNvbnN0YW50cy5MT0dTQ0FMRV9CT09MRUFOX1BSRUZFUkVOQ0UsCisvLwkJCQkJCU1hcENhbnZhcy5ERUZBVUxUX1VTRV9MT0dTQ0FMSU5HKTsKKy8vCisvLwkJc3RvcmUKKy8vCQkJCS5zZXREZWZhdWx0KAorLy8JCQkJCQlvcmcuZWNsaXBzZS5zdGVtLnVpLnZpZXdzLmdlb2dyYXBoaWMucHJlZmVyZW5jZXMuUHJlZmVyZW5jZUNvbnN0YW50cy5HQUlOX0ZBQ1RPUl9QUkVGRVJFTkNFLAorLy8JCQkJCQlNYXBDYW52YXMuREVGQVVMVF9HQUlOX0ZBQ1RPUik7CisKKwl9IC8vIGluaXRpYWxpemVEZWZhdWx0UHJlZmVyZW5jZXMKK30gLy8gUHJlZmVyZW5jZUluaXRpYWxpemVyCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvdmlld3MvZ2VvZ3JhcGhpYy9wcmVmZXJlbmNlcy9tZXNzYWdlcy5wcm9wZXJ0aWVzIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3ZpZXdzL2dlb2dyYXBoaWMvcHJlZmVyZW5jZXMvbWVzc2FnZXMucHJvcGVydGllcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MmZkNGE1Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3ZpZXdzL2dlb2dyYXBoaWMvcHJlZmVyZW5jZXMvbWVzc2FnZXMucHJvcGVydGllcwpAQCAtMCwwICsxLDIzIEBACisjIG1lc3NhZ2VzLnByb3BlcnRpZXMKKyMKKyMgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyMgKiBDb3B5cmlnaHQgKGMpIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisjICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworIyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorIyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisjICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyMgKgorIyAqIENvbnRyaWJ1dG9yczoKKyMgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisjICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK0dlb1BQYWdlLlZpeiA9IEdlb2dyYXBoaWMgVmlzdWFsaXphdGlvbiBQcmVmZXJlbmNlcworCisKK0dlb1BQYWdlLmJjID0gJkJvcmRlcnMgQ29sb3IKK0dlb1BQYWdlLmRyYXdwb2x5Ym9yZGVycyA9IERyYXcgJlBvbHlnb24gQm9yZGVycworR2VvUFBhZ2UubG9nc2NhbGUgPSBVc2UgTG9nYXJpdGhtaWMgU2NhbGUKK0dlb1BQYWdlLmdhaW5mID0gR2FpbiAmRmFjdG9yCisKK0dlb1BQYWdlLm51bUVyciA9IFRoZSBmaWVsZCBpcyBub3QgYSB2YWxpZCBudW1iZXIuCitHRmFjdG9yLm5lZ0VyciA9IFRoZSBHYWluIEZhY3RvciBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAwLjAKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS92aWV3cy9nZW9ncmFwaGljL3ByZWZlcmVuY2VzL21lc3NhZ2VzX2RlLnByb3BlcnRpZXMgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvdmlld3MvZ2VvZ3JhcGhpYy9wcmVmZXJlbmNlcy9tZXNzYWdlc19kZS5wcm9wZXJ0aWVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNhYWVkNDUKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvdmlld3MvZ2VvZ3JhcGhpYy9wcmVmZXJlbmNlcy9tZXNzYWdlc19kZS5wcm9wZXJ0aWVzCkBAIC0wLDAgKzEsMjMgQEAKKyMgbWVzc2FnZXMucHJvcGVydGllcworIworIyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIyAqIENvcHlyaWdodCAoYykgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyMgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisjICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisjICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyMgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorIyAqCisjICogQ29udHJpYnV0b3JzOgorIyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworR2VvUFBhZ2UuVml6PUVpbnN0ZWxsdW5nZW4gZlx1MDBmY3IgZ2VvZ3JhcGhpc2NoZSBWaXN1YWxpc2llcnVuZworCisKK0dlb1BQYWdlLmJjPSZCb3JkZXJzIENvbG9yCitHZW9QUGFnZS5kcmF3cG9seWJvcmRlcnM9JlBvbHlnb25ncmVuemVuIHplaWNobmVuCitHZW9QUGFnZS5sb2dzY2FsZT1Mb2dhcml0aG1pc2NoZSBTa2FsaWVydW5nIGJlbnV0emVuCitHZW9QUGFnZS5nYWluZj1adW5haG1lICZGYWt0b3IKKworR2VvUFBhZ2UubnVtRXJyPURhcyBGZWxkIGlzdCBrZWluZSBnXHUwMGZjbHRpZ2UgTnVtbWVyLgorR0ZhY3Rvci5uZWdFcnI9RGVyIFp1d2FjaHMtRmFrdG9yIG11c3MgZ3JcdTAwZjZcdTAwZGZlciBhbHMgMC4wIHNlaW4KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS92aWV3cy9nZW9ncmFwaGljL3ByZWZlcmVuY2VzL21lc3NhZ2VzX2tyLnByb3BlcnRpZXMgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvdmlld3MvZ2VvZ3JhcGhpYy9wcmVmZXJlbmNlcy9tZXNzYWdlc19rci5wcm9wZXJ0aWVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM0NWY5NzUKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvdmlld3MvZ2VvZ3JhcGhpYy9wcmVmZXJlbmNlcy9tZXNzYWdlc19rci5wcm9wZXJ0aWVzCkBAIC0wLDAgKzEsMjMgQEAKKyMgbWVzc2FnZXMucHJvcGVydGllcworIworIyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIyAqIENvcHlyaWdodCAoYykgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyMgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisjICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisjICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyMgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorIyAqCisjICogQ29udHJpYnV0b3JzOgorIyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworR2VvUFBhZ2UuVml6PVx1YzljMFx1YjlhY1x1YzgwMSBcdWMyZGNcdWFjMDFcdWQ2NTQgXHVkNjU4XHVhY2JkIFx1YzEyNFx1YzgxNQorCisKK0dlb1BQYWdlLmJjPSZCb3JkZXJzIENvbG9yCitHZW9QUGFnZS5kcmF3cG9seWJvcmRlcnM9JiBcdWIyZTRcdWFjMDFcdWQ2MTUgXHVkMTRjXHViNDUwXHViOWFjXHViOTdjIFx1YWRmOFx1YjlhY1x1YWUzMAorR2VvUFBhZ2UubG9nc2NhbGU9XHViODVjXHVhZGY4IFx1YzJhNFx1Y2YwMFx1Yzc3YyBcdWMwYWNcdWM2YTkKK0dlb1BQYWdlLmdhaW5mPVx1Yzc3NFx1YjRkZCAmXHVjNzc4XHVjNzkwCisKK0dlb1BQYWdlLm51bUVycj1cdWQ1NDRcdWI0ZGNcdWIyOTQgXHVjNzIwXHVkNmE4XHVkNTVjIFx1YmM4OFx1ZDYzOFx1YWMwMCBcdWM1NDRcdWIyZDguCitHRmFjdG9yLm5lZ0Vycj1cdWM3NzRcdWI0ZGQgXHVhY2M0XHVjMjE4XHViMjk0IDAuMFx1YmNmNFx1YjJlNCBcdWNlZTRcdWM1N2NcdWQ1NjgKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS92aWV3cy9nZW9ncmFwaGljL3ByZWZlcmVuY2VzL21lc3NhZ2VzX3poLnByb3BlcnRpZXMgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvdmlld3MvZ2VvZ3JhcGhpYy9wcmVmZXJlbmNlcy9tZXNzYWdlc196aC5wcm9wZXJ0aWVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdlYjU1NTMKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvdmlld3MvZ2VvZ3JhcGhpYy9wcmVmZXJlbmNlcy9tZXNzYWdlc196aC5wcm9wZXJ0aWVzCkBAIC0wLDAgKzEsMjMgQEAKKyMgbWVzc2FnZXMucHJvcGVydGllcworIworIyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIyAqIENvcHlyaWdodCAoYykgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyMgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisjICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisjICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyMgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorIyAqCisjICogQ29udHJpYnV0b3JzOgorIyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworR2VvUFBhZ2UuVml6PVx1NTczMFx1NzQwNlx1NTNlZlx1ODljNlx1NTMxNlx1NTA0Zlx1NTk3ZAorCisKK0dlb1BQYWdlLmJjPSZCb3JkZXJzIENvbG9yCitHZW9QUGFnZS5kcmF3cG9seWJvcmRlcnM9XHU3ZWQ4XHU1MjM2XHU1OTFhXHU4ZmI5XHU1ZjYyXHU4ZmI5XHU2ODQ2CitHZW9QUGFnZS5sb2dzY2FsZT1cdTc1MjhcdTViZjlcdTY1NzBcdTgzMDNcdTU2ZjQKK0dlb1BQYWdlLmdhaW5mPVx1NTg5ZVx1NzZjYVx1NTQ4Y1x1NTZlMFx1NWI1MAorCitHZW9QUGFnZS5udW1FcnI9XHU4YmU1XHU1MzNhXHU1N2RmXHU0ZTBkXHU2NjJmXHU0ZTAwXHU0ZTJhXHU2NzA5XHU2NTQ4XHU3Njg0XHU2NTcwXHU1YjU3CitHRmFjdG9yLm5lZ0Vycj1cdTU4OWVcdTc2Y2FcdTU2ZTBcdTViNTBcdTVmYzVcdTk4N2JcdTU5MjdcdTRlOGUwLjAKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS92aWV3cy9tZXNzYWdlcy5wcm9wZXJ0aWVzIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3ZpZXdzL21lc3NhZ2VzLnByb3BlcnRpZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjIxZjQ3MAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS92aWV3cy9tZXNzYWdlcy5wcm9wZXJ0aWVzCkBAIC0wLDAgKzEsNDQgQEAKKyMgVmlld3NNZXNzYWdlcy5wcm9wZXJ0aWVzCisjCisjIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorIyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyMgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyMgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorIyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisjICoKKyMgKiBDb250cmlidXRvcnM6CisjICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorIyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjIElkZW50aWZpYWJsZSBQbHVnaW4gVmlldworSVBWaWV3Lk5vX0NhdGVnb3J5PUNhdGVnb3J5IFwiezB9XCIgZG9lcyBub3QgZXhpc3QuICBVc2luZyBcIi9cIiBpbnN0ZWFkLgorSVBWaWV3LlVuZXhwZWN0ZWRfRWxlbWVudD1VbmV4cGVjdGVkIGVsZW1lbnQgXCJ7MH1cIiBmb3VuZCBmb3IgZXh0ZW5zaW9uIHBvaW50IFwiezF9XCIKKworIyBTaW11bGF0aW9uIENvbnRyb2wgVmlldworU0NWaWV3LlJ1bj1SdW4KKworU0NWaWV3LlBhdXNlPVBhdXNlCitTQ1ZpZXcuUmVzZXQ9UmVzZXQKK1NDVmlldy5TdGVwPVN0ZXAKK1NDVmlldy5TdG9wPVN0b3AKKworIyBTaW11bGF0aW9uIENvbnRyb2wKKyMgVGhlIHN0cmluZ3Mgd2l0aCAiOiIgc2hvdWxkIGhhdmUgdGhlICI6IiBleHRyYWN0ZWQgREFGCitTQ3RybC5SdW5uaW5nPVN0YXR1cyA6IFJ1bm5pbmcKK1NDdHJsLlJlc2V0PVN0YXR1cyA6IFJlc2V0CitTQ3RybC5QYXVzZWQ9U3RhdHVzIDogUGF1c2VkCitTQ3RybC5UaW1lPVRpbWUKK1NDdHJsLlByb2dyZXNzPVByb2dyZXNzCitTQ3RybC5TdGFydFNpbT1TdGFydCB0aGUgc2ltdWxhdGlvbgorU0N0cmwuUGF1c2VTaW09UGF1c2UgdGhlIHNpbXVsYXRpb24KK1NDdHJsLlJlc3RvcmVTaW09UmVzdG9yZSB0aGUgc2ltdWxhdGlvbiB0byBpdHMgc3RhcnRpbmcgc3RhdGUKK1NDdHJsLlN0ZXBTaW09QWR2YW5jZSB0aGUgc2ltdWxhdGlvbiBieSBvbmUgdGltZSBzdGVwCitTQ3RybC5TdG9wU2ltPVN0b3AgdGhlIHNpbXVsYXRpb24KK1NDdHJsLlZpc3VhbGl6ZVNpbT1TaG93IG9uIE1hcFZpZXdlcgorCisjIFNURU0gUHJvamVjdCBFeHBsb3JlcgorU1RFTVBFeC5DRF9UaXRsZT1Db25maXJtIERlbGV0ZQorU1RFTVBFeC5DRD1BcmUgeW91IHN1cmUgeW91IHdhbnQgdG8gZGVsZXRlICIKK1NURU1QRXguQ0RfUHJvYj1Qcm9ibGVtIGRlbGV0aW5nICIKK1NURU1QRXguUmVGcmVzaF9Qcm9iPVByb2JsZW0gcmVmcmVzaGluZyAiCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvdmlld3MvbWVzc2FnZXNfZGUucHJvcGVydGllcyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS92aWV3cy9tZXNzYWdlc19kZS5wcm9wZXJ0aWVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNlY2I5MmUKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvdmlld3MvbWVzc2FnZXNfZGUucHJvcGVydGllcwpAQCAtMCwwICsxLDQ0IEBACisjIFZpZXdzTWVzc2FnZXMucHJvcGVydGllcworIworIyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIyAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyMgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisjICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisjICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyMgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorIyAqCisjICogQ29udHJpYnV0b3JzOgorIyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworIyBJZGVudGlmaWFibGUgUGx1Z2luIFZpZXcKK0lQVmlldy5Ob19DYXRlZ29yeT1LYXRlZ29yaWUgXCAiezB9IFwiIGV4aXN0aWVydCBuaWNodC4gQmVudXR6ZSBcICIvIFwiIHN0YXR0ZGVzc2VuLgorSVBWaWV3LlVuZXhwZWN0ZWRfRWxlbWVudD1VbmVyd2FydGV0ZXMgRWxlbWVudCBcInswfSBcIiBnZWZ1bmRlbiBmXHUwMGZjciBFcndlaXRlcnVuZ3NwdW5rdCBcInsxfSBcIgorCisjIFNpbXVsYXRpb24gQ29udHJvbCBWaWV3CitTQ1ZpZXcuUnVuPUF1c2ZcdTAwZmNocmVuCisKK1NDVmlldy5QYXVzZT1QYXVzaWVyZW4KK1NDVmlldy5SZXNldD1adXJcdTAwZmNja3NldHplbgorU0NWaWV3LlN0ZXA9U2Nocml0dAorU0NWaWV3LlN0b3A9U3RvcHAKKworIyBTaW11bGF0aW9uIENvbnRyb2wKKyMgVGhlIHN0cmluZ3Mgd2l0aCAiOiIgc2hvdWxkIGhhdmUgdGhlICI6IiBleHRyYWN0ZWQgREFGCitTQ3RybC5SdW5uaW5nPVN0YXR1czogTGF1ZmVuZAorU0N0cmwuUmVzZXQ9U3RhdHVzOiBadXJcdTAwZmNja2dlc2V0enQKK1NDdHJsLlBhdXNlZD1TdGF0dXM6IFBhdXNlCitTQ3RybC5UaW1lPVplaXQKK1NDdHJsLlByb2dyZXNzPUZvcnRzY2hyaXR0CitTQ3RybC5TdGFydFNpbT1TaW11bGF0aW9uIHN0YXJ0ZW4KK1NDdHJsLlBhdXNlU2ltPVNpbXVsYXRpb24gcGF1c2llcmVuCitTQ3RybC5SZXN0b3JlU2ltPURpZSBTaW11bGF0aW9uIGluIGlocmVtIEF1c2dhbmdzenVzdGFuZCB3aWVkZXJoZXJzdGVsbGVuCitTQ3RybC5TdGVwU2ltPUVpbmVuIFNpbXVsYXRpb25zc2Nocml0dCBhdXNmXHUwMGZjaHJlbgorU0N0cmwuU3RvcFNpbT1TaW11bGF0aW9uIHN0b3BwZW4KK1NDdHJsLlZpc3VhbGl6ZVNpbT1BdWYgTWFwVmlld2VyCisKKyMgU1RFTSBQcm9qZWN0IEV4cGxvcmVyCitTVEVNUEV4LkNEX1RpdGxlPUxcdTAwZjZzY2hlbiBiZXN0XHUwMGU0dGlnZW4KK1NURU1QRXguQ0Q9U2luZCBTaWUgc2ljaGVyLCBkaWUgU2llIGZvbGdlbmRlcyBsXHUwMGY2c2NoZW4gbVx1MDBmNmNodGVuICIKK1NURU1QRXguQ0RfUHJvYj1Qcm9ibGVtIGJlaW0gTFx1MDBmNnNjaGVuIHZvbiAiCitTVEVNUEV4LlJlRnJlc2hfUHJvYj1Qcm9ibGVtIGJlaW0gQWt0dWFsaXNpZXJlbiB2b24gIgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3ZpZXdzL21lc3NhZ2VzX2tyLnByb3BlcnRpZXMgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvdmlld3MvbWVzc2FnZXNfa3IucHJvcGVydGllcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41Mzk0NTNkCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3ZpZXdzL21lc3NhZ2VzX2tyLnByb3BlcnRpZXMKQEAgLTAsMCArMSw0NCBAQAorIyBWaWV3c01lc3NhZ2VzLnByb3BlcnRpZXMKKyMKKyMgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyMgKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisjICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworIyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorIyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisjICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyMgKgorIyAqIENvbnRyaWJ1dG9yczoKKyMgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisjICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyMgSWRlbnRpZmlhYmxlIFBsdWdpbiBWaWV3CitJUFZpZXcuTm9fQ2F0ZWdvcnk9XHVjZTc0XHVkMTRjXHVhY2UwXHViOWFjIFwgInswfSBcIlx1Yzg3NFx1YzdhY1x1ZDU1OFx1YzljMCBcdWM1NGFcdWM3NGMuIFx1YjMwMFx1YzJlMCBcICIvIFwiXHVjMGFjXHVjNmE5LgorSVBWaWV3LlVuZXhwZWN0ZWRfRWxlbWVudD1cdWQ2NTVcdWM3YTUgXHVkM2VjXHVjNzc4XHVkMmI4IFwgInsxfSBcIlx1YzVkMCBcdWIzMDBcdWQ1NzQgXHVjNjA4XHVjMGMxXHVjZTU4IFx1YmFiYlx1ZDU1YyBcdWM2OTRcdWMxOGMgXCAiezB9IFwiIFx1YmMxY1x1YWNhYworCisjIFNpbXVsYXRpb24gQ29udHJvbCBWaWV3CitTQ1ZpZXcuUnVuPVx1YzJlNFx1ZDU4OQorCitTQ1ZpZXcuUGF1c2U9XHVjOTExXHVjOWMwCitTQ1ZpZXcuUmVzZXQ9XHVjN2FjXHVjMTI0XHVjODE1CitTQ1ZpZXcuU3RlcD1cdWIyZThcdWFjYzQKK1NDVmlldy5TdG9wPVx1YzkxMVx1YzljMAorCisjIFNpbXVsYXRpb24gQ29udHJvbAorIyBUaGUgc3RyaW5ncyB3aXRoICI6IiBzaG91bGQgaGF2ZSB0aGUgIjoiIGV4dHJhY3RlZCBEQUYKK1NDdHJsLlJ1bm5pbmc9XHVjMGMxXHVkMGRjIDogXHVjMmU0XHVkNTg5CitTQ3RybC5SZXNldD1cdWMwYzFcdWQwZGMgOiBcdWM3YWNcdWMxMjRcdWM4MTUKK1NDdHJsLlBhdXNlZD1cdWMwYzFcdWQwZGMgOiBcdWM3N2NcdWMyZGMgXHVjOTExXHVjOWMwCitTQ3RybC5UaW1lPVx1YzJkY1x1YWMwNAorU0N0cmwuUHJvZ3Jlc3M9XHVjOWM0XHVkNTg5CitTQ3RybC5TdGFydFNpbT1cdWMyZGNcdWJiYWNcdWI4MDhcdWM3NzRcdWMxNTggXHVjMmRjXHVjNzkxCitTQ3RybC5QYXVzZVNpbT1cdWMyZGNcdWJiYWNcdWI4MDhcdWM3NzRcdWMxNTggXHVjNzg0XHVjMmRjIFx1YzkxMVx1YzljMAorU0N0cmwuUmVzdG9yZVNpbT1cdWMyZGNcdWM3OTEgXHVjMGMxXHVkMGRjXHViODVjIFx1YzJkY1x1YmJhY1x1YjgwOFx1Yzc3NFx1YzE1OFx1Yzc0NCBcdWJjZjVcdWM2ZDAKK1NDdHJsLlN0ZXBTaW09XHVjMmRjXHViYmFjXHViODA4XHVjNzc0XHVjMTU4XHVjNzQ0IFx1ZDU1OFx1YjA5OFx1Yzc1OCBcdWMyZGNcdWFjMDQgXHViMmU4XHVjNzA0IFx1YjljY1x1ZDA3YyAgXHVjOWM0XHVkNTg5CitTQ3RybC5TdG9wU2ltPVx1YzJkY1x1YmJhY1x1YjgwOFx1Yzc3NFx1YzE1OCBcdWM5MTFcdWM5YzAKK1NDdHJsLlZpc3VhbGl6ZVNpbT1NYXBWaWV3ZXJcdWM1ZDBcdWMxMWNcdWJjZjRcdWFlMzAKKworIyBTVEVNIFByb2plY3QgRXhwbG9yZXIKK1NURU1QRXguQ0RfVGl0bGU9XHVjMGFkXHVjODFjIFx1ZDY1NVx1Yzc3OAorU1RFTVBFeC5DRD1cdWM4MTVcdWI5ZDBcdWI4NWMgXHVjMGFkXHVjODFjXHVkNTU4XHVjMmRjXHVhY2EwXHVjMmI1XHViMmM4XHVhZTRjIgorU1RFTVBFeC5DRF9Qcm9iPSIgXHVjMGFkXHVjODFjIFx1YzkxMSBcdWJiMzhcdWM4MWMgXHViYzFjXHVjMGRkCitTVEVNUEV4LlJlRnJlc2hfUHJvYj0iIFx1YWMzMVx1YzJlMCBcdWM5MTEgXHViYjM4XHVjODFjIFx1YmMxY1x1YzBkZApkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3ZpZXdzL21lc3NhZ2VzX3poLnByb3BlcnRpZXMgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvdmlld3MvbWVzc2FnZXNfemgucHJvcGVydGllcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42Y2QwZjM5Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3ZpZXdzL21lc3NhZ2VzX3poLnByb3BlcnRpZXMKQEAgLTAsMCArMSw0NCBAQAorIyBWaWV3c01lc3NhZ2VzLnByb3BlcnRpZXMKKyMKKyMgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyMgKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisjICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworIyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorIyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisjICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyMgKgorIyAqIENvbnRyaWJ1dG9yczoKKyMgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisjICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyMgSWRlbnRpZmlhYmxlIFBsdWdpbiBWaWV3CitJUFZpZXcuTm9fQ2F0ZWdvcnk9XHU1MjA2XHU3YzdiXFx1MjAxY3swfSBcXHUyMDFkXHU0ZTBkXHU1YjU4XHU1NzI4XHUzMDAyXHU0ZjdmXHU3NTI4XFx1MjAxYy8gXFx1MjAxZFx1Njc2NVx1NGVlM1x1NjZmZlx1MzAwMgorSVBWaWV3LlVuZXhwZWN0ZWRfRWxlbWVudD1cdTRlM2FcdTYyNjlcdTVjNTVcdTcwYjlcXHUyMDFjezF9IFxcdTIwMWRcdTUzZDFcdTczYjBcdTYxMGZcdTU5MTZcdTc2ODRcdTUxNDNcdTdkMjBcXHUyMDFjezB9IFxcdTIwMWQKKworIyBTaW11bGF0aW9uIENvbnRyb2wgVmlldworU0NWaWV3LlJ1bj1cdThmZDBcdTg4NGMKKworU0NWaWV3LlBhdXNlPVx1NjY4Mlx1NTA1YworU0NWaWV3LlJlc2V0PVx1NTkwZFx1NGY0ZAorU0NWaWV3LlN0ZXA9XHU2YjY1CitTQ1ZpZXcuU3RvcD1cdTUwNWNcdTZiNjIKKworIyBTaW11bGF0aW9uIENvbnRyb2wKKyMgVGhlIHN0cmluZ3Mgd2l0aCAiOiIgc2hvdWxkIGhhdmUgdGhlICI6IiBleHRyYWN0ZWQgREFGCitTQ3RybC5SdW5uaW5nPVx1NzJiNlx1NjAwMVx1ZmYxYVx1OGZkMFx1ODg0YworU0N0cmwuUmVzZXQ9XHU3MmI2XHU2MDAxXHVmZjFhXHU1OTBkXHU0ZjRkCitTQ3RybC5QYXVzZWQ9XHU3MmI2XHU2MDAxXHVmZjFhXHU1ZGYyXHU2NjgyXHU1MDVjCitTQ3RybC5UaW1lPVx1NjVmNlx1OTVmNAorU0N0cmwuUHJvZ3Jlc3M9XHU4ZmRiXHU1YzU1CitTQ3RybC5TdGFydFNpbT1cdTVmMDBcdTU5Y2JcdTZhMjFcdTYyZGYKK1NDdHJsLlBhdXNlU2ltPVx1NjY4Mlx1NTA1Y1x1NGVmZlx1NzcxZgorU0N0cmwuUmVzdG9yZVNpbT1cdTVjMDZcdTRlZmZcdTc3MWZcdThmZDhcdTUzOWZcdTUyMzBcdThkNzdcdTU5Y2JcdTcyYjZcdTYwMDEKK1NDdHJsLlN0ZXBTaW09XHU0ZWU1XHU0ZTAwXHU0ZTJhXHU2NWY2XHU5NWY0XHU2YjY1XHU5NTdmXHU2NzY1XHU4ZmQwXHU4ODRjXHU2YTIxXHU2MmRmXHU0ZWZmXHU3NzFmCitTQ3RybC5TdG9wU2ltPVx1NTA1Y1x1NmI2Mlx1NGVmZlx1NzcxZgorU0N0cmwuVmlzdWFsaXplU2ltPVx1NTcyOFx1NTZmZVx1NzkzYVx1NGUwYVx1NjYzZVx1NzkzYQorCisjIFNURU0gUHJvamVjdCBFeHBsb3JlcgorU1RFTVBFeC5DRF9UaXRsZT1cdTc4NmVcdThiYTRcdTUyMjBcdTk2NjQKK1NURU1QRXguQ0Q9XHU0ZjYwXHU3ODZlXHU1YjlhXHU4OTgxXHU1MjIwXHU5NjY0XHU1NDE3XHVmZjFmCitTVEVNUEV4LkNEX1Byb2I9XHU5NWVlXHU5ODk4XHU1MjIwXHU5NjY0XHU0ZTJkCitTVEVNUEV4LlJlRnJlc2hfUHJvYj1cdTk1ZWVcdTk4OThcdTY2ZjRcdTY1YjAKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS93aWRnZXRzL0NvbG9yUHJvdmlkZXJQcm9wZXJ0aWVzQ29tcG9zaXRlLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvd2lkZ2V0cy9Db2xvclByb3ZpZGVyUHJvcGVydGllc0NvbXBvc2l0ZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFlMjY2ZWQKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvd2lkZ2V0cy9Db2xvclByb3ZpZGVyUHJvcGVydGllc0NvbXBvc2l0ZS5qYXZhCkBAIC0wLDAgKzEsNDgyIEBACisvLyBDb2xvclByb3ZpZGVyUHJvcGVydGllc0NvbXBvc2l0ZS5qYXZhCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0udWkud2lkZ2V0czsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OworaW1wb3J0IGphdmEudXRpbC5FdmVudE9iamVjdDsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuY29uY3VycmVudC5Db3B5T25Xcml0ZUFycmF5TGlzdDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkR5bmFtaWNMYWJlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuRGVjb3JhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuYWRhcHRlcnMucmVsYXRpdmV2YWx1ZS5SZWxhdGl2ZVZhbHVlUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5hZGFwdGVycy5yZWxhdGl2ZXZhbHVlLlJlbGF0aXZlVmFsdWVQcm92aWRlckFkYXB0ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5hZGFwdGVycy5yZWxhdGl2ZXZhbHVlLlJlbGF0aXZlVmFsdWVQcm92aWRlckFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5EaXNlYXNlTW9kZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LlNXVDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLlNlbGVjdGlvbkFkYXB0ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5TZWxlY3Rpb25FdmVudDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QubGF5b3V0LkZvcm1BdHRhY2htZW50OworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5sYXlvdXQuRm9ybURhdGE7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5Gb3JtTGF5b3V0OworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbWJvOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZTsKKworLyoqCisgKiBUaGlzIGNsYXNzIGlzIGEgY29tcG91bmQgU1dUIHtAbGluayBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5XaWRnZXR9IHRoYXQgYWxsb3dzIGZvciB0aGUgc2VsZWN0aW9uIG9mCisgKiBhIHByb3BlcnRpZXMgb2YgYSB7QGxpbmsgRGVjb3JhdG9yfS4KKyAqLworcHVibGljIGNsYXNzIENvbG9yUHJvdmlkZXJQcm9wZXJ0aWVzQ29tcG9zaXRlIGV4dGVuZHMgQ29tcG9zaXRlIHsKKworCS8qKgorCSAqIEEgbGlzdCBvZiB7QGxpbmsgUHJvcGVydHlTZWxlY3Rpb25MaXN0ZW5lcn1zIHRvIGJlIG5vdGlmaWVkIGFib3V0CisJICogcHJvcGVydHkgc2VsZWN0aW9uIGV2ZW50cworCSAqLworCXByaXZhdGUgZmluYWwgTGlzdDxQcm9wZXJ0eVNlbGVjdGlvbkxpc3RlbmVyPiBwcm9wZXJ0eVNlbGVjdGlvbkxpc3RlbmVycyA9IG5ldyBDb3B5T25Xcml0ZUFycmF5TGlzdDxQcm9wZXJ0eVNlbGVjdGlvbkxpc3RlbmVyPigpOworCS8qKgorCSAqIFRoZSBpbml0aWFsIHByb3BlcnR5IG5hbWUgdG8gYmUgc2VsZWN0ZWQgd2hlbiB0aGUgY29tcG9zaXRlIGlzIGJlaW5nCisJICogaW5pdGlhbGl6ZWQKKwkgKi8KKwlwcml2YXRlIFN0cmluZyBpbml0aWFsUHJvcGVydHlOYW1lOworCS8qKgorCSAqIFRoZSB7QGxpbmsgQ29tYm99IG9mIGF2YWlsYWJsZSBwcm9wZXJ0aWVzCisJICovCisJQ29tYm8gcHJvcGVydGllc0NvbWJvOworCS8qKgorCSAqIFRoZSBwcm9wZXJ0aWVzCisJICovCisJTGlzdDxJdGVtUHJvcGVydHlEZXNjcmlwdG9yPiBwcm9wZXJ0aWVzOworCS8qKgorCSAqIFRoZSBzZWxlY3RlZCBwcm9wZXJ0eQorCSAqLworCUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3Igc2VsZWN0ZWRQcm9wZXJ0eTsKKworCS8vIC8qKgorCS8vICogVGhlIHNlbGVjdGVkIGRlY29yYXRvcgorCS8vICovCisJLy8gRGVjb3JhdG9yIHNlbGVjdGVkRGVjb3JhdG9yOworCisJLyoqCisJICogQ29uc3RydWN0b3IKKwkgKiAKKwkgKiBAcGFyYW0gcGFyZW50CisJICogICAgICAgICAgICB0aGUgcGFyZW50IHtAbGluayBDb21wb3NpdGV9CisJICogQHBhcmFtIHN0eWxlCisJICogICAgICAgICAgICBhbiBTV1Qgc3R5bGUKKwkgKi8KKwlwdWJsaWMgQ29sb3JQcm92aWRlclByb3BlcnRpZXNDb21wb3NpdGUoZmluYWwgQ29tcG9zaXRlIHBhcmVudCwKKwkJCWZpbmFsIGludCBzdHlsZSkgeworCQlzdXBlcihwYXJlbnQsIHN0eWxlKTsKKwkJZmluYWwgRm9ybUxheW91dCByZXRWYWx1ZUxheW91dCA9IG5ldyBGb3JtTGF5b3V0KCk7CisJCXRoaXMuc2V0TGF5b3V0KHJldFZhbHVlTGF5b3V0KTsKKworCQkvLyBDb21ibyBCb3ggb2YgdGhlIERlY29yYXRvciBQcm9wZXJ0aWVzCisJCXByb3BlcnRpZXNDb21ibyA9IG5ldyBDb21ibyh0aGlzLCBTV1QuRFJPUF9ET1dOIHwgU1dULlJFQURfT05MWQorCQkJCXwgU1dULkNFTlRFUik7CisKKwkJZmluYWwgRm9ybURhdGEgcHJvcGVydGllc0NvbWJvRm9ybURhdGEgPSBuZXcgRm9ybURhdGEoKTsKKwkJcHJvcGVydGllc0NvbWJvRm9ybURhdGEudG9wID0gbmV3IEZvcm1BdHRhY2htZW50KDAsIDApOworCQlwcm9wZXJ0aWVzQ29tYm9Gb3JtRGF0YS5sZWZ0ID0gbmV3IEZvcm1BdHRhY2htZW50KDAsIDApOworCQlwcm9wZXJ0aWVzQ29tYm9Gb3JtRGF0YS5yaWdodCA9IG5ldyBGb3JtQXR0YWNobWVudCgxMDAsIDApOworCQlwcm9wZXJ0aWVzQ29tYm8uc2V0TGF5b3V0RGF0YShwcm9wZXJ0aWVzQ29tYm9Gb3JtRGF0YSk7CisJCXByb3BlcnRpZXNDb21iby5zZXRFbmFibGVkKGZhbHNlKTsKKworCQl0aGlzLnBhY2soKTsKKworCQlwcm9wZXJ0aWVzQ29tYm8uYWRkU2VsZWN0aW9uTGlzdGVuZXIobmV3IFNlbGVjdGlvbkFkYXB0ZXIoKSB7CisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyB2b2lkIHdpZGdldFNlbGVjdGVkKAorCQkJCQlAU3VwcHJlc3NXYXJuaW5ncygidW51c2VkIikgZmluYWwgU2VsZWN0aW9uRXZlbnQgZSkgeworCQkJCS8vIEFueSBEZWNvcmF0b3IgcHJvcGVydGllcz8KKwkJCQlpZiAoIXByb3BlcnRpZXMuaXNFbXB0eSgpKSB7CisJCQkJCS8vIFllcworCQkJCQkvLyBJcyBpdCBkaWZmZXJlbnQ/CisJCQkJCWZpbmFsIEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IgdGVtcCA9IHByb3BlcnRpZXMKKwkJCQkJCQkuZ2V0KHByb3BlcnRpZXNDb21iby5nZXRTZWxlY3Rpb25JbmRleCgpKTsKKwkJCQkJaWYgKHNlbGVjdGVkUHJvcGVydHkgIT0gdGVtcCkgeworCQkJCQkJLy8gWWVzCisJCQkJCQlzZWxlY3RlZFByb3BlcnR5ID0gdGVtcDsKKwkJCQkJCW5vdGlmeVByb3BlcnR5U2VsZWN0aW9uKHNlbGVjdGVkUHJvcGVydHkpOworCQkJCQl9IC8vIGlmCisJCQkJfSAvLyBpZgorCQkJfSAvLyB3aWRnZXRTZWxlY3RlZAorCQl9IC8vIFNlbGVjdGlvbkFkYXB0ZXIKKwkJCQkpOworCX0gLy8gQ29sb3JQcm92aWRlclByb3BlcnRpZXNDb21wb3NpdGUKKworCS8qKgorCSAqIE5vdGlmeSBsaXN0ZW5lcnMgYWJvdXQgYSBwcm9wZXJ0eSB0aGF0IGhhcyBiZWVuIHNlbGVjdGVkCisJICogCisJICogQHBhcmFtIHNlbGVjdGVkUHJvcGVydHkKKwkgKiAgICAgICAgICAgIHRoZSBzZWxlY3RlZCBwcm9wZXJ0eQorCSAqLworCXZvaWQgbm90aWZ5UHJvcGVydHlTZWxlY3Rpb24oZmluYWwgSXRlbVByb3BlcnR5RGVzY3JpcHRvciBzZWxlY3RlZFByb3BlcnR5KSB7CisJCS8vIElzIHRoZXJlIGEgcHJvcGVydHk/CisJCWlmIChzZWxlY3RlZFByb3BlcnR5ICE9IG51bGwpIHsKKwkJCS8vIFllcworCQkJZmlyZVByb3BlcnR5U2VsZWN0aW9uRXZlbnQobmV3IFByb3BlcnR5U2VsZWN0aW9uRXZlbnQoCisJCQkJCXNlbGVjdGVkUHJvcGVydHksIHRoaXMpKTsKKwkJfSAvLyBpZgorCX0gLy8gbm90aWZ5UHJvcGVydHlTZWxlY3Rpb24KKworCS8qKgorCSAqIFJldHVybiBhIGxpc3Qgb2Yge0BsaW5rIEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3J9cyBmb3IgdGhlIHNwZWNpZmljCisJICoge0BsaW5rIERlY29yYXRvcn0uCisJICogCisJICogQHBhcmFtIGRlY29yYXRvcgorCSAqICAgICAgICAgICAgYSB7QGxpbmsgRGVjb3JhdG9yfSB0aGF0IG1vZGlmaWVzIHRoZSBzdGF0ZSBvZiB0aGUgY2Fub25pY2FsCisJICogICAgICAgICAgICB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkdyYXBofSBpbiB0aGUKKwkgKiAgICAgICAgICAgIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmpvYnMuc2ltdWxhdGlvbi5TaW11bGF0aW9ufS4KKwkgKiBAcmV0dXJuIGEge0BsaW5rIExpc3R9IG9mIHRoZSBwcm9wZXJ0aWVzIG9mIHRoZSB7QGxpbmsgRGVjb3JhdG9yfSB0aGF0CisJICogICAgICAgICBjYW4gYmUgZGlzcGxheWVkLgorCSAqLworCUxpc3Q8SXRlbVByb3BlcnR5RGVzY3JpcHRvcj4gZ2V0UHJvcGVydGllc1RvRGlzcGxheSgKKwkJCWZpbmFsIERlY29yYXRvciBkZWNvcmF0b3IsIGZpbmFsIFN0cmluZyBwb3B1bGF0aW9uSWRlbnRpZmllcikgeworCQlmaW5hbCBMaXN0PEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I+IHJldFZhbHVlID0gbmV3IEFycmF5TGlzdDxJdGVtUHJvcGVydHlEZXNjcmlwdG9yPigpOworCQkvLyBHb3QgRGVjb3JhdG9yPworCQlpZiAoZGVjb3JhdG9yICE9IG51bGwpIHsKKwkJCS8vIFllcworCQkJLy8gQXJlIHRoZXJlIGFueSBsYWJlbHMgdG8gdXBkYXRlPworCQkJaWYgKCFkZWNvcmF0b3IuZ2V0TGFiZWxzVG9VcGRhdGUoKS5pc0VtcHR5KCkpIHsKKwkJCQkvLyBZZXMKKwkJCQlpZiAoZGVjb3JhdG9yIGluc3RhbmNlb2YgRGlzZWFzZU1vZGVsKSB7CisJCQkJCS8vIERpZmZlcmVudCBsYWJlbHMgZXhpc3QgZm9yIGRpZmZlcmVudCBwb3B1bGF0aW9ucworCQkJCQlyZXRWYWx1ZS5hZGRBbGwocHJvcGVydHlTaWV2ZS5zaWV2ZSgoKERpc2Vhc2VNb2RlbCkgZGVjb3JhdG9yKQorCQkJCQkJCS5jcmVhdGVEaXNlYXNlTW9kZWxMYWJlbChwb3B1bGF0aW9uSWRlbnRpZmllcikpKTsKKwkJCQl9IGVsc2UgeworCQkJCQkvLyBUaGUgZmlyc3Qgb25lIGlzIGdvb2QgZW5vdWdoCisJCQkJCXJldFZhbHVlLmFkZEFsbChwcm9wZXJ0eVNpZXZlLnNpZXZlKGRlY29yYXRvcgorCQkJCQkJCS5nZXRMYWJlbHNUb1VwZGF0ZSgpLmdldCgwKSkpOworCQkJCX0KKwkJCX0gLy8gaWYgbGFiZWxzIHRvIHVwZGF0ZQorCQl9IC8vIGlmIGdvdCBkZWNvcmF0b3IKKwkJcmV0dXJuIHJldFZhbHVlOworCX0gLy8gZ2V0UHJvcGVydGllc1RvRGlzcGxheQorCisJLyoqCisJICogUmV0dXJucyB0aGUgZGVmYXVsdCBzZWxlY3RlZCB7QGxpbmsgSXRlbVByb3BlcnR5RGVzY3JpcHRvcn0uCisJICogCisJICogQHJldHVybiB0aGUgcHJvcGVydHkgb2YgdGhlIGRlY29yYXRvciB0aGF0IHNob3VsZCBiZSB0aGUgb25lIHRvIGJlCisJICogICAgICAgICBkaXNwbGF5ZWQgb3IgPGNvZGU+bnVsbDwvY29kZT4gaWYgZGVjb3JhdG9yUHJvcGVydGllcyBpcyBlbXB0eQorCSAqLworCXB1YmxpYyBJdGVtUHJvcGVydHlEZXNjcmlwdG9yIGdldERlZmF1bHRTZWxlY3RlZFByb3BlcnR5KCkgeworCQkvLyBMb29rIGZvciBhIHByb3BlcnR5IHdpdGggYSBuYW1lIHRoYXQgbWF0Y2hlcyB0aGUgb25lIHNwZWNpZmllZCBpbgorCQkvLyB0aGUgcHJlZmVyZW5jZXMuCisJCWZvciAoZmluYWwgSXRlbVByb3BlcnR5RGVzY3JpcHRvciBwcm9wZXJ0eSA6IHByb3BlcnRpZXMpIHsKKwkJCS8vIG5hbWUgbWF0Y2g/CisJCQlpZiAocHJvcGVydHkuZ2V0RGlzcGxheU5hbWUocHJvcGVydHkpLmVxdWFscyhpbml0aWFsUHJvcGVydHlOYW1lKSkgeworCQkJCS8vIFllcworCQkJCXJldHVybiBwcm9wZXJ0eTsKKwkJCX0gLy8gaWYKKwkJfSAvLyBmb3IgZWFjaCBJdGVtUHJvcGVydHlEZXNjcmlwdG9yCisJCS8vIERpZG4ndCBmaW5kIGEgbWF0Y2gsIGp1c3QgdXNlIHRoZSBmaXJzdCBvbmUuCisJCS8vIEFueSB0byB1c2U/CisJCWlmICghcHJvcGVydGllcy5pc0VtcHR5KCkpIHsKKwkJCS8vIFllcworCQkJcmV0dXJuIHByb3BlcnRpZXMuZ2V0KDApOworCQl9IC8vIGlmCisJCXJldHVybiBudWxsOworCX0gLy8gc2VsZWN0Q3VycmVudERlY29yYXRvclByb3BlcnR5CisKKwkvKioKKwkgKiBJbml0aWFsaXplcyB0aGUge0BsaW5rIENvbXBvc2l0ZX0gd2l0aCB0aGUgc3BlY2lmaWMge0BsaW5rIERlY29yYXRvcn0uCisJICogCisJICogQHBhcmFtIGRlY29yYXRvcgorCSAqICAgICAgICAgICAgdGhlIHtAbGluayBEZWNvcmF0b3J9IHRvIGluaXRpYWxpemUgd2l0aAorCSAqLworCXB1YmxpYyB2b2lkIGluaXRpYWxpemUoZmluYWwgRGVjb3JhdG9yIGRlY29yYXRvciwgZmluYWwgU3RyaW5nIHBvcHVsYXRpb25JZGVudGlmaWVyKSB7CisJCXByb3BlcnRpZXMgPSBnZXRQcm9wZXJ0aWVzVG9EaXNwbGF5KGRlY29yYXRvciwgcG9wdWxhdGlvbklkZW50aWZpZXIpOworCQlzZWxlY3RlZFByb3BlcnR5ID0gZ2V0RGVmYXVsdFNlbGVjdGVkUHJvcGVydHkoKTsKKwkJZmluYWwgYm9vbGVhbiBjb21ib0lzRW5hYmxlZCA9IChkZWNvcmF0b3IgIT0gbnVsbCA/IHRydWUgOiBmYWxzZSk7CisJCWluaXRpYWxpemVDb21ibyh0aGlzLnByb3BlcnRpZXNDb21ibywgZ2V0UHJvcGVydHlOYW1lcyhwcm9wZXJ0aWVzKSwKKwkJCQlnZXRQcm9wZXJ0eUluZGV4KHNlbGVjdGVkUHJvcGVydHksIHByb3BlcnRpZXMpLCBjb21ib0lzRW5hYmxlZCk7CisKKwkJLy8gbm90aWZ5UHJvcGVydHlTZWxlY3Rpb24oc2VsZWN0ZWRQcm9wZXJ0eSk7CisJCUNvbG9yUHJvdmlkZXJQcm9wZXJ0aWVzQ29tcG9zaXRlLnRoaXMKKwkJCQkubm90aWZ5UHJvcGVydHlTZWxlY3Rpb24oc2VsZWN0ZWRQcm9wZXJ0eSk7CisJfSAvLyBpbml0aWFsaXplCisKKwkvKioKKwkgKiBJbml0aWFsaXplcyB0aGUgcHJvcGVydGllcyB7QGxpbmsgQ29tYm99IGJveAorCSAqIAorCSAqIEBwYXJhbSBjb21ibworCSAqICAgICAgICAgICAgdGhlIHByb3BlcnRpZXMge0BsaW5rIENvbWJvfQorCSAqIEBwYXJhbSBuYW1lcworCSAqICAgICAgICAgICAgdGhlIHZhbHVlcyB0byBiZSBhZGRlZCB0byB0aGUge0BsaW5rIENvbWJvfQorCSAqIEBwYXJhbSBzZWxlY3Rpb25JbmRleAorCSAqICAgICAgICAgICAgaW5kZXggb2YgdGhlIHNlbGVjdGVkIGl0ZW0KKwkgKiBAcGFyYW0gaXNFbmFibGVkCisJICogICAgICAgICAgICBpcyB0aGUge0BsaW5rIENvbWJvfSBlbmFibGVkL2Rpc2FibGVkCisJICovCisJdm9pZCBpbml0aWFsaXplQ29tYm8oZmluYWwgQ29tYm8gY29tYm8sIGZpbmFsIFN0cmluZ1tdIG5hbWVzLAorCQkJZmluYWwgaW50IHNlbGVjdGlvbkluZGV4LCBmaW5hbCBib29sZWFuIGlzRW5hYmxlZCkgeworCQljb21iby5zZXRJdGVtcyhuYW1lcyk7CisJCWNvbWJvLnNlbGVjdChzZWxlY3Rpb25JbmRleCk7CisJCXByb3BlcnRpZXNDb21iby5zZXRFbmFibGVkKGlzRW5hYmxlZCk7CisJfSAvLyBpbml0aWFsaXplQ29tYm8KKworCS8qKgorCSAqIEdldCB0aGUgcHJvcGVydGllcyBuYW1lcy4KKwkgKiAKKwkgKiBAcGFyYW0gcHJvcGVydGllcworCSAqICAgICAgICAgICAgYSBsaXN0IG9mIHtAbGluayBEZWNvcmF0b3J9IHByb3BlcnRpZXMuCisJICogQHJldHVybiB0aGUgbmFtZXMgb2YgdGhlIHByb3BlcnRpZXMuCisJICovCisJU3RyaW5nW10gZ2V0UHJvcGVydHlOYW1lcyhmaW5hbCBMaXN0PEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I+IHByb3BlcnRpZXMpIHsKKwkJZmluYWwgTGlzdDxTdHJpbmc+IHJldFZhbHVlID0gbmV3IEFycmF5TGlzdDxTdHJpbmc+KCk7CisJCWlmIChwcm9wZXJ0aWVzICE9IG51bGwpIHsKKwkJCS8vIFllcworCQkJZm9yIChmaW5hbCBJdGVtUHJvcGVydHlEZXNjcmlwdG9yIHByb3BlcnR5IDogcHJvcGVydGllcykgeworCQkJCXJldFZhbHVlLmFkZChwcm9wZXJ0eS5nZXREaXNwbGF5TmFtZShwcm9wZXJ0eSkpOworCQkJfSAvLyBmb3IgZWFjaCBJdGVtUHJvcGVydHlEZXNjcmlwdG9yCisJCX0gLy8gaWYKKwkJcmV0dXJuIHJldFZhbHVlLnRvQXJyYXkobmV3IFN0cmluZ1tdIHt9KTsKKwl9IC8vIGdldFByb3BlcnR5TmFtZXMKKworCS8qKgorCSAqIEdldCB0aGUgaW5kZXggb2YgdGhlIHNlbGVjdGVkIHByb3BlcnR5LgorCSAqIAorCSAqIEBwYXJhbSBzZWxlY3RlZERlY29yYXRvclByb3BlcnR5CisJICogICAgICAgICAgICB0aGUgc2VsZWN0ZWQgcHJvcGVydHkKKwkgKiBAcGFyYW0gZGVjb3JhdG9yUHJvcGVydGllcworCSAqICAgICAgICAgICAgdGhlIGxpc3Qgb2YgYWxsIHByb3BlcnRpZXMKKwkgKiBAcmV0dXJuIHRoZSBpbmRleCBvZiB0aGUgc2VsZWN0ZWREZWNvcmF0b3JQcm9wZXJ0eSBpbiB0aGUKKwkgKiAgICAgICAgIGRlY29yYXRvclByb3Blcml0ZXMgbGlzdCwgb3IgMCBpZiBzZWxlY3RlZERlY29yYXRvclByb3BlcnR5IGlzCisJICogICAgICAgICA8Y29kZT5udWxsPC9jb2RlPgorCSAqLworCWludCBnZXRQcm9wZXJ0eUluZGV4KAorCQkJZmluYWwgSXRlbVByb3BlcnR5RGVzY3JpcHRvciBzZWxlY3RlZERlY29yYXRvclByb3BlcnR5LAorCQkJZmluYWwgTGlzdDxJdGVtUHJvcGVydHlEZXNjcmlwdG9yPiBkZWNvcmF0b3JQcm9wZXJ0aWVzKSB7CisJCWlmIChzZWxlY3RlZERlY29yYXRvclByb3BlcnR5ICE9IG51bGwpIHsKKwkJCS8vIFllcworCQkJcmV0dXJuIGRlY29yYXRvclByb3BlcnRpZXMuaW5kZXhPZihzZWxlY3RlZERlY29yYXRvclByb3BlcnR5KTsKKwkJfSAvLyBpZgorCQlyZXR1cm4gMDsKKwl9IC8vIGdldFByb3BlcnR5SW5kZXgKKworCS8qKgorCSAqIEFkZCBhIHtAbGluayBQcm9wZXJ0eVNlbGVjdGlvbkxpc3RlbmVyfSB0byB0aGUgbGlzdCBvZiBsaXN0ZW5lcnMuCisJICogCisJICogQHBhcmFtIGxpc3RlbmVyCisJICogICAgICAgICAgICB0aGUge0BsaW5rIFByb3BlcnR5U2VsZWN0aW9uTGlzdGVuZXJ9IHRvIGJlIGFkZGVkCisJICovCisJcHVibGljIHZvaWQgYWRkUHJvcGVydHlTZWxlY3Rpb25MaXN0ZW5lcigKKwkJCWZpbmFsIFByb3BlcnR5U2VsZWN0aW9uTGlzdGVuZXIgbGlzdGVuZXIpIHsKKwkJcHJvcGVydHlTZWxlY3Rpb25MaXN0ZW5lcnMuYWRkKGxpc3RlbmVyKTsKKwl9IC8vIGFkZFByb3BlcnR5U2VsZWN0aW9uTGlzdGVuZXIKKworCS8qKgorCSAqIFJlbW92ZSB0aGUge0BsaW5rIFByb3BlcnR5U2VsZWN0aW9uTGlzdGVuZXJ9IGZyb20gdGhlIGxpc3Qgb2YgbGlzdGVuZXJzLgorCSAqIAorCSAqIEBwYXJhbSBsaXN0ZW5lcgorCSAqICAgICAgICAgICAgdGhlIHtAbGluayBQcm9wZXJ0eVNlbGVjdGlvbkxpc3RlbmVyfSB0byBiZSByZW1vdmVkCisJICovCisJcHVibGljIHZvaWQgcmVtb3ZlUHJvcGVydHlTZWxlY3Rpb25MaXN0ZW5lcigKKwkJCWZpbmFsIFByb3BlcnR5U2VsZWN0aW9uTGlzdGVuZXIgbGlzdGVuZXIpIHsKKwkJcHJvcGVydHlTZWxlY3Rpb25MaXN0ZW5lcnMucmVtb3ZlKGxpc3RlbmVyKTsKKwl9IC8vIHJlbW92ZVByb3BlcnR5U2VsZWN0aW9uTGlzdGVuZXIKKworCS8qKgorCSAqIE5vdGlmeSB7QGxpbmsgUHJvcGVydHlTZWxlY3Rpb25MaXN0ZW5lcn1zIGFib3V0IGEKKwkgKiB7QGxpbmsgUHJvcGVydHlTZWxlY3Rpb25FdmVudH0uCisJICogCisJICogQHBhcmFtIHBzZQorCSAqICAgICAgICAgICAgdGhlIGV2ZW50IHRvIG5vdGlmeSBhYm91dAorCSAqLworCXByaXZhdGUgdm9pZCBmaXJlUHJvcGVydHlTZWxlY3Rpb25FdmVudChmaW5hbCBQcm9wZXJ0eVNlbGVjdGlvbkV2ZW50IHBzZSkgeworCQlmb3IgKGZpbmFsIFByb3BlcnR5U2VsZWN0aW9uTGlzdGVuZXIgbGlzdGVuZXIgOiBwcm9wZXJ0eVNlbGVjdGlvbkxpc3RlbmVycykgeworCQkJbGlzdGVuZXIucHJvcGVydHlTZWxlY3RlZChwc2UpOworCQl9IC8vIGZvciBlYWNoIFByb3BlcnR5U2VsZWN0aW9uTGlzdGVuZXIKKwl9IC8vIGZpcmVQcm9wZXJ0eVNlbGVjdGlvbkV2ZW50CisKKwkvKioKKwkgKiBUaGlzIGludGVyZmFjZSBpcyBpbXBsZW1lbnRlZCBieSBjbGFzc2VzIHRoYXQgd2lzaCB0byBiZSBub3RpZmllZAorCSAqIHdoZW5ldmVyIGEgcHJvcGVydHkgaXMgc2VsZWN0ZWQgaW4gdGhpcyB3aWRnZXQuCisJICovCisJcHVibGljIGludGVyZmFjZSBQcm9wZXJ0eVNlbGVjdGlvbkxpc3RlbmVyIHsKKwkJLyoqCisJCSAqIEBwYXJhbSBwcm9wZXJ0eVNlbGVjdGlvbkV2ZW50CisJCSAqLworCQl2b2lkIHByb3BlcnR5U2VsZWN0ZWQoUHJvcGVydHlTZWxlY3Rpb25FdmVudCBwcm9wZXJ0eVNlbGVjdGlvbkV2ZW50KTsKKwl9IC8vIFByb3BlcnR5U2VsZWN0aW9uTGlzdGVuZXIKKworCS8qKgorCSAqIFRoaXMgY2xhc3MgcmVwcmVzZW50cyB0aGUgZXZlbnQgb2YgYSBwcm9wZXJ0eSBiZWluZyBzZWxlY3RlZCBpbiB0aGUKKwkgKiB7QGxpbmsgV2lkZ2V0fS4KKwkgKi8KKwlwdWJsaWMgc3RhdGljIGNsYXNzIFByb3BlcnR5U2VsZWN0aW9uRXZlbnQgZXh0ZW5kcyBFdmVudE9iamVjdCB7CisJCXByaXZhdGUgc3RhdGljIGZpbmFsIGxvbmcgc2VyaWFsVmVyc2lvblVJRCA9IDFMOworCQkvLyRBTkFMWVNJUy1JR05PUkUKKwkJcHJpdmF0ZSB0cmFuc2llbnQgZmluYWwgSXRlbVByb3BlcnR5RGVzY3JpcHRvciBwcm9wZXJ0eTsKKworCQkvKioKKwkJICogQHBhcmFtIHByb3BlcnR5CisJCSAqICAgICAgICAgICAgdGhlIHByb3BlcnR5IHRoYXQgd2FzIHNlbGVjdGVkLgorCQkgKiBAcGFyYW0gc291cmNlCisJCSAqLworCQlwdWJsaWMgUHJvcGVydHlTZWxlY3Rpb25FdmVudChmaW5hbCBJdGVtUHJvcGVydHlEZXNjcmlwdG9yIHByb3BlcnR5LAorCQkJCWZpbmFsIE9iamVjdCBzb3VyY2UpIHsKKwkJCXN1cGVyKHNvdXJjZSk7CisJCQl0aGlzLnByb3BlcnR5ID0gcHJvcGVydHk7CisJCX0KKworCQkvKioKKwkJICogQHJldHVybiB0aGUgcHJvcGVydHkKKwkJICovCisJCXB1YmxpYyBmaW5hbCBJdGVtUHJvcGVydHlEZXNjcmlwdG9yIGdldFByb3BlcnR5KCkgeworCQkJcmV0dXJuIHByb3BlcnR5OworCQl9CisKKwkJLyoqCisJCSAqIEBzZWUgamF2YS51dGlsLkV2ZW50T2JqZWN0I3RvU3RyaW5nKCkKKwkJICovCisJCUBPdmVycmlkZQorCQlwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkgeworCQkJZmluYWwgU3RyaW5nQnVpbGRlciBzYiA9IG5ldyBTdHJpbmdCdWlsZGVyKCk7CisJCQlzYi5hcHBlbmQocHJvcGVydHkgPT0gbnVsbCA/ICJudWxsIiA6IHByb3BlcnR5CisJCQkJCS5nZXREaXNwbGF5TmFtZShwcm9wZXJ0eSkpOworCQkJcmV0dXJuIHNiLnRvU3RyaW5nKCk7CisJCX0KKwl9IC8vIFByb3BlcnR5U2VsZWN0aW9uRXZlbnQKKworCS8vIC8qKgorCS8vICogVGhpcyBtZXRob2QgbWF5IGJlIHVzZWQgdG8gaW5pdGlhbGl6ZSBhIHByb3BlcnRpZXMgY29tYm8gdG8gZGlzcGxheQorCS8vICogKHNlbGVjdCkgYSBwYXJ0aWN1bGFyIHByb3BlcnR5CisJLy8gKgorCS8vICogQHBhcmFtIHByZWZlcnJlZFByb3BlcnR5CisJLy8gKiB0aGUgbmFtZSBvZiB0aGUgcHJvcGVydHkgdG8gZGlzcGxheS4KKwkvLyAqIEByZXR1cm4gPGNvZGU+dHJ1ZTwvY29kZT4gaWYgdGhlIHByZWZlcnJlZFByb3BlcnR5IHdhcyBmb3VuZCwKKwkvLyAqIDxjb2RlPmZhbHNlPC9jb2RlPiBvdGhlcndpc2UuCisJLy8gKi8KKwkvLyBwdWJsaWMgYm9vbGVhbiBzZXREaXNwbGF5ZWRQcm9wZXJ0eShmaW5hbCBTdHJpbmcgcHJlZmVycmVkUHJvcGVydHkpIHsKKwkvLyBmaW5hbCBpbnQgaW5kZXggPSBwcm9wZXJ0aWVzQ29tYm8uaW5kZXhPZihwcmVmZXJyZWRQcm9wZXJ0eSk7CisJLy8gaWYgKGluZGV4ID49IDApIHsKKwkvLyBwcm9wZXJ0aWVzQ29tYm8uc2VsZWN0KGluZGV4KTsKKwkvLyBpbml0aWFsUHJvcGVydHlOYW1lID0gcHJlZmVycmVkUHJvcGVydHk7CisJLy8gcHJvcGVydGllcyA9IGdldFByb3BlcnRpZXNUb0Rpc3BsYXkoc2VsZWN0ZWREZWNvcmF0b3IpOworCS8vIGZvciAoZmluYWwgSXRlbVByb3BlcnR5RGVzY3JpcHRvciBwcm9wZXJ0eSA6IHByb3BlcnRpZXMpIHsKKwkvLyAvLyBuYW1lIG1hdGNoPworCS8vIGlmIChwcm9wZXJ0eS5nZXREaXNwbGF5TmFtZShwcm9wZXJ0eSkuZXF1YWxzKAorCS8vIGluaXRpYWxQcm9wZXJ0eU5hbWUpKSB7CisJLy8gLy8gWWVzCisJLy8gc2VsZWN0ZWRQcm9wZXJ0eSA9IHByb3BlcnR5OworCS8vIGJyZWFrOworCS8vIH0gLy8gaWYKKwkvLyB9IC8vIGZvciBlYWNoIEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IKKwkvLyBmaXJlUHJvcGVydHlTZWxlY3Rpb25FdmVudChuZXcgUHJvcGVydHlTZWxlY3Rpb25FdmVudChzZWxlY3RlZFByb3BlcnR5LAorCS8vIHByb3BlcnRpZXNDb21ibykpOworCS8vIHJldHVybiB0cnVlOworCS8vIH0vLyBpZiBzZWxlY3RvciBoYXMgaXRlbXMKKwkvLyByZXR1cm4gZmFsc2U7CisJLy8gfS8vIHNldERpc3BsYXllZFByb3BwZXJ0eSgpCisJLy8JCisJLy8gcHVibGljIHZvaWQgc2V0U2VsZWN0ZWREZWNvcmF0b3IoZmluYWwgRGVjb3JhdG9yIGRlY29yYXRvcikgeworCS8vIHRoaXMuc2VsZWN0ZWREZWNvcmF0b3IgPSBkZWNvcmF0b3I7CisJLy8gcHJvcGVydGllcyA9IGdldFByb3BlcnRpZXNUb0Rpc3BsYXkoc2VsZWN0ZWREZWNvcmF0b3IpOworCS8vIHNlbGVjdGVkUHJvcGVydHkgPSBzZWxlY3RDdXJyZW50RGVjb3JhdG9yUHJvcGVydHkocHJvcGVydGllcyk7CisJLy8KKwkvLyBpbml0aWFsaXplQ29tYm8ocHJvcGVydGllc0NvbWJvLAorCS8vIGdldFByb3BlcnR5TmFtZXMocHJvcGVydGllcyksIGdldFByb3BlcnR5SW5kZXgoCisJLy8gc2VsZWN0ZWRQcm9wZXJ0eSwgcHJvcGVydGllcyksIHRydWUpOworCS8vCisJLy8gQ29sb3JQcm92aWRlclByb3BlcnRpZXNDb21wb3NpdGUudGhpcy5ub3RpZnlQcm9wZXJ0eVNlbGVjdGlvbihzZWxlY3RlZFByb3BlcnR5KTsKKwkvLyB9CisJLy8JCisJLy8gLyoqCisJLy8gKiBUaGlzIGludGVyZmFjZSBpcyBpbXBsZW1lbnRlZCBieSBjbGFzc2VzIHRoYXQgZGV0ZXJtaW5lIGlmIGEKKwkvLyAqIHtAbGluayBEZWNvcmF0b3J9IG1lZXRzIHNvbWUgc3BlY2lmaWVkIGNyaXRlcmlhLgorCS8vICovCisJLy8gcHVibGljIGludGVyZmFjZSBEZWNvcmF0b3JGaWx0ZXIgeworCS8vIC8qKgorCS8vICogQHBhcmFtIGRlY29yYXRvcgorCS8vICogQHJldHVybiA8Y29kZT50cnVlPC9jb2RlPiBpZiB0aGUge0BsaW5rIERlY29yYXRvcn0gaXMgYWNjZXB0YWJsZS4KKwkvLyAqLworCS8vIGJvb2xlYW4gYWNjZXB0KGZpbmFsIERlY29yYXRvciBkZWNvcmF0b3IpOworCS8vIH0gLy8gRGVjb3JhdG9yRmlsdGVyCisJLy8KKwkvKioKKwkgKiBUaGlzIGludGVyZmFjZSBpcyBpbXBsZW1lbnRlZCBieSBjbGFzc2VzIHRoYXQgc2VsZWN0IG91dCB0aGUgcHJvcGVydGllcworCSAqIHRvIGJlIGRpc3BsYXllZC4KKwkgKi8KKwlwdWJsaWMgaW50ZXJmYWNlIFByb3BlcnR5U2lldmUgeworCQkvKioKKwkJICogQHBhcmFtIGR5bmFtaWNMYWJlbAorCQkgKiAgICAgICAgICAgIHRoZSBsYWJlbCB0aGF0IGNvbnRhaW5zIHRoZSBjYW5kaWRhdGUgcHJvcGVydGllcyB0byBiZQorCQkgKiAgICAgICAgICAgIGRpc3BsYXllZC4KKwkJICogQHJldHVybiBhIDxjb2RlPkxpc3Q8L2NvZGU+IG9mIHRoZSBwcm9wZXJ0aWVzIHRoYXQgc2hvdWxkIGJlCisJCSAqICAgICAgICAgZGlzcGxheWVkIGluIHRoZSBvcmRlciB0aGF0IHRoZXkgc2hvdWxkIGJlIGRpc3BsYXllZC4KKwkJICovCisJCUxpc3Q8SXRlbVByb3BlcnR5RGVzY3JpcHRvcj4gc2lldmUoZmluYWwgRHluYW1pY0xhYmVsIGR5bmFtaWNMYWJlbCk7CisJfSAvLyBQcm9wZXJ0eVNpZXZlCisKKwkvKioKKwkgKiBAcGFyYW0gcHJvcGVydHlTaWV2ZQorCSAqICAgICAgICAgICAgdGhlIHNpZXZlIHRoYXQgc2VsZWN0cyB0aGUgcHJvcGVydGllcyBvZiBhIHtAbGluayBEZWNvcmF0b3J9CisJICogICAgICAgICAgICB0aGF0IHNob3VsZCBiZSBkaXNwbGF5ZWQuCisJICovCisJcHVibGljIHZvaWQgc2V0UHJvcGVydHlTaWV2ZShmaW5hbCBQcm9wZXJ0eVNpZXZlIHByb3BlcnR5U2lldmUpIHsKKwkJdGhpcy5wcm9wZXJ0eVNpZXZlID0gcHJvcGVydHlTaWV2ZTsKKwl9IC8vIHNldFByb3BlcnR5U2lldmUKKworCS8qKgorCSAqIFRoZSBkZWZhdWx0IHNpZXZlIHNlbGVjdHMgdGhvc2UgcHJvcGVydGllcyB0aGF0IGhhdmUgcmVsYXRpdmUgdmFsdWVzLgorCSAqLworCXByaXZhdGUgUHJvcGVydHlTaWV2ZSBwcm9wZXJ0eVNpZXZlID0gbmV3IFByb3BlcnR5U2lldmUoKSB7CisJCS8qKgorCQkgKiBAc2VlIENvbG9yUHJvdmlkZXJQcm9wZXJ0aWVzQ29tcG9zaXRlLlByb3BlcnR5U2lldmUjc2lldmUob3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkR5bmFtaWNMYWJlbCkKKwkJICovCisJCXB1YmxpYyBMaXN0PEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I+IHNpZXZlKAorCQkJCWZpbmFsIER5bmFtaWNMYWJlbCBkeW5hbWljTGFiZWwpIHsKKwkJCWZpbmFsIExpc3Q8SXRlbVByb3BlcnR5RGVzY3JpcHRvcj4gcmV0VmFsdWUgPSBuZXcgQXJyYXlMaXN0PEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I+KCk7CisJCQlmaW5hbCBSZWxhdGl2ZVZhbHVlUHJvdmlkZXJBZGFwdGVyIHJ2cCA9IChSZWxhdGl2ZVZhbHVlUHJvdmlkZXJBZGFwdGVyKSBSZWxhdGl2ZVZhbHVlUHJvdmlkZXJBZGFwdGVyRmFjdG9yeS5JTlNUQU5DRQorCQkJCQkuYWRhcHQoZHluYW1pY0xhYmVsLCBSZWxhdGl2ZVZhbHVlUHJvdmlkZXIuY2xhc3MpOworCisJCQkvLyBEb2VzIHRoZSBsYWJlbCBoYXZlIHJlbGF0aXZlIHZhbHVlcz8KKwkJCWlmIChydnAgIT0gbnVsbCkgeworCQkJCS8vIFllcworCQkJCXJ2cC5zZXRUYXJnZXQoZHluYW1pY0xhYmVsKTsKKworCQkJCWZvciAoZmluYWwgT2JqZWN0IGVsZW1lbnQgOiBydnAuZ2V0UHJvcGVydGllcygpKSB7CisJCQkJCWZpbmFsIEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IgcHJvcGVydHkgPSAoSXRlbVByb3BlcnR5RGVzY3JpcHRvcikgZWxlbWVudDsKKwkJCQkJcmV0VmFsdWUuYWRkKHByb3BlcnR5KTsKKwkJCQl9IC8vIGZvciBlYWNoIHByb3BlcnR5CisJCQl9IC8vIGlmIHRoZSBsYWJlbCBoYXMgcmVsYXRpdmUgdmFsdWVzCisJCQlyZXR1cm4gcmV0VmFsdWU7CisJCX0gLy8gc2lldmUKKwl9OworCisJLyoqCisJICogVGhlIG1ldGhvZCByZXR1cm5zIHRoZSBpbml0aWFsIHByb3BlcnR5IHRvIGJlIHNlbGVjdGVkCisJICogQHJldHVybiB0aGUgaW5pdGlhbFByb3BlcnR5TmFtZQorCSAqLworCXB1YmxpYyBTdHJpbmcgZ2V0SW5pdGlhbFByb3BlcnR5TmFtZSgpIHsKKwkJcmV0dXJuIGluaXRpYWxQcm9wZXJ0eU5hbWU7CisJfSAvLyBnZXRJbml0aWFsUHJvcGVydHlOYW1lCisKKwkvKioKKwkgKiBUaGUgbWV0aG9kIHNldHMgdGhlIGluaXRpYWwgcHJvcGVydHkgdG8gYmUgc2VsZWN0ZWQKKwkgKiBAcGFyYW0gaW5pdGlhbFByb3BlcnR5TmFtZSB0aGUgaW5pdGlhbFByb3BlcnR5TmFtZSB0byBzZXQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRJbml0aWFsUHJvcGVydHlOYW1lKFN0cmluZyBpbml0aWFsUHJvcGVydHlOYW1lKSB7CisJCXRoaXMuaW5pdGlhbFByb3BlcnR5TmFtZSA9IGluaXRpYWxQcm9wZXJ0eU5hbWU7CisJfSAvLyBzZXRJbml0aWFsUHJvcGVydHlOYW1lCisKKwkvKioKKwkgKiBAcmV0dXJuIHRoZSBzZWxlY3RlZFByb3BlcnR5CisJICovCisJcHVibGljIEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IgZ2V0U2VsZWN0ZWRQcm9wZXJ0eSgpIHsKKwkJcmV0dXJuIHNlbGVjdGVkUHJvcGVydHk7CisJfQorCit9IC8vIENvbG9yUHJvdmlkZXJQcm9wZXJ0aWVzQ29tcG9zaXRlCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvd2lkZ2V0cy9EZWNvcmF0b3JTZWxlY3Rvci5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3dpZGdldHMvRGVjb3JhdG9yU2VsZWN0b3IuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZTM1ZGIyCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3dpZGdldHMvRGVjb3JhdG9yU2VsZWN0b3IuamF2YQpAQCAtMCwwICsxLDU1NCBAQAorLy8gUHJvcGVydHlTZWxlY3Rvci5qYXZhCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0udWkud2lkZ2V0czsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OworaW1wb3J0IGphdmEudXRpbC5FdmVudE9iamVjdDsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuY29uY3VycmVudC5Db3B5T25Xcml0ZUFycmF5TGlzdDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkNvbXBvc2VkQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1MYWJlbFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkR5bmFtaWNMYWJlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguR3JhcGg7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLkRlY29yYXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmFkYXB0ZXJzLnJlbGF0aXZldmFsdWUuUmVsYXRpdmVWYWx1ZVByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuYWRhcHRlcnMucmVsYXRpdmV2YWx1ZS5SZWxhdGl2ZVZhbHVlUHJvdmlkZXJBZGFwdGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuYWRhcHRlcnMucmVsYXRpdmV2YWx1ZS5SZWxhdGl2ZVZhbHVlUHJvdmlkZXJBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuRGlzZWFzZU1vZGVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uam9icy5zaW11bGF0aW9uLklTaW11bGF0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5Qb3B1bGF0aW9uTW9kZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS51aS52aWV3cy5nZW9ncmFwaGljLm1hcC5NZXNzYWdlczsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuU1dUOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuU2VsZWN0aW9uQWRhcHRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLlNlbGVjdGlvbkV2ZW50OworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5sYXlvdXQuRm9ybUF0dGFjaG1lbnQ7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5Gb3JtRGF0YTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QubGF5b3V0LkZvcm1MYXlvdXQ7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tYm87CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkxhYmVsOworCisvKioKKyAqIFRoaXMgY2xhc3MgaXMgYSBjb21wb3VuZCBTV1Qgd2lkZ2V0IHRoYXQgYWxsb3dzIGZvciB0aGUgc2VsZWN0aW9uIG9mIGEKKyAqIHByb3BlcnR5IG9yIHByb3BlcnRpZXMgb2Ygb25lIG9yIG1vcmUge0BsaW5rIERlY29yYXRvcn1zLgorICovCitwdWJsaWMgY2xhc3MgRGVjb3JhdG9yU2VsZWN0b3IgZXh0ZW5kcyBDb21wb3NpdGUgeworCisJcHJpdmF0ZSBmaW5hbCBMaXN0PERlY29yYXRvclNlbGVjdGlvbkxpc3RlbmVyPiBwcm9wZXJ0eVNlbGVjdGlvbkxpc3RlbmVycyA9IG5ldyBDb3B5T25Xcml0ZUFycmF5TGlzdDxEZWNvcmF0b3JTZWxlY3Rpb25MaXN0ZW5lcj4oKTsKKworCXByaXZhdGUgSVNpbXVsYXRpb24gc2ltdWxhdGlvbiA9IG51bGw7CisKKworCXByaXZhdGUgZmluYWwgTGFiZWwgZGlzcGxheUxhYmVsOworCisJQ29tYm8gZGVjb3JhdG9yc0NvbWJvOworCisJQ29tYm8gcG9wdWxhdGlvbklkQ29tYm87CisKKwlMaXN0PERlY29yYXRvcj4gZGVjb3JhdG9yczsKKworCURlY29yYXRvciBzZWxlY3RlZERlY29yYXRvcjsKKworCVN0cmluZyBzZWxlY3RlZFByb3BlcnR5OworCisJU3RyaW5nIFtdIHBvcElkczsKKwkKKwlwcml2YXRlIERlY29yYXRvckZpbHRlciBkZWNvcmF0b3JGaWx0ZXIgPSBuZXcgRGVjb3JhdG9yRmlsdGVyKCkgeworCQkvKioKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnVpLndpZGdldHMuUHJvcGVydHlTZWxlY3Rvci5EZWNvcmF0b3JGaWx0ZXIjYWNjZXB0KG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5EZWNvcmF0b3IpCisJCSAqLworCQlwdWJsaWMgYm9vbGVhbiBhY2NlcHQoQFN1cHByZXNzV2FybmluZ3MoInVudXNlZCIpCisJCURlY29yYXRvciBkZWNvcmF0b3IpIHsKKwkJCXJldHVybiB0cnVlOworCQl9CisJfTsKKworCS8qKgorCSAqIFRoZSBkZWZhdWx0IHNpZXZlIHNlbGVjdHMgdGhvc2UgcHJvcGVydGllcyB0aGF0IGhhdmUgcmVsYXRpdmUgdmFsdWVzLgorCSAqLworCXByaXZhdGUgUHJvcGVydHlTaWV2ZSBwcm9wZXJ0eVNpZXZlID0gbmV3IFByb3BlcnR5U2lldmUoKSB7CisJCS8qKgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0udWkud2lkZ2V0cy5Qcm9wZXJ0eVNlbGVjdG9yLlByb3BlcnR5U2lldmUjc2lldmUob3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkR5bmFtaWNMYWJlbCkKKwkJICovCisJCXB1YmxpYyBMaXN0PEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I+IHNpZXZlKER5bmFtaWNMYWJlbCBkeW5hbWljTGFiZWwpIHsKKwkJCWZpbmFsIExpc3Q8SXRlbVByb3BlcnR5RGVzY3JpcHRvcj4gcmV0VmFsdWUgPSBuZXcgQXJyYXlMaXN0PEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I+KCk7CisJCQlmaW5hbCBSZWxhdGl2ZVZhbHVlUHJvdmlkZXJBZGFwdGVyIHJ2cCA9IChSZWxhdGl2ZVZhbHVlUHJvdmlkZXJBZGFwdGVyKSBSZWxhdGl2ZVZhbHVlUHJvdmlkZXJBZGFwdGVyRmFjdG9yeS5JTlNUQU5DRQorCQkJCQkuYWRhcHQoZHluYW1pY0xhYmVsLCBSZWxhdGl2ZVZhbHVlUHJvdmlkZXIuY2xhc3MpOworCisJCQkvLyBEb2VzIHRoZSBsYWJlbCBoYXZlIHJlbGF0aXZlIHZhbHVlcz8KKwkJCWlmIChydnAgIT0gbnVsbCkgeworCQkJCS8vIFllcworCQkJCXJ2cC5zZXRUYXJnZXQoZHluYW1pY0xhYmVsKTsKKworCQkJCWZvciAoZmluYWwgT2JqZWN0IGVsZW1lbnQgOiBydnAuZ2V0UHJvcGVydGllcygpKSB7CisJCQkJCWZpbmFsIEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IgcHJvcGVydHkgPSAoSXRlbVByb3BlcnR5RGVzY3JpcHRvcikgZWxlbWVudDsKKwkJCQkJcmV0VmFsdWUuYWRkKHByb3BlcnR5KTsKKwkJCQl9IC8vIGZvciBlYWNoIHByb3BlcnR5CisJCQl9IC8vIGlmIHRoZSBsYWJlbCBoYXMgcmVsYXRpdmUgdmFsdWVzCisJCQlyZXR1cm4gcmV0VmFsdWU7CisJCX0gLy8gc2lldmUKKwl9OworCisJLyoqCisJICogQHBhcmFtIHBhcmVudAorCSAqIEBwYXJhbSBzdHlsZQorCSAqLworCXB1YmxpYyBEZWNvcmF0b3JTZWxlY3RvcihmaW5hbCBDb21wb3NpdGUgcGFyZW50LCBmaW5hbCBpbnQgc3R5bGUsIGJvb2xlYW4gYWxsb3dEZWNvcmF0b3JTZWxlY3Rpb24pIHsKKwkJc3VwZXIocGFyZW50LCBzdHlsZSk7CisJCWZpbmFsIEZvcm1MYXlvdXQgcmV0VmFsdWVMYXlvdXQgPSBuZXcgRm9ybUxheW91dCgpOworCQl0aGlzLnNldExheW91dChyZXRWYWx1ZUxheW91dCk7CisKKwkJZGlzcGxheUxhYmVsID0gbmV3IExhYmVsKHRoaXMsIFNXVC5DRU5URVIpOworCQlkaXNwbGF5TGFiZWwuc2V0VGV4dChNZXNzYWdlcy5nZXRTdHJpbmcoIklNVmlldy5NUHJvcCIpICsgIiA6Iik7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAorCisJCS8vIENvbWJvIEJveCBvZiBEZWNvcmF0b3JzCisJCWRlY29yYXRvcnNDb21ibyA9IG5ldyBDb21ibyh0aGlzLCBTV1QuRFJPUF9ET1dOIHwgU1dULlJFQURfT05MWQorCQkJCXwgU1dULkNFTlRFUik7CisKKwkJLy8gQ29tYm8gQm94IG9mIHRoZSBEZWNvcmF0b3IgUHJvcGVydGllcworCQlwb3B1bGF0aW9uSWRDb21ibyA9IG5ldyBDb21ibyh0aGlzLCBTV1QuRFJPUF9ET1dOIHwgU1dULlJFQURfT05MWQorCQkJCXwgU1dULkNFTlRFUik7CisKKwkJZmluYWwgRm9ybURhdGEgZGVjb3JhdG9yc0NvbWJvRm9ybURhdGEgPSBuZXcgRm9ybURhdGEoKTsKKwkJZGVjb3JhdG9yc0NvbWJvRm9ybURhdGEudG9wID0gbmV3IEZvcm1BdHRhY2htZW50KGRpc3BsYXlMYWJlbCwgMCk7CisJCWRlY29yYXRvcnNDb21ib0Zvcm1EYXRhLmxlZnQgPSBuZXcgRm9ybUF0dGFjaG1lbnQoMCwgMCk7CisJCWRlY29yYXRvcnNDb21ib0Zvcm1EYXRhLnJpZ2h0ID0gbmV3IEZvcm1BdHRhY2htZW50KDEwMCwgMCk7CisJCWRlY29yYXRvcnNDb21iby5zZXRMYXlvdXREYXRhKGRlY29yYXRvcnNDb21ib0Zvcm1EYXRhKTsKKworCQlmaW5hbCBGb3JtRGF0YSBwb3B1bGF0aW9uSWRDb21ib0RhdGEgPSBuZXcgRm9ybURhdGEoKTsKKwkJcG9wdWxhdGlvbklkQ29tYm9EYXRhLnRvcCA9IG5ldyBGb3JtQXR0YWNobWVudChkZWNvcmF0b3JzQ29tYm8sIDApOworCQlwb3B1bGF0aW9uSWRDb21ib0RhdGEubGVmdCA9IG5ldyBGb3JtQXR0YWNobWVudCgwLCAwKTsKKwkJcG9wdWxhdGlvbklkQ29tYm9EYXRhLnJpZ2h0ID0gbmV3IEZvcm1BdHRhY2htZW50KDEwMCwgMCk7CisJCXBvcHVsYXRpb25JZENvbWJvLnNldExheW91dERhdGEocG9wdWxhdGlvbklkQ29tYm9EYXRhKTsKKworCQl0aGlzLnBhY2soKTsKKworCQlkZWNvcmF0b3JzQ29tYm8uYWRkU2VsZWN0aW9uTGlzdGVuZXIobmV3IFNlbGVjdGlvbkFkYXB0ZXIoKSB7CisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyB2b2lkIHdpZGdldFNlbGVjdGVkKEBTdXBwcmVzc1dhcm5pbmdzKCJ1bnVzZWQiKQorCQkJZmluYWwgU2VsZWN0aW9uRXZlbnQgZSkgeworCQkJCS8vIEFueSBkZWNvcmF0b3JzPworCQkJCWlmICghZGVjb3JhdG9ycy5pc0VtcHR5KCkpIHsKKwkJCQkJLy8gWWVzCisJCQkJCWZpbmFsIERlY29yYXRvciB0ZW1wRGVjb3JhdG9yID0gZGVjb3JhdG9ycworCQkJCQkJCS5nZXQoZGVjb3JhdG9yc0NvbWJvLmdldFNlbGVjdGlvbkluZGV4KCkpOworCQkJCQkvLyBXYXMgdGhlcmUgYSBjaGFuZ2UgaW4gc2VsZWN0ZWQgRGVjb3JhdG9ycz8KKwkJCQkJaWYgKHNlbGVjdGVkRGVjb3JhdG9yICE9IHRlbXBEZWNvcmF0b3IpIHsKKwkJCQkJCS8vIFllcworCQkJCQkJc2VsZWN0ZWREZWNvcmF0b3IgPSB0ZW1wRGVjb3JhdG9yOworCisJCQkJCQlwb3BJZHMgPSBnZXRQb3B1bGF0aW9uSWRzVG9EaXNwbGF5KHNlbGVjdGVkRGVjb3JhdG9yKTsKKwkJCQkJCWluaXRpYWxpemVDb21ibyhwb3B1bGF0aW9uSWRDb21ibywKKwkJCQkJCQkJcG9wSWRzLCAwKTsKKworCQkJCQkJc2VsZWN0ZWRQcm9wZXJ0eSA9IHBvcElkc1swXTsKKwkJCQkJCURlY29yYXRvclNlbGVjdG9yLnRoaXMKKwkJCQkJCQkJLm5vdGlmeURlY29yYXRvclNlbGVjdGlvbihzZWxlY3RlZFByb3BlcnR5KTsKKwkJCQkJfSAvLyBpZiBEZWNvcmF0b3JzIGNoYW5nZWQKKworCQkJCX0gLy8gaWYgYW55IGRlY29yYXRvcnMKKwkJCX0KKwkJfSAvLyBTZWxlY3Rpb25BZGFwdGVyCisJCSk7CisKKwkJcG9wdWxhdGlvbklkQ29tYm8uYWRkU2VsZWN0aW9uTGlzdGVuZXIobmV3IFNlbGVjdGlvbkFkYXB0ZXIoKSB7CisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyB2b2lkIHdpZGdldFNlbGVjdGVkKEBTdXBwcmVzc1dhcm5pbmdzKCJ1bnVzZWQiKQorCQkJZmluYWwgU2VsZWN0aW9uRXZlbnQgZSkgeworCQkJCS8vIEFueSBEZWNvcmF0b3IgcHJvcGVydGllcz8KKwkJCQlpZiAoIShwb3BJZHMgPT0gbnVsbCkpIHsKKwkJCQkJLy8gWWVzCisJCQkJCS8vIElzIGl0IGRpZmZlcmVudD8KKwkJCQkJZmluYWwgU3RyaW5nIHRlbXAgPSBwb3BJZHNbcG9wdWxhdGlvbklkQ29tYm8uZ2V0U2VsZWN0aW9uSW5kZXgoKV07CisJCQkJCWlmICghc2VsZWN0ZWRQcm9wZXJ0eS5lcXVhbHModGVtcCkpIHsKKwkJCQkJCS8vIFllcworCQkJCQkJc2VsZWN0ZWRQcm9wZXJ0eSA9IHRlbXA7CisJCQkJCQlEZWNvcmF0b3JTZWxlY3Rvci50aGlzCisJCQkJCQkJCS5ub3RpZnlEZWNvcmF0b3JTZWxlY3Rpb24oc2VsZWN0ZWRQcm9wZXJ0eSk7CisJCQkJCX0gLy8gaWYKKworCQkJCX0gLy8gaWYKKwkJCX0gLy8gd2lkZ2V0U2VsZWN0ZWQKKworCQl9IC8vIFNlbGVjdGlvbkFkYXB0ZXIKKwkJCQkpOworCQlpZighYWxsb3dEZWNvcmF0b3JTZWxlY3Rpb24pcG9wdWxhdGlvbklkQ29tYm8uc2V0RW5hYmxlZChmYWxzZSk7CisJCXNldFNpbXVsYXRpb24obnVsbCk7CisJfSAvLyBQcm9wZXJ0eVNlbGVjdG9yCisKKwl2b2lkIG5vdGlmeURlY29yYXRvclNlbGVjdGlvbihmaW5hbCBTdHJpbmcgc2VsZWN0ZWRJZCkgeworCQkvLyBJcyB0aGVyZSBhIHByb3BlcnR5PworCQlpZiAoc2VsZWN0ZWRQcm9wZXJ0eSAhPSBudWxsKSB7CisJCQkvLyBZZXMKKwkJCWZpcmVEZWNvcmF0b3JTZWxlY3Rpb25FdmVudChuZXcgRGVjb3JhdG9yU2VsZWN0aW9uRXZlbnQoCisJCQkJCXNlbGVjdGVkRGVjb3JhdG9yLCBzZWxlY3RlZElkLCB0aGlzKSk7CisJCX0gLy8gaWYKKwl9IC8vIG5vdGlmeURlY29yYXRvclNlbGVjdGlvbgorCisJLyoqCisJICogQHJldHVybiA8Y29kZT50cnVlPC9jb2RlPiBpZiB0aGUgY29udHJvbCBoYXMgYmVlbiBpbml0aWFsaXplZC4KKwkgKi8KKwlwdWJsaWMgYm9vbGVhbiBpc0luaXRpYWxpemVkKCkgeworCQlyZXR1cm4gIShkZWNvcmF0b3JzID09IG51bGwgfHwgZGVjb3JhdG9ycy5pc0VtcHR5KCkpOworCX0gLy8gaXNJbml0aWFsaXplZAorCisJLyoqCisJICogQHBhcmFtIGRlY29yYXRvcnMKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXREZWNvcmF0b3JzKGZpbmFsIExpc3Q8RGVjb3JhdG9yPiBkZWNvcmF0b3JzKSB7CisJCXRoaXMuZGVjb3JhdG9ycyA9IGRlY29yYXRvcnM7CisJCWludCBzZWxlY3Rpb25JbmRleCA9IDA7CisJCS8vIGlmIHBvc3NpYmxlLCBkZWZhdWx0IHNlbGVjdGVkIGRlY29yYXRvciB3aWxsIGJlIGEgZGlzZWFzZQorCQlpZigoZGVjb3JhdG9ycyE9bnVsbCkmJihkZWNvcmF0b3JzLnNpemUoKT49MikpIHsKKwkJCWZvcihpbnQgaSA9IDA7IGkgPCBkZWNvcmF0b3JzLnNpemUoKTsgaSArKykgeworCQkJCURlY29yYXRvciBkZWMgPSBkZWNvcmF0b3JzLmdldChpKTsKKwkJCQlpZihkZWMgaW5zdGFuY2VvZiBEaXNlYXNlTW9kZWwpIHsKKwkJCQkJc2VsZWN0aW9uSW5kZXggPSBpOworCQkJCQlicmVhazsKKwkJCQl9CisJCQl9CisJCX0KKwkJc2VsZWN0ZWREZWNvcmF0b3IgPSBkZWNvcmF0b3JzLmlzRW1wdHkoKSA/IG51bGwgOiBkZWNvcmF0b3JzLmdldChzZWxlY3Rpb25JbmRleCk7CisJCXBvcElkcyA9IGdldFBvcHVsYXRpb25JZHNUb0Rpc3BsYXkoc2VsZWN0ZWREZWNvcmF0b3IpOworCQlpZihwb3BJZHMgPT0gbnVsbClwb3BJZHMgPSBuZXcgU3RyaW5nWzBdOworCQlzZWxlY3RlZFByb3BlcnR5ID0gKHBvcElkcy5sZW5ndGg9PTApPyAiIjpwb3BJZHNbMF07IC8vIHBpY2sgdGhlIGZpcnN0IG9uZQorCisJCWluaXRpYWxpemVDb21ibyhkZWNvcmF0b3JzQ29tYm8sIGdldERlY29yYXRvck5hbWVzKGRlY29yYXRvcnMpLAorCQkJCWdldERlY29yYXRvckluZGV4KHNlbGVjdGVkRGVjb3JhdG9yLCBkZWNvcmF0b3JzKSk7CisKKwkJaW5pdGlhbGl6ZUNvbWJvKHBvcHVsYXRpb25JZENvbWJvLCBwb3BJZHMsCisJCQkJMCk7CisKKwkJbm90aWZ5RGVjb3JhdG9yU2VsZWN0aW9uKHNlbGVjdGVkUHJvcGVydHkpOworCX0gLy8gc2V0RGVjb3JhdG9ycworCisJLyoqCisJICogSW5pdGlhbGl6ZSB0aGUgY29udHJvbCBmcm9tIGEKKwkgKiB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5qb2JzLnNpbXVsYXRpb24uU2ltdWxhdGlvbn0gaW5zdGFuY2UuCisJICogCisJICogQHBhcmFtIHNpbXVsYXRpb24KKwkgKiAgICAgICAgICAgIHRoZSB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5qb2JzLnNpbXVsYXRpb24uU2ltdWxhdGlvbn0KKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRTaW11bGF0aW9uKGZpbmFsIElTaW11bGF0aW9uIHNpbXVsYXRpb24pIHsKKwkJdGhpcy5zaW11bGF0aW9uID0gc2ltdWxhdGlvbjsKKwkJc2V0RGVjb3JhdG9ycyhnZXREZWNvcmF0b3JzVG9EaXNwbGF5KHNpbXVsYXRpb24pKTsKKwl9IC8vIHNldFNpbXVsYXRpb24KKworCS8qKgorCSAqIEByZXR1cm4gdGhlIHNpbXVsYXRpb24KKwkgKi8KKwlwdWJsaWMgZmluYWwgSVNpbXVsYXRpb24gZ2V0U2ltdWxhdGlvbigpIHsKKwkJcmV0dXJuIHNpbXVsYXRpb247CisJfQorCisJLyoqCisJICogQHBhcmFtIGRlY29yYXRvckZpbHRlcgorCSAqICAgICAgICAgICAgdGhlIGZpbHRlciB0aGF0IGRldGVybWluZXMgd2hpY2gge0BsaW5rIERlY29yYXRvcn1zIHdpbGwgYmUKKwkgKiAgICAgICAgICAgIGRpc3BsYXllZC4KKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXREZWNvcmF0b3JGaWx0ZXIoZmluYWwgRGVjb3JhdG9yRmlsdGVyIGRlY29yYXRvckZpbHRlcikgeworCQl0aGlzLmRlY29yYXRvckZpbHRlciA9IGRlY29yYXRvckZpbHRlcjsKKwl9IC8vIHNldERlY29yYXRvckZpbHRlcgorCisKKwkvKioKKwkgKiBAcGFyYW0gc2ltdWxhdGlvbgorCSAqICAgICAgICAgICAgdGhlIHNpbXVsYXRpb24gdGhhdCBjb250YWlucyB7QGxpbmsgRGVjb3JhdG9yfXMKKwkgKiBAcmV0dXJuIGEge0BsaW5rIExpc3R9IG9mIHRoZSB7QGxpbmsgRGVjb3JhdG9yfXMgd2hvc2UgcHJvcGVydGllcworCSAqLworCXByaXZhdGUgTGlzdDxEZWNvcmF0b3I+IGdldERlY29yYXRvcnNUb0Rpc3BsYXkoZmluYWwgSVNpbXVsYXRpb24gc2ltdWxhdGlvbikgeworCQlmaW5hbCBMaXN0PERlY29yYXRvcj4gcmV0VmFsdWUgPSBuZXcgQXJyYXlMaXN0PERlY29yYXRvcj4oKTsKKworCQkvLyBHb3QgU2ltdWxhdGlvbj8KKwkJaWYgKHNpbXVsYXRpb24gIT0gbnVsbCkgeworCQkJLy8gWWVzCisJCQlmaW5hbCBHcmFwaCBjYW5vbmljYWxHcmFwaCA9IHNpbXVsYXRpb24uZ2V0U2NlbmFyaW8oKQorCQkJCQkuZ2V0Q2Fub25pY2FsR3JhcGgoKTsKKwkJCS8vIElzIHRoZSBjYW5vbmljYWxHcmFwaCBpbml0aWFsaXplZCB5ZXQ/CisJCQlpZiAoY2Fub25pY2FsR3JhcGggIT0gbnVsbCkgeworCQkJCS8vIFllcworCQkJCS8vIEdvIHRocm91Z2ggdGhlIERlY29yYXRvcnMga2VlcGluZyB0aGUgb25lcyB0aGF0IHRoZSBmaWx0ZXIKKwkJCQkvLyBzYXlzIGFyZSBvay4KKwkJCQlmb3IgKGZpbmFsIE9iamVjdCBlbGVtZW50IDogY2Fub25pY2FsR3JhcGguZ2V0RGVjb3JhdG9ycygpKSB7CisJCQkJCWZpbmFsIERlY29yYXRvciBkZWNvcmF0b3IgPSAoRGVjb3JhdG9yKSBlbGVtZW50OworCQkJCQkvLyBBY2NlcHRhYmxlPworCQkJCQlpZiAoZGVjb3JhdG9yRmlsdGVyLmFjY2VwdChkZWNvcmF0b3IpKSB7CisJCQkJCQlyZXRWYWx1ZS5hZGQoZGVjb3JhdG9yKTsKKwkJCQkJfSAvLyBpZiBoYXMgYSB0aXRsZQorCQkJCX0gLy8gZm9yIGVhY2ggZGVjb3JhdG9yCisJCQl9IC8vIGlmIGdvdCBncmFwaAorCQl9IC8vIGlmIGdvdCBzaW11bGF0aW9uCisJCXJldHVybiByZXRWYWx1ZTsKKwl9IC8vIGdldERlY29yYXRvcnNUb0Rpc3BsYXkKKworCS8qKgorCSAqIEBwYXJhbSBkZWNvcmF0b3IKKwkgKiAgICAgICAgICAgIGEge0BsaW5rIERlY29yYXRvcn0gdGhhdCBtb2RpZmllcyB0aGUgc3RhdGUgb2YgdGhlIGNhbm9uaWNhbAorCSAqICAgICAgICAgICAge0BsaW5rIEdyYXBofSBpbiB0aGUKKwkgKiAgICAgICAgICAgIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmpvYnMuc2ltdWxhdGlvbi5TaW11bGF0aW9ufS4KKwkgKiBAcGFyYW0gc2ltdWxhdGlvbgorCSAqICAgICAgICAgICAgdGhlIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmpvYnMuc2ltdWxhdGlvbi5TaW11bGF0aW9ufQorCSAqIEByZXR1cm4gYSB7QGxpbmsgTGlzdH0gb2YgdGhlIHByb3BlcnRpZXMgb2YgdGhlIHtAbGluayBEZWNvcmF0b3J9IHRoYXQKKwkgKiAgICAgICAgIGNhbiBzaG91bGQgYmUgZGlzcGxheWVkLgorCSAqLworCVN0cmluZyBbXSBnZXRQb3B1bGF0aW9uSWRzVG9EaXNwbGF5KAorCQkJZmluYWwgRGVjb3JhdG9yIGRlY29yYXRvcikgeworCQlpZihkZWNvcmF0b3IgaW5zdGFuY2VvZiBEaXNlYXNlTW9kZWwpIHsKKwkJCUxpc3Q8U3RyaW5nPiBpZHMgPSAoKERpc2Vhc2VNb2RlbCkgZGVjb3JhdG9yKS5nZXRBbGxMYWJlbElkZW50aWZpZXJzKCk7CisJCQlyZXR1cm4gaWRzLnRvQXJyYXkobmV3IFN0cmluZ1swXSk7CisJCX0gZWxzZSBpZiAoZGVjb3JhdG9yIGluc3RhbmNlb2YgUG9wdWxhdGlvbk1vZGVsKSB7CisJCQlMaXN0PFN0cmluZz4gaWRzID0gKChQb3B1bGF0aW9uTW9kZWwpIGRlY29yYXRvcikuZ2V0QWxsTGFiZWxJZGVudGlmaWVycygpOworCQkJcmV0dXJuIGlkcy50b0FycmF5KG5ldyBTdHJpbmdbMF0pOworCQl9CisJCQorCQlyZXR1cm4gbnVsbDsKKwl9IC8vIGdldFBvcHVsYXRpb25JZHNUb0Rpc3BsYXkKKworCS8vIC8qKgorCS8vICogQHBhcmFtIGRlY29yYXRvcnMKKwkvLyAqIHRoZSB7QGxpbmsgRGVjb3JhdG9yc30gaW4gdGhlIHNpbXVsYXRpb24gdGhhdCB3aG9zZSBzdGF0ZQorCS8vICogdmFsdWVzIGNhbiBiZSB2aXN1YWxpemVkLgorCS8vICogQHJldHVybiBvbmUgb2YgdGhlIHtAbGluayBEZWNvcmF0b3JzfQorCS8vICovCisJLy8gcHJpdmF0ZSBEZWNvcmF0b3Igc2VsZWN0Q3VycmVudERlY29yYXRvcihmaW5hbCBMaXN0PERlY29yYXRvcj4KKwkvLyBkZWNvcmF0b3JzKSB7CisJLy8gcmV0dXJuIGRlY29yYXRvcnMuZ2V0KDApOworCS8vIH0gLy8gc2VsZWN0Q3VycmVudERlY29yYXRvcgorCisKKwkvKioKKwkgKiBAcmV0dXJuIHRoZSB7QGxpbmsgRGVjb3JhdG9yfSBzZWxlY3RlZCBpbiB0aGUgY29udHJvbCwgb3IKKwkgKiAgICAgICAgIDxjb2RlPm51bGw8L2NvZGU+IGlmIG9uZSBpcyBub3QgY3VycmVudGx5IHNlbGVjdGVkLgorCSAqLworCS8vIHB1YmxpYyBEZWNvcmF0b3IgZ2V0U2VsZWN0ZWREZWNvcmF0b3IoKSB7CisJLy8gcmV0dXJuIHNlbGVjdGVkRGVjb3JhdG9yOworCS8vIH0gLy8gZ2V0U2VsZWN0ZWREZWNvcmF0b3IKKwkvLworCS8vIC8qKgorCS8vICogQHJldHVybiB0aGUge0BsaW5rIEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3J9IHNlbGVjdGVkIGluIHRoZSBjb250cm9sLCBvcgorCS8vICogPGNvZGU+bnVsbDwvY29kZT4gaWYgb25lIGlzIG5vdCBjdXJyZW50bHkgc2VsZWN0ZWQuCisJLy8gKi8KKwkvLyBwdWJsaWMgSXRlbVByb3BlcnR5RGVzY3JpcHRvciBnZXRTZWxlY3RlZFByb3BlcnR5KCkgeworCS8vIHJldHVybiBzZWxlY3RlZERlY29yYXRvclByb3BlcnR5OworCS8vIH0gLy8gZ2V0U2VsZWN0ZWRQcm9wZXJ0eQorCS8vCisJLy8gLyoqCisJLy8gKiBAcmV0dXJuIGEgZGlzcGxheSBuYW1lIG9mIHRoZSBzZWxlY3RlZCBwcm9wZXJ0eS4gVGhpcyBpcyB0aGUga2V5IHRvIHRoZQorCS8vICogc2VsZWN0ZWQgcmVsYXRpdmUgVmFsdWUKKwkvLyAqCisJLy8gKi8KKwkvLyBwdWJsaWMgU3RyaW5nIGdldFNlbGVjdGVkUHJvcGVydHlTdHJpbmcoKSB7CisJLy8gU3RyaW5nIHJldFZhbCA9ICJubyBwcm9wZXJ0eSBzZWxlY3RlZCI7CisJLy8gaWYgKHNlbGVjdGVkRGVjb3JhdG9yUHJvcGVydHkgIT0gbnVsbCkgeworCS8vIHJldFZhbCA9IHNlbGVjdGVkRGVjb3JhdG9yUHJvcGVydHkKKwkvLyAuZ2V0RGlzcGxheU5hbWUoc2VsZWN0ZWREZWNvcmF0b3JQcm9wZXJ0eSk7CisJLy8gfQorCS8vIHJldHVybiByZXRWYWw7CisJLy8gfSAvLyBnZXRTZWxlY3RlZFByb3BlcnR5CisJLyoqCisJICogQHBhcmFtIGNvbWJvCisJICogQHBhcmFtIG5hbWVzCisJICogQHBhcmFtIHNlbGVjdGlvbkluZGV4CisJICovCisJdm9pZCBpbml0aWFsaXplQ29tYm8oZmluYWwgQ29tYm8gY29tYm8sIGZpbmFsIFN0cmluZ1tdIG5hbWVzLAorCQkJZmluYWwgaW50IHNlbGVjdGlvbkluZGV4KSB7CisJCWNvbWJvLnNldEl0ZW1zKG5hbWVzKTsKKwkJY29tYm8uc2VsZWN0KHNlbGVjdGlvbkluZGV4KTsKKwl9IC8vIGluaXRpYWxpemVDb21ibworCisJLyoqCisJICogQHBhcmFtIGRlY29yYXRvcnMKKwkgKiAgICAgICAgICAgIGEgbGlzdCBvZiB7QGxpbmsgRGVjb3JhdG9yfXMKKwkgKiBAcmV0dXJuIGFuIGFycmF5IG9mIHRoZSBuYW1lcyBvZiB0aGUge0BsaW5rIERlY29yYXRvcnN9LgorCSAqLworCXByaXZhdGUgU3RyaW5nW10gZ2V0RGVjb3JhdG9yTmFtZXMoZmluYWwgTGlzdDxEZWNvcmF0b3I+IGRlY29yYXRvcnMpIHsKKwkJZmluYWwgTGlzdDxTdHJpbmc+IHJldFZhbHVlID0gbmV3IEFycmF5TGlzdDxTdHJpbmc+KCk7CisJCWlmIChkZWNvcmF0b3JzICE9IG51bGwpIHsKKwkJCS8vIFllcworCQkJZm9yIChmaW5hbCBEZWNvcmF0b3IgZGVjb3JhdG9yIDogZGVjb3JhdG9ycykgeworCQkJCWZpbmFsIENvbXBvc2VkQWRhcHRlckZhY3RvcnkgaXRlbVByb3ZpZGVyRmFjdG9yeSA9IG5ldyBDb21wb3NlZEFkYXB0ZXJGYWN0b3J5KAorCQkJCQkJQ29tcG9zZWRBZGFwdGVyRmFjdG9yeS5EZXNjcmlwdG9yLlJlZ2lzdHJ5LklOU1RBTkNFKTsKKworCQkJCWZpbmFsIElJdGVtTGFiZWxQcm92aWRlciBscCA9IChJSXRlbUxhYmVsUHJvdmlkZXIpIGl0ZW1Qcm92aWRlckZhY3RvcnkuYWRhcHQoCisJCQkJCQlkZWNvcmF0b3IsIElJdGVtTGFiZWxQcm92aWRlci5jbGFzcyk7CisJCQkJU3RyaW5nIHRpdGxlID0gbHAuZ2V0VGV4dChkZWNvcmF0b3IpOworCQkJCXRpdGxlID0gdGl0bGUgPT0gbnVsbCA/ICJudWxsIiA6IHRpdGxlOworCQkJCXJldFZhbHVlLmFkZCh0aXRsZSk7CisJCQl9IC8vIGZvciBlYWNoIGRlY29yYXRvcgorCQl9IC8vIGlmCisJCXJldHVybiByZXRWYWx1ZS50b0FycmF5KG5ldyBTdHJpbmdbXSB7fSk7CisJfSAvLyBnZXREZWNvcmF0b3JOYW1lcworCisJLyoqCisJICogQHBhcmFtIHNlbGVjdGVkRGVjb3JhdG9yCisJICogQHBhcmFtIGRlY29yYXRvcnMKKwkgKiAgICAgICAgICAgIGEgbGlzdCBvZiB7QGxpbmsgRGVjb3JhdG9yfXMuCisJICogQHJldHVybiB0aGUgcG9zaXRpb24gKDAgb3JpZ2luKSBvZiB0aGUgc2VsZWN0ZWREZWNvcmF0b3IgaW4gZGVjb3JhdG9ycywKKwkgKiAgICAgICAgIG9yIDAsIGlmIHRoZSBkZWNvcmF0b3JzIGxpc3QgaXMgZW1wdHkuCisJICovCisJcHJpdmF0ZSBpbnQgZ2V0RGVjb3JhdG9ySW5kZXgoZmluYWwgRGVjb3JhdG9yIHNlbGVjdGVkRGVjb3JhdG9yLAorCQkJZmluYWwgTGlzdDxEZWNvcmF0b3I+IGRlY29yYXRvcnMpIHsKKwkJaWYgKHNlbGVjdGVkRGVjb3JhdG9yICE9IG51bGwgJiYgZGVjb3JhdG9ycyAhPSBudWxsCisJCQkJJiYgIWRlY29yYXRvcnMuaXNFbXB0eSgpKSB7CisJCQkvLyBZZXMKKwkJCXJldHVybiBkZWNvcmF0b3JzLmluZGV4T2Yoc2VsZWN0ZWREZWNvcmF0b3IpOworCQl9IC8vIGlmCisJCXJldHVybiAwOworCX0gLy8gZ2V0RGVjb3JhdG9ySW5kZXgKKworCS8qKgorCSAqIEBwYXJhbSBzZWxlY3RlZERlY29yYXRvclByb3BlcnR5CisJICogQHBhcmFtIGRlY29yYXRvclByb3BlcnRpZXMKKwkgKiBAcmV0dXJuIHRoZSBpbmRleCBvZiB0aGUgc2VsZWN0ZWREZWNvcmF0b3JQcm9wZXJ0eSBpbiB0aGUKKwkgKiAgICAgICAgIGRlY29yYXRvclByb3Blcml0ZXMgbGlzdCwgb3IgMCBpZiBzZWxlY3RlZERlY29yYXRvclByb3BlcnR5IGlzCisJICogICAgICAgICA8Y29kZT5udWxsPC9jb2RlPgorCSAqLworCWludCBnZXRQcm9wZXJ0eUluZGV4KAorCQkJZmluYWwgSXRlbVByb3BlcnR5RGVzY3JpcHRvciBzZWxlY3RlZERlY29yYXRvclByb3BlcnR5LAorCQkJZmluYWwgTGlzdDxJdGVtUHJvcGVydHlEZXNjcmlwdG9yPiBkZWNvcmF0b3JQcm9wZXJ0aWVzKSB7CisJCWlmIChzZWxlY3RlZERlY29yYXRvclByb3BlcnR5ICE9IG51bGwpIHsKKwkJCS8vIFllcworCQkJcmV0dXJuIGRlY29yYXRvclByb3BlcnRpZXMuaW5kZXhPZihzZWxlY3RlZERlY29yYXRvclByb3BlcnR5KTsKKwkJfSAvLyBpZgorCQlyZXR1cm4gMDsKKwl9IC8vIGdldFByb3BlcnR5SW5kZXgKKworCQorCS8qKgorCSAqIEBwYXJhbSBsaXN0ZW5lcgorCSAqLworCXB1YmxpYyB2b2lkIGFkZERlY29yYXRvclNlbGVjdGlvbkxpc3RlbmVyKAorCQkJZmluYWwgRGVjb3JhdG9yU2VsZWN0aW9uTGlzdGVuZXIgbGlzdGVuZXIpIHsKKwkJcHJvcGVydHlTZWxlY3Rpb25MaXN0ZW5lcnMuYWRkKGxpc3RlbmVyKTsKKwl9CisKKwkvKioKKwkgKiBAcGFyYW0gbGlzdGVuZXIKKwkgKi8KKwlwdWJsaWMgdm9pZCByZW1vdmVEZWNvcmF0b3JTZWxlY3Rpb25MaXN0ZW5lcigKKwkJCWZpbmFsIERlY29yYXRvclNlbGVjdGlvbkxpc3RlbmVyIGxpc3RlbmVyKSB7CisJCXByb3BlcnR5U2VsZWN0aW9uTGlzdGVuZXJzLnJlbW92ZShsaXN0ZW5lcik7CisJfQorCisJcHJpdmF0ZSB2b2lkIGZpcmVEZWNvcmF0b3JTZWxlY3Rpb25FdmVudChmaW5hbCBEZWNvcmF0b3JTZWxlY3Rpb25FdmVudCBwc2UpIHsKKwkJZm9yIChmaW5hbCBEZWNvcmF0b3JTZWxlY3Rpb25MaXN0ZW5lciBsaXN0ZW5lciA6IHByb3BlcnR5U2VsZWN0aW9uTGlzdGVuZXJzKSB7CisJCQlsaXN0ZW5lci5kZWNvcmF0b3JTZWxlY3RlZChwc2UpOworCQl9IC8vIGZvciBlYWNoIERlY29yYXRvclNlbGVjdGlvbkxpc3RlbmVyCisJfSAvLyBmaXJlRGVjb3JhdG9yU2VsZWN0aW9uRXZlbnQKKworCS8qKgorCSAqIFRoaXMgaW50ZXJmYWNlIGlzIGltcGxlbWVudGVkIGJ5IGNsYXNzZXMgdGhhdCBkZXRlcm1pbmUgaWYgYQorCSAqIHtAbGluayBEZWNvcmF0b3J9IG1lZXRzIHNvbWUgc3BlY2lmaWVkIGNyaXRlcmlhLgorCSAqLworCXB1YmxpYyBpbnRlcmZhY2UgRGVjb3JhdG9yRmlsdGVyIHsKKwkJLyoqCisJCSAqIEBwYXJhbSBkZWNvcmF0b3IKKwkJICogQHJldHVybiA8Y29kZT50cnVlPC9jb2RlPiBpZiB0aGUge0BsaW5rIERlY29yYXRvcn0gaXMgYWNjZXB0YWJsZS4KKwkJICovCisJCWJvb2xlYW4gYWNjZXB0KGZpbmFsIERlY29yYXRvciBkZWNvcmF0b3IpOworCX0gLy8gRGVjb3JhdG9yRmlsdGVyCisKKwkvKioKKwkgKiBUaGlzIGludGVyZmFjZSBpcyBpbXBsZW1lbnRlZCBieSBjbGFzc2VzIHRoYXQgc2VsZWN0IG91dCB0aGUgcHJvcGVydGllcworCSAqIHRvIGJlIGRpc3BsYXllZC4KKwkgKi8KKwlwdWJsaWMgaW50ZXJmYWNlIFByb3BlcnR5U2lldmUgeworCQkvKioKKwkJICogQHBhcmFtIGR5bmFtaWNMYWJlbAorCQkgKiAgICAgICAgICAgIHRoZSBsYWJlbCB0aGF0IGNvbnRhaW5zIHRoZSBjYW5kaWRhdGUgcHJvcGVydGllcyB0byBiZQorCQkgKiAgICAgICAgICAgIGRpc3BsYXllZC4KKwkJICogQHJldHVybiBhIDxjb2RlPkxpc3Q8L2NvZGU+IG9mIHRoZSBwcm9wZXJ0aWVzIHRoYXQgc2hvdWxkIGJlCisJCSAqICAgICAgICAgZGlzcGxheWVkIGluIHRoZSBvcmRlciB0aGF0IHRoZXkgc2hvdWxkIGJlIGRpc3BsYXllZC4KKwkJICovCisJCUxpc3Q8SXRlbVByb3BlcnR5RGVzY3JpcHRvcj4gc2lldmUoZmluYWwgRHluYW1pY0xhYmVsIGR5bmFtaWNMYWJlbCk7CisJfSAvLyBQcm9wZXJ0eVNpZXZlCisKKwkvKioKKwkgKiBUaGlzIGludGVyZmFjZSBpcyBpbXBsZW1lbnRlZCBieSBjbGFzc2VzIHRoYXQgd2lzaCB0byBiZSBub3RpZmllZAorCSAqIHdoZW5ldmVyIGEgcHJvcGVydHkgaXMgc2VsZWN0ZWQgaW4gdGhpcyB3aWRnZXQuCisJICovCisJcHVibGljIGludGVyZmFjZSBEZWNvcmF0b3JTZWxlY3Rpb25MaXN0ZW5lciB7CisJCS8qKgorCQkgKiBAcGFyYW0gcHJvcGVydHlTZWxlY3Rpb25FdmVudAorCQkgKi8KKwkJdm9pZCBkZWNvcmF0b3JTZWxlY3RlZChEZWNvcmF0b3JTZWxlY3Rpb25FdmVudCBkZWNvcmF0b3JTZWxlY3Rpb25FdmVudCk7CisJfSAvLyBEZWNvcmF0b3JTZWxlY3Rpb25MaXN0ZW5lcgorCisJLyoqCisJICogVGhpcyBjbGFzcyByZXByZXNlbnRzIHRoZSBldmVudCBvZiBhIHByb3BlcnR5IGJlaW5nIHNlbGVjdGVkIGluIHRoZQorCSAqIHdpZGdldC4KKwkgKi8KKwlwdWJsaWMgc3RhdGljIGNsYXNzIERlY29yYXRvclNlbGVjdGlvbkV2ZW50IGV4dGVuZHMgRXZlbnRPYmplY3QgeworCQlwcml2YXRlIHN0YXRpYyBmaW5hbCBsb25nIHNlcmlhbFZlcnNpb25VSUQgPSAxTDsKKwkJcHJpdmF0ZSB0cmFuc2llbnQgZmluYWwgU3RyaW5nIGlkOworCQlwcml2YXRlIHRyYW5zaWVudCBmaW5hbCBEZWNvcmF0b3IgZGVjb3JhdG9yOworCisJCS8qKgorCQkgKiBAcGFyYW0gZGVjb3JhdG9yCisJCSAqICAgICAgICAgICAgdGhlIHtAbGluayBEZWNvcmF0b3J9CisJCSAqIEBwYXJhbSBwcm9wZXJ0eQorCQkgKiAgICAgICAgICAgIHRoZSBwcm9wZXJ0eSB0aGF0IHdhcyBzZWxlY3RlZC4KKwkJICogQHBhcmFtIHNvdXJjZQorCQkgKi8KKwkJcHVibGljIERlY29yYXRvclNlbGVjdGlvbkV2ZW50KGZpbmFsIERlY29yYXRvciBkZWNvcmF0b3IsCisJCQkJZmluYWwgU3RyaW5nIGlkLCBmaW5hbCBPYmplY3Qgc291cmNlKSB7CisJCQlzdXBlcihzb3VyY2UpOworCQkJdGhpcy5kZWNvcmF0b3IgPSBkZWNvcmF0b3I7CisJCQl0aGlzLmlkID0gaWQ7CisJCX0KKworCQkvKioKKwkJICogQHJldHVybiB0aGUgZGVjb3JhdG9yCisJCSAqLworCQlwdWJsaWMgZmluYWwgRGVjb3JhdG9yIGdldERlY29yYXRvcigpIHsKKwkJCXJldHVybiBkZWNvcmF0b3I7CisJCX0KKworCQkvKioKKwkJICogQHJldHVybiB0aGUgcHJvcGVydHkKKwkJICovCisJCXB1YmxpYyBmaW5hbCBTdHJpbmcgZ2V0SWQoKSB7CisJCQlyZXR1cm4gaWQ7CisJCX0KKworCQkvKioKKwkJICogQHNlZSBqYXZhLnV0aWwuRXZlbnRPYmplY3QjdG9TdHJpbmcoKQorCQkgKi8KKwkJQE92ZXJyaWRlCisJCXB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKSB7CisJCQlmaW5hbCBTdHJpbmdCdWlsZGVyIHNiID0gbmV3IFN0cmluZ0J1aWxkZXIoCisJCQkJCWRlY29yYXRvciA9PSBudWxsID8gIm51bGwsIiA6IGRlY29yYXRvci5nZXREdWJsaW5Db3JlKCkKKwkJCQkJCQkuZ2V0VGl0bGUoKSk7CisJCQlzYi5hcHBlbmQoaWQgPT0gbnVsbCA/ICJudWxsIiA6IGlkKTsKKwkJCXJldHVybiBzYi50b1N0cmluZygpOworCQl9CisJfSAvLyBEZWNvcmF0b3JTZWxlY3Rpb25FdmVudAorCisJLyoqCisJICogQHJldHVybiB0aGUgZGlzcGxheSBsYWJlbAorCSAqLworCXB1YmxpYyBTdHJpbmcgZ2V0RGlzcGxheUxhYmVsKCkgeworCQlyZXR1cm4gZGlzcGxheUxhYmVsLmdldFRleHQoKTsKKwl9CisKKwkvKioKKwkgKiBAcGFyYW0gZGlzcGxheUxhYmVsCisJICogICAgICAgICAgICB0aGUgbGFiZWwgdG8gZGlzcGxheSBhYm92ZSB0aGUgcHJvcGVydHkgc2VsZWN0b3IKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXREaXNwbGF5TGFiZWwoZmluYWwgU3RyaW5nIGRpc3BsYXlMYWJlbCkgeworCQl0aGlzLmRpc3BsYXlMYWJlbC5zZXRUZXh0KGRpc3BsYXlMYWJlbCk7CisJfQorCit9IC8vIFByb3BlcnR5U2VsZWN0b3IKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS93aWRnZXRzL0dlb1ZpZXdPcHRpb25zQmFyLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvd2lkZ2V0cy9HZW9WaWV3T3B0aW9uc0Jhci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZmMTIxYTAKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvd2lkZ2V0cy9HZW9WaWV3T3B0aW9uc0Jhci5qYXZhCkBAIC0wLDAgKzEsNzkwIEBACisvLyBHZW9WaWV3T3B0aW9uc0Jhci5qYXZhCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0udWkud2lkZ2V0czsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OworaW1wb3J0IGphdmEudXRpbC5FdmVudE9iamVjdDsKK2ltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKK2ltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CitpbXBvcnQgamF2YS51dGlsLk1hcDsKK2ltcG9ydCBqYXZhLnV0aWwuU2V0OworaW1wb3J0IGphdmEudXRpbC5jb25jdXJyZW50LkNvcHlPbldyaXRlQXJyYXlMaXN0OworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLkVMaXN0OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5VUkk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuQ29tcG9zZWRBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbUxhYmVsUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSXRlbVByb3BlcnR5RGVzY3JpcHRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguRHluYW1pY0xhYmVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5HcmFwaDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuRGVjb3JhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuYWRhcHRlcnMucmVsYXRpdmV2YWx1ZS5SZWxhdGl2ZVZhbHVlUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5hZGFwdGVycy5yZWxhdGl2ZXZhbHVlLlJlbGF0aXZlVmFsdWVQcm92aWRlckFkYXB0ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5hZGFwdGVycy5yZWxhdGl2ZXZhbHVlLlJlbGF0aXZlVmFsdWVQcm92aWRlckFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5EaXNlYXNlTW9kZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5qb2JzLnNpbXVsYXRpb24uSVNpbXVsYXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLlBvcHVsYXRpb25Nb2RlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnVpLmFkYXB0ZXJzLmNvbG9yLkNvbG9yUHJvdmlkZXJBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnVpLmFkYXB0ZXJzLmNvbG9yLklDb2xvclByb3ZpZGVyQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS51aS5hZGFwdGVycy5jb2xvci5JQ29sb3JQcm92aWRlckNoYW5nZWRMaXN0ZW5lcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnVpLnZpZXdzLmdlb2dyYXBoaWMubWFwLk1lc3NhZ2VzOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5TV1Q7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5TZWxlY3Rpb25BZGFwdGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuU2VsZWN0aW9uRXZlbnQ7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5Gb3JtQXR0YWNobWVudDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QubGF5b3V0LkZvcm1EYXRhOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5sYXlvdXQuRm9ybUxheW91dDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QubGF5b3V0LlJvd0xheW91dDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21ibzsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuR3JvdXA7CisKKy8qKgorICogVGhpcyBjbGFzcyBpcyBhIGNvbXBvdW5kIFNXVCB7QGxpbmsgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuV2lkZ2V0fSB0aGF0IGFsbG93cyBmb3IgdGhlIHNlbGVjdGlvbiBvZgorICogYSB7QGxpbmsgRGVjb3JhdG9yfXMgYW5kIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLnVpLmFkYXB0ZXJzLmNvbG9yLkNvbG9yUHJvdmlkZXJ9cy4KKyAqLworcHVibGljIGNsYXNzIEdlb1ZpZXdPcHRpb25zQmFyIGV4dGVuZHMgQ29tcG9zaXRlIHsKKworCS8qKgorCSAqIEEgbGlzdCBvZiB7QGxpbmsgUHJvcGVydHlTZWxlY3Rpb25MaXN0ZW5lcn1zIHRvIGJlIG5vdGlmaWVkIGFib3V0CisJICogcHJvcGVydHkgc2VsZWN0aW9uIGV2ZW50cworCSAqLworCXByaXZhdGUgZmluYWwgTGlzdDxQcm9wZXJ0eVNlbGVjdGlvbkxpc3RlbmVyPiBzZWxlY3Rpb25MaXN0ZW5lcnMgPSBuZXcgQ29weU9uV3JpdGVBcnJheUxpc3Q8UHJvcGVydHlTZWxlY3Rpb25MaXN0ZW5lcj4oKTsKKwkvKioKKwkgKiBUaGUgY29sbGVjdGlvbiBvZiB7QGxpbmsgSUNvbG9yUHJvdmlkZXJDaGFuZ2VkTGlzdGVuZXJ9IHdhaXRpbmcgdG8gYmUgdG9sZCBjaGFuZ2Ugb2YgYSBjb2xvciBwcm92aWRlci4KKwkgKi8KKwlwcm90ZWN0ZWQgZmluYWwgTGlzdDxJQ29sb3JQcm92aWRlckNoYW5nZWRMaXN0ZW5lcj4gY29sb3JQcm92aWRlckNoYW5nZWRMaXN0ZW5lcnMgPSBuZXcgQ29weU9uV3JpdGVBcnJheUxpc3Q8SUNvbG9yUHJvdmlkZXJDaGFuZ2VkTGlzdGVuZXI+KCk7CisJLyoqCisJICogQ29tYm8gZm9yIHNlbGVjdGluZyBkZWNvcmF0b3JzCisJICovCisJQ29tYm8gZGVjb3JhdG9yc0NvbWJvOworCS8qKgorCSAqIENvbWJvIGZvciBzZWxlY3RpbmcgZGVjb3JhdG9ycworCSAqLworCUNvbWJvIHBvcHVsYXRpb25zQ29tYm87CisKKwkvKioKKwkgKiBDb21ibyBmb3Igc2VsZWN0aW5nIHRoZSBjb2xvciBwcm92aWRlcgorCSAqLworCUNvbWJvIGNvbG9yUHJvdmlkZXJzQ29tYm87CisJCisJLyoqCisJICogQSBjb25zdGFudCB0byBzZXQgdGhlIHdpZHRoIG9mIHRoZSBkZWNvcmF0b3JzIGNvbWJvCisJICovCisJc3RhdGljIGZpbmFsIGludCBERUNPUkFUT1JTX1dJRFRIID0gMzU7CisJCisJLyoqCisJICogQSBjb25zdGFudCB0byBzZXQgdGhlIHdpZHRoIG9mIHRoZSBwb3AgaWQgY29tYm8KKwkgKi8KKwkKKwlzdGF0aWMgZmluYWwgaW50IFBPUElEU19XSURUSD0yNTsKKwkKKwkvKioKKwkgKiBBIGNvbnN0YW50IHRvIHNldCB0aGUgd2lkdGggb2YgdGhlIGNvbG9yIHByb3ZpZGVycyBjb21ibworCSAqLworCXN0YXRpYyBmaW5hbCBpbnQgUFJPVklERVJTX1dJRFRIICA9IDQ1OworCQorCS8qKgorCSAqIENvbWJvIGZvciBzZWxlY3RpbmcgZWRnZXMKKwkgKi8KKwlDb21ibyBlZGdlc0NvbWJvOworCS8qKgorCSAqIFRoZSBjb21wb3NpdGUgdGhhdCB0aGUgc2VsZWN0ZWQgY29sb3IgcHJvdmlkZXIgY29udHJpYnV0ZWQKKwkgKi8KKwlDb21wb3NpdGUgY29sb3JQcm92aWRlckNvbXBvc2l0ZTsKKwkvKioKKwkgKiBUaGUgY29tcG9zaXRlIHdpdGggdGhlIGNvbG9ycyBsZWdlbmQgKHByb3ZpZGVkIGJ5IHRoZSBzZWxlY3RlZCBjb2xvcgorCSAqIHByb3ZpZGVyKQorCSAqLworCUNvbXBvc2l0ZSBjb2xvcnNMZWdlbmRDb21wb3NpdGU7CisJLyoqCisJICogVGhlIGdyb3VwIGNvbXBvc2l0ZSB0aGF0IGdhdGhlcnMgdGhlIHdpZGdldHMKKwkgKi8KKwlHcm91cCBnZW9WaWV3T3B0aW9uc0dyb3VwOworCS8qKgorCSAqIFRoZSBncm91cCBjb21wb3NpdGUgdGhhdCBnYXRoZXJzIHRoZSB3aWRnZXRzCisJICovCisJR3JvdXAgZWRnZXNHcm91cDsJCisJLyoqCisJICogTGlzdCBvZiBhdmFpbGFibGUgZGVjb3JhdG9ycworCSAqLworCUxpc3Q8RGVjb3JhdG9yPiBkZWNvcmF0b3JzOworCS8qKgorCSAqIExpc3Qgb2YgYXZhaWxhYmxlIHBvcHVsYXRpb25zIGZvciB0aGUgc2VsZWN0ZWQgZGVjb3JhdG9yCisJICovCisJTGlzdDxTdHJpbmc+IHBvcHVsYXRpb25JZGVudGlmaWVyczsKKworCS8qKgorCSAqIExpc3Qgb2YgYXZhaWxhYmxlIGNvbG9yIHByb3ZpZGVycworCSAqLworCUxpc3Q8Q2xhc3M+IHN1cHBvcnRlZENvbG9yUHJvdmlkZXJzID0gbnVsbDsKKwkvKioKKwkgKiBMaXN0IG9mIGF2YWlsYWJsZSBjb2xvciBwcm92aWRlcnMgbmFtZXMKKwkgKi8KKwlMaXN0PFN0cmluZz4gc3VwcG9ydGVkQ29sb3JQcm92aWRlcnNOYW1lcyA9IG51bGw7CisJLyoqCisJICogTWFwcGluZyBiZXR3ZWVuIGVkZ2UgdHlwZSBhbmQgaXRzIFVSSSBwcmVmaXgKKwkgKi8KKwlNYXA8U3RyaW5nLCBTdHJpbmc+IGVkZ2VUeXBlVG9VcmlQcmVmaXhNYXAgPSBuZXcgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4oKTsKKwkvKioKKwkgKiBUaGUgc2VsZWN0ZWQgY29sb3IgcHJvdmlkZXIKKwkgKi8KKwlDbGFzcyBzZWxlY3RlZENvbG9yUHJvdmlkZXIgPSBudWxsOworCS8qKgorCSAqIFRoZSBzZWxlY3RlZCBkZWNvcmF0b3IKKwkgKi8KKwlEZWNvcmF0b3Igc2VsZWN0ZWREZWNvcmF0b3I7CisJLyoqCisJICogVGhlIHNlbGVjdGVkIHBvcHVsYXRpb24gaWRlbnRpZmllcgorCSAqLworCVN0cmluZyBzZWxlY3RlZFBvcHVsYXRpb25JZGVudGlmaWVyOworCQorCS8qKgorCSAqIERlY29yYXRvciBmaWx0ZXIgdG8gYmUgdXNlZAorCSAqLworCXByaXZhdGUgRGVjb3JhdG9yRmlsdGVyIGRlY29yYXRvckZpbHRlciA9IG5ldyBEZWNvcmF0b3JGaWx0ZXIoKSB7CisJCS8qKgorCQkgKiBDdXJyZW50bHkgb25seSBhY2NlcHRzIGRlY29yYXRvcnMgdGhhdCBhcmUgYWJsZSB0byBwcm92aWRlIGEgcmVsYXRpdmUgdmFsdWUKKwkJICogVE9ETzogRml4IHNvIHdlIGNhbiB2aWV3IG90aGVyIHR5cGVzIG9mIGRlY29yYXRvcnMKKwkJICogCisJCSAqIEBzZWUgR2VvVmlld09wdGlvbnNCYXIuRGVjb3JhdG9yRmlsdGVyI2FjY2VwdChvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuRGVjb3JhdG9yKQorCQkgKi8KKwkJcHVibGljIGJvb2xlYW4gYWNjZXB0KAorCQkJCWZpbmFsIERlY29yYXRvciBkZWNvcmF0b3IpIHsKKwkJCQorCQkJRUxpc3Q8RHluYW1pY0xhYmVsPmxhYmVscyA9IGRlY29yYXRvci5nZXRMYWJlbHNUb1VwZGF0ZSgpOworCQkJaWYobGFiZWxzID09IG51bGwpIHJldHVybiBmYWxzZTsKKwkJCWZvcihEeW5hbWljTGFiZWwgbDpsYWJlbHMpIHsKKwkJCQlSZWxhdGl2ZVZhbHVlUHJvdmlkZXJBZGFwdGVyIHJ2cCA9IChSZWxhdGl2ZVZhbHVlUHJvdmlkZXJBZGFwdGVyKSBSZWxhdGl2ZVZhbHVlUHJvdmlkZXJBZGFwdGVyRmFjdG9yeS5JTlNUQU5DRQorCQkJCS5hZGFwdChsLCBSZWxhdGl2ZVZhbHVlUHJvdmlkZXIuY2xhc3MpOworCQkJCWlmKHJ2cCAhPSBudWxsKSByZXR1cm4gdHJ1ZTsKKwkJCX0KKwkKKwkJCXJldHVybiBmYWxzZTsKKwkJfQorCX07CisKKwkvKioKKwkgKiBDb25zdHJ1Y3RvcgorCSAqIAorCSAqIEBwYXJhbSBwYXJlbnQKKwkgKiAgICAgICAgICAgIHRoZSBwYXJlbnQge0BsaW5rIENvbXBvc2l0ZX0KKwkgKiBAcGFyYW0gc3R5bGUKKwkgKiAgICAgICAgICAgIGFuIFNXVCBzdHlsZQorCSAqLworCXB1YmxpYyBHZW9WaWV3T3B0aW9uc0JhcihmaW5hbCBDb21wb3NpdGUgcGFyZW50LCBmaW5hbCBpbnQgc3R5bGUpIHsKKwkJc3VwZXIocGFyZW50LCBzdHlsZSk7CisKKwkJZmluYWwgUm93TGF5b3V0IHJvd0xheW91dCA9IG5ldyBSb3dMYXlvdXQoU1dULkhPUklaT05UQUwpOworCQlyb3dMYXlvdXQuZmlsbCA9IHRydWU7CisJCXRoaXMuc2V0TGF5b3V0KHJvd0xheW91dCk7CisKKwkJZ2VvVmlld09wdGlvbnNHcm91cCA9IG5ldyBHcm91cCh0aGlzLCBTV1QuTk9ORSk7CisJCWZpbmFsIEZvcm1MYXlvdXQgZm9ybUxheW91dCA9IG5ldyBGb3JtTGF5b3V0KCk7CisJCWdlb1ZpZXdPcHRpb25zR3JvdXAuc2V0TGF5b3V0KGZvcm1MYXlvdXQpOworCisJCS8vIC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAorCQlnZW9WaWV3T3B0aW9uc0dyb3VwLnNldFRleHQoTWVzc2FnZXMuZ2V0U3RyaW5nKCJJTVZpZXcuTVByb3AiKSk7CisJCWdlb1ZpZXdPcHRpb25zR3JvdXAuc2V0VmlzaWJsZShmYWxzZSk7CisKKwkJLy8gQ29tYm8gQm94IG9mIERlY29yYXRvcnMKKwkJZGVjb3JhdG9yc0NvbWJvID0gbmV3IENvbWJvKGdlb1ZpZXdPcHRpb25zR3JvdXAsIFNXVC5EUk9QX0RPV04KKwkJCQl8IFNXVC5SRUFEX09OTFkgfCBTV1QuQ0VOVEVSKTsKKworCQkvLyBDb21ibyBCb3ggb2YgcG9wdWxhdGlvbiBpZGVudGlmaWVycworCQlwb3B1bGF0aW9uc0NvbWJvID0gbmV3IENvbWJvKGdlb1ZpZXdPcHRpb25zR3JvdXAsIFNXVC5EUk9QX0RPV04KKwkJCQl8IFNXVC5SRUFEX09OTFkgfCBTV1QuQ0VOVEVSKTsKKworCQkvLyBDb21ibyBCb3ggb2YgdGhlIGNvbG9yIHByb3ZpZGVycworCQljb2xvclByb3ZpZGVyc0NvbWJvID0gbmV3IENvbWJvKGdlb1ZpZXdPcHRpb25zR3JvdXAsIFNXVC5EUk9QX0RPV04KKwkJCQl8IFNXVC5SRUFEX09OTFkgfCBTV1QuQ0VOVEVSKTsKKworCisJCWZpbmFsIEZvcm1EYXRhIGRlY29yYXRvcnNDb21ib0Zvcm1EYXRhID0gbmV3IEZvcm1EYXRhKCk7CisJCWRlY29yYXRvcnNDb21ib0Zvcm1EYXRhLmxlZnQgPSBuZXcgRm9ybUF0dGFjaG1lbnQoMCwgMCk7CisJCWRlY29yYXRvcnNDb21ib0Zvcm1EYXRhLnJpZ2h0ID0gbmV3IEZvcm1BdHRhY2htZW50KERFQ09SQVRPUlNfV0lEVEgsIDApOworCQlkZWNvcmF0b3JzQ29tYm8uc2V0TGF5b3V0RGF0YShkZWNvcmF0b3JzQ29tYm9Gb3JtRGF0YSk7CisKKwkJZmluYWwgRm9ybURhdGEgcG9wdWxhdGlvbkNvbWJvRm9ybURhdGEgPSBuZXcgRm9ybURhdGEoKTsKKwkJcG9wdWxhdGlvbkNvbWJvRm9ybURhdGEudG9wID0gbmV3IEZvcm1BdHRhY2htZW50KGRlY29yYXRvcnNDb21ibywgNSk7CisJCXBvcHVsYXRpb25Db21ib0Zvcm1EYXRhLmxlZnQgPSBuZXcgRm9ybUF0dGFjaG1lbnQoMCwgMCk7CisJCXBvcHVsYXRpb25Db21ib0Zvcm1EYXRhLnJpZ2h0ID0gbmV3IEZvcm1BdHRhY2htZW50KFBPUElEU19XSURUSCwgMCk7CisJCXBvcHVsYXRpb25zQ29tYm8uc2V0TGF5b3V0RGF0YShwb3B1bGF0aW9uQ29tYm9Gb3JtRGF0YSk7CisKKwkJCisJCWZpbmFsIEZvcm1EYXRhIGNvbG9yUHJvdmlkZXJzQ29tYm9Gb3JtRGF0YSA9IG5ldyBGb3JtRGF0YSgpOworCQljb2xvclByb3ZpZGVyc0NvbWJvRm9ybURhdGEudG9wID0gbmV3IEZvcm1BdHRhY2htZW50KHBvcHVsYXRpb25zQ29tYm8sIDUpOworCQljb2xvclByb3ZpZGVyc0NvbWJvRm9ybURhdGEubGVmdCA9IG5ldyBGb3JtQXR0YWNobWVudCgwLCAwKTsKKwkJY29sb3JQcm92aWRlcnNDb21ib0Zvcm1EYXRhLnJpZ2h0ID0gbmV3IEZvcm1BdHRhY2htZW50KFBST1ZJREVSU19XSURUSCwgMCk7CisJCWNvbG9yUHJvdmlkZXJzQ29tYm8uc2V0TGF5b3V0RGF0YShjb2xvclByb3ZpZGVyc0NvbWJvRm9ybURhdGEpOworCQkJCisJCXN1cHBvcnRlZENvbG9yUHJvdmlkZXJzID0gQ29sb3JQcm92aWRlckFkYXB0ZXJGYWN0b3J5LklOU1RBTkNFLmdldFN1cHBvcnRlZENvbG9yUHJvdmlkZXJzKCk7CisJCXN1cHBvcnRlZENvbG9yUHJvdmlkZXJzTmFtZXMgPSBDb2xvclByb3ZpZGVyQWRhcHRlckZhY3RvcnkuSU5TVEFOQ0UuZ2V0U3VwcG9ydGVkQ29sb3JQcm92aWRlcnNOYW1lcygpOworCisJCXRoaXMucGFjaygpOworCisJCQorCQlkZWNvcmF0b3JzQ29tYm8uYWRkU2VsZWN0aW9uTGlzdGVuZXIobmV3IFNlbGVjdGlvbkFkYXB0ZXIoKSB7CisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyB2b2lkIHdpZGdldFNlbGVjdGVkKAorCQkJCQlAU3VwcHJlc3NXYXJuaW5ncygidW51c2VkIikgZmluYWwgU2VsZWN0aW9uRXZlbnQgZSkgeworCQkJCS8vIEFueSBkZWNvcmF0b3JzPworCQkJCWlmICghZGVjb3JhdG9ycy5pc0VtcHR5KCkpIHsKKwkJCQkJLy8gWWVzCisJCQkJCWZpbmFsIERlY29yYXRvciB0ZW1wRGVjb3JhdG9yID0gZGVjb3JhdG9ycworCQkJCQkJCS5nZXQoZGVjb3JhdG9yc0NvbWJvLmdldFNlbGVjdGlvbkluZGV4KCkpOworCQkJCQkvLyBXYXMgdGhlcmUgYSBjaGFuZ2UgaW4gc2VsZWN0ZWQgRGVjb3JhdG9ycz8KKwkJCQkJaWYgKHNlbGVjdGVkRGVjb3JhdG9yICE9IHRlbXBEZWNvcmF0b3IpIHsKKwkJCQkJCS8vIFllcworCQkJCQkJc2VsZWN0ZWREZWNvcmF0b3IgPSB0ZW1wRGVjb3JhdG9yOworCQkJCQkJTGlzdDxTdHJpbmc+IHBvcElkcyA9IGdldFBvcHVsYXRpb25JZGVudGlmaWVycyhzZWxlY3RlZERlY29yYXRvcik7CisJCQkJCQlwb3B1bGF0aW9uSWRlbnRpZmllcnMgPSBwb3BJZHM7CisJCQkJCQlpZihwb3B1bGF0aW9uSWRlbnRpZmllcnMgIT0gbnVsbCkgc2VsZWN0ZWRQb3B1bGF0aW9uSWRlbnRpZmllciA9IHBvcHVsYXRpb25JZGVudGlmaWVycy5nZXQoMCk7CisJCQkJCQkKKwkJCQkJCWluaXRpYWxpemVDb21ibyhwb3B1bGF0aW9uc0NvbWJvLCBnZXRQb3B1bGF0aW9uSWROYW1lcyhwb3BJZHMpLAorCQkJCQkJCQlnZXRQb3B1bGF0aW9uSWRJbmRleChzZWxlY3RlZFBvcHVsYXRpb25JZGVudGlmaWVyLCBwb3B1bGF0aW9uSWRlbnRpZmllcnMpKTsKKwkJCQkJCQorCQkKKwkJCQkJCXVwZGF0ZUNvbG9yUHJvdmlkZXJDb21wb3NpdGVzKCk7CisJCQkJCQlmaXJlUHJvcGVydHlTZWxlY3Rpb25FdmVudChuZXcgUHJvcGVydHlTZWxlY3Rpb25FdmVudCgKKwkJCQkJCQkJc2VsZWN0ZWREZWNvcmF0b3IsIHNlbGVjdGVkUG9wdWxhdGlvbklkZW50aWZpZXIsIG51bGwsIGNvbG9yUHJvdmlkZXJzQ29tYm8pKTsKKwkJCQkJfSAvLyBpZiBEZWNvcmF0b3JzIGNoYW5nZWQKKworCQkJCX0gLy8gaWYgYW55IGRlY29yYXRvcnMKKwkJCX0KKwkJfSAvLyBTZWxlY3Rpb25BZGFwdGVyCisJCQkJKTsKKworCQlwb3B1bGF0aW9uc0NvbWJvLmFkZFNlbGVjdGlvbkxpc3RlbmVyKG5ldyBTZWxlY3Rpb25BZGFwdGVyKCkgeworCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgdm9pZCB3aWRnZXRTZWxlY3RlZCgKKwkJCQkJQFN1cHByZXNzV2FybmluZ3MoInVudXNlZCIpIGZpbmFsIFNlbGVjdGlvbkV2ZW50IGUpIHsKKwkJCQkvLyBBbnkgZGVjb3JhdG9ycz8KKwkJCQlpZiAoIXBvcHVsYXRpb25JZGVudGlmaWVycy5pc0VtcHR5KCkpIHsKKwkJCQkJLy8gWWVzCisJCQkJCWZpbmFsIFN0cmluZyB0ZW1wUG9wSWQgPSBwb3B1bGF0aW9uSWRlbnRpZmllcnMKKwkJCQkJCQkuZ2V0KHBvcHVsYXRpb25zQ29tYm8uZ2V0U2VsZWN0aW9uSW5kZXgoKSk7CisJCQkJCS8vIFdhcyB0aGVyZSBhIGNoYW5nZSBpbiBzZWxlY3RlZCBEZWNvcmF0b3JzPworCQkJCQlpZiAoIXNlbGVjdGVkUG9wdWxhdGlvbklkZW50aWZpZXIuZXF1YWxzKHRlbXBQb3BJZCkpIHsKKwkJCQkJCS8vIFllcworCQkJCQkJc2VsZWN0ZWRQb3B1bGF0aW9uSWRlbnRpZmllciA9IHRlbXBQb3BJZDsKKwkJCQkJCXVwZGF0ZUNvbG9yUHJvdmlkZXJDb21wb3NpdGVzKCk7CisJCQkJCQlmaXJlUHJvcGVydHlTZWxlY3Rpb25FdmVudChuZXcgUHJvcGVydHlTZWxlY3Rpb25FdmVudCgKKwkJCQkJCQkJc2VsZWN0ZWREZWNvcmF0b3IsIHNlbGVjdGVkUG9wdWxhdGlvbklkZW50aWZpZXIsIG51bGwsIGNvbG9yUHJvdmlkZXJzQ29tYm8pKTsKKwkJCQkJfSAvLyBpZiBEZWNvcmF0b3JzIGNoYW5nZWQKKworCQkJCX0gLy8gaWYgYW55IGRlY29yYXRvcnMKKwkJCX0KKwkJfSAvLyBTZWxlY3Rpb25BZGFwdGVyCisJCQkJKTsKKwkJCisJCWNvbG9yUHJvdmlkZXJzQ29tYm8uYWRkU2VsZWN0aW9uTGlzdGVuZXIobmV3IFNlbGVjdGlvbkFkYXB0ZXIoKSB7CisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyB2b2lkIHdpZGdldFNlbGVjdGVkKAorCQkJCQlAU3VwcHJlc3NXYXJuaW5ncygidW51c2VkIikgZmluYWwgU2VsZWN0aW9uRXZlbnQgZSkgeworCQkJCXNlbGVjdGVkQ29sb3JQcm92aWRlciA9IAorCQkJCQlzdXBwb3J0ZWRDb2xvclByb3ZpZGVycy5nZXQoY29sb3JQcm92aWRlcnNDb21iby5nZXRTZWxlY3Rpb25JbmRleCgpKTsKKwkJCQl1cGRhdGVDb2xvclByb3ZpZGVyQ29tcG9zaXRlcygpOworCQkJfQorCQl9IC8vIFNlbGVjdGlvbkFkYXB0ZXIKKwkJCQkpOworCQkKKwkJZWRnZXNHcm91cCA9IG5ldyBHcm91cCh0aGlzLCBTV1QuTk9ORSk7CisJCWVkZ2VzQ29tYm8gPSBuZXcgQ29tYm8oZWRnZXNHcm91cCwgU1dULkRST1BfRE9XTiB8IFNXVC5SRUFEX09OTFkgfCBTV1QuQ0VOVEVSKTsKKwkJZWRnZXNDb21iby5hZGQoIiIpOwkJCisJCWVkZ2VzR3JvdXAuc2V0TGF5b3V0KG5ldyBGb3JtTGF5b3V0KCkpOworCQllZGdlc0dyb3VwLnNldFZpc2libGUoZmFsc2UpOworCQllZGdlc0dyb3VwLnNldFRleHQoTWVzc2FnZXMuZ2V0U3RyaW5nKCJJTVZpZXcuRWRnZXMiKSk7CisJCQorCQllZGdlc0NvbWJvLmFkZFNlbGVjdGlvbkxpc3RlbmVyKG5ldyBTZWxlY3Rpb25BZGFwdGVyKCkgeworCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgdm9pZCB3aWRnZXRTZWxlY3RlZCgKKwkJCQkJQFN1cHByZXNzV2FybmluZ3MoInVudXNlZCIpIGZpbmFsIFNlbGVjdGlvbkV2ZW50IGUpIHsKKwkJCQlTdHJpbmcgc2VsZWN0ZWRFZGdlcyA9IGVkZ2VzQ29tYm8uZ2V0VGV4dCgpOworCQkJCWlmIChzZWxlY3RlZEVkZ2VzID09IG51bGwgfHwgc2VsZWN0ZWRFZGdlcy5lcXVhbHMoIiIpKSB7CisJCQkJCWZpcmVQcm9wZXJ0eVNlbGVjdGlvbkV2ZW50KG51bGwpOworCQkJCX0KKwkJCQllbHNlIHsKKwkJCQkJU3RyaW5nIGVkZ2VQcmVmaXggPSBlZGdlVHlwZVRvVXJpUHJlZml4TWFwLmdldChzZWxlY3RlZEVkZ2VzKTsKKwkJCQkJZmlyZVByb3BlcnR5U2VsZWN0aW9uRXZlbnQobmV3IFByb3BlcnR5U2VsZWN0aW9uRXZlbnQobnVsbCwgbnVsbCwKKwkJCQkJCQludWxsLCBlZGdlUHJlZml4KSk7CisJCQkJfQorCQkJfQorCQl9IC8vIFNlbGVjdGlvbkFkYXB0ZXIKKwkJCQkpOworCisJCXNldFNpbXVsYXRpb24obnVsbCk7CisJfSAvLyBQcm9wZXJ0eVNlbGVjdG9yCisKKwkvKioKKwkgKiBAcmV0dXJuIDxjb2RlPnRydWU8L2NvZGU+IGlmIHRoZSBjb250cm9sIGhhcyBiZWVuIGluaXRpYWxpemVkLgorCSAqLworCXB1YmxpYyBib29sZWFuIGlzSW5pdGlhbGl6ZWQoKSB7CisJCXJldHVybiAhKGRlY29yYXRvcnMgPT0gbnVsbCB8fCBkZWNvcmF0b3JzLmlzRW1wdHkoKSk7CisJfSAvLyBpc0luaXRpYWxpemVkCisKKwkvKioKKwkgKiBTZXRzIHRoZSB7QGxpbmsgRGVjb3JhdG9yfXMKKwkgKiAKKwkgKiBAcGFyYW0gZGVjb3JhdG9ycworCSAqICAgICAgICAgICAge0BsaW5rIERlY29yYXRvcn1zIHRvIHNldAorCSAqLworCXB1YmxpYyB2b2lkIHNldERlY29yYXRvcnMoZmluYWwgTGlzdDxEZWNvcmF0b3I+IGRlY29yYXRvcnMpIHsKKwkJdGhpcy5kZWNvcmF0b3JzID0gZGVjb3JhdG9yczsKKwkJc2VsZWN0ZWREZWNvcmF0b3IgPSBkZWNvcmF0b3JzLmlzRW1wdHkoKSA/IG51bGwgOiBkZWNvcmF0b3JzLmdldCgwKTsKKwkJCisJCS8vIElmIHdlIGhhdmUgQk9USCBhIHBvcHVsYXRpb24gZGVjb3JhdG9yIGFuZCBhIGRpc2Vhc2UgZGVjb3JhdG9yCisJCS8vIHRyeSB0byBpbml0aWFsbHkgc2VsZWN0IHRoZSBkaXNlYXNlIGJ5IGRlZmF1bHQKKwkJaWYgKGRlY29yYXRvcnMuc2l6ZSgpPj0yKSB7CisJCQlpZighKHNlbGVjdGVkRGVjb3JhdG9yIGluc3RhbmNlb2YgRGlzZWFzZU1vZGVsKSkgeworCQkJCWZvcihpbnQgaSA9IDA7IGkgPCBkZWNvcmF0b3JzLnNpemUoKTsgaSArKykgeworCQkJCQlpZihkZWNvcmF0b3JzLmdldChpKSBpbnN0YW5jZW9mIERpc2Vhc2VNb2RlbCkgeworCQkJCQkJc2VsZWN0ZWREZWNvcmF0b3IgPSBkZWNvcmF0b3JzLmdldChpKTsKKwkJCQkJCWJyZWFrOworCQkJCQl9CisJCQkJfQorCQkJfQorCQl9CisKKwkJTGlzdDxTdHJpbmc+IHBvcElkcyA9IGdldFBvcHVsYXRpb25JZGVudGlmaWVycyhzZWxlY3RlZERlY29yYXRvcik7CisJCXBvcHVsYXRpb25JZGVudGlmaWVycyA9IHBvcElkczsKKwkJaWYocG9wdWxhdGlvbklkZW50aWZpZXJzICE9IG51bGwpIHNlbGVjdGVkUG9wdWxhdGlvbklkZW50aWZpZXIgPSBwb3B1bGF0aW9uSWRlbnRpZmllcnMuZ2V0KDApOworCQkKKwkJaW5pdGlhbGl6ZUNvbWJvKGRlY29yYXRvcnNDb21ibywgZ2V0RGVjb3JhdG9yTmFtZXMoZGVjb3JhdG9ycyksCisJCQkJZ2V0RGVjb3JhdG9ySW5kZXgoc2VsZWN0ZWREZWNvcmF0b3IsIGRlY29yYXRvcnMpKTsKKworCQlpbml0aWFsaXplQ29tYm8ocG9wdWxhdGlvbnNDb21ibywgZ2V0UG9wdWxhdGlvbklkTmFtZXMocG9wSWRzKSwKKwkJCQlnZXRQb3B1bGF0aW9uSWRJbmRleChzZWxlY3RlZFBvcHVsYXRpb25JZGVudGlmaWVyLCBwb3B1bGF0aW9uSWRlbnRpZmllcnMpKTsKKworCX0gLy8gc2V0RGVjb3JhdG9ycworCQorCUxpc3Q8U3RyaW5nPiBnZXRQb3B1bGF0aW9uSWRlbnRpZmllcnMoRGVjb3JhdG9yIGRlY29yYXRvcikgeworCQlpZihkZWNvcmF0b3IgaW5zdGFuY2VvZiBEaXNlYXNlTW9kZWwpIHsKKwkJCXJldHVybiAoKERpc2Vhc2VNb2RlbCkgZGVjb3JhdG9yKS5nZXRBbGxMYWJlbElkZW50aWZpZXJzKCk7CisJCX0gZWxzZSBpZihkZWNvcmF0b3IgaW5zdGFuY2VvZiBQb3B1bGF0aW9uTW9kZWwpIHsKKwkJCXJldHVybiAoKFBvcHVsYXRpb25Nb2RlbCkgZGVjb3JhdG9yKS5nZXRBbGxMYWJlbElkZW50aWZpZXJzKCk7CisJCX0gCisJCXJldHVybiBudWxsOworCX0KKwkvKioKKwkgKiBTZXRzIHRoZSBQb3B1bGF0aW9uIElkZW50aWZpZXJzCisJICogCisJICogQHBhcmFtIHBvcElkcworCSAqLworCXB1YmxpYyB2b2lkIHNldFBvcHVsYXRpb25JZGVudGlmaWVycyhmaW5hbCBMaXN0PFN0cmluZz4gcG9wSWRzKSB7CisJCXRoaXMucG9wdWxhdGlvbklkZW50aWZpZXJzID0gcG9wSWRzOworCQlzZWxlY3RlZFBvcHVsYXRpb25JZGVudGlmaWVyID0gcG9wSWRzLmlzRW1wdHkoKSA/IG51bGwgOiBwb3BJZHMuZ2V0KDApOworCQkKKworCQlpbml0aWFsaXplQ29tYm8ocG9wdWxhdGlvbnNDb21ibywgZ2V0UG9wdWxhdGlvbklkTmFtZXMocG9wSWRzKSwKKwkJCQlnZXRQb3B1bGF0aW9uSWRJbmRleChzZWxlY3RlZFBvcHVsYXRpb25JZGVudGlmaWVyLCBwb3B1bGF0aW9uSWRlbnRpZmllcnMpKTsKKwl9IC8vIHNldERlY29yYXRvcnMKKworCS8qKgorCSAqIEBwYXJhbSBkZWNvcmF0b3JzCisJICovCisJcHVibGljIHZvaWQgc2V0Q29sb3JQcm92aWRlcnMoZmluYWwgTGlzdDxEZWNvcmF0b3I+IGRlY29yYXRvcnMpIHsKKwkJCisJCWlmIChzdXBwb3J0ZWRDb2xvclByb3ZpZGVycy5pc0VtcHR5KCkpIHsKKwkJCS8vTm8gY29sb3IgcHJvdmlkZXJzIGF2YWlsYWJsZQorCQkJcmV0dXJuOworCQl9CisJCQorCQlmb3IgKFN0cmluZyBwcm92aWRlck5hbWUgOiBzdXBwb3J0ZWRDb2xvclByb3ZpZGVyc05hbWVzKSB7CisJCQljb2xvclByb3ZpZGVyc0NvbWJvLmFkZChwcm92aWRlck5hbWUpOworCQl9CisJCWNvbG9yUHJvdmlkZXJzQ29tYm8uc2VsZWN0KDApOworCQlzZWxlY3RlZENvbG9yUHJvdmlkZXIgPSBzdXBwb3J0ZWRDb2xvclByb3ZpZGVycy5nZXQoMCk7CisKKwkJdXBkYXRlQ29sb3JQcm92aWRlckNvbXBvc2l0ZXMoKTsKKwl9CisJCisJcHJpdmF0ZSB2b2lkIHNldEVkZ2VzKCkgeworCQlpZiAoc2VsZWN0ZWREZWNvcmF0b3IgPT0gbnVsbCkKKwkJCXJldHVybjsKKwkJCisJCVNldDxVUkk+IGVkZ2VzVVJJcyA9IHNlbGVjdGVkRGVjb3JhdG9yLmdldEdyYXBoKCkuZ2V0RWRnZXMoKS5rZXlTZXQoKTsKKwkJSXRlcmF0b3I8VVJJPiBpdGVyID0gZWRnZXNVUklzLml0ZXJhdG9yKCk7CisJCXdoaWxlKGl0ZXIuaGFzTmV4dCgpKSB7CisJCQlVUkkgbmV4dFVyaSA9IGl0ZXIubmV4dCgpOworCQkJU3RyaW5nIGVkZ2VQcmVmaXggPSBuZXh0VXJpLnRyaW1TZWdtZW50cygxKS50b1N0cmluZygpOworCQkJU3RyaW5nIGVkZ2VUeXBlID0gb3JnLmVjbGlwc2Uuc3RlbS51aS5wcmVmZXJlbmNlcy5NZXNzYWdlcy5nZXRTdHJpbmcoZWRnZVByZWZpeCk7CisJCQlpZiAoZWRnZVR5cGUuc3RhcnRzV2l0aCgiISIpICYmIGVkZ2VUeXBlLmVuZHNXaXRoKCIhIikpIHsKKwkJCQllZGdlUHJlZml4ID0gbmV4dFVyaS50cmltU2VnbWVudHMoMikudG9TdHJpbmcoKTsKKwkJCQllZGdlVHlwZSA9IG9yZy5lY2xpcHNlLnN0ZW0udWkucHJlZmVyZW5jZXMuTWVzc2FnZXMuZ2V0U3RyaW5nKGVkZ2VQcmVmaXgpOworCQkJfQorCQkJCisJCQlpZiAoIWVkZ2VUeXBlVG9VcmlQcmVmaXhNYXAuY29udGFpbnNLZXkoZWRnZVR5cGUpKSB7CisJCQkJZWRnZVR5cGVUb1VyaVByZWZpeE1hcC5wdXQoZWRnZVR5cGUsIGVkZ2VQcmVmaXgpOworCQkJCWVkZ2VzQ29tYm8uYWRkKGVkZ2VUeXBlKTsKKwkJCX0KKwkJfQorCX0KKworCS8qKgorCSAqIEluaXRpYWxpemUgdGhlIGNvbnRyb2wgZnJvbSBhIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmpvYnMuc2ltdWxhdGlvbi5TaW11bGF0aW9ufSBpbnN0YW5jZS4KKwkgKiAKKwkgKiBAcGFyYW0gc2ltdWxhdGlvbgorCSAqICAgICAgICAgICAgdGhlIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmpvYnMuc2ltdWxhdGlvbi5TaW11bGF0aW9ufQorCSAqLworCXB1YmxpYyB2b2lkIHNldFNpbXVsYXRpb24oZmluYWwgSVNpbXVsYXRpb24gc2ltdWxhdGlvbikgeworCQlpZiAoc2ltdWxhdGlvbiA9PSBudWxsKQorCQkJcmV0dXJuOworCQkKKwkJc2V0RGVjb3JhdG9ycyhnZXREZWNvcmF0b3JzVG9EaXNwbGF5KHNpbXVsYXRpb24pKTsKKwkJaWYoZGVjb3JhdG9ycyAhPSBudWxsKSB7CisJCQlzZXRDb2xvclByb3ZpZGVycyhkZWNvcmF0b3JzKTsKKwkJCWdlb1ZpZXdPcHRpb25zR3JvdXAuc2V0VmlzaWJsZSh0cnVlKTsKKwkJCXNldEVkZ2VzKCk7CisJCQllZGdlc0dyb3VwLnNldFZpc2libGUodHJ1ZSk7CisJCQlnZXRJbmZvcm1hdGlvbihzaW11bGF0aW9uKTsKKwkJfQorCX0gLy8gc2V0U2ltdWxhdGlvbgorCisJLyoqCisJICogQHBhcmFtIGRlY29yYXRvckZpbHRlcgorCSAqICAgICAgICAgICAgdGhlIGZpbHRlciB0aGF0IGRldGVybWluZXMgd2hpY2gge0BsaW5rIERlY29yYXRvcn1zIHdpbGwgYmUKKwkgKiAgICAgICAgICAgIGRpc3BsYXllZC4KKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXREZWNvcmF0b3JGaWx0ZXIoZmluYWwgRGVjb3JhdG9yRmlsdGVyIGRlY29yYXRvckZpbHRlcikgeworCQl0aGlzLmRlY29yYXRvckZpbHRlciA9IGRlY29yYXRvckZpbHRlcjsKKwl9IC8vIHNldERlY29yYXRvckZpbHRlcgorCisJLyoqCisJICogCisJICovCisJcHJvdGVjdGVkIHZvaWQgdXBkYXRlQ29sb3JQcm92aWRlckNvbXBvc2l0ZXMoKSB7CisJCWlmIChjb2xvclByb3ZpZGVyQ29tcG9zaXRlICE9IG51bGwpIHsKKwkJCWNvbG9yUHJvdmlkZXJDb21wb3NpdGUuZGlzcG9zZSgpOworCQl9CisJCWlmIChjb2xvcnNMZWdlbmRDb21wb3NpdGUgIT0gbnVsbCkgeworCQkJY29sb3JzTGVnZW5kQ29tcG9zaXRlLmRpc3Bvc2UoKTsKKwkJfQorCQlBZGFwdGVyRmFjdG9yeSBhZGFwdGVyRmFjdG9yeSA9IENvbG9yUHJvdmlkZXJBZGFwdGVyRmFjdG9yeS5JTlNUQU5DRS5nZXRGYWN0b3J5Rm9yVHlwZShzZWxlY3RlZENvbG9yUHJvdmlkZXIpOworCQlpZiAoYWRhcHRlckZhY3RvcnkgaW5zdGFuY2VvZiBJQ29sb3JQcm92aWRlckFkYXB0ZXJGYWN0b3J5KSB7CisJCQlJQ29sb3JQcm92aWRlckFkYXB0ZXJGYWN0b3J5IHNlbGVjdGVkQ29sb3JQcm92aWRlckFkYXB0ZXJGYWN0b3J5ID0gKElDb2xvclByb3ZpZGVyQWRhcHRlckZhY3RvcnkpYWRhcHRlckZhY3Rvcnk7CisJCQkKKwkJCWNvbG9yUHJvdmlkZXJDb21wb3NpdGUgPSBzZWxlY3RlZENvbG9yUHJvdmlkZXJBZGFwdGVyRmFjdG9yeQorCQkJCQkuY3JlYXRlUHJvcGVydGllc0NvbXBvc2l0ZShnZW9WaWV3T3B0aW9uc0dyb3VwLCBTV1QuTk9ORSwgc2VsZWN0ZWREZWNvcmF0b3IsIHNlbGVjdGVkUG9wdWxhdGlvbklkZW50aWZpZXIpOworCQkJLy8gaWYgdGhlcmUgaXMgbm8gY29tcG9zaXRlIGNvbnRyaWJ1dGlvbiBmcm9tIHRoZSBzZWxlY3RlZCBjb2xvcgorCQkJLy8gcHJvdmlkZXIgdGhlbiByZXR1cm4KKwkJCWlmIChjb2xvclByb3ZpZGVyQ29tcG9zaXRlID09IG51bGwpIHsKKwkJCQlyZXR1cm47CisJCQl9CisJCQlpZiAoY29sb3JQcm92aWRlckNvbXBvc2l0ZSBpbnN0YW5jZW9mIENvbG9yUHJvdmlkZXJQcm9wZXJ0aWVzQ29tcG9zaXRlKSB7CisJCQkJKChDb2xvclByb3ZpZGVyUHJvcGVydGllc0NvbXBvc2l0ZSkgY29sb3JQcm92aWRlckNvbXBvc2l0ZSkKKwkJCQkJCS5hZGRQcm9wZXJ0eVNlbGVjdGlvbkxpc3RlbmVyKG5ldyBDb2xvclByb3ZpZGVyUHJvcGVydGllc0NvbXBvc2l0ZS5Qcm9wZXJ0eVNlbGVjdGlvbkxpc3RlbmVyKCkgeworCQkJCQkJCXB1YmxpYyB2b2lkIHByb3BlcnR5U2VsZWN0ZWQoCisJCQkJCQkJCQlmaW5hbCBDb2xvclByb3ZpZGVyUHJvcGVydGllc0NvbXBvc2l0ZS5Qcm9wZXJ0eVNlbGVjdGlvbkV2ZW50IHByb3BlcnR5U2VsZWN0aW9uRXZlbnQpIHsKKwkJCQkJCQkJZmlyZVByb3BlcnR5U2VsZWN0aW9uRXZlbnQobmV3IFByb3BlcnR5U2VsZWN0aW9uRXZlbnQoCisJCQkJCQkJCQkJbnVsbCwgbnVsbCxudWxsLCBwcm9wZXJ0eVNlbGVjdGlvbkV2ZW50CisJCQkJCQkJCQkJCQkuZ2V0U291cmNlKCkpKTsKKwkJCQkJCQl9CisJCQkJCQl9KTsKKwkJCX0KKworCQkJZmluYWwgRm9ybURhdGEgY29sb3JQcm92aWRlckNvbXBvc2l0ZUZvcm1EYXRhID0gbmV3IEZvcm1EYXRhKCk7CisJCQljb2xvclByb3ZpZGVyQ29tcG9zaXRlRm9ybURhdGEudG9wID0gbmV3IEZvcm1BdHRhY2htZW50KDAsMCk7CisJCQljb2xvclByb3ZpZGVyQ29tcG9zaXRlRm9ybURhdGEubGVmdCA9IG5ldyBGb3JtQXR0YWNobWVudChERUNPUkFUT1JTX1dJRFRILCAwKTsKKwkJCWNvbG9yUHJvdmlkZXJDb21wb3NpdGVGb3JtRGF0YS5yaWdodCA9IG5ldyBGb3JtQXR0YWNobWVudChQUk9WSURFUlNfV0lEVEgsIDApOworCQkJY29sb3JQcm92aWRlckNvbXBvc2l0ZS5zZXRMYXlvdXREYXRhKGNvbG9yUHJvdmlkZXJDb21wb3NpdGVGb3JtRGF0YSk7CisJCQkKKwkJCWdlb1ZpZXdPcHRpb25zR3JvdXAubGF5b3V0KCk7CisJCQkKKwkJCWNvbG9yc0xlZ2VuZENvbXBvc2l0ZSA9IHNlbGVjdGVkQ29sb3JQcm92aWRlckFkYXB0ZXJGYWN0b3J5CisJCQkJCS5jcmVhdGVDb2xvcnNMZWdlbmRDb21wb3NpdGUodGhpcywgU1dULk5PTkUpOworCQkJaWYgKGNvbG9yc0xlZ2VuZENvbXBvc2l0ZSAhPSBudWxsKSB7CisJCQkJY29sb3JzTGVnZW5kQ29tcG9zaXRlLnBhY2soKTsKKwkJCQljb2xvcnNMZWdlbmRDb21wb3NpdGUubGF5b3V0KCk7CisJCQl9CisJCQkKKwkJCXRoaXMubGF5b3V0KCk7CisJCX0KKwkJCisJCWZpcmVDb2xvclByb3ZpZGVyQ2hhbmdlZEV2ZW50KCk7CisJfQorCisJLyoqCisJICogQHBhcmFtIHNpbXVsYXRpb24KKwkgKiAgICAgICAgICAgIHRoZSBzaW11bGF0aW9uIHRoYXQgY29udGFpbnMge0BsaW5rIERlY29yYXRvcn1zCisJICogQHJldHVybiBhIHtAbGluayBMaXN0fSBvZiB0aGUge0BsaW5rIERlY29yYXRvcn1zIHdob3NlIHByb3BlcnRpZXMKKwkgKi8KKwlwcml2YXRlIExpc3Q8RGVjb3JhdG9yPiBnZXREZWNvcmF0b3JzVG9EaXNwbGF5KGZpbmFsIElTaW11bGF0aW9uIHNpbXVsYXRpb24pIHsKKwkJZmluYWwgTGlzdDxEZWNvcmF0b3I+IHJldFZhbHVlID0gbmV3IEFycmF5TGlzdDxEZWNvcmF0b3I+KCk7CisKKwkJLy8gR290IFNpbXVsYXRpb24/CisJCWlmIChzaW11bGF0aW9uICE9IG51bGwpIHsKKwkJCS8vIFllcworCQkJZmluYWwgR3JhcGggY2Fub25pY2FsR3JhcGggPSBzaW11bGF0aW9uLmdldFNjZW5hcmlvKCkKKwkJCQkJLmdldENhbm9uaWNhbEdyYXBoKCk7CisJCQkvLyBJcyB0aGUgY2Fub25pY2FsR3JhcGggaW5pdGlhbGl6ZWQgeWV0PworCQkJaWYgKGNhbm9uaWNhbEdyYXBoICE9IG51bGwpIHsKKwkJCQkvLyBZZXMKKwkJCQkvLyBHbyB0aHJvdWdoIHRoZSBEZWNvcmF0b3JzIGtlZXBpbmcgdGhlIG9uZXMgdGhhdCB0aGUgZmlsdGVyCisJCQkJLy8gc2F5cyBhcmUgb2suCisJCQkJZm9yIChmaW5hbCBPYmplY3QgZWxlbWVudCA6IGNhbm9uaWNhbEdyYXBoLmdldERlY29yYXRvcnMoKSkgeworCQkJCQlmaW5hbCBEZWNvcmF0b3IgZGVjb3JhdG9yID0gKERlY29yYXRvcikgZWxlbWVudDsKKwkJCQkJLy8gQWNjZXB0YWJsZT8KKwkJCQkJaWYgKGRlY29yYXRvckZpbHRlci5hY2NlcHQoZGVjb3JhdG9yKSkgeworCQkJCQkJcmV0VmFsdWUuYWRkKGRlY29yYXRvcik7CisJCQkJCX0gLy8gaWYgaGFzIGEgdGl0bGUKKwkJCQl9IC8vIGZvciBlYWNoIGRlY29yYXRvcgorCQkJfSAvLyBpZiBnb3QgZ3JhcGgKKwkJfSAvLyBpZiBnb3Qgc2ltdWxhdGlvbgorCQlyZXR1cm4gcmV0VmFsdWU7CisJfSAvLyBnZXREZWNvcmF0b3JzVG9EaXNwbGF5CisKKwkvKioKKwkgKiBAcGFyYW0gc2ltdWxhdGlvbgorCSAqICAgICAgICAgICAgdGhlIHNpbXVsYXRpb24gdGhhdCBjb250YWlucyB7QGxpbmsgRGVjb3JhdG9yfXMKKwkgKi8KKwlwcml2YXRlIHZvaWQgZ2V0SW5mb3JtYXRpb24oZmluYWwgSVNpbXVsYXRpb24gc2ltdWxhdGlvbikgeworCQkvLyBHb3QgU2ltdWxhdGlvbj8KKwkJaWYgKHNpbXVsYXRpb24gIT0gbnVsbCkgeworCQkJLy8gWWVzCisJCQlmaW5hbCBHcmFwaCBjYW5vbmljYWxHcmFwaCA9IHNpbXVsYXRpb24uZ2V0U2NlbmFyaW8oKQorCQkJCQkuZ2V0Q2Fub25pY2FsR3JhcGgoKTsKKwkJCS8vIElzIHRoZSBjYW5vbmljYWxHcmFwaCBpbml0aWFsaXplZCB5ZXQ/CisJCQlpZiAoY2Fub25pY2FsR3JhcGggIT0gbnVsbCkgeworCQkJCWNhbm9uaWNhbEdyYXBoLmdldEdyYXBoTGFiZWxzKCk7CisJCQkJY2Fub25pY2FsR3JhcGgKKwkJCQkJCS5nZXROb2RlTGFiZWxzQnlUeXBlVVJJKFVSSQorCQkJCQkJCQkuY3JlYXRlVVJJKCJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vbGFiZWwvcG9wdWxhdGlvbiIpKTsKKwkJCX0gLy8gaWYgZ290IGdyYXBoCisJCX0gLy8gaWYgZ290IHNpbXVsYXRpb24KKwl9IC8vIGdldERlY29yYXRvcnNUb0Rpc3BsYXkKKworCS8qKgorCSAqIEBwYXJhbSBjb21ibworCSAqIEBwYXJhbSBuYW1lcworCSAqIEBwYXJhbSBzZWxlY3Rpb25JbmRleAorCSAqLworCXByaXZhdGUgdm9pZCBpbml0aWFsaXplQ29tYm8oZmluYWwgQ29tYm8gY29tYm8sIGZpbmFsIFN0cmluZ1tdIG5hbWVzLAorCQkJZmluYWwgaW50IHNlbGVjdGlvbkluZGV4KSB7CisJCWNvbWJvLnNldEl0ZW1zKG5hbWVzKTsKKwkJY29tYm8uc2VsZWN0KHNlbGVjdGlvbkluZGV4KTsKKwl9IC8vIGluaXRpYWxpemVDb21ibworCisJLyoqCisJICogQHBhcmFtIGRlY29yYXRvcnMKKwkgKiAgICAgICAgICAgIGEgbGlzdCBvZiB7QGxpbmsgRGVjb3JhdG9yfXMKKwkgKiBAcmV0dXJuIGFuIGFycmF5IG9mIHRoZSBuYW1lcyBvZiB0aGUge0BsaW5rIERlY29yYXRvcnN9LgorCSAqLworCXByaXZhdGUgU3RyaW5nW10gZ2V0RGVjb3JhdG9yTmFtZXMoZmluYWwgTGlzdDxEZWNvcmF0b3I+IGRlY29yYXRvcnMpIHsKKwkJZmluYWwgTGlzdDxTdHJpbmc+IHJldFZhbHVlID0gbmV3IEFycmF5TGlzdDxTdHJpbmc+KCk7CisJCWlmIChkZWNvcmF0b3JzICE9IG51bGwpIHsKKwkJCS8vIFllcworCQkJZm9yIChmaW5hbCBEZWNvcmF0b3IgZGVjb3JhdG9yIDogZGVjb3JhdG9ycykgeworCQkJCWZpbmFsIENvbXBvc2VkQWRhcHRlckZhY3RvcnkgaXRlbVByb3ZpZGVyRmFjdG9yeSA9IG5ldyBDb21wb3NlZEFkYXB0ZXJGYWN0b3J5KAorCQkJCQkJQ29tcG9zZWRBZGFwdGVyRmFjdG9yeS5EZXNjcmlwdG9yLlJlZ2lzdHJ5LklOU1RBTkNFKTsKKworCQkJCWZpbmFsIElJdGVtTGFiZWxQcm92aWRlciBscCA9IChJSXRlbUxhYmVsUHJvdmlkZXIpIGl0ZW1Qcm92aWRlckZhY3RvcnkuYWRhcHQoCisJCQkJCQlkZWNvcmF0b3IsIElJdGVtTGFiZWxQcm92aWRlci5jbGFzcyk7CisJCQkJU3RyaW5nIHRpdGxlID0gbHAuZ2V0VGV4dChkZWNvcmF0b3IpOworCQkJCXRpdGxlID0gdGl0bGUgPT0gbnVsbCA/ICJudWxsIiA6IHRpdGxlOworCQkJCXJldFZhbHVlLmFkZCh0aXRsZSk7CisJCQl9IC8vIGZvciBlYWNoIGRlY29yYXRvcgorCQl9IC8vIGlmCisJCXJldHVybiByZXRWYWx1ZS50b0FycmF5KG5ldyBTdHJpbmdbXSB7fSk7CisJfSAvLyBnZXREZWNvcmF0b3JOYW1lcworCisJLyoqCisJICogQHBhcmFtIHBvcElkcworCSAqICAgICAgICAgICAgYSBsaXN0IG9mIHBvcHVsYXRpb24gaWRzCisJICogQHJldHVybiBhbiBhcnJheSBvZiB0aGUgbmFtZXMgCisJICovCisJcHJpdmF0ZSBTdHJpbmdbXSBnZXRQb3B1bGF0aW9uSWROYW1lcyhmaW5hbCBMaXN0PFN0cmluZz4gcG9wSWRzKSB7CisJCWZpbmFsIExpc3Q8U3RyaW5nPiByZXRWYWx1ZSA9IG5ldyBBcnJheUxpc3Q8U3RyaW5nPigpOworCQlpZiAocG9wSWRzICE9IG51bGwpIHsKKwkJCS8vIFllcworCQkJZm9yIChmaW5hbCBTdHJpbmcgZGVjaWQgOiBwb3BJZHMpIHsKKwkJCQlTdHJpbmcgdGl0bGUgPSBkZWNpZDsKKwkJCQl0aXRsZSA9IHRpdGxlID09IG51bGwgPyAibnVsbCIgOiB0aXRsZTsKKwkJCQlyZXRWYWx1ZS5hZGQodGl0bGUpOworCQkJfSAvLyBmb3IgZWFjaCBkZWNvcmF0b3IKKwkJfSAvLyBpZgorCQlyZXR1cm4gcmV0VmFsdWUudG9BcnJheShuZXcgU3RyaW5nW10ge30pOworCX0gLy8gZ2V0RGVjb3JhdG9yTmFtZXMKKwkKKwkvKioKKwkgKiBAcGFyYW0gc2VsZWN0ZWREZWNvcmF0b3IKKwkgKiBAcGFyYW0gZGVjb3JhdG9ycworCSAqICAgICAgICAgICAgYSBsaXN0IG9mIHtAbGluayBEZWNvcmF0b3J9cy4KKwkgKiBAcmV0dXJuIHRoZSBwb3NpdGlvbiAoMCBvcmlnaW4pIG9mIHRoZSBzZWxlY3RlZERlY29yYXRvciBpbiBkZWNvcmF0b3JzLAorCSAqICAgICAgICAgb3IgMCwgaWYgdGhlIGRlY29yYXRvcnMgbGlzdCBpcyBlbXB0eS4KKwkgKi8KKwlwcml2YXRlIGludCBnZXREZWNvcmF0b3JJbmRleChmaW5hbCBEZWNvcmF0b3Igc2VsZWN0ZWREZWNvcmF0b3IsCisJCQlmaW5hbCBMaXN0PERlY29yYXRvcj4gZGVjb3JhdG9ycykgeworCQlpZiAoc2VsZWN0ZWREZWNvcmF0b3IgIT0gbnVsbCAmJiBkZWNvcmF0b3JzICE9IG51bGwKKwkJCQkmJiAhZGVjb3JhdG9ycy5pc0VtcHR5KCkpIHsKKwkJCS8vIFllcworCQkJcmV0dXJuIGRlY29yYXRvcnMuaW5kZXhPZihzZWxlY3RlZERlY29yYXRvcik7CisJCX0gLy8gaWYKKwkJcmV0dXJuIDA7CisJfSAvLyBnZXREZWNvcmF0b3JJbmRleAorCisJLyoqCisJICovCisJcHJpdmF0ZSBpbnQgZ2V0UG9wdWxhdGlvbklkSW5kZXgoZmluYWwgU3RyaW5nIHNlbGVjdGVkUG9wSWQsCisJCQlmaW5hbCBMaXN0PFN0cmluZz4gcG9wSWRzKSB7CisJCWlmIChzZWxlY3RlZFBvcElkICE9IG51bGwgJiYgcG9wSWRzICE9IG51bGwKKwkJCQkmJiAhcG9wSWRzLmlzRW1wdHkoKSkgeworCQkJLy8gWWVzCisJCQlyZXR1cm4gcG9wSWRzLmluZGV4T2Yoc2VsZWN0ZWRQb3BJZCk7CisJCX0gLy8gaWYKKwkJcmV0dXJuIDA7CisJfSAvLyBnZXREZWNvcmF0b3JJbmRleAorCQorCS8qKgorCSAqIEBwYXJhbSBsaXN0ZW5lcgorCSAqLworCXB1YmxpYyB2b2lkIGFkZFByb3BlcnR5U2VsZWN0aW9uTGlzdGVuZXIoCisJCQlmaW5hbCBQcm9wZXJ0eVNlbGVjdGlvbkxpc3RlbmVyIGxpc3RlbmVyKSB7CisJCXNlbGVjdGlvbkxpc3RlbmVycy5hZGQobGlzdGVuZXIpOworCX0KKwkKKwkvKioKKwkgKiBAcGFyYW0gbGlzdGVuZXIKKwkgKi8KKwlwdWJsaWMgdm9pZCByZW1vdmVQcm9wZXJ0eVNlbGVjdGlvbkxpc3RlbmVyKAorCQkJZmluYWwgUHJvcGVydHlTZWxlY3Rpb25MaXN0ZW5lciBsaXN0ZW5lcikgeworCQlzZWxlY3Rpb25MaXN0ZW5lcnMucmVtb3ZlKGxpc3RlbmVyKTsKKwl9CisKKwlwcm90ZWN0ZWQgdm9pZCBmaXJlUHJvcGVydHlTZWxlY3Rpb25FdmVudChmaW5hbCBQcm9wZXJ0eVNlbGVjdGlvbkV2ZW50IHBzZSkgeworCQlmb3IgKGZpbmFsIFByb3BlcnR5U2VsZWN0aW9uTGlzdGVuZXIgbGlzdGVuZXIgOiBzZWxlY3Rpb25MaXN0ZW5lcnMpIHsKKwkJCWxpc3RlbmVyLnByb3BlcnR5U2VsZWN0ZWQocHNlKTsKKwkJfSAvLyBmb3IgZWFjaCBQcm9wZXJ0eVNlbGVjdGlvbkxpc3RlbmVyCisJfSAvLyBmaXJlUHJvcGVydHlTZWxlY3Rpb25FdmVudAorCQorCS8qKgorCSAqIEBwYXJhbSBsaXN0ZW5lcgorCSAqLworCXB1YmxpYyB2b2lkIGFkZENvbG9yUHJvdmlkZXJDaGFuZ2VkTGlzdGVuZXIoCisJCQlmaW5hbCBJQ29sb3JQcm92aWRlckNoYW5nZWRMaXN0ZW5lciBsaXN0ZW5lcikgeworCQljb2xvclByb3ZpZGVyQ2hhbmdlZExpc3RlbmVycy5hZGQobGlzdGVuZXIpOworCX0KKwkKKwkvKioKKwkgKiBAcGFyYW0gbGlzdGVuZXIKKwkgKi8KKwlwdWJsaWMgdm9pZCByZW1vdmVDb2xvclByb3ZpZGVyQ2hhbmdlZExpc3RlbmVyKAorCQkJZmluYWwgSUNvbG9yUHJvdmlkZXJDaGFuZ2VkTGlzdGVuZXIgbGlzdGVuZXIpIHsKKwkJY29sb3JQcm92aWRlckNoYW5nZWRMaXN0ZW5lcnMucmVtb3ZlKGxpc3RlbmVyKTsKKwl9CisKKwlwcm90ZWN0ZWQgdm9pZCBmaXJlQ29sb3JQcm92aWRlckNoYW5nZWRFdmVudCgpIHsKKwkJZm9yIChmaW5hbCBJQ29sb3JQcm92aWRlckNoYW5nZWRMaXN0ZW5lciBsaXN0ZW5lciA6IGNvbG9yUHJvdmlkZXJDaGFuZ2VkTGlzdGVuZXJzKSB7CisJCQlsaXN0ZW5lci5jb2xvclByb3ZpZGVyQ2hhbmdlZChzZWxlY3RlZENvbG9yUHJvdmlkZXIpOworCQl9IC8vIGZvciBlYWNoIFByb3BlcnR5U2VsZWN0aW9uTGlzdGVuZXIKKwl9IC8vIGZpcmVQcm9wZXJ0eVNlbGVjdGlvbkV2ZW50CisKKwkvKioKKwkgKiBUaGlzIGludGVyZmFjZSBpcyBpbXBsZW1lbnRlZCBieSBjbGFzc2VzIHRoYXQgZGV0ZXJtaW5lIGlmIGEKKwkgKiB7QGxpbmsgRGVjb3JhdG9yfSBtZWV0cyBzb21lIHNwZWNpZmllZCBjcml0ZXJpYS4KKwkgKi8KKwlwdWJsaWMgaW50ZXJmYWNlIERlY29yYXRvckZpbHRlciB7CisJCS8qKgorCQkgKiBAcGFyYW0gZGVjb3JhdG9yCisJCSAqIEByZXR1cm4gPGNvZGU+dHJ1ZTwvY29kZT4gaWYgdGhlIHtAbGluayBEZWNvcmF0b3J9IGlzIGFjY2VwdGFibGUuCisJCSAqLworCQlib29sZWFuIGFjY2VwdChmaW5hbCBEZWNvcmF0b3IgZGVjb3JhdG9yKTsKKwl9IC8vIERlY29yYXRvckZpbHRlcgorCisJLyoqCisJICogVGhpcyBpbnRlcmZhY2UgaXMgaW1wbGVtZW50ZWQgYnkgY2xhc3NlcyB0aGF0IHdpc2ggdG8gYmUgbm90aWZpZWQKKwkgKiB3aGVuZXZlciBhIHByb3BlcnR5IGlzIHNlbGVjdGVkIGluIHRoaXMgd2lkZ2V0LgorCSAqLworCXB1YmxpYyBpbnRlcmZhY2UgUHJvcGVydHlTZWxlY3Rpb25MaXN0ZW5lciB7CisJCS8qKgorCQkgKiBAcGFyYW0gcHJvcGVydHlTZWxlY3Rpb25FdmVudAorCQkgKi8KKwkJdm9pZCBwcm9wZXJ0eVNlbGVjdGVkKFByb3BlcnR5U2VsZWN0aW9uRXZlbnQgcHJvcGVydHlTZWxlY3Rpb25FdmVudCk7CisJfSAvLyBQcm9wZXJ0eVNlbGVjdGlvbkxpc3RlbmVyCisKKwkvKioKKwkgKiBUaGlzIGNsYXNzIHJlcHJlc2VudHMgdGhlIGV2ZW50IG9mIGEgcHJvcGVydHkgYmVpbmcgc2VsZWN0ZWQgaW4gdGhlCisJICogd2lkZ2V0LgorCSAqLworCXB1YmxpYyBzdGF0aWMgY2xhc3MgUHJvcGVydHlTZWxlY3Rpb25FdmVudCBleHRlbmRzIEV2ZW50T2JqZWN0IHsKKwkJcHJpdmF0ZSBzdGF0aWMgZmluYWwgbG9uZyBzZXJpYWxWZXJzaW9uVUlEID0gMUw7CisJCXByaXZhdGUgdHJhbnNpZW50IGZpbmFsIEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IgcHJvcGVydHk7CisJCXByaXZhdGUgdHJhbnNpZW50IGZpbmFsIERlY29yYXRvciBkZWNvcmF0b3I7CisJCXByaXZhdGUgdHJhbnNpZW50IGZpbmFsIFN0cmluZyBwb3B1bGF0aW9uSWRlbnRpZmllcjsKKworCQkvKioKKwkJICogQHBhcmFtIGRlY29yYXRvcgorCQkgKiAgICAgICAgICAgIHRoZSB7QGxpbmsgRGVjb3JhdG9yfQorCQkgKiBAcGFyYW0gcHJvcGVydHkKKwkJICogICAgICAgICAgICB0aGUgcHJvcGVydHkgdGhhdCB3YXMgc2VsZWN0ZWQuCisJCSAqIEBwYXJhbSBzb3VyY2UKKwkJICovCisJCXB1YmxpYyBQcm9wZXJ0eVNlbGVjdGlvbkV2ZW50KGZpbmFsIERlY29yYXRvciBkZWNvcmF0b3IsIFN0cmluZyBwb3BJZCwKKwkJCQlmaW5hbCBJdGVtUHJvcGVydHlEZXNjcmlwdG9yIHByb3BlcnR5LCBmaW5hbCBPYmplY3Qgc291cmNlKSB7CisJCQlzdXBlcihzb3VyY2UpOworCQkJdGhpcy5kZWNvcmF0b3IgPSBkZWNvcmF0b3I7CisJCQl0aGlzLnByb3BlcnR5ID0gcHJvcGVydHk7CisJCQl0aGlzLnBvcHVsYXRpb25JZGVudGlmaWVyID0gcG9wSWQ7CisJCX0KKworCQkvKioKKwkJICogQHJldHVybiB0aGUgZGVjb3JhdG9yCisJCSAqLworCQlwdWJsaWMgZmluYWwgRGVjb3JhdG9yIGdldERlY29yYXRvcigpIHsKKwkJCXJldHVybiBkZWNvcmF0b3I7CisJCX0KKworCQkvKioKKwkJICogQHJldHVybiB0aGUgcG9wdWxhdGlvbiBpZGVudGlmaWVyCisJCSAqLworCQlwdWJsaWMgZmluYWwgU3RyaW5nIGdldFBvcHVsYXRpb25JZGVudGlmaWVyKCkgeworCQkJcmV0dXJuIHBvcHVsYXRpb25JZGVudGlmaWVyOworCQl9CisJCQorCQkvKioKKwkJICogQHJldHVybiB0aGUgcHJvcGVydHkKKwkJICovCisJCXB1YmxpYyBmaW5hbCBJdGVtUHJvcGVydHlEZXNjcmlwdG9yIGdldFByb3BlcnR5KCkgeworCQkJcmV0dXJuIHByb3BlcnR5OworCQl9CisKKwkJLyoqCisJCSAqIEBzZWUgamF2YS51dGlsLkV2ZW50T2JqZWN0I3RvU3RyaW5nKCkKKwkJICovCisJCUBPdmVycmlkZQorCQlwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkgeworCQkJZmluYWwgU3RyaW5nQnVpbGRlciBzYiA9IG5ldyBTdHJpbmdCdWlsZGVyKAorCQkJCQlkZWNvcmF0b3IgPT0gbnVsbCA/ICJudWxsLCIgOiBkZWNvcmF0b3IuZ2V0RHVibGluQ29yZSgpCisJCQkJCQkJLmdldFRpdGxlKCkpOworCQkJc2IuYXBwZW5kKHByb3BlcnR5ID09IG51bGwgPyAibnVsbCIgOiBwcm9wZXJ0eQorCQkJCQkuZ2V0RGlzcGxheU5hbWUocHJvcGVydHkpKTsKKwkJCXJldHVybiBzYi50b1N0cmluZygpOworCQl9CisJfSAvLyBQcm9wZXJ0eVNlbGVjdGlvbkV2ZW50CisKKwkvKioKKwkgKiBAcmV0dXJuIHRoZSBzZWxlY3RlZERlY29yYXRvcgorCSAqLworCXB1YmxpYyBEZWNvcmF0b3IgZ2V0U2VsZWN0ZWREZWNvcmF0b3IoKSB7CisJCXJldHVybiBzZWxlY3RlZERlY29yYXRvcjsKKwl9CisJCisJLyoqCisJICogQHJldHVybiB0aGUgc2VsZWN0ZWQgcG9wdWxhdGlvbiBpZGVudGlmaWVyCisJICovCisJcHVibGljIFN0cmluZyBnZXRTZWxlY3RlZFBvcHVsYXRpb25JZGVudGlmaWVyKCkgeworCQlyZXR1cm4gc2VsZWN0ZWRQb3B1bGF0aW9uSWRlbnRpZmllcjsKKwl9Cit9IC8vIFByb3BlcnR5U2VsZWN0b3IKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS93aWRnZXRzL0lTT0tleVBpY2tlZEV2ZW50LmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvd2lkZ2V0cy9JU09LZXlQaWNrZWRFdmVudC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY3N2Y4MjYKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvd2lkZ2V0cy9JU09LZXlQaWNrZWRFdmVudC5qYXZhCkBAIC0wLDAgKzEsNDEgQEAKKy8vIElTT0tleVBpY2tlZEV2ZW50LmphdmEKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS51aS53aWRnZXRzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGphdmEudXRpbC5FdmVudE9iamVjdDsKKworLyoqCisgKiBUaGlzIGNsYXNzIHJlcHJlc2VudHMgdGhlIGV2ZW50IG9mIGFuIElTT2tleSBiZWluZyBzZWxlY3RlZCB1c2luZyBhbgorICoge0BsaW5rIElTT0tleVBpY2tlcn0uCisgKi8KK3B1YmxpYyBjbGFzcyBJU09LZXlQaWNrZWRFdmVudCBleHRlbmRzIEV2ZW50T2JqZWN0IHsKKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBsb25nIHNlcmlhbFZlcnNpb25VSUQgPSAxTDsKKwlwcml2YXRlIFN0cmluZyBpc29LZXk7CisKKwkvKioKKwkgKiBAcGFyYW0gc291cmNlCisJICogQHBhcmFtIGlzb0tleQorCSAqLworCXB1YmxpYyBJU09LZXlQaWNrZWRFdmVudChPYmplY3Qgc291cmNlLCBTdHJpbmcgaXNvS2V5KSB7CisJCXN1cGVyKHNvdXJjZSk7CisJCXRoaXMuaXNvS2V5ID0gaXNvS2V5OworCX0KKworCS8qKgorCSAqIEByZXR1cm4gdGhlIGlzb0tleQorCSAqLworCXB1YmxpYyBmaW5hbCBTdHJpbmcgZ2V0SXNvS2V5KCkgeworCQlyZXR1cm4gaXNvS2V5OworCX0KKworfSAvLyBJU09LZXlQaWNrZWRFdmVudApkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3dpZGdldHMvSVNPS2V5UGlja2VkRXZlbnRMaXN0ZW5lci5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3dpZGdldHMvSVNPS2V5UGlja2VkRXZlbnRMaXN0ZW5lci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU0NGJmMjMKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvd2lkZ2V0cy9JU09LZXlQaWNrZWRFdmVudExpc3RlbmVyLmphdmEKQEAgLTAsMCArMSwyMiBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnVpLndpZGdldHM7CitpbXBvcnQgamF2YS51dGlsLkV2ZW50TGlzdGVuZXI7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKKy8qKgorICogVGhpcyBpbnRlcmZhY2UgaXMgaW1wbGVtZW50ZWQgYnkgY2xhc3NlcyB0aGF0IHdhbnQgdG8gYmUgaW5mb3JtZWQgd2hlbiBhbiBJU08KKyAqIGtleSBpcyBzZWxlY3RlZCBmcm9tIHRoZSB7QGxpbmsgSVNPS2V5UGlja2VyfTsKKyAqLworcHVibGljIGludGVyZmFjZSBJU09LZXlQaWNrZWRFdmVudExpc3RlbmVyIGV4dGVuZHMgRXZlbnRMaXN0ZW5lciB7CisJdm9pZCBpc29LZXlQaWNrZWQoSVNPS2V5UGlja2VkRXZlbnQgaWtwZSk7Cit9IC8vIElTT0tleVBpY2tlZEV2ZW50TGlzdGVuZXIKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS93aWRnZXRzL0lTT0tleVBpY2tlci5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3dpZGdldHMvSVNPS2V5UGlja2VyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWVhMGMzZQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS93aWRnZXRzL0lTT0tleVBpY2tlci5qYXZhCkBAIC0wLDAgKzEsMTgxIEBACisvLyBJU09LZXlQaWNrZXIuamF2YQorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnVpLndpZGdldHM7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CitpbXBvcnQgamF2YS51dGlsLmNvbmN1cnJlbnQuQ29weU9uV3JpdGVBcnJheUxpc3Q7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLkxhYmVsUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS5HZW9ncmFwaGljTmFtZXM7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LlNXVDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLlNlbGVjdGlvbkFkYXB0ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5TZWxlY3Rpb25FdmVudDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZ3JhcGhpY3MuUG9pbnQ7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmdyYXBoaWNzLlJlY3RhbmdsZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QubGF5b3V0LkZvcm1BdHRhY2htZW50OworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5sYXlvdXQuRm9ybURhdGE7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5Gb3JtTGF5b3V0OworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5FdmVudDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5MYWJlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5MaXN0ZW5lcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5UZXh0OworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLmRpYWxvZ3MuRmlsdGVyZWRMaXN0OworCisvKioKKyAqIFRoaXMgY2xhc3MgaXMgYSBTV1QgQ29tcG9zaXRlIHRoYXQgYWxsb3dzIGEgdXNlciB0byBzcGVjaWZ5IGFuIElTTyBrZXkgYnkKKyAqIHBpY2tpbmcgZnJvbSBhbiBleHBhbmRhYmxlIGhpZXJhcmNoeSBvZiBjb3VudHJ5IG5hbWVzIGFuZCB0aGVpcgorICogc3ViLWRpdmlzaW9ucy4KKyAqLworcHVibGljIGNsYXNzIElTT0tleVBpY2tlciBleHRlbmRzIENvbXBvc2l0ZSB7CisKKwlwcml2YXRlIGZpbmFsIExpc3Q8SVNPS2V5UGlja2VkRXZlbnRMaXN0ZW5lcj4gbGlzdGVuZXJzID0gbmV3IENvcHlPbldyaXRlQXJyYXlMaXN0PElTT0tleVBpY2tlZEV2ZW50TGlzdGVuZXI+KCk7CisKKwlwcml2YXRlIGZpbmFsIExhYmVsIGlzb0tleUxldmVsRGVzY3JpcHRpb247CisJcHJpdmF0ZSBmaW5hbCBGaWx0ZXJlZExpc3QgZmlsdGVyZWRMaXN0OworCWZpbmFsIFRleHQgdGV4dDsKKwlwcml2YXRlIGludCBpc29LZXlMZXZlbDsKKworCS8qKgorCSAqIENyZWF0ZSB0aGUgY29tcG9zaXRlCisJICogCisJICogQHBhcmFtIHBhcmVudAorCSAqIEBwYXJhbSBzdHlsZQorCSAqLworCXB1YmxpYyBJU09LZXlQaWNrZXIoZmluYWwgQ29tcG9zaXRlIHBhcmVudCwgZmluYWwgaW50IHN0eWxlLAorCQkJZmluYWwgaW50IGlzb0tleUxldmVsKSB7CisJCXN1cGVyKHBhcmVudCwgc3R5bGUpOworCQl0aGlzLmlzb0tleUxldmVsID0gaXNvS2V5TGV2ZWw7CisJCXNldExheW91dChuZXcgRm9ybUxheW91dCgpKTsKKworCQl0ZXh0ID0gbmV3IFRleHQodGhpcywgU1dULkJPUkRFUik7CisJCWZpbmFsIEZvcm1EYXRhIGZkX3RleHQgPSBuZXcgRm9ybURhdGEoKTsKKwkJZmRfdGV4dC50b3AgPSBuZXcgRm9ybUF0dGFjaG1lbnQoMCwgMCk7CisJCWZkX3RleHQubGVmdCA9IG5ldyBGb3JtQXR0YWNobWVudCgyNSwgMCk7CisJCWZkX3RleHQucmlnaHQgPSBuZXcgRm9ybUF0dGFjaG1lbnQoMTAwLCAwKTsKKwkJdGV4dC5zZXRMYXlvdXREYXRhKGZkX3RleHQpOworCQl0ZXh0LmFkZExpc3RlbmVyKFNXVC5Nb2RpZnksIG5ldyBMaXN0ZW5lcigpIHsKKwkJCXB1YmxpYyB2b2lkIGhhbmRsZUV2ZW50KGZpbmFsIEV2ZW50IGV2ZW50KSB7CisJCQkJZmlsdGVyZWRMaXN0LnNldEZpbHRlcih0ZXh0LmdldFRleHQoKSk7CisJCQl9CisJCX0pOworCQlpc29LZXlMZXZlbERlc2NyaXB0aW9uID0gbmV3IExhYmVsKHRoaXMsIFNXVC5OT05FKTsKKwkJaXNvS2V5TGV2ZWxEZXNjcmlwdGlvbi5zZXRUZXh0KCJMYWJlbCIpOworCQlGb3JtRGF0YSBmZF9pc29LZXlMZXZlbERlc2NyaXB0aW9uOworCQlmZF9pc29LZXlMZXZlbERlc2NyaXB0aW9uID0gbmV3IEZvcm1EYXRhKCk7CisJCWZkX2lzb0tleUxldmVsRGVzY3JpcHRpb24udG9wID0gbmV3IEZvcm1BdHRhY2htZW50KHRleHQsIDIsIFNXVC5UT1ApOworCQlmZF9pc29LZXlMZXZlbERlc2NyaXB0aW9uLnJpZ2h0ID0gbmV3IEZvcm1BdHRhY2htZW50KDI1LCAwKTsKKwkJZmRfaXNvS2V5TGV2ZWxEZXNjcmlwdGlvbi5sZWZ0ID0gbmV3IEZvcm1BdHRhY2htZW50KDAsIDApOworCQl0aGlzLmlzb0tleUxldmVsRGVzY3JpcHRpb24uc2V0TGF5b3V0RGF0YShmZF9pc29LZXlMZXZlbERlc2NyaXB0aW9uKTsKKworCQlmaWx0ZXJlZExpc3QgPSBuZXcgRmlsdGVyZWRMaXN0KHRoaXMsIFNXVC5CT1JERVIsIG51bGwsIGZhbHNlLCBmYWxzZSwKKwkJCQl0cnVlKTsKKwkJZmluYWwgRm9ybURhdGEgZmRfZmlsdGVyZWRMaXN0ID0gbmV3IEZvcm1EYXRhKCk7CisJCWZkX2ZpbHRlcmVkTGlzdC50b3AgPSBuZXcgRm9ybUF0dGFjaG1lbnQodGV4dCwgNSwgU1dULkRFRkFVTFQpOworCQlmZF9maWx0ZXJlZExpc3QuYm90dG9tID0gbmV3IEZvcm1BdHRhY2htZW50KDEwMCwgMCk7CisJCWZkX2ZpbHRlcmVkTGlzdC5sZWZ0ID0gbmV3IEZvcm1BdHRhY2htZW50KHRleHQsIDAsIFNXVC5MRUZUKTsKKwkJZmRfZmlsdGVyZWRMaXN0LnJpZ2h0ID0gbmV3IEZvcm1BdHRhY2htZW50KHRleHQsIDAsIFNXVC5SSUdIVCk7CisJCWZpbHRlcmVkTGlzdC5zZXRMYXlvdXREYXRhKGZkX2ZpbHRlcmVkTGlzdCk7CisJCWZpbHRlcmVkTGlzdC5hZGRTZWxlY3Rpb25MaXN0ZW5lcihuZXcgU2VsZWN0aW9uQWRhcHRlcigpIHsKKwkJCUBPdmVycmlkZQorCQkJcHVibGljIHZvaWQgd2lkZ2V0U2VsZWN0ZWQoZmluYWwgU2VsZWN0aW9uRXZlbnQgZSkgeworCQkJCWZpbmFsIE9iamVjdFtdIHNlbGVjdGVkID0gZmlsdGVyZWRMaXN0LmdldFNlbGVjdGlvbigpOworCQkJCS8vIEFueXRoaW5nIHNlbGVjdGVkPworCQkJCQorCQkJCWlmIChzZWxlY3RlZC5sZW5ndGggPT0gMSkgeworCQkJCQlmaW5hbCBTdHJpbmcgaXNvS2V5ID0gKFN0cmluZykgc2VsZWN0ZWRbMF07CisJCQkJCWZpcmVJU09LZXlQaWNrZWQoaXNvS2V5KTsKKwkJCQl9CisJCQl9CisKKwkJCUBPdmVycmlkZQorCQkJcHVibGljIHZvaWQgd2lkZ2V0RGVmYXVsdFNlbGVjdGVkKGZpbmFsIFNlbGVjdGlvbkV2ZW50IGUpIHsKKwkJCQl3aWRnZXRTZWxlY3RlZChlKTsKKwkJCX0KKwkJfSk7CisKKwkJZmlsdGVyZWRMaXN0LnNldElnbm9yZUNhc2UodHJ1ZSk7CisJCWZpbHRlcmVkTGlzdC5zZXRGaWx0ZXIoIiIpOworCQlmaWx0ZXJlZExpc3Quc2V0TGFiZWxQcm92aWRlcihuZXcgTGFiZWxQcm92aWRlcigpIHsKKwkJCUBPdmVycmlkZQorCQkJcHVibGljIFN0cmluZyBnZXRUZXh0KGZpbmFsIE9iamVjdCBlbGVtZW50KSB7CisJCQkJcmV0dXJuIGdldE5hbWUoKFN0cmluZykgZWxlbWVudCwgaXNvS2V5TGV2ZWwpOworCQkJfQorCQl9KTsKKwkJZmlsdGVyZWRMaXN0LnNldEVsZW1lbnRzKG5ldyBPYmplY3RbXSB7fSk7CisKKwkJcGFjaygpOworCX0gLy8gSVNPS2V5UGlja2VyCisKKwlwdWJsaWMgdm9pZCBzZXRJU09LZXlzKGZpbmFsIE9iamVjdFtdIGlzb0tleXMpIHsKKwkJZmlsdGVyZWRMaXN0LnNldEVsZW1lbnRzKGlzb0tleXMpOworCQl0aGlzLmdldERpc3BsYXkoKS5zeW5jRXhlYyhuZXcgUnVubmFibGUoKSB7CisJCQlwdWJsaWMgdm9pZCBydW4oKSB7CisJCQkJdGV4dC5zZXRUZXh0KCIiKTsKKwkJCX0KKwkJfSk7CisJfSAvLyBzZXRJU09LZXlzCisKKwlwdWJsaWMgdm9pZCBzZXRJU09LZXlMZXZlbERlc2NyaXB0aW9uKGZpbmFsIFN0cmluZyBpc29LZXlMZXZlbERlc2NyaXB0aW9uKSB7CisJCXRoaXMuaXNvS2V5TGV2ZWxEZXNjcmlwdGlvbi5zZXRUZXh0KGlzb0tleUxldmVsRGVzY3JpcHRpb24pOworCX0gLy8gc2V0SVNPS2V5TGV2ZWxEZXNjcmlwdGlvbgorCisJLyoqCisJICogQHJldHVybiB0aGUgaXNvIGtleSBsZXZlbAorCSAqLworCXB1YmxpYyBpbnQgZ2V0SVNPS2V5TGV2ZWwoKSB7CisJCXJldHVybiBpc29LZXlMZXZlbDsKKwl9CisKKwlwdWJsaWMgdm9pZCBzZXRJU09LZXlMZXZlbChmaW5hbCBpbnQgaXNvS2V5TGV2ZWwpIHsKKwkJdGhpcy5pc29LZXlMZXZlbCA9IGlzb0tleUxldmVsOworCX0gLy8gc2V0TGV2ZWwKKworCXByaXZhdGUgU3RyaW5nIGdldE5hbWUoZmluYWwgU3RyaW5nIGlzb0tleSwgZmluYWwgaW50IGxldmVsKSB7CisJCXJldHVybiBHZW9ncmFwaGljTmFtZXMuZ2V0TmFtZShpc29LZXksIGxldmVsKTsKKwl9IC8vIGdldE5hbWUKKworCXB1YmxpYyB2b2lkIGFkZElTT0tleVBpY2tlZExpc3RlbmVyKGZpbmFsIElTT0tleVBpY2tlZEV2ZW50TGlzdGVuZXIgbGlzdGVuZXIpIHsKKwkJbGlzdGVuZXJzLmFkZChsaXN0ZW5lcik7CisJfSAvLyBhZGRJU09LZXlQaWNrZWRMaXN0ZW5lcgorCisJcHVibGljIHZvaWQgcmVtb3ZlSVNPS2V5UGlja2VkTGlzdGVuZXIoCisJCQlmaW5hbCBJU09LZXlQaWNrZWRFdmVudExpc3RlbmVyIGxpc3RlbmVyKSB7CisJCWxpc3RlbmVycy5yZW1vdmUobGlzdGVuZXIpOworCX0gLy8gcmVtb3ZlSVNPS2V5UGlja2VkTGlzdGVuZXIKKworCXByaXZhdGUgdm9pZCBmaXJlSVNPS2V5UGlja2VkKGZpbmFsIFN0cmluZyBpc29LZXkpIHsKKwkJZmluYWwgSVNPS2V5UGlja2VkRXZlbnQgaXNvS2V5UGlja2VkRXZlbnQgPSBuZXcgSVNPS2V5UGlja2VkRXZlbnQodGhpcywKKwkJCQlpc29LZXkpOworCQlmb3IgKGZpbmFsIElTT0tleVBpY2tlZEV2ZW50TGlzdGVuZXIgbGlzdGVuZXIgOiBsaXN0ZW5lcnMpIHsKKwkJCWxpc3RlbmVyLmlzb0tleVBpY2tlZChpc29LZXlQaWNrZWRFdmVudCk7CisJCX0gLy8gZm9yIGVhY2ggSVNPS2V5UGlja2VkRXZlbnRMaXN0ZW5lcgorCX0KKwkKKwlwdWJsaWMgUG9pbnQgZ2V0UmVnaW9uTGlzdFNpemUoKSB7CisJCXJldHVybiBmaWx0ZXJlZExpc3QuZ2V0U2l6ZSgpOworCX0KKwkKKwlwdWJsaWMgUmVjdGFuZ2xlIGdldFJlZ2lvbkxpc3RCb3VuZHMoKSB7CisJCXJldHVybiBmaWx0ZXJlZExpc3QuZ2V0Qm91bmRzKCk7CisJfQorCQorCXB1YmxpYyB2b2lkIHNldFJlZ2lvbkxpc3RTaXplKGludCB3aWR0aCwgaW50IGhlaWdodCkgeworCQlmaWx0ZXJlZExpc3Quc2V0U2l6ZSh3aWR0aCwgaGVpZ2h0KTsKKwl9CisJCisJcHVibGljIHZvaWQgc2V0UmVnaW9uTGlzdEJvdW5kcyhpbnQgeDAsIGludCB5MCwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0KSB7CisJCWZpbHRlcmVkTGlzdC5zZXRCb3VuZHMoeDAseTAsd2lkdGgsIGhlaWdodCk7CisJfQorCQorfSAvLyBJU09LZXlQaWNrZXIKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS93aWRnZXRzL0lkZW50aWZpYWJsZVBpY2tlckRpYWxvZy5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3dpZGdldHMvSWRlbnRpZmlhYmxlUGlja2VyRGlhbG9nLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWY0YzU2NgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS93aWRnZXRzL0lkZW50aWZpYWJsZVBpY2tlckRpYWxvZy5qYXZhCkBAIC0wLDAgKzEsMjIyIEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0udWkud2lkZ2V0czsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAxMCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworCitpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklGaWxlOworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklGb2xkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3Q7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVJlc291cmNlOworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5Db3JlRXhjZXB0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uSWRlbnRpZmlhYmxlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udWkuVXRpbGl0eTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnVpLndpemFyZHMuTWVzc2FnZXM7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LlNXVDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLlNlbGVjdGlvbkV2ZW50OworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuU2VsZWN0aW9uTGlzdGVuZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5HcmlkRGF0YTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QubGF5b3V0LkdyaWRMYXlvdXQ7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQnV0dG9uOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5EaWFsb2c7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuRGlzcGxheTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5FdmVudDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5MYWJlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5MaXN0ZW5lcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5TaGVsbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5UYWJsZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5UYWJsZUl0ZW07CisKK3B1YmxpYyBjbGFzcyBJZGVudGlmaWFibGVQaWNrZXJEaWFsb2cgZXh0ZW5kcyBEaWFsb2cgeworCisJcHJpdmF0ZSBTdHJpbmcgdGl0bGU7CisJCisJLy9TdHJpbmcgcHJldkxvYyA9IG51bGw7CisJSVByb2plY3QgcHJvamVjdDsKKwkKKwkvLworCUNsYXNzIHJlc3RyaWN0Q2xhc3M7CisJYm9vbGVhbiBjYW5jZWxQcmVzc2VkID0gZmFsc2U7CisJcHJvdGVjdGVkIFNoZWxsIHNoZWxsOworCUNvbXBvc2l0ZSBtYWluQ29tcG9zaXRlOworCQorCQorCXByaXZhdGUgQXJyYXlMaXN0PElkZW50aWZpYWJsZT5wcm9qZWN0T2JqZWN0czsKKwkKKwlwcml2YXRlIElkZW50aWZpYWJsZSBzZWxlY3RlZE9iamVjdDsKKwkKKwlwdWJsaWMgSWRlbnRpZmlhYmxlUGlja2VyRGlhbG9nIChTaGVsbCBwYXJlbnQsIGludCBzdHlsZSwgU3RyaW5nIHRpdGxlLCBJUHJvamVjdCBwLCBDbGFzcyByZXN0cmljdENsYXNzKSB7CisJCXN1cGVyIChwYXJlbnQsIHN0eWxlKTsKKwkJLy9zZXRTaGVsbFN0eWxlKFNXVC5ESUFMT0dfVFJJTSB8IFNXVC5SRVNJWkUgfCBTV1QuTUFYIHwgU1dULkFQUExJQ0FUSU9OX01PREFMKTsKKwkJdGhpcy50aXRsZSA9IHRpdGxlOworCQkvL3RoaXMucHJldkxvYyA9IHByZXZMb2M7CisJCXRoaXMucHJvamVjdCA9IHA7CisJCXRoaXMucmVzdHJpY3RDbGFzcyA9IHJlc3RyaWN0Q2xhc3M7CisJfQorCQorCS8qKgorCSAqIG9wZW4gdGhlIG1vZGFsIHdpbmRvdy4gCisJICogQHJldHVybiBUaGUgU3RyaW5nW10gd2l0aCByZXN1bHRzLCBvciBudWxsIGlmIGNhbmNlbCB3YXMgcHJlc3NlZC4KKwkgKi8KKwlwdWJsaWMgT2JqZWN0IG9wZW4gKCkgeworCQlTaGVsbCBwYXJlbnQgPSBnZXRQYXJlbnQoKTsKKwkJc2hlbGwgPSBuZXcgU2hlbGwocGFyZW50LCBTV1QuRElBTE9HX1RSSU0gfCBTV1QuTUFYIHwgU1dULkFQUExJQ0FUSU9OX01PREFMKTsKKwkJCQorCQlHcmlkTGF5b3V0IGdsMSA9IG5ldyBHcmlkTGF5b3V0KCk7CisJCWdsMS5udW1Db2x1bW5zID0gMTsKKwkJc2hlbGwuc2V0TGF5b3V0KGdsMSk7CisJCXNoZWxsLnNldFRleHQodGl0bGUpOworCQkKKwkJbWFpbkNvbXBvc2l0ZSA9IG5ldyBDb21wb3NpdGUoc2hlbGwsIFNXVC5NQVgpOworCQkvL21haW5Db21wb3NpdGUgPSBuZXcgQ29tcG9zaXRlKHNoZWxsLCBTV1QuUkVTSVpFIHwgU1dULk1BWCk7CisJCQorCQkKKwkJc2hlbGwuYWRkTGlzdGVuZXIoU1dULlJlc2l6ZSwgbmV3IExpc3RlbmVyKCkgeworCQkgICAgICBwdWJsaWMgdm9pZCBoYW5kbGVFdmVudChFdmVudCBlKSB7CQkgICAgICAgIAorCQkgICAgCSAgc2hlbGwucGFjaygpOyAvLyByZXNldHMgdGhlIHNpemUgYmFjayB0byB0aGUgb3JpZ2luYWwgISEKKwkJICAgICAgfQorCQkgICAgfSk7CisJCQorCQlHcmlkTGF5b3V0IG1haW5MYXlvdXQgPSBuZXcgR3JpZExheW91dCgpOworCQltYWluTGF5b3V0Lm51bUNvbHVtbnMgPSAyOworCQkKKwkJbWFpbkNvbXBvc2l0ZS5zZXRMYXlvdXQobWFpbkxheW91dCk7CisJCQorCQlMYWJlbCBsYWIxID0gbmV3IExhYmVsKG1haW5Db21wb3NpdGUsIFNXVC5OT05FKTsKKwkJbGFiMS5zZXRUZXh0KE1lc3NhZ2VzLmdldFN0cmluZygiSVAuT0JKRUNUUyIpKTsKKwkJR3JpZERhdGEgZ2QgPSBuZXcgR3JpZERhdGEoKTsKKwkJZ2QuaG9yaXpvbnRhbFNwYW4gPSAyOworCQlsYWIxLnNldExheW91dERhdGEoZ2QpOworCQkJCisJCWZpbmFsIFRhYmxlIG9iamVjdFRhYmxlID0gbmV3IFRhYmxlKG1haW5Db21wb3NpdGUsIFNXVC5OT05FKTsKKwkJR3JpZERhdGEgZ2QzID0gbmV3IEdyaWREYXRhKCk7CisJCWdkMy5ob3Jpem9udGFsU3BhbiA9IDI7CisJCWdkMy5ncmFiRXhjZXNzSG9yaXpvbnRhbFNwYWNlID0gdHJ1ZTsKKwkJZ2QzLmhvcml6b250YWxBbGlnbm1lbnQgPSBTV1QuRklMTDsKKwkJZ2QzLmdyYWJFeGNlc3NWZXJ0aWNhbFNwYWNlID0gdHJ1ZTsKKwkJZ2QzLnZlcnRpY2FsQWxpZ25tZW50ID0gU1dULkZJTEw7CisJCW9iamVjdFRhYmxlLnNldExheW91dERhdGEoZ2QzKTsKKwkJcHJvamVjdE9iamVjdHMgPSBnZXRQcm9qZWN0T2JqZWN0cyhudWxsKTsKKwkJZm9yKElkZW50aWZpYWJsZSBpZDpwcm9qZWN0T2JqZWN0cykgeworCQkJVGFibGVJdGVtIG5ld1Jvdz0gbmV3IFRhYmxlSXRlbShvYmplY3RUYWJsZSwgU1dULk5PTkUpOworCQkJbmV3Um93LnNldFRleHQoaWQuZ2V0VVJJKCkubGFzdFNlZ21lbnQoKSk7CisJCX0KKwkJCQkJCisJCQorCQlCdXR0b24gY2FuY2VsQnV0dG9uID0gbmV3IEJ1dHRvbihtYWluQ29tcG9zaXRlLCBTV1QuTk9ORSk7CisJCUdyaWREYXRhIGNnID0gbmV3IEdyaWREYXRhKCk7CisJCWNhbmNlbEJ1dHRvbi5zZXRUZXh0KE1lc3NhZ2VzLmdldFN0cmluZygiTkxvY1dpekNhbmNlbCIpKTsKKwkJY2FuY2VsQnV0dG9uLnNldExheW91dERhdGEoY2cpOworCQorCQlmaW5hbCBCdXR0b24gb2theUJ1dHRvbiA9IG5ldyBCdXR0b24obWFpbkNvbXBvc2l0ZSwgU1dULk5PTkUpOworCQlHcmlkRGF0YSBva2cgPSBuZXcgR3JpZERhdGEoKTsKKwkJb2theUJ1dHRvbi5zZXRUZXh0KE1lc3NhZ2VzLmdldFN0cmluZygiTkxvY1dpek9rIikpOworCQlva2F5QnV0dG9uLnNldExheW91dERhdGEob2tnKTsKKwkJb2theUJ1dHRvbi5zZXRFbmFibGVkKGZhbHNlKTsKKwkKKwkJb2JqZWN0VGFibGUuYWRkU2VsZWN0aW9uTGlzdGVuZXIobmV3IFNlbGVjdGlvbkxpc3RlbmVyKCkgeworCQkJCisJCQlwdWJsaWMgdm9pZCB3aWRnZXRTZWxlY3RlZChTZWxlY3Rpb25FdmVudCBlKSB7CisJCQkJaW50IGluZGV4ID0gb2JqZWN0VGFibGUuZ2V0U2VsZWN0aW9uSW5kZXgoKTsKKwkJCQlzZWxlY3RlZE9iamVjdCA9IHByb2plY3RPYmplY3RzLmdldChpbmRleCk7CisJCQkJb2theUJ1dHRvbi5zZXRFbmFibGVkKHRydWUpOworCQkJfQorCQkJCisJCQlwdWJsaWMgdm9pZCB3aWRnZXREZWZhdWx0U2VsZWN0ZWQoU2VsZWN0aW9uRXZlbnQgZSkgeworCQkJCW9rYXlCdXR0b24uc2V0RW5hYmxlZChmYWxzZSk7CisJCQl9CisJCX0pOworCisJCS8vIGdldFNoZWxsKCkucGFjaygpOworCQlzaGVsbC5wYWNrKCk7CisJCXNoZWxsLm9wZW4oKTsKKwkJCisJCQorCQlva2F5QnV0dG9uLmFkZFNlbGVjdGlvbkxpc3RlbmVyKCBuZXcgU2VsZWN0aW9uTGlzdGVuZXIoKSB7CisJCQkKKwkJCXB1YmxpYyB2b2lkIHdpZGdldFNlbGVjdGVkKFNlbGVjdGlvbkV2ZW50IGFyZzApIHsKKwkJCQljYW5jZWxQcmVzc2VkPWZhbHNlOworCQkJCXNoZWxsLmRpc3Bvc2UoKTsKKwkJCX0KKwkJCQorCQkJcHVibGljIHZvaWQgd2lkZ2V0RGVmYXVsdFNlbGVjdGVkKFNlbGVjdGlvbkV2ZW50IGFyZzApIHsKKwkJCQkvLyBUT0RPIEF1dG8tZ2VuZXJhdGVkIG1ldGhvZCBzdHViCisJCQkJCisJCQl9CisJCX0pOworCQkKKwkJY2FuY2VsQnV0dG9uLmFkZFNlbGVjdGlvbkxpc3RlbmVyKCBuZXcgU2VsZWN0aW9uTGlzdGVuZXIoKSB7CisJCQkKKwkJCXB1YmxpYyB2b2lkIHdpZGdldFNlbGVjdGVkKFNlbGVjdGlvbkV2ZW50IGFyZzApIHsKKwkJCQljYW5jZWxQcmVzc2VkPXRydWU7CisJCQkJc2hlbGwuZGlzcG9zZSgpOworCQkJfQorCQkJCisJCQlwdWJsaWMgdm9pZCB3aWRnZXREZWZhdWx0U2VsZWN0ZWQoU2VsZWN0aW9uRXZlbnQgYXJnMCkgeworCQkJCS8vIFRPRE8gQXV0by1nZW5lcmF0ZWQgbWV0aG9kIHN0dWIKKwkJCQkKKwkJCX0KKwkJfSk7CisJCQorCQkKKwkJRGlzcGxheSBkaXNwbGF5ID0gcGFyZW50LmdldERpc3BsYXkoKTsKKwkJd2hpbGUgKCFzaGVsbC5pc0Rpc3Bvc2VkKCkpIHsKKwkJaWYgKCFkaXNwbGF5LnJlYWRBbmREaXNwYXRjaCgpKSBkaXNwbGF5LnNsZWVwKCk7CisJCX0KKwkJaWYoY2FuY2VsUHJlc3NlZCkgcmV0dXJuIG51bGw7CisJCU9iamVjdCByZXQgPSBzZWxlY3RlZE9iamVjdDsKKwkJcmV0dXJuIHJldDsKKwl9Ly8gb3BlbigpCQorCisJCisJLyoqCisJICogVHJhdmVyc2UgdGhlIHByb2plY3QgYW5kIHJldHJpZXZlIGFsbCBvYmplY3RzIHJlc3RyaWN0ZWQgdG8gdGhlIHNwZWNpZmllZCBjbGFzcworCSAqIAorCSAqIEBwYXJhbSBmb2xkZXIgRm9sZGVyLCBvciBudWxsIGZvciBwcm9qZWN0IHJvb3QuCisJICogQHJldHVybiBBcnJheUxpc3Q8T2JqZWN0PiBtYXRjaGluZ09iamVjdHMKKwkgKi8KKwlwcml2YXRlIEFycmF5TGlzdDxJZGVudGlmaWFibGU+IGdldFByb2plY3RPYmplY3RzKElGb2xkZXIgZm9sZGVyKSB7CisJCUFycmF5TGlzdDxJZGVudGlmaWFibGU+cmVzdWx0ID0gbmV3IEFycmF5TGlzdDxJZGVudGlmaWFibGU+KCk7CisJCXRyeSB7CisJCQkKKwkJCUlSZXNvdXJjZSBbXSByZXNvdXJjZXMgPSBudWxsOworCQkJaWYoZm9sZGVyID09IG51bGwpIHJlc291cmNlcyA9IHByb2plY3QubWVtYmVycygpOworCQkJZWxzZSByZXNvdXJjZXMgPSBmb2xkZXIubWVtYmVycygpOworCQkJCisJCQlmb3IoSVJlc291cmNlIHJlOnJlc291cmNlcykgeworCQkJCWlmKHJlIGluc3RhbmNlb2YgSUZvbGRlciAmJiAhcmUuZ2V0TmFtZSgpLmVxdWFscygiUmVjb3JkZWQgU2ltdWxhdGlvbnMiKSkKKwkJCQkJcmVzdWx0LmFkZEFsbChnZXRQcm9qZWN0T2JqZWN0cygoSUZvbGRlcikgcmUpKTsKKwkJCQllbHNlIGlmKHJlIGluc3RhbmNlb2YgSUZpbGUgJiYgIXJlLmdldFJlc291cmNlQXR0cmlidXRlcygpLmlzSGlkZGVuKCkgJiYgIXJlLmdldE5hbWUoKS5zdGFydHNXaXRoKCIuIikpeworCQkJCQkvLyBSZXRyaWV2ZSBpZGVudGlmaWFibGUKKwkJCQkJCisJCQkJCUlkZW50aWZpYWJsZSBpZGVudCA9IFV0aWxpdHkuZ2V0SWRlbnRpZmlhYmxlSWdub3JlRXhjZXB0aW9uKChJRmlsZSlyZSk7CisJCQkJCWlmKGlkZW50ICE9IG51bGwgJiYgaXNDbGFzcyhpZGVudC5nZXRDbGFzcygpLCB0aGlzLnJlc3RyaWN0Q2xhc3MpKQorCQkJCQkJcmVzdWx0LmFkZChpZGVudCk7CisJCQkJfQorCQkJfQorCQkKKwkJfSBjYXRjaCAoQ29yZUV4Y2VwdGlvbiBlKSB7IAorCQkJZS5wcmludFN0YWNrVHJhY2UoKTsKKwkJfQorCQlyZXR1cm4gcmVzdWx0OworCX0KKwkKKwlwcml2YXRlIGJvb2xlYW4gaXNDbGFzcyhDbGFzcyBjLCBDbGFzcyB0YXJnZXQpIHsKKwkJaWYodGFyZ2V0LmVxdWFscyhjKSkgcmV0dXJuIHRydWU7CisJCUNsYXNzIHN1cGVyQyA9IGMuZ2V0U3VwZXJjbGFzcygpOworCQlpZihzdXBlckMgPT0gbnVsbCkgcmV0dXJuIGZhbHNlOworCQlyZXR1cm4gaXNDbGFzcyhzdXBlckMsIHRhcmdldCk7CisJfQorfQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3dpZGdldHMvTG9jYXRpb25QaWNrZXJEaWFsb2cuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS93aWRnZXRzL0xvY2F0aW9uUGlja2VyRGlhbG9nLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmI0MTFlZAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS93aWRnZXRzL0xvY2F0aW9uUGlja2VyRGlhbG9nLmphdmEKQEAgLTAsMCArMSw0NDQgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS51aS53aWRnZXRzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDEwIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVByb2dyZXNzTW9uaXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuVVJJOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmRpYWxvZ3MuUHJvZ3Jlc3NNb25pdG9yRGlhbG9nOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLm9wZXJhdGlvbi5JUnVubmFibGVDb250ZXh0OworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLm9wZXJhdGlvbi5JUnVubmFibGVXaXRoUHJvZ3Jlc3M7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS5HZW9ncmFwaGljTWFwcGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkuR2VvZ3JhcGhpY05hbWVzOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuTG9jYXRpb25VdGlsaXR5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udWkuQWN0aXZhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udWkud2l6YXJkcy5NZXNzYWdlczsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuU1dUOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuU2VsZWN0aW9uRXZlbnQ7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5TZWxlY3Rpb25MaXN0ZW5lcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZ3JhcGhpY3MuUG9pbnQ7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5GaWxsTGF5b3V0OworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5sYXlvdXQuR3JpZERhdGE7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5HcmlkTGF5b3V0OworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkJ1dHRvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuRGlhbG9nOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkRpc3BsYXk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuRXZlbnQ7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuTGFiZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuTGlzdGVuZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuU2hlbGw7CisKK3B1YmxpYyBjbGFzcyBMb2NhdGlvblBpY2tlckRpYWxvZyBleHRlbmRzIERpYWxvZyB7CisKKwlwcml2YXRlIFN0cmluZyB0aXRsZTsKKwkKKwlwcml2YXRlIElTT0tleVBpY2tlciBpc29LZXlQaWNrZXIyOworCXByaXZhdGUgSVNPS2V5UGlja2VyIGlzb0tleVBpY2tlcjE7CisJcHJpdmF0ZSBJU09LZXlQaWNrZXIgaXNvS2V5UGlja2VyMDsKKwlwcml2YXRlIElTT0tleVBpY2tlciBpc29LZXlQaWNrZXIzOworCVN0cmluZyBpc29LZXkgPSAiIjsgLy8kTk9OLU5MUy0xJAorCVVSSSB0YXJnZXRVUkkgPSBudWxsOworCVN0cmluZyB0ZW1wSVNPS2V5ID0gbnVsbDsKKwkvL1N0cmluZyBwcmV2TG9jID0gbnVsbDsKKwlJUHJvamVjdCBwcm9qZWN0OworCXByaXZhdGUgYm9vbGVhbiBzZWxlY3RHbG9iYWwgPSB0cnVlOworCQorCWJvb2xlYW4gY2FuY2VsUHJlc3NlZCA9IGZhbHNlOworCXByb3RlY3RlZCBTaGVsbCBzaGVsbDsKKwlDb21wb3NpdGUgbWFpbkNvbXBvc2l0ZTsKKwlwdWJsaWMgTG9jYXRpb25QaWNrZXJEaWFsb2cgKFNoZWxsIHBhcmVudCwgaW50IHN0eWxlLCBTdHJpbmcgdGl0bGUsIFN0cmluZyBwcmV2TG9jLCBJUHJvamVjdCBwKSB7CisJCXN1cGVyIChwYXJlbnQsIHN0eWxlKTsKKwkJLy9zZXRTaGVsbFN0eWxlKFNXVC5ESUFMT0dfVFJJTSB8IFNXVC5SRVNJWkUgfCBTV1QuTUFYIHwgU1dULkFQUExJQ0FUSU9OX01PREFMKTsKKwkJdGhpcy50aXRsZSA9IHRpdGxlOworCQkvL3RoaXMucHJldkxvYyA9IHByZXZMb2M7CisJCXRoaXMucHJvamVjdCA9IHA7CisJCQorCX0KKwkKKwkvKioKKwkgKiBvcGVuIHRoZSBtb2RhbCB3aW5kb3cuIAorCSAqIEByZXR1cm4gVGhlIFN0cmluZ1tdIHdpdGggcmVzdWx0cywgb3IgbnVsbCBpZiBjYW5jZWwgd2FzIHByZXNzZWQuCisJICovCisJcHVibGljIE9iamVjdCBbXSAgb3BlbiAoKSB7CisJCVNoZWxsIHBhcmVudCA9IGdldFBhcmVudCgpOworCQlzaGVsbCA9IG5ldyBTaGVsbChwYXJlbnQsIFNXVC5ESUFMT0dfVFJJTSB8IFNXVC5NQVggfCBTV1QuQVBQTElDQVRJT05fTU9EQUwpOworCQkvL3NoZWxsID0gbmV3IFNoZWxsKHBhcmVudCwgU1dULkRJQUxPR19UUklNIHwgU1dULlJFU0laRSB8IFNXVC5NQVggfCBTV1QuQVBQTElDQVRJT05fTU9EQUwpOworCQkKKwkJCisJCWZpbmFsIFBvaW50IG1pblMgPSBuZXcgUG9pbnQoNjc3LCA0MTApOworCQlzaGVsbC5zZXRNaW5pbXVtU2l6ZShtaW5TKTsKKwkKKwkJR3JpZExheW91dCBnbDEgPSBuZXcgR3JpZExheW91dCgpOworCQlnbDEubnVtQ29sdW1ucyA9IDE7CisJCXNoZWxsLnNldExheW91dChnbDEpOworCQlzaGVsbC5zZXRUZXh0KHRpdGxlKTsKKwkJCisJCW1haW5Db21wb3NpdGUgPSBuZXcgQ29tcG9zaXRlKHNoZWxsLCBTV1QuTUFYKTsKKwkJLy9tYWluQ29tcG9zaXRlID0gbmV3IENvbXBvc2l0ZShzaGVsbCwgU1dULlJFU0laRSB8IFNXVC5NQVgpOworCQkKKwkJCisJCXNoZWxsLmFkZExpc3RlbmVyKFNXVC5SZXNpemUsIG5ldyBMaXN0ZW5lcigpIHsKKwkJICAgICAgcHVibGljIHZvaWQgaGFuZGxlRXZlbnQoRXZlbnQgZSkgeworCQkgICAgICAgIAorLy8JCSAgICAJICBSZWN0YW5nbGUgYiA9IHNoZWxsLmdldEJvdW5kcygpOworLy8JCSAgICAJICBtYWluQ29tcG9zaXRlLnNldEJvdW5kcyhiKTsKKwkJICAgIAkvLyAgQWN0aXZhdG9yLmxvZ0luZm9ybWF0aW9uKCIqKiogIFNIRUxMICoqKiBib3VuZHMgaD0gIitiLmhlaWdodCsiICB3PSAiK2Iud2lkdGgrIiA6IHgwID0gIitiLngrIiB5MCA9ICIrYi55KTsKKwkJICAgIAkgIAorLy8JCSAgICAJICBpbnQgdyA9IGIud2lkdGgvMzsKKy8vCQkgICAgCSAgaW50IGggPSBiLmhlaWdodC80OworLy8JCSAgICAJICBSZWN0YW5nbGUgcjAgPSBpc29LZXlQaWNrZXIwLmdldFJlZ2lvbkxpc3RCb3VuZHMoKTsKKy8vCQkgICAgCSAgaW50IHgwID0gcjAueDsKKy8vCQkgICAgCSAgaW50IHkwID0gcjAueTsKKy8vCQkgICAgCSAgCisvLwkJICAgIAkgIHJlU2V0S2V5UGlja2VyU2l6ZSh3LGgpOworCQkgICAgCSAgc2hlbGwucGFjaygpOyAvLyByZXNldHMgdGhlIHNpemUgYmFjayB0byB0aGUgb3JpZ2luYWwgISEKKwkJICAgIAkgIAorLy8JCSAgICAJICBBY3RpdmF0b3IubG9nSW5mb3JtYXRpb24oIioqKiBib3VuZHMgaD0gIitiLmhlaWdodCsiICB3PSAiK2Iud2lkdGgrIiA6IHgwID0gIit4MCsiIHkwID0gIit5MCk7CisvLwkJICAgIAkgIFJlY3RhbmdsZSBiMCA9IGlzb0tleVBpY2tlcjAuZ2V0UmVnaW9uTGlzdEJvdW5kcygpOworLy8JCSAgICAJICBBY3RpdmF0b3IubG9nSW5mb3JtYXRpb24oImtleXBpY2tlcjAgaD0gIitiMC5oZWlnaHQrIiAgdz0gIitiMC53aWR0aCk7CisvLwkJICAgIAkgIFJlY3RhbmdsZSBiMSA9IGlzb0tleVBpY2tlcjEuZ2V0UmVnaW9uTGlzdEJvdW5kcygpOworLy8JCSAgICAJICBBY3RpdmF0b3IubG9nSW5mb3JtYXRpb24oImtleXBpY2tlcjEgaD0gIitiMS5oZWlnaHQrIiAgdz0gIitiMS53aWR0aCk7CisvLwkJICAgIAkgIFJlY3RhbmdsZSBiMiA9IGlzb0tleVBpY2tlcjIuZ2V0UmVnaW9uTGlzdEJvdW5kcygpOworLy8JCSAgICAJICBBY3RpdmF0b3IubG9nSW5mb3JtYXRpb24oImtleXBpY2tlcjIgaD0gIitiMi5oZWlnaHQrIiAgdz0gIitiMi53aWR0aCk7CisvLwkJICAgIAkgIFJlY3RhbmdsZSBiMyA9IGlzb0tleVBpY2tlcjMuZ2V0UmVnaW9uTGlzdEJvdW5kcygpOworLy8JCSAgICAJICBBY3RpdmF0b3IubG9nSW5mb3JtYXRpb24oImtleXBpY2tlcjMgaD0gIitiMy5oZWlnaHQrIiAgdz0gIitiMy53aWR0aCk7CisJCSAgICAgIH0KKwkJICAgIH0pOworCQkKKwkJCisJCSAKKwkJR3JpZExheW91dCBtYWluTGF5b3V0ID0gbmV3IEdyaWRMYXlvdXQoKTsKKwkJbWFpbkxheW91dC5udW1Db2x1bW5zID0gMjsKKwkJbWFpbkxheW91dC5tYWtlQ29sdW1uc0VxdWFsV2lkdGggPSB0cnVlOworCQkKKwkJbWFpbkNvbXBvc2l0ZS5zZXRMYXlvdXQobWFpbkxheW91dCk7CisJCWZpbmFsIEdyaWREYXRhIGdyaWREYXRhID0gbmV3IEdyaWREYXRhKEdyaWREYXRhLkZJTEwsIEdyaWREYXRhLkZJTEwsIHRydWUsIGZhbHNlKTsKKwkJLy9maW5hbCBHcmlkRGF0YSBncmlkRGF0YSA9IG5ldyBHcmlkRGF0YShTV1QuQ0VOVEVSKTsKKwkJZ3JpZERhdGEuaGVpZ2h0SGludCA9IDM3ODsKKwkJZ3JpZERhdGEud2lkdGhIaW50ID0gNjY3OworCisJCW1haW5Db21wb3NpdGUuc2V0TGF5b3V0RGF0YShncmlkRGF0YSk7CisJCQorCQkvLyBSYWRpbyBidXR0b25zCisJCUNvbXBvc2l0ZSByYWRpb0NvbXBvc2l0ZSA9IG5ldyBDb21wb3NpdGUobWFpbkNvbXBvc2l0ZSwgU1dULkJPUkRFUik7CisJICAgIEZpbGxMYXlvdXQgZmlsbExheW91dCA9IG5ldyBGaWxsTGF5b3V0KCk7CisJICAgIGZpbGxMYXlvdXQudHlwZSA9IFNXVC5IT1JJWk9OVEFMOworCSAgICByYWRpb0NvbXBvc2l0ZS5zZXRMYXlvdXQoZmlsbExheW91dCk7CisJICAgIAorCSAgICBmaW5hbCBCdXR0b24gW10gcmFkaW9CdXR0b25zID0gbmV3IEJ1dHRvblsyXTsKKwkgICAgcmFkaW9CdXR0b25zWzBdID0gbmV3IEJ1dHRvbihyYWRpb0NvbXBvc2l0ZSwgU1dULlJBRElPKTsKKwkgICAgcmFkaW9CdXR0b25zWzBdLnNldFNlbGVjdGlvbih0cnVlKTsKKwkgICAgcmFkaW9CdXR0b25zWzBdLnNldFRleHQoTWVzc2FnZXMuZ2V0U3RyaW5nKCJOTG9jUGlja2VyV2l6Lmdsb2JhbCIpKTsvLyROT04tTkxTLTEkCisJICAgIAorCSAgICByYWRpb0J1dHRvbnNbMV0gPSBuZXcgQnV0dG9uKHJhZGlvQ29tcG9zaXRlLCBTV1QuUkFESU8pOworCSAgICByYWRpb0J1dHRvbnNbMV0uc2V0VGV4dChNZXNzYWdlcy5nZXRTdHJpbmcoIk5Mb2NQaWNrZXJXaXouaW5wcm9qZWN0IikpOy8vJE5PTi1OTFMtMSQKKwkgICAgCSAgICAKKwkgICAgTGlzdGVuZXIgbGlzdGVuZXIgPSBuZXcgTGlzdGVuZXIoKSB7CisJICAgICAgICBwdWJsaWMgdm9pZCBoYW5kbGVFdmVudChFdmVudCBldmVudCkgeworCSAgICAgICAgICBpZiAoZXZlbnQud2lkZ2V0ID09IHJhZGlvQnV0dG9uc1swXSkgeworCSAgICAgICAgCSAgaWYocmFkaW9CdXR0b25zWzBdLmdldFNlbGVjdGlvbigpKSB7CisJICAgICAgICAJCSAgc2VsZWN0R2xvYmFsID0gdHJ1ZTsKKwkgICAgICAgIAkJICByZWluaXQoKTsKKwkgICAgICAgIAkgIH0gZWxzZSB7CisJICAgICAgICAJCSAgc2VsZWN0R2xvYmFsID0gZmFsc2U7CisJICAgICAgICAJCSAgcmVpbml0KCk7CisJICAgICAgICAJICB9CisJICAgICAgICAgIH0KKwkgICAgICAgIH0KKwkgICAgfTsKKwkgICAgcmFkaW9CdXR0b25zWzBdLmFkZExpc3RlbmVyKFNXVC5TZWxlY3Rpb24sbGlzdGVuZXIpOworCSAgICAKKwkgICAgR3JpZERhdGEgZ2RfcmFkaW8gPSBuZXcgR3JpZERhdGEoU1dULkZJTEwsIFNXVC5DRU5URVIsIHRydWUsIGZhbHNlKTsKKwkgICAgZ2RfcmFkaW8uaG9yaXpvbnRhbFNwYW4gPSAyOworCSAgICByYWRpb0NvbXBvc2l0ZS5zZXRMYXlvdXREYXRhKGdkX3JhZGlvKTsKKwkJCisJICAgIExvY2F0aW9uVXRpbGl0eS5yZXNldCgpOworCSAgICAvLyBMb2NhdGlvbiBwaWNrZXIKKwkJLy8gSVNPIEtleQorCQlmaW5hbCBMYWJlbCBpc29LZXlMYWJlbCA9IG5ldyBMYWJlbChtYWluQ29tcG9zaXRlLCBTV1QuTk9ORSk7CisJCWlzb0tleUxhYmVsLnNldFRleHQoTWVzc2FnZXMuZ2V0U3RyaW5nKCJOTG9jV2l6SVNPSyIpKTsgLy8kTk9OLU5MUy0xJAorCQlmaW5hbCBHcmlkRGF0YSBnZF9pc29LZXlMYWJlbCA9IG5ldyBHcmlkRGF0YShTV1QuRklMTCwgU1dULkNFTlRFUiwgdHJ1ZSwgZmFsc2UpOworCQlpc29LZXlMYWJlbC5zZXRMYXlvdXREYXRhKGdkX2lzb0tleUxhYmVsKTsKKwkJCisJCWZpbmFsIExhYmVsIGlzb2tleVZhbHVlTGFiZWwgPSBuZXcgTGFiZWwobWFpbkNvbXBvc2l0ZSwgU1dULk5PTkUpOworCQlpc29rZXlWYWx1ZUxhYmVsLnNldFRleHQoaXNvS2V5KTsKKworCQlmaW5hbCBHcmlkRGF0YSBnZF9pc29LZXlMYWJlbFZhbHVlID0gbmV3IEdyaWREYXRhKFNXVC5GSUxMLCBTV1QuQ0VOVEVSLCB0cnVlLCBmYWxzZSk7CisJCWlzb2tleVZhbHVlTGFiZWwuc2V0TGF5b3V0RGF0YShnZF9pc29LZXlMYWJlbFZhbHVlKTsKKwkJCisJCQorCQkvLyBJU09LZXlQaWNrZXIgMAorCQlpc29LZXlQaWNrZXIwID0gbmV3IElTT0tleVBpY2tlcihtYWluQ29tcG9zaXRlLCBTV1QuTk9ORSwgMCk7CisJCWlzb0tleVBpY2tlcjAuc2V0SVNPS2V5TGV2ZWwoMCk7CisJCWlzb0tleVBpY2tlcjAuc2V0SVNPS2V5TGV2ZWxEZXNjcmlwdGlvbihNZXNzYWdlcy5nZXRTdHJpbmcoIk5Mb2NXaXpDTlRSWSIpKTsKKwkJaXNvS2V5UGlja2VyMC5hZGRJU09LZXlQaWNrZWRMaXN0ZW5lcihuZXcgSVNPS2V5UGlja2VkRXZlbnRMaXN0ZW5lcigpIHsKKwkJCXB1YmxpYyB2b2lkIGlzb0tleVBpY2tlZChmaW5hbCBJU09LZXlQaWNrZWRFdmVudCBpa3BlKSB7CisJCQkJT2JqZWN0W10gaXNvS2V5cyA9IG51bGw7CisJCQkJCWlmKHNlbGVjdEdsb2JhbCkgaXNvS2V5cz0gR2VvZ3JhcGhpY05hbWVzLmdldFN1YklTT0tleXMoCisJCQkJCQlHZW9ncmFwaGljTmFtZXMuZ2V0QWxwaGEyKGlrcGUuZ2V0SXNvS2V5KCkpLAorCQkJCQkJaXNvS2V5UGlja2VyMS5nZXRJU09LZXlMZXZlbCgpKTsKKwkJCQkJZWxzZSBpc29LZXlzID0gTG9jYXRpb25VdGlsaXR5LmdldEtleXMocHJvamVjdCwgaXNvS2V5UGlja2VyMS5nZXRJU09LZXlMZXZlbCgpLCBpa3BlLmdldElzb0tleSgpKS50b0FycmF5KCk7CisJCQkJaXNvS2V5UGlja2VyMS5zZXRJU09LZXlzKGlzb0tleXMpOworCQkJCWlzb0tleVBpY2tlcjIuc2V0SVNPS2V5cyhuZXcgT2JqZWN0W10ge30pOworCQkJCWlzb0tleVBpY2tlcjMuc2V0SVNPS2V5cyhuZXcgT2JqZWN0W10ge30pOworCQkJCWlzb0tleSA9IGlrcGUuZ2V0SXNvS2V5KCk7CisJCQkJaWYoIXNlbGVjdEdsb2JhbCkgdGFyZ2V0VVJJID0gTG9jYXRpb25VdGlsaXR5LmdldFVSSUZyb21JU09LZXkoaXNvS2V5KTsKKwkJCQl0ZW1wSVNPS2V5ID0gaXNvS2V5OworCQkJCWlzb2tleVZhbHVlTGFiZWwuc2V0VGV4dChpc29LZXkpOworCQkJfQorCQl9KTsKKwkJCisJCS8vIElTT0tleVBpY2tlciAxCisJCWlzb0tleVBpY2tlcjEgPSBuZXcgSVNPS2V5UGlja2VyKG1haW5Db21wb3NpdGUsIFNXVC5OT05FLCAxKTsKKwkJaXNvS2V5UGlja2VyMS5zZXRJU09LZXlMZXZlbERlc2NyaXB0aW9uKE1lc3NhZ2VzCisJCQkJLmdldFN0cmluZygiTkxvY1dpekwxIikpOworCQlpc29LZXlQaWNrZXIxLmFkZElTT0tleVBpY2tlZExpc3RlbmVyKG5ldyBJU09LZXlQaWNrZWRFdmVudExpc3RlbmVyKCkgeworCQkJcHVibGljIHZvaWQgaXNvS2V5UGlja2VkKGZpbmFsIElTT0tleVBpY2tlZEV2ZW50IGlrcGUpIHsKKwkJCQlPYmplY3RbXSBpc29LZXlzID0gbnVsbDsKKwkJCQlpZihzZWxlY3RHbG9iYWwpIGlzb0tleXMgPSBHZW9ncmFwaGljTmFtZXMuZ2V0U3ViSVNPS2V5cyhpa3BlCisJCQkJCQkuZ2V0SXNvS2V5KCksIGlzb0tleVBpY2tlcjIuZ2V0SVNPS2V5TGV2ZWwoKSk7CisJCQkJZWxzZSBpc29LZXlzID0gTG9jYXRpb25VdGlsaXR5LmdldEtleXMocHJvamVjdCwgaXNvS2V5UGlja2VyMi5nZXRJU09LZXlMZXZlbCgpLCBpa3BlLmdldElzb0tleSgpKS50b0FycmF5KCk7CisJCQkJCisJCQkJaXNvS2V5UGlja2VyMi5zZXRJU09LZXlzKGlzb0tleXMpOworCQkJCWlzb0tleSA9IGlrcGUuZ2V0SXNvS2V5KCk7CisJCQkJaWYoIXNlbGVjdEdsb2JhbCkgdGFyZ2V0VVJJID0gTG9jYXRpb25VdGlsaXR5LmdldFVSSUZyb21JU09LZXkoaXNvS2V5KTsKKwkJCQl0ZW1wSVNPS2V5ID0gdGVtcElTT0tleSA9PSBudWxsID8gaXNvS2V5IDogdGVtcElTT0tleTsKKwkJCQkvLyBXZXJlIHRoZXJlIGFueSBJU08ga2V5cyB0byBzZXQ/CisJCQkJaWYgKGlzb0tleXMubGVuZ3RoID09IDApIHsKKwkJCQkJLy8gTm8KKwkJCQkJaXNvS2V5ID0gdGVtcElTT0tleTsKKwkJCQkJaXNva2V5VmFsdWVMYWJlbC5zZXRUZXh0KGlzb0tleSk7CisJCQkJCXRlbXBJU09LZXkgPSBudWxsOworCQkJCX0gLy8gaWYKKwkJCX0KKwkJfSk7CisJCQorCQkvLyBJU09LZXlQaWNrZXIgMgorCQlpc29LZXlQaWNrZXIyID0gbmV3IElTT0tleVBpY2tlcihtYWluQ29tcG9zaXRlLCBTV1QuTk9ORSwgMik7CisJCWlzb0tleVBpY2tlcjIuc2V0SVNPS2V5TGV2ZWxEZXNjcmlwdGlvbihNZXNzYWdlcworCQkJCS5nZXRTdHJpbmcoIk5Mb2NXaXpMMiIpKTsKKwkJaXNvS2V5UGlja2VyMi5hZGRJU09LZXlQaWNrZWRMaXN0ZW5lcihuZXcgSVNPS2V5UGlja2VkRXZlbnRMaXN0ZW5lcigpIHsKKwkJCXB1YmxpYyB2b2lkIGlzb0tleVBpY2tlZChmaW5hbCBJU09LZXlQaWNrZWRFdmVudCBpa3BlKSB7CisJCQkJT2JqZWN0W10gaXNvS2V5cyA9IG51bGw7CisJCQkJaWYoc2VsZWN0R2xvYmFsKSBpc29LZXlzID0gR2VvZ3JhcGhpY05hbWVzLmdldFN1YklTT0tleXMoaWtwZQorCQkJCQkJLmdldElzb0tleSgpLCBpc29LZXlQaWNrZXIzLmdldElTT0tleUxldmVsKCkpOworCQkJCWVsc2UgaXNvS2V5cyA9IExvY2F0aW9uVXRpbGl0eS5nZXRLZXlzKHByb2plY3QsIGlzb0tleVBpY2tlcjMuZ2V0SVNPS2V5TGV2ZWwoKSwgaWtwZS5nZXRJc29LZXkoKSkudG9BcnJheSgpOworCQkJCWlzb0tleVBpY2tlcjMuc2V0SVNPS2V5cyhpc29LZXlzKTsKKwkJCQlpc29LZXkgPSBpa3BlLmdldElzb0tleSgpOworCQkJCWlmKCFzZWxlY3RHbG9iYWwpIHRhcmdldFVSSSA9IExvY2F0aW9uVXRpbGl0eS5nZXRVUklGcm9tSVNPS2V5KGlzb0tleSk7CisJCQkJdGVtcElTT0tleSA9IHRlbXBJU09LZXkgPT0gbnVsbCA/IGlzb0tleSA6IHRlbXBJU09LZXk7CisJCQkJLy8gV2VyZSB0aGVyZSBhbnkgSVNPIGtleXMgdG8gc2V0PworCQkJCWlmIChpc29LZXlzLmxlbmd0aCA9PSAwKSB7CisJCQkJCS8vIE5vCisJCQkJCWlzb0tleSA9IHRlbXBJU09LZXk7CisJCQkJCWlzb2tleVZhbHVlTGFiZWwuc2V0VGV4dChpc29LZXkpOworCQkJCQl0ZW1wSVNPS2V5ID0gbnVsbDsKKwkJCQl9IC8vIGlmCisJCQl9CisJCX0pOworCQkKKwkJLy8gSVNPS2V5UGlja2VyIDMKKwkJaXNvS2V5UGlja2VyMyA9IG5ldyBJU09LZXlQaWNrZXIobWFpbkNvbXBvc2l0ZSwgU1dULk5PTkUsIDMpOworCQlpc29LZXlQaWNrZXIzLnNldElTT0tleUxldmVsRGVzY3JpcHRpb24oTWVzc2FnZXMKKwkJCQkuZ2V0U3RyaW5nKCJOTG9jV2l6TDMiKSk7CisJCWlzb0tleVBpY2tlcjMuYWRkSVNPS2V5UGlja2VkTGlzdGVuZXIobmV3IElTT0tleVBpY2tlZEV2ZW50TGlzdGVuZXIoKSB7CisJCQlwdWJsaWMgdm9pZCBpc29LZXlQaWNrZWQoZmluYWwgSVNPS2V5UGlja2VkRXZlbnQgaWtwZSkgeworCQkJCWlzb0tleSA9IHRlbXBJU09LZXkgPT0gbnVsbCA/IGlrcGUuZ2V0SXNvS2V5KCkgOiB0ZW1wSVNPS2V5OworCQkJCWlzb2tleVZhbHVlTGFiZWwuc2V0VGV4dChpc29LZXkpOworCQkJCXRlbXBJU09LZXkgPSBudWxsOworCQkJfQorCQl9KTsKKwkJCisJCQorCQkvLyAgIEZPUk0gREFUQSAgIC8vCisJCXNldEtleVBpY2tlckxheW91dHMoKTsKKwkJCisJCQorCQlmaW5hbCBCdXR0b24gb2theUJ1dHRvbiA9IG5ldyBCdXR0b24obWFpbkNvbXBvc2l0ZSwgU1dULk5PTkUpOworCQlHcmlkRGF0YSBnZCA9IG5ldyBHcmlkRGF0YSgpOworCQlva2F5QnV0dG9uLnNldFRleHQoTWVzc2FnZXMuZ2V0U3RyaW5nKCJOTG9jV2l6T2siKSk7CisJCW9rYXlCdXR0b24uc2V0TGF5b3V0RGF0YShnZCk7CisJCQorCQlCdXR0b24gY2FuY2VsQnV0dG9uID0gbmV3IEJ1dHRvbihtYWluQ29tcG9zaXRlLCBTV1QuTk9ORSk7CisJCWdkID0gbmV3IEdyaWREYXRhKCk7CisJCWNhbmNlbEJ1dHRvbi5zZXRUZXh0KE1lc3NhZ2VzLmdldFN0cmluZygiTkxvY1dpekNhbmNlbCIpKTsKKwkJY2FuY2VsQnV0dG9uLnNldExheW91dERhdGEoZ2QpOworCQkvLyBnZXRTaGVsbCgpLnBhY2soKTsKKwkJc2hlbGwucGFjaygpOworCQlzaGVsbC5vcGVuKCk7CisJCQorCQkKKwkJb2theUJ1dHRvbi5hZGRTZWxlY3Rpb25MaXN0ZW5lciggbmV3IFNlbGVjdGlvbkxpc3RlbmVyKCkgeworCQkJCisJCQlwdWJsaWMgdm9pZCB3aWRnZXRTZWxlY3RlZChTZWxlY3Rpb25FdmVudCBhcmcwKSB7CisJCQkJY2FuY2VsUHJlc3NlZD1mYWxzZTsKKwkJCQlzaGVsbC5kaXNwb3NlKCk7CisJCQl9CisJCQkKKwkJCXB1YmxpYyB2b2lkIHdpZGdldERlZmF1bHRTZWxlY3RlZChTZWxlY3Rpb25FdmVudCBhcmcwKSB7CisJCQkJLy8gVE9ETyBBdXRvLWdlbmVyYXRlZCBtZXRob2Qgc3R1YgorCQkJCQorCQkJfQorCQl9KTsKKwkJCisJCWNhbmNlbEJ1dHRvbi5hZGRTZWxlY3Rpb25MaXN0ZW5lciggbmV3IFNlbGVjdGlvbkxpc3RlbmVyKCkgeworCQkJCisJCQlwdWJsaWMgdm9pZCB3aWRnZXRTZWxlY3RlZChTZWxlY3Rpb25FdmVudCBhcmcwKSB7CisJCQkJY2FuY2VsUHJlc3NlZD10cnVlOworCQkJCXNoZWxsLmRpc3Bvc2UoKTsKKwkJCX0KKwkJCQorCQkJcHVibGljIHZvaWQgd2lkZ2V0RGVmYXVsdFNlbGVjdGVkKFNlbGVjdGlvbkV2ZW50IGFyZzApIHsKKwkJCQkvLyBUT0RPIEF1dG8tZ2VuZXJhdGVkIG1ldGhvZCBzdHViCisJCQkJCisJCQl9CisJCX0pOworCQkKKwkJCisJCURpc3BsYXkgZGlzcGxheSA9IHBhcmVudC5nZXREaXNwbGF5KCk7CisJCXdoaWxlICghc2hlbGwuaXNEaXNwb3NlZCgpKSB7CisJCWlmICghZGlzcGxheS5yZWFkQW5kRGlzcGF0Y2goKSkgZGlzcGxheS5zbGVlcCgpOworCQl9CisJCWlmKGNhbmNlbFByZXNzZWQpIHJldHVybiBudWxsOworCQlPYmplY3QgW10gcmV0ID0gbmV3IE9iamVjdFsyXTsKKwkJcmV0WzBdID0gdGhpcy5pc29LZXk7CisJCXJldFsxXSA9IHRoaXMudGFyZ2V0VVJJOworCQlyZXR1cm4gcmV0OworCX0vLyBvcGVuKCkKKwkKKwkKKwkKKwkvKioKKwkgKiAKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRLZXlQaWNrZXJMYXlvdXRzKCkgeworCQkvLyBJU08gUGlja2VyMAorCQkvL2ZpbmFsIEdyaWREYXRhIGdkX2lzb0tleVBpY2tlcjAgPSBuZXcgR3JpZERhdGEoU1dULkNFTlRFUiwgU1dULkNFTlRFUiwgdHJ1ZSwgdHJ1ZSk7CisJCWZpbmFsIEdyaWREYXRhIGdkX2lzb0tleVBpY2tlcjAgPSBuZXcgR3JpZERhdGEoR3JpZERhdGEuRklMTF9CT1RIKTsKKwkJZ2RfaXNvS2V5UGlja2VyMC52ZXJ0aWNhbFNwYW49MTsKKwkJZ2RfaXNvS2V5UGlja2VyMC5ob3Jpem9udGFsU3Bhbj0xOworCQkvL2dkX2lzb0tleVBpY2tlcjAuIFVwcGVyIGxlZnQKKwkJLy9maW5hbCBHcmlkRGF0YSBnZF9pc29LZXlQaWNrZXIwID0gbmV3IEdyaWREYXRhKFNXVC5DRU5URVJfSE9SSVpPTlRBTCk7CisJCWlzb0tleVBpY2tlcjAuc2V0TGF5b3V0RGF0YShnZF9pc29LZXlQaWNrZXIwKTsKKwkJaXNvS2V5UGlja2VyMC5zZXRJU09LZXlzKEdlb2dyYXBoaWNOYW1lcy5nZXRTdWJJU09LZXlzKAorCQkJCUdlb2dyYXBoaWNNYXBwZXIuRUFSVEhfQUxQSEEzX0lTT19LRVksIC0xKSk7CisKKwkJLy8gSVNPS2V5UGlja2VyIDEJCVVwcGVyIHJpZ2h0CisJCWZpbmFsIEdyaWREYXRhIGdkX2lzb0tleVBpY2tlcjEgPSBuZXcgR3JpZERhdGEoR3JpZERhdGEuRklMTF9CT1RIKTsKKwkJZ2RfaXNvS2V5UGlja2VyMS52ZXJ0aWNhbFNwYW49MTsKKwkJZ2RfaXNvS2V5UGlja2VyMS5ob3Jpem9udGFsU3Bhbj0xOworCQlpc29LZXlQaWNrZXIxLnNldExheW91dERhdGEoZ2RfaXNvS2V5UGlja2VyMSk7CisJCQorCQkvLyBJU09LZXlQaWNrZXIgMiBsb3dlciBsZWZ0CisJCWZpbmFsIEdyaWREYXRhIGdkX2lzb0tleVBpY2tlcjIgPSBuZXcgR3JpZERhdGEoR3JpZERhdGEuRklMTF9CT1RIKTsKKwkJZ2RfaXNvS2V5UGlja2VyMi52ZXJ0aWNhbFNwYW49MTsKKwkJZ2RfaXNvS2V5UGlja2VyMi5ob3Jpem9udGFsU3Bhbj0xOworCQlpc29LZXlQaWNrZXIyLnNldExheW91dERhdGEoZ2RfaXNvS2V5UGlja2VyMik7CisJCisJCS8vIElTT0tleVBpY2tlciAzIGxvd2VyIHJpZ2h0CisJCWZpbmFsIEdyaWREYXRhIGdkX2lzb0tleVBpY2tlcjMgPSBuZXcgR3JpZERhdGEoR3JpZERhdGEuRklMTF9CT1RIKTsKKwkJZ2RfaXNvS2V5UGlja2VyMy52ZXJ0aWNhbFNwYW49MTsKKwkJZ2RfaXNvS2V5UGlja2VyMy5ob3Jpem9udGFsU3Bhbj0xOworCQkvL2ZkX2lzb0tleVBpY2tlcjMuYm90dG9tID0gbmV3IEZvcm1BdHRhY2htZW50KDEwMCwgLTUpOworCQlpc29LZXlQaWNrZXIzLnNldExheW91dERhdGEoZ2RfaXNvS2V5UGlja2VyMyk7CisJfQorCQorCS8qKgorCSAqIAorCSAqIEBwYXJhbSB3aWR0aAorCSAqIEBwYXJhbSBoZWlnaHQKKwkgKi8KKwlwdWJsaWMgdm9pZCByZVNldEtleVBpY2tlckJvdW5kcyhpbnQgd2lkdGgsIGludCBoZWlnaHQsaW50IHgwLCBpbnQgeTApIHsKKwkJaXNvS2V5UGlja2VyMC5zZXRSZWdpb25MaXN0U2l6ZSh3aWR0aCwgaGVpZ2h0KTsKKwkJaXNvS2V5UGlja2VyMS5zZXRSZWdpb25MaXN0U2l6ZSh3aWR0aCwgaGVpZ2h0KTsKKwkJaXNvS2V5UGlja2VyMi5zZXRSZWdpb25MaXN0U2l6ZSh3aWR0aCwgaGVpZ2h0KTsKKwkJaXNvS2V5UGlja2VyMy5zZXRSZWdpb25MaXN0U2l6ZSh3aWR0aCwgaGVpZ2h0KTsKKwkJaXNvS2V5UGlja2VyMC5zZXRSZWdpb25MaXN0Qm91bmRzKHgwLHkwLHdpZHRoLCBoZWlnaHQpOworCQlpc29LZXlQaWNrZXIxLnNldFJlZ2lvbkxpc3RCb3VuZHMoeDArd2lkdGgsIHkwLCB3aWR0aCwgaGVpZ2h0KTsKKwkJaXNvS2V5UGlja2VyMi5zZXRSZWdpb25MaXN0Qm91bmRzKHgwLCB5MCtoZWlnaHQsIHdpZHRoLCBoZWlnaHQpOworCQlpc29LZXlQaWNrZXIzLnNldFJlZ2lvbkxpc3RCb3VuZHMoeDArd2lkdGgsIHkwK2hlaWdodCwgd2lkdGgsIGhlaWdodCk7CisJCQorCX0KKwkKKwkvKioKKwkgKiAKKwkgKiBAcGFyYW0gd2lkdGgKKwkgKiBAcGFyYW0gaGVpZ2h0CisJICovCisJcHVibGljIHZvaWQgcmVTZXRLZXlQaWNrZXJTaXplKGludCB3aWR0aCwgaW50IGhlaWdodCkgeworCQlpc29LZXlQaWNrZXIwLnNldFJlZ2lvbkxpc3RTaXplKHdpZHRoLCBoZWlnaHQpOworCQlpc29LZXlQaWNrZXIxLnNldFJlZ2lvbkxpc3RTaXplKHdpZHRoLCBoZWlnaHQpOworCQlpc29LZXlQaWNrZXIyLnNldFJlZ2lvbkxpc3RTaXplKHdpZHRoLCBoZWlnaHQpOworCQlpc29LZXlQaWNrZXIzLnNldFJlZ2lvbkxpc3RTaXplKHdpZHRoLCBoZWlnaHQpOworCQkKKwl9CisJCisJCisJLyoqCisJICogCisJICovCisJcHVibGljIHZvaWQgcmVpbml0KCkgeworCQkKKwkJaWYoc2VsZWN0R2xvYmFsKQorCQkJaXNvS2V5UGlja2VyMC5zZXRJU09LZXlzKEdlb2dyYXBoaWNOYW1lcy5nZXRTdWJJU09LZXlzKAorCQkJCUdlb2dyYXBoaWNNYXBwZXIuRUFSVEhfQUxQSEEzX0lTT19LRVksIC0xKSk7CisJCWVsc2UgeworCQkJSVJ1bm5hYmxlV2l0aFByb2dyZXNzIGdldEtleXMgPSBuZXcgSVJ1bm5hYmxlV2l0aFByb2dyZXNzKCkgeworCSAgICAgICAgICAgIHB1YmxpYyB2b2lkIHJ1bihJUHJvZ3Jlc3NNb25pdG9yIHByb2dyZXNzKSB7CisJICAgICAgICAgICAgCXByb2dyZXNzLmJlZ2luVGFzayhNZXNzYWdlcy5nZXRTdHJpbmcoIk5Mb2NQaWNrZXJXaXouZ2V0dGluZ0xvY2F0aW9ucyIpLCAxMDApOyAgIAkKKwkgICAgICAgIAkJaXNvS2V5UGlja2VyMC5zZXRJU09LZXlzKExvY2F0aW9uVXRpbGl0eS5nZXRLZXlzKHByb2plY3QsIDAsIG51bGwpLnRvQXJyYXkoKSk7CisJICAgICAgICAgICAgCXByb2dyZXNzLndvcmtlZCgxMDApOworCSAgICAgICAgICAgIAlwcm9ncmVzcy5kb25lKCk7CisJICAgICAgICAgICAgfQorCQkJfTsKKwkJCQorCQkJSVJ1bm5hYmxlQ29udGV4dCBjb250ZXh0ID0gbmV3IFByb2dyZXNzTW9uaXRvckRpYWxvZyhzaGVsbCk7CisJCQl0cnkgeworCQkJCWNvbnRleHQucnVuKHRydWUsIHRydWUsIGdldEtleXMpOworCQkJfSBjYXRjaChFeGNlcHRpb24gZSkgeworCQkJCUFjdGl2YXRvci5sb2dFcnJvcihlLmdldE1lc3NhZ2UoKSwgZSk7CisJCQl9CisJCQkKKwkJfQorCQlpc29LZXlQaWNrZXIxLnNldElTT0tleXMobmV3IE9iamVjdFtdIHt9KTsKKwkJaXNvS2V5UGlja2VyMi5zZXRJU09LZXlzKG5ldyBPYmplY3RbXSB7fSk7CisJCWlzb0tleVBpY2tlcjMuc2V0SVNPS2V5cyhuZXcgT2JqZWN0W10ge30pOworCisJfQorCQorCS8qKgorCSAqIAorCSAqIEByZXR1cm4KKwkgKi8KKwlwdWJsaWMgU3RyaW5nIGdldElTT0tleSgpIHsKKwkJcmV0dXJuIGlzb0tleTsKKwl9CisJCisvLwlwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmcgW10gYXJncykgeworLy8JCURpc3BsYXkgZGlzcGxheSA9IG5ldyBEaXNwbGF5KCk7CisvLwkgICAgU2hlbGwgc2hlbGwgPSBuZXcgU2hlbGwoZGlzcGxheSk7CisvLwkgICAgCQkKKy8vCQlMb2NhdGlvblBpY2tlckRpYWxvZzIgZGlhbG9nICA9IG5ldyBMb2NhdGlvblBpY2tlckRpYWxvZzIoc2hlbGwsIFNXVC5SRVNJWkV8U1dULlBVU0gsICJQaWNrIGxvY2F0aW9uIiwgIiIsIG51bGwpOwkJIAorLy8JICAgIGRpYWxvZy5vcGVuKCk7CisvLwkgICAgd2hpbGUgKCFzaGVsbC5pc0Rpc3Bvc2VkKCkpIHsKKy8vCSAgICAgIGlmICghZGlzcGxheS5yZWFkQW5kRGlzcGF0Y2goKSkgeworLy8JICAgICAgICBkaXNwbGF5LnNsZWVwKCk7CisvLwkgICAgICB9CisvLwkgICAgfQorLy8JICAgIEFjdGl2YXRvci5sb2dJbmZvcm1hdGlvbigiUGlja2VkIGxvY2F0aW9uOiIrZGlhbG9nLmdldElTT0tleSgpKTsKKy8vCSAgICBkaXNwbGF5LmRpc3Bvc2UoKTsKKy8vCX0KKwkKK30KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS93aWRnZXRzL01hdHJpeEVkaXRvckRpYWxvZy5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3dpZGdldHMvTWF0cml4RWRpdG9yRGlhbG9nLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmNlN2ZjNAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS93aWRnZXRzL01hdHJpeEVkaXRvckRpYWxvZy5qYXZhCkBAIC0wLDAgKzEsMTYzIEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0udWkud2lkZ2V0czsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAxMCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnVpLndpZGdldHMuTWF0cml4RWRpdG9yV2lkZ2V0Lk1hdHJpeEVkaXRvclZhbGlkYXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnVpLndpemFyZHMuTWVzc2FnZXM7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LlNXVDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLlNlbGVjdGlvbkV2ZW50OworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuU2VsZWN0aW9uTGlzdGVuZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5HcmlkRGF0YTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QubGF5b3V0LkdyaWRMYXlvdXQ7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQnV0dG9uOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkRpYWxvZzsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5EaXNwbGF5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlNoZWxsOworCitwdWJsaWMgY2xhc3MgTWF0cml4RWRpdG9yRGlhbG9nIGV4dGVuZHMgRGlhbG9nIHsKKworCXByaXZhdGUgc2hvcnQgcm93cywgY29sdW1uczsKKwlwcml2YXRlIFN0cmluZyBbXSByb3dOYW1lcywgY29sTmFtZXM7CisJcHJpdmF0ZSBib29sZWFuIGZpeGVkU2l6ZTsKKwlwcml2YXRlIFN0cmluZyB0aXRsZTsKKwlNYXRyaXhFZGl0b3JWYWxpZGF0b3IgdmFsaWRhdG9yID0gbnVsbDsKKwlib29sZWFuIGNhbmNlbFByZXNzZWQgPSBmYWxzZTsKKwlTdHJpbmcgW10gZXhpc3RpbmdWYWxzID0gbnVsbDsKKwkKKwlwdWJsaWMgTWF0cml4RWRpdG9yRGlhbG9nIChTaGVsbCBwYXJlbnQsIGludCBzdHlsZSwgU3RyaW5nIHRpdGxlLCBzaG9ydCByb3dzLCBzaG9ydCBjb2x1bW5zLCBTdHJpbmdbXSByb3duYW1lcywgU3RyaW5nIFtdIGNvbHVtbk5hbWVzLCBTdHJpbmcgW10gZXhpc3RpbmdWYWxzLCBib29sZWFuIGZpeGVkU2l6ZSwgTWF0cml4RWRpdG9yVmFsaWRhdG9yIHZhbGlkYXRvcikgeworCQlzdXBlciAocGFyZW50LCBzdHlsZSk7CisJCXRoaXMucm93cyA9IHJvd3M7CisJCXRoaXMuY29sdW1ucyA9IGNvbHVtbnM7CisJCXRoaXMucm93TmFtZXMgPSByb3duYW1lczsKKwkJdGhpcy5jb2xOYW1lcyA9IGNvbHVtbk5hbWVzOworCQl0aGlzLnZhbGlkYXRvciA9IHZhbGlkYXRvcjsKKwkJdGhpcy50aXRsZSA9IHRpdGxlOworCQl0aGlzLmZpeGVkU2l6ZSA9IGZpeGVkU2l6ZTsKKwkJdGhpcy5leGlzdGluZ1ZhbHMgPSBleGlzdGluZ1ZhbHM7CisJfQorCQorCS8qKgorCSAqIG9wZW4gdGhlIG1vZGFsIHdpbmRvdy4gCisJICogQHJldHVybiBUaGUgU3RyaW5nW10gd2l0aCByZXN1bHRzLCBvciBudWxsIGlmIGNhbmNlbCB3YXMgcHJlc3NlZC4KKwkgKi8KKwlwdWJsaWMgU3RyaW5nIFtdIG9wZW4gKCkgeworCQlTaGVsbCBwYXJlbnQgPSBnZXRQYXJlbnQoKTsKKwkJZmluYWwgU2hlbGwgc2hlbGwgPSBuZXcgU2hlbGwocGFyZW50LCBTV1QuRElBTE9HX1RSSU0gfCBTV1QuQVBQTElDQVRJT05fTU9EQUwpOworCQlzaGVsbC5zZXRUZXh0KHRpdGxlKTsKKwkJR3JpZExheW91dCBnbCA9IG5ldyBHcmlkTGF5b3V0KCk7CisJCWdsLm51bUNvbHVtbnMgPSAyOworCQlzaGVsbC5zZXRMYXlvdXQoZ2wpOworCQkKKwkJR3JpZERhdGEgZ2QgPSBuZXcgR3JpZERhdGEoKTsKKwkJZ2QuaG9yaXpvbnRhbFNwYW4gPSAyOworCQlmaW5hbCBNYXRyaXhFZGl0b3JXaWRnZXQgd2lkZ2V0ID0gbmV3IE1hdHJpeEVkaXRvcldpZGdldChzaGVsbCwgU1dULk5PTkUsIHJvd3MsIGNvbHVtbnMsIHJvd05hbWVzLCBjb2xOYW1lcywgZXhpc3RpbmdWYWxzLCBmaXhlZFNpemUsIHZhbGlkYXRvcik7CisJCXdpZGdldC5zZXRMYXlvdXREYXRhKGdkKTsKKwkJCisJCWZpbmFsIEJ1dHRvbiBva2F5QnV0dG9uID0gbmV3IEJ1dHRvbihzaGVsbCwgU1dULk5PTkUpOworCQlnZCA9IG5ldyBHcmlkRGF0YSgpOworCQlva2F5QnV0dG9uLnNldFRleHQoTWVzc2FnZXMuZ2V0U3RyaW5nKCJNYXRyaXguZGlhbG9nLm9rYXkiKSk7CisJCW9rYXlCdXR0b24uc2V0TGF5b3V0RGF0YShnZCk7CisJCQorCQlCdXR0b24gY2FuY2VsQnV0dG9uID0gbmV3IEJ1dHRvbihzaGVsbCwgU1dULk5PTkUpOworCQlnZCA9IG5ldyBHcmlkRGF0YSgpOworCQljYW5jZWxCdXR0b24uc2V0VGV4dChNZXNzYWdlcy5nZXRTdHJpbmcoIk1hdHJpeC5kaWFsb2cuY2FuY2VsIikpOworCQljYW5jZWxCdXR0b24uc2V0TGF5b3V0RGF0YShnZCk7CisJCQorCQlzaGVsbC5wYWNrKCk7CisJCXNoZWxsLm9wZW4oKTsKKwkJCisJCQorCQl3aWRnZXQuYWRkTGlzdGVuZXIobmV3IE1hdHJpeEVkaXRvcldpZGdldC5NYXRyaXhFZGl0b3JMaXN0ZW5lcigpIHsKKwkJCQorCQkJcHVibGljIHZvaWQgZXZlbnRSZWNlaXZlZChNYXRyaXhFZGl0b3JXaWRnZXQuTWF0cml4RWRpdG9yRXZlbnQgZXZlbnQpIHsKKwkJCQlpZihldmVudC5zdGF0dXMgPT0gTWF0cml4RWRpdG9yV2lkZ2V0LlNUQVRVUy5JTlZBTElEX1ZBTFVFKQorCQkJCQlva2F5QnV0dG9uLnNldEVuYWJsZWQoZmFsc2UpOworCQkJCWVsc2Ugb2theUJ1dHRvbi5zZXRFbmFibGVkKHRydWUpOworCQkJfQorCQl9KTsKKwkJCisJCW9rYXlCdXR0b24uYWRkU2VsZWN0aW9uTGlzdGVuZXIoIG5ldyBTZWxlY3Rpb25MaXN0ZW5lcigpIHsKKwkJCQorCQkJcHVibGljIHZvaWQgd2lkZ2V0U2VsZWN0ZWQoU2VsZWN0aW9uRXZlbnQgYXJnMCkgeworCQkJCWNhbmNlbFByZXNzZWQ9ZmFsc2U7CisJCQkJc2hlbGwuZGlzcG9zZSgpOworCQkJfQorCQkJCisJCQlwdWJsaWMgdm9pZCB3aWRnZXREZWZhdWx0U2VsZWN0ZWQoU2VsZWN0aW9uRXZlbnQgYXJnMCkgeworCQkJCS8vIFRPRE8gQXV0by1nZW5lcmF0ZWQgbWV0aG9kIHN0dWIKKwkJCQkKKwkJCX0KKwkJfSk7CisJCQorCQljYW5jZWxCdXR0b24uYWRkU2VsZWN0aW9uTGlzdGVuZXIoIG5ldyBTZWxlY3Rpb25MaXN0ZW5lcigpIHsKKwkJCQorCQkJcHVibGljIHZvaWQgd2lkZ2V0U2VsZWN0ZWQoU2VsZWN0aW9uRXZlbnQgYXJnMCkgeworCQkJCWNhbmNlbFByZXNzZWQ9dHJ1ZTsKKwkJCQlzaGVsbC5kaXNwb3NlKCk7CisJCQl9CisJCQkKKwkJCXB1YmxpYyB2b2lkIHdpZGdldERlZmF1bHRTZWxlY3RlZChTZWxlY3Rpb25FdmVudCBhcmcwKSB7CisJCQkJLy8gVE9ETyBBdXRvLWdlbmVyYXRlZCBtZXRob2Qgc3R1YgorCQkJCQorCQkJfQorCQl9KTsKKwkJCisJCURpc3BsYXkgZGlzcGxheSA9IHBhcmVudC5nZXREaXNwbGF5KCk7CisJCXdoaWxlICghc2hlbGwuaXNEaXNwb3NlZCgpKSB7CisJCWlmICghZGlzcGxheS5yZWFkQW5kRGlzcGF0Y2goKSkgZGlzcGxheS5zbGVlcCgpOworCQl9CisJCQorCQkKKwkJaWYoIWNhbmNlbFByZXNzZWQpIHsKKwkJCVN0cmluZyBbXSByZXMgPSBuZXcgU3RyaW5nW3dpZGdldC5nZXRUZXh0VmFsdWVzKCkuc2l6ZSgpXTsKKwkJCWludCBpPTA7CisJCQlmb3IoU3RyaW5nIHQ6d2lkZ2V0LmdldFRleHRWYWx1ZXMoKSkgcmVzW2krK109dDsKKwkJCXJldHVybiByZXM7CisJCX0KKwkJcmV0dXJuIG51bGw7CisJfQorCQorCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZyBbXSBhcmdzKSB7CisJCURpc3BsYXkgZGlzcGxheSA9IG5ldyBEaXNwbGF5KCk7CisJICAgIFNoZWxsIHNoZWxsID0gbmV3IFNoZWxsKGRpc3BsYXkpOworCSAgICAKKy8vCSAgICBTdHJpbmcgW10gcm4gPSB7IkFHRTAtMTAiLCAiQUdFMTEtMzUiLCJBR0UzNi0xMDAifTsKKy8vCQlTdHJpbmcgW10gY24gPSB7IkFHRTAtMTAiLCAiQUdFMTEtMzUiLCJBR0UzNi0xMDAifTsKKwkJCisvLwkJTWF0cml4RWRpdG9yRGlhbG9nIGRpYWxvZyA9IG5ldyBNYXRyaXhFZGl0b3JEaWFsb2coc2hlbGwsIFNXVC5QVVNILCAiRW50ZXIgVmFsdWVzIiwgKHNob3J0KTMsIChzaG9ydCkzLCBybiwgY24sIG5ldyBNYXRyaXhFZGl0b3JWYWxpZGF0b3IoKSB7CisKKwkgICAgU3RyaW5nIFtdIGNuID0geyJQb3B1bGF0aW9uIEdyb3VwIn07CisJCQorCQlNYXRyaXhFZGl0b3JEaWFsb2cgZGlhbG9nICA9IG5ldyBNYXRyaXhFZGl0b3JEaWFsb2coc2hlbGwsIFNXVC5QVVNILCAiRW50ZXIgc3R1ZmYiLCAoc2hvcnQpMSwgKHNob3J0KTEsIG51bGwsIGNuLCBudWxsLCBmYWxzZSwgbmV3IE1hdHJpeEVkaXRvclZhbGlkYXRvcigpIHsKKwkJCisJCisJCQlwdWJsaWMgYm9vbGVhbiB2YWxpZGF0ZVZhbHVlKFN0cmluZyB2YWwpIHsKKwkJCQlpZih2YWwgPT0gbnVsbCB8fCB2YWwudHJpbSgpLmVxdWFscygiIikpIHJldHVybiB0cnVlOworCQkJCXRyeSB7CisJCQkJCURvdWJsZS5wYXJzZURvdWJsZSh2YWwudHJpbSgpKTsKKwkJCQl9IGNhdGNoKE51bWJlckZvcm1hdEV4Y2VwdGlvbiBuZmUpIHsKKwkJCQkJcmV0dXJuIGZhbHNlOworCQkJCX0KKwkJCQlyZXR1cm4gdHJ1ZTsKKwkJCX0KKwkJfSk7CisJCQkgCisJICAgIGRpYWxvZy5vcGVuKCk7CisJICAgIHdoaWxlICghc2hlbGwuaXNEaXNwb3NlZCgpKSB7CisJICAgICAgaWYgKCFkaXNwbGF5LnJlYWRBbmREaXNwYXRjaCgpKSB7CisJICAgICAgICBkaXNwbGF5LnNsZWVwKCk7CisJICAgICAgfQorCSAgICB9CisJICAgIGRpc3BsYXkuZGlzcG9zZSgpOworCX0KKwkKK30KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS93aWRnZXRzL01hdHJpeEVkaXRvcldpZGdldC5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3dpZGdldHMvTWF0cml4RWRpdG9yV2lkZ2V0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWQ1NmYwMwotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS93aWRnZXRzL01hdHJpeEVkaXRvcldpZGdldC5qYXZhCkBAIC0wLDAgKzEsMzc0IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0udWkud2lkZ2V0czsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAxMCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqYXZhLnRleHQuTWVzc2FnZUZvcm1hdDsKK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OworCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS51aS5BY3RpdmF0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS51aS53aXphcmRzLk1lc3NhZ2VzOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5TV1Q7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5Nb2RpZnlFdmVudDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLk1vZGlmeUxpc3RlbmVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuUGFpbnRFdmVudDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLlBhaW50TGlzdGVuZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5TZWxlY3Rpb25FdmVudDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLlNlbGVjdGlvbkxpc3RlbmVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ncmFwaGljcy5Db2xvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZ3JhcGhpY3MuUG9pbnQ7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5GaWxsTGF5b3V0OworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5sYXlvdXQuR3JpZERhdGE7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5HcmlkTGF5b3V0OworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkJ1dHRvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29udHJvbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5EaXNwbGF5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkxhYmVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlNoZWxsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlRleHQ7CisKK3B1YmxpYyBjbGFzcyBNYXRyaXhFZGl0b3JXaWRnZXQgZXh0ZW5kcyBDb21wb3NpdGUgeworCisJcHVibGljIGVudW0gU1RBVFVTIHsKKwkJT0tBWSwKKwkJSU5WQUxJRF9WQUxVRTsKKwl9CisJCisJcHJpdmF0ZSBzaG9ydCByb3dzOworCXNob3J0IGR5bnJvd3M7CisJc2hvcnQgY29sdW1uczsKKwlwcml2YXRlIFN0cmluZyBbXSByb3dOYW1lcywgY29sTmFtZXM7CisJcHJpdmF0ZSBib29sZWFuIGZpeGVkU2l6ZTsKKwlwcml2YXRlIENvbG9yIGNvbFJvd0hlYWRlckNvbHVtbnMgPSBuZXcgQ29sb3IobnVsbCwgMjAwLCAyMDAsIDIwMCk7CisJcHJpdmF0ZSBDb2xvciB0ZXh0QmFja2dyb3VuZENvbHVtbnMgPSBuZXcgQ29sb3IobnVsbCwgMjU1LCAyNTUsIDI1NSk7CisJcHJpdmF0ZSBDb2xvciB0ZXh0Qm9yZGVyQ29sb3IgPSAgbmV3IENvbG9yKG51bGwsIDAsIDAsIDApOworCQorCUFycmF5TGlzdDxUZXh0PiB0ZXh0V2lkZ2V0cyA9IG5ldyBBcnJheUxpc3Q8VGV4dD4oKTsKKwlBcnJheUxpc3Q8U3RyaW5nPiB0ZXh0VmFsdWVzID0gbmV3IEFycmF5TGlzdDxTdHJpbmc+KCk7CisJCisJTWF0cml4RWRpdG9yVmFsaWRhdG9yIHZhbGlkYXRvciA9IG51bGw7CisJcHJpdmF0ZSBBcnJheUxpc3Q8TWF0cml4RWRpdG9yTGlzdGVuZXI+IGxpc3RlbmVycyA9IG5ldyAgQXJyYXlMaXN0PE1hdHJpeEVkaXRvckxpc3RlbmVyPigpOworCQorCUxhYmVsIHN0YXR1cyA9IG51bGw7CisJQnV0dG9uIGN1cnJlbnRQbHVzQnV0dG9uOworCUJ1dHRvbiBjdXJyZW50TWludXNCdXR0b247CisJQXJyYXlMaXN0PExhYmVsPmVtcHR5TGFiZWxzID0gbmV3IEFycmF5TGlzdDxMYWJlbD4oKTsKKwkKKwkKKwkvKioKKwkgKiBDcmVhdGUgYSBuZXcgTWF0cml4IEVkaXRvciBXaWRnZXQKKwkgKiAKKwkgKiBAcGFyYW0gcGFyZW50CisJICogQHBhcmFtIHJvd3MKKwkgKiBAcGFyYW0gY29sdW1ucworCSAqIEBwYXJhbSByb3duYW1lcworCSAqIEBwYXJhbSBjb2x1bW5OYW1lcworCSAqLworCQorCXB1YmxpYyBNYXRyaXhFZGl0b3JXaWRnZXQoQ29tcG9zaXRlIHBhcmVudCwgaW50IHN0eWxlLCBzaG9ydCByb3dzLCBzaG9ydCBjb2x1bW5zLCBTdHJpbmdbXSByb3duYW1lcywgU3RyaW5nIFtdIGNvbHVtbk5hbWVzLCBTdHJpbmcgW11leGlzdGluZ1ZhbHMsYm9vbGVhbiBmaXhlZFNpemUsIE1hdHJpeEVkaXRvclZhbGlkYXRvciB2YWxpZGF0b3IpIHsKKwkJc3VwZXIocGFyZW50LCBzdHlsZSk7CisJCXRoaXMucm93cyA9IHJvd3M7CisJCXRoaXMuZHlucm93cyA9IHJvd3M7IC8vIGR5bmFtaWNhbGx5IGFkanVzdGVkIG51bWJlciBvZiByb3dzCisJCXRoaXMuY29sdW1ucyA9IGNvbHVtbnM7CisJCXRoaXMucm93TmFtZXMgPSByb3duYW1lczsKKwkJdGhpcy5jb2xOYW1lcyA9IGNvbHVtbk5hbWVzOworCQl0aGlzLnZhbGlkYXRvciA9IHZhbGlkYXRvcjsKKwkJdGhpcy5maXhlZFNpemUgPSBmaXhlZFNpemU7CisJCWNyZWF0ZUNvbnRlbnRzKGV4aXN0aW5nVmFscyk7CisJCQorCX0KKworCXByb3RlY3RlZCB2b2lkIGNyZWF0ZUNvbnRlbnRzKFN0cmluZyBbXWV4aXN0aW5nVmFscykgeworCQlzZXRCYWNrZ3JvdW5kKG5ldyBDb2xvcihudWxsLCAyNTUsIDI1NSwgMjU1KSk7CisJCQorCQlHcmlkTGF5b3V0IGxheW91dCA9IG5ldyBHcmlkTGF5b3V0KCk7CisJCWxheW91dC5udW1Db2x1bW5zID0gY29sdW1ucysxOworCQlsYXlvdXQuaG9yaXpvbnRhbFNwYWNpbmcgPSAwOworCQlsYXlvdXQudmVydGljYWxTcGFjaW5nID0gMDsKKwkJbGF5b3V0Lm1hcmdpbkJvdHRvbSA9IDA7CisJCWxheW91dC5tYXJnaW5MZWZ0ID0gMDsKKwkJbGF5b3V0Lm1hcmdpblJpZ2h0ID0gMDsKKwkJbGF5b3V0Lm1hcmdpblRvcCA9IDA7CisJCQorCQl0aGlzLnNldExheW91dChsYXlvdXQpOworCQkKKwkJLy8gVGhlIHN0YXR1cyByb3cgZm9yIGVycm9yIG1lc3NhZ2VzIGV0Yy4KKwkJc3RhdHVzID0gbmV3IExhYmVsKHRoaXMsIFNXVC5OT05FKTsKKwkJc3RhdHVzLnNldEZvcmVncm91bmQobmV3IENvbG9yKG51bGwsIDI1NSwgMCwgMCkpOworCQlHcmlkRGF0YSBzZ2QgPSBuZXcgR3JpZERhdGEoKTsKKwkJaWYoKHJvd05hbWVzICE9IG51bGwgJiYgcm93TmFtZXMubGVuZ3RoID4gMCkgfHwgZml4ZWRTaXplID09IGZhbHNlKQorCQkJc2dkLmhvcml6b250YWxTcGFuID0gY29sdW1ucysxOworCQllbHNlCisJCQlzZ2QuaG9yaXpvbnRhbFNwYW4gPSBjb2x1bW5zOworCQkKKwkJc3RhdHVzLnNldExheW91dERhdGEoc2dkKTsKKwkJc3RhdHVzLnNldFRleHQoIiIpOworCQkKKwkJaWYoKHJvd05hbWVzICE9IG51bGwgJiYgcm93TmFtZXMubGVuZ3RoID4gMCkgfHwgZml4ZWRTaXplID09IGZhbHNlKSB7IAorCQkJTGFiZWwgbGFiID0gbmV3IExhYmVsKHRoaXMsIFNXVC5OT05FKTsKKwkJCWxhYi5zZXRUZXh0KCIiKTsKKwkJCUdyaWREYXRhIGdkID0gbmV3IEdyaWREYXRhKCk7CisJCQkvL2dkLmhvcml6b250YWxBbGlnbm1lbnQgPSBHcmlkRGF0YS5GSUxMOworCQkJLy9nZC5ncmFiRXhjZXNzSG9yaXpvbnRhbFNwYWNlID0gdHJ1ZTsKKwkJCWxhYi5zZXRMYXlvdXREYXRhKGdkKTsKKwkJfQorCQkvLyBDcmVhdGUgY29sdW1uIGhlYWRlcnMKKwkJaWYoY29sTmFtZXMhPW51bGwpIGZvcihpbnQgYz0wO2M8Y29sTmFtZXMubGVuZ3RoOysrYykgeworCQkJTGFiZWwgbGFiID0gbmV3IExhYmVsKHRoaXMsIFNXVC5CT1JERVIpOworCQkJbGFiLnNldFRleHQoY29sTmFtZXNbY10pOworCQkJR3JpZERhdGEgZ2QgPSBuZXcgR3JpZERhdGEoKTsKKwkJCWdkLmhvcml6b250YWxBbGlnbm1lbnQgPSBHcmlkRGF0YS5GSUxMOworCQkJZ2QuZ3JhYkV4Y2Vzc0hvcml6b250YWxTcGFjZSA9IHRydWU7CisJCQlnZC5ncmFiRXhjZXNzVmVydGljYWxTcGFjZSA9IGZhbHNlOworCQkJZ2QuaG9yaXpvbnRhbEluZGVudCA9IDE7CisJCQlnZC52ZXJ0aWNhbEluZGVudCA9IDE7CisJCQlnZC5taW5pbXVtV2lkdGggPSAxMjg7CisJCQlsYWIuc2V0TGF5b3V0RGF0YShnZCk7CisJCQlsYWIuc2V0QmFja2dyb3VuZChjb2xSb3dIZWFkZXJDb2x1bW5zKTsKKwkJCWFkZEJvcmRlcihsYWIpOworCQl9CisJCS8vIENyZWF0ZSB0aGUgdGV4dAorCQkKKwkJZm9yKGludCByPTA7cjxyb3dzOysrcikgeworCQkJaWYoKHJvd05hbWVzICE9IG51bGwgJiYgcm93TmFtZXMubGVuZ3RoID4gcikgfHwgZml4ZWRTaXplID09IGZhbHNlKSB7CisJCQkJTGFiZWwgbGFiID0gbmV3IExhYmVsKHRoaXMsIFNXVC5CT1JERVIpOworCQkJCWlmKGZpeGVkU2l6ZSkKKwkJCQkJbGFiLnNldFRleHQocm93TmFtZXNbcl0pOworCQkJCWVsc2UKKwkJCQkJbGFiLnNldFRleHQoIiIpOworCQkJCUdyaWREYXRhIGdkID0gbmV3IEdyaWREYXRhKCk7CisJCQkJZ2QuaG9yaXpvbnRhbEFsaWdubWVudCA9IEdyaWREYXRhLkZJTEw7CisJCQkJLy9nZC5ncmFiRXhjZXNzSG9yaXpvbnRhbFNwYWNlID0gdHJ1ZTsKKwkJCQlsYWIuc2V0TGF5b3V0RGF0YShnZCk7CisJCQkJaWYoZml4ZWRTaXplKWxhYi5zZXRCYWNrZ3JvdW5kKGNvbFJvd0hlYWRlckNvbHVtbnMpOworCQkJCWVsc2UgbGFiLnNldEJhY2tncm91bmQobmV3IENvbG9yKG51bGwsIDI1NSwgMjU1LCAyNTUpKTsKKwkJCQlpZihmaXhlZFNpemUpYWRkQm9yZGVyKGxhYik7CisJCQkJZW1wdHlMYWJlbHMuYWRkKGxhYik7CisJCQl9CisJCQkKKwkJCWZvcihpbnQgYz0wO2M8Y29sdW1uczsrK2MpIHsKKwkJCQlUZXh0IHQgPSBhZGRUZXh0RmllbGQoKTsKKwkJCQlpbnQgaW5kZXggPSByKmNvbHVtbnMrYzsKKwkJCQlpZihleGlzdGluZ1ZhbHMgIT0gbnVsbCAmJiBleGlzdGluZ1ZhbHMubGVuZ3RoID4gaW5kZXgpCisJCQkJCXQuc2V0VGV4dChleGlzdGluZ1ZhbHNbaW5kZXhdKTsKKwkJCX0KKwkJfSAvLyBmb3IgZWFjaCByb3cKKwkKKwkJaWYoZml4ZWRTaXplID09IGZhbHNlKSB7CisJCQljdXJyZW50UGx1c0J1dHRvbiA9IGFkZFBsdXNCdXR0b24oKTsKKwkJCWN1cnJlbnRNaW51c0J1dHRvbiA9IGFkZE1pbnVzQnV0dG9uKCk7CisJCQlpZihyb3dzIDwgMiljdXJyZW50TWludXNCdXR0b24uc2V0RW5hYmxlZChmYWxzZSk7CisJCX0KKwl9CisJCisJVGV4dCBhZGRUZXh0RmllbGQoKSB7CisJCWZpbmFsIFRleHQgdGV4dCA9IG5ldyBUZXh0KHRoaXMsIFNXVC5OT05FKTsKKwkJdGV4dC5zZXRCYWNrZ3JvdW5kKHRleHRCYWNrZ3JvdW5kQ29sdW1ucyk7CisJCXRleHQuc2V0Rm9yZWdyb3VuZCh0ZXh0Qm9yZGVyQ29sb3IpOworCQorCQlHcmlkRGF0YSBnZCA9IG5ldyBHcmlkRGF0YSgpOworCQlnZC5ob3Jpem9udGFsQWxpZ25tZW50ID0gR3JpZERhdGEuRklMTDsKKwkJZ2QuZ3JhYkV4Y2Vzc0hvcml6b250YWxTcGFjZSA9IGZhbHNlOworCQlnZC5ncmFiRXhjZXNzVmVydGljYWxTcGFjZSA9IGZhbHNlOworCQlnZC5ob3Jpem9udGFsSW5kZW50ID0gMTsKKwkJZ2QudmVydGljYWxJbmRlbnQgPSAxOworCQkKKwkJdGV4dC5zZXRMYXlvdXREYXRhKGdkKTsKKwkJYWRkQm9yZGVyKHRleHQpOworCQl0ZXh0V2lkZ2V0cy5hZGQodGV4dCk7CisJCXRleHRWYWx1ZXMuYWRkKCIiKTsKKwkJCisJCXRleHQuYWRkTW9kaWZ5TGlzdGVuZXIobmV3IE1vZGlmeUxpc3RlbmVyKCkgeworCQkJCisJCQlwdWJsaWMgdm9pZCBtb2RpZnlUZXh0KE1vZGlmeUV2ZW50IGFyZzApIHsKKwkJCQlib29sZWFuIHByb2JsZW0gPSBmYWxzZTsKKwkJCQlmb3IoVGV4dCB0Ok1hdHJpeEVkaXRvcldpZGdldC50aGlzLnRleHRXaWRnZXRzKSB7CisJCQkJCVN0cmluZyB2YWwgPSB0LmdldFRleHQoKS50cmltKCk7CisJCQkJCWlmKCF2YWxpZGF0b3IudmFsaWRhdGVWYWx1ZSh2YWwpKSB7CisJCQkJCQlwcm9ibGVtID0gdHJ1ZTsKKwkJCQkJCXN0YXR1cy5zZXRUZXh0KE1lc3NhZ2VGb3JtYXQuZm9ybWF0KG9yZy5lY2xpcHNlLnN0ZW0udWkud2l6YXJkcy5NZXNzYWdlcy5nZXRTdHJpbmcoIk1hdHJpeC5pbnZhbGlkLnZhbHVlIiksIHZhbCkpOworCQkJCQkJc3RhdHVzLnBhY2sodHJ1ZSk7CisJCQkJCQlicmVhazsKKwkJCQkJfQorCQkJCX0KKwkJCQlpZighcHJvYmxlbSkgeworCQkJCQlzdGF0dXMuc2V0VGV4dCgiIik7CisJCQkJCXN0YXR1cy5wYWNrKHRydWUpOworCQkJCQlmaXJlRXZlbnQobmV3IE1hdHJpeEVkaXRvckV2ZW50KFNUQVRVUy5PS0FZKSk7CisJCQkJfSBlbHNlIGZpcmVFdmVudChuZXcgTWF0cml4RWRpdG9yRXZlbnQoU1RBVFVTLklOVkFMSURfVkFMVUUpKTsKKwkJCQkKKwkJCQlpbnQgaW5kZXggPSB0ZXh0V2lkZ2V0cy5pbmRleE9mKHRleHQpOworCQkJCXRleHRWYWx1ZXMuc2V0KGluZGV4LCB0ZXh0LmdldFRleHQoKSk7CisJCQl9CisJCX0pOworCQlyZXR1cm4gdGV4dDsKKwl9CisJCisJQnV0dG9uIGFkZFBsdXNCdXR0b24oKSB7CisJCUJ1dHRvbiBwbHVzQnV0dG9uID0gbmV3IEJ1dHRvbih0aGlzLCBTV1QuTk9ORSk7CisJCUdyaWREYXRhIGdkID0gbmV3IEdyaWREYXRhKCk7CisJCXBsdXNCdXR0b24uc2V0VGV4dChNZXNzYWdlcy5nZXRTdHJpbmcoIk1hdHJpeC5kaWFsb2cucGx1cyIpKTsKKwkJcGx1c0J1dHRvbi5zZXRMYXlvdXREYXRhKGdkKTsKKwkKKwkJcGx1c0J1dHRvbi5hZGRTZWxlY3Rpb25MaXN0ZW5lcihuZXcgU2VsZWN0aW9uTGlzdGVuZXIoKSB7CQkKKwkJCXB1YmxpYyB2b2lkIHdpZGdldFNlbGVjdGVkKFNlbGVjdGlvbkV2ZW50IGFyZzApIHsKKwkJCQljdXJyZW50TWludXNCdXR0b24uc2V0RW5hYmxlZCh0cnVlKTsKKwkJCQkrK2R5bnJvd3M7CisJCQkJCisJCQkJTGFiZWwgbGFiID0gbmV3IExhYmVsKE1hdHJpeEVkaXRvcldpZGdldC50aGlzLCBTV1QuQk9SREVSKTsKKwkJCQlsYWIuc2V0VGV4dCgiIik7CisJCQkJR3JpZERhdGEgZ2QgPSBuZXcgR3JpZERhdGEoKTsKKwkJCQlnZC5ob3Jpem9udGFsQWxpZ25tZW50ID0gR3JpZERhdGEuRklMTDsKKwkJCQlsYWIuc2V0TGF5b3V0RGF0YShnZCk7CisJCQkJbGFiLnNldEJhY2tncm91bmQobmV3IENvbG9yKG51bGwsIDI1NSwgMjU1LCAyNTUpKTsKKwkJCQllbXB0eUxhYmVscy5hZGQobGFiKTsKKwkJCQlUZXh0IGxhc3RUZXh0ID0gbnVsbDsKKwkJCQlmb3IoaW50IGk9MDtpPGNvbHVtbnM7KytpKSBsYXN0VGV4dCA9IGFkZFRleHRGaWVsZCgpOworCQkJCQorCQkJCWN1cnJlbnRQbHVzQnV0dG9uLm1vdmVCZWxvdyhsYXN0VGV4dCk7CisJCQkJY3VycmVudE1pbnVzQnV0dG9uLm1vdmVCZWxvdyhjdXJyZW50UGx1c0J1dHRvbik7CisJCQkJbGFzdFRleHQuc2V0VGV4dChsYXN0VGV4dC5nZXRUZXh0KCkpOyAvLyBJbnZva2UgdmFsaWRhdG9yCisJCQkJTWF0cml4RWRpdG9yV2lkZ2V0LnRoaXMubGF5b3V0KHRydWUpOworCQkJCU1hdHJpeEVkaXRvcldpZGdldC50aGlzLnBhY2sodHJ1ZSk7CisJCQkJTWF0cml4RWRpdG9yV2lkZ2V0LnRoaXMuZ2V0UGFyZW50KCkucGFjayh0cnVlKTsKKwkJCX0KKwkJCQorCQkJcHVibGljIHZvaWQgd2lkZ2V0RGVmYXVsdFNlbGVjdGVkKFNlbGVjdGlvbkV2ZW50IGFyZzApIHsKKwkJCQkvLyBUT0RPIEF1dG8tZ2VuZXJhdGVkIG1ldGhvZCBzdHViCisJCQkJCisJCQl9CisJCX0pOworCQlyZXR1cm4gcGx1c0J1dHRvbjsKKwl9CisJCisJQnV0dG9uIGFkZE1pbnVzQnV0dG9uKCkgeworCQlCdXR0b24gbWludXNCdXR0b24gPSBuZXcgQnV0dG9uKHRoaXMsIFNXVC5OT05FKTsKKwkJR3JpZERhdGEgZ2QgPSBuZXcgR3JpZERhdGEoKTsKKwkJbWludXNCdXR0b24uc2V0VGV4dChNZXNzYWdlcy5nZXRTdHJpbmcoIk1hdHJpeC5kaWFsb2cubWludXMiKSk7CisJCW1pbnVzQnV0dG9uLnNldExheW91dERhdGEoZ2QpOworCQorCQltaW51c0J1dHRvbi5hZGRTZWxlY3Rpb25MaXN0ZW5lcihuZXcgU2VsZWN0aW9uTGlzdGVuZXIoKSB7CisJCQlwdWJsaWMgdm9pZCB3aWRnZXRTZWxlY3RlZChTZWxlY3Rpb25FdmVudCBhcmcwKSB7CisJCQkJZm9yKGludCBpPShkeW5yb3dzLTEpKmNvbHVtbnM7aTwoZHlucm93cy0xKSpjb2x1bW5zK2NvbHVtbnM7KytpKSB0ZXh0V2lkZ2V0cy5nZXQoaSkuZGlzcG9zZSgpOworCQkJCWZvcihpbnQgaT0wO2k8Y29sdW1uczsrK2kpIHt0ZXh0V2lkZ2V0cy5yZW1vdmUoKGR5bnJvd3MtMSkqY29sdW1ucyk7dGV4dFZhbHVlcy5yZW1vdmUoKGR5bnJvd3MtMSkqY29sdW1ucyk7fQorCQkJCUxhYmVsIGVsYWIgPSBlbXB0eUxhYmVscy5nZXQoZHlucm93cy0xKTsKKwkJCQlUZXh0IGxhc3RUZXh0ID0gdGV4dFdpZGdldHMuZ2V0KChkeW5yb3dzLTIpKmNvbHVtbnMrY29sdW1ucy0xKTsKKwkJCQljdXJyZW50UGx1c0J1dHRvbi5tb3ZlQmVsb3cobGFzdFRleHQpOworCQkJCWN1cnJlbnRNaW51c0J1dHRvbi5tb3ZlQmVsb3coY3VycmVudFBsdXNCdXR0b24pOworCQkJCWVsYWIuZGlzcG9zZSgpOworCQkJCWVtcHR5TGFiZWxzLnJlbW92ZShlbGFiKTsKKwkJCQktLWR5bnJvd3M7CisJCQkJaWYoZHlucm93cyA9PSAxKQorCQkJCQljdXJyZW50TWludXNCdXR0b24uc2V0RW5hYmxlZChmYWxzZSk7CisJCQkJCisJCQkJbGFzdFRleHQuc2V0VGV4dChsYXN0VGV4dC5nZXRUZXh0KCkpOyAvLyBJbnZva2UgdmFsaWRhdG9yCisJCQkJCisJCQkJTWF0cml4RWRpdG9yV2lkZ2V0LnRoaXMubGF5b3V0KHRydWUpOworCQkJCU1hdHJpeEVkaXRvcldpZGdldC50aGlzLnBhY2sodHJ1ZSk7CisJCQkJTWF0cml4RWRpdG9yV2lkZ2V0LnRoaXMuZ2V0UGFyZW50KCkucGFjayh0cnVlKTsKKwkJCX0KKwkJCQorCQkJcHVibGljIHZvaWQgd2lkZ2V0RGVmYXVsdFNlbGVjdGVkKFNlbGVjdGlvbkV2ZW50IGFyZzApIHsKKwkJCQkvLyBUT0RPIEF1dG8tZ2VuZXJhdGVkIG1ldGhvZCBzdHViCisJCQkJCisJCQl9CisJCX0pOworCQlyZXR1cm4gbWludXNCdXR0b247CisJfQorCQorCXByaXZhdGUgdm9pZCBhZGRCb3JkZXIoZmluYWwgQ29udHJvbCB0KSB7CisJCS8vIEFkZCBhIGJvcmRlciBhcm91bmQgdGhlIHRleHQgYm94CisJCXQuYWRkUGFpbnRMaXN0ZW5lciggbmV3IFBhaW50TGlzdGVuZXIoKSB7CisJCQkKKwkJCXB1YmxpYyB2b2lkIHBhaW50Q29udHJvbChQYWludEV2ZW50IGV2dCkgeworCQkJCVBvaW50IHMgPSB0LmdldFNpemUoKTsKKwkJCQlDb2xvciBjID0gZXZ0LmdjLmdldEZvcmVncm91bmQoKTsKKworCQkJCWV2dC5nYy5zZXRGb3JlZ3JvdW5kKHQuZ2V0RGlzcGxheSgpLmdldFN5c3RlbUNvbG9yKFNXVC5DT0xPUl9CTEFDSykpOworCQkJICAgICAgIGV2dC5nYy5kcmF3UmVjdGFuZ2xlKDAsMCxzLngtMSxzLnktMSk7CisJCQkgICAgICAgZXZ0LmdjLnNldEZvcmVncm91bmQoYyk7CisJCQkgICB9CisKKwkJCX0gKTsKKwl9CisJCisJcHVibGljIHZvaWQgYWRkTGlzdGVuZXIoTWF0cml4RWRpdG9yTGlzdGVuZXIgbGlzdGVuZXIpIHt0aGlzLmxpc3RlbmVycy5hZGQobGlzdGVuZXIpO30KKwkKKwl2b2lkIGZpcmVFdmVudChNYXRyaXhFZGl0b3JFdmVudCBldnQpIHtmb3IoTWF0cml4RWRpdG9yTGlzdGVuZXIgbDpsaXN0ZW5lcnMpIGwuZXZlbnRSZWNlaXZlZChldnQpO30KKwkKKwlwdWJsaWMgQXJyYXlMaXN0PFN0cmluZz4gZ2V0VGV4dFZhbHVlcygpIHsKKwkJcmV0dXJuIHRoaXMudGV4dFZhbHVlczsKKwl9CisJCisJcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nIFtdIGFyZ3MpIHsKKwkJRGlzcGxheSBkaXNwbGF5ID0gbmV3IERpc3BsYXkoKTsKKwkJU2hlbGwgc2hlbGwgPSBuZXcgU2hlbGwoZGlzcGxheSk7CisJCQorCQlGaWxsTGF5b3V0IGZsID0gbmV3IEZpbGxMYXlvdXQoKTsKKwkJZmwudHlwZSA9IFNXVC5WRVJUSUNBTDsKKwkJc2hlbGwuc2V0TGF5b3V0KGZsKTsKKwkJCisvLwkJU3RyaW5nIFtdIHJuID0geyJBR0UwLTEwIiwgIkFHRTExLTM1IiwiQUdFMzYtMTAwIn07CisvLwkJU3RyaW5nIFtdIGNuID0geyJBR0UwLTEwIiwgIkFHRTExLTM1IiwiQUdFMzYtMTAwIn07CisJCQorLy8JCU1hdHJpeEVkaXRvcldpZGdldCBtID0gbmV3IE1hdHJpeEVkaXRvcldpZGdldChzaGVsbCwgU1dULlBVU0gsIChzaG9ydCkzLCAoc2hvcnQpMywgcm4sIGNuLCB0cnVlLCBuZXcgTWF0cml4RWRpdG9yVmFsaWRhdG9yKCkgeworCQorCQlTdHJpbmcgW10gY24gPSB7IlBvcHVsYXRpb24gR3JvdXAifTsKKwkJCQorCQlNYXRyaXhFZGl0b3JXaWRnZXQgbSA9IG5ldyBNYXRyaXhFZGl0b3JXaWRnZXQoc2hlbGwsIFNXVC5QVVNILCAoc2hvcnQpMSwgKHNob3J0KTEsIG51bGwsIGNuLCBudWxsLCBmYWxzZSwgbmV3IE1hdHJpeEVkaXRvclZhbGlkYXRvcigpIHsKKwkJCisJCQlwdWJsaWMgYm9vbGVhbiB2YWxpZGF0ZVZhbHVlKFN0cmluZyB2YWwpIHsKKwkJCQlpZih2YWwgPT0gbnVsbCB8fCB2YWwudHJpbSgpLmVxdWFscygiIikpIHJldHVybiB0cnVlOworCQkJCXRyeSB7CisJCQkJCURvdWJsZS5wYXJzZURvdWJsZSh2YWwudHJpbSgpKTsKKwkJCQl9IGNhdGNoKE51bWJlckZvcm1hdEV4Y2VwdGlvbiBuZmUpIHsKKwkJCQkJcmV0dXJuIGZhbHNlOworCQkJCX0KKwkJCQlyZXR1cm4gdHJ1ZTsKKwkJCX0KKwkJfSk7CisJCQorCQltLmFkZExpc3RlbmVyKG5ldyBNYXRyaXhFZGl0b3JXaWRnZXQuTWF0cml4RWRpdG9yTGlzdGVuZXIoKSB7CisJCQkKKwkJCXB1YmxpYyB2b2lkIGV2ZW50UmVjZWl2ZWQoTWF0cml4RWRpdG9yRXZlbnQgZXZlbnQpIHsKKwkJCQlpZihldmVudC5zdGF0dXMgPT0gTWF0cml4RWRpdG9yV2lkZ2V0LlNUQVRVUy5PS0FZKSBBY3RpdmF0b3IubG9nSW5mb3JtYXRpb24oIm9rYXkiKTsKKwkJCQllbHNlIEFjdGl2YXRvci5sb2dJbmZvcm1hdGlvbigiaW52YWxpZCIpOworCQkJfQorCQl9KTsKKwkJc2hlbGwucGFjaygpOworCQlzaGVsbC5vcGVuKCk7CisJCQorCQkgd2hpbGUgKCFzaGVsbC5pc0Rpc3Bvc2VkKCkpIHsKKwkgICAgICAgICAgICBpZiAoIWRpc3BsYXkucmVhZEFuZERpc3BhdGNoKCkpIGRpc3BsYXkuc2xlZXAoKTsKKwkgICAgICAgIH0KKwl9CisJCisJcHVibGljIHN0YXRpYyBjbGFzcyBNYXRyaXhFZGl0b3JFdmVudCB7CisJCXB1YmxpYyBTVEFUVVMgc3RhdHVzOworCQkKKwkJcHVibGljIE1hdHJpeEVkaXRvckV2ZW50KFNUQVRVUyBzKSB7dGhpcy5zdGF0dXMgPSBzO30KKwl9CisJCisJcHVibGljIGludGVyZmFjZSBNYXRyaXhFZGl0b3JMaXN0ZW5lciB7CisJCXB1YmxpYyB2b2lkIGV2ZW50UmVjZWl2ZWQoTWF0cml4RWRpdG9yRXZlbnQgZXZlbnQpOworCX0KKwkKKwlwdWJsaWMgaW50ZXJmYWNlIE1hdHJpeEVkaXRvclZhbGlkYXRvciB7CisKKwkJLyoqCisJCSAqIFZhbGlkYXRlLiBSZXR1cm4gZmFsc2UgaWYgdGhlIHZhbHVlIGlzIGludmFsaWQKKwkJICogQHBhcmFtIHZhbAorCQkgKiBAcmV0dXJuIEZhbHNlIGlmIGludmFsaWQKKwkJICovCisJCXB1YmxpYyBib29sZWFuIHZhbGlkYXRlVmFsdWUoU3RyaW5nIHZhbCk7CisJfQorfQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3dpZGdldHMvUGFyYW1ldGVyUGlja2VyRGlhbG9nLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvd2lkZ2V0cy9QYXJhbWV0ZXJQaWNrZXJEaWFsb2cuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYjhmYTI4Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3dpZGdldHMvUGFyYW1ldGVyUGlja2VyRGlhbG9nLmphdmEKQEAgLTAsMCArMSwyOTYgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS51aS53aWRnZXRzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDEwIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCisKK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OworCitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUZpbGU7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUZvbGRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUmVzb3VyY2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkNvcmVFeGNlcHRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVBdHRyaWJ1dGU7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVEYXRhVHlwZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRVN0cnVjdHVyYWxGZWF0dXJlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uSWRlbnRpZmlhYmxlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udWkuVXRpbGl0eTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnVpLndpemFyZHMuTWVzc2FnZXM7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LlNXVDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLlNlbGVjdGlvbkV2ZW50OworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuU2VsZWN0aW9uTGlzdGVuZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmdyYXBoaWNzLlBvaW50OworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5sYXlvdXQuR3JpZERhdGE7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5HcmlkTGF5b3V0OworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkJ1dHRvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuRGlhbG9nOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkRpc3BsYXk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuRXZlbnQ7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuTGFiZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuTGlzdGVuZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuU2hlbGw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuVGFibGU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuVGFibGVJdGVtOworCitwdWJsaWMgY2xhc3MgUGFyYW1ldGVyUGlja2VyRGlhbG9nIGV4dGVuZHMgRGlhbG9nIHsKKworCXByaXZhdGUgU3RyaW5nIHRpdGxlOworCQorCS8vU3RyaW5nIHByZXZMb2MgPSBudWxsOworCUlQcm9qZWN0IHByb2plY3Q7CisJCisJLy8KKwlDbGFzcyByZXN0cmljdENsYXNzOworCWJvb2xlYW4gY2FuY2VsUHJlc3NlZCA9IGZhbHNlOworCXByb3RlY3RlZCBTaGVsbCBzaGVsbDsKKwlDb21wb3NpdGUgbWFpbkNvbXBvc2l0ZTsKKwkKKwkKKwlwcml2YXRlIEFycmF5TGlzdDxJZGVudGlmaWFibGU+cHJvamVjdE9iamVjdHM7CisJcHJpdmF0ZSBBcnJheUxpc3Q8RUF0dHJpYnV0ZT5vYmplY3RGZWF0dXJlczsKKwkKKwlwcml2YXRlIElkZW50aWZpYWJsZSBzZWxlY3RlZE9iamVjdDsKKwlwcml2YXRlIEVBdHRyaWJ1dGUgc2VsZWN0ZWRBdHRyaWJ1dGU7CisJCisJcHVibGljIFBhcmFtZXRlclBpY2tlckRpYWxvZyAoU2hlbGwgcGFyZW50LCBpbnQgc3R5bGUsIFN0cmluZyB0aXRsZSwgSVByb2plY3QgcCwgQ2xhc3MgcmVzdHJpY3RDbGFzcykgeworCQlzdXBlciAocGFyZW50LCBzdHlsZSk7CisJCS8vc2V0U2hlbGxTdHlsZShTV1QuRElBTE9HX1RSSU0gfCBTV1QuUkVTSVpFIHwgU1dULk1BWCB8IFNXVC5BUFBMSUNBVElPTl9NT0RBTCk7CisJCXRoaXMudGl0bGUgPSB0aXRsZTsKKwkJLy90aGlzLnByZXZMb2MgPSBwcmV2TG9jOworCQl0aGlzLnByb2plY3QgPSBwOworCQl0aGlzLnJlc3RyaWN0Q2xhc3MgPSByZXN0cmljdENsYXNzOworCX0KKwkKKwkvKioKKwkgKiBvcGVuIHRoZSBtb2RhbCB3aW5kb3cuIAorCSAqIEByZXR1cm4gVGhlIFN0cmluZ1tdIHdpdGggcmVzdWx0cywgb3IgbnVsbCBpZiBjYW5jZWwgd2FzIHByZXNzZWQuCisJICovCisJcHVibGljIE9iamVjdCBbXSBvcGVuICgpIHsKKwkJU2hlbGwgcGFyZW50ID0gZ2V0UGFyZW50KCk7CisJCXNoZWxsID0gbmV3IFNoZWxsKHBhcmVudCwgU1dULkRJQUxPR19UUklNIHwgU1dULk1BWCB8IFNXVC5BUFBMSUNBVElPTl9NT0RBTCk7CisJCQorCQlmaW5hbCBQb2ludCBtaW5TID0gbmV3IFBvaW50KDY3NywgNDEwKTsKKy8vCQlzaGVsbC5zZXRNaW5pbXVtU2l6ZShtaW5TKTsKKwkJCisJCUdyaWRMYXlvdXQgZ2wxID0gbmV3IEdyaWRMYXlvdXQoKTsKKwkJZ2wxLm51bUNvbHVtbnMgPSAxOworCQlzaGVsbC5zZXRMYXlvdXQoZ2wxKTsKKwkJc2hlbGwuc2V0VGV4dCh0aXRsZSk7CisJCQorCQkvL21haW5Db21wb3NpdGUgPSBuZXcgQ29tcG9zaXRlKHNoZWxsLCBTV1QuTUFYKTsKKwkJbWFpbkNvbXBvc2l0ZSA9IG5ldyBDb21wb3NpdGUoc2hlbGwsIFNXVC5SRVNJWkUgfCBTV1QuTUFYKTsKKwkJCisJCQorCQlzaGVsbC5hZGRMaXN0ZW5lcihTV1QuUmVzaXplLCBuZXcgTGlzdGVuZXIoKSB7CisJCSAgICAgIHB1YmxpYyB2b2lkIGhhbmRsZUV2ZW50KEV2ZW50IGUpIHsJCSAgICAgICAgCisJCSAgICAJICBzaGVsbC5wYWNrKCk7IC8vIHJlc2V0cyB0aGUgc2l6ZSBiYWNrIHRvIHRoZSBvcmlnaW5hbCAhIQorCQkgICAgICB9CisJCSAgICB9KTsKKwkJCisJCUdyaWRMYXlvdXQgbWFpbkxheW91dCA9IG5ldyBHcmlkTGF5b3V0KCk7CisJCW1haW5MYXlvdXQubnVtQ29sdW1ucyA9IDI7CisJCW1haW5MYXlvdXQubWFrZUNvbHVtbnNFcXVhbFdpZHRoID0gdHJ1ZTsKKwkJCisJCW1haW5Db21wb3NpdGUuc2V0TGF5b3V0KG1haW5MYXlvdXQpOworLy8JCWZpbmFsIEdyaWREYXRhIGdyaWREYXRhID0gbmV3IEdyaWREYXRhKEdyaWREYXRhLkZJTEwsIEdyaWREYXRhLkZJTEwsIHRydWUsIGZhbHNlKTsKKwkJLy9maW5hbCBHcmlkRGF0YSBncmlkRGF0YSA9IG5ldyBHcmlkRGF0YShTV1QuQ0VOVEVSKTsKKy8vCQlncmlkRGF0YS5oZWlnaHRIaW50ID0gMzc4OworLy8JCWdyaWREYXRhLndpZHRoSGludCA9IDY2NzsKKworLy8JCW1haW5Db21wb3NpdGUuc2V0TGF5b3V0RGF0YShncmlkRGF0YSk7CisJCQorCQlMYWJlbCBsYWIxID0gbmV3IExhYmVsKG1haW5Db21wb3NpdGUsIFNXVC5OT05FKTsKKwkJbGFiMS5zZXRUZXh0KE1lc3NhZ2VzLmdldFN0cmluZygiUFAuSURFTlRTIikpOworCQlHcmlkRGF0YSBnZCA9IG5ldyBHcmlkRGF0YSgpOworCQlnZC5ob3Jpem9udGFsU3BhbiA9IDE7CisJCWxhYjEuc2V0TGF5b3V0RGF0YShnZCk7CisJCQorCQlMYWJlbCBsYWIyID0gbmV3IExhYmVsKG1haW5Db21wb3NpdGUsIFNXVC5OT05FKTsKKwkJbGFiMi5zZXRUZXh0KE1lc3NhZ2VzLmdldFN0cmluZygiUFAuUFJPUCIpKTsKKwkJR3JpZERhdGEgZ2QyID0gbmV3IEdyaWREYXRhKCk7CisJCWdkMi5ob3Jpem9udGFsU3BhbiA9IDE7CisJCWxhYjIuc2V0TGF5b3V0RGF0YShnZDIpOworCQkKKwkJZmluYWwgVGFibGUgb2JqZWN0VGFibGUgPSBuZXcgVGFibGUobWFpbkNvbXBvc2l0ZSwgU1dULk5PTkUpOworCQlHcmlkRGF0YSBnZDMgPSBuZXcgR3JpZERhdGEoKTsKKwkJZ2QzLmhvcml6b250YWxTcGFuID0gMTsKKwkJZ2QzLmdyYWJFeGNlc3NIb3Jpem9udGFsU3BhY2UgPSB0cnVlOworCQlnZDMuaG9yaXpvbnRhbEFsaWdubWVudCA9IFNXVC5GSUxMOworCQlnZDMuZ3JhYkV4Y2Vzc1ZlcnRpY2FsU3BhY2UgPSB0cnVlOworCQlnZDMudmVydGljYWxBbGlnbm1lbnQgPSBTV1QuRklMTDsKKwkJb2JqZWN0VGFibGUuc2V0TGF5b3V0RGF0YShnZDMpOworCQlwcm9qZWN0T2JqZWN0cyA9IGdldFByb2plY3RPYmplY3RzKG51bGwpOworCQlmb3IoSWRlbnRpZmlhYmxlIGlkOnByb2plY3RPYmplY3RzKSB7CisJCQlUYWJsZUl0ZW0gbmV3Um93PSBuZXcgVGFibGVJdGVtKG9iamVjdFRhYmxlLCBTV1QuTk9ORSk7CisJCQluZXdSb3cuc2V0VGV4dChpZC5nZXRVUkkoKS5sYXN0U2VnbWVudCgpKTsKKwkJfQorCQkKKwkJCisJCQorCQlmaW5hbCBUYWJsZSBwcm9wZXJ0eVRhYmxlID0gbmV3IFRhYmxlKG1haW5Db21wb3NpdGUsIFNXVC5OT05FKTsKKwkJR3JpZERhdGEgZ2Q0ID0gbmV3IEdyaWREYXRhKCk7CisJCWdkNC5ob3Jpem9udGFsU3BhbiA9IDE7CisJCWdkNC5ncmFiRXhjZXNzSG9yaXpvbnRhbFNwYWNlID0gdHJ1ZTsKKwkJZ2Q0Lmhvcml6b250YWxBbGlnbm1lbnQgPSBTV1QuRklMTDsKKwkJZ2Q0LmdyYWJFeGNlc3NWZXJ0aWNhbFNwYWNlID0gdHJ1ZTsKKwkJZ2Q0LnZlcnRpY2FsQWxpZ25tZW50ID0gU1dULkZJTEw7CisJCQorCQlwcm9wZXJ0eVRhYmxlLnNldExheW91dERhdGEoZ2Q0KTsKKworCQkJCisJCQorCQlCdXR0b24gY2FuY2VsQnV0dG9uID0gbmV3IEJ1dHRvbihtYWluQ29tcG9zaXRlLCBTV1QuTk9ORSk7CisJCUdyaWREYXRhIGNnID0gbmV3IEdyaWREYXRhKCk7CisJCWNhbmNlbEJ1dHRvbi5zZXRUZXh0KE1lc3NhZ2VzLmdldFN0cmluZygiTkxvY1dpekNhbmNlbCIpKTsKKwkJY2FuY2VsQnV0dG9uLnNldExheW91dERhdGEoY2cpOworCQorCQlmaW5hbCBCdXR0b24gb2theUJ1dHRvbiA9IG5ldyBCdXR0b24obWFpbkNvbXBvc2l0ZSwgU1dULk5PTkUpOworCQlHcmlkRGF0YSBva2cgPSBuZXcgR3JpZERhdGEoKTsKKwkJb2theUJ1dHRvbi5zZXRUZXh0KE1lc3NhZ2VzLmdldFN0cmluZygiTkxvY1dpek9rIikpOworCQlva2F5QnV0dG9uLnNldExheW91dERhdGEob2tnKTsKKwkJb2theUJ1dHRvbi5zZXRFbmFibGVkKGZhbHNlKTsKKwkKKwkJb2JqZWN0VGFibGUuYWRkU2VsZWN0aW9uTGlzdGVuZXIobmV3IFNlbGVjdGlvbkxpc3RlbmVyKCkgeworCQkJCisJCQlwdWJsaWMgdm9pZCB3aWRnZXRTZWxlY3RlZChTZWxlY3Rpb25FdmVudCBlKSB7CisJCQkJaW50IGluZGV4ID0gb2JqZWN0VGFibGUuZ2V0U2VsZWN0aW9uSW5kZXgoKTsKKwkJCQlJZGVudGlmaWFibGUgc2VsZWN0ZWRJZGVudCA9IHByb2plY3RPYmplY3RzLmdldChpbmRleCk7CisJCQkJcG9wdWxhdGVPYmplY3RQcm9wZXJ0aWVzKHNlbGVjdGVkSWRlbnQpOworCQkJCQorCQkJCXByb3BlcnR5VGFibGUucmVtb3ZlQWxsKCk7CisJCQkJZm9yKEVTdHJ1Y3R1cmFsRmVhdHVyZSBlc2Y6b2JqZWN0RmVhdHVyZXMpIHsKKwkJCQkJVGFibGVJdGVtIG5ld1Jvdz0gbmV3IFRhYmxlSXRlbShwcm9wZXJ0eVRhYmxlLCBTV1QuTk9ORSk7CisJCQkJCW5ld1Jvdy5zZXRUZXh0KGVzZi5nZXROYW1lKCkpOworCQkJCX0KKwkJCQlva2F5QnV0dG9uLnNldEVuYWJsZWQoZmFsc2UpOworCQkJfQorCQkJCisKKwkJCXB1YmxpYyB2b2lkIHdpZGdldERlZmF1bHRTZWxlY3RlZChTZWxlY3Rpb25FdmVudCBlKSB7CisJCQkJLy8gVE9ETyBBdXRvLWdlbmVyYXRlZCBtZXRob2Qgc3R1YgorCQkJCQorCQkJfQorCQl9KTsKKworCQkKKwkKKworCQlwcm9wZXJ0eVRhYmxlLmFkZFNlbGVjdGlvbkxpc3RlbmVyKG5ldyBTZWxlY3Rpb25MaXN0ZW5lcigpIHsKKwkJCQorCQkJcHVibGljIHZvaWQgd2lkZ2V0U2VsZWN0ZWQoU2VsZWN0aW9uRXZlbnQgZSkgeworCQkJCWludCBpbmRleCA9IHByb3BlcnR5VGFibGUuZ2V0U2VsZWN0aW9uSW5kZXgoKTsKKwkJCQlzZWxlY3RlZEF0dHJpYnV0ZSA9IG9iamVjdEZlYXR1cmVzLmdldChpbmRleCk7CisJCQkJaW50IGluZGV4MiA9IG9iamVjdFRhYmxlLmdldFNlbGVjdGlvbkluZGV4KCk7CisJCQkJc2VsZWN0ZWRPYmplY3QgPSBwcm9qZWN0T2JqZWN0cy5nZXQoaW5kZXgyKTsKKwkJCQlva2F5QnV0dG9uLnNldEVuYWJsZWQodHJ1ZSk7CisJCQl9CisJCQkKKwkJCXB1YmxpYyB2b2lkIHdpZGdldERlZmF1bHRTZWxlY3RlZChTZWxlY3Rpb25FdmVudCBlKSB7CisJCQkJLy8gVE9ETyBBdXRvLWdlbmVyYXRlZCBtZXRob2Qgc3R1YgorCQkJCQorCQkJfQorCQl9KTsKKwkJLy8gZ2V0U2hlbGwoKS5wYWNrKCk7CisJCXNoZWxsLnBhY2soKTsKKwkJc2hlbGwub3BlbigpOworCQkKKwkJCisJCW9rYXlCdXR0b24uYWRkU2VsZWN0aW9uTGlzdGVuZXIoIG5ldyBTZWxlY3Rpb25MaXN0ZW5lcigpIHsKKwkJCQorCQkJcHVibGljIHZvaWQgd2lkZ2V0U2VsZWN0ZWQoU2VsZWN0aW9uRXZlbnQgYXJnMCkgeworCQkJCWNhbmNlbFByZXNzZWQ9ZmFsc2U7CisJCQkJc2hlbGwuZGlzcG9zZSgpOworCQkJfQorCQkJCisJCQlwdWJsaWMgdm9pZCB3aWRnZXREZWZhdWx0U2VsZWN0ZWQoU2VsZWN0aW9uRXZlbnQgYXJnMCkgeworCQkJCS8vIFRPRE8gQXV0by1nZW5lcmF0ZWQgbWV0aG9kIHN0dWIKKwkJCQkKKwkJCX0KKwkJfSk7CisJCQorCQljYW5jZWxCdXR0b24uYWRkU2VsZWN0aW9uTGlzdGVuZXIoIG5ldyBTZWxlY3Rpb25MaXN0ZW5lcigpIHsKKwkJCQorCQkJcHVibGljIHZvaWQgd2lkZ2V0U2VsZWN0ZWQoU2VsZWN0aW9uRXZlbnQgYXJnMCkgeworCQkJCWNhbmNlbFByZXNzZWQ9dHJ1ZTsKKwkJCQlzaGVsbC5kaXNwb3NlKCk7CisJCQl9CisJCQkKKwkJCXB1YmxpYyB2b2lkIHdpZGdldERlZmF1bHRTZWxlY3RlZChTZWxlY3Rpb25FdmVudCBhcmcwKSB7CisJCQkJLy8gVE9ETyBBdXRvLWdlbmVyYXRlZCBtZXRob2Qgc3R1YgorCQkJCQorCQkJfQorCQl9KTsKKwkJCisJCQorCQlEaXNwbGF5IGRpc3BsYXkgPSBwYXJlbnQuZ2V0RGlzcGxheSgpOworCQl3aGlsZSAoIXNoZWxsLmlzRGlzcG9zZWQoKSkgeworCQlpZiAoIWRpc3BsYXkucmVhZEFuZERpc3BhdGNoKCkpIGRpc3BsYXkuc2xlZXAoKTsKKwkJfQorCQlpZihjYW5jZWxQcmVzc2VkKSByZXR1cm4gbnVsbDsKKwkJT2JqZWN0IFtdIHJldCA9IG5ldyBPYmplY3RbMl07CisJCXJldFswXSA9IHNlbGVjdGVkT2JqZWN0OworCQlyZXRbMV0gPSBzZWxlY3RlZEF0dHJpYnV0ZTsKKwkJcmV0dXJuIHJldDsKKwl9Ly8gb3BlbigpCQorCisJdm9pZCBwb3B1bGF0ZU9iamVjdFByb3BlcnRpZXMoSWRlbnRpZmlhYmxlIHNlbGVjdGVkSWRlbnQpIHsKKwkJb2JqZWN0RmVhdHVyZXMgPSBuZXcgQXJyYXlMaXN0PEVBdHRyaWJ1dGU+KCk7CisJCWZvcihFQXR0cmlidXRlIGVhOnNlbGVjdGVkSWRlbnQuZUNsYXNzKCkuZ2V0RUFsbEF0dHJpYnV0ZXMoKSkgeworCQkJRURhdGFUeXBlIGVzZiA9ZWEuZ2V0RUF0dHJpYnV0ZVR5cGUoKTsKKwkJCWlmKGVzZi5nZXROYW1lKCkuZXF1YWxzKCJFRG91YmxlIikpIC8vIFdlIGNhbiBvbmx5IGhhbmRsZSBkb3VibGUgdmFsdWVzIHJpZ2h0IG5vdworCQkJCW9iamVjdEZlYXR1cmVzLmFkZChlYSk7CisJCQkKKwkJfQorCQkKKwl9CisJCisJLyoqCisJICogVHJhdmVyc2UgdGhlIHByb2plY3QgYW5kIHJldHJpZXZlIGFsbCBvYmplY3RzIHJlc3RyaWN0ZWQgdG8gdGhlIHNwZWNpZmllZCBjbGFzcworCSAqIAorCSAqIEBwYXJhbSBmb2xkZXIgRm9sZGVyLCBvciBudWxsIGZvciBwcm9qZWN0IHJvb3QuCisJICogQHJldHVybiBBcnJheUxpc3Q8T2JqZWN0PiBtYXRjaGluZ09iamVjdHMKKwkgKi8KKwlwcml2YXRlIEFycmF5TGlzdDxJZGVudGlmaWFibGU+IGdldFByb2plY3RPYmplY3RzKElGb2xkZXIgZm9sZGVyKSB7CisJCUFycmF5TGlzdDxJZGVudGlmaWFibGU+cmVzdWx0ID0gbmV3IEFycmF5TGlzdDxJZGVudGlmaWFibGU+KCk7CisJCXRyeSB7CisJCQkKKwkJCUlSZXNvdXJjZSBbXSByZXNvdXJjZXMgPSBudWxsOworCQkJaWYoZm9sZGVyID09IG51bGwpIHJlc291cmNlcyA9IHByb2plY3QubWVtYmVycygpOworCQkJZWxzZSByZXNvdXJjZXMgPSBmb2xkZXIubWVtYmVycygpOworCQkJCisJCQlmb3IoSVJlc291cmNlIHJlOnJlc291cmNlcykgeworCQkJCWlmKHJlIGluc3RhbmNlb2YgSUZvbGRlciAmJiAhcmUuZ2V0TmFtZSgpLmVxdWFscygiUmVjb3JkZWQgU2ltdWxhdGlvbnMiKSkKKwkJCQkJcmVzdWx0LmFkZEFsbChnZXRQcm9qZWN0T2JqZWN0cygoSUZvbGRlcikgcmUpKTsKKwkJCQllbHNlIGlmKHJlIGluc3RhbmNlb2YgSUZpbGUgJiYgIXJlLmdldFJlc291cmNlQXR0cmlidXRlcygpLmlzSGlkZGVuKCkgJiYgIXJlLmdldE5hbWUoKS5zdGFydHNXaXRoKCIuIikpeworCQkJCQkvLyBSZXRyaWV2ZSBpZGVudGlmaWFibGUKKwkJCQkJCisJCQkJCUlkZW50aWZpYWJsZSBpZGVudCA9IFV0aWxpdHkuZ2V0SWRlbnRpZmlhYmxlSWdub3JlRXhjZXB0aW9uKChJRmlsZSlyZSk7CisJCQkJCWlmKGlkZW50ICE9IG51bGwgJiYgaXNDbGFzcyhpZGVudC5nZXRDbGFzcygpLCB0aGlzLnJlc3RyaWN0Q2xhc3MpKQorCQkJCQkJcmVzdWx0LmFkZChpZGVudCk7CisJCQkJfQorCQkJfQorCQkKKwkJfSBjYXRjaCAoQ29yZUV4Y2VwdGlvbiBlKSB7IAorCQkJZS5wcmludFN0YWNrVHJhY2UoKTsKKwkJfQorCQlyZXR1cm4gcmVzdWx0OworCX0KKwkKKwlwcml2YXRlIGJvb2xlYW4gaXNDbGFzcyhDbGFzcyBjLCBDbGFzcyB0YXJnZXQpIHsKKwkJaWYodGFyZ2V0LmVxdWFscyhjKSkgcmV0dXJuIHRydWU7CisJCUNsYXNzIHN1cGVyQyA9IGMuZ2V0U3VwZXJjbGFzcygpOworCQlpZihzdXBlckMgPT0gbnVsbCkgcmV0dXJuIGZhbHNlOworCQlyZXR1cm4gaXNDbGFzcyhzdXBlckMsIHRhcmdldCk7CisJfQorfQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3dpZGdldHMvUHJvcGVydHlTZWxlY3Rvci5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3dpZGdldHMvUHJvcGVydHlTZWxlY3Rvci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjExODc1ZTcKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvd2lkZ2V0cy9Qcm9wZXJ0eVNlbGVjdG9yLmphdmEKQEAgLTAsMCArMSw3MTUgQEAKKy8vIFByb3BlcnR5U2VsZWN0b3IuamF2YQorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnVpLndpZGdldHM7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuRXZlbnRPYmplY3Q7CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CitpbXBvcnQgamF2YS51dGlsLmNvbmN1cnJlbnQuQ29weU9uV3JpdGVBcnJheUxpc3Q7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5Db21wb3NlZEFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtTGFiZWxQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JdGVtUHJvcGVydHlEZXNjcmlwdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5EeW5hbWljTGFiZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkdyYXBoOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5EZWNvcmF0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5hZGFwdGVycy5yZWxhdGl2ZXZhbHVlLlJlbGF0aXZlVmFsdWVQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmFkYXB0ZXJzLnJlbGF0aXZldmFsdWUuUmVsYXRpdmVWYWx1ZVByb3ZpZGVyQWRhcHRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmFkYXB0ZXJzLnJlbGF0aXZldmFsdWUuUmVsYXRpdmVWYWx1ZVByb3ZpZGVyQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLkRpc2Vhc2VNb2RlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmpvYnMuc2ltdWxhdGlvbi5JU2ltdWxhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuUG9wdWxhdGlvbk1vZGVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udWkudmlld3MuZ2VvZ3JhcGhpYy5tYXAuTWVzc2FnZXM7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LlNXVDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLlNlbGVjdGlvbkFkYXB0ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5TZWxlY3Rpb25FdmVudDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QubGF5b3V0LkZvcm1BdHRhY2htZW50OworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5sYXlvdXQuRm9ybURhdGE7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5Gb3JtTGF5b3V0OworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbWJvOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5MYWJlbDsKKworLyoqCisgKiBUaGlzIGNsYXNzIGlzIGEgY29tcG91bmQgU1dUIHdpZGdldCB0aGF0IGFsbG93cyBmb3IgdGhlIHNlbGVjdGlvbiBvZiBhCisgKiBwcm9wZXJ0eSBvciBwcm9wZXJ0aWVzIG9mIG9uZSBvciBtb3JlIHtAbGluayBEZWNvcmF0b3J9cy4KKyAqLworcHVibGljIGNsYXNzIFByb3BlcnR5U2VsZWN0b3IgZXh0ZW5kcyBDb21wb3NpdGUgeworCisJcHJpdmF0ZSBmaW5hbCBMaXN0PFByb3BlcnR5U2VsZWN0aW9uTGlzdGVuZXI+IHByb3BlcnR5U2VsZWN0aW9uTGlzdGVuZXJzID0gbmV3IENvcHlPbldyaXRlQXJyYXlMaXN0PFByb3BlcnR5U2VsZWN0aW9uTGlzdGVuZXI+KCk7CisKKwlwcml2YXRlIElTaW11bGF0aW9uIHNpbXVsYXRpb24gPSBudWxsOworCisJLyoqCisJICogVGhpcyBpcyB0aGUgbmFtZSBvZiB0aGUgcHJvcGVydHkgdGhhdCBzaG91bGQgYmUgZGlzcGxheWVkIGZpcnN0IChpZgorCSAqIHBvc3NpYmxlKS4KKwkgKiAKKwkgKiBAc2VlICNzZXRQcmVmZXJlbmNlcygpCisJICovCisJcHJpdmF0ZSBTdHJpbmcgaW5pdGlhbFByb3BlcnR5TmFtZTsKKworCXByaXZhdGUgZmluYWwgTGFiZWwgZGlzcGxheUxhYmVsOworCisJQ29tYm8gZGVjb3JhdG9yc0NvbWJvOworCisJQ29tYm8gcHJvcGVydGllc0NvbWJvOworCisJQ29tYm8gcG9wSWRzQ29tYm87CisKKwlMaXN0PERlY29yYXRvcj4gZGVjb3JhdG9yczsKKworCURlY29yYXRvciBzZWxlY3RlZERlY29yYXRvcjsKKworCUxpc3Q8SXRlbVByb3BlcnR5RGVzY3JpcHRvcj4gcHJvcGVydGllczsKKworCUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3Igc2VsZWN0ZWRQcm9wZXJ0eTsKKwkKKwlTdHJpbmcgc2VsZWN0ZWRJZDsKKwkKKwlwcml2YXRlIERlY29yYXRvckZpbHRlciBkZWNvcmF0b3JGaWx0ZXIgPSBuZXcgRGVjb3JhdG9yRmlsdGVyKCkgeworCQkvKioKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnVpLndpZGdldHMuUHJvcGVydHlTZWxlY3Rvci5EZWNvcmF0b3JGaWx0ZXIjYWNjZXB0KG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5EZWNvcmF0b3IpCisJCSAqLworCQlwdWJsaWMgYm9vbGVhbiBhY2NlcHQoQFN1cHByZXNzV2FybmluZ3MoInVudXNlZCIpCisJCURlY29yYXRvciBkZWNvcmF0b3IpIHsKKwkJCXJldHVybiB0cnVlOworCQl9CisJfTsKKworCS8qKgorCSAqIFRoZSBkZWZhdWx0IHNpZXZlIHNlbGVjdHMgdGhvc2UgcHJvcGVydGllcyB0aGF0IGhhdmUgcmVsYXRpdmUgdmFsdWVzLgorCSAqLworCXByaXZhdGUgUHJvcGVydHlTaWV2ZSBwcm9wZXJ0eVNpZXZlID0gbmV3IFByb3BlcnR5U2lldmUoKSB7CisJCS8qKgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0udWkud2lkZ2V0cy5Qcm9wZXJ0eVNlbGVjdG9yLlByb3BlcnR5U2lldmUjc2lldmUob3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkR5bmFtaWNMYWJlbCkKKwkJICovCisJCXB1YmxpYyBMaXN0PEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I+IHNpZXZlKER5bmFtaWNMYWJlbCBkeW5hbWljTGFiZWwpIHsKKwkJCWZpbmFsIExpc3Q8SXRlbVByb3BlcnR5RGVzY3JpcHRvcj4gcmV0VmFsdWUgPSBuZXcgQXJyYXlMaXN0PEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I+KCk7CisJCQlmaW5hbCBSZWxhdGl2ZVZhbHVlUHJvdmlkZXJBZGFwdGVyIHJ2cCA9IChSZWxhdGl2ZVZhbHVlUHJvdmlkZXJBZGFwdGVyKSBSZWxhdGl2ZVZhbHVlUHJvdmlkZXJBZGFwdGVyRmFjdG9yeS5JTlNUQU5DRQorCQkJCQkuYWRhcHQoZHluYW1pY0xhYmVsLCBSZWxhdGl2ZVZhbHVlUHJvdmlkZXIuY2xhc3MpOworCisJCQkvLyBEb2VzIHRoZSBsYWJlbCBoYXZlIHJlbGF0aXZlIHZhbHVlcz8KKwkJCWlmIChydnAgIT0gbnVsbCkgeworCQkJCS8vIFllcworCQkJCXJ2cC5zZXRUYXJnZXQoZHluYW1pY0xhYmVsKTsKKworCQkJCWZvciAoZmluYWwgT2JqZWN0IGVsZW1lbnQgOiBydnAuZ2V0UHJvcGVydGllcygpKSB7CisJCQkJCWZpbmFsIEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IgcHJvcGVydHkgPSAoSXRlbVByb3BlcnR5RGVzY3JpcHRvcikgZWxlbWVudDsKKwkJCQkJcmV0VmFsdWUuYWRkKHByb3BlcnR5KTsKKwkJCQl9IC8vIGZvciBlYWNoIHByb3BlcnR5CisJCQl9IC8vIGlmIHRoZSBsYWJlbCBoYXMgcmVsYXRpdmUgdmFsdWVzCisJCQlyZXR1cm4gcmV0VmFsdWU7CisJCX0gLy8gc2lldmUKKwl9OworCisJLyoqCisJICogQHBhcmFtIHBhcmVudAorCSAqIEBwYXJhbSBzdHlsZQorCSAqLworCXB1YmxpYyBQcm9wZXJ0eVNlbGVjdG9yKGZpbmFsIENvbXBvc2l0ZSBwYXJlbnQsIGZpbmFsIGludCBzdHlsZSwgYm9vbGVhbiBhbGxvd1Byb3BlcnR5U2VsZWN0aW9uKSB7CisJCXN1cGVyKHBhcmVudCwgc3R5bGUpOworCQlmaW5hbCBGb3JtTGF5b3V0IHJldFZhbHVlTGF5b3V0ID0gbmV3IEZvcm1MYXlvdXQoKTsKKwkJdGhpcy5zZXRMYXlvdXQocmV0VmFsdWVMYXlvdXQpOworCisJCWRpc3BsYXlMYWJlbCA9IG5ldyBMYWJlbCh0aGlzLCBTV1QuQ0VOVEVSKTsKKwkJZGlzcGxheUxhYmVsLnNldFRleHQoTWVzc2FnZXMuZ2V0U3RyaW5nKCJJTVZpZXcuTVByb3AiKSArICIgOiIpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKKworCQkvLyBDb21ibyBCb3ggb2YgRGVjb3JhdG9ycworCQlkZWNvcmF0b3JzQ29tYm8gPSBuZXcgQ29tYm8odGhpcywgU1dULkRST1BfRE9XTiB8IFNXVC5SRUFEX09OTFkKKwkJCQl8IFNXVC5DRU5URVIpOworCisJCS8vIENvbWJvIEJveCBvZiB0aGUgRGVjb3JhdG9yIFByb3BlcnRpZXMKKwkJcHJvcGVydGllc0NvbWJvID0gbmV3IENvbWJvKHRoaXMsIFNXVC5EUk9QX0RPV04gfCBTV1QuUkVBRF9PTkxZCisJCQkJfCBTV1QuQ0VOVEVSKTsKKworCQlwb3BJZHNDb21ibyA9IG5ldyBDb21ibyh0aGlzLCBTV1QuRFJPUF9ET1dOIHwgU1dULlJFQURfT05MWSAKKwkJCQl8IFNXVC5DRU5URVIpOworCQkKKwkJZmluYWwgRm9ybURhdGEgZGVjb3JhdG9yc0NvbWJvRm9ybURhdGEgPSBuZXcgRm9ybURhdGEoKTsKKwkJZGVjb3JhdG9yc0NvbWJvRm9ybURhdGEudG9wID0gbmV3IEZvcm1BdHRhY2htZW50KGRpc3BsYXlMYWJlbCwgMCk7CisJCWRlY29yYXRvcnNDb21ib0Zvcm1EYXRhLmxlZnQgPSBuZXcgRm9ybUF0dGFjaG1lbnQoMCwgMCk7CisJCWRlY29yYXRvcnNDb21ib0Zvcm1EYXRhLnJpZ2h0ID0gbmV3IEZvcm1BdHRhY2htZW50KDEwMCwgMCk7CisJCWRlY29yYXRvcnNDb21iby5zZXRMYXlvdXREYXRhKGRlY29yYXRvcnNDb21ib0Zvcm1EYXRhKTsKKworCQlmaW5hbCBGb3JtRGF0YSBwcm9wZXJ0aWVzQ29tYm9Gb3JtRGF0YSA9IG5ldyBGb3JtRGF0YSgpOworCQlwcm9wZXJ0aWVzQ29tYm9Gb3JtRGF0YS50b3AgPSBuZXcgRm9ybUF0dGFjaG1lbnQoZGVjb3JhdG9yc0NvbWJvLCAwKTsKKwkJcHJvcGVydGllc0NvbWJvRm9ybURhdGEubGVmdCA9IG5ldyBGb3JtQXR0YWNobWVudCgwLCAwKTsKKwkJcHJvcGVydGllc0NvbWJvRm9ybURhdGEucmlnaHQgPSBuZXcgRm9ybUF0dGFjaG1lbnQoMTAwLCAwKTsKKwkJcHJvcGVydGllc0NvbWJvLnNldExheW91dERhdGEocHJvcGVydGllc0NvbWJvRm9ybURhdGEpOworCisJCWZpbmFsIEZvcm1EYXRhIHBvcElkc0NvbWJvRm9ybURhdGEgPSBuZXcgRm9ybURhdGEoKTsKKwkJcG9wSWRzQ29tYm9Gb3JtRGF0YS50b3AgPSBuZXcgRm9ybUF0dGFjaG1lbnQocHJvcGVydGllc0NvbWJvLCAwKTsKKwkJcG9wSWRzQ29tYm9Gb3JtRGF0YS5sZWZ0ID0gbmV3IEZvcm1BdHRhY2htZW50KDAsIDApOworCQlwb3BJZHNDb21ib0Zvcm1EYXRhLnJpZ2h0ID0gbmV3IEZvcm1BdHRhY2htZW50KDEwMCwgMCk7CisJCXBvcElkc0NvbWJvLnNldExheW91dERhdGEocG9wSWRzQ29tYm9Gb3JtRGF0YSk7CisKKwkJdGhpcy5wYWNrKCk7CisKKwkJZGVjb3JhdG9yc0NvbWJvLmFkZFNlbGVjdGlvbkxpc3RlbmVyKG5ldyBTZWxlY3Rpb25BZGFwdGVyKCkgeworCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgdm9pZCB3aWRnZXRTZWxlY3RlZChAU3VwcHJlc3NXYXJuaW5ncygidW51c2VkIikKKwkJCWZpbmFsIFNlbGVjdGlvbkV2ZW50IGUpIHsKKwkJCQkvLyBBbnkgZGVjb3JhdG9ycz8KKwkJCQlpZiAoIWRlY29yYXRvcnMuaXNFbXB0eSgpKSB7CisJCQkJCS8vIFllcworCQkJCQlmaW5hbCBEZWNvcmF0b3IgdGVtcERlY29yYXRvciA9IGRlY29yYXRvcnMKKwkJCQkJCQkuZ2V0KGRlY29yYXRvcnNDb21iby5nZXRTZWxlY3Rpb25JbmRleCgpKTsKKwkJCQkJLy8gV2FzIHRoZXJlIGEgY2hhbmdlIGluIHNlbGVjdGVkIERlY29yYXRvcnM/CisJCQkJCWlmIChzZWxlY3RlZERlY29yYXRvciAhPSB0ZW1wRGVjb3JhdG9yKSB7CisJCQkJCQkvLyBZZXMKKwkJCQkJCXNlbGVjdGVkRGVjb3JhdG9yID0gdGVtcERlY29yYXRvcjsKKwkJCQkJCUxpc3Q8U3RyaW5nPiBpZHMgPSBnZXRJZHNUb0Rpc3BsYXkoc2VsZWN0ZWREZWNvcmF0b3IpOworCQkJCQkJc2VsZWN0ZWRJZCA9IGlkcy5nZXQoMCk7CisJCQkJCQlwcm9wZXJ0aWVzID0gZ2V0UHJvcGVydGllc1RvRGlzcGxheShzZWxlY3RlZERlY29yYXRvciwgc2VsZWN0ZWRJZCk7CisJCQkJCQlzZWxlY3RlZFByb3BlcnR5ID0gc2VsZWN0Q3VycmVudERlY29yYXRvclByb3BlcnR5KHByb3BlcnRpZXMpOworCQkJCQkJaW5pdGlhbGl6ZUNvbWJvKHByb3BlcnRpZXNDb21ibywKKwkJCQkJCQkJZ2V0UHJvcGVydHlOYW1lcyhwcm9wZXJ0aWVzKSwgZ2V0UHJvcGVydHlJbmRleCgKKwkJCQkJCQkJCQlzZWxlY3RlZFByb3BlcnR5LCBwcm9wZXJ0aWVzKSk7CisJCQkJCQlTdHJpbmcgW10gcHJvcElkcyA9IGlkcy50b0FycmF5KG5ldyBTdHJpbmdbXXt9KTsKKwkJCQkJCWluaXRpYWxpemVDb21ibyhwb3BJZHNDb21ibywKKwkJCQkJCQkJcHJvcElkcywgMCk7CisKKwkJCQkJCVByb3BlcnR5U2VsZWN0b3IudGhpcworCQkJCQkJCQkubm90aWZ5UHJvcGVydHlTZWxlY3Rpb24oc2VsZWN0ZWRQcm9wZXJ0eSwgc2VsZWN0ZWRJZCk7CisJCQkJCX0gLy8gaWYgRGVjb3JhdG9ycyBjaGFuZ2VkCisKKwkJCQl9IC8vIGlmIGFueSBkZWNvcmF0b3JzCisJCQl9CisJCX0gLy8gU2VsZWN0aW9uQWRhcHRlcgorCQkpOworCisJCXByb3BlcnRpZXNDb21iby5hZGRTZWxlY3Rpb25MaXN0ZW5lcihuZXcgU2VsZWN0aW9uQWRhcHRlcigpIHsKKwkJCUBPdmVycmlkZQorCQkJcHVibGljIHZvaWQgd2lkZ2V0U2VsZWN0ZWQoQFN1cHByZXNzV2FybmluZ3MoInVudXNlZCIpCisJCQlmaW5hbCBTZWxlY3Rpb25FdmVudCBlKSB7CisJCQkJLy8gQW55IERlY29yYXRvciBwcm9wZXJ0aWVzPworCQkJCWlmICghcHJvcGVydGllcy5pc0VtcHR5KCkpIHsKKwkJCQkJLy8gWWVzCisJCQkJCS8vIElzIGl0IGRpZmZlcmVudD8KKwkJCQkJZmluYWwgSXRlbVByb3BlcnR5RGVzY3JpcHRvciB0ZW1wID0gcHJvcGVydGllcworCQkJCQkJCS5nZXQocHJvcGVydGllc0NvbWJvLmdldFNlbGVjdGlvbkluZGV4KCkpOworCQkJCQlpZiAoc2VsZWN0ZWRQcm9wZXJ0eSAhPSB0ZW1wKSB7CisJCQkJCQkvLyBZZXMKKwkJCQkJCXNlbGVjdGVkUHJvcGVydHkgPSB0ZW1wOworCQkJCQkJUHJvcGVydHlTZWxlY3Rvci50aGlzCisJCQkJCQkJCS5ub3RpZnlQcm9wZXJ0eVNlbGVjdGlvbihzZWxlY3RlZFByb3BlcnR5LCBzZWxlY3RlZElkKTsKKwkJCQkJfSAvLyBpZgorCisJCQkJfSAvLyBpZgorCQkJfSAvLyB3aWRnZXRTZWxlY3RlZAorCisJCX0gLy8gU2VsZWN0aW9uQWRhcHRlcgorCQkJCSk7CisJCXBvcElkc0NvbWJvLmFkZFNlbGVjdGlvbkxpc3RlbmVyKG5ldyBTZWxlY3Rpb25BZGFwdGVyKCkgeworCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgdm9pZCB3aWRnZXRTZWxlY3RlZChAU3VwcHJlc3NXYXJuaW5ncygidW51c2VkIikKKwkJCWZpbmFsIFNlbGVjdGlvbkV2ZW50IGUpIHsKKwkJCQlMaXN0PFN0cmluZz5pZHMgPSBnZXRJZHNUb0Rpc3BsYXkoc2VsZWN0ZWREZWNvcmF0b3IpOworCQkJCQlmaW5hbCBTdHJpbmcgdGVtcCA9IGlkcworCQkJCQkJCS5nZXQocG9wSWRzQ29tYm8uZ2V0U2VsZWN0aW9uSW5kZXgoKSk7CisJCQkJCWlmICghc2VsZWN0ZWRJZC5lcXVhbHModGVtcCkpIHsKKwkJCQkJCS8vIFllcworCQkJCQkJc2VsZWN0ZWRJZCA9IHRlbXA7CisJCQkJCQlwcm9wZXJ0aWVzID0gZ2V0UHJvcGVydGllc1RvRGlzcGxheShzZWxlY3RlZERlY29yYXRvciwgc2VsZWN0ZWRJZCk7CisJCQkJCQlzZWxlY3RlZFByb3BlcnR5ID0gc2VsZWN0Q3VycmVudERlY29yYXRvclByb3BlcnR5KHByb3BlcnRpZXMpOworCQkJCQkJaW5pdGlhbGl6ZUNvbWJvKHByb3BlcnRpZXNDb21ibywKKwkJCQkJCQkJZ2V0UHJvcGVydHlOYW1lcyhwcm9wZXJ0aWVzKSwgZ2V0UHJvcGVydHlJbmRleCgKKwkJCQkJCQkJCQlzZWxlY3RlZFByb3BlcnR5LCBwcm9wZXJ0aWVzKSk7CisJCQkJCQlQcm9wZXJ0eVNlbGVjdG9yLnRoaXMKKwkJCQkJCQkJLm5vdGlmeVByb3BlcnR5U2VsZWN0aW9uKHNlbGVjdGVkUHJvcGVydHksIHNlbGVjdGVkSWQpOworCQkJCQl9IC8vIGlmCisKKwkJCX0gLy8gd2lkZ2V0U2VsZWN0ZWQKKworCQl9IC8vIFNlbGVjdGlvbkFkYXB0ZXIKKwkJCQkpOworCQlpZighYWxsb3dQcm9wZXJ0eVNlbGVjdGlvbilwcm9wZXJ0aWVzQ29tYm8uc2V0RW5hYmxlZChmYWxzZSk7CisJCXNldFNpbXVsYXRpb24obnVsbCk7CisJfSAvLyBQcm9wZXJ0eVNlbGVjdG9yCisKKwl2b2lkIG5vdGlmeVByb3BlcnR5U2VsZWN0aW9uKGZpbmFsIEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3Igc2VsZWN0ZWRQcm9wZXJ0eSwgU3RyaW5nIHBvcGlkKSB7CisJCS8vIElzIHRoZXJlIGEgcHJvcGVydHk/CisJCWlmIChzZWxlY3RlZFByb3BlcnR5ICE9IG51bGwpIHsKKwkJCS8vIFllcworCQkJZmlyZVByb3BlcnR5U2VsZWN0aW9uRXZlbnQobmV3IFByb3BlcnR5U2VsZWN0aW9uRXZlbnQoCisJCQkJCXNlbGVjdGVkRGVjb3JhdG9yLCBzZWxlY3RlZFByb3BlcnR5LCB0aGlzLHBvcGlkICkpOworCQl9IC8vIGlmCisJfSAvLyBub3RpZnlQcm9wZXJ0eVNlbGVjdGlvbgorCisJLyoqCisJICogQHJldHVybiA8Y29kZT50cnVlPC9jb2RlPiBpZiB0aGUgY29udHJvbCBoYXMgYmVlbiBpbml0aWFsaXplZC4KKwkgKi8KKwlwdWJsaWMgYm9vbGVhbiBpc0luaXRpYWxpemVkKCkgeworCQlyZXR1cm4gIShkZWNvcmF0b3JzID09IG51bGwgfHwgZGVjb3JhdG9ycy5pc0VtcHR5KCkpOworCX0gLy8gaXNJbml0aWFsaXplZAorCisJLyoqCisJICogQHBhcmFtIGRlY29yYXRvcnMKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXREZWNvcmF0b3JzKGZpbmFsIExpc3Q8RGVjb3JhdG9yPiBkZWNvcmF0b3JzKSB7CisJCXRoaXMuZGVjb3JhdG9ycyA9IGRlY29yYXRvcnM7CisJCXNlbGVjdGVkRGVjb3JhdG9yID0gZGVjb3JhdG9ycy5pc0VtcHR5KCkgPyBudWxsIDogZGVjb3JhdG9ycy5nZXQoMCk7CisJCWluaXRpYWxpemVDb21ibyhkZWNvcmF0b3JzQ29tYm8sIGdldERlY29yYXRvck5hbWVzKGRlY29yYXRvcnMpLAorCQkJCWdldERlY29yYXRvckluZGV4KHNlbGVjdGVkRGVjb3JhdG9yLCBkZWNvcmF0b3JzKSk7CisJCQorCQlMaXN0PFN0cmluZz4gaWRzID0gZ2V0SWRzVG9EaXNwbGF5KHNlbGVjdGVkRGVjb3JhdG9yKTsKKwkJaWYoaWRzICE9IG51bGwpIHsKKwkJCVN0cmluZyBbXSBwcm9wSWRzID0gaWRzLnRvQXJyYXkobmV3IFN0cmluZ1tde30pOworCQkJaW5pdGlhbGl6ZUNvbWJvKHBvcElkc0NvbWJvLAorCQkJCQlwcm9wSWRzLCAwKTsKKwkJfQorCQlzZWxlY3RlZElkICA9IChpZHM9PW51bGwpPyBudWxsOmlkcy5nZXQoMCk7CisJCQorCQlwcm9wZXJ0aWVzID0gZ2V0UHJvcGVydGllc1RvRGlzcGxheShzZWxlY3RlZERlY29yYXRvciwgc2VsZWN0ZWRJZCk7CisJCXNlbGVjdGVkUHJvcGVydHkgPSBzZWxlY3RDdXJyZW50RGVjb3JhdG9yUHJvcGVydHkocHJvcGVydGllcyk7CisJCWluaXRpYWxpemVDb21ibyhwcm9wZXJ0aWVzQ29tYm8sIGdldFByb3BlcnR5TmFtZXMocHJvcGVydGllcyksCisJCQkJZ2V0UHJvcGVydHlJbmRleChzZWxlY3RlZFByb3BlcnR5LCBwcm9wZXJ0aWVzKSk7CisJCQorCQlub3RpZnlQcm9wZXJ0eVNlbGVjdGlvbihzZWxlY3RlZFByb3BlcnR5LCBzZWxlY3RlZElkKTsKKwl9IC8vIHNldERlY29yYXRvcnMKKworCS8qKgorCSAqIEluaXRpYWxpemUgdGhlIGNvbnRyb2wgZnJvbSBhCisJICoge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uam9icy5zaW11bGF0aW9uLlNpbXVsYXRpb259IGluc3RhbmNlLgorCSAqIAorCSAqIEBwYXJhbSBzaW11bGF0aW9uCisJICogICAgICAgICAgICB0aGUge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uam9icy5zaW11bGF0aW9uLlNpbXVsYXRpb259CisJICovCisJcHVibGljIHZvaWQgc2V0U2ltdWxhdGlvbihmaW5hbCBJU2ltdWxhdGlvbiBzaW11bGF0aW9uKSB7CisJCXRoaXMuc2ltdWxhdGlvbiA9IHNpbXVsYXRpb247CisJCXNldERlY29yYXRvcnMoZ2V0RGVjb3JhdG9yc1RvRGlzcGxheShzaW11bGF0aW9uKSk7CisJfSAvLyBzZXRTaW11bGF0aW9uCisKKwkvKioKKwkgKiBAcmV0dXJuIHRoZSBzaW11bGF0aW9uCisJICovCisJcHVibGljIGZpbmFsIElTaW11bGF0aW9uIGdldFNpbXVsYXRpb24oKSB7CisJCXJldHVybiBzaW11bGF0aW9uOworCX0KKworCS8qKgorCSAqIEBwYXJhbSBkZWNvcmF0b3JGaWx0ZXIKKwkgKiAgICAgICAgICAgIHRoZSBmaWx0ZXIgdGhhdCBkZXRlcm1pbmVzIHdoaWNoIHtAbGluayBEZWNvcmF0b3J9cyB3aWxsIGJlCisJICogICAgICAgICAgICBkaXNwbGF5ZWQuCisJICovCisJcHVibGljIHZvaWQgc2V0RGVjb3JhdG9yRmlsdGVyKGZpbmFsIERlY29yYXRvckZpbHRlciBkZWNvcmF0b3JGaWx0ZXIpIHsKKwkJdGhpcy5kZWNvcmF0b3JGaWx0ZXIgPSBkZWNvcmF0b3JGaWx0ZXI7CisJfSAvLyBzZXREZWNvcmF0b3JGaWx0ZXIKKworCS8qKgorCSAqIEBwYXJhbSBwcm9wZXJ0eVNpZXZlCisJICogICAgICAgICAgICB0aGUgc2lldmUgdGhhdCBzZWxlY3RzIHRoZSBwcm9wZXJ0aWVzIG9mIGEge0BsaW5rIERlY29yYXRvcn0KKwkgKiAgICAgICAgICAgIHRoYXQgc2hvdWxkIGJlIGRpc3BsYXllZC4KKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRQcm9wZXJ0eVNpZXZlKGZpbmFsIFByb3BlcnR5U2lldmUgcHJvcGVydHlTaWV2ZSkgeworCQl0aGlzLnByb3BlcnR5U2lldmUgPSBwcm9wZXJ0eVNpZXZlOworCX0gLy8gc2V0UHJvcGVydHlTaWV2ZQorCisJLyoqCisJICogQHBhcmFtIHNpbXVsYXRpb24KKwkgKiAgICAgICAgICAgIHRoZSBzaW11bGF0aW9uIHRoYXQgY29udGFpbnMge0BsaW5rIERlY29yYXRvcn1zCisJICogQHJldHVybiBhIHtAbGluayBMaXN0fSBvZiB0aGUge0BsaW5rIERlY29yYXRvcn1zIHdob3NlIHByb3BlcnRpZXMKKwkgKi8KKwlwcml2YXRlIExpc3Q8RGVjb3JhdG9yPiBnZXREZWNvcmF0b3JzVG9EaXNwbGF5KGZpbmFsIElTaW11bGF0aW9uIHNpbXVsYXRpb24pIHsKKwkJZmluYWwgTGlzdDxEZWNvcmF0b3I+IHJldFZhbHVlID0gbmV3IEFycmF5TGlzdDxEZWNvcmF0b3I+KCk7CisKKwkJLy8gR290IFNpbXVsYXRpb24/CisJCWlmIChzaW11bGF0aW9uICE9IG51bGwpIHsKKwkJCS8vIFllcworCQkJZmluYWwgR3JhcGggY2Fub25pY2FsR3JhcGggPSBzaW11bGF0aW9uLmdldFNjZW5hcmlvKCkKKwkJCQkJLmdldENhbm9uaWNhbEdyYXBoKCk7CisJCQkvLyBJcyB0aGUgY2Fub25pY2FsR3JhcGggaW5pdGlhbGl6ZWQgeWV0PworCQkJaWYgKGNhbm9uaWNhbEdyYXBoICE9IG51bGwpIHsKKwkJCQkvLyBZZXMKKwkJCQkvLyBHbyB0aHJvdWdoIHRoZSBEZWNvcmF0b3JzIGtlZXBpbmcgdGhlIG9uZXMgdGhhdCB0aGUgZmlsdGVyCisJCQkJLy8gc2F5cyBhcmUgb2suCisJCQkJZm9yIChmaW5hbCBPYmplY3QgZWxlbWVudCA6IGNhbm9uaWNhbEdyYXBoLmdldERlY29yYXRvcnMoKSkgeworCQkJCQlmaW5hbCBEZWNvcmF0b3IgZGVjb3JhdG9yID0gKERlY29yYXRvcikgZWxlbWVudDsKKwkJCQkJLy8gQWNjZXB0YWJsZT8KKwkJCQkJaWYgKGRlY29yYXRvckZpbHRlci5hY2NlcHQoZGVjb3JhdG9yKSkgeworCQkJCQkJcmV0VmFsdWUuYWRkKGRlY29yYXRvcik7CisJCQkJCX0gLy8gaWYgaGFzIGEgdGl0bGUKKwkJCQl9IC8vIGZvciBlYWNoIGRlY29yYXRvcgorCQkJfSAvLyBpZiBnb3QgZ3JhcGgKKwkJfSAvLyBpZiBnb3Qgc2ltdWxhdGlvbgorCQlyZXR1cm4gcmV0VmFsdWU7CisJfSAvLyBnZXREZWNvcmF0b3JzVG9EaXNwbGF5CisKKwkvKioKKwkgKiBAcGFyYW0gZGVjb3JhdG9yCisJICogICAgICAgICAgICBhIHtAbGluayBEZWNvcmF0b3J9IHRoYXQgbW9kaWZpZXMgdGhlIHN0YXRlIG9mIHRoZSBjYW5vbmljYWwKKwkgKiAgICAgICAgICAgIHtAbGluayBHcmFwaH0gaW4gdGhlCisJICogICAgICAgICAgICB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5qb2JzLnNpbXVsYXRpb24uU2ltdWxhdGlvbn0uCisJICogQHBhcmFtIHNpbXVsYXRpb24KKwkgKiAgICAgICAgICAgIHRoZSB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5qb2JzLnNpbXVsYXRpb24uU2ltdWxhdGlvbn0KKwkgKiBAcmV0dXJuIGEge0BsaW5rIExpc3R9IG9mIHRoZSBwcm9wZXJ0aWVzIG9mIHRoZSB7QGxpbmsgRGVjb3JhdG9yfSB0aGF0CisJICogICAgICAgICBjYW4gc2hvdWxkIGJlIGRpc3BsYXllZC4KKwkgKi8KKwlMaXN0PEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I+IGdldFByb3BlcnRpZXNUb0Rpc3BsYXkoCisJCQlmaW5hbCBEZWNvcmF0b3IgZGVjb3JhdG9yLCBmaW5hbCBTdHJpbmcgcG9wdWxhdGlvbklkZW50aWZpZXIpIHsKKwkJZmluYWwgTGlzdDxJdGVtUHJvcGVydHlEZXNjcmlwdG9yPiByZXRWYWx1ZSA9IG5ldyBBcnJheUxpc3Q8SXRlbVByb3BlcnR5RGVzY3JpcHRvcj4oKTsKKwkJLy8gR290IERlY29yYXRvcj8KKwkJaWYgKGRlY29yYXRvciAhPSBudWxsKSB7CisJCQkvLyBZZXMKKwkJCS8vIEFyZSB0aGVyZSBhbnkgbGFiZWxzIHRvIHVwZGF0ZT8KKwkJCWlmICghZGVjb3JhdG9yLmdldExhYmVsc1RvVXBkYXRlKCkuaXNFbXB0eSgpKSB7CisJCQkJLy8gWWVzCisJCQkJaWYgKGRlY29yYXRvciBpbnN0YW5jZW9mIERpc2Vhc2VNb2RlbCkgeworCQkJCQkvLyBEaWZmZXJlbnQgbGFiZWxzIGV4aXN0IGZvciBkaWZmZXJlbnQgcG9wdWxhdGlvbnMKKwkJCQkJcmV0VmFsdWUuYWRkQWxsKHByb3BlcnR5U2lldmUuc2lldmUoKChEaXNlYXNlTW9kZWwpIGRlY29yYXRvcikKKwkJCQkJCQkuY3JlYXRlRGlzZWFzZU1vZGVsTGFiZWwocG9wdWxhdGlvbklkZW50aWZpZXIpKSk7CisJCQkJfSBlbHNlIHsKKwkJCQkJLy8gVGhlIGZpcnN0IG9uZSBpcyBnb29kIGVub3VnaAorCQkJCQlyZXRWYWx1ZS5hZGRBbGwocHJvcGVydHlTaWV2ZS5zaWV2ZShkZWNvcmF0b3IKKwkJCQkJCQkuZ2V0TGFiZWxzVG9VcGRhdGUoKS5nZXQoMCkpKTsKKwkJCQl9CisJCQl9IC8vIGlmIGxhYmVscyB0byB1cGRhdGUKKwkJfSAvLyBpZiBnb3QgZGVjb3JhdG9yCisJCXJldHVybiByZXRWYWx1ZTsKKwl9IC8vIGdldFByb3BlcnRpZXNUb0Rpc3BsYXkKKworCS8qKgorCSAqIEBwYXJhbSBkZWNvcmF0b3IKKwkgKiAgICAgICAgICAgIGEge0BsaW5rIERlY29yYXRvcn0gdGhhdCBtb2RpZmllcyB0aGUgc3RhdGUgb2YgdGhlIGNhbm9uaWNhbAorCSAqICAgICAgICAgICAge0BsaW5rIEdyYXBofSBpbiB0aGUKKwkgKiAgICAgICAgICAgIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmpvYnMuc2ltdWxhdGlvbi5TaW11bGF0aW9ufS4KKwkgKiBAcmV0dXJuIGEge0BsaW5rIExpc3R9IG9mIHRoZSBpZHMsIGUuZy4gcG9wdWxhdGlvbiBpZHMKKwkgKi8KKwlMaXN0PFN0cmluZz4gZ2V0SWRzVG9EaXNwbGF5KAorCQkJZmluYWwgRGVjb3JhdG9yIGRlY29yYXRvcikgeworCQlpZihkZWNvcmF0b3IgaW5zdGFuY2VvZiBEaXNlYXNlTW9kZWwpIHsKKwkJCXJldHVybiAoKERpc2Vhc2VNb2RlbClkZWNvcmF0b3IpLmdldEFsbExhYmVsSWRlbnRpZmllcnMoKTsKKwkJfQorCQlpZihkZWNvcmF0b3IgaW5zdGFuY2VvZiBQb3B1bGF0aW9uTW9kZWwpIHsKKwkJCXJldHVybiAoKFBvcHVsYXRpb25Nb2RlbClkZWNvcmF0b3IpLmdldEFsbExhYmVsSWRlbnRpZmllcnMoKTsKKwkJfQorCQlyZXR1cm4gbnVsbDsgLy8gbm9uZSBmb3VuZAorCX0gLy8gZ2V0UHJvcGVydGllc1RvRGlzcGxheQorCisJLy8gLyoqCisJLy8gKiBAcGFyYW0gZGVjb3JhdG9ycworCS8vICogdGhlIHtAbGluayBEZWNvcmF0b3JzfSBpbiB0aGUgc2ltdWxhdGlvbiB0aGF0IHdob3NlIHN0YXRlCisJLy8gKiB2YWx1ZXMgY2FuIGJlIHZpc3VhbGl6ZWQuCisJLy8gKiBAcmV0dXJuIG9uZSBvZiB0aGUge0BsaW5rIERlY29yYXRvcnN9CisJLy8gKi8KKwkvLyBwcml2YXRlIERlY29yYXRvciBzZWxlY3RDdXJyZW50RGVjb3JhdG9yKGZpbmFsIExpc3Q8RGVjb3JhdG9yPgorCS8vIGRlY29yYXRvcnMpIHsKKwkvLyByZXR1cm4gZGVjb3JhdG9ycy5nZXQoMCk7CisJLy8gfSAvLyBzZWxlY3RDdXJyZW50RGVjb3JhdG9yCisKKwkvKioKKwkgKiBAcGFyYW0gZGVjb3JhdG9yUHJvcGVydGllcworCSAqICAgICAgICAgICAgYSBsaXN0IG9mIHByb3BlcnRpZXMKKwkgKiBAcmV0dXJuIHRoZSBwcm9wZXJ0eSBvZiB0aGUgZGVjb3JhdG9yIHRoYXQgc2hvdWxkIGJlIHRoZSBvbmUgdG8gYmUKKwkgKiAgICAgICAgIGRpc3BsYXllZCBvciA8Y29kZT5udWxsPC9jb2RlPiBpZiBkZWNvcmF0b3JQcm9wZXJ0aWVzIGlzIGVtcHR5CisJICovCisJSXRlbVByb3BlcnR5RGVzY3JpcHRvciBzZWxlY3RDdXJyZW50RGVjb3JhdG9yUHJvcGVydHkoCisJCQlmaW5hbCBMaXN0PEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I+IGRlY29yYXRvclByb3BlcnRpZXMpIHsKKwkJLy8gTG9vayBmb3IgYSBwcm9wZXJ0eSB3aXRoIGEgbmFtZSB0aGF0IG1hdGNoZXMgdGhlIG9uZSBzcGVjaWZpZWQgaW4KKwkJLy8gdGhlIHByZWZlcmVuY2VzLgorCQlmb3IgKGZpbmFsIEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IgcHJvcGVydHkgOiBkZWNvcmF0b3JQcm9wZXJ0aWVzKSB7CisJCQkvLyBuYW1lIG1hdGNoPworCQkJaWYgKHByb3BlcnR5LmdldERpc3BsYXlOYW1lKHByb3BlcnR5KS5lcXVhbHMoaW5pdGlhbFByb3BlcnR5TmFtZSkpIHsKKwkJCQkvLyBZZXMKKwkJCQlyZXR1cm4gcHJvcGVydHk7CisJCQl9IC8vIGlmCisJCX0gLy8gZm9yIGVhY2ggSXRlbVByb3BlcnR5RGVzY3JpcHRvcgorCQkvLyBEaWRuJ3QgZmluZCBhIG1hdGNoLCBqdXN0IHVzZSB0aGUgZmlyc3Qgb25lLgorCQkvLyBBbnkgdG8gdXNlPworCQlpZiAoIWRlY29yYXRvclByb3BlcnRpZXMuaXNFbXB0eSgpKSB7CisJCQkvLyBZZXMKKwkJCXJldHVybiBkZWNvcmF0b3JQcm9wZXJ0aWVzLmdldCgwKTsKKwkJfSAvLyBpZgorCQlyZXR1cm4gbnVsbDsKKwl9IC8vIHNlbGVjdEN1cnJlbnREZWNvcmF0b3JQcm9wZXJ0eQorCisJLyoqCisJICogQHJldHVybiB0aGUge0BsaW5rIERlY29yYXRvcn0gc2VsZWN0ZWQgaW4gdGhlIGNvbnRyb2wsIG9yCisJICogICAgICAgICA8Y29kZT5udWxsPC9jb2RlPiBpZiBvbmUgaXMgbm90IGN1cnJlbnRseSBzZWxlY3RlZC4KKwkgKi8KKwkvLyBwdWJsaWMgRGVjb3JhdG9yIGdldFNlbGVjdGVkRGVjb3JhdG9yKCkgeworCS8vIHJldHVybiBzZWxlY3RlZERlY29yYXRvcjsKKwkvLyB9IC8vIGdldFNlbGVjdGVkRGVjb3JhdG9yCisJLy8KKwkvLyAvKioKKwkvLyAqIEByZXR1cm4gdGhlIHtAbGluayBJdGVtUHJvcGVydHlEZXNjcmlwdG9yfSBzZWxlY3RlZCBpbiB0aGUgY29udHJvbCwgb3IKKwkvLyAqIDxjb2RlPm51bGw8L2NvZGU+IGlmIG9uZSBpcyBub3QgY3VycmVudGx5IHNlbGVjdGVkLgorCS8vICovCisJLy8gcHVibGljIEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IgZ2V0U2VsZWN0ZWRQcm9wZXJ0eSgpIHsKKwkvLyByZXR1cm4gc2VsZWN0ZWREZWNvcmF0b3JQcm9wZXJ0eTsKKwkvLyB9IC8vIGdldFNlbGVjdGVkUHJvcGVydHkKKwkvLworCS8vIC8qKgorCS8vICogQHJldHVybiBhIGRpc3BsYXkgbmFtZSBvZiB0aGUgc2VsZWN0ZWQgcHJvcGVydHkuIFRoaXMgaXMgdGhlIGtleSB0byB0aGUKKwkvLyAqIHNlbGVjdGVkIHJlbGF0aXZlIFZhbHVlCisJLy8gKgorCS8vICovCisJLy8gcHVibGljIFN0cmluZyBnZXRTZWxlY3RlZFByb3BlcnR5U3RyaW5nKCkgeworCS8vIFN0cmluZyByZXRWYWwgPSAibm8gcHJvcGVydHkgc2VsZWN0ZWQiOworCS8vIGlmIChzZWxlY3RlZERlY29yYXRvclByb3BlcnR5ICE9IG51bGwpIHsKKwkvLyByZXRWYWwgPSBzZWxlY3RlZERlY29yYXRvclByb3BlcnR5CisJLy8gLmdldERpc3BsYXlOYW1lKHNlbGVjdGVkRGVjb3JhdG9yUHJvcGVydHkpOworCS8vIH0KKwkvLyByZXR1cm4gcmV0VmFsOworCS8vIH0gLy8gZ2V0U2VsZWN0ZWRQcm9wZXJ0eQorCS8qKgorCSAqIEBwYXJhbSBjb21ibworCSAqIEBwYXJhbSBuYW1lcworCSAqIEBwYXJhbSBzZWxlY3Rpb25JbmRleAorCSAqLworCXZvaWQgaW5pdGlhbGl6ZUNvbWJvKGZpbmFsIENvbWJvIGNvbWJvLCBmaW5hbCBTdHJpbmdbXSBuYW1lcywKKwkJCWZpbmFsIGludCBzZWxlY3Rpb25JbmRleCkgeworCQljb21iby5zZXRJdGVtcyhuYW1lcyk7CisJCWNvbWJvLnNlbGVjdChzZWxlY3Rpb25JbmRleCk7CisJfSAvLyBpbml0aWFsaXplQ29tYm8KKworCS8qKgorCSAqIEBwYXJhbSBkZWNvcmF0b3JzCisJICogICAgICAgICAgICBhIGxpc3Qgb2Yge0BsaW5rIERlY29yYXRvcn1zCisJICogQHJldHVybiBhbiBhcnJheSBvZiB0aGUgbmFtZXMgb2YgdGhlIHtAbGluayBEZWNvcmF0b3JzfS4KKwkgKi8KKwlwcml2YXRlIFN0cmluZ1tdIGdldERlY29yYXRvck5hbWVzKGZpbmFsIExpc3Q8RGVjb3JhdG9yPiBkZWNvcmF0b3JzKSB7CisJCWZpbmFsIExpc3Q8U3RyaW5nPiByZXRWYWx1ZSA9IG5ldyBBcnJheUxpc3Q8U3RyaW5nPigpOworCQlpZiAoZGVjb3JhdG9ycyAhPSBudWxsKSB7CisJCQkvLyBZZXMKKwkJCWZvciAoZmluYWwgRGVjb3JhdG9yIGRlY29yYXRvciA6IGRlY29yYXRvcnMpIHsKKwkJCQlmaW5hbCBDb21wb3NlZEFkYXB0ZXJGYWN0b3J5IGl0ZW1Qcm92aWRlckZhY3RvcnkgPSBuZXcgQ29tcG9zZWRBZGFwdGVyRmFjdG9yeSgKKwkJCQkJCUNvbXBvc2VkQWRhcHRlckZhY3RvcnkuRGVzY3JpcHRvci5SZWdpc3RyeS5JTlNUQU5DRSk7CisKKwkJCQlmaW5hbCBJSXRlbUxhYmVsUHJvdmlkZXIgbHAgPSAoSUl0ZW1MYWJlbFByb3ZpZGVyKSBpdGVtUHJvdmlkZXJGYWN0b3J5LmFkYXB0KAorCQkJCQkJZGVjb3JhdG9yLCBJSXRlbUxhYmVsUHJvdmlkZXIuY2xhc3MpOworCQkJCVN0cmluZyB0aXRsZSA9IGxwLmdldFRleHQoZGVjb3JhdG9yKTsKKwkJCQl0aXRsZSA9IHRpdGxlID09IG51bGwgPyAibnVsbCIgOiB0aXRsZTsKKwkJCQlyZXRWYWx1ZS5hZGQodGl0bGUpOworCQkJfSAvLyBmb3IgZWFjaCBkZWNvcmF0b3IKKwkJfSAvLyBpZgorCQlyZXR1cm4gcmV0VmFsdWUudG9BcnJheShuZXcgU3RyaW5nW10ge30pOworCX0gLy8gZ2V0RGVjb3JhdG9yTmFtZXMKKworCS8qKgorCSAqIEBwYXJhbSBzZWxlY3RlZERlY29yYXRvcgorCSAqIEBwYXJhbSBkZWNvcmF0b3JzCisJICogICAgICAgICAgICBhIGxpc3Qgb2Yge0BsaW5rIERlY29yYXRvcn1zLgorCSAqIEByZXR1cm4gdGhlIHBvc2l0aW9uICgwIG9yaWdpbikgb2YgdGhlIHNlbGVjdGVkRGVjb3JhdG9yIGluIGRlY29yYXRvcnMsCisJICogICAgICAgICBvciAwLCBpZiB0aGUgZGVjb3JhdG9ycyBsaXN0IGlzIGVtcHR5LgorCSAqLworCXByaXZhdGUgaW50IGdldERlY29yYXRvckluZGV4KGZpbmFsIERlY29yYXRvciBzZWxlY3RlZERlY29yYXRvciwKKwkJCWZpbmFsIExpc3Q8RGVjb3JhdG9yPiBkZWNvcmF0b3JzKSB7CisJCWlmIChzZWxlY3RlZERlY29yYXRvciAhPSBudWxsICYmIGRlY29yYXRvcnMgIT0gbnVsbAorCQkJCSYmICFkZWNvcmF0b3JzLmlzRW1wdHkoKSkgeworCQkJLy8gWWVzCisJCQlyZXR1cm4gZGVjb3JhdG9ycy5pbmRleE9mKHNlbGVjdGVkRGVjb3JhdG9yKTsKKwkJfSAvLyBpZgorCQlyZXR1cm4gMDsKKwl9IC8vIGdldERlY29yYXRvckluZGV4CisKKwkvKioKKwkgKiBAcGFyYW0gcHJvcGVydGllcworCSAqICAgICAgICAgICAgYSBsaXN0IG9mIHtAbGluayBEZWNvcmF0b3J9IHByb3BlcnRpZXMuCisJICogQHJldHVybiB0aGUgbmFtZXMgb2YgdGhlIHByb3BlcnRpZXMuCisJICovCisJU3RyaW5nW10gZ2V0UHJvcGVydHlOYW1lcyhmaW5hbCBMaXN0PEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I+IHByb3BlcnRpZXMpIHsKKwkJZmluYWwgTGlzdDxTdHJpbmc+IHJldFZhbHVlID0gbmV3IEFycmF5TGlzdDxTdHJpbmc+KCk7CisJCWlmIChwcm9wZXJ0aWVzICE9IG51bGwpIHsKKwkJCS8vIFllcworCQkJZm9yIChmaW5hbCBJdGVtUHJvcGVydHlEZXNjcmlwdG9yIHByb3BlcnR5IDogcHJvcGVydGllcykgeworCQkJCXJldFZhbHVlLmFkZChwcm9wZXJ0eS5nZXREaXNwbGF5TmFtZShwcm9wZXJ0eSkpOworCQkJfSAvLyBmb3IgZWFjaCBJdGVtUHJvcGVydHlEZXNjcmlwdG9yCisJCX0gLy8gaWYKKwkJcmV0dXJuIHJldFZhbHVlLnRvQXJyYXkobmV3IFN0cmluZ1tdIHt9KTsKKwl9IC8vIGdldFByb3BlcnR5TmFtZXMKKworCS8qKgorCSAqIEBwYXJhbSBzZWxlY3RlZERlY29yYXRvclByb3BlcnR5CisJICogQHBhcmFtIGRlY29yYXRvclByb3BlcnRpZXMKKwkgKiBAcmV0dXJuIHRoZSBpbmRleCBvZiB0aGUgc2VsZWN0ZWREZWNvcmF0b3JQcm9wZXJ0eSBpbiB0aGUKKwkgKiAgICAgICAgIGRlY29yYXRvclByb3Blcml0ZXMgbGlzdCwgb3IgMCBpZiBzZWxlY3RlZERlY29yYXRvclByb3BlcnR5IGlzCisJICogICAgICAgICA8Y29kZT5udWxsPC9jb2RlPgorCSAqLworCWludCBnZXRQcm9wZXJ0eUluZGV4KAorCQkJZmluYWwgSXRlbVByb3BlcnR5RGVzY3JpcHRvciBzZWxlY3RlZERlY29yYXRvclByb3BlcnR5LAorCQkJZmluYWwgTGlzdDxJdGVtUHJvcGVydHlEZXNjcmlwdG9yPiBkZWNvcmF0b3JQcm9wZXJ0aWVzKSB7CisJCWlmIChzZWxlY3RlZERlY29yYXRvclByb3BlcnR5ICE9IG51bGwpIHsKKwkJCS8vIFllcworCQkJcmV0dXJuIGRlY29yYXRvclByb3BlcnRpZXMuaW5kZXhPZihzZWxlY3RlZERlY29yYXRvclByb3BlcnR5KTsKKwkJfSAvLyBpZgorCQlyZXR1cm4gMDsKKwl9IC8vIGdldFByb3BlcnR5SW5kZXgKKworCS8qKgorCSAqIFRoaXMgbWV0aG9kIG1heSBiZSB1c2VkIHRvIGluaXRpYWxpemUgYSBwcm9wZXJ0aWVzIGNvbWJvIHRvIGRpc3BsYXkKKwkgKiAoc2VsZWN0KSBhIHBhcnRpY3VsYXIgcHJvcGVydHkKKwkgKiAKKwkgKiBAcGFyYW0gcHJlZmVycmVkUHJvcGVydHkKKwkgKiAgICAgICAgICAgIHRoZSBuYW1lIG9mIHRoZSBwcm9wZXJ0eSB0byBkaXNwbGF5LgorCSAqIEByZXR1cm4gPGNvZGU+dHJ1ZTwvY29kZT4gaWYgdGhlIHByZWZlcnJlZFByb3BlcnR5IHdhcyBmb3VuZCwKKwkgKiAgICAgICAgIDxjb2RlPmZhbHNlPC9jb2RlPiBvdGhlcndpc2UuCisJICovCisJcHVibGljIGJvb2xlYW4gc2V0RGlzcGxheWVkUHJvcGVydHkoZmluYWwgU3RyaW5nIHByZWZlcnJlZFByb3BlcnR5KSB7CisJCWZpbmFsIGludCBpbmRleCA9IHByb3BlcnRpZXNDb21iby5pbmRleE9mKHByZWZlcnJlZFByb3BlcnR5KTsKKwkJaWYgKGluZGV4ID49IDApIHsKKwkJCXByb3BlcnRpZXNDb21iby5zZWxlY3QoaW5kZXgpOworCQkJaW5pdGlhbFByb3BlcnR5TmFtZSA9IHByZWZlcnJlZFByb3BlcnR5OworCQkJcHJvcGVydGllcyA9IGdldFByb3BlcnRpZXNUb0Rpc3BsYXkoc2VsZWN0ZWREZWNvcmF0b3IsIHNlbGVjdGVkSWQpOworCQkJZm9yIChmaW5hbCBJdGVtUHJvcGVydHlEZXNjcmlwdG9yIHByb3BlcnR5IDogcHJvcGVydGllcykgeworCQkJCS8vIG5hbWUgbWF0Y2g/CisJCQkJaWYgKHByb3BlcnR5LmdldERpc3BsYXlOYW1lKHByb3BlcnR5KS5lcXVhbHMoCisJCQkJCQlpbml0aWFsUHJvcGVydHlOYW1lKSkgeworCQkJCQkvLyBZZXMKKwkJCQkJc2VsZWN0ZWRQcm9wZXJ0eSA9IHByb3BlcnR5OworCQkJCQlicmVhazsKKwkJCQl9IC8vIGlmCisJCQl9IC8vIGZvciBlYWNoIEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IKKwkJCWZpcmVQcm9wZXJ0eVNlbGVjdGlvbkV2ZW50KG5ldyBQcm9wZXJ0eVNlbGVjdGlvbkV2ZW50KAorCQkJCQlzZWxlY3RlZERlY29yYXRvciwgc2VsZWN0ZWRQcm9wZXJ0eSwgcHJvcGVydGllc0NvbWJvLCBzZWxlY3RlZElkKSk7CisJCQlyZXR1cm4gdHJ1ZTsKKwkJfS8vIGlmIHNlbGVjdG9yIGhhcyBpdGVtcworCQlyZXR1cm4gZmFsc2U7CisJfS8vIHNldERpc3BsYXllZFByb3BwZXJ0eSgpCisKKwkvKioKKwkgKiBAcGFyYW0gbGlzdGVuZXIKKwkgKi8KKwlwdWJsaWMgdm9pZCBhZGRQcm9wZXJ0eVNlbGVjdGlvbkxpc3RlbmVyKAorCQkJZmluYWwgUHJvcGVydHlTZWxlY3Rpb25MaXN0ZW5lciBsaXN0ZW5lcikgeworCQlwcm9wZXJ0eVNlbGVjdGlvbkxpc3RlbmVycy5hZGQobGlzdGVuZXIpOworCX0KKworCS8qKgorCSAqIEBwYXJhbSBsaXN0ZW5lcgorCSAqLworCXB1YmxpYyB2b2lkIHJlbW92ZVByb3BlcnR5U2VsZWN0aW9uTGlzdGVuZXIoCisJCQlmaW5hbCBQcm9wZXJ0eVNlbGVjdGlvbkxpc3RlbmVyIGxpc3RlbmVyKSB7CisJCXByb3BlcnR5U2VsZWN0aW9uTGlzdGVuZXJzLnJlbW92ZShsaXN0ZW5lcik7CisJfQorCisJcHJpdmF0ZSB2b2lkIGZpcmVQcm9wZXJ0eVNlbGVjdGlvbkV2ZW50KGZpbmFsIFByb3BlcnR5U2VsZWN0aW9uRXZlbnQgcHNlKSB7CisJCWZvciAoZmluYWwgUHJvcGVydHlTZWxlY3Rpb25MaXN0ZW5lciBsaXN0ZW5lciA6IHByb3BlcnR5U2VsZWN0aW9uTGlzdGVuZXJzKSB7CisJCQlsaXN0ZW5lci5wcm9wZXJ0eVNlbGVjdGVkKHBzZSk7CisJCX0gLy8gZm9yIGVhY2ggUHJvcGVydHlTZWxlY3Rpb25MaXN0ZW5lcgorCX0gLy8gZmlyZVByb3BlcnR5U2VsZWN0aW9uRXZlbnQKKworCS8qKgorCSAqIFRoaXMgaW50ZXJmYWNlIGlzIGltcGxlbWVudGVkIGJ5IGNsYXNzZXMgdGhhdCBkZXRlcm1pbmUgaWYgYQorCSAqIHtAbGluayBEZWNvcmF0b3J9IG1lZXRzIHNvbWUgc3BlY2lmaWVkIGNyaXRlcmlhLgorCSAqLworCXB1YmxpYyBpbnRlcmZhY2UgRGVjb3JhdG9yRmlsdGVyIHsKKwkJLyoqCisJCSAqIEBwYXJhbSBkZWNvcmF0b3IKKwkJICogQHJldHVybiA8Y29kZT50cnVlPC9jb2RlPiBpZiB0aGUge0BsaW5rIERlY29yYXRvcn0gaXMgYWNjZXB0YWJsZS4KKwkJICovCisJCWJvb2xlYW4gYWNjZXB0KGZpbmFsIERlY29yYXRvciBkZWNvcmF0b3IpOworCX0gLy8gRGVjb3JhdG9yRmlsdGVyCisKKwkvKioKKwkgKiBUaGlzIGludGVyZmFjZSBpcyBpbXBsZW1lbnRlZCBieSBjbGFzc2VzIHRoYXQgc2VsZWN0IG91dCB0aGUgcHJvcGVydGllcworCSAqIHRvIGJlIGRpc3BsYXllZC4KKwkgKi8KKwlwdWJsaWMgaW50ZXJmYWNlIFByb3BlcnR5U2lldmUgeworCQkvKioKKwkJICogQHBhcmFtIGR5bmFtaWNMYWJlbAorCQkgKiAgICAgICAgICAgIHRoZSBsYWJlbCB0aGF0IGNvbnRhaW5zIHRoZSBjYW5kaWRhdGUgcHJvcGVydGllcyB0byBiZQorCQkgKiAgICAgICAgICAgIGRpc3BsYXllZC4KKwkJICogQHJldHVybiBhIDxjb2RlPkxpc3Q8L2NvZGU+IG9mIHRoZSBwcm9wZXJ0aWVzIHRoYXQgc2hvdWxkIGJlCisJCSAqICAgICAgICAgZGlzcGxheWVkIGluIHRoZSBvcmRlciB0aGF0IHRoZXkgc2hvdWxkIGJlIGRpc3BsYXllZC4KKwkJICovCisJCUxpc3Q8SXRlbVByb3BlcnR5RGVzY3JpcHRvcj4gc2lldmUoZmluYWwgRHluYW1pY0xhYmVsIGR5bmFtaWNMYWJlbCk7CisJfSAvLyBQcm9wZXJ0eVNpZXZlCisKKwkvKioKKwkgKiBUaGlzIGludGVyZmFjZSBpcyBpbXBsZW1lbnRlZCBieSBjbGFzc2VzIHRoYXQgd2lzaCB0byBiZSBub3RpZmllZAorCSAqIHdoZW5ldmVyIGEgcHJvcGVydHkgaXMgc2VsZWN0ZWQgaW4gdGhpcyB3aWRnZXQuCisJICovCisJcHVibGljIGludGVyZmFjZSBQcm9wZXJ0eVNlbGVjdGlvbkxpc3RlbmVyIHsKKwkJLyoqCisJCSAqIEBwYXJhbSBwcm9wZXJ0eVNlbGVjdGlvbkV2ZW50CisJCSAqLworCQl2b2lkIHByb3BlcnR5U2VsZWN0ZWQoUHJvcGVydHlTZWxlY3Rpb25FdmVudCBwcm9wZXJ0eVNlbGVjdGlvbkV2ZW50KTsKKwl9IC8vIFByb3BlcnR5U2VsZWN0aW9uTGlzdGVuZXIKKworCS8qKgorCSAqIFRoaXMgY2xhc3MgcmVwcmVzZW50cyB0aGUgZXZlbnQgb2YgYSBwcm9wZXJ0eSBiZWluZyBzZWxlY3RlZCBpbiB0aGUKKwkgKiB3aWRnZXQuCisJICovCisJcHVibGljIHN0YXRpYyBjbGFzcyBQcm9wZXJ0eVNlbGVjdGlvbkV2ZW50IGV4dGVuZHMgRXZlbnRPYmplY3QgeworCQlwcml2YXRlIHN0YXRpYyBmaW5hbCBsb25nIHNlcmlhbFZlcnNpb25VSUQgPSAxTDsKKwkJcHJpdmF0ZSB0cmFuc2llbnQgZmluYWwgSXRlbVByb3BlcnR5RGVzY3JpcHRvciBwcm9wZXJ0eTsKKwkJcHJpdmF0ZSB0cmFuc2llbnQgZmluYWwgRGVjb3JhdG9yIGRlY29yYXRvcjsKKwkJcHJpdmF0ZSB0cmFuc2llbnQgZmluYWwgU3RyaW5nIGlkOworCQkKKwkJLyoqCisJCSAqIEBwYXJhbSBkZWNvcmF0b3IKKwkJICogICAgICAgICAgICB0aGUge0BsaW5rIERlY29yYXRvcn0KKwkJICogQHBhcmFtIHByb3BlcnR5CisJCSAqICAgICAgICAgICAgdGhlIHByb3BlcnR5IHRoYXQgd2FzIHNlbGVjdGVkLgorCQkgKiBAcGFyYW0gc291cmNlCisJCSAqLworCQlwdWJsaWMgUHJvcGVydHlTZWxlY3Rpb25FdmVudChmaW5hbCBEZWNvcmF0b3IgZGVjb3JhdG9yLAorCQkJCWZpbmFsIEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IgcHJvcGVydHksIGZpbmFsIE9iamVjdCBzb3VyY2UsIFN0cmluZyBpZCkgeworCQkJc3VwZXIoc291cmNlKTsKKwkJCXRoaXMuZGVjb3JhdG9yID0gZGVjb3JhdG9yOworCQkJdGhpcy5wcm9wZXJ0eSA9IHByb3BlcnR5OworCQkJdGhpcy5pZCA9IGlkOworCQl9CisKKwkJLyoqCisJCSAqIEByZXR1cm4gdGhlIGRlY29yYXRvcgorCQkgKi8KKwkJcHVibGljIGZpbmFsIERlY29yYXRvciBnZXREZWNvcmF0b3IoKSB7CisJCQlyZXR1cm4gZGVjb3JhdG9yOworCQl9CisKKwkJLyoqCisJCSAqIEByZXR1cm4gdGhlIHByb3BlcnR5CisJCSAqLworCQlwdWJsaWMgZmluYWwgSXRlbVByb3BlcnR5RGVzY3JpcHRvciBnZXRQcm9wZXJ0eSgpIHsKKwkJCXJldHVybiBwcm9wZXJ0eTsKKwkJfQorCisJCS8qKgorCQkgKiBnZXRJZC4gR2V0IHRoZSBpZCAoZS5nLiBwb3B1bGF0aW9uIGlkKQorCQkgKi8KKwkJCisJCXB1YmxpYyBTdHJpbmcgZ2V0SWQoKSB7CisJCQlyZXR1cm4gaWQ7CisJCX0KKwkJLyoqCisJCSAqIEBzZWUgamF2YS51dGlsLkV2ZW50T2JqZWN0I3RvU3RyaW5nKCkKKwkJICovCisJCUBPdmVycmlkZQorCQlwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkgeworCQkJZmluYWwgU3RyaW5nQnVpbGRlciBzYiA9IG5ldyBTdHJpbmdCdWlsZGVyKAorCQkJCQlkZWNvcmF0b3IgPT0gbnVsbCA/ICJudWxsLCIgOiBkZWNvcmF0b3IuZ2V0RHVibGluQ29yZSgpCisJCQkJCQkJLmdldFRpdGxlKCkpOworCQkJc2IuYXBwZW5kKHByb3BlcnR5ID09IG51bGwgPyAibnVsbCIgOiBwcm9wZXJ0eQorCQkJCQkuZ2V0RGlzcGxheU5hbWUocHJvcGVydHkpKTsKKwkJCXJldHVybiBzYi50b1N0cmluZygpOworCQl9CisJfSAvLyBQcm9wZXJ0eVNlbGVjdGlvbkV2ZW50CisKKwkvKioKKwkgKiBAcmV0dXJuIHRoZSBkaXNwbGF5IGxhYmVsCisJICovCisJcHVibGljIFN0cmluZyBnZXREaXNwbGF5TGFiZWwoKSB7CisJCXJldHVybiBkaXNwbGF5TGFiZWwuZ2V0VGV4dCgpOworCX0KKworCS8qKgorCSAqIEBwYXJhbSBkaXNwbGF5TGFiZWwKKwkgKiAgICAgICAgICAgIHRoZSBsYWJlbCB0byBkaXNwbGF5IGFib3ZlIHRoZSBwcm9wZXJ0eSBzZWxlY3RvcgorCSAqLworCXB1YmxpYyB2b2lkIHNldERpc3BsYXlMYWJlbChmaW5hbCBTdHJpbmcgZGlzcGxheUxhYmVsKSB7CisJCXRoaXMuZGlzcGxheUxhYmVsLnNldFRleHQoZGlzcGxheUxhYmVsKTsKKwl9CisKK30gLy8gUHJvcGVydHlTZWxlY3RvcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3dpZGdldHMvUmVuYW1lRGlhbG9nLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvd2lkZ2V0cy9SZW5hbWVEaWFsb2cuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZmZhNzY3Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3dpZGdldHMvUmVuYW1lRGlhbG9nLmphdmEKQEAgLTAsMCArMSwxNjQgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS51aS53aWRnZXRzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDEwIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGphdmEuaW8uRmlsZTsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5VUkk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnhtaS5YTUlSZXNvdXJjZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnVpLndpemFyZHMuTWVzc2FnZXM7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LlNXVDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLk1vZGlmeUV2ZW50OworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuTW9kaWZ5TGlzdGVuZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5TZWxlY3Rpb25FdmVudDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLlNlbGVjdGlvbkxpc3RlbmVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5sYXlvdXQuR3JpZERhdGE7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5HcmlkTGF5b3V0OworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkJ1dHRvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5EaWFsb2c7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuRGlzcGxheTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5TaGVsbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5UZXh0OworCitwdWJsaWMgY2xhc3MgUmVuYW1lRGlhbG9nIGV4dGVuZHMgRGlhbG9nIHsKKworCXByaXZhdGUgU3RyaW5nIHRpdGxlOworCWJvb2xlYW4gY2FuY2VsUHJlc3NlZCA9IGZhbHNlOworCVhNSVJlc291cmNlIHJlc291cmNlOworCVN0cmluZyB2YWx1ZTsKKwkKKwlwdWJsaWMgUmVuYW1lRGlhbG9nIChTaGVsbCBwYXJlbnQsIGludCBzdHlsZSwgWE1JUmVzb3VyY2UgcmVzb3VyY2UsIFN0cmluZyB0aXRsZSkgeworCQlzdXBlciAocGFyZW50LCBzdHlsZSk7CisJCXRoaXMudGl0bGUgPSB0aXRsZTsKKwkJdGhpcy5yZXNvdXJjZSA9IHJlc291cmNlOworCX0KKwkKKwkvKioKKwkgKiBvcGVuIHRoZSBtb2RhbCB3aW5kb3cuIAorCSAqIEByZXR1cm4gVGhlIFN0cmluZ1tdIHdpdGggcmVzdWx0cywgb3IgbnVsbCBpZiBjYW5jZWwgd2FzIHByZXNzZWQuCisJICovCisJcHVibGljIFN0cmluZyAgb3BlbiAoKSB7CisJCVNoZWxsIHBhcmVudCA9IGdldFBhcmVudCgpOworCQlmaW5hbCBTaGVsbCBzaGVsbCA9IG5ldyBTaGVsbChwYXJlbnQsIFNXVC5ESUFMT0dfVFJJTSB8IFNXVC5BUFBMSUNBVElPTl9NT0RBTCk7CisJCXNoZWxsLnNldFRleHQodGl0bGUpOworCQlHcmlkTGF5b3V0IGdsID0gbmV3IEdyaWRMYXlvdXQoKTsKKwkJZ2wubnVtQ29sdW1ucyA9IDI7CisJCXNoZWxsLnNldExheW91dChnbCk7CisJCQorCQlHcmlkRGF0YSBnZCA9IG5ldyBHcmlkRGF0YSgpOworCQlnZC5ob3Jpem9udGFsU3BhbiA9IDI7CisJCQorCQlmaW5hbCBUZXh0IHRleHQgPSBuZXcgVGV4dChzaGVsbCwgU1dULk5PTkUpOworCQlpZihyZXNvdXJjZSAhPSBudWxsKSB7CisJCQl0ZXh0LnNldFRleHQocmVzb3VyY2UuZ2V0VVJJKCkubGFzdFNlZ21lbnQoKSk7CisJCQl2YWx1ZSA9IHJlc291cmNlLmdldFVSSSgpLmxhc3RTZWdtZW50KCk7CisJCX0KKwkJdGV4dC5zZXRMYXlvdXREYXRhKGdkKTsKKwkJZ2QubWluaW11bVdpZHRoID0gMTAwOworCQlnZC5ncmFiRXhjZXNzSG9yaXpvbnRhbFNwYWNlID0gdHJ1ZTsKKwkJCisJCWZpbmFsIEJ1dHRvbiBva2F5QnV0dG9uID0gbmV3IEJ1dHRvbihzaGVsbCwgU1dULk5PTkUpOworCQlnZCA9IG5ldyBHcmlkRGF0YSgpOworCQlva2F5QnV0dG9uLnNldFRleHQoTWVzc2FnZXMuZ2V0U3RyaW5nKCJSZW5hbWUuZGlhbG9nLm9rYXkiKSk7CisJCW9rYXlCdXR0b24uc2V0TGF5b3V0RGF0YShnZCk7CisJCW9rYXlCdXR0b24uc2V0RW5hYmxlZChmYWxzZSk7CisJCQorCQlCdXR0b24gY2FuY2VsQnV0dG9uID0gbmV3IEJ1dHRvbihzaGVsbCwgU1dULk5PTkUpOworCQlnZCA9IG5ldyBHcmlkRGF0YSgpOworCQljYW5jZWxCdXR0b24uc2V0VGV4dChNZXNzYWdlcy5nZXRTdHJpbmcoIlJlbmFtZS5kaWFsb2cuY2FuY2VsIikpOworCQljYW5jZWxCdXR0b24uc2V0TGF5b3V0RGF0YShnZCk7CisJCQorCQlzaGVsbC5wYWNrKCk7CisJCXNoZWxsLm9wZW4oKTsKKwkJCisJCQorCQl0ZXh0LmFkZE1vZGlmeUxpc3RlbmVyKG5ldyBNb2RpZnlMaXN0ZW5lcigpIHsKKwkJCQorCQkJcHVibGljIHZvaWQgbW9kaWZ5VGV4dChNb2RpZnlFdmVudCBhcmcwKSB7CisJCQkJVVJJIG9sZFVSSSA9IHJlc291cmNlLmdldFVSSSgpOworCQkJCVN0cmluZyBwYXRoID0gb2xkVVJJLnBhdGgoKTsKKwkJCQlpbnQgaW5kICA9IHBhdGgubGFzdEluZGV4T2YoIi8iKTsKKwkJCQlTdHJpbmcgdHJ1bmNwYXRoID0gIiI7CisJCQkJaWYoaW5kICE9IC0xKSB0cnVuY3BhdGggPSBwYXRoLnN1YnN0cmluZygwLCBpbmQrMSk7CisJCQkJCisJCQkJU3RyaW5nIG5ld3BhdGggPSB0cnVuY3BhdGgrdGV4dC5nZXRUZXh0KCk7CisJCQkJRmlsZSBmID0gbmV3IEZpbGUobmV3cGF0aCk7CisJCQkJaWYoZi5leGlzdHMoKSB8fCB0ZXh0LmdldFRleHQoKS50cmltKCkuZXF1YWxzKCIiKSB8fCB0ZXh0LmdldFRleHQoKS5lcXVhbHMocmVzb3VyY2UuZ2V0VVJJKCkubGFzdFNlZ21lbnQoKSkpIHsKKwkJCQkJb2theUJ1dHRvbi5zZXRFbmFibGVkKGZhbHNlKTsKKwkJCQl9IGVsc2UgeworCQkJCQlva2F5QnV0dG9uLnNldEVuYWJsZWQodHJ1ZSk7CisJCQkJCXZhbHVlID0gdGV4dC5nZXRUZXh0KCk7CisJCQkJfQorCQkJfQorCQl9KTsKKwkJCisJCW9rYXlCdXR0b24uYWRkU2VsZWN0aW9uTGlzdGVuZXIoIG5ldyBTZWxlY3Rpb25MaXN0ZW5lcigpIHsKKwkJCQorCQkJcHVibGljIHZvaWQgd2lkZ2V0U2VsZWN0ZWQoU2VsZWN0aW9uRXZlbnQgYXJnMCkgeworCQkJCWNhbmNlbFByZXNzZWQ9ZmFsc2U7CisJCQkJc2hlbGwuZGlzcG9zZSgpOworCQkJfQorCQkJCisJCQlwdWJsaWMgdm9pZCB3aWRnZXREZWZhdWx0U2VsZWN0ZWQoU2VsZWN0aW9uRXZlbnQgYXJnMCkgeworCQkJCS8vIFRPRE8gQXV0by1nZW5lcmF0ZWQgbWV0aG9kIHN0dWIKKwkJCQkKKwkJCX0KKwkJfSk7CisJCQorCQljYW5jZWxCdXR0b24uYWRkU2VsZWN0aW9uTGlzdGVuZXIoIG5ldyBTZWxlY3Rpb25MaXN0ZW5lcigpIHsKKwkJCQorCQkJcHVibGljIHZvaWQgd2lkZ2V0U2VsZWN0ZWQoU2VsZWN0aW9uRXZlbnQgYXJnMCkgeworCQkJCWNhbmNlbFByZXNzZWQ9dHJ1ZTsKKwkJCQlzaGVsbC5kaXNwb3NlKCk7CisJCQl9CisJCQkKKwkJCXB1YmxpYyB2b2lkIHdpZGdldERlZmF1bHRTZWxlY3RlZChTZWxlY3Rpb25FdmVudCBhcmcwKSB7CisJCQkJLy8gVE9ETyBBdXRvLWdlbmVyYXRlZCBtZXRob2Qgc3R1YgorCQkJCQorCQkJfQorCQl9KTsKKwkJCisJCURpc3BsYXkgZGlzcGxheSA9IHBhcmVudC5nZXREaXNwbGF5KCk7CisJCXdoaWxlICghc2hlbGwuaXNEaXNwb3NlZCgpKSB7CisJCWlmICghZGlzcGxheS5yZWFkQW5kRGlzcGF0Y2goKSkgZGlzcGxheS5zbGVlcCgpOworCQl9CisJCQorCQkKKwkJaWYoIWNhbmNlbFByZXNzZWQpIHsKKwkJCVN0cmluZyByZXMgPSB2YWx1ZTsKKwkJCXJldHVybiByZXM7CisJCX0KKwkJcmV0dXJuIG51bGw7CisJfQorCQorCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZyBbXSBhcmdzKSB7CisJCURpc3BsYXkgZGlzcGxheSA9IG5ldyBEaXNwbGF5KCk7CisJICAgIFNoZWxsIHNoZWxsID0gbmV3IFNoZWxsKGRpc3BsYXkpOworCSAgICAKKy8vCSAgICBTdHJpbmcgW10gcm4gPSB7IkFHRTAtMTAiLCAiQUdFMTEtMzUiLCJBR0UzNi0xMDAifTsKKy8vCQlTdHJpbmcgW10gY24gPSB7IkFHRTAtMTAiLCAiQUdFMTEtMzUiLCJBR0UzNi0xMDAifTsKKwkJCisvLwkJTWF0cml4RWRpdG9yRGlhbG9nIGRpYWxvZyA9IG5ldyBNYXRyaXhFZGl0b3JEaWFsb2coc2hlbGwsIFNXVC5QVVNILCAiRW50ZXIgVmFsdWVzIiwgKHNob3J0KTMsIChzaG9ydCkzLCBybiwgY24sIG5ldyBNYXRyaXhFZGl0b3JWYWxpZGF0b3IoKSB7CisKKwkJCisJCVJlbmFtZURpYWxvZyBkaWFsb2cgID0gbmV3IFJlbmFtZURpYWxvZyhzaGVsbCwgU1dULlBVU0gsIG51bGwsICJFbnRlciBzdHVmZiIpOworCQkJIAorCSAgICBkaWFsb2cub3BlbigpOworCSAgICB3aGlsZSAoIXNoZWxsLmlzRGlzcG9zZWQoKSkgeworCSAgICAgIGlmICghZGlzcGxheS5yZWFkQW5kRGlzcGF0Y2goKSkgeworCSAgICAgICAgZGlzcGxheS5zbGVlcCgpOworCSAgICAgIH0KKwkgICAgfQorCSAgICBkaXNwbGF5LmRpc3Bvc2UoKTsKKwl9CisJCit9CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvd2l6YXJkcy9EdWJsaW5Db3JlUGFnZS5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3dpemFyZHMvRHVibGluQ29yZVBhZ2UuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iOGY5Y2JjCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3dpemFyZHMvRHVibGluQ29yZVBhZ2UuamF2YQpAQCAtMCwwICsxLDgyNCBAQAorLy8gRHVibGluQ29yZVBhZ2UuamF2YQorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnVpLndpemFyZHM7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgamF2YS50ZXh0LlBhcnNlRXhjZXB0aW9uOworaW1wb3J0IGphdmEudXRpbC5DYWxlbmRhcjsKK2ltcG9ydCBqYXZhLnV0aWwuRGF0ZTsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLndpemFyZC5XaXphcmRQYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uQ29tbW9uRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLkR1YmxpbkNvcmU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5pbXBsLkR1YmxpbkNvcmVJbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5TV1Q7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmN1c3RvbS5TY3JvbGxlZENvbXBvc2l0ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLk1vZGlmeUV2ZW50OworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuTW9kaWZ5TGlzdGVuZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5HcmlkRGF0YTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QubGF5b3V0LkdyaWRMYXlvdXQ7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkxhYmVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlRleHQ7CisKKy8qKgorICogVGhpcyBjbGFzcyBpcyB0aGUge0BsaW5rIFdpemFyZFBhZ2V9IHRoYXQgYWxsIHtAbGluayBOZXdJZGVudGlmaWFibGVXaXphcmR9cworICogdXNlIHRvIHNwZWNpZnkgdGhlIGRldGFpbHMgb2YgYSB7QGxpbmsgRHVibGluQ29yZX0gaW5zdGFuY2UuIEVhY2gKKyAqIHtAbGluayBOZXdJZGVudGlmaWFibGVXaXphcmR9IGNvbnRhaW5zIGEge0BsaW5rIE5ld0lkZW50aWZpYWJsZVBhZ2V9IGFuZCBvbmUKKyAqIG9mIHRoZXNlIHBhZ2VzLgorICogCisgKiBAc2VlIE5ld0lkZW50aWZpYWJsZVBhZ2UKKyAqIEBzZWUgTmV3SWRlbnRpZmlhYmxlV2l6YXJkCisgKi8KK3B1YmxpYyBjbGFzcyBEdWJsaW5Db3JlUGFnZSBleHRlbmRzIFdpemFyZFBhZ2UgeworCisJLyoqCisJICogVGhpcyBpcyB0aGUgY2hhcmFjdGVyIGRpc3BsYXllZCBuZXh0IHRvIGF0dHJpYnV0ZSBuYW1lcyBmb3IgdGhvc2UKKwkgKiBhdHRyaWJ1dGVzIHRoYXQgYXJlIHJlcXVpcmVkLiBJdCBpcyBhcHBsaWVkIHRvIHRoZSBhdHRyaWJ1dGUgbmFtZSBpbgorCSAqICNjcmVhdGVEQ0F0dHJpYnV0ZShDb21wb3NpdGUsIFN0cmluZywgU3RyaW5nLCBib29sZWFuLCBib29sZWFuKSBpZiB0aGUKKwkgKiBhcHByb3ByaWF0ZSBmbGFnIGlzIDxjb2RlPnRydWU8L2NvZGU+LgorCSAqLworCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBSRVFVSVJFRF9GSUVMRF9DSEFSID0gIioiOyAvLyROT04tTkxTLTEkCisKKwkvKioKKwkgKiBUaGlzIHtAbGluayBNb2RpZnlMaXN0ZW5lcn0gaXMgYXR0YWNoZWQgdG8gdGhvc2UgYXR0cmlidXRlcyB3aG9zZQorCSAqIGNvbnRlbnRzIG5lZWQgdG8gYmUgdmVyaWZpZWQgZm9yIGNvcnJlY3RuZXNzLiBXaGVuZXZlciBvbmUgb2YgdGhvc2UKKwkgKiBhdHRyaWJ1dGVzIGNoYW5nZXMsIGEgY2FsbCB0byB7QGxpbmsgI3ZhbGlkYXRlRHVibGluQ29yZVBhZ2UoKX0gaXMgbWFkZQorCSAqIHdoaWNoIHRoZW4gcmV0dXJucyA8Y29kZT50cnVlPC9jb2RlPiBvciA8Y29kZT5mYWxzZTwvY29kZT4uIFRoaXMKKwkgKiB2YWx1ZSBpcyBwYXNzZWQgdG8ge0BsaW5rICNzZXRQYWdlQ29tcGxldGUoYm9vbGVhbil9IHdoaWNoIHRoZW4gZW5hYmxlcworCSAqIG9yIGRpc2FibGVzIHRoZSBidXR0b25zIGF0IHRoZSBib3R0b20gb2YgdGhlIHtAbGluayBEdWJsaW5Db3JlUGFnZX0uIFRoZQorCSAqIGF0dGFjaG1lbnQgaXMgZG9uZSBpbiB0aGUgbWV0aG9kCisJICoge0BsaW5rICNjcmVhdGVEQ0F0dHJpYnV0ZShDb21wb3NpdGUsIFN0cmluZywgU3RyaW5nLCBib29sZWFuLCBib29sZWFuKX0KKwkgKiBpZiB0aGUgYXBwcm9wcmlhdGUgZmxhZyBpcyA8Y29kZT50cnVlPC9jb2RlPi4KKwkgKi8KKwlwcml2YXRlIGZpbmFsIE1vZGlmeUxpc3RlbmVyIGRjVmFsaWRhdG9yID0gbmV3IE1vZGlmeUxpc3RlbmVyKCkgeworCQlwdWJsaWMgdm9pZCBtb2RpZnlUZXh0KEBTdXBwcmVzc1dhcm5pbmdzKCJ1bnVzZWQiKSBmaW5hbCBNb2RpZnlFdmVudCBlKSB7CisJCQlzZXRQYWdlQ29tcGxldGUodmFsaWRhdGVEdWJsaW5Db3JlUGFnZSgpKTsKKwkJfQorCX07CisKKwkvKioKKwkgKiBSZXF1aXJlZCwgVmFsaWRhdGVkCisJICogCisJICogQHNlZSBEdWJsaW5Db3JlI2dldFRpdGxlKCkKKwkgKiBAc2VlICNSRVFVSVJFRF9GSUVMRF9DSEFSCisJICogQHNlZSAjZGNWYWxpZGF0b3IKKwkgKiBAc2VlICN2YWxpZGF0ZUR1YmxpbkNvcmVQYWdlKCkKKwkgKi8KKwlwcm90ZWN0ZWQgVGV4dCB0aXRsZVRleHRGaWVsZDsKKworCQorCisJLyoqCisJICogQHNlZSBEdWJsaW5Db3JlI2dldERlc2NyaXB0aW9uKCkKKwkgKi8KKwlwcm90ZWN0ZWQgVGV4dCBkZXNjcmlwdGlvblRleHRGaWVsZDsKKworCS8qKgorCSAqIEBzZWUgRHVibGluQ29yZSNnZXRDcmVhdG9yKCkKKwkgKi8KKwlwcm90ZWN0ZWQgVGV4dCBjcmVhdG9yOworCisJLyoqCisJICogVmFsaWRhdGVkCisJICogCisJICogQHNlZSBEdWJsaW5Db3JlI2dldERhdGUoKQorCSAqIEBzZWUgI2RjVmFsaWRhdG9yCisJICogQHNlZSAjdmFsaWRhdGVEdWJsaW5Db3JlUGFnZSgpCisJICovCisJcHJvdGVjdGVkIFRleHQgZGF0ZTsKKworCS8qKgorCSAqIFJlcXVpcmVkCisJICogCisJICogQHNlZSBEdWJsaW5Db3JlI2dldEZvcm1hdCgpCisJICogQHNlZSAjUkVRVUlSRURfRklFTERfQ0hBUgorCSAqLworCXByb3RlY3RlZCBUZXh0IGZvcm1hdDsKKworCS8qKgorCSAqIEBzZWUgRHVibGluQ29yZSNnZXRQdWJsaXNoZXIoKQorCSAqLworCXByb3RlY3RlZCBUZXh0IHB1Ymxpc2hlcjsKKworCS8qKgorCSAqIEBzZWUgRHVibGluQ29yZSNnZXRDb3ZlcmFnZSgpCisJICovCisJcHJvdGVjdGVkIFRleHQgY292ZXJhZ2U7CisKKwkvKioKKwkgKiBAc2VlIER1YmxpbkNvcmUjZ2V0Q29udHJpYnV0b3IoKQorCSAqLworCXByb3RlY3RlZCBUZXh0IGNvbnRyaWJ1dG9yOworCisJLyoqCisJICogQHNlZSBEdWJsaW5Db3JlI2dldFJlbGF0aW9uKCkKKwkgKi8KKwlwcm90ZWN0ZWQgVGV4dCByZWxhdGlvbjsKKworCS8qKgorCSAqIEBzZWUgRHVibGluQ29yZSNnZXRSaWdodHMoKQorCSAqLworCXByb3RlY3RlZCBUZXh0IHJpZ2h0czsKKworCS8qKgorCSAqIEBzZWUgRHVibGluQ29yZSNnZXRTb3VyY2UoKQorCSAqLworCXByb3RlY3RlZCBUZXh0IHNvdXJjZTsKKworCS8qKgorCSAqIEBzZWUgRHVibGluQ29yZSNnZXRTdWJqZWN0KCkKKwkgKi8KKwlwcm90ZWN0ZWQgVGV4dCBzdWJqZWN0OworCisJLyoqCisJICogUmVxdWlyZWQKKwkgKiAKKwkgKiBAc2VlIER1YmxpbkNvcmUjZ2V0VHlwZSgpCisJICogQHNlZSAjUkVRVUlSRURfRklFTERfQ0hBUgorCSAqLworCXByb3RlY3RlZCBUZXh0IHR5cGU7CisKKwkvKioKKwkgKiBAc2VlIER1YmxpbkNvcmUjZ2V0TGFuZ3VhZ2UoKQorCSAqLworCXByb3RlY3RlZCBUZXh0IGxhbmd1YWdlOworCisJLyoqCisJICogQHNlZSBEdWJsaW5Db3JlI2dldEJpYmxpb2dyYXBoaWNDaXRhdGlvbigpCisJICovCisJcHJvdGVjdGVkIFRleHQgYmlibGlvZ3JhcGhpY0NpdGF0aW9uOworCisJLyoqCisJICogVmFsaWRhdGVkCisJICogCisJICogQHNlZSBEdWJsaW5Db3JlI2dldENyZWF0ZWQoKQorCSAqIEBzZWUgI2RjVmFsaWRhdG9yCisJICogQHNlZSAjdmFsaWRhdGVEdWJsaW5Db3JlUGFnZSgpCisJICovCisJcHJvdGVjdGVkIFRleHQgY3JlYXRlZDsKKworCS8qKgorCSAqIEBzZWUgRHVibGluQ29yZSNnZXRMaWNlbnNlKCkKKwkgKi8KKwlwcm90ZWN0ZWQgVGV4dCBsaWNlbnNlOworCisJLyoqCisJICogQHNlZSBEdWJsaW5Db3JlI2dldFJlcXVpcmVkKCkKKwkgKi8KKwlwcm90ZWN0ZWQgVGV4dCByZXF1aXJlZDsKKworCS8qKgorCSAqIEBzZWUgRHVibGluQ29yZSNnZXRTcGF0aWFsKCkKKwkgKi8KKwlwcm90ZWN0ZWQgVGV4dCBzcGF0aWFsOworCisJLyoqCisJICogVmFsaWRhdGVkCisJICogCisJICogQHNlZSBEdWJsaW5Db3JlI2dldFZhbGlkKCkKKwkgKiBAc2VlICNkY1ZhbGlkYXRvcgorCSAqIEBzZWUgI3ZhbGlkYXRlRHVibGluQ29yZVBhZ2UoKQorCSAqLworCXByb3RlY3RlZCBUZXh0IHZhbGlkOworCisJLyoqCisJICogRGVmYXVsdCBDb25zdHJ1Y3RvcgorCSAqLworCXByb3RlY3RlZCBEdWJsaW5Db3JlUGFnZSgpIHsKKwkJc3VwZXIoTWVzc2FnZXMuZ2V0U3RyaW5nKCJORHVibGluQ29yZS5wYWdlX3RpdGxlIikpOyAvLyROT04tTkxTLTEkCisJCXNldFRpdGxlKE1lc3NhZ2VzLmdldFN0cmluZygiTkR1YmxpbkNvcmUucGFnZV90aXRsZSIpKTsgLy8kTk9OLU5MUy0xJAorCQlzZXREZXNjcmlwdGlvbihNZXNzYWdlcy5nZXRTdHJpbmcoIk5EdWJsaW5Db3JlLnBhZ2VfZGVzY3JpcHRpb24iKSk7IC8vJE5PTi1OTFMtMSQKKwl9IC8vIER1YmxpbkNvcmVQYWdlCisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLmpmYWNlLmRpYWxvZ3MuSURpYWxvZ1BhZ2UjY3JlYXRlQ29udHJvbChvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGUpCisJICovCisJcHVibGljIHZvaWQgY3JlYXRlQ29udHJvbChmaW5hbCBDb21wb3NpdGUgcGFyZW50KSB7CisJCS8vIENyZWF0ZXMgYSB7QGxpbmsgQ29tcG9zaXRlfSBhbmQgY2FsbHMge0BsaW5rCisJCS8vICNzZXRDb250cm9sKG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbnRyb2wpfQorCisJCS8vIFBhZ2UgQ29tcG9zaXRlCisJCWZpbmFsIFNjcm9sbGVkQ29tcG9zaXRlIHNjcm9sbENvbXBvc2l0ZSA9IG5ldyBTY3JvbGxlZENvbXBvc2l0ZShwYXJlbnQsIFNXVC5IX1NDUk9MTCB8IFNXVC5WX1NDUk9MTCk7CisJCWZpbmFsIENvbXBvc2l0ZSBwYWdlQ29tcG9zaXRlID0gbmV3IENvbXBvc2l0ZShzY3JvbGxDb21wb3NpdGUsIFNXVC5Ob25lKTsKKwkJZmluYWwgR3JpZExheW91dCBwYWdlQ29tcG9zaXRlTGF5b3V0ID0gbmV3IEdyaWRMYXlvdXQoKTsKKwkJcGFnZUNvbXBvc2l0ZUxheW91dC52ZXJ0aWNhbFNwYWNpbmcgPSAxMjsKKwkJcGFnZUNvbXBvc2l0ZUxheW91dC5udW1Db2x1bW5zID0gMjsKKwkJcGFnZUNvbXBvc2l0ZUxheW91dC5tYXJnaW5IZWlnaHQgPSAwOworCQlwYWdlQ29tcG9zaXRlTGF5b3V0Lm1hcmdpbldpZHRoID0gMDsKKwkJcGFnZUNvbXBvc2l0ZS5zZXRMYXlvdXQocGFnZUNvbXBvc2l0ZUxheW91dCk7CisJCQorCQlzY3JvbGxDb21wb3NpdGUuc2V0Q29udGVudChwYWdlQ29tcG9zaXRlKTsKKwkJc2Nyb2xsQ29tcG9zaXRlLnNldEV4cGFuZEhvcml6b250YWwodHJ1ZSk7CisJCXNjcm9sbENvbXBvc2l0ZS5zZXRFeHBhbmRWZXJ0aWNhbCh0cnVlKTsKKworCQlmaW5hbCBHcmlkRGF0YSBwYWdlQ29tcG9zaXRlTGF5b3V0RGF0YSA9IG5ldyBHcmlkRGF0YSgpOworCQlwYWdlQ29tcG9zaXRlTGF5b3V0RGF0YS5ncmFiRXhjZXNzVmVydGljYWxTcGFjZSA9IHRydWU7CisJCXBhZ2VDb21wb3NpdGVMYXlvdXREYXRhLnZlcnRpY2FsQWxpZ25tZW50ID0gR3JpZERhdGEuRklMTDsKKwkJcGFnZUNvbXBvc2l0ZUxheW91dERhdGEuaG9yaXpvbnRhbEFsaWdubWVudCA9IEdyaWREYXRhLkZJTEw7CisJCXBhZ2VDb21wb3NpdGVMYXlvdXREYXRhLmhvcml6b250YWxTcGFuID0gMTsKKwkJcGFnZUNvbXBvc2l0ZS5zZXRMYXlvdXREYXRhKHBhZ2VDb21wb3NpdGVMYXlvdXREYXRhKTsKKworCQl0aXRsZVRleHRGaWVsZCA9IGNyZWF0ZURDQXR0cmlidXRlKHBhZ2VDb21wb3NpdGUsIE1lc3NhZ2VzCisJCQkJLmdldFN0cmluZygiTkR1YmxpbkNvcmUudGl0bGUiKSwgLy8kTk9OLU5MUy0xJAorCQkJCU1lc3NhZ2VzLmdldFN0cmluZygiTkR1YmxpbkNvcmUudGl0bGVEZXNjIiksIC8vJE5PTi1OTFMtMSQKKwkJCQl0cnVlLCB0cnVlKTsKKwkJZGVzY3JpcHRpb25UZXh0RmllbGQgPSBjcmVhdGVEQ0F0dHJpYnV0ZShwYWdlQ29tcG9zaXRlLCBNZXNzYWdlcworCQkJCS5nZXRTdHJpbmcoIk5EdWJsaW5Db3JlLmRlc2MiKSwgLy8kTk9OLU5MUy0xJAorCQkJCU1lc3NhZ2VzLmdldFN0cmluZygiTkR1YmxpbkNvcmUuZGVzY0Rlc2MiKSwgLy8kTk9OLU5MUy0xJAorCQkJCWZhbHNlLCBmYWxzZSk7CisJCWNyZWF0b3IgPSBjcmVhdGVEQ0F0dHJpYnV0ZShwYWdlQ29tcG9zaXRlLCBNZXNzYWdlcworCQkJCS5nZXRTdHJpbmcoIk5EdWJsaW5Db3JlLmNyZWF0b3IiKSwgLy8kTk9OLU5MUy0xJAorCQkJCU1lc3NhZ2VzLmdldFN0cmluZygiTkR1YmxpbkNvcmUuY3JlYXRvckRlc2MiKSwgLy8kTk9OLU5MUy0xJAorCQkJCWZhbHNlLCBmYWxzZSk7CisJCWRhdGUgPSBjcmVhdGVEQ0F0dHJpYnV0ZShwYWdlQ29tcG9zaXRlLCBNZXNzYWdlcworCQkJCS5nZXRTdHJpbmcoIk5EdWJsaW5Db3JlLmRhdGUiKSwgLy8kTk9OLU5MUy0xJAorCQkJCU1lc3NhZ2VzLmdldFN0cmluZygiTkR1YmxpbkNvcmUuZGF0ZURlc2MiKSwgLy8kTk9OLU5MUy0xJAorCQkJCWZhbHNlLCB0cnVlKTsKKwkJdmFsaWQgPSBjcmVhdGVEQ0F0dHJpYnV0ZShwYWdlQ29tcG9zaXRlLCBNZXNzYWdlcworCQkJCS5nZXRTdHJpbmcoIk5EdWJsaW5Db3JlLnZhbGlkIiksIC8vJE5PTi1OTFMtMSQKKwkJCQlNZXNzYWdlcy5nZXRTdHJpbmcoIk5EdWJsaW5Db3JlLnZhbGlkRGVzYyIpLCAvLyROT04tTkxTLTEkCisJCQkJZmFsc2UsIHRydWUpOworCQljcmVhdGVkID0gY3JlYXRlRENBdHRyaWJ1dGUocGFnZUNvbXBvc2l0ZSwgTWVzc2FnZXMKKwkJCQkuZ2V0U3RyaW5nKCJORHVibGluQ29yZS5jcmVhdGVkIiksIC8vJE5PTi1OTFMtMSQKKwkJCQlNZXNzYWdlcy5nZXRTdHJpbmcoIk5EdWJsaW5Db3JlLmNyZWF0ZWREZXNjIiksIC8vJE5PTi1OTFMtMSQKKwkJCQlmYWxzZSwgdHJ1ZSk7CisJCXNvdXJjZSA9IGNyZWF0ZURDQXR0cmlidXRlKHBhZ2VDb21wb3NpdGUsIE1lc3NhZ2VzCisJCQkJLmdldFN0cmluZygiTkR1YmxpbkNvcmUuc291cmNlIiksIC8vJE5PTi1OTFMtMSQKKwkJCQlNZXNzYWdlcy5nZXRTdHJpbmcoIk5EdWJsaW5Db3JlLnNvdXJjZURlc2MiKSwgLy8kTk9OLU5MUy0xJAorCQkJCWZhbHNlLCBmYWxzZSk7CisKKwkJcHVibGlzaGVyID0gY3JlYXRlRENBdHRyaWJ1dGUocGFnZUNvbXBvc2l0ZSwgTWVzc2FnZXMKKwkJCQkuZ2V0U3RyaW5nKCJORHVibGluQ29yZS5wdWJsaXNoZXIiKSwgLy8kTk9OLU5MUy0xJAorCQkJCU1lc3NhZ2VzLmdldFN0cmluZygiTkR1YmxpbkNvcmUucHVibGlzaGVyRGVzYyIpLCAvLyROT04tTkxTLTEkCisJCQkJZmFsc2UsIGZhbHNlKTsKKwkJY292ZXJhZ2UgPSBjcmVhdGVEQ0F0dHJpYnV0ZShwYWdlQ29tcG9zaXRlLCBNZXNzYWdlcworCQkJCS5nZXRTdHJpbmcoIk5EdWJsaW5Db3JlLmNvdmVyYWdlIiksIC8vJE5PTi1OTFMtMSQKKwkJCQlNZXNzYWdlcy5nZXRTdHJpbmcoIk5EdWJsaW5Db3JlLmNvdmVyYWdlRGVzYyIpLCAvLyROT04tTkxTLTEkCisJCQkJZmFsc2UsIGZhbHNlKTsKKwkJY29udHJpYnV0b3IgPSBjcmVhdGVEQ0F0dHJpYnV0ZShwYWdlQ29tcG9zaXRlLCBNZXNzYWdlcworCQkJCS5nZXRTdHJpbmcoIk5EdWJsaW5Db3JlLmNvbnRyaWJ1dG9yIiksIC8vJE5PTi1OTFMtMSQKKwkJCQlNZXNzYWdlcy5nZXRTdHJpbmcoIk5EdWJsaW5Db3JlLmNvbnRyaWJ1dG9yRGVzYyIpLCAvLyROT04tTkxTLTEkCisJCQkJZmFsc2UsIGZhbHNlKTsKKwkJcmVsYXRpb24gPSBjcmVhdGVEQ0F0dHJpYnV0ZShwYWdlQ29tcG9zaXRlLCBNZXNzYWdlcworCQkJCS5nZXRTdHJpbmcoIk5EdWJsaW5Db3JlLnJlbGF0aW9uIiksIC8vJE5PTi1OTFMtMSQKKwkJCQlNZXNzYWdlcy5nZXRTdHJpbmcoIk5EdWJsaW5Db3JlLnJlbGF0aW9uRGVzYyIpLCBmYWxzZSwgLy8kTk9OLU5MUy0xJAorCQkJCWZhbHNlKTsKKwkJcmlnaHRzID0gY3JlYXRlRENBdHRyaWJ1dGUocGFnZUNvbXBvc2l0ZSwgTWVzc2FnZXMKKwkJCQkuZ2V0U3RyaW5nKCJORHVibGluQ29yZS5yaWdodHMiKSwgLy8kTk9OLU5MUy0xJAorCQkJCU1lc3NhZ2VzLmdldFN0cmluZygiTkR1YmxpbkNvcmUucmlnaHRzRGVzYyIpLCAvLyROT04tTkxTLTEkCisJCQkJZmFsc2UsIGZhbHNlKTsKKworCQlzdWJqZWN0ID0gY3JlYXRlRENBdHRyaWJ1dGUocGFnZUNvbXBvc2l0ZSwgTWVzc2FnZXMKKwkJCQkuZ2V0U3RyaW5nKCJORHVibGluQ29yZS5zdWJqZWN0IiksIC8vJE5PTi1OTFMtMSQKKwkJCQlNZXNzYWdlcy5nZXRTdHJpbmcoIk5EdWJsaW5Db3JlLnN1YmplY3REZXNjIiksIC8vJE5PTi1OTFMtMSQKKwkJCQlmYWxzZSwgZmFsc2UpOworCQlsYW5ndWFnZSA9IGNyZWF0ZURDQXR0cmlidXRlKHBhZ2VDb21wb3NpdGUsIE1lc3NhZ2VzCisJCQkJLmdldFN0cmluZygiTkR1YmxpbkNvcmUubGFuZ3VhZ2UiKSwgLy8kTk9OLU5MUy0xJAorCQkJCU1lc3NhZ2VzLmdldFN0cmluZygiTkR1YmxpbkNvcmUubGFuZ3VhZ2VEZXNjIiksIC8vJE5PTi1OTFMtMSQKKwkJCQlmYWxzZSwgZmFsc2UpOworCQliaWJsaW9ncmFwaGljQ2l0YXRpb24gPSBjcmVhdGVEQ0F0dHJpYnV0ZShwYWdlQ29tcG9zaXRlLCBNZXNzYWdlcworCQkJCS5nZXRTdHJpbmcoIk5EdWJsaW5Db3JlLmNpdGF0aW9uIiksIC8vJE5PTi1OTFMtMSQKKwkJCQlNZXNzYWdlcy5nZXRTdHJpbmcoIk5EdWJsaW5Db3JlLmNpdGF0aW9uRGVzYyIpLCBmYWxzZSwgZmFsc2UpOyAvLyROT04tTkxTLTEkCisKKwkJbGljZW5zZSA9IGNyZWF0ZURDQXR0cmlidXRlKHBhZ2VDb21wb3NpdGUsIE1lc3NhZ2VzCisJCQkJLmdldFN0cmluZygiTkR1YmxpbkNvcmUubGljZW5zZSIpLCAvLyROT04tTkxTLTEkCisJCQkJTWVzc2FnZXMuZ2V0U3RyaW5nKCJORHVibGluQ29yZS5saWNlbnNEZXNjIiksIC8vJE5PTi1OTFMtMSQKKwkJCQlmYWxzZSwgZmFsc2UpOworCQlyZXF1aXJlZCA9IGNyZWF0ZURDQXR0cmlidXRlKHBhZ2VDb21wb3NpdGUsIE1lc3NhZ2VzCisJCQkJLmdldFN0cmluZygiTkR1YmxpbkNvcmUucmVxdWlyZWQiKSwgLy8kTk9OLU5MUy0xJAorCQkJCU1lc3NhZ2VzLmdldFN0cmluZygiTkR1YmxpbkNvcmUucmVxdWlyZWREZXNjIiksIC8vJE5PTi1OTFMtMSQKKwkJCQlmYWxzZSwgZmFsc2UpOworCQlzcGF0aWFsID0gY3JlYXRlRENBdHRyaWJ1dGUocGFnZUNvbXBvc2l0ZSwgTWVzc2FnZXMKKwkJCQkuZ2V0U3RyaW5nKCJORHVibGluQ29yZS5zcGF0aWFsIiksIC8vJE5PTi1OTFMtMSQKKwkJCQlNZXNzYWdlcy5nZXRTdHJpbmcoIk5EdWJsaW5Db3JlLnNwYXRpYWxEZXNjIiksIC8vJE5PTi1OTFMtMSQKKwkJCQlmYWxzZSwgZmFsc2UpOworCisJCWZvcm1hdCA9IGNyZWF0ZURDQXR0cmlidXRlKHBhZ2VDb21wb3NpdGUsIE1lc3NhZ2VzCisJCQkJLmdldFN0cmluZygiTkR1YmxpbkNvcmUuZm9ybWF0IiksIC8vJE5PTi1OTFMtMSQKKwkJCQlNZXNzYWdlcy5nZXRTdHJpbmcoIk5EdWJsaW5Db3JlLmZvcm1hdERlc2MiKSwgLy8kTk9OLU5MUy0xJAorCQkJCXRydWUsIGZhbHNlKTsKKwkJdHlwZSA9IGNyZWF0ZURDQXR0cmlidXRlKHBhZ2VDb21wb3NpdGUsIE1lc3NhZ2VzCisJCQkJLmdldFN0cmluZygiTkR1YmxpbkNvcmUudHlwZSIpLCAvLyROT04tTkxTLTEkCisJCQkJTWVzc2FnZXMuZ2V0U3RyaW5nKCJORHVibGluQ29yZS50eXBlRGVzYyIpLCAvLyROT04tTkxTLTEkCisJCQkJdHJ1ZSwgZmFsc2UpOworCQkKKwkJTW9kaWZ5TGlzdGVuZXIgcmVzaXplTGlzdGVuZXIgPSBuZXcgTW9kaWZ5TGlzdGVuZXIoKSB7CisJCQkKKwkJCUBPdmVycmlkZQorCQkJcHVibGljIHZvaWQgbW9kaWZ5VGV4dChNb2RpZnlFdmVudCBlKSB7CisJCQkJc2Nyb2xsQ29tcG9zaXRlLnNldE1pblNpemUocGFnZUNvbXBvc2l0ZS5jb21wdXRlU2l6ZShTV1QuREVGQVVMVCwgU1dULkRFRkFVTFQpKTsKKwkJCX0KKwkJfTsKKwkJCisJCXRpdGxlVGV4dEZpZWxkLmFkZE1vZGlmeUxpc3RlbmVyKHJlc2l6ZUxpc3RlbmVyKTsKKwkJZGVzY3JpcHRpb25UZXh0RmllbGQuYWRkTW9kaWZ5TGlzdGVuZXIocmVzaXplTGlzdGVuZXIpOworCQljcmVhdG9yLmFkZE1vZGlmeUxpc3RlbmVyKHJlc2l6ZUxpc3RlbmVyKTsKKwkJZGF0ZS5hZGRNb2RpZnlMaXN0ZW5lcihyZXNpemVMaXN0ZW5lcik7CisJCWZvcm1hdC5hZGRNb2RpZnlMaXN0ZW5lcihyZXNpemVMaXN0ZW5lcik7CisJCXB1Ymxpc2hlci5hZGRNb2RpZnlMaXN0ZW5lcihyZXNpemVMaXN0ZW5lcik7CisJCWNvdmVyYWdlLmFkZE1vZGlmeUxpc3RlbmVyKHJlc2l6ZUxpc3RlbmVyKTsKKwkJY29udHJpYnV0b3IuYWRkTW9kaWZ5TGlzdGVuZXIocmVzaXplTGlzdGVuZXIpOworCQlyZWxhdGlvbi5hZGRNb2RpZnlMaXN0ZW5lcihyZXNpemVMaXN0ZW5lcik7CisJCXJpZ2h0cy5hZGRNb2RpZnlMaXN0ZW5lcihyZXNpemVMaXN0ZW5lcik7CisJCXNvdXJjZS5hZGRNb2RpZnlMaXN0ZW5lcihyZXNpemVMaXN0ZW5lcik7CisJCXN1YmplY3QuYWRkTW9kaWZ5TGlzdGVuZXIocmVzaXplTGlzdGVuZXIpOworCQl0eXBlLmFkZE1vZGlmeUxpc3RlbmVyKHJlc2l6ZUxpc3RlbmVyKTsKKwkJbGFuZ3VhZ2UuYWRkTW9kaWZ5TGlzdGVuZXIocmVzaXplTGlzdGVuZXIpOworCQliaWJsaW9ncmFwaGljQ2l0YXRpb24uYWRkTW9kaWZ5TGlzdGVuZXIocmVzaXplTGlzdGVuZXIpOworCQljcmVhdGVkLmFkZE1vZGlmeUxpc3RlbmVyKHJlc2l6ZUxpc3RlbmVyKTsKKwkJbGljZW5zZS5hZGRNb2RpZnlMaXN0ZW5lcihyZXNpemVMaXN0ZW5lcik7CisJCXJlcXVpcmVkLmFkZE1vZGlmeUxpc3RlbmVyKHJlc2l6ZUxpc3RlbmVyKTsKKwkJc3BhdGlhbC5hZGRNb2RpZnlMaXN0ZW5lcihyZXNpemVMaXN0ZW5lcik7CisJCXZhbGlkLmFkZE1vZGlmeUxpc3RlbmVyKHJlc2l6ZUxpc3RlbmVyKTsKKworCQlmaW5hbCBMYWJlbCByZXF1aXJlZEZpZWxkTGFiZWwgPSBuZXcgTGFiZWwocGFnZUNvbXBvc2l0ZSwgU1dULk5PTkUpOworCQlyZXF1aXJlZEZpZWxkTGFiZWwuc2V0VGV4dChSRVFVSVJFRF9GSUVMRF9DSEFSCisJCQkJKyBNZXNzYWdlcy5nZXRTdHJpbmcoIk5EdWJsaW5Db3JlLnJlcXVpcmVkRmllbGQiKSk7IC8vJE5PTi1OTFMtMSQKKwkJZmluYWwgR3JpZERhdGEgcmVxdWlyZWRMYWJlbExheW91dERhdGEgPSBuZXcgR3JpZERhdGEoKTsKKwkJcmVxdWlyZWRMYWJlbExheW91dERhdGEuaG9yaXpvbnRhbFNwYW4gPSAyOworCQlyZXF1aXJlZEZpZWxkTGFiZWwuc2V0TGF5b3V0RGF0YShyZXF1aXJlZExhYmVsTGF5b3V0RGF0YSk7CisKKwkJaW5pdGlhbGl6ZURDQXR0cmlidXRlcygpOworCisJCXNldFBhZ2VDb21wbGV0ZSh2YWxpZGF0ZUR1YmxpbkNvcmVQYWdlKCkpOworCQlzZXRDb250cm9sKHNjcm9sbENvbXBvc2l0ZSk7CisJfSAvLyBjcmVhdGVDb250cm9sCisKKwkvKioKKwkgKiBTZXQgdGhlIHtAbGluayAjY3JlYXRlZH0gYXR0cmlidXRlIHRvIGhhdmUgdGhlIGN1cnJlbnQgZGF0ZSBzdHJpbmcgYW5kCisJICogdGhlIHtAbGluayAjY3JlYXRvcn0gdG8gYmUgdGhlIHZhbHVlIG9mIHRoZSAidXNlci5uYW1lIiBzeXN0ZW0gcHJvcGVydHkuCisJICovCisJcHJvdGVjdGVkIHZvaWQgaW5pdGlhbGl6ZURDQXR0cmlidXRlcygpIHsKKwkJY3JlYXRlZC5zZXRUZXh0KER1YmxpbkNvcmVJbXBsLmNyZWF0ZUlTTzg2MDFEYXRlU3RyaW5nKENhbGVuZGFyCisJCQkJLmdldEluc3RhbmNlKCkuZ2V0VGltZSgpKSk7CisJCWNyZWF0b3Iuc2V0VGV4dChTeXN0ZW0uZ2V0UHJvcGVydHkoInVzZXIubmFtZSIpKTsgCisJCXB1Ymxpc2hlci5zZXRUZXh0KE1lc3NhZ2VzLmdldFN0cmluZygiZGNfcHVibGlzaGVyIikpOworCQlsaWNlbnNlLnNldFRleHQoTWVzc2FnZXMuZ2V0U3RyaW5nKCJkY19saWNlbnNlIikpOworCX0gLy8gaW5pdGlhbGl6ZURDRmllbGRzCisKKwkvKioKKwkgKiBAcGFyYW0gYXR0cmlidXRlTmFtZQorCSAqICAgICAgICAgICAgdGhlIG5hbWUgb2YgdGhlIHtAbGluayBEdWJsaW5Db3JlfSBhdHRyaWJ1dGUgdGhhdCB3aWxsIGJlIHNlZW4KKwkgKiAgICAgICAgICAgIGJ5IHRoZSB1c2VyLgorCSAqIEBwYXJhbSB0b29sVGlwCisJICogICAgICAgICAgICB0aGUgdG9vbCB0aXAgdGV4dCBmb3IgdGhlIGF0dHJpYnV0ZQorCSAqIEBwYXJhbSByZXF1aXJlZEZpZWxkCisJICogICAgICAgICAgICBpZiA8Y29kZT50cnVlPC9jb2RlPiB0aGVuIHRoZSBhdHRyaWJ1dGUgaXMgdmlzdWFsbHkgbWFya2VkCisJICogICAgICAgICAgICB3aXRoIHRoZSB7QGxpbmsgI1JFUVVJUkVEX0ZJRUxEX0NIQVJ9IGFzIGJlaW5nICJyZXF1aXJlZCIKKwkgKiBAcGFyYW0gdmFsaWRhdGluZ0ZpZWxkCisJICogICAgICAgICAgICBpZiA8Y29kZT50cnVlPC9jb2RlPiB0aGUgdmFsdWUgb2YgdGhlIGF0dHJpYnV0ZSBpcyBleGFtaW5lZAorCSAqICAgICAgICAgICAgYnkge0BsaW5rICN2YWxpZGF0ZUR1YmxpbkNvcmVQYWdlKCl9IHRvIHZhbGlkYXRlIHRoZSBwYWdlCisJICogQHJldHVybiBhIGxhYmVsZWQgdGV4dCBhdHRyaWJ1dGUKKwkgKi8KKwlwcml2YXRlIFRleHQgY3JlYXRlRENBdHRyaWJ1dGUoZmluYWwgQ29tcG9zaXRlIHBhcmVudCwKKwkJCWZpbmFsIFN0cmluZyBhdHRyaWJ1dGVOYW1lLCBmaW5hbCBTdHJpbmcgdG9vbFRpcCwKKwkJCWZpbmFsIGJvb2xlYW4gcmVxdWlyZWRGaWVsZCwgZmluYWwgYm9vbGVhbiB2YWxpZGF0aW5nRmllbGQpIHsKKwkJZmluYWwgTGFiZWwgYXR0cmlidXRlTGFiZWwgPSBuZXcgTGFiZWwocGFyZW50LCBTV1QuTk9ORSk7CisJCWF0dHJpYnV0ZUxhYmVsLnNldFRleHQoYXR0cmlidXRlTmFtZSArICI6IiAvLyROT04tTkxTLTEkCisJCQkJKyAocmVxdWlyZWRGaWVsZCA/IFJFUVVJUkVEX0ZJRUxEX0NIQVIgOiAiIikpOyAvLyROT04tTkxTLTEkCisJCWZpbmFsIEdyaWREYXRhIGxhYmVsTGF5b3V0RGF0YSA9IG5ldyBHcmlkRGF0YSgpOworCQlsYWJlbExheW91dERhdGEuaG9yaXpvbnRhbFNwYW4gPSAxOworCQlhdHRyaWJ1dGVMYWJlbC5zZXRMYXlvdXREYXRhKGxhYmVsTGF5b3V0RGF0YSk7CisKKwkJZmluYWwgVGV4dCByZXRWYWx1ZSA9IG5ldyBUZXh0KHBhcmVudCwgU1dULkJPUkRFUik7CisJCXJldFZhbHVlLnNldFRvb2xUaXBUZXh0KHRvb2xUaXApOworCQlmaW5hbCBHcmlkRGF0YSBsYXlvdXREYXRhID0gbmV3IEdyaWREYXRhKCk7CisJCWxheW91dERhdGEuaG9yaXpvbnRhbEFsaWdubWVudCA9IEdyaWREYXRhLkZJTEw7CisJCWxheW91dERhdGEuZ3JhYkV4Y2Vzc0hvcml6b250YWxTcGFjZSA9IHRydWU7CisJCWxhYmVsTGF5b3V0RGF0YS5ob3Jpem9udGFsU3BhbiA9IDE7CisJCXJldFZhbHVlLnNldExheW91dERhdGEobGF5b3V0RGF0YSk7CisKKwkJLy8gSXMgdGhpcyBhdHRyaWJ1dGUgdG8gYmUgd2F0Y2hlZCBmb3IgdmFsaWRpdHk/CisJCWlmICh2YWxpZGF0aW5nRmllbGQpIHsKKwkJCS8vIFllcworCQkJcmV0VmFsdWUuYWRkTW9kaWZ5TGlzdGVuZXIoZGNWYWxpZGF0b3IpOworCQl9CisKKwkJcmV0dXJuIHJldFZhbHVlOworCX0gLy8gY3JlYXRlRENBdHRyaWJ1dGUKKworCS8qKgorCSAqIEByZXR1cm4gPGNvZGU+dHJ1ZTwvY29kZT4gaWYgdGhlIHZhbHVlcyBvZiB0aGUgYXR0cmlidXRlcyBvZiB0aGUKKwkgKiAgICAgICAgIHtAbGluayBEdWJsaW5Db3JlUGFnZX0gYXJlIHZhbGlkLgorCSAqLworCXByb3RlY3RlZCBib29sZWFuIHZhbGlkYXRlRHVibGluQ29yZVBhZ2UoKSB7CisJCWJvb2xlYW4gcmV0VmFsdWUgPSB0cnVlOworCisJCXNldEVycm9yTWVzc2FnZShudWxsKTsKKworCQkvLyBJcyB0aGVyZSBhIHRpdGxlPworCQkKKwkJLy8gVGl0bGUgbm90IG1hbmRhdG9yeSBhbnkgbG9uZ2VyCisvLwkJaWYgKHRpdGxlLmdldFRleHQoKSA9PSBudWxsIHx8IHRpdGxlLmdldFRleHQoKS5lcXVhbHMoIiIpKSB7IC8vJE5PTi1OTFMtMSQKKy8vCQkJc2V0RXJyb3JNZXNzYWdlKE1lc3NhZ2VzLmdldFN0cmluZygiTkR1YmxpbkNvcmUudGl0bGVFcnIiKSk7IC8vJE5PTi1OTFMtMSQKKy8vCQkJcmV0VmFsdWUgPSBmYWxzZTsKKy8vCQl9IC8vIGlmIHRpdGxlCisKKwkJLy8gSXMgdGhlcmUgYSBjcmVhdGVkIGRhdGU/CisJCWlmIChyZXRWYWx1ZSA9PSB0cnVlCisJCQkJJiYgKGNyZWF0ZWQuZ2V0VGV4dCgpICE9IG51bGwgJiYgIWNyZWF0ZWQuZ2V0VGV4dCgpLmVxdWFscygiIikpKSB7IC8vJE5PTi1OTFMtMSQKKwkJCS8vIFllcworCQkJLy8gSXMgdGhlIGZvcm1hdCB2YWxpZD8KKwkJCWlmICghaXNWYWxpZERhdGVTdHJpbmcoY3JlYXRlZC5nZXRUZXh0KCkpKSB7CisJCQkJLy8gTm8KKwkJCQlzZXRFcnJvck1lc3NhZ2UoTWVzc2FnZXMuZ2V0U3RyaW5nKCJORHVibGluQ29yZS5jcmVhdGVkRXJyIikpOyAvLyROT04tTkxTLTEkCisJCQkJcmV0VmFsdWUgPSBmYWxzZTsKKwkJCX0KKwkJfSAvLyBpZiBjcmVhdGVkIGRhdGUKKworCQkvLyBJcyB0aGVyZSBhIGRhdGU/CisJCWlmIChyZXRWYWx1ZSA9PSB0cnVlCisJCQkJJiYgKGRhdGUuZ2V0VGV4dCgpICE9IG51bGwgJiYgIWRhdGUuZ2V0VGV4dCgpLmVxdWFscygiIikpKSB7IC8vJE5PTi1OTFMtMSQKKwkJCS8vIFllcworCQkJLy8gSXMgdGhlIGZvcm1hdCB2YWxpZD8KKwkJCWlmICghaXNWYWxpZERhdGVTdHJpbmcoZGF0ZS5nZXRUZXh0KCkpKSB7CisJCQkJLy8gTm8KKwkJCQlzZXRFcnJvck1lc3NhZ2UoTWVzc2FnZXMuZ2V0U3RyaW5nKCJORHVibGluQ29yZS5kYXRlRXJyIikpOyAvLyROT04tTkxTLTEkCisJCQkJcmV0VmFsdWUgPSBmYWxzZTsKKwkJCX0KKwkJfSAvLyBpZiBkYXRlCisKKwkJLy8gSXMgdGhlcmUgYSB2YWxpZCByYW5nZQorCQlpZiAocmV0VmFsdWUgPT0gdHJ1ZQorCQkJCSYmICh2YWxpZC5nZXRUZXh0KCkgIT0gbnVsbCAmJiAhdmFsaWQuZ2V0VGV4dCgpLmVxdWFscygiIikpKSB7IC8vJE5PTi1OTFMtMSQKKwkJCS8vIFllcworCQkJLy8gSXMgdGhlIGZvcm1hdCB2YWxpZD8KKwkJCWlmICghaXNWYWxpZFZhbGlkRGF0ZVN0cmluZyh2YWxpZC5nZXRUZXh0KCkpKSB7CisJCQkJLy8gTm8KKwkJCQlzZXRFcnJvck1lc3NhZ2UoTWVzc2FnZXMuZ2V0U3RyaW5nKCJORHVibGluQ29yZS52YWxpZEVyciIpKTsgLy8kTk9OLU5MUy0xJAorCQkJCXJldFZhbHVlID0gZmFsc2U7CisJCQl9CisJCX0gLy8gaWYgZGF0ZQorCisJCXJldHVybiByZXRWYWx1ZTsKKwl9IC8vIHZhbGlkYXRlRHVibGluQ29yZVBhZ2UKKworCS8qKgorCSAqIEBwYXJhbSB2YWxpZERhdGFSYW5nZVN0cmluZworCSAqICAgICAgICAgICAgYSBkYXRlIHN0cmluZyB0aGF0IGNvbmZvcm1zIHRvIElTTyZuYnNwOzg2MDEgPGEKKwkgKiAgICAgICAgICAgIGhyZWY9Imh0dHA6Ly93d3cudzMub3JnL1RSL05PVEUtZGF0ZXRpbWUiPgorCSAqICAgICAgICAgICAgaHR0cDovL3d3dy53My5vcmcvVFIvTk9URS1kYXRldGltZTwvYT4KKwkgKiBAcmV0dXJuIDxjb2RlPnRydWU8L2NvZGU+IGlmIHRoZSB2YWxpZCBkYXRlIHJhbmdlIHN0cmluZyBpcyBwcm9wZXJseQorCSAqICAgICAgICAgZm9ybWF0dGVkLCA8Y29kZT5mYWxzZTwvY29kZT4gb3RoZXJ3aXNlLgorCSAqLworCXByb3RlY3RlZCBzdGF0aWMgYm9vbGVhbiBpc1ZhbGlkVmFsaWREYXRlU3RyaW5nKAorCQkJZmluYWwgU3RyaW5nIHZhbGlkRGF0YVJhbmdlU3RyaW5nKSB7CisJCS8vIFRPRE8gc2hvdWxkIHByb2JhYmx5IHRlc3QgaXNFbmRCZWZvcmVTdGFydCBhcyB3ZWxsCisJCXJldHVybiBEdWJsaW5Db3JlSW1wbC5pc1ZhbGlkU3RhcnREYXRlVmFsaWQodmFsaWREYXRhUmFuZ2VTdHJpbmcpCisJCQkJJiYgRHVibGluQ29yZUltcGwuaXNWYWxpZEVuZERhdGVWYWxpZCh2YWxpZERhdGFSYW5nZVN0cmluZyk7CisJfSAvLyBpc1ZhbGlkVmFsaWREYXRlU3RyaW5nCisKKwlwcm90ZWN0ZWQgc3RhdGljIGJvb2xlYW4gaXNWYWxpZERhdGVTdHJpbmcoZmluYWwgU3RyaW5nIGRhdGVTdHJpbmcpIHsKKwkJYm9vbGVhbiByZXRWYWx1ZSA9IGZhbHNlOworCQlmaW5hbCBTdHJpbmcgdHJpbWVkRGF0ZVN0cmluZyA9IGRhdGVTdHJpbmcudHJpbSgpOworCQl0cnkgeworCQkJLy8gSXMgaXQgdGhlIHJpZ2h0IGxlbmd0aD8KKwkJCWlmICh0cmltZWREYXRlU3RyaW5nLmxlbmd0aCgpICE9ICJ5eXl5LWRkLW1tIi5sZW5ndGgoKSkgeyAvLyROT04tTkxTLTEkCisJCQkJLy8gTm8KKwkJCQlyZXR1cm4gZmFsc2U7CisJCQl9CisKKwkJCUR1YmxpbkNvcmVJbXBsLmNyZWF0ZURhdGVGcm9tSVNPODYwMURhdGVTdHJpbmcoZGF0ZVN0cmluZyk7CisJCQkvLyBJZiB0aGVyZSdzIG5vIHBhcnNlIGV4Y2VwdGlvbiwgdGhlIHN0cmluZyBpcyB2YWxpZAorCQkJcmV0VmFsdWUgPSB0cnVlOworCQl9IGNhdGNoIChmaW5hbCBQYXJzZUV4Y2VwdGlvbiBlKSB7CisJCQlyZXRWYWx1ZSA9IGZhbHNlOworCQl9CisJCXJldHVybiByZXRWYWx1ZTsKKwl9IC8vIGlzVmFsaWREYXRlU3RyaW5nCisKKwkvKioKKwkgKiBAcGFyYW0gc3RhcnREYXRlU3RyaW5nCisJICogICAgICAgICAgICBhIGRhdGUgc3RyaW5nIHRoYXQgY29uZm9ybXMgdG8gSVNPJm5ic3A7ODYwMSA8YQorCSAqICAgICAgICAgICAgaHJlZj0iaHR0cDovL3d3dy53My5vcmcvVFIvTk9URS1kYXRldGltZSI+CisJICogICAgICAgICAgICBodHRwOi8vd3d3LnczLm9yZy9UUi9OT1RFLWRhdGV0aW1lPC9hPgorCSAqIEBwYXJhbSBlbmREYXRlU3RyaW5nCisJICogICAgICAgICAgICBhIGRhdGUgc3RyaW5nIHRoYXQgY29uZm9ybXMgdG8gSVNPJm5ic3A7ODYwMSA8YQorCSAqICAgICAgICAgICAgaHJlZj0iaHR0cDovL3d3dy53My5vcmcvVFIvTk9URS1kYXRldGltZSI+CisJICogICAgICAgICAgICBodHRwOi8vd3d3LnczLm9yZy9UUi9OT1RFLWRhdGV0aW1lPC9hPgorCSAqIEByZXR1cm4gPGNvZGU+dHJ1ZTwvY29kZT4gaWYgdGhlIGRhdGUgcmVwcmVzZW50ZWQgYnkKKwkgKiAgICAgICAgIDxjb2RlPmVuZERhdGVTdHJpbmc8L2NvZGU+IGlzIGJlZm9yZSB0aGUgZGF0ZSByZXByZXNlbnRlZCBieQorCSAqICAgICAgICAgPGNvZGU+c3RhcnREYXRlU3RyaW5nPC9jb2RlPgorCSAqLworCXB1YmxpYyBzdGF0aWMgYm9vbGVhbiBpc0VuZEJlZm9yZVN0YXJ0KGZpbmFsIFN0cmluZyBzdGFydERhdGVTdHJpbmcsCisJCQlmaW5hbCBTdHJpbmcgZW5kRGF0ZVN0cmluZykgeworCQlib29sZWFuIHJldFZhbHVlID0gZmFsc2U7CisJCXRyeSB7CisJCQlmaW5hbCBEYXRlIHN0YXJ0RGF0ZSA9IER1YmxpbkNvcmVJbXBsCisJCQkJCS5jcmVhdGVEYXRlRnJvbUlTTzg2MDFEYXRlU3RyaW5nKHN0YXJ0RGF0ZVN0cmluZyk7CisJCQlmaW5hbCBEYXRlIGVuZERhdGUgPSBEdWJsaW5Db3JlSW1wbAorCQkJCQkuY3JlYXRlRGF0ZUZyb21JU084NjAxRGF0ZVN0cmluZyhlbmREYXRlU3RyaW5nKTsKKwkJCXJldFZhbHVlID0gZW5kRGF0ZS5iZWZvcmUoc3RhcnREYXRlKTsKKwkJfSBjYXRjaCAoZmluYWwgUGFyc2VFeGNlcHRpb24gZSkgeworCQkJcmV0VmFsdWUgPSB0cnVlOworCQl9IC8vIGNhdGNoCisJCXJldHVybiByZXRWYWx1ZTsKKwl9IC8vIGlzRW5kQmVmb3JlU3RhcnQKKwkKKwkKKwkvKioKKwkgKiAKKwkgKiBAcGFyYW0gZHVibGluQ29yZQorCSAqLworCXB1YmxpYyB2b2lkIHVwZGF0ZUR1YmxpbkNvcmVQYWdlKER1YmxpbkNvcmUgZHVibGluQ29yZSkgeworCQkKKwkJCisJCS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKwkJLy8KKwkJLy8gcmlnaHQgbm93IHRoZSBwbHVnaW4ueG1sIHNldHMgdGhlIGRlc2NyaXB0aW9uLCBzb3VyY2UsIGFuZCB0aXRsZS4uLgorCQkvLworCQlTdHJpbmcgc3RyID0gZHVibGluQ29yZS5nZXRUaXRsZSgpOworCQlpZihzdHIgIT0gbnVsbCkgdGhpcy5zZXRUaXRsZVRleHQoc3RyKTsKKwkJCisJCXN0ciA9IGR1YmxpbkNvcmUuZ2V0RGVzY3JpcHRpb24oKTsKKwkJaWYoc3RyICE9IG51bGwpIHRoaXMuc2V0RGVzY3JpcHRpb25UZXh0KHN0cik7CisJCQorCQlzdHIgPSBkdWJsaW5Db3JlLmdldFNvdXJjZSgpOworCQlpZihzdHIgIT1udWxsKSB0aGlzLnNldFNvdXJjZShzdHIpOworCQkKKwkJc3RyID0gZHVibGluQ29yZS5nZXRQdWJsaXNoZXIoKTsKKwkJaWYoc3RyICE9bnVsbCkgdGhpcy5zZXRQdWJsaXNoZXIoc3RyKTsKKwkJCisJCXN0ciA9IGR1YmxpbkNvcmUuZ2V0TGljZW5zZSgpOworCQlpZihzdHIgIT1udWxsKSB0aGlzLnNldExpY2Vuc2Uoc3RyKTsKKwkJLy8KKwkJLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworCX0KKworCS8qKgorCSAqIEByZXR1cm4gYSB7QGxpbmsgRHVibGluQ29yZX0gaW5zdGFuY2UgaW5pdGlhbGl6ZWQgZnJvbSB0aGUgY29udGVudHMgb2YKKwkgKiAgICAgICAgIHRoaXMge0BsaW5rIER1YmxpbkNvcmVQYWdlfQorCSAqLworCXB1YmxpYyBEdWJsaW5Db3JlIGNyZWF0ZUR1YmxpbkNvcmUoKSB7CisJCWZpbmFsIER1YmxpbkNvcmUgcmV0VmFsdWUgPSBDb21tb25GYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVEdWJsaW5Db3JlKCk7CisKKwkJaWYgKGlzU2V0KHRpdGxlVGV4dEZpZWxkLmdldFRleHQoKSkpIHsKKwkJCXJldFZhbHVlLnNldFRpdGxlKHRpdGxlVGV4dEZpZWxkLmdldFRleHQoKSk7CisJCX0KKwkJaWYgKGlzU2V0KGRlc2NyaXB0aW9uVGV4dEZpZWxkLmdldFRleHQoKSkpIHsKKwkJCXJldFZhbHVlLnNldERlc2NyaXB0aW9uKGRlc2NyaXB0aW9uVGV4dEZpZWxkLmdldFRleHQoKSk7CisJCX0KKwkJaWYgKGlzU2V0KGNyZWF0b3IuZ2V0VGV4dCgpKSkgeworCQkJcmV0VmFsdWUuc2V0Q3JlYXRvcihjcmVhdG9yLmdldFRleHQoKSk7CisJCX0KKwkJaWYgKGlzU2V0KGRhdGUuZ2V0VGV4dCgpKSkgeworCQkJcmV0VmFsdWUuc2V0RGF0ZShkYXRlLmdldFRleHQoKSk7CisJCX0KKwkJaWYgKGlzU2V0KGZvcm1hdC5nZXRUZXh0KCkpKSB7CisJCQlyZXRWYWx1ZS5zZXRGb3JtYXQoZm9ybWF0LmdldFRleHQoKSk7CisJCX0KKwkJaWYgKGlzU2V0KHB1Ymxpc2hlci5nZXRUZXh0KCkpKSB7CisJCQlyZXRWYWx1ZS5zZXRQdWJsaXNoZXIocHVibGlzaGVyLmdldFRleHQoKSk7CisJCX0KKwkJaWYgKGlzU2V0KGNvdmVyYWdlLmdldFRleHQoKSkpIHsKKwkJCXJldFZhbHVlLnNldENvdmVyYWdlKGNvdmVyYWdlLmdldFRleHQoKSk7CisJCX0KKwkJaWYgKGlzU2V0KGNvbnRyaWJ1dG9yLmdldFRleHQoKSkpIHsKKwkJCXJldFZhbHVlLnNldENvbnRyaWJ1dG9yKGNvbnRyaWJ1dG9yLmdldFRleHQoKSk7CisJCX0KKwkJaWYgKGlzU2V0KHJlbGF0aW9uLmdldFRleHQoKSkpIHsKKwkJCXJldFZhbHVlLnNldFJlbGF0aW9uKHJlbGF0aW9uLmdldFRleHQoKSk7CisJCX0KKwkJaWYgKGlzU2V0KHJpZ2h0cy5nZXRUZXh0KCkpKSB7CisJCQlyZXRWYWx1ZS5zZXRSaWdodHMocmlnaHRzLmdldFRleHQoKSk7CisJCX0KKwkJaWYgKGlzU2V0KHNvdXJjZS5nZXRUZXh0KCkpKSB7CisJCQlyZXRWYWx1ZS5zZXRTb3VyY2Uoc291cmNlLmdldFRleHQoKSk7CisJCX0KKwkJaWYgKGlzU2V0KHN1YmplY3QuZ2V0VGV4dCgpKSkgeworCQkJcmV0VmFsdWUuc2V0U3ViamVjdChzdWJqZWN0LmdldFRleHQoKSk7CisJCX0KKwkJaWYgKGlzU2V0KHR5cGUuZ2V0VGV4dCgpKSkgeworCQkJcmV0VmFsdWUuc2V0VHlwZSh0eXBlLmdldFRleHQoKSk7CisJCX0KKwkJaWYgKGlzU2V0KGxhbmd1YWdlLmdldFRleHQoKSkpIHsKKwkJCXJldFZhbHVlLnNldEJpYmxpb2dyYXBoaWNDaXRhdGlvbihsYW5ndWFnZS5nZXRUZXh0KCkpOworCQl9CisJCWlmIChpc1NldChiaWJsaW9ncmFwaGljQ2l0YXRpb24uZ2V0VGV4dCgpKSkgeworCQkJcmV0VmFsdWUuc2V0QmlibGlvZ3JhcGhpY0NpdGF0aW9uKGJpYmxpb2dyYXBoaWNDaXRhdGlvbi5nZXRUZXh0KCkpOworCQl9CisJCWlmIChpc1NldChjcmVhdGVkLmdldFRleHQoKSkpIHsKKwkJCXJldFZhbHVlLnNldENyZWF0ZWQoY3JlYXRlZC5nZXRUZXh0KCkpOworCQl9CisJCWlmIChpc1NldChsaWNlbnNlLmdldFRleHQoKSkpIHsKKwkJCXJldFZhbHVlLnNldExpY2Vuc2UobGljZW5zZS5nZXRUZXh0KCkpOworCQl9CisJCWlmIChpc1NldChyZXF1aXJlZC5nZXRUZXh0KCkpKSB7CisJCQlyZXRWYWx1ZS5zZXRSZXF1aXJlZChyZXF1aXJlZC5nZXRUZXh0KCkpOworCQl9CisJCWlmIChpc1NldChzcGF0aWFsLmdldFRleHQoKSkpIHsKKwkJCXJldFZhbHVlLnNldFNwYXRpYWwoc3BhdGlhbC5nZXRUZXh0KCkpOworCQl9CisJCWlmIChpc1NldCh2YWxpZC5nZXRUZXh0KCkpKSB7CisJCQlyZXRWYWx1ZS5zZXRWYWxpZCh2YWxpZC5nZXRUZXh0KCkpOworCQl9CisKKwkJcmV0dXJuIHJldFZhbHVlOworCX0gLy8gY3JlYXRlRHVibGluQ29yZQorCisJLyoqCisJICogQHBhcmFtIHRleHQKKwkgKiAgICAgICAgICAgIGEgU3RyaW5nCisJICogQHJldHVybiA8Y29kZT50cnVlPC9jb2RlPiBpZiB0aGUgc3RyaW5nIGlzIG5vdCBudWxsIG5vciB0aGUgZW1wdHkKKwkgKiAgICAgICAgIHN0cmluZworCSAqIEBzZWUgI2NyZWF0ZUR1YmxpbkNvcmUoKQorCSAqLworCXByaXZhdGUgYm9vbGVhbiBpc1NldChmaW5hbCBTdHJpbmcgdGV4dCkgeworCQlyZXR1cm4gISh0ZXh0ID09IG51bGwgfHwgdGV4dC5lcXVhbHMoIiIpKTsgLy8kTk9OLU5MUy0xJAorCX0KKwkKKwkKKwkvKioKKwkgKiAKKwkgKiBAcGFyYW0gdGl0bGVuU1RSCisJICovCisJcHVibGljIHZvaWQgc2V0VGl0bGVUZXh0KFN0cmluZyB0aXRsZVNUUikgeworCQlpZih0aXRsZVRleHRGaWVsZCAhPSBudWxsKQorCQl0aXRsZVRleHRGaWVsZC5zZXRUZXh0KHRpdGxlU1RSKTsKKwl9CisKKwkvKioKKwkgKiAKKwkgKiBAcGFyYW0gZGVzY3JpcHRpb25TVFIKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXREZXNjcmlwdGlvblRleHQoU3RyaW5nIGRlc2NyaXB0aW9uU1RSKSB7CisJCWlmKGRlc2NyaXB0aW9uVGV4dEZpZWxkICE9IG51bGwpCisJCWRlc2NyaXB0aW9uVGV4dEZpZWxkLnNldFRleHQoZGVzY3JpcHRpb25TVFIpOworCX0KKworCS8qKgorCSAqIAorCSAqIEBwYXJhbSBjcmVhdG9yU1RSCisJICovCisJcHVibGljIHZvaWQgc2V0Q3JlYXRvcihTdHJpbmcgY3JlYXRvclNUUikgeworCQlpZihjcmVhdG9yICE9IG51bGwpCisJCWNyZWF0b3Iuc2V0VGV4dChjcmVhdG9yU1RSKTsKKwl9CisKKwkvKioKKwkgKiAKKwkgKiBAcGFyYW0gZGF0ZVNUUgorCSAqLworCXB1YmxpYyB2b2lkIHNldERhdGUoU3RyaW5nIGRhdGVTVFIpIHsKKwkJaWYoZGF0ZSAhPSBudWxsKQorCQlkYXRlLnNldFRleHQoZGF0ZVNUUik7CisJfQorCisJLyoqCisJICogCisJICogQHBhcmFtIGZvcm1hdFNUUgorCSAqLworCXB1YmxpYyB2b2lkIHNldEZvcm1hdChTdHJpbmcgZm9ybWF0U1RSKSB7CisJCWlmKGZvcm1hdCAhPSBudWxsKQorCQlmb3JtYXQuc2V0VGV4dChmb3JtYXRTVFIpOworCX0KKworCS8qKgorCSAqIAorCSAqIEBwYXJhbSBwdWJsaXNoZXJTVFIKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRQdWJsaXNoZXIoU3RyaW5nIHB1Ymxpc2hlclNUUikgeworCQlpZihwdWJsaXNoZXIgIT0gbnVsbCkKKwkJcHVibGlzaGVyLnNldFRleHQocHVibGlzaGVyU1RSKTsKKwl9CisKKwkvKioKKwkgKiAKKwkgKiBAcGFyYW0gY292ZXJhZ2VTVFIKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRDb3ZlcmFnZShTdHJpbmcgY292ZXJhZ2VTVFIpIHsKKwkJaWYoY292ZXJhZ2UgIT0gbnVsbCkKKwkJY292ZXJhZ2Uuc2V0VGV4dChjb3ZlcmFnZVNUUik7CisJfQorCisJLyoqCisJICogCisJICogQHBhcmFtIGNvbnRyaWJ1dG9yU1RSCisJICovCisJcHVibGljIHZvaWQgc2V0Q29udHJpYnV0b3IoU3RyaW5nIGNvbnRyaWJ1dG9yU1RSKSB7CisJCWlmKGNvbnRyaWJ1dG9yICE9IG51bGwpCisJCWNvbnRyaWJ1dG9yLnNldFRleHQoY29udHJpYnV0b3JTVFIpOworCX0KKworCS8qKgorCSAqIAorCSAqIEBwYXJhbSByZWxhdGlvblNUUgorCSAqLworCXB1YmxpYyB2b2lkIHNldFJlbGF0aW9uKFN0cmluZyByZWxhdGlvblNUUikgeworCQlpZihyZWxhdGlvbiAhPSBudWxsKQorCQlyZWxhdGlvbi5zZXRUZXh0KHJlbGF0aW9uU1RSKTsKKwl9CisKKwkvKioKKwkgKiAKKwkgKiBAcGFyYW0gcmlnaHRzU1RSCisJICovCisJcHVibGljIHZvaWQgc2V0UmlnaHRzKFN0cmluZyByaWdodHNTVFIpIHsKKwkJaWYocmlnaHRzICE9IG51bGwpCisJCXJpZ2h0cy5zZXRUZXh0KHJpZ2h0c1NUUik7CisJfQorCisJLyoqCisJICogCisJICogQHBhcmFtIHNvdXJjZVNUUgorCSAqLworCXB1YmxpYyB2b2lkIHNldFNvdXJjZShTdHJpbmcgc291cmNlU1RSKSB7CisJCWlmKHNvdXJjZSAhPSBudWxsKQorCQlzb3VyY2Uuc2V0VGV4dChzb3VyY2VTVFIpOworCX0KKworCS8qKgorCSAqIAorCSAqIEBwYXJhbSBzdWJqZWN0U1RSCisJICovCisJcHVibGljIHZvaWQgc2V0U3ViamVjdChTdHJpbmcgc3ViamVjdFNUUikgeworCQlpZihzdWJqZWN0ICE9IG51bGwpCisJCXN1YmplY3Quc2V0VGV4dChzdWJqZWN0U1RSKTsKKwl9CisKKwkvKioKKwkgKiAKKwkgKiBAcGFyYW0gdHlwZVNUUgorCSAqLworCXB1YmxpYyB2b2lkIHNldFR5cGUoU3RyaW5nIHR5cGVTVFIpIHsKKwkJaWYodHlwZSE9IG51bGwpCisJCXR5cGUuc2V0VGV4dCh0eXBlU1RSKTsKKwl9CisKKwkvKioKKwkgKiAKKwkgKiBAcGFyYW0gbGFuZ3VhZ2VTVFIKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRMYW5ndWFnZShTdHJpbmcgbGFuZ3VhZ2VTVFIpIHsKKwkJaWYobGFuZ3VhZ2UgIT0gbnVsbCkKKwkJbGFuZ3VhZ2Uuc2V0VGV4dChsYW5ndWFnZVNUUik7CisJfQorCisJLyoqCisJICogCisJICogQHBhcmFtIGJpYmxpb2dyYXBoaWNDaXRhdGlvblNUUgorCSAqLworCXB1YmxpYyB2b2lkIHNldEJpYmxpb2dyYXBoaWNDaXRhdGlvbihTdHJpbmcgYmlibGlvZ3JhcGhpY0NpdGF0aW9uU1RSKSB7CisJCWlmKGJpYmxpb2dyYXBoaWNDaXRhdGlvbiAhPSBudWxsKQorCQliaWJsaW9ncmFwaGljQ2l0YXRpb24uc2V0VGV4dChiaWJsaW9ncmFwaGljQ2l0YXRpb25TVFIpOworCX0KKworCS8qKgorCSAqIAorCSAqIEBwYXJhbSBjcmVhdGVkU1RSCisJICovCisJcHVibGljIHZvaWQgc2V0Q3JlYXRlZChTdHJpbmcgY3JlYXRlZFNUUikgeworCQlpZihjcmVhdGVkICE9IG51bGwpCisJCWNyZWF0ZWQuc2V0VGV4dChjcmVhdGVkU1RSKTsKKwl9CisKKwkvKioKKwkgKiAKKwkgKiBAcGFyYW0gbGljZW5zZVNUUgorCSAqLworCXB1YmxpYyB2b2lkIHNldExpY2Vuc2UoU3RyaW5nIGxpY2Vuc2VTVFIpIHsKKwkJaWYobGljZW5zZSAhPSBudWxsKQorCQlsaWNlbnNlLnNldFRleHQobGljZW5zZVNUUik7CisJfQorCisJLyoqCisJICogCisJICogQHBhcmFtIHJlcXVpcmVkU1RSCisJICovCisJcHVibGljIHZvaWQgc2V0UmVxdWlyZWQoU3RyaW5nIHJlcXVpcmVkU1RSKSB7CisJCWlmKHJlcXVpcmVkICE9IG51bGwpCisJCXJlcXVpcmVkLnNldFRleHQocmVxdWlyZWRTVFIpOworCX0KKworCS8qKgorCSAqIAorCSAqIEBwYXJhbSBzcGF0aWFsU1RSCisJICovCisJcHVibGljIHZvaWQgc2V0U3BhdGlhbChTdHJpbmcgc3BhdGlhbFNUUikgeworCQlpZihzcGF0aWFsICE9IG51bGwpCisJCXNwYXRpYWwuc2V0VGV4dChzcGF0aWFsU1RSKTsKKwl9CisKKwkvKioKKwkgKiAKKwkgKiBAcGFyYW0gdmFsaWRTVFIKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRWYWxpZChTdHJpbmcgdmFsaWRTVFIpIHsKKwkJaWYodmFsaWQgIT0gbnVsbCkKKwkJdmFsaWQuc2V0VGV4dCh2YWxpZFNUUik7CisJfQorCQorCQorCQorCQorfSAvLyBEdWJsaW5Db3JlUGFnZQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3dpemFyZHMvTWVzc2FnZXMuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS93aXphcmRzL01lc3NhZ2VzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTc2YjZiMAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS93aXphcmRzL01lc3NhZ2VzLmphdmEKQEAgLTAsMCArMSw0NyBAQAorLy8gTWVzc2FnZXMuamF2YQorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnVpLndpemFyZHM7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgamF2YS51dGlsLk1pc3NpbmdSZXNvdXJjZUV4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLnV0aWwuUmVzb3VyY2VCdW5kbGU7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuQ29uc3RhbnRzOworCisKKy8qKgorICogVGhpcyBjbGFzcyBpcyB0aGUgUmVzb3VyY2UgQnVuZGxlIGZvciB0aGlzIHBhY2thZ2UuCisgKi8KK3B1YmxpYyBjbGFzcyBNZXNzYWdlcyB7CisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEJVTkRMRV9OQU1FID0gQ29uc3RhbnRzLklEX1JPT1QKKwkJCSsgIi51aS53aXphcmRzLm1lc3NhZ2VzIjsgLy8kTk9OLU5MUy0xJAorCisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgUmVzb3VyY2VCdW5kbGUgUkVTT1VSQ0VfQlVORExFID0gUmVzb3VyY2VCdW5kbGUKKwkJCS5nZXRCdW5kbGUoQlVORExFX05BTUUpOworCisJcHJpdmF0ZSBNZXNzYWdlcygpIHsKKwkJLy8gZW1wdHkKKwl9CisKKwkvKioKKwkgKiBAcGFyYW0ga2V5CisJICogICAgICAgICAgICB0aGUga2V5IGZvciB0aGUgbWVzc2FnZQorCSAqIEByZXR1cm4gdGhlIHN0cmluZyB0aGF0IG1hdGNoZXMgdGhlIGtleQorCSAqLworCXB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldFN0cmluZyhTdHJpbmcga2V5KSB7CisJCXRyeSB7CisJCQlyZXR1cm4gUkVTT1VSQ0VfQlVORExFLmdldFN0cmluZyhrZXkpOworCQl9IGNhdGNoIChNaXNzaW5nUmVzb3VyY2VFeGNlcHRpb24gZSkgeworCQkJcmV0dXJuICchJyArIGtleSArICchJzsKKwkJfQorCX0gLy8gZ2V0U3RyaW5nCit9IC8vIFdpemFyZE1lc3NhZ2VzCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvd2l6YXJkcy9OZXdFeHBlcmltZW50V2l6YXJkLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvd2l6YXJkcy9OZXdFeHBlcmltZW50V2l6YXJkLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWM5ZDkxOQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS93aXphcmRzL05ld0V4cGVyaW1lbnRXaXphcmQuamF2YQpAQCAtMCwwICsxLDE2NiBAQAorLy8gTmV3RXhwZXJpbWVudFdpemFyZC5qYXZhCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0udWkud2l6YXJkczsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLmNvbW1hbmRzLkFic3RyYWN0SGFuZGxlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLmNvbW1hbmRzLkV4ZWN1dGlvbkV2ZW50OworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUuY29tbWFuZHMuRXhlY3V0aW9uRXhjZXB0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUuY29tbWFuZHMuSUhhbmRsZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5TdHJ1Y3R1cmVkU2VsZWN0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLndpemFyZC5XaXphcmREaWFsb2c7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLlNURU1VUkk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5JZGVudGlmaWFibGU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmV4cGVyaW1lbnQuRXhwZXJpbWVudEZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmV4cGVyaW1lbnQuRXhwZXJpbWVudFBhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LlNXVDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGU7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaFdpbmRvdzsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5QbGF0Zm9ybVVJOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLmhhbmRsZXJzLkhhbmRsZXJVdGlsOworCisvKioKKyAqIFRoaXMgY2xhc3MgaXMgYSBXaXphcmQgZm9yIG1ha2luZyBuZXcgU1RFTQorICoge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5leHBlcmltZW50LkV4cGVyaW1lbnR9cy4KKyAqIAorICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuTW9kZWwKKyAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS51aS53aXphcmRzLk5ld0dyYXBoV2l6YXJkCisgKi8KK3B1YmxpYyBjbGFzcyBOZXdFeHBlcmltZW50V2l6YXJkIGV4dGVuZHMgTmV3SWRlbnRpZmlhYmxlV2l6YXJkIHsKKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS51aS53aXphcmRzLk5ld0lkZW50aWZpYWJsZVdpemFyZCNnZXRXaXphcmRUaXRsZSgpCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIFN0cmluZyBnZXRXaXphcmRUaXRsZSgpIHsKKwkJcmV0dXJuIE1lc3NhZ2VzLmdldFN0cmluZygiTkV4cGVyaW1lbnRXaXoud2l6YXJkX3RpdGxlIik7IC8vJE5PTi1OTFMtMSQKKwl9CisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0udWkud2l6YXJkcy5OZXdJZGVudGlmaWFibGVXaXphcmQjY3JlYXRlTmV3SWRlbnRpZmlhYmxlUGFnZSgpCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIE5ld0lkZW50aWZpYWJsZVBhZ2UgY3JlYXRlTmV3SWRlbnRpZmlhYmxlUGFnZSgpIHsKKwkJZmluYWwgTmV3RXhwZXJpbWVudFBhZ2UgcmV0VmFsdWUgPSBuZXcgTmV3RXhwZXJpbWVudFBhZ2UoTWVzc2FnZXMKKwkJCQkuZ2V0U3RyaW5nKCJORXhwZXJpbWVudFdpei5wYWdlX3RpdGxlIikpOyAvLyROT04tTkxTLTEkCisJCXJldFZhbHVlLnNldFRpdGxlKE1lc3NhZ2VzLmdldFN0cmluZygiTkV4cGVyaW1lbnRXaXoucGFnZV90aXRsZSIpKTsgLy8kTk9OLU5MUy0xJAorCQlyZXRWYWx1ZS5zZXREZXNjcmlwdGlvbihNZXNzYWdlcworCQkJCS5nZXRTdHJpbmcoIk5FeHBlcmltZW50V2l6LnBhZ2VfZGVzY3JpcHRpb24iKSk7IC8vJE5PTi1OTFMtMSQKKworCQl0aGlzLnNldEhlbHBDb250ZXh0SWQoIm9yZy5lY2xpcHNlLnN0ZW0uZG9jLm5ld2V4cGVyaW1lbnRfY29udGV4dGlkIik7CisJCXJldHVybiByZXRWYWx1ZTsKKwl9IC8vIGNyZWF0ZU5ld0lkZW50aWZpYWJsZVBhZ2UKKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS51aS53aXphcmRzLk5ld0lkZW50aWZpYWJsZVdpemFyZCNjcmVhdGVEdWJsaW5Db3JlUGFnZSgpCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIER1YmxpbkNvcmVQYWdlIGNyZWF0ZUR1YmxpbkNvcmVQYWdlKCkgeworCQlyZXR1cm4gbmV3IER1YmxpbkNvcmVQYWdlKCkgeworCQkJLyoqCisJCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0udWkud2l6YXJkcy5OZXdJZGVudGlmaWFibGVXaXphcmQuRHVibGluQ29yZVBhZ2UjaW5pdGlhbGl6ZURDRmllbGRzKCkKKwkJCSAqLworCQkJQE92ZXJyaWRlCisJCQlwcm90ZWN0ZWQgdm9pZCBpbml0aWFsaXplRENBdHRyaWJ1dGVzKCkgeworCQkJCXN1cGVyLmluaXRpYWxpemVEQ0F0dHJpYnV0ZXMoKTsKKwkJCQlmb3JtYXQuc2V0VGV4dChFeHBlcmltZW50UGFja2FnZS5lTlNfVVJJKTsKKwkJCQlmb3JtYXQuc2V0RW5hYmxlZChmYWxzZSk7CisJCQkJdHlwZS5zZXRUZXh0KFNURU1VUkkuRVhQRVJJTUVOVF9UWVBFX1VSSS50b1N0cmluZygpKTsKKwkJCQl0eXBlLnNldEVuYWJsZWQoZmFsc2UpOworCisJCQkJdGl0bGVUZXh0RmllbGQuc2V0VGV4dChNZXNzYWdlcy5nZXRTdHJpbmcoImRjX3RpdGxlX2V4cCIpKTsKKwkJCQlzb3VyY2Uuc2V0VGV4dChNZXNzYWdlcy5nZXRTdHJpbmcoImRjX3NvdXJjZV9leHAiKSk7CisJCQkJZGVzY3JpcHRpb25UZXh0RmllbGQuc2V0VGV4dChNZXNzYWdlcy5nZXRTdHJpbmcoImRjX2Rlc2NfZXhwIikpOworCQkJCQkJCisJCQl9CisJCX07CisJfSAvLyBjcmVhdGVEdWJsaW5Db3JlUGFnZQorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnVpLndpemFyZHMuTmV3SWRlbnRpZmlhYmxlV2l6YXJkI2NyZWF0ZUlkZW50aWZpYWJsZSgpCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIElkZW50aWZpYWJsZSBjcmVhdGVJZGVudGlmaWFibGUoKSB7CisJCUlkZW50aWZpYWJsZSByZXRWYWx1ZSA9IEV4cGVyaW1lbnRGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVFeHBlcmltZW50KCk7CisJCXJldFZhbHVlLnNldER1YmxpbkNvcmUobmV3RHVibGluQ29yZVBhZ2UuY3JlYXRlRHVibGluQ29yZSgpKTsKKwkJcmV0dXJuIHJldFZhbHVlOworCX0gLy8gY3JlYXRlU3BlY2lmaWNJZGVudGlmaWFibGUKKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS51aS53aXphcmRzLk5ld0lkZW50aWZpYWJsZVdpemFyZCNnZXRTZXJpYWxpemF0aW9uRm9sZGVyTmFtZSgpCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIFN0cmluZyBnZXRTZXJpYWxpemF0aW9uRm9sZGVyTmFtZSgpIHsKKwkJcmV0dXJuIE5ld1NURU1Qcm9qZWN0V2l6YXJkLkVYUEVSSU1FTlRTX0ZPTERFUl9OQU1FOworCX0gLy8gZ2V0Rm9sZGVyTmFtZQorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnVpLndpemFyZHMuTmV3SWRlbnRpZmlhYmxlV2l6YXJkI2dldFNlcmlhbGl6YXRpb25GaWxlTmFtZUV4dGVuc2lvbigpCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIFN0cmluZyBnZXRTZXJpYWxpemF0aW9uRmlsZU5hbWVFeHRlbnNpb24oKSB7CisJCXJldHVybiBFeHBlcmltZW50UGFja2FnZS5lTkFNRTsKKwl9CisKKwlwcm90ZWN0ZWQgc3RhdGljIGNsYXNzIE5ld0V4cGVyaW1lbnRQYWdlIGV4dGVuZHMgTmV3SWRlbnRpZmlhYmxlUGFnZSB7CisKKwkJLyoqCisJCSAqIEBwYXJhbSBwYWdlTmFtZQorCQkgKi8KKwkJcHJvdGVjdGVkIE5ld0V4cGVyaW1lbnRQYWdlKGZpbmFsIFN0cmluZyBwYWdlTmFtZSkgeworCQkJc3VwZXIocGFnZU5hbWUpOworCQl9CisJCQorCQlAT3ZlcnJpZGUKKwkJcHJvdGVjdGVkIENvbXBvc2l0ZSBjcmVhdGVTcGVjaWZpY0NvbXBvc2l0ZShmaW5hbCBDb21wb3NpdGUgcGFyZW50KSB7CisJCQlQbGF0Zm9ybVVJLmdldFdvcmtiZW5jaCgpLmdldEhlbHBTeXN0ZW0oKS5zZXRIZWxwKHBhcmVudCwgIm9yZy5lY2xpcHNlLnN0ZW0uZG9jLm5ld2V4cGVyaW1lbnRfY29udGV4dGlkIik7CisJCQlyZXR1cm4gbmV3IENvbXBvc2l0ZShwYXJlbnQsIFNXVC5OT05FKTsKKwkJfSAvLyBjcmVhdGVTcGVjaWZpY0NvbXBvc2l0ZQorCisJCS8qKgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0udWkud2l6YXJkcy5OZXdJZGVudGlmaWFibGVXaXphcmQuTmV3SWRlbnRpZmlhYmxlUGFnZSNnZXREQ0Rlc2NyaXB0aW9uKCkKKwkJICovCisJCUBPdmVycmlkZQorCQlwcm90ZWN0ZWQgU3RyaW5nIGdldERDRGVzY3JpcHRpb24oKSB7CisJCQkvLyBMZWF2ZSBkZXNjcmlwdGlvbi90aXRsZSBibGFuaworCQkJcmV0dXJuICIiOworLy8JCQlyZXR1cm4gTWVzc2FnZUZvcm1hdC5mb3JtYXQoTWVzc2FnZXMKKy8vCQkJCQkuZ2V0U3RyaW5nKCJORXhwZXJpbWVudFdpei5EQ19ERVNDUklQVElPTiIpLAorLy8JCQkJCW5ldyBPYmplY3RbXSB7IHNlcmlhbGl6YXRpb25GaWxlTmFtZUZpZWxkLmdldFRleHQoKSB9KTsKKwkJfSAvLyBnZXREQ0Rlc2NyaXB0aW9uCisKKwl9IC8vIE5ld0V4cGVyaW1lbnRQYWdlCisKKwkvKioKKwkgKiBUaGlzIGNsYXNzIGlzIGEge0BsaW5rIElIYW5kbGVyfSBmb3IgdGhlIGNvbW1hbmQgdGhhdCBjcmVhdGVzIGEKKwkgKiB7QGxpbmsgTmV3RXhwZXJpbWVudFdpemFyZH0KKwkgKi8KKwlwdWJsaWMgc3RhdGljIGNsYXNzIE5ld0V4cGVyaW1lbnRXaXphcmRDb21tYW5kSGFuZGxlciBleHRlbmRzIEFic3RyYWN0SGFuZGxlcgorCQkJaW1wbGVtZW50cyBJSGFuZGxlciB7CisKKwkJLyoqCisJCSAqIEBzZWUgb3JnLmVjbGlwc2UuY29yZS5jb21tYW5kcy5BYnN0cmFjdEhhbmRsZXIjZXhlY3V0ZShvcmcuZWNsaXBzZS5jb3JlLmNvbW1hbmRzLkV4ZWN1dGlvbkV2ZW50KQorCQkgKi8KKwkJcHVibGljIE9iamVjdCBleGVjdXRlKGZpbmFsIEV4ZWN1dGlvbkV2ZW50IGV4ZWN1dGlvbkV2ZW50KQorCQkJCXRocm93cyBFeGVjdXRpb25FeGNlcHRpb24geworCQkJZmluYWwgSVdvcmtiZW5jaFdpbmRvdyB3aW5kb3cgPSBIYW5kbGVyVXRpbAorCQkJCQkuZ2V0QWN0aXZlV29ya2JlbmNoV2luZG93Q2hlY2tlZChleGVjdXRpb25FdmVudCk7CisJCQlmaW5hbCBOZXdFeHBlcmltZW50V2l6YXJkIHdpemFyZCA9IG5ldyBOZXdFeHBlcmltZW50V2l6YXJkKCk7CisJCQl3aXphcmQuaW5pdCh3aW5kb3cuZ2V0V29ya2JlbmNoKCksIFN0cnVjdHVyZWRTZWxlY3Rpb24uRU1QVFkpOworCQkJZmluYWwgV2l6YXJkRGlhbG9nIHdpemFyZERpYWxvZyA9IG5ldyBTVEVNV2l6YXJkRGlhbG9nKHdpbmRvdworCQkJCQkuZ2V0U2hlbGwoKSwgd2l6YXJkKTsKKwkJCXdpemFyZERpYWxvZy5vcGVuKCk7CisJCQlyZXR1cm4gbnVsbDsKKwkJfSAvLyBleGVjdXRlCisJfSAvLyBOZXdFeHBlcmltZW50V2l6YXJkQ29tbWFuZEhhbmRsZXIKKworfSAvLyBOZXdFeHBlcmltZW50V2l6YXJkClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3dpemFyZHMvTmV3SWRlbnRpZmlhYmxlUGFnZS5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3dpemFyZHMvTmV3SWRlbnRpZmlhYmxlUGFnZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIyOTMwNjcKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvd2l6YXJkcy9OZXdJZGVudGlmaWFibGVQYWdlLmphdmEKQEAgLTAsMCArMSw0NzcgQEAKKy8vIE5ld0lkZW50aWZpYWJsZVBhZ2UuamF2YQorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnVpLndpemFyZHM7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUmVzb3VyY2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuUmVzb3VyY2VzUGx1Z2luOworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUGF0aDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGF0aDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU3RydWN0dXJlZFNlbGVjdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS53aXphcmQuV2l6YXJkUGFnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLklkZW50aWZpYWJsZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLnByZXNlbnRhdGlvbi5Db3JlRWRpdG9yQWR2aXNvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguR3JhcGg7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmltcGwuTGFiZWxJbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udWkuQWN0aXZhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udWkuVXRpbGl0eTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnVpLnZpZXdzLmV4cGxvcmVyLklkZW50aWZpYWJsZVRyZWVOb2RlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5TV1Q7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmN1c3RvbS5TY3JvbGxlZENvbXBvc2l0ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLkNvbnRyb2xFdmVudDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLkNvbnRyb2xMaXN0ZW5lcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLk1vZGlmeUV2ZW50OworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuTW9kaWZ5TGlzdGVuZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5TZWxlY3Rpb25BZGFwdGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuU2VsZWN0aW9uRXZlbnQ7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5TZWxlY3Rpb25MaXN0ZW5lcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QubGF5b3V0LkdyaWREYXRhOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5sYXlvdXQuR3JpZExheW91dDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5CdXR0b247CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tYm87CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkxhYmVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlRleHQ7CisKKy8qKgorICogVGhpcyBjbGFzcyBpcyB0aGUge0BsaW5rIFdpemFyZFBhZ2V9IHRoYXQgaXMgdGhlIHN1cGVyIGNsYXNzIG9mIGFsbCB3aXphcmQKKyAqIHBhZ2VzIHVzZWQgdG8gc3BlY2lmeSB0aGUgZGV0YWlscyBvZiBhbiB7QGxpbmsgSWRlbnRpZmlhYmxlfS4KKyAqIAorICogQHNlZSBEdWJsaW5Db3JlUGFnZQorICogQHNlZSBOZXdJZGVudGlmaWFibGVXaXphcmQKKyAqLworYWJzdHJhY3QgcHVibGljIGNsYXNzIE5ld0lkZW50aWZpYWJsZVBhZ2UgZXh0ZW5kcyBXaXphcmRQYWdlIHsKKworCS8qKgorCSAqIFRoaXMge0BsaW5rIENvbWJvfSB3aWxsIGJlIHBvcHVsYXRlZCB3aXRoIHRoZSBuYW1lcyBvZiB0aGUgcHJvamVjdHMgaW4KKwkgKiB0aGUgd29ya3NwYWNlIHRoYXQgdGhlIHtAbGluayBJZGVudGlmaWFibGV9IGNhbiBiZSBjcmVhdGVkIGluLgorCSAqLworCXByb3RlY3RlZCBDb21ibyBwcm9qZWN0TmFtZXNDb21ibzsKKworCS8qKgorCSAqIFRoZSBuYW1lIG9mIHRoZSBmaWxlIGluIHdoaWNoIHRoZSB7QGxpbmsgSWRlbnRpZmlhYmxlfSB3aWxsIGJlCisJICogc2VyaWFsaXplZC4KKwkgKiAKKwkgKiBAc2VlIE5ld0lkZW50aWZpYWJsZVdpemFyZCNjcmVhdGVJZGVudGlmaWFibGUob3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQcm9ncmVzc01vbml0b3IsCisJICogICAgICBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuVVJJKQorCSAqLworCXByb3RlY3RlZCBUZXh0IHNlcmlhbGl6YXRpb25GaWxlTmFtZUZpZWxkOworCisJLyoqCisJICogVGhlIGNvbGxlY3Rpb24gb2YgU1RFTSBwcm9qZWN0cyBpbiB0aGUgY3VycmVudCB3b3Jrc3BhY2UuIFRoaXMgd2lsbCBiZQorCSAqIHVzZWQgdG8gcG9wdWxhdGUge0BsaW5rICNwcm9qZWN0TmFtZXNDb21ib30uCisJICovCisJcHJvdGVjdGVkIExpc3Q8SVByb2plY3Q+IHN0ZW1Qcm9qZWN0cyA9IG51bGw7CisKKwkvKioKKwkgKiBSZW1lbWJlciB0aGUgbGFzdCBwcm9qZWN0IHVzZWQgaWYgdGhlIGN1cnJlbnQgc2VsZWN0aW9uIGlzIG5vdCByZWZlcmVuY2luZyAKKwkgKiBhbiBleGlzdGluZyBwcm9qZWN0CisJICovCisJCisJc3RhdGljIElQcm9qZWN0IGxhc3RQcm9qZWN0ID0gbnVsbDsKKwkKKwkvKioKKwkgKiBUaGlzIHtAbGluayBNb2RpZnlMaXN0ZW5lcn0gaXMgYXR0YWNoZWQgdG8gdGhvc2Ugd2lkZ2V0cyB3aG9zZSBjb250ZW50cworCSAqIG5lZWQgdG8gYmUgdmVyaWZpZWQgZm9yIGNvcnJlY3RuZXNzLiBXaGVuZXZlciBvbmUgb2YgdGhvc2UgaXMgbW9kaWZpZWQsIGEKKwkgKiBjYWxsIHRvIHtAbGluayAjdmFsaWRhdGVQYWdlKCl9IGlzIG1hZGUgd2hpY2ggdGhlbiByZXR1cm5zCisJICogPGNvZGU+dHJ1ZTwvY29kZT4gb3IgPGNvZGU+ZmFsc2U8L2NvZGU+LiBUaGlzIHZhbHVlIGlzIHBhc3NlZCB0bworCSAqIHtAbGluayAjc2V0UGFnZUNvbXBsZXRlKGJvb2xlYW4pfSB3aGljaCB0aGVuIGVuYWJsZXMgb3IgZGlzYWJsZXMgdGhlCisJICogYnV0dG9ucyBhdCB0aGUgYm90dG9tIG9mIHRoZSBwYWdlLiBUaGUgYXR0YWNobWVudCBpcyBkb25lIGluIHRoZSBtZXRob2QKKwkgKiB7QGxpbmsgI2NyZWF0ZVByb2plY3RDb21wb3NpdGUoQ29tcG9zaXRlKX0gYW5kIGluCisJICoge0BsaW5rICNjcmVhdGVTZXJpYWxpemF0aW9uQ29tcG9zaXRlKENvbXBvc2l0ZSl9CisJICovCisJcHJvdGVjdGVkIE1vZGlmeUxpc3RlbmVyIHByb2plY3RWYWxpZGF0b3IgPSBuZXcgTW9kaWZ5TGlzdGVuZXIoKSB7CisJCXB1YmxpYyB2b2lkIG1vZGlmeVRleHQoQFN1cHByZXNzV2FybmluZ3MoInVudXNlZCIpIGZpbmFsIE1vZGlmeUV2ZW50IGUpIHsKKwkJCXNldFBhZ2VDb21wbGV0ZSh2YWxpZGF0ZVBhZ2UoKSk7CisJCX0KKwl9OworCisJLyoqCisJICogQHBhcmFtIHBhZ2VOYW1lCisJICogICAgICAgICAgICB0aGUgbmFtZSBvZiB0aGUgcGFnZSwgdGhpcyBpcyBwYXNzZWQgdXAgYnkgYSBzdWJjbGFzcy4KKwkgKi8KKwlwcm90ZWN0ZWQgTmV3SWRlbnRpZmlhYmxlUGFnZShmaW5hbCBTdHJpbmcgcGFnZU5hbWUpIHsKKwkJc3VwZXIocGFnZU5hbWUpOworCX0gLy8gTmV3SWRlbnRpZmlhYmxlUGFnZQorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5qZmFjZS5kaWFsb2dzLklEaWFsb2dQYWdlI2NyZWF0ZUNvbnRyb2wob3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlKQorCSAqLworCXB1YmxpYyB2b2lkIGNyZWF0ZUNvbnRyb2woZmluYWwgQ29tcG9zaXRlIHBhcmVudCkgeworCQkvKgorCQkgKiBDcmVhdGVzIGEge0BsaW5rIENvbXBvc2l0ZX0gYW5kIGNhbGxzIHtAbGluayAgI3NldENvbnRyb2wob3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29udHJvbCl9LiBCYXNpY2FsbHksIGl0IGFkZHMKKwkJICogdGhyZWUgdGhpbmdzIHRvIHRoZSBDb21wb3NpdGUgaXQgY3JlYXRlcywgYSAicHJvamVjdCBjb21wb3NpdGUiIGFuCisJCSAqICJpZGVudGlmaWFibGUgY29tcG9zaXRlIiBhbmQgYSAic3BlY2lmaWMgY29tcG9zaXRlIi4gVGhlIGZpcnN0IGlzCisJCSAqIGNvbW1vbiB0byBhbGwgcGFnZXMgYW5kIGlzIHVzZWQgdG8gc3BlY2lmeSB3aGljaCBwcm9qZWN0IHRoZQorCQkgKiBJZGVudGlmaWFibGUgd2lsbCBiZSBzZXJpYWxpemVkIGluLiBUaGUgc2Vjb25kLCBhbHNvIGNvbW1vbiB0byBhbGwKKwkJICogcGFnZXMsIGlzIHVzZWQgdG8gc3BlY2lmeSB0aGUgbmFtZSBvZiB0aGUgc2VyaWFsaXphdGlvbiBmaWxlIGZvciB0aGUKKwkJICogSWRlbnRpZmlhYmxlLiBUaGUgdGhpcmQgaXMgZm9yIHRoZSBzcGVjaWZpYyBkZXRhaWxzIGZvciBkZWZpbmluZyB0aGUKKwkJICogSWRlbnRpZmlhYmxlLgorCQkgKi8KKwkJLy8gUGFnZSBDb21wb3NpdGUKKwkJZmluYWwgU2Nyb2xsZWRDb21wb3NpdGUgc2Nyb2xsQ29tcG9zaXRlID0gbmV3IFNjcm9sbGVkQ29tcG9zaXRlKHBhcmVudCwgU1dULkhfU0NST0xMIHwgU1dULlZfU0NST0xMKTsKKwkJZmluYWwgQ29tcG9zaXRlIHBhZ2VDb21wb3NpdGUgPSBuZXcgQ29tcG9zaXRlKHNjcm9sbENvbXBvc2l0ZSwgU1dULk5PTkUpOworCQlmaW5hbCBHcmlkTGF5b3V0IHBhZ2VMYXlvdXQgPSBuZXcgR3JpZExheW91dCgpOworCQlwYWdlTGF5b3V0Lm51bUNvbHVtbnMgPSAxOworCQlwYWdlTGF5b3V0LnZlcnRpY2FsU3BhY2luZyA9IDEyOworCQlwYWdlQ29tcG9zaXRlLnNldExheW91dChwYWdlTGF5b3V0KTsKKwkJCisJCXNjcm9sbENvbXBvc2l0ZS5zZXRDb250ZW50KHBhZ2VDb21wb3NpdGUpOworCQlzY3JvbGxDb21wb3NpdGUuc2V0RXhwYW5kSG9yaXpvbnRhbCh0cnVlKTsKKwkJc2Nyb2xsQ29tcG9zaXRlLnNldEV4cGFuZFZlcnRpY2FsKHRydWUpOworCisJCWNyZWF0ZVByb2plY3RDb21wb3NpdGUocGFnZUNvbXBvc2l0ZSk7CisKKwkJLy8gSG9yaXpvbnRhbCBTZXBhcmF0b3IKKwkJZmluYWwgTGFiZWwgc2VwZXJhdG9yID0gbmV3IExhYmVsKHBhZ2VDb21wb3NpdGUsIFNXVC5IT1JJWk9OVEFMCisJCQkJfCBTV1QuU0VQQVJBVE9SKTsKKwkJc2VwZXJhdG9yLnNldExheW91dERhdGEobmV3IEdyaWREYXRhKEdyaWREYXRhLkZJTExfSE9SSVpPTlRBTCkpOworCisJCWZpbmFsIENvbXBvc2l0ZSBpZGVudGlmaWFibGVDb21wb3NpdGUgPSBjcmVhdGVTZXJpYWxpemF0aW9uQ29tcG9zaXRlKHBhZ2VDb21wb3NpdGUpOworCQlpZGVudGlmaWFibGVDb21wb3NpdGUuc2V0TGF5b3V0RGF0YShuZXcgR3JpZERhdGEoCisJCQkJR3JpZERhdGEuRklMTF9IT1JJWk9OVEFMKSk7CisKKwkJLy8gQWRkIGFueXRoaW5nIHRoYXQgaXMgc3BlY2lmaWMgdG8gdGhlIHR5cGUgb2Ygd2l6YXJkCisJCWZpbmFsIENvbXBvc2l0ZSBzcGVjaWZpY0NvbXBvc2l0ZSA9IGNyZWF0ZVNwZWNpZmljQ29tcG9zaXRlKHBhZ2VDb21wb3NpdGUpOworCQkvLyBXYXMgdGhlcmUgYW55dGhpbmc/CisJCWlmIChzcGVjaWZpY0NvbXBvc2l0ZSAhPSBudWxsKSB7CisJCQkvLyBZZXMKKwkJCWZpbmFsIEdyaWREYXRhIGdkID0gbmV3IEdyaWREYXRhKEdyaWREYXRhLkZJTExfSE9SSVpPTlRBTCk7CisJCQlnZC5ncmFiRXhjZXNzSG9yaXpvbnRhbFNwYWNlID0gdHJ1ZTsKKwkJCXNwZWNpZmljQ29tcG9zaXRlLnNldExheW91dERhdGEoZ2QpOworCQkJc3BlY2lmaWNDb21wb3NpdGUuYWRkQ29udHJvbExpc3RlbmVyKG5ldyBDb250cm9sTGlzdGVuZXIoKSB7CisJCQkJCisJCQkJQE92ZXJyaWRlCisJCQkJcHVibGljIHZvaWQgY29udHJvbFJlc2l6ZWQoQ29udHJvbEV2ZW50IGUpIHsKKwkJCQkJc2Nyb2xsQ29tcG9zaXRlLnNldE1pblNpemUocGFnZUNvbXBvc2l0ZS5jb21wdXRlU2l6ZShTV1QuREVGQVVMVCwgU1dULkRFRkFVTFQpKTsKKwkJCQl9CisJCQkJCisJCQkJQE92ZXJyaWRlCisJCQkJcHVibGljIHZvaWQgY29udHJvbE1vdmVkKENvbnRyb2xFdmVudCBlKSB7CisJCQkJfQorCQkJfSk7CisJCX0gLy8gaWYKKworCQlzZXRQYWdlQ29tcGxldGUodmFsaWRhdGVQYWdlKCkpOworCQlzZXRDb250cm9sKHNjcm9sbENvbXBvc2l0ZSk7CisJCXNjcm9sbENvbXBvc2l0ZS5zZXRNaW5TaXplKHBhZ2VDb21wb3NpdGUuY29tcHV0ZVNpemUoU1dULkRFRkFVTFQsIFNXVC5ERUZBVUxUKSk7CisJfSAvLyBjcmVhdGVDb250cm9sCisKKwkvKioKKwkgKiBAcGFyYW0gcGFyZW50CisJICogICAgICAgICAgICB0aGUgcGFyZW50IHtAbGluayBDb21wb3NpdGV9CisJICovCisJcHJpdmF0ZSB2b2lkIGNyZWF0ZVByb2plY3RDb21wb3NpdGUoZmluYWwgQ29tcG9zaXRlIHBhcmVudCkgeworCQlmaW5hbCBDb21wb3NpdGUgcHJvamVjdENvbXBvc2l0ZSA9IG5ldyBDb21wb3NpdGUocGFyZW50LCBTV1QuTm9uZSk7CisJCWZpbmFsIEdyaWRMYXlvdXQgcHJvamVjdENvbXBvc2l0ZUxheW91dCA9IG5ldyBHcmlkTGF5b3V0KCk7CisJCXByb2plY3RDb21wb3NpdGVMYXlvdXQubnVtQ29sdW1ucyA9IDM7CisJCXByb2plY3RDb21wb3NpdGVMYXlvdXQudmVydGljYWxTcGFjaW5nID0gMTI7CisJCXByb2plY3RDb21wb3NpdGVMYXlvdXQubWFyZ2luSGVpZ2h0ID0gMDsKKwkJcHJvamVjdENvbXBvc2l0ZUxheW91dC5tYXJnaW5XaWR0aCA9IDA7CisJCXByb2plY3RDb21wb3NpdGUuc2V0TGF5b3V0KHByb2plY3RDb21wb3NpdGVMYXlvdXQpOworCisJCWZpbmFsIEdyaWREYXRhIHByb2plY3RDb21wb3NpdGVMYXlvdXREYXRhID0gbmV3IEdyaWREYXRhKCk7CisJCXByb2plY3RDb21wb3NpdGVMYXlvdXREYXRhLmhvcml6b250YWxBbGlnbm1lbnQgPSBHcmlkRGF0YS5GSUxMOworCQlwcm9qZWN0Q29tcG9zaXRlLnNldExheW91dERhdGEocHJvamVjdENvbXBvc2l0ZUxheW91dERhdGEpOworCisJCS8vIFByb2plY3QgTGFiZWwKKwkJZmluYWwgTGFiZWwgcHJvamVjdExhYmVsID0gbmV3IExhYmVsKHByb2plY3RDb21wb3NpdGUsIFNXVC5MRUZUKTsKKwkJcHJvamVjdExhYmVsLnNldFRleHQoTWVzc2FnZXMuZ2V0U3RyaW5nKCJOSWRXaXoucHJvamVjdCIpICsgIjoiKTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCisJCWZpbmFsIEdyaWREYXRhIHByb2plY3RMYWJlbExheW91dERhdGEgPSBuZXcgR3JpZERhdGEoKTsKKwkJcHJvamVjdExhYmVsTGF5b3V0RGF0YS5ob3Jpem9udGFsU3BhbiA9IDE7CisJCXByb2plY3RMYWJlbExheW91dERhdGEuaG9yaXpvbnRhbEFsaWdubWVudCA9IEdyaWREYXRhLkZJTEw7CisJCXByb2plY3RMYWJlbC5zZXRMYXlvdXREYXRhKHByb2plY3RMYWJlbExheW91dERhdGEpOworCisJCS8vIFByb2plY3QgQ29tYm8KKwkJcHJvamVjdE5hbWVzQ29tYm8gPSBuZXcgQ29tYm8ocHJvamVjdENvbXBvc2l0ZSwgU1dULkJPUkRFUgorCQkJCXwgU1dULlJFQURfT05MWSk7CisJCWZpbmFsIEdyaWREYXRhIHByb2plY3RGaWVsZExheW91dERhdGEgPSBuZXcgR3JpZERhdGEoKTsKKwkJcHJvamVjdEZpZWxkTGF5b3V0RGF0YS5ob3Jpem9udGFsQWxpZ25tZW50ID0gR3JpZERhdGEuRklMTDsKKwkJcHJvamVjdEZpZWxkTGF5b3V0RGF0YS5ncmFiRXhjZXNzSG9yaXpvbnRhbFNwYWNlID0gdHJ1ZTsKKwkJcHJvamVjdEZpZWxkTGF5b3V0RGF0YS5ob3Jpem9udGFsU3BhbiA9IDE7CisJCXByb2plY3ROYW1lc0NvbWJvLnNldExheW91dERhdGEocHJvamVjdEZpZWxkTGF5b3V0RGF0YSk7CisKKwkJLy8gaW5pdGlhbGl6ZSB0aGUgcHJvamVjdCBmaWVsZCB0byBwb2ludCB0byB0aGUgc2VsZWN0ZWQgcHJvamVjdAorCQlpbml0aWFsaXplUHJvamVjdENvbWJvKHByb2plY3ROYW1lc0NvbWJvKTsKKworCQkvLyBUaGUgcHJvamVjdFZhbGlkYXRvciB3aWxsIGxvb2sgYXQgdGhlIGNvbnRlbnRzIG9mIHRoZSBmaWVsZCBhbmQKKwkJLy8gZGV0ZXJtaW5lIGlmIGl0IHJlZmVycyB0byBhIHZhbGlkIHByb2plY3QuCisJCXByb2plY3ROYW1lc0NvbWJvLmFkZE1vZGlmeUxpc3RlbmVyKHByb2plY3RWYWxpZGF0b3IpOworCQkKKwkJLy8gUmVtZW1iZXIgdGhlIHNlbGVjdGlvbiBkb25lIGZvciBmdXR1cmUgCisJCXByb2plY3ROYW1lc0NvbWJvLmFkZFNlbGVjdGlvbkxpc3RlbmVyKG5ldyBTZWxlY3Rpb25MaXN0ZW5lcigpIHsKKwkJCQorCQkJcHVibGljIHZvaWQgd2lkZ2V0U2VsZWN0ZWQoU2VsZWN0aW9uRXZlbnQgZSkgeworCQkJCU5ld0lkZW50aWZpYWJsZVBhZ2UubGFzdFByb2plY3QgPSBOZXdJZGVudGlmaWFibGVQYWdlLnRoaXMuZ2V0U2VsZWN0ZWRQcm9qZWN0KCk7CisJCQl9CisJCQkKKwkJCXB1YmxpYyB2b2lkIHdpZGdldERlZmF1bHRTZWxlY3RlZChTZWxlY3Rpb25FdmVudCBlKSB7CisJCQkJCisJCQl9CisJCX0pOworCQkvLyBQcm9qZWN0IEJyb3dzZSBCdXR0b24KKwkJZmluYWwgQnV0dG9uIHByb2plY3RGaWVsZEJyb3dzZUJ1dHRvbiA9IG5ldyBCdXR0b24ocHJvamVjdENvbXBvc2l0ZSwKKwkJCQlTV1QuUFVTSCk7CisJCXByb2plY3RGaWVsZEJyb3dzZUJ1dHRvbi5zZXRUZXh0KE1lc3NhZ2VzLmdldFN0cmluZygiTklkV2l6LmJyb3dzZSIpKTsgLy8kTk9OLU5MUy0xJAorCisJCXByb2plY3RGaWVsZEJyb3dzZUJ1dHRvbi5hZGRTZWxlY3Rpb25MaXN0ZW5lcihuZXcgU2VsZWN0aW9uQWRhcHRlcigpIHsKKworCQkJLyoqCisJCQkgKiBUaGUgYnJvd3NlIGJ1dHRvbiB3aWxsIHBvcC11cCBhIGZpbGUgc2VhcmNoIGRpYWxvZyBhbmQgYWxsb3cgdGhlCisJCQkgKiB1c2VyIHRvIHNwZWNpZnkgdGhlIHByb2plY3QKKwkJCSAqIAorCQkJICogQHNlZSBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLlNlbGVjdGlvbkFkYXB0ZXIjd2lkZ2V0U2VsZWN0ZWQob3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5TZWxlY3Rpb25FdmVudCkKKwkJCSAqLworCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgdm9pZCB3aWRnZXRTZWxlY3RlZCgKKwkJCQkJQFN1cHByZXNzV2FybmluZ3MoInVudXNlZCIpIGZpbmFsIFNlbGVjdGlvbkV2ZW50IGUpIHsKKwkJCQlmaW5hbCBTdHJpbmcgZmlsZVBhdGggPSBDb3JlRWRpdG9yQWR2aXNvci5vcGVuRmlsZVBhdGhEaWFsb2coCisJCQkJCQlnZXRTaGVsbCgpLCAiKiIsIFNXVC5PUEVOKTsgLy8kTk9OLU5MUy0xJAorCQkJCWlmIChmaWxlUGF0aCAhPSBudWxsKSB7CisJCQkJCXByb2plY3ROYW1lc0NvbWJvLnNldFRleHQoZmlsZVBhdGgpOworCQkJCX0KKwkJCX0KKwkJfSk7CisJfSAvLyBjcmVhdGVQcm9qZWN0Q29tcG9zaXRlCisKKwkvKioKKwkgKiBAcGFyYW0gcGFyZW50CisJICogICAgICAgICAgICB0aGUgcGFyZW50IHtAbGluayBDb21wb3NpdGV9CisJICogQHJldHVybiBhIHtAbGluayBDb21wb3NpdGV9IGluIHdoaWNoIHRoZSB1c2VyIGNhbiBzcGVjaWZ5IHRoZSBuYW1lIG9mIHRoZQorCSAqICAgICAgICAgZmlsZSBpbiB3aGljaCB0aGUge0BsaW5rIElkZW50aWZpYWJsZX0gc2hvdWxkIGJlIHNlcmlhbGl6ZWQuCisJICovCisJcHJpdmF0ZSBDb21wb3NpdGUgY3JlYXRlU2VyaWFsaXphdGlvbkNvbXBvc2l0ZShmaW5hbCBDb21wb3NpdGUgcGFyZW50KSB7CisJCWZpbmFsIENvbXBvc2l0ZSByZXRWYWx1ZSA9IG5ldyBDb21wb3NpdGUocGFyZW50LCBTV1QuTk9ORSk7CisJCUdyaWREYXRhIGdyaWREYXRhOworCisJCWZpbmFsIEdyaWRMYXlvdXQgaWRlbnRpZmFibGVDb21wb3NpdGVMYXlvdXQgPSBuZXcgR3JpZExheW91dCgpOworCQlpZGVudGlmYWJsZUNvbXBvc2l0ZUxheW91dC5udW1Db2x1bW5zID0gMzsKKwkJaWRlbnRpZmFibGVDb21wb3NpdGVMYXlvdXQudmVydGljYWxTcGFjaW5nID0gMTI7CisJCWlkZW50aWZhYmxlQ29tcG9zaXRlTGF5b3V0Lm1hcmdpbkhlaWdodCA9IDA7CisJCWlkZW50aWZhYmxlQ29tcG9zaXRlTGF5b3V0Lm1hcmdpbldpZHRoID0gMDsKKwkJcmV0VmFsdWUuc2V0TGF5b3V0KGlkZW50aWZhYmxlQ29tcG9zaXRlTGF5b3V0KTsKKwkJZ3JpZERhdGEgPSBuZXcgR3JpZERhdGEoKTsKKwkJLy8gaWRlbnRpZmlhYmxlQ29tcG9zaXRlTGF5b3V0RGF0YS5ob3Jpem9udGFsU3Bhbj0xOworCQlncmlkRGF0YS5ob3Jpem9udGFsQWxpZ25tZW50ID0gR3JpZERhdGEuRklMTDsKKwkJLy8gaWRlbnRpZmlhYmxlQ29tcG9zaXRlTGF5b3V0RGF0YS5ncmFiRXhjZXNzSG9yaXpvbnRhbFNwYWNlID0gdHJ1ZTsKKwkJcmV0VmFsdWUuc2V0TGF5b3V0RGF0YShncmlkRGF0YSk7CisKKwkJLy8gU2VyaWFsaXphdGlvbiBmaWxlIG5hbWUgbGFiZWwKKwkJZmluYWwgTGFiZWwgc2VyaWFsaXphdGlvbkZpbGVOYW1lTGFiZWwgPSBuZXcgTGFiZWwocmV0VmFsdWUsIFNXVC5OT05FKTsKKwkJc2VyaWFsaXphdGlvbkZpbGVOYW1lTGFiZWwKKwkJCQkuc2V0VGV4dChNZXNzYWdlcy5nZXRTdHJpbmcoIk5JZFdpei5uYW1lIikgKyAiOiIpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKKwkJZ3JpZERhdGEgPSBuZXcgR3JpZERhdGEoKTsKKwkJZ3JpZERhdGEuaG9yaXpvbnRhbFNwYW4gPSAxOworCQlncmlkRGF0YS5ob3Jpem9udGFsQWxpZ25tZW50ID0gU1dULkxFQUQ7CisJCXNlcmlhbGl6YXRpb25GaWxlTmFtZUxhYmVsLnNldExheW91dERhdGEoZ3JpZERhdGEpOworCisJCXNlcmlhbGl6YXRpb25GaWxlTmFtZUZpZWxkID0gbmV3IFRleHQocmV0VmFsdWUsIFNXVC5CT1JERVIpOworCQlncmlkRGF0YSA9IG5ldyBHcmlkRGF0YSgpOworCQlncmlkRGF0YS5ob3Jpem9udGFsQWxpZ25tZW50ID0gR3JpZERhdGEuRklMTDsKKwkJZ3JpZERhdGEuZ3JhYkV4Y2Vzc0hvcml6b250YWxTcGFjZSA9IHRydWU7CisJCWdyaWREYXRhLmhvcml6b250YWxTcGFuID0gMTsKKwkJc2VyaWFsaXphdGlvbkZpbGVOYW1lRmllbGQuc2V0TGF5b3V0RGF0YShncmlkRGF0YSk7CisKKwkJc2VyaWFsaXphdGlvbkZpbGVOYW1lRmllbGQuYWRkTW9kaWZ5TGlzdGVuZXIocHJvamVjdFZhbGlkYXRvcik7CisKKwkJcmV0dXJuIHJldFZhbHVlOworCX0gLy8gY3JlYXRlU2VyaWFsaXphdGlvbkNvbXBvc2l0ZQorCisJLyoqCisJICogQHBhcmFtIHBhcmVudAorCSAqICAgICAgICAgICAgdGhlIHBhcmVudCB7QGxpbmsgQ29tcG9zaXRlfSwgdHlwaWNhbGx5IHRoZSBvbmUgY3JlYXRlZCBpbgorCSAqICAgICAgICAgICAge0BsaW5rICNjcmVhdGVDb250cm9sKENvbXBvc2l0ZSl9LgorCSAqLworCXByb3RlY3RlZCBDb21wb3NpdGUgY3JlYXRlU3BlY2lmaWNDb21wb3NpdGUoZmluYWwgQ29tcG9zaXRlIHBhcmVudCkgeworCQkvLyBUaGUgTmV3TW9kZWxXaXphcmQgZG9lc24ndCBwcm92aWRlIGEgInNwZWNpZmljIGNvbXBvc2l0ZSIgc28gd2UgZG9uJ3QKKwkJLy8gbWFrZSB0aGlzIG1ldGhvZCBhYnN0cmFjdC4KKwkJcmV0dXJuIG51bGw7CisJfSAvLyBjcmVhdGVTcGVjaWZpY0NvbXBvc2l0ZQorCisJLyoqCisJICogQHJldHVybiB0aGUgcHJvamVjdCBzZWxlY3RlZCBieSB0aGUgdXNlci4KKwkgKi8KKwlwdWJsaWMgSVByb2plY3QgZ2V0U2VsZWN0ZWRQcm9qZWN0KCkgeworCQlpbnQgaW5kID0gcHJvamVjdE5hbWVzQ29tYm8uZ2V0U2VsZWN0aW9uSW5kZXgoKTsKKwkJaWYoaW5kICE9IC0xKQorCQkJcmV0dXJuIHN0ZW1Qcm9qZWN0cy5nZXQocHJvamVjdE5hbWVzQ29tYm8uZ2V0U2VsZWN0aW9uSW5kZXgoKSk7CisJCXJldHVybiBudWxsOworCX0gLy8gZ2V0U2VsZWN0ZWRQcm9qZWN0CisKKwkvKioKKwkgKiBAcGFyYW0gcHJvamVjdENvbWJvCisJICogICAgICAgICAgICB0aGUge0BsaW5rIENvbWJvfSB0byBiZSBpbml0aWFsaXplZCB3aXRoIHRoZSBuYW1lcyBvZiB0aGUKKwkgKiAgICAgICAgICAgIHByb2plY3RzLgorCSAqLworCXByaXZhdGUgdm9pZCBpbml0aWFsaXplUHJvamVjdENvbWJvKGZpbmFsIENvbWJvIHByb2plY3RDb21ibykgeworCisJCUlQcm9qZWN0IHNlbGVjdGVkUHJvamVjdCA9IGdldFdvcmtTcGFjZVNlbGVjdGVkUHJvamVjdCgpOworCisJCWlmKHNlbGVjdGVkUHJvamVjdCA9PSBudWxsKSBzZWxlY3RlZFByb2plY3QgPSBsYXN0UHJvamVjdDsKKwkJCisJCS8vIEdldCB0aGUgUHJvamVjdHMgdGhhdCBhcmUgU1RFTSBwcm9qZWN0cworCQlpbnQgaW5kZXggPSAwOworCQlpbnQgaSA9IDA7CisJCWZvciAoZmluYWwgSVByb2plY3QgcHJvamVjdCA6IGdldFNURU1Qcm9qZWN0cygpKSB7CisJCQkvLyBJcyB0aGUgU1RFTSBwcm9qZWN0IHNlbGVjdGVkPworCQkJaWYgKHByb2plY3QuZXF1YWxzKHNlbGVjdGVkUHJvamVjdCkpIHsKKwkJCQkvLyBZZXMKKwkJCQlpbmRleCA9IGk7CisJCQl9CisKKwkJCWZpbmFsIFN0cmluZyBwcm9qZWN0TmFtZSA9IHByb2plY3QuZ2V0TmFtZSgpOworCQkJcHJvamVjdENvbWJvLmFkZChwcm9qZWN0TmFtZSk7CisJCQlpKys7CisJCX0gLy8gZm9yIGVhY2ggU1RFTSBwcm9qZWN0CisJCXByb2plY3RDb21iby5zZXRGb2N1cygpOworCQlwcm9qZWN0Q29tYm8uc2VsZWN0KGluZGV4KTsKKwkJTmV3SWRlbnRpZmlhYmxlUGFnZS5sYXN0UHJvamVjdCA9IHRoaXMuZ2V0U2VsZWN0ZWRQcm9qZWN0KCk7CisJfSAvLyBpbml0aWFsaXplUHJvamVjdEZpZWxkCisKKwlwcml2YXRlIElQcm9qZWN0IGdldFdvcmtTcGFjZVNlbGVjdGVkUHJvamVjdCgpIHsKKwkJSVByb2plY3QgcmV0VmFsdWUgPSBudWxsOworCQkvLyBGaW5kIHRoZSBuYW1lIG9mIHRoZSBjdXJyZW50bHkgc2VsZWN0ZWQgcHJvamVjdCwgaWYgdGhlcmUgaXMgb25lCisJCWZpbmFsIElTZWxlY3Rpb24gc2VsZWN0aW9uID0gQWN0aXZhdG9yLmdldERlZmF1bHQoKS5nZXRXb3JrYmVuY2goKQorCQkJCS5nZXRBY3RpdmVXb3JrYmVuY2hXaW5kb3coKS5nZXRTZWxlY3Rpb25TZXJ2aWNlKCkKKwkJCQkuZ2V0U2VsZWN0aW9uKCk7CisJCS8vIFN0cnVjdHVyZWQgU2VsZWN0aW9uIHRoYXQgbWlnaHQgaGF2ZSBhIHByb2plY3Q/CisJCWlmIChzZWxlY3Rpb24gaW5zdGFuY2VvZiBJU3RydWN0dXJlZFNlbGVjdGlvbikgeworCQkJZm9yIChPYmplY3Qgb2JqIDogKChJU3RydWN0dXJlZFNlbGVjdGlvbikgc2VsZWN0aW9uKS50b0xpc3QoKSkgeworCQkJCS8vIFByb2plY3Q/CisJCQkJaWYgKG9iaiBpbnN0YW5jZW9mIElQcm9qZWN0KSB7CisJCQkJCXJldFZhbHVlID0gKElQcm9qZWN0KSBvYmo7CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCQkvLyBGaWxlIG9yIEZvbGRlcj8gKGluIGEgUHJvamVjdCkKKwkJCQllbHNlIGlmIChvYmogaW5zdGFuY2VvZiBJUmVzb3VyY2UpIHsKKwkJCQkJLy8gWWVzCisJCQkJCXJldFZhbHVlID0gKChJUmVzb3VyY2UpIG9iaikuZ2V0UHJvamVjdCgpOworCQkJCQlicmVhazsKKwkJCQl9IC8vIGVsc2UgaWYgRmlsZSBvciBGb2xkZXIKKwkJCQkvLyBJZGVudGlmaWFibGU/CisJCQkJZWxzZSBpZiAob2JqIGluc3RhbmNlb2YgSWRlbnRpZmlhYmxlKSB7CisJCQkJCVN0cmluZyB1cmlTID0gKChJZGVudGlmaWFibGUpIG9iaikuZ2V0VVJJKCkudG9QbGF0Zm9ybVN0cmluZyh0cnVlKTsKKwkJCQkJCisJCQkJCWlmKHVyaVMgIT0gbnVsbCkgeworCQkJCQkJSVBhdGggcGF0aCA9IG5ldyBQYXRoKHVyaVMpOworCQkJCQkJcmV0VmFsdWUgPSBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuZ2V0Um9vdCgpLmdldEZpbGUocGF0aCkuZ2V0UHJvamVjdCgpOworCQkJCQl9IGVsc2UgeworCQkJCQkJLy8gSWRlbnRpZmlhYmxlIGluc3RhbmNlcyBjYW4gYWxzbyBiZSBsYWJlbHMgaW5zaWRlIGdyYXBocy4gCisJCQkJCQkvLyBXZSBuZWVkIHRvIGluZGlyZWN0bHkgZmluZCB0aGUgZ3JhcGggYW5kIHRoZSBhc3NvY2lhdGVkIHByb2plY3QuCisJCQkJCQlpZihvYmogaW5zdGFuY2VvZiBMYWJlbEltcGwgJiYgKChMYWJlbEltcGwpb2JqKS5lQ29udGFpbmVyKCkuZUNvbnRhaW5lcigpIGluc3RhbmNlb2YgR3JhcGgpIHsKKwkJCQkJCQlHcmFwaCBnID0gKEdyYXBoKSgoTGFiZWxJbXBsKW9iaikuZUNvbnRhaW5lcigpLmVDb250YWluZXIoKTsKKwkJCQkJCQlTdHJpbmcgbGFiZWxVUkkgPSBnLmdldFVSSSgpLnRvUGxhdGZvcm1TdHJpbmcodHJ1ZSk7CisJCQkJCQkJaWYobGFiZWxVUkkgIT0gbnVsbCkgeworCQkJCQkJCQlQYXRoIHBhdGggPSBuZXcgUGF0aChnLmdldFVSSSgpLnRvUGxhdGZvcm1TdHJpbmcodHJ1ZSkpOworCQkJCQkJCQlyZXRWYWx1ZSA9IFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5nZXRSb290KCkuZ2V0RmlsZShwYXRoKS5nZXRQcm9qZWN0KCk7CisJCQkJCQkJfSAKKwkJCQkJCX0KKwkJCQkJfQorCQkJCQlicmVhazsKKwkJCQl9IC8vIGVsc2UgaWYgSWRlbnRpZmlhYmxlCisJCQkJLy8gSWRlbnRpZmlhYmxlVHJlZU5vZGU/CisJCQkJZWxzZSBpZiAob2JqIGluc3RhbmNlb2YgSWRlbnRpZmlhYmxlVHJlZU5vZGUpIHsKKwkJCQkJcmV0VmFsdWUgPSAoKElkZW50aWZpYWJsZVRyZWVOb2RlKSBvYmopLmdldFByb2plY3QoKTsKKwkJCQkJYnJlYWs7CisJCQkJfSAvLyBlbHNlIGlmIElkZW50aWZpYWJsZVRyZWVOb2RlCisKKwkJCX0gLy8gZm9yIGVhY2ggc2VsZWN0ZWQgb2JqZWN0CisJCX0gLy8gaWYgc3RydWN0dXJlZCBzZWxlY3Rpb24KKworCQlyZXR1cm4gcmV0VmFsdWU7CisJfSAvLyBnZXRXb3JrU3BhY2VTZWxlY3RlZFByb2plY3QKKworCS8qKgorCSAqIEByZXR1cm4gYSBMaXN0IG9mIHRoZSBwcm9qZWN0cyBpbiB0aGUgd29ya3NwYWNlIHRoYXQgaGF2ZSBTVEVNIFByb2plY3QKKwkgKiAgICAgICAgICJuYXR1cmUiCisJICogCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuQ29uc3RhbnRzI0lEX1NURU1fUFJPSkVDVF9OQVRVUkUKKwkgKi8KKwlwcml2YXRlIExpc3Q8SVByb2plY3Q+IGdldFNURU1Qcm9qZWN0cygpIHsKKwkJLy8gUmVmcmVzaAorCQlzdGVtUHJvamVjdHMgPSBVdGlsaXR5LmdldFNURU1Qcm9qZWN0c0Zyb21Xb3Jrc3BhY2UoKTsKKwkJcmV0dXJuIHN0ZW1Qcm9qZWN0czsKKwl9IC8vIGdldFNURU1Qcm9qZWN0cworCisJLyoqCisJICogQHJldHVybiA8Y29kZT50cnVlPC9jb2RlPiBpZiB0aGUgcGFnZSBpcyBjb21wbGV0ZSBhbmQgcmVhZHkgdG8gZ28KKwkgKi8KKwlwcm90ZWN0ZWQgYm9vbGVhbiB2YWxpZGF0ZVBhZ2UoKSB7CisJCWJvb2xlYW4gcmV0VmFsdWUgPSB0cnVlOworCQlzZXRFcnJvck1lc3NhZ2UobnVsbCk7CisKKwkJLy8gQXJlIHRoZXJlIGFueSBwcm9qZWN0cz8KKwkJaWYgKGdldFNURU1Qcm9qZWN0cygpLnNpemUoKSA9PSAwKSB7CisJCQkvLyBObworCQkJc2V0RXJyb3JNZXNzYWdlKE1lc3NhZ2VzLmdldFN0cmluZygiTklkV2l6Lm5vUHJvakVyciIpKTsKKwkJCXJldFZhbHVlID0gZmFsc2U7CisJCX0gLy8gaWYgbm8gcHJvamVjdHMKKworCQkvLyBJcyB0aGUgc2VyaWFsaXphdGlvbiBmaWxlIG5hbWUgbWlzc2luZz8KKwkJaWYgKHJldFZhbHVlICYmIHNlcmlhbGl6YXRpb25GaWxlTmFtZUZpZWxkLmdldFRleHQoKSA9PSBudWxsCisJCQkJfHwgIiIuZXF1YWxzKHNlcmlhbGl6YXRpb25GaWxlTmFtZUZpZWxkLmdldFRleHQoKS50cmltKCkpKSB7CisJCQkvLyBZZXMKKwkJCXNldEVycm9yTWVzc2FnZShNZXNzYWdlcy5nZXRTdHJpbmcoIk5JZFdpei5uYW1lTWlzc2luZ0VyciIpKTsgLy8kTk9OLU5MUy0xJAorCQkJcmV0VmFsdWUgPSBmYWxzZTsKKwkJfQorCisJCS8vIElzIHRoZSBzZXJpYWxpemF0aW9uIGZpbGUgbmFtZSB2YWxpZD8KKwkJaWYgKHJldFZhbHVlICYmICFzZXJpYWxpemF0aW9uRmlsZU5hbWVJc1ZhbGlkKCkpIHsKKwkJCS8vIE5vCisJCQlzZXRFcnJvck1lc3NhZ2UoTWVzc2FnZXMuZ2V0U3RyaW5nKCJOSWRXaXoubmFtZUVyciIpKTsgLy8kTk9OLU5MUy0xJAorCQkJcmV0VmFsdWUgPSBmYWxzZTsKKwkJfQorCisJCXJldHVybiByZXRWYWx1ZTsKKwl9IC8vIHZhbGlkYXRlUGFnZQorCisJLyoqCisJICogQHJldHVybiA8Y29kZT50cnVlPC9jb2RlPiBpZiB0aGUgc2VyaWFsaXphdGlvbiBmaWxlIG5hbWUgc3BlY2lmaWVkIGZvcgorCSAqICAgICAgICAgdGhlIHtAbGluayBJZGVudGlmaWFibGV9IHRvIGJlIGNyZWF0ZWQgaXMgYSB2YWxpZCBuYW1lLgorCSAqLworCXByaXZhdGUgYm9vbGVhbiBzZXJpYWxpemF0aW9uRmlsZU5hbWVJc1ZhbGlkKCkgeworCQlmaW5hbCBTdHJpbmcgbmFtZSA9IHNlcmlhbGl6YXRpb25GaWxlTmFtZUZpZWxkLmdldFRleHQoKTsKKworCQlpZiAobmFtZSA9PSBudWxsKSB7CisJCQlyZXR1cm4gZmFsc2U7CisJCX0KKworCQlmaW5hbCBTdHJpbmcgdHJpbWVkTmFtZSA9IG5hbWUudHJpbSgpOworCisJCXJldHVybiAhKHRyaW1lZE5hbWUuZXF1YWxzKCIiKSB8fCB0cmltZWROYW1lLmNvbnRhaW5zKCIgIikpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKKwl9IC8vIHNlcmlhbGl6YXRpb25GaWxlTmFtZUlzVmFsaWQKKworCS8qKgorCSAqIEByZXR1cm4gdGhlIHZhbHVlIGZvciB0aGUge0BsaW5rIER1YmxpbkNvcmUjZ2V0VGl0bGUoKX0gYXR0cmlidXRlIG9uIHRoZQorCSAqICAgICAgICAge0BsaW5rIER1YmxpbkNvcmVQYWdlfS4KKwkgKi8KKwlwcm90ZWN0ZWQgU3RyaW5nIGdldERDVGl0bGUoKSB7CisJCXJldHVybiBnZXREQ0Rlc2NyaXB0aW9uKCk7CisJfSAvLyBnZXREQ1RpdGxlCisKKwkvKioKKwkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBmb3IgYSB7QGxpbmsgRHVibGluQ29yZSNnZXREZXNjcmlwdGlvbigpfSBhdHRyaWJ1dGUgb24KKwkgKiAgICAgICAgIHRoZSB7QGxpbmsgRHVibGluQ29yZVBhZ2V9LgorCSAqLworCWFic3RyYWN0IHByb3RlY3RlZCBTdHJpbmcgZ2V0RENEZXNjcmlwdGlvbigpOworCisJLyoqCisJICogQHJldHVybiBhIHZhbHVlIHN1aXRhYmxlIGZvciB7QGxpbmsgRHVibGluQ29yZSNzZXRWYWxpZChTdHJpbmcpfQorCSAqLworCXByb3RlY3RlZCBTdHJpbmcgZ2V0RENWYWxpZERhdGVSYW5nZSgpIHsKKwkJcmV0dXJuICIiOworCX0gLy8gZ2V0RENWYWxpZERhdGVSYW5nZQorfSAvLyBOZXdJZGVudGlmaWFibGVQYWdlCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvd2l6YXJkcy9OZXdJZGVudGlmaWFibGVXaXphcmQuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS93aXphcmRzL05ld0lkZW50aWZpYWJsZVdpemFyZC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE4NGI2YTkKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvd2l6YXJkcy9OZXdJZGVudGlmaWFibGVXaXphcmQuamF2YQpAQCAtMCwwICsxLDM2NyBAQAorLy8gTmV3SWRlbnRpZmlhYmxlV2l6YXJkLmphdmEKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS51aS53aXphcmRzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA2LCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247CitpbXBvcnQgamF2YS5sYW5nLnJlZmxlY3QuSW52b2NhdGlvblRhcmdldEV4Y2VwdGlvbjsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklSZXNvdXJjZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQ29yZUV4Y2VwdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVByb2dyZXNzTW9uaXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuTnVsbFByb2dyZXNzTW9uaXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnVpLmFjdGlvbi5Xb3JrYmVuY2hXaW5kb3dBY3Rpb25EZWxlZ2F0ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuVVJJOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVN0cnVjdHVyZWRTZWxlY3Rpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5TdHJ1Y3R1cmVkU2VsZWN0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLndpemFyZC5JV2l6YXJkUGFnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS53aXphcmQuV2l6YXJkOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLndpemFyZC5XaXphcmREaWFsb2c7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLlV0aWxpdHk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5JZGVudGlmaWFibGU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5wcmVzZW50YXRpb24uQ29yZUVkaXRvckFkdmlzb3I7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS51aS5BY3RpdmF0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuSU5ld1dpemFyZDsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5JV29ya2JlbmNoOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLmFjdGlvbnMuV29ya3NwYWNlTW9kaWZ5T3BlcmF0aW9uOworCisvKioKKyAqIFRoaXMgY2xhc3MgaXMgdGhlIHN1cGVyIGNsYXNzIGZvciB0aGUge0BsaW5rIFdpemFyZH1zIHRoYXQgY3JlYXRlCisgKiB7QGxpbmsgSWRlbnRpZmlhYmxlfXMuIFRoZSBiYXNpYyB7QGxpbmsgSWRlbnRpZmlhYmxlfSB3aXphcmQgY29udGFpbnMgdHdvCisgKiB7QGxpbmsgV2l6YXJkUGFnZX1zLiBUaGUgZmlyc3QgaXMgYSBzdWJjbGFzcyBpbnN0YW5jZSBvZiB0aGUgYWJzdHJhY3QgY2xhc3MKKyAqIHtAbGluayBOZXdJZGVudGlmaWFibGVQYWdlfSBhbmQgdGhlIHNlY29uZCBpcyBhbiBpbnN0YW5jZSBvZgorICoge0BsaW5rIER1YmxpbkNvcmVQYWdlfS4gVGhlIHtAbGluayBOZXdJZGVudGlmaWFibGVQYWdlfSBpbXBsZW1lbnRzIHRoZQorICogdGVtcGxhdGUgcGF0dGVybiBieSBjcmVhdGluZyBhbiBvdmVyYWxsIHN0cnVjdHVyZSBmb3IgdGhlIHBhZ2UgdGhhdCBpcyBmaWxsZWQKKyAqIGluIGJ5IHRoZSByZXN1bHRzIG9mIGNhbGxzIHRvIGFic3RyYWN0IG1ldGhvZHMgaW1wbGVtZW50ZWQgYnkgdGhlIHN1YmNsYXNzZXMuCisgKiAKKyAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5JZGVudGlmaWFibGUKKyAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkdyYXBoCisgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5Nb2RlbAorICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2NlbmFyaW8uU2NlbmFyaW8KKyAqLworYWJzdHJhY3QgcHVibGljIGNsYXNzIE5ld0lkZW50aWZpYWJsZVdpemFyZCBleHRlbmRzIFdpemFyZCBpbXBsZW1lbnRzCisJCUlOZXdXaXphcmQgeworCisJLyoqCisJICogVGhlIHdpemFyZCdzIGxpbmsgdG8gdGhlIHtAbGluayBJV29ya2JlbmNofS4KKwkgKi8KKwlwcml2YXRlIElXb3JrYmVuY2ggd29ya2JlbmNoOworCisJLyoqCisJICogVGhlIGZpcnN0IHBhZ2UgaW4gdGhlIHdpemFyZCB0aGF0IGEgdXNlciB1c2VzIHRvIHNwZWNpZnkgdGhlIGRldGFpbHMgb2YgYQorCSAqIG5ldyB7QGxpbmsgSWRlbnRpZmlhYmxlfSB0byBiZSBjcmVhdGVkLgorCSAqIAorCSAqIEBzZWUgI25ld0R1YmxpbkNvcmVQYWdlCisJICovCisJcHJvdGVjdGVkIE5ld0lkZW50aWZpYWJsZVBhZ2UgbmV3SWRlbnRpZmlhYmxlUGFnZSA9IG51bGw7CisKKwkvKioKKwkgKiBUaGUgc2Vjb25kIHBhZ2UgaW4gdGhlIHdpemFyZCB0aGF0IGEgdXNlciB1c2VzIHRvIHNwZWNpZnkgdGhlIGRldGFpbHMgb2YKKwkgKiB0aGUge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uRHVibGluQ29yZX0gbWV0YWRhdGEgYXNzb2NpYXRlZCB3aXRoIHRoZSB7QGxpbmsgSWRlbnRpZmlhYmxlfQorCSAqIGJlaW5nIGNyZWF0ZWQuCisJICogCisJICogQHNlZSAjbmV3SWRlbnRpZmlhYmxlUGFnZQorCSAqLworCXB1YmxpYyBEdWJsaW5Db3JlUGFnZSBuZXdEdWJsaW5Db3JlUGFnZTsKKworCS8qKgorCSAqIFRoaXMgaXMgdGhlIGNvbnRleHQgc2Vuc2l0aXZlIGhlbHAgY29udGV4dCBpZCBmb3IgdGhlIHdpemFyZAorCSAqLworCQorCXByb3RlY3RlZCBTdHJpbmcgaGVscENvbnRleHRJZDsKKwkKKwlwcm90ZWN0ZWQgU3RyaW5nIGdldEhlbHBDb250ZXh0SWQoKSB7CisJCXJldHVybiBoZWxwQ29udGV4dElkOworCX0KKworCXByb3RlY3RlZCB2b2lkIHNldEhlbHBDb250ZXh0SWQoU3RyaW5nIGhlbHBDb250ZXh0SWQpIHsKKwkJdGhpcy5oZWxwQ29udGV4dElkID0gaGVscENvbnRleHRJZDsKKwl9CisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2hXaXphcmQjaW5pdChvcmcuZWNsaXBzZS51aS5JV29ya2JlbmNoLAorCSAqICAgICAgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU3RydWN0dXJlZFNlbGVjdGlvbikKKwkgKi8KKwlwdWJsaWMgdm9pZCBpbml0KGZpbmFsIElXb3JrYmVuY2ggd29ya2JlbmNoLAorCQkJQFN1cHByZXNzV2FybmluZ3MoInVudXNlZCIpIGZpbmFsIElTdHJ1Y3R1cmVkU2VsZWN0aW9uIHNlbGVjdGlvbikgeworCQl0aGlzLndvcmtiZW5jaCA9IHdvcmtiZW5jaDsKKwkJc2V0V2luZG93VGl0bGUoZ2V0V2l6YXJkVGl0bGUoKSk7CisJCXNldEhlbHBBdmFpbGFibGUodHJ1ZSk7CisJfSAvLyBpbml0CisKKworCS8qKgorCSAqIENyZWF0ZSB0aGUge0BsaW5rIFdpemFyZH0ncyBwYWdlcy4KKwkgKiAKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLmpmYWNlLndpemFyZC5XaXphcmQjYWRkUGFnZXMoKQorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGFkZFBhZ2VzKCkgeworCQlzdXBlci5hZGRQYWdlcygpOworCQlzZXRGb3JjZVByZXZpb3VzQW5kTmV4dEJ1dHRvbnMoZmFsc2UpOworCQluZXdJZGVudGlmaWFibGVQYWdlID0gY3JlYXRlTmV3SWRlbnRpZmlhYmxlUGFnZSgpOworCQkvLyBXZXJlIHdlIHN1Y2Nlc3NmdWwgaW4gY3JlYXRpbmcgdGhlIHBhZ2U/CisJCWlmIChuZXdJZGVudGlmaWFibGVQYWdlID09IG51bGwpIHsKKwkJCS8vIE5vCisJCQlyZXR1cm47CisJCX0KKwkJbmV3RHVibGluQ29yZVBhZ2UgPSBjcmVhdGVEdWJsaW5Db3JlUGFnZSgpOworCQkvLyBXZXJlIHdlIHN1Y2Nlc3NmdWwgaW4gY3JlYXRpbmcgdGhlIHBhZ2U/CisJCWlmIChuZXdEdWJsaW5Db3JlUGFnZSA9PSBudWxsKSB7CisJCQkvLyBObworCQkJcmV0dXJuOworCQl9CisJCWFkZFBhZ2UobmV3SWRlbnRpZmlhYmxlUGFnZSk7CisJCWFkZFBhZ2UobmV3RHVibGluQ29yZVBhZ2UpOworCX0gLy8gYWRkUGFnZXMKKworCS8qKgorCSAqIEBwYXJhbSBwYWdlCisJICogICAgICAgICAgICB0aGUge0BsaW5rIElXaXphcmRQYWdlfSBwYWdlIGN1cnJlbnRseSBiZWluZyBkaXNwbGF5ZWQuCisJICogQHJldHVybiB0aGUgbmV4dCB7QGxpbmsgSVdpemFyZFBhZ2V9IHRvIGJlIGRpc3BsYXllZCB0byB0aGUgdXNlci4KKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgSVdpemFyZFBhZ2UgZ2V0TmV4dFBhZ2UoZmluYWwgSVdpemFyZFBhZ2UgcGFnZSkgeworCQlmaW5hbCBJV2l6YXJkUGFnZSBuZXh0UGFnZSA9IHN1cGVyLmdldE5leHRQYWdlKHBhZ2UpOworCQkvLyBEdWJsaW4gQ29yZSBuZXh0PworCQlpZiAobmV4dFBhZ2UgaW5zdGFuY2VvZiBEdWJsaW5Db3JlUGFnZSkgeworCQkJLy8gWWVzCisJCQkvLyBXZSBwcmUtcG9wdWxhdGUgc29tZSBvZiB0aGUgZmllbGRzIGluIHRoZSBEdWJsaW5Db3JlIHBhZ2Ugd2l0aAorCQkJLy8gdmFsdWVzIG9idGFpbmVkIGZyb20gdGhlIG5ld0lkZW50aWZhaWJsZVBhZ2UgdGhhdCB0aGUgdXNlciBoYXMKKwkJCS8vIGp1c3QgY29tcGxldGVkLiBUaGUgZXhhY3QgZGV0YWlscyBhcmUgc3BlY2lmaWMgdG8gdGhlIHR5cGUgb2YKKwkJCS8vIElkZW50aWZpYWJsZSBiZWluZyBjcmVhdGVkLgorCQkJZmluYWwgRHVibGluQ29yZVBhZ2UgZGNQYWdlID0gKER1YmxpbkNvcmVQYWdlKSBuZXh0UGFnZTsKKwkJCQorCQkJLy8gSkhLIFRPRE8gaXQgd291bGQgYmUgbmljZSB0byBhcHBlbmQgdGhlIG5hbWUgdG8gdGhlIHRpdGxlIGZpZWxkCisJCQkvLyBjb25zdHJ1Y3QgdGhlIHRpdGxlCisJCQkvKgorCQkJU3RyaW5nIHRpdGxlID0gZGNQYWdlLnRpdGxlVGV4dEZpZWxkLmdldFRleHQoKTsKKwkJCVN0cmluZ0J1aWxkZXIgc2I9IG5ldyBTdHJpbmdCdWlsZGVyKCk7CisJCQlpZigodGl0bGUgIT0gbnVsbCkmJih0aXRsZS5sZW5ndGgoKT49MSkpIHsKKwkJCQlzYi5hcHBlbmQodGl0bGUpOworCQkJfQorCQkJaWYoc2IubGVuZ3RoKCk+MSkgc2IuYXBwZW5kKCIgIik7CisJCQlzYi5hcHBlbmQoZ2V0U2VyaWFsaXphdGlvbkZpbGVOYW1lKCkpOworCQkJZGNQYWdlLnRpdGxlVGV4dEZpZWxkLnNldFRleHQoc2IudG9TdHJpbmcoKSk7CisJCQkqLworCQkJCisJCQkKKwkJCWRjUGFnZS52YWxpZC5zZXRUZXh0KG5ld0lkZW50aWZpYWJsZVBhZ2UuZ2V0RENWYWxpZERhdGVSYW5nZSgpKTsKKwkJCQorCQl9IC8vIGlmIER1YmxpbkNvcmVQYWdlCisJCXJldHVybiBuZXh0UGFnZTsKKwl9IC8vIGdldE5leHRQYWdlCisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLmpmYWNlLndpemFyZC5XaXphcmQjcGVyZm9ybUZpbmlzaCgpCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIGJvb2xlYW4gcGVyZm9ybUZpbmlzaCgpIHsKKwkJLy8gVGhpcyBpcyBleGVjdXRlZCB3aGVuIHRoZSB1c2VyIGNsaWNrcyBvbiB0aGUgIkZpbmlzaCIgYnV0dG9uIG9mIHRoZQorCQkvLyB3aXphcmQuIEl0IHVzZXMgdGhlIGRldGFpbHMgaW4gdGhlIHR3byBwYWdlcyAobmV3SWRlbnRpZmlhYmxlUGFnZSBhbmQKKwkJLy8gbmV3RHVibGluQ29yZVBhZ2UpIHRvIGNyZWF0ZSB0aGUgSWRlbnRpZmlhYmxlLiBJdCBzZXJpYWxpemVzIHRoZQorCQkvLyBJZGVudGlmaWFibGUgaW4gYSBmaWxlIGluIHRoZSBwcm9qZWN0IHRoYXQgd2FzIHNlbGVjdGVkIG9uIHRoZQorCQkvLyBuZXdJZGVudGlmYWJsZVBhZ2UuCisJCWZpbmFsIGJvb2xlYW4gcmV0VmFsdWUgPSB0cnVlOworCQl0cnkgeworCQkJLy8gVGhlIGZpbGVVUkkgc3BlY2lmaWVzIHdoZXJlIHRoZSBJZGVudGlmaWFibGUgd2lsbCBiZSBzZXJpYWxpemVkCisJCQlmaW5hbCBVUkkgc2VyaWFsaXphdGlvblVSSSA9IGNyZWF0ZVNlcmlhbGl6YXRpb25VUkkoKTsKKworCQkJLy8gQ3JlYXRpbmcgdGhlIElkZW50aWZpYWJsZSBjYW4gcG90ZW50aWFsbHkgdGFrZSBhIHdoaWxlIHNvIHdlCisJCQkvLyB3cmFwIHRoZSBjYWxsIHRvIGNyZWF0ZUlkZW50aWZhYmxlIGluIGFuICJvcGVyYXRpb24iIHNvIHRoYXQgaXQKKwkJCS8vIGNhbiBiZSBydW4gaW4gdGhlIGJhY2tncm91bmQuCisJCQlmaW5hbCBXb3Jrc3BhY2VNb2RpZnlPcGVyYXRpb24gb3AgPSBuZXcgV29ya3NwYWNlTW9kaWZ5T3BlcmF0aW9uKCkgeworCQkJCUBPdmVycmlkZQorCQkJCXByb3RlY3RlZCB2b2lkIGV4ZWN1dGUoZmluYWwgSVByb2dyZXNzTW9uaXRvciBtb25pdG9yKSB7CisJCQkJCWNyZWF0ZUlkZW50aWZpYWJsZSgKKwkJCQkJCQltb25pdG9yID09IG51bGwgPyBuZXcgTnVsbFByb2dyZXNzTW9uaXRvcigpCisJCQkJCQkJCQk6IG1vbml0b3IsIHNlcmlhbGl6YXRpb25VUkkpOworCQkJCX0gLy8gZXhlY3V0ZQorCQkJfTsgLy8gV29ya3NwYWNlTW9kaWZ5T3BlcmF0aW9uCisKKwkJCS8vIFRoZSBjb250YWluZXIgaXMgYSBJUnVubmFibGVDb250ZXh0LCB3ZSB1c2UgaXQgdG8gZXhlY3V0ZSB0aGUKKwkJCS8vIG9wZXJhdGlvbiB3ZSBjcmVhdGVkIGFib3ZlLiBUaGUgZmlyc3QgYXJndW1lbnQgb2YgZmFsc2UgaW5kaWNhdGVzCisJCQkvLyBub3QgdG8gImZvcmsiLCB0aGUgc2Vjb25kIG9mICJ0cnVlIiBpbmRpY2F0ZXMgdGhhdCB0aGUgb3BlcmF0aW9uCisJCQkvLyBpcyBjYW5jZWxhYmxlLgorCQkJZ2V0Q29udGFpbmVyKCkucnVuKGZhbHNlLCB0cnVlLCBvcCk7CisKKwkJCS8vIFJlZnJlc2ggdGhlIHByb2plY3Qgc28gdGhhdCB0aGUgbmV3IHNlcmlhbGl6ZWQgZmlsZSB3aWxsIGRpc3BsYXkKKwkJCXRyeSB7CisJCQkJbmV3SWRlbnRpZmlhYmxlUGFnZS5nZXRTZWxlY3RlZFByb2plY3QoKS5yZWZyZXNoTG9jYWwoCisJCQkJCQlJUmVzb3VyY2UuREVQVEhfSU5GSU5JVEUsIG51bGwpOworCQkJfSBjYXRjaCAoZmluYWwgQ29yZUV4Y2VwdGlvbiBlKSB7CisJCQkJLy8gSWdub3JlCisJCQl9CisJCQkvLyBOb3cgb3BlbiB1cCB0aGUgYXBwcm9wcmlhdGUgZWRpdG9yIGZvciB0aGUgbmV3IElkZW50aWZpYWJsZS4KKy8vCQkJcmV0dXJuIENvcmVFZGl0b3JBZHZpc29yLm9wZW5FZGl0b3Iod29ya2JlbmNoLCBDb21tb25QbHVnaW4KKy8vCQkJCQkuYXNMb2NhbFVSSShzZXJpYWxpemF0aW9uVVJJKSk7CisJCQlyZXR1cm4gQ29yZUVkaXRvckFkdmlzb3Iub3BlbkVkaXRvcih3b3JrYmVuY2gsIHNlcmlhbGl6YXRpb25VUkkpOworCisJCX0gLy8gdHJ5CisJCWNhdGNoIChmaW5hbCBJbnZvY2F0aW9uVGFyZ2V0RXhjZXB0aW9uIGUpIHsKKwkJCUFjdGl2YXRvci5sb2dFcnJvcihBY3RpdmF0b3IuUExVR0lOX0lELCBlKTsKKwkJfSBjYXRjaCAoZmluYWwgSW50ZXJydXB0ZWRFeGNlcHRpb24gZSkgeworCQkJLy8gVGhpcyBnZXRzIHRocm93biBpZiB0aGUgb3BlcmF0aW9uIGlzIGNhbmNlbGVkCisJCQlBY3RpdmF0b3IubG9nSW5mb3JtYXRpb24oQWN0aXZhdG9yLlBMVUdJTl9JRCwgZSk7CisJCX0KKwkJcmV0dXJuIHJldFZhbHVlOworCisJfSAvLyBwZXJmb3JtRmluaXNoCisKKwkvKioKKwkgKiBDcmVhdGUgdGhlIHNwZWNpZmljIHtAbGluayBJZGVudGlmaWFibGV9IGFzIHNwZWNpZmllZCBieSB0aGUgY29udGVudHMgb2YKKwkgKiB0aGUgd2l6YXJkIHBhZ2VzIGFuZCBzZXJpYWxpemUgaXQgaW4gdGhlIGZpbGUgc3BlY2lmaWVkIGJ5IHRoZQorCSAqIHtAbGluayBVUkl9IHJldHVybmVkIGJ5IHtAbGluayAjY3JlYXRlU2VyaWFsaXphdGlvblVSSSgpfS4KKwkgKiAKKwkgKiBAcGFyYW0gbW9uaXRvcgorCSAqICAgICAgICAgICAgYSB7QGxpbmsgSVByb2dyZXNzTW9uaXRvcn0gdG8gdXNlIHRvIHJlcG9ydCBvdXIgcHJvZ3Jlc3MKKwkgKiBAcGFyYW0gc2VyaWFsaXphdGlvblVSSQorCSAqICAgICAgICAgICAgdGhlIHtAbGluayBVUkl9IG9mIHRoZSBzZXJpYWxpemF0aW9uIGZpbGUKKwkgKiBAc2VlICNwZXJmb3JtRmluaXNoKCkKKwkgKi8KKwl2b2lkIGNyZWF0ZUlkZW50aWZpYWJsZShJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IsIGZpbmFsIFVSSSBzZXJpYWxpemF0aW9uVVJJKSB7CisJCS8vIFdhcyBhIHByb2dyZXNzIG1vbml0b3Igc3BlY2lmaWVkPworCQlpZiAobW9uaXRvciA9PSBudWxsKSB7CisJCQkvLyBObworCQkJbW9uaXRvciA9IG5ldyBOdWxsUHJvZ3Jlc3NNb25pdG9yKCk7CisJCX0KKworCQltb25pdG9yLmJlZ2luVGFzayhNZXNzYWdlcy5nZXRTdHJpbmcoIk5JZFdpei5jcmVhdGluZyIpLCAxMDApOyAvLyROT04tTkxTLTEkCisJCXRyeSB7CisJCQkvLyBDcmVhdGUgdGhlIElkZW50aWZpYWJsZSBmcm9tIHRoZSBjb250ZW50cyBvZiB0aGUgV2l6YXJkCisJCQkvLyBQYWdlcy4KKwkJCWZpbmFsIElkZW50aWZpYWJsZSBpZGVudGlmaWFibGUgPSBjcmVhdGVJZGVudGlmaWFibGUoKTsKKwkJCWlkZW50aWZpYWJsZS5zZXRVUkkoc2VyaWFsaXphdGlvblVSSSk7CisJCQlhc3NlcnQgaWRlbnRpZmlhYmxlLnNhbmUoKTsKKworCQkJVXRpbGl0eS5zZXJpYWxpemVJZGVudGlmaWFibGUoaWRlbnRpZmlhYmxlLCBzZXJpYWxpemF0aW9uVVJJKTsKKwkJfSBjYXRjaCAoZmluYWwgSU9FeGNlcHRpb24gZSkgeworCQkJQWN0aXZhdG9yLmxvZ0Vycm9yKE1lc3NhZ2VzLmdldFN0cmluZygiTklkV2l6LnNhdmVFcnIiKSwgZSk7IC8vJE5PTi1OTFMtMSQKKwkJfSBjYXRjaCAoZmluYWwgRXhjZXB0aW9uIGUpIHsKKwkJCUFjdGl2YXRvci5sb2dFcnJvcihNZXNzYWdlcy5nZXRTdHJpbmcoIk5JZFdpei5zYXZlRXJyIiksIGUpOyAvLyROT04tTkxTLTEkCisJCX0gZmluYWxseSB7CisJCQltb25pdG9yLmRvbmUoKTsKKwkJfQorCX0gLy8gY3JlYXRlSWRlbnRpZmlhYmxlCisKKwkvKioKKwkgKiBDcmVhdGUgdGhlIHtAbGluayBVUkl9IHRvIGJlIHVzZWQgdG8gc2VyaWFsaXplIHRoZSB7QGxpbmsgSWRlbnRpZmlhYmxlfQorCSAqIGNyZWF0ZWQgaW4ge0BsaW5rICNwZXJmb3JtRmluaXNoKCl9LiBUaGUgcGF0aCBpbiB0aGUge0BsaW5rIFVSSX0gd2lsbAorCSAqIHBsYWNlIHRoZSBzZXJpYWxpemF0aW9uIGZpbGUgaW50byB0aGUgcHJvamVjdCByZXR1cm5lZCBieQorCSAqIHtAbGluayAjZ2V0U2VsZWN0ZWRQcm9qZWN0KCl9LiBUaGUgbmFtZSBvZiB0aGUgZm9sZGVyIGluIHRoZSBwcm9qZWN0IGlzCisJICogc3VwcGxpZWQgYnkge0BsaW5rICNnZXRTZXJpYWxpemF0aW9uRm9sZGVyTmFtZSgpfSB3aGljaCBpcyBvdmVycmlkZGVuIGJ5CisJICogYSBzdWJjbGFzcy4gVGhlIG5hbWUgb2YgdGhlIGZpbGUgYW5kIHRoZSBmaWxlIGV4dGVuc2lvbiBhcmUgcHJvdmlkZWQgYnkKKwkgKiB0aGUgbWV0aG9kcyB7QGxpbmsgI2dldFNlcmlhbGl6YXRpb25GaWxlTmFtZSgpfSBhbmQKKwkgKiB7QGxpbmsgI2dldFNlcmlhbGl6YXRpb25GaWxlTmFtZUV4dGVuc2lvbigpfSwgYm90aCBvZiB3aGljaCBhcmUKKwkgKiBpbXBsZW1lbnRlZCBieSBhIHN1YmNsYXNzLgorCSAqIAorCSAqIEByZXR1cm4gdGhlIHtAbGluayBVUkl9IHRoYXQgd2lsbCBiZSB1c2VkIHRvIHNlcmlhbGl6ZSB0aGUKKwkgKiAgICAgICAgIHtAbGluayBJZGVudGlmaWFibGV9IGNyZWF0ZWQgaW4ge0BsaW5rICNwZXJmb3JtRmluaXNoKCl9LgorCSAqIAorCSAqIEBzZWUgI2NyZWF0ZUlkZW50aWZpYWJsZShJUHJvZ3Jlc3NNb25pdG9yLCBVUkkpCisJICovCisJcHJpdmF0ZSBVUkkgY3JlYXRlU2VyaWFsaXphdGlvblVSSSgpIHsKKworCQlmaW5hbCBTdHJpbmdCdWlsZGVyIHNiID0gbmV3IFN0cmluZ0J1aWxkZXIobmV3SWRlbnRpZmlhYmxlUGFnZQorCQkJCS5nZXRTZWxlY3RlZFByb2plY3QoKS5nZXROYW1lKCkpOworCQlzYi5hcHBlbmQoIi8iKTsgLy8kTk9OLU5MUy0xJAorCQlzYi5hcHBlbmQoZ2V0U2VyaWFsaXphdGlvbkZvbGRlck5hbWUoKSk7CisJCXNiLmFwcGVuZCgiLyIpOyAvLyROT04tTkxTLTEkCisJCXNiLmFwcGVuZChnZXRTZXJpYWxpemF0aW9uRmlsZU5hbWUoKSk7CisJCXNiLmFwcGVuZCgiLiIpOyAvLyROT04tTkxTLTEkCisJCXNiLmFwcGVuZChnZXRTZXJpYWxpemF0aW9uRmlsZU5hbWVFeHRlbnNpb24oKSk7CisKKwkJcmV0dXJuIFVSSS5jcmVhdGVQbGF0Zm9ybVJlc291cmNlVVJJKHNiLnRvU3RyaW5nKCksIHRydWUpOworCX0gLy8gY3JlYXRlU2VyaWFsaXphdGlvblVSSQorCisJLyoqCisJICogQHJldHVybiB0aGUgbmFtZSBvZiB0aGUgc2VyaWFsaXphdGlvbiBmaWxlIGZvciB0aGUge0BsaW5rIElkZW50aWZpYWJsZX0KKwkgKiAgICAgICAgIGVudGVyZWQgYnkgdGhlIHVzZXIgb24ge0BsaW5rICNuZXdJZGVudGlmaWFibGVQYWdlfS4KKwkgKi8KKwlwcml2YXRlIFN0cmluZyBnZXRTZXJpYWxpemF0aW9uRmlsZU5hbWUoKSB7CisJCXJldHVybiBuZXdJZGVudGlmaWFibGVQYWdlLnNlcmlhbGl6YXRpb25GaWxlTmFtZUZpZWxkLmdldFRleHQoKTsKKwl9IC8vIGdldFNlcmlhbGl6YXRpb25GaWxlTmFtZQorCisJLyoqCisJICogQHJldHVybiB0aGUgdGl0bGUgb2YgdGhlIFdpemFyZCBmb3IgdXNlIGFzIHRoZSB0aXRsZSBvZiB0aGUgd2luZG93LgorCSAqLworCWFic3RyYWN0IHByb3RlY3RlZCBTdHJpbmcgZ2V0V2l6YXJkVGl0bGUoKTsKKworCS8qKgorCSAqIFRoaXMgbWV0aG9kIGlzIGltcGxlbWVudGVkIGJ5IHN1YmNsYXNzZXMgdG8gY3JlYXRlIGEge0BsaW5rIFdpemFyZFBhZ2V9CisJICogdGhhdCBpcyBzcGVjaWZpYyB0byB0aGUgdHlwZSBvZiB7QGxpbmsgSWRlbnRpZmlhYmxlfSB0aGF0IGlzIGJlaW5nCisJICogY3JlYXRlZC4KKwkgKiAKKwkgKiBAcmV0dXJuIHRoZSBwYWdlIHVzZWQgdG8gc3BlY2lmeSB0aGUgbmV3IHtAbGluayBJZGVudGlmaWFibGV9IHRvIGNyZWF0ZS4KKwkgKiBAc2VlICNjcmVhdGVEdWJsaW5Db3JlUGFnZSgpCisJICovCisJYWJzdHJhY3QgcHJvdGVjdGVkIE5ld0lkZW50aWZpYWJsZVBhZ2UgY3JlYXRlTmV3SWRlbnRpZmlhYmxlUGFnZSgpOworCisJLyoqCisJICogVGhpcyBtZXRob2QgaXMgaW1wbGVtZW50ZWQgYnkgc3ViY2xhc3NlcyB0byBjcmVhdGUgYQorCSAqIHtAbGluayBEdWJsaW5Db3JlUGFnZX0gdGhhdCBpcyBzcGVjaWZpYyB0byB0aGUgdHlwZSBvZgorCSAqIHtAbGluayBJZGVudGlmaWFibGV9IHRoYXQgaXMgYmVpbmcgY3JlYXRlZC4gVHlwaWNhbGx5LCB0aGUgbWV0aG9kIHdpbGwKKwkgKiBjcmVhdGUgYSB7QGxpbmsgRHVibGluQ29yZVBhZ2V9IHdpdGggc29tZSBvZiB0aGUgZmllbGRzIHByZS1wb3B1bGF0ZWQKKwkgKiB3aXRoIHZhbHVlcyBzcGVjaWZpYyB0byB0aGUge0BsaW5rIElkZW50aWZpYWJsZX0uCisJICogCisJICogQHJldHVybiBhIHByZS1wb3B1bGF0ZWQge0BsaW5rIER1YmxpbkNvcmVQYWdlfS4KKwkgKiBAc2VlICNjcmVhdGVOZXdJZGVudGlmaWFibGVQYWdlKCkKKwkgKi8KKwlhYnN0cmFjdCBwcm90ZWN0ZWQgRHVibGluQ29yZVBhZ2UgY3JlYXRlRHVibGluQ29yZVBhZ2UoKTsKKworCS8qKgorCSAqIFRoaXMgbWV0aG9kIGlzIGltcGxlbWVudGVkIGJ5IHN1YmNsYXNzZXMgdG8gY3JlYXRlIHRoZSBzcGVjaWZpYyB0eXBlIG9mCisJICoge0BsaW5rIElkZW50aWZpYWJsZX0gdGhhdCB0aGUge0BsaW5rICNuZXdJZGVudGlmaWFibGVQYWdlfSB0aGF0IHRoZXkKKwkgKiByZXR1cm5lZCBmcm9tIHtAbGluayAjY3JlYXRlTmV3SWRlbnRpZmlhYmxlUGFnZSgpfSBzcGVjaWZpZXMuCisJICogCisJICogQHJldHVybiB0aGUgc3BlY2lmaWMgdHlwZSBvZiB7QGxpbmsgSWRlbnRpZmlhYmxlfSBjcmVhdGVkIGJ5IGEgc3ViY2xhc3NlcworCSAqICAgICAgICAgb2YgdGhpcyBjbGFzcy4KKwkgKi8KKwlhYnN0cmFjdCBwcm90ZWN0ZWQgSWRlbnRpZmlhYmxlIGNyZWF0ZUlkZW50aWZpYWJsZSgpOworCisJLyoqCisJICogQHJldHVybiB0aGUgbmFtZSBvZiB0aGUgZm9sZGVyIHVuZGVyIHRoZSBzZWxlY3RlZCBwcm9qZWN0IHRoYXQgdGhlCisJICogICAgICAgICB7QGxpbmsgSWRlbnRpZmlhYmxlfSBjcmVhdGVkIGJ5CisJICogICAgICAgICB7QGxpbmsgI2NyZWF0ZUlkZW50aWZpYWJsZShJUHJvZ3Jlc3NNb25pdG9yLCBVUkkpfSBzaG91bGQgYmUKKwkgKiAgICAgICAgIHNlcmlhbGl6ZWQgaW4uCisJICogQHNlZSAjZ2V0U2VsZWN0ZWRQcm9qZWN0KCkKKwkgKiBAc2VlICNjcmVhdGVTZXJpYWxpemF0aW9uVVJJKCkKKwkgKi8KKwlhYnN0cmFjdCBwcm90ZWN0ZWQgU3RyaW5nIGdldFNlcmlhbGl6YXRpb25Gb2xkZXJOYW1lKCk7CisKKwkvKioKKwkgKiBAcmV0dXJuIHRoZSBmaWxlIGV4dGVuc2lvbiBvZiB0aGUgc2VyaWFsaXphdGlvbiBmaWxlIG9mIHRoZQorCSAqICAgICAgICAge0BsaW5rIElkZW50aWZpYWJsZX0gY3JlYXRlZCBieQorCSAqICAgICAgICAge0BsaW5rICNjcmVhdGVJZGVudGlmaWFibGUoSVByb2dyZXNzTW9uaXRvciwgVVJJKX0uIFR5cGljYWxseSwKKwkgKiAgICAgICAgIHRoaXMgaXMgdGhlIEVNRiAiZU5BTUUiIG9mIHRoZSBtb2RlbCBpbiB3aGljaCB0aGUKKwkgKiAgICAgICAgIHtAbGluayBJZGVudGlmaWFibGV9IGlzIGRlZmluZWQuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguR3JhcGhQYWNrYWdlI2VOQU1FCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuTW9kZWxQYWNrYWdlI2VOQU1FCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2NlbmFyaW8uU2NlbmFyaW9QYWNrYWdlI2VOQU1FCisJICogQHNlZSAgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmV4cGVyaW1lbnQuRXhwZXJpbWVudFBhY2thZ2UjZU5BTUUKKwkgKi8KKwlhYnN0cmFjdCBwcm90ZWN0ZWQgU3RyaW5nIGdldFNlcmlhbGl6YXRpb25GaWxlTmFtZUV4dGVuc2lvbigpOworCisJLyoqCisJICogUnVuIHRoZSBXaXphcmQgZnJvbSBhbiBBY3Rpb24KKwkgKi8KKwlhYnN0cmFjdCBwcm90ZWN0ZWQgc3RhdGljIGNsYXNzIE5ld0lkZW50aWZpYWJsZVdpemFyZEFjdGlvbiBleHRlbmRzCisJCQlXb3JrYmVuY2hXaW5kb3dBY3Rpb25EZWxlZ2F0ZSB7CisJCXByb3RlY3RlZCB2b2lkIHJ1bihmaW5hbCBOZXdJZGVudGlmaWFibGVXaXphcmQgd2l6YXJkKSB7CisJCQl3aXphcmQuaW5pdChnZXRXaW5kb3coKS5nZXRXb3JrYmVuY2goKSwgU3RydWN0dXJlZFNlbGVjdGlvbi5FTVBUWSk7CisJCQlmaW5hbCBXaXphcmREaWFsb2cgd2l6YXJkRGlhbG9nID0gbmV3IFdpemFyZERpYWxvZyhnZXRXaW5kb3coKQorCQkJCQkuZ2V0U2hlbGwoKSwgd2l6YXJkKTsKKwkJCXdpemFyZERpYWxvZy5vcGVuKCk7CisJCX0gLy8gcnVuCisJfSAvLyBOZXdJZGVudGlmaWFibGVXaXphcmRBY3Rpb24KKworfSAvLyBOZXdJZGVudGlmaWFibGVXaXphcmQKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS93aXphcmRzL05ld01vZGVsV2l6YXJkLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvd2l6YXJkcy9OZXdNb2RlbFdpemFyZC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJhZjllNjAKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvd2l6YXJkcy9OZXdNb2RlbFdpemFyZC5qYXZhCkBAIC0wLDAgKzEsMTU5IEBACisvLyBOZXdNb2RlbFdpemFyZC5qYXZhCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0udWkud2l6YXJkczsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNywgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLmNvbW1hbmRzLkFic3RyYWN0SGFuZGxlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLmNvbW1hbmRzLkV4ZWN1dGlvbkV2ZW50OworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUuY29tbWFuZHMuRXhlY3V0aW9uRXhjZXB0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUuY29tbWFuZHMuSUhhbmRsZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5TdHJ1Y3R1cmVkU2VsZWN0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLndpemFyZC5XaXphcmREaWFsb2c7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLlNURU1VUkk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5JZGVudGlmaWFibGU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLk1vZGVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5Nb2RlbEZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLk1vZGVsUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuU1dUOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5JV29ya2JlbmNoV2luZG93OworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLlBsYXRmb3JtVUk7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuaGFuZGxlcnMuSGFuZGxlclV0aWw7CisKKy8qKgorICogVGhpcyBjbGFzcyBpcyBhIHtAbGluayBOZXdJZGVudGlmaWFibGVXaXphcmR9IGZvciB0aGF0IGNyZWF0ZXMgbmV3IFNURU0KKyAqIHtAbGluayBNb2RlbH1zLgorICovCitwdWJsaWMgY2xhc3MgTmV3TW9kZWxXaXphcmQgZXh0ZW5kcyBOZXdJZGVudGlmaWFibGVXaXphcmQgeworCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnVpLndpemFyZHMuTmV3SWRlbnRpZmlhYmxlV2l6YXJkI2dldFdpemFyZFRpdGxlKCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgU3RyaW5nIGdldFdpemFyZFRpdGxlKCkgeworCQlyZXR1cm4gTWVzc2FnZXMuZ2V0U3RyaW5nKCJOTW9kZWxXaXoud2l6YXJkX3RpdGxlIik7IC8vJE5PTi1OTFMtMSQKKwl9IC8vIGdldFdpemFyZFRpdGxlCisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0udWkud2l6YXJkcy5OZXdJZGVudGlmaWFibGVXaXphcmQjY3JlYXRlTmV3SWRlbnRpZmlhYmxlUGFnZSgpCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIE5ld0lkZW50aWZpYWJsZVBhZ2UgY3JlYXRlTmV3SWRlbnRpZmlhYmxlUGFnZSgpIHsKKwkJdGhpcy5zZXRIZWxwQ29udGV4dElkKCJvcmcuZWNsaXBzZS5zdGVtLmRvYy5uZXdtb2RlbF9jb250ZXh0aWQiKTsKKwkJcmV0dXJuIG5ldyBOZXdNb2RlbFBhZ2UoKTsKKwl9IC8vIGNyZWF0ZU5ld0lkZW50aWZpYWJsZVBhZ2UKKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS51aS53aXphcmRzLk5ld0lkZW50aWZpYWJsZVdpemFyZCNjcmVhdGVEdWJsaW5Db3JlUGFnZSgpCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIER1YmxpbkNvcmVQYWdlIGNyZWF0ZUR1YmxpbkNvcmVQYWdlKCkgeworCQlyZXR1cm4gbmV3IER1YmxpbkNvcmVQYWdlKCkgeworCQkJQE92ZXJyaWRlCisJCQlwcm90ZWN0ZWQgdm9pZCBpbml0aWFsaXplRENBdHRyaWJ1dGVzKCkgeworCQkJCXN1cGVyLmluaXRpYWxpemVEQ0F0dHJpYnV0ZXMoKTsKKwkKKwkJCQlmb3JtYXQuc2V0VGV4dChNb2RlbFBhY2thZ2UuZU5TX1VSSSk7CisJCQkJZm9ybWF0LnNldEVuYWJsZWQoZmFsc2UpOworCQkJCXR5cGUuc2V0VGV4dChTVEVNVVJJLk1PREVMX1RZUEVfVVJJLnRvU3RyaW5nKCkpOworCQkJCXR5cGUuc2V0RW5hYmxlZChmYWxzZSk7CisJCQkJCisJCQkJdGl0bGVUZXh0RmllbGQuc2V0VGV4dChNZXNzYWdlcy5nZXRTdHJpbmcoImRjX3RpdGxlX21vZGVsIikpOworCQkJCXNvdXJjZS5zZXRUZXh0KE1lc3NhZ2VzLmdldFN0cmluZygiZGNfc291cmNlX21vZGVsIikpOworCQkJCWRlc2NyaXB0aW9uVGV4dEZpZWxkLnNldFRleHQoTWVzc2FnZXMuZ2V0U3RyaW5nKCJkY19kZXNjX21vZGVsIikpOworCQkJCQkJCisJCQl9CisJCX07CisJfSAvLyBjcmVhdGVEdWJsaW5Db3JlUGFnZQorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnVpLndpemFyZHMuTmV3SWRlbnRpZmlhYmxlV2l6YXJkI2NyZWF0ZUlkZW50aWZpYWJsZSgpCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIElkZW50aWZpYWJsZSBjcmVhdGVJZGVudGlmaWFibGUoKSB7CisJCWZpbmFsIE1vZGVsIHJldFZhbHVlID0gTW9kZWxGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVNb2RlbCgpOworCQlyZXRWYWx1ZS5zZXREdWJsaW5Db3JlKG5ld0R1YmxpbkNvcmVQYWdlLmNyZWF0ZUR1YmxpbkNvcmUoKSk7CisJCXJldHVybiByZXRWYWx1ZTsKKwl9IC8vIGNyZWF0ZVNwZWNpZmljSWRlbnRpZmlhYmxlCisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0udWkud2l6YXJkcy5OZXdJZGVudGlmaWFibGVXaXphcmQjZ2V0U2VyaWFsaXphdGlvbkZvbGRlck5hbWUoKQorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCBTdHJpbmcgZ2V0U2VyaWFsaXphdGlvbkZvbGRlck5hbWUoKSB7CisJCXJldHVybiBOZXdTVEVNUHJvamVjdFdpemFyZC5NT0RFTFNfRk9MREVSX05BTUU7CisJfQorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnVpLndpemFyZHMuTmV3SWRlbnRpZmlhYmxlV2l6YXJkI2dldFNlcmlhbGl6YXRpb25GaWxlTmFtZUV4dGVuc2lvbigpCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIFN0cmluZyBnZXRTZXJpYWxpemF0aW9uRmlsZU5hbWVFeHRlbnNpb24oKSB7CisJCXJldHVybiBNb2RlbFBhY2thZ2UuZU5BTUU7CisJfQorCisJcHJvdGVjdGVkIHN0YXRpYyBjbGFzcyBOZXdNb2RlbFBhZ2UgZXh0ZW5kcyBOZXdJZGVudGlmaWFibGVQYWdlIHsKKworCQkvKioKKwkJICogRGVmYXVsdCBDb25zdHJ1Y3RvcgorCQkgKi8KKwkJcHJvdGVjdGVkIE5ld01vZGVsUGFnZSgpIHsKKwkJCXN1cGVyKE1lc3NhZ2VzLmdldFN0cmluZygiTk1vZGVsV2l6LnBhZ2VfdGl0bGUiKSk7IC8vJE5PTi1OTFMtMSQKKwkJCXNldFRpdGxlKE1lc3NhZ2VzLmdldFN0cmluZygiTk1vZGVsV2l6LnBhZ2VfdGl0bGUiKSk7IC8vJE5PTi1OTFMtMSQKKwkJCXNldERlc2NyaXB0aW9uKE1lc3NhZ2VzLmdldFN0cmluZygiTk1vZGVsV2l6LnBhZ2VfZGVzY3JpcHRpb24iKSk7IC8vJE5PTi1OTFMtMSQKKwkJfSAvLyBOZXdNb2RlbFBhZ2UKKworCQlAT3ZlcnJpZGUKKwkJcHJvdGVjdGVkIENvbXBvc2l0ZSBjcmVhdGVTcGVjaWZpY0NvbXBvc2l0ZShmaW5hbCBDb21wb3NpdGUgcGFyZW50KSB7CisJCQlQbGF0Zm9ybVVJLmdldFdvcmtiZW5jaCgpLmdldEhlbHBTeXN0ZW0oKS5zZXRIZWxwKHBhcmVudCwgIm9yZy5lY2xpcHNlLnN0ZW0uZG9jLm5ld21vZGVsX2NvbnRleHRpZCIpOworCQkJcmV0dXJuIG5ldyBDb21wb3NpdGUocGFyZW50LCBTV1QuTk9ORSk7CisJCX0gLy8gY3JlYXRlU3BlY2lmaWNDb21wb3NpdGUKKwkJCisJCS8qKgorCQkgKiBUaGlzIG1vdmVkIHRvICBpbml0aWFsaXplRENBdHRyaWJ1dGVzKCkKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnVpLndpemFyZHMuTmV3SWRlbnRpZmlhYmxlV2l6YXJkLk5ld0lkZW50aWZpYWJsZVBhZ2UjZ2V0RENEZXNjcmlwdGlvbigpCisJCSAqLworCQlAT3ZlcnJpZGUKKwkJcHJvdGVjdGVkIFN0cmluZyBnZXREQ0Rlc2NyaXB0aW9uKCkgeworCQkJLy8gTGVhdmUgZGVzY3JpcHRpb24vdGl0bGUgYmxhbmsKKwkJCXJldHVybiAiIjsKKy8vCQkJcmV0dXJuIE1lc3NhZ2VGb3JtYXQuZm9ybWF0KE1lc3NhZ2VzCisvLwkJCQkJLmdldFN0cmluZygiTk1vZGVsV2l6LkRDX0RFU0NSSVBUSU9OIiksCisvLwkJCQkJbmV3IE9iamVjdFtdIHsgc2VyaWFsaXphdGlvbkZpbGVOYW1lRmllbGQuZ2V0VGV4dCgpIH0pOworCQl9IC8vIGdldERDRGVzY3JpcHRpb24KKworCX0gLy8gTmV3TW9kZWxQYWdlCisKKwkvKioKKwkgKiBUaGlzIGNsYXNzIGlzIGEge0BsaW5rIElIYW5kbGVyfSBmb3IgdGhlIGNvbW1hbmQgdGhhdCBjcmVhdGVzIGEKKwkgKiB7QGxpbmsgTmV3TW9kZWxXaXphcmR9CisJICovCisJcHVibGljIHN0YXRpYyBjbGFzcyBOZXdNb2RlbFdpemFyZENvbW1hbmRIYW5kbGVyIGV4dGVuZHMgQWJzdHJhY3RIYW5kbGVyCisJCQlpbXBsZW1lbnRzIElIYW5kbGVyIHsKKworCQkvKioKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5jb3JlLmNvbW1hbmRzLkFic3RyYWN0SGFuZGxlciNleGVjdXRlKG9yZy5lY2xpcHNlLmNvcmUuY29tbWFuZHMuRXhlY3V0aW9uRXZlbnQpCisJCSAqLworCQlwdWJsaWMgT2JqZWN0IGV4ZWN1dGUoZmluYWwgRXhlY3V0aW9uRXZlbnQgZXhlY3V0aW9uRXZlbnQpCisJCQkJdGhyb3dzIEV4ZWN1dGlvbkV4Y2VwdGlvbiB7CisJCQlmaW5hbCBJV29ya2JlbmNoV2luZG93IHdpbmRvdyA9IEhhbmRsZXJVdGlsCisJCQkJCS5nZXRBY3RpdmVXb3JrYmVuY2hXaW5kb3dDaGVja2VkKGV4ZWN1dGlvbkV2ZW50KTsKKwkJCWZpbmFsIE5ld01vZGVsV2l6YXJkIHdpemFyZCA9IG5ldyBOZXdNb2RlbFdpemFyZCgpOworCQkJd2l6YXJkLmluaXQod2luZG93LmdldFdvcmtiZW5jaCgpLCBTdHJ1Y3R1cmVkU2VsZWN0aW9uLkVNUFRZKTsKKwkJCWZpbmFsIFdpemFyZERpYWxvZyB3aXphcmREaWFsb2cgPSBuZXcgU1RFTVdpemFyZERpYWxvZyh3aW5kb3cKKwkJCQkJLmdldFNoZWxsKCksIHdpemFyZCk7CisJCQl3aXphcmREaWFsb2cub3BlbigpOworCQkJcmV0dXJuIG51bGw7CisJCX0gLy8gZXhlY3V0ZQorCX0gLy8gTmV3TW9kZWxXaXphcmRDb21tYW5kSGFuZGxlcgorCit9IC8vIE5ld01vZGVsV2l6YXJkCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvd2l6YXJkcy9OZXdNb2RpZmllclBhZ2UuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS93aXphcmRzL05ld01vZGlmaWVyUGFnZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE5ZDkxNWQKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvd2l6YXJkcy9OZXdNb2RpZmllclBhZ2UuamF2YQpAQCAtMCwwICsxLDY3OCBAQAorLy8gTmV3TW9kaWZpZXJQYWdlLmphdmEKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS51aS53aXphcmRzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGphdmEudGV4dC5NZXNzYWdlRm9ybWF0OworaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRVJlZmVyZW5jZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRVN0cnVjdHVyYWxGZWF0dXJlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FY29yZVBhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuQ29tcG9zZWRBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbVByb3BlcnR5RGVzY3JpcHRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbVByb3BlcnR5U291cmNlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uQ29tbW9uUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLklkZW50aWZpYWJsZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguR3JhcGhQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5MYWJlbFZhbHVlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5GZWF0dXJlTW9kaWZpZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLk5PUE1vZGlmaWVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5SYW5nZU1vZGlmaWVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5TZXF1ZW5jZU1vZGlmaWVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5TaW5nbGVWYWx1ZU1vZGlmaWVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udWkuYWRhcHRlcnMuZmVhdHVyZW1vZGlmaWVyLkVTdHJ1Y3R1cmFsRmVhdHVyZUZlYXR1cmVNb2RpZmllckFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udWkuYWRhcHRlcnMuZmVhdHVyZW1vZGlmaWVyZWRpdGNvbXBvc2l0ZS5GZWF0dXJlTW9kaWZpZXJFZGl0Q29tcG9zaXRlQWRhcHRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnVpLmFkYXB0ZXJzLmZlYXR1cmVtb2RpZmllcmVkaXRjb21wb3NpdGUuRmVhdHVyZU1vZGlmaWVyRmVhdHVyZU1vZGlmaWVyRWRpdENvbXBvc2l0ZUFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udWkuYWRhcHRlcnMucHJvcGVydHlzdHJpbmdzLlByb3BlcnR5U3RyaW5nUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS51aS5hZGFwdGVycy5wcm9wZXJ0eXN0cmluZ3MuUHJvcGVydHlTdHJpbmdQcm92aWRlckFkYXB0ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS51aS5hZGFwdGVycy5wcm9wZXJ0eXN0cmluZ3MuUHJvcGVydHlTdHJpbmdQcm92aWRlckFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5TV1Q7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmN1c3RvbS5TY3JvbGxlZENvbXBvc2l0ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLk1vZGlmeUV2ZW50OworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuTW9kaWZ5TGlzdGVuZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5TZWxlY3Rpb25BZGFwdGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuU2VsZWN0aW9uRXZlbnQ7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmdyYXBoaWNzLlBvaW50OworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5sYXlvdXQuRmlsbExheW91dDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QubGF5b3V0LkZvcm1BdHRhY2htZW50OworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5sYXlvdXQuRm9ybURhdGE7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5Gb3JtTGF5b3V0OworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5sYXlvdXQuR3JpZERhdGE7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5HcmlkTGF5b3V0OworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5sYXlvdXQuUm93TGF5b3V0OworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkJ1dHRvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuR3JvdXA7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuTGFiZWw7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuUGxhdGZvcm1VSTsKKworLyoqCisgKiBUaGlzIGNsYXNzIGlzIGEge0BsaW5rIE5ld0lkZW50aWZpYWJsZVBhZ2V9IHRoYXQgaXMgY3VzdG9taXplZCB0byBjb250YWluIGEKKyAqIGxpc3Qgb2YgdGhlIHtAbGluayBFU3RydWN0dXJhbEZlYXR1cmV9cyBvZiBhbiB7QGxpbmsgSWRlbnRpZmlhYmxlfSB0aGF0IGNhbgorICogYmUgbW9kaWZpZWQgYnkgYSB7QGxpbmsgRmVhdHVyZU1vZGlmaWVyfS4gSXQgaXMgZXh0ZW5kZWQgZm9yIGVhY2ggdHlwZSBvZgorICoge0BsaW5rIElkZW50aWZpYWJsZX0gd2hpY2ggY2FuIGJlIG1vZGlmaWVkLiBJbnN0YW5jZXMgb2Ygc3ViY2xhc3NlcyBvZiB0aGlzCisgKiBjbGFzcyBhcmUgY3JlYXRlZCBieSBhbiBjb21wb3NhYmxlIGFkYXB0ZXIgZmFjdG9yeS4gVGhpcyBhcHByb2FjaCBhbGxvd3MgbmV3CisgKiB0eXBlcyBvZiB7QGxpbmsgSWRlbnRpZmlhYmxlfXMgdG8gYmUgYWRkZWQgdG8gdGhlIHN5c3RlbSBhbmQgaGF2ZSB0aGUKKyAqIHtAbGluayBOZXdNb2RpZmllcldpemFyZH0gYmUgYWJsZSB0byBoYW5kbGUgdGhlbSwgY29tcGxldGUgd2l0aCBOTFMKKyAqIHRyYW5zbGF0aW9ucywgZXRjLgorICovCithYnN0cmFjdCBwdWJsaWMgY2xhc3MgTmV3TW9kaWZpZXJQYWdlIGV4dGVuZHMgTmV3SWRlbnRpZmlhYmxlUGFnZSB7CisKKwkvKioKKwkgKiBUaGlzIGlzIHRoZSB7QGxpbmsgSWRlbnRpZmlhYmxlfSBmb3Igd2hpY2ggdGhlIHBhZ2UgaXMgY3JlYXRpbmcgYQorCSAqIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuTW9kaWZpZXJ9LgorCSAqLworCXByb3RlY3RlZCBFT2JqZWN0IHRhcmdldDsKKworCXByaXZhdGUgZmluYWwgTGlzdDxGZWF0dXJlTW9kaWZpZXJDb21wb3NpdGU+IGZlYXR1cmVNb2RpZmllckNvbXBvc2l0ZXMgPSBuZXcgQXJyYXlMaXN0PEZlYXR1cmVNb2RpZmllckNvbXBvc2l0ZT4oKTsKKworCS8qKgorCSAqIENvbnN0cnVjdG9yCisJICogCisJICogQHBhcmFtIGlkZW50aWZpYWJsZQorCSAqICAgICAgICAgICAgdGhlIHtAbGluayBJZGVudGlmaWFibGV9IGZvciB3aGljaCB0aGUgcGFnZSBpcyBjcmVhdGluZyBhCisJICogICAgICAgICAgICB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLk1vZGlmaWVyfS4KKwkgKi8KKwlwcm90ZWN0ZWQgTmV3TW9kaWZpZXJQYWdlKGZpbmFsIEVPYmplY3QgdGFyZ2V0KSB7CisJCXN1cGVyKE1lc3NhZ2VzLmdldFN0cmluZygiTk1vZGlmaWVyV2l6LnBhZ2VfdGl0bGUiKSk7CisJCXNldFRpdGxlKE1lc3NhZ2VzLmdldFN0cmluZygiTk1vZGlmaWVyV2l6LnBhZ2VfdGl0bGUiKSk7IC8vJE5PTi1OTFMtMSQKKwkJc2V0RGVzY3JpcHRpb24oTWVzc2FnZXMuZ2V0U3RyaW5nKCJOTW9kaWZpZXJXaXoucGFnZV9kZXNjcmlwdGlvbiIpKTsgLy8kTk9OLU5MUy0xJAorCQl0aGlzLnRhcmdldCA9IHRhcmdldDsKKwl9IC8vIE5ld01vZGlmaWVyUGFnZQorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnVpLndpemFyZHMuTmV3SWRlbnRpZmlhYmxlV2l6YXJkLk5ld0lkZW50aWZpYWJsZVBhZ2UjY3JlYXRlU3BlY2lmaWNDb21wb3NpdGUob3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlKQorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCBDb21wb3NpdGUgY3JlYXRlU3BlY2lmaWNDb21wb3NpdGUoZmluYWwgQ29tcG9zaXRlIHBhcmVudCkgeworCQkKKwkJICAvL0Rpc3BsYXkgZGlzcGxheSA9IHBhcmVudC5nZXREaXNwbGF5KCk7CisJICAgICAgLy9Db2xvciBibHVlID0gZGlzcGxheS5nZXRTeXN0ZW1Db2xvcihTV1QuQ09MT1JfQkxVRSk7CisJICAgICAgCisJICAgICAgZmluYWwgQ29tcG9zaXRlIG91dGVyQ29tcG9zaXRlID0gbmV3IENvbXBvc2l0ZShwYXJlbnQsU1dULkJPUkRFUik7CisJICAgICAgb3V0ZXJDb21wb3NpdGUuc2V0TGF5b3V0KG5ldyBGaWxsTGF5b3V0KCkpOworCSAgICAgIAorCSAgICAgIC8vIHNldCB0aGUgbWluaW11bSB3aWR0aCBhbmQgaGVpZ2h0IG9mIHRoZSBzY3JvbGxlZCBjb250ZW50IC0gbWV0aG9kIDIKKwkgICAgICBmaW5hbCBTY3JvbGxlZENvbXBvc2l0ZSBzY3JvbGxlZENvbXBvc2l0ZSA9IG5ldyBTY3JvbGxlZENvbXBvc2l0ZShvdXRlckNvbXBvc2l0ZSwgU1dULkhfU0NST0xMIHwgU1dULlZfU0NST0xMIHwgU1dULkJPUkRFUik7CisJICAgICAgc2Nyb2xsZWRDb21wb3NpdGUuc2V0RXhwYW5kSG9yaXpvbnRhbCh0cnVlKTsKKwkgICAgICBzY3JvbGxlZENvbXBvc2l0ZS5zZXRFeHBhbmRWZXJ0aWNhbCh0cnVlKTsKKwkgICAgICBmaW5hbCBDb21wb3NpdGUgaW5uZXJDb21wb3NpdGUgPSBuZXcgQ29tcG9zaXRlKHNjcm9sbGVkQ29tcG9zaXRlLCBTV1QuTk9ORSk7CisJICAgICAgc2Nyb2xsZWRDb21wb3NpdGUuc2V0Q29udGVudChpbm5lckNvbXBvc2l0ZSk7CisJICAgICAgLy9pbm5lckNvbXBvc2l0ZS5zZXRCYWNrZ3JvdW5kKGJsdWUpOworCSAgICAgIEdyaWRMYXlvdXQgbGF5b3V0ID0gbmV3IEdyaWRMYXlvdXQoKTsKKwkgICAgICBsYXlvdXQubnVtQ29sdW1ucyA9IDI7CisJICAgICAgaW5uZXJDb21wb3NpdGUuc2V0TGF5b3V0KGxheW91dCk7CisJICAgICAgCisJICAgICAgc2Nyb2xsZWRDb21wb3NpdGUuc2V0TWluU2l6ZShpbm5lckNvbXBvc2l0ZS5jb21wdXRlU2l6ZShTV1QuREVGQVVMVCwgU1dULkRFRkFVTFQpKTsKKwkgICAgICBpbm5lckNvbXBvc2l0ZS5zZXRTaXplKGlubmVyQ29tcG9zaXRlLmNvbXB1dGVTaXplKFNXVC5ERUZBVUxULCBTV1QuREVGQVVMVCkpOworICAgICAgICAgIGlubmVyQ29tcG9zaXRlLmxheW91dCgpOworICAgICAgICAgIFBvaW50IGlubmVyU2l6ZSA9IGlubmVyQ29tcG9zaXRlLmNvbXB1dGVTaXplKFNXVC5ERUZBVUxULCBTV1QuREVGQVVMVCk7CisgICAgICAgICAgc2Nyb2xsZWRDb21wb3NpdGUuc2V0U2l6ZShpbm5lclNpemUpOworICAgIAkgIG91dGVyQ29tcG9zaXRlLnNldFNpemUoaW5uZXJTaXplKTsKKyAgICAJICBpbm5lckNvbXBvc2l0ZS5sYXlvdXQoKTsKKyAgICAgICAgICBvdXRlckNvbXBvc2l0ZS5sYXlvdXQoKTsKKyAgICAgICAgICBwYXJlbnQubGF5b3V0KCk7CisgLyogTm90IG5lZWRlZCB3aXRoIENocmlzIGZpeCB0byB0aGUgd2l6YXJkcworICAgICAgICAgIExhYmVsIHRlc3RMYWJlbCA9IG5ldyBMYWJlbChpbm5lckNvbXBvc2l0ZSwgU1dULkJPUkRFUik7CisgICAgICAgICAgdGVzdExhYmVsLnNldFRleHQoInByZXNzIHRvIHNjcm9sbCIpOworCSAgICAgIEJ1dHRvbiBhZGQgPSBuZXcgQnV0dG9uIChpbm5lckNvbXBvc2l0ZSwgU1dULlBVU0gpOworCSAgICAgIGFkZC5zZXRUZXh0KCJmb3JjZSBzY3JvbGwiKTsKKwkgICAgICBmaW5hbCBpbnRbXSBpbmRleCA9IG5ldyBpbnRbXXswfTsKKwkgICAgICBhZGQuYWRkTGlzdGVuZXIoU1dULlNlbGVjdGlvbiwgbmV3IExpc3RlbmVyKCkgeworCSAgICAgICAgICBwdWJsaWMgdm9pZCBoYW5kbGVFdmVudChAU3VwcHJlc3NXYXJuaW5ncygidW51c2VkIikgRXZlbnQgZSkgeworCSAgICAgICAgICAgICAgaW5kZXhbMF0rKzsKKwkgICAgICAgICAgICAgIExhYmVsIGVtcHR5TGFiZWwgPSBuZXcgTGFiZWwoaW5uZXJDb21wb3NpdGUsIFNXVC5OT05FKTsKKwkgICAgICAgICAgICAgIGVtcHR5TGFiZWwuc2V0VGV4dCgiYm90dG9tIik7CisJICAgICAgICAgICAgICAvLyByZXNldCBzaXplIG9mIGNvbnRlbnQgc28gY2hpbGRyZW4gY2FuIGJlIHNlZW4gLSBtZXRob2QgMQorCSAgICAgICAgICAgICAgaW5uZXJDb21wb3NpdGUuc2V0U2l6ZShpbm5lckNvbXBvc2l0ZS5jb21wdXRlU2l6ZShTV1QuREVGQVVMVCwgU1dULkRFRkFVTFQpKTsKKwkgICAgICAgICAgICAgIGlubmVyQ29tcG9zaXRlLmxheW91dCgpOworCSAgICAgICAgICAgICAgCisJICAgICAgICAgICAgICAvLyByZXNldCB0aGUgbWluaW11bSB3aWR0aCBhbmQgaGVpZ2h0IHNvIGNoaWxkcmVuIGNhbiBiZSBzZWVuIC0gbWV0aG9kIDIKKwkgICAgICAgICAgICAgIFBvaW50IGlubmVyU2l6ZSA9IGlubmVyQ29tcG9zaXRlLmNvbXB1dGVTaXplKFNXVC5ERUZBVUxULCBTV1QuREVGQVVMVCk7CisJICAgICAgICAgICAgICBpbm5lclNpemUueSo9MzsKKwkgICAgICAgICAgICAgIGlubmVyU2l6ZS55Lz0yOworCSAgICAgICAgICAgICAgc2Nyb2xsZWRDb21wb3NpdGUuc2V0TWluU2l6ZShpbm5lclNpemUpOworCSAgICAgICAgICAgICAgCQorCSAgICAgICAgICB9CisJICAgICAgfSk7CisqLworICAgICAgICAgIAorCQkvLyBHZXQgdGhlIGFkYXB0ZXIgdGhhdCB3aWxsIHByb3ZpZGUgTkxTJ2QgbmFtZXMgZm9yIHRoZQorCQkvLyBwcm9wZXJ0aWVzIG9mIHRoZSBJZGVudGlmaWFibGUKKwkJZmluYWwgUHJvcGVydHlTdHJpbmdQcm92aWRlckFkYXB0ZXIgcHNwYSA9IChQcm9wZXJ0eVN0cmluZ1Byb3ZpZGVyQWRhcHRlcikgUHJvcGVydHlTdHJpbmdQcm92aWRlckFkYXB0ZXJGYWN0b3J5LklOU1RBTkNFCisJCQkJLmFkYXB0KHRhcmdldCwgUHJvcGVydHlTdHJpbmdQcm92aWRlci5jbGFzcyk7CisKKwkJZmluYWwgQ29tcG9zZWRBZGFwdGVyRmFjdG9yeSBpdGVtUHJvdmlkZXJGYWN0b3J5ID0gbmV3IENvbXBvc2VkQWRhcHRlckZhY3RvcnkoCisJCQkJQ29tcG9zZWRBZGFwdGVyRmFjdG9yeS5EZXNjcmlwdG9yLlJlZ2lzdHJ5LklOU1RBTkNFKTsKKworCQlmaW5hbCBJSXRlbVByb3BlcnR5U291cmNlIHByb3BlcnR5U291cmNlID0gKElJdGVtUHJvcGVydHlTb3VyY2UpIGl0ZW1Qcm92aWRlckZhY3RvcnkKKwkJCQkuYWRhcHQodGFyZ2V0LCBJSXRlbVByb3BlcnR5U291cmNlLmNsYXNzKTsKKwkJZmluYWwgTGlzdDxJSXRlbVByb3BlcnR5RGVzY3JpcHRvcj4gcHJvcGVydGllcyA9IHByb3BlcnR5U291cmNlCisJCQkJLmdldFByb3BlcnR5RGVzY3JpcHRvcnModGFyZ2V0KTsKKworCQlmb3IgKGZpbmFsIElJdGVtUHJvcGVydHlEZXNjcmlwdG9yIGRlc2NyaXB0b3IgOiBwcm9wZXJ0aWVzKSB7CisJCQlmaW5hbCBFU3RydWN0dXJhbEZlYXR1cmUgZmVhdHVyZSA9IChFU3RydWN0dXJhbEZlYXR1cmUpIGRlc2NyaXB0b3IKKwkJCQkJLmdldEZlYXR1cmUobnVsbCk7CisJCQkvLyBJcyB0aGlzIGEgcHJvcGVydHkgdGhhdCB0aGUgdXNlciBzcGVjaWZpZXM/CisJCQlpZiAoaXNVc2VyU3BlY2lmaWVkUHJvcGVydHkoZmVhdHVyZSkpIHsKKwkJCQkvLyBZZXMKKwkJCQkvLyBMYWJlbCBmb3IgdGhlIG5hbWUgb2YgdGhlIHByb3BlcnR5CisJCQkJZmluYWwgTGFiZWwgbGFiZWwgPSBuZXcgTGFiZWwoaW5uZXJDb21wb3NpdGUsIFNXVC5OT05FKTsKKwkJCQlsYWJlbC5zZXRUZXh0KHBzcGEuZ2V0UHJvcGVydHlOYW1lKGRlc2NyaXB0b3IpKTsKKwkJCQkvLyBsYWJlbC5zZXRCYWNrZ3JvdW5kKERpc3BsYXkuZ2V0Q3VycmVudCgpLmdldFN5c3RlbUNvbG9yKFNXVC5DT0xPUl9DWUFOKSk7CisJCQkJR3JpZERhdGEgZ3JpZERhdGExID0gbmV3IEdyaWREYXRhKEdyaWREYXRhLkJFR0lOTklORyk7CisJCQkJZ3JpZERhdGExLmhvcml6b250YWxBbGlnbm1lbnQgPSBTV1QuQkVHSU5OSU5HOworCQkJCWdyaWREYXRhMS5ob3Jpem9udGFsSW5kZW50ID0gMDsKKwkJCQlsYWJlbC5zZXRMYXlvdXREYXRhKGdyaWREYXRhMSk7CisKKwkJCQkvLyBDb21wb3NpdGUgZm9yIHRoZSBlZGl0b3IKKwkJCQlmaW5hbCBGZWF0dXJlTW9kaWZpZXJDb21wb3NpdGUgZmVhdHVyZU1vZGlmaWVyQ29tcG9zaXRlID0gbmV3IEZlYXR1cmVNb2RpZmllckNvbXBvc2l0ZSgKKwkJCQkJCWlubmVyQ29tcG9zaXRlLCB0YXJnZXQsIGZlYXR1cmUsIHBzcGEsIGRlc2NyaXB0b3IsCisJCQkJCQlpc01vZGlmaWFibGVQcm9wZXJ0eShmZWF0dXJlKSwgdGhpcyk7CisJCQkJR3JpZERhdGEgZ3JpZERhdGEyID0gbmV3IEdyaWREYXRhKEdyaWREYXRhLkJFR0lOTklORyk7CisJCQkJZ3JpZERhdGEyLmdyYWJFeGNlc3NIb3Jpem9udGFsU3BhY2UgPSB0cnVlOworCQkJCWdyaWREYXRhMi5ob3Jpem9udGFsQWxpZ25tZW50ID0gU1dULkZJTEw7CisJCQkJZ3JpZERhdGEyLmhvcml6b250YWxJbmRlbnQgPSAwOworCQkJCWZlYXR1cmVNb2RpZmllckNvbXBvc2l0ZS5zZXRMYXlvdXREYXRhKGdyaWREYXRhMik7CisKKwkJCQlmZWF0dXJlTW9kaWZpZXJDb21wb3NpdGVzLmFkZChmZWF0dXJlTW9kaWZpZXJDb21wb3NpdGUpOworCisJCQl9IC8vIGlmIHVzZXIgc3BlY2lmaWVkCisJCX0gLy8gZm9yIGVhY2ggcHJvcGVydHkKKworCQkvLyBBbnkgdGV4dCBmb3IgdGhlIGJvdHRvbT8KKwkJZmluYWwgU3RyaW5nIGJvdHRvbVRleHQgPSBnZXRCb3R0b21UZXh0KCk7CisJCWlmIChib3R0b21UZXh0ICE9IG51bGwpIHsKKwkJCS8vIFllcworCQkJZmluYWwgTGFiZWwgYm90dG9tVGV4dExhYmVsID0gbmV3IExhYmVsKGlubmVyQ29tcG9zaXRlLCBTV1QuTk9ORSk7CisJCQlib3R0b21UZXh0TGFiZWwuc2V0VGV4dChib3R0b21UZXh0KTsKKwkJCWZpbmFsIEdyaWREYXRhIGJvdHRvbVRleHRHRCA9IG5ldyBHcmlkRGF0YShHcmlkRGF0YS5FTkQpOworCQkJYm90dG9tVGV4dEdELmdyYWJFeGNlc3NIb3Jpem9udGFsU3BhY2UgPSB0cnVlOworCQkJYm90dG9tVGV4dEdELmhvcml6b250YWxTcGFuID0gMjsKKwkJCWJvdHRvbVRleHRMYWJlbC5zZXRMYXlvdXREYXRhKGJvdHRvbVRleHRHRCk7CisJCX0gLy8gaWYKKwkKKwkJCisJCS8vIHJlc2V0IHRoZSBtaW5pbXVtIHdpZHRoIGFuZCBoZWlnaHQgc28gY2hpbGRyZW4gY2FuIGJlIHNlZW4gLSBtZXRob2QgMgorCQkvLyBUT0RPIHdoeSBkb2VzIHRoZSBmb2xsb3dpbmcgbm90IG1ha2UgdGhlIHNjcm9sbGJhciBzaG93IHVwIGF0IHRoZSBzdGFydCA/PworICAgICAgICBpbm5lclNpemUgPSBpbm5lckNvbXBvc2l0ZS5jb21wdXRlU2l6ZShTV1QuREVGQVVMVCwgU1dULkRFRkFVTFQpOworICAgICAgICBpbm5lckNvbXBvc2l0ZS5zZXRTaXplKGlubmVyU2l6ZSk7CisgICAgICAgIGlubmVyQ29tcG9zaXRlLmxheW91dCgpOworICAgICAgIC8vIHNjcm9sbGVkQ29tcG9zaXRlLnNldFNpemUoaW5uZXJTaXplKTsKKyAgICAgICAvLyBpbm5lclNpemUueSo9MzsKKyAgICAgICAvLyBpbm5lclNpemUueS89MjsKKyAgICAgICAgc2Nyb2xsZWRDb21wb3NpdGUuc2V0TWluU2l6ZShpbm5lclNpemUpOworICAgICAgICAJICAgICAgICAgICAgCisgICAgICAgCisJCVBsYXRmb3JtVUkuZ2V0V29ya2JlbmNoKCkuZ2V0SGVscFN5c3RlbSgpLnNldEhlbHAocGFyZW50LCAib3JnLmVjbGlwc2Uuc3RlbS5kb2MubmV3bW9kaWZpZXJfY29udGV4dGlkIik7CisKKwkJcmV0dXJuIG91dGVyQ29tcG9zaXRlOworCX0gLy8gY3JlYXRlU3BlY2lmaWNDb21wb3NpdGUKKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS51aS53aXphcmRzLk5ld0lkZW50aWZpYWJsZVdpemFyZC5OZXdJZGVudGlmaWFibGVQYWdlI2dldERDRGVzY3JpcHRpb24oKQorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCBTdHJpbmcgZ2V0RENEZXNjcmlwdGlvbigpIHsKKwkJcmV0dXJuIE1lc3NhZ2VGb3JtYXQuZm9ybWF0KE1lc3NhZ2VzCisJCQkJLmdldFN0cmluZygiTk1vZGlmaWVyV2l6LkRDX0RFU0NSSVBUSU9OIiksCisJCQkJbmV3IE9iamVjdFtdIHsgc2VyaWFsaXphdGlvbkZpbGVOYW1lRmllbGQuZ2V0VGV4dCgpIH0pOworCX0gLy8gZ2V0RENEZXNjcmlwdGlvbgorCisJLyoqCisJICogQHBhcmFtIGZlYXR1cmUKKwkgKiAgICAgICAgICAgIGEge0BsaW5rIEVTdHJ1Y3R1cmFsRmVhdHVyZX0gb2YgYW4ge0BsaW5rIElkZW50aWZpYWJsZX0uCisJICogQHJldHVybiA8Y29kZT50cnVlPC9jb2RlPiBpZiB0aGUge0BsaW5rIEVTdHJ1Y3R1cmFsRmVhdHVyZX0gcmVwcmVzZW50cworCSAqICAgICAgICAgYSBwcm9wZXJ0eSB0aGF0IGlzIHNwZWNpZmllZCBieSBhIHVzZXIsIDxjb2RlPmZhbHNlPC9jb2RlPgorCSAqICAgICAgICAgb3RoZXJ3aXNlLgorCSAqLworCXByb3RlY3RlZCBib29sZWFuIGlzVXNlclNwZWNpZmllZFByb3BlcnR5KGZpbmFsIEVTdHJ1Y3R1cmFsRmVhdHVyZSBmZWF0dXJlKSB7CisJCWJvb2xlYW4gcmV0VmFsdWUgPSAhZmVhdHVyZS5nZXRFQ29udGFpbmluZ0NsYXNzKCkuZXF1YWxzKAorCQkJCUNvbW1vblBhY2thZ2UuTGl0ZXJhbHMuRFVCTElOX0NPUkUpOworCQlyZXRWYWx1ZSA9IHJldFZhbHVlICYmICEoZmVhdHVyZSBpbnN0YW5jZW9mIEVSZWZlcmVuY2UpOworCQlyZXR1cm4gcmV0VmFsdWU7CisJfSAvLyBpc1VzZXJTcGVjaWZpZWRQcm9wZXJ0eQorCisJLyoqCisJICogQHJldHVybiBhIGxpbmUgb2YgdGV4dCB0byBhcHBlYXIgYmVsb3cgdGhlIHByb3BlcnRpZXMsIG9yCisJICogICAgICAgICA8Y29kZT5udWxsPC9jb2RlPiBpZiBubyB0ZXh0IGlzIHRvIGFwcGVhci4KKwkgKi8KKwlwcm90ZWN0ZWQgU3RyaW5nIGdldEJvdHRvbVRleHQoKSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIEBwYXJhbSBmZWF0dXJlCisJICogICAgICAgICAgICB0aGUge0BsaW5rIEVTdHJ1Y3R1cmFsRmVhdHVyZX0gdG8gdGVzdCBmb3IgbW9kaWZpYWJpbGl0eQorCSAqIEByZXR1cm4gPGNvZGU+dHJ1ZTwvY29kZT4gKERlZmF1bHQpIGlmIHRoZSBmZWF0dXJlIHJlcHJlc2VudHMgYSBwcm9wZXJ0eQorCSAqICAgICAgICAgdGhhdCB0aGUgdXNlciBzaG91bGQgYmUgYWJsZSB0byBtb2RpZnkgZm9yIGFuCisJICogICAgICAgICB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmV4cGVyaW1lbnQuRXhwZXJpbWVudH0gb3IgYQorCSAqICAgICAgICAge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS50cmlnZ2VyLlRyaWdnZXJ9LgorCSAqLworCXByb3RlY3RlZCBib29sZWFuIGlzTW9kaWZpYWJsZVByb3BlcnR5KGZpbmFsIEVTdHJ1Y3R1cmFsRmVhdHVyZSBmZWF0dXJlKSB7CisJCWJvb2xlYW4gcmV0VmFsdWUgPSBmYWxzZTsKKwkJcmV0VmFsdWUgfD0gKGZlYXR1cmUuZ2V0RVR5cGUoKS5lcXVhbHMoRWNvcmVQYWNrYWdlLkxpdGVyYWxzLkVJTlQpKTsKKwkJcmV0VmFsdWUgfD0gKGZlYXR1cmUuZ2V0RVR5cGUoKS5lcXVhbHMoRWNvcmVQYWNrYWdlLkxpdGVyYWxzLkVMT05HKSk7CisJCXJldFZhbHVlIHw9IChmZWF0dXJlLmdldEVUeXBlKCkuZXF1YWxzKEVjb3JlUGFja2FnZS5MaXRlcmFscy5FRE9VQkxFKSk7CisJCXJldHVybiByZXRWYWx1ZTsKKwl9IC8vIGlzTW9kaWZpYWJsZVByb3BlcnR5CisKKwkvKioKKwkgKiBAcmV0dXJuIHRoZSB7QGxpbmsgRmVhdHVyZU1vZGlmaWVyfXMgb24gdGhlIHBhZ2UgdGhhdCB0aGUgdXNlciBoYXMKKwkgKiAgICAgICAgIHNwZWNpZmllZC4KKwkgKi8KKwlwdWJsaWMgZmluYWwgTGlzdDxGZWF0dXJlTW9kaWZpZXI+IGdldEZlYXR1cmVNb2RpZmllcnMoKSB7CisJCWZpbmFsIExpc3Q8RmVhdHVyZU1vZGlmaWVyPiByZXRWYWx1ZSA9IG5ldyBBcnJheUxpc3Q8RmVhdHVyZU1vZGlmaWVyPigpOworCQlmb3IgKGZpbmFsIEZlYXR1cmVNb2RpZmllckNvbXBvc2l0ZSBmZWF0dXJlTW9kaWZpZXJDb21wb3NpdGUgOiBmZWF0dXJlTW9kaWZpZXJDb21wb3NpdGVzKSB7CisJCQlmaW5hbCBGZWF0dXJlTW9kaWZpZXIgZmVhdHVyZU1vZGlmaWVyID0gZmVhdHVyZU1vZGlmaWVyQ29tcG9zaXRlCisJCQkJCS5nZXRGZWF0dXJlTW9kaWZpZXIoKTsKKwkJCS8vIElzIHRoaXMgRmVhdHVyZU1vZGlmaWVyIHNvbWV0aGluZyBvdGhlciB0aGFuIGEgTk9QPworCQkJaWYgKCEoZmVhdHVyZU1vZGlmaWVyIGluc3RhbmNlb2YgTk9QTW9kaWZpZXIpKSB7CisJCQkJLy8gWWVzCisJCQkJZmVhdHVyZU1vZGlmaWVyLnNldFRhcmdldCh0YXJnZXQpOworCQkJCXJldFZhbHVlLmFkZChmZWF0dXJlTW9kaWZpZXIpOworCQkJfSAvLyBpZgorCQl9IC8vIGZvciBlYWNoIEZlYXR1cmVNb2RpZmllckNvbXBvc2l0ZQorCQlyZXR1cm4gcmV0VmFsdWU7CisJfSAvLyBnZXRGZWF0dXJlTW9kaWZpZXJzCisKKwkvKioKKwkgKiBzZWUgb3JnLmVjbGlwc2Uuc3RlbS51aS53aXphcmRzLk5ld0lkZW50aWZpYWJsZVBhZ2UjdmFsaWRhdGVQYWdlKCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgYm9vbGVhbiB2YWxpZGF0ZVBhZ2UoKSB7CisJCXJldHVybiBzdXBlci52YWxpZGF0ZVBhZ2UoKTsKKwl9IC8vIHZhbGlkYXRlUGFnZQorCisJLyoqCisJICogVGhpcyBjbGFzcyBpcyBhIHtAbGluayBDb21wb3NpdGV9IHRoYXQgZGlzcGxheXMgdGhlIGRldGFpbHMgb2YgYQorCSAqIHtAbGluayBGZWF0dXJlTW9kaWZpZXJ9LgorCSAqLworCXByb3RlY3RlZCBzdGF0aWMgY2xhc3MgRmVhdHVyZU1vZGlmaWVyQ29tcG9zaXRlIGV4dGVuZHMgQ29tcG9zaXRlIHsKKworCQkvKioKKwkJICogVGhpcyBpcyBhIHBsYWNlIGhvbGRlciBmb3IgdGhlIGN1cnJlbnQKKwkJICoge0BsaW5rIEZlYXR1cmVNb2RpZmllckVkaXRDb21wb3NpdGV9IHRvIHdoaWNoIGEgcmVmZXJlbmNlIGlzCisJCSAqIG1haW50YWluZWQgYnkge0BsaW5rICNlZGl0Q29tcG9zaXRlfS4gV2hlbiB0aGUgdXNlciBzZWxlY3RzIG9uZSBvZgorCQkgKiB0aGUgcmFkaW8gYnV0dG9ucyAoe0BsaW5rICNub25lQnV0dG9ufSwge0BsaW5rICNyYW5nZUJ1dHRvbn0sIG9yCisJCSAqIHtAbGluayAjc2VxdWVuY2VCdXR0b259KSB0aGUgY2hpbGQgb2YgdGhpcyB7QGxpbmsgQ29tcG9zaXRlfSBpcworCQkgKiBjaGFuZ2VkIGJ5IHtAbGluayAjc2V0RWRpdENvbXBvc2l0ZShDb21wb3NpdGUpfS4KKwkJICovCisJCWZpbmFsIENvbXBvc2l0ZSBlZGl0Q29tcG9zaXRlSG9sZGVyOworCisJCS8qKgorCQkgKiBUaGlzIGlzIHRoZSBjdXJyZW50IHtAbGluayBGZWF0dXJlTW9kaWZpZXJFZGl0Q29tcG9zaXRlfSBiZWluZworCQkgKiBkaXNwbGF5ZWQgdG8gdGhlIHVzZXIgYW5kIGlzIHRoZSBjaGlsZCBvZgorCQkgKiB7QGxpbmsgI2VkaXRDb21wb3NpdGVIb2xkZXJ9LgorCQkgKi8KKwkJcHJpdmF0ZSBGZWF0dXJlTW9kaWZpZXJFZGl0Q29tcG9zaXRlIGVkaXRDb21wb3NpdGU7CisKKwkJLyoqCisJCSAqIFRoaXMgaXMgdGhlIHtAbGluayBGZWF0dXJlTW9kaWZpZXJ9LCBpZiBpdCBleGlzdHMsIGNyZWF0ZWQgYnkgdGhlCisJCSAqIHVzZXIgZm9yIHRoZSB7QGxpbmsgRVN0cnVjdHVyYWxGZWF0dXJlfSByZWZlcmVuY2VkIGJ5CisJCSAqIHtAbGluayAjZmVhdHVyZX0uCisJCSAqLworCQlGZWF0dXJlTW9kaWZpZXIgZmVhdHVyZU1vZGlmaWVyID0gbnVsbDsKKworCQkvKioKKwkJICogVGhlc2UgYnV0dG9ucyBhcmUgZ3JvdXBlZCB0b2dldGhlciBhcyAicmFkaW8gYnV0dG9ucyIgYW5kIGFsbG93IHRoZQorCQkgKiB1c2VyIHRvIHNwZWNpZnkgd2hpY2ggdHlwZSBvZiB7QGxpbmsgRmVhdHVyZU1vZGlmaWVyfSB0byBjcmVhdGUuCisJCSAqIEluaXRpYWxseSwge0BsaW5rICNub25lQnV0dG9ufSBpcyBzZWxlY3RlZCBhbmQgdGhlCisJCSAqIHtAbGluayBGZWF0dXJlTW9kaWZpZXJFZGl0Q29tcG9zaXRlfSByZXR1cm5lZCBieQorCQkgKiB7QGxpbmsgI2NyZWF0ZURlZmF1bHRFZGl0Q29tcG9zaXRlKENvbXBvc2l0ZSwgTmV3TW9kaWZpZXJQYWdlLCBJZGVudGlmaWFibGUsIEVTdHJ1Y3R1cmFsRmVhdHVyZSl9CisJCSAqIGlzIGRpc3BsYXllZCwgd2hpY2ggc2ltcGx5IHNob3dzIHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBmZWF0dXJlLgorCQkgKi8KKwkJQnV0dG9uIG5vbmVCdXR0b24gPSBudWxsOworCQlCdXR0b24gc2luZ2xlQnV0dG9uID0gbnVsbDsKKwkJQnV0dG9uIHJhbmdlQnV0dG9uID0gbnVsbDsKKwkJQnV0dG9uIHNlcXVlbmNlQnV0dG9uID0gbnVsbDsKKworCQkvKioKKwkJICogQHBhcmFtIHBhcmVudAorCQkgKiAgICAgICAgICAgIHRoZSBwYXJlbnQge0BsaW5rIENvbXBvc2l0ZX0KKwkJICogQHBhcmFtIHRhcmdldAorCQkgKiAgICAgICAgICAgIHRoZSB7QGxpbmsgRU9iamVjdH0gdGhhdCBjb250YWlucyB0aGUKKwkJICogICAgICAgICAgICB7QGxpbmsgRVN0cnVjdHVyYWxGZWF0dXJlfQorCQkgKiBAcGFyYW0gZmVhdHVyZQorCQkgKiAgICAgICAgICAgIHRoZSBmZWF0dXJlIHRvIGJlIG1vZGlmaWVkCisJCSAqIEBwYXJhbSBwc3AKKwkJICogICAgICAgICAgICB0aGUgcHJvdmlkZXIgb2YgTkxTJ2Qgc3RyaW5ncyB0byBsYWJlbCB0aGUgcHJvcGVydGllcyBvZgorCQkgKiAgICAgICAgICAgIHRoZSB7QGxpbmsgSWRlbnRpZmlhYmxlfQorCQkgKiBAcGFyYW0gZGVzY3JpcHRvcgorCQkgKiBAcGFyYW0gbW9kaWZpYWJsZQorCQkgKiAgICAgICAgICAgIGlmIDxjb2RlPnRydWU8L2NvZGU+IHRoZW4gdGhlIHtAbGluayBFU3RydWN0dXJhbEZlYXR1cmV9CisJCSAqICAgICAgICAgICAgY2FuIGJlIG1vZGlmaWVkLgorCQkgKiBAcGFyYW0gcGFyZW50TmV3TW9kaWZpZXJQYWdlCisJCSAqICAgICAgICAgICAgdGhlIHtAbGluayBOZXdNb2RpZmllclBhZ2V9IHRoYXQgY29udGFpbnMgdGhlIHBhcmVudAorCQkgKiAgICAgICAgICAgIHtAbGluayBDb21wb3NpdGV9LgorCQkgKi8KKwkJcHVibGljIEZlYXR1cmVNb2RpZmllckNvbXBvc2l0ZShmaW5hbCBDb21wb3NpdGUgcGFyZW50LAorCQkJCWZpbmFsIEVPYmplY3QgdGFyZ2V0LAorCQkJCWZpbmFsIEVTdHJ1Y3R1cmFsRmVhdHVyZSBmZWF0dXJlLAorCQkJCWZpbmFsIFByb3BlcnR5U3RyaW5nUHJvdmlkZXIgcHNwLAorCQkJCWZpbmFsIElJdGVtUHJvcGVydHlEZXNjcmlwdG9yIGRlc2NyaXB0b3IsCisJCQkJZmluYWwgYm9vbGVhbiBtb2RpZmlhYmxlLAorCQkJCWZpbmFsIE5ld01vZGlmaWVyUGFnZSBwYXJlbnROZXdNb2RpZmllclBhZ2UpIHsKKwkJCXN1cGVyKHBhcmVudCwgU1dULk5PTkUpOworCQkJZmluYWwgRm9ybUxheW91dCBsYXlvdXQgPSBuZXcgRm9ybUxheW91dCgpOworCQkJbGF5b3V0LnNwYWNpbmcgPSAyOworCQkJc2V0TGF5b3V0KGxheW91dCk7CisKKwkJCS8vIEVkaXQgQ29tcG9zaXRlIEhvbGRlcgorCQkJZWRpdENvbXBvc2l0ZUhvbGRlciA9IG5ldyBDb21wb3NpdGUodGhpcywgU1dULk5PTkUpOworCQkJZmluYWwgRmlsbExheW91dCBmaWxsTGF5b3V0ID0gbmV3IEZpbGxMYXlvdXQoKTsKKwkJCWZpbGxMYXlvdXQubWFyZ2luSGVpZ2h0ID0gMDsKKwkJCWZpbGxMYXlvdXQubWFyZ2luV2lkdGggPSAwOworCQkJZWRpdENvbXBvc2l0ZUhvbGRlci5zZXRMYXlvdXQoZmlsbExheW91dCk7CisJCQllZGl0Q29tcG9zaXRlSG9sZGVyLnNldFRvb2xUaXBUZXh0KHBzcAorCQkJCQkuZ2V0UHJvcGVydHlUb29sVGlwKGRlc2NyaXB0b3IpKTsKKworCQkJLy8gVW5pdHMgTGFiZWwKKwkJCWZpbmFsIExhYmVsIHVuaXRMYWJlbCA9IG5ldyBMYWJlbCh0aGlzLCBTV1QuTk9ORSk7CisJCQl1bml0TGFiZWwuc2V0VGV4dChwc3AuZ2V0UHJvcGVydHlVbml0cyhkZXNjcmlwdG9yKSk7CisJCQkKKwkJCS8vIFJhZGlvIGJ1dHRvbiBncm91cAorCQkJZmluYWwgR3JvdXAgZ3JvdXAgPSBuZXcgR3JvdXAodGhpcywgU1dULlNIQURPV19FVENIRURfSU4pOworCQkJZ3JvdXAuc2V0VGV4dCgiU2VsZWN0IE1vZGlmaWVyIFR5cGUiKTsKKwkJCWdyb3VwLnNldExheW91dChuZXcgUm93TGF5b3V0KFNXVC5IT1JJWk9OVEFMKSk7CisJCQlncm91cC5zZXRFbmFibGVkKG1vZGlmaWFibGUpOworCQkJbm9uZUJ1dHRvbiA9IG5ldyBCdXR0b24oZ3JvdXAsIFNXVC5SQURJTyk7CisJCQlub25lQnV0dG9uLnNldFRleHQoIk5vbmUiKTsKKwkJCW5vbmVCdXR0b24uc2V0RW5hYmxlZChtb2RpZmlhYmxlKTsKKworCisJCQkvLyByYW5nZSBidXR0b24KKwkJCXNpbmdsZUJ1dHRvbiA9IG5ldyBCdXR0b24oZ3JvdXAsIFNXVC5SQURJTyk7CisJCQlzaW5nbGVCdXR0b24uc2V0VGV4dChNZXNzYWdlcy5nZXRTdHJpbmcoIlNpbmdsZS50eXBlIikpOworCQkJc2luZ2xlQnV0dG9uLnNldEVuYWJsZWQobW9kaWZpYWJsZSk7CisJCQkKKwkJCS8vIHJhbmdlIGJ1dHRvbgorCQkJcmFuZ2VCdXR0b24gPSBuZXcgQnV0dG9uKGdyb3VwLCBTV1QuUkFESU8pOworCQkJcmFuZ2VCdXR0b24uc2V0VGV4dChNZXNzYWdlcy5nZXRTdHJpbmcoIlJhbmdlLnR5cGUiKSk7CisJCQlyYW5nZUJ1dHRvbi5zZXRFbmFibGVkKG1vZGlmaWFibGUpOworCQkJCisJCQkvLyBzZXF1ZW5jZSBidXR0b24KKwkJCXNlcXVlbmNlQnV0dG9uID0gbmV3IEJ1dHRvbihncm91cCwgU1dULlJBRElPKTsKKwkJCXNlcXVlbmNlQnV0dG9uLnNldFRleHQoTWVzc2FnZXMuZ2V0U3RyaW5nKCJTZXF1ZW5jZS50eXBlIikpOworCQkJc2VxdWVuY2VCdXR0b24uc2V0RW5hYmxlZChtb2RpZmlhYmxlKTsKKworCQkJZmluYWwgaW50IG9mZnNldCA9IDEwOworCisJCQkvLyBUaGUgbGVmdCBvZiB0aGUgZWRpdENvbXBvc2l0ZUhvbGRlciBpcyBhdHRhY2hlZCB0byB0aGUgbGVmdCBvZgorCQkJLy8gdGhlIHBhcmVudCBjb21wb3NpdGUKKwkJCUZvcm1EYXRhIGZvcm1EYXRhID0gbmV3IEZvcm1EYXRhKCk7CisJCQlmb3JtRGF0YS5sZWZ0ID0gbmV3IEZvcm1BdHRhY2htZW50KDAsIDApOworCQkJZm9ybURhdGEudG9wID0gbmV3IEZvcm1BdHRhY2htZW50KDAsIG9mZnNldCk7CisJCQllZGl0Q29tcG9zaXRlSG9sZGVyLnNldExheW91dERhdGEoZm9ybURhdGEpOworCisJCQkvLyBsZWZ0LT5ob2xkZXIucmlnaHQKKwkJCS8vIHJpZ2h0LT5ncm91cAorCQkJZm9ybURhdGEgPSBuZXcgRm9ybURhdGEoKTsKKwkJCWZvcm1EYXRhLmxlZnQgPSBuZXcgRm9ybUF0dGFjaG1lbnQoZWRpdENvbXBvc2l0ZUhvbGRlciwgMCwKKwkJCQkJU1dULlJJR0hUKTsKKwkJCWZvcm1EYXRhLnJpZ2h0ID0gbmV3IEZvcm1BdHRhY2htZW50KGdyb3VwLCAwLCBTV1QuTEVGVCk7CisJCQlmb3JtRGF0YS5ib3R0b20gPSBuZXcgRm9ybUF0dGFjaG1lbnQoZWRpdENvbXBvc2l0ZUhvbGRlciwgLTMsCisJCQkJCVNXVC5CT1RUT00pOworCQkJdW5pdExhYmVsLnNldExheW91dERhdGEoZm9ybURhdGEpOworCisJCQkvLyBUaGUgcmlnaHQgb2YgdGhlIHJhZGlvIGJ1dHRvbiBjb21wb3NpdGUgaXMgYXR0YWNoZWQgdG8gdGhlIHJpZ2h0CisJCQkvLyBvZiB0aGUgcGFyZW50IGNvbXBvc2l0ZS4KKwkJCWZvcm1EYXRhID0gbmV3IEZvcm1EYXRhKCk7CisJCQlmb3JtRGF0YS5yaWdodCA9IG5ldyBGb3JtQXR0YWNobWVudCgxMDAsIDApOworCQkJZ3JvdXAuc2V0TGF5b3V0RGF0YShmb3JtRGF0YSk7CisKKwkJCS8vIFRoaXMgY2FsbCB0YWtlcyB0aGUgZmVhdHVyZSBhbmQgYWRhcHRzIGl0IHRvIGEgbW9kaWZpZXIgdGhhdCBkb2VzCisJCQkvLyBub3RoaW5nLiBXaGVuIHdlIGNhbGwgc2V0RmVhdHVyZU1vZGlmaWVyIHRoYXQgbW9kaWZpZXIgaXMgYWRhcHRlZAorCQkJLy8gdG8gYSBGZWF0dXJlTW9kaWZpZXJFZGl0Q29tcG9zaXRlIChhbmQgYXNzaWduZWQgdG8KKwkJCS8vIGVkaXRDb21wb3NpdGUpLiBUaGF0IGNvbXBvc2l0ZSBkb2Vzbid0IGFsbG93IGVkaXRpbmcsIGJ1dCwKKwkJCS8vIGluc3RlYWQsIGRpc3BsYXlzIGEgImRlZmF1bHQiIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBmZWF0dXJlJ3MKKwkJCS8vIHZhbHVlLiBGb3IgYSBTdHJpbmcsIGl0IHdvdWxkIGp1c3QgZGlzcGxheSB0aGUgdmFsdWUgb2YgdGhlCisJCQkvLyBTdHJpbmcsIGZvciBhIG51bWJlciBpdCBqdXN0IGRpc3BsYXlzIGEgc3RyaW5nIHJlcHJlc2VudGluZyB0aGUKKwkJCS8vIHZhbHVlIG9mIHRoZSBudW1iZXIKKwkJCXNldEZlYXR1cmVNb2RpZmllcihFU3RydWN0dXJhbEZlYXR1cmVGZWF0dXJlTW9kaWZpZXJBZGFwdGVyRmFjdG9yeS5JTlNUQU5DRQorCQkJCQkuYWRhcHQoZmVhdHVyZSwgTk9QTW9kaWZpZXIuY2xhc3MpKTsKKwkJCXN3aXRjaFRvRmVhdHVyZU1vZGlmaWVyKHRhcmdldCwgcGFyZW50TmV3TW9kaWZpZXJQYWdlKTsKKworCQkJbm9uZUJ1dHRvbi5hZGRTZWxlY3Rpb25MaXN0ZW5lcihuZXcgU2VsZWN0aW9uQWRhcHRlcigpIHsKKwkJCQlAT3ZlcnJpZGUKKwkJCQlwdWJsaWMgdm9pZCB3aWRnZXRTZWxlY3RlZCgKKwkJCQkJCUBTdXBwcmVzc1dhcm5pbmdzKCJ1bnVzZWQiKSBmaW5hbCBTZWxlY3Rpb25FdmVudCBlKSB7CisJCQkJCS8vIFB1dCB1cCB0aGUgZGVmYXVsdD8KKwkJCQkJaWYgKG5vbmVCdXR0b24uZ2V0U2VsZWN0aW9uKCkKKwkJCQkJCQkmJiAhKGZlYXR1cmVNb2RpZmllciBpbnN0YW5jZW9mIE5PUE1vZGlmaWVyKSkgeworCQkJCQkJLy8gWWVzCisJCQkJCQlmaW5hbCBGZWF0dXJlTW9kaWZpZXIgZm0gPSBFU3RydWN0dXJhbEZlYXR1cmVGZWF0dXJlTW9kaWZpZXJBZGFwdGVyRmFjdG9yeS5JTlNUQU5DRQorCQkJCQkJLmFkYXB0KGZlYXR1cmUsIE5PUE1vZGlmaWVyLmNsYXNzKTsKKwkJCQkJCWZtLnNldFRhcmdldChmZWF0dXJlKTsKKwkJCQkJCXNldEZlYXR1cmVNb2RpZmllcihmbSk7CisJCQkJCQlzd2l0Y2hUb0ZlYXR1cmVNb2RpZmllcih0YXJnZXQsCisJCQkJCQkJCXBhcmVudE5ld01vZGlmaWVyUGFnZSk7CisJCQkJCX0gLy8gaWYKKwkJCQl9CisJCQl9KTsKKwkJCQorCQkJc2luZ2xlQnV0dG9uLmFkZFNlbGVjdGlvbkxpc3RlbmVyKG5ldyBTZWxlY3Rpb25BZGFwdGVyKCkgeworCQkJCUBPdmVycmlkZQorCQkJCXB1YmxpYyB2b2lkIHdpZGdldFNlbGVjdGVkKAorCQkJCQkJQFN1cHByZXNzV2FybmluZ3MoInVudXNlZCIpIGZpbmFsIFNlbGVjdGlvbkV2ZW50IGUpIHsKKwkJCQkJLy8gUHV0IHVwIHRoZSBzaW5nbGUgdmFsdWUgbW9kaWZpZXI/CisJCQkJCWlmIChzaW5nbGVCdXR0b24uZ2V0U2VsZWN0aW9uKCkKKwkJCQkJCQkmJiAhKGZlYXR1cmVNb2RpZmllciBpbnN0YW5jZW9mIFNpbmdsZVZhbHVlTW9kaWZpZXIpKSB7CisJCQkJCQkvLyBZZXMKKwkJCQkJCXNldEZlYXR1cmVNb2RpZmllcihFU3RydWN0dXJhbEZlYXR1cmVGZWF0dXJlTW9kaWZpZXJBZGFwdGVyRmFjdG9yeS5JTlNUQU5DRQorCQkJCQkJCQkuYWRhcHQoZmVhdHVyZSwgU2luZ2xlVmFsdWVNb2RpZmllci5jbGFzcykpOworCQkJCQkJc3dpdGNoVG9GZWF0dXJlTW9kaWZpZXIodGFyZ2V0LAorCQkJCQkJCQlwYXJlbnROZXdNb2RpZmllclBhZ2UpOworCQkJCQkJLy8gc2VsZWN0UmFuZ2VCdXR0b24oKTsKKwkJCQkJfSAvLyBpZgorCQkJCX0KKwkJCX0pOworCQkJCisJCQlyYW5nZUJ1dHRvbi5hZGRTZWxlY3Rpb25MaXN0ZW5lcihuZXcgU2VsZWN0aW9uQWRhcHRlcigpIHsKKwkJCQlAT3ZlcnJpZGUKKwkJCQlwdWJsaWMgdm9pZCB3aWRnZXRTZWxlY3RlZCgKKwkJCQkJCUBTdXBwcmVzc1dhcm5pbmdzKCJ1bnVzZWQiKSBmaW5hbCBTZWxlY3Rpb25FdmVudCBlKSB7CisJCQkJCS8vIFB1dCB1cCB0aGUgcmFuZ2UgbW9kaWZpZXI/CisJCQkJCWlmIChyYW5nZUJ1dHRvbi5nZXRTZWxlY3Rpb24oKQorCQkJCQkJCSYmICEoZmVhdHVyZU1vZGlmaWVyIGluc3RhbmNlb2YgUmFuZ2VNb2RpZmllcikpIHsKKwkJCQkJCS8vIFllcworCQkJCQkJc2V0RmVhdHVyZU1vZGlmaWVyKEVTdHJ1Y3R1cmFsRmVhdHVyZUZlYXR1cmVNb2RpZmllckFkYXB0ZXJGYWN0b3J5LklOU1RBTkNFCisJCQkJCQkJCS5hZGFwdChmZWF0dXJlLCBSYW5nZU1vZGlmaWVyLmNsYXNzKSk7CisJCQkJCQlzd2l0Y2hUb0ZlYXR1cmVNb2RpZmllcih0YXJnZXQsCisJCQkJCQkJCXBhcmVudE5ld01vZGlmaWVyUGFnZSk7CisJCQkJCQkvLyBzZWxlY3RSYW5nZUJ1dHRvbigpOworCQkJCQl9IC8vIGlmCisJCQkJfQorCQkJfSk7CisJCQlzZXF1ZW5jZUJ1dHRvbi5hZGRTZWxlY3Rpb25MaXN0ZW5lcihuZXcgU2VsZWN0aW9uQWRhcHRlcigpIHsKKwkJCQlAT3ZlcnJpZGUKKwkJCQlwdWJsaWMgdm9pZCB3aWRnZXRTZWxlY3RlZCgKKwkJCQkJCUBTdXBwcmVzc1dhcm5pbmdzKCJ1bnVzZWQiKSBmaW5hbCBTZWxlY3Rpb25FdmVudCBlKSB7CisJCQkJCS8vIFB1dCB1cCB0aGUgc2VxdWVuY2UgbW9kaWZpZXI/CisJCQkJCWlmIChzZXF1ZW5jZUJ1dHRvbi5nZXRTZWxlY3Rpb24oKQorCQkJCQkJCSYmICEoZmVhdHVyZU1vZGlmaWVyIGluc3RhbmNlb2YgU2VxdWVuY2VNb2RpZmllcikpIHsKKwkJCQkJCS8vIFllcworCQkJCQkJc2V0RmVhdHVyZU1vZGlmaWVyKEVTdHJ1Y3R1cmFsRmVhdHVyZUZlYXR1cmVNb2RpZmllckFkYXB0ZXJGYWN0b3J5LklOU1RBTkNFCisJCQkJCQkJCS5hZGFwdChmZWF0dXJlLCBTZXF1ZW5jZU1vZGlmaWVyLmNsYXNzKSk7CisJCQkJCQlzd2l0Y2hUb0ZlYXR1cmVNb2RpZmllcih0YXJnZXQsCisJCQkJCQkJCXBhcmVudE5ld01vZGlmaWVyUGFnZSk7CisJCQkJCQkvLyBzZWxlY3RTZXF1ZW5jZUJ1dHRvbigpOworCQkJCQl9IC8vIGlmCisJCQkJfQorCQkJfSk7CisJCQkKKwkJCS8vIFRoZSBGZWF0dXJlIE1vZGlmaWVyIENvbXBvc2l0ZSBtdXN0IGhhdmUgCisJCQkvLyBmaXhlZCBzaXplIHRvIHB1dCB0aGVzZSBpbiBhIHNjcm9sbCBwYW5lCisJCQlzZXRTaXplKDUwMCwxNTApOworCisJCX0gLy8gRmVhdHVyZU1vZGlmaWVyQ29tcG9zaXRlCisKKwkJdm9pZCBzZWxlY3ROb25lQnV0dG9uKCkgeworCQkJbm9uZUJ1dHRvbi5zZXRTZWxlY3Rpb24odHJ1ZSk7CisJCQlzaW5nbGVCdXR0b24uc2V0U2VsZWN0aW9uKGZhbHNlKTsKKwkJCXJhbmdlQnV0dG9uLnNldFNlbGVjdGlvbihmYWxzZSk7CisJCQlzZXF1ZW5jZUJ1dHRvbi5zZXRTZWxlY3Rpb24oZmFsc2UpOworCQl9IC8vIHNlbGVjdE5vbmVCdXR0b24KKworCQlGZWF0dXJlTW9kaWZpZXJFZGl0Q29tcG9zaXRlIGNyZWF0ZURlZmF1bHRFZGl0Q29tcG9zaXRlKAorCQkJCWZpbmFsIENvbXBvc2l0ZSBwYXJlbnQsCisJCQkJZmluYWwgTmV3TW9kaWZpZXJQYWdlIHBhcmVudE5ld01vZGlmaWVyUGFnZSwKKwkJCQlmaW5hbCBJZGVudGlmaWFibGUgaWRlbnRpZmlhYmxlLAorCQkJCWZpbmFsIEVTdHJ1Y3R1cmFsRmVhdHVyZSBmZWF0dXJlKSB7CisJCQlmaW5hbCBGZWF0dXJlTW9kaWZpZXJFZGl0Q29tcG9zaXRlIHJldFZhbHVlID0gbmV3IEZlYXR1cmVNb2RpZmllckVkaXRDb21wb3NpdGUoCisJCQkJCXBhcmVudCwgcGFyZW50TmV3TW9kaWZpZXJQYWdlLCBudWxsKSB7CisJCQkJQE92ZXJyaWRlCisJCQkJcHJvdGVjdGVkIGJvb2xlYW4gdmFsaWRhdGUoKSB7CisJCQkJCXJldHVybiB0cnVlOworCQkJCX0KKwkJCX07CisJCQlyZXRWYWx1ZS5zZXRMYXlvdXQobmV3IEdyaWRMYXlvdXQoKSk7CisJCQlmaW5hbCBMYWJlbCBsYWJlbCA9IG5ldyBMYWJlbChyZXRWYWx1ZSwgU1dULkJPUkRFUiB8IFNXVC5UUkFJTCk7CisJCQlsYWJlbC5zZXRUZXh0KGlkZW50aWZpYWJsZS5lR2V0KGZlYXR1cmUpLnRvU3RyaW5nKCkpOworCQkJZmluYWwgR3JpZERhdGEgZ3JpZERhdGEgPSBuZXcgR3JpZERhdGEoKTsKKwkJCWdyaWREYXRhLmhvcml6b250YWxBbGlnbm1lbnQgPSBTV1QuRU5EOworCQkJbGFiZWwuc2V0TGF5b3V0RGF0YShncmlkRGF0YSk7CisJCQlyZXR1cm4gcmV0VmFsdWU7CisJCX0gLy8gY3JlYXRlRGVmYXVsdEVkaXRDb21wb3NpdGUKKworCQl2b2lkIHN3aXRjaFRvRmVhdHVyZU1vZGlmaWVyKGZpbmFsIEVPYmplY3QgdGFyZ2V0LAorCQkJCWZpbmFsIE5ld01vZGlmaWVyUGFnZSBwYXJlbnROZXdNb2RpZmllclBhZ2UpIHsKKwkJCS8vIFRoZSB0YXJnZXQgb2YgdGhlIGZlYXR1cmVNb2RpZmllciBuZWVkcyB0byBiZSBhZGp1c3RlZCBoZXJlLiBJdAorCQkJLy8gd291bGQgdHlwaWNhbGx5IGJlIGlkZW50aWZpYWJsZSwgYnV0IGlmIGlkZW50aWZpYWJsZSBpcyBhbgorCQkJLy8gaW5zdGFuY2Ugb2YgYSBMYWJlbCB0aGVuIHRoZQorCQkJLy8gZmVhdHVyZXMgb2YgdGhlIHZhbHVlIG9mIHRoZSBjdXJyZW50IHZhbHVlIGZlYXR1cmUgb2YgdGhlCisJCQkvLyBpZGVudGlmaWFibGUgaGF2ZSBiZWVuIGluY2x1ZGVkIGFzIGZlYXR1cmVzLiBUaGUgcHJvYmxlbSBpcyB0aGF0CisJCQkvLyB3aGVuIHRoYXQgaGFwcGVucyB0aGUgdGFyZ2V0IG9mIHRoZSBGZWF0dXJlTW9kaWZpZXIgbmVlZHMgdG8gYmUKKwkJCS8vIHRoZSBsYWJlbCB2YWx1ZSBhbmQgbm90IHRoZSBpZGVudGlmaWFibGUuCisJCQkvLyBBIGxhYmVsCisJCQlpZiAodGFyZ2V0IGluc3RhbmNlb2Ygb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkxhYmVsCisJCQkJCSYmICh0YXJnZXQuZUNsYXNzKCkgIT0gZmVhdHVyZU1vZGlmaWVyCisJCQkJCQkJLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZSgpLmdldEVDb250YWluaW5nQ2xhc3MoKSkpIHsKKwkJCQkvLyBZZXMKKwkJCQlmaW5hbCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguTGFiZWwgbGFiZWwgPSAob3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkxhYmVsKSB0YXJnZXQ7CisJCQkJZmluYWwgTGFiZWxWYWx1ZSBsdiA9IChMYWJlbFZhbHVlKSBsYWJlbAorCQkJCQkJLmVHZXQoR3JhcGhQYWNrYWdlLkxpdGVyYWxzLkxBQkVMX19DVVJSRU5UX1ZBTFVFKTsKKwkJCQlmZWF0dXJlTW9kaWZpZXIuc2V0VGFyZ2V0KGx2KTsKKwkJCX0gLy8gaWYgc3RhdGljIGxhYmVsCisJCQllbHNlIHsKKwkJCQlmZWF0dXJlTW9kaWZpZXIuc2V0VGFyZ2V0KHRhcmdldCk7CisJCQl9CisKKwkJCWZpbmFsIEZlYXR1cmVNb2RpZmllckVkaXRDb21wb3NpdGVBZGFwdGVyIGZtZWNBZGFwdGVyID0gKEZlYXR1cmVNb2RpZmllckVkaXRDb21wb3NpdGVBZGFwdGVyKSBGZWF0dXJlTW9kaWZpZXJGZWF0dXJlTW9kaWZpZXJFZGl0Q29tcG9zaXRlQWRhcHRlckZhY3RvcnkuSU5TVEFOQ0UKKwkJCQkJLmFkYXB0KGZlYXR1cmVNb2RpZmllciwKKwkJCQkJCQlGZWF0dXJlTW9kaWZpZXJFZGl0Q29tcG9zaXRlQWRhcHRlci5jbGFzcyk7CisJCQlmbWVjQWRhcHRlci5zZXRUYXJnZXQoZmVhdHVyZU1vZGlmaWVyKTsKKwkJCXNldEVkaXRDb21wb3NpdGUoZm1lY0FkYXB0ZXIuY3JlYXRlRWRpdENvbXBvc2l0ZSgKKwkJCQkJZWRpdENvbXBvc2l0ZUhvbGRlciwgdGFyZ2V0LCBwYXJlbnROZXdNb2RpZmllclBhZ2UpKTsKKwkJCWZtZWNBZGFwdGVyLnNldFNlbGVjdGVkQnV0dG9uKG5vbmVCdXR0b24sIHNpbmdsZUJ1dHRvbiwgcmFuZ2VCdXR0b24sCisJCQkJCXNlcXVlbmNlQnV0dG9uKTsKKwkJfSAvLyBzd2l0Y2hUb0ZlYXR1cmVNb2RpZmllcgorCisJCXZvaWQgc2V0RWRpdENvbXBvc2l0ZShmaW5hbCBGZWF0dXJlTW9kaWZpZXJFZGl0Q29tcG9zaXRlIGVkaXRDb21wb3NpdGUpIHsKKwkJCS8vIEdldCByaWQgb2YgdGhlIG9sZCBvbmU/CisJCQlpZiAodGhpcy5lZGl0Q29tcG9zaXRlICE9IG51bGwpIHsKKwkJCQkvLyBZZXMKKwkJCQl0aGlzLmVkaXRDb21wb3NpdGUuZGlzcG9zZSgpOworCQkJfSAvLyBpZgorCQkJdGhpcy5lZGl0Q29tcG9zaXRlID0gZWRpdENvbXBvc2l0ZTsKKwkJCWdldFNoZWxsKCkucGFjaygpOworCQkJLy8gZ2V0U2hlbGwoKS5sYXlvdXQoKTsKKwkJCWdldFNoZWxsKCkubGF5b3V0KHRydWUsIHRydWUpOworCQl9IC8vIHNldEVkaXRDb21wb3NpdGUKKworCQkvKioKKwkJICogQHJldHVybiB0aGUge0BsaW5rIEZlYXR1cmVNb2RpZmllcn0sIHBvc3NpYmx5IDxjb2RlPm51bGw8L2NvZGU+CisJCSAqLworCQlwdWJsaWMgZmluYWwgRmVhdHVyZU1vZGlmaWVyIGdldEZlYXR1cmVNb2RpZmllcigpIHsKKwkJCXJldHVybiBmZWF0dXJlTW9kaWZpZXI7CisJCX0KKworCQkvKioKKwkJICogQHBhcmFtIGZlYXR1cmVNb2RpZmllcgorCQkgKiAgICAgICAgICAgIHRoZSB7QGxpbmsgRmVhdHVyZU1vZGlmaWVyfSB0byBzZXQKKwkJICovCisJCXByb3RlY3RlZCBmaW5hbCB2b2lkIHNldEZlYXR1cmVNb2RpZmllcigKKwkJCQlmaW5hbCBGZWF0dXJlTW9kaWZpZXIgZmVhdHVyZU1vZGlmaWVyKSB7CisJCQl0aGlzLmZlYXR1cmVNb2RpZmllciA9IGZlYXR1cmVNb2RpZmllcjsKKwkJfQorCX0gLy8gRmVhdHVyZU1vZGlmaWVyQ29tcG9zaXRlCisKKwkvKioKKwkgKiBUaGlzIGNsYXNzIGlzIGEge0BsaW5rIENvbXBvc2l0ZX0gdGhhdCBhbGxvd3MgYSB1c2VyIHRvIHNwZWNpZnkgdGhlCisJICogZGV0YWlscyBvZiBhIHtAbGluayBGZWF0dXJlTW9kaWZpZXJ9LgorCSAqLworCWFic3RyYWN0IHB1YmxpYyBzdGF0aWMgY2xhc3MgRmVhdHVyZU1vZGlmaWVyRWRpdENvbXBvc2l0ZSBleHRlbmRzIENvbXBvc2l0ZSB7CisKKwkJLyoqCisJCSAqIFRoaXMgaXMgdGhlIHtAbGluayBGZWF0dXJlTW9kaWZpZXJ9IHRoYXQgdGhpcyB7QGxpbmsgQ29tcG9zaXRlfSBpcworCQkgKiBlZGl0aW5nLgorCQkgKi8KKwkJcHJvdGVjdGVkIEZlYXR1cmVNb2RpZmllciBmZWF0dXJlTW9kaWZpZXIgPSBudWxsOworCisJCS8qKgorCQkgKiBUaGlzIGlzIHRoZSB7QGxpbmsgTmV3TW9kaWZpZXJQYWdlfSB0aGF0IGlzIHRoZSB1bHRpbWF0ZSBwYXJlbnQgb2YKKwkJICogdGhlIHBhcmVudCB7QGxpbmsgQ29tcG9zaXRlfQorCQkgKi8KKwkJcHJvdGVjdGVkIE5ld01vZGlmaWVyUGFnZSBwYXJlbnROZXdNb2RpZmllclBhZ2U7CisKKwkJcHJvdGVjdGVkIE1vZGlmeUxpc3RlbmVyIG1vZGlmeUxpc3RlbmVyID0gbmV3IE1vZGlmeUxpc3RlbmVyKCkgeworCQkJcHVibGljIHZvaWQgbW9kaWZ5VGV4dCgKKwkJCQkJQFN1cHByZXNzV2FybmluZ3MoInVudXNlZCIpIGZpbmFsIE1vZGlmeUV2ZW50IGUpIHsKKwkJCQlwYXJlbnROZXdNb2RpZmllclBhZ2Uuc2V0UGFnZUNvbXBsZXRlKHZhbGlkYXRlKCkpOworCQkJfQorCQl9OworCisJCS8qKgorCQkgKiBAcGFyYW0gcGFyZW50CisJCSAqICAgICAgICAgICAgdGhlIHBhcmVudCB7QGxpbmsgQ29tcG9zaXRlfQorCQkgKiBAcGFyYW0gcGFyZW50TmV3TW9kaWZpZXJQYWdlCisJCSAqICAgICAgICAgICAgdGhlIHVsdGltYXRlIHBhcmVudCB7QGxpbmsgTmV3TW9kaWZpZXJQYWdlfSBvZiB0aGUgcGFyZW50CisJCSAqICAgICAgICAgICAge0BsaW5rIENvbXBvc2l0ZX0KKwkJICogQHBhcmFtIGZlYXR1cmVNb2RpZmllcgorCQkgKiAgICAgICAgICAgIHRoZSB7QGxpbmsgRmVhdHVyZU1vZGlmaWVyfSBiZWluZyBlZGl0ZWQuCisJCSAqLworCQlwdWJsaWMgRmVhdHVyZU1vZGlmaWVyRWRpdENvbXBvc2l0ZShmaW5hbCBDb21wb3NpdGUgcGFyZW50LAorCQkJCWZpbmFsIE5ld01vZGlmaWVyUGFnZSBwYXJlbnROZXdNb2RpZmllclBhZ2UsCisJCQkJZmluYWwgRmVhdHVyZU1vZGlmaWVyIGZlYXR1cmVNb2RpZmllcikgeworCQkJc3VwZXIocGFyZW50LCBTV1QuTk9ORSk7CisJCQl0aGlzLnBhcmVudE5ld01vZGlmaWVyUGFnZSA9IHBhcmVudE5ld01vZGlmaWVyUGFnZTsKKwkJCXRoaXMuZmVhdHVyZU1vZGlmaWVyID0gZmVhdHVyZU1vZGlmaWVyOworCQl9IC8vIEZlYXR1cmVNb2RpZmllckVkaXRDb21wb3NpdGUKKworCQkvKioKKwkJICogQHJldHVybiB0aGUge0BsaW5rIEZlYXR1cmVNb2RpZmllcn0KKwkJICovCisJCXB1YmxpYyBmaW5hbCBGZWF0dXJlTW9kaWZpZXIgZ2V0RmVhdHVyZU1vZGlmaWVyKCkgeworCQkJcmV0dXJuIGZlYXR1cmVNb2RpZmllcjsKKwkJfQorCisJCS8qKgorCQkgKiBAcmV0dXJuIHRoZSBtb2RpZnlMaXN0ZW5lcgorCQkgKi8KKwkJcHVibGljIGZpbmFsIE1vZGlmeUxpc3RlbmVyIGdldE1vZGlmeUxpc3RlbmVyKCkgeworCQkJcmV0dXJuIG1vZGlmeUxpc3RlbmVyOworCQl9CisKKwkJLyoqCisJCSAqIEFzIGEgc2lkZS1lZmZlY3QgdGhpcyBtZXRob2Qgc2V0cyB0aGUgZXJyb3IgbWVzc2FnZSBvZiB0aGUKKwkJICoge0BsaW5rICNwYXJlbnROZXdNb2RpZmllclBhZ2V9IGlmIGl0IHJldHVybnMgPGNvZGU+ZmFsc2U8L2NvZGU+LgorCQkgKiAKKwkJICogQHJldHVybiA8Y29kZT50cnVlPC9jb2RlPiBpZiB0aGUKKwkJICogICAgICAgICB7QGxpbmsgRmVhdHVyZU1vZGlmaWVyRWRpdENvbXBvc2l0ZX0gaXMgdmFsaWQuCisJCSAqLworCQlhYnN0cmFjdCBwcm90ZWN0ZWQgYm9vbGVhbiB2YWxpZGF0ZSgpOworCisJfSAvLyBGZWF0dXJlTW9kaWZpZXJFZGl0Q29tcG9zaXRlCit9IC8vIE5ld01vZGlmaWVyUGFnZQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3dpemFyZHMvTmV3TW9kaWZpZXJXaXphcmQuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS93aXphcmRzL05ld01vZGlmaWVyV2l6YXJkLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjI4YjA4NgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS93aXphcmRzL05ld01vZGlmaWVyV2l6YXJkLmphdmEKQEAgLTAsMCArMSwyMzAgQEAKKy8vIE5ld01vZGlmaWVyV2l6YXJkLmphdmEKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS51aS53aXphcmRzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUuY29tbWFuZHMuQWJzdHJhY3RIYW5kbGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUuY29tbWFuZHMuRXhlY3V0aW9uRXZlbnQ7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5jb21tYW5kcy5FeGVjdXRpb25FeGNlcHRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5jb21tYW5kcy5JSGFuZGxlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5EZWxlZ2F0aW5nV3JhcHBlckl0ZW1Qcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5TdHJ1Y3R1cmVkU2VsZWN0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLndpemFyZC5XaXphcmREaWFsb2c7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLlNURU1VUkk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5JZGVudGlmaWFibGU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkVkZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLk1vZGlmaWVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5Nb2RpZmllckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLk1vZGlmaWVyUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnVpLkFjdGl2YXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnVpLmFkYXB0ZXJzLm5ld21vZGlmaWVycGFnZS5OZXdNb2RpZmllclBhZ2VBZGFwdGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udWkuYWRhcHRlcnMubmV3bW9kaWZpZXJwYWdlLk5ld01vZGlmaWVyUGFnZUFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5JV29ya2JlbmNoV2luZG93OworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLmhhbmRsZXJzLkhhbmRsZXJVdGlsOworCisvKioKKyAqIFRoaXMgY2xhc3MgaXMgYSB7QGxpbmsgTmV3SWRlbnRpZmlhYmxlV2l6YXJkfSBmb3IgdGhhdCBjcmVhdGVzIG5ldyBTVEVNCisgKiB7QGxpbmsgTW9kaWZpZXJ9cy4KKyAqLworcHVibGljIGNsYXNzIE5ld01vZGlmaWVyV2l6YXJkIGV4dGVuZHMgTmV3SWRlbnRpZmlhYmxlV2l6YXJkIHsKKworCS8qKgorCSAqIFRoaXMgaXMgdGhlIHtAbGluayBJZGVudGlmaWFibGV9IGZvciB3aGljaCB0aGUgd2l6YXJkIGlzIGNyZWF0aW5nIGEKKwkgKiB7QGxpbmsgTW9kaWZpZXJ9LgorCSAqLworCXByaXZhdGUgRU9iamVjdCB0YXJnZXQ7CisJcHJpdmF0ZSBOZXdNb2RpZmllclBhZ2UgbmV3TW9kaWZpZXJQYWdlOworCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnVpLndpemFyZHMuTmV3SWRlbnRpZmlhYmxlV2l6YXJkI2dldFdpemFyZFRpdGxlKCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgU3RyaW5nIGdldFdpemFyZFRpdGxlKCkgeworCQlyZXR1cm4gTWVzc2FnZXMuZ2V0U3RyaW5nKCJOTW9kaWZpZXJXaXoud2l6YXJkX3RpdGxlIik7IC8vJE5PTi1OTFMtMSQKKwl9CisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0udWkud2l6YXJkcy5OZXdJZGVudGlmaWFibGVXaXphcmQjY3JlYXRlTmV3SWRlbnRpZmlhYmxlUGFnZSgpCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIE5ld0lkZW50aWZpYWJsZVBhZ2UgY3JlYXRlTmV3SWRlbnRpZmlhYmxlUGFnZSgpIHsKKworCQkvLyBXZSB1c2UgYW4gYWRhcHRlciBmYWN0b3J5IHRvIGFkYXB0IHRoZSBJZGVudGlmaWFibGUgaW50byBhCisJCS8vIE5ld01vZGlmaWVyUGFnZS4gV2UgZG8gdGhpcyBiZWNhdXNlIHRoZSB1bml2ZXJzZSBvZiBJZGVudGlmaWFibGVzIGlzCisJCS8vIHVubGltaXRlZC4gVGhlIG51bWJlciBhbmQgdHlwZXMgb2YgZmllbGRzIGNhbiB2YXJ5IHdpZGVseS4gVGhlCisJCS8vIGFkYXB0ZXIgZmFjdG9yeSBpcyBDb21wb3NhYmxlIHdoaWNoIG1lYW5zIHRoYXQgaXQgbWFpbnRhaW5zIGFuCisJCS8vIGV4dGVuc2libGUgY29sbGVjdGlvbiBvZiBvdGhlciBmYWN0b3JpZXMgdGhhdCBjYW4gYmUgdXNlZCB0byBwZXJmb3JtCisJCS8vIHRoZSBhZGFwdGlvbi4gRm9yIGluc3RhbmNlLCBhIG5ldyBEZWNvcmF0b3IgKGEgdHlwZSBvZiBJZGVudGlmaWFibGUpCisJCS8vIHRoYXQgaW1wbGVtZW50cyBhIGRpc2Vhc2UgbW9kZWwgY29tcHV0YXRpb24gY2FuIGJlIGFkYXB0ZWQgYnkgdGhlCisJCS8vIGFkZGl0aW9uIG9mIGEgZmFjdG9yeSB0aGF0IHJlY29nbml6ZXMgaXQuCisJCWZpbmFsIE5ld01vZGlmaWVyUGFnZUFkYXB0ZXIgYWRhcHRlciA9IChOZXdNb2RpZmllclBhZ2VBZGFwdGVyKSBOZXdNb2RpZmllclBhZ2VBZGFwdGVyRmFjdG9yeS5JTlNUQU5DRQorCQkJCS5hZGFwdCh0YXJnZXQsIE5ld01vZGlmaWVyUGFnZUFkYXB0ZXIuY2xhc3MpOworCQkvLyBXZXJlIHdlIHN1Y2Nlc3NmdWwgaW4gYWRhcHRpbmc/CisJCWlmIChhZGFwdGVyICE9IG51bGwpIHsKKwkJCS8vIFllcworCQkJYWRhcHRlci5zZXRUYXJnZXQodGFyZ2V0KTsKKwkJCW5ld01vZGlmaWVyUGFnZSA9IGFkYXB0ZXIuY3JlYXRlTmV3TW9kaWZpZXJQYWdlKCk7CisJCX0gLy8gaWYKKwkJZWxzZSB7CisJCQkvLyBObworCQkJQWN0aXZhdG9yLmxvZ0Vycm9yKAorCQkJCQkiSW50ZXJuYWwgRXJyb3I6IGNvdWxkIG5vdCBjcmVhdGUgTmV3TW9kaWZpZXJQYWdlIGZvciBcIiIKKwkJCQkJCQkrIHRhcmdldC5nZXRDbGFzcygpLmdldE5hbWUoKSArICJcIiIsIG51bGwpOworCQkJbmV3TW9kaWZpZXJQYWdlID0gbmV3IE5ld01vZGlmaWVyUGFnZSh0YXJnZXQpIHsKKwkJCQlAT3ZlcnJpZGUKKwkJCQlwcm90ZWN0ZWQgQ29tcG9zaXRlIGNyZWF0ZVNwZWNpZmljQ29tcG9zaXRlKAorCQkJCQkJQFN1cHByZXNzV2FybmluZ3MoInVudXNlZCIpIGZpbmFsIENvbXBvc2l0ZSBwYXJlbnQpIHsKKwkJCQkJcmV0dXJuIG51bGw7CisJCQkJfQorCQkJfTsKKwkJfSAvLyBlbHNlCisJCQorCQl0aGlzLnNldEhlbHBDb250ZXh0SWQoIm9yZy5lY2xpcHNlLnN0ZW0uZG9jLm5ld21vZGlmaWVyX2NvbnRleHRpZCIpOyAvL0hFUkUKKworCQlyZXR1cm4gbmV3TW9kaWZpZXJQYWdlOworCX0gLy8gY3JlYXRlTmV3SWRlbnRpZmlhYmxlUGFnZQorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnVpLndpemFyZHMuTmV3SWRlbnRpZmlhYmxlV2l6YXJkI2NyZWF0ZUR1YmxpbkNvcmVQYWdlKCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgRHVibGluQ29yZVBhZ2UgY3JlYXRlRHVibGluQ29yZVBhZ2UoKSB7CisJCXJldHVybiBuZXcgRHVibGluQ29yZVBhZ2UoKSB7CisJCQlAT3ZlcnJpZGUKKwkJCXByb3RlY3RlZCB2b2lkIGluaXRpYWxpemVEQ0F0dHJpYnV0ZXMoKSB7CisJCQkJc3VwZXIuaW5pdGlhbGl6ZURDQXR0cmlidXRlcygpOworCQkJCWZvcm1hdC5zZXRUZXh0KE1vZGlmaWVyUGFja2FnZS5lTlNfVVJJKTsKKwkJCQlmb3JtYXQuc2V0RW5hYmxlZChmYWxzZSk7CisJCQkJdHlwZS5zZXRUZXh0KFNURU1VUkkuTU9ESUZJRVJfVFlQRV9VUkkudG9TdHJpbmcoKSk7CisJCQkJdHlwZS5zZXRFbmFibGVkKGZhbHNlKTsKKwkJCQkKKwkJCQl0aXRsZVRleHRGaWVsZC5zZXRUZXh0KE1lc3NhZ2VzLmdldFN0cmluZygiZGNfdGl0bGVfbW9kIikpOworCQkJCXNvdXJjZS5zZXRUZXh0KE1lc3NhZ2VzLmdldFN0cmluZygiZGNfc291cmNlX21vZCIpKTsKKwkJCQlkZXNjcmlwdGlvblRleHRGaWVsZC5zZXRUZXh0KE1lc3NhZ2VzLmdldFN0cmluZygiZGNfZGVzY19tb2QiKSk7CisJCQkJCisJCQl9CisJCX07CisJfSAvLyBjcmVhdGVEdWJsaW5Db3JlUGFnZQorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnVpLndpemFyZHMuTmV3SWRlbnRpZmlhYmxlV2l6YXJkI2NyZWF0ZUlkZW50aWZpYWJsZSgpCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIElkZW50aWZpYWJsZSBjcmVhdGVJZGVudGlmaWFibGUoKSB7CisJCWZpbmFsIE1vZGlmaWVyIHJldFZhbHVlID0gTW9kaWZpZXJGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVNb2RpZmllcigpOworCQlyZXRWYWx1ZS5zZXREdWJsaW5Db3JlKG5ld0R1YmxpbkNvcmVQYWdlLmNyZWF0ZUR1YmxpbkNvcmUoKSk7CisJCS8vIFdlIGFsbG93IEVkZ2VzIHRvIGJlIGNvbnNpZGVyZWQgdG8gYmUgIm1vZGlmaWFibGUiLCBidXQgd2UgcmVhbGx5CisJCS8vIG1lYW4gdGhhdCB0aGVpciBsYWJlbHMgY2FuIGJlIG1vZGlmaWVkLiBUaGlzIGlzIGEgY29udmVuaWVuY2UgZm9yIHRoZQorCQkvLyB1c2VyIHNvIHRoYXQgdGhleSBjYW4gcmlnaHQtY2xpY2sgb24gYW4gRWRnZSBhbmQgY3JlYXRlIGEgbW9kaWZpZXIKKwkJLy8gZm9yIHRoZWlyIGxhYmVsLiBUaGUgcHJvYmxlbSBpcyB0aGF0IHdlJ3ZlIGdvdCB0byBnZXQgdGhlIHJpZ2h0CisJCS8vIHRhcmdldCBVUkksIGlmIHdlIGp1c3QgZ2V0IHRoZSBVUkkgb2YgdGhlIElkZW50aWZpYWJsZSAod2hpY2ggY291bGQKKwkJLy8gYmUgYW4gRWRnZUxhYmVsKSB0aGVuIHdlJ2QgZ2V0IHRoZSBVUkkgb2YgdGhlIEVkZ2UgYW5kIG5vdCBpdHMgTGFiZWwuCisKKwkJLy8gSXMgdGhpcyBhbiBFZGdlPworCQlpZiAodGFyZ2V0IGluc3RhbmNlb2YgRWRnZSkgeworCQkJLy8gWWVzCisJCQlmaW5hbCBFZGdlIGVkZ2UgPSAoRWRnZSkgdGFyZ2V0OworCQkJcmV0VmFsdWUuc2V0VGFyZ2V0VVJJKGVkZ2UuZ2V0TGFiZWwoKS5nZXRVUkkoKSk7CisJCX0gZWxzZSBpZih0YXJnZXQgaW5zdGFuY2VvZiBJZGVudGlmaWFibGUpeworCQkJcmV0VmFsdWUuc2V0VGFyZ2V0VVJJKCgoSWRlbnRpZmlhYmxlKXRhcmdldCkuZ2V0VVJJKCkpOworCQl9IGVsc2UgcmV0VmFsdWUuc2V0VGFyZ2V0VVJJKG51bGwpOyAvLyBTdHJpbmcgdmFsdWUgb3IgZG91YmxlIHZhbHVlCisJCXJldFZhbHVlLmdldEZlYXR1cmVNb2RpZmllcnMoKS5hZGRBbGwoCisJCQkJbmV3TW9kaWZpZXJQYWdlLmdldEZlYXR1cmVNb2RpZmllcnMoKSk7CisJCXJldHVybiByZXRWYWx1ZTsKKwl9IC8vIGNyZWF0ZVNwZWNpZmljSWRlbnRpZmlhYmxlCisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0udWkud2l6YXJkcy5OZXdJZGVudGlmaWFibGVXaXphcmQjZ2V0U2VyaWFsaXphdGlvbkZvbGRlck5hbWUoKQorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCBTdHJpbmcgZ2V0U2VyaWFsaXphdGlvbkZvbGRlck5hbWUoKSB7CisJCXJldHVybiBOZXdTVEVNUHJvamVjdFdpemFyZC5NT0RJRklFUlNfRk9MREVSX05BTUU7CisJfSAvLyBnZXRTZXJpYWxpemF0aW9uRm9sZGVyTmFtZQorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnVpLndpemFyZHMuTmV3SWRlbnRpZmlhYmxlV2l6YXJkI2dldFNlcmlhbGl6YXRpb25GaWxlTmFtZUV4dGVuc2lvbigpCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIFN0cmluZyBnZXRTZXJpYWxpemF0aW9uRmlsZU5hbWVFeHRlbnNpb24oKSB7CisJCXJldHVybiBNb2RpZmllclBhY2thZ2UuZU5BTUU7CisJfSAvLyBnZXRJZGVudGlmaWFibGVTZXJpYWxpemF0aW9uRmlsZUV4dGVuc2lvbgorCisJLyoqCisJICogQHBhcmFtIHRhcmdldAorCSAqICAgICAgICAgICAgdGhlIHRhcmdldCB0aGF0IHRoZSB3aWxsCisJICogICAgICAgICAgICBtb2RpZnkuCisJICovCisJZmluYWwgcHVibGljIHZvaWQgc2V0VGFyZ2V0KGZpbmFsIEVPYmplY3QgdGFyZ2V0KSB7CisJCXRoaXMudGFyZ2V0ID0gdGFyZ2V0OworCX0KKworCS8qKgorCSAqIFRoaXMgY2xhc3MgaXMgYSB7QGxpbmsgSUhhbmRsZXJ9IGZvciB0aGUgY29tbWFuZCB0aGF0IGNyZWF0ZXMgYSBuZXcKKwkgKiBNb2RpZmllcldpemFyZC4KKwkgKi8KKwlwdWJsaWMgc3RhdGljIGNsYXNzIE5ld01vZGlmaWVyV2l6YXJkQ29tbWFuZEhhbmRsZXIgZXh0ZW5kcyBBYnN0cmFjdEhhbmRsZXIKKwkJCWltcGxlbWVudHMgSUhhbmRsZXIgeworCisJCS8qKgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLmNvcmUuY29tbWFuZHMuQWJzdHJhY3RIYW5kbGVyI2V4ZWN1dGUob3JnLmVjbGlwc2UuY29yZS5jb21tYW5kcy5FeGVjdXRpb25FdmVudCkKKwkJICovCisJCXB1YmxpYyBPYmplY3QgZXhlY3V0ZShmaW5hbCBFeGVjdXRpb25FdmVudCBleGVjdXRpb25FdmVudCkKKwkJCQl0aHJvd3MgRXhlY3V0aW9uRXhjZXB0aW9uIHsKKworCQkJZmluYWwgSVNlbGVjdGlvbiBzZWxlY3Rpb24gPSBIYW5kbGVyVXRpbAorCQkJCQkuZ2V0Q3VycmVudFNlbGVjdGlvbkNoZWNrZWQoZXhlY3V0aW9uRXZlbnQpOworCisJCQkvLyBTdHJ1Y3R1cmVkIFNlbGVjdGlvbj8KKwkJCWlmIChzZWxlY3Rpb24gaW5zdGFuY2VvZiBTdHJ1Y3R1cmVkU2VsZWN0aW9uKSB7CisJCQkJLy8gWWVzCisJCQkJdHJ5IHsKKwkJCQkJZmluYWwgT2JqZWN0IG9iaiA9ICgoU3RydWN0dXJlZFNlbGVjdGlvbikgc2VsZWN0aW9uKS50b0FycmF5KClbMF07CisJCQkJCUVPYmplY3QgdGFyZ2V0ID0gbnVsbDsKKwkJCQkJaWYob2JqIGluc3RhbmNlb2YgRGVsZWdhdGluZ1dyYXBwZXJJdGVtUHJvdmlkZXIpIAorCQkJCQkJdGFyZ2V0ID0gdW5yYXZlbCgoRGVsZWdhdGluZ1dyYXBwZXJJdGVtUHJvdmlkZXIpb2JqKTsKKwkJCQkJZWxzZSBpZiAob2JqIGluc3RhbmNlb2YgRU9iamVjdCkgCisJCQkJCQl0YXJnZXQgPSAoRU9iamVjdClvYmo7CisJCQkJCQorCQkJCQlpZih0YXJnZXQgIT0gbnVsbCkgeworCQkJCQkJZmluYWwgSVdvcmtiZW5jaFdpbmRvdyB3aW5kb3cgPSBIYW5kbGVyVXRpbAorCQkJCQkJCQkuZ2V0QWN0aXZlV29ya2JlbmNoV2luZG93Q2hlY2tlZChleGVjdXRpb25FdmVudCk7CisJCQkJCQlmaW5hbCBOZXdNb2RpZmllcldpemFyZCB3aXphcmQgPSBuZXcgTmV3TW9kaWZpZXJXaXphcmQoKTsKKwkJCQkJCXdpemFyZC5zZXRUYXJnZXQodGFyZ2V0KTsKKwkJCQkJCXdpemFyZC5pbml0KHdpbmRvdy5nZXRXb3JrYmVuY2goKSwKKwkJCQkJCQkJU3RydWN0dXJlZFNlbGVjdGlvbi5FTVBUWSk7CisJCQkJCQlmaW5hbCBXaXphcmREaWFsb2cgd2l6YXJkRGlhbG9nID0gbmV3IFNURU1XaXphcmREaWFsb2cod2luZG93CisJCQkJCQkJCS5nZXRTaGVsbCgpLCB3aXphcmQpOworCQkJCQkJd2l6YXJkRGlhbG9nLm9wZW4oKTsKKwkJCQkJfSBlbHNlIHsKKwkJCQkJCS8vIE5vCisJCQkJCQlBY3RpdmF0b3IubG9nRXJyb3IoCisJCQkJCQkJCSJJbnRlcm5hbCBlcnJvcjogYXR0ZW1wdGluZyB0byBjcmVhdGUgTW9kaWZpZXIgV2l6YXJkIGZvciBcIiIKKwkJCQkJCQkJCQkrIG9iai5nZXRDbGFzcygpLmdldE5hbWUoKSArICJcIiIsIG51bGwpOworCQkJCQl9IC8vIGVsc2UKKwkJCQl9IGNhdGNoIChBcnJheUluZGV4T3V0T2ZCb3VuZHNFeGNlcHRpb24gaW9vYmUpIHsKKwkJCQkJLy8gSWdub3JlLCBpdCBqdXN0IG1lYW5zIHRoZXJlIHdhc24ndCBhbnl0aGluZyByZWFsbHkgc2VsZWN0ZWQuCisJCQkJfQorCQkJfSAvLyBpZiBTdHJ1Y3R1cmVkU2VsZWN0aW9uCisKKwkJCXJldHVybiBudWxsOworCQl9IC8vIGV4ZWN1dGUKKwkJCisJCUVPYmplY3QgdW5yYXZlbChEZWxlZ2F0aW5nV3JhcHBlckl0ZW1Qcm92aWRlciBvYmopIHsKKwkJCWlmKG9iai5nZXRWYWx1ZSgpIGluc3RhbmNlb2YgRGVsZWdhdGluZ1dyYXBwZXJJdGVtUHJvdmlkZXIpCisJCQkJcmV0dXJuIHVucmF2ZWwoKERlbGVnYXRpbmdXcmFwcGVySXRlbVByb3ZpZGVyKW9iai5nZXRWYWx1ZSgpKTsKKwkJCWVsc2UgcmV0dXJuIChFT2JqZWN0KW9iai5nZXRWYWx1ZSgpOworCQl9CisJfSAvLyBOZXdNb2RpZmllcldpemFyZENvbW1hbmRIYW5kbGVyCit9IC8vIE5ld01vZGlmaWVyV2l6YXJkCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvd2l6YXJkcy9OZXdOb25JZGVudGlmaWFibGVXaXphcmQuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS93aXphcmRzL05ld05vbklkZW50aWZpYWJsZVdpemFyZC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFhNWQ3MmYKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvd2l6YXJkcy9OZXdOb25JZGVudGlmaWFibGVXaXphcmQuamF2YQpAQCAtMCwwICsxLDMzIEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0udWkud2l6YXJkczsNCisNCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyAqIENvcHlyaWdodCAoYykgMjAwNiwyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLg0KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMNCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjANCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdA0KKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sDQorICoNCisgKiBDb250cmlidXRvcnM6DQorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbg0KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KKw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS53aXphcmQuV2l6YXJkOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5JTmV3V2l6YXJkOw0KKw0KK2Fic3RyYWN0IHB1YmxpYyBjbGFzcyBOZXdOb25JZGVudGlmaWFibGVXaXphcmQgZXh0ZW5kcyBXaXphcmQgaW1wbGVtZW50cw0KKwkJSU5ld1dpemFyZCB7DQorDQorCS8qKg0KKwkgKiBUaGlzIGlzIHRoZSBjb250ZXh0IHNlbnNpdGl2ZSBoZWxwIGNvbnRleHQgaWQgZm9yIHRoZSB3aXphcmQNCisJICovDQorCQ0KKwlwcm90ZWN0ZWQgU3RyaW5nIGhlbHBDb250ZXh0SWQgPSAib3JnLmVjbGlwc2Uuc3RlbS5kb2MubmV3ZXhwZXJpbWVudF9jb250ZXh0aWQiOw0KKwkNCisJcHJvdGVjdGVkIFN0cmluZyBnZXRIZWxwQ29udGV4dElkKCkgew0KKwkJcmV0dXJuIGhlbHBDb250ZXh0SWQ7DQorCX0NCisNCisJcHJvdGVjdGVkIHZvaWQgc2V0SGVscENvbnRleHRJZChTdHJpbmcgaGVscENvbnRleHRJZCkgew0KKwkJdGhpcy5oZWxwQ29udGV4dElkID0gaGVscENvbnRleHRJZDsNCisJfQ0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvd2l6YXJkcy9OZXdQcmVkaWNhdGVXaXphcmQuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS93aXphcmRzL05ld1ByZWRpY2F0ZVdpemFyZC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJjMjFiOWEKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvd2l6YXJkcy9OZXdQcmVkaWNhdGVXaXphcmQuamF2YQpAQCAtMCwwICsxLDE1NSBAQAorLy8gTmV3UHJlZGljYXRlV2l6YXJkLmphdmEKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS51aS53aXphcmRzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLmNvbW1hbmRzLkFic3RyYWN0SGFuZGxlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLmNvbW1hbmRzLkV4ZWN1dGlvbkV2ZW50OworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUuY29tbWFuZHMuRXhlY3V0aW9uRXhjZXB0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUuY29tbWFuZHMuSUhhbmRsZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5TdHJ1Y3R1cmVkU2VsZWN0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLndpemFyZC5XaXphcmREaWFsb2c7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLlNURU1VUkk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5JZGVudGlmaWFibGU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZS5JZGVudGlmaWFibGVQcmVkaWNhdGVFeHByZXNzaW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUuUHJlZGljYXRlRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlLlByZWRpY2F0ZVBhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LlNXVDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGU7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaFdpbmRvdzsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5QbGF0Zm9ybVVJOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLmhhbmRsZXJzLkhhbmRsZXJVdGlsOworCisvKioKKyAqIFRoaXMgY2xhc3MgaXMgYSB7QGxpbmsgTmV3SWRlbnRpZmlhYmxlV2l6YXJkfSBmb3IgdGhhdCBjcmVhdGVzIG5ldyBTVEVNCisgKiB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZS5QcmVkaWNhdGV9cworICovCitwdWJsaWMgY2xhc3MgTmV3UHJlZGljYXRlV2l6YXJkIGV4dGVuZHMgTmV3SWRlbnRpZmlhYmxlV2l6YXJkIHsKKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS51aS53aXphcmRzLk5ld0lkZW50aWZpYWJsZVdpemFyZCNnZXRXaXphcmRUaXRsZSgpCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIFN0cmluZyBnZXRXaXphcmRUaXRsZSgpIHsKKwkJcmV0dXJuIE1lc3NhZ2VzLmdldFN0cmluZygiTlByZWRpY2F0ZVdpei53aXphcmRfdGl0bGUiKTsgLy8kTk9OLU5MUy0xJAorCX0KKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS51aS53aXphcmRzLk5ld0lkZW50aWZpYWJsZVdpemFyZCNjcmVhdGVOZXdJZGVudGlmaWFibGVQYWdlKCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgTmV3SWRlbnRpZmlhYmxlUGFnZSBjcmVhdGVOZXdJZGVudGlmaWFibGVQYWdlKCkgeworCQl0aGlzLnNldEhlbHBDb250ZXh0SWQoIm9yZy5lY2xpcHNlLnN0ZW0uZG9jLm5ld3ByZWRpY2F0ZV9jb250ZXh0aWQiKTsKKwkJcmV0dXJuIG5ldyBOZXdQcmVkaWNhdGVQYWdlKCk7CisJfQorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnVpLndpemFyZHMuTmV3SWRlbnRpZmlhYmxlV2l6YXJkI2NyZWF0ZUR1YmxpbkNvcmVQYWdlKCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgRHVibGluQ29yZVBhZ2UgY3JlYXRlRHVibGluQ29yZVBhZ2UoKSB7CisJCXJldHVybiBuZXcgRHVibGluQ29yZVBhZ2UoKSB7CisJCQlAT3ZlcnJpZGUKKwkJCXByb3RlY3RlZCB2b2lkIGluaXRpYWxpemVEQ0F0dHJpYnV0ZXMoKSB7CisJCQkJc3VwZXIuaW5pdGlhbGl6ZURDQXR0cmlidXRlcygpOworCQkJCWZvcm1hdC5zZXRUZXh0KFByZWRpY2F0ZVBhY2thZ2UuZU5TX1VSSSk7CisJCQkJZm9ybWF0LnNldEVuYWJsZWQoZmFsc2UpOworCQkJCXR5cGUuc2V0VGV4dChTVEVNVVJJLlBSRURJQ0FURV9UWVBFX1VSSS50b1N0cmluZygpKTsKKwkJCQl0eXBlLnNldEVuYWJsZWQoZmFsc2UpOworCQkJCQorCQkJCXRpdGxlVGV4dEZpZWxkLnNldFRleHQoTWVzc2FnZXMuZ2V0U3RyaW5nKCJkY190aXRsZV9wcmVkIikpOworCQkJCXNvdXJjZS5zZXRUZXh0KE1lc3NhZ2VzLmdldFN0cmluZygiZGNfc291cmNlX3ByZWQiKSk7CisJCQkJZGVzY3JpcHRpb25UZXh0RmllbGQuc2V0VGV4dChNZXNzYWdlcy5nZXRTdHJpbmcoImRjX2Rlc2NfcHJlZCIpKTsKKwkJCQkKKwkJCX0KKwkJfTsKKwl9IC8vIGNyZWF0ZUR1YmxpbkNvcmVQYWdlCisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0udWkud2l6YXJkcy5OZXdJZGVudGlmaWFibGVXaXphcmQjY3JlYXRlSWRlbnRpZmlhYmxlKCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgSWRlbnRpZmlhYmxlIGNyZWF0ZUlkZW50aWZpYWJsZSgpIHsKKwkJZmluYWwgSWRlbnRpZmlhYmxlUHJlZGljYXRlRXhwcmVzc2lvbiByZXRWYWx1ZSA9IFByZWRpY2F0ZUZhY3RvcnkuZUlOU1RBTkNFCisJCQkJLmNyZWF0ZUlkZW50aWZpYWJsZVByZWRpY2F0ZUV4cHJlc3Npb24oKTsKKwkJcmV0VmFsdWUuc2V0RHVibGluQ29yZShuZXdEdWJsaW5Db3JlUGFnZS5jcmVhdGVEdWJsaW5Db3JlKCkpOworCQlyZXR1cm4gcmV0VmFsdWU7CisJfSAvLyBjcmVhdGVJZGVudGlmaWFibGUKKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS51aS53aXphcmRzLk5ld0lkZW50aWZpYWJsZVdpemFyZCNnZXRTZXJpYWxpemF0aW9uRm9sZGVyTmFtZSgpCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIFN0cmluZyBnZXRTZXJpYWxpemF0aW9uRm9sZGVyTmFtZSgpIHsKKwkJcmV0dXJuIE5ld1NURU1Qcm9qZWN0V2l6YXJkLlBSRURJQ0FURVNfRk9MREVSX05BTUU7CisJfQorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnVpLndpemFyZHMuTmV3SWRlbnRpZmlhYmxlV2l6YXJkI2dldFNlcmlhbGl6YXRpb25GaWxlTmFtZUV4dGVuc2lvbigpCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIFN0cmluZyBnZXRTZXJpYWxpemF0aW9uRmlsZU5hbWVFeHRlbnNpb24oKSB7CisJCXJldHVybiBQcmVkaWNhdGVQYWNrYWdlLmVOQU1FOworCX0KKworCXByb3RlY3RlZCBzdGF0aWMgY2xhc3MgTmV3UHJlZGljYXRlUGFnZSBleHRlbmRzIE5ld0lkZW50aWZpYWJsZVBhZ2UgeworCisJCS8qKgorCQkgKiBEZWZhdWx0IENvbnN0cnVjdG9yCisJCSAqLworCQlwcm90ZWN0ZWQgTmV3UHJlZGljYXRlUGFnZSgpIHsKKwkJCXN1cGVyKE1lc3NhZ2VzLmdldFN0cmluZygiTlByZWRpY2F0ZVdpei5wYWdlX3RpdGxlIikpOyAvLyROT04tTkxTLTEkCisJCQlzZXRUaXRsZShNZXNzYWdlcy5nZXRTdHJpbmcoIk5QcmVkaWNhdGVXaXoucGFnZV90aXRsZSIpKTsgLy8kTk9OLU5MUy0xJAorCQkJc2V0RGVzY3JpcHRpb24oTWVzc2FnZXMuZ2V0U3RyaW5nKCJOUHJlZGljYXRlV2l6LnBhZ2VfZGVzY3JpcHRpb24iKSk7IC8vJE5PTi1OTFMtMSQKKwkJfSAvLyBOZXdQcmVkaWNhdGVQYWdlCisKKwkJQE92ZXJyaWRlCisJCXByb3RlY3RlZCBDb21wb3NpdGUgY3JlYXRlU3BlY2lmaWNDb21wb3NpdGUoZmluYWwgQ29tcG9zaXRlIHBhcmVudCkgeworCQkJUGxhdGZvcm1VSS5nZXRXb3JrYmVuY2goKS5nZXRIZWxwU3lzdGVtKCkuc2V0SGVscChwYXJlbnQsICJvcmcuZWNsaXBzZS5zdGVtLmRvYy5uZXdwcmVkaWNhdGVfY29udGV4dGlkIik7CisJCQlyZXR1cm4gbmV3IENvbXBvc2l0ZShwYXJlbnQsIFNXVC5OT05FKTsKKwkJfSAvLyBjcmVhdGVTcGVjaWZpY0NvbXBvc2l0ZQorCQkvKioKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnVpLndpemFyZHMuTmV3SWRlbnRpZmlhYmxlV2l6YXJkLk5ld0lkZW50aWZpYWJsZVBhZ2UjZ2V0RENEZXNjcmlwdGlvbigpCisJCSAqLworCQlAT3ZlcnJpZGUKKwkJcHJvdGVjdGVkIFN0cmluZyBnZXREQ0Rlc2NyaXB0aW9uKCkgeworCQkJLy8gTGVhdmUgZGVzY3JpcHRpb24vdGl0bGUgYmxhbmsKKwkJCXJldHVybiAiIjsKKy8vCQkJcmV0dXJuIE1lc3NhZ2VGb3JtYXQuZm9ybWF0KE1lc3NhZ2VzCisvLwkJCQkJLmdldFN0cmluZygiTlByZWRpY2F0ZVdpei5EQ19ERVNDUklQVElPTiIpLAorLy8JCQkJCW5ldyBPYmplY3RbXSB7IHNlcmlhbGl6YXRpb25GaWxlTmFtZUZpZWxkLmdldFRleHQoKSB9KTsKKwkJfSAvLyBnZXREQ0Rlc2NyaXB0aW9uCisKKwl9IC8vIE5ld1ByZWRpY2F0ZVBhZ2UKKworCS8qKgorCSAqIFRoaXMgY2xhc3MgaXMgYSB7QGxpbmsgSUhhbmRsZXJ9IGZvciB0aGUgY29tbWFuZCB0aGF0IGNyZWF0ZXMgYQorCSAqIHtAbGluayBOZXdQcmVkaWNhdGVXaXphcmR9CisJICovCisJcHVibGljIHN0YXRpYyBjbGFzcyBOZXdQcmVkaWNhdGVXaXphcmRDb21tYW5kSGFuZGxlciBleHRlbmRzCisJCQlBYnN0cmFjdEhhbmRsZXIgaW1wbGVtZW50cyBJSGFuZGxlciB7CisKKwkJLyoqCisJCSAqIEBzZWUgb3JnLmVjbGlwc2UuY29yZS5jb21tYW5kcy5BYnN0cmFjdEhhbmRsZXIjZXhlY3V0ZShvcmcuZWNsaXBzZS5jb3JlLmNvbW1hbmRzLkV4ZWN1dGlvbkV2ZW50KQorCQkgKi8KKwkJcHVibGljIE9iamVjdCBleGVjdXRlKGZpbmFsIEV4ZWN1dGlvbkV2ZW50IGV4ZWN1dGlvbkV2ZW50KQorCQkJCXRocm93cyBFeGVjdXRpb25FeGNlcHRpb24geworCQkJZmluYWwgSVdvcmtiZW5jaFdpbmRvdyB3aW5kb3cgPSBIYW5kbGVyVXRpbAorCQkJCQkuZ2V0QWN0aXZlV29ya2JlbmNoV2luZG93Q2hlY2tlZChleGVjdXRpb25FdmVudCk7CisJCQlmaW5hbCBOZXdQcmVkaWNhdGVXaXphcmQgd2l6YXJkID0gbmV3IE5ld1ByZWRpY2F0ZVdpemFyZCgpOworCQkJd2l6YXJkLmluaXQod2luZG93LmdldFdvcmtiZW5jaCgpLCBTdHJ1Y3R1cmVkU2VsZWN0aW9uLkVNUFRZKTsKKwkJCWZpbmFsIFdpemFyZERpYWxvZyB3aXphcmREaWFsb2cgPSBuZXcgU1RFTVdpemFyZERpYWxvZyh3aW5kb3cKKwkJCQkJLmdldFNoZWxsKCksIHdpemFyZCk7CisJCQl3aXphcmREaWFsb2cub3BlbigpOworCQkJcmV0dXJuIG51bGw7CisJCX0gLy8gZXhlY3V0ZQorCX0gLy8gTmV3UHJlZGljYXRlV2l6YXJkQ29tbWFuZEhhbmRsZXIKK30gLy8gTmV3UHJlZGljYXRlV2l6YXJkClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3dpemFyZHMvTmV3U1RFTVByb2plY3RXaXphcmQuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS93aXphcmRzL05ld1NURU1Qcm9qZWN0V2l6YXJkLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGQ4NTA5NAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS93aXphcmRzL05ld1NURU1Qcm9qZWN0V2l6YXJkLmphdmEKQEAgLTAsMCArMSwzMzQgQEAKKy8vIFByb2plY3RXaXphcmQuamF2YQorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnVpLndpemFyZHM7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYsMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqYXZhLmxhbmcucmVmbGVjdC5JbnZvY2F0aW9uVGFyZ2V0RXhjZXB0aW9uOworCitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5jb21tYW5kcy5BYnN0cmFjdEhhbmRsZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5jb21tYW5kcy5FeGVjdXRpb25FdmVudDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLmNvbW1hbmRzLkV4ZWN1dGlvbkV4Y2VwdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLmNvbW1hbmRzLklIYW5kbGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklDb250YWluZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUZvbGRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdERlc2NyaXB0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklXb3Jrc3BhY2VSb290OworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLlJlc291cmNlc1BsdWdpbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQ29yZUV4Y2VwdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSUNvbmZpZ3VyYXRpb25FbGVtZW50OworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JRXhlY3V0YWJsZUV4dGVuc2lvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVBhdGg7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQcm9ncmVzc01vbml0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLk51bGxQcm9ncmVzc01vbml0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBsYXRmb3JtOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVN0cnVjdHVyZWRTZWxlY3Rpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5TdHJ1Y3R1cmVkU2VsZWN0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLndpemFyZC5XaXphcmREaWFsb2c7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLkNvbnN0YW50czsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnVpLkFjdGl2YXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5JTmV3V2l6YXJkOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2g7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaFdpbmRvdzsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5hY3Rpb25zLldvcmtzcGFjZU1vZGlmeU9wZXJhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5kaWFsb2dzLldpemFyZE5ld1Byb2plY3RDcmVhdGlvblBhZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuaGFuZGxlcnMuSGFuZGxlclV0aWw7CisKKy8qKgorICogVGhpcyBjbGFzcyBpcyBhbiBFY2xpcHNlIHtAbGluayBXaXphcmR9IGZvciBjcmVhdGluZyBuZXcgU1RFTSBwcm9qZWN0cy4KKyAqLworcHVibGljIGNsYXNzIE5ld1NURU1Qcm9qZWN0V2l6YXJkIGV4dGVuZHMgTmV3Tm9uSWRlbnRpZmlhYmxlV2l6YXJkIGltcGxlbWVudHMgSU5ld1dpemFyZCwKKwkJSUV4ZWN1dGFibGVFeHRlbnNpb24geworCisJLyoqCisJICogVGhpcyBpcyB0aGUgaWRlbnRpZmllciBvZiB0aGUge0BsaW5rIFdpemFyZH0gdGhhdCBjcmVhdGVzIGEgU1RFTSBwcm9qZWN0LgorCSAqICoge0B2YWx1ZX0KKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBJRF9TVEVNX1BST0pFQ1RfV0laQVJEID0gQ29uc3RhbnRzLklEX1JPT1QKKwkJCSsgIi51aS53aXphcmRzLm5ld3N0ZW1wcm9qZWN0IjsgLy8kTk9OLU5MUy0xJAorCisJLyoqCisJICogVGhlIG5hbWUgb2YgdGhlIGZvbGRlciB1c2VkIHRvIHNlcmlhbGl6ZSB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkdyYXBofSBpbiBhIHByb2plY3QuCisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgR1JBUEhTX0ZPTERFUl9OQU1FID0gImdyYXBocyI7CisKKwkvKioKKwkgKiBUaGUgbmFtZSBvZiB0aGUgZm9sZGVyIHVzZWQgdG8gc2VyaWFsaXplIFJlY29yZGVkIFNpbXVsYXRpb25zIGluIGEgcHJvamVjdC4KKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBSRUNPUkRFRF9TSU1VTEFUSU9OU19GT0xERVJfTkFNRSA9ICJSZWNvcmRlZCBTaW11bGF0aW9ucyI7CisKKwkKKwkvKioKKwkgKiBUaGUgbmFtZSBvZiB0aGUgZm9sZGVyIHVzZWQgdG8gc2VyaWFsaXplIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuTW9kZWx9cyBpbiBhIHByb2plY3QuCisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgTU9ERUxTX0ZPTERFUl9OQU1FID0gIm1vZGVscyI7CisKKwkvKioKKwkgKiBUaGUgbmFtZSBvZiB0aGUgZm9sZGVyIHVzZWQgdG8gc2VyaWFsaXplIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2NlbmFyaW8uU2NlbmFyaW99cyBpbiBhIHByb2plY3QuCisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgU0NFQU5BUklPU19GT0xERVJfTkFNRSA9ICJzY2VuYXJpb3MiOworCisJLyoqCisJICogVGhlIG5hbWUgb2YgdGhlIGZvbGRlciB1c2VkIHRvIHNlcmlhbGl6ZSB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLkRlY29yYXRvcn1zIGluIGEgcHJvamVjdC4KKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBERUNPUkFUT1JTX0ZPTERFUl9OQU1FID0gImRlY29yYXRvcnMiOworCisJLyoqCisJICogVGhlIG5hbWUgb2YgdGhlIGZvbGRlciB1c2VkIHRvIHNlcmlhbGl6ZSB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNlcXVlbmNlci5TZXF1ZW5jZXJ9cyBpbiBhIHByb2plY3QuCisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgU0VRVUVOQ0VSU19GT0xERVJfTkFNRSA9ICJzZXF1ZW5jZXJzIjsKKworCS8qKgorCSAqIFRoZSBuYW1lIG9mIHRoZSBmb2xkZXIgdXNlZCB0byBzZXJpYWxpemUge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5leHBlcmltZW50LkV4cGVyaW1lbnR9cyBpbiBhCisJICogcHJvamVjdC4KKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBFWFBFUklNRU5UU19GT0xERVJfTkFNRSA9ICJleHBlcmltZW50cyI7CisKKwkvKioKKwkgKiBUaGUgbmFtZSBvZiB0aGUgZm9sZGVyIHVzZWQgdG8gc2VyaWFsaXplIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuTW9kaWZpZXJ9cyBpbiBhIHByb2plY3QuCisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgTU9ESUZJRVJTX0ZPTERFUl9OQU1FID0gIm1vZGlmaWVycyI7CisKKwkvKioKKwkgKiBUaGUgbmFtZSBvZiB0aGUgZm9sZGVyIHVzZWQgdG8gc2VyaWFsaXplIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUudHJpZ2dlci5UcmlnZ2VyfXMgaW4gYSBwcm9qZWN0LgorCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFRSSUdHRVJTX0ZPTERFUl9OQU1FID0gInRyaWdnZXJzIjsKKworCS8qKgorCSAqIFRoZSBuYW1lIG9mIHRoZSBmb2xkZXIgdXNlZCB0byBzZXJpYWxpemUge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUuUHJlZGljYXRlfXMgaW4gYSBwcm9qZWN0LgorCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFBSRURJQ0FURVNfRk9MREVSX05BTUUgPSAicHJlZGljYXRlcyI7CisKKwkvKioKKwkgKiBUaGUgbmFtZSBvZiB0aGUgZm9sZGVyIHVzZWQgdG8gc2VyaWFsaXplIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubG9nZ2VyLkxvZ2dlcn1zIGluIGEgcHJvamVjdC4KKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBMT0dHRVJTX0ZPTERFUl9OQU1FID0gImxvZ2dlcnMiOworCQorCS8qKgorCSAqIFRoZSBuYW1lIG9mIHRoZSBoaWRkZW4gIGZvbGRlciB1c2VkIHRvIHN0b3JlIGdtbCBmaWxlcyBkdXJpbmcgZWRpdGluZy4KKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBHTUxfRk9MREVSX05BTUUgPSAiLmdtbCI7CisJCisJLyoqCisJICogVGhpcyBpcyB0aGUgV2l6YXJkIHBhZ2UgcHJlc2VudGVkIHRvIHRoZSB1c2VyIHRvIGdldCB0aGUgaW5mb3JtYXRpb24KKwkgKiBuZWNlc3NhcnkgdG8gY3JlYXRlIHRoZSBuZXcgcHJvamVjdC4KKwkgKi8KKwlXaXphcmROZXdQcm9qZWN0Q3JlYXRpb25QYWdlIG5ld1Byb2plY3RQYWdlID0gbnVsbDsKKworCS8qKgorCSAqIFRoZSBuYW1lcyBvZiB0aGUgZm9sZGVycyBpbiBlYWNoIFNURU0gcHJvamVjdCBieSBkZWZhdWx0LgorCSAqLworCXByaXZhdGUgZmluYWwgU3RyaW5nW10gZGVmYXVsdEZvbGRlcnMgPSB7IEdSQVBIU19GT0xERVJfTkFNRSwKKwkJCU1PREVMU19GT0xERVJfTkFNRSwgU0NFQU5BUklPU19GT0xERVJfTkFNRSwgREVDT1JBVE9SU19GT0xERVJfTkFNRSwKKwkJCVNFUVVFTkNFUlNfRk9MREVSX05BTUUsIEVYUEVSSU1FTlRTX0ZPTERFUl9OQU1FLAorCQkJTU9ESUZJRVJTX0ZPTERFUl9OQU1FLCBUUklHR0VSU19GT0xERVJfTkFNRSwgUFJFRElDQVRFU19GT0xERVJfTkFNRSwgCisJCQlSRUNPUkRFRF9TSU1VTEFUSU9OU19GT0xERVJfTkFNRSwgTE9HR0VSU19GT0xERVJfTkFNRSwgR01MX0ZPTERFUl9OQU1FfTsKKworCS8qKgorCSAqIEBpbmhlcml0RG9jCisJICovCisJcHVibGljIHZvaWQgaW5pdChAU3VwcHJlc3NXYXJuaW5ncygidW51c2VkIikgZmluYWwgSVdvcmtiZW5jaCB3b3JrYmVuY2gsCisJCQlAU3VwcHJlc3NXYXJuaW5ncygidW51c2VkIikgZmluYWwgSVN0cnVjdHVyZWRTZWxlY3Rpb24gc2VsZWN0aW9uKSB7CisJCXNldE5lZWRzUHJvZ3Jlc3NNb25pdG9yKHRydWUpOworCQlzZXRIZWxwQXZhaWxhYmxlKHRydWUpOyAvL0FkZHMgSEVMUCBCdXR0b24gdG8gTmV3IFNURU0gUHJvamVjdCBXaXphcmQgcGFnZQorCQl0aGlzLnNldEhlbHBDb250ZXh0SWQoIm9yZy5lY2xpcHNlLnN0ZW0uZG9jLm5ld3N0ZW1wcm9qZWN0X2NvbnRleHRpZCIpOyAvL0hFUkUKKwl9IC8vIGluaXQKKworCS8qKgorCSAqIEBpbmhlcml0RG9jCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgYWRkUGFnZXMoKSB7CisJCXN1cGVyLmFkZFBhZ2VzKCk7CisJCXNldFdpbmRvd1RpdGxlKE1lc3NhZ2VzLmdldFN0cmluZygiTlNURU1Qcm9XaXoudGl0bGUiKSk7IC8vJE5PTi1OTFMtMSQKKwkJbmV3UHJvamVjdFBhZ2UgPSBuZXcgU1RFTVdpemFyZE5ld1Byb2plY3RDcmVhdGlvblBhZ2UoTWVzc2FnZXMKKwkJCQkuZ2V0U3RyaW5nKCJOU1RFTVByb1dpei50aXRsZSIpKTsgLy8kTk9OLU5MUy0xJAorCQluZXdQcm9qZWN0UGFnZS5zZXRUaXRsZShNZXNzYWdlcy5nZXRTdHJpbmcoIk5TVEVNUHJvV2l6LnBhZ2VfdGl0bGUiKSk7IC8vJE5PTi1OTFMtMSQKKwkJbmV3UHJvamVjdFBhZ2Uuc2V0RGVzY3JpcHRpb24oTWVzc2FnZXMKKwkJCQkuZ2V0U3RyaW5nKCJOU1RFTVByb1dpei5wYWdlX2Rlc2NyaXB0aW9uIikpOyAvLyROT04tTkxTLTEkCisJCS8vIFRPRE8gc2V0IGljb24gZm9yIG5ldyBTVEVNIHByb2plY3Qgd2l6YXJkCisJCS8vIG5ld1Byb2plY3RQYWdlLnNldEltYWdlRGVzY3JpcHRvcihpbWFnZSk7CisJCWFkZFBhZ2UobmV3UHJvamVjdFBhZ2UpOworCX0gLy8gYWRkUGFnZXMKKworCS8qKgorCSAqIEBpbmhlcml0RG9jCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIGJvb2xlYW4gcGVyZm9ybUZpbmlzaCgpIHsKKwkJZmluYWwgYm9vbGVhbiByZXRWYWx1ZSA9IHRydWU7CisJCXRyeSB7CisJCQlmaW5hbCBXb3Jrc3BhY2VNb2RpZnlPcGVyYXRpb24gb3AgPSBuZXcgV29ya3NwYWNlTW9kaWZ5T3BlcmF0aW9uKCkgeworCQkJCUBPdmVycmlkZQorCQkJCXByb3RlY3RlZCB2b2lkIGV4ZWN1dGUoZmluYWwgSVByb2dyZXNzTW9uaXRvciBtb25pdG9yKSB7CisJCQkJCWNyZWF0ZVByb2plY3QobW9uaXRvciA9PSBudWxsID8gbmV3IE51bGxQcm9ncmVzc01vbml0b3IoKQorCQkJCQkJCTogbW9uaXRvcik7CisJCQkJfSAvLyBleGVjdXRlCisJCQl9OyAvLyBXb3Jrc3BhY2VNb2RpZnlPcGVyYXRpb24KKworCQkJLy8gVGhlIGNvbnRhaW5lciBpcyBhIElSdW5uYWJsZUNvbnRleHQsIHdlIHVzZSBpdCB0byBydW4gdGhlCisJCQkvLyBwb3RlbnRpYWxseSBsb25nIG9wZXJhdGlvbiBvZiBjcmVhdGluZyB0aGUgcHJvamVjdC4KKwkJCS8vIFRoZSBmaXJzdCBhcmd1bWVudCBvZiBmYWxzZSBpbmRpY2F0ZXMgbm90IHRvICJmb3JrIiwgdGhlIHNlY29uZAorCQkJLy8gb2YgInRydWUiIGluZGljYXRlcyB0aGF0IHRoZSBvcGVyYXRpb24gaXMgY2FuY2VsYWJsZS4KKwkJCWdldENvbnRhaW5lcigpLnJ1bihmYWxzZSwgdHJ1ZSwgb3ApOworCQl9IC8vIHRyeQorCQljYXRjaCAoZmluYWwgSW52b2NhdGlvblRhcmdldEV4Y2VwdGlvbiBlKSB7CisJCQlBY3RpdmF0b3IubG9nRXJyb3IoSURfU1RFTV9QUk9KRUNUX1dJWkFSRCwgZSk7CisJCX0gY2F0Y2ggKGZpbmFsIEludGVycnVwdGVkRXhjZXB0aW9uIGUpIHsKKwkJCS8vIFRoaXMgZ2V0cyB0aHJvd24gaWYgdGhlIG9wZXJhdGlvbiBpcyBjYW5jZWxlZAorCQkJQWN0aXZhdG9yLmxvZ0luZm9ybWF0aW9uKElEX1NURU1fUFJPSkVDVF9XSVpBUkQsIGUpOworCQl9CisJCXJldHVybiByZXRWYWx1ZTsKKwl9IC8vIHBlcmZvcm1GaW5pc2gKKworCS8qKgorCSAqIENyZWF0ZSB0aGUgcHJvamVjdC4KKwkgKiAKKwkgKiBAcGFyYW0gbW9uaXRvcgorCSAqICAgICAgICAgICAgYSBwcm9ncmVzcyBtb25pdG9yIHRvIHJlcG9ydCB0aGUgcHJvZ3Jlc3MgaW4gY3JlYXRpbmcgdGhlCisJICogICAgICAgICAgICBwcm9qZWN0CisJICovCisJdm9pZCBjcmVhdGVQcm9qZWN0KElQcm9ncmVzc01vbml0b3IgbW9uaXRvcikgeworCQkvLyBXYXMgYSBwcm9ncmVzcyBtb25pdG9yIHNwZWNpZmllZD8KKwkJaWYgKG1vbml0b3IgPT0gbnVsbCkgeworCQkJLy8gTm8KKwkJCW1vbml0b3IgPSBuZXcgTnVsbFByb2dyZXNzTW9uaXRvcigpOworCQl9CisKKwkJbW9uaXRvcgorCQkJCS5iZWdpblRhc2soCisJCQkJCQlNZXNzYWdlcy5nZXRTdHJpbmcoIk5TVEVNUHJvV2l6LnRpdGxlIiksIDEgKyBkZWZhdWx0Rm9sZGVycy5sZW5ndGgpOyAvLyROT04tTkxTLTEkCisKKwkJdHJ5IHsKKwkJCWZpbmFsIElXb3Jrc3BhY2VSb290IHJvb3QgPSBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkKKwkJCQkJLmdldFJvb3QoKTsKKworCQkJbW9uaXRvci5zdWJUYXNrKE1lc3NhZ2VzLmdldFN0cmluZygiTlNURU1Qcm9XaXouY3JlYXRpbmdfcHJvamVjdCIpKTsgLy8kTk9OLU5MUy0xJAorCisJCQlmaW5hbCBJUHJvamVjdCBwcm9qZWN0ID0gcm9vdC5nZXRQcm9qZWN0KG5ld1Byb2plY3RQYWdlCisJCQkJCS5nZXRQcm9qZWN0TmFtZSgpKTsKKwkJCWZpbmFsIElQcm9qZWN0RGVzY3JpcHRpb24gcHJvamVjdERlc2NyaXB0aW9uID0gUmVzb3VyY2VzUGx1Z2luCisJCQkJCS5nZXRXb3Jrc3BhY2UoKS5uZXdQcm9qZWN0RGVzY3JpcHRpb24ocHJvamVjdC5nZXROYW1lKCkpOworCisJCQkvLyBEaWQgdGhlIHVzZXIgY2hhbmdlIHRoZSBsb2NhdGlvbiBvZiB0aGUgcHJvamVjdD8KKwkJCWlmICghUGxhdGZvcm0uZ2V0TG9jYXRpb24oKQorCQkJCQkuZXF1YWxzKG5ld1Byb2plY3RQYWdlLmdldExvY2F0aW9uUGF0aCgpKSkgeworCQkJCS8vIFllcworCQkJCS8vIC4uLm5ldyBsb2NhdGlvbiB0aGVuCisJCQkJcHJvamVjdERlc2NyaXB0aW9uCisJCQkJCQkuc2V0TG9jYXRpb24obmV3UHJvamVjdFBhZ2UuZ2V0TG9jYXRpb25QYXRoKCkpOworCQkJfSAvLyBpZiBuZXcgbG9jYXRpb25zCisKKwkJCS8vIFRoaXMgcHJvamVjdCBoYXMgYSAiU1RFTSIgbmF0dXJlCisJCQlwcm9qZWN0RGVzY3JpcHRpb24KKwkJCQkJLnNldE5hdHVyZUlkcyhuZXcgU3RyaW5nW10geyBDb25zdGFudHMuSURfU1RFTV9QUk9KRUNUX05BVFVSRSB9KTsKKworCQkJLy8gQ3JlYXRlIHRoZSBwcm9qZWN0CisJCQlwcm9qZWN0LmNyZWF0ZShwcm9qZWN0RGVzY3JpcHRpb24sIG1vbml0b3IpOworCQkJbW9uaXRvci53b3JrZWQoMSk7CisKKwkJCW1vbml0b3Iuc3ViVGFzayhNZXNzYWdlcworCQkJCQkuZ2V0U3RyaW5nKCJOU1RFTVByb1dpei5jcmVhdGluZ19kaXJlY3RvcmllcyIpKTsgLy8kTk9OLU5MUy0xJAorCisJCQlwcm9qZWN0Lm9wZW4obW9uaXRvcik7CisKKwkJCWZpbmFsIElQYXRoIHByb2plY3RQYXRoID0gcHJvamVjdC5nZXRGdWxsUGF0aCgpOworCisJCQkvLyBDcmVhdGUgdGhlIGRlZmF1bHQgZm9sZGVycworCQkJZm9yIChmaW5hbCBTdHJpbmcgZm9sZGVyTmFtZSA6IGRlZmF1bHRGb2xkZXJzKSB7CisJCQkJZmluYWwgSVBhdGggZnVsbEZvbGRlclBhdGggPSBwcm9qZWN0UGF0aC5hcHBlbmQoZm9sZGVyTmFtZSk7CisKKwkJCQlmaW5hbCBJRm9sZGVyIGZvbGRlciA9IHJvb3QuZ2V0Rm9sZGVyKGZ1bGxGb2xkZXJQYXRoKTsKKwkJCQljcmVhdGVGb2xkZXIoZm9sZGVyLCBtb25pdG9yKTsKKworCQkJCW1vbml0b3Iud29ya2VkKDEpOworCQkJfSAvLyBmb3IgZWFjaCBkZWZhdWx0IGZvbGRlciBuYW1lCisJCQkvLyBtb25pdG9yLnN1YlRhc2soInN0ZW0uY3JlYXRpbmdfZmlsZXMiKTsKKworCQkJLy8gUG9wdWxhdGUgdGhlIG5ldyBwcm9qZWN0IHdpdGggZGVmYXVsdCBmaWxlcy4KKwkJCS8vIGZpbmFsIElQYXRoCisJCX0gLy8gdHJ5CisJCWNhdGNoIChmaW5hbCBDb3JlRXhjZXB0aW9uIGNlKSB7CisJCQlBY3RpdmF0b3IubG9nRXJyb3IoCisJCQkJCU1lc3NhZ2VzLmdldFN0cmluZygiTlNURU1Qcm9XaXouQ3JlYXRlX1Byb2JsZW0iKSwgY2UpOyAvLyROT04tTkxTLTEkCisJCX0gZmluYWxseSB7CisJCQltb25pdG9yLmRvbmUoKTsKKwkJfQorCX0gLy8gY3JlYXRlUHJvamVjdAorCisJLyoqCisJICogQ3JlYXRlIGEgZm9sZGVyIGluIHRoZSBwcm9qZWN0LiBBbGwgZm9sZGVycyBhbG9uZyB0aGUgcGF0aCB3aWxsIGJlCisJICogY3JlYXRlZCBhcyBuZWNlc3NhcnkuCisJICogCisJICogQHBhcmFtIGZvbGRlcgorCSAqICAgICAgICAgICAgdGhlIGZvbGRlciB0byBjcmVhdGUKKwkgKiBAcGFyYW0gbW9uaXRvcgorCSAqICAgICAgICAgICAgdGhlIG1vbml0b3Igd2F0Y2hpbmcgb3VyIHByb2dyZXNzCisJICogQHRocm93cyBDb3JlRXhjZXB0aW9uCisJICovCisJcHJpdmF0ZSB2b2lkIGNyZWF0ZUZvbGRlcihmaW5hbCBJRm9sZGVyIGZvbGRlciwKKwkJCWZpbmFsIElQcm9ncmVzc01vbml0b3IgbW9uaXRvcikgdGhyb3dzIENvcmVFeGNlcHRpb24geworCQkvLyBEb2VzIHRoZSBmb2xkZXIgYWxyZWFkeSBleGlzdD8KKwkJaWYgKCFmb2xkZXIuZXhpc3RzKCkpIHsKKwkJCS8vIE5vCisJCQkvLyBPaywgZ2V0IHRoZSB3b3VsZCBiZSBwYXJlbnQgb2YgdGhpcyBmb2xkZXIuCisJCQlmaW5hbCBJQ29udGFpbmVyIHBhcmVudCA9IGZvbGRlci5nZXRQYXJlbnQoKTsKKwkJCS8vIElzIHRoZSBwYXJlbnQgYWxzbyBhIGZvbGRlcj8KKwkJCWlmIChwYXJlbnQgaW5zdGFuY2VvZiBJRm9sZGVyKSB7CisJCQkJLy8gWWVzCisJCQkJLy8gRG9lcyBpdCBleGlzdD8KKwkJCQlpZiAoISgoSUZvbGRlcikgcGFyZW50KS5leGlzdHMoKSkgeworCQkJCQkvLyBObworCQkJCQkvLyBDcmVhdGUgaXQgdGhlbgorCQkJCQljcmVhdGVGb2xkZXIoKElGb2xkZXIpIHBhcmVudCwgbW9uaXRvcik7CisJCQkJfSAvLyBpZiBwYXJlbnQgZG9lc24ndCBleGlzdAorCQkJfSAvLyBpZiBwYXJlbnQgYSBmb2xkZXIKKworCQkJLy8gTm93IGNyZWF0ZSB0aGlzIGZvbGRlcgorCQkJZm9sZGVyLmNyZWF0ZShmYWxzZSwgdHJ1ZSwgbW9uaXRvcik7CisJCX0gLy8gaWYgdGhlIGZvbGRlciBkb2Vzbid0IGFscmVhZHkgZXhpc3QKKworCX0gLy8gY3JlYXRlRm9sZGVyCisKKwkvKioKKwkgKiBAaW5oZXJpdERvYworCSAqLworCUBTdXBwcmVzc1dhcm5pbmdzKCJ1bnVzZWQiKQorCXB1YmxpYyB2b2lkIHNldEluaXRpYWxpemF0aW9uRGF0YShmaW5hbCBJQ29uZmlndXJhdGlvbkVsZW1lbnQgY29uZmlnLAorCQkJZmluYWwgU3RyaW5nIHByb3BlcnR5TmFtZSwgZmluYWwgT2JqZWN0IGRhdGEpIHRocm93cyBDb3JlRXhjZXB0aW9uIHsKKwkJLy8gY29uZmlnRWxlbWVudCA9IGNvbmZpZzsKKwl9IC8vIHNldEluaXRpYWxpemF0aW9uRGF0YQorCisJLyoqCisJICogVGhpcyBjbGFzcyBpcyBhIHtAbGluayBJSGFuZGxlcn0gZm9yIHRoZSBjb21tYW5kIHRoYXQgY3JlYXRlcyBhCisJICoge0BsaW5rIE5ld1NURU1Qcm9qZWN0V2l6YXJkfQorCSAqLworCXB1YmxpYyBzdGF0aWMgY2xhc3MgTmV3U1RFTVByb2plY3RXaXphcmRDb21tYW5kSGFuZGxlciBleHRlbmRzCisJCQlBYnN0cmFjdEhhbmRsZXIgaW1wbGVtZW50cyBJSGFuZGxlciB7CisKKwkJLyoqCisJCSAqIEBzZWUgb3JnLmVjbGlwc2UuY29yZS5jb21tYW5kcy5BYnN0cmFjdEhhbmRsZXIjZXhlY3V0ZShvcmcuZWNsaXBzZS5jb3JlLmNvbW1hbmRzLkV4ZWN1dGlvbkV2ZW50KQorCQkgKi8KKwkJcHVibGljIE9iamVjdCBleGVjdXRlKGZpbmFsIEV4ZWN1dGlvbkV2ZW50IGV4ZWN1dGlvbkV2ZW50KQorCQkJCXRocm93cyBFeGVjdXRpb25FeGNlcHRpb24geworCQkJZmluYWwgSVdvcmtiZW5jaFdpbmRvdyB3aW5kb3cgPSBIYW5kbGVyVXRpbAorCQkJCQkuZ2V0QWN0aXZlV29ya2JlbmNoV2luZG93Q2hlY2tlZChleGVjdXRpb25FdmVudCk7CisJCQlmaW5hbCBOZXdTVEVNUHJvamVjdFdpemFyZCB3aXphcmQgPSBuZXcgTmV3U1RFTVByb2plY3RXaXphcmQoKTsKKwkJCXdpemFyZC5pbml0KHdpbmRvdy5nZXRXb3JrYmVuY2goKSwgU3RydWN0dXJlZFNlbGVjdGlvbi5FTVBUWSk7CisJCQlmaW5hbCBXaXphcmREaWFsb2cgd2l6YXJkRGlhbG9nID0gbmV3IFNURU1XaXphcmREaWFsb2cod2luZG93CisJCQkJCS5nZXRTaGVsbCgpLCB3aXphcmQpOyAKKwkJCXdpemFyZERpYWxvZy5vcGVuKCk7CisJCQlyZXR1cm4gbnVsbDsKKwkJfSAvLyBleGVjdXRlCisJfSAvLyBOZXdTVEVNUHJvamVjdFdpemFyZFdpemFyZENvbW1hbmRIYW5kbGVyCisKK30gLy8gUHJvamVjdFdpemFyZApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS93aXphcmRzL05ld1NjZW5hcmlvV2l6YXJkLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvd2l6YXJkcy9OZXdTY2VuYXJpb1dpemFyZC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlkNThkMDEKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvd2l6YXJkcy9OZXdTY2VuYXJpb1dpemFyZC5qYXZhCkBAIC0wLDAgKzEsMzA3IEBACisvLyBOZXdTY2VuYXJpb1dpemFyZC5qYXZhCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0udWkud2l6YXJkczsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNywgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OworaW1wb3J0IGphdmEudXRpbC5MaXN0OworCitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5jb21tYW5kcy5BYnN0cmFjdEhhbmRsZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5jb21tYW5kcy5FeGVjdXRpb25FdmVudDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLmNvbW1hbmRzLkV4ZWN1dGlvbkV4Y2VwdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLmNvbW1hbmRzLklIYW5kbGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5Db3JlRXhjZXB0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JQ29uZmlndXJhdGlvbkVsZW1lbnQ7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklFeHRlbnNpb25SZWdpc3RyeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGxhdGZvcm07CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlByZWZlcmVuY2VzOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuU3RydWN0dXJlZFNlbGVjdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS53aXphcmQuV2l6YXJkRGlhbG9nOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5Db25zdGFudHM7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLlNURU1VUkk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5JZGVudGlmaWFibGU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNjZW5hcmlvLlNjZW5hcmlvOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zY2VuYXJpby5TY2VuYXJpb0ZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNjZW5hcmlvLlNjZW5hcmlvUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc29sdmVyLlNvbHZlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc29sdmVyLlNvbHZlclByb3BlcnR5Q29tcG9zaXRlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udWkuQWN0aXZhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5TV1Q7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5TZWxlY3Rpb25BZGFwdGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuU2VsZWN0aW9uRXZlbnQ7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5HcmlkRGF0YTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QubGF5b3V0LkdyaWRMYXlvdXQ7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tYm87CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkxhYmVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2hXaW5kb3c7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuUGxhdGZvcm1VSTsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5oYW5kbGVycy5IYW5kbGVyVXRpbDsKKworLyoqCisgKiBUaGlzIGNsYXNzIGlzIGEge0BsaW5rIE5ld0lkZW50aWZpYWJsZVdpemFyZH0gZm9yIHRoYXQgY3JlYXRlcyBuZXcgU1RFTQorICoge0BsaW5rIFNjZW5hcmlvfXMuCisgKi8KK3B1YmxpYyBjbGFzcyBOZXdTY2VuYXJpb1dpemFyZCBleHRlbmRzIE5ld0lkZW50aWZpYWJsZVdpemFyZCB7CisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0udWkud2l6YXJkcy5OZXdJZGVudGlmaWFibGVXaXphcmQjZ2V0V2l6YXJkVGl0bGUoKQorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCBTdHJpbmcgZ2V0V2l6YXJkVGl0bGUoKSB7CisJCXJldHVybiBNZXNzYWdlcy5nZXRTdHJpbmcoIk5TY2VuYXJpb1dpei53aXphcmRfdGl0bGUiKTsgLy8kTk9OLU5MUy0xJAorCX0KKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS51aS53aXphcmRzLk5ld0lkZW50aWZpYWJsZVdpemFyZCNjcmVhdGVOZXdJZGVudGlmaWFibGVQYWdlKCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgTmV3SWRlbnRpZmlhYmxlUGFnZSBjcmVhdGVOZXdJZGVudGlmaWFibGVQYWdlKCkgeworCQl0aGlzLnNldEhlbHBDb250ZXh0SWQoIm9yZy5lY2xpcHNlLnN0ZW0uZG9jLm5ld3NjZW5hcmlvX2NvbnRleHRpZCIpOworCQlyZXR1cm4gbmV3IE5ld1NjZW5hcmlvUGFnZSgpOworCX0gLy8gY3JlYXRlTmV3SWRlbnRpZmlhYmxlUGFnZQorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnVpLndpemFyZHMuTmV3SWRlbnRpZmlhYmxlV2l6YXJkI2NyZWF0ZUR1YmxpbkNvcmVQYWdlKCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgRHVibGluQ29yZVBhZ2UgY3JlYXRlRHVibGluQ29yZVBhZ2UoKSB7CisJCXJldHVybiBuZXcgRHVibGluQ29yZVBhZ2UoKSB7CisJCQkvKioKKwkJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS51aS53aXphcmRzLk5ld0lkZW50aWZpYWJsZVdpemFyZC5EdWJsaW5Db3JlUGFnZSNpbml0aWFsaXplRENGaWVsZHMoKQorCQkJICovCisJCQlAT3ZlcnJpZGUKKwkJCXByb3RlY3RlZCB2b2lkIGluaXRpYWxpemVEQ0F0dHJpYnV0ZXMoKSB7CisJCQkJc3VwZXIuaW5pdGlhbGl6ZURDQXR0cmlidXRlcygpOworCQkJCWZvcm1hdC5zZXRUZXh0KFNjZW5hcmlvUGFja2FnZS5lTlNfVVJJKTsKKwkJCQlmb3JtYXQuc2V0RW5hYmxlZChmYWxzZSk7CisJCQkJdHlwZS5zZXRUZXh0KFNURU1VUkkuU0NFTkFSSU9fVFlQRV9VUkkudG9TdHJpbmcoKSk7CisJCQkJdHlwZS5zZXRFbmFibGVkKGZhbHNlKTsKKwkJCQkKKwkJCQl0aXRsZVRleHRGaWVsZC5zZXRUZXh0KE1lc3NhZ2VzLmdldFN0cmluZygiZGNfdGl0bGVfc2NlbiIpKTsKKwkJCQlzb3VyY2Uuc2V0VGV4dChNZXNzYWdlcy5nZXRTdHJpbmcoImRjX3NvdXJjZV9zY2VuIikpOworCQkJCWRlc2NyaXB0aW9uVGV4dEZpZWxkLnNldFRleHQoTWVzc2FnZXMuZ2V0U3RyaW5nKCJkY19kZXNjX3NjZW4iKSk7CisJCQkJCisJCQl9CisJCX07CisJfSAvLyBjcmVhdGVEdWJsaW5Db3JlUGFnZQorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnVpLndpemFyZHMuTmV3SWRlbnRpZmlhYmxlV2l6YXJkI2NyZWF0ZUlkZW50aWZpYWJsZSgpCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIElkZW50aWZpYWJsZSBjcmVhdGVJZGVudGlmaWFibGUoKSB7CisJCWZpbmFsIFNjZW5hcmlvIHJldFZhbHVlID0gU2NlbmFyaW9GYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVTY2VuYXJpbygpOworCQlyZXRWYWx1ZS5zZXREdWJsaW5Db3JlKG5ld0R1YmxpbkNvcmVQYWdlLmNyZWF0ZUR1YmxpbkNvcmUoKSk7CisJCVNvbHZlclByb3BlcnR5Q29tcG9zaXRlIHNwYyA9ICgoTmV3U2NlbmFyaW9QYWdlKW5ld0lkZW50aWZpYWJsZVBhZ2UpLnNvbHZlclBDOworCQlTb2x2ZXIgcyA9IHNwYy5jcmVhdGVTb2x2ZXIoKTsKKwkJcmV0VmFsdWUuc2V0U29sdmVyKHMpOworCQlyZXR1cm4gcmV0VmFsdWU7CisJfSAvLyBjcmVhdGVTcGVjaWZpY0lkZW50aWZpYWJsZQorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnVpLndpemFyZHMuTmV3SWRlbnRpZmlhYmxlV2l6YXJkI2dldFNlcmlhbGl6YXRpb25Gb2xkZXJOYW1lKCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgU3RyaW5nIGdldFNlcmlhbGl6YXRpb25Gb2xkZXJOYW1lKCkgeworCQlyZXR1cm4gTmV3U1RFTVByb2plY3RXaXphcmQuU0NFQU5BUklPU19GT0xERVJfTkFNRTsKKwl9CisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0udWkud2l6YXJkcy5OZXdJZGVudGlmaWFibGVXaXphcmQjZ2V0U2VyaWFsaXphdGlvbkZpbGVOYW1lRXh0ZW5zaW9uKCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgU3RyaW5nIGdldFNlcmlhbGl6YXRpb25GaWxlTmFtZUV4dGVuc2lvbigpIHsKKwkJcmV0dXJuIFNjZW5hcmlvUGFja2FnZS5lTkFNRTsKKwl9CisKKwlwcm90ZWN0ZWQgc3RhdGljIGNsYXNzIE5ld1NjZW5hcmlvUGFnZSBleHRlbmRzIE5ld0lkZW50aWZpYWJsZVBhZ2UgeworCisJCXByaXZhdGUgU29sdmVyIFtdIHNvbHZlcnMgPSBudWxsOworCQkKKwkJU29sdmVyUHJvcGVydHlDb21wb3NpdGUgc29sdmVyUEM7CisJCQorCQlwcml2YXRlIENvbWJvIGNvbWJvOworCQkvKioKKwkJICogRGVmYXVsdCBDb25zdHJ1Y3RvcgorCQkgKi8KKwkJcHJvdGVjdGVkIE5ld1NjZW5hcmlvUGFnZSgpIHsKKwkJCXN1cGVyKE1lc3NhZ2VzLmdldFN0cmluZygiTlNjZW5hcmlvV2l6LnBhZ2VfdGl0bGUiKSk7IC8vJE5PTi1OTFMtMSQKKwkJCXNldFRpdGxlKE1lc3NhZ2VzLmdldFN0cmluZygiTlNjZW5hcmlvV2l6LnBhZ2VfdGl0bGUiKSk7IC8vJE5PTi1OTFMtMSQKKwkJCXNldERlc2NyaXB0aW9uKE1lc3NhZ2VzLmdldFN0cmluZygiTlNjZW5hcmlvV2l6LnBhZ2VfZGVzY3JpcHRpb24iKSk7IC8vJE5PTi1OTFMtMSQKKwkJfSAvLyBOZXdTY2VuYXJpb1BhZ2UKKworCQkvKioKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnVpLndpemFyZHMuTmV3SWRlbnRpZmlhYmxlV2l6YXJkLk5ld0lkZW50aWZpYWJsZVBhZ2UjY3JlYXRlU3BlY2lmaWNDb21wb3NpdGUob3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlKQorCQkgKi8KKwkJQE92ZXJyaWRlCisJCXByb3RlY3RlZCBDb21wb3NpdGUgY3JlYXRlU3BlY2lmaWNDb21wb3NpdGUoZmluYWwgQ29tcG9zaXRlIHBhcmVudCkgeworCisJCQlTb2x2ZXIgW10gc29sdmVycyA9IGdldFNvbHZlcnMoKTsKKwkJCQorCQkJZmluYWwgQ29tcG9zaXRlIGNvbXBvc2l0ZSA9IG5ldyBDb21wb3NpdGUocGFyZW50LCBTV1QuTk9ORSk7CisKKwkJCQorCQkJZmluYWwgR3JpZExheW91dCBncmlkTGF5b3V0ID0gbmV3IEdyaWRMYXlvdXQoKTsKKwkJCWdyaWRMYXlvdXQubWFyZ2luV2lkdGggPSAwOworCQkJZ3JpZExheW91dC5udW1Db2x1bW5zID0gMTsKKwkJCWNvbXBvc2l0ZS5zZXRMYXlvdXQoZ3JpZExheW91dCk7CisKKwkJCWZpbmFsIExhYmVsIHNvbHZlckxhYmVsID0gbmV3IExhYmVsKGNvbXBvc2l0ZSwgU1dULk5PTkUpOworCQkJZmluYWwgR3JpZERhdGEgZ2Rfc29sdmVyTGFiZWwgPSBuZXcgR3JpZERhdGEoU1dULkZJTEwsIFNXVC5DRU5URVIsIHRydWUsIGZhbHNlKTsKKwkJCWdkX3NvbHZlckxhYmVsLndpZHRoSGludCA9IDEwMDsKKwkJCXNvbHZlckxhYmVsLnNldExheW91dERhdGEoZ2Rfc29sdmVyTGFiZWwpOworCQkJc29sdmVyTGFiZWwuc2V0VGV4dChNZXNzYWdlcy5nZXRTdHJpbmcoIk5TY2VuYXJpb1dpei5zb2x2ZXIiKSk7IC8vJE5PTi1OTFMtMSQKKworCQkJY29tYm8gPSBuZXcgQ29tYm8oY29tcG9zaXRlLCBTV1QuUkVBRF9PTkxZKTsKKwkJCWNvbWJvLnNldFRleHRMaW1pdCgzMCk7CisJCQlmaW5hbCBHcmlkRGF0YSBnZF9jb21ibyA9IG5ldyBHcmlkRGF0YShTV1QuRklMTCwgU1dULkNFTlRFUiwgdHJ1ZSwKKwkJCQkJZmFsc2UpOworCQkJZ2RfY29tYm8ud2lkdGhIaW50ID0gMzAzOworCQkJY29tYm8uc2V0TGF5b3V0RGF0YShnZF9jb21ibyk7CisKKwkJCWNvbWJvLnNldFRvb2xUaXBUZXh0KE1lc3NhZ2VzLmdldFN0cmluZygiTlNjZW5hcmlvV2l6LnNvbHZlciIpKTsgLy8kTk9OLU5MUy0xJAorCQkJLy8gSW5pdGlhbGl6ZSB0aGUgbGlzdCBvZiBkaXNlYXNlIG1vZGVscyBhdmFpbGFibGUKKwkJCWNvbWJvLnNldEl0ZW1zKGdldFNvbHZlck5hbWVzKHNvbHZlcnMpKTsKKwkJCS8vIFNldCB0aGUgb25lIGZyb20gcHJlZmVyZW5jZXMKKwkJCQorCQkJZmluYWwgTmV3U2NlbmFyaW9QYWdlIHNlbGYgPSB0aGlzOworCQkJY29tYm8uYWRkU2VsZWN0aW9uTGlzdGVuZXIobmV3IFNlbGVjdGlvbkFkYXB0ZXIoKSB7CisJCQkJQE92ZXJyaWRlCisJCQkJcHVibGljIHZvaWQgd2lkZ2V0U2VsZWN0ZWQoU2VsZWN0aW9uRXZlbnQgZSkgeworCQkJCQlzZWxmLmRpc3BsYXlTb2x2ZXIoZ2V0U29sdmVycygpW2NvbWJvLmdldFNlbGVjdGlvbkluZGV4KCldKTsKKwkJCQkJLy8gbGF5b3V0KCk7CisJCQkJfSAvLyB3aWRnZXRTZWxlY3RlZAorCQkJfSk7CisJCQkKKwkJCWNvbWJvLnNlbGVjdCgwKTsKKwkJCWNvbWJvLmFkZE1vZGlmeUxpc3RlbmVyKHByb2plY3RWYWxpZGF0b3IpOworCisJCQlzb2x2ZXJQQyA9IG5ldyBTb2x2ZXJQcm9wZXJ0eUNvbXBvc2l0ZShjb21wb3NpdGUsIDEsIHNvbHZlcnMsIHByb2plY3RWYWxpZGF0b3IpOworCQorCQkJUGxhdGZvcm1VSS5nZXRXb3JrYmVuY2goKS5nZXRIZWxwU3lzdGVtKCkuc2V0SGVscChwYXJlbnQsICJvcmcuZWNsaXBzZS5zdGVtLmRvYy5uZXdzY2VuYXJpb19jb250ZXh0aWQiKTsKKwkJCQorCQkJcmV0dXJuIGNvbXBvc2l0ZTsKKwkJfSAvLyBjcmVhdGVTcGVjaWZpY0NvbXBvc2l0ZQorCQkvKioKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnVpLndpemFyZHMuTmV3SWRlbnRpZmlhYmxlV2l6YXJkLk5ld0lkZW50aWZpYWJsZVBhZ2UjZ2V0RENEZXNjcmlwdGlvbigpCisJCSAqLworCQlAT3ZlcnJpZGUKKwkJcHJvdGVjdGVkIFN0cmluZyBnZXREQ0Rlc2NyaXB0aW9uKCkgeworCQkJLy8gTGVhdmUgZGVzY3JpcHRpb24vdGl0bGUgYmxhbmsKKwkJCXJldHVybiAiIjsKKwkJCQorLy8JCQlyZXR1cm4gTWVzc2FnZUZvcm1hdC5mb3JtYXQoTWVzc2FnZXMKKy8vCQkJCQkuZ2V0U3RyaW5nKCJOU2NlbmFyaW9XaXouRENfREVTQ1JJUFRJT04iKSwKKy8vCQkJCQluZXcgT2JqZWN0W10geyBzZXJpYWxpemF0aW9uRmlsZU5hbWVGaWVsZC5nZXRUZXh0KCkgfSk7CisJCX0gLy8gZ2V0RENEZXNjcmlwdGlvbgorCisJCS8qKgorCQkgKiAKKwkJICovCisJCQorCQlwcml2YXRlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zb2x2ZXIuU29sdmVyIFtdIGdldFNvbHZlcnMoKSB7CisJCQlmaW5hbCBQcmVmZXJlbmNlcyBwcmVmZXJlbmNlcyA9IG9yZy5lY2xpcHNlLnN0ZW0udWkuQWN0aXZhdG9yLmdldERlZmF1bHQoKS5nZXRQbHVnaW5QcmVmZXJlbmNlcygpOworCQkJU3RyaW5nIHByZWZTb2x2ZXIgPSBwcmVmZXJlbmNlcy5nZXRTdHJpbmcob3JnLmVjbGlwc2Uuc3RlbS51aS5wcmVmZXJlbmNlcy5QcmVmZXJlbmNlQ29uc3RhbnRzLkRFRkFVTFRfU09MVkVSKTsKKwkJCQorCQkJaWYgKHNvbHZlcnMgPT0gbnVsbCkgeworCQkJCWZpbmFsIElFeHRlbnNpb25SZWdpc3RyeSByZWdpc3RyeSA9IFBsYXRmb3JtLmdldEV4dGVuc2lvblJlZ2lzdHJ5KCk7CisJCQkJZmluYWwgSUNvbmZpZ3VyYXRpb25FbGVtZW50W10gc29sdmVyQ29uZmlnRWxlbWVudHMgPSByZWdpc3RyeQorCQkJCQkJLmdldENvbmZpZ3VyYXRpb25FbGVtZW50c0ZvcihvcmcuZWNsaXBzZS5zdGVtLmNvcmUuQ29uc3RhbnRzLklEX1NPTFZFUl9FWFRFTlNJT05fUE9JTlQpOworCisJCQkJZmluYWwgTGlzdDxTb2x2ZXI+IHRlbXAgPSBuZXcgQXJyYXlMaXN0PFNvbHZlcj4oKTsKKworCQkJCXNvbHZlcnMgPSBuZXcgU29sdmVyW3NvbHZlckNvbmZpZ0VsZW1lbnRzLmxlbmd0aF07CisKKwkJCQlmb3IgKGludCBpID0gMDsgaSA8IHNvbHZlckNvbmZpZ0VsZW1lbnRzLmxlbmd0aDsgaSsrKSB7CisJCQkJCWZpbmFsIElDb25maWd1cmF0aW9uRWxlbWVudCBlbGVtZW50ID0gc29sdmVyQ29uZmlnRWxlbWVudHNbaV07CisJCQkJCS8vIERvZXMgdGhlIGVsZW1lbnQgc3BlY2lmeSB0aGUgY2xhc3Mgb2YgdGhlIGRpc2Vhc2UgbW9kZWw/CisJCQkJCWlmIChlbGVtZW50LmdldE5hbWUoKS5lcXVhbHMoQ29uc3RhbnRzLlNPTFZFUl9FTEVNRU5UKSkgeworCQkJCQkJLy8gWWVzCisJCQkJCQl0cnkgeworCQkJCQkJCVNvbHZlciBzID0gKFNvbHZlcikgZWxlbWVudC5jcmVhdGVFeGVjdXRhYmxlRXh0ZW5zaW9uKCJjbGFzcyIpOworCQkJCQkJCQkKKwkJCQkJCQlpZihzLmdldENsYXNzKCkuZ2V0TmFtZSgpLmVxdWFscyhwcmVmU29sdmVyKSYmIGkgPiAwKSB7CisJCQkJCQkJCQkvLyBTZXQgdGhlIHByZWZlcmVuY2Ugb25lIG9uIHRvcAorCQkJCQkJCQkJU29sdmVyIHRtcCA9IHRlbXAuZ2V0KDApOworCQkJCQkJCQkJdGVtcC5zZXQoMCwgcyk7CisJCQkJCQkJCQl0ZW1wLmFkZCh0bXApOworCQkJCQkJCX0gZWxzZQorCQkJCQkJCXRlbXAuYWRkKHMpOyAvLyROT04tTkxTLTEkCisJCQkJCQl9IGNhdGNoIChmaW5hbCBDb3JlRXhjZXB0aW9uIGUpIHsKKwkJCQkJCQlBY3RpdmF0b3IubG9nRXJyb3IoCisJCQkJCQkJCQkiQ2FuJ3QgY3JlYXRlIHNvbHZlciIsIGUpOyAvLyROT04tTkxTLTEkCisJCQkJCQl9CisJCQkJCX0gLy8gaWYKKwkJCQl9IC8vIGZvciBlYWNoIGNvbmZpZ3VyYXRpb24gZWxlbWVudAorCisJCQkJc29sdmVycyA9IHRlbXAudG9BcnJheShuZXcgU29sdmVyW10ge30pOworCQkJfSAvLyBpZiBkaXNlc2FlTW9kZWxzIG5vdCBjcmVhdGVkCisKKwkJCXJldHVybiBzb2x2ZXJzOworCQl9CisKKwkJLyoqCisJCSAqIEByZXR1cm4gdGhlIG5hbWVzIG9mIHRoZSBzb2x2ZXJzCisJCSAqLworCQlwcml2YXRlIFN0cmluZ1tdIGdldFNvbHZlck5hbWVzKGZpbmFsIFNvbHZlcltdIHNvbHZlcnMpIHsKKwkJCWZpbmFsIFByZWZlcmVuY2VzIHByZWZlcmVuY2VzID0gb3JnLmVjbGlwc2Uuc3RlbS51aS5BY3RpdmF0b3IuZ2V0RGVmYXVsdCgpLmdldFBsdWdpblByZWZlcmVuY2VzKCk7CisJCQlTdHJpbmcgcHJlZlNvbHZlciA9IHByZWZlcmVuY2VzLmdldFN0cmluZyhvcmcuZWNsaXBzZS5zdGVtLnVpLnByZWZlcmVuY2VzLlByZWZlcmVuY2VDb25zdGFudHMuREVGQVVMVF9TT0xWRVIpOworCQkJCisJCQlmaW5hbCBTdHJpbmdbXSByZXRWYWx1ZSA9IG5ldyBTdHJpbmdbc29sdmVycy5sZW5ndGhdOworCQkJU3RyaW5nIGZpcnN0T25lID0gbnVsbDsKKwkJCWZvciAoaW50IGkgPSAwOyBpIDwgc29sdmVycy5sZW5ndGg7IGkrKykgeworCQkJCVN0cmluZyBuYW1lID0gc29sdmVyc1tpXS5nZXREdWJsaW5Db3JlKCkuZ2V0VGl0bGUoKTsKKwkJCQkvLyBXYXMgYSBuYW1lIHNwZWNpZmllZD8KKwkJCQlpZiAoKG5hbWUgPT0gbnVsbCkgfHwgbmFtZS5lcXVhbHMoIiIpKSB7IC8vJE5PTi1OTFMtMSQKKwkJCQkJLy8gTm8KKwkJCQkJbmFtZSA9IHNvbHZlcnNbaV0uZ2V0Q2xhc3MoKS5nZXRTaW1wbGVOYW1lKCk7CisJCQkJfSAvLyBpZgorCQkJCWlmKHNvbHZlcnNbaV0uZ2V0Q2xhc3MoKS5nZXROYW1lKCkuZXF1YWxzKHByZWZTb2x2ZXIpJiYgaSA+IDApIHsKKwkJCQkJLy8gU2V0IHRoZSBwcmVmZXJlbmNlIG9uZSBvbiB0b3AKKwkJCQkJU3RyaW5nIHRtcCA9IHJldFZhbHVlWzBdOworCQkJCQlyZXRWYWx1ZVswXSA9IG5hbWU7CisJCQkJCXJldFZhbHVlW2ldID0gdG1wOworCQkJCX0KKwkJCQllbHNlIHJldFZhbHVlW2ldID0gbmFtZTsKKwkJCX0gLy8gZm9yIGkKKwkJCXJldHVybiByZXRWYWx1ZTsKKwkJfSAvLyBnZXREaXNlYXNlTW9kZWxOYW1lcworCQkKKwkJdm9pZCBkaXNwbGF5U29sdmVyKGZpbmFsIFNvbHZlciBzb2x2ZXIpIHsKKwkJCXNvbHZlclBDLmRpc3BsYXlTb2x2ZXIoc29sdmVyKTsKKwkJfSAvLyBkaXNwbGF5U29sdmVyCisJfSAvLyBOZXdTY2VuYXJpb1BhZ2UKKworCS8qKgorCSAqIFRoaXMgY2xhc3MgaXMgYSB7QGxpbmsgSUhhbmRsZXJ9IGZvciB0aGUgY29tbWFuZCB0aGF0IGNyZWF0ZXMgYQorCSAqIHtAbGluayBOZXdTY2VuYXJpb1dpemFyZH0KKwkgKi8KKwlwdWJsaWMgc3RhdGljIGNsYXNzIE5ld1NjZW5hcmlvV2l6YXJkQ29tbWFuZEhhbmRsZXIgZXh0ZW5kcyBBYnN0cmFjdEhhbmRsZXIKKwkJCWltcGxlbWVudHMgSUhhbmRsZXIgeworCisJCS8qKgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLmNvcmUuY29tbWFuZHMuQWJzdHJhY3RIYW5kbGVyI2V4ZWN1dGUob3JnLmVjbGlwc2UuY29yZS5jb21tYW5kcy5FeGVjdXRpb25FdmVudCkKKwkJICovCisJCXB1YmxpYyBPYmplY3QgZXhlY3V0ZShmaW5hbCBFeGVjdXRpb25FdmVudCBleGVjdXRpb25FdmVudCkKKwkJCQl0aHJvd3MgRXhlY3V0aW9uRXhjZXB0aW9uIHsKKwkJCWZpbmFsIElXb3JrYmVuY2hXaW5kb3cgd2luZG93ID0gSGFuZGxlclV0aWwKKwkJCQkJLmdldEFjdGl2ZVdvcmtiZW5jaFdpbmRvd0NoZWNrZWQoZXhlY3V0aW9uRXZlbnQpOworCQkJZmluYWwgTmV3U2NlbmFyaW9XaXphcmQgd2l6YXJkID0gbmV3IE5ld1NjZW5hcmlvV2l6YXJkKCk7CisJCQl3aXphcmQuaW5pdCh3aW5kb3cuZ2V0V29ya2JlbmNoKCksIFN0cnVjdHVyZWRTZWxlY3Rpb24uRU1QVFkpOworCQkJZmluYWwgV2l6YXJkRGlhbG9nIHdpemFyZERpYWxvZyA9IG5ldyBTVEVNV2l6YXJkRGlhbG9nKHdpbmRvdworCQkJCQkuZ2V0U2hlbGwoKSwgd2l6YXJkKTsKKwkJCXdpemFyZERpYWxvZy5vcGVuKCk7CisJCQlyZXR1cm4gbnVsbDsKKwkJfSAvLyBleGVjdXRlCisJfSAvLyBOZXdTY2VuYXJpb1dpemFyZENvbW1hbmRIYW5kbGVyCit9IC8vIE5ld1NjZW5hcmlvV2l6YXJkClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3dpemFyZHMvTmV3U2VxdWVuY2VyV2l6YXJkLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvd2l6YXJkcy9OZXdTZXF1ZW5jZXJXaXphcmQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NTU3YmU2Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3dpemFyZHMvTmV3U2VxdWVuY2VyV2l6YXJkLmphdmEKQEAgLTAsMCArMSw3NyBAQAorLy8gTmV3U2VxdWVuY2VyV2l6YXJkLmphdmEKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS51aS53aXphcmRzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA3LCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5TVEVNVVJJOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zZXF1ZW5jZXIuU2VxdWVuY2VyUGFja2FnZTsKKworLyoqCisgKiBUaGlzIGNsYXNzIGlzIGEge0BsaW5rIE5ld0lkZW50aWZpYWJsZVdpemFyZH0gZm9yIHRoYXQgY3JlYXRlcyBuZXcgU1RFTQorICoge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zZXF1ZW5jZXIuU2VxdWVuY2VyfXMKKyAqLworYWJzdHJhY3QgcHVibGljIGNsYXNzIE5ld1NlcXVlbmNlcldpemFyZCBleHRlbmRzIE5ld0lkZW50aWZpYWJsZVdpemFyZCB7CisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0udWkud2l6YXJkcy5OZXdJZGVudGlmaWFibGVXaXphcmQjY3JlYXRlRHVibGluQ29yZVBhZ2UoKQorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCBEdWJsaW5Db3JlUGFnZSBjcmVhdGVEdWJsaW5Db3JlUGFnZSgpIHsKKwkJcmV0dXJuIG5ldyBEdWJsaW5Db3JlUGFnZSgpIHsKKwkJCUBPdmVycmlkZQorCQkJcHJvdGVjdGVkIHZvaWQgaW5pdGlhbGl6ZURDQXR0cmlidXRlcygpIHsKKwkJCQlzdXBlci5pbml0aWFsaXplRENBdHRyaWJ1dGVzKCk7CisJCQkJZm9ybWF0LnNldFRleHQoU2VxdWVuY2VyUGFja2FnZS5lTlNfVVJJKTsKKwkJCQlmb3JtYXQuc2V0RW5hYmxlZChmYWxzZSk7CisJCQkJdHlwZS5zZXRUZXh0KFNURU1VUkkuU0VRVUVOQ0VSX1RZUEVfVVJJLnRvU3RyaW5nKCkpOworCQkJCXR5cGUuc2V0RW5hYmxlZChmYWxzZSk7CisJCQkJCisKKwkJCQl0aXRsZVRleHRGaWVsZC5zZXRUZXh0KE1lc3NhZ2VzLmdldFN0cmluZygiZGNfdGl0bGVfc2VxIikpOworCQkJCXNvdXJjZS5zZXRUZXh0KE1lc3NhZ2VzLmdldFN0cmluZygiZGNfc291cmNlX3NlcSIpKTsKKwkJCQlkZXNjcmlwdGlvblRleHRGaWVsZC5zZXRUZXh0KE1lc3NhZ2VzLmdldFN0cmluZygiZGNfZGVzY19zZXEiKSk7CisJCQl9CisJCX07CisJfSAvLyBjcmVhdGVEdWJsaW5Db3JlUGFnZQorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnVpLndpemFyZHMuTmV3SWRlbnRpZmlhYmxlV2l6YXJkI2dldFNlcmlhbGl6YXRpb25Gb2xkZXJOYW1lKCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgU3RyaW5nIGdldFNlcmlhbGl6YXRpb25Gb2xkZXJOYW1lKCkgeworCQlyZXR1cm4gTmV3U1RFTVByb2plY3RXaXphcmQuU0VRVUVOQ0VSU19GT0xERVJfTkFNRTsKKwl9IC8vIGdldEZvbGRlck5hbWUKKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS51aS53aXphcmRzLk5ld0lkZW50aWZpYWJsZVdpemFyZCNnZXRTZXJpYWxpemF0aW9uRmlsZU5hbWVFeHRlbnNpb24oKQorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCBTdHJpbmcgZ2V0U2VyaWFsaXphdGlvbkZpbGVOYW1lRXh0ZW5zaW9uKCkgeworCQlyZXR1cm4gU2VxdWVuY2VyUGFja2FnZS5lTkFNRTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGNsYXNzIHJlcHJlc2VudHMgYSBXaXphcmQgcGFnZSBmb3Igc3BlY2lmeWluZyBhCisJICoge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zZXF1ZW5jZXIuU2VxdWVuY2VyfQorCSAqLworCWFic3RyYWN0IHByb3RlY3RlZCBzdGF0aWMgY2xhc3MgU2VxdWVuY2VyUGFnZSBleHRlbmRzIE5ld0lkZW50aWZpYWJsZVBhZ2UgeworCQkvKioKKwkJICogQHBhcmFtIHBhZ2VOYW1lCisJCSAqICAgICAgICAgICAgdGhlIG5hbWUgb2YgdGhlIHBhZ2UKKwkJICovCisJCXByb3RlY3RlZCBTZXF1ZW5jZXJQYWdlKGZpbmFsIFN0cmluZyBwYWdlTmFtZSkgeworCQkJc3VwZXIocGFnZU5hbWUpOworCQl9CisKKwl9IC8vIFNlcXVlbmNlclBhZ2UKKworfSAvLyBOZXdTZXF1ZW5jZXJXaXphcmQKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS93aXphcmRzL05ld1NlcXVlbnRpYWxTZXF1ZW5jZXJXaXphcmQuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS93aXphcmRzL05ld1NlcXVlbnRpYWxTZXF1ZW5jZXJXaXphcmQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YjhjYTUxCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3dpemFyZHMvTmV3U2VxdWVudGlhbFNlcXVlbmNlcldpemFyZC5qYXZhCkBAIC0wLDAgKzEsNjY4IEBACisvLyBOZXdTZXF1ZW50aWFsU2VxdWVuY2VyV2l6YXJkLmphdmEKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS51aS53aXphcmRzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA3LCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGphdmEudGV4dC5NZXNzYWdlRm9ybWF0OworaW1wb3J0IGphdmEudXRpbC5DYWxlbmRhcjsKK2ltcG9ydCBqYXZhLnV0aWwuRGF0ZTsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUuY29tbWFuZHMuQWJzdHJhY3RIYW5kbGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUuY29tbWFuZHMuRXhlY3V0aW9uRXZlbnQ7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5jb21tYW5kcy5FeGVjdXRpb25FeGNlcHRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5jb21tYW5kcy5JSGFuZGxlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlN0cnVjdHVyZWRTZWxlY3Rpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uud2l6YXJkLldpemFyZERpYWxvZzsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLklkZW50aWZpYWJsZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLmltcGwuRHVibGluQ29yZUltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLk1vZGVsRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuU1RFTVRpbWU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNlcXVlbmNlci5SZWFsVGltZVNlcXVlbmNlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2VxdWVuY2VyLlNlcXVlbmNlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNlcXVlbmNlci5TZXF1ZW50aWFsU2VxdWVuY2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udWkuQWN0aXZhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5TV1Q7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5TZWxlY3Rpb25BZGFwdGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuU2VsZWN0aW9uRXZlbnQ7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5HcmlkRGF0YTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QubGF5b3V0LkdyaWRMYXlvdXQ7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQnV0dG9uOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbWJvOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5EYXRlVGltZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5MYWJlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5UZXh0OworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2hXaW5kb3c7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuUGxhdGZvcm1VSTsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5oYW5kbGVycy5IYW5kbGVyVXRpbDsKKworLyoqCisgKiBUaGlzIGNsYXNzIGlzIGEgV2l6YXJkIGZvciBtYWtpbmcgbmV3IFNURU0ge0BsaW5rIFNlcXVlbnRpYWxTZXF1ZW5jZXJ9cy4KKyAqLworYWJzdHJhY3QgcHVibGljIGNsYXNzIE5ld1NlcXVlbnRpYWxTZXF1ZW5jZXJXaXphcmQgZXh0ZW5kcyBOZXdTZXF1ZW5jZXJXaXphcmQgeworCisJYWJzdHJhY3QgcHJvdGVjdGVkIHN0YXRpYyBjbGFzcyBTZXF1ZW50aWFsU2VxdWVuY2VyUGFnZSBleHRlbmRzCisJCQlTZXF1ZW5jZXJQYWdlIHsKKwkJCisJCS8qKgorCQkgKiBUaGlzIGlzIHRoZSBpbml0aWFsIHZhbHVlIG9mIHRoZSBjeWNsZSB0aW1lIHRleHQgZmllbGQuCisJCSAqLworCQlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIFN0cmluZyBERUZBVUxUX0NZQ0xFX1BFUklPRF9USU1FX1ZBTFVFID0gIjEiOworCisJCXByaXZhdGUgc3RhdGljIGZpbmFsIFNURU1UaW1lLlVuaXRzIERFRkFVTFRfQ1lDTEVfUEVSSU9EX1RJTUVfVU5JVCA9IFNURU1UaW1lLlVuaXRzLkRBWTsKKworCQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmdbXSBjeWNsZVBlcmlvZFRpbWVVbml0U3RyaW5nc1BsdXJhbCA9IHsKKwkJCQlNZXNzYWdlcy5nZXRTdHJpbmcoIk5TZXF1ZW5jZXJXaXoubWlsbGlzZWNvbmRzIiksCisJCQkJTWVzc2FnZXMuZ2V0U3RyaW5nKCJOU2VxdWVuY2VyV2l6LnNlY29uZHMiKSwKKwkJCQlNZXNzYWdlcy5nZXRTdHJpbmcoIk5TZXF1ZW5jZXJXaXoubWludXRlcyIpLAorCQkJCU1lc3NhZ2VzLmdldFN0cmluZygiTlNlcXVlbmNlcldpei5ob3VycyIpLAorCQkJCU1lc3NhZ2VzLmdldFN0cmluZygiTlNlcXVlbmNlcldpei5kYXlzIikgfTsKKworCQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmdbXSBjeWNsZVBlcmlvZFRpbWVVbml0U3RyaW5nc1Npbmd1bGFyID0geworCQkJCU1lc3NhZ2VzLmdldFN0cmluZygiTlNlcXVlbmNlcldpei5taWxsaXNlY29uZCIpLAorCQkJCU1lc3NhZ2VzLmdldFN0cmluZygiTlNlcXVlbmNlcldpei5zZWNvbmQiKSwKKwkJCQlNZXNzYWdlcy5nZXRTdHJpbmcoIk5TZXF1ZW5jZXJXaXoubWludXRlIiksCisJCQkJTWVzc2FnZXMuZ2V0U3RyaW5nKCJOU2VxdWVuY2VyV2l6LmhvdXIiKSwKKwkJCQlNZXNzYWdlcy5nZXRTdHJpbmcoIk5TZXF1ZW5jZXJXaXouZGF5IikgfTsKKworCQkvLyBUaGlzIGlzIHRoZSAoc2ltdWxhdGVkKSB0aW1lIHBlcmlvZCBiZXR3ZWVuIHN1Y2Nlc3NpdmUgc2ltdWxhdGlvbgorCQkvLyBjeWNsZXMuCisJCXByaXZhdGUgVGV4dCBjeWNsZVBlcmlvZFRpbWVWYWx1ZUZpZWxkOworCisJCXByaXZhdGUgQ29tYm8gY3ljbGVQZXJpb2RUaW1lQ29tYm9Cb3g7CisKKwkJLyoqCisJCSAqIENvbnN0cnVjdG9yCisJCSAqLworCQlwdWJsaWMgU2VxdWVudGlhbFNlcXVlbmNlclBhZ2UoKSB7IAorCQkJc3VwZXIoTWVzc2FnZXMuZ2V0U3RyaW5nKCJOU2VxU2VxdWVuY2VyV2l6LnBhZ2VfdGl0bGUiKSk7CisJCQlzZXRUaXRsZShNZXNzYWdlcy5nZXRTdHJpbmcoIk5TZXFTZXF1ZW5jZXJXaXoucGFnZV90aXRsZSIpKTsgLy8kTk9OLU5MUy0xJAorCQkJc2V0RGVzY3JpcHRpb24oTWVzc2FnZXMKKwkJCQkJLmdldFN0cmluZygiTlNlcVNlcXVlbmNlcldpei5wYWdlX2Rlc2NyaXB0aW9uIikpOyAvLyROT04tTkxTLTEkCisJCX0gLy8gU2VxdWVuY2VyUGFnZQorCisJCS8qKgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0udWkud2l6YXJkcy5OZXdJZGVudGlmaWFibGVXaXphcmQuTmV3SWRlbnRpZmlhYmxlUGFnZSNjcmVhdGVTcGVjaWZpY0NvbXBvc2l0ZShvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGUpCisJCSAqLworCQlAT3ZlcnJpZGUKKwkJcHJvdGVjdGVkIENvbXBvc2l0ZSBjcmVhdGVTcGVjaWZpY0NvbXBvc2l0ZShmaW5hbCBDb21wb3NpdGUgcGFyZW50KSB7CisKKwkJCWZpbmFsIENvbXBvc2l0ZSBjb21wb3NpdGUgPSBuZXcgQ29tcG9zaXRlKHBhcmVudCwgU1dULk5PTkUpOworCisJCQlmaW5hbCBHcmlkTGF5b3V0IGxheW91dCA9IG5ldyBHcmlkTGF5b3V0KCk7CisJCQlsYXlvdXQubnVtQ29sdW1ucyA9IDM7CisJCQlsYXlvdXQudmVydGljYWxTcGFjaW5nID0gMTI7CisJCQlsYXlvdXQubWFyZ2luSGVpZ2h0ID0gMDsKKwkJCWxheW91dC5tYXJnaW5XaWR0aCA9IDA7CisJCQljb21wb3NpdGUuc2V0TGF5b3V0KGxheW91dCk7CisKKwkJCWZpbmFsIEdyaWREYXRhIGNvbXBvc2l0ZUdyaWRMYXlvdXREYXRhID0gbmV3IEdyaWREYXRhKCk7CisJCQljb21wb3NpdGVHcmlkTGF5b3V0RGF0YS5ob3Jpem9udGFsQWxpZ25tZW50ID0gR3JpZERhdGEuRklMTDsKKwkJCWNvbXBvc2l0ZS5zZXRMYXlvdXREYXRhKGNvbXBvc2l0ZUdyaWRMYXlvdXREYXRhKTsKKworCQkJLy8gQ3ljbGUgUGVyaW9kIFRpbWUgbGFiZWwKKwkJCWZpbmFsIExhYmVsIGN5Y2xlVGltZUxhYmVsID0gbmV3IExhYmVsKGNvbXBvc2l0ZSwgU1dULk5PTkUpOworCQkJY3ljbGVUaW1lTGFiZWwuc2V0VGV4dChNZXNzYWdlcworCQkJCQkuZ2V0U3RyaW5nKCJOU2VxdWVuY2VyV2l6LmN5Y2xlVGltZSIpICsgIjoiKTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCisJCQlmaW5hbCBHcmlkRGF0YSBjeWNsZVRpbWVMYWJlbExheW91dERhdGEgPSBuZXcgR3JpZERhdGEoKTsKKwkJCWN5Y2xlVGltZUxhYmVsTGF5b3V0RGF0YS5ob3Jpem9udGFsU3BhbiA9IDE7CisJCQljeWNsZVRpbWVMYWJlbExheW91dERhdGEuaG9yaXpvbnRhbEFsaWdubWVudCA9IFNXVC5MRUFEOworCQkJY3ljbGVUaW1lTGFiZWwuc2V0TGF5b3V0RGF0YShjeWNsZVRpbWVMYWJlbExheW91dERhdGEpOworCisJCQljeWNsZVBlcmlvZFRpbWVWYWx1ZUZpZWxkID0gbmV3IFRleHQoY29tcG9zaXRlLCBTV1QuQk9SREVSKTsKKwkJCWN5Y2xlUGVyaW9kVGltZVZhbHVlRmllbGQuc2V0VGV4dChERUZBVUxUX0NZQ0xFX1BFUklPRF9USU1FX1ZBTFVFKTsKKwkJCWZpbmFsIEdyaWREYXRhIGN5Y2xlVGltZVZhbHVlTGF5b3V0RGF0YSA9IG5ldyBHcmlkRGF0YSgpOworCQkJY3ljbGVUaW1lVmFsdWVMYXlvdXREYXRhLmhvcml6b250YWxBbGlnbm1lbnQgPSBHcmlkRGF0YS5GSUxMOworCQkJY3ljbGVUaW1lVmFsdWVMYXlvdXREYXRhLmdyYWJFeGNlc3NIb3Jpem9udGFsU3BhY2UgPSB0cnVlOworCQkJY3ljbGVUaW1lVmFsdWVMYXlvdXREYXRhLmhvcml6b250YWxTcGFuID0gMTsKKwkJCWN5Y2xlUGVyaW9kVGltZVZhbHVlRmllbGQuc2V0TGF5b3V0RGF0YShjeWNsZVRpbWVWYWx1ZUxheW91dERhdGEpOworCisJCQljeWNsZVBlcmlvZFRpbWVWYWx1ZUZpZWxkLmFkZE1vZGlmeUxpc3RlbmVyKHByb2plY3RWYWxpZGF0b3IpOworCisJCQljeWNsZVBlcmlvZFRpbWVDb21ib0JveCA9IG5ldyBDb21ibyhjb21wb3NpdGUsIFNXVC5EUk9QX0RPV04KKwkJCQkJfCBTV1QuUkVBRF9PTkxZKTsKKwkJCWN5Y2xlUGVyaW9kVGltZUNvbWJvQm94LnNldEl0ZW1zKGN5Y2xlUGVyaW9kVGltZVVuaXRTdHJpbmdzUGx1cmFsKTsKKwkJCWN5Y2xlUGVyaW9kVGltZUNvbWJvQm94LnNlbGVjdChERUZBVUxUX0NZQ0xFX1BFUklPRF9USU1FX1VOSVQKKwkJCQkJLm9yZGluYWwoKSk7CisJCQlmaW5hbCBHcmlkRGF0YSBjeWNsZVRpbWVDb21ib0JveExheW91dERhdGEgPSBuZXcgR3JpZERhdGEoKTsKKwkJCWN5Y2xlVGltZUNvbWJvQm94TGF5b3V0RGF0YS5ob3Jpem9udGFsQWxpZ25tZW50ID0gU1dULlRSQUlMOworCQkJY3ljbGVUaW1lQ29tYm9Cb3hMYXlvdXREYXRhLmhvcml6b250YWxTcGFuID0gMTsKKwkJCWN5Y2xlUGVyaW9kVGltZUNvbWJvQm94LnNldExheW91dERhdGEoY3ljbGVUaW1lQ29tYm9Cb3hMYXlvdXREYXRhKTsKKworCQkJZmluYWwgQ29tcG9zaXRlIHNlcXVlbmNlclNwZWNpZmljQ29udHJvbCA9IGNyZWF0ZVNlcXVlbnRpYWxTZXF1ZW5jZXJTcGVjaWZpY0NvbXBvc2l0ZShjb21wb3NpdGUpOworCQkJZmluYWwgR3JpZERhdGEgc2VxdWVuY2VyU3BlY2lmaWNDb250cm9sTGF5b3V0RGF0YSA9IG5ldyBHcmlkRGF0YSgpOworCQkJc2VxdWVuY2VyU3BlY2lmaWNDb250cm9sTGF5b3V0RGF0YS5ob3Jpem9udGFsQWxpZ25tZW50ID0gR3JpZERhdGEuRklMTDsKKwkJCXNlcXVlbmNlclNwZWNpZmljQ29udHJvbExheW91dERhdGEuZ3JhYkV4Y2Vzc0hvcml6b250YWxTcGFjZSA9IHRydWU7CisJCQlzZXF1ZW5jZXJTcGVjaWZpY0NvbnRyb2xMYXlvdXREYXRhLmhvcml6b250YWxTcGFuID0gMjsKKwkJCXNlcXVlbmNlclNwZWNpZmljQ29udHJvbAorCQkJCQkuc2V0TGF5b3V0RGF0YShzZXF1ZW5jZXJTcGVjaWZpY0NvbnRyb2xMYXlvdXREYXRhKTsKKwkJCVBsYXRmb3JtVUkuZ2V0V29ya2JlbmNoKCkuZ2V0SGVscFN5c3RlbSgpLnNldEhlbHAocGFyZW50LCAib3JnLmVjbGlwc2Uuc3RlbS5kb2MubmV3c2VxdWVudGlhbHNlcXVlbmNlcl9jb250ZXh0aWQiKTsKKwkJCXJldHVybiBjb21wb3NpdGU7CisKKwkJfSAvLyBjcmVhdGVTcGVjaWZpY0NvbXBvc2l0ZQorCisJCS8qKgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0udWkud2l6YXJkcy5OZXdJZGVudGlmaWFibGVXaXphcmQuTmV3SWRlbnRpZmlhYmxlUGFnZSN2YWxpZGF0ZVBhZ2UoKQorCQkgKi8KKwkJQE92ZXJyaWRlCisJCXByb3RlY3RlZCBib29sZWFuIHZhbGlkYXRlUGFnZSgpIHsKKwkJCWJvb2xlYW4gcmV0VmFsdWUgPSBzdXBlci52YWxpZGF0ZVBhZ2UoKTsKKworCQkJLy8gQ3ljbGUgdmFsdWU/CisJCQlpZiAocmV0VmFsdWUpIHsKKwkJCQl0cnkgeworCQkJCQkvLyBZZXMKKwkJCQkJZmluYWwgaW50IGN5Y2xlVGltZVZhbHVlID0gSW50ZWdlcgorCQkJCQkJCS5wYXJzZUludChjeWNsZVBlcmlvZFRpbWVWYWx1ZUZpZWxkLmdldFRleHQoKSk7CisJCQkJCS8vIElzIHRoZSBjeWNsZSB0aW1lIG5vbi16ZXJvIGFuZCBwb3NpdGl2ZT8KKwkJCQkJaWYgKGN5Y2xlVGltZVZhbHVlIDwgMSkgeworCQkJCQkJLy8gTm8KKwkJCQkJCXJldFZhbHVlID0gZmFsc2U7CisJCQkJCQlzZXRFcnJvck1lc3NhZ2UoTWVzc2FnZXMKKwkJCQkJCQkJLmdldFN0cmluZygiTlNlcVNlcXVlbmNlcldpei5jeWNsZVRpbWVFcnIiKSk7CisJCQkJCX0gLy8gaWYKKwkJCQl9IGNhdGNoIChmaW5hbCBOdW1iZXJGb3JtYXRFeGNlcHRpb24gZSkgeworCQkJCQlyZXRWYWx1ZSA9IGZhbHNlOworCQkJCQlzZXRFcnJvck1lc3NhZ2UoTWVzc2FnZXMKKwkJCQkJCQkuZ2V0U3RyaW5nKCJOU2VxU2VxdWVuY2VyV2l6LmN5Y2xlVGltZUZvcm1hdEVyciIpKTsKKwkJCQl9IC8vIGNhdGNoIE51bWJlckZvcm1hdEV4Y2VwdGlvbgorCQkJfSAvLyBpZgorCisJCQlyZXR1cm4gcmV0VmFsdWU7CisJCX0gLy8gdmFsaWRhdGVQYWdlCisKKwkJLyoqCisJCSAqIEByZXR1cm4gdGhlIGR1cmF0aW9uIGluIG1pbGxpc2Vjb25kcyBvZiBvbmUgY3ljbGUKKwkJICovCisJCXByb3RlY3RlZCBsb25nIGdldEN5Y2xlRHVyYXRpb24oKSB7CisJCQlsb25nIHJldFZhbHVlID0gMTsKKwkJCWZpbmFsIFN0cmluZyBjeWNsZVBlcmlvZFRpbWVTdHJpbmcgPSBjeWNsZVBlcmlvZFRpbWVWYWx1ZUZpZWxkCisJCQkJCS5nZXRUZXh0KCk7CisKKwkJCWZpbmFsIGxvbmcgY3ljbGVEdXJhdGlvbiA9IFNURU1UaW1lLlVuaXRzLnZhbHVlcygpW2N5Y2xlUGVyaW9kVGltZUNvbWJvQm94CisJCQkJCS5nZXRTZWxlY3Rpb25JbmRleCgpXS5nZXRNaWxsaXNlY29uZHMoKTsKKworCQkJdHJ5IHsKKwkJCQlmaW5hbCBpbnQgY3ljbGVUaW1lVmFsdWUgPSBJbnRlZ2VyCisJCQkJCQkucGFyc2VJbnQoY3ljbGVQZXJpb2RUaW1lU3RyaW5nKTsKKwkJCQlyZXRWYWx1ZSA9IGN5Y2xlVGltZVZhbHVlICogY3ljbGVEdXJhdGlvbjsKKwkJCX0gY2F0Y2ggKGZpbmFsIEV4Y2VwdGlvbiBlKSB7CisJCQkJQWN0aXZhdG9yLmxvZ0Vycm9yKCJOZXdSZWFsVGltZVNlcXVlbnRpYWxTZXF1ZW5jZXIiLCBlKTsKKwkJCX0KKwkJCXJldHVybiByZXRWYWx1ZTsKKwkJfSAvLyBnZXRDeWNsZUR1cmF0aW9uCisKKwkJLyoqCisJCSAqIEByZXR1cm4gYSBsb2NhbGUgc3BlY2lmaWMgc3RyaW5nIHRoYXQgZGVzY3JpYmVzIHRoZSBkdXJhdGlvbgorCQkgKi8KKwkJcHJvdGVjdGVkIFN0cmluZyBnZXRDeWNsZUR1cmF0aW9uRGVzY3JpcHRpb24oKSB7CisJCQlmaW5hbCBTdHJpbmcgY3ljbGVQZXJpb2RUaW1lU3RyaW5nID0gY3ljbGVQZXJpb2RUaW1lVmFsdWVGaWVsZAorCQkJCQkuZ2V0VGV4dCgpOworCQkJZmluYWwgU3RyaW5nQnVpbGRlciBzYiA9IG5ldyBTdHJpbmdCdWlsZGVyKGN5Y2xlUGVyaW9kVGltZVN0cmluZyk7CisJCQlzYi5hcHBlbmQoIiAiKTsKKwkJCXNiCisJCQkJCS5hcHBlbmQoIjEiLmVxdWFscyhjeWNsZVBlcmlvZFRpbWVTdHJpbmcpID8gY3ljbGVQZXJpb2RUaW1lVW5pdFN0cmluZ3NTaW5ndWxhcltjeWNsZVBlcmlvZFRpbWVDb21ib0JveAorCQkJCQkJCS5nZXRTZWxlY3Rpb25JbmRleCgpXQorCQkJCQkJCTogY3ljbGVQZXJpb2RUaW1lVW5pdFN0cmluZ3NQbHVyYWxbY3ljbGVQZXJpb2RUaW1lQ29tYm9Cb3gKKwkJCQkJCQkJCS5nZXRTZWxlY3Rpb25JbmRleCgpXSk7CisJCQlyZXR1cm4gc2IudG9TdHJpbmcoKTsKKwkJfSAvLyBnZXRDeWNsZUR1cmF0aW9uRGVzY3JpcHRpb24KKworCQkvKioKKwkJICogQHBhcmFtIHBhcmVudAorCQkgKiBAcmV0dXJuIFRPRE8KKwkJICovCisJCWFic3RyYWN0IHByb3RlY3RlZCBDb21wb3NpdGUgY3JlYXRlU2VxdWVudGlhbFNlcXVlbmNlclNwZWNpZmljQ29tcG9zaXRlKAorCQkJCUNvbXBvc2l0ZSBwYXJlbnQpOworCisJfSAvLyBTZXF1ZW50aWFsU2VxdWVuY2VyUGFnZQorCisJLyoqCisJICogVGhpcyBjbGFzcyBpcyBhIHtAbGluayBOZXdTZXF1ZW50aWFsU2VxdWVuY2VyV2l6YXJkfSBmb3IgY3JlYXRpbmcKKwkgKiB7QGxpbmsgU2VxdWVudGlhbFNlcXVlbmNlcn1zIHdpdGggZml4ZWQgY3ljbGUgdGltZXMuCisJICovCisJcHVibGljIHN0YXRpYyBjbGFzcyBOZXdGaXhlZFNlcXVlbnRpYWxTZXF1ZW5jZXJXaXphcmQgZXh0ZW5kcworCQkJTmV3U2VxdWVudGlhbFNlcXVlbmNlcldpemFyZCB7CisKKwkJLyoqCisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS51aS53aXphcmRzLk5ld0lkZW50aWZpYWJsZVdpemFyZCNnZXRXaXphcmRUaXRsZSgpCisJCSAqLworCQlAT3ZlcnJpZGUKKwkJcHJvdGVjdGVkIFN0cmluZyBnZXRXaXphcmRUaXRsZSgpIHsKKwkJCXJldHVybiBNZXNzYWdlcy5nZXRTdHJpbmcoIk5TZXFTZXF1ZW5jZXJXaXoud2l6YXJkX3RpdGxlIik7IC8vJE5PTi1OTFMtMSQKKwkJfSAvLyBnZXRXaXphcmRUaXRsZQorCisJCS8qKgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0udWkud2l6YXJkcy5OZXdJZGVudGlmaWFibGVXaXphcmQjY3JlYXRlTmV3SWRlbnRpZmlhYmxlUGFnZSgpCisJCSAqLworCQlAT3ZlcnJpZGUKKwkJcHJvdGVjdGVkIE5ld0lkZW50aWZpYWJsZVBhZ2UgY3JlYXRlTmV3SWRlbnRpZmlhYmxlUGFnZSgpIHsKKwkJCXRoaXMuc2V0SGVscENvbnRleHRJZCgib3JnLmVjbGlwc2Uuc3RlbS5kb2MubmV3c2VxdWVudGlhbHNlcXVlbmNlcl9jb250ZXh0aWQiKTsKKwkJCXJldHVybiBuZXcgRml4ZWRTZXF1ZW50aWFsU2VxdWVuY2VyUGFnZSgpOworCQl9IC8vIGNyZWF0ZU5ld0lkZW50aWZpYWJsZVBhZ2UKKworCQkvKioKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnVpLndpemFyZHMuTmV3SWRlbnRpZmlhYmxlV2l6YXJkI2NyZWF0ZUlkZW50aWZpYWJsZSgpCisJCSAqLworCQlAT3ZlcnJpZGUKKwkJcHJvdGVjdGVkIElkZW50aWZpYWJsZSBjcmVhdGVJZGVudGlmaWFibGUoKSB7CisJCQlmaW5hbCBTZXF1ZW50aWFsU2VxdWVuY2VyIHJldFZhbHVlID0gU2VxdWVuY2VyRmFjdG9yeS5lSU5TVEFOQ0UKKwkJCQkJLmNyZWF0ZVNlcXVlbnRpYWxTZXF1ZW5jZXIoKTsKKwkJCXJldFZhbHVlLnNldER1YmxpbkNvcmUobmV3RHVibGluQ29yZVBhZ2UuY3JlYXRlRHVibGluQ29yZSgpKTsKKworCQkJZmluYWwgRGF0ZSBzdGFydERhdGUgPSAoKEZpeGVkU2VxdWVudGlhbFNlcXVlbmNlclBhZ2UpIG5ld0lkZW50aWZpYWJsZVBhZ2UpCisJCQkJCS5nZXRTdGFydERhdGUoKTsKKwkJCQorCQkJZmluYWwgRGF0ZSBlbmREYXRlID0gKChGaXhlZFNlcXVlbnRpYWxTZXF1ZW5jZXJQYWdlKSBuZXdJZGVudGlmaWFibGVQYWdlKQorCQkJCQkuZ2V0RW5kRGF0ZSgpOworCisJCQl0cnkgeworCQkJCXJldFZhbHVlCisJCQkJCQkuc2V0VGltZUluY3JlbWVudCgoKEZpeGVkU2VxdWVudGlhbFNlcXVlbmNlclBhZ2UpIG5ld0lkZW50aWZpYWJsZVBhZ2UpCisJCQkJCQkJCS5nZXRDeWNsZUR1cmF0aW9uKCkpOworCisJCQkJZmluYWwgU1RFTVRpbWUgc3RhcnRUaW1lID0gTW9kZWxGYWN0b3J5LmVJTlNUQU5DRQorCQkJCQkJLmNyZWF0ZVNURU1UaW1lKCk7CisJCQkJc3RhcnRUaW1lLnNldFRpbWUoc3RhcnREYXRlKTsKKwkJCQkKKwkJCQlyZXRWYWx1ZS5zZXRTdGFydFRpbWUoc3RhcnRUaW1lKTsKKworCQkJCS8vIFdhcyBhbiBlbmQgZGF0ZSBzcGVjaWZpZWQ/CisJCQkJaWYgKGVuZERhdGUgIT0gbnVsbCkgeworCQkJCQkvLyBZZXMKKwkJCQkJZmluYWwgU1RFTVRpbWUgZW5kVGltZSA9IE1vZGVsRmFjdG9yeS5lSU5TVEFOQ0UKKwkJCQkJCQkuY3JlYXRlU1RFTVRpbWUoKTsKKwkJCQkJZW5kVGltZS5zZXRUaW1lKGVuZERhdGUpOworCQkJCQlyZXRWYWx1ZS5zZXRFbmRUaW1lKGVuZFRpbWUpOworCQkJCX0gLy8gaWYgZW5kIGRhdGUKKwkJCX0gY2F0Y2ggKGZpbmFsIEV4Y2VwdGlvbiBlKSB7CisJCQkJQWN0aXZhdG9yLmxvZ0Vycm9yKCJOZXdTZXF1ZW50aWFsU2VxdWVuY2VyIiwgZSk7CisJCQl9CisJCQlyZXR1cm4gcmV0VmFsdWU7CisJCX0gLy8gY3JlYXRlU3BlY2lmaWNJZGVudGlmaWFibGUKKworCQkvKioKKwkJICogVGhpcyBjbGFzcyByZXByZXNlbnRzIGEge0BsaW5rIFNlcXVlbnRpYWxTZXF1ZW5jZXJQYWdlfSBmb3IgZml4ZWQKKwkJICogZGF0ZXMuCisJCSAqLworCQlwcm90ZWN0ZWQgc3RhdGljIGNsYXNzIEZpeGVkU2VxdWVudGlhbFNlcXVlbmNlclBhZ2UgZXh0ZW5kcworCQkJCVNlcXVlbnRpYWxTZXF1ZW5jZXJQYWdlIHsKKworCQkJcHJpdmF0ZSBzdGF0aWMgZmluYWwgYm9vbGVhbiBFTkRfREFURV9JTklUSUFMTFlfRU5BQkxFRCA9IGZhbHNlOworCisJCQkvLyBUaGlzIGlzIHRoZSBzdGFydCBkYXRlIG9mIHRoZSBzZXF1ZW5jZXIKKwkJCUJ1dHRvbiBlbmREYXRlRW5hYmxlZEJ1dHRvbjsKKwkJCXByaXZhdGUgRGF0ZVRpbWUgc3RhcnREYXRlOworCQkJRGF0ZVRpbWUgZW5kRGF0ZTsKKworCQkJLyoqCisJCQkgKiBAcmV0dXJuIHRoZSBzdGFydGluZyB7QGxpbmsgRGF0ZX0KKwkJCSAqLworCQkJcHVibGljIERhdGUgZ2V0U3RhcnREYXRlKCkgeworCQkJCWZpbmFsIENhbGVuZGFyIHN0YXJ0Q2FsZW5kYXIgPSBDYWxlbmRhci5nZXRJbnN0YW5jZSgpOworCQkJCS8vIHVzZSBhIHRpbWUgb2YgZGF5IHNldCB0byBub29uIHNvIG9uIGRheWxpZ2h0IHNhdmluZ3MgdGltZQorCQkJCS8vdGhlIGFjdHVhbCBkYXRlIGNoYW5nZXMgb2suCisJCQkJc3RhcnRDYWxlbmRhci5zZXQoc3RhcnREYXRlLmdldFllYXIoKSwgc3RhcnREYXRlLmdldE1vbnRoKCksCisJCQkJCQlzdGFydERhdGUuZ2V0RGF5KCksIDEyLCAwLCAwKTsKKwkJCQlyZXR1cm4gc3RhcnRDYWxlbmRhci5nZXRUaW1lKCk7CisJCQl9IC8vIGdldFN0YXJ0RGF0ZQorCisJCQkvKioKKwkJCSAqIEByZXR1cm4gdGhlIGVuZGluZyB7QGxpbmsgRGF0ZX0sIG9yIDxjb2RlPm51bGw8L2NvZGU+IGlmIG5vCisJCQkgKiAgICAgICAgIGVuZCBkYXRlIHdhcyBzcGVjaWZpZWQuCisJCQkgKi8KKwkJCXB1YmxpYyBEYXRlIGdldEVuZERhdGUoKSB7CisJCQkJRGF0ZSByZXRWYWx1ZSA9IG51bGw7CisJCQkJLy8gSXMgdGhlIGVuZCBkYXRlIGVuYWJsZWQ/CisJCQkJaWYgKGVuZERhdGVFbmFibGVkQnV0dG9uLmdldFNlbGVjdGlvbigpKSB7CisJCQkJCS8vIFllcworCQkJCQlmaW5hbCBDYWxlbmRhciBlbmRDYWxlbmRhciA9IENhbGVuZGFyLmdldEluc3RhbmNlKCk7CisJCQkJCS8vIHVzZSBhIHRpbWUgb2YgZGF5IHNldCB0byBub29uIHNvIG9uIGRheWxpZ2h0IHNhdmluZ3MgdGltZQorCQkJCQkvL3RoZSBhY3R1YWwgZGF0ZSBjaGFuZ2VzIG9rLgorCQkJCQllbmRDYWxlbmRhci5zZXQoZW5kRGF0ZS5nZXRZZWFyKCksIGVuZERhdGUuZ2V0TW9udGgoKSwKKwkJCQkJCQllbmREYXRlLmdldERheSgpLCAxMSwgNTksIDU5KTsKKwkJCQkJcmV0VmFsdWUgPSBlbmRDYWxlbmRhci5nZXRUaW1lKCk7CisJCQkJfSAvLyBpZgorCQkJCXJldHVybiByZXRWYWx1ZTsKKwkJCX0gLy8gZ2V0RW5kRGF0ZQorCisJCQkvKioKKwkJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS51aS53aXphcmRzLk5ld0lkZW50aWZpYWJsZVdpemFyZC5OZXdJZGVudGlmaWFibGVQYWdlI3ZhbGlkYXRlUGFnZSgpCisJCQkgKi8KKwkJCUBPdmVycmlkZQorCQkJcHJvdGVjdGVkIGJvb2xlYW4gdmFsaWRhdGVQYWdlKCkgeworCQkJCWJvb2xlYW4gcmV0VmFsdWUgPSBzdXBlci52YWxpZGF0ZVBhZ2UoKTsKKworCQkJCS8vIERvZXMgdGhlIHN1cGVyIGNsYXNzIGhhdmUgYW55IHByb2JsZW1zPworCQkJCWlmIChyZXRWYWx1ZSkgeworCQkJCQkvLyBObworCQkJCQkvLyBJcyB0aGUgZW5kIGRhdGUgZW5hYmxlZD8KKwkJCQkJaWYgKGVuZERhdGVFbmFibGVkQnV0dG9uLmdldFNlbGVjdGlvbigpKSB7CisJCQkJCQkvLyBZZXMKKwkJCQkJCQorCQkJCQkJLy8gZW5kIHllYXIgYmVmb3JlIHN0YXJ0PworCQkJCQkJaWYgKGVuZERhdGUuZ2V0WWVhcigpIDwgc3RhcnREYXRlLmdldFllYXIoKSkgeworCQkJCQkJCXJldFZhbHVlID0gZmFsc2U7CisJCQkJCQl9IGVsc2UKKwkJCQkJCS8vIGlzIHNhbWUgeWVhciBidXQgbW9udGggYmVmb3JlIGN1cnJlbnQgbW9udGggPworCQkJCQkJaWYgKChlbmREYXRlLmdldFllYXIoKSA9PSBzdGFydERhdGUuZ2V0WWVhcigpKSAmJiAoZW5kRGF0ZS5nZXRNb250aCgpIDwgc3RhcnREYXRlLmdldE1vbnRoKCkpKSB7CisJCQkJCQkJLy8geWVzIC0gcHJvYmxlbQorCQkJCQkJCXJldFZhbHVlID0gZmFsc2U7CisJCQkJCQl9IGVsc2UKKwkJCQkJCS8vIGlzIHNhbWUgeWVhciBhbmQgc2FtZSBtb250aCBidWQgZGF5IGJlZm9yZSBjdXJyZW50IGRheSA/CisJCQkJCQlpZiAoKGVuZERhdGUuZ2V0WWVhcigpID09IHN0YXJ0RGF0ZS5nZXRZZWFyKCkpICYmIChlbmREYXRlLmdldE1vbnRoKCkgPT0gc3RhcnREYXRlLmdldE1vbnRoKCkpICYmIChlbmREYXRlLmdldERheSgpIDw9IHN0YXJ0RGF0ZS5nZXREYXkoKSkpIHsKKwkJCQkJCQkvLyB5ZXMgLSBwcm9ibGVtCisJCQkJCQkJcmV0VmFsdWUgPSBmYWxzZTsKKwkJCQkJCX0KKwkJCQkJCQkJCisJCQkJCQlpZighcmV0VmFsdWUpIHNldEVycm9yTWVzc2FnZShNZXNzYWdlcy5nZXRTdHJpbmcoIk5TZXFTZXF1ZW5jZXJXaXouZW5kQmVmb3JlRXJyIikpOworCQkJCQkJCQorCQkJCQl9IC8vIGlmIGVuZCBkYXRlCisJCQkJfSAvLyBpZiBzdXBlciBwYWdlIG9rCisJCQkJcmV0dXJuIHJldFZhbHVlOworCQkJfSAvLyB2YWxpZGF0ZVBhZ2UKKworCQkJLyoqCisJCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0udWkud2l6YXJkcy5OZXdTZXF1ZW50aWFsU2VxdWVuY2VyV2l6YXJkLlNlcXVlbnRpYWxTZXF1ZW5jZXJQYWdlI2NyZWF0ZVNlcXVlbnRpYWxTZXF1ZW5jZXJTcGVjaWZpY0NvbXBvc2l0ZShvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGUpCisJCQkgKi8KKwkJCUBPdmVycmlkZQorCQkJcHJvdGVjdGVkIENvbXBvc2l0ZSBjcmVhdGVTZXF1ZW50aWFsU2VxdWVuY2VyU3BlY2lmaWNDb21wb3NpdGUoCisJCQkJCWZpbmFsIENvbXBvc2l0ZSBwYXJlbnQpIHsKKwkJCQlmaW5hbCBDb21wb3NpdGUgY29tcG9zaXRlID0gbmV3IENvbXBvc2l0ZShwYXJlbnQsIFNXVC5OT05FKTsKKworCQkJCWZpbmFsIEdyaWRMYXlvdXQgbGF5b3V0ID0gbmV3IEdyaWRMYXlvdXQoKTsKKwkJCQlsYXlvdXQubnVtQ29sdW1ucyA9IDI7CisJCQkJbGF5b3V0LnZlcnRpY2FsU3BhY2luZyA9IDEyOworCQkJCWxheW91dC5tYXJnaW5IZWlnaHQgPSAwOworCQkJCWxheW91dC5tYXJnaW5XaWR0aCA9IDA7CisJCQkJY29tcG9zaXRlLnNldExheW91dChsYXlvdXQpOworCisJCQkJZmluYWwgR3JpZERhdGEgY29tcG9zaXRlR3JpZExheW91dERhdGEgPSBuZXcgR3JpZERhdGEoKTsKKwkJCQljb21wb3NpdGVHcmlkTGF5b3V0RGF0YS5ob3Jpem9udGFsQWxpZ25tZW50ID0gR3JpZERhdGEuRklMTDsKKwkJCQljb21wb3NpdGUuc2V0TGF5b3V0RGF0YShjb21wb3NpdGVHcmlkTGF5b3V0RGF0YSk7CisKKwkJCQluZXcgTGFiZWwoY29tcG9zaXRlLCBTV1QuTk9ORSk7CisKKwkJCQlmaW5hbCBMYWJlbCBzdGFydERhdGVMYWJlbCA9IG5ldyBMYWJlbChjb21wb3NpdGUsIFNXVC5DRU5URVIpOworCQkJCXN0YXJ0RGF0ZUxhYmVsLnNldExheW91dERhdGEobmV3IEdyaWREYXRhKCkpOworCQkJCXN0YXJ0RGF0ZUxhYmVsLnNldFRleHQoTWVzc2FnZXMKKwkJCQkJCS5nZXRTdHJpbmcoIk5TZXFTZXF1ZW5jZXJXaXouc3RhcnRUaW1lIikKKwkJCQkJCSsgIjoiKTsKKwkJCQluZXcgTGFiZWwoY29tcG9zaXRlLCBTV1QuTk9ORSk7CisKKwkJCQlzdGFydERhdGUgPSBuZXcgRGF0ZVRpbWUoY29tcG9zaXRlLCBTV1QuQ0FMRU5EQVIpOworCQkJCXN0YXJ0RGF0ZS5zZXRMYXlvdXREYXRhKG5ldyBHcmlkRGF0YSgpKTsKKwkJCQlzdGFydERhdGUuYWRkU2VsZWN0aW9uTGlzdGVuZXIobmV3IFNlbGVjdGlvbkFkYXB0ZXIoKSB7CisJCQkJCUBPdmVycmlkZQorCQkJCQlwdWJsaWMgdm9pZCB3aWRnZXRTZWxlY3RlZCgKKwkJCQkJCQlAU3VwcHJlc3NXYXJuaW5ncygidW51c2VkIikgZmluYWwgU2VsZWN0aW9uRXZlbnQgZSkgeworCQkJCQkJc2V0UGFnZUNvbXBsZXRlKHZhbGlkYXRlUGFnZSgpKTsKKwkJCQkJfQorCQkJCX0pOworCQkJCW5ldyBMYWJlbChjb21wb3NpdGUsIFNXVC5OT05FKTsKKworCQkJCWVuZERhdGVFbmFibGVkQnV0dG9uID0gbmV3IEJ1dHRvbihjb21wb3NpdGUsIFNXVC5DSEVDSyk7CisJCQkJZW5kRGF0ZUVuYWJsZWRCdXR0b24uc2V0VGV4dChNZXNzYWdlcworCQkJCQkJLmdldFN0cmluZygiTlNlcVNlcXVlbmNlcldpei5lbmRUaW1lIikKKwkJCQkJCSsgIjoiKTsKKwkJCQllbmREYXRlRW5hYmxlZEJ1dHRvbi5zZXRMYXlvdXREYXRhKG5ldyBHcmlkRGF0YSgpKTsKKwkJCQllbmREYXRlRW5hYmxlZEJ1dHRvbgorCQkJCQkJLmFkZFNlbGVjdGlvbkxpc3RlbmVyKG5ldyBTZWxlY3Rpb25BZGFwdGVyKCkgeworCQkJCQkJCUBPdmVycmlkZQorCQkJCQkJCXB1YmxpYyB2b2lkIHdpZGdldFNlbGVjdGVkKAorCQkJCQkJCQkJQFN1cHByZXNzV2FybmluZ3MoInVudXNlZCIpIGZpbmFsIFNlbGVjdGlvbkV2ZW50IGUpIHsKKwkJCQkJCQkJZW5kRGF0ZS5zZXRFbmFibGVkKGVuZERhdGVFbmFibGVkQnV0dG9uCisJCQkJCQkJCQkJLmdldFNlbGVjdGlvbigpKTsKKwkJCQkJCQkJc2V0UGFnZUNvbXBsZXRlKHZhbGlkYXRlUGFnZSgpKTsKKwkJCQkJCQl9CisJCQkJCQl9KTsKKwkJCQluZXcgTGFiZWwoY29tcG9zaXRlLCBTV1QuTk9ORSk7CisKKwkJCQllbmREYXRlID0gbmV3IERhdGVUaW1lKGNvbXBvc2l0ZSwgU1dULkNBTEVOREFSKTsKKwkJCQllbmREYXRlLnNldEVuYWJsZWQoRU5EX0RBVEVfSU5JVElBTExZX0VOQUJMRUQpOworCQkJCWVuZERhdGUuc2V0TGF5b3V0RGF0YShuZXcgR3JpZERhdGEoKSk7CisJCQkJZW5kRGF0ZS5hZGRTZWxlY3Rpb25MaXN0ZW5lcihuZXcgU2VsZWN0aW9uQWRhcHRlcigpIHsKKwkJCQkJQE92ZXJyaWRlCisJCQkJCXB1YmxpYyB2b2lkIHdpZGdldFNlbGVjdGVkKAorCQkJCQkJCUBTdXBwcmVzc1dhcm5pbmdzKCJ1bnVzZWQiKSBmaW5hbCBTZWxlY3Rpb25FdmVudCBlKSB7CisJCQkJCQlzZXRQYWdlQ29tcGxldGUodmFsaWRhdGVQYWdlKCkpOworCQkJCQl9CisJCQkJfSk7CisJCQkJcmV0dXJuIGNvbXBvc2l0ZTsKKwkJCX0gLy8gY3JlYXRlU2VxdWVudGlhbFNlcXVlbmNlclNwZWNpZmljQ29tcG9zaXRlCisKKwkJCS8qKgorCQkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnVpLndpemFyZHMuTmV3U2VxdWVudGlhbFNlcXVlbmNlcldpemFyZC5TZXF1ZW50aWFsU2VxdWVuY2VyUGFnZSNnZXREQ1RpdGxlKCkKKwkJCSAqLworCQkJQE92ZXJyaWRlCisJCQlwcm90ZWN0ZWQgU3RyaW5nIGdldERDVGl0bGUoKSB7CisJCQkJLy8gTGVhdmUgZGVzY3JpcHRpb24vdGl0bGUgYmxhbmsKKwkJCQlyZXR1cm4gIiI7CisvKgkJCQlTdHJpbmcgcmV0VmFsdWUgPSBudWxsOworCQkJCWZpbmFsIFN0cmluZyBzdGFydERhdGVTdHJpbmcgPSBEdWJsaW5Db3JlSW1wbAorCQkJCQkJLmNyZWF0ZUlTTzg2MDFEYXRlU3RyaW5nKGdldFN0YXJ0RGF0ZSgpKTsKKwkJCQlmaW5hbCBEYXRlIGVuZERhdGUgPSBnZXRFbmREYXRlKCk7CisJCQkJZmluYWwgU3RyaW5nIGVuZERhdGVTdHJpbmcgPSBlbmREYXRlICE9IG51bGwgPyBEdWJsaW5Db3JlSW1wbAorCQkJCQkJLmNyZWF0ZUlTTzg2MDFEYXRlU3RyaW5nKGVuZERhdGUpIDogbnVsbDsKKworCQkJCS8vIFdhcyBhbiBlbmQgZGF0ZSBzcGVjaWZpZWQ/CisJCQkJaWYgKGVuZERhdGVTdHJpbmcgIT0gbnVsbCAmJiAhZW5kRGF0ZVN0cmluZy5lcXVhbHMoIiIpKSB7CisJCQkJCS8vIFllcworCQkJCQlyZXRWYWx1ZSA9IE1lc3NhZ2VGb3JtYXQuZm9ybWF0KE1lc3NhZ2VzCisJCQkJCQkJLmdldFN0cmluZygiTlNlcVNlcXVlbmNlcldpei5EQ19USVRMRTEiKSwKKwkJCQkJCQluZXcgT2JqZWN0W10geyBzZXJpYWxpemF0aW9uRmlsZU5hbWVGaWVsZC5nZXRUZXh0KCkgfSk7CisJCQkJfSAvLyBpZiBlbmQgZGF0ZQorCQkJCWVsc2UgeworCQkJCQkvLyBObworCQkJCQlyZXRWYWx1ZSA9IE1lc3NhZ2VGb3JtYXQuZm9ybWF0KE1lc3NhZ2VzCisJCQkJCQkJLmdldFN0cmluZygiTlNlcVNlcXVlbmNlcldpei5EQ19USVRMRTIiKSwKKwkJCQkJCQluZXcgT2JqZWN0W10geyBzZXJpYWxpemF0aW9uRmlsZU5hbWVGaWVsZC5nZXRUZXh0KCl9KTsKKwkJCQl9IC8vIGVsc2UKKwkJCQlyZXR1cm4gcmV0VmFsdWU7CisqLworCQkJfSAvLyBnZXREQ1RpdGxlCisKKwkJCS8qKgorCQkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnVpLndpemFyZHMuTmV3SWRlbnRpZmlhYmxlV2l6YXJkLk5ld0lkZW50aWZpYWJsZVBhZ2UjZ2V0RENEZXNjcmlwdGlvbigpCisJCQkgKi8KKwkJCUBPdmVycmlkZQorCQkJcHJvdGVjdGVkIFN0cmluZyBnZXREQ0Rlc2NyaXB0aW9uKCkgeworCQkJCVN0cmluZyByZXRWYWx1ZSA9IG51bGw7CisJCQkJZmluYWwgU3RyaW5nIHN0YXJ0RGF0ZVN0cmluZyA9IER1YmxpbkNvcmVJbXBsCisJCQkJCQkuY3JlYXRlSVNPODYwMURhdGVTdHJpbmcoZ2V0U3RhcnREYXRlKCkpOworCQkJCWZpbmFsIERhdGUgZW5kRGF0ZSA9IGdldEVuZERhdGUoKTsKKwkJCQlmaW5hbCBTdHJpbmcgZW5kRGF0ZVN0cmluZyA9IGVuZERhdGUgIT0gbnVsbCA/IER1YmxpbkNvcmVJbXBsCisJCQkJCQkuY3JlYXRlSVNPODYwMURhdGVTdHJpbmcoZW5kRGF0ZSkgOiBudWxsOworCisJCQkJLy8gV2FzIGFuIGVuZCBkYXRlIHNwZWNpZmllZD8KKwkJCQlpZiAoZW5kRGF0ZVN0cmluZyAhPSBudWxsICYmICFlbmREYXRlU3RyaW5nLmVxdWFscygiIikpIHsKKwkJCQkJLy8gWWVzCisJCQkJCXJldFZhbHVlID0gTWVzc2FnZUZvcm1hdC5mb3JtYXQoTWVzc2FnZXMKKwkJCQkJCQkuZ2V0U3RyaW5nKCJOU2VxU2VxdWVuY2VyV2l6LkRDX0RFU0NSSVBUSU9OMSIpLAorCQkJCQkJCW5ldyBPYmplY3RbXSB7IHNlcmlhbGl6YXRpb25GaWxlTmFtZUZpZWxkLmdldFRleHQoKSwgc3RhcnREYXRlU3RyaW5nLCBlbmREYXRlU3RyaW5nLAorCQkJCQkJCQkJZ2V0Q3ljbGVEdXJhdGlvbkRlc2NyaXB0aW9uKCkgfSk7CisJCQkJfSAvLyBpZiBlbmQgZGF0ZQorCQkJCWVsc2UgeworCQkJCQkvLyBObworCQkJCQlyZXRWYWx1ZSA9IE1lc3NhZ2VGb3JtYXQuZm9ybWF0KE1lc3NhZ2VzCisJCQkJCQkJLmdldFN0cmluZygiTlNlcVNlcXVlbmNlcldpei5EQ19ERVNDUklQVElPTjIiKSwKKwkJCQkJCQluZXcgT2JqZWN0W10geyBzZXJpYWxpemF0aW9uRmlsZU5hbWVGaWVsZC5nZXRUZXh0KCksIHN0YXJ0RGF0ZVN0cmluZywKKwkJCQkJCQkJCWdldEN5Y2xlRHVyYXRpb25EZXNjcmlwdGlvbigpIH0pOworCQkJCX0gLy8gZWxzZQorCisJCQkJcmV0dXJuIHJldFZhbHVlOworCQkJfSAvLyBnZXREQ0Rlc2NyaXB0aW9uCisKKwkJCS8qKgorCQkJICogQHJldHVybiBhIHN0cmluZyBzdWl0YWJsZSBmb3IKKwkJCSAqICAgICAgICAge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uRHVibGluQ29yZSNzZXRWYWxpZChTdHJpbmcpfQorCQkJICovCisJCQlAT3ZlcnJpZGUKKwkJCXByb3RlY3RlZCBTdHJpbmcgZ2V0RENWYWxpZERhdGVSYW5nZSgpIHsKKwkJCQlmaW5hbCBTdHJpbmdCdWlsZGVyIHNiID0gbmV3IFN0cmluZ0J1aWxkZXIoInN0YXJ0PSIpOworCisJCQkJc2IuYXBwZW5kKER1YmxpbkNvcmVJbXBsCisJCQkJCQkuY3JlYXRlSVNPODYwMURhdGVTdHJpbmcoZ2V0U3RhcnREYXRlKCkpKTsKKworCQkJCXNiLmFwcGVuZCgiOyIpOworCisJCQkJLy8gRW5kIGRhdGU/CisJCQkJZmluYWwgRGF0ZSBlbmREYXRlID0gZ2V0RW5kRGF0ZSgpOworCQkJCWlmIChlbmREYXRlICE9IG51bGwpIHsKKwkJCQkJLy8gWWVzCisJCQkJCXNiLmFwcGVuZCgiIGVuZD0iKTsKKwkJCQkJc2IuYXBwZW5kKER1YmxpbkNvcmVJbXBsLmNyZWF0ZUlTTzg2MDFEYXRlU3RyaW5nKGVuZERhdGUpKTsKKwkJCQkJc2IuYXBwZW5kKCI7Iik7CisJCQkJfSAvLyBpZgorCQkJCXJldHVybiBzYi50b1N0cmluZygpOworCQkJfSAvLyBnZXRWYWxpZERhdGVSYW5nZQorCQl9IC8vIEZpeGVkU2VxdWVudGlhbFNlcXVlbmNlclBhZ2UKKworCQkvKioKKwkJICogVGhpcyBjbGFzcyBpcyBhIHtAbGluayBJSGFuZGxlcn0gZm9yIHRoZSBjb21tYW5kIHRoYXQgY3JlYXRlcyBhCisJCSAqIHtAbGluayBOZXdTZXF1ZW50aWFsU2VxdWVuY2VyV2l6YXJkfQorCQkgKi8KKwkJcHVibGljIHN0YXRpYyBjbGFzcyBOZXdTZXF1ZW50aWFsU2VxdWVuY2VyV2l6YXJkQ29tbWFuZEhhbmRsZXIgZXh0ZW5kcworCQkJCUFic3RyYWN0SGFuZGxlciBpbXBsZW1lbnRzIElIYW5kbGVyIHsKKworCQkJLyoqCisJCQkgKiBAc2VlIG9yZy5lY2xpcHNlLmNvcmUuY29tbWFuZHMuQWJzdHJhY3RIYW5kbGVyI2V4ZWN1dGUob3JnLmVjbGlwc2UuY29yZS5jb21tYW5kcy5FeGVjdXRpb25FdmVudCkKKwkJCSAqLworCQkJcHVibGljIE9iamVjdCBleGVjdXRlKGZpbmFsIEV4ZWN1dGlvbkV2ZW50IGV4ZWN1dGlvbkV2ZW50KQorCQkJCQl0aHJvd3MgRXhlY3V0aW9uRXhjZXB0aW9uIHsKKwkJCQlmaW5hbCBJV29ya2JlbmNoV2luZG93IHdpbmRvdyA9IEhhbmRsZXJVdGlsCisJCQkJCQkuZ2V0QWN0aXZlV29ya2JlbmNoV2luZG93Q2hlY2tlZChleGVjdXRpb25FdmVudCk7CisJCQkJZmluYWwgTmV3Rml4ZWRTZXF1ZW50aWFsU2VxdWVuY2VyV2l6YXJkIHdpemFyZCA9IG5ldyBOZXdGaXhlZFNlcXVlbnRpYWxTZXF1ZW5jZXJXaXphcmQoKTsKKwkJCQl3aXphcmQuaW5pdCh3aW5kb3cuZ2V0V29ya2JlbmNoKCksIFN0cnVjdHVyZWRTZWxlY3Rpb24uRU1QVFkpOworCQkJCWZpbmFsIFdpemFyZERpYWxvZyB3aXphcmREaWFsb2cgPSBuZXcgU1RFTVdpemFyZERpYWxvZyh3aW5kb3cKKwkJCQkJCS5nZXRTaGVsbCgpLCB3aXphcmQpOworCQkJCXdpemFyZERpYWxvZy5vcGVuKCk7CisJCQkJcmV0dXJuIG51bGw7CisJCQl9IC8vIGV4ZWN1dGUKKwkJfSAvLyBOZXdTZXF1ZW50aWFsU2VxdWVuY2VyV2l6YXJkQ29tbWFuZEhhbmRsZXIKKwl9IC8vIE5ld0ZpeGVkU2VxdWVudGlhbFNlcXVlbmNlcldpemFyZAorCisJLyoqCisJICogVGhpcyBjbGFzcyBpcyBhIFdpemFyZCBmb3IgbWFraW5nIG5ldyBTVEVNIHtAbGluayBSZWFsVGltZVNlcXVlbmNlcn1zLgorCSAqLworCXB1YmxpYyBzdGF0aWMgY2xhc3MgTmV3UmVhbFRpbWVTZXF1ZW5jZXJXaXphcmQgZXh0ZW5kcworCQkJTmV3U2VxdWVudGlhbFNlcXVlbmNlcldpemFyZCB7CisKKwkJLyoqCisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS51aS53aXphcmRzLk5ld0lkZW50aWZpYWJsZVdpemFyZCNnZXRXaXphcmRUaXRsZSgpCisJCSAqLworCQlAT3ZlcnJpZGUKKwkJcHJvdGVjdGVkIFN0cmluZyBnZXRXaXphcmRUaXRsZSgpIHsKKwkJCXJldHVybiBNZXNzYWdlcy5nZXRTdHJpbmcoIk5SVFNlcXVlbmNlcldpei53aXphcmRfdGl0bGUiKTsgLy8kTk9OLU5MUy0xJAorCQl9IC8vIGdldFdpemFyZFRpdGxlCisKKwkJLyoqCisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS51aS53aXphcmRzLk5ld0lkZW50aWZpYWJsZVdpemFyZCNjcmVhdGVOZXdJZGVudGlmaWFibGVQYWdlKCkKKwkJICovCisJCUBPdmVycmlkZQorCQlwcm90ZWN0ZWQgTmV3SWRlbnRpZmlhYmxlUGFnZSBjcmVhdGVOZXdJZGVudGlmaWFibGVQYWdlKCkgeworCQkJdGhpcy5zZXRIZWxwQ29udGV4dElkKCJvcmcuZWNsaXBzZS5zdGVtLmRvYy5uZXdyZWFsdGltZXNlcXVlbmNlcl9jb250ZXh0aWQiKTsKKwkJCXJldHVybiBuZXcgUmVhbFRpbWVTZXF1ZW50aWFsU2VxdWVuY2VyUGFnZSgpOworCQl9IC8vIGNyZWF0ZU5ld0lkZW50aWZpYWJsZVBhZ2UKKworCQkvKioKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnVpLndpemFyZHMuTmV3SWRlbnRpZmlhYmxlV2l6YXJkI2NyZWF0ZUlkZW50aWZpYWJsZSgpCisJCSAqLworCQlAT3ZlcnJpZGUKKwkJcHJvdGVjdGVkIElkZW50aWZpYWJsZSBjcmVhdGVJZGVudGlmaWFibGUoKSB7CisJCQlmaW5hbCBSZWFsVGltZVNlcXVlbmNlciByZXRWYWx1ZSA9IFNlcXVlbmNlckZhY3RvcnkuZUlOU1RBTkNFCisJCQkJCS5jcmVhdGVSZWFsVGltZVNlcXVlbmNlcigpOworCQkJcmV0VmFsdWUuc2V0RHVibGluQ29yZShuZXdEdWJsaW5Db3JlUGFnZS5jcmVhdGVEdWJsaW5Db3JlKCkpOworCQkJcmV0VmFsdWUKKwkJCQkJLnNldFRpbWVJbmNyZW1lbnQoKChSZWFsVGltZVNlcXVlbnRpYWxTZXF1ZW5jZXJQYWdlKSBuZXdJZGVudGlmaWFibGVQYWdlKQorCQkJCQkJCS5nZXRDeWNsZUR1cmF0aW9uKCkpOworCQkJcmV0dXJuIHJldFZhbHVlOworCQl9IC8vIGNyZWF0ZVNwZWNpZmljSWRlbnRpZmlhYmxlCisKKwkJLyoqCisJCSAqIFRoaXMgY2xhc3MgcmVwcmVzZW50cyBhIHtAbGluayBTZXF1ZW50aWFsU2VxdWVuY2VyUGFnZX0gZm9yIGEKKwkJICoge0BsaW5rIFJlYWxUaW1lU2VxdWVuY2VyfXMuCisJCSAqLworCQlwcm90ZWN0ZWQgc3RhdGljIGNsYXNzIFJlYWxUaW1lU2VxdWVudGlhbFNlcXVlbmNlclBhZ2UgZXh0ZW5kcworCQkJCVNlcXVlbnRpYWxTZXF1ZW5jZXJQYWdlIHsKKworCQkJLyoqCisJCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0udWkud2l6YXJkcy5OZXdTZXF1ZW50aWFsU2VxdWVuY2VyV2l6YXJkLlNlcXVlbnRpYWxTZXF1ZW5jZXJQYWdlI2NyZWF0ZVNlcXVlbnRpYWxTZXF1ZW5jZXJTcGVjaWZpY0NvbXBvc2l0ZShvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGUpCisJCQkgKi8KKwkJCUBPdmVycmlkZQorCQkJcHJvdGVjdGVkIENvbXBvc2l0ZSBjcmVhdGVTZXF1ZW50aWFsU2VxdWVuY2VyU3BlY2lmaWNDb21wb3NpdGUoCisJCQkJCWZpbmFsIENvbXBvc2l0ZSBwYXJlbnQpIHsKKwkJCQlmaW5hbCBDb21wb3NpdGUgY29tcG9zaXRlID0gbmV3IENvbXBvc2l0ZShwYXJlbnQsIFNXVC5OT05FKTsKKwkJCQkKKwkJCQlyZXR1cm4gY29tcG9zaXRlOworCQkJfSAvLyBjcmVhdGVTZXF1ZW50aWFsU2VxdWVuY2VyU3BlY2lmaWNDb21wb3NpdGUKKworCQkJQE92ZXJyaWRlCisJCQlwcm90ZWN0ZWQgQ29tcG9zaXRlIGNyZWF0ZVNwZWNpZmljQ29tcG9zaXRlKGZpbmFsIENvbXBvc2l0ZSBwYXJlbnQpIHsKKwkJCQlDb21wb3NpdGUgY29tcG9zaXRlID0gc3VwZXIuY3JlYXRlU3BlY2lmaWNDb21wb3NpdGUocGFyZW50KTsKKwkJCQlQbGF0Zm9ybVVJLmdldFdvcmtiZW5jaCgpLmdldEhlbHBTeXN0ZW0oKS5zZXRIZWxwKHBhcmVudCwgIm9yZy5lY2xpcHNlLnN0ZW0uZG9jLm5ld3JlYWx0aW1lc2VxdWVuY2VyX2NvbnRleHRpZCIpOworCQkJCXJldHVybiBjb21wb3NpdGU7CisJCQl9CisJCQkvKioKKwkJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS51aS53aXphcmRzLk5ld1NlcXVlbnRpYWxTZXF1ZW5jZXJXaXphcmQuU2VxdWVudGlhbFNlcXVlbmNlclBhZ2UjZ2V0RENUaXRsZSgpCisJCQkgKi8KKwkJCUBPdmVycmlkZQorCQkJcHJvdGVjdGVkIFN0cmluZyBnZXREQ1RpdGxlKCkgeworCQkJCXJldHVybiBNZXNzYWdlRm9ybWF0LmZvcm1hdChNZXNzYWdlcworCQkJCQkJLmdldFN0cmluZygiTlNSVFNlcXVlbmNlcldpei5EQ19USVRMRSIpLAorCQkJCQkJbmV3IE9iamVjdFtdIHsgZ2V0Q3ljbGVEdXJhdGlvbkRlc2NyaXB0aW9uKCkgfSk7CisJCQl9IC8vIGdldERDVGl0bGUKKworCQkJLyoqCisJCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0udWkud2l6YXJkcy5OZXdJZGVudGlmaWFibGVXaXphcmQuTmV3SWRlbnRpZmlhYmxlUGFnZSNnZXREQ0Rlc2NyaXB0aW9uKCkKKwkJCSAqLworCQkJQE92ZXJyaWRlCisJCQlwcm90ZWN0ZWQgU3RyaW5nIGdldERDRGVzY3JpcHRpb24oKSB7CisJCQkJcmV0dXJuIE1lc3NhZ2VGb3JtYXQuZm9ybWF0KE1lc3NhZ2VzCisJCQkJCQkuZ2V0U3RyaW5nKCJOU1JUU2VxdWVuY2VyV2l6LkRDX0RFU0NSSVBUSU9OMSIpLAorCQkJCQkJbmV3IE9iamVjdFtdIHsgZ2V0Q3ljbGVEdXJhdGlvbkRlc2NyaXB0aW9uKCkgfSk7CisJCQl9IC8vIGdldERDRGVzY3JpcHRpb24KKworCQkJLyoqCisJCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0udWkud2l6YXJkcy5OZXdTZXF1ZW50aWFsU2VxdWVuY2VyV2l6YXJkLlNlcXVlbnRpYWxTZXF1ZW5jZXJQYWdlI2dldERDVmFsaWREYXRlUmFuZ2UoKQorCQkJICovCisJCQlAT3ZlcnJpZGUKKwkJCXByb3RlY3RlZCBTdHJpbmcgZ2V0RENWYWxpZERhdGVSYW5nZSgpIHsKKwkJCQlyZXR1cm4gIiI7CisJCQl9IC8vIGdldFZhbGlkRGF0ZVJhbmdlCisJCQkKKwkJfSAvLyBSZWFsVGltZVNlcXVlbnRpYWxTZXF1ZW5jZXJQYWdlCisKKwkJLyoqCisJCSAqIFRoaXMgY2xhc3MgaXMgYSB7QGxpbmsgSUhhbmRsZXJ9IGZvciB0aGUgY29tbWFuZCB0aGF0IGNyZWF0ZXMgYQorCQkgKiB7QGxpbmsgTmV3U2VxdWVudGlhbFNlcXVlbmNlcldpemFyZH0KKwkJICovCisJCXB1YmxpYyBzdGF0aWMgY2xhc3MgTmV3UmVhbFRpbWVTZXF1ZW5jZXJXaXphcmRDb21tYW5kSGFuZGxlciBleHRlbmRzCisJCQkJQWJzdHJhY3RIYW5kbGVyIGltcGxlbWVudHMgSUhhbmRsZXIgeworCisJCQkvKioKKwkJCSAqIEBzZWUgb3JnLmVjbGlwc2UuY29yZS5jb21tYW5kcy5BYnN0cmFjdEhhbmRsZXIjZXhlY3V0ZShvcmcuZWNsaXBzZS5jb3JlLmNvbW1hbmRzLkV4ZWN1dGlvbkV2ZW50KQorCQkJICovCisJCQlwdWJsaWMgT2JqZWN0IGV4ZWN1dGUoZmluYWwgRXhlY3V0aW9uRXZlbnQgZXhlY3V0aW9uRXZlbnQpCisJCQkJCXRocm93cyBFeGVjdXRpb25FeGNlcHRpb24geworCQkJCWZpbmFsIElXb3JrYmVuY2hXaW5kb3cgd2luZG93ID0gSGFuZGxlclV0aWwKKwkJCQkJCS5nZXRBY3RpdmVXb3JrYmVuY2hXaW5kb3dDaGVja2VkKGV4ZWN1dGlvbkV2ZW50KTsKKwkJCQlmaW5hbCBOZXdSZWFsVGltZVNlcXVlbmNlcldpemFyZCB3aXphcmQgPSBuZXcgTmV3UmVhbFRpbWVTZXF1ZW5jZXJXaXphcmQoKTsKKwkJCQl3aXphcmQuaW5pdCh3aW5kb3cuZ2V0V29ya2JlbmNoKCksIFN0cnVjdHVyZWRTZWxlY3Rpb24uRU1QVFkpOworCQkJCWZpbmFsIFdpemFyZERpYWxvZyB3aXphcmREaWFsb2cgPSBuZXcgU1RFTVdpemFyZERpYWxvZyh3aW5kb3cKKwkJCQkJCS5nZXRTaGVsbCgpLCB3aXphcmQpOworCQkJCXdpemFyZERpYWxvZy5vcGVuKCk7CisJCQkJcmV0dXJuIG51bGw7CisJCQl9IC8vIGV4ZWN1dGUKKwkJfSAvLyBOZXdSZWFsVGltZVNlcXVlbmNlcldpemFyZENvbW1hbmRIYW5kbGVyCisJfSAvLyBOZXdSZWFsVGltZVNlcXVlbmNlcldpemFyZAorfSAvLyBOZXdTZXF1ZW50aWFsU2VxdWVuY2VyV2l6YXJkCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvd2l6YXJkcy9OZXdUcmlnZ2VyV2l6YXJkLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvd2l6YXJkcy9OZXdUcmlnZ2VyV2l6YXJkLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTViM2MyYwotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS93aXphcmRzL05ld1RyaWdnZXJXaXphcmQuamF2YQpAQCAtMCwwICsxLDE1NyBAQAorLy8gTmV3VHJpZ2dlcldpemFyZC5qYXZhCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0udWkud2l6YXJkczsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5jb21tYW5kcy5BYnN0cmFjdEhhbmRsZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5jb21tYW5kcy5FeGVjdXRpb25FdmVudDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLmNvbW1hbmRzLkV4ZWN1dGlvbkV4Y2VwdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLmNvbW1hbmRzLklIYW5kbGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuU3RydWN0dXJlZFNlbGVjdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS53aXphcmQuV2l6YXJkRGlhbG9nOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5TVEVNVVJJOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uSWRlbnRpZmlhYmxlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS50cmlnZ2VyLlRyaWdnZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnRyaWdnZXIuVHJpZ2dlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnRyaWdnZXIuVHJpZ2dlclBhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LlNXVDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGU7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaFdpbmRvdzsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5QbGF0Zm9ybVVJOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLmhhbmRsZXJzLkhhbmRsZXJVdGlsOworCisKKy8qKgorICogVGhpcyBjbGFzcyBpcyBhIHtAbGluayBOZXdJZGVudGlmaWFibGVXaXphcmR9IGZvciB0aGF0IGNyZWF0ZXMgbmV3IFNURU0KKyAqIHtAbGluayBUcmlnZ2VyfXMKKyAqLworcHVibGljIGNsYXNzIE5ld1RyaWdnZXJXaXphcmQgZXh0ZW5kcyBOZXdJZGVudGlmaWFibGVXaXphcmQgeworCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnVpLndpemFyZHMuTmV3SWRlbnRpZmlhYmxlV2l6YXJkI2dldFdpemFyZFRpdGxlKCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgU3RyaW5nIGdldFdpemFyZFRpdGxlKCkgeworCQlyZXR1cm4gTWVzc2FnZXMuZ2V0U3RyaW5nKCJOVHJpZ2dlcldpei53aXphcmRfdGl0bGUiKTsgLy8kTk9OLU5MUy0xJAorCX0KKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS51aS53aXphcmRzLk5ld0lkZW50aWZpYWJsZVdpemFyZCNjcmVhdGVOZXdJZGVudGlmaWFibGVQYWdlKCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgTmV3SWRlbnRpZmlhYmxlUGFnZSBjcmVhdGVOZXdJZGVudGlmaWFibGVQYWdlKCkgeworCQl0aGlzLnNldEhlbHBDb250ZXh0SWQoIm9yZy5lY2xpcHNlLnN0ZW0uZG9jLm5ld3RyaWdnZXJfY29udGV4dGlkIik7CisJCXJldHVybiBuZXcgTmV3VHJpZ2dlclBhZ2UoKTsKKwl9CisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0udWkud2l6YXJkcy5OZXdJZGVudGlmaWFibGVXaXphcmQjY3JlYXRlRHVibGluQ29yZVBhZ2UoKQorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCBEdWJsaW5Db3JlUGFnZSBjcmVhdGVEdWJsaW5Db3JlUGFnZSgpIHsKKwkJcmV0dXJuIG5ldyBEdWJsaW5Db3JlUGFnZSgpIHsKKwkJCUBPdmVycmlkZQorCQkJcHJvdGVjdGVkIHZvaWQgaW5pdGlhbGl6ZURDQXR0cmlidXRlcygpIHsKKwkJCQlzdXBlci5pbml0aWFsaXplRENBdHRyaWJ1dGVzKCk7CisJCQkJZm9ybWF0LnNldFRleHQoVHJpZ2dlclBhY2thZ2UuZU5TX1VSSSk7CisJCQkJZm9ybWF0LnNldEVuYWJsZWQoZmFsc2UpOworCQkJCXR5cGUuc2V0VGV4dChTVEVNVVJJLlRSSUdHRVJfVFlQRV9VUkkudG9TdHJpbmcoKSk7CisJCQkJdHlwZS5zZXRFbmFibGVkKGZhbHNlKTsKKwkJCQkKKwkJCQl0aXRsZVRleHRGaWVsZC5zZXRUZXh0KE1lc3NhZ2VzLmdldFN0cmluZygiZGNfdGl0bGVfdHJpZyIpKTsKKwkJCQlzb3VyY2Uuc2V0VGV4dChNZXNzYWdlcy5nZXRTdHJpbmcoImRjX3NvdXJjZV90cmlnIikpOworCQkJCWRlc2NyaXB0aW9uVGV4dEZpZWxkLnNldFRleHQoTWVzc2FnZXMuZ2V0U3RyaW5nKCJkY19kZXNjX3RyaWciKSk7CisJCQkJCisJCQl9CisJCX07CisJfSAvLyBjcmVhdGVEdWJsaW5Db3JlUGFnZQorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnVpLndpemFyZHMuTmV3SWRlbnRpZmlhYmxlV2l6YXJkI2NyZWF0ZUlkZW50aWZpYWJsZSgpCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIElkZW50aWZpYWJsZSBjcmVhdGVJZGVudGlmaWFibGUoKSB7CisJCWZpbmFsIFRyaWdnZXIgcmV0VmFsdWUgPSBUcmlnZ2VyRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlVHJpZ2dlcigpOworCQlyZXRWYWx1ZS5zZXREdWJsaW5Db3JlKG5ld0R1YmxpbkNvcmVQYWdlLmNyZWF0ZUR1YmxpbkNvcmUoKSk7CisJCXJldHVybiByZXRWYWx1ZTsKKwl9IC8vIGNyZWF0ZUlkZW50aWZpYWJsZQorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnVpLndpemFyZHMuTmV3SWRlbnRpZmlhYmxlV2l6YXJkI2dldFNlcmlhbGl6YXRpb25Gb2xkZXJOYW1lKCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgU3RyaW5nIGdldFNlcmlhbGl6YXRpb25Gb2xkZXJOYW1lKCkgeworCQlyZXR1cm4gTmV3U1RFTVByb2plY3RXaXphcmQuVFJJR0dFUlNfRk9MREVSX05BTUU7CisJfQorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnVpLndpemFyZHMuTmV3SWRlbnRpZmlhYmxlV2l6YXJkI2dldFNlcmlhbGl6YXRpb25GaWxlTmFtZUV4dGVuc2lvbigpCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIFN0cmluZyBnZXRTZXJpYWxpemF0aW9uRmlsZU5hbWVFeHRlbnNpb24oKSB7CisJCXJldHVybiBUcmlnZ2VyUGFja2FnZS5lTkFNRTsKKwl9CisKKwlwcm90ZWN0ZWQgc3RhdGljIGNsYXNzIE5ld1RyaWdnZXJQYWdlIGV4dGVuZHMgTmV3SWRlbnRpZmlhYmxlUGFnZSB7CisKKwkJLyoqCisJCSAqIERlZmF1bHQgQ29uc3RydWN0b3IKKwkJICovCisJCXByb3RlY3RlZCBOZXdUcmlnZ2VyUGFnZSgpIHsKKwkJCXN1cGVyKE1lc3NhZ2VzLmdldFN0cmluZygiTlRyaWdnZXJXaXoucGFnZV90aXRsZSIpKTsgLy8kTk9OLU5MUy0xJAorCQkJc2V0VGl0bGUoTWVzc2FnZXMuZ2V0U3RyaW5nKCJOVHJpZ2dlcldpei5wYWdlX3RpdGxlIikpOyAvLyROT04tTkxTLTEkCisJCQlzZXREZXNjcmlwdGlvbihNZXNzYWdlcy5nZXRTdHJpbmcoIk5UcmlnZ2VyV2l6LnBhZ2VfZGVzY3JpcHRpb24iKSk7IC8vJE5PTi1OTFMtMSQKKwkJfSAvLyBOZXdUcmlnZ2VyUGFnZQorCisJCUBPdmVycmlkZQorCQlwcm90ZWN0ZWQgQ29tcG9zaXRlIGNyZWF0ZVNwZWNpZmljQ29tcG9zaXRlKGZpbmFsIENvbXBvc2l0ZSBwYXJlbnQpIHsKKwkJCVBsYXRmb3JtVUkuZ2V0V29ya2JlbmNoKCkuZ2V0SGVscFN5c3RlbSgpLnNldEhlbHAocGFyZW50LCAib3JnLmVjbGlwc2Uuc3RlbS5kb2MubmV3dHJpZ2dlcl9jb250ZXh0aWQiKTsKKwkJCXJldHVybiBuZXcgQ29tcG9zaXRlKHBhcmVudCwgU1dULk5PTkUpOworCQl9IC8vIGNyZWF0ZVNwZWNpZmljQ29tcG9zaXRlCisJCQorCQkvKioKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnVpLndpemFyZHMuTmV3SWRlbnRpZmlhYmxlV2l6YXJkLk5ld0lkZW50aWZpYWJsZVBhZ2UjZ2V0RENEZXNjcmlwdGlvbigpCisJCSAqLworCQlAT3ZlcnJpZGUKKwkJcHJvdGVjdGVkIFN0cmluZyBnZXREQ0Rlc2NyaXB0aW9uKCkgeworCQkJLy8gTGVhdmUgZGVzY3JpcHRpb24vdGl0bGUgYmxhbmsKKwkJCXJldHVybiAiIjsKKy8vCQkJcmV0dXJuIE1lc3NhZ2VGb3JtYXQuZm9ybWF0KE1lc3NhZ2VzCisvLwkJCQkJLmdldFN0cmluZygiTlRyaWdnZXJXaXouRENfREVTQ1JJUFRJT04iKSwKKy8vCQkJCQluZXcgT2JqZWN0W10geyBzZXJpYWxpemF0aW9uRmlsZU5hbWVGaWVsZC5nZXRUZXh0KCkgfSk7CisJCX0gLy8gZ2V0RENEZXNjcmlwdGlvbgorCisJfSAvLyBOZXdUcmlnZ2VyUGFnZQorCisJLyoqCisJICogVGhpcyBjbGFzcyBpcyBhIHtAbGluayBJSGFuZGxlcn0gZm9yIHRoZSBjb21tYW5kIHRoYXQgY3JlYXRlcyBhCisJICoge0BsaW5rIE5ld1RyaWdnZXJXaXphcmR9CisJICovCisJcHVibGljIHN0YXRpYyBjbGFzcyBOZXdUcmlnZ2VyV2l6YXJkQ29tbWFuZEhhbmRsZXIgZXh0ZW5kcyBBYnN0cmFjdEhhbmRsZXIKKwkJCWltcGxlbWVudHMgSUhhbmRsZXIgeworCisJCS8qKgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLmNvcmUuY29tbWFuZHMuQWJzdHJhY3RIYW5kbGVyI2V4ZWN1dGUob3JnLmVjbGlwc2UuY29yZS5jb21tYW5kcy5FeGVjdXRpb25FdmVudCkKKwkJICovCisJCXB1YmxpYyBPYmplY3QgZXhlY3V0ZShmaW5hbCBFeGVjdXRpb25FdmVudCBleGVjdXRpb25FdmVudCkKKwkJCQl0aHJvd3MgRXhlY3V0aW9uRXhjZXB0aW9uIHsKKwkJCWZpbmFsIElXb3JrYmVuY2hXaW5kb3cgd2luZG93ID0gSGFuZGxlclV0aWwKKwkJCQkJLmdldEFjdGl2ZVdvcmtiZW5jaFdpbmRvd0NoZWNrZWQoZXhlY3V0aW9uRXZlbnQpOworCQkJZmluYWwgTmV3VHJpZ2dlcldpemFyZCB3aXphcmQgPSBuZXcgTmV3VHJpZ2dlcldpemFyZCgpOworCQkJd2l6YXJkLmluaXQod2luZG93LmdldFdvcmtiZW5jaCgpLCBTdHJ1Y3R1cmVkU2VsZWN0aW9uLkVNUFRZKTsKKwkJCWZpbmFsIFdpemFyZERpYWxvZyB3aXphcmREaWFsb2cgPSBuZXcgU1RFTVdpemFyZERpYWxvZyh3aW5kb3cKKwkJCQkJLmdldFNoZWxsKCksIHdpemFyZCk7CisJCQl3aXphcmREaWFsb2cub3BlbigpOworCQkJcmV0dXJuIG51bGw7CisJCX0gLy8gZXhlY3V0ZQorCX0gLy8gTmV3VHJpZ2dlcldpemFyZENvbW1hbmRIYW5kbGVyCisJCit9IC8vIE5ld1RyaWdnZXJXaXphcmQKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvd2l6YXJkcy9TVEVNV2l6YXJkRGlhbG9nLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvd2l6YXJkcy9TVEVNV2l6YXJkRGlhbG9nLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjQxNWIyNQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS93aXphcmRzL1NURU1XaXphcmREaWFsb2cuamF2YQpAQCAtMCwwICsxLDcxIEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0udWkud2l6YXJkczsNCisNCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyAqIENvcHlyaWdodCAoYykgMjAwNiwyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLg0KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMNCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjANCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdA0KKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sDQorICoNCisgKiBDb250cmlidXRvcnM6DQorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbg0KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KKw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5kaWFsb2dzLklEaWFsb2dDb25zdGFudHM7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnJlc291cmNlLkltYWdlRGVzY3JpcHRvcjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uud2l6YXJkLklXaXphcmQ7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLndpemFyZC5XaXphcmREaWFsb2c7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ncmFwaGljcy5JbWFnZTsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5HcmlkRGF0YTsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQnV0dG9uOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGU7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlNoZWxsOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5QbGF0Zm9ybVVJOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5wbHVnaW4uQWJzdHJhY3RVSVBsdWdpbjsNCisNCitwdWJsaWMgY2xhc3MgU1RFTVdpemFyZERpYWxvZyBleHRlbmRzIFdpemFyZERpYWxvZyB7DQorDQorCXByaXZhdGUgQnV0dG9uIGhlbHBCdXR0b247DQorDQorCXB1YmxpYyBTVEVNV2l6YXJkRGlhbG9nKGZpbmFsIFNoZWxsIHBhcmVudFNoZWxsLCBmaW5hbCBJV2l6YXJkIG5ld1dpemFyZCkgew0KKwkJc3VwZXIocGFyZW50U2hlbGwsIG5ld1dpemFyZCk7DQorCX0NCisNCisJQE92ZXJyaWRlDQorCXByb3RlY3RlZCB2b2lkIGJ1dHRvblByZXNzZWQoZmluYWwgaW50IGJ1dHRvbklkKSB7DQorCQlzdXBlci5idXR0b25QcmVzc2VkKGJ1dHRvbklkKTsNCisJCWlmIChJRGlhbG9nQ29uc3RhbnRzLkhFTFBfSUQgPT0gYnV0dG9uSWQpIHsNCisJCQlpZiAodGhpcy5nZXRXaXphcmQoKSBpbnN0YW5jZW9mIE5ld0lkZW50aWZpYWJsZVdpemFyZCkgew0KKwkJCQlQbGF0Zm9ybVVJLmdldFdvcmtiZW5jaCgpLmdldEhlbHBTeXN0ZW0oKS5kaXNwbGF5SGVscCgNCisJCQkJCQkoKE5ld0lkZW50aWZpYWJsZVdpemFyZCkgdGhpcy5nZXRXaXphcmQoKSkNCisJCQkJCQkJCS5nZXRIZWxwQ29udGV4dElkKCkpOw0KKwkJCX0gZWxzZSB7DQorCQkJCVBsYXRmb3JtVUkuZ2V0V29ya2JlbmNoKCkuZ2V0SGVscFN5c3RlbSgpLmRpc3BsYXlIZWxwKA0KKwkJCQkJCSgoTmV3Tm9uSWRlbnRpZmlhYmxlV2l6YXJkKSB0aGlzLmdldFdpemFyZCgpKQ0KKwkJCQkJCQkJLmdldEhlbHBDb250ZXh0SWQoKSk7DQorCQkJfQ0KKwkJfQ0KKwl9DQorDQorCUBPdmVycmlkZQ0KKwlwcm90ZWN0ZWQgdm9pZCBjcmVhdGVCdXR0b25zRm9yQnV0dG9uQmFyKGZpbmFsIENvbXBvc2l0ZSBwYXJlbnQpIHsNCisJCXN1cGVyLmNyZWF0ZUJ1dHRvbnNGb3JCdXR0b25CYXIocGFyZW50KTsNCisJCWhlbHBCdXR0b24gPSBzdXBlci5nZXRCdXR0b24oSURpYWxvZ0NvbnN0YW50cy5IRUxQX0lEKTsNCisJCWZpbmFsIEltYWdlRGVzY3JpcHRvciBoZWxwSWNvbiA9IEFic3RyYWN0VUlQbHVnaW4NCisJCQkJLmltYWdlRGVzY3JpcHRvckZyb21QbHVnaW4oIm9yZy5lY2xpcHNlLnN0ZW0udWkiLA0KKwkJCQkJCSJpY29ucy9mdWxsL2N1c3RvbW9iajE2L0hlbHBJY29uLmdpZiIpOw0KKwkJZmluYWwgSW1hZ2UgaW1hZ2UgPSBoZWxwSWNvbi5jcmVhdGVJbWFnZSgpOw0KKwkJZmluYWwgSW1hZ2VEZXNjcmlwdG9yIGhlbHBJY29uTWFjT1MgPSBBYnN0cmFjdFVJUGx1Z2luLmltYWdlRGVzY3JpcHRvckZyb21QbHVnaW4oIm9yZy5lY2xpcHNlLnN0ZW0udWkiLCAiaWNvbnMvZnVsbC9jdXN0b21vYmoxNi9IZWxwSWNvbk1hY09TLmdpZiIpOw0KKwkJaGVscEJ1dHRvbi5zZXRUZXh0KCIiKTsNCisJCWlmKFN5c3RlbS5nZXRQcm9wZXJ0aWVzKCkuZ2V0UHJvcGVydHkoIm9zLm5hbWUiKS5jb250YWlucygiTWFjIikpew0KKwkJCWZpbmFsIEltYWdlIGltYWdlTWFjT1MgPSBoZWxwSWNvbk1hY09TLmNyZWF0ZUltYWdlKCk7DQorCQkJaGVscEJ1dHRvbi5zZXRJbWFnZShpbWFnZU1hY09TKTsNCisJCX0NCisJCWVsc2V7DQorCQkJaGVscEJ1dHRvbi5zZXRJbWFnZShpbWFnZSk7DQorCQl9DQorCQlmaW5hbCBHcmlkRGF0YSBoZWxwQnV0dG9uTGF5b3V0ID0gbmV3IEdyaWREYXRhKCk7DQorCQloZWxwQnV0dG9uTGF5b3V0LnZlcnRpY2FsQWxpZ25tZW50ID0gR3JpZERhdGEuRklMTDsNCisJCWhlbHBCdXR0b24uc2V0TGF5b3V0RGF0YShoZWxwQnV0dG9uTGF5b3V0KTsNCisJfQ0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvd2l6YXJkcy9TVEVNV2l6YXJkTmV3UHJvamVjdENyZWF0aW9uUGFnZS5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3dpemFyZHMvU1RFTVdpemFyZE5ld1Byb2plY3RDcmVhdGlvblBhZ2UuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MTMwOGVlCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3dpemFyZHMvU1RFTVdpemFyZE5ld1Byb2plY3RDcmVhdGlvblBhZ2UuamF2YQpAQCAtMCwwICsxLDI5IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0udWkud2l6YXJkczsNCisNCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyAqIENvcHlyaWdodCAoYykgMjAxMCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4NCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzDQorICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wDQorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQNCisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbA0KKyAqDQorICogQ29udHJpYnV0b3JzOg0KKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24NCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCisNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5QbGF0Zm9ybVVJOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5kaWFsb2dzLldpemFyZE5ld1Byb2plY3RDcmVhdGlvblBhZ2U7DQorDQorcHVibGljIGNsYXNzIFNURU1XaXphcmROZXdQcm9qZWN0Q3JlYXRpb25QYWdlIGV4dGVuZHMgV2l6YXJkTmV3UHJvamVjdENyZWF0aW9uUGFnZSB7DQorDQorCXB1YmxpYyBTVEVNV2l6YXJkTmV3UHJvamVjdENyZWF0aW9uUGFnZShTdHJpbmcgcGFnZU5hbWUpIHsNCisJCXN1cGVyKHBhZ2VOYW1lKTsNCisJfQ0KKw0KKwlAT3ZlcnJpZGUNCisJICBwdWJsaWMgdm9pZCBjcmVhdGVDb250cm9sKENvbXBvc2l0ZSBwYXJlbnQpIHsNCisJCXN1cGVyLmNyZWF0ZUNvbnRyb2wocGFyZW50KTsNCisJCVBsYXRmb3JtVUkuZ2V0V29ya2JlbmNoKCkuZ2V0SGVscFN5c3RlbSgpLnNldEhlbHAoZ2V0Q29udHJvbCgpLCAib3JnLmVjbGlwc2Uuc3RlbS5kb2MubmV3c3RlbXByb2plY3RfY29udGV4dGlkIik7DQorCX0NCit9DQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3dpemFyZHMvbWVzc2FnZXMucHJvcGVydGllcyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS93aXphcmRzL21lc3NhZ2VzLnByb3BlcnRpZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjJiYTc4MwotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS93aXphcmRzL21lc3NhZ2VzLnByb3BlcnRpZXMKQEAgLTAsMCArMSwyNzIgQEAKKyMgV2l6YXJkTWVzc2FnZXMucHJvcGVydGllcworIworIy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorIyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyMgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyMgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorIyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisjICoKKyMgKiBDb250cmlidXRvcnM6CisjICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorIyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjIE5ldyBQcm9qZWN0IFdpemFyZAorTlNURU1Qcm9XaXoucGFnZV90aXRsZSA9IFNwZWNpZnkgdGhlIG5hbWUgb2YgdGhlIG5ldyBTVEVNIFByb2plY3QKK05TVEVNUHJvV2l6LnRpdGxlID0gQ3JlYXRlIGEgU1RFTSBwcm9qZWN0CitOU1RFTVByb1dpei5wYWdlX2Rlc2NyaXB0aW9uID0gQ3JlYXRlIGEgbmV3IFNURU0gcHJvamVjdCBpbiB0aGUgd29ya3NwYWNlIG9yIGluIGFuIGV4dGVybmFsIGxvY2F0aW9uLgorTlNURU1Qcm9XaXouY3JlYXRpbmdfZGlyZWN0b3JpZXMgPSBDcmVhdGluZyBwcm9qZWN0IGRpcmVjdG9yaWVzCitOU1RFTVByb1dpei5jcmVhdGluZ19wcm9qZWN0ID0gQ3JlYXRpbmcgbmV3IFNURU0gcHJvamVjdAorCitOU1RFTVByb1dpei5ncmFwaF9mb2xkZXIgPSBHcmFwaHMKK05TVEVNUHJvV2l6Lm1vZGVsX2ZvbGRlciA9IE1vZGVscworTlNURU1Qcm9XaXouc2NlbmFyaW9fZm9sZGVyID0gU2NlbmFyaW9zCitOU1RFTVByb1dpei5kZWNvcmF0b3JfZm9sZGVyID0gRGVjb3JhdG9ycworTlNURU1Qcm9XaXouQ3JlYXRlX1Byb2JsZW09UHJvYmxlbSBjcmVhdGluZyBwcm9qZWN0CisKKyMgTmV3IElkZW50aWZpZXIgV2l6YXJkIChzdXBlciBjbGFzcyB0byBHcmFwaC9Nb2RlbC9TY2VuYXJpbyB3aXphcmRzCitOSWRXaXouY3JlYXRpbmc9Q3JlYXRpbmcKK05JZFdpei5icm93c2U9QnJvd3NlCitOSWRXaXoucHJvamVjdD1Qcm9qZWN0CitOSWRXaXoubmFtZT1OYW1lCitOSWRXaXoubm9Qcm9qRXJyPU5vIHByb2plY3RzIGV4aXN0CitOSWRXaXoubmFtZU1pc3NpbmdFcnI9TmFtZSBpcyBtaXNzaW5nCitOSWRXaXoubmFtZUVycj1JbnZhbGlkIE5hbWUKK05JZFdpei5zYXZlRXJyPVByb2JsZW0gU2F2aW5nCisKKyMgRHVibGluIENvcmUgUGFnZSBDb25zdGFudHMKK05EdWJsaW5Db3JlLnBhZ2VfdGl0bGUgPSBEdWJsaW4gQ29yZQorTkR1YmxpbkNvcmUucGFnZV9kZXNjcmlwdGlvbiA9IEluaXRpYWxpemUgdGhlIER1YmxpbiBDb3JlIE1ldGFkYXRhLgorCitORHVibGluQ29yZS50aXRsZT1UaXRsZQorTkR1YmxpbkNvcmUudGl0bGVEZXNjPUEgbmFtZSBnaXZlbiB0byB0aGUgcmVzb3VyY2UuICBVc3VhbGx5IHRoZSBmb3JtYWwgbmFtZSBvZiB0aGUgcmVzb3VyY2UuCitORHVibGluQ29yZS5kZXNjPURlc2NyaXB0aW9uCitORHVibGluQ29yZS5kZXNjRGVzYz1BbiBhY2NvdW50IG9mIHRoZSBjb250ZW50IG9mIHRoZSByZXNvdXJjZS4gIFR5cGljYWxseSBhIHNob3J0IGFic3RyYWN0LgorTkR1YmxpbkNvcmUuY3JlYXRvcj1DcmVhdG9yCitORHVibGluQ29yZS5jcmVhdG9yRGVzYz1BbiBlbnRpdHkgcHJpbWFyaWx5IHJlc3BvbnNpYmxlIGZvciBtYWtpbmcgdGhlIGNvbnRlbnQgb2YgdGhlIHJlc291cmNlLiAgVHlwaWNhbGx5IHRoZSBuYW1lIG9mIGEgcGVyc29uIG9yIG9yZ2FuaXphdGlvbi4KK05EdWJsaW5Db3JlLmRhdGU9RGF0ZQorTkR1YmxpbkNvcmUuZGF0ZURlc2M9QSBkYXRlIGFzc29jaWF0ZWQgd2l0aCBhbiBldmVudCBpbiB0aGUgbGlmZSBjeWNsZSBvZiB0aGUgcmVzb3VyY2UuICBUeXBpY2FsbHkgWVlZWS1NTS1ERC4gZS5nLiAyMDA3LTAxLTE4CitORHVibGluQ29yZS52YWxpZD1WYWxpZAorTkR1YmxpbkNvcmUudmFsaWREZXNjPURhdGUgKG9mdGVuIGEgcmFuZ2UpIG9mIHZhbGlkaXR5IG9mIGEgcmVzb3VyY2UuIGUuZy4gc3RhcnQ9MjAwNi0wMy0yOTsgZW5kPTIwMDYtMDMtMzA7IG9yIHNpbXBseSBzdGFydD0yMDA2LTAzLTI5OyBpZiB0aGVyZSBpcyBubyBlbmQgdG8gdGhlIHZhbGlkaXR5LgorTkR1YmxpbkNvcmUuY3JlYXRlZD1DcmVhdGVkCitORHVibGluQ29yZS5jcmVhdGVkRGVzYz1UaGUgY3JlYXRpb24gZGF0ZSBvZiB0aGUgcmVzb3VyY2UuICBUeXBpY2FsbHkgWVlZWS1NTS1ERC4gZS5nLiAyMDA3LTAxLTE4CitORHVibGluQ29yZS5zb3VyY2U9U291cmNlCitORHVibGluQ29yZS5zb3VyY2VEZXNjPUEgcmVmZXJlbmNlIHRvIGEgcmVzb3VyY2UgZnJvbSB3aGljaCB0aGUgcHJlc2VudCByZXNvdXJjZSBpcyBkZXJpdmVkLiBUaGUgb3JpZ2luYWwgc291cmNlIG9mIHRoZSBjb250ZW50cyBvZiB0aGUgcmVzb3VyY2UuIGUuZy4gYSBVUkwuCitORHVibGluQ29yZS5wdWJsaXNoZXI9UHVibGlzaGVyCitORHVibGluQ29yZS5wdWJsaXNoZXJEZXNjPUFuIGVudGl0eSByZXNwb25zaWJsZSBmb3IgbWFraW5nIHRoZSByZXNvdXJjZSBhdmFpbGFibGUuICBUeXBpY2FsbHkgdGhlIG5hbWUgb2YgYSBwZXJzb24sIG9yZ2FuaXphdGlvbiBvciBzZXJ2aWNlLgorTkR1YmxpbkNvcmUuY292ZXJhZ2U9Q292ZXJhZ2UKK05EdWJsaW5Db3JlLmNvdmVyYWdlRGVzYz1UaGUgZXh0ZW50IG9yIHNjb3BlIG9mIHRoZSBjb250ZW50IG9mIHRoZSByZXNvdXJjZS4gIENvdWxkIGluY2x1ZGUgc3BhdGlhbCBsb2NhdGlvbiwgdGVtcG9yYWwgcGVyaW9kIChkYXRlIG9yIGRhdGUgcmFuZ2UpLCBqdXJpc2RpY3Rpb24sIGV0Yy4KK05EdWJsaW5Db3JlLmNvbnRyaWJ1dG9yPUNvbnRyaWJ1dG9yCitORHVibGluQ29yZS5jb250cmlidXRvckRlc2M9QW4gZW50aXR5IHJlc3BvbnNpYmxlIGZvciBtYWtpbmcgY29udHJpYnV0aW9ucyB0byB0aGUgcmVzb3VyY2UuICBUeXBpY2FsbHkgdGhlIG5hbWUgb2YgYSBwZXJzb24sIG9yZ2FuaXphdGlvbiBvciBzZXJ2aWNlLgorTkR1YmxpbkNvcmUucmVsYXRpb249UmVsYXRpb24KK05EdWJsaW5Db3JlLnJlbGF0aW9uRGVzYz1BIHJlZmVyZW5jZSB0byBhIHJlbGF0ZWQgcmVzb3VyY2UuIGUuZy4gYSBVUkwKK05EdWJsaW5Db3JlLnJpZ2h0cz1SaWdodHMKK05EdWJsaW5Db3JlLnJpZ2h0c0Rlc2M9SW5mb3JtYXRpb24gYWJvdXQgcmlnaHRzIGhlbGQgaW4gYW5kIG92ZXIgdGhlIHJlc291cmNlLiAgVHlwaWNhbGx5LCBhIHJpZ2h0cyBtYW5hZ2VtZW50IHN0YXRlbWVudC4gZS5nLiBDb3B5cmlnaHQgRm9vQmFyIDIwMDYKK05EdWJsaW5Db3JlLnN1YmplY3Q9U3ViamVjdAorTkR1YmxpbkNvcmUuc3ViamVjdERlc2M9VGhlIHRvcGljIG9mIHRoZSBjb250ZW50IG9mIHRoZSByZXNvdXJjZS4gIFR5cGljYWxseSBrZXl3b3JkcyBvciBjbGFzc2lmaWNhdGlvbiBjb2Rlcy4KK05EdWJsaW5Db3JlLmxhbmd1YWdlPUxhbmd1YWdlCitORHVibGluQ29yZS5sYW5ndWFnZURlc2M9QSBsYW5ndWFnZSBvZiB0aGUgaW50ZWxsZWN0dWFsIGNvbnRlbnQgb2YgdGhlIHJlc291cmNlLiBlLmcuIGVuLUdCCitORHVibGluQ29yZS5jaXRhdGlvbj1DaXRhdGlvbgorTkR1YmxpbkNvcmUuY2l0YXRpb25EZXNjPUEgYmlibGlvZ3JhcGhpYyByZWZlcmVuY2UgZm9yIHRoZSByZXNvdXJjZS4KK05EdWJsaW5Db3JlLmxpY2Vuc2U9TGljZW5zZQorTkR1YmxpbkNvcmUubGljZW5zRGVzYz1BIGxlZ2FsIGRvY3VtZW50IGdpdmluZyBvZmZpY2lhbCBwZXJtaXNzaW9uIHRvIGRvIHNvbWV0aGluZyB3aXRoIHRoZSByZXNvdXJjZS4KK05EdWJsaW5Db3JlLnJlcXVpcmVkPVJlcXVpcmVkCitORHVibGluQ29yZS5yZXF1aXJlZERlc2M9VGhlIGRlc2NyaWJlZCByZXNvdXJjZSByZXF1aXJlcyB0aGUgcmVmZXJlbmNlZCByZXNvdXJjZSB0byBzdXBwb3J0IGl0cyBmdW5jdGlvbiwgZGVsaXZlcnksIG9yIGNvaGVyZW5jZSBvZiBjb250ZW50LgorTkR1YmxpbkNvcmUuc3BhdGlhbD1TcGF0aWFsCitORHVibGluQ29yZS5zcGF0aWFsRGVzYz1TcGF0aWFsIGNoYXJhY3RlcmlzdGljcyBvZiB0aGUgaW50ZWxsZWN0dWFsIGNvbnRlbnQgb2YgdGhlIHJlc291cmNlLgorTkR1YmxpbkNvcmUuZm9ybWF0PUZvcm1hdAorTkR1YmxpbkNvcmUuZm9ybWF0RGVzYz1BIHByZWRlZmluZWQsIFNURU0gc3BlY2lmaWMsIFVSSSB0aGF0IHVuaXF1ZWx5IHNwZWNpZmllcyB0aGUgZm9ybWF0IG9mIHRoZSByZXNvdXJjZS4gTm90IHVzZXIgZGVmaW5lZC4KK05EdWJsaW5Db3JlLnR5cGU9VHlwZQorTkR1YmxpbkNvcmUudHlwZURlc2M9QSBwcmVkZWZpbmVkLCBTVEVNIHNwZWNpZmljLCBVUkkgdGhhdCB1bmlxdWVseSBzcGVjaWZpZXMgdGhlIHR5cGUgb2YgdGhlIHJlc291cmNlLiBOb3QgdXNlciBkZWZpbmVkLgorTkR1YmxpbkNvcmUucmVxdWlyZWRGaWVsZD1yZXF1aXJlZCBmaWVsZAorCitORHVibGluQ29yZS50aXRsZUVycj1UaGUgVGl0bGUgaXMgZW1wdHkuCitORHVibGluQ29yZS5jcmVhdGVkRXJyPUNyZWF0ZWQgZGF0ZSBub3QgZm9ybWF0dGVkIGNvcnJlY3RseTogWVlZWS1NTS1ERAorTkR1YmxpbkNvcmUuZGF0ZUVycj1EYXRlIG5vdCBmb3JtYXR0ZWQgY29ycmVjdGx5OiBZWVlZLU1NLURECitORHVibGluQ29yZS52YWxpZEVycj1WYWxpZCBkYXRlIHJhbmdlIG5vdCBmb3JtYXR0ZWQgY29ycmVjdGx5OiBzdGFydD1ZWVlZLU1NLUREOyBvciBzdGFydD1ZWVlZLU1NLUREOyBlbmQ9WVlZWS1NTS1ERDsKKworIyBEdWJsaW4gQ29yZSBkZWZhdWx0IGRhdGEKK2RjX2NyZWF0b3Jfc3RlbXRlYW0gPSBTVEVNIHRlYW0KK2RjX3B1Ymxpc2hlciA9IFRoZSBFY2xpcHNlIEZvdW5kYXRpb24KK2RjX2xpY2Vuc2UgPSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIChFUEwpCitkY19pZGVudGllciA9IGlkZW50aWZpZXIgbm90IHNldCEKK2RjX3RpdGxlX21vZGVsID0gTW9kZWwKK2RjX3NvdXJjZV9tb2RlbCA9IGh0dHA6Ly93aWtpLmVjbGlwc2Uub3JnL0NyZWF0aW5nX2FfU1RFTV9TY2VuYXJpbyNBZGRfbW9kZWxfY29udGFpbmVyc19mb3JfdGhlX21vZGVsX2hpZXJhcmNoeSAgIChhbmQgcmVmZXJlbmNlcyB0aGVyZS1pbikKK2RjX2Rlc2NfbW9kZWwgPSBNb2RlbHMgYXJlIGhpZXJhY2hpY2FsIGNvbGxlY3Rpb25zIG9mIGxhYmVscywgZGVjb3JhdG9ycywgZ3JhcGhzLCBhbmQgc3ViZ3JhcGhzLgorCitkY190aXRsZV9leHAgPSBFeHBlcmltZW50CitkY19zb3VyY2VfZXhwID0gaHR0cDovL3dpa2kuZWNsaXBzZS5vcmcvQmF0Y2hfTW9kZV8lMjhSdW5uaW5nX0V4cGVyaW1lbnRzJTI5ICAgKGFuZCByZWZlcmVuY2VzIHRoZXJlLWluKQorZGNfZGVzY19leHAgPSBUaGUgcHVycG9zZSBvZiBFeHBlcmltZW50cyBpcyB0byBhbGxvdyBydW5uaW5nIGEgc2V0IG9mIHNjZW5hcmlvcywgb25lIGFmdGVyIGFub3RoZXIsIGVhY2ggbW9kaWZ5aW5nIHNvbWUgYXNwZWN0IG9mIGEgYmFzZSBzY2VuYXJpby4KKworZGNfdGl0bGVfbW9kID0gTW9kaWZpZXIKK2RjX3NvdXJjZV9tb2QgPSBodHRwOi8vd2lraS5lY2xpcHNlLm9yZy9JbnZva2luZ19Nb2RpZmllcnNfVXNpbmdfVHJpZ2dlcnNfYW5kX1ByZWRpY2F0ZXMuICAgKGFuZCByZWZlcmVuY2VzIHRoZXJlLWluKQorZGNfZGVzY19tb2QgPSBTcGVjaWZpZXMgdGhlIGF0dHJpYnV0ZSB0byBtb2RpZnkgaW4gYW4gZXhwZXJpbWVudCBvciBhdXRvbWF0ZWQgZXhwZXJpbWVudAorCitkY190aXRsZV9wcmVkID0gUHJlZGljYXRlCitkY19zb3VyY2VfcHJlZCA9IGh0dHA6Ly93aWtpLmVjbGlwc2Uub3JnL0ludm9raW5nX01vZGlmaWVyc19Vc2luZ19UcmlnZ2Vyc19hbmRfUHJlZGljYXRlcy4gICAoYW5kIHJlZmVyZW5jZXMgdGhlcmUtaW4pCitkY19kZXNjX3ByZWQgPSBTcGVjaWZpZXMgdGhlIHByZWRpY2F0ZSBvciBjb25kaXRpb24gdW5kZXIgd2hpY2ggYW4gYXR0cmlidXRlIGlzIG1vZGlmaWVkIGluIGFuIGV4cGVyaW1lbnQgb3IgYXV0b21hdGVkIGV4cGVyaW1lbnQKKworZGNfdGl0bGVfc2NlbiA9IFNjZW5hcmlvCitkY19zb3VyY2Vfc2NlbiA9IGh0dHA6Ly93aWtpLmVjbGlwc2Uub3JnL0NyZWF0aW5nX2FfU1RFTV9TY2VuYXJpbyAgIChhbmQgcmVmZXJlbmNlcyB0aGVyZS1pbikKK2RjX2Rlc2Nfc2NlbiA9IEEgc2NlbmFyaW8gY29udGFpbnMgYSBjb21wbGV0ZSBtb2RlbCBvciBtb2RlbCBoaWVyYXJjaHkgYWxvbmcgd2l0aCBpbml0aWFsIGNvbmRpdGlvbnMgKGluZmVjdG9ycywgaW5vY3VsYXRvcnMpIGFuZCBhIHNlcXVlbmNlcgorCitkY190aXRsZV9zZXEgPSBTZXF1ZW5jZXIKK2RjX3NvdXJjZV9zZXEgPSBodHRwOi8vd2lraS5lY2xpcHNlLm9yZy9DcmVhdGluZ19hX1NURU1fU2NlbmFyaW8jQ3JlYXRlX2FfU2VxdWVuY2VyICAgKGFuZCByZWZlcmVuY2VzIHRoZXJlLWluKQorZGNfZGVzY19zZXEgPSBDb250cm9scyB0aW1lIGFuZCB0aGUgZHVyYXRpb24gb2YgYSBzY2VuYXJpbworCitkY190aXRsZV90cmlnID0gVHJpZ2dlcgorZGNfc291cmNlX3RyaWcgPSBodHRwOi8vd2lraS5lY2xpcHNlLm9yZy9JbnZva2luZ19Nb2RpZmllcnNfVXNpbmdfVHJpZ2dlcnNfYW5kX1ByZWRpY2F0ZXMuICAgKGFuZCByZWZlcmVuY2VzIHRoZXJlLWluKQorZGNfZGVzY190cmlnID0gVHJpZ2dlcnMgdGhlIG1vZGlmaWNhdGlvbiBvZiBhIHBhcmFtZXRlciBiYXNlZCBvbiBhIHByZWRpY2F0ZSBpbiBhbiBleHBlcmltZW50IG9yIGF1dG9tYXRlZCBleHBlcmltZW50CisKKworIyBNb2RlbCBXaXphcmQKK05Nb2RlbFdpei53aXphcmRfdGl0bGUgPSBOZXcgTW9kZWwKK05Nb2RlbFdpei5wYWdlX3RpdGxlID0gTW9kZWwKK05Nb2RlbFdpei5wYWdlX2Rlc2NyaXB0aW9uID0gQ3JlYXRlIGEgbmV3IFNURU0gTW9kZWwgaW4gYSBwcm9qZWN0LgorTk1vZGVsV2l6LkRDX0RFU0NSSVBUSU9OID0gTW9kZWwgInswfSIKKworIyBNb2RlbCBTY2VuYXJpbworCitOU2NlbmFyaW9XaXoud2l6YXJkX3RpdGxlID0gTmV3IFNjZW5hcmlvCitOU2NlbmFyaW9XaXoucGFnZV90aXRsZSA9IFNjZW5hcmlvCitOU2NlbmFyaW9XaXoucGFnZV9kZXNjcmlwdGlvbiA9IENyZWF0ZSBhIG5ldyBTVEVNIFNjZW5hcmlvIGluIGEgcHJvamVjdC4KK05TY2VuYXJpb1dpei5EQ19ERVNDUklQVElPTiA9IFNjZW5hcmlvICJ7MH0iCitOU2NlbmFyaW9XaXouc29sdmVyID0gUGljayBhIHNvbHZlcgorCisjIE1vZGVsIFNlcXVlbmNlcgorTlNlcXVlbmNlcldpei5jeWNsZVRpbWUgPSBDeWNsZSBwZXJpb2QKK05TZXF1ZW5jZXJXaXoubWlsbGlzZWNvbmRzID0gbWlsbGlzZWNvbmRzCitOU2VxdWVuY2VyV2l6Lm1pbGxpc2Vjb25kID0gbWlsbGlzZWNvbmQKK05TZXF1ZW5jZXJXaXouc2Vjb25kcyA9IHNlY29uZHMKK05TZXF1ZW5jZXJXaXouc2Vjb25kID0gc2Vjb25kCitOU2VxdWVuY2VyV2l6Lm1pbnV0ZXMgPSBtaW51dGVzCitOU2VxdWVuY2VyV2l6Lm1pbnV0ZSA9IG1pbnV0ZQorTlNlcXVlbmNlcldpei5ob3VycyA9IGhvdXJzCitOU2VxdWVuY2VyV2l6LmhvdXIgPSBob3VyCitOU2VxdWVuY2VyV2l6LmRheXMgPSBkYXlzCitOU2VxdWVuY2VyV2l6LmRheSA9IGRheQorCisjIE1vZGVsIFNlcXVlbnRpYWwgU2VxdWVuY2VyCitOU2VxU2VxdWVuY2VyV2l6LmN5Y2xlVGltZUVyciA9IFRoZSBjeWNsZSB0aW1lIG11c3QgYmUgMSBvciBncmVhdGVyLgorTlNlcVNlcXVlbmNlcldpei5jeWNsZVRpbWVGb3JtYXRFcnIgPSBUaGUgY3ljbGUgdGltZSBpcyBub3QgYSB2YWxpZCBpbnRlZ2VyLgorTlNlcVNlcXVlbmNlcldpei53aXphcmRfdGl0bGUgPSBOZXcgU2VxdWVudGlhbCBTZXF1ZW5jZXIKK05TZXFTZXF1ZW5jZXJXaXoucGFnZV90aXRsZSA9IFNlcXVlbnRpYWwgU2VxdWVuY2VyCitOU2VxU2VxdWVuY2VyV2l6LnBhZ2VfZGVzY3JpcHRpb24gPSBDcmVhdGUgYSBuZXcgU1RFTSBTZXF1ZW50aWFsIFNlcXVlbmNlciBpbiBhIHByb2plY3QuCitOU2VxU2VxdWVuY2VyV2l6LnN0YXJ0VGltZSA9IFN0YXJ0IERhdGUKK05TZXFTZXF1ZW5jZXJXaXouZW5kVGltZSA9IFNwZWNpZnkgRW5kIERhdGUKK05TZXFTZXF1ZW5jZXJXaXouc3RhcnREYXRlRXJyID0gU3RhcnQgRGF0ZSBub3QgZm9ybWF0dGVkIGNvcnJlY3RseTogWVlZWS1NTS1ERAorTlNlcVNlcXVlbmNlcldpei5taXNzaW5nU3RhcnREYXRlRXJyID0gVGhlIFN0YXJ0IGRhdGUgaXMgbWlzc2luZy4KK05TZXFTZXF1ZW5jZXJXaXouZW5kRGF0ZUVyciA9IEVuZCBEYXRlIG5vdCBmb3JtYXR0ZWQgY29ycmVjdGx5OiBZWVlZLU1NLURECitOU2VxU2VxdWVuY2VyV2l6LmVuZEJlZm9yZUVyciA9IFRoZSBlbmQgZGF0ZSBvY2N1cnMgYmVmb3JlIHRoZSBzdGFydCBkYXRlLgorTlNlcVNlcXVlbmNlcldpei5EQ19USVRMRTEgPSBTZXF1ZW50aWFsIFNlcXVlbmNlciAiezB9IiAKK05TZXFTZXF1ZW5jZXJXaXouRENfVElUTEUyID0gU2VxdWVudGlhbCBTZXF1ZW5jZXIgInswfSIgCitOU2VxU2VxdWVuY2VyV2l6LkRDX0RFU0NSSVBUSU9OMSA9IFNlcXVlbnRpYWwgU2VxdWVuY2VyICJ7MH0iIHN0YXJ0aW5nIGZyb20gezF9IHRvIHsyfSB3aXRoIGEgY3ljbGUgcGVyaW9kIG9mIHszfS4KK05TZXFTZXF1ZW5jZXJXaXouRENfREVTQ1JJUFRJT04yID0gU2VxdWVudGlhbCBTZXF1ZW5jZXIgInswfSIgc3RhcnRpbmcgZnJvbSB7MX0sIHdpdGggbm8gZW5kIGFuZCBhIGN5Y2xlIHBlcmlvZCBvZiB7Mn0uCisKKyMgTW9kZWwgUmVhbC1UaW1lIFNlcXVlbmNlcgorTlJUU2VxdWVuY2VyV2l6LndpemFyZF90aXRsZSA9IE5ldyBSZWFsLVRpbWUgU2VxdWVuY2VyCitOU1JUU2VxdWVuY2VyV2l6LkRDX1RJVExFID0gUmVhbC1UaW1lIFNlcXVlbmNlciAoQ3ljbGUgUGVyaW9kOiB7MH0pLgorTlNSVFNlcXVlbmNlcldpei5EQ19ERVNDUklQVElPTjEgPSBSZWFsLVRpbWUgU2VxdWVuY2VyIHN0YXJ0aW5nIGZyb20gdGhlIGN1cnJlbnQgZGF0ZS90aW1lLCB3aXRoIGEgY3ljbGUgcGVyaW9kIG9mIHswfS4KKworIyBNb2RlbCBFeHBlcmltZW50CitORXhwZXJpbWVudFdpei53aXphcmRfdGl0bGUgPSBOZXcgRXhwZXJpbWVudAorTkV4cGVyaW1lbnRXaXoucGFnZV90aXRsZSA9IEV4cGVyaW1lbnQKK05FeHBlcmltZW50V2l6LnBhZ2VfZGVzY3JpcHRpb24gPSBDcmVhdGUgYSBuZXcgU1RFTSBFeHBlcmltZW50IGluIGEgcHJvamVjdAorTkV4cGVyaW1lbnRXaXouRENfREVTQ1JJUFRJT04gPSBFeHBlcmltZW50ICJ7MH0iCisKKyMgTW9kaWZpZXIKK05Nb2RpZmllcldpei53aXphcmRfdGl0bGUgPSBOZXcgTW9kaWZpZXIKK05Nb2RpZmllcldpei5wYWdlX3RpdGxlID0gTW9kaWZpZXIKK05Nb2RpZmllcldpei5wYWdlX2Rlc2NyaXB0aW9uID0gQ3JlYXRlIGEgbmV3IFNURU0gTW9kaWZpZXIgaW4gYSBwcm9qZWN0CitOTW9kaWZpZXJXaXouRENfREVTQ1JJUFRJT04gPSBNb2RpZmllciAiezB9IgorCisjIFRyaWdnZXIKK05UcmlnZ2VyV2l6LndpemFyZF90aXRsZSA9IE5ldyBUcmlnZ2VyCitOVHJpZ2dlcldpei5wYWdlX3RpdGxlID0gVHJpZ2dlcgorTlRyaWdnZXJXaXoucGFnZV9kZXNjcmlwdGlvbiA9IENyZWF0ZSBhIG5ldyBTVEVNIFRyaWdnZXIgaW4gYSBwcm9qZWN0CitOVHJpZ2dlcldpei5EQ19ERVNDUklQVElPTiA9IFRyaWdnZXIgInswfSIKKworIyBQcmVkaWNhdGUKK05QcmVkaWNhdGVXaXoud2l6YXJkX3RpdGxlID0gTmV3IFByZWRpY2F0ZQorTlByZWRpY2F0ZVdpei5wYWdlX3RpdGxlID0gUHJlZGljYXRlCitOUHJlZGljYXRlV2l6LnBhZ2VfZGVzY3JpcHRpb24gPSBDcmVhdGUgYSBuZXcgU1RFTSBQcmVkaWNhdGUgaW4gYSBwcm9qZWN0CitOUHJlZGljYXRlV2l6LkRDX0RFU0NSSVBUSU9OID0gUHJlZGljYXRlICJ7MH0iCisKKyMgTW9kaWZpZXJzCitSYW5nZS50eXBlID0gUmFuZ2UKK1NlcXVlbmNlLnR5cGUgPSBTZXF1ZW5jZQorU2luZ2xlLnR5cGUgPSBTaW5nbGUKKworCisjIE1hdHJpeCBFZGl0b3IKK01hdHJpeC5pbnZhbGlkLnZhbHVlID0gSW52YWxpZCBWYWx1ZSB7MH0KK01hdHJpeC5kaWFsb2cub2theSA9IE9rYXkKK01hdHJpeC5kaWFsb2cuY2FuY2VsID0gQ2FuY2VsCitNYXRyaXguZGlhbG9nLnBsdXMgPSArCitNYXRyaXguZGlhbG9nLm1pbnVzID0gLQorCisjTG9jYXRpb24gcGlja2VyCitOTG9jV2l6SVNPSyA9IElTTyBLZXkKK05Mb2NXaXpDTlRSWSA9IENvdW50cnkKK05Mb2NXaXpMMSA9IExldmVsIDEKK05Mb2NXaXpMMiA9IExldmVsIDIKK05Mb2NXaXpMMyA9IExldmVsIDMKK05Mb2NXaXpPayA9IE9rYXkKK05Mb2NXaXpDYW5jZWwgPSBDYW5jZWwKK05Mb2NQaWNrZXJXaXouZ2xvYmFsID0gU2VsZWN0IEdsb2JhbGx5CitOTG9jUGlja2VyV2l6LmlucHJvamVjdCA9IFNlbGVjdCBXaXRoaW4gUHJvamVjdAorTkxvY1BpY2tlcldpei5nZXR0aW5nTG9jYXRpb25zID0gUmV0cmlldmluZyBsaXN0IG9mIGxvY2F0aW9ucyBmb3IgY3VycmVudCBwcm9qZWN0Li4uCisKKyNSZW5hbWUvY29weSBkaWFsb2cKK1JlbmFtZS5kaWFsb2cub2theSA9IE9rYXkKK1JlbmFtZS5kaWFsb2cuY2FuY2VsID0gQ2FuY2VsCityZW5hbWUgPSBSZW5hbWUgRmlsZQorY29weSA9IENvcHkgRmlsZQorCisjIEdyYXBoIEdlbmVyYXRvcnMKK0dHREMuMD1Tb3VyY2UKK0dHREMuMj1jbGFzcworR0dEQy4zPVByb2JsZW0gY3JlYXRpbmcgR3JhcGggR2VuZXJhdG9yIGluc3RhbmNlCitZRVMgPSBZZXMKK05PID0gTm8KK05HRldpei5EQ19ERVNDUklQVElPTiA9IEdyYXBoCisKKyMgTGF0dGljZSBncmFwaCBnZW5lcmF0b3IKK3hTaXplID0gWCBTaXplCit5U2l6ZSA9IFkgU2l6ZQoreFNpemVVTklUID0gR3JpZHMKK3lTaXplVU5JVCA9IEdyaWRzCit4U2l6ZVRUID0gTnVtYmVyIG9mIGdyaWRzIGFsb25nIFggYXhpcworeVNpemVUVCA9IE51bWJlciBvZiBncmlkcyBhbG9uZyBZIGF4aXMKK3VzZU5lYXJlc3ROZWlnaGJvcnMgPSBOZWFyZXN0IE5laWdoYm9ycwordXNlTmVhcmVzdE5laWdoYm9yc1VOSVQgPSAKK3VzZU5lYXJlc3ROZWlnaGJvcnNUVCA9IENvbm5lY3QgZ3JpZHMgd2l0aCBuZWFyZXN0IG5laWdoYm9yIGVkZ2VzCit1c2VOZXh0TmVhcmVzdE5laWdoYm9ycyA9IE5leHQgTmVhcmVzdCBOZWlnaGJvcnMKK3VzZU5leHROZWFyZXN0TmVpZ2hib3JzVU5JVCA9IAordXNlTmV4dE5lYXJlc3ROZWlnaGJvcnNUVCA9IENvbm5lY3QgZ3JpZHMgdXNpbmcgbmV4dCBuZWFyZXN0IG5laWdoYm9yIGVkZ2VzCitwZXJpb2RpY0JvdW5kYXJpZXMgPSBQZXJpb2RpYyBCb3VuZGFyaWVzCitwZXJpb2RpY0JvdW5kYXJpZXNVTklUID0gCitwZXJpb2RpY0JvdW5kYXJpZXNUVCA9IFVzZSBQZXJpb2RpYyBCb3VuZGFyaWVzCisKKyMgRm9yIGdlbmVyaWMgcHJvcGVydHkgZWRpdG9yCitmaWxlQ2hvb3NlckJ1dHRvblRleHQ9U2VsZWN0IEZpbGUuLi4KK2RpckNob29zZXJCdXR0b25UZXh0PVNlbGVjdCBEaXJlY3RvcnkuLi4KK2ZpbGVDaG9vc2VyQnV0dG9uVG9vbHRpcFRleHQ9QSBmaWxlIGlzIGJlaW5nIHVzZWQgZm9yIGxvYWRpbmcgZGF0YSBmb3Igb25lIHNwZWNpZmljIG5vZGUKK2RpckNob29zZXJCdXR0b25Ub29sdGlwVGV4dD1BIGRpcmVjdG9yeSBpcyBiZWluZyB1c2VkIGZvciBsb2FkaW5nIGEgY29sbGVjdGlvbiBvZiBmaWxlcyAodXN1YWxseSBmb3IgbW9yZSB0aGFuIG9uZSBub2RlKQorZmlsZUNob29zZXJEaWFsb2dUaXRsZT1TZWxlY3QgQ1NWIEZpbGUKK2RpckNob29zZXJEaWFsb2dUaXRsZT1TZWxlY3QgRGlyZWN0b3J5CitOUGlja0xvYyA9IFBpY2sKK05QaWNrTG9jVGl0bGUgPSBQaWNrIGEgbG9jYXRpb24KKworI0RvdWJsZSBhbmQgc3RyaW5nIHZhbHVlcworaWRlbnRpZmllciA9IElkZW50aWZpZXIKK2lkZW50aWZpZXJVTklUID0gCit2YWx1ZSA9IFZhbHVlCit2YWx1ZVVOSVQgPQorCisjUGFyYW1ldGVyIHBpY2tlcgorUFAuSURFTlRTPU9iamVjdHMgZm91bmQgaW4geW91ciBwcm9qZWN0CitQUC5QUk9QPU9iamVjdCBwcm9wZXJ0aWVzCisKKyNJREVOVElGSUFCTEUgcGlja2VyCitJUC5PQkpFQ1RTPU9iamVjdHMgZm91bmQgaW4geW91ciBwcm9qZWN0ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3dpemFyZHMvbWVzc2FnZXNfZGUucHJvcGVydGllcyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS93aXphcmRzL21lc3NhZ2VzX2RlLnByb3BlcnRpZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTFhMjM1NQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS93aXphcmRzL21lc3NhZ2VzX2RlLnByb3BlcnRpZXMKQEAgLTAsMCArMSwyNzIgQEAKKyMgV2l6YXJkTWVzc2FnZXMucHJvcGVydGllcworIworIy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorIyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyMgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyMgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorIyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisjICoKKyMgKiBDb250cmlidXRvcnM6CisjICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorIyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjIE5ldyBQcm9qZWN0IFdpemFyZAorTlNURU1Qcm9XaXoucGFnZV90aXRsZT1OYW1lbiBkZXMgbmV1ZW4gU1RFTSBQcm9qZWN0IGFuZ2ViZW4KK05TVEVNUHJvV2l6LnRpdGxlPU5ldWVzIFNURU0gUHJvamVrdCBlcnN0ZWxsZW4KK05TVEVNUHJvV2l6LnBhZ2VfZGVzY3JpcHRpb249TmV1ZXMgU1RFTSBQcm9qZWt0IGltIEFyYmVpdHNiZXJlaWNoIG9kZXIgYW4gZWluZW0gZXh0ZXJuZW4gT3J0IGVyc3RlbGxlbgorTlNURU1Qcm9XaXouY3JlYXRpbmdfZGlyZWN0b3JpZXM9UHJvamVrdC1WZXJ6ZWljaG5pc3NlIHdlcmRlbiBlcnN0ZWxsdAorTlNURU1Qcm9XaXouY3JlYXRpbmdfcHJvamVjdD1TVEVNLVByb2pla3Qgd2lyZCBlcnN0ZWxsdAorCitOU1RFTVByb1dpei5ncmFwaF9mb2xkZXI9R3JhcGhlbgorTlNURU1Qcm9XaXoubW9kZWxfZm9sZGVyPU1vZGVsbGUKK05TVEVNUHJvV2l6LnNjZW5hcmlvX2ZvbGRlcj1TemVuYXJpZW4KK05TVEVNUHJvV2l6LmRlY29yYXRvcl9mb2xkZXI9RGVrb3JpZXJlcgorTlNURU1Qcm9XaXouQ3JlYXRlX1Byb2JsZW09UHJvYmxlbSBiZWltIEVyc3RlbGxlbiB2b24gUHJvamVrdAorCisjIE5ldyBJZGVudGlmaWVyIFdpemFyZCAoc3VwZXIgY2xhc3MgdG8gR3JhcGgvTW9kZWwvU2NlbmFyaW8gd2l6YXJkcworTklkV2l6LmNyZWF0aW5nPVdpcmQgZXJzdGVsbHQKK05JZFdpei5icm93c2U9RHVyY2hzdWNoZW4KK05JZFdpei5wcm9qZWN0PVByb2pla3QKK05JZFdpei5uYW1lPU5hbWUKK05JZFdpei5ub1Byb2pFcnI9S2VpbmUgUHJvamVrdGUgdm9yaGFuZGVuCitOSWRXaXoubmFtZU1pc3NpbmdFcnI9TmFtZSBmZWhsdAorTklkV2l6Lm5hbWVFcnI9VW5nXHUwMGZjbHRpZ2VyIE5hbWUKK05JZFdpei5zYXZlRXJyPVByb2JsZW0gYmVpbSBTcGVpY2hlcm4KKworIyBEdWJsaW4gQ29yZSBQYWdlIENvbnN0YW50cworTkR1YmxpbkNvcmUucGFnZV90aXRsZT1EdWJsaW4gQ29yZQorTkR1YmxpbkNvcmUucGFnZV9kZXNjcmlwdGlvbj1Jbml0aWFsaXNpZXJlbiBkZXIgRHVibGluIENvcmUgTWV0YWRhdGVuLgorCitORHVibGluQ29yZS50aXRsZT1UaXRlbAorTkR1YmxpbkNvcmUudGl0bGVEZXNjPUVpbiBOYW1lIGZcdTAwZmNyIGRpZSBSZXNzb3VyY2UuIE5vcm1hbGVyd2Vpc2UgZGVyIGZvcm1hbGUgTmFtZSBkZXIgUmVzc291cmNlLgorTkR1YmxpbkNvcmUuZGVzYz1CZXNjaHJlaWJ1bmcKK05EdWJsaW5Db3JlLmRlc2NEZXNjPUVpbiBCZXJpY2h0IFx1MDBmY2JlciBkZW4gSW5oYWx0IGRlciBSZXNzb3VyY2UuIFR5cGlzY2hlcndlaXNlIGVpbmUga3VyemUgWnVzYW1tZW5mYXNzdW5nLgorTkR1YmxpbkNvcmUuY3JlYXRvcj1FcnpldWdlcgorTkR1YmxpbkNvcmUuY3JlYXRvckRlc2M9RWluZSBFbnRpdFx1MDBlNHQgdmVyYW50d29ydGxpY2ggZlx1MDBmY3IgZGllIEluaGFsdGUgZGVyIFJlc3NvdXJjZS4gSW4gZGVyIFJlZ2VsIGRlciBOYW1lIGVpbmVyIFBlcnNvbiBvZGVyIE9yZ2FuaXNhdGlvbi4KK05EdWJsaW5Db3JlLmRhdGU9RGF0dW0KK05EdWJsaW5Db3JlLmRhdGVEZXNjPUVpbiBEYXR1bSBkZW0gZWluIEVyZWlnbmlzIGltIExlYmVuc3p5a2x1cyBkZXIgUmVzc291cmNlIHp1Z2VvcmRuZXQgaXN0LiBUeXBpc2NoZXJ3ZWlzZSBZWVlZLU1NLURELiB6LkIuIDIwMDctMDEtMTgKK05EdWJsaW5Db3JlLnZhbGlkPUdcdTAwZmNsdGlnCitORHVibGluQ29yZS52YWxpZERlc2M9RGF0ZSAob2Z0ZW4gYSByYW5nZSkgb2YgdmFsaWRpdHkgb2YgYSByZXNvdXJjZS4gZS5nLiBzdGFydD0yMDA2LTAzLTI5OyBlbmQ9MjAwNi0wMy0zMDsgb3Igc2ltcGx5IHN0YXJ0PTIwMDYtMDMtMjk7IGlmIHRoZXJlIGlzIG5vIGVuZCB0byB0aGUgdmFsaWRpdHkuCitORHVibGluQ29yZS5jcmVhdGVkPUVyc3RlbGx0CitORHVibGluQ29yZS5jcmVhdGVkRGVzYz1EYXMgRXJzdGVsbHVuZ3NkYXR1bSBkZXIgUmVzc291cmNlLiBUeXBpc2NoZXJ3ZWlzZSBZWVlZLU1NLURELiB6LkIuIDIwMDcuMDEuMTgKK05EdWJsaW5Db3JlLnNvdXJjZT1RdWVsbGUKK05EdWJsaW5Db3JlLnNvdXJjZURlc2M9RWluIFZlcndlaXMgYXVmIGVpbmUgUmVzc291cmNlLCBhdXMgZGVyIGRpZSBnZWdlbndcdTAwZTRydGlnZSBSZXNzb3VyY2UgYWJnZWxlaXRldCBpc3QuIERpZSB1cnNwclx1MDBmY25nbGljaGUgUXVlbGxlIGRlcyBJbmhhbHRzIGRlciBSZXNzb3VyY2UuIHouQi4gZWluZSBVUkwuCitORHVibGluQ29yZS5wdWJsaXNoZXI9SGVyYXVzZ2ViZXIKK05EdWJsaW5Db3JlLnB1Ymxpc2hlckRlc2M9RWluIEVudGl0XHUwMGU0dCB2ZXJhbnR3b3J0bGljaCBmXHUwMGZjciBkaWUgVmVyZlx1MDBmY2diYXJrZWl0IGRlciBSZXNzb3VyY2UuIEluIGRlciBSZWdlbCBkZXIgTmFtZSBlaW5lciBQZXJzb24sIE9yZ2FuaXNhdGlvbiBvZGVyIGVpbmVyIERpZW5zdGxlaXN0dW5nLgorTkR1YmxpbkNvcmUuY292ZXJhZ2U9QmVyaWNodGVyc3RhdHR1bmcKK05EdWJsaW5Db3JlLmNvdmVyYWdlRGVzYz1EYXMgQXVzbWFcdTAwZGYgdW5kIGRlciBHZWx0dW5nc2JlcmVpY2ggZGVzIEluaGFsdHMgZGVyIFJlc3NvdXJjZS4gS2FubiByXHUwMGU0dW1saWNoZSBMYWdlLCBaZWl0cHVua3Qgb2RlciAtZGF1ZXIsIEdlcmljaHRzYmFya2VpdCBldGMuIGJlaW5oYWx0ZW4KK05EdWJsaW5Db3JlLmNvbnRyaWJ1dG9yPU1pdHdpcmtlbmRlCitORHVibGluQ29yZS5jb250cmlidXRvckRlc2M9RWluZSBFbnRpdFx1MDBlNHQgdmVyYW50d29ydGxpY2ggQmVpdHJcdTAwZTRnZSB6dXIgUmVzc291cmNlIHp1IGxlaXN0ZW4uIEluIGRlciBSZWdlbCBkZXIgTmFtZSBlaW5lciBQZXJzb24sIE9yZ2FuaXNhdGlvbiBvZGVyIGVpbmVyIERpZW5zdGxlaXN0dW5nLgorTkR1YmxpbkNvcmUucmVsYXRpb249QmV6aWVodW5nCitORHVibGluQ29yZS5yZWxhdGlvbkRlc2M9RWluIFZlcndlaXMgYXVmIGVpbmUgdmVyd2FuZHRlcyBSZXNzb3VyY2UuIHouQi4gZWluZSBVUkwKK05EdWJsaW5Db3JlLnJpZ2h0cz1SZWNodGUKK05EdWJsaW5Db3JlLnJpZ2h0c0Rlc2M9SW5mb3JtYXRpb25lbiBcdTAwZmNiZXIgZGllIFJlY2h0ZSBpbiB1bmQgXHUwMGZjYmVyIGRpZSBSZXNzb3VyY2VuIHN0YXR0LiBUeXBpc2NoZXJ3ZWlzZSB3aXJkIGVpbiBSZWNodGUtTWFuYWdlbWVudCBTdGF0ZW1lbnQuIHouQi4gQ29weXJpZ2h0IEZvb0JhciAyMDA2CitORHVibGluQ29yZS5zdWJqZWN0PVRoZW1hCitORHVibGluQ29yZS5zdWJqZWN0RGVzYz1EYXMgVGhlbWEgZGVzIEluaGFsdHMgZGVyIFJlc3NvdXJjZS4gVHlwaXNjaGVyd2Vpc2UgU2NobFx1MDBmY3NzZWx3XHUwMGY2cnRlciBvZGVyIEtsYXNzaWZpemllcnVuZ3Njb2Rlcy4KK05EdWJsaW5Db3JlLmxhbmd1YWdlPVNwcmFjaGUKK05EdWJsaW5Db3JlLmxhbmd1YWdlRGVzYz1FaW5lIFNwcmFjaGUgZGVzIGludGVsbGVrdHVlbGxlbiBJbmhhbHRzIGRlciBSZXNzb3VyY2UuIHouQi4gZW4tR0IKK05EdWJsaW5Db3JlLmNpdGF0aW9uPVppdGF0CitORHVibGluQ29yZS5jaXRhdGlvbkRlc2M9RWluZSBiaWJsaW9ncmFwaGlzY2hlIFJlZmVyZW56IGZcdTAwZmNyIGRpZSBSZXNzb3VyY2UuCitORHVibGluQ29yZS5saWNlbnNlPUxpemVuegorTkR1YmxpbkNvcmUubGljZW5zRGVzYz1FaW4ganVyaXN0aXNjaGVzIERva3VtZW50LCB3ZWxjaGVzIGRpZSBvZmZpemllbGxlIEVybGF1Ym5pcyBnaWJ0IGV0d2FzIG1pdCBkZXIgUmVzc291cmNlIHp1IHR1bi4KK05EdWJsaW5Db3JlLnJlcXVpcmVkPUVyZm9yZGVybGljaAorTkR1YmxpbkNvcmUucmVxdWlyZWREZXNjPURpZSBiZXNjaHJpZWJlbmUgUmVzc291cmNlIGVyZm9yZGVydCBkaWUgcmVmZXJlbnppZXJ0ZSBSZXNzb3VyY2UsIHVtIGlocmUgRnVua3Rpb24sIExpZWZlcnVuZyBvZGVyIGRpZSBLb2hcdTAwZTRyZW56IGRlciBJbmhhbHRlIHp1IHVudGVyc3RcdTAwZmN0emVuLgorTkR1YmxpbkNvcmUuc3BhdGlhbD1SXHUwMGU0dW1saWNoCitORHVibGluQ29yZS5zcGF0aWFsRGVzYz1SXHUwMGU0dW1saWNoZSBDaGFyYWt0ZXJpc3Rpa2EgZGVzIGludGVsbGVrdHVlbGxlbiBJbmhhbHRzIGRlciBSZXNzb3VyY2UuCitORHVibGluQ29yZS5mb3JtYXQ9Rm9ybWF0CitORHVibGluQ29yZS5mb3JtYXREZXNjPUVpbmUgdm9yZGVmaW5pZXJ0ZSwgU1RFTSBzcGV6aWZpc2NoZSBVUkksIGRpZSBkYXMgRm9ybWF0IGRlciBSZXNzb3VyY2UgZWluZGV1dGlnIHNwZXppZml6aWVydC4gTmljaHQgdm9tIEJlbnV0emVyIGRlZmluaWVydC4KK05EdWJsaW5Db3JlLnR5cGU9VHlwCitORHVibGluQ29yZS50eXBlRGVzYz1FaW5lIHZvcmRlZmluaWVydGUsIFNURU0gc3BlemlmaXNjaGUgVVJJLCBkaWUgZGllIEFydCBkZXIgUmVzc291cmNlIGVpbmRldXRpZyBzcGV6aWZpemllcnQuIE5pY2h0IHZvbSBCZW51dHplciBkZWZpbmllcnQuCitORHVibGluQ29yZS5yZXF1aXJlZEZpZWxkPVBmbGljaHRmZWxkCisKK05EdWJsaW5Db3JlLnRpdGxlRXJyPURlciBUaXRlbCBpc3QgbGVlci4KK05EdWJsaW5Db3JlLmNyZWF0ZWRFcnI9RXJzdGVsbHVuZ3NkYXR1bSBuaWNodCByaWNodGlnIGZvcm1hdGllcnQ6IFlZWVktTU0tREQKK05EdWJsaW5Db3JlLmRhdGVFcnI9RGF0dW0gbmljaHQgcmljaHRpZyBmb3JtYXRpZXJ0OiBZWVlZLU1NLURECitORHVibGluQ29yZS52YWxpZEVycj1WYWxpZCBkYXRlIHJhbmdlIG5vdCBmb3JtYXR0ZWQgY29ycmVjdGx5OiBzdGFydD1ZWVlZLU1NLUREOyBvciBzdGFydD1ZWVlZLU1NLUREOyBlbmQ9WVlZWS1NTS1ERDsKKworIyBEdWJsaW4gQ29yZSBkZWZhdWx0IGRhdGEKK2RjX2NyZWF0b3Jfc3RlbXRlYW09U1RFTSBUZWFtCitkY19wdWJsaXNoZXI9RGllIEVjbGlwc2UgRm91bmRhdGlvbgorZGNfbGljZW5zZT1FY2xpcHNlIFB1YmxpYyBMaWNlbnNlIChFUEwpCitkY19pZGVudGllcj1CZXplaWNobmVyIG5pY2h0IGdlc2V0enQhCitkY190aXRsZV9tb2RlbD1Nb2RlbGwKK2RjX3NvdXJjZV9tb2RlbCA9IGh0dHA6Ly93aWtpLmVjbGlwc2Uub3JnL0NyZWF0aW5nX2FfU1RFTV9TY2VuYXJpbyNBZGRfbW9kZWxfY29udGFpbmVyc19mb3JfdGhlX21vZGVsX2hpZXJhcmNoeSAgIChhbmQgcmVmZXJlbmNlcyB0aGVyZS1pbikKK2RjX2Rlc2NfbW9kZWw9TW9kZWxsZSBzaW5kIGhpZXJhcmNoaXNjaGUgU2FtbWx1bmdlbiB2b24gTGFiZWxuLCBEZWtvcmF0b3JlbiwgR3JhcGhlbiB1bmQgVGVpbGdyYXBoZW4uCisKK2RjX3RpdGxlX2V4cD1FeHBlcmltZW50CitkY19zb3VyY2VfZXhwPWh0dHA6Ly93aWtpLmVjbGlwc2Uub3JnL0JhdGNoX01vZGVfJSAyOFJ1bm5pbmdfRXhwZXJpbWVudHMlIDI5ICh1bmQgUmVmZXJlbnplbiBnaWJ0IGVzLWluKQorZGNfZGVzY19leHA9RGVyIFp3ZWNrIGRlcyBFeHBlcmltZW50cyBpc3QgZXMsIGVpbmUgUmVpaGUgdm9uIFN6ZW5hcmllbiBhdXN6dWZcdTAwZmNocmVuLCBlaW5zIG5hY2ggZGVtIGFuZGVyZW4sIGplZGVzIG1pdCBlaW5lciBcdTAwYzRuZGVydW5nIGVpbmVzIEFzcGVrdCBkZXMgQmFzaXMtU3plbmFyaW9zLgorCitkY190aXRsZV9tb2Q9TW9kaWZpa2F0b3IKK2RjX3NvdXJjZV9tb2Q9aHR0cDovL3dpa2kuZWNsaXBzZS5vcmcvSW52b2tpbmdfTW9kaWZpZXJzX1VzaW5nX1RyaWdnZXJzX2FuZF9QcmVkaWNhdGVzLiAoVW5kIFJlZmVyZW56ZW4gZ2lidCBlcy1pbikKK2RjX2Rlc2NfbW9kPVNwZXppZml6aWVydCBkYXMgenUgXHUwMGU0bmRlcm5kZSBBdHRyaWJ1dCBpbiBlaW5lbSBFeHBlcmltZW50IG9kZXIgYXV0b21hdGlzaWVydGVuIEV4cGVyaW1lbnQKKworZGNfdGl0bGVfcHJlZD1FaWdlbnNjaGFmdAorZGNfc291cmNlX3ByZWQ9aHR0cDovL3dpa2kuZWNsaXBzZS5vcmcvSW52b2tpbmdfTW9kaWZpZXJzX1VzaW5nX1RyaWdnZXJzX2FuZF9QcmVkaWNhdGVzLiAoVW5kIFJlZmVyZW56ZW4gZ2lidCBlcy1pbikKK2RjX2Rlc2NfcHJlZD1TcGV6aWZpemllcnQgZGllIEVpZ2Vuc2NoYWZ0IG9kZXIgQmVkaW5ndW5nZW4sIHVudGVyIGRlciBlaW4gQXR0cmlidXQgaW4gZWluZW0gRXhwZXJpbWVudCBvZGVyIGF1dG9tYXRpc2llcnRlbiBFeHBlcmltZW50IGdlXHUwMGU0bmRlcnQgd2lyZAorCitkY190aXRsZV9zY2VuPVN6ZW5hcmlvCitkY19zb3VyY2Vfc2Nlbj1odHRwOi8vd2lraS5lY2xpcHNlLm9yZy9DcmVhdGluZ19hX1NURU1fU2NlbmFyaW8gKHVuZCBSZWZlcmVuemVuIGdpYnQgZXMtaW4pCitkY19kZXNjX3NjZW49RWluIFN6ZW5hcmlvIGVudGhcdTAwZTRsdCBlaW4gdm9sbHN0XHUwMGU0bmRpZ2VzIE1vZGVsbCBvZGVyIGVpbmUgTW9kZWxsaGllcmFyY2hpZSB6dXNhbW1lbiBtaXQgZGVuIEFuZmFuZ3NiZWRpbmd1bmdlbiAoSW5maXppZXJlciwgSW1tdW5pc2llcmVyKSB1bmQgZWluZW0gU2VxdWVuemVyCisKK2RjX3RpdGxlX3NlcT1TZXF1ZW56ZXIKK2RjX3NvdXJjZV9zZXEgPSBodHRwOi8vd2lraS5lY2xpcHNlLm9yZy9DcmVhdGluZ19hX1NURU1fU2NlbmFyaW8jQ3JlYXRlX2FfU2VxdWVuY2VyICAgKGFuZCByZWZlcmVuY2VzIHRoZXJlLWluKQorZGNfZGVzY19zZXE9U3RldWVydCBVaHJ6ZWl0IHVuZCBkaWUgRGF1ZXIgZWluZXMgU3plbmFyaW9zCisKK2RjX3RpdGxlX3RyaWc9QXVzbFx1MDBmNnNlcgorZGNfc291cmNlX3RyaWc9aHR0cDovL3dpa2kuZWNsaXBzZS5vcmcvSW52b2tpbmdfTW9kaWZpZXJzX1VzaW5nX1RyaWdnZXJzX2FuZF9QcmVkaWNhdGVzLiAoVW5kIFJlZmVyZW56ZW4gZ2lidCBlcy1pbikKK2RjX2Rlc2NfdHJpZz1MXHUwMGY2c3QgZGllIFx1MDBjNG5kZXJ1bmcgZWluZXMgUGFyYW1ldGVycyBiYXNpZXJlbmQgYXVmIGVpbmVyIEVpZ2Vuc2NoYWZ0IGF1cywgaW4gZWluZW0gRXhwZXJpbWVudCBvZGVyIGF1dG9tYXRpc2llcnRlbiBFeHBlcmltZW50CisKKworIyBNb2RlbCBXaXphcmQKK05Nb2RlbFdpei53aXphcmRfdGl0bGU9TmV1ZXMgTW9kZWxsCitOTW9kZWxXaXoucGFnZV90aXRsZT1Nb2RlbGwKK05Nb2RlbFdpei5wYWdlX2Rlc2NyaXB0aW9uPU5ldWVzIFNURU0gTW9kZWxsIGluIGVpbmVtIFByb2pla3QgZXJzdGVsbGVuCitOTW9kZWxXaXouRENfREVTQ1JJUFRJT049TW9kZWxsICJ7MH0iCisKKyMgTW9kZWwgU2NlbmFyaW8KKworTlNjZW5hcmlvV2l6LndpemFyZF90aXRsZT1OZXVlcyBTemVuYXJpbworTlNjZW5hcmlvV2l6LnBhZ2VfdGl0bGU9U3plbmFyaW8KK05TY2VuYXJpb1dpei5wYWdlX2Rlc2NyaXB0aW9uPU5ldWVzIFNURU0gU3plbmFyaW8gaW4gZWluZW0gUHJvamVrdCBlcnN0ZWxsZW4KK05TY2VuYXJpb1dpei5EQ19ERVNDUklQVElPTj1TemVuYXJpbyAiezB9IgorTlNjZW5hcmlvV2l6LnNvbHZlcj1XXHUwMGU0aGxlbiBTaWUgZWluZW4gR2xlaWNodW5nc2xcdTAwZjZzZXIKKworIyBNb2RlbCBTZXF1ZW5jZXIKK05TZXF1ZW5jZXJXaXouY3ljbGVUaW1lPVp5a2x1c2RhdWVyCitOU2VxdWVuY2VyV2l6Lm1pbGxpc2Vjb25kcz1NaWxsaXNla3VuZGVuCitOU2VxdWVuY2VyV2l6Lm1pbGxpc2Vjb25kPU1pbGxpc2VrdW5kZQorTlNlcXVlbmNlcldpei5zZWNvbmRzPVNla3VuZGVuCitOU2VxdWVuY2VyV2l6LnNlY29uZD1TZWt1bmRlCitOU2VxdWVuY2VyV2l6Lm1pbnV0ZXM9TWludXRlbgorTlNlcXVlbmNlcldpei5taW51dGU9TWludXRlCitOU2VxdWVuY2VyV2l6LmhvdXJzPVN0dW5kZW4KK05TZXF1ZW5jZXJXaXouaG91cj1TdHVuZGUKK05TZXF1ZW5jZXJXaXouZGF5cz1UYWdlCitOU2VxdWVuY2VyV2l6LmRheT1UYWcKKworIyBNb2RlbCBTZXF1ZW50aWFsIFNlcXVlbmNlcgorTlNlcVNlcXVlbmNlcldpei5jeWNsZVRpbWVFcnI9RGllIFp5a2x1c2RhdWVyIG11c3MgZ3JcdTAwZjZcdTAwZGZlciBvZGVyIGdsZWljaCAxIHNlaW4uCitOU2VxU2VxdWVuY2VyV2l6LmN5Y2xlVGltZUZvcm1hdEVycj1EaWUgWnlrbHVzZGF1ZXIgaXN0IGtlaW4gZ1x1MDBmY2x0aWdlciBJbnRlZ2VyLgorTlNlcVNlcXVlbmNlcldpei53aXphcmRfdGl0bGU9TmV1ZXIgc2VxdWVudGllbGxlciBTZXF1ZW56ZXIKK05TZXFTZXF1ZW5jZXJXaXoucGFnZV90aXRsZT1TZXF1ZW50aWVsbGVyIFNlcXVlbnplcgorTlNlcVNlcXVlbmNlcldpei5wYWdlX2Rlc2NyaXB0aW9uPU5ldWVuIHNlcXVlbnRpZWxsZW4gU1RFTSBTZXF1ZW56ZXIgaW4gZWluZW0gUHJvamVrdCBlcnN0ZWxsZW4KK05TZXFTZXF1ZW5jZXJXaXouc3RhcnRUaW1lPVN0YXJ0ZGF0dW0KK05TZXFTZXF1ZW5jZXJXaXouZW5kVGltZT1FbmRkYXR1bSBhbmdlYmVuCitOU2VxU2VxdWVuY2VyV2l6LnN0YXJ0RGF0ZUVycj1TdGFydGRhdHVtIG5pY2h0IHJpY2h0aWcgZm9ybWF0aWVydDogWVlZWS1NTS1ERAorTlNlcVNlcXVlbmNlcldpei5taXNzaW5nU3RhcnREYXRlRXJyPURhcyBTdGFydGRhdHVtIGZlaGx0LgorTlNlcVNlcXVlbmNlcldpei5lbmREYXRlRXJyPUVuZGRhdHVtIG5pY2h0IHJpY2h0aWcgZm9ybWF0aWVydDogWVlZWS1NTS1ERAorTlNlcVNlcXVlbmNlcldpei5lbmRCZWZvcmVFcnI9RGFzIEVuZGRhdHVtIGxpZWd0IHZvciBkZW0gU3RhcnRkYXR1bS4KK05TZXFTZXF1ZW5jZXJXaXouRENfVElUTEUxPVNlcXVlbnRpZWxsZXIgU2VxdWVuemVyICJ7MH0iCitOU2VxU2VxdWVuY2VyV2l6LkRDX1RJVExFMj1TZXF1ZW50aWVsbGVyIFNlcXVlbnplciAiezB9IgorTlNlcVNlcXVlbmNlcldpei5EQ19ERVNDUklQVElPTjE9U2VxdWVudGllbGxlciBTZXF1ZW56ZXIgInswfSIgYWIgezF9IHsyfSBtaXQgZWluZXIgWnlrbHVzZGF1ZXIgdm9uIHszfS4KK05TZXFTZXF1ZW5jZXJXaXouRENfREVTQ1JJUFRJT04yPVNlcXVlbnRpZWxsZXIgU2VxdWVuemVyICJ7MH0iIGFiIHsxfSBvaG5lIEVuZGUgdW5kIG1pdCBlaW5lciBaeWtsdXNkYXVlciB2b24gezJ9LgorCisjIE1vZGVsIFJlYWwtVGltZSBTZXF1ZW5jZXIKK05SVFNlcXVlbmNlcldpei53aXphcmRfdGl0bGU9TmV1ZXIgRWNodHplaXQtU2VxdWVuemVyCitOU1JUU2VxdWVuY2VyV2l6LkRDX1RJVExFPUVjaHR6ZWl0LVNlcXVlbnplciAoWnlrbHVzZGF1ZXIgezB9KS4KK05TUlRTZXF1ZW5jZXJXaXouRENfREVTQ1JJUFRJT04xPUVjaHR6ZWl0LVNlcXVlbnplciBhYiBkZW0gYWt0dWVsbGVuIERhdHVtIC8gWmVpdCwgbWl0IGVpbmVyIFp5a2x1c3plaXQgdm9uIHswfS4KKworIyBNb2RlbCBFeHBlcmltZW50CitORXhwZXJpbWVudFdpei53aXphcmRfdGl0bGU9TmV1ZXMgRXhwZXJpbWVudAorTkV4cGVyaW1lbnRXaXoucGFnZV90aXRsZT1FeHBlcmltZW50CitORXhwZXJpbWVudFdpei5wYWdlX2Rlc2NyaXB0aW9uPU5ldWVzIFNURU0gRXhwZXJpbWVudCBpbiBlaW5lbSBQcm9qZWt0IGVyc3RlbGxlbgorTkV4cGVyaW1lbnRXaXouRENfREVTQ1JJUFRJT049RXhwZXJpbWVudCAiezB9IgorCisjIE1vZGlmaWVyCitOTW9kaWZpZXJXaXoud2l6YXJkX3RpdGxlPU5ldWVyIE1vZGlmaWthdG9yCitOTW9kaWZpZXJXaXoucGFnZV90aXRsZT1Nb2RpZmlrYXRvcgorTk1vZGlmaWVyV2l6LnBhZ2VfZGVzY3JpcHRpb249TmV1ZW4gU1RFTSBNb2RpZmlrYXRvciBpbiBlaW5lbSBQcm9qZWt0IGVyc3RlbGxlbgorTk1vZGlmaWVyV2l6LkRDX0RFU0NSSVBUSU9OPU1vZGlmaWthdG9yICJ7MH0iCisKKyMgVHJpZ2dlcgorTlRyaWdnZXJXaXoud2l6YXJkX3RpdGxlPU5ldWVyIEF1c2xcdTAwZjZzZXIKK05UcmlnZ2VyV2l6LnBhZ2VfdGl0bGU9QXVzbFx1MDBmNnNlcgorTlRyaWdnZXJXaXoucGFnZV9kZXNjcmlwdGlvbj1OZXVlbiBTVEVNIEF1c2xcdTAwZjZzZXIgaW4gZWluZW0gUHJvamVrdCBlcnN0ZWxsZW4KK05UcmlnZ2VyV2l6LkRDX0RFU0NSSVBUSU9OPUF1c2xcdTAwZjZzZXIgInswfSIKKworIyBQcmVkaWNhdGUKK05QcmVkaWNhdGVXaXoud2l6YXJkX3RpdGxlPU5ldWUgRWlnZW5zY2hhZnQKK05QcmVkaWNhdGVXaXoucGFnZV90aXRsZT1FaWdlbnNjaGFmdAorTlByZWRpY2F0ZVdpei5wYWdlX2Rlc2NyaXB0aW9uPU5ldWVzIFNURU0gUHJcdTAwZTRkaWthdCBpbiBlaW5lbSBQcm9qZWt0IGVyc3RlbGxlbgorTlByZWRpY2F0ZVdpei5EQ19ERVNDUklQVElPTj1FaWdlbnNjaGFmdCAiezB9IgorCisjIE1vZGlmaWVycworUmFuZ2UudHlwZT1SZWljaHdlaXRlCitTZXF1ZW5jZS50eXBlPVNlcXVlbnoKK1NpbmdsZS50eXBlPUVpbnplbAorCisKKyMgTWF0cml4IEVkaXRvcgorTWF0cml4LmludmFsaWQudmFsdWU9VW5nXHUwMGZjbHRpZ2VyIFdlcnQgezB9CitNYXRyaXguZGlhbG9nLm9rYXk9T0sKK01hdHJpeC5kaWFsb2cuY2FuY2VsPUFiYnJlY2hlbgorTWF0cml4LmRpYWxvZy5wbHVzPSsKK01hdHJpeC5kaWFsb2cubWludXM9LQorCisjTG9jYXRpb24gcGlja2VyCitOTG9jV2l6SVNPSz1JU08gS2V5CitOTG9jV2l6Q05UUlk9TGFuZAorTkxvY1dpekwxPUxldmVsIDEKK05Mb2NXaXpMMj1MZXZlbCAyCitOTG9jV2l6TDM9TGV2ZWwgMworTkxvY1dpek9rPU9LCitOTG9jV2l6Q2FuY2VsPUFiYnJlY2hlbgorTkxvY1BpY2tlcldpei5nbG9iYWw9R2xvYmFsIHdcdTAwZTRobGVuCitOTG9jUGlja2VyV2l6LmlucHJvamVjdD1JbSBQcm9qZWt0IHdcdTAwZTRobGVuCitOTG9jUGlja2VyV2l6LmdldHRpbmdMb2NhdGlvbnM9TGlzdGUgZGVyIFN0YW5kb3J0ZSBmXHUwMGZjciBha3R1ZWxsZXMgUHJvamVrdCB3aWVkZXJoZXJzdGVsbGVuIC4uLgorCisjUmVuYW1lL2NvcHkgZGlhbG9nCitSZW5hbWUuZGlhbG9nLm9rYXk9T0sKK1JlbmFtZS5kaWFsb2cuY2FuY2VsPUFiYnJlY2hlbgorcmVuYW1lPURhdGVpIHVtYmVuZW5uZW4KK2NvcHk9RGF0ZWkga29waWVyZW4KKworIyBHcmFwaCBHZW5lcmF0b3JzCitHR0RDLjA9UXVlbGxlCitHR0RDLjI9S2xhc3NlCitHR0RDLjM9UHJvYmxlbSBiZWltIEVyc3RlbGxlbiB2b24gR3JhcGgtR2VuZXJhdG9yLUluc3RhbnoKK1lFUz1KYQorTk89TmVpbgorTkdGV2l6LkRDX0RFU0NSSVBUSU9OPUdyYXBoCisKKyMgTGF0dGljZSBncmFwaCBnZW5lcmF0b3IKK3hTaXplPVgtR3JcdTAwZjZcdTAwZGZlCit5U2l6ZT1ZLUdyXHUwMGY2XHUwMGRmZQoreFNpemVVTklUPVJhc3RlcgoreVNpemVVTklUPVJhc3RlcgoreFNpemVUVD1BbnphaGwgZGVyIEdpdHRlciBlbnRsYW5nIGRlciBYLUFjaHNlCit5U2l6ZVRUPUFuemFobCBkZXIgR2l0dGVyIGVudGxhbmcgZGVyIFktQWNoc2UKK3VzZU5lYXJlc3ROZWlnaGJvcnM9Tlx1MDBlNGNoc3RlIE5hY2hiYXJuCit1c2VOZWFyZXN0TmVpZ2hib3JzVU5JVD0KK3VzZU5lYXJlc3ROZWlnaGJvcnNUVD1HaXR0ZXIgdmVyYmluZGVuIG1pdCBcdTIwMWVOXHUwMGU0Y2hzdGUgTmFjaGJhcm5cdTIwMWMtS2FudGVuCit1c2VOZXh0TmVhcmVzdE5laWdoYm9ycz1OXHUwMGU0Y2hzdGUgTlx1MDBlNGNoc3RlIE5hY2hiYXJuCit1c2VOZXh0TmVhcmVzdE5laWdoYm9yc1VOSVQ9Cit1c2VOZXh0TmVhcmVzdE5laWdoYm9yc1RUPUdpdHRlciB2ZXJiaW5kZW4gbWl0aGlsZmUgXHUyMDFlTlx1MDBlNGNoc3RlIE5hY2hiYXJuXHUyMDFjLUthbnRlbgorcGVyaW9kaWNCb3VuZGFyaWVzPVBlcmlvZGlzY2hlIEdyZW56ZW4KK3BlcmlvZGljQm91bmRhcmllc1VOSVQ9CitwZXJpb2RpY0JvdW5kYXJpZXNUVD1QZXJpb2Rpc2NoZSBHcmVuemVuIGJlbnV0emVuCisKKyMgRm9yIGdlbmVyaWMgcHJvcGVydHkgZWRpdG9yCitmaWxlQ2hvb3NlckJ1dHRvblRleHQ9RGF0ZWkgd1x1MDBlNGhsZW4gXHUyMDI2CitkaXJDaG9vc2VyQnV0dG9uVGV4dD1WZXJ6ZWljaG5pcyB3XHUwMGU0aGxlbiAuLi4KK2ZpbGVDaG9vc2VyQnV0dG9uVG9vbHRpcFRleHQ9RWluZSBEYXRlaSB3aXJkIHp1bSBMYWRlbiB2b24gRGF0ZW4gZlx1MDBmY3IgZWluZW4gYmVzdGltbXRlbiBLbm90ZW4gdmVyd2VuZGV0CitkaXJDaG9vc2VyQnV0dG9uVG9vbHRpcFRleHQ9RWluIFZlcnplaWNobmlzIHdpcmQgZlx1MDBmY3IgZGFzIExhZGVuIGVpbmVyIFNhbW1sdW5nIHZvbiBEYXRlaWVuIChpbiBkZXIgUmVnZWwgZlx1MDBmY3IgbWVociBhbHMgZWluZW4gS25vdGVuKQorZmlsZUNob29zZXJEaWFsb2dUaXRsZT1DU1YtRGF0ZWkgd1x1MDBlNGhsZW4KK2RpckNob29zZXJEaWFsb2dUaXRsZT1WZXJ6ZWljaG5pcyB3XHUwMGU0aGxlbgorTlBpY2tMb2M9V1x1MDBlNGhsZW4KK05QaWNrTG9jVGl0bGU9V1x1MDBlNGhsZW4gc2llIGVpbmVuIE9ydAorCisjRG91YmxlIGFuZCBzdHJpbmcgdmFsdWVzCitpZGVudGlmaWVyPUJlemVpY2huZXIKK2lkZW50aWZpZXJVTklUPQordmFsdWU9V2VydAordmFsdWVVTklUPQorCisjUGFyYW1ldGVyIHBpY2tlcgorUFAuSURFTlRTPUluIGlocmVtIFByb2pla3QgZ2VmdW5kZW5lIE9iamVrdAorUFAuUFJPUD1PYmpla3RlaWdlbnNjaGFmdGVuCisKKyNJREVOVElGSUFCTEUgcGlja2VyCitJUC5PQkpFQ1RTPUluIGlocmVtIFByb2pla3QgZ2VmdW5kZW5lIE9iamVrdApkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3dpemFyZHMvbWVzc2FnZXNfa3IucHJvcGVydGllcyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS93aXphcmRzL21lc3NhZ2VzX2tyLnByb3BlcnRpZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWEyZWQzNwotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS93aXphcmRzL21lc3NhZ2VzX2tyLnByb3BlcnRpZXMKQEAgLTAsMCArMSwyNzIgQEAKKyMgV2l6YXJkTWVzc2FnZXMucHJvcGVydGllcworIworIy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorIyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyMgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyMgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorIyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisjICoKKyMgKiBDb250cmlidXRvcnM6CisjICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorIyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjIE5ldyBQcm9qZWN0IFdpemFyZAorTlNURU1Qcm9XaXoucGFnZV90aXRsZT1cdWMwYzhcdWI4NWNcdWM2YjQgU1RFTSBcdWQ1MDRcdWI4NWNcdWM4MWRcdWQyYjggXHVjNzc0XHViOTg0IFx1YzljMFx1YzgxNQorTlNURU1Qcm9XaXoudGl0bGU9U1RFTSBcdWQ1MDRcdWI4NWNcdWM4MWRcdWQyYjhcdWI5N2MgXHViOWNjXHViNGVkXHViMmM4XHViMmU0CitOU1RFTVByb1dpei5wYWdlX2Rlc2NyaXB0aW9uPVx1Yzc5MVx1YzVjNSBcdWM2MDFcdWM1ZWQgXHViNjEwXHViMjk0IFx1YzY3OFx1YmQ4MCBcdWM3MDRcdWNlNThcdWM1ZDAgXHVjMGM4XHViODVjXHVjNmI0IFNURU0gXHVkNTA0XHViODVjXHVjODFkXHVkMmI4XHViOTdjIFx1YjljY1x1YjRlZFx1YjJjOFx1YjJlNC4KK05TVEVNUHJvV2l6LmNyZWF0aW5nX2RpcmVjdG9yaWVzPVx1ZDUwNFx1Yjg1Y1x1YzgxZFx1ZDJiOCBcdWI1MTRcdWI4MDlcdWQxYTBcdWI5YWNcdWI5N2MgXHVjMGRkXHVjMTMxCitOU1RFTVByb1dpei5jcmVhdGluZ19wcm9qZWN0PVx1YzBjOFx1Yjg1Y1x1YzZiNCBTVEVNIFx1ZDUwNFx1Yjg1Y1x1YzgxZFx1ZDJiOCBcdWI5Y2NcdWI0ZTRcdWFlMzAKKworTlNURU1Qcm9XaXouZ3JhcGhfZm9sZGVyPVx1YWRmOFx1Yjc5OFx1ZDUwNAorTlNURU1Qcm9XaXoubW9kZWxfZm9sZGVyPVx1YmFhOFx1YjM3OAorTlNURU1Qcm9XaXouc2NlbmFyaW9fZm9sZGVyPVx1YzJkY1x1YjA5OFx1YjlhY1x1YzYyNAorTlNURU1Qcm9XaXouZGVjb3JhdG9yX2ZvbGRlcj1cdWM3YTVcdWMyZGRcdWM3OTBcdWI0ZTQKK05TVEVNUHJvV2l6LkNyZWF0ZV9Qcm9ibGVtPVx1ZDUwNFx1Yjg1Y1x1YzgxZFx1ZDJiOCBcdWMwZGRcdWMxMzEgXHVjOTExIFx1YmIzOFx1YzgxYyBcdWJjMWNcdWMwZGQKKworIyBOZXcgSWRlbnRpZmllciBXaXphcmQgKHN1cGVyIGNsYXNzIHRvIEdyYXBoL01vZGVsL1NjZW5hcmlvIHdpemFyZHMKK05JZFdpei5jcmVhdGluZz1cdWMwZGRcdWMxMzFcdWM5MTEgCitOSWRXaXouYnJvd3NlPVx1Y2MzZVx1YzU0NFx1YmNmNFx1YWUzMAorTklkV2l6LnByb2plY3Q9XHVkNTA0XHViODVjXHVjODFkXHVkMmI4CitOSWRXaXoubmFtZT1cdWM3NzRcdWI5ODQKK05JZFdpei5ub1Byb2pFcnI9XHVkNTA0XHViODVjXHVjODFkXHVkMmI4IFx1Yzg3NFx1YzdhY1x1ZDU1OFx1YzljMCBcdWM1NGFcdWM3NGMKK05JZFdpei5uYW1lTWlzc2luZ0Vycj1cdWM3NzRcdWI5ODQgXHViMjA0XHViNzdkCitOSWRXaXoubmFtZUVycj1cdWM3OThcdWJhYmJcdWI0MWMgXHVjNzc0XHViOTg0CitOSWRXaXouc2F2ZUVycj1cdWJiMzhcdWM4MWMgXHVjODAwXHVjN2E1CisKKyMgRHVibGluIENvcmUgUGFnZSBDb25zdGFudHMKK05EdWJsaW5Db3JlLnBhZ2VfdGl0bGU9XHViMzU0XHViZTE0XHViOWIwIFx1Y2Y1NFx1YzViNAorTkR1YmxpbkNvcmUucGFnZV9kZXNjcmlwdGlvbj1cdWIzNTRcdWJlMTRcdWI5YjAgXHVjZjU0XHVjNWI0IFx1YmE1NFx1ZDBjMCBcdWIzNzBcdWM3NzRcdWQxMzBcdWI5N2MgXHVjZDA4XHVhZTMwXHVkNjU0LgorCitORHVibGluQ29yZS50aXRsZT1cdWM4MWNcdWJhYTkKK05EdWJsaW5Db3JlLnRpdGxlRGVzYz1cdWI5YWNcdWMxOGNcdWMyYTRcdWM1ZDAgXHVjOWMwXHVjODE1XHViNDFjIFx1Yzc3NFx1Yjk4NFx1Yzc4NVx1YjJjOFx1YjJlNC4gXHVjNzdjXHViYzE4XHVjODAxXHVjNzNjXHViODVjIFx1YjlhY1x1YzE4Y1x1YzJhNFx1Yzc1OCBcdWM4MTVcdWMyZGQgXHVjNzc0XHViOTg0LgorTkR1YmxpbkNvcmUuZGVzYz1cdWMxMjRcdWJhODUKK05EdWJsaW5Db3JlLmRlc2NEZXNjPVx1YjlhY1x1YzE4Y1x1YzJhNFx1Yzc1OCBcdWIwYjRcdWM2YTlcdWM1ZDAgXHViMzAwXHVkNTVjIFx1YzEyNFx1YmE4NS4gXHVjNzdjXHViYzE4XHVjODAxXHVjNzNjXHViODVjIFx1YzllN1x1Yzc0MCBcdWM2OTRcdWM1N2RcdWM3ODQuCitORHVibGluQ29yZS5jcmVhdG9yPVx1Y2MzZFx1Yzg3MFx1Yzc5MAorTkR1YmxpbkNvcmUuY3JlYXRvckRlc2M9XHViOWFjXHVjMThjXHVjMmE0XHVjNzU4IFx1YjBiNFx1YzZhOSBcdWMwZGRcdWMxMzFcdWM1ZDAgXHViMzAwXHVkNTc0IFx1Yzc3Y1x1Y2MyOFx1YzgwMSBcdWNjNDVcdWM3ODRcdWM3NDQgXHVjOWMwXHViMjk0IFx1YWMxY1x1Y2NiNC4gXHVjNzdjXHViYzE4XHVjODAxXHVjNzNjXHViODVjIFx1YzBhY1x1Yjc4Y1x1Yzc3NFx1YjA5OCBcdWM4NzBcdWM5YzFcdWM3NTggXHVjNzc0XHViOTg0IFx1YWUzMFx1YzdhYy4KK05EdWJsaW5Db3JlLmRhdGU9XHViMGEwXHVjOWRjCitORHVibGluQ29yZS5kYXRlRGVzYz1cdWI5YWNcdWMxOGNcdWMyYTRcdWM3NTggXHVjMjE4XHViYTg1XHVjOGZjXHVhZTMwXHVjNWQwXHVjMTFjIFx1Yzc3NFx1YmNhNFx1ZDJiOFx1YzY0MCBcdWFkMDBcdWI4MjhcdWI0MWMgXHViMGEwXHVjOWRjLiBcdWM3N2NcdWJjMTggXHVkNDVjXHVhZTMwIFx1YmMyOVx1YzJkZCBZWVlZIC0gTU0gLSBERC4gXHVjNjA4IDIwMDdcdWIxNDQgMVx1YzZkNCAxOFx1Yzc3YworTkR1YmxpbkNvcmUudmFsaWQ9XHVjNzIwXHVkNmE4XHVkNTVjCitORHVibGluQ29yZS52YWxpZERlc2M9RGF0ZSAob2Z0ZW4gYSByYW5nZSkgb2YgdmFsaWRpdHkgb2YgYSByZXNvdXJjZS4gZS5nLiBzdGFydD0yMDA2LTAzLTI5OyBlbmQ9MjAwNi0wMy0zMDsgb3Igc2ltcGx5IHN0YXJ0PTIwMDYtMDMtMjk7IGlmIHRoZXJlIGlzIG5vIGVuZCB0byB0aGUgdmFsaWRpdHkuCitORHVibGluQ29yZS5jcmVhdGVkPVx1YzBkZFx1YzEzMVx1YjQyOAorTkR1YmxpbkNvcmUuY3JlYXRlZERlc2M9XHViOWFjXHVjMThjXHVjMmE0XHVjNzU4IFx1YzBkZFx1YzEzMSBcdWIwYTBcdWM5ZGMuIFx1Yzc3Y1x1YmMxOFx1YzgwMVx1YzczY1x1Yjg1YyBZWVlZIC0gTU0gLSBERC4gXHVjNjA4IDIwMDdcdWIxNDQgMVx1YzZkNCAxOFx1Yzc3YworTkR1YmxpbkNvcmUuc291cmNlPVx1Y2Q5Y1x1Y2M5OAorTkR1YmxpbkNvcmUuc291cmNlRGVzYz1cdWQ2MDRcdWM3YWMgXHViOWFjXHVjMThjXHVjMmE0IFx1YmMxY1x1YzBkZCBcdWFlMzBcdWJjMThcdWQ1NWMgXHViOWFjXHVjMThjXHVjMmE0XHVjNWQwIFx1YjMwMFx1ZDU1YyBcdWNjMzhcdWM4NzAuIFx1YjlhY1x1YzE4Y1x1YzJhNFx1Yzc1OCBcdWM2ZDBcdWJjZjggXHViMGI0XHVjNmE5IFx1Y2Q5Y1x1Y2M5OC4gXHVjNjA4IFVSTC4KK05EdWJsaW5Db3JlLnB1Ymxpc2hlcj1cdWJjMWNcdWQ1ODlcdWM3OTAKK05EdWJsaW5Db3JlLnB1Ymxpc2hlckRlc2M9XHViOWFjXHVjMThjXHVjMmE0XHVhYzAwIFx1YzBhY1x1YzZhOSBcdWFjMDBcdWIyYTVcdWQ1NjAgXHVjMjE4IFx1Yzc4OFx1YjNjNFx1Yjg1ZCBcdWQ1NThcdWIyOTQgXHVhYzFjXHVjY2I0LiBcdWM3N2NcdWJjMThcdWM4MDFcdWM3M2NcdWI4NWMgXHVjMGFjXHViNzhjLCBcdWM4NzBcdWM5YzEgXHViNjEwXHViMjk0IFx1YzExY1x1YmU0NFx1YzJhNCBcdWM3NzRcdWI5ODQgXHVhZTMwXHVjN2FjLgorTkR1YmxpbkNvcmUuY292ZXJhZ2U9XHVjODAxXHVjNmE5IFx1YmM5NFx1YzcwNAorTkR1YmxpbkNvcmUuY292ZXJhZ2VEZXNjPVx1YjlhY1x1YzE4Y1x1YzJhNFx1Yzc1OCBcdWIwYjRcdWM2YTkgXHViYzk0XHVjNzA0LiBcdWFjZjVcdWFjMDRcdWM4MDEgXHVjNzA0XHVjZTU4LCBcdWMyZGNcdWFjMDRcdWM4MDEgXHVhZTMwXHVhYzA0IChcdWIwYTBcdWM5ZGMgXHViNjEwXHViMjk0IFx1YjBhMFx1YzlkYyBcdWJjOTRcdWM3MDQpLCBcdWFkMDBcdWQ1NjAgXHViNGYxXHVjNzQ0IFx1ZDNlY1x1ZDU2OFx1ZDU2MCBcdWMyMTggXHVjNzg4XHVjNzRjCitORHVibGluQ29yZS5jb250cmlidXRvcj1cdWFlMzBcdWJkODBcdWM3OTAKK05EdWJsaW5Db3JlLmNvbnRyaWJ1dG9yRGVzYz1cdWI5YWNcdWMxOGNcdWMyYTRcdWM1ZDAgXHViMzAwXHVkNTVjIFx1YWUzMFx1YzVlY1x1Yjk3YyBcdWQ1NWMgXHVhYzFjXHVjY2I0LiBcdWM3N2NcdWJjMThcdWM4MDFcdWM3M2NcdWI4NWMgXHVjMGFjXHViNzhjLCBcdWM4NzBcdWM5YzEgXHViNjEwXHViMjk0IFx1YzExY1x1YmU0NFx1YzJhNFx1Yzc1OCBcdWM3NzRcdWI5ODQgXHVhZTMwXHVjN2FjLgorTkR1YmxpbkNvcmUucmVsYXRpb249XHVhZDAwXHVhY2M0CitORHVibGluQ29yZS5yZWxhdGlvbkRlc2M9XHVhZDAwXHViODI4IFx1YjlhY1x1YzE4Y1x1YzJhNFx1YzVkMCBcdWIzMDBcdWQ1NWMgXHVjYzM4XHVjODcwLiBcdWM2MDggVVJMCitORHVibGluQ29yZS5yaWdodHM9XHVhZDhjXHViOWFjCitORHVibGluQ29yZS5yaWdodHNEZXNjPVx1YjlhY1x1YzE4Y1x1YzJhNFx1YzVkMCBcdWM3NzRcdWMwYzEgXHVhZDhjXHVkNTVjXHVjNWQwIFx1YjMwMFx1ZDU1YyBcdWM4MTVcdWJjZjQuIFx1Yzc3Y1x1YmMxOFx1YzgwMVx1YzczY1x1Yjg1YywgXHVhZDhjXHVkNTVjIFx1YWQwMFx1YjlhYyBcdWJhODVcdWMxMzhcdWMxMWMuIFx1YzYwOCBcdWM4MDBcdWM3OTFcdWFkOGMgRm9vQmFyIDIwMDYKK05EdWJsaW5Db3JlLnN1YmplY3Q9XHVjODFjXHViYWE5CitORHVibGluQ29yZS5zdWJqZWN0RGVzYz1cdWI5YWNcdWMxOGNcdWMyYTRcdWM3NTggXHViMGI0XHVjNmE5XHVjNzU4IFx1YzhmY1x1YzgxYy4gXHVjNzdjXHViYzE4XHVjODAxXHVjNzNjXHViODVjIFx1ZDBhNFx1YzZjY1x1YjRkYyBcdWI2MTBcdWIyOTQgXHViZDg0XHViOTU4IFx1Y2Y1NFx1YjRkYy4KK05EdWJsaW5Db3JlLmxhbmd1YWdlPVx1YzViOFx1YzViNAorTkR1YmxpbkNvcmUubGFuZ3VhZ2VEZXNjPVx1YjlhY1x1YzE4Y1x1YzJhNFx1Yzc1OCBcdWM5YzBcdWM4MDEgXHViMGI0XHVjNmE5XHVjNzU4IFx1YzViOFx1YzViNC4gXHVjNjA4IEVOIC0gR0IKK05EdWJsaW5Db3JlLmNpdGF0aW9uPVx1Y2MzOFx1Yzg3MAorTkR1YmxpbkNvcmUuY2l0YXRpb25EZXNjPVx1YjlhY1x1YzE4Y1x1YzJhNFx1YzVkMCBcdWIzMDBcdWQ1NWMgXHVjYzM4XHVhY2UwIFx1Y2MzOFx1Yzg3MCBcdWJiMzhcdWQ1Y2MuCitORHVibGluQ29yZS5saWNlbnNlPVx1Yjc3Y1x1Yzc3NFx1YzEzY1x1YzJhNAorTkR1YmxpbkNvcmUubGljZW5zRGVzYz1cdWI5YWNcdWMxOGNcdWMyYTRcdWI5N2MgXHVjMGFjXHVjNmE5XHVkNTYwIFx1YzIxOCBcdWM3ODhcdWIzYzRcdWI4NWQgXHVhY2Y1XHVjMmRkXHVjODAxXHVjNzc4IFx1YWQ4Y1x1ZDU1Y1x1Yzc0NCBcdWJkODBcdWM1ZWMgXHViYzk1XHViOTYwIFx1YmIzOFx1YzExYy4KK05EdWJsaW5Db3JlLnJlcXVpcmVkPVx1ZDU0NFx1YzIxOCBcdWMwYWNcdWQ1NmQKK05EdWJsaW5Db3JlLnJlcXVpcmVkRGVzYz1cdWMxMjRcdWJhODUgXHViOWFjXHVjMThjXHVjMmE0XHViMjk0IFx1YWRmOCBcdWFlMzBcdWIyYTUsIFx1YzgwNFx1YzFhMSwgXHViNjEwXHViMjk0IFx1YjBiNFx1YzZhOVx1Yzc1OCBcdWM3N2NcdWFkMDBcdWMxMzFcdWM3NDQgXHVjOWMwXHVjNmQwXHVkNTU4XHVhZTMwIFx1YzcwNFx1ZDU3NCBcdWNjMzhcdWM4NzAgXHViOWFjXHVjMThjXHVjMmE0XHViOTdjIFx1ZDU0NFx1YzY5NFx1Yjg1YyBcdWQ1NjguCitORHVibGluQ29yZS5zcGF0aWFsPVx1YWNmNVx1YWMwNFx1Yzc1OAorTkR1YmxpbkNvcmUuc3BhdGlhbERlc2M9XHViOWFjXHVjMThjXHVjMmE0XHVjNzU4IFx1YzljMFx1YzgwMSBcdWIwYjRcdWM2YTlcdWM3NTggXHVhY2Y1XHVhYzA0XHVjODAxIFx1ZDJiOVx1YzEzMS4KK05EdWJsaW5Db3JlLmZvcm1hdD1cdWQzZWNcdWI5ZjcKK05EdWJsaW5Db3JlLmZvcm1hdERlc2M9XHViOWFjXHVjMThjXHVjMmE0XHVjNzU4IFx1ZDNlY1x1YjlmN1x1Yzc0NCBcdWM5YzBcdWM4MTVcdWQ1NThcdWIyOTQgXHVjMGFjXHVjODA0IFx1YzgxNVx1Yzc1OCBcdWI0MWMsIFNURU0gXHVkMmI5XHVjODE1XHVjNzU4IFVSSS4gXHVjMGFjXHVjNmE5XHVjNzkwIFx1YzgxNVx1Yzc1OCBcdWJkODhcdWFjMDBcdWIyYTUuCitORHVibGluQ29yZS50eXBlPVx1YzcyMFx1ZDYxNQorTkR1YmxpbkNvcmUudHlwZURlc2M9XHViOWFjXHVjMThjXHVjMmE0XHVjNzU4IFx1ZDBjMFx1Yzc4NVx1Yzc0NCBcdWM5YzBcdWM4MTVcdWQ1NThcdWIyOTQgXHVjMGFjXHVjODA0IFx1YzgxNVx1Yzc1OFx1YjQxYywgU1RFTSBcdWQyYjlcdWM4MTVcdWM3NTggVVJJLiAgXHVjMGFjXHVjNmE5XHVjNzkwIFx1YzgxNVx1Yzc1OCBcdWJkODhcdWFjMDBcdWIyYTUuCitORHVibGluQ29yZS5yZXF1aXJlZEZpZWxkPVx1ZDU0NFx1YzIxOCBcdWM3ODVcdWI4MjVcdWI3ODAKKworTkR1YmxpbkNvcmUudGl0bGVFcnI9XHVjODFjXHViYWE5XHVjNzc0IFx1YmU0NFx1YzViNCBcdWM3ODhcdWM3NGMuCitORHVibGluQ29yZS5jcmVhdGVkRXJyPVx1YjBhMFx1YzlkYyBcdWQ2MTVcdWMyZGRcdWM3NzQgXHVjNjJjXHViYzE0XHViOTc0XHVjOWMwIFx1YzU0YVx1Yzc0YzogWVlZWSAtIE1NIC0gREQKK05EdWJsaW5Db3JlLmRhdGVFcnI9XHViMGEwXHVjOWRjIFx1ZDYxNVx1YzJkZFx1Yzc3NCBcdWM2MmNcdWJjMTRcdWI5NzRcdWM5YzAgXHVjNTRhXHVjNzRjIDogWVlZWSAtIE1NIC0gREQKK05EdWJsaW5Db3JlLnZhbGlkRXJyPVZhbGlkIGRhdGUgcmFuZ2Ugbm90IGZvcm1hdHRlZCBjb3JyZWN0bHk6IHN0YXJ0PVlZWVktTU0tREQ7IG9yIHN0YXJ0PVlZWVktTU0tREQ7IGVuZD1ZWVlZLU1NLUREOworCisjIER1YmxpbiBDb3JlIGRlZmF1bHQgZGF0YQorZGNfY3JlYXRvcl9zdGVtdGVhbT1TVEVNIFx1ZDMwMAorZGNfcHVibGlzaGVyPVx1Yzc3NFx1ZDA3NFx1YjliZFx1YzJhNCBcdWM3YWNcdWIyZTgKK2RjX2xpY2Vuc2U9XHVjNzc0XHVkMDc0XHViOWJkXHVjMmE0IFx1YWNmNVx1YzZhOSBcdWMwYWNcdWM2YTkgXHVkNWM4XHVhYzAwXHVjMTFjIChFUEwpCitkY19pZGVudGllcj1cdWMxMjRcdWM4MTVcdWI0MThcdWM5YzAgXHVjNTRhXHVjNzQwIFx1YzJkZFx1YmNjNFx1Yzc5MCEKK2RjX3RpdGxlX21vZGVsPVx1YmFhOFx1YjM3OAorZGNfc291cmNlX21vZGVsID0gaHR0cDovL3dpa2kuZWNsaXBzZS5vcmcvQ3JlYXRpbmdfYV9TVEVNX1NjZW5hcmlvI0FkZF9tb2RlbF9jb250YWluZXJzX2Zvcl90aGVfbW9kZWxfaGllcmFyY2h5ICAgKGFuZCByZWZlcmVuY2VzIHRoZXJlLWluKQorZGNfZGVzY19tb2RlbD1cdWJhYThcdWIzNzhcdWM3NDAgXHViNzdjXHViY2E4LCBcdWM3YTVcdWMyZGRcdWM3OTAsIFx1YWRmOFx1Yjc5OFx1ZDUwNCwgc3ViZ3JhcGhzXHVjNzU4IFx1YWNjNFx1Y2UzNSBcdWNlZWNcdWI4MDlcdWMxNThcdWM3ODQuCisKK2RjX3RpdGxlX2V4cD1cdWMyZTRcdWQ1ZDgKK2RjX3NvdXJjZV9leHA9JSAyOSBodHRwOi8vd2lraS5lY2xpcHNlLm9yZy9CYXRjaF9Nb2RlXyAlXHVjNzU4IDI4UnVubmluZ19FeHBlcmltZW50cyAoXHVhZGY4XHViOWFjXHVhY2UwIFx1Y2MzOFx1YWNlMCBcdWJiMzhcdWQ1Y2NcdWM1ZDBcdWMxMWMpCitkY19kZXNjX2V4cD1cdWMyZTRcdWQ1ZDhcdWM3NTggXHViYWE5XHVjODAxXHVjNzQwIFx1YzJkY1x1YjA5OFx1YjlhY1x1YzYyNCBcdWM1ZWNcdWI3ZWNcdWFjMWNcdWI5N2MgXHVjYzI4XHViODQwXHVjYzI4XHViODQwXHViODVjLCBcdWFlMzBcdWJjZjggXHVjMmRjXHViMDk4XHViOWFjXHVjNjI0XHVjNzU4IFx1Yzc3Y1x1YmQ4MCBcdWNlMjFcdWJhNzRcdWM3NDQgXHVjMjE4XHVjODE1XHVkNTU4XHViYTc0XHVjMTFjIFx1YzJlNFx1ZDU4OVx1ZDU1OFx1YjI5NCBcdWFjODNcdWM3ODQKKworZGNfdGl0bGVfbW9kPVx1YzIxOFx1YzgxNVx1Yzc5MAorZGNfc291cmNlX21vZD1odHRwOi8vd2lraS5lY2xpcHNlLm9yZy9JbnZva2luZ19Nb2RpZmllcnNfVXNpbmdfVHJpZ2dlcnNfYW5kX1ByZWRpY2F0ZXMuIChcdWFkZjhcdWI5YWNcdWFjZTAgXHVjYzM4XHVhY2UwIFx1YmIzOFx1ZDVjY1x1YzVkMFx1YzExYykKK2RjX2Rlc2NfbW9kPVx1YzJlNFx1ZDVkOFx1Yzc3NFx1YjA5OCBcdWM3OTBcdWIzZDlcdWQ2NTRcdWI0MWMgXHVjMmU0XHVkNWQ4XHVjNWQwXHVjMTFjIFx1YzIxOFx1YzgxNVx1ZDU2MCBcdWMxOGRcdWMxMzEgXHVjOWMwXHVjODE1CisKK2RjX3RpdGxlX3ByZWQ9XHVjMjIwXHVjNWI0CitkY19zb3VyY2VfcHJlZD1odHRwOi8vd2lraS5lY2xpcHNlLm9yZy9JbnZva2luZ19Nb2RpZmllcnNfVXNpbmdfVHJpZ2dlcnNfYW5kX1ByZWRpY2F0ZXMuIChcdWFkZjhcdWI5YWNcdWFjZTAgXHVjYzM4XHVhY2UwIFx1YmIzOFx1ZDVjY1x1YzVkMFx1YzExYykKK2RjX2Rlc2NfcHJlZD1cdWMyZTRcdWQ1ZDggXHViNjEwXHViMjk0IFx1Yzc5MFx1YjNkOSBcdWMyZTRcdWQ1ZDhcdWM1ZDBcdWMxMWMgXHVjMjE4XHVjODE1XHViNDE4XHViMjk0IFx1YzIyMFx1YzViNCBcdWI2MTBcdWIyOTQgXHVjODcwXHVhYzc0XHVjNzQ0IFx1YzljMFx1YzgxNQorCitkY190aXRsZV9zY2VuPVx1YzJkY1x1YjA5OFx1YjlhY1x1YzYyNAorZGNfc291cmNlX3NjZW49aHR0cDovL3dpa2kuZWNsaXBzZS5vcmcvQ3JlYXRpbmdfYV9TVEVNX1NjZW5hcmlvIChcdWFkZjhcdWI5YWNcdWFjZTAgXHVjYzM4XHVhY2UwIFx1YmIzOFx1ZDVjY1x1YzVkMFx1YzExYykKK2RjX2Rlc2Nfc2Nlbj1cdWMyZGNcdWIwOThcdWI5YWNcdWM2MjRcdWIyOTQgXHVjODA0XHVjY2I0IFx1YmFhOFx1YjM3OCBcdWI2MTBcdWIyOTQgXHViYWE4XHViMzc4XHVjNzU4IFx1YWNjNFx1Y2UzNSBcdWFkNmNcdWM4NzBcdWI5N2MgXHViY2Y0XHVjNzIwXHVkNTU4XHVhY2UwLCBcdWNkMDhcdWFlMzAgXHVjODcwXHVhYzc0KFx1YzYyNFx1YzVmY1x1Yzc5MCwgXHVjODExXHVjODg1XHVjNzkwKVx1YWNmYyBcdWMyZGNcdWQwMDBcdWMxMWNcdWI5N2MgXHVkM2VjXHVkNTY4XHVkNTY4CisKK2RjX3RpdGxlX3NlcT1cdWMyZGNcdWQwMDBcdWMxMWMKK2RjX3NvdXJjZV9zZXEgPSBodHRwOi8vd2lraS5lY2xpcHNlLm9yZy9DcmVhdGluZ19hX1NURU1fU2NlbmFyaW8jQ3JlYXRlX2FfU2VxdWVuY2VyICAgKGFuZCByZWZlcmVuY2VzIHRoZXJlLWluKQorZGNfZGVzY19zZXE9XHVjMmRjXHVhYzA0XHVhY2ZjIFx1YzJkY1x1YjA5OFx1YjlhY1x1YzYyNFx1Yzc1OCBcdWFlMzBcdWFjMDRcdWM3NDQgXHVjODFjXHVjNWI0CisKK2RjX3RpdGxlX3RyaWc9XHVkMmI4XHViOWFjXHVhYzcwCitkY19zb3VyY2VfdHJpZz1odHRwOi8vd2lraS5lY2xpcHNlLm9yZy9JbnZva2luZ19Nb2RpZmllcnNfVXNpbmdfVHJpZ2dlcnNfYW5kX1ByZWRpY2F0ZXMuIChcdWFkZjhcdWI5YWNcdWFjZTAgXHVjYzM4XHVhY2UwIFx1YmIzOFx1ZDVjY1x1YzVkMFx1YzExYykKK2RjX2Rlc2NfdHJpZz1cdWMyZTRcdWQ1ZDhcdWM3NzRcdWIwOTggXHVjNzkwXHViM2Q5XHVkNjU0XHViNDFjIFx1YzJlNFx1ZDVkOFx1Yzc1OCBcdWMyMjBcdWM1YjRcdWI5N2MgXHVhZTMwXHViYzE4XHVjNzNjXHViODVjIFx1YjllNFx1YWMxYyBcdWJjYzBcdWMyMThcdWM3NTggXHVjMjE4XHVjODE1XHVjNzQ0IFx1YzcyMFx1YmMxYworCisKKyMgTW9kZWwgV2l6YXJkCitOTW9kZWxXaXoud2l6YXJkX3RpdGxlPVx1YzBjOFx1Yjg1Y1x1YzZiNCBcdWJhYThcdWIzNzgKK05Nb2RlbFdpei5wYWdlX3RpdGxlPVx1YmFhOFx1YjM3OAorTk1vZGVsV2l6LnBhZ2VfZGVzY3JpcHRpb249XHVkNTA0XHViODVjXHVjODFkXHVkMmI4XHVjNWQwXHVjMTFjIFx1YzBjOCBTVEVNIFx1YmFhOFx1YjM3OFx1Yzc0NCBcdWI5Y2NcdWI0ZTRcdWFlMzAuCitOTW9kZWxXaXouRENfREVTQ1JJUFRJT049XHViYWE4XHViMzc4ICJ7MH0iCisKKyMgTW9kZWwgU2NlbmFyaW8KKworTlNjZW5hcmlvV2l6LndpemFyZF90aXRsZT1cdWMwYzhcdWI4NWNcdWM2YjQgXHVjMmRjXHViMDk4XHViOWFjXHVjNjI0CitOU2NlbmFyaW9XaXoucGFnZV90aXRsZT1cdWMyZGNcdWIwOThcdWI5YWNcdWM2MjQKK05TY2VuYXJpb1dpei5wYWdlX2Rlc2NyaXB0aW9uPVx1ZDUwNFx1Yjg1Y1x1YzgxZFx1ZDJiOFx1YzVkMFx1YzExYyBcdWMwYzggU1RFTSBcdWMyZGNcdWIwOThcdWI5YWNcdWM2MjRcdWI5N2MgXHViOWNjXHViNGU0XHVhZTMwLgorTlNjZW5hcmlvV2l6LkRDX0RFU0NSSVBUSU9OPVx1YzJkY1x1YjA5OFx1YjlhY1x1YzYyNCAiezB9IgorTlNjZW5hcmlvV2l6LnNvbHZlcj1cdWQ1NzRcdWFjYjBcdWMwYWMgXHVjMTIwXHVkMGRkCisKKyMgTW9kZWwgU2VxdWVuY2VyCitOU2VxdWVuY2VyV2l6LmN5Y2xlVGltZT1cdWM4ZmNcdWFlMzAgXHVhZTMwXHVhYzA0CitOU2VxdWVuY2VyV2l6Lm1pbGxpc2Vjb25kcz1cdWJjMDBcdWI5YWNcdWNkMDgKK05TZXF1ZW5jZXJXaXoubWlsbGlzZWNvbmQ9XHViYzAwXHViOWFjXHVjZDA4CitOU2VxdWVuY2VyV2l6LnNlY29uZHM9XHVjZDA4CitOU2VxdWVuY2VyV2l6LnNlY29uZD1cdWNkMDgKK05TZXF1ZW5jZXJXaXoubWludXRlcz1cdWJkODQKK05TZXF1ZW5jZXJXaXoubWludXRlPVx1YmQ4NAorTlNlcXVlbmNlcldpei5ob3Vycz1cdWMyZGNcdWFjMDQKK05TZXF1ZW5jZXJXaXouaG91cj1cdWMyZGNcdWFjMDQKK05TZXF1ZW5jZXJXaXouZGF5cz1cdWM3N2MKK05TZXF1ZW5jZXJXaXouZGF5PVx1Yzc3YworCisjIE1vZGVsIFNlcXVlbnRpYWwgU2VxdWVuY2VyCitOU2VxU2VxdWVuY2VyV2l6LmN5Y2xlVGltZUVycj1cdWMwYWNcdWM3NzRcdWQwNzQgXHVkMGMwXHVjNzg0XHVjNzQwIDEgXHVjNzc0XHVjMGMxXHVjNzc0XHVjNWI0XHVjNTdjXHVkNTY4LgorTlNlcVNlcXVlbmNlcldpei5jeWNsZVRpbWVGb3JtYXRFcnI9XHVjMGFjXHVjNzc0XHVkMDc0IFx1YzJkY1x1YWMwNFx1Yzc0MCBcdWM3MjBcdWQ2YThcdWQ1NWMgXHVjODE1XHVjMjE4XHVhYzAwIFx1YzU0NFx1YjJkOC4KK05TZXFTZXF1ZW5jZXJXaXoud2l6YXJkX3RpdGxlPVx1YzBjOFx1Yjg1Y1x1YzZiNCBcdWMxMjBcdWQ2MTUgXHVjMmRjXHVkMDAwXHVjMTFjCitOU2VxU2VxdWVuY2VyV2l6LnBhZ2VfdGl0bGU9XHVjMjFjXHVjYzI4IFx1YzJkY1x1ZDAwMFx1YzExYworTlNlcVNlcXVlbmNlcldpei5wYWdlX2Rlc2NyaXB0aW9uPVx1ZDUwNFx1Yjg1Y1x1YzgxZFx1ZDJiOFx1YzVkMFx1YzExYyBcdWMwYzggU1RFTSBcdWMxMjBcdWQ2MTUgXHVjMmRjXHVkMDAwXHVjMTFjXHViOTdjIFx1YjljY1x1YjRlNFx1YWUzMC4KK05TZXFTZXF1ZW5jZXJXaXouc3RhcnRUaW1lPVx1YzJkY1x1Yzc5MSBcdWIwYTBcdWM5ZGMKK05TZXFTZXF1ZW5jZXJXaXouZW5kVGltZT1cdWM4ODVcdWI4Y2NcdWM3N2MgXHVjOWMwXHVjODE1CitOU2VxU2VxdWVuY2VyV2l6LnN0YXJ0RGF0ZUVycj1cdWMyZGNcdWM3OTFcdWM3N2MgXHVkNjE1XHVjMmRkXHVjNzc0IFx1YzYyY1x1YmMxNFx1Yjk3NFx1YzljMCBcdWM1NGFcdWM3NGM6IFlZWVktTU0tREQKK05TZXFTZXF1ZW5jZXJXaXoubWlzc2luZ1N0YXJ0RGF0ZUVycj1cdWMyZGNcdWM3OTEgXHViMGEwXHVjOWRjXHVhYzAwIFx1YzVjNlx1Yzc0Yy4KK05TZXFTZXF1ZW5jZXJXaXouZW5kRGF0ZUVycj1cdWM4ODVcdWI4Y2MgXHViMGEwXHVjOWRjIFx1ZDYxNVx1YzJkZFx1Yzc3NCBcdWM2MmNcdWJjMTRcdWI5NzRcdWM5YzAgXHVjNTRhXHVjNzRjIDogWVlZWSAtIE1NIC0gREQKK05TZXFTZXF1ZW5jZXJXaXouZW5kQmVmb3JlRXJyPVx1Yzg4NVx1YjhjY1x1Yzc3Y1x1Yzc0MCBcdWMyZGNcdWM3OTEgXHViMGEwXHVjOWRjIFx1Yzc3NFx1YzgwNFx1YzVkMCBcdWJjMWNcdWMwZGRcdWQ1NjguCitOU2VxU2VxdWVuY2VyV2l6LkRDX1RJVExFMT1cdWM1ZjBcdWMxOGQgXHVjMmRjXHVkMDAwXHVjMTFjICJ7MH0iCitOU2VxU2VxdWVuY2VyV2l6LkRDX1RJVExFMj1cdWM1ZjBcdWMxOGQgXHVjMmRjXHVkMDAwXHVjMTFjICJ7MH0iCitOU2VxU2VxdWVuY2VyV2l6LkRDX0RFU0NSSVBUSU9OMT1cdWM1ZjBcdWMxOGQgXHVjMmRjXHVkMDAwXHVjMTFjICJ7MH0iXHVjNzQwIHsxfVx1YzVkMFx1YzExYyB7Mn1cdWFlNGNcdWM5YzAgXHVjMmRjXHVjNzkxLCBcdWMwYWNcdWM3NzRcdWQwNzQgXHVhZTMwXHVhYzA0XHVjNzQwIHszfS4KK05TZXFTZXF1ZW5jZXJXaXouRENfREVTQ1JJUFRJT04yPVx1YzVmMFx1YzE4ZCBcdWMyZGNcdWQwMDBcdWMxMWMgInswfSJcdWM3NDAgezF9XHVjNWQwXHVjMTFjIFx1YzJkY1x1Yzc5MSwgXHViMDVkXHVjNzc0IFx1YzVjNlx1Yzc0Yy4gXHVjMGFjXHVjNzc0XHVkMDc0IFx1YWUzMFx1YWMwNFx1Yzc0MCB7Mn0uCisKKyMgTW9kZWwgUmVhbC1UaW1lIFNlcXVlbmNlcgorTlJUU2VxdWVuY2VyV2l6LndpemFyZF90aXRsZT1cdWMwYzhcdWI4NWNcdWM2YjQgXHVjMmU0XHVjMmRjXHVhYzA0IFx1YzJkY1x1ZDAwMFx1YzExYworTlNSVFNlcXVlbmNlcldpei5EQ19USVRMRT1cdWMyZTRcdWMyZGNcdWFjMDQgXHVjMmRjXHVkMDAwXHVjMTFjIChcdWMwYWNcdWM3NzRcdWQwNzQgXHVhZTMwXHVhYzA0IDogezB9KS4KK05TUlRTZXF1ZW5jZXJXaXouRENfREVTQ1JJUFRJT04xPVx1YzJlNFx1YzJkY1x1YWMwNCBcdWMyZGNcdWQwMDBcdWMxMWNcdWIyOTQgezB9XHVjNzU4IFx1YzIxY1x1ZDY1OCBcdWFlMzBcdWFjMDRcdWM3NDQgXHVhYzAwXHVjOWMwXHVhY2UwLCBcdWQ2MDRcdWM3YWMgXHViMGEwXHVjOWRjIC8gXHVjMmRjXHVhYzA0XHViZDgwXHVkMTMwIFx1YzJkY1x1Yzc5MS4KKworIyBNb2RlbCBFeHBlcmltZW50CitORXhwZXJpbWVudFdpei53aXphcmRfdGl0bGU9XHVjMGM4IFx1YzJlNFx1ZDVkOAorTkV4cGVyaW1lbnRXaXoucGFnZV90aXRsZT1cdWMyZTRcdWQ1ZDgKK05FeHBlcmltZW50V2l6LnBhZ2VfZGVzY3JpcHRpb249XHVkNTA0XHViODVjXHVjODFkXHVkMmI4XHVjNWQwXHVjMTFjIFx1YzBjOCBTVEVNIFx1YzJlNFx1ZDVkOCBcdWI5Y2NcdWI0ZTRcdWFlMzAKK05FeHBlcmltZW50V2l6LkRDX0RFU0NSSVBUSU9OPVx1YzJlNFx1ZDVkOCAiezB9IgorCisjIE1vZGlmaWVyCitOTW9kaWZpZXJXaXoud2l6YXJkX3RpdGxlPVx1YjI3NCBcdWMyMThcdWM4MTUKK05Nb2RpZmllcldpei5wYWdlX3RpdGxlPVx1YzIxOFx1YzgxNVx1Yzc5MAorTk1vZGlmaWVyV2l6LnBhZ2VfZGVzY3JpcHRpb249XHVkNTA0XHViODVjXHVjODFkXHVkMmI4XHVjNWQwXHVjMTFjIFx1YzBjOCBTVEVNIFx1YzIxOFx1YzgxNVx1Yzc5MCBcdWI5Y2NcdWI0ZTRcdWFlMzAKK05Nb2RpZmllcldpei5EQ19ERVNDUklQVElPTj1cdWMyMThcdWM4MTVcdWM3OTAgInswfSIKKworIyBUcmlnZ2VyCitOVHJpZ2dlcldpei53aXphcmRfdGl0bGU9XHVjMGM4IFx1ZDJiOFx1YjlhY1x1YWM3MAorTlRyaWdnZXJXaXoucGFnZV90aXRsZT1cdWQyYjhcdWI5YWNcdWFjNzAKK05UcmlnZ2VyV2l6LnBhZ2VfZGVzY3JpcHRpb249XHVkNTA0XHViODVjXHVjODFkXHVkMmI4XHVjNWQwXHVjMTFjIFx1YzBjOCBTVEVNIFx1ZDJiOFx1YjlhY1x1YWM3MCBcdWI5Y2NcdWI0ZTRcdWFlMzAKK05UcmlnZ2VyV2l6LkRDX0RFU0NSSVBUSU9OPVx1ZDJiOFx1YjlhY1x1YWM3MCAiezB9IgorCisjIFByZWRpY2F0ZQorTlByZWRpY2F0ZVdpei53aXphcmRfdGl0bGU9XHVjMGM4XHViODVjXHVjNmI0IFx1YzIyMFx1YzViNAorTlByZWRpY2F0ZVdpei5wYWdlX3RpdGxlPVx1YzIyMFx1YzViNAorTlByZWRpY2F0ZVdpei5wYWdlX2Rlc2NyaXB0aW9uPVx1ZDUwNFx1Yjg1Y1x1YzgxZFx1ZDJiOFx1YzVkMFx1YzExYyBcdWMwYzggU1RFTSBcdWMyMjBcdWM1YjQgXHViOWNjXHViNGU0XHVhZTMwCitOUHJlZGljYXRlV2l6LkRDX0RFU0NSSVBUSU9OPVx1YzIyMFx1YzViNCAiezB9IgorCisjIE1vZGlmaWVycworUmFuZ2UudHlwZT1cdWJjOTRcdWM3MDQKK1NlcXVlbmNlLnR5cGU9XHVjMjFjXHVjMTFjCitTaW5nbGUudHlwZT1cdWIyZThcdWM3N2MKKworCisjIE1hdHJpeCBFZGl0b3IKK01hdHJpeC5pbnZhbGlkLnZhbHVlPVx1Yzc5OFx1YmFiYlx1YjQxYyBcdWFjMTIgezB9CitNYXRyaXguZGlhbG9nLm9rYXk9T2theQorTWF0cml4LmRpYWxvZy5jYW5jZWw9XHVjZGU4XHVjMThjCitNYXRyaXguZGlhbG9nLnBsdXM9KworTWF0cml4LmRpYWxvZy5taW51cz0tCisKKyNMb2NhdGlvbiBwaWNrZXIKK05Mb2NXaXpJU09LPUlTTyBLZXkKK05Mb2NXaXpDTlRSWT1cdWFkNmRcdWFjMDAKK05Mb2NXaXpMMT0xIFx1YjJlOFx1YWNjNAorTkxvY1dpekwyPTIgXHViMmU4XHVhY2M0CitOTG9jV2l6TDM9MyBcdWIyZThcdWFjYzQKK05Mb2NXaXpPaz1Pa2F5CitOTG9jV2l6Q2FuY2VsPVx1Y2RlOFx1YzE4YworTkxvY1BpY2tlcldpei5nbG9iYWw9XHVjODA0XHVjY2I0XHVjODAxIFx1YzEyMFx1ZDBkZAorTkxvY1BpY2tlcldpei5pbnByb2plY3Q9XHVkNTA0XHViODVjXHVjODFkXHVkMmI4IFx1YzEyMFx1ZDBkZAorTkxvY1BpY2tlcldpei5nZXR0aW5nTG9jYXRpb25zPVx1ZDYwNFx1YzdhYyBcdWQ1MDRcdWI4NWNcdWM4MWRcdWQyYjhcdWM1ZDAgXHViMzAwXHVkNTVjIFx1YzcwNFx1Y2U1OFx1Yzc1OCBcdWJhYTlcdWI4NWRcdWM3NDQgXHVhYzgwXHVjMGM5IFx1YzkxMSAuLi4KKworI1JlbmFtZS9jb3B5IGRpYWxvZworUmVuYW1lLmRpYWxvZy5va2F5PU9rYXkKK1JlbmFtZS5kaWFsb2cuY2FuY2VsPVx1Y2RlOFx1YzE4YworcmVuYW1lPVx1ZDMwY1x1Yzc3YyBcdWM3NzRcdWI5ODQgXHViYzE0XHVhZmI4XHVhZTMwIAorY29weT1cdWJjZjVcdWMwYWMgXHVkMzBjXHVjNzdjCisKKyMgR3JhcGggR2VuZXJhdG9ycworR0dEQy4wPVx1Y2Q5Y1x1Y2M5OAorR0dEQy4yPVx1ZDA3NFx1Yjc5OFx1YzJhNAorR0dEQy4zPVx1YWRmOFx1Yjc5OFx1ZDUwNCBcdWMwZGRcdWMxMzFcdWFlMzAgXHVjMGFjXHViODQwIFx1YzBkZFx1YzEzMSBcdWM5MTEgXHViYjM4XHVjODFjIFx1YmMxY1x1YzBkZAorWUVTPVllcworTk89Tm8KK05HRldpei5EQ19ERVNDUklQVElPTj1cdWFkZjhcdWI3OThcdWQ1MDQKKworIyBMYXR0aWNlIGdyYXBoIGdlbmVyYXRvcgoreFNpemU9WCBcdWQwNmNcdWFlMzAKK3lTaXplPVkgXHVkMDZjXHVhZTMwCit4U2l6ZVVOSVQ9XHVhZGY4XHViOWFjXHViNGRjCit5U2l6ZVVOSVQ9XHVhZGY4XHViOWFjXHViNGRjCit4U2l6ZVRUPVggXHVjZDk1IFx1YWNhOVx1Yzc5MFx1Yzc1OCBcdWFjMWNcdWMyMTgKK3lTaXplVFQ9WSBcdWNkOTUgXHVhY2E5XHVjNzkwXHVjNzU4IFx1YWMxY1x1YzIxOAordXNlTmVhcmVzdE5laWdoYm9ycz1cdWFjMDBcdWFlNGNcdWM2YjQgXHVjNzc0XHVjNmMzCit1c2VOZWFyZXN0TmVpZ2hib3JzVU5JVD0KK3VzZU5lYXJlc3ROZWlnaGJvcnNUVD1cdWFjMDBcdWM3YTUgXHVhYzAwXHVhZTRjXHVjNmI0IFx1Yzc3NFx1YzZjM1x1Yzc1OCBcdWFjMDBcdWM3YTVcdWM3OTBcdWI5YWNcdWM2NDAgXHVhZGY4XHViOWFjXHViNGRjXHVjNWQwIFx1YzVmMFx1YWNiMAordXNlTmV4dE5lYXJlc3ROZWlnaGJvcnM9XHViMmU0XHVjNzRjXHVjNzNjXHViODVjIFx1YWMwMFx1YWU0Y1x1YzZiNCBcdWM3NzRcdWM2YzMKK3VzZU5leHROZWFyZXN0TmVpZ2hib3JzVU5JVD0KK3VzZU5leHROZWFyZXN0TmVpZ2hib3JzVFQ9XHVhYzAwXHVjN2E1IFx1YWMwMFx1YWU0Y1x1YzZiNCBcdWM3NzRcdWM2YzMgXHViMmU0XHVjNzRjXHVjNzNjXHViODVjIFx1YWMwMFx1YWU0Y1x1YzZiNCBcdWFjMDBcdWM3YTVcdWM3OTBcdWI5YWNcdWI5N2MgXHVjMGFjXHVjNmE5XHVkNTU4XHVjNWVjIFx1YWRmOFx1YjlhY1x1YjRkY1x1Yjk3YyBcdWM1ZjBcdWFjYjAKK3BlcmlvZGljQm91bmRhcmllcz1cdWMyZGNcdWFjMDQgXHViMmU4XHVjNzA0IFx1YWNiZFx1YWNjNAorcGVyaW9kaWNCb3VuZGFyaWVzVU5JVD0KK3BlcmlvZGljQm91bmRhcmllc1RUPVx1YzgxNVx1YWUzMFx1YzgwMSBcdWFjYmRcdWFjYzRcdWI5N2MgXHVjMGFjXHVjNmE5CisKKyMgRm9yIGdlbmVyaWMgcHJvcGVydHkgZWRpdG9yCitmaWxlQ2hvb3NlckJ1dHRvblRleHQ9XHVkMzBjXHVjNzdjIFx1YzEyMFx1ZDBkZCAuLi4KK2RpckNob29zZXJCdXR0b25UZXh0PVx1YjUxNFx1YjgwOVx1ZDFhMFx1YjlhYyBcdWMxMjBcdWQwZGQgLi4uCitmaWxlQ2hvb3NlckJ1dHRvblRvb2x0aXBUZXh0PVx1ZDMwY1x1Yzc3Y1x1Yzc0MCBcdWQ1NWMgXHVkMmI5XHVjODE1IFx1YjE3OFx1YjRkY1x1YzVkMCBcdWIzMDBcdWQ1NzQgXHViMzcwXHVjNzc0XHVkMTMwIFx1Yjg1Y1x1YjUyOVx1YzVkMCBcdWMwYWNcdWM2YTkKK2RpckNob29zZXJCdXR0b25Ub29sdGlwVGV4dD1cdWI1MTRcdWI4MDlcdWQxYTBcdWI5YWNcdWIyOTQgXHVjNWVjXHViN2VjIFx1YWMxY1x1Yzc1OCBcdWQzMGNcdWM3N2MgXHViODVjXHViNTI5XHVjNWQwIFx1YzBhY1x1YzZhOSAoXHVjNzdjXHViYzE4XHVjODAxXHVjNzNjXHViODVjIFx1ZDU1OFx1YjA5OCBcdWM3NzRcdWMwYzFcdWM3NTggXHViMTc4XHViNGRjXHVhYzAwIFx1YzBhY1x1YzZhOVx1YjQyOCkKK2ZpbGVDaG9vc2VyRGlhbG9nVGl0bGU9Q1NWIFx1ZDMwY1x1Yzc3YyBcdWMxMjBcdWQwZGQKK2RpckNob29zZXJEaWFsb2dUaXRsZT1cdWI1MTRcdWI4MDlcdWQxYTBcdWI5YWMgXHVjMTIwXHVkMGRkCitOUGlja0xvYz1cdWMxMjBcdWQwZGQKK05QaWNrTG9jVGl0bGU9XHVjNzA0XHVjZTU4XHViOTdjIFx1YzEyMFx1ZDBkZFx1ZDU1OFx1YzJlZFx1YzJkY1x1YzYyNAorCisjRG91YmxlIGFuZCBzdHJpbmcgdmFsdWVzCitpZGVudGlmaWVyPVx1YzJkZFx1YmNjNFx1Yzc5MAoraWRlbnRpZmllclVOSVQ9Cit2YWx1ZT1cdWFjMTIKK3ZhbHVlVU5JVD0KKworI1BhcmFtZXRlciBwaWNrZXIKK1BQLklERU5UUz1cdWQ1MDRcdWI4NWNcdWM4MWRcdWQyYjhcdWM1ZDAgXHVjNzg4XHViMjk0IFx1YWMxY1x1Y2NiNAorUFAuUFJPUD1cdWFjMWNcdWNjYjQgXHVjMThkXHVjMTMxCisKKyNJREVOVElGSUFCTEUgcGlja2VyCitJUC5PQkpFQ1RTPVx1ZDUwNFx1Yjg1Y1x1YzgxZFx1ZDJiOFx1YzVkMCBcdWM3ODhcdWIyOTQgXHVhYzFjXHVjY2I0CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvd2l6YXJkcy9tZXNzYWdlc196aC5wcm9wZXJ0aWVzIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3dpemFyZHMvbWVzc2FnZXNfemgucHJvcGVydGllcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mOTU0ZDFhCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3dpemFyZHMvbWVzc2FnZXNfemgucHJvcGVydGllcwpAQCAtMCwwICsxLDI3MiBAQAorIyBXaXphcmRNZXNzYWdlcy5wcm9wZXJ0aWVzCisjCisjLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyMgKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisjICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworIyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorIyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisjICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyMgKgorIyAqIENvbnRyaWJ1dG9yczoKKyMgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisjICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyMgTmV3IFByb2plY3QgV2l6YXJkCitOU1RFTVByb1dpei5wYWdlX3RpdGxlPVx1NjMwN1x1NWI5YVx1NjViMFx1NzY4NFNURU1cdTk4NzlcdTc2ZWVcdTU0MGRcdTc5ZjAKK05TVEVNUHJvV2l6LnRpdGxlPVx1NTIxYlx1NWVmYVx1NGUwMFx1NGUyYVNURU1cdTk4NzlcdTc2ZWUKK05TVEVNUHJvV2l6LnBhZ2VfZGVzY3JpcHRpb249XHU1NzI4XHU1ZGU1XHU0ZjVjXHU1MzNhXHU1N2RmXHU2MjE2XHU4MDA1XHU0ZTAwXHU0ZTJhXHU1OTE2XHU5MGU4XHU1NzMwXHU1NzQwXHU0ZTJkXHU1MjFiXHU1ZWZhXHU0ZTAwXHU0ZTJhXHU2NWIwXHU3Njg0U1RFTVx1OTg3OVx1NzZlZQorTlNURU1Qcm9XaXouY3JlYXRpbmdfZGlyZWN0b3JpZXM9XHU1MjFiXHU1ZWZhXHU5ODc5XHU3NmVlXHU3NmVlXHU1ZjU1CitOU1RFTVByb1dpei5jcmVhdGluZ19wcm9qZWN0PVx1NTIxYlx1NWVmYVx1NjViMFx1NzY4NFNURU1cdTk4NzlcdTc2ZWUKKworTlNURU1Qcm9XaXouZ3JhcGhfZm9sZGVyPVx1NTZmZQorTlNURU1Qcm9XaXoubW9kZWxfZm9sZGVyPVx1NmEyMVx1NTc4YgorTlNURU1Qcm9XaXouc2NlbmFyaW9fZm9sZGVyPVx1NjViOVx1Njg0OAorTlNURU1Qcm9XaXouZGVjb3JhdG9yX2ZvbGRlcj1cdTg4YzVcdTk5NzBcdTU2NjgKK05TVEVNUHJvV2l6LkNyZWF0ZV9Qcm9ibGVtPVx1OTVlZVx1OTg5OFx1NTIxYlx1NWVmYVx1OTg3OVx1NzZlZQorCisjIE5ldyBJZGVudGlmaWVyIFdpemFyZCAoc3VwZXIgY2xhc3MgdG8gR3JhcGgvTW9kZWwvU2NlbmFyaW8gd2l6YXJkcworTklkV2l6LmNyZWF0aW5nPVx1NTIxYlx1NWVmYQorTklkV2l6LmJyb3dzZT1cdTZkNGZcdTg5YzgKK05JZFdpei5wcm9qZWN0PVx1OTg3OVx1NzZlZQorTklkV2l6Lm5hbWU9XHU1NDBkXHU3OWYwCitOSWRXaXoubm9Qcm9qRXJyPVx1NmNhMVx1NjcwOVx1OTg3OVx1NzZlZVx1NWI1OFx1NTcyOAorTklkV2l6Lm5hbWVNaXNzaW5nRXJyPVx1NTQwZFx1NGUyMlx1NTkzMQorTklkV2l6Lm5hbWVFcnI9XHU2NWUwXHU2NTQ4XHU3Njg0XHU1NDBkXHU3OWYwCitOSWRXaXouc2F2ZUVycj1cdTk1ZWVcdTk4OThcdTRmZGRcdTViNTgKKworIyBEdWJsaW4gQ29yZSBQYWdlIENvbnN0YW50cworTkR1YmxpbkNvcmUucGFnZV90aXRsZT1cdTkwZmRcdTY3Y2ZcdTY3OTdcdTY4MzhcdTVmYzMKK05EdWJsaW5Db3JlLnBhZ2VfZGVzY3JpcHRpb249XHU5MGZkXHU2N2NmXHU2Nzk3XHU2ODM4XHU1ZmMzXHU1MTQzXHU2NTcwXHU2MzZlXHU1MjFkXHU1OWNiXHU1MzE2XHUzMDAyCisKK05EdWJsaW5Db3JlLnRpdGxlPVx1NjgwN1x1OTg5OAorTkR1YmxpbkNvcmUudGl0bGVEZXNjPVx1NGUwMFx1NGUyYVx1N2VkOVx1OGQ0NFx1NmU5MFx1NWI5YVx1NGU0OVx1NzY4NFx1NTQwZFx1NzlmMFx1ZmYwY1x1OTAxYVx1NWUzOFx1NjYyZlx1OGZkOVx1NGUyYVx1OGQ0NFx1NmU5MFx1NzY4NFx1NmI2M1x1NWYwZlx1NTQwZFx1NzlmMAorTkR1YmxpbkNvcmUuZGVzYz1cdThiZjRcdTY2MGUKK05EdWJsaW5Db3JlLmRlc2NEZXNjPVx1NGUwMFx1NGUyYVx1NjYyZlx1OGQ0NFx1NmU5MFx1NTE4NVx1NWJiOVx1NzY4NFx1NjNjZlx1OGZmMFx1MzAwMlx1OTAxYVx1NWUzOFx1NGUzYVx1NGUwMFx1NGUyYVx1NWY4OFx1NzdlZFx1NzY4NFx1NjQ1OFx1ODk4MVx1MzAwMgorTkR1YmxpbkNvcmUuY3JlYXRvcj1cdTUyMWJcdTkwMjBcdTgwMDUKK05EdWJsaW5Db3JlLmNyZWF0b3JEZXNjPVx1NGUwMFx1NGUyYVx1NGUzYlx1ODk4MVx1OGQxZlx1OGQyM1x1OGQ0NFx1NmU5MFx1NTE4NVx1NWJiOVx1NzY4NFx1NWI5ZVx1NGY1M1x1MzAwMlx1OTAxYVx1NWUzOFx1NGUwMFx1NGUyYVx1NGViYVx1NjIxNlx1N2VjNFx1N2VjN1x1NzY4NFx1NTQwZFx1NWI1N1x1MzAwMgorTkR1YmxpbkNvcmUuZGF0ZT1cdTY1ZTVcdTY3MWYKK05EdWJsaW5Db3JlLmRhdGVEZXNjPVx1NGUwMFx1NGUyYVx1NGUwZVx1OGQ0NFx1NmU5MFx1NzY4NFx1NzUxZlx1NTQ3ZFx1NTQ2OFx1NjcxZlx1NGU4Ylx1NGVmNlx1NTE3M1x1ODA1NFx1NzY4NFx1NjVlNVx1NjcxZlx1MzAwMlx1OTAxYVx1NWUzOFlZWVkgLSBNTSAtIEREXHUzMDAyXHU0ZjhiXHU1OTgyMjAwNy0wMS0xOAorTkR1YmxpbkNvcmUudmFsaWQ9XHU2NzA5XHU2NTQ4CitORHVibGluQ29yZS52YWxpZERlc2M9RGF0ZSAob2Z0ZW4gYSByYW5nZSkgb2YgdmFsaWRpdHkgb2YgYSByZXNvdXJjZS4gZS5nLiBzdGFydD0yMDA2LTAzLTI5OyBlbmQ9MjAwNi0wMy0zMDsgb3Igc2ltcGx5IHN0YXJ0PTIwMDYtMDMtMjk7IGlmIHRoZXJlIGlzIG5vIGVuZCB0byB0aGUgdmFsaWRpdHkuCitORHVibGluQ29yZS5jcmVhdGVkPVx1NTIxYlx1NWVmYQorTkR1YmxpbkNvcmUuY3JlYXRlZERlc2M9XHU4ZDQ0XHU2ZTkwXHU3Njg0XHU1MjFiXHU1ZWZhXHU2NWU1XHU2NzFmXHUzMDAyXHU5MDFhXHU1ZTM4WVlZWSAtIE1NIC0gRERcdTMwMDJcdTRmOGJcdTU5ODIyMDA3LTAxLTE4CitORHVibGluQ29yZS5zb3VyY2U9XHU2NzY1XHU2ZTkwCitORHVibGluQ29yZS5zb3VyY2VEZXNjPVx1NGUwMFx1NGUyYVx1NWJmOVx1NGU4ZVx1NWY1M1x1NTI0ZFx1OGQ0NFx1NmU5MFx1NzY4NFx1Njc2NVx1NmU5MFx1NzY4NFx1NWYxNVx1NzUyOFx1MzAwMlx1NjYyZlx1OGQ0NFx1NmU5MFx1NTE4NVx1NWJiOVx1NzY4NFx1NTM5Zlx1NTljYlx1Njc2NVx1NmU5MFx1MzAwMlx1NGY4Ylx1NTk4Mlx1NGUwMFx1NGUyYVVSTFx1MzAwMgorTkR1YmxpbkNvcmUucHVibGlzaGVyPVx1NTNkMVx1NWUwMworTkR1YmxpbkNvcmUucHVibGlzaGVyRGVzYz1cdTRlMDBcdTRlMmFcdThkMWZcdThkMjNcdThkNDRcdTZlOTBcdTUzZWZcdTc1MjhcdTc2ODRcdTViOWVcdTRmNTNcdTMwMDJcdTkwMWFcdTVlMzhcdTRlM2FcdTRlMDBcdTRlMmFcdTRlYmFcdWZmMGNcdTdlYzRcdTdlYzdcdTYyMTZcdTY3MGRcdTUyYTFcdTc2ODRcdTU0MGRcdTc5ZjBcdTMwMDIKK05EdWJsaW5Db3JlLmNvdmVyYWdlPVx1ODk4Nlx1NzZkNgorTkR1YmxpbkNvcmUuY292ZXJhZ2VEZXNjPVx1NzNiMFx1NjcwOVx1OGQ0NFx1NmU5MFx1NTE4NVx1NWJiOVx1NzY4NFx1NWVmNlx1NGYzOFx1NjIxNlx1ODAwNVx1ODMwM1x1NTZmNFx1MzAwMlx1NTNlZlx1NGVlNVx1NTMwNVx1NTQyYlx1N2E3YVx1OTVmNFx1NGY0ZFx1N2Y2ZVx1ZmYwY1x1NjVmNlx1OTVmNFx1NTQ2OFx1NjcxZlx1ZmYwOFx1NjVlNVx1NjcxZlx1NjIxNlx1ODAwNVx1NjVlNVx1NjcxZlx1ODMwM1x1NTZmNFx1ZmYwOVx1ZmYwY1x1N2JhMVx1OGY5Nlx1Njc0M1x1N2I0OQorTkR1YmxpbkNvcmUuY29udHJpYnV0b3I9XHU4ZDIxXHU3MzJlXHU4MDA1CitORHVibGluQ29yZS5jb250cmlidXRvckRlc2M9XHU0ZTAwXHU0ZTJhXHU4ZDFmXHU4ZDIzXHU2M2QwXHU0ZjliXHU4ZDQ0XHU2ZTkwXHU3Njg0XHU1YjllXHU0ZjUzXHUzMDAyXHU5MDFhXHU1ZTM4XHU0ZTNhXHU0ZTAwXHU0ZTJhXHU0ZWJhXHVmZjBjXHU3ZWM0XHU3ZWM3XHU2MjE2XHU0ZTAwXHU5ODc5XHU2NzBkXHU1MmExXHU3Njg0XHU1NDBkXHU3OWYwXHUzMDAyCitORHVibGluQ29yZS5yZWxhdGlvbj1cdTUxNzNcdTdjZmIKK05EdWJsaW5Db3JlLnJlbGF0aW9uRGVzYz1cdTRlMDBcdTRlMmFcdTc2ZjhcdTUxNzNcdThkNDRcdTZlOTBcdTc2ODRcdTUzYzJcdTgwMDNcdTY1ODdcdTczMmVcdWZmMGNcdTRmOGJcdTU5ODJcdTRlMDBcdTRlMmFVUkwKK05EdWJsaW5Db3JlLnJpZ2h0cz1cdTY3NDNcdTUyMjkKK05EdWJsaW5Db3JlLnJpZ2h0c0Rlc2M9XHU1YmY5XHU2NzA5XHU1MTczXHU0ZmUxXHU2MDZmXHU1NDhjXHU4ZDQ0XHU2ZTkwXHU2MmU1XHU2NzA5XHU3Njg0XHU2NzQzXHU1MjI5XHUzMDAyXHU5MDFhXHU1ZTM4XHU2MGM1XHU1MWI1XHU0ZTBiXHVmZjBjXHU2NzQzXHU5NjUwXHU3YmExXHU3NDA2XHU1OGYwXHU2NjBlXHUzMDAyXHU0ZjhiXHU1OTgyMjAwNlx1NWU3NFx1NzI0OFx1Njc0M1x1NzY4NEZvb0JhcgorTkR1YmxpbkNvcmUuc3ViamVjdD1cdTRlM2JcdTk4OTgKK05EdWJsaW5Db3JlLnN1YmplY3REZXNjPVx1OGJlNVx1OGQ0NFx1NmU5MFx1NTE4NVx1NWJiOVx1NzY4NFx1NGUzYlx1OTg5OFx1MzAwMlx1OTAxYVx1NWUzOFx1NTE3M1x1OTUyZVx1NWI1N1x1NjIxNlx1NTIwNlx1N2M3Ylx1NGVlM1x1NzgwMVx1MzAwMgorTkR1YmxpbkNvcmUubGFuZ3VhZ2U9XHU4YmVkXHU4YTAwCitORHVibGluQ29yZS5sYW5ndWFnZURlc2M9XHU0ZTAwXHU3OWNkXHU2M2NmXHU4ZmYwXHU4ZDQ0XHU2ZTkwXHU1MTg1XHU1YmI5XHU3Njg0XHU4YmVkXHU4YTAwXHVmZjBjXHU0ZjhiXHU1OTgyRU4tR0IKK05EdWJsaW5Db3JlLmNpdGF0aW9uPVx1NWYxNVx1NzUyOAorTkR1YmxpbkNvcmUuY2l0YXRpb25EZXNjPVx1NjI0MFx1NzUyOFx1OGQ0NFx1NmU5MFx1NzY4NFx1NjU4N1x1NzMyZVx1NTNjMlx1ODAwMworTkR1YmxpbkNvcmUubGljZW5zZT1cdThiYjhcdTUzZWZcdThiYzEKK05EdWJsaW5Db3JlLmxpY2Vuc0Rlc2M9XHU0ZTAwXHU0ZTJhXHU3ZWQ5XHU0ZTBlXHU0ZjdmXHU3NTI4XHU4ZDQ0XHU2ZTkwXHU2YjYzXHU1ZjBmXHU4YmI4XHU1M2VmXHU3Njg0XHU2Y2Q1XHU1ZjhiXHU2NTg3XHU0ZWY2CitORHVibGluQ29yZS5yZXF1aXJlZD1cdTVmYzVcdTk4N2IKK05EdWJsaW5Db3JlLnJlcXVpcmVkRGVzYz1cdTYyNDBcdTYzY2ZcdThmZjBcdTc2ODRcdThkNDRcdTZlOTBcdTk3MDBcdTg5ODFcdTg4YWJcdTVmMTVcdTc1MjhcdTc2ODRcdThkNDRcdTZlOTBcdTY3NjVcdTY1MmZcdTYzMDFcdTViODNcdTc2ODRcdTUyOWZcdTgwZmRcdWZmMGNcdTRlYTRcdTRlZDhcdTYyMTZcdTUxODVcdTViYjlcdTc2ODRcdThmZGVcdThkMmZcdTYwMjdcdTMwMDIKK05EdWJsaW5Db3JlLnNwYXRpYWw9XHU3YTdhXHU5NWY0CitORHVibGluQ29yZS5zcGF0aWFsRGVzYz1cdTUxNzFcdTRlYWJcdThkNDRcdTZlOTBcdTc2ODRcdTdhN2FcdTk1ZjRcdTcyNzlcdTYwMjcKK05EdWJsaW5Db3JlLmZvcm1hdD1cdTY4M2NcdTVmMGYKK05EdWJsaW5Db3JlLmZvcm1hdERlc2M9XHU0ZjhiXHU1OTgyXHVmZjBjXHU1NzMwXHU3NDAzXHU1MzRhXHU1Zjg0CitORHVibGluQ29yZS50eXBlPVx1N2M3Ylx1NTc4YgorTkR1YmxpbkNvcmUudHlwZURlc2M9XHU4ZmI5XHU3ZjE4CitORHVibGluQ29yZS5yZXF1aXJlZEZpZWxkPVx1NWZjNVx1OTg3Ylx1NTg2Ylx1NTE5OQorCitORHVibGluQ29yZS50aXRsZUVycj1cdTY4MDdcdTk4OThcdTY2MmZcdTdhN2FcdTc2ODRcdTMwMDIKK05EdWJsaW5Db3JlLmNyZWF0ZWRFcnI9XHU1MjFiXHU1ZWZhXHU2NWU1XHU2NzFmXHU2ODNjXHU1ZjBmXHU0ZTBkXHU2YjYzXHU3ODZlXHVmZjFhWVlZWSAtIE1NIC0gREQKK05EdWJsaW5Db3JlLmRhdGVFcnI9XHU2NWU1XHU2NzFmXHU2ODNjXHU1ZjBmXHU0ZTBkXHU2YjYzXHU3ODZlXHVmZjFhWVlZWSAtIE1NIC0gREQKK05EdWJsaW5Db3JlLnZhbGlkRXJyPVZhbGlkIGRhdGUgcmFuZ2Ugbm90IGZvcm1hdHRlZCBjb3JyZWN0bHk6IHN0YXJ0PVlZWVktTU0tREQ7IG9yIHN0YXJ0PVlZWVktTU0tREQ7IGVuZD1ZWVlZLU1NLUREOworCisjIER1YmxpbiBDb3JlIGRlZmF1bHQgZGF0YQorZGNfY3JlYXRvcl9zdGVtdGVhbT1TVEVNXHU1NmUyXHU5NjFmCitkY19wdWJsaXNoZXI9RWNsaXBzZVx1NTdmYVx1OTFkMVx1NGYxYQorZGNfbGljZW5zZT1FY2xpcHNlXHU1MTZjXHU1MTcxXHU4YmI4XHU1M2VmXHVmZjA4RVBMXHVmZjA5CitkY19pZGVudGllcj1cdTRlMGRcdThiYmVcdTdmNmVcdTY4MDdcdThiYzZcdWZmMDEKK2RjX3RpdGxlX21vZGVsPVx1NmEyMVx1NTc4YgorZGNfc291cmNlX21vZGVsID0gaHR0cDovL3dpa2kuZWNsaXBzZS5vcmcvQ3JlYXRpbmdfYV9TVEVNX1NjZW5hcmlvI0FkZF9tb2RlbF9jb250YWluZXJzX2Zvcl90aGVfbW9kZWxfaGllcmFyY2h5ICAgKGFuZCByZWZlcmVuY2VzIHRoZXJlLWluKQorZGNfZGVzY19tb2RlbD1cdTZhMjFcdTU3OGJcdTY2MmZcdTc1MzFcdTdiNDlcdTdlYTdcdTUyMDZcdTdjN2JcdTc2ODRcdTY4MDdcdTdiN2VcdWZmMGNcdTRmZWVcdTk5NzBcdTU2NjhcdWZmMGNcdTU2ZmVcdTk2YzZcdTU0OGNcdTViNTBcdTU2ZmVcdTk2YzYKKworZGNfdGl0bGVfZXhwPVx1NWI5ZVx1OWE4YworZGNfc291cmNlX2V4cD1odHRwOi8vd2lraS5lY2xpcHNlLm9yZy9CYXRjaF9Nb2RlX1x1ZmYwNTI4UnVubmluZ19FeHBlcmltZW50c1x1ZmYwNTI5XHVmZjA4XHU1NDhjXHU1M2MyXHU4MDAzXHU4ZDQ0XHU2NTk5XHU0ZTJkXHVmZjA5CitkY19kZXNjX2V4cD1cdThmZDlcdTRlMmFcdTViOWVcdTlhOGNcdTc2ODRcdTc2ZWVcdTc2ODRcdTY2MmZcdThmZDBcdTg4NGNcdTRlMDBcdTYyNzlcdTYwYzVcdTY2NmZcdWZmMGNcdTRlMDBcdTRlMmFcdTYzYTVcdTc3NDBcdTRlMDBcdTRlMmFcdWZmMGNcdTZiY2ZcdTZiMjFcdTRmZWVcdTY1MzlcdTU3ZmFcdTY3MmNcdTZlMDVcdTk3NTlcdTc2ODRcdTRlMDBcdTRlOWJcdTVjNWVcdTYwMjcKKworZGNfdGl0bGVfbW9kPVx1NGZlZVx1NjUzOVx1NTY2OAorZGNfc291cmNlX21vZD1odHRwOi8vd2lraS5lY2xpcHNlLm9yZy9JbnZva2luZ19Nb2RpZmllcnNfVXNpbmdfVHJpZ2dlcnNfYW5kX1ByZWRpY2F0ZXNcdTMwMDIgXHVmZjA4XHU1NDhjXHU1M2MyXHU4MDAzXHU4ZDQ0XHU2NTk5XHU0ZTJkXHVmZjA5CitkY19kZXNjX21vZD1cdTU3MjhcdTRlMDBcdTRlMmFcdTViOWVcdTlhOGNcdTYyMTZcdTgxZWFcdTUyYThcdTViOWVcdTlhOGNcdTRlMmRcdTYzMDdcdTViOWFcdTg5ODFcdTRmZWVcdTY1MzlcdTc2ODRcdTVjNWVcdTYwMjcKKworZGNfdGl0bGVfcHJlZD1cdTYzY2ZcdThmZjAKK2RjX3NvdXJjZV9wcmVkPWh0dHA6Ly93aWtpLmVjbGlwc2Uub3JnL0ludm9raW5nX01vZGlmaWVyc19Vc2luZ19UcmlnZ2Vyc19hbmRfUHJlZGljYXRlc1x1MzAwMiBcdWZmMDhcdTU0OGNcdTUzYzJcdTgwMDNcdThkNDRcdTY1OTlcdTRlMmRcdWZmMDkKK2RjX2Rlc2NfcHJlZD1cdTU3MjhcdTYzMDdcdTViOWFcdTc2ODRcdTYzY2ZcdThmZjBcdTYyMTZcdTY3NjFcdTRlZjZcdTRlMGJcdWZmMGNcdTVjNWVcdTYwMjdcdTY2MmZcdTU3MjhcdTViOWVcdTlhOGNcdTRlMmRcdTYyMTZcdTgxZWFcdTUyYThcdTViOWVcdTlhOGNcdTRlMmRcdTRmZWVcdTY1MzlcdTc2ODQKKworZGNfdGl0bGVfc2Nlbj1cdTY1YjlcdTY4NDgKK2RjX3NvdXJjZV9zY2VuPWh0dHA6Ly93aWtpLmVjbGlwc2Uub3JnL0NyZWF0aW5nX2FfU1RFTV9TY2VuYXJpb1x1ZmYwOFx1NTQ4Y1x1NTNjMlx1ODAwM1x1OGQ0NFx1NjU5OVx1NGUyZFx1ZmYwOQorZGNfZGVzY19zY2VuPVx1NGUwMFx1NGUyYVx1NjViOVx1Njg0OFx1NTMwNVx1NTQyYlx1NGU4Nlx1NGUwMFx1NGUyYVx1NWI4Y1x1NjU3NFx1NzY4NFx1NmEyMVx1NTc4Ylx1NjIxNlx1ODAwNVx1NGUwMFx1NGUyYVx1NjJlNVx1NjcwOVx1NTIxZFx1NTljYlx1Njc2MVx1NGVmNlx1ZmYwOFx1NjExZlx1NjdkM1x1NTQ4Y1x1NjNhNVx1NzljZFx1ZmYwOVx1NTQ4Y1x1NjVmNlx1NWU4Zlx1NWI4OVx1NjM5Mlx1NzY4NFx1NTIwNlx1NWM0Mlx1NmEyMVx1NTc4Ylx1MzAwMgorCitkY190aXRsZV9zZXE9XHU1ZThmXHU1MjE3XHU1M2QxXHU3NTFmXHU1NjY4CitkY19zb3VyY2Vfc2VxID0gaHR0cDovL3dpa2kuZWNsaXBzZS5vcmcvQ3JlYXRpbmdfYV9TVEVNX1NjZW5hcmlvI0NyZWF0ZV9hX1NlcXVlbmNlciAgIChhbmQgcmVmZXJlbmNlcyB0aGVyZS1pbikKK2RjX2Rlc2Nfc2VxPVx1NjNhN1x1NTIzNlx1NGUwMFx1NGUyYVx1NjViOVx1Njg0OFx1NzY4NFx1NjVmNlx1OTVmNFx1NTQ4Y1x1NjMwMVx1N2VlZFx1NjcxZgorCitkY190aXRsZV90cmlnPVx1ODllNlx1NTNkMQorZGNfc291cmNlX3RyaWc9aHR0cDovL3dpa2kuZWNsaXBzZS5vcmcvSW52b2tpbmdfTW9kaWZpZXJzX1VzaW5nX1RyaWdnZXJzX2FuZF9QcmVkaWNhdGVzXHUzMDAyIFx1ZmYwOFx1NTQ4Y1x1NTNjMlx1ODAwM1x1OGQ0NFx1NjU5OVx1NGUyZFx1ZmYwOQorZGNfZGVzY190cmlnPVx1NTcyOFx1NGUwMFx1NGUyYVx1NWI5ZVx1OWE4Y1x1OTFjY1x1ZmYwY1x1NTdmYVx1NGU4ZVx1NGUwMFx1NGUyYVx1NjNjZlx1OGZmMFx1NTY2OFx1Njc2NVx1ODllNlx1NTNkMVx1NGUwMFx1NGUyYVx1NTNjMlx1NjU3MFx1NzY4NFx1NGZlZVx1NjUzOQorCisKKyMgTW9kZWwgV2l6YXJkCitOTW9kZWxXaXoud2l6YXJkX3RpdGxlPVx1NjViMFx1NWVmYVx1NmEyMVx1NTc4YgorTk1vZGVsV2l6LnBhZ2VfdGl0bGU9XHU2YTIxXHU1NzhiCitOTW9kZWxXaXoucGFnZV9kZXNjcmlwdGlvbj1cdTU3MjhcdTk4NzlcdTc2ZWVcdTRlMmRcdTUyMWJcdTVlZmFcdTRlMDBcdTRlMmFcdTY1YjBcdTc2ODRTVEVNXHU2YTIxXHU1NzhiXHUzMDAyCitOTW9kZWxXaXouRENfREVTQ1JJUFRJT049XHU2YTIxXHU1NzhiXHUyMDFjezB9XHUyMDFkCisKKyMgTW9kZWwgU2NlbmFyaW8KKworTlNjZW5hcmlvV2l6LndpemFyZF90aXRsZT1cdTY1YjBcdTVlZmFcdTY1YjlcdTY4NDgKK05TY2VuYXJpb1dpei5wYWdlX3RpdGxlPVx1NjViOVx1Njg0OAorTlNjZW5hcmlvV2l6LnBhZ2VfZGVzY3JpcHRpb249XHU1NzI4XHU5ODc5XHU3NmVlXHU0ZTJkXHU1MjFiXHU1ZWZhXHU0ZTAwXHU0ZTJhXHU2NWIwXHU3Njg0U1RFTVx1NjBjNVx1NjY2Zlx1MzAwMgorTlNjZW5hcmlvV2l6LkRDX0RFU0NSSVBUSU9OPVx1NjViOVx1Njg0OFx1MjAxY3swfVx1MjAxZAorTlNjZW5hcmlvV2l6LnNvbHZlcj1cdTkwMDlcdTYyZTlcdTRlMDBcdTRlMmFcdTZjNDJcdTg5ZTNcdTU2NjgKKworIyBNb2RlbCBTZXF1ZW5jZXIKK05TZXF1ZW5jZXJXaXouY3ljbGVUaW1lPVx1NTQ2OFx1NjcxZgorTlNlcXVlbmNlcldpei5taWxsaXNlY29uZHM9XHU2YmViXHU3OWQyCitOU2VxdWVuY2VyV2l6Lm1pbGxpc2Vjb25kPVx1NmJlYlx1NzlkMgorTlNlcXVlbmNlcldpei5zZWNvbmRzPVx1NzlkMgorTlNlcXVlbmNlcldpei5zZWNvbmQ9XHU3OWQyCitOU2VxdWVuY2VyV2l6Lm1pbnV0ZXM9XHU1MjA2XHU5NDlmCitOU2VxdWVuY2VyV2l6Lm1pbnV0ZT1cdTUyMDZcdTk0OWZcdTc2ODQKK05TZXF1ZW5jZXJXaXouaG91cnM9XHU1YzBmXHU2NWY2CitOU2VxdWVuY2VyV2l6LmhvdXI9XHU1YzBmXHU2NWY2CitOU2VxdWVuY2VyV2l6LmRheXM9XHU1OTI5CitOU2VxdWVuY2VyV2l6LmRheT1cdTU5MjkKKworIyBNb2RlbCBTZXF1ZW50aWFsIFNlcXVlbmNlcgorTlNlcVNlcXVlbmNlcldpei5jeWNsZVRpbWVFcnI9XHU1ZmFhXHU3M2FmXHU2NWY2XHU5NWY0XHU1ZmM1XHU5ODdiXHU0ZTNhMVx1NjIxNlx1NjZmNFx1NTkyN1x1MzAwMgorTlNlcVNlcXVlbmNlcldpei5jeWNsZVRpbWVGb3JtYXRFcnI9XHU1NDY4XHU2NzFmXHU2NWY2XHU5NWY0XHU2NjJmXHU0ZTBkXHU2NjJmXHU0ZTAwXHU0ZTJhXHU2NzA5XHU2NTQ4XHU3Njg0XHU2NTc0XHU2NTcwXHUzMDAyCitOU2VxU2VxdWVuY2VyV2l6LndpemFyZF90aXRsZT1cdTY1YjBcdTVlZmFcdTk4N2FcdTVlOGZcdTVlOGZcdTUyMTdcdTU2NjgKK05TZXFTZXF1ZW5jZXJXaXoucGFnZV90aXRsZT1cdTk4N2FcdTVlOGZcdTViOWFcdTVlOGZcdTU2NjgKK05TZXFTZXF1ZW5jZXJXaXoucGFnZV9kZXNjcmlwdGlvbj1cdTU3MjhcdTk4NzlcdTc2ZWVcdTRlMmRcdTUyMWJcdTVlZmFcdTRlMDBcdTRlMmFcdTY1YjBcdTc2ODRTVEVNXHU5ODdhXHU1ZThmXHU1ZThmXHU1MjE3XHU1NjY4XHUzMDAyCitOU2VxU2VxdWVuY2VyV2l6LnN0YXJ0VGltZT1cdTVmMDBcdTU5Y2JcdTY1ZTVcdTY3MWYKK05TZXFTZXF1ZW5jZXJXaXouZW5kVGltZT1cdTYzMDdcdTViOWFcdTdlZDNcdTY3NWZcdTY1ZTVcdTY3MWYKK05TZXFTZXF1ZW5jZXJXaXouc3RhcnREYXRlRXJyPVx1NWYwMFx1NTljYlx1NjVlNVx1NjcxZlx1NjgzY1x1NWYwZlx1NGUwZFx1NmI2M1x1Nzg2ZVx1ZmYxYVlZWVkgLSBNTSAtIERECitOU2VxU2VxdWVuY2VyV2l6Lm1pc3NpbmdTdGFydERhdGVFcnI9XHU1ZjAwXHU1OWNiXHU2NWU1XHU2NzFmXHU0ZTIyXHU1OTMxXHUzMDAyCitOU2VxU2VxdWVuY2VyV2l6LmVuZERhdGVFcnI9XHU3ZWQzXHU2NzVmXHU2NWU1XHU2NzFmXHU2ODNjXHU1ZjBmXHU0ZTBkXHU2YjYzXHU3ODZlXHVmZjFhWVlZWSAtIE1NIC0gREQKK05TZXFTZXF1ZW5jZXJXaXouZW5kQmVmb3JlRXJyPVx1N2VkM1x1Njc1Zlx1NjVlNVx1NjcxZlx1NTNkMVx1NzUxZlx1NTcyOFx1NWYwMFx1NTljYlx1NjVlNVx1NjcxZlx1NGU0Ylx1NTI0ZFx1MzAwMgorTlNlcVNlcXVlbmNlcldpei5EQ19USVRMRTE9XHU5ODdhXHU1ZThmXHU1YjlhXHU1ZThmXHU1NjY4XHUyMDFjezB9XHUyMDFkCitOU2VxU2VxdWVuY2VyV2l6LkRDX1RJVExFMj1cdTk4N2FcdTVlOGZcdTViOWFcdTVlOGZcdTU2NjhcdTIwMWN7MH1cdTIwMWQKK05TZXFTZXF1ZW5jZXJXaXouRENfREVTQ1JJUFRJT04xPVx1OTg3YVx1NWU4Zlx1NWI5YVx1NWU4Zlx1NTY2OFx1MjAxY3swfVx1MjAxZHsxfVx1NGVjZVx1NWYwMFx1NTljYlx1NTIzMHsyfVx1ZmYwY1x1NjcwOVx1NjcwOVx1NGUwMFx1NGUyYVx1NWZhYVx1NzNhZlx1NTQ2OFx1NjcxZlx1NGUzYXszfVx1MzAwMgorTlNlcVNlcXVlbmNlcldpei5EQ19ERVNDUklQVElPTjI9XHU5ODdhXHU1ZThmXHU1YjlhXHU1ZThmXHU1NjY4XHUyMDFjezB9XHUyMDFkezF9XHU0ZWNlXHU1ZjAwXHU1OWNiXHVmZjBjXHU2Y2ExXHU2NzA5XHU3ZWQzXHU2NzVmXHU2NWY2XHU5NWY0XHU1ZTc2XHU0ZTE0XHU2NzA5XHU0ZTAwXHU0ZTJhXHU1ZmFhXHU3M2FmXHU1NDY4XHU2NzFmXHU0ZTNhezJ9XHUzMDAyCisKKyMgTW9kZWwgUmVhbC1UaW1lIFNlcXVlbmNlcgorTlJUU2VxdWVuY2VyV2l6LndpemFyZF90aXRsZT1cdTY1YjBcdTVlZmFcdTViOWVcdTY1ZjZcdTVlOGZcdTUyMTdcdTU2NjgKK05TUlRTZXF1ZW5jZXJXaXouRENfVElUTEU9XHU1YjllXHU2NWY2XHU1ZThmXHU1MjE3XHU1NjY4XHVmZjA4XHU1ZmFhXHU3M2FmXHU1NDY4XHU2NzFmXHVmZjFhezB9XHVmZjA5XHUzMDAyCitOU1JUU2VxdWVuY2VyV2l6LkRDX0RFU0NSSVBUSU9OMT1cdTViOWVcdTY1ZjZcdTVlOGZcdTUyMTdcdTU2NjhcdTRlY2VcdTVmNTNcdTUyNGRcdTY1ZTVcdTY3MWYvXHU2NWY2XHU5NWY0XHU1ZjAwXHU1OWNiXHVmZjBjXHU2NzA5XHU1ZmFhXHU3M2FmXHU1NDY4XHU2NzFmXHU0ZTNhezB9XHUzMDAyCisKKyMgTW9kZWwgRXhwZXJpbWVudAorTkV4cGVyaW1lbnRXaXoud2l6YXJkX3RpdGxlPVx1NjViMFx1NWVmYVx1NWI5ZVx1OWE4YworTkV4cGVyaW1lbnRXaXoucGFnZV90aXRsZT1cdTViOWVcdTlhOGMKK05FeHBlcmltZW50V2l6LnBhZ2VfZGVzY3JpcHRpb249XHU1NzI4XHU5ODc5XHU3NmVlXHU0ZTJkXHU1MjFiXHU1ZWZhXHU0ZTAwXHU0ZTJhXHU2NWIwXHU3Njg0U1RFTVx1NWI5ZVx1OWE4YworTkV4cGVyaW1lbnRXaXouRENfREVTQ1JJUFRJT049XHU1YjllXHU5YThjXHUyMDFjezB9XHUyMDFkCisKKyMgTW9kaWZpZXIKK05Nb2RpZmllcldpei53aXphcmRfdGl0bGU9XHU2NWIwXHU1ZWZhXHU0ZmVlXHU2NTM5XHU1NjY4CitOTW9kaWZpZXJXaXoucGFnZV90aXRsZT1cdTRmZWVcdTY1MzlcdTU2NjgKK05Nb2RpZmllcldpei5wYWdlX2Rlc2NyaXB0aW9uPVx1NTcyOFx1OTg3OVx1NzZlZVx1NGUyZFx1NTIxYlx1NWVmYVx1NGUwMFx1NGUyYVx1NjViMFx1NzY4NFNURU1cdTRmZWVcdTk5NzBcdTdiMjYKK05Nb2RpZmllcldpei5EQ19ERVNDUklQVElPTj1cdTRmZWVcdTY1MzlcdTU2NjhcdTIwMWN7MH1cdTIwMWQKKworIyBUcmlnZ2VyCitOVHJpZ2dlcldpei53aXphcmRfdGl0bGU9XHU2NWIwXHU1ZWZhXHU4OWU2XHU1M2QxXHU1NjY4CitOVHJpZ2dlcldpei5wYWdlX3RpdGxlPVx1ODllNlx1NTNkMQorTlRyaWdnZXJXaXoucGFnZV9kZXNjcmlwdGlvbj1cdTU3MjhcdTk4NzlcdTc2ZWVcdTRlMmRcdTUyMWJcdTVlZmFcdTRlMDBcdTRlMmFcdTY1YjBcdTc2ODRTVEVNXHU4OWU2XHU1M2QxXHU1NjY4CitOVHJpZ2dlcldpei5EQ19ERVNDUklQVElPTj1cdTg5ZTZcdTUzZDFcdTIwMWN7MH1cdTIwMWQKKworIyBQcmVkaWNhdGUKK05QcmVkaWNhdGVXaXoud2l6YXJkX3RpdGxlPVx1NjViMFx1NWVmYVx1NjNjZlx1OGZmMAorTlByZWRpY2F0ZVdpei5wYWdlX3RpdGxlPVx1NjNjZlx1OGZmMAorTlByZWRpY2F0ZVdpei5wYWdlX2Rlc2NyaXB0aW9uPVx1NTcyOFx1OTg3OVx1NzZlZVx1NGUyZFx1NTIxYlx1NWVmYVx1NGUwMFx1NGUyYVx1NjViMFx1NzY4NFNURU1cdTYzY2ZcdThmZjAKK05QcmVkaWNhdGVXaXouRENfREVTQ1JJUFRJT049XHU2M2NmXHU4ZmYwXHUyMDFjezB9XHUyMDFkCisKKyMgTW9kaWZpZXJzCitSYW5nZS50eXBlPVx1ODMwM1x1NTZmNAorU2VxdWVuY2UudHlwZT1cdTVlOGZcdTUyMTcKK1NpbmdsZS50eXBlPVx1NTM1NVx1NGUwMAorCisKKyMgTWF0cml4IEVkaXRvcgorTWF0cml4LmludmFsaWQudmFsdWU9XHU2NWUwXHU2NTQ4XHU1MDNjezB9CitNYXRyaXguZGlhbG9nLm9rYXk9XHU1OTdkCitNYXRyaXguZGlhbG9nLmNhbmNlbD1cdTUzZDZcdTZkODgKK01hdHJpeC5kaWFsb2cucGx1cz0rCitNYXRyaXguZGlhbG9nLm1pbnVzPS0gCisKKyNMb2NhdGlvbiBwaWNrZXIKK05Mb2NXaXpJU09LPUlTT1x1NzY4NFx1NTE3M1x1OTUyZQorTkxvY1dpekNOVFJZPVx1NTZmZFx1NWJiNgorTkxvY1dpekwxPTFcdTdlYTcKK05Mb2NXaXpMMj0yXHU3ZWE3CitOTG9jV2l6TDM9M1x1N2VhNworTkxvY1dpek9rPVx1NTk3ZAorTkxvY1dpekNhbmNlbD1cdTUzZDZcdTZkODgKK05Mb2NQaWNrZXJXaXouZ2xvYmFsPVx1NTcyOFx1NTE2OFx1NzQwM1x1ODMwM1x1NTZmNFx1NTE4NVx1OTAwOVx1NjJlOQorTkxvY1BpY2tlcldpei5pbnByb2plY3Q9XHU1NzI4XHU5ODc5XHU3NmVlXHU0ZTJkXHU5MDA5XHU2MmU5CitOTG9jUGlja2VyV2l6LmdldHRpbmdMb2NhdGlvbnM9XHU2OGMwXHU3ZDIyXHU1YmY5XHU1ZjUzXHU1MjRkXHU5ODc5XHU3NmVlXHU3Njg0XHU0ZjRkXHU3ZjZlXHU3Njg0XHU1MjE3XHU4ODY4Li4uCisKKyNSZW5hbWUvY29weSBkaWFsb2cKK1JlbmFtZS5kaWFsb2cub2theT1cdTU5N2QKK1JlbmFtZS5kaWFsb2cuY2FuY2VsPVx1NTNkNlx1NmQ4OAorcmVuYW1lPVx1OTFjZFx1NTQ3ZFx1NTQwZFx1NjU4N1x1NGVmNgorY29weT1cdTU5MGRcdTUyMzZcdTY1ODdcdTRlZjYKKworIyBHcmFwaCBHZW5lcmF0b3JzCitHR0RDLjA9XHU2NzY1XHU2ZTkwCitHR0RDLjI9XHU3YzdiCitHR0RDLjM9XHU1MjFiXHU1ZWZhXHU1NmZlXHU4ODY4XHU3NTFmXHU2MjEwXHU1NjY4XHU1YjllXHU0ZjhiXHU3Njg0XHU5NWVlXHU5ODk4CitZRVM9XHU2NjJmXHU3Njg0CitOTz1cdTY1ZTAKK05HRldpei5EQ19ERVNDUklQVElPTj1cdTU2ZmUKKworIyBMYXR0aWNlIGdyYXBoIGdlbmVyYXRvcgoreFNpemU9WFx1NWMzYVx1NWJmOAoreVNpemU9eVx1NTkyN1x1NWMwZgoreFNpemVVTklUPVx1N2Y1MVx1NjgzYworeVNpemVVTklUPVx1N2Y1MVx1NjgzYworeFNpemVUVD1cdTZjYmZYXHU4Zjc0XHU3Njg0XHU3ZjUxXHU2ODNjXHU2NTcwCit5U2l6ZVRUPVx1NmNiZllcdThmNzRcdTc2ODRcdTdmNTFcdTY4M2NcdTY1NzAKK3VzZU5lYXJlc3ROZWlnaGJvcnM9XHU2NzAwXHU4ZmQxXHU3Njg0XHU5MGJiXHU1YzQ1Cit1c2VOZWFyZXN0TmVpZ2hib3JzVU5JVD0KK3VzZU5lYXJlc3ROZWlnaGJvcnNUVD1cdTc1MjhcdTY3MDBcdTRlMzRcdThmZDFcdTc2ODRcdThmYjlcdTc1NGNcdTY3NjVcdThmZGVcdTYzYTVcdTdmNTFcdTY4M2MKK3VzZU5leHROZWFyZXN0TmVpZ2hib3JzPVx1NGUwYlx1NGUwMFx1NGUyYVx1NjcwMFx1OGZkMVx1NzY4NFx1OTBiYlx1NWM0NQordXNlTmV4dE5lYXJlc3ROZWlnaGJvcnNVTklUPQordXNlTmV4dE5lYXJlc3ROZWlnaGJvcnNUVD1cdTc1MjhcdTRlMGJcdTRlMDBcdTRlMmFcdTY3MDBcdTRlMzRcdThmZDFcdTc2ODRcdThmYjlcdTc1NGNcdTY3NjVcdThmZGVcdTYzYTVcdTdmNTFcdTY4M2MKK3BlcmlvZGljQm91bmRhcmllcz1cdTU0NjhcdTY3MWZcdThmYjlcdTc1NGMKK3BlcmlvZGljQm91bmRhcmllc1VOSVQ9CitwZXJpb2RpY0JvdW5kYXJpZXNUVD1cdTRmN2ZcdTc1MjhcdTU0NjhcdTY3MWZcdTdlYTZcdTY3NWYKKworIyBGb3IgZ2VuZXJpYyBwcm9wZXJ0eSBlZGl0b3IKK2ZpbGVDaG9vc2VyQnV0dG9uVGV4dD1cdTkwMDlcdTYyZTlcdTY1ODdcdTRlZjYuLi4KK2RpckNob29zZXJCdXR0b25UZXh0PVx1OTAwOVx1NjJlOVx1NzZlZVx1NWY1NS4uLgorZmlsZUNob29zZXJCdXR0b25Ub29sdGlwVGV4dD1cdTRlMDBcdTRlMmFcdTY1ODdcdTRlZjZcdTg4YWJcdTc1MjhcdTY3NjVcdTRlM2FcdTcyNzlcdTZiOGFcdTc2ODRcdTgyODJcdTcwYjlcdTUyYTBcdThmN2RcdTY1NzBcdTYzNmUKK2RpckNob29zZXJCdXR0b25Ub29sdGlwVGV4dD1cdTRlMDBcdTRlMmFcdTc2ZWVcdTVmNTVcdTg4YWJcdTc1MjhcdTRlOGVcdTg4YzVcdThmN2RcdWZmMDhcdTkwMWFcdTVlMzhcdTRlM2FcdTU5MWFcdTRlMmFcdTgyODJcdTcwYjlcdWZmMDlcdTc2ODRcdTY1ODdcdTRlZjZcdTk2YzZcdTU0MDgKK2ZpbGVDaG9vc2VyRGlhbG9nVGl0bGU9XHU5MDA5XHU2MmU5Q1NWXHU2NTg3XHU0ZWY2CitkaXJDaG9vc2VyRGlhbG9nVGl0bGU9XHU5MDA5XHU2MmU5XHU3NmVlXHU1ZjU1CitOUGlja0xvYz1cdTkwMDlcdTYyZTkKK05QaWNrTG9jVGl0bGU9XHU5MDA5XHU2MmU5XHU0ZTAwXHU0ZTJhXHU0ZjRkXHU3ZjZlCisKKyNEb3VibGUgYW5kIHN0cmluZyB2YWx1ZXMKK2lkZW50aWZpZXI9XHU2ODA3XHU4YmM2XHU3YjI2CitpZGVudGlmaWVyVU5JVD0KK3ZhbHVlPVx1NGVmN1x1NTAzYwordmFsdWVVTklUPQorCisjUGFyYW1ldGVyIHBpY2tlcgorUFAuSURFTlRTPVx1NTcyOFx1NjBhOFx1NzY4NFx1OTg3OVx1NzZlZVx1NGUyZFx1NjI3ZVx1NTIzMFx1NWY5N1x1NWJmOVx1OGM2MQorUFAuUFJPUD1cdTViZjlcdThjNjFcdTVjNWVcdTYwMjcKKworI0lERU5USUZJQUJMRSBwaWNrZXIKK0lQLk9CSkVDVFM9XHU1NzI4XHU2MGE4XHU3Njg0XHU5ODc5XHU3NmVlXHU0ZTJkXHU2MjdlXHU1MjMwXHU1Zjk3XHU1YmY5XHU4YzYxCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3RlbS5wcm9kdWN0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3N0ZW0ucHJvZHVjdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YTk2NWVmCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3N0ZW0ucHJvZHVjdApAQCAtMCwwICsxLDE4OSBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzw/cGRlIHZlcnNpb249IjMuNSI/PgorCis8cHJvZHVjdCBuYW1lPSJTVEVNIiB1aWQ9Im9yZy5lY2xpcHNlLnN0ZW0udWkucHJvZHVjdCIgaWQ9Im9yZy5lY2xpcHNlLnN0ZW0udWkucHJvZHVjdCIgYXBwbGljYXRpb249Im9yZy5lY2xpcHNlLnN0ZW0udWkuQ29yZUVkaXRvckFkdmlzb3JBcHBsaWNhdGlvbiIgdmVyc2lvbj0iMS4yLjEiIHVzZUZlYXR1cmVzPSJ0cnVlIiBpbmNsdWRlTGF1bmNoZXJzPSJ0cnVlIj4KKworICAgPGFib3V0SW5mbz4KKyAgICAgIDxpbWFnZSBwYXRoPSIvb3JnLmVjbGlwc2Uuc3RlbS51aS9icmFuZGluZy9vaGY2NF82NF8zMi5naWYiLz4KKyAgICAgIDx0ZXh0PgorICAgICAgICAgU1RFTSAtIFNwYXRpb3RlbXBvcmFsIEVwaWRlbW9sb2dpY2FsIE1vZGVsZXIKKyAgICAgIDwvdGV4dD4KKyAgIDwvYWJvdXRJbmZvPgorCisgICA8Y29uZmlnSW5pIHVzZT0iZGVmYXVsdCI+CisgICA8L2NvbmZpZ0luaT4KKworICAgPGxhdW5jaGVyQXJncz4KKyAgICAgIDx2bUFyZ3M+LVhtczQwME0gLVhteDEwMjRNPC92bUFyZ3M+CisgICA8L2xhdW5jaGVyQXJncz4KKworICAgPHdpbmRvd0ltYWdlcyBpMTY9Ii9vcmcuZWNsaXBzZS5zdGVtLnVpL2JyYW5kaW5nL29oZjE2XzE2XzMyLmdpZiIgaTMyPSIvb3JnLmVjbGlwc2Uuc3RlbS51aS9icmFuZGluZy9vaGYzMl8zMl8zMi5naWYiIGk0OD0iL29yZy5lY2xpcHNlLnN0ZW0udWkvYnJhbmRpbmcvb2hmNDhfNDhfMzIuZ2lmIiBpNjQ9Ii9vcmcuZWNsaXBzZS5zdGVtLnVpL2JyYW5kaW5nL29oZjY0XzY0XzMyLmdpZiIgaTEyOD0iL29yZy5lY2xpcHNlLnN0ZW0udWkvYnJhbmRpbmcvb2hmMTI4XzEyOF8zMi5naWYiLz4KKworICAgPHNwbGFzaAorICAgICAgbG9jYXRpb249Im9yZy5lY2xpcHNlLnN0ZW0udWkiCisgICAgICBzdGFydHVwUHJvZ3Jlc3NSZWN0PSIwLDQxMyw0MzEsMTUiCisgICAgICBzdGFydHVwTWVzc2FnZVJlY3Q9IjEwLDM4MCw0MzEsMjAiCisgICAgICBzdGFydHVwRm9yZWdyb3VuZENvbG9yPSJGRkZGRkYiIC8+CisgICA8bGF1bmNoZXIgbmFtZT0iU1RFTSI+CisgICAgICA8bGludXggaWNvbj0iL29yZy5lY2xpcHNlLnN0ZW0udWkvYnJhbmRpbmcvU1RFTTEyOF8xMjhfMzIueHBtIi8+CisgICAgICA8bWFjb3N4IGljb249Ii9vcmcuZWNsaXBzZS5zdGVtLnVpL2JyYW5kaW5nL1NURU0xMjhfMTI4XzMyLmljbnMiLz4KKyAgICAgIDxzb2xhcmlzLz4KKyAgICAgIDx3aW4gdXNlSWNvPSJmYWxzZSI+CisgICAgICAgICA8Ym1wCisgICAgICAgICAgICB3aW5TbWFsbExvdz0iL29yZy5lY2xpcHNlLnN0ZW0udWkvYnJhbmRpbmcvb2hmMTZfMTZfOC5ibXAiCisgICAgICAgICAgICB3aW5NZWRpdW1Mb3c9Ii9vcmcuZWNsaXBzZS5zdGVtLnVpL2JyYW5kaW5nL29oZjMyXzMyXzguYm1wIgorICAgICAgICAgICAgd2luTGFyZ2VMb3c9Ii9vcmcuZWNsaXBzZS5zdGVtLnVpL2JyYW5kaW5nL29oZjQ4XzQ4XzguYm1wIi8+CisgICAgICA8L3dpbj4KKyAgIDwvbGF1bmNoZXI+CisKKyAgIDx2bT4KKyAgIDwvdm0+CisKKyAgIDxsaWNlbnNlPgorICAgICAgICA8dXJsPmh0dHA6Ly9lY2xpcHNlLm9yZy9sZWdhbC9lcGwvbm90aWNlLnBocDwvdXJsPgorICAgICAgICA8dGV4dD4KKyAgIDMyCSAgIEVjbGlwc2UgRm91bmRhdGlvbiBTb2Z0d2FyZSBVc2VyIEFncmVlbWVudAorMzMJRmVicnVhcnkgMSwgMjAxMQorMzQJCiszNQlVc2FnZSBPZiBDb250ZW50CiszNgkKKzM3CVRIRSBFQ0xJUFNFIEZPVU5EQVRJT04gTUFLRVMgQVZBSUxBQkxFIFNPRlRXQVJFLCBET0NVTUVOVEFUSU9OLCBJTkZPUk1BVElPTiBBTkQvT1IKKzM4CU9USEVSIE1BVEVSSUFMUyBGT1IgT1BFTiBTT1VSQ0UgUFJPSkVDVFMgKENPTExFQ1RJVkVMWSAmcXVvdDtDT05URU5UJnF1b3Q7KS4KKzM5CVVTRSBPRiBUSEUgQ09OVEVOVCBJUyBHT1ZFUk5FRCBCWSBUSEUgVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgVEhJUworNDAJQUdSRUVNRU5UIEFORC9PUiBUSEUgVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgTElDRU5TRSBBR1JFRU1FTlRTIE9SCis0MQlOT1RJQ0VTIElORElDQVRFRCBPUiBSRUZFUkVOQ0VEIEJFTE9XLiAgQlkgVVNJTkcgVEhFIENPTlRFTlQsIFlPVQorNDIJQUdSRUUgVEhBVCBZT1VSIFVTRSBPRiBUSEUgQ09OVEVOVCBJUyBHT1ZFUk5FRCBCWSBUSElTIEFHUkVFTUVOVAorNDMJQU5EL09SIFRIRSBURVJNUyBBTkQgQ09ORElUSU9OUyBPRiBBTlkgQVBQTElDQUJMRSBMSUNFTlNFIEFHUkVFTUVOVFMKKzQ0CU9SIE5PVElDRVMgSU5ESUNBVEVEIE9SIFJFRkVSRU5DRUQgQkVMT1cuICBJRiBZT1UgRE8gTk9UIEFHUkVFIFRPIFRIRQorNDUJVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgVEhJUyBBR1JFRU1FTlQgQU5EIFRIRSBURVJNUyBBTkQgQ09ORElUSU9OUworNDYJT0YgQU5ZIEFQUExJQ0FCTEUgTElDRU5TRSBBR1JFRU1FTlRTIE9SIE5PVElDRVMgSU5ESUNBVEVEIE9SIFJFRkVSRU5DRUQKKzQ3CUJFTE9XLCBUSEVOIFlPVSBNQVkgTk9UIFVTRSBUSEUgQ09OVEVOVC4KKzQ4CQorNDkJQXBwbGljYWJsZSBMaWNlbnNlcworNTAJCis1MQlVbmxlc3Mgb3RoZXJ3aXNlIGluZGljYXRlZCwgYWxsIENvbnRlbnQgbWFkZSBhdmFpbGFibGUgYnkgdGhlCis1MglFY2xpcHNlIEZvdW5kYXRpb24gaXMgcHJvdmlkZWQgdG8geW91IHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZgorNTMJdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjAgKCZxdW90O0VQTCZxdW90OykuIEEgY29weSBvZiB0aGUgRVBMIGlzCis1NAlwcm92aWRlZCB3aXRoIHRoaXMgQ29udGVudCBhbmQgaXMgYWxzbyBhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwuCis1NQlGb3IgcHVycG9zZXMgb2YgdGhlIEVQTCwgJnF1b3Q7UHJvZ3JhbSZxdW90OyB3aWxsIG1lYW4gdGhlIENvbnRlbnQuCis1NgkKKzU3CUNvbnRlbnQgaW5jbHVkZXMsIGJ1dCBpcyBub3QgbGltaXRlZCB0bywgc291cmNlIGNvZGUsIG9iamVjdCBjb2RlLAorNTgJZG9jdW1lbnRhdGlvbiBhbmQgb3RoZXIgZmlsZXMgbWFpbnRhaW5lZCBpbiB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uIHNvdXJjZSBjb2RlCis1OQlyZXBvc2l0b3J5ICgmcXVvdDtSZXBvc2l0b3J5JnF1b3Q7KSBpbiBzb2Z0d2FyZSBtb2R1bGVzICgmcXVvdDtNb2R1bGVzJnF1b3Q7KSBhbmQgbWFkZSBhdmFpbGFibGUKKzYwCWFzIGRvd25sb2FkYWJsZSBhcmNoaXZlcyAoJnF1b3Q7RG93bmxvYWRzJnF1b3Q7KS4KKzYxCQorNjIJICAgICAgLSBDb250ZW50IG1heSBiZSBzdHJ1Y3R1cmVkIGFuZCBwYWNrYWdlZCBpbnRvIG1vZHVsZXMgdG8gZmFjaWxpdGF0ZSBkZWxpdmVyaW5nLAorNjMJICAgICAgICAgZXh0ZW5kaW5nLCBhbmQgdXBncmFkaW5nIHRoZSBDb250ZW50LiBUeXBpY2FsIG1vZHVsZXMgbWF5IGluY2x1ZGUgcGx1Zy1pbnMgKCZxdW90O1BsdWctaW5zJnF1b3Q7KSwKKzY0CSAgICAgICAgIHBsdWctaW4gZnJhZ21lbnRzICgmcXVvdDtGcmFnbWVudHMmcXVvdDspLCBhbmQgZmVhdHVyZXMgKCZxdW90O0ZlYXR1cmVzJnF1b3Q7KS4KKzY1CSAgICAgICAtIEVhY2ggUGx1Zy1pbiBvciBGcmFnbWVudCBtYXkgYmUgcGFja2FnZWQgYXMgYSBzdWItZGlyZWN0b3J5IG9yIEpBUiAoSmF2YShUTSkgQVJjaGl2ZSkKKzY2CSAgICAgICAgIGluIGEgZGlyZWN0b3J5IG5hbWVkICZxdW90O3BsdWdpbnMmcXVvdDsuCis2NwkgICAgICAgLSBBIEZlYXR1cmUgaXMgYSBidW5kbGUgb2Ygb25lIG9yIG1vcmUgUGx1Zy1pbnMgYW5kL29yIEZyYWdtZW50cyBhbmQgYXNzb2NpYXRlZCBtYXRlcmlhbC4KKzY4CSAgICAgICAgIEVhY2ggRmVhdHVyZSBtYXkgYmUgcGFja2FnZWQgYXMgYSBzdWItZGlyZWN0b3J5IGluIGEgZGlyZWN0b3J5IG5hbWVkICZxdW90O2ZlYXR1cmVzJnF1b3Q7LgorNjkJICAgICAgICAgV2l0aGluIGEgRmVhdHVyZSwgZmlsZXMgbmFtZWQgJnF1b3Q7ZmVhdHVyZS54bWwmcXVvdDsgbWF5IGNvbnRhaW4gYSBsaXN0IG9mIHRoZSBuYW1lcyBhbmQgdmVyc2lvbgorNzAJICAgICAgICAgbnVtYmVycyBvZiB0aGUgUGx1Zy1pbnMgYW5kL29yIEZyYWdtZW50cyBhc3NvY2lhdGVkIHdpdGggdGhhdCBGZWF0dXJlLgorNzEJICAgICAgIC0gRmVhdHVyZXMgbWF5IGFsc28gaW5jbHVkZSBvdGhlciBGZWF0dXJlcyAoJnF1b3Q7SW5jbHVkZWQgRmVhdHVyZXMmcXVvdDspLiBXaXRoaW4gYSBGZWF0dXJlLCBmaWxlcworNzIJICAgICAgICAgbmFtZWQgJnF1b3Q7ZmVhdHVyZS54bWwmcXVvdDsgbWF5IGNvbnRhaW4gYSBsaXN0IG9mIHRoZSBuYW1lcyBhbmQgdmVyc2lvbiBudW1iZXJzIG9mIEluY2x1ZGVkIEZlYXR1cmVzLgorNzMJCis3NAlUaGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgZ292ZXJuaW5nIFBsdWctaW5zIGFuZCBGcmFnbWVudHMgc2hvdWxkIGJlCis3NQljb250YWluZWQgaW4gZmlsZXMgbmFtZWQgJnF1b3Q7YWJvdXQuaHRtbCZxdW90OyAoJnF1b3Q7QWJvdXRzJnF1b3Q7KS4gVGhlIHRlcm1zIGFuZAorNzYJY29uZGl0aW9ucyBnb3Zlcm5pbmcgRmVhdHVyZXMgYW5kIEluY2x1ZGVkIEZlYXR1cmVzIHNob3VsZCBiZSBjb250YWluZWQKKzc3CWluIGZpbGVzIG5hbWVkICZxdW90O2xpY2Vuc2UuaHRtbCZxdW90OyAoJnF1b3Q7RmVhdHVyZSBMaWNlbnNlcyZxdW90OykuIEFib3V0cyBhbmQgRmVhdHVyZQorNzgJTGljZW5zZXMgbWF5IGJlIGxvY2F0ZWQgaW4gYW55IGRpcmVjdG9yeSBvZiBhIERvd25sb2FkIG9yIE1vZHVsZQorNzkJaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG8gdGhlIGZvbGxvd2luZyBsb2NhdGlvbnM6Cis4MAkKKzgxCSAgICAgICAtIFRoZSB0b3AtbGV2ZWwgKHJvb3QpIGRpcmVjdG9yeQorODIJICAgICAgIC0gUGx1Zy1pbiBhbmQgRnJhZ21lbnQgZGlyZWN0b3JpZXMKKzgzCSAgICAgICAtIEluc2lkZSBQbHVnLWlucyBhbmQgRnJhZ21lbnRzIHBhY2thZ2VkIGFzIEpBUnMKKzg0CSAgICAgICAtIFN1Yi1kaXJlY3RvcmllcyBvZiB0aGUgZGlyZWN0b3J5IG5hbWVkICZxdW90O3NyYyZxdW90OyBvZiBjZXJ0YWluIFBsdWctaW5zCis4NQkgICAgICAgLSBGZWF0dXJlIGRpcmVjdG9yaWVzCis4NgkKKzg3CU5vdGU6IGlmIGEgRmVhdHVyZSBtYWRlIGF2YWlsYWJsZSBieSB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uIGlzIGluc3RhbGxlZCB1c2luZyB0aGUKKzg4CVByb3Zpc2lvbmluZyBUZWNobm9sb2d5IChhcyBkZWZpbmVkIGJlbG93KSwgeW91IG11c3QgYWdyZWUgdG8gYSBsaWNlbnNlICgmcXVvdDtGZWF0dXJlIAorODkJVXBkYXRlIExpY2Vuc2UmcXVvdDspIGR1cmluZyB0aGUgaW5zdGFsbGF0aW9uIHByb2Nlc3MuIElmIHRoZSBGZWF0dXJlIGNvbnRhaW5zCis5MAlJbmNsdWRlZCBGZWF0dXJlcywgdGhlIEZlYXR1cmUgVXBkYXRlIExpY2Vuc2Ugc2hvdWxkIGVpdGhlciBwcm92aWRlIHlvdQorOTEJd2l0aCB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgZ292ZXJuaW5nIHRoZSBJbmNsdWRlZCBGZWF0dXJlcyBvciBpbmZvcm0KKzkyCXlvdSB3aGVyZSB5b3UgY2FuIGxvY2F0ZSB0aGVtLiBGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlcyBtYXkgYmUgZm91bmQgaW4KKzkzCXRoZSAmcXVvdDtsaWNlbnNlJnF1b3Q7IHByb3BlcnR5IG9mIGZpbGVzIG5hbWVkICZxdW90O2ZlYXR1cmUucHJvcGVydGllcyZxdW90OyBmb3VuZCB3aXRoaW4gYSBGZWF0dXJlLgorOTQJU3VjaCBBYm91dHMsIEZlYXR1cmUgTGljZW5zZXMsIGFuZCBGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlcyBjb250YWluIHRoZQorOTUJdGVybXMgYW5kIGNvbmRpdGlvbnMgKG9yIHJlZmVyZW5jZXMgdG8gc3VjaCB0ZXJtcyBhbmQgY29uZGl0aW9ucykgdGhhdAorOTYJZ292ZXJuIHlvdXIgdXNlIG9mIHRoZSBhc3NvY2lhdGVkIENvbnRlbnQgaW4gdGhhdCBkaXJlY3RvcnkuCis5NwkKKzk4CVRIRSBBQk9VVFMsIEZFQVRVUkUgTElDRU5TRVMsIEFORCBGRUFUVVJFIFVQREFURSBMSUNFTlNFUyBNQVkgUkVGRVIKKzk5CVRPIFRIRSBFUEwgT1IgT1RIRVIgTElDRU5TRSBBR1JFRU1FTlRTLCBOT1RJQ0VTIE9SIFRFUk1TIEFORCBDT05ESVRJT05TLgorMTAwCVNPTUUgT0YgVEhFU0UgT1RIRVIgTElDRU5TRSBBR1JFRU1FTlRTIE1BWSBJTkNMVURFIChCVVQgQVJFIE5PVCBMSU1JVEVEIFRPKToKKzEwMQkKKzEwMgkgICAgICAgLSBFY2xpcHNlIERpc3RyaWJ1dGlvbiBMaWNlbnNlIFZlcnNpb24gMS4wIChhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9saWNlbnNlcy9lZGwtdjEuMC5odG1sKQorMTAzCSAgICAgICAtIENvbW1vbiBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMCAoYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvY3BsLXYxMC5odG1sKQorMTA0CSAgICAgICAtIEFwYWNoZSBTb2Z0d2FyZSBMaWNlbnNlIDEuMSAoYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFKQorMTA1CSAgICAgICAtIEFwYWNoZSBTb2Z0d2FyZSBMaWNlbnNlIDIuMCAoYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMCkKKzEwNgkgICAgICAgLSBNZXRybyBMaW5rIFB1YmxpYyBMaWNlbnNlIDEuMDAgKGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3Lm9wZW5ncm91cC5vcmcvb3Blbm1vdGlmL3N1cHBvcnRlcnMvbWV0cm9saW5rL2xpY2Vuc2UuaHRtbCkKKzEwNwkgICAgICAgLSBNb3ppbGxhIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4xIChhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5tb3ppbGxhLm9yZy9NUEwvTVBMLTEuMS5odG1sKQorMTA4CQorMTA5CUlUIElTIFlPVVIgT0JMSUdBVElPTiBUTyBSRUFEIEFORCBBQ0NFUFQgQUxMIFNVQ0ggVEVSTVMgQU5EIENPTkRJVElPTlMgUFJJT1IKKzExMAlUTyBVU0UgT0YgVEhFIENPTlRFTlQuIElmIG5vIEFib3V0LCBGZWF0dXJlIExpY2Vuc2UsIG9yIEZlYXR1cmUgVXBkYXRlIExpY2Vuc2UKKzExMQlpcyBwcm92aWRlZCwgcGxlYXNlIGNvbnRhY3QgdGhlIEVjbGlwc2UgRm91bmRhdGlvbiB0byBkZXRlcm1pbmUgd2hhdCB0ZXJtcyBhbmQgY29uZGl0aW9ucworMTEyCWdvdmVybiB0aGF0IHBhcnRpY3VsYXIgQ29udGVudC4KKzExMwkKKzExNAlVc2Ugb2YgUHJvdmlzaW9uaW5nIFRlY2hub2xvZ3kKKzExNQkKKzExNglUaGUgRWNsaXBzZSBGb3VuZGF0aW9uIG1ha2VzIGF2YWlsYWJsZSBwcm92aXNpb25pbmcgc29mdHdhcmUsIGV4YW1wbGVzIG9mIHdoaWNoIGluY2x1ZGUsCisxMTcJYnV0IGFyZSBub3QgbGltaXRlZCB0bywgcDIgYW5kIHRoZSBFY2xpcHNlIFVwZGF0ZSBNYW5hZ2VyICgmcXVvdDtQcm92aXNpb25pbmcgVGVjaG5vbG9neSZxdW90OykgZm9yCisxMTgJdGhlIHB1cnBvc2Ugb2YgYWxsb3dpbmcgdXNlcnMgdG8gaW5zdGFsbCBzb2Z0d2FyZSwgZG9jdW1lbnRhdGlvbiwgaW5mb3JtYXRpb24gYW5kL29yCisxMTkJb3RoZXIgbWF0ZXJpYWxzIChjb2xsZWN0aXZlbHkgJnF1b3Q7SW5zdGFsbGFibGUgU29mdHdhcmUmcXVvdDspLiBUaGlzIGNhcGFiaWxpdHkgaXMgcHJvdmlkZWQgd2l0aAorMTIwCXRoZSBpbnRlbnQgb2YgYWxsb3dpbmcgc3VjaCB1c2VycyB0byBpbnN0YWxsLCBleHRlbmQgYW5kIHVwZGF0ZSBFY2xpcHNlLWJhc2VkIHByb2R1Y3RzLgorMTIxCUluZm9ybWF0aW9uIGFib3V0IHBhY2thZ2luZyBJbnN0YWxsYWJsZSBTb2Z0d2FyZSBpcyBhdmFpbGFibGUgYXQKKzEyMglodHRwOi8vZWNsaXBzZS5vcmcvZXF1aW5veC9wMi9yZXBvc2l0b3J5X3BhY2thZ2luZy5odG1sICgmcXVvdDtTcGVjaWZpY2F0aW9uJnF1b3Q7KS4KKzEyMwkKKzEyNAlZb3UgbWF5IHVzZSBQcm92aXNpb25pbmcgVGVjaG5vbG9neSB0byBhbGxvdyBvdGhlciBwYXJ0aWVzIHRvIGluc3RhbGwgSW5zdGFsbGFibGUgU29mdHdhcmUuCisxMjUJWW91IHNoYWxsIGJlIHJlc3BvbnNpYmxlIGZvciBlbmFibGluZyB0aGUgYXBwbGljYWJsZSBsaWNlbnNlIGFncmVlbWVudHMgcmVsYXRpbmcgdG8gdGhlCisxMjYJSW5zdGFsbGFibGUgU29mdHdhcmUgdG8gYmUgcHJlc2VudGVkIHRvLCBhbmQgYWNjZXB0ZWQgYnksIHRoZSB1c2VycyBvZiB0aGUgUHJvdmlzaW9uaW5nIFRlY2hub2xvZ3kKKzEyNwlpbiBhY2NvcmRhbmNlIHdpdGggdGhlIFNwZWNpZmljYXRpb24uIEJ5IHVzaW5nIFByb3Zpc2lvbmluZyBUZWNobm9sb2d5IGluIHN1Y2ggYSBtYW5uZXIgYW5kCisxMjgJbWFraW5nIGl0IGF2YWlsYWJsZSBpbiBhY2NvcmRhbmNlIHdpdGggdGhlIFNwZWNpZmljYXRpb24sIHlvdSBmdXJ0aGVyIGFja25vd2xlZGdlIHlvdXIKKzEyOQlhZ3JlZW1lbnQgdG8sIGFuZCB0aGUgYWNxdWlzaXRpb24gb2YgYWxsIG5lY2Vzc2FyeSByaWdodHMgdG8gcGVybWl0IHRoZSBmb2xsb3dpbmc6CisxMzAJCisxMzEJICAgICAgIDEuIEEgc2VyaWVzIG9mIGFjdGlvbnMgbWF5IG9jY3VyICgmcXVvdDtQcm92aXNpb25pbmcgUHJvY2VzcyZxdW90OykgaW4gd2hpY2ggYSB1c2VyIG1heSBleGVjdXRlCisxMzIJICAgICAgICAgIHRoZSBQcm92aXNpb25pbmcgVGVjaG5vbG9neSBvbiBhIG1hY2hpbmUgKCZxdW90O1RhcmdldCBNYWNoaW5lJnF1b3Q7KSB3aXRoIHRoZSBpbnRlbnQgb2YgaW5zdGFsbGluZywKKzEzMwkgICAgICAgICAgZXh0ZW5kaW5nIG9yIHVwZGF0aW5nIHRoZSBmdW5jdGlvbmFsaXR5IG9mIGFuIEVjbGlwc2UtYmFzZWQgcHJvZHVjdC4KKzEzNAkgICAgICAgMi4gRHVyaW5nIHRoZSBQcm92aXNpb25pbmcgUHJvY2VzcywgdGhlIFByb3Zpc2lvbmluZyBUZWNobm9sb2d5IG1heSBjYXVzZSB0aGlyZCBwYXJ0eQorMTM1CSAgICAgICAgICBJbnN0YWxsYWJsZSBTb2Z0d2FyZSBvciBhIHBvcnRpb24gdGhlcmVvZiB0byBiZSBhY2Nlc3NlZCBhbmQgY29waWVkIHRvIHRoZSBUYXJnZXQgTWFjaGluZS4KKzEzNgkgICAgICAgMy4gUHVyc3VhbnQgdG8gdGhlIFNwZWNpZmljYXRpb24sIHlvdSB3aWxsIHByb3ZpZGUgdG8gdGhlIHVzZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIHRoYXQKKzEzNwkgICAgICAgICAgZ292ZXJuIHRoZSB1c2Ugb2YgdGhlIEluc3RhbGxhYmxlIFNvZnR3YXJlICgmcXVvdDtJbnN0YWxsYWJsZSBTb2Z0d2FyZSBBZ3JlZW1lbnQmcXVvdDspIGFuZCBzdWNoCisxMzgJICAgICAgICAgIEluc3RhbGxhYmxlIFNvZnR3YXJlIEFncmVlbWVudCBzaGFsbCBiZSBhY2Nlc3NlZCBmcm9tIHRoZSBUYXJnZXQgTWFjaGluZSBpbiBhY2NvcmRhbmNlCisxMzkJICAgICAgICAgIHdpdGggdGhlIFNwZWNpZmljYXRpb24uIFN1Y2ggSW5zdGFsbGFibGUgU29mdHdhcmUgQWdyZWVtZW50IG11c3QgaW5mb3JtIHRoZSB1c2VyIG9mIHRoZQorMTQwCSAgICAgICAgICB0ZXJtcyBhbmQgY29uZGl0aW9ucyB0aGF0IGdvdmVybiB0aGUgSW5zdGFsbGFibGUgU29mdHdhcmUgYW5kIG11c3Qgc29saWNpdCBhY2NlcHRhbmNlIGJ5CisxNDEJICAgICAgICAgIHRoZSBlbmQgdXNlciBpbiB0aGUgbWFubmVyIHByZXNjcmliZWQgaW4gc3VjaCBJbnN0YWxsYWJsZSBTb2Z0d2FyZSBBZ3JlZW1lbnQuIFVwb24gc3VjaAorMTQyCSAgICAgICAgICBpbmRpY2F0aW9uIG9mIGFncmVlbWVudCBieSB0aGUgdXNlciwgdGhlIHByb3Zpc2lvbmluZyBUZWNobm9sb2d5IHdpbGwgY29tcGxldGUgaW5zdGFsbGF0aW9uCisxNDMJICAgICAgICAgIG9mIHRoZSBJbnN0YWxsYWJsZSBTb2Z0d2FyZS4KKzE0NAkKKzE0NQlDcnlwdG9ncmFwaHkKKzE0NgkKKzE0NwlDb250ZW50IG1heSBjb250YWluIGVuY3J5cHRpb24gc29mdHdhcmUuIFRoZSBjb3VudHJ5IGluIHdoaWNoIHlvdSBhcmUKKzE0OAljdXJyZW50bHkgbWF5IGhhdmUgcmVzdHJpY3Rpb25zIG9uIHRoZSBpbXBvcnQsIHBvc3Nlc3Npb24sIGFuZCB1c2UsCisxNDkJYW5kL29yIHJlLWV4cG9ydCB0byBhbm90aGVyIGNvdW50cnksIG9mIGVuY3J5cHRpb24gc29mdHdhcmUuIEJFRk9SRQorMTUwCXVzaW5nIGFueSBlbmNyeXB0aW9uIHNvZnR3YXJlLCBwbGVhc2UgY2hlY2sgdGhlIGNvdW50cnkmYXBvcztzIGxhd3MsCisxNTEJcmVndWxhdGlvbnMgYW5kIHBvbGljaWVzIGNvbmNlcm5pbmcgdGhlIGltcG9ydCwgcG9zc2Vzc2lvbiwgb3IgdXNlLCBhbmQKKzE1MglyZS1leHBvcnQgb2YgZW5jcnlwdGlvbiBzb2Z0d2FyZSwgdG8gc2VlIGlmIHRoaXMgaXMgcGVybWl0dGVkLgorMTUzCQorMTU0CUphdmEgYW5kIGFsbCBKYXZhLWJhc2VkIHRyYWRlbWFya3MgYXJlIHRyYWRlbWFya3Mgb2YgT3JhY2xlIENvcnBvcmF0aW9uIGluIHRoZSBVbml0ZWQgU3RhdGVzLCBvdGhlciBjb3VudHJpZXMsIG9yIGJvdGguCisxNTUKKyAgICAgICAgIDwvdGV4dD4KKyAgIDwvbGljZW5zZT4KKworICAgPHBsdWdpbnM+CisgICA8L3BsdWdpbnM+CisKKyAgIDxmZWF0dXJlcz4KKyAgICAgIDxmZWF0dXJlIGlkPSJvcmcuZWNsaXBzZS5zdGVtLnByb2R1Y3QuZmVhdHVyZSIgdmVyc2lvbj0iMS4yLjEiLz4KKyAgIDwvZmVhdHVyZXM+CisKKyAgIDxjb25maWd1cmF0aW9ucz4KKyAgICAgIDxwbHVnaW4gaWQ9Im9yZy5lY2xpcHNlLmNvcmUucnVudGltZSIgYXV0b1N0YXJ0PSJ0cnVlIiBzdGFydExldmVsPSIwIiAvPgorICAgICAgPHBsdWdpbiBpZD0ib3JnLmVjbGlwc2UuZXF1aW5veC5jb21tb24iIGF1dG9TdGFydD0idHJ1ZSIgc3RhcnRMZXZlbD0iMiIgLz4KKyAgICAgIDxwbHVnaW4gaWQ9Im9yZy5lY2xpcHNlLmVxdWlub3guZHMiIGF1dG9TdGFydD0idHJ1ZSIgc3RhcnRMZXZlbD0iMiIgLz4KKyAgICAgIDxwbHVnaW4gaWQ9Im9yZy5lY2xpcHNlLmVxdWlub3gucDIucmVjb25jaWxlci5kcm9waW5zIiBhdXRvU3RhcnQ9InRydWUiIHN0YXJ0TGV2ZWw9IjAiIC8+CisgICAgICA8cGx1Z2luIGlkPSJvcmcuZWNsaXBzZS5lcXVpbm94LnNpbXBsZWNvbmZpZ3VyYXRvciIgYXV0b1N0YXJ0PSJ0cnVlIiBzdGFydExldmVsPSIxIiAvPgorICAgICAgPHBsdWdpbiBpZD0ib3JnLmVjbGlwc2Uub3NnaSIgYXV0b1N0YXJ0PSJ0cnVlIiBzdGFydExldmVsPSItMSIgLz4KKyAgICAgIDxwbHVnaW4gaWQ9Im9yZy5lY2xpcHNlLnVwZGF0ZS5jb25maWd1cmF0b3IiIGF1dG9TdGFydD0idHJ1ZSIgc3RhcnRMZXZlbD0iMCIgLz4KKyAgIDwvY29uZmlndXJhdGlvbnM+CisKKzwvcHJvZHVjdD4KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsLmxvZ2dlcnMvLmNkdHByb2plY3QgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbC5sb2dnZXJzLy5jZHRwcm9qZWN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFiMmVhODMKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbC5sb2dnZXJzLy5jZHRwcm9qZWN0CkBAIC0wLDAgKzEsNCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzw/ZWNsaXBzZS1jZHQgdmVyc2lvbj0iMi4wIj8+CisKKzxjZHRwcm9qZWN0Lz4KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsLmxvZ2dlcnMvLmNsYXNzcGF0aCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsLmxvZ2dlcnMvLmNsYXNzcGF0aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMDRlODYxCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWwubG9nZ2Vycy8uY2xhc3NwYXRoCkBAIC0wLDAgKzEsNyBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxjbGFzc3BhdGg+CisJPGNsYXNzcGF0aGVudHJ5IGtpbmQ9InNyYyIgcGF0aD0ic3JjIi8+CisJPGNsYXNzcGF0aGVudHJ5IGtpbmQ9ImNvbiIgcGF0aD0ib3JnLmVjbGlwc2UuamR0LmxhdW5jaGluZy5KUkVfQ09OVEFJTkVSL29yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC5kZWJ1Zy51aS5sYXVuY2hlci5TdGFuZGFyZFZNVHlwZS9KMlNFLTEuNSIvPgorCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJjb24iIHBhdGg9Im9yZy5lY2xpcHNlLnBkZS5jb3JlLnJlcXVpcmVkUGx1Z2lucyIvPgorCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJvdXRwdXQiIHBhdGg9ImJpbiIvPgorPC9jbGFzc3BhdGg+CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbC5sb2dnZXJzLy5jcHJvamVjdCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsLmxvZ2dlcnMvLmNwcm9qZWN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI2MTljNTYKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbC5sb2dnZXJzLy5jcHJvamVjdApAQCAtMCwwICsxLDEzIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPD9maWxlVmVyc2lvbiA0LjAuMD8+CisKKzxjcHJvamVjdD4KKzxzdG9yYWdlTW9kdWxlIG1vZHVsZUlkPSJvcmcuZWNsaXBzZS5jZHQuY29yZS5zZXR0aW5ncyI+Cis8Y2NvbmZpZ3VyYXRpb24gaWQ9ImNvbnZlcnRlZC5jb25maWcuOTA3ODQ1MjY0Ij4KKzxzdG9yYWdlTW9kdWxlIGJ1aWxkU3lzdGVtSWQ9Im9yZy5lY2xpcHNlLmNkdC5jb3JlLmRlZmF1bHRDb25maWdEYXRhUHJvdmlkZXIiIGlkPSJjb252ZXJ0ZWQuY29uZmlnLjkwNzg0NTI2NCIgbW9kdWxlSWQ9Im9yZy5lY2xpcHNlLmNkdC5jb3JlLnNldHRpbmdzIiBuYW1lPSJjb252ZXJ0ZWRDb25maWciPgorPGV4dGVybmFsU2V0dGluZ3MvPgorPGV4dGVuc2lvbnMvPgorPC9zdG9yYWdlTW9kdWxlPgorPC9jY29uZmlndXJhdGlvbj4KKzwvc3RvcmFnZU1vZHVsZT4KKzwvY3Byb2plY3Q+CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbC5sb2dnZXJzLy5wcm9qZWN0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWwubG9nZ2Vycy8ucHJvamVjdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZGRmNGZkCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWwubG9nZ2Vycy8ucHJvamVjdApAQCAtMCwwICsxLDM0IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPHByb2plY3REZXNjcmlwdGlvbj4KKwk8bmFtZT5vcmcuZWNsaXBzZS5zdGVtLnV0aWwubG9nZ2VyczwvbmFtZT4KKwk8Y29tbWVudD48L2NvbW1lbnQ+CisJPHByb2plY3RzPgorCTwvcHJvamVjdHM+CisJPGJ1aWxkU3BlYz4KKwkJPGJ1aWxkQ29tbWFuZD4KKwkJCTxuYW1lPm9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFidWlsZGVyPC9uYW1lPgorCQkJPGFyZ3VtZW50cz4KKwkJCTwvYXJndW1lbnRzPgorCQk8L2J1aWxkQ29tbWFuZD4KKwkJPGJ1aWxkQ29tbWFuZD4KKwkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5NYW5pZmVzdEJ1aWxkZXI8L25hbWU+CisJCQk8YXJndW1lbnRzPgorCQkJPC9hcmd1bWVudHM+CisJCTwvYnVpbGRDb21tYW5kPgorCQk8YnVpbGRDb21tYW5kPgorCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLlNjaGVtYUJ1aWxkZXI8L25hbWU+CisJCQk8YXJndW1lbnRzPgorCQkJPC9hcmd1bWVudHM+CisJCTwvYnVpbGRDb21tYW5kPgorCQk8YnVpbGRDb21tYW5kPgorCQkJPG5hbWU+bmV0LnNvdXJjZWZvcmdlLm1ldHJpY3MuYnVpbGRlcjwvbmFtZT4KKwkJCTxhcmd1bWVudHM+CisJCQk8L2FyZ3VtZW50cz4KKwkJPC9idWlsZENvbW1hbmQ+CisJPC9idWlsZFNwZWM+CisJPG5hdHVyZXM+CisJCTxuYXR1cmU+b3JnLmVjbGlwc2UucGRlLlBsdWdpbk5hdHVyZTwvbmF0dXJlPgorCQk8bmF0dXJlPm9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFuYXR1cmU8L25hdHVyZT4KKwkJPG5hdHVyZT5uZXQuc291cmNlZm9yZ2UubWV0cmljcy5uYXR1cmU8L25hdHVyZT4KKwk8L25hdHVyZXM+Cis8L3Byb2plY3REZXNjcmlwdGlvbj4KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsLmxvZ2dlcnMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWwubG9nZ2Vycy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTk5MzA0NgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsLmxvZ2dlcnMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzCkBAIC0wLDAgKzEsNzQgQEAKKyNNb24gRmViIDI1IDE0OjU5OjE4IFBTVCAyMDA4CitlY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29kZWdlbi5pbmxpbmVKc3JCeXRlY29kZT1lbmFibGVkCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb2RlZ2VuLnRhcmdldFBsYXRmb3JtPTEuNQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29kZWdlbi51bnVzZWRMb2NhbD1wcmVzZXJ2ZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29tcGxpYW5jZT0xLjUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmRlYnVnLmxpbmVOdW1iZXI9Z2VuZXJhdGUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmRlYnVnLmxvY2FsVmFyaWFibGU9Z2VuZXJhdGUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmRlYnVnLnNvdXJjZUZpbGU9Z2VuZXJhdGUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmRvYy5jb21tZW50LnN1cHBvcnQ9ZW5hYmxlZAorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5hbm5vdGF0aW9uU3VwZXJJbnRlcmZhY2U9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5hc3NlcnRJZGVudGlmaWVyPWVycm9yCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmF1dG9ib3hpbmc9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5kZXByZWNhdGlvbj13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRlcHJlY2F0aW9uSW5EZXByZWNhdGVkQ29kZT1kaXNhYmxlZAorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5kZXByZWNhdGlvbldoZW5PdmVycmlkaW5nRGVwcmVjYXRlZE1ldGhvZD1kaXNhYmxlZAorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5kaXNjb3VyYWdlZFJlZmVyZW5jZT13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmVtcHR5U3RhdGVtZW50PXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZW51bUlkZW50aWZpZXI9ZXJyb3IKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZmFsbHRocm91Z2hDYXNlPWlnbm9yZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5maWVsZEhpZGluZz1pZ25vcmUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZmluYWxQYXJhbWV0ZXJCb3VuZD13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZpbmFsbHlCbG9ja05vdENvbXBsZXRpbmdOb3JtYWxseT13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZvcmJpZGRlblJlZmVyZW5jZT1lcnJvcgorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5oaWRkZW5DYXRjaEJsb2NrPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW5jb21wYXRpYmxlTm9uSW5oZXJpdGVkSW50ZXJmYWNlTWV0aG9kPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW5jb21wbGV0ZUVudW1Td2l0Y2g9aWdub3JlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmluZGlyZWN0U3RhdGljQWNjZXNzPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW52YWxpZEphdmFkb2M9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbnZhbGlkSmF2YWRvY1RhZ3M9ZW5hYmxlZAorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbnZhbGlkSmF2YWRvY1RhZ3NEZXByZWNhdGVkUmVmPWVuYWJsZWQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW52YWxpZEphdmFkb2NUYWdzTm90VmlzaWJsZVJlZj1lbmFibGVkCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmludmFsaWRKYXZhZG9jVGFnc1Zpc2liaWxpdHk9cHVibGljCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmxvY2FsVmFyaWFibGVIaWRpbmc9aWdub3JlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1ldGhvZFdpdGhDb25zdHJ1Y3Rvck5hbWU9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nRGVwcmVjYXRlZEFubm90YXRpb249d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nSmF2YWRvY0NvbW1lbnRzPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0phdmFkb2NDb21tZW50c092ZXJyaWRpbmc9ZW5hYmxlZAorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nSmF2YWRvY0NvbW1lbnRzVmlzaWJpbGl0eT1wdWJsaWMKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0phdmFkb2NUYWdzPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0phdmFkb2NUYWdzT3ZlcnJpZGluZz1lbmFibGVkCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdKYXZhZG9jVGFnc1Zpc2liaWxpdHk9cHVibGljCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdPdmVycmlkZUFubm90YXRpb249aWdub3JlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdTZXJpYWxWZXJzaW9uPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubm9FZmZlY3RBc3NpZ25tZW50PXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubm9JbXBsaWNpdFN0cmluZ0NvbnZlcnNpb249d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5ub25FeHRlcm5hbGl6ZWRTdHJpbmdMaXRlcmFsPWlnbm9yZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5udWxsUmVmZXJlbmNlPWlnbm9yZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5vdmVycmlkaW5nUGFja2FnZURlZmF1bHRNZXRob2Q9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5wYXJhbWV0ZXJBc3NpZ25tZW50PWlnbm9yZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5wb3NzaWJsZUFjY2lkZW50YWxCb29sZWFuQXNzaWdubWVudD13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnJhd1R5cGVSZWZlcmVuY2U9aWdub3JlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnNwZWNpYWxQYXJhbWV0ZXJIaWRpbmdGaWVsZD1kaXNhYmxlZAorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5zdGF0aWNBY2Nlc3NSZWNlaXZlcj13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnN1cHByZXNzV2FybmluZ3M9ZW5hYmxlZAorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5zeW50aGV0aWNBY2Nlc3NFbXVsYXRpb249d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS50eXBlUGFyYW1ldGVySGlkaW5nPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5jaGVja2VkVHlwZU9wZXJhdGlvbj1pZ25vcmUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5kb2N1bWVudGVkRW1wdHlCbG9jaz13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVuaGFuZGxlZFdhcm5pbmdUb2tlbj13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVubmVjZXNzYXJ5RWxzZT13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVubmVjZXNzYXJ5VHlwZUNoZWNrPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5xdWFsaWZpZWRGaWVsZEFjY2Vzcz1pZ25vcmUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkRGVjbGFyZWRUaHJvd25FeGNlcHRpb249d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWREZWNsYXJlZFRocm93bkV4Y2VwdGlvbldoZW5PdmVycmlkaW5nPWVuYWJsZWQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkSW1wb3J0PXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkTGFiZWw9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRMb2NhbD13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZFBhcmFtZXRlcj13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZFBhcmFtZXRlcldoZW5JbXBsZW1lbnRpbmdBYnN0cmFjdD1lbmFibGVkCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZFBhcmFtZXRlcldoZW5PdmVycmlkaW5nQ29uY3JldGU9ZW5hYmxlZAorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRQcml2YXRlTWVtYmVyPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udmFyYXJnc0FyZ3VtZW50TmVlZENhc3Q9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuc291cmNlPTEuNQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWwubG9nZ2Vycy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LnVpLnByZWZzIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWwubG9nZ2Vycy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LnVpLnByZWZzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg4MWRiN2EKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbC5sb2dnZXJzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQudWkucHJlZnMKQEAgLTAsMCArMSw1MCBAQAorI01vbiBGZWIgMjUgMTI6Mjk6MjMgUFNUIDIwMDgKK2NsZWFudXAuYWRkX2RlZmF1bHRfc2VyaWFsX3ZlcnNpb25faWQ9dHJ1ZQorY2xlYW51cC5hZGRfZ2VuZXJhdGVkX3NlcmlhbF92ZXJzaW9uX2lkPWZhbHNlCitjbGVhbnVwLmFkZF9taXNzaW5nX2Fubm90YXRpb25zPXRydWUKK2NsZWFudXAuYWRkX21pc3NpbmdfZGVwcmVjYXRlZF9hbm5vdGF0aW9ucz10cnVlCitjbGVhbnVwLmFkZF9taXNzaW5nX25sc190YWdzPWZhbHNlCitjbGVhbnVwLmFkZF9taXNzaW5nX292ZXJyaWRlX2Fubm90YXRpb25zPXRydWUKK2NsZWFudXAuYWRkX3NlcmlhbF92ZXJzaW9uX2lkPWZhbHNlCitjbGVhbnVwLmFsd2F5c191c2VfYmxvY2tzPXRydWUKK2NsZWFudXAuYWx3YXlzX3VzZV9wYXJlbnRoZXNlc19pbl9leHByZXNzaW9ucz10cnVlCitjbGVhbnVwLmFsd2F5c191c2VfdGhpc19mb3Jfbm9uX3N0YXRpY19maWVsZF9hY2Nlc3M9ZmFsc2UKK2NsZWFudXAuYWx3YXlzX3VzZV90aGlzX2Zvcl9ub25fc3RhdGljX21ldGhvZF9hY2Nlc3M9ZmFsc2UKK2NsZWFudXAuY29udmVydF90b19lbmhhbmNlZF9mb3JfbG9vcD10cnVlCitjbGVhbnVwLmZvcm1hdF9zb3VyY2VfY29kZT10cnVlCitjbGVhbnVwLm1ha2VfbG9jYWxfdmFyaWFibGVfZmluYWw9dHJ1ZQorY2xlYW51cC5tYWtlX3BhcmFtZXRlcnNfZmluYWw9dHJ1ZQorY2xlYW51cC5tYWtlX3ByaXZhdGVfZmllbGRzX2ZpbmFsPXRydWUKK2NsZWFudXAubWFrZV92YXJpYWJsZV9kZWNsYXJhdGlvbnNfZmluYWw9dHJ1ZQorY2xlYW51cC5uZXZlcl91c2VfYmxvY2tzPWZhbHNlCitjbGVhbnVwLm5ldmVyX3VzZV9wYXJlbnRoZXNlc19pbl9leHByZXNzaW9ucz1mYWxzZQorY2xlYW51cC5vcmdhbml6ZV9pbXBvcnRzPXRydWUKK2NsZWFudXAucXVhbGlmeV9zdGF0aWNfZmllbGRfYWNjZXNzZXNfd2l0aF9kZWNsYXJpbmdfY2xhc3M9ZmFsc2UKK2NsZWFudXAucXVhbGlmeV9zdGF0aWNfbWVtYmVyX2FjY2Vzc2VzX3Rocm91Z2hfaW5zdGFuY2VzX3dpdGhfZGVjbGFyaW5nX2NsYXNzPXRydWUKK2NsZWFudXAucXVhbGlmeV9zdGF0aWNfbWVtYmVyX2FjY2Vzc2VzX3Rocm91Z2hfc3VidHlwZXNfd2l0aF9kZWNsYXJpbmdfY2xhc3M9dHJ1ZQorY2xlYW51cC5xdWFsaWZ5X3N0YXRpY19tZW1iZXJfYWNjZXNzZXNfd2l0aF9kZWNsYXJpbmdfY2xhc3M9dHJ1ZQorY2xlYW51cC5xdWFsaWZ5X3N0YXRpY19tZXRob2RfYWNjZXNzZXNfd2l0aF9kZWNsYXJpbmdfY2xhc3M9ZmFsc2UKK2NsZWFudXAucmVtb3ZlX3ByaXZhdGVfY29uc3RydWN0b3JzPXRydWUKK2NsZWFudXAucmVtb3ZlX3RyYWlsaW5nX3doaXRlc3BhY2VzPXRydWUKK2NsZWFudXAucmVtb3ZlX3RyYWlsaW5nX3doaXRlc3BhY2VzX2FsbD10cnVlCitjbGVhbnVwLnJlbW92ZV90cmFpbGluZ193aGl0ZXNwYWNlc19pZ25vcmVfZW1wdHk9ZmFsc2UKK2NsZWFudXAucmVtb3ZlX3VubmVjZXNzYXJ5X2Nhc3RzPXRydWUKK2NsZWFudXAucmVtb3ZlX3VubmVjZXNzYXJ5X25sc190YWdzPXRydWUKK2NsZWFudXAucmVtb3ZlX3VudXNlZF9pbXBvcnRzPXRydWUKK2NsZWFudXAucmVtb3ZlX3VudXNlZF9sb2NhbF92YXJpYWJsZXM9dHJ1ZQorY2xlYW51cC5yZW1vdmVfdW51c2VkX3ByaXZhdGVfZmllbGRzPXRydWUKK2NsZWFudXAucmVtb3ZlX3VudXNlZF9wcml2YXRlX21lbWJlcnM9dHJ1ZQorY2xlYW51cC5yZW1vdmVfdW51c2VkX3ByaXZhdGVfbWV0aG9kcz10cnVlCitjbGVhbnVwLnJlbW92ZV91bnVzZWRfcHJpdmF0ZV90eXBlcz10cnVlCitjbGVhbnVwLnNvcnRfbWVtYmVycz1mYWxzZQorY2xlYW51cC5zb3J0X21lbWJlcnNfYWxsPWZhbHNlCitjbGVhbnVwLnVzZV9ibG9ja3M9dHJ1ZQorY2xlYW51cC51c2VfYmxvY2tzX29ubHlfZm9yX3JldHVybl9hbmRfdGhyb3c9ZmFsc2UKK2NsZWFudXAudXNlX3BhcmVudGhlc2VzX2luX2V4cHJlc3Npb25zPWZhbHNlCitjbGVhbnVwLnVzZV90aGlzX2Zvcl9ub25fc3RhdGljX2ZpZWxkX2FjY2Vzcz1mYWxzZQorY2xlYW51cC51c2VfdGhpc19mb3Jfbm9uX3N0YXRpY19maWVsZF9hY2Nlc3Nfb25seV9pZl9uZWNlc3Nhcnk9dHJ1ZQorY2xlYW51cC51c2VfdGhpc19mb3Jfbm9uX3N0YXRpY19tZXRob2RfYWNjZXNzPWZhbHNlCitjbGVhbnVwLnVzZV90aGlzX2Zvcl9ub25fc3RhdGljX21ldGhvZF9hY2Nlc3Nfb25seV9pZl9uZWNlc3Nhcnk9dHJ1ZQorY2xlYW51cF9wcm9maWxlPV9yZWxlbmcgY29kZSBjbGVhbnVwCitjbGVhbnVwX3NldHRpbmdzX3ZlcnNpb249MgorZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsLmxvZ2dlcnMvTUVUQS1JTkYvTUFOSUZFU1QuTUYgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbC5sb2dnZXJzL01FVEEtSU5GL01BTklGRVNULk1GCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE1MDczYzEKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbC5sb2dnZXJzL01FVEEtSU5GL01BTklGRVNULk1GCkBAIC0wLDAgKzEsMjAgQEAKK01hbmlmZXN0LVZlcnNpb246IDEuMAorQnVuZGxlLU1hbmlmZXN0VmVyc2lvbjogMgorQnVuZGxlLU5hbWU6ICVwbHVnaW5OYW1lCitCdW5kbGUtU3ltYm9saWNOYW1lOiBvcmcuZWNsaXBzZS5zdGVtLnV0aWwubG9nZ2VycztzaW5nbGV0b246PXRydWUKK0J1bmRsZS1WZXJzaW9uOiAxLjIuMQorQnVuZGxlLUFjdGl2YXRvcjogb3JnLmVjbGlwc2Uuc3RlbS51dGlsLmxvZ2dlcnMuQWN0aXZhdG9yCitCdW5kbGUtVmVuZG9yOiAlcHJvdmlkZXJOYW1lCitCdW5kbGUtTG9jYWxpemF0aW9uOiBwbHVnaW4KK1JlcXVpcmUtQnVuZGxlOiBvcmcuZWNsaXBzZS5iaXJ0LmNoYXJ0LmVuZ2luZTt2aXNpYmlsaXR5Oj1yZWV4cG9ydCwKKyBvcmcuZWNsaXBzZS5iaXJ0LmNvcmUudWksCisgb3JnLmVjbGlwc2Uuc3RlbS51aSwKKyBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMsCisgb3JnLmVjbGlwc2Uuc3RlbS5qb2JzLAorIG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscywKKyBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMubXVsdGlwb3B1bGF0aW9uCitCdW5kbGUtQWN0aXZhdGlvblBvbGljeTogbGF6eQorRXhwb3J0LVBhY2thZ2U6IG9yZy5lY2xpcHNlLnN0ZW0udXRpbC5sb2dnZXJzLAorIG9yZy5lY2xpcHNlLnN0ZW0udXRpbC5sb2dnZXJzLnV0aWwsCisgb3JnLmVjbGlwc2Uuc3RlbS51dGlsLmxvZ2dlcnMudmlld3MKK0J1bmRsZS1SZXF1aXJlZEV4ZWN1dGlvbkVudmlyb25tZW50OiBKMlNFLTEuNQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWwubG9nZ2Vycy9idWlsZC5wcm9wZXJ0aWVzIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWwubG9nZ2Vycy9idWlsZC5wcm9wZXJ0aWVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFlMmNmZTgKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbC5sb2dnZXJzL2J1aWxkLnByb3BlcnRpZXMKQEAgLTAsMCArMSwxMSBAQAorc291cmNlLi4gPSBzcmMvCitvdXRwdXQuLiA9IGJpbi8KK2Jpbi5pbmNsdWRlcyA9IHBsdWdpbi54bWwsXAorICAgICAgICAgICAgICAgTUVUQS1JTkYvLFwKKyAgICAgICAgICAgICAgIC4sXAorICAgICAgICAgICAgICAgaWNvbnMvLFwKKyAgICAgICAgICAgICAgIHBsdWdpbi5wcm9wZXJ0aWVzLFwKKyAgICAgICAgICAgICAgIHJlc291cmNlcy8sXAorICAgICAgICAgICAgICAgcGx1Z2luX2RlLnByb3BlcnRpZXMsXAorICAgICAgICAgICAgICAgcGx1Z2luX2tyLnByb3BlcnRpZXMsXAorICAgICAgICAgICAgICAgcGx1Z2luX3poLnByb3BlcnRpZXMKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsLmxvZ2dlcnMvaWNvbnMvc2FtcGxlLmdpZiBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsLmxvZ2dlcnMvaWNvbnMvc2FtcGxlLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNGZiM2M5Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWwubG9nZ2Vycy9pY29ucy9zYW1wbGUuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsLmxvZ2dlcnMvcGx1Z2luLnByb3BlcnRpZXMgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbC5sb2dnZXJzL3BsdWdpbi5wcm9wZXJ0aWVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEyYmNkNmIKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbC5sb2dnZXJzL3BsdWdpbi5wcm9wZXJ0aWVzCkBAIC0wLDAgKzEsOCBAQAorCitwbHVnaW5OYW1lID0gU1RFTSBMb2dnaW5nIFV0aWxpdHkKK3Byb3ZpZGVyTmFtZSA9IEVjbGlwc2Uub3JnCisKKyMgQWN0aW9ucworCitfVUlfQ1NWX0xvZ2dlciA9IENTViBMb2dnZXIKK19VSV9Mb2dnaW5nID0gTG9nZ2luZwpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWwubG9nZ2Vycy9wbHVnaW4ueG1sIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWwubG9nZ2Vycy9wbHVnaW4ueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU3OWIyNzkKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbC5sb2dnZXJzL3BsdWdpbi54bWwKQEAgLTAsMCArMSw0NSBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzw/ZWNsaXBzZSB2ZXJzaW9uPSIzLjIiPz4KKzxwbHVnaW4+CisgICA8ZXh0ZW5zaW9uCisgICAgICAgICBpZD0ib3JnLmVjbGlwc2Uuc3RlbS51aS5TVEVNUGVyc3BlY3RpdmUiCisgICAgICAgICBwb2ludD0ib3JnLmVjbGlwc2UudWkucGVyc3BlY3RpdmVzIj4KKyAgIDwvZXh0ZW5zaW9uPgorCisgICA8ZXh0ZW5zaW9uCisgICAgICAgICBwb2ludD0ib3JnLmVjbGlwc2UudWkudmlld3MiPgorICAgICAgPHZpZXcKKyAgICAgICAgICAgIGFsbG93TXVsdGlwbGU9InRydWUiCisgICAgICAgICAgICBjYXRlZ29yeT0ib3JnLmVjbGlwc2Uuc3RlbS51aS52aWV3cyIKKyAgICAgICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS5zdGVtLnV0aWwubG9nZ2Vycy52aWV3cy5DU1ZMb2dnZXJWaWV3IgorICAgICAgICAgICAgaWNvbj0iaWNvbnMvc2FtcGxlLmdpZiIKKyAgICAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5zdGVtLnV0aWwubG9nZ2VycyIKKyAgICAgICAgICAgIG5hbWU9IiVfVUlfQ1NWX0xvZ2dlciI+CisgICAgICAgICBSZXBvcnRzCisgICAgICA8L3ZpZXc+CisgICAgICAKKyAgIDwvZXh0ZW5zaW9uPgorICAgPGV4dGVuc2lvbgorICAgICAgICAgcG9pbnQ9Im9yZy5lY2xpcHNlLnVpLnBvcHVwTWVudXMiPgorICAgICAgPHZpZXdlckNvbnRyaWJ1dGlvbgorICAgICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLnN0ZW0udXRpbC5sb2dnZXJzLnZpZXdzIgorICAgICAgICAgICAgdGFyZ2V0SUQ9Im9yZy5lY2xpcHNlLnN0ZW0udWkudmlld3MuZ2VvZ3JhcGhpYy5tYXAuY29udGV4dCI+CisgICAgICAgICA8YWN0aW9uCisgICAgICAgICAgICAgICBjbGFzcz0ib3JnLmVjbGlwc2Uuc3RlbS51dGlsLmxvZ2dlcnMudmlld3MuUmVwb3J0c0NvbnRleHRNZW51QWN0aW9uIgorICAgICAgICAgICAgICAgaWQ9IkNTVkxvZ2dlciIKKyAgICAgICAgICAgICAgIGxhYmVsPSIlX1VJX0NTVl9Mb2dnZXIiCisgICAgICAgICAgICAgICBtZW51YmFyUGF0aD0icmVwb3J0cy9hZGRpdGlvbnMiCisgICAgICAgICAgICAgICBzdGF0ZT0idHJ1ZSI+CisgICAgICAgICA8L2FjdGlvbj4KKyAgICAgIDwvdmlld2VyQ29udHJpYnV0aW9uPgorICAgPC9leHRlbnNpb24+CisKKwk8ZXh0ZW5zaW9uCisgICAgICAgICBwb2ludD0ib3JnLmVjbGlwc2UudWkucHJlZmVyZW5jZVBhZ2VzIj4KKyAgICAgIDxwYWdlCisgICAgIAkgICAgY2F0ZWdvcnk9Im9yZy5lY2xpcHNlLnN0ZW0udWkucHJlZmVyZW5jZXMuU1RFTVByZWZlcmVuY2VQYWdlIgorICAgICAgICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLnN0ZW0udXRpbC5sb2dnZXJzLnByZWZlcmVuY2VzLkxvZ2dpbmdQcmVmZXJlbmNlUGFnZSIKKyAgICAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5zdGVtLnV0aWwubG9nZ2Vycy5wcmVmZXJlbmNlcy5Mb2dnaW5nUHJlZmVyZW5jZVBhZ2UiCisgICAgICAgICAgICBuYW1lPSIlX1VJX0xvZ2dpbmciLz4KKyAgICA8L2V4dGVuc2lvbj4KKzwvcGx1Z2luPgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWwubG9nZ2Vycy9wbHVnaW5fZGUucHJvcGVydGllcyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsLmxvZ2dlcnMvcGx1Z2luX2RlLnByb3BlcnRpZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTJlY2IxMAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsLmxvZ2dlcnMvcGx1Z2luX2RlLnByb3BlcnRpZXMKQEAgLTAsMCArMSw4IEBACisKK3BsdWdpbk5hbWU9U1RFTSBMb2dnaW5nIFV0aWxpdHkKK3Byb3ZpZGVyTmFtZT1FY2xpcHNlLm9yZworCisjIEFjdGlvbnMKKworX1VJX0NTVl9Mb2dnZXI9Q1NWIExvZ2dlcgorX1VJX0xvZ2dpbmc9TG9nZ2luZwpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWwubG9nZ2Vycy9wbHVnaW5fa3IucHJvcGVydGllcyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsLmxvZ2dlcnMvcGx1Z2luX2tyLnByb3BlcnRpZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmNiNjY4ZAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsLmxvZ2dlcnMvcGx1Z2luX2tyLnByb3BlcnRpZXMKQEAgLTAsMCArMSw4IEBACisKK3BsdWdpbk5hbWU9U1RFTSBcdWI4NWNcdWFlNDUgXHVjNzIwXHVkMmY4XHViOWFjXHVkMmYwCitwcm92aWRlck5hbWU9RWNsaXBzZS5vcmcKKworIyBBY3Rpb25zCisKK19VSV9DU1ZfTG9nZ2VyPUNTViBMb2dnZXIKK19VSV9Mb2dnaW5nPVx1Yjg1Y1x1YWU0NQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWwubG9nZ2Vycy9wbHVnaW5femgucHJvcGVydGllcyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsLmxvZ2dlcnMvcGx1Z2luX3poLnByb3BlcnRpZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmNkZjJiYgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsLmxvZ2dlcnMvcGx1Z2luX3poLnByb3BlcnRpZXMKQEAgLTAsMCArMSw4IEBACisKK3BsdWdpbk5hbWU9U1RFTVx1NjVlNVx1NWZkN1x1NWI5ZVx1NzUyOFx1N2EwYlx1NWU4ZgorcHJvdmlkZXJOYW1lPUVjbGlwc2Uub3JnCisKKyMgQWN0aW9ucworCitfVUlfQ1NWX0xvZ2dlcj1DVlNcdTY1ZTVcdTVmZDdcdTUxODVcdTViYjkKK19VSV9Mb2dnaW5nPVx1OGJiMFx1NWY1NQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWwubG9nZ2Vycy9yZXNvdXJjZXMvc291cmNlLmNzcyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsLmxvZ2dlcnMvcmVzb3VyY2VzL3NvdXJjZS5jc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzM0NWI1MAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsLmxvZ2dlcnMvcmVzb3VyY2VzL3NvdXJjZS5jc3MKQEAgLTAsMCArMSw3IEBACitBIHtjb2xvcjogIzAwMDsgdGV4dC1kZWNvcmF0aW9uOiBub25lO30KKy5pZEhlYWRlciB7YmFja2dyb3VuZC1jb2xvcjojMDBmZmZmOyBmb250LXdlaWdodDogYm9sZDt9CisuaWRCb2R5IHtiYWNrZ3JvdW5kLWNvbG9yOiNjOGZmZmY7fQorLmRjQm9keSB7YmFja2dyb3VuZC1jb2xvcjojZTFmZmUxO30KKy5kY0hlYWRlciB7YmFja2dyb3VuZC1jb2xvcjojYzhmZmM4O30KKy5zY2VuYXJpbyB7YmFja2dyb3VuZC1jb2xvcjojYzhjOGZmO30KKy5ibGFuayB7YmFja2dyb3VuZC1jb2xvcjogI2ZmZjt9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWwubG9nZ2Vycy9yZXNvdXJjZXMvc291cmNlLmpzIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWwubG9nZ2Vycy9yZXNvdXJjZXMvc291cmNlLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE1ZjlmMjEKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbC5sb2dnZXJzL3Jlc291cmNlcy9zb3VyY2UuanMKQEAgLTAsMCArMSwxMTkgQEAKK2Z1bmN0aW9uIHRvZ2dsZVJvdyh0ciwgb3BlbikKK3sKKwlpZiAob3BlbiA9PSAxKSB7CisJCXRyLnN0eWxlLmRpc3BsYXkgPSAndGFibGUtcm93JzsKKwl9IGVsc2UgeworCQl0ci5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnOworCX0KK30KKworZnVuY3Rpb24gZ2V0VmlzaWJsZVN0YXR1c05vZGUobm9kZSkKK3sKKwl2YXIgYXR0ciA9IG5vZGUuZ2V0QXR0cmlidXRlTm9kZSgnc2hvd1JvdycpOworCWlmIChhdHRyID09IG51bGwpIHsKKwkJYXR0ciA9IGRvY3VtZW50LmNyZWF0ZUF0dHJpYnV0ZSgnc2hvd1JvdycpCisJCWF0dHIubm9kZVZhbHVlID0gJzEnOworCQlub2RlLnNldEF0dHJpYnV0ZU5vZGUoYXR0cik7CisJfQorCXJldHVybiBhdHRyOworfQorCitmdW5jdGlvbiB0b2dnbGVCdXR0b24obm9kZSxzdGF0ZSkKK3sKKwl2YXIgbm9kZVRleHQgPSBub2RlLmlubmVySFRNTC5zdWJzdHJpbmcoMSk7CisKKwljb25zb2xlLmxvZyhub2RlVGV4dCk7CisKKwlpZiAoc3RhdGUgPT0gMSkgeworCQlub2RlLmlubmVySFRNTCA9ICItIitub2RlVGV4dDsKKwl9IGVsc2UgeworCQlub2RlLmlubmVySFRNTCA9ICIrIitub2RlVGV4dDsKKwl9Cit9CisKK2Z1bmN0aW9uIHRvZ2dsZUlkZW50aWZpYWJsZShub2RlLGJ1dHRvbk5vZGUpCit7CisJdmFyIHZpc1N0YXR1c05vZGUgPSBnZXRWaXNpYmxlU3RhdHVzTm9kZShub2RlKTsKKworCXZhciBzdGF0ZTsKKwl2YXIgZm9yY2VDbG9zZTsKKwlpZiAodmlzU3RhdHVzTm9kZS5ub2RlVmFsdWUgPT0gMSkgeworCQlzdGF0ZSA9IDA7CisJCWZvcmNlQ2xvc2UgPSB0cnVlOworCX0gZWxzZSB7CisJCXN0YXRlID0gMTsKKwkJZm9yY2VDbG9zZSA9IGZhbHNlOworCX0KKworCXRvZ2dsZUJ1dHRvbihidXR0b25Ob2RlLHN0YXRlKTsKKworCXZpc1N0YXR1c05vZGUubm9kZVZhbHVlID0gc3RhdGU7CisKKwl2YXIgdHIgPSBub2RlOworCXdoaWxlICh0ciA9IHRyLm5leHRTaWJsaW5nKSB7CisJCWlmICh0ci50YWdOYW1lID09ICJUUiIpIHsKKwkJCWlmICh0ci5pZC5zZWFyY2goJ1RJVExFX1JPVycpID49IDApIHsKKwkJCQlicmVhazsKKwkJCX0KKworCQkJdG9nZ2xlUm93KHRyLHN0YXRlKTsKKworCQkJaWYgKHRyLmlkLnNlYXJjaCgnRFVCTElOQ09SRScpID49IDApIHsKKwkJCQl0b2dnbGVEdWJsaW5Db3JlKHRyLGZhbHNlLGZvcmNlQ2xvc2UpOworCQkJCWJyZWFrOworCQkJfQorCQl9CisJfSAgICAJCisKK30KKworZnVuY3Rpb24gdG9nZ2xlRHVibGluQ29yZShub2RlLCB0b2dnbGUsIGZvcmNlQ2xvc2UpCit7CisJdmFyIHZpc1N0YXR1c05vZGUgPSBnZXRWaXNpYmxlU3RhdHVzTm9kZShub2RlKTsKKworCXZhciBzdGF0ZSA9IDA7CisKKwlpZiAoIWZvcmNlQ2xvc2UpIHsKKwkJaWYgKHRvZ2dsZSkgeworCQkJaWYgKHZpc1N0YXR1c05vZGUubm9kZVZhbHVlID09IDEpIHsKKwkJCQlzdGF0ZSA9IDA7CisJCQl9IGVsc2UgeworCQkJCXN0YXRlID0gMTsKKwkJCX0KKwkJCXZpc1N0YXR1c05vZGUubm9kZVZhbHVlID0gc3RhdGU7CisJCX0gZWxzZSB7CisJCQlzdGF0ZSA9IHZpc1N0YXR1c05vZGUubm9kZVZhbHVlOworCQl9CisJfQorCisJdmFyIHRyID0gbm9kZTsKKwl3aGlsZSAodHIgPSB0ci5uZXh0U2libGluZykgeworCQlpZiAodHIudGFnTmFtZSA9PSAiVFIiKSB7CisJCQlpZiAodHIuaWQuc2VhcmNoKCdEVUJMSU5DT1JFJykgPCAwKSB7CisJCQkJYnJlYWs7CisJCQl9CisKKwkJCXRvZ2dsZVJvdyh0ciwgc3RhdGUpOworCQl9CisJfSAgICAJCQkKK30KKworCitmdW5jdGlvbiB0b2dnbGUobm9kZSkKK3sKKwl2YXIgdGl0bGVSb3cgPSBub2RlLnBhcmVudE5vZGUucGFyZW50Tm9kZTsKKwl0b2dnbGVJZGVudGlmaWFibGUodGl0bGVSb3csbm9kZSk7Cit9CisKKworZnVuY3Rpb24gY29sbGFwc2VEdWJsaW5Db3JlcygpCit7CisJdmFyIG5vZGVzID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ3RyJyk7CisJZm9yICh2YXIgaWR4PTA7IGlkeDxub2Rlcy5sZW5ndGg7IGlkeCsrKSB7CisJCXZhciBub2RlID0gbm9kZXNbaWR4XTsKKwkJaWYgKG5vZGUuaWQuc2VhcmNoKCdEVUJMSU5DT1JFX1JPV18wJykgPj0gMCkgeworCQkJdG9nZ2xlRHVibGluQ29yZShub2RlLHRydWUsZmFsc2UpOworCQl9CisJfQorfQorCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbC5sb2dnZXJzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3V0aWwvbG9nZ2Vycy9BY3RpdmF0b3IuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsLmxvZ2dlcnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdXRpbC9sb2dnZXJzL0FjdGl2YXRvci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAwYmRhNTcKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbC5sb2dnZXJzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3V0aWwvbG9nZ2Vycy9BY3RpdmF0b3IuamF2YQpAQCAtMCwwICsxLDE0NyBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnV0aWwubG9nZ2VyczsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNiwgMjAwNywgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU3RhdHVzOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnJlc291cmNlLkltYWdlRGVzY3JpcHRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5wbHVnaW4uQWJzdHJhY3RVSVBsdWdpbjsKK2ltcG9ydCBvcmcub3NnaS5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dDsKKworLyoqCisgKiBUaGUgYWN0aXZhdG9yIGNsYXNzIGNvbnRyb2xzIHRoZSBwbHVnLWluIGxpZmUgY3ljbGUKKyAqLworcHVibGljIGNsYXNzIEFjdGl2YXRvciBleHRlbmRzIEFic3RyYWN0VUlQbHVnaW4geworCisJLyoqCisJICogVGhlIHBsdWctaW4gSUQKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBQTFVHSU5fSUQgPSAib3JnLmVjbGlwc2Uuc3RlbS51dGlsLmxvZ2dlcnMiOyAvLyROT04tTkxTLTEkCisKKwkvLyBUaGUgc2hhcmVkIGluc3RhbmNlCisJcHJpdmF0ZSBzdGF0aWMgQWN0aXZhdG9yIHBsdWdpbjsKKworCS8qKgorCSAqIFRoZSBjb25zdHJ1Y3RvcgorCSAqLworCXB1YmxpYyBBY3RpdmF0b3IoKSB7CisJCXBsdWdpbiA9IHRoaXM7CisJfQorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS51aS5wbHVnaW4uQWJzdHJhY3RVSVBsdWdpbiNzdGFydChvcmcub3NnaS5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dCkKKwkgKi8KKwlwdWJsaWMgdm9pZCBzdGFydChCdW5kbGVDb250ZXh0IGNvbnRleHQpIHRocm93cyBFeGNlcHRpb24geworCQlzdXBlci5zdGFydChjb250ZXh0KTsKKwl9CisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnVpLnBsdWdpbi5BYnN0cmFjdFVJUGx1Z2luI3N0b3Aob3JnLm9zZ2kuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHQpCisJICovCisJcHVibGljIHZvaWQgc3RvcChCdW5kbGVDb250ZXh0IGNvbnRleHQpIHRocm93cyBFeGNlcHRpb24geworCQlwbHVnaW4gPSBudWxsOworCQlzdXBlci5zdG9wKGNvbnRleHQpOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIHNoYXJlZCBpbnN0YW5jZQorCSAqIAorCSAqIEByZXR1cm4gdGhlIHNoYXJlZCBpbnN0YW5jZQorCSAqLworCXB1YmxpYyBzdGF0aWMgQWN0aXZhdG9yIGdldERlZmF1bHQoKSB7CisJCXJldHVybiBwbHVnaW47CisJfQorCisJLyoqCisJICogUmV0dXJucyBhbiBpbWFnZSBkZXNjcmlwdG9yIGZvciB0aGUgaW1hZ2UgZmlsZSBhdCB0aGUgZ2l2ZW4gcGx1Zy1pbgorCSAqIHJlbGF0aXZlIHBhdGgKKwkgKiAKKwkgKiBAcGFyYW0gcGF0aAorCSAqICAgICAgICAgICAgdGhlIHBhdGgKKwkgKiBAcmV0dXJuIHRoZSBpbWFnZSBkZXNjcmlwdG9yCisJICovCisJcHVibGljIHN0YXRpYyBJbWFnZURlc2NyaXB0b3IgZ2V0SW1hZ2VEZXNjcmlwdG9yKFN0cmluZyBwYXRoKSB7CisJCXJldHVybiBpbWFnZURlc2NyaXB0b3JGcm9tUGx1Z2luKFBMVUdJTl9JRCwgcGF0aCk7CisJfQorCisJLyoqCisJICogTG9nIGFuIGVycm9yIHRvIHRoZSBJTG9nIGZvciB0aGlzIHBsdWdpbgorCSAqIAorCSAqIEBwYXJhbSBtZXNzYWdlCisJICogICAgICAgICAgICB0aGUgbG9jYWxpemVkIGVycm9yIG1lc3NhZ2UgdGV4dAorCSAqIEBwYXJhbSBleGNlcHRpb24KKwkgKiAgICAgICAgICAgIHRoZSBhc3NvY2lhdGVkIGV4Y2VwdGlvbiwgb3IgbnVsbAorCSAqLworCXB1YmxpYyBzdGF0aWMgdm9pZCBsb2dFcnJvcihTdHJpbmcgbWVzc2FnZSwgVGhyb3dhYmxlIGV4Y2VwdGlvbikgeworCQkvLyBEbyB3ZSBoYXZlIGEgcGx1Z2luPworCQlpZiAocGx1Z2luICE9IG51bGwpIHsKKwkJCS8vIFllcworCQkJcGx1Z2luLmdldExvZygpLmxvZygKKwkJCQkJbmV3IFN0YXR1cyhJU3RhdHVzLkVSUk9SLCBwbHVnaW4uZ2V0QnVuZGxlKCkKKwkJCQkJCQkuZ2V0U3ltYm9saWNOYW1lKCksIDAsIG1lc3NhZ2UsIGV4Y2VwdGlvbikpOworCQl9IGVsc2UgeworCQkJLy8gTm8KKwkJCVN5c3RlbS5vdXQucHJpbnRsbihtZXNzYWdlKTsKKwkJCS8vIEV4Y2VwdGlvbj8KKwkJCWlmIChleGNlcHRpb24gIT0gbnVsbCkgeworCQkJCS8vIFllcworCQkJCVN5c3RlbS5vdXQucHJpbnRsbihleGNlcHRpb24uZ2V0TWVzc2FnZSgpKTsKKwkJCX0gLy8gaWYKKwkJfQorCX0gLy8gbG9nRXJyb3IKKworCS8qKgorCSAqIExvZyBpbmZvcm1hdGlvbiB0byB0aGUgSUxvZyBmb3IgdGhpcyBwbHVnaW4KKwkgKiAKKwkgKiBAcGFyYW0gbWVzc2FnZQorCSAqICAgICAgICAgICAgdGhlIGxvY2FsaXplZCBpbmZvcm1hdGlvbiBtZXNzYWdlIHRleHQKKwkgKiBAcGFyYW0gZXhjZXB0aW9uCisJICogICAgICAgICAgICB0aGUgYXNzb2NpYXRlZCBleGNlcHRpb24sIG9yIG51bGwKKwkgKi8KKwlwdWJsaWMgc3RhdGljIHZvaWQgbG9nSW5mb3JtYXRpb24oU3RyaW5nIG1lc3NhZ2UsIFRocm93YWJsZSBleGNlcHRpb24pIHsKKwkJLy8gRG8gd2UgaGF2ZSBhIHBsdWdpbj8KKwkJaWYgKHBsdWdpbiAhPSBudWxsKSB7CisJCQkvLyBZZXMKKwkJCXBsdWdpbi5nZXRMb2coKS5sb2coCisJCQkJCW5ldyBTdGF0dXMoSVN0YXR1cy5JTkZPLCBwbHVnaW4uZ2V0QnVuZGxlKCkKKwkJCQkJCQkuZ2V0U3ltYm9saWNOYW1lKCksIDAsIG1lc3NhZ2UsIGV4Y2VwdGlvbikpOworCQl9IGVsc2UgeworCQkJLy8gTm8KKwkJCVN5c3RlbS5vdXQucHJpbnRsbihtZXNzYWdlKTsKKwkJCS8vIEV4Y2VwdGlvbj8KKwkJCWlmIChleGNlcHRpb24gIT0gbnVsbCkgeworCQkJCS8vIFllcworCQkJCVN5c3RlbS5vdXQucHJpbnRsbihleGNlcHRpb24uZ2V0TWVzc2FnZSgpKTsKKwkJCX0gLy8gaWYKKwkJfQorCX0gLy8gbG9nSW5mb3JtYXRpb24KKwkKKwkvKioKKwkgKiBMb2cgaW5mb3JtYXRpb24gdG8gdGhlIElMb2cgZm9yIHRoaXMgcGx1Z2luCisJICogVGhlIG1ldGhvZCBpcyBvdmVybG9hZGVkIHRvIGFsbG93IGZvciBsb2dJbmZvcm1hdGlvbiB3aXRob3V0IGFuIGVycm9yIAorCSAqIG1ldGhvZCBzZXRzIHRoZSBlcnJvciB0byBudWxsLiBUaGlzIHNob3VsZCBiZSB1c2VkIGluc3RlYWQgb2YgU3lzdGVtLm91dC5wcmludGxuCisJICogdGhyb3VnaG91dCB0aGUgY29kZS4KKwkgKiBAcGFyYW0gbWVzc2FnZQorCSAqICAgICAgICAgICAgdGhlIGxvY2FsaXplZCBpbmZvcm1hdGlvbiBtZXNzYWdlIHRleHQKKwkgKgorCSAqLworCXB1YmxpYyBzdGF0aWMgdm9pZCBsb2dJbmZvcm1hdGlvbihTdHJpbmcgbWVzc2FnZSkgeworCQlpZihwbHVnaW4gIT0gbnVsbCkgCisJCQlwbHVnaW4uZ2V0TG9nKCkubG9nKAorCQkJCW5ldyBTdGF0dXMoSVN0YXR1cy5JTkZPLCBwbHVnaW4uZ2V0QnVuZGxlKCkuZ2V0U3ltYm9saWNOYW1lKCksCisJCQkJCQkwLCBtZXNzYWdlLCBudWxsKSk7CisJCQllbHNlIAorCQkJCS8vIE5vCisJCQkJU3lzdGVtLm91dC5wcmludGxuKG1lc3NhZ2UpOworCX0gLy8gbG9nSW5mb3JtYXRpb24KKwkKK30gLy8gQWN0aXZhdG9yCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbC5sb2dnZXJzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3V0aWwvbG9nZ2Vycy9Nb25pdG9yUHJlZmVyZW5jZXMuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsLmxvZ2dlcnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdXRpbC9sb2dnZXJzL01vbml0b3JQcmVmZXJlbmNlcy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY4NWRkZTkKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbC5sb2dnZXJzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3V0aWwvbG9nZ2Vycy9Nb25pdG9yUHJlZmVyZW5jZXMuamF2YQpAQCAtMCwwICsxLDE3NCBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnV0aWwubG9nZ2VyczsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNyAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGphdmEudXRpbC5IYXNoU2V0OworaW1wb3J0IGphdmEudXRpbC5TZXQ7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGx1Z2luOworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QcmVmZXJlbmNlczsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuVVJJOworCisvKioKKyAqIFRoaXMgY2xhc3MgcmVwcmVzZW50cworICovCitwdWJsaWMgY2xhc3MgTW9uaXRvclByZWZlcmVuY2VzIHsKKworCVBsdWdpbiBwbHVnaW4gPSBBY3RpdmF0b3IuZ2V0RGVmYXVsdCgpOworCisJLyoqCisJICogdGhlIHVzZXJzIHByZWZlcmVuY2VzCisJICovCisJUHJlZmVyZW5jZXMgcHJlZnMgPSBwbHVnaW4uZ2V0UGx1Z2luUHJlZmVyZW5jZXMoKTsKKworCS8qKgorCSAqIFRoaXMgaXMgYSBsaXN0IG9mIGxvY2F0aW9uIElEcyBmcm9tIHRoZSB1c2VyIHJ1bnRpbWUgcHJlZmVyZW5jZXMgdGhhdAorCSAqIHJlbWVtYmVyIHdoYXQgbG9jYXRpb25zIHRoZSB1c2VyIHdhbnRzIHRvIG1vbml0b3IuIElmIG5vIHByZWZlcmVuY2VzCisJICogZXhpc3QgaXQgd2lsbCBjcmVhdGUgb25lIGZvciB0aGUgYWdncmVnYXRlZCBkYXRhIGF0IHRoZSB3b3JsZCBsZXZlbAorCSAqLworCXByaXZhdGUgU2V0PFN0cmluZz4gbW9uaXRvckxvY2F0aW9uUHJlZmVyZW5jZXMgPSBuZXcgSGFzaFNldDxTdHJpbmc+KCk7CisKKwkvKioKKwkgKiB0aGUgSUQgb2YgdGhlIGRlZmF1bHQgbG9jYXRpb24gdGhlIGxvY2F0aW9uIElEIGZvciB0aGUgYWdncmVnYXRlZCBkYXRhIGF0CisJICogdGhlIHdvcmxkIGxldmVsCisJICovCisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIERFRkFVTFRfTE9DQVRJT05fSUQgPSAic3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vbm9kZS9nZW8vcmVnaW9uL1paWiI7CisKKwkvKioKKwkgKiBQcmVmaXggdG8gYWxsIG5vZGUgVVJJJ3MKKwkgKi8KKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgVVJJX1BSRUZJWCA9ICJzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9ub2RlL2dlby9yZWdpb24vIjsKKworCS8qKgorCSAqIGFueSBwcmVmZXJlbmNlIGxvY2F0aW9uIGtleSBtdXN0IGNvbnRhaW4gdGhpcyBzdWJzdHJpbmcKKwkgKiAKKwkgKi8KKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgTE9DQVRJT05fS0VZX1NVQlNUUklORyA9ICJsb2NhdGlvbi4iOworCisJLyoqCisJICogdGhlIGtleSB0byB0aGUgZGVmYXVsdCBsb2NhdGlvbiBzaG91bGQgYWx3YXlzIGJlIGRlZmluZWQgYW5kIHNob3VsZCBwb2ludAorCSAqIHRvIHRoZSBsb2NhdGlvbiBJRCBmb3IgdGhlIGFnZ3JlZ2F0ZWQgZGF0YSBhdCB0aGUgd29ybGQgbGV2ZWwKKwkgKi8KKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgREVGQVVMVF9MT0NBVElPTl9LRVkgPSAiZGVmYXVsdC5sb2NhdGlvbklEIjsKKworCS8qKgorCSAqIAorCSAqLworCXB1YmxpYyBNb25pdG9yUHJlZmVyZW5jZXMoKSB7CisKKwkJaWYgKHByZWZzLmNvbnRhaW5zKERFRkFVTFRfTE9DQVRJT05fS0VZKSkgeworCQkJU3RyaW5nIHVyaSA9IHByZWZzLmdldFN0cmluZyhERUZBVUxUX0xPQ0FUSU9OX0tFWSk7CisJCQlpZiAodXJpICE9IERFRkFVTFRfTE9DQVRJT05fSUQpIHsKKwkJCQlzZXREZWZhdWx0TG9jYXRpb24oKTsKKwkJCX0gZWxzZSB7CisJCQkJbW9uaXRvckxvY2F0aW9uUHJlZmVyZW5jZXMuYWRkKHVyaSk7CisJCQl9CisJCX0gZWxzZSB7CisJCQkvLyBzZXQgdGhlIGRlZmF1bHQgSUQKKwkJCXNldERlZmF1bHRMb2NhdGlvbigpOworCQl9CisKKwkJLy8gbm93IGNoZWNrIHRoZSBvdGhlciBVUkkncworCQlTdHJpbmdbXSBhbGxLZXlzID0gcHJlZnMucHJvcGVydHlOYW1lcygpOworCQlmb3IgKGludCBpID0gMDsgaSA8IGFsbEtleXMubGVuZ3RoOyBpKyspIHsKKwkJCWlmIChhbGxLZXlzW2ldLmNvbnRhaW5zKExPQ0FUSU9OX0tFWV9TVUJTVFJJTkcpCisJCQkJCXx8IGFsbEtleXNbaV0uY29udGFpbnMoREVGQVVMVF9MT0NBVElPTl9LRVkpKSB7CisJCQkJU3RyaW5nIG5leHRJRCA9IHByZWZzLmdldFN0cmluZyhhbGxLZXlzW2ldKTsKKwkJCQltb25pdG9yTG9jYXRpb25QcmVmZXJlbmNlcy5hZGQobmV4dElEKTsKKwkJCX0KKwkJfSAvLyBmb3IgYWxsIGtleXMKKworCX0gLy8gY29uc3RydWN0b3IKKworCS8qKgorCSAqIAorCSAqLworCXB1YmxpYyB2b2lkIHNldERlZmF1bHRMb2NhdGlvbigpIHsKKwkJcHJlZnMuc2V0VmFsdWUoREVGQVVMVF9MT0NBVElPTl9LRVksIERFRkFVTFRfTE9DQVRJT05fSUQpOworCQltb25pdG9yTG9jYXRpb25QcmVmZXJlbmNlcy5hZGQoREVGQVVMVF9MT0NBVElPTl9JRCk7CisJCXBsdWdpbi5zYXZlUGx1Z2luUHJlZmVyZW5jZXMoKTsKKwl9CisKKwkvKioKKwkgKiAKKwkgKiBAcmV0dXJuIGEgc2V0IG9mIHByZWZlcnJlZCBsb2NhdGlvbnMgdG8gbW9uaXRvcgorCSAqLworCXB1YmxpYyBTZXQ8U3RyaW5nPiBnZXRNb25pdG9yTG9jYXRpb25QcmVmZXJlbmNlcygpIHsKKwkJcmV0dXJuIG1vbml0b3JMb2NhdGlvblByZWZlcmVuY2VzOworCX0KKworCS8qKgorCSAqIEBwYXJhbSBtb25pdG9yTG9jYXRpb25QcmVmZXJlbmNlcworCSAqLworCXB1YmxpYyB2b2lkIHNldE1vbml0b3JMb2NhdGlvblByZWZlcmVuY2VzKAorCQkJU2V0PFN0cmluZz4gbW9uaXRvckxvY2F0aW9uUHJlZmVyZW5jZXMpIHsKKwkJdGhpcy5tb25pdG9yTG9jYXRpb25QcmVmZXJlbmNlcyA9IG1vbml0b3JMb2NhdGlvblByZWZlcmVuY2VzOworCX0KKworCS8qKgorCSAqIEBwYXJhbSBuZXdJRAorCSAqLworCXB1YmxpYyB2b2lkIGFkZExvY2F0aW9uUHJlZihTdHJpbmcgbmV3SUQpIHsKKwkJaWYgKHByZWZzICE9IG51bGwpIHsKKwkJCS8vIGlzIGl0IHJlYWxseSBuZXc/CisKKwkJCWlmICghbW9uaXRvckxvY2F0aW9uUHJlZmVyZW5jZXMuY29udGFpbnMobmV3SUQpKSB7CisJCQkJLy8gd2UgdXNlIHRoZSB1cmkgYmVpbmcgYWRkZWQgdG8gZ2VuZXJhdGUgYSB1bmlxdWUga2V5CisJCQkJLy8gYnkgY29uY2F0ZW5hdGluZyAibG9jYXRpb24uIituZXdVUkkKKwkJCQkvLyBwcmVmZXJlbmNlcyBrZXlzIG11c3QgYmUgdW5pcXVlCisJCQkJLy8gdGhpcyBhbHNvIGd1YXJhbnRlZXMgd2UgbmV2ZXIgZHVwbGljYXRlIHRoZSBzYW1lIGxvY2F0aW9uCisJCQkJcHJlZnMuc2V0VmFsdWUoTE9DQVRJT05fS0VZX1NVQlNUUklORyArIG5ld0lELCBuZXdJRCk7CisJCQkJdGhpcy5tb25pdG9yTG9jYXRpb25QcmVmZXJlbmNlcy5hZGQobmV3SUQpOworCQkJCXBsdWdpbi5zYXZlUGx1Z2luUHJlZmVyZW5jZXMoKTsKKwkJCX0gLy8gaXQgSUQgaXMgcmVhbGx5IG5ldworCQl9IC8vIGlmIHByZWZzIG5vdCBudWxsCisJfSAvLyBhZGRMb2NhdGlvblByZWYKKworCS8qKgorCSAqIEBwYXJhbSBvbGRJRAorCSAqLworCXB1YmxpYyB2b2lkIHJlbW92ZUxvY2F0aW9uUHJlZihTdHJpbmcgb2xkSUQpIHsKKwkJaWYgKHByZWZzICE9IG51bGwpIHsKKwkJCS8vIGlzIGl0IHJlYWxseSBuZXc/CisJCQlpZiAoIW1vbml0b3JMb2NhdGlvblByZWZlcmVuY2VzLmNvbnRhaW5zKG9sZElEKSkKKwkJCQl0aGlzLm1vbml0b3JMb2NhdGlvblByZWZlcmVuY2VzLnJlbW92ZShvbGRJRCk7CisJCQkvLyBBY3RpdmF0b3IubG9nSW5mb3JtYXRpb24oIk1vbml0b3JQcmVmZXJlbmNlcygpIG5lZWQgbWV0aG9kIHRvIHJlbW92ZQorCQkJLy8gcHJlZmVyZW5jZSBuYW1lIHZhbHVlIHBhaXJzIGZvciAiK29sZElEKTsKKworCQkJLy8gZG9lcyBub3Qgd29yay4gTm8gcmVtb3ZlIG1ldGhvZD8KKwkJCS8vIHByZWZzLnNldFRvRGVmYXVsdChvbGRJRCk7CisJCQkvLyBwcmVmcy5zZXRWYWx1ZShvbGRJRCwgIiIpOworCQkJcGx1Z2luLnNhdmVQbHVnaW5QcmVmZXJlbmNlcygpOworCQl9IC8vIGlmIHByZWZzIG5vdCBudWxsCisJfSAvLyByZW1vdmVMb2NhdGlvblByZWYKKworCS8qKgorCSAqIHJlbW92ZXMgdGhlIHVyaSBwcmVmaXggZnJvbSBhbiBzdHJpbmcgSUQKKwkgKiAKKwkgKiBAcGFyYW0gdXJpCisJICogQHJldHVybiBVUklzdWZmaXggLSB0aGUgZ2VvZ3JhcGhpYyBjb2RlIHBhcnQgb2YgdGhlIHVyaQorCSAqLworCXB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldFVSSXN1ZmZpeChTdHJpbmcgdXJpKSB7CisJCVN0cmluZyByZXRWYWwgPSB1cmkucmVwbGFjZUFsbChVUklfUFJFRklYLCAiIik7CisJCXJldHVybiByZXRWYWw7CisJfS8vIGdldCB1cmkgc3VmZml4CisKKwkvKioKKwkgKiByZXR1cm5zIHRoZSBkZWZhdWx0IGxvY2F0aW9uIElEIGFzIGEgVVJJCisJICogCisJICogQHJldHVybiB0aGUgVVJJCisJICovCisJcHVibGljIHN0YXRpYyBVUkkgZ2V0RGVmYXVsdFVSSSgpIHsKKwkJcmV0dXJuIFVSSS5jcmVhdGVVUkkoREVGQVVMVF9MT0NBVElPTl9JRCk7CisJfQorCit9CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbC5sb2dnZXJzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3V0aWwvbG9nZ2Vycy9odG1sZ2VuZXJhdGlvbi9BLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbC5sb2dnZXJzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3V0aWwvbG9nZ2Vycy9odG1sZ2VuZXJhdGlvbi9BLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTA2ZGE0NQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsLmxvZ2dlcnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdXRpbC9sb2dnZXJzL2h0bWxnZW5lcmF0aW9uL0EuamF2YQpAQCAtMCwwICsxLDI3IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0udXRpbC5sb2dnZXJzLmh0bWxnZW5lcmF0aW9uOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDExIElCTSBDb3Jwb3JhdGlvbi4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworcHVibGljIGNsYXNzIEEgZXh0ZW5kcyBIdG1sRWxlbWVudCB7CisKKwkvKioKKwkgKiAKKwkgKiBAcGFyYW0gYXR0cgorCSAqIEBwYXJhbSB2YWwKKwkgKi8KKwlAU3VwcHJlc3NXYXJuaW5ncygibmxzIikJCisJcHVibGljIEEoU3RyaW5nIGF0dHIsIFN0cmluZyB2YWwpIHsKKwkJc3VwZXIoImEiLGF0dHIsdmFsKTsKKwl9CisKK30KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsLmxvZ2dlcnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdXRpbC9sb2dnZXJzL2h0bWxnZW5lcmF0aW9uL0JvZHkuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsLmxvZ2dlcnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdXRpbC9sb2dnZXJzL2h0bWxnZW5lcmF0aW9uL0JvZHkuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MjljMjY4Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWwubG9nZ2Vycy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91dGlsL2xvZ2dlcnMvaHRtbGdlbmVyYXRpb24vQm9keS5qYXZhCkBAIC0wLDAgKzEsMjQgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS51dGlsLmxvZ2dlcnMuaHRtbGdlbmVyYXRpb247CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTEgSUJNIENvcnBvcmF0aW9uLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworcHVibGljIGNsYXNzIEJvZHkgZXh0ZW5kcyBIdG1sRWxlbWVudCB7CisKKwkvKioKKwkgKiAKKwkgKi8KKwlAU3VwcHJlc3NXYXJuaW5ncygibmxzIikKKwlwdWJsaWMgQm9keSgpIHsKKwkJc3VwZXIoImJvZHkiKTsKKwl9CisKK30KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsLmxvZ2dlcnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdXRpbC9sb2dnZXJzL2h0bWxnZW5lcmF0aW9uL0hUTUxkb2N1bWVudC5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWwubG9nZ2Vycy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91dGlsL2xvZ2dlcnMvaHRtbGdlbmVyYXRpb24vSFRNTGRvY3VtZW50LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTBjYjJlNQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsLmxvZ2dlcnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdXRpbC9sb2dnZXJzL2h0bWxnZW5lcmF0aW9uL0hUTUxkb2N1bWVudC5qYXZhCkBAIC0wLDAgKzEsMTY1IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0udXRpbC5sb2dnZXJzLmh0bWxnZW5lcmF0aW9uOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDExIElCTSBDb3Jwb3JhdGlvbi4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworaW1wb3J0IGphdmEuaW8uRmlsZVdyaXRlcjsKK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OworaW1wb3J0IGphdmEudXRpbC5MaXN0OworCisvKioKKyAqIAorICogQGF1dGhvciBrYXVmbWFuCisgKgorICovCitAU3VwcHJlc3NXYXJuaW5ncygibmxzIikKK3B1YmxpYyBjbGFzcyBIVE1MZG9jdW1lbnQgeworCQorCS8qKgorCSAqIEh0bWwgRG9jdW1lbnQgaGVhZGVyCisJICovCisJcHVibGljIGZpbmFsIFN0cmluZyBIRUFERVIgPSAiPCFET0NUWVBFIGh0bWw+IisiXG4iOworCQorCS8qKgorCSAqIEhUTUwgdGFnIDxodG1sPgorCSAqLworCXB1YmxpYyBmaW5hbCBTdHJpbmcgSFRNTF9TVEFSVCA9ICI8aHRtbD4iOworCQorCS8qKgorCSAqIEhUTUwgdGFnIDwvaHRtbD4KKwkgKi8KKwlwdWJsaWMgZmluYWwgU3RyaW5nIEhUTUxfU1RPUCA9ICI8L2h0bWw+IjsKKwlwcm90ZWN0ZWQgTGlzdDxIdG1sRWxlbWVudD4gY29udGVudHMgPSBuZXcgQXJyYXlMaXN0PEh0bWxFbGVtZW50PigpOworCXByaXZhdGUgSHRtbCBodG1sID0gbmV3IEh0bWwoKTsKKwkKKwkKKwkKKwkvKioKKwkgKiAKKwkgKi8KKwlwdWJsaWMgSFRNTGRvY3VtZW50KCkgeworCQljb250ZW50cy5hZGQoaHRtbCk7CisJfQorCQorCS8qKgorCSAqIGFkZCBhbiBlbGVtZW50IHRvIHRoZSByb290IChodG1sKSBlbGVtZW50CisJICogQHBhcmFtIGVsZW1lbnQKKwkgKi8KKwlwdWJsaWMgdm9pZCBhZGQoSHRtbEVsZW1lbnQgZWxlbWVudCkgeworCQlodG1sLmFkZChlbGVtZW50KTsKKwl9CisJCisJCisJLyoqCisJICogCisJICogQHJldHVybiBjb250ZW50cyBhcyBhIFN0cmluZworCSAqLworCXB1YmxpYyBTdHJpbmcgZ2V0Q29udGVudHMoKSB7CisJCVN0cmluZ0J1ZmZlciBidWYgPSBuZXcgU3RyaW5nQnVmZmVyKEhFQURFUik7CisJCWZvcihpbnQgaSA9IDA7IGkgPCBjb250ZW50cy5zaXplKCk7IGkgKyspIHsKKwkJCUh0bWxFbGVtZW50IGVsZW1lbnQgPSBjb250ZW50cy5nZXQoaSk7CisJCQlidWYuYXBwZW5kKGVsZW1lbnQub3BlbigpKTsKKwkJCVN0cmluZyBkYXRhID0gZWxlbWVudC5nZXREYXRhKCk7CisJCQlpZihkYXRhICE9IG51bGwpIGJ1Zi5hcHBlbmQoZGF0YSk7CisJCQlidWYuYXBwZW5kKGVsZW1lbnQuZ2V0Q29udGVudHMoIiIpKTsKKwkJCWJ1Zi5hcHBlbmQoZWxlbWVudC5jbG9zZSgpKTsKKwkJfQorCSAgICByZXR1cm4gYnVmLnRvU3RyaW5nKCk7CisJfQorCisJLyoqCisJICogZm9yIHRlc3RpbmcKKwkgKiBAcGFyYW0gYXJncworCSAqLworCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKKwkJCisJCUhUTUxkb2N1bWVudCBkb2MgPSBuZXcgSFRNTGRvY3VtZW50KCk7CisJCQorCQlIZWFkIGhlYWQgPSBuZXcgSGVhZCgpOworCQlkb2MuYWRkKGhlYWQpOworCQlUaXRsZSB0aXRsZSA9IG5ldyBUaXRsZSgiU2ltdWxhdGlvbiBTdW1tYXJ5Iik7CisJCWhlYWQuYWRkKHRpdGxlKTsKKwkJCisJCUJvZHkgYm9keSA9IG5ldyBCb2R5KCk7CisJCWRvYy5hZGQoYm9keSk7CisJCVNwYW4gc3BhbiA9IG5ldyBTcGFuKCJzdHlsZSIsImZvbnQtd2VpZ2h0OiBib2xkOyIpOworCQlib2R5LmFkZChzcGFuKTsKKwkJCisJCVRhYmxlIHRhYmxlID0gbmV3IFRhYmxlKCJzdHlsZSIsInRleHQtYWxpZ246IGxlZnQ7IHdpZHRoOiAxMDAlOyIpOworCQl0YWJsZS5hZGRBdHRyaWJ1dGUoImJvcmRlciIsICIxIik7CisJCXRhYmxlLmFkZEF0dHJpYnV0ZSgiY2VsbHBhZGRpbmciLCAiMiIpOworCQl0YWJsZS5hZGRBdHRyaWJ1dGUoImNlbGxzcGFjaW5nIiwgIjIiKTsKKwkJZG9jLmFkZCh0YWJsZSk7CisJCQorCQlUYm9keSB0Ym9keSA9IG5ldyBUYm9keSgpOworCQl0YWJsZS5hZGQodGJvZHkpOworCQkKKwkJVFIgdHIgPSBuZXcgVFIoImFsaWduIiwiY2VudGVyIik7CisJCXRib2R5LmFkZCh0cik7CisJCQorCQlURCB0ZCA9IG5ldyBURCgic3R5bGUiLCJiYWNrZ3JvdW5kLWNvbG9yOiByZ2IoMTAyLCAyNTUsIDI1NSk7Iik7CisJCXRyLmFkZCh0ZCk7CisJCQorCQlTcGFuIHNwYW4yID0gbmV3IFNwYW4oInN0eWxlIiwiZm9udC13ZWlnaHQ6IGJvbGQ7Iik7CisJCXNwYW4yLnNldERhdGEoIlNURU0gU2ltdWxhdGlvbiBTdW1tYXJ5Iik7CisJCXRkLmFkZChzcGFuMik7CisJCQorCQkKKwkJVFIgdHIyID0gbmV3IFRSKCk7CisJCXRib2R5LmFkZCh0cjIpOworCQlURCB0ZDIgPSBuZXcgVEQoKTsKKwkJdHIyLmFkZCh0ZDIpOworCQlVTCB1bCA9IG5ldyBVTCgpOworCQl0ZDIuYWRkKHVsKTsKKwkJCisJCUxJIGxpMSA9IG5ldyBMSSgibW9kZWxBIik7CisJCUxJIGxpMiA9IG5ldyBMSSgibW9kZWxCIik7CisJCXVsLmFkZChsaTEpOworCQlVTCB1bDIgPSBuZXcgVUwoKTsKKwkJdWwuYWRkKHVsMik7CisJCXVsMi5hZGQobGkyKTsKKwkJVUwgdWwzID0gbmV3IFVMKCk7CisJCXVsMi5hZGQodWwzKTsKKwkJTEkgbGkyYSA9IG5ldyBMSSgiZGVjb3JhdG9yMSIpOworCQlMSSBsaTJiID0gbmV3IExJKCJkZWNvcmF0b3IyIik7CisJCXVsMy5hZGQobGkyYSk7CisJCXVsMy5hZGQobGkyYik7CisJCUxJIGxpMyA9IG5ldyBMSSgic2VxdWVuY2VyIik7CisJCUxJIGxpNCA9IG5ldyBMSSgic29sdmVyIik7CisJCXVsLmFkZChsaTMpOworCQl1bC5hZGQobGk0KTsKKwkJCisJCWRvYy53cml0ZURvY3VtZW50KCIvVXNlcnMvamhrYXVmL0Rlc2t0b3AvdGVzdC5odG1sIixkb2MuZ2V0Q29udGVudHMoKSk7IAorCQkvL1N5c3RlbS5vdXQucHJpbnRsbihkb2MuZ2V0Q29udGVudHMoKSk7CisJfS8vIG1haW4KKwkKKwkKKwkvKioKKwkgKiAKKwkgKiBAcGFyYW0gZmlsZU5hbWUKKwkgKiBAcGFyYW0gZG9jCisJICovCisJcHVibGljIHZvaWQgd3JpdGVEb2N1bWVudChTdHJpbmcgZmlsZU5hbWUsIFN0cmluZyBkb2MpIHsKKwkJdHJ5IHsKKwkJCUZpbGVXcml0ZXIgZncgPSBuZXcgRmlsZVdyaXRlcihmaWxlTmFtZSk7CisJCQlmdy53cml0ZShkb2MpOworCQkJZncuZmx1c2goKTsKKwkJCWZ3LmNsb3NlKCk7CisJCX0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CisJCQlTeXN0ZW0ub3V0LnByaW50bG4oIkVycm9yIHdyaXRpbmcgZmlsZSB0byAiK2ZpbGVOYW1lKTsKKwkJCWUucHJpbnRTdGFja1RyYWNlKCk7CisJCX0KKwkJCisJCQorCX0KKworfQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWwubG9nZ2Vycy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91dGlsL2xvZ2dlcnMvaHRtbGdlbmVyYXRpb24vSGVhZC5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWwubG9nZ2Vycy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91dGlsL2xvZ2dlcnMvaHRtbGdlbmVyYXRpb24vSGVhZC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY3ZTAyODMKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbC5sb2dnZXJzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3V0aWwvbG9nZ2Vycy9odG1sZ2VuZXJhdGlvbi9IZWFkLmphdmEKQEAgLTAsMCArMSwyNSBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnV0aWwubG9nZ2Vycy5odG1sZ2VuZXJhdGlvbjsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAxMSBJQk0gQ29ycG9yYXRpb24uCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKK3B1YmxpYyBjbGFzcyBIZWFkIGV4dGVuZHMgSHRtbEVsZW1lbnQgeworCisJLyoqCisJICogCisJICovCisJQFN1cHByZXNzV2FybmluZ3MoIm5scyIpCisJcHVibGljIEhlYWQoKSB7CisJCXN1cGVyKCJoZWFkIik7CisJfQorCit9CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbC5sb2dnZXJzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3V0aWwvbG9nZ2Vycy9odG1sZ2VuZXJhdGlvbi9IdG1sLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbC5sb2dnZXJzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3V0aWwvbG9nZ2Vycy9odG1sZ2VuZXJhdGlvbi9IdG1sLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODFhMDFjNwotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsLmxvZ2dlcnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdXRpbC9sb2dnZXJzL2h0bWxnZW5lcmF0aW9uL0h0bWwuamF2YQpAQCAtMCwwICsxLDI1IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0udXRpbC5sb2dnZXJzLmh0bWxnZW5lcmF0aW9uOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDExIElCTSBDb3Jwb3JhdGlvbi4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworcHVibGljIGNsYXNzIEh0bWwgZXh0ZW5kcyBIdG1sRWxlbWVudCB7CisKKwkvKioKKwkgKiAKKwkgKi8KKwlAU3VwcHJlc3NXYXJuaW5ncygibmxzIikKKwlwdWJsaWMgSHRtbCgpIHsKKwkJc3VwZXIoImh0bWwiKTsKKwl9CisKK30KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsLmxvZ2dlcnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdXRpbC9sb2dnZXJzL2h0bWxnZW5lcmF0aW9uL0h0bWxFbGVtZW50LmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbC5sb2dnZXJzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3V0aWwvbG9nZ2Vycy9odG1sZ2VuZXJhdGlvbi9IdG1sRWxlbWVudC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIzYTZkMWMKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbC5sb2dnZXJzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3V0aWwvbG9nZ2Vycy9odG1sZ2VuZXJhdGlvbi9IdG1sRWxlbWVudC5qYXZhCkBAIC0wLDAgKzEsMTU4IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0udXRpbC5sb2dnZXJzLmh0bWxnZW5lcmF0aW9uOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDExIElCTSBDb3Jwb3JhdGlvbi4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OworaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOworaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuTWFwOworCisvKioKKyAqIAorICogQGF1dGhvciBrYXVmbWFuCisgKgorICovCitAU3VwcHJlc3NXYXJuaW5ncygibmxzIikKK3B1YmxpYyBhYnN0cmFjdCBjbGFzcyBIdG1sRWxlbWVudCB7CisJCisJcHJvdGVjdGVkIFN0cmluZyBQUkVGSVggPSAiPCI7CisJcHJvdGVjdGVkIFN0cmluZyB0YWc7CisJcHJvdGVjdGVkIFN0cmluZyBTVUZGSVgxID0gIj4iKyJcbiI7CisJcHJvdGVjdGVkIFN0cmluZyBTVUZGSVgyID0gIj4iOworCXByb3RlY3RlZCBTdHJpbmcgY2xvc2UgPSAiLyI7CisJcHJvdGVjdGVkIFN0cmluZyBzdGFydDsKKwlwcm90ZWN0ZWQgU3RyaW5nIGVuZDsKKwlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIFN0cmluZyBJTkRFTlQgPSAiICAiOworCXByb3RlY3RlZCBMaXN0PEh0bWxFbGVtZW50PiBjb250ZW50cyA9IG5ldyBBcnJheUxpc3Q8SHRtbEVsZW1lbnQ+KCk7CisJcHJvdGVjdGVkIE1hcDxTdHJpbmcsU3RyaW5nPiBhdHRyaWJ1dGVWYWx1ZXMgPSBuZXcgSGFzaE1hcDxTdHJpbmcsU3RyaW5nPigpOworCQorCXByb3RlY3RlZCBTdHJpbmcgZGF0YSA9IG51bGw7CisJCisKKwkKKwkvKioKKwkgKiAKKwkgKiBAcGFyYW0gdGFnCisJICovCisJcHVibGljIEh0bWxFbGVtZW50KFN0cmluZyB0YWcpIHsKKwkJdGhpcy50YWcgPSB0YWc7CisJfQorCQorCS8qKgorCSAqIAorCSAqIEBwYXJhbSB0YWcKKwkgKiBAcGFyYW0gYXR0cgorCSAqIEBwYXJhbSB2YWwKKwkgKi8KKwlwdWJsaWMgSHRtbEVsZW1lbnQoU3RyaW5nIHRhZywgU3RyaW5nIGF0dHIsIFN0cmluZyB2YWwpIHsKKwkJdGhpcy50YWcgPSB0YWc7CisJCWF0dHJpYnV0ZVZhbHVlcy5wdXQoYXR0cix2YWwpOworCX0KKwkKKwkvKioKKwkgKiAKKwkgKiBAcGFyYW0gZWxlbWVudAorCSAqLworCXB1YmxpYyB2b2lkIGFkZChIdG1sRWxlbWVudCBlbGVtZW50KSB7CisJCWNvbnRlbnRzLmFkZChlbGVtZW50KTsKKwl9CisJCisJCisJCisJCisJLyoqCisJICogCisJICogQHBhcmFtIGluZGVudAorCSAqIEByZXR1cm4gdGhlIGNvbnRlbnRzIGFzIGEgU3RyaW5nCisJICovCisJcHVibGljIFN0cmluZyBnZXRDb250ZW50cyhTdHJpbmcgaW5kZW50KSB7CisJCWluZGVudCArPSBJTkRFTlQ7CisJCVN0cmluZ0J1ZmZlciBidWYgPSBuZXcgU3RyaW5nQnVmZmVyKCk7CisJCWZvcihpbnQgaSA9IDA7IGkgPCBjb250ZW50cy5zaXplKCk7IGkgKyspIHsKKwkJCUh0bWxFbGVtZW50IGVsZW1lbnQgPSBjb250ZW50cy5nZXQoaSk7CisJCQlidWYuYXBwZW5kKGluZGVudCtlbGVtZW50Lm9wZW4oKSk7CisJCQlTdHJpbmcgZGF0YSA9IGVsZW1lbnQuZ2V0RGF0YSgpOworCQkJaWYoZGF0YSAhPSBudWxsKSBidWYuYXBwZW5kKGRhdGEpOworCQkJYnVmLmFwcGVuZChlbGVtZW50LmdldENvbnRlbnRzKGluZGVudCkpOworCQkJaWYoZWxlbWVudC5kYXRhPT1udWxsKSBidWYuYXBwZW5kKGluZGVudCk7CisJCQlidWYuYXBwZW5kKGVsZW1lbnQuY2xvc2UoKSk7CisJCX0KKwkgICAgcmV0dXJuIGJ1Zi50b1N0cmluZygpOworCX0KKwkKKwkKKworCS8qKgorCSAqIAorCSAqIEByZXR1cm4gZGF0YQorCSAqLworCXB1YmxpYyBTdHJpbmcgZ2V0RGF0YSgpIHsKKwkJIHJldHVybiBkYXRhOworCX0vLyBvcGVuCisJCisJLyoqCisJICogCisJICogQHBhcmFtIGRhdGEKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXREYXRhKFN0cmluZyBkYXRhKSB7CisJCXRoaXMuZGF0YSA9IGRhdGE7CisJfQorCQorCS8qKgorCSAqIAorCSAqIEBwYXJhbSBhdHRyCisJICogQHBhcmFtIHZhbHVlCisJICovCisJcHVibGljIHZvaWQgYWRkQXR0cmlidXRlKFN0cmluZyBhdHRyLCBTdHJpbmcgdmFsdWUpIHsKKwkJYXR0cmlidXRlVmFsdWVzLnB1dChhdHRyLHZhbHVlKTsKKwl9CisJCisJLyoqCisJICogCisJICogQHJldHVybiBvcGVuaW5nIHRhZworCSAqLworCXB1YmxpYyBTdHJpbmcgb3BlbigpIHsKKwkJU3RyaW5nQnVmZmVyIGVsZW1lbnQgPSBuZXcgU3RyaW5nQnVmZmVyICgpOworCQllbGVtZW50LmFwcGVuZChQUkVGSVgpOworCQllbGVtZW50LmFwcGVuZCh0YWcpOworCQkKKwkJaWYoYXR0cmlidXRlVmFsdWVzLnNpemUoKSA+PTEpIHsKKwkJCUl0ZXJhdG9yPFN0cmluZz4gaXRlciA9IGF0dHJpYnV0ZVZhbHVlcy5rZXlTZXQoKS5pdGVyYXRvcigpOworCQkJd2hpbGUoIChpdGVyIT1udWxsKSYmKGl0ZXIuaGFzTmV4dCgpKSApIHsKKwkJCQlTdHJpbmcgYXR0ciA9IGl0ZXIubmV4dCgpOworCQkJCVN0cmluZyB2YWx1ZSA9ICJcIiIrYXR0cmlidXRlVmFsdWVzLmdldChhdHRyKSsiXCIiOworCQkJCWVsZW1lbnQuYXBwZW5kKCIgIithdHRyKyI9Iit2YWx1ZSk7CisJCQl9CisJCX0KKwkJaWYoZGF0YT09bnVsbCkgeworCQkJZWxlbWVudC5hcHBlbmQoU1VGRklYMSk7CisJCX0gZWxzZSB7CisJCQllbGVtZW50LmFwcGVuZChTVUZGSVgyKTsKKwkJfQorCSAgICByZXR1cm4gZWxlbWVudC50b1N0cmluZygpOworCX0vLyBvcGVuCisJCisJLyoqCisJICogCisJICogQHJldHVybiBjbG9zaW5nIHRhZworCSAqLworCXB1YmxpYyBTdHJpbmcgY2xvc2UoKSB7CisJCVN0cmluZ0J1ZmZlciBlbGVtZW50ID0gbmV3IFN0cmluZ0J1ZmZlciAoKTsKKwkJZWxlbWVudC5hcHBlbmQoUFJFRklYKTsKKwkJZWxlbWVudC5hcHBlbmQoY2xvc2UpOworCQllbGVtZW50LmFwcGVuZCh0YWcpOworCQllbGVtZW50LmFwcGVuZChTVUZGSVgxKTsKKwkgICAgcmV0dXJuIGVsZW1lbnQudG9TdHJpbmcoKTsKKwl9Ly8gZ2V0IGNvbnRlbnRzCisKK30KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsLmxvZ2dlcnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdXRpbC9sb2dnZXJzL2h0bWxnZW5lcmF0aW9uL0h0bWxTY2VuYXJpb1BhZ2UuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsLmxvZ2dlcnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdXRpbC9sb2dnZXJzL2h0bWxnZW5lcmF0aW9uL0h0bWxTY2VuYXJpb1BhZ2UuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYTNjMmNhCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWwubG9nZ2Vycy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91dGlsL2xvZ2dlcnMvaHRtbGdlbmVyYXRpb24vSHRtbFNjZW5hcmlvUGFnZS5qYXZhCkBAIC0wLDAgKzEsNjU2IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0udXRpbC5sb2dnZXJzLmh0bWxnZW5lcmF0aW9uOworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTEgSUJNIENvcnBvcmF0aW9uLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGphdmEuaW8uQnVmZmVyZWRSZWFkZXI7CitpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtUmVhZGVyOworaW1wb3J0IGphdmEubmV0LlVSTDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5FTGlzdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUF0dHJpYnV0ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRVN0cnVjdHVyYWxGZWF0dXJlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uRHVibGluQ29yZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLklkZW50aWZpYWJsZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguR3JhcGg7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLkRlY29yYXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuRWRnZURlY29yYXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuR3JhcGhEZWNvcmF0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLk1vZGVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5Ob2RlRGVjb3JhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zY2VuYXJpby5TY2VuYXJpbzsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2VxdWVuY2VyLlNlcXVlbmNlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc29sdmVyLlNvbHZlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnV0aWwubG9nZ2Vycy5BY3RpdmF0b3I7CisKKy8qKgorICogCisgKiBAYXV0aG9yIGpoa2F1ZgorICoKKyAqLworcHVibGljIGNsYXNzIEh0bWxTY2VuYXJpb1BhZ2UgZXh0ZW5kcyBIVE1MZG9jdW1lbnQgeworCQorCS8vIHJlYWRhYmxlIGxhYmVscworCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBERUNPUkFUT1JfU1RSSU5HIAkJCT0gIkRlY29yYXRvciI7CisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIERVQkxJTl9DT1JFX1NUUklORyAJCQk9ICJEdWJsaW4gQ29yZSI7CisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIE1PREVMX1NUUklORyAJCQkJPSAiTW9kZWwiOworCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBNT0RFTF9HUkFQSF9TVFJJTkcgCQkJPSAiR3JhcGgiOworCQorCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBTQ0VOQVJJT19TVFJJTkcgCQkJPSAiU2NlbmFyaW8iOworCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBTRVFVRU5DRVJfU1RSSU5HIAkJCT0gIlNlcXVlbmNlciI7CisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFNPTFZFUl9TVFJJTkcgCQkJCT0gIlNvbHZlciI7CisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFNURU1fU0NFTkFSSU9fU1RSSU5HIAkJPSAiU1RFTSBTY2VuYXJpbyI7CisJCisJLy8gSUQncworCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBEQVRBX1JPV19JRF9QUkVGSVggCQkJPSAiREFUQV9ST1dfIjsKKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgRFVCTElOQ09SRV9ST1dfSURfUFJFRklYIAk9ICJEVUJMSU5DT1JFX1JPV18iOworCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBUSVRMRV9ST1dfSURfUFJFRklYIAkJPSAiVElUTEVfUk9XXyI7CisJCisJLy8gY29sb3JzCisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIENPTE9SX1dISVRFIAkJCQk9ICJyZ2IoMjU1LCAyNTUsIDI1NSkiOworCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBDT0xPUl9USVRMRTAgCQkJCT0gInJnYigyMDAsIDIwMCwgMjU1KSI7CisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIENPTE9SX1RJVExFMSAJCQkJPSAicmdiKDEwMiwgMjU1LCAyNTUpIjsKKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgQ09MT1JfREFUQSAJCQkJCT0gInJnYigyMDIsIDI1NSwgMjU1KSI7CisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIENPTE9SX0RVQkxJTkNPUkUgCQkJPSAicmdiKDIwMCwgMjU1LCAyMDApIjsKKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgQ09MT1JfRFVCTElOQ09SRV9EQVRBCQk9ICJyZ2IoMjI1LCAyNTUsIDIyNSkiOworCQorCS8vIG90aGVyCisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEZJTEVOQU1FCSAJCQkJPSAiU2NlbmFyaW9Mb2cuaHRtbCI7CisJcHJpdmF0ZSBpbnQgCQkJCWluZGVudCAJCQkJCQk9IDA7CQorCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBDT0xMQVBTRSAJCQkJCT0gIi0iOworCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBFWFBBTkQgCQkJCQkgICAgPSAiKyI7CisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nW10gQ0VMTF9XSURUSCAJCQkJPSB7IjEwMHB4IiwiMTAwcHgiLCIyMDBweCJ9OworCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBJTkRFTlRfV0lEVEggCQkJCT0gIjgwcHgiOworCQorCS8qKgorCSAqIAorCSAqIEBwYXJhbSBzY2VuYXJpbworCSAqIEBwYXJhbSBkaXJlY3RvcnlOYW1lCisJICovCisJcHVibGljIEh0bWxTY2VuYXJpb1BhZ2UoU2NlbmFyaW8gc2NlbmFyaW8sIFN0cmluZyBkaXJlY3RvcnlOYW1lKSB7CisJCXN1cGVyKCk7CisJCQorCQljcmVhdGVEb2N1bWVudChzY2VuYXJpbyk7CisJCVN0cmluZyBmaWxlTmFtZSA9IGRpcmVjdG9yeU5hbWUgKyBGSUxFTkFNRTsJCisJCXRoaXMud3JpdGVEb2N1bWVudChmaWxlTmFtZSx0aGlzLmdldENvbnRlbnRzKCkpOyAKKwl9CisJCisJLyoqCisJICogCisJICogQHBhcmFtIHNjZW5hcmlvCisJICovCisJcHJpdmF0ZSB2b2lkIGNyZWF0ZURvY3VtZW50KFNjZW5hcmlvIHNjZW5hcmlvKSB7CisJCUhlYWQgaGVhZCA9IG5ldyBIZWFkKCk7CisJCXRoaXMuYWRkKGhlYWQpOworCQkKKwkJCisJCVN0cmluZyBqc0NvbnRlbnQgPSByZWFkSnNGcm9tRmlsZSgpOworCQlTdHJpbmcgY3NzQ29udGVudCA9IHJlYWRDc3NGcm9tRmlsZSgpOworCQkKKwkJaWYgKCEiIi5lcXVhbHMoanNDb250ZW50KSkgeworCQkJU2NyaXB0IGpzQ29udGFpbmVyID0gbmV3IFNjcmlwdCgidHlwZSIsICJ0ZXh0L2phdmFzY3JpcHQiKTsKKwkJCWpzQ29udGFpbmVyLnNldERhdGEoanNDb250ZW50KTsKKwkJCWhlYWQuYWRkKGpzQ29udGFpbmVyKTsKKwkJfQorCQkKKwkJaWYgKCEiIi5lcXVhbHMoY3NzQ29udGVudCkpIHsKKwkJCVN0eWxlIGNzc0NvbnRhaW5lciA9IG5ldyBTdHlsZSgidHlwZSIsICJ0ZXh0L2NzcyIpOworCQkJY3NzQ29udGFpbmVyLnNldERhdGEoY3NzQ29udGVudCk7CisJCQloZWFkLmFkZChjc3NDb250YWluZXIpOworCQl9CisJCQorCQlNb2RlbCBwYXJlbnRNb2RlbCAJCQkJPSBzY2VuYXJpby5nZXRNb2RlbCgpOworCQlFTGlzdDxEZWNvcmF0b3I+IGRlY29yYXRvckxpc3QgCT0gc2NlbmFyaW8uZ2V0U2NlbmFyaW9EZWNvcmF0b3JzKCk7CisJCVNlcXVlbmNlciBzZXF1ZW5jZXIgCQkJPSBzY2VuYXJpby5nZXRTZXF1ZW5jZXIoKTsKKwkJU29sdmVyIHNvbHZlciAJCQkJCT0gc2NlbmFyaW8uZ2V0U29sdmVyKCk7CisJCQorCQkvLyBzZXQgdXAgdGhlIHRpdGxlCisJCVN0cmluZyBzY2VuYXJpb1VSSSAJCQkJPSBzY2VuYXJpby5nZXRVUkkoKS50b1N0cmluZygpOworCQlTdHJpbmcgc2NlbmFyaW9UaXRsZSA9IGdldFNob3J0TmFtZShzY2VuYXJpb1VSSSk7CisJCVRpdGxlIHRpdGxlID0gbmV3IFRpdGxlKHNjZW5hcmlvVGl0bGUpOworCQloZWFkLmFkZCh0aXRsZSk7CisJCQorCQlCb2R5IGJvZHkgPSBuZXcgQm9keSgpOworCQlib2R5LmFkZEF0dHJpYnV0ZSgib25sb2FkIiwgImNvbGxhcHNlRHVibGluQ29yZXMoKTsiKTsKKwkJdGhpcy5hZGQoYm9keSk7CisKKwkJCisJCVRhYmxlIHRhYmxlID0gbmV3IFRhYmxlKCJzdHlsZSIsInRleHQtYWxpZ246IGxlZnQ7IHdpZHRoOiAxMDAlOyIpOworCQl0YWJsZS5hZGRBdHRyaWJ1dGUoImJvcmRlciIsICI0Iik7CisJCXRhYmxlLmFkZEF0dHJpYnV0ZSgiY2VsbHBhZGRpbmciLCAiMiIpOworCQl0YWJsZS5hZGRBdHRyaWJ1dGUoImNlbGxzcGFjaW5nIiwgIjUiKTsKKwkJYm9keS5hZGQodGFibGUpOworCQkKKwkJVGJvZHkgdGJvZHkgPSBuZXcgVGJvZHkoKTsKKwkJdGFibGUuYWRkKHRib2R5KTsKKwkJdGFibGUuc2V0VGJvZHkodGJvZHkpOworCQkKKwkJVFIgdHIgPSBuZXcgVFIoImlkIixUSVRMRV9ST1dfSURfUFJFRklYK3NjZW5hcmlvVGl0bGUpOworCQl0ci5hZGRBdHRyaWJ1dGUoImFsaWduIiwibGVmdCIpOworCQl0Ym9keS5hZGQodHIpOworCQlURCB0ZCA9IG5ldyBURCgic3R5bGUiLCJiYWNrZ3JvdW5kLWNvbG9yOiAiK0NPTE9SX1RJVExFMCsiOyIpOworCQl0ci5hZGQodGQpOworCQlTcGFuIHNwYW4yID0gbmV3IFNwYW4oInN0eWxlIiwiZm9udC13ZWlnaHQ6IGJvbGQ7Iik7CisJCXNwYW4yLnNldERhdGEoQ09MTEFQU0UrU1RFTV9TQ0VOQVJJT19TVFJJTkcrIjogIitzY2VuYXJpb1RpdGxlKTsKKwkJdGQuYWRkKHNwYW4yKTsKKwkJCQorCQkKKwkJCisJCS8vIEFkZCB0aGUgc2NlbmFyaW8gaXRzZWxmLiB0aGUgbWV0aG9kIGFkZHMgaXQgdG8gdGhlIHBhcmVudCBhcyB3ZWxsLgorCQlUYWJsZSBzY2VuYXJpb1RhYmxlID0gZ2V0TmV3VGFibGUodGJvZHkpOworCQlwb3B1bGF0ZVRhYmxlZnJvbU9iamVjdChzY2VuYXJpb1RhYmxlLmdldFRib2R5KCksIHNjZW5hcmlvLCBTQ0VOQVJJT19TVFJJTkcsIG51bGwsIHRydWUpOworCQkvLyBBZGQgYWxsIHRoZSBTY2VuYXJpbydzIGRlY29yYXRvcnMKKwkJYWRkU2VjdGlvbkxpc3Qoc2NlbmFyaW9UYWJsZS5nZXRUYm9keSgpLCBkZWNvcmF0b3JMaXN0LCBERUNPUkFUT1JfU1RSSU5HLCB0cnVlKTsKKwkJLy8gSXRlcmF0ZSB0aHJvdWdoIHRoZSBTY2VuYXJpbydzIHNlcXVlbmNlcgorCQlwb3B1bGF0ZVRhYmxlZnJvbU9iamVjdChzY2VuYXJpb1RhYmxlLmdldFRib2R5KCksIHNlcXVlbmNlciwgU0VRVUVOQ0VSX1NUUklORywgbnVsbCwgdHJ1ZSk7IAorCQkvLyBJdGVyYXRlIHRocm91Z2ggdGhlIFNjZW5hcmlvJ3MgU09MVkVSCisJCXBvcHVsYXRlVGFibGVmcm9tT2JqZWN0KHNjZW5hcmlvVGFibGUuZ2V0VGJvZHkoKSwgc29sdmVyLCBTT0xWRVJfU1RSSU5HLCBudWxsLCB0cnVlKTsgCisJCQorCQkKKwkJLy8gREVTQ0VORCBpbnRvIHRoZSBTY2VuYXJpbydzIHBhcmVudCBNb2RlbAorCQlhZGRNb2RlbENvbnRlbnRzKHRib2R5LCBwYXJlbnRNb2RlbCwgdHJ1ZSk7CisJCQkKKwkJCisJCQorCQkKKwkJLyoKKwkJVFIgdHIyID0gbmV3IFRSKCk7CisJCXRib2R5LmFkZCh0cjIpOworCQlURCB0ZDIgPSBuZXcgVEQoKTsKKwkJdHIyLmFkZCh0ZDIpOworCQlVTCB1bCA9IG5ldyBVTCgpOworCQl0ZDIuYWRkKHVsKTsKKwkJCisJCUxJIGxpMSA9IG5ldyBMSSgibW9kZWxBIik7CisJCUxJIGxpMiA9IG5ldyBMSSgibW9kZWxCIik7CisJCXVsLmFkZChsaTEpOworCQlVTCB1bDIgPSBuZXcgVUwoKTsKKwkJdWwuYWRkKHVsMik7CisJCXVsMi5hZGQobGkyKTsKKwkJVUwgdWwzID0gbmV3IFVMKCk7CisJCXVsMi5hZGQodWwzKTsKKwkJTEkgbGkyYSA9IG5ldyBMSSgiZGVjb3JhdG9yMSIpOworCQlMSSBsaTJiID0gbmV3IExJKCJkZWNvcmF0b3IyIik7CisJCXVsMy5hZGQobGkyYSk7CisJCXVsMy5hZGQobGkyYik7CisJCUxJIGxpMyA9IG5ldyBMSSgic2VxdWVuY2VyIik7CisJCUxJIGxpNCA9IG5ldyBMSSgic29sdmVyIik7CisJCXVsLmFkZChsaTMpOworCQl1bC5hZGQobGk0KTsKKwkJKi8KKwkJCisJCXRoaXMud3JpdGVEb2N1bWVudCgiL3Rlc3QuaHRtbCIsdGhpcy5nZXRDb250ZW50cygpKTsgCisJCS8vU3lzdGVtLm91dC5wcmludGxuKGRvYy5nZXRDb250ZW50cygpKTsKKwl9Ly8gY3JlYXRlRG9jdW1lbnQoKQorCQorCQorCS8qKgorCSAqIAorCSAqIEBwYXJhbSB0Ym9keQorCSAqIEBwYXJhbSBtb2RlbAorCSAqIEBwYXJhbSB0b3AKKwkgKi8KKwlwdWJsaWMgdm9pZCBhZGRNb2RlbENvbnRlbnRzKGZpbmFsIFRib2R5IHRib2R5LCBmaW5hbCBNb2RlbCBtb2RlbCwgYm9vbGVhbiB0b3ApIHsKKwkJLy8gREVTQ0VORCBpbnRvIHRoZSBTY2VuYXJpbydzIHBhcmVudCBNb2RlbAorCQlpZihtb2RlbCE9bnVsbCkgeworCQkJaW5kZW50Kys7CisJCQkvLyBjcmVhdGUgdGhlIG1vZGVsIHRhYmxlIGFuZCBhZGQgdG8gdGhlIHBhcmVudCBpdHNlbGYKKwkJCWZpbmFsIFRhYmxlIG1vZGVsVGFibGUgPSBnZXROZXdUYWJsZSh0Ym9keSk7CisJCQkKKwkJCXBvcHVsYXRlVGFibGVmcm9tT2JqZWN0KG1vZGVsVGFibGUuZ2V0VGJvZHkoKSwgbW9kZWwsIE1PREVMX1NUUklORywgbnVsbCwgdHJ1ZSApOworCQkJZmluYWwgVGJvZHkgbW9kZWxUYWJsZUJvZHkgPSBtb2RlbFRhYmxlLmdldFRib2R5KCk7CisJCQkKKwkJCQorCQkJCisJCQkvLyBUaGUgbW9kZWxzIGRlY29yYXRvcnMKKwkJCWZpbmFsIEVMaXN0PE5vZGVEZWNvcmF0b3I+IG5vZGVEZWNvcmF0b3JMaXN0ID0gbW9kZWwuZ2V0Tm9kZURlY29yYXRvcnMoKTsKKwkJCWlmKChub2RlRGVjb3JhdG9yTGlzdCE9bnVsbCkmJihub2RlRGVjb3JhdG9yTGlzdC5zaXplKCk+PTEpKSB7CisJCQkJYWRkU2VjdGlvbkxpc3QobW9kZWxUYWJsZUJvZHksIG5vZGVEZWNvcmF0b3JMaXN0LCBERUNPUkFUT1JfU1RSSU5HLCB0cnVlKTsKKwkJCX0KKwkJCQorCQkJZmluYWwgRUxpc3Q8RWRnZURlY29yYXRvcj4gZWRnZURlY29yYXRvckxpc3QgPSBtb2RlbC5nZXRFZGdlRGVjb3JhdG9ycygpOworCQkJaWYoKGVkZ2VEZWNvcmF0b3JMaXN0IT1udWxsKSYmKGVkZ2VEZWNvcmF0b3JMaXN0LnNpemUoKT49MSkpIHsKKwkJCQlhZGRTZWN0aW9uTGlzdChtb2RlbFRhYmxlQm9keSwgZWRnZURlY29yYXRvckxpc3QsIERFQ09SQVRPUl9TVFJJTkcsIHRydWUpOworCQkJfQorCQkJCisJCQlmaW5hbCBFTGlzdDxHcmFwaERlY29yYXRvcj4gZ3JhcGhEZWNvcmF0b3JMaXN0ID0gbW9kZWwuZ2V0R3JhcGhEZWNvcmF0b3JzKCk7CisJCQlpZigoZ3JhcGhEZWNvcmF0b3JMaXN0IT1udWxsKSYmKGdyYXBoRGVjb3JhdG9yTGlzdC5zaXplKCk+PTEpKSB7CisJCQkJYWRkU2VjdGlvbkxpc3QobW9kZWxUYWJsZUJvZHksIGdyYXBoRGVjb3JhdG9yTGlzdCwgREVDT1JBVE9SX1NUUklORywgdHJ1ZSk7CisJCQl9CisJCQlFTGlzdDxHcmFwaD4gZ3JhcGhMaXN0ID0gbW9kZWwuZ2V0R3JhcGhzKCk7CisJCQlpZigoZ3JhcGhMaXN0IT1udWxsKSYmKGdyYXBoTGlzdC5zaXplKCk+PTEpKSB7CisJCQkJYWRkU2VjdGlvbkxpc3QobW9kZWxUYWJsZUJvZHksIGdyYXBoTGlzdCwgTU9ERUxfR1JBUEhfU1RSSU5HLCB0cnVlKTsKKwkJCX0KKwkJCQorCQkJLy8gUmVjdXJzZSBpbnRvIHRoZSBtb2RlbAorCQkJZmluYWwgRUxpc3Q8TW9kZWw+IG1vZGVsTGlzdCA9IG1vZGVsLmdldE1vZGVscygpOworCQkJaWYoKG1vZGVsTGlzdCE9bnVsbCkmJihtb2RlbExpc3Quc2l6ZSgpPj0xKSYmKG1vZGVsVGFibGVCb2R5IT1udWxsKSkgeworCQkJCWZvcihpbnQgaSA9IDA7IGkgPCBtb2RlbExpc3Quc2l6ZSgpOyBpKyspIHsKKwkJCQkJTW9kZWwgaW5uZXJNb2RlbCA9IG1vZGVsTGlzdC5nZXQoaSk7CisJCQkJCWFkZE1vZGVsQ29udGVudHModGJvZHksIGlubmVyTW9kZWwsIGZhbHNlICk7CisJCQkJfS8vIGZvciBhbGwgbW9kZWxzIGluc2lkZQorCQkJfQorCQkJCisJCX0vLyBtb2RlbCBub3QgbnVsbAorCX0vL2FkZE1vZGVsQ29udGVudHMKKwkKKwkvKioKKwkgKiAKKwkgKiBAcGFyYW0gdGJvZHkKKwkgKiBAcGFyYW0gZUxpc3QKKwkgKiBAcGFyYW0gdHlwZQorCSAqIEBwYXJhbSBhZGREdWJsaW5Db3JlCisJICovCisJcHVibGljIHZvaWQgYWRkU2VjdGlvbkxpc3QoVGJvZHkgdGJvZHksIEVMaXN0PD8+IGVMaXN0LCBTdHJpbmcgdHlwZSwgYm9vbGVhbiBhZGREdWJsaW5Db3JlKSB7CisJCWlmKGVMaXN0IT1udWxsKSB7CisJCQlmb3IoaW50IGkgPSAwOyBpIDwgZUxpc3Quc2l6ZSgpOyBpICsrKSB7CisJCQkJT2JqZWN0IG9iamVjdCA9IGVMaXN0LmdldChpKTsKKwkJCQkvLyBzaG91bGQgYWx3YXlzIGJlIHRydWUKKwkJCQlpZihvYmplY3QgaW5zdGFuY2VvZiBFT2JqZWN0KSB7CisJCQkJCXBvcHVsYXRlVGFibGVmcm9tT2JqZWN0KHRib2R5LCAoRU9iamVjdCkgb2JqZWN0LCB0eXBlLCBudWxsLCBhZGREdWJsaW5Db3JlKTsgCisJCQkJfQorCQkJCQorCQkJfS8vIGZvciBhbGwgaWRlbnRpZmlhYmxlCisJCX0KKwl9Ly8gYWRkU2VjdGlvbkxpc3QKKwkKKwkKKwkKKwkKKwkKKwkvKioKKwkgKiAKKwkgKiBAcGFyYW0gdGFibGUKKwkgKiBAcGFyYW0gZU9iamVjdAorCSAqIEBwYXJhbSBkZXNjcmlwdGlvbgorCSAqIEBwYXJhbSBuYW1lCisJICogQHBhcmFtIGFkZER1YmxpbkNvcmUKKwkgKi8KKwlwcml2YXRlIHZvaWQgcG9wdWxhdGVUYWJsZWZyb21PYmplY3QoVGJvZHkgdGJvZHksIEVPYmplY3QgZU9iamVjdCwgU3RyaW5nIGRlc2NyaXB0aW9uLCBTdHJpbmcgbmFtZSwgYm9vbGVhbiBhZGREdWJsaW5Db3JlKSB7CisJCQorCQlpZihlT2JqZWN0ICE9IG51bGwpIHsKKwkJCQorCisJCQkvLyBjaGVjayB0aGUgbmFtZQorCQkJaWYoKGVPYmplY3QgaW5zdGFuY2VvZiBJZGVudGlmaWFibGUpKSB7CisJCQkJLy8gSUYgdGhlIG5hbWUgaXMgbm90IGZvcmNlZCwgbG9vayBpdCB1cAorCQkJCWlmKChuYW1lPT1udWxsKXx8KG5hbWUubGVuZ3RoKCk9PTApKXsKKwkJCQkJSWRlbnRpZmlhYmxlIGlkZW50ID0gKElkZW50aWZpYWJsZSkgZU9iamVjdDsKKwkJCQkJbmFtZSA9IGdldFNob3J0TmFtZShpZGVudC5nZXRVUkkoKS50b1N0cmluZygpKTsKKwkJCQl9CisJCQl9CisJCQkKKwkJCVN0cmluZyBlQ2xhc3MgPSBlT2JqZWN0LmVDbGFzcygpLmdldE5hbWUoKTsKKwkJCQorCQkJVFIgdHJTcGFjZXIgPSBuZXcgVFIoKTsKKwkJCQorCQkJdGJvZHkuYWRkKHRyU3BhY2VyKTsKKwkJCWluZGVudFRhYmxlUm93KHRyU3BhY2VyKTsKKwkJCQorCQkJU3RyaW5nIHJvd0lkID0gVElUTEVfUk9XX0lEX1BSRUZJWCtuYW1lOworCQkJCisJCQlUUiB0ciA9IG5ldyBUUigiaWQiLHJvd0lkKTsKKwkJCXRyLmFkZEF0dHJpYnV0ZSgiY2xhc3MiLCAiaWRIZWFkZXIiKTsKKwkJCWluZGVudFRhYmxlUm93KHRyKTsKKwkJCXRib2R5LmFkZCh0cik7CisJCQkKKwkJCS8vdGhlIHRocmVlIEhFQURFUiBjb2x1bW5zCisJCQlmb3IoaW50IGkgPSAwOyBpIDwgMzsgaSArKykgeworCQkJCVREIHRkID0gbmV3IFREKCk7CisJCQkJLy90ZC5hZGRBdHRyaWJ1dGUoInN0eWxlIiwgIndpZHRoOiAiK0NFTExfV0lEVEhbaV0rIjsiKTsKKwkJCQl0ci5hZGQodGQpOworCQkJCQorCQkJCS8vdGQuYWRkQXR0cmlidXRlKCJzdHlsZSIsImJhY2tncm91bmQtY29sb3I6ICIrQ09MT1JfVElUTEUxKyI7Iik7CisJCQkJaWYoaT09MCkgeworCQkJCQkKKwkJCQkJQSBhbmNob3IgPSBuZXcgQShudWxsLG51bGwpOworCQkJCQlhbmNob3IuYWRkQXR0cmlidXRlKCJocmVmIiwgIiMiKTsKKwkJCQkJYW5jaG9yLmFkZEF0dHJpYnV0ZSgib25jbGljayIsICJ0b2dnbGUodGhpcyk7cmV0dXJuIGZhbHNlOyIpOworCQkJCQlhbmNob3IuYWRkQXR0cmlidXRlKCJpZCIsIHJvd0lkKyJfdG9nZ2xlIik7CisJCQkJCWFuY2hvci5zZXREYXRhKENPTExBUFNFK2Rlc2NyaXB0aW9uKTsKKwkJCQkJdGQuYWRkKGFuY2hvcik7CisJCQkJCS8vU3BhbiBzcGFuID0gbmV3IFNwYW4oInN0eWxlIiwiZm9udC13ZWlnaHQ6IGJvbGQ7Iik7CisJCQkJCS8vc3Bhbi5zZXREYXRhKENPTExBUFNFK2Rlc2NyaXB0aW9uKTsKKwkJCQkJLy90ZC5hZGQoc3Bhbik7CisJCQkJfQorCQkJCQorCQkJCWlmKChuYW1lID09IG51bGwpIHx8KG5hbWUubGVuZ3RoKCk9PTApKXsKKwkJCQkJbmFtZSA9ICJuYW1lIG5vdCBzZXQiOworCQkJCX0KKwkJCQkJCisJCQkJaWYoaT09MSl7CisvLwkJCQkJU3BhbiBzcGFuID0gbmV3IFNwYW4oInN0eWxlIiwiZm9udC13ZWlnaHQ6IGJvbGQ7Iik7CisvLwkJCQkJc3Bhbi5zZXREYXRhKG5hbWUpOworLy8JCQkJCXRkLmFkZChzcGFuKTsKKwkJCQkJdGQuc2V0RGF0YShuYW1lKTsKKwkJCQl9CisJCQkJCisJCQkJaWYoaT09Mil7CisvLwkJCQkJU3BhbiBzcGFuID0gbmV3IFNwYW4oInN0eWxlIiwiZm9udC13ZWlnaHQ6IGJvbGQ7Iik7CisvLwkJCQkJc3Bhbi5zZXREYXRhKGVDbGFzcyk7CisvLwkJCQkJdGQuYWRkKHNwYW4pOworCQkJCQl0ZC5zZXREYXRhKGVDbGFzcyk7CisJCQkJfQorCQkJCQorCQkJfQorCQkJCQorCQkJCisJCQlFTGlzdDxFQXR0cmlidXRlPiBhdHRyTGlzdCA9IGVPYmplY3QuZUNsYXNzKCkuZ2V0RUFsbEF0dHJpYnV0ZXMoKTsKKwkJCQorCQkJaWYoYXR0ckxpc3QhPW51bGwpeworCQkJCQorCQkJCWZvcihpbnQgaSA9IDA7IGkgPCBhdHRyTGlzdC5zaXplKCk7IGkgKyspIHsKKwkJCQkJRUF0dHJpYnV0ZSBmZWF0dXJlID0gYXR0ckxpc3QuZ2V0KGkpOworCQkJCQlpZighZmVhdHVyZS5pc1RyYW5zaWVudCgpKSB7CisJCQkJCQkKKwkJCQkJCVN0cmluZyBhdHRyaWJ1dGUgPSBmZWF0dXJlLmdldE5hbWUoKTsKKwkJCQkJCU9iamVjdCB0YXJnZXQgPSBlT2JqZWN0LmVHZXQoZmVhdHVyZSk7CisJCQkJCQlpZih0YXJnZXQgIT1udWxsKSB7CisJCQkJCQkJU3RyaW5nIHZhbCA9IHRhcmdldC50b1N0cmluZygpOworCQkJCQkJCisJCQkJCQkJaWYodmFsLmxlbmd0aCgpPj0xKSB7CisJCQkJCQkJCQorCQkJCQkJCQkvLyBsYWJlbCBldmVyeSBkYXRhIHJvdyB3aXRoIGEgdW5pcXVlIElECisJCQkJCQkJCVN0cmluZyBpZFN1ZmZpeCA9IG51bGw7CisJCQkJCQkJCWlmKGVPYmplY3QgaW5zdGFuY2VvZiBJZGVudGlmaWFibGUpIHsKKwkJCQkJCQkJCUlkZW50aWZpYWJsZSBpZGVudCA9IChJZGVudGlmaWFibGUpIGVPYmplY3Q7CisJCQkJCQkJCQlpZFN1ZmZpeCA9IGlkZW50LmdldFVSSSgpLnRvU3RyaW5nKCk7CisJCQkJCQkJCX0gIGVsc2UgeworCQkJCQkJCQkJZG91YmxlIHIgPSBNYXRoLnJhbmRvbSgpOworCQkJCQkJCQkJciAqPSAxZTg7CisJCQkJCQkJCQlpZFN1ZmZpeCA9ICJpZCIrKChpbnQpcik7CisJCQkJCQkJCX0KKwkJCQkJCQkJaWRTdWZmaXggKz0gIl8iK2F0dHJpYnV0ZTsKKwkJCQkJCQkJCisJCQkJCQkJCVRSIHRyMiA9IG5ldyBUUigiaWQiLERBVEFfUk9XX0lEX1BSRUZJWCtpKyJfIitpZFN1ZmZpeCk7CisJCQkJCQkJCQorCQkJCQkJCQl0cjIuYWRkQXR0cmlidXRlKCJjbGFzcyIsICJpZEJvZHkiKTsKKwkJCQkJCQkJCisJCQkJCQkJCS8vdHIyLmFkZEF0dHJpYnV0ZSgiYWxpZ24iLCJsZWZ0Iik7CisJCQkJCQkJCWluZGVudFRhYmxlUm93KHRyMik7CisJCQkJCQkJCXRib2R5LmFkZCh0cjIpOworCQkJCQkJCQkKKwkJCQkJCQkJVEQgdGQxID0gbmV3IFREKCJhbGlnbiIsImxlZnQiKTsKKwkJCQkJCQkJdHIyLmFkZCh0ZDEpOworCQkJCQkJCQkKKwkJCQkJCQkJCisvLwkJCQkJCQkJdGQxLmFkZEF0dHJpYnV0ZSgic3R5bGUiLCAid2lkdGg6ICIrQ0VMTF9XSURUSFswXSsiOyIpOworLy8JCQkJCQkJCXRkMS5hZGRBdHRyaWJ1dGUoInN0eWxlIiwiYmFja2dyb3VuZC1jb2xvcjogIitDT0xPUl9EQVRBKyI7Iik7CisJCQkJCQkJCQorCQkJCQkJCQkKKwkJCQkJCQkJCisJCQkJCQkJCVREIHRkMiA9IG5ldyBURCgiYWxpZ24iLCJyaWdodCIpOworCQkJCQkJCQl0cjIuYWRkKHRkMik7CisJCQkJCQkJCXRkMi5zZXREYXRhKGF0dHJpYnV0ZSsiOiAgICIpOworCQkJCQkJCQkKKy8vCQkJCQkJCQl0ZDIuYWRkQXR0cmlidXRlKCJzdHlsZSIsICJ3aWR0aDogIitDRUxMX1dJRFRIWzFdKyI7Iik7CisvLwkJCQkJCQkJdGQyLmFkZEF0dHJpYnV0ZSgic3R5bGUiLCJiYWNrZ3JvdW5kLWNvbG9yOiAiK0NPTE9SX0RBVEErIjsiKTsKKy8vCQkJCQkJCQlTcGFuIHNwYW4yID0gbmV3IFNwYW4oInN0eWxlIiwiZm9udC13ZWlnaHQ6IG5vcm1hbDsiKTsKKy8vCQkJCQkJCQlzcGFuMi5zZXREYXRhKGF0dHJpYnV0ZSsiOiAgICIpOworLy8JCQkJCQkJCXRkMi5hZGQoc3BhbjIpOworCQkJCQkJCQkKKwkJCQkJCQkJCisJCQkJCQkJCQorCQkJCQkJCQlURCB0ZDMgPSBuZXcgVEQoImFsaWduIiwibGVmdCIpOworCQkJCQkJCQl0cjIuYWRkKHRkMyk7CisJCQkJCQkJCXRkMy5zZXREYXRhKHZhbCk7CisJCQkJCQkJCQorCQkJCQkJCQkvL3RkMy5hZGRBdHRyaWJ1dGUoInN0eWxlIiwgIndpZHRoOiAiK0NFTExfV0lEVEhbMl0rIjsiKTsKKwkJCQkJCQkJLy90ZDMuYWRkQXR0cmlidXRlKCJzdHlsZSIsImJhY2tncm91bmQtY29sb3I6ICIrQ09MT1JfREFUQSsiOyIpOworLy8JCQkJCQkJCVNwYW4gc3BhbjMgPSBuZXcgU3Bhbigic3R5bGUiLCJmb250LXdlaWdodDogbm9ybWFsOyIpOworLy8JCQkJCQkJCXNwYW4zLnNldERhdGEodmFsKTsKKy8vCQkJCQkJCQl0ZDMuYWRkKHNwYW4zKTsKKwkJCQkJCQkJCisJCQkJCQkJCQorCQkJCQkJCQkKKworCQkJCQkJCQkKKworCQkJCQkJCX0vLyBzdHJpbmcgbGVuZ3RoID4wCisJCQkJCQl9IC8vIHRhcmdldCBhdHRyaWJ1dGUgbm90IG51bGwKKwkJCQkJfS8vIG5vdCB0cmFuc2llbnQ/CisJCQkJCQorCQkJCX0vLyBmb3IgYWxsIGF0dHJpYnV0ZXMKKwkJCX0vLyBhdHRyTGlzdAorCQkJCisJCQkKKwkJCWlmKGFkZER1YmxpbkNvcmUpIHsKKwkJCQlJZGVudGlmaWFibGUgaWRlbnQ9IChJZGVudGlmaWFibGUpZU9iamVjdDsKKwkJCQkKKwkJCQlEdWJsaW5Db3JlIGRjID0gaWRlbnQuZ2V0RHVibGluQ29yZSgpOworCQkJCWlmKGlkZW50ICE9IG51bGwpIHsKKwkJCQkJYWRkREN0b1RhYmxlKGRjLCB0Ym9keSk7CisJCQkJfQorCQkJfQorCQkJCisJCQkKKwkJfS8vIG9iamVjdCBub3QgbnVsbAorCQkKKwl9IC8vIHBvcHVsYXRlVGFibGVGcm9tT2JqZWN0CisJCisKKwkKKwkvKioKKwkgKiAKKwkgKiBAcGFyYW0gZHVibGluQ29yZQorCSAqIEBwYXJhbSB0Ym9keQorCSAqLworCXByaXZhdGUgdm9pZCBhZGREQ3RvVGFibGUoRHVibGluQ29yZSBkdWJsaW5Db3JlLCBUYm9keSB0Ym9keSkgeworCQorCQlUUiB0ciA9IG5ldyBUUigiYWxpZ24iLCJjZW50ZXIiKTsKKwkJdGJvZHkuYWRkKHRyKTsKKwkJCisJCQkKKwkJRUxpc3Q8RVN0cnVjdHVyYWxGZWF0dXJlPiBhdHRyTGlzdCA9IGR1YmxpbkNvcmUuZUNsYXNzKCkuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpOworCQlpZihhdHRyTGlzdCE9bnVsbCl7CisJCQkKKwkJCWZvcihpbnQgaSA9IDA7IGkgPCBhdHRyTGlzdC5zaXplKCk7IGkgKyspIHsKKwkJCQlFQXR0cmlidXRlIGF0dHIgPSAoRUF0dHJpYnV0ZSlhdHRyTGlzdC5nZXQoaSk7CisJCQkJT2JqZWN0IG9iaiA9IGR1YmxpbkNvcmUuZUdldChhdHRyKTsKKwkJCQlpZihvYmogIT0gbnVsbCkgeworCQkJCQlTdHJpbmcgdmFsID0gb2JqLnRvU3RyaW5nKCk7CisJCQkJCWlmKHZhbC5sZW5ndGgoKT49MCkgeworCQkJCQkJCisJCQkJCQkvLyBsYWJlbCBldmVyeSBkdWJsaW4gY29yZSByb3cgd2l0aCBhIHVuaXF1ZSBJRAorCQkJCQkJU3RyaW5nIGlkU3VmZml4ID0gZHVibGluQ29yZS5nZXRJZGVudGlmaWVyKCk7CisJCQkJCQlpZigoaWRTdWZmaXg9PW51bGwpfHwoaWRTdWZmaXgubGVuZ3RoKCk9PTApKSB7CisJCQkJCQkJZG91YmxlIHIgPSBNYXRoLnJhbmRvbSgpOworCQkJCQkJCXIgKj0gMWU4OworCQkJCQkJCWlkU3VmZml4ID0gImlkIisoKGludClyKTsKKwkJCQkJCX0KKwkJCQkJCQorCQkJCQkJU3RyaW5nIHJvd0lkID0gRFVCTElOQ09SRV9ST1dfSURfUFJFRklYK2krIl8iK2lkU3VmZml4OworCQkJCQkJCisJCQkJCQlUUiB0cjIgPSBuZXcgVFIoImlkIixyb3dJZCk7CisJCQkJCQkvL3RyMi5hZGRBdHRyaWJ1dGUoImFsaWduIiwibGVmdCIpOworCQkJCQkJdGJvZHkuYWRkKHRyMik7CisKKwkJCQkJCS8vIGluZGVudGF0aW9uCisJCQkJCQlpbmRlbnRUYWJsZVJvdyh0cjIpOworCQkJCQkJCisJCQkJCQkKKwkJCQkJCS8vIGNvbCAxCisJCQkJCQlURCB0ZDEgPSBuZXcgVEQoKTsKKwkJCQkJCXRkMS5hZGRBdHRyaWJ1dGUoInN0eWxlIiwgIndpZHRoOiAiK0NFTExfV0lEVEhbMF0rIjsiKTsKKwkJCQkJCXRkMS5hZGRBdHRyaWJ1dGUoImNsYXNzIiwgImRjSGVhZGVyIik7CisJCQkJCQkKKwkJCQkJCS8vdGQxLmFkZEF0dHJpYnV0ZSgic3R5bGUiLCJiYWNrZ3JvdW5kLWNvbG9yOiAiK0NPTE9SX0RVQkxJTkNPUkUrIjsiKTsKKwkJCQkJCWlmKGk9PTApIHsKKwkJCQkJCQkKKwkJCQkJCQlBIGFuY2hvciA9IG5ldyBBKCJocmVmIiwgIiMiKTsKKwkJCQkJCQlhbmNob3IuYWRkQXR0cmlidXRlKCJvbmNsaWNrIiwgInRvZ2dsZSh0aGlzKTtyZXR1cm4gZmFsc2U7Iik7CisJCQkJCQkJYW5jaG9yLnNldERhdGEoRVhQQU5EK0RVQkxJTl9DT1JFX1NUUklORyk7CisJCQkJCQkJdGQxLmFkZChhbmNob3IpOworCQkJCQkJCQorLy8JCQkJCQkJU3BhbiBzcGFuMSA9IG5ldyBTcGFuKCJzdHlsZSIsImZvbnQtd2VpZ2h0OiBub3JtYWw7Iik7CisvLwkJCQkJCQlzcGFuMS5zZXREYXRhKENPTExBUFNFK0RVQkxJTl9DT1JFX1NUUklORyk7CisvLwkJCQkJCQl0ZDEuYWRkKHNwYW4xKTsKKwkJCQkJCX0KKwkJCQkJCXRyMi5hZGQodGQxKTsKKwkJCQkJCQorCQkJCQkJCisJCQkJCQkvLyBjb2wgMgorCQkJCQkJVEQgdGQyID0gbmV3IFREKCJhbGlnbiIsInJpZ2h0Iik7CisJCQkJCQl0ZDIuYWRkQXR0cmlidXRlKCJzdHlsZSIsICJ3aWR0aDogIitDRUxMX1dJRFRIWzFdKyI7Iik7CisJCQkJCQkvL3RkMi5hZGRBdHRyaWJ1dGUoInN0eWxlIiwiYmFja2dyb3VuZC1jb2xvcjogIitDT0xPUl9EVUJMSU5DT1JFX0RBVEErIjsiKTsgCQorCQkJCQkJdGQyLmFkZEF0dHJpYnV0ZSgiY2xhc3MiLCAiZGNCb2R5Iik7CisJCQkJCQl0ZDIuc2V0RGF0YShhdHRyLmdldE5hbWUoKSsiOiAgICIpOworCQkJCQkJdHIyLmFkZCh0ZDIpOworCQkJCQkJCisvLwkJCQkJCVNwYW4gc3BhbjIgPSBuZXcgU3Bhbigic3R5bGUiLCJmb250LXdlaWdodDogbm9ybWFsOyIpOworLy8JCQkJCQlzcGFuMi5zZXREYXRhKGF0dHIuZ2V0TmFtZSgpKyI6ICAgIik7CisvLwkJCQkJCXRkMi5hZGQoc3BhbjIpOwkJCQkKKy8vCQkJCQkJdHIyLmFkZCh0ZDIpOworCQkJCQkJCisJCQkJCQkKKwkJCQkJCS8vIGNvbCAzCisJCQkJCQlURCB0ZDMgPSBuZXcgVEQoKTsKKwkJCQkJCXRkMy5hZGRBdHRyaWJ1dGUoInN0eWxlIiwgIndpZHRoOiAiK0NFTExfV0lEVEhbMl0rIjsiKTsKKwkJCQkJCXRkMy5hZGRBdHRyaWJ1dGUoImNsYXNzIiwgImRjQm9keSIpOworCQkJCQkJLy90ZDMuYWRkQXR0cmlidXRlKCJzdHlsZSIsImJhY2tncm91bmQtY29sb3I6ICIrQ09MT1JfRFVCTElOQ09SRV9EQVRBKyI7Iik7CisJCQkJCQl0ZDMuc2V0RGF0YSh2YWwpOworCQkJCQkJdHIyLmFkZCh0ZDMpOworCQkJCQkJCisJCQkJCQkKKy8vCQkJCQkJU3BhbiBzcGFuMyA9IG5ldyBTcGFuKCJzdHlsZSIsImZvbnQtd2VpZ2h0OiBub3JtYWw7Iik7CisvLwkJCQkJCXNwYW4zLnNldERhdGEodmFsKTsKKy8vCQkJCQkJdGQzLmFkZChzcGFuMyk7CisKKwkJCQkJfQorCQkJCX0KKwkJCQkKKwkJCX0KKwkJfSAKKwkJCisJfS8vYWRkREN0b1RhYmxlKCkKKwkKKwkKKwkvKioKKwkgKiBtYWtlIGEgbmV3IGlubmVyIHRhYmxlCisJICogQHBhcmFtIHBhcmVudFRhYmxlQm9keQorCSAqIEByZXR1cm4gYSBuZXcgdGFibGUKKwkgKi8KKwlwdWJsaWMgVGFibGUgZ2V0TmV3VGFibGUoVGJvZHkgcGFyZW50VGFibGVCb2R5KSB7CisJCVRhYmxlIG5ld1RhYmxlID0gbmV3IFRhYmxlKCJzdHlsZSIsInRleHQtYWxpZ246IGxlZnQ7Iik7CisJCW5ld1RhYmxlLmFkZEF0dHJpYnV0ZSgid2lkdGgiLCAiMTAwJSIpOworCQluZXdUYWJsZS5hZGRBdHRyaWJ1dGUoImJvcmRlciIsICIwIik7CisJCW5ld1RhYmxlLmFkZEF0dHJpYnV0ZSgiZnJhbWUiLCAiYm94Iik7CisJCW5ld1RhYmxlLmFkZEF0dHJpYnV0ZSgiY2VsbHBhZGRpbmciLCAiMiIpOworCQluZXdUYWJsZS5hZGRBdHRyaWJ1dGUoImNlbGxzcGFjaW5nIiwgIjIiKTsKKwkJVGJvZHkgbmV3VGJvZHkgPSBuZXcgVGJvZHkoKTsKKwkJbmV3VGFibGUuYWRkKG5ld1Rib2R5KTsKKwkJbmV3VGFibGUuc2V0VGJvZHkobmV3VGJvZHkpOworCQkKKwkJCisJCVRSIHRyUGFyZW50ID0gbmV3IFRSKCk7CisJCXBhcmVudFRhYmxlQm9keS5hZGQodHJQYXJlbnQpOworCQlURCB0ZFBhcmVudCA9IG5ldyBURCgpOworCQl0clBhcmVudC5hZGQodGRQYXJlbnQpOworCQl0ZFBhcmVudC5hZGQobmV3VGFibGUpOworCQkKKwkJCisJCS8vIFNwYWNlciByb3cKKwkJVFIgdHJTcGFjZXIgPSBuZXcgVFIoKTsKKwkJbmV3VGJvZHkuYWRkKHRyU3BhY2VyKTsKKwkJLy8gaW5kZW50IHNwYWNlciBjb2xzCisJCWluZGVudFRhYmxlUm93KHRyU3BhY2VyKTsKKwkJLy8gYW5kIHRocmVlIGNvbHMgb2YgZGF0YQorCQlmb3IoaW50IGkgPSAwOyBpIDwgMzsgaSArKykgeworCQkJLy8gdGhlIGhlYWRlciBsaW5lIGluIGl0cycgb3duIGNvbG9yCisJCQlURCB0ZCA9IG5ldyBURCgic3R5bGUiLCJiYWNrZ3JvdW5kLWNvbG9yOiAiK0NPTE9SX1dISVRFKyI7Iik7CisJCQl0ZC5hZGRBdHRyaWJ1dGUoInN0eWxlIiwgIndpZHRoOiAiK0NFTExfV0lEVEhbaV0rIjsiKTsKKwkJCXRyU3BhY2VyLmFkZCh0ZCk7CisJCX0KKwkJLy8gZmlsbCBhbnkgcmVtYWluaW5nIHNwYWNlIHRvIHRoZSByaWdodAorCQlURCB0ZDIgPSBuZXcgVEQoInN0eWxlIiwiYmFja2dyb3VuZC1jb2xvcjogIitDT0xPUl9XSElURSsiOyIpOworCQl0clNwYWNlci5hZGQodGQyKTsKKwkJCisJCXJldHVybiBuZXdUYWJsZTsKKwl9Ly9nZXROZXdUYWJsZSgpCisJCisJCisJLyoqCisJICogCisJICogQHBhcmFtIHRyU3BhY2VyCisJICovCisJcHVibGljIHZvaWQgaW5kZW50VGFibGVSb3coVFIgdHJTcGFjZXIpIHsKKwkJLy8gaW5kZW50IHNwYWNlciBjb2xzCisJCWZvcihpbnQgaSA9IDA7IGkgPCBpbmRlbnQ7IGkgKyspIHsKKwkJCS8vIHRoZSBoZWFkZXIgbGluZSBpbiBpdHMnIG93biBjb2xvcgorCQkJVEQgdGQgPSBuZXcgVEQoKTsKKwkJCXRkLmFkZEF0dHJpYnV0ZSgic3R5bGUiLCAid2lkdGg6ICIrSU5ERU5UX1dJRFRIKyI7Iik7CisJCQl0ZC5hZGRBdHRyaWJ1dGUoImNsYXNzIiwgImJsYW5rIik7CisJCQl0clNwYWNlci5hZGQodGQpOworCQl9CisJfS8vIGluZGVudCB0YWJsZSByb3cKKwkKKwkvKioKKwkgKiAKKwkgKiBAcGFyYW0gbG9uZ05hbWUKKwkgKiBAcmV0dXJuIHRoZSBzaG9ydCBuYW1lCisJICovCisJcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0U2hvcnROYW1lKFN0cmluZyBsb25nTmFtZSkgeworCQlpbnQgaWR4ID0gbG9uZ05hbWUubGFzdEluZGV4T2YoIi8iKTsKKwkJU3RyaW5nIG5hbWUgPSBsb25nTmFtZS5zdWJzdHJpbmcoaWR4KzEsIGxvbmdOYW1lLmxlbmd0aCgpKTsKKwkJaWR4ID0gbmFtZS5pbmRleE9mKCIuIik7CisJCWlmKGlkeCA+PTMpIHsKKwkJCW5hbWUgPSBuYW1lLnN1YnN0cmluZygwLGlkeCk7CisJCX0KKwkJaWYoKG5hbWU9PW51bGwpfHwobmFtZS5sZW5ndGgoKT09MCkpIHsKKwkJCW5hbWUgPSAiTmFtZSBub3Qgc2V0IjsKKwkJfQorCQlyZXR1cm4gbmFtZTsKKwl9CisKKwkKKwlwcml2YXRlIFN0cmluZyByZWFkSnNGcm9tRmlsZSgpCisJeworCQlyZXR1cm4gcmVhZEZyb21GaWxlKCJyZXNvdXJjZXMvc291cmNlLmpzIik7CisJfQorCQorCXByaXZhdGUgU3RyaW5nIHJlYWRDc3NGcm9tRmlsZSgpCisJeworCQlyZXR1cm4gcmVhZEZyb21GaWxlKCJyZXNvdXJjZXMvc291cmNlLmNzcyIpOworCX0KKwkKKwlwcml2YXRlIFN0cmluZyByZWFkRnJvbUZpbGUoU3RyaW5nIGZpbGVOYW1lKQorCXsKKwkJU3RyaW5nQnVpbGRlciBkYXRhID0gbmV3IFN0cmluZ0J1aWxkZXIoKTsKKwkJVVJMIGpzRGF0YSA9IEFjdGl2YXRvci5nZXREZWZhdWx0KCkuZ2V0QnVuZGxlKCkuZ2V0UmVzb3VyY2UoZmlsZU5hbWUpOworCQlpZiAoanNEYXRhICE9IG51bGwpIHsKKwkJCUJ1ZmZlcmVkUmVhZGVyIHJlYWRlciA9IG51bGw7CisJCQl0cnkgeworCQkJCXJlYWRlciA9IG5ldyBCdWZmZXJlZFJlYWRlcihuZXcgSW5wdXRTdHJlYW1SZWFkZXIoanNEYXRhLm9wZW5TdHJlYW0oKSkpOworCQkJCWNoYXJbXSBidWYgPSBuZXcgY2hhclsxMDI0XTsKKwkJICAgICAgICBpbnQgYnl0ZXNSZWFkPTA7CisJCSAgICAgICAgd2hpbGUoKGJ5dGVzUmVhZD1yZWFkZXIucmVhZChidWYpKSAhPSAtMSl7CisJCSAgICAgICAgCWRhdGEuYXBwZW5kKGJ1ZiwgMCwgYnl0ZXNSZWFkKTsKKwkJICAgICAgICB9CisJCQl9IGNhdGNoIChJT0V4Y2VwdGlvbiBpb2UpIHsKKwkJCQkvLyBkb24ndCBjYXJlCisJCQkJaW9lLnByaW50U3RhY2tUcmFjZSgpOworCQkJfSBmaW5hbGx5IHsKKwkJCQl0cnkgeworCQkJCQlyZWFkZXIuY2xvc2UoKTsKKwkJCQl9IGNhdGNoIChFeGNlcHRpb24gZSkgeworCQkJCQkvLyBkbyBub3RoaW5nCisJCQkJfQorCQkJfQorCQl9CisJCQorCQlyZXR1cm4gZGF0YS50b1N0cmluZygpOworCX0KKwkKKwkKK30KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsLmxvZ2dlcnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdXRpbC9sb2dnZXJzL2h0bWxnZW5lcmF0aW9uL0xJLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbC5sb2dnZXJzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3V0aWwvbG9nZ2Vycy9odG1sZ2VuZXJhdGlvbi9MSS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhjNGViYzYKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbC5sb2dnZXJzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3V0aWwvbG9nZ2Vycy9odG1sZ2VuZXJhdGlvbi9MSS5qYXZhCkBAIC0wLDAgKzEsMjYgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS51dGlsLmxvZ2dlcnMuaHRtbGdlbmVyYXRpb247CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTEgSUJNIENvcnBvcmF0aW9uLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworcHVibGljIGNsYXNzIExJIGV4dGVuZHMgSHRtbEVsZW1lbnQgeworCisJLyoqCisJICogCisJICogQHBhcmFtIGRhdGEKKwkgKi8KKwlAU3VwcHJlc3NXYXJuaW5ncygibmxzIikKKwlwdWJsaWMgTEkoU3RyaW5nIGRhdGEpIHsKKwkJc3VwZXIoImxpIik7CisJCXNldERhdGEoZGF0YSk7CisJfQorCit9CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbC5sb2dnZXJzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3V0aWwvbG9nZ2Vycy9odG1sZ2VuZXJhdGlvbi9TY3JpcHQuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsLmxvZ2dlcnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdXRpbC9sb2dnZXJzL2h0bWxnZW5lcmF0aW9uL1NjcmlwdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFiMGIwNjUKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbC5sb2dnZXJzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3V0aWwvbG9nZ2Vycy9odG1sZ2VuZXJhdGlvbi9TY3JpcHQuamF2YQpAQCAtMCwwICsxLDI3IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0udXRpbC5sb2dnZXJzLmh0bWxnZW5lcmF0aW9uOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDExIElCTSBDb3Jwb3JhdGlvbi4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworcHVibGljIGNsYXNzIFNjcmlwdCBleHRlbmRzIEh0bWxFbGVtZW50IHsKKworCS8qKgorCSAqIAorCSAqIEBwYXJhbSBhdHRyCisJICogQHBhcmFtIHZhbAorCSAqLworCUBTdXBwcmVzc1dhcm5pbmdzKCJubHMiKQkKKwlwdWJsaWMgU2NyaXB0KFN0cmluZyBhdHRyLCBTdHJpbmcgdmFsKSB7CisJCXN1cGVyKCJzY3JpcHQiLGF0dHIsdmFsKTsKKwl9CisKK30KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsLmxvZ2dlcnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdXRpbC9sb2dnZXJzL2h0bWxnZW5lcmF0aW9uL1NwYW4uamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsLmxvZ2dlcnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdXRpbC9sb2dnZXJzL2h0bWxnZW5lcmF0aW9uL1NwYW4uamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZGMzNjViCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWwubG9nZ2Vycy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91dGlsL2xvZ2dlcnMvaHRtbGdlbmVyYXRpb24vU3Bhbi5qYXZhCkBAIC0wLDAgKzEsMjcgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS51dGlsLmxvZ2dlcnMuaHRtbGdlbmVyYXRpb247CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTEgSUJNIENvcnBvcmF0aW9uLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCitwdWJsaWMgY2xhc3MgU3BhbiBleHRlbmRzIEh0bWxFbGVtZW50IHsKKworCS8qKgorCSAqIAorCSAqIEBwYXJhbSBhdHRyCisJICogQHBhcmFtIHZhbAorCSAqLworCUBTdXBwcmVzc1dhcm5pbmdzKCJubHMiKQorCXB1YmxpYyBTcGFuKFN0cmluZyBhdHRyLCBTdHJpbmcgdmFsKSB7CisJCXN1cGVyKCJzcGFuIixhdHRyLHZhbCk7CisJfQorCit9CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbC5sb2dnZXJzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3V0aWwvbG9nZ2Vycy9odG1sZ2VuZXJhdGlvbi9TdHlsZS5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWwubG9nZ2Vycy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91dGlsL2xvZ2dlcnMvaHRtbGdlbmVyYXRpb24vU3R5bGUuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hN2ZmMDRkCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWwubG9nZ2Vycy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91dGlsL2xvZ2dlcnMvaHRtbGdlbmVyYXRpb24vU3R5bGUuamF2YQpAQCAtMCwwICsxLDI3IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0udXRpbC5sb2dnZXJzLmh0bWxnZW5lcmF0aW9uOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDExIElCTSBDb3Jwb3JhdGlvbi4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworcHVibGljIGNsYXNzIFN0eWxlIGV4dGVuZHMgSHRtbEVsZW1lbnQgeworCisJLyoqCisJICogCisJICogQHBhcmFtIGF0dHIKKwkgKiBAcGFyYW0gdmFsCisJICovCisJQFN1cHByZXNzV2FybmluZ3MoIm5scyIpCQorCXB1YmxpYyBTdHlsZShTdHJpbmcgYXR0ciwgU3RyaW5nIHZhbCkgeworCQlzdXBlcigic3R5bGUiLGF0dHIsdmFsKTsKKwl9CisKK30KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsLmxvZ2dlcnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdXRpbC9sb2dnZXJzL2h0bWxnZW5lcmF0aW9uL1RELmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbC5sb2dnZXJzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3V0aWwvbG9nZ2Vycy9odG1sZ2VuZXJhdGlvbi9URC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ1YTViMjIKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbC5sb2dnZXJzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3V0aWwvbG9nZ2Vycy9odG1sZ2VuZXJhdGlvbi9URC5qYXZhCkBAIC0wLDAgKzEsMzUgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS51dGlsLmxvZ2dlcnMuaHRtbGdlbmVyYXRpb247CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTEgSUJNIENvcnBvcmF0aW9uLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCitwdWJsaWMgY2xhc3MgVEQgZXh0ZW5kcyBIdG1sRWxlbWVudCB7CisKKwkvKioKKwkgKiAKKwkgKiBAcGFyYW0gYXR0cgorCSAqIEBwYXJhbSB2YWwKKwkgKi8KKwlAU3VwcHJlc3NXYXJuaW5ncygibmxzIikKKwlwdWJsaWMgVEQoU3RyaW5nIGF0dHIsIFN0cmluZyB2YWwpIHsKKwkJc3VwZXIoInRkIixhdHRyLHZhbCk7CisJfQorCQorCS8qKgorCSAqIAorCSAqLworCUBTdXBwcmVzc1dhcm5pbmdzKCJubHMiKQorCXB1YmxpYyBURCgpIHsKKwkJc3VwZXIoInRkIik7CisJfQorCit9CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbC5sb2dnZXJzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3V0aWwvbG9nZ2Vycy9odG1sZ2VuZXJhdGlvbi9UUi5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWwubG9nZ2Vycy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91dGlsL2xvZ2dlcnMvaHRtbGdlbmVyYXRpb24vVFIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNDUzZDAxCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWwubG9nZ2Vycy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91dGlsL2xvZ2dlcnMvaHRtbGdlbmVyYXRpb24vVFIuamF2YQpAQCAtMCwwICsxLDM1IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0udXRpbC5sb2dnZXJzLmh0bWxnZW5lcmF0aW9uOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDExIElCTSBDb3Jwb3JhdGlvbi4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworcHVibGljIGNsYXNzIFRSIGV4dGVuZHMgSHRtbEVsZW1lbnQgeworCisJLyoqCisJICogCisJICogQHBhcmFtIGF0dHIKKwkgKiBAcGFyYW0gdmFsCisJICovCisJQFN1cHByZXNzV2FybmluZ3MoIm5scyIpCisJcHVibGljIFRSKFN0cmluZyBhdHRyLCBTdHJpbmcgdmFsKSB7CisJCXN1cGVyKCJ0ciIsYXR0cix2YWwpOworCX0KKwkKKwkvKioKKwkgKiAKKwkgKi8KKwlAU3VwcHJlc3NXYXJuaW5ncygibmxzIikKKwlwdWJsaWMgVFIoKSB7CisJCXN1cGVyKCJ0ciIpOworCX0KKworfQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWwubG9nZ2Vycy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91dGlsL2xvZ2dlcnMvaHRtbGdlbmVyYXRpb24vVGFibGUuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsLmxvZ2dlcnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdXRpbC9sb2dnZXJzL2h0bWxnZW5lcmF0aW9uL1RhYmxlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWJmOTdhOQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsLmxvZ2dlcnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdXRpbC9sb2dnZXJzL2h0bWxnZW5lcmF0aW9uL1RhYmxlLmphdmEKQEAgLTAsMCArMSw1NSBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnV0aWwubG9nZ2Vycy5odG1sZ2VuZXJhdGlvbjsKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDExIElCTSBDb3Jwb3JhdGlvbi4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworcHVibGljIGNsYXNzIFRhYmxlIGV4dGVuZHMgSHRtbEVsZW1lbnQgeworCQorCVRib2R5IHRib2R5ID0gbnVsbDsKKworCisKKwkvKioKKwkgKiAKKwkgKiBAcGFyYW0gYXR0cgorCSAqIEBwYXJhbSB2YWwKKwkgKi8KKwlAU3VwcHJlc3NXYXJuaW5ncygibmxzIikKKwlwdWJsaWMgVGFibGUoU3RyaW5nIGF0dHIsIFN0cmluZyB2YWwpIHsKKwkJc3VwZXIoInRhYmxlIixhdHRyLHZhbCk7CisJfQorCQorCS8qKgorCSAqIAorCSAqLworCUBTdXBwcmVzc1dhcm5pbmdzKCJubHMiKQorCXB1YmxpYyBUYWJsZSgpIHsKKwkJc3VwZXIoInRhYmxlIik7CisJfQorCisJLyoqCisJICogCisJICogQHJldHVybiB0aGUgdGFibGVzIGJvZHkKKwkgKi8KKwlwdWJsaWMgVGJvZHkgZ2V0VGJvZHkoKSB7CisJCXJldHVybiB0Ym9keTsKKwl9CisKKwkvKioKKwkgKiAKKwkgKiBAcGFyYW0gdGJvZHkKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRUYm9keShUYm9keSB0Ym9keSkgeworCQl0aGlzLnRib2R5ID0gdGJvZHk7CisJfQorfQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWwubG9nZ2Vycy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91dGlsL2xvZ2dlcnMvaHRtbGdlbmVyYXRpb24vVGJvZHkuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsLmxvZ2dlcnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdXRpbC9sb2dnZXJzL2h0bWxnZW5lcmF0aW9uL1Rib2R5LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGIxZjY3ZQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsLmxvZ2dlcnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdXRpbC9sb2dnZXJzL2h0bWxnZW5lcmF0aW9uL1Rib2R5LmphdmEKQEAgLTAsMCArMSwyNSBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnV0aWwubG9nZ2Vycy5odG1sZ2VuZXJhdGlvbjsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAxMSBJQk0gQ29ycG9yYXRpb24uCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKK3B1YmxpYyBjbGFzcyBUYm9keSBleHRlbmRzIEh0bWxFbGVtZW50IHsKKworCS8qKgorCSAqIAorCSAqLworCUBTdXBwcmVzc1dhcm5pbmdzKCJubHMiKQorCXB1YmxpYyBUYm9keSgpIHsKKwkJc3VwZXIoInRib2R5Iik7CisJfQorCit9CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbC5sb2dnZXJzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3V0aWwvbG9nZ2Vycy9odG1sZ2VuZXJhdGlvbi9UaXRsZS5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWwubG9nZ2Vycy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91dGlsL2xvZ2dlcnMvaHRtbGdlbmVyYXRpb24vVGl0bGUuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MGI4NTUwCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWwubG9nZ2Vycy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91dGlsL2xvZ2dlcnMvaHRtbGdlbmVyYXRpb24vVGl0bGUuamF2YQpAQCAtMCwwICsxLDI3IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0udXRpbC5sb2dnZXJzLmh0bWxnZW5lcmF0aW9uOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDExIElCTSBDb3Jwb3JhdGlvbi4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworcHVibGljIGNsYXNzIFRpdGxlIGV4dGVuZHMgSHRtbEVsZW1lbnQgeworCisJLyoqCisJICogCisJICogQHBhcmFtIGRhdGEKKwkgKi8KKwlAU3VwcHJlc3NXYXJuaW5ncygibmxzIikKKwlwdWJsaWMgVGl0bGUoU3RyaW5nIGRhdGEpIHsKKwkJc3VwZXIoInRpdGxlIik7CisJCXRoaXMuc2V0RGF0YShkYXRhKTsKKwl9CisKK30KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsLmxvZ2dlcnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdXRpbC9sb2dnZXJzL2h0bWxnZW5lcmF0aW9uL1VMLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbC5sb2dnZXJzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3V0aWwvbG9nZ2Vycy9odG1sZ2VuZXJhdGlvbi9VTC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNmYjBhMGIKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbC5sb2dnZXJzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3V0aWwvbG9nZ2Vycy9odG1sZ2VuZXJhdGlvbi9VTC5qYXZhCkBAIC0wLDAgKzEsMjYgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS51dGlsLmxvZ2dlcnMuaHRtbGdlbmVyYXRpb247CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTEgSUJNIENvcnBvcmF0aW9uLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCisKK3B1YmxpYyBjbGFzcyBVTCBleHRlbmRzIEh0bWxFbGVtZW50IHsKKworCS8qKgorCSAqIAorCSAqLworCUBTdXBwcmVzc1dhcm5pbmdzKCJubHMiKQorCXB1YmxpYyBVTCgpIHsKKwkJc3VwZXIoInVsIik7CisJfQorCit9CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbC5sb2dnZXJzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3V0aWwvbG9nZ2Vycy9wcmVmZXJlbmNlcy9Mb2dnaW5nUHJlZmVyZW5jZVBhZ2UuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsLmxvZ2dlcnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdXRpbC9sb2dnZXJzL3ByZWZlcmVuY2VzL0xvZ2dpbmdQcmVmZXJlbmNlUGFnZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY1MjE1YmEKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbC5sb2dnZXJzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3V0aWwvbG9nZ2Vycy9wcmVmZXJlbmNlcy9Mb2dnaW5nUHJlZmVyZW5jZVBhZ2UuamF2YQpAQCAtMCwwICsxLDczIEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0udXRpbC5sb2dnZXJzLnByZWZlcmVuY2VzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA5IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnByZWZlcmVuY2UuQm9vbGVhbkZpZWxkRWRpdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnByZWZlcmVuY2UuRmllbGRFZGl0b3JQcmVmZXJlbmNlUGFnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5JV29ya2JlbmNoOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2hQcmVmZXJlbmNlUGFnZTsKKworLyoqCisgKiBUaGlzIGNsYXNzIHJlcHJlc2VudHMgYSBwcmVmZXJlbmNlIHBhZ2UgdGhhdCBpcyBjb250cmlidXRlZCB0byB0aGUKKyAqIFByZWZlcmVuY2VzIGRpYWxvZy4gQnkgc3ViLWNsYXNzaW5nIDxzYW1wPkZpZWxkRWRpdG9yUHJlZmVyZW5jZVBhZ2U8L3NhbXA+LAorICogd2UgY2FuIHVzZSB0aGUgZmllbGQgc3VwcG9ydCBidWlsdCBpbnRvIEpGYWNlIHRoYXQgYWxsb3dzIHVzIHRvIGNyZWF0ZSBhIHBhZ2UKKyAqIHRoYXQgaXMgc21hbGwgYW5kIGtub3dzIGhvdyB0byBzYXZlLCByZXN0b3JlIGFuZCBhcHBseSBpdHNlbGYuCisgKiA8cD4KKyAqIFRoaXMgcGFnZSBpcyB1c2VkIHRvIG1vZGlmeSBwcmVmZXJlbmNlcyBvbmx5LiBUaGV5IGFyZSBzdG9yZWQgaW4gdGhlCisgKiBwcmVmZXJlbmNlIHN0b3JlIHRoYXQgYmVsb25ncyB0byB0aGUgbWFpbiBwbHVnLWluIGNsYXNzLiBUaGF0IHdheSwKKyAqIHByZWZlcmVuY2VzIGNhbiBiZSBhY2Nlc3NlZCBkaXJlY3RseSB2aWEgdGhlIHByZWZlcmVuY2Ugc3RvcmUuCisgKi8KKworcHVibGljIGNsYXNzIExvZ2dpbmdQcmVmZXJlbmNlUGFnZSBleHRlbmRzIEZpZWxkRWRpdG9yUHJlZmVyZW5jZVBhZ2UgaW1wbGVtZW50cworCQlJV29ya2JlbmNoUHJlZmVyZW5jZVBhZ2UgeworCisJLyoqCisJICogRGVmYXVsdCBsb2dnaW5nIHNldHRpbmcKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGJvb2xlYW4gREVGQVVMVF9MT0dHSU5HX0ZMQUcgPSBmYWxzZTsKKwkKKwkvKioKKwkgKiBUaGUgSUQgb2YgdGhlIFNURU0gUHJlZmVyZW5jZSBwYWdlLgorCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIElEX0xPR0dJTkdfUFJFRkVSRU5DRV9QQUdFID0gIm9yZy5lY2xpcHNlLnN0ZW0udWkucHJlZmVyZW5jZXMuTG9nZ2luZ1ByZWZlcmVuY2VQYWdlIjsKKworCS8qKgorCSAqIENvbnN0cnVjdG9yCisJICovCisJcHVibGljIExvZ2dpbmdQcmVmZXJlbmNlUGFnZSgpIHsKKwkJc3VwZXIoR1JJRCk7CisJCXNldFByZWZlcmVuY2VTdG9yZShvcmcuZWNsaXBzZS5zdGVtLnV0aWwubG9nZ2Vycy5BY3RpdmF0b3IuZ2V0RGVmYXVsdCgpLmdldFByZWZlcmVuY2VTdG9yZSgpKTsKKwkJc2V0RGVzY3JpcHRpb24oTWVzc2FnZXMuZ2V0U3RyaW5nKCJMb2dnaW5nUFBhZ2UuTG9nZ2luZyIpKTsgLy8kTk9OLU5MUy0xJAorCX0gLy8gU1RFTVByZWZlcmVuY2VQYWdlCisKKwkvKioKKwkgKiBDcmVhdGVzIHRoZSBmaWVsZCBlZGl0b3JzLiBGaWVsZCBlZGl0b3JzIGFyZSBhYnN0cmFjdGlvbnMgb2YgdGhlIGNvbW1vbgorCSAqIEdVSSBibG9ja3MgbmVlZGVkIHRvIG1hbmlwdWxhdGUgdmFyaW91cyB0eXBlcyBvZiBwcmVmZXJlbmNlcy4gRWFjaCBmaWVsZAorCSAqIGVkaXRvciBrbm93cyBob3cgdG8gc2F2ZSBhbmQgcmVzdG9yZSBpdHNlbGYuCisJICovCisJcHVibGljIHZvaWQgY3JlYXRlRmllbGRFZGl0b3JzKCkgeworCQlmaW5hbCBCb29sZWFuRmllbGRFZGl0b3IgaW50ZWdlckZpZWxkRWRpdG9yID0gbmV3IEJvb2xlYW5GaWVsZEVkaXRvcigKKwkJCQlQcmVmZXJlbmNlQ29uc3RhbnRzLkxPR19JTlRFR0VSX1BSRUZFUkVOQ0UsCisJCQkJTWVzc2FnZXMuZ2V0U3RyaW5nKCJMUGFnZUludGVnZXIiKSwgZ2V0RmllbGRFZGl0b3JQYXJlbnQoKSk7IC8vJE5PTi1OTFMtMSQKKworCQlhZGRGaWVsZChpbnRlZ2VyRmllbGRFZGl0b3IpOworCX0gLy8gY3JlYXRlRmllbGRFZGl0b3JzCisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2hQcmVmZXJlbmNlUGFnZSNpbml0KG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2gpCisJICovCisJcHVibGljIHZvaWQgaW5pdChAU3VwcHJlc3NXYXJuaW5ncygidW51c2VkIikvLyROT04tTkxTLTEkCisJCQlJV29ya2JlbmNoIHdvcmtiZW5jaCkgeworCQkvLyBOb3RoaW5nCisJfSAvLyBpbml0CisKK30gLy8gU1RFTVByZWZlcmVuY2VQYWdlCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbC5sb2dnZXJzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3V0aWwvbG9nZ2Vycy9wcmVmZXJlbmNlcy9NZXNzYWdlcy5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWwubG9nZ2Vycy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91dGlsL2xvZ2dlcnMvcHJlZmVyZW5jZXMvTWVzc2FnZXMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZjM0YmMwCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWwubG9nZ2Vycy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91dGlsL2xvZ2dlcnMvcHJlZmVyZW5jZXMvTWVzc2FnZXMuamF2YQpAQCAtMCwwICsxLDQyIEBACisvLyBNZXNzYWdlcy5qYXZhCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0udXRpbC5sb2dnZXJzLnByZWZlcmVuY2VzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGphdmEudXRpbC5NaXNzaW5nUmVzb3VyY2VFeGNlcHRpb247CitpbXBvcnQgamF2YS51dGlsLlJlc291cmNlQnVuZGxlOworCisvKioKKyAqIFRoaXMgY2xhc3MgcmV0cmlldmVzIG1lc3NhZ2VzIGZvciBTVEVNIHByZWZlcmVuY2VzLgorICovCitwdWJsaWMgY2xhc3MgTWVzc2FnZXMgeworCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBCVU5ETEVfTkFNRSA9ICJvcmcuZWNsaXBzZS5zdGVtLnV0aWwubG9nZ2Vycy5wcmVmZXJlbmNlcy5tZXNzYWdlcyI7IC8vJE5PTi1OTFMtMSQKKworCXByaXZhdGUgc3RhdGljIGZpbmFsIFJlc291cmNlQnVuZGxlIFJFU09VUkNFX0JVTkRMRSA9IFJlc291cmNlQnVuZGxlCisJCQkuZ2V0QnVuZGxlKEJVTkRMRV9OQU1FKTsKKworCXByaXZhdGUgTWVzc2FnZXMoKSB7CisJCS8vIE5vdGhpbmcKKwl9CisKKwkvKioKKwkgKiBAcGFyYW0ga2V5CisJICogQHJldHVybiB0aGUgc3RyaW5nIG1hdGNoaW5nIHRoZSBrZXkKKwkgKi8KKwlwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRTdHJpbmcoU3RyaW5nIGtleSkgeworCQl0cnkgeworCQkJcmV0dXJuIFJFU09VUkNFX0JVTkRMRS5nZXRTdHJpbmcoa2V5KTsKKwkJfSBjYXRjaCAoTWlzc2luZ1Jlc291cmNlRXhjZXB0aW9uIGUpIHsKKwkJCXJldHVybiAnIScgKyBrZXkgKyAnISc7CisJCX0KKwl9Cit9IC8vIE1lc3NhZ2VzCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbC5sb2dnZXJzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3V0aWwvbG9nZ2Vycy9wcmVmZXJlbmNlcy9QcmVmZXJlbmNlQ29uc3RhbnRzLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbC5sb2dnZXJzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3V0aWwvbG9nZ2Vycy9wcmVmZXJlbmNlcy9QcmVmZXJlbmNlQ29uc3RhbnRzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTk5OWM4YgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsLmxvZ2dlcnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdXRpbC9sb2dnZXJzL3ByZWZlcmVuY2VzL1ByZWZlcmVuY2VDb25zdGFudHMuamF2YQpAQCAtMCwwICsxLDI0IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0udXRpbC5sb2dnZXJzLnByZWZlcmVuY2VzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqCisgKiBDb25zdGFudCBkZWZpbml0aW9ucyBmb3IgcGx1Zy1pbiBwcmVmZXJlbmNlcworICovCitwdWJsaWMgY2xhc3MgUHJlZmVyZW5jZUNvbnN0YW50cyB7CisKKwkvKioKKwkgKiBMb2dnaW5nIGZvcm1hdAorCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIExPR19JTlRFR0VSX1BSRUZFUkVOQ0UgPSAib3JnLmVjbGlwc2Uuc3RlbS5sb2dnaW5nLmludGVnZXJzIjsKKworfSAvLyBQcmVmZXJlbmNlQ29uc3RhbnRzCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbC5sb2dnZXJzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3V0aWwvbG9nZ2Vycy9wcmVmZXJlbmNlcy9QcmVmZXJlbmNlSW5pdGlhbGl6ZXIuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsLmxvZ2dlcnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdXRpbC9sb2dnZXJzL3ByZWZlcmVuY2VzL1ByZWZlcmVuY2VJbml0aWFsaXplci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNjZGFkY2MKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbC5sb2dnZXJzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3V0aWwvbG9nZ2Vycy9wcmVmZXJlbmNlcy9QcmVmZXJlbmNlSW5pdGlhbGl6ZXIuamF2YQpAQCAtMCwwICsxLDMzIEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0udXRpbC5sb2dnZXJzLnByZWZlcmVuY2VzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5wcmVmZXJlbmNlcy5BYnN0cmFjdFByZWZlcmVuY2VJbml0aWFsaXplcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5wcmVmZXJlbmNlLklQcmVmZXJlbmNlU3RvcmU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS51aS5BY3RpdmF0b3I7CisKKy8qKgorICogQ2xhc3MgdXNlZCB0byBpbml0aWFsaXplIGRlZmF1bHQgcHJlZmVyZW5jZSB2YWx1ZXMuCisgKi8KK3B1YmxpYyBjbGFzcyBQcmVmZXJlbmNlSW5pdGlhbGl6ZXIgZXh0ZW5kcyBBYnN0cmFjdFByZWZlcmVuY2VJbml0aWFsaXplciB7CisJCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUucHJlZmVyZW5jZXMuQWJzdHJhY3RQcmVmZXJlbmNlSW5pdGlhbGl6ZXIjaW5pdGlhbGl6ZURlZmF1bHRQcmVmZXJlbmNlcygpCisJICovCisJcHVibGljIHZvaWQgaW5pdGlhbGl6ZURlZmF1bHRQcmVmZXJlbmNlcygpIHsKKwkJSVByZWZlcmVuY2VTdG9yZSBzdG9yZSA9IEFjdGl2YXRvci5nZXREZWZhdWx0KCkuZ2V0UHJlZmVyZW5jZVN0b3JlKCk7CisJCS8vIGZvciBtYXAgYW5kIHktYXhpcyBkYXRhIGRpc3BsYXkKKwkJc3RvcmUuc2V0RGVmYXVsdChQcmVmZXJlbmNlQ29uc3RhbnRzLkxPR19JTlRFR0VSX1BSRUZFUkVOQ0UsCisJCQkJCQlMb2dnaW5nUHJlZmVyZW5jZVBhZ2UuREVGQVVMVF9MT0dHSU5HX0ZMQUcpOworCQkKKwl9Cit9IC8vIFByZWZlcmVuY2VJbml0aWFsaXplcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWwubG9nZ2Vycy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91dGlsL2xvZ2dlcnMvcHJlZmVyZW5jZXMvbWVzc2FnZXMucHJvcGVydGllcyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsLmxvZ2dlcnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdXRpbC9sb2dnZXJzL3ByZWZlcmVuY2VzL21lc3NhZ2VzLnByb3BlcnRpZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODI5NzczNgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsLmxvZ2dlcnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdXRpbC9sb2dnZXJzL3ByZWZlcmVuY2VzL21lc3NhZ2VzLnByb3BlcnRpZXMKQEAgLTAsMCArMSwxNSBAQAorIyBQcmVmZXJlbmNlTWVzc2FnZXMucHJvcGVydGllcworIworIyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIyAqIENvcHlyaWdodCAoYykgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyMgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisjICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisjICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyMgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorIyAqCisjICogQ29udHJpYnV0b3JzOgorIyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworTG9nZ2luZ1BQYWdlLkxvZ2dpbmc9TG9nZ2luZyBwcmVmZXJlbmNlcworTFBhZ2VJbnRlZ2VyPUxvZyBpbnRlZ2VycyAKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbC5sb2dnZXJzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3V0aWwvbG9nZ2Vycy9wcmVmZXJlbmNlcy9tZXNzYWdlc19kZS5wcm9wZXJ0aWVzIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWwubG9nZ2Vycy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91dGlsL2xvZ2dlcnMvcHJlZmVyZW5jZXMvbWVzc2FnZXNfZGUucHJvcGVydGllcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMzdmZmZhCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWwubG9nZ2Vycy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91dGlsL2xvZ2dlcnMvcHJlZmVyZW5jZXMvbWVzc2FnZXNfZGUucHJvcGVydGllcwpAQCAtMCwwICsxLDE1IEBACisjIFByZWZlcmVuY2VNZXNzYWdlcy5wcm9wZXJ0aWVzCisjCisjIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjICogQ29weXJpZ2h0IChjKSAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorIyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyMgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyMgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorIyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisjICoKKyMgKiBDb250cmlidXRvcnM6CisjICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorIyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitMb2dnaW5nUFBhZ2UuTG9nZ2luZz1Mb2dnaW5nIEVpbnN0ZWxsdW5nZW4KK0xQYWdlSW50ZWdlcj1Mb2cgWmFobGVuCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbC5sb2dnZXJzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3V0aWwvbG9nZ2Vycy9wcmVmZXJlbmNlcy9tZXNzYWdlc19rci5wcm9wZXJ0aWVzIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWwubG9nZ2Vycy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91dGlsL2xvZ2dlcnMvcHJlZmVyZW5jZXMvbWVzc2FnZXNfa3IucHJvcGVydGllcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MTVhZWM0Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWwubG9nZ2Vycy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91dGlsL2xvZ2dlcnMvcHJlZmVyZW5jZXMvbWVzc2FnZXNfa3IucHJvcGVydGllcwpAQCAtMCwwICsxLDE1IEBACisjIFByZWZlcmVuY2VNZXNzYWdlcy5wcm9wZXJ0aWVzCisjCisjIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjICogQ29weXJpZ2h0IChjKSAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorIyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyMgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyMgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorIyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisjICoKKyMgKiBDb250cmlidXRvcnM6CisjICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorIyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitMb2dnaW5nUFBhZ2UuTG9nZ2luZz1cdWI4NWNcdWFlNDUgXHVkNjU4XHVhY2JkIFx1YzEyNFx1YzgxNQorTFBhZ2VJbnRlZ2VyPVx1Yjg1Y1x1YWRmOCBcdWM4MTVcdWMyMTgKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsLmxvZ2dlcnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdXRpbC9sb2dnZXJzL3ByZWZlcmVuY2VzL21lc3NhZ2VzX3poLnByb3BlcnRpZXMgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbC5sb2dnZXJzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3V0aWwvbG9nZ2Vycy9wcmVmZXJlbmNlcy9tZXNzYWdlc196aC5wcm9wZXJ0aWVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE4NjhkMTAKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbC5sb2dnZXJzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3V0aWwvbG9nZ2Vycy9wcmVmZXJlbmNlcy9tZXNzYWdlc196aC5wcm9wZXJ0aWVzCkBAIC0wLDAgKzEsMTUgQEAKKyMgUHJlZmVyZW5jZU1lc3NhZ2VzLnByb3BlcnRpZXMKKyMKKyMgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyMgKiBDb3B5cmlnaHQgKGMpIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisjICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworIyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorIyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisjICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyMgKgorIyAqIENvbnRyaWJ1dG9yczoKKyMgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisjICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK0xvZ2dpbmdQUGFnZS5Mb2dnaW5nPVx1OGJiMFx1NWY1NVx1NTU5Y1x1NTk3ZAorTFBhZ2VJbnRlZ2VyPVx1NWJmOVx1NjU3MFx1NjU3NFx1NjU3MApkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWwubG9nZ2Vycy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91dGlsL2xvZ2dlcnMvdXRpbC9VdGlsLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbC5sb2dnZXJzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3V0aWwvbG9nZ2Vycy91dGlsL1V0aWwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZWUwNjkwCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWwubG9nZ2Vycy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91dGlsL2xvZ2dlcnMvdXRpbC9VdGlsLmphdmEKQEAgLTAsMCArMSw0NiBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnV0aWwubG9nZ2Vycy51dGlsOworCitpbXBvcnQgamF2YS5pby5GaWxlOworCitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuUmVzb3VyY2VzUGx1Z2luOworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUGF0aDsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNiwgMjAwNywgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3B1YmxpYyBjbGFzcyBVdGlsIHsKKwkKKwkvLyBHZXQgdGhlIHBhdGggZnJvbSB0aGUgd29ya3NwYWNlIGxvY2F0aW9uCisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgSVBhdGggUEFUSCA9IFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5nZXRSb290KCkuZ2V0TG9jYXRpb24oKTsKKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgc2VwID0gRmlsZS5zZXBhcmF0b3I7CisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIHNjZW5hcmlvc1VSTFByZWZpeCA9ICJwbGF0Zm9ybTovcmVzb3VyY2UvIjsKKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgYnVpbHRJblNjZW5hcmlvUHJvamVjdEZvbGRlciA9ICJCdWlsdEluU2NlbmFyaW9zIjsKKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgcmVjb3JkZWRTaW11bGF0aW9uc0ZvbGRlck5hbWUgPSAiUmVjb3JkZWQgU2ltdWxhdGlvbnMiOworCQorCS8qKgorCSAqIEdpdmVuIGEgc2NlbmFyaW8sIHJldHVybiB0aGUgZm9sZGVyIHdoZXJlIHJlY29yZGVkIHNpbXVsYXRpb25zIGFyZSBzdG9yZWQuCisJICogCisJICogQHBhcmFtIHNjZW5hcmlvVVJMCisJICogQHJldHVybiBTdHJpbmcgRm9sZGVyIHRvIHN0b3JlIHJlY29yZGVkIHNpbXVsYXRpb25zCisJICovCisJcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0TG9nZ2luZ0ZvbGRlcihTdHJpbmcgc2NlbmFyaW9VUkwpIHsKKwkJYm9vbGVhbiBidWlsdEluU2NlbmFyaW8gPSBzY2VuYXJpb1VSTC5zdGFydHNXaXRoKHNjZW5hcmlvc1VSTFByZWZpeCk7CisJCUlQYXRoIHBhdGgxOworCQlpZihidWlsdEluU2NlbmFyaW8pIHsKKwkJCVN0cmluZyBzY2VuYXJpb1JlbGF0aXZlUGF0aCA9IHNjZW5hcmlvVVJMLnN1YnN0cmluZyhzY2VuYXJpb3NVUkxQcmVmaXgubGVuZ3RoKCkpOworCQkJcGF0aDEgPSBQQVRILmFwcGVuZChzY2VuYXJpb1JlbGF0aXZlUGF0aCkucmVtb3ZlTGFzdFNlZ21lbnRzKDIpOworCQl9IGVsc2UgeworCQkJcGF0aDEgPSBQQVRILmFwcGVuZChidWlsdEluU2NlbmFyaW9Qcm9qZWN0Rm9sZGVyKTsKKwkJfQorCQlTdHJpbmcgcGF0aCA9IHBhdGgxLmFwcGVuZChzZXApLmFwcGVuZChyZWNvcmRlZFNpbXVsYXRpb25zRm9sZGVyTmFtZSkudG9PU1N0cmluZygpOworCQlyZXR1cm4gcGF0aDsKKwl9Cit9CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbC5sb2dnZXJzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3V0aWwvbG9nZ2Vycy92aWV3cy9DU1ZMb2dnZXJGYWN0b3J5LmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbC5sb2dnZXJzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3V0aWwvbG9nZ2Vycy92aWV3cy9DU1ZMb2dnZXJGYWN0b3J5LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWFhMDZjYQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsLmxvZ2dlcnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdXRpbC9sb2dnZXJzL3ZpZXdzL0NTVkxvZ2dlckZhY3RvcnkuamF2YQpAQCAtMCwwICsxLDY4IEBACisvLyBDU1ZMb2dnZXJGYWN0b3J5LmphdmEKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS51dGlsLmxvZ2dlcnMudmlld3M7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDcsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLkludGVncmF0aW9uRGVjb3JhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uam9icy5zaW11bGF0aW9uLklTaW11bGF0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZTsKKworLyoqCisgKiBUaGlzIGNsYXNzIGlzIGEgZmFjdG9yeSBmb3IgY3JlYXRpbmcge0BsaW5rIExvZ2dlckNvbnRyb2x9IGluc3RhbmNlcy4KKyAqLworcHVibGljIGNsYXNzIENTVkxvZ2dlckZhY3RvcnkgaW1wbGVtZW50cyBMb2dnZXJDb250cm9sRmFjdG9yeSB7CisKKwkvKioKKwkgKiBwdWJsaWMgSU5TVEFOQ0UgZm9yIHRoaXMgRmFjdG9yeQorCSAqLworCXB1YmxpYyBzdGF0aWMgQ1NWTG9nZ2VyRmFjdG9yeSBJTlNUQU5DRSA9IG5ldyBDU1ZMb2dnZXJGYWN0b3J5KCk7CisKKwkvKioKKwkgKiBDb25zdGFudHMgCisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgTE9HR0VSX1RZUEUgPSAiQ1NWTG9nZ2VyIjsKKwkKKwkvKioKKwkgKiBFbXB0eSBjb25zdHJ1Y3RvcgorCSAqLworCXByaXZhdGUgQ1NWTG9nZ2VyRmFjdG9yeSgpIHsKKwkJLyoKKwkJICogZW1wdHkgY29uc3RydWN0b3IKKwkJICovCisJfQorCQorCS8qKgorCSAqIAorCSAqIEBwYXJhbSBwYXJlbnQKKwkgKiBAcGFyYW0gZGlyTmFtZQorCSAqIEBwYXJhbSBzaW11bGF0aW9uCisJICogQHBhcmFtIGRtCisJICogQHBhcmFtIGxvZ1J1blBhcmFtZXRlcnMKKwkgKiBAcmV0dXJuIHRoZSBjb250cm9sCisJICovCisJcHVibGljIExvZ2dlckNvbnRyb2wgY3JlYXRlKGZpbmFsIENvbXBvc2l0ZSBwYXJlbnQsIFN0cmluZyBkaXJOYW1lLCBJU2ltdWxhdGlvbiBzaW11bGF0aW9uLCBJbnRlZ3JhdGlvbkRlY29yYXRvciBkbSwgYm9vbGVhbiBsb2dSdW5QYXJhbWV0ZXJzKSB7CisJCU5ld0NTVkxvZ1dyaXRlciAgbmV3Q1NWV3JpdGVyID0gbmV3IE5ld0NTVkxvZ1dyaXRlcihkaXJOYW1lLCBzaW11bGF0aW9uLCBkbSwgbG9nUnVuUGFyYW1ldGVycyk7CisJCQorCQlMb2dnZXJDb250cm9sIGN0cmwgPSBuZXcgRGF0YUhpc3RvcnlMb2dnZXIocGFyZW50LCBuZXdDU1ZXcml0ZXIsIHNpbXVsYXRpb24sIGRtKTsKKwkJCisJCXJldHVybiBjdHJsOworCX0KKwkKKwkvKioKKwkgKiBAcmV0dXJuIFRPRE8gSkZLCisJICogCisJICovCisJcHVibGljIFN0cmluZyBnZXRDb250cm9sVHlwZSgpIHsKKwkJcmV0dXJuIExPR0dFUl9UWVBFOworCX0KKworfSAvLyBDU1ZMb2dnZXJGYWN0b3J5CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbC5sb2dnZXJzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3V0aWwvbG9nZ2Vycy92aWV3cy9DU1ZMb2dnZXJWaWV3LmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbC5sb2dnZXJzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3V0aWwvbG9nZ2Vycy92aWV3cy9DU1ZMb2dnZXJWaWV3LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDE4YzA4YgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsLmxvZ2dlcnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdXRpbC9sb2dnZXJzL3ZpZXdzL0NTVkxvZ2dlclZpZXcuamF2YQpAQCAtMCwwICsxLDEwMiBAQAorLy8gQ1NWTG9nZ2VyVmlldyAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS51dGlsLmxvZ2dlcnMudmlld3M7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDcsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5EZWNvcmF0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5qb2JzLnNpbXVsYXRpb24uU2ltdWxhdGlvbk1hbmFnZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklTZWxlY3Rpb25MaXN0ZW5lcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5JV29ya2JlbmNoUGFydDsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5wYXJ0LlZpZXdQYXJ0OworCisvKioKKyAqIFRoaXMgdmlldyBjb250YWlucyBCSVJUIG91dHB1dCB0aGF0IHBsb3RzIHZhbHVlcyBvZiB2YXJpYWJsZXMgaW4gU1RFTQorICogc2ltdWxhdGlvbnMuCisgKi8KKworcHVibGljIGNsYXNzIENTVkxvZ2dlclZpZXcgZXh0ZW5kcyBWaWV3UGFydCBpbXBsZW1lbnRzIElTZWxlY3Rpb25MaXN0ZW5lciB7CisKKwkvL3ByaXZhdGUgTGlzdDxJZGVudGlmaWFibGU+IHNlbGVjdGVkSWRlbnRpZmlhYmxlcyA9IG51bGw7CisKKwkKKwkvKioKKwkgKiBUaGlzIGlzIHRoZSBkZWNvcmF0b3IgdGhhdCBoYXMgYmVlbiBzZWxlY3RlZCBieSB0aGUgY29tYm8gYm94LgorCSAqLworCXByb3RlY3RlZCBEZWNvcmF0b3Igc2VsZWN0ZWREZWNvcmF0b3I7CisKKwlwcml2YXRlIExvZ2dlclZpZXdlciBsb2dnZXJWaWV3ZXI7CisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnVpLnBhcnQuV29ya2JlbmNoUGFydCNjcmVhdGVQYXJ0Q29udHJvbChvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGUpCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgY3JlYXRlUGFydENvbnRyb2woZmluYWwgQ29tcG9zaXRlIHBhcmVudCkgeworCisJCWxvZ2dlclZpZXdlciA9IG5ldyBMb2dnZXJWaWV3ZXIocGFyZW50LCBDU1ZMb2dnZXJGYWN0b3J5LklOU1RBTkNFKTsKKwkJbG9nZ2VyVmlld2VyLnNldElucHV0KFNpbXVsYXRpb25NYW5hZ2VyLmdldE1hbmFnZXIoKSk7CisJCQorCS8vCWxvZ2dlclZpZXdlci5hZGRBbGxBY3Rpb25CdXR0b25zKFNpbXVsYXRpb25NYW5hZ2VyLmdldE1hbmFnZXIoKSk7CisKKwkJZ2V0U2l0ZSgpLnNldFNlbGVjdGlvblByb3ZpZGVyKGxvZ2dlclZpZXdlcik7CisKKwkJLy8gUmVnaXN0ZXIgd2l0aCB0aGUgU2VsZWN0aW9uU2VydmljZQorCQkvLyBTdGVmYW46IENvbW1lbnRlZCBvdXQgc2luY2Ugd2UgZG9uJ3QgYWxsb3cKKwkJLy8gbG9nZ2luZyBvZiBpbmRpdmlkdWFsIGxvY2F0aW9ucworCQkKKy8qCQlnZXRTaXRlKCkuZ2V0V29ya2JlbmNoV2luZG93KCkuZ2V0U2VsZWN0aW9uU2VydmljZSgpCisJCQkJLmFkZFNlbGVjdGlvbkxpc3RlbmVyKHRoaXMpOworKi8KKwl9IC8vIGNyZWF0ZVBhcnRDb250cm9sCisKKwkvKioKKwkgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgd2hlbmV2ZXIgQU5ZVEhJTkcgaXMgc2VsZWN0ZWQgaW4gdGhlIEVjbGlwc2UKKwkgKiB3b3JrYmVuY2guIEl0J3Mgam9iIGlzIHRvIGZpbHRlciBvdXQgc2VsZWN0aW9ucyBvZiBJU2ltdWxhdGlvbiBpbnN0YW5jZXMKKwkgKiBhbmQgdXBkYXRlIHRoZSBjaGFydCBpbiB0aGUgQ1NWTG9nZ2VyQ2FudmFzCisJICogQHBhcmFtIHBhcnQgCisJICogQHBhcmFtIHNlbGVjdGlvbiAKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnVpLklTZWxlY3Rpb25MaXN0ZW5lciNzZWxlY3Rpb25DaGFuZ2VkKG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2hQYXJ0LAorCSAqICAgICAgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uKQorCSAqLworCUBTdXBwcmVzc1dhcm5pbmdzKCJ1bmNoZWNrZWQiKQorCXB1YmxpYyB2b2lkIHNlbGVjdGlvbkNoYW5nZWQoZmluYWwgSVdvcmtiZW5jaFBhcnQgcGFydCwKKwkJCWZpbmFsIElTZWxlY3Rpb24gc2VsZWN0aW9uKSB7CisJICAgICAvKgorCSAgICAgICogdGhpcyBtZXRob2QgaXMgZW1wdHkgYmVjYXVzZSBub3cgd2UgbG9nIHRoZSBlbnRpcmUgc2ltdWxhdGlvbgorCSAgICAgICogd2Ugbm93IGxvbmdlciBoYXZlIHRvIHRyYWNrIGluZGl2aWR1YWwgbG9jYXRpb25zIG9mIGlkZW50aWZpYWJsZXMgYXMKKwkgICAgICAqIGxvZ2dlZC9ub3QgbG9nZ2VkCQorCSAgICAgICovCisKKwl9IC8vIHNlbGVjdGlvbkNoYW5nZWQKKworCQorCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2UudWkucGFydC5Xb3JrYmVuY2hQYXJ0I2Rpc3Bvc2UoKQorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGRpc3Bvc2UoKSB7CisJCWdldFNpdGUoKS5nZXRXb3JrYmVuY2hXaW5kb3coKS5nZXRTZWxlY3Rpb25TZXJ2aWNlKCkKKwkJCQkucmVtb3ZlU2VsZWN0aW9uTGlzdGVuZXIodGhpcyk7CisJfSAvLyBkaXNwb3NlCisKKwkvKioKKwkgKiBUaGlzIGlzIHJlcXVpcmVkIGJ5IHRoZSBpbnRlcmZhY2UsIGJ1dCB3ZSdyZSBub3QgdXNpbmcgaXQuCisJICogCisJICogQHNlZSBvcmcuZWNsaXBzZS51aS5wYXJ0LldvcmtiZW5jaFBhcnQjc2V0Rm9jdXMoKQorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIHNldEZvY3VzKCkgeworCQkvLyBOb3RoaW5nCisJfSAvLyBzZXRGb2N1cworCit9IC8vIENTVkxvZ2dlclZpZXcKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsLmxvZ2dlcnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdXRpbC9sb2dnZXJzL3ZpZXdzL0N1c3RvbUNTVkxvZ2dlci5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWwubG9nZ2Vycy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91dGlsL2xvZ2dlcnMvdmlld3MvQ3VzdG9tQ1NWTG9nZ2VyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDkwYWUzNAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsLmxvZ2dlcnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdXRpbC9sb2dnZXJzL3ZpZXdzL0N1c3RvbUNTVkxvZ2dlci5qYXZhCkBAIC0wLDAgKzEsMjQ0IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0udXRpbC5sb2dnZXJzLnZpZXdzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA3LCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOworaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKK2ltcG9ydCBqYXZhLnV0aWwuTWFwOworaW1wb3J0IGphdmEudXRpbC5TZXQ7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuRU1hcDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuVVJJOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uYWRhcHRlcnMudGltZS5UaW1lUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5hZGFwdGVycy50aW1lLlRpbWVQcm92aWRlckFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5HcmFwaDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguTm9kZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuSW50ZWdyYXRpb25EZWNvcmF0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLkRpc2Vhc2VNb2RlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmpvYnMuc2ltdWxhdGlvbi5JU2ltdWxhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmpvYnMuc2ltdWxhdGlvbi5JU2ltdWxhdGlvbkxpc3RlbmVyU3luYzsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmpvYnMuc2ltdWxhdGlvbi5TaW11bGF0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uam9icy5zaW11bGF0aW9uLlNpbXVsYXRpb25FdmVudDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmpvYnMuc2ltdWxhdGlvbi5TaW11bGF0aW9uU3RhdGU7CisKKy8qKgorICogRGF0YUhpc3RvcnlMb2dnZXIKKyAqLworcHVibGljIGNsYXNzIEN1c3RvbUNTVkxvZ2dlciAKKwlpbXBsZW1lbnRzIElTaW11bGF0aW9uTGlzdGVuZXJTeW5jIHsKKwkvKioKKwkgKiBUaGUge0BsaW5rIFNpbXVsYXRpb259IGZvciB0aGUgCisJICovCisJcHJvdGVjdGVkIElTaW11bGF0aW9uIHNpbXVsYXRpb24gPSBudWxsOworCS8qKgorCSAqIFRoZSB7QGxpbmsgRGlzZWFzZU1vZGVsfSBmb3IgdGhlIGxvZ2dlZCBkYXRhIAorCSAqLworCXByb3RlY3RlZCBJbnRlZ3JhdGlvbkRlY29yYXRvciBkaXNlYXNlTW9kZWwgPSBudWxsOworCS8qKgorCSAqIGFic3RyYWN0IGxvZyB3cml0ZXIKKwkgKi8KKwlMb2dXcml0ZXIgbG9nV3JpdGVyOworCS8qKgorCSAqIHRoaXMgc2ltdWxhdGlvbnMgZ3JhcGgKKwkgKi8KKwlHcmFwaCBncmFwaCA9IG51bGw7CisJLyoqCisJICogdGhlIHRpbWUgcHJvdmlkZXIgdGVsbHMgc2ltdWxhdGlvbiB0aW1lCisJICovCisJVGltZVByb3ZpZGVyIHRpbWVQcm92aWRlciA9IG51bGw7CisJCisJcHJvdGVjdGVkIE1hcDxOb2RlLCBJbnRlZ2VyPiBub2RlTGV2ZWxzOworCisJLyoqCisJICogQHBhcmFtIG91dHB1dERpcgorCSAqIEBwYXJhbSBzaW11bGF0aW9uIAorCSAqIEBwYXJhbSBkbQorCSAqLworCXB1YmxpYyBDdXN0b21DU1ZMb2dnZXIoZmluYWwgU3RyaW5nIG91dHB1dERpciwgSVNpbXVsYXRpb24gc2ltdWxhdGlvbiwgSW50ZWdyYXRpb25EZWNvcmF0b3IgZG0pIHsKKwkJLy8gYWx3YXlzIGxvZyB0aGUgcnVuIHBhcmFtZXRlcnMgaXMgdGhlcmUgaXMgbm90IGd1aQorCQl0aGlzLmxvZ1dyaXRlciA9IG5ldyBOZXdDU1ZMb2dXcml0ZXIob3V0cHV0RGlyLCBzaW11bGF0aW9uLCBkbSwgdHJ1ZSk7CisJCXNldFNpbXVsYXRpb24oc2ltdWxhdGlvbik7CisJCXRoaXMuZGlzZWFzZU1vZGVsID0gZG07CisJfQorCQorCS8qKgorCSAqIFNldHRpbmcgdGhlIHtAbGluayBTaW11bGF0aW9ufSBoYXMgdGhlIHNpZGUtZWZmZWN0IG9mIGNhdXNpbmcgdGhlIGNvbnRyb2wKKwkgKiB0byByZW1vdmUgaXRzZWxmIGFzIGEgbGlzdGVuZXIgZnJvbSBhbnkgcHJldmlvdXNseSBzZXQge0BsaW5rIFNpbXVsYXRpb259CisJICogYW5kIGFkZGluZyBpdHNlbGYgYXMgYSBsaXN0ZW5lciB0byB0aGUgbmV3IG9uZS4gSXQgd2lsbCBhbHNvIGNhdXNlIHRoZQorCSAqIGltYWdlIHRvIGJlIGluaXRpYWxpemVkIGZyb20gdGhlIGNvbnRlbnRzIG9mIHRoZSBuZXcge0BsaW5rIFNpbXVsYXRpb259CisJICogYXMgYXBwcm9wcmlhdGUuCisJICogCisJICogQHBhcmFtIHNpbXVsYXRpb24KKwkgKiAgICAgICAgICAgIHRoZSBzaW11bGF0aW9uIHdob3NlIExhdC9Mb25nIGRhdGEgd2lsbCBiZSByZW5kZXJlZC4KKwkgKi8KKwlwdWJsaWMgZmluYWwgdm9pZCBzZXRTaW11bGF0aW9uKGZpbmFsIElTaW11bGF0aW9uIHNpbXVsYXRpb24pIHsKKwkJLy8gQW55IG5lZWQgdG8gc3dpdGNoPworCQlpZiAodGhpcy5zaW11bGF0aW9uID09IHNpbXVsYXRpb24pIHsKKwkJCS8vIE5vCisJCQlyZXR1cm47CisJCX0gLy8gaWYgbm8gbmVlZCB0byBzd2l0Y2g/CisKKwkJLy8gU2hvdWxkIHdlIHJlbW92ZSBvdXJzZWx2ZXMgYXMgbGlzdGVuZXJzIGZyb20gdGhlIGN1cnJlbnQgc2ltdWxhdGlvbj8KKwkJaWYgKHRoaXMuc2ltdWxhdGlvbiAhPSBudWxsKSB7CisJCQkvLyBZZXMKKwkJCXRoaXMuc2ltdWxhdGlvbi5yZW1vdmVTaW11bGF0aW9uTGlzdGVuZXJTeW5jKHRoaXMpOworCQl9CisKKwkJdGhpcy5ub2RlTGV2ZWxzID0gdGhpcy5nZXROb2RlTGV2ZWxzKHNpbXVsYXRpb24pOworCQkKKwkJdGhpcy5zaW11bGF0aW9uID0gc2ltdWxhdGlvbjsKKwkJLy8gV2FzIHRoZXJlIGEgbmV3IHNpbXVsYXRpb24gdG8gc3dpdGNoIHRvPworCQlpZiAodGhpcy5zaW11bGF0aW9uICE9IG51bGwpIHsKKwkJCS8vIFllcworCQkJdGhpcy5zaW11bGF0aW9uLmFkZFNpbXVsYXRpb25MaXN0ZW5lclN5bmModGhpcyk7CisJCQlpbml0aWFsaXplRnJvbVNpbXVsYXRpb24odGhpcy5zaW11bGF0aW9uKTsKKwkJfSBlbHNlIHsKKwkJCS8vIE5vCisJCQkvLyBKdXN0IGRpc3BsYXkgYSBibGFuayBzY3JlZW4KKwkJCS8vaW5pdGlhbGl6ZUZyb21TaW11bGF0aW9uKG51bGwpOworCQl9CisKKwkJZmx1c2hMb2dnZXJEYXRhKCk7CisJfSAvLyBzZXRTaW11bGF0aW9uCisJCisJLyoqCisJICogSW5pdGlhbGl6ZSB0aGUgY29udHJvbCBmcm9tIGEge0BsaW5rIFNpbXVsYXRpb259IGluc3RhbmNlLgorCSAqIAorCSAqIEBwYXJhbSBzaW11bGF0aW9uCisJICogICAgICAgICAgICB0aGUge0BsaW5rIFNpbXVsYXRpb259IHdob3NlIHN0YXRlIHdpbGwgYmUgdmlzdWFsaXplZCBpbiB0aGUKKwkgKiAgICAgICAgICAgIGNvbnRyb2wuCisJICovCisJcHJvdGVjdGVkIHZvaWQgaW5pdGlhbGl6ZUZyb21TaW11bGF0aW9uKGZpbmFsIElTaW11bGF0aW9uIHNpbXVsYXRpb24pIHsKKwkJZ3JhcGggPSBzaW11bGF0aW9uLmdldFNjZW5hcmlvKCkuZ2V0Q2Fub25pY2FsR3JhcGgoKTsKKworCQl0aW1lUHJvdmlkZXIgPSAoVGltZVByb3ZpZGVyKSBUaW1lUHJvdmlkZXJBZGFwdGVyRmFjdG9yeS5JTlNUQU5DRQorCQkJCS5hZGFwdChncmFwaCwgVGltZVByb3ZpZGVyLmNsYXNzKTsKKwl9IC8vIGluaXRpYWxpemVGcm9tU2ltdWxhdGlvbgorCisJLyoqCisJICogCisJICovCisJcHVibGljIHZvaWQgZmx1c2hMb2dnZXJEYXRhKCkgeworCQlpZiAobG9nV3JpdGVyICE9IG51bGwpIHsKKwkJCWxvZ1dyaXRlci5mbHVzaExvZ2dlckRhdGEoKTsKKwkJfQorCX0KKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5qb2JzLnNpbXVsYXRpb24uSVNpbXVsYXRpb25MaXN0ZW5lclN5bmMjc2ltdWxhdGlvbkNoYW5nZWRTeW5jKG9yZy5lY2xpcHNlLnN0ZW0uam9icy5zaW11bGF0aW9uLlNpbXVsYXRpb25FdmVudCkKKwkgKi8KKwlwdWJsaWMgdm9pZCBzaW11bGF0aW9uQ2hhbmdlZFN5bmMoZmluYWwgU2ltdWxhdGlvbkV2ZW50IGV2ZW50KSB7CisJCS8vIERhdGEgdG8gbG9nID8KKwkJaWYgKGV2ZW50LmdldFNpbXVsYXRpb25TdGF0ZSgpID09IFNpbXVsYXRpb25TdGF0ZS5SVU5OSU5HKSB7CisJCQlpZiAoKGxvZ1dyaXRlciAhPSBudWxsKSAmJiAobG9nV3JpdGVyLm5lZWRzSGVhZGVyKSkgeworCQkJCS8vIFRoaXMgd2lsbCB3cml0ZSB0aGUgaGVhZGVycyBhbmQgdGhlIGZpcnN0IGxpbmUgb2YgZGF0YSBiZWZvcmUgZmlyc3QgY3ljbGUKKwkJCQlsb2dXcml0ZXIubG9nSGVhZGVyKHRoaXMuc2ltdWxhdGlvbiwgdGhpcy5kaXNlYXNlTW9kZWwsIHRoaXMubm9kZUxldmVscywgdGltZVByb3ZpZGVyKTsKKwkJCQkvL2xvZ1dyaXRlci5sb2dEYXRhKHRoaXMuc2ltdWxhdGlvbiwgdGhpcy5kaXNlYXNlTW9kZWwsIHRoaXMubm9kZUxldmVscywgdGltZVByb3ZpZGVyLCB0cnVlKTsKKwkJCQorCQkJfQorCQl9IGVsc2UgaWYoZXZlbnQuZ2V0U2ltdWxhdGlvblN0YXRlKCkgPT0gU2ltdWxhdGlvblN0YXRlLkNPTVBMRVRFRF9DWUNMRSkgeworCQkJLy8gV3JpdGUgZGF0YSBhZnRlciBlYWNoIGN5Y2xlIG9mIHNpbXVsYXRpb24KKwkJCQorCQkJLy8gTUFEIDMvMjIvMjAxMSBSZW1vdmVkIHJlZmVyZW5jZSB0byBEaXNwbGF5IGhlcmUuICBJIGRvbid0IAorCQkJLy8gcXVpdGUgdW5kZXJzdGFuZCB3aHkgdGhpcyBpcyBoZXJlICAoSSBhc3N1bWUgaXQgaGFzIHRvIGRvIHdpdGggY2xvc2luZyAKKwkJCS8vIHRoZSBMb2dnZXIgdmlldz8pIGJ1dCBpdCBicmVha3MgdGhlIGhlYWRsZXNzIG1vZGUuCisJCQkKKwkJCS8vZmluYWwgRGlzcGxheSBkaXNwbGF5ID0gRGlzcGxheS5nZXREZWZhdWx0KCk7CisJCQkvL2lmICgobG9nV3JpdGVyICE9IG51bGwpICYmICghZGlzcGxheS5pc0Rpc3Bvc2VkKCkpKSB7CisJCQlpZiAobG9nV3JpdGVyICE9IG51bGwpIHsKKwkJCQlsb2dXcml0ZXIubG9nRGF0YSh0aGlzLnNpbXVsYXRpb24sIHRoaXMuZGlzZWFzZU1vZGVsLCB0aGlzLm5vZGVMZXZlbHMsIHRpbWVQcm92aWRlciwgZmFsc2UpOworCQkJfQorCQkJLy99IC8vIGlmCisJCX0gIGVsc2UgaWYgKGV2ZW50LmdldFNpbXVsYXRpb25TdGF0ZSgpID09IFNpbXVsYXRpb25TdGF0ZS5QQVVTRUQpIHsKKwkJCWZsdXNoTG9nZ2VyRGF0YSgpOworCQl9IGVsc2UgaWYgKGV2ZW50LmdldFNpbXVsYXRpb25TdGF0ZSgpID09IFNpbXVsYXRpb25TdGF0ZS5TVE9QUEVEKSB7CisJCQljbG9zZSgpOworCQl9IC8vIGlmCisKKwl9IC8vIHNpbXVsYXRpb25DaGFuZ2VkCisJCisJLyoqCisJICogUmV0dXJuIGFsbCBub2RlcyBhbmQgdGhlaXIgY29ycmVzcG9uZGluZyBsZXZlbC4gV2UgdXNlIHRoaXMgdG8gbG9nIGRhdGEgdXNpbmcgCisJICogZGlmZmVyZW50IHJlc29sdXRpb25zLgorCSAqIAorCSAqIEBwYXJhbSBzaW11bGF0aW9uCisJICogQHJldHVybiBNYXAgd2l0aCBub2RlIGFuZCBsZXZlbAorCSAqLworCUBTdXBwcmVzc1dhcm5pbmdzKCJib3hpbmciKQorCXByaXZhdGUgTWFwPE5vZGUsIEludGVnZXI+IGdldE5vZGVMZXZlbHMoSVNpbXVsYXRpb24gc2ltdWxhdGlvbikgeworCQlNYXA8Tm9kZSwgSW50ZWdlcj4gcmVzdWx0ID0gbmV3IEhhc2hNYXA8Tm9kZSwgSW50ZWdlcj4oKTsKKwkJZmluYWwgR3JhcGggZ3JhcGggPSBzaW11bGF0aW9uLmdldFNjZW5hcmlvKCkuZ2V0Q2Fub25pY2FsR3JhcGgoKTsKKwkJaWYgKGdyYXBoICE9IG51bGwpIHsKKwkJCWZpbmFsIEVNYXA8VVJJLE5vZGU+IGFsbE5vZGVzID0gZ3JhcGguZ2V0Tm9kZXMoKTsKKwkJCWZpbmFsIFNldDxVUkk+IGFsbEdyYXBoVVJJcyA9IGFsbE5vZGVzLmtleVNldCgpOworCQkgICAgSXRlcmF0b3I8VVJJPiBncmFwaEl0ZXIyID0gYWxsR3JhcGhVUklzLml0ZXJhdG9yKCk7CisJCSAgCisJCSAgICB3aGlsZSgoZ3JhcGhJdGVyMiE9bnVsbCkmJihncmFwaEl0ZXIyLmhhc05leHQoKSkpIHsKKwkJICAgIAlVUkkgdXJpID0gZ3JhcGhJdGVyMi5uZXh0KCk7CisJCSAgICAJTm9kZSBub2RlID0gYWxsTm9kZXMuZ2V0KHVyaSk7CisJCSAgICAJLy8gQnVnIGZpeC4gTWFrZSBzdXJlIHRoZSBub2RlIGhhcyBsYWJlbHMKKwkJICAgIAlpZihub2RlLmdldExhYmVscygpLnNpemUoKSA9PSAwKSBjb250aW51ZTsKKwkJICAgIAlTdHJpbmcgaWQgPSAgbm9kZS5nZXRVUkkoKS50b1N0cmluZygpOworCQkgICAgCWludCBsZXZlbCA9IGdldEFkbWluTGV2ZWwoaWQpOworCQkgICAgCXJlc3VsdC5wdXQobm9kZSwgbGV2ZWwpOworCQkgICAgfQorCQl9IC8vIGdyYXBoIG5vdCBudWxsCisJCXJldHVybiByZXN1bHQ7CisJfQorCQorCXByaXZhdGUgaW50IGdldEFkbWluTGV2ZWwoU3RyaW5nIHVyaUtleSkgeworCQlpbnQgcmV0VmFsID0gMDsKKwkJU3RyaW5nIHRlc3QgPSB1cmlLZXk7CisJCXdoaWxlKHRlc3QuY29udGFpbnMoIi0iKSkgeworCQkJcmV0VmFsICsrOworCQkJaW50IGlkeDEgPSB0ZXN0LmluZGV4T2YoIi0iKTsKKwkJCVN0cmluZyB0ZXN0MiA9IHRlc3Quc3Vic3RyaW5nKGlkeDErMSwgdGVzdC5sZW5ndGgoKSk7CisJCQl0ZXN0ID0gdGVzdDI7CisJCX0KKwkJcmV0dXJuIHJldFZhbDsKKwl9CisKKwkvKioKKwkgKgorCSAqLworCXB1YmxpYyB2b2lkIGNsb3NlKCkgeworCQlpZiAobG9nV3JpdGVyICE9IG51bGwpIHsKKwkJCWxvZ1dyaXRlci5mbHVzaExvZ2dlckRhdGEoKTsKKwkJfQorCQlpZiAobG9nV3JpdGVyICE9IG51bGwpIHsKKwkJCWxvZ1dyaXRlci5jbG9zZUxvZ2dlckRhdGEoKTsKKwkJfQorCQl0aGlzLmxvZ1dyaXRlciA9IG51bGw7CisKKwkJaWYgKHNpbXVsYXRpb24gIT0gbnVsbCkgeworCQkJLy8gWWVzCisJCQlzaW11bGF0aW9uLnJlbW92ZVNpbXVsYXRpb25MaXN0ZW5lclN5bmModGhpcyk7CisJCX0gLy8gaWYKKwl9CisJCisJLyoqCisJICogZ2V0IHRoZSBvdXRwdXQgZm9sZGVyIG5hbWUKKwkgKiBAcmV0dXJuIHRoZSBsb2cgZGlyZWN0b3J5IG5hbWUKKwkgKi8KKwlwdWJsaWMgU3RyaW5nIGdldERpcmVjdG9yeU5hbWUoKSB7CisJCXJldHVybiBsb2dXcml0ZXIuZ2V0RGlyZWN0b3J5TmFtZSgpOworCX0KKworCS8qKgorCSAqIG5hbWUgb2YgdGhlIGRhdGEgb2JqZWN0IGJlaW5nIGxvZ2dlZC4KKwkgKiBlLmcuIFRoZSBEaXNlYXNlIE5hbWUKKwkgKiBAcmV0dXJuIHRoZSBsb2dnZWQgb2JqZWN0IG5hbWUgCisJICovCisJcHVibGljIFN0cmluZyBnZXRMb2dEYXRhT2JqZWN0TmFtZSgpIHsKKwkJcmV0dXJuIGxvZ1dyaXRlci5nZXRMb2dEYXRhT2JqZWN0TmFtZSgpOworCX0KK30KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsLmxvZ2dlcnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdXRpbC9sb2dnZXJzL3ZpZXdzL0RhdGFIaXN0b3J5TG9nZ2VyLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbC5sb2dnZXJzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3V0aWwvbG9nZ2Vycy92aWV3cy9EYXRhSGlzdG9yeUxvZ2dlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZlNjZkMGUKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbC5sb2dnZXJzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3V0aWwvbG9nZ2Vycy92aWV3cy9EYXRhSGlzdG9yeUxvZ2dlci5qYXZhCkBAIC0wLDAgKzEsMzczIEBACisvLyBEYXRhSGlzdG9yeUxvZ2dlci5qYXZhCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0udXRpbC5sb2dnZXJzLnZpZXdzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA3LCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7CitpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb25zOworaW1wb3J0IGphdmEudXRpbC5MaXN0OworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSXRlbVByb3BlcnR5RGVzY3JpcHRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmFkYXB0ZXJzLnRpbWUuVGltZVByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uYWRhcHRlcnMudGltZS5UaW1lUHJvdmlkZXJBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguRHluYW1pY0xhYmVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5HcmFwaDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuRGVjb3JhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5JbnRlZ3JhdGlvbkRlY29yYXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmFkYXB0ZXJzLnJlbGF0aXZldmFsdWUuUmVsYXRpdmVWYWx1ZVByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuYWRhcHRlcnMucmVsYXRpdmV2YWx1ZS5SZWxhdGl2ZVZhbHVlUHJvdmlkZXJBZGFwdGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuYWRhcHRlcnMucmVsYXRpdmV2YWx1ZS5SZWxhdGl2ZVZhbHVlUHJvdmlkZXJBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuRGlzZWFzZU1vZGVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uam9icy5zaW11bGF0aW9uLklTaW11bGF0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uam9icy5zaW11bGF0aW9uLklTaW11bGF0aW9uTGlzdGVuZXJTeW5jOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uam9icy5zaW11bGF0aW9uLlNpbXVsYXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5qb2JzLnNpbXVsYXRpb24uU2ltdWxhdGlvbkV2ZW50OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uam9icy5zaW11bGF0aW9uLlNpbXVsYXRpb25TdGF0ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuUG9wdWxhdGlvbk1vZGVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udWkud2lkZ2V0cy5Qcm9wZXJ0eVNlbGVjdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5TV1Q7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmdyYXBoaWNzLkNvbG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ncmFwaGljcy5SR0I7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5GaWxsTGF5b3V0OworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5sYXlvdXQuRm9ybUF0dGFjaG1lbnQ7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5Gb3JtRGF0YTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QubGF5b3V0LkZvcm1MYXlvdXQ7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkRpc3BsYXk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuTGFiZWw7CisKKy8qKgorICogRGF0YUhpc3RvcnlMb2dnZXIKKyAqLworcHVibGljIGNsYXNzIERhdGFIaXN0b3J5TG9nZ2VyIGV4dGVuZHMgTG9nZ2VyQ29udHJvbCBpbXBsZW1lbnRzCisJCUlTaW11bGF0aW9uTGlzdGVuZXJTeW5jIHsKKworCS8vcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIE5PREVfUFJFRklYX1RFWFQgPSAibm9kZS9nZW8vcmVnaW9uLyI7CisKKwkvKioKKwkgKiBUaGUgbG9jYXRpb24gKG5vZGUpIG5hbWUgbGFiZWwKKwkgKi8KKwlMYWJlbCBsb2dnZXJUeXBlTGFiZWw7CisKKwkvKioKKwkgKiBUaGUgbG9jYXRpb24gKG5vZGUpIGlkIGxhYmVsCisJICovCisJTGFiZWwgbG9nZ2VyRGlzZWFzZUxhYmVsOworCisJLyoqCisJICogYWJzdHJhY3QgbG9nIHdyaXRlcgorCSAqLworCUxvZ1dyaXRlciBsb2dXcml0ZXI7CisKKwkvKioKKwkgKiB0aGlzIHNpbXVsYXRpb25zIGdyYXBoCisJICovCisJR3JhcGggZ3JhcGggPSBudWxsOworCisJLyoqCisJICogdGhlIHRpbWUgcHJvdmlkZXIgdGVsbHMgc2ltdWxhdGlvbiB0aW1lCisJICovCisJVGltZVByb3ZpZGVyIHRpbWVQcm92aWRlciA9IG51bGw7CisKKwlQcm9wZXJ0eVNlbGVjdG9yIHByb3BlcnR5U2VsZWN0b3I7CisJLy9MaXN0PEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I+IHNlbGVjdGVkUHJvcGVydGllczsKKworCS8qKgorCSAqIFRoaXMgaW50ZXJmYWNlIGlzIGltcGxlbWVudGVkIGJ5IGNsYXNzZXMgdGhhdCBzZWxlY3Qgb3V0IHRoZSBwcm9wZXJ0aWVzCisJICogdG8gYmUgZGlzcGxheWVkLgorCSAqLworCXB1YmxpYyBpbnRlcmZhY2UgUHJvcGVydHlTaWV2ZSB7CisJCS8qKgorCQkgKiBAcGFyYW0gZHluYW1pY0xhYmVsCisJCSAqICAgICAgICAgICAgdGhlIGxhYmVsIHRoYXQgY29udGFpbnMgdGhlIGNhbmRpZGF0ZSBwcm9wZXJ0aWVzIHRvIGJlCisJCSAqICAgICAgICAgICAgZGlzcGxheWVkLgorCQkgKiBAcmV0dXJuIGEgPGNvZGU+TGlzdDwvY29kZT4gb2YgdGhlIHByb3BlcnRpZXMgdGhhdCBzaG91bGQgYmUKKwkJICogICAgICAgICBkaXNwbGF5ZWQgaW4gdGhlIG9yZGVyIHRoYXQgdGhleSBzaG91bGQgYmUgZGlzcGxheWVkLgorCQkgKi8KKwkJTGlzdDxJdGVtUHJvcGVydHlEZXNjcmlwdG9yPiBzaWV2ZShmaW5hbCBEeW5hbWljTGFiZWwgZHluYW1pY0xhYmVsKTsKKwl9IC8vIFByb3BlcnR5U2lldmUKKworCS8qKgorCSAqIFRoaXMgc2lldmUgc2VsZWN0cyBhbGwgb2YgdGhvc2UgcHJvcGVydGllcyB0aGF0IGhhdmUgcmVsYXRpdmUgdmFsdWVzLgorCSAqLworCXByaXZhdGUgZmluYWwgUHJvcGVydHlTaWV2ZSBwcm9wZXJ0eVNpZXZlID0gbmV3IFByb3BlcnR5U2lldmUoKSB7CisJCS8qKgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0udWkud2lkZ2V0cy5Qcm9wZXJ0eVNlbGVjdG9yLlByb3BlcnR5U2lldmUjc2lldmUob3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkR5bmFtaWNMYWJlbCkKKwkJICovCisJCXB1YmxpYyBMaXN0PEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I+IHNpZXZlKAorCQkJCWZpbmFsIER5bmFtaWNMYWJlbCBkeW5hbWljTGFiZWwpIHsKKwkJCWZpbmFsIExpc3Q8SXRlbVByb3BlcnR5RGVzY3JpcHRvcj4gcmV0VmFsdWUgPSBuZXcgQXJyYXlMaXN0PEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I+KCk7CisJCQlmaW5hbCBSZWxhdGl2ZVZhbHVlUHJvdmlkZXJBZGFwdGVyIHJ2cCA9IChSZWxhdGl2ZVZhbHVlUHJvdmlkZXJBZGFwdGVyKSBSZWxhdGl2ZVZhbHVlUHJvdmlkZXJBZGFwdGVyRmFjdG9yeS5JTlNUQU5DRQorCQkJCQkuYWRhcHQoZHluYW1pY0xhYmVsLCBSZWxhdGl2ZVZhbHVlUHJvdmlkZXIuY2xhc3MpOworCisJCQkvLyBEb2VzIHRoZSBsYWJlbCBoYXZlIHJlbGF0aXZlIHZhbHVlcz8KKwkJCWlmIChydnAgIT0gbnVsbCkgeworCQkJCS8vIFllcworCQkJCXJ2cC5zZXRUYXJnZXQoZHluYW1pY0xhYmVsKTsKKworCQkJCWZvciAoZmluYWwgT2JqZWN0IGVsZW1lbnQgOiBydnAuZ2V0UHJvcGVydGllcygpKSB7CisJCQkJCWZpbmFsIEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IgcHJvcGVydHkgPSAoSXRlbVByb3BlcnR5RGVzY3JpcHRvcikgZWxlbWVudDsKKwkJCQkJcmV0VmFsdWUuYWRkKHByb3BlcnR5KTsKKwkJCQl9IC8vIGZvciBlYWNoIHByb3BlcnR5CisJCQl9IC8vIGlmIHRoZSBsYWJlbCBoYXMgcmVsYXRpdmUgdmFsdWVzCisJCQlyZXR1cm4gcmV0VmFsdWU7CisJCX0gLy8gc2lldmUKKwl9OworCisJLyoqCisJICogCisJICogQHBhcmFtIHBhcmVudAorCSAqIEBwYXJhbSBsb2dXcml0ZXIKKwkgKiBAcGFyYW0gc2ltdWxhdGlvbiAKKwkgKiBAcGFyYW0gZG0KKwkgKi8KKwlwdWJsaWMgRGF0YUhpc3RvcnlMb2dnZXIoZmluYWwgQ29tcG9zaXRlIHBhcmVudCwgZmluYWwgTG9nV3JpdGVyIGxvZ1dyaXRlciwgSVNpbXVsYXRpb24gc2ltdWxhdGlvbiwgSW50ZWdyYXRpb25EZWNvcmF0b3IgZG0pIHsKKwkJc3VwZXIocGFyZW50LCBTV1QuTm9uZSk7CisJCXRoaXMubG9nV3JpdGVyID0gbG9nV3JpdGVyOworCQlzZXRTaW11bGF0aW9uKHNpbXVsYXRpb24pOworCQlzZXREaXNlYXNlTW9kZWwoZG0pOworCQljcmVhdGVDb250ZW50cygpOworCX0gLy8gRGF0YUhpc3RvcnlMb2dnZXIKKworCS8qKgorCSAqIENyZWF0ZSB0aGUgY29udGVudHMgb2YgdGhlIGxvZ2dlcgorCSAqLworCXByaXZhdGUgdm9pZCBjcmVhdGVDb250ZW50cygpIHsKKwkJZmluYWwgRmlsbExheW91dCBsYXlvdXQgPSBuZXcgRmlsbExheW91dChTV1QuSE9SSVpPTlRBTCk7CisJCXNldExheW91dChsYXlvdXQpOworCisJCWZpbmFsIENvbXBvc2l0ZSBpbm5lciA9IG5ldyBDb21wb3NpdGUodGhpcywgU1dULk5PTkUpOworCQlmaW5hbCBGb3JtTGF5b3V0IGlubmVyTGF5b3V0ID0gbmV3IEZvcm1MYXlvdXQoKTsKKworCQlpbm5lci5zZXRMYXlvdXQoaW5uZXJMYXlvdXQpOworCisJCQorCQkKKwkJZmluYWwgRGlzcGxheSBkaXNwbGF5ID0gdGhpcy5nZXREaXNwbGF5KCk7CisJCQorCQlmaW5hbCBDb2xvciBjb2xvckNvbHVtbjEgPSBuZXcgQ29sb3IoZGlzcGxheSwgbmV3IFJHQigxODAsIDE4MCwgMjAwKSk7CisJCWZpbmFsIENvbG9yIGNvbG9yQ29sdW1uMiA9IG5ldyBDb2xvcihkaXNwbGF5LCBuZXcgUkdCKDE5MCwgMTkwLCAyMjApKTsKKwkJZmluYWwgQ29sb3IgY29sb3JDb2x1bW4zID0gbmV3IENvbG9yKGRpc3BsYXksIG5ldyBSR0IoMTgwLCAxODAsIDIwMCkpOworCQkKKwkJZmluYWwgQ29sb3IgYmdDb2xvciA9IG5ldyBDb2xvcihkaXNwbGF5LCBuZXcgUkdCKDE3MCwgMTcwLCAxOTApKTsKKwkJaW5uZXIuc2V0QmFja2dyb3VuZChiZ0NvbG9yKTsKKworCQlwcm9wZXJ0eVNlbGVjdG9yID0gbmV3IFByb3BlcnR5U2VsZWN0b3IoaW5uZXIsIFNXVC5OT05FLCB0cnVlKTsKKwkJCisKKwkJCisKKwkJbG9nZ2VyVHlwZUxhYmVsID0gbmV3IExhYmVsKGlubmVyLCAgU1dULkNFTlRFUik7CisJCWxvZ2dlclR5cGVMYWJlbC5zZXRCYWNrZ3JvdW5kKGNvbG9yQ29sdW1uMSk7CisJCWxvZ2dlclR5cGVMYWJlbC5zZXRUZXh0KCJDU1YgTG9nZ2VyIik7CisJCWxvZ2dlclR5cGVMYWJlbC5zZXRBbGlnbm1lbnQoU1dULkNFTlRFUik7CisJCQorCQlpZihzaW11bGF0aW9uTmFtZUxhYmVsID09IG51bGwpIHsKKwkJCXNpbXVsYXRpb25OYW1lTGFiZWwgPSBuZXcgTGFiZWwoaW5uZXIsICBTV1QuQ0VOVEVSKTsKKwkJCXNpbXVsYXRpb25OYW1lTGFiZWwuc2V0VGV4dChzaW11bGF0aW9uLmdldE5hbWUoKSk7CisJCQlzaW11bGF0aW9uTmFtZUxhYmVsLnNldEJhY2tncm91bmQoY29sb3JDb2x1bW4yKTsKKwkJCXNpbXVsYXRpb25OYW1lTGFiZWwuc2V0QWxpZ25tZW50KFNXVC5DRU5URVIpOworCQl9CisJCQorCQlsb2dnZXJEaXNlYXNlTGFiZWwgPSBuZXcgTGFiZWwoaW5uZXIsICBTV1QuQ0VOVEVSKTsKKwkJbG9nZ2VyRGlzZWFzZUxhYmVsLnNldEJhY2tncm91bmQoY29sb3JDb2x1bW4zKTsKKwkJU3RyaW5nIGlkdGV4dCA9IG51bGw7CisJCWlmKHRoaXMuZGlzZWFzZU1vZGVsIGluc3RhbmNlb2YgRGlzZWFzZU1vZGVsKQorCQkJaWR0ZXh0ID0gKChEaXNlYXNlTW9kZWwpdGhpcy5kaXNlYXNlTW9kZWwpLmdldERpc2Vhc2VOYW1lKCk7CisJCWVsc2UgaWYodGhpcy5kaXNlYXNlTW9kZWwgaW5zdGFuY2VvZiBQb3B1bGF0aW9uTW9kZWwpCisJCQlpZHRleHQgPSAoKFBvcHVsYXRpb25Nb2RlbCl0aGlzLmRpc2Vhc2VNb2RlbCkuZ2V0TmFtZSgpOworCQkKKwkJbG9nZ2VyRGlzZWFzZUxhYmVsLnNldFRleHQoaWR0ZXh0KTsKKwkJbG9nZ2VyRGlzZWFzZUxhYmVsLnNldEFsaWdubWVudChTV1QuQ0VOVEVSKTsKKworCQkvLyBMb2dnZXIgTmFtZSBMYWJlbAorCQlmaW5hbCBGb3JtRGF0YSBsb2dnZXJOYW1lTGFiZWxGb3JtRGF0YSA9IG5ldyBGb3JtRGF0YSgpOworCQlsb2dnZXJOYW1lTGFiZWxGb3JtRGF0YS50b3AgPSBuZXcgRm9ybUF0dGFjaG1lbnQoMCwgMCk7CisJCWxvZ2dlck5hbWVMYWJlbEZvcm1EYXRhLmxlZnQgPSBuZXcgRm9ybUF0dGFjaG1lbnQoMCwgMCk7CisJCWxvZ2dlck5hbWVMYWJlbEZvcm1EYXRhLnJpZ2h0ID0gbmV3IEZvcm1BdHRhY2htZW50KDI1LCAwKTsKKwkJbG9nZ2VyTmFtZUxhYmVsRm9ybURhdGEuYm90dG9tID0gbmV3IEZvcm1BdHRhY2htZW50KDAsIDEwMCk7CisJCWxvZ2dlclR5cGVMYWJlbC5zZXRMYXlvdXREYXRhKGxvZ2dlck5hbWVMYWJlbEZvcm1EYXRhKTsKKwkJCisJCS8vIFNpbXVsYXRpb24gTmFtZSBMYWJlbAorCQlmaW5hbCBGb3JtRGF0YSBzaW11bGF0aW9uTmFtZUxhYmVsRm9ybURhdGEgPSBuZXcgRm9ybURhdGEoKTsKKwkJc2ltdWxhdGlvbk5hbWVMYWJlbEZvcm1EYXRhLnRvcCA9IG5ldyBGb3JtQXR0YWNobWVudCgwLCAwKTsKKwkJc2ltdWxhdGlvbk5hbWVMYWJlbEZvcm1EYXRhLmxlZnQgPSBuZXcgRm9ybUF0dGFjaG1lbnQoMjUsIDApOworCQlzaW11bGF0aW9uTmFtZUxhYmVsRm9ybURhdGEucmlnaHQgPSBuZXcgRm9ybUF0dGFjaG1lbnQoNTAsIDApOworCQlzaW11bGF0aW9uTmFtZUxhYmVsRm9ybURhdGEuYm90dG9tID0gbmV3IEZvcm1BdHRhY2htZW50KDAsIDEwMCk7CisJCXNpbXVsYXRpb25OYW1lTGFiZWwuc2V0TGF5b3V0RGF0YShzaW11bGF0aW9uTmFtZUxhYmVsRm9ybURhdGEpOworCisJCS8vIElEIExhYmVsCisJCWZpbmFsIEZvcm1EYXRhIGxvZ2dlcklkTGFiZWxGb3JtRGF0YSA9IG5ldyBGb3JtRGF0YSgpOworCQlsb2dnZXJJZExhYmVsRm9ybURhdGEudG9wID0gbmV3IEZvcm1BdHRhY2htZW50KDAsIDApOworCQlsb2dnZXJJZExhYmVsRm9ybURhdGEubGVmdCA9IG5ldyBGb3JtQXR0YWNobWVudCg1MCwgMCk7CisJCWxvZ2dlcklkTGFiZWxGb3JtRGF0YS5yaWdodCA9IG5ldyBGb3JtQXR0YWNobWVudCg5MCwgMCk7CisJCWxvZ2dlcklkTGFiZWxGb3JtRGF0YS5ib3R0b20gPSBuZXcgRm9ybUF0dGFjaG1lbnQoMCwgMTAwKTsKKwkJbG9nZ2VyRGlzZWFzZUxhYmVsLnNldExheW91dERhdGEobG9nZ2VySWRMYWJlbEZvcm1EYXRhKTsKKworCQkvLyBQcm9wZXJ0eSBTZWxlY3RvcgorCQlwcm9wZXJ0eVNlbGVjdG9yLnNldFNpemUoMCwgMCk7CisJCWZpbmFsIEZvcm1EYXRhIHByb3BlcnR5U2VsZWN0b3JGb3JtRGF0YSA9IG5ldyBGb3JtRGF0YSgpOworCQlwcm9wZXJ0eVNlbGVjdG9yRm9ybURhdGEudG9wID0gbmV3IEZvcm1BdHRhY2htZW50KDAsIDApOworCQlwcm9wZXJ0eVNlbGVjdG9yRm9ybURhdGEubGVmdCA9IG5ldyBGb3JtQXR0YWNobWVudCgxMDAsIDApOworCQlwcm9wZXJ0eVNlbGVjdG9yRm9ybURhdGEucmlnaHQgPSBuZXcgRm9ybUF0dGFjaG1lbnQoMTAwLCAwKTsKKwkJcHJvcGVydHlTZWxlY3Rvci5zZXRMYXlvdXREYXRhKHByb3BlcnR5U2VsZWN0b3JGb3JtRGF0YSk7CisKKwkJcHJvcGVydHlTZWxlY3Rvci5zZXRWaXNpYmxlKGZhbHNlKTsKKworCQkKKwl9IC8vIGNyZWF0ZUNvbnRlbnRzCisKKwkvKioKKwkgKiBAcGFyYW0gZGVjb3JhdG9yCisJICogICAgICAgICAgICBhIHtAbGluayBEZWNvcmF0b3J9IHRoYXQgbW9kaWZpZXMgdGhlIHN0YXRlIG9mIHRoZSBjYW5vbmljYWwKKwkgKiAgICAgICAgICAgIHtAbGluayBHcmFwaH0gaW4gdGhlIHtAbGluayBTaW11bGF0aW9ufS4KKwkgKiBAcGFyYW0gc2ltdWxhdGlvbgorCSAqICAgICAgICAgICAgdGhlIHtAbGluayBTaW11bGF0aW9ufQorCSAqIEByZXR1cm4gYSB7QGxpbmsgTGlzdH0gb2YgdGhlIHByb3BlcnRpZXMgb2YgdGhlIHtAbGluayBEZWNvcmF0b3J9IHRoYXQKKwkgKiAgICAgICAgIGNhbiBzaG91bGQgYmUgZGlzcGxheWVkLgorCSAqLworCUxpc3Q8SXRlbVByb3BlcnR5RGVzY3JpcHRvcj4gZ2V0UHJvcGVydGllc1RvRGlzcGxheSgKKwkJCWZpbmFsIERlY29yYXRvciBkZWNvcmF0b3IpIHsKKwkJZmluYWwgTGlzdDxJdGVtUHJvcGVydHlEZXNjcmlwdG9yPiByZXRWYWx1ZSA9IG5ldyBBcnJheUxpc3Q8SXRlbVByb3BlcnR5RGVzY3JpcHRvcj4oKTsKKwkJLy8gR290IERlY29yYXRvcj8KKwkJaWYgKGRlY29yYXRvciAhPSBudWxsKSB7CisJCQkvLyBZZXMKKwkJCS8vIEFyZSB0aGVyZSBhbnkgbGFiZWxzIHRvIHVwZGF0ZT8KKwkJCWlmICghZGVjb3JhdG9yLmdldExhYmVsc1RvVXBkYXRlKCkuaXNFbXB0eSgpKSB7CisJCQkJLy8gWWVzCisJCQkJLy8gVGhlIGZpcnN0IG9uZSBpcyBnb29kIGVub3VnaAorCQkJCXJldFZhbHVlLmFkZEFsbChwcm9wZXJ0eVNpZXZlLnNpZXZlKGRlY29yYXRvcgorCQkJCQkJLmdldExhYmVsc1RvVXBkYXRlKCkuZ2V0KDApKSk7CisJCQl9IC8vIGlmIGxhYmVscyB0byB1cGRhdGUKKwkJfSAvLyBpZiBnb3QgZGVjb3JhdG9yCisJCXJldHVybiByZXRWYWx1ZTsKKwl9IC8vIGdldFByb3BlcnRpZXNUb0Rpc3BsYXkKKworCS8qKgorCSAqIHRvIHJlbW92ZSB0aGUgY29udHJvbCBlLmcuIGJ5IGEgcmVtb3ZlIGJ1dHRvbiBldmVudAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIHJlbW92ZSgpIHsKKwkJaWYgKGxvZ1dyaXRlciAhPSBudWxsKSB7CisJCQlsb2dXcml0ZXIuY2xvc2VMb2dnZXJEYXRhKCk7CisJCX0KKwkJdGhpcy5sb2dXcml0ZXIgPSBudWxsOworCQlyZW1vdmVMaXN0ZW5lcnMuY2xlYXIoKTsKKworCQlwcm9wZXJ0eVNlbGVjdG9yLnNldERlY29yYXRvcnMoQ29sbGVjdGlvbnMuRU1QVFlfTElTVCk7CisJCWRpc3Bvc2UoKTsKKwl9CisKKwkvKioKKwkgKiBJbml0aWFsaXplIHRoZSBkZWNvcmF0b3JzIGFuZCBsYWJlbHMgYXNzb2NpYXRlZCB3aXRoIHRoZSBzaW11bGF0aW9uCisJICogCisJICovCisKKwlwdWJsaWMgdm9pZCBzZXRJZGVudGlmaWFibGUoKSB7CisJCS8vbm90aGluZworCX0gCisJCisJLyoqCisJICogSW5pdGlhbGl6ZSB0aGUgY29udHJvbCBmcm9tIGEge0BsaW5rIFNpbXVsYXRpb259IGluc3RhbmNlLgorCSAqIAorCSAqIEBwYXJhbSBzaW11bGF0aW9uCisJICogICAgICAgICAgICB0aGUge0BsaW5rIFNpbXVsYXRpb259IHdob3NlIHN0YXRlIHdpbGwgYmUgdmlzdWFsaXplZCBpbiB0aGUKKwkgKiAgICAgICAgICAgIGNvbnRyb2wuCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgaW5pdGlhbGl6ZUZyb21TaW11bGF0aW9uKGZpbmFsIElTaW11bGF0aW9uIHNpbXVsYXRpb24pIHsKKwkJZ3JhcGggPSBzaW11bGF0aW9uLmdldFNjZW5hcmlvKCkuZ2V0Q2Fub25pY2FsR3JhcGgoKTsKKworCQl0aW1lUHJvdmlkZXIgPSAoVGltZVByb3ZpZGVyKSBUaW1lUHJvdmlkZXJBZGFwdGVyRmFjdG9yeS5JTlNUQU5DRQorCQkJCS5hZGFwdChncmFwaCwgVGltZVByb3ZpZGVyLmNsYXNzKTsKKwl9IC8vIGluaXRpYWxpemVGcm9tU2ltdWxhdGlvbgorCisJLyoqCisJICogCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgcmVmcmVzaDIoKSB7CisJCWlmIChsb2dXcml0ZXIgIT0gbnVsbCkgeworCQkJbG9nV3JpdGVyLmZsdXNoTG9nZ2VyRGF0YSgpOworCQl9CisJfSAvLyByZWZyZXNoMgorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmpvYnMuc2ltdWxhdGlvbi5JU2ltdWxhdGlvbkxpc3RlbmVyU3luYyNzaW11bGF0aW9uQ2hhbmdlZFN5bmMob3JnLmVjbGlwc2Uuc3RlbS5qb2JzLnNpbXVsYXRpb24uU2ltdWxhdGlvbkV2ZW50KQorCSAqLworCXB1YmxpYyB2b2lkIHNpbXVsYXRpb25DaGFuZ2VkU3luYyhmaW5hbCBTaW11bGF0aW9uRXZlbnQgZXZlbnQpIHsKKwkJLy8gRGF0YSB0byBsb2cgPworCQlpZiAoZXZlbnQuZ2V0U2ltdWxhdGlvblN0YXRlKCkgPT0gU2ltdWxhdGlvblN0YXRlLlJVTk5JTkcpIHsKKwkJCWlmICgobG9nV3JpdGVyICE9IG51bGwpICYmIChsb2dXcml0ZXIubmVlZHNIZWFkZXIpKSB7CisJCQkJLy8gVGhpcyB3aWxsIHdyaXRlIHRoZSBoZWFkZXJzIGFuZCB0aGUgZmlyc3QgbGluZSBvZiBkYXRhIGJlZm9yZSBmaXJzdCBjeWNsZQorCQkJCWxvZ1dyaXRlci5sb2dIZWFkZXIodGhpcy5zaW11bGF0aW9uLCB0aGlzLmRpc2Vhc2VNb2RlbCwgdGhpcy5ub2RlTGV2ZWxzLCB0aW1lUHJvdmlkZXIpOworCQkJCS8vIERvbid0IGxvZyBoZXJlIHNpbmNlIHRoZSBtb2RlbHMgaGF2ZSBub3QgY29tcGxldGx5IGJlZW4gaW5pdGlhbGl6ZWQgeWV0CisJCQkJLy8gKHNlcXVlbmNlciBoYXMgbm90IHJld2luZGVkIHZhbHVlcykKKwkJCQkvL2xvZ1dyaXRlci5sb2dEYXRhKHRoaXMuc2ltdWxhdGlvbiwgdGhpcy5kaXNlYXNlTW9kZWwsIHRoaXMubm9kZUxldmVscywgdGltZVByb3ZpZGVyLCB0cnVlKTsKKwkJCQorCQkJfQorCQl9IGVsc2UgaWYoZXZlbnQuZ2V0U2ltdWxhdGlvblN0YXRlKCkgPT0gU2ltdWxhdGlvblN0YXRlLkNPTVBMRVRFRF9DWUNMRSkgeworCQkJLy8gV3JpdGUgZGF0YSBhZnRlciBlYWNoIGN5Y2xlIG9mIHNpbXVsYXRpb24KKy8vCQkJZmluYWwgRGlzcGxheSBkaXNwbGF5ID0gRGlzcGxheS5nZXREZWZhdWx0KCk7CisvLwkJCWlmICgobG9nV3JpdGVyICE9IG51bGwpICYmICghZGlzcGxheS5pc0Rpc3Bvc2VkKCkpKSB7CisJCQlpZiAobG9nV3JpdGVyICE9IG51bGwpIHsKKwkJCQlsb2dXcml0ZXIubG9nRGF0YSh0aGlzLnNpbXVsYXRpb24sIHRoaXMuZGlzZWFzZU1vZGVsLCB0aGlzLm5vZGVMZXZlbHMsIHRpbWVQcm92aWRlciwgZmFsc2UpOworCQkJfQorLy8JCQl9IC8vIGlmCisJCX0gZWxzZSAKKwkJCS8vIElzIHRoZSBTaW11bGF0aW9uIHBhdXNlZAorCQkJaWYgKGV2ZW50LmdldFNpbXVsYXRpb25TdGF0ZSgpID09IFNpbXVsYXRpb25TdGF0ZS5QQVVTRUQpIHsKKwkJCQkvLyBZZXMKKwkJCQlpZiAobG9nV3JpdGVyICE9IG51bGwpIHsKKwkJCQkJbG9nV3JpdGVyLmZsdXNoTG9nZ2VyRGF0YSgpOworCQkJCX0KKwkJCX0gLy8gaWYgCisJCWVsc2UgCisJCS8vIElzIHRoZSBTaW11bGF0aW9uIHN0b3BwaW5nIChpLmUuIGJlaW5nIGRlbGV0ZWQ/KQorCQlpZiAoZXZlbnQuZ2V0U2ltdWxhdGlvblN0YXRlKCkgPT0gU2ltdWxhdGlvblN0YXRlLlNUT1BQRUQpIHsKKwkJCS8vIFllcworCQkJaWYgKGxvZ1dyaXRlciAhPSBudWxsKSB7CisJCQkJTG9nV3JpdGVyIGxvZ1JlZiA9IGxvZ1dyaXRlcjsKKwkJCQlsb2dXcml0ZXIgPSBudWxsOworCQkJCWxvZ1JlZi5jbG9zZUxvZ2dlckRhdGEoKTsKKwkJCX0KKy8vCQkJZGlzcG9zZSgpOworCQl9IC8vIGlmCisKKwl9IC8vIHNpbXVsYXRpb25DaGFuZ2VkCisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLldpZGdldCNkaXNwb3NlKCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBkaXNwb3NlKCkgeworCQlpZiAobG9nV3JpdGVyICE9IG51bGwpIHsKKwkJCWxvZ1dyaXRlci5jbG9zZUxvZ2dlckRhdGEoKTsKKwkJfQorCQl0aGlzLmxvZ1dyaXRlciA9IG51bGw7CisKKwkJaWYgKHNpbXVsYXRpb24gIT0gbnVsbCkgeworCQkJLy8gWWVzCisJCQlzaW11bGF0aW9uLnJlbW92ZVNpbXVsYXRpb25MaXN0ZW5lclN5bmModGhpcyk7CisJCX0gLy8gaWYKKwkJc3VwZXIuZGlzcG9zZSgpOworCX0gLy8gZGlzcG9zZQorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnV0aWwubG9nZ2Vycy52aWV3cy5Mb2dnZXJDb250cm9sI2dldElkZW50aWZpYWJsZSgpCisJICovCisJLypAT3ZlcnJpZGUKKwlwdWJsaWMgSWRlbnRpZmlhYmxlIGdldElkZW50aWZpYWJsZSgpIHsKKwkJcmV0dXJuIGlkZW50aWZpYWJsZTsKKwl9CisqLworfSAvLyBEYXRhSGlzdG9yeUxvZ2dlcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWwubG9nZ2Vycy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91dGlsL2xvZ2dlcnMvdmlld3MvSVJlbW92ZUxpc3RlbmVyLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbC5sb2dnZXJzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3V0aWwvbG9nZ2Vycy92aWV3cy9JUmVtb3ZlTGlzdGVuZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NGYyMjJhCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWwubG9nZ2Vycy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91dGlsL2xvZ2dlcnMvdmlld3MvSVJlbW92ZUxpc3RlbmVyLmphdmEKQEAgLTAsMCArMSwzMCBAQAorLy8gSVJlbW92ZUxpc3RlbmVyCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0udXRpbC5sb2dnZXJzLnZpZXdzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA3LDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5JZGVudGlmaWFibGU7CisKKy8qKgorICogV2hlbiB0aGUgcmVtb3ZlIGJ1dHRvbiBpcyBwcmVzc2VkIGJ5IHRoZSB1c2VyCisgKiBAYXV0aG9yIEphbWVzCisgKgorICovCitwdWJsaWMgaW50ZXJmYWNlIElSZW1vdmVMaXN0ZW5lciB7CisJLyoqCisJICogCisJICogQHBhcmFtIGlkZW50aWZpYWJsZQorCSAqLworCXZvaWQgaWRlbnRpZmlhYmxlUmVtb3ZlZChJZGVudGlmaWFibGUgaWRlbnRpZmlhYmxlKSA7CisJCisKK30KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsLmxvZ2dlcnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdXRpbC9sb2dnZXJzL3ZpZXdzL0xvZ1dyaXRlci5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWwubG9nZ2Vycy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91dGlsL2xvZ2dlcnMvdmlld3MvTG9nV3JpdGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjY4YTlkMwotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsLmxvZ2dlcnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdXRpbC9sb2dnZXJzL3ZpZXdzL0xvZ1dyaXRlci5qYXZhCkBAIC0wLDAgKzEsMTcwIEBACisvLyBMb2dXcml0ZXIgCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0udXRpbC5sb2dnZXJzLnZpZXdzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA3LDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgamF2YS5pby5GaWxlOworaW1wb3J0IGphdmEudXRpbC5DYWxlbmRhcjsKK2ltcG9ydCBqYXZhLnV0aWwuTWFwOworCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5hZGFwdGVycy50aW1lLlRpbWVQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguTm9kZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuSW50ZWdyYXRpb25EZWNvcmF0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5hZGFwdGVycy5yZWxhdGl2ZXZhbHVlLlJlbGF0aXZlVmFsdWVQcm92aWRlckFkYXB0ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5qb2JzLnNpbXVsYXRpb24uSVNpbXVsYXRpb247CisKKy8qKgorICogQWJzdHJhY3QgTG9nV3JpdGVyIGNsYXNzCisgKiAKKyAqLworcHVibGljIGFic3RyYWN0IGNsYXNzIExvZ1dyaXRlciB7CisJCisJcHJvdGVjdGVkIHN0YXRpYyBDYWxlbmRhciBub3cgPSBDYWxlbmRhci5nZXRJbnN0YW5jZSgpOworCQorCS8qKgorCSAqIFRoaXMgcHJlZml4IHByZWNlZGVzIHRoZSBub2RlIGlkIGFuZCBtdXN0IGJlIHJlbW92ZWQgaW4gdGhlIAorCSAqIGZpbHRlckZpbGVuYW1lIG1ldGhvZCB0byBhdXRvLWdlbmVyYXRlIHRoZSBvdXRwdXQgZmlsZSBuYW1lLgorCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIExPQ0FUSU9OSURfUFJFRklYID0gIi9ub2RlL2dlby9yZWdpb24vIjsKKwkKKwlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIFN0cmluZyBzZXAgPSBGaWxlLnNlcGFyYXRvcjsKKwkKKwkvKioKKwkgKiBmbGFnIHRvIGluZGljYXRlIEhlYWRlciBoYXMgYmVlbiBzdWNjZXNzZnVsbHkgd3JpdHRlbgorCSAqLworCXB1YmxpYyBib29sZWFuIG5lZWRzSGVhZGVyID0gdHJ1ZTsKKwkKKwlwcm90ZWN0ZWQgYm9vbGVhbiBkb25lID0gZmFsc2U7CisJCisKKwkKKwkvKioKKwkgKiAKKwkgKiBAcGFyYW0gcnZwCisJICovCisJcHVibGljIGFic3RyYWN0IHZvaWQgbG9nSGVhZGVyKFJlbGF0aXZlVmFsdWVQcm92aWRlckFkYXB0ZXIgcnZwKTsKKwkKKwkvKioKKwkgKiBOZXcgbWV0aG9kCisJICogQHBhcmFtIHNpbXVsYXRpb24KKwkgKiBAcGFyYW0gZG0gRGlzZWFzZU1vZGVsCisJICogQHBhcmFtIG5vZGVMZXZlbHMKKwkgKiBAcGFyYW0gdGltZVByb3ZpZGVyIFRpbWUgUHJvdmlkZXIKKwkgKi8KKwkKKwlwdWJsaWMgYWJzdHJhY3Qgdm9pZCBsb2dIZWFkZXIoSVNpbXVsYXRpb24gc2ltdWxhdGlvbiwgSW50ZWdyYXRpb25EZWNvcmF0b3IgZG0sIE1hcDxOb2RlLCBJbnRlZ2VyPiBub2RlTGV2ZWxzLCBUaW1lUHJvdmlkZXIgdGltZVByb3ZpZGVyKTsKKwkKKwkKKwkvKioKKwkgKiBNdXN0IEZsdXNoIGFuZCBjbG9zZSB0aGUgZmlsZQorCSAqLworCXB1YmxpYyBhYnN0cmFjdCB2b2lkIGZsdXNoTG9nZ2VyRGF0YSgpOworCQorCQorCS8qKgorCSAqIE11c3QgRmx1c2ggYW5kIGNsb3NlIHRoZSBmaWxlCisJICovCisJcHVibGljIGFic3RyYWN0IHZvaWQgY2xvc2VMb2dnZXJEYXRhKCk7CisJCisJCisJCisJLyoqCisJICogTXVzdCBpbXBsZW1lbnQgdGhpcyBtZXRob2QgdG8gbG9nIGRhdGEgaW4gcnVuIHRocmVhZAorCSAqIEBwYXJhbSBydnAgCisJICogQHBhcmFtIHRpbWVQcm92aWRlciAKKwkgKiAKKwkgKi8KKwlwdWJsaWMgYWJzdHJhY3Qgdm9pZCBsb2dEYXRhKFJlbGF0aXZlVmFsdWVQcm92aWRlckFkYXB0ZXIgcnZwLCBUaW1lUHJvdmlkZXIgdGltZVByb3ZpZGVyKTsKKwkKKwkvKioKKwkgKiBJbXBsZW1lbnQgdGhpcyBvbmUgZm9yIHRoZSBuZXcgbG9nZ2luZyBtZXRob2QKKwkgKiAKKwkgKiBAcGFyYW0gc2ltIFNpbXVsYXRpb24KKwkgKiBAcGFyYW0gZG0gRGlzZWFzZSBtb2RlbCB0byBsb2cKKwkgKiBAcGFyYW0gbm9kZUxldmVscyAKKwkgKiBAcGFyYW0gdGltZVByb3ZpZGVyIHRpbWVQcm92aWRlcgorCSAqIEBwYXJhbSBiZWZvcmVTdGFydAorCSAqLworCXB1YmxpYyBhYnN0cmFjdCB2b2lkIGxvZ0RhdGEoSVNpbXVsYXRpb24gc2ltLCBJbnRlZ3JhdGlvbkRlY29yYXRvciBkbSwgTWFwPE5vZGUsIEludGVnZXI+bm9kZUxldmVscywgVGltZVByb3ZpZGVyIHRpbWVQcm92aWRlciwgYm9vbGVhbiBiZWZvcmVTdGFydCk7CisJCisJLyoqCisJICogcmVzZXRzIHRoZSBvdXRwdXQgZGlyZWN0b3J5IGZvciBhIG5ldyBzZXQgb2YgcnVucworCSAqIGJ5IHJlc2V0dGluZyB0aGUgY2FsZW5kYXJzCisJICovCisJcHVibGljIHN0YXRpYyB2b2lkIHJlc2V0KCkgeworCQkvLyByZXNldCB0aGUgY2FsZW5kYXIgaW4gY2FzZSB3ZSBzdGFydCBhZ2FpbgorCQlub3cgPSBDYWxlbmRhci5nZXRJbnN0YW5jZSgpOworCX0KKwkKKwkvKioKKwkgKiBnZXQgdGhlIGN1cnJlbnQgZGF0ZS90aW1lIGluIG51bWVyaWMgZm9ybWF0CisJICogZm9yIGxvZyBkaXJlY3RvcnkgbmFtZQorCSAqIEByZXR1cm4gZGF0ZSB0aW1lIHN0cmluZworCSAqLworCXB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldERhdGVUaW1lTnVtZXJpYygpIHsKKwkJCisJCWludCBtb250aCA9IG5vdy5nZXQoQ2FsZW5kYXIuTU9OVEgpICsgMTsKKwkJaW50IGRheSA9IG5vdy5nZXQoQ2FsZW5kYXIuREFZX09GX01PTlRIKTsKKwkJaW50IHllYXIgPSBub3cuZ2V0KENhbGVuZGFyLllFQVIpOworCQlpbnQgaHJzID0gbm93LmdldChDYWxlbmRhci5IT1VSX09GX0RBWSkrMTsKKwkJaW50IG1pbnMgPSBub3cuZ2V0KENhbGVuZGFyLk1JTlVURSk7CisJCS8vaW50IHNlYyA9IG5vdy5nZXQoQ2FsZW5kYXIuU0VDT05EKTsKKwkJCisJCQkJCisJCVN0cmluZyBzbW9udGggPSAiIittb250aDsKKwkJaWYgKG1vbnRoIDwgMTApIHNtb250aCA9ICIwIitzbW9udGg7CisJCVN0cmluZyBzZGF5ID0gIiIrZGF5OworCQlpZiAoZGF5IDwgMTApIHNkYXkgPSAiMCIrc2RheTsKKwkJU3RyaW5nIHNocnMgPSAiIitocnM7CisJCWlmIChocnMgPCAxMCkgc2hycyA9ICIwIitzaHJzOworCQlTdHJpbmcgc21pbiA9ICIiK21pbnM7CisJCWlmIChtaW5zIDwgMTApIHNtaW4gPSAiMCIrc21pbjsKKwkJLy9TdHJpbmcgc3NlYyA9ICIiK3NlYzsKKwkJLy9pZiAoc2VjIDwgMTApIHNzZWMgPSAiMCIrc3NlYzsKKwkJU3RyaW5nIHRpbWUgPSAiIit5ZWFyK3Ntb250aCtzZGF5KyJfIitzaHJzK3NtaW47CisJCXJldHVybiB0aW1lOworCX0vL2dldERhdGVUaW1lTnVtZXJpYworCQorCS8qKgorCSAqIGZpbHRlcnMgdGhlIGxvY2F0aW9uIGlkIHByZWZpeCBmcm9tIHRoZSBiZWdpbm5pbmcgb2YKKwkgKiAgYSBub2RlcyBJRCBmb3IgZ2VuZXJhdGlvbiBvZiBhIGZpbGUgbmFtZQorCSAqIEBwYXJhbSB1bmZpbHRlcmVkCisJICogQHJldHVybiB0aGUgZmlsdGVyZWQgZmlsZSBuYW1lIHVzaW5nIGxvY2F0aW9uIGlkLgorCSAqLworCXB1YmxpYyBzdGF0aWMgU3RyaW5nIGZpbHRlckZpbGVuYW1lKFN0cmluZyB1bmZpbHRlcmVkKSB7CisJCWludCBsYXN0ID0gdW5maWx0ZXJlZC5pbmRleE9mKExPQ0FUSU9OSURfUFJFRklYKTsKKwkJaWYgKGxhc3QgPj0wKSB7CisJCQlsYXN0ICs9IExPQ0FUSU9OSURfUFJFRklYLmxlbmd0aCgpOworCQkJcmV0dXJuIHVuZmlsdGVyZWQuc3Vic3RyaW5nKGxhc3QsIHVuZmlsdGVyZWQubGVuZ3RoKCkpOworCQl9IAorCQlyZXR1cm4gdW5maWx0ZXJlZDsKKworCQorCX0KKwkKKwkKKwkvKioKKwkgKiBnZXQgdGhlIG91dHB1dCBmb2xkZXIgbmFtZQorCSAqIEByZXR1cm4gZGlyZWN0b3J5CisJICovCisJcHVibGljIGFic3RyYWN0IFN0cmluZyBnZXREaXJlY3RvcnlOYW1lKCkgOworCisJLyoqCisJICogbmFtZSBvZiB0aGUgZGF0YSBvYmplY3QgYmVpbmcgbG9nZ2VkLgorCSAqIGUuZy4gVGhlIERpc2Vhc2UgTmFtZQorCSAqIEByZXR1cm4gdGhlIGRpc2Vhc2Ugb3IgcG9wdWxhdGlvbiBkZWNvcmF0b3IgbmFtZQorCSAqLworCXB1YmxpYyBhYnN0cmFjdCBTdHJpbmcgZ2V0TG9nRGF0YU9iamVjdE5hbWUoKSA7CisKK30KKworCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbC5sb2dnZXJzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3V0aWwvbG9nZ2Vycy92aWV3cy9Mb2dnZXJDb250cm9sLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbC5sb2dnZXJzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3V0aWwvbG9nZ2Vycy92aWV3cy9Mb2dnZXJDb250cm9sLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGU0YzRkYwotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsLmxvZ2dlcnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdXRpbC9sb2dnZXJzL3ZpZXdzL0xvZ2dlckNvbnRyb2wuamF2YQpAQCAtMCwwICsxLDM2MCBAQAorLy8gTG9nZ2VyQ29udHJvbAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnV0aWwubG9nZ2Vycy52aWV3czsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNywgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKK2ltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CitpbXBvcnQgamF2YS51dGlsLk1hcDsKK2ltcG9ydCBqYXZhLnV0aWwuU2V0OworaW1wb3J0IGphdmEudXRpbC5jb25jdXJyZW50LkNvcHlPbldyaXRlQXJyYXlMaXN0OworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLkVNYXA7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlVSSTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvblByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuU2VsZWN0aW9uQ2hhbmdlZEV2ZW50OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uSWRlbnRpZmlhYmxlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5HcmFwaDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguTm9kZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuSW50ZWdyYXRpb25EZWNvcmF0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5hZGFwdGVycy5yZWxhdGl2ZXZhbHVlLlJlbGF0aXZlVmFsdWVQcm92aWRlckFkYXB0ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLkRpc2Vhc2VNb2RlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmpvYnMuc2ltdWxhdGlvbi5JU2ltdWxhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmpvYnMuc2ltdWxhdGlvbi5JU2ltdWxhdGlvbkxpc3RlbmVyU3luYzsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmpvYnMuc2ltdWxhdGlvbi5TaW11bGF0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uam9icy5zaW11bGF0aW9uLlNpbXVsYXRpb25NYW5hZ2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuRGlzcG9zZUV2ZW50OworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuRGlzcG9zZUxpc3RlbmVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5sYXlvdXQuRm9ybUxheW91dDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuTGFiZWw7CisKKy8qKgorICogTG9nZ2VyQ29udHJvbCBpcyBhIHN1YmNsYXNzIG9mIENhbnZhcyBzdWl0YWJsZSBmb3IgY2hhcnQgZHJhd2luZ3MuCisgKi8KK2Fic3RyYWN0IHB1YmxpYyBjbGFzcyBMb2dnZXJDb250cm9sIGV4dGVuZHMgQ29tcG9zaXRlIGltcGxlbWVudHMKKwkJSVNpbXVsYXRpb25MaXN0ZW5lclN5bmMsIElTZWxlY3Rpb25Qcm92aWRlciB7CisKKwlwcm90ZWN0ZWQgUmVsYXRpdmVWYWx1ZVByb3ZpZGVyQWRhcHRlciBydnA7CisJcHJvdGVjdGVkIExhYmVsIHNpbXVsYXRpb25OYW1lTGFiZWw7CisJCisJLyoqCisJICogVGhlIHtAbGluayBTaW11bGF0aW9ufSBmb3IgdGhlIAorCSAqLworCXByb3RlY3RlZCBJU2ltdWxhdGlvbiBzaW11bGF0aW9uID0gbnVsbDsKKwkKKwkvKioKKwkgKiBUaGUge0BsaW5rIERpc2Vhc2VNb2RlbH0gZm9yIHRoZSBsb2dnZWQgZGF0YSAKKwkgKi8KKwkKKwlwcm90ZWN0ZWQgSW50ZWdyYXRpb25EZWNvcmF0b3IgZGlzZWFzZU1vZGVsID0gbnVsbDsKKwkKKwlwcm90ZWN0ZWQgTWFwPE5vZGUsIEludGVnZXI+IG5vZGVMZXZlbHM7CisJCisJCisKKwkvKioKKwkgKiBUaGUgY29sbGVjdGlvbiBvZiBJU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyIHdhaXRpbmcgdG8gYmUgdG9sZCBhYm91dAorCSAqIHNlbGVjdGlvbnMuCisJICovCisJcHJvdGVjdGVkIGZpbmFsIExpc3Q8SVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcj4gbGlzdGVuZXJzID0gbmV3IENvcHlPbldyaXRlQXJyYXlMaXN0PElTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXI+KCk7CisKKwkvKioKKwkgKiBUaGUgY29sbGVjdGlvbiBvZiBJU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyIHdhaXRpbmcgdG8gYmUgdG9sZCBhYm91dAorCSAqIHNlbGVjdGlvbnMuCisJICovCisJcHJvdGVjdGVkIGZpbmFsIExpc3Q8SVJlbW92ZUxpc3RlbmVyPiByZW1vdmVMaXN0ZW5lcnMgPSBuZXcgQ29weU9uV3JpdGVBcnJheUxpc3Q8SVJlbW92ZUxpc3RlbmVyPigpOworCisJLyoqCisJICogVGhlIDxjb2RlPklkZW50aWZpYWJsZTwvY29kZT4gdGhhdCB3YXMgbW9zdCByZWNlbnRseSBzZWxlY3RlZCwgb3IKKwkgKiA8Y29kZT5udWxsPC9jb2RlPiBpZiBub25lIGhhcyBiZWVuIHNlbGVjdGVkLgorCSAqLworCUlTZWxlY3Rpb24gc2VsZWN0aW9uID0gbnVsbDsKKworCS8qKgorCSAqIFRoZSB3aWR0aCBvZiB0aGUgbGF5b3V0IG1hcmdpbi4KKwkgKi8KKwlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIGludCBNQVJHSU5fV0lEVEggPSA1OworCisJLyoqCisJICogVGhlIGhlaWdodCBvZiB0aGUgbGF5b3V0IG1hcmdpbi4KKwkgKi8KKwlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIGludCBNQVJHSU5fSEVJR0hUID0gNTsKKworCS8qKgorCSAqIEBwYXJhbSBwYXJlbnQKKwkgKiBAcGFyYW0gc3R5bGUKKwkgKi8KKwlwdWJsaWMgTG9nZ2VyQ29udHJvbChmaW5hbCBDb21wb3NpdGUgcGFyZW50LCBmaW5hbCBpbnQgc3R5bGUpIHsKKwkJc3VwZXIocGFyZW50LCBzdHlsZSk7CisKKwkJdGhpcy5hZGREaXNwb3NlTGlzdGVuZXIobmV3IERpc3Bvc2VMaXN0ZW5lcigpIHsKKwkJCS8qKgorCQkJICogQHNlZSBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLkRpc3Bvc2VMaXN0ZW5lciN3aWRnZXREaXNwb3NlZChvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLkRpc3Bvc2VFdmVudCkKKwkJCSAqLworCQkJcHVibGljIHZvaWQgd2lkZ2V0RGlzcG9zZWQoQFN1cHByZXNzV2FybmluZ3MoInVudXNlZCIpCisJCQlmaW5hbCBEaXNwb3NlRXZlbnQgZSkgeworCQkJCWRpc3Bvc2UoKTsKKwkJCX0KKwkJfSk7CisKKwkJZmluYWwgRm9ybUxheW91dCBsYXlvdXQgPSBuZXcgRm9ybUxheW91dCgpOworCQlsYXlvdXQubWFyZ2luSGVpZ2h0ID0gTUFSR0lOX0hFSUdIVDsKKwkJbGF5b3V0Lm1hcmdpbldpZHRoID0gTUFSR0lOX1dJRFRIOworCQlzZXRMYXlvdXQobGF5b3V0KTsKKworCX0gLy8gTG9nZ2VyQ29udHJvbAorCisJLyoqCisJICogQHBhcmFtIHBhcmVudAorCSAqICAgICAgICAgICAgdGhlIHBhcmVudCBTV1QgY29udHJvbCB0aGF0IHRoaXMgY29tcG9zaXRlIHdpbGwgYmUgYSBjaGlsZCBvZgorCSAqIEByZXR1cm4gdGhlIFNXVCBDb21wb3NpdGUgdG8gYmUgZGlzcGxheWVkIGFib3ZlIHRoZSBNYXBDYW52YXMgaW4gdGhlCisJICogICAgICAgICBjb250cm9sCisJICovCisJcHJvdGVjdGVkIENvbXBvc2l0ZSBjcmVhdGVUb3BDb21wb3NpdGUoZmluYWwgQ29tcG9zaXRlIHBhcmVudCkgeworCQkvL2ZpbmFsIENvbXBvc2l0ZSB0b3BDb21wb3NpdGUgPSBuZXcgQ29tcG9zaXRlKHBhcmVudCwgU1dULk5PTkUpOworCisJCQorCQkKKwkJcmV0dXJuIHBhcmVudDsKKwl9IC8vIGNyZWF0ZVRvcENvbXBvc2l0ZQorCisJCisJCisJLyoqCisJICogQWxsIGNvbnRyb2xsZXJzIG11c3QgaW1wbGVtZW50IHRoaXMgCisJICogdG8gcmVtb3ZlIHRoZSBjb250cm9sIGUuZy4gYnkgYSByZW1vdmUgYnV0dG9uIGV2ZW50CisJICovCisJcHVibGljIGFic3RyYWN0IHZvaWQgcmVtb3ZlKCkgOworCQorCS8qKgorCSAqIAorCSAqIEBwYXJhbSBsaXN0ZW5lcgorCSAqLworCXB1YmxpYyB2b2lkIGFkZElSZW1vdmVMaXN0ZW5lcihJUmVtb3ZlTGlzdGVuZXIgbGlzdGVuZXIpIHsKKwkJcmVtb3ZlTGlzdGVuZXJzLmFkZChsaXN0ZW5lcik7CisJfQorCQorCS8qKgorCSAqIAorCSAqIEBwYXJhbSBsaXN0ZW5lcgorCSAqLworCXB1YmxpYyB2b2lkIHJlbW92ZUlSZW1vdmVMaXN0ZW5lcihJUmVtb3ZlTGlzdGVuZXIgbGlzdGVuZXIpIHsKKwkJcmVtb3ZlTGlzdGVuZXJzLnJlbW92ZShsaXN0ZW5lcik7CisJfQorCQorCS8qKgorCSAqIAorCSAqIEBwYXJhbSBpZGVudAorCSAqLworCXB1YmxpYyB2b2lkIGZpcmVSZW1vdmVFdmVudChJZGVudGlmaWFibGUgaWRlbnQpIHsKKwkJZm9yIChmaW5hbCBJUmVtb3ZlTGlzdGVuZXIgbGlzdGVuZXIgOiByZW1vdmVMaXN0ZW5lcnMpIHsKKwkJCWxpc3RlbmVyLmlkZW50aWZpYWJsZVJlbW92ZWQoaWRlbnQpOworCQl9IC8vIGZvciBlYWNoIElTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIKKwl9CisKKwkvKioKKwkgKiBTZXR0aW5nIHRoZSB7QGxpbmsgU2ltdWxhdGlvbn0gaGFzIHRoZSBzaWRlLWVmZmVjdCBvZiBjYXVzaW5nIHRoZSBjb250cm9sCisJICogdG8gcmVtb3ZlIGl0c2VsZiBhcyBhIGxpc3RlbmVyIGZyb20gYW55IHByZXZpb3VzbHkgc2V0IHtAbGluayBTaW11bGF0aW9ufQorCSAqIGFuZCBhZGRpbmcgaXRzZWxmIGFzIGEgbGlzdGVuZXIgdG8gdGhlIG5ldyBvbmUuIEl0IHdpbGwgYWxzbyBjYXVzZSB0aGUKKwkgKiBpbWFnZSB0byBiZSBpbml0aWFsaXplZCBmcm9tIHRoZSBjb250ZW50cyBvZiB0aGUgbmV3IHtAbGluayBTaW11bGF0aW9ufQorCSAqIGFzIGFwcHJvcHJpYXRlLgorCSAqIAorCSAqIEBwYXJhbSBzaW11bGF0aW9uCisJICogICAgICAgICAgICB0aGUgc2ltdWxhdGlvbiB3aG9zZSBMYXQvTG9uZyBkYXRhIHdpbGwgYmUgcmVuZGVyZWQuCisJICovCisJcHVibGljIGZpbmFsIHZvaWQgc2V0U2ltdWxhdGlvbihmaW5hbCBJU2ltdWxhdGlvbiBzaW11bGF0aW9uKSB7CisJCS8vIEFueSBuZWVkIHRvIHN3aXRjaD8KKwkJaWYgKHRoaXMuc2ltdWxhdGlvbiA9PSBzaW11bGF0aW9uKSB7CisJCQkvLyBObworCQkJcmV0dXJuOworCQl9IC8vIGlmIG5vIG5lZWQgdG8gc3dpdGNoPworCisJCS8vIFNob3VsZCB3ZSByZW1vdmUgb3Vyc2VsdmVzIGFzIGxpc3RlbmVycyBmcm9tIHRoZSBjdXJyZW50IHNpbXVsYXRpb24/CisJCWlmICh0aGlzLnNpbXVsYXRpb24gIT0gbnVsbCkgeworCQkJCisJCQkvLyBNQUQgMjAtSnVuZS0yMDExCisJCQkvLyBTaW11bGF0aW9uIEFkYXB0ZXIgcmVtb3ZlZC4gIFNpbXVsYXRpb24gbGlzdGVuZXIgaW50ZXJmYWNlIGlzIG5vdyAKKwkJCS8vIGRpc3BsYXkvaGVhZGxlc3Mgc2FmZS4KKwkJCQorLy8JCQlpZih0aGlzLnNpbXVsYXRpb24gaW5zdGFuY2VvZiBTaW11bGF0aW9uTWFuYWdlci5TaW11bGF0aW9uQWRhcHRlcikgeworLy8JCQkJU2ltdWxhdGlvbk1hbmFnZXIuU2ltdWxhdGlvbkFkYXB0ZXIgYWRhcHRlZFNpbSA9IChTaW11bGF0aW9uTWFuYWdlci5TaW11bGF0aW9uQWRhcHRlcil0aGlzLnNpbXVsYXRpb247CisvLwkJCQlhZGFwdGVkU2ltLmdldFNpbXVsYXRpb24oKS5yZW1vdmVTaW11bGF0aW9uTGlzdGVuZXJTeW5jKHRoaXMpOworLy8JCQl9IGVsc2UgdGhpcy5zaW11bGF0aW9uLnJlbW92ZVNpbXVsYXRpb25MaXN0ZW5lclN5bmModGhpcyk7CisJCQl0aGlzLnNpbXVsYXRpb24ucmVtb3ZlU2ltdWxhdGlvbkxpc3RlbmVyU3luYyh0aGlzKTsKKwkJfQorCisJCXRoaXMubm9kZUxldmVscyA9IHRoaXMuZ2V0Tm9kZUxldmVscyhzaW11bGF0aW9uKTsKKwkJCisJCXRoaXMuc2ltdWxhdGlvbiA9IHNpbXVsYXRpb247CisJCXNlbGVjdGlvbiA9IG51bGw7CisJCS8vIFdhcyB0aGVyZSBhIG5ldyBzaW11bGF0aW9uIHRvIHN3aXRjaCB0bz8KKwkJaWYgKHRoaXMuc2ltdWxhdGlvbiAhPSBudWxsKSB7CisJCQkvLyBZZXMKKwkJCQorCQkJCisJCQkvLyBNQUQgMjAtSnVuZS0yMDExCisJCQkvLyBTaW11bGF0aW9uIEFkYXB0ZXIgcmVtb3ZlZC4gIFNpbXVsYXRpb24gbGlzdGVuZXIgaW50ZXJmYWNlIGlzIG5vdyAKKwkJCS8vIGRpc3BsYXkvaGVhZGxlc3Mgc2FmZS4KKwkJCQorCQkJLy8gV2UgZG9uJ3Qgd2FudCB0byB1c2UgdGhlIGFkYXB0ZWQgc2ltIHNpbmNlIGl0J3MgdXNpbmcgdGhlIGRpc3BsYXkgdG8gZG8KKwkJCS8vIHN5bmMgY2FsbGJhY2tzLiBXZSB3YW50IHRvIHVzZSB0aGUgc2ltdWxhdGlvbiBkaXJlY3RseQorLy8JCQlpZih0aGlzLnNpbXVsYXRpb24gaW5zdGFuY2VvZiBTaW11bGF0aW9uTWFuYWdlci5TaW11bGF0aW9uQWRhcHRlcikgeworLy8JCQkJU2ltdWxhdGlvbk1hbmFnZXIuU2ltdWxhdGlvbkFkYXB0ZXIgYWRhcHRlZFNpbSA9IChTaW11bGF0aW9uTWFuYWdlci5TaW11bGF0aW9uQWRhcHRlcil0aGlzLnNpbXVsYXRpb247CisvLwkJCQlhZGFwdGVkU2ltLmdldFNpbXVsYXRpb24oKS5hZGRTaW11bGF0aW9uTGlzdGVuZXJTeW5jKHRoaXMpOworLy8JCQl9IGVsc2UgdGhpcy5zaW11bGF0aW9uLmFkZFNpbXVsYXRpb25MaXN0ZW5lclN5bmModGhpcyk7CisJCQkKKwkJCXRoaXMuc2ltdWxhdGlvbi5hZGRTaW11bGF0aW9uTGlzdGVuZXJTeW5jKHRoaXMsIHRydWUpOworCQkJaW5pdGlhbGl6ZUZyb21TaW11bGF0aW9uKHRoaXMuc2ltdWxhdGlvbik7CisJCX0gZWxzZSB7CisJCQkvLyBObworCQkJLy8gSnVzdCBkaXNwbGF5IGEgYmxhbmsgc2NyZWVuCisJCQlpbml0aWFsaXplRnJvbVNpbXVsYXRpb24obnVsbCk7CisJCX0KKworCQlyZWZyZXNoMigpOworCX0gLy8gc2V0U2ltdWxhdGlvbgorCisJLyoqCisJICogc2V0RGlzZWFzZU1vZGVsIFNldCB0aGUgZGlzZWFzZSBtb2RlbCBmb3IgdGhlIGxvZ2dlcgorCSAqCisJICpAcGFyYW0gZG0gVGhlIGRpc2Vhc2UgbW9kZWwKKwkgKi8KKwkKKwlwdWJsaWMgdm9pZCBzZXREaXNlYXNlTW9kZWwoSW50ZWdyYXRpb25EZWNvcmF0b3IgZG0pIHsKKwkJdGhpcy5kaXNlYXNlTW9kZWwgPSBkbTsKKwl9CisJLyoqCisJICogCisJICogQHBhcmFtIHNpbXVsYXRpb24KKwkgKi8KKwlwcm90ZWN0ZWQgYWJzdHJhY3Qgdm9pZCBpbml0aWFsaXplRnJvbVNpbXVsYXRpb24oCisJCQlmaW5hbCBJU2ltdWxhdGlvbiBzaW11bGF0aW9uKTsKKworCS8qKgorCSAqIAorCSAqLworCXByb3RlY3RlZCBhYnN0cmFjdCB2b2lkIHJlZnJlc2gyKCk7CisKKwkvKioKKwkgKiBAcmV0dXJuIHRoZSBzZWxlY3Rpb24KKwkgKi8KKwlwdWJsaWMgZmluYWwgSVNlbGVjdGlvbiBnZXRTZWxlY3Rpb24oKSB7CisJCXJldHVybiBzZWxlY3Rpb247CisJfQorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb25Qcm92aWRlciNzZXRTZWxlY3Rpb24ob3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uKQorCSAqLworCXB1YmxpYyB2b2lkIHNldFNlbGVjdGlvbihmaW5hbCBJU2VsZWN0aW9uIHNlbGVjdGlvbikgeworCQl0aGlzLnNlbGVjdGlvbiA9IHNlbGVjdGlvbjsKKwkJZmlyZVNlbGVjdGlvbihzZWxlY3Rpb24pOworCX0KKworCS8qKgorCSAqIAorCSAqIEBwYXJhbSBpZGVudGlmaWFibGUKKwkgKiBAcGFyYW0gc2ltIAorCSAqLworCS8vcHVibGljIGFic3RyYWN0IHZvaWQgc2V0SWRlbnRpZmlhYmxlKElkZW50aWZpYWJsZSBpZGVudGlmaWFibGUsIElTaW11bGF0aW9uIHNpbSk7CisJCisJLyoqCisJICogUmV0dXJucyB0aGUgSWRlbnRpZmlhYmxlIGJlaW5nIGRpc3BsYXllZAorCSAqIAorCSAqIEByZXR1cm4gVGhlIGlkZW50aWZpYWJsZSB0byBiZSBtb25pdG9yZWQKKwkgKiAKKwkgKi8KKwkvL3B1YmxpYyBhYnN0cmFjdCBJZGVudGlmaWFibGUgZ2V0SWRlbnRpZmlhYmxlKCk7CisKKwkvKioKKwkgKiBQYXNzIGEge0BsaW5rIFNlbGVjdGlvbkNoYW5nZWRFdmVudH0gYWxvbmcgdG8gbGlzdGVuZXJzLgorCSAqIAorCSAqIEBwYXJhbSBzZWxlY3Rpb24KKwkgKiAgICAgICAgICAgIHRoZSB7QGxpbmsgSVNlbGVjdGlvbn0gdG8gYmUgZ2l2aW5nIHRvIHRoZSBsaXN0ZW5lcnMuCisJICovCisJcHVibGljIHZvaWQgZmlyZVNlbGVjdGlvbihmaW5hbCBJU2VsZWN0aW9uIHNlbGVjdGlvbikgeworCisJCWZpbmFsIFNlbGVjdGlvbkNoYW5nZWRFdmVudCBldmVudCA9IG5ldyBTZWxlY3Rpb25DaGFuZ2VkRXZlbnQodGhpcywKKwkJCQlzZWxlY3Rpb24pOworCQlmb3IgKGZpbmFsIElTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIgbGlzdGVuZXIgOiBsaXN0ZW5lcnMpIHsKKwkJCWxpc3RlbmVyLnNlbGVjdGlvbkNoYW5nZWQoZXZlbnQpOworCQl9IC8vIGZvciBlYWNoIElTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIKKworCX0gLy8gZmlyZVNlbGVjdGlvbgorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb25Qcm92aWRlciNhZGRTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIob3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyKQorCSAqLworCXB1YmxpYyB2b2lkIGFkZFNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcigKKwkJCWZpbmFsIElTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIgbGlzdGVuZXIpIHsKKwkJbGlzdGVuZXJzLmFkZChsaXN0ZW5lcik7CisJfQorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb25Qcm92aWRlciNyZW1vdmVTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIob3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyKQorCSAqLworCXB1YmxpYyB2b2lkIHJlbW92ZVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcigKKwkJCWZpbmFsIElTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIgbGlzdGVuZXIpIHsKKwkJbGlzdGVuZXJzLnJlbW92ZShsaXN0ZW5lcik7CisJfQorCisJLyoqCisJICogUmV0dXJuIGFsbCBub2RlcyBhbmQgdGhlaXIgY29ycmVzcG9uZGluZyBsZXZlbC4gV2UgdXNlIHRoaXMgdG8gbG9nIGRhdGEgdXNpbmcgCisJICogZGlmZmVyZW50IHJlc29sdXRpb25zLgorCSAqIAorCSAqIEBwYXJhbSBzaW11bGF0aW9uCisJICogQHJldHVybiBNYXAgd2l0aCBub2RlIGFuZCBsZXZlbAorCSAqLworCQorCUBTdXBwcmVzc1dhcm5pbmdzKCJib3hpbmciKQorCXB1YmxpYyBNYXA8Tm9kZSwgSW50ZWdlcj4gZ2V0Tm9kZUxldmVscyhJU2ltdWxhdGlvbiBzaW11bGF0aW9uKSB7CisJCU1hcDxOb2RlLCBJbnRlZ2VyPiByZXN1bHQgPSBuZXcgSGFzaE1hcDxOb2RlLCBJbnRlZ2VyPigpOworCQlmaW5hbCBHcmFwaCBncmFwaCA9IHNpbXVsYXRpb24uZ2V0U2NlbmFyaW8oKS5nZXRDYW5vbmljYWxHcmFwaCgpOworCQlpZiAoZ3JhcGggIT0gbnVsbCkgeworCQkJZmluYWwgRU1hcDxVUkksTm9kZT4gYWxsTm9kZXMgPSBncmFwaC5nZXROb2RlcygpOworCQkJZmluYWwgU2V0PFVSST4gYWxsR3JhcGhVUklzID0gYWxsTm9kZXMua2V5U2V0KCk7CisJCSAgICBJdGVyYXRvcjxVUkk+IGdyYXBoSXRlcjIgPSBhbGxHcmFwaFVSSXMuaXRlcmF0b3IoKTsKKwkJICAKKwkJICAgIHdoaWxlKChncmFwaEl0ZXIyIT1udWxsKSYmKGdyYXBoSXRlcjIuaGFzTmV4dCgpKSkgeworCQkgICAgCVVSSSB1cmkgPSBncmFwaEl0ZXIyLm5leHQoKTsKKwkJICAgIAlOb2RlIG5vZGUgPSBhbGxOb2Rlcy5nZXQodXJpKTsKKwkJICAgIAkKKwkJICAgIAkvLyBGaXggZm9yIGRpc3RyaWJ1dGVkIFNURU0uIE9ubHkgbG9nIG5vZGVzCisJCSAgICAJLy8gdGhhdCBhcmUgbWFuYWdlZCBieSB0aGlzIGluc3RhbmNlCisJCSAgICAJaWYoIVNpbXVsYXRpb25NYW5hZ2VyLmdldE1hbmFnZXIoKS5nZXRHcmFwaFBhcnRpdGlvbmVyKCkuaXNNYW5hZ2VkKG5vZGUpKQorCQkgICAgCQljb250aW51ZTsKKwkJICAgIAkKKwkJICAgIAkvLyBCdWcgZml4LiBNYWtlIHN1cmUgdGhlIG5vZGUgaGFzIGxhYmVscworCQkgICAgCWlmKG5vZGUuZ2V0TGFiZWxzKCkuc2l6ZSgpID09IDApIGNvbnRpbnVlOworCQkgICAgCVN0cmluZyBpZCA9ICBub2RlLmdldFVSSSgpLnRvU3RyaW5nKCk7CisJCSAgICAJaW50IGxldmVsID0gZ2V0QWRtaW5MZXZlbChpZCk7CisJCSAgICAJcmVzdWx0LnB1dChub2RlLCBsZXZlbCk7CisJCSAgICB9CisJCX0gLy8gZ3JhcGggbm90IG51bGwKKwkJcmV0dXJuIHJlc3VsdDsKKwl9CisJCisJcHJpdmF0ZSBpbnQgZ2V0QWRtaW5MZXZlbChTdHJpbmcgdXJpS2V5KSB7CisJCWludCByZXRWYWwgPSAwOworCQlTdHJpbmcgdGVzdCA9IHVyaUtleTsKKwkJd2hpbGUodGVzdC5jb250YWlucygiLSIpKSB7CisJCQlyZXRWYWwgKys7CisJCQlpbnQgaWR4MSA9IHRlc3QuaW5kZXhPZigiLSIpOworCQkJU3RyaW5nIHRlc3QyID0gdGVzdC5zdWJzdHJpbmcoaWR4MSsxLCB0ZXN0Lmxlbmd0aCgpKTsKKwkJCXRlc3QgPSB0ZXN0MjsKKwkJfQorCQlyZXR1cm4gcmV0VmFsOworCX0KK30gLy8gTG9nZ2VyQ29udHJvbApkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWwubG9nZ2Vycy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91dGlsL2xvZ2dlcnMvdmlld3MvTG9nZ2VyQ29udHJvbEZhY3RvcnkuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsLmxvZ2dlcnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdXRpbC9sb2dnZXJzL3ZpZXdzL0xvZ2dlckNvbnRyb2xGYWN0b3J5LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjAxMGVhNgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsLmxvZ2dlcnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdXRpbC9sb2dnZXJzL3ZpZXdzL0xvZ2dlckNvbnRyb2xGYWN0b3J5LmphdmEKQEAgLTAsMCArMSw0MiBAQAorLy8gTG9nZ2VyQ29udHJvbEZhY3RvcnkuamF2YQorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnV0aWwubG9nZ2Vycy52aWV3czsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNywgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuSW50ZWdyYXRpb25EZWNvcmF0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5qb2JzLnNpbXVsYXRpb24uSVNpbXVsYXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlOworCisvKioKKyAqIFRoaXMgaW50ZXJmYWNlIGlzIGltcGxlbWVudGVkIGJ5IGZhY3RvcmllcyB0aGF0IGNyZWF0ZSBpbnN0YW5jZXMgb2YKKyAqIHtAbGluayBMb2dnZXJDb250cm9sfS4KKyAqLworcHVibGljIGludGVyZmFjZSBMb2dnZXJDb250cm9sRmFjdG9yeSB7CisJCisJLyoqCisJICogCisJICogQHBhcmFtIHBhcmVudAorCSAqIEBwYXJhbSBkaXJOYW1lCisJICogQHBhcmFtIHNpbXVsYXRpb24KKwkgKiBAcGFyYW0gZGlzZWFzZU1vZGVsCisJICogQHBhcmFtIGxvZ1J1blBhcmFtZXRlcnMKKwkgKiBAcmV0dXJuIHRoZSBsb2dnZXJDb250cm9sCisJICovCisJTG9nZ2VyQ29udHJvbCBjcmVhdGUoZmluYWwgQ29tcG9zaXRlIHBhcmVudCwgU3RyaW5nIGRpck5hbWUsIElTaW11bGF0aW9uIHNpbXVsYXRpb24sIEludGVncmF0aW9uRGVjb3JhdG9yIGRpc2Vhc2VNb2RlbCwgYm9vbGVhbiBsb2dSdW5QYXJhbWV0ZXJzKTsKKworCQorCS8qKgorCSAqIEByZXR1cm4gVE9ETyBKRksKKwkgKi8KKwlwdWJsaWMgU3RyaW5nIGdldENvbnRyb2xUeXBlKCk7CisKK30gLy8gTG9nZ2VyQ29udHJvbEZhY3RvcnkKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsLmxvZ2dlcnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdXRpbC9sb2dnZXJzL3ZpZXdzL0xvZ2dlclZpZXdlci5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWwubG9nZ2Vycy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91dGlsL2xvZ2dlcnMvdmlld3MvTG9nZ2VyVmlld2VyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjQ0MTNjZAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsLmxvZ2dlcnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdXRpbC9sb2dnZXJzL3ZpZXdzL0xvZ2dlclZpZXdlci5qYXZhCkBAIC0wLDAgKzEsMTQ3MCBAQAorLy8gTG9nZ2VyVmlld2VyLmphdmEKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS51dGlsLmxvZ2dlcnMudmlld3M7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDcsMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqYXZhLmlvLkZpbGU7CitpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OworaW1wb3J0IGphdmEudXRpbC5BcnJheXM7CitpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247CitpbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7CitpbXBvcnQgamF2YS51dGlsLkhhc2hTZXQ7CitpbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOworaW1wb3J0IGphdmEudXRpbC5MaW5rZWRIYXNoU2V0OworaW1wb3J0IGphdmEudXRpbC5MaXN0OworaW1wb3J0IGphdmEudXRpbC5NYXA7CitpbXBvcnQgamF2YS51dGlsLlNldDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUGF0aDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuRUxpc3Q7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlVSSTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5kaWFsb2dzLkRpYWxvZ1NldHRpbmdzOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmRpYWxvZ3MuSURpYWxvZ1NldHRpbmdzOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5TZWxlY3Rpb25DaGFuZ2VkRXZlbnQ7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5WaWV3ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5JZGVudGlmaWFibGU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkdyYXBoOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5EZWNvcmF0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLkludGVncmF0aW9uRGVjb3JhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zY2VuYXJpby5TY2VuYXJpbzsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuQWN0aXZhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5BZ2dyZWdhdGluZ1NJRGlzZWFzZU1vZGVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uam9icy5zaW11bGF0aW9uLklTaW11bGF0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uam9icy5zaW11bGF0aW9uLklTaW11bGF0aW9uTWFuYWdlckxpc3RlbmVyU3luYzsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmpvYnMuc2ltdWxhdGlvbi5TaW11bGF0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uam9icy5zaW11bGF0aW9uLlNpbXVsYXRpb25NYW5hZ2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uam9icy5zaW11bGF0aW9uLlNpbXVsYXRpb25NYW5hZ2VyRXZlbnQ7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS51aS52aWV3cy5nZW9ncmFwaGljLm1hcC5NYXBDb250cm9sOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udXRpbC5sb2dnZXJzLmh0bWxnZW5lcmF0aW9uLkh0bWxTY2VuYXJpb1BhZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS51dGlsLmxvZ2dlcnMudXRpbC5VdGlsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5TV1Q7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmN1c3RvbS5DTGFiZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmN1c3RvbS5TY3JvbGxlZENvbXBvc2l0ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLlNlbGVjdGlvbkFkYXB0ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5TZWxlY3Rpb25FdmVudDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZ3JhcGhpY3MuQ29sb3I7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmdyYXBoaWNzLlJHQjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QubGF5b3V0LkZpbGxMYXlvdXQ7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5Gb3JtQXR0YWNobWVudDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QubGF5b3V0LkZvcm1EYXRhOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5sYXlvdXQuRm9ybUxheW91dDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5CdXR0b247CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbnRyb2w7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuTGFiZWw7CisKKy8qKgorICogVGhpcyBjbGFzcyBwcmVzZW50cyAidmlld3MiIG9mIHRoZSBydW5uaW5nIHNpbXVsYXRpb25zLgorICovCitwdWJsaWMgY2xhc3MgTG9nZ2VyVmlld2VyIGV4dGVuZHMgVmlld2VyIGltcGxlbWVudHMgSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lciwKKwkJSVNpbXVsYXRpb25NYW5hZ2VyTGlzdGVuZXJTeW5jIHsKKworCS8qKgorCSAqIFRoaXMgaXMgdGhlIGNvbGxlY3Rpb24gb2YgSWRlbnRpZmlhYmxlcyB0byBkaXNwbGF5IChub2RlcyBmb3Igbm93KQorCSAqIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmpvYnMuc2ltdWxhdGlvbi5TaW11bGF0aW9ufXMgdGhhdCBzaG91bGQgYmUKKwkgKiBkaXNwbGF5ZWQuCisJICovCisJLy9wcml2YXRlIGZpbmFsIFNldDxJZGVudGlmaWFibGU+IGlkZW50aWZpYWJsZXNUb0Rpc3BsYXkgPSBuZXcgTGlua2VkSGFzaFNldDxJZGVudGlmaWFibGU+KCk7CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgTWFwPElTaW11bGF0aW9uLFNldDxJZGVudGlmaWFibGU+PiBpZGVudGlmaWFibGVzVG9EaXNwbGF5TWFwID0gbmV3IEhhc2hNYXA8SVNpbXVsYXRpb24sU2V0PElkZW50aWZpYWJsZT4+KCk7CisgICAgCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgQ29sbGVjdGlvbjxJU2ltdWxhdGlvbj4gc2ltdWxhdGlvbnNUb0xvZyA9IG5ldyBBcnJheUxpc3Q8SVNpbXVsYXRpb24+KCk7CisgICAgCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIERFRkFVTFRfSUQgPSAiZGF0YSI7CisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBTdHJpbmcgc2VwID0gRmlsZS5zZXBhcmF0b3I7CisJCisgICAgCisgICAgCisJLyoqCisJICogVGhpcyBpcyB0aGUge0BsaW5rIFNpbXVsYXRpb25NYW5hZ2VyfSB0aGF0IGlzIHRoZSBpbnB1dCB0byB0aGUgdmlld2VyLiBJdAorCSAqIG1haW50YWlucyBhIGNvbGxlY3Rpb24gb2YgYWN0aXZlCisJICoge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uam9icy5zaW11bGF0aW9uLlNpbXVsYXRpb259cyBpbiB0aGUgc3lzdGVtLgorCSAqIFRoaXMgdmlld2VyIGxpc3RlbnMgdG8gaXQgdG8gZGlzY292ZXIgd2hlbiBuZXcKKwkgKiB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5qb2JzLnNpbXVsYXRpb24uU2ltdWxhdGlvbn1zIGFyZSBjcmVhdGVkIGFuZAorCSAqIG9sZCBvbmVzIGRpc2FwcGVhci4KKwkgKiAKKwkgKiBAc2VlICNzaW11bGF0aW9uc0NoYW5nZWQoU2ltdWxhdGlvbk1hbmFnZXJFdmVudCkKKwkgKi8KKwlTaW11bGF0aW9uTWFuYWdlciBzaW11bGF0aW9uTWFuYWdlcjsKKworCS8qKgorCSAqIFRoZSA8Y29kZT5JZGVudGlmaWFibGU8L2NvZGU+IHRoYXQgd2FzIG1vc3QgcmVjZW50bHkgc2VsZWN0ZWQgYnkgYSB1c2VyCisJICogY2xpY2tpbmcgb24gb25lIG9mIHRoZSB7QGxpbmsgTWFwQ29udHJvbH1zLCBvciA8Y29kZT5udWxsPC9jb2RlPiBpZgorCSAqIG5vbmUgaGFzIGJlZW4gc2VsZWN0ZWQuCisJICovCisJcHJpdmF0ZSBJU2VsZWN0aW9uIHNlbGVjdGlvbiA9IG51bGw7CisKKwkvKioKKwkgKiBUaGlzIGlzIHRoZSB0b3AtbGV2ZWwgY29udHJvbCBvZiB0aGUgdmlld2VyLiBJdCBjb250YWlucyB0aGUKKwkgKiB7QGxpbmsgTWFwQ29udHJvbH1zIHRoYXQgZGlzcGxheSB0aGUgY3VycmVudCBzdGF0ZSBvZiB0aGUKKwkgKiB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5qb2JzLnNpbXVsYXRpb24uU2ltdWxhdGlvbn1zLgorCSAqLworCWZpbmFsIENvbXBvc2l0ZSBjb21wb3NpdGU7CisJCisJLyoqCisJICogVGhpcyBpcyBhIHRvcC1sZXZlbCBzY3JvbGxlZCBjb250YWluZXIgZm9yIHRoZSBjb250cm9sIG9mIHRoZSB2aWV3ZXIuIEl0IGNvbnRhaW5zIHRoZQorCSAqLworCVNjcm9sbGVkQ29tcG9zaXRlIHNjcm9sbGVkQ29tcG9zaXRlOworCQorCS8qKgorCSAqIHRoZSBvdXRlcm1vc3QgY29udGFpbmVyLgorCSAqLworCUNvbXBvc2l0ZSBvdXRlckNvbXBvc2l0ZTsKKwkKKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgV0lEVEggPSA0MDA7CisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IEhFSUdIVF9NSU4gPSAyNTA7CisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IEJVVFRPTl9IRUlHSFQgPSAyNTsKKwkKKwkvKioKKwkgKiBidXR0b24gdG8gYWRkIEFsbCBsb2NhdGlvbnMgaW4gYSBydW5uaW5nIHNpbXVsYXRpb24KKwkgKi8KKwlwcm90ZWN0ZWQgQnV0dG9uIGxvZ2dlck9uQnV0dG9uID0gbnVsbDsKKwkvKioKKwkgKiBidXR0b24gdG8gcmVtb3ZlIEFsbCBsb2NhdGlvbnMgaW4gYSBydW5uaW5nIHNpbXVsYXRpb24KKwkgKi8KKwlwcm90ZWN0ZWQgQnV0dG9uIGxvZ2dlck9mZkJ1dHRvbiA9IG51bGw7CisJCisJCisJCisJCisJLyoqCisJICogYnV0dG9uIHRvIGFkZCBBbGwgbG9jYXRpb25zIGluIGEgcnVubmluZyBzaW11bGF0aW9uCisJICovCisJcHJvdGVjdGVkIEJ1dHRvbiBjc3ZTdW1tYXJ5T25CdXR0b24gPSBudWxsOworCS8qKgorCSAqIGJ1dHRvbiB0byByZW1vdmUgQWxsIGxvY2F0aW9ucyBpbiBhIHJ1bm5pbmcgc2ltdWxhdGlvbgorCSAqLworCXByb3RlY3RlZCBCdXR0b24gY3N2U3VtbWFyeU9mZkJ1dHRvbiA9IG51bGw7CisJCisJCisJCisJLyoqCisJICogYnV0dG9uIHRvIGFkZCBBbGwgbG9jYXRpb25zIGluIGEgcnVubmluZyBzaW11bGF0aW9uCisJICovCisJcHJvdGVjdGVkIEJ1dHRvbiBodG1sU3VtbWFyeU9uQnV0dG9uID0gbnVsbDsKKwkvKioKKwkgKiBidXR0b24gdG8gcmVtb3ZlIEFsbCBsb2NhdGlvbnMgaW4gYSBydW5uaW5nIHNpbXVsYXRpb24KKwkgKi8KKwlwcm90ZWN0ZWQgQnV0dG9uIGh0bWxTdW1tYXJ5T2ZmQnV0dG9uID0gbnVsbDsKKwkKKwlwcm90ZWN0ZWQgc3RhdGljIENvbG9yIG9uQ29sb3IgPSBudWxsOworCXByb3RlY3RlZCBzdGF0aWMgQ29sb3Igb2ZmQ29sb3IgPSBudWxsOworCQorCQorCQorCS8qKgorCSAqIAorCSAqLworCXByb3RlY3RlZCBzdGF0aWMgQ0xhYmVsIGxvZ2dlclN0YXR1c0xhYmVsID0gbnVsbDsKKwkKKwkKKwkvKioKKwkgKiAKKwkgKi8KKwlwcm90ZWN0ZWQgc3RhdGljIENMYWJlbCBodG1sU3RhdHVzTGFiZWwgPSBudWxsOworCQorCS8qKgorCSAqIAorCSAqLworCXByb3RlY3RlZCBzdGF0aWMgQ0xhYmVsIGNzdlN0YXR1c0xhYmVsID0gbnVsbDsKKwkKKwkvKioKKwkgKiByZW1lbWJlciB0aGUgc3RhdGUgb2YgdGhlIGxvZ2dlcgorCSAqLworCXByb3RlY3RlZCBzdGF0aWMgYm9vbGVhbiBsb2dnaW5nT24gPSBmYWxzZTsKKwkKKwkKKwkvKioKKwkgKiByZW1lbWJlciB0aGUgc3RhdGUgb2YgdGhlIGh0bWwgc3VtbWFyeQorCSAqLworCXByb3RlY3RlZCBzdGF0aWMgYm9vbGVhbiBodG1sU3VtbWFyeU9uID0gZmFsc2U7CisJCisJCisJLyoqCisJICogcmVtZW1iZXIgdGhlIHN0YXRlIG9mIHRoZSBjc3YgcGFyYW1ldGVyIHN1bW1hcnkKKwkgKi8KKwlwcm90ZWN0ZWQgc3RhdGljIGJvb2xlYW4gY3N2UGFyYW1ldGVyU3VtbWFyeU9uID0gZmFsc2U7CisJCisJLyoqCisJICogYnV0dG9uIHRleHQKKwkgKi8KKwlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIFN0cmluZyBPTl9URVhUID0gIk9OIjsKKwkKKwkvKioKKwkgKiBidXR0b24gdGV4dAorCSAqLworCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgU3RyaW5nIE9GRl9URVhUID0gIk9GRiI7CisJCisJLyoqCisJICogc3RhdHVzIHRleHQKKwkgKi8KKwlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIFN0cmluZyBNT05JVE9SX09OX1RFWFQgPSAiTG9nIFNpbXVsYXRpb24gRGF0YSBPTiI7CisJCisJLyoqCisJICogc3RhdHVzIHRleHQKKwkgKi8KKwlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIFN0cmluZyBNT05JVE9SX09GRl9URVhUID0gIkxvZyBTaW11bGF0aW9uIERhdGEgT0ZGIjsKKwkKKworCS8qKgorCSAqIHN0YXR1cyB0ZXh0CisJICovCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBTdHJpbmcgSFRNTF9PTl9URVhUID0gIlNjZW5hcmlvIFN1bW1hcnkgKGh0bWwpIE9OIjsKKwkKKwkvKioKKwkgKiBzdGF0dXMgdGV4dAorCSAqLworCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgU3RyaW5nIEhUTUxfT0ZGX1RFWFQgPSAiU2NlbmFyaW8gU3VtbWFyeSAoaHRtbCkgT0ZGIjsKKwkKKworCS8qKgorCSAqIHN0YXR1cyB0ZXh0CisJICovCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBTdHJpbmcgQ1NWX09OX1RFWFQgPSAiUGFyYW1ldGVyIFN1bW1hcnkgT04iOworCQorCS8qKgorCSAqIHN0YXR1cyB0ZXh0CisJICovCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBTdHJpbmcgQ1NWX09GRl9URVhUID0gIlBhcmFtZXRlciBTdW1tYXJ5IE9GRiI7CisKKworCS8qKgorCSAqIHRoZSB1c2VycyBwcmVmZXJlbmNlcyBhcmUgc3RvcmVkIGluIERpYWxvZ1NldHRpbmdzCisJICovCisJcHJpdmF0ZSBEaWFsb2dTZXR0aW5ncyBtYXN0ZXJTZXR0aW5ncyA9IG51bGw7CisKKwkvKioKKwkgKiBTZXQgb2YgUHJlZmVycmVkIExvY2F0aW9ucyB0byBtb25pdG9yIHJlYWQgZnJvbSB0aGUgRGlhbG9nU2V0dGluZ3MKKwkgKi8KKwlwcml2YXRlIGZpbmFsIFNldCBtb25pdG9yU2V0ID0gbmV3IEhhc2hTZXQoKTsKKworCS8qKgorCSAqIHJvb3Qga2V5IGVsZW1lbnQgZm9yIHRoZSBEaWFsb2dTZXR0aW5ncyB4bWwgZmlsZQorCSAqLworCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBST09UX0tFWSA9ICJyb290IjsKKworCS8qKgorCSAqIENvbnN0YW50cyBmb3Igc2F2aW5nIFJlcG9ydFZpZXdQcmVmZXJlbmNlcworCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFJFUE9SVFZJRVdQUkVGRVJFTkNFU19GSUxFTkFNRSA9ICJQcmVmZXJlbmNlcy50eHQiOworCQorCS8qKgorCSAqIGRpdmlkZXMgdGhlIGV4cGVyaW1lbnRzIHN1bW1hcnkgZnJvbSB0aGUgc3BlY2lmaWMgIG1vZGlmaWNhdG9pbiBsaXN0IGluIHRoZSBoZWFkZXIKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBNT0RJRklDQVRJT05TX1RFWFQgPSAiQCA9PSAgTW9kaWZpY2F0aW9ucyA9PSI7CisKKwkvKioKKwkgKiBDb25zdGFudHMgbm9kZSBub3RlIGZvdW5kIGVycm9yCisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgTk9ERV9OT1RfRk9VTkQgPSAiTk9ERU5PVEZPVU5EIjsKKworCS8qKgorCSAqIFRPRE8gSkZLCisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgTE9DQVRJT05fUFJFRkVSRU5DRV9LRVkgPSAibG9jYXRpb24uaWRzIjsKKworCXByaXZhdGUgc3RhdGljIGZpbmFsIElQYXRoIFBBVEggPSBBY3RpdmF0b3IuZ2V0RGVmYXVsdCgpLmdldFN0YXRlTG9jYXRpb24oKTsKKwkKKwkvKioKKwkgKiBUaGUgbG9nZ2VyIGhlYWRlcnMKKwkgKi8KKwlzdGF0aWMgTGFiZWwgbG9nZ2VyTW9kZUhlYWRlcjsKKwlzdGF0aWMgTGFiZWwgbG9nZ2VyU2NlbmFyaW9IZWFkZXI7CisJc3RhdGljIExhYmVsIGxvZ2dlckRpc2Vhc2VIZWFkZXI7CisJCisJCisKKwkvKioKKwkgKiBUaGlzIGZhY3RvcnkgaXMgdXNlZCB0byBjcmVhdGUgaW5zdGFuY2VzIG9mIHtAbGluayBMb2dnZXJDb250cm9sfSBpbiB0aGUKKwkgKiBtZXRob2Qge0BsaW5rICNwb3B1bGF0ZVZpZXcoKX0KKwkgKi8KKwlwcml2YXRlIGZpbmFsIExvZ2dlckNvbnRyb2xGYWN0b3J5IGxjZjsKKworCS8qKgorCSAqIEBwYXJhbSBwYXJlbnQKKwkgKiAgICAgICAgICAgIHRoZSBTV1QgcGFyZW50IG9mIHRoZSBjb250cm9sIHRoYXQgbWFrZXMgdXAgdGhlIHZpZXdlcgorCSAqIEBwYXJhbSBsY2YKKwkgKiAgICAgICAgICAgIHRoZSBmYWN0b3J5IHRoYXQgY3JlYXRlcyBpbnN0YW5jZSBvZiB7QGxpbmsgTG9nZ2VyQ29udHJvbH0KKwkgKi8KKwlwdWJsaWMgTG9nZ2VyVmlld2VyKGZpbmFsIENvbXBvc2l0ZSBwYXJlbnQsIGZpbmFsIExvZ2dlckNvbnRyb2xGYWN0b3J5IGxjZikgeworICAgICAgICAKKyAgICAgICAKKwkJb3V0ZXJDb21wb3NpdGUgPSBuZXcgQ29tcG9zaXRlKHBhcmVudCwgU1dULkJPUkRFUik7CisJCWZpbmFsIEZvcm1EYXRhIG91dGVyRm9ybURhdGEgPSBuZXcgRm9ybURhdGEoKTsKKwkJRm9ybUxheW91dCBvdXRlckxheW91dCA9IG5ldyBGb3JtTGF5b3V0KCk7CisJCW91dGVyTGF5b3V0Lm1hcmdpbkhlaWdodCA9IDU7CisJCW91dGVyTGF5b3V0Lm1hcmdpbldpZHRoID0gNTsKKwkJb3V0ZXJDb21wb3NpdGUuc2V0TGF5b3V0KG91dGVyTGF5b3V0KTsKKwkJb3V0ZXJDb21wb3NpdGUuc2V0TGF5b3V0RGF0YShvdXRlckZvcm1EYXRhKTsKKwkJCisJCS8vIHRvcCBjb21wb3NpdGUgaG9sZHMgdGhlIGJ1dHRvbnMKKwkJLy8KKwkJQ29tcG9zaXRlIHRvcCA9IGFkZEFsbEFjdGlvbkJ1dHRvbnMob3V0ZXJDb21wb3NpdGUpOwkKKwkJLy8KKwkJZmluYWwgRm9ybURhdGEgdG9wRm9ybURhdGEgPSBuZXcgRm9ybURhdGEoKTsKKwkJdG9wLnNldExheW91dERhdGEodG9wRm9ybURhdGEpOworCQl0b3Auc2V0U2l6ZShTV1QuREVGQVVMVCwgQlVUVE9OX0hFSUdIVCk7CisJCXRvcEZvcm1EYXRhLmxlZnQgICA9IG5ldyBGb3JtQXR0YWNobWVudCgwLCAwKTsKKwkJdG9wRm9ybURhdGEucmlnaHQgID0gbmV3IEZvcm1BdHRhY2htZW50KDEwMCwgMCk7CisJCS8vdG9wRm9ybURhdGEudG9wICAgPSBuZXcgRm9ybUF0dGFjaG1lbnQoMCwgMCk7CisJCS8vZG9uJ3Qgc2V0IHRoZSBib3R0b20gLSBpdCdzIGZpeGVkCisJCQorCQkvLyBib3R0b20gY29tcG9zaXRlIGhvbGRzIHRoZSBzY3JvbGxlcgorCQlDb21wb3NpdGUgYm90dG9tID0gbmV3IENvbXBvc2l0ZShvdXRlckNvbXBvc2l0ZSwgU1dULk5PTkUpOworCQlib3R0b20uc2V0TGF5b3V0KG5ldyBGaWxsTGF5b3V0KFNXVC5WRVJUSUNBTCkpOworCQlmaW5hbCBGb3JtRGF0YSBib3R0b21Gb3JtRGF0YSA9IG5ldyBGb3JtRGF0YSgpOworCQlib3R0b20uc2V0TGF5b3V0RGF0YShib3R0b21Gb3JtRGF0YSk7CisJCWJvdHRvbUZvcm1EYXRhLmxlZnQgICA9IG5ldyBGb3JtQXR0YWNobWVudCgwLCAwKTsKKwkJYm90dG9tRm9ybURhdGEucmlnaHQgID0gbmV3IEZvcm1BdHRhY2htZW50KDEwMCwgMCk7CisJCWJvdHRvbUZvcm1EYXRhLnRvcCAgID0gbmV3IEZvcm1BdHRhY2htZW50KHRvcCwgMCwgU1dULkJPVFRPTSk7CisJCWJvdHRvbUZvcm1EYXRhLmJvdHRvbSAgPSBuZXcgRm9ybUF0dGFjaG1lbnQoMTAwLCAwKTsKKwkJCisJCUNvbG9yIGNvbG9yID0gcGFyZW50LmdldERpc3BsYXkoKS5nZXRTeXN0ZW1Db2xvcihTV1QuQ09MT1JfUkVEKTsKKwkJYm90dG9tLnNldEJhY2tncm91bmQoY29sb3IpOworCQkKKwkgICAgLy8gc2Nyb2xsZXIKKwkJc2Nyb2xsZWRDb21wb3NpdGUgPSBuZXcgU2Nyb2xsZWRDb21wb3NpdGUoYm90dG9tLCAoU1dULkJPUkRFUiB8IFNXVC5IX1NDUk9MTHwgU1dULlZfU0NST0xMKSk7CisJCWZpbmFsIEZpbGxMYXlvdXQgc2Nyb2xsZWRMYXlvdXQgPSBuZXcgRmlsbExheW91dChTV1QuVkVSVElDQUwpOworCQlzY3JvbGxlZENvbXBvc2l0ZS5zZXRMYXlvdXQoc2Nyb2xsZWRMYXlvdXQpOworCQlzY3JvbGxlZENvbXBvc2l0ZS5zZXRFeHBhbmRIb3Jpem9udGFsKHRydWUpOworCQorCQlzY3JvbGxlZENvbXBvc2l0ZS5zZXRFeHBhbmRWZXJ0aWNhbChmYWxzZSk7CisJCisJCXNjcm9sbGVkQ29tcG9zaXRlLnNldE1pblNpemUoU1dULkRFRkFVTFQsSEVJR0hUX01JTik7CisJCXNjcm9sbGVkQ29tcG9zaXRlLnNldFNpemUoU1dULkRFRkFVTFQsSEVJR0hUX01JTik7CisJCQorCQkvLyBjb21wb3NpdGUgaG9sZHMgYWxsIHRoZSBtb25pdG9yIG9iamVjdHMgc3RhY2tlZCB2ZXJ0aWNhbGx5CisJCWNvbXBvc2l0ZSA9IG5ldyBDb21wb3NpdGUoc2Nyb2xsZWRDb21wb3NpdGUsIFNXVC5OT05FKTsKKwkJZmluYWwgRmlsbExheW91dCBjb21wb3NpdGVMYXlvdXQgPSBuZXcgRmlsbExheW91dChTV1QuVkVSVElDQUwpOworCQljb21wb3NpdGUuc2V0TGF5b3V0KGNvbXBvc2l0ZUxheW91dCk7CisJCS8vIGFkZCB0byB0aGUgc2Nyb2xsZXIKKwkJc2Nyb2xsZWRDb21wb3NpdGUuc2V0Q29udGVudChjb21wb3NpdGUpOworCQkKKwkJLy8gUmVtZW1iZXIgdGhlIGZhY3RvcnkgdGhhdCB3ZSdsbCB1c2UgdG8gY3JlYXRlIGluc3RhbmNlcyBvZgorCQkvLyBMb2dnZXJDb250cm9sCisJCXRoaXMubGNmID0gbGNmOworCQlyZWZyZXNoKCk7CisJCWNvbXBvc2l0ZS5wYWNrKCk7CisJCUxvZ1dyaXRlci5yZXNldCgpOworCQorCX0gLy8gTG9nZ2VyVmlld2VyCisKKwkvKioKKwkgKiAgYWRkIHRoZSByZW1vdmVBbGwgYW5kIGFkZEFsbCBBY3Rpb25CdXR0b25zCisJICovCisJcHJpdmF0ZSBDb21wb3NpdGUgYWRkQWxsQWN0aW9uQnV0dG9ucyhDb21wb3NpdGUgcGFyZW50KSB7CisJCisJCUNvbXBvc2l0ZSB0b3AgPSBuZXcgQ29tcG9zaXRlKHBhcmVudCwgU1dULk5PTkUpOworCQkvL0ZpbGxMYXlvdXQgZmlsbExheW91dCA9IG5ldyBGaWxsTGF5b3V0KFNXVC5IT1JJWk9OVEFMKTsKKwkJCisJCUZvcm1MYXlvdXQgdG9wTGF5b3V0ID0gbmV3IEZvcm1MYXlvdXQoKTsKKwkJLy9GaWxsTGF5b3V0IHRvcExheW91dCA9IG5ldyBGaWxsTGF5b3V0KFNXVC5IT1JJWk9OVEFMKTsKKwkJdG9wTGF5b3V0Lm1hcmdpbkhlaWdodCA9IDU7CisJCXRvcExheW91dC5tYXJnaW5XaWR0aCA9IDU7CisJICAgIHRvcC5zZXRMYXlvdXQodG9wTGF5b3V0KTsKKwkgICAgdG9wLnNldFNpemUoU1dULkRFRkFVTFQsIEJVVFRPTl9IRUlHSFQpOworCSAgICAvL0NvbG9yIGNvbG9yID0gcGFyZW50LmdldERpc3BsYXkoKS5nZXRTeXN0ZW1Db2xvcihTV1QuQ09MT1JfREFSS19HUkFZKTsKKwkgICAgZmluYWwgQ29sb3IgYmdDb2xvciA9IG5ldyBDb2xvcihwYXJlbnQuZ2V0RGlzcGxheSgpLCBuZXcgUkdCKDE3MCwgMTcwLCAxOTApKTsKKwkJb25Db2xvciA9IHBhcmVudC5nZXREaXNwbGF5KCkuZ2V0U3lzdGVtQ29sb3IoU1dULkNPTE9SX0dSRUVOKTsKKwkJb2ZmQ29sb3IgPSBwYXJlbnQuZ2V0RGlzcGxheSgpLmdldFN5c3RlbUNvbG9yKFNXVC5DT0xPUl9EQVJLX1JFRCk7CisJICAgIHRvcC5zZXRCYWNrZ3JvdW5kKGJnQ29sb3IpOworCSAgICAKKwkgICAgaW50IGJ1dHRvbldpZHRoID0gKGludCkoMC4zICogV0lEVEgpOworCSAgICBpbnQgdGl0bGVXaWR0aCA9IChpbnQpKDAuNCAqIFdJRFRIKTsKKwkgICAgCisJICAgIC8vIExvZ2dlciBzdGF0dXMgbGlnaHQKKwkgICAgbG9nZ2VyU3RhdHVzTGFiZWwgPSBuZXcgQ0xhYmVsKHRvcCwgIFNXVC5CT1JERVIpOy8vCWRvIGEgc3RhdHVzTGFiZWwKKwkJbG9nZ2VyU3RhdHVzTGFiZWwuc2V0VGV4dChNT05JVE9SX09GRl9URVhUKTsKKwkJbG9nZ2VyU3RhdHVzTGFiZWwuc2V0QWxpZ25tZW50KFNXVC5DRU5URVIpOworCQlsb2dnZXJTdGF0dXNMYWJlbC5zZXRTaXplKHRpdGxlV2lkdGgsQlVUVE9OX0hFSUdIVCk7CisJCWxvZ2dlclN0YXR1c0xhYmVsLnNldFRleHQoTU9OSVRPUl9PRkZfVEVYVCk7CisJCWxvZ2dlclN0YXR1c0xhYmVsLnNldEJhY2tncm91bmQob2ZmQ29sb3IpOworCQkKKwkJCisJCS8vIExvZ2dlciBCVVRUT05TCisJICAgIGxvZ2dlck9uQnV0dG9uICAgID0gbmV3IEJ1dHRvbih0b3AsIFNXVC5UT0dHTEUpOworCSAgICBsb2dnZXJPZmZCdXR0b24gPSBuZXcgQnV0dG9uKHRvcCwgU1dULlRPR0dMRSk7CisJCWxvZ2dlck9uQnV0dG9uLnNldFRleHQoT05fVEVYVCk7CisJCWxvZ2dlck9mZkJ1dHRvbi5zZXRUZXh0KE9GRl9URVhUKTsKKwkJbG9nZ2VyT25CdXR0b24uc2V0U2l6ZShidXR0b25XaWR0aCxCVVRUT05fSEVJR0hUKTsKKwkJbG9nZ2VyT2ZmQnV0dG9uLnNldFNpemUoYnV0dG9uV2lkdGgsQlVUVE9OX0hFSUdIVCk7CisJCS8vIGluaXQgdGhlIHRvZ2dsZSBwb3NpdGlvbiAtIG9mZiBhdCBzdGFydAorCQlsb2dnZXJPbkJ1dHRvbi5zZXRTZWxlY3Rpb24oZmFsc2UpOworCQlsb2dnZXJPZmZCdXR0b24uc2V0U2VsZWN0aW9uKHRydWUpOy8vIG9mZiBhdCBzdGFydAorCQkKKwkJCisJCQorCQkvLyBIVE1MIHN0YXR1cyBsaWdodAorCSAgICBodG1sU3RhdHVzTGFiZWwgPSBuZXcgQ0xhYmVsKHRvcCwgIFNXVC5CT1JERVIpOy8vCWRvIGEgc3RhdHVzTGFiZWwKKwkJaHRtbFN0YXR1c0xhYmVsLnNldFRleHQoSFRNTF9PRkZfVEVYVCk7CisJCWh0bWxTdGF0dXNMYWJlbC5zZXRBbGlnbm1lbnQoU1dULkNFTlRFUik7CisJCWh0bWxTdGF0dXNMYWJlbC5zZXRTaXplKHRpdGxlV2lkdGgsQlVUVE9OX0hFSUdIVCk7CisJCWh0bWxTdGF0dXNMYWJlbC5zZXRUZXh0KEhUTUxfT0ZGX1RFWFQpOworCQlodG1sU3RhdHVzTGFiZWwuc2V0QmFja2dyb3VuZChvZmZDb2xvcik7CisJCS8vIGh0bWwgc3VtbWFyeSBCVVRUT05TCisJCWh0bWxTdW1tYXJ5T25CdXR0b24gICAgPSBuZXcgQnV0dG9uKHRvcCwgU1dULlRPR0dMRSk7CisJICAgIGh0bWxTdW1tYXJ5T2ZmQnV0dG9uID0gbmV3IEJ1dHRvbih0b3AsIFNXVC5UT0dHTEUpOworCQlodG1sU3VtbWFyeU9uQnV0dG9uLnNldFRleHQoT05fVEVYVCk7CisJCWh0bWxTdW1tYXJ5T2ZmQnV0dG9uLnNldFRleHQoT0ZGX1RFWFQpOworCQlodG1sU3VtbWFyeU9uQnV0dG9uLnNldFNpemUoYnV0dG9uV2lkdGgsQlVUVE9OX0hFSUdIVCk7CisJCWh0bWxTdW1tYXJ5T2ZmQnV0dG9uLnNldFNpemUoYnV0dG9uV2lkdGgsQlVUVE9OX0hFSUdIVCk7CisJCS8vIGluaXQgdGhlIHRvZ2dsZSBwb3NpdGlvbiAtIG9mZiBhdCBzdGFydAorCQlodG1sU3VtbWFyeU9uQnV0dG9uLnNldFNlbGVjdGlvbihmYWxzZSk7CisJCWh0bWxTdW1tYXJ5T2ZmQnV0dG9uLnNldFNlbGVjdGlvbih0cnVlKTsvLyBvZmYgYXQgc3RhcnQKKwkJCisKKwkJCisJCQorCQkvLyBjc3Ygc3RhdHVzIGxpZ2h0CisJICAgIGNzdlN0YXR1c0xhYmVsID0gbmV3IENMYWJlbCh0b3AsICBTV1QuQk9SREVSKTsvLwlkbyBhIHN0YXR1c0xhYmVsCisJCWNzdlN0YXR1c0xhYmVsLnNldFRleHQoQ1NWX09GRl9URVhUKTsKKwkJY3N2U3RhdHVzTGFiZWwuc2V0QWxpZ25tZW50KFNXVC5DRU5URVIpOworCQljc3ZTdGF0dXNMYWJlbC5zZXRTaXplKHRpdGxlV2lkdGgsQlVUVE9OX0hFSUdIVCk7CisJCWNzdlN0YXR1c0xhYmVsLnNldFRleHQoQ1NWX09GRl9URVhUKTsKKwkJY3N2U3RhdHVzTGFiZWwuc2V0QmFja2dyb3VuZChvZmZDb2xvcik7CisJCS8vIGNzdiBzdW1tZXJ5IEJVVFRPTlMKKwkgICAgY3N2U3VtbWFyeU9uQnV0dG9uICAgID0gbmV3IEJ1dHRvbih0b3AsIFNXVC5UT0dHTEUpOworCSAgICBjc3ZTdW1tYXJ5T2ZmQnV0dG9uID0gbmV3IEJ1dHRvbih0b3AsIFNXVC5UT0dHTEUpOworCQljc3ZTdW1tYXJ5T25CdXR0b24uc2V0VGV4dChPTl9URVhUKTsKKwkJY3N2U3VtbWFyeU9mZkJ1dHRvbi5zZXRUZXh0KE9GRl9URVhUKTsKKwkJY3N2U3VtbWFyeU9uQnV0dG9uLnNldFNpemUoYnV0dG9uV2lkdGgsQlVUVE9OX0hFSUdIVCk7CisJCWNzdlN1bW1hcnlPZmZCdXR0b24uc2V0U2l6ZShidXR0b25XaWR0aCxCVVRUT05fSEVJR0hUKTsKKwkJLy8gaW5pdCB0aGUgdG9nZ2xlIHBvc2l0aW9uIC0gb2ZmIGF0IHN0YXJ0CisJCWNzdlN1bW1hcnlPbkJ1dHRvbi5zZXRTZWxlY3Rpb24oZmFsc2UpOworCQkvLyBpbml0aWFsbHkgZGlzc2FibGUgaXQuIAorCQljc3ZTdW1tYXJ5T25CdXR0b24uc2V0RW5hYmxlZChmYWxzZSk7CisJCWNzdlN1bW1hcnlPZmZCdXR0b24uc2V0U2VsZWN0aW9uKHRydWUpOy8vIG9mZiBhdCBzdGFydAorCQkKKwkJCisJCQorCQkKKwkJLy8gcmVtb3ZlIGV2ZXJ5dGhpbmcKKwkJLy8gVE9ETyBwcm9iYWJseSB3YW50IGEgZGlhbG9nIHRvIGNvbmZpcm0gdGhpcyBhY3Rpb24uLi4KKwkJbG9nZ2VyT2ZmQnV0dG9uLmFkZFNlbGVjdGlvbkxpc3RlbmVyKG5ldyBTZWxlY3Rpb25BZGFwdGVyKCkgeworCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgdm9pZCB3aWRnZXRTZWxlY3RlZChAU3VwcHJlc3NXYXJuaW5ncygidW51c2VkIikKKwkJCWZpbmFsIFNlbGVjdGlvbkV2ZW50IGUpIHsKKwkJCQlkaXNhYmxlTG9nZ2luZygpOworCQkJfQorCQl9KTsKKwkJCisJCS8vIGFkZCBldmVyeXRoaW5nCisJCS8vIFRPRE8gcHJvYmFibHkgd2FudCBhIGRpYWxvZyB0byBjb25maXJtIHRoaXMgYWN0aW9uLi4uCisJCWxvZ2dlck9uQnV0dG9uLmFkZFNlbGVjdGlvbkxpc3RlbmVyKG5ldyBTZWxlY3Rpb25BZGFwdGVyKCkgeworCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgdm9pZCB3aWRnZXRTZWxlY3RlZChAU3VwcHJlc3NXYXJuaW5ncygidW51c2VkIikKKwkJCWZpbmFsIFNlbGVjdGlvbkV2ZW50IGUpIHsKKwkJCQlJU2ltdWxhdGlvbiBbXSBzaW11bGF0aW9ucyA9IG51bGw7CisJCQkJTGlzdDxJU2ltdWxhdGlvbj4gYWN0aXZlc2ltcyA9IHNpbXVsYXRpb25NYW5hZ2VyLmdldEFjdGl2ZVNpbXVsYXRpb25zKCk7CisJCQkJaWYoYWN0aXZlc2ltcyAhPSBudWxsKSB7CisJCQkJCXNpbXVsYXRpb25zID0gbmV3IElTaW11bGF0aW9uIFthY3RpdmVzaW1zLnNpemUoKV07CisJCQkJCWZvcihpbnQgaT0wO2k8YWN0aXZlc2ltcy5zaXplKCk7KytpKSBzaW11bGF0aW9uc1tpXSA9IGFjdGl2ZXNpbXMuZ2V0KGkpOworCQkJCX0KKwkJCQllbmFibGVMb2dnaW5nKHNpbXVsYXRpb25zKTsKKwkJCX0KKwkJfSk7CisJCQorCQkvLyBDU1Ygc3VtbWFyeQorCQkvLyBUT0RPIHByb2JhYmx5IHdhbnQgYSBkaWFsb2cgdG8gY29uZmlybSB0aGlzIGFjdGlvbi4uLgorCQljc3ZTdW1tYXJ5T2ZmQnV0dG9uLmFkZFNlbGVjdGlvbkxpc3RlbmVyKG5ldyBTZWxlY3Rpb25BZGFwdGVyKCkgeworCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgdm9pZCB3aWRnZXRTZWxlY3RlZChAU3VwcHJlc3NXYXJuaW5ncygidW51c2VkIikKKwkJCWZpbmFsIFNlbGVjdGlvbkV2ZW50IGUpIHsKKwkJCQlkaXNhYmxlQ3N2U3VtbWFyeSgpOworCQkJfQorCQl9KTsKKwkJCisJCS8vIGFkZCBldmVyeXRoaW5nCisJCS8vIFRPRE8gcHJvYmFibHkgd2FudCBhIGRpYWxvZyB0byBjb25maXJtIHRoaXMgYWN0aW9uLi4uCisJCWNzdlN1bW1hcnlPbkJ1dHRvbi5hZGRTZWxlY3Rpb25MaXN0ZW5lcihuZXcgU2VsZWN0aW9uQWRhcHRlcigpIHsKKwkJCUBPdmVycmlkZQorCQkJcHVibGljIHZvaWQgd2lkZ2V0U2VsZWN0ZWQoQFN1cHByZXNzV2FybmluZ3MoInVudXNlZCIpCisJCQlmaW5hbCBTZWxlY3Rpb25FdmVudCBlKSB7CisJCQkJSVNpbXVsYXRpb24gW10gc2ltdWxhdGlvbnMgPSBudWxsOworCQkJCUxpc3Q8SVNpbXVsYXRpb24+IGFjdGl2ZXNpbXMgPSBzaW11bGF0aW9uTWFuYWdlci5nZXRBY3RpdmVTaW11bGF0aW9ucygpOworCQkJCWlmKGFjdGl2ZXNpbXMgIT0gbnVsbCkgeworCQkJCQlzaW11bGF0aW9ucyA9IG5ldyBJU2ltdWxhdGlvbiBbYWN0aXZlc2ltcy5zaXplKCldOworCQkJCQlmb3IoaW50IGk9MDtpPGFjdGl2ZXNpbXMuc2l6ZSgpOysraSkgc2ltdWxhdGlvbnNbaV0gPSBhY3RpdmVzaW1zLmdldChpKTsKKwkJCQl9CisJCQkJZW5hYmxlQ3N2U3VtbWFyeShzaW11bGF0aW9ucyk7CisJCQl9CisJCX0pOworCQkKKwkJLy8gSFRNTCBzdW1tYXJ5CisJCS8vIFRPRE8gcHJvYmFibHkgd2FudCBhIGRpYWxvZyB0byBjb25maXJtIHRoaXMgYWN0aW9uLi4uCisJCWh0bWxTdW1tYXJ5T2ZmQnV0dG9uLmFkZFNlbGVjdGlvbkxpc3RlbmVyKG5ldyBTZWxlY3Rpb25BZGFwdGVyKCkgeworCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgdm9pZCB3aWRnZXRTZWxlY3RlZChAU3VwcHJlc3NXYXJuaW5ncygidW51c2VkIikKKwkJCWZpbmFsIFNlbGVjdGlvbkV2ZW50IGUpIHsKKwkJCQlkaXNhYmxlSHRtbFN1bW1hcnkoKTsKKwkJCX0KKwkJfSk7CisJCQorCQkvLyBhZGQgZXZlcnl0aGluZworCQkvLyBUT0RPIHByb2JhYmx5IHdhbnQgYSBkaWFsb2cgdG8gY29uZmlybSB0aGlzIGFjdGlvbi4uLgorCQlodG1sU3VtbWFyeU9uQnV0dG9uLmFkZFNlbGVjdGlvbkxpc3RlbmVyKG5ldyBTZWxlY3Rpb25BZGFwdGVyKCkgeworCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgdm9pZCB3aWRnZXRTZWxlY3RlZChAU3VwcHJlc3NXYXJuaW5ncygidW51c2VkIikKKwkJCWZpbmFsIFNlbGVjdGlvbkV2ZW50IGUpIHsKKwkJCQlJU2ltdWxhdGlvbiBbXSBzaW11bGF0aW9ucyA9IG51bGw7CisJCQkJTGlzdDxJU2ltdWxhdGlvbj4gYWN0aXZlc2ltcyA9IHNpbXVsYXRpb25NYW5hZ2VyLmdldEFjdGl2ZVNpbXVsYXRpb25zKCk7CisJCQkJaWYoYWN0aXZlc2ltcyAhPSBudWxsKSB7CisJCQkJCXNpbXVsYXRpb25zID0gbmV3IElTaW11bGF0aW9uIFthY3RpdmVzaW1zLnNpemUoKV07CisJCQkJCWZvcihpbnQgaT0wO2k8YWN0aXZlc2ltcy5zaXplKCk7KytpKSBzaW11bGF0aW9uc1tpXSA9IGFjdGl2ZXNpbXMuZ2V0KGkpOworCQkJCX0KKwkJCQllbmFibGVIdG1sU3VtbWFyeShzaW11bGF0aW9ucyk7CisJCQl9CisJCX0pOworCQkKKwkJCisJCS8vIGxvZ2dlciBzdGF0dXNMYWJlbCBGb3JtCisJCWZpbmFsIEZvcm1EYXRhIHN0YXR1c0xhYmVsRm9ybURhdGEgPSBuZXcgRm9ybURhdGEoKTsKKwkJbG9nZ2VyU3RhdHVzTGFiZWwuc2V0TGF5b3V0RGF0YShzdGF0dXNMYWJlbEZvcm1EYXRhKTsKKwkJc3RhdHVzTGFiZWxGb3JtRGF0YS5sZWZ0ICA9IG5ldyBGb3JtQXR0YWNobWVudCgwLCAwKTsKKwkJc3RhdHVzTGFiZWxGb3JtRGF0YS5yaWdodCA9IG5ldyBGb3JtQXR0YWNobWVudCg0MCwgMCk7CisJCXN0YXR1c0xhYmVsRm9ybURhdGEudG9wICAgPSBuZXcgRm9ybUF0dGFjaG1lbnQoMCwgMCk7CisJCXN0YXR1c0xhYmVsRm9ybURhdGEuYm90dG9tICAgPSBuZXcgRm9ybUF0dGFjaG1lbnQoMCwgMjUpOworCQl0b3Auc2V0TGF5b3V0RGF0YShzdGF0dXNMYWJlbEZvcm1EYXRhKTsKKwkJCisJCS8vIExvZ2dlciBCdXR0b24gRm9ybQorCSAgICBmaW5hbCBGb3JtRGF0YSBsb2dnZXJPbkJ1dHRvbkZvcm1EYXRhID0gbmV3IEZvcm1EYXRhKCk7CisJICAgIGxvZ2dlck9uQnV0dG9uRm9ybURhdGEubGVmdCAgPSBuZXcgRm9ybUF0dGFjaG1lbnQoNDAsIDApOworCSAgICBsb2dnZXJPbkJ1dHRvbkZvcm1EYXRhLnJpZ2h0ID0gbmV3IEZvcm1BdHRhY2htZW50KDcwLCAwKTsKKwkgICAgbG9nZ2VyT25CdXR0b25Gb3JtRGF0YS50b3AgICA9IG5ldyBGb3JtQXR0YWNobWVudCgwLCAwKTsKKwkgICAgbG9nZ2VyT25CdXR0b25Gb3JtRGF0YS5ib3R0b20gICA9IG5ldyBGb3JtQXR0YWNobWVudCgwLCAyNSk7CisJICAgIGxvZ2dlck9uQnV0dG9uLnNldExheW91dERhdGEobG9nZ2VyT25CdXR0b25Gb3JtRGF0YSk7CisJICAgIC8vIExvZ2dlciBCdXR0b24gRm9ybQorCQlmaW5hbCBGb3JtRGF0YSBsb2dnZXJPZmZCdXR0b25Gb3JtRGF0YSA9IG5ldyBGb3JtRGF0YSgpOworCSAgICBsb2dnZXJPZmZCdXR0b25Gb3JtRGF0YS5sZWZ0ID0gbmV3IEZvcm1BdHRhY2htZW50KDcwLCAwKTsKKwkgICAgbG9nZ2VyT2ZmQnV0dG9uRm9ybURhdGEucmlnaHQgPSBuZXcgRm9ybUF0dGFjaG1lbnQoMTAwLCAwKTsKKwkgICAgbG9nZ2VyT2ZmQnV0dG9uRm9ybURhdGEudG9wID0gbmV3IEZvcm1BdHRhY2htZW50KDAsIDApOworCSAgICBsb2dnZXJPZmZCdXR0b25Gb3JtRGF0YS5ib3R0b20gICA9IG5ldyBGb3JtQXR0YWNobWVudCgwLCAyNSk7CisJICAgIGxvZ2dlck9mZkJ1dHRvbi5zZXRMYXlvdXREYXRhKGxvZ2dlck9mZkJ1dHRvbkZvcm1EYXRhKTsKKwkgICAgCisJICAgIAorCSAgICAvLyBjc3Ygc3RhdHVzTGFiZWwgRm9ybQorCQlmaW5hbCBGb3JtRGF0YSBjc3ZTdGF0dXNMYWJlbEZvcm1EYXRhID0gbmV3IEZvcm1EYXRhKCk7CisJCWNzdlN0YXR1c0xhYmVsLnNldExheW91dERhdGEoY3N2U3RhdHVzTGFiZWxGb3JtRGF0YSk7CisJCWNzdlN0YXR1c0xhYmVsRm9ybURhdGEubGVmdCAgPSBuZXcgRm9ybUF0dGFjaG1lbnQoMCwgMCk7CisJCWNzdlN0YXR1c0xhYmVsRm9ybURhdGEucmlnaHQgPSBuZXcgRm9ybUF0dGFjaG1lbnQoNDAsIDApOworCQljc3ZTdGF0dXNMYWJlbEZvcm1EYXRhLnRvcCAgID0gbmV3IEZvcm1BdHRhY2htZW50KDAsIDI1KTsKKwkJY3N2U3RhdHVzTGFiZWxGb3JtRGF0YS5ib3R0b20gICA9IG5ldyBGb3JtQXR0YWNobWVudCgwLCA1MCk7CisJCWNzdlN0YXR1c0xhYmVsLnNldExheW91dERhdGEoY3N2U3RhdHVzTGFiZWxGb3JtRGF0YSk7CisJICAgIC8vIENTViBTdW1tYXJ5IEJ1dHRvbiBGb3JtCisJICAgIGZpbmFsIEZvcm1EYXRhIGNzdk9uQnV0dG9uRm9ybURhdGEgPSBuZXcgRm9ybURhdGEoKTsKKwkgICAgY3N2T25CdXR0b25Gb3JtRGF0YS5sZWZ0ICA9IG5ldyBGb3JtQXR0YWNobWVudCg0MCwgMCk7CisJICAgIGNzdk9uQnV0dG9uRm9ybURhdGEucmlnaHQgPSBuZXcgRm9ybUF0dGFjaG1lbnQoNzAsIDApOworCSAgICBjc3ZPbkJ1dHRvbkZvcm1EYXRhLnRvcCAgID0gbmV3IEZvcm1BdHRhY2htZW50KDAsIDI1KTsKKwkgICAgY3N2T25CdXR0b25Gb3JtRGF0YS5ib3R0b20gICA9IG5ldyBGb3JtQXR0YWNobWVudCgwLCA1MCk7CisJICAgIGNzdlN1bW1hcnlPbkJ1dHRvbi5zZXRMYXlvdXREYXRhKGNzdk9uQnV0dG9uRm9ybURhdGEpOworCSAgICAvLyBMb2dnZXIgQnV0dG9uIEZvcm0KKwkJZmluYWwgRm9ybURhdGEgY3N2T2ZmQnV0dG9uRm9ybURhdGEgPSBuZXcgRm9ybURhdGEoKTsKKwkgICAgY3N2T2ZmQnV0dG9uRm9ybURhdGEubGVmdCA9IG5ldyBGb3JtQXR0YWNobWVudCg3MCwgMCk7CisJICAgIGNzdk9mZkJ1dHRvbkZvcm1EYXRhLnJpZ2h0ID0gbmV3IEZvcm1BdHRhY2htZW50KDEwMCwgMCk7CisJICAgIGNzdk9mZkJ1dHRvbkZvcm1EYXRhLnRvcCA9IG5ldyBGb3JtQXR0YWNobWVudCgwLCAyNSk7CisJICAgIGNzdk9mZkJ1dHRvbkZvcm1EYXRhLmJvdHRvbSAgID0gbmV3IEZvcm1BdHRhY2htZW50KDAsIDUwKTsKKwkgICAgY3N2U3VtbWFyeU9mZkJ1dHRvbi5zZXRMYXlvdXREYXRhKGNzdk9mZkJ1dHRvbkZvcm1EYXRhKTsKKwkgICAgCisJICAgIAorCSAgICAvLyBodG1sIHN0YXR1c0xhYmVsIEZvcm0KKwkJZmluYWwgRm9ybURhdGEgaHRtbFN0YXR1c0xhYmVsRm9ybURhdGEgPSBuZXcgRm9ybURhdGEoKTsKKwkJaHRtbFN0YXR1c0xhYmVsLnNldExheW91dERhdGEoaHRtbFN0YXR1c0xhYmVsRm9ybURhdGEpOworCQlodG1sU3RhdHVzTGFiZWxGb3JtRGF0YS5sZWZ0ICA9IG5ldyBGb3JtQXR0YWNobWVudCgwLCAwKTsKKwkJaHRtbFN0YXR1c0xhYmVsRm9ybURhdGEucmlnaHQgPSBuZXcgRm9ybUF0dGFjaG1lbnQoNDAsIDApOworCQlodG1sU3RhdHVzTGFiZWxGb3JtRGF0YS50b3AgICA9IG5ldyBGb3JtQXR0YWNobWVudCgwLCA1MCk7CisJCWh0bWxTdGF0dXNMYWJlbEZvcm1EYXRhLmJvdHRvbSAgID0gbmV3IEZvcm1BdHRhY2htZW50KDAsIDc1KTsKKwkJaHRtbFN0YXR1c0xhYmVsLnNldExheW91dERhdGEoaHRtbFN0YXR1c0xhYmVsRm9ybURhdGEpOworCSAgICAvLyBIVE1MIFN1bW1hcnkgQnV0dG9uIEZvcm0KKwkgICAgZmluYWwgRm9ybURhdGEgaHRtbE9uQnV0dG9uRm9ybURhdGEgPSBuZXcgRm9ybURhdGEoKTsKKwkgICAgaHRtbE9uQnV0dG9uRm9ybURhdGEubGVmdCAgPSBuZXcgRm9ybUF0dGFjaG1lbnQoNDAsIDApOworCSAgICBodG1sT25CdXR0b25Gb3JtRGF0YS5yaWdodCA9IG5ldyBGb3JtQXR0YWNobWVudCg3MCwgMCk7CisJICAgIGh0bWxPbkJ1dHRvbkZvcm1EYXRhLnRvcCAgID0gbmV3IEZvcm1BdHRhY2htZW50KDAsIDUwKTsKKwkgICAgaHRtbE9uQnV0dG9uRm9ybURhdGEuYm90dG9tICAgPSBuZXcgRm9ybUF0dGFjaG1lbnQoMCwgNzUpOworCSAgICBodG1sU3VtbWFyeU9uQnV0dG9uLnNldExheW91dERhdGEoaHRtbE9uQnV0dG9uRm9ybURhdGEpOworCSAgICAvLyBMb2dnZXIgQnV0dG9uIEZvcm0KKwkJZmluYWwgRm9ybURhdGEgaHRtbE9mZkJ1dHRvbkZvcm1EYXRhID0gbmV3IEZvcm1EYXRhKCk7CisJICAgIGh0bWxPZmZCdXR0b25Gb3JtRGF0YS5sZWZ0ID0gbmV3IEZvcm1BdHRhY2htZW50KDcwLCAwKTsKKwkgICAgaHRtbE9mZkJ1dHRvbkZvcm1EYXRhLnJpZ2h0ID0gbmV3IEZvcm1BdHRhY2htZW50KDEwMCwgMCk7CisJICAgIGh0bWxPZmZCdXR0b25Gb3JtRGF0YS50b3AgPSBuZXcgRm9ybUF0dGFjaG1lbnQoMCwgNTApOworCSAgICBodG1sT2ZmQnV0dG9uRm9ybURhdGEuYm90dG9tICAgPSBuZXcgRm9ybUF0dGFjaG1lbnQoMCwgNzUpOworCSAgICBodG1sU3VtbWFyeU9mZkJ1dHRvbi5zZXRMYXlvdXREYXRhKGh0bWxPZmZCdXR0b25Gb3JtRGF0YSk7CisJICAgIAorCSAgICAKKwkgICAgCisJICAgIAorCSAgICAKKwkgICAgCisJICAgIAorCSAgICAKKwkgICAgLy8gSEVBREVSIExBQkVMUworCSAgICBpZihsb2dnZXJNb2RlSGVhZGVyPT1udWxsKSB7CisJCQlsb2dnZXJNb2RlSGVhZGVyID0gbmV3IExhYmVsKHRvcCwgU1dULkJPUkRFUik7CisJCQkvL2xvZ2dlck1vZGVIZWFkZXIuc2V0QmFja2dyb3VuZChwYXJlbnQuZ2V0RGlzcGxheSgpLmdldFN5c3RlbUNvbG9yKFNXVC5DT0xPUl9EQVJLX0dSQVkpKTsKKwkJCWxvZ2dlck1vZGVIZWFkZXIuc2V0VGV4dCgiTW9kZSIpOworCQkJbG9nZ2VyTW9kZUhlYWRlci5zZXRBbGlnbm1lbnQoU1dULkNFTlRFUik7CisJCQkKKwkJCWxvZ2dlclNjZW5hcmlvSGVhZGVyID0gbmV3IExhYmVsKHRvcCwgU1dULkJPUkRFUik7CisJCQkvL2xvZ2dlclNjZW5hcmlvSGVhZGVyLnNldEJhY2tncm91bmQocGFyZW50LmdldERpc3BsYXkoKS5nZXRTeXN0ZW1Db2xvcihTV1QuQ09MT1JfREFSS19HUkFZKSk7CisJCQlsb2dnZXJTY2VuYXJpb0hlYWRlci5zZXRUZXh0KCJTY2VuYXJpbyIpOworCQkJbG9nZ2VyU2NlbmFyaW9IZWFkZXIuc2V0QWxpZ25tZW50KFNXVC5DRU5URVIpOworCQkJCisJCQlsb2dnZXJEaXNlYXNlSGVhZGVyID0gbmV3IExhYmVsKHRvcCwgU1dULkJPUkRFUik7CisJCQkvL2xvZ2dlckRpc2Vhc2VIZWFkZXIuc2V0QmFja2dyb3VuZChwYXJlbnQuZ2V0RGlzcGxheSgpLmdldFN5c3RlbUNvbG9yKFNXVC5DT0xPUl9EQVJLX0dSQVkpKTsKKwkJCWxvZ2dlckRpc2Vhc2VIZWFkZXIuc2V0VGV4dCgiRGlzZWFzZSIpOworCQkJbG9nZ2VyRGlzZWFzZUhlYWRlci5zZXRBbGlnbm1lbnQoU1dULkNFTlRFUik7CisJCQkKKwkJCS8vIExvZ2dlciBOYW1lIExhYmVsCisJCQlmaW5hbCBGb3JtRGF0YSBsb2dnZXJNb2RlRm9ybURhdGEgPSBuZXcgRm9ybURhdGEoKTsKKwkJCWxvZ2dlck1vZGVGb3JtRGF0YS50b3AgPSBuZXcgRm9ybUF0dGFjaG1lbnQoMCwgODApOworCQkJbG9nZ2VyTW9kZUZvcm1EYXRhLmJvdHRvbSA9IG5ldyBGb3JtQXR0YWNobWVudCgwLCAxMDApOworCQkJbG9nZ2VyTW9kZUZvcm1EYXRhLmxlZnQgPSBuZXcgRm9ybUF0dGFjaG1lbnQoMCwgMCk7CisJCQlsb2dnZXJNb2RlRm9ybURhdGEucmlnaHQgPSBuZXcgRm9ybUF0dGFjaG1lbnQoMjUsIDApOwkKKwkJCWxvZ2dlck1vZGVIZWFkZXIuc2V0TGF5b3V0RGF0YShsb2dnZXJNb2RlRm9ybURhdGEpOworCQkJCisJCQlmaW5hbCBGb3JtRGF0YSBsb2dnZXJTY2VuYXJpb0Zvcm1EYXRhID0gbmV3IEZvcm1EYXRhKCk7CisJCQlsb2dnZXJTY2VuYXJpb0Zvcm1EYXRhLnRvcCA9IG5ldyBGb3JtQXR0YWNobWVudCgwLCA4MCk7CisJCQlsb2dnZXJTY2VuYXJpb0Zvcm1EYXRhLmJvdHRvbSA9IG5ldyBGb3JtQXR0YWNobWVudCgwLCAxMDApOworCQkJbG9nZ2VyU2NlbmFyaW9Gb3JtRGF0YS5sZWZ0ID0gbmV3IEZvcm1BdHRhY2htZW50KDI1LCAwKTsKKwkJCWxvZ2dlclNjZW5hcmlvRm9ybURhdGEucmlnaHQgPSBuZXcgRm9ybUF0dGFjaG1lbnQoNTAsIDApOwkKKwkJCWxvZ2dlclNjZW5hcmlvSGVhZGVyLnNldExheW91dERhdGEobG9nZ2VyU2NlbmFyaW9Gb3JtRGF0YSk7CisJCQkKKwkJCWZpbmFsIEZvcm1EYXRhIGxvZ2dlckRpc2Vhc2VGb3JtRGF0YSA9IG5ldyBGb3JtRGF0YSgpOworCQkJbG9nZ2VyRGlzZWFzZUZvcm1EYXRhLnRvcCA9IG5ldyBGb3JtQXR0YWNobWVudCgwLCA4MCk7CisJCQlsb2dnZXJEaXNlYXNlRm9ybURhdGEuYm90dG9tID0gbmV3IEZvcm1BdHRhY2htZW50KDAsIDEwMCk7CisJCQlsb2dnZXJEaXNlYXNlRm9ybURhdGEubGVmdCA9IG5ldyBGb3JtQXR0YWNobWVudCg1MCwgMCk7CisJCQlsb2dnZXJEaXNlYXNlRm9ybURhdGEucmlnaHQgPSBuZXcgRm9ybUF0dGFjaG1lbnQoOTAsIDApOwkKKwkJCWxvZ2dlckRpc2Vhc2VIZWFkZXIuc2V0TGF5b3V0RGF0YShsb2dnZXJEaXNlYXNlRm9ybURhdGEpOworCQl9CisJICAgIAorICAgICAgICAKKwkgICAgCisJCXJldHVybiB0b3A7CSAKKwkJCisJfSAvLyBhZGRBbGxBY3Rpb25CdXR0b25zCisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuVmlld2VyI2dldENvbnRyb2woKQorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBDb250cm9sIGdldENvbnRyb2woKSB7CisJCXJldHVybiBjb21wb3NpdGU7CisJfSAvLyBnZXRDb250cm9sCisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuVmlld2VyI2dldFNlbGVjdGlvbigpCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIElTZWxlY3Rpb24gZ2V0U2VsZWN0aW9uKCkgeworCQlyZXR1cm4gc2VsZWN0aW9uOworCX0KKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5WaWV3ZXIjcmVmcmVzaCgpCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgcmVmcmVzaCgpIHsKKwkJCisJCWlmIChzaW11bGF0aW9uTWFuYWdlciAhPSBudWxsKSB7CisJCQkvLyBZZXMJCisJCQlMaXN0IGFsbFNpbXVsYXRpb25zID0gbnVsbDsKKwkJCXVwZGF0ZVByZWZlcmVuY2VTdGF0ZShzaW11bGF0aW9uTWFuYWdlci5nZXRBY3RpdmVTaW11bGF0aW9ucygpKTsKKwkJCWlmIChzaW11bGF0aW9uTWFuYWdlciAhPSBudWxsKSB7CisJCQkJCWFsbFNpbXVsYXRpb25zID0gc2ltdWxhdGlvbk1hbmFnZXIuZ2V0QWN0aXZlU2ltdWxhdGlvbnMoKTsKKwkJCQkJYWRkVG9EaXNwbGF5ZWRJZGVudGlmaWFibGVTZXQoYWxsU2ltdWxhdGlvbnMpOworCQkJfQorCQkJCQorCQkJaWRlbnRpZmlhYmxlc1RvRGlzcGxheU1hcC5jbGVhcigpOworCQkJYWRkQWxsSWRlbnRpZmlhYmxlc0J5U2ltdWxhdGlvbihzaW11bGF0aW9uTWFuYWdlci5nZXRBY3RpdmVTaW11bGF0aW9ucygpKTsKKwkJfSAvLyBpZgorCQkJCisJfSAvLyByZWZyZXNoCisKKwkvKioKKwkgKiBTdGFydCBsb2dnaW5nCisJICogCisJICogQHBhcmFtIG5ld1NpbXVsYXRpb25zIE5ldyBzaW11bGF0aW9ucyBhZGRlZCBieSB0aGUgc2ltdWxhdGlvbiBtYW5hZ2VyCisJICovCisJcHVibGljIHZvaWQgZW5hYmxlTG9nZ2luZyhJU2ltdWxhdGlvbiBbXSBuZXdTaW11bGF0aW9ucykgeworCQlzeW5jaHJvbml6ZWQodGhpcykgewkJCisJCQlmb3IgKGludCBpID0gMDsgaSA8IG5ld1NpbXVsYXRpb25zLmxlbmd0aDsgaSsrKSB7CisJCQkJZmluYWwgSVNpbXVsYXRpb24gc2ltdWxhdGlvbiA9IG5ld1NpbXVsYXRpb25zW2ldOworCQkJCS8vIFN0ZWZhbiBuZXcgY29kZToKKwkJCQlpZighc2ltdWxhdGlvbnNUb0xvZy5jb250YWlucyhzaW11bGF0aW9uKSkgeworCQkJCQlzaW11bGF0aW9uc1RvTG9nLmFkZChzaW11bGF0aW9uKTsKKwkJCQkJcG9wdWxhdGVWaWV3KG5ld1NpbXVsYXRpb25zKTsKKwkJCQl9CisJCQl9Ly8gZm9yIGFsbCBzaW11bGF0aW9ucworCQkKKwkJCWxvZ2dlclN0YXR1c0xhYmVsLnNldFRleHQoTU9OSVRPUl9PTl9URVhUKTsKKwkJCWxvZ2dlclN0YXR1c0xhYmVsLnNldEJhY2tncm91bmQob25Db2xvcik7CisJCQlsb2dnaW5nT24gPSB0cnVlOworCQkJLy8gYW5kIHRvZ2dsZSB0aGUgYnV0dG9ucworCQkJbG9nZ2VyT25CdXR0b24uc2V0U2VsZWN0aW9uKHRydWUpOworCQkJbG9nZ2VyT2ZmQnV0dG9uLnNldFNlbGVjdGlvbihmYWxzZSk7CisJCQkKKwkJCS8vIC8vIGRlcGVuZHMgb24gbG9nZ2VyCisJCQljc3ZTdW1tYXJ5T25CdXR0b24uc2V0RW5hYmxlZCh0cnVlKTsKKwkJfS8vc3luY2hyb25pemVkKCkgCisKKwl9IC8vIGVuYWJsZUxvZ2dpbmcKKworCQorCS8qKgorCSAqIFN0b3AgbG9nZ2luZworCSAqIAorCSAqLworCXB1YmxpYyB2b2lkIGRpc2FibGVMb2dnaW5nKCkgeworCQlzaW11bGF0aW9uc1RvTG9nLmNsZWFyKCk7CisJCS8vIHJlbW92ZSBhbGwgY29udHJvbHMKKwkJZmluYWwgQ29udHJvbFtdIGFsbENvbnRyb2xzID0gY29tcG9zaXRlLmdldENoaWxkcmVuKCk7CisJCWZvciAoZmluYWwgQ29udHJvbCBlbGVtZW50IDogYWxsQ29udHJvbHMpIHsKKwkJCWlmKGVsZW1lbnQgaW5zdGFuY2VvZiBMb2dnZXJDb250cm9sKSB7CisJCQkJZmluYWwgTG9nZ2VyQ29udHJvbCBsb2dnZXJDb250cm9sID0gKExvZ2dlckNvbnRyb2wpIGVsZW1lbnQ7CisJCQkJbG9nZ2VyQ29udHJvbC5yZW1vdmUoKTsKKwkJCX0gZWxzZSBlbGVtZW50LmRpc3Bvc2UoKTsKKwkJfSAvLyBmb3IgZWFjaCBMb2dnZXJDb250cm9sCisJCisJCWxvZ2dlclN0YXR1c0xhYmVsLnNldFRleHQoTU9OSVRPUl9PRkZfVEVYVCk7CisJCWxvZ2dlclN0YXR1c0xhYmVsLnNldEJhY2tncm91bmQob2ZmQ29sb3IpOworCQlsb2dnaW5nT24gPSBmYWxzZTsKKwkJLy8gYW5kIHRvZ2dsZSB0aGUgYnV0dG9ucworCQlsb2dnZXJPbkJ1dHRvbi5zZXRTZWxlY3Rpb24oZmFsc2UpOworCQlsb2dnZXJPZmZCdXR0b24uc2V0U2VsZWN0aW9uKHRydWUpOworCQkKKwkJLy8gZGVwZW5kcyBvbiBsb2dnZXIKKwkJZGlzYWJsZUNzdlN1bW1hcnkoKTsKKwkJY3N2U3VtbWFyeU9uQnV0dG9uLnNldEVuYWJsZWQoZmFsc2UpOworCX0gLy8gZGlzYWJsZUxvZ2dpbmcKKworCQorCQorCS8qKgorCSAqIFN0YXJ0IGh0bWwgc3VtbWFyeQorCSAqIAorCSAqIEBwYXJhbSBuZXdTaW11bGF0aW9ucyBOZXcgc2ltdWxhdGlvbnMgYWRkZWQgYnkgdGhlIHNpbXVsYXRpb24gbWFuYWdlcgorCSAqLworCXB1YmxpYyB2b2lkIGVuYWJsZUh0bWxTdW1tYXJ5KElTaW11bGF0aW9uIFtdIG5ld1NpbXVsYXRpb25zKSB7CisJCXN5bmNocm9uaXplZCh0aGlzKSB7CQkKKwkJCWZvciAoaW50IGkgPSAwOyBpIDwgbmV3U2ltdWxhdGlvbnMubGVuZ3RoOyBpKyspIHsKKwkJCQlmaW5hbCBJU2ltdWxhdGlvbiBzaW11bGF0aW9uID0gbmV3U2ltdWxhdGlvbnNbaV07CisJCQkJLy8gU3RlZmFuIG5ldyBjb2RlOgorCQkJCWlmKCFzaW11bGF0aW9uc1RvTG9nLmNvbnRhaW5zKHNpbXVsYXRpb24pKSB7CisJCQkJCXNpbXVsYXRpb25zVG9Mb2cuYWRkKHNpbXVsYXRpb24pOworCQkJCQlwb3B1bGF0ZVZpZXcobmV3U2ltdWxhdGlvbnMpOworCQkJCX0KKwkJCX0vLyBmb3IgYWxsIHNpbXVsYXRpb25zCisJCQkKKwkJCWh0bWxTdGF0dXNMYWJlbC5zZXRUZXh0KEhUTUxfT05fVEVYVCk7CisJCQlodG1sU3RhdHVzTGFiZWwuc2V0QmFja2dyb3VuZChvbkNvbG9yKTsKKwkJCWh0bWxTdW1tYXJ5T24gPSB0cnVlOworCQkJLy8gYW5kIHRvZ2dsZSB0aGUgYnV0dG9ucworCQkJaHRtbFN1bW1hcnlPbkJ1dHRvbi5zZXRTZWxlY3Rpb24odHJ1ZSk7CisJCQlodG1sU3VtbWFyeU9mZkJ1dHRvbi5zZXRTZWxlY3Rpb24oZmFsc2UpOworCQl9Ly9zeW5jaHJvbml6ZWQoKSAKKworCX0gLy8gZW5hYmxlTG9nZ2luZworCisJCisJLyoqCisJICogU3RvcCBjc3Ygc3VtbWFyeQorCSAqIAorCSAqLworCXB1YmxpYyB2b2lkIGRpc2FibGVIdG1sU3VtbWFyeSgpIHsKKwkJCisJCisJCWh0bWxTdGF0dXNMYWJlbC5zZXRUZXh0KEhUTUxfT0ZGX1RFWFQpOworCQlodG1sU3RhdHVzTGFiZWwuc2V0QmFja2dyb3VuZChvZmZDb2xvcik7CisJCWh0bWxTdW1tYXJ5T24gPSBmYWxzZTsKKwkJLy8gYW5kIHRvZ2dsZSB0aGUgYnV0dG9ucworCQlodG1sU3VtbWFyeU9uQnV0dG9uLnNldFNlbGVjdGlvbihmYWxzZSk7CisJCWh0bWxTdW1tYXJ5T2ZmQnV0dG9uLnNldFNlbGVjdGlvbih0cnVlKTsKKwl9IC8vIGRpc2FibGVMb2dnaW5nCisJCisJLyoqCisJICogU3RhcnQgaHRtbCBzdW1tYXJ5CisJICogCisJICogQHBhcmFtIG5ld1NpbXVsYXRpb25zIE5ldyBzaW11bGF0aW9ucyBhZGRlZCBieSB0aGUgc2ltdWxhdGlvbiBtYW5hZ2VyCisJICovCisJcHVibGljIHZvaWQgZW5hYmxlQ3N2U3VtbWFyeShJU2ltdWxhdGlvbiBbXSBuZXdTaW11bGF0aW9ucykgeworCQlzeW5jaHJvbml6ZWQodGhpcykgewkJCisJCQkJCQorCQkJaWYobG9nZ2luZ09uKSB7CisJCQkJY3N2U3RhdHVzTGFiZWwuc2V0VGV4dChDU1ZfT05fVEVYVCk7CisJCQkJY3N2U3RhdHVzTGFiZWwuc2V0QmFja2dyb3VuZChvbkNvbG9yKTsKKwkJCQljc3ZQYXJhbWV0ZXJTdW1tYXJ5T24gPSB0cnVlOworCQkJCS8vIGFuZCB0b2dnbGUgdGhlIGJ1dHRvbnMKKwkJCQljc3ZTdW1tYXJ5T25CdXR0b24uc2V0U2VsZWN0aW9uKHRydWUpOworCQkJCWNzdlN1bW1hcnlPZmZCdXR0b24uc2V0U2VsZWN0aW9uKGZhbHNlKTsKKwkJCX0KKwkJCQorCQl9Ly9zeW5jaHJvbml6ZWQoKSAKKworCX0gLy8gZW5hYmxlTG9nZ2luZworCisJCisJLyoqCisJICogU3RvcCBjc3Ygc3VtbWFyeQorCSAqIAorCSAqLworCXB1YmxpYyB2b2lkIGRpc2FibGVDc3ZTdW1tYXJ5KCkgeworCQkKKwkKKwkJY3N2U3RhdHVzTGFiZWwuc2V0VGV4dChDU1ZfT0ZGX1RFWFQpOworCQljc3ZTdGF0dXNMYWJlbC5zZXRCYWNrZ3JvdW5kKG9mZkNvbG9yKTsKKwkJY3N2UGFyYW1ldGVyU3VtbWFyeU9uID0gZmFsc2U7CisJCS8vIGFuZCB0b2dnbGUgdGhlIGJ1dHRvbnMKKwkJY3N2U3VtbWFyeU9uQnV0dG9uLnNldFNlbGVjdGlvbihmYWxzZSk7CisJCWNzdlN1bW1hcnlPZmZCdXR0b24uc2V0U2VsZWN0aW9uKHRydWUpOworCX0gLy8gZGlzYWJsZUxvZ2dpbmcKKworCQorCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5WaWV3ZXIjZ2V0SW5wdXQoKQorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBPYmplY3QgZ2V0SW5wdXQoKSB7CisJCXJldHVybiBzaW11bGF0aW9uTWFuYWdlcjsKKwl9CisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuVmlld2VyI3NldElucHV0KGphdmEubGFuZy5PYmplY3QpCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgc2V0SW5wdXQoZmluYWwgT2JqZWN0IGlucHV0KSB7CisJCWZpbmFsIE9iamVjdCBvbGRJbnB1dCA9IHNpbXVsYXRpb25NYW5hZ2VyOworCQlzaW11bGF0aW9uTWFuYWdlciA9IChTaW11bGF0aW9uTWFuYWdlcikgaW5wdXQ7CisJCWlucHV0Q2hhbmdlZChpbnB1dCwgb2xkSW5wdXQpOworCX0gLy8gc2V0SW5wdXQKKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5WaWV3ZXIjaW5wdXRDaGFuZ2VkKGphdmEubGFuZy5PYmplY3QsCisJICogICAgICBqYXZhLmxhbmcuT2JqZWN0KQorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIGlucHV0Q2hhbmdlZChmaW5hbCBPYmplY3QgaW5wdXQsIGZpbmFsIE9iamVjdCBvbGRJbnB1dCkgeworCQkvLyBJcyB0aGVyZSBhbHJlYWR5IGEgc2ltdWxhdGlvbiBtYW5hZ2VyPworCQlpZiAob2xkSW5wdXQgIT0gbnVsbCkgeworCQkJLy8gWWVzCisJCQkoKFNpbXVsYXRpb25NYW5hZ2VyKSBvbGRJbnB1dCkucmVtb3ZlTGlzdGVuZXJTeW5jKHRoaXMpOworCQl9IC8vIGlmCisKKwkJLy8gUmVnaXN0ZXIgd2l0aCB0aGUgU2ltdWxhdGlvbk1hbmFnZXIgdG8gbGlzdGVuIGZvciBjaGFuZ2VzIGluIHRoZSBzZXQKKwkJLy8gb2YgYWN0aXZlIFNpbXVsYXRpb25zLgorCQkvLyBHb3QgaW5wdXQ/CisJCWlmIChpbnB1dCAhPSBudWxsKSB7CisJCQkvLyBZZXMKKwkJCSgoU2ltdWxhdGlvbk1hbmFnZXIpIGlucHV0KS5hZGRTaW11bGF0aW9uTWFuYWdlckxpc3RlbmVyU3luYyh0aGlzKTsKKwkJfSAvLyBpZgorCisJCS8vIFVwZGF0ZSB0aGUgdmlld2VyIHdpdGggdGhlIGNvbnRlbnRzIG9mIHRoZSBuZXcgaW5wdXQgc291cmNlCisJCXJlZnJlc2goKTsKKwl9IC8vIGlucHV0Q2hhbmdlZAorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlZpZXdlciNzZXRTZWxlY3Rpb24ob3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uLAorCSAqICAgICAgYm9vbGVhbikKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBzZXRTZWxlY3Rpb24oZmluYWwgSVNlbGVjdGlvbiBzZWxlY3Rpb24sCisJCQlAU3VwcHJlc3NXYXJuaW5ncygidW51c2VkIikKKwkJCWZpbmFsIGJvb2xlYW4gcmV2ZWFsKSB7CisJCXRoaXMuc2VsZWN0aW9uID0gc2VsZWN0aW9uOworCX0KKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyI3NlbGVjdGlvbkNoYW5nZWQob3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5TZWxlY3Rpb25DaGFuZ2VkRXZlbnQpCisJICovCisJcHVibGljIHZvaWQgc2VsZWN0aW9uQ2hhbmdlZChmaW5hbCBTZWxlY3Rpb25DaGFuZ2VkRXZlbnQgZXZlbnQpIHsKKworCQkvLyBEaWQgdGhlIGV2ZW50IGNvbWUgZnJvbSBhIExvZ2dlckNvbnRyb2w/CisJCWlmIChldmVudC5nZXRTZWxlY3Rpb25Qcm92aWRlcigpIGluc3RhbmNlb2YgTG9nZ2VyQ29udHJvbCkgeworCQkJLy8gWWVzCisJCQkvLyBKdXN0IHBhc3MgaXQgYWxvbmcKKwkJCXNlbGVjdGlvbiA9IGV2ZW50LmdldFNlbGVjdGlvbigpOworCQkJZmlyZVNlbGVjdGlvbkNoYW5nZWQoZXZlbnQpOworCQl9IC8vIGlmCisJfSAvLyBzZWxlY3Rpb25DaGFuZ2VkCisKKwkvKioKKwkgKiBAcGFyYW0gZXZlbnQgCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmpvYnMuc2ltdWxhdGlvbi5JU2ltdWxhdGlvbk1hbmFnZXJMaXN0ZW5lciNzaW11bGF0aW9uc0NoYW5nZWQoU2ltdWxhdGlvbk1hbmFnZXJFdmVudCkKKwkgKi8KKwlwdWJsaWMgdm9pZCBzaW11bGF0aW9uc0NoYW5nZWRTeW5jKGZpbmFsIFNpbXVsYXRpb25NYW5hZ2VyRXZlbnQgZXZlbnQpIHsKKworCQkvLyBJbml0IHRoZSBwcmVmZXJlbmNlCisJCXVwZGF0ZVByZWZlcmVuY2VTdGF0ZShBcnJheXMuYXNMaXN0KGV2ZW50LmdldFNpbXVsYXRpb25zQWRkZWQoKSkpOworICAgICAgICBMaXN0PElTaW11bGF0aW9uPiBuZXdTaW11bGF0aW9ucyA9IEFycmF5cy5hc0xpc3QoZXZlbnQuZ2V0U2ltdWxhdGlvbnNBZGRlZCgpKTsKKwkJCisgICAgICAgIGFkZFRvRGlzcGxheWVkSWRlbnRpZmlhYmxlU2V0KG5ld1NpbXVsYXRpb25zKTsKKworCQlyZW1vdmVGcm9tRGlzcGxheWVkU2ltdWxhdGlvblNldChBcnJheXMuYXNMaXN0KGV2ZW50CisJCQkJLmdldFNpbXVsYXRpb25zUmVtb3ZlZCgpKSk7CisJCQorCQkvLyBsb2dnaW5nIHN0YXR1cworCQlpZihsb2dnaW5nT24pIHsKKwkJCS8vIFRoZSBmb2xsb3dpbmcgd2lsbCBhbHNvIGNhbGwgcG9wdWxhdGUgdmlldy4KKwkJCWVuYWJsZUxvZ2dpbmcoZXZlbnQuZ2V0U2ltdWxhdGlvbnNBZGRlZCgpKTsKKwkJfSBlbHNlIHsKKwkJCWRpc2FibGVMb2dnaW5nKCk7CisJCX0KKwkJCisJCS8vIGxvZ2dpbmcgc3RhdHVzCisJCWlmKGh0bWxTdW1tYXJ5T24pIHsKKwkJCS8vIFRoZSBmb2xsb3dpbmcgd2lsbCBhbHNvIGNhbGwgcG9wdWxhdGUgdmlldy4KKwkJCWVuYWJsZUh0bWxTdW1tYXJ5KGV2ZW50LmdldFNpbXVsYXRpb25zQWRkZWQoKSk7CisJCX0gZWxzZSB7CisJCQlkaXNhYmxlSHRtbFN1bW1hcnkoKTsKKwkJfQorCX0gLy8gc2ltdWxhdGlvbnNDaGFuZ2VkCisKKwkvKioKKwkgKiBAcGFyYW0gc2ltdWxhdGlvbnMKKwkgKiAgICAgICAgICAgIHRoZSB7QGxpbmsgU2ltdWxhdGlvbn1zIHRvIGFkZCB0byB0aGUgc2V0IGJlaW5nIGRpc3BsYXllZC4KKwkgKi8KKwlwcml2YXRlIHZvaWQgYWRkVG9EaXNwbGF5ZWRJZGVudGlmaWFibGVTZXQoCisJCQlmaW5hbCBMaXN0PElTaW11bGF0aW9uPiBzaW11bGF0aW9ucykgeworCQkKKwkJLy8gbmV3IHNpbXVsYXRpb24KKwkJTG9nV3JpdGVyLnJlc2V0KCk7CisJCS8vIEFueSBzaW11bGF0aW9ucyB0byBhZGQ/CisJCWlmICghc2ltdWxhdGlvbnMuaXNFbXB0eSgpKSB7CisJCQkKKwkJCWZvcihpbnQgaSA9IDA7IGkgPCBzaW11bGF0aW9ucy5zaXplKCk7IGkgKyspIHsKKwkJCQlJU2ltdWxhdGlvbiBzaW0gPSBzaW11bGF0aW9ucy5nZXQoaSk7CisJCQkJU2V0PElkZW50aWZpYWJsZT4gaWRlbnRpZmlhYmxlc1RvRGlzcGxheSA9IGdldElkZW50aWZpYWJsZVNldChzaW0pOworCQkJCQorCQkJCWlkZW50aWZpYWJsZXNUb0Rpc3BsYXkuYWRkQWxsKGdldElkZW50aWZpYWJsZXNJblNpbXVsYXRpb24oc2ltKSk7CisJCQkJCisJCQkJaWRlbnRpZmlhYmxlc1RvRGlzcGxheU1hcC5wdXQoc2ltLGlkZW50aWZpYWJsZXNUb0Rpc3BsYXkpOworCQkJCQorCQkJfS8vIGZvciBhbGwgc2ltdWxhdGlvbnMKKwkJCQorCQkJCisJCQkKKwkJfSAvLyBpZiBhbnkgc2ltdWxhdGlvbnMKKwl9IC8vIGFkZFRvRGlzcGxheWVkU2ltdWxhdGlvblNldAorCisJLyoqCisJICogQHBhcmFtIHNpbXVsYXRpb25zCisJICogICAgICAgICAgICB0aGUge0BsaW5rIFNpbXVsYXRpb259cyB0byByZW1vdmUgZnJvbSB0aGUgc2V0IGJlaW5nCisJICogICAgICAgICAgICBkaXNwbGF5ZWQuCisJICovCisJcHJpdmF0ZSB2b2lkIHJlbW92ZUZyb21EaXNwbGF5ZWRTaW11bGF0aW9uU2V0KAorCQkJZmluYWwgTGlzdDxJU2ltdWxhdGlvbj4gc2ltdWxhdGlvbnMpIHsKKwkJLy8gQW55IHNpbXVsYXRpb25zIHRvIHJlbW92ZT8KKwkJaWYgKCFzaW11bGF0aW9ucy5pc0VtcHR5KCkpIHsKKwkJCQorCQkJZm9yKGludCBpID0gMDsgaSA8IHNpbXVsYXRpb25zLnNpemUoKTsgaSArKykgeworCQkJCUlTaW11bGF0aW9uIHNpbSA9IHNpbXVsYXRpb25zLmdldChpKTsKKwkJCQkKKwkJCQlTZXQ8SWRlbnRpZmlhYmxlPiBpZGVudGlmaWFibGVzVG9SZW1vdmUgPSBnZXRJZGVudGlmaWFibGVTZXQoc2ltKTsKKwkJCQljbGVhbnVwKGlkZW50aWZpYWJsZXNUb1JlbW92ZSxzaW0pOworCQkJCWlkZW50aWZpYWJsZXNUb1JlbW92ZS5jbGVhcigpOworCQkJCWlkZW50aWZpYWJsZXNUb0Rpc3BsYXlNYXAucmVtb3ZlKHNpbSk7CisJCQkJCisJCQl9Ly8gZm9yIGFsbCBzaW11bGF0aW9ucworCQkJCisJCX0gLy8gaWYKKwl9IC8vIHJlbW92ZUZyb21EaXNwbGF5ZWRTaW11bGF0aW9uU2V0CisJCisJCisJCisJCisJLyoqCisJICogCisJICogQHBhcmFtIHNpbXVsYXRpb25zCisJICogQHJldHVybgorCSAqLworCVNldDxJZGVudGlmaWFibGU+IGdldElkZW50aWZpYWJsZXNJblNpbXVsYXRpb24oCisJCQlmaW5hbCBJU2ltdWxhdGlvbiBzaW11bGF0aW9uKSB7CisJCWZpbmFsIFNldCByZXRWYWwgPSBuZXcgTGlua2VkSGFzaFNldDxJU2ltdWxhdGlvbj4oKTsKKworCQkvKgorCQkgKiBUaGUgZGVmYXVsdCBtb25pdG9yIGxvY2F0aW9ucyBhbHdheXMgY29udGFpbnMgdGhlIHdvcmtzIChVUklzdWZmaXggPQorCQkgKiBaWlosIG9yIE1vbml0b3JQcmVmZXJlbmNlcy5ERUZBVUxUX0xPQ0FUSU9OX0lEIEhvd2V2ZXIsIGlmIGEgc2NlbmFyaW8KKwkJICogY29udGFpbnMgb25seSBvbmUgY291bnRyeSB0aGVuIHRoZSBaWlogbm9kZXMgZG9lcyBub3QgZXhpc3QgYW5kIHRoZQorCQkgKiB0b3AgbGV2ZWwgbm9kZSB3aWxsIGJlIHRoZSBjb3VudHJ5IGNvZGUuIFNvIGhlcmUgd2UgY2hlY2sgdGhhdCB0aGUKKwkJICogWlpaIG5vZGUgZXhpc3RzLiBJZiBpdCBkb2VzIG5vdCBleGlzdCB3ZSBsb29rIGZvciB0aHJlZSBsZXR0ZXIKKwkJICogY291bnRyeSBjb2RlKHMpIGFuZCBhZGQgdGhhdCAodGhvc2UgLSBidXQgdGhlcmUgc2hvdWxkIGJlIG9ubHkgb25lKQorCQkgKiB0byB0aGUgbGlzdC4KKwkJICovCisJCWZpbmFsIEdyYXBoIGdyYXBoID0gc2ltdWxhdGlvbi5nZXRTY2VuYXJpbygpLmdldENhbm9uaWNhbEdyYXBoKCk7CisJCS8qCisJCSAqIHRoaXMgY29kZSB3YXMgdXNlZCB0byBhdm9pZCBhIGJ1ZyB0aGF0IHNob3VsZCBub3cgYmUgZml4ZWQKKwkJICogCisJCSAqIGlmIChncmFwaCA9PSBudWxsKSB7IEFjdGl2YXRvci5sb2dJbmZvcm1hdGlvbigiZ3JhcGggaXMgbnVsbCIpOyAvLyB0cnkKKwkJICogc2V2ZXJhbCB0aW1lcyBmb3IgKGludCBpaSA9IDAgOyBpaSA8IDUwOyBpaSArKykgeyB0cnkgeworCQkgKiBUaHJlYWQuc2xlZXAoMTAwKTsgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsgLy8gbm90aGluZyB9IGdyYXBoID0KKwkJICogc2ltdWxhdGlvbi5nZXRTY2VuYXJpbygpLmdldENhbm9uaWNhbEdyYXBoKCk7IGlmIChncmFwaCAhPSBudWxsKQorCQkgKiBicmVhazsgfS8vIGZvciAxMCB0cnlzIH0gLy9pZiBncmFwaCBudWxsCisJCSAqLworCisJCWlmIChncmFwaCAhPSBudWxsKSB7CisJCQkvLyBmaW5hbCBFTWFwIGFsbE5vZGVzID0gZ3JhcGguZ2V0Tm9kZXMoKTsKKwkJCS8vIGZpbmFsIFNldCBhbGxHcmFwaFVSSXMgPSBhbGxOb2Rlcy5rZXlTZXQoKTsKKwkJCS8vIGZpbmFsIFVSSSBkZWZhdWx0VVJJID0gTW9uaXRvclByZWZlcmVuY2VzLmdldERlZmF1bHRVUkkoKTsKKworCQkJZmluYWwgSXRlcmF0b3IgaXRlciA9IG1vbml0b3JTZXQuaXRlcmF0b3IoKTsKKwkJCXdoaWxlICgoaXRlciAhPSBudWxsKSAmJiAoaXRlci5oYXNOZXh0KCkpKSB7CisJCQkJZmluYWwgU3RyaW5nIGtleSA9IChTdHJpbmcpIGl0ZXIubmV4dCgpOworCQkJCUlkZW50aWZpYWJsZSBub2RlID0gbnVsbDsKKwkJCQlVUkkgbG9jVVJJID0gbnVsbDsKKwkJCQl0cnkgeworCQkJCQlsb2NVUkkgPSBVUkkuY3JlYXRlVVJJKGtleSk7CisJCQkJCW5vZGUgPSBncmFwaC5nZXROb2RlKGxvY1VSSSk7CisJCQkJCWlmIChub2RlICE9IG51bGwpIHsKKwkJCQkJCXJldFZhbC5hZGQobm9kZSk7CisJCQkJCX0KKwkJCQl9IGNhdGNoIChmaW5hbCBFeGNlcHRpb24gZSkgeworCQkJCQlvcmcuZWNsaXBzZS5zdGVtLnV0aWwubG9nZ2Vycy5BY3RpdmF0b3IubG9nRXJyb3IoCisJCQkJCQkJIkxvZ2dlclZpZXdlci5nZXRJZGVudGlmaWFibGVzSW5TaW11bGF0aW9uKCkgRXJyb3Igc2V0dGluZyBJZGVudGlmaWFibGUgdG8gIgorCQkJCQkJCQkJKyBrZXkgKyAiICIsIGUpOworCQkJCX0KKwkJCX0vLyB3aGlsZSBsb2NhdGlvbnMgdG8gbW9uaXRvcgorCisJCX0vLyBncmFwaCBub3QgbnVsbAorCisJCXJldHVybiByZXRWYWw7CisJfS8vIGdldElkZW50aWZpYWJsZXNJblNpbXVsYXRpb24KKwkKKwkKKwkvKioKKwkgKiBjbGVhbnMgdXAgb2xkIGRpc3BsYXlzCisJICogCisJICogQHBhcmFtIGRlZnVuY3RJZGVudGlmaWFibGVzCisJICovCisJcHJpdmF0ZSB2b2lkIGNsZWFudXAoU2V0IGRlZnVuY3RJZGVudGlmaWFibGVzLCBJU2ltdWxhdGlvbiByZW1vdmVkU2ltdWxhdGlvbikgeworCQlpZihkZWZ1bmN0SWRlbnRpZmlhYmxlcyE9bnVsbCkgeworCQkJCisJCQlJdGVyYXRvciBpdGVyID0gZGVmdW5jdElkZW50aWZpYWJsZXMuaXRlcmF0b3IoKTsKKwkJCXdoaWxlKChpdGVyIT1udWxsKSYmKGl0ZXIuaGFzTmV4dCgpKSkgeworCQkJCUlkZW50aWZpYWJsZSBpZGVudCA9IChJZGVudGlmaWFibGUpaXRlci5uZXh0KCk7CisJCQkJaWYgKG5vT3RoZXJTaW11bGF0aW9uQ29udGFpbnMoaWRlbnQscmVtb3ZlZFNpbXVsYXRpb24pKSBtb25pdG9yU2V0LnJlbW92ZShpZGVudC5nZXRVUkkoKS50b1N0cmluZygpKTsKKwkJCX0gLy8gd2hpbGUKKwkJCQkJCisJCQkJLypmaW5hbCBDb250cm9sW10gYWxsQ29udHJvbHMgPSBjb21wb3NpdGUuZ2V0Q2hpbGRyZW4oKTsKKwkJCQlmb3IgKGZpbmFsIENvbnRyb2wgZWxlbWVudCA6IGFsbENvbnRyb2xzKSB7CisJCQkJCWZpbmFsIExvZ2dlckNvbnRyb2wgbG9nZ2VyQ29udHJvbCA9IChMb2dnZXJDb250cm9sKSBlbGVtZW50OworCQkJCQlmaW5hbCBJZGVudGlmaWFibGUgdGVzdElkZW50aWZpYWJsZSA9IGxvZ2dlckNvbnRyb2wuZ2V0SWRlbnRpZmlhYmxlKCk7CisJCQkJCWlmICgodGVzdElkZW50aWZpYWJsZT09bnVsbCl8fCghZGVmdW5jdElkZW50aWZpYWJsZXMuY29udGFpbnModGVzdElkZW50aWZpYWJsZSkpKSB7CisJCQkJCQkvLyBkaXNwb3NlIGlmIHdlIGtub3cgaXQgaXMgdGhlIHJlbW92ZWQgc2ltdWxhdGlvbgorCQkJCQkJaWYobG9nZ2VyQ29udHJvbC5zaW11bGF0aW9uLmdldFNlcXVlbmNlTnVtYmVyKCk9PXJlbW92ZWRTaW11bGF0aW9uLmdldFNlcXVlbmNlTnVtYmVyKCkpIGxvZ2dlckNvbnRyb2wucmVtb3ZlKCk7CisJCQkJCX0gLy8gaWYKKwkJCQl9IC8vIGZvciBlYWNoIExvZ2dlckNvbnRyb2wKKwkJCQkqLworCQl9Ly8gaWYgc2V0IG5vdCBudWxsCisJCQorCX0vLyBjbGVhbnVwCisKKwlwcm90ZWN0ZWQgdm9pZCByZW1vdmVJZGVudGlmaWFibGUoZmluYWwgSWRlbnRpZmlhYmxlIGlkZW50KSB7CisJCS8vIEFueSBzaW11bGF0aW9ucyB0byByZW1vdmU/CisJCWlmIChpZGVudCAhPSBudWxsKSB7CisJCQkvLyBZZXMKKwkJCUl0ZXJhdG9yIGl0ZXIgPSBpZGVudGlmaWFibGVzVG9EaXNwbGF5TWFwLmtleVNldCgpLml0ZXJhdG9yKCk7CisJCQl3aGlsZSAoKGl0ZXIgIT0gbnVsbCkgJiYgKGl0ZXIuaGFzTmV4dCgpKSkgeworCQkJCUlTaW11bGF0aW9uIHNpbSA9IChJU2ltdWxhdGlvbikgaXRlci5uZXh0KCk7CisJCQkJU2V0PElkZW50aWZpYWJsZT4gaWRlbnRpZmlhYmxlc1RvRGlzcGxheSA9IGlkZW50aWZpYWJsZXNUb0Rpc3BsYXlNYXAKKwkJCQkJCS5nZXQoc2ltKTsKKwkJCQlpZGVudGlmaWFibGVzVG9EaXNwbGF5LnJlbW92ZShpZGVudCk7CisJCQl9CisJCQkvLyBwcmVmZXJlbmNlIHN0YXRlIGhhcyBjaGFuZ2VkCisJCQlzYXZlUHJlZmVyZW5jZVN0YXRlKCk7CisJCX0gLy8gaWYKKwl9IC8vIHJlbW92ZUZyb21EaXNwbGF5ZWRTaW11bGF0aW9uU2V0CisKKwkKKwlwcm90ZWN0ZWQgYm9vbGVhbiBub090aGVyU2ltdWxhdGlvbkNvbnRhaW5zKGZpbmFsIElkZW50aWZpYWJsZSBpZGVudCwgZmluYWwgSVNpbXVsYXRpb24gcmVtb3ZlZFNpbSkgeworCQkvLyBBbnkgc2ltdWxhdGlvbnMgdG8gcmVtb3ZlPworCQlpZiAoaWRlbnQgIT0gbnVsbCkgeworCQkJLy8gWWVzCisJCQlJdGVyYXRvciBpdGVyID0gaWRlbnRpZmlhYmxlc1RvRGlzcGxheU1hcC5rZXlTZXQoKS5pdGVyYXRvcigpOworCQkJd2hpbGUgKChpdGVyICE9IG51bGwpICYmIChpdGVyLmhhc05leHQoKSkpIHsKKwkJCQlJU2ltdWxhdGlvbiBzaW0gPSAoSVNpbXVsYXRpb24pIGl0ZXIubmV4dCgpOworCQkJCWlmIChzaW0uZ2V0U2VxdWVuY2VOdW1iZXIoKSE9IHJlbW92ZWRTaW0uZ2V0U2VxdWVuY2VOdW1iZXIoKSkgeworCQkJCQlTZXQ8SWRlbnRpZmlhYmxlPiBpZGVudGlmaWFibGVzVG9EaXNwbGF5ID0gaWRlbnRpZmlhYmxlc1RvRGlzcGxheU1hcC5nZXQoc2ltKTsKKwkJCQkgICAgaWYgKGlkZW50aWZpYWJsZXNUb0Rpc3BsYXkuY29udGFpbnMoaWRlbnQpKSByZXR1cm4gZmFsc2U7CisJCQkJfQorCQkJfQorCQl9IC8vIGlmCisJCXJldHVybiB0cnVlOworCX0gLy8gcmVtb3ZlRnJvbURpc3BsYXllZFNpbXVsYXRpb25TZXQKKworCQorCS8qKgorCSAqIENyZWF0ZSBhbmQgZGlzcG9zZSBvZiBNYXBDb250cm9scyBhcyBuZWNlc3NhcnkgdG8gZGlzcGxheSB0aGUgc2VsZWN0ZWQKKwkgKiBTaW11bGF0aW9ucy4KKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBwb3B1bGF0ZVZpZXcoSVNpbXVsYXRpb24gW10gbmV3U2ltdWxhdGlvbnMpIHsKKworCQl0cnkgeworCQkJLy8gcHJvYmxlbSBoZXJlIHdoZW4gd2Ugc3RhcnQgdXAKKwkJCS8vIEFyZSB3ZSBkb25lPworCQkJaWYgKGNvbXBvc2l0ZS5pc0Rpc3Bvc2VkKCkpIHsKKwkJCQkvLyBZZXMKKwkJCQlyZXR1cm47CisJCQl9IC8vIGlmCisKKwkJCXNlbGVjdGlvbiA9IG51bGw7CisKKwkJCWlmICgobmV3U2ltdWxhdGlvbnMgIT0gbnVsbCkgJiYgKG5ld1NpbXVsYXRpb25zLmxlbmd0aCA+PSAxKSkgeworCisJCQkJc3luY2hyb25pemVkICh0aGlzKSB7CisJCQkJCWZvciAoaW50IGkgPSAwOyBpIDwgbmV3U2ltdWxhdGlvbnMubGVuZ3RoOyBpKyspIHsKKwkJCQkJCUlTaW11bGF0aW9uIHNpbXVsYXRpb24gPSBuZXdTaW11bGF0aW9uc1tpXTsKKwkJCQkJCVNjZW5hcmlvIHNjZW5hcmlvID0gc2ltdWxhdGlvbi5nZXRTY2VuYXJpbygpOworCQkJCQkJU3RyaW5nIHNjZW5hcmlvVVJMID0gc2NlbmFyaW8uZ2V0VVJJKCkudG9TdHJpbmcoKTsKKwkJCQkJCVN0cmluZyBkaXJQcmVmaXggPSBVdGlsLmdldExvZ2dpbmdGb2xkZXIoc2NlbmFyaW9VUkwpOworCQkJCQkJCisJCQkJCQlTdHJpbmcgdW5pcXVlSUQgPSBERUZBVUxUX0lEOworCQkJCQkJCisJCQkJCQlpZiAoc2ltdWxhdGlvbiAhPSBudWxsKSB7CisJCQkJCQkJdW5pcXVlSUQgPSBzaW11bGF0aW9uLmdldFVuaXF1ZUlEU3RyaW5nKCk7CisJCQkJCQkJd2hpbGUodW5pcXVlSUQ9PW51bGwpIHsKKwkJCQkJCQkJdW5pcXVlSUQgPSBzaW11bGF0aW9uLmdldFVuaXF1ZUlEU3RyaW5nKCk7CisJCQkJCQkJfQorCQkJCQkJfQorCQkJCQkJU3RyaW5nIGRpcmVjdG9yeU5hbWUgPSBkaXJQcmVmaXggKyBzZXArdW5pcXVlSUQgKyBzZXA7CisJCQkJCQkKKwkJCQkJCUZpbGUgZGlyID0gbmV3IEZpbGUoZGlyZWN0b3J5TmFtZSk7CisJCQkJCQlpZighZGlyLmV4aXN0cygpKQorCQkJCQkJCWRpci5ta2RpcnMoKTsKKwkJCQkJCQorCQkJCQkJaWYodGhpcy5odG1sU3VtbWFyeU9uKSB7CisJCQkJCQkJLy8gVEVTVCB0aGUgbmV3IEhUTUwgc2NlbmFyaW8gcGFnZSB3cml0ZXIgaGVyZQorCQkJCQkJCS8vIFRPRE8gc2hvdWxkIGFsc28gYmUgYWJsZSB0byBkbyB0aGlzIChvbmNlKSBkdXJpbmcgcnVuCisJCQkJCQkJLy8gVE9ETyBwcm9iYWJseSBuZWVkIGFuIGh0bWwgZG9uZSBzdGF0dXMKKwkJCQkJCQlIdG1sU2NlbmFyaW9QYWdlIGhzcCA9IG5ldyBIdG1sU2NlbmFyaW9QYWdlKHNjZW5hcmlvLCBkaXJlY3RvcnlOYW1lKTsKKwkJCQkJCX0vL2lmIGh0bWwgc3VtbWFyeSBpcyBvbgorCQkJCQkgICAgCisJCQkJCQlpZih0aGlzLmxvZ2dpbmdPbikgeworCQkJCQkJCUVMaXN0PERlY29yYXRvcj4gZGVjb3JhdG9ycyA9IHNpbXVsYXRpb24uZ2V0U2NlbmFyaW8oKS5nZXRDYW5vbmljYWxHcmFwaCgpLmdldERlY29yYXRvcnMoKTsKKwkJCQkJCQlmb3IoRGVjb3JhdG9yIGRlYzpkZWNvcmF0b3JzKSB7CisJCQkJCQkJCWlmKGRlYyBpbnN0YW5jZW9mIEludGVncmF0aW9uRGVjb3JhdG9yICYmICEoZGVjIGluc3RhbmNlb2YgQWdncmVnYXRpbmdTSURpc2Vhc2VNb2RlbCkpIHsKKwkJCQkJCQkJCUludGVncmF0aW9uRGVjb3JhdG9yIGRtID0gKEludGVncmF0aW9uRGVjb3JhdG9yKWRlYzsKKwkJCQkJCQkJCS8vU3RyaW5nIGRpc2Vhc2VOYW1lID0gZG0uZ2V0RGlzZWFzZU5hbWUoKTsKKwkJCQkJCQkJCWZpbmFsIExvZ2dlckNvbnRyb2wgbG9nZ2VyQ29udHJvbCA9IGxjZi5jcmVhdGUoY29tcG9zaXRlLCBkaXJlY3RvcnlOYW1lLCBzaW11bGF0aW9uLCBkbSwgY3N2UGFyYW1ldGVyU3VtbWFyeU9uKTsKKwkJCQkJCQkJCWxvZ2dlckNvbnRyb2wuYWRkU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyKHRoaXMpOworCQkJCQkJCQkJbG9nZ2VyQ29udHJvbC5jcmVhdGVUb3BDb21wb3NpdGUoY29tcG9zaXRlKTsKKwkJCQkJCQkJfSAvLyBEaXNlYXNlTW9kZWwKKwkJCQkJCQl9IC8vIEZvciBlYWNoIGRlY29yYXRvcgorCQkJCQkJfS8vIGlzIGRhdGEgbG9nZ2luZyBvbgorCQkJCQkJCisJCQkJCQkKKwkJCQkJCQorCQkJCQl9IC8vIGZvciBhbGwgc2ltdWxhdGlvbnMKKworCQkJCX0vLyBzeW5jaHJvbml6ZWQodGhpcykKKworCQkJfS8vIGlmIChzaW11bGF0aW9ucy5zaXplKCkgPj0xKQorCisJCQljb21wb3NpdGUubGF5b3V0KHRydWUsIHRydWUpOworCQkJY29tcG9zaXRlLnJlZHJhdygpOworCQl9IGNhdGNoIChFeGNlcHRpb24gZSkgeworCQkJQWN0aXZhdG9yLmxvZ0Vycm9yKCJFeGNlcHRpb24gaW4gUG9wdWxhdGVWaWV3KCkgIiwgZSk7CisJCX0KKwl9IC8vIHBvcHVsYXRlVmlldworCisJLyoqCisJICogQWRkcyBhbGwgaWRlbnRpZmlhYmxlIHRvIHRoZSBtYXAgYnkgdGhlIHNpbXVsYXRpb24gdGhleSBhcmUgaW4KKwkgKiBAcGFyYW0gc2ltdWxhdGlvbnMKKwkgKiAKKwkgKi8KKwlwcml2YXRlIHZvaWQgYWRkQWxsSWRlbnRpZmlhYmxlc0J5U2ltdWxhdGlvbihmaW5hbCBMaXN0PElTaW11bGF0aW9uPiBzaW11bGF0aW9uTGlzdCkgeworCQkKKwkJZm9yIChpbnQgaSA9IDA7IGkgPCBzaW11bGF0aW9uTGlzdC5zaXplKCk7IGkrKykgeworCQkJZmluYWwgSVNpbXVsYXRpb24gc2ltdWxhdGlvbiA9IHNpbXVsYXRpb25MaXN0LmdldChpKTsKKwkJCQorCQkJU2V0PElkZW50aWZpYWJsZT4gaWRlbnRpZmlhYmxlc1RvRGlzcGxheVNldCA9Z2V0SWRlbnRpZmlhYmxlU2V0KHNpbXVsYXRpb24pOworCisJCQkvKgorCQkJICogVGhlIGRlZmF1bHQgbW9uaXRvciBsb2NhdGlvbnMgYWx3YXlzIGNvbnRhaW5zIHRoZSB3b3JrcworCQkJICogKFVSSXN1ZmZpeCA9IFpaWiwgb3IgTW9uaXRvclByZWZlcmVuY2VzLkRFRkFVTFRfTE9DQVRJT05fSUQKKwkJCSAqIEhvd2V2ZXIsIGlmIGEgc2NlbmFyaW8gY29udGFpbnMgb25seSBvbmUgY291bnRyeSB0aGVuIHRoZSBaWloKKwkJCSAqIG5vZGVzIGRvZXMgbm90IGV4aXN0IGFuZCB0aGUgdG9wIGxldmVsIG5vZGUgd2lsbCBiZSB0aGUgY291bnRyeQorCQkJICogY29kZS4gU28gaGVyZSB3ZSBjaGVjayB0aGF0IHRoZSBaWlogbm9kZSBleGlzdHMuIElmIGl0IGRvZXMgbm90CisJCQkgKiBleGlzdCB3ZSBsb29rIGZvciB0aHJlZSBsZXR0ZXIgY291bnRyeSBjb2RlKHMpIGFuZCBhZGQgdGhhdAorCQkJICogKHRob3NlIC0gYnV0IHRoZXJlIHNob3VsZCBiZSBvbmx5IG9uZSkgdG8gdGhlIGxpc3QuCisJCQkgKi8KKwkJCWZpbmFsIEdyYXBoIGdyYXBoID0gc2ltdWxhdGlvbi5nZXRTY2VuYXJpbygpLmdldENhbm9uaWNhbEdyYXBoKCk7CisJCQkvKgorCQkJICogdGhpcyBjb2RlIHdhcyB1c2VkIHRvIGF2b2lkIGEgYnVnIHRoYXQgc2hvdWxkIG5vdyBiZSBmaXhlZAorCQkJICogCisJCQkgKiBpZiAoZ3JhcGggPT0gbnVsbCkgeyBBY3RpdmF0b3IubG9nSW5mb3JtYXRpb24oImdyYXBoIGlzIG51bGwiKTsgLy8gdHJ5CisJCQkgKiBzZXZlcmFsIHRpbWVzIGZvciAoaW50IGlpID0gMCA7IGlpIDwgNTA7IGlpICsrKSB7IHRyeSB7CisJCQkgKiBUaHJlYWQuc2xlZXAoMTAwKTsgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsgLy8gbm90aGluZyB9IGdyYXBoID0KKwkJCSAqIHNpbXVsYXRpb24uZ2V0U2NlbmFyaW8oKS5nZXRDYW5vbmljYWxHcmFwaCgpOyBpZiAoZ3JhcGggIT0gbnVsbCkKKwkJCSAqIGJyZWFrOyB9Ly8gZm9yIDEwIHRyeXMgfSAvL2lmIGdyYXBoIG51bGwKKwkJCSAqLworCisJCQlpZiAoZ3JhcGggIT0gbnVsbCkgeworCQkJLy8JZmluYWwgRU1hcCBhbGxOb2RlcyA9IGdyYXBoLmdldE5vZGVzKCk7CisJCQkvLwlmaW5hbCBTZXQgYWxsR3JhcGhVUklzID0gYWxsTm9kZXMua2V5U2V0KCk7CisJCQkvLwlmaW5hbCBVUkkgZGVmYXVsdFVSSSA9IE1vbml0b3JQcmVmZXJlbmNlcy5nZXREZWZhdWx0VVJJKCk7CisJCQkJCisKKwkJCQlmaW5hbCBJdGVyYXRvciBpdGVyID0gbW9uaXRvclNldC5pdGVyYXRvcigpOworCQkJCXdoaWxlICgoaXRlciAhPSBudWxsKSAmJiAoaXRlci5oYXNOZXh0KCkpKSB7CisJCQkJCWZpbmFsIFN0cmluZyBrZXkgPSAoU3RyaW5nKSBpdGVyLm5leHQoKTsKKwkJCQkJSWRlbnRpZmlhYmxlIG5vZGUgPSBudWxsOworCQkJCQlVUkkgbG9jVVJJID0gbnVsbDsKKwkJCQkJdHJ5IHsKKwkJCQkJCWxvY1VSSSA9IFVSSS5jcmVhdGVVUkkoa2V5KTsKKwkJCQkJCW5vZGUgPSBncmFwaC5nZXROb2RlKGxvY1VSSSk7CisJCQkJCQlpZiAobm9kZSAhPSBudWxsKSB7CisJCQkJCQkJaWRlbnRpZmlhYmxlc1RvRGlzcGxheVNldC5hZGQobm9kZSk7CisJCQkJCQl9CisJCQkJCX0gY2F0Y2ggKGZpbmFsIEV4Y2VwdGlvbiBlKSB7CisJCQkJCQlvcmcuZWNsaXBzZS5zdGVtLnV0aWwubG9nZ2Vycy5BY3RpdmF0b3IubG9nRXJyb3IoCisJCQkJCQkJCSJMb2dnZXJWaWV3ZXIuZ2V0SWRlbnRpZmlhYmxlc0luU2ltdWxhdGlvbigpIEVycm9yIHNldHRpbmcgSWRlbnRpZmlhYmxlIHRvICIKKwkJCQkJCQkJCQkrIGtleSArICIgIiwgZSk7CisJCQkJCX0KKwkJCQl9Ly8gd2hpbGUgbG9jYXRpb25zIHRvIG1vbml0b3IKKworCQkJfS8vIGdyYXBoIG5vdCBudWxsCisKKwkJfSAvLyBmb3IgYWxsIHNpbXVsYXRpb25zCisKKwl9CisJCisJLyoqCisJICogRmluZCBvdXQgd2hpY2ggc2ltdWxhdGlvbiBpcyBydW5uaW5nIHRoaXMgbm9kZQorCSAqIFRPRE8gQ2hlY2sgdGhpcy4gVGhpcyBtYXkgbm90IGJlIHVuaXF1ZSAtIHdlIG1heSBiZSBydW5uaW5nIHRoZSAKKwkgKiBzYW1lIHNjZW5hcmlvIHR3aWNlISEKKwkgKiBAcGFyYW0gc2ltdWxhdGlvbnMKKwkgKiBAcmV0dXJuCisJICovCisJcHJvdGVjdGVkIFN0cmluZyBnZXRTY2VuYXJpb05hbWUoSWRlbnRpZmlhYmxlIGlkZW50KSB7CisJCVN0cmluZyByZXRWYWwgPSAiTk9ERV9OT1RfRk9VTkQiOworCQlMaXN0PElTaW11bGF0aW9uPiBzaW11bGF0aW9uTGlzdCA9IHNpbXVsYXRpb25NYW5hZ2VyLmdldEFjdGl2ZVNpbXVsYXRpb25zKCk7CisJCWZvciAoaW50IGkgPSAwOyBpIDwgc2ltdWxhdGlvbkxpc3Quc2l6ZSgpOyBpKyspIHsKKwkJCWZpbmFsIElTaW11bGF0aW9uIHNpbXVsYXRpb24gPSBzaW11bGF0aW9uTGlzdC5nZXQoaSk7CisJCQkKKwkJCWZpbmFsIEdyYXBoIGdyYXBoID0gc2ltdWxhdGlvbi5nZXRTY2VuYXJpbygpLmdldENhbm9uaWNhbEdyYXBoKCk7CisJCQkKKwkJCWlmIChncmFwaCAhPSBudWxsKSB7CisJCQkJLy8gaXMgdGhpcyBub2RlIGluIHRoaXMgc2ltdWxhdGlvbj8KKwkJCQlmaW5hbCBJZGVudGlmaWFibGUgbm9kZSA9IGdyYXBoLmdldE5vZGUoaWRlbnQuZ2V0VVJJKCkpOworCQkJCWlmIChub2RlICE9IG51bGwpIHsKKwkJCQkgICAgLy8gZ3JhcGggY29udGFpbnMgbm9kZQorCQkJCQlyZXR1cm4gc2ltdWxhdGlvbi5nZXRTY2VuYXJpbygpLnRvU3RyaW5nKCk7CisJCQkJfS8vIG5vZGUgZXhpc3RzCisJCQl9Ly8gZ3JhcGggbm90IG51bGwKKwkJfSAvLyBmb3IgYWxsIHNpbXVsYXRpb25zCisJCXJldHVybiByZXRWYWw7CisJfQorCisJLyoqCisJICogQHBhcmFtIHNpbXVsYXRpb24KKwkgKiBAcmV0dXJuCisJICovCisJLypwcml2YXRlIGJvb2xlYW4gaXNEaXNwbGF5ZWQoZmluYWwgSWRlbnRpZmlhYmxlIGlkZW50aWZpYWJsZSwKKwkJCUlTaW11bGF0aW9uIHNpbXVsYXRpb24pIHsKKwkJYm9vbGVhbiByZXRWYWx1ZSA9IGZhbHNlOworCQlmaW5hbCBDb250cm9sW10gYWxsQ29udHJvbHMgPSBjb21wb3NpdGUuZ2V0Q2hpbGRyZW4oKTsKKwkJZm9yIChmaW5hbCBDb250cm9sIGVsZW1lbnQgOiBhbGxDb250cm9scykgeworCQkJZmluYWwgTG9nZ2VyQ29udHJvbCBsb2dnZXJDb250cm9sID0gKExvZ2dlckNvbnRyb2wpIGVsZW1lbnQ7CisKKwkJCWlmIChsb2dnZXJDb250cm9sLnNpbXVsYXRpb24uZ2V0U2VxdWVuY2VOdW1iZXIoKSA9PSBzaW11bGF0aW9uCisJCQkJCS5nZXRTZXF1ZW5jZU51bWJlcigpKSB7CisKKwkJCQlmaW5hbCBJZGVudGlmaWFibGUgdGVzdElkZW50aWZpYWJsZSA9IGxvZ2dlckNvbnRyb2wuZ2V0SWRlbnRpZmlhYmxlKCk7CisJCQkJaWYgKHRlc3RJZGVudGlmaWFibGUgIT0gbnVsbCYmdGVzdElkZW50aWZpYWJsZS5lcXVhbHMoaWRlbnRpZmlhYmxlKSkgeworCQkJCQlyZXRWYWx1ZSA9IHRydWU7CisJCQkJCWJyZWFrOworCQkJCX0gLy8gaWYKKworCQkJfSAvLyBpZiBjb250cm9sIGZvciBzYW1lIHNpbXVsYXRpb24KKworCQl9IC8vIGZvciBlYWNoIExvZ2dlckNvbnRyb2wKKwkJcmV0dXJuIHJldFZhbHVlOworCX0gLy8gaXNEaXNwbGF5ZWQKKyovCisJLyoqCisJICogc2F2ZSB0aGUgc3RhdGUgb2YgcHJlZmVycmVkIGxvY2F0aW9ucyB0byBtb25pdG9yCisJICovCisJcHJpdmF0ZSB2b2lkIHNhdmVQcmVmZXJlbmNlU3RhdGUoKSB7CisKKwkJLy8gd2UgbmVlZCB0byB3cml0ZSBwcmVmZXJlbmNlcyBieSBhY3RpdmUgc2ltdWxhdGlvbgorCQlMaXN0IGFsbFNpbXVsYXRpb25zID0gbnVsbDsKKwkJZmluYWwgU2V0PFN0cmluZz4gbm9kZXNJblNpbXVsYXRpb24gPSBuZXcgSGFzaFNldDxTdHJpbmc+KCk7CisJCWlmIChzaW11bGF0aW9uTWFuYWdlciAhPSBudWxsKSB7CisJCQlhbGxTaW11bGF0aW9ucyA9IHNpbXVsYXRpb25NYW5hZ2VyLmdldEFjdGl2ZVNpbXVsYXRpb25zKCk7CisJCX0KKwkJaWYgKChhbGxTaW11bGF0aW9ucyAhPSBudWxsKSAmJiAoYWxsU2ltdWxhdGlvbnMuc2l6ZSgpID49IDEpKSB7CisJCQlmb3IgKGludCBpID0gMDsgaSA8IGFsbFNpbXVsYXRpb25zLnNpemUoKTsgaSsrKSB7CisJCQkJbm9kZXNJblNpbXVsYXRpb24uY2xlYXIoKTsKKwkJCQlmaW5hbCBJU2ltdWxhdGlvbiBzaW0gPSAoSVNpbXVsYXRpb24pIGFsbFNpbXVsYXRpb25zLmdldChpKTsKKwkJCQlmaW5hbCBTdHJpbmcgc2NlbmFyaW9OYW1lID0gc2ltLmdldFNjZW5hcmlvKCkuZ2V0VVJJKCkKKwkJCQkJCS50b1N0cmluZygpOworCisJCQkJLy8gcmVjcmVhdGUgdGhlIHN1YnNlY3Rpb24gZm9yIHRoaXMgc2NlbmFyaW8gdXNpbmcgdGhlIGxvY2F0aW9ucworCQkJCS8vIG5vdyBiZWluZyBtb25pdG9yZWQKKwkJCQlmaW5hbCBJRGlhbG9nU2V0dGluZ3Mgc2VjdGlvbiA9IG5ldyBEaWFsb2dTZXR0aW5ncyhzY2VuYXJpb05hbWUpOworCisJCQkJZmluYWwgR3JhcGggZ3JhcGggPSBzaW0uZ2V0U2NlbmFyaW8oKS5nZXRDYW5vbmljYWxHcmFwaCgpOworCQkJCVNldDxJZGVudGlmaWFibGU+IGlkZW50aWZpYWJsZXNUb0Rpc3BsYXkgPSBnZXRJZGVudGlmaWFibGVTZXQoc2ltKTsKKwkJCQlmaW5hbCBJdGVyYXRvciBpdGVyID0gaWRlbnRpZmlhYmxlc1RvRGlzcGxheS5pdGVyYXRvcigpOworCQkJCXdoaWxlICgoaXRlciAhPSBudWxsKSAmJiAoaXRlci5oYXNOZXh0KCkpKSB7CisJCQkJCWZpbmFsIElkZW50aWZpYWJsZSBpZGVudCA9IChJZGVudGlmaWFibGUpIGl0ZXIubmV4dCgpOworCQkJCQlpZiAoaWRlbnQgIT0gbnVsbCkgeworCQkJCQkJLy8gaXMgdGhpcyBub2RlIGluIHRoaXMgc2ltdWxhdGlvbj8KKwkJCQkJCWZpbmFsIElkZW50aWZpYWJsZSBub2RlID0gZ3JhcGguZ2V0Tm9kZShpZGVudC5nZXRVUkkoKSk7CisJCQkJCQlpZiAobm9kZSAhPSBudWxsKSB7CisJCQkJCQkJZmluYWwgU3RyaW5nIGlkID0gaWRlbnQuZ2V0VVJJKCkudG9TdHJpbmcoKTsKKwkJCQkJCQlpZiAoaWQgIT0gbnVsbCkgeworCQkJCQkJCQlub2Rlc0luU2ltdWxhdGlvbi5hZGQoaWQpOworCQkJCQkJCX0KKwkJCQkJCX0gLy8gaWYgbm9kZSBpbiBzaW11bGF0aW9uCisJCQkJCX0KKworCQkJCX0vLyBhbGwgY3VycmVudGx5IGRpc3BsYXllZCBub2RlcworCisJCQkJZmluYWwgU3RyaW5nW10gbmV3UHJlZnMgPSBuZXcgU3RyaW5nW25vZGVzSW5TaW11bGF0aW9uLnNpemUoKV07CisJCQkJZmluYWwgSXRlcmF0b3IgaXRlcjIgPSBub2Rlc0luU2ltdWxhdGlvbi5pdGVyYXRvcigpOworCQkJCWludCBpY291bnQgPSAwOworCQkJCXdoaWxlICgoaXRlcjIgIT0gbnVsbCkgJiYgKGl0ZXIyLmhhc05leHQoKSkpIHsKKwkJCQkJbmV3UHJlZnNbaWNvdW50XSA9IChTdHJpbmcpIGl0ZXIyLm5leHQoKTsKKwkJCQkJaWNvdW50Kys7CisJCQkJfQorCisJCQkJc2VjdGlvbi5wdXQoTE9DQVRJT05fUFJFRkVSRU5DRV9LRVksIG5ld1ByZWZzKTsKKwkJCQlpZiAobWFzdGVyU2V0dGluZ3M9PW51bGwpIG1hc3RlclNldHRpbmdzID0gbmV3IERpYWxvZ1NldHRpbmdzKFJPT1RfS0VZKTsKKwkJCQltYXN0ZXJTZXR0aW5ncy5hZGRTZWN0aW9uKHNlY3Rpb24pOworCQkJCXRyeSB7CisJCQkJCW1hc3RlclNldHRpbmdzLnNhdmUoZ2V0UHJlZkZpbGVOYW1lKCkpOworCQkJCX0gY2F0Y2ggKGZpbmFsIElPRXhjZXB0aW9uIGlvZSkgeworCQkJCQlvcmcuZWNsaXBzZS5zdGVtLnV0aWwubG9nZ2Vycy5BY3RpdmF0b3IKKwkJCQkJCQkubG9nRXJyb3IoImV4Y2VwdGlvbiB3cml0aW5nIGZpbGUgWyIKKwkJCQkJCQkJCSsgaW9lLmdldE1lc3NhZ2UoKSArICJdIiwgaW9lKTsKKwkJCQl9CisKKwkJCX0gLy8gZm9yIGFsbCBzaW11bGF0aW9ucworCQl9Ly8gaWYgbm90IG51bGwKKworCX0vLyBzYXZlUHJlZmVyZW5jZVN0YXRlCisJCisJLyoqCisJICogcmV0dXJucyB0aGUgU2V0PElkZW50aWZpYWJsZT4gaW4gdGhlIGlkZW50aWZpYWJsZXNUb0Rpc3BsYXlNYXAKKwkgKiBjcmVhdGVzIGl0IGlmIGl0IGRvZXMgbm90IGV4aXN0LgorCSAqIEBwYXJhbSBzaW11bGF0aW9uCisJICogQHJldHVybgorCSAqLworCVNldDxJZGVudGlmaWFibGU+IGdldElkZW50aWZpYWJsZVNldChJU2ltdWxhdGlvbiBzaW11bGF0aW9uKSB7CisJCWlmKCFpZGVudGlmaWFibGVzVG9EaXNwbGF5TWFwLmNvbnRhaW5zS2V5KHNpbXVsYXRpb24pKSB7CisJCQlTZXQ8SWRlbnRpZmlhYmxlPiBpZGVudGlmaWFibGVzVG9EaXNwbGF5U2V0ID0gbmV3IExpbmtlZEhhc2hTZXQ8SWRlbnRpZmlhYmxlPigpOworCQkJaWRlbnRpZmlhYmxlc1RvRGlzcGxheU1hcC5wdXQoc2ltdWxhdGlvbixpZGVudGlmaWFibGVzVG9EaXNwbGF5U2V0KTsKKwkJfQorCQlyZXR1cm4gaWRlbnRpZmlhYmxlc1RvRGlzcGxheU1hcC5nZXQoc2ltdWxhdGlvbik7CisJfQorCQorCS8qKgorCSAqIFJlbW92ZXMgd2hpdGVzcGFjZSwgJywnLCAnLicsIGV0Yy4KKwkgKiBAcGFyYW0gcworCSAqIEByZXR1cm4gYSBmaWx0ZXJlZCBzdHJpbmcKKwkgKi8KKwlwdWJsaWMgc3RhdGljIFN0cmluZyBuYW1lRmlsdGVyIChTdHJpbmcgcykgeworCQlTdHJpbmcgczEgPSBzLnRyaW0oKTsKKwkJczEgPSBzMS5yZXBsYWNlKCciJywnICcpOworCQlzMSA9IHMxLnJlcGxhY2VBbGwoIiAiLCIiKTsKKwkJczEgPSBzMS5yZXBsYWNlKCcsJywnXycpOworCQlzMSA9IHMxLnJlcGxhY2UoJy4nLCdfJyk7CisJCXJldHVybiBzMTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIG1ldGhvZCB1c2VzIERpYWxvZyBzZXR0aW5ncyB0byBsb2FkIGFuZCB1cGRhdGUgCisJICogdGhlIG1vbml0b3JTZXQgd2hpY2ggY29udGFpbnMgKGZpbHRlcnMpIHRoZSB2YWxpZCBsaXN0IAorCSAqIG9mIHByZWZlcnJlZCBJZGVudGlmaWFibGVzIHRvIGRpc3BsYXkgZnJvbSB0aGUgCisJICogdGhlIHN0YXRlIG9mIHRoZSBwcmV2aW91c2x5IHNhdmVkIHByZWZlcmVuY2Ugc3RhdGUuCisJICogZm9yIHNpbXVsYXRpb25zIHRoYXQgYXJlIHJ1bm5pbmcKKwkgKiAKKwkgKiBAcGFyYW0gcnVubmluZ1NpbXVsYXRpb25zCisJICovCisJcHJpdmF0ZSB2b2lkIHVwZGF0ZVByZWZlcmVuY2VTdGF0ZShMaXN0IHJ1bm5pbmdTaW11bGF0aW9ucykgeworCisJCS8vIHdoYXQgdHlwZSBvZiB2aWV3ZXI/IFRpbWVTZXJpZXMsIFBoYXNlU3BhY2UgZXRjCisJCWlmIChtYXN0ZXJTZXR0aW5ncz09bnVsbCkgcmVhZE1hc3RlclNldHRpbmdzRnJvbUZpbGUoKTsKKwkJCisJCQorCQkKKwkJaWYgKChydW5uaW5nU2ltdWxhdGlvbnMgIT0gbnVsbCkgJiYgKHJ1bm5pbmdTaW11bGF0aW9ucy5zaXplKCkgPj0gMSkpIHsKKwkJCWZvciAoaW50IGkgPSAwOyBpIDwgcnVubmluZ1NpbXVsYXRpb25zLnNpemUoKTsgaSsrKSB7CisJCQkJZmluYWwgSVNpbXVsYXRpb24gc2ltID0gKElTaW11bGF0aW9uKSBydW5uaW5nU2ltdWxhdGlvbnMuZ2V0KGkpOworCQkJCWZpbmFsIFN0cmluZyBzY2VuYXJpb05hbWUgPSBzaW0uZ2V0U2NlbmFyaW8oKS5nZXRVUkkoKQorCQkJCQkJLnRvU3RyaW5nKCk7CisKKwkJCQkKKwkJCQlJRGlhbG9nU2V0dGluZ3Mgc2VjdGlvbiA9IG1hc3RlclNldHRpbmdzCisJCQkJCQkuZ2V0U2VjdGlvbihzY2VuYXJpb05hbWUpOworCQkJCWlmIChzZWN0aW9uID09IG51bGwpIHsKKwkJCQkJc2VjdGlvbiA9IG5ldyBEaWFsb2dTZXR0aW5ncyhzY2VuYXJpb05hbWUpOworCQkJCQltYXN0ZXJTZXR0aW5ncy5hZGRTZWN0aW9uKHNlY3Rpb24pOworCQkJCX0KKwkJCQkvLyBub3cgYWRkIHRoZSBwcmVmZXJlbmNlcyB0byB0aGUgbW9uaXRvclNldAorCQkJCWZpbmFsIFN0cmluZ1tdIGFsbElEcyA9IHNlY3Rpb24KKwkJCQkJCS5nZXRBcnJheShMT0NBVElPTl9QUkVGRVJFTkNFX0tFWSk7CisJCQkJaWYgKGFsbElEcyAhPSBudWxsKSB7CisJCQkJCWZvciAoZmluYWwgU3RyaW5nIGVsZW1lbnQgOiBhbGxJRHMpIHsKKwkJCQkJCW1vbml0b3JTZXQuYWRkKGVsZW1lbnQpOworCQkJCQl9Ly8gZm9yIGFsbElEcworCisJCQkJfS8vIGlmIG5vdCBudWxsCisKKwkJCX0vLyBmb3IgYWxsIHNpbXVsYXRpb25zCisJCX0vLyBpZiBhY3RpdmUgc2ltdWxhdGlvbnMKKworCX0vLyB1cGRhdGVQcmVmZXJlbmNlU3RhdGUKKwkKKwkvKioKKwkgKiBnZXQgdGhlIERpYWxvZ1NldHRpbmdzIGZyb20gdGhlIGZpbGUKKwkgKi8KKwlwdWJsaWMgdm9pZCByZWFkTWFzdGVyU2V0dGluZ3NGcm9tRmlsZSgpIHsKKwkJbWFzdGVyU2V0dGluZ3MgPSBuZXcgRGlhbG9nU2V0dGluZ3MoUk9PVF9LRVkpOworCisJICAgIFN0cmluZyBmaWxlbmFtZSA9IGdldFByZWZGaWxlTmFtZSgpOworCQlmaW5hbCBGaWxlIGYgPSBuZXcgRmlsZShmaWxlbmFtZSk7CisJCWlmIChmLmV4aXN0cygpKSB7CisJCQl0cnkgeworCQkJCW1hc3RlclNldHRpbmdzLmxvYWQoZmlsZW5hbWUpOworCQkJfSBjYXRjaCAoZmluYWwgSU9FeGNlcHRpb24gaW9lKSB7CisJCQkJb3JnLmVjbGlwc2Uuc3RlbS51dGlsLmxvZ2dlcnMuQWN0aXZhdG9yLmxvZ0Vycm9yKAorCQkJCQkJImV4Y2VwdGlvbiBsb2FkaW5nIGZpbGUgWyIgKyBpb2UuZ2V0TWVzc2FnZSgpCisJCQkJCQkJCSsgIl0iLCBpb2UpOworCQkJfQorCQl9IGVsc2UgeworCQkJLy8gZWxzZSBjcmVhdGUgaXQKKwkJCXRyeSB7CisJCQkJbWFzdGVyU2V0dGluZ3Muc2F2ZShmaWxlbmFtZSk7CisJCQl9IGNhdGNoIChmaW5hbCBJT0V4Y2VwdGlvbiBpb2UpIHsKKwkJCQlvcmcuZWNsaXBzZS5zdGVtLnV0aWwubG9nZ2Vycy5BY3RpdmF0b3IubG9nRXJyb3IoCisJCQkJCQkiZXhjZXB0aW9uIGNyZWF0aW5nIGZpbGUgWyIgKyBpb2UuZ2V0TWVzc2FnZSgpCisJCQkJCQkJCSsgIl0iLCBpb2UpOworCQkJfQorCQl9IC8vIGVsc2VpZiBmICFleGlzdHMKKwl9Ly8gcmVhZCBtYXN0ZXIgc2V0dHRpbmdzCisJCisJLyoqIAorCSAqIGdldHMgdGhlIHByZWZlcmVuY2VzIGZpbGUgbmFtZQorCSAqIEByZXR1cm4gZmlsZSBuYW1lIGNvbnRhaW5pbmcgdGhlIHVzZXJzIHByZWZlcmVuY2VzCisJICovCisJcHVibGljIFN0cmluZyBnZXRQcmVmRmlsZU5hbWUoKSB7CisJCWZpbmFsIFN0cmluZyBjb250cm9sQ2F0ZWdvcnkgPSBsY2YuZ2V0Q29udHJvbFR5cGUoKTsKKwkJLy8gR2V0IHRoZSByaWdodCBwcmVmZXJlbmNlIGZpbGUKKwkJU3RyaW5nIGZpbGVuYW1lID0gUEFUSC5hcHBlbmQoY29udHJvbENhdGVnb3J5ICsgIl8iICsgUkVQT1JUVklFV1BSRUZFUkVOQ0VTX0ZJTEVOQU1FKS50b09TU3RyaW5nKCk7CisJCXJldHVybiBmaWxlbmFtZTsKKwl9CisKKworCit9IC8vIExvZ2dlclZpZXdlcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWwubG9nZ2Vycy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91dGlsL2xvZ2dlcnMvdmlld3MvTWVzc2FnZXMuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsLmxvZ2dlcnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdXRpbC9sb2dnZXJzL3ZpZXdzL01lc3NhZ2VzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDEyNmM5OAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsLmxvZ2dlcnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdXRpbC9sb2dnZXJzL3ZpZXdzL01lc3NhZ2VzLmphdmEKQEAgLTAsMCArMSw0MiBAQAorLy8gTWVzc2FnZXMuamF2YQorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnV0aWwubG9nZ2Vycy52aWV3czsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNywgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqYXZhLnV0aWwuTWlzc2luZ1Jlc291cmNlRXhjZXB0aW9uOworaW1wb3J0IGphdmEudXRpbC5SZXNvdXJjZUJ1bmRsZTsKKworLyoqCisgKiBUaGlzIGNsYXNzIHJlcHJlc2VudHMKKyAqLworcHVibGljIGNsYXNzIE1lc3NhZ2VzIHsKKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgQlVORExFX05BTUUgPSAib3JnLmVjbGlwc2Uuc3RlbS51dGlsLmxvZ2dlcnMudmlld3MubWVzc2FnZXMiOyAvLyROT04tTkxTLTEkCisKKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBSZXNvdXJjZUJ1bmRsZSBSRVNPVVJDRV9CVU5ETEUgPSBSZXNvdXJjZUJ1bmRsZQorCQkJLmdldEJ1bmRsZShCVU5ETEVfTkFNRSk7CisKKwlwcml2YXRlIE1lc3NhZ2VzKCkgeworCQkvLyBOb3RoaW5nCisJfQorCisJLyoqCisJICogQHBhcmFtIGtleQorCSAqIEByZXR1cm4gdGhlIHN0cmluZyBtYXRjaGluZyB0aGUga2V5CisJICovCisJcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0U3RyaW5nKGZpbmFsIFN0cmluZyBrZXkpIHsKKwkJdHJ5IHsKKwkJCXJldHVybiBSRVNPVVJDRV9CVU5ETEUuZ2V0U3RyaW5nKGtleSk7CisJCX0gY2F0Y2ggKGZpbmFsIE1pc3NpbmdSZXNvdXJjZUV4Y2VwdGlvbiBlKSB7CisJCQlyZXR1cm4gJyEnICsga2V5ICsgJyEnOworCQl9CisJfQorfSAvLyBNZXNzYWdlcwpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWwubG9nZ2Vycy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91dGlsL2xvZ2dlcnMvdmlld3MvTmV3Q1NWTG9nV3JpdGVyLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbC5sb2dnZXJzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3V0aWwvbG9nZ2Vycy92aWV3cy9OZXdDU1ZMb2dXcml0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42Y2RjYTEwCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWwubG9nZ2Vycy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91dGlsL2xvZ2dlcnMvdmlld3MvTmV3Q1NWTG9nV3JpdGVyLmphdmEKQEAgLTAsMCArMSw4MjYgQEAKKy8vIENTVkxvZ1dyaXRlcgorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnV0aWwubG9nZ2Vycy52aWV3czsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNywyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGphdmEuaW8uQnVmZmVyZWRXcml0ZXI7CitpbXBvcnQgamF2YS5pby5GaWxlOworaW1wb3J0IGphdmEuaW8uRmlsZVdyaXRlcjsKK2ltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOworaW1wb3J0IGphdmEudGV4dC5TaW1wbGVEYXRlRm9ybWF0OworaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7CitpbXBvcnQgamF2YS51dGlsLkNhbGVuZGFyOworaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOworaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uczsKK2ltcG9ydCBqYXZhLnV0aWwuQ29tcGFyYXRvcjsKK2ltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKK2ltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CitpbXBvcnQgamF2YS51dGlsLkxvY2FsZTsKK2ltcG9ydCBqYXZhLnV0aWwuTWFwOworaW1wb3J0IGphdmEudXRpbC5NYXAuRW50cnk7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FU3RydWN0dXJhbEZlYXR1cmU7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuQ29tcG9zZWRBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbVByb3BlcnR5RGVzY3JpcHRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbVByb3BlcnR5U291cmNlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uYWRhcHRlcnMudGltZS5UaW1lUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5Db21tb25QYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5EeW5hbWljTGFiZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkludGVncmF0aW9uTGFiZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkludGVncmF0aW9uTGFiZWxWYWx1ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguTm9kZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguTm9kZUxhYmVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5EZWNvcmF0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLkludGVncmF0aW9uRGVjb3JhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5TVEVNVGltZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmFkYXB0ZXJzLnJlbGF0aXZldmFsdWUuUmVsYXRpdmVWYWx1ZVByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuYWRhcHRlcnMucmVsYXRpdmV2YWx1ZS5SZWxhdGl2ZVZhbHVlUHJvdmlkZXJBZGFwdGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuYWRhcHRlcnMucmVsYXRpdmV2YWx1ZS5SZWxhdGl2ZVZhbHVlUHJvdmlkZXJBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuRGlzZWFzZU1vZGVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5EaXNlYXNlTW9kZWxMYWJlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmpvYnMuc2ltdWxhdGlvbi5JU2ltdWxhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuUG9wdWxhdGlvbk1vZGVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5Qb3B1bGF0aW9uTW9kZWxMYWJlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnV0aWwubG9nZ2Vycy5BY3RpdmF0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS51dGlsLmxvZ2dlcnMucHJlZmVyZW5jZXMuUHJlZmVyZW5jZUNvbnN0YW50czsKKworLyoqCisgKiBBIGxvZyB3cml0ZXIgd3JpdGluZyBDU1YgZmlsZXMgY29udGFpbmluZyBkYXRhIGZvciBhIHNpbmdsZSBzdGF0ZSBvZiB0aGUKKyAqIHNpbXVsYXRpb24uIENvbHVtbnMgY29udGFpbiBsb2NhdGlvbiBJRHMgYXMgd2VsbCBhcyBzaW11bGF0aW9uIHRpbWUgYW5kCisgKiBpdGVyYXRpb24gaWQuCisgKi8KKworcHVibGljIGNsYXNzIE5ld0NTVkxvZ1dyaXRlciBleHRlbmRzIExvZ1dyaXRlciB7CisKKwkvLyBUaGUgYnVmZmVyIHNpemUgKHBlciBsb2cgZmlsZSkgdG8gdXNlLgorCXByaXZhdGUgZmluYWwgc3RhdGljIGludCBCVUZTWiA9IDEwMjQgKiAxMDI0OyAvLyAxIE1CCisKKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgQ1NWX0VYVCA9ICIuY3N2IjsKKworCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBBSVJfVFJBTlNQT1JUX1VSSV9EVVBMSUNBVEVfRkVBVFVSRSA9ICJub2RlL3RyYW5zcG9ydC9waXBlIjsKKworCS8qKgorCSAqIAorCSAqLworCXByaXZhdGUgU3RyaW5nIGRpcmVjdG9yeU5hbWU7CisKKwkvKioKKwkgKiAKKwkgKi8KKwlwcml2YXRlIFN0cmluZyBsb2dEYXRhT2JqZWN0TmFtZTsKKworCS8vIHByaXZhdGUgZmluYWwgc3RhdGljIFN0cmluZyBEVUJMSU5fQ09SRV9DTEFTUyA9ICJEdWJsaW5Db3JlIjsKKworCXByaXZhdGUgc3RhdGljIFNpbXBsZURhdGVGb3JtYXQgZGF0ZUZvcm1hdCA9IG5ldyBTaW1wbGVEYXRlRm9ybWF0KAorCQkJIkVFRSBkIE1NTSB5eSIsIExvY2FsZS5nZXREZWZhdWx0KCkpOworCisJLyoqCisJICogQ1NWIEhlYWRlciBMYWJlbCBmb3IgdGltZSBjb2x1bW4KKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBUSU1FX0xBQkVMID0gInRpbWUiOworCisJLyoqCisJICogQ1NWIEhlYWRlciBMYWJlbCBmb3IgaXRlcmF0aW9uIGNvbHVtbgorCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIElURVJBVElPTl9MQUJFTCA9ICJpdGVyYXRpb24iOworCisJLyoqCisJICogTmFtZSBvZiBhbGwgcnVuIHBhcmFtZXRlciBmaWxlcyAob25lIHBlciBzY2VuYXJpbyBmb2xkZXIpCisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUlVOX1BBUkFNRVRFUl9GSUxFX05BTUUgPSAicnVucGFyYW1ldGVycy5jc3YiOworCisJcHJpdmF0ZSBpbnQgaWNvdW50ID0gMDsKKworCS8qKgorCSAqIEZpbGVXcml0ZXJzIGFyZSBzdG9yZWQgaGVyZSwgb3JnYW5pemVkIGJ5IHN0YXRlIChlLmcuIFMsIEUsIEksIFIpIGFuZAorCSAqIGdlb2dyYXBoaWMgbGV2ZWwKKwkgKi8KKworCXByaXZhdGUgZmluYWwgTWFwPFN0YXRlTGV2ZWxNYXAsIEJ1ZmZlcmVkV3JpdGVyPiBmaWxlV3JpdGVyczsKKworCXByaXZhdGUgYm9vbGVhbiBsb2dJbnRlZ2VyczsKKworCS8qKgorCSAqIAorCSAqIEBwYXJhbSBkaXJOYW1lCisJICogQHBhcmFtIHNpbXVsYXRpb24KKwkgKiBAcGFyYW0gZG0KKwkgKiBAcGFyYW0gbG9nUGFyYW1ldGVycworCSAqLworCXB1YmxpYyBOZXdDU1ZMb2dXcml0ZXIoZmluYWwgU3RyaW5nIGRpck5hbWUsIGZpbmFsIElTaW11bGF0aW9uIHNpbXVsYXRpb24sCisJCQlJbnRlZ3JhdGlvbkRlY29yYXRvciBkbSwgYm9vbGVhbiBsb2dQYXJhbWV0ZXJzKSB7CisJCWxvZ0ludGVnZXJzID0gQWN0aXZhdG9yLmdldERlZmF1bHQoKS5nZXRQcmVmZXJlbmNlU3RvcmUoKQorCQkJCS5nZXRCb29sZWFuKFByZWZlcmVuY2VDb25zdGFudHMuTE9HX0lOVEVHRVJfUFJFRkVSRU5DRSk7CisJCWZpbGVXcml0ZXJzID0gbmV3IEhhc2hNYXA8U3RhdGVMZXZlbE1hcCwgQnVmZmVyZWRXcml0ZXI+KCk7CisJCXRoaXMuZGlyZWN0b3J5TmFtZSA9IGRpck5hbWU7CisKKwkJbmVlZHNIZWFkZXIgPSB0cnVlOworCQlkb25lID0gZmFsc2U7CisJCWljb3VudCA9IDA7CisKKwkJLy8gYXBwZW5kIHRoZSBkaXNlYXNlIG5hbWUgb3IgcG9wdWxhdGlvbiB0eXBlCisJCWlmIChkbSBpbnN0YW5jZW9mIERpc2Vhc2VNb2RlbCkgeworCQkJbG9nRGF0YU9iamVjdE5hbWUgPSAoKERpc2Vhc2VNb2RlbCkgZG0pLmdldERpc2Vhc2VOYW1lKCkudHJpbSgpOworCQl9IGVsc2UgaWYgKGRtIGluc3RhbmNlb2YgUG9wdWxhdGlvbk1vZGVsKSB7CisJCQlsb2dEYXRhT2JqZWN0TmFtZSA9ICgoUG9wdWxhdGlvbk1vZGVsKSBkbSkuZ2V0TmFtZSgpLnRyaW0oKTsKKwkJfQorCisJCWlmIChsb2dEYXRhT2JqZWN0TmFtZSA9PSBudWxsKSB7CisJCQlBY3RpdmF0b3IKKwkJCQkJLmxvZ0Vycm9yKAorCQkJCQkJCSJGYWlsZWQgdG8gZmluZCBhIGRpc2Vhc2Ugb3IgcG9wdWxhdGlvbiBtb2RlbC4gIENhbm5vdCBjcmVhdGUgQ1NWIExvZ2dlciIsCisJCQkJCQkJbnVsbCk7CisJCQlyZXR1cm47CisJCX0KKworCQl0aGlzLmRpcmVjdG9yeU5hbWUgKz0gbG9nRGF0YU9iamVjdE5hbWUgKyBzZXA7CisKKwkJLy8gcmVtb3ZlIGlsbGVnYWwgc3RyaW5ncworCQlkaXJlY3RvcnlOYW1lID0gZGlyZWN0b3J5TmFtZS5yZXBsYWNlQWxsKCJcIiIsICIiKTsKKworCQlmaW5hbCBGaWxlIGRpciA9IG5ldyBGaWxlKHRoaXMuZGlyZWN0b3J5TmFtZSk7CisKKwkJaWYgKCghZGlyLmV4aXN0cygpKSB8fCAoIWRpci5pc0RpcmVjdG9yeSgpKSkgeworCQkJLy8gY3JlYXRlIGl0LgorCQkJYm9vbGVhbiBzdWNjZXNzID0gZGlyLm1rZGlycygpOworCQkJaWYgKCFzdWNjZXNzKSB7CisJCQkJQWN0aXZhdG9yLmxvZ0Vycm9yKAorCQkJCQkJIkZhaWxlZCB0byBDcmVhdGUgRHJpZWN0b3J5IiArIGRpcmVjdG9yeU5hbWUsCisJCQkJCQluZXcgSU9FeGNlcHRpb24oIkZhaWxlZCB0byBDcmVhdGUgRHJpZWN0b3J5IgorCQkJCQkJCQkrIGRpcmVjdG9yeU5hbWUpKTsKKwkJCX0KKworCQl9CisKKwkJaWYgKGxvZ1BhcmFtZXRlcnMpIHsKKwkJCWxvZ1J1blBhcmFtZXRlcnMoZG0pOworCQl9CisKKwl9IC8vIE5ld0NTVkxvZ1dyaXRlcgorCisJLyoqCisJICogTXVzdCBpbXBsZW1lbnQgdGhpcyBtZXRob2QgdG8gbG9nIGRhdGEgaW4gcnVuIHRocmVhZAorCSAqIAorCSAqIEBwYXJhbSBydnAKKwkgKiAKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBsb2dIZWFkZXIoZmluYWwgUmVsYXRpdmVWYWx1ZVByb3ZpZGVyQWRhcHRlciBydnApIHsKKwkJLyoKKwkJICogVE9ETyBkbyB3ZSBuZWVkIGEgaGVhZGVyPworCQkgKi8KKwl9Ly8gbG9nIGhlYWRlcgorCisJLyoqCisJICogbG9nSGVhZGVyIE5ldyBtZXRob2QKKwkgKiAKKwkgKiBAcGFyYW0gc2ltCisJICogICAgICAgICAgICBTaW11bGF0aW9uIHRvIGxvZworCSAqIEBwYXJhbSBkbQorCSAqICAgICAgICAgICAgRGlzZWFzZSBNb2RlbAorCSAqIEBwYXJhbSBub2RlTGV2ZWxzCisJICogICAgICAgICAgICBMZXZlbCBpbmZvcm1hdGlvbiBmb3IgZWFjaCBub2RlIGluIHRoZSBzaW11bGF0aW9uCisJICogQHBhcmFtIHRpbWVQcm92aWRlcgorCSAqICAgICAgICAgICAgVGltZSBwcm92aWRlcgorCSAqLworCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgbG9nSGVhZGVyKElTaW11bGF0aW9uIHNpbSwgSW50ZWdyYXRpb25EZWNvcmF0b3IgZG0sCisJCQlNYXA8Tm9kZSwgSW50ZWdlcj4gbm9kZUxldmVscywgVGltZVByb3ZpZGVyIHRpbWVQcm92aWRlcikgeworCisJCWludCBoZWFkZXJJdGVtQ291bnQgPSAwOworCisJCVN0cmluZyBkaXJzID0gdGhpcy5kaXJlY3RvcnlOYW1lOworCQlGaWxlIGRpciA9IG5ldyBGaWxlKGRpcnMpOworCQlpZiAoIWRpci5leGlzdHMoKSkgeworCQkJYm9vbGVhbiBzdWNjZXNzID0gZGlyLm1rZGlycygpOworCQkJaWYgKCFzdWNjZXNzKSB7CisJCQkJQWN0aXZhdG9yLmxvZ0Vycm9yKAorCQkJCQkJIkZhaWxlZCB0byBDcmVhdGUgRHJpZWN0b3J5IiArIGRpcmVjdG9yeU5hbWUsCisJCQkJCQluZXcgSU9FeGNlcHRpb24oIkZhaWxlZCB0byBDcmVhdGUgRHJpZWN0b3J5IgorCQkJCQkJCQkrIGRpcmVjdG9yeU5hbWUpKTsKKwkJCX0KKwkJfQorCQkvLyBGaW5kIG1pbi9tYXggbGV2ZWwKKwkJaW50IG1pbkxldmVsID0gSW50ZWdlci5NQVhfVkFMVUU7CisJCWludCBtYXhMZXZlbCA9IC0xOworCQlmb3IgKGludCBsZXZlbCA6IG5vZGVMZXZlbHMudmFsdWVzKCkpIHsKKwkJCWlmIChsZXZlbCA8IG1pbkxldmVsKQorCQkJCW1pbkxldmVsID0gbGV2ZWw7CisJCQlpZiAobGV2ZWwgPiBtYXhMZXZlbCkKKwkJCQltYXhMZXZlbCA9IGxldmVsOworCQl9CisJCXRyeSB7CisJCQlMaXN0PFN0cmluZz4gcG9wdWxhdGlvbklkZW50aWZpZXJzID0gZ2V0UG9wdWxhdGlvbklkZW50aWZpZXJzKGRtKTsKKworCQkJZm9yIChTdHJpbmcgcGlkIDogcG9wdWxhdGlvbklkZW50aWZpZXJzKSB7CisJCQkJLy8gR2V0IHRoZSBmaXJzdCBub2RlIGluIHRoZSBjYW5vbmljYWwgZ3JhcGggYW5kIGxvb2sgYXQgdGhlCisJCQkJLy8gbGFiZWxzLgorCQkJCS8vIFdlIHdpbGwgZ2VuZXJhdGUgb25lIGxvZyBmaWxlIGZvciBlYWNoIGxhYmVsCisJCQkJLy8gRmluZCB0aGUgZmlyc3Qgbm9kZSB0aGF0IGhhcyBzb21lIGxhYmVscyBhbmQgdXNlIHRob3NlIGFzCisJCQkJLy8gcmVwcmVzZW50YXRpdmUgbGFiZWxzCisJCQkJLy8gZm9yIGV2ZXJ5IG5vZGUKKworCQkJCUludGVncmF0aW9uTGFiZWwgbGFiZWwgPSBudWxsOworCQkJCUl0ZXJhdG9yPER5bmFtaWNMYWJlbD4gaXQgPSAoKERlY29yYXRvcikgZG0pCisJCQkJCQkuZ2V0TGFiZWxzVG9VcGRhdGUoKS5pdGVyYXRvcigpOworCQkJCXdoaWxlIChpdC5oYXNOZXh0KCkpIHsKKwkJCQkJRHluYW1pY0xhYmVsIGwgPSBpdC5uZXh0KCk7CisJCQkJCWlmIChsIGluc3RhbmNlb2YgSW50ZWdyYXRpb25MYWJlbCkgeworCQkJCQkJbGFiZWwgPSAoSW50ZWdyYXRpb25MYWJlbCkgZ2V0TWF0Y2hpbmdMYWJlbChkbSwgKChJbnRlZ3JhdGlvbkxhYmVsKSBsKS5nZXROb2RlKCksIHBpZCk7CisJCQkJCQlicmVhazsKKwkJCQkJfQorCQkJCX0KKwkJCQkKKwkJCQlpZiAobGFiZWwgPT0gbnVsbCkgeworCQkJCQkvLyBXZSBjb3VsZG4ndCBmaW5kIGFueSBsYWJlbHMuIFBBTklDIQorCQkJCQlBY3RpdmF0b3IubG9nRXJyb3IoCisJCQkJCQkJIkNhbm5vdCBsb2csIG5vIGxhYmVsIGZvdW5kIGZvciBkZWNvcmF0b3IhIiwKKwkJCQkJCQluZXcgRXhjZXB0aW9uKCkpOworCQkJCQlyZXR1cm47CisJCQkJfQorCisJCQkJZmluYWwgUmVsYXRpdmVWYWx1ZVByb3ZpZGVyQWRhcHRlciBydnAgPSAoUmVsYXRpdmVWYWx1ZVByb3ZpZGVyQWRhcHRlcikgUmVsYXRpdmVWYWx1ZVByb3ZpZGVyQWRhcHRlckZhY3RvcnkuSU5TVEFOQ0UKKwkJCQkJCS5hZGFwdChsYWJlbCwgUmVsYXRpdmVWYWx1ZVByb3ZpZGVyLmNsYXNzKTsKKwkJCQlydnAuc2V0VGFyZ2V0KGxhYmVsKTsKKwkJCQlMaXN0PElJdGVtUHJvcGVydHlEZXNjcmlwdG9yPiBwcm9wZXJ0aWVzID0gcnZwLmdldFByb3BlcnRpZXMoKTsKKwkJCQlpZiAocHJvcGVydGllcyA9PSBudWxsKQorCQkJCQlBY3RpdmF0b3IubG9nRXJyb3IoIkNhbm5vdCByZXRyaWV2ZSBwcm9wZXJ0aWVzIGZvciAiCisJCQkJCQkJKyBsYWJlbCwgbnVsbCk7CisKKwkJCQlmb3IgKElJdGVtUHJvcGVydHlEZXNjcmlwdG9yIHByb3BlcnR5IDogcHJvcGVydGllcykgeworCQkJCQlmb3IgKGludCBsZXZlbCA9IG1pbkxldmVsOyBsZXZlbCA8PSBtYXhMZXZlbDsgKytsZXZlbCkgeworCisJCQkJCQlib29sZWFuIGZpbGVIYXNEYXRhID0gZmFsc2U7CisJCQkJCQlTdGF0ZUxldmVsTWFwIHNsbSA9IG5ldyBTdGF0ZUxldmVsTWFwKHBpZCwKKwkJCQkJCQkJcHJvcGVydHkuZ2V0RGlzcGxheU5hbWUocHJvcGVydHkpLCBsZXZlbCk7CisJCQkJCQlGaWxlIHBkaXIgPSBuZXcgRmlsZShkaXJzICsgcGlkICsgc2VwKTsKKwkJCQkJCWlmICghcGRpci5leGlzdHMoKSkgeworCQkJCQkJCWlmICghcGRpci5ta2RpcigpKSB7CisJCQkJCQkJCXRocm93IG5ldyBJT0V4Y2VwdGlvbigKKwkJCQkJCQkJCQkiRXJyb3IgY3JlYXRpbmcgbG9nIHN0b3JlIGRpcmVjdG9yaWVzOiAiCisJCQkJCQkJCQkJCQkrIHBkaXIuZ2V0QWJzb2x1dGVQYXRoKCkpOworCQkJCQkJCX0KKwkJCQkJCX0KKwkJCQkJCVN0cmluZyBmaWxlID0gZGlycyArIHBpZCArIHNlcAorCQkJCQkJCQkrIHByb3BlcnR5LmdldERpc3BsYXlOYW1lKHByb3BlcnR5KSArICJfIgorCQkJCQkJCQkrIGxldmVsICsgQ1NWX0VYVDsKKwkJCQkJCUJ1ZmZlcmVkV3JpdGVyIGZ3ID0gbmV3IEJ1ZmZlcmVkV3JpdGVyKG5ldyBGaWxlV3JpdGVyKAorCQkJCQkJCQlmaWxlKSwgQlVGU1opOyAvLyAxMCBNQgorCisJCQkJCQlJdGVyYXRvcjxOb2RlPiBub2RlSXRlcmF0b3IgPSB0aGlzLmdldE5vZGVJdGVyYXRvcigKKwkJCQkJCQkJbGV2ZWwsIG5vZGVMZXZlbHMpOworCQkJCQkJLy8gSXRlcmF0ZSBvdmVyIG5vZGVzIGZvciBhIGdpdmVuIHJlc29sdXRpb24KKwkJCQkJCWZ3LndyaXRlKElURVJBVElPTl9MQUJFTCk7CisJCQkJCQlmdy53cml0ZSgiLCIpOworCQkJCQkJZncud3JpdGUoVElNRV9MQUJFTCk7CisKKwkJCQkJCWludCBub2RlQ291bnQgPSAwOworCisJCQkJCQl3aGlsZSAobm9kZUl0ZXJhdG9yLmhhc05leHQoKSkgeworCQkJCQkJCU5vZGUgbm9kZSA9IG5vZGVJdGVyYXRvci5uZXh0KCk7CisJCQkJCQkJTm9kZUxhYmVsIG1MYWJlbCA9IGdldE1hdGNoaW5nTGFiZWwoZG0sIG5vZGUsIHBpZCk7CisJCQkJCQkJaWYgKG1MYWJlbCA9PSBudWxsKQorCQkJCQkJCQljb250aW51ZTsKKwkJCQkJCQlTdHJpbmcgbm9kZVVSSSA9IG5vZGUuZ2V0VVJJKCkudG9TdHJpbmcoKTsKKwkJCQkJCQlpZiAobm9kZVVSSQorCQkJCQkJCQkJLmluZGV4T2YoQUlSX1RSQU5TUE9SVF9VUklfRFVQTElDQVRFX0ZFQVRVUkUpID49IDApCisJCQkJCQkJCWNvbnRpbnVlOworCQkJCQkJCWZpbGVIYXNEYXRhID0gdHJ1ZTsKKwkJCQkJCQlTdHJpbmcgaWQgPSB0aGlzLmZpbHRlckxvY2F0aW9uSWQobm9kZS5nZXRVUkkoKQorCQkJCQkJCQkJLnRvU3RyaW5nKCkpOworCQkJCQkJCWZ3LndyaXRlKCIsIik7CisJCQkJCQkJZncud3JpdGUoaWQpOworCQkJCQkJCWhlYWRlckl0ZW1Db3VudCsrOworCQkJCQkJCW5vZGVDb3VudCsrOworCQkJCQkJfQorCisJCQkJCQlmdy53cml0ZSgiXG4iKTsKKwkJCQkJCWlmIChmaWxlSGFzRGF0YSkgeworCQkJCQkJCS8vIHJlZ2lzdGVyIHRoZSB3cml0ZXIKKwkJCQkJCQlmaWxlV3JpdGVycy5wdXQoc2xtLCBmdyk7CisJCQkJCQl9IGVsc2UgeworCQkJCQkJCS8vIGRvbid0IGV2ZXIgd3JpdGUgZW1wdHkgZmlsZXMKKwkJCQkJCQlmdy5mbHVzaCgpOworCQkJCQkJCWZ3LmNsb3NlKCk7CisJCQkJCQkJRmlsZSB0b0RlbGV0ZSA9IG5ldyBGaWxlKGZpbGUpOworCQkJCQkJCXRvRGVsZXRlLmRlbGV0ZSgpOworCQkJCQkJCWZ3ID0gbnVsbDsKKwkJCQkJCX0KKwkJCQkJfQorCQkJCX0KKwkJCX0vLyBhbGwgcHJvcGVydGllcworCisJCQluZWVkc0hlYWRlciA9IGZhbHNlOworCQl9IGNhdGNoIChJT0V4Y2VwdGlvbiBpb2UpIHsKKwkJCUFjdGl2YXRvci5sb2dFcnJvcigiRXJyb3Igd3JpdGluZyBsb2cgaGVhZGVyICIsIGlvZSk7CisJCX0KKworCX0KKworCS8qKgorCSAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgbm9kZSBoYXMgYSBsYWJlbCB0aGF0IGlzIHVwZGF0ZWQgYnkgdGhlIGRlY29yYXRvci4KKwkgKiAKKwkgKiBAcGFyYW0gZG0KKwkgKiBAcGFyYW0gbgorCSAqIEBwYXJhbSBwb3BJZAorCSAqIEByZXR1cm4gVGhlIGxhYmVsIG9mIHRoZSBjb3JyZWN0IHR5cGUgbWF0Y2hpbmcgdGhlIHBvcHVsYXRpb24gaWRlbnRpZmllciwKKwkgKiAgICAgICAgIG9yIG51bGwgaWYgbm90IGZvdW5kCisJICovCisJcHJpdmF0ZSBOb2RlTGFiZWwgZ2V0TWF0Y2hpbmdMYWJlbChJbnRlZ3JhdGlvbkRlY29yYXRvciBkbSwgTm9kZSBuLAorCQkJU3RyaW5nIHBvcElkKSB7CisJCWZvciAoTm9kZUxhYmVsIGxhYmVsIDogbi5nZXRMYWJlbHMoKSkKKwkJCWlmIChkbSBpbnN0YW5jZW9mIERpc2Vhc2VNb2RlbAorCQkJCQkmJiBsYWJlbCBpbnN0YW5jZW9mIERpc2Vhc2VNb2RlbExhYmVsCisJCQkJCSYmICgoRGlzZWFzZU1vZGVsTGFiZWwpIGxhYmVsKS5nZXREZWNvcmF0b3IoKS5lcXVhbHMoZG0pCisJCQkJCSYmICgoRGlzZWFzZU1vZGVsTGFiZWwpIGxhYmVsKS5nZXRQb3B1bGF0aW9uTW9kZWxMYWJlbCgpCisJCQkJCQkJLmdldFBvcHVsYXRpb25JZGVudGlmaWVyKCkuZXF1YWxzKHBvcElkKSkKKwkJCQlyZXR1cm4gbGFiZWw7CisJCQllbHNlIGlmIChkbSBpbnN0YW5jZW9mIFBvcHVsYXRpb25Nb2RlbAorCQkJCQkmJiBsYWJlbCBpbnN0YW5jZW9mIFBvcHVsYXRpb25Nb2RlbExhYmVsCisJCQkJCSYmICgoUG9wdWxhdGlvbk1vZGVsTGFiZWwpIGxhYmVsKS5nZXREZWNvcmF0b3IoKS5lcXVhbHMoZG0pCisJCQkJCSYmICgoUG9wdWxhdGlvbk1vZGVsTGFiZWwpIGxhYmVsKS5nZXRQb3B1bGF0aW9uSWRlbnRpZmllcigpCisJCQkJCQkJLmVxdWFscyhwb3BJZCkpCisJCQkJcmV0dXJuIGxhYmVsOworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm4gYWxsIHRoZSBwb3B1bGF0aW9uIGlkZW50aWZpZXJzIHRoZSBkZWNvcmF0b3IgbWFuYWdlcworCSAqIAorCSAqIEBwYXJhbSBpZAorCSAqIEByZXR1cm4gQXJyYXlMaXN0PFN0cmluZz4gVGhlIHBvcHVsYXRpb24gaWRlbnRpZmllcnMKKwkgKi8KKworCXByaXZhdGUgTGlzdDxTdHJpbmc+IGdldFBvcHVsYXRpb25JZGVudGlmaWVycyhJbnRlZ3JhdGlvbkRlY29yYXRvciBpZCkgeworCQlpZiAoaWQgaW5zdGFuY2VvZiBEaXNlYXNlTW9kZWwpIHsKKwkJCXJldHVybiAoKERpc2Vhc2VNb2RlbCkgaWQpLmdldEFsbExhYmVsSWRlbnRpZmllcnMoKTsKKwkJfSBlbHNlIGlmIChpZCBpbnN0YW5jZW9mIFBvcHVsYXRpb25Nb2RlbCkgeworCQkJcmV0dXJuICgoUG9wdWxhdGlvbk1vZGVsKSBpZCkuZ2V0QWxsTGFiZWxJZGVudGlmaWVycygpOworCQl9CisKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogQ3JlYXRlcyBhIGxvZyBmaWxlIGZvciBydW4gcGFyYW1ldGVycy4gT25seSBvbmUgb2YgdGhlc2UgaXMgY3JlYXRlZCBwZXIKKwkgKiBkaXNlYXNlRm9sZGVyCisJICogCisJICogQHBhcmFtIGRtCisJICogICAgICAgICAgICBEaXNlYXNlIE1vZGVsCisJICovCisKKwlwdWJsaWMgdm9pZCBsb2dSdW5QYXJhbWV0ZXJzKEludGVncmF0aW9uRGVjb3JhdG9yIGRtKSB7CisJCWlmIChkbSA9PSBudWxsKSB7IC8vIGNoZWNrCisJCQlyZXR1cm47CisJCX0KKworCQl0cnkgeworCQkJZmluYWwgRmlsZVdyaXRlciBmd3AgPSBuZXcgRmlsZVdyaXRlcihkaXJlY3RvcnlOYW1lCisJCQkJCSsgUlVOX1BBUkFNRVRFUl9GSUxFX05BTUUpOworCisJCQlmaW5hbCBDb21wb3NlZEFkYXB0ZXJGYWN0b3J5IGl0ZW1Qcm92aWRlckZhY3RvcnkgPSBuZXcgQ29tcG9zZWRBZGFwdGVyRmFjdG9yeSgKKwkJCQkJQ29tcG9zZWRBZGFwdGVyRmFjdG9yeS5EZXNjcmlwdG9yLlJlZ2lzdHJ5LklOU1RBTkNFKTsKKworCQkJZmluYWwgSUl0ZW1Qcm9wZXJ0eVNvdXJjZSBwcm9wZXJ0eVNvdXJjZSA9IChJSXRlbVByb3BlcnR5U291cmNlKSBpdGVtUHJvdmlkZXJGYWN0b3J5CisJCQkJCS5hZGFwdChkbSwgSUl0ZW1Qcm9wZXJ0eVNvdXJjZS5jbGFzcyk7CisKKwkJCWZpbmFsIExpc3Q8SUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I+IHByb3BlcnRpZXMgPSBwcm9wZXJ0eVNvdXJjZQorCQkJCQkuZ2V0UHJvcGVydHlEZXNjcmlwdG9ycyhkbSk7CisKKwkJCVN0cmluZ0J1aWxkZXIgaGVhZGVyID0gbmV3IFN0cmluZ0J1aWxkZXIoKTsKKwkJCVN0cmluZ0J1aWxkZXIgdmFsdWVzID0gbmV3IFN0cmluZ0J1aWxkZXIoKTsKKworCQkJZm9yIChpbnQgaSA9IDA7IGkgPCBwcm9wZXJ0aWVzLnNpemUoKTsgKytpKSB7CisJCQkJSUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IgZGVzY3JpcHRvciA9IHByb3BlcnRpZXMuZ2V0KGkpOworCQkJCWZpbmFsIEVTdHJ1Y3R1cmFsRmVhdHVyZSBmZWF0dXJlID0gKEVTdHJ1Y3R1cmFsRmVhdHVyZSkgZGVzY3JpcHRvcgorCQkJCQkJLmdldEZlYXR1cmUobnVsbCk7CisKKwkJCQlFQ2xhc3MgY29udGFpbmluZ0NsYXNzID0gZmVhdHVyZS5nZXRFQ29udGFpbmluZ0NsYXNzKCk7CisJCQkJaWYgKGNvbnRhaW5pbmdDbGFzcy5lcXVhbHMoQ29tbW9uUGFja2FnZS5lSU5TVEFOQ0UKKwkJCQkJCS5nZXREdWJsaW5Db3JlKCkpKQorCQkJCQljb250aW51ZTsKKworCQkJCU9iamVjdCB2YWx1ZSA9ICgoRU9iamVjdCkgZG0pLmVHZXQoZmVhdHVyZSk7CisJCQkJaGVhZGVyLmFwcGVuZChmZWF0dXJlLmdldE5hbWUoKSk7CisJCQkJaGVhZGVyLmFwcGVuZCgiLCIpOworCQkJCXZhbHVlID0gdmFsdWUudG9TdHJpbmcoKS5yZXBsYWNlKCcsJywgJyAnKTsKKwkJCQl2YWx1ZSA9IHZhbHVlLnRvU3RyaW5nKCkucmVwbGFjZSgnXG4nLCAnICcpOworCQkJCXZhbHVlcy5hcHBlbmQodmFsdWUudG9TdHJpbmcoKS5yZXBsYWNlKCcsJywgJyAnKSk7CisJCQkJdmFsdWVzLmFwcGVuZCgiLCIpOworCQkJfQorCQkJaGVhZGVyLnNldExlbmd0aChoZWFkZXIubGVuZ3RoKCkgLSAxKTsgLy8gZHJvcCBsYXN0ICwKKwkJCXZhbHVlcy5zZXRMZW5ndGgodmFsdWVzLmxlbmd0aCgpIC0gMSk7IC8vIGRyb3AgbGFzdCAsCisJCQlmd3Aud3JpdGUoaGVhZGVyLnRvU3RyaW5nKCkpOworCQkJZndwLndyaXRlKCJcbiIpOworCQkJZndwLndyaXRlKHZhbHVlcy50b1N0cmluZygpKTsKKwkJCWZ3cC5mbHVzaCgpOworCQkJZndwLmNsb3NlKCk7CisJCX0gY2F0Y2ggKGZpbmFsIElPRXhjZXB0aW9uIGUpIHsKKwkJCS8vIGRlYnVnZ2luZyBmb3Igbm93CisJCQlBY3RpdmF0b3IubG9nRXJyb3IoIkVycm9yIGNyZWF0aW5nIGZpbGUgd3JpdGVyIGZvciBSVU5QQVJBTUVURVIgIiwKKwkJCQkJZSk7CisKKwkJfQorCisJfS8vIGxvZ1J1blBhcmFtZXRlcnMKKworCS8qKgorCSAqIE11c3QgaW1wbGVtZW50IHRoaXMgbWV0aG9kIHRvIGxvZyBkYXRhIGluIHJ1biB0aHJlYWQgTmVlZCB0byBpbXBsZW1lbnQKKwkgKiBUaW1lUHJvdmlkZXJBZGFwdGVyRmFjdG9yeS5JTlNUQU5DRS5hZGFwdCgpLi4uLi5vbmx5IEdyYXBoIHdpbGwgd29yaworCSAqIHJpZ2h0IG5vdy4uLi5sYXRlciBpbiBDT1JFCisJICogCisJICogQHBhcmFtIHJ2cAorCSAqIEBwYXJhbSB0aW1lUHJvdmlkZXIKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBsb2dEYXRhKGZpbmFsIFJlbGF0aXZlVmFsdWVQcm92aWRlckFkYXB0ZXIgcnZwLAorCQkJZmluYWwgVGltZVByb3ZpZGVyIHRpbWVQcm92aWRlcikgeworCQkvLyBOb3QgdXNlZAorCX0vLyBsb2cgZGF0YQorCisJLy8gV2UgbmVlZCB0byBkbyBzb21lIGNhY2hpbmcgaGVyZSB0byBzcGVlZCB1cCBleGVjdXRpb24KKwlNYXA8Tm9kZSwgSW50ZWdlcj4gY3VycmVudE5vZGVMZXZlbHMgPSBudWxsOworCUxpc3Q8SW50ZWdlcj4gY3VycmVudFJlc29sdXRpb25MaXN0ID0gbnVsbDsKKwlNYXA8SW50ZWdlciwgTGlzdDxOb2RlPj4gY3VycmVudFNvcnRlZE5vZGVMaXN0TWFwID0gbnVsbDsKKworCS8qKgorCSAqIExvZyBkYXRhIGZyb20gZnJvbSBhIHNpbXVsYXRpb24gYWZ0ZXIgY3ljbGUKKwkgKiAKKwkgKiBAcGFyYW0gc2ltCisJICogICAgICAgICAgICBTaW11bGF0aW9uCisJICogQHBhcmFtIGRtCisJICogICAgICAgICAgICBEaXNlYXNlTW9kZWwKKwkgKiBAcGFyYW0gbm9kZUxldmVscworCSAqICAgICAgICAgICAgTm9kZSBsZXZlbHMKKwkgKiBAcGFyYW0gdGltZVByb3ZpZGVyCisJICogQHBhcmFtIGJlZm9yZVN0YXJ0CisJICovCisKKwlAU3VwcHJlc3NXYXJuaW5ncygiYm94aW5nIikKKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBsb2dEYXRhKElTaW11bGF0aW9uIHNpbSwgSW50ZWdyYXRpb25EZWNvcmF0b3IgZG0sCisJCQlNYXA8Tm9kZSwgSW50ZWdlcj4gbm9kZUxldmVscywgVGltZVByb3ZpZGVyIHRpbWVQcm92aWRlciwKKwkJCWJvb2xlYW4gYmVmb3JlU3RhcnQpIHsKKwkKKwkJaW50IGRhdGFDb2x1bW5Db3VudCA9IDA7CisKKwkJaW50IHRvdGFsTGFiZWxzID0gMDsKKwkJaW50IGxhYmVsc1dyaXR0ZW4gPSAwOworCisJCWludCB0b3RhbFByb3BlcnR5Q291bnQgPSAwOworCQkvLyBJbmNyZW1lbnQgaXRlcmF0aW9uIGNvdW50CisJCXRoaXMuaWNvdW50Kys7CisKKwkJTGlzdDxTdHJpbmc+IGRlY29yYXRvclBvcHVsYXRpb25zID0gdGhpcy5nZXRQb3B1bGF0aW9uSWRlbnRpZmllcnMoZG0pOworCisJCXRyeSB7CisJCQkvLyBJdGVyYXRlIG92ZXIgdGhlIG1hcCByZXNvbHV0aW9ucworCQkJSXRlcmF0b3I8SW50ZWdlcj4gcmVzb2x1dGlvbl9pdCA9IHRoaXMKKwkJCQkJLmdldFJlc29sdXRpb25JdGVyYXRvcihub2RlTGV2ZWxzKTsKKwkJCXdoaWxlIChyZXNvbHV0aW9uX2l0Lmhhc05leHQoKSkgeworCQkJCWludCByZXNvbHV0aW9uID0gcmVzb2x1dGlvbl9pdC5uZXh0KCk7CisKKwkJCQlJdGVyYXRvcjxOb2RlPiBub2RlSXRlcmF0b3IgPSB0aGlzLmdldE5vZGVJdGVyYXRvcihyZXNvbHV0aW9uLAorCQkJCQkJbm9kZUxldmVscyk7CisKKwkJCQlib29sZWFuIGZpcnN0Tm9kZSA9IHRydWU7CisJCQkJLy8gSXRlcmF0ZSBvdmVyIG5vZGVzIGZvciBhIGdpdmVuIHJlc29sdXRpb24KKworCQkJCWludCBub2RlQ291bnQgPSAwOworCisJCQkJd2hpbGUgKG5vZGVJdGVyYXRvci5oYXNOZXh0KCkpIHsKKwkJCQkJTm9kZSBuID0gbm9kZUl0ZXJhdG9yLm5leHQoKTsKKwkJCQkJbm9kZUNvdW50Kys7CisKKwkJCQkJZm9yIChTdHJpbmcgcG9wSWQgOiBkZWNvcmF0b3JQb3B1bGF0aW9ucykgewkJCQkJCQorCQkJCQkJTm9kZUxhYmVsIG1MYWJlbCA9IGdldE1hdGNoaW5nTGFiZWwoZG0sIG4sIHBvcElkKTsKKwkJCQkJCWlmIChtTGFiZWwgPT0gbnVsbCkKKwkJCQkJCQljb250aW51ZTsKKworCQkJCQkJaWYgKCEobUxhYmVsIGluc3RhbmNlb2YgSW50ZWdyYXRpb25MYWJlbCkpCisJCQkJCQkJY29udGludWU7IC8vIENoZWNrCisKKwkJCQkJCUludGVncmF0aW9uTGFiZWwgZG1MYWJlbCA9IChJbnRlZ3JhdGlvbkxhYmVsKSBtTGFiZWw7CisKKwkJCQkJCXRvdGFsTGFiZWxzKys7CisKKwkJCQkJCWxhYmVsc1dyaXR0ZW4rKzsKKworCQkJCQkJSW50ZWdyYXRpb25MYWJlbFZhbHVlIGRtbHYgPSBudWxsOworCisJCQkJCQlmaW5hbCBSZWxhdGl2ZVZhbHVlUHJvdmlkZXJBZGFwdGVyIHJ2cCA9IChSZWxhdGl2ZVZhbHVlUHJvdmlkZXJBZGFwdGVyKSBSZWxhdGl2ZVZhbHVlUHJvdmlkZXJBZGFwdGVyRmFjdG9yeS5JTlNUQU5DRQorCQkJCQkJCQkuYWRhcHQobUxhYmVsLCBSZWxhdGl2ZVZhbHVlUHJvdmlkZXIuY2xhc3MpOworCQkJCQkJcnZwLnNldFRhcmdldChtTGFiZWwpOworCQkJCQkJTGlzdDxJSXRlbVByb3BlcnR5RGVzY3JpcHRvcj4gcHJvcGVydGllcyA9IHJ2cAorCQkJCQkJCQkuZ2V0UHJvcGVydGllcygpOworCisJCQkJCQlkbWx2ID0gKEludGVncmF0aW9uTGFiZWxWYWx1ZSkgZG1MYWJlbAorCQkJCQkJCQkuZ2V0Q3VycmVudFZhbHVlKCk7CisKKwkJCQkJCXRvdGFsUHJvcGVydHlDb3VudCArPSBwcm9wZXJ0aWVzLnNpemUoKTsKKworCQkJCQkJU3RyaW5nQnVpbGRlciBzYiA9IG5ldyBTdHJpbmdCdWlsZGVyKCk7CisKKwkJCQkJCWZvciAoSUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IgaXRlbURlc2NyaXB0b3IgOiBwcm9wZXJ0aWVzKSB7CisJCQkJCQkJc2Iuc2V0TGVuZ3RoKDApOworCQkJCQkJCVN0YXRlTGV2ZWxNYXAgc2xtID0gbmV3IFN0YXRlTGV2ZWxNYXAocG9wSWQsCisJCQkJCQkJCQlpdGVtRGVzY3JpcHRvcgorCQkJCQkJCQkJCQkuZ2V0RGlzcGxheU5hbWUoaXRlbURlc2NyaXB0b3IpLAorCQkJCQkJCQkJcmVzb2x1dGlvbik7CisJCQkJCQkJQnVmZmVyZWRXcml0ZXIgZncgPSBmaWxlV3JpdGVycy5nZXQoc2xtKTsKKwkJCQkJCQlpZiAoZncgPT0gbnVsbCkgeworCQkJCQkJCQlBY3RpdmF0b3IubG9nRXJyb3IoCisJCQkJCQkJCQkJIkVycm9yLCBubyBmaWxlIHdyaXRlciBmb3VuZCBmb3IgIgorCQkJCQkJCQkJCQkJKyBzbG0sIG51bGwpOworCQkJCQkJCQljb250aW51ZTsKKwkJCQkJCQl9CisJCQkJCQkJLy8gQmVmb3JlIHdyaXRpbmcgdGhlIHZhbHVlcyBmb3IgdGhlIGZpcnN0IGxvY2F0aW9uLAorCQkJCQkJCS8vIGFkZCBpdGVyYXRpb24sIHRpbWUgY29sdW1ucworCisJCQkJCQkJaWYgKGZpcnN0Tm9kZSkgeworCQkJCQkJCQlzYi5hcHBlbmQodGhpcy5pY291bnQpOworCQkJCQkJCQlzYi5hcHBlbmQoIiwiKTsKKwkJCQkJCQkJU1RFTVRpbWUgdGltZSA9IHRpbWVQcm92aWRlci5nZXRUaW1lKCk7CisJCQkJCQkJCWlmICh0aW1lID09IG51bGwpIHsKKwkJCQkJCQkJCXRpbWUgPSBzaW0uZ2V0U2NlbmFyaW8oKS5nZXRTZXF1ZW5jZXIoKQorCQkJCQkJCQkJCQkuZ2V0U3RhcnRUaW1lKCk7CisJCQkJCQkJCX0KKwkJCQkJCQkJaWYgKCFiZWZvcmVTdGFydCkKKwkJCQkJCQkJCS8vIEFkZCBpbmNyZW1lbnQKKwkJCQkJCQkJCXRpbWUgPSB0aW1lLmFkZEluY3JlbWVudChzaW0uZ2V0U2NlbmFyaW8oKQorCQkJCQkJCQkJCQkuZ2V0U2VxdWVuY2VyKCkuZ2V0VGltZURlbHRhKCkpOworCisJCQkJCQkJCVN0cmluZyB0aW1lU3RyaW5nOworCQkJCQkJCQl0aW1lU3RyaW5nID0gZGF0ZUZvcm1hdC5mb3JtYXQodGltZS5nZXRUaW1lKCkpOworCisJCQkJCQkJCXNiLmFwcGVuZCh0aW1lU3RyaW5nKTsKKwkJCQkJCQl9CisKKwkJCQkJCQlFU3RydWN0dXJhbEZlYXR1cmUgZmVhdHVyZSA9IChFU3RydWN0dXJhbEZlYXR1cmUpIGl0ZW1EZXNjcmlwdG9yCisJCQkJCQkJCQkuZ2V0RmVhdHVyZShudWxsKTsKKworCQkJCQkJCWRvdWJsZSB2YWx1ZSA9ICgoRG91YmxlKSAoKEVPYmplY3QpIGRtbHYpCisJCQkJCQkJCQkuZUdldChmZWF0dXJlKSkuZG91YmxlVmFsdWUoKTsKKworCQkJCQkJCXNiLmFwcGVuZCgiLCIpOworCQkJCQkJCWlmIChsb2dJbnRlZ2VycykKKwkJCQkJCQkJc2IuYXBwZW5kKE1hdGgucmludCh2YWx1ZSkpOworCQkJCQkJCWVsc2UKKwkJCQkJCQkJc2IuYXBwZW5kKHZhbHVlKTsKKworCQkJCQkJCWRhdGFDb2x1bW5Db3VudCsrOworCisJCQkJCQkJZncud3JpdGUoc2IudG9TdHJpbmcoKSk7CisJCQkJCQl9IC8vIEZvciBlYWNoIHByb3BlcnR5IGluIGxhYmVsCisJCQkJCX0gLy8gRm9yIGVhY2ggbm9kZSBsYWJlbAorCisJCQkJCWZpcnN0Tm9kZSA9IGZhbHNlOworCQkJCX0gLy8gRm9yIGVhY2ggbm9kZQorCisJCQl9IC8vIEZvciBlYWNoIG5vZGUgcmVzb2x1dGlvbgorCisJCQkvLyBXZSBuZWVkIHRvIGFkZCB0aGUgZW5kLW9mLWxpbmUgY2hhcmFjdGVycyB0byBlYWNoIGxvZyBmaWxlCisJCQlyZXNvbHV0aW9uX2l0ID0gdGhpcy5nZXRSZXNvbHV0aW9uSXRlcmF0b3Iobm9kZUxldmVscyk7CisJCQl3aGlsZSAocmVzb2x1dGlvbl9pdC5oYXNOZXh0KCkpIHsKKwkJCQlpbnQgcmVzb2x1dGlvbiA9IHJlc29sdXRpb25faXQubmV4dCgpOworCisJCQkJSXRlcmF0b3I8Tm9kZT4gbm9kZUl0ZXJhdG9yID0gdGhpcy5nZXROb2RlSXRlcmF0b3IocmVzb2x1dGlvbiwKKwkJCQkJCW5vZGVMZXZlbHMpOworCisJCQkJd2hpbGUgKG5vZGVJdGVyYXRvci5oYXNOZXh0KCkpIHsKKwkJCQkJTm9kZSBuID0gbm9kZUl0ZXJhdG9yLm5leHQoKTsKKwkJCQkJYm9vbGVhbiB3cm90ZUVPTCA9IGZhbHNlOworCQkJCQlmb3IgKFN0cmluZyBwb3BJZCA6IGRlY29yYXRvclBvcHVsYXRpb25zKSB7CisJCQkJCQlOb2RlTGFiZWwgbUxhYmVsID0gZ2V0TWF0Y2hpbmdMYWJlbChkbSwgbiwgcG9wSWQpOworCQkJCQkJaWYgKG1MYWJlbCA9PSBudWxsKQorCQkJCQkJCWNvbnRpbnVlOworCQkJCQkJaWYgKCEobUxhYmVsIGluc3RhbmNlb2YgSW50ZWdyYXRpb25MYWJlbCkpCisJCQkJCQkJY29udGludWU7IC8vIENoZWNrCisJCQkJCQlmaW5hbCBSZWxhdGl2ZVZhbHVlUHJvdmlkZXJBZGFwdGVyIHJ2cCA9IChSZWxhdGl2ZVZhbHVlUHJvdmlkZXJBZGFwdGVyKSBSZWxhdGl2ZVZhbHVlUHJvdmlkZXJBZGFwdGVyRmFjdG9yeS5JTlNUQU5DRQorCQkJCQkJCQkuYWRhcHQobUxhYmVsLCBSZWxhdGl2ZVZhbHVlUHJvdmlkZXIuY2xhc3MpOworCQkJCQkJTGlzdDxJSXRlbVByb3BlcnR5RGVzY3JpcHRvcj4gcHJvcGVydGllcyA9IHJ2cAorCQkJCQkJCQkuZ2V0UHJvcGVydGllcygpOworCQkJCQkJZm9yIChJSXRlbVByb3BlcnR5RGVzY3JpcHRvciBpdGVtRGVzY3JpcHRvciA6IHByb3BlcnRpZXMpIHsKKwkJCQkJCQlTdGF0ZUxldmVsTWFwIHNsbSA9IG5ldyBTdGF0ZUxldmVsTWFwKHBvcElkLAorCQkJCQkJCQkJaXRlbURlc2NyaXB0b3IKKwkJCQkJCQkJCQkJLmdldERpc3BsYXlOYW1lKGl0ZW1EZXNjcmlwdG9yKSwKKwkJCQkJCQkJCXJlc29sdXRpb24pOworCQkJCQkJCUJ1ZmZlcmVkV3JpdGVyIGZ3ID0gZmlsZVdyaXRlcnMuZ2V0KHNsbSk7CisJCQkJCQkJZncud3JpdGUoIlxuIik7CisJCQkJCQl9CisJCQkJCQl3cm90ZUVPTCA9IHRydWU7CisJCQkJCX0KKwkJCQkJaWYgKHdyb3RlRU9MKQorCQkJCQkJYnJlYWs7IC8vIFdlIG9ubHkgbmVlZCBhIHNhbXBsZSBvZiBhIG5vZGUgdG8gZmluZCB0aGUKKwkJCQkJCQkJLy8gZmlsZSB3cml0ZXJzCisJCQkJfQorCQkJfQorCQkJbmVlZHNIZWFkZXIgPSBmYWxzZTsKKwkJfSBjYXRjaCAoSU9FeGNlcHRpb24gaW9lKSB7CisJCQlBY3RpdmF0b3IubG9nRXJyb3IoIkVycm9yIHdyaXRpbmcgbG9nIGhlYWRlciAiLCBpb2UpOworCQl9CisKKwkJLy8gU2FmZSB0byBzZXQgdGhlIGN1cnJlbnQgbm9kZSBsZXZlbHMgaGVyZQorCQljdXJyZW50Tm9kZUxldmVscyA9IG5vZGVMZXZlbHM7CisJfQorCisJLyoKKwkgKiBwcml2YXRlIEdyYXBoIGdldEdyYXBoKGZpbmFsIE5vZGUgbm9kZSkgeyByZXR1cm4gKEdyYXBoKQorCSAqIG5vZGUuZUNvbnRhaW5lcigpLmVDb250YWluZXIoKTsgfSAvLyBnZXRHcmFwaAorCSAqLworCisJLyoqCisJICogRmx1c2ggYW5kIENsb3NlIHRoZSBmaWxlCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgZmx1c2hMb2dnZXJEYXRhKCkgeworCQlDb2xsZWN0aW9uPEJ1ZmZlcmVkV3JpdGVyPiB3cml0ZXJzID0gZmlsZVdyaXRlcnMudmFsdWVzKCk7CisJCWZvciAoQnVmZmVyZWRXcml0ZXIgd3JpdGVyIDogd3JpdGVycykgeworCQkJdHJ5IHsKKwkJCQl3cml0ZXIuZmx1c2goKTsKKwkJCX0gY2F0Y2ggKElPRXhjZXB0aW9uIGlvZSkgeworCQkJCUFjdGl2YXRvci5sb2dFcnJvcigiQ2Fubm90IGZsdXNoIGxvZyBmaWxlIiwgaW9lKTsKKwkJCX0KKwkJfQorCisJfSAvLyBmbHVzaCBBbGwgRGF0YQorCisJLyoqCisJICogRmx1c2ggYW5kIENsb3NlIHRoZSBmaWxlCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgY2xvc2VMb2dnZXJEYXRhKCkgeworCQlDb2xsZWN0aW9uPEJ1ZmZlcmVkV3JpdGVyPiB3cml0ZXJzID0gZmlsZVdyaXRlcnMudmFsdWVzKCk7CisJCWZvciAoQnVmZmVyZWRXcml0ZXIgd3JpdGVyIDogd3JpdGVycykgeworCQkJdHJ5IHsKKwkJCQl3cml0ZXIuY2xvc2UoKTsKKwkJCX0gY2F0Y2ggKElPRXhjZXB0aW9uIGlvZSkgeworCQkJCUFjdGl2YXRvci5sb2dFcnJvcigiQ2Fubm90IGNsb3NlIGxvZyBmaWxlIiwgaW9lKTsKKwkJCX0KKwkJfQorCX0gLy8gY2xvc2VMb2dnZXJEYXRhCisKKwkvKioKKwkgKiAKKwkgKiBAcGFyYW0gbm9kZUxldmVscworCSAqIEByZXR1cm4KKwkgKi8KKwlAU3VwcHJlc3NXYXJuaW5ncygiYm94aW5nIikKKwlwcml2YXRlIEl0ZXJhdG9yPEludGVnZXI+IGdldFJlc29sdXRpb25JdGVyYXRvcigKKwkJCU1hcDxOb2RlLCBJbnRlZ2VyPiBub2RlTGV2ZWxzKSB7CisJCWlmIChub2RlTGV2ZWxzID09IGN1cnJlbnROb2RlTGV2ZWxzKQorCQkJcmV0dXJuIGN1cnJlbnRSZXNvbHV0aW9uTGlzdC5pdGVyYXRvcigpOworCQlBcnJheUxpc3Q8SW50ZWdlcj4gbGlzdCA9IG5ldyBBcnJheUxpc3QoKTsKKwkJQ29sbGVjdGlvbjxJbnRlZ2VyPiB2YWxzID0gbm9kZUxldmVscy52YWx1ZXMoKTsKKwkJZm9yIChpbnQgbGV2ZWwgOiB2YWxzKSB7CisJCQlpZiAoIWxpc3QuY29udGFpbnMobGV2ZWwpKQorCQkJCWxpc3QuYWRkKGxldmVsKTsKKwkJfQorCQljdXJyZW50UmVzb2x1dGlvbkxpc3QgPSBsaXN0OworCQlyZXR1cm4gbGlzdC5pdGVyYXRvcigpOworCX0KKworCS8vIFJldHVybiBhbGwgbm9kZXMgYXQgdGhlIHNhbWUgbGV2ZWwKKwkvLyBTb3J0IGJ5IHRoZSBuYW1lIGFscGhhYmV0aWNhbGx5IGZvciBjb252ZW5pZW5jZQorCisJQFN1cHByZXNzV2FybmluZ3MoImJveGluZyIpCisJcHJpdmF0ZSBJdGVyYXRvcjxOb2RlPiBnZXROb2RlSXRlcmF0b3IoaW50IGxldmVsLAorCQkJTWFwPE5vZGUsIEludGVnZXI+IG5vZGVMZXZlbHMpIHsKKwkJaWYgKG5vZGVMZXZlbHMgPT0gY3VycmVudE5vZGVMZXZlbHMpCisJCQlyZXR1cm4gY3VycmVudFNvcnRlZE5vZGVMaXN0TWFwLmdldChsZXZlbCkuaXRlcmF0b3IoKTsKKworCQlBcnJheUxpc3Q8Tm9kZT4gbGlzdCA9IG5ldyBBcnJheUxpc3Q8Tm9kZT4oKTsKKwkJLy8gU2V0PE5vZGU+bnMgPSBub2RlTGV2ZWxzLmtleVNldCgpOworCQkvLyBmb3IoTm9kZSBuOm5zKSB7CisJCWZvciAoRW50cnk8Tm9kZSwgSW50ZWdlcj4gZW50cnkgOiBub2RlTGV2ZWxzLmVudHJ5U2V0KCkpIHsKKwkJCWlmIChlbnRyeS5nZXRWYWx1ZSgpID09IGxldmVsKSB7CisKKwkJCQlib29sZWFuIHdyaXRlID0gZmFsc2U7CisJCQkJZm9yIChOb2RlTGFiZWwgcyA6IGVudHJ5LmdldEtleSgpLmdldExhYmVscygpKSB7CisJCQkJCWlmIChzIGluc3RhbmNlb2YgSW50ZWdyYXRpb25MYWJlbCkgeworCisJCQkJCQl3cml0ZSA9IHRydWU7CisJCQkJCQlicmVhazsKKwkJCQkJfQorCQkJCX0KKwkJCQlpZiAoIXdyaXRlKSB7CisJCQkJCWNvbnRpbnVlOworCQkJCX0KKworCQkJCS8vIFNraXAgYWlyIHRyYW5zcG9ydCBub2RlcworCQkJCWlmIChlbnRyeS5nZXRLZXkoKS5nZXRVUkkoKS50b1N0cmluZygpCisJCQkJCQkuaW5kZXhPZihBSVJfVFJBTlNQT1JUX1VSSV9EVVBMSUNBVEVfRkVBVFVSRSkgPT0gLTEpCisJCQkJCWxpc3QuYWRkKGVudHJ5LmdldEtleSgpKTsKKwkJCX0KKwkJfQorCQlDb2xsZWN0aW9ucy5zb3J0KGxpc3QsIG5ldyBDb21wYXJhdG9yPE5vZGU+KCkgeworCisJCQlwdWJsaWMgaW50IGNvbXBhcmUoTm9kZSBuMSwgTm9kZSBuMikgeworCQkJCVN0cmluZyBzMSA9IG4xLmdldFVSSSgpLnRvU3RyaW5nKCk7CisJCQkJU3RyaW5nIHMyID0gbjIuZ2V0VVJJKCkudG9TdHJpbmcoKTsKKwkJCQlyZXR1cm4gczEuY29tcGFyZVRvKHMyKTsKKwkJCX0KKworCQl9KTsKKwkJaWYgKGN1cnJlbnRTb3J0ZWROb2RlTGlzdE1hcCA9PSBudWxsKQorCQkJY3VycmVudFNvcnRlZE5vZGVMaXN0TWFwID0gbmV3IEhhc2hNYXA8SW50ZWdlciwgTGlzdDxOb2RlPj4oKTsKKwkJY3VycmVudFNvcnRlZE5vZGVMaXN0TWFwLnB1dChsZXZlbCwgbGlzdCk7CisJCXJldHVybiBsaXN0Lml0ZXJhdG9yKCk7CisJfQorCisJLyoqCisJICogZmlsdGVycyB0aGUgbG9jYXRpb24gaWQgcHJlZml4IGZyb20gdGhlIGJlZ2lubmluZyBvZiBhIG5vZGVzIElEIGZvcgorCSAqIGdlbmVyYXRpb24gb2YgYSBmaWxlIG5hbWUKKwkgKiAKKwkgKiBAcGFyYW0gdW5maWx0ZXJlZAorCSAqIEByZXR1cm4gdGhlIGZpbHRlcmVkIGZpbGUgbmFtZSB1c2luZyBsb2NhdGlvbiBpZC4KKwkgKi8KKwlwcml2YXRlIFN0cmluZyBmaWx0ZXJMb2NhdGlvbklkKFN0cmluZyB1bmZpbHRlcmVkKSB7CisJCWludCBsYXN0ID0gdW5maWx0ZXJlZC5pbmRleE9mKExPQ0FUSU9OSURfUFJFRklYKTsKKwkJaWYgKGxhc3QgPj0gMCkgeworCQkJbGFzdCArPSBMT0NBVElPTklEX1BSRUZJWC5sZW5ndGgoKTsKKwkJCXJldHVybiB1bmZpbHRlcmVkLnN1YnN0cmluZyhsYXN0LCB1bmZpbHRlcmVkLmxlbmd0aCgpKTsKKwkJfQorCQlyZXR1cm4gdW5maWx0ZXJlZDsKKwl9CisKKwkvKioKKwkgKiBVc2VkIGFzIGtleSBpbiBtYXAgd2l0aCBGaWxlV3JpdGVycy4gRmlsZVdyaXRlcnMgYXJlIGtleSdkIGJ5IHRoZSBsYWJlbAorCSAqIChpLmUuIGRpc2Vhc2Ugc3RhdGUpIGFuZCBieQorCSAqLworCXByaXZhdGUgc3RhdGljIGNsYXNzIFN0YXRlTGV2ZWxNYXAgeworCQlwcml2YXRlIGZpbmFsIFN0cmluZyBwb3BJZDsKKwkJcHJpdmF0ZSBmaW5hbCBTdHJpbmcgc3RhdGU7CisJCXByaXZhdGUgZmluYWwgaW50IGxldmVsOworCisJCXB1YmxpYyBTdGF0ZUxldmVsTWFwKFN0cmluZyBwb3BJZCwgU3RyaW5nIHN0YXRlLCBpbnQgbGV2ZWwpIHsKKwkJCXRoaXMucG9wSWQgPSBwb3BJZDsKKwkJCXRoaXMuc3RhdGUgPSBzdGF0ZTsKKwkJCXRoaXMubGV2ZWwgPSBsZXZlbDsKKwkJfQorCisJCXB1YmxpYyBTdHJpbmcgZ2V0UG9wdWxhdGlvbklkKCkgeworCQkJcmV0dXJuIHRoaXMucG9wSWQ7CisJCX0KKworCQlwdWJsaWMgaW50IGdldExldmVsKCkgeworCQkJcmV0dXJuIHRoaXMubGV2ZWw7CisJCX0KKworCQlwdWJsaWMgU3RyaW5nIGdldFN0YXRlKCkgeworCQkJcmV0dXJuIHRoaXMuc3RhdGU7CisJCX0KKworCQlAT3ZlcnJpZGUKKwkJcHVibGljIGludCBoYXNoQ29kZSgpIHsKKwkJCXJldHVybiBzdGF0ZS5oYXNoQ29kZSgpICsgcG9wSWQuaGFzaENvZGUoKSArIGxldmVsOyAvLyB1Z2gKKwkJfQorCisJCUBPdmVycmlkZQorCQlwdWJsaWMgYm9vbGVhbiBlcXVhbHMoT2JqZWN0IG8pIHsKKwkJCWlmICghKG8gaW5zdGFuY2VvZiBTdGF0ZUxldmVsTWFwKSkKKwkJCQlyZXR1cm4gZmFsc2U7CisJCQlTdGF0ZUxldmVsTWFwIHNsbSA9IChTdGF0ZUxldmVsTWFwKSBvOworCQkJcmV0dXJuIChzbG0uZ2V0U3RhdGUoKS5lcXVhbHModGhpcy5zdGF0ZSkKKwkJCQkJJiYgc2xtLmdldFBvcHVsYXRpb25JZCgpLmVxdWFscyh0aGlzLnBvcElkKSAmJiBzbG0KKwkJCQkJCS5nZXRMZXZlbCgpID09IGxldmVsKTsKKwkJfQorCisJCUBPdmVycmlkZQorCQlwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkgeworCQkJcmV0dXJuIHRoaXMucG9wSWQgKyAiIC0gIiArIHRoaXMuc3RhdGUgKyAiXyIgKyB0aGlzLmxldmVsOworCQl9CisJfQorCisJLyoqCisJICogZ2V0IHRoZSBvdXRwdXQgZm9sZGVyIG5hbWUKKwkgKiAKKwkgKiBAcmV0dXJuIHRoZSBsb2cgZGlyZWN0b3J5IG5hbWUKKwkgKi8KKwlwdWJsaWMgU3RyaW5nIGdldERpcmVjdG9yeU5hbWUoKSB7CisJCXJldHVybiBkaXJlY3RvcnlOYW1lOworCX0KKworCS8qKgorCSAqIG5hbWUgb2YgdGhlIGRhdGEgb2JqZWN0IGJlaW5nIGxvZ2dlZC4gZS5nLiBUaGUgRGlzZWFzZSBOYW1lCisJICogCisJICogQHJldHVybiB0aGUgbG9nZ2VkIG9iamVjdCBuYW1lCisJICovCisKKwlwdWJsaWMgU3RyaW5nIGdldExvZ0RhdGFPYmplY3ROYW1lKCkgeworCQlyZXR1cm4gbG9nRGF0YU9iamVjdE5hbWU7CisJfQorfQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWwubG9nZ2Vycy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91dGlsL2xvZ2dlcnMvdmlld3MvUmVwb3J0c0NvbnRleHRNZW51QWN0aW9uLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbC5sb2dnZXJzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3V0aWwvbG9nZ2Vycy92aWV3cy9SZXBvcnRzQ29udGV4dE1lbnVBY3Rpb24uamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZjVhODJiCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWwubG9nZ2Vycy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91dGlsL2xvZ2dlcnMvdmlld3MvUmVwb3J0c0NvbnRleHRNZW51QWN0aW9uLmphdmEKQEAgLTAsMCArMSw2NCBAQAorLy8gUmVwb3J0c0NvbnRleHRNZW51QWN0aW9uIAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnV0aWwubG9nZ2Vycy52aWV3czsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNiwgMjAwNywgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnVpLnZpZXdzLmdlb2dyYXBoaWMubWFwLlNlbGVjdGVkUmVwb3J0c01hbmFnZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuSVZpZXdBY3Rpb25EZWxlZ2F0ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5JVmlld1BhcnQ7CisKKy8qKgorICogVGhlIGNsYXNzIGlzIGEgZGVsZWdhdGlvbiBmb3IgdGhlIHBvcHVwIG1lbnUgb2YgdGhlCisgKiA8Y29kZT5HZW9ncmFwaGljUmVuZGVyZXI8L2NvZGU+LiBUaGUgcHVycG9zZSBvZiB0aGlzIGNsYXNzIGlzIHRvIGhhbmRsZQorICogdGhlIGFjdGl2aXR5IGluIHRoZSByZXBvcnRzIGNvbnRleHQgbWVudSBhbmQga2VlcCB0aGUgY3VycmVudCBzdGF0ZSBvZiBhbGwKKyAqIGVuYWJsZWQvZGlzYWJsZWQgcmVwb3J0cyBmcm9tIHRoYXQgbWVudS4gVGhlIHJlcG9ydCdzIDxjb2RlPlZpZXdQYXJ0PC9jb2RlPgorICogb2JqZWN0IHdpbGwgdXNlIHRoaXMgY2xhc3MgZm9yIGNoZWNraW5nIHdoZXRoZXIgdG8gZ2VuZXJhdGUgYSByZXBvcnQgb3Igbm90LgorICovCitwdWJsaWMgY2xhc3MgUmVwb3J0c0NvbnRleHRNZW51QWN0aW9uIAorCWltcGxlbWVudHMgSVZpZXdBY3Rpb25EZWxlZ2F0ZSB7CisJCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS51aS5JQWN0aW9uRGVsZWdhdGUjcnVuKG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JQWN0aW9uKQorCSAqLworCXB1YmxpYyB2b2lkIHJ1bihvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSUFjdGlvbiBhY3Rpb24pIHsKKwkJU3RyaW5nIHJlcG9ydElkID0gYWN0aW9uLmdldElkKCk7CisJCQorCQlpZiAoU2VsZWN0ZWRSZXBvcnRzTWFuYWdlci5nZXRJbnN0YW5jZSgpLmlzUmVwb3J0RW5hYmxlZChyZXBvcnRJZCkpIHsgLy8gVGhlIHJlcG9ydCB3YXMgcHJldmlvdXNseSBlbmFibGVkIHNvIGRpc2FibGUgaXQKKwkJCVNlbGVjdGVkUmVwb3J0c01hbmFnZXIuZ2V0SW5zdGFuY2UoKS5kaXNhYmxlUmVwb3J0Rm9ySWRlbnRpZmlhYmxlKHJlcG9ydElkKTsKKwkJCWFjdGlvbi5zZXRDaGVja2VkKGZhbHNlKTsKKwkJfQorCQllbHNlCisJCXsKKwkJCVNlbGVjdGVkUmVwb3J0c01hbmFnZXIuZ2V0SW5zdGFuY2UoKS5lbmFibGVSZXBvcnRGb3JJZGVudGlmaWFibGUocmVwb3J0SWQpOworCQkJYWN0aW9uLnNldENoZWNrZWQodHJ1ZSk7CisJCX0KKwl9CisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnVpLklBY3Rpb25EZWxlZ2F0ZSNzZWxlY3Rpb25DaGFuZ2VkKG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JQWN0aW9uLAorCSAqICAgICAgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uKQorCSAqLworCXB1YmxpYyB2b2lkIHNlbGVjdGlvbkNoYW5nZWQoQFN1cHByZXNzV2FybmluZ3MoInVudXNlZCIpCisJb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklBY3Rpb24gYWN0aW9uLAorCQkJQFN1cHByZXNzV2FybmluZ3MoInVudXNlZCIpCisJCQlvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb24gc2VsZWN0aW9uKSB7CisJCS8vIERvIE5vdGhpbmcKKwl9CisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnVpLklWaWV3QWN0aW9uRGVsZWdhdGUjaW5pdChvcmcuZWNsaXBzZS51aS5JVmlld1BhcnQpCisJICovCisJcHVibGljIHZvaWQgaW5pdChAU3VwcHJlc3NXYXJuaW5ncygidW51c2VkIikKKwlJVmlld1BhcnQgYXJnMCkgeworCQkvLyBEbyBOb3RoaW5nCisJfQorfQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWwubG9nZ2Vycy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91dGlsL2xvZ2dlcnMvdmlld3MvbWVzc2FnZXMucHJvcGVydGllcyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsLmxvZ2dlcnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdXRpbC9sb2dnZXJzL3ZpZXdzL21lc3NhZ2VzLnByb3BlcnRpZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzBmMmRjNAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsLmxvZ2dlcnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdXRpbC9sb2dnZXJzL3ZpZXdzL21lc3NhZ2VzLnByb3BlcnRpZXMKQEAgLTAsMCArMSwxNiBAQAorIyBtZXNzYWdlcy5wcm9wZXJ0aWVzCisjCisjIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjICogQ29weXJpZ2h0IChjKSAyMDA3LCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorIyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyMgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyMgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorIyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisjICoKKyMgKiBDb250cmlidXRvcnM6CisjICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorIyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjIENvbW1hIHNlcGFyYXRlZCB2YXJpYWJsZQorQ1NDLnRpdGxlPUNTVgorCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbC5sb2dnZXJzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3V0aWwvbG9nZ2Vycy92aWV3cy9tZXNzYWdlc19kZS5wcm9wZXJ0aWVzIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWwubG9nZ2Vycy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91dGlsL2xvZ2dlcnMvdmlld3MvbWVzc2FnZXNfZGUucHJvcGVydGllcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MGYyZGM0Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWwubG9nZ2Vycy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91dGlsL2xvZ2dlcnMvdmlld3MvbWVzc2FnZXNfZGUucHJvcGVydGllcwpAQCAtMCwwICsxLDE2IEBACisjIG1lc3NhZ2VzLnByb3BlcnRpZXMKKyMKKyMgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyMgKiBDb3B5cmlnaHQgKGMpIDIwMDcsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisjICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworIyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorIyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisjICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyMgKgorIyAqIENvbnRyaWJ1dG9yczoKKyMgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisjICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyMgQ29tbWEgc2VwYXJhdGVkIHZhcmlhYmxlCitDU0MudGl0bGU9Q1NWCisKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsLmxvZ2dlcnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdXRpbC9sb2dnZXJzL3ZpZXdzL21lc3NhZ2VzX2tyLnByb3BlcnRpZXMgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbC5sb2dnZXJzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3V0aWwvbG9nZ2Vycy92aWV3cy9tZXNzYWdlc19rci5wcm9wZXJ0aWVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcwZjJkYzQKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbC5sb2dnZXJzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3V0aWwvbG9nZ2Vycy92aWV3cy9tZXNzYWdlc19rci5wcm9wZXJ0aWVzCkBAIC0wLDAgKzEsMTYgQEAKKyMgbWVzc2FnZXMucHJvcGVydGllcworIworIyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIyAqIENvcHlyaWdodCAoYykgMjAwNywgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyMgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisjICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisjICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyMgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorIyAqCisjICogQ29udHJpYnV0b3JzOgorIyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworIyBDb21tYSBzZXBhcmF0ZWQgdmFyaWFibGUKK0NTQy50aXRsZT1DU1YKKwpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWwubG9nZ2Vycy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91dGlsL2xvZ2dlcnMvdmlld3MvbWVzc2FnZXNfemgucHJvcGVydGllcyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsLmxvZ2dlcnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdXRpbC9sb2dnZXJzL3ZpZXdzL21lc3NhZ2VzX3poLnByb3BlcnRpZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzBmMmRjNAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsLmxvZ2dlcnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdXRpbC9sb2dnZXJzL3ZpZXdzL21lc3NhZ2VzX3poLnByb3BlcnRpZXMKQEAgLTAsMCArMSwxNiBAQAorIyBtZXNzYWdlcy5wcm9wZXJ0aWVzCisjCisjIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjICogQ29weXJpZ2h0IChjKSAyMDA3LCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorIyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyMgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyMgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorIyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisjICoKKyMgKiBDb250cmlidXRvcnM6CisjICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorIyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjIENvbW1hIHNlcGFyYXRlZCB2YXJpYWJsZQorQ1NDLnRpdGxlPUNTVgorCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS8uY2xhc3NwYXRoIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvLmNsYXNzcGF0aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMzY4YmRlCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvLmNsYXNzcGF0aApAQCAtMCwwICsxLDggQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8Y2xhc3NwYXRoPgorCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJzcmMiIHBhdGg9InNyYyIvPgorCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJjb24iIHBhdGg9Im9yZy5lY2xpcHNlLmpkdC5sYXVuY2hpbmcuSlJFX0NPTlRBSU5FUiIvPgorCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJsaWIiIHBhdGg9ImxpYi94ZXJjZXNJbXBsLmphciIvPgorCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJsaWIiIHBhdGg9ImxpYi94bWwtYXBpcy5qYXIiLz4KKwk8Y2xhc3NwYXRoZW50cnkga2luZD0ib3V0cHV0IiBwYXRoPSJiaW4iLz4KKzwvY2xhc3NwYXRoPgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvLnByb2plY3QgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS8ucHJvamVjdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMmQxM2FjCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvLnByb2plY3QKQEAgLTAsMCArMSwxNyBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxwcm9qZWN0RGVzY3JpcHRpb24+CisJPG5hbWU+b3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5PC9uYW1lPgorCTxjb21tZW50PjwvY29tbWVudD4KKwk8cHJvamVjdHM+CisJPC9wcm9qZWN0cz4KKwk8YnVpbGRTcGVjPgorCQk8YnVpbGRDb21tYW5kPgorCQkJPG5hbWU+b3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YWJ1aWxkZXI8L25hbWU+CisJCQk8YXJndW1lbnRzPgorCQkJPC9hcmd1bWVudHM+CisJCTwvYnVpbGRDb21tYW5kPgorCTwvYnVpbGRTcGVjPgorCTxuYXR1cmVzPgorCQk8bmF0dXJlPm9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFuYXR1cmU8L25hdHVyZT4KKwk8L25hdHVyZXM+Cis8L3Byb2plY3REZXNjcmlwdGlvbj4KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5Ly5zZXR0aW5ncy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5wcmVmcyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5Ly5zZXR0aW5ncy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5wcmVmcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMDZjYjJiCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvLnNldHRpbmdzL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLnByZWZzCkBAIC0wLDAgKzEsMyBAQAorI1R1ZSBKYW4gMTYgMDk6NTA6MjMgUFNUIDIwMDcKK2VjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xCitlbmNvZGluZy8vc3JjL29yZy9lY2xpcHNlL3N0ZW0vdXRpbGl0eS9nZW5lcmF0b3JzL21lc3NhZ2VzLnByb3BlcnRpZXM9ODg1OV8xCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTc5OWE0NwotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5Ly5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcwpAQCAtMCwwICsxLDc3IEBACisjVHVlIFNlcCAwMSAxNjo1OTowOSBFRFQgMjAwOQorZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmJ1aWxkZXIuY2xlYW5PdXRwdXRGb2xkZXI9Y2xlYW4KK29yZy5lY2xpcHNlLmpkdC5jb3JlLmJ1aWxkZXIuZHVwbGljYXRlUmVzb3VyY2VUYXNrPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmJ1aWxkZXIuaW52YWxpZENsYXNzcGF0aD1hYm9ydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuYnVpbGRlci5yZWNyZWF0ZU1vZGlmaWVkQ2xhc3NGaWxlSW5PdXRwdXRGb2xkZXI9aWdub3JlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5idWlsZGVyLnJlc291cmNlQ29weUV4Y2x1c2lvbkZpbHRlcj0qLmxhdW5jaAorb3JnLmVjbGlwc2UuamR0LmNvcmUuY2lyY3VsYXJDbGFzc3BhdGg9ZXJyb3IKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNsYXNzcGF0aC5leGNsdXNpb25QYXR0ZXJucz1lbmFibGVkCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jbGFzc3BhdGgubXVsdGlwbGVPdXRwdXRMb2NhdGlvbnM9ZW5hYmxlZAorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuZG9jLmNvbW1lbnQuc3VwcG9ydD1kaXNhYmxlZAorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIubWF4UHJvYmxlbVBlclVuaXQ9MTAwCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmFubm90YXRpb25TdXBlckludGVyZmFjZT13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmF1dG9ib3hpbmc9aWdub3JlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRlcHJlY2F0aW9uPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZGVwcmVjYXRpb25JbkRlcHJlY2F0ZWRDb2RlPWRpc2FibGVkCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRlcHJlY2F0aW9uV2hlbk92ZXJyaWRpbmdEZXByZWNhdGVkTWV0aG9kPWRpc2FibGVkCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRpc2NvdXJhZ2VkUmVmZXJlbmNlPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZW1wdHlTdGF0ZW1lbnQ9aWdub3JlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZhbGx0aHJvdWdoQ2FzZT1pZ25vcmUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZmF0YWxPcHRpb25hbEVycm9yPWVuYWJsZWQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZmllbGRIaWRpbmc9aWdub3JlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZpbmFsUGFyYW1ldGVyQm91bmQ9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5maW5hbGx5QmxvY2tOb3RDb21wbGV0aW5nTm9ybWFsbHk9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5mb3JiaWRkZW5SZWZlcmVuY2U9ZXJyb3IKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaGlkZGVuQ2F0Y2hCbG9jaz13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmluY29tcGF0aWJsZU5vbkluaGVyaXRlZEludGVyZmFjZU1ldGhvZD13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmluY29tcGxldGVFbnVtU3dpdGNoPWlnbm9yZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbmRpcmVjdFN0YXRpY0FjY2Vzcz13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmludmFsaWRKYXZhZG9jPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW52YWxpZEphdmFkb2NUYWdzPWVuYWJsZWQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW52YWxpZEphdmFkb2NUYWdzRGVwcmVjYXRlZFJlZj1lbmFibGVkCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmludmFsaWRKYXZhZG9jVGFnc05vdFZpc2libGVSZWY9ZW5hYmxlZAorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbnZhbGlkSmF2YWRvY1RhZ3NWaXNpYmlsaXR5PXB1YmxpYworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5sb2NhbFZhcmlhYmxlSGlkaW5nPWlnbm9yZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5tZXRob2RXaXRoQ29uc3RydWN0b3JOYW1lPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0RlcHJlY2F0ZWRBbm5vdGF0aW9uPWlnbm9yZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nSmF2YWRvY0NvbW1lbnRzPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0phdmFkb2NDb21tZW50c092ZXJyaWRpbmc9ZW5hYmxlZAorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nSmF2YWRvY0NvbW1lbnRzVmlzaWJpbGl0eT1wdWJsaWMKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0phdmFkb2NUYWdEZXNjcmlwdGlvbj1yZXR1cm5fdGFnCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdKYXZhZG9jVGFncz13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdKYXZhZG9jVGFnc092ZXJyaWRpbmc9ZW5hYmxlZAorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nSmF2YWRvY1RhZ3NWaXNpYmlsaXR5PXB1YmxpYworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nT3ZlcnJpZGVBbm5vdGF0aW9uPWlnbm9yZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nU2VyaWFsVmVyc2lvbj13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm5vRWZmZWN0QXNzaWdubWVudD13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm5vSW1wbGljaXRTdHJpbmdDb252ZXJzaW9uPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubm9uRXh0ZXJuYWxpemVkU3RyaW5nTGl0ZXJhbD13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm51bGxSZWZlcmVuY2U9aWdub3JlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm92ZXJyaWRpbmdQYWNrYWdlRGVmYXVsdE1ldGhvZD13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnBhcmFtZXRlckFzc2lnbm1lbnQ9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5wb3NzaWJsZUFjY2lkZW50YWxCb29sZWFuQXNzaWdubWVudD1pZ25vcmUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ucmF3VHlwZVJlZmVyZW5jZT1pZ25vcmUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uc3BlY2lhbFBhcmFtZXRlckhpZGluZ0ZpZWxkPWRpc2FibGVkCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnN0YXRpY0FjY2Vzc1JlY2VpdmVyPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uc3VwcHJlc3NXYXJuaW5ncz1lbmFibGVkCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnN5bnRoZXRpY0FjY2Vzc0VtdWxhdGlvbj13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnR5cGVQYXJhbWV0ZXJIaWRpbmc9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bmNoZWNrZWRUeXBlT3BlcmF0aW9uPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5kb2N1bWVudGVkRW1wdHlCbG9jaz13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVuaGFuZGxlZFdhcm5pbmdUb2tlbj13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVubmVjZXNzYXJ5RWxzZT1pZ25vcmUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5uZWNlc3NhcnlUeXBlQ2hlY2s9aWdub3JlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVucXVhbGlmaWVkRmllbGRBY2Nlc3M9aWdub3JlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZERlY2xhcmVkVGhyb3duRXhjZXB0aW9uPWlnbm9yZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWREZWNsYXJlZFRocm93bkV4Y2VwdGlvbldoZW5PdmVycmlkaW5nPWRpc2FibGVkCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZEltcG9ydD13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZExhYmVsPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkTG9jYWw9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRQYXJhbWV0ZXI9aWdub3JlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZFBhcmFtZXRlcldoZW5JbXBsZW1lbnRpbmdBYnN0cmFjdD1kaXNhYmxlZAorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRQYXJhbWV0ZXJXaGVuT3ZlcnJpZGluZ0NvbmNyZXRlPWRpc2FibGVkCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZFByaXZhdGVNZW1iZXI9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS52YXJhcmdzQXJndW1lbnROZWVkQ2FzdD13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5pbmNvbXBhdGlibGVKREtMZXZlbD1pZ25vcmUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmluY29tcGxldGVDbGFzc3BhdGg9ZXJyb3IKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5Ly5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQubGF1bmNoaW5nLnByZWZzIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5sYXVuY2hpbmcucHJlZnMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2NiN2MzOQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5Ly5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQubGF1bmNoaW5nLnByZWZzCkBAIC0wLDAgKzEsMyBAQAorI1RodSBGZWIgMjQgMTA6MzA6MzUgUFNUIDIwMTEKK2VjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xCitvcmcuZWNsaXBzZS5qZHQubGF1bmNoaW5nLlBSRUZfU1RSSUNUTFlfQ09NUEFUSUJMRV9KUkVfTk9UX0FWQUlMQUJMRT13YXJuaW5nCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LnVpLnByZWZzIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC51aS5wcmVmcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMWMwYThiCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC51aS5wcmVmcwpAQCAtMCwwICsxLDMgQEAKKyNUdWUgSmFuIDE2IDA5OjI2OjMwIFBTVCAyMDA3CitlY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQorb3JnLmVjbGlwc2UuamR0LnVpLnRleHQuY3VzdG9tX2NvZGVfdGVtcGxhdGVzPTw/eG1sIHZlcnNpb25cPSIxLjAiIGVuY29kaW5nXD0iVVRGLTgiPz48dGVtcGxhdGVzLz4KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L2NvbmZpZ3VyYXRpb24vQWRtaW4xTGV4U29ydGVyLmNvbmZpZyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L2NvbmZpZ3VyYXRpb24vQWRtaW4xTGV4U29ydGVyLmNvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZWJmZGZjCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvY29uZmlndXJhdGlvbi9BZG1pbjFMZXhTb3J0ZXIuY29uZmlnCkBAIC0wLDAgKzEsMjkgQEAKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIworIyAqKioqKioqKioqIENPTkZJR1VSQVRJT04gRklMRSBGT1IgQURNSU4gMSBMRVhJQ09HUkFQSElDIFNPUlRFUiAqKioqKioqKioqCisjCisjIFRPIENIQU5HRSBERUZBVUxUIENPTkZJR1VSQVRJT04gVkFMVUVTLCBNT0RJRlkgT1JHLkVDTElQU0UuU1RFTS5VVElMSVRZLkdFTkVSQVRPUlNcR2VuQ29uc3RhbnRzLmphdmEKKyMKKyMgQ09ORklHVVJBVElPTiBWQVJJQUJMRVMgU0VUIElOIFRISVMgRklMRSBPVkVSUklERSBUSEUgREVGQVVMVFMKKyMKKyMgVGhlIFdPUktTUEFDRSBWQVJJQUJMRSBJUyBSRVFVSVJFRCwgQUxMIE9USEVSIFZBUklBQkxFUyBBUkUgT1BUSU9OQUwgKGkuZS4gV09SS1NQQUNFPUM6XHN0ZW1JSVwpCitXT1JLU1BBQ0U9Qzpcc3RlbUlJXAorIworIyBJU08zMTY2LTEgZmlsZSAoaS5lLiBJU08zMTY2XzE9Qzpcc3RlbUlJXG9yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eVxwYXJhbWV0ZXJzXElTTzMxNjYtMVxJU08zMTY2XzFfbGlzdC50eHQpCisjSVMwMzE2Nl8xPQorIworIyBJU08zMTY2LTIgZmlsZSAoaS5lLiBJU08zMTY2XzI9Qzpcc3RlbUlJXG9yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eVxwYXJhbWV0ZXJzXElTTzMxNjYtMlxJU08zMTY2XzJfbGlzdC50eHQpCisjSVNPMzE2Nl8yPQorIworIyBJU08gZml4ICBmaWxlIChpLmUuIElTT19GSVg9Qzpcc3RlbUlJXG9yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eVxwYXJhbWV0ZXJzXElTT0ZJWFxJU09fRklYLnR4dCkKKyNJU09fRklYPQorIworIyBGaWxlIHdpdGggdGFyZ2V0IGNvdW50cmllcyB3ZSB3YW50IHRvIHByb2Nlc3MgKGkuZS4gVEFSR0VUX0xJU1Q9Qzpcc3RlbUlJXG9yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eVxwYXJhbWV0ZXJzXHRhcmdldHNcY291bnRyeV9uYW1lcy50eHQpCitUQVJHRVRfTElTVCA9IEM6XHN0ZW1JSVxvcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHlccGFyYW1ldGVyc1x0YXJnZXRzXGNvdW50cnlfbmFtZXMudHh0CisjCisjIE91dHB1dCBkaXJlY3RvcnkgZm9yIG5ldyBmaWxlcyAoaS5lLiBQUk9QRVJUSUVTX09VVFBVVD1DOlxzdGVtSUlcb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5XHBhcmFtZXRlcnNcKQorUFJPUEVSVElFU19PVVRQVVQgPSBDOlxzdGVtSUlcb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5XHBhcmFtZXRlcnNcc29ydFwKKyMKKyMgKioqKioqKioqKiBFTkQgT0YgQ09ORklHVVJBVElPTiBGSUxFIEZPUiBBRE1JTiAxIExFWElDT0dSQVBISUMgU09SVEVSICoqKioqKioqKioKKyMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L2NvbmZpZ3VyYXRpb24vQWRtaW4yTGV4U29ydGVyLmNvbmZpZyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L2NvbmZpZ3VyYXRpb24vQWRtaW4yTGV4U29ydGVyLmNvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ODgzNzhlCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvY29uZmlndXJhdGlvbi9BZG1pbjJMZXhTb3J0ZXIuY29uZmlnCkBAIC0wLDAgKzEsMjMgQEAKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIworIyAqKioqKioqKioqIENPTkZJR1VSQVRJT04gRklMRSBGT1IgQURNSU4gMiBMRVhJQ09HUkFQSElDIFNPUlRFUiAqKioqKioqKioqCisjCisjIFRPIENIQU5HRSBERUZBVUxUIENPTkZJR1VSQVRJT04gVkFMVUVTLCBNT0RJRlkgT1JHLkVDTElQU0UuU1RFTS5VVElMSVRZLkdFTkVSQVRPUlNcR2VuQ29uc3RhbnRzLmphdmEKKyMKKyMgQ09ORklHVVJBVElPTiBWQVJJQUJMRVMgU0VUIElOIFRISVMgRklMRSBPVkVSUklERSBUSEUgREVGQVVMVFMKKyMKKyMgVGhlIFdPUktTUEFDRSBWQVJJQUJMRSBJUyBSRVFVSVJFRCwgQUxMIE9USEVSIFZBUklBQkxFUyBBUkUgT1BUSU9OQUwgKGkuZS4gV09SS1NQQUNFPUM6XHN0ZW1JSVwpCitXT1JLU1BBQ0U9Qzpcc3RlbUlJXAorIworIyBJU08zMTY2LTEgZmlsZSAoaS5lLiBJU08zMTY2XzE9Qzpcc3RlbUlJXG9yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eVxwYXJhbWV0ZXJzXElTTzMxNjYtMVxJU08zMTY2XzFfbGlzdC50eHQpCisjSVMwMzE2Nl8xPQorIworIyBGaWxlIHdpdGggdGFyZ2V0IGNvdW50cmllcyB3ZSB3YW50IHRvIHByb2Nlc3MgKGkuZS4gVEFSR0VUX0xJU1Q9Qzpcc3RlbUlJXG9yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eVxwYXJhbWV0ZXJzXHRhcmdldHNcZ3JvdXBlZERhdGFGaWxlcy50eHQpCitUQVJHRVRfTElTVCA9Qzpcc3RlbUlJXG9yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eVxwYXJhbWV0ZXJzXHRhcmdldHNcZ3JvdXBlZERhdGFGaWxlcy50eHQKKyMKKyMgT3V0cHV0IGRpcmVjdG9yeSBmb3IgbmV3IGZpbGVzIChpLmUuIFBST1BFUlRJRVNfT1VUUFVUPUM6XHN0ZW1JSVxvcmcuZWNsaXBzZS5zdGVtLmludGVybmFsLmRhdGFccmVzb3VyY2VzXGRhdGFcY291bnRyeVwpCisjUFJPUEVSVElFU19PVVRQVVQ9IEM6XHRlbXBvdXRcCisjCisjICoqKioqKioqKiogRU5EIE9GIENPTkZJR1VSQVRJT04gRklMRSBGT1IgQURNSU4gMiBMRVhJQ09HUkFQSElDIFNPUlRFUiAqKioqKioqKioqCisjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9jb25maWd1cmF0aW9uL0FyZWFHZW5lcmF0b3IuY29uZmlnIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvY29uZmlndXJhdGlvbi9BcmVhR2VuZXJhdG9yLmNvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MWUyNTMyCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvY29uZmlndXJhdGlvbi9BcmVhR2VuZXJhdG9yLmNvbmZpZwpAQCAtMCwwICsxLDQxIEBACisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMKKyMgKioqKioqKioqKiBDT05GSUdVUkFUSU9OIEZJTEUgRk9SIEFSRUEgR0VORVJBVE9SICoqKioqKioqKioKKyMKKyMgVE8gQ0hBTkdFIERFRkFVTFQgQ09ORklHVVJBVElPTiBWQUxVRVMsIE1PRElGWSBPUkcuRUNMSVBTRS5TVEVNLlVUSUxJVFkuR0VORVJBVE9SU1xHZW5Db25zdGFudHMuamF2YQorIworIyBDT05GSUdVUkFUSU9OIFZBUklBQkxFUyBTRVQgSU4gVEhJUyBGSUxFIE9WRVJSSURFIFRIRSBERUZBVUxUUworIworIyBUaGUgV09SS1NQQUNFIFZBUklBQkxFIElTIFJFUVVJUkVELCBBTEwgT1RIRVIgVkFSSUFCTEVTIEFSRSBPUFRJT05BTCAoaS5lLiBXT1JLU1BBQ0U9Qzpcc3RlbUlJXCkKK1dPUktTUEFDRT1DOlxzdGVtSUlcCisjCisjIElTTzMxNjYtMSBmaWxlIChpLmUuIElTTzMxNjZfMT1DOlxzdGVtSUlcb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5XHBhcmFtZXRlcnNcSVNPMzE2Ni0xXElTTzMxNjZfMV9saXN0LnR4dCkKKyNJUzAzMTY2XzE9CisjCisjIElTTzMxNjYtMiBmaWxlIChpLmUuIElTTzMxNjZfMj1DOlxzdGVtSUlcb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5XHBhcmFtZXRlcnNcSVNPMzE2Ni0yXElTTzMxNjZfMl9saXN0LnR4dCkKKyNJU08zMTY2XzI9CisjCisjIElTTyBmaXggIGZpbGUgKGkuZS4gSVNPX0ZJWD1DOlxzdGVtSUlcb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5XHBhcmFtZXRlcnNcSVNPRklYXElTT19GSVgudHh0KQorI0lTT19GSVg9CisjCisjIEZpbGUgd2l0aCB0YXJnZXQgY291bnRyaWVzIHdlIHdhbnQgdG8gcHJvY2VzcyAoaS5lLiBUQVJHRVRfTElTVD1DOlxzdGVtSUlcb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5XHBhcmFtZXRlcnNcdGFyZ2V0c1xncm91cGVkRGF0YUZpbGVzLnR4dCkKKyNUQVJHRVRfTElTVCA9CisjCisjIFBvcHVsYXRpb24gcHJvZmlsZSBmb3IgdGhpcyBjb3VudHJ5IChpLmUuIFBPUF9QUk9GSUxFUz1DOlxzdGVtSUlcb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5XHBhcmFtZXRlcnNccHJvZmlsZXNcKQorI1BPUF9QUk9GSUxFUz0KKyMKKyMgUGF0aCB0byBhcmVhcyBpbiBwb2x5Z29uIHVuaXRzIC0gdXNlZCBvbmx5IGZvciBjb21wdXRpbmcgYXBwcm94aW1hdGUgYXJlYSBvZiBsZXZlbCAyIHJlZ2lvbnMgKGkuZS4gUE9MWUdPTl9BUkVBUz1DOlxzdGVtSUlcb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5XHBhcmFtZXRlcnNcUG9seWdvbkFyZWFzXCkKKyNQT0xZR09OX0FSRUFTPQorIworIyBQYXRoIHRvIGFyZWEgYW5kIHBvcHVsYXRpb24gZmlsZXMgKGkuZS4gQVJFQV9QT1A9Qzpcc3RlbUlJXG9yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eVxwYXJhbWV0ZXJzXEFyZWFQb3B1bGF0aW9uRGF0YVwpCisjQVJFQV9QT1A9CisjCisjIFBhdGggdG8gZm9sZGVyIHdpdGggbGV4aWNvZ3JhcGhpY2FsbHkgc29ydGVkIGZpbGVzIChpLmUuIExFWF9ESVI9Qzpcc3RlbUlJXG9yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eVxwYXJhbWV0ZXJzXHNvcnRcKQorI0xFWF9ESVI9CisjCisjIE91dHB1dCBkaXJlY3RvcnkgZm9yIG5ldyBmaWxlcyAoaS5lLiBQUk9QRVJUSUVTX09VVFBVVD1DOlxzdGVtSUlcb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcm5hbC5kYXRhXHJlc291cmNlc1xkYXRhXGNvdW50cnlcKQorUFJPUEVSVElFU19PVVRQVVQ9IEM6XHRlbXBvdXRcCisjCisjICoqKioqKioqKiogRU5EIE9GIENPTkZJR1VSQVRJT04gRklMRSBGT1IgQVJFQSBHRU5FUkFUT1IgKioqKioqKioqKgorIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvY29uZmlndXJhdGlvbi9Eb3duU2FtcGxlci5jb25maWcgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9jb25maWd1cmF0aW9uL0Rvd25TYW1wbGVyLmNvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMDA0Zjc0Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvY29uZmlndXJhdGlvbi9Eb3duU2FtcGxlci5jb25maWcKQEAgLTAsMCArMSw0MiBAQAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjCisjICoqKioqKioqKiogQ09ORklHVVJBVElPTiBGSUxFIEZPUiBET1dOLVNBTVBMRVIgKioqKioqKioqKgorIworIyBUTyBDSEFOR0UgREVGQVVMVCBDT05GSUdVUkFUSU9OIFZBTFVFUywgTU9ESUZZIE9SRy5FQ0xJUFNFLlNURU0uVVRJTElUWS5HRU5FUkFUT1JTXEdlbkNvbnN0YW50cy5qYXZhCisjCisjIENPTkZJR1VSQVRJT04gVkFSSUFCTEVTIFNFVCBJTiBUSElTIEZJTEUgT1ZFUlJJREUgVEhFIERFRkFVTFRTCisjCisjIFRoZSBXT1JLU1BBQ0UgVkFSSUFCTEUgSVMgUkVRVUlSRUQsIEFMTCBPVEhFUiBWQVJJQUJMRVMgQVJFIE9QVElPTkFMIChpLmUuIFdPUktTUEFDRT1DOlxzdGVtSUlcKQorV09SS1NQQUNFPUM6XHN0ZW1JSVwKKyMKKyMgVGhlIFRIUkVTSE9MRCB2YXJpYWJsZSBzcGVjaWZpZXMgYW4gYW5nbGUgaW4gZGVncmVlcyBmb3Igd2hpY2ggd2Ugd2FudCB0byByZWR1Y2UuIElmIG5vdCBwcm92aWRlZCBpdCBkZWZhdWx0cyB0byA1IGRlZ3JlZXMuCitUSFJFU0hPTEQ9NQorIworIyBUaGUgbnVtYmVyIG9mIHJlZHVjdGlvbiBJVEVSQVRJT05TLiBJZiBub3QgcHJvdmlkZWQgaXQgZGVmYXVsdHMgdG8gNSBpdGVyYXRpb25zLgorSVRFUkFUSU9OUz01CisjCisjIElTTzMxNjYtMSBmaWxlIChpLmUuIElTTzMxNjZfMT1DOlxzdGVtSUlcb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5XHBhcmFtZXRlcnNcSVNPMzE2Ni0xXElTTzMxNjZfMV9saXN0LnR4dCkKKyNJUzAzMTY2XzE9CisjCisjIElTTzMxNjYtMiBmaWxlIChpLmUuIElTTzMxNjZfMj1DOlxzdGVtSUlcb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5XHBhcmFtZXRlcnNcSVNPMzE2Ni0yXElTTzMxNjZfMl9saXN0LnR4dCkKKyNJU08zMTY2XzI9CisjCisjIElTTyBmaXggIGZpbGUgKGkuZS4gSVNPX0ZJWD1DOlxzdGVtSUlcb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5XHBhcmFtZXRlcnNcSVNPRklYXElTT19GSVgudHh0KQorI0lTT19GSVg9CisjCisjIEZpbGUgd2l0aCB0YXJnZXQgY291bnRyaWVzIHdlIHdhbnQgdG8gcHJvY2VzcyAoaS5lLiBUQVJHRVRfTElTVD1DOlxzdGVtSUlcb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5XHBhcmFtZXRlcnNcdGFyZ2V0c1xncm91cGVkRGF0YUZpbGVzLnR4dCkKK1RBUkdFVF9MSVNUID0gQzpcc3RlbUlJXG9yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eVxwYXJhbWV0ZXJzXHRhcmdldHNcQ291bnRyaWVzTGlnaHQudHh0CisjCisjIEZpbGUgd2l0aCB0YXJnZXQgY291bnRyaWVzIHdlIHdhbnQgdG8gcHJvY2VzcyAoaS5lLiBUQVJHRVRfTElTVD1DOlxzdGVtSUlcb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5XHBhcmFtZXRlcnNcdGFyZ2V0c1xncm91cGVkRGF0YUZpbGVzLnR4dCkKK1JFRFVDRV9MSVNUID0gQzpcc3RlbUlJXG9yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eVxwYXJhbWV0ZXJzXHRhcmdldHNccmVkdWNlTGlzdC50eHQKKyMKKyMgUGF0aCB0byBmb2xkZXIgd2l0aCBsZXhpY29ncmFwaGljYWxseSBzb3J0ZWQgZmlsZXMgKGkuZS4gTEVYX0RJUj1DOlxzdGVtSUlcb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5XHBhcmFtZXRlcnNcc29ydFwpCisjTEVYX0RJUj0KKyMKKyMgT3V0cHV0IGRpcmVjdG9yeSBmb3IgbmV3IGZpbGVzIChpLmUuIFBST1BFUlRJRVNfT1VUUFVUPUM6XHN0ZW1JSVxvcmcuZWNsaXBzZS5zdGVtLmludGVybmFsLmRhdGFccmVzb3VyY2VzXGRhdGFcY291bnRyeVwpCitNQVBfT1VUUFVUPSBDOlx0ZW1wb3V0XAorIworIyAqKioqKioqKioqIEVORCBPRiBDT05GSUdVUkFUSU9OIEZJTEUgRk9SIERPV04tU0FNUExFUiAqKioqKioqKioqCisjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKwpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvY29uZmlndXJhdGlvbi9FdXJvcGVEYXRhQ2xlYW5lci5jb25maWcgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9jb25maWd1cmF0aW9uL0V1cm9wZURhdGFDbGVhbmVyLmNvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMDY3ZWQwCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvY29uZmlndXJhdGlvbi9FdXJvcGVEYXRhQ2xlYW5lci5jb25maWcKQEAgLTAsMCArMSwyMCBAQAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjCisjICoqKioqKioqKiogQ09ORklHVVJBVElPTiBGSUxFIEVVUk9QRSBEQVRBIENMRUFORVIgKioqKioqKioqKgorIworIyBUTyBDSEFOR0UgREVGQVVMVCBDT05GSUdVUkFUSU9OIFZBTFVFUywgTU9ESUZZIE9SRy5FQ0xJUFNFLlNURU0uVVRJTElUWS5HRU5FUkFUT1JTXEdlbkNvbnN0YW50cy5qYXZhCisjCisjIENPTkZJR1VSQVRJT04gVkFSSUFCTEVTIFNFVCBJTiBUSElTIEZJTEUgT1ZFUlJJREUgVEhFIERFRkFVTFRTCisjCisjIFRoZSBXT1JLU1BBQ0UgVkFSSUFCTEUgSVMgUkVRVUlSRUQsIEFMTCBPVEhFUiBWQVJJQUJMRVMgQVJFIE9QVElPTkFMIChpLmUuIFdPUktTUEFDRT1DOlxzdGVtSUlcKQorV09SS1NQQUNFPUM6XHN0ZW1JSVwKKyMKKyMgRmlsZSB3aXRoIHRhcmdldCBjb3VudHJpZXMgd2Ugd2FudCB0byBwcm9jZXNzIChpLmUuIFRBUkdFVF9MSVNUPUM6XHN0ZW1JSVxvcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHlccGFyYW1ldGVyc1x0YXJnZXRzXEV1cm9wZUNvdW50cmllcy50eHQpCitUQVJHRVRfTElTVCA9IEM6XHN0ZW1JSVxvcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHlccGFyYW1ldGVyc1x0YXJnZXRzXEV1cm9wZUNvdW50cmllcy50eHQKKyMKKyMgT3V0cHV0IGRpcmVjdG9yeSBmb3IgbmV3IGZpbGVzIChpLmUuIE9VVFBVVD1DOlxFdXJvcGVEYXRhMjAwN1xFdXJvcGVVTlxVTmRhdGFTaHBcKQorT1VUUFVUID0gQzpcRXVyb3BlRGF0YTIwMDdcRXVyb3BlVU5cVU5kYXRhU2hwXAorIworIyAqKioqKioqKioqIEVORCBPRiBDT05GSUdVUkFUSU9OIEZJTEUgRk9SIEVVUk9QRSBEQVRBIENMRUFORVIgKioqKioqKioqKgorIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvY29uZmlndXJhdGlvbi9FdXJvcGVEYXRhQ29udmVydGVyLmNvbmZpZyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L2NvbmZpZ3VyYXRpb24vRXVyb3BlRGF0YUNvbnZlcnRlci5jb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmQ3MTgzMAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L2NvbmZpZ3VyYXRpb24vRXVyb3BlRGF0YUNvbnZlcnRlci5jb25maWcKQEAgLTAsMCArMSwyNiBAQAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjCisjICoqKioqKioqKiogQ09ORklHVVJBVElPTiBGSUxFIEZPUiBFVVJPUEUgREFUQSBDT05WRVJURVIgKioqKioqKioqKgorIworIyBUTyBDSEFOR0UgREVGQVVMVCBDT05GSUdVUkFUSU9OIFZBTFVFUywgTU9ESUZZIE9SRy5FQ0xJUFNFLlNURU0uVVRJTElUWS5HRU5FUkFUT1JTXEdlbkNvbnN0YW50cy5qYXZhCisjCisjIENPTkZJR1VSQVRJT04gVkFSSUFCTEVTIFNFVCBJTiBUSElTIEZJTEUgT1ZFUlJJREUgVEhFIERFRkFVTFRTCisjCisjIFRoZSBXT1JLU1BBQ0UgVkFSSUFCTEUgSVMgUkVRVUlSRUQsIEFMTCBPVEhFUiBWQVJJQUJMRVMgQVJFIE9QVElPTkFMIChpLmUuIFdPUktTUEFDRT1DOlxzdGVtSUlcKQorV09SS1NQQUNFPUM6XHN0ZW1JSVwKKyMKKyMgSVNPMzE2Ni0xIGZpbGUgKGkuZS4gSVNPMzE2Nl8xPUM6XHN0ZW1JSVxvcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHlccGFyYW1ldGVyc1xJU08zMTY2LTFcSVNPMzE2Nl8xX2xpc3QudHh0KQorI0lTMDMxNjZfMT0KKyMKKyMgRXVyb3BlIG5hbWVzIGZpbGUgKGkuZS4gTkFNRVNfTElTVD1DOlxzdGVtSUlcb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5XHBhcmFtZXRlcnNcdGFyZ2V0c1xFdXJvcGVOYW1lcy50eHQpCitOQU1FU19MSVNUPSBDOlxzdGVtSUlcb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5XHBhcmFtZXRlcnNcdGFyZ2V0c1xFdXJvcGVOYW1lcy50eHQKKyMKKyMgRmlsZSB3aXRoIHRhcmdldCBjb3VudHJpZXMgd2Ugd2FudCB0byBwcm9jZXNzIChpLmUuIFRBUkdFVF9MSVNUPUM6XHN0ZW1JSVxvcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHlccGFyYW1ldGVyc1x0YXJnZXRzXEV1cm9wZUNvdW50cmllcy50eHQpCitUQVJHRVRfTElTVCA9IEM6XHN0ZW1JSVxvcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHlccGFyYW1ldGVyc1x0YXJnZXRzXEV1cm9wZUNvdW50cmllcy50eHQKKyMKKyMgT3V0cHV0IGRpcmVjdG9yeSBmb3IgbmV3IGZpbGVzIChpLmUuIE9VVFBVVD1DOlxkaXZhXEV1cm9wZSkKK09VVFBVVCA9IEM6XGRpdmFcRXVyb3BlXAorIworIyAqKioqKioqKioqIEVORCBPRiBDT05GSUdVUkFUSU9OIEZJTEUgRk9SIEVVUk9QRSBEQVRBIENPTlZFUlRFUiAqKioqKioqKioqCisjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9jb25maWd1cmF0aW9uL0V1cm9wZURhdGFFeHRyYWN0b3IuY29uZmlnIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvY29uZmlndXJhdGlvbi9FdXJvcGVEYXRhRXh0cmFjdG9yLmNvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MGVmNjkwCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvY29uZmlndXJhdGlvbi9FdXJvcGVEYXRhRXh0cmFjdG9yLmNvbmZpZwpAQCAtMCwwICsxLDI2IEBACisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMKKyMgKioqKioqKioqKiBDT05GSUdVUkFUSU9OIEZJTEUgRk9SIEVVUk9QRSBEQVRBIEVYVFJBQ1RPUiAqKioqKioqKioqCisjCisjIFRPIENIQU5HRSBERUZBVUxUIENPTkZJR1VSQVRJT04gVkFMVUVTLCBNT0RJRlkgT1JHLkVDTElQU0UuU1RFTS5VVElMSVRZLkdFTkVSQVRPUlNcR2VuQ29uc3RhbnRzLmphdmEKKyMKKyMgQ09ORklHVVJBVElPTiBWQVJJQUJMRVMgU0VUIElOIFRISVMgRklMRSBPVkVSUklERSBUSEUgREVGQVVMVFMKKyMKKyMgVGhlIFdPUktTUEFDRSBWQVJJQUJMRSBJUyBSRVFVSVJFRCwgQUxMIE9USEVSIFZBUklBQkxFUyBBUkUgT1BUSU9OQUwgKGkuZS4gV09SS1NQQUNFPUM6XHN0ZW1JSVwpCitXT1JLU1BBQ0U9Qzpcc3RlbUlJXAorIworIyBJU08zMTY2LTEgZmlsZSAoaS5lLiBJU08zMTY2XzE9Qzpcc3RlbUlJXG9yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eVxwYXJhbWV0ZXJzXElTTzMxNjYtMVxJU08zMTY2XzFfbGlzdC50eHQpCisjSVMwMzE2Nl8xPQorIworIyBFdXJvcGUgbmFtZXMgZmlsZSAoaS5lLiBOQU1FU19MSVNUPUM6XHN0ZW1JSVxvcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHlccGFyYW1ldGVyc1x0YXJnZXRzXEV1cm9wZU5hbWVzLnR4dCkKK05BTUVTX0xJU1Q9IEM6XHN0ZW1JSVxvcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHlccGFyYW1ldGVyc1x0YXJnZXRzXEV1cm9wZU5hbWVzLnR4dAorIworIyBGaWxlIHdpdGggdGFyZ2V0IGNvdW50cmllcyB3ZSB3YW50IHRvIHByb2Nlc3MgKGkuZS4gVEFSR0VUX0xJU1Q9Qzpcc3RlbUlJXG9yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eVxwYXJhbWV0ZXJzXHRhcmdldHNcRXVyb3BlQ291bnRyaWVzLnR4dCkKK1RBUkdFVF9MSVNUID0gQzpcc3RlbUlJXG9yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eVxwYXJhbWV0ZXJzXHRhcmdldHNcRXVyb3BlQ291bnRyaWVzLnR4dAorIworIyBPdXRwdXQgZGlyZWN0b3J5IGZvciBuZXcgZmlsZXMgKGkuZS4gT1VUUFVUPUM6XHN0ZW1JSVxvcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHlccGFyYW1ldGVyc1xBcmVhUG9wdWxhdGlvbkRhdGFcKQorT1VUUFVUID0gQzpcc3RlbUlJXG9yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eVxwYXJhbWV0ZXJzXEFyZWFQb3B1bGF0aW9uRGF0YVwKKyMKKyMgKioqKioqKioqKiBFTkQgT0YgQ09ORklHVVJBVElPTiBGSUxFIEZPUiBFVVJPUEUgREFUQSBFWFRSQUNUT1IgKioqKioqKioqKgorIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvY29uZmlndXJhdGlvbi9FdXJvcGVEYXRhRm9ybWF0dGVyLmNvbmZpZyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L2NvbmZpZ3VyYXRpb24vRXVyb3BlRGF0YUZvcm1hdHRlci5jb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWMzY2M3OAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L2NvbmZpZ3VyYXRpb24vRXVyb3BlRGF0YUZvcm1hdHRlci5jb25maWcKQEAgLTAsMCArMSwyNiBAQAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjCisjICoqKioqKioqKiogQ09ORklHVVJBVElPTiBGSUxFIEZPUiBFVVJPUEUgREFUQSBGT1JNQVRURVIgKioqKioqKioqKgorIworIyBUTyBDSEFOR0UgREVGQVVMVCBDT05GSUdVUkFUSU9OIFZBTFVFUywgTU9ESUZZIE9SRy5FQ0xJUFNFLlNURU0uVVRJTElUWS5HRU5FUkFUT1JTXEdlbkNvbnN0YW50cy5qYXZhCisjCisjIENPTkZJR1VSQVRJT04gVkFSSUFCTEVTIFNFVCBJTiBUSElTIEZJTEUgT1ZFUlJJREUgVEhFIERFRkFVTFRTCisjCisjIFRoZSBXT1JLU1BBQ0UgVkFSSUFCTEUgSVMgUkVRVUlSRUQsIEFMTCBPVEhFUiBWQVJJQUJMRVMgQVJFIE9QVElPTkFMIChpLmUuIFdPUktTUEFDRT1DOlxzdGVtSUlcKQorV09SS1NQQUNFPUM6XHN0ZW1JSVwKKyMKKyMgSVNPMzE2Ni0xIGZpbGUgKGkuZS4gSVNPMzE2Nl8xPUM6XHN0ZW1JSVxvcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHlccGFyYW1ldGVyc1xJU08zMTY2LTFcSVNPMzE2Nl8xX2xpc3QudHh0KQorI0lTMDMxNjZfMT0KKyMKKyMgSVNPIGZpeCAgZmlsZSAoaS5lLiBJU09fRklYPUM6XHN0ZW1JSVxvcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHlccGFyYW1ldGVyc1xJU09GSVhcSVNPX0ZJWC50eHQpCisjSVNPX0ZJWD0KKyMKKyMgRmlsZSB3aXRoIHRhcmdldCBjb3VudHJpZXMgd2Ugd2FudCB0byBwcm9jZXNzIChpLmUuIFRBUkdFVF9MSVNUPUM6XHN0ZW1JSVxvcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHlccGFyYW1ldGVyc1x0YXJnZXRzXEV1cm9wZUNvdW50cmllcy50eHQpCitUQVJHRVRfTElTVCA9IEM6XHN0ZW1JSVxvcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHlccGFyYW1ldGVyc1x0YXJnZXRzXEV1cm9wZUNvdW50cmllcy50eHQKKyMKKyMgT3V0cHV0IGRpcmVjdG9yeSBmb3IgbmV3IGZpbGVzIChpLmUuIE9VVFBVVD1DOlxzdGVtSUlcb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5XHRlbXBcKQorT1VUUFVUID0gQzpcc3RlbUlJXG9yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eVx0ZW1wXAorIworIyAqKioqKioqKioqIEVORCBPRiBDT05GSUdVUkFUSU9OIEZJTEUgRk9SIEVVUk9QRSBEQVRBIEZPUk1BVFRFUioqKioqKioqKioKKyMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L2NvbmZpZ3VyYXRpb24vR01MR2VuZXJhdG9yLmNvbmZpZyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L2NvbmZpZ3VyYXRpb24vR01MR2VuZXJhdG9yLmNvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42Zjk0NWZiCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvY29uZmlndXJhdGlvbi9HTUxHZW5lcmF0b3IuY29uZmlnCkBAIC0wLDAgKzEsMzIgQEAKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIworIyAqKioqKioqKioqIENPTkZJR1VSQVRJT04gRklMRSBGT1IgR01MIEdFTkVSQVRPUiAqKioqKioqKioqCisjCisjIFRPIENIQU5HRSBERUZBVUxUIENPTkZJR1VSQVRJT04gVkFMVUVTLCBNT0RJRlkgT1JHLkVDTElQU0UuU1RFTS5VVElMSVRZLkdFTkVSQVRPUlNcR2VuQ29uc3RhbnRzLmphdmEKKyMKKyMgQ09ORklHVVJBVElPTiBWQVJJQUJMRVMgU0VUIElOIFRISVMgRklMRSBPVkVSUklERSBUSEUgREVGQVVMVFMKKyMKKyMgVGhlIFdPUktTUEFDRSBWQVJJQUJMRSBJUyBSRVFVSVJFRCwgQUxMIE9USEVSIFZBUklBQkxFUyBBUkUgT1BUSU9OQUwgKGkuZS4gV09SS1NQQUNFPUM6XHN0ZW1JSVwpCitXT1JLU1BBQ0U9Qzpcc3RlbUlJXAorIworIyBJU08zMTY2LTEgZmlsZSAoaS5lLiBJU08zMTY2XzE9Qzpcc3RlbUlJXG9yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eVxwYXJhbWV0ZXJzXElTTzMxNjYtMVxJU08zMTY2XzFfbGlzdC50eHQpCisjSVMwMzE2Nl8xPQorIworIyBJU08zMTY2LTIgZmlsZSAoaS5lLiBJU08zMTY2XzI9Qzpcc3RlbUlJXG9yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eVxwYXJhbWV0ZXJzXElTTzMxNjYtMlxJU08zMTY2XzJfbGlzdC50eHQpCisjSVNPMzE2Nl8yPQorIworIyBJU08gZml4ICBmaWxlIChpLmUuIElTT19GSVg9Qzpcc3RlbUlJXG9yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eVxwYXJhbWV0ZXJzXElTT0ZJWFxJU09fRklYLnR4dCkKKyNJU09fRklYPQorIworIyBGaWxlIHdpdGggdGFyZ2V0IGNvdW50cmllcyB3ZSB3YW50IHRvIHByb2Nlc3MgKGkuZS4gVEFSR0VUX0xJU1Q9Qzpcc3RlbUlJXG9yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eVxwYXJhbWV0ZXJzXHRhcmdldHNcZ3JvdXBlZERhdGFGaWxlcy50eHQpCisjVEFSR0VUX0xJU1QgPQorIworIyBQYXRoIHRvIGZvbGRlciB3aXRoIGxleGljb2dyYXBoaWNhbGx5IHNvcnRlZCBmaWxlcyAoaS5lLiBMRVhfRElSPUM6XHN0ZW1JSVxvcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHlccGFyYW1ldGVyc1xzb3J0XCkKKyNMRVhfRElSPQorIworIyBPdXRwdXQgZGlyZWN0b3J5IGZvciBuZXcgZmlsZXMgKGkuZS4gUFJPUEVSVElFU19PVVRQVVQ9Qzpcc3RlbUlJXG9yZy5lY2xpcHNlLnN0ZW0uaW50ZXJuYWwuZGF0YVxyZXNvdXJjZXNcZGF0YVxjb3VudHJ5XCkKKyNQUk9QRVJUSUVTX09VVFBVVD0gQzpcc3RlbUlJXG9yZy5lY2xpcHNlLnN0ZW0uZ2VvZ3JhcGh5XHJlc291cmNlc1xkYXRhXGdlb1xjb3VudHJ5XAorIworIyAqKioqKioqKioqIEVORCBPRiBDT05GSUdVUkFUSU9OIEZJTEUgRk9SIEdNTCBHRU5FUkFUT1IgKioqKioqKioqKgorIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvY29uZmlndXJhdGlvbi9Hcm91cEdlbmVyYXRvci5jb25maWcgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9jb25maWd1cmF0aW9uL0dyb3VwR2VuZXJhdG9yLmNvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNGU1ZjE2Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvY29uZmlndXJhdGlvbi9Hcm91cEdlbmVyYXRvci5jb25maWcKQEAgLTAsMCArMSwzMiBAQAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjCisjICoqKioqKioqKiogQ09ORklHVVJBVElPTiBGSUxFIEZPUiBHUk9VUCBHRU5FUkFUT1IgKioqKioqKioqKgorIworIyBUTyBDSEFOR0UgREVGQVVMVCBDT05GSUdVUkFUSU9OIFZBTFVFUywgTU9ESUZZIE9SRy5FQ0xJUFNFLlNURU0uVVRJTElUWS5HRU5FUkFUT1JTXEdlbkNvbnN0YW50cy5qYXZhCisjCisjIENPTkZJR1VSQVRJT04gVkFSSUFCTEVTIFNFVCBJTiBUSElTIEZJTEUgT1ZFUlJJREUgVEhFIERFRkFVTFRTCisjCisjIFRoZSBXT1JLU1BBQ0UgVkFSSUFCTEUgSVMgUkVRVUlSRUQsIEFMTCBPVEhFUiBWQVJJQUJMRVMgQVJFIE9QVElPTkFMIChpLmUuIFdPUktTUEFDRT1DOlxzdGVtSUlcKQorV09SS1NQQUNFPUM6XHN0ZW1JSVwKKyMKKyMgSVNPMzE2Ni0xIGZpbGUgKGkuZS4gSVNPMzE2Nl8xPUM6XHN0ZW1JSVxvcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHlccGFyYW1ldGVyc1xJU08zMTY2LTFcSVNPMzE2Nl8xX2xpc3QudHh0KQorI0lTMDMxNjZfMT0KKyMKKyMgSVNPMzE2Ni0yIGZpbGUgKGkuZS4gSVNPMzE2Nl8yPUM6XHN0ZW1JSVxvcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHlccGFyYW1ldGVyc1xJU08zMTY2LTJcSVNPMzE2Nl8yX2xpc3QudHh0KQorI0lTTzMxNjZfMj0KKyMKKyMgSVNPIGZpeCAgZmlsZSAoaS5lLiBJU09fRklYPUM6XHN0ZW1JSVxvcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHlccGFyYW1ldGVyc1xJU09GSVhcSVNPX0ZJWC50eHQpCisjSVNPX0ZJWD0KKyMKKyMgRmlsZSB3aXRoIHRhcmdldCBjb3VudHJpZXMgd2Ugd2FudCB0byBwcm9jZXNzIChpLmUuIFRBUkdFVF9MSVNUPUM6XHN0ZW1JSVxvcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHlccGFyYW1ldGVyc1x0YXJnZXRzXGdyb3VwZWREYXRhRmlsZXMudHh0KQorI1RBUkdFVF9MSVNUID0KKyMKKyMgUGF0aCB0byBmb2xkZXIgd2l0aCBsZXhpY29ncmFwaGljYWxseSBzb3J0ZWQgZmlsZXMgKGkuZS4gTEVYX0RJUj1DOlxzdGVtSUlcb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5XHBhcmFtZXRlcnNcc29ydFwpCisjTEVYX0RJUj0KKyMKKyMgT3V0cHV0IGRpcmVjdG9yeSBmb3IgbmV3IGZpbGVzIChpLmUuIFBST1BFUlRJRVNfT1VUUFVUPUM6XGRpdmFcZ3JvdXBlZFwpCitPVVRQVVQ9IEM6XGRpdmFcZ3JvdXBlZFwKKyMKKyMgKioqKioqKioqKiBFTkQgT0YgQ09ORklHVVJBVElPTiBGSUxFIEZPUiBHUk9VUCBHRU5FUkFUT1IgKioqKioqKioqKgorIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvY29uZmlndXJhdGlvbi9NdWx0aVBhc3NEb3duU2FtcGxlci5jb25maWcgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9jb25maWd1cmF0aW9uL011bHRpUGFzc0Rvd25TYW1wbGVyLmNvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYzRhYTI4Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvY29uZmlndXJhdGlvbi9NdWx0aVBhc3NEb3duU2FtcGxlci5jb25maWcKQEAgLTAsMCArMSwzOCBAQAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjCisjICoqKioqKioqKiogQ09ORklHVVJBVElPTiBGSUxFIEZPUiBNVUxUSSBQQVNTIERPV04tU0FNUExFUiAqKioqKioqKioqCisjCisjIFRPIENIQU5HRSBERUZBVUxUIENPTkZJR1VSQVRJT04gVkFMVUVTLCBNT0RJRlkgT1JHLkVDTElQU0UuU1RFTS5VVElMSVRZLkdFTkVSQVRPUlNcR2VuQ29uc3RhbnRzLmphdmEKKyMKKyMgQ09ORklHVVJBVElPTiBWQVJJQUJMRVMgU0VUIElOIFRISVMgRklMRSBPVkVSUklERSBUSEUgREVGQVVMVFMKKyMKKyMgVGhlIFdPUktTUEFDRSBWQVJJQUJMRSBJUyBSRVFVSVJFRCwgQUxMIE9USEVSIFZBUklBQkxFUyBBUkUgT1BUSU9OQUwgKGkuZS4gV09SS1NQQUNFPUM6XHN0ZW1JSVwpCitXT1JLU1BBQ0U9Qzpcc3RlbUlJXAorIworIyBUaGUgVEhSRVNIT0xEIHZhcmlhYmxlIHNwZWNpZmllcyBhbiBhbmdsZSBpbiBkZWdyZWVzIGZvciB3aGljaCB3ZSB3YW50IHRvIHJlZHVjZS4gSWYgbm90IHByb3ZpZGVkIGl0IGRlZmF1bHRzIHRvIDUgZGVncmVlcy4KKyNUSFJFU0hPTEQ9NQorIworIyBUaGUgbnVtYmVyIG9mIHJlZHVjdGlvbiBJVEVSQVRJT05TLiBJZiBub3QgcHJvdmlkZWQgaXQgZGVmYXVsdHMgdG8gNSBpdGVyYXRpb25zLgorI0lURVJBVElPTlM9NQorIworIyBJU08zMTY2LTEgZmlsZSAoaS5lLiBJU08zMTY2XzE9Qzpcc3RlbUlJXG9yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eVxwYXJhbWV0ZXJzXElTTzMxNjYtMVxJU08zMTY2XzFfbGlzdC50eHQpCisjSVMwMzE2Nl8xPQorIworIyBJU08zMTY2LTIgZmlsZSAoaS5lLiBJU08zMTY2XzI9Qzpcc3RlbUlJXG9yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eVxwYXJhbWV0ZXJzXElTTzMxNjYtMlxJU08zMTY2XzJfbGlzdC50eHQpCisjSVNPMzE2Nl8yPQorIworIyBJU08gZml4ICBmaWxlIChpLmUuIElTT19GSVg9Qzpcc3RlbUlJXG9yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eVxwYXJhbWV0ZXJzXElTT0ZJWFxJU09fRklYLnR4dCkKKyNJU09fRklYPQorIworIyBGaWxlIHdpdGggdGFyZ2V0IGNvdW50cmllcyB3ZSB3YW50IHRvIHByb2Nlc3MgKGkuZS4gVEFSR0VUX0xJU1Q9Qzpcc3RlbUlJXG9yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eVxwYXJhbWV0ZXJzXHRhcmdldHNcZ3JvdXBlZERhdGFGaWxlcy50eHQpCitUQVJHRVRfTElTVCA9IEM6XHN0ZW1JSVxvcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHlccGFyYW1ldGVyc1x0YXJnZXRzXHJlZHVjZUxpc3QudHh0CisjCisjIFBhdGggdG8gZm9sZGVyIHdpdGggbGV4aWNvZ3JhcGhpY2FsbHkgc29ydGVkIGZpbGVzIChpLmUuIExFWF9ESVI9Qzpcc3RlbUlJXG9yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eVxwYXJhbWV0ZXJzXHNvcnRcKQorI0xFWF9ESVI9CisjCisjIE91dHB1dCBkaXJlY3RvcnkgZm9yIG5ldyBmaWxlcyAoaS5lLiBNQVBfT1VUUFVUPUM6XHN0ZW1JSVxvcmcuZWNsaXBzZS5zdGVtLmdlb2dyYXBoeVxyZXNvdXJjZXNcZGF0YVxnZW9cY291bnRyeVwpCitNQVBfT1VUUFVUPSBDOlx0ZW1wb3V0XAorIworIyAqKioqKioqKioqIEVORCBPRiBDT05GSUdVUkFUSU9OIEZJTEUgRk9SIE1VTFRJIFBBU1MgRE9XTi1TQU1QTEVSICoqKioqKioqKioKKyMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvY29uZmlndXJhdGlvbi9OYW1lR2VuZXJhdG9yLmNvbmZpZyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L2NvbmZpZ3VyYXRpb24vTmFtZUdlbmVyYXRvci5jb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzYwMjdhOQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L2NvbmZpZ3VyYXRpb24vTmFtZUdlbmVyYXRvci5jb25maWcKQEAgLTAsMCArMSwzMiBAQAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjCisjICoqKioqKioqKiogQ09ORklHVVJBVElPTiBGSUxFIEZPUiBOQU1FIEdFTkVSQVRPUiAqKioqKioqKioqCisjCisjIFRPIENIQU5HRSBERUZBVUxUIENPTkZJR1VSQVRJT04gVkFMVUVTLCBNT0RJRlkgT1JHLkVDTElQU0UuU1RFTS5VVElMSVRZLkdFTkVSQVRPUlNcR2VuQ29uc3RhbnRzLmphdmEKKyMKKyMgQ09ORklHVVJBVElPTiBWQVJJQUJMRVMgU0VUIElOIFRISVMgRklMRSBPVkVSUklERSBUSEUgREVGQVVMVFMKKyMKKyMgVGhlIFdPUktTUEFDRSBWQVJJQUJMRSBJUyBSRVFVSVJFRCwgQUxMIE9USEVSIFZBUklBQkxFUyBBUkUgT1BUSU9OQUwgKGkuZS4gV09SS1NQQUNFPUM6XHN0ZW1JSVwpCitXT1JLU1BBQ0U9Qzpcc3RlbUlJXAorIworIyBJU08zMTY2LTEgZmlsZSAoaS5lLiBJU08zMTY2XzE9Qzpcc3RlbUlJXG9yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eVxwYXJhbWV0ZXJzXElTTzMxNjYtMVxJU08zMTY2XzFfbGlzdC50eHQpCisjSVMwMzE2Nl8xPQorIworIyBJU08zMTY2LTIgZmlsZSAoaS5lLiBJU08zMTY2XzI9Qzpcc3RlbUlJXG9yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eVxwYXJhbWV0ZXJzXElTTzMxNjYtMlxJU08zMTY2XzJfbGlzdC50eHQpCisjSVNPMzE2Nl8yPQorIworIyBJU08gZml4ICBmaWxlIChpLmUuIElTT19GSVg9Qzpcc3RlbUlJXG9yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eVxwYXJhbWV0ZXJzXElTT0ZJWFxJU09fRklYLnR4dCkKKyNJU09fRklYPQorIworIyBGaWxlIHdpdGggdGFyZ2V0IGNvdW50cmllcyB3ZSB3YW50IHRvIHByb2Nlc3MgKGkuZS4gVEFSR0VUX0xJU1Q9Qzpcc3RlbUlJXG9yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eVxwYXJhbWV0ZXJzXHRhcmdldHNcZ3JvdXBlZERhdGFGaWxlcy50eHQpCisjVEFSR0VUX0xJU1QgPQorIworIyBQYXRoIHRvIGZvbGRlciB3aXRoIGxleGljb2dyYXBoaWNhbGx5IHNvcnRlZCBmaWxlcyAoaS5lLiBMRVhfRElSPUM6XHN0ZW1JSVxvcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHlccGFyYW1ldGVyc1xzb3J0XCkKKyNMRVhfRElSPQorIworIyBPdXRwdXQgZGlyZWN0b3J5IGZvciBuZXcgZmlsZXMgKGkuZS4gUFJPUEVSVElFU19PVVRQVVQ9Qzpcc3RlbUlJXG9yZy5lY2xpcHNlLnN0ZW0uaW50ZXJuYWwuZGF0YVxyZXNvdXJjZXNcZGF0YVxjb3VudHJ5XCkKKyNQUk9QRVJUSUVTX09VVFBVVD0gQzpcdGVtcG91dFwKKyMKKyMgKioqKioqKioqKiBFTkQgT0YgQ09ORklHVVJBVElPTiBGSUxFIEZPUiBOQU1FIEdFTkVSQVRPUiAqKioqKioqKioqCisjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9jb25maWd1cmF0aW9uL05vZGVEYXRhR2VuZXJhdG9yLmNvbmZpZyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L2NvbmZpZ3VyYXRpb24vTm9kZURhdGFHZW5lcmF0b3IuY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQzN2Y3MTAKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9jb25maWd1cmF0aW9uL05vZGVEYXRhR2VuZXJhdG9yLmNvbmZpZwpAQCAtMCwwICsxLDQxIEBACisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMKKyMgKioqKioqKioqKiBDT05GSUdVUkFUSU9OIEZJTEUgRk9SIE5PREUgREFUQSBHRU5FUkFUT1IgKioqKioqKioqKgorIworIyBUTyBDSEFOR0UgREVGQVVMVCBDT05GSUdVUkFUSU9OIFZBTFVFUywgTU9ESUZZIE9SRy5FQ0xJUFNFLlNURU0uVVRJTElUWS5HRU5FUkFUT1JTXEdlbkNvbnN0YW50cy5qYXZhCisjCisjIENPTkZJR1VSQVRJT04gVkFSSUFCTEVTIFNFVCBJTiBUSElTIEZJTEUgT1ZFUlJJREUgVEhFIERFRkFVTFRTCisjCisjIFRoZSBXT1JLU1BBQ0UgVkFSSUFCTEUgSVMgUkVRVUlSRUQsIEFMTCBPVEhFUiBWQVJJQUJMRVMgQVJFIE9QVElPTkFMIChpLmUuIFdPUktTUEFDRT1DOlxzdGVtSUlcKQorV09SS1NQQUNFPUM6XHN0ZW1JSVwKKyMKKyMgSVNPMzE2Ni0xIGZpbGUgKGkuZS4gSVNPMzE2Nl8xPUM6XHN0ZW1JSVxvcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHlccGFyYW1ldGVyc1xJU08zMTY2LTFcSVNPMzE2Nl8xX2xpc3QudHh0KQorI0lTMDMxNjZfMT0KKyMKKyMgSVNPMzE2Ni0yIGZpbGUgKGkuZS4gSVNPMzE2Nl8yPUM6XHN0ZW1JSVxvcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHlccGFyYW1ldGVyc1xJU08zMTY2LTJcSVNPMzE2Nl8yX2xpc3QudHh0KQorI0lTTzMxNjZfMj0KKyMKKyMgSVNPIGZpeCAgZmlsZSAoaS5lLiBJU09fRklYPUM6XHN0ZW1JSVxvcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHlccGFyYW1ldGVyc1xJU09GSVhcSVNPX0ZJWC50eHQpCisjSVNPX0ZJWD0KKyMKKyMgRmlsZSB3aXRoIHRhcmdldCBjb3VudHJpZXMgd2Ugd2FudCB0byBwcm9jZXNzIChpLmUuIFRBUkdFVF9MSVNUPUM6XHN0ZW1JSVxvcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHlccGFyYW1ldGVyc1x0YXJnZXRzXGdyb3VwZWREYXRhRmlsZXMudHh0KQorI1RBUkdFVF9MSVNUID0KKyMKKyMgUG9wdWxhdGlvbiBwcm9maWxlIGZvciB0aGlzIGNvdW50cnkgKGkuZS4gUE9QX1BST0ZJTEVTPUM6XHN0ZW1JSVxvcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHlccGFyYW1ldGVyc1xwcm9maWxlc1wpCisjUE9QX1BST0ZJTEVTPQorIworIyBQYXRoIHRvIGFyZWFzIGluIHBvbHlnb24gdW5pdHMgLSB1c2VkIG9ubHkgZm9yIGNvbXB1dGluZyBhcHByb3hpbWF0ZSBhcmVhIG9mIGxldmVsIDIgcmVnaW9ucyAoaS5lLiBQT0xZR09OX0FSRUFTPUM6XHN0ZW1JSVxvcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHlccGFyYW1ldGVyc1xQb2x5Z29uQXJlYXNcKQorI1BPTFlHT05fQVJFQVM9CisjCisjIFBhdGggdG8gYXJlYSBhbmQgcG9wdWxhdGlvbiBmaWxlcyAoaS5lLiBBUkVBX1BPUD1DOlxzdGVtSUlcb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5XHBhcmFtZXRlcnNcQXJlYVBvcHVsYXRpb25EYXRhXCkKKyNBUkVBX1BPUD0KKyMKKyMgUGF0aCB0byBmb2xkZXIgd2l0aCBsZXhpY29ncmFwaGljYWxseSBzb3J0ZWQgZmlsZXMgKGkuZS4gTEVYX0RJUj1DOlxzdGVtSUlcb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5XHBhcmFtZXRlcnNcc29ydFwpCisjTEVYX0RJUj0KKyMKKyMgT3V0cHV0IGRpcmVjdG9yeSBmb3IgbmV3IGZpbGVzIChpLmUuIFBST1BFUlRJRVNfT1VUUFVUPUM6XHN0ZW1JSVxvcmcuZWNsaXBzZS5zdGVtLmludGVybmFsLmRhdGFccmVzb3VyY2VzXGRhdGFcY291bnRyeVwpCitQUk9QRVJUSUVTX09VVFBVVD0gQzpcdGVtcG91dFwKKyMKKyMgKioqKioqKioqKiBFTkQgT0YgQ09ORklHVVJBVElPTiBGSUxFIEZPUiBOT0RFIERBVEEgR0VORVJBVE9SICoqKioqKioqKioKKyMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L2NvbmZpZ3VyYXRpb24vUG9seWdvbkFyZWFHZW5lcmF0b3IuY29uZmlnIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvY29uZmlndXJhdGlvbi9Qb2x5Z29uQXJlYUdlbmVyYXRvci5jb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWUxZGJhZgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L2NvbmZpZ3VyYXRpb24vUG9seWdvbkFyZWFHZW5lcmF0b3IuY29uZmlnCkBAIC0wLDAgKzEsNDEgQEAKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIworIyAqKioqKioqKioqIENPTkZJR1VSQVRJT04gRklMRSBGT1IgUE9MWUdPTiBBUkVBIEdFTkVSQVRPUiAqKioqKioqKioqCisjCisjIFRPIENIQU5HRSBERUZBVUxUIENPTkZJR1VSQVRJT04gVkFMVUVTLCBNT0RJRlkgT1JHLkVDTElQU0UuU1RFTS5VVElMSVRZLkdFTkVSQVRPUlNcR2VuQ29uc3RhbnRzLmphdmEKKyMKKyMgQ09ORklHVVJBVElPTiBWQVJJQUJMRVMgU0VUIElOIFRISVMgRklMRSBPVkVSUklERSBUSEUgREVGQVVMVFMKKyMKKyMgVGhlIFdPUktTUEFDRSBWQVJJQUJMRSBJUyBSRVFVSVJFRCwgQUxMIE9USEVSIFZBUklBQkxFUyBBUkUgT1BUSU9OQUwgKGkuZS4gV09SS1NQQUNFPUM6XHN0ZW1JSVwpCitXT1JLU1BBQ0U9Qzpcc3RlbUlJXAorIworIyBJU08zMTY2LTEgZmlsZSAoaS5lLiBJU08zMTY2XzE9Qzpcc3RlbUlJXG9yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eVxwYXJhbWV0ZXJzXElTTzMxNjYtMVxJU08zMTY2XzFfbGlzdC50eHQpCisjSVMwMzE2Nl8xPQorIworIyBJU08zMTY2LTIgZmlsZSAoaS5lLiBJU08zMTY2XzI9Qzpcc3RlbUlJXG9yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eVxwYXJhbWV0ZXJzXElTTzMxNjYtMlxJU08zMTY2XzJfbGlzdC50eHQpCisjSVNPMzE2Nl8yPQorIworIyBJU08gZml4ICBmaWxlIChpLmUuIElTT19GSVg9Qzpcc3RlbUlJXG9yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eVxwYXJhbWV0ZXJzXElTT0ZJWFxJU09fRklYLnR4dCkKKyNJU09fRklYPQorIworIyBGaWxlIHdpdGggdGFyZ2V0IGNvdW50cmllcyB3ZSB3YW50IHRvIHByb2Nlc3MgKGkuZS4gVEFSR0VUX0xJU1Q9Qzpcc3RlbUlJXG9yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eVxwYXJhbWV0ZXJzXHRhcmdldHNcZ3JvdXBlZERhdGFGaWxlcy50eHQpCisjVEFSR0VUX0xJU1QgPQorIworIyBQb3B1bGF0aW9uIHByb2ZpbGUgZm9yIHRoaXMgY291bnRyeSAoaS5lLiBQT1BfUFJPRklMRVM9Qzpcc3RlbUlJXG9yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eVxwYXJhbWV0ZXJzXHByb2ZpbGVzXCkKKyNQT1BfUFJPRklMRVM9CisjCisjIFBhdGggdG8gYXJlYXMgaW4gcG9seWdvbiB1bml0cyAtIHVzZWQgb25seSBmb3IgY29tcHV0aW5nIGFwcHJveGltYXRlIGFyZWEgb2YgbGV2ZWwgMiByZWdpb25zIChpLmUuIFBPTFlHT05fQVJFQVM9Qzpcc3RlbUlJXG9yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eVxwYXJhbWV0ZXJzXFBvbHlnb25BcmVhc1wpCisjUE9MWUdPTl9BUkVBUz0KKyMKKyMgUGF0aCB0byBhcmVhIGFuZCBwb3B1bGF0aW9uIGZpbGVzIChpLmUuIEFSRUFfUE9QPUM6XHN0ZW1JSVxvcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHlccGFyYW1ldGVyc1xBcmVhUG9wdWxhdGlvbkRhdGFcKQorI0FSRUFfUE9QPQorIworIyBQYXRoIHRvIGZvbGRlciB3aXRoIGxleGljb2dyYXBoaWNhbGx5IHNvcnRlZCBmaWxlcyAoaS5lLiBMRVhfRElSPUM6XHN0ZW1JSVxvcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHlccGFyYW1ldGVyc1xzb3J0XCkKKyNMRVhfRElSPQorIworIyBPdXRwdXQgZGlyZWN0b3J5IGZvciBuZXcgZmlsZXMgKGkuZS4gT1VUUFVUPUM6XHN0ZW1JSVxvcmcuZWNsaXBzZS5zdGVtLmludGVybmFsLmRhdGFccGFyYW1ldGVyc1xQb2x5Z29uQXJlYXNcKQorT1VUUFVUPSBDOlx0ZW1wb3V0XAorIworIyAqKioqKioqKioqIEVORCBPRiBDT05GSUdVUkFUSU9OIEZJTEUgRk9SIFBPTFlHT04gQVJFQSBHRU5FUkFUT1IgKioqKioqKioqKgorIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvY29uZmlndXJhdGlvbi9Qb3B1bGF0aW9uR2VuZXJhdG9yLmNvbmZpZyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L2NvbmZpZ3VyYXRpb24vUG9wdWxhdGlvbkdlbmVyYXRvci5jb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTJlY2I4MAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L2NvbmZpZ3VyYXRpb24vUG9wdWxhdGlvbkdlbmVyYXRvci5jb25maWcKQEAgLTAsMCArMSw0MSBAQAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjCisjICoqKioqKioqKiogQ09ORklHVVJBVElPTiBGSUxFIEZPUiBQT1BVTEFUSU9OIEdFTkVSQVRPUiAqKioqKioqKioqCisjCisjIFRPIENIQU5HRSBERUZBVUxUIENPTkZJR1VSQVRJT04gVkFMVUVTLCBNT0RJRlkgT1JHLkVDTElQU0UuU1RFTS5VVElMSVRZLkdFTkVSQVRPUlNcR2VuQ29uc3RhbnRzLmphdmEKKyMKKyMgQ09ORklHVVJBVElPTiBWQVJJQUJMRVMgU0VUIElOIFRISVMgRklMRSBPVkVSUklERSBUSEUgREVGQVVMVFMKKyMKKyMgVGhlIFdPUktTUEFDRSBWQVJJQUJMRSBJUyBSRVFVSVJFRCwgQUxMIE9USEVSIFZBUklBQkxFUyBBUkUgT1BUSU9OQUwgKGkuZS4gV09SS1NQQUNFPUM6XHN0ZW1JSVwpCitXT1JLU1BBQ0U9Qzpcc3RlbUlJXAorIworIyBJU08zMTY2LTEgZmlsZSAoaS5lLiBJU08zMTY2XzE9Qzpcc3RlbUlJXG9yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eVxwYXJhbWV0ZXJzXElTTzMxNjYtMVxJU08zMTY2XzFfbGlzdC50eHQpCisjSVMwMzE2Nl8xPQorIworIyBJU08zMTY2LTIgZmlsZSAoaS5lLiBJU08zMTY2XzI9Qzpcc3RlbUlJXG9yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eVxwYXJhbWV0ZXJzXElTTzMxNjYtMlxJU08zMTY2XzJfbGlzdC50eHQpCisjSVNPMzE2Nl8yPQorIworIyBJU08gZml4ICBmaWxlIChpLmUuIElTT19GSVg9Qzpcc3RlbUlJXG9yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eVxwYXJhbWV0ZXJzXElTT0ZJWFxJU09fRklYLnR4dCkKKyNJU09fRklYPQorIworIyBGaWxlIHdpdGggdGFyZ2V0IGNvdW50cmllcyB3ZSB3YW50IHRvIHByb2Nlc3MgKGkuZS4gVEFSR0VUX0xJU1Q9Qzpcc3RlbUlJXG9yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eVxwYXJhbWV0ZXJzXHRhcmdldHNcZ3JvdXBlZERhdGFGaWxlcy50eHQpCisjVEFSR0VUX0xJU1QgPQorIworIyBQb3B1bGF0aW9uIHByb2ZpbGUgZm9yIHRoaXMgY291bnRyeSAoaS5lLiBQT1BfUFJPRklMRVM9Qzpcc3RlbUlJXG9yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eVxwYXJhbWV0ZXJzXHByb2ZpbGVzXCkKKyNQT1BfUFJPRklMRVM9CisjCisjIFBhdGggdG8gYXJlYXMgaW4gcG9seWdvbiB1bml0cyAtIHVzZWQgb25seSBmb3IgY29tcHV0aW5nIGFwcHJveGltYXRlIGFyZWEgb2YgbGV2ZWwgMiByZWdpb25zIChpLmUuIFBPTFlHT05fQVJFQVM9Qzpcc3RlbUlJXG9yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eVxwYXJhbWV0ZXJzXFBvbHlnb25BcmVhc1wpCisjUE9MWUdPTl9BUkVBUz0KKyMKKyMgUGF0aCB0byBhcmVhIGFuZCBwb3B1bGF0aW9uIGZpbGVzIChpLmUuIEFSRUFfUE9QPUM6XHN0ZW1JSVxvcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHlccGFyYW1ldGVyc1xBcmVhUG9wdWxhdGlvbkRhdGFcKQorI0FSRUFfUE9QPQorIworIyBQYXRoIHRvIGZvbGRlciB3aXRoIGxleGljb2dyYXBoaWNhbGx5IHNvcnRlZCBmaWxlcyAoaS5lLiBMRVhfRElSPUM6XHN0ZW1JSVxvcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHlccGFyYW1ldGVyc1xzb3J0XCkKKyNMRVhfRElSPQorIworIyBPdXRwdXQgZGlyZWN0b3J5IGZvciBuZXcgZmlsZXMgKGkuZS4gUFJPUEVSVElFU19PVVRQVVQ9Qzpcc3RlbUlJXG9yZy5lY2xpcHNlLnN0ZW0uaW50ZXJuYWwuZGF0YVxyZXNvdXJjZXNcZGF0YVxjb3VudHJ5XCkKK1BST1BFUlRJRVNfT1VUUFVUPSBDOlx0ZW1wb3V0XAorIworIyAqKioqKioqKioqIEVORCBPRiBDT05GSUdVUkFUSU9OIEZJTEUgRk9SIFBPUFVMQVRJT04gR0VORVJBVE9SICoqKioqKioqKioKKyMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L2NvbmZpZ3VyYXRpb24vUG9wdWxhdGlvblByb2ZpbGVyLmNvbmZpZyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L2NvbmZpZ3VyYXRpb24vUG9wdWxhdGlvblByb2ZpbGVyLmNvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNDBkMzdkCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvY29uZmlndXJhdGlvbi9Qb3B1bGF0aW9uUHJvZmlsZXIuY29uZmlnCkBAIC0wLDAgKzEsNDEgQEAKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIworIyAqKioqKioqKioqIENPTkZJR1VSQVRJT04gRklMRSBGT1IgUE9QVUxBVElPTiBQUk9GSUxFUiAqKioqKioqKioqCisjCisjIFRPIENIQU5HRSBERUZBVUxUIENPTkZJR1VSQVRJT04gVkFMVUVTLCBNT0RJRlkgT1JHLkVDTElQU0UuU1RFTS5VVElMSVRZLkdFTkVSQVRPUlNcR2VuQ29uc3RhbnRzLmphdmEKKyMKKyMgQ09ORklHVVJBVElPTiBWQVJJQUJMRVMgU0VUIElOIFRISVMgRklMRSBPVkVSUklERSBUSEUgREVGQVVMVFMKKyMKKyMgVGhlIFdPUktTUEFDRSBWQVJJQUJMRSBJUyBSRVFVSVJFRCwgQUxMIE9USEVSIFZBUklBQkxFUyBBUkUgT1BUSU9OQUwgKGkuZS4gV09SS1NQQUNFPUM6XHN0ZW1JSVwpCitXT1JLU1BBQ0U9Qzpcc3RlbUlJXAorIworIyBJU08zMTY2LTEgZmlsZSAoaS5lLiBJU08zMTY2XzE9Qzpcc3RlbUlJXG9yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eVxwYXJhbWV0ZXJzXElTTzMxNjYtMVxJU08zMTY2XzFfbGlzdC50eHQpCisjSVMwMzE2Nl8xPQorIworIyBJU08zMTY2LTIgZmlsZSAoaS5lLiBJU08zMTY2XzI9Qzpcc3RlbUlJXG9yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eVxwYXJhbWV0ZXJzXElTTzMxNjYtMlxJU08zMTY2XzJfbGlzdC50eHQpCisjSVNPMzE2Nl8yPQorIworIyBJU08gZml4ICBmaWxlIChpLmUuIElTT19GSVg9Qzpcc3RlbUlJXG9yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eVxwYXJhbWV0ZXJzXElTT0ZJWFxJU09fRklYLnR4dCkKKyNJU09fRklYPQorIworIyBGaWxlIHdpdGggdGFyZ2V0IGNvdW50cmllcyB3ZSB3YW50IHRvIHByb2Nlc3MgKGkuZS4gVEFSR0VUX0xJU1Q9Qzpcc3RlbUlJXG9yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eVxwYXJhbWV0ZXJzXHRhcmdldHNcZ3JvdXBlZERhdGFGaWxlcy50eHQpCisjVEFSR0VUX0xJU1QgPQorIworIyBQb3B1bGF0aW9uIHByb2ZpbGUgZm9yIHRoaXMgY291bnRyeSAoaS5lLiBQT1BfUFJPRklMRVM9Qzpcc3RlbUlJXG9yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eVxwYXJhbWV0ZXJzXHByb2ZpbGVzXCkKKyNQT1BfUFJPRklMRVM9CisjCisjIFBhdGggdG8gYXJlYXMgaW4gcG9seWdvbiB1bml0cyAtIHVzZWQgb25seSBmb3IgY29tcHV0aW5nIGFwcHJveGltYXRlIGFyZWEgb2YgbGV2ZWwgMiByZWdpb25zIChpLmUuIFBPTFlHT05fQVJFQVM9Qzpcc3RlbUlJXG9yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eVxwYXJhbWV0ZXJzXFBvbHlnb25BcmVhc1wpCisjUE9MWUdPTl9BUkVBUz0KKyMKKyMgUGF0aCB0byBhcmVhIGFuZCBwb3B1bGF0aW9uIGZpbGVzIChpLmUuIEFSRUFfUE9QPUM6XHN0ZW1JSVxvcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHlccGFyYW1ldGVyc1xBcmVhUG9wdWxhdGlvbkRhdGFcKQorI0FSRUFfUE9QPQorIworIyBQYXRoIHRvIGZvbGRlciB3aXRoIGxleGljb2dyYXBoaWNhbGx5IHNvcnRlZCBmaWxlcyAoaS5lLiBMRVhfRElSPUM6XHN0ZW1JSVxvcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHlccGFyYW1ldGVyc1xzb3J0XCkKKyNMRVhfRElSPQorIworIyBPdXRwdXQgZGlyZWN0b3J5IGZvciBuZXcgZmlsZXMgKGkuZS4gUFJPUEVSVElFU19PVVRQVVQ9Qzpcc3RlbUlJXG9yZy5lY2xpcHNlLnN0ZW0uaW50ZXJuYWwuZGF0YVxyZXNvdXJjZXNcZGF0YVxjb3VudHJ5XCkKK1BST1BFUlRJRVNfT1VUUFVUPSBDOlx0ZW1wb3V0XAorIworIyAqKioqKioqKioqIEVORCBPRiBDT05GSUdVUkFUSU9OIEZJTEUgRk9SIFBPUFVMQVRJT04gUFJPRklMRVIgKioqKioqKioqKgorIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvY29uZmlndXJhdGlvbi9Qcm9wZXJ0aWVzR2VuZXJhdG9yLmNvbmZpZyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L2NvbmZpZ3VyYXRpb24vUHJvcGVydGllc0dlbmVyYXRvci5jb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWIwMTRmMAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L2NvbmZpZ3VyYXRpb24vUHJvcGVydGllc0dlbmVyYXRvci5jb25maWcKQEAgLTAsMCArMSw0NCBAQAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjCisjICoqKioqKioqKiogQ09ORklHVVJBVElPTiBGSUxFIEZPUiBQUk9QRVJUSUVTIEdFTkVSQVRPUiAqKioqKioqKioqCisjCisjIFRPIENIQU5HRSBERUZBVUxUIENPTkZJR1VSQVRJT04gVkFMVUVTLCBNT0RJRlkgT1JHLkVDTElQU0UuU1RFTS5VVElMSVRZLkdFTkVSQVRPUlNcR2VuQ29uc3RhbnRzLmphdmEKKyMKKyMgQ09ORklHVVJBVElPTiBWQVJJQUJMRVMgU0VUIElOIFRISVMgRklMRSBPVkVSUklERSBUSEUgREVGQVVMVFMKKyMKKyMgVGhlIFdPUktTUEFDRSBWQVJJQUJMRSBJUyBSRVFVSVJFRCwgQUxMIE9USEVSIFZBUklBQkxFUyBBUkUgT1BUSU9OQUwgKGkuZS4gV09SS1NQQUNFPUM6XHN0ZW1JSVwpCitXT1JLU1BBQ0U9Qzpcc3RlbUlJXAorIworIyBJU08zMTY2LTEgZmlsZSAoaS5lLiBJU08zMTY2XzE9Qzpcc3RlbUlJXG9yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eVxwYXJhbWV0ZXJzXElTTzMxNjYtMVxJU08zMTY2XzFfbGlzdC50eHQpCisjSVMwMzE2Nl8xPQorIworIyBJU08zMTY2LTIgZmlsZSAoaS5lLiBJU08zMTY2XzI9Qzpcc3RlbUlJXG9yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eVxwYXJhbWV0ZXJzXElTTzMxNjYtMlxJU08zMTY2XzJfbGlzdC50eHQpCisjSVNPMzE2Nl8yPQorIworIyBJU08gZml4ICBmaWxlIChpLmUuIElTT19GSVg9Qzpcc3RlbUlJXG9yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eVxwYXJhbWV0ZXJzXElTT0ZJWFxJU09fRklYLnR4dCkKKyNJU09fRklYPQorIworIyBGaWxlIHdpdGggdGFyZ2V0IGNvdW50cmllcyB3ZSB3YW50IHRvIHByb2Nlc3MgKGkuZS4gVEFSR0VUX0xJU1Q9Qzpcc3RlbUlJXG9yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eVxwYXJhbWV0ZXJzXHRhcmdldHNcZ3JvdXBlZERhdGFGaWxlcy50eHQpCisjVEFSR0VUX0xJU1QgPQorIworIyBQb3B1bGF0aW9uIHByb2ZpbGUgZm9yIHRoaXMgY291bnRyeSAoaS5lLiBQT1BfUFJPRklMRVM9Qzpcc3RlbUlJXG9yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eVxwYXJhbWV0ZXJzXHByb2ZpbGVzXCkKKyNQT1BfUFJPRklMRVM9CisjCisjIFBhdGggdG8gYXJlYXMgaW4gcG9seWdvbiB1bml0cyAtIHVzZWQgb25seSBmb3IgY29tcHV0aW5nIGFwcHJveGltYXRlIGFyZWEgb2YgbGV2ZWwgMiByZWdpb25zIChpLmUuIFBPTFlHT05fQVJFQVM9Qzpcc3RlbUlJXG9yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eVxwYXJhbWV0ZXJzXFBvbHlnb25BcmVhc1wpCisjUE9MWUdPTl9BUkVBUz0KKyMKKyMgUGF0aCB0byBhcmVhIGFuZCBwb3B1bGF0aW9uIGZpbGVzIChpLmUuIEFSRUFfUE9QPUM6XHN0ZW1JSVxvcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHlccGFyYW1ldGVyc1xBcmVhUG9wdWxhdGlvbkRhdGFcKQorI0FSRUFfUE9QPQorIworIyBQYXRoIHRvIGZvbGRlciB3aXRoIGxleGljb2dyYXBoaWNhbGx5IHNvcnRlZCBmaWxlcyAoaS5lLiBMRVhfRElSPUM6XHN0ZW1JSVxvcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHlccGFyYW1ldGVyc1xzb3J0XCkKKyNMRVhfRElSPQorIworIyBPdXRwdXQgZGlyZWN0b3J5IGZvciBuZXcgZmlsZXMgKGkuZS4gUFJPUEVSVElFU19PVVRQVVQ9Qzpcc3RlbUlJXG9yZy5lY2xpcHNlLnN0ZW0uaW50ZXJuYWwuZGF0YVxyZXNvdXJjZXNcZGF0YVxjb3VudHJ5XCkKK1BST1BFUlRJRVNfT1VUUFVUPSBDOlx0ZW1wb3V0XAorIworIyBPdXRwdXQgZGlyZWN0b3J5IGZvciBuZXcgZmlsZXMgKGkuZS4gTUFQX09VVFBVVD1DOlxzdGVtSUlcb3JnLmVjbGlwc2Uuc3RlbS5nZW9ncmFwaHlccmVzb3VyY2VzXGRhdGFcZ2VvXGNvdW50cnlcKQorTUFQX09VVFBVVD0gQzpcdGVtcG91dFwKKyMKKyMgKioqKioqKioqKiBFTkQgT0YgQ09ORklHVVJBVElPTiBGSUxFIEZPUiBQUk9QRVJUSUVTIEdFTkVSQVRPUiAqKioqKioqKioqCisjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9jb25maWd1cmF0aW9uL1J1c3NpYURhdGFDbGVhbmVyLmNvbmZpZyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L2NvbmZpZ3VyYXRpb24vUnVzc2lhRGF0YUNsZWFuZXIuY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ4MzZhZGEKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9jb25maWd1cmF0aW9uL1J1c3NpYURhdGFDbGVhbmVyLmNvbmZpZwpAQCAtMCwwICsxLDIwIEBACisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMKKyMgKioqKioqKioqKiBDT05GSUdVUkFUSU9OIEZJTEUgUlVTU0lBIERBVEEgQ0xFQU5FUiAqKioqKioqKioqCisjCisjIFRPIENIQU5HRSBERUZBVUxUIENPTkZJR1VSQVRJT04gVkFMVUVTLCBNT0RJRlkgT1JHLkVDTElQU0UuU1RFTS5VVElMSVRZLkdFTkVSQVRPUlNcR2VuQ29uc3RhbnRzLmphdmEKKyMKKyMgQ09ORklHVVJBVElPTiBWQVJJQUJMRVMgU0VUIElOIFRISVMgRklMRSBPVkVSUklERSBUSEUgREVGQVVMVFMKKyMKKyMgVGhlIFdPUktTUEFDRSBWQVJJQUJMRSBJUyBSRVFVSVJFRCwgQUxMIE9USEVSIFZBUklBQkxFUyBBUkUgT1BUSU9OQUwgKGkuZS4gV09SS1NQQUNFPUM6XHN0ZW1JSVwpCitXT1JLU1BBQ0U9Qzpcc3RlbUlJXAorIworIyBGaWxlIHdpdGggdGFyZ2V0IGNvdW50cmllcyB3ZSB3YW50IHRvIHByb2Nlc3MgKGkuZS4gVEFSR0VUX0xJU1Q9Qzpcc3RlbUlJXG9yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eVxwYXJhbWV0ZXJzXHRhcmdldHNcRXVyb3BlQ291bnRyaWVzLnR4dCkKK1RBUkdFVF9MSVNUID0gQzpcc3RlbUlJXG9yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eVxwYXJhbWV0ZXJzXHRhcmdldHNcRXVyb3BlQ291bnRyaWVzLnR4dAorIworIyBPdXRwdXQgZGlyZWN0b3J5IGZvciBuZXcgZmlsZXMgKGkuZS4gT1VUUFVUPUM6XEV1cm9wZURhdGEyMDA3XFJ1c3NpYVwpCitPVVRQVVQgPSBDOlxFdXJvcGVEYXRhMjAwN1xSdXNzaWFcCisjCisjICoqKioqKioqKiogRU5EIE9GIENPTkZJR1VSQVRJT04gRklMRSBGT1IgUlVTU0lBIERBVEEgQ0xFQU5FUiAqKioqKioqKioqCisjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9jb25maWd1cmF0aW9uL1J1c3NpYURhdGFDb252ZXJ0ZXIuY29uZmlnIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvY29uZmlndXJhdGlvbi9SdXNzaWFEYXRhQ29udmVydGVyLmNvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMWFmNmU0Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvY29uZmlndXJhdGlvbi9SdXNzaWFEYXRhQ29udmVydGVyLmNvbmZpZwpAQCAtMCwwICsxLDIzIEBACisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMKKyMgKioqKioqKioqKiBDT05GSUdVUkFUSU9OIEZJTEUgRk9SIFJVU1NJQSBEQVRBIENPTlZFUlRFUiAqKioqKioqKioqCisjCisjIFRPIENIQU5HRSBERUZBVUxUIENPTkZJR1VSQVRJT04gVkFMVUVTLCBNT0RJRlkgT1JHLkVDTElQU0UuU1RFTS5VVElMSVRZLkdFTkVSQVRPUlNcR2VuQ29uc3RhbnRzLmphdmEKKyMKKyMgQ09ORklHVVJBVElPTiBWQVJJQUJMRVMgU0VUIElOIFRISVMgRklMRSBPVkVSUklERSBUSEUgREVGQVVMVFMKKyMKKyMgVGhlIFdPUktTUEFDRSBWQVJJQUJMRSBJUyBSRVFVSVJFRCwgQUxMIE9USEVSIFZBUklBQkxFUyBBUkUgT1BUSU9OQUwgKGkuZS4gV09SS1NQQUNFPUM6XHN0ZW1JSVwpCitXT1JLU1BBQ0U9Qzpcc3RlbUlJXAorIworIyBJU08zMTY2LTEgZmlsZSAoaS5lLiBJU08zMTY2XzE9Qzpcc3RlbUlJXG9yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eVxwYXJhbWV0ZXJzXElTTzMxNjYtMVxJU08zMTY2XzFfbGlzdC50eHQpCisjSVMwMzE2Nl8xPQorIworIyBGaWxlIHdpdGggdGFyZ2V0IGNvdW50cmllcyB3ZSB3YW50IHRvIHByb2Nlc3MgKGkuZS4gVEFSR0VUX0xJU1Q9Qzpcc3RlbUlJXG9yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eVxwYXJhbWV0ZXJzXHRhcmdldHNcRXVyb3BlQ291bnRyaWVzLnR4dCkKK1RBUkdFVF9MSVNUID0gQzpcc3RlbUlJXG9yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eVxwYXJhbWV0ZXJzXHRhcmdldHNcRXVyb3BlQ291bnRyaWVzLnR4dAorIworIyBPdXRwdXQgZGlyZWN0b3J5IGZvciBuZXcgZmlsZXMgKGkuZS4gT1VUUFVUPUM6XGRpdmFcRXVyb3BlKQorT1VUUFVUID0gQzpcZGl2YVxFdXJvcGUKKyMKKyMgKioqKioqKioqKiBFTkQgT0YgQ09ORklHVVJBVElPTiBGSUxFIEZPUiBSVVNTSUEgREFUQSBDT05WRVJURVIgKioqKioqKioqKgorIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvY29uZmlndXJhdGlvbi9SdXNzaWFEYXRhRXh0cmFjdG9yLmNvbmZpZyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L2NvbmZpZ3VyYXRpb24vUnVzc2lhRGF0YUV4dHJhY3Rvci5jb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGZiM2VjMAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L2NvbmZpZ3VyYXRpb24vUnVzc2lhRGF0YUV4dHJhY3Rvci5jb25maWcKQEAgLTAsMCArMSwyMyBAQAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjCisjICoqKioqKioqKiogQ09ORklHVVJBVElPTiBGSUxFIEZPUiBSVVNTSUEgREFUQSBFWFRSQUNUT1IgKioqKioqKioqKgorIworIyBUTyBDSEFOR0UgREVGQVVMVCBDT05GSUdVUkFUSU9OIFZBTFVFUywgTU9ESUZZIE9SRy5FQ0xJUFNFLlNURU0uVVRJTElUWS5HRU5FUkFUT1JTXEdlbkNvbnN0YW50cy5qYXZhCisjCisjIENPTkZJR1VSQVRJT04gVkFSSUFCTEVTIFNFVCBJTiBUSElTIEZJTEUgT1ZFUlJJREUgVEhFIERFRkFVTFRTCisjCisjIFRoZSBXT1JLU1BBQ0UgVkFSSUFCTEUgSVMgUkVRVUlSRUQsIEFMTCBPVEhFUiBWQVJJQUJMRVMgQVJFIE9QVElPTkFMIChpLmUuIFdPUktTUEFDRT1DOlxzdGVtSUlcKQorV09SS1NQQUNFPUM6XHN0ZW1JSVwKKyMKKyMgSVNPMzE2Ni0xIGZpbGUgKGkuZS4gSVNPMzE2Nl8xPUM6XHN0ZW1JSVxvcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHlccGFyYW1ldGVyc1xJU08zMTY2LTFcSVNPMzE2Nl8xX2xpc3QudHh0KQorI0lTMDMxNjZfMT0KKyMKKyMgRmlsZSB3aXRoIHRhcmdldCBjb3VudHJpZXMgd2Ugd2FudCB0byBwcm9jZXNzIChpLmUuIFRBUkdFVF9MSVNUPUM6XHN0ZW1JSVxvcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHlccGFyYW1ldGVyc1x0YXJnZXRzXEV1cm9wZUNvdW50cmllcy50eHQpCitUQVJHRVRfTElTVCA9IEM6XHN0ZW1JSVxvcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHlccGFyYW1ldGVyc1x0YXJnZXRzXEV1cm9wZUNvdW50cmllcy50eHQKKyMKKyMgT3V0cHV0IGRpcmVjdG9yeSBmb3IgbmV3IGZpbGVzIChpLmUuIE9VVFBVVD1DOlxzdGVtSUlcb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5XHBhcmFtZXRlcnNcQXJlYVBvcHVsYXRpb25EYXRhXCkKK09VVFBVVCA9IEM6XHN0ZW1JSVxvcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHlccGFyYW1ldGVyc1xBcmVhUG9wdWxhdGlvbkRhdGFcCisjCisjICoqKioqKioqKiogRU5EIE9GIENPTkZJR1VSQVRJT04gRklMRSBGT1IgUlVTU0lBIERBVEEgRVhUUkFDVE9SICoqKioqKioqKioKKyMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L2NvbmZpZ3VyYXRpb24vU2luZ2xlUGFzc0Rvd25TYW1wbGVyLmNvbmZpZyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L2NvbmZpZ3VyYXRpb24vU2luZ2xlUGFzc0Rvd25TYW1wbGVyLmNvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NTU0MjJiCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvY29uZmlndXJhdGlvbi9TaW5nbGVQYXNzRG93blNhbXBsZXIuY29uZmlnCkBAIC0wLDAgKzEsMzUgQEAKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIworIyAqKioqKioqKioqIENPTkZJR1VSQVRJT04gRklMRSBGT1IgU0lOR0xFIFBBU1MgRE9XTi1TQU1QTEVSICoqKioqKioqKioKKyMKKyMgVE8gQ0hBTkdFIERFRkFVTFQgQ09ORklHVVJBVElPTiBWQUxVRVMsIE1PRElGWSBPUkcuRUNMSVBTRS5TVEVNLlVUSUxJVFkuR0VORVJBVE9SU1xHZW5Db25zdGFudHMuamF2YQorIworIyBDT05GSUdVUkFUSU9OIFZBUklBQkxFUyBTRVQgSU4gVEhJUyBGSUxFIE9WRVJSSURFIFRIRSBERUZBVUxUUworIworIyBUaGUgV09SS1NQQUNFIFZBUklBQkxFIElTIFJFUVVJUkVELCBBTEwgT1RIRVIgVkFSSUFCTEVTIEFSRSBPUFRJT05BTCAoaS5lLiBXT1JLU1BBQ0U9Qzpcc3RlbUlJXCkKK1dPUktTUEFDRT1DOlxzdGVtSUlcCisjCisjIFRoZSBUSFJFU0hPTEQgdmFyaWFibGUgc3BlY2lmaWVzIGFuIGFuZ2xlIGluIGRlZ3JlZXMgZm9yIHdoaWNoIHdlIHdhbnQgdG8gcmVkdWNlLiBJZiBub3QgcHJvdmlkZWQgaXQgZGVmYXVsdHMgdG8gNSBkZWdyZWVzLgorI1RIUkVTSE9MRD01CisjCisjIElTTzMxNjYtMSBmaWxlIChpLmUuIElTTzMxNjZfMT1DOlxzdGVtSUlcb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5XHBhcmFtZXRlcnNcSVNPMzE2Ni0xXElTTzMxNjZfMV9saXN0LnR4dCkKKyNJUzAzMTY2XzE9CisjCisjIElTTzMxNjYtMiBmaWxlIChpLmUuIElTTzMxNjZfMj1DOlxzdGVtSUlcb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5XHBhcmFtZXRlcnNcSVNPMzE2Ni0yXElTTzMxNjZfMl9saXN0LnR4dCkKKyNJU08zMTY2XzI9CisjCisjIElTTyBmaXggIGZpbGUgKGkuZS4gSVNPX0ZJWD1DOlxzdGVtSUlcb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5XHBhcmFtZXRlcnNcSVNPRklYXElTT19GSVgudHh0KQorI0lTT19GSVg9CisjCisjIEZpbGUgd2l0aCB0YXJnZXQgY291bnRyaWVzIHdlIHdhbnQgdG8gcHJvY2VzcyAoaS5lLiBUQVJHRVRfTElTVD1DOlxzdGVtSUlcb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5XHBhcmFtZXRlcnNcdGFyZ2V0c1xncm91cGVkRGF0YUZpbGVzLnR4dCkKK1RBUkdFVF9MSVNUID0gQzpcc3RlbUlJXG9yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eVxwYXJhbWV0ZXJzXHRhcmdldHNcQ291bnRyaWVzTGlnaHQudHh0CisjCisjIFBhdGggdG8gZm9sZGVyIHdpdGggbGV4aWNvZ3JhcGhpY2FsbHkgc29ydGVkIGZpbGVzIChpLmUuIExFWF9ESVI9Qzpcc3RlbUlJXG9yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eVxwYXJhbWV0ZXJzXHNvcnRcKQorI0xFWF9ESVI9CisjCisjIE91dHB1dCBkaXJlY3RvcnkgZm9yIG5ldyBmaWxlcyAoaS5lLiBNQVBfT1VUUFVUPUM6XHN0ZW1JSVxvcmcuZWNsaXBzZS5zdGVtLmdlb2dyYXBoeVxyZXNvdXJjZXNcZGF0YVxnZW9cY291bnRyeVwpCitNQVBfT1VUUFVUPSBDOlx0ZW1wb3V0XAorIworIyAqKioqKioqKioqIEVORCBPRiBDT05GSUdVUkFUSU9OIEZJTEUgRk9SIFNJTkdMRSBQQVNTIERPV04tU0FNUExFUiAqKioqKioqKioqCisjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L2NvbmZpZ3VyYXRpb24vVVNBMkRpdmFGb3JtYXRDb252ZXJ0ZXIuY29uZmlnIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvY29uZmlndXJhdGlvbi9VU0EyRGl2YUZvcm1hdENvbnZlcnRlci5jb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTNmNzkxNQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L2NvbmZpZ3VyYXRpb24vVVNBMkRpdmFGb3JtYXRDb252ZXJ0ZXIuY29uZmlnCkBAIC0wLDAgKzEsMjMgQEAKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIworIyAqKioqKioqKioqIENPTkZJR1VSQVRJT04gRklMRSBGT1IgRVVST1BFIFVTQSBUTyBESVZBIEZPUk1BVCBDT05WRVJURVIgKioqKioqKioqKgorIworIyBUTyBDSEFOR0UgREVGQVVMVCBDT05GSUdVUkFUSU9OIFZBTFVFUywgTU9ESUZZIE9SRy5FQ0xJUFNFLlNURU0uVVRJTElUWS5HRU5FUkFUT1JTXEdlbkNvbnN0YW50cy5qYXZhCisjCisjIENPTkZJR1VSQVRJT04gVkFSSUFCTEVTIFNFVCBJTiBUSElTIEZJTEUgT1ZFUlJJREUgVEhFIERFRkFVTFRTCisjCisjIFRoZSBXT1JLU1BBQ0UgVkFSSUFCTEUgSVMgUkVRVUlSRUQsIEFMTCBPVEhFUiBWQVJJQUJMRVMgQVJFIE9QVElPTkFMIChpLmUuIFdPUktTUEFDRT1DOlxzdGVtSUlcKQorV09SS1NQQUNFPUM6XHN0ZW1JSVwKKyMKKyMgTmFtZXMgZmlsZSAoaS5lLiBOQU1FU19MSVNUPUM6XHN0ZW1JSVxvcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHlccGFyYW1ldGVyc1xVU0FfTDFfRGF0YVxVU0FfTDEudHh0KQorTkFNRVNfTElTVD1DOlxzdGVtSUlcb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5XHBhcmFtZXRlcnNcVVNBX0wxX0RhdGFcVVNBX0wxLnR4dAorIworIyBGaWxlIHdpdGggdGFyZ2V0IGNvdW50cmllcyB3ZSB3YW50IHRvIHByb2Nlc3MgKGkuZS4gVEFSR0VUX0xJU1Q9Qzpcc3RlbUlJXG9yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eVxwYXJhbWV0ZXJzXHRhcmdldHNcZm9ybWF0TGlzdC50eHQpCitUQVJHRVRfTElTVCA9IEM6XHN0ZW1JSVxvcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHlccGFyYW1ldGVyc1x0YXJnZXRzXGZvcm1hdExpc3QudHh0CisjCisjIE91dHB1dCBkaXJlY3RvcnkgZm9yIG5ldyBmaWxlcyAoaS5lLiBPVVRQVVQ9QzpcZGl2YVxOb3J0aEFtZXJpY2FcVVNBXCkKK09VVFBVVCA9IEM6XGRpdmFcTm9ydGhBbWVyaWNhXFVTQVwKKyMKKyMgKioqKioqKioqKiBFTkQgT0YgQ09ORklHVVJBVElPTiBGSUxFIEZPUiBVU0EgVE8gRElWQSBGT1JNQVQgQ09OVkVSVEVSKioqKioqKioqKgorIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvZG9jcy9BbiBJbnRyb2R1Y3Rpb24gVG8gU1RFTSBJSSBQcm9wZXJ0aWVzIEZpbGVzLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L2RvY3MvQW4gSW50cm9kdWN0aW9uIFRvIFNURU0gSUkgUHJvcGVydGllcyBGaWxlcy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTUyNWFlYgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L2RvY3MvQW4gSW50cm9kdWN0aW9uIFRvIFNURU0gSUkgUHJvcGVydGllcyBGaWxlcy50eHQKQEAgLTAsMCArMSw5NCBAQAorCitKYW4gLSAxMCAtIDIwMDcKKworKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKworKkFuIEludHJvZHVjdGlvbiB0byBTVEVNJ3MgUHJvcGVydGllcyBGaWxlcyoKKworICAgSW4gU1RFTSBJSSwgd2Ugc3RvcmUgZGF0YSBhYm91dCBhIGNvdW50cnkgYW5kIGl0cyBhZG1pbmlzdHJhdGl2ZSBkaXZpc2lvbnMgaW4gcHJvcGVydGllcyBmaWxlcy4gUHJvcGVydGllcyBmaWxlcyBhcmUgdXNlZCB0byBkZWZpbmUgaWRlbnRpZmllcnMgYW5kIHRvIHNldCBwb3B1bGF0aW9uIGFuZCBhcmVhIGRhdGEKK2F0IGFsbCBsZXZlbHMgKGkuZS4gY291bnRyeSwgc3RhdGUsIG9yIGNvdW50eSBsZXZlbCkuIFRoZXJlIGFyZSBmb3VyIG1haW4gdHlwZXMgb2YgcHJvcGVydGllcyBmaWxlcyA6IGFyZWEsIHBvcHVsYXRpb24sIG5vZGVzLCBhbmQgbmFtZXMuIFRoZSBwdXJwb3NlIG9mIGVhY2ggcHJvcGVydHkgZmlsZSB3aWxsIGJlCitleHBsYWluZWQgbGF0ZXIuCisKKyAgIEluIFNURU0gSUksIG1vc3Qgb2YgdGhlIGRhdGEgaXMgc3RhbmRhcmRpemVkIElTTyAzMTY2IG9yIEZJUFMgKEZlZGVyYWwgSW5mb3JtYXRpb24gUHJvY2Vzc2luZyBTdGFudGFuZGFyZHMpIGRhdGEuIEFjY29yZGluZyB0byBXaWtpcGVkaWEsICJJU08gMzE2NiBpcyBhIHRocmVlLXBhcnQgZ2VvZ3JhcGhpYyBjb2Rpbmcgc3RhbmRhcmQgZm9yIAorY29kaW5nIHRoZSBuYW1lcyBvZiBjb3VudHJpZXMgYW5kIGRlcGVuZGVudCBhcmVhcywgYW5kIHRoZSBwcmluY2lwYWwgc3ViZGl2aXNpb25zIHRoZXJlb2YuIiBJU08gMzE2NiBzcGVjaWZpZXMgc3RhbmRhcmQgYWxwaGEtMiBjb2RlcywgYWxwaGEtMyBjb2RlcywgYW5kIHRocmVlLWRpZ2l0IGNvdW50cnkgY29kZXMgYXMgd2VsbC4gRm9yIGV4YW1wbGUsCitmb3IgdGhlIFVTQSwgdGhlIGFscGhhLTIgY29kZSB3b3VsZCBiZSBVUywgdGhlIGFscGhhLTMgY29kZSBpcyBVU0EgLCBhbmQgdGhlIHRocmVlLWRpZ2l0IGNvdW50cnkgY29kZSBpcyA4NDAuIEluIGFkZGl0dGlvbiwgd2UgdXNlIEZJUFMgY29kZXMgd2hlbmV2ZXIgcG9zc2libGUgdG8gY3JlYXRlIGlkZW50aWZpZXJzIHRoYXQgcmVwcmVzZW50IGEgCitwb2xpdGljYWwgYWRtaW5pc3RyYXRpb24uIEZvciBpbnN0YW5jZSwgdGhlIEZJUFMgZm9yIE5ldyBZb3JrIENvdW50eSAoaS5lLiwgTWFuaGF0dGFuKSBpcyAzNjA2MSB3aGlsZSBLaW5ncyBDb3VudHkgKGkuZS4sIEJyb29rbHluKSBpcyAzNjA0Ny4gVGhlIGZpcnN0IHR3byBkaWdpdHMgb2YgdGhlIEZJUFMgaWRlbnRpZmllcyB0aGUgc3RhdGUuICAKKworKipBZG1pbmlzdHJhdGl2ZSBMZXZlbHMgYW5kIFByb3BlcnRpZXMgRmlsZXMqKgorCisgICBBZG1pbmlzdHJhdGl2ZSBsZXZlbHMgY29ycmVzcG9uZCB0byBwb2xpdGljYWwgZGl2aXNpb25zIG9mIGEgY291bnRyeS4gQSBsZXZlbCAwIGFkbWluaXN0cmF0aW9uIGlkZW50aWZpZXMgYW4gZW50aXJlIGNvdW50cnkgKGUuZy4gVVNBIG9yIE1leGljbykuIEEgbGV2ZWwgMSBhZG1pbmlzdHJhdGlvbiBjb3JyZXNwb25kcyB0byBhIHN1YmRpdmlzaW9uIG9mIGEgY291bnRyeQord2hpY2ggY2FuIGJlIGEgc3RhdGUsIHRlcnJpdG9yeSwgcGFyaXNoLCBvciBhIHByb3ZpbmNlLiBBcyBhbiBleGFtcGxlIHdlIGhhdmUgdGhhdCBDYWxpZm9ybmlhLCBDb2xvcmFkbywgYW5kIE5ldyBZb3JrIGFyZSBhbGwgbGV2ZWwgMSBhZG1pbmlzdHJhdGlvbnMgb2YgdGhlIFVTQS4gU2ltaWxhcmx5LCBsZXZlbCAyIGFkbWluaXN0cmF0aW9ucyBhcmUgc3ViZGl2aXNpb25zIG9mIGEgbGV2ZWwgCisxIGFkbWluaXN0cmF0aW9uLiBPcmFuZ2UgQ291bnR5LCBNb250ZXJleSBDb3VudHksIGFuZCBOYXBhIENvdW50eSBhcmUgYWxsIGxldmVsIDIgYWRtaW5pc3RyYXRpb25zIHRoYXQgYmVsb25nIHRvIENhbGlmb3JuaWEuIAorCisgICBBIHByb3BlcnR5IGZpbGUgaXMgYSBwbGFpbi10ZXh0IGZpbGUgdGhhdCBjb250YWlucyBlaXRoZXIgYXJlYSBkYXRhLCBwb3B1bGF0aW9uIGRhdGEsIG9yIG90aGVyIHJlbGV2YW50IGRhdGEgcmVsYXRlZCB0byB0aGUgcG9saXRpY2FsIGRpdmlzaW9ucyBvZiBhIGNvdW50cnkgYXQgZGlmZmVyZW50IGFkbWluaXN0cmF0aW9uIGxldmVscy4gUHJvcGVydGllcyBmaWxlcyBhcmUgbG9jYXRlZAordW5kZXIgb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcm5hbC5kYXRhXHJlc291cmNlc1xkYXRhXGNvdW50cnkuIFRoZXJlIGFyZSBmb3VyIHR5cGVzIG9mIHByb3BlcnRpZXMgZmlsZXMgOgorCisgICAgICAgTmFtZXMgcHJvcGVydHkgZmlsZSA6ICBUaGlzIGZpbGUgZGVmaW5lcyB0aGUgaWRlbnRpZmllcnMgZm9yIGV2ZXJ5IGFkbWluaXN0cmF0aXZlIGRpdmlzaW9uIGluIGEgY291bnRyeSBhdCBlYWNoIGxldmVsLiBGb3IgZXhhbXBsZSwgZm9yIHRoZSBVU0EsIGF0IGxldmVsIDAgd2Ugd291bGQgaGF2ZSAiVVNBID0gVW5pdGVkIFN0YXRlcyIuIEF0IGxldmVsIDEsIHdlIHdvdWxkIGhhdmUgIlVTLUNBID0gQ2FsaWZvcm5pYSIgLCAiVVMtQ08gPSBDb2xvcmFkbyIsIGFuZCAiVVMtTlkgPSBOZXcgWW9yayIuIAorQXQgbGV2ZWwgMiwgZm9yIE9yYW5nZSwgTW9udGVyZXksIGFuZCBOYXBhIGNvdW50aWVzIHdpdGhpbiBDYWxpZm9ybmlhIHdlIGhhdmUgIlVTLUNBLTA2MDU5ID0gT3JhbmdlIENvdW50eSIsICJVUy1DQS0wNjA1MyA9IE1vbnRlcmV5IENvdW50eSIsIGFuZCAiVVMtQ0EtMDYwNTUgPSBOYXBhIENvdW50eSIuIFRoZXJlIGlzIGEgc2luZ2xlIG5hbWVzIHByb3BlcnR5CitmaWxlIGZvciBldmVyeSBjb3VudHJ5LiBUaGUgY29ycmVzcG9uZGluZyBuYW1lcyBwcm9wZXJ0eSBmaWxlIGZvciB0aGUgVVNBIGlzIFVTQV9uYW1lcy5wcm9wZXJ0aWVzLiBGb3IgbGV2ZWwgMiBhZG1pbmlzdHJhdGlvbnMsIHRoZSBmaXZlIGRpZ2l0cyBmb3VuZCBvbiB0aGUgaWRlbnRpZmllcnMgKGkuZS4KKyIwNjA1MyIgZm9yIGlkZW50aWZpZXIgIlVTLUNBLTA2MDUzIiBhcmUgZGVmaW5lZCBhcyBmb2xsb3dzIDogdGhlIGxlZnRtb3N0IHR3byBkaWdpdHMgaWRlbnRpZnkgdGhlIGxldmVsIDEgYWRtaW5pc3RyYXRpb24gKCAiMDYiIC0+IENhbGlmb3JuaWEgKSB3aGlsZSB0aGUgcmVtYWluaW5nCitkaWdpdHMsIHdoaWNoIGNhbiBiZSB1cCB0byBmb3VyLCBpZGVudGlmeSB0aGUgbGV2ZWwgMiBhZG1pbmlzdHJhdGlvbiAoIjA1MyIgLT4gTW9udGVyZXkgQ291bnR5KS4gICAgICAgCisKKyAgICAgICBOb2RlcyBwcm9wZXJ0eSBmaWxlIDogVGhpcyBmaWxlIHByb3ZpZGVzIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gYWJvdXQgaWRlbnRpZmllcnMgb2YgYWRtaW5pc3RyYXRpdmUgZGl2aXNpb25zLiBUaGVyZSBpcyBhIG5vZGVzIHByb3BlcnR5IGZpbGUgZm9yIGVhY2ggYWRtaW5pc3RyYXRpb24gbGV2ZWwuIFRoZXJlIGlzIGEgZml4ZWQgZm9ybWF0IHRoYXQgaXMgdXNlZCBpbiB0aGVzZSBmaWxlcyBhbmQgaXQgaXMgYXMgZm9sbG93cyA6CisKKyIgIyBGb3JtYXQ6IENvZGUgPSBOYW1lLCBJU08tMzE2Ni0yIG51bWVyaWMgY29kZSwgVHdvIGxldHRlciBjb2RlICIgRm9yIGV4YW1wbGUsIGF0IGxldmVsIDAgZm9yIHRoZSBVU0Egd2UgaGF2ZSAiVVNBID0gVW5pdGVkIFN0YXRlcywgODQwLCBVUyIuIEF0IGxldmVsIDEsIGZvciBDYWxpZm9ybmlhLCBDb2xvcmFkbywgYW5kIE5ldyBZb3JrIHdlIGhhdmUgOgorIlVTLUNBID0gQ2FsaWZvcm5pYSwgMDYsIENBIiAsICJVUy1DTyA9IENvbG9yYWRvLCAwOCwgQ08iLCBhbmQgICJVUy1OWSA9IE5ldyBZb3JrLCAzNiwgTlkiLiBUaGUgbm9kZXMgcHJvcGVydHkgZmlsZXMgY29ycmVzcG9uZGluZyB0byB0aGUgVVNBIGFyZSBVU0FfMF9ub2RlLnByb3BlcnRpZXMsIFVTQV8xX25vZGUucHJvcGVydGllcywgYW5kIFVTQV8yX25vZGUucHJvcGVydGllcy4KKworICAgICAgIEFyZWEgcHJvcGVydHkgZmlsZSA6IFRoaXMgZmlsZSBjb250YWlucyBhcmVhIGRhdGEgKGluIHNxdWFyZSBraWxvbWV0ZXJzKSBmb3IgYWRtaW5pc3RyYXRpdmUgZGl2aXNpb25zLiBUaGVyZSBpcyBhbiBhcmVhIHByb3BlcnR5IGZpbGUgZm9yIGVhY2ggYWRtaW5pc3RyYXRpb24gbGV2ZWwuIEluIHRoZSBjYXNlIG9mIHRoZSBVU0EgYXQgbGV2ZWwgMCwgd2UgaGF2ZSAiVVNBID0gOTE2MTkyMyIuCitBdCBsZXZlbCAxLCB3ZSBoYXZlICJVUy1DQSA9IDE2MzY5NS41NyIsICJVUy1DTyA9IDEwNDA5My41NyIsIGFuZCAiVVMtTlkgPSA1NDU1Ni4wMCIgZm9yIENhbGlmb3JuaWEsIENvbG9yYWRvIGFuZCBOZXcgWW9yayByZXNwZWN0aXZlbHkuIEF0IGxldmVsIDIsIGZvciBPcmFuZ2UsIE1vbnRlcmV5LCBhbmQgTmFwYSBjb3VudGllcyB3aXRoaW4gQ2FsaWZvcm5pYSAKK3dlIGhhdmUgIlVTLUNBLTA2MDU5ID0gMjA0My41MDA2IiwgIlVTLUNBLTA2MDUzID0gODYwMy45NDA1IiwgYW5kICJVUy1DQS0wNjA1NSA9IDE5NTIuODUxMCIuIFRoZSBhcmVhIHByb3BlcnR5IGZpbGVzIGNvcnJlc3BvbmRpbmcgdG8gdGhlIFVTQSBhcmUgVVNBXzBfYXJlYS5wcm9wZXJ0aWVzLCBVU0FfMV9hcmVhLnByb3BlcnRpZXMsIGFuZCBVU0FfMl9hcmVhLnByb3BlcnRpZXMuCisKKworICAgICAgIFBvcHVsYXRpb24gcHJvcGVydHkgZmlsZSA6IFRoaXMgZmlsZSBjb250YWlucyBwb3B1bGF0aW9uIGRhdGEgZm9yIGFkbWluaXN0cmF0aXZlIGRpdmlzaW9ucy4gVGhlcmUgaXMgYSBwb3B1bGF0aW9uIHByb3BlcnR5IGZpbGUgZm9yIGVhY2ggYWRtaW5pc3RyYXRpb24gbGV2ZWwuICBJbiB0aGUgY2FzZSBvZiB0aGUgVVNBIGF0IGxldmVsIDAsIHdlIGhhdmUgIlVTQSA9IDI5ODQ0NDIxNSIuCitBdCBsZXZlbCAxLCB3ZSBoYXZlICJVUy1DQSA9IDMzODcxNjQ4ICIsICJVUy1DTyA9IDQzMDEyNjEiLCBhbmQgIlVTLU5ZID0gMTg5NzY0NTciIGZvciBDYWxpZm9ybmlhLCBDb2xvcmFkbyBhbmQgTmV3IFlvcmsgcmVzcGVjdGl2ZWx5LiBBdCBsZXZlbCAyLCBmb3IgT3JhbmdlLCBNb250ZXJleSwgYW5kIE5hcGEgY291bnRpZXMgd2l0aGluIENhbGlmb3JuaWEgCit3ZSBoYXZlICJVUy1DQS0wNjA1OSA9IDI4NDYyODkiLCAiVVMtQ0EtMDYwNTMgPSA0MDE3NjIiLCBhbmQgIlVTLUNBLTA2MDU1ID0gMTI0Mjc5Ii4gVGhlIHBvcHVsYXRpb24gcHJvcGVydHkgZmlsZXMgY29ycmVzcG9uZGluZyB0byB0aGUgVVNBIGFyZSBVU0FfMF9odW1hbi5wcm9wZXJ0aWVzLCBVU0FfMV9odW1hbi5wcm9wZXJ0aWVzLCBhbmQgVVNBXzJfaHVtYW4ucHJvcGVydGllcy4KKworCQorKipVcGRhdGluZyB2YWx1ZXMgaW4gYSBwcm9wZXJ0eSBmaWxlKioKKworICAgVG8gdXBkYXRlIGEgdmFsdWUgaW4gYSBwcm9wZXJ0eSBmaWxlIHlvdSBzaG91bGQgZm9sbG93IGEgZmV3IHNpbXBsZSBzdGVwcy4gRmlyc3QsIGdpdmVuIHRoYXQgeW91IGtub3cgdGhlIG5hbWUgb2YgdGhlIGNvdW50cnkgYW5kL29yIGFkbWluaXN0cmF0aXZlIGRpdmlzaW9uIHRvIGJlIHVwZGF0ZWQsIGxvb2sgdW5kZXIgb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcm5hbC5kYXRhXHJlc291cmNlc1xkYXRhXGNvdW50cnlcPHRocmVlIGxldHRlciBpZGVudGlmaWVyIGZvciB0aGUgY291bnRyeT4gZm9yIHRoZSAKK2ZvbGRlciB0aGF0IGJlbG9uZ3MgdG8gYSBnaXZlbiBjb3VudHJ5LiBJbiB0aGUgY2FzZSBvZiB0aGUgVVNBLCB3ZSB3b3VsZCBnbyB0byAgb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcm5hbC5kYXRhXHJlc291cmNlc1xkYXRhXGNvdW50cnlcVVNBIHdoZXJlIGFsbCB0aGUgcHJvcGVydHkgZmlsZXMgYXJlIGxvY2F0ZWQuIFNlY29uZCwgc2VhcmNoIGluIHRoZSBuYW1lcyBwcm9wZXJ0eSBmaWxlIHRvIGZpbmQgdGhlIGlkZW50aWZpZXIgb2YgdGhlIGFkbWluaXN0cmF0aW9uIHdlIHdhbnQgdG8gdXBkYXRlLiBUaGlyZCwKK29wZW4gdGhlIGNvcnJlc3BvbmRpbmcgZmlsZSAoYXJlYSwgcG9wdWxhdGlvbiwgb3Igbm9kZSBmaWxlKSB3aGVyZSB0aGUgdXBkYXRlIHdpbGwgdGFrZSBwbGFjZS4gRmluYWxseSwgc2VhcmNoIGZvciB0aGUgaWRlbnRpZmllciBhbmQgb25jZSBmb3VuZCwgdXBkYXRlIGl0cyB2YWx1ZS4gQXMgYW4gZXhhbXBsZSwKK2xldHMgc2F5IHdlIHdhbnQgdG8gdXBkYXRlIGJ5IGluY3JlYXNpbmcgMTAwIHNxdWFyZSBraWxvbWV0ZXJzIHRoZSBhcmVhIG9mIE9yYW5nZSBDb3VudHkgd2hpY2ggYmVsb25ncyB0byBDYWxpZm9ybmlhLCBVU0EuIFRoZW4sIHdlIHdvdWxkIG9wZW4gb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcm5hbC5kYXRhXHJlc291cmNlc1xkYXRhXGNvdW50cnlcVVNBXFVTQV9uYW1lcy5wcm9wZXJ0aWVzIGFuZCBkbyBhIHNlYXJjaCBmb3IgdGhlIGlkZW50aWZpZXIgb2YgIk9yYW5nZSBDb3VudHkiCit3aGljaCBpcyAgIlVTLUNBLTA2MDU5Ii4gVGhlbiwgc2luY2Ugd2UgbGVhcm4gZnJvbSB0aGUgbmFtZXMgcHJvcGVydHkgZmlsZSB0aGF0IE9yYW5nZSBDb3VudHkgaXMgYSBsZXZlbCAyIGFkbWluaXN0cmF0aW9uLCB3ZSB3b3VsZCBvcGVuICJvcmcuZWNsaXBzZS5zdGVtLmludGVybmFsLmRhdGFccmVzb3VyY2VzXGRhdGFcY291bnRyeVxVU0FcVVNBXzJfYXJlYS5wcm9wZXJ0aWVzIgorYW5kIGRvIGEgbmV3IHNlYXJjaCBmb3IgaWRlbnRpZmllciAiVVMtQ0EtMDYwNTkiLiBPdXIgc2VhcmNoIHdpbGwgZmluZCAiIlVTLUNBLTA2MDU5ID0gMjA0My41MDA2IiBGaW5hbGx5LCB3ZSBkbyB0aGUgdXBkYXRlIGJ5IGFkZGluZyAxMDAgc3F1YXJlIGtpbG9tZXRlcnMgdG8gdGhlIGN1cnJlbnQgdmFsdWUgIlVTLUNBLTA2MDU5ID0gMjE0My41MDA2Ii4KKworICAgIE9uY2UgdGhlIHVwZGF0aW5nIGhhcyBiZWVuIGRvbmUgdG8gdGhlIGNvcnJlY3QgZmlsZShzKSwgIG9uZSBuZWVkcyB0byBydW4gb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcm5hbC5kYXRhXHJlc291cmNlc1xzcmNcTWFpbi5qYXZhLiBCeSBydW5uaW5nIE1haW4uamF2YSB3ZSBjcmVhdGUgYSBuZXcgc2VyaWFsaXplZCBmaWxlIHRoYXQgd2lsbCB0YWtlIHRoZSBjaGFuZ2VzIGludG8gYWNjb3VudC4KK1RoZSBuZXcgc2VyaWFsaXplZCBmaWxlIGNhbiBiZSBmb3VuZCB1bmRlciBvcmcuZWNsaXBzZS5zdGVtLmludGVybmFsLmRhdGFcdGVtcFxkYXRhXHNjZW5hcmlvXGRpc2Vhc2UuIE5leHQgdGltZSBTVEVNIElJIGV4ZWN1dGVzIGEgc2NlbmFyaW8sIGl0IHdpbGwgbG9hZCB0aGUgbmV3IHNlcmlhbGl6ZWQgZmlsZS4KKworCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCisqQW4gSW50cm9kdWN0aW9uIHRvIFNURU0gTWFwIEZpbGVzKgorCitTVEVNIE1hcHMgCisKKworICBNYXBzIGZvciBTVEVNIGFyZSBYTUwgZmlsZXMgdGhhdCBmb2xsb3cgYSBHTUwgZm9ybWF0LiBUaGVzZSBmaWxlcyBhcmUgbG9jYXRlZCB1bmRlciBvcmcuZWNsaXBzZS5zdGVtLmdlb2dyYXBoeVxyZXNvdXJjZXNcZGF0YVxnZW9cY291bnRyeVw8dGhyZWUgbGV0dGVyIGlkZW50aWZpZXIgZm9yIHRoZSBjb3VudHJ5Pi4gVGhlcmUgY2FuIGJlIG11bHRpcGxlIG1hcCBmaWxlcyBmb3IgYSBjb3VudHJ5LCBvbmUgZm9yIGVhY2ggYWRtaW5pc3RyYXRpb24gbGV2ZWwuCitBcyBhbiBleGFtcGxlLCBmb3IgdGhlIFVTQSB3ZSBoYXZlIHRoZSBmb2xsb3dpbmcgdHdvIG1hcHM6IFVTQV8xX01BUC54bWwgYW5kIFVTQV8yX01BUC54bWwuIEFjY29yZGluZyB0byBXaWtpcGVkaWEsIEdNTCBpcyBhbiBYTUwgZ3JhbW1hciBkZWZpbmVkIGJ5IHRoZSBPcGVuIEdlb3NwYXRpYWwgQ29uc29ydGl1bSAoT0dDKSB0byBleHByZXNzIGdlb2dyYXBoaWNhbCBmZWF0dXJlcy4gQXMgYW4gZXhhbXBsZSwgdGhlIHNldCBvZiBHTUwgZWxlbWVudHMgdGhhdCBkZWZpbmUKK09yYW5nZSBjb3VudHkgYXJlIDoKKworLy9TYW1wbGUgdGFrZW4gZnJvbSBvcmcuZWNsaXBzZS5zdGVtLmdlb2dyYXBoeVxyZXNvdXJjZXNcZGF0YVxnZW9cY291bnRyeVxVU0FcVVNBXzJfTUFQLnhtbAorCisuLi4KKzxnbWw6UG9seWdvbiBnbWw6aWQ9IlVTLUNBLTA2MDUzIj4KKzxnbWw6b3V0ZXJCb3VuZGFyeUlzPgorPGdtbDpMaW5lYXJSaW5nPgorPGdtbDpwb3NMaXN0PgorMzYuOTE4NiAtMTIxLjcwMTkgMzYuOTE5NyAtMTIxLjY5OTkgLi4uIDM2LjkxODYgLTEyMS43MDE5Cis8L2dtbDpwb3NMaXN0PgorPC9nbWw6TGluZWFyUmluZz48L2dtbDpvdXRlckJvdW5kYXJ5SXM+Cis8L2dtbDpQb2x5Z29uPgorLi4uCisKKyoqVXBkYXRpbmcgYSBNYXAqKiAgICAKKworICAgIFRvIHVwZGF0ZSBhIG1hcCwgdGhhdCBpcywgdG8gcHJvdmlkZSBtb3JlIGFjY3VyYXRlIGxhdGl0dWRlIGFuZCBsb25naXR1ZGUgZGF0YSBmb3IgYSBnaXZlbiBsb2NhdGlvbiB3ZSBmb2xsb3cgYSBmZXcgc3RlcHMuIFdlIGZpbmQgdGhlIGlkZW50aWZpZXIgZm9yIHRoZSBsb2NhdGlvbgord2UgYXJlIHRyeWluZyB0byB1cGRhdGUuIFRoaXMgc3RlcCBpcyBzaW1pbGFyIHRvIHRoZSBzdGVwIGRlc2NyaWJlZCBmb3IgdXBkYXRpbmcgdmFsdWVzIGluIGEgcHJvcGVydHkgZmlsZS4gT25jZSB3ZSBoYXZlIGZvdW5kIGl0LCB3ZSByZXBsYWNlIHRoZSBsYXRpdHV0ZSBhbmQgbG9uZ2l0dWRlCit2YWx1ZXMgY29udGFpbmVkIHdpdGhpbiB0aGUgPGdtbDpwb3N0TGlzdD4gPC9nbWw6cG9zdExpc3Q+IHRhZ3MuIFdlIG5lZWQgdG8gbWFrZSBzdXJlIHRoYXQgdGhlIHN0YXJ0aW5nIGFuZCBlbmRpbmcgbGF0aXR1dGUgYW5kIGxvbmdpdHVkZSB2YWx1ZXMgYXJlIHRoZSBzYW1lLCBvdGhlcndpc2UgaXQKK3dvbnQgYmUgYWNjZXB0ZWQgYXMgYSBjbG9zZWQgcG9seWdvbi4gSW4gdGhlIGV4YW1wbGUgYWJvdmUsIG5vdGUgdGhhdCBmb3IgTW9udGVyZXkgQ291bnR5ICgiVVMtQ0EtMDYwNTMiKSB0aGUgc3RhcnRpbmcgbGF0aXR1ZGUgYW5kIGxvbmdpdHVkZSB2YWx1ZXMgIjM2LjkxODYgLTEyMS43MDE5IiBhcmUgdGhlIHNhbWUgYXMgdGhlIGVuZGluZyBvbmVzCisiMzYuOTE4NiAtMTIxLjcwMTkiLgorCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCisKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L2RvY3MvQW4gSW50cm9kdWN0aW9uIHRvIFNURU0gSUkgRGF0YSBDb252ZXJzaW9uIFV0aWxpdGllcyBmb3IgRXVyb3BlIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvZG9jcy9BbiBJbnRyb2R1Y3Rpb24gdG8gU1RFTSBJSSBEYXRhIENvbnZlcnNpb24gVXRpbGl0aWVzIGZvciBFdXJvcGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWY4MDEzZgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L2RvY3MvQW4gSW50cm9kdWN0aW9uIHRvIFNURU0gSUkgRGF0YSBDb252ZXJzaW9uIFV0aWxpdGllcyBmb3IgRXVyb3BlCkBAIC0wLDAgKzEsNDUgQEAKK0ZlYiAtIDA1IC0gMjAwNworCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCisqQW4gSW50cm9kdWN0aW9uIHRvIFNURU0gSUkgRGF0YSBDb252ZXJzaW9uIFV0aWxpdGllcyBmb3IgRXVyb3BlKgorCisKKwkgVGhlIHNldCBvZiBkYXRhIGdlbmVyYXRvcnMgd2VyZSBpbml0aWFsbHkgZGV2ZWxvcGVkIGZvciB0aGUgRGl2YSBmb3JtYXQuIEhvd2V2ZXIsIHRoZSBjb3VudHJpZXMgaW4gdGhlIEV1cm9wZWFuIGRhdGEgc2V0IGNvbWUgaW4gYSBkaWZmZXJlbnQgZm9ybWF0LgorQmVmb3JlIHdlIGNhbiBydW4gdGhlIGRhdGEgZ2VuZXJhdGlvbiB1dGlsaXRpZXMgdG8gZ2VuZXJhdGUgcHJvcGVydGllcyBmaWxlcyBhbmQgbWFwcyBvbiB0aGUgRXVyb3BlYW4gZGF0YSBzZXQsIHdlIG5lZWQgdG8gcnVuIGEgc2V0IG9mIHV0aWxpdGllcwordGhhdCB3aWxsIGNvbnZlcnQgdGhlIEV1cm9wZWFuIGRhdGEgaW50byB0aGUgRGl2YSBmb3JtYXQgdGhhdCB0aGUgZ2VuZXJhdG9ycyBleHBlY3QuIAorCitOT1RFOiBBbGwgb2YgdGhlIGNvbnZlcnNpb24gdXRpbGl0aWVzIGZvciBFdXJvcGUgYXJlIGZvdW5kIHVuZGVyIG9yZy5lY2xpcHNlLnN0ZW1cc3JjXGdlbmVyYXRvcnMuCisKKyoqT3ZlcnZpZXcgb2YgdGhlIGRhdGEgY29udmVyc2lvbiBwcm9jZXNzIGZyb20gdGhlIEV1cm9wZSBkYXRhIHNldCBmb3JtYXQgaW50byB0aGUgRGl2YSBzZXQgZm9ybWF0IDoqKgorICAKKyAgICAgIDEpIERhdGEgQ2xlYW5pbmcvR3JvdXBpbmcgOiBzdGFydCBieSBydW5uaW5nIEV1cm9wZURhdGFDbGVhbmVyLiBUaGlzIHByb2dyYW0gd2lsbAorICByZW1vdmUgYWxsIHVubmVjZXNhcnkgZGF0YSAoaS5lLiBjb2x1bW5zKSBpbiB0aGUgb3JpZ2luYWwgc291cmNlIGZpbGUuIEluCisgIGFkZGl0aW9uLCB0aGlzIHByb2dyYW0gd2lsbCBncm91cCB0aGUgZGF0YSBiYXNlZCBvbiBpdHMgSUQgKGkuZS4gTk8sSVQsRlIsVUssCisgIGV0YykuIFRoZSByZXN1bHQgd2lsbCBiZSBhIGZpbGUgbmFtZWQgRXVyb3BlU29ydGVkLnR4dCB3aXRoIGNsZWFuZWQgZGF0YS4KKyAgCisgIEluIG90aGVyIHdvcmRzIDogRXVyb3BlLnR4dCAoaW5wdXQpIC0tPiB8fEV1cm9wZURhdGFDbGVhbmVyfHwgLS0+IEV1cm9wZVNvcnRlZC50eHQgKG91dHB1dCkKKyAgCisgIE5PVEU6IEV1cm9wZVNvcnRlZC50eHQgd2lsbCBiZSB1c2VkIGFzIHRoZSBpbnB1dCBmb3IgdGhlIHJlbWFpbmluZyBwYXJ0IG9mCisgIHRoZSBwcm9jZXNzLgorICAKKyAgICAgIDIpIERhdGEgRm9ybWF0dGluZyA6IHJ1biBFdXJvcGVEYXRhRm9ybWF0dGVyIHRvIGJyZWFrIGRvd24gdGhlIGRhdGEgc291cmNlCisgIChFdXJvcGVTb3J0ZWQudHh0KSBpbnRvIG11bHRpcGxlIGRhdGEgZmlsZXMsIG9uZSBmb3IgZWFjaCBjb3VudHJ5IGFzCisgIGluZGljYXRlZCBieSB0aGUgSUQgKGkuZS4gTk8sSVQsRlIsVUssIGV0YykuIFRoZSByZXN1bHQgd2lsbCBiZSBtdWx0aXBsZSBkYXRhCisgIGZpbGVzIChpLmUuIGl0YWx5LnR4dCwgc3BhaW4udHh0LCBldGMpLiBFYWNoIGZpbGUgd2lsbCBiZSBmb3VuZCB1bmRlciBhCisgIGZvbGRlciB3aXRoIHNhbWUgbmFtZSBhcyB0aGUgY291bnRyeSAoaS5lLiBJVEFMWVxpdGFseS50eHQsIFNQQUlOXHNwYWluLnR4dCwKKyAgZXRjKS4KKyAgCisgICAgICAzKSBEYXRhIENvbnZlcnRlciA6IHJ1biBFdXJvcGVEYXRhQ29udmVydGVyIHRvIGNvbnZlcnQgaW50byBEaXZhIGZvcm1hdC4KKyAgCisgIAorICAgICAgNCkgQXJlYSBhbmQgUG9wdWxhdGlvbiBEYXRhIEV4dHJhY3Rpb24gOiBydW4gRXVyb3BlRGF0YUV4dHJhY3RvciB0byBleHRyYWN0CisgIGFsbCBhcmVhIGFuZCBwb3B1bGF0aW9uIGRhdGEgZm9yIGVhY2ggY291bnRyeS4gVGhlIG5ldyBhcmVhIGFuZCBwb3B1bGF0aW9uIGRhdGEgZmlsZXMgd2lsbCBiZSBmb3VuZCB1bmRlcgorb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L2RhdGFNaWdyYXRpb24vaW5wdXQvQXJlYVBvcHVsYXRpb25EYXRhLiBGb3IgZXZlcnkgY291bnRyeSwgc2F5IGZvciBTcGFpbiwgdGhlcmUgd2lsbAorYmUgY29ycmVzcG9uZGluZyBhcmVhIGFuZCBwb3B1bGF0aW9uIGRhdGEgZmlsZXMgOiBTUEFJTl9BUkVBLnR4dCBhbmQgU1BBSU5fUE9QVUxBVElPTi50eHQuCisgIAorICAKKyAgICAgIEFmdGVyIGFsbCBmb3VyIHN0ZXBzIGFyZSBkb25lIGFuZCB3ZSBoYXZlIGNvbnZlcnRlZCB0aGUgRXVyb3BlIGRhdGEgc2V0IGludG8gYSBEaXZhIGZvcm1hdCwgd2Ugbm93IGNhbiBydW4gdGhlCitzZXQgb2YgZGF0YSBnZW5lcmF0b3JzIHRvIGNyZWF0ZSB0aGUgcHJvcGVydGllcyBmaWxlcyBhbmQgbWFwcyBhcyBleHBsYWluZWQgaW4gIkFuIEludHJvZHVjdGlvbiB0byBTVEVNIElJIERhdGEgR2VuZXJhdGlvbiBVdGlsaXRpZXMgZm9yIERpdmEiLgorCisJIApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L2RvY3MvQW4gSW50cm9kdWN0aW9uIHRvIFNURU0gSUkgRGF0YSBHZW5lcmF0aW9uIFV0aWxpdGllcyBmb3IgRGl2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L2RvY3MvQW4gSW50cm9kdWN0aW9uIHRvIFNURU0gSUkgRGF0YSBHZW5lcmF0aW9uIFV0aWxpdGllcyBmb3IgRGl2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZTE0ZDE5Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvZG9jcy9BbiBJbnRyb2R1Y3Rpb24gdG8gU1RFTSBJSSBEYXRhIEdlbmVyYXRpb24gVXRpbGl0aWVzIGZvciBEaXZhCkBAIC0wLDAgKzEsNTAzIEBACisKK0phbiAtIDExIC0gMjAwNworCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCisqQW4gSW50cm9kdWN0aW9uIHRvIFNURU0gSUkgRGF0YSBHZW5lcmF0aW9uIFV0aWxpdGllcyBmb3IgRGl2YSoKKworCisKKyAgICAgRGF0YSBnZW5lcmF0aW9uIGZvciBTVEVNIElJIHdhcyBkb25lIHVzaW5nIGEgc2V0IG9mIGN1c3RvbSBzb2Z0d2FyZSB1dGlsaXRpZXMgYW5kIGRhdGEgZ2VuZXJhdG9ycyB3cml0dGVuIGluIEphdmEgZm9yIHRoZSBwdXJwb3NlLiBUaGV5IGNhbiBiZSBmb3VuZCAKK3VuZGVyIG9yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eVxzcmNcZ2VuZXJhdG9ycy4gVGhlc2UgZ2VuZXJhdG9ycyB3ZXJlIHVzZWQgdG8gY3JlYXRlIFNURU0ncyBwcm9wZXJ0aWVzIGZpbGVzIGFuZCBtYXBzIGZvciBhbGwgY291bnRyaWVzIGluIHRoZSBEaXZhIAorZGF0YSBzZXQgKGh0dHA6Ly93d3cuY2lwb3RhdG8ub3JnL0RJVkEvZGF0YS9EYXRhU2VydmVyLmh0bSkuIFRoZXJlIGFyZSBtdWx0aXBsZSBzdGVwcyBpbnZvbHZlZCBpbiB0aGUgcHJvY2VzcyBvZiBkYXRhIGdlbmVyYXRpb24uIEJlZm9yZSBydW5uaW5nIGEgZGF0YSAKK2dlbmVyYXRvciB0aGVyZSBhcmUgYSBmZXcgaW50ZXJtZWRpYXRlIHN0ZXBzIHRvIGJlIGRvbmUgYnkgY3VzdG9tIHV0aWxpdGllcyBmb3VuZCBpbiBvcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHlcc3JjXGdlbmVyYXRvcnMuIEZ1cnRoZXJtb3JlLCB0aGUgaW50ZXJtZWRpYXRlIAorc3RlcHMgdmFyeSBhY2NvcmRpbmcgdG8gdGhlIHBhcnRpY3VsYXIgZG9jdW1lbnQgKGkuZS4gYXJlYSBwcm9wZXJpdHkgZmlsZSwgbm9kZXMgcHJvcGVydHkgZmlsZSwgb3IgbWFwKSAgd2Ugd2FudCB0byBnZW5lcmF0ZS4gU28sIHdlIGNhbiB0aGluayBvZiBkYXRhIAorZ2VuZXJhdGlvbiBmb3IgU1RFTSBJSSAgYXMgY29uc2lzdGluZyBvZiBhIHNldCBvZiBkYXRhIGdlbmVyYXRpb24gcHJvY2Vzc2VzIHdoZXJlIGVhY2ggcHJvY2VzcyBjb25zaXN0cyBvZiBhIHNldCBvZiBzdGVwcy4gT3ZlcmFsbCwgd2UgY2FuIGlkZW50aWZ5IHRoZQorZm9sbG93aW5nIGZpdmUgZGF0YSBnZW5lcmF0aW9uIHByb2Nlc3NlcyA6CisKKworICAgICAgLS1HZW5lcmF0aW9uIG9mIEFyZWEgUHJvcGVydGllcyBGaWxlcyAKKworICAgICAgLS1HZW5lcmF0aW9uIG9mIFBvcHVsYXRpb24gUHJvcGVydGllcyBGaWxlcyAKKworICAgICAgLS1HZW5lcmF0aW9uIG9mIE5vZGVzIFByb3BlcnRpZXMgRmlsZXMgCisKKyAgICAgIC0tR2VuZXJhdGlvbiBvZiBOYW1lcyBQcm9wZXJ0aWVzIEZpbGVzIAorCisgICAgICAtLU1hcCBHZW5lcmF0aW9uCisKKworICAgICBFYWNoIHByb2Nlc3Mgd2lsbCBiZSBleHBsYWluZWQgaW4gZGV0YWlsLCBidXQgYmVmb3JlLCB3ZSBoYXZlIHRvIG1lbnRpb24gb3VyIGRhdGEgc291cmNlcyBhbmQgdGhlIG5hdHVyZSBvZiB0aGUgZGF0YSB3ZSBhcmUgZGVhbGluZyB3aXRoLgorCisKKyoqRGF0YSBTb3VyY2VzIGZvciBTVEVNIElJKioKKworICAgICAgT3VyIG1haW4gc291cmNlIG9mIGRhdGEgd2FzIERJVkEtR0lTIChodHRwOi8vd3d3LmNpcG90YXRvLm9yZy9ESVZBL2RhdGEvRGF0YVNlcnZlci5odG0pLCB3aGljaCBpcyBhIHJlcG9zaXRvcnkgZm9yIG1hcHMgYW5kIEdJUyBkYXRhLiBBbGwgRElWQS1HSVMKK2RhdGEgaXMgZnJlZSBhbmQgaW4gdGhlIHB1YmxpYyBkb21haW4uIFRoZSBkYXRhIGZpbGVzIGFyZSBpbiBzaGFwZWZpbGUgZm9ybWF0IChodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL1NoYXBlZmlsZSkuICBBY2NvcmRpbmcgdG8gV2lraXBlZGlhLCAiVGhlIEVTUkkgCitTaGFwZWZpbGUgaXMgYSBwb3B1bGFyIGdlb3NwYXRpYWwgdmVjdG9yIGRhdGEgZm9ybWF0IGZvciBnZW9ncmFwaGljIGluZm9ybWF0aW9uIHN5c3RlbXMgc29mdHdhcmUuIEl0IGlzIGRldmVsb3BlZCBhbmQgcmVndWxhdGVkIGJ5IEVTUkkgYXMgYSAobW9zdGx5KSBvcGVuIAorc3BlY2lmaWNhdGlvbiBmb3IgZGF0YSBpbnRlcm9wZXJhYmlsaXR5IGFtb25nIEVTUkkgYW5kIG90aGVyIHNvZnR3YXJlIHByb2R1Y3RzLiBBICJzaGFwZWZpbGUiIGNvbW1vbmx5IHJlZmVycyB0byBhIGNvbGxlY3Rpb24gb2YgZmlsZXMgd2l0aCAiLnNocCIsICIuc2h4IiwgCisiLmRiZiIgIiBBbGwgc2hhcGVmaWxlcyBkb3dubG9hZGVkIGZyb20gRElWQS1HSVMgYXJlIHppcCBjb21wcmVzc2VkLiBCZWZvcmUgZ2V0dGluZyB0byBkYXRhIGdlbmVyYXRpb24sIHRoZXJlIGFyZSB0d28gc3RlcHMgdG8gYmUgZG9uZSA6IAorCisKKyoqKlVuY29tcHJlc3NpbmcqKioKKworICAgICBUaGUgZmlyc3Qgc3RlcCBpcyB0byB1bnppcCBhbGwgdGhlIGRvd25sb2FkZWQgRElWQS1HSVMgc2hhcGVmaWxlcyBieSB1c2luZyBhIGNvbXByZXNzaW5nIHNvZnR3YXJlIGxpa2UgV2luemlwIG9yIDctemlwLgorCisqKipFeHRyYWN0aW9uKioqKgorCisgICAgIFRoZSBzZWNvbmQgc3RlcCBpcyB0byBleHRyYWN0IGRhdGEgZm9yIGV2ZXJ5IHBvc3NpYmxlIHNoYXBlZmlsZSBpbnRvIGEgcGxhaW4gdGV4dCBkb2N1bWVudC4gVG8gZG8gdGhpcywgd2UgcnVuIG9yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eVxzcmNcZ2VuZXJhdG9yc1xXb3JsZFJlYWRlci5qYXZhLiAKK1dvcmxkUmVhZGVyIHRha2VzIGFzIGFuIGFyZ3VtZW50IGEgbGlzdCB3aWxsIGFsbCB0aGUgZmlsZXMgd2Ugd2FudCB0byBleHRyYWN0IGRhdGEgZnJvbS4gU3VjaCBhIGxpc3QgbG9va3MgYXMgZm9sbG93cyA6CisKKworLy9UYWtlbiBmcm9tIG9yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eVxkYXRhTWlncmF0aW9uXGlucHV0XHdvcmxkXFdvcmxkLnR4dAorLi4uCisjVEhJUyBGSUxFIElTIFRIRSBJTlBVVCBUTyBXb3JsZFJlYWRlci5qYXZhCisjSVQgQ09OU0lTVFMgT0YgUEFJUlMgT0YgVEhFIEZPUk0gOiBbTE9DQVRJT047RklMRU5BTUVdCitDOlxkaXZhXEFmcmljYVxBbGdlcmlhO0M6XGRpdmFcQWZyaWNhXEFsZ2VyaWFcQWxnZXJpYS50eHQKK0M6XGRpdmFcQWZyaWNhXEFuZ29sYTtDOlxkaXZhXEFmcmljYVxBbmdvbGFcQW5nb2xhLnR4dAorQzpcZGl2YVxBZnJpY2FcQmVuaW47QzpcZGl2YVxBZnJpY2FcQmVuaW5cQmVuaW4udHh0CitDOlxkaXZhXEFmcmljYVxCdXJraW5hRmFzbztDOlxkaXZhXEFmcmljYVxCdXJraW5hRmFzb1xCdXJraW5hRmFzby50eHQJCitDOlxkaXZhXEFmcmljYVxCdXJ1bmRpO0M6XGRpdmFcQWZyaWNhXEJ1cnVuZGlcQnVydW5kaS50eHQJCisuLi4KKworICAgICBUaGUgcmVzdWx0IGlzIGEgc2V0IG9mIHBsYWluLXRleHQgZmlsZXMgY29udGFpbmluZyBHSVMgZGF0YS4gV2UgY2FsbCBpdCBhIERpdmEgZmlsZS4gTmV4dCwgd2UgZXhwbGFpbiBob3cgYSBEaXZhIGZpbGUgbG9va3MgbGlrZS4KKworKioqT3ZlcnZpZXcgb2YgRGl2YSBGaWxlcyoqKgorCitBIGRpdmEgZmlsZSBpcyBhIHNpbXBsZS10ZXh0IGZpbGUgdGhhdCBjb250YWlucyBHSVMgZGF0YSBhbmQgdGhhdCBsb29rcyBhcyBmb2xsb3dzIDoKKworLy8gRXh0cmFjdGVkIGZyb20gQXJnZW50aW5hLnR4dAorCisvLyBTYW1wbGUgbGV2ZWwgMCBkYXRhCitBUkcsQVJHRU5USU5BLC0wLjU1NTk3NjcsLTEuMDE0Njg4MSwtMC41NTU5ODI1LC0xLjAxNDcxMTMsIC4uLgorCisvLyBTYW1wbGUgbGV2ZWwgMSBkYXRhCitBUkcsQVJHRU5USU5BLEJVRU5PUyBBSVJFUywtMC43MDIwMDU3NCwtMS4wODQwMzcyLCAuLi4KKworLy8gU2FtcGxlIGxldmVsIDIgZGF0YQorQVJHLEFSR0VOVElOQSxKVUpVWSxTYW50YSBDYXRhbGluYSwtMC4zODAyNDg1OCwtMS4xNTYxMTg2LCAuLi4KKworICAgIEluIG90aGVyIHdvcmRzLCBpdCBpcyBqdXN0IGEgc2V0IG9mIHJvd3Mgd2l0aCBsb2NhdGlvbiBkYXRhIChpLmUuIEFSRyxBUkdFTlRJTkEsSlVKVVksU2FudGEgQ2F0YWxpbmEpIGFuZCBmb2xsb3dlZCBieSBwb2x5Z29uIGRhdGEgY29ycmVzcG9uZGluZwordG8gYSBnZW9ncmFwaGljYWwgbG9jYXRpb24gKGkuZS4gLTAuMzgwMjQ4NTgsLTEuMTU2MTE4NiwtMC4zODAyMzY5NSwtMS4xNTYxMTQ4LC0wLjM4MDI0MDAyLC0xLjE1NjA5MjIsLTAuMzgwMjQ2ODUsLTEuMTU2MDQxNCwgLi4uKS4gT25lIHJlc3RyaWN0aW9uIGFib3V0Cit0aGUgRGl2YSBmaWxlcyBpcyB0aGF0IGRhdGEgaGFzIHRvIGFwcGVhciBpbiB0aGUgZmlsZSBiYXNlZCBvbiBhZG1pbmlzdHJhdGlvbiBsZXZlbC4gSW4gb3RoZXIgd29yZHMsIHdlIHdhbnQgdG8gbWFrZSBzdXJlIHRoYXQgYWxsIGxldmVsIDAgZGF0YSBjb21lcyBiZWZvcmUKK3RoZSBsZXZlbCAxIGRhdGEgYW5kIHRoYXQgYWxsIGxldmVsIDIgZGF0YSBjb21lcyBhZnRlciBsZXZlbCAwIGFuZCBsZXZlbCAxIGRhdGEgcmVzcGVjdGl2ZWx5LiBUaGUgZGF0YSBnZW5lcmF0aW9uIHV0aWxpdGllcyBhcmUgc2Vuc2l0aXZlIHRvIHRoZSBvcmRlcmluZyBvZgorZGF0YSBiYXNlZCBvbiB0aGUgYWRtaW5pc3RyYXRpb24gbGV2ZWwuIEEgZGF0YSBnZW5lcmF0b3IgZ29lcyB0aHJvdWdoIGludGVybmFsIHRyYW5zaXRpb25zIGJhc2VkIG9uIHRoZSBhZG1pbmlzdHJhdGlvbiBsZXZlbCBvZiB0aGUgZGF0YSBpdCBpcyBjdXJyZW50bHkgcHJvY2Vzc2luZy4KK0ludGVybmFsIHRyYW5zaXRpb25zIG9mIHRoZSBkYXRhIGdlbmVyYXRvciBtdXN0IGZvbGxvdyB0aGUgcGF0dGVybiA6IExldmVsXzAgLT4gTGV2ZWxfMSAtPiBMZXZlbF8yLiBPdGhlcndpc2UsIGlmIGRhdGEgZG9lcyBub3QgY29uZm9ybSB0byB0aGUgTGV2ZWxfMCAtPiBMZXZlbF8xIC0+IExldmVsXzIgcnVsZSwgCit1bmV4cGVjdGVkIGJlaGF2aW9yIG1pZ2h0IGFyaXNlIGZyb20gdGhlIGRhdGEgZ2VuZXJhdGlvbiB1dGlsaXRpZXMuCisKKworKipHcm91cGluZyoqCisKKyAgICAgIEFmdGVyIHdlIHVuY29tcHJlc3MgYW5kIGV4dHJhY3Qgc2hhcGVmaWxlcyBpbnRvIHBsYWluIHRleHQgZG9jdW1lbnRzLCB3ZSBub3RpY2UgdGhhdCBmb3Igc29tZSBmaWxlcyB0aGUgZGF0YSBmb3IgYSBzaW5nbGUgYWRtaW5pc3RyYXRpb24gaXMgc2NhdHRlcmVkIGFsbCBvdmVyCit0aGUgZGF0YSBmaWxlLiBBcyBhbiBleGFtcGxlLCBmb3IgV2lzY29uc2luLCB3ZSBkb250IGZpbmQgYWxsIHRoZSByb3dzIG9mIGRhdGEgZm9yIGl0IGNvbnNlY3V0aXZlbHksIGJ1dCBzY2F0dGVyZWQgYWxsIG92ZXIsIGFzIGZvbGxvd3MgOgorCisgIFVTQSxVbml0ZWQgU3RhdGVzLCBXaXNjb25zaW4sIDAuNzkxNzkzNiwtMS41MTc1MjAzIC4uLiAKKyAgVVNBLFVuaXRlZCBTdGF0ZXMsV2lzY29uc2luLDAuODE5NzQ1MjQsLTEuNTgwMDY5MyAuLi4KKyAgVVNBLFVuaXRlZCBTdGF0ZXMsIE5ldyBIYW1wc2hpcmUsMC43OTA3MjY1NCwtMS4yNDA2NTU3ICAuLi4KKyAgVVNBLFVuaXRlZCBTdGF0ZXMsIE1pY2hpZ2FuLDAuNzg4MTYzMSwtMS41MDE1NjIxIC4uLgorICAuLi4KKyAgVVNBLFVuaXRlZCBTdGF0ZXMsIFdpc2NvbnNpbiwgLi4uCisgICAgLi4uIAkJCisgIFVTQSxVbml0ZWQgU3RhdGVzLCBXaXNjb25zaW4sIC4uLgorICAgIC4uLgorICAgICAgIGFuZCBzbyBvbi4uLgorCisgICAgV2Ugd2FudCB0byBncm91cCBhbGwgZGF0YSB0aGF0IGJlbG9uZ3MgdG8gV2lzY29uc2luIGNvbnNlY3V0aXZlbHkuIEJ5IGRvaW5nIHRoaXMsIHdlIHdpbGwgcHJvZHVjZSBhIHBvbHlnb24gd2l0aCB1bmlxdWUgSUQgZm9yIFdpc2NvbnNpbiBpbnN0ZWFkIG9mIG11bHRpcGxlIAorcG9seWdvbnMgd2l0aCBzYW1lIElELiBCeSBkZWZpbml0aW9uLCBwb2x5Z29uIElEcyBzaG91bGQgYmUgdW5pcXVlLiBXZSBhY2hpZXZldGhlIGdyb3VwaW5nIGJ5IHJ1bm5pbmcgb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5XHNyY1xnZW5lcmF0b3JzXEdyb3VwR2VuZXJhdG9yLmphdmEuIAorVGhlIHJlc3VsdGluZyAiZ3JvdXBlZCIgZGF0YSBmaWxlIHdpbGwgbG9vayBhcyBmb2xsb3dzIDoKKworVVNBLFVuaXRlZCBTdGF0ZXMsS2VudHVja3ksMC42MzcwMDQ5LC0xLjU2MTgwOTggLi4uCitVU0EsVW5pdGVkIFN0YXRlcyxXaXNjb25zaW4sMC44MjE2NTMzLC0xLjU3Nzc4NjIgLi4uCitVU0EsVW5pdGVkIFN0YXRlcyxXaXNjb25zaW4sMC44MTk3NDUyNCwtMS41ODAwNjkzIC4uLgorVVNBLFVuaXRlZCBTdGF0ZXMsV2lzY29uc2luLDAuODEyNzMxNiwtMS41NzgwOTQyIC4uLgorVVNBLFVuaXRlZCBTdGF0ZXMsV2lzY29uc2luLDAuODE3NTg2MywtMS41ODA4MTMgLi4uCitVU0EsVW5pdGVkIFN0YXRlcyxXaXNjb25zaW4sMC43OTE3OTM2LC0xLjUxNzUyMDMgLi4uCitVU0EsVW5pdGVkIFN0YXRlcyxXaXNjb25zaW4sMC43ODY0NjQ4LC0xLjUyNzE2NDkgLi4uCitVU0EsVW5pdGVkIFN0YXRlcyxNaW5uZXNvdGEsMC44NTg1ODE3LC0xLjY2MDczODcgLi4uCisKKyAgICAgUnVubmluZyBHcm91cEdlbmVyYXRvciB3aWxsIHByb2R1Y2UgYXMgb3V0cHV0IGZpbGVzIHdpdGggdGhlICJfR1JPVVBFRCIgc3VmZml4IGF0dGFjaGVkLiBTbyBmb3IgZXhhbXBsZSwgaWYgdGhlIG9yaWdpbmFsIGRhdGEgZmlsZSBmb3IgdGhlIFVTQSBpcyAiVVNBLnR4dCIsIAordGhlbiB0aGUgY29ycmVzcG9uZGluZyBncm91cGVkIGZpbGUgd2lsbCBoYXZlIG5hbWUgIlVTQV9HUk9VUEVELnR4dCIKKworTk9URSA6IEZyb20gdGhpcyBpbnRyb2R1Y3Rpb24gd2UgYXNzdW1lIHRoYXQgYWxsIHRoZSBnZW5lcmF0b3JzIGFuZCB1dGlsaXRpZXMgYXJlIGxvY2F0ZWQgdW5kZXIgIG9yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eVxzcmNcZ2VuZXJhdG9yc1wgZXhjZXB0IHdoZXJlIGV4cGxpY2l0bHkgCittZW50aW9uZWQgb3RoZXJ3aXNlLgorCisqKkxleGljb2dyYXBoaWMgU29ydGluZyoqCisKKyAgICBBZnRlciB3ZSBoYXZlIHJ1biBHcm91cEdlbmVyYXRvciwgd2Ugd2FudCB0byBydW4gYSBwYWlyIG9mIHV0aWxpdGllcyB0aGF0IHdpbGwgZG8gYSBsZXhpY29ncmFwaGljIHNvcnRpbmcgb2YgdGhlICBkYXRhIGZpbGVzIGF0IGFkbWluaXN0cmF0aW9uIGxldmVscyAxIGFuZCAyLiAKKyAgICBUaGVzZSB1dGlsaXRpZXMgYXJlIDogQWRtaW4xTGV4U29ydGVyIGFuZCBBZG1pbjJMZXhTb3J0ZXIuIE5leHQsIHdlIGV4cGxhaW4gYm90aCB1dGlsaXRpZXMgaW4gZGV0YWlsLiBUaGUgZmlsZXMgcHJvZHVjZWQgYnkgdGhlc2UgdXRpbGl0aWVzIHdpbGwgYmUgbG9jYXRlZCB1bmRlciAKKyAgICBvcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHlcZGF0YU1pZ3JhdGlvblxpbnB1dFxzb3J0XDxUaHJlZSBsZXR0ZXIgaWRlbnRpZmllciBmb3IgY291bnRyeT4KKworKioqQWRtaW4xTGV4U29ydGVyOiBMZXhpY29ncmFwaGljIFNvcnRpbmcgb2YgTGV2ZWwgMSBBZG1pbmlzdHJhdGlvbnMqKioKKyAKKyAgICAgVGhlIGdvYWwgb2YgdGhpcyBwcm9ncmFtIGlzIHRvIGdvIHRocm91Z2ggdGhlIHNvdXJjZSBkYXRhIGZpbGUgKGkuZS4gVVNBLnR4dCBvciBVU0FfR1JPVVBFRC50eHQpLCBkbyBhIGxleGljb2dyYXBoaWMgc29ydGluZywgYW5kIHByb2R1Y2UgYXMgYSByZXN1bHQgYSBmaWxlIHdoZXJlIAorZWFjaCByb3cgY29ycmVzcG9uZHMgdG8gYSBsZXZlbCAxIGFkbWluaXN0cmF0aW9uIGJ5IGxleGljb2dyYXBoaWMgb3JkZXJpbmcuIEFzIGFuIGV4YW1wbGUsIGZvciB0aGUgY2FzZSBvZiBBcmdlbnRpbmEsIHRoZSByZXN1bHQgd291bGQgbG9va3MgbGlrZSB0aGlzIDoKKworMTpBUi1COkFSOkJVRU5PUyBBSVJFUworMjpBUi1DOkFSOkJVRU5PUyBBSVJFUyBELkYuCiszOkFSLUs6QVI6Q0FUQU1BUkNBCis0OkFSLUg6QVI6Q0hBQ08KKzU6QVItVTpBUjpDSFVCVVQKKzY6QVItWDpBUjpDT1JET0JBCis3OkFSLVc6QVI6Q09SUklFTlRFUworODpBUi1FOkFSOkVOVFJFIFJJT1MKKzk6QVItUDpBUjpGT1JNT1NBCisxMDpBUi1ZOkFSOkpVSlVZCisxMTpBUi1MOkFSOkxBIFBBTVBBCisxMjpBUi1GOkFSOkxBIFJJT0pBCisxMzpBUi1NOkFSOk1FTkRPWkEKKzE0OkFSLU46QVI6TUlTSU9ORVMKKzE1OkFSLVE6QVI6TkVVUVVFTgorMTY6QVItUjpBUjpSSU8gTkVHUk8KKzE3OkFSLUE6QVI6U0FMVEEKKzE4OkFSLUo6QVI6U0FOIEpVQU4KKzE5OkFSLUQ6QVI6U0FOIExVSVMKKzIwOkFSLVo6QVI6U0FOVEEgQ1JVWgorMjE6QVItUzpBUjpTQU5UQSBGRQorMjI6QVItRzpBUjpTQU5USUFHTyBERUwgRVNURVJPCisyMzpBUi1WOkFSOlRJRVJSQSBERUwgRlVFR08KKzI0OkFSLVQ6QVI6VFVDVU1BTgorCisgICBUaGUgbmFtZSBvZiB0aGUgcmVzdWx0aW5nIGxleGljb2dyYXBoaWNhbGx5LXNvcnRlZCBmaWxlIGZvciBBcmdlbnRpbmEgaXMgQVJHX0FETUlOMV9MRVgudHh0IGFuZCBmb3VuZCB1bmRlciBvcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHlcZGF0YU1pZ3JhdGlvblxpbnB1dFxzb3J0XEFSRyAKKworKioqQWRtaW4yTGV4U29ydGVyOiBMZXhpY29ncmFwaGljIFNvcnRpbmcgb2YgTGV2ZWwgMiBBZG1pbmlzdHJhdGlvbnMqKioKKworICAgICAgU2ltaWxhciB0byBBZG1pbjJMZXhTb3J0ZXIsIGV4Y2VwdCB0aGF0IG5vdyB3ZSBzb3J0IGxleGljb2dyYXBoaWNhbGx5IGJhc2VkIG9uIGEgdGhlIGNvbmNhdGVuYXRpb24gb2YgdGhlIGxldmVsIDEgYW5kIGxldmVsIDIgYWRtaW5pc3RyYXRpb25zLiBUaGlzIGNvbmNhdGVuYXRpb24gaGFzIAordGhlIGVmZmVjdCBvZiBzb3J0aW5nIGFsbCBsZXZlbCAyIGFkbWluaXN0cmF0aW9ucyB3aXRoaW4gaXRzIGxldmVsIDEgY29udGFpbmVyLiBBcyBhbiBleGFtcGxlLCB0aGUgcmVzdWx0IG9mIHNvcnRpbmcgYWxsIGxldmVsIDIgYWRtaW5pc3RyYXRpb25zIHRoYXQgYmVsb25nIHRvIHRoZSBwcm92aW5jZSAKKyhsZXZlbCAxIGFkbWluaXN0cmF0aW9uKSBvZiBMYSBSaW9qYSBpbiBBcmdlbnRpbmEsIHdlIGdldCA6CisKKy8vIEV4dHJhY3RlZCBmcm9tIG9yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eVxkYXRhTWlncmF0aW9uXGlucHV0XHNvcnRcQVJHX0FETUlOMl9MRVgudHh0CisuLi4KKzE6QVI6QVJHOkFSR0VOVElOQTpMQSBSSU9KQTpBcmF1Y28KKzI6QVI6QVJHOkFSR0VOVElOQTpMQSBSSU9KQTpDYXBpdGFsCiszOkFSOkFSRzpBUkdFTlRJTkE6TEEgUklPSkE6Q2FzdHJvIEJhcnJvcworNDpBUjpBUkc6QVJHRU5USU5BOkxBIFJJT0pBOkNoaWxlY2l0bworNTpBUjpBUkc6QVJHRU5USU5BOkxBIFJJT0pBOkZhbWF0aW5hCis2OkFSOkFSRzpBUkdFTlRJTkE6TEEgUklPSkE6R2VuZXJhbCBBbmdlbCBWLiBQZXNhbG96YQorNzpBUjpBUkc6QVJHRU5USU5BOkxBIFJJT0pBOkdlbmVyYWwgQmVsZ3Jhbm8KKzg6QVI6QVJHOkFSR0VOVElOQTpMQSBSSU9KQTpHZW5lcmFsIEp1YW4gRi4gUXVpcm9nYQorOTpBUjpBUkc6QVJHRU5USU5BOkxBIFJJT0pBOkdlbmVyYWwgTGFtYWRyaWQKKzEwOkFSOkFSRzpBUkdFTlRJTkE6TEEgUklPSkE6R2VuZXJhbCBMYXZhbGxlCisxMTpBUjpBUkc6QVJHRU5USU5BOkxBIFJJT0pBOkdlbmVyYWwgT2NhbXBvCisxMjpBUjpBUkc6QVJHRU5USU5BOkxBIFJJT0pBOkdlbmVyYWwgU2FuIE1hcnRpbgorMTM6QVI6QVJHOkFSR0VOVElOQTpMQSBSSU9KQTpHZW5lcmFsIFNhcm1pZW50bworMTQ6QVI6QVJHOkFSR0VOVElOQTpMQSBSSU9KQTpHb2Jlcm5hZG9yIEdvcmRpbGxvCisxNTpBUjpBUkc6QVJHRU5USU5BOkxBIFJJT0pBOkluZGVwZW5kZW5jaWEKKzE2OkFSOkFSRzpBUkdFTlRJTkE6TEEgUklPSkE6Um9zYXJpbyBWZXJhIFBlbmFsb3phCisxNzpBUjpBUkc6QVJHRU5USU5BOkxBIFJJT0pBOlNhbiBCbGFzIGRlIGxvcyBTYXVjZXMKKzE4OkFSOkFSRzpBUkdFTlRJTkE6TEEgUklPSkE6U2FuYWdhc3RhCisuLi4KKyAgICAgIAorU2ltaWxhcmx5LCB0aGUgcHJvdmluY2Ugb2YgQ29yZG9iYSBpbiBBcmdlbnRpbmEsIHRoZSBzb3J0aW5nIHByb2R1Y2VzIDsKKworLy8gRXh0cmFjdGVkIGZyb20gb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5XGRhdGFNaWdyYXRpb25caW5wdXRcc29ydFxBUkdfQURNSU4yX0xFWC50eHQKKy4uLgorMTpBUjpBUkc6QVJHRU5USU5BOk1FTkRPWkE6Q2FwaXRhbAorMjpBUjpBUkc6QVJHRU5USU5BOk1FTkRPWkE6R2VuZXJhbCBBbHZlYXIKKzM6QVI6QVJHOkFSR0VOVElOQTpNRU5ET1pBOkdvZG95IENydXoKKzQ6QVI6QVJHOkFSR0VOVElOQTpNRU5ET1pBOkd1YXltYWxsZW4KKzU6QVI6QVJHOkFSR0VOVElOQTpNRU5ET1pBOkp1bmluCis2OkFSOkFSRzpBUkdFTlRJTkE6TUVORE9aQTpMYSBQYXoKKzc6QVI6QVJHOkFSR0VOVElOQTpNRU5ET1pBOkxhcyBIZXJhcworODpBUjpBUkc6QVJHRU5USU5BOk1FTkRPWkE6TGF2YWxsZQorOTpBUjpBUkc6QVJHRU5USU5BOk1FTkRPWkE6THVqYW4KKzEwOkFSOkFSRzpBUkdFTlRJTkE6TUVORE9aQTpNYWlwdQorMTE6QVI6QVJHOkFSR0VOVElOQTpNRU5ET1pBOk1hbGFyZ2UKKzEyOkFSOkFSRzpBUkdFTlRJTkE6TUVORE9aQTpSaXZhZGF2aWEKKzEzOkFSOkFSRzpBUkdFTlRJTkE6TUVORE9aQTpTYW4gQ2FybG9zCisxNDpBUjpBUkc6QVJHRU5USU5BOk1FTkRPWkE6U2FuIE1hcnRpbgorMTU6QVI6QVJHOkFSR0VOVElOQTpNRU5ET1pBOlNhbiBSYWZhZWwKKzE2OkFSOkFSRzpBUkdFTlRJTkE6TUVORE9aQTpTYXRhIFJvc2EKKzE3OkFSOkFSRzpBUkdFTlRJTkE6TUVORE9aQTpUdW51eWFuCisxODpBUjpBUkc6QVJHRU5USU5BOk1FTkRPWkE6VHVwdW5nYXRvCisuLi4gICAgICAKKworKk90aGVyIFNvdXJjZXMgb2YgRGF0YSBVc2VkIGZvciBEYXRhIEdlbmVyYXRpb24qCisgICAgICAKKyoqQXJlYSBhbmQgUG9wdWxhdGlvbiBEYXRhIDogR2VvSGl2ZSBhbmQgQ2l0eVBvcHVsYXRpb24qKgorCisgICBNb3N0IG9mIHRoZSBhcmVhIGFuZCBwb3B1bGF0aW9uIGRhdGEgd2UgdXNlIHdhcyBkb3dubG9hZGVkIGZyb20gR2VvSGl2ZSAoaHR0cDovL3d3dy5nZW9oaXZlLmNvbS9kZWZhdWx0MS5hc3B4KS4gR2VvSGl2ZSAKK2lzIGEgc2l0ZSB3aXRoIGdlb3BvbGl0aWNhbCBkYXRhIGFuZCBzdGF0aXN0aWNzIG9uIHRoZSBodW1hbiBwb3B1bGF0aW9uLiBIb3dldmVyLCB3ZSBhbHNvIGZvdW5kIGRhdGEgYXQgQ2l0eSBQb3B1bGF0aW9uIChodHRwOi8vd3d3LmNpdHlwb3B1bGF0aW9uLmRlLykuCitDaXR5IFBvcHVsYXRpb24ncyBzaXRlIHByb3ZpZGVzIGdsb2JhbCBwb3B1bGF0aW9uIHN0YXRpc3RpY3MuCisKKworKipJU08gMzE2NiBEYXRhKioKKworICAgVGhlIG1haW4gc291cmNlIG9mIElTTyAzMTY2IGRhdGEgaXMgYW4gb2ZmaWNpYWwgSVNPIDMxNjYgZGF0YWJhc2UgcHVyY2hhc2VkIGZyb20gSVNPIChJbnRlcm5hdGlvbmFsIE9yZ2FuaXphdGlvbgorZm9yIFN0YW5kYXJkaXphdGlvbikuIFRoZSBkYXRhYmFzZSBjb250YWlucyBkYXRhIGZvciBib3RoIElTTyAzMTY2LTEgYW5kIElTTyAzMTY2LTIuCisKKyoqTGV4aWNvZ3JhcGhpY2FsbHkgU29ydGVkIERhdGEqKgorCisgICBUaGlzIGlzIGEgc2V0IG9mIGRhdGEgZmlsZXMgZ2VuZXJhdGVkIGJ5IHJ1bm5pbmcgQWRtaW4xTGV4U29ydGVyIGFuZCBBZG1pbjJMZXhTb3J0ZXIuIFRoaXMgZGF0YSB3aWxsIGJlIHVzZWZ1bCB3aGVuIGNyZWF0aW5nIAoraWRlbnRpZmllcnMgZm9yIGVhY2ggbG9jYXRpb24gZHVyaW5nIHRoZSBkYXRhIGdlbmVyYXRpb24gcHJvY2Vzcy4KKworKipVUkxzKioKKworICAgVGhpcyBpcyB0aGUgc2V0IG9mIGRhdGEgZmlsZXMgY29udGFpbmluZyBVUkxzIGZvciBldmVyeSBkYXRhIHdlIGZvdW5kIG9ubGluZS4gV2Uga2VwdCB0cmFjayBvZiBhbGwgdGhlIHNvdXJjZXMgb2Ygb3VyIGRhdGEgYW5kIGFsbCBvZiB0aGVtCithcmUgYWNjb3VudGVkIGZvci4gRm9yIGVhY2ggY291bnRyeSwgdGhlcmUgaXMgYSBjb3JyZXNwb25kaW5nIFVSTCBmaWxlIGZvdW5kIHVuZGVyIG9yZy5lY2xpcHNlLnN0ZW0vZGF0YU1pZ3JhdGlvbi9pbnB1dC91cmxzLiBBIFVSTCBmaWxlIGNvbnNpc3RzIAorb2Ygcm93cyBvZiB0aGUgZm9ybSA6IEtFWVdPUkQ6VVJMIEZvciBleGFtcGxlLCBmb3IgdGhlIGNvdW50cnkgb2YgSXJhaywgaXRzIGNvcnJlc3BvbmRpbmcgVVJMIGZpbGUgbG9va3MgbGlrZSA6CisKKy8vIEV4dHJhY3RlZCBmcm9tIG9yZy5lY2xpcHNlLnN0ZW0vZGF0YU1pZ3JhdGlvbi9pbnB1dC91cmxzCitHRU9ISVZFKmh0dHA6Ly93d3cueGlzdC5vcmcvY250cnkvaXJhcS5hc3B4CitXSUtJKmh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvSXJhaworQ0lUWVBPUCpodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0lyYWsKK0RJVkEqaHR0cDovL3d3dy5jaXBvdGF0by5vcmcvRElWQS9kYXRhL0RhdGFTZXJ2ZXIuYXNwP0FSRUE9SVJRJlRIRU1FPV9hZG0KK0NJQSpodHRwczovL3d3dy5jaWEuZ292L2NpYS9wdWJsaWNhdGlvbnMvZmFjdGJvb2svZ2Vvcy9pei5odG1sCisgICAgICAKKyAgICAgIAorKkRhdGEgR2VuZXJhdG9ycyoKKworKipJbnRyb2R1Y3Rpb24qKgorCisgICBBIGRhdGEgZ2VuZXJhdG9yIGlzIGEgc2ltcGxlIEphdmEgcHJvZ3JhbSB0aGF0IHRha2VzIGFzIGlucHV0IGEgZmlsZSBvciBhIHNldCBvZiBmaWxlcyBmcm9tIHRoZSBEaXZhIHNldCBhbmQgcHJvZHVjZXMgYXMgb3V0cHV0IGEgcHJvcGVydHkgZmlsZSBmb3IgU1RFTS4KK0FzIGl0IHByb2Nlc3NlcyBkYXRhLCBhIGdlbmVyYXRvciBnb2VzIHRocm91Z2ggdHJhbnNpdGlvbnMgYWNjb3JkaW5nIHRvIHRoZSBhZG1pbmlzdHJhdGl2ZSBsZXZlbCBvZiB0aGUgZGF0YSB0aGF0IGl0IGlzIGN1cnJlbnRseSBwcm9jZXNzaW5nLiBJdCBpcyBleHBlY3RlZAordGhhdCB0aGUgbGV2ZWwgb2YgZGF0YSB3aWxsIGZvbGxvdyB0aGUgcGF0dGVybiBvZiB0cmFuc2l0aW9ucyA6IExldmVsXzAgLT4gTGV2ZWxfMSAtPiBMZXZlbF8yLiBXZSBub3cgZXhwbGFpbiB0aGUgZnVuY3Rpb24gb2YgZWFjaCBkYXRhIGdlbmVyYXRvci4KKyAKKyoqR2VuZXJhdGlvbiBvZiBOYW1lcyBQcm9wZXJ0aWVzIEZpbGVzKioKKyAgIAorICAgICAgVG8gZ2VuZXJhdGUgYSBuYW1lIHByb3BlcnR5IGZpbGUsIHdlIHJ1biBvcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHlcc3JjXGdlbmVyYXRvcnNcTmFtZUdlbmVyYXRvci5qYXZhLiBBZnRlciBydW5uaW5nIE5hbWVHZW5lcmF0b3IsIHRoZSByZXN1bHQgaXMgYSAKK25ldyBuYW1lIHByb3BlcnR5IGZpbGUgZm9yIGEgZ2l2ZW4gY291bnRyeS4gVGhlIGNvcnJlc3BvbmRpbmcgbmFtZSBmaWxlIGZvciBBcmdlbnRpbmEgbG9va3MgYXMgZm9sbG93cyA6CisKKy8vIEV4dHJhY3RlZCBmcm9tIEM6XHN0ZW1JSVxvcmcuZWNsaXBzZS5zdGVtLmludGVybmFsLmRhdGFccmVzb3VyY2VzXGRhdGFcY291bnRyeVxBR09cQUdPX25hbWVzLnByb3BlcnRpZXMuCisuLi4KKyMgTGV2ZWwgMSAoYWRtaW4gMSA9IGUuZy4sIHN0YXRlKQorQU8tQkdPID0gQkVOR08KK0FPLUJHVSA9IEJFTkdVRUxBCitBTy1CSUUgPSBCSUUKK0FPLUNBQiA9IENBQklOREEKK0FPLUNDVSA9IENVQU5ETyBDVUJBTkdPCisuLi4KKworICAgICAgVGhlIHB1cnBvc2Ugb2YgYSBuYW1lcyBwcm9wZXJ0eSBmaWxlIGlzIHRvIGRlZmluZSB0aGUgaWRlbnRpZmllcnMgZm9yIGV2ZXJ5IGFkbWluaXN0cmF0aXZlIGRpdmlzaW9uIGluIGEgY291bnRyeSBhdCBlYWNoIGxldmVsLgorQSBzaW5nbGUgbmFtZXMgcHJvcGVydHkgZmlsZSB3aWxsIGJlIGdlbmVyYXRlZCBmb3IgZXZlcnkgY291bnRyeS4gRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gU1RFTSdzIHByb3BlcnRpZXMgZmlsZXMsIHBsZWFzZSByZWFkICJBbiBJbnRyb2R1Y3Rpb24gVG8gU1RFTSBQcm9wZXJ0aWVzIEZpbGVzIiAKK2ZvdW5kIGF0IG9yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eVxkb2NzLgorICAgICAgCisqKkdlbmVyYXRpb24gb2YgTm9kZXMgUHJvcGVydGllcyBGaWxlcyoqCisKKyAgICAgVG8gZ2VuZXJhdGUgYSBub2RlIHByb3BlcnR5IGZpbGUsIHdlIHJ1biBvcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHlcc3JjXGdlbmVyYXRvcnNcTm9kZUdlbmVyYXRvci5qYXZhLiBBZnRlciBydW5uaW5nIE5vZGVHZW5lcmF0b3IsIHRoZSByZXN1bHQgaXMgYSAKK25ldyBub2RlIHByb3BlcnR5IGZpbGUgZm9yIGEgZ2l2ZW4gY291bnRyeS4gRm9yIGEgc2luZ2xlIGNvdW50cnksIGEgbm9kZSBwcm9wZXJ0eSBmaWxlIHdpbGwgYmUgZ2VuZXJhdGVkIGZvciBlYWNoIGFkbWluaXN0cmF0aXZlIGxldmVsLiBGb3IgQXJnZW50aW5hLCB0aGUgY29ycmVzcG9uZGluZyBub2RlCitwcm9wZXJ0eSBmaWxlcyBwcm9kdWNlZCB3aWxsIGJlIDoKKworQVJHXzBfbm9kZS5wcm9wZXJ0aWVzCitBUkdfMV9ub2RlLnByb3BlcnRpZXMKK0FSR18yX25vZGUucHJvcGVydGllcworCisgICAgICBBIHNhbXBsZSBub2RlIHByb3BlcnR5IGZpbGUgZm9yIEFyZ2VudGluYSBsb29rcyBhcyBmb2xsb3dzIDoKKyAgICAgICAgICAgCisvLyBFeHRyYWN0ZWQgZnJvbSBvcmcuZWNsaXBzZS5zdGVtLmludGVybmFsLmRhdGFccmVzb3VyY2VzXGRhdGFcY291bnRyeVxBUkdfMV9ub2RlLnByb3BlcnRpZXMKKy4uLgorQVItQiA9IEJVRU5PUyBBSVJFUywgMDEsIEIKK0FSLUMgPSBCVUVOT1MgQUlSRVMgRC5GLiwgMDIsIEMKK0FSLUsgPSBDQVRBTUFSQ0EsIDAzLCBLCitBUi1IID0gQ0hBQ08sIDA0LCBICitBUi1VID0gQ0hVQlVULCAwNSwgVQorQVItWCA9IENPUkRPQkEsIDA2LCBYCitBUi1XID0gQ09SUklFTlRFUywgMDcsIFcKK0FSLUUgPSBFTlRSRSBSSU9TLCAwOCwgRQorQVItUCA9IEZPUk1PU0EsIDA5LCBQCitBUi1ZID0gSlVKVVksIDEwLCBZCitBUi1MID0gTEEgUEFNUEEsIDExLCBMCitBUi1GID0gTEEgUklPSkEsIDEyLCBGCitBUi1NID0gTUVORE9aQSwgMTMsIE0KK0FSLVEgPSBORVVRVUVOLCAxNSwgUQorQVItUiA9IFJJTyBORUdSTywgMTYsIFIKK0FSLUEgPSBTQUxUQSwgMTcsIEEKK0FSLUogPSBTQU4gSlVBTiwgMTgsIEoKK0FSLUQgPSBTQU4gTFVJUywgMTksIEQKK0FSLVogPSBTQU5UQSBDUlVaLCAyMCwgWgorQVItUyA9IFNBTlRBIEZFLCAyMSwgUworQVItRyA9IFNBTlRJQUdPIERFTCBFU1RFUk8sIDIyLCBHCitBUi1WID0gVElFUlJBIERFTCBGVUVHTywgMjMsIFYKK0FSLVQgPSBUVUNVTUFOLCAyNCwgVAorQVItTiA9IE1JU0lPTkVTLCAxNCwgTgorLi4uICAgICAgICAgICAgCisKKwkgVGhlIHB1cnBvc2Ugb2YgYSBub2RlIHByb3BlcnR5IGZpbGUgaXMgdG8gcHJvdmlkZSBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIGFib3V0IGlkZW50aWZpZXJzIG9mIGFkbWluaXN0cmF0aXZlIGRpdmlzaW9ucy4gRm9yIG1vcmUKK2luZm9ybWF0aW9uIG9uIFNURU0ncyBwcm9wZXJ0aWVzIGZpbGVzLCBwbGVhc2UgcmVhZCAiQW4gSW50cm9kdWN0aW9uIFRvIFNURU0gUHJvcGVydGllcyBGaWxlcyIgZm91bmQgYXQgb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5XGRvY3MuCisKKyAgICAKKyoqR2VuZXJhdGlvbiBvZiBQb3B1bGF0aW9uIFByb3BlcnRpZXMgRmlsZXMqKgorCisJCVRoZXJlIGFyZSB0d28gaW50ZXJtZWRpYXRlIHN0ZXBzIHRvIGJlIGRvbmUgYmVmb3JlIGdlbmVyYXRpbmcgYSBwb3B1bGF0aW9uIHByb3BlcnR5IGZpbGUuIEZpcnN0LCB3ZSBoYXZlIHRvIHJ1biBib3RoLCBBZG1pbjFMZXhTb3J0ZXIgYW5kIEFkbWluMkxleFNvcnRlciB0byBnZW5lcmF0ZSBhIHNldCBvZiBmaWxlcyB3ZXJlCithZG1pbmlzdHJhdGlvbnMgZm9yIGEgZ2l2ZW4gY291bnRyeSBhcmUgc29ydGVkIGxleGljb2dyYXBoaWNhbGx5IGFzIHdhcyBwcmV2aW91c2x5IGV4cGxhaW5lZCBpbiB0aGlzIGRvY3VtZW50LiBOZXh0LCB3ZSBydW4gb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5LmdlbmVyYXRvcnNcUG9wdWxhdGlvblByb2ZpbGVyLmphdmEuCitQb3B1bGF0aW9uUHJvZmlsZXIuamF2YSBpcyBhIHByb2dyYW0gdGhhdCBjcmVhdGVzIGEgcHJvZmlsZSBvZiBhbGwgdGhlIGxldmVsIDEgYWRtaW5pc3RyYXRpb25zIG9mIGEgY291bnRyeSBiYXNlZCBvbiBwb3B1bGF0aW9uIGFuZCBvbiB0aGUgbnVtYmVyIG9mCitsZXZlbCAyIGFkbWluaXN0cmF0aW9ucyB0aGF0IGJlbG9uZyBvciBhcmUgY29udGFpbmVkIGluIGl0LiBUaGlzIGlzIGEgbmVjZXNzYXJ5IHN0ZXAgc2luY2Ugd2UgYXJlIG1pc3Npbmcgc29tZSBleGFjdCBwb3B1bGF0aW9uIGRhdGEgYW5kIGJ5IGtub3dpbmcgdGhlIHJlbGF0aW9uc2hpcCBvZiBsZXZlbCAyIGFkbWluaXN0cmF0aW9uIHRvIGl0cyAKK2NvbnRhaW5lciB3ZSBjYW4gZWFzaWx5IGNvbXB1dGUgYW4gYXBwcm94aW1hdGUgcG9wdWxhdGlvbiB2YWx1ZS4gRmluYWxseSwgd2UgcnVuIG9yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eVxQb3B1bGF0aW9uR2VuZXJhdG9yLmphdmEgdG8gZ2VuZXJlcmF0ZSBhIHBvcHVsYXRpb24gcHJvcGVydHkgZmlsZS4gRm9yIGEgc2luZ2xlIGNvdW50cnksIAorYSBwb3B1bGF0aW9uIHByb3BlcnR5IGZpbGUgd2lsbCBiZSBnZW5lcmF0ZWQgZm9yIGVhY2ggYWRtaW5pc3RyYXRpdmUgbGV2ZWwuIEZvciBBcmdlbnRpbmEsIHRoZSBjb3JyZXNwb25kaW5nIHBvcHVsYXRpb24gcHJvcGVydHkgZmlsZXMgcHJvZHVjZWQgd2lsbCBiZSA6CisKK0FSR18wX2h1bWFuXzIwMDYucHJvcGVydGllcworQVJHXzFfaHVtYW5fMjAwNi5wcm9wZXJ0aWVzCitBUkdfMl9odW1hbl8yMDA2LnByb3BlcnRpZXMKKwkJCisJCSBBIHNhbXBsZSBub2RlIHByb3BlcnR5IGZpbGUgZm9yIEFyZ2VudGluYSBsb29rcyBhcyBmb2xsb3dzIDoKKworLy8gRXh0cmFjdGVkIGZyb20gb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcm5hbC5kYXRhXHJlc291cmNlc1xkYXRhXGNvdW50cnlcQVJHXzFfaHVtYW5fMjAwNi5wcm9wZXJ0aWVzCisuLi4KKyMgVGhlIHBvcHVsYXRpb24gaWRlbnRpZmllcgorUE9QVUxBVElPTiA9IGh1bWFuCisKKyMgU3RhdGUvUHJvdmluY2UKK0FSLUIgPSAxMzgyNzIwMworQVItQyA9IDI3NzYxMzgKK0FSLUsgPSAzMzQ1NjgKK0FSLUggPSA5ODQ0NDYKK0FSLVUgPSA0MTMyMzcKK0FSLVggPSAzMDY2ODAxCitBUi1XID0gOTMwOTkxCitBUi1FID0gMTE1ODE0NworQVItUCA9IDQ4NjU1OQorQVItWSA9IDYxMTg4OAorQVItTCA9IDI5OTI5NAorQVItRiA9IDI4OTk4MworQVItTSA9IDE1Nzk2NTEKK0FSLVEgPSA0NzQxNTUKKy4uLgorCisgICAgVGhlIHB1cnBvc2Ugb2YgYSBwb3B1bGF0aW9uIHByb3BlcnR5IGZpbGUgaXMgdG8gcHJvdmlkZSBwb3B1bGF0aW9uIGRhdGEgb2YgYWRtaW5pc3RyYXRpdmUgZGl2aXNpb25zLiBGb3IgbW9yZSAKK2luZm9ybWF0aW9uIG9uIFNURU0ncyBwcm9wZXJ0aWVzIGZpbGVzLCBwbGVhc2UgcmVhZCAiQW4gSW50cm9kdWN0aW9uIFRvIFNURU0gUHJvcGVydGllcyBGaWxlcyIgZm91bmQgYXQgb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5XGRvY3MuCisgICAgCisKKyoqR2VuZXJhdGlvbiBvZiBBcmVhIFByb3BlcnRpZXMgRmlsZXMqKgorCisJSW4gYSBzaW1pbGFyIHdheSB0byB0aGUgcG9wdWxhdGlvbiBnZW5lcmF0aW9uIHByb2Nlc3MsIHRoZXJlIGlzIGFuIGludGVybWVkaWF0ZSBzdGVwIHRvIGJlIGRvbmUgYmVmb3JlIGdlbmVyYXRpbmcgYW4gYXJlYSBwcm9wZXJ0eSBmaWxlLiBXZSBoYXZlIHRvIHJ1bgorb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5XFBvbHlnb25BcmVhR2VuZXJhdG9yLmphdmEgdG8gZ2VuZXJhdGUgYSBzZXQgb2YgZmlsZXMgd2l0aCBhcmVhcyBpbiBwb2x5Z29uIHVuaXRzIGZvciBldmVyeSBhZG1pbmlzdHJhdGlvbiBpbiBhIGNvdW50cnkuIFRoaXMgaXMgCithIG5lY2Vzc2FyeSBzdGVwIHNpbmNlIHdlIGFyZSBtaXNzaW5nIHNvbWUgZXhhY3QgYXJlYSBkYXRhLiBIYXZpbmcgcG9seWdvbiBhcmVhIHZhbHVlcyAoaW4gcG9seWdvbiB1bml0cykgaGVscHMgdG8gY29tcHV0ZSBhbiBhcHByb3hpbWF0ZSBhcmVhIHZhbHVlLiBGaW5hbGx5LCAKK3dlIHJ1biBvcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHlcQXJlYUdlbmVyYXRvci5qYXZhIHRvIGdlbmVyZXJhdGUgYW4gYXJlYSBwcm9wZXJ0eSBmaWxlLiBGb3IgYSBzaW5nbGUgY291bnRyeSwgYW4gYXJlYSBwcm9wZXJ0eSBmaWxlIHdpbGwgYmUgZ2VuZXJhdGVkIGZvciBlYWNoIAorYWRtaW5pc3RyYXRpdmUgbGV2ZWwuICBGb3IgQXJnZW50aW5hLCB0aGUgY29ycmVzcG9uZGluZyBhcmVhIHByb3BlcnR5IGZpbGVzIHByb2R1Y2VkIHdpbGwgYmUgOgorCitBUkdfMF9hcmVhLnByb3BlcnRpZXMKK0FSR18xX2FyZWEucHJvcGVydGllcworQVJHXzJfYXJlYS5wcm9wZXJ0aWVzCisJCQorCQkgQSBzYW1wbGUgYXJlYSBwcm9wZXJ0eSBmaWxlIGZvciBBcmdlbnRpbmEgbG9va3MgYXMgZm9sbG93cyA6CisKKy8vIEV4dHJhY3RlZCBmcm9tIG9yZy5lY2xpcHNlLnN0ZW0uaW50ZXJuYWwuZGF0YVxyZXNvdXJjZXNcZGF0YVxjb3VudHJ5XEFSR18xX2FyZWEucHJvcGVydGllcworLi4uCisjIFRoaXMgaXMgdGhlIHNvdXJjZSBvZiB0aGUgZGF0YQorU09VUkNFID0gaHR0cDovL3d3dy54aXN0Lm9yZy9jbnRyeS9hcmdlbnRpbmEuYXNweAorIyBTT1VSQ0UgPSBodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0FyZ2VudGluYQorCisjIFN0YXRlL1Byb3ZpbmNlCitBUi1CID0gMzA3NTcxCitBUi1DID0gMjAwCitBUi1LID0gMTAyNjAyCitBUi1IID0gOTk2MzMKK0FSLVUgPSAyMjQ2ODYKK0FSLVggPSAxNjUzMjEKK0FSLVcgPSA4ODE5OQorQVItRSA9IDc4NzgxCitBUi1QID0gNzIwNjYKK0FSLVkgPSA1MzIxOQorQVItTCA9IDE0MzQ0MAorQVItRiA9IDg5NjgwCitBUi1NID0gMTQ4ODI3CitBUi1RID0gOTQwNzgKK0FSLVIgPSAyMDMwMTMKKy4uLgorCisgICAgVGhlIHB1cnBvc2Ugb2YgYW4gYXJlYSBwcm9wZXJ0eSBmaWxlIGlzIHRvIHByb3ZpZGUgYXJlYSBkYXRhIG9mIGFkbWluaXN0cmF0aXZlIGRpdmlzaW9ucy4gRm9yIG1vcmUgCitpbmZvcm1hdGlvbiBvbiBTVEVNJ3MgcHJvcGVydGllcyBmaWxlcywgcGxlYXNlIHJlYWQgIkFuIEludHJvZHVjdGlvbiBUbyBTVEVNIFByb3BlcnRpZXMgRmlsZXMiIGZvdW5kIGF0IG9yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eVxkb2NzLgorICAgIAorCisqKk1hcCBHZW5lcmF0aW9uKioKKyAgCisgICAgIFRvIGdlbmVyYXRlIG1hcHMgd2UgcnVuIGFuIGluc3RhbmNlIG9mIG9yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eVxzcmNcZ2VuZXJhdG9yc1xHTUxHZW5lcmF0b3IuIEdNTEdlbmVyYXRvciB3aWxsIGNyZWF0ZSBhbmQgWE1MIGZpbGUgZm9yIGVhY2ggY291bnRyeSBpbiBvdXIgZGF0YXNldC4KK1RoZSBtYXBzIGFyZSBjcmVhdGVkIHVzaW5nIEdNTCAoR2VvZ3JhcGh5IE1hcmt1cCBMYW5ndWFnZSkgd2hpY2ggaXMgYW4gWE1MIGdyYW1tYXIuIEFjY29yZGluZyB0byBXaWtpcGVkaWEsICIgVGhlIEdlb2dyYXBoeSBNYXJrdXAgTGFuZ3VhZ2UgKEdNTCkgaXMgdGhlIFhNTCBncmFtbWFyIGRlZmluZWQgYnkgdGhlIE9wZW4gR2Vvc3BhdGlhbCBDb25zb3J0aXVtIChPR0MpIHRvIGV4cHJlc3MgCitnZW9ncmFwaGljYWwgZmVhdHVyZXMuIEdNTCBzZXJ2ZXMgYXMgYSBtb2RlbGluZyBsYW5ndWFnZSBmb3IgZ2VvZ3JhcGhpYyBzeXN0ZW1zIGFzIHdlbGwgYXMgYW4gb3BlbiBpbnRlcmNoYW5nZSBmb3JtYXQgZm9yIGdlb2dyYXBoaWMgdHJhbnNhY3Rpb25zIG9uIHRoZSBJbnRlcm5ldC4iICBBbGwgbWFwcyBhcmUgZm91bmQgdW5kZXIKK29yZy5lY2xpcHNlLnN0ZW0uZ2VvZ3JhcGh5XHJlc291cmNlc1xkYXRhXGdlb1xjb3VudHJ5XC4gVGhlcmUgY2FuIGJlIG1vcmUgdGhhbiBvbmUgbWFwIGZvciBlYWNoIGNvdW50cnkuIEluIGZhY3QsIHRoZXJlIGlzIGEgbWFwIGZvciBldmVyeSBhZG1pbmlzdHJhdGl2ZSBsZXZlbCBmb3Igd2hpY2ggd2UgaGF2ZSBwb2x5Z29uIGRhdGEgYXZhaWxhYmxlLgorRm9yIEFyZ2VudGluYSwgdGhlcmUgYXJlIHRocmVlIGNvcnJlc3BvbmRpbmcgbWFwcyA6CisKKwlBUkdfMF9NQVAueG1sCisJQVJHXzFfTUFQLnhtbAorCUFSR18yX01BUC54bWwKKwkKK0FzIGFuIGV4YW1wbGUsIGZvciBBcm1lbmlhIHRoZSBjb250ZW50cyBvZiB0aGUgbGV2ZWwgMSBtYXAgbG9va3MgYXMgZm9sbG93cyA6CisKKyMgVGFrZW4gZnJvbSBBUk1fMV9NQVAueG1sCis8TWFwPgorCis8dGl0bGU+QVJNIExldmVsIDEgTWFwPC90aXRsZT4KKworPHN1YlRpdGxlPkFkbWluaXN0cmF0aXZlIEJvdW5kYXJpZXM8L3N1YlRpdGxlPgorCis8dXBkYXRlZD5UdWUgTm92IDA3IDE2OjU3OjU1IFBTVCAyMDA2IDwvdXBkYXRlZD4KKworCTxlbnRyeT4KKworCTxnZW9yc3M6d2hlcmU+CisKKwkgIDxnbWw6UG9seWdvbiBnbWw6aWQ9IkFNLUVSIj4KKworCSAgICA8Z21sOm91dGVyQm91bmRhcnlJcz4KKworCSAgICAgICA8Z21sOkxpbmVhclJpbmc+CisKKwkgICAgICAgICA8Z21sOnBvc0xpc3Q+CisKKwkJICAgICAgICAgNDEuMzAxNDIyIDQ1LjAwNDA1NSAuLi4gNDEuMzAxNjI0IDQ1LjAwMDAwMiA0MS4zMDE0MjIgNDUuMDA0MDU1IAorCQkKKyAgIAkgICAgICAgIDwvZ21sOnBvc0xpc3Q+CisKKyAgICAgICAgICA8L2dtbDpMaW5lYXJSaW5nPgorCisgICAgICAgPC9nbWw6b3V0ZXJCb3VuZGFyeUlzPgorCisgICAgIDwvZ21sOlBvbHlnb24+CisKKyAgICA8L2dlb3Jzczp3aGVyZT4KKworICAgPC9lbnRyeT4KKworPC9NYXA+CisKKworKipQdXR0aW5nIEl0IEFsbCBUb2dldGhlciA6IHJ1bm5pbmcgUHJvcGVydGllcyBHZW5lcmF0b3IqKgorCisgICBUbyBiZSBhYmxlIHRvIHJ1biBwcm9wZXJ0aWVzIGZpbGVzIGFuZCBtYXBzIHdlIGhhdmUgZGV2ZWxvcGVkIGEgcHJvZ3JhbSB3aG9zZSBwdXJwb3NlIGlzIHRvIHJ1biBhbGwgdGhlIGdlbmVyYXRvcnMgb24gYSBnaXZlbiBsaXN0IG9mCitjb3VudHJpZXMuIFRvIGRvIHRoaXMsIHdlIHJ1biBvcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvc3JjL2dlbmVyYXRvcnMvUHJvcGVydGllc0dlbmVyYXRvci5qYXZhLiBUaGUgZ2VuZXJhdG9yIHdpbGwgZ28gdGhyb3VnaCBlYWNoIHNpbmdsZQorY291bnRyeSBpbiB0aGUgbGlzdCBhbmQgZG8gYWxsIG5lY2Vzc2FyeSB3b3JrLiBUaGUgbWFpbiBsb2dpYyBmb3IgUHJvcGVydGllc0dlbmVyYXRvciBpcyBzaG93biBuZXh0IDoKKworCisJCS4uLgorCQlmaW5hbCBpbnQgQ09ORklHX0ZJTEUgPSAwOworCQlmaW5hbCBpbnQgUEFSQU1TID0gMTsKKworCQlpZiAoYXJncy5sZW5ndGggPCBQQVJBTVMpIHsKKwkJCVN5c3RlbS5vdXQucHJpbnRsbigiLS1Xcm9uZyBhcmd1bWVudHMtLSIpOyAvLyROT04tTkxTLTEkCisJCQlTeXN0ZW0ub3V0CisJCQkJCS5wcmludGxuKCJcdFRvIHJ1biwgcGxlYXNlIHByb3ZpZGUgdGhlIGZvbGxvd2luZyBhcmd1bWVudChzKSA6ICIpOyAvLyROT04tTkxTLTEkCisJCQlTeXN0ZW0ub3V0LnByaW50bG4oIlx0XHQgQ29uZmlndXJhdGlvbiBmaWxlIik7IC8vJE5PTi1OTFMtMSQKKwkJCVN5c3RlbS5leGl0KDEpOworCQl9CisKKwkJLy8gR2VuZXJhdGUgdGhlIG5hbWVzLnByb3BlcnRpZXMgZmlsZXMgZm9yIGVhY2ggY291bnRyeS4KKwkJTmFtZUdlbmVyYXRvciBuYW1lR2VuID0gbmV3IE5hbWVHZW5lcmF0b3IoYXJnc1tDT05GSUdfRklMRV0pOworCQluYW1lR2VuLnJ1bigpOworCisJCS8vIFJ1biBnYXJiYWdlIGNvbGxlY3Rpb24KKwkJU3lzdGVtLmdjKCk7CisKKwkJLy8gR2VuZXJhdGUgdGhlIHBvcHVsYXRpb24ucHJvcGVydGllcyBmaWxlcyBmb3IgZWFjaCBjb3VudHJ5LgorCQlQb3B1bGF0aW9uR2VuZXJhdG9yIHBvcEdlbiA9IG5ldyBQb3B1bGF0aW9uR2VuZXJhdG9yKGFyZ3NbQ09ORklHX0ZJTEVdKTsKKwkJcG9wR2VuLnJ1bigpOworCisJCS8vIFJ1biBnYXJiYWdlIGNvbGxlY3Rpb24KKwkJU3lzdGVtLmdjKCk7CisKKwkJLy8gR2VuZXJhdGUgdGhlIGFyZWEucHJvcGVydGllcyBmaWxlcyBmb3IgZWFjaCBjb3VudHJ5LgorCQlBcmVhR2VuZXJhdG9yIGFyZWFHZW4gPSBuZXcgQXJlYUdlbmVyYXRvcihhcmdzW0NPTkZJR19GSUxFXSk7CisJCWFyZWFHZW4ucnVuKCk7CisKKwkJLy8gUnVuIGdhcmJhZ2UgY29sbGVjdGlvbgorCQlTeXN0ZW0uZ2MoKTsKKworCQkvLyBHZW5lcmF0ZSB0aGUgbm9kZS5wcm9wZXJ0aWVzIGZpbGVzIGZvciBlYWNoIGNvdW50cnkuCisJCU5vZGVEYXRhR2VuZXJhdG9yIG5vZGVEYXRhR2VuID0gbmV3IE5vZGVEYXRhR2VuZXJhdG9yKGFyZ3NbQ09ORklHX0ZJTEVdKTsKKwkJbm9kZURhdGFHZW4ucnVuKCk7CisKKwkJLy8gUnVuIGdhcmJhZ2UgY29sbGVjdGlvbgorCQlTeXN0ZW0uZ2MoKTsKKworCQkvLyBHZW5lcmF0ZSB0aGUgR01MIGZpbGVzIGZvciBlYWNoIGNvdW50cnkuCisJCUdNTEdlbmVyYXRvciBnbWxHZW4gPSBuZXcgR01MR2VuZXJhdG9yKGFyZ3NbQ09ORklHX0ZJTEVdKTsKKwkJZ21sR2VuLnJ1bigpOworCQkuLi4KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L2RvY3MvQW4gSW50cm9kdWN0aW9uIHRvIFNURU0gSUkgRGF0YSBSZWR1Y3Rpb24gVXRpbGl0aWVzIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvZG9jcy9BbiBJbnRyb2R1Y3Rpb24gdG8gU1RFTSBJSSBEYXRhIFJlZHVjdGlvbiBVdGlsaXRpZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTM0ZWU0MgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L2RvY3MvQW4gSW50cm9kdWN0aW9uIHRvIFNURU0gSUkgRGF0YSBSZWR1Y3Rpb24gVXRpbGl0aWVzCkBAIC0wLDAgKzEsMTc1IEBACitGZWIgLSAwNSAtIDIwMDcKKworKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKworKkFuIEludHJvZHVjdGlvbiB0byBTVEVNIElJIERhdGEgUmVkdWN0aW9uIFV0aWxpdGllcyoKKworCisJIFRoZSBzaXplIG9mIHRoZSBtYXBzIHByb2R1Y2VkIGJ5IHRoZSBkYXRhIGdlbmVyYXRpb24gdXRpbGl0aWVzIGNhbiBiZSBxdWl0ZSBsYXJnZS4gV2hlbiB3ZSBydW4gYSBzaW11bGF0aW9uIGluIFNURU0gSUkKK3RoYXQgaW52b2x2ZXMgdGhlIHdob2xlIHdvcmxkIGl0IG1pZ2h0IHRha2UgYSBmZXcgc2Vjb25kcyB0byBsb2FkLiBUaGlzIGlzIG5vdGljZWFibGUgYW5kIGlzIGV4cGVjdGVkIHNpbmNlIGZvciBzdWNoIGEgCitnbG9iYWwgc2ltdWxhdGlvbiB3ZSBkZWFsIHdpdGggaHVuZHJlZHMgb2YgbWFwcywgZWFjaCBvZiB3aGlsZSBjYW4gYmUgcXVpdGUgYmlnLiBBcyBhbiBleGFtcGxlLCBmb3IgQXJnZW50aW5hLCB3ZSBoYXZlIHRoZQorZm9sbG93aW5nIGZpbGUgc2l6ZXMgOgorCisgQVJHXzBfTUFQLnhtbCAgICAzMTggS0IKKyBBUkdfMV9NQVAueG1sICAxLDM3NSBLQgorIEFSR18yX01BUC54bWwgIDQsODEzIEtCIAorIAorIAorICoqRGF0YSBSZWR1Y3Rpb24qKgorIAorICAgICBUbyBvdmVyY29tZSB0aGlzIHByb2JsZW0sIHdlIGNyZWF0ZWQgYSBzZXQgb2YgdXRpbGl0aWVzIHRoYXQgcHJvZHVjZSBhIHJlZHVjZWQgZGF0YSBzZXQuIElkZWFsbHksIHdlIHdhbnQgdG8gcmVkdWNlIHRoZSAKK3NpemUgb2YgYSBmaWxlIGJ5IDUwJSBidXQgc3RpbGwgaGF2aW5nIHRoZSBtYXBzIHRvIGRpc3BsYXkgbmljZWx5IHdpdGggYXMgZmV3IGdhcHMgYW5kIG92ZXJsYXBzIGFzIHBvc3NpYmxlLiBXZSBjcmVhdGVkIGEgRG93bi1zYW1wbGluZworb3IgcmVkdWN0aW9uIGFsZ29yaXRobSBmb3Igb3VyIG1hcCdzIHBvbHlnb25zIGJhc2VkIG9uIHRoZSBMYXcgb2YgQ29zaW5lcyBmcm9tIFRyaWdvbm9tZXRyeS4gQnkgZGVyaXZhdGlvbiBmcm9tIHRoZSBmb3JtdWxhIGZvciB0aGUgbGF3IG9mIGNvc2luZXMsCit3ZSBjYW4gZmluZCBlYWNoIG9mIHRoZSBpbnRlcm5hbCBhbmdsZXMgb2YgYSB0cmlhbmdsZTogYWxwaGEsIGJldGEsIGFuZCBnYW1tYS4gT3VyIERvd24tc2FtcGxpbmcgd2lsbCBjb25zaXN0IG9mIG1hcmtpbmcgZm9yIGRlbGV0aW9uIGFsbCBwb2ludHMgaW4gCitvdXIgcG9seWdvbiB3aGVyZSB0aGUgYW5nbGUgaXMgbGVzcyB0aGFuIGEgZ2l2ZW4gdGhyZXNob2xkLCBzYXkgNSBkZWdyZWVzLCB3aXRoIHRoZSBjb25kaXRpb24gdGhhdCBvbiBhIHNpbmdsZSBwYXNzIHdlIGNhbm5vdCBkZWxldGUgdHdvIGNvbnNlY3V0aXZlIHBvaW50cy4KK0J5IGF2b2lkaW5nIHRvIGRlbGV0ZSB0d28gY29uc2VjdXRpdmUgcG9pbnRzIGR1cmluZyB0aGUgc2FtZSBwYXNzLCB3ZSByZWR1Y2UgdGhlIGNoYW5jZSBvZiBoYXZpbmcgdW5kZXNpcmFibGUgdmlzdWFsIGFydGlmYWN0cyBsaWtlIGdhcHMuCisKKyoqVGhlIERvd24tc2FtcGxpbmcgQWxnb3JpdGhtKioKKyAKKyAgICAgVGhlIGFsZ29yaXRobSB3ZSBkZXNpZ25lZCBpcyBhbiBpdGVyYXRpdmUgb25lLiBJdCBpcyBhIHJhdGhlciBzaW1wbGUgb25lLiBJdCB0YWtlcyB0d28gYXJndW1lbnRzLCBhIHRocmVzaG9sZCBpbiBkZWdyZWVzIGFuZCB0aGUgbnVtYmVyIG9mIGl0ZXJhdGlvbnMuCitUaGUgYWxnb3JpdGhtIHdvcmtzIGFzIGZvbGxvd3MsIGV2ZXJ5IHRocmVlIHBvaW50cyB3ZSBhcHBseSB0aGUgZGVyaXZhdGlvbiBvZiB0aGUgbGF3IG9mIGNvc2luZXMgdG8gZmluZCBlYWNoIG9mIHRoZSB0aHJlZSBpbnRlcmlvciBhbmdsZXMgZm9yIHRoZSB0cmlhbmdsZSBmb3JtZWQKK2J5IHRocmVlIGNvbnNlY3V0aXZlIHBvaW50cy4gTmV4dCwgd2UgYXBwbHkgYSBjbGV2ZXIgYWxnb3JpdGhtIHRvIGRlY2lkZSB3aGljaCBpcyB0aGUgYmVzdCBwb2ludCB0byByZW1vdmUgKGlmIGFueSkgZnJvbSB0aGUgY3VycmVudCBzZWxlY3Rpb24uIFRoZSBsb2dpYyB0aGF0CitkZWFscyB3aXRoIG1hcmtpbmcgcG9pbnRzIGZvciBkZWxldGlvbiBhbmQgInNsaWRpbmciIHRvIHRoZSBuZXh0IHNlbGVjdGlvbiBpcyB0aGUgZm9sbG93aW5nIDoKKworIyBUYWtlbiBmcm9tIG9yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9nZW5lcmF0b3JzL1NpbmdsZVBhc3NEb3duU2FtcGxlciAKKworCS8vIENoZWNrIHRvIHNlZSBpZiB0aGUgaW5pdGlhbCwgbGVmdG1vc3QgcG9pbnQgaXMgZ3JlYXRlciB0aGFuCisJCQkvLyBhbHBoYSBvciBpZiBpdCBpcyBVTlNBRkUuIElmIHNvLCB0aGVuIHNsaWRlIGZvcndhcmQgdGhlIHdpbmRvdy4KKwkJCWlmIChhMSA+IGFscGhhKSB7CisJCQkJLy8gSnVzdCBzbGlkZSBmb3J3YXJkIHRoZSB3aW5kb3cgb25lIHVuaXQuCisJCQkJbGVmdF9ib3JkZXIgKz0gMTsKKwkJCQlyaWdodF9ib3JkZXIgKz0gMTsKKwkJCQljb250aW51ZTsKKwkJCX0KKworCQkJaWYgKHMxLmVxdWFscyhVTlNBRkUpKSB7CisKKwkJCQlpZiAoYTIgPCBhbHBoYSAmJiBhMiA8PSBhMykgeworCQkJCQkvLyBbIFAxID0gVU5TQUZFLCBQMiA9IFNBRkUsIFAzID0gVU5TQUZFIF0KKwkJCQkJLy8gQWR2YW5jZSBzbGlkaW5nIHdpbmRvdyBhZnRlciBQMgorCQkJCQlzMiA9IFNBRkU7CisJCQkJCXMzID0gVU5TQUZFOworCQkJCX0gZWxzZSBpZiAoYTMgPCBhbHBoYSkgeworCQkJCQkvLyBbIFAxID0gVU5TQUZFLCBQMiA9IFVOU0FGRSwgUDMgPSBTQUZFIF0KKwkJCQkJLy8gQWR2YW5jZSBzbGlkaW5nIHdpbmRvdyBhZnRlciBQMgorCQkJCQlzMyA9IFNBRkU7CisJCQkJCXMyID0gVU5TQUZFOworCQkJCX0KKworCQkJfSBlbHNlIGlmIChhMSA8IGFscGhhICYmIGExIDwgYTIpIHsKKwkJCQkvLyBbIFAxID0gU0FGRSwgUDIgPSBVTlNBRkUsIFAzID0gVU5LTk9XTiBdCisJCQkJLy8gQWR2YW5jZSBzbGlkaW5nIHdpbmRvdyBhZnRlciBQMgorCQkJCXMxID0gU0FGRTsKKwkJCQlzMiA9IFVOU0FGRTsKKwkJCQkvLyBOb3cgY2hlY2sgdG8gc2VlIGlmIGlzIHNhZmUgdG8gbWFyayBQMyB0b28uCisJCQkJaWYgKGEzIDwgYWxwaGEpIHsKKwkJCQkJLy8gWyBQMSA9IFNBRkUsIFAyID0gVU5TQUZFLCBQMyA9IFNBRkUgXQorCQkJCQkvLyBBZHZhbmNlIHNsaWRpbmcgd2luZG93IGFmdGVyIFAyCisJCQkJCXMzID0gU0FGRTsKKwkJCQl9CisJCQl9IGVsc2UgaWYgKGExIDwgYWxwaGEgJiYgYTEgPiBhMikgeworCQkJCS8vIFsgUDEgPSBVTlNBRkUsIFAyID0gU0FGRSwgUDMgPSBVTlNBRkUgXQorCQkJCS8vIFNQRUNJQUwgQ0FTRSA6IEFkdmFuY2Ugc2xpZGluZyB3aW5kb3cgYWZ0ZXIgUDMKKwkJCQlzMSA9IFVOU0FGRTsKKwkJCQlzMiA9IFNBRkU7CisJCQkJczMgPSBVTlNBRkU7CisJCQkJLy8gU3BlY2lhbCBjYXNlIDogc2V0IGZsYWcgdG8gYWR2YW5jZSBzbGlkaW5nIHdpbmRvdyBhZnRlciBQMworCQkJCWZsYWcgPSB0cnVlOworCisJCQl9IGVsc2UgaWYgKGExID4gYWxwaGEgJiYgYTIgPiBhbHBoYSkgeworCQkJCS8vIFsgUDEgPSBVTlNBRkUsIFAyID0gVU5TQUZFLCBQMyA9IFVOS05PV04gXQorCQkJCS8vIEFkdmFuY2Ugc2xpZGluZyB3aW5kb3cgYWZ0ZXIgUDIKKwkJCQlzMSA9IFVOU0FGRTsKKwkJCQlzMiA9IFVOU0FGRTsKKwkJCX0gCisKK05PVEU6IEEgc2xpZGluZyB3aW5kb3cgcmVmZXJzIG9ubHkgdG8gYSBzZWxlY3Rpb24gb2YgdGhyZWUgY29uc2VjdXRpdmUgcG9pbnRzLgorIAorCisqKkRvd24tc2FtcGxpbmcgVXRpbGl0aWVzKioKKworCisgICBUbyByZWR1Y2UgYSBkYXRhIHNldCwgd2UgcnVuIG9yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9zcmMvZ2VuZXJhdG9ycy9Eb3duU2FtcGxlci5qYXZhLiBXZSBuZWVkIHRvIHNwZWNpZnkgdHdvIGFyZ3VtZW50cyA6IGEgdGhyZXNob2xkCithbmQgdGhlIG51bWJlciBvZiBpdGVyYXRpb25zLiBJbnRlcm5hbGx5LCBEb3duU2FtcGxlciB3aWxsIHJ1biBib3RoIFNpbmdsZVBhc3NEb3duU2FtcGxlciBmb3IgdGhlIGZpcnN0IHJ1biBhbmQgdGhlIE11bHRpUGFzc0Rvd25TYW1wbGVyCitmb3IgdGhlIHJlbWFpbmluZyBpdGVyYXRpb25zLgorCisgICBBdCBlYWNoIGl0ZXJhdGlvbiwgdHdvIGZpbGVzIGFyZSBnZW5lcmF0ZWQgOiBhIHJlZHVjZWQgbWFwIGFuZCBhIHJlZHVjZWQgZGF0YSBmaWxlLiBUaGUgbmFtZSBvZiB0aGUgcmVkdWNlZCBtYXAgdGVsbHMgdXMgZHVyaW5nIHdoaWNoIGl0ZXJhdGlvbgoraXQgd2FzIGdlbmVyYXRlZC4gRm9yIGV4YW1wbGUsIGZvciBBUkdfMV9SRURVQ0VEX01BUF8yLnhtbCB3b3VsZCB0ZWxsIHVzIHRoYXQgdGhpcyBpcyBhIGxldmVsIDEgbWFwIGZvciBBcmdlbnRpbmEgY3JlYXRlZCBkdXJpbmcgdGhlIHNlY29uZCBpdGVyYXRpb24uCitTaW1pbGFybHksIEFSR19SRURVQ0VEXzIudHh0IGlzIHRoZSByZWR1Y2VkIGRhdGEgZmlsZSB0aGF0IHdhcyBwcm9kdWNlZCBkdXJpbmcgdGhlIHNlY29uZCBpdGVyYXRpb24uIEFSR19SRURVQ0VEXzIudHh0IHdpbGwgYmUgdGhlIGlucHV0IGRhdGEgc291cmNlIGZvciB0aGUKK2Rvd24tc2FtcGxpbmcgYWxnb3JpdGhtIGR1cmluZyB0aGUgdGhpcmQgaXRlcmF0aW9uLiBXaGF0J3MgbW9yZSwgQVJHXzFfUkVEVUNFRF9NQVBfMi54bWwgY2FuIGJlIHJlZ2VuZXJhdGVkIGZyb20gdGhpcyBmaWxlLiBGb3IgYSB0aHJlc2hvbGQgb2YgZml2ZSBkZWdyZWVzIGFuZAorZm9yIGZpdmUgaXRlcmF0aW9ucywgaW4gdGhlIHBhcnRpY3VsYXIgY2FzZSBvZiBBdXN0cmlhIHdlIGhhdmUgdGhhdCBhbGwgdGhlIGZvbGxvd2luZyBmaWxlcyBhcmUgZ2VuZXJhdGVkIDoKKworCisjIFJlZHVjZWQgbWFwcyA6CisgQVVUXzFfUkVEVUNFRF9NQVBfMS54bWwKKyBBVVRfMV9SRURVQ0VEX01BUF8yLnhtbAorIEFVVF8xX1JFRFVDRURfTUFQXzMueG1sCisgQVVUXzFfUkVEVUNFRF9NQVBfNC54bWwKKyBBVVRfMV9SRURVQ0VEX01BUF81LnhtbAorCQorIyBSZWR1Y2VkIGRhdGEgZmlsZXMgOgorIEFVVF9SRURVQ0VEXzEudHh0CisgQVVUX1JFRFVDRURfMi50eHQKKyBBVVRfUkVEVUNFRF8zLnR4dAorIEFVVF9SRURVQ0VEXzQudHh0CisgQVVUX1JFRFVDRURfNS50eHQKKyAKKyAqKkRvd24tc2FtcGxpbmcgc3RhdGlzdGljcyoqCisgCisgICAgVGhlIGZvbGxvd2luZyB0d28gbWV0cmljcyB3ZXJlIGNvbnNpZGVyZWQgd2hlbiBnZW5lcmF0aW5nIGEgcmVkdWNlZCBkYXRhIHNldCBvdXQgb2YgdGhlIERpdmEgc2V0IDogcG9pbnRzLXBlci1wb2x5Z29uIGFuZCBtYXAgZmlsZSBzaXplLiBUaGUgcmVzdWx0cyBhcmUKK2NhcHR1cmVkIGluIHRoZSBmb2xsb3dpbmcgdHdvIHRhYmxlcyA6CisKKworCisKKyMgUkVEVUNUSU9OIE1FVFJJQyA6IEFWRyBQT0lOVFMtUEVSLVBPTFlHT04KKworCitUaHJlc2hvbGQgKGluIGRlZ3JlZXMpICAgIEF2Zy4gcG9pbnRzLXBlci1wb2x5Z29uIChhZnRlciA1IGl0ZXJhdGlvbnMpICAgICAgICAgUGVyY2VudGFnZSBvZiByZWR1Y3Rpb24KKworICBJTklUSUFMIFZBTFVFICAgICAgICAgICAgICAgICAgMjUwCQkJCQkJCQkgICAgICAgICAgICAgICAgICAgICAgeAorICAgICAgMSAgICAgICAgICAgICAgICAgICAgICAgICAgMTc5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyOSUKKyAgICAgIDIgICAgICAgICAgICAgICAgICAgICAgICAgIDE2OSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzIuNDAlCisgICAgICAzCQkJCQkJICAgICAxNjQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDM0LjQwJQorICAgICAgNCAgICAgICAgICAgICAgICAgICAgICAgICAgMTYwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzNiUKKyAgICAgIDUgICAgICAgICAgICAgICAgICAgICAgICAgIDE1NyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzcuMjUlCisKKworCisKKyMgUkVEVUNUSU9OIE1FVFJJQyA6IEZJTEUgU0laRSAKKyAgICAKKyBUaHJlc2hvbGQgKGluIGRlZ3JlZXMpICAgU2l6ZSAoaW4gS0IsIGFmdGVyIDUgaXRlcmF0aW9ucykgICAgICAgICAgICAgICAgICAgICAgUGVyY2VudGFnZSBvZiByZWR1Y3Rpb24KKyAKKyAgICBPUklHSU5BTCBTSVpFICAgICAgICAgICAgICAgVVNBXzFfTUFQLnhtbCA9IDI5ODcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeAorICAgIAkJCQkJCQlVU0FfMl9NQVAueG1sID0gMTcyNjYJCQkJCQkJCQkJeAorIAorIAkJCQkJCQkgICAgVVNBXzFfTUFQLnhtbCA9IDIyMTYgICAJCQkJCQkJCQkJMjYlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVTQV8yX01BUC54bWwgPSAxNDI1OQkJCQkJCQkJCQkxNiUKKyAgICAKKyAgCQkJCQkJCSAgICBVU0FfMV9NQVAueG1sID0gMTc0MiAgIAkJCQkJCQkJCQk0MiUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVVNBXzJfTUFQLnhtbCA9IDEyMDkxCQkJCQkJCQkJCTMwJQorIAorICAJCQkJCQkJICAgIFVTQV8xX01BUC54bWwgPSAxNjg5ICAgCQkJCQkJCQkJCTQ0LjUwJQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVU0FfMl9NQVAueG1sID0gMTE3MjAJCQkJCQkJCQkJMzIlCisgCisgIAkJCQkJCQkgICAgVVNBXzFfTUFQLnhtbCA9IDE2NDkgICAJCQkJCQkJCQkJNDUlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVTQV8yX01BUC54bWwgPSAxMTQ2NAkJCQkJCQkJCQkzMy43MCUKKyAKKyAgCQkJCQkJCSAgICBVU0FfMV9NQVAueG1sID0gMTYwNyAgIAkJCQkJCQkJCQk0Ni4zMCUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVVNBXzJfTUFQLnhtbCA9IDExMjM5CQkJCQkJCQkJCTM1JQorICAgIAorICAgIAorICAgIAorICAgIFdlIHNlZSB0aGF0IGJ5IHJ1bm5pbmcgdGhlIGRvd24tc2FtcGxpbmcgdXRpbGl0eSB3ZSBnZXQgYSByZWR1Y3Rpb24gb2YgYXJvdW5kIDM3LjI1JSBpbiB0aGUgYXZlcmFnZSBudW1iZXIgb2YgcG9pbnRzLXBlci1wb2x5Z29uLCBhIAorcmVkdWN0aW9uIG9mIDQ2LjMwJSBvbiB0aGUgbGV2ZWwgMSBtYXAgYW5kIGEgcmVkdWN0aW9uIG9mIDM1JSBvbiB0aGUgbGV2ZWwgMiBtYXAuIFRoZSBhdmVyYWdlIHJlZHVjdGlvbiBvZiBib3RoIG1hcHMgY29tYmluZWQgaXMgYXBwcm94IDQxJS4KKyAgICAKKyAgICAKKyoqUmVkdWN0aW9uIGluIFByZWNpc2lvbioqCisKKyAgICBXZSBjb21lIGNsb3NlIHRvIGFjaGlldmluZyBhIDUwJSByZWR1Y3Rpb24gaW4gZmlsZSBzaXplIGJ5IGRlY3JlYXNpbmcgdGhlIHByZWNpc2lvbiBvbiB0aGUgcmVkdWNlZCBkYXRhIGZpbGVzIGZyb20gc2l4IGRlY2ltYWwgZGlnaXRzIHRvIGZvdXIuCisgICAgCisgICAgCisgICAgCisgICAgCisJClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvZG9jcy9TVEVNSUlEYXRhU291cmNlcy50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9kb2NzL1NURU1JSURhdGFTb3VyY2VzLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMGY0NWVmCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvZG9jcy9TVEVNSUlEYXRhU291cmNlcy50eHQKQEAgLTAsMCArMSwxNTUgQEAKKworCitTVEVNIElJIERhdGEgU291cmNlcworCitGZWIgLSAwNyAtIDIwMDcKKworKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCisgICAgIFRoZXJlIHdoZXJlIHRocmVlIG1ham9yIGRhdGEgc291cmNlcyBvZiBHSVMgZGF0YSBmb3IgU1RFTSBJSSA6IFUuUy4gQ2Vuc3VzIEJ1cmVhdSwgRGl2YS1HSVMgYW5kIHRoZSBVbml0ZWQgTmF0aW9ucyBHbG9iYWwgUmVzb3VyY2UgSW5mb3JtYXRpb24gRGF0YWJhc2UgKEdSSUQpIC0gRXVyb3BlLiBUaGUgZGlmZmVyZW5jZSBhbW9uZyB0aGVzZSBkYXRhCitzb3VyY2VzIGlzIHRoYXQgdGhlIERpdmEtR0lTIGRhdGEgc2V0IERPRVMgTk9UIGNvbnRhaW4gYXJlYSBvciBwb3B1bGF0aW9uIGRhdGEsIHdoZXJlYXMgdGhlIGRhdGEgc2V0IGZvciBFdXJvcGUgZnJvbSB0aGUgVU4tR1JJRCBhbHJlYWR5IGNvbWVzIHdpdGggYm90aCBhcmVhIGFuZCBwb3B1bGF0aW9uIGRhdGEuIFNpbWlsYXJseSwgYXJlYSBhbmQgcG9wdWxhdGlvbgorZGF0YSBmb3IgdGhlIFVTQSwgUHVlcnRvIFJpY28sIEFsYXNrYSBhbmQgb3RoZXIgVS5TLiBUZXJyaXRvcmllcyBhcmUgcHJvdmlkZWQgYnkgdGhlIFUuUy4gQ2Vuc3VzIEJ1cmVhIGluIHNlcGFyYXRlIGZpbGVzLiBBbm90aGVyIGRpZmZlcmVuY2UKK2lzIHRoYXQgdGhlIERpdmEtR0lTIHByb3ZpZGVzIGRhdGEgYXQgYWRtaW5pc3RyYXRpb24gbGV2ZWxzIDAsIDEsIGFuZCAyLiBPbiB0aGUgb3RoZXIgaGFuZCwgYWxsIGRhdGEgZnJvbSBVTi1HUklEIGlzIG9ubHkgbGV2ZWwgMS4gVG8gYmUgYWJsZSB0byB1c2UgdGhlIERpdmEtR0lTIGRhdGEsIHdlIGhhZCB0byBjb21wbGVtZW50IGl0IGJ5IHNlYXJjaCBib3RoIHRoZQorYXJlYSBhbmQgcG9wdWxhdGlvbiBkYXRhIGZvciBsb2NhdGlvbnMgdXNpbmcgYSB2YXJpZXR5IG9mIG9ubGluZSBzb3VyY2VzIDogQ0lBIEZhY3Rib29rLCBDaXR5IFBvcHVsYXRpb24uIEFsbCBvZiB0aGUgZGF0YSB3YXMgaW4gdGhlIHB1YmxpYyBkb21haW4uCisKKworICAgICBUaGUgbWFwcGluZyBvZiBkYXRhIHNvdXJjZXMgdG8gY291bnRyaWVzIGlzIGFzIGZvbGxvd3MgOgorCisJICAgICAgVS5TLiBDZW5zdXMgQnVyZWF1IDogVS5TLkEuIGFuZCBQdWVydG8gUmljbywgQWxhc2thLCBhbmQgIFVTIFRlcnJpdG9yaWVzLgorCisJICAgICAgVW5pdGVkIE5hdGlvbnMgR2xvYmFsIFJlc291cmNlIEluZm9ybWF0aW9uIERhdGFiYXNlIChVTkdSSUQpIDogRXVyb3BlIGFuZCBSdXNzaWEuCisKKwkgICAgICBEaXZhIC0gR0lTIDogUmVzdCBvZiB0aGUgV29ybGQgKE1leGljbywgU291dGggQW1lcmljYSwgQWZyaWNhLCBBc2lhKQorCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKKworVS5TLiBDZW5zdXMgQnVyZWF1CisKKyAgICAgR0lTIERhdGEgZm9yIHRoZSBVU0EsIFB1ZXJ0byBSaWNvLCBBbGFza2EgYW5kIFVTIFRlcnJpdG9yaWVzIHdhcyBkb3dubG9hZWQgZnJvbSB0aGUgVS5TLiBDZW5zdXMgQnVyZWF1IHdlYiBzaXRlLiBBcmVhIGFuZCBwb3B1bGF0aW9uIGRhdGEgd2FzIHByb3ZpZGVkIGFzIHdlbGwgZnJvbSB0aGUgVS5TLiBDZW5zdXMgQnVyZWEgc2l0ZSBpbiB0aGUgZm9ybQorb2YgRXhjZWwgc3ByZWFoc2hlZXRzLgorCisgICAgICAgVVJMIDogIGh0dHA6Ly93d3cuY2Vuc3VzLmdvdi9wb3B1bGF0aW9uL3d3dy9jZW5zdXNkYXRhL2RlbnNpdHkuaHRtbAorCisgICAgICAgU3RhdGVtZW50IDogIkFsbCBVUyBDZW5zdXMgQnVyZWF1IG1hdGVyaWFscywgcmVnYXJkbGVzcyBvZiB0aGUgbWVkaWEsIGFyZSBlbnRpcmVseSBpbiB0aGUgcHVibGljIGRvbWFpbi4gVGhlcmUgYXJlIG5vIHVzZXIgZmVlcywgc2l0ZSBsaWNlbnNlcywgb3IgYW55IHNwZWNpYWwgYWdyZWVtZW50cyBldGMgZm9yIHRoZSBwdWJsaWMgb3IgcHJpdmF0ZSB1c2UsIGFuZCBvciAKK3JldXNlIG9mIGFueSBjZW5zdXMgdGl0bGUuIEFzIHRheCBmdW5kZWQgcHJvZHVjdCwgaXQncyBhbGwgaW4gdGhlIHB1YmxpYyByZWNvcmQuIgorCisgICAgICAgQ29udGFjdCA6IAorCisKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKworRElWQS1HSVMKKyAgICAKKyAgICBVUkwgOiBodHRwOi8vd3d3LmRpdmEtZ2lzLm9yZy9kYXRhL0RhdGFTZXJ2ZXIuaHRtCisKKyAgICBMaWNlbnNlIFN0YXRlbWVudCA6ICAiRnJvbSB0aGlzIHBhZ2UgeW91IGNhbiBkb3dubG9hZCB2YXJpb3VzIHRoZW1hdGljIG1hcHMgYW5kL29yIGdlby1yZWZlcmVuY2VkIGRhdGFiYXNlcy4gQWxsIHRoZXNlIG1hcHMgYW5kIGRhdGFiYXNlcyBhcmUgaW4gdGhlIHB1YmxpYyBkb21haW4uIFRoZSBkYXRhIGlzIGVpdGhlciBpbgorc2hhcGVmaWxlIG9yIGluIGdyaWRmaWxlIGZvcm1hdC4gRmlsZXMgaGF2ZSBiZWVuIGNvbXByZXNzZWQgdXNpbmcgdGhlIFpJUCBmb3JtYXQuIFRoZSBkYXRhIGFyZSBub3QgcHJvamVjdGVkIChpLmUuLCBpbiBsYXRpdHVkZS9sb25naXR1ZGUpLiBUaGUgbWFwcyBhcHBlYXIgYXMgZ3JhcGhpY3MgZmlsZXMgKEdJRikgdGhhdCBjYW4gYmUgY29waWVkIGFuZAorcGFzdGVkIGludG8gYW5vdGhlciBhcHBsaWNhdGlvbi4iCisKKworKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCitDSUEgRkFDVEJPT0sKKworICAgIFdlIGdvdCBhIGZldyBhcmVhIGFuZCBwb3B1bGF0aW9uIGRhdGEgdmFsdWVzIGZyb20gdGhlIENJQSBGYWN0Ym9vay4KKworICAgICBVUkwgOiBodHRwczovL3d3dy5jaWEuZ292L2NpYS9wdWJsaWNhdGlvbnMvZmFjdGJvb2svaW5kZXguaHRtbAorCisgICAgIFN0YXRlbWVudCA6ICJUaGUgV29ybGQgRmFjdGJvb2sgaXMgaW4gdGhlIHB1YmxpYyBkb21haW4gYW5kIG1heSBiZSB1c2VkIGZyZWVseSBieSBhbnlvbmUgYXQgYW55dGltZSB3aXRob3V0IHNlZWtpbmcgcGVybWlzc2lvbi4gSG93ZXZlciwgVVMgQ29kZSBwcm9oaWJpdHMgdXNlIG9mIHRoZSBDSUEgc2VhbCBpbiBhIG1hbm5lcgord2hpY2ggaW1wbGllcyB0aGF0IHRoZSBDSUEgYXBwcm92ZWQsIGVuZG9yc2VkLCBvciBhdXRob3JpemVkIHN1Y2ggdXNlLiBJZiB5b3UgaGF2ZSBhbnkgcXVlc3Rpb25zIGFib3V0IHlvdXIgaW50ZW5kZWQgdXNlLCB5b3Ugc2hvdWxkIGNvbnN1bHQgd2l0aCBsZWdhbCBjb3Vuc2VsLiBGdXJ0aGVyIGluZm9ybWF0aW9uIG9uIFRoZSBXb3JsZCBGYWN0Ym9vaydzIAordXNlIGlzIGRlc2NyaWJlZCBvbiB0aGUgQ29udHJpYnV0b3JzIGFuZCBDb3B5cmlnaHQgSW5mb3JtYXRpb24gcGFnZS4gQXMgYSBjb3VydGVzeSwgcGxlYXNlIGNpdGUgVGhlIFdvcmxkIEZhY3Rib29rIHdoZW4gdXNlZC4iCisKKyAgICAgQ29udGFjdCA6CisKKworKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCitDSVRZIFBPUFVMQVRJT04KKworICAgICBUaGUgc2Vjb25kIG1haW4gc291cmNlIG9mIGFyZWEgYW5kIHBvcHVsYXRpb24gdmFsdWVzIHdhcyBDaXR5IFBvcHVsYXRpb24uCisKKyAgICAgVVJMIDogaHR0cDovL3d3dy5jaXR5cG9wdWxhdGlvbi5kZS8KKworICAgICBTdGF0ZW1lbnQgOiAiUGxlYXNlLCByZWZlcmVuY2UgZGF0YSB0YWtlbiBmcm9tIHRoZXNlIHdlYiBwYWdlcyBhcyBmb2xsb3dzOgorVGhvbWFzIEJyaW5raG9mZjogQ2l0eSBQb3B1bGF0aW9uLCBodHRwOi8vd3d3LmNpdHlwb3B1bGF0aW9uLmRlLiIKKworICAgICBDb250YWN0IDogVGhvbWFzIEJyaW5raG9mZiA6ICBtYWlsQGNpdHlwb3B1bGF0aW9uLmRlIAorCisKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKworIFVOSVRFRCBOQVRJT05TIEdMT0JBTCBSRVNPVVJDRSBJTkZPUk1BVElPTiBEQVRBQkFTRSAoR1JJRCkgLSBFdXJvcGUKKworICAgICAgVGhpcyBpcyB0aGUgbWFpbiBzb3VyY2Ugb2Ygb3VyIGRhdGEgZm9yIEV1cm9wZS4gSXQgaW5jbHVkZXMgYXJlYSBhbmQgcG9wdWxhdGlvbiBmb3IgZWFjaCBsb2NhdGlvbi4KKworICAgICAgVVJMIDogaHR0cDovL3d3dy5ncmlkLnVuZXAuY2gvZGF0YS9kYXRhLnBocD9jYXRlZ29yeT1odW1hbl9yZWxhdGVkCisKKyAgICAgIFN0YXRlbWVudCA6ICJNb3N0IG9mIHRoZSBVTkVQL0dSSUQgZGF0YSBzZXRzIGFyZSBmcmVlbHkgYXZhaWxhYmxlIGZvciBkb3dubG9hZCBieSB1c2VycyB2aWEgdGhlIEludGVybmV0LiBVTkVQL0dSSUQgZG9lcyBub3QgcGxhY2UgYW55IHJlc3RyaWN0aW9ucyBvbiB0aGUgdXNlIG9mIHRoaXMgZGF0YSwgYnV0IGRvZXMgcmVxdWVzdCB0aGF0IHVzZXJzIGNpdGUKKyBVTkVQL0dSSUQgKGFuZCBhbnkgb3RoZXIgc291cmNlcyBtZW50aW9uZWQgaW4gZG9jdW1lbnRhdGlvbiBvZiB0aGUgZGF0YSBwcm92aWRlZCkgYXMgZGF0YSBmdXJuaXNoZXIocykuIEZvciBkYXRhIHNldHMgbm90IGF2YWlsYWJsZSAnb24tbGluZScsIHJlcXVlc3RzIG1hZGUgYnkgbm9uLWNvbW1lcmNpYWwgYW5kIG5vbi1wcml2YXRlIHBlcnNvbnMgKGkuZS4gdGhvc2UKKyB3aXRoIG5vIGFmZmlsaWF0aW9uKSB3aWxsIGJlIGZpbGxlZCBhdCBubyBjb3N0LCBidXQgd2lsbCBkZXBlbmQgb24gZGF0YSBhdmFpbGFiaWxpdHksIFVORVAvR1JJRCB3b3JrbG9hZCBhbmQgdGhlIG5hdHVyZSBvZiB0aGUgZGF0YSBzZXQgYmVpbmcgcmVxdWVzdGVkLiBSZXF1ZXN0cyB3aWxsIGJlIHF1ZXVlZCB3aXRoIHByaW9yaXR5IGdpdmVuIHRvIHRob3NlIHJlbGF0ZWQgdG8gam9pbnQgCithY3Rpdml0aWVzIHdpdGggVU5FUCBwcm9ncmFtbWUgYXJlYXMgYW5kIG90aGVyIFVOIGFnZW5jaWVzLiBEYXRhIHNldHMgd2l0aCBhICJyZXN0cmljdGVkIGFjY2VzcyIgcmF0aW5nIHdpbGwgbm90IGJlIGRpc3RyaWJ1dGVkOyBob3dldmVyLCBpbmZvcm1hdGlvbiBhYm91dCBzdWNoIGRhdGEgc2V0cywgaW5jbHVkaW5nIHRoZSBkaXN0cmlidXRvcidzIG5hbWUsIHdpbGwgYmUgc2VudCAKK3RvIGVsaWdpYmxlIG9yZ2FuaXNhdGlvbnMgdXBvbiByZXF1ZXN0LgorCisgICAgICAgICAgICAgICAgICAgICAgICAgIFVzZXJzIG9mIGRhdGEgc2V0cyBzdXBwbGllZCB0aHJvdWdoIFVORVAvR1JJRCBhcmUgcmVxdWVzdGVkIHRvIGluY29ycG9yYXRlIGluIG91dHB1dCBwcm9kdWN0cyBhbmQgcmVwb3J0cyBhY2tub3dsZWRnZW1lbnRzIHRvIHRoZSBvcmlnaW5hdG9yIG9mIHRoZSBkYXRhIGFuZCB0byB0aGUgZmFjdCB0aGF0IHRoZXkgd2VyZSBhY3F1aXJlZAorIHRocm91Z2ggVU5FUC9HUklELiBBcHByb3ByaWF0ZSB3b3JkaW5nIG1heSBiZSAiVU5FU0NPICgxOTg3KSB0aHJvdWdoIFVORVAvR1JJRC1FdXJvcGUiICIuCisKKyAgICAgICBDb250YWN0IDogaW5mb2dyaWRAZ3JpZC51bmVwLmNoCisKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKworT1RIRVIgKE1JTk9SKSBTT1VSQ0VTIE9GIERBVEEgOiAobW9zdGx5IGFyZWEgYW5kIHBvcHVsYXRpb24gZGF0YSkKKworICAgQSBmZXcgKG9uZSBvciB0d28pIGFyZWEsIHBvcHVsYXRpb24sIGFuZCBsb2NhdGlvbiBuYW1lcyB3aGVyZSB0YWtlbiBmb3IgYSBmZXcgY291bnRyaWVzIGZyb20gb3RoZXIgb25saW5lIHNvdXJjZXMgOgorCisKK0NISUxFIDoKKworVVJMIDogaHR0cDovL3d3dy5pbmUuY2wvaW5lL2NhbmFsZXMvY2hpbGVfZXN0YWRpc3RpY28vaG9tZS5waHAKK1VSTCA6IGh0dHA6Ly93d3cudmlzaXRpbmdjaGlsZS5jb20vcmVnaW9uZXMvcmVnaW9uLXN1ci9yZWdpb24tYmlvLWJpby9wcm92aW5jaWEtYXJhdWNvL3Byb3ZpbmNpYS1hcmF1Y28ucGhwCitVUkwgOiBodHRwOi8vd3d3LmluZS5jbC9pbmUvY2FuYWxlcy9jaGlsZV9lc3RhZGlzdGljby9kZW1vZ3JhZmlhX3lfdml0YWxlcy9kZW1vZ3JhZmlhL2RlbW9ncmFmaWEucGhwCisKKworQlJBWklMIDogCisKKworVVJMIDogaHR0cDovL3d3dy5saWJyYXJ5LnV1Lm5sL3dlc3AvcG9wdWxzdGF0L0FtZXJpY2FzL2JyYXppbHQuaHRtCitVUkwgOiBodHRwOi8vd3d3LmliZ2UuZ292LmJyL2VuZ2xpc2gvZGVmYXVsdC5waHAKK1VSTCA6IGh0dHA6Ly93d3cuZ29sZGZpZWxkcy5jby56YS9JbnZlc3Rvci9Bbm51YWxfUmVwb3J0cy9GeV8yMDAzL2dmX2FyMDMvc2RfMDMvc3Rvcnkvc3R1ZHlfNi5odG0KKworCitDSEFEIDoKKworVVJMIDogaHR0cDovL3d3dy5pbnNlZWQtdGNoYWQub3JnLworCitDT0xPTUJJQSA6CisKK1VSTCA6IGh0dHBzOi8vd3d3LmNpYS5nb3YvbGlicmFyeS9wdWJsaWNhdGlvbnMvdGhlLXdvcmxkLWZhY3Rib29rLworCisKK0lOU09ORVNJQSA6CisKK1VSTCA6IGh0dHA6Ly93d3cuYnBzLmdvLmlkL2luZGV4LnNodG1sCisKK0tBWkhBS1NUQU4gOgorCitVUkwgOiBodHRwOi8vd3d3LnN0YXQua3ovc3RhdC9pbmRleC5hc3B4P3NsPW5ld3MmbD1lbgorCitMSUJFUklBIDoKKworVVJMIDogaHR0cDovL3d3dy5zdGF0b2lkcy5jb20vdWxyLmh0bWwKKworTkFNSUJJQSA6CisKK1VSTCA6IGh0dHA6Ly93d3cubGlicmFyeS51dS5ubC93ZXNwL3BvcHVsc3RhdC9BZnJpY2EvbmFtaWJpYXAuaHRtCisKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKworCisKKworCisKKworCisKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L2VwbC12MTAuaHRtbCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L2VwbC12MTAuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZDRiMTk2Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvZXBsLXYxMC5odG1sCkBAIC0wLDAgKzEsMzI4IEBACis8aHRtbCB4bWxuczpvPSJ1cm46c2NoZW1hcy1taWNyb3NvZnQtY29tOm9mZmljZTpvZmZpY2UiCit4bWxuczp3PSJ1cm46c2NoZW1hcy1taWNyb3NvZnQtY29tOm9mZmljZTp3b3JkIgoreG1sbnM9Imh0dHA6Ly93d3cudzMub3JnL1RSL1JFQy1odG1sNDAiPgorCis8aGVhZD4KKzxtZXRhIGh0dHAtZXF1aXY9Q29udGVudC1UeXBlIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD13aW5kb3dzLTEyNTIiPgorPG1ldGEgbmFtZT1Qcm9nSWQgY29udGVudD1Xb3JkLkRvY3VtZW50PgorPG1ldGEgbmFtZT1HZW5lcmF0b3IgY29udGVudD0iTWljcm9zb2Z0IFdvcmQgOSI+Cis8bWV0YSBuYW1lPU9yaWdpbmF0b3IgY29udGVudD0iTWljcm9zb2Z0IFdvcmQgOSI+Cis8bGluayByZWw9RmlsZS1MaXN0CitocmVmPSIuL0VjbGlwc2UlMjBFUEwlMjAyMDAzXzExXzEwJTIwRmluYWxfZmlsZXMvZmlsZWxpc3QueG1sIj4KKzx0aXRsZT5FY2xpcHNlIFB1YmxpYyBMaWNlbnNlIC0gVmVyc2lvbiAxLjA8L3RpdGxlPgorPCEtLVtpZiBndGUgbXNvIDldPjx4bWw+CisgPG86RG9jdW1lbnRQcm9wZXJ0aWVzPgorICA8bzpSZXZpc2lvbj4yPC9vOlJldmlzaW9uPgorICA8bzpUb3RhbFRpbWU+MzwvbzpUb3RhbFRpbWU+CisgIDxvOkNyZWF0ZWQ+MjAwNC0wMy0wNVQyMzowMzowMFo8L286Q3JlYXRlZD4KKyAgPG86TGFzdFNhdmVkPjIwMDQtMDMtMDVUMjM6MDM6MDBaPC9vOkxhc3RTYXZlZD4KKyAgPG86UGFnZXM+NDwvbzpQYWdlcz4KKyAgPG86V29yZHM+MTYyNjwvbzpXb3Jkcz4KKyAgPG86Q2hhcmFjdGVycz45MjcwPC9vOkNoYXJhY3RlcnM+CisgICA8bzpMaW5lcz43NzwvbzpMaW5lcz4KKyAgPG86UGFyYWdyYXBocz4xODwvbzpQYXJhZ3JhcGhzPgorICA8bzpDaGFyYWN0ZXJzV2l0aFNwYWNlcz4xMTM4NDwvbzpDaGFyYWN0ZXJzV2l0aFNwYWNlcz4KKyAgPG86VmVyc2lvbj45LjQ0MDI8L286VmVyc2lvbj4KKyA8L286RG9jdW1lbnRQcm9wZXJ0aWVzPgorPC94bWw+PCFbZW5kaWZdLS0+PCEtLVtpZiBndGUgbXNvIDldPjx4bWw+CisgPHc6V29yZERvY3VtZW50PgorICA8dzpUcmFja1JldmlzaW9ucy8+CisgPC93OldvcmREb2N1bWVudD4KKzwveG1sPjwhW2VuZGlmXS0tPgorPHN0eWxlPgorPCEtLQorIC8qIEZvbnQgRGVmaW5pdGlvbnMgKi8KK0Bmb250LWZhY2UKKwl7Zm9udC1mYW1pbHk6VGFob21hOworCXBhbm9zZS0xOjIgMTEgNiA0IDMgNSA0IDQgMiA0OworCW1zby1mb250LWNoYXJzZXQ6MDsKKwltc28tZ2VuZXJpYy1mb250LWZhbWlseTpzd2lzczsKKwltc28tZm9udC1waXRjaDp2YXJpYWJsZTsKKwltc28tZm9udC1zaWduYXR1cmU6NTUzNjc5NDk1IC0yMTQ3NDgzNjQ4IDggMCA2NjA0NyAwO30KKyAvKiBTdHlsZSBEZWZpbml0aW9ucyAqLworcC5Nc29Ob3JtYWwsIGxpLk1zb05vcm1hbCwgZGl2Lk1zb05vcm1hbAorCXttc28tc3R5bGUtcGFyZW50OiIiOworCW1hcmdpbjowaW47CisJbWFyZ2luLWJvdHRvbTouMDAwMXB0OworCW1zby1wYWdpbmF0aW9uOndpZG93LW9ycGhhbjsKKwlmb250LXNpemU6MTIuMHB0OworCWZvbnQtZmFtaWx5OiJUaW1lcyBOZXcgUm9tYW4iOworCW1zby1mYXJlYXN0LWZvbnQtZmFtaWx5OiJUaW1lcyBOZXcgUm9tYW4iO30KK3AKKwl7bWFyZ2luLXJpZ2h0OjBpbjsKKwltc28tbWFyZ2luLXRvcC1hbHQ6YXV0bzsKKwltc28tbWFyZ2luLWJvdHRvbS1hbHQ6YXV0bzsKKwltYXJnaW4tbGVmdDowaW47CisJbXNvLXBhZ2luYXRpb246d2lkb3ctb3JwaGFuOworCWZvbnQtc2l6ZToxMi4wcHQ7CisJZm9udC1mYW1pbHk6IlRpbWVzIE5ldyBSb21hbiI7CisJbXNvLWZhcmVhc3QtZm9udC1mYW1pbHk6IlRpbWVzIE5ldyBSb21hbiI7fQorcC5CYWxsb29uVGV4dCwgbGkuQmFsbG9vblRleHQsIGRpdi5CYWxsb29uVGV4dAorCXttc28tc3R5bGUtbmFtZToiQmFsbG9vbiBUZXh0IjsKKwltYXJnaW46MGluOworCW1hcmdpbi1ib3R0b206LjAwMDFwdDsKKwltc28tcGFnaW5hdGlvbjp3aWRvdy1vcnBoYW47CisJZm9udC1zaXplOjguMHB0OworCWZvbnQtZmFtaWx5OlRhaG9tYTsKKwltc28tZmFyZWFzdC1mb250LWZhbWlseToiVGltZXMgTmV3IFJvbWFuIjt9CitAcGFnZSBTZWN0aW9uMQorCXtzaXplOjguNWluIDExLjBpbjsKKwltYXJnaW46MS4waW4gMS4yNWluIDEuMGluIDEuMjVpbjsKKwltc28taGVhZGVyLW1hcmdpbjouNWluOworCW1zby1mb290ZXItbWFyZ2luOi41aW47CisJbXNvLXBhcGVyLXNvdXJjZTowO30KK2Rpdi5TZWN0aW9uMQorCXtwYWdlOlNlY3Rpb24xO30KKy0tPgorPC9zdHlsZT4KKzwvaGVhZD4KKworPGJvZHkgbGFuZz1FTi1VUyBzdHlsZT0ndGFiLWludGVydmFsOi41aW4nPgorCis8ZGl2IGNsYXNzPVNlY3Rpb24xPgorCis8cCBhbGlnbj1jZW50ZXIgc3R5bGU9J3RleHQtYWxpZ246Y2VudGVyJz48Yj5FY2xpcHNlIFB1YmxpYyBMaWNlbnNlIC0gdiAxLjA8L2I+Cis8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5USEUgQUNDT01QQU5ZSU5HIFBST0dSQU0gSVMgUFJPVklERUQgVU5ERVIKK1RIRSBURVJNUyBPRiBUSElTIEVDTElQU0UgUFVCTElDIExJQ0VOU0UgKCZxdW90O0FHUkVFTUVOVCZxdW90OykuIEFOWSBVU0UsCitSRVBST0RVQ1RJT04gT1IgRElTVFJJQlVUSU9OIE9GIFRIRSBQUk9HUkFNIENPTlNUSVRVVEVTIFJFQ0lQSUVOVCdTIEFDQ0VQVEFOQ0UKK09GIFRISVMgQUdSRUVNRU5ULjwvc3Bhbj4gPC9wPgorCis8cD48Yj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+MS4gREVGSU5JVElPTlM8L3NwYW4+PC9iPiA8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4mcXVvdDtDb250cmlidXRpb24mcXVvdDsgbWVhbnM6PC9zcGFuPiA8L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmEpCitpbiB0aGUgY2FzZSBvZiB0aGUgaW5pdGlhbCBDb250cmlidXRvciwgdGhlIGluaXRpYWwgY29kZSBhbmQgZG9jdW1lbnRhdGlvbgorZGlzdHJpYnV0ZWQgdW5kZXIgdGhpcyBBZ3JlZW1lbnQsIGFuZDxiciBjbGVhcj1sZWZ0PgorYikgaW4gdGhlIGNhc2Ugb2YgZWFjaCBzdWJzZXF1ZW50IENvbnRyaWJ1dG9yOjwvc3Bhbj48L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmkpCitjaGFuZ2VzIHRvIHRoZSBQcm9ncmFtLCBhbmQ8L3NwYW4+PC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5paSkKK2FkZGl0aW9ucyB0byB0aGUgUHJvZ3JhbTs8L3NwYW4+PC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz53aGVyZQorc3VjaCBjaGFuZ2VzIGFuZC9vciBhZGRpdGlvbnMgdG8gdGhlIFByb2dyYW0gb3JpZ2luYXRlIGZyb20gYW5kIGFyZSBkaXN0cmlidXRlZAorYnkgdGhhdCBwYXJ0aWN1bGFyIENvbnRyaWJ1dG9yLiBBIENvbnRyaWJ1dGlvbiAnb3JpZ2luYXRlcycgZnJvbSBhIENvbnRyaWJ1dG9yCitpZiBpdCB3YXMgYWRkZWQgdG8gdGhlIFByb2dyYW0gYnkgc3VjaCBDb250cmlidXRvciBpdHNlbGYgb3IgYW55b25lIGFjdGluZyBvbgorc3VjaCBDb250cmlidXRvcidzIGJlaGFsZi4gQ29udHJpYnV0aW9ucyBkbyBub3QgaW5jbHVkZSBhZGRpdGlvbnMgdG8gdGhlCitQcm9ncmFtIHdoaWNoOiAoaSkgYXJlIHNlcGFyYXRlIG1vZHVsZXMgb2Ygc29mdHdhcmUgZGlzdHJpYnV0ZWQgaW4gY29uanVuY3Rpb24KK3dpdGggdGhlIFByb2dyYW0gdW5kZXIgdGhlaXIgb3duIGxpY2Vuc2UgYWdyZWVtZW50LCBhbmQgKGlpKSBhcmUgbm90IGRlcml2YXRpdmUKK3dvcmtzIG9mIHRoZSBQcm9ncmFtLiA8L3NwYW4+PC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+JnF1b3Q7Q29udHJpYnV0b3ImcXVvdDsgbWVhbnMgYW55IHBlcnNvbiBvcgorZW50aXR5IHRoYXQgZGlzdHJpYnV0ZXMgdGhlIFByb2dyYW0uPC9zcGFuPiA8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4mcXVvdDtMaWNlbnNlZCBQYXRlbnRzICZxdW90OyBtZWFuIHBhdGVudAorY2xhaW1zIGxpY2Vuc2FibGUgYnkgYSBDb250cmlidXRvciB3aGljaCBhcmUgbmVjZXNzYXJpbHkgaW5mcmluZ2VkIGJ5IHRoZSB1c2UKK29yIHNhbGUgb2YgaXRzIENvbnRyaWJ1dGlvbiBhbG9uZSBvciB3aGVuIGNvbWJpbmVkIHdpdGggdGhlIFByb2dyYW0uIDwvc3Bhbj48L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4mcXVvdDtQcm9ncmFtJnF1b3Q7IG1lYW5zIHRoZSBDb250cmlidXRpb25zCitkaXN0cmlidXRlZCBpbiBhY2NvcmRhbmNlIHdpdGggdGhpcyBBZ3JlZW1lbnQuPC9zcGFuPiA8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4mcXVvdDtSZWNpcGllbnQmcXVvdDsgbWVhbnMgYW55b25lIHdobworcmVjZWl2ZXMgdGhlIFByb2dyYW0gdW5kZXIgdGhpcyBBZ3JlZW1lbnQsIGluY2x1ZGluZyBhbGwgQ29udHJpYnV0b3JzLjwvc3Bhbj4gPC9wPgorCis8cD48Yj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+Mi4gR1JBTlQgT0YgUklHSFRTPC9zcGFuPjwvYj4gPC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5hKQorU3ViamVjdCB0byB0aGUgdGVybXMgb2YgdGhpcyBBZ3JlZW1lbnQsIGVhY2ggQ29udHJpYnV0b3IgaGVyZWJ5IGdyYW50cyBSZWNpcGllbnQKK2Egbm9uLWV4Y2x1c2l2ZSwgd29ybGR3aWRlLCByb3lhbHR5LWZyZWUgY29weXJpZ2h0IGxpY2Vuc2UgdG88c3Bhbgorc3R5bGU9J2NvbG9yOnJlZCc+IDwvc3Bhbj5yZXByb2R1Y2UsIHByZXBhcmUgZGVyaXZhdGl2ZSB3b3JrcyBvZiwgcHVibGljbHkKK2Rpc3BsYXksIHB1YmxpY2x5IHBlcmZvcm0sIGRpc3RyaWJ1dGUgYW5kIHN1YmxpY2Vuc2UgdGhlIENvbnRyaWJ1dGlvbiBvZiBzdWNoCitDb250cmlidXRvciwgaWYgYW55LCBhbmQgc3VjaCBkZXJpdmF0aXZlIHdvcmtzLCBpbiBzb3VyY2UgY29kZSBhbmQgb2JqZWN0IGNvZGUKK2Zvcm0uPC9zcGFuPjwvcD4KKworPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YikKK1N1YmplY3QgdG8gdGhlIHRlcm1zIG9mIHRoaXMgQWdyZWVtZW50LCBlYWNoIENvbnRyaWJ1dG9yIGhlcmVieSBncmFudHMKK1JlY2lwaWVudCBhIG5vbi1leGNsdXNpdmUsIHdvcmxkd2lkZSw8c3BhbiBzdHlsZT0nY29sb3I6Z3JlZW4nPiA8L3NwYW4+cm95YWx0eS1mcmVlCitwYXRlbnQgbGljZW5zZSB1bmRlciBMaWNlbnNlZCBQYXRlbnRzIHRvIG1ha2UsIHVzZSwgc2VsbCwgb2ZmZXIgdG8gc2VsbCwgaW1wb3J0CithbmQgb3RoZXJ3aXNlIHRyYW5zZmVyIHRoZSBDb250cmlidXRpb24gb2Ygc3VjaCBDb250cmlidXRvciwgaWYgYW55LCBpbiBzb3VyY2UKK2NvZGUgYW5kIG9iamVjdCBjb2RlIGZvcm0uIFRoaXMgcGF0ZW50IGxpY2Vuc2Ugc2hhbGwgYXBwbHkgdG8gdGhlIGNvbWJpbmF0aW9uCitvZiB0aGUgQ29udHJpYnV0aW9uIGFuZCB0aGUgUHJvZ3JhbSBpZiwgYXQgdGhlIHRpbWUgdGhlIENvbnRyaWJ1dGlvbiBpcyBhZGRlZAorYnkgdGhlIENvbnRyaWJ1dG9yLCBzdWNoIGFkZGl0aW9uIG9mIHRoZSBDb250cmlidXRpb24gY2F1c2VzIHN1Y2ggY29tYmluYXRpb24KK3RvIGJlIGNvdmVyZWQgYnkgdGhlIExpY2Vuc2VkIFBhdGVudHMuIFRoZSBwYXRlbnQgbGljZW5zZSBzaGFsbCBub3QgYXBwbHkgdG8KK2FueSBvdGhlciBjb21iaW5hdGlvbnMgd2hpY2ggaW5jbHVkZSB0aGUgQ29udHJpYnV0aW9uLiBObyBoYXJkd2FyZSBwZXIgc2UgaXMKK2xpY2Vuc2VkIGhlcmV1bmRlci4gPC9zcGFuPjwvcD4KKworPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YykKK1JlY2lwaWVudCB1bmRlcnN0YW5kcyB0aGF0IGFsdGhvdWdoIGVhY2ggQ29udHJpYnV0b3IgZ3JhbnRzIHRoZSBsaWNlbnNlcyB0byBpdHMKK0NvbnRyaWJ1dGlvbnMgc2V0IGZvcnRoIGhlcmVpbiwgbm8gYXNzdXJhbmNlcyBhcmUgcHJvdmlkZWQgYnkgYW55IENvbnRyaWJ1dG9yCit0aGF0IHRoZSBQcm9ncmFtIGRvZXMgbm90IGluZnJpbmdlIHRoZSBwYXRlbnQgb3Igb3RoZXIgaW50ZWxsZWN0dWFsIHByb3BlcnR5CityaWdodHMgb2YgYW55IG90aGVyIGVudGl0eS4gRWFjaCBDb250cmlidXRvciBkaXNjbGFpbXMgYW55IGxpYWJpbGl0eSB0byBSZWNpcGllbnQKK2ZvciBjbGFpbXMgYnJvdWdodCBieSBhbnkgb3RoZXIgZW50aXR5IGJhc2VkIG9uIGluZnJpbmdlbWVudCBvZiBpbnRlbGxlY3R1YWwKK3Byb3BlcnR5IHJpZ2h0cyBvciBvdGhlcndpc2UuIEFzIGEgY29uZGl0aW9uIHRvIGV4ZXJjaXNpbmcgdGhlIHJpZ2h0cyBhbmQKK2xpY2Vuc2VzIGdyYW50ZWQgaGVyZXVuZGVyLCBlYWNoIFJlY2lwaWVudCBoZXJlYnkgYXNzdW1lcyBzb2xlIHJlc3BvbnNpYmlsaXR5Cit0byBzZWN1cmUgYW55IG90aGVyIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgbmVlZGVkLCBpZiBhbnkuIEZvciBleGFtcGxlLAoraWYgYSB0aGlyZCBwYXJ0eSBwYXRlbnQgbGljZW5zZSBpcyByZXF1aXJlZCB0byBhbGxvdyBSZWNpcGllbnQgdG8gZGlzdHJpYnV0ZQordGhlIFByb2dyYW0sIGl0IGlzIFJlY2lwaWVudCdzIHJlc3BvbnNpYmlsaXR5IHRvIGFjcXVpcmUgdGhhdCBsaWNlbnNlIGJlZm9yZQorZGlzdHJpYnV0aW5nIHRoZSBQcm9ncmFtLjwvc3Bhbj48L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmQpCitFYWNoIENvbnRyaWJ1dG9yIHJlcHJlc2VudHMgdGhhdCB0byBpdHMga25vd2xlZGdlIGl0IGhhcyBzdWZmaWNpZW50IGNvcHlyaWdodAorcmlnaHRzIGluIGl0cyBDb250cmlidXRpb24sIGlmIGFueSwgdG8gZ3JhbnQgdGhlIGNvcHlyaWdodCBsaWNlbnNlIHNldCBmb3J0aCBpbgordGhpcyBBZ3JlZW1lbnQuIDwvc3Bhbj48L3A+CisKKzxwPjxiPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4zLiBSRVFVSVJFTUVOVFM8L3NwYW4+PC9iPiA8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5BIENvbnRyaWJ1dG9yIG1heSBjaG9vc2UgdG8gZGlzdHJpYnV0ZSB0aGUKK1Byb2dyYW0gaW4gb2JqZWN0IGNvZGUgZm9ybSB1bmRlciBpdHMgb3duIGxpY2Vuc2UgYWdyZWVtZW50LCBwcm92aWRlZCB0aGF0Ojwvc3Bhbj4KKzwvcD4KKworPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YSkKK2l0IGNvbXBsaWVzIHdpdGggdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoaXMgQWdyZWVtZW50OyBhbmQ8L3NwYW4+PC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5iKQoraXRzIGxpY2Vuc2UgYWdyZWVtZW50Ojwvc3Bhbj48L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmkpCitlZmZlY3RpdmVseSBkaXNjbGFpbXMgb24gYmVoYWxmIG9mIGFsbCBDb250cmlidXRvcnMgYWxsIHdhcnJhbnRpZXMgYW5kCitjb25kaXRpb25zLCBleHByZXNzIGFuZCBpbXBsaWVkLCBpbmNsdWRpbmcgd2FycmFudGllcyBvciBjb25kaXRpb25zIG9mIHRpdGxlCithbmQgbm9uLWluZnJpbmdlbWVudCwgYW5kIGltcGxpZWQgd2FycmFudGllcyBvciBjb25kaXRpb25zIG9mIG1lcmNoYW50YWJpbGl0eQorYW5kIGZpdG5lc3MgZm9yIGEgcGFydGljdWxhciBwdXJwb3NlOyA8L3NwYW4+PC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5paSkKK2VmZmVjdGl2ZWx5IGV4Y2x1ZGVzIG9uIGJlaGFsZiBvZiBhbGwgQ29udHJpYnV0b3JzIGFsbCBsaWFiaWxpdHkgZm9yIGRhbWFnZXMsCitpbmNsdWRpbmcgZGlyZWN0LCBpbmRpcmVjdCwgc3BlY2lhbCwgaW5jaWRlbnRhbCBhbmQgY29uc2VxdWVudGlhbCBkYW1hZ2VzLCBzdWNoCithcyBsb3N0IHByb2ZpdHM7IDwvc3Bhbj48L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmlpaSkKK3N0YXRlcyB0aGF0IGFueSBwcm92aXNpb25zIHdoaWNoIGRpZmZlciBmcm9tIHRoaXMgQWdyZWVtZW50IGFyZSBvZmZlcmVkIGJ5IHRoYXQKK0NvbnRyaWJ1dG9yIGFsb25lIGFuZCBub3QgYnkgYW55IG90aGVyIHBhcnR5OyBhbmQ8L3NwYW4+PC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5pdikKK3N0YXRlcyB0aGF0IHNvdXJjZSBjb2RlIGZvciB0aGUgUHJvZ3JhbSBpcyBhdmFpbGFibGUgZnJvbSBzdWNoIENvbnRyaWJ1dG9yLCBhbmQKK2luZm9ybXMgbGljZW5zZWVzIGhvdyB0byBvYnRhaW4gaXQgaW4gYSByZWFzb25hYmxlIG1hbm5lciBvbiBvciB0aHJvdWdoIGEKK21lZGl1bSBjdXN0b21hcmlseSB1c2VkIGZvciBzb2Z0d2FyZSBleGNoYW5nZS48c3BhbiBzdHlsZT0nY29sb3I6Ymx1ZSc+IDwvc3Bhbj48L3NwYW4+PC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+V2hlbiB0aGUgUHJvZ3JhbSBpcyBtYWRlIGF2YWlsYWJsZSBpbiBzb3VyY2UKK2NvZGUgZm9ybTo8L3NwYW4+IDwvcD4KKworPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YSkKK2l0IG11c3QgYmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhpcyBBZ3JlZW1lbnQ7IGFuZCA8L3NwYW4+PC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5iKSBhCitjb3B5IG9mIHRoaXMgQWdyZWVtZW50IG11c3QgYmUgaW5jbHVkZWQgd2l0aCBlYWNoIGNvcHkgb2YgdGhlIFByb2dyYW0uIDwvc3Bhbj48L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5Db250cmlidXRvcnMgbWF5IG5vdCByZW1vdmUgb3IgYWx0ZXIgYW55Citjb3B5cmlnaHQgbm90aWNlcyBjb250YWluZWQgd2l0aGluIHRoZSBQcm9ncmFtLiA8L3NwYW4+PC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+RWFjaCBDb250cmlidXRvciBtdXN0IGlkZW50aWZ5IGl0c2VsZiBhcyB0aGUKK29yaWdpbmF0b3Igb2YgaXRzIENvbnRyaWJ1dGlvbiwgaWYgYW55LCBpbiBhIG1hbm5lciB0aGF0IHJlYXNvbmFibHkgYWxsb3dzCitzdWJzZXF1ZW50IFJlY2lwaWVudHMgdG8gaWRlbnRpZnkgdGhlIG9yaWdpbmF0b3Igb2YgdGhlIENvbnRyaWJ1dGlvbi4gPC9zcGFuPjwvcD4KKworPHA+PGI+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPjQuIENPTU1FUkNJQUwgRElTVFJJQlVUSU9OPC9zcGFuPjwvYj4gPC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+Q29tbWVyY2lhbCBkaXN0cmlidXRvcnMgb2Ygc29mdHdhcmUgbWF5CithY2NlcHQgY2VydGFpbiByZXNwb25zaWJpbGl0aWVzIHdpdGggcmVzcGVjdCB0byBlbmQgdXNlcnMsIGJ1c2luZXNzIHBhcnRuZXJzCithbmQgdGhlIGxpa2UuIFdoaWxlIHRoaXMgbGljZW5zZSBpcyBpbnRlbmRlZCB0byBmYWNpbGl0YXRlIHRoZSBjb21tZXJjaWFsIHVzZQorb2YgdGhlIFByb2dyYW0sIHRoZSBDb250cmlidXRvciB3aG8gaW5jbHVkZXMgdGhlIFByb2dyYW0gaW4gYSBjb21tZXJjaWFsCitwcm9kdWN0IG9mZmVyaW5nIHNob3VsZCBkbyBzbyBpbiBhIG1hbm5lciB3aGljaCBkb2VzIG5vdCBjcmVhdGUgcG90ZW50aWFsCitsaWFiaWxpdHkgZm9yIG90aGVyIENvbnRyaWJ1dG9ycy4gVGhlcmVmb3JlLCBpZiBhIENvbnRyaWJ1dG9yIGluY2x1ZGVzIHRoZQorUHJvZ3JhbSBpbiBhIGNvbW1lcmNpYWwgcHJvZHVjdCBvZmZlcmluZywgc3VjaCBDb250cmlidXRvciAoJnF1b3Q7Q29tbWVyY2lhbAorQ29udHJpYnV0b3ImcXVvdDspIGhlcmVieSBhZ3JlZXMgdG8gZGVmZW5kIGFuZCBpbmRlbW5pZnkgZXZlcnkgb3RoZXIKK0NvbnRyaWJ1dG9yICgmcXVvdDtJbmRlbW5pZmllZCBDb250cmlidXRvciZxdW90OykgYWdhaW5zdCBhbnkgbG9zc2VzLCBkYW1hZ2VzIGFuZAorY29zdHMgKGNvbGxlY3RpdmVseSAmcXVvdDtMb3NzZXMmcXVvdDspIGFyaXNpbmcgZnJvbSBjbGFpbXMsIGxhd3N1aXRzIGFuZCBvdGhlcgorbGVnYWwgYWN0aW9ucyBicm91Z2h0IGJ5IGEgdGhpcmQgcGFydHkgYWdhaW5zdCB0aGUgSW5kZW1uaWZpZWQgQ29udHJpYnV0b3IgdG8KK3RoZSBleHRlbnQgY2F1c2VkIGJ5IHRoZSBhY3RzIG9yIG9taXNzaW9ucyBvZiBzdWNoIENvbW1lcmNpYWwgQ29udHJpYnV0b3IgaW4KK2Nvbm5lY3Rpb24gd2l0aCBpdHMgZGlzdHJpYnV0aW9uIG9mIHRoZSBQcm9ncmFtIGluIGEgY29tbWVyY2lhbCBwcm9kdWN0CitvZmZlcmluZy4gVGhlIG9ibGlnYXRpb25zIGluIHRoaXMgc2VjdGlvbiBkbyBub3QgYXBwbHkgdG8gYW55IGNsYWltcyBvciBMb3NzZXMKK3JlbGF0aW5nIHRvIGFueSBhY3R1YWwgb3IgYWxsZWdlZCBpbnRlbGxlY3R1YWwgcHJvcGVydHkgaW5mcmluZ2VtZW50LiBJbiBvcmRlcgordG8gcXVhbGlmeSwgYW4gSW5kZW1uaWZpZWQgQ29udHJpYnV0b3IgbXVzdDogYSkgcHJvbXB0bHkgbm90aWZ5IHRoZSBDb21tZXJjaWFsCitDb250cmlidXRvciBpbiB3cml0aW5nIG9mIHN1Y2ggY2xhaW0sIGFuZCBiKSBhbGxvdyB0aGUgQ29tbWVyY2lhbCBDb250cmlidXRvcgordG8gY29udHJvbCwgYW5kIGNvb3BlcmF0ZSB3aXRoIHRoZSBDb21tZXJjaWFsIENvbnRyaWJ1dG9yIGluLCB0aGUgZGVmZW5zZSBhbmQKK2FueSByZWxhdGVkIHNldHRsZW1lbnQgbmVnb3RpYXRpb25zLiBUaGUgSW5kZW1uaWZpZWQgQ29udHJpYnV0b3IgbWF5IHBhcnRpY2lwYXRlCitpbiBhbnkgc3VjaCBjbGFpbSBhdCBpdHMgb3duIGV4cGVuc2UuPC9zcGFuPiA8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5Gb3IgZXhhbXBsZSwgYSBDb250cmlidXRvciBtaWdodCBpbmNsdWRlIHRoZQorUHJvZ3JhbSBpbiBhIGNvbW1lcmNpYWwgcHJvZHVjdCBvZmZlcmluZywgUHJvZHVjdCBYLiBUaGF0IENvbnRyaWJ1dG9yIGlzIHRoZW4gYQorQ29tbWVyY2lhbCBDb250cmlidXRvci4gSWYgdGhhdCBDb21tZXJjaWFsIENvbnRyaWJ1dG9yIHRoZW4gbWFrZXMgcGVyZm9ybWFuY2UKK2NsYWltcywgb3Igb2ZmZXJzIHdhcnJhbnRpZXMgcmVsYXRlZCB0byBQcm9kdWN0IFgsIHRob3NlIHBlcmZvcm1hbmNlIGNsYWltcyBhbmQKK3dhcnJhbnRpZXMgYXJlIHN1Y2ggQ29tbWVyY2lhbCBDb250cmlidXRvcidzIHJlc3BvbnNpYmlsaXR5IGFsb25lLiBVbmRlciB0aGlzCitzZWN0aW9uLCB0aGUgQ29tbWVyY2lhbCBDb250cmlidXRvciB3b3VsZCBoYXZlIHRvIGRlZmVuZCBjbGFpbXMgYWdhaW5zdCB0aGUKK290aGVyIENvbnRyaWJ1dG9ycyByZWxhdGVkIHRvIHRob3NlIHBlcmZvcm1hbmNlIGNsYWltcyBhbmQgd2FycmFudGllcywgYW5kIGlmIGEKK2NvdXJ0IHJlcXVpcmVzIGFueSBvdGhlciBDb250cmlidXRvciB0byBwYXkgYW55IGRhbWFnZXMgYXMgYSByZXN1bHQsIHRoZQorQ29tbWVyY2lhbCBDb250cmlidXRvciBtdXN0IHBheSB0aG9zZSBkYW1hZ2VzLjwvc3Bhbj4gPC9wPgorCis8cD48Yj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+NS4gTk8gV0FSUkFOVFk8L3NwYW4+PC9iPiA8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5FWENFUFQgQVMgRVhQUkVTU0xZIFNFVCBGT1JUSCBJTiBUSElTCitBR1JFRU1FTlQsIFRIRSBQUk9HUkFNIElTIFBST1ZJREVEIE9OIEFOICZxdW90O0FTIElTJnF1b3Q7IEJBU0lTLCBXSVRIT1VUCitXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIEVJVEhFUiBFWFBSRVNTIE9SIElNUExJRUQgSU5DTFVESU5HLAorV0lUSE9VVCBMSU1JVEFUSU9OLCBBTlkgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIFRJVExFLCBOT04tSU5GUklOR0VNRU5ULAorTUVSQ0hBTlRBQklMSVRZIE9SIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBFYWNoIFJlY2lwaWVudCBpcyBzb2xlbHkKK3Jlc3BvbnNpYmxlIGZvciBkZXRlcm1pbmluZyB0aGUgYXBwcm9wcmlhdGVuZXNzIG9mIHVzaW5nIGFuZCBkaXN0cmlidXRpbmcgdGhlCitQcm9ncmFtIGFuZCBhc3N1bWVzIGFsbCByaXNrcyBhc3NvY2lhdGVkIHdpdGggaXRzIGV4ZXJjaXNlIG9mIHJpZ2h0cyB1bmRlciB0aGlzCitBZ3JlZW1lbnQgLCBpbmNsdWRpbmcgYnV0IG5vdCBsaW1pdGVkIHRvIHRoZSByaXNrcyBhbmQgY29zdHMgb2YgcHJvZ3JhbSBlcnJvcnMsCitjb21wbGlhbmNlIHdpdGggYXBwbGljYWJsZSBsYXdzLCBkYW1hZ2UgdG8gb3IgbG9zcyBvZiBkYXRhLCBwcm9ncmFtcyBvcgorZXF1aXBtZW50LCBhbmQgdW5hdmFpbGFiaWxpdHkgb3IgaW50ZXJydXB0aW9uIG9mIG9wZXJhdGlvbnMuIDwvc3Bhbj48L3A+CisKKzxwPjxiPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz42LiBESVNDTEFJTUVSIE9GIExJQUJJTElUWTwvc3Bhbj48L2I+IDwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkVYQ0VQVCBBUyBFWFBSRVNTTFkgU0VUIEZPUlRIIElOIFRISVMKK0FHUkVFTUVOVCwgTkVJVEhFUiBSRUNJUElFTlQgTk9SIEFOWSBDT05UUklCVVRPUlMgU0hBTEwgSEFWRSBBTlkgTElBQklMSVRZIEZPUgorQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisoSU5DTFVESU5HIFdJVEhPVVQgTElNSVRBVElPTiBMT1NUIFBST0ZJVFMpLCBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcKK05FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT1IgRElTVFJJQlVUSU9OIE9GCitUSEUgUFJPR1JBTSBPUiBUSEUgRVhFUkNJU0UgT0YgQU5ZIFJJR0hUUyBHUkFOVEVEIEhFUkVVTkRFUiwgRVZFTiBJRiBBRFZJU0VEIE9GCitUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLjwvc3Bhbj4gPC9wPgorCis8cD48Yj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+Ny4gR0VORVJBTDwvc3Bhbj48L2I+IDwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPklmIGFueSBwcm92aXNpb24gb2YgdGhpcyBBZ3JlZW1lbnQgaXMgaW52YWxpZAorb3IgdW5lbmZvcmNlYWJsZSB1bmRlciBhcHBsaWNhYmxlIGxhdywgaXQgc2hhbGwgbm90IGFmZmVjdCB0aGUgdmFsaWRpdHkgb3IKK2VuZm9yY2VhYmlsaXR5IG9mIHRoZSByZW1haW5kZXIgb2YgdGhlIHRlcm1zIG9mIHRoaXMgQWdyZWVtZW50LCBhbmQgd2l0aG91dAorZnVydGhlciBhY3Rpb24gYnkgdGhlIHBhcnRpZXMgaGVyZXRvLCBzdWNoIHByb3Zpc2lvbiBzaGFsbCBiZSByZWZvcm1lZCB0byB0aGUKK21pbmltdW0gZXh0ZW50IG5lY2Vzc2FyeSB0byBtYWtlIHN1Y2ggcHJvdmlzaW9uIHZhbGlkIGFuZCBlbmZvcmNlYWJsZS48L3NwYW4+IDwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPklmIFJlY2lwaWVudCBpbnN0aXR1dGVzIHBhdGVudCBsaXRpZ2F0aW9uCithZ2FpbnN0IGFueSBlbnRpdHkgKGluY2x1ZGluZyBhIGNyb3NzLWNsYWltIG9yIGNvdW50ZXJjbGFpbSBpbiBhIGxhd3N1aXQpCithbGxlZ2luZyB0aGF0IHRoZSBQcm9ncmFtIGl0c2VsZiAoZXhjbHVkaW5nIGNvbWJpbmF0aW9ucyBvZiB0aGUgUHJvZ3JhbSB3aXRoCitvdGhlciBzb2Z0d2FyZSBvciBoYXJkd2FyZSkgaW5mcmluZ2VzIHN1Y2ggUmVjaXBpZW50J3MgcGF0ZW50KHMpLCB0aGVuIHN1Y2gKK1JlY2lwaWVudCdzIHJpZ2h0cyBncmFudGVkIHVuZGVyIFNlY3Rpb24gMihiKSBzaGFsbCB0ZXJtaW5hdGUgYXMgb2YgdGhlIGRhdGUKK3N1Y2ggbGl0aWdhdGlvbiBpcyBmaWxlZC4gPC9zcGFuPjwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkFsbCBSZWNpcGllbnQncyByaWdodHMgdW5kZXIgdGhpcyBBZ3JlZW1lbnQKK3NoYWxsIHRlcm1pbmF0ZSBpZiBpdCBmYWlscyB0byBjb21wbHkgd2l0aCBhbnkgb2YgdGhlIG1hdGVyaWFsIHRlcm1zIG9yCitjb25kaXRpb25zIG9mIHRoaXMgQWdyZWVtZW50IGFuZCBkb2VzIG5vdCBjdXJlIHN1Y2ggZmFpbHVyZSBpbiBhIHJlYXNvbmFibGUKK3BlcmlvZCBvZiB0aW1lIGFmdGVyIGJlY29taW5nIGF3YXJlIG9mIHN1Y2ggbm9uY29tcGxpYW5jZS4gSWYgYWxsIFJlY2lwaWVudCdzCityaWdodHMgdW5kZXIgdGhpcyBBZ3JlZW1lbnQgdGVybWluYXRlLCBSZWNpcGllbnQgYWdyZWVzIHRvIGNlYXNlIHVzZSBhbmQKK2Rpc3RyaWJ1dGlvbiBvZiB0aGUgUHJvZ3JhbSBhcyBzb29uIGFzIHJlYXNvbmFibHkgcHJhY3RpY2FibGUuIEhvd2V2ZXIsCitSZWNpcGllbnQncyBvYmxpZ2F0aW9ucyB1bmRlciB0aGlzIEFncmVlbWVudCBhbmQgYW55IGxpY2Vuc2VzIGdyYW50ZWQgYnkKK1JlY2lwaWVudCByZWxhdGluZyB0byB0aGUgUHJvZ3JhbSBzaGFsbCBjb250aW51ZSBhbmQgc3Vydml2ZS4gPC9zcGFuPjwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkV2ZXJ5b25lIGlzIHBlcm1pdHRlZCB0byBjb3B5IGFuZCBkaXN0cmlidXRlCitjb3BpZXMgb2YgdGhpcyBBZ3JlZW1lbnQsIGJ1dCBpbiBvcmRlciB0byBhdm9pZCBpbmNvbnNpc3RlbmN5IHRoZSBBZ3JlZW1lbnQgaXMKK2NvcHlyaWdodGVkIGFuZCBtYXkgb25seSBiZSBtb2RpZmllZCBpbiB0aGUgZm9sbG93aW5nIG1hbm5lci4gVGhlIEFncmVlbWVudAorU3Rld2FyZCByZXNlcnZlcyB0aGUgcmlnaHQgdG8gcHVibGlzaCBuZXcgdmVyc2lvbnMgKGluY2x1ZGluZyByZXZpc2lvbnMpIG9mCit0aGlzIEFncmVlbWVudCBmcm9tIHRpbWUgdG8gdGltZS4gTm8gb25lIG90aGVyIHRoYW4gdGhlIEFncmVlbWVudCBTdGV3YXJkIGhhcwordGhlIHJpZ2h0IHRvIG1vZGlmeSB0aGlzIEFncmVlbWVudC4gVGhlIEVjbGlwc2UgRm91bmRhdGlvbiBpcyB0aGUgaW5pdGlhbAorQWdyZWVtZW50IFN0ZXdhcmQuIFRoZSBFY2xpcHNlIEZvdW5kYXRpb24gbWF5IGFzc2lnbiB0aGUgcmVzcG9uc2liaWxpdHkgdG8KK3NlcnZlIGFzIHRoZSBBZ3JlZW1lbnQgU3Rld2FyZCB0byBhIHN1aXRhYmxlIHNlcGFyYXRlIGVudGl0eS4gRWFjaCBuZXcgdmVyc2lvbgorb2YgdGhlIEFncmVlbWVudCB3aWxsIGJlIGdpdmVuIGEgZGlzdGluZ3Vpc2hpbmcgdmVyc2lvbiBudW1iZXIuIFRoZSBQcm9ncmFtCisoaW5jbHVkaW5nIENvbnRyaWJ1dGlvbnMpIG1heSBhbHdheXMgYmUgZGlzdHJpYnV0ZWQgc3ViamVjdCB0byB0aGUgdmVyc2lvbiBvZgordGhlIEFncmVlbWVudCB1bmRlciB3aGljaCBpdCB3YXMgcmVjZWl2ZWQuIEluIGFkZGl0aW9uLCBhZnRlciBhIG5ldyB2ZXJzaW9uIG9mCit0aGUgQWdyZWVtZW50IGlzIHB1Ymxpc2hlZCwgQ29udHJpYnV0b3IgbWF5IGVsZWN0IHRvIGRpc3RyaWJ1dGUgdGhlIFByb2dyYW0KKyhpbmNsdWRpbmcgaXRzIENvbnRyaWJ1dGlvbnMpIHVuZGVyIHRoZSBuZXcgdmVyc2lvbi4gRXhjZXB0IGFzIGV4cHJlc3NseSBzdGF0ZWQKK2luIFNlY3Rpb25zIDIoYSkgYW5kIDIoYikgYWJvdmUsIFJlY2lwaWVudCByZWNlaXZlcyBubyByaWdodHMgb3IgbGljZW5zZXMgdG8KK3RoZSBpbnRlbGxlY3R1YWwgcHJvcGVydHkgb2YgYW55IENvbnRyaWJ1dG9yIHVuZGVyIHRoaXMgQWdyZWVtZW50LCB3aGV0aGVyCitleHByZXNzbHksIGJ5IGltcGxpY2F0aW9uLCBlc3RvcHBlbCBvciBvdGhlcndpc2UuIEFsbCByaWdodHMgaW4gdGhlIFByb2dyYW0gbm90CitleHByZXNzbHkgZ3JhbnRlZCB1bmRlciB0aGlzIEFncmVlbWVudCBhcmUgcmVzZXJ2ZWQuPC9zcGFuPiA8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5UaGlzIEFncmVlbWVudCBpcyBnb3Zlcm5lZCBieSB0aGUgbGF3cyBvZiB0aGUKK1N0YXRlIG9mIE5ldyBZb3JrIGFuZCB0aGUgaW50ZWxsZWN0dWFsIHByb3BlcnR5IGxhd3Mgb2YgdGhlIFVuaXRlZCBTdGF0ZXMgb2YKK0FtZXJpY2EuIE5vIHBhcnR5IHRvIHRoaXMgQWdyZWVtZW50IHdpbGwgYnJpbmcgYSBsZWdhbCBhY3Rpb24gdW5kZXIgdGhpcworQWdyZWVtZW50IG1vcmUgdGhhbiBvbmUgeWVhciBhZnRlciB0aGUgY2F1c2Ugb2YgYWN0aW9uIGFyb3NlLiBFYWNoIHBhcnR5IHdhaXZlcworaXRzIHJpZ2h0cyB0byBhIGp1cnkgdHJpYWwgaW4gYW55IHJlc3VsdGluZyBsaXRpZ2F0aW9uLjwvc3Bhbj4gPC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWw+PCFbaWYgIXN1cHBvcnRFbXB0eVBhcmFzXT4mbmJzcDs8IVtlbmRpZl0+PG86cD48L286cD48L3A+CisKKzwvZGl2PgorCis8L2JvZHk+CisKKzwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9saWIveGVyY2VzSW1wbC5qYXIgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9saWIveGVyY2VzSW1wbC5qYXIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzM5OTBlOAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L2xpYi94ZXJjZXNJbXBsLmphcgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9saWIveG1sLWFwaXMuamFyIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvbGliL3htbC1hcGlzLmphcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMzM4ZmI2Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvbGliL3htbC1hcGlzLmphcgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9ub3RpY2UuaHRtbCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L25vdGljZS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM2YWY5NjYKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9ub3RpY2UuaHRtbApAQCAtMCwwICsxLDc5IEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wLy9FTiI+Cis8aHRtbD4KKzxoZWFkPgorPG1ldGEgaHR0cC1lcXVpdj1Db250ZW50LVR5cGUgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PWlzby04ODU5LTEiPgorPHRpdGxlPkVjbGlwc2Uub3JnIFNvZnR3YXJlIFVzZXIgQWdyZWVtZW50PC90aXRsZT4KKzwvaGVhZD4KKworPGJvZHkgbGFuZz0iRU4tVVMiIGxpbms9Ymx1ZSB2bGluaz1wdXJwbGU+Cis8aDI+RWNsaXBzZSBGb3VuZGF0aW9uIFNvZnR3YXJlIFVzZXIgQWdyZWVtZW50PC9oMj4KKzxwPk1hcmNoIDE3LCAyMDA1PC9wPgorCis8aDM+VXNhZ2UgT2YgQ29udGVudDwvaDM+CisKKzxwPlRIRSBFQ0xJUFNFIEZPVU5EQVRJT04gTUFLRVMgQVZBSUxBQkxFIFNPRlRXQVJFLCBET0NVTUVOVEFUSU9OLCBJTkZPUk1BVElPTiBBTkQvT1IgT1RIRVIgTUFURVJJQUxTIEZPUiBPUEVOIFNPVVJDRSBQUk9KRUNUUworICAgKENPTExFQ1RJVkVMWSAmcXVvdDtDT05URU5UJnF1b3Q7KS4gIFVTRSBPRiBUSEUgQ09OVEVOVCBJUyBHT1ZFUk5FRCBCWSBUSEUgVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgVEhJUyBBR1JFRU1FTlQgQU5EL09SIFRIRSBURVJNUyBBTkQKKyAgIENPTkRJVElPTlMgT0YgTElDRU5TRSBBR1JFRU1FTlRTIE9SIE5PVElDRVMgSU5ESUNBVEVEIE9SIFJFRkVSRU5DRUQgQkVMT1cuICBCWSBVU0lORyBUSEUgQ09OVEVOVCwgWU9VIEFHUkVFIFRIQVQgWU9VUiBVU0UKKyAgIE9GIFRIRSBDT05URU5UIElTIEdPVkVSTkVEIEJZIFRISVMgQUdSRUVNRU5UIEFORC9PUiBUSEUgVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgQU5ZIEFQUExJQ0FCTEUgTElDRU5TRSBBR1JFRU1FTlRTIE9SCisgICBOT1RJQ0VTIElORElDQVRFRCBPUiBSRUZFUkVOQ0VEIEJFTE9XLiAgSUYgWU9VIERPIE5PVCBBR1JFRSBUTyBUSEUgVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgVEhJUyBBR1JFRU1FTlQgQU5EIFRIRSBURVJNUyBBTkQKKyAgIENPTkRJVElPTlMgT0YgQU5ZIEFQUExJQ0FCTEUgTElDRU5TRSBBR1JFRU1FTlRTIE9SIE5PVElDRVMgSU5ESUNBVEVEIE9SIFJFRkVSRU5DRUQgQkVMT1csIFRIRU4gWU9VIE1BWSBOT1QgVVNFIFRIRSBDT05URU5ULjwvcD4KKyAgIAorPGgzPkFwcGxpY2FibGUgTGljZW5zZXM8L2gzPiAgIAorICAgCis8cD5Vbmxlc3Mgb3RoZXJ3aXNlIGluZGljYXRlZCwgYWxsIENvbnRlbnQgbWFkZSBhdmFpbGFibGUgYnkgdGhlIEVjbGlwc2UgRm91bmRhdGlvbiBpcyBwcm92aWRlZCB0byB5b3UgdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4wCisgICAoJnF1b3Q7RVBMJnF1b3Q7KS4gIEEgY29weSBvZiB0aGUgRVBMIGlzIHByb3ZpZGVkIHdpdGggdGhpcyBDb250ZW50IGFuZCBpcyBhbHNvIGF2YWlsYWJsZSBhdCA8YSBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbCI+aHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWw8L2E+LgorICAgRm9yIHB1cnBvc2VzIG9mIHRoZSBFUEwsICZxdW90O1Byb2dyYW0mcXVvdDsgd2lsbCBtZWFuIHRoZSBDb250ZW50LjwvcD4KKworPHA+Q29udGVudCBpbmNsdWRlcywgYnV0IGlzIG5vdCBsaW1pdGVkIHRvLCBzb3VyY2UgY29kZSwgb2JqZWN0IGNvZGUsIGRvY3VtZW50YXRpb24gYW5kIG90aGVyIGZpbGVzIG1haW50YWluZWQgaW4gdGhlIEVjbGlwc2Uub3JnIENWUyByZXBvc2l0b3J5ICgmcXVvdDtSZXBvc2l0b3J5JnF1b3Q7KSBpbiBDVlMKKyAgIG1vZHVsZXMgKCZxdW90O01vZHVsZXMmcXVvdDspIGFuZCBtYWRlIGF2YWlsYWJsZSBhcyBkb3dubG9hZGFibGUgYXJjaGl2ZXMgKCZxdW90O0Rvd25sb2FkcyZxdW90OykuPC9wPgorICAgCis8dWw+CisJPGxpPkNvbnRlbnQgbWF5IGJlIHN0cnVjdHVyZWQgYW5kIHBhY2thZ2VkIGludG8gbW9kdWxlcyB0byBmYWNpbGl0YXRlIGRlbGl2ZXJpbmcsIGV4dGVuZGluZywgYW5kIHVwZ3JhZGluZyB0aGUgQ29udGVudC4gIFR5cGljYWwgbW9kdWxlcyBtYXkgaW5jbHVkZSBwbHVnLWlucyAoJnF1b3Q7UGx1Zy1pbnMmcXVvdDspLCBwbHVnLWluIGZyYWdtZW50cyAoJnF1b3Q7RnJhZ21lbnRzJnF1b3Q7KSwgYW5kIGZlYXR1cmVzICgmcXVvdDtGZWF0dXJlcyZxdW90OykuPC9saT4KKwk8bGk+RWFjaCBQbHVnLWluIG9yIEZyYWdtZW50IG1heSBiZSBwYWNrYWdlZCBhcyBhIHN1Yi1kaXJlY3Rvcnkgb3IgSkFSIChKYXZhJnRyYWRlOyBBUmNoaXZlKSBpbiBhIGRpcmVjdG9yeSBuYW1lZCAmcXVvdDtwbHVnaW5zJnF1b3Q7LjwvbGk+CisJPGxpPkEgRmVhdHVyZSBpcyBhIGJ1bmRsZSBvZiBvbmUgb3IgbW9yZSBQbHVnLWlucyBhbmQvb3IgRnJhZ21lbnRzIGFuZCBhc3NvY2lhdGVkIG1hdGVyaWFsLiAgRWFjaCBGZWF0dXJlIG1heSBiZSBwYWNrYWdlZCBhcyBhIHN1Yi1kaXJlY3RvcnkgaW4gYSBkaXJlY3RvcnkgbmFtZWQgJnF1b3Q7ZmVhdHVyZXMmcXVvdDsuICBXaXRoaW4gYSBGZWF0dXJlLCBmaWxlcyBuYW1lZCAmcXVvdDtmZWF0dXJlLnhtbCZxdW90OyBtYXkgY29udGFpbiBhIGxpc3Qgb2YgdGhlIG5hbWVzIGFuZCB2ZXJzaW9uIG51bWJlcnMgb2YgdGhlIFBsdWctaW5zCisgICAgICBhbmQvb3IgRnJhZ21lbnRzIGFzc29jaWF0ZWQgd2l0aCB0aGF0IEZlYXR1cmUuPC9saT4KKwk8bGk+RmVhdHVyZXMgbWF5IGFsc28gaW5jbHVkZSBvdGhlciBGZWF0dXJlcyAoJnF1b3Q7SW5jbHVkZWQgRmVhdHVyZXMmcXVvdDspLiBXaXRoaW4gYSBGZWF0dXJlLCBmaWxlcyBuYW1lZCAmcXVvdDtmZWF0dXJlLnhtbCZxdW90OyBtYXkgY29udGFpbiBhIGxpc3Qgb2YgdGhlIG5hbWVzIGFuZCB2ZXJzaW9uIG51bWJlcnMgb2YgSW5jbHVkZWQgRmVhdHVyZXMuPC9saT4KKzwvdWw+ICAgCisgCis8cD5UaGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgZ292ZXJuaW5nIFBsdWctaW5zIGFuZCBGcmFnbWVudHMgc2hvdWxkIGJlIGNvbnRhaW5lZCBpbiBmaWxlcyBuYW1lZCAmcXVvdDthYm91dC5odG1sJnF1b3Q7ICgmcXVvdDtBYm91dHMmcXVvdDspLiBUaGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgZ292ZXJuaW5nIEZlYXR1cmVzIGFuZAorSW5jbHVkZWQgRmVhdHVyZXMgc2hvdWxkIGJlIGNvbnRhaW5lZCBpbiBmaWxlcyBuYW1lZCAmcXVvdDtsaWNlbnNlLmh0bWwmcXVvdDsgKCZxdW90O0ZlYXR1cmUgTGljZW5zZXMmcXVvdDspLiAgQWJvdXRzIGFuZCBGZWF0dXJlIExpY2Vuc2VzIG1heSBiZSBsb2NhdGVkIGluIGFueSBkaXJlY3Rvcnkgb2YgYSBEb3dubG9hZCBvciBNb2R1bGUKK2luY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvIHRoZSBmb2xsb3dpbmcgbG9jYXRpb25zOjwvcD4KKworPHVsPgorCTxsaT5UaGUgdG9wLWxldmVsIChyb290KSBkaXJlY3Rvcnk8L2xpPgorCTxsaT5QbHVnLWluIGFuZCBGcmFnbWVudCBkaXJlY3RvcmllczwvbGk+CisJPGxpPkluc2lkZSBQbHVnLWlucyBhbmQgRnJhZ21lbnRzIHBhY2thZ2VkIGFzIEpBUnM8L2xpPgorCTxsaT5TdWItZGlyZWN0b3JpZXMgb2YgdGhlIGRpcmVjdG9yeSBuYW1lZCAmcXVvdDtzcmMmcXVvdDsgb2YgY2VydGFpbiBQbHVnLWluczwvbGk+CisJPGxpPkZlYXR1cmUgZGlyZWN0b3JpZXM8L2xpPgorPC91bD4KKwkJCis8cD5Ob3RlOiBpZiBhIEZlYXR1cmUgbWFkZSBhdmFpbGFibGUgYnkgdGhlIEVjbGlwc2UgRm91bmRhdGlvbiBpcyBpbnN0YWxsZWQgdXNpbmcgdGhlIEVjbGlwc2UgVXBkYXRlIE1hbmFnZXIsIHlvdSBtdXN0IGFncmVlIHRvIGEgbGljZW5zZSAoJnF1b3Q7RmVhdHVyZSBVcGRhdGUgTGljZW5zZSZxdW90OykgZHVyaW5nIHRoZQoraW5zdGFsbGF0aW9uIHByb2Nlc3MuICBJZiB0aGUgRmVhdHVyZSBjb250YWlucyBJbmNsdWRlZCBGZWF0dXJlcywgdGhlIEZlYXR1cmUgVXBkYXRlIExpY2Vuc2Ugc2hvdWxkIGVpdGhlciBwcm92aWRlIHlvdSB3aXRoIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBnb3Zlcm5pbmcgdGhlIEluY2x1ZGVkIEZlYXR1cmVzIG9yCitpbmZvcm0geW91IHdoZXJlIHlvdSBjYW4gbG9jYXRlIHRoZW0uICBGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlcyBtYXkgYmUgZm91bmQgaW4gdGhlICZxdW90O2xpY2Vuc2UmcXVvdDsgcHJvcGVydHkgb2YgZmlsZXMgbmFtZWQgJnF1b3Q7ZmVhdHVyZS5wcm9wZXJ0aWVzJnF1b3Q7IGZvdW5kIHdpdGhpbiBhIEZlYXR1cmUuCitTdWNoIEFib3V0cywgRmVhdHVyZSBMaWNlbnNlcywgYW5kIEZlYXR1cmUgVXBkYXRlIExpY2Vuc2VzIGNvbnRhaW4gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIChvciByZWZlcmVuY2VzIHRvIHN1Y2ggdGVybXMgYW5kIGNvbmRpdGlvbnMpIHRoYXQgZ292ZXJuIHlvdXIgdXNlIG9mIHRoZSBhc3NvY2lhdGVkIENvbnRlbnQgaW4KK3RoYXQgZGlyZWN0b3J5LjwvcD4KKworPHA+VEhFIEFCT1VUUywgRkVBVFVSRSBMSUNFTlNFUywgQU5EIEZFQVRVUkUgVVBEQVRFIExJQ0VOU0VTIE1BWSBSRUZFUiBUTyBUSEUgRVBMIE9SIE9USEVSIExJQ0VOU0UgQUdSRUVNRU5UUywgTk9USUNFUyBPUiBURVJNUyBBTkQgQ09ORElUSU9OUy4gIFNPTUUgT0YgVEhFU0UKK09USEVSIExJQ0VOU0UgQUdSRUVNRU5UUyBNQVkgSU5DTFVERSAoQlVUIEFSRSBOT1QgTElNSVRFRCBUTyk6PC9wPgorCis8dWw+CisJPGxpPkNvbW1vbiBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMCAoYXZhaWxhYmxlIGF0IDxhIGhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvY3BsLXYxMC5odG1sIj5odHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2NwbC12MTAuaHRtbDwvYT4pPC9saT4KKwk8bGk+QXBhY2hlIFNvZnR3YXJlIExpY2Vuc2UgMS4xIChhdmFpbGFibGUgYXQgPGEgaHJlZj0iaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UiPmh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFPC9hPik8L2xpPgorCTxsaT5BcGFjaGUgU29mdHdhcmUgTGljZW5zZSAyLjAgKGF2YWlsYWJsZSBhdCA8YSBocmVmPSJodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAiPmh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMDwvYT4pPC9saT4KKwk8bGk+SUJNIFB1YmxpYyBMaWNlbnNlIDEuMCAoYXZhaWxhYmxlIGF0IDxhIGhyZWY9Imh0dHA6Ly9vc3Muc29mdHdhcmUuaWJtLmNvbS9kZXZlbG9wZXJ3b3Jrcy9vcGVuc291cmNlL2xpY2Vuc2UxMC5odG1sIj5odHRwOi8vb3NzLnNvZnR3YXJlLmlibS5jb20vZGV2ZWxvcGVyd29ya3Mvb3BlbnNvdXJjZS9saWNlbnNlMTAuaHRtbDwvYT4pPC9saT4JCisJPGxpPk1ldHJvIExpbmsgUHVibGljIExpY2Vuc2UgMS4wMCAoYXZhaWxhYmxlIGF0IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbmdyb3VwLm9yZy9vcGVubW90aWYvc3VwcG9ydGVycy9tZXRyb2xpbmsvbGljZW5zZS5odG1sIj5odHRwOi8vd3d3Lm9wZW5ncm91cC5vcmcvb3Blbm1vdGlmL3N1cHBvcnRlcnMvbWV0cm9saW5rL2xpY2Vuc2UuaHRtbDwvYT4pPC9saT4KKwk8bGk+TW96aWxsYSBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMSAoYXZhaWxhYmxlIGF0IDxhIGhyZWY9Imh0dHA6Ly93d3cubW96aWxsYS5vcmcvTVBML01QTC0xLjEuaHRtbCI+aHR0cDovL3d3dy5tb3ppbGxhLm9yZy9NUEwvTVBMLTEuMS5odG1sPC9hPik8L2xpPgorPC91bD4KKworPHA+SVQgSVMgWU9VUiBPQkxJR0FUSU9OIFRPIFJFQUQgQU5EIEFDQ0VQVCBBTEwgU1VDSCBURVJNUyBBTkQgQ09ORElUSU9OUyBQUklPUiBUTyBVU0UgT0YgVEhFIENPTlRFTlQuICBJZiBubyBBYm91dCwgRmVhdHVyZSBMaWNlbnNlLCBvciBGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlIGlzIHByb3ZpZGVkLCBwbGVhc2UKK2NvbnRhY3QgdGhlIEVjbGlwc2UgRm91bmRhdGlvbiB0byBkZXRlcm1pbmUgd2hhdCB0ZXJtcyBhbmQgY29uZGl0aW9ucyBnb3Zlcm4gdGhhdCBwYXJ0aWN1bGFyIENvbnRlbnQuPC9wPgorCis8aDM+Q3J5cHRvZ3JhcGh5PC9oMz4KKworPHA+Q29udGVudCBtYXkgY29udGFpbiBlbmNyeXB0aW9uIHNvZnR3YXJlLiBUaGUgY291bnRyeSBpbiB3aGljaCB5b3UgYXJlIGN1cnJlbnRseSBtYXkgaGF2ZSByZXN0cmljdGlvbnMgb24gdGhlIGltcG9ydCwgcG9zc2Vzc2lvbiwgYW5kIHVzZSwgYW5kL29yIHJlLWV4cG9ydCB0bworICAgYW5vdGhlciBjb3VudHJ5LCBvZiBlbmNyeXB0aW9uIHNvZnR3YXJlLiBCRUZPUkUgdXNpbmcgYW55IGVuY3J5cHRpb24gc29mdHdhcmUsIHBsZWFzZSBjaGVjayB0aGUgY291bnRyeSdzIGxhd3MsIHJlZ3VsYXRpb25zIGFuZCBwb2xpY2llcyBjb25jZXJuaW5nIHRoZSBpbXBvcnQsCisgICBwb3NzZXNzaW9uLCBvciB1c2UsIGFuZCByZS1leHBvcnQgb2YgZW5jcnlwdGlvbiBzb2Z0d2FyZSwgdG8gc2VlIGlmIHRoaXMgaXMgcGVybWl0dGVkLjwvcD4KKyAgIAorPHNtYWxsPkphdmEgYW5kIGFsbCBKYXZhLWJhc2VkIHRyYWRlbWFya3MgYXJlIHRyYWRlbWFya3Mgb2YgU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiBpbiB0aGUgVW5pdGVkIFN0YXRlcywgb3RoZXIgY291bnRyaWVzLCBvciBib3RoLjwvc21hbGw+ICAgCis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9BRkdIQU5JU1RBTl9BUkVBLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL0FGR0hBTklTVEFOX0FSRUEudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNiYWEzYjgKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9BRkdIQU5JU1RBTl9BUkVBLnR4dApAQCAtMCwwICsxLDM1IEBACitBZmdoYW5pc3RhbjowOjY1MjA5MAorQkFEQUtIU0hBTgk6CTEJOgk0NDA1OS4zMAorQkFER0hJUwk6CTEJOgkyMDU5MC42MAorQkFHSExBTiBbQkFHSElBTl0JOgkxCToJMjExMTguNDAKK0JBTEtICToJMQk6CTE3MjQ4LjUwCitCQU1JQU4JOgkxCToJMTQxNzUuMzAKK0RZS09ORAk6CTEJOgkwCitGQVJBSAk6CTEJOgk0ODQ3MC45MAorRkFSWUFCCToJMQk6CTIwMjkyLjgwCitHSEFaTkkgW0dIQVpOXQk6CTEJOgkyMjkxNC42MAorR0hPV1IJOgkxCToJMzY0NzguODAKK0hFTE1BTkQJOgkxCToJNTg1ODMuNzAKK0hFUkFUCToJMQk6CTU0Nzc4LjAwCitKT1daSkFOCToJMQk6CTExNzk4LjMwCitLQUJVTCBbS0FCT0xdCToJMQk6CTQ0NjEuNjAKK0tBTkRBSEFSCToJMQk6CTU0MDIyLjAwCitLQVBJU0EJOgkxCToJMTg0Mi4xMAorS0hPV1NUCToJMQk6CTQxNTEuNTAKK0tPTkFSIFtLVU5BUl0JOgkxCToJNDk0MS41MAorS09ORE9aIFtLVU5EVVpdIFtLT05EVVpdCToJMQk6CTgwMzkuNzAKK0xBR0hNQU4JOgkxCToJMzg0Mi42MAorTE9XR0FSCToJMQk6CTM4NzkuODAKK05BTkdSQUhBUiBbTkFOR0FSSEFSXSBbTkFOR0FSSEFdCToJMQk6CTc3MjcuNDAKK05JTVJVWgk6CTEJOgk0MTAwNS40MAorTlJFU1ROCToJMQk6CTkyMjUuMDAKK09SVVpHQU4gW1VSVVpHQU5dCToJMQk6CTE5NDgyLjQwCitQQUtUSUEJOgkxCToJNjQzMS43MAorUEFLVElLQQk6CTEJOgkwCitQQU5KU0hSCToJMQk6CTk1ODQuNDAKK1BBUldBTiBbUEFSVkFOXQk6CTEJOgkxMTI2MS45MAorU0FNQU5HQU4JOgkxCToJMTU5OTkuMjAKK1NBUiBFIFBPTAk6CTEJOgkxMjMzMy4wMAorVEFLSEFSCToJMQk6CTMwNzg0LjUwCitXQVJEQUsgW1dBUkRBR10gW1ZBUkRBS10JOgkxCToJODkzOC4xMAorWkFCT0wgW1pBQlVMXQk6CTEJOgkxNzM0My41MApkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvQUZHSEFOSVNUQU5fUE9QVUxBVElPTi50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9BRkdIQU5JU1RBTl9QT1BVTEFUSU9OLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZjk3ZWYzCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvQUZHSEFOSVNUQU5fUE9QVUxBVElPTi50eHQKQEAgLTAsMCArMSwzNSBAQAorQWZnaGFuaXN0YW46MDoyOTg2MzAwMAorQkFEQUtIU0hBTgk6CTEJOgk3MTUwMDAKK0JBREdISVMJOgkxCToJMzAxMDAwCitCQUdITEFOIFtCQUdISUFOXQk6CTEJOgk3NDUwMDAKK0JBTEtICToJMQk6CTg2OTAwMAorQkFNSUFOCToJMQk6CTM1NjAwMAorRFlLT05ECToJMQk6CTAgCitGQVJBSAk6CTEJOgkzMzgwMDAKK0ZBUllBQgk6CTEJOgk3ODIwMDAKK0dIQVpOSSBbR0hBWk5dCToJMQk6CTkzMTAwMAorR0hPV1IJOgkxCToJNDg1MDAwCitIRUxNQU5ECToJMQk6CTc0NTAwMAorSEVSQVQJOgkxCToJMTE4MjAwMAorSk9XWkpBTgk6CTEJOgk0NDEwMDAKK0tBQlVMIFtLQUJPTF0JOgkxCToJMzMxNDAwMAorS0FOREFIQVIJOgkxCToJODg2MDAwCitLQVBJU0EJOgkxCToJMzYwMDAwCitLSE9XU1QJOgkxCToJMzAwMDAwCitLT05BUiBbS1VOQVJdCToJMQk6CTMyMTAwMAorS09ORE9aIFtLVU5EVVpdIFtLT05EVVpdCToJMQk6CTgyMDAwMAorTEFHSE1BTgk6CTEJOgkzNzMwMDAKK0xPV0dBUgk6CTEJOgkyOTIwMDAKK05BTkdSQUhBUiBbTkFOR0FSSEFSXSBbTkFOR0FSSEFdCToJMQk6CTEwODkwMDAKK05JTVJVWgk6CTEJOgkxNDkwMDAKK05SRVNUTgk6CTEJOgkxMTIwMDAKK09SVVpHQU4gW1VSVVpHQU5dCToJMQk6CTM1MjAwMAorUEFLVElBCToJMQk6CTQxNTAwMAorUEFLVElLQQk6CTEJOgkwIAorUEFOSlNIUgk6CTEJOgk3MjYwMDAKK1BBUldBTiBbUEFSVkFOXQk6CTEJOgkzNzgwMDAKK1NBTUFOR0FOCToJMQk6CTQ2ODAwMAorU0FSIEUgUE9MCToJMQk6CTc1MDAwMAorVEFLSEFSCToJMQk6CTYyNzAwMAorV0FSREFLIFtXQVJEQUddIFtWQVJEQUtdCToJMQk6CTQxMzAwMAorWkFCT0wgW1pBQlVMXQk6CTEJOgkyNTgwMDAKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL0FMQkFOSUFfQVJFQS50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9BTEJBTklBX0FSRUEudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJlOTU1NWMKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9BTEJBTklBX0FSRUEudHh0CkBAIC0wLDAgKzEgQEAKKyBTaHFpcIlyaWEgOiAxIDogMjg3NDguMApkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvQUxCQU5JQV9QT1BVTEFUSU9OLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL0FMQkFOSUFfUE9QVUxBVElPTi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTJjNzI4ZgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL0FMQkFOSUFfUE9QVUxBVElPTi50eHQKQEAgLTAsMCArMSBAQAorIFNocWlwiXJpYSA6IDEgOiAzMjU1ODkxCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9BTEdFUklBX0FSRUEudHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvQUxHRVJJQV9BUkVBLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NGZiNzJlCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvQUxHRVJJQV9BUkVBLnR4dApAQCAtMCwwICsxLDUxIEBACitBTEdFUklBCToJMAk6CTIzODE3NDAKK0VsIFRBUkYgOiAxIDogMzMzOQorQURSQVIgW0FEUkFSMV0JOgkxCToJNDY0OTAwCitBSU4gREFGTEEJOgkxCToJNDI2MAorQUlOIFRBTU9VQ0hFTlQJOgkxCToJMjYzMAorQUxHRVIJOgkxCToJMjczCitBTk5BQkEJOgkxCToJMTQxMgorQkFUTkEJOgkxCToJMTIwMjgKK0VMIEJBWUFESAk6CTEJOgk3MDUzOQorQkVDSEFSCToJMQk6CTE2MTQwMAorQkVKQUlBCToJMQk6CTMzMjkKK0JJU0tSQQk6CTEJOgkyMTY3MQorQkxJREEJOgkxCToJMTU0MQorQk9SSkJPVUFSSVJFSgk6CTEJOgkzOTIwCitCT1VJUkEJOgkxCToJNDUxNworQk9VTUVSREVTCToJMQk6CTE1NTgKK0NITEVGCToJMQk6CTQ2NTEKK0NPTlNUQU5USU5FCToJMQk6CTIyODgKK0RKRUxGQQk6CTEJOgkyOTAzNQorR0hBUkRBSUEgW0dIQVJEQVNBXSA6CTEJOgk4NjEwNQorR1VFTE1BCToJMQk6CTM5MTEKK0lMTElaSQk6CTEJOgkyODQ2MTgKK0pJSkVMCToJMQk6CTIzOTkKK0tIRU5DSEVMQQk6CTEJOgk5ODExCitMQUdIT1VBVAk6CTEJOgkyNTA1MgorTUFTQ0FSQQk6CTEJOgk1OTYyCitNRURJQQk6CTEJOgk4NzAwCitNSUxBCToJMQk6CTM0MDgKK01PU1RBR0hBTkVNCToJMQk6CTIyNjkKK01TSUxBCToJMQk6CTE4NDQ3CitOQUFNQQk6CTEJOgkzMDY0NAorT1JBTgk6CTEJOgkyMTE0CitPVUFSR0xBCToJMQk6CTI3MDAzMAorRUwgT1VFRAk6CTEJOgk4MDAwMAorT1VNIEVMIEJPVUFHSEkJOgkxCToJNzYzOAorUkVMSVpBTkUJOgkxCToJNDg0MAorU0FJREEJOgkxCToJNjYzMQorU0VUSUYJOgkxCToJNjUwNAorU0lESSBCRUwgQUJCRVMJOgkxCToJOTE1MQorU0tJS0RBCToJMQk6CTQxMzcKK1NPVUsgQUhSQVMJOgkxCToJNDM2MAorVEFNQU5HSEFTU0VUCToJMQk6CTU1NjAwMAorVEFNQU5SQVNTRVQJOgkxCToJMjk5OAorVEVCRVNTQQk6CTEJOgkxMzg3OAorVEVORE9VRgk6CTEJOgkyMDA4NworVElBUkVUCToJMQk6CTIxNQorVElQQVpBCToJMQk6CTIyMTkKK1RJU1NFTVNJTFQJOgkxCToJMzE1MQorVElaSSBPVVpPVQk6CTEJOgkyOTkzCitUTEVNQ0VOCToJMQk6CTkwMTgKKwpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvQUxHRVJJQV9QT1BVTEFUSU9OLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL0FMR0VSSUFfUE9QVUxBVElPTi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjliMWFlMgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL0FMR0VSSUFfUE9QVUxBVElPTi50eHQKQEAgLTAsMCArMSw1MSBAQAorQUxHRVJJQQk6CTAJOgkzMjkzMDA5MQorRWwgVEFSRiA6IDEgOiAzNTI1ODgKK0FEUkFSIFtBRFJBUjFdCToJMQk6CTMxMTYxNQorQUlOIERBRkxBCToJMQk6CTY2MDM0MgorQUlOIFRBTU9VQ0hFTlQJOgkxCToJMzI3MzMxCitBTEdFUgk6CTEJOgkyNTYyNDI4CitBTk5BQkEJOgkxCToJNTU3ODE4CitCQVROQQk6CTEJOgk5NjI2MjMKK0VMIEJBWUFESAk6CTEJOgkxNjg3ODkKK0JFQ0hBUgk6CTEJOgkyMjU1NDYKK0JFSkFJQQk6CTEJOgk4NTY4NDAKK0JJU0tSQQk6CTEJOgk1NzU4NTgKK0JMSURBCToJMQk6CTc4NDI4MworQk9SSkJPVUFSSVJFSgk6CTEJOgk1NTU0MDIKK0JPVUlSQQk6CTEJOgk2Mjk1NjAKK0JPVU1FUkRFUwk6CTEJOgk2NDczODkKK0NITEVGCToJMQk6CTg1ODY5NQorQ09OU1RBTlRJTkUJOgkxCToJODEwOTE0CitESkVMRkEJOgkxCToJNzk3NzA2CitHSEFSREFJQSBbR0hBUkRBU0FdCToJMQk6CTMwMDUxNgorR1VFTE1BCToJMQk6CTQzMDAwMAorSUxMSVpJCToJMQk6CTM0MTA4CitKSUpFTAk6CTEJOgk1NzMyMDgKK0tIRU5DSEVMQQk6CTEJOgkzMjc5MTcKK0xBR0hPVUFUCToJMQk6CTMxNzEyNQorTUFTQ0FSQQk6CTEJOgk2NzYxOTIKK01FRElBCToJMQk6CTgwMjA3OAorTUlMQQk6CTEJOgk2NzQ0ODAKK01PU1RBR0hBTkVNCToJMQk6CTYzMTA1NworTVNJTEEJOgkxCToJODA1NTE5CitOQUFNQQk6CTEJOgkxMjczMTQKK09SQU4JOgkxCToJMTIxMzgzOQorT1VBUkdMQQk6CTEJOgk0NDU2MTkKK0VMIE9VRUQJOgkxCToJNTA0NDAxCitPVU0gRUwgQk9VQUdISQk6CTEJOgk1MTkxNzAKK1JFTElaQU5FCToJMQk6CTY0MjIwNQorU0FJREEJOgkxCToJMjc5NTI2CitTRVRJRgk6CTEJOgkxMzExNDEzCitTSURJIEJFTCBBQkJFUwk6CTEJOgk1MjU2MzIKK1NLSUtEQQk6CTEJOgk3ODYxNTQKK1NPVUsgQUhSQVMJOgkxCToJMzY3NDU1CitUQU1BTkdIQVNTRVQJOgkxCToJMTM3MTc1CitUQU1BTlJBU1NFVAk6CTEJOgkzNTI1ODgKK1RFQkVTU0EJOgkxCToJNTQ5MDY2CitURU5ET1VGCToJMQk6CTcyNTg1MworVElBUkVUCToJMQk6CTI3MDYwCitUSVBBWkEJOgkxCToJNTA2MDUzCitUSVNTRU1TSUxUCToJMQk6CTI2NDI0MAorVElaSSBPVVpPVQk6CTEJOgkxMTA4NzA4CitUTEVNQ0VOCToJMQk6CTg0MjA1MworCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9BTkRPUlJBX0FSRUEudHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvQU5ET1JSQV9BUkVBLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZWRmYTY3Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvQU5ET1JSQV9BUkVBLnR4dApAQCAtMCwwICsxIEBACisgQW5kb3JyYSA6IDEgOiAxLjAKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL0FORE9SUkFfUE9QVUxBVElPTi50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9BTkRPUlJBX1BPUFVMQVRJT04udHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA0MWM3ODMKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9BTkRPUlJBX1BPUFVMQVRJT04udHh0CkBAIC0wLDAgKzEgQEAKKyBBbmRvcnJhIDogMSA6IDY3MzEzCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9BTkdPTEFfQVJFQS50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9BTkdPTEFfQVJFQS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTc0YTk4ZAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL0FOR09MQV9BUkVBLnR4dApAQCAtMCwwICsxLDE5IEBACitBTkdPTEEJOgkwCToJMTI0NjcwMAorQkVOR08JOgkxCToJMzMwMTYKK0JFTkdVRUxBCToJMQk6CTMxNzgwCitCSUUJOgkxCToJNzAzMTQKK0NBQklOREEJOgkxCToJNzI3MAorQ1VBTkRPIENVQkFOR08JOgkxCToJMTk5MDQ5CitDVUFOWkEgTk9SVEUJOgkxCToJODczNDIKK0NVQU5aQSBTVUwJOgkxCToJMzQyNzAKK0NVTkVORQk6CTEJOgk3NTAwMgorSFVBTUJPCToJMQk6CTI0MTEwCitIVUlMQQk6CTEJOgk1NTY2MAorTFVBTkRBCToJMQk6CTIyNTcKK0xVTkRBIE5PUlRFCToJMQk6CTEwMzAwMAorTFVOREEgU1VMCToJMQk6CTc3NjM3CitNQUxBTkpFCToJMQk6CTk3NjAyCitNT1hJQ08JOgkxCToJMjIzMDIzCitOQU1JQkUJOgkxCToJNTgxMzcKK1VJR0UJOgkxCToJNTg2OTgKK1pBSVJFCToJMQk6CTQwMTMwCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9BTkdPTEFfUE9QVUxBVElPTi50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9BTkdPTEFfUE9QVUxBVElPTi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWViYTRiMAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL0FOR09MQV9QT1BVTEFUSU9OLnR4dApAQCAtMCwwICsxLDE5IEBACitBTkdPTEEJOgkwCToJMTIxMjcwNzEKK0JFTkdPCToJMQk6CTE5MDAwMAorQkVOR1VFTEEJOgkxCToJNzE4MDAwCitCSUUJOgkxCToJMTI4MDAwMAorQ0FCSU5EQQk6CTEJOgkxOTkwMDAKK0NVQU5ETyBDVUJBTkdPCToJMQk6CTEzOTAwMAorQ1VBTlpBIE5PUlRFCToJMQk6CTI1NTAwMAorQ1VBTlpBIFNVTAk6CTEJOgkxNzMwMDAwCitDVU5FTkUJOgkxCToJOTU0MDAwCitIVUFNQk8JOgkxCToJNDQwMDAwCitIVUlMQQk6CTEJOgk3MTAwMDAKK0xVQU5EQQk6CTEJOgkyMDIyMDAwCitMVU5EQSBOT1JURQk6CTEJOgkzMjAwMDAKK0xVTkRBIFNVTAk6CTEJOgkxNjUwMDAKK01BTEFOSkUJOgkxCToJMTAyMDAwMAorTU9YSUNPCToJMQk6CTM2MDAwMAorTkFNSUJFCToJMQk6CTE1NDAwMAorVUlHRQk6CTEJOgk5ODUwMDAKK1pBSVJFCToJMQk6CTI2MjAwMApkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvQVJHRU5USU5BX0FSRUEudHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvQVJHRU5USU5BX0FSRUEudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE4NmY5Y2YKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9BUkdFTlRJTkFfQVJFQS50eHQKQEAgLTAsMCArMSwyNSBAQAorQXJnZW50aW5hCToJMAk6CTI3NjY4OTAKKyBCdWVub3MgQWlyZXMgIAk6CTEJOgkzMDc1NzEKK0J1ZW5vcyBBaXJlcyBELkYuCToJMQk6CTIwMAorIENhdGFtYXJjYSAJOgkxCToJMTAyNjAyCitDaGFjbyAJOgkxCToJOTk2MzMKK0NodWJ1dCAJOgkxCToJMjI0Njg2CisgQ29yZG9iYSAJOgkxCToJMTY1MzIxCisgQ29ycmllbnRlcyAJOgkxCToJODgxOTkKKyBFbnRyZSBSaW9zIAk6CTEJOgk3ODc4MQorIEZvcm1vc2EgCToJMQk6CTcyMDY2CisgSnVqdXkgCToJMQk6CTUzMjE5CisgTGEgUGFtcGEgCToJMQk6CTE0MzQ0MAorIExhIFJpb2phIAk6CTEJOgk4OTY4MAorIE1lbmRvemEgCToJMQk6CTE0ODgyNworIE1pc2lvbmVzIAk6CTEJOgkyOTgwMQorTmV1cXVlbgk6CTEJOgk5NDA3OAorIFJpbyBOZWdybyAJOgkxCToJMjAzMDEzCisgU2FsdGEgCToJMQk6CTE1NTQ4OAorIFNhbiBKdWFuIAk6CTEJOgk4OTY1MQorIFNhbiBMdWlzIAk6CTEJOgk3Njc0OAorIFNhbnRhIENydXogCToJMQk6CTI0Mzk0MworIFNhbnRhIEZlIAk6CTEJOgkxMzMwMDcKKyBTYW50aWFnbyBkZWwgRXN0ZXJvIAk6CTEJOgkxMzYzNTEKK1RpZXJyYSBkZWwgRnVlZ28gCToJMQk6CTIxNTcxCisgVHVjdW1hbgk6CTEJOgkyMjUyNApkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvQVJHRU5USU5BX1BPUFVMQVRJT04udHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvQVJHRU5USU5BX1BPUFVMQVRJT04udHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVlMjcwMzgKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9BUkdFTlRJTkFfUE9QVUxBVElPTi50eHQKQEAgLTAsMCArMSwyNiBAQAorQXJnZW50aW5hCToJMAk6CTM5OTIxODMzCisgQnVlbm9zIEFpcmVzICAJOgkxCToJMTM4MjcyMDMKK0J1ZW5vcyBBaXJlcyBELkYuCToJMQk6CTI3NzYxMzgKKyBDYXRhbWFyY2EgCToJMQk6CTMzNDU2OAorQ2hhY28gCToJMQk6CTk4NDQ0NgorQ2h1YnV0IAk6CTEJOgk0MTMyMzcKKyBDb3Jkb2JhIAk6CTEJOgkzMDY2ODAxCisgQ29ycmllbnRlcyAJOgkxCToJOTMwOTkxCisgRW50cmUgUmlvcyAJOgkxCToJMTE1ODE0NworIEZvcm1vc2EgCToJMQk6CTQ4NjU1OQorIEp1anV5IAk6CTEJOgk2MTE4ODgKKyBMYSBQYW1wYSAJOgkxCToJMjk5Mjk0CisgTGEgUmlvamEgCToJMQk6CTI4OTk4MworIE1lbmRvemEgCToJMQk6CTE1Nzk2NTEKKyBNaXNpb25lcyAJOgkxCToJOTY1NTIyCitOZXVxdWVuCToJMQk6CTQ3NDE1NQorIFJpbyBOZWdybyAJOgkxCToJNTUyODIyCisgU2FsdGEgCToJMQk6CTEwNzkwNTEKKyBTYW4gSnVhbiAJOgkxCToJNjIwMDIzCisgU2FuIEx1aXMgCToJMQk6CTM2NzkzMworIFNhbnRhIENydXogCToJMQk6CTE5Njk1OAorIFNhbnRhIEZlIAk6CTEJOgkzMDAwNzAxCisgU2FudGlhZ28gZGVsIEVzdGVybyAJOgkxCToJODA0NDU3CitUaWVycmEgZGVsIEZ1ZWdvIAk6CTEJOgkxMDEwNzkKKyBUdWN1bWFuCToJMQk6CTEzMzg1MjMKKwpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvQVJNRU5JQV9BUkVBLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL0FSTUVOSUFfQVJFQS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2Y4N2VjZQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL0FSTUVOSUFfQVJFQS50eHQKQEAgLTAsMCArMSwxMiBAQAorQXJtZW5pYQk6CTAJOgkyOTgwMAorQXJhZ2F0c290bmkJOgkxCToJMjc1MworQXJhcmF0aQk6CTEJOgkyMDk2CitBcm1hdmlyaQk6CTEJOgkxMjQyCitHZWdoYXJrdW5pa2kJOgkxCToJNTM0OAorS290YXlraQk6CTEJOgkyMDg5CitMb3JpCToJMQk6CTM3ODkKK1NoaXJha2kJOgkxCToJMjY4MQorU3l1bmlraQk6CTEJOgk0NTA2CitUYXZ1c2hpCToJMQk6CTI3MDQKK1ZheW90cyBkem9yaQk6CTEJOgkyMzA4CitBcm1lbmlhIFggWWVyZXZhbgk6CTEJOgkyMjcKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL0FSTUVOSUFfUE9QVUxBVElPTi50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9BUk1FTklBX1BPUFVMQVRJT04udHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFhNzNkYmYKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9BUk1FTklBX1BPUFVMQVRJT04udHh0CkBAIC0wLDAgKzEsMTIgQEAKK0FybWVuaWEJOgkwCToJMjk3NjM3MgorQXJhZ2F0c290bmkJOgkxCToJMTI2Mjc4CitBcmFyYXRpCToJMQk6CTI1MjY2NQorQXJtYXZpcmkJOgkxCToJMjU1ODYxCitHZWdoYXJrdW5pa2kJOgkxCToJMjE1MzcxCitLb3RheWtpCToJMQk6CTI0MTMzNworTG9yaQk6CTEJOgkyNTMzNTEKK1NoaXJha2kJOgkxCToJMjU3MjQyCitTeXVuaWtpCToJMQk6CTEzNDA2MQorVGF2dXNoaQk6CTEJOgkxMjE5NjMKK1ZheW90cyBkem9yaQk6CTEJOgk1MzIzMAorQXJtZW5pYSBYIFllcmV2YW4JOgkxCToJMTA5MTIzNQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvQVVTVFJBTElBX0FSRUEudHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvQVVTVFJBTElBX0FSRUEudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdkYWM0NWEKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9BVVNUUkFMSUFfQVJFQS50eHQKQEAgLTAsMCArMSwxMiBAQAorQVVTVFJBTElBIDogMCA6IDc2OTIwMzAKK0FVU1RSQUxJQSBDQVBJVEFMIFRFUlJJVE9SWSA6IDEgOgkyMzYwCitORVcgU09VVEggV0FMRVMgOiAxIDogODAwNjQwCitOT1JUSEVSTiBURVJSSVRPUlkgOiAxIDogMTM0OTEzMAorUVVFRU5TTEFORCA6IDEgOiAxNzMwNjUwCitTT1VUSCBBVVNUUkFMSUEgOiAxIDogOTgzNDgwCitUQVNNQU5JQSA6IDEgOiA2ODQwMAorVklDVE9SSUEgOiAxIDogMjI3NDIwCitXRVNURVJOIEFVU1RSQUxJQSA6IDEgOiAyNTI5ODgwCisKKworCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9BVVNUUkFMSUFfUE9QVUxBVElPTi50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9BVVNUUkFMSUFfUE9QVUxBVElPTi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGI5NjY2NwotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL0FVU1RSQUxJQV9QT1BVTEFUSU9OLnR4dApAQCAtMCwwICsxLDEzIEBACitBVVNUUkFMSUEgOiAwIDogMjAzMjU5MjYKK0FVU1RSQUxJQSBDQVBJVEFMIFRFUlJJVE9SWSA6IDEgOiAzMjUxNjEKK05FVyBTT1VUSCBXQUxFUyA6IDEgOiA2Nzc0MjQ5CitOT1JUSEVSTiBURVJSSVRPUlkgOiAxIDogMjAyNzkzCitRVUVFTlNMQU5EIDogMSA6IDM5NjM5NjgKK1NPVVRIIEFVU1RSQUxJQSA6IDEgOiAxNTQyMDMzCitUQVNNQU5JQSA6IDEgOiA0ODUyNjMKK1ZJQ1RPUklBIDogMSA6IDUwMjIzNDYKK1dFU1RFUk4gQVVTVFJBTElBIDogMSA6IDIwMTAxMTMKKworCisKKwpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvQVVTVFJJQV9BUkVBLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL0FVU1RSSUFfQVJFQS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjZjMTIzNAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL0FVU1RSSUFfQVJFQS50eHQKQEAgLTAsMCArMSw5IEBACisgTmllZGVylHN0ZXJyZWljaCA6IDEgOiAxOTE3My4wCisgT2JlcpRzdGVycmVpY2ggOiAxIDogMTE5NzkuMAorIFdpZW4gOiAxIDogNDE0LjAKKyBCdXJnZW5sYW5kIDogMSA6IDM5NjUuMAorIFNhbHpidXJnIDogMSA6IDcxNTQuMAorIFN0ZWllcm1hcmsgOiAxIDogMTYzODguMAorIFRpcm9sIDogMSA6IDEyNjQ4LjAKKyBWb3JhbGJlcmcgOiAxIDogMjYwMS4wCisgS4RybnRlbiA6IDEgOiA5NTMzLjAKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL0FVU1RSSUFfUE9QVUxBVElPTi50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9BVVNUUklBX1BPUFVMQVRJT04udHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ4MjcxYmEKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9BVVNUUklBX1BPUFVMQVRJT04udHh0CkBAIC0wLDAgKzEsOSBAQAorIE5pZWRlcpRzdGVycmVpY2ggOiAxIDogMTQ0NTgxMAorIE9iZXKUc3RlcnJlaWNoIDogMSA6IDEzMjk4NDQKKyBXaWVuIDogMSA6IDE1MDgxMjAKKyBCdXJnZW5sYW5kIDogMSA6IDI2OTcxNworIFNhbHpidXJnIDogMSA6IDQ3NTc2NgorIFN0ZWllcm1hcmsgOiAxIDogMTE4NzIxMQorIFRpcm9sIDogMSA6IDYyODc3MAorIFZvcmFsYmVyZyA6IDEgOiAzMjc3ODQKKyBLhHJudGVuIDogMSA6IDU0NTIyNgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvQVpFUkJBSUpBTl9BUkVBLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL0FaRVJCQUlKQU5fQVJFQS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGU5MTg2ZgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL0FaRVJCQUlKQU5fQVJFQS50eHQKQEAgLTAsMCArMSw4MCBAQAorQXplcmJhaWphbgk6CTAJOgk4NjYwMAorTmFnb3Juby1LYXJhYmFraCA6IDEgOiAyNzAwCitBemVyYmF5ZHpoYW4gVGVycml0b3IgOiAxIDogOTAwMAorWGlyZGFsYW4gIAk6CTEJOgkxMzYwCitBZ2Rhc2ggCToJMQk6CTEwNTAKK0FnZGphYmFkaSAJOgkxCToJMTc2MAorQWxpYmFraGxpIAk6CTEJOgkxMTUwCitBZ3N0YWZhIAk6CTEJOgkxNTAwCitBZ2hzdSAJOgkxCToJMTAyMAorQWxpIEJheXJhbWxpIENpdHkgdC5kLiAJOgkxCToJMzAKK0FzdGFyYSAJOgkxCToJNjIwCitCYWt1IENpdHkgCToJMQk6CTIxMzAKK0JhbGFrYW4gCToJMQk6CTkyMAorQmFyZGEgCToJMQk6CTk2MAorQmV5bGFnYW4gCToJMQk6CTExMzAKK0JpbGFzdXZhciAJOgkxCToJMTQwMAorRGFzaGthc2FuIAk6CTEJOgkxMDUwCitEYXZhY2hpIAk6CTEJOgkxMDkwCitBbGtoYW5saSAJOgkxCToJMTM5MAorR2FiYWxhIAk6CTEJOgkxNTUwCitHYWRhYmF5IAk6CTEJOgkxMjkwCitHYWtoIAk6CTEJOgkxNDkwCitHYW5qYSBDaXR5IHQuZC4gCToJMQk6CTExMAorR2F6YWtoIAk6CTEJOgk3MDAKK01hcmF6YSAJOgkxCToJMTM3MAorR29yYW5ib3kgCToJMQk6CTE3OTAKK0dveWNoYXkgCToJMQk6CTc0MAorR3ViYSAJOgkxCToJMjU4MAorR3ViYWRseSByYXlvbiAJOgkxCToJODAwCitHdXNhciAJOgkxCToJMTU0MAorSGFqaWdhYnVsIAk6CTEJOgkxNjQwCitJbWlzaGxpIAk6CTEJOgkxODIwCitJc21heWlsbHkgCToJMQk6CTIwNjAKK0phYnJhaWwgcmF5b24gCToJMQk6CTEwNTAKK0phbGlsYWJhZCAJOgkxCToJMTQ0MAorS2FsYmFqYXIgCToJMQk6CTMwNTAKK0toYWNobWF6IAk6CTEJOgkxMDUwCitLaGFua2VuZGkgQ2l0eSB0LmQuIAk6CTEJOgk4CitLaGFubGFyIAk6CTEJOgkxMDMwCitLaG9qYWx5IHJheW9uIAk6CTEJOgk5NDAKK0tob2phdmFuZCByYXlvbiAJOgkxCToJMTQ2MAorS2h5emkgCToJMQk6CTE4NTAKK0t1cmRhbWlyIAk6CTEJOgkxNjMwCitMYWNoaW4gcmF5b24gCToJMQk6CTE4NDAKK0xhbmthcmFuIAk6CTEJOgkxNTQwCitMZXJpayAJOgkxCToJMTA4MAorTWFzYWxseSAJOgkxCToJNzIwCitNaW5nZWNoZXZpciBDaXR5IAk6CTEJOgkxMzAKK05hZnRhbGFuIENpdHkgCToJMQk6CTIKK05ha2hpY2hldmFuIAk6CTEJOgk1NTAwCitOYWtoY2hldmFuIENpdHkgCToJMQk6CTEzMAorQmFiZWsgCToJMQk6CTExNzAKK0p1bGZhIAk6CTEJOgkxMDAwCitHaXZyYWhrIAk6CTEJOgk2ODIKK09yZHViYWQgCToJMQk6CTk3MAorSGV5ZGFyYWJhZCAJOgkxCToJMTUwCitTaGFoYnV6IAk6CTEJOgk5MjAKK1NoYXJ1ciAJOgkxCToJNDc4CitOZWZ0Y2hhbGEgCToJMQk6CTE0NTAKK09ndXogCToJMQk6CTEyMjAKK1NhYXRseSAJOgkxCToJMTE4MAorU2FiaXJhYmFkIAk6CTEJOgkxNDcwCitTYWx5YW4gCToJMQk6CTE3OTAKK05hYmlhZ2FsaSAJOgkxCToJMTQ1MAorU2hha2kgCToJMQk6CTI0MzAKK1NoYW1ha2h5IAk6CTEJOgkxNjEwCitTaGFta2lyIAk6CTEJOgkxNjYwCitTaHVzaGEgcmF5b24gCToJMQk6CTI5MAorU2l5YXphbiAJOgkxCToJNzAwCitTdW1nYWl0IENpdHkgdC5kLiAJOgkxCToJODAKK1RhcnRhciAJOgkxCToJOTYwCitUb3Z1eiAJOgkxCToJMTkwMAorVWphciAJOgkxCToJODUwCitZYXJkaW1seSAJOgkxCToJNjcwCitZZXZsYWtoIAk6CTEJOgkxNTQwCitaYWdhdGFsYSAJOgkxCToJMTM1MAorWmFuZ2lsYW4gcmF5b24gCToJMQk6CTcxMAorWmFyZGFiIAk6CTEJOgk4NjAKKworCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9BWkVSQkFJSkFOX1BPUFVMQVRJT04udHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvQVpFUkJBSUpBTl9QT1BVTEFUSU9OLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYmVkMmM1Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvQVpFUkJBSUpBTl9QT1BVTEFUSU9OLnR4dApAQCAtMCwwICsxLDc4IEBACitBemVyYmFpamFuCToJMAk6CTc5NjE2MTkKK05hZ29ybm8tS2FyYWJha2ggOiAxIDogMTQ2MDAwCitBemVyYmF5ZHpoYW4gVGVycml0b3IgOiAxIDogNzAwMDAwIAorWGlyZGFsYW4gIAk6CTEJOgk5MTYwMAorQWdkYXNoIAk6CTEJOgk5NDQwMAorQWdkamFiYWRpIAk6CTEJOgkxMTQxMDAKK0FsaWJha2hsaSAJOgkxCToJMTY1MDAwCitBZ3N0YWZhIAk6CTEJOgk3NjcwMAorQWdoc3UgCToJMQk6CTY2NzAwCitBbGkgQmF5cmFtbGkgQ2l0eSB0LmQuIAk6CTEJOgk3MjgwMAorQXN0YXJhIAk6CTEJOgk5MDkwMAorQmFrdSBDaXR5IAk6CTEJOgkxODU1MzAwCitCYWxha2FuIAk6CTEJOgk4NjUwMAorQmFyZGEgCToJMQk6CTEzNjYwMAorQmV5bGFnYW4gCToJMQk6CTgxOTAwCitCaWxhc3V2YXIgCToJMQk6CTgxMzAwCitEYXNoa2FzYW4gCToJMQk6CTMxOTAwCitEYXZhY2hpIAk6CTEJOgk0ODYwMAorQWxraGFubGkgCToJMQk6CTE0NTMwMAorR2FiYWxhIAk6CTEJOgk4OTIwMAorR2FkYWJheSAJOgkxCToJOTAxMDAKK0dha2ggCToJMQk6CTUzNDAwCitHYW5qYSBDaXR5IHQuZC4gCToJMQk6CTMwNDUwMAorR2F6YWtoIAk6CTEJOgk4NDUwMAorTWFyYXphIAk6CTEJOgkzNzQwMAorR29yYW5ib3kgCToJMQk6CTkxMTAwCitHb3ljaGF5IAk6CTEJOgkxMDUzMDAKK0d1YmEgCToJMQk6CTE0MzgwMAorR3ViYWRseSByYXlvbiAJOgkxCToJMzUxMDAKK0d1c2FyIAk6CTEJOgk4NDYwMAorSGFqaWdhYnVsIAk6CTEJOgk2MTQwMAorSW1pc2hsaSAJOgkxCToJMTA5MTAwCitJc21heWlsbHkgCToJMQk6CTc2MzAwCitKYWJyYWlsIHJheW9uIAk6CTEJOgk2NTQwMAorSmFsaWxhYmFkIAk6CTEJOgkxODIxMDAKK0thbGJhamFyIAk6CTEJOgk3MjIwMAorS2hhY2htYXogCToJMQk6CTE1MjgwMAorS2hhbmtlbmRpIENpdHkgdC5kLiAJOgkxCToJNTQ3MDAKK0toYW5sYXIgCToJMQk6CTU1MTAwCitLaG9qYWx5IHJheW9uIAk6CTEJOgkyNDgwMAorS2hvamF2YW5kIHJheW9uIAk6CTEJOgk0MDYwMAorS2h5emkgCToJMQk6CTEzOTAwCitLdXJkYW1pciAJOgkxCToJOTg0MDAKK0xhY2hpbiByYXlvbiAJOgkxCToJNjgxMDAKK0xhbmthcmFuIAk6CTEJOgkxOTc5MDAKK0xlcmlrIAk6CTEJOgk2OTYwMAorTWFzYWxseSAJOgkxCToJMTg0OTAwCitNaW5nZWNoZXZpciBDaXR5IAk6CTEJOgk5NTMwMAorTmFmdGFsYW4gQ2l0eSAJOgkxCToJNzUwMAorTmFraGljaGV2YW4gCToJMQk6CTM3MjkwMAorTmFraGNoaXZhbiBDaXR5IAk6CTEJOgk3MDAwMAorQmFiZWsgCToJMQk6CTY2MDAwCitKdWxmYSAJOgkxCToJMzgzMDAKK0dpdnJhaGsgCToJMQk6CTI1NTAwCitPcmR1YmFkIAk6CTEJOgk0MjcwMAorSGV5ZGFyYWJhZCAJOgkxCToJMTI5MDAKK1NoYWhidXogCToJMQk6CTIxNTAwCitTaGFydXIgCToJMQk6CTk2MDAwCitOZWZ0Y2hhbGEgCToJMQk6CTc1NTAwCitPZ3V6IAk6CTEJOgkzODgwMAorU2FhdGx5IAk6CTEJOgk4NzUwMAorU2FiaXJhYmFkIAk6CTEJOgkxNDM4MDAKK1NhbHlhbiAJOgkxCToJMTE3NDAwCitOYWJpYWdhbGkgCToJMQk6CTUwOTAwCitTaGFraSAJOgkxCToJMTY0NzAwCitTaGFtYWtoeSAJOgkxCToJODYwMDAKK1NoYW1raXIgCToJMQk6CTE4MTQwMAorU2h1c2hhIHJheW9uIAk6CTEJOgkyNjAwMAorU2l5YXphbiAJOgkxCToJMzU4MDAKK1N1bWdhaXQgQ2l0eSB0LmQuIAk6CTEJOgkyOTI1MDAKK1RhcnRhciAJOgkxCToJOTU1MDAKK1RvdnV6IAk6CTEJOgkxNTAzMDAKK1VqYXIgCToJMQk6CTc0NzAwCitZYXJkaW1seSAJOgkxCToJNTQzMDAKK1lldmxha2ggCToJMQk6CTExMjcwMAorWmFnYXRhbGEgCToJMQk6CTExMTUwMAorWmFuZ2lsYW4gcmF5b24gCToJMQk6CTM3MTAwCitaYXJkYWIgCToJMQk6CTQ5MzAwCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9CQUhSQUlOX0FSRUEudHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvQkFIUkFJTl9BUkVBLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ODA2YjNiCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvQkFIUkFJTl9BUkVBLnR4dApAQCAtMCwwICsxLDE3IEBACitCYWhyYWluCToJMAk6CTY1NQorQmFocmFpbiA6IDEgOiA2NjUKK0NlbnRyYWwgUmVnaW9uICAJOgkxCToJMzUuNDIKK0hhbWFkIFRvd24gCToJMQk6CTEzLjEyCitIaWRkIAk6CTEJOgkxMy43MworSXNhIFRvd24gCToJMQk6CTEyLjQzCitKaWRoYWZzIAk6CTEJOgkyNC4zMworTWFuYW1hIAk6CTEJOgkyNy40OAorTXVoYXJyYXEgCToJMQk6CTI0LjMxCitOb3J0aGVybiBSZWdpb24gCToJMQk6CTM3LjQzCitSaWZmYSAJOgkxCToJMjkyLjUKK1NpdHJhIAk6CTEJOgkzMC4xCitTb3V0aGVybiBSZWdpb24gCToJMQk6CTUyLjA5CitXZXN0ZXJuIFJlZ2lvbiAJOgkxCToJMTU3LjIKKworCisKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL0JBSFJBSU5fUE9QVUxBVElPTi50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9CQUhSQUlOX1BPUFVMQVRJT04udHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA2NTJmODUKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9CQUhSQUlOX1BPUFVMQVRJT04udHh0CkBAIC0wLDAgKzEsMTQgQEAKK0JhaHJhaW4JOgkwCToJNjk4NTg1CitCYWhyYWluIDogMSA6IDY5ODU4NQorQ2VudHJhbCBSZWdpb24gIAk6CTEJOgk0OTk2OQorSGFtYWQgVG93biAJOgkxCToJNTI3MTgKK0hpZGQgCToJMQk6CTExNjM3CitJc2EgVG93biAJOgkxCToJMzY4MzMKK0ppZGhhZnMgCToJMQk6CTUyNDUwCitNYW5hbWEgCToJMQk6CTE1MzM5NQorTXVoYXJyYXEgCToJMQk6CTkxOTM5CitOb3J0aGVybiBSZWdpb24gCToJMQk6CTQzNjkxCitSaWZmYSAJOgkxCToJNzk5ODUKK1NpdHJhIAk6CTEJOgk0MzkxMAorU291dGhlcm4gUmVnaW9uIAk6CTEJOgkzODc1CitXZXN0ZXJuIFJlZ2lvbiAJOgkxCToJMjYxNDkKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL0JBTkdMQURFU0hfQVJFQS50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9CQU5HTEFERVNIX0FSRUEudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU5YWEyMzcKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9CQU5HTEFERVNIX0FSRUEudHh0CkBAIC0wLDAgKzEsNzEgQEAKK0JhbmdsYWRlc2gJOgkwCToJMTQ0MDAwCitCYXJpc2FsIERpdgk6CTEJOgkxMzI5NworQmFyZ3VuYSBaTAk6CTEJOgkxODMyCitCYXJpc2FsIFpMCToJMQk6CTI3OTEKK0Job2xhIFpMCToJMQk6CTM0MDMKK0poYWxha2hhdGkgCToJMQk6CTc1OAorUGF0dWFraGFsaSAJOgkxCToJMzIwNQorUGlyb2pwdXIgCToJMQk6CTEzMDgKK0NoaXR0YWdvbmcgRGl2CToJMQk6CTMzNzcxCitCYW5kYXJiYW4gWkwJOgkxCToJNDQ3OQorQnJhaG1hbmJhcmlhIAk6CTEJOgkxOTI3CitDaGFuZHB1ciBaTAk6CTEJOgkxNzA0CitDaGl0dGFnb25nIFpMCToJMQk6CTUyODMKK0NvbWlsbGEgCToJMQk6CTMwODUKK0NveCBCYXphciAJOgkxCToJMjQ5MgorRmVuaSBaTAk6CTEJOgk5MjgKK0toYWdyYWNoaGFyaSBaTAk6CTEJOgkyNzAwCitMYWtzbWlwdXIgCToJMQk6CTE0NTYKK05vYWtoYWxpIFpMCToJMQk6CTM2MDEKK1JhbmdhbWF0aSBaTAk6CTEJOgk2MTE2CitEaGFrYSBaSUxBCToJMQk6CTMxMTE5CitEaGFrYSBEaXYJOgkxCToJMTQ2NAorRmFyaWRwdXIgWkwJOgkxCToJMjA3MworR2F6aXB1ciBaTAk6CTEJOgkxNzQxCitHb3BhbGdhbmogCToJMQk6CTE0OTAKK0phbWFscHVyIFpMCToJMQk6CTIwMzIKK0tpc2hvcmVnYW5qIFpMCToJMQk6CTI2ODkKK01hZGFyaXB1ciBaTAk6CTEJOgkxMTQ1CitNYW5pa2dhbmogWkwJOgkxCToJMTM3OQorTXVuc2hpZ2FuaiBaTAk6CTEJOgk5NTUKK015bWVuc2luZ2ggWkwJOgkxCToJNDM2MworTmFyYXlhbmdhbmogWkwJOgkxCToJNzU5CitOYXJzaW5nZGkgWkwJOgkxCToJMTE0MQorTmV0cm9rb25hIFpMCToJMQk6CTI4MTAKK1JhamJhcmkgWkwJOgkxCToJMTExOQorU2hhcmlhdHB1ciAJOgkxCToJMTE4MQorU2hlcnB1ciAJOgkxCToJMTM2NAorVGFuZ2FpbCAJOgkxCToJMzQxNAorS2h1bG5hIAk6CTEJOgkyMjI3NAorQmFnZXJoYXQgCToJMQk6CTM5NTkKK0NodWFkYW5nYSAJOgkxCToJMTE1OAorSmVzc29yZSAJOgkxCToJMjU2NworSmhlbmFpZGFoIAk6CTEJOgkxOTYxCitLaHVsbmEgRGl2CToJMQk6CTQzOTUKK0t1c2h0aWEgCToJMQk6CTE2MjEKK01hZ3VyYSAJOgkxCToJMTA0OQorTWVoZXJwdXIgCToJMQk6CTcxNgorTmFyYWlsIAk6CTEJOgk5OTAKK1NhdGtoaXJhIAk6CTEJOgkzODU4CitSYWpzaGFoaSAJOgkxCToJMzQ1MTMKK0JvZ3JhIAk6CTEJOgkyOTIwCitEaW5hanB1ciAJOgkxCToJMzQzOAorR2FpYmFuZGhhIAk6CTEJOgkyMTc5CitKb3lwdXJoYXQgCToJMQk6CTk2NQorS3VyaWdyYW0gCToJMQk6CTIyOTYKK0xhbG1vbmlyaGF0IAk6CTEJOgkxMjQyCitOYW9nYW9uIAk6CTEJOgkzNDM2CitOYXRvcmUgCToJMQk6CTE4OTYKK05hd2FiZ2FuaiAJOgkxCToJMTcwMgorTmlscGhhbWFyaSAJOgkxCToJMTY0MQorUGFibmEgCToJMQk6CTIzNzEKK1BhbmNoYWdhcmggCToJMQk6CTE0MDUKK1JhanNoYWhpIERpdgk6CTEJOgkyNDA3CitSYW5ncHVyIAk6CTEJOgkyMzA2CitTaXJhamdhbmogCToJMQk6CTI0OTgKK1RoYWt1cmdhb24gCToJMQk6CTE4MDkKK1N5bGhldCAJOgkxCToJMTI1OTYKK0hhYmlnYW5qIAk6CTEJOgkyNjM3CitNb3VsdmliYXphciAJOgkxCToJMjc5OQorU3VuYW1nYW5qIAk6CTEJOgkzNjcwCitTeWxoZXQgCToJMQk6CTM0OTAKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL0JBTkdMQURFU0hfUE9QVUxBVElPTi50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9CQU5HTEFERVNIX1BPUFVMQVRJT04udHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhmYTkyMTYKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9CQU5HTEFERVNIX1BPUFVMQVRJT04udHh0CkBAIC0wLDAgKzEsNzEgQEAKK0JhbmdsYWRlc2gJOgkwCToJMTQ3MzY1MzUyCitCYXJpc2FsIERpdgk6CTEJOgk4MTEyNDM1CitCYXJndW5hIFpMCToJMQk6CTgzNzk1NQorQmFyaXNhbCBaTAk6CTEJOgkyMzMwOTYwCitCaG9sYSBaTAk6CTEJOgkxNjc2NjAwCitKaGFsYWtoYXRpIAk6CTEJOgk2OTYwNTUKK1BhdHVha2hhbGkgCToJMQk6CTE0NDQzNDAKK1Bpcm9qcHVyIAk6CTEJOgkxMTI2NTI1CitDaGl0dGFnb25nIERpdgk6CTEJOgkyMzk5OTM0NQorQmFuZGFyYmFuIFpMCToJMQk6CTI5MjkwMAorQnJhaG1hbmJhcmlhIAk6CTEJOgkyMzY1ODgwCitDaGFuZHB1ciBaTAk6CTEJOgkyMjEwMTYyCitDaGl0dGFnb25nIFpMCToJMQk6CTY1NDUwNzgKK0NvbWlsbGEgCToJMQk6CTQ1ODY4NzkKK0NveCBCYXphciAJOgkxCToJMTc1NzMyMQorRmVuaSBaTAk6CTEJOgkxMTk2MjE5CitLaGFncmFjaGhhcmkgWkwJOgkxCToJNTI0OTYxCitMYWtzbWlwdXIgCToJMQk6CTE0NzkzNzEKK05vYWtoYWxpIFpMCToJMQk6CTI1MzMzOTQKK1JhbmdhbWF0aSBaTAk6CTEJOgk1MDcxODAKK0RoYWthIFpJTEEJOgkxCToJMzg2Nzc4NzYKK0RoYWthIERpdgk6CTEJOgk4NTc1NTMzCitGYXJpZHB1ciBaTAk6CTEJOgkxNzE5NDk2CitHYXppcHVyIFpMCToJMQk6CTIwMjYyNDQKK0dvcGFsZ2FuaiAJOgkxCToJMTEzMjA0NgorSmFtYWxwdXIgWkwJOgkxCToJMjA4OTM2NgorS2lzaG9yZWdhbmogWkwJOgkxCToJMjUyNTIyMQorTWFkYXJpcHVyIFpMCToJMQk6CTExMzcwMDgKK01hbmlrZ2FuaiBaTAk6CTEJOgkxMjc0ODI5CitNdW5zaGlnYW5qIFpMCToJMQk6CTEyOTM1MzYKK015bWVuc2luZ2ggWkwJOgkxCToJNDQzOTAxNworTmFyYXlhbmdhbmogWkwJOgkxCToJMjEzODQ5MgorTmFyc2luZ2RpIFpMCToJMQk6CTE4OTEyODEKK05ldHJva29uYSBaTAk6CTEJOgkxOTM3Nzk0CitSYWpiYXJpIFpMCToJMQk6CTk0MDM2MAorU2hhcmlhdHB1ciAJOgkxCToJMTA1NzE4MQorU2hlcnB1ciAJOgkxCToJMTI0NjUxMQorVGFuZ2FpbCAJOgkxCToJMzI1Mzk2MQorS2h1bG5hIERpdgk6CTEJOgkxNDQ2ODgxOQorQmFnZXJoYXQgCToJMQk6CTE1MTU4MTUKK0NodWFkYW5nYSAJOgkxCToJOTg3MzgyCitKZXNzb3JlIAk6CTEJOgkyNDQwNjkzCitKaGVuYWlkYWggCToJMQk6CTE1NTQ1MTQKK0todWxuYSAJOgkxCToJMjMzNDI4NQorS3VzaHRpYSAJOgkxCToJMTcxMzIyNAorTWFndXJhIAk6CTEJOgk4MTExNjAKK01laGVycHVyIAk6CTEJOgk1Nzk1MzEKK05hcmFpbCAJOgkxCToJNjg5MDIxCitTYXRraGlyYSAJOgkxCToJMTg0MzE5NAorUmFqc2hhaGkgCToJMQk6CTI5OTkyOTU1CitCb2dyYSAJOgkxCToJMjk4ODU2NworRGluYWpwdXIgCToJMQk6CTI2MTc5NDIKK0dhaWJhbmRoYSAJOgkxCToJMjExNzk1OQorSm95cHVyaGF0IAk6CTEJOgk4NDQ4MTQKK0t1cmlncmFtIAk6CTEJOgkxNzgyMjc3CitMYWxtb25pcmhhdCAJOgkxCToJMTA4ODkxOAorTmFvZ2FvbiAJOgkxCToJMjM3NzMxNAorTmF0b3JlIAk6CTEJOgkxNTIxMzU5CitOYXdhYmdhbmogCToJMQk6CTE0MTk1MzYKK05pbHBoYW1hcmkgCToJMQk6CTE1NTA2ODYKK1BhYm5hIAk6CTEJOgkyMTUzOTIxCitQYW5jaGFnYXJoIAk6CTEJOgk4MjkzNzQKK1JhanNoYWhpIERpdgk6CTEJOgkyMjYyNDgzCitSYW5ncHVyIAk6CTEJOgkyNTM0MzY1CitTaXJhamdhbmogCToJMQk6CTI3MDcwMTEKK1RoYWt1cmdhb24gCToJMQk6CTExOTY0MjkKK1N5bGhldCAJOgkxCToJNzg5OTgxNgorSGFiaWdhbmogCToJMQk6CTE3NTczMzEKK01vdWx2aWJhemFyIAk6CTEJOgkxNjA0MDI4CitTdW5hbWdhbmogCToJMQk6CTE5Njg2NjkKK1N5bGhldCAJOgkxCToJMjU2OTc4OApkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvQkVMQVJVU19BUkVBLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL0JFTEFSVVNfQVJFQS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTRkNDBlMgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL0JFTEFSVVNfQVJFQS50eHQKQEAgLTAsMCArMSBAQAorQkVMQVJVUyA6IDAgOiAyMDc2MDAKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL0JFTEFSVVNfUE9QVUxBVElPTi50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9CRUxBUlVTX1BPUFVMQVRJT04udHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBmZjMxN2IKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9CRUxBUlVTX1BPUFVMQVRJT04udHh0CkBAIC0wLDAgKzEsMiBAQAorQkVMQVJVUyA6IDAgOiA5NzUwNTAwCisgCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9CRUxHSVVNX0FSRUEudHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvQkVMR0lVTV9BUkVBLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMDRmMDM1Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvQkVMR0lVTV9BUkVBLnR4dApAQCAtMCwwICsxLDEyIEBACisgQkVMR0lVTSA6IDAgOiAzMDUyOC4wCisgQU5UV0VSUEVOIDogMSA6IDI4NjcuMAorIFdFU1QtVkxBQU5ERVJFTiA6IDEgOiAzMTM0LjAKKyBPT1NULVZMQUFOREVSRU4gOiAxIDogMjk4Mi4wCisgTElNQlVSRyA6IDEgOiAyNDIyLjAKKyBVTktOT1dOIDogMSA6IDEuMAorIEJSVVhFTExFUy1CUlVTU0VMIDogMSA6IDE2MS4wCisgTElFR0UgOiAxIDogMzg2Mi4wCisgSEFJTkFVVCA6IDEgOiAzNzg1LjAKKyBOSVZFTExFUyA6IDEgOiAxMDkxLjAKKyBOQU1VUiA6IDEgOiAzNjY2LjAKKyBMVVhFTUJPVVJHIDogMSA6IDQ0MzkuMApkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvQkVMR0lVTV9QT1BVTEFUSU9OLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL0JFTEdJVU1fUE9QVUxBVElPTi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWFlN2E2YQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL0JFTEdJVU1fUE9QVUxBVElPTi50eHQKQEAgLTAsMCArMSwxMSBAQAorIEFOVFdFUlBFTiA6IDEgOiAxNjA0NjAwCisgV0VTVC1WTEFBTkRFUkVOIDogMSA6IDEzMzU3MDAKKyBPT1NULVZMQUFOREVSRU4gOiAxIDogMTMzMTYwMAorIExJTUJVUkcgOiAxIDogMTEwOTgwMAorIFVOS05PV04gOiAxIDogMAorIEJSVVhFTExFUy1CUlVTU0VMIDogMSA6IDk2NDQwMAorIExJRUdFIDogMSA6IDEwMDA3MDAKKyBIQUlOQVVUIDogMSA6IDEyODAzMDAKKyBOSVZFTExFUyA6IDEgOiAyNDI5MCAKKyBOQU1VUiA6IDEgOiA0MjM3MDAKKyBMVVhFTUJPVVJHIDogMSA6IDM3ODQwMApkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvQkVMSVpFX0FSRUEudHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvQkVMSVpFX0FSRUEudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM1NzM5NjAKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9CRUxJWkVfQVJFQS50eHQKQEAgLTAsMCArMSBAQAorQkVMSVpFIDogMCA6IDIyOTY0CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9CRUxJWkVfUE9QVUxBVElPTi50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9CRUxJWkVfUE9QVUxBVElPTi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2Q2ZjA4MwotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL0JFTElaRV9QT1BVTEFUSU9OLnR4dApAQCAtMCwwICsxIEBACitCRUxJWkUgOiAwIDogMjkxODAwCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9CRU5JTl9BUkVBLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL0JFTklOX0FSRUEudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk5NzA3MjgKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9CRU5JTl9BUkVBLnR4dApAQCAtMCwwICsxLDE0IEBACitCZW5pbgk6CTAJOgkxMTI2MjAKKyBBbGlib3JpICAJOgkxCToJMjYzMDMKKyBBdGFjb3JhIFtBdGFrb3JhXQk6CTEJOgkyMzg0NworIEF0bGFudGlxdWUgCToJMQk6CTMyMzkKKyBCb3Jnb3UgCToJMQk6CTI1MzEwCisgQ29sbGluZXMgCToJMQk6CTEzODU4CisgRG9uZ2EgCToJMQk6CTExMTY2CisgTGl0dG9yYWwgCToJMQk6CTc5CisgTW9ubyAJOgkxCToJMTU4NworIE91ZW1lIAk6CTEJOgkxNjc2CisgUGxhdGVhdSAJOgkxCToJMzgwNworIFpvdSAJOgkxCToJNTY2NworCisKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL0JFTklOX1BPUFVMQVRJT04udHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvQkVOSU5fUE9QVUxBVElPTi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWQ2YzViNgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL0JFTklOX1BPUFVMQVRJT04udHh0CkBAIC0wLDAgKzEsMTIgQEAKK0JlbmluCToJMAk6CTc4NjI5NDQKKyBBbGlib3JpICAJOgkxCToJNTIxMDkzCisgQXRhY29yYSBbQXRha29yYV0JOgkxCToJNTQ5NDE3CisgQXRsYW50aXF1ZSAJOgkxCToJODAxNjgzCisgQm9yZ291IAk6CTEJOgk3MjQxNzEKKyBDb2xsaW5lcyAJOgkxCToJNTM1OTIzCisgRG9uZ2EgCToJMQk6CTM1MDA2MgorIExpdHRvcmFsIAk6CTEJOgk2NjUxMDAKKyBNb25vIAk6CTEJOgkzNjAwMzcKKyBPdWVtZSAJOgkxCToJNzMwNzcyCisgUGxhdGVhdSAJOgkxCToJNDA3MTE2CisgWm91IAk6CTEJOgk1OTk5NTQKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL0JIVVRBTl9BUkVBLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL0JIVVRBTl9BUkVBLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYjY2OGE2Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvQkhVVEFOX0FSRUEudHh0CkBAIC0wLDAgKzEsMjEgQEAKK0JodXRhbgk6CTAJOgk0NzAwMAorQnVtdGhhbmcgIAk6CTEJOgkyOTkwCitDaHVraGEgCToJMQk6CTIzOTAKK0RhZ2FuYSBbRGFnYV0JOgkxCToJMTQwMAorR2FzYSAJOgkxCToJNDkxMAorU2FycGFuZyBbR2F5bGVncGh1ZyAoU2FyYmhhbmcpXQk6CTEJOgkxODg0CitIYWEgCToJMQk6CTE3MDQKK0xodW50c2hpIAk6CTEJOgkyOTEwCitNb25nYXIgCToJMQk6CTE4MzAKK1Bhcm8gCToJMQk6CTEyODEKK1BlbWEgZ2F0c2hlbCAJOgkxCToJMzgwCitQdW5ha2hhIAk6CTEJOgk2MDQwCitTYW1kcnVwIEpvbmdraGFyIAk6CTEJOgkyMzQwCitTYW10c2UgW1NhbWNoaV0JOgkxCToJMTU3NgorVGhpbXBodSAJOgkxCToJMTgxOQorVHJhc2hpZ2FuZyBbVGFzaGlnYW5nXQk6CTEJOgkzMTU2CitUcmFzaGl5YW5ndHNlIAk6CTEJOgkwCitUcm9uZ3NhIFtUb25nc2FdCToJMQk6CTE4MDUKK1RzaXJhbmcgW0NoaXJhbmddCToJMQk6CTY0MAorV2FuZ2R1ZSBQaG9kcmFuZyBbV2FuZ2RpcGhvZHJhbmddCToJMQk6CTMwMDAKK1poZW1nYW5nIFtTaGVuZ2FuZ10JOgkxCToJMTgxNwpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvQkhVVEFOX1BPUFVMQVRJT04udHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvQkhVVEFOX1BPUFVMQVRJT04udHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcyMzA2ZWYKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9CSFVUQU5fUE9QVUxBVElPTi50eHQKQEAgLTAsMCArMSwyMSBAQAorQmh1dGFuCToJMAk6CTIyNzk3MjMKK0J1bXRoYW5nICAJOgkxCToJMjM4NDIKK0NodWtoYSAJOgkxCToJNzQzODcKK0RhZ2FuYSBbRGFnYV0JOgkxCToJMjgzNTIKK0dhc2EgCToJMQk6CTE2OTA3CitTYXJwYW5nIFtHYXlsZWdwaHVnIChTYXJiaGFuZyldCToJMQk6CTExMTI4MworSGFhIAk6CTEJOgkxNjcxNQorTGh1bnRzaGkgCToJMQk6CTM5NjM1CitNb25nYXIgCToJMQk6CTczMjM5CitQYXJvIAk6CTEJOgk0NjYxNQorUGVtYSBnYXRzaGVsIAk6CTEJOgkzNzE0MQorUHVuYWtoYSAJOgkxCToJMTY3MDAKK1NhbWRydXAgSm9uZ2toYXIgCToJMQk6CTczMDQ0CitTYW10c2UgW1NhbWNoaV0JOgkxCToJMTcyMTA5CitUaGltcGh1IAk6CTEJOgk1ODY2MAorVHJhc2hpZ2FuZyBbVGFzaGlnYW5nXSAJOgkxCToJMTc3NzE4CitUcmFzaGl5YW5ndHNlIAk6CTEJOgkwCitUcm9uZ3NhIFtUb25nc2FdCToJMQk6CTI2MDE3CitUc2lyYW5nICBbQ2hpcmFuZ10JOgkxCToJMTA4ODA3CitXYW5nZHVlIFBob2RyYW5nIFtXYW5nZGlwaG9kcmFuZ10JOgkxCToJNDcxNTIKK1poZW1nYW5nIFtTaGVuZ2FuZ10JOgkxCToJNDQ1MTYKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL0JPTElWSUFfQVJFQS50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9CT0xJVklBX0FSRUEudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNkYWFkYTMKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9CT0xJVklBX0FSRUEudHh0CkBAIC0wLDAgKzEsMTI2IEBACitCb2xpdmlhCToJMAk6CTEwOTg1ODAKK0JlbmkgOiAxIDogMjEzNTY0IAorQ2h1cXVpc2FjYSA6IDEgOiA1MTUyNAorUGFuZG8gOiAxIDogNjM4MjcKK0xhIFBheiAgCToJMQk6CTEzMzk4NQorUGFsY2EgCToJMQk6CTAKK0FjaGFjYWNoaSAJOgkxCToJMAorQ29yb2Nvcm8gCToJMQk6CTAKK1B1ZXJ0byBBY29zdGEgCToJMQk6CTAKK0NodW1hIAk6CTEJOgkwCitTb3JhdGEgCToJMQk6CTAKK0Fwb2xvIAk6CTEJOgkwCitWaWFjaGEgCToJMQk6CTAKK0x1cmliYXkgCToJMQk6CTAKK0lucXVpc2l2aSAJOgkxCToJMAorQ2h1bHVtYW5pIAk6CTEJOgkwCitQdWNhcmFuaSAJOgkxCToJMAorVmlsbGEgQXJvbWEgCToJMQk6CTAKK0Nvcm9pY28gCToJMQk6CTAKK0l4aWFtYXMgCToJMQk6CTAKK1ZpbGxhIEdlbmVyYWwgUGVyZXogCToJMQk6CTAKK0NvcGFjYWJhbmEgCToJMQk6CTAKK1NhbiBQZWRybyBkZSBDdXJhaHVhcmEgCToJMQk6CTAKK1NhbnRpYWdvIGRlIE1hY2hhY2EgCToJMQk6CTAKK0NhcmFuYXZpIAk6CTEJOgkwCitPcnVybyAJOgkxCToJNTM1ODgKK09ydXJvIAk6CTEJOgkwCitDaGFsbGFwYXRhIAk6CTEJOgkwCitDb3JxdWUgCToJMQk6CTAKK0NpdWRhZCBkZSBDYXJhbmdhcyAJOgkxCToJMAorSHVhY2hhY2FsbGEgCToJMQk6CTAKK1Bvb3DzIAk6CTEJOgkwCitIdWFudW5pIAk6CTEJOgkwCitTYWxpbmFzIGRlIEcuIE0uIAk6CTEJOgkwCitTYWJheWEgCToJMQk6CTAKK1RvbGVkbyAJOgkxCToJMAorRXVjYWxpcHR1cyAJOgkxCToJMAorQW5kYW1hcmNhIAk6CTEJOgkwCitUb3RvcmEgCToJMQk6CTAKK1NhbnRpYWdvIGRlIEguIAk6CTEJOgkwCitMYSBSaXZlcmEgCToJMQk6CTAKK0h1YXlsbGFtYXJjYSAJOgkxCToJMAorUG90b3NpIAk6CTEJOgkxMTgyMTgKK1VuY2lhIAk6CTEJOgkwCitCZXRhbnpvcyAJOgkxCToJMAorQ29scXVlY2hhcXVhIAk6CTEJOgkwCitTYW4gUGVkcm8gCToJMQk6CTAKK0NvdGFnYWl0YSAJOgkxCToJMAorU2FjYWNhIAk6CTEJOgkwCitUdXBpbmkgCToJMQk6CTAKK0NvbGNoYSAJOgkxCToJMAorU2FuIFBhYmxvIGRlIEztcGV6IAk6CTEJOgkwCitQdW5hIAk6CTEJOgkwCitVeXVuaSAJOgkxCToJMAorQXJhbXBhbXBhIAk6CTEJOgkwCitMbGljYSAJOgkxCToJMAorVmlsbGF6b24gCToJMQk6CTAKK1NhbiBBZ3VzdGluIAk6CTEJOgkwCitTYW50YSBDcnV6IFtTYW50YSBDcnV6IGRlIGxhIFNpZXJyYV0gCToJMQk6CTM3MDYyMQorQW5kcmVzIEliYW5legk6CTEJOgkwCitXYXJuZXMgCToJMQk6CTAKK1NhbiBJZ25hY2lvIAk6CTEJOgkwCitCdWVuYSBWaXN0YSAJOgkxCToJMAorU2FuIEpvc2UgCToJMQk6CTAKK1BvcnRhY2h1ZWxvIAk6CTEJOgkwCitMYWd1bmlsbGFzIAk6CTEJOgkwCitWYWxsZWdyYW5kZSAJOgkxCToJMAorU2FtYWlwYXRhIAk6CTEJOgkwCitNb250ZXJvIAk6CTEJOgkwCitDb25jZXBjafNuIAk6CTEJOgkwCitTYW4gTWF0aWFzIAk6CTEJOgkwCitDb21hcmFwYSAJOgkxCToJMAorUHVlcnRvIFN1YXJleiAJOgkxCToJMAorQXNjZW5jaW9uIGRlIEd1YXJheW9zIAk6CTEJOgkwCitUcmluaWRhZCAJOgkxCToJMjEzNTY0CitUcmluaWRhZCBkZSBNb2pvcyAJOgkxCToJMAorUmliZXJhbHRhIAk6CTEJOgkwCitSZXllcyAJOgkxCToJMAorU2FudGEgQW5hIAk6CTEJOgkwCitTYW4gSWduYWNpbyAJOgkxCToJMAorTG9yZXRvIAk6CTEJOgkwCitTYW4gSm9hcXVpbiAJOgkxCToJMAorTWFnZGFsZW5hIAk6CTEJOgkwCitDb2JpamEgCToJMQk6CTYzODI3CitDb2JpamEgCToJMQk6CTAKK1B1ZXJ0byBSaWNvIAk6CTEJOgkwCitQdWVydG8gRy4gTS4gCToJMQk6CTAKK1NhbnRhIFJvc2EgZGVsIEFidW7hIAk6CTEJOgkwCitOdWV2YSBFc3BlcmFuemEgCToJMQk6CTAKK1N1Y3JlIAk6CTEJOgk1MTUyNAorU3VjcmUgCToJMQk6CTAKK0F6dXJkdXkgCToJMQk6CTAKK1ZpbGxhIFp1ZGHxZXogCToJMQk6CTAKK1BhZGlsbGEgCToJMQk6CTAKK01vbnRlYWd1ZG8gCToJMQk6CTAKK1RhcmFidWNvIAk6CTEJOgkwCitDYW1hcmdvIAk6CTEJOgkwCitWaWxsYSBTZXJyYW5vIAk6CTEJOgkwCitDYW1hdGFxdWkgCToJMQk6CTAKK1ZpbGxhIFZpdHRvcmlvIEd1em1hbiAJOgkxCToJMAorQ29jaGFiYW1iYSAJOgkxCToJNTU2MzEKK0NvY2hhYmFtYmEgCToJMQk6CTAKK0FpcXVpbGUgCToJMQk6CTAKK0luZGVwZW5kZW5jaWEgCToJMQk6CTAKK1RhcmF0YSAJOgkxCToJMAorQXJhbmkgCToJMQk6CTAKK0FycXVlIAk6CTEJOgkwCitDYXBpbm90YSAJOgkxCToJMAorQ2xpemEgCToJMQk6CTAKK1F1aWxsYWNvbGxvIAk6CTEJOgkwCitTYWNhYmEgCToJMQk6CTAKK1RhcGFjYXLtIAk6CTEJOgkwCitUb3RvcmEgCToJMQk6CTAKK01penF1ZSAJOgkxCToJMAorUHVuYXRhIAk6CTEJOgkwCitCb2ztdmFyIAk6CTEJOgkwCitUaXJhcXVlIAk6CTEJOgkwCitUYXJpamEgCToJMQk6CTM3NjIzCitUYXJpamEgCToJMQk6CTAKK1BhZGNheWEgCToJMQk6CTAKK1lhY3VpYmEgCToJMQk6CTAKK1VyaW9uZG8gCToJMQk6CTAKK1NhbiBMb3JlbnpvIAk6CTEJOgkwCitFbnRyZSBSaW9zIAk6CTEJOgkwCisKKwpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvQk9MSVZJQV9QT1BVTEFUSU9OLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL0JPTElWSUFfUE9QVUxBVElPTi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2ZmZGU0YwotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL0JPTElWSUFfUE9QVUxBVElPTi50eHQKQEAgLTAsMCArMSwxMjUgQEAKK0JvbGl2aWEJOgkwCToJODk4OTA0NgorQmVuaSA6IDEgOiA0MTQ4MDAKK0NodXF1aXNhY2EgOiAxIDogNjExNzAwCitQYW5kbyA6IDEgOiA2OTUwMAorTGEgUGF6ICAJOgkxCToJMjYzMDM4MQorUGFsY2EgCToJMQk6CTE2ODM5MjAKK0FjaGFjYWNoaSAJOgkxCToJOTMzNzQKK0Nvcm9jb3JvIAk6CTEJOgk1MzExMworUHVlcnRvIEFjb3N0YSAJOgkxCToJNjEwODEKK0NodW1hIAk6CTEJOgkyOTY5OAorU29yYXRhIAk6CTEJOgk2OTI5NQorQXBvbG8gCToJMQk6CTE5MjIwCitWaWFjaGEgCToJMQk6CTEwNjg3NAorTHVyaWJheSAJOgkxCToJNDg2MDcKK0lucXVpc2l2aSAJOgkxCToJNjIwMzAKK0NodWx1bWFuaSAJOgkxCToJNzA2NjAKK1B1Y2FyYW5pIAk6CTEJOgk3NDY5MworVmlsbGEgQXJvbWEgCToJMQk6CTk5MTYyCitDb3JvaWNvIAk6CTEJOgkyNTc1OQorSXhpYW1hcyAJOgkxCToJMTQwNjAKK1ZpbGxhIEdlbmVyYWwgUGVyZXogCToJMQk6CTEyNDM3CitDb3BhY2FiYW5hIAk6CTEJOgkyNDUwMgorU2FuIFBlZHJvIGRlIEN1cmFodWFyYSAJOgkxCToJMTg2MjIKK1NhbnRpYWdvIGRlIE1hY2hhY2EgCToJMQk6CTcxMDcKK0NhcmFuYXZpIAk6CTEJOgk1NjE2NworT3J1cm8gCToJMQk6CTQzMzQ4MQorT3J1cm8gCToJMQk6CTI2Mjg0NworQ2hhbGxhcGF0YSAJOgkxCToJMzA4OTAKK0NvcnF1ZSAJOgkxCToJMTIyNDYKK0NpdWRhZCBkZSBDYXJhbmdhcyAJOgkxCToJOTk5NQorSHVhY2hhY2FsbGEgCToJMQk6CTY1MDkKK1Bvb3DzIAk6CTEJOgkxNDU4OQorSHVhbnVuaSAJOgkxCToJMjM5NDYKK1NhbGluYXMgZGUgRy4gTS4gCToJMQk6CTE0NzA2CitTYWJheWEgCToJMQk6CTk3OTQKK1RvbGVkbyAJOgkxCToJOTI0NQorRXVjYWxpcHR1cyAJOgkxCToJNTgxMgorQW5kYW1hcmNhIAk6CTEJOgk3NTc2CitUb3RvcmEgCToJMQk6CTU1NzAKK1NhbnRpYWdvIGRlIEguIAk6CTEJOgkxMTkzOQorTGEgUml2ZXJhIAk6CTEJOgkxMzgyCitIdWF5bGxhbWFyY2EgCToJMQk6CTY0MzUKK1BvdG9z7SAJOgkxCToJNzY4MjAzCitQb3Rvc2kgCToJMQk6CTE5ODE2MworVW5jaWEgCToJMQk6CTc4Njc0CitCZXRhbnpvcyAJOgkxCToJNjM3OTkKK0NvbHF1ZWNoYXF1YSAJOgkxCToJMTAyMTk4CitTYW4gUGVkcm8gCToJMQk6CTQzMDg0CitDb3RhZ2FpdGEgCToJMQk6CTM1NTM0CitTYWNhY2EgCToJMQk6CTMwODc5CitUdXBpbmkgCToJMQk6CTQ3OTYxCitDb2xjaGEgCToJMQk6CTExOTQzCitTYW4gUGFibG8gZGUgTO1wZXogCToJMQk6CTU0NTgKK1B1bmEgCToJMQk6CTUyOTQ2CitVeXVuaSAJOgkxCToJMzkxMTUKK0FyYW1wYW1wYSAJOgkxCToJMTEyOTQKK0xsaWNhIAk6CTEJOgk1NDY5CitWaWxsYXpvbiAJOgkxCToJMzk4MTUKK1NhbiBBZ3VzdGluIAk6CTEJOgkxODcxCitTYW50YSBDcnV6IFtTYW50YSBDcnV6IGRlIGxhIFNpZXJyYV0gCToJMQk6CTIzODg3OTkKK0FuZHJlcyBJYmFuZXoJOgkxCToJMTUyNjE4NworV2FybmVzIAk6CTEJOgk2MDcwNQorU2FuIElnbmFjaW8gCToJMQk6CTYzMzEyCitCdWVuYSBWaXN0YSAJOgkxCToJODExMTgKK1NhbiBKb3NlIAk6CTEJOgk2ODQ0NQorUG9ydGFjaHVlbG8gCToJMQk6CTQxNTExCitMYWd1bmlsbGFzIAk6CTEJOgkxMDcyMTUKK1ZhbGxlZ3JhbmRlIAk6CTEJOgkyNzg3MAorU2FtYWlwYXRhIAk6CTEJOgkyOTUxOQorTW9udGVybyAJOgkxCToJMTYxMzA3CitDb25jZXBjafNuIAk6CTEJOgkxMTE4MTMKK1NhbiBNYXRpYXMgCToJMQk6CTE0MTM1CitDb21hcmFwYSAJOgkxCToJMjE3OTgKK1B1ZXJ0byBTdWFyZXogCToJMQk6CTM2NTg5CitBc2NlbmNpb24gZGUgR3VhcmF5b3MgCToJMQk6CTM3Mjc1CitUcmluaWRhZCAJOgkxCToJNDA2OTgyCitUcmluaWRhZCBkZSBNb2pvcyAJOgkxCToJOTI1NTMKK1JpYmVyYWx0YSAJOgkxCToJMTMyOTc0CitSZXllcyAJOgkxCToJNzkzMTgKK1NhbnRhIEFuYSAJOgkxCToJMjkyNTEKK1NhbiBJZ25hY2lvIAk6CTEJOgkyMzYwOAorTG9yZXRvIAk6CTEJOgkxNTY1OAorU2FuIEpvYXF1aW4gCToJMQk6CTEzNTM0CitNYWdkYWxlbmEgCToJMQk6CTIwMDg2CitDb2JpamEgCToJMQk6CTY2Njg5CitDb2JpamEgCToJMQk6CTM5NTc3CitQdWVydG8gUmljbyAJOgkxCToJOTUwNQorUHVlcnRvIEcuIE0uIAk6CTEJOgkxMTIyMAorU2FudGEgUm9zYSBkZWwgQWJ1buEgCToJMQk6CTM0NzUKK051ZXZhIEVzcGVyYW56YSAJOgkxCToJMjkxMgorU3VjcmUgCToJMQk6CTYwMTgyMworU3VjcmUgCToJMQk6CTI4OTc0OQorQXp1cmR1eSAJOgkxCToJMjkzOTcKK1ZpbGxhIFp1ZGHxZXogCToJMQk6CTM2NDY4CitQYWRpbGxhIAk6CTEJOgk0MDQ2MgorTW9udGVhZ3VkbyAJOgkxCToJMzkwOTQKK1RhcmFidWNvIAk6CTEJOgkzMDQ3MgorQ2FtYXJnbyAJOgkxCToJNzQ5NDkKK1ZpbGxhIFNlcnJhbm8gCToJMQk6CTEyODA4CitDYW1hdGFxdWkgCToJMQk6CTI1MjQ0CitWaWxsYSBWaXR0b3JpbyBHdXptYW4gCToJMQk6CTIzMTgwCitDb2NoYWJhbWJhIAk6CTEJOgkxNjcxODYwCitDb2NoYWJhbWJhIAk6CTEJOgk1NzgyMTkKK0FpcXVpbGUgCToJMQk6CTQwOTg2CitJbmRlcGVuZGVuY2lhIAk6CTEJOgk2NTEwNAorVGFyYXRhIAk6CTEJOgkzMzc0MAorQXJhbmkgCToJMQk6CTI1MDA5CitBcnF1ZSAJOgkxCToJMjY1NjQKK0NhcGlub3RhIAk6CTEJOgkyNjcyNQorQ2xpemEgCToJMQk6CTM0NDI2CitRdWlsbGFjb2xsbyAJOgkxCToJMzEzMjA0CitTYWNhYmEgCToJMQk6CTIyMTExOQorVGFwYWNhcu0gCToJMQk6CTI5OTM3CitUb3RvcmEgCToJMQk6CTEzOTkxNworTWl6cXVlIAk6CTEJOgk0MTA2MgorUHVuYXRhIAk6CTEJOgk0ODg2NAorQm9s7XZhciAJOgkxCToJOTU2MworVGlyYXF1ZSAJOgkxCToJMzc0MjEKK1RhcmlqYSAJOgkxCToJNDU5MDAxCitUYXJpamEgCToJMQk6CTE4MzAwMQorUGFkY2F5YSAJOgkxCToJNTgwNzUKK1lhY3VpYmEgCToJMQk6CTE0NDM2MAorVXJpb25kbyAJOgkxCToJMTg2OTkKK1NhbiBMb3JlbnpvIAk6CTEJOgkzNDA3MAorRW50cmUgUmlvcyAJOgkxCToJMjA3OTYKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL0JPU05JQSBBTkQgSEVSWkVHT1ZJTkFfQVJFQS50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9CT1NOSUEgQU5EIEhFUlpFR09WSU5BX0FSRUEudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk3NjA3YmUKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9CT1NOSUEgQU5EIEhFUlpFR09WSU5BX0FSRUEudHh0CkBAIC0wLDAgKzEgQEAKKyBCb3NuYSBpIEhlcmNlZ292aW5hIDogMSA6IDUxMTI5LjAKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL0JPU05JQSBBTkQgSEVSWkVHT1ZJTkFfUE9QVUxBVElPTi50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9CT1NOSUEgQU5EIEhFUlpFR09WSU5BX1BPUFVMQVRJT04udHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRmMTJmOWQKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9CT1NOSUEgQU5EIEhFUlpFR09WSU5BX1BPUFVMQVRJT04udHh0CkBAIC0wLDAgKzEgQEAKKyBCb3NuYSBpIEhlcmNlZ292aW5hIDogMSA6IDQ0ODA3OTEKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL0JPVFNXQU5BX0FSRUEudHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvQk9UU1dBTkFfQVJFQS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWE4MjhmNQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL0JPVFNXQU5BX0FSRUEudHh0CkBAIC0wLDAgKzEgQEAKK0JPVFNXQU5BIDogMCA6IDU4MTczMApkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvQk9UU1dBTkFfUE9QVUxBVElPTi50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9CT1RTV0FOQV9QT1BVTEFUSU9OLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZGU0YzY5Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvQk9UU1dBTkFfUE9QVUxBVElPTi50eHQKQEAgLTAsMCArMSBAQAorQk9UU1dBTkEgOiAwIDogMTY4MDg2MwpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvQlJBU0lMX0FSRUEudHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvQlJBU0lMX0FSRUEudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQxMzcwNTQKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9CUkFTSUxfQVJFQS50eHQKQEAgLTAsMCArMSwzNSBAQAorQnJhc2lsCToJMAk6CTg1MTE5NjUKK0NhcGFuZW1hIDogMSA6IDQwMDAKK1BvcnRvIFhhdmllciA6IDEgOiAyNjkxNQorUmVnaWFvIENlbnRyby1PZXN0ZSAgCToJMQk6CTE2MTIwNzUKK0Rpc3RyaXRvIEZlZGVyYWwgCToJMQk6CTU4MjIKK0dvaWFzIAk6CTEJOgkzNDEyODkKK01hdG8gR3Jvc3NvIAk6CTEJOgk5MDY4MDYKK01hdG8gR3Jvc3NvIGRvIFN1bCAJOgkxCToJMzU4MTU4CitSZWdpYW8gTm9yZGVzdGUgCToJMQk6CTE1NTgxOTYKK0FsYWdvYXMgCToJMQk6CTI3OTMzCitCYWhpYSAJOgkxCToJNTY3Mjk1CitDZWFyYQk6CTEJOgkxNDYzNDgKK01hcmFuaGFvCToJMQk6CTMzMzM2NQorUGFyYWliYSAJOgkxCToJNTY1ODQKK1Blcm5hbWJ1Y28gCToJMQk6CTk4OTM3CitQaWF1aSBbTWFyYW5oYW8vUGlhdWldCToJMQk6CTI1MjM3OAorUmlvIEdyYW5kZSBkbyBOb3J0ZSAJOgkxCToJNTMzMDYKK1NlcmdpcGUgCToJMQk6CTIyMDUwCitSZWdpYW8gTm9ydGUgCToJMQk6CTM4Njk2MzQKK0FjcmUgCToJMQk6CTE1MzE0OQorQW1hcGEJOgkxCToJMTQzNDUzCitBbWF6b25hcyAJOgkxCToJMTU3NzgyMAorUGFyYQk6CTEJOgkxMjUzMTY0CitSb25kb25pYQk6CTEJOgkyMzg1MTIKK1JvcmFpbWEgCToJMQk6CTIyNTExNgorVG9jYW50aW5zIAk6CTEJOgkyNzg0MjAKK1JlZ2lhbyBTdWRlc3RlIAk6CTEJOgk5MjcyODQKK0VzcGlyaXR1IFNhbnRvIFtFc3Bpcml0byBTYW50b10gCToJMQk6CTQ2MTg0CitNaW5hcyBHZXJhaXMgCToJMQk6CTU4ODM4MworUmlvIGRlIEphbmVpcm8gCToJMQk6CTQzOTA5CitTYW8gUGF1bG8gCToJMQk6CTI0ODgwOAorUmVnaeNvIFN1bCAJOgkxCToJNTc3MjEzCitQYXJhbmEJOgkxCToJMTk5NzA5CitSaW8gR3JhbmRlIGRvIFN1bCBbUmlvIEdyYWFuZGUgZG8gc3VsXSBbUmlvIEdybmRlIERvIFN1bF0JOgkxCToJMjgyMDYyCitTYW50YSBDYXRhcmluYSAJOgkxCToJOTU0NDIKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL0JSQVNJTF9QT1BVTEFUSU9OLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL0JSQVNJTF9QT1BVTEFUSU9OLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MDc2ZWYwCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvQlJBU0lMX1BPUFVMQVRJT04udHh0CkBAIC0wLDAgKzEsMzUgQEAKK0JyYXNpbAk6CTAJOgkxODgwNzgyMjcKK0NhcGFuZW1hIDogMSA6IDQ2MzAwCitQb3J0byBYYXZpZXIgOiAxIDogMTEzMjEgCitSZWdpYW8gQ2VudHJvLU9lc3RlICAJOgkxCToJMTMwMjA3NjcKK0Rpc3RyaXRvIEZlZGVyYWwgCToJMQk6CTIzMzMxMDgKK0dvaWFzIAk6CTEJOgk1NjE5OTE3CitNYXRvIEdyb3NzbyAJOgkxCToJMjgwMzI3NAorTWF0byBHcm9zc28gZG8gU3VsIAk6CTEJOgkyMjY0NDY4CitSZWdpYW8gTm9yZGVzdGUgCToJMQk6CTUxMDE5MDkxCitBbGFnb2FzIAk6CTEJOgkzMDE1OTEyCitCYWhpYSAJOgkxCToJMTM4MTUzMzQKK0NlYXJhCToJMQk6CTgwOTcyNzYKK01hcmFuaGFvCToJMQk6CTYxMDMzMjcKK1BhcmFpYmEgCToJMQk6CTM1OTU4ODYKK1Blcm5hbWJ1Y28gCToJMQk6CTg0MTM1OTMKK1BpYXVpIFtNYXJhbmhhby9QaWF1aV0JOgkxCToJMzAwNjg4NQorUmlvIEdyYW5kZSBkbyBOb3J0ZSAJOgkxCToJMzAwMzA4NworU2VyZ2lwZSAJOgkxCToJMTk2Nzc5MQorUmVnaWFvIE5vcnRlIAk6CTEJOgkxNDY5ODg3OAorQWNyZSAJOgkxCToJNjY5NzM2CitBbWFwYQk6CTEJOgk1OTQ1ODcKK0FtYXpvbmFzIAk6CTEJOgkzMjMyMzMwCitQYXJhCToJMQk6CTY5NzA1ODYKK1JvbmRvbmlhCToJMQk6CTE1MzQ1OTQKK1JvcmFpbWEgCToJMQk6CTM5MTMxNworVG9jYW50aW5zIAk6CTEJOgkxMzA1NzI4CitSZWdpYW8gU3VkZXN0ZSAJOgkxCToJNzg0NzIwMTcKK0VzcGlyaXR1IFNhbnRvIFtFc3Bpcml0byBTYW50b10gCToJMQk6CTM0MDgzNjUKK01pbmFzIEdlcmFpcyAJOgkxCToJMTkyMzc0NTAKK1JpbyBkZSBKYW5laXJvIAk6CTEJOgkxNTM4MzQwNworU2FvIFBhdWxvIAk6CTEJOgk0MDQ0Mjc5NQorUmVnaeNvIFN1bCAJOgkxCToJMjY5NzM1MTEKK1BhcmFuYQk6CTEJOgkxMDI2MTg1NgorUmlvIEdyYW5kZSBkbyBTdWwgW1JpbyBHcmFhbmRlIGRvIHN1bF0gW1JpbyBHcm5kZSBEbyBTdWxdCToJMQk6CTEwODQ1MDg3CitTYW50YSBDYXRhcmluYSAJOgkxCToJNTg2NjU2OApkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvQlJBWklMX0FSRUEudHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvQlJBWklMX0FSRUEudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2ZjEyZDEKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9CUkFaSUxfQVJFQS50eHQKQEAgLTAsMCArMSwzNSBAQAorQnJhc2lsCToJMAk6CTg1MTE5NjUKK0NhcGFuZW1hIDogMSA6IDQwMDAKK1BvcnRvIFhhdmllciA6IDEgOiAyNjkxNQorUmVnaWFvIENlbnRyby1PZXN0ZSAgCToJMQk6CTE2MTIwNzUKK0Rpc3RyaXRvIEZlZGVyYWwgCToJMQk6CTU4MjIKK0dvaWFzIAk6CTEJOgkzNDEyODkKK01hdG8gR3Jvc3NvIAk6CTEJOgk5MDY4MDYKK01hdG8gR3Jvc3NvIGRvIFN1bCAJOgkxCToJMzU4MTU4CitSZWdpYW8gTm9yZGVzdGUgCToJMQk6CTE1NTgxOTYKK0FsYWdvYXMgCToJMQk6CTI3OTMzCitCYWhpYSAJOgkxCToJNTY3Mjk1CitDZWFyYQk6CTEJOgkxNDYzNDgKK01hcmFuaGFvCToJMQk6CTMzMzM2NQorUGFyYWliYSAJOgkxCToJNTY1ODQKK1Blcm5hbWJ1Y28gCToJMQk6CTk4OTM3CitQaWF1aSBbTWFyYW5oYW8vUGlhdWldCToJMQk6CTI1MjM3OAorUmlvIEdyYW5kZSBkbyBOb3J0ZSAJOgkxCToJNTMzMDYKK1NlcmdpcGUgCToJMQk6CTIyMDUwCitSZWdpYW8gTm9ydGUgCToJMQk6CTM4Njk2MzQKK0FjcmUgCToJMQk6CTE1MzE0OQorQW1hcGEJOgkxCToJMTQzNDUzCitBbWF6b25hcyAJOgkxCToJMTU3NzgyMAorUGFyYQk6CTEJOgkxMjUzMTY0CitSb25kb25pYQk6CTEJOgkyMzg1MTIKK1JvcmFpbWEgCToJMQk6CTIyNTExNgorVG9jYW50aW5zIAk6CTEJOgkyNzg0MjAKK1JlZ2lhbyBTdWRlc3RlIAk6CTEJOgk5MjcyODQKK0VzcGlyaXR1IFNhbnRvIFtFc3Bpcml0byBTYW50b10gCToJMQk6CTQ2MTg0CitNaW5hcyBHZXJhaXMgCToJMQk6CTU4ODM4MworUmlvIGRlIEphbmVpcm8gCToJMQk6CTQzOTA5CitTYW8gUGF1bG8gCToJMQk6CTI0ODgwOAorUmVnaeNvIFN1bCAJOgkxCToJNTc3MjEzCitQYXJhbmEJOgkxCToJMTk5NzA5CitSaW8gR3JhbmRlIGRvIFN1bCBbUmlvIEdyYWFuZGUgZG8gc3VsXSBbUmlvIEdybmRlIERvIFN1bF0JOgkxCToJMjgyMDYyCitTYW50YSBDYXRhcmluYSAJOgkxCToJOTU0NDIKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9CUkFaSUxfUE9QVUxBVElPTi50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9CUkFaSUxfUE9QVUxBVElPTi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDA3NmVmMAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL0JSQVpJTF9QT1BVTEFUSU9OLnR4dApAQCAtMCwwICsxLDM1IEBACitCcmFzaWwJOgkwCToJMTg4MDc4MjI3CitDYXBhbmVtYSA6IDEgOiA0NjMwMAorUG9ydG8gWGF2aWVyIDogMSA6IDExMzIxIAorUmVnaWFvIENlbnRyby1PZXN0ZSAgCToJMQk6CTEzMDIwNzY3CitEaXN0cml0byBGZWRlcmFsIAk6CTEJOgkyMzMzMTA4CitHb2lhcyAJOgkxCToJNTYxOTkxNworTWF0byBHcm9zc28gCToJMQk6CTI4MDMyNzQKK01hdG8gR3Jvc3NvIGRvIFN1bCAJOgkxCToJMjI2NDQ2OAorUmVnaWFvIE5vcmRlc3RlIAk6CTEJOgk1MTAxOTA5MQorQWxhZ29hcyAJOgkxCToJMzAxNTkxMgorQmFoaWEgCToJMQk6CTEzODE1MzM0CitDZWFyYQk6CTEJOgk4MDk3Mjc2CitNYXJhbmhhbwk6CTEJOgk2MTAzMzI3CitQYXJhaWJhIAk6CTEJOgkzNTk1ODg2CitQZXJuYW1idWNvIAk6CTEJOgk4NDEzNTkzCitQaWF1aSBbTWFyYW5oYW8vUGlhdWldCToJMQk6CTMwMDY4ODUKK1JpbyBHcmFuZGUgZG8gTm9ydGUgCToJMQk6CTMwMDMwODcKK1NlcmdpcGUgCToJMQk6CTE5Njc3OTEKK1JlZ2lhbyBOb3J0ZSAJOgkxCToJMTQ2OTg4NzgKK0FjcmUgCToJMQk6CTY2OTczNgorQW1hcGEJOgkxCToJNTk0NTg3CitBbWF6b25hcyAJOgkxCToJMzIzMjMzMAorUGFyYQk6CTEJOgk2OTcwNTg2CitSb25kb25pYQk6CTEJOgkxNTM0NTk0CitSb3JhaW1hIAk6CTEJOgkzOTEzMTcKK1RvY2FudGlucyAJOgkxCToJMTMwNTcyOAorUmVnaWFvIFN1ZGVzdGUgCToJMQk6CTc4NDcyMDE3CitFc3Bpcml0dSBTYW50byBbRXNwaXJpdG8gU2FudG9dIAk6CTEJOgkzNDA4MzY1CitNaW5hcyBHZXJhaXMgCToJMQk6CTE5MjM3NDUwCitSaW8gZGUgSmFuZWlybyAJOgkxCToJMTUzODM0MDcKK1NhbyBQYXVsbyAJOgkxCToJNDA0NDI3OTUKK1JlZ2njbyBTdWwgCToJMQk6CTI2OTczNTExCitQYXJhbmEJOgkxCToJMTAyNjE4NTYKK1JpbyBHcmFuZGUgZG8gU3VsIFtSaW8gR3JhYW5kZSBkbyBzdWxdIFtSaW8gR3JuZGUgRG8gU3VsXQk6CTEJOgkxMDg0NTA4NworU2FudGEgQ2F0YXJpbmEgCToJMQk6CTU4NjY1NjgKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL0JSVU5FSV9BUkVBLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL0JSVU5FSV9BUkVBLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYzdjYWQ3Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvQlJVTkVJX0FSRUEudHh0CkBAIC0wLDAgKzEsNyBAQAorQnJ1bmVpCToJMAk6CTU3NzAKK0JlbGFpdCBkaXN0cmljdCAgCToJMQk6CTI3MjQKK0JydW5laS1NdWFyYSBkaXN0cmljdCAJOgkxCToJNTcwCitUZW1idXJvbmcJOgkxCToJMTMwNgorTXVhcmEvU2VyaWEvVHV0b25nCToJMQk6CTExNjYKKworCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9CUlVORUlfUE9QVUxBVElPTi50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9CUlVORUlfUE9QVUxBVElPTi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDVlNTMzYQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL0JSVU5FSV9QT1BVTEFUSU9OLnR4dApAQCAtMCwwICsxLDYgQEAKK0JydW5laQk6CTAJOgkzNzk0NDQKK0JlbGFpdCBkaXN0cmljdCAgCToJMQk6CTU5NjAwCitCcnVuZWktTXVhcmEgZGlzdHJpY3QgCToJMQk6CTI0NzIwMAorVGVtYnVyb25nCToJMQk6CTk0MDAKK011YXJhL1NlcmlhL1R1dG9uZwk6CTEJOgk0MTYwMAorCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9CVUxHQVJJQV9BUkVBLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL0JVTEdBUklBX0FSRUEudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE5YjAwMGIKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9CVUxHQVJJQV9BUkVBLnR4dApAQCAtMCwwICsxLDkgQEAKKyBNaWhhamxvdmdyYWQgOiAxIDogMTA2MDcuMAorIFJhemdyYWQgOiAxIDogMTA4NDIuMAorIFZhcm5hIDogMSA6IDExOTI5LjAKKyBMb3ZlYyA6IDEgOiAxNTE1MC4wCisgR3JhZCBTb2ZpamEgKG11bi4pIDogMSA6IDE4OTc5LjAKKyBCdXJnYXMgOiAxIDogMTQ2NTcuMAorIFNvZmlqYSAtIGNpdHkgOiAxIDogMTMxMS4wCisgUGxvdmRpdiA6IDEgOiAxMzYyOC4wCisgSGFza292byA6IDEgOiAxMzg5Mi4wCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9CVUxHQVJJQV9QT1BVTEFUSU9OLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL0JVTEdBUklBX1BPUFVMQVRJT04udHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJhYzAwMGQKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9CVUxHQVJJQV9QT1BVTEFUSU9OLnR4dApAQCAtMCwwICsxLDkgQEAKKyBNaWhhamxvdmdyYWQgOiAxIDogNjU1ODA2CisgUmF6Z3JhZCA6IDEgOiA4NDM1ODQKKyBWYXJuYSA6IDEgOiA5ODk4MjEKKyBMb3ZlYyA6IDEgOiAxMDQ4NjcxCisgR3JhZCBTb2ZpamEgKG11bi4pIDogMSA6IDEyMjA5MTQKKyBCdXJnYXMgOiAxIDogODc1NDI2CisgU29maWphIC0gY2l0eSA6IDEgOiAxMDEwOTU1CisgUGxvdmRpdiA6IDEgOiAxMjg3NjE0CisgSGFza292byA6IDEgOiAxMDU2Mzc0CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9CVVJLSU5BRkFTT19BUkVBLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL0JVUktJTkFGQVNPX0FSRUEudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg0MWRkN2YKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9CVVJLSU5BRkFTT19BUkVBLnR4dApAQCAtMCwwICsxLDU5IEBACitCdXJraW5hIDoJMAk6CTI3NDIwMAorQm91Y2xlIGR1IE1vdWhvdW4gIAk6CTEJOgkzNDE1MworQmFsZSAJOgkxCToJNDU5NQorQmFud2EgCToJMQk6CTU4ODIKK0tvc3NpIAk6CTEJOgk3MzI0CitNb3UgSG91biAJOgkxCToJNjY2OAorTmF5YWxhIAk6CTEJOgkzOTE5CitTb3Vyb3UgCToJMQk6CTU3NjUKK0Nhc2NhZGVzIAk6CTEJOgkxODQwNgorQ29tb2UgCToJMQk6CTE1Mjc3CitMZXJhYmEgCToJMQk6CTMxMjkKK0NlbnRyZSAJOgkxCToJMjgwNQorS2FkaW9nbyAJOgkxCToJMjgwNQorQ2VudHJlLUVzdCAJOgkxCToJMTE4MTEKK0JvdWxnb3UgCToJMQk6CTY2OTIKK0tvdWxwZWxvZ28gCToJMQk6CTI0OTcKK0tvdXJpdGVuZ2EgCToJMQk6CTI2MjIKK0NlbnRyZS1Ob3JkIAk6CTEJOgkxOTgyOQorQmFtIAk6CTEJOgk0MDg0CitOYW1lbnRlbmdhIAk6CTEJOgk2NDY0CitTYW5tYXRlbmdhIAk6CTEJOgk5MjgxCitDZW50cmUtT3Vlc3QgCToJMQk6CTIxNzIyCitCb3Vsa2llbWRlIAk6CTEJOgk0MjY5CitTYW5ndWllIAk6CTEJOgk1MTc4CitTaXNzaWxpIAk6CTEJOgk3MTM2CitaaXJvIAk6CTEJOgk1MTM5CitDZW50cmUtU3VkIAk6CTEJOgkxMTMyMQorQmF6ZWdhIAk6CTEJOgkzOTYzCitOYWhvdXJpIAk6CTEJOgkzNzU0Citab3VuZHfpb2dvIFtab3VuZHdlb2dvXSAJOgkxCToJMzYwNAorRXN0IAk6CTEJOgk0NjI1NgorR25hZ25hIAk6CTEJOgk4NDY4CitHb3VybWEgCToJMQk6CTExMTE3CitLb21hbmRqYXJpIAk6CTEJOgk1MDQ4CitLb21waWVuZ2EgCToJMQk6CTcwMjkKK1RhcG9hIAk6CTEJOgkxNDU5NAorSGF1dHMtQmFzc2lucyAJOgkxCToJMjUzNDQKK0hvdWV0IAk6CTEJOgkxMTU2OAorS2VuZWRvdWdvdSAJOgkxCToJODEzNworVHV5IAk6CTEJOgk1NjM5CitOb3JkIAk6CTEJOgkxNjIwNworTG9ydW0gCToJMQk6CTM1OTIKK1Bhc3NvcmUgCToJMQk6CTM4NjcKK1lhdGVuZ2EgCToJMQk6CTY5OTAKK1phbmRvbWEgCToJMQk6CTE3NTgKK1BsYXRlYXUgQ2VudHJhbCAJOgkxCToJODU0NAorR2Fuem91cmdvdSAJOgkxCToJNDE3OAorS291cndlb2dvIAk6CTEJOgkxNTg4CitPdWJyaXRlbmdhIAk6CTEJOgkyNzc4CitTYWhlbCAJOgkxCToJMzUzNTAKK091ZGFsYW4gCToJMQk6CTk3OTcKK1Nlbm8gCToJMQk6CTY4NjMKK1NvdW0gCToJMQk6CTEyMjIyCitZYWdoYSAJOgkxCToJNjQ2OAorU3VkLU91ZXN0IAk6CTEJOgkxNjIwMgorQm91Z291cmliYSAJOgkxCToJMjgxMgorSW9iYSAJOgkxCToJMzI4OQorTm91bWJpZWwgCToJMQk6CTI3MzYKK1BvbmkgCToJMQk6CTczNjUKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL0JVUktJTkFGQVNPX1BPUFVMQVRJT04udHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvQlVSS0lOQUZBU09fUE9QVUxBVElPTi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzRjOTAzOQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL0JVUktJTkFGQVNPX1BPUFVMQVRJT04udHh0CkBAIC0wLDAgKzEsNTkgQEAKK0J1cmtpbmEJOgkwCToJMTM5MDI5NzkKK0JvdWNsZSBkdSBNb3Vob3VuICAJOgkxCToJMTQ2NDE2MworQmFsZSAJOgkxCToJMTk4MTQxCitCYW53YSAJOgkxCToJMjcxNTkxCitLb3NzaSAJOgkxCToJMjg5MDEzCitNb3UgSG91biAJOgkxCToJMjk2NTYxCitOYXlhbGEgCToJMQk6CTE3MTA1NQorU291cm91IAk6CTEJOgkyMzc4MDIKK0Nhc2NhZGVzIAk6CTEJOgk0MjE3MTUKK0NvbW9lIAk6CTEJOgkzMDQ0ODkKK0xlcmFiYSAJOgkxCToJMTE3MjI2CitDZW50cmUgCToJMQk6CTE0ODgxNzYKK0thZGlvZ28gCToJMQk6CTE0ODgxNzYKK0NlbnRyZS1Fc3QgCToJMQk6CTEwODAzNDQKK0JvdWxnb3UgCToJMQk6CTUyNDQyOQorS291bHBlbG9nbyAJOgkxCToJMjM2Mzk4CitLb3VyaXRlbmdhIAk6CTEJOgkzMTk1MTcKK0NlbnRyZS1Ob3JkIAk6CTEJOgkxMTYwOTYxCitCYW0gCToJMQk6CTI3MTc2MAorTmFtZW50ZW5nYSAJOgkxCToJMzAzODM1CitTYW5tYXRlbmdhIAk6CTEJOgk1ODUzNjYKK0NlbnRyZS1PdWVzdCAJOgkxCToJMTI0NTA1MgorQm91bGtpZW1kZSAJOgkxCToJNTg2MjY1CitTYW5ndWllIAk6CTEJOgkzMTQ4NDIKK1Npc3NpbGkgCToJMQk6CTE5MzU1MworWmlybyAJOgkxCToJMTUwMzkyCitDZW50cmUtU3VkIAk6CTEJOgk2Njg5NjAKK0JhemVnYSAJOgkxCToJMjY5MjM1CitOYWhvdXJpIAk6CTEJOgkxNTEwNDcKK1pvdW5kd+lvZ28gW1pvdW5kd2VvZ29dIAk6CTEJOgkyNDg2NzgKK0VzdCAJOgkxCToJMTA3MzE1OQorR25hZ25hIAk6CTEJOgkzODM5NzQKK0dvdXJtYSAJOgkxCToJMjc3NjcwCitLb21hbmRqYXJpIAk6CTEJOgk2MzY4NAorS29tcGllbmdhIAk6CTEJOgk1MTQyNQorVGFwb2EgCToJMQk6CTI5NjQwNgorSGF1dHMtQmFzc2lucyAJOgkxCToJMTMwMTc3NgorSG91ZXQgCToJMQk6CTg0MzUwNQorS2VuZWRvdWdvdSAJOgkxCToJMjU1NTI1CitUdXkgCToJMQk6CTIwMjc0NgorTm9yZCAJOgkxCToJMTE5NjQ3MAorTG9ydW0gCToJMQk6CTE0MDQ1MAorUGFzc29yZSAJOgkxCToJMzM0MTg0CitZYXRlbmdhIAk6CTEJOgk1NjA4MDQKK1phbmRvbWEgCToJMQk6CTE2MTAzMgorUGxhdGVhdSBDZW50cmFsIAk6CTEJOgk3MzgyNTIKK0dhbnpvdXJnb3UgCToJMQk6CTM0MDU5NAorS291cndlb2dvIAk6CTEJOgkxNDg4NDgKK091YnJpdGVuZ2EgCToJMQk6CTI0ODgxMAorU2FoZWwgCToJMQk6CTg4NTQyMQorT3VkYWxhbiAJOgkxCToJMTY0OTAxCitTZW5vIAk6CTEJOgkyNTQ1MTUKK1NvdW0gCToJMQk6CTMxOTE0NAorWWFnaGEgCToJMQk6CTE0Njg2MQorU3VkLU91ZXN0IAk6CTEJOgk2MTE4MzIKK0JvdWdvdXJpYmEgCToJMQk6CTk2MTIyCitJb2JhIAk6CTEJOgkyMDM3MDcKK05vdW1iaWVsIAk6CTEJOgk2NDg4MAorUG9uaSAJOgkxCToJMjQ3MTIzCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9CVVJLSU5BX0FSRUEudHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvQlVSS0lOQV9BUkVBLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NDFkZDdmCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvQlVSS0lOQV9BUkVBLnR4dApAQCAtMCwwICsxLDU5IEBACitCdXJraW5hIDoJMAk6CTI3NDIwMAorQm91Y2xlIGR1IE1vdWhvdW4gIAk6CTEJOgkzNDE1MworQmFsZSAJOgkxCToJNDU5NQorQmFud2EgCToJMQk6CTU4ODIKK0tvc3NpIAk6CTEJOgk3MzI0CitNb3UgSG91biAJOgkxCToJNjY2OAorTmF5YWxhIAk6CTEJOgkzOTE5CitTb3Vyb3UgCToJMQk6CTU3NjUKK0Nhc2NhZGVzIAk6CTEJOgkxODQwNgorQ29tb2UgCToJMQk6CTE1Mjc3CitMZXJhYmEgCToJMQk6CTMxMjkKK0NlbnRyZSAJOgkxCToJMjgwNQorS2FkaW9nbyAJOgkxCToJMjgwNQorQ2VudHJlLUVzdCAJOgkxCToJMTE4MTEKK0JvdWxnb3UgCToJMQk6CTY2OTIKK0tvdWxwZWxvZ28gCToJMQk6CTI0OTcKK0tvdXJpdGVuZ2EgCToJMQk6CTI2MjIKK0NlbnRyZS1Ob3JkIAk6CTEJOgkxOTgyOQorQmFtIAk6CTEJOgk0MDg0CitOYW1lbnRlbmdhIAk6CTEJOgk2NDY0CitTYW5tYXRlbmdhIAk6CTEJOgk5MjgxCitDZW50cmUtT3Vlc3QgCToJMQk6CTIxNzIyCitCb3Vsa2llbWRlIAk6CTEJOgk0MjY5CitTYW5ndWllIAk6CTEJOgk1MTc4CitTaXNzaWxpIAk6CTEJOgk3MTM2CitaaXJvIAk6CTEJOgk1MTM5CitDZW50cmUtU3VkIAk6CTEJOgkxMTMyMQorQmF6ZWdhIAk6CTEJOgkzOTYzCitOYWhvdXJpIAk6CTEJOgkzNzU0Citab3VuZHfpb2dvIFtab3VuZHdlb2dvXSAJOgkxCToJMzYwNAorRXN0IAk6CTEJOgk0NjI1NgorR25hZ25hIAk6CTEJOgk4NDY4CitHb3VybWEgCToJMQk6CTExMTE3CitLb21hbmRqYXJpIAk6CTEJOgk1MDQ4CitLb21waWVuZ2EgCToJMQk6CTcwMjkKK1RhcG9hIAk6CTEJOgkxNDU5NAorSGF1dHMtQmFzc2lucyAJOgkxCToJMjUzNDQKK0hvdWV0IAk6CTEJOgkxMTU2OAorS2VuZWRvdWdvdSAJOgkxCToJODEzNworVHV5IAk6CTEJOgk1NjM5CitOb3JkIAk6CTEJOgkxNjIwNworTG9ydW0gCToJMQk6CTM1OTIKK1Bhc3NvcmUgCToJMQk6CTM4NjcKK1lhdGVuZ2EgCToJMQk6CTY5OTAKK1phbmRvbWEgCToJMQk6CTE3NTgKK1BsYXRlYXUgQ2VudHJhbCAJOgkxCToJODU0NAorR2Fuem91cmdvdSAJOgkxCToJNDE3OAorS291cndlb2dvIAk6CTEJOgkxNTg4CitPdWJyaXRlbmdhIAk6CTEJOgkyNzc4CitTYWhlbCAJOgkxCToJMzUzNTAKK091ZGFsYW4gCToJMQk6CTk3OTcKK1Nlbm8gCToJMQk6CTY4NjMKK1NvdW0gCToJMQk6CTEyMjIyCitZYWdoYSAJOgkxCToJNjQ2OAorU3VkLU91ZXN0IAk6CTEJOgkxNjIwMgorQm91Z291cmliYSAJOgkxCToJMjgxMgorSW9iYSAJOgkxCToJMzI4OQorTm91bWJpZWwgCToJMQk6CTI3MzYKK1BvbmkgCToJMQk6CTczNjUKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL0JVUktJTkFfUE9QVUxBVElPTi50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9CVVJLSU5BX1BPUFVMQVRJT04udHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI1ZTg1MzYKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9CVVJLSU5BX1BPUFVMQVRJT04udHh0CkBAIC0wLDAgKzEsNTkgQEAKK0J1cmtpbmEgOgkwCToJMTM5MDI5NzkKK0JvdWNsZSBkdSBNb3Vob3VuICAJOgkxCToJMTQ2NDE2MworQmFsZSAJOgkxCToJMTk4MTQxCitCYW53YSAJOgkxCToJMjcxNTkxCitLb3NzaSAJOgkxCToJMjg5MDEzCitNb3UgSG91biAJOgkxCToJMjk2NTYxCitOYXlhbGEgCToJMQk6CTE3MTA1NQorU291cm91IAk6CTEJOgkyMzc4MDIKK0Nhc2NhZGVzIAk6CTEJOgk0MjE3MTUKK0NvbW9lIAk6CTEJOgkzMDQ0ODkKK0xlcmFiYSAJOgkxCToJMTE3MjI2CitDZW50cmUgCToJMQk6CTE0ODgxNzYKK0thZGlvZ28gCToJMQk6CTE0ODgxNzYKK0NlbnRyZS1Fc3QgCToJMQk6CTEwODAzNDQKK0JvdWxnb3UgCToJMQk6CTUyNDQyOQorS291bHBlbG9nbyAJOgkxCToJMjM2Mzk4CitLb3VyaXRlbmdhIAk6CTEJOgkzMTk1MTcKK0NlbnRyZS1Ob3JkIAk6CTEJOgkxMTYwOTYxCitCYW0gCToJMQk6CTI3MTc2MAorTmFtZW50ZW5nYSAJOgkxCToJMzAzODM1CitTYW5tYXRlbmdhIAk6CTEJOgk1ODUzNjYKK0NlbnRyZS1PdWVzdCAJOgkxCToJMTI0NTA1MgorQm91bGtpZW1kZSAJOgkxCToJNTg2MjY1CitTYW5ndWllIAk6CTEJOgkzMTQ4NDIKK1Npc3NpbGkgCToJMQk6CTE5MzU1MworWmlybyAJOgkxCToJMTUwMzkyCitDZW50cmUtU3VkIAk6CTEJOgk2Njg5NjAKK0JhemVnYSAJOgkxCToJMjY5MjM1CitOYWhvdXJpIAk6CTEJOgkxNTEwNDcKK1pvdW5kd+lvZ28gW1pvdW5kd2VvZ29dCToJMQk6CTI0ODY3OAorRXN0IAk6CTEJOgkxMDczMTU5CitHbmFnbmEgCToJMQk6CTM4Mzk3NAorR291cm1hIAk6CTEJOgkyNzc2NzAKK0tvbWFuZGphcmkgCToJMQk6CTYzNjg0CitLb21waWVuZ2EgCToJMQk6CTUxNDI1CitUYXBvYSAJOgkxCToJMjk2NDA2CitIYXV0cy1CYXNzaW5zIAk6CTEJOgkxMzAxNzc2CitIb3VldCAJOgkxCToJODQzNTA1CitLZW5lZG91Z291IAk6CTEJOgkyNTU1MjUKK1R1eSAJOgkxCToJMjAyNzQ2CitOb3JkIAk6CTEJOgkxMTk2NDcwCitMb3J1bSAJOgkxCToJMTQwNDUwCitQYXNzb3JlIAk6CTEJOgkzMzQxODQKK1lhdGVuZ2EgCToJMQk6CTU2MDgwNAorWmFuZG9tYSAJOgkxCToJMTYxMDMyCitQbGF0ZWF1IENlbnRyYWwgCToJMQk6CTczODI1MgorR2Fuem91cmdvdSAJOgkxCToJMzQwNTk0CitLb3Vyd2VvZ28gCToJMQk6CTE0ODg0OAorT3Vicml0ZW5nYSAJOgkxCToJMjQ4ODEwCitTYWhlbCAJOgkxCToJODg1NDIxCitPdWRhbGFuIAk6CTEJOgkxNjQ5MDEKK1Nlbm8gCToJMQk6CTI1NDUxNQorU291bSAJOgkxCToJMzE5MTQ0CitZYWdoYSAJOgkxCToJMTQ2ODYxCitTdWQtT3Vlc3QgCToJMQk6CTYxMTgzMgorQm91Z291cmliYSAJOgkxCToJOTYxMjIKK0lvYmEgCToJMQk6CTIwMzcwNworTm91bWJpZWwgCToJMQk6CTY0ODgwCitQb25pIAk6CTEJOgkyNDcxMjMKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL0JVUlVORElfQVJFQS50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9CVVJVTkRJX0FSRUEudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlmNDhjMWUKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9CVVJVTkRJX0FSRUEudHh0CkBAIC0wLDAgKzEsMTMwIEBACitCVVJVTkRJOjA6Mjc4MzAKK0NJQklUT0tFOjE6NjYxLjkwMworTkdPWkk6MTo1MzkuNTQ1CitCVUJBTlpBOjE6Mzc2LjA3NAorS0FZQU5aQToxOjQ0OC4zNjUKK0JVSlVNQlVSQToxOjcyNS40NzEKK0dJVEVHQToxOjcwMC43ODcKK0JVUlVSSToxOjEyNjMuMDExCitLQVJVWkk6MTo1MTcuNTUyCitNVVlJTkdBOjE6Njc2LjU0MQorTUFLQU1CQToxOjExMTQuMzYwCitNVVJBTVZJWUE6MTo1ODguMjM4CitSVVRBTkE6MTo0NzUuMDEyCitSVVlJR0k6MTo4NjIuNzU0CitLSVJVTkRPOjE6Nzc2LjE3OQorQ0FOS1VaTzoxOjc5Ni45MjgKK1JVWUlHSToyOjEwNi44NDQ2MzMKK0JVR0FCSVJBOjI6OTUuOTEzNDkwCitNVVJXSToyOjk2Ljg5MDEwMAorR0lTSFVCSToyOjEwMC4yNzc4OTYKK0dJU0FHQVJBOjI6NzcuMjA5MjU1CitNVUJJTUJJOjI6MzEuNTc3MjY0CitNV0FLSVJPOjI6NzcuMDI4Nzc4CitCVUtFTUJBOjI6NzQuMDY5Mzc1CitHQUhPTUJPOjI6MzcuNTQ3MjY3CitCVVJBTUJJOjI6ODMuNTMyMjU1CitSVVNBS0E6Mjo1NS4yMTA1ODEKK0dJVEFOR0E6MjozOS4yOTI0MzAKK01VVElNQlVaSToyOjg2LjUwNDkxMworR0FTT1JXRToyOjgwLjAwMDE5MAorR0lIQVJPOjI6MTQ4LjkwNDU1NworTVVHQU1CQToyOjExNy43MjY5MjUKK05ZQUJJR0lOQToyOjUzLjcwMDE0OAorR0lURVJBTllJOjI6MTI1LjI4Mjg1MgorTUFCQVk6MjoxNDYuOTI4MTYwCitLSVJFTUJBOjI6ODEuODA4OTAzCitCVUdFTkRBTkE6Mjo5OC41MzQ5MTgKK0tJR0FNQkE6MjoyMzYuMTIwNDE4CitCSVNPUk86MjoyOS4xMjY2NDMKK1JVVEVHQU1BOjI6NDYuMDQ4MDM5CitLQUJFWkk6MjoxMzYuNjE2NjU2CitOVEVHQToyOjExOS41MDI5NTYKK0dBU0hPSE86Mjo2OS40NTYxMDAKK1RBTkdBUkE6Mjo4MC4xOTY1MjUKK01VUkFNVklZQToyOjgyLjYzMTc3MgorS0FZT0tXRToyOjQxLjQ1NzUyNQorR0FTSElLQU5XQToyOjU1LjYwMDQ1NgorR0lTT1pJOjI6NTcuNDYxMTg0CitSWUFOU09STzoyOjY2LjE0NjM0MQorR0FUQVJBOjI6NjAuMTM4OTkzCitSVUdBWkk6Mjo1Mi44MjcyNDkKK0tJR0FOREE6MjozNi4yOTY4NzEKK1NPTkdBOjI6MTA2LjMyMDI4NQorTUFUQU5BOjI6NzguNjUxOTY3CitNVVNISUhBOjI6MTU1LjMxMTQ2MgorTVVHT05HT01BTkdBOjI6NjMuMjYwMTU1CitCVUhJTlZVWkE6Mjo5Ny4zMTQwNDQKK01VU09OR0FUSToyOjY0Ljg3MjYwOAorS0FOWU9TSEE6Mjo1NS4yNDY2MjYKK0lUQUJBOjI6NjkuOTM1NDg3CitNVUhBTkdBOjI6NTEuNDYyMTIzCitTSE9NQk86Mjo1Mi4yNDMyNDIKK01VWUlOR0E6MjoxMTUuNTYwNjkxCitCVUtJTkFOVkFOQToyOjEyMi43MjUwOTMKK05ZQUJJS0VSRToyOjgzLjcyMzMyNgorTUFSQU5HQVJBOjI6NjguNzk0NzE1CitWWUFOREE6Mjo3NC4zNjY4MjUKK01QSU5HQS1LQVlPVkU6Mjo3Ni4wNDg0NTAKK0JVS0VZRToyOjg4LjAyMjA3NgorQlVHRU5ZVVpJOjI6ODQuMzQ5MjE1CitCVVlFTkdFUk86Mjo3Ni43Mjc3NTMKK0JVVEVaSToyOjk1LjQzMDczMAorTllBTlpBIExBQzoyOjQ2Ny45MTE0MzcKK1JVVEFOQToyOjcxLjgyNDU4MAorUlVNT05HRToyOjQ0My43ODc3ODkKK0lTQUxFLU1VR0FSVVJPOjI6MjcuNTI3Nzg2CitCVVNPTkk6MjoyMTAuNDE2NjUyCitCVUhJR0E6Mjo5Mi4zODA0MTEKK01VSFVUQToyOjE3MS4wOTI3NjQKK1JVR09NQk86Mjo4My4xMzEzNzIKK01VS0lLRToyOjI4LjkzMzc2OQorQldFUlU6MjoxNTIuMDg1MTcyCitLSVJVTkRPOjI6MTAyLjI1NTEyMgorUlVUT1ZVOjI6MTIwLjc1NTMwMQorTVVUVU1CQToyOjcxLjA0NTYxNgorTVVTSUdBVEk6Mjo5NS45MTM5NjEKK01VUlVUQToyOjQ2LjIxNjM4NgorR0lUQVJBTVVLQToyOjY3Ljc5ODU3MQorR0lURUdBOjI6MTA2LjY0NzY0OQorR0lUT0JFOjI6NzUuOTk5ODM2CitSQU5HTzoyOjUyLjE2MTYzMQorTVVUQU1CVToyOjQ5LjIzNTUxNAorS0FZQU5aQToyOjM4Ljg5MTg3NQorQlVSVVJJOjI6MTYxLjE0MTkwMAorTUJVWUU6MjozOS43NDA3MTUKK05ZQUJJR0lOQSAoQlVKKToyOjc1LjQ3NTU1MworTkRBVkE6Mjo1OC41NDI0NDcKK05ZQUJJVFNJTkRBOjI6ODguOTgxMzA2CitNVVRBSE86Mjo1Ni42ODY5NzkKK0JVVEFHQU5aV0FMOjI6NDYuMDM3MTQzCitCV0FNQkFSQU5HV0U6Mjo4Mi4zMzA2NzkKK0tBQkFST1JFOjI6NTkuOTEwMjg2CitHSVNVUlU6MjoxODYuNjgxNDAzCitDRU5EQUpVUlU6MjoxMTQuNjYzOTc3CitCVUJBTlpBOjI6ODMuMDg3NjY3CitOVkFNVVJFTlpBOjI6MzcuMzg5ODUwCitOR09aSToyOjU4LjU1NjU0NQorTVVHSU5BOjI6MTE3LjA1NjMxNQorTVdVTUJBOjI6NDcuMzkxNzA3CitNQVRPTkdPOjI6NTUuOTk5Mjk3CitHSUhFVEE6Mjo1Ny4xMzk4NzcKK0tJTllJTllBOjI6ODguMjY3OTEwCitLQVlPR09STzoyOjExNi41MjYyNTUKK0JVU0lHQToyOjUyLjA0NTY0MworR0lIT0dBWkk6Mjo2Ni4wMTE2MTgKK0JVR0FOREE6Mjo5NS4xNzE5NjAKK0NBTktVWk86MjoyMTMuNjIyODg5CitSVUhPUk9STzoyOjU3Ljc2MDY1NQorQlVLSVJBU0FaSToyOjM0LjgwNDg5OAorQlVUSUhJTkRBOjI6MTExLjg5ODM0NQorVlVHSVpPOjI6OTcuNTM1NDQ2CitNUEFOREE6Mjo0MC40NDk0NjAKK0JVVEFHQU5aV0EyOjI6MTQ0LjQ2Mjg0NworS0lCQUdPOjI6MTE2LjExNTE5MgorTUFLQU1CQToyOjE1Mi4wMzM0MDMKK01BS0VCVUtPOjI6NTIuNzczMzUzCitNQUJBTkRBOjI6MTY0LjIzODI2OAorQlVSQVpBOjI6NTcuODM5NjAyCitWVU1CSS1CVUtVQkE6Mjo4OS43NjAyNjUKK0dJSEFOR0E6MjoxMDMuNzk1NjYzCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9CVVJVTkRJX1BPUFVMQVRJT04udHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvQlVSVU5ESV9QT1BVTEFUSU9OLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNzdkNWQwCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvQlVSVU5ESV9QT1BVTEFUSU9OLnR4dApAQCAtMCwwICsxLDEzMCBAQAorQlVSVU5ESTowOjYzNzA2MDk6MjI4LjkxMTU3MAorQlVCQU5aQToxOjI1MzQ0Njo2NzMuOTI1ODc2CitCVUpVTUJVUkE6MTo2NjkwMzE6OTIyLjIwMjI2NgorQlVSVVJJOjE6NDQwOTE5OjM0OS4xMDE0NzMKK0NBTktVWk86MToxNTk1Njg6MjAwLjIyODg3OQorQ0lCSVRPS0U6MTozMTcxNTk6NDc5LjE2MjM1NQorR0lURUdBOjE6NjMzMDU2OjkwMy4zNTAwOTEKK0tBUlVaSToxOjMzODUxMDo2NTQuMDU5ODgyCitLQVlBTlpBOjE6NDk3ODg4OjExMTAuNDUyNDIyCitLSVJVTkRPOjE6NDUzOTk2OjU4NC45MTE0NzAKK01BS0FNQkE6MToyNzAxNTc6MjQyLjQzMjQyOAorTVVSQU1WSVlBOjE6NDk0MzgyOjg0MC40NDU1MzQKK01VWUlOR0E6MTo0MzI2MjQ6NjM5LjQ2NDU3MQorTkdPWkk6MTo1NDI5MzA6MTAwNi4yNzM4MDUKK1JVVEFOQToxOjIyMjIwNjo0NjcuNzkwMjg3CitSVVlJR0k6MToyODUxNjc6MzMwLjUzMTA2NworR0lURVJBTllJOjI6NjE4MDM6NDkzLjMxMTE1NgorQlVHQUJJUkE6Mjo2NDg1Njo2NzYuMTk4NjM5CitCVVNPTkk6Mjo2NDg1NjozMDguMjI5MjcyCitCV0FNQkFSQU5HV0U6Mjo2NDg1Njo3ODcuNzU3MDMzCitLSVJVTkRPOjI6NjQ4NTY6NjM0LjI2MjMyNQorTlRFR0E6Mjo2NDg1Njo1NDIuNzE5MzkwCitHSVRPQkU6Mjo2NDg1Njo4NTMuMzc3NzgxCitCVVRJSElOREE6Mjo2MTgwMzo1NTIuMzE3NjI5CitNVUdJTkE6Mjo1Mjg1OTo0NTEuNTc2MDkzCitWVU1CSS1CVUtVQkE6Mjo2NDg1Njo3MjIuNTUzMjUzCitNQUJBWToyOjUyODU5OjM1OS43NjY1MjQKK01BUkFOR0FSQToyOjYwMzI1Ojg3Ni44OTIyOTYKK01VWUlOR0E6Mjo2MTgwMzo1MzQuODEzNTk1CitHQVNIT0hPOjI6NjE4MDM6ODg5LjgyMDAyNAorUlVHT01CTzoyOjUyODU5OjYzNS44NTkwMjcKK05WQU1VUkVOWkE6Mjo2MDMyNToxNjEzLjQyMDYzNgorS0lSRU1CQToyOjYwMzI1OjczNy4zOTU5NzIKK01XVU1CQToyOjYwMzI1OjEyNzIuOTEzNzUyCitCVUtJTkFOVkFOQToyOjUyODU5OjQzMC43MTc0MDMKK0dBU09SV0U6Mjo2MTgwMzo3NzIuNTQxMDIyCitNVVJXSToyOjUyODU5OjU0NS41NjQ4NTUKK0JVU0lHQToyOjYwMzI1OjExNTkuMDg5NDQ3CitLQUJBUk9SRToyOjU1MzIwOjkyMy4zOTU1MDcKK0dBU0hJS0FOV0E6Mjo2MDMyNToxMDg0Ljk4MzEwOAorVEFOR0FSQToyOjYwMzI1Ojc1Mi4yMjE1NjUKK0JVSElOVlVaQToyOjYxODAzOjYzNS4wOTI1OTMKK0tBWUFOWkE6Mjo1NTMyMDoxNDIyLjQyNzkyMQorQlVHQU5EQToyOjUyODU5OjU1NS40MTM5NDEKK05HT1pJOjI6NjAzMjU6MTAzMC4yMTAyOTYKK01VUlVUQToyOjU1MzIwOjExOTYuOTk3MjkyCitHQVRBUkE6Mjo1NTMyMDo5MTkuODgzODU4CitHQUhPTUJPOjI6NTUzMjA6MTQ3My4zNjY1OTQKK0tJR0FNQkE6MjozMTkxMzoxMzUuMTU4MTU1CitHSVRBUkFNVUtBOjI6NDgzNTg6NzEzLjI2ODI5OQorTVVTSUdBVEk6Mjo1MDY4OTo1MjguNDg2MTUwCitSVUhPUk9STzoyOjYwMzI1OjEwNDQuNDA1NjY5CitCVUJBTlpBOjI6NTA2ODk6NjEwLjA2ODg4MQorTVVTSElIQToyOjMxOTEzOjIwNS40ODEyOTMKK0JVR0VOWVVaSToyOjQ4MzU4OjU3My4zMTM4MjkKK01VSEFOR0E6Mjo1NTMyMDoxMDc0Ljk4MjY0MQorQlVISUdBOjI6NDgzNTg6NTIzLjQ3MjE0MAorTUFUT05HTzoyOjU1MzIwOjk4Ny44ODU0MTcKK01XQUtJUk86Mjo2MTgwMzo4MDIuMzQyMDYyCitHSUhPR0FaSToyOjQ4MzU4OjczMi41NzY2NzIKK0JVVEFHQU5aV0FMOjI6NTUzMjA6MTIwMS42NTc3MzMKK01VVEFITzoyOjYzMzA1OjExMTYuNzU3MzQyCitDQU5LVVpPOjI6MzE5MTM6MTQ5LjM5MjIzMQorR0lIQU5HQToyOjUwNjg5OjQ4OC4zNTU2NjUKK0JVS0VZRToyOjQ0OTQzOjUxMC41OTcxMTYKK1JBTkdPOjI6NTUzMjA6MTA2MC41NjY3MDEKK01VVFVNQkE6Mjo0ODM1ODo2ODAuNjY5MzI0CitNUEFOREE6Mjo1MDY4OToxMjUzLjE0ODk5MQorUlVHQVpJOjI6NTA2ODk6OTU5LjUyNzUzNQorR0lTQUdBUkE6MjozMTkxMzo0MTMuMzM5MDQ5CitCVUdFTkRBTkE6Mjo2MzMwNTo2NDIuNDY4NjkzCitOWUFCSUtFUkU6Mjo0ODM1ODo1NzcuNTk5NzQxCitTSE9NQk86Mjo0ODM1ODo5MjUuNjQyNjIxCitNQlVZRToyOjQ0OTQzOjExMzAuOTI2MjYwCitCV0VSVToyOjQwNzM4OjI2Ny44NjQwMDIKK0NFTkRBSlVSVToyOjMxOTEzOjI3OC4zMjI4MDgKK1JVVEVHQU1BOjI6NDQ5NDM6OTc2LjAyMDI0MgorTVVSQU1WSVlBOjI6NDQ5NDM6NTQzLjkwNDgwOQorR0lIRVRBOjI6NjMzMDU6MTEwNy45MDU3ODAKK01VVElNQlVaSToyOjY2OTAzOjc3My40MDIzMTUKK01VQklNQkk6Mjo2NjkwMzoyMTE4LjcxMTEwOAorQlVURVpJOjI6NDA3Mzg6NDI2Ljg4NzA1MQorS0lHQU5EQToyOjQ0OTQzOjEyMzguMjI4NDQ2CitOREFWQToyOjQ0OTQzOjc2Ny43MTMzNTEKK05ZQUJJR0lOQSAoQlVKKToyOjY2OTAzOjg4Ni40MjA3OTkKK0dJU1VSVToyOjQwNzM4OjIxOC4yMjI4MjMKK0lTQUxFLU1VR0FSVVJPOjI6NjY5MDM6MjQzMC4zODQzNDAKK1JVWUlHSToyOjQwNzM4OjM4MS4yODM5NDIKK05ZQUJJR0lOQToyOjQ0OTQzOjgzNi45NDAzMDQKK0dJVEVHQToyOjYzMzA1OjU5My41OTU4MzMKK01VR09OR09NQU5HQToyOjY2OTAzOjEwNTcuNTg2NzIzCitLQU5ZT1NIQToyOjY2OTAzOjEyMTAuOTg5NzkwCitSVVNBS0E6Mjo0NDk0Mzo4MTQuMDQzNTY1CitCVVRBR0FOWldBMjoyOjQwNzM4OjI4MS45OTczNzAKK0tBQkVaSToyOjY2OTAzOjQ4OS43MTQwODAKK0tBWU9LV0U6Mjo0NDk0MzoxMDg0LjA5MzEzMworTllBQklUU0lOREE6Mjo0MDczODo0NTcuODI4MTA3CitJVEFCQToyOjYzMzA1OjkwNS4xOTk5NTkKK01VVEFNQlU6Mjo2NjkwMzoxMzU4LjgzODI1NgorS0lOWUlOWUE6Mjo0MDczODo0NjEuNTI4MzUwCitNQUtFQlVLTzoyOjYzMzA1OjExOTkuNTc1MDk2CitNVUtJS0U6Mjo2NjkwMzoyMzEyLjI4NDMwNworR0lTSFVCSToyOjYzMzA1OjYzMS4zMDE2MzgKK0dJU09aSToyOjQ0OTQzOjc4Mi4xNTk2MjYKK01VR0FNQkE6Mjo0ODk5MTo0MTYuMTQwOTk3CitCSVNPUk86Mjo0NDk0MzoxNTQzLjA0ODM0MgorTVVIVVRBOjI6NjY5MDM6MzkxLjAzNDA3MQorUllBTlNPUk86Mjo2MzMwNTo5NTcuMDUzNjk0CitCVUtJUkFTQVpJOjI6NjMzMDU6MTgxOC44NzA0MzYKK01VU09OR0FUSToyOjM3MDM0OjU3MC44Nzc4MjUKK0dJSEFSTzoyOjM3MDM0OjI0OC43MTE4ODcKK01QSU5HQS1LQVlPVkU6MjozNzAzNDo0ODYuOTgzNDA4CitNQVRBTkE6Mjo0ODk5MTo2MjIuODgzMzQxCitCVVJBWkE6Mjo2MzMwNToxMDk0LjUwMjY5MAorQlVSQU1CSToyOjQ4OTkxOjU4Ni40OTIwMDgKK1JVTU9OR0U6Mjo0ODk5MToxMTAuMzkyODUzCitSVVRPVlU6Mjo0ODk5MTo0MDUuNzA0NzU3CitCVVlFTkdFUk86Mjo0ODk5MTo2MzguNTA0Mjk3CitTT05HQToyOjQ4OTkxOjQ2MC43ODY5NTEKK1JVVEFOQToyOjM3MDM0OjUxNS42MjE5OTYKK0JVUlVSSToyOjQ4OTkxOjMwNC4wMjM5NjkKK0JVS0VNQkE6MjozNzAzNDo0OTkuOTk1MjE4CitHSVRBTkdBOjI6MzcwMzQ6OTQyLjUzMTAwMAorTUFLQU1CQToyOjQ1MDI2OjI5Ni4xNTk2OTgKK1ZZQU5EQToyOjQ4OTkxOjY1OC43NzQ5MzEKK0tBWU9HT1JPOjI6NDUwMjY6Mzg2LjQwMzYxOQorVlVHSVpPOjI6NDUwMjY6NDYxLjYzOTAwOQorTllBTlpBIExBQzoyOjQ1MDI2Ojk2LjIyNzk2OAorTUFCQU5EQToyOjQ1MDI2OjI3NC4xNTE0OTUKK0tJQkFHTzoyOjQ1MDI2OjM4Ny43NzE1MzkKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL0NBTUJPRElBX0FSRUEudHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvQ0FNQk9ESUFfQVJFQS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWM5NjAzNQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL0NBTUJPRElBX0FSRUEudHh0CkBAIC0wLDAgKzEsMjExIEBACitDYW1ib2RpYQk6CTAJOgkxODEwNDAKK0JhbnRlYXkgTWVhbmNoZXkJOgkxCToJNjY3OQorTW9uZ2tvbCBCb3JlaSAJOgkJOgkwCitQaG51bSBTcm9rIAk6CQk6CTAKK1ByZWFoIE5ldHIgUHJlYWggCToJCToJMAorT3UgQ2hyb3YgCToJCToJMAorU2VyZWkgU2FvcGhvYW4gCToJCToJMAorVGhtYSBQdW9rIAk6CQk6CTAKK1N2YXkgQ2hlayAJOgkJOgkwCitNYWxhaSAJOgkJOgkwCitCYXR0YW1iYW5nIAk6CTEJOgkxMTcwMgorQmFuYW4gCToJCToJMAorVGhtYSBLb3VsIAk6CQk6CTAKK0JhdCBEYW1iYW5nIAk6CQk6CTAKK0JhdmVsIAk6CQk6CTAKK0FlayBQaG51bSAJOgkJOgkwCitNb3VuZyBSdWVzc2VpIAk6CQk6CTAKK1JvdGFuYWsgTW9uZG9sIAk6CQk6CTAKK1NhbmdrYWUgCToJCToJMAorU2FtbG91dCAJOgkJOgkwCitTYW1wb3YgTHVuIAk6CQk6CTAKK1BobnVtIFByb2VrIAk6CQk6CTAKK0thbXJpZW5nIAk6CQk6CTAKK0tvYXMgS3JhbGEgCToJCToJMAorS2FtcG9uZyBDaGFtIAk6CTEJOgk5Nzk5CitCYXRoZWF5IAk6CQk6CTAKK0NoYW1rYXIgTGV1IAk6CQk6CTAKK0NoZXVuZyBQcmV5IAk6CQk6CTAKK0RhbWJhZSAJOgkJOgkwCitLYW1wb25nIENoYW0gCToJCToJMAorS2FtcG9uZyBTaWVtIAk6CQk6CTAKK0thbmcgTWVhcyAJOgkJOgkwCitLYW9oIFNvdXRpbiAJOgkJOgkwCitLcm91Y2ggQ2hobWFyIAk6CQk6CTAKK01lbW90IAk6CQk6CTAKK091IFJlYW5nIE92IAk6CQk6CTAKK1BvbmhhZSBLcmFlayAJOgkJOgkwCitQcmV5IENoaG9yIAk6CQk6CTAKK1NyZWkgU2FudGhvciAJOgkJOgkwCitTdHVlbmcgVHJhbmcgCToJCToJMAorVGJvdW5nIEtobXVtIAk6CQk6CTAKK0thbXBvbmcgQ2hobmFuZyAJOgkxCToJNTUyMQorQmFyaWJvdXIgCToJCToJMAorQ2hvbCBLaXJpIAk6CQk6CTAKK0thbXBvbmcgQ2hubmFuZyAJOgkJOgkwCitLYW1wb25nIExlYWVuZyAJOgkJOgkwCitLYW1wb25nIFRyYWxhY2ggCToJCToJMAorUm9sZWEgQidpZXIgCToJCToJMAorU2FtZWFra2kgTWVhbiBDaGV5IAk6CQk6CTAKK1R1ZWsgUGhvcyAJOgkJOgkwCitLYW1wb25nIFNwZXUgCToJMQk6CTcwMTcKK0Jhc2VkdGggCToJCToJMAorQ2hiYXIgTW9uIAk6CQk6CTAKK0tvbmcgUGlzZWkgCToJCToJMAorQW9yYWwgCToJCToJMAorT2RvbmdrIAk6CQk6CTAKK1BobnVtIFNydW9jaCAJOgkJOgkwCitTYW1yYW9uZyBUb25nIAk6CQk6CTAKK1RocG9uZyAJOgkJOgkwCitLYW1wb25nIFRob20gCToJMQk6CTEzODE0CitCYXJheSAJOgkJOgkwCitLYW1wb25nIFN2YXkgCToJCToJMAorU3R1ZW5nIFNhZW4gCToJCToJMAorUHJhc2F0IEJhbGFuZ2sgCToJCToJMAorUHJhc2F0IFNhbWJvdXIgCToJCToJMAorU2FuZGFuIAk6CQk6CTAKK1NhbnR1ayAJOgkJOgkwCitTdG91bmcgCToJCToJMAorS2FtcG90IAk6CTEJOgk0ODczCitBbmdrb3IgQ2hleSAJOgkJOgkwCitCYW50ZWF5IE1lYXMgCToJCToJMAorQ2hodWsgCToJCToJMAorQ2h1bSBLaXJpIAk6CQk6CTAKK0RhbmcgVG9uZyAJOgkJOgkwCitLYW1wb25nIFRyYWNoIAk6CQk6CTAKK0thbXBvdCAJOgkJOgkwCitUb25sZSBTYXAgIAk6CTEJOgk0ODczCitLYW1wb25nIEJheSAJOgkJOgkwCitLaGV0IEthbmRhbCAJOgkJOgkzNTY4CitLYW5kYWwgU3R1ZW5nIAk6CQk6CTAKK0tpZW4gU3ZheSAJOgkJOgkwCitLaHNhY2ggS2FuZGFsIAk6CQk6CTAKK0thb2ggVGh1bSAJOgkJOgkwCitMZXVrIERhZWsgCToJCToJMAorTHZlYSBBZW0gCToJCToJMAorTXVraCBLYW1wdWwgCToJCToJMAorQW5nayBTbnVvbCAJOgkJOgkwCitQb25oZWEgTHVldSAJOgkJOgkwCitTJ2FuZyAJOgkJOgkwCitUYSBLaG1hdSBbS2FuZGFsXQk6CTEJOgkzNTY4CitLb2ggS29uZyAJOgkxCToJMTExNjAKK0JvdHVtIFNha29yIAk6CQk6CTAKK0tpcmkgU2Frb3IgCToJCToJMAorS2FvaCBLb25nIAk6CQk6CTAKK1NtYWNoIE1lYW4gQ2hleSAJOgkJOgkwCitNb25kb2wgU2VpbWEgCToJCToJMAorU3JhZSBBbWJlbCAJOgkJOgkwCitUaG1hIEJhbmcgCToJCToJMAorS2FtcG9uZyBTZWlsYSAJOgkJOgkwCitLcmF0aWUgCToJMQk6CTExMDk0CitDaGhsb3VuZyAJOgkJOgkwCitLcmFjaGVoIAk6CQk6CTAKK1ByZWFlayBQcmFzYWIgCToJCToJMAorU2FtYm91ciAJOgkJOgkwCitTbnVvbCAJOgkJOgkwCitTZW5tb25vdXJvbSBbTW9uZHVsIEtpcmldCToJMQk6CTE0Mjg4CitLYWV2IFNlaW1hIAk6CQk6CTAKK0thb2ggTmhlYWVrIAk6CQk6CTAKK091IFJlYW5nIAk6CQk6CTAKK1BlY2hyIENoZW5kYSAJOgkJOgkwCitTYWVuIE1vbm91cm9tIAk6CQk6CTAKK1Bobm9tIFBlbmggCToJMQk6CTI5MAorQ2hhbWthciBNb24gCToJCToJMAorRG91biBQZW5oIAk6CQk6CTAKK1ByYW1waXIgTWVha2thcmEgCToJCToJMAorVHVvbCBLb3VrIAk6CQk6CTAKK0RhbmdrYW8gCToJCToJMAorTWVhbiBDaGV5IAk6CQk6CTAKK1J1ZXNzZWkgS2FldiAJOgkJOgkwCitQaG51bSBUYmVuZyBNZWFuY2hleSBbUHJlYWggVmloZWFyXQk6CTEJOgkxMzc4OAorQ2hleSBTYWVuIAk6CQk6CTAKK0NoaGFlYiAJOgkJOgkwCitDaG9hbSBLaHNhbnQgCToJCToJMAorS3VsZWFlbiAJOgkJOgkwCitSb3ZpZW5nIAk6CQk6CTAKK1Nhbmdrb20gVGhtZWkgCToJCToJMAorVGJhZW5nIE1lYW4gQ2hleSAJOgkJOgkwCitQcmV5IFZlbmcgCToJMQk6CTQ4ODMKK0JhIFBobnVtIAk6CQk6CTAKK0thbWNoYXkgTWVhciAJOgkJOgkwCitLYW1wb25nIFRyYWJhZWsgCToJCToJMAorS2FuaGNocmllY2ggCToJCToJMAorTWUgU2FuZyAJOgkJOgkwCitQZWFtIENob3IgCToJCToJMAorUGVhbSBSbyAJOgkJOgkwCitQZWEgUmVhbmcgCToJCToJMAorUHJlYWggU2RhY2ggCToJCToJMAorUHJleSBWZWFlbmcgCToJCToJMAorS2FtcG9uZyBMZWF2IAk6CQk6CTAKK1NpdGhvciBLYW5kYWwgCToJCToJMAorUHVyc2F0IAk6CTEJOgkxMjY5MgorQmFrYW4gCToJCToJMAorS2FuZGllbmcgCToJCToJMAorS3Jha29yIAk6CQk6CTAKK1BobnVtIEtyYXZhbmggCToJCToJMAorU2FtcG92IE1lYXMgCToJCToJMAorVmVhbCBWZWFlbmcgCToJCToJMAorTHVtcGhhdCBbUmF0YW5hIEtpcmldCToJMQk6CTEwNzgyCitBbmRvdW5nIE1lYXMgCToJCToJMAorQmFuIEx1bmcgCToJCToJMAorQmFyIEthZXYgCToJCToJMAorS291biBNb20gCToJCToJMAorTHVtcGhhdCAJOgkJOgkwCitPdSBDaHVtIAk6CQk6CTAKK091IFlhIERhdiAJOgkJOgkwCitUYSBWZWFlbmcgCToJCToJMAorVmV1biBTYWkgCToJCToJMAorU2llbSByZWFwIAk6CTEJOgkxMDI5OQorQW5na29yIENodW0gCToJCToJMAorQW5na29yIFRodW0gCToJCToJMAorQmFudGVheSBzcmVpIAk6CQk6CTAKK0NoaSBLcmFlbmcgCToJCToJMAorS3JhbGFuaCAJOgkJOgkwCitQdW9rIAk6CQk6CTAKK1ByYXNhdCBCYWtvbmcgCToJCToJMAorU2llbSBSZWFiIAk6CQk6CTAKK1NvdXRyIE5pa29tIAk6CQk6CTAKK1NyZWkgU25hbSAJOgkJOgkwCitTdmF5IExldSAJOgkJOgkwCitWYXJpbiAJOgkJOgkwCitTaWhhbm91a3ZpbGxlIAk6CTEJOgk4NjgKK01pdHRha3BoZWFwIAk6CQk6CTAKK1ByZXkgTm9iIAk6CQk6CTAKK1N0dWVuZyBoYXYgCToJCToJMAorU3R1bmcgVHJlbmcgCToJMQk6CTExMDkyCitTZXNhbiAJOgkJOgkwCitTaWVtIEJvdWsgCToJCToJMAorU2llbSBQYW5nIAk6CQk6CTAKK1N0dWVuZyBUcmFlbmcgCToJCToJMAorVGhhbGEgQmFyaXZhdCAJOgkJOgkwCitTdmF5IFJpZW5nIAk6CTEJOgkyOTY2CitDaGFudHJlYSAJOgkJOgkwCitLYW1wb25nIFJvdSAJOgkJOgkwCitSdW1kdW9sIAk6CQk6CTAKK1JvbWVhcyBIYWVrIAk6CQk6CTAKK1N2YXkgQ2hydW0gCToJCToJMAorU3ZheSBSaWVuZyAJOgkJOgkwCitTdmF5IFRlYWIgCToJCToJMAorVGFrZW8gCToJMQk6CTM1NjMKK0FuZ2tvciBCb3JlaSAJOgkJOgkwCitCYXRpIAk6CQk6CTAKK0JvdXJlaSBDaG9sc2FyIAk6CQk6CTAKK0tpcmkgVm9uZyAJOgkJOgkwCitLYW9oIEFuZGFldCAJOgkJOgkwCitQcmV5IEthYmJhcyAJOgkJOgkwCitTYW1yYW9uZyAJOgkJOgkwCitEb3VuIEthZXYgCToJCToJMAorVHJhbSBLYWsgCToJCToJMAorVHJlYW5nIAk6CQk6CTAKK0toZXQgT2RkYXIgTWVhbmNoZXkgCToJCToJNjE1OAorQW5sb25nIFZlYWVuZyAJOgkJOgkwCitCYW50ZWF5IEFtcGlsIAk6CQk6CTAKK0Nob25nIEthbCAJOgkJOgkwCitTYW1yYW9uZyAJOgkJOgkwCitUcmFwZWFuZyBQcmFzYXQgCToJCToJMAorS2VwIAk6CTEJOgkzMzYKK0RhbW5hayBDaGFuZydhZXVyIAk6CQk6CTAKK0thZWIgCToJCToJMAorUGFpbGluIAk6CTEJOgk4MDMKK1BhaWxpbiAJOgkJOgkwCitTYWxhIEtyYXUgCToJCToJMApkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvQ0FNQk9ESUFfUE9QVUxBVElPTi50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9DQU1CT0RJQV9QT1BVTEFUSU9OLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNTMxNWE3Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvQ0FNQk9ESUFfUE9QVUxBVElPTi50eHQKQEAgLTAsMCArMSwyMTEgQEAKK0NhbWJvZGlhCToJMAk6CTEzODgxNDI3CitCYW50ZWF5IE1lYW5jaGV5CToJMQk6CTc3MzA5MgorTW9uZ2tvbCBCb3JlaSAJOgkJOgkwCitQaG51bSBTcm9rIAk6CQk6CTAKK1ByZWFoIE5ldHIgUHJlYWggCToJCToJMAorT3UgQ2hyb3YgCToJCToJMAorU2VyZWkgU2FvcGhvYW4gCToJCToJMAorVGhtYSBQdW9rIAk6CQk6CTAKK1N2YXkgQ2hlayAJOgkJOgkwCitNYWxhaSAJOgkJOgkwCitCYXR0YW1iYW5nIAk6CTEJOgk5OTc4NDAKK0JhbmFuIAk6CQk6CTAKK1RobWEgS291bCAJOgkJOgkwCitCYXQgRGFtYmFuZyAJOgkJOgkwCitCYXZlbCAJOgkJOgkwCitBZWsgUGhudW0gCToJCToJMAorTW91bmcgUnVlc3NlaSAJOgkJOgkwCitSb3RhbmFrIE1vbmRvbCAJOgkJOgkwCitTYW5na2FlIAk6CQk6CTAKK1NhbWxvdXQgCToJCToJMAorU2FtcG92IEx1biAJOgkJOgkwCitQaG51bSBQcm9layAJOgkJOgkwCitLYW1yaWVuZyAJOgkJOgkwCitLb2FzIEtyYWxhIAk6CQk6CTAKK0thbXBvbmcgQ2hhbSAJOgkxCToJMTg1NzUwMAorQmF0aGVheSAJOgkJOgkwCitDaGFta2FyIExldSAJOgkJOgkwCitDaGV1bmcgUHJleSAJOgkJOgkwCitEYW1iYWUgCToJCToJMAorS2FtcG9uZyBDaGFtIAk6CQk6CTAKK0thbXBvbmcgU2llbSAJOgkJOgkwCitLYW5nIE1lYXMgCToJCToJMAorS2FvaCBTb3V0aW4gCToJCToJMAorS3JvdWNoIENoaG1hciAJOgkJOgkwCitNZW1vdCAJOgkJOgkwCitPdSBSZWFuZyBPdiAJOgkJOgkwCitQb25oYWUgS3JhZWsgCToJCToJMAorUHJleSBDaGhvciAJOgkJOgkwCitTcmVpIFNhbnRob3IgCToJCToJMAorU3R1ZW5nIFRyYW5nIAk6CQk6CTAKK1Rib3VuZyBLaG11bSAJOgkJOgkwCitLYW1wb25nIENoaG5hbmcgCToJMQk6CTUxMzE3OQorQmFyaWJvdXIgCToJCToJMAorQ2hvbCBLaXJpIAk6CQk6CTAKK0thbXBvbmcgQ2hubmFuZyAJOgkJOgkwCitLYW1wb25nIExlYWVuZyAJOgkJOgkwCitLYW1wb25nIFRyYWxhY2ggCToJCToJMAorUm9sZWEgQidpZXIgCToJCToJMAorU2FtZWFra2kgTWVhbiBDaGV5IAk6CQk6CTAKK1R1ZWsgUGhvcyAJOgkJOgkwCitLYW1wb25nIFNwZXUgCToJMQk6CTcyOTU1MgorQmFzZWR0aCAJOgkJOgkwCitDaGJhciBNb24gCToJCToJMAorS29uZyBQaXNlaSAJOgkJOgkwCitBb3JhbCAJOgkJOgkwCitPZG9uZ2sgCToJCToJMAorUGhudW0gU3J1b2NoIAk6CQk6CTAKK1NhbXJhb25nIFRvbmcgCToJCToJMAorVGhwb25nIAk6CQk6CTAKK0thbXBvbmcgVGhvbSAJOgkxCToJNjgxNjkyCitCYXJheSAJOgkJOgkwCitLYW1wb25nIFN2YXkgCToJCToJMAorU3R1ZW5nIFNhZW4gCToJCToJMAorUHJhc2F0IEJhbGFuZ2sgCToJCToJMAorUHJhc2F0IFNhbWJvdXIgCToJCToJMAorU2FuZGFuIAk6CQk6CTAKK1NhbnR1ayAJOgkJOgkwCitTdG91bmcgCToJCToJMAorS2FtcG90IAk6CTEJOgk2MDI2MjQKK0FuZ2tvciBDaGV5IAk6CQk6CTAKK0JhbnRlYXkgTWVhcyAJOgkJOgkwCitDaGh1ayAJOgkJOgkwCitDaHVtIEtpcmkgCToJCToJMAorRGFuZyBUb25nIAk6CQk6CTAKK0thbXBvbmcgVHJhY2ggCToJCToJMAorVG9ubGUgU2FwICAJOgkxCToJNDg3MworS2FtcG90IAk6CTEJOgk2MDI2MDAKK0thbXBvbmcgQmF5IAk6CQk6CTAKK0toZXQgS2FuZGFsIAk6CQk6CTEyNDI1MDYKK0thbmRhbCBTdHVlbmcgCToJCToJMAorS2llbiBTdmF5IAk6CQk6CTAKK0toc2FjaCBLYW5kYWwgCToJCToJMAorS2FvaCBUaHVtIAk6CQk6CTAKK0xldWsgRGFlayAJOgkJOgkwCitMdmVhIEFlbSAJOgkJOgkwCitNdWtoIEthbXB1bCAJOgkJOgkwCitBbmdrIFNudW9sIAk6CQk6CTAKK1BvbmhlYSBMdWV1IAk6CQk6CTAKK1MnYW5nIAk6CQk6CTAKK1RhIEtobWF1IFtLYW5kYWxdCToJMQk6CTEyNDI1MDAKK0tvaCBLb25nIAk6CTEJOgkxOTE0NjgKK0JvdHVtIFNha29yIAk6CQk6CTAKK0tpcmkgU2Frb3IgCToJCToJMAorS2FvaCBLb25nIAk6CQk6CTAKK1NtYWNoIE1lYW4gQ2hleSAJOgkJOgkwCitNb25kb2wgU2VpbWEgCToJCToJMAorU3JhZSBBbWJlbCAJOgkJOgkwCitUaG1hIEJhbmcgCToJCToJMAorS2FtcG9uZyBTZWlsYSAJOgkJOgkwCitLcmF0aWUgCToJMQk6CTMzMzc2MQorQ2hobG91bmcgCToJCToJMAorS3JhY2hlaCAJOgkJOgkwCitQcmVhZWsgUHJhc2FiIAk6CQk6CTAKK1NhbWJvdXIgCToJCToJMAorU251b2wgCToJCToJMAorU2VubW9ub3Vyb20gIFtNb25kdWwgS2lyaV0JOgkxCToJNDI0MTIKK0thZXYgU2VpbWEgCToJCToJMAorS2FvaCBOaGVhZWsgCToJCToJMAorT3UgUmVhbmcgCToJCToJMAorUGVjaHIgQ2hlbmRhIAk6CQk6CTAKK1NhZW4gTW9ub3Vyb20gCToJCToJMAorUGhub20gUGVuaCAJOgkxCToJMTMxMzg1MQorQ2hhbWthciBNb24gCToJCToJMAorRG91biBQZW5oIAk6CQk6CTAKK1ByYW1waXIgTWVha2thcmEgCToJCToJMAorVHVvbCBLb3VrIAk6CQk6CTAKK0RhbmdrYW8gCToJCToJMAorTWVhbiBDaGV5IAk6CQk6CTAKK1J1ZXNzZWkgS2FldiAJOgkJOgkwCitQaG51bSBUYmVuZyBNZWFuY2hleSBbUHJlYWggVmloZWFyXQk6CTEJOgkxNTIzNzgKK0NoZXkgU2FlbiAJOgkJOgkwCitDaGhhZWIgCToJCToJMAorQ2hvYW0gS2hzYW50IAk6CQk6CTAKK0t1bGVhZW4gCToJCToJMAorUm92aWVuZyAJOgkJOgkwCitTYW5na29tIFRobWVpIAk6CQk6CTAKK1RiYWVuZyBNZWFuIENoZXkgCToJCToJMAorUHJleSBWZW5nIAk6CTEJOgkxMDQ0Mzc2CitCYSBQaG51bSAJOgkJOgkwCitLYW1jaGF5IE1lYXIgCToJCToJMAorS2FtcG9uZyBUcmFiYWVrIAk6CQk6CTAKK0thbmhjaHJpZWNoIAk6CQk6CTAKK01lIFNhbmcgCToJCToJMAorUGVhbSBDaG9yIAk6CQk6CTAKK1BlYW0gUm8gCToJCToJMAorUGVhIFJlYW5nIAk6CQk6CTAKK1ByZWFoIFNkYWNoIAk6CQk6CTAKK1ByZXkgVmVhZW5nIAk6CQk6CTAKK0thbXBvbmcgTGVhdiAJOgkJOgkwCitTaXRob3IgS2FuZGFsIAk6CQk6CTAKK1B1cnNhdCAJOgkxCToJNDI4MTczCitCYWthbiAJOgkJOgkwCitLYW5kaWVuZyAJOgkJOgkwCitLcmFrb3IgCToJCToJMAorUGhudW0gS3JhdmFuaCAJOgkJOgkwCitTYW1wb3YgTWVhcyAJOgkJOgkwCitWZWFsIFZlYWVuZyAJOgkJOgkwCitMdW1waGF0IFtSYXRhbmEgS2lyaV0JOgkxCToJMTIxMDI4CitBbmRvdW5nIE1lYXMgCToJCToJMAorQmFuIEx1bmcgCToJCToJMAorQmFyIEthZXYgCToJCToJMAorS291biBNb20gCToJCToJMAorTHVtcGhhdCAJOgkJOgkwCitPdSBDaHVtIAk6CQk6CTAKK091IFlhIERhdiAJOgkJOgkwCitUYSBWZWFlbmcgCToJCToJMAorVmV1biBTYWkgCToJCToJMAorU2llbSByZWFwIAk6CTEJOgk4NjEyMTQKK0FuZ2tvciBDaHVtIAk6CQk6CTAKK0FuZ2tvciBUaHVtIAk6CQk6CTAKK0JhbnRlYXkgc3JlaSAJOgkJOgkwCitDaGkgS3JhZW5nIAk6CQk6CTAKK0tyYWxhbmggCToJCToJMAorUHVvayAJOgkJOgkwCitQcmFzYXQgQmFrb25nIAk6CQk6CTAKK1NpZW0gUmVhYiAJOgkJOgkwCitTb3V0ciBOaWtvbSAJOgkJOgkwCitTcmVpIFNuYW0gCToJCToJMAorU3ZheSBMZXUgCToJCToJMAorVmFyaW4gCToJCToJMAorU2loYW5vdWt2aWxsZSAJOgkxCToJMjA5MDA1CitNaXR0YWtwaGVhcCAJOgkJOgkwCitQcmV5IE5vYiAJOgkJOgkwCitTdHVlbmcgaGF2IAk6CQk6CTAKK1N0dW5nIFRyZW5nIAk6CTEJOgkxMDM5MzMKK1Nlc2FuIAk6CQk6CTAKK1NpZW0gQm91ayAJOgkJOgkwCitTaWVtIFBhbmcgCToJCToJMAorU3R1ZW5nIFRyYWVuZyAJOgkJOgkwCitUaGFsYSBCYXJpdmF0IAk6CQk6CTAKK1N2YXkgUmllbmcgCToJMQk6CTUzODE4MAorQ2hhbnRyZWEgCToJCToJMAorS2FtcG9uZyBSb3UgCToJCToJMAorUnVtZHVvbCAJOgkJOgkwCitSb21lYXMgSGFlayAJOgkJOgkwCitTdmF5IENocnVtIAk6CQk6CTAKK1N2YXkgUmllbmcgCToJCToJMAorU3ZheSBUZWFiIAk6CQk6CTAKK1Rha2VvIAk6CTEJOgk5MDA4ODAKK0FuZ2tvciBCb3JlaSAJOgkJOgkwCitCYXRpIAk6CQk6CTAKK0JvdXJlaSBDaG9sc2FyIAk6CQk6CTAKK0tpcmkgVm9uZyAJOgkJOgkwCitLYW9oIEFuZGFldCAJOgkJOgkwCitQcmV5IEthYmJhcyAJOgkJOgkwCitTYW1yYW9uZyAJOgkJOgkwCitEb3VuIEthZXYgCToJCToJMAorVHJhbSBLYWsgCToJCToJMAorVHJlYW5nIAk6CQk6CTAKK0toZXQgT2RkYXIgTWVhbmNoZXkgCToJCToJOTc4MDMKK0FubG9uZyBWZWFlbmcgCToJCToJMAorQmFudGVheSBBbXBpbCAJOgkJOgkwCitDaG9uZyBLYWwgCToJCToJMAorU2FtcmFvbmcgCToJCToJMAorVHJhcGVhbmcgUHJhc2F0IAk6CQk6CTAKK0tlcCAJOgkxCToJMzc3ODYKK0RhbW5hayBDaGFuZydhZXVyIAk6CQk6CTAKK0thZWIgCToJCToJMAorUGFpbGluIAk6CTEJOgkzMjY5MAorUGFpbGluIAk6CQk6CTAKK1NhbGEgS3JhdSAJOgkJOgkwCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9DQU1FUk9PTl9BUkVBLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL0NBTUVST09OX0FSRUEudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIyMDNkNjcKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9DQU1FUk9PTl9BUkVBLnR4dApAQCAtMCwwICsxIEBACitDQU1FUk9PTiA6IDAgOiA0NjQ5NTIKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL0NBTUVST09OX1BPUFVMQVRJT04udHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvQ0FNRVJPT05fUE9QVUxBVElPTi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmZlZTdlZQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL0NBTUVST09OX1BPUFVMQVRJT04udHh0CkBAIC0wLDAgKzEgQEAKK0NBTUVST09OIDogMCA6IDEwNDkzNjU1CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9DQU5BREFfQVJFQS50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9DQU5BREFfQVJFQS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjU4MThjNwotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL0NBTkFEQV9BUkVBLnR4dApAQCAtMCwwICsxLDE2IEBACitDYW5hZGEJOgkwCToJOTk4NDY3MAorQWxiZXJ0YSAgCToJMQk6CTY2MTg0OAorQnJpdGlzaCBDb2x1bWJpYSAJOgkxCToJOTQ0NzM1CitNYW5pdG9iYSAJOgkxCToJNjQ3Nzk3CitOZXcgQnJ1bnN3aWNrIAk6CTEJOgk3MjkwOAorTmV3Zm91bmRsYW5kIAk6CTEJOgk0MDUyMTIKK05vcnRod2VzdCBUZXJyaXRvcmllcyAJOgkxCToJMTM0NjEwNgorTm92YSBTY290aWEgCToJMQk6CTU1Mjg0CitOdW5hdnV0IAk6CTEJOgkyMDkzMTkwCitPbnRhcmlvIAk6CTEJOgkxMDc2Mzk1CitQcmluY2UgRWR3YXJkIElzbGFuZCAJOgkxCToJNTY2MAorUXVlYmVjIAk6CTEJOgkxNTQyMDU2CitTYXNrYXRjaGV3YW4gCToJMQk6CTY1MTAzNgorWXVrb24gVGVycml0b3J5IAk6CTEJOgk0ODI0NDMKKworCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9DQU5BREFfUE9QVUxBVElPTi50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9DQU5BREFfUE9QVUxBVElPTi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTZlY2Q2ZAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL0NBTkFEQV9QT1BVTEFUSU9OLnR4dApAQCAtMCwwICsxLDE3IEBACitDYW5hZGEJOgkwCToJMzI0MjI5MTkKK0FsYmVydGEgIAk6CTEJOgkzMzA2MzU5CitCcml0aXNoIENvbHVtYmlhIAk6CTEJOgk0Mjc5NDYyCitNYW5pdG9iYSAJOgkxCToJMTE3ODM0OAorTmV3IEJydW5zd2ljayAJOgkxCToJNzUxMTExCitOZXdmb3VuZGxhbmQgYW5kIExhYnJhZG9yIAk6CTEJOgk1MTQ0MDkKK05vcnRod2VzdCBUZXJyaXRvcmllcyAJOgkxCToJNDI1MjYKK05vdmEgU2NvdGlhIAk6CTEJOgk5MzY5ODgKK051bmF2dXQgCToJMQk6CTMwMjQ1CitPbnRhcmlvIAk6CTEJOgkxMjU5OTM2NAorUHJpbmNlIEVkd2FyZCBJc2xhbmQgCToJMQk6CTEzODE1NworUXVlYmVjIAk6CTEJOgk3NjIzODcwCitTYXNrYXRjaGV3YW4gCToJMQk6CTk5MDkzMAorWXVrb24gVGVycml0b3J5IAk6CTEJOgkzMTE1MAorCisKKwpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvQ0FQRSBWRVJERV9BUkVBLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL0NBUEUgVkVSREVfQVJFQS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWY2OTg1OQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL0NBUEUgVkVSREVfQVJFQS50eHQKQEAgLTAsMCArMSwyMCBAQAorQ2FwZSBWZXJkZQk6CTAJOgk0MDMzCitJbGhhcyBkZSBCYXJsb3ZlbnRvICAJOgkxCToJMjIzMAorQm9hIFZpc3RhIAk6CTEJOgk2MjAKK1BhbAk6CTEJOgk1NAorUG9ydG8gTm92byBbU2FudG8gQW50YW9dCToJMQk6CTU1OAorUmliZWlyYSBHcmFuZGUgCToJMQk6CTE2NworU2FsIAk6CTEJOgkyMTYKK1NhbyBOaWNvbGF1IAk6CTEJOgkzODgKK1NhbyBWaWNlbnRlIAk6CTEJOgkyMjcKK0lsaGFzIGRlIFNvdGF2ZW50byAJOgkxCToJMTgwMworQnJhdmEgCToJMQk6CTY3CitDYWxoZXRhIGRlIFNvIE1pZ3VlbCAJOgkxCToJICAxCitNYWlvIAk6CTEJOgkyNjkKK01vc3RlaXJvcyAJOgkxCToJICAxCitQcmFpYSBbU2FudGlhZ29dCToJMQk6CTM5NgorU2FudGEgQ2F0YXJpbmEgCToJMQk6CTI0MworU2FudGEgQ3J1eiAJOgkxCToJMTQ5CitTbyBEb21pbmdvcwk6CTEJOgkgIDEKK1NvIEZpbGlwZSBbRm9nb10JOgkxCToJICAxCitUYXJyYWZhbCAJOgkxCToJMjAzCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9DQVBFIFZFUkRFX1BPUFVMQVRJT04udHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvQ0FQRSBWRVJERV9QT1BVTEFUSU9OLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42Y2EwZTk4Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvQ0FQRSBWRVJERV9QT1BVTEFUSU9OLnR4dApAQCAtMCwwICsxLDIwIEBACitDYXBlIFZlcmRlCToJMAk6CTQyMDk3OQorSWxoYXMgZGUgQmFybG92ZW50byAgCToJMQk6CTE0NjY2OAorQm9hIFZpc3RhIAk6CTEJOgk0MjA5CitQYWwJOgkxCToJODM4NQorUG9ydG8gTm92byBbU2FudG8gQW50YW9dCToJMQk6CTE3MTkxCitSaWJlaXJhIEdyYW5kZSAJOgkxCToJMjE1OTQKK1NhbCAJOgkxCToJMTQ4MTYKK1NhbyBOaWNvbGF1IAk6CTEJOgkxMzMxMAorU2FvIFZpY2VudGUgCToJMQk6CTY3MTYzCitJbGhhcyBkZSBTb3RhdmVudG8gCToJMQk6CTI4NzYwNgorQnJhdmEgCToJMQk6CTY4MDQKK0NhbGhldGEgZGUgU28gTWlndWVsIAk6CTEJOgkxNjEyOAorTWFpbyAJOgkxCToJNjc1NAorTW9zdGVpcm9zIAk6CTEJOgk5NTM1CitQcmFpYSBbU2FudGlhZ29dCToJMQk6CTEwNjM0OAorU2FudGEgQ2F0YXJpbmEgCToJMQk6CTUwMDI0CitTYW50YSBDcnV6IAk6CTEJOgkzMzAxNQorU28gRG9taW5nb3MJOgkxCToJMTMzMjAKK1NvIEZpbGlwZSBbRm9nb10JOgkxCToJMjc4ODYKK1RhcnJhZmFsIAk6CTEJOgkxNzc5MgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvQ0FQRVZFUkRFX0FSRUEudHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvQ0FQRVZFUkRFX0FSRUEudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZjYWIzYTYKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9DQVBFVkVSREVfQVJFQS50eHQKQEAgLTAsMCArMSwyMSBAQAorQ2FwZSBWZXJkZQk6CTAJOgk0MDMzCitJbGhhcyBkZSBCYXJsb3ZlbnRvICAJOgkxCToJMjIzMAorQm9hIFZpc3RhIAk6CTEJOgk2MjAKK1BhbAk6CTEJOgk1NAorUG9ydG8gTm92byBbU2FudG8gQW50YW9dCToJMQk6CTU1OAorUmliZWlyYSBHcmFuZGUgCToJMQk6CTE2NworU2FsIAk6CTEJOgkyMTYKK1NhbyBOaWNvbGF1IAk6CTEJOgkzODgKK1NhbyBWaWNlbnRlIAk6CTEJOgkyMjcKK0lsaGFzIGRlIFNvdGF2ZW50byAJOgkxCToJMTgwMworQnJhdmEgCToJMQk6CTY3CitDYWxoZXRhIGRlIFNvIE1pZ3VlbCAJOgkxCToJICAxCitNYWlvIAk6CTEJOgkyNjkKK01vc3RlaXJvcyAJOgkxCToJICAxCitQcmFpYSBbU2FudGlhZ29dCToJMQk6CTM5NgorU2FudGEgQ2F0YXJpbmEgCToJMQk6CTI0MworU2FudGEgQ3J1eiAJOgkxCToJMTQ5CitTbyBEb21pbmdvcwk6CTEJOgkgIDEKK1NvIEZpbGlwZSBbRm9nb10JOgkxCToJICAxCitUYXJyYWZhbCAJOgkxCToJMjAzCisKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL0NBUEVWRVJERV9QT1BVTEFUSU9OLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL0NBUEVWRVJERV9QT1BVTEFUSU9OLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42Y2EwZTk4Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvQ0FQRVZFUkRFX1BPUFVMQVRJT04udHh0CkBAIC0wLDAgKzEsMjAgQEAKK0NhcGUgVmVyZGUJOgkwCToJNDIwOTc5CitJbGhhcyBkZSBCYXJsb3ZlbnRvICAJOgkxCToJMTQ2NjY4CitCb2EgVmlzdGEgCToJMQk6CTQyMDkKK1BhbAk6CTEJOgk4Mzg1CitQb3J0byBOb3ZvIFtTYW50byBBbnRhb10JOgkxCToJMTcxOTEKK1JpYmVpcmEgR3JhbmRlIAk6CTEJOgkyMTU5NAorU2FsIAk6CTEJOgkxNDgxNgorU2FvIE5pY29sYXUgCToJMQk6CTEzMzEwCitTYW8gVmljZW50ZSAJOgkxCToJNjcxNjMKK0lsaGFzIGRlIFNvdGF2ZW50byAJOgkxCToJMjg3NjA2CitCcmF2YSAJOgkxCToJNjgwNAorQ2FsaGV0YSBkZSBTbyBNaWd1ZWwgCToJMQk6CTE2MTI4CitNYWlvIAk6CTEJOgk2NzU0CitNb3N0ZWlyb3MgCToJMQk6CTk1MzUKK1ByYWlhIFtTYW50aWFnb10JOgkxCToJMTA2MzQ4CitTYW50YSBDYXRhcmluYSAJOgkxCToJNTAwMjQKK1NhbnRhIENydXogCToJMQk6CTMzMDE1CitTbyBEb21pbmdvcwk6CTEJOgkxMzMyMAorU28gRmlsaXBlIFtGb2dvXQk6CTEJOgkyNzg4NgorVGFycmFmYWwgCToJMQk6CTE3NzkyCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9DRU5UUkFMIEFGUklDQU4gUkVQVUJMSUNfQVJFQS50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9DRU5UUkFMIEFGUklDQU4gUkVQVUJMSUNfQVJFQS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjUwOWM4NAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL0NFTlRSQUwgQUZSSUNBTiBSRVBVQkxJQ19BUkVBLnR4dApAQCAtMCwwICsxLDE4IEBACitDZW50cmFsIEFmcmljYW4gUmVwdWJsaWMJOgkwCToJNjIyOTg0CitCYW1pbmd1aSBCYW5nb3JhbiAgW0JhbWluZ3VpIEJhbmdvcmFdCToJMQk6CTU4MjAwCitCYW5ndWkgCToJMQk6CTY3CitCYXNzZSBLb3R0byAJOgkxCToJMTc2MDQKK0hhdXQgTWJvbW91IAk6CTEJOgk1NTUzMAorSGF1dGUgS290dG8gCToJMQk6CTg2NjUwCitLZW1vIAk6CTEJOgkxNzIwNAorTG9iYXllIAk6CTEJOgkxOTIzNQorTWFtYmVyZSBLYWRlaSAJOgkxCToJMzAyMDMKK01ib21vdSAJOgkxCToJNjExNTAKK05hbmEgR3JlYml6aSAgW25hbmEgZ3JpYmluZ3VpXQk6CTEJOgkxOTk5NgorTmFuYSBNYW1iZXJlIAk6CTEJOgkyNjYwMAorT21iZWxsYSBNcG9rbyAJOgkxCToJMzE4MzUKK091YWthIAk6CTEJOgk0OTkwMAorT3VoYW0gCToJMQk6CTUwMjUwCitPdWhhbSBQZW5kZQk6CTEJOgkzMjEwMAorU2FuZ2hhIE1iYWVyZSBbU2FuZ2hhMV0gW1NhbmdoYV0JOgkxCToJMTk0MTIKK1Zha2FnYSAJOgkxCToJNDY1MDAKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL0NFTlRSQUwgQUZSSUNBTiBSRVBVQkxJQ19QT1BVTEFUSU9OLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL0NFTlRSQUwgQUZSSUNBTiBSRVBVQkxJQ19QT1BVTEFUSU9OLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NTA5Yzg0Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvQ0VOVFJBTCBBRlJJQ0FOIFJFUFVCTElDX1BPUFVMQVRJT04udHh0CkBAIC0wLDAgKzEsMTggQEAKK0NlbnRyYWwgQWZyaWNhbiBSZXB1YmxpYwk6CTAJOgk2MjI5ODQKK0JhbWluZ3VpIEJhbmdvcmFuICBbQmFtaW5ndWkgQmFuZ29yYV0JOgkxCToJNTgyMDAKK0Jhbmd1aSAJOgkxCToJNjcKK0Jhc3NlIEtvdHRvIAk6CTEJOgkxNzYwNAorSGF1dCBNYm9tb3UgCToJMQk6CTU1NTMwCitIYXV0ZSBLb3R0byAJOgkxCToJODY2NTAKK0tlbW8gCToJMQk6CTE3MjA0CitMb2JheWUgCToJMQk6CTE5MjM1CitNYW1iZXJlIEthZGVpIAk6CTEJOgkzMDIwMworTWJvbW91IAk6CTEJOgk2MTE1MAorTmFuYSBHcmViaXppICBbbmFuYSBncmliaW5ndWldCToJMQk6CTE5OTk2CitOYW5hIE1hbWJlcmUgCToJMQk6CTI2NjAwCitPbWJlbGxhIE1wb2tvIAk6CTEJOgkzMTgzNQorT3Vha2EgCToJMQk6CTQ5OTAwCitPdWhhbSAJOgkxCToJNTAyNTAKK091aGFtIFBlbmRlCToJMQk6CTMyMTAwCitTYW5naGEgTWJhZXJlIFtTYW5naGExXSBbU2FuZ2hhXQk6CTEJOgkxOTQxMgorVmFrYWdhIAk6CTEJOgk0NjUwMApkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvQ0hBRF9BUkVBLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL0NIQURfQVJFQS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGFiOTAzOQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL0NIQURfQVJFQS50eHQKQEAgLTAsMCArMSwzNSBAQAorQ2hhZAk6CTAJOgkxMjg0MDAwCitBc3NvbmdoYSAgCToJMQk6CTAKK0NoYXJpLUJhZ3Vpcm1pIAk6CTEJOgk4MjkxMAorQmFociBFbCBHYXphbCAJOgkxCToJMAorQmFociBLaG8gCToJMQk6CTAKK0JhdGhhIEVzdCAJOgkxCToJMAorQmF0aGEgT3Vlc3QgCToJMQk6CTAKK0JvcmtvdS1Fbm5lZGktVGliZXN0aSA6IDEgOiA2MDAzNTAKK01heW8tS2ViYmkgOiAxIDogMzAxMDUKK01veWVuLUNoYXJpIDogMSA6IDQ1MTgwCitCYXRoYQk6CTEJOgk4ODgwMAorQmlsdGluZSAJOgkxCToJNDY4NTAKK0JvcmtvdSAJOgkxCToJMAorRGFiYWJhIAk6CTEJOgkwCitFbm5lZGkgCToJMQk6CTAKK0d1ZXJhIAk6CTEJOgk1ODk1MAorSGFkamVyIExhbWlzIAk6CTEJOgkwCitLYWJpYSAJOgkxCToJMAorS2FuZW0gCToJMQk6CTExNDUyMAorTGFrZSBbTGFjXSAJOgkxCToJMjIzMjAKK0xhYyBJcm8gCToJMQk6CTAKK0xvZ29uZSBvY2NpZGVudGFsIFtMb2dvbmUgT2NjaWRlbl0JOgkxCToJODY5NQorTG9nb25lIG9yaWVudGFsIFtMb2dvbmUgT3JpZW50YV0gCToJMQk6CTI4MDM1CitNYW5kb3VsIAk6CTEJOgkwCitNYXlvIEJvbmV5ZSAJOgkxCToJMAorTWF5byBEYWxhIAk6CTEJOgkwCitNb250cyBkZSBMYW0gCToJMQk6CTAKK04nRGphbeluYSAJOgkxCToJODI5MTAKK091YWRkYe8gW091YWRkYWldCToJMQk6CTc2MjQwCitTYWxhbWF0IAk6CTEJOgk2MzAwMAorU2lsYSAJOgkxCToJMAorVGFuZGppbOkgRXN0IAk6CTEJOgkwCitUYW5kamls6SBPdWVzdCAJOgkxCToJMAorVGFuZGlsZSBbVGFuZGppbGVdIAk6CTEJOgkxODA0NQorVGliZXN0aSAJOgkxCToJMApkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvQ0hBRF9QT1BVTEFUSU9OLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL0NIQURfUE9QVUxBVElPTi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGQxODk2NgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL0NIQURfUE9QVUxBVElPTi50eHQKQEAgLTAsMCArMSwzNSBAQAorQ2hhZAk6CTAJOgk5OTQ0MjAxCitBc3NvbmdoYSAgCToJMQk6CTE0NTQ4NgorQ2hhcmktQmFndWlybWkgCToJMQk6CTMxNjQ3MAorQmFociBFbCBHYXphbCAJOgkxCToJMTAwNDM5CitCYWhyIEtobyAJOgkxCToJMzMwODkxCitCYXRoYSBFc3QgCToJMQk6CTE1Nzk2MworQmF0aGEgT3Vlc3QgCToJMQk6CTIyNjg3MQorQm9ya291LUVubmVkaS1UaWJlc3RpIDogMSA6IDEwMTgwMgorTWF5by1LZWJiaSA6IDEgOiA4MjAyNDkKK01veWVuLUNoYXJpIDogMSA6IDczODU5NQorQmF0aGEJOgkxCToJMzg0ODM0CitCaWx0aW5lIAk6CTEJOgkyMzU2MjkKK0JvcmtvdSAJOgkxCToJNTM5NTgKK0RhYmFiYSAJOgkxCToJMTc4Nzk0CitFbm5lZGkgCToJMQk6CTM2OTc5CitHdWVyYSAJOgkxCToJMzc3OTM5CitIYWRqZXIgTGFtaXMgCToJMQk6CTQzOTcwMQorS2FiaWEgCToJMQk6CTQxNjM0MgorS2FuZW0gCToJMQk6CTIzOTcyNAorTGFrZSBbTGFjXSAJOgkxCToJMzEwODkwCitMYWMgSXJvIAk6CTEJOgkxMjY1NDYKK0xvZ29uZSBvY2NpZGVudGFsIFtMb2dvbmUgT2NjaWRlbl0JOgkxCToJNTkyNDY4CitMb2dvbmUgb3JpZW50YWwgW0xvZ29uZSBPcmllbnRhXQk6CTEJOgkyODU2NTgKK01hbmRvdWwgCToJMQk6CTQ5MjU4MgorTWF5byBCb25leWUgCToJMQk6CTIzODQ5NAorTWF5byBEYWxhIAk6CTEJOgkzNzAxNjcKK01vbnRzIGRlIExhbSAJOgkxCToJMTY2OTA4CitOJ0RqYW3pbmEgCToJMQk6CTYzOTAwMAorT3VhZGRh7yBbT3VhZGRhaV0JOgkxCToJMzE5ODg2CitTYWxhbWF0IAk6CTEJOgkyMjg4NDgKK1NpbGEgCToJMQk6CTE4NTcyOAorVGFuZGppbOkgRXN0IAk6CTEJOgkyMjE1MTMKK1RhbmRqaWzpIE91ZXN0IAk6CTEJOgkzNTI1MDkKK1RhbmRpbGUgW1RhbmRqaWxlXQk6CTEJOgk1NzQwMjIKK1RpYmVzdGkgCToJMQk6CTEwODY1CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9DSElMRV9BUkVBLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL0NISUxFX0FSRUEudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYxZGEyNDUKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9DSElMRV9BUkVBLnR4dApAQCAtMCwwICsxLDU5IEBACitDaGlsZQk6CTAJOgk3NTY5NTAKK1RhcmFwYWNhCToJMQk6CTU5MDk5LjEwCitBbnRvZmFnYXN0YQk6CTEJOgkxMjYwNDkuMTAKK0F0YWNhbWEJOgkxCToJNzUxNzYuMjAKK0NvcXVpbWJvCToJMQk6CTQwNTc5LjkwCitWYWxwYXJhaXNvCToJMQk6CTE2Mzk2LjEwCitSZWdpb24gZGVsIExpYmVydGFkb3IgR2VuZXJhbCBCZXJuYXJkbyBPJ0hpZ2dpbnMgKFZJKSAJOgkxCToJMTYzODcuMDAKK01hdWxlCToJMQk6CTMwMjk2LjEwCitCaW9CaW8JOgkxCToJMzcwNjIuNjAKK0FyYXVjYW5pYQk6CTEJOgkzMTg0Mi4zMAorTGFnb3MJOgkxCToJNjcwMTMuMDAKK1JlZ2lvbiBBeXNlbiBkZWwgR2VuZXJhbCBDYXJsb3MgSWJh8WV6IGRlbCBDYW1wbyAoWEkpIAk6CTEJOgkxMDg0OTQuNDAKK01hZ2FsbGFuZXMJOgkxCToJMTMyMjk3LjIwCitTYW50aWFnbyAJOgkxCToJMTU0MDMuMjAKK0FJU0VOIDogMSA6IDEwODQ5NAorQU5UQVJUSUNBIENISUxFTkEgOiAxIDogMTI1MDAwMAorQVJBVUNPIDogMSA6IDU0MjA2CitBUklDQSA6IDEgOiA3NTY5NTAKK0NBQ0hBUE9BTCA6IDEgOiA1NTEKK0NBUElUQU4gUFJBVCA6IDEgOiAxMjgwCitDQVJERU5BTCBDQVJPIDogMSA6IDI0MzAKK0NBVVFVRU5FUyA6IDEgOiAyNzAwMAorQ0FVVElOIDogMSA6IDk0MDAwCitDSEFDQUJVQ08gOiAxIDogMzY1MDAKK0NIQU5BUkFMIDogMSA6IDIxMDAwCitDSElMT0UgOiAxIDogMjg0MDAKK0NIT0FQQSA6IDEgOiAyNDAwMAorQ09JSEFJUVVFIDogMSA6IDE4MjcwCitDT0xDSEFHVUEgOiAxIDogODUxMDAKK0NPUElBUE8gOiAxIDogNzkwMDAKK0NPUkRJTExFUkEgOiAxIDogOTYwMDAKK0NVUklDTyA6IDEgOiA1MDAwMAorRUwgTE9BIDogMSA6IDI0MDAwCitFTFFVSSA6IDEgOiAxMDUwMDAKK0dFTkVSQUwgQ0FSUkVSQSA6IDEgOiAxMTEwCitIVUFTQ08gOiAxIDogMTc2MDAKK0lRVUlRVUUgOiAxIDogNTkwOTkKK0xJTUFSSSA6IDEgOiAyNzAwMAorTElOQVJFUyA6IDEgOiA1NDAwMAorTExBTlFVSUhVRSA6IDEgOiA3MDAwMAorTE9TIEFOREVTIDogMSA6IDQwMDAwCitNQUlQTyA6IDEgOiA4NzAwMAorTUFMTEVDTyA6IDEgOiA1MjAwMAorTUVMSVBJTExBIDogMSA6IDI2MDAwCitOVUJMRSA6IDEgOiA4NzkwMAorT1NPUk5PIDogMSA6IDU3MDAwCitQQUxFTkEgOiAxIDogMzYwMAorUEFSSU5BQ09UQSA6IDEgOiA4NDAKK1BFVE9SQ0EgOiAxIDogNTgwMDAKK1FVSUxMT1RBIDogMSA6IDkzNDAwCitTQU4gQU5UT05JTyA6IDEgOiA5MjAwMAorU0FOIEZFTElQRSBERSBBQ09OQ0FHVUEgOiAxIDogMzYwMDAKK1RBTEFHQU5URSA6IDEgOiA1OTAwMAorVEFMQ0EgOiAxIDogIDU4MDAwCitUSUVSUkEgREVMIEZVRUdPIDogMSA6IDI2MzAKK1RPQ09QSUxMQSA6IDEgOiAyMDAwCitVTFRJTUEgRVNQRVJBTlpBIDogMSA6IDU1NzAKK1ZBTERJVklBIDogMSA6IDg4MDAwCitDT05DRVBDSU9OIDogMSA6IDI2NTAwMApkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvQ0hJTEVfUE9QVUxBVElPTi50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9DSElMRV9QT1BVTEFUSU9OLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZGYyYzhjCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvQ0hJTEVfUE9QVUxBVElPTi50eHQKQEAgLTAsMCArMSw2MCBAQAorQ2hpbGUJOgkwCToJMTYxMzQyMTkKK1RhcmFwYWNhCToJMQk6CTQyODU5NAorQW50b2ZhZ2FzdGEJOgkxCToJNDkzOTg0CitBdGFjYW1hCToJMQk6CTI1NDMzNgorQ29xdWltYm8JOgkxCToJNjAzMjEwCitWYWxwYXJhaXNvCToJMQk6CTE1Mzk4NTIKK1JlZ2lvbiBkZWwgTGliZXJ0YWRvciBHZW5lcmFsIEJlcm5hcmRvIE8nSGlnZ2lucyAoVkkpIAk6CTEJOgk3ODA2MjcKK01hdWxlCToJMQk6CTkwODA5NworQmlvQmlvCToJMQk6CTE4NjE1NjIKK0FyYXVjYW5pYQk6CTEJOgk4Njk1MzUKK0xhZ29zCToJMQk6CTEwNzMxMzUKK1JlZ2lvbiBBeXNlbiBkZWwgR2VuZXJhbCBDYXJsb3MgSWJh8WV6IGRlbCBDYW1wbyAoWEkpIAk6CTEJOgk5MTQ5MgorTWFnYWxsYW5lcwk6CTEJOgkxNTA4MjYKK1NhbnRpYWdvIAk6CTEJOgk2MDYxMTg1CitBSVNFTiA6IDEgOiA5MTQ5MgorQU5UQVJUSUNBIENISUxFTkEgOiAxIDogMTMwCitBUkFVQ08gOiAxIDogMTYwNjA2CitBUklDQSA6IDEgOiAxNzU0NDEgCitDQUNIQVBPQUwgOiAxIDogMzAwMDAwCitDQVBJVEFOIFBSQVQgOiAxIDogMjIxNworQ0FSREVOQUwgQ0FSTyA6IDEgOiA0MzIgIAorQ0FVUVVFTkVTIDogMSA6IDMwNzcxCitDQVVUSU4gOiAxIDogMzAwMDAwCitDSEFDQUJVQ08gOiAxIDogODUwMDAKK0NIQU5BUkFMIDogMSA6IDMxMzAwCitDSElMT0UgOiAxIDogODcwMDAKK0NIT0FQQSA6IDEgOiA0NjAwMCAKK0NPSUhBSVFVRSA6IDEgOiAgNDQ4NTAKK0NPTENIQUdVQSA6IDEgOiAxMDgwMDAKK0NPUElBUE8gOiAxIDogMTI1OTgzCitDT1JESUxMRVJBIDogMSA6IDUwNzAwMAorQ1VSSUNPIDogMSA6IDkzNDQ3IAorRUwgTE9BIDogMSA6IDEzNTAwMAorRUxRVUkgOiAxIDogMzEwMDAwCitHRU5FUkFMIENBUlJFUkEgOiAxIDogIDMwNDIKK0hVQVNDTyA6IDEgOiA1MTAwMAorSVFVSVFVRSA6IDEgOiA0Mjg1OTQKK0xJTUFSSSA6IDEgOiA3ODAwMAorTElOQVJFUyA6IDEgOiA2NTEzMworTExBTlFVSUhVRSA6IDEgOiAyMTUwMDAKK0xPUyBBTkRFUyA6IDEgOiA1NTYwOAorTUFJUE8gOiAxIDogMjkyMDAwCitNQUxMRUNPIDogMSA6IDEzMjAwMAorTUVMSVBJTExBIDogMSA6IDUzNTIyIAorTlVCTEUgOiAxIDogMjMwMDAwCitPU09STk8gOiAxIDogMTMyMjQ1CitQQUxFTkEgOiAxIDogODAwMAorUEFSSU5BQ09UQSA6IDEgOiAxMjM1CitQRVRPUkNBIDogMSA6IDQ1MDAwCitRVUlMTE9UQSA6IDEgOiA0NzgzNiAKK1NBTiBBTlRPTklPIDogMSA6IDgzNDM1CitTQU4gRkVMSVBFIERFIEFDT05DQUdVQSA6IDEgOiA1MzM1OAorVEFMQUdBTlRFIDogMSA6IDQ5OTU3CitUQUxDQSA6IDEgOiAxODk1MDUKK1RJRVJSQSBERUwgRlVFR08gOiAxIDogNDczNAorVE9DT1BJTExBIDogMSA6IDIzMzUyCitVTFRJTUEgRVNQRVJBTlpBIDogMSA6IDE2OTc4CitWQUxESVZJQSA6IDEgOiAxMjc3NTAKK0NPTkNFUENJT04gOiAxIDogODAxNTkKKwpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvQ0hJTkFfQVJFQS50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9DSElOQV9BUkVBLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNzc3MzM0Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvQ0hJTkFfQVJFQS50eHQKQEAgLTAsMCArMSw0MCBAQAorQ2hpbmEJOgkwCToJOTU5Njk2MAorSG9uZ2tvbmcgSXNsYW5kIDogMSA6IDExMDQKK0phbW11IGFuZCBLYXNobWlyIDogMSA6IDIyMjIzNgorS293TG9vbiBhbmQgbmV3IEtvd2xvb24gOiAxIDogNDcKK05ldyBUZXJyaXRvcmllcyA6IDEgOiAzMzAKK1RhaXdhbiA6IDEgOiAzNjE3OQorQmVpamluZwk6CTEJOgkxNjgwOAorVGlhbmppbgk6CTEJOgkxMTMwMAorSGViZWkJOgkxCToJMjAyNzAwCitTaGFueGkJOgkxCToJMTU3MTAwCitOZWkgTW9uZ29sIFppemhpcXUgCToJMQk6CTExNzc1MDAKK0xpYW9uaW5nCToJMQk6CTE1MTAwMAorSmlsaW4JOgkxCToJMTg3MDAwCitIZWlsb25namlhbmcgCToJMQk6CTQ2MzYwMAorU2hhbmdoYWkJOgkxCToJNjIwMAorSmlhbmdzdQk6CTEJOgkxMDI2MDAKK1poZWppYW5nCToJMQk6CTEwMTgwMAorQW5odWkJOgkxCToJMTM5OTAwCitGdWppYW4JOgkxCToJMTIzMTAwCitKaWFuZ3hpCToJMQk6CTE2NDgwMAorU2hhbmRvbmcgCToJMQk6CTE1MzMwMAorSGVuYW4JOgkxCToJMTY3MDAwCitIdWJlaQk6CTEJOgkxODc1MDAKK0h1bmFuCToJMQk6CTIxMDUwMAorR3Vhbmdkb25nCToJMQk6CTE5NzEwMAorR3Vhbmd4aQk6CTEJOgkyMjA0MDAKK01hcmluZSA6IDEgOiAxNTAKK0hhaW5hbgk6CTEJOgkzNDMwMAorQ2hvbmdxaW5nCToJMQk6CTgyNDAwCitTaWNodWFuCToJMQk6CTQ4ODAwMAorR3VpemhvdQk6CTEJOgkxNzQwMDAKK1l1bm5hbgk6CTEJOgk0MzYyMDAKK1hpemFuZyBaaXpoaXF1IChUSUJFVCkJOgkxCToJMTIyMTYwMAorU2hhYW54aQk6CTEJOgkxOTU4MDAKK0dhbnN1CToJMQk6CTM2NjUwMAorUWluZ2hhaQk6CTEJOgk3MjEwMDAKK05pbmd4aWEgW05pbmd4aWEgSHVpenUgWml6aGlxdV0gCToJMQk6CTY2NDAwCitYaW5qaWFuZyBVeWd1ciAJOgkxCToJMTY0NjkwMAorWGlhbmdnYW5nIFNBUiAJOgkxCToJMTAzOAorQW9tZW4gU0FSIAk6CTEJOgkyMQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvQ0hJTkFfUE9QVUxBVElPTi50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9DSElOQV9QT1BVTEFUSU9OLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jODY1YzA3Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvQ0hJTkFfUE9QVUxBVElPTi50eHQKQEAgLTAsMCArMSw0MCBAQAorQ2hpbmEJOgkwCToJMTMxMzk3MzcxMworSG9uZ2tvbmcgSXNsYW5kIDogMSA6IDcwNDEwMDAKK0phbW11IGFuZCBLYXNobWlyIDogMSA6IDEwMDY5OTE3IAorS293TG9vbiBhbmQgbmV3IEtvd2xvb24gOiAxIDogMjA3MTAwMAorTmV3IFRlcnJpdG9yaWVzIDogMSA6IDMzNDMwNDYKK1RhaXdhbiA6IDEgOiAyMjg5NDM4NAorQmVpamluZwk6CTEJOgkxNDkzMDAwMAorVGlhbmppbgk6CTEJOgkxMDI0MDAwMAorSGViZWkJOgkxCToJNjgwOTAwMDAKK1NoYW54aQk6CTEJOgkzMzM1MDAwMAorTmVpIE1vbmdvbCBaaXpoaXF1IAk6CTEJOgkyMzg0MDAwMAorTGlhb25pbmcJOgkxCToJNDIxNzAwMDAKK0ppbGluCToJMQk6CTI3MDkwMDAwCitIZWlsb25namlhbmcgCToJMQk6CTM4MTcwMDAwCitTaGFuZ2hhaQk6CTEJOgkxNzQyMDAwMAorSmlhbmdzdQk6CTEJOgk3NDMzMDAwMAorWmhlamlhbmcJOgkxCToJNDcyMDAwMDAKK0FuaHVpCToJMQk6CTY0NjEwMDAwCitGdWppYW4JOgkxCToJMzUxMTAwMDAKK0ppYW5neGkJOgkxCToJNDI4NDAwMDAKK1NoYW5kb25nIAk6CTEJOgk5MTgwMDAwMAorSGVuYW4JOgkxCToJOTcxNzAwMDAKK0h1YmVpCToJMQk6CTYwMTYwMDAwCitIdW5hbgk6CTEJOgk2Njk4MDAwMAorR3Vhbmdkb25nCToJMQk6CTgzMDQwMDAwCitHdWFuZ3hpCToJMQk6CTQ4ODkwMDAwCitIYWluYW4JOgkxCToJODE4MDAwMAorQ2hvbmdxaW5nCToJMQk6CTMxMjIwMDAwCitTaWNodWFuCToJMQk6CTg3MjUwMDAwCitHdWl6aG91CToJMQk6CTM5MDQwMDAwCitZdW5uYW4JOgkxCToJNDQxNTAwMDAKK01hcmluZSA6IDEgOiAxNTU2MDAKK1hpemFuZyBaaXpoaXF1IChUSUJFVCkJOgkxCToJMjc0MDAwMAorU2hhYW54aQk6CTEJOgkzNzA1MDAwMAorR2Fuc3UJOgkxCToJMjYxOTAwMDAKK1FpbmdoYWkJOgkxCToJNTM5MDAwMAorTmluZ3hpYSBbTmluZ3hpYSBIdWl6dSBaaXpoaXF1XSAJOgkxCToJNTg4MDAwMAorWGluamlhbmcgVXlndXIgCToJMQk6CTE5NjMwMDAwCitYaWFuZ2dhbmcgU0FSIAk6CTEJOgk2ODk1NTAwCitBb21lbiBTQVIgCToJMQk6CTQ2NTMwMApkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvQ09MT01CSUFfQVJFQS50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9DT0xPTUJJQV9BUkVBLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYjRiN2QzCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvQ09MT01CSUFfQVJFQS50eHQKQEAgLTAsMCArMSwzNSBAQAorQ29sb21iaWEJOgkwCToJMTEzODkxMAorQnVlbmF2ZW50dXJhIDogMSA6IDEyOTAKK2FtYXpvbmFzCToJMQk6CTEwOTY2NQorYW50aW9xdWlhCToJMQk6CTYzNjEyCithcmF1Y2EJOgkxCToJMjM4MTgKK0F0bGFudGljbwk6CTEJOgkzMzg4Citib2dvdGEJOgkxCToJMTU4NworQm9saXZhcgk6CTEJOgkyNTk3OAorQm95YWNhCToJMQk6CTIzMTg5CitDYWxkYXMJOgkxCToJNzg4OAorQ2FxdWV0YQk6CTEJOgk4ODk2NQorQ2FzYW5hcmUJOgkxCToJNDQ2NDAKK0NhdWNhCToJMQk6CTI5MzA4CitDZXNhcgk6CTEJOgkyMjkwNQorQ2hvY28JOgkxCToJNDY1MzAKK0NvcmRvYmEJOgkxCToJMjUwMjAKK0N1bmRpbmFtYXJjYQk6CTEJOgkyMjYyMworR3VhbmlhCToJMQk6CTcyMjM4CitHdWF2aWFyZQk6CTEJOgk0MjMyNworSHVpbGEJOgkxCToJMTk4OTAKK0d1YWppcmEJOgkxCToJMjA4NDgKK21hZ2RhbGVuYQk6CTEJOgkyMzE4OAorbWV0YQk6CTEJOgk4NTYzNQorbmFyaW5vCToJMQk6CTMzMjY4Citub3J0ZSBkZSBzYW50YW5kZXIJOgkxCToJMjE2NTgKK3B1dHVtYXlvCToJMQk6CTI0ODg1CitxdWluZGlvCToJMQk6CTE4NDUKK3Jpc2FyYWxkYQk6CTEJOgk0MTQwCitTYW4gQW5kcmVzIFkgUHJvdmlkZW5jaWEJOgkxCToJNDQKK1NhbnRhbmRlcgk6CTEJOgkzMDUzNworU3VjcmUJOgkxCToJMTA5MTcKK1RvbGltYQk6CTEJOgkyMzU2MgorVmFsbGUgZGVsIGNhdWNhCToJMQk6CTIyMTQwCitWYXVwZXMJOgkxCToJNjUyNjgKK3ZpY2hhZGEJOgkxCToJMTAwMjQyCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9DT0xPTUJJQV9QT1BVTEFUSU9OLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL0NPTE9NQklBX1BPUFVMQVRJT04udHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRlNTYxODkKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9DT0xPTUJJQV9QT1BVTEFUSU9OLnR4dApAQCAtMCwwICsxLDM1IEBACitDb2xvbWJpYQk6CTAJOgk0MzU5MzAzNQorQnVlbmF2ZW50dXJhIDogMSA6IDMyNDIwNworYW1hem9uYXMJOgkxCToJODA0ODcKK2FudGlvcXVpYQk6CTEJOgk1NzYxMTc1CithcmF1Y2EJOgkxCToJMjgxNDM1CitBdGxhbnRpY28JOgkxCToJMjM3MDc1MworYm9nb3RhCToJMQk6CTcxODU4ODkKK0JvbGl2YXIJOgkxCToJMjIzMTE2MworQm95YWNhCToJMQk6CTE0MTMwNjQKK0NhbGRhcwk6CTEJOgkxMTcyNTEwCitDYXF1ZXRhCToJMQk6CTQ2NTA3OAorQ2FzYW5hcmUJOgkxCToJMzI1Mzg5CitDYXVjYQk6CTEJOgkxMzY3NDk2CitDZXNhcgk6CTEJOgkxMDUzMTIzCitDaG9jbwk6CTEJOgk0MTYzMTgKK0NvcmRvYmEJOgkxCToJMTM5Njc2NAorQ3VuZGluYW1hcmNhCToJMQk6CTIzNDA4OTQKK0d1YW5pYQk6CTEJOgk0MzE5NAorR3VhdmlhcmUJOgkxCToJMTMzNDExCitIdWlsYQk6CTEJOgk5OTY2MTcKK0d1YWppcmEJOgkxCToJNTI2MTQ4CittYWdkYWxlbmEJOgkxCToJMTQwNjEyNgorbWV0YQk6CTEJOgk3NzI4NTMKK25hcmlubwk6CTEJOgkxNzc1OTczCitub3J0ZSBkZSBzYW50YW5kZXIJOgkxCToJMTQ5NDIxOQorcHV0dW1heW8JOgkxCToJMzc4NzkwCitxdWluZGlvCToJMQk6CTYxMjcxOQorcmlzYXJhbGRhCToJMQk6CTEwMjU1MzkKK1NhbiBBbmRyZXMgWSBQcm92aWRlbmNpYQk6CTEJOgk4MzQwMworU2FudGFuZGVyCToJMQk6CTIwODY2NDkKK1N1Y3JlCToJMQk6CTg3MDIxOQorVG9saW1hCToJMQk6CTEzMTYwNTMKK1ZhbGxlIGRlbCBjYXVjYQk6CTEJOgk0NTMyMzc4CitWYXVwZXMJOgkxCToJMzMxNDIKK3ZpY2hhZGEJOgkxCToJOTYxMzgKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL0NPTU9ST1NfQVJFQS50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9DT01PUk9TX0FSRUEudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRjMDdlNmUKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9DT01PUk9TX0FSRUEudHh0CkBAIC0wLDAgKzEsNCBAQAorbnp3YW5pIFtBbmpvdWFuXQk6CTEJOgk0MjQKK0dyYW5kIENvbW9yZQk6CTEJOgkxMTQ4CitNd2FsaQk6CTEJOgkyOTAKK0lsZSBkZSBNYXlvdHRlIChGUi4pIDogMSA6IDM2MzI5CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9DT01PUk9TX1BPUFVMQVRJT04udHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvQ09NT1JPU19QT1BVTEFUSU9OLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MGEzZTEyCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvQ09NT1JPU19QT1BVTEFUSU9OLnR4dApAQCAtMCwwICsxLDUgQEAKK256d2FuaSBbQW5qb3Vhbl0JOgkxCToJMjQzNzMyCitHcmFuZCBDb21vcmUJOgkxCToJMjk2MTc3CitNd2FsaQk6CTEJOgkzNTc1MQorSWxlIGRlIE1heW90dGUgKEZSLikgOiAxIDogMTQwNDQ3CisKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL0NPTkdPX0FSRUEudHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvQ09OR09fQVJFQS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWUxN2UwYgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL0NPTkdPX0FSRUEudHh0CkBAIC0wLDAgKzEsMTggQEAKK0NvbmdvIAk6CTAJOgkzNDIwMDAKKyBCb3VlbnphICAgCToJMQk6CTEyMjYwCitDb21tdW5lIGRlIEJyYXp6YXZpbGxlIAk6CTEJOgkxMDAKKyBDdXZldHRlIAk6CTEJOgk3NDg1MAorIGxhIEN1dmV0dGUgT3Vlc3QgCToJMQk6CTAgIAorQ29tbXVuZSBkZSBEb2xpc2llIAk6CTEJOgkgMCAKKyBLb3VpbG91IAk6CTEJOgkxMzY1MAorIGxhIEzpa291bW91IFtMZWtvdW1vdV0JOgkxCToJMjA5NTAKKyBMaWtvdWFsYSAJOgkxCToJNjYwNDQKK0NvbW11bmUgZGUgTW9zc2VuZGpvIAk6CTEJOjAJICAKKyBOaWFyaSAJOgkxCToJMjU5MjUKK0NvbW11bmUgZGUgTmtheWkgCToJMQk6CSAgMAorQ29tbXVuZSBkZSBPdWVzc28gCToJMQk6CSAgMAorUGxhdGVhdXgxICBbUGxhdGVhdXhdCToJMQk6CTM4NDAwCitDb21tdW5lIGRlIFBvaW50ZS1Ob2lyZSAJOgkxCToJMCAgCisgUG9vbCAJOgkxCToJMzM5NTUKKyBTYW5naGEgCToJMQk6CTU1Nzk1CisKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL0NPTkdPX1BPUFVMQVRJT04udHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvQ09OR09fUE9QVUxBVElPTi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTllMDkwZAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL0NPTkdPX1BPUFVMQVRJT04udHh0CkBAIC0wLDAgKzEsMTcgQEAKK0NvbmdvIAk6CTAJOgkzNzAyMzE0CisgQm91ZW56YSAgIAk6CTEJOgkyMjk4MjAKK0NvbW11bmUgZGUgQnJhenphdmlsbGUgCToJMQk6CTExNzQwMDUKKyBDdXZldHRlIAk6CTEJOgkxMzU3NjcKKyBsYSBDdXZldHRlIE91ZXN0IAk6CTEJOgk1NTc2NQorQ29tbXVuZSBkZSBEb2xpc2llIAk6CTEJOgkxMDYyNjIKKyBLb3VpbG91IAk6CTEJOgk4MDk1MQorIGxhIEzpa291bW91IFtMZWtvdW1vdV0JOgkxCToJODE2NzIKKyBMaWtvdWFsYSAJOgkxCToJODQ1MTMKK0NvbW11bmUgZGUgTW9zc2VuZGpvIAk6CTEJOgkxODIwOQorIE5pYXJpIAk6CTEJOgkxMDUxNDcKK0NvbW11bmUgZGUgTmtheWkgCToJMQk6CTU2Njg2CitDb21tdW5lIGRlIE91ZXNzbyAJOgkxCToJMjQzMjIKK1BsYXRlYXV4MSAgW1BsYXRlYXV4XQk6CTEJOgkxNzA5NzgKK0NvbW11bmUgZGUgUG9pbnRlLU5vaXJlIAk6CTEJOgk2NjMzNTkKKyBQb29sIAk6CTEJOgkzNjIzNTcKKyBTYW5naGEgCToJMQk6CTQ2NzI3CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9DT1NUQVJJQ0FfQVJFQS50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9DT1NUQVJJQ0FfQVJFQS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTJmYWQxZgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL0NPU1RBUklDQV9BUkVBLnR4dApAQCAtMCwwICsxIEBACitDT1NUQSBSSUNBIDogMCA6IDUxMTAwCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9DT1NUQVJJQ0FfUE9QVUxBVElPTi50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9DT1NUQVJJQ0FfUE9QVUxBVElPTi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjNkNDkyYQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL0NPU1RBUklDQV9QT1BVTEFUSU9OLnR4dApAQCAtMCwwICsxIEBACitDT1NUQSBSSUNBIDogMCA6IDQyMTU1NjkKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL0NST0FUSUFfQVJFQS50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9DUk9BVElBX0FSRUEudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjViZjI1YTMKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9DUk9BVElBX0FSRUEudHh0CkBAIC0wLDAgKzEgQEAKKyBIcnZhdHNrYSA6IDEgOiA1NjUzOC4wCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9DUk9BVElBX1BPUFVMQVRJT04udHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvQ1JPQVRJQV9QT1BVTEFUSU9OLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYzQxYjAzCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvQ1JPQVRJQV9QT1BVTEFUSU9OLnR4dApAQCAtMCwwICsxIEBACisgSHJ2YXRza2EgOiAxIDogNDY4NDk3MgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvQ1pFQ0ggUkVQVUJMSUNfQVJFQS50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9DWkVDSCBSRVBVQkxJQ19BUkVBLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YzdlNTNjCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvQ1pFQ0ggUkVQVUJMSUNfQVJFQS50eHQKQEAgLTAsMCArMSwxMiBAQAorIFNldmVyb2Nlc2t5IGtyYWogOiAxIDogNzgyMC4wCisgVnljaG9kb2Nlc2t5IGtyYWogOiAxIDogMTEyNDAuMAorIFN0cmVkb2Nlc2t5IGtyYWogOiAxIDogMTA5OTQuMAorIFphcGFkb2Nlc2t5IGtyYWogOiAxIDogMTA4NzUuMAorIFNldmVyb21vcmF2c2t5IGtyYWogOiAxIDogMTEwNjcuMAorIFByYWhhIDogMSA6IDQ5Ni4wCisgSmlob21vcmF2c2t5IGtyYWogOiAxIDogMTUwMjcuMAorIEppaG9jZXNreSBrcmFqIDogMSA6IDExMzQ1LjAKKyBTdHJlZG9sc2xvdmVuc2t5IGtyYWogOiAxIDogMTc5ODIuMAorIFljaG9kb3Nsb3ZlbnNraSBrcmFqIDogMSA6IDE2MTk0LjAKKyBaYXBhZG9zbG92ZW5za3kga3JhaiA6IDEgOiAxNDQ5Mi4wCisgQnJhdGlzbGF2YSA6IDEgOiAzNjguMApkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvQ1pFQ0ggUkVQVUJMSUNfUE9QVUxBVElPTi50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9DWkVDSCBSRVBVQkxJQ19QT1BVTEFUSU9OLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44N2Y4MjEyCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvQ1pFQ0ggUkVQVUJMSUNfUE9QVUxBVElPTi50eHQKQEAgLTAsMCArMSwxMiBAQAorIFNldmVyb2Nlc2t5IGtyYWogOiAxIDogMTE4OTU5MgorIFZ5Y2hvZG9jZXNreSBrcmFqIDogMSA6IDEyMzk4MDQKKyBTdHJlZG9jZXNreSBrcmFqIDogMSA6IDExNTgxMDgKKyBaYXBhZG9jZXNreSBrcmFqIDogMSA6IDg2OTE4OAorIFNldmVyb21vcmF2c2t5IGtyYWogOiAxIDogMTk3NTY1NAorIFByYWhhIDogMSA6IDEwMjUxMDc5CisgSmlob21vcmF2c2t5IGtyYWogOiAxIDogMTEyMzIwMQorIEppaG9jZXNreSBrcmFqIDogMSA6IDYyNzc2NgorIFN0cmVkb2xzbG92ZW5za3kga3JhaiA6IDEgOiAxNTk1MzU0CisgWWNob2Rvc2xvdmVuc2tpIGtyYWogOiAxIDogMTUwNTQ5NQorIFphcGFkb3Nsb3ZlbnNreSBrcmFqIDogMSA6IDE3MTIxODEKKyBCcmF0aXNsYXZhIDogMSA6IDYwMTEzMgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvREVOTUFSS19BUkVBLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL0RFTk1BUktfQVJFQS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWE4ZWJjOAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL0RFTk1BUktfQVJFQS50eHQKQEAgLTAsMCArMSwzIEBACisgVkVTVCBGT1IgU1RPUkVCQUVMVCA6IDEgOiAzMzI1Mi4wCisgSE9WRURTVEFEU1JFR0lPTkVOIDogMSA6IDI4NTcuMAorIE9TVCBGT1IgU1RPUkVCQUVMVCA6IDEgOiA2OTY5LjAKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL0RFTk1BUktfUE9QVUxBVElPTi50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9ERU5NQVJLX1BPUFVMQVRJT04udHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQyMzY3YTIKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9ERU5NQVJLX1BPUFVMQVRJT04udHh0CkBAIC0wLDAgKzEsMyBAQAorIFZFU1QgRk9SIFNUT1JFQkFFTFQgOiAxIDogMjg0NTcwMAorIEhPVkVEU1RBRFNSRUdJT05FTiA6IDEgOiAxNzEzNzAwCisgT1NUIEZPUiBTVE9SRUJBRUxUIDogMSA6IDU4NzAwMApkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvRUNVQURPUl9BUkVBLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL0VDVUFET1JfQVJFQS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDQwMWMxMwotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL0VDVUFET1JfQVJFQS50eHQKQEAgLTAsMCArMSwyOCBAQAorRWN1YWRvcgk6CTAJOgkyODM1NjAKK1JlZ2lvbiAgQW1hem9uaWNhICAgCToJMQk6CTExNTc0NC45MAorTW9yb25hIFNhbnRpYWdvIAk6CTEJOgkyMzc5Ni44MAorTmFwbyAJOgkxCToJMTI0ODMuNDAKK09yZWxsYW5hIAk6CTEJOgkyMTY3NS4xMAorUGFzdGF6YSAJOgkxCToJMjkzMjUuMDAKK1N1Y3VtYmlvcyAJOgkxCToJMTgwMDguMzAKK1phbW9yYSBDaGluY2hpcGUgCToJMQk6CTEwNDU2LjMwCitSZWdpb24gQ29zdGEgCToJMQk6CTY4MzIzLjcwCitFbCBPcm8gCToJMQk6CTU4MTcuNDAKK0VzbWVyYWxkYXMgCToJMQk6CTE1ODk1LjcwCitHdWF5YXMgCToJMQk6CTIwNTY2LjAwCitMb3MgUmlvcyAJOgkxCToJNzE1MC45MAorTWFuYWJpCToJMQk6CTE4ODkzLjcwCitSZWdpb24gSW5zdWxhciAJOgkxCToJODAxMC4wMAorR2FsYXBhZ29zIAk6CTEJOgk4MDEwLjAwCitSZWdpb24gU2llcnJhIAk6CTEJOgk2MzUxNS45MAorQXp1YXkgCToJMQk6CTc5OTQuNzAKK0JvbGl2YXIgCToJMQk6CTM5MjYuMDAKK0NhbmFyIAk6CTEJOgkzMTQxLjYwCitDYXJjaGkgCToJMQk6CTM3NDkuNzAKK0NoaW1ib3Jhem8gCToJMQk6CTY0NzAuNDAKK0NvdG9wYXhpIAk6CTEJOgk1OTg0LjUwCitJbWJhYnVyYSAJOgkxCToJNDYxNC42MAorTG9qYSAJOgkxCToJMTA5OTQuOTAKK1BpY2hpbmNoYSAJOgkxCToJMTMyNzAuMTAKK1R1bmd1cmFodWEgCToJMQk6CTMzNjkuNDAKK1pvbmEgbm8gRGVsaW10ZGEJOgkxCToJNzc1LjIKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL0VDVUFET1JfUE9QVUxBVElPTi50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9FQ1VBRE9SX1BPUFVMQVRJT04udHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUxNmYyYWYKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9FQ1VBRE9SX1BPUFVMQVRJT04udHh0CkBAIC0wLDAgKzEsMjggQEAKK0VjdWFkb3IJOgkwCToJMTM1NDc1MTAKK1JlZ2lvbiAgQW1hem9uaWNhICAgCToJMQk6CTU0ODQxOQorTW9yb25hIFNhbnRpYWdvIAk6CTEJOgkxMTU0MTIKK05hcG8gCToJMQk6CTc5MTM5CitPcmVsbGFuYSAJOgkxCToJODY0OTMKK1Bhc3RhemEgCToJMQk6CTYxNzc5CitTdWN1bWJpb3MgCToJMQk6CTEyODk5NQorWmFtb3JhIENoaW5jaGlwZSAJOgkxCToJNzY2MDEKK1JlZ2lvbiBDb3N0YSAJOgkxCToJNjA1NjIyMworRWwgT3JvIAk6CTEJOgk1MjU3NjMKK0VzbWVyYWxkYXMgCToJMQk6CTM4NTIyMworR3VheWFzIAk6CTEJOgkzMzA5MDM0CitMb3MgUmlvcyAJOgkxCToJNjUwMTc4CitNYW5hYmkJOgkxCToJMTE4NjAyNQorUmVnaW9uIEluc3VsYXIgCToJMQk6CTE4NjQwCitHYWxhcGFnb3MgCToJMQk6CTE4NjQwCitSZWdpb24gU2llcnJhIAk6CTEJOgk1NDYwNzM4CitBenVheSAJOgkxCToJNTk5NTQ2CitCb2xpdmFyIAk6CTEJOgkxNjkzNzAKK0NhbmFyIAk6CTEJOgkyMDY5ODEKK0NhcmNoaSAJOgkxCToJMTUyOTM5CitDaGltYm9yYXpvIAk6CTEJOgk0MDM2MzIKK0NvdG9wYXhpIAk6CTEJOgkzNDk1NDAKK0ltYmFidXJhIAk6CTEJOgkzNDQwNDQKK0xvamEgCToJMQk6CTQwNDgzNQorUGljaGluY2hhIAk6CTEJOgkyMzg4ODE3CitUdW5ndXJhaHVhIAk6CTEJOgk0NDEwMzQKK1pvbmEgbm8gRGVsaW10ZGEJOgkxCToJNzI1ODgKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL0VHWVBUX0FSRUEudHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvRUdZUFRfQVJFQS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTU5NzkxMQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL0VHWVBUX0FSRUEudHh0CkBAIC0wLDAgKzEsNSBAQAorRWd5cHQJOgkwCToJMTAwMTQ1MAorRnJvbnRpZXIgR292ZXJuYXRlcwk6CTEJOgk4NTMwMTYKK0xvd2VyIEVneXB0IAk6CTEJOgkyNzcyNAorVXBwZXIgRWd5cHQgCToJMQk6CTk2MTk0CitVcmJhbiBHb3Zlcm5hdGVzCToJMQk6CTIwODYwCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9FR1lQVF9QT1BVTEFUSU9OLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL0VHWVBUX1BPUFVMQVRJT04udHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAyNzJjMmIKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9FR1lQVF9QT1BVTEFUSU9OLnR4dApAQCAtMCwwICsxLDUgQEAKK0VneXB0CToJMAk6CTc4ODg3MDA3CitGcm9udGllciBHb3Zlcm5hdGVzCToJMQk6CTk3Njg1OAorTG93ZXIgRWd5cHQgCToJMQk6CTI5NzI5NjU1CitVcHBlciBFZ3lwdCAJOgkxCToJMjUxMzM1ODMKK1VyYmFuIEdvdmVybmF0ZXMJOgkxCToJMTI4MTE2OTMKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL0VMU0FMVkFET1JfQVJFQS50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9FTFNBTFZBRE9SX0FSRUEudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZiZDZlMGMKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9FTFNBTFZBRE9SX0FSRUEudHh0CkBAIC0wLDAgKzEgQEAKK0VMIFNBTFZBRE9SIDogMCA6IDIxMDQwCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9FTFNBTFZBRE9SX1BPUFVMQVRJT04udHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvRUxTQUxWQURPUl9QT1BVTEFUSU9OLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMjRkMDYyCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvRUxTQUxWQURPUl9QT1BVTEFUSU9OLnR4dApAQCAtMCwwICsxIEBACitFTCBTQUxWQURPUiA6IDAgOiA2OTkwNjU3CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9FUVVBVE9SSUFMIEdVSU5FQV9BUkVBLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL0VRVUFUT1JJQUwgR1VJTkVBX0FSRUEudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM1Mzc3M2UKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9FUVVBVE9SSUFMIEdVSU5FQV9BUkVBLnR4dApAQCAtMCwwICsxLDE3IEBACitFUVVBVE9SSUFMIEdVSU5FQTowOjI4MDUxCitCSU9LTyBTVVI6MTo1NDguNTYwCitMSVRPUkFMOjE6Mjc1Ny44NjQKK0FOTk9CT046MToyNzU3Ljg2NAorQ0VOVFJPIFNVUjoxOjMyOTAuNzQ5CitXRUxFTlpBUzoxOjIzNDIuMDYzCitCSU9LTyBOT1JURToxOjIyNS45NTkKK0tJRU5URU06MToxMjkyLjQ0MQorTElUT1JBTC0yOjI6MS4wMDAwMDAKK0FOTk9CT046MjoyNzU3Ljg2NDAwMAorQklPS08gU1VSOjI6NTQ4LjU2MDAwMAorQklPS08gTk9SVEU6MjoyMjUuOTU5MDAwCitDRU5UUk8gU1VSOjI6MzI5MC43NDkwMDAKK0xJVE9SQUwtMzoyOjYuMjIxMzIwCitXRUxFTlpBUzoyOjIzNDIuMDYzMDAwCitMSVRPUkFMLTE6MjoyNzUwLjk0Mzk3MAorS0lFTlRFTToyOjEyOTIuNDQxMDAwCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9FUVVBVE9SSUFMIEdVSU5FQV9QT1BVTEFUSU9OLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL0VRVUFUT1JJQUwgR1VJTkVBX1BPUFVMQVRJT04udHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFkNjM0MjAKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9FUVVBVE9SSUFMIEdVSU5FQV9QT1BVTEFUSU9OLnR4dApAQCAtMCwwICsxLDE3IEBACitFUVVBVE9SSUFMIEdVSU5FQTowOjQ4MDg5ODoxNy4xNDM3MDMKK0FOTk9CT046MTo5NDUyNTozNC4yNzQ3MTQKK0JJT0tPIE5PUlRFOjE6Njk5NDk6MzA5LjU2NTAxMAorQklPS08gU1VSOjE6MTU2Njk6MjguNTYzODc2CitDRU5UUk8gU1VSOjE6NjEyNDc6MTguNjExODcyCitLSUVOVEVNOjE6ODM0ODY6NjQuNTk1NTk5CitMSVRPUkFMOjE6OTQ1MjU6MzQuMjc0NzE0CitXRUxFTlpBUzoxOjYxNDk3OjI2LjI1NzYyMAorQklPS08gTk9SVEU6Mjo2OTk0OTozMDkuNTY1MDEwCitCSU9LTyBTVVI6MjoxNTY2OToyOC41NjM4NzYKK0xJVE9SQUwtMToyOjMxNTA4OjExLjQ1MzY0NAorS0lFTlRFTToyOjgzNDg2OjY0LjU5NTU5OQorQ0VOVFJPIFNVUjoyOjYxMjQ3OjE4LjYxMTg3MgorV0VMRU5aQVM6Mjo2MTQ5NzoyNi4yNTc2MjAKK0xJVE9SQUwtMjoyOjMxNTA4OjMxNTA4LjMzMzMzMworTElUT1JBTC0zOjI6MzE1MDg6NTA2NC41NzM2NDkKK0FOTk9CT046Mjo5NDUyNTozNC4yNzQ3MTQKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL0VRVUFUT1JJQUxHVUlORUFfQVJFQS50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9FUVVBVE9SSUFMR1VJTkVBX0FSRUEudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ5ZGFkODMKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9FUVVBVE9SSUFMR1VJTkVBX0FSRUEudHh0CkBAIC0wLDAgKzEsMTcgQEAKK0VRVUFUT1JJQUwgR1VJTkVBOjA6MjgwNTEKK0JJT0tPIFNVUjoxOjU0OC41NjAKK0xJVE9SQUw6MToyNzU3Ljg2NAorQU5OT0JPTjoxOjI3NTcuODY0CitDRU5UUk8gU1VSOjE6MzI5MC43NDkKK1dFTEVOWkFTOjE6MjM0Mi4wNjMKK0JJT0tPIE5PUlRFOjE6MjI1Ljk1OQorS0lFTlRFTToxOjEyOTIuNDQxCitMSVRPUkFMLTI6MjoxLjAwMDAwMAorQU5OT0JPTjoyOjI3NTcuODY0MDAwCitCSU9LTyBTVVI6Mjo1NDguNTYwMDAwCitCSU9LTyBOT1JURToyOjIyNS45NTkwMDAKK0NFTlRSTyBTVVI6MjozMjkwLjc0OTAwMAorTElUT1JBTC0zOjI6Ni4yMjEzMjAKK1dFTEVOWkFTOjI6MjM0Mi4wNjMwMDAKK0xJVE9SQUwtMToyOjI3NTAuOTQzOTcwCitLSUVOVEVNOjI6MTI5Mi40NDEwMDAKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9FUVVBVE9SSUFMR1VJTkVBX1BPUFVMQVRJT04udHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvRVFVQVRPUklBTEdVSU5FQV9QT1BVTEFUSU9OLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41Y2E4NjQxCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvRVFVQVRPUklBTEdVSU5FQV9QT1BVTEFUSU9OLnR4dApAQCAtMCwwICsxLDE3IEBACitFUVVBVE9SSUFMIEdVSU5FQTowOjQ4MDg5ODoxNy4xNDM3MDMKK0FOTk9CT046MTo5NDUyNTozNC4yNzQ3MTQKK0JJT0tPIE5PUlRFOjE6Njk5NDk6MzA5LjU2NTAxMAorQklPS08gU1VSOjE6MTU2Njk6MjguNTYzODc2CitDRU5UUk8gU1VSOjE6NjEyNDc6MTguNjExODcyCitLSUVOVEVNOjE6ODM0ODY6NjQuNTk1NTk5CitMSVRPUkFMOjE6OTQ1MjU6MzQuMjc0NzE0CitXRUxFTlpBUzoxOjYxNDk3OjI2LjI1NzYyMAorQklPS08gTk9SVEU6Mjo2OTk0OTozMDkuNTY1MDEwCitCSU9LTyBTVVI6MjoxNTY2OToyOC41NjM4NzYKK0xJVE9SQUwtMToyOjMxNTA4OjExLjQ1MzY0NAorS0lFTlRFTToyOjgzNDg2OjY0LjU5NTU5OQorQ0VOVFJPIFNVUjoyOjYxMjQ3OjE4LjYxMTg3MgorV0VMRU5aQVM6Mjo2MTQ5NzoyNi4yNTc2MjAKK0xJVE9SQUwtMjoyOjMxNTA4OjMxNTA4LjMzMzMzMworTElUT1JBTC0zOjI6MzE1MDg6NTA2NC41NzM2NDkKK0FOTk9CT046Mjo5NDUyNTozNC4yNzQ3MTQKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9FUklUUkVBX0FSRUEudHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvRVJJVFJFQV9BUkVBLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNjQ0ZDhhCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvRVJJVFJFQV9BUkVBLnR4dApAQCAtMCwwICsxLDE1IEBACitFcml0cmVhCToJMAk6CTEyMTMyMAorWm9iYSBBLW5zZWJhICAJOgkxCToJMjMyMDAKK1pvYmEgRGVidWIgCToJMQk6CTgwMDAKK2tleSBiYWhpcgk6CTEJOgkyNzYwMAorWm9iYSBHYXNoIEJhcmthIAk6CTEJOgkzMzIwMAorWm9iYSBNYWEta2VsIAk6CTEJOgkxMzAwCitab2JhIFNlbWUtbmF3aSBLZXlpaCBCYWhyaS0gCToJMQk6CTI3ODAwCitBa29yZGF0IDogMSA6IDMzMjAwCitBc3NlYiA6IDEgOiAyNzYwMAorR2FzaCAmIFNldGl0IDogMSA6IDIxNDAKK0hhbWFzc2llbiA6IDEgOiAyNTAwCitLZXJlbiA6IDEgOiAxNTEwCitTYWhlbCA6IDEgOiAzNDAwCitTZXJheWUgOjEgOiA1MjA0CitBa2VsZSBHdXpheSA6IDEgOiAyMTI1CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9FUklUUkVBX1BPUFVMQVRJT04udHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvRVJJVFJFQV9QT1BVTEFUSU9OLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNTY1YTg3Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvRVJJVFJFQV9QT1BVTEFUSU9OLnR4dApAQCAtMCwwICsxLDE1IEBACitFcml0cmVhCToJMAk6CTQ3ODY5NDQKK1pvYmEgQS1uc2ViYSAgCToJMQk6CTU0OTAwMAorWm9iYSBEZWJ1YiAJOgkxCToJOTUyMTAwCitrZXkgYmFoaXIJOgkxCToJODM1MDAKK1pvYmEgR2FzaCBCYXJrYSAJOgkxCToJNzA4ODAwCitab2JhIE1hYS1rZWwgCToJMQk6CTY3NTcwMAorWm9iYSBTZW1lLW5hd2kgS2V5aWggQmFocmktIAk6CTEJOgk2NTMzMDAKK0Frb3JkYXQgOiAxIDogMjUwMDAKK0Fzc2ViIDogMSA6IDIxMzAwCitHYXNoICYgU2V0aXQgOiAxIDogMjMwOTQKK0hhbWFzc2llbiA6IDEgOiAyMzM5MgorS2VyZW4gOiAxIDogMjcyMworU2FoZWwgOiAxIDogMjc0MjAKK1NlcmF5ZSA6MSA6IDM1ODAKK0FrZWxlIEd1emF5IDogMSA6IDI4MDI1CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9FU1RPTklBX0FSRUEudHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvRVNUT05JQV9BUkVBLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYTI4YWU3Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvRVNUT05JQV9BUkVBLnR4dApAQCAtMCwwICsxIEBACitFU1RPTklBIDogMCA6IDQ1MjI3CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9FU1RPTklBX1BPUFVMQVRJT04udHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvRVNUT05JQV9QT1BVTEFUSU9OLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MTIzNTg3Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvRVNUT05JQV9QT1BVTEFUSU9OLnR4dApAQCAtMCwwICsxIEBACitFU1RPTklBIDogMCA6IDEzNTEwNjkKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL0VUSElPUElBX0FSRUEudHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvRVRISU9QSUFfQVJFQS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjg4OWJiMgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL0VUSElPUElBX0FSRUEudHh0CkBAIC0wLDAgKzEgQEAKK0VUSElPUElBIDogMCA6IDExMjcxMjcKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL0VUSElPUElBX1BPUFVMQVRJT04udHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvRVRISU9QSUFfUE9QVUxBVElPTi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjE1ZDVmNwotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL0VUSElPUElBX1BPUFVMQVRJT04udHh0CkBAIC0wLDAgKzEgQEAKK0VUSElPUElBIDogMCA6IDc1MDY3MDAwCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9GQVJPRSBJU0xBTkRTX0FSRUEudHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvRkFST0UgSVNMQU5EU19BUkVBLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNjlkZTI5Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvRkFST0UgSVNMQU5EU19BUkVBLnR4dApkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvRkFST0UgSVNMQU5EU19QT1BVTEFUSU9OLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL0ZBUk9FIElTTEFORFNfUE9QVUxBVElPTi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTY5ZGUyOQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL0ZBUk9FIElTTEFORFNfUE9QVUxBVElPTi50eHQKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL0ZJTkxBTkRfQVJFQS50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9GSU5MQU5EX0FSRUEudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYwYzIyZjQKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9GSU5MQU5EX0FSRUEudHh0CkBAIC0wLDAgKzEsMTIgQEAKKyBMYXBwaS9MYXBwbGFuZCA6IDEgOiA5ODkzNy4wCisgT3VsdS9VbGVhYm9yZyA6IDEgOiA2MTU4Mi4wCisgVmFhc2EvVmFzYSA6IDEgOiAyNzMxOS4wCisgS3VvcGlvIDogMSA6IDE5OTUzLjAKKyBQb2hqb2lzLUthcmphbGEvTm9ycmEtS2FyZWxlbiA6IDEgOiAyMTU4NS4wCisgS2Vza2ktU3VvbWkvTWVsbGVyc3RhLUZpbmxhbmQgOiAxIDogMTkzNTcuMAorIE1pa2tlbGkvU3QgTWljaGVsIDogMSA6IDIxNjYwLjAKKyBIhG1lL1RhdmFzdGVodXMgOiAxIDogMTkxMDQuMAorIFR1cmt1LVBvcmkvQWJvLUJqlHJuZWJvcmcgOiAxIDogMjM4NjMuMAorIEt5bWkvS3ltbWVuZSA6IDEgOiAxMjgyOC4wCisgVXVkZW5tYWEvTnlsYW5kIDogMSA6IDEwNDA0LjAKKyBBbGFuZC9BaHZlbmFubWFhIDogMSA6IDE1NTIuMApkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvRklOTEFORF9QT1BVTEFUSU9OLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL0ZJTkxBTkRfUE9QVUxBVElPTi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmIyZTc0NQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL0ZJTkxBTkRfUE9QVUxBVElPTi50eHQKQEAgLTAsMCArMSwxMiBAQAorIExhcHBpL0xhcHBsYW5kIDogMSA6IDIwMDMyNAorIE91bHUvVWxlYWJvcmcgOiAxIDogNDM4NjYwCisgVmFhc2EvVmFzYSA6IDEgOiA0NDUxNTUKKyBLdW9waW8gOiAxIDogMjU2NTgxCisgUG9oam9pcy1LYXJqYWxhL05vcnJhLUthcmVsZW4gOiAxIDogMTc2NzAxCisgS2Vza2ktU3VvbWkvTWVsbGVyc3RhLUZpbmxhbmQgOiAxIDogMjUyMDE2CisgTWlra2VsaS9TdCBNaWNoZWwgOiAxIDogMjA4MTkwCisgSIRtZS9UYXZhc3RlaHVzIDogMSA6IDY4NDkyOAorIFR1cmt1LVBvcmkvQWJvLUJqlHJuZWJvcmcgOiAxIDogNzIyMzk4CisgS3ltaS9LeW1tZW5lIDogMSA6IDMzNTMxMworIFV1ZGVubWFhL055bGFuZCA6IDEgOiAxMjQxNzUxCisgQWxhbmQvQWh2ZW5hbm1hYSA6IDEgOiAyNDQxOApkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvRlJBTkNFX0FSRUEudHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvRlJBTkNFX0FSRUEudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZmMWI1MWMKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9GUkFOQ0VfQVJFQS50eHQKQEAgLTAsMCArMSwyMiBAQAorIE5PUkQgLSBQQVMtREUtQ0FMQUlTIDogMSA6IDEyNDE0LjAKKyBQSUNBUkRJRSA6IDEgOiAxOTM5OS4wCisgQ0hBTVBBR05FLUFSREVOTkUgOiAxIDogMjU2MDUuMAorIEhBVVRFLU5PUk1BTkRJRSA6IDEgOiAxMjMxNy4wCisgQkFTU0UtTk9STUFORElFIDogMSA6IDE3NTg5LjAKKyBMT1JSQUlORSA6IDEgOiAyMzU0Ny4wCisgSUxFIERFIEZSQU5DRSA6IDEgOiA1OTkxLjAKKyBBTFNBQ0UgOiAxIDogODI4MC4wCisgQ0VOVFJFIDogMSA6IDM5MTUwLjAKKyBCUkVUQUdORSA6IDEgOiAyNzIwNy4wCisgUEFZUyBERSBMQSBMT0lSRSA6IDEgOiAzMjA4MS4wCisgQk9VUkdPR05FIDogMSA6IDMxNTgxLjAKKyBGUkFOQ0hFLUNPTVRFIDogMSA6IDE2MjAyLjAKKyBQT0lUT1UtQ0hBUkVOVEVTIDogMSA6IDI1ODA5LjAKKyBBVVZFUkdORSA6IDEgOiAyNjAxMi4wCisgUkhPTkUtQUxQRVMgOiAxIDogNDM2OTguMAorIExJTU9VU0lOIDogMSA6IDE2OTQyLjAKKyBBUVVJVEFJTkUgOiAxIDogNDEzMDguMAorIFBST1ZFTkNFLUFMUEVTLUNPVEUgRCdBWlVSIDogMSA6IDMxMzk5LjAKKyBNSURJLVBZUkVORUVTIDogMSA6IDQ1MzQ3LjAKKyBMQU5HVUVET0MtUk9VU1NJTExPTiA6IDEgOiAyNzM3NS4wCisgQ09SU0UgOiAxIDogODY3OS4wCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9GUkFOQ0VfUE9QVUxBVElPTi50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9GUkFOQ0VfUE9QVUxBVElPTi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjY1NTEwYQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL0ZSQU5DRV9QT1BVTEFUSU9OLnR4dApAQCAtMCwwICsxLDIyIEBACisgTk9SRCAtIFBBUy1ERS1DQUxBSVMgOiAxIDogMzk2NzAwMAorIFBJQ0FSRElFIDogMSA6IDE4MDk4MDAKKyBDSEFNUEFHTkUtQVJERU5ORSA6IDEgOiAxMzQ4NjAwCisgSEFVVEUtTk9STUFORElFIDogMSA6IDE3MzY1MDAKKyBCQVNTRS1OT1JNQU5ESUUgOiAxIDogMTM5MTQwMAorIExPUlJBSU5FIDogMSA6IDIzMDc1MDAKKyBJTEUgREUgRlJBTkNFIDogMSA6IDEwNjUxNDAwCisgQUxTQUNFIDogMSA6IDE2MjM4MDAKKyBDRU5UUkUgOiAxIDogMjM3MDIwMAorIEJSRVRBR05FIDogMSA6IDI3OTUzMDAKKyBQQVlTIERFIExBIExPSVJFIDogMSA6IDMwNTgxMDAKKyBCT1VSR09HTkUgOiAxIDogMTYxMDQwMAorIEZSQU5DSEUtQ09NVEUgOiAxIDogMTA5NzgwMAorIFBPSVRPVS1DSEFSRU5URVMgOiAxIDogMTU5NTYwMAorIEFVVkVSR05FIDogMSA6IDEzMjI1MDAKKyBSSE9ORS1BTFBFUyA6IDEgOiA1MzQ2ODAwCisgTElNT1VTSU4gOiAxIDogNzIzODAwCisgQVFVSVRBSU5FIDogMSA6IDI3OTQ2MDAKKyBQUk9WRU5DRS1BTFBFUy1DT1RFIEQnQVpVUiA6IDEgOiA0MjU0NDAwCisgTUlESS1QWVJFTkVFUyA6IDEgOiAyNDMwMDAwCisgTEFOR1VFRE9DLVJPVVNTSUxMT04gOiAxIDogMjExMjIwMAorIENPUlNFIDogMSA6IDI0OTcwMApkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvR0FCT05fQVJFQS50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9HQUJPTl9BUkVBLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMjI0ZTI5Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvR0FCT05fQVJFQS50eHQKQEAgLTAsMCArMSwxNCBAQAorR2Fib24JOgkwCToJMjY3NjY3CitFc3R1YWlyZSBbV2VzdGVybjJdIAk6CTEJOgkyMDc0MAorSGF1dC1PZ29vdWUgCToJMQk6CTM2NTQ3CitNb3llbiBPZ29vdWUgCToJMQk6CTE4NTM1CitOZ291bmllIFtDZW50cmFsMV0JOgkxCToJMzc3NTAKK055YW5nYSAJOgkxCToJMjEyODUKK09nb291ZS1JdmluZG8gW0Vhc3Rlcm4zXQk6CTEJOgk0NjA3NQorT2dvb3VlLUxvbG8gCToJMQk6CTI1MzgwCitPZ29vdWUtTWFyaXRpbWUgCToJMQk6CTIyODkwCitXb3VsZXUtTnRlbSAJOgkxCToJMzg0NjUKKworCisKKwpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvR0FCT05fUE9QVUxBVElPTi50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9HQUJPTl9QT1BVTEFUSU9OLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNDQwZDg1Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvR0FCT05fUE9QVUxBVElPTi50eHQKQEAgLTAsMCArMSwxMCBAQAorR2Fib24JOgkwCToJMTQyNDkwNgorRXN0dWFpcmUgW1dlc3Rlcm4yXSAJOgkxCToJNDYzMTg3CitIYXV0LU9nb291ZSAJOgkxCToJMTA0MzAxCitNb3llbiBPZ29vdWUgCToJMQk6CTQyMzE2CitOZ291bmllIFtDZW50cmFsMV0JOgkxCToJNzc3ODEKK055YW5nYSAJOgkxCToJMzk0MzAKK09nb291ZS1JdmluZG8gW0Vhc3Rlcm4zXSAJOgkxCToJNDg4NjIKK09nb291ZS1Mb2xvIAk6CTEJOgk0MzkxNQorT2dvb3VlLU1hcml0aW1lIAk6CTEJOgk5NzkxMworV291bGV1LU50ZW0gCToJMQk6CTk3MjcxClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvR0FNQklBIFRIRV9BUkVBLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL0dBTUJJQSBUSEVfQVJFQS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjllZDVhMQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL0dBTUJJQSBUSEVfQVJFQS50eHQKQEAgLTAsMCArMSw1MCBAQAorR2FtYmlhCToJMAk6CTExMzAwCitCYW5qdWwJOgkxCToJMTIKKyBCYW5qdWwgU291dGggCToJMQk6CTEKKyBCYW5qdWwgQ2VudHJhbCAJOgkxCToJMQorIEJhbmp1bCBOb3J0aCAJOgkxCToJMQorVXBwZXIgUml2ZXIJOgkxCToJMjA2OQorIEZ1bGxhZHUgRWFzdCAJOgkxCToJMQorIEthbnRvcmEgCToJMQk6CTEKKyBXdWxpIAk6CTEJOgkxCisgU2FuZHUgCToJMQk6CTEKK1dlc3Rlcm4JOgkxCToJMTc2NAorIEtvbWJvIE5vcnRoIAk6CTEJOgkxCisgS29tYm8gU291dGggCToJMQk6CTEKKyBLb21ibyBDZW50cmFsIAk6CTEJOgkxCisgS29tYm8gRWFzdCAJOgkxCToJMQorIEZvbmkgQnJlZmV0IAk6CTEJOgkxCisgRm9uaSBCaW50YW5nIEthcmFuYWkgCToJMQk6CTEKKyBGb25pIEthbnNhbGEgCToJMQk6CTEKKyBGb25pIEJvbmRhbGkgCToJMQk6CTEKKyBGb25pIEphcnJvbCAJOgkxCToJMQorR2VvcmdldG93bgk6CTEJOgkyODk0CisgTmlhbWluYSBEYW5rdW5rdSAJOgkxCToJMQorIE5pYW1pbmEgV2VzdCAJOgkxCToJMQorIE5pYW1pbmEgRWFzdCAJOgkxCToJMQorIEZ1bGxhZHUgV2VzdCAJOgkxCToJMQorTWFjY2FydGh5IGlzbGFuZAk6CTEJOgkxCitLYW5pZmluZyBMR0EgCToJMQk6CTc2CisgSy5VLkQuQy4gCToJMQk6CTEKK05vcnRoIEJhbmsJOgkxCToJMjI1NgorIExvd2VyIE51aW1pIAk6CTEJOgkxCisgVXBwZXIgTnVpbWkgCToJMQk6CTEKKyBKb2thZHUgCToJMQk6CTEKKyBMb3dlciBCYWRkaWJ1IAk6CTEJOgkxCisgQ2VudHJhbCBCYWRkaWJ1IAk6CTEJOgkxCisgVXBwZXIgQmFkZGlidSAJOgkxCToJMQorS3VudGF1cgk6CTEJOgkxCisgTG93ZXIgU2Fsb3VtIAk6CTEJOgkxCisgVXBwZXIgU2Fsb3VtIAk6CTEJOgkxCisgTmlhbmlqYSAJOgkxCToJMQorIE5pYW5pIAk6CTEJOgkxCisgU2FtaSAJOgkxCToJMQorTG93ZXIgUml2ZXIJOgkxCToJMTYxOAorIEtpYW5nIFdlc3QgCToJMQk6CTEKKyBLaWFuZyBDZW50cmFsIAk6CTEJOgkxCisgS2lhbmcgRWFzdCAJOgkxCToJMQorIEphcnJhIFdlc3QgCToJMQk6CTEKKyBKYXJyYSBDZW50cmFsIAk6CTEJOgkxCisgSmFycmEgRWFzdCAJOgkxCToJMQorCisKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL0dBTUJJQSBUSEVfUE9QVUxBVElPTi50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9HQU1CSUEgVEhFX1BPUFVMQVRJT04udHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYzY2IwOGIKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9HQU1CSUEgVEhFX1BPUFVMQVRJT04udHh0CkBAIC0wLDAgKzEsNDggQEAKK0dhbWJpYQk6CTAJOgkxNjQxNTY0CitCYW5qdWwJOgkxCToJMzQ4MjgKK0Rpc3RyaWN0IG9mIEJhbmp1bCBTb3V0aCAJOgkxCToJODUwNworRGlzdHJpY3Qgb2YgQmFuanVsIENlbnRyYWwgCToJMQk6CTg4MjIKK0Rpc3RyaWN0IG9mIEJhbmp1bCBOb3J0aCAJOgkxCToJMTc0OTkKK1VwcGVyIFJpdmVyCToJMQk6CTE4MzAzMworRHN0cmN0IG9mIEZ1bGxhZHUgRWFzdCAJOgkxCToJOTg0NTQKK0RzdHJjdCBvZiBLYW50b3JhIAk6CTEJOgkzMDQwMgorRHN0cmN0IG9mIFd1bCAJOgkxCToJMzU4NTYKK0RzdHJjdCBvZiBTYW5kdSAJOgkxCToJMTgzMjEKK1dlc3Rlcm4JOgkxCToJMzkyOTg3CitEc3RyY3Qgb2YgS29tYm8gTm9ydGggCToJMQk6CTE2NjM1MQorRHN0cmN0IG9mIEtvbWJvIFNvdXRoIAk6CTEJOgk2MjUzMQorRHN0cmN0IG9mIEtvbWJvIENlbnRyYWwgCToJMQk6CTg0MzE1CitEc3RyY3Qgb2YgS29tYm8gRWFzdCAJOgkxCToJMjgxNDYKK0RzdHJjdCBvZiBGb24gQnJlZmV0IAk6CTEJOgkxMTQxMQorRHN0cmN0IG9mIEZvbiBCbnRhbmcgS2FyYW5hIAk6CTEJOgkxNTk5NAorRHN0cmN0IG9mIEZvbiBLYW5zYWxhIAk6CTEJOgkxMjI0NworRHN0cmN0IG9mIEZvbiBCb25kYWwgCToJMQk6CTYwNDkKK0RzdHJjdCBvZiBGb24gSmFycm9sIAk6CTEJOgk1OTQzCitHZW9yZ2V0b3duCToJMQk6CTEwNjc5OQorRHN0cmN0IG9mIE5hbW5hIERhbmt1bmt1IAk6CTEJOgk2MDAwCitEc3RyY3Qgb2YgTmFtbmEgV2VzdCAJOgkxCToJNjYzMAorRHN0cmN0IG9mIE5hbW5hIEVhc3QgCToJMQk6CTE5MDM0CitEc3RyY3Qgb2YgRnVsbGFkdSBXZXN0IAk6CTEJOgk3MTY2OQorTWFjY2FydGh5IGlzbGFuZAk6CTEJOgkzNDY2CitLYW5mbmcgTEdBIAk6CTEJOgkzMjI0MTAKK0RzdHJjdCBvZiBLLlUuRC5DLiAJOgkxCToJMzIyNDEwCitOb3J0aCBCYW5rCToJMQk6CTE3MjgwNgorRHN0cmN0IG9mIExvd2VyIE51bSAJOgkxCToJNDQ0OTEKK0RzdHJjdCBvZiBVcHBlciBOdW0gCToJMQk6CTI0OTQwCitEc3RyY3Qgb2YgSm9rYWR1IAk6CTEJOgkxNzg1MAorRHN0cmN0IG9mIExvd2VyIEJhZGRidSAJOgkxCToJMTUxNTcKK0RzdHJjdCBvZiBDZW50cmFsIEJhZGRidSAJOgkxCToJMTQ5OTgKK0RzdHJjdCBvZiBVcHBlciBCYWRkYnUgCToJMQk6CTU1MzcwCitLdW50YXVyCToJMQk6CTc5MDk4CitEc3RyY3Qgb2YgTG93ZXIgU2Fsb3VtIAk6CTEJOgkxMzUyNAorRHN0cmN0IG9mIFVwcGVyIFNhbG91bSAJOgkxCToJMTU5NzAKK0RzdHJjdCBvZiBOYW5qYSAJOgkxCToJODIwNQorRHN0cmN0IG9mIE5hbiAJOgkxCToJMjIyNDIKK0RzdHJjdCBvZiBTYW0gCToJMQk6CTE5MTU3CitMb3dlciBSaXZlcgk6CTEJOgk3MjU0NgorRHN0cmN0IG9mIEthbmcgV2VzdCAJOgkxCToJMTQ3MTEKK0RzdHJjdCBvZiBLYW5nIENlbnRyYWwgCToJMQk6CTc4ODYKK0RzdHJjdCBvZiBLYW5nIEVhc3QgCToJMQk6CTY1MzQKK0RzdHJjdCBvZiBKYXJyYSBXZXN0IAk6CTEJOgkyNDQxNgorRHN0cmN0IG9mIEphcnJhIENlbnRyYWwgCToJMQk6CTY0OTQKK0RzdHJjdCBvZiBKYXJyYSBFYXN0IAk6CTEJOgkxMjUwNQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvR0FNQklBX0FSRUEudHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvR0FNQklBX0FSRUEudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY3NzViYmQKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9HQU1CSUFfQVJFQS50eHQKQEAgLTAsMCArMSw1MCBAQAorR2FtYmlhCToJMAk6CTExMzAwCitCYW5qdWwJOgkxCToJMTIKKyBCYW5qdWwgU291dGggCToJMQk6CTEKKyBCYW5qdWwgQ2VudHJhbCAJOgkxCToJMQorIEJhbmp1bCBOb3J0aCAJOgkxCToJMQorVXBwZXIgUml2ZXIJOgkxCToJMjA2OQorIEZ1bGxhZHUgRWFzdCAJOgkxCToJMQorIEthbnRvcmEgCToJMQk6CTEKKyBXdWxpIAk6CTEJOgkxCisgU2FuZHUgCToJMQk6CTEKK1dlc3Rlcm4xCToJMQk6CTE3NjQKKyBLb21ibyBOb3J0aCAJOgkxCToJMQorIEtvbWJvIFNvdXRoIAk6CTEJOgkxCisgS29tYm8gQ2VudHJhbCAJOgkxCToJMQorIEtvbWJvIEVhc3QgCToJMQk6CTEKKyBGb25pIEJyZWZldCAJOgkxCToJMQorIEZvbmkgQmludGFuZyBLYXJhbmFpIAk6CTEJOgkxCisgRm9uaSBLYW5zYWxhIAk6CTEJOgkxCisgRm9uaSBCb25kYWxpIAk6CTEJOgkxCisgRm9uaSBKYXJyb2wgCToJMQk6CTEKK0dlb3JnZXRvd24JOgkxCToJMjg5NAorIE5pYW1pbmEgRGFua3Vua3UgCToJMQk6CTEKKyBOaWFtaW5hIFdlc3QgCToJMQk6CTEKKyBOaWFtaW5hIEVhc3QgCToJMQk6CTEKKyBGdWxsYWR1IFdlc3QgCToJMQk6CTEKK01hY2NhcnRoeSBpc2xhbmQJOgkxCToJMQorS2FuaWZpbmcgTEdBIAk6CTEJOgk3NgorIEsuVS5ELkMuIAk6CTEJOgkxCitOb3J0aCBCYW5rCToJMQk6CTIyNTYKKyBMb3dlciBOdWltaSAJOgkxCToJMQorIFVwcGVyIE51aW1pIAk6CTEJOgkxCisgSm9rYWR1IAk6CTEJOgkxCisgTG93ZXIgQmFkZGlidSAJOgkxCToJMQorIENlbnRyYWwgQmFkZGlidSAJOgkxCToJMQorIFVwcGVyIEJhZGRpYnUgCToJMQk6CTEKK0t1bnRhdXIJOgkxCToJMQorIExvd2VyIFNhbG91bSAJOgkxCToJMQorIFVwcGVyIFNhbG91bSAJOgkxCToJMQorIE5pYW5pamEgCToJMQk6CTEKKyBOaWFuaSAJOgkxCToJMQorIFNhbWkgCToJMQk6CTEKK0xvd2VyIFJpdmVyCToJMQk6CTE2MTgKKyBLaWFuZyBXZXN0IAk6CTEJOgkxCisgS2lhbmcgQ2VudHJhbCAJOgkxCToJMQorIEtpYW5nIEVhc3QgCToJMQk6CTEKKyBKYXJyYSBXZXN0IAk6CTEJOgkxCisgSmFycmEgQ2VudHJhbCAJOgkxCToJMQorIEphcnJhIEVhc3QgCToJMQk6CTEKKworCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9HQU1CSUFfUE9QVUxBVElPTi50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9HQU1CSUFfUE9QVUxBVElPTi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODUyZDdkYwotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL0dBTUJJQV9QT1BVTEFUSU9OLnR4dApAQCAtMCwwICsxLDQ4IEBACitHYW1iaWEJOgkwCToJMTY0MTU2NAorQmFuanVsCToJMQk6CTM0ODI4CitEaXN0cmljdCBvZiBCYW5qdWwgU291dGggCToJMQk6CTg1MDcKK0Rpc3RyaWN0IG9mIEJhbmp1bCBDZW50cmFsIAk6CTEJOgk4ODIyCitEaXN0cmljdCBvZiBCYW5qdWwgTm9ydGggCToJMQk6CTE3NDk5CitVcHBlciBSaXZlcgk6CTEJOgkxODMwMzMKK0RzdHJjdCBvZiBGdWxsYWR1IEVhc3QgCToJMQk6CTk4NDU0CitEc3RyY3Qgb2YgS2FudG9yYSAJOgkxCToJMzA0MDIKK0RzdHJjdCBvZiBXdWwgCToJMQk6CTM1ODU2CitEc3RyY3Qgb2YgU2FuZHUgCToJMQk6CTE4MzIxCitXZXN0ZXJuCToJMQk6CTM5Mjk4NworRHN0cmN0IG9mIEtvbWJvIE5vcnRoIAk6CTEJOgkxNjYzNTEKK0RzdHJjdCBvZiBLb21ibyBTb3V0aCAJOgkxCToJNjI1MzEKK0RzdHJjdCBvZiBLb21ibyBDZW50cmFsIAk6CTEJOgk4NDMxNQorRHN0cmN0IG9mIEtvbWJvIEVhc3QgCToJMQk6CTI4MTQ2CitEc3RyY3Qgb2YgRm9uIEJyZWZldCAJOgkxCToJMTE0MTEKK0RzdHJjdCBvZiBGb24gQm50YW5nIEthcmFuYSAJOgkxCToJMTU5OTQKK0RzdHJjdCBvZiBGb24gS2Fuc2FsYSAJOgkxCToJMTIyNDcKK0RzdHJjdCBvZiBGb24gQm9uZGFsIAk6CTEJOgk2MDQ5CitEc3RyY3Qgb2YgRm9uIEphcnJvbCAJOgkxCToJNTk0MworR2VvcmdldG93bgk6CTEJOgkxMDY3OTkKK0RzdHJjdCBvZiBOYW1uYSBEYW5rdW5rdSAJOgkxCToJNjAwMAorRHN0cmN0IG9mIE5hbW5hIFdlc3QgCToJMQk6CTY2MzAKK0RzdHJjdCBvZiBOYW1uYSBFYXN0IAk6CTEJOgkxOTAzNAorRHN0cmN0IG9mIEZ1bGxhZHUgV2VzdCAJOgkxCToJNzE2NjkKK01hY2NhcnRoeSBJc2xhbmQJOgkxCToJMzQ2NgorS2FuZm5nIExHQSAJOgkxCToJMzIyNDEwCitEc3RyY3Qgb2YgSy5VLkQuQy4gCToJMQk6CTMyMjQxMAorTm9ydGggQmFuawk6CTEJOgkxNzI4MDYKK0RzdHJjdCBvZiBMb3dlciBOdW0gCToJMQk6CTQ0NDkxCitEc3RyY3Qgb2YgVXBwZXIgTnVtIAk6CTEJOgkyNDk0MAorRHN0cmN0IG9mIEpva2FkdSAJOgkxCToJMTc4NTAKK0RzdHJjdCBvZiBMb3dlciBCYWRkYnUgCToJMQk6CTE1MTU3CitEc3RyY3Qgb2YgQ2VudHJhbCBCYWRkYnUgCToJMQk6CTE0OTk4CitEc3RyY3Qgb2YgVXBwZXIgQmFkZGJ1IAk6CTEJOgk1NTM3MAorS3VudGF1cgk6CTEJOgk3OTA5OAorRHN0cmN0IG9mIExvd2VyIFNhbG91bSAJOgkxCToJMTM1MjQKK0RzdHJjdCBvZiBVcHBlciBTYWxvdW0gCToJMQk6CTE1OTcwCitEc3RyY3Qgb2YgTmFuamEgCToJMQk6CTgyMDUKK0RzdHJjdCBvZiBOYW4gCToJMQk6CTIyMjQyCitEc3RyY3Qgb2YgU2FtIAk6CTEJOgkxOTE1NworTG93ZXIgUml2ZXIJOgkxCToJNzI1NDYKK0RzdHJjdCBvZiBLYW5nIFdlc3QgCToJMQk6CTE0NzExCitEc3RyY3Qgb2YgS2FuZyBDZW50cmFsIAk6CTEJOgk3ODg2CitEc3RyY3Qgb2YgS2FuZyBFYXN0IAk6CTEJOgk2NTM0CitEc3RyY3Qgb2YgSmFycmEgV2VzdCAJOgkxCToJMjQ0MTYKK0RzdHJjdCBvZiBKYXJyYSBDZW50cmFsIAk6CTEJOgk2NDk0CitEc3RyY3Qgb2YgSmFycmEgRWFzdCAJOgkxCToJMTI1MDUKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL0dFUk1BTllfQVJFQS50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9HRVJNQU5ZX0FSRUEudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc1MTE0YTQKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9HRVJNQU5ZX0FSRUEudHh0CkBAIC0wLDAgKzEsNDEgQEAKKyBHRVJNQU5ZIDogMCA6IDM1NzA1MC4wCisgU0NITEVTV0lHLUhPTFNURUlOIDogMSA6IDE1NzIxLjAKKyBDSEVNTklUWiA6IDEgOiAxLjAKKyBNRUNLTEVOQlVSRy1WT1JQT01NRVJOIDogMSA6IDEuMAorIFdFU0VSLUVNUyA6IDEgOiAxNDk2NC4wCisgTFVFTkVCVVJHIDogMSA6IDE1MzQ2LjAKKyBIQU1CVVJHIDogMSA6IDc1NC4wCisgQlJBTkRFTkJVUkcgOiAxIDogMS4wCisgQlJFTUVOIDogMSA6IDQwNC4wCisgSEFOTk9WRVIgOiAxIDogOTA0My4wCisgTUFHREVCVVJHIDogMSA6IDEuMAorIEJSQVVOU0NIV0VJRyA6IDEgOiA4MDkzLjAKKyBCRVJMSU4gOiAxIDogMS4wCisgREVUTU9MRCA6IDEgOiA2NTE0LjAKKyBNVUVOU1RFUiA6IDEgOiA2ODk3LjAKKyBERVNTQVUgOiAxIDogMS4wCisgSEFMTEUgOiAxIDogMS4wCisgRFVFU1NFTERPUkYgOiAxIDogNTI4Ny4wCisgQVJOU0JFUkcgOiAxIDogNzk5OC4wCisgTEVJUFpJRyA6IDEgOiAxLjAKKyBLQVNTRUwgOiAxIDogODI4OC4wCisgVEhVUklOR0VOIDogMSA6IDEuMAorIERSRVNERU4gOiAxIDogMS4wCisgS09FTE4gOiAxIDogNzM2My4wCisgR0lFU1NFTiA6IDEgOiA1MzgwLjAKKyBLT0JMRU5aIDogMSA6IDgwOTIuMAorIFVOVEVSRlJBTktFTiA6IDEgOiA4NTMxLjAKKyBPQkVSRlJBTktFTiA6IDEgOiA3MjMxLjAKKyBEQVJNU1RBRFQgOiAxIDogNzQ0NS4wCisgVFJJRVIgOiAxIDogNDkyNS4wCisgUkhFSU5IRVNTRU4tUEZBTFogOiAxIDogNjgyOS4wCisgT0JFUlBGQUxaIDogMSA6IDk2OTEuMAorIFNUVVRUR0FSVCA6IDEgOiAxMDU1Ny4wCisgTUlUVEVMRlJBTktFTiA6IDEgOiA3MjQ0LjAKKyBLQVJMU1JVSEUgOiAxIDogNjkxOS4wCisgU0FBUkxBTkQgOiAxIDogMjU3MS4wCisgTklFREVSQkFZRVJOIDogMSA6IDEwMzMxLjAKKyBPQkVSQkFZRVJOIDogMSA6IDE3NTI4LjAKKyBTQ0hXQUJFTiA6IDEgOiA5OTkzLjAKKyBGUkVJQlVSRyA6IDEgOiA5MzU2LjAKKyBUVUVCSU5HRU4gOiAxIDogODkxNy4wCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9HRVJNQU5ZX1BPUFVMQVRJT04udHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvR0VSTUFOWV9QT1BVTEFUSU9OLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNmEyNTMyCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvR0VSTUFOWV9QT1BVTEFUSU9OLnR4dApAQCAtMCwwICsxLDQwIEBACisgU0NITEVTV0lHLUhPTFNURUlOIDogMSA6IDI1OTQ2MDAKKyBDSEVNTklUWiA6IDEgOiAyNDYxMTAKKyBNRUNLTEVOQlVSRy1WT1JQT01NRVJOIDogMSA6IDE3MDAwMDQKKyBXRVNFUi1FTVMgOiAxIDogMjE2OTgwMAorIExVRU5FQlVSRyA6IDEgOiAxNDY3NDAwCisgSEFNQlVSRyA6IDEgOiAxNjI2MjAwCisgQlJBTkRFTkJVUkcgOiAxIDogNzQxMjkKKyBCUkVNRU4gOiAxIDogNjczNzAwCisgSEFOTk9WRVIgOiAxIDogMjAzMjQwMAorIE1BR0RFQlVSRyA6IDEgOiAyMjg1MTUKKyBCUkFVTlNDSFdFSUcgOiAxIDogMTYxNDIwMAorIEJFUkxJTiA6IDEgOiAyMTMwNTAwCisgREVUTU9MRCA6IDEgOiAxODQ5NzAwCisgTVVFTlNURVIgOiAxIDogMjQzNzgwMAorIERFU1NBVSA6IDEgOiA3ODk1MworIEhBTExFIDogMSA6IDI0MzA0NQorIERVRVNTRUxET1JGIDogMSA6IDUxNjc3MDAKKyBBUk5TQkVSRyA6IDEgOiAzNjg1MjAwCisgTEVJUFpJRyA6IDEgOiA1MDIwMDAKKyBLQVNTRUwgOiAxIDogMTE4NzcwMAorIFRIVVJJTkdFTiA6IDEgOiAyNDAwMDAwCisgRFJFU0RFTiA6IDEgOiA1MDAwNjgKKyBLT0VMTiA6IDEgOiAzOTYzMTAwCisgR0lFU1NFTiA6IDEgOiA5ODE1MDAKKyBLT0JMRU5aIDogMSA6IDEzNzcwMDAKKyBVTlRFUkZSQU5LRU4gOiAxIDogMTIzNDkwMAorIE9CRVJGUkFOS0VOIDogMSA6IDEwNTU4MDAKKyBEQVJNU1RBRFQgOiAxIDogMzQ5MTQwMAorIFRSSUVSIDogMSA6IDQ3ODAwMAorIFJIRUlOSEVTU0VOLVBGQUxaIDogMSA6IDE4NDY3MDAKKyBPQkVSUEZBTFogOiAxIDogOTkxMzAwCisgU1RVVFRHQVJUIDogMSA6IDM2MTAwMDAKKyBNSVRURUxGUkFOS0VOIDogMSA6IDE1NjYxMDAKKyBLQVJMU1JVSEUgOiAxIDogMjQ4NDAwMAorIFNBQVJMQU5EIDogMSA6IDEwNjQ5MDAKKyBOSUVERVJCQVlFUk4gOiAxIDogMTA1NzQwMAorIE9CRVJCQVlFUk4gOiAxIDogMzcyMTMwMAorIFNDSFdBQkVOIDogMSA6IDE1OTM5MDAKKyBGUkVJQlVSRyA6IDEgOiAxOTM0ODAwCisgVFVFQklOR0VOIDogMSA6IDE1ODk5MDAKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL0dIQU5BX0FSRUEudHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvR0hBTkFfQVJFQS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmFkZDlhMQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL0dIQU5BX0FSRUEudHh0CkBAIC0wLDAgKzEsMTIgQEAKK0doYW5hIAk6CTAJCToJMjM5NDYwCitBc2hhbnRpICAJOgkxCQk6CTI0Mzg5CitCcm9uZyBBaGFmbyAJOgkxCQk6CTM5NTU3CitDZW50cmFsCToJMQkJOgk5ODI2CitFYXN0ZXJuIAk6CTEJCToJMTkzMjMKK0dyZWF0ZXIgQWNjcmEgCToJMQkJOgkzMjQ1CitOb3J0aGVybiAJOgkxCQk6CTcwMzg0CitVcHBlciBFYXN0IAk6CTEJCToJODg0MgorVXBwZXIgV2VzdCAJOgkxCQk6CTE4NDc2CitWb2x0YSAJOgkxCQk6CTIwNTcwCitXZXN0ZXJuIAk6CTEJCToJMjM5MjEKKwpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvR0hBTkFfUE9QVUxBVElPTi50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9HSEFOQV9QT1BVTEFUSU9OLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMWQ2MjMwCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvR0hBTkFfUE9QVUxBVElPTi50eHQKQEAgLTAsMCArMSwxMiBAQAorR2hhbmEgCToJMAkJOgkyMiw0MDksNTcyCitBc2hhbnRpICAJOgkxCQk6CTM2MTI5NTAKK0Jyb25nIEFoYWZvIAk6CTEJCToJMTgxNTQwOAorQ2VudHJhbCAJOgkxCQk6CTE1OTM4MjMKK0Vhc3Rlcm4gCToJMQkJOgkyMTA2Njk2CitHcmVhdGVyIEFjY3JhIAk6CTEJCToJMjkwNTcyNgorTm9ydGhlcm4gCToJMQkJOgkxODIwODA2CitVcHBlciBFYXN0IAk6CTEJCToJOTIwMDg5CitVcHBlciBXZXN0IAk6CTEJCToJNTY3NTgzCitWb2x0YSAJOgkxCQk6CTE2MzU0MjEKK1dlc3Rlcm4gCToJMQkJOgkxOTI0NTc3CisKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL0dJQlJBTFRBUl9QT1BVTEFUSU9OLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL0dJQlJBTFRBUl9QT1BVTEFUSU9OLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZDQ0MTI4Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvR0lCUkFMVEFSX1BPUFVMQVRJT04udHh0CkBAIC0wLDAgKzEgQEAKK0dJQlJBTFRBUjowOjI4NzQzOjExNDk3CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9HUkVFQ0VfQVJFQS50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9HUkVFQ0VfQVJFQS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWYwMzY2NAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL0dSRUVDRV9BUkVBLnR4dApAQCAtMCwwICsxLDEzIEBACisgQU5BVE9MSUtJIE1BS0VET05JQSA6IDEgOiAxNDE1NS4wCisgS0VOVFJJS0kgTUFLRURPTklBIDogMSA6IDE5MTQ5LjAKKyBEWVRJS0kgTUFLRURPTklBIDogMSA6IDk0NTEuMAorIElQRUlST1MgOiAxIDogOTIwMy4wCisgVEhFU1NBTElBIDogMSA6IDEzOTI5LjAKKyBWT1JFSU8gQUlHQUlPIDogMSA6IDM4MzYuMAorIElPTklBIE5JU0lBIDogMSA6IDIzMDcuMAorIFNURVJFQSBFTExBREEgOiAxIDogMTU2NTMuMAorIERZVElLSSBFTExBREEgOiAxIDogMTEzMzcuMAorIEFUVElLSSA6IDEgOiAzODA4LjAKKyBQRUxPUE9OTklTT1MgOiAxIDogMTU1NDkuMAorIE5PVElPIEFJR0FJTyA6IDEgOiA1Mjc3LjAKKyBLUklUSSA6IDEgOiA4MzM2LjAKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL0dSRUVDRV9QT1BVTEFUSU9OLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL0dSRUVDRV9QT1BVTEFUSU9OLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMDRlODE3Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvR1JFRUNFX1BPUFVMQVRJT04udHh0CkBAIC0wLDAgKzEsMTMgQEAKKyBBTkFUT0xJS0kgTUFLRURPTklBIDogMSA6IDU3MDMwMAorIEtFTlRSSUtJIE1BS0VET05JQSA6IDEgOiAxNzM3NjAwCisgRFlUSUtJIE1BS0VET05JQSA6IDEgOiAyOTI4MDAKKyBJUEVJUk9TIDogMSA6IDMzOTIwMAorIFRIRVNTQUxJQSA6IDEgOiA3MzEyMDAKKyBWT1JFSU8gQUlHQUlPIDogMSA6IDE5ODIwMAorIElPTklBIE5JU0lBIDogMSA6IDE5MTAwMAorIFNURVJFQSBFTExBREEgOiAxIDogNTc4OTAwCisgRFlUSUtJIEVMTEFEQSA6IDEgOiA3MDIwMDAKKyBBVFRJS0kgOiAxIDogMzgwNjAwMAorIFBFTE9QT05OSVNPUyA6IDEgOiA2MDU3MDAKKyBOT1RJTyBBSUdBSU8gOiAxIDogMjU3NTAwCisgS1JJVEkgOiAxIDogNTM3MDAwCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9HVUFURU1BTEFfQVJFQS50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9HVUFURU1BTEFfQVJFQS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWUyYTU4NgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL0dVQVRFTUFMQV9BUkVBLnR4dApAQCAtMCwwICsxIEBACitHVUFURU1BTEEgOiAwIDogMTA4ODg5CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9HVUFURU1BTEFfUE9QVUxBVElPTi50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9HVUFURU1BTEFfUE9QVUxBVElPTi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjVjMDViYQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL0dVQVRFTUFMQV9QT1BVTEFUSU9OLnR4dApAQCAtMCwwICsxIEBACitHVUFURU1BTEEgOiAwIDogMTEyMzcxOTYKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL0dVSU5FQSBCSVNTQVVfQVJFQS50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9HVUlORUEgQklTU0FVX0FSRUEudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVjMTJmNzMKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9HVUlORUEgQklTU0FVX0FSRUEudHh0CkBAIC0wLDAgKzEsNzUgQEAKK0dVSU5FQSBCSVNTQVUJOgkwCToJMTI5ODYuNjI1CitCQUZBVEEJOgkxCToJMjMyMy4zNgorT0lPCToJMQk6CTIwOTMuMDA5CitDQUNIRVUJOgkxCToJMTkzMS4yMjQKK0JJU1NBVQk6CTEJOgk1Ni45NjQKK1RPTUJBTEkJOgkxCToJMTI1My4wNTIKK0JPTEFNQQk6CTEJOgk2MDcuMzIzCitHQUJVCToJMQk6CTM0ODQuNDc1CitCSU9NQk8JOgkxCToJMjQ5LjQ3NgorUVVJTkFSQQk6CTEJOgk5ODcuNzQyCitDT05UVUJPRUwJOgkxCToJNTMwLjA3Mzg2CitDQVJBVkVMQSAoVU5PKQk6CTEJOgkxNi43NzU1OTgKK1NPTkFDTwk6CTEJOgkzMDYuNzYxNTgzCitNQU5TQUJBCToJMQk6CTQ2OC4xMzU2OTEKK0NBUkFWRUxBIChVTk8pCToJMQk6CTUzLjk4NDQxOQorQ0FSQVZFTEEgKFVOTykJOgkxCToJMTkuMjQ1Mzk0CitGVUxBQ1VOREEJOgkxCToJMjY3LjY1NjYwMgorUElSQURBCToJMQk6CTM4MS44MTUxMzUKK1RJVEUJOgkxCToJMjIxLjYzNTQ0NworR0FMT01BUk8JOgkxCToJMzQwLjk4Mzc1NgorQkFGQVRBCToJMQk6CTI0MS43Nzk5MjUKK0JVQkFRVUUJOgkxCToJNDIuNjM5MDM5CitCVUJBUVVFCToJMQk6CTQ1LjIyMzQxOQorTkhBQ1JBCToJMQk6CTI1NS4wMTcyNjgKK0ZBUklNCToJMQk6CTYwNi4yMDIxNTEKK0NBVElPCToJMQk6CTMxOS4yMTE2ODUKK0JPTEFNQQk6CTEJOgkzOS42Nzc3NTMKK0dBQlUJOgkxCToJMTA4MC45NjkwNzUKK1RJVEUJOgkxCToJMy43ODc2NDQKK1BSQUJJUwk6CTEJOgk0OC44NjgzNTIKK1FVSU5IQU1FTAk6CTEJOgkxNDUuNTE1NzA1CitCVUJBUVVFCToJMQk6CTI4LjAwNTc3MQorQkVEQU5EQQk6CTEJOgkxOC43NDQ4ODUKK1BJQ0hFCToJMQk6CTc1MS4wMDMxNzgKK0JVQkFRVUUJOgkxCToJNC4zNzE5ODMKK0NBSU8JOgkxCToJNDIuNTE2MDkKK0dBTUFNVU5ETwk6CTEJOgk0MDQuNTI5MjkyCitDQUlPCToJMQk6CTIuNTE4MTA4CitCT0UJOgkxCToJOTYzLjkyNjAyOAorQ0FSQVZFTEEgKFVOTykJOgkxCToJMS40ODM0NTMKK0JVQkEJOgkxCToJMjcxLjExODkwMgorQ0FOR0hVTkdPCToJMQk6CTI2MC4wNjA5MjUKK0JVQkFRVUUJOgkxCToJMi4zMDYyOAorQlVMQQk6CTEJOgkyNjIuNzQ5NTQ2CitCSVNTQVUJOgkxCToJNTYuNDE0NTU3CitCVUJBUVVFCToJMQk6CTUuODAxNDM4CitDQVJBVkVMQSAoVU5PKQk6CTEJOgkyLjMyMzcwNAorQlVCQVFVRQk6CTEJOgkxMS40MjI2NjQKK0NBTkdIVU5HTwk6CTEJOgkxLjgxNDQzMworU0FGSU0JOgkxCToJNTQuMzg3ODUzCitDQVJBVkVMQSAoVU5PKQk6CTEJOgkxLjM1MDg2NAorQ0FSQVZFTEEgKFVOTykJOgkxCToJNi4xMDY1MTcKK0JFREFOREEJOgkxCToJMzMzLjM2MDM5NworQ0FSQVZFTEEgKFVOTykJOgkxCToJMzMuMDc3OTk0CitCVUJBUVVFCToJMQk6CTM3LjE4NzgyCitDQVJBVkVMQSAoVU5PKQk6CTEJOgk0Mi4yMzYwNworQ0FDSEVVCToJMQk6CTM5MS43MTc3OTcKK0JVQkFRVUUJOgkxCToJMTE1Ljc1Njk3NworQk9MQU1BCToJMQk6CTE1LjkwMTA5MgorQ0FJTwk6CTEJOgk5MS41NjQ4MzkKK0NBUkFWRUxBIChVTk8pCToJMQk6CTguNDQyMTY3CitTQU8gRE9NSU5HT1MJOgkxCToJNDI4Ljg5OTkwNAorTUFOU09BCToJMQk6CTQ1Ni44MzE4ODQKK0JJU1NPUkEJOgkxCToJMzA2LjgyMjAwNgorQ0FSQVZFTEEgKFVOTykJOgkxCToJMS41OTI2OTEKK0JBTUJBRElOQ0EJOgkxCToJMzE4Ljg0NTIwMgorQ0FSQVZFTEEgKFVOTykJOgkxCToJMTMuNzM0ODIyCitDQUlPCToJMQk6CTY4LjI4OTAwNAorQ0FSQVZFTEEgKFVOTykJOgkxCToJNTIuMjkyMTgyCitCVUJBUVVFCToJMQk6CTEuMDUyMzc1CitRVUVCTwk6CTEJOgkzNzIuNjIwOTM4CitDQUNJTkUJOgkxCToJMjA3LjM0ODg3NQorRU1QQURBCToJMQk6CTIyMS42NTkzMjIKK1hJVE9MRQk6CTEJOgk0ODcuMTQ3OTY2CitCSUdFTkUJOgkxCToJMzgxLjA5MzM1MwpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvR1VJTkVBIEJJU1NBVV9QT1BVTEFUSU9OLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL0dVSU5FQSBCSVNTQVVfUE9QVUxBVElPTi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmVlNWQ1NQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL0dVSU5FQSBCSVNTQVVfUE9QVUxBVElPTi50eHQKQEAgLTAsMCArMSw2MSBAQAorR1VJTkVBIEJJU1NBVQk6CTAJOgkxMDg1Nzc3CitCQUZBVEEJOgkxCToJMTYxNzI2CitCSU9NQk8JOgkxCToJNzg2OTkKK0JJU1NBVQk6CTEJOgkxNTIyMjMKK0JPTEFNQQk6CTEJOgkzNTg4MQorQ0FDSEVVCToJMQk6CTE4MTUxMgorR0FCVQk6CTEJOgkxNDUzOTUKK09JTwk6CTEJOgkyMDQwMTkKK1FVSU5BUkEJOgkxCToJNDk1MjUKK1RPTUJBTEkJOgkxCToJNzY3OTcKK0ZBUklNCToJMQk6CTQwODAzCitDT05UVUJPRUwJOgkxCToJMjY5NTQKK1BJUkFEQQk6CTEJOgkyOTA3OQorUElDSEUJOgkxCToJMjkwNzkKK1NPTkFDTwk6CTEJOgkyOTA3OQorQklHRU5FCToJMQk6CTE4MTUxCitHQU1BTVVORE8JOgkxCToJMjY5NTQKK01BTlNBQkEJOgkxCToJNDA4MDMKK1NBTyBET01JTkdPUwk6CTEJOgkxODE1MQorQkFGQVRBCToJMQk6CTI2OTU0CitHQUJVCToJMQk6CTI5MDc5CitCSVNTT1JBCToJMQk6CTQwODAzCitDQUNIRVUJOgkxCToJMTgxNTEKK0JVTEEJOgkxCToJMTgxNTEKK0NBTkdIVU5HTwk6CTEJOgkxODE1MQorTkhBQ1JBCToJMQk6CTQwODAzCitNQU5TT0EJOgkxCToJNDA4MDMKK0JBTUJBRElOQ0EJOgkxCToJMjY5NTQKK0dBTE9NQVJPCToJMQk6CTI2OTU0CitCT0UJOgkxCToJMjkwNzkKK0NBSU8JOgkxCToJMTgxNTEKK1NBRklNCToJMQk6CTE1NzM5CitRVUlOSEFNRUwJOgkxCToJMTU3MzkKK0NBSU8JOgkxCToJMTgxNTEKK0ZVTEFDVU5EQQk6CTEJOgk2MTkwCitCSVNTQVUJOgkxCToJNzYxMTEKK1hJVE9MRQk6CTEJOgkyNjk1NAorQ0FOR0hVTkdPCToJMQk6CTE4MTUxCitDQUlPCToJMQk6CTE4MTUxCitUSVRFCToJMQk6CTYxOTAKK1FVSU5IQU1FTAk6CTEJOgkxNTczOQorVElURQk6CTEJOgk2MTkwCitUSVRFCToJMQk6CTYxOTAKK1BSQUJJUwk6CTEJOgkxNTczOQorQklTU0FVCToJMQk6CTc2MTExCitDQUlPCToJMQk6CTE4MTUxCitCVUJBCToJMQk6CTYxOTAKK1FVSU5IQU1FTAk6CTEJOgkxNTczOQorVElURQk6CTEJOgk2MTkwCitRVUVCTwk6CTEJOgk4NTMzCitFTVBBREEJOgkxCToJNjE5MAorQk9MQU1BCToJMQk6CTEwNTUKK0NBUkFWRUxBIChVTk8pCToJMQk6CTEwNTUKK0VNUEFEQQk6CTEJOgk2MTkwCitCT0xBTUEJOgkxCToJMTA1NQorQ0FUSU8JOgkxCToJODUzMworQkVEQU5EQQk6CTEJOgk4NTMzCitDQUNJTkUJOgkxCToJODUzMworQ0FUSU8JOgkxCToJODUzMworQlVCQVFVRQk6CTEJOgkxMDU1CitDQUNJTkUJOgkxCToJODUzMwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL0dVSU5FQV9BUkVBLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL0dVSU5FQV9BUkVBLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMjAyMmJiCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvR1VJTkVBX0FSRUEudHh0CkBAIC0wLDAgKzEsOSBAQAorR3VpbmVhIDogMCA6IDI0NTg1NworQm9rZQk6CTEJOgkzMTE4NgkKK0NvbmFrcnkJOgkxCToJCTQ1MAorRmFyYW5haAk6CTEJOgkJMzU1ODEKK0thbmthbgk6CTEJOgkJNzIxNDUKK0tpbmRpYQk6CTEJOgkJMjg4NzMKK0xhYmUJOgkxCToJCTIyODY5CitNYW1vdQk6CTEJOgkJMTcwNzQgIAkKK056ZXJla29yZQk6CTEJOgkJMzc2NTgKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL0dVSU5FQV9QT1BVTEFUSU9OLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL0dVSU5FQV9QT1BVTEFUSU9OLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NGYzZTZlCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvR1VJTkVBX1BPUFVMQVRJT04udHh0CkBAIC0wLDAgKzEsOSBAQAorR3VpbmVhIDogMCA6IDk2OTAyMjIKK0Jva2UJOgkxCToJCTc2MDExOQorQ29uYWtyeQk6CTEJOgkJMTA5MjkzNgorRmFyYW5haAk6CTEJOgkJNjAyODQ1CitLYW5rYW4JOgkxCToJCTEwMTE2NDQKK0tpbmRpYQk6CTEJOgkJOTI4MzEyCitMYWJlCToJMQk6CQk3OTk1NDUKK01hbW91CToJMQk6CQk2MTIyMTgKK056ZXJla29yZQk6CTEJOgkJMTM0ODc4NwpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvR1VZQU5BX0FSRUEudHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvR1VZQU5BX0FSRUEudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmExZDllZmUKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9HVVlBTkFfQVJFQS50eHQKQEAgLTAsMCArMSwxMiBAQAorR3V5YW5hCToJMAk6CTIxNDk3MAorQmFyaW1hL1dhaW5pICAJOgkxCToJMjAzMzAKK0N1eXVuaS9NYXphcnVuaSAJOgkxCToJNDcxOTMKK0RlbWVyYXJhL01haGFpY2EgCToJMQk6CTIyMzIKK0Vhc3QgQmVyYmljZS9Db3JlbnR5bmUgCToJMQk6CTM2MjM5CitFc3NlcXVpYm8gSS4vV2VzdCBELiAJOgkxCToJMzc1NAorTWFoYWljYS9CZXJiaWNlIAk6CTEJOgk0MTY4CitQb21lcm9vbi9TdXBlbmFhbSAJOgkxCToJNjE5MworUG90YXJvL1NpcGFydW5pIAk6CTEJOgkyMDA0MworVXBwZXIgRGVtZXJhcmEvQmVyYmljZSAJOgkxCToJMTcwNzQKK1VwcGVyIFRha3V0dS9VLkVzc2VxdWlibyAJOgkxCToJNTc3NjYKKwpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvR1VZQU5BX1BPUFVMQVRJT04udHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvR1VZQU5BX1BPUFVMQVRJT04udHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUzNjFhNDIKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9HVVlBTkFfUE9QVUxBVElPTi50eHQKQEAgLTAsMCArMSwxMSBAQAorR3V5YW5hCToJMAk6CTc2NzI0NQorQmFyaW1hL1dhaW5pICAJOgkxCToJMTgzMDIKK0N1eXVuaS9NYXphcnVuaSAJOgkxCToJMTQ2ODIKK0RlbWVyYXJhL01haGFpY2EgCToJMQk6CTI5NDY5MAorRWFzdCBCZXJiaWNlL0NvcmVudHluZSAJOgkxCToJMTQxNDQ1CitFc3NlcXVpYm8gSS4vV2VzdCBELiAJOgkxCToJOTUyMjAKK01haGFpY2EvQmVyYmljZSAJOgkxCToJNTEyNzcKK1BvbWVyb29uL1N1cGVuYWFtIAk6CTEJOgk0MzE5NAorUG90YXJvL1NpcGFydW5pIAk6CTEJOgk1NTc0CitVcHBlciBEZW1lcmFyYS9CZXJiaWNlIAk6CTEJOgkzOTI3MgorVXBwZXIgVGFrdXR1L1UuRXNzZXF1aWJvIAk6CTEJOgkxNDk0NwpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvSE9ORFVSQVNfQVJFQS50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9IT05EVVJBU19BUkVBLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZmVjZGE3Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvSE9ORFVSQVNfQVJFQS50eHQKQEAgLTAsMCArMSBAQAorSE9ORFVSQVMgOiAwIDogMTEyNDkyCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9IT05EVVJBU19QT1BVTEFUSU9OLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL0hPTkRVUkFTX1BPUFVMQVRJT04udHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYwMjU4YmQKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9IT05EVVJBU19QT1BVTEFUSU9OLnR4dApAQCAtMCwwICsxIEBACitIT05EVVJBUyA6IDAgOiA2NTM1MzQ0CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9IVU5HQVJZX0FSRUEudHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvSFVOR0FSWV9BUkVBLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYmNkNDYxCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvSFVOR0FSWV9BUkVBLnR4dApAQCAtMCwwICsxLDE5IEBACisgQm9yc29kLUFiYXVqLVplbXBsZW4gOiAxIDogNzI0Ny4wCisgU3phYm9sY3MtU3phdGFyLUJlcmVnIDogMSA6IDU5MzcuMAorIE5vZ3JhZCA6IDEgOiAyNTQ0LjAKKyBIZXZlcyA6IDEgOiAzNjM3LjAKKyBQZXN0IDogMSA6IDYzOTQuMAorIEd5lHItTW9zb24tU29wcm9uIDogMSA6IDQwMTIuMAorIEhhamR1LUJpaGFyIDogMSA6IDYyMTEuMAorIEtvbWFyb20tRXN6dGVyZ29tIDogMSA6IDIyNTEuMAorIEphc3otTmFneWt1bi1Tem9sbm9rIDogMSA6IDU2MDcuMAorIEZlamVyIDogMSA6IDQzNzMuMAorIFZlc3pwcmVtIDogMSA6IDQ2ODkuMAorIFZhcyA6IDEgOiAzMzM2LjAKKyBCZWtlcyA6IDEgOiA1NjMxLjAKKyBCYWNzLUtpc2t1biA6IDEgOiA4MzYyLjAKKyBaYWxhIDogMSA6IDM3ODQuMAorIFNvbW9neSA6IDEgOiA2MDM2LjAKKyBUb2xuYSA6IDEgOiAzNzAzLjAKKyBDc29uZ3JhZCA6IDEgOiA0MjYzLjAKKyBCYXJhbnlhIDogMSA6IDQ0ODcuMApkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvSFVOR0FSWV9QT1BVTEFUSU9OLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL0hVTkdBUllfUE9QVUxBVElPTi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjI3MTQyZAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL0hVTkdBUllfUE9QVUxBVElPTi50eHQKQEAgLTAsMCArMSwxOSBAQAorIEJvcnNvZC1BYmF1ai1aZW1wbGVuIDogMSA6IDc2MTk2MworIFN6YWJvbGNzLVN6YXRhci1CZXJlZyA6IDEgOiA1NzIzMDEKKyBOb2dyYWQgOiAxIDogMjI3MTM3CisgSGV2ZXMgOiAxIDogMzM0NDA4CisgUGVzdCA6IDEgOiA5NDk3NDkKKyBHeZRyLU1vc29uLVNvcHJvbiA6IDEgOiA0MjQ0MzkKKyBIYWpkdS1CaWhhciA6IDEgOiA1NDg3MjgKKyBLb21hcm9tLUVzenRlcmdvbSA6IDEgOiAzMTUyMDgKKyBKYXN6LU5hZ3lrdW4tU3pvbG5vayA6IDEgOiA0MjY0OTEKKyBGZWplciA6IDEgOiA0MjA2MjgKKyBWZXN6cHJlbSA6IDEgOiAzODIxNTMKKyBWYXMgOiAxIDogMjc1OTQ0CisgQmVrZXMgOiAxIDogNDExODg3CisgQmFjcy1LaXNrdW4gOiAxIDogNTQ0NzQ4CisgWmFsYSA6IDEgOiAzMDYzOTgKKyBTb21vZ3kgOiAxIDogMzQ0NzA4CisgVG9sbmEgOiAxIDogMjUzNjc1CisgQ3NvbmdyYWQgOiAxIDogNDM4ODQyCisgQmFyYW55YSA6IDEgOiA0MTg2NDIKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL0lDRUxBTkRfQVJFQS50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9JQ0VMQU5EX0FSRUEudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlkYmNlNzUKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9JQ0VMQU5EX0FSRUEudHh0CkBAIC0wLDAgKzEgQEAKKyBJc2xhbmQgOiAxIDogMTAzMDAwLjAKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL0lDRUxBTkRfUE9QVUxBVElPTi50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9JQ0VMQU5EX1BPUFVMQVRJT04udHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkxZjIwYWYKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9JQ0VMQU5EX1BPUFVMQVRJT04udHh0CkBAIC0wLDAgKzEgQEAKKyBJc2xhbmQgOiAxIDogMjUyNzQ2CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9JTkRJQV9BUkVBLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL0lORElBX0FSRUEudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNhNjQ0ZTgKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9JTkRJQV9BUkVBLnR4dApAQCAtMCwwICsxLDM4IEBACitJbmRpYQk6CTAJOgkzMjg3NTkwCisgSmFtbXUgYW5kIEthc2htaXIgIAk6CTEJOgkxMDEzODcKK0hpbWFjaGFsIFByYWRlc2ggCToJMQk6CTU1NjczCitQdW5qYWIgCToJMQk6CTUwMzYyCitDaGFuZGlnYXJoCToJMQk6CTExNAorVXR0YXJhbmNoYWwgCToJMQk6CTUzNDgzCitIYXJ5YW5hIAk6CTEJOgk0NDIxMgorRGVsaGkJOgkxCToJMTQ4MworUmFqYXN0aGFuIAk6CTEJOgkzNDIyMzkKK1V0dGFyIFByYWRlc2ggCToJMQk6CTI0MDkyOAorQmloYXIgCToJMQk6CTk0MTYzCitTaWtraW0gCToJMQk6CTcwOTYKK0FydW5hY2hhbCBQcmFkZXNoIAk6CTEJOgk4Mzc0MworTmFnYWxhbmQgCToJMQk6CTE2NTc5CitNYW5pcHVyIAk6CTEJOgkyMjMyNworTWl6b3JhbSAJOgkxCToJMjEwODEKK1RyaXB1cmEgCToJMQk6CTEwNDg2CitNZWdoYWxheWEgCToJMQk6CTIyNDI5CitBc3NhbSAJOgkxCToJNzg0MzgKK1dlc3QgQmVuZ2FsIAk6CTEJOgk4ODc1MgorSmhhcmtoYW5kIAk6CTEJOgk3OTcxNAorT3Jpc3NhIAk6CTEJOgkxNTU3MDcKK0NoaGF0dGlzZ2FyaCAJOgkxCToJMTM1MTkxCitNYWRoeWEgUHJhZGVzaCAJOgkxCToJMzA4MjQ1CitHdWphcmF0IAk6CTEJOgkxOTYwMjIKK0RhbWFuIGFuZCBEaXUJOgkxCToJMTEyCitEYWRyYSBhbmQgTmFnYXIgSGF2ZWxpCToJMQk6CTQ5MQorTWFoYXJhc2h0cmEgCToJMQk6CTMwNzcxMworQW5kaHJhIFByYWRlc2ggCToJMQk6CTI3NTA2OQorS2FybmF0YWthIAk6CTEJOgkxOTE3OTEKK0dvYSAJOgkxCToJMzcwMgorTGFrc2hhZHdlZXAJOgkxCToJMzIKK0tlcmFsYSAJOgkxCToJMzg4NjMKK1RhbWlsIE5hZHUgCToJMQk6CTEzMDA1OAorUG9uZGljaGVycnkgCToJMQk6CTQ4MAorQW5kYW1hbiAmIE5pY29iYXIJOgkxCToJODI0OQorCisKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL0lORElBX1BPUFVMQVRJT04udHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvSU5ESUFfUE9QVUxBVElPTi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzg2MzE3YQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL0lORElBX1BPUFVMQVRJT04udHh0CkBAIC0wLDAgKzEsMzYgQEAKK0luZGlhCToJMAk6CTEwOTUzNTE5OTUKKyBKYW1tdSBhbmQgS2FzaG1pciAgCToJMQk6CTEwOTQxMDAwCitIaW1hY2hhbCBQcmFkZXNoIAk6CTEJOgk2NDU1MDAwCitQdW5qYWIgCToJMQk6CTI2MDU5MDAwCitDaGFuZGlnYXJoCToJMQk6CTExMDMwMDAKK1V0dGFyYW5jaGFsIAk6CTEJOgk5MjE5MDAwCitIYXJ5YW5hIAk6CTEJOgkyMzMxNDAwMAorRGVsaGkJOgkxCToJMTYwMjEwMDAKK1JhamFzdGhhbiAJOgkxCToJNjIyNzYwMDAKK1V0dGFyIFByYWRlc2ggCToJMQk6CTE4MzI4MjAwMAorQmloYXIgCToJMQk6CTkwNzUyMDAwCitTaWtraW0gCToJMQk6CTU3NjAwMAorQXJ1bmFjaGFsIFByYWRlc2ggCToJMQk6CTExNjkwMDAKK05hZ2FsYW5kIAk6CTEJOgkyMTE5MDAwCitNYW5pcHVyIAk6CTEJOgkyMzA4MDAwCitNaXpvcmFtIAk6CTEJOgk5NDYwMDAKK1RyaXB1cmEgCToJMQk6CTM0MDcwMDAKK01lZ2hhbGF5YSAJOgkxCToJMjQ3MDAwMAorQXNzYW0gCToJMQk6CTI4NjY1MDAwCitXZXN0IEJlbmdhbCAJOgkxCToJODUyMTYwMDAKK0poYXJraGFuZCAJOgkxCToJMjkyOTkwMDAKK09yaXNzYSAJOgkxCToJMzg4ODcwMDAKK0NoaGF0dGlzZ2FyaCAJOgkxCToJMjI1OTQwMDAKK01hZGh5YSBQcmFkZXNoIAk6CTEJOgk2NjM5MDAwMAorR3VqYXJhdCAJOgkxCToJNTQ5NzkwMDAKK0RhbWFuIGFuZCBEaXUJOgkxCToJMjE2MDAwCitEYWRyYSBhbmQgTmFnYXIgSGF2ZWxpCToJMQk6CTI2NjAwMAorTWFoYXJhc2h0cmEgCToJMQk6CTEwNDgwNDAwMAorQW5kaHJhIFByYWRlc2ggCToJMQk6CTgwNzEyMDAwCitLYXJuYXRha2EgCToJMQk6CTU2MjU4MDAwCitHb2EgCToJMQk6CTE0OTIwMDAKK0xha3NoYWR3ZWVwCToJMQk6CTcyMDAwCitLZXJhbGEgCToJMQk6CTMzMjY1MDAwCitUYW1pbCBOYWR1IAk6CTEJOgk2NTEzNTAwMAorUG9uZGljaGVycnkgCToJMQk6CTEwOTgwMDAKK0FuZGFtYW4gJiBOaWNvYmFyCToJMQk6CTQxOTAwMApkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvSU5ET05FU0lBX0FSRUEudHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvSU5ET05FU0lBX0FSRUEudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdjOGU0ODMKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9JTkRPTkVTSUFfQVJFQS50eHQKQEAgLTAsMCArMSwzNSBAQAorSW5kb25lc2lhCToJMAk6CTE5MTk0NDAKK0FjZWggIFtOYW5nZ3JvZSBBY2VoIERhcnVzc2FsYW1dICAgCToJMQk6CTU1MzkwCisgU3VtYXRlcmEgVXRhcmEgCToJMQk6CTcxNjgwCitTdW1hdGVyYSBCYXJhdCAJOgkxCToJNDIyOTcKKyBSaWF1IAk6CTEJOgk5NDU2MQorIEphbWJpIAk6CTEJOgk1MzQzNgorIFN1bWF0ZXJhIFNlbGF0YW4gCToJMQk6CTc0Nzk1CisgQmVuZ2t1bHUgCToJMQk6CTE5Nzg5CisgTGFtcHVuZyAJOgkxCToJMzUzODUKKyBLZXB1bGF1YW4gQmFuZ2thIEJlbGl0dW5nIAk6CTEJOgkzNDQ1OQorIEtlcHVsYXVhbiBSaWF1IAk6CTEJOgkwCitES0kgSmFrYXJ0YSAJOgkxCToJNjY0CisgSmF3YSBCYXJhdCAJOgkxCToJMzQ4MTcKKyBKYXdhIFRlbmdhaCAJOgkxCToJMzI1NDQKKyBELkkgWW9neWFrYXJ0YSAJOgkxCToJMzE4NgorIEphd2EgVGltdXIgCToJMQk6CTQ3OTIzCisgQmFudGVuIAk6CTEJOgk4ODAxCisgQmFsaSAJOgkxCToJNTYzMworIE51c2EgVGVuZ2dhcmEgQmFyYXQgCToJMQk6CTIwMTUzCisgTnVzYSBUZW5nZ2FyYSBUaW11ciAJOgkxCToJNDczNTAKKyBUaW1vciBUaW11ciA6IDEgOiAzMDc3NworIEthbGltYW50YW4gQmFyYXQgCToJMQk6CTE0NjgwNworIEthbGltYW50YW4gVGVuZ2FoIAk6CTEJOgkxNTM1NjQKKyBLYWxpbWFudGFuIFNlbGF0YW4gCToJMQk6CTM2NTM1CisgS2FsaW1hbnRhbiBUaW11ciAJOgkxCToJMjEwOTg1CisgU3VsYXdlc2kgVXRhcmEgCToJMQk6CTE1OTI2CisgU3VsYXdlc2kgVGVuZ2FoIAk6CTEJOgk2MzY4OQorIFN1bGF3ZXNpIFNlbGF0YW4gCToJMQk6CTYyNjQxCisgU3VsYXdlc2kgVGVuZ2dhcmEgCToJMQk6CTM4MTQwCisgR29yb250YWxvIAk6CTEJOgkxMTU2MgorIFN1bGF3ZXNpIEJhcmF0IAk6CTEJOgkxNjc5NgorIE1hbHVrdSAJOgkxCToJNTE4MzAKKyBNYWx1a3UgVXRhcmEgCToJMQk6CTI2MDQxCisgSXJpYW4gSmF5YSAJOgkxCToJNDIxOTgxCisgUGFwdWEgCToJMQk6CTQyMTk4MQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvSU5ET05FU0lBX1BPUFVMQVRJT04udHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvSU5ET05FU0lBX1BPUFVMQVRJT04udHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA3YTA1MDMKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9JTkRPTkVTSUFfUE9QVUxBVElPTi50eHQKQEAgLTAsMCArMSwzNSBAQAorSW5kb25lc2lhCToJMAk6CTI0NTQ1MjczOQorIEFjZWggW05hbmdncm9lIEFjZWggRGFydXNzYWxhbV0gICAJOgkxCToJNDAzNzkwMAorIFN1bWF0ZXJhIFV0YXJhIAk6CTEJOgkxMjQ1MjgwMAorU3VtYXRlcmEgQmFyYXQgCToJMQk6CTQ0MDIxMDAKKyBSaWF1IAk6CTEJOgk2MTA4NDAwCisgSmFtYmkgCToJMQk6CTI2NTczMDAKKyBTdW1hdGVyYSBTZWxhdGFuIAk6CTEJOgk3NTI2ODAwCisgQmVuZ2t1bHUgCToJMQk6CTE3NDQyMDAKKyBMYW1wdW5nIAk6CTEJOgk3MjkxMzAwCisgS2VwdWxhdWFuIEJhbmdrYSBCZWxpdHVuZyAJOgkxCToJOTcxNTAwCisgS2VwdWxhdWFuIFJpYXUgCToJMQk6CTAKK0RLSSBKYWthcnRhIAk6CTEJOgk4Njk5NjAwCisgSmF3YSBCYXJhdCAJOgkxCToJMzkxNDA4MTIKKyBKYXdhIFRlbmdhaCAJOgkxCToJMzE4ODcyMDAKKyBELkkgWW9neWFrYXJ0YSAJOgkxCToJMzI1NzAwMAorIEphd2EgVGltdXIgCToJMQk6CTM1NTUwNDAwCisgQmFudGVuIAk6CTEJOgk5MzA5MDAwCisgQmFsaSAJOgkxCToJMzM3ODUwMAorIE51c2EgVGVuZ2dhcmEgQmFyYXQgCToJMQk6CTQzNTU1MDAKKyBOdXNhIFRlbmdnYXJhIFRpbXVyIAk6CTEJOgk0MTI3MzAwCisgVGltb3IgVGltdXIgOiAxIDogODAwMDAwCisgS2FsaW1hbnRhbiBCYXJhdCAJOgkxCToJNDM5NDMwMAorIEthbGltYW50YW4gVGVuZ2FoIAk6CTEJOgkyMTM3OTAwCisgS2FsaW1hbnRhbiBTZWxhdGFuIAk6CTEJOgkzMjQwMTAwCisgS2FsaW1hbnRhbiBUaW11ciAJOgkxCToJMjgxMDkwMAorIFN1bGF3ZXNpIFV0YXJhIAk6CTEJOgkyMTQxOTAwCisgU3VsYXdlc2kgVGVuZ2FoIAk6CTEJOgkyNDA0MDAwCisgU3VsYXdlc2kgU2VsYXRhbiAJOgkxCToJODQ5MzcwMAorIFN1bGF3ZXNpIFRlbmdnYXJhIAk6CTEJOgkyMDg1OTAwCisgR29yb250YWxvIAk6CTEJOgk4NzIyMDAKKyBTdWxhd2VzaSBCYXJhdCAJOgkxCToJMAorIE1hbHVrdSAJOgkxCToJMTE3MjAwMAorIE1hbHVrdSBVdGFyYSAJOgkxCToJNzgwMzAwCisgSXJpYW4gSmF5YSAJOgkxCToJNzAxNDM1CisgUGFwdWEgCToJMQk6CTE5NDUwNTQKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL0lSQUtfQVJFQS50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9JUkFLX0FSRUEudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJhZWI3OTYKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9JUkFLX0FSRUEudHh0CkBAIC0wLDAgKzEsMTkgQEAKK2lyYXEJOgkwCToJNDM3MDcyCithbCBhbmJhcgk6CTEJOgkxMzc4MDgKK2FsLWJhc3JhaAk6CTEJOgkxOTA3MAorQWwtbXV0aGFubmlhCToJMQk6CTUxNzQwCitBbC1RYWRpc2l5YWgJOgkxCToJODE1MworYW4tbmFqYWYJOgkxCToJMjg4MjQKK0FyYmlsCToJMQk6CTE1MDc0CitTdWxheW1hbml5YWgJOgkxCToJMTcwMjMKK0tpcmt1awk6CTEJOgk5Njc5CitCYWJpbCBbQmFieWxvbl0JOgkxCToJNTYwMworQmFnaGRhZAk6CTEJOgk0MDcxCitEaWhvawk6CTEJOgk2NTUzCitOYXNpcml5YWgJOgkxCToJMTI5MDAKK0RpeWFsYQk6CTEJOgkxNzY4NQorS2FyYmFsYQk6CTEJOgk1MDM0CitNaXNhbgk6CTEJOgkxNjA3MgorTmVpbmV2YQk6CTEJOgkzNzMyMworU2FsYWh1ZGRpbgk6CTEJOgkyNDM2MworV2FzaXQJOgkxCToJMTcxNTMKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL0lSQUtfUE9QVUxBVElPTi50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9JUkFLX1BPUFVMQVRJT04udHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFlNjRmNDIKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9JUkFLX1BPUFVMQVRJT04udHh0CkBAIC0wLDAgKzEsMTkgQEAKK2lyYXEJOgkwCToJMjY3ODMzODMKK2FsIGFuYmFyCToJMQk6CTEyMzAxNDAKK2FsLWJhc3JhaAk6CTEJOgkxODgwMTc2CitBbC1tdXRoYW5uaWEJOgkxCToJNTM3NjU4CitBbC1RYWRpc2l5YWgJOgkxCToJODg2NTk0Cithbi1uYWphZgk6CTEJOgk5Mjk5OTUKK0FyYmlsCToJMQk6CTEzMTM3MTkKK1N1bGF5bWFuaXlhaAk6CTEJOgkxNTQ2NjUzCitLaXJrdWsJOgkxCToJODQ4MDA3CitCYWJpbCBbQmFieWxvbl0JOgkxCToJMTM4NTc4MgorQmFnaGRhZAk6CTEJOgk2MDI0Mjk5CitEaWhvawk6CTEJOgk3ODI0ODkKK05hc2lyaXlhaAk6CTEJOgkxNDcyMDk4CitEaXlhbGEJOgkxCToJMTIyNDM1OAorS2FyYmFsYQk6CTEJOgk3MjM4NDAKK01pc2FuCToJMQk6CTgwMzIyNQorTmVpbmV2YQk6CTEJOgkyNDUzMTE2CitTYWxhaHVkZGluCToJMQk6CTk0MjMxNAorV2FzaXQJOgkxCToJOTEzMzg2CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9JUkFOX0FSRUEudHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvSVJBTl9BUkVBLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMTdlNWVkCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvSVJBTl9BUkVBLnR4dApAQCAtMCwwICsxLDMzIEBACitJcmFuCToJMAk6CTE2NDgwMDAKK0Jha2h0YXJhbiA6IDEgOiAyNDQzNAorTm9ydGggYW5kIFNvdXRoIEhvcmF6YW4gW0hvcmFzYW5dIDogMSA6IDk3OTg5CitBcmRlYmlsCToJMQk6CTE3ODAwCitCdXNoZWhyCToJMQk6CTIyNzQzCitDaGFoYXJtYWhhbCBhbmQgQmFraHRpYXIJOgkxCToJMTYzMzIKK2Vhc3QgYXphcmJheWVqYW4JOgkxCToJNDU2NTAKK0VzZmFoYW4JOgkxCToJMTA3MDI5CitGYXJzCToJMQk6CTEyMjYwOAorR2lsYW4JOgkxCToJMTQwNDIKK0dvbGVzdGFuCToJMQk6CTIwMTk1CitIYW1hZGFuCToJMQk6CTE5MzY4CitIb3Jtb3pnYW4JOgkxCToJNzA2NjkKK0lsYW0JOgkxCToJMjAxMzMKK0tlcm1hbgk6CTEJOgkxODA4MzYKK0tlcm1hbnNoYWgJOgkxCToJMjQ5OTgKK0todXplc3Rhbgk6CTEJOgk2NDA1NQorS29oZ2lsdXllaCAmIEJveWVyIGFobWFkIAk6CTEJOgkxNTUwNAorS29yZGVzdGFuCToJMQk6CTI5MTM3CitMb3Jlc3Rhbgk6CTEJOgkyODI5NAorTWFya2F6aQk6CTEJOgkyOTEzMAorTWF6YW5kYXJhbgk6CTEJOgkyMzcwMQorTm9ydGggS2hvcmFzYW4JOgkxCToJMjg0MzQKK0tob3Jhc2FuLWUtUmF6YXZpCToJMQk6CTE0NDY4MQorUWF6dmluCToJMQk6CTE1NTQ5CitRb20JOgkxCToJMTE1MjYKK1NlbW5hbgk6CTEJOgk5NzQ5MQorU2lzdGFuIGFuZCBCYWx1Y2hlc3Rhbgk6CTEJOgkxODE3ODUKK1NvdXRoIEtob3Jhc2FuCToJMQk6CTY5NTU1CitUZWhyYW4JOgkxCToJMTg4MTQKK1dlc3QgQXphcmJheWVqYW4JOgkxCToJMzc0MzcKK1lhemQJOgkxCToJMTI5Mjg1CitaYW5qYW4JOgkxCToJMjE3NzMKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL0lSQU5fUE9QVUxBVElPTi50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9JUkFOX1BPUFVMQVRJT04udHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFlYmI0ZWQKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9JUkFOX1BPUFVMQVRJT04udHh0CkBAIC0wLDAgKzEsMzMgQEAKK0lyYW4JOgkwCToJNjg2ODg0MzMKK0Jha2h0YXJhbiA6IDEgOiA2OTAwMDAKK05vcnRoIGFuZCBTb3V0aCBIb3JhemFuIFtIb3Jhc2FuXSA6IDEgOiAxMjk3MTM2CitBcmRlYmlsCToJMQk6CTEyNTc2MjQKK0J1c2hlaHIJOgkxCToJODE2MTE1CitDaGFoYXJtYWhhbCBhbmQgQmFraHRpYXIJOgkxCToJODQyMDAyCitlYXN0IGF6YXJiYXllamFuCToJMQk6CTM1MDAxODMKK0VzZmFoYW4JOgkxCToJNDQ1NDU5NQorRmFycwk6CTEJOgk0Mzg1ODY5CitHaWxhbgk6CTEJOgkyNDEwNTIzCitHb2xlc3Rhbgk6CTEJOgkxNjM3MDYzCitIYW1hZGFuCToJMQk6CTE3Mzg3NzIKK0hvcm1vemdhbgk6CTEJOgkxMzE0NjY3CitJbGFtCToJMQk6CTU0NTA5MworS2VybWFuCToJMQk6CTI0MzI5MjcKK0tlcm1hbnNoYWgJOgkxCToJMTkzODA2MAorS2h1emVzdGFuCToJMQk6CTQzNDU2MDcKK0tvaGdpbHV5ZWggJiBCb3llciBhaG1hZCAJOgkxCToJNjk1MDk5CitLb3JkZXN0YW4JOgkxCToJMTU3NDExOAorTG9yZXN0YW4JOgkxCToJMTc1ODYyOAorTWFya2F6aQk6CTEJOgkxMzYxMzk0CitNYXphbmRhcmFuCToJMQk6CTI4MTg4MzEKK05vcnRoIEtob3Jhc2FuCToJMQk6CTc4NjkxOAorS2hvcmFzYW4tZS1SYXphdmkJOgkxCToJNTIwMjc3MAorUWF6dmluCToJMQk6CTExNjY4NjEKK1FvbQk6CTEJOgkxMDY0NDU2CitTZW1uYW4JOgkxCToJNTg5NTEyCitTaXN0YW4gYW5kIEJhbHVjaGVzdGFuCToJMQk6CTIyOTAwNzYKK1NvdXRoIEtob3Jhc2FuCToJMQk6CTUxMDIxOAorVGVocmFuCToJMQk6CTEyMTUwNzQyCitXZXN0IEF6YXJiYXllamFuCToJMQk6CTI5NDk0MjYKK1lhemQJOgkxCToJOTU4MzE4CitaYW5qYW4JOgkxCToJOTcwOTQ2CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9JUkFRX0FSRUEudHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvSVJBUV9BUkVBLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lOWViOTY1Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvSVJBUV9BUkVBLnR4dApAQCAtMCwwICsxLDIwIEBACitpcmFxCToJMAk6CTQzNzA3MgorYWwgYW5iYXIJOgkxCToJMTM3ODA4CithbC1iYXNyYWgJOgkxCToJMTkwNzAKK0FsLW11dGhhbm5pYQk6CTEJOgk1MTc0MAorQWwtUWFkaXNpeWFoCToJMQk6CTgxNTMKK2FuLW5hamFmCToJMQk6CTI4ODI0CitBcmJpbAk6CTEJOgkxNTA3NAorU3VsYXltYW5peWFoCToJMQk6CTE3MDIzCitLaXJrdWsgW0F0LVRhbWltXQk6CTEJOgk5Njc5CitCYWJpbCBbQmFieWxvbl0JOgkxCToJNTYwMworQmFnaGRhZAk6CTEJOgk0MDcxCitEaWhvawk6CTEJOgk2NTUzCitOYXNpcml5YWggW0RoaS1RYXJdCToJMQk6CTEyOTAwCitEaXlhbGEJOgkxCToJMTc2ODUKK0thcmJhbGEJOgkxCToJNTAzNAorTWlzYW4JOgkxCToJMTYwNzIKK05laW5ldmEJOgkxCToJMzczMjMKK1NhbGFodWRkaW4JOgkxCToJMjQzNjMKK1dhc2l0CToJMQk6CTE3MTUzCitJUlEvU0FVIE5ldXRyYWwgWm9uZSA6IDEgOiA3MDQ0CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9JUkFRX1BPUFVMQVRJT04udHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvSVJBUV9QT1BVTEFUSU9OLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNjMxZWIyCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvSVJBUV9QT1BVTEFUSU9OLnR4dApAQCAtMCwwICsxLDIwIEBACitpcmFxCToJMAk6CTI2NzgzMzgzCitOYXNpcml5YWggW0RoaS1RYXJdCToJMQk6CTE0NzIwOTgKK0tpcmt1ayBbQXQtVGFtaW1dCToJMQk6CTg0ODAwNworQmFiaWwgW0JhYnlsb25dCToJMQk6CTEzODU3ODIKK0lSUS9TQVUgTmV1dHJhbCBab25lIDogMSA6IDAKK2FsIGFuYmFyCToJMQk6CTEyMzAxNDAKK2FsLWJhc3JhaAk6CTEJOgkxODgwMTc2CitBbC1tdXRoYW5uaWEJOgkxCToJNTM3NjU4CitBbC1RYWRpc2l5YWgJOgkxCToJODg2NTk0Cithbi1uYWphZgk6CTEJOgk5Mjk5OTUKK0FyYmlsCToJMQk6CTEzMTM3MTkKK1N1bGF5bWFuaXlhaAk6CTEJOgkxNTQ2NjUzCitCYWdoZGFkCToJMQk6CTYwMjQyOTkKK0RpaG9rCToJMQk6CTc4MjQ4OQorRGl5YWxhCToJMQk6CTEyMjQzNTgKK0thcmJhbGEJOgkxCToJNzIzODQwCitNaXNhbgk6CTEJOgk4MDMyMjUKK05laW5ldmEJOgkxCToJMjQ1MzExNgorU2FsYWh1ZGRpbgk6CTEJOgk5NDIzMTQKK1dhc2l0CToJMQk6CTkxMzM4NgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvSVJFTEFORF9BUkVBLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL0lSRUxBTkRfQVJFQS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjg2ZjBjMwotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL0lSRUxBTkRfQVJFQS50eHQKQEAgLTAsMCArMSBAQAorIElSRUxBTkQgOiAxIDogNjg4OTUuMApkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvSVJFTEFORF9QT1BVTEFUSU9OLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL0lSRUxBTkRfUE9QVUxBVElPTi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGMyZWZmYgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL0lSRUxBTkRfUE9QVUxBVElPTi50eHQKQEAgLTAsMCArMSBAQAorIElSRUxBTkQgOiAxIDogMzUwNjUwMApkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvSVRBTFlfQVJFQS50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9JVEFMWV9BUkVBLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jM2EyNjM4Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvSVRBTFlfQVJFQS50eHQKQEAgLTAsMCArMSwyMCBAQAorIFRSRU5USU5PLUFMVE8gQURJR0UgOiAxIDogMTM2MjAuMAorIFZFTkVUTyA6IDEgOiAxODM2My4wCisgRlJJVUxJLVZFTkVaSUEgR0lVTElBIDogMSA6IDc4NDYuMAorIExPTUJBUkRJQSA6IDEgOiAyMzg1OS4wCisgUElFTU9OVEUgOiAxIDogMjUzOTguMAorIFZBTExFIEQnQU9TVEEgOiAxIDogMzI2Mi4wCisgRU1JTElBLVJPTUFHTkEgOiAxIDogMjIxMjMuMAorIExJR1VSSUEgOiAxIDogNTQxNi4wCisgVE9TQ0FOQSA6IDEgOiAyMjk5Mi4wCisgTUFSQ0hFIDogMSA6IDk2OTMuMAorIFVNQlJJQSA6IDEgOiA4NDU2LjAKKyBBQlJVWlpJIDogMSA6IDEwNzk0LjAKKyBMQVpJTyA6IDEgOiAxNzIwMy4wCisgUFVHTElBIDogMSA6IDE5MzQ3LjAKKyBNT0xJU0UgOiAxIDogNDQzNy4wCisgQ0FNUEFOSUEgOiAxIDogMTM1OTUuMAorIFNBUkRFR05BIDogMSA6IDI0MDkwLjAKKyBCQVNJTElDQVRBIDogMSA6IDk5OTIuMAorIENBTEFCUklBIDogMSA6IDE1MDgwLjAKKyBTSUNJTElBIDogMSA6IDI1NzA3LjAKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL0lUQUxZX1BPUFVMQVRJT04udHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvSVRBTFlfUE9QVUxBVElPTi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWQyZTE2NgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL0lUQUxZX1BPUFVMQVRJT04udHh0CkBAIC0wLDAgKzEsMjAgQEAKKyBUUkVOVElOTy1BTFRPIEFESUdFIDogMSA6IDg5MTQwMAorIFZFTkVUTyA6IDEgOiA0Mzk4MTAwCisgRlJJVUxJLVZFTkVaSUEgR0lVTElBIDogMSA6IDEyMDI5MDAKKyBMT01CQVJESUEgOiAxIDogODkzOTQwMAorIFBJRU1PTlRFIDogMSA6IDQzNTc2MDAKKyBWQUxMRSBEJ0FPU1RBIDogMSA6IDExNjAwMAorIEVNSUxJQS1ST01BR05BIDogMSA6IDM5Mjg3MDAKKyBMSUdVUklBIDogMSA6IDE3MjcyMDAKKyBUT1NDQU5BIDogMSA6IDM1NjI1MDAKKyBNQVJDSEUgOiAxIDogMTQzNTYwMAorIFVNQlJJQSA6IDEgOiA4MjI4MDAKKyBBQlJVWlpJIDogMSA6IDEyNzI0MDAKKyBMQVpJTyA6IDEgOiA1MTkxNTAwCisgUFVHTElBIDogMSA6IDQwODE1MDAKKyBNT0xJU0UgOiAxIDogMzM2NTAwCisgQ0FNUEFOSUEgOiAxIDogNTg1MzkwMAorIFNBUkRFR05BIDogMSA6IDE2NjQ0MDAKKyBCQVNJTElDQVRBIDogMSA6IDYyNDUwMAorIENBTEFCUklBIDogMSA6IDIxNTM3MDAKKyBTSUNJTElBIDogMSA6IDUxOTY4MDAKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL0lWT1JZIENPQVNUX0FSRUEudHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvSVZPUlkgQ09BU1RfQVJFQS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmQ4YzQyMwotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL0lWT1JZIENPQVNUX0FSRUEudHh0CkBAIC0wLDAgKzEsNzAgQEAKK0l2b3J5IENvYXN0CToJMAk6CTMyMjQ2MAorQWduZWJpIFtBZ25pYmlsZWtyb10gIAk6CTEJOgk5MDgwCitCYWZuZyAJOgkxCToJODcyMAorU2Fzc2FuZHJhIAk6CTEJOgkyNTgwMAorRGVuZ3VlbGUgCToJMQk6CTIwNjAwCitNb250YWduZXMgCToJMQk6CTE2NjAwCitGcm9tYWdlciAJOgkxCToJNjkwMAorSGF1dC1TYXNzYW5kcmEgCToJMQk6CTE1MjAwCitMYWNzIAk6CTEJOgk4OTQwCitMYWd1bmVzIAk6CTEJOgkxNDIwMAorTWFyYWhvdWUgCToJMQk6CTg1MDAKK01veWVuLUNhdmFsbHkgCToJMQk6CTE0MTUwCitNb3llbi1Db21vZSAJOgkxCToJNjkwMAorTnotQ29tb2UgCToJMQk6CTE5NTYwCitTYXZhbmVzIAk6CTEJOgk0MDMyMworU3VkLUJhbmRhbWEgCToJMQk6CTEwNjUwCitTdWQtQ29tb2UgCToJMQk6CTYyNTAKK1ZhbGxlZSBkdSBCYW5kYW1hIAk6CTEJOgkyODUzMAorV29yb2RvdWdvdSAJOgkxCToJMjE5MDAKK1phbnphbiAJOgkxCToJMzgwMDAKK0FCRU5HT1VST1UJOgkxCToJNjU4MAorQUJJREpBTgk6CTEJOgk2NTgwCitBQk9JU1NPCToJMQk6CTY1ODAKK0FEWk9QRQk6CTEJOgk2NTgwCitBR0JPVklMTEUJOgkxCToJNjU4MAorQUdOSUJJTEVLUk8JOgkxCToJNjU4MAorQkFOR09MTwk6CTEJOgk2NTgwCitCRU9VTUkJOgkxCToJNjU4MAorQklBTktPVU1BCToJMQk6CTY1ODAKK0JPTkRPVUtPVQk6CTEJOgk2NTgwCitCT05HT1VBTk9VCToJMQk6CTY1ODAKK0JPVUFGTEUJOgkxCToJNjU4MAorQk9VQUtFCToJMQk6CTY1ODAKK0JPVU5BCToJMQk6CTY1ODAKK0JPVU5ESUFMSQk6CTEJOgk2NTgwCitEQUJBS0FMQQk6CTEJOgk2NTgwCitEQUxPQQk6CTEJOgk2NTgwCitEQU5BTkUJOgkxCToJNjU4MAorREFPVUtSTwk6CTEJOgk2NTgwCitESU1CT0tSTwk6CTEJOgk2NTgwCitESVZPCToJMQk6CTY1ODAKK0RVRUtPVUUJOgkxCToJNjU4MAorRkVSS0VTU0VET1VHT1UJOgkxCToJNjU4MAorR0FHTk9BCToJMQk6CTY1ODAKK0dSQU5ELUxBSE9VCToJMQk6CTY1ODAKK0dVSUdMTwk6CTEJOgk2NTgwCitJU1NJQQk6CTEJOgk2NTgwCitLQVRJT0xBCToJMQk6CTY1ODAKK0tPUkhPR08JOgkxCToJNjU4MAorTEFLT1RBCToJMQk6CTY1ODAKK00nQkFISUFLUk8JOgkxCToJNjU4MAorTUFOCToJMQk6CTY1ODAKK01BTktPTk8JOgkxCToJNjU4MAorT0RJRU5ORQk6CTEJOgk2NTgwCitPVU1FCToJMQk6CTY1ODAKK1NBS0FTU09VCToJMQk6CTY1ODAKK1NBTi1QRURSTwk6CTEJOgk2NTgwCitTRUdVRUxBCToJMQk6CTY1ODAKK1NJTkZSQQk6CTEJOgk2NTgwCitTT1VCUkUJOgkxCToJNjU4MAorVEFCT1UJOgkxCToJNjU4MAorVEFOREEJOgkxCToJNjU4MAorVEVOR1JFTEEJOgkxCToJNjU4MAorVElBU1NBTEUJOgkxCToJNjU4MAorVE9VQkEJOgkxCToJNjU4MAorVE9VTU9ESQk6CTEJOgk2NTgwCitWQVZPVUEJOgkxCToJNjU4MAorWUFNT1VTU09VS1JPCToJMQk6CTY1ODAKK1pVRU5PVUxBCToJMQk6CTY1ODAKKwpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvSVZPUlkgQ09BU1RfUE9QVUxBVElPTi50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9JVk9SWSBDT0FTVF9QT1BVTEFUSU9OLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMmZhOGEwCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvSVZPUlkgQ09BU1RfUE9QVUxBVElPTi50eHQKQEAgLTAsMCArMSw3MCBAQAorSXZvcnkgQ29hc3QJOgkwCToJMTc2NTQ4NDMKK0FnbmViaSAgW0FnbmliaWxla3JvXSAJOgkxCToJNzIwOTAwCitCYWZpbmcgCToJMQk6CTE3ODQwMAorU2Fzc2FuZHJhIAk6CTEJOgk0NDMyMDAKK0Rlbmd1ZWxlIAk6CTEJOgkyNzcwMDAKK01vbnRhZ25lcyAJOgkxCToJMTEyNTgwMAorRnJvbWFnZXIgCToJMQk6CTY3OTkwMAorSGF1dC1TYXNzYW5kcmEgCToJMQk6CTExODY2MDAKK0xhY3MgCToJMQk6CTU5NzUwMAorTGFndW5lcyAJOgkxCToJNDIxMDIwMAorTWFyYWhvdWUgCToJMQk6CTY1MTcwMAorTW95ZW4tQ2F2YWxseSAJOgkxCToJNDQzMjAwCitNb3llbi1Db21vZSAJOgkxCToJNDg4MjAwCitOemktQ29tb2UgCToJMQk6CTkwOTgwMAorU2F2YW5lcyAJOgkxCToJMTIxNTEwMAorU3VkLUJhbmRhbWEgCToJMQk6CTgyNjMwMAorU3VkLUNvbW9lIAk6CTEJOgk1MzY1MDAKK1ZhbGxlZSBkdSBCYW5kYW1hIAk6CTEJOgkxMzM1NTAwCitXb3JvZG91Z291IAk6CTEJOgk0MDAyMDAKK1phbnphbiAJOgkxCToJODM5MDAwCitBQkVOR09VUk9VCToJMQk6CTU4OTc0CitBQklESkFOCToJMQk6CTE5MzQzNDIKK0FCT0lTU08JOgkxCToJMjEzNDgKK0FEWk9QRQk6CTEJOgkzNTA4NQorQUdCT1ZJTExFCToJMQk6CTQ2MzU5CitBR05JQklMRUtSTwk6CTEJOgkyNDQxMworQkFOR09MTwk6CTEJOgkxMDA0MgorQkVPVU1JCToJMQk6CTEzMDcwCitCSUFOS09VTUEJOgkxCToJMTI5NjUKK0JPTkRPVUtPVQk6CTEJOgkzMzA1MQorQk9OR09VQU5PVQk6CTEJOgkxOTUwNgorQk9VQUZMRQk6CTEJOgkzNDU2MgorQk9VQUtFCToJMQk6CTMzMjk5OQorQk9VTkEJOgkxCToJMjExNTQKK0JPVU5ESUFMSQk6CTEJOgkyMjA0MgorREFCQUtBTEEJOgkxCToJMjMzNDAKK0RBTE9BCToJMQk6CTEyMjkzMworREFOQU5FCToJMQk6CTMwNTA2CitEQU9VS1JPCToJMQk6CTIyNzc3CitESU1CT0tSTwk6CTEJOgkzODE4MworRElWTwk6CTEJOgk3MjQ5NAorRFVFS09VRQk6CTEJOgkyNjc1OQorRkVSS0VTU0VET1VHT1UJOgkxCToJMzUxNTUKK0dBR05PQQk6CTEJOgk4NTU2MworR1JBTkQtTEFIT1UJOgkxCToJMTM0MDAKK0dVSUdMTwk6CTEJOgkyMjE4NworSVNTSUEJOgkxCToJMjg1MjUKK0tBVElPTEEJOgkxCToJMzM4MTMKK0tPUkhPR08JOgkxCToJMTA5NjY1CitMQUtPVEEJOgkxCToJMjE1NzUKK00nQkFISUFLUk8JOgkxCToJMTA3ODIKK01BTgk6CTEJOgk4ODI5NAorTUFOS09OTwk6CTEJOgkxMDgyNgorT0RJRU5ORQk6CTEJOgkyODI2NgorT1VNRQk6CTEJOgkyOTUyMQorU0FLQVNTT1UJOgkxCToJMjIyMDAKK1NBTi1QRURSTwk6CTEJOgk3MDYwMQorU0VHVUVMQQk6CTEJOgkyOTAwMworU0lORlJBCToJMQk6CTMzOTcxCitTT1VCUkUJOgkxCToJMzMxNjIKK1RBQk9VCToJMQk6CTk3MTQKK1RBTkRBCToJMQk6CTExNDMwCitURU5HUkVMQQk6CTEJOgkyMjI2OAorVElBU1NBTEUJOgkxCToJMTk4OTQKK1RPVUJBCToJMQk6CTE1NTkzCitUT1VNT0RJCToJMQk6CTIyMTE0CitWQVZPVUEJOgkxCToJMTc3MTcKK1lBTU9VU1NPVUtSTwk6CTEJOgkxMTAwMTMKK1pVRU5PVUxBCToJMQk6CTE5NTIzCisKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL0lWT1JZQ09BU1RfQVJFQS50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9JVk9SWUNPQVNUX0FSRUEudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYyNTVmZjQKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9JVk9SWUNPQVNUX0FSRUEudHh0CkBAIC0wLDAgKzEsNjkgQEAKK0l2b3J5IENvYXN0CToJMAk6CTMyMjQ2MAorQWduZWJpIDoJMQk6CTkwODAKK0JhZm5nIAk6CTEJOgk4NzIwCitTYXNzYW5kcmEgCToJMQk6CTI1ODAwCitEZW5ndWVsZSAJOgkxCToJMjA2MDAKK01vbnRhZ25lcyAJOgkxCToJMTY2MDAKK0Zyb21hZ2VyIAk6CTEJOgk2OTAwCitIYXV0LVNhc3NhbmRyYSAJOgkxCToJMTUyMDAKK0xhY3MgCToJMQk6CTg5NDAKK0xhZ3VuZXMgCToJMQk6CTE0MjAwCitNYXJhaG91ZSAJOgkxCToJODUwMAorTW95ZW4tQ2F2YWxseSAJOgkxCToJMTQxNTAKK01veWVuLUNvbW9lIAk6CTEJOgk2OTAwCitOei1Db21vZSAJOgkxCToJMTk1NjAKK1NhdmFuZXMgCToJMQk6CTQwMzIzCitTdWQtQmFuZGFtYSAJOgkxCToJMTA2NTAKK1N1ZC1Db21vZSAJOgkxCToJNjI1MAorVmFsbGVlIGR1IEJhbmRhbWEgCToJMQk6CTI4NTMwCitXb3JvZG91Z291IAk6CTEJOgkyMTkwMAorWmFuemFuIAk6CTEJOgkzODAwMAorQUJFTkdPVVJPVQk6CTEJOgk2NTgwCitBQklESkFOCToJMQk6CTY1ODAKK0FCT0lTU08JOgkxCToJNjU4MAorQURaT1BFCToJMQk6CTY1ODAKK0FHQk9WSUxMRQk6CTEJOgk2NTgwCitBR05JQklMRUtSTwk6CTEJOgk2NTgwCitCQU5HT0xPCToJMQk6CTY1ODAKK0JFT1VNSQk6CTEJOgk2NTgwCitCSUFOS09VTUEJOgkxCToJNjU4MAorQk9ORE9VS09VCToJMQk6CTY1ODAKK0JPTkdPVUFOT1UJOgkxCToJNjU4MAorQk9VQUZMRQk6CTEJOgk2NTgwCitCT1VBS0UJOgkxCToJNjU4MAorQk9VTkEJOgkxCToJNjU4MAorQk9VTkRJQUxJCToJMQk6CTY1ODAKK0RBQkFLQUxBCToJMQk6CTY1ODAKK0RBTE9BCToJMQk6CTY1ODAKK0RBTkFORQk6CTEJOgk2NTgwCitEQU9VS1JPCToJMQk6CTY1ODAKK0RJTUJPS1JPCToJMQk6CTY1ODAKK0RJVk8JOgkxCToJNjU4MAorRFVFS09VRQk6CTEJOgk2NTgwCitGRVJLRVNTRURPVUdPVQk6CTEJOgk2NTgwCitHQUdOT0EJOgkxCToJNjU4MAorR1JBTkQtTEFIT1UJOgkxCToJNjU4MAorR1VJR0xPCToJMQk6CTY1ODAKK0lTU0lBCToJMQk6CTY1ODAKK0tBVElPTEEJOgkxCToJNjU4MAorS09SSE9HTwk6CTEJOgk2NTgwCitMQUtPVEEJOgkxCToJNjU4MAorTSdCQUhJQUtSTwk6CTEJOgk2NTgwCitNQU4JOgkxCToJNjU4MAorTUFOS09OTwk6CTEJOgk2NTgwCitPRElFTk5FCToJMQk6CTY1ODAKK09VTUUJOgkxCToJNjU4MAorU0FLQVNTT1UJOgkxCToJNjU4MAorU0FOLVBFRFJPCToJMQk6CTY1ODAKK1NFR1VFTEEJOgkxCToJNjU4MAorU0lORlJBCToJMQk6CTY1ODAKK1NPVUJSRQk6CTEJOgk2NTgwCitUQUJPVQk6CTEJOgk2NTgwCitUQU5EQQk6CTEJOgk2NTgwCitURU5HUkVMQQk6CTEJOgk2NTgwCitUSUFTU0FMRQk6CTEJOgk2NTgwCitUT1VCQQk6CTEJOgk2NTgwCitUT1VNT0RJCToJMQk6CTY1ODAKK1ZBVk9VQQk6CTEJOgk2NTgwCitZQU1PVVNTT1VLUk8JOgkxCToJNjU4MAorWlVFTk9VTEEJOgkxCToJNjU4MApkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvSVZPUllDT0FTVF9QT1BVTEFUSU9OLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL0lWT1JZQ09BU1RfUE9QVUxBVElPTi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjIyNGY4MQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL0lWT1JZQ09BU1RfUE9QVUxBVElPTi50eHQKQEAgLTAsMCArMSw2OSBAQAorSXZvcnkgQ29hc3QJOgkwCToJMTc2NTQ4NDMKK0FnbmViaSA6CTEJOgk3MjA5MDAKK0JhZmluZyAJOgkxCToJMTc4NDAwCitTYXNzYW5kcmEgCToJMQk6CTQ0MzIwMAorRGVuZ3VlbGUgCToJMQk6CTI3NzAwMAorTW9udGFnbmVzIAk6CTEJOgkxMTI1ODAwCitGcm9tYWdlciAJOgkxCToJNjc5OTAwCitIYXV0LVNhc3NhbmRyYSAJOgkxCToJMTE4NjYwMAorTGFjcyAJOgkxCToJNTk3NTAwCitMYWd1bmVzIAk6CTEJOgk0MjEwMjAwCitNYXJhaG91ZSAJOgkxCToJNjUxNzAwCitNb3llbi1DYXZhbGx5IAk6CTEJOgk0NDMyMDAKK01veWVuLUNvbW9lIAk6CTEJOgk0ODgyMDAKK056aS1Db21vZSAJOgkxCToJOTA5ODAwCitTYXZhbmVzIAk6CTEJOgkxMjE1MTAwCitTdWQtQmFuZGFtYSAJOgkxCToJODI2MzAwCitTdWQtQ29tb2UgCToJMQk6CTUzNjUwMAorVmFsbGVlIGR1IEJhbmRhbWEgCToJMQk6CTEzMzU1MDAKK1dvcm9kb3Vnb3UgCToJMQk6CTQwMDIwMAorWmFuemFuIAk6CTEJOgk4MzkwMDAKK0FCRU5HT1VST1UJOgkxCToJNTg5NzQKK0FCSURKQU4JOgkxCToJMTkzNDM0MgorQUJPSVNTTwk6CTEJOgkyMTM0OAorQURaT1BFCToJMQk6CTM1MDg1CitBR0JPVklMTEUJOgkxCToJNDYzNTkKK0FHTklCSUxFS1JPCToJMQk6CTI0NDEzCitCQU5HT0xPCToJMQk6CTEwMDQyCitCRU9VTUkJOgkxCToJMTMwNzAKK0JJQU5LT1VNQQk6CTEJOgkxMjk2NQorQk9ORE9VS09VCToJMQk6CTMzMDUxCitCT05HT1VBTk9VCToJMQk6CTE5NTA2CitCT1VBRkxFCToJMQk6CTM0NTYyCitCT1VBS0UJOgkxCToJMzMyOTk5CitCT1VOQQk6CTEJOgkyMTE1NAorQk9VTkRJQUxJCToJMQk6CTIyMDQyCitEQUJBS0FMQQk6CTEJOgkyMzM0MAorREFMT0EJOgkxCToJMTIyOTMzCitEQU5BTkUJOgkxCToJMzA1MDYKK0RBT1VLUk8JOgkxCToJMjI3NzcKK0RJTUJPS1JPCToJMQk6CTM4MTgzCitESVZPCToJMQk6CTcyNDk0CitEVUVLT1VFCToJMQk6CTI2NzU5CitGRVJLRVNTRURPVUdPVQk6CTEJOgkzNTE1NQorR0FHTk9BCToJMQk6CTg1NTYzCitHUkFORC1MQUhPVQk6CTEJOgkxMzQwMAorR1VJR0xPCToJMQk6CTIyMTg3CitJU1NJQQk6CTEJOgkyODUyNQorS0FUSU9MQQk6CTEJOgkzMzgxMworS09SSE9HTwk6CTEJOgkxMDk2NjUKK0xBS09UQQk6CTEJOgkyMTU3NQorTSdCQUhJQUtSTwk6CTEJOgkxMDc4MgorTUFOCToJMQk6CTg4Mjk0CitNQU5LT05PCToJMQk6CTEwODI2CitPRElFTk5FCToJMQk6CTI4MjY2CitPVU1FCToJMQk6CTI5NTIxCitTQUtBU1NPVQk6CTEJOgkyMjIwMAorU0FOLVBFRFJPCToJMQk6CTcwNjAxCitTRUdVRUxBCToJMQk6CTI5MDAzCitTSU5GUkEJOgkxCToJMzM5NzEKK1NPVUJSRQk6CTEJOgkzMzE2MgorVEFCT1UJOgkxCToJOTcxNAorVEFOREEJOgkxCToJMTE0MzAKK1RFTkdSRUxBCToJMQk6CTIyMjY4CitUSUFTU0FMRQk6CTEJOgkxOTg5NAorVE9VQkEJOgkxCToJMTU1OTMKK1RPVU1PREkJOgkxCToJMjIxMTQKK1ZBVk9VQQk6CTEJOgkxNzcxNworWUFNT1VTU09VS1JPCToJMQk6CTExMDAxMworWlVFTk9VTEEJOgkxCToJMTk1MjMKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL0pBUEFOX0FSRUEudHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvSkFQQU5fQVJFQS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTZmOTZhZQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL0pBUEFOX0FSRUEudHh0CkBAIC0wLDAgKzEsNjAgQEAKK0phcGFuCToJMAk6CTM3NzgzNQorSG9ra2FpZG8gICAJOgkxCToJODM0NTMKK0FvbW9yaSAgCToJMQk6CTk2MDYKK0l3YXRlICAJOgkxCToJMTUyNzgKK01peWFnaSAgCToJMQk6CTcyODUKK0FraXRhICAJOgkxCToJMTE2MTIKK1lhbWFnYXRhICAJOgkxCToJOTMyMworRnVrdXNoaW1hICAJOgkxCToJMTM3ODIKK0liYXJha2kgIAk6CTEJOgk2MDk2CitUb2NoaWdpICAJOgkxCToJNjQwOAorR3VtbWEgIAk6CTEJOgk2MzYzCitTYWl0YW1hICAJOgkxCToJMzc5NworQ2hpYmEgIAk6CTEJOgk1MTU2CitDaHVidQk6CTEJOiA0NDUwCitDaHVnb2t1CToJMQk6IDQyMDAKK1Rva3lvIC10byAJOgkxCToJMjE5NworS2FuYWdhd2EgIAk6CTEJOgkyNDE1CitOaWlnYXRhICAJOgkxCToJMTI1ODIKK1RveWFtYSAgCToJMQk6CTQyNDcKK0lzaGlrYXdhICAJOgkxCToJNDE4NQorRnVrdWkgIAk6CTEJOgk0MTg5CitZYW1hbmFzaGkgIAk6CTEJOgk0NDY1CitOYWdhbm8gIAk6CTEJOgkxMzU4NQorR2lmdSAgCToJMQk6CTEwNTk4CitTaGl6dW9rYSAgCToJMQk6CTc3NzkKK0FpY2hpICAJOgkxCToJNTE1NgorTWllICAJOgkxCToJNTc3NgorU2hpZ2EgIAk6CTEJOgk0MDE3CitLeW90byAgCToJMQk6CTQ2MTMKK09zYWthICAJOgkxCToJMTg5MworSHlvZ28gIAk6CTEJOgk4MzkyCitOYXJhICAJOgkxCToJMzY5MQorV2FrYXlhbWEgIAk6CTEJOgk0NzI2CitUb3R0b3JpICAJOgkxCToJMzUwNworU2hpbWFuZSAgCToJMQk6CTY3MDcKK09rYXlhbWEgIAk6CTEJOgk3MTEyCitIaXJvc2hpbWEgIAk6CTEJOgk4NDc3CitZYW1hZ3VjaGkgIAk6CTEJOgk2MTEwCitUb2t1c2hpbWEgIAk6CTEJOgk0MTQ1CitLYWdhd2EgIAk6CTEJOgkxODc2CitFaGltZSAgCToJMQk6CTU2NzYKK0tvY2hpICAJOgkxCToJNzEwNQorS2FudG8JOgkxCTogNDEwMAorS2lua2kJOgkxCTogNTE1MAorS3l1c2h1CToJMQk6IDQ1MDAKK0Z1a3Vva2EgIAk6CTEJOgk0OTcxCitTYWdhICAJOgkxCToJMjQzOQorTmFnYXNha2kgIAk6CTEJOgk0MDkyCitLdW1hbW90byAgCToJMQk6CTc0MDQKK09pdGEgIAk6CTEJOgk2MzM4CitNaXlhemFraSAgCToJMQk6CTc3MzQKK0thZ29zaGltYSAgCToJMQk6CTkxODcKK09raW5hd2EgIAk6CTEJOgkyMjcxCitIb2t1cmlrdQk6CTEJOiA1MzAwCitSeXVraXUtSXNsYW5kcwk6CTEJOiA0NTAwCitTaGlrb2t1CToJMQk6IDYxMjAKK1RvaG9rdSA6CTEJOiA0NzUwCitUb2thaQk6CTEJOiA0NDAwCisKKwpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvSkFQQU5fUE9QVUxBVElPTi50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9KQVBBTl9QT1BVTEFUSU9OLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NWRlNWZlCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvSkFQQU5fUE9QVUxBVElPTi50eHQKQEAgLTAsMCArMSw2MyBAQAorSmFwYW4JOgkwCToJMTI3NDYzNjExCitIb2trYWlkbyAgIAk6CTEJOgk1NjI3NDI0CitBb21vcmkgIAk6CTEJOgkxNDM2NjI4CitJd2F0ZSAgCToJMQk6CTEzODUwMzcKK01peWFnaSAgCToJMQk6CTIzNTk5OTEKK0FraXRhICAJOgkxCToJMTE0NTQ3MQorWWFtYWdhdGEgIAk6CTEJOgkxMjE2MTE2CitGdWt1c2hpbWEgIAk6CTEJOgkyMDkxMjIzCitJYmFyYWtpICAJOgkxCToJMjk3NTAyMworVG9jaGlnaSAgCToJMQk6CTIwMTY0NTIKK0d1bW1hICAJOgkxCToJMjAyNDA0NAorU2FpdGFtYSAgCToJMQk6CTcwNTM2ODkKK0NoaWJhICAJOgkxCToJNjA1NjE1OQorQ2h1YnUJOgkxCTogNzk1NjcKK0NodWdva3UJOgkxCTogMTEwMTQwCitUb2t5byAgCToJMQk6CTEyNTcwOTA0CitLYW5hZ2F3YSAgCToJMQk6CTg3OTA5MDAKK05paWdhdGEgIAk6CTEJOgkyNDMxMzk2CitUb3lhbWEgIAk6CTEJOgkxMTExNjAyCitJc2hpa2F3YSAgCToJMQk6CTExNzM5OTQKK0Z1a3VpICAJOgkxCToJODIxNTg5CitZYW1hbmFzaGkgIAk6CTEJOgk4ODQ1MzEKK05hZ2FubyAgCToJMQk6CTIxOTYwMTIKK0dpZnUgIAk6CTEJOgkyMTA3MjkzCitTaGl6dW9rYSAgCToJMQk6CTM3OTI0NTcKK0FpY2hpICAJOgkxCToJNzI1NDQzMgorTWllICAJOgkxCToJMTg2NzE2NgorU2hpZ2EgIAk6CTEJOgkxMzgwMzQzCitLeW90byAgCToJMQk6CTI2NDc1MjMKK0thbnRvIDoJMQk6IDI0NTYyNgorS2lua2kJOgkxCTogNjEwNTgKK0t5dXNodQk6CTEJOiA1NjAwNDgKK09zYWthICAJOgkxCToJODgxNzAxMAorSHlvZ28gIAk6CTEJOgk1NTkwMzgxCitOYXJhICAJOgkxCToJMTQyMTM2NworV2FrYXlhbWEgIAk6CTEJOgkxMDM2MDYxCitUb3R0b3JpICAJOgkxCToJNjA2OTQ3CitTaGltYW5lICAJOgkxCToJNzQyMTM1CitPa2F5YW1hICAJOgkxCToJMTk1NzA1NgorSGlyb3NoaW1hICAJOgkxCToJMjg3Njc2MgorWWFtYWd1Y2hpICAJOgkxCToJMTQ5MjU3NQorVG9rdXNoaW1hICAJOgkxCToJODA5OTc0CitLYWdhd2EgIAk6CTEJOgkxMDEyMjYxCitFaGltZSAgCToJMQk6CTE0Njc4MjQKK0tvY2hpICAJOgkxCToJNzk2MjExCitGdWt1b2thICAJOgkxCToJNTA0OTEyNgorU2FnYSAgCToJMQk6CTg2NjQwMgorTmFnYXNha2kgIAk6CTEJOgkxNDc4NjMwCitLdW1hbW90byAgCToJMQk6CTE4NDIxNDAKK09pdGEgIAk6CTEJOgkxMjA5NTg3CitNaXlhemFraSAgCToJMQk6CTExNTI5OTMKK0thZ29zaGltYSAgCToJMQk6CTE3NTMxNDQKK09raW5hd2EgIAk6CTEJOgkxMzYwODMwCitIb2t1cmlrdQk6CTEJOiAyMTYxNDYKK1J5dWtpdS1Jc2xhbmRzCToJMQk6IDU2NTAzCitTaGlrb2t1CToJMQk6IDExNTI4NgorVG9ob2t1CToJMQk6IDE0NDkxNworVG9rYWkJOgkxCTogNzkzMzIKKworCisKKworCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9KT1JEQU5fQVJFQS50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9KT1JEQU5fQVJFQS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDIyOWE5MQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL0pPUkRBTl9BUkVBLnR4dApAQCAtMCwwICsxLDEzIEBACitqb3JkYW4JOgkwCToJOTIzMDAKK2FqbHVuCToJMQk6CTQxMgorQW1tYW4JOgkxCToJODIzMQorYWwgYXFhYmFoCToJMQk6CTY1ODMKK1NhbHQgKEJBTFFBKQk6CTEJOgkxMDc2CitJcmJpZAk6CTEJOgkxNjIxCitqYXJhc2gJOgkxCToJNDAyCitLYXJhawk6CTEJOgkzMjE3CitNYS1hbgk6CTEJOgkzMzE2MworbWFkYWJhCToJMQk6CTIwMDgKK01hZnJhcQk6CTEJOgkyNjQzNQorVGFmaWxhCToJMQk6CTIxMTQKK1phcnFhCToJMQk6CTQwODAKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL0pPUkRBTl9QT1BVTEFUSU9OLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL0pPUkRBTl9QT1BVTEFUSU9OLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YTRhNzA2Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvSk9SREFOX1BPUFVMQVRJT04udHh0CkBAIC0wLDAgKzEsMTMgQEAKK2pvcmRhbgk6CTAJOgk1OTA2NzYwCithamx1bgk6CTEJOgkxMTg0OTYKK0FtbWFuCToJMQk6CTE5Mzk0MDUKK2FsIGFxYWJhaAk6CTEJOgkxMDE3MzYKK1NhbHQgKEJBTFFBKQk6CTEJOgkzNDQ5ODUKK0lyYmlkCToJMQk6CTkyNTczNgoramFyYXNoCToJMQk6CTE1MzY1MAorS2FyYWsJOgkxCToJMjA0MTM1CitNYS1hbgk6CTEJOgk5MjY3MgorbWFkYWJhCToJMQk6CTEyOTc5MgorTWFmcmFxCToJMQk6CTI0MDUxNQorVGFmaWxhCToJMQk6CTc1MjkwCitaYXJxYQk6CTEJOgk3NzQ1NjkKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL0tBWkFLSFNUQU5fQVJFQS50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9LQVpBS0hTVEFOX0FSRUEudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkyYTE0NWEKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9LQVpBS0hTVEFOX0FSRUEudHh0CkBAIC0wLDAgKzEsMjcgQEAKK2themFraHN0YW4JOgkwCToJMjcxNzMwMAorQWxtYS1hdGEJOgkxCToJMjIzOTAwCitBbG1hdHkgcWFsYSAJOgkxCToJMzAwCitBcW1vbGEJOgkxCToJMTIxNDAwCitBcXRvYmUJOgkxCToJMzAwNjAwCitBc3RhbmEgcWFsYSAJOgkxCToJMzAwCitBdHlyYXUJOgkxCToJMTE4NjAwCitOb3J0aCBLYXpha2hzdGFuCToJMQk6CTE1MTMwMAorTWFuZ2doeXN0YXUJOgkxCToJMTY1NjAwCitFYXN0IEthemFraHN0YW4JOgkxCToJMTE3MzAwCitQYXZsb2Rhcgk6CTEJOgkxMjQ4MDAKK0thcmFnYW5kYSBbRHpoZXprYXpnYW5dCToJMQk6CTQyODAwMAorS3VzdGFuYXkJOgkxCToJMTk2MDAwCitLenlsLW9yZGEJOgkxCToJMjI2MDAwCitTaHlnaHlzIFFhemFxc3Rhbgk6CTEJOgkyODMzMDAKK1NvbHT8c3RpayBRYXphcXN0YW4JOgkxCToJMTIzMjAwCitaaGFtYnlsCToJMQk6CTE0NDMwMAorQWt0eXViaW5zayA6IDEgOiAzMDA2MDAKK0FyYWwgU2VhIDogMSA6IDY4MDAwCitDaGlta2VudCA6IDEgOiAxMTczMDAKK0R6aGFtYnVsIDogMSA6IDE0NDMwMCAKK0d1cnlldiA6IDEgOiAxMTg2MDAKK0tvY2hldGF2IDogMSAgOiAxNDYyMDAKK1NlbWlwYWxhdGluc2sgOiAxIDogMjI2MDAwCitUYWxkeSBLdXJnYW4gOiAxIDogMTI0ODAwCitUc2VsaW5vZ3JhZCA6IDEgOiA3MDAKK1VyYWxzayA6IDEgOiAxNTEzMDAKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL0tBWkFLSFNUQU5fUE9QVUxBVElPTi50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9LQVpBS0hTVEFOX1BPUFVMQVRJT04udHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM3NjQ1YWMKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9LQVpBS0hTVEFOX1BPUFVMQVRJT04udHh0CkBAIC0wLDAgKzEsMjkgQEAKK2themFraHN0YW4JOgkwCToJMTUyMzMyNDQKK0FsbWEtYXRhCToJMQk6CTE1NTg1MDAKK0FsbWF0eSBxYWxhIAk6CTEJOgkxMTI5NDAwCitBcW1vbGEJOgkxCToJODM2MzAwCitBcXRvYmUJOgkxCToJNjgyNjAwCitBc3RhbmEgcWFsYSAJOgkxCToJMzE5MzAwCitBdHlyYXUJOgkxCToJNDQwMzAwCitOb3J0aCBLYXpha2hzdGFuCToJMQk6CTYxNjgwMAorTWFuZ2doeXN0YXUJOgkxCToJMzE0NzAwCitFYXN0IEthemFraHN0YW4JOgkxCToJMTk3ODMwMAorUGF2bG9kYXIJOgkxCToJODA3MDAwCitLYXJhZ2FuZGEJOgkxCToJMTQxMDIwMAorS3VzdGFuYXkJOgkxCToJMTAxNzcwMAorS3p5bC1vcmRhCToJMQk6CTU5NjIwMAorU2h5Z2h5cyBRYXphcXN0YW4JOgkxCToJMTUzMTAwMAorU29sdPxzdGlrIFFhemFxc3Rhbgk6CTEJOgk3MjYwMDAKK1poYW1ieWwJOgkxCToJOTg4ODAwCitBa3R5dWJpbnNrIDogMSA6IDI1MzA4OAorQXJhbCBTZWEgOiAxIDogMAorQ2hpbWtlbnQgOiAxIDogMzYwMDc4CitEemhhbWJ1bCA6IDEgOiAzMzAxMjUKK0R6aGV6a2F6Z2FuIDogMSA6IDkwMDAwCitHdXJ5ZXYgOiAxIDogMTQyNDk3CitLb2NoZXRhdiA6IDEgIDogMTIzMzg5CitTZW1pcGFsYXRpbnNrIDogMSA6IDI2OTU3NAorVGFsZHkgS3VyZ2FuIDogMSA6IDk4MDAwCitUc2VsaW5vZ3JhZCA6IDEgOiAzMTI5NjUKK1VyYWxzayA6IDEgOiAxOTU0NTkKKwpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvS0VOWUFfQVJFQS50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9LRU5ZQV9BUkVBLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41OWVhNDBmCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvS0VOWUFfQVJFQS50eHQKQEAgLTAsMCArMSwxMSBAQAorS2VueWEJOgkwCToJNTgyNjUwCitDZW50cmFsMiBbQ2VudHJhbF0gIAk6CTEJOgkxMzIyMworQ29hc3QgCToJMQk6CTgzMzU5CitFYXN0ZXJuIAk6CTEJOgkxNjc1MjUKK05haXJvYmkgCToJMQk6CTY5NgorTi4gRWFzdGVybiAJOgkxCToJMTI3MTk3CitOeWFuemEgCToJMQk6CTE2MTgyCitSaWZ0IFZhbGxleSAJOgkxCToJMTg1Mjk4CitXZXN0ZXJuIAk6CTEJOgk4NDAwCisKKwpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvS0VOWUFfUE9QVUxBVElPTi50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9LRU5ZQV9QT1BVTEFUSU9OLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40OGYxZTdmCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvS0VOWUFfUE9QVUxBVElPTi50eHQKQEAgLTAsMCArMSw5IEBACitLZW55YQk6CTAJOgkzNDcwNzgxNworQ2VudHJhbDIgW0NlbnRyYWxdICAJOgkxCToJMzcyNDE1OQorQ29hc3QgCToJMQk6CTI0ODcyNjQKK0Vhc3Rlcm4gCToJMQk6CTQ2MzE3NzkKK05haXJvYmkgCToJMQk6CTIxNDMyNTQKK04uIEVhc3Rlcm4gCToJMQk6CTk2MjE0MworTnlhbnphIAk6CTEJOgk0MzkyMTk2CitSaWZ0IFZhbGxleSAJOgkxCToJNjk4NzAzNgorV2VzdGVybiAJOgkxCToJMzM1ODc3NgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvS1VXQUlUX0FSRUEudHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvS1VXQUlUX0FSRUEudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFmNTNhMDYKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9LVVdBSVRfQVJFQS50eHQKQEAgLTAsMCArMSw4IEBACitLdXdhaXQJOgkwCToJMTc4MjAKK0t1d2FpdCA6IDEgOiAxNzgxOAorYWwgYWhtYWRpCToJMQk6CTAKK2FsIGZhcmFuaXlhaAk6CTEJOgkwCithbCBqYWhyYQk6CTEJOgkwCitjYXBpdGFsCToJMQk6CTAKK211aGFmYXphdAk6CTEJOgkwCithbC1rYWJlZXIJOgkxCToJMApkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvS1VXQUlUX1BPUFVMQVRJT04udHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvS1VXQUlUX1BPUFVMQVRJT04udHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNlYzhiY2UKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9LVVdBSVRfUE9QVUxBVElPTi50eHQKQEAgLTAsMCArMSw4IEBACitLdXdhaXQJOgkwCToJMjQxODM5MworS3V3YWl0IDogMSA6IDI0MTgzOTMKK2FsIGFobWFkaQk6CTEJOgkzNjQ0ODQKK2FsIGZhcmFuaXlhaAk6CTEJOgk1NzIyNTIKK2FsIGphaHJhCToJMQk6CTI4MjM1MworY2FwaXRhbAk6CTEJOgkzODg1MzIKK211aGFmYXphdAk6CTEJOgk0ODgyOTQKK2FsLWthYmVlcgk6CTEJOgkxNDQ5ODEKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL0tZUkdZWlNUQU5fQVJFQS50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9LWVJHWVpTVEFOX0FSRUEudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYzNTY2YzEKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9LWVJHWVpTVEFOX0FSRUEudHh0CkBAIC0wLDAgKzEsMTAgQEAKK0t5cmd5enN0YW4JOgkwCToJMTk4NTAwCitCYXRrZW4JOgkxCToJMTcwMjMuOTAKK0NodWkJOgkxCToJMTg2ODQuNDAKK0lzc3lrLWt1bAk6CTEJOgk0MzExNC4wMAorSmFsYWwtQWJhZAk6CTEJOgkzMzY0Ny41MAorU2hhYXJ5IEJpc2hrZWsgCToJMQk6CTEyNy4zCitOYXJ5bgk6CTEJOgk0NjcwNi45MAorT3NoCToJMQk6CTI5MTY1LjEwCitUYWxhcwk6CTEJOgkxMTQ0NS45MAorS2lyZ2hpemlzdGFuIFRlcnJpdG9yaWVzIDogMSA6IDE4MTQzCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9LWVJHWVpTVEFOX1BPUFVMQVRJT04udHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvS1lSR1laU1RBTl9QT1BVTEFUSU9OLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MGYyYjEzCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvS1lSR1laU1RBTl9QT1BVTEFUSU9OLnR4dApAQCAtMCwwICsxLDEwIEBACitLeXJneXpzdGFuCToJMAk6CTUyMTM4OTgKK0JhdGtlbgk6CTEJOgkzODI0MjYKK0NodWkJOgkxCToJNzcwODExCitJc3N5ay1rdWwJOgkxCToJNDEzMTQ5CitKYWxhbC1BYmFkCToJMQk6CTg2OTI1OQorU2hhYXJ5IEJpc2hrZWsgCToJMQk6CTc2MjMwOAorTmFyeW4JOgkxCToJMjQ5MTE1CitPc2gJOgkxCToJMTE3NTk5OAorVGFsYXMJOgkxCToJMTk5ODcyCitLaXJnaGl6aXN0YW4gVGVycml0b3JpZXMgOiAxIDogMjUwMDAKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL0xBT1NfQVJFQS50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9MQU9TX0FSRUEudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI5ZWJkYTQKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9MQU9TX0FSRUEudHh0CkBAIC0wLDAgKzEsMjAgQEAKK0xhb3MJOgkwCToJMjM2ODAwCitBdHRvcHUgIAk6CTEJOgkxMDMyMAorQm9rZW8gCToJMQk6CTYxOTYKK0JvbGlraGFteGFpIFtCb2xpa2hhbXNhaV0gCToJMQk6CTE0ODYzCitDaGFtcGFzc2FrIFtDaGFtcGFzc2Fja10JOgkxCToJMTU0MTUKK0hvdWFwaGFuIFtIb3VhcGhhbmhdCToJMQk6CTE2NTAwCitLaGFtbW91YW4gW0toYW1tb3VhbmVdCToJMQk6CTE2MzE1CitMb3VhbmcgTmFtdGhhIFtOYW10aGFdCToJMQk6CTkzMjUKK0xvdWFuZ3BoYWJhbmcgW0x1YW5nIFByYWJhbmddCToJMQk6CTE2ODc1CitPdWRvbXhhaSBbT3Vkb214YXldCToJMQk6CTE1MzcwCitQaG9uZ3NhbGkgW1Bob25nc2FseV0JOgkxCToJMTYyNzAKK1NhbGF2YW4gW1NhcmF2YW5lXSA6CTEJOgkxMDY5MQorU2F2YW5uYWtoZXQgCToJMQk6CTIxNzc0CitWaWVudGlhbmUgW1ZpZW50aWFuZSAoTXVuaWMuKV0gCToJMQk6CTE1OTI3CitOYWtob24gVmllbnRpYW5lIFtWaWVudGlhbmUgMl0JOgkxCToJMzkyMAorS2hvdehuZyBYYWlnbmFib3VsaSBbU2F5YWJvdXJpXQk6CTEJOgkxNjM4OQorS2jpdHBoaXPpdCBYYWlzb21ib3VuIAk6CTEJOgk3MTA1CitLaG916G5nIFhla29uZyBbU2Vrb25nXQk6CTEJOgk3NjY1CitYaWFuZ2tob3VhbmcgCToJMQk6CTE1ODgwCisKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL0xBT1NfUE9QVUxBVElPTi50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9MQU9TX1BPUFVMQVRJT04udHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRmNDAxNzUKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9MQU9TX1BPUFVMQVRJT04udHh0CkBAIC0wLDAgKzEsMTkgQEAKK0xhb3MJOgkwCToJNjM2ODQ4MQorQXR0b3B1ICAJOgkxCToJODc3MDAKK0Jva2VvIAk6CTEJOgkxMTQ5MDAKK0JvbGlraGFteGFpIFtCb2xpa2hhbXNhaV0gCToJMQk6CTE2NDkwMAorQ2hhbXBhc3NhayBbQ2hhbXBhc3NhY2tdCToJMQk6CTUwMzMwMAorSG91YXBoYW4gW0hvdWFwaGFuaF0gCToJMQk6CTI0NzMwMAorS2hhbW1vdWFuIFtLaGFtbW91YW5lXSAJOgkxCToJMjc1NDAwCitMb3VhbmcgTmFtdGhhIFtOYW10aGFdCToJMQk6CTExNTIwMAorTG91YW5ncGhhYmFuZyBbTHVhbmcgUHJhYmFuZ10JOgkxCToJMzY3MjAwCitPdWRvbXhhaSBbT3Vkb214YXldCToJMQk6CTIxMTMwMAorUGhvbmdzYWxpIFtQaG9uZ3NhbHldCToJMQk6CTE1MzQwMAorU2FsYXZhbiBbU2FyYXZhbmVdIAk6CTEJOgkyNTgzMDAKK1NhdmFubmFraGV0IAk6CTEJOgk2NzQ5MDAKK1ZpZW50aWFuZSBbVmllbnRpYW5lIChNdW5pYy4pXSA6CTEJOgkyODY4MDAKK05ha2hvbiBWaWVudGlhbmUgW1ZpZW50aWFuZSAyXQk6CTEJOgk1MzE4MDAKK0tob3XobmcgWGFpZ25hYm91bGkgW1NheWFib3VyaV0JOgkxCToJMjkzMzAwCitLaOl0cGhpc+l0IFhhaXNvbWJvdW4gOgkxCToJMAorS2hvdehuZyBYZWtvbmcgW1Nla29uZ10JOgkxCToJNjQyMDAKK1hpYW5na2hvdWFuZyAJOgkxCToJMjAxMjAwClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvTEFUVklBX0FSRUEudHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvTEFUVklBX0FSRUEudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY2ZDk2MjYKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9MQVRWSUFfQVJFQS50eHQKQEAgLTAsMCArMSBAQAorTEFUVklBIDogMCA6IDY0NTg5CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9MQVRWSUFfUE9QVUxBVElPTi50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9MQVRWSUFfUE9QVUxBVElPTi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTkzMTgwMQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL0xBVFZJQV9QT1BVTEFUSU9OLnR4dApAQCAtMCwwICsxIEBACitMQVRWSUEgOiAwIDogMjM3NzM4MwpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvTEVCQU5PTl9BUkVBLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL0xFQkFOT05fQVJFQS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmIzNzhiZQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL0xFQkFOT05fQVJFQS50eHQKQEAgLTAsMCArMSw5IEBACitMZWJhbm9uCToJMAk6CTEwNDAwCitMZWJhbm9uIDogMSA6IDEwNDAwCitCZWlydXQgIAk6CTEJOgkxOS42CitCZWthYSAJOgkxCToJNDE2MC45MAorTW91bnQgTGViYW5vbiAJOgkxCToJMTk2OC4zMAorTmFiYXRpeWUgCToJMQk6CTEwOTguMDAKK05vcnRoIAk6CTEJOgkyMDI0LjgwCitTb3V0aCAJOgkxCToJOTI5LjYKKwpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvTEVCQU5PTl9QT1BVTEFUSU9OLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL0xFQkFOT05fUE9QVUxBVElPTi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2JkNGYxMgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL0xFQkFOT05fUE9QVUxBVElPTi50eHQKQEAgLTAsMCArMSw4IEBACitMZWJhbm9uCToJMAk6CTM4NzQwNTAKK0xlYmFub24gOiAxIDogMzg3NDA1MAorQmVpcnV0ICAJOgkxCToJNDA3NDAzCitCZWthYSAJOgkxCToJMzk5ODkwCitNb3VudCBMZWJhbm9uIAk6CTEJOgkxMTQ1NDU4CitOYWJhdGl5ZSAJOgkxCToJMjA1NDEyCitOb3J0aCAJOgkxCToJNjcwNjA5CitTb3V0aCAJOgkxCToJMjgzMDU2CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9MRVNPVEhPX0FSRUEudHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvTEVTT1RIT19BUkVBLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mODIzOWViCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvTEVTT1RIT19BUkVBLnR4dApAQCAtMCwwICsxLDEyIEBACitsZXNvdGhvCToJMAk6CTMwMzU1CitCZXJlYSAgCToJMQk6CTIyMjIKK0J1dGhhLUJ1dGhlIAk6CTEJOgkxNzY3CitMZXJpYmUgCToJMQk6CTI4MjgKK01hZmV0ZW5nIAk6CTEJOgkyMTE5CitNYXNlcnUgCToJMQk6CTQyNzkKK01vaGFsZSdzIEhvZWsgCToJMQk6CTM1MzAKK01va2hvdGxvbmcgCToJMQk6CTQwNzUKK1FhY2hhJ3MgTmVrIFtRdWFjaGEncyBOZWtdCToJMQk6CTIzNDkKK1F1dGhpbmcgCToJMQk6CTI5MTYKK1RoYWJhIFRzZWthIAk6CTEJOgk0MjcwCisKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL0xFU09USE9fUE9QVUxBVElPTi50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9MRVNPVEhPX1BPUFVMQVRJT04udHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFhODFjOTQKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9MRVNPVEhPX1BPUFVMQVRJT04udHh0CkBAIC0wLDAgKzEsMTIgQEAKK2xlc290aG8JOgkwCToJMjAyMjMzMQorQmVyZWEgIAk6CTEJOgkzMDA1NTcKK0J1dGhhLUJ1dGhlIAk6CTEJOgkxMjY5MDcKK0xlcmliZSAJOgkxCToJMzYyMzM5CitNYWZldGVuZyAJOgkxCToJMjM4OTQ2CitNYXNlcnUgCToJMQk6CTQ3NzU5OQorTW9oYWxlJ3MgSG9layAJOgkxCToJMjA2ODQyCitNb2tob3Rsb25nIAk6CTEJOgk4OTcwNQorUWFjaGEncyBOZWsgW1F1YWNoYSdzIE5la10JOgkxCToJODAzMjMKK1F1dGhpbmcgCToJMQk6CTE0MDY0MQorVGhhYmEgVHNla2EgCToJMQk6CTEzMzY4MAorCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9MSUJFUklBX0FSRUEudHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvTElCRVJJQV9BUkVBLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMTNiYjhmCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvTElCRVJJQV9BUkVBLnR4dApAQCAtMCwwICsxLDE4IEBACitMaWJlcmlhCToJMAk6CTExMTM3MAorQm9taSBUZXJyLgk6CTEJOgkxOTU1CitCb25nCToJMQk6CTgwOTkKK0diYXJwb2x1IENvdW50eSAJOgkxCToJNzcyMworR3JhbmQgQmFzc2EJOgkxCToJODc1OQorR3JhbmQgQ2FwZSBNb3VudAk6CTEJOgk1ODI3CitHcmFuZCBHZWRlaAk6CTEJOgkxNzAyOQorR3JhbmQgS3J1IENvdW50eSBbS3J1IENvYXN0IFRlcnIuXQk6CTEJOgk0MDAwCitMb2ZhCToJMQk6CTExNjM3CitNYXJnaWJpCToJMQk6CTMyNjMKK01hcnlsYW5kCToJMQk6CTUzNTEKK01vbnRzZXJyYWRvCToJMQk6CTI3NDAKK05pbWJhCToJMQk6CTEyMDQzCitSaXZlciBDZXNzIFtSaXZlcmNlc3MgVGVyci5dCToJMQk6CTQzODUKK1JpdmVyIEdlZQk6CTEJOgkwCitTaW5vZQk6CTEJOgkxMDI1NAorU2Fzc3Rvd24gVGVyci4gOiAxIDogNTM1MQorTWFyc2hhbGwgVGVyci4gOiAxIDogMjc0MApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL0xJQkVSSUFfUE9QVUxBVElPTi50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9MSUJFUklBX1BPUFVMQVRJT04udHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQxNzY3ZmMKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9MSUJFUklBX1BPUFVMQVRJT04udHh0CkBAIC0wLDAgKzEsMTggQEAKK0xpYmVyaWEJOgkwCToJMzA0MjAwNAorQm9taSBUZXJyLgk6CTEJOgkxMTQzMTYKK0JvbmcJOgkxCToJMjk5ODI1CitHYmFycG9sdSBDb3VudHkgCToJMQk6CTAKK0dyYW5kIEJhc3NhCToJMQk6CTIxNTMzOAorR3JhbmQgQ2FwZSBNb3VudAk6CTEJOgkxMjAxNDEKK0dyYW5kIEdlZGVoCToJMQk6CTk0NDk3CitHcmFuZCBLcnUgQ291bnR5IFtLcnUgQ29hc3QgVGVyci5dCToJMQk6CTM5MDYyCitMb2ZhCToJMQk6CTM1MTQ5MgorTWFyZ2liaQk6CTEJOgkyMTk0MTcKK01hcnlsYW5kCToJMQk6CTcxOTc3CitNb250c2VycmFkbwk6CTEJOgk4NDM3ODMKK05pbWJhCToJMQk6CTMzODg4NworUml2ZXIgQ2VzcyBbUml2ZXJjZXNzIFRlcnIuXQk6CTEJOgkzODE2NworUml2ZXIgR2VlCToJMQk6CTAKK1Npbm9lCToJMQk6CTc5MjQxCitTYXNzdG93biBUZXJyLiA6IDEgOiAxMTUyNAorTWFyc2hhbGwgVGVyci4gOiAxIDogMjg1NDMKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL0xJQllBX0FSRUEudHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvTElCWUFfQVJFQS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2NjZmRjOQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL0xJQllBX0FSRUEudHh0CkBAIC0wLDAgKzEsNDEgQEAKK0xpYnlhCToJMAk6CTE3NzcwNjAKK0FqZGFiaXlhIChBZ2VkYWJpYSkJOgkxCToJOTE2MjAKK1R1YnJ1cSAoVG9icnVrKSBbQWwgQnV0P25hLW5dIAk6CTEJOgk4Mzg2MAorQWwgSD9pemEtbSBhbCBBa2hkP2FyIAk6CTEJOgkxMjgwMAorQWwgSmFiYWwgYWwgQWtoZGFyIAk6CTEJOgk3ODAwCitBbCBBeml6aXlhaCBbQWwgSmlmYS1yYWhdIAk6CTEJOgkxOTQwCitBbCBKdWZyYWggCToJMQk6CTExNzQxMAorQWwgS3VmcmFoIAk6CTEJOgk0ODM1MTAKK0FsIE1hcmogCToJMQk6CTEwMDAwCitBbCBNYXJxYWIgCToJMQk6CTMwMDAKK0FsIFFhdD9ydS1uIAk6CTEJOiAzMzAwCitBbCBRdWJiYWggCToJMQk6CTE0NzIyCitBbCBXYS1oP2FoIAk6CTEJOgkxMDg2NzAKK0FsIEtob21zIAk6CTEJOgk1MjUwCitBc2ggU2hhdGkgCToJMQk6CTUyNTAKK0F6IHphd2lhIChBenphd2l5YSkgCToJMQk6CTE1MjAKK0JhbmdoYXppIAk6CTEJOgk4MDAKK0JhbmktIFdhbGktZCAJOgkxCToJMTk3MTAKK0Rhcm5haCAJOgkxCToJNDkwOAorR2hhZGFtaXMgCToJMQk6CTUxNzUwCitHaGFyeWFuIAk6CTEJOgk0NjYwCitHaGEtdCAJOgkxCToJNzI3MDAKK0phZ2hidS1iIAk6CTEJOgkzMzg0NworTWlzdXJhdGEgCToJMQk6CTI3NzAKK01pemRhaCAJOgkxCToJNzIxODAKK011cnp1cSAJOgkxCToJMzQ5NzkwCitOYS1sdS10IAk6CTEJOgkxNTMwMAorU2FiaGEJOgkxCToJMTUzMzAKK1M/YWJyYS10YWggUz91cm1hLW4gCToJMQk6CTEzNzAKK1N1cnQgKFNpcnRlKQk6CTEJOgk3NzY2MAorVGEtanUtcmEtJyB3YSBhbiBOYXdhLWg/aSBhbCBBcmJhLT8gCToJMQk6CTU4NDAKK1RyaXBvbGkgKFRhcmFidWx1cykJOgkxCToJMTgzMAorVGFyaHVuYWgJOgkxCToJNTg0MAorQXdiYXJpICh1YmFyaSkgW1dhLWRpLSBhbCBIP2F5YS10XSAJOgkxCToJMzE4OTAKK1lhZnJhbiAoWWVmcmVuKSAJOgkxCToJOTMxMAorTlVRQVQgQUwgS0hBTVMgW1p1d2FyYV0gOiAxIDogMTU2MjQ4IAorQWwgRmF0YWggOiAxIDogNDM3CitTQVdGQUpKSU4gKFNPRlVMSkVFTikgOiAxIDogMjgyOTAJCitaRUxFSVRJTiAoWkxJVEVOKSA6IDEgOiAzNzM4CisKKwpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvTElCWUFfUE9QVUxBVElPTi50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9MSUJZQV9QT1BVTEFUSU9OLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMDU0MzAzCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvTElCWUFfUE9QVUxBVElPTi50eHQKQEAgLTAsMCArMSw0MyBAQAorTGlieWEJOgkwCToJNTkwMDc1NAorQWpkYWJpeWEgKEFnZWRhYmlhKQk6CTEJOgkxNjU4MzkKK1R1YnJ1USAoVG9icnVrKSBbQWwgQnV0P25hLW5dIAk6CTEJOgk0NTI3MTQKK0FsIEg/aXphLW0gYWwgQWtoZD9hciAJOgkxCToJMTA4ODYwCitBbCBKYWJhbCBhbCBBa2hkYXIgCToJMQk6CTE5NDE4NQorQWwgQXppeml5YWggW0FsIEppZmEtcmFoXSAJOgkxCToJMjg5MzQwCitBbCBKdWZyYWggCToJMQk6CTQ1MTE3CitBbCBLdWZyYWggCToJMQk6CTUxNDMzCitBbCBNYXJqIAk6CTEJOgkxMTYzMTgKK0FsIE1hcnFhYiAJOgkxCToJMzI4MjkyCitBbCBRYXQ/cnUtbiAJOgkxCToJODA5NzggCitBbCBRdWJiYWggCToJMQk6CTg5NTkzCitBbCBXYS1oP2FoIAk6CTEJOgkyOTI1NworQWwgS2hvbXMgCToJMQk6CTIwODk1NAorQXNoIFNoYXRpIAk6CTEJOgk3NzIwMworQXogemF3aWEgKEF6emF3aXlhKSAJOgkxCToJMTk3MTc3CitCYW5naGF6aSAJOgkxCToJNjM2OTkyCitCYW5pLSBXYWxpLWQgCToJMQk6CTc3NDI0CitEYXJuYWggCToJMQk6CTgxMTc0CitHaGFkYW1pcyAJOgkxCToJMTkwMDAKK0doYXJ5YW4gCToJMQk6CTE2MTQwOAorR2hhLXQgCToJMQk6CTIyNzcwCitKYWdoYnUtYiAJOgkxCToJIDcwOTAKK01pc3VyYXRhIAk6CTEJOgkzNjAyNTEKK01pemRhaCAJOgkxCToJNDE0NzYKK011cnp1cSAJOgkxCToJNjg3MTgKK05hLWx1LXQgCToJMQk6CTg2ODAxCitTYWJoYQk6CTEJOgkxMjY2MTAKK1M/YWJyYS10YWggUz91cm1hLW4gCToJMQk6CTE1MjUyMQorU3VydCBbU3VydCAoU2lydGUpXQk6CTEJOgkxNTYzODkKK1RhLWp1LXJhLScgd2EgYW4gTmF3YS1oP2kgYWwgQXJiYS0/IAk6CTEJOgkgOTA4MAorVHJpcG9saSAoVGFyYWJ1bHVzKQk6CTEJOgkxMTQ5OTU3CitUYXJodW5haAk6CTEJOgkyOTYwOTIKK0F3YmFyaSAodWJhcmkpIFtXYS1kaS0gYWwgSD9heWEtdF0gCToJMQk6CTcyNTg3CitZYWZyYW4gKFllZnJlbikgCToJMQk6CTExNworTlVRQVQgQUwgS0hBTVMgW1p1d2FyYV0gOiAxIDogMTgwNDAwCitBbCBGYXRhaCA6IDEgOiA4NjgwMAorU0FXRkFKSklOIChTT0ZVTEpFRU4pIDogMSA6IDkzNjg4CQorWkVMRUlUSU4gKFpMSVRFTikgOiAxIDogMjk1ODAKKworCisKKwpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvTElFQ0hURU5TVEVJTl9BUkVBLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL0xJRUNIVEVOU1RFSU5fQVJFQS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2ZmNGMyZgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL0xJRUNIVEVOU1RFSU5fQVJFQS50eHQKQEAgLTAsMCArMSBAQAorIExpY2h0ZW5zdGVpbiA6IDEgOiAxNjAuMApkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvTElFQ0hURU5TVEVJTl9QT1BVTEFUSU9OLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL0xJRUNIVEVOU1RFSU5fUE9QVUxBVElPTi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTljMGE1YwotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL0xJRUNIVEVOU1RFSU5fUE9QVUxBVElPTi50eHQKQEAgLTAsMCArMSBAQAorIExpY2h0ZW5zdGVpbiA6IDEgOiAzMzMwNwpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvTElUSFVBTklBX0FSRUEudHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvTElUSFVBTklBX0FSRUEudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJiOGE2N2QKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9MSVRIVUFOSUFfQVJFQS50eHQKQEAgLTAsMCArMSBAQAorTElUSFVBTklBIDogMCA6IDY1MzAwCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9MSVRIVUFOSUFfUE9QVUxBVElPTi50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9MSVRIVUFOSUFfUE9QVUxBVElPTi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmEzMTJmYQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL0xJVEhVQU5JQV9QT1BVTEFUSU9OLnR4dApAQCAtMCwwICsxIEBACitMSVRIVUFOSUEgOiAwIDogMzQ4Mzk3MgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvTFVYRU1CT1VSR19BUkVBLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL0xVWEVNQk9VUkdfQVJFQS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTdjMmNlZQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL0xVWEVNQk9VUkdfQVJFQS50eHQKQEAgLTAsMCArMSBAQAorIExVWEVNQk9VUkcgKEdSQU5ELURVQ0hFKSA6IDEgOiAyNTg2LjAKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL0xVWEVNQk9VUkdfUE9QVUxBVElPTi50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9MVVhFTUJPVVJHX1BPUFVMQVRJT04udHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ1YTFhNzEKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9MVVhFTUJPVVJHX1BPUFVMQVRJT04udHh0CkBAIC0wLDAgKzEgQEAKKyBMVVhFTUJPVVJHIChHUkFORC1EVUNIRSkgOiAxIDogMApkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvTUFDQVVfQVJFQS50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9NQUNBVV9BUkVBLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNjYxZTM1Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvTUFDQVVfQVJFQS50eHQKQEAgLTAsMCArMSw1IEBACitNQUNBVTowOjI1CitNQUNBVToxOjQuOTgwCitNQUNBVS0xOjI6Mi41Njc5NTIKK01BQ0FVLTM6MjoxLjcwMTg4MworTUFDQVUtMjoyOjEuMDAwMDAwCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9NQUNBVV9QT1BVTEFUSU9OLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL01BQ0FVX1BPUFVMQVRJT04udHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgxNDBiMjYKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9NQUNBVV9QT1BVTEFUSU9OLnR4dApAQCAtMCwwICsxLDUgQEAKK01BQ0FVOjA6Mzg4NTc2OjE1NTQzLjA0MDAwMAorTUFDQVU6MTozODg1NzY6NzgwMjcuMzA5MjM3CitNQUNBVS0xOjI6MTI5NTI1OjUwNDM5LjE1NjcwMworTUFDQVUtMjoyOjEyOTUyNToxMjk1MjUuMzMzMzMzCitNQUNBVS0zOjI6MTI5NTI1Ojc2MTA3LjA3Mjc3NApkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvTUFDRURPTklBX0FSRUEudHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvTUFDRURPTklBX0FSRUEudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJiZWI3YmYKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9NQUNFRE9OSUFfQVJFQS50eHQKQEAgLTAsMCArMSwxMjcgQEAKK01hY2Vkb25pYQk6CTAJOgkyNTMzMworQXJhY2lub3ZvICAJOgkxCToJMAorQmFjCToJMQk6CTAKK0JlbGNpc3RhIAk6CTEJOgkwCitCZXJvdm8gCToJMQk6CTAKK0Jpc3RyaWNhIAk6CTEJOgkwCitCaXRvbGEgCToJMQk6CTAKK0JsYXRlYyAJOgkxCToJMAorQm9nZGFuY2kgCToJMQk6CTAKK0JvZ29taWxhIAk6CTEJOgkwCitCb2dvdmluamUgCToJMQk6CTAKK0Jvc2lsb3ZvIAk6CTEJOgkwCitCcnZlbmljYSAJOgkxCToJMAorQ2FwYXJpIAk6CTEJOgkwCitDZW50YXIgCToJMQk6CTAKK0NlbnRhciBadXBhIAk6CTEJOgkwCitDKGFpciAJOgkxCToJMAorQyhhmmthIAk6CTEJOgkwCitDKGVncmFuZSAJOgkxCToJMAorQyhlmmlub3ZvIAk6CTEJOgkwCitDKHVjKGVyLVNhbmRldm8gCToJMQk6CTAKK0RlYmFyIAk6CTEJOgkwCitEZWxjKGV2byAJOgkxCToJMAorRGVsb2dvnmRpIAk6CTEJOgkwCitEZW1pciBIaXNhciAJOgkxCToJMAorRGVtaXIgS2FwaWphIAk6CTEJOgkwCitEb2JydZpldm8gCToJMQk6CTAKK0RvbG5hIEJhbmppY2EgCToJMQk6CTAKK0RvbG5lbmkgCToJMQk6CTAKK0RydWdvdm8gCToJMQk6CTAKK0SeZXBjKGmadGUgCToJMQk6CTAKK0dhemkgQmFiYSAJOgkxCToJMAorR2V2Z2VsaWphIAk6CTEJOgkwCis/b3JjaGUgUGV0cm92IAk6CTEJOgkwCitHb3N0aXZhciAJOgkxCToJMAorR3JhZHNrbyAJOgkxCToJMAorSWxpbmRlbiAJOgkxCToJMAorSXp2b3IgCToJMQk6CTAKK0plZ3Vub3ZjZSAJOgkxCToJMAorS2FtZW5qYW5lIAk6CTEJOgkwCitLYXJiaW5jaSAJOgkxCToJMAorS2FycG+aIAk6CTEJOgkwCitLYXZhZGFyY2kgCToJMQk6CTAKK0tpYyhldm8gCToJMQk6CTAKK0tpc2VsYSBWb2RhIAk6CTEJOgkwCitLbGVjKGV2Y2UgCToJMQk6CTAKK0tvYyhhbmkgCToJMQk6CTAKK0tvbmMoZSAJOgkxCToJMAorS29uZG92byAJOgkxCToJMAorS29ub3BpmnRlIAk6CTEJOgkwCitLb3NlbCAJOgkxCToJMAorS3JhdG92byAJOgkxCToJMAorS3JpdmEgUGFsYW5rYSAJOgkxCToJMAorS3Jpdm9nYZp0YW5pIAk6CTEJOgkwCitLcnWaZXZvIAk6CTEJOgkwCitLdWtsaZogCToJMQk6CTAKK0t1a3VyZWMoYW5pIAk6CTEJOgkwCitLdW1hbm92byAJOgkxCToJMAorTGFidW5pmnRhIAk6CTEJOgkwCitMaXBrb3ZvIAk6CTEJOgkwCitMb3pvdm8gCToJMQk6CTAKK0x1a292byAJOgkxCToJMAorTWFrZWRvbnNrYSBLYW1lbmljYSAJOgkxCToJMAorTWFrZWRvbnNraSBCcm9kIAk6CTEJOgkwCitNYXZyb3ZpIEFub3ZpIAk6CTEJOgkwCitNZZplaZp0YSAJOgkxCToJMAorTWlyYXZjaSAJOgkxCToJMAorTW9naWxhIAk6CTEJOgkwCitNdXJ0aW5vIAk6CTEJOgkwCitOZWdvdGlubyAJOgkxCToJMAorTmVnb3Rpbm8tUG9sb5prbyAJOgkxCToJMAorTm92YWNpIAk6CTEJOgkwCitOb3ZvIFNlbG8gCToJMQk6CTAKK09ibGWaZXZvIAk6CTEJOgkwCitPaHJpZCAJOgkxCToJMAorT3JhmmFjIAk6CTEJOgkwCitPcml6YXJpIAk6CTEJOgkwCitPc2xvbWVqIAk6CTEJOgkwCitQZWhjKGV2byAJOgkxCToJMAorUGV0cm92ZWMgCToJMQk6CTAKK1BsYXNuaWNhIAk6CTEJOgkwCitQb2RhcmWaIAk6CTEJOgkwCitQcmlsZXAgCToJMQk6CTAKK1Byb2JpmnRpcCAJOgkxCToJMAorUmFkb3ZpmiAJOgkxCToJMAorUmFua292Y2UgCToJMQk6CTAKK1Jlc2VuIAk6CTEJOgkwCitSb3NvbWFuIAk6CTEJOgkwCitSb3N0dZphIAk6CTEJOgkwCitTYW1va292IAk6CTEJOgkwCitTYXJhaiAJOgkxCToJMAorimlwa292aWNhIAk6CTEJOgkwCiuKdGlwIAk6CTEJOgkwCiuKdXRvIE9yaXphcmkgCToJMQk6CTAKK1NvcGmadGUgCToJMQk6CTAKK1NvcG90bmljYSAJOgkxCToJMAorU3JiaW5vdm8gCToJMQk6CTAKK1N0YXIgRG9qcmFuIAk6CTEJOgkwCitTdGFyYXZpbmEgCToJMQk6CTAKK1N0YXJvIE5hZ29yaWMoYW5lIAk6CTEJOgkwCitTdHJ1Z2EgCToJMQk6CTAKK1N0cnVtaWNhIAk6CTEJOgkwCitTdHVkZW5pYyhhbmkgCToJMQk6CTAKK1N2ZXRpIE5pa29sZSAJOgkxCToJMAorVGVhcmNlIAk6CTEJOgkwCitUZXRvdm8gCToJMQk6CTAKK1RvcG9sYyhhbmkgCToJMQk6CTAKK1ZhbGFuZG92byAJOgkxCToJMAorVmFzaWxldm8gCToJMQk6CTAKK1ZlbGVzIAk6CTEJOgkwCitWZWxlmnRhIAk6CTEJOgkwCitWZXZjKGFuaSAJOgkxCToJMAorVmluaWNhIAk6CTEJOgkwCitWaXRvbGmadGUgCToJMQk6CTAKK1ZyYW5lmnRpY2EgCToJMQk6CTAKK1ZyYXBjKGmadGUgCToJMQk6CTAKK1ZyYXRuaWNhIAk6CTEJOgkwCitWcnV0b2sgCToJMQk6CTAKK1phamFzIAk6CTEJOgkwCitaZWxlbmlrb3ZvIAk6CTEJOgkwCiuOZWxpbm8gCToJMQk6CTAKK45pdG+aZSAJOgkxCToJMAorWmxldG92byAJOgkxCToJMAorWnJub3ZjaSAJOgkxCToJMAorCisKKwpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvTUFDRURPTklBX1BPUFVMQVRJT04udHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvTUFDRURPTklBX1BPUFVMQVRJT04udHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2ZGVkOWQKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9NQUNFRE9OSUFfUE9QVUxBVElPTi50eHQKQEAgLTAsMCArMSwzIEBACis6MDoyMTA0MDM1OjIxNQorTUFLRURPTklKQToxOjIyNjcwNTE6MTgyLjkyNzAwOAorTUFLRURPTklKQToyOjIyNjcwNTE6MTgyLjkyNzAwOApkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvTUFEQUdBU0NBUl9BUkVBLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL01BREFHQVNDQVJfQVJFQS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2VjYWY2NwotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL01BREFHQVNDQVJfQVJFQS50eHQKQEAgLTAsMCArMSwxMTggQEAKK01hZGFnYXNjYXIJOgkwCToJNTg3MDQwCitBbnRhbmFuYXJpdm8gOiAxIDogNTgyODMKK0FtYmF0b2xhbXB5ICAJOgkxCToJMTc1NQorQW1ib2hpZHJhdHJpbW8gCToJMQk6CTE0MDIKK0FuZHJhbWFzaW5hIAk6CTEJOgkxMzcwCitBbmpvem9yb2JlIAk6CTEJOgkzNzE0CitBbmthem9iZSAJOgkxCToJNzQ1OAorQW50YW5hbmFyaXZvLUF0c2ltb25kcmFubyAJOgkxCToJMzY5CitBbnRhbmFuYXJpdm8tQXZhcmFkcmFubyAJOgkxCToJNjE3CitBbnRhbmFuYXJpdm8tUmVuaXZvaGl0cmEgCToJMQk6CTg4CitBbnRhbmlmb3RzeSAJOgkxCToJMzAwNQorQW50c2lyYWJlIEkgCToJMQk6CTE0NAorQW50c2lyYWJlIElJIAk6CTEJOgkyMjQxCitBcml2b25pbWFtbyAJOgkxCToJMTYyNworQmV0YWZvIAk6CTEJOgk4OTk0CitGYXJhdHNpaG8gCToJMQk6CTIwMzQKK0Zlbm9hcml2by1BZm92b2FueSAJOgkxCToJNzc2MQorTWFuamFrYW5kcmlhbmEgCToJMQk6CTE2NjAKK01pYXJpbmFyaXZvIAk6CTEJOgkyODE4CitTb2F2aW5hbmRyaWFuYSAJOgkxCToJMTg1NgorVHNpcm9hbm9tYW5kaWR5IAk6CTEJOgk4OTc3CitBbnRzaXJhbmFuYSAJOgkxCToJNDMwNTYKK0FtYmFuamEgCToJMQk6CTYzMjgKK0FtYmlsb2JlIAk6CTEJOgk3NzE0CitBbmRhcGEgCToJMQk6CTQ0NDQKK0FudGFsYWhhIAk6CTEJOgk3MDg1CitBbnRzaXJhbmFuYSBJIAk6CTEJOgkyMjIKK0FudHNpcmFuYW5hIElJIAk6CTEJOgk2MDI1CitOb3N5LUJlIAk6CTEJOgkyNDIKK1NhbWJhdmEgCToJMQk6CTQ3ODAKK1ZvaGltYXJpbmEgCToJMQk6CTgyMDQKK0ZpYW5hcmFudHNvYSAJOgkxCToJMTAyMzczCitBbWJhbGF2YW8gCToJMQk6CTUxNTEKK0FtYmF0b2ZpbmFuZHJhaGFuYSAJOgkxCToJMTAzODYKK0FtYm9oaW1haGFzb2EgCToJMQk6CTI1NjAKK0FtYm9zaXRyYSAJOgkxCToJMzE5OQorQmVmb3Rha2EgCToJMQk6CTMwOTcKK0ZhbmRyaWFuYSAJOgkxCToJMjIzMgorRmFyYWZhbmdhbmEgCToJMQk6CTI2MjEKK0ZpYW5hcmFudHNvYSBJIAk6CTEJOgk0MQorRmlhbmFyYW50c29hIElJIAk6CTEJOgkzOTg3CitJYWtvcmEgCToJMQk6CTQ2MzMKK0lmYW5hZGlhbmEgCToJMQk6CTM5NTgKK0lob3N5IAk6CTEJOgkxNzM1OAorSWthbGFtYXZvbnkgCToJMQk6CTkxNjYKK0lrb25nbyAoRm9ydC1DYXJub3QpIAk6CTEJOgkzMjcyCitJdm9oaWJlIAk6CTEJOgk0MTE5CitNYW5ha2FyYS1BdHNpbW8gCToJMQk6CTI5NjEKK01hbmFuZHJpYW5hIAk6CTEJOiAwCSAgCitNYW5hbmphcnkgCToJMQk6CTUyNDUKK01pZG9uZ3ktQXRzaW1vIAk6CTEJOgkyNzAwCitOb3N5LVZhcmlrYSAJOgkxCToJMzkyNQorVmFuZ2FpbmRyYW5vIAk6CTEJOgk0ODYxCitWb2hpcGVubyAJOgkxCToJMTE2MgorVm9uZHJvem8gCToJMQk6CTI5NTMKK01haGFqYW5nYSAJOgkxCToJMTUwMDIzCitBbWJhdG8tYm9pbmEgCToJMQk6CTgwMDUKK0FtYmF0b21haW50eSAJOgkxCToJNTE2NgorQW5hbGFsYXZhIAk6CTEJOgk0MzgwCitBbnRzYWxvdmEgCToJMQk6CTcxOTUKK0FudHNvaGloeSAJOgkxCToJNTEyNQorQmVhbGFuYW5hIAk6CTEJOgk2NTQzCitCZWZhbmRyaWFuYS1BdmFyYXRyYSAJOgkxCToJODM5NAorQmVzYWxhbXB5IAk6CTEJOgkxMTc1MworQm9yaXppbnkgKFBvcnQtQmVyZ2VyKSAJOgkxCToJNzA0NworS2FuZHJlaG8gCToJMQk6CTY4MTYKK01hZXZhdGFuYW5hIAk6CTEJOgkxMTA4NQorTWFoYWphbmdhIEkgCToJMQk6CTkyCitNYWhhamFuZ2EgSUkgCToJMQk6CTQzOTAKK01haW50aXJhbm8gCToJMQk6CTEwMDMxCitNYW1waWtvbnkgCToJMQk6CTQ2MTEKK01hbmRyaXRzYXJhIAk6CTEJOgkxMDUxMgorTWFyb3ZvYXkgCToJMQk6CTM4MDQKK01pdHNpbmpvIAk6CTEJOgk1ODk0CitNb3JhZmVub2JlIAk6CTEJOgk2OTc2CitTb2FsYWxhIAk6CTEJOgk2NTc4CitUc2FyYXRhbmFuYSAJOgkxCToJMTMyMTgKK1RvYW1hc2luYSAJOgkxCToJNzE5MTEKK0FtYmF0b25kcmF6YWthIAk6CTEJOgk2MDc3CitBbXBhcmFmYXJhdm9sYSAJOgkxCToJMzgxNQorQW5kaWxhbWVuYSAJOgkxCToJNzQwNQorQW5vc2liZSAJOgkxCToJMjU5MAorQW50YW5hbWJhby1NYW5hbXBvdHN5IAk6CTEJOgkxMzQyCitGZW5vYXJpdm8tQXRzaW5hbmFuYSAJOgkxCToJMzM2NQorTWFoYW5vcm8gCToJMQk6CTM5NjgKK01hbmFuYXJhIEF2YXJhdHJhIAk6CTEJOgk0NjIxCitNYXJvYW50c2V0cmEgCToJMQk6CTY5MTcKK01hcm9sYW1ibyAJOgkxCToJMzUzMQorTW9yYW1hbmdhIAk6CTEJOgk3Mjc4CitOb3N5LUJvcmFoYSAoU2FpbnRlIE1hcmllKSAJOgkxCToJMjIyCitTb2FuaWVyYW5hLUl2b25nbyAJOgkxCToJNDgxNAorVG9hbWFzaW5hIEkgCToJMQk6CTMyMgorVG9hbWFzaW5hIElJIAk6CTEJOgk0ODE2CitWYXRvbWFuZHJ5IAk6CTEJOgkyNjIwCitWYXZhdGVuaW5hIAk6CTEJOgkyODI2CitWb2hpYmluYW55IChCcmlja2F2aWxsZSkgCToJMQk6CSAgMAorVG9saWFyeSAJOgkxCToJMTYxNDA1CitBbWJvYXNhcnktQXRzaW1vIAk6CTEJOgkxMDIxMQorQW1ib3ZvbWJlLUFuZHJveSAJOgkxCToJNTgyOQorQW1wYW5paHkgCToJMQk6CTEzMDM3CitBbmthem9hYm8tQXRzaW1vIAk6CTEJOgk3Mzg1CitCZWtpbHkgCToJMQk6CTUwOTcKK0JlbG9oYSAJOgkxCToJNDY2OQorQmVsb24naSBUc2lyaWJpaGluYSAJOgkxCToJNzU3MworQmVuZW5pdHJhIAk6CTEJOgk0OTEyCitCZXJvcm9oYSAJOgkxCToJNzIxMAorQmV0aW9reS1BdHNpbW8gCToJMQk6CTkxMDMKK0JldHJva2EgCToJMQk6CTEzMzE1CitNYWhhYm8gCToJMQk6CTEzODYzCitNYW5qYSAJOgkxCToJODcyNQorTWlhbmRyaXZhem8gCToJMQk6CTEyNTQ1CitNb3JvbWJlIAk6CTEJOgk3NjM0CitNb3JvbmRhdmEgCToJMQk6CTU2NDgKK1Nha2FyYWhhIAk6CTEJOgk4NDQ3CitUYW9sYW5hcm8gCToJMQk6CTUyNzYKK1RvbGlhcnkgSSAJOgkxCToJMzkKK1RvbGlhcnkgSUkgCToJMQk6CTY3NzYKK1RzaWhvbWJlIAk6CTEJOgkyMjIzCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9NQURBR0FTQ0FSX1BPUFVMQVRJT04udHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvTUFEQUdBU0NBUl9QT1BVTEFUSU9OLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYzBkNmUxCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvTUFEQUdBU0NBUl9QT1BVTEFUSU9OLnR4dApAQCAtMCwwICsxLDExOCBAQAorTWFkYWdhc2Nhcgk6CTAJOgkxODU5NTQ2OQorQW50YW5hbmFyaXZvIDogMSA6IDQ1ODA3ODgKK0FtYmF0b2xhbXB5ICAJOgkxCToJMjE1NTQ0CitBbWJvaGlkcmF0cmltbyAJOgkxCToJMjM1NTE0CitBbmRyYW1hc2luYSAJOgkxCToJMTM5MjE3CitBbmpvem9yb2JlIAk6CTEJOgkxNDU0MTAKK0Fua2F6b2JlIAk6CTEJOgkxMTEwNjgKK0FudGFuYW5hcml2by1BdHNpbW9uZHJhbm8gCToJMQk6CTI5MjA1NworQW50YW5hbmFyaXZvLUF2YXJhZHJhbm8gCToJMQk6CTIwNzk0MgorQW50YW5hbmFyaXZvLVJlbml2b2hpdHJhIAk6CTEJOgk5MDM0NTAKK0FudGFuaWZvdHN5IAk6CTEJOgkyNzg3NDEKK0FudHNpcmFiZSBJIAk6CTEJOgkxNjAzNTYKK0FudHNpcmFiZSBJSSAJOgkxCToJMzMzOTc5CitBcml2b25pbWFtbyAJOgkxCToJMjYwMjYxCitCZXRhZm8gCToJMQk6CTMwMTY3MQorRmFyYXRzaWhvIAk6CTEJOgkxNjUzMjcKK0Zlbm9hcml2by1BZm92b2FueSAJOgkxCToJODI0MDIKK01hbmpha2FuZHJpYW5hIAk6CTEJOgkyMDI3NzEKK01pYXJpbmFyaXZvIAk6CTEJOgkxODEyMTgKK1NvYXZpbmFuZHJpYW5hIAk6CTEJOgkxNDcyMTcKK1RzaXJvYW5vbWFuZGlkeSAJOgkxCToJMjE2NjQyCitBbnRzaXJhbmFuYSAJOgkxCToJMTE4ODQyNQorQW1iYW5qYSAJOgkxCToJMTI1MDU2CitBbWJpbG9iZSAJOgkxCToJMTQwNTU2CitBbmRhcGEgCToJMQk6CTE0Nzc3MgorQW50YWxhaGEgCToJMQk6CTE4NjMyMgorQW50c2lyYW5hbmEgSSAJOgkxCToJNzM0OTEKK0FudHNpcmFuYW5hIElJIAk6CTEJOgk3MTQxNgorTm9zeS1CZSAJOgkxCToJMzY2MzYKK1NhbWJhdmEgCToJMQk6CTIzNzQ4OAorVm9oaW1hcmluYSAJOgkxCToJMTY5Njg3CitGaWFuYXJhbnRzb2EgCToJMQk6CTMzNjYyOTEKK0FtYmFsYXZhbyAJOgkxCToJMTkwMDEyCitBbWJhdG9maW5hbmRyYWhhbmEgCToJMQk6CTExNjA2NgorQW1ib2hpbWFoYXNvYSAJOgkxCToJMTk3Mjc5CitBbWJvc2l0cmEgCToJMQk6CTIyOTEyMworQmVmb3Rha2EgCToJMQk6CTI0MDQ1CitGYW5kcmlhbmEgCToJMQk6CTE4OTU0NAorRmFyYWZhbmdhbmEgCToJMQk6CTIwNzE2NworRmlhbmFyYW50c29hIEkgCToJMQk6CTE0NDIyNQorRmlhbmFyYW50c29hIElJIAk6CTEJOgk0MzEwMTEKK0lha29yYSAJOgkxCToJMjk5ODcKK0lmYW5hZGlhbmEgCToJMQk6CTEzNjg5OQorSWhvc3kgCToJMQk6CTEwNjU5MQorSWthbGFtYXZvbnkgCToJMQk6CTU2MTQ4CitJa29uZ28gKEZvcnQtQ2Fybm90KSAJOgkxCToJMTA3NzQ4CitJdm9oaWJlIAk6CTEJOgkzNDI4OQorTWFuYWthcmEtQXRzaW1vIAk6CTEJOgkyMzU3NjQKK01hbmFuZHJpYW5hIAk6CTEJOgk5MDY5MworTWFuYW5qYXJ5IAk6CTEJOgkyMzM2OTcKK01pZG9uZ3ktQXRzaW1vIAk6CTEJOgkyNTkxMQorTm9zeS1WYXJpa2EgCToJMQk6CTE3NzgxNworVmFuZ2FpbmRyYW5vIAk6CTEJOgkyMTAwMjgKK1ZvaGlwZW5vIAk6CTEJOgk5ODcwMQorVm9uZHJvem8gCToJMQk6CTkzNTQ3CitNYWhhamFuZ2EgCToJMQk6CTE3MzM5MTcKK0FtYmF0by1ib2luYSAJOgkxCToJMTA4ODA3CitBbWJhdG9tYWludHkgCToJMQk6CTE5NTA5CitBbmFsYWxhdmEgCToJMQk6CTg5OTE3CitBbnRzYWxvdmEgCToJMQk6CTMwMDYyCitBbnRzb2hpaHkgCToJMQk6CTEwNzcxNworQmVhbGFuYW5hIAk6CTEJOgkxMDA3NTAKK0JlZmFuZHJpYW5hLUF2YXJhdHJhIAk6CTEJOgkxNjk0MjMKK0Jlc2FsYW1weSAJOgkxCToJMzc3ODIKK0Jvcml6aW55IChQb3J0LUJlcmdlcikgCToJMQk6CTEwMzY2OAorS2FuZHJlaG8gCToJMQk6CTExODkyCitNYWV2YXRhbmFuYSAJOgkxCToJMTA2NjI0CitNYWhhamFuZ2EgSSAJOgkxCToJMTM1NjYwCitNYWhhamFuZ2EgSUkgCToJMQk6CTQ2NzkwCitNYWludGlyYW5vIAk6CTEJOgk1MjcwMAorTWFtcGlrb255IAk6CTEJOgk4NDM3NQorTWFuZHJpdHNhcmEgCToJMQk6CTIwNDUwMworTWFyb3ZvYXkgCToJMQk6CTEyNDczOQorTWl0c2luam8gCToJMQk6CTUzNDA1CitNb3JhZmVub2JlIAk6CTEJOgkyMDQ3NQorU29hbGFsYSAJOgkxCToJMjc0MzQKK1RzYXJhdGFuYW5hIAk6CTEJOgk5NzY4NQorVG9hbWFzaW5hIAk6CTEJOgkyNTkzMDYzCitBbWJhdG9uZHJhemFrYSAJOgkxCToJMjQwMTIzCitBbXBhcmFmYXJhdm9sYSAJOgkxCToJMjEyOTIyCitBbmRpbGFtZW5hIAk6CTEJOgk0MTEzNQorQW5vc2liZSAJOgkxCToJODQ5ODIKK0FudGFuYW1iYW8tTWFuYW1wb3RzeSAJOgkxCToJNDYxNzQKK0Zlbm9hcml2by1BdHNpbmFuYW5hIAk6CTEJOgkyNDA1OTUKK01haGFub3JvIAk6CTEJOgkyMTIxMTgKK01hbmFuYXJhIEF2YXJhdHJhIAk6CTEJOgkxMDYxODQKK01hcm9hbnRzZXRyYSAJOgkxCToJMTY3NDE1CitNYXJvbGFtYm8gCToJMQk6CTEyMDA1MQorTW9yYW1hbmdhIAk6CTEJOgkyMTc5NTMKK05vc3ktQm9yYWhhIChTYWludGUgTWFyaWUpIAk6CTEJOgkxNjMyNQorU29hbmllcmFuYS1Jdm9uZ28gCToJMQk6CTk5MzczCitUb2FtYXNpbmEgSSAJOgkxCToJMTc5MDQ1CitUb2FtYXNpbmEgSUkgCToJMQk6CTE2ODM4OAorVmF0b21hbmRyeSAJOgkxCToJMTI5MTQ2CitWYXZhdGVuaW5hIAk6CTEJOgkxNTE4MzMKK1ZvaGliaW5hbnkgKEJyaWNrYXZpbGxlKSAJOgkxCToJMTU5MzAxCitUb2xpYXJ5IAk6CTEJOgkyMjI5NTUwCitBbWJvYXNhcnktQXRzaW1vIAk6CTEJOgkxNTEyNDUKK0FtYm92b21iZS1BbmRyb3kgCToJMQk6CTE4MzczNAorQW1wYW5paHkgCToJMQk6CTIwNTI4MgorQW5rYXpvYWJvLUF0c2ltbyAJOgkxCToJNDc5NDkKK0Jla2lseSAJOgkxCToJMTI0NzY0CitCZWxvaGEgCToJMQk6CTYzNzA5CitCZWxvbidpIFRzaXJpYmloaW5hIAk6CTEJOgk1MjY3NAorQmVuZW5pdHJhIAk6CTEJOgkyNjMxNgorQmVyb3JvaGEgCToJMQk6CTM5MjQxCitCZXRpb2t5LUF0c2ltbyAJOgkxCToJMTY1MTk5CitCZXRyb2thIAk6CTEJOgkxMzQ3NzEKK01haGFibyAJOgkxCToJODYzODMKK01hbmphIAk6CTEJOgk1NjUzMgorTWlhbmRyaXZhem8gCToJMQk6CTgyNDQ3CitNb3JvbWJlIAk6CTEJOgk5Njc2NQorTW9yb25kYXZhIAk6CTEJOgk4MDU4NgorU2FrYXJhaGEgCToJMQk6CTY3ODcwCitUYW9sYW5hcm8gCToJMQk6CTIxMzI3MAorVG9saWFyeSBJIAk6CTEJOgkxMDE2NjEKK1RvbGlhcnkgSUkgCToJMQk6CTE4NDI1NgorVHNpaG9tYmUgCToJMQk6CTY0ODk2CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9NQUxBV0lfQVJFQS50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9NQUxBV0lfQVJFQS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmExZjU4YgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL01BTEFXSV9BUkVBLnR4dApAQCAtMCwwICsxLDQgQEAKK01hbGF3aQk6CTAJOgkxMTg0ODAKK0NlbnRyYWw0IFtDZW50cmFsXQk6CTEJOgkzNTU5MgorTm9ydGhlcm4xIFtOb3J0aGVybl0JOgkxCToJMjYyNzYKK1NvdXRoZXJuMiBbU291dGhlcm5dCToJMQk6CTMxNzUzCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9NQUxBV0lfUE9QVUxBVElPTi50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9NQUxBV0lfUE9QVUxBVElPTi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmNiNGEzYgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL01BTEFXSV9QT1BVTEFUSU9OLnR4dApAQCAtMCwwICsxLDQgQEAKK01hbGF3aQk6CTAJOgkxMzAxMzkyNgorQ2VudHJhbDQgW0NlbnRyYWwgUmVnaW9uXQk6CTEJOgk0OTkyNzUzCitOb3J0aGVybjEgW05vcnRoZXJuIFJlZ2lvbl0JOgkxCToJMTQyNzgwNworU291dGhlcm4yIFtTb3V0aGVybiBSZWdpb25dCToJMQk6CTU1MTczNzQKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL01BTElfQVJFQS50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9NQUxJX0FSRUEudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI4NGM4NjkKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9NQUxJX0FSRUEudHh0CkBAIC0wLDAgKzEgQEAKK01BTEkgOiAwIDogMTI0MjI0OApkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvTUFMSV9QT1BVTEFUSU9OLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL01BTElfUE9QVUxBVElPTi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTUxNmYyOQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL01BTElfUE9QVUxBVElPTi50eHQKQEAgLTAsMCArMSBAQAorTUFMSSA6IDAgOiAxMDk1MTE3NgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvTUFVUklUQU5JQV9BUkVBLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL01BVVJJVEFOSUFfQVJFQS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTQ2NGMzNQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL01BVVJJVEFOSUFfQVJFQS50eHQKQEAgLTAsMCArMSBAQAorTUFVUklUQU5JQSA6IDAgOiAxMDMwNzAwCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9NQVVSSVRBTklBX1BPUFVMQVRJT04udHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvTUFVUklUQU5JQV9QT1BVTEFUSU9OLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iODZhYzQyCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvTUFVUklUQU5JQV9QT1BVTEFUSU9OLnR4dApAQCAtMCwwICsxIEBACitNQVVSSVRBTklBIDogMCA6IDI1MDgxNTkKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL01BVVJJVElVU19BUkVBLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL01BVVJJVElVU19BUkVBLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jM2IyNmZkCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvTUFVUklUSVVTX0FSRUEudHh0CkBAIC0wLDAgKzEsMTQgQEAKK01hdXJpdGl1cyA6IDAgOiAyMDQwCitNYXVyaXRpdXMgOiAxIDogMjA0MAorQmxhY2sgUml2ZXIgIAk6CTEJOgkwCitGbGFjcSAJOgkxCToJMAorR3JhbmQgUG9ydCAJOgkxCToJMAorTW9rYSAJOgkxCToJMAorUGFtcGxlbW91c3NlcyAJOgkxCToJMAorUGxhaW5lIFdpbGhlbXMgCToJMQk6CTAKK1BvcnQgTG91aXMgCToJMQk6CTAKK1JpdmllcmUgZHUgUmVtcGFydCAJOgkxCToJMAorU2F2YW5uZSAJOgkxCToJMAorSXNsYW5kIG9mIFJvZHJpZ3VlcyAJOgkxCToJMTA0CisKKwpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvTUFVUklUSVVTX1BPUFVMQVRJT04udHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvTUFVUklUSVVTX1BPUFVMQVRJT04udHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgwNDRiZmEKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9NQVVSSVRJVVNfUE9QVUxBVElPTi50eHQKQEAgLTAsMCArMSwxMiBAQAorTWF1cml0aXVzIDogMCA6IDEyNDUwMDAKK01hdXJpdGl1cyA6IDEgOiAxMjQ1MDAwCitCbGFjayBSaXZlciAgCToJMQk6CTYwNTg3CitGbGFjcSAJOgkxCToJMTI2ODM5CitHcmFuZCBQb3J0IAk6CTEJOgkxMDY2NjUKK01va2EgCToJMQk6CTc1NDc5CitQYW1wbGVtb3Vzc2VzIAk6CTEJOgkxMjIyNTIKK1BsYWluZSBXaWxoZW1zIAk6CTEJOgkzNTgxODIKK1BvcnQgTG91aXMgCToJMQk6CTEyNzg1NQorUml2aWVyZSBkdSBSZW1wYXJ0IAk6CTEJOgk5ODg1NAorU2F2YW5uZSAJOgkxCToJNjYzNTYKK0lzbGFuZCBvZiBSb2RyaWd1ZXMgCToJMQk6CTM1Nzc5CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9NRVhJQ09fQVJFQS50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9NRVhJQ09fQVJFQS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTQzNTNjOQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL01FWElDT19BUkVBLnR4dApAQCAtMCwwICsxLDMzIEBACitNZXhpY28JOgkwCToJMTk3MjU1MAorQWd1YXNjYWxpZW50ZXMgICAJOgkxCToJNTU2OQorQmFqYSBDYWxpZm9ybmlhIE5vcnRlIAk6CTEJOgk3MDExMworQmFqYSBDYWxpZm9ybmlhIFN1ciAJOgkxCToJNzM2NzcKK0NhbXBlY2hlIAk6CTEJOgk1Njg1OQorQ2hpYXBhcyAJOgkxCToJNzU2MjkKK0NoaWh1YWh1YSAJOgkxCToJMjQ3MDg3CitDb2FodWlsYSBkZSBaYXJhZ296YSAJOgkxCToJMTUxNTcxCitDb2xpbWEgCToJMQk6CTU0NTUKK0Rpc3RyaXRvIEZlZGVyYWwgCToJMQk6CTE0OTkKK0R1cmFuZ28gCToJMQk6CTExOTY0OAorR3VhbmFqdWF0byAJOgkxCToJMzAzNTAKK0d1ZXJyZXJvIAk6CTEJOgk2Mzc0OQorSGlkYWxnbyAJOgkxCToJMjA5ODcKK0phbGlzY28gCToJMQk6CTgwMTM3CitNZXhpY28JOgkxCToJMjE0NjEKK01pY2hvYWNhbiBkZSBPY2FtcG8gCToJMQk6CTU5ODY0CitNb3JlbG9zIAk6CTEJOgk0OTQxCitOYXlhcml0IAk6CTEJOgkyNzMzNgorTnVldm8gTGVvbgk6CTEJOgk2NDU1NQorT2F4YWNhIAk6CTEJOgk5NDk2NAorUHVlYmxhIAk6CTEJOgkzMzkxOQorUXVlcmV0YXJvIGRlIEFydGVhZ2EgCToJMQk6CTExNzY5CitRdWludGFuYSBSb28gCToJMQk6CTUwODQzCitTYW4gTHVpcyBQb3Rvc2kJOgkxCToJNjA1NDcKK1NpbmFsb2EgCToJMQk6CTU4MDkyCitTb25vcmEgCToJMQk6CTE4NDkzNAorVGFiYXNjbyAJOgkxCToJMjQ2NjEKK1RhbWF1bGlwYXMgCToJMQk6CTc5ODI5CitUbGF4Y2FsYSAJOgkxCToJNDA2MQorVmVyYWNydXotTGxhdmUgCToJMQk6CTcyODE1CitZdWNhdGFuIAk6CTEJOgkzOTMzNworWmFjYXRlY2FzIAk6CTEJOgk3NDUxNgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvTUVYSUNPX1BPUFVMQVRJT04udHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvTUVYSUNPX1BPUFVMQVRJT04udHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM3ZjljZTgKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9NRVhJQ09fUE9QVUxBVElPTi50eHQKQEAgLTAsMCArMSwzMyBAQAorTWV4aWNvCToJMAk6CTEwNzQ0OTUyNQorQWd1YXNjYWxpZW50ZXMgICAJOgkxCToJMTA2NTQxNgorQmFqYSBDYWxpZm9ybmlhIE5vcnRlIAk6CTEJOgkyODQ0NDY5CitCYWphIENhbGlmb3JuaWEgU3VyIAk6CTEJOgk1MTIxNzAKK0NhbXBlY2hlIAk6CTEJOgk3NTQ3MzAKK0NoaWFwYXMgCToJMQk6CTQyOTM0NTkKK0NoaWh1YWh1YSAJOgkxCToJMzI0MTQ0NAorQ29haHVpbGEgZGUgWmFyYWdvemEgCToJMQk6CTI0OTUyMDAKK0NvbGltYSAJOgkxCToJNTY3OTk2CitEaXN0cml0byBGZWRlcmFsIAk6CTEJOgk4NzIwOTE2CitEdXJhbmdvIAk6CTEJOgkxNTA5MTE3CitHdWFuYWp1YXRvIAk6CTEJOgk0ODkzODEyCitHdWVycmVybyAJOgkxCToJMzExNTIwMgorSGlkYWxnbyAJOgkxCToJMjM0NTUxNAorSmFsaXNjbyAJOgkxCToJNjc1MjExMworTWV4aWNvCToJMQk6CTE0MDA3NDk1CitNaWNob2FjYW4gZGUgT2NhbXBvIAk6CTEJOgkzOTY2MDczCitNb3JlbG9zIAk6CTEJOgkxNjEyODk5CitOYXlhcml0IAk6CTEJOgk5NDk2ODQKK051ZXZvIExlb24JOgkxCToJNDE5OTI5MgorT2F4YWNhIAk6CTEJOgkzNTA2ODIxCitQdWVibGEgCToJMQk6CTUzODMxMzMKK1F1ZXJldGFybyBkZSBBcnRlYWdhIAk6CTEJOgkxNTk4MTM5CitRdWludGFuYSBSb28gCToJMQk6CTExMzUzMDkKK1NhbiBMdWlzIFBvdG9zaQk6CTEJOgkyNDEwNDE0CitTaW5hbG9hIAk6CTEJOgkyNjA4NDQyCitTb25vcmEgCToJMQk6CTIzOTQ4NjEKK1RhYmFzY28gCToJMQk6CTE5ODk5NjkKK1RhbWF1bGlwYXMgCToJMQk6CTMwMjQyMzgKK1RsYXhjYWxhIAk6CTEJOgkxMDY4MjA3CitWZXJhY3J1ei1MbGF2ZSAJOgkxCToJNzExMDIxNAorWXVjYXRhbiAJOgkxCToJMTgxODk0OAorWmFjYXRlY2FzIAk6CTEJOgkxMzY3NjkyCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9NT0xET1ZBX0FSRUEudHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvTU9MRE9WQV9BUkVBLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YTk4YTJkCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvTU9MRE9WQV9BUkVBLnR4dApAQCAtMCwwICsxLDMgQEAKK01PTERPVkE6MDoxMzA2NworTU9MREFWSUE6MToxMjk2MC4yMTAKK01PTERBVklBOjI6MTI5NjAuMjEwMDAwClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvTU9MRE9WQV9QT1BVTEFUSU9OLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL01PTERPVkFfUE9QVUxBVElPTi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGM3OWEzMwotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL01PTERPVkFfUE9QVUxBVElPTi50eHQKQEAgLTAsMCArMSwzIEBACis6MDo0NDczNTcwOjM0MgorTU9MREFWSUE6MTo0NDczNTcwOjM0NS4xNzcyNzcKK01PTERBVklBOjI6NDQ3MzU3MDozNDUuMTc3Mjc3CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9NT0xET1ZJQV9BUkVBLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL01PTERPVklBX0FSRUEudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg0OGJkNDcKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9NT0xET1ZJQV9BUkVBLnR4dApAQCAtMCwwICsxLDMgQEAKK01PTERPVkE6MDoxMzA2NworTU9MREFWSUE6MToxMjk2MC4yMTAKK01PTERBVklBOjI6MTI5NjAuMjEwMDAwCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9NT0xET1ZJQV9QT1BVTEFUSU9OLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL01PTERPVklBX1BPUFVMQVRJT04udHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk1OGY3N2EKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9NT0xET1ZJQV9QT1BVTEFUSU9OLnR4dApAQCAtMCwwICsxLDMgQEAKK01PTERBVklBOjA6NDQ3MzU3MDozNDIKK01PTERBVklBOjE6NDQ3MzU3MDozNDUuMTc3Mjc3CitNT0xEQVZJQToyOjQ0NzM1NzA6MzQ1LjE3NzI3NwpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvTU9OQUNPX1BPUFVMQVRJT04udHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvTU9OQUNPX1BPUFVMQVRJT04udHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg3ZTI5OWEKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9NT05BQ09fUE9QVUxBVElPTi50eHQKQEAgLTAsMCArMSBAQAorOjA6Mjc0MDk6MzY1NDUKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL01PTkdPTElBX0FSRUEudHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvTU9OR09MSUFfQVJFQS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGQ0NDhlZAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL01PTkdPTElBX0FSRUEudHh0CkBAIC0wLDAgKzEsMjMgQEAKK01vbmdvbGlhCToJMAk6CTE1NjQxMTYKK0FyaGFuZ2F5CToJMQk6CTU1MzAwCitCYXlhbi1PbGdpeQk6CTEJOgk0NTcwMAorQmF5YW5ob25nb3IJOgkxCToJMTE2MDAwCitCdWxnYW4JOgkxCToJNDg3MDAKK0dvdmktYWx0YXkJOgkxCToJMTQxNDAwCitDaG9pciAJOgkxCToJNTU0MAorU2FpbnNoYW5kIFtEb3Jub2dvdmldCToJMQk6CTEwOTUwMAorRG9ybm9kCToJMQk6CTEyMzYwMAorRHVuZGdvdmkJOgkxCToJNzQ3MDAKK0R6YXZoYW4JOgkxCToJODI1MDAKK0FydmFpa2hlZXIgW092b3JoYW5nYXldCToJMQk6CTYyOTAwCitEYWxhbnphZGdhZCBbT21ub2dvdmldIAk6CTEJOgkxNjU0MDAKK0JhcnV1bi1VcnQgCToJMQk6CTgyMzAwCitTdWhiYWF0YXIgW1NlbGVuZ2VdCToJMQk6CTQxMTAwCitUb3YJOgkxCToJNzQwMDAKK1V2cwk6CTEJOgk2OTYwMAorS2hvdmQgW0hvdmRdCToJMQk6CTc2MTAwCitNdXJ1biBbSG92c2dvbF0JOgkxCToJMTAwNjAwCitVbmR1cmtoYWFuIFtIZW50aXldCToJMQk6CTgwMzAwCitEYXJraGFuIAk6CTEJOgkzMjgwCitFcmRlbmV0IAk6CTEJOgk4NDAKK1VsYWFuYmFhdGFyIAk6CTEJOgk0NzAwCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9NT05HT0xJQV9QT1BVTEFUSU9OLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL01PTkdPTElBX1BPUFVMQVRJT04udHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc3NmNkZjQKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9NT05HT0xJQV9QT1BVTEFUSU9OLnR4dApAQCAtMCwwICsxLDIzIEBACitNb25nb2xpYQk6CTAJOgkyODMyMjI0CitBcmhhbmdheQk6CTEJOgk5NzA5MQorQmF5YW4tT2xnaXkJOgkxCToJOTEwNjgKK0JheWFuaG9uZ29yCToJMQk6CTg0Nzc5CitCdWxnYW4JOgkxCToJNjE3NzYKK0dvdmktYWx0YXkJOgkxCToJNjM2NzMKK0Nob2lyIAk6CTEJOgkxMjIzMAorU2FpbnNoYW5kIFtEb3Jub2dvdmldCToJMQk6CTUwNTc1CitEb3Jub2QJOgkxCToJNzUzNzMKK0R1bmRnb3ZpCToJMQk6CTUxNTE3CitEemF2aGFuCToJMQk6CTg5OTk5CitBcnZhaWtoZWVyIFtPdm9yaGFuZ2F5XSAJOgkxCToJMTExNDIwCitEYWxhbnphZGdhZCBbT21ub2dvdmldCToJMQk6CTQ2ODU4CitCYXJ1dW4tVXJ0IAk6CTEJOgk1NjE2NgorU3VoYmFhdGFyIFtTZWxlbmdlXQk6CTEJOgk5OTk1MAorVG92CToJMQk6CTk5MjY4CitVdnMJOgkxCToJOTAwMzcKK0tob3ZkIFtIb3ZkXQk6CTEJOgk4NjgzMQorTXVydW4gW0hvdnNnb2xdCToJMQk6CTExOTA2MworVW5kdXJraGFhbiBbSGVudGl5XQk6CTEJOgk3MDk0NgorRGFya2hhbiAJOgkxCToJODMyNzEKK0VyZGVuZXQgCToJMQk6CTcxNTI1CitVbGFhbmJhYXRhciAJOgkxCToJNzYwMDc3CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9NT1JPQ0NPX0FSRUEudHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvTU9ST0NDT19BUkVBLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZWViZmY3Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvTU9ST0NDT19BUkVBLnR4dApAQCAtMCwwICsxLDE3IEBACitNb3JvY2NvCToJMAk6CTQ0NjU1MAorQ2VudHJlIE5vcmQgW0NlbnRyZV0gW1JlZ2lvbiBkZSBDaGFvdWlhIC0gT3VhcmRpZ2hhXQk6CTEJOgk3MDEwCitSZWdpb24gZGUgRG91a2FsYSAtIEFkYmEJOgkxCToJMTMyODUKK1JlZ2lvbiBkZSBG6HMgLSBCb3VsZW1hbmUgCUbocwk6CTEJOgkxOTc5NQorUmVnaW9uIGRlIEdoYXJiIC0gQ2hyYXJkYSAtIELpbmkgSHNzZW4gCToJMQk6CTg4MDUKK05vcmQgT3Vlc3QgW1JlZ2lvbiBkdSBHcmFuZC1DYXNhYmxhbmNhXQk6CTEJOgkxNjE1CitDZW50cmUgU3VkIFtSZWdpb24gZGUgR3VlbG1pbSAtIEVzLVNlbWFyYV0gCToJMQk6CTEyMjgyNQorUmVnaW9uIGRlIExh4nlvdW5lIC0gQm91amRvdXIgLSBTYWtpYSBFbCBIYW1yYQk6CTEJOgkxMzk0ODAKK1RlbnNpZnQgW1JlZ2lvbiBkZSBNYXJyYWtlY2ggLSBUZW5zaWZ0IC0gQWwgSGFvdXpdCToJMQk6CTMxMTYwCitSZWdpb24gZGUgTWVrbuhzIC0gVGFmaWxhbGV0IAk6CTEJOgk3OTIxMAorT3JpZW50YWwgW1JlZ2lvbiBkZSBsJ09yaWVudGFsXQk6CTEJOgk4MjkwMAorUmVnaW9uIGRlIE91ZWQgRWQtRGFoYWIgLSBMYWdvdWlyYQk6CTEJOgk1MDg4MAorUmVnaW9uIGRlIFJhYmF0IC0gU2Fs6SAtIFplbW1vdXIgLSBaYWVyCToJMQk6CTk1ODAKK1N1ZCBbQWdhZGlyXSBbUmVnaW9uIGRlIFNvdXNzIC0gTWFzc2EgLSBEYXJh4l0gCToJMQk6CTcwODgwCitSZWdpb24gZGUgVGFkbGEgLSBBemlsYWwJOgkxCToJMTcxMjUKK1JlZ2lvbiBkZSBUYW5nZXIgLSBU6XRvdWFuIAkJOgkxCToJMTE1NzAKK1JlZ2lvbiBkZSBUYXphIC0gQWwgSG9jZe9tYSAtIFRhb3VuYXRlIAk6CTEJOgkyNDE1NQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvTU9ST0NDT19QT1BVTEFUSU9OLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL01PUk9DQ09fUE9QVUxBVElPTi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWViMDUyOAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL01PUk9DQ09fUE9QVUxBVElPTi50eHQKQEAgLTAsMCArMSwxOCBAQAorTW9yb2Njbwk6CTAJOgkzMzI0MTI1OQorQ2VudHJlIE5vcmQgW0NlbnRyZV0gW1JlZ2lvbiBkZSBDaGFvdWlhIC0gT3VhcmRpZ2hhXQk6CTEJOgkxNjU1NjYwCitSZWdpb24gZGUgRG91a2FsYSAtIEFkYmEJOgkxCToJMTk4NDAzOQorUmVnaW9uIGRlIEbocyAtIEJvdWxlbWFuZSAJRuhzCToJMQk6CTE1NzMwNTUKK1JlZ2lvbiBkZSBHaGFyYiAtIENocmFyZGEgLSBC6W5pIEhzc2VuIAk6CTEJOgkxODU5NTQwCitOb3JkIE91ZXN0IFtSZWdpb24gZHUgR3JhbmQtQ2FzYWJsYW5jYV0JOgkxCToJMzYzMTA2MQorQ2VudHJlIFN1ZCBbUmVnaW9uIGRlIEd1ZWxtaW0gLSBFcy1TZW1hcmFdIAk6CTEJOgk0NjI0MTAKK1JlZ2lvbiBkZSBMYeJ5b3VuZSAtIEJvdWpkb3VyIC0gU2FraWEgRWwgSGFtcmEJOgkxCToJMjU2MTUyCitUZW5zaWZ0IFtSZWdpb24gZGUgTWFycmFrZWNoIC0gVGVuc2lmdCAtIEFsIEhhb3V6XQk6CTEJOgkzMTAyNjUyCitSZWdpb24gZGUgTWVrbuhzIC0gVGFmaWxhbGV0IAk6CTEJOgkyMTQxNTI3CitPcmllbnRhbCBbUmVnaW9uIGRlIGwnT3JpZW50YWxdCToJMQk6CTE5MTgwOTQKK1JlZ2lvbiBkZSBPdWVkIEVkLURhaGFiIC0gTGFnb3VpcmEJOgkxCToJOTkzNjcKK1JlZ2lvbiBkZSBSYWJhdCAtIFNhbOkgLSBaZW1tb3VyIC0gWmFlcgk6CTEJOgkyMzY2NDk0CitTdWQgW0FnYWRpcl0gW1JlZ2lvbiBkZSBTb3VzcyAtIE1hc3NhIC0gRGFyYeJdIAk6CTEJOgkzMTEzNjUzCitSZWdpb24gZGUgVGFkbGEgLSBBemlsYWwJOgkxCToJMTQ1MDUxOQorUmVnaW9uIGRlIFRhbmdlciAtIFTpdG91YW4gCQk6CTEJOgkyNDcwMzcyCitSZWdpb24gZGUgVGF6YSAtIEFsIEhvY2XvbWEgLSBUYW91bmF0ZSAJOgkxCToJMTgwNzExMworCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9NT1pBTUJJUVVFX0FSRUEudHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvTU9aQU1CSVFVRV9BUkVBLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MGI3ZWM3Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvTU9aQU1CSVFVRV9BUkVBLnR4dApAQCAtMCwwICsxLDEyIEBACitNb3phbWJpcXVlCToJMAk6CTgwMTU5MAorQ2FibyBEZWxnYWRvICAJOgkxCToJODI2MjUKK01hcHV0byAJOgkxCToJMzAwCitHYXphIAk6CTEJOgk3NTcwOQorSW5oYW1iYW5lIAk6CTEJOgk2ODYxNQorTWFuaWNhIAk6CTEJOgk2MTY2MQorTmFtcHVsYSAJOgkxCToJODE2MDYKK05pYXNzYSBbTmFzc2FdCToJMQk6CTEyOTA1NgorUHJvdu1uY2lhIGRlIE1hcHV0byAJOgkxCToJMjYwNTgKK1NvZmFsYSAJOgkxCToJNjgwMTgKK1RldGUgCToJMQk6CTEwMDcyNAorWmFtYmV6aWEgCToJMQk6CTEwNTAwOApkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvTU9aQU1CSVFVRV9QT1BVTEFUSU9OLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL01PWkFNQklRVUVfUE9QVUxBVElPTi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmIyNjMxYQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL01PWkFNQklRVUVfUE9QVUxBVElPTi50eHQKQEAgLTAsMCArMSwxMiBAQAorTW96YW1iaXF1ZQk6CTAJOgkxOTY4NjUwNQorQ2FibyBEZWxnYWRvICAJOgkxCToJMTQ2NTUzNworTWFwdXRvIAk6CTEJOgkxMDE4OTM4CitHYXphIAk6CTEJOgkxMjAzMjk0CitJbmhhbWJhbmUgCToJMQk6CTEyNTYxMzkKK01hbmljYSAJOgkxCToJMTEzNzQ0OAorTmFtcHVsYSAJOgkxCToJMzI2NTg1NAorTmlhc3NhIFtOYXNzYV0JOgkxCToJODcwNTQ0CitQcm927W5jaWEgZGUgTWFwdXRvIAk6CTEJOgk5MzM5NTEKK1NvZmFsYSAJOgkxCToJMTQ1MzkyOAorVGV0ZSAJOgkxCToJMTMxOTkwNAorWmFtYmV6aWEgCToJMQk6CTMzMTY3MDMKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL01ZQU5NQVJfQVJFQS50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9NWUFOTUFSX0FSRUEudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM4NTcwMjgKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9NWUFOTUFSX0FSRUEudHh0CkBAIC0wLDAgKzEsNzI4IEBACitNWUFOTUFSIChCVVJNQSk6MDoyNTg2MTcuODUyMDAwCitDSElOOjE6MTQzMzAuNjQwCitNQUdXRToxOjE3MDQwLjg2OQorVEVOQVNTRVJJTToxOjE1NzY3Ljk5MAorSVJSQVdBRERZOjE6MTI5NjYuNDYwCitLQVlBSDoxOjQ1MjQuNDQzCitTSEFOOjE6NjAyMzMuMTQxCitBUkFLQU4gKFJBS0hJTkUpOjE6MTM2MDkuMDIwCitNT046MTo0MTcwLjY3OQorS0FXVEhVTEVJIChLQVJFTik6MToxMTY5MS4zMzAKK1NBR0FJTkc6MTozNzEwOC42NzIKK0JBR08gKFBFR1UpOjE6MTQ4OTIuNTMwCitZQU5HT04gKFJBTkdPT04pOjE6MzczNi4zMDgKK01BTkRBTEFZOjE6MTQxNTUuMDkwCitLQUNISU46MTozNDM5MC42ODAKK0xBQlVUVEE6MjoxLjAwMDAwMAorVEFEQS1VOjI6Mjg4LjA3ODkxMgorVEhPVU5HT086Mjo3NTYuMTI4MjUyCitDSEFVTkdaT046MjoxLjAwMDAwMAorTUVSR1VJOjI6My4xMTcxMjgKK1BBTEFXOjI6MS4wMDAwMDAKK0JPS1BZSU46MjoxLjU5NzU4MgorREVEQVlFOjI6Ni43NDA1OTYKK01FUkdVSToyOjEuMDAwMDAwCitNRVJHVUk6MjoxLjAwMDAwMAorS0FXVEhBVU5HOjI6MTAuMTg5NTY5CitNWUVCT046MjoxLjc0MDE4NgorTUVSR1VJOjI6MS4wMDAwMDAKK0NPQ09TIElTTEFORFM6Mjo1Ljk0MjQxNworTUVSR1VJOjI6MS4wMDAwMDAKK0JPS1BZSU46MjoxLjU4NzI4MQorV0VUTEVUOjI6NTQ4LjI5ODA1NAorS0FUSEE6Mjo5NjQuNjQ2MzAzCitTSFdFREFVTkc6MjozMTQuNDk5OTE3CitZRUJZVToyOjEuMDgzOTQxCitLQVdUSEFVTkc6MjoxLjAwMDAwMAorVEFVTkdVUDoyOjEuMTMwNjA5CitMQUJVVFRBOjI6Mi4yNjM0NjQKK01BLVVCSU46MjozMjcuMTM2MTA5CitNRVJHVUk6Mjo2LjcxNzM5NworUE9OTkFHWVVOIEFORCBSQVRIRURBVU5HOjI6MS45MTU1MDMKK01FUkdVSToyOjQuMzg1OTEzCitTSU5HQUlORzoyOjIwMy4yNjYxMzYKK1RBVU5HVVA6MjoxLjAwMDAwMAorTkdBUFVUQVc6MjoxMTAyLjk3MDIyNQorVEFaRToyOjY4Mi43ODM4NjgKK0tBV1RIQVVORzoyOjEuMDAwMDAwCitZQU5ET09OOjI6MzM1Ljc3ODc3NgorS1lBVUtQWVU6MjoxLjAwMDAwMAorTUVSR1VJOjI6MS4wMDAwMDAKK0xBQlVUVEE6MjoxLjAwMDAwMAorTEFCVVRUQToyOjkuNDY1MjcwCitIRU5aQURBOjI6Mjg0LjkxMDYwNQorTVlFQk9OOjI6MS45NDk4NTcKK1BBVUtUQVc6MjoxMTYuODY1OTAyCitUV0FOVEU6MjoxOTAuNjU0MjUwCitNWUVCT046MjoxLjAwMDAwMAorQk9LUFlJTjoyOjEuNTc3OTkzCitLQVdUSEFVTkc6MjoxLjAwMDAwMAorQU46MjoyLjg2NTQyOAorS1lBVUtQWVU6MjoyMTcuNzk1MjE0CitCT0tQWUlOOjI6My43NDgzODAKK0xBVU5HTE9OOjI6MS40NjQzMDQKK0JPR0FMRToyOjMuMTY2MzA1CitCT0tQWUlOOjI6Mi42NDc1NDcKK01FUkdVSToyOjEuMDAwMDAwCitQQUxBVzoyOjIuNzE5NTQzCitNWUFZREUgKEFVTkdMQU4pOjI6OTkwLjcyNzE5MgorS0FXVEhBVU5HOjI6MS4yODc1OTAKK01PVUxNRUlOOjI6MjMuMDkxNDI1CitFSU5NRToyOjI2My45MTUzNjMKK1NZUklBTToyOjE0NS4wNzA2MjQKK1NJRE9LVEFZQToyOjk0Mi44Nzk1NTQKK05BVE1BVUs6Mjo5MjYuMzE3NjY2CitNSU5HSU46MjoxMzE0LjkzNzU4MAorQk9LUFlJTjoyOjEuMDAwMDAwCitLWUFVS1BZVToyOjEuMDAwMDAwCitNRVJHVUk6MjoxLjAwMDAwMAorS1lBVUtUQVc6Mjo2NzYuMDY5OTc4CitLWUFVS1BZVToyOjIwNC4zMjQyODQKK0lOREFXOjI6NjEwLjc4NzQxOAorTUFOU0k6MjoxMTEzLjE0MDg0NgorQk9LUFlJTjoyOjEuMDAwMDAwCitNRVJHVUk6MjoxLjAwMDAwMAorTU9ORyBZQUk6Mjo5MzkuNzQ3NTQ5CitQT05OQUdZVU4gQU5EIFJBVEhFREFVTkc6Mjo1NjQuOTQyNDUzCitLWUFVS1BZVToyOjEuNjY4MzUyCitNRVJHVUk6MjoxLjA5MjE5NworUEFVTkc6MjoxLjk3Njk1OQorSE1BV0JJOjI6NTU5LjU2NjEzOAorVEFNVToyOjY3My45NTI4NDIKK01ZRUJPTjoyOjcuMjkzODgwCitOR0FaVU46Mjo0MjIuODI1MjU1CitIQUtBOjI6MTUxNS4yMjgyNzAKK0tBV1RIQVVORzoyOjIuOTA2MTE4CitNT01BVUs6Mjo5NDUuMTE2OTQ1CitNRVJHVUk6MjoxLjAwMDAwMAorS0FXVEhBVU5HOjI6MS4wMDAwMDAKK0JPS1BZSU46MjoxLjAwMDAwMAorTVlFQk9OOjI6MS4wMDAwMDAKK01ZSU5HWUFOOjI6MzY1LjcyMjc1MgorVEhBVE9OOjI6MS40ODQyNjcKK1RIQUJFSUtLWUlOOjI6OTg3LjgxMTc0OQorREVEQVlFOjI6MS4wMDAwMDAKK0JPS1BZSU46MjoxLjAwMDAwMAorTU9ORyBQQU46MjoyMDI2Ljg2NTU0NQorTUVSR1VJOjI6MS4wMDAwMDAKK01FUkdVSToyOjEuMDk0MzU0CitUSExBTkdUTEFORzoyOjE1MTYuMTU3NzE3CitLQVdUSEFVTkc6MjoxLjAwMDAwMAorS0FXVEhBVU5HOjI6NjUuMTQxNDYzCitQQVVORzoyOjMzMS41ODIzNTIKK01BQkVJTjoyOjE4MTYuODc5MzI4CitZQVdVTkdIV0U6Mjo0OTIuMTMzMzg5CitUQU5UQUJJTjoyOjMyNC45Mjg0MzMKK1BBVU5HREU6MjoxMjEuODQ0MjgxCitNQVdLTUFJOjI6MTAwNC40MTA1OTIKK0xBVU5HTE9OOjI6NS41MTAyOTQKK05BV05HSEtJTzoyOjEzMjcuMjk4NjE1CitLWUFOR0lOOjI6MzM5LjI1MTg4NworTVlPVEhJVDoyOjcyOC4zNjU4NTcKK1dBVzoyOjIyLjkzMDc1NAorTVlBVU5HTVlBOjI6MS4wMDAwMDAKK01FUkdVSToyOjEuMDAwMDAwCitOR0FQVVRBVzoyOjExLjg0MTk2NAorVEFCQVlJTjoyOjUzMy43NjA0ODQKK01JTkRPTjoyOjk3Mi4wMzEwODIKK01FUkdVSToyOjEuMDAwMDAwCitNRVJHVUk6MjoxLjAwMDAwMAorS1lBSUtUTzoyOjMyNS4wMzkwMjIKK0tBV1RIQVVORzoyOjEuNDI1OTI5CitLQVdUSEFVTkc6MjoxLjAwMDAwMAorTVlFQk9OOjI6Ny4yNjc2OTAKK0FSQUtBTiAoU0FORE9XQVkpOjI6MS4wMDAwMDAKK01FUkdVSToyOjEuMDAwMDAwCitNRVJHVUk6MjoxLjAwMDAwMAorVEhBTkJZVVpBWUFUOjI6MzUxLjg4ODA0OAorS0FXVEhBVU5HOjI6MS4wMDAwMDAKK0dBTkdBVzoyOjgzNS41NDIyMTUKK1JBTVJFRToyOjEuMDAwMDAwCitNRVJHVUk6MjoxNzEuMjQzNzY1CitNQVVOR0RBVzoyOjEuMDAwMDAwCitUSUdZQUlORzoyOjg5NS4zOTc1NTcKK01ZRUJPTjoyOjEuMDAwMDAwCitPS1RXSU46Mjo1NDcuNTc0MDIzCitZSU5NQUJJTjoyOjI4MC4wMDg5NDUKK01BVU5HREFXOjI6MTEuODY4MDQyCitCQUdPIChQRUdVKToyOjEwNzguMjk0MDg3CitQQVVLVEFXOjI6MjYuNzc0OTc0CitCT0tQWUlOOjI6Mi43OTQ4NjQKK01FUkdVSToyOjIuNzU2ODUzCitUSEFOQVRQSU46MjoyODkuNTY1MzkxCitTQUdBSU5HOjI6NDkwLjg2Mjk1MQorTkFUT0dZSToyOjUxMC4wNjMyNDgKK01ZRUJPTjoyOjQuNjM2NTYyCitCT0tQWUlOOjI6MS4wMDAwMDAKK1BBVUtUQVc6MjoyLjIzMTI1MgorS1lBSUtMQVQ6MjozMjkuMDUwMDczCitQT05OQUdZVU4gQU5EIFJBVEhFREFVTkc6MjoxLjg3NTM5NAorQk9LUFlJTjoyOjguNjYwNTk4CitQQUxFOjI6NzU0LjExNTIwOQorS0FXVEhBVU5HOjI6MS4wMDAwMDAKK01ZRUJPTjoyOjE1LjIxMTQxMworTVlFQk9OOjI6MS4wMDAwMDAKK01ZRUJPTjoyOjQyMy40ODgwNzkKK01FUkdVSToyOjYuMjEyNzE2CitZRToyOjMuNzMzMjA4CitCT0dBTEU6MjoxLjE2Mzk0OQorTU9OWVdBOjI6MjM1Ljg2ODQwMAorREVEQVlFOjI6MS4wMDAwMDAKK0tBV1RIQVVORzoyOjEuMDAwMDAwCitDSEFVTkdaT046Mjo5LjE5ODMzNQorTkdBUFVUQVc6MjoxLjAwMDAwMAorUEFMQVc6Mjo5LjY5NjA5NAorTEFCVVRUQToyOjEuMDAwMDAwCitOR0FQVVRBVzoyOjIwLjU5NDc5MworTUVSR1VJOjI6MS4wMDAwMDAKK0tZQVVLUFlVOjI6MS4wMDAwMDAKK1BBTEFXOjI6MS4wMDAwMDAKK0xPSSBMRU06Mjo0MTAuNzUxNzE3CitOQU1UVToyOjE2NTQuNzAyODU4CitLQU1BSU5HOjI6MjQwNy41NDE2OTYKK0hUSUxJTjoyOjQ4MS41NzUzMTUKK0JPS1BZSU46MjoxLjA2Njc0NAorTUVSR1VJOjI6MS4wMDAwMDAKK1BPTk5BR1lVTiBBTkQgUkFUSEVEQVVORzoyOjQ5LjQxMzY0NgorTVlFQk9OOjI6MTQuMzAzMjIxCitNRVJHVUk6MjoxLjAwMDAwMAorS0FXVEhBVU5HOjI6Mi4wNDYwODYKK01FUkdVSToyOjEuMDAwMDAwCitNT05ZTzoyOjIwNC4zMjU1NDYKK0RFREFZRToyOjEuMjE4OTM1CitUQU5BSToyOjQ3NzUuNDY0MDc2CitQQUxBVzoyOjEuMDAwMDAwCitLWUFVS1BZVToyOjEuMDAwMDAwCitLQVdUSEFVTkc6MjoxLjEwNDk0MAorS0FXVEhBVU5HOjI6MS4wMDAwMDAKK0tBV0tITVU6MjoxLjAwMDAwMAorTUVSR1VJOjI6MS4wMDAwMDAKK01FUkdVSToyOjYuODI4MjkwCitNRVJHVUk6MjoxLjAwMDAwMAorQk9LUFlJTjoyOjEuMDAwMDAwCitNT05HIEtVTkc6MjoyMzIwLjQ5MTM1NgorTkFNSEtBTjoyOjY4NS45NjQzNjAKK1BBREFVTkc6Mjo4NDkuNDA1ODQ4CitUQUNISUxFSzoyOjEzNDcuMzc4NDUyCitQT05OQUdZVU4gQU5EIFJBVEhFREFVTkc6MjoxMTguMTc5NDU1CitMQUktSEtBOjI6MTE5Ny42NzAzODMKK0xBQlVUVEE6MjoxLjAwMDAwMAorS0FXVEhBVU5HOjI6MS4yNTEyNTIKK0tBV1RIQVVORzoyOjguMTQyMDgxCitNRVJHVUk6MjoxLjAwMDAwMAorV1VOVEhPOjI6MzM4Ljg2OTQyNgorTkFNU0FORzoyOjEzNTMuODY4MzAxCitNRVJHVUk6MjoxLjAwMDAwMAorTEFCVVRUQToyOjEuMDAwMDAwCitCT0tQWUlOOjI6MS4wMDAwMDAKK1BBVUtUQVc6MjoxLjAwMDAwMAorUkFNUkVFOjI6NDQ3LjY0MjE1NAorS0FXS0hNVToyOjEuMDAwMDAwCitNRVJHVUk6MjoxLjkyMTEzMAorQkFXTEFLSEU6Mjo3MzQuMDM4MTM5CitQQUxBVzoyOjM2LjM0MTM4MgorUEFLT0tLVToyOjUxOS42MDE2NjYKK1lFREFTSEU6MjoxMDgwLjUyNzc1NgorQk9LUFlJTjoyOjE5Ljc1MjU4NAorTVlFQk9OOjI6NC43MDkwOTIKK01FUkdVSToyOjEuMDAwMDAwCitNRUlLVElMQToyOjQwMC4yMjI0NDUKK01VLVNFOjI6ODAxLjMwOTYzNQorTUVSR1VJOjI6MTAuNDc2MzQxCitNQUdXRToyOjYxMS40NDYzMDgKK01BVU5HREFXOjI6MS4wMDAwMDAKK0tZQVVLS0k6Mjo4MzAuOTc3NTA3CitUQVVOR1RIQToyOjQxOS43NTAyMTUKK0tBV1RIQVVORzoyOjguMjk5NTgxCitMQUJVVFRBOjI6NDAuNzIzODgxCitBUkFLQU4gKFNBTkRPV0FZKToyOjE0MzcuMzQyNTg1CitLQVdMSU46Mjo4MTQuODQyNTAxCitNRVJHVUk6MjoxLjAwMDAwMAorUEFVS1RBVzoyOjMwLjUyMzc1MAorQk9LUFlJTjoyOjEuMDAwMDAwCitQQU5HLVlBTkc6MjoxNzQ4LjQ4ODU2MAorUEFMQVc6Mjo3NzIuOTMxMzgwCitNSU5CWUE6Mjo1Ljk3ODY1MgorS0FXVEhBVU5HOjI6ODE1LjUwOTgxNAorU0VJS1BZVToyOjU2My4yNjEzMjQKK0JPS1BZSU46MjoxMC4wODQ0NDgKK01ZRUJPTjoyOjE2LjMyODM2NAorS1lBVUtQWVU6Mjo5LjM1NzkxNQorTUFDSEFOQkFXOjI6MTA4NS40NDg3NzkKK0xBU0hFOjI6MTAyMi43MjUxMDAKK0tZQVVLUFlVOjI6MS4wMDAwMDAKK0tZT05QWUFXOjI6NDIxLjY5ODY4MQorTUVSR1VJOjI6MS4wMDAwMDAKK01JTkJZQToyOjI4LjcwNzkyMQorQU46MjoyNjAxLjExOTk4MgorTUVSR1VJOjI6MS4wMDAwMDAKK01PTkcgSFNVOjI6NzI1LjQzNDE3MgorTUVSR1VJOjI6NS4wOTc2MDAKK01FUkdVSToyOjEuMDAwMDAwCitNT1VMTUVJTkdZVU46Mjo0MzIuNTIxMjAzCitNRVJHVUk6MjoxLjAwMDAwMAorUEFMRVRXQToyOjM1NjQuMDA5NzYxCitQQUxBVzoyOjEuMDY5MTkxCitQSU5EQVlBOjI6Mjk2LjAxOTM2NQorS1lBVUtQWVU6MjoxLjg5MTkzOQorVEhBVE9OOjI6NTI4LjE2ODI2MgorTEFCVVRUQToyOjEuMDAwMDAwCitNT05HIFRVTkc6MjoxODM1Ljk2ODQ1NgorS0FOQkFMVToyOjEyNDUuNDQ1MDAyCitQVVRBTzoyOjIwOTkuNTA5MTE2CitLQVdUSEFVTkc6MjoxLjAwMDAwMAorVEFOVEFCSU46MjoyMTguOTA1NzgyCitLQVdUSEFVTkc6MjoxMy43OTQ3ODEKK01FUkdVSToyOjEuNzU4NzQ5CitERURBWUU6MjoxLjAwMDAwMAorTUlOQllBOjI6NjEuMTE3NzYzCitNQU4gQVVORzoyOjEuMDAwMDAwCitNRVJHVUk6Mjo4LjE1MjM0OQorTUVSR1VJOjI6MS4wMDAwMDAKK01ZRUJPTjoyOjIuMTEyNzQ5CitCT0dBTEU6MjoxLjAwMDAwMAorT0tQTzoyOjM5NS41MzU2MTAKK1RBSUtLWUk6Mjo0MDcuNTMzMDMzCitaQUxVTjoyOjIwNC41MDU1ODAKK0tZQVVLTUU6MjoxNjQzLjA2MTI0NQorS0FXVEhBVU5HOjI6MS4wMDAwMDAKK01FUkdVSToyOjEuMDAwMDAwCitQQUxBVzoyOjEuMDAwMDAwCitNWUVCT046MjoxLjM5OTM1OAorREVEQVlFOjI6MS4wMDAwMDAKK01FUkdVSToyOjEuMDAwMDAwCitCQU5NQVVLOjI6MTM1NC4wNjAzOTMKK0hPLVBBTkc6Mjo1NTQuMjA1ODUxCitLSEFNVEk6MjozMzM5Ljg3NTYzOQorS1lBVU5HR09OOjI6MTQzLjg1NTgxNworQk9HQUxFOjI6MS4wMDAwMDAKK0hTQVRBVzoyOjg5Mi40NjEyNjEKK0tZQS1JTiBTRUlLS1lJOjI6MzE0Ni4wMjI4MDUKK01FUkdVSToyOjEuMDAwMDAwCitZRToyOjEuMDAwMDAwCitNRVJHVUk6Mjo5NS4yMzg1MjQKK1RIQU5EQVVORzoyOjEzODkuMjMyODk3CitLQVdUSEFVTkc6Mjo0Ljk0Mzc5NworTVlBSU5HOjI6NjM4LjE2NDI0NQorV1VEV0lOOjI6NzQyLjU3NzYzOAorTVlFQk9OOjI6MS4yMjg2OTAKK1BBTEFXOjI6Mi4wNjk0NzkKK1BBVUtUQVc6MjoxLjA1NjcwMAorSFNBV0xBVzoyOjEzMzkuNTE2MjYwCitSQU1SRUU6Mjo3Ljg2NTk3MworTVlFQk9OOjI6MjEuODQ1MTMwCitNWUVCT046MjoxLjAwMDAwMAorTU9VTE1FSU46Mjo0LjQxNTAwNgorVEhPTkdXQToyOjMxNi45MjI5NjUKK01BVU5HREFXOjI6My41NTg1OTgKK0JPS1BZSU46Mjo2LjgwNDA1OQorUEhSVUhTTzoyOjYxNC40MzY0MDYKK0tZQVVLUFlVOjI6MS4wMDAwMDAKK1dBSU5HTUFXOjI6MTg4NS40NjQ5NDgKK1RBVk9ZOjI6MjU1Mi42ODkyMzEKK0xBVU5HTE9OOjI6MS43NDk3NzcKK05ZQVVOR0lFQklOOjI6MjkyLjUyMDEyMAorUEFMQVc6MjoxLjAwMDAwMAorR1lPQklOR0FVSzoyOjM4NS4zNTY0MjkKK05KQU5HWUFORzoyOjE3ODIuNzAwMzI5CitEQU5VQllVOjI6NTI2LjA2ODY5NQorQ0hBVU5HWk9OOjI6MS4xMzg2NzYKK0tBV1RIQVVORzoyOjEuMDAwMDAwCitNQU5EQUxBWToyOjYyLjA4MTI5MworTkdBUEU6Mjo0MzguNTY5OTkwCitNWUFVTkdNWUE6MjoxLjAwMDAwMAorTU9VTE1FSU46Mjo0LjU0MTkyOQorTUFOIEhQQU5HOjI6NjU3LjkyNjYxNQorSU5HQVBVOjI6Njg1LjY5NTcxMQorTUVSR1VJOjI6MS4wMDAwMDAKK01PTkcgSFNBVDoyOjE5MTIuODk2NTMzCitITEFJTkdCV0U6MjoxNzA4LjY0MjY4MQorQlVUSElEQVVORzoyOjIuNzU0MjU4CitNRVJHVUk6MjoxLjI1NjI2NgorTUVSR1VJOjI6NS44NTkyNTgKK0JPR0FMRToyOjI5LjM2MjIwNQorTU9OR0tIQUs6MjoxMDMwLjE2NDU1MQorS1lBVUtQWVU6MjoxLjUwMTY0MworS1VOR1lBTkdPTjoyOjc4LjM1NzQxNAorTUVSR1VJOjI6MS4wMDAwMDAKK1BBTEFXOjI6MS4wMDAwMDAKK05HQVBVVEFXOjI6MjI1LjU0MDAxNAorQk9HQUxFOjI6MS4wMDAwMDAKK01FUkdVSToyOjMuNjExODUwCitHV0E6MjoxLjAwMDAwMAorTEFVTkdMT046MjozMTEuNTI3MDQ5CitQT05OQUdZVU4gQU5EIFJBVEhFREFVTkc6Mjo2LjIwNTU5MworQ09DT1MgSVNMQU5EUzoyOjEuMDAwMDAwCitLWVVOSExBOjI6MTAxOS45OTkzODMKK01FUkdVSToyOjQzLjgzMjE3MgorTUlOSExBOjI6OTY5LjkxNTM1MgorUEFVS1RBVzoyOjE3LjQ4NDY5NAorTUVSR1VJOjI6My43MjM1MzMKK01FUkdVSToyOjEuMDAwMDAwCitLQVdUSEFVTkc6MjoxLjAwMDAwMAorS0VORyBUVU5HOjI6MjA4OC42ODg5MDEKK0tZQUlLTUFSQVc6Mjo0NTguMzMwNDM3CitIVEFOVEFCSU46MjoxMDcuODg3Mjg3CitQWUFQT046MjozMjIuNTMwOTE1CitIU0lQQVc6MjoxOTk1LjYyNjkxMgorTUFUVVBJOjI6MTkxNC4wODM3MzgKK0tBV1RIQVVORzoyOjEuMDM0NzI3CitNRVJHVUk6MjoxLjAwMDAwMAorTUVSR1VJOjI6Mi44MjI5NjcKK05BTUhTQU46MjozODkuMzkyNTkzCitCT0tQWUlOOjI6MS4wMDAwMDAKK0xBQlVUVEE6MjoyLjY2NTUxMworVEFVTkdVUDoyOjEuMjczODEyCitNWUVCT046MjoxMi4wNDc3NDEKK0JPS1BZSU46MjoxLjAwMDAwMAorTEFXS1NBV0s6MjoxNzA3LjI3NjUxMgorUEhBVU5HQllJTjoyOjEzNTAuMTgxODIxCitNRVJHVUk6MjoxMDAzLjQ4NjI2NworWUVCWVU6MjoxLjM1MTAyOAorTUVSR1VJOjI6NDIuNjcwNjAxCitNWUVCT046MjoxLjAwMDAwMAorQk9HQUxFOjI6NDkuNzIwMjUyCitCT0tQWUlOOjI6NjkuNjAyOTkzCitMQVNISU86MjoxNjk2LjM5OTU5MgorTUVSR1VJOjI6MS4wMDAwMDAKK01FUkdVSToyOjEuNjM1OTg0CitNWUVCT046MjoxLjAwMDAwMAorTU9ORyBQSU5HOjI6MjM4Ny45OTMzNDIKK1BJTkxFQlU6MjoxMzM5LjQ4NTg1NgorQ0hBVU5HWk9OOjI6MTM3LjA3MTQ4OQorTUVSR1VJOjI6MS4wMDAwMDAKK01JTkJZQToyOjEuMDAwMDAwCitCT0tQWUlOOjI6MS4wMDAwMDAKK01ZQVVOR01ZQToyOjY5MC4yODU4NDYKK0tZQVVLUFlVOjI6MS4wMDAwMDAKK1BBTlRBTkFXOjI6NjQ5LjYxOTM0MgorTUVSR1VJOjI6Ni42Mjk3NzYKK01ZRUJPTjoyOjI2Ljc1MjQxNAorS0FXVEhBVU5HOjI6MS4wMDAwMDAKK1lFU0FHWU86Mjo0MTcuNzUyMTMyCitNQU4gQVVORzoyOjEuMDAwMDAwCitQUk9NRToyOjMzNy4wMzUwODQKK0NPQ09TIElTTEFORFM6MjoxLjQ0MzYzNQorUkFNUkVFOjI6MS4yMTU2NzMKK0tBV1RIQVVORzoyOjEuMDAwMDAwCitERURBWUU6Mjo1OS41NjA3MzQKK1dBS0VNQToyOjQ0MC40NjM3NDMKK05HQVBVVEFXOjI6NC45MTIxNzUKK0tBV1RIQVVORzoyOjEuMDAwMDAwCitLWUFVS1BZVToyOjEuMDAwMDAwCitDSEFVSzoyOjM2NC4zNTUzOTkKK01BSExBSU5HOjI6MzEzLjM5MTE5MworS1lBVUtQWVU6MjoxLjAwMDAwMAorQkhBTU86Mjo4ODIuMzI4NTIxCitCQVNTRUlOIFdFU1Q6Mjo2MjcuNjA4MzQxCitNRVJHVUk6MjoxLjA1NjgyNQorUFlBV0JXRToyOjY2MC40ODU4ODgKK0JVREFMSU46MjozOTUuMDI5MjA3CitDSEFVTkdaT046MjoxLjAwMDAwMAorVEFVTkdVUDoyOjE3NDcuNzM0NTg2CitCT0tQWUlOOjI6MS4wMDAwMDAKK0hMRUdVOjI6MS4wMDAwMDAKK1RIQVJSQVdBRERZOjI6MjExLjA3MTUwNAorTEFVTkdMT046MjoxLjAwMDAwMAorUEFVS0tBVU5HOjI6NzA5LjQwNDcwMQorWklHT046MjoxOTIuMjQ1MDU0CitUQVRLT046MjoxMDUyLjY2ODExNgorTEFIRToyOjE3MTUuODc4Nzk3CitQQUxBVzoyOjIuNzUyNzI4CitNRVJHVUk6MjoxLjAwMDAwMAorRkFMQU06Mjo4MDQuNTAwMjE4CitLQU1BOjI6MzYxLjAzMzk3NAorTUlOREFUOjI6MTUyNi40MTI3ODcKK0tBTEU6MjoxMDQ1Ljk4MDIzNworTkFNUEFOOjI6Njg2LjMyMDg3MgorTUVSR1VJOjI6MS4wMDAwMDAKK0tBV1RIQVVORzoyOjEuMDAwMDAwCitMRU1ZRVRITkE6MjozOTYuOTU0NjI3CitNRVJHVUk6MjoyLjUwNTYwNgorTVlFQk9OOjI6Mi4wNDUwMzAKK01SQVVLLU9POjI6NDQ0LjMzMzExNworQk9LUFlJTjoyOjQuODc0Mzk1CitLQU5JOjI6MTI4OS44NDg3MDMKK1lBTkdPTiAoUkFOR09PTik6MjoxMDQuOTAwNzk2CitNRVJHVUk6MjoyLjU0MDA3MAorTU9VTE1FSU46MjoxLjAwMDAwMAorS1lBVUtQWVU6MjoxLjAwMDAwMAorUE9OTkFHWVVOIEFORCBSQVRIRURBVU5HOjI6MS4wMDAwMDAKK1NBVzoyOjcxMi45ODE3NTIKK0FSQUtBTiAoU0FORE9XQVkpOjI6MS4wMDAwMDAKK01FUkdVSToyOjEuMDAwMDAwCitNRVJHVUk6MjoyLjczMjEyMgorTUlOQllBOjI6MTEzNS44Mzg0MzUKK0tBV1RIQVVORzoyOjIuODUxNjQ5CitQQU5HV0FVTToyOjUwNi43NDI2MDEKK01FUkdVSToyOjEuMDAwMDAwCitNRVJHVUk6MjoxLjAwMDAwMAorUEFVTkc6MjoxLjAwMDAwMAorTUVSR1VJOjI6MS4wMDAwMDAKK1lFLU5HQU46MjoxMzQ1LjAxMDgxNAorTUFOIEFVTkc6MjozLjg2MDI5OQorTUVSR1VJOjI6MS40MjgyNjQKK01FUkdVSToyOjEuMDAwMDAwCitNRVJHVUk6MjoxLjAwMDAwMAorTEFOR0tITzoyOjg4NC4wMDc2ODkKK01ZQVVOR01ZQToyOjEuMDAwMDAwCitNUkFVSy1PTzoyOjI5LjkwMjkxOAorU0hXRUJPOjI6MzY3LjgwODA4MQorS0FXVEhBVU5HOjI6MS4wMDAwMDAKK01FUkdVSToyOjEuMDAwMDAwCitQQS1BTjoyOjEwNTEuNTE4Mzg1CitQQVRIRUlOR1lJOjI6Mzk4Ljg3NjUyNQorVElERElNOjI6MTE4NS41MTkwMTcKK0xBQlVUVEE6Mjo4MjAuODQ2NDgyCitQQVVLVEFXOjI6OS40MzYxMjYKK0JPS1BZSU46MjoyLjk3Njg2NgorS0FXS0FSRUlLOjI6NTcwLjA5OTE3OQorQk9LUFlJTjoyOjEuMDAwMDAwCitMT0ktS0FXOjI6NTQwLjU4NjU0MAorVEhBQkFVTkc6Mjo2ODcuNDQ1NTAyCitQSU5MQVVORzoyOjEzNzEuODMxNjU1CitTQUxJTkdZSToyOjMwNS4xMDQ5OTkKK01PR09LOjI6NDQ3LjI0NTc3NgorVEVOQVNTRVJJTToyOjQ1MzkuNzMzMzczCitNRVJHVUk6MjoxLjAwMDAwMAorS0FXVEhBVU5HOjI6MS4wMDAwMDAKK1dBVzoyOjEuMDAwMDAwCitCT0tQWUlOOjI6MS4wMDAwMDAKK01ZRUJPTjoyOjIuODQzMzU0CitLQVdUSEFVTkc6MjoyLjQwMDMxOAorS0FXVEhBVU5HOjI6MS4wMDAwMDAKK0RBSUstVToyOjQ5MS40NTMyNzkKK0xBVU5HTE9OOjI6MS45MjM3NjIKK1RIQU5BVFBJTjoyOjEuMTU3NDA4CitNWUVCT046MjoxNS4wMjQwMDQKK0tZQVVLUFlVOjI6Ni44OTM4MDQKK1lFOjI6MTAxMy4zNTUwMzUKK1RIQVpJOjI6NjAxLjY0MjQ2MQorTUVSR1VJOjI6MjcuMTkyMjY1CitQQVVLVEFXOjI6Mi41MTgxNTQKK0tBV1RIQVVORzoyOjE3LjIwOTM0NAorTUVSR1VJOjI6MS4wMDAwMDAKK01FUkdVSToyOjEuMDAwMDAwCitMQUJVVFRBOjI6MS4wMDAwMDAKK0xFV0U6Mjo4ODYuNTA3NDMyCitLWUFVS1BZVToyOjIuNDQ1NjkwCitQWVU6Mjo4NTIuMzUxNzA1CitCT0dBTEU6MjoxLjE2OTUxOAorS0FXVEhBVU5HOjI6MS4wMDAwMDAKK05HQVBVVEFXOjI6MS4wMDAwMDAKK01FUkdVSToyOjEuMDAwMDAwCitIU0kgSFNFTkc6Mjo4MTcuNDUyMjc2CitTSVRUV0UgKEFLWUFCKToyOjQzLjIyNzgyNgorS0FXVEhBVU5HOjI6MS4xODgzMDAKK0tBV0tITVU6MjoyMDcuODkyNjg1CitCT0tQWUlOOjI6MS4wMDAwMDAKK0tVTkhJTkc6MjoxMDU2LjAzMzU1MgorTEFCVVRUQToyOjEuNzczMTA0CitQQVVLVEFXOjI6ODUuMzc2NDMzCitNRVJHVUk6MjoxLjI1ODM3NworUE9OTkFHWVVOIEFORCBSQVRIRURBVU5HOjI6MS4wMDAwMDAKK0JPS1BZSU46MjoxLjAwMDAwMAorTUVSR1VJOjI6Ny44NzUwNjYKK0tZQVVLU0U6Mjo2NzcuNTExMDQ2CitZRUJZVToyOjEuMDAwMDAwCitQT05OQUdZVU4gQU5EIFJBVEhFREFVTkc6Mjo1LjU4Njg4NQorQk9LUFlJTjoyOjE0LjQxMjE0MQorTEFCVVRUQToyOjEuMDAwMDAwCitCT0tQWUlOOjI6MjA1MS44NTI1NTgKK01FUkdVSToyOjEuMDAwMDAwCitTSU5CQVVOR1dFIChUQU5UQUJJTik6Mjo4NzMuNDcwMDc4CitCT0dBTEU6MjozLjgwNDcyMgorUEFMQVc6MjoxLjAwMDAwMAorTkdBUFVUQVc6MjoxLjEwMTg3NgorQlVUSElEQVVORzoyOjUuNzMxNzY4CitNWUlUS1lJTkE6MjoyNDM1LjcwMzQxMworREVEQVlFOjI6MjYuNTU2MjI5CitCT0tQWUlOOjI6MS4wMDAwMDAKK0dXQToyOjEuMDAwMDAwCitLQVdUSEFVTkc6MjoxLjAwMDAwMAorTUVSR1VJOjI6NS4zNzY2NjEKK01BTiBBVU5HOjI6MTc3LjI0MTA5OQorS1lBVUtQWVU6Mjo0Ljg4ODQ5MQorREVEQVlFOjI6MS41NTIwNDUKK0tBV1RIQVVORzoyOjEuMDAwMDAwCitZRToyOjEuMDAwMDAwCitQQVVLVEFXOjI6My44MjYyOTYKK05BTllVTjoyOjI2MjYuNzQ1Mzc5CitQQUxBVzoyOjYuMDQ4ODAzCitQQUxBVzoyOjEuMDAwMDAwCitLQUxBVzoyOjY5My43MTY5MDgKK01FUkdVSToyOjE1Ljc4NTE0OQorTVlFQk9OOjI6MS44ODYxOTMKK01PSE5ZSU46MjoyNTY4LjMwODk3MAorS0FXVEhBVU5HOjI6MS4wMDAwMDAKK01ZSVRIQToyOjM4OC40ODY0NzIKK01FUkdVSToyOjEuMDAwMDAwCitCT0tQWUlOOjI6MS4wMDAwMDAKK01PTkcgSFBBWUFLOjI6ODIxLjMyMTI0NQorVEhFR09OOjI6NDYwLjgyNzE4OAorQk9LUFlJTjoyOjUuOTMyNzc2CitNSU5CWUE6MjoxLjAwMDAwMAorWUFNRVRISU46Mjo4ODcuODIxNzE3CitNWUlOTVU6MjoyODEuOTM1MDY1CitNRVJHVUk6Mjo5Mi4xNzg0NzAKK0tZQVVLUFlVOjI6MS4wMDAwMDAKK1BBUFVOOjI6MjY3Mi42NDc4ODcKK0tPTkctS1lBTjoyOjQzNS4wNDI3NjAKK0tZQVVLUFlVOjI6NC40NDM0MTAKK05BVFRBTElOOjI6NDI3LjUwNjE1NAorS1VOTE9ORzoyOjMyNC41MjcxMjQKK1RPTlpBTkc6MjoxNDQ1LjI4MjA1MAorS0hBV0JVREU6MjoyMTkwLjQ0MjA5NgorQk9LUFlJTjoyOjI0LjIxNDU0OAorQk9LUFlJTjoyOjEuMDAwMDAwCitNSU5CVSAoU0FHVSk6Mjo2NzQuNzI0NDk2CitCVVRISURBVU5HOjI6ODE4LjcyMjQ0MworTVlFQk9OOjI6NS4xNTA0MDEKK01BTiBBVU5HOjI6MS4wMDAwMDAKK01BWU1ZTzoyOjU1Mi43NzY4MzQKK1NVTVBSQU5CVU06MjoyNTYyLjg1NTM4MAorTUVSR1VJOjI6MS4wMDAwMDAKK01FUkdVSToyOjEuMDAwMDAwCitTSFdFR1lJTjoyOjkxNi40MDkyNTYKK0tBV0tITVU6MjoxMzQuNjQwOTU5CitOR0FQVVRBVzoyOjEuMDAwMDAwCitLWUFVS1RBTjoyOjI2OS4zNTczODgKK0tBTlBFVExFVDoyOjg1OS40NDY0NDEKK01FUkdVSToyOjMuOTgxMzc1CitNRVJHVUk6MjoxLjgzODI2OQorTUVSR1VJOjI6MS4wMDAwMDAKK01FUkdVSToyOjEuMTI3NzYyCitNT1VMTUVJTjoyOjUuODIyNTYyCitUQVVOR0RXSU5HWUk6Mjo3OTUuMTMzNzI4CitQQUxBVzoyOjEuNTAxNjMxCitOWUFVTkdVOjI6NTgwLjU4NTIzMAorSE9NQUxJTjoyOjQyMjguNTUyNDQ5CitUSEFZRVQ6MjozOTAuMzc1MzMxCitTSU5HVToyOjUzOS42MzExMzIKK0tZQVVLUFlVOjI6MS4yNTI2MDAKK05HQVBVVEFXOjI6MS4wMDAwMDAKK0tZQVVLUFlVOjI6MS4wMDAwMDAKK0tZQVVLUFlVOjI6MS4wMDAwMDAKK0JPS1BZSU46MjoxLjAwMDAwMAorS1lBVUtQQURBVU5HOjI6ODEyLjU4MTcyOQorTUVSR1VJOjI6MS4zNjA3ODUKK0xBVU5HTE9OOjI6MS4wMDAwMDAKK01ZQVdBREk6MjoxMTUzLjE2NjE2NQorTU9ORyBNSVQ6MjoxMTI0LjA5MDcxMworTUVSR1VJOjI6My40MjMxMzAKK0RFREFZRToyOjI0Ny4yMDgyMzUKK01FUkdVSToyOjguNTA3MzU3CitLQVdBOjI6NDE0LjM1Nzc4MAorTUVSR1VJOjI6MTcuOTQwMjY2CitQV0lOQllVOjI6NTEzLjQyODE2OAorTU9VTE1FSU46MjoxLjAwMDAwMAorTVlFQk9OOjI6NC4xMzA5NzIKK05PR01VTkc6MjozMDAzLjc1Mzg2MworV0FXOjI6MjUuMDU5MTg2CitQQUxBVzoyOjEuMDAwMDAwCitDSElQV0k6MjoxMjk0LjY0NTkxNQorQk9HQUxFOjI6MTMuNjE5MTA3CitLQVdUSEFVTkc6MjoxLjAwMDAwMAorTVlFQk9OOjI6MS4wMDAwMDAKK01ZRUJPTjoyOjU2LjQxNTkxMAorTUVSR1VJOjI6MS4xNTg3MzEKK1BFS0hPTjoyOjY5OS40NzcxODcKK01PTkcgTUFPOjI6NzI3Ljg5MjMwNgorTUVSR1VJOjI6MS4wMDAwMDAKK1lFLVU6Mjo1NjYuNDIwMTYwCitJTlNFSU46MjoxNjUuNjU0MjgwCitQQUxBVzoyOjEuMDAwMDAwCitQQVVLOjI6MTAzMS4wNTI4MjIKK0tZQVVLUFlVOjI6MS4wMDM4NDgKK1lFR1lJOjI6MjgyLjQ1NDYwMgorS0FMRVdBOjI6ODc3Ljk5MjU5NAorWUU6MjoxLjAwMDAwMAorQk9LUFlJTjoyOjUuMTIzMjY4CitNT0dBVU5HOjI6ODcyLjA2OTc1MworUEFTQVdORzoyOjEzMDkuODI4MDU5CitLQVdUSEFVTkc6MjoxLjAwMDAwMAorR1dBOjI6MS4wMDAwMDAKK0FNQVJBUFVSQToyOjk3LjkxODUyMQorTVVET046MjoyNzMuNDEwNzcxCitUQVVOR1VQOjI6MTAuMjg4NzkxCitXQVc6MjozMzQuNjg5MjQwCitQQUxBVzoyOjEuMDAwMDAwCitITy1QT05HOjI6MzgzLjg2MDA0NAorU0FMSU46Mjo4NjEuMjc3NTU4CitNQVVOR0RBVzoyOjEuMDAwMDAwCitNT1VMTUVJTjoyOjcuMjUyOTE3CitNWUVCT046MjozNC45MzU5NTkKK0tZQVVLUFlVOjI6MS4wMDAwMDAKK0hTRU5XSToyOjc1OS4xMjQ5MDYKK0tFLUhTSToyOjEyODAuNDQ1MDA2CitCT0tQWUlOOjI6My43NDExNTYKK1lFQllVOjI6MTU4NC41MTYwNDEKK01FUkdVSToyOjEuMjY4NDMzCitNRVJHVUk6MjoxLjY3Njk1MworS0FXVEhBVU5HOjI6MS4wMDAwMDAKK01FUkdVSToyOjEuMDAwMDAwCitLWUFVS1RBR0E6MjoxMTI1LjE1Nzg1OAorTVlFQk9OOjI6NDAuNTczMDg3CitNWUVCT046MjoxMi42MTQyODEKK0tBV1RIQVVORzoyOjEuMDAwMDAwCitNQURBWUE6Mjo0NjUuMzU4NDkxCitESU1BV0hTTzoyOjQzMy4wOTI1OTUKK0FZQURBVzoyOjQ5NS4xNTIwMzcKK1RIQVlFVENIQVVORzoyOjg0OC4wNjM2ODQKK01FUkdVSToyOjIuMDQwMDAyCitUQVVOR0dZSToyOjYzOS4yNjEyMTgKK05HQVBVVEFXOjI6MTY5LjIyMjg4NworTUVSR1VJOjI6My4xODIyNTIKK01FUkdVSToyOjEuMDAwMDAwCitNT05HIFlBTkc6MjoxMDM1LjQzODg2NworTkdBUFVUQVc6MjoxLjAwMDAwMAorQk9LUFlJTjoyOjEuODIxMjYwCitCSUxJTjoyOjY4NS4xOTAwMTUKK1BBTEFXOjI6MS4wMDAwMDAKK1BBVUtUQVc6Mjo0Ny42NTc1NzEKK0xFVFBBVEFOOjI6MjcwLjgyNDc2MworTEFVTkdMT046Mjo1LjI5MTQzOQorTUVSR1VJOjI6MS4wMDAwMDAKK1BBVUtUQVc6MjoxLjAwMDAwMAorTUVSR1VJOjI6MS4zNTMwNDMKK01ZQVVORzoyOjIwOC40OTk2OTcKK01PVUxNRUlOR1lVTjoyOjEuMDAwMDAwCitZRU5BTkdZQVVORzoyOjQyNi44ODU3OTUKK01PTkcgTkFJOjI6MTMwNC4xMjA4MjUKK01FUkdVSToyOjEuMDAwMDAwCitNRVJHVUk6MjoxNTYuNDUzODk3CitNQVVOR0RBVzoyOjY0Ny4yOTEzMTcKK01FUkdVSToyOjEuMDAwMDAwCitNRVJHVUk6MjoxLjM1MTE4NworTU9VTE1FSU46MjoxLjAwMDAwMAorVEFOR1lBTjoyOjE4OTkuODA4MDM3CitDT0NPUyBJU0xBTkRTOjI6My43NDgwMzkKK0tVVEtBSToyOjE1NjkuOTY4MDE0CitNRVJHVUk6MjoxLjAwMDAwMAorTVlFQk9OOjI6MS41NzEwMDgKK01FUkdVSToyOjEuNDE2NDY0CitNWUVCT046MjoxLjAwMDAwMAorTU9ORyBZQVdORzoyOjE4MTguNjMxMTAwCitCT0dBTEU6MjozLjk4MjU5NQorS0FXVEhBVU5HOjI6MS4wMDAwMDAKK0tBV1RIQVVORzoyOjEuMDAwMDAwCitNSU5ITEE6Mjo3MzQuMzYyMzc2CitITEVHVToyOjgwMS45MTYwMTUKK1BPTk5BR1lVTiBBTkQgUkFUSEVEQVVORzoyOjEuMDAwMDAwCitLSElOLVU6Mjo0MTIuOTg1OTk0CitLQVlBTjoyOjIzMy4wNzk5NDgKK0JPR0FMRToyOjgzNy45MTE4NzIKK0NIQVVORy1VOjI6MTgwLjM2NTk2OAorTkdBUFVUQVc6Mjo5LjUxNTU5MAorUFlJTk1BTkE6Mjo4MTIuMDI3MDQ4CitNRVJHVUk6MjoxLjQ0ODY0MworTUFXTEFJSzoyOjE1NTEuNzE0MjEzCitCT0dBTEU6MjoxLjAwMDAwMAorS0FXVEhBVU5HOjI6MS4yMzI2NDEKK01ZQU5BVU5HOjI6NjE4LjA1ODU2NworR1dBOjI6OTQ3LjY4NDc0NQorREVEQVlFOjI6MS4wMDAwMDAKK01FUkdVSToyOjEuMDAwMDAwCitTSFdFR1U6MjoxMTQ2LjY2OTA5NAorTUVSR1VJOjI6My4wMTA4MDMKK0lSUkFXQUREWToyOjIzNi42NjU5NjUKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL01ZQU5NQVJfUE9QVUxBVElPTi50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9NWUFOTUFSX1BPUFVMQVRJT04udHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJkZDliYjUKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9NWUFOTUFSX1BPUFVMQVRJT04udHh0CkBAIC0wLDAgKzEsNzI4IEBACitNWUFOTUFSIChCVVJNQSk6MDo0MzM1NTk4OToxNjcuNjQ0OTk3CitBUkFLQU4gKFJBS0hJTkUpOjE6MjU4OTQ3MDoxOTAuMjc2MDA4CitCQUdPIChQRUdVKToxOjQ4MDkzNjg6MzIyLjkzODI3OAorQ0hJTjoxOjQ2NzAyMjozMi41ODkwNTQKK0lSUkFXQUREWToxOjYzMjA5NTA6NDg3LjQ4NDYzMworS0FDSElOOjE6MTAzNzU4NTozMC4xNzA1MjkKK0tBV1RIVUxFSSAoS0FSRU4pOjE6MTA1NzUwNTo5MC40NTIwNzAKK0tBWUFIOjE6MjAyMDgyOjQ0LjY2NDUwMworTUFHV0U6MTo0MTA0ODU1OjI0MC44ODI5NjIKK01BTkRBTEFZOjE6NTc5NDA0Mzo0MDkuMzI1NzYyCitNT046MToyMTI2MzM1OjUwOS44Mjk0NTUKK1NBR0FJTkc6MTo0Nzk5NzM1OjEyOS4zNDI2NzgKK1NIQU46MTozODcwOTIxOjY0LjI2NTYzNAorVEVOQVNTRVJJTToxOjExNTY0ODQ6NzMuMzQzNzgxCitZQU5HT04gKFJBTkdPT04pOjE6NTAxOTYzNDoxMzQzLjQ3NDM2MAorTk9HTVVORzoyOjU3NjQzOjE5LjE5MDUyNAorUFVUQU86Mjo1NzY0MzoyNy40NTU3NTcKK0tIQVdCVURFOjI6NTc2NDM6MjYuMzE1OTcxCitNQUNIQU5CQVc6Mjo1NzY0Mzo1My4xMDU3ODYKK05BTllVTjoyOjEyMzA3MDo0Ni44NTI3MDYKK1RBTkFJOjI6NTc2NDM6MTIuMDcwNzg3CitTVU1QUkFOQlVNOjI6NTc2NDM6MjIuNDkxOTQ4CitIU0FXTEFXOjI6NTc2NDM6NDMuMDMzMTU1CitMQUhFOjI6MTIzMDcwOjcxLjcyNDI1NQorTkpBTkdZQU5HOjI6NTc2NDM6MzIuMzM0OTk4CitLSEFNVEk6MjoxMjMwNzA6MzYuODQ4NzE2CitDSElQV0k6Mjo1NzY0Mzo0NC41MjQ2MTUKK0tBTUFJTkc6Mjo1NzY0MzoyMy45NDI5MzQKK01ZSVRLWUlOQToyOjU3NjQzOjIzLjY2NjEwNAorV0FJTkdNQVc6Mjo1NzY0MzozMC41NzI2MjQKK01PR0FVTkc6Mjo1NzY0Mzo2Ni4wOTk3NzEKK0xBU0hFOjI6MTIzMDcwOjEyMC4zMzU0OTIKK0hPTUFMSU46MjoxMjMwNzA6MjkuMTA0NTUzCitNT0hOWUlOOjI6NTc2NDM6MjIuNDQ0MTg5CitCQU5NQVVLOjI6MTIzMDcwOjkwLjg4OTY4OQorTU9NQVVLOjI6NTc2NDM6NjAuOTkwOTgzCitTSFdFR1U6Mjo1NzY0Mzo1MC4yNzA0ODUKK1RBTVU6MjoxMjMwNzA6MTgyLjYwOTQwNgorQkhBTU86Mjo1NzY0Mzo2NS4zMzEyMzQKK0lOREFXOjI6MTIzMDcwOjIwMS40OTQyMTAKK1BIQVVOR0JZSU46MjoxMjMwNzA6OTEuMTUwNzgyCitLQVRIQToyOjEyMzA3MDoxMjcuNTgwNTczCitQSU5MRUJVOjI6MTIzMDcwOjkxLjg3ODYzMgorVElHWUFJTkc6MjoxMjMwNzA6MTM3LjQ0NzQ2OQorTUFOU0k6Mjo1NzY0Mzo1MS43ODQ2NTIKK1dVTlRITzoyOjEyMzA3MDozNjMuMTc4NjEzCitLT05HLUtZQU46Mjo3NDQ0MDoxNzEuMTExNDI5CitNQUJFSU46Mjo3NDQ0MDo0MC45NzE3ODUKK01VLVNFOjI6NzQ0NDA6OTIuODk4OTA2CitUT05aQU5HOjI6NTE4OTE6MzUuOTAzOTQ5CitLQVdMSU46MjoxMjMwNzA6MTUxLjAzNTQ4MAorTUFXTEFJSzoyOjEyMzA3MDo3OS4zMTIzNjgKK05BTUhLQU46Mjo3NDQ0MDoxMDguNTE5OTA3CitLVVRLQUk6Mjo3NDQ0MDo0Ny40MTU0ODEKK0tZVU5ITEE6MjoxMjMwNzA6MTIwLjY1NzA2MQorS1VOTE9ORzoyOjc0NDQwOjIyOS4zODIzMzIKK0tBTkJBTFU6MjoxMjMwNzA6OTguODE2MTg5CitNT05HIE1JVDoyOjc0NDQwOjY2LjIyMzExNQorTkFNVFU6Mjo3NDQ0MDo0NC45ODc0MDYKK1RJRERJTToyOjUxODkxOjQzLjc3MDk4NAorVEhBQkVJS0tZSU46MjoyMjI4NDc6MjI1LjU5NzQ0NgorS0FMRToyOjEyMzA3MDoxMTcuNjYwMDg5CitLQUxFV0E6MjoxMjMwNzA6MTQwLjE3MjE3MQorSE8tUEFORzoyOjc0NDQwOjEzNC4zMTk3NDUKK0hTRU5XSToyOjc0NDQwOjk4LjA2MTMxOAorRkFMQU06Mjo1MTg5MTo2NC41MDEzMjkKK01JTkdJTjoyOjEyMzA3MDo5My41OTM4OTQKK0xBU0hJTzoyOjc0NDQwOjQzLjg4MTYzNQorVEFaRToyOjEyMzA3MDoxODAuMjQ3NTYzCitOQU1IU0FOOjI6NzQ0NDA6MTkxLjE3MTU1NworTU9ORyBNQU86Mjo3NDQ0MDoxMDIuMjY4OTU5CitQQU5HV0FVTToyOjc0NDQwOjE0Ni45MDA1OTMKK1RITEFOR1RMQU5HOjI6NTE4OTE6MzQuMjI1NTUxCitNT0dPSzoyOjIyMjg0Nzo0OTguMjY2OTkyCitUQU5UQUJJTjoyOjEyMzA3MDozNzguNzYwNzIzCitZRS1VOjI6MTIzMDcwOjIxNy4yNzcwOTcKK0tZQVVLTUU6Mjo3NDQ0MDo0NS4zMDYxNTYKK1RBTkdZQU46Mjo3NDQ0MDozOS4xODMzMjEKK01BTiBIUEFORzoyOjc0NDQwOjExMy4xNDQ1MTYKK0tISU4tVToyOjEyMzA3MDoyOTguMDAwNzMxCitIU0lQQVc6Mjo3NDQ0MDozNy4zMDE5NTcKK0hBS0E6Mjo1MTg5MTozNC4yNDY1NDUKK0tBTkk6MjoxMjMwNzA6OTUuNDE0MzkxCitNT05HIFlBSToyOjc0NDQwOjc5LjIxMzYwMgorTkFNUEFOOjI6NzQ0NDA6MTA4LjQ2MzUzNgorTkFXTkdIS0lPOjI6NzQ0NDA6NTYuMDg0NDMyCitTSU5HVToyOjIyMjg0Nzo0MTIuOTYzMjE2CitUQUJBWUlOOjI6MTIzMDcwOjIzMC41NzE4MjQKK1NIV0VCTzoyOjEyMzA3MDozMzQuNjA0MTk5CitHQU5HQVc6MjoxNjQxOTQ6MTk2LjUxMjE1MworQlVEQUxJTjoyOjEyMzA3MDozMTEuNTQ2OTA4CitXRVRMRVQ6MjoxMjMwNzA6MjI0LjQ1ODQ0NAorQVlBREFXOjI6MTIzMDcwOjI0OC41NTAxODEKK1BBTkctWUFORzoyOjc0NDQwOjQyLjU3NDM2NAorTUFEQVlBOjI6MjIyODQ3OjQ3OC44NzM0MTEKK01PTllXQToyOjEyMzA3MDo1MjEuNzc0NTUwCitQQVRIRUlOR1lJOjI6MjIyODQ3OjU1OC42ODg3MDEKK1lJTk1BQklOOjI6MTIzMDcwOjQzOS41MjIxMzEKK0xBV0tTQVdLOjI6NzQ0NDA6NDMuNjAyMDY5CitTQUdBSU5HOjI6MTIzMDcwOjI1MC43MjE5NzQKK01BVFVQSToyOjUxODkxOjI3LjExMDI3MworUEFMRToyOjEyMzA3MDoxNjMuMTk4MDQ2CitTQUxJTkdZSToyOjEyMzA3MDo0MDMuMzY5NzUzCitNWUlOTVU6MjoxMjMwNzA6NDM2LjUxOTQxMAorUEFMRVRXQToyOjUxODkxOjE0LjU1OTgxOAorTUFZTVlPOjI6MjIyODQ3OjQwMy4xNDI0NTEKK01BTkRBTEFZOjI6MjIyODQ3OjM1ODkuNjEyODYwCitLRS1IU0k6Mjo3NDQ0MDo1OC4xMzY2NTQKK01PTkcgSFNVOjI6NzQ0NDA6MTAyLjYxNTQ5NworQ0hBVU5HLVU6MjoxMjMwNzA6NjgyLjMzNTY0MAorTU9ORyBLVU5HOjI6NzQ0NDA6MzIuMDc5NzUzCitLWUFVS1NFOjI6MjIyODQ3OjMyOC45MjEyOTEKK0hUSUxJTjoyOjE2NDE5NDozNDAuOTUyMjc3CitBTUFSQVBVUkE6MjoyMjI4NDc6MjI3NS44NDk0MDQKK05HQVpVTjoyOjEyMzA3MDoyOTEuMDY2MTcyCitNT05HS0hBSzoyOjc0NDQwOjcyLjI2MTA2NgorTVlBVU5HOjI6MTIzMDcwOjU5MC4yNjUyNjIKK1RBREEtVToyOjIyMjg0Nzo3NzMuNTY1MTUzCitNSU5EQVQ6Mjo1MTg5MTozMy45OTU2MTAKK1NJTkdBSU5HOjI6MjIyODQ3OjEwOTYuMzM1MTQwCitZRVNBR1lPOjI6MTY0MTk0OjM5My4wNDIxNTkKK01ZQUlORzoyOjE2NDE5NDoyNTcuMjkxNDQ0CitQQVVLOjI6MTY0MTk0OjE1OS4yNDkwNjcKK01ZSU5HWUFOOjI6MjIyODQ3OjYwOS4zMzUzNjgKK1lFLU5HQU46Mjo3NDQ0MDo1NS4zNDU4NjYKK1NBVzoyOjE2NDE5NDoyMzAuMjkyMjg5CitOQVRPR1lJOjI6MjIyODQ3OjQzNi45MDIzMDMKK0tVTkhJTkc6Mjo3NDQ0MDo3MC40OTA5MzEKK0xBSS1IS0E6Mjo3NDQ0MDo2Mi4xNTQ2NTQKK01ZSVRIQToyOjIyMjg0Nzo1NzMuNjMwODA1CitQQUtPS0tVOjI6MTY0MTk0OjMxNi4wMDAxNDIKK01BVU5HREFXOjI6MjAzODk6MzEuNDk5NzcwCitUQVVOR1RIQToyOjIyMjg0Nzo1MzAuOTA1NzYyCitCVVRISURBVU5HOjI6MjAzODk6MjQuOTA0MDc4CitXVURXSU46MjoyMjI4NDc6MzAwLjEwMDM0OAorTllBVU5HVToyOjIyMjg0NzozODMuODMzMDY0CitMT0kgTEVNOjI6NzQ0NDA6MTgxLjIzMDYyMAorS0FOUEVUTEVUOjI6NTE4OTE6NjAuMzc3NjIzCitTRUlLUFlVOjI6MTY0MTk0OjI5MS41MDYyNTcKK01BSExBSU5HOjI6MjIyODQ3OjcxMS4wODUxMDAKK0tZQVVLVEFXOjI6MjAzODk6MzAuMTU4OTAxCitLWUFVS1BBREFVTkc6MjoyMjI4NDc6Mjc0LjI0NjYzOQorUElOREFZQToyOjc0NDQwOjI1MS40NzI2OTgKK01BVU5HREFXOjI6MjAzODk6MjAzODkuNTI3NTU5CitNQVVOR0RBVzoyOjIwMzg5OjIwMzg5LjUyNzU1OQorS0FMQVc6Mjo3NDQ0MDoxMDcuMzA3MTU2CitNQVVOR0RBVzoyOjIwMzg5OjIwMzg5LjUyNzU1OQorVEhBWkk6MjoyMjI4NDc6MzcwLjM5OTA2OQorTUFVTkdEQVc6MjoyMDM4OToxNzE4LjAxOTQ5OAorTUVJS1RJTEE6MjoyMjI4NDc6NTU2LjgwOTg3MAorTUFVTkdEQVc6MjoyMDM4OTo1NzI5LjY1MTgzNQorU0FMSU46MjoxNjQxOTQ6MTkwLjY0MDI4NgorQ0hBVUs6MjoxNjQxOTQ6NDUwLjY0Mjk3MgorU0lET0tUQVlBOjI6MTY0MTk0OjE3NC4xNDEyMjQKK01JTkJZQToyOjIwMzg5OjE3Ljk1MTA4MQorUE9OTkFHWVVOIEFORCBSQVRIRURBVU5HOjI6MjAzODk6MzYuMDkxMzM1CitNUkFVSy1PTzoyOjIwMzg5OjQ1Ljg4NzkzMQorTkFUTUFVSzoyOjE2NDE5NDoxNzcuMjU0NzQzCitQWUFXQldFOjI6MjIyODQ3OjMzNy4zOTk4MDIKK0JVVEhJREFVTkc6MjoyMDM4OTo3NDAyLjkxMTI1OQorWUVOQU5HWUFVTkc6MjoxNjQxOTQ6Mzg0LjYzMjYxNgorQlVUSElEQVVORzoyOjIwMzg5OjM1NTcuMjg0MTY4CitQT05OQUdZVU4gQU5EIFJBVEhFREFVTkc6MjoyMDM4OToxMDg3Mi4xMzAxMDEKK1BPTk5BR1lVTiBBTkQgUkFUSEVEQVVORzoyOjIwMzg5OjE3Mi41MzAyMjIKK1lBTUVUSElOOjI6MjIyODQ3OjI1MS4wMDUxMzIKK0FOOjI6MjAzODk6Ny44Mzg3NDkKK1BXSU5CWVU6MjoxNjQxOTQ6MzE5Ljc5OTc1MAorTVJBVUstT086MjoyMDM4OTo2ODEuODU3NDU1CitQT05OQUdZVU4gQU5EIFJBVEhFREFVTkc6MjoyMDM4OTozNjQ5LjUzNDE0MworUE9OTkFHWVVOIEFORCBSQVRIRURBVU5HOjI6MjAzODk6NDEyLjYyOTQ5MAorUEFVS1RBVzoyOjIwMzg5Ojc2MS41MTQzNzQKK1BPTk5BR1lVTiBBTkQgUkFUSEVEQVVORzoyOjIwMzg5OjIwMzg5LjUyNzU1OQorUE9OTkFHWVVOIEFORCBSQVRIRURBVU5HOjI6MjAzODk6MTA2NDQuNDc2OTY1CitNSU5CWUE6MjoyMDM4OToyMDM4OS41Mjc1NTkKK1BBVUtUQVc6MjoyMDM4OToxNzQuNDY5NDMyCitQT05OQUdZVU4gQU5EIFJBVEhFREFVTkc6MjoyMDM4OToyMDM4OS41Mjc1NTkKK01ZT1RISVQ6MjoxNjQxOTQ6MjI1LjQyODE5NAorTUlOQllBOjI6MjAzODk6MjAzODkuNTI3NTU5CitNQUdXRToyOjE2NDE5NDoyNjguNTM0MTI2CitUQVRLT046MjoyMjI4NDc6MjExLjY5ODA2OQorTUlOQllBOjI6MjAzODk6MzMzLjYxMDUwMQorTUlOQlUgKFNBR1UpOjI6MTY0MTk0OjI0My4zNDk5OTEKK01JTkJZQToyOjIwMzg5OjM0MTAuMzg4NzU2CitNWUVCT046MjoyMDM4OTo0OC4xNDY2MzkKK1NJVFRXRSAoQUtZQUIpOjI6MjAzODk6NDcxLjY3NTk4OAorTUlOQllBOjI6MjAzODk6NzEwLjI0MDQ3OQorUE9OTkFHWVVOIEFORCBSQVRIRURBVU5HOjI6MjAzODk6MzI4NS42Njk0ODUKK1BPTk5BR1lVTiBBTkQgUkFUSEVEQVVORzoyOjIwMzg5OjIwMzg5LjUyNzU1OQorUEFVS1RBVzoyOjIwMzg5OjIwMzg5LjUyNzU1OQorUEFVS1RBVzoyOjIwMzg5OjUzMjguNzg5OTIxCitOR0FQRToyOjE2NDE5NDozNzQuMzg1Mzk3CitQQVVLVEFXOjI6MjAzODk6NDI3LjgzMzk2NQorUEFVS1RBVzoyOjIwMzg5OjE5Mjk1LjQ3NDE3MworTVlFQk9OOjI6MjAzODk6NTAyLjUzODIzNgorTVlFQk9OOjI6MjAzODk6OTMzLjM2NzE4OAorTVlFQk9OOjI6MjAzODk6MTY5Mi4zOTQyNDcKK1BBVUtUQVc6MjoyMDM4OTo5MTM4LjE1NTQyMQorTVlFQk9OOjI6MjAzODk6MTA0NTYuOTM0ODIxCitQQVVLVEFXOjI6MjAzODk6MjE2MC43OTQzMzAKK01ZRUJPTjoyOjIwMzg5OjIwMzg5LjUyNzU1OQorUEFVS1RBVzoyOjIwMzg5OjIzOC44MTkxNTUKK1RBVU5HRFdJTkdZSToyOjE2NDE5NDoyMDYuNDk4ODQ5CitQQVVLVEFXOjI6MjAzODk6NjY3Ljk4ODk0NQorTVlFQk9OOjI6MjAzODk6MjAzODkuNTI3NTU5CitQQVVLVEFXOjI6MjAzODk6ODA5Ny4wMTM3NDkKK1BBVUtUQVc6MjoyMDM4OToyMDM4OS41Mjc1NTkKK1BBVUtUQVc6MjoyMDM4OToxMTY2LjEzNTc5NgorTVlFQk9OOjI6MjAzODk6MTA4MDkuODg0MDE1CitNWUVCT046MjoyMDM4OToxMjk3OC42Mjc0NTQKK01JTkhMQToyOjE2NDE5NDoxNjkuMjg3MTQ0CitQWUlOTUFOQToyOjIyMjg0NzoyNzQuNDMzOTcxCitNWUVCT046MjoyMDM4OToxNDU3MC42Mjk5MzEKK01ZRUJPTjoyOjIwMzg5OjM2MS40MTQ0OTQKK01ZRUJPTjoyOjIwMzg5Ojk2NTAuNzA5ODM4CitNWUVCT046MjoyMDM4OToyMDM4OS41Mjc1NTkKK01ZRUJPTjoyOjIwMzg5OjIwMzg5LjUyNzU1OQorTEVXRToyOjIyMjg0NzoyNTEuMzc3MjU4CitNWUVCT046MjoyMDM4OTo0Mzk3LjU1MzA5MgorTVlFQk9OOjI6MjAzODk6NzE3MC45NDIzMzAKK01ZRUJPTjoyOjIwMzg5OjEzNDAuNDA5ODMzCitNWUVCT046MjoyMDM4OTo5OTcwLjI4Mjg2MQorTVlFQk9OOjI6MjAzODk6Mjc5NS40Mjk1MzMKK01ZRUJPTjoyOjIwMzg5OjIwMzg5LjUyNzU1OQorQU46MjoyMDM4OTo3MTE1LjcwMDUzNworTVlFQk9OOjI6MjAzODk6NzYyLjE1NjU1MAorTVlFQk9OOjI6MjAzODk6MTM1Ny4xMzAwNjcKK01ZRUJPTjoyOjIwMzg5OjI4MDUuNTAzMjAxCitNWUVCT046MjoyMDM4OTozOTU4LjgyMzMxNQorTVlFQk9OOjI6MjAzODk6NDMyOS44MjE0NTIKK01ZRUJPTjoyOjIwMzg5OjU4My42MjU4MTUKK01ZRUJPTjoyOjIwMzg5OjIwMzg5LjUyNzU1OQorTVlFQk9OOjI6MjAzODk6NDkzNS43Njk5NzQKK01ZRUJPTjoyOjIwMzg5OjEyNDguNzE4MzM4CitTSU5CQVVOR1dFIChUQU5UQUJJTik6MjoxNjQxOTQ6MTg3Ljk3OTE5MworTVlFQk9OOjI6MjAzODk6MTQyNS41MTk5OTcKK01ZRUJPTjoyOjIwMzg5OjE2MTYuMzg0NDQyCitNWUVCT046MjoyMDM4OToxNjU5NC41MjU1MTgKK01ZRUJPTjoyOjIwMzg5OjIwMzg5LjUyNzU1OQorTVlFQk9OOjI6MjAzODk6MTE3MTYuODY2Nzk0CitNWUVCT046MjoyMDM4OToyMDM4OS41Mjc1NTkKK01ZRUJPTjoyOjIwMzg5OjIwMzg5LjUyNzU1OQorS1lBVUtQWVU6MjoyMDM4OToyMDM4OS41Mjc1NTkKK0tZQVVLUFlVOjI6MjAzODk6MTIyMjEuMzU4Mjk4CitLWUFVS1BZVToyOjIwMzg5OjIwMzg5LjUyNzU1OQorS1lBVUtQWVU6MjoyMDM4OToyMDM4OS41Mjc1NTkKK01JTkRPTjoyOjE2NDE5NDoxNjguOTE4NjcyCitLWUFVS1BZVToyOjIwMzg5OjgzMzYuOTIyMzI0CitLWUFVS1BZVToyOjIwMzg5OjkzLjYxNzg4NgorS1lBVUtQWVU6MjoyMDM4OToyMDM4OS41Mjc1NTkKK0tZQVVLUFlVOjI6MjAzODk6MjAzODkuNTI3NTU5CitLWUFVS1BZVToyOjIwMzg5OjIwMzg5LjUyNzU1OQorS1lBVUtQWVU6MjoyMDM4OToyMTc4Ljg1MzY4MworVEhBWUVUOjI6MTY0MTk0OjQyMC42MDU5ODMKK0tZQVVLUFlVOjI6MjAzODk6MTA3NzcuMDUzMzYxCitLWUFVS1BZVToyOjIwMzg5OjIwMzExLjM2OTQxMAorVEhBTkRBVU5HOjI6MTUxMDcyOjEwOC43NDUwMDgKK0tZQVVLUFlVOjI6MjAzODk6NDU4OC43MTE3MjMKK1lFREFTSEU6MjoxNTAyOTI6MTM5LjA5MTk4NQorS1lBVUtQWVU6MjoyMDM4OToyMDM4OS41Mjc1NTkKK0tZQVVLUFlVOjI6MjAzODk6MjAzODkuNTI3NTU5CitUQVVOR1VQOjI6MjAzODk6MTEuNjY2MjYxCitNWUFZREUgKEFVTkdMQU4pOjI6MTY0MTk0OjE2NS43MzA5OTIKK0tZQVVLUFlVOjI6MjAzODk6MjAzODkuNTI3NTU5CitLWUFVS1BZVToyOjIwMzg5Ojk5Ljc5MDAzNgorS1lBVUtQWVU6MjoyMDM4OToyMDM4OS41Mjc1NTkKK0tZQVVLUFlVOjI6MjAzODk6MjAzODkuNTI3NTU5CitLWUFVS1BZVToyOjIwMzg5OjE2Mjc3Ljc2NDI5NworUkFNUkVFOjI6MjAzODk6NDUuNTQ4NzIxCitLWUFVS1BZVToyOjIwMzg5OjQxNzAuOTI0NjM5CitSQU1SRUU6MjoyMDM4OToyMDM4OS41Mjc1NTkKK0tZQVVLUFlVOjI6MjAzODk6Mjk1Ny42NTk4ODcKK0tZQVVLUFlVOjI6MjAzODk6MTM1NzguMTQ1Nzc3CitLWUFVS1BZVToyOjIwMzg5OjIwMzg5LjUyNzU1OQorS1lBVUtQWVU6MjoyMDM4OToyMDM4OS41Mjc1NTkKK0tZQVVLUFlVOjI6MjAzODk6MjAzODkuNTI3NTU5CitQQVVLS0FVTkc6MjoxNTAyOTI6MjExLjg1NzU2MQorVEhPVU5HT086MjoxNTAyOTI6MTk4Ljc2NjIxNAorS0FNQToyOjE2NDE5NDo0NTQuNzg4Nzc4CitUQVVOR1VQOjI6MjAzODk6MjAzODkuNTI3NTU5CitQUk9NRToyOjE1MDI5Mjo0NDUuOTI2MTI4CitUQVVOR1VQOjI6MjAzODk6MTgwMzQuMTEwNDMwCitUQVVOR1VQOjI6MjAzODk6MTYwMDYuNzAwODAwCitQQURBVU5HOjI6MTUwMjkyOjE3Ni45Mzg2ODEKK01BTiBBVU5HOjI6MjAzODk6MTE1LjAzODM3MgorT0tUV0lOOjI6MTUwMjkyOjI3NC40NzAxOTcKK01BTiBBVU5HOjI6MjAzODk6MjAzODkuNTI3NTU5CitUQU5UQUJJTjoyOjE1MDI5Mjo2ODYuNTYzNjM4CitUQVVOR1VQOjI6MjAzODk6MTk4MS43MjIzOTcKK1JBTVJFRToyOjIwMzg5OjI1OTIuMTE3NjY0CitUSEVHT046MjoxNTAyOTI6MzI2LjEzNjg5OQorUFlVOjI6MTUwMjkyOjE3Ni4zMjcxNTQKK05BVFRBTElOOjI6MTUwMjkyOjM1MS41NTY5MjgKK0FSQUtBTiAoU0FORE9XQVkpOjI6MjAzODk6MTQuMTg1NTczCitTSFdFREFVTkc6MjoxNTAyOTI6NDc3Ljg3ODUwNAorUkFNUkVFOjI6MjAzODk6MTY3NzIuMjEzODc2CitNQU4gQVVORzoyOjIwMzg5OjIwMzg5LjUyNzU1OQorTUFOIEFVTkc6MjoyMDM4OTo1MjgxLjg1MTg4NworUEFVTkdERToyOjE1MDI5MjoxMjMzLjQ4MjE4NQorQVJBS0FOIChTQU5ET1dBWSk6MjoyMDM4OToyMDM4OS41Mjc1NTkKK0tZQU5HSU46Mjo4MjA5MDoyNDEuOTc0MzY0CitLWUFVS1RBR0E6MjoxNTAyOTI6MTMzLjU3NDgxMworR1lPQklOR0FVSzoyOjE1MDI5MjozOTAuMDA5NzEyCitaSUdPTjoyOjE1MDI5Mjo3ODEuNzc2OTQwCitNQU4gQVVORzoyOjIwMzg5OjIwMzg5LjUyNzU1OQorQVJBS0FOIChTQU5ET1dBWSk6MjoyMDM4OToyMDM4OS41Mjc1NTkKK01ZQU5BVU5HOjI6ODIwOTA6MTMyLjgxOTU0OAorT0tQTzoyOjE1MDI5MjozNzkuOTcyNzQxCitNT05ZTzoyOjE1MDI5Mjo3MzUuNTU1MzU3CitHV0E6MjoyMDM4OToyMS41MTUwOTUKK0dXQToyOjIwMzg5OjIwMzg5LjUyNzU1OQorTUlOSExBOjI6MTUwMjkyOjIwNC42NTc0NzYKK05ZQVVOR0lFQklOOjI6MTUwMjkyOjUxMy43ODYwMjYKK0dXQToyOjIwMzg5OjIwMzg5LjUyNzU1OQorSU5HQVBVOjI6ODIwOTA6MTE5LjcxODIwNQorTEVUUEFUQU46MjoxNTAyOTI6NTU0Ljk0NDYzOAorQkFHTyAoUEVHVSk6MjoxNTAyOTI6MTM5LjM4MDExMQorREFJSy1VOjI6MTUwMjkyOjMwNS44MTI4OTUKK0hFTlpBREE6Mjo4MjA5MDoyODguMTI2Mzc1CitUSEFSUkFXQUREWToyOjE1MDI5Mjo3MTIuMDQ2NjE1CitITUFXQkk6MjoyMzkwMzA6NDI3LjE3MDU3OAorTEVNWUVUSE5BOjI6ODIwOTA6MjA2LjgwMDEwOAorV0FXOjI6MTUwMjkyOjQ0OS4wNTE2MzQKK0RBTlVCWVU6Mjo4MjA5MDoxNTYuMDQ0NzUzCitITEVHVToyOjIzOTAzMDoyOTguMDczODQ2CitaQUxVTjoyOjgyMDkwOjQwMS40MDg0MTAKK0dXQToyOjIwMzg5OjIwMzg5LjUyNzU1OQorVEFJS0tZSToyOjIzOTAzMDo1ODYuNTI5NjA5CitZRUdZSToyOjgyMDkwOjI5MC42MzE2OTUKK0tZT05QWUFXOjI6ODIwOTA6MTk0LjY2NTY3OAorV0FXOjI6MTUwMjkyOjU5OTcuNTExMjUyCitUSEFCQVVORzoyOjgyMDkwOjExOS40MTM0ODAKK1dBVzoyOjE1MDI5Mjo2NTU0LjIwMDA5MworV0FXOjI6MTM3MDAwOjEzNzAwMC4wMDAwMDAKK1RIQU5BVFBJTjoyOjE1MDI5Mjo1MTkuMDI4NzA1CitUSEFOQVRQSU46MjoxNTAyOTI6MTI5ODUyLjg2OTUxNQorUEFOVEFOQVc6Mjo4MjA5MDoxMjYuMzY2NzExCitZQU5ET09OOjI6ODIwOTA6MjQ0LjQ3NzIxNAorS1lBVU5HR09OOjI6ODIwOTA6NTcwLjY0MjYxNgorS0FXQToyOjE1MDI5MjozNjIuNzEyNTA5CitCQVNTRUlOIFdFU1Q6Mjo4MjA5MDoxMzAuNzk4NTQ4CitFSU5NRToyOjgyMDkwOjMxMS4wNDc2NzQKK0hUQU5UQUJJTjoyOjIzOTAzMDoyMjE1LjU1NDc0MworS0FZQU46MjoyMzkwMzA6MTAyNS41Mjg3NjIKK05HQVBVVEFXOjI6ODIwOTA6MzYzLjk3MjA0MworSVJSQVdBRERZOjI6ODIwOTA6MzQ2Ljg2MTI4MQorWUFOR09OIChSQU5HT09OKToyOjIzOTAzMDoyMjc4LjYzMDg1NQorSU5TRUlOOjI6MjM5MDMwOjE0NDIuOTQ2MDU5CitUSE9OR1dBOjI6MjM5MDMwOjc1NC4yMjE3NDEKK1NZUklBTToyOjIzOTAzMDoxNjQ3LjY4MTU0OQorSExFR1U6MjoxMzcwMDA6MTM3MDAwLjAwMDAwMAorTUEtVUJJTjoyOjgyMDkwOjI1MC45MzYxMDEKK1dBS0VNQToyOjgyMDkwOjE4Ni4zNzIzNDMKK05HQVBVVEFXOjI6ODIwOTA6NzQuNDI2NTQyCitNWUFVTkdNWUE6Mjo4MjA5MDoxMTguOTIyMTI1CitUV0FOVEU6MjoyMzkwMzA6MTI1My43MzY0OTEKK05HQVBVVEFXOjI6ODIwOTA6NjkzMi4xNDkwNzEKK0tZQVVLVEFOOjI6MjM5MDMwOjg4Ny40MDkwNzUKK0tZQUlLTEFUOjI6ODIwOTA6MjQ5LjQ3NjQ5OAorS0FXS0hNVToyOjIzOTAzMDoxMTQ5Ljc3NjgyMQorS0FXS0hNVToyOjIzOTAzMDoxNzc1LjMxNTU2NworTU9VTE1FSU5HWVVOOjI6ODIwOTA6MTg5Ljc5NDc2NAorTkdBUFVUQVc6Mjo4MjA5MDo4MjA5MC4yNTk3NDAKK0tVTkdZQU5HT046MjoyMzkwMzA6MzA1MC41MTE0NzQKK0RFREFZRToyOjgyMDkwOjMzMi4wNjkyNzYKK0tBV0tITVU6MjoxMzcwMDA6MTM3MDAwLjAwMDAwMAorREVEQVlFOjI6ODIwOTA6MTIxNzguNDg2ODQ5CitQWUFQT046Mjo4MjA5MDoyNTQuNTE5MDQzCitERURBWUU6Mjo4MjA5MDo4MjA5MC4yNTk3NDAKK0RFREFZRToyOjgyMDkwOjgyMDkwLjI1OTc0MAorQk9HQUxFOjI6ODIwOTA6OTcuOTcwMDQwCitNWUFVTkdNWUE6Mjo4MjA5MDo4MjA5MC4yNTk3NDAKK0RFREFZRToyOjgyMDkwOjgyMDkwLjI1OTc0MAorTkdBUFVUQVc6Mjo4MjA5MDo4MjA5MC4yNTk3NDAKK0RFREFZRToyOjgyMDkwOjgyMDkwLjI1OTc0MAorREVEQVlFOjI6ODIwOTA6MTM3OC4yNjEzODUKK05HQVBVVEFXOjI6ODIwOTA6Mzk4NS45NzE1ODcKK0RFREFZRToyOjgyMDkwOjMwOTEuMTg2NjE5CitLQVdLSE1VOjI6MTM3MDAwOjEzNzAwMC4wMDAwMDAKK0RFREFZRToyOjgyMDkwOjUyODkxLjY3NTAwOQorTEFCVVRUQToyOjgyMDkwOjEwMC4wMDY4MzYKK01ZQVVOR01ZQToyOjgyMDkwOjgyMDkwLjI1OTc0MAorREVEQVlFOjI6ODIwOTA6ODIwOTAuMjU5NzQwCitOR0FQVVRBVzoyOjgyMDkwOjg2MjYuOTIyNzM4CitNWUFVTkdNWUE6Mjo4MjA5MDo4MjA5MC4yNTk3NDAKK05HQVBVVEFXOjI6ODIwOTA6NDg1LjEwMTQwMgorREVEQVlFOjI6ODIwOTA6NjczNDUuODg3Nzk1CitOR0FQVVRBVzoyOjgyMDkwOjgyMDkwLjI1OTc0MAorTEFCVVRUQToyOjgyMDkwOjgyMDkwLjI1OTc0MAorQk9HQUxFOjI6ODIwOTA6NjAyNy41ODAyMDMKK0xBQlVUVEE6Mjo4MjA5MDo4MjA5MC4yNTk3NDAKK05HQVBVVEFXOjI6ODIwOTA6NzQ1MDAuNDUxNzIxCitMQUJVVFRBOjI6ODIwOTA6ODIwOTAuMjU5NzQwCitNT1VMTUVJTkdZVU46Mjo4MjA5MDo4MjA5MC4yNTk3NDAKK0JPR0FMRToyOjgyMDkwOjI3OTUuNzc5ODA0CitMQUJVVFRBOjI6ODIwOTA6MzYyNjcuNTM0OTU1CitCT0dBTEU6Mjo4MjA5MDoxNjUxLjA0MjcxMworTEFCVVRUQToyOjgyMDkwOjg2NzIuNzg1ODUyCitMQUJVVFRBOjI6ODIwOTA6MzA3OTcuMTcxMDI5CitMQUJVVFRBOjI6ODIwOTA6ODIwOTAuMjU5NzQwCitOR0FQVVRBVzoyOjgyMDkwOjE2NzExLjU5MTA0NQorQk9HQUxFOjI6ODIwOTA6MjU5MjYuMjAwOTYzCitCT0dBTEU6Mjo4MjA5MDoyMDYxMi4yNTQwMDUKK0JPR0FMRToyOjgyMDkwOjgyMDkwLjI1OTc0MAorTEFCVVRUQToyOjgyMDkwOjgyMDkwLjI1OTc0MAorQk9HQUxFOjI6ODIwOTA6NzA1MjcuMzY4MjQ0CitMQUJVVFRBOjI6ODIwOTA6ODIwOTAuMjU5NzQwCitMQUJVVFRBOjI6ODIwOTA6MjAxNS43NzY5MjgKK05HQVBVVEFXOjI6ODIwOTA6ODIwOTAuMjU5NzQwCitMQUJVVFRBOjI6ODIwOTA6ODIwOTAuMjU5NzQwCitMQUJVVFRBOjI6ODIwOTA6ODIwOTAuMjU5NzQwCitOR0FQVVRBVzoyOjgyMDkwOjgyMDkwLjI1OTc0MAorTEFCVVRUQToyOjgyMDkwOjQ2Mjk3LjQ4NzE5OAorQk9HQUxFOjI6ODIwOTA6MjE1NzUuODg5MDUxCitCT0dBTEU6Mjo4MjA5MDo3MDE5MS41MzE2NzQKK0JPR0FMRToyOjgyMDkwOjgyMDkwLjI1OTc0MAorQk9HQUxFOjI6ODIwOTA6ODIwOTAuMjU5NzQwCitCT0dBTEU6Mjo4MjA5MDo4MjA5MC4yNTk3NDAKK0NPQ09TIElTTEFORFM6MjoyMzkwMzA6NjM3NzQuNzM0MDYxCitDT0NPUyBJU0xBTkRTOjI6MTM3MDAwOjEzNzAwMC4wMDAwMDAKK0NPQ09TIElTTEFORFM6MjoyMzkwMzA6NDAyMjQuNDA1NDAyCitDT0NPUyBJU0xBTkRTOjI6MTk3Nzc3OjEzNzAwMC4wMDAwMDAKK01PTkcgWUFORzoyOjc0NDQwOjcxLjg5Mjk4MworS0VORyBUVU5HOjI6NzQ0NDA6MzUuNjM5OTYwCitNT05HIFlBV05HOjI6NzQ0NDA6NDAuOTMyMzE5CitNT05HIFBJTkc6Mjo3NDQ0MDozMS4xNzI5NDYKK01PTkcgSFBBWUFLOjI6NzQ0NDA6OTAuNjM1NDExCitOQU1TQU5HOjI6NzQ0NDA6NTQuOTgzNzc0CitUQVVOR0dZSToyOjc0NDQwOjExNi40NDgxNTQKK1RBQ0hJTEVLOjI6NzQ0NDA6NTUuMjQ4NjExCitNT05HIE5BSToyOjc0NDQwOjU3LjA4MTIwNQorTU9ORyBIU0FUOjI6NzQ0NDA6MzguOTE1MjE5CitITy1QT05HOjI6NzQ0NDA6MTkzLjkyNjkwMAorTU9ORyBUVU5HOjI6NzQ0NDA6NDAuNTQ1Nzg4CitZQVdVTkdIV0U6Mjo3NDQ0MDoxNTEuMjYxNDA2CitIU0kgSFNFTkc6Mjo3NDQ0MDo5MS4wNjQzODUKK0xBTkdLSE86Mjo3NDQ0MDo4NC4yMDgzMDQKK01BV0tNQUk6Mjo3NDQ0MDo3NC4xMTM5MDIKK1BJTkxBVU5HOjI6NzQ0NDA6NTQuMjYzNzkzCitNT05HIFBBTjoyOjc0NDQwOjM2LjcyNzA0OAorTE9JLUtBVzoyOjMzNjgwOjYyLjMwMzMxNQorUEVLSE9OOjI6NzQ0NDA6MTA2LjQyMzQ2OQorSFNBVEFXOjI6MzM2ODA6MzcuNzM4NzA2CitESU1BV0hTTzoyOjMzNjgwOjc3Ljc2NzA1MAorUEhSVUhTTzoyOjMzNjgwOjU0LjgxNTAwMworUEFTQVdORzoyOjMzNjgwOjI1LjcxMzU1MworQkFXTEFLSEU6MjozMzY4MDo0NS44ODM2MjkKK1BBUFVOOjI6MTUxMDcyOjU2LjUyNTI3MAorS1lBVUtLSToyOjE1MDI5MjoxODAuODYyNTk3CitTSFdFR1lJTjoyOjE1MDI5MjoxNjQuMDAxNzgxCitITEFJTkdCV0U6MjoxNTEwNzI6ODguNDE2NDYzCitCSUxJTjoyOjc1OTQwOjExMC44MzEzNTIKK1BBLUFOOjI6MTUxMDcyOjE0My42NzA0NzIKK0tZQUlLVE86Mjo3NTk0MDoyMzMuNjM1MTM1CitUSEFUT046Mjo3NTk0MDoxNDMuNzgwOTUyCitNWUFXQURJOjI6MTUxMDcyOjEzMS4wMDYzOTYKK1RIQVRPTjoyOjc1OTQwOjUxMTYzLjY2MjQxMAorS0FXS0FSRUlLOjI6MTUxMDcyOjI2NC45OTI3MzkKK1BBVU5HOjI6NzU5NDA6MjI5LjAyNDY2MQorTU9VTE1FSU46Mjo3NTk0MDoxNzIwMC41NTA5NjUKK01PVUxNRUlOOjI6NzU5NDA6MTA0NzAuMzQzOTYxCitLWUEtSU4gU0VJS0tZSToyOjE1MTA3Mjo0OC4wMjAwNDEKK01PVUxNRUlOOjI6NzU5NDA6NzU5NDAuNTM1NzE0CitNT1VMTUVJTjoyOjc1OTQwOjE2NzE5Ljg4NjEzNQorTU9VTE1FSU46Mjo3NTk0MDo3NTk0MC41MzU3MTQKK0tZQUlLTUFSQVc6Mjo3NTk0MDoxNjUuNjg5NDg5CitNT1VMTUVJTjoyOjc1OTQwOjEzMDQyLjQ2MDY0MQorUEFVTkc6Mjo3NTk0MDo3NTk0MC41MzU3MTQKK1BBVU5HOjI6NzU5NDA6Mzg0MTIuODAyNTQ5CitNT1VMTUVJTjoyOjc1OTQwOjc1OTQwLjUzNTcxNAorQ0hBVU5HWk9OOjI6NzU5NDA6NzU5NDAuNTM1NzE0CitDSEFVTkdaT046Mjo3NTk0MDo1NTQuMDIxMzgyCitNT1VMTUVJTjoyOjc1OTQwOjMyODguNjg5ODgwCitDSEFVTkdaT046Mjo3NTk0MDo3NTk0MC41MzU3MTQKK01VRE9OOjI6NzU5NDA6Mjc3Ljc1MjUzOQorQ0hBVU5HWk9OOjI6NzU5NDA6NjY2OTEuOTYxMjkwCitDSEFVTkdaT046Mjo3NTk0MDo4MjU1LjkwMDE5NAorVEhBTkJZVVpBWUFUOjI6NzU5NDA6MjE1LjgwODc5NQorWUU6Mjo3NTk0MDo3NC45Mzk3MTMKK1lFOjI6NzU5NDA6MjAzNDEuODk3ODMwCitZRToyOjc1OTQwOjc1OTQwLjUzNTcxNAorWUVCWVU6Mjo0NzAxOjIuOTY2OTM0CitZRToyOjc1OTQwOjc1OTQwLjUzNTcxNAorWUU6Mjo3NTk0MDo3NTk0MC41MzU3MTQKK1RBVk9ZOjI6NDcwMToxLjg0MTY0OAorWUVCWVU6Mjo0NzAxOjQ3MDEuMTU0NDcyCitZRUJZVToyOjQ3MDE6MzQ3OS42ODY5MjkKK1lFQllVOjI6NDcwMTo0MzM3LjA5NDQyOQorTEFVTkdMT046Mjo0NzAxOjE1LjA5MDY3OAorTEFVTkdMT046Mjo0NzAxOjg4OC40NDUzNjgKK0xBVU5HTE9OOjI6NDcwMToyNjg2LjcxNjM0OAorVEhBWUVUQ0hBVU5HOjI6NDcwMTo1LjU0MzM5OAorTEFVTkdMT046Mjo0NzAxOjI0NDMuNzI5NzcxCitMQVVOR0xPTjoyOjQ3MDE6ODUzLjE1ODU1NgorTEFVTkdMT046Mjo0NzAxOjQ3MDEuMTU0NDcyCitMQVVOR0xPTjoyOjQ3MDE6MzIxMC41MDQ0MjUKK0xBVU5HTE9OOjI6NDcwMTo0NzAxLjE1NDQ3MgorUEFMQVc6Mjo0NzAxOjYuMDgyMjQwCitURU5BU1NFUklNOjI6NDcwMToxLjAzNTU1NworUEFMQVc6Mjo0NzAxOjQ4NC44NTAzNDAKK1BBTEFXOjI6NDcwMTo0NzAxLjE1NDQ3MgorUEFMQVc6Mjo0NzAxOjEyOS4zNjA5MTYKK1BBTEFXOjI6NDcwMTo3NzcuMjA0MDk3CitQQUxBVzoyOjQ3MDE6MjI3MS42NjA4NzMKK1BBTEFXOjI6NDcwMTo0NzAxLjE1NDQ3MgorUEFMQVc6Mjo0NzAxOjQ3MDEuMTU0NDcyCitQQUxBVzoyOjQ3MDE6NDcwMS4xNTQ0NzIKK1BBTEFXOjI6NDcwMTo0NzAxLjE1NDQ3MgorUEFMQVc6Mjo0NzAxOjQ3MDEuMTU0NDcyCitQQUxBVzoyOjQ3MDE6NDcwMS4xNTQ0NzIKK1BBTEFXOjI6NDcwMTozMTMwLjY5ODg2OAorUEFMQVc6Mjo0NzAxOjQ3MDEuMTU0NDcyCitQQUxBVzoyOjQ3MDE6NDcwMS4xNTQ0NzIKK1BBTEFXOjI6NDcwMTo0Mzk2LjkyNjcxNgorUEFMQVc6Mjo0NzAxOjQ3MDEuMTU0NDcyCitNRVJHVUk6Mjo0NzAxOjcwOS4wOTcwMzAKK1BBTEFXOjI6NDcwMTo0NzAxLjE1NDQ3MgorUEFMQVc6Mjo0NzAxOjQ3MDEuMTU0NDcyCitQQUxBVzoyOjQ3MDE6MTcyOC42NTYwNTQKK1BBTEFXOjI6NDcwMToxNzA3LjgxNjU2MworTUVSR1VJOjI6NDcwMToxMDcxLjg3NTkwNgorTUVSR1VJOjI6NDcwMTo0LjY4NDgyMgorTUVSR1VJOjI6NDcwMToyNy40NTI5OTYKK01FUkdVSToyOjQ3MDE6NDcwMS4xNTQ0NzIKK01FUkdVSToyOjQ3MDE6NDcwMS4xNTQ0NzIKK01FUkdVSToyOjQ3MDE6NDcwMS4xNTQ0NzIKK01FUkdVSToyOjQ3MDE6NDcwMS4xNTQ0NzIKK01FUkdVSToyOjQ3MDE6NDcwMS4xNTQ0NzIKK01FUkdVSToyOjQ3MDE6NDcwMS4xNTQ0NzIKK01FUkdVSToyOjQ3MDE6Njg4LjQ4MTk1OAorTUVSR1VJOjI6NDcwMToyOTcuODIxMzU2CitNRVJHVUk6Mjo0NzAxOjQ3MDEuMTU0NDcyCitNRVJHVUk6Mjo0NzAxOjI2Mi4wNDQ4NTkKK01FUkdVSToyOjQ3MDE6NDcwMS4xNTQ0NzIKK01FUkdVSToyOjQ3MDE6MzczNS44ODcxNTYKK01FUkdVSToyOjQ3MDE6MjQ0Ny4wNzc3NDcKK01FUkdVSToyOjQ3MDE6NDcwMS4xNTQ0NzIKK01FUkdVSToyOjQ3MDE6NDA1Ny4xNTc3NjMKK01FUkdVSToyOjQ3MDE6NDcwMS4xNTQ0NzIKK01FUkdVSToyOjQ3MDE6MzI0NS4yMTI1NjkKK01FUkdVSToyOjQ3MDE6NDcwMS4xNTQ0NzIKK01FUkdVSToyOjQ3MDE6NDcwMS4xNTQ0NzIKK01FUkdVSToyOjQ3MDE6MTA3LjI1MzUxNAorTUVSR1VJOjI6NDcwMTo0NzAxLjE1NDQ3MgorTUVSR1VJOjI6NDcwMToxNjY1LjMyMzkyMQorTUVSR1VJOjI6NDcwMTo0NzAxLjE1NDQ3MgorTUVSR1VJOjI6NDcwMTo0NzAxLjE1NDQ3MgorTUVSR1VJOjI6NDcwMTozNDU0LjczNzEzNQorTUVSR1VJOjI6NDcwMTo0NDguNzQwMTE2CitNRVJHVUk6Mjo0NzAxOjQ3MDEuMTU0NDcyCitNRVJHVUk6Mjo0NzAxOjQ3MDEuMTU0NDcyCitNRVJHVUk6Mjo0NzAxOjQ3MDEuMTU0NDcyCitNRVJHVUk6Mjo0NzAxOjQ3MDEuMTU0NDcyCitNRVJHVUk6Mjo0NzAxOjM0NzQuNTA0ODU1CitNRVJHVUk6Mjo0NzAxOjQ3MDEuMTU0NDcyCitNRVJHVUk6Mjo0NzAxOjY5OS44NDc2NDUKK01FUkdVSToyOjQ3MDE6NDcwMS4xNTQ0NzIKK01FUkdVSToyOjQ3MDE6NDcwMS4xNTQ0NzIKK01FUkdVSToyOjQ3MDE6NDcwMS4xNTQ0NzIKK01FUkdVSToyOjQ3MDE6NDcwMS4xNTQ0NzIKK01FUkdVSToyOjQ3MDE6MjU1Ny4zODExNDEKK01FUkdVSToyOjQ3MDE6NDcwMS4xNTQ0NzIKK01FUkdVSToyOjQ3MDE6NDcwMS4xNTQ0NzIKK01FUkdVSToyOjQ3MDE6NDcwMS4xNTQ0NzIKK01FUkdVSToyOjQ3MDE6MTQ3Ny4zMDQyNzEKK01FUkdVSToyOjQ3MDE6NDcwMS4xNTQ0NzIKK01FUkdVSToyOjQ3MDE6MzQ3OS4yNzc0NTkKK01FUkdVSToyOjQ3MDE6NDcwMS4xNTQ0NzIKK01FUkdVSToyOjQ3MDE6NDcwMS4xNTQ0NzIKK01FUkdVSToyOjQ3MDE6MTg1MC43OTcyMTEKK01FUkdVSToyOjQ3MDE6NDMwNC4zMTAwMDMKK01FUkdVSToyOjQ3MDE6NDcwMS4xNTQ0NzIKK01FUkdVSToyOjQ3MDE6NDcwMS4xNTQ0NzIKK01FUkdVSToyOjQ3MDE6MTEwLjE3MzE0OQorTUVSR1VJOjI6NDcwMTo0NzAxLjE1NDQ3MgorTUVSR1VJOjI6NDcwMTo0NzAxLjE1NDQ3MgorTUVSR1VJOjI6NDcwMTo0NzAxLjE1NDQ3MgorTUVSR1VJOjI6NDcwMTo0NzAxLjE1NDQ3MgorTUVSR1VJOjI6NDcwMTo0NzAxLjE1NDQ3MgorTUVSR1VJOjI6NDcwMTo0NzAxLjE1NDQ3MgorTUVSR1VJOjI6NDcwMTo0NzAxLjE1NDQ3MgorTUVSR1VJOjI6NDcwMTo0Mjk1LjgyNjA5NgorTUVSR1VJOjI6NDcwMToyODczLjU5NDQwNworTUVSR1VJOjI6NDcwMTo0NzAxLjE1NDQ3MgorTUVSR1VJOjI6NDcwMTo0NzAxLjE1NDQ3MgorTUVSR1VJOjI6NDcwMToxMzczLjM0OTY3NQorTUVSR1VJOjI6NDcwMTo0NzAxLjE1NDQ3MgorTUVSR1VJOjI6NDcwMTo0NzAxLjE1NDQ3MgorTUVSR1VJOjI6NDcwMTo0NzAxLjE1NDQ3MgorTUVSR1VJOjI6NDcwMTo0MTY4LjU2OTY3MworTUVSR1VJOjI6NDcwMTo0NzAxLjE1NDQ3MgorTUVSR1VJOjI6NDcwMTo0NzAxLjE1NDQ3MgorTUVSR1VJOjI6NDcwMToxMjYyLjU1MjExNworTUVSR1VJOjI6NDcwMToxNTA4LjE2ODU2OAorTUVSR1VJOjI6NDcwMTo0NzAxLjE1NDQ3MgorTUVSR1VJOjI6NDcwMTo0NzAxLjE1NDQ3MgorTUVSR1VJOjI6NDcwMTo0NzAxLjE1NDQ3MgorTUVSR1VJOjI6NDcwMTo0NzAxLjE1NDQ3MgorTUVSR1VJOjI6NDcwMTo0NzAxLjE1NDQ3MgorTUVSR1VJOjI6NDcwMTo1MS4wMDA1NzAKK01FUkdVSToyOjQ3MDE6NDcwMS4xNTQ0NzIKK01FUkdVSToyOjQ3MDE6NDcwMS4xNTQ0NzIKK01FUkdVSToyOjQ3MDE6MjMwNC40ODUyMjcKK01FUkdVSToyOjQ3MDE6NDcwMS4xNTQ0NzIKK01FUkdVSToyOjQ3MDE6MzMxOC45MzY3ODMKK01FUkdVSToyOjQ3MDE6MTMwMS41OTE4MzYKK01FUkdVSToyOjQ3MDE6NDcwMS4xNTQ0NzIKK01FUkdVSToyOjQ3MDE6NDQ0OC4zNzU1MzIKK01FUkdVSToyOjQ3MDE6MjgwMy4zOTA3MTYKK01FUkdVSToyOjQ3MDE6Mzc0Mi4xNjQ4NTQKK01FUkdVSToyOjQ3MDE6NDcwMS4xNTQ0NzIKK01FUkdVSToyOjQ3MDE6NDcwMS4xNTQ0NzIKK01FUkdVSToyOjQ3MDE6NDcwMS4xNTQ0NzIKK01FUkdVSToyOjQ3MDE6NTk2Ljk2Njk5MworTUVSR1VJOjI6NDcwMTo3NTYuNjk4NzU3CitNRVJHVUk6Mjo0NzAxOjE3MjAuNjk3MTI2CitCT0tQWUlOOjI6NDcwMToyLjI5MTE3NgorTUVSR1VJOjI6NDcwMTo1NzYuNjYyNTYzCitNRVJHVUk6Mjo0NzAxOjU1Mi41OTg3MDYKK01FUkdVSToyOjQ3MDE6MzI5MS41MTY0NjUKK01FUkdVSToyOjQ3MDE6MTE4MC43ODY2NTYKK01FUkdVSToyOjQ3MDE6MTcwNS4yNjEyMDYKK01FUkdVSToyOjQ3MDE6MTcyLjg4NTcyNgorTUVSR1VJOjI6NDcwMTo0NzAxLjE1NDQ3MgorTUVSR1VJOjI6NDcwMTo0NzAxLjE1NDQ3MgorTUVSR1VJOjI6NDcwMTo5MjIuMjI4OTg1CitNRVJHVUk6Mjo0NzAxOjE1NjEuNDI4Nzg2CitNRVJHVUk6Mjo0NzAxOjQ3MDEuMTU0NDcyCitNRVJHVUk6Mjo0NzAxOjM3MDYuMjY5NDQ2CitNRVJHVUk6Mjo0NzAxOjgwMi4zNDYzODQKK01FUkdVSToyOjQ3MDE6MzAuMDQ4MTc4CitNRVJHVUk6Mjo0NzAxOjQ5LjM2MTkwMAorTUVSR1VJOjI6NDcwMTo4NzQuMzYzMTkyCitNRVJHVUk6Mjo0NzAxOjQ3MDEuMTU0NDcyCitNRVJHVUk6Mjo0NzAxOjQ3MDEuMTU0NDcyCitNRVJHVUk6Mjo0NzAxOjQ3MDEuMTU0NDcyCitNRVJHVUk6Mjo0NzAxOjQ3MDEuMTU0NDcyCitCT0tQWUlOOjI6NDcwMTo0NzAxLjE1NDQ3MgorTUVSR1VJOjI6NDcwMToyNjczLjAxMDQ1OQorQk9LUFlJTjoyOjQ3MDE6MTI1NC4xODMwMDAKK01FUkdVSToyOjQ3MDE6MTg3Ni4yNTQ0NzYKK0JPS1BZSU46Mjo0NzAxOjkxNy42MDg1NDAKK0JPS1BZSU46Mjo0NzAxOjQ3MDEuMTU0NDcyCitCT0tQWUlOOjI6NDcwMToyOTYxLjc2NTczMQorQk9LUFlJTjoyOjQ3MDE6NDcwMS4xNTQ0NzIKK0JPS1BZSU46Mjo0NzAxOjI5NzkuMTk4NTU5CitCT0tQWUlOOjI6NDcwMTo0NzAxLjE1NDQ3MgorQk9LUFlJTjoyOjQ3MDE6NTQyLjgyMTAwMQorQk9LUFlJTjoyOjQ3MDE6NDcwMS4xNTQ0NzIKK0JPS1BZSU46Mjo0NzAxOjQ3MDEuMTU0NDcyCitCT0tQWUlOOjI6NDcwMToxNTc5LjIyOTQ1NQorQk9LUFlJTjoyOjQ3MDE6NDcwMS4xNTQ0NzIKK0JPS1BZSU46Mjo0NzAxOjQ2Ni4xNzg2NjIKK0JPS1BZSU46Mjo0NzAxOjQ3MDEuMTU0NDcyCitCT0tQWUlOOjI6NDcwMTo0NzAxLjE1NDQ3MgorQk9LUFlJTjoyOjQ3MDE6MTk0LjE0NTg2OQorQk9LUFlJTjoyOjQ3MDE6MTI1Ni42MDQ3NjkKK0JPS1BZSU46Mjo0NzAxOjY5MC45MzM4MTkKK0JPS1BZSU46Mjo0NzAxOjE3NzUuNjY0MjE3CitCT0tQWUlOOjI6NDcwMTo5NjQuNDU5MDcxCitCT0tQWUlOOjI6NDcwMToyOTQyLjY2ODY1MworQk9LUFlJTjoyOjQ3MDE6NDcwMS4xNTQ0NzIKK0JPS1BZSU46Mjo0NzAxOjQ3MDEuMTU0NDcyCitCT0tQWUlOOjI6NDcwMTo2Ny41NDI0MTgKK0JPS1BZSU46Mjo0NzAxOjQ3MDEuMTU0NDcyCitCT0tQWUlOOjI6NDcwMTo0NzAxLjE1NDQ3MgorQk9LUFlJTjoyOjQ3MDE6MzI2LjE5NDAzOAorS0FXVEhBVU5HOjI6NDcwMTo1Ljc2NDY4MgorQk9LUFlJTjoyOjQ3MDE6NDcwMS4xNTQ0NzIKK0JPS1BZSU46Mjo0NzAxOjQ0MDcuMDEyODA5CitCT0tQWUlOOjI6NDcwMTo0NzAxLjE1NDQ3MgorQk9LUFlJTjoyOjQ3MDE6MjM4LjAwMTk5OQorQk9LUFlJTjoyOjQ3MDE6NzkyLjQwMzgzOAorQk9LUFlJTjoyOjQ3MDE6NDcwMS4xNTQ0NzIKK0JPS1BZSU46Mjo0NzAxOjI1ODEuMjY0ODc4CitCT0tQWUlOOjI6NDcwMTo0NzAxLjE1NDQ3MgorQk9LUFlJTjoyOjQ3MDE6NDcwMS4xNTQ0NzIKK0JPS1BZSU46Mjo0NzAxOjE2ODIuMDY5MTM1CitCT0tQWUlOOjI6NDcwMTo0NzAxLjE1NDQ3MgorQk9LUFlJTjoyOjQ3MDE6NDcwMS4xNTQ0NzIKK0tBV1RIQVVORzoyOjQ3MDE6NTY2LjQzMjc0OAorS0FXVEhBVU5HOjI6NDcwMTo0NzAxLjE1NDQ3MgorS0FXVEhBVU5HOjI6NDcwMTo0NzAxLjE1NDQ3MgorS0FXVEhBVU5HOjI6NDcwMTo0NzAxLjE1NDQ3MgorS0FXVEhBVU5HOjI6NDcwMTo1NzcuMzg5Nzk0CitLQVdUSEFVTkc6Mjo0NzAxOjQ3MDEuMTU0NDcyCitLQVdUSEFVTkc6Mjo0NzAxOjM0MC43OTIyNTEKK0tBV1RIQVVORzoyOjQ3MDE6NDcwMS4xNTQ0NzIKK0tBV1RIQVVORzoyOjQ3MDE6NDcwMS4xNTQ0NzIKK0tBV1RIQVVORzoyOjQ3MDE6NDcwMS4xNTQ0NzIKK0tBV1RIQVVORzoyOjQ3MDE6NDcwMS4xNTQ0NzIKK0tBV1RIQVVORzoyOjQ3MDE6NDcwMS4xNTQ0NzIKK0tBV1RIQVVORzoyOjQ3MDE6NDcwMS4xNTQ0NzIKK0tBV1RIQVVORzoyOjQ3MDE6NDcwMS4xNTQ0NzIKK0tBV1RIQVVORzoyOjQ3MDE6NDcwMS4xNTQ0NzIKK0tBV1RIQVVORzoyOjQ3MDE6NDcwMS4xNTQ0NzIKK0tBV1RIQVVORzoyOjQ3MDE6MzY1MS4xMjY4OTAKK0tBV1RIQVVORzoyOjQ3MDE6NDcwMS4xNTQ0NzIKK0tBV1RIQVVORzoyOjQ3MDE6NDcwMS4xNTQ0NzIKK0tBV1RIQVVORzoyOjQ3MDE6MjczLjE3NDUzMQorS0FXVEhBVU5HOjI6NDcwMTozMjk2LjkwNjQxOAorS0FXVEhBVU5HOjI6NDcwMToxNjQ4LjU3NDAyNgorS0FXVEhBVU5HOjI6NDcwMTo0NzAxLjE1NDQ3MgorS0FXVEhBVU5HOjI6NDcwMTo0NzAxLjE1NDQ3MgorS0FXVEhBVU5HOjI6NDcwMTo0NzAxLjE1NDQ3MgorS0FXVEhBVU5HOjI6NDcwMTo5NTAuOTE5ODA0CitLQVdUSEFVTkc6Mjo0NzAxOjQ3MDEuMTU0NDcyCitLQVdUSEFVTkc6Mjo0NzAxOjQ3MDEuMTU0NDcyCitLQVdUSEFVTkc6Mjo0NzAxOjQ3MDEuMTU0NDcyCitLQVdUSEFVTkc6Mjo0NzAxOjM5NTYuMjAxNjkzCitLQVdUSEFVTkc6Mjo0NzAxOjcyLjE2ODM4OQorS0FXVEhBVU5HOjI6NDcwMTo0NzAxLjE1NDQ3MgorS0FXVEhBVU5HOjI6NDcwMTo0NzAxLjE1NDQ3MgorS0FXVEhBVU5HOjI6NDcwMTo0NTQzLjM3NjYzMgorS0FXVEhBVU5HOjI6NDcwMTozODEzLjg4NzgwMAorS0FXVEhBVU5HOjI6NDcwMTo0NzAxLjE1NDQ3MgorS0FXVEhBVU5HOjI6NDcwMToxNjE3LjY3NTAxMworS0FXVEhBVU5HOjI6NDcwMTo0NzAxLjE1NDQ3MgorS0FXVEhBVU5HOjI6NDcwMTo0NjEuMzY5MzE1CitLQVdUSEFVTkc6Mjo0NzAxOjQ3MDEuMTU0NDcyCitLQVdUSEFVTkc6Mjo0NzAxOjM3NTcuMTYwNDA2CitLQVdUSEFVTkc6Mjo0NzAxOjQ3MDEuMTU0NDcyCitLQVdUSEFVTkc6Mjo0NzAxOjQ3MDEuMTU0NDcyCitLQVdUSEFVTkc6Mjo0NzAxOjIyOTcuNjMyODgyCitLQVdUSEFVTkc6Mjo0NzAxOjQ3MDEuMTU0NDcyCitLQVdUSEFVTkc6Mjo0NzAxOjQyNTQuNjY5NDU5CitLQVdUSEFVTkc6Mjo0NzAxOjQ3MDEuMTU0NDcyCitLQVdUSEFVTkc6Mjo0NzAxOjQ3MDEuMTU0NDcyCitLQVdUSEFVTkc6Mjo0NzAxOjE5NTguNTU0ODU1CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9OQU1JQklBX0FSRUEudHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvTkFNSUJJQV9BUkVBLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNzRmMWVmCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvTkFNSUJJQV9BUkVBLnR4dApAQCAtMCwwICsxLDM0IEBACitOYW1pYmlhCToJMAk6CTgyNDI5MgorQ2Fwcml2aQk6CTEJOgkxOTUzMi4zMAorRXJvbmdvCVtTV0FLT1BNVU5EXSA6CTEJOgk2MzcxOS44MAorSGFyZGFwIAk6CTEJOgkxMDk4ODguMTAKK2tlZXRtYW5zaG9vcAk6CTEJOgkxNjEzMjQuNTAKK0JlcnNlYmEgCToJMQk6CTM2ODA0LjcwCitLYXJhc2J1cmcgCToJMQk6CTE0NDI1NC42MAorS2VldG1hbnNob29wIFtLYXJhc10JOgkxCToJMTA1ODIuMDAKK0tob21hcyBbd2luZGhvZWtdOgkJMQk6CTQzNDE3LjUwCitLdW5lbmUgW091dGpvXQk6CTEJOgk4NDczMS45MAorT2hhbmd3ZW5hIFtFZW5oYW5hXQk6CTEJOgkxMzYzNy42MAorS2F2YW5nbyBbT2thdmFuZ29dIFtSdW5kdV0JOgkxCToJNTI5MC41MAorT21haGVrZSBbR29iYWJpc10JOgkxCToJMjY2MDcuMjAKK09tdXNhdGkgW1V0YXBpXQk6CTEJOgkxMDUzMjcuODAKK09zaGFuYSBbT3NoYWthdGldCToJMQk6CTE2MTk3NworT3NoaWtvdG8gW1RzdW1lYl0JOgkxCToJMTYwNzg4CitPdGpvem9uZGp1cGEgW090aml3YXJvbmdvXQk6CTEJOgkxMzU3MjMKK0JldGhhbmllbiA6IDEgOiAxODAwNAorQm9lc21hbmxhbmQgOiAxIDogMTg0NjgKK0RhbWFyYWxhbmQgOiAxIDogNDY1NjAKK0dyb290Zm9udGVpbiA6IDEgOiAyNjUyMAorSGVyZXJvbGFuZCBFYXN0IDogMSA6IDUxOTQ5CitIZXJlcm9sYW5kIFdlc3QgOiAxIDogMTY1MDAKK0thb2tvbGFuZCA6IDEgOiA1ODE5MAorS2FyaWJpYiA6IDEgOiAxMzIzMAorTHVkZXJpdHogOjEgOiA1MzA2MworTWFsdGFob2hlIDogMSA6IDI1NTczCitNYXJpZW50YWwgOiAxICA6IDQ3Njg5CitOYW1hbGFuZCA6IDEgOiAyMTEyMAorT2thaGFuZGphIDogMSA6IDE3NjQwCitPbWFydXJ1IDogMSA6ICA4NDI1CitPd2FtYm8gOiAxIDogNTE4MDAKK1JlaG9ib3RoIDogMSA6IDE0MTgyCisKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL05BTUlCSUFfUE9QVUxBVElPTi50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9OQU1JQklBX1BPUFVMQVRJT04udHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI2NDhhNjAKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9OQU1JQklBX1BPUFVMQVRJT04udHh0CkBAIC0wLDAgKzEsMzMgQEAKK05hbWliaWEJOgkwCToJMjAzMTAwMAorQ2Fwcml2aQk6CTEJOgk3OTg1MgorRXJvbmdvIFtTV0FLT1BNVU5EXQk6CTEJOgkxMDc2MjkKK0hhcmRhcCAJOgkxCToJNjc5OTgKK2tlZXRtYW5zaG9vcAk6CTEJOgk2OTY3NworQmVyc2ViYSA6CQkxCToJOTE5NQorS2FyYXNidXJnIAk6CTEJOgkxNDY5MworS2VldG1hbnNob29wIFtLYXJhc10JOgkxCToJMjEyOTQKK0tob21hcyBbd2luZGhvZWtdCToJMQk6CTI1MDMwNQorS3VuZW5lIFtPdXRqb10JOgkxCToJNjgyMjQKK09oYW5nd2VuYSBbRWVuaGFuYV0JIDoJMQk6CTIyNzcyOAorS2F2YW5nbyBbT2thdmFuZ29dIFtSdW5kdV0JOgkxCToJMjAxMDkzCitPbWFoZWtlIFtHb2JhYmlzXQk6CTEJOgk2NzQ5NgorT211c2F0aSBbVXRhcGldCSA6CTEJOgkyMjgzNjQKK09zaGFuYSBbT3NoYWthdGldCToJMQk6CTE2MTk3NworT3NoaWtvdG8gW1RzdW1lYl0JOgkxCToJMTYwNzg4CitPdGpvem9uZGp1cGEgW090aml3YXJvbmdvXQk6CTEJOgkxMzU3MjMKK0JldGhhbmllbiA6IDEgOiAgMjkwMAorQm9lc21hbmxhbmQgOiAxIDogMzgwMAorRGFtYXJhbGFuZCA6IDEgOiAzMjkwMAorR3Jvb3Rmb250ZWluIDogMSA6IDEzNSwzODQKK0hlcmVyb2xhbmQgRWFzdCA6IDEgOiAyNTMwMAorSGVyZXJvbGFuZCBXZXN0IDogMSA6IDE4ODAwCitLYW9rb2xhbmQgOiAxIDogMjYzMDAKK0thcmliaWIgOiAxIDogMTIxMDAgCitMdWRlcml0eiA6MSA6IDE3NTAwCitNYWx0YWhvaGUgOiAxIDogNDEwMAorTWFyaWVudGFsIDogMSAgOiAyNDkwMAorTmFtYWxhbmQgOiAxIDogMTYyMDAKK09rYWhhbmRqYSA6IDEgOiAyMDEwMCAKK09tYXJ1cnUgOiAxIDogNzQwMAorT3dhbWJvIDogMSA6IDYxNTEwMAorUmVob2JvdGggOiAxIDogMzQ0MDAKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL05FUEFMX0FSRUEudHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvTkVQQUxfQVJFQS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2Y2Mzc4NgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL05FUEFMX0FSRUEudHh0CkBAIC0wLDAgKzEsMTcgQEAKK05lcGFsCToJMAk6CTE0MDgwMAorQ2VudHJhbCBbQ2VudHJhbCBIaWxsXQk6CTEJOgkxMTgwNQorQ2VudHJhbCBNb3VudGFpbiAJOgkxCToJNjI3NworQ2VudHJhbCBUYXJhaSAJOgkxCToJOTMyOAorRWFzdCA6IDEgOiAxNzcwNworRWFzdGVybiBbRWFzdGVybiBIaWxsXSAJOgkxCToJMTA3NDkKK0Vhc3Rlcm4gTW91bnRhaW4gCToJMQk6CTEwNDM4CitFYXN0ZXJuIFRhcmFpIAk6CTEJOgk3MjY5CitGYXIgV2VzdCBbRmFyLXdlc3Rlcm4gSGlsbF0gCToJMQk6CTY3NjIKK0Zhci13ZXN0ZXJuIE1vdW50YWluIAk6CTEJOgk3OTMyCitGYXItd2VzdGVybiBUYXJhaSAJOgkxCToJNDg0NQorTWlkV2VzdCBbTWlkLXdlc3Rlcm4gTW91bnRhaW5dIAk6CTEJOgkyMTM1MQorTWlkLXdlc3Rlcm4gVGFyYWkgCToJMQk6CTczMTcKK01pZC13ZXN0ZXJuIEhpbGwgCToJMQk6CTEzNzEwCitXZXN0IFtXZXN0ZXJuIEhpbGxdIAk6CTEJOgkxODMxOQorV2VzdGVybiBNb3VudGFpbiAJOgkxCToJNTgxOQorV2VzdGVybiBUYXJhaSAJOgkxCToJNTI2MApkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvTkVQQUxfUE9QVUxBVElPTi50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9ORVBBTF9QT1BVTEFUSU9OLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41N2M5OGVlCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvTkVQQUxfUE9QVUxBVElPTi50eHQKQEAgLTAsMCArMSwxNyBAQAorTmVwYWwJOgkwCToJMjgyODcxNDcKK0NlbnRyYWwgW0NlbnRyYWwgSGlsbF0JOgkxCToJMzU0MjczMgorQ2VudHJhbCBNb3VudGFpbiAJOgkxCToJNTU0ODE3CitDZW50cmFsIFRhcmFpIAk6CTEJOgkzOTM0MDgwCitFYXN0IDogMSA6IDM3MDEyMzAKK0Vhc3Rlcm4gW0Vhc3Rlcm4gSGlsbF0gCToJMQk6CTE2NDMyNDYKK0Vhc3Rlcm4gTW91bnRhaW4gCToJMQk6CTQwMTU4NworRWFzdGVybiBUYXJhaSAJOgkxCToJMzI5OTY0MworRmFyIFdlc3QgW0Zhci13ZXN0ZXJuIEhpbGxdIAk6CTEJOgk3OTg5MzEKK0Zhci13ZXN0ZXJuIE1vdW50YWluIAk6CTEJOgkzOTc4MDMKK0Zhci13ZXN0ZXJuIFRhcmFpIAk6CTEJOgk5OTQ1OTYKK01pZFdlc3QgW01pZC13ZXN0ZXJuIE1vdW50YWluXSAJOgkxCToJMzA5MDg0CitNaWQtd2VzdGVybiBUYXJhaSAJOgkxCToJMTIzMDg2OQorTWlkLXdlc3Rlcm4gSGlsbCAJOgkxCToJMTQ3MzAyMgorV2VzdCBbV2VzdGVybiBIaWxsXSAJOgkxCToJMjc5MzE4MAorV2VzdGVybiBNb3VudGFpbiAJOgkxCToJMjQ1NjgKK1dlc3Rlcm4gVGFyYWkgCToJMQk6CTE3NTMyNjUKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL05FVEhFUkxBTkRTX0FSRUEudHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvTkVUSEVSTEFORFNfQVJFQS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2ZkOTUwYQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL05FVEhFUkxBTkRTX0FSRUEudHh0CkBAIC0wLDAgKzEsMTMgQEAKKyBORVRIRVJMQU5EUyA6IDAgOiA0MTUyNgorIEdST05JTkdFTiA6IDEgOiAyODkxLjAKKyBGUklFU0xBTkQgOiAxIDogNjA3LjAKKyBEUkVOVEhFIDogMSA6IDI2ODAuMAorIE5PT1JELUhPTExBTkQgOiAxIDogMzUxOC4wCisgT1ZFUklKU1NFTCA6IDEgOiAzNDE5LjAKKyBGTEVWT0xBTkQgOiAxIDogMjI0NS4wCisgR0VMREVSTEFORCA6IDEgOiA1MTQ0LjAKKyBaVUlELUhPTExBTkQgOiAxIDogMzM1OS4wCisgVVRSRUNIVCA6IDEgOiAxNDAxLjAKKyBOT09SRC1CUkFCQU5UIDogMSA6IDUwODMuMAorIFpFRUxBTkQgOiAxIDogMzA0MC4wCisgTElNQlVSRyA6IDEgOiAyMTUzCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9ORVRIRVJMQU5EU19QT1BVTEFUSU9OLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL05FVEhFUkxBTkRTX1BPUFVMQVRJT04udHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjliNjA3NTQKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9ORVRIRVJMQU5EU19QT1BVTEFUSU9OLnR4dApAQCAtMCwwICsxLDEyIEBACisgR1JPTklOR0VOIDogMSA6IDU1NDYwMAorIEZSSUVTTEFORCA6IDEgOiA2MDAwMDAKKyBEUkVOVEhFIDogMSA6IDQ0MzUwMAorIE5PT1JELUhPTExBTkQgOiAxIDogMjM5NzEwMAorIE9WRVJJSlNTRUwgOiAxIDogMTAyNjMwMAorIEZMRVZPTEFORCA6IDEgOiAyMjE1MDAKKyBHRUxERVJMQU5EIDogMSA6IDE4MTY5MDAKKyBaVUlELUhPTExBTkQgOiAxIDogMzI0NTQwMAorIFVUUkVDSFQgOiAxIDogMTAyNjgwMAorIE5PT1JELUJSQUJBTlQgOiAxIDogMjIwOTAwMAorIFpFRUxBTkQgOiAxIDogMzU3NTAwCitMSU1CVVJHIDogMSA6IDExMzE5MzgKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9OSUNBUkFHVUFfQVJFQS50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9OSUNBUkFHVUFfQVJFQS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDM0Y2IxNQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL05JQ0FSQUdVQV9BUkVBLnR4dApAQCAtMCwwICsxIEBACitOSUNBUkFHVUEgOiAwIDogMTIwMzM5CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9OSUNBUkFHVUFfUE9QVUxBVElPTi50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9OSUNBUkFHVUFfUE9QVUxBVElPTi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzA5Yzk3ZQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL05JQ0FSQUdVQV9QT1BVTEFUSU9OLnR4dApAQCAtMCwwICsxIEBACitOSUNBUkFHVUEgOiAwIDogNTE0MjA5OApkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvTklHRVJJQV9BUkVBLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL05JR0VSSUFfQVJFQS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDQ5MzQ3ZgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL05JR0VSSUFfQVJFQS50eHQKQEAgLTAsMCArMSwzNyBAQAorTmlnZXJpYQk6CTAJOgk5MjM3NjgKK0FiaWEgIAk6CTEJOgk2MzIwCitBYnVqYSBGQ1QgW0ZDVF0gCToJMQk6CTczMTUKK0FkYW1hd2EgW0FkYW13YXJhXQk6CTEJOgkzNjkxNworQWt3YWxib20gCToJMQk6CTcwODEKK0FuYW1icmEgCToJMQk6CTQ4NDQKK0JhdWNoaSAJOgkxCToJNjQ2MDUKK0JheWVsc2EgCToJMQk6CTAgIAorQmVudWUgCToJMQk6CTM0MDU5CitCb3JubyAJOgkxCToJNzA4OTgKK0Nyb3NzIFJpdmVyIAk6CTEJOgkyMDE1NgorRGVsdGEgCToJMQk6CTE3Njk4CitFYm9ueWkgCToJMQk6CSAgMAorRWRvIAk6CTEJOgkxNzgwMgorRWtpdGkgCToJMQk6CSAgMAorRW51Z3UgCToJMQk6CTEyODMxCitHb21iZSAJOgkxCToJICAwCitJbW8gCToJMQk6CTU1MzAKK0ppZ2F3YSAJOgkxCToJMjMxNTQKK0thZHVuYSAJOgkxCToJNDYwNTMKK0thbm8gCToJMQk6CTIwMTMxCitLYXRzaW5hIAk6CTEJOgkyNDE5MgorS2ViYmkgCToJMQk6CTM2ODAwCitLb2dpIAk6CTEJOgkyOTgzMworS3dhcmEgCToJMQk6CTM2ODI1CitMYWdvcyAJOgkxCToJMzM0NQorTmFzYXJhd2EgCToJMQk6CTI3MTE3CitOaWdlciAJOgkxCToJNzYzNjMKK09ndW4gCToJMQk6CTE2NzYyCitPbmRvIAk6CTEJOgkyMDk1OQorT3N1biAJOgkxCToJOTI1MQorT3lvIAk6CTEJOgkyODQ1NAorUGxhdGVhdSAJOgkxCToJMzA5MTMKK1JpdmVycyAJOgkxCToJMjE4NTAKK1Nva290byAJOgkxCToJNjU3MzUKK1RhcmFiYSAJOgkxCToJNTQ0NzMKK1lvYmUgCToJMQk6CTQ1NTAyCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9OSUdFUklBX1BPUFVMQVRJT04udHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvTklHRVJJQV9QT1BVTEFUSU9OLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YzE0MDJmCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvTklHRVJJQV9QT1BVTEFUSU9OLnR4dApAQCAtMCwwICsxLDM3IEBACitOaWdlcmlhCToJMAk6CTEzMTg1OTczMQorQWJpYSAgCToJMQk6CTI1NjkzNjIKK0FidWphIEZDVCBbRkNUXQk6CTEJOgk0MjMzOTEKK0FkYW1hd2EgW0FkYW13YXJhXSAJOgkxCToJMjM3NDg5MgorQWt3YWxib20gCToJMQk6CTI2Mzg0MTMKK0FuYW1icmEgCToJMQk6CTMwOTQ3ODMKK0JhdWNoaSAJOgkxCToJNDgwMTU2OQorQmF5ZWxzYSAJOgkxCToJMAorQmVudWUgCToJMQk6CTMxMDg3NTQKK0Jvcm5vIAk6CTEJOgkyOTAzMjM4CitDcm9zcyBSaXZlciAJOgkxCToJMjA4NTkyNgorRGVsdGEgCToJMQk6CTI4NzM3MTEKK0Vib255aSAJOgkxCToJMAorRWRvIAk6CTEJOgkyNDE0OTE5CitFa2l0aSAJOgkxCToJMAorRW51Z3UgCToJMQk6CTM1MzQ2MzMKK0dvbWJlIAk6CTEJOgkwCitJbW8gCToJMQk6CTI3NzkwMjgKK0ppZ2F3YSAJOgkxCToJMzE2NDEzNAorS2FkdW5hIAk6CTEJOgk0NDM4MDA3CitLYW5vIAk6CTEJOgk2Mjk3MTY1CitLYXRzaW5hIAk6CTEJOgk0MzM2MzYzCitLZWJiaSAJOgkxCToJMjMwNTc2OAorS29naSAJOgkxCToJMjM0NjkzNgorS3dhcmEgCToJMQk6CTE3NTE0NjQKK0xhZ29zIAk6CTEJOgk2MzU3MjUzCitOYXNhcmF3YSAJOgkxCToJMAorTmlnZXIgCToJMQk6CTI3NzU1MjYKK09ndW4gCToJMQk6CTI2MTQ3NDcKK09uZG8gCToJMQk6CTQzNDMyMzAKK09zdW4gCToJMQk6CTI0NjMxODUKK095byAJOgkxCToJMzkwMDgwMworUGxhdGVhdSAJOgkxCToJMzY3MTQ5OAorUml2ZXJzIAk6CTEJOgk0NDU0MzM3CitTb2tvdG8gCToJMQk6CTQ5MTExMTgKK1RhcmFiYSAJOgkxCToJMTY1NTQ0MworWW9iZSAJOgkxCToJMTU3ODE3MgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL05JR0VSX0FSRUEudHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvTklHRVJfQVJFQS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjU3ZTMzYwotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL05JR0VSX0FSRUEudHh0CkBAIC0wLDAgKzEsNDggQEAKK05pZ2VyCToJMAk6CTEyNjcwMDAKK0FnYWRlegk6CTEJOgk2MjcwODAKK0FybGl0IAk6CTEJOgkwCitCaWxtYSAJOgkxCToJMAorVGNoaXJveulyaW5lIAk6CTEJOgkwCitEaWZmYQk6CTEJOgkxNDcwMTcKK0RpZmZhIENvbW0uIAk6CTEJOgkwCitNYe5u6SBTb3JvYSAJOgkxCToJMAorTidndWlnbWkgCToJMQk6CTAKK0Rvc3NvCToJMQk6CTMxNzQwCitCb2JveWUgCToJMQk6CTAKK0RvZ29uZG91dGNoaSAJOgkxCToJMAorRG9zc28gCToJMQk6CTAKK0dheWEgCToJMQk6CTAKK0xvZ2EgCToJMQk6CTAKK01hcmFkaQk6CTEJOgkzOTIxOQorQWd1aekgCToJMQk6CTAKK0Rha29ybyAJOgkxCToJMAorR3VpZGFuIFJvdW1kamkgCToJMQk6CTAKK01hZGFyb3VuZmEgCToJMQk6CTAKK01heWFoaSAJOgkxCToJMAorVGVzc2FvdWEgCToJMQk6CTAKK05pYW1leQk6CTEJOgk0MDIKK05haW1leSBDb21tMSAJOgkxCToJMAorTmFpbWV5IENvbW0yIAk6CTEJOgkwCitOYWltZXkgQ29tbTMgCToJMQk6CTAKK1RhaG91YQk6CTEJOgkxMDYzOTcKK0FiYWxhayAJOgkxCToJMAorQmltaSBOJ0tvbm5pIAk6CTEJOgkwCitCb3V6YSAJOgkxCToJMAorSWxs6WxhIAk6CTEJOgkwCitLZWl0YSAJOgkxCToJMAorTWFkYW91YSAJOgkxCToJMAorVGFob3VhIAk6CTEJOgkwCitUY2hpbnRhLUJhcmFkZW4gCToJMQk6CTAKK1RpbGxhYmVyeQk6CTEJOgk5MTUyMQorRmlsaW5ndekgCToJMQk6CTAKK0tvbGxvIAk6CTEJOgkwCitPdWFsbGFtIAk6CTEJOgkwCitTYXkgCToJMQk6CTAKK1TpcmEgCToJMQk6CTAKK1RpbGxhYulyeSAJOgkxCToJMAoremluZGVyCToJMQk6CTE0NjE3MAorR291cukgCToJMQk6CTAKK01hZ2FyaWEgCToJMQk6CTAKK01hdGFtZXllIAk6CTEJOgkwCitNaXJpYWggCToJMQk6CTAKK1Rhbm91dCAJOgkxCToJMApkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvTklHRVJfUE9QVUxBVElPTi50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9OSUdFUl9QT1BVTEFUSU9OLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMzBkZWRiCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvTklHRVJfUE9QVUxBVElPTi50eHQKQEAgLTAsMCArMSw0OCBAQAorTmlnZXIJOgkwCToJMTI1MjUwOTQKK0FnYWRlegk6CTEJOgkzMTMyNzQKK0FybGl0IAk6CTEJOgk5NjMyNQorQmlsbWEgCToJMQk6CTE0MTE1CitUY2hpcm966XJpbmUgCToJMQk6CTIwMjgzNAorRGlmZmEJOgkxCToJMzI5NjU4CitEaWZmYSBDb21tLiAJOgkxCToJMTQyNTIyCitNYe5u6SBTb3JvYSAJOgkxCToJMTM1OTExCitOJ2d1aWdtaSAJOgkxCToJNTEyMjUKK0Rvc3NvCToJMQk6CTE0NzkwOTUKK0JvYm95ZSAJOgkxCToJMjY0ODg0CitEb2dvbmRvdXRjaGkgCToJMQk6CTQ4Mjg4MgorRG9zc28gCToJMQk6CTM1MjQxMworR2F5YSAJOgkxCToJMjQ3MTI3CitMb2dhIAk6CTEJOgkxMzE3ODkKK01hcmFkaQk6CTEJOgkyMjAyMDM1CitBZ3Vp6SAJOgkxCToJMjczOTI2CitEYWtvcm8gCToJMQk6CTQyOTk3NQorR3VpZGFuIFJvdW1kamkgCToJMQk6CTM0MTgzMworTWFkYXJvdW5mYSAJOgkxCToJNDMxODMzCitNYXlhaGkgCToJMQk6CTM4ODYwNworVGVzc2FvdWEgCToJMQk6CTMzNTg2MQorTmlhbWV5CToJMQk6CTY3NDk1MAorTmFpbWV5IENvbW0xIAk6CTEJOgkyOTkzODYKK05haW1leSBDb21tMiAJOgkxCToJMjgyMzgyCitOYWltZXkgQ29tbTMgCToJMQk6CTkzMTgyCitUYWhvdWEJOgkxCToJMTkwODEwMAorQWJhbGFrIAk6CTEJOgk3NzY3MAorQmltaSBOJ0tvbm5pIAk6CTEJOgkzNTE3ODEKK0JvdXphIAk6CTEJOgkyNjk1NDkKK0lsbOlsYSAJOgkxCToJMjU2ODEzCitLZWl0YSAJOgkxCToJMjEwMzY4CitNYWRhb3VhIAk6CTEJOgkzMTEwNTUKK1RhaG91YSAJOgkxCToJMzQ1ODUxCitUY2hpbnRhLUJhcmFkZW4gCToJMQk6CTg1MDEzCitUaWxsYWJlcnkJOgkxCToJMTg1ODM0MgorRmlsaW5ndekgCToJMQk6CTQwNDA4NgorS29sbG8gCToJMQk6CTMxNjU4NworT3VhbGxhbSAJOgkxCToJMjgwMjMzCitTYXkgCToJMQk6CTIyOTYyOAorVOlyYSAJOgkxCToJNDEzODUwCitUaWxsYWLpcnkgCToJMQk6CTIxMzk1OAoremluZGVyCToJMQk6CTIwMjQ4OTgKK0dvdXLpIAk6CTEJOgkyMTk4MDIKK01hZ2FyaWEgCToJMQk6CTQ4NTcwMworTWF0YW1leWUgCToJMQk6CTIzODIzMgorTWlyaWFoIAk6CTEJOgk3NDkzMzIKK1Rhbm91dCAJOgkxCToJMzMxODI5CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9OT1JUSCBLT1JFQV9BUkVBLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL05PUlRIIEtPUkVBX0FSRUEudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhlODIzMGUKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9OT1JUSCBLT1JFQV9BUkVBLnR4dApAQCAtMCwwICsxLDE0IEBACitOb3J0aCBLb3JlYQk6CTAJOgkxMjA1NDAKK0NoYW5nYW5nIAk6CTEJOgkxNjk2OAorU291dGggSGFtZ3lvbmcJOgkxCToJMTc1NzAKK05vcnRoIEhhbWd5b25nCToJMQk6CTE4OTcwCitOb3J0aCBId2FuZ2hhZSBbSHdhbmdoYWVidWstZG9dIAk6CTEJOgk4MDA3CitTb3V0aCBId2FuZ2hhZSBbSHdhbmdoYWVuYW0tZG9dIAk6CTEJOgk4MDAyCitLYWVzb25nIAk6CTEJOgkxMjU1CitLYW5nd29uCToJMQk6CTExMTUyCitOYWppbiBTbyhuYm9uZy1zaSAJOgkxCToJMAorTmFtcG8gCToJMQk6CTc1MworUHlvbmd5YW5nCToJMQk6CTEyMTkxCitTb3V0aCBQeW9uZ2FuCToJMQk6CTExNTc3CitOb3J0aCBQeW9uZ2FuCToJMQk6CTIwMDAKK1lhbmdnYW5nCToJMQk6CTE0MzE3CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9OT1JUSCBLT1JFQV9QT1BVTEFUSU9OLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL05PUlRIIEtPUkVBX1BPUFVMQVRJT04udHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdkNDAzNDEKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9OT1JUSCBLT1JFQV9QT1BVTEFUSU9OLnR4dApAQCAtMCwwICsxLDE0IEBACitOb3J0aCBLb3JlYQk6CTAJOgkyMzExMzAxOQorQ2hhbmdhbmcgCToJMQk6CTExNTI3MzMKK1NvdXRoIEhhbWd5b25nCToJMQk6CTIwNjA3MjUKK05vcnRoIEhhbWd5b25nCToJMQk6CTI3MzIyMzIKK05vcnRoIEh3YW5naGFlIFtId2FuZ2hhZWJ1ay1kb10gCToJMQk6CTE1MTIwNjAKK1NvdXRoIEh3YW5naGFlIFtId2FuZ2hhZW5hbS1kb10gCToJMQk6CTIwMTA5NTMKK0thZXNvbmcgCToJMQk6CTMzNDQzMworS2FuZ3dvbgk6CTEJOgkxMzA0NDgxCitOYWppbiBTbyhuYm9uZy1zaSAJOgkxCToJMAorTmFtcG8gCToJMQk6CTczMTQ0OAorUHlvbmd5YW5nCToJMQk6CTI0MDQ0OTAKK1NvdXRoIFB5b25nYW4JOgkxCToJMjg2NjEwOQorTm9ydGggUHlvbmdhbgk6CTEJOgkyNzQxMjYwCitZYW5nZ2FuZwk6CTEJOgk2Mzg0NzQKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL05PUlRIS09SRUFfQVJFQS50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9OT1JUSEtPUkVBX0FSRUEudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA1MzZlNjYKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9OT1JUSEtPUkVBX0FSRUEudHh0CkBAIC0wLDAgKzEsMTQgQEAKK05vcnRoIEtvcmVhCToJMAk6CTEyMDU0MAorQ2hhbmdhbmcgCToJMQk6CTE2OTY4CitTb3V0aCBIYW1neW9uZwk6CTEJOgkxNzU3MAorTm9ydGggSGFtZ3lvbmcJOgkxCToJMTg5NzAKK05vcnRoIEh3YW5naGFlIFtId2FuZ2hhZWJ1ay1kb10gCToJMQk6CTgwMDcKK1NvdXRoIEh3YW5naGFlIFtId2FuZ2hhZW5hbS1kb10gCToJMQk6CTgwMDIKK0thZXNvbmcgCToJMQk6CTEyNTUKK0thbmd3b24JOgkxCToJMTExNTIKK05hamluIFNvKG5ib25nLXNpIAk6CTEJOgkwCitOYW1wbyAJOgkxCToJNzUzCitQeW9uZ3lhbmcJOgkxCToJMTIxOTEKK1NvdXRoIFB5b25nYW4JOgkxCToJMTE1NzcKK05vcnRoIFB5b25nYW4JOgkxCToJMjAwMAorWWFuZ2dhbmcJOgkxCToJMTQzMTcKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9OT1JUSEtPUkVBX1BPUFVMQVRJT04udHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvTk9SVEhLT1JFQV9QT1BVTEFUSU9OLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NTUwOGU3Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvTk9SVEhLT1JFQV9QT1BVTEFUSU9OLnR4dApAQCAtMCwwICsxLDE0IEBACitOb3J0aCBLb3JlYQk6CTAJOgkyMzExMzAxOQorQ2hhbmdhbmcgCToJMQk6CTExNTI3MzMKK1NvdXRoIEhhbWd5b25nCToJMQk6CTIwNjA3MjUKK05vcnRoIEhhbWd5b25nCToJMQk6CTI3MzIyMzIKK05vcnRoIEh3YW5naGFlIFtId2FuZ2hhZWJ1ay1kb10gCToJMQk6CTE1MTIwNjAKK1NvdXRoIEh3YW5naGFlIFtId2FuZ2hhZW5hbS1kb10gCToJMQk6CTIwMTA5NTMKK0thZXNvbmcgCToJMQk6CTMzNDQzMworS2FuZ3dvbgk6CTEJOgkxMzA0NDgxCitOYWppbiBTbyhuYm9uZy1zaSAJOgkxCToJMAorTmFtcG8gCToJMQk6CTczMTQ0OAorUHlvbmd5YW5nCToJMQk6CTI0MDQ0OTAKK1NvdXRoIFB5b25nYW4JOgkxCToJMjg2NjEwOQorTm9ydGggUHlvbmdhbgk6CTEJOgkyNzQxMjYwCitZYW5nZ2FuZwk6CTEJOgk2Mzg0NzQKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9OT1JXQVlfQVJFQS50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9OT1JXQVlfQVJFQS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTFiZWJhYgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL05PUldBWV9BUkVBLnR4dApAQCAtMCwwICsxLDE4IEBACisgRmlubm1hcmsgOiAxIDogNDg2MzcuMAorIFRyb21zIDogMSA6IDI1OTU0LjAKKyBOb3JkbGFuZCA6IDEgOiAzODMyNy4wCisgTm9yZC1Ucm9lbmRlbGFnIDogMSA6IDIyNDYzLjAKKyBTb2VyLVRyb2VuZGVsYWcgOiAxIDogMTg4MzEuMAorIE1vZXJlIG9nIFJvbXNkYWwgOiAxIDogMTUxMDQuMAorIEhlZG1hcmsgOiAxIDogMjczODguMAorIE9wcGxhbmQgOiAxIDogMjUyNjAuMAorIFNvZ24gb2cgRmpvcmRhbmUgOiAxIDogMTg2MzQuMAorIEJ1c2tlcnVkIDogMSA6IDE0OTI3LjAKKyBIb3JkYWxhbmQgOiAxIDogMTU2MzQuMAorIE9zbG8gb2cgQWtlcnNodXMgOiAxIDogNTM3MS4wCisgVGVsZW1hcmsgOiAxIDogMTUzMTUuMAorIE9lc3Rmb2xkIDogMSA6IDQxODMuMAorIFJvZ2FsYW5kIDogMSA6IDkxNDEuMAorIFZlc3Rmb2xkIDogMSA6IDIyMTYuMAorIEF1c3QtQWdkZXIgOiAxIDogOTIxMi4wCisgVmVzdC1BZ2RlciA6IDEgOiA3MjgwLjAKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL05PUldBWV9QT1BVTEFUSU9OLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL05PUldBWV9QT1BVTEFUSU9OLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMTM5YjA1Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvTk9SV0FZX1BPUFVMQVRJT04udHh0CkBAIC0wLDAgKzEsMTggQEAKKyBGaW5ubWFyayA6IDEgOiA3NDU5MAorIFRyb21zIDogMSA6IDE0NjgxNgorIE5vcmRsYW5kIDogMSA6IDIzOTUzMgorIE5vcmQtVHJvZW5kZWxhZyA6IDEgOiAxMjcyMjYKKyBTb2VyLVRyb2VuZGVsYWcgOiAxIDogMjUxMDc2CisgTW9lcmUgb2cgUm9tc2RhbCA6IDEgOiAyMzgzNDYKKyBIZWRtYXJrIDogMSA6IDE4NzMxNAorIE9wcGxhbmQgOiAxIDogMTgyNTkzCisgU29nbiBvZyBGam9yZGFuZSA6IDEgOiAxMDY2MTQKKyBCdXNrZXJ1ZCA6IDEgOiAyMjUyNjEKKyBIb3JkYWxhbmQgOiAxIDogNDExMDIyCisgT3NsbyBvZyBBa2Vyc2h1cyA6IDEgOiA4Nzk3NTgKKyBUZWxlbWFyayA6IDEgOiAxNjI5ODEKKyBPZXN0Zm9sZCA6IDEgOiAyMzgzNDUKKyBSb2dhbGFuZCA6IDEgOiAzMzc5MDYKKyBWZXN0Zm9sZCA6IDEgOiAxOTgzNTQKKyBBdXN0LUFnZGVyIDogMSA6IDk3MzE0CisgVmVzdC1BZ2RlciA6IDEgOiAxNDUwOTEKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL09NQU5fQVJFQS50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9PTUFOX0FSRUEudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM0MGNkMWMKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9PTUFOX0FSRUEudHh0CkBAIC0wLDAgKzEsOSBAQAorT21hbgk6CTAJOgkyMTI0NjAKK0EgZGFraGxpeWEJOgkxCToJMzE5MDAKK0FsIERoYWhpcmEJOgkxCToJNDQwMDAKK0FsIEJhdG5haAk6CTEJOgkxMjUwMAorQWwgV3VzdGEJOgkxCToJNzk3MDAKK0EgU2hhcnFpeWEJOgkxCToJMzY0MDAKK2Rob2Zhcgk6CTEJOgk5OTMwMAorTXVzYW5kYW0JOgkxCToJMTgwMAorTXVzY2F0CToJMQk6CTM5MDAKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL09NQU5fUE9QVUxBVElPTi50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9PTUFOX1BPUFVMQVRJT04udHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFjM2NiNzIKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9PTUFOX1BPUFVMQVRJT04udHh0CkBAIC0wLDAgKzEsOSBAQAorT21hbgk6CTAJOgkzMTAyMjI5CitBIGRha2hsaXlhCToJMQk6CTI2NzE0MAorQWwgRGhhaGlyYQk6CTEJOgkyMDcwMTUKK0FsIEJhdG5haAk6CTEJOgk2NTM1MDUKK0FsIFd1c3RhCToJMQk6CTIyOTgzCitBIFNoYXJxaXlhCToJMQk6CTMxMzc2MQorZGhvZmFyCToJMQk6CTIxNTk2MAorTXVzYW5kYW0JOgkxCToJMjgzNzgKK011c2NhdAk6CTEJOgk2MzIwNzMKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL1BBS0lTVEFOX0FSRUEudHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvUEFLSVNUQU5fQVJFQS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjI4OWYyYQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL1BBS0lTVEFOX0FSRUEudHh0CkBAIC0wLDAgKzEsOSBAQAorUGFraXN0YW4JOgkwCToJODAzOTQwCitKYW1tdSBhbmQga2FzaG1pcgk6CTEJOgkxMzI5NworQmFsdWNoaXN0YW4JOgkxCToJMzQ3MTkwCitGLkEuVC5BLgk6CTEJOgkyNzIyMAorRi5DLlQuCToJMQk6CTkwNgorTi5XLkYuUC4JOgkxCToJNzQ1MjEKK05vcnRoZXJuIEFyZWFzIAk6CTEJOgk3MjUyMAorUHVuamFiIAk6CTEJOgkyMDUzNDUKK1NpbmQJOgkxCToJMTQwOTE0CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9QQUtJU1RBTl9QT1BVTEFUSU9OLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL1BBS0lTVEFOX1BPUFVMQVRJT04udHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY2YThjOTMKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9QQUtJU1RBTl9QT1BVTEFUSU9OLnR4dApAQCAtMCwwICsxLDkgQEAKK1Bha2lzdGFuCToJMAk6CTE2NTgwMzU2MAorSmFtbXUgYW5kIGthc2htaXIJOgkxCToJMjU4MDAwMAorQmFsdWNoaXN0YW4JOgkxCToJNjU2NTg4NQorRi5BLlQuQS4JOgkxCToJMzE3NjMzMQorRi5DLlQuCToJMQk6CTgwNTIzNQorTi5XLkYuUC4JOgkxCToJMTc3NDM2NDUKK05vcnRoZXJuIEFyZWFzIAk6CTEJOgk3MzAwMDAKK1B1bmphYiAJOgkxCToJNzM2MjEyOTAKK1NpbmQJOgkxCToJMzA0Mzk4OTMKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL1BBTkFNQV9BUkVBLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL1BBTkFNQV9BUkVBLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYzdlYmU4Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvUEFOQU1BX0FSRUEudHh0CkBAIC0wLDAgKzEgQEAKK1BBTkFNQSA6IDAgOiA3NTAwMQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvUEFOQU1BX1BPUFVMQVRJT04udHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvUEFOQU1BX1BPUFVMQVRJT04udHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIzYzg2ZDcKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9QQU5BTUFfUE9QVUxBVElPTi50eHQKQEAgLTAsMCArMSBAQAorUEFOQU1BIDogMCA6IDMyODM5NTkKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9QQVBVQSBORVcgR1VJTkVBX0FSRUEudHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvUEFQVUEgTkVXIEdVSU5FQV9BUkVBLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZGM4MWFhCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvUEFQVUEgTkVXIEdVSU5FQV9BUkVBLnR4dApAQCAtMCwwICsxLDEwMTMgQEAKK1BhcHVhIE5ldyBHdWluZWEJOgkwCToJNDYyODQwCitQRy1VTkstMQk6CTEJOgk5MzMKK1BHLVVOSy0yCToJMQk6CTkzMworUEctVU5LLTMJOgkxCToJOTMzCitQRy1VTkstNAk6CTEJOgk5MzMKK1BHLVVOSy01CToJMQk6CTkzMworUEctVU5LLTYJOgkxCToJOTMzCitQRy1VTkstNwk6CTEJOgk5MzMKK1BHLVVOSy04CToJMQk6CTkzMworUEctVU5LLTkJOgkxCToJOTMzCitQRy1VTkstMTAJOgkxCToJOTMzCitQRy1VTkstMTEJOgkxCToJOTMzCitQRy1VTkstMTIJOgkxCToJOTMzCitQRy1VTkstMTMJOgkxCToJOTMzCitQRy1VTkstMTQJOgkxCToJOTMzCitQRy1VTkstMTUJOgkxCToJOTMzCitQRy1VTkstMTYJOgkxCToJOTMzCitQRy1VTkstMTcJOgkxCToJOTMzCitQRy1VTkstMTgJOgkxCToJOTMzCitQRy1VTkstMTkJOgkxCToJOTMzCitQRy1VTkstMjAJOgkxCToJOTMzCitQRy1VTkstMjEJOgkxCToJOTMzCitQRy1VTkstMjIJOgkxCToJOTMzCitQRy1VTkstMjMJOgkxCToJOTMzCitQRy1VTkstMjQJOgkxCToJOTMzCitQRy1VTkstMjUJOgkxCToJOTMzCitQRy1VTkstMjYJOgkxCToJOTMzCitQRy1VTkstMjcJOgkxCToJOTMzCitQRy1VTkstMjgJOgkxCToJOTMzCitQRy1VTkstMjkJOgkxCToJOTMzCitQRy1VTkstMzAJOgkxCToJOTMzCitQRy1VTkstMzEJOgkxCToJOTMzCitQRy1VTkstMzIJOgkxCToJOTMzCitQRy1VTkstMzMJOgkxCToJOTMzCitQRy1VTkstMzQJOgkxCToJOTMzCitQRy1VTkstMzUJOgkxCToJOTMzCitQRy1VTkstMzYJOgkxCToJOTMzCitQRy1VTkstMzcJOgkxCToJOTMzCitQRy1VTkstMzgJOgkxCToJOTMzCitQRy1VTkstMzkJOgkxCToJOTMzCitQRy1VTkstNDAJOgkxCToJOTMzCitQRy1VTkstNDEJOgkxCToJOTMzCitQRy1VTkstNDIJOgkxCToJOTMzCitQRy1VTkstNDMJOgkxCToJOTMzCitQRy1VTkstNDQJOgkxCToJOTMzCitQRy1VTkstNDUJOgkxCToJOTMzCitQRy1VTkstNDYJOgkxCToJOTMzCitQRy1VTkstNDcJOgkxCToJOTMzCitQRy1VTkstNDgJOgkxCToJOTMzCitQRy1VTkstNDkJOgkxCToJOTMzCitQRy1VTkstNTAJOgkxCToJOTMzCitQRy1VTkstNTEJOgkxCToJOTMzCitQRy1VTkstNTIJOgkxCToJOTMzCitQRy1VTkstNTMJOgkxCToJOTMzCitQRy1VTkstNTQJOgkxCToJOTMzCitQRy1VTkstNTUJOgkxCToJOTMzCitQRy1VTkstNTYJOgkxCToJOTMzCitQRy1VTkstNTcJOgkxCToJOTMzCitQRy1VTkstNTgJOgkxCToJOTMzCitQRy1VTkstNTkJOgkxCToJOTMzCitQRy1VTkstNjAJOgkxCToJOTMzCitQRy1VTkstNjEJOgkxCToJOTMzCitQRy1VTkstNjIJOgkxCToJOTMzCitQRy1VTkstNjMJOgkxCToJOTMzCitQRy1VTkstNjQJOgkxCToJOTMzCitQRy1VTkstNjUJOgkxCToJOTMzCitQRy1VTkstNjYJOgkxCToJOTMzCitQRy1VTkstNjcJOgkxCToJOTMzCitQRy1VTkstNjgJOgkxCToJOTMzCitQRy1VTkstNjkJOgkxCToJOTMzCitQRy1VTkstNzAJOgkxCToJOTMzCitQRy1VTkstNzEJOgkxCToJOTMzCitQRy1VTkstNzIJOgkxCToJOTMzCitQRy1VTkstNzMJOgkxCToJOTMzCitQRy1VTkstNzQJOgkxCToJOTMzCitQRy1VTkstNzUJOgkxCToJOTMzCitQRy1VTkstNzYJOgkxCToJOTMzCitQRy1VTkstNzcJOgkxCToJOTMzCitQRy1VTkstNzgJOgkxCToJOTMzCitQRy1VTkstNzkJOgkxCToJOTMzCitQRy1VTkstODAJOgkxCToJOTMzCitQRy1VTkstODEJOgkxCToJOTMzCitQRy1VTkstODIJOgkxCToJOTMzCitQRy1VTkstODMJOgkxCToJOTMzCitQRy1VTkstODQJOgkxCToJOTMzCitQRy1VTkstODUJOgkxCToJOTMzCitQRy1VTkstODYJOgkxCToJOTMzCitQRy1VTkstODcJOgkxCToJOTMzCitQRy1VTkstODgJOgkxCToJOTMzCitQRy1VTkstODkJOgkxCToJOTMzCitQRy1VTkstOTAJOgkxCToJOTMzCitQRy1VTkstOTEJOgkxCToJOTMzCitQRy1VTkstOTIJOgkxCToJOTMzCitQRy1VTkstOTMJOgkxCToJOTMzCitQRy1VTkstOTQJOgkxCToJOTMzCitQRy1VTkstOTUJOgkxCToJOTMzCitQRy1VTkstOTYJOgkxCToJOTMzCitQRy1VTkstOTcJOgkxCToJOTMzCitQRy1VTkstOTgJOgkxCToJOTMzCitQRy1VTkstOTkJOgkxCToJOTMzCitQRy1VTkstMTAwCToJMQk6CTkzMworUEctVU5LLTEwMQk6CTEJOgk5MzMKK1BHLVVOSy0xMDIJOgkxCToJOTMzCitQRy1VTkstMTAzCToJMQk6CTkzMworUEctVU5LLTEwNAk6CTEJOgk5MzMKK1BHLVVOSy0xMDUJOgkxCToJOTMzCitQRy1VTkstMTA2CToJMQk6CTkzMworUEctVU5LLTEwNwk6CTEJOgk5MzMKK1BHLVVOSy0xMDgJOgkxCToJOTMzCitQRy1VTkstMTA5CToJMQk6CTkzMworUEctVU5LLTExMAk6CTEJOgk5MzMKK1BHLVVOSy0xMTEJOgkxCToJOTMzCitQRy1VTkstMTEyCToJMQk6CTkzMworUEctVU5LLTExMwk6CTEJOgk5MzMKK1BHLVVOSy0xMTQJOgkxCToJOTMzCitQRy1VTkstMTE1CToJMQk6CTkzMworUEctVU5LLTExNgk6CTEJOgk5MzMKK1BHLVVOSy0xMTcJOgkxCToJOTMzCitQRy1VTkstMTE4CToJMQk6CTkzMworUEctVU5LLTExOQk6CTEJOgk5MzMKK1BHLVVOSy0xMjAJOgkxCToJOTMzCitQRy1VTkstMTIxCToJMQk6CTkzMworUEctVU5LLTEyMgk6CTEJOgk5MzMKK1BHLVVOSy0xMjMJOgkxCToJOTMzCitQRy1VTkstMTI0CToJMQk6CTkzMworUEctVU5LLTEyNQk6CTEJOgk5MzMKK1BHLVVOSy0xMjYJOgkxCToJOTMzCitQRy1VTkstMTI3CToJMQk6CTkzMworUEctVU5LLTEyOAk6CTEJOgk5MzMKK1BHLVVOSy0xMjkJOgkxCToJOTMzCitQRy1VTkstMTMwCToJMQk6CTkzMworUEctVU5LLTEzMQk6CTEJOgk5MzMKK1BHLVVOSy0xMzIJOgkxCToJOTMzCitQRy1VTkstMTMzCToJMQk6CTkzMworUEctVU5LLTEzNAk6CTEJOgk5MzMKK1BHLVVOSy0xMzUJOgkxCToJOTMzCitQRy1VTkstMTM2CToJMQk6CTkzMworUEctVU5LLTEzNwk6CTEJOgk5MzMKK1BHLVVOSy0xMzgJOgkxCToJOTMzCitQRy1VTkstMTM5CToJMQk6CTkzMworUEctVU5LLTE0MAk6CTEJOgk5MzMKK1BHLVVOSy0xNDEJOgkxCToJOTMzCitQRy1VTkstMTQyCToJMQk6CTkzMworUEctVU5LLTE0Mwk6CTEJOgk5MzMKK1BHLVVOSy0xNDQJOgkxCToJOTMzCitQRy1VTkstMTQ1CToJMQk6CTkzMworUEctVU5LLTE0Ngk6CTEJOgk5MzMKK1BHLVVOSy0xNDcJOgkxCToJOTMzCitQRy1VTkstMTQ4CToJMQk6CTkzMworUEctVU5LLTE0OQk6CTEJOgk5MzMKK1BHLVVOSy0xNTAJOgkxCToJOTMzCitQRy1VTkstMTUxCToJMQk6CTkzMworUEctVU5LLTE1Mgk6CTEJOgk5MzMKK1BHLVVOSy0xNTMJOgkxCToJOTMzCitQRy1VTkstMTU0CToJMQk6CTkzMworUEctVU5LLTE1NQk6CTEJOgk5MzMKK1BHLVVOSy0xNTYJOgkxCToJOTMzCitQRy1VTkstMTU3CToJMQk6CTkzMworUEctVU5LLTE1OAk6CTEJOgk5MzMKK1BHLVVOSy0xNTkJOgkxCToJOTMzCitQRy1VTkstMTYwCToJMQk6CTkzMworUEctVU5LLTE2MQk6CTEJOgk5MzMKK1BHLVVOSy0xNjIJOgkxCToJOTMzCitQRy1VTkstMTYzCToJMQk6CTkzMworUEctVU5LLTE2NAk6CTEJOgk5MzMKK1BHLVVOSy0xNjUJOgkxCToJOTMzCitQRy1VTkstMTY2CToJMQk6CTkzMworUEctVU5LLTE2Nwk6CTEJOgk5MzMKK1BHLVVOSy0xNjgJOgkxCToJOTMzCitQRy1VTkstMTY5CToJMQk6CTkzMworUEctVU5LLTE3MAk6CTEJOgk5MzMKK1BHLVVOSy0xNzEJOgkxCToJOTMzCitQRy1VTkstMTcyCToJMQk6CTkzMworUEctVU5LLTE3Mwk6CTEJOgk5MzMKK1BHLVVOSy0xNzQJOgkxCToJOTMzCitQRy1VTkstMTc1CToJMQk6CTkzMworUEctVU5LLTE3Ngk6CTEJOgk5MzMKK1BHLVVOSy0xNzcJOgkxCToJOTMzCitQRy1VTkstMTc4CToJMQk6CTkzMworUEctVU5LLTE3OQk6CTEJOgk5MzMKK1BHLVVOSy0xODAJOgkxCToJOTMzCitQRy1VTkstMTgxCToJMQk6CTkzMworUEctVU5LLTE4Mgk6CTEJOgk5MzMKK1BHLVVOSy0xODMJOgkxCToJOTMzCitQRy1VTkstMTg0CToJMQk6CTkzMworUEctVU5LLTE4NQk6CTEJOgk5MzMKK1BHLVVOSy0xODYJOgkxCToJOTMzCitQRy1VTkstMTg3CToJMQk6CTkzMworUEctVU5LLTE4OAk6CTEJOgk5MzMKK1BHLVVOSy0xODkJOgkxCToJOTMzCitQRy1VTkstMTkwCToJMQk6CTkzMworUEctVU5LLTE5MQk6CTEJOgk5MzMKK1BHLVVOSy0xOTIJOgkxCToJOTMzCitQRy1VTkstMTkzCToJMQk6CTkzMworUEctVU5LLTE5NAk6CTEJOgk5MzMKK1BHLVVOSy0xOTUJOgkxCToJOTMzCitQRy1VTkstMTk2CToJMQk6CTkzMworUEctVU5LLTE5Nwk6CTEJOgk5MzMKK1BHLVVOSy0xOTgJOgkxCToJOTMzCitQRy1VTkstMTk5CToJMQk6CTkzMworUEctVU5LLTIwMAk6CTEJOgk5MzMKK1BHLVVOSy0yMDEJOgkxCToJOTMzCitQRy1VTkstMjAyCToJMQk6CTkzMworUEctVU5LLTIwMwk6CTEJOgk5MzMKK1BHLVVOSy0yMDQJOgkxCToJOTMzCitQRy1VTkstMjA1CToJMQk6CTkzMworUEctVU5LLTIwNgk6CTEJOgk5MzMKK1BHLVVOSy0yMDcJOgkxCToJOTMzCitQRy1VTkstMjA4CToJMQk6CTkzMworUEctVU5LLTIwOQk6CTEJOgk5MzMKK1BHLVVOSy0yMTAJOgkxCToJOTMzCitQRy1VTkstMjExCToJMQk6CTkzMworUEctVU5LLTIxMgk6CTEJOgk5MzMKK1BHLVVOSy0yMTMJOgkxCToJOTMzCitQRy1VTkstMjE0CToJMQk6CTkzMworUEctVU5LLTIxNQk6CTEJOgk5MzMKK1BHLVVOSy0yMTYJOgkxCToJOTMzCitQRy1VTkstMjE3CToJMQk6CTkzMworUEctVU5LLTIxOAk6CTEJOgk5MzMKK1BHLVVOSy0yMTkJOgkxCToJOTMzCitQRy1VTkstMjIwCToJMQk6CTkzMworUEctVU5LLTIyMQk6CTEJOgk5MzMKK1BHLVVOSy0yMjIJOgkxCToJOTMzCitQRy1VTkstMjIzCToJMQk6CTkzMworUEctVU5LLTIyNAk6CTEJOgk5MzMKK1BHLVVOSy0yMjUJOgkxCToJOTMzCitQRy1VTkstMjI2CToJMQk6CTkzMworUEctVU5LLTIyNwk6CTEJOgk5MzMKK1BHLVVOSy0yMjgJOgkxCToJOTMzCitQRy1VTkstMjI5CToJMQk6CTkzMworUEctVU5LLTIzMAk6CTEJOgk5MzMKK1BHLVVOSy0yMzEJOgkxCToJOTMzCitQRy1VTkstMjMyCToJMQk6CTkzMworUEctVU5LLTIzMwk6CTEJOgk5MzMKK1BHLVVOSy0yMzQJOgkxCToJOTMzCitQRy1VTkstMjM1CToJMQk6CTkzMworUEctVU5LLTIzNgk6CTEJOgk5MzMKK1BHLVVOSy0yMzcJOgkxCToJOTMzCitQRy1VTkstMjM4CToJMQk6CTkzMworUEctVU5LLTIzOQk6CTEJOgk5MzMKK1BHLVVOSy0yNDAJOgkxCToJOTMzCitQRy1VTkstMjQxCToJMQk6CTkzMworUEctVU5LLTI0Mgk6CTEJOgk5MzMKK1BHLVVOSy0yNDMJOgkxCToJOTMzCitQRy1VTkstMjQ0CToJMQk6CTkzMworUEctVU5LLTI0NQk6CTEJOgk5MzMKK1BHLVVOSy0yNDYJOgkxCToJOTMzCitQRy1VTkstMjQ3CToJMQk6CTkzMworUEctVU5LLTI0OAk6CTEJOgk5MzMKK1BHLVVOSy0yNDkJOgkxCToJOTMzCitQRy1VTkstMjUwCToJMQk6CTkzMworUEctVU5LLTI1MQk6CTEJOgk5MzMKK1BHLVVOSy0yNTIJOgkxCToJOTMzCitQRy1VTkstMjUzCToJMQk6CTkzMworUEctVU5LLTI1NAk6CTEJOgk5MzMKK1BHLVVOSy0yNTUJOgkxCToJOTMzCitQRy1VTkstMjU2CToJMQk6CTkzMworUEctVU5LLTI1Nwk6CTEJOgk5MzMKK1BHLVVOSy0yNTgJOgkxCToJOTMzCitQRy1VTkstMjU5CToJMQk6CTkzMworUEctVU5LLTI2MAk6CTEJOgk5MzMKK1BHLVVOSy0yNjEJOgkxCToJOTMzCitQRy1VTkstMjYyCToJMQk6CTkzMworUEctVU5LLTI2Mwk6CTEJOgk5MzMKK1BHLVVOSy0yNjQJOgkxCToJOTMzCitQRy1VTkstMjY1CToJMQk6CTkzMworUEctVU5LLTI2Ngk6CTEJOgk5MzMKK1BHLVVOSy0yNjcJOgkxCToJOTMzCitQRy1VTkstMjY4CToJMQk6CTkzMworUEctVU5LLTI2OQk6CTEJOgk5MzMKK1BHLVVOSy0yNzAJOgkxCToJOTMzCitQRy1VTkstMjcxCToJMQk6CTkzMworUEctVU5LLTI3Mgk6CTEJOgk5MzMKK1BHLVVOSy0yNzMJOgkxCToJOTMzCitQRy1VTkstMjc0CToJMQk6CTkzMworUEctVU5LLTI3NQk6CTEJOgk5MzMKK1BHLVVOSy0yNzYJOgkxCToJOTMzCitQRy1VTkstMjc3CToJMQk6CTkzMworUEctVU5LLTI3OAk6CTEJOgk5MzMKK1BHLVVOSy0yNzkJOgkxCToJOTMzCitQRy1VTkstMjgwCToJMQk6CTkzMworUEctVU5LLTI4MQk6CTEJOgk5MzMKK1BHLVVOSy0yODIJOgkxCToJOTMzCitQRy1VTkstMjgzCToJMQk6CTkzMworUEctVU5LLTI4NAk6CTEJOgk5MzMKK1BHLVVOSy0yODUJOgkxCToJOTMzCitQRy1VTkstMjg2CToJMQk6CTkzMworUEctVU5LLTI4Nwk6CTEJOgk5MzMKK1BHLVVOSy0yODgJOgkxCToJOTMzCitQRy1VTkstMjg5CToJMQk6CTkzMworUEctVU5LLTI5MAk6CTEJOgk5MzMKK1BHLVVOSy0yOTEJOgkxCToJOTMzCitQRy1VTkstMjkyCToJMQk6CTkzMworUEctVU5LLTI5Mwk6CTEJOgk5MzMKK1BHLVVOSy0yOTQJOgkxCToJOTMzCitQRy1VTkstMjk1CToJMQk6CTkzMworUEctVU5LLTI5Ngk6CTEJOgk5MzMKK1BHLVVOSy0yOTcJOgkxCToJOTMzCitQRy1VTkstMjk4CToJMQk6CTkzMworUEctVU5LLTI5OQk6CTEJOgk5MzMKK1BHLVVOSy0zMDAJOgkxCToJOTMzCitQRy1VTkstMzAxCToJMQk6CTkzMworUEctVU5LLTMwMgk6CTEJOgk5MzMKK1BHLVVOSy0zMDMJOgkxCToJOTMzCitQRy1VTkstMzA0CToJMQk6CTkzMworUEctVU5LLTMwNQk6CTEJOgk5MzMKK1BHLVVOSy0zMDYJOgkxCToJOTMzCitQRy1VTkstMzA3CToJMQk6CTkzMworUEctVU5LLTMwOAk6CTEJOgk5MzMKK1BHLVVOSy0zMDkJOgkxCToJOTMzCitQRy1VTkstMzEwCToJMQk6CTkzMworUEctVU5LLTMxMQk6CTEJOgk5MzMKK1BHLVVOSy0zMTIJOgkxCToJOTMzCitQRy1VTkstMzEzCToJMQk6CTkzMworUEctVU5LLTMxNAk6CTEJOgk5MzMKK1BHLVVOSy0zMTUJOgkxCToJOTMzCitQRy1VTkstMzE2CToJMQk6CTkzMworUEctVU5LLTMxNwk6CTEJOgk5MzMKK1BHLVVOSy0zMTgJOgkxCToJOTMzCitQRy1VTkstMzE5CToJMQk6CTkzMworUEctVU5LLTMyMAk6CTEJOgk5MzMKK1BHLVVOSy0zMjEJOgkxCToJOTMzCitQRy1VTkstMzIyCToJMQk6CTkzMworUEctVU5LLTMyMwk6CTEJOgk5MzMKK1BHLVVOSy0zMjQJOgkxCToJOTMzCitQRy1VTkstMzI1CToJMQk6CTkzMworUEctVU5LLTMyNgk6CTEJOgk5MzMKK1BHLVVOSy0zMjcJOgkxCToJOTMzCitQRy1VTkstMzI4CToJMQk6CTkzMworUEctVU5LLTMyOQk6CTEJOgk5MzMKK1BHLVVOSy0zMzAJOgkxCToJOTMzCitQRy1VTkstMzMxCToJMQk6CTkzMworUEctVU5LLTMzMgk6CTEJOgk5MzMKK1BHLVVOSy0zMzMJOgkxCToJOTMzCitQRy1VTkstMzM0CToJMQk6CTkzMworUEctVU5LLTMzNQk6CTEJOgk5MzMKK1BHLVVOSy0zMzYJOgkxCToJOTMzCitQRy1VTkstMzM3CToJMQk6CTkzMworUEctVU5LLTMzOAk6CTEJOgk5MzMKK1BHLVVOSy0zMzkJOgkxCToJOTMzCitQRy1VTkstMzQwCToJMQk6CTkzMworUEctVU5LLTM0MQk6CTEJOgk5MzMKK1BHLVVOSy0zNDIJOgkxCToJOTMzCitQRy1VTkstMzQzCToJMQk6CTkzMworUEctVU5LLTM0NAk6CTEJOgk5MzMKK1BHLVVOSy0zNDUJOgkxCToJOTMzCitQRy1VTkstMzQ2CToJMQk6CTkzMworUEctVU5LLTM0Nwk6CTEJOgk5MzMKK1BHLVVOSy0zNDgJOgkxCToJOTMzCitQRy1VTkstMzQ5CToJMQk6CTkzMworUEctVU5LLTM1MAk6CTEJOgk5MzMKK1BHLVVOSy0zNTEJOgkxCToJOTMzCitQRy1VTkstMzUyCToJMQk6CTkzMworUEctVU5LLTM1Mwk6CTEJOgk5MzMKK1BHLVVOSy0zNTQJOgkxCToJOTMzCitQRy1VTkstMzU1CToJMQk6CTkzMworUEctVU5LLTM1Ngk6CTEJOgk5MzMKK1BHLVVOSy0zNTcJOgkxCToJOTMzCitQRy1VTkstMzU4CToJMQk6CTkzMworUEctVU5LLTM1OQk6CTEJOgk5MzMKK1BHLVVOSy0zNjAJOgkxCToJOTMzCitQRy1VTkstMzYxCToJMQk6CTkzMworUEctVU5LLTM2Mgk6CTEJOgk5MzMKK1BHLVVOSy0zNjMJOgkxCToJOTMzCitQRy1VTkstMzY0CToJMQk6CTkzMworUEctVU5LLTM2NQk6CTEJOgk5MzMKK1BHLVVOSy0zNjYJOgkxCToJOTMzCitQRy1VTkstMzY3CToJMQk6CTkzMworUEctVU5LLTM2OAk6CTEJOgk5MzMKK1BHLVVOSy0zNjkJOgkxCToJOTMzCitQRy1VTkstMzcwCToJMQk6CTkzMworUEctVU5LLTM3MQk6CTEJOgk5MzMKK1BHLVVOSy0zNzIJOgkxCToJOTMzCitQRy1VTkstMzczCToJMQk6CTkzMworUEctVU5LLTM3NAk6CTEJOgk5MzMKK1BHLVVOSy0zNzUJOgkxCToJOTMzCitQRy1VTkstMzc2CToJMQk6CTkzMworUEctVU5LLTM3Nwk6CTEJOgk5MzMKK1BHLVVOSy0zNzgJOgkxCToJOTMzCitQRy1VTkstMzc5CToJMQk6CTkzMworUEctVU5LLTM4MAk6CTEJOgk5MzMKK1BHLVVOSy0zODEJOgkxCToJOTMzCitQRy1VTkstMzgyCToJMQk6CTkzMworUEctVU5LLTM4Mwk6CTEJOgk5MzMKK1BHLVVOSy0zODQJOgkxCToJOTMzCitQRy1VTkstMzg1CToJMQk6CTkzMworUEctVU5LLTM4Ngk6CTEJOgk5MzMKK1BHLVVOSy0zODcJOgkxCToJOTMzCitQRy1VTkstMzg4CToJMQk6CTkzMworUEctVU5LLTM4OQk6CTEJOgk5MzMKK1BHLVVOSy0zOTAJOgkxCToJOTMzCitQRy1VTkstMzkxCToJMQk6CTkzMworUEctVU5LLTM5Mgk6CTEJOgk5MzMKK1BHLVVOSy0zOTMJOgkxCToJOTMzCitQRy1VTkstMzk0CToJMQk6CTkzMworUEctVU5LLTM5NQk6CTEJOgk5MzMKK1BHLVVOSy0zOTYJOgkxCToJOTMzCitQRy1VTkstMzk3CToJMQk6CTkzMworUEctVU5LLTM5OAk6CTEJOgk5MzMKK1BHLVVOSy0zOTkJOgkxCToJOTMzCitQRy1VTkstNDAwCToJMQk6CTkzMworUEctVU5LLTQwMQk6CTEJOgk5MzMKK1BHLVVOSy00MDIJOgkxCToJOTMzCitQRy1VTkstNDAzCToJMQk6CTkzMworUEctVU5LLTQwNAk6CTEJOgk5MzMKK1BHLVVOSy00MDUJOgkxCToJOTMzCitQRy1VTkstNDA2CToJMQk6CTkzMworUEctVU5LLTQwNwk6CTEJOgk5MzMKK1BHLVVOSy00MDgJOgkxCToJOTMzCitQRy1VTkstNDA5CToJMQk6CTkzMworUEctVU5LLTQxMAk6CTEJOgk5MzMKK1BHLVVOSy00MTEJOgkxCToJOTMzCitQRy1VTkstNDEyCToJMQk6CTkzMworUEctVU5LLTQxMwk6CTEJOgk5MzMKK1BHLVVOSy00MTQJOgkxCToJOTMzCitQRy1VTkstNDE1CToJMQk6CTkzMworUEctVU5LLTQxNgk6CTEJOgk5MzMKK1BHLVVOSy00MTcJOgkxCToJOTMzCitQRy1VTkstNDE4CToJMQk6CTkzMworUEctVU5LLTQxOQk6CTEJOgk5MzMKK1BHLVVOSy00MjAJOgkxCToJOTMzCitQRy1VTkstNDIxCToJMQk6CTkzMworUEctVU5LLTQyMgk6CTEJOgk5MzMKK1BHLVVOSy00MjMJOgkxCToJOTMzCitQRy1VTkstNDI0CToJMQk6CTkzMworUEctVU5LLTQyNQk6CTEJOgk5MzMKK1BHLVVOSy00MjYJOgkxCToJOTMzCitQRy1VTkstNDI3CToJMQk6CTkzMworUEctVU5LLTQyOAk6CTEJOgk5MzMKK1BHLVVOSy00MjkJOgkxCToJOTMzCitQRy1VTkstNDMwCToJMQk6CTkzMworUEctVU5LLTQzMQk6CTEJOgk5MzMKK1BHLVVOSy00MzIJOgkxCToJOTMzCitQRy1VTkstNDMzCToJMQk6CTkzMworUEctVU5LLTQzNAk6CTEJOgk5MzMKK1BHLVVOSy00MzUJOgkxCToJOTMzCitQRy1VTkstNDM2CToJMQk6CTkzMworUEctVU5LLTQzNwk6CTEJOgk5MzMKK1BHLVVOSy00MzgJOgkxCToJOTMzCitQRy1VTkstNDM5CToJMQk6CTkzMworUEctVU5LLTQ0MAk6CTEJOgk5MzMKK1BHLVVOSy00NDEJOgkxCToJOTMzCitQRy1VTkstNDQyCToJMQk6CTkzMworUEctVU5LLTQ0Mwk6CTEJOgk5MzMKK1BHLVVOSy00NDQJOgkxCToJOTMzCitQRy1VTkstNDQ1CToJMQk6CTkzMworUEctVU5LLTQ0Ngk6CTEJOgk5MzMKK1BHLVVOSy00NDcJOgkxCToJOTMzCitQRy1VTkstNDQ4CToJMQk6CTkzMworUEctVU5LLTQ0OQk6CTEJOgk5MzMKK1BHLVVOSy00NTAJOgkxCToJOTMzCitQRy1VTkstNDUxCToJMQk6CTkzMworUEctVU5LLTQ1Mgk6CTEJOgk5MzMKK1BHLVVOSy00NTMJOgkxCToJOTMzCitQRy1VTkstNDU0CToJMQk6CTkzMworUEctVU5LLTQ1NQk6CTEJOgk5MzMKK1BHLVVOSy00NTYJOgkxCToJOTMzCitQRy1VTkstNDU3CToJMQk6CTkzMworUEctVU5LLTQ1OAk6CTEJOgk5MzMKK1BHLVVOSy00NTkJOgkxCToJOTMzCitQRy1VTkstNDYwCToJMQk6CTkzMworUEctVU5LLTQ2MQk6CTEJOgk5MzMKK1BHLVVOSy00NjIJOgkxCToJOTMzCitQRy1VTkstNDYzCToJMQk6CTkzMworUEctVU5LLTQ2NAk6CTEJOgk5MzMKK1BHLVVOSy00NjUJOgkxCToJOTMzCitQRy1VTkstNDY2CToJMQk6CTkzMworUEctVU5LLTQ2Nwk6CTEJOgk5MzMKK1BHLVVOSy00NjgJOgkxCToJOTMzCitQRy1VTkstNDY5CToJMQk6CTkzMworUEctVU5LLTQ3MAk6CTEJOgk5MzMKK1BHLVVOSy00NzEJOgkxCToJOTMzCitQRy1VTkstNDcyCToJMQk6CTkzMworUEctVU5LLTQ3Mwk6CTEJOgk5MzMKK1BHLVVOSy00NzQJOgkxCToJOTMzCitQRy1VTkstNDc1CToJMQk6CTkzMworUEctVU5LLTQ3Ngk6CTEJOgk5MzMKK1BHLVVOSy00NzcJOgkxCToJOTMzCitQRy1VTkstNDc4CToJMQk6CTkzMworUEctVU5LLTQ3OQk6CTEJOgk5MzMKK1BHLVVOSy00ODAJOgkxCToJOTMzCitQRy1VTkstNDgxCToJMQk6CTkzMworUEctVU5LLTQ4Mgk6CTEJOgk5MzMKK1BHLVVOSy00ODMJOgkxCToJOTMzCitQRy1VTkstNDg0CToJMQk6CTkzMworUEctVU5LLTQ4NQk6CTEJOgk5MzMKK1BHLVVOSy00ODYJOgkxCToJOTMzCitQRy1VTkstNDg3CToJMQk6CTkzMworUEctVU5LLTQ4OAk6CTEJOgk5MzMKK1BHLVVOSy00ODkJOgkxCToJOTMzCitQRy1VTkstNDkwCToJMQk6CTkzMworUEctVU5LLTQ5MQk6CTEJOgk5MzMKK1BHLVVOSy00OTIJOgkxCToJOTMzCitQRy1VTkstNDkzCToJMQk6CTkzMworUEctVU5LLTQ5NAk6CTEJOgk5MzMKK1BHLVVOSy00OTUJOgkxCToJOTMzCitQRy1VTkstNDk2CToJMQk6CTkzMworUE5HLkwyLjEJCToJCTIJCToJCTkzMworUE5HLkwyLjIJCToJCTIJCToJCTkzMworUE5HLkwyLjMJCToJCTIJCToJCTkzMworUE5HLkwyLjQJCToJCTIJCToJCTkzMworUE5HLkwyLjUJCToJCTIJCToJCTkzMworUE5HLkwyLjYJCToJCTIJCToJCTkzMworUE5HLkwyLjcJCToJCTIJCToJCTkzMworUE5HLkwyLjgJCToJCTIJCToJCTkzMworUE5HLkwyLjkJCToJCTIJCToJCTkzMworUE5HLkwyLjEwCQk6CQkyCQk6CQk5MzMKK1BORy5MMi4xMQkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMTIJCToJCTIJCToJCTkzMworUE5HLkwyLjEzCQk6CQkyCQk6CQk5MzMKK1BORy5MMi4xNAkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMTUJCToJCTIJCToJCTkzMworUE5HLkwyLjE2CQk6CQkyCQk6CQk5MzMKK1BORy5MMi4xNwkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMTgJCToJCTIJCToJCTkzMworUE5HLkwyLjE5CQk6CQkyCQk6CQk5MzMKK1BORy5MMi4yMAkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMjEJCToJCTIJCToJCTkzMworUE5HLkwyLjIyCQk6CQkyCQk6CQk5MzMKK1BORy5MMi4yMwkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMjQJCToJCTIJCToJCTkzMworUE5HLkwyLjI1CQk6CQkyCQk6CQk5MzMKK1BORy5MMi4yNgkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMjcJCToJCTIJCToJCTkzMworUE5HLkwyLjI4CQk6CQkyCQk6CQk5MzMKK1BORy5MMi4yOQkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMzAJCToJCTIJCToJCTkzMworUE5HLkwyLjMxCQk6CQkyCQk6CQk5MzMKK1BORy5MMi4zMgkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMzMJCToJCTIJCToJCTkzMworUE5HLkwyLjM0CQk6CQkyCQk6CQk5MzMKK1BORy5MMi4zNQkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMzYJCToJCTIJCToJCTkzMworUE5HLkwyLjM3CQk6CQkyCQk6CQk5MzMKK1BORy5MMi4zOAkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMzkJCToJCTIJCToJCTkzMworUE5HLkwyLjQwCQk6CQkyCQk6CQk5MzMKK1BORy5MMi40MQkJOgkJMgkJOgkJOTMzCitQTkcuTDIuNDIJCToJCTIJCToJCTkzMworUE5HLkwyLjQzCQk6CQkyCQk6CQk5MzMKK1BORy5MMi40NAkJOgkJMgkJOgkJOTMzCitQTkcuTDIuNDUJCToJCTIJCToJCTkzMworUE5HLkwyLjQ2CQk6CQkyCQk6CQk5MzMKK1BORy5MMi40NwkJOgkJMgkJOgkJOTMzCitQTkcuTDIuNDgJCToJCTIJCToJCTkzMworUE5HLkwyLjQ5CQk6CQkyCQk6CQk5MzMKK1BORy5MMi41MAkJOgkJMgkJOgkJOTMzCitQTkcuTDIuNTEJCToJCTIJCToJCTkzMworUE5HLkwyLjUyCQk6CQkyCQk6CQk5MzMKK1BORy5MMi41MwkJOgkJMgkJOgkJOTMzCitQTkcuTDIuNTQJCToJCTIJCToJCTkzMworUE5HLkwyLjU1CQk6CQkyCQk6CQk5MzMKK1BORy5MMi41NgkJOgkJMgkJOgkJOTMzCitQTkcuTDIuNTcJCToJCTIJCToJCTkzMworUE5HLkwyLjU4CQk6CQkyCQk6CQk5MzMKK1BORy5MMi41OQkJOgkJMgkJOgkJOTMzCitQTkcuTDIuNjAJCToJCTIJCToJCTkzMworUE5HLkwyLjYxCQk6CQkyCQk6CQk5MzMKK1BORy5MMi42MgkJOgkJMgkJOgkJOTMzCitQTkcuTDIuNjMJCToJCTIJCToJCTkzMworUE5HLkwyLjY0CQk6CQkyCQk6CQk5MzMKK1BORy5MMi42NQkJOgkJMgkJOgkJOTMzCitQTkcuTDIuNjYJCToJCTIJCToJCTkzMworUE5HLkwyLjY3CQk6CQkyCQk6CQk5MzMKK1BORy5MMi42OAkJOgkJMgkJOgkJOTMzCitQTkcuTDIuNjkJCToJCTIJCToJCTkzMworUE5HLkwyLjcwCQk6CQkyCQk6CQk5MzMKK1BORy5MMi43MQkJOgkJMgkJOgkJOTMzCitQTkcuTDIuNzIJCToJCTIJCToJCTkzMworUE5HLkwyLjczCQk6CQkyCQk6CQk5MzMKK1BORy5MMi43NAkJOgkJMgkJOgkJOTMzCitQTkcuTDIuNzUJCToJCTIJCToJCTkzMworUE5HLkwyLjc2CQk6CQkyCQk6CQk5MzMKK1BORy5MMi43NwkJOgkJMgkJOgkJOTMzCitQTkcuTDIuNzgJCToJCTIJCToJCTkzMworUE5HLkwyLjc5CQk6CQkyCQk6CQk5MzMKK1BORy5MMi44MAkJOgkJMgkJOgkJOTMzCitQTkcuTDIuODEJCToJCTIJCToJCTkzMworUE5HLkwyLjgyCQk6CQkyCQk6CQk5MzMKK1BORy5MMi44MwkJOgkJMgkJOgkJOTMzCitQTkcuTDIuODQJCToJCTIJCToJCTkzMworUE5HLkwyLjg1CQk6CQkyCQk6CQk5MzMKK1BORy5MMi44NgkJOgkJMgkJOgkJOTMzCitQTkcuTDIuODcJCToJCTIJCToJCTkzMworUE5HLkwyLjg4CQk6CQkyCQk6CQk5MzMKK1BORy5MMi44OQkJOgkJMgkJOgkJOTMzCitQTkcuTDIuOTAJCToJCTIJCToJCTkzMworUE5HLkwyLjkxCQk6CQkyCQk6CQk5MzMKK1BORy5MMi45MgkJOgkJMgkJOgkJOTMzCitQTkcuTDIuOTMJCToJCTIJCToJCTkzMworUE5HLkwyLjk0CQk6CQkyCQk6CQk5MzMKK1BORy5MMi45NQkJOgkJMgkJOgkJOTMzCitQTkcuTDIuOTYJCToJCTIJCToJCTkzMworUE5HLkwyLjk3CQk6CQkyCQk6CQk5MzMKK1BORy5MMi45OAkJOgkJMgkJOgkJOTMzCitQTkcuTDIuOTkJCToJCTIJCToJCTkzMworUE5HLkwyLjEwMAkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMTAxCQk6CQkyCQk6CQk5MzMKK1BORy5MMi4xMDIJCToJCTIJCToJCTkzMworUE5HLkwyLjEwMwkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMTA0CQk6CQkyCQk6CQk5MzMKK1BORy5MMi4xMDUJCToJCTIJCToJCTkzMworUE5HLkwyLjEwNgkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMTA3CQk6CQkyCQk6CQk5MzMKK1BORy5MMi4xMDgJCToJCTIJCToJCTkzMworUE5HLkwyLjEwOQkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMTEwCQk6CQkyCQk6CQk5MzMKK1BORy5MMi4xMTEJCToJCTIJCToJCTkzMworUE5HLkwyLjExMgkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMTEzCQk6CQkyCQk6CQk5MzMKK1BORy5MMi4xMTQJCToJCTIJCToJCTkzMworUE5HLkwyLjExNQkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMTE2CQk6CQkyCQk6CQk5MzMKK1BORy5MMi4xMTcJCToJCTIJCToJCTkzMworUE5HLkwyLjExOAkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMTE5CQk6CQkyCQk6CQk5MzMKK1BORy5MMi4xMjAJCToJCTIJCToJCTkzMworUE5HLkwyLjEyMQkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMTIyCQk6CQkyCQk6CQk5MzMKK1BORy5MMi4xMjMJCToJCTIJCToJCTkzMworUE5HLkwyLjEyNAkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMTI1CQk6CQkyCQk6CQk5MzMKK1BORy5MMi4xMjYJCToJCTIJCToJCTkzMworUE5HLkwyLjEyNwkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMTI4CQk6CQkyCQk6CQk5MzMKK1BORy5MMi4xMjkJCToJCTIJCToJCTkzMworUE5HLkwyLjEzMAkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMTMxCQk6CQkyCQk6CQk5MzMKK1BORy5MMi4xMzIJCToJCTIJCToJCTkzMworUE5HLkwyLjEzMwkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMTM0CQk6CQkyCQk6CQk5MzMKK1BORy5MMi4xMzUJCToJCTIJCToJCTkzMworUE5HLkwyLjEzNgkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMTM3CQk6CQkyCQk6CQk5MzMKK1BORy5MMi4xMzgJCToJCTIJCToJCTkzMworUE5HLkwyLjEzOQkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMTQwCQk6CQkyCQk6CQk5MzMKK1BORy5MMi4xNDEJCToJCTIJCToJCTkzMworUE5HLkwyLjE0MgkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMTQzCQk6CQkyCQk6CQk5MzMKK1BORy5MMi4xNDQJCToJCTIJCToJCTkzMworUE5HLkwyLjE0NQkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMTQ2CQk6CQkyCQk6CQk5MzMKK1BORy5MMi4xNDcJCToJCTIJCToJCTkzMworUE5HLkwyLjE0OAkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMTQ5CQk6CQkyCQk6CQk5MzMKK1BORy5MMi4xNTAJCToJCTIJCToJCTkzMworUE5HLkwyLjE1MQkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMTUyCQk6CQkyCQk6CQk5MzMKK1BORy5MMi4xNTMJCToJCTIJCToJCTkzMworUE5HLkwyLjE1NAkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMTU1CQk6CQkyCQk6CQk5MzMKK1BORy5MMi4xNTYJCToJCTIJCToJCTkzMworUE5HLkwyLjE1NwkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMTU4CQk6CQkyCQk6CQk5MzMKK1BORy5MMi4xNTkJCToJCTIJCToJCTkzMworUE5HLkwyLjE2MAkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMTYxCQk6CQkyCQk6CQk5MzMKK1BORy5MMi4xNjIJCToJCTIJCToJCTkzMworUE5HLkwyLjE2MwkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMTY0CQk6CQkyCQk6CQk5MzMKK1BORy5MMi4xNjUJCToJCTIJCToJCTkzMworUE5HLkwyLjE2NgkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMTY3CQk6CQkyCQk6CQk5MzMKK1BORy5MMi4xNjgJCToJCTIJCToJCTkzMworUE5HLkwyLjE2OQkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMTcwCQk6CQkyCQk6CQk5MzMKK1BORy5MMi4xNzEJCToJCTIJCToJCTkzMworUE5HLkwyLjE3MgkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMTczCQk6CQkyCQk6CQk5MzMKK1BORy5MMi4xNzQJCToJCTIJCToJCTkzMworUE5HLkwyLjE3NQkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMTc2CQk6CQkyCQk6CQk5MzMKK1BORy5MMi4xNzcJCToJCTIJCToJCTkzMworUE5HLkwyLjE3OAkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMTc5CQk6CQkyCQk6CQk5MzMKK1BORy5MMi4xODAJCToJCTIJCToJCTkzMworUE5HLkwyLjE4MQkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMTgyCQk6CQkyCQk6CQk5MzMKK1BORy5MMi4xODMJCToJCTIJCToJCTkzMworUE5HLkwyLjE4NAkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMTg1CQk6CQkyCQk6CQk5MzMKK1BORy5MMi4xODYJCToJCTIJCToJCTkzMworUE5HLkwyLjE4NwkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMTg4CQk6CQkyCQk6CQk5MzMKK1BORy5MMi4xODkJCToJCTIJCToJCTkzMworUE5HLkwyLjE5MAkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMTkxCQk6CQkyCQk6CQk5MzMKK1BORy5MMi4xOTIJCToJCTIJCToJCTkzMworUE5HLkwyLjE5MwkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMTk0CQk6CQkyCQk6CQk5MzMKK1BORy5MMi4xOTUJCToJCTIJCToJCTkzMworUE5HLkwyLjE5NgkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMTk3CQk6CQkyCQk6CQk5MzMKK1BORy5MMi4xOTgJCToJCTIJCToJCTkzMworUE5HLkwyLjE5OQkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMjAwCQk6CQkyCQk6CQk5MzMKK1BORy5MMi4yMDEJCToJCTIJCToJCTkzMworUE5HLkwyLjIwMgkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMjAzCQk6CQkyCQk6CQk5MzMKK1BORy5MMi4yMDQJCToJCTIJCToJCTkzMworUE5HLkwyLjIwNQkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMjA2CQk6CQkyCQk6CQk5MzMKK1BORy5MMi4yMDcJCToJCTIJCToJCTkzMworUE5HLkwyLjIwOAkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMjA5CQk6CQkyCQk6CQk5MzMKK1BORy5MMi4yMTAJCToJCTIJCToJCTkzMworUE5HLkwyLjIxMQkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMjEyCQk6CQkyCQk6CQk5MzMKK1BORy5MMi4yMTMJCToJCTIJCToJCTkzMworUE5HLkwyLjIxNAkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMjE1CQk6CQkyCQk6CQk5MzMKK1BORy5MMi4yMTYJCToJCTIJCToJCTkzMworUE5HLkwyLjIxNwkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMjE4CQk6CQkyCQk6CQk5MzMKK1BORy5MMi4yMTkJCToJCTIJCToJCTkzMworUE5HLkwyLjIyMAkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMjIxCQk6CQkyCQk6CQk5MzMKK1BORy5MMi4yMjIJCToJCTIJCToJCTkzMworUE5HLkwyLjIyMwkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMjI0CQk6CQkyCQk6CQk5MzMKK1BORy5MMi4yMjUJCToJCTIJCToJCTkzMworUE5HLkwyLjIyNgkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMjI3CQk6CQkyCQk6CQk5MzMKK1BORy5MMi4yMjgJCToJCTIJCToJCTkzMworUE5HLkwyLjIyOQkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMjMwCQk6CQkyCQk6CQk5MzMKK1BORy5MMi4yMzEJCToJCTIJCToJCTkzMworUE5HLkwyLjIzMgkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMjMzCQk6CQkyCQk6CQk5MzMKK1BORy5MMi4yMzQJCToJCTIJCToJCTkzMworUE5HLkwyLjIzNQkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMjM2CQk6CQkyCQk6CQk5MzMKK1BORy5MMi4yMzcJCToJCTIJCToJCTkzMworUE5HLkwyLjIzOAkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMjM5CQk6CQkyCQk6CQk5MzMKK1BORy5MMi4yNDAJCToJCTIJCToJCTkzMworUE5HLkwyLjI0MQkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMjQyCQk6CQkyCQk6CQk5MzMKK1BORy5MMi4yNDMJCToJCTIJCToJCTkzMworUE5HLkwyLjI0NAkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMjQ1CQk6CQkyCQk6CQk5MzMKK1BORy5MMi4yNDYJCToJCTIJCToJCTkzMworUE5HLkwyLjI0NwkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMjQ4CQk6CQkyCQk6CQk5MzMKK1BORy5MMi4yNDkJCToJCTIJCToJCTkzMworUE5HLkwyLjI1MAkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMjUxCQk6CQkyCQk6CQk5MzMKK1BORy5MMi4yNTIJCToJCTIJCToJCTkzMworUE5HLkwyLjI1MwkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMjU0CQk6CQkyCQk6CQk5MzMKK1BORy5MMi4yNTUJCToJCTIJCToJCTkzMworUE5HLkwyLjI1NgkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMjU3CQk6CQkyCQk6CQk5MzMKK1BORy5MMi4yNTgJCToJCTIJCToJCTkzMworUE5HLkwyLjI1OQkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMjYwCQk6CQkyCQk6CQk5MzMKK1BORy5MMi4yNjEJCToJCTIJCToJCTkzMworUE5HLkwyLjI2MgkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMjYzCQk6CQkyCQk6CQk5MzMKK1BORy5MMi4yNjQJCToJCTIJCToJCTkzMworUE5HLkwyLjI2NQkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMjY2CQk6CQkyCQk6CQk5MzMKK1BORy5MMi4yNjcJCToJCTIJCToJCTkzMworUE5HLkwyLjI2OAkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMjY5CQk6CQkyCQk6CQk5MzMKK1BORy5MMi4yNzAJCToJCTIJCToJCTkzMworUE5HLkwyLjI3MQkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMjcyCQk6CQkyCQk6CQk5MzMKK1BORy5MMi4yNzMJCToJCTIJCToJCTkzMworUE5HLkwyLjI3NAkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMjc1CQk6CQkyCQk6CQk5MzMKK1BORy5MMi4yNzYJCToJCTIJCToJCTkzMworUE5HLkwyLjI3NwkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMjc4CQk6CQkyCQk6CQk5MzMKK1BORy5MMi4yNzkJCToJCTIJCToJCTkzMworUE5HLkwyLjI4MAkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMjgxCQk6CQkyCQk6CQk5MzMKK1BORy5MMi4yODIJCToJCTIJCToJCTkzMworUE5HLkwyLjI4MwkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMjg0CQk6CQkyCQk6CQk5MzMKK1BORy5MMi4yODUJCToJCTIJCToJCTkzMworUE5HLkwyLjI4NgkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMjg3CQk6CQkyCQk6CQk5MzMKK1BORy5MMi4yODgJCToJCTIJCToJCTkzMworUE5HLkwyLjI4OQkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMjkwCQk6CQkyCQk6CQk5MzMKK1BORy5MMi4yOTEJCToJCTIJCToJCTkzMworUE5HLkwyLjI5MgkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMjkzCQk6CQkyCQk6CQk5MzMKK1BORy5MMi4yOTQJCToJCTIJCToJCTkzMworUE5HLkwyLjI5NQkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMjk2CQk6CQkyCQk6CQk5MzMKK1BORy5MMi4yOTcJCToJCTIJCToJCTkzMworUE5HLkwyLjI5OAkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMjk5CQk6CQkyCQk6CQk5MzMKK1BORy5MMi4zMDAJCToJCTIJCToJCTkzMworUE5HLkwyLjMwMQkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMzAyCQk6CQkyCQk6CQk5MzMKK1BORy5MMi4zMDMJCToJCTIJCToJCTkzMworUE5HLkwyLjMwNAkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMzA1CQk6CQkyCQk6CQk5MzMKK1BORy5MMi4zMDYJCToJCTIJCToJCTkzMworUE5HLkwyLjMwNwkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMzA4CQk6CQkyCQk6CQk5MzMKK1BORy5MMi4zMDkJCToJCTIJCToJCTkzMworUE5HLkwyLjMxMAkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMzExCQk6CQkyCQk6CQk5MzMKK1BORy5MMi4zMTIJCToJCTIJCToJCTkzMworUE5HLkwyLjMxMwkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMzE0CQk6CQkyCQk6CQk5MzMKK1BORy5MMi4zMTUJCToJCTIJCToJCTkzMworUE5HLkwyLjMxNgkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMzE3CQk6CQkyCQk6CQk5MzMKK1BORy5MMi4zMTgJCToJCTIJCToJCTkzMworUE5HLkwyLjMxOQkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMzIwCQk6CQkyCQk6CQk5MzMKK1BORy5MMi4zMjEJCToJCTIJCToJCTkzMworUE5HLkwyLjMyMgkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMzIzCQk6CQkyCQk6CQk5MzMKK1BORy5MMi4zMjQJCToJCTIJCToJCTkzMworUE5HLkwyLjMyNQkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMzI2CQk6CQkyCQk6CQk5MzMKK1BORy5MMi4zMjcJCToJCTIJCToJCTkzMworUE5HLkwyLjMyOAkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMzI5CQk6CQkyCQk6CQk5MzMKK1BORy5MMi4zMzAJCToJCTIJCToJCTkzMworUE5HLkwyLjMzMQkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMzMyCQk6CQkyCQk6CQk5MzMKK1BORy5MMi4zMzMJCToJCTIJCToJCTkzMworUE5HLkwyLjMzNAkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMzM1CQk6CQkyCQk6CQk5MzMKK1BORy5MMi4zMzYJCToJCTIJCToJCTkzMworUE5HLkwyLjMzNwkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMzM4CQk6CQkyCQk6CQk5MzMKK1BORy5MMi4zMzkJCToJCTIJCToJCTkzMworUE5HLkwyLjM0MAkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMzQxCQk6CQkyCQk6CQk5MzMKK1BORy5MMi4zNDIJCToJCTIJCToJCTkzMworUE5HLkwyLjM0MwkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMzQ0CQk6CQkyCQk6CQk5MzMKK1BORy5MMi4zNDUJCToJCTIJCToJCTkzMworUE5HLkwyLjM0NgkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMzQ3CQk6CQkyCQk6CQk5MzMKK1BORy5MMi4zNDgJCToJCTIJCToJCTkzMworUE5HLkwyLjM0OQkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMzUwCQk6CQkyCQk6CQk5MzMKK1BORy5MMi4zNTEJCToJCTIJCToJCTkzMworUE5HLkwyLjM1MgkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMzUzCQk6CQkyCQk6CQk5MzMKK1BORy5MMi4zNTQJCToJCTIJCToJCTkzMworUE5HLkwyLjM1NQkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMzU2CQk6CQkyCQk6CQk5MzMKK1BORy5MMi4zNTcJCToJCTIJCToJCTkzMworUE5HLkwyLjM1OAkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMzU5CQk6CQkyCQk6CQk5MzMKK1BORy5MMi4zNjAJCToJCTIJCToJCTkzMworUE5HLkwyLjM2MQkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMzYyCQk6CQkyCQk6CQk5MzMKK1BORy5MMi4zNjMJCToJCTIJCToJCTkzMworUE5HLkwyLjM2NAkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMzY1CQk6CQkyCQk6CQk5MzMKK1BORy5MMi4zNjYJCToJCTIJCToJCTkzMworUE5HLkwyLjM2NwkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMzY4CQk6CQkyCQk6CQk5MzMKK1BORy5MMi4zNjkJCToJCTIJCToJCTkzMworUE5HLkwyLjM3MAkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMzcxCQk6CQkyCQk6CQk5MzMKK1BORy5MMi4zNzIJCToJCTIJCToJCTkzMworUE5HLkwyLjM3MwkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMzc0CQk6CQkyCQk6CQk5MzMKK1BORy5MMi4zNzUJCToJCTIJCToJCTkzMworUE5HLkwyLjM3NgkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMzc3CQk6CQkyCQk6CQk5MzMKK1BORy5MMi4zNzgJCToJCTIJCToJCTkzMworUE5HLkwyLjM3OQkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMzgwCQk6CQkyCQk6CQk5MzMKK1BORy5MMi4zODEJCToJCTIJCToJCTkzMworUE5HLkwyLjM4MgkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMzgzCQk6CQkyCQk6CQk5MzMKK1BORy5MMi4zODQJCToJCTIJCToJCTkzMworUE5HLkwyLjM4NQkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMzg2CQk6CQkyCQk6CQk5MzMKK1BORy5MMi4zODcJCToJCTIJCToJCTkzMworUE5HLkwyLjM4OAkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMzg5CQk6CQkyCQk6CQk5MzMKK1BORy5MMi4zOTAJCToJCTIJCToJCTkzMworUE5HLkwyLjM5MQkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMzkyCQk6CQkyCQk6CQk5MzMKK1BORy5MMi4zOTMJCToJCTIJCToJCTkzMworUE5HLkwyLjM5NAkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMzk1CQk6CQkyCQk6CQk5MzMKK1BORy5MMi4zOTYJCToJCTIJCToJCTkzMworUE5HLkwyLjM5NwkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMzk4CQk6CQkyCQk6CQk5MzMKK1BORy5MMi4zOTkJCToJCTIJCToJCTkzMworUE5HLkwyLjQwMAkJOgkJMgkJOgkJOTMzCitQTkcuTDIuNDAxCQk6CQkyCQk6CQk5MzMKK1BORy5MMi40MDIJCToJCTIJCToJCTkzMworUE5HLkwyLjQwMwkJOgkJMgkJOgkJOTMzCitQTkcuTDIuNDA0CQk6CQkyCQk6CQk5MzMKK1BORy5MMi40MDUJCToJCTIJCToJCTkzMworUE5HLkwyLjQwNgkJOgkJMgkJOgkJOTMzCitQTkcuTDIuNDA3CQk6CQkyCQk6CQk5MzMKK1BORy5MMi40MDgJCToJCTIJCToJCTkzMworUE5HLkwyLjQwOQkJOgkJMgkJOgkJOTMzCitQTkcuTDIuNDEwCQk6CQkyCQk6CQk5MzMKK1BORy5MMi40MTEJCToJCTIJCToJCTkzMworUE5HLkwyLjQxMgkJOgkJMgkJOgkJOTMzCitQTkcuTDIuNDEzCQk6CQkyCQk6CQk5MzMKK1BORy5MMi40MTQJCToJCTIJCToJCTkzMworUE5HLkwyLjQxNQkJOgkJMgkJOgkJOTMzCitQTkcuTDIuNDE2CQk6CQkyCQk6CQk5MzMKK1BORy5MMi40MTcJCToJCTIJCToJCTkzMworUE5HLkwyLjQxOAkJOgkJMgkJOgkJOTMzCitQTkcuTDIuNDE5CQk6CQkyCQk6CQk5MzMKK1BORy5MMi40MjAJCToJCTIJCToJCTkzMworUE5HLkwyLjQyMQkJOgkJMgkJOgkJOTMzCitQTkcuTDIuNDIyCQk6CQkyCQk6CQk5MzMKK1BORy5MMi40MjMJCToJCTIJCToJCTkzMworUE5HLkwyLjQyNAkJOgkJMgkJOgkJOTMzCitQTkcuTDIuNDI1CQk6CQkyCQk6CQk5MzMKK1BORy5MMi40MjYJCToJCTIJCToJCTkzMworUE5HLkwyLjQyNwkJOgkJMgkJOgkJOTMzCitQTkcuTDIuNDI4CQk6CQkyCQk6CQk5MzMKK1BORy5MMi40MjkJCToJCTIJCToJCTkzMworUE5HLkwyLjQzMAkJOgkJMgkJOgkJOTMzCitQTkcuTDIuNDMxCQk6CQkyCQk6CQk5MzMKK1BORy5MMi40MzIJCToJCTIJCToJCTkzMworUE5HLkwyLjQzMwkJOgkJMgkJOgkJOTMzCitQTkcuTDIuNDM0CQk6CQkyCQk6CQk5MzMKK1BORy5MMi40MzUJCToJCTIJCToJCTkzMworUE5HLkwyLjQzNgkJOgkJMgkJOgkJOTMzCitQTkcuTDIuNDM3CQk6CQkyCQk6CQk5MzMKK1BORy5MMi40MzgJCToJCTIJCToJCTkzMworUE5HLkwyLjQzOQkJOgkJMgkJOgkJOTMzCitQTkcuTDIuNDQwCQk6CQkyCQk6CQk5MzMKK1BORy5MMi40NDEJCToJCTIJCToJCTkzMworUE5HLkwyLjQ0MgkJOgkJMgkJOgkJOTMzCitQTkcuTDIuNDQzCQk6CQkyCQk6CQk5MzMKK1BORy5MMi40NDQJCToJCTIJCToJCTkzMworUE5HLkwyLjQ0NQkJOgkJMgkJOgkJOTMzCitQTkcuTDIuNDQ2CQk6CQkyCQk6CQk5MzMKK1BORy5MMi40NDcJCToJCTIJCToJCTkzMworUE5HLkwyLjQ0OAkJOgkJMgkJOgkJOTMzCitQTkcuTDIuNDQ5CQk6CQkyCQk6CQk5MzMKK1BORy5MMi40NTAJCToJCTIJCToJCTkzMworUE5HLkwyLjQ1MQkJOgkJMgkJOgkJOTMzCitQTkcuTDIuNDUyCQk6CQkyCQk6CQk5MzMKK1BORy5MMi40NTMJCToJCTIJCToJCTkzMworUE5HLkwyLjQ1NAkJOgkJMgkJOgkJOTMzCitQTkcuTDIuNDU1CQk6CQkyCQk6CQk5MzMKK1BORy5MMi40NTYJCToJCTIJCToJCTkzMworUE5HLkwyLjQ1NwkJOgkJMgkJOgkJOTMzCitQTkcuTDIuNDU4CQk6CQkyCQk6CQk5MzMKK1BORy5MMi40NTkJCToJCTIJCToJCTkzMworUE5HLkwyLjQ2MAkJOgkJMgkJOgkJOTMzCitQTkcuTDIuNDYxCQk6CQkyCQk6CQk5MzMKK1BORy5MMi40NjIJCToJCTIJCToJCTkzMworUE5HLkwyLjQ2MwkJOgkJMgkJOgkJOTMzCitQTkcuTDIuNDY0CQk6CQkyCQk6CQk5MzMKK1BORy5MMi40NjUJCToJCTIJCToJCTkzMworUE5HLkwyLjQ2NgkJOgkJMgkJOgkJOTMzCitQTkcuTDIuNDY3CQk6CQkyCQk6CQk5MzMKK1BORy5MMi40NjgJCToJCTIJCToJCTkzMworUE5HLkwyLjQ2OQkJOgkJMgkJOgkJOTMzCitQTkcuTDIuNDcwCQk6CQkyCQk6CQk5MzMKK1BORy5MMi40NzEJCToJCTIJCToJCTkzMworUE5HLkwyLjQ3MgkJOgkJMgkJOgkJOTMzCitQTkcuTDIuNDczCQk6CQkyCQk6CQk5MzMKK1BORy5MMi40NzQJCToJCTIJCToJCTkzMworUE5HLkwyLjQ3NQkJOgkJMgkJOgkJOTMzCitQTkcuTDIuNDc2CQk6CQkyCQk6CQk5MzMKK1BORy5MMi40NzcJCToJCTIJCToJCTkzMworUE5HLkwyLjQ3OAkJOgkJMgkJOgkJOTMzCitQTkcuTDIuNDc5CQk6CQkyCQk6CQk5MzMKK1BORy5MMi40ODAJCToJCTIJCToJCTkzMworUE5HLkwyLjQ4MQkJOgkJMgkJOgkJOTMzCitQTkcuTDIuNDgyCQk6CQkyCQk6CQk5MzMKK1BORy5MMi40ODMJCToJCTIJCToJCTkzMworUE5HLkwyLjQ4NAkJOgkJMgkJOgkJOTMzCitQTkcuTDIuNDg1CQk6CQkyCQk6CQk5MzMKK1BORy5MMi40ODYJCToJCTIJCToJCTkzMworUE5HLkwyLjQ4NwkJOgkJMgkJOgkJOTMzCitQTkcuTDIuNDg4CQk6CQkyCQk6CQk5MzMKK1BORy5MMi40ODkJCToJCTIJCToJCTkzMworUE5HLkwyLjQ5MAkJOgkJMgkJOgkJOTMzCitQTkcuTDIuNDkxCQk6CQkyCQk6CQk5MzMKK1BORy5MMi40OTIJCToJCTIJCToJCTkzMworUE5HLkwyLjQ5MwkJOgkJMgkJOgkJOTMzCitQTkcuTDIuNDk0CQk6CQkyCQk6CQk5MzMKK1BORy5MMi40OTUJCToJCTIJCToJCTkzMworUE5HLkwyLjQ5NgkJOgkJMgkJOgkJOTMzCitDZW50cmFsICAJOgkxCToJMjk1MDAKK1NpbWJ1IAk6CTEJOgk2MTAwCitFYXN0IE5ldyBCcml0YWluIAk6CTEJOgkxNTUwMAorRWFzdCBTZXBpayAJOgkxCToJNDI4MDAKK0Vhc3Rlcm4gSGlnaGxhbmRzIAk6CTEJOgkxMTIwMAorRW5nYSAJOgkxCToJMTI4MDAKK0d1bGYgCToJMQk6CTM0NTAwCitNYWRhbmcgCToJMQk6CTI5MDAwCitNYW51cyAJOgkxCToJMjEwMAorTWlsbmUgQmF5IAk6CTEJOgkxNDAwMAorTW9yb2JlIAk6CTEJOgkzNDUwMAorTmF0aW9uYWwgQ2FwaXRhbCBEaXN0cmljdCAJOgkxCToJMjQwCitOZXcgSXJlbGFuZCAJOgkxCToJOTYwMAorTm9ydGggU29sb21vbnMgCToJMQk6CTkzMDAKK09ybyAoTm9ydGhlcm4pIAk6CTEJOgkyMjgwMAorU291dGhlcm4gSGlnaGxhbmRzIAk6CTEJOgkyMzgwMAorV2VzdCBOZXcgQnJpdGFpbiAJOgkxCToJMjEwMDAKK1dlc3QgU2VwaWsgCToJMQk6CTM2MzAwCitXZXN0ZXJuIAk6CTEJOgk5OTMwMAorV2VzdGVybiBIaWdobGFuZHMgCToJMQk6CTg1MDAKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL1BBUFVBIE5FVyBHVUlORUFfUE9QVUxBVElPTi50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9QQVBVQSBORVcgR1VJTkVBX1BPUFVMQVRJT04udHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIwMGE5YWEKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9QQVBVQSBORVcgR1VJTkVBX1BPUFVMQVRJT04udHh0CkBAIC0wLDAgKzEsMTAxNSBAQAorUGFwdWEgTmV3IEd1aW5lYQk6CTAJOgk1NjcwNTQ0CitQRy1VTkstMQk6CTEJOgkxMTg2OQorUEctVU5LLTIJOgkxCToJMTE4NjkKK1BHLVVOSy0zCToJMQk6CTExODY5CitQRy1VTkstNAk6CTEJOgkxMTg2OQorUEctVU5LLTUJOgkxCToJMTE4NjkKK1BHLVVOSy02CToJMQk6CTExODY5CitQRy1VTkstNwk6CTEJOgkxMTg2OQorUEctVU5LLTgJOgkxCToJMTE4NjkKK1BHLVVOSy05CToJMQk6CTExODY5CitQRy1VTkstMTAJOgkxCToJMTE4NjkKK1BHLVVOSy0xMQk6CTEJOgkxMTg2OQorUEctVU5LLTEyCToJMQk6CTExODY5CitQRy1VTkstMTMJOgkxCToJMTE4NjkKK1BHLVVOSy0xNAk6CTEJOgkxMTg2OQorUEctVU5LLTE1CToJMQk6CTExODY5CitQRy1VTkstMTYJOgkxCToJMTE4NjkKK1BHLVVOSy0xNwk6CTEJOgkxMTg2OQorUEctVU5LLTE4CToJMQk6CTExODY5CitQRy1VTkstMTkJOgkxCToJMTE4NjkKK1BHLVVOSy0yMAk6CTEJOgkxMTg2OQorUEctVU5LLTIxCToJMQk6CTExODY5CitQRy1VTkstMjIJOgkxCToJMTE4NjkKK1BHLVVOSy0yMwk6CTEJOgkxMTg2OQorUEctVU5LLTI0CToJMQk6CTExODY5CitQRy1VTkstMjUJOgkxCToJMTE4NjkKK1BHLVVOSy0yNgk6CTEJOgkxMTg2OQorUEctVU5LLTI3CToJMQk6CTExODY5CitQRy1VTkstMjgJOgkxCToJMTE4NjkKK1BHLVVOSy0yOQk6CTEJOgkxMTg2OQorUEctVU5LLTMwCToJMQk6CTExODY5CitQRy1VTkstMzEJOgkxCToJMTE4NjkKK1BHLVVOSy0zMgk6CTEJOgkxMTg2OQorUEctVU5LLTMzCToJMQk6CTExODY5CitQRy1VTkstMzQJOgkxCToJMTE4NjkKK1BHLVVOSy0zNQk6CTEJOgkxMTg2OQorUEctVU5LLTM2CToJMQk6CTExODY5CitQRy1VTkstMzcJOgkxCToJMTE4NjkKK1BHLVVOSy0zOAk6CTEJOgkxMTg2OQorUEctVU5LLTM5CToJMQk6CTExODY5CitQRy1VTkstNDAJOgkxCToJMTE4NjkKK1BHLVVOSy00MQk6CTEJOgkxMTg2OQorUEctVU5LLTQyCToJMQk6CTExODY5CitQRy1VTkstNDMJOgkxCToJMTE4NjkKK1BHLVVOSy00NAk6CTEJOgkxMTg2OQorUEctVU5LLTQ1CToJMQk6CTExODY5CitQRy1VTkstNDYJOgkxCToJMTE4NjkKK1BHLVVOSy00Nwk6CTEJOgkxMTg2OQorUEctVU5LLTQ4CToJMQk6CTExODY5CitQRy1VTkstNDkJOgkxCToJMTE4NjkKK1BHLVVOSy01MAk6CTEJOgkxMTg2OQorUEctVU5LLTUxCToJMQk6CTExODY5CitQRy1VTkstNTIJOgkxCToJMTE4NjkKK1BHLVVOSy01Mwk6CTEJOgkxMTg2OQorUEctVU5LLTU0CToJMQk6CTExODY5CitQRy1VTkstNTUJOgkxCToJMTE4NjkKK1BHLVVOSy01Ngk6CTEJOgkxMTg2OQorUEctVU5LLTU3CToJMQk6CTExODY5CitQRy1VTkstNTgJOgkxCToJMTE4NjkKK1BHLVVOSy01OQk6CTEJOgkxMTg2OQorUEctVU5LLTYwCToJMQk6CTExODY5CitQRy1VTkstNjEJOgkxCToJMTE4NjkKK1BHLVVOSy02Mgk6CTEJOgkxMTg2OQorUEctVU5LLTYzCToJMQk6CTExODY5CitQRy1VTkstNjQJOgkxCToJMTE4NjkKK1BHLVVOSy02NQk6CTEJOgkxMTg2OQorUEctVU5LLTY2CToJMQk6CTExODY5CitQRy1VTkstNjcJOgkxCToJMTE4NjkKK1BHLVVOSy02OAk6CTEJOgkxMTg2OQorUEctVU5LLTY5CToJMQk6CTExODY5CitQRy1VTkstNzAJOgkxCToJMTE4NjkKK1BHLVVOSy03MQk6CTEJOgkxMTg2OQorUEctVU5LLTcyCToJMQk6CTExODY5CitQRy1VTkstNzMJOgkxCToJMTE4NjkKK1BHLVVOSy03NAk6CTEJOgkxMTg2OQorUEctVU5LLTc1CToJMQk6CTExODY5CitQRy1VTkstNzYJOgkxCToJMTE4NjkKK1BHLVVOSy03Nwk6CTEJOgkxMTg2OQorUEctVU5LLTc4CToJMQk6CTExODY5CitQRy1VTkstNzkJOgkxCToJMTE4NjkKK1BHLVVOSy04MAk6CTEJOgkxMTg2OQorUEctVU5LLTgxCToJMQk6CTExODY5CitQRy1VTkstODIJOgkxCToJMTE4NjkKK1BHLVVOSy04Mwk6CTEJOgkxMTg2OQorUEctVU5LLTg0CToJMQk6CTExODY5CitQRy1VTkstODUJOgkxCToJMTE4NjkKK1BHLVVOSy04Ngk6CTEJOgkxMTg2OQorUEctVU5LLTg3CToJMQk6CTExODY5CitQRy1VTkstODgJOgkxCToJMTE4NjkKK1BHLVVOSy04OQk6CTEJOgkxMTg2OQorUEctVU5LLTkwCToJMQk6CTExODY5CitQRy1VTkstOTEJOgkxCToJMTE4NjkKK1BHLVVOSy05Mgk6CTEJOgkxMTg2OQorUEctVU5LLTkzCToJMQk6CTExODY5CitQRy1VTkstOTQJOgkxCToJMTE4NjkKK1BHLVVOSy05NQk6CTEJOgkxMTg2OQorUEctVU5LLTk2CToJMQk6CTExODY5CitQRy1VTkstOTcJOgkxCToJMTE4NjkKK1BHLVVOSy05OAk6CTEJOgkxMTg2OQorUEctVU5LLTk5CToJMQk6CTExODY5CitQRy1VTkstMTAwCToJMQk6CTExODY5CitQRy1VTkstMTAxCToJMQk6CTExODY5CitQRy1VTkstMTAyCToJMQk6CTExODY5CitQRy1VTkstMTAzCToJMQk6CTExODY5CitQRy1VTkstMTA0CToJMQk6CTExODY5CitQRy1VTkstMTA1CToJMQk6CTExODY5CitQRy1VTkstMTA2CToJMQk6CTExODY5CitQRy1VTkstMTA3CToJMQk6CTExODY5CitQRy1VTkstMTA4CToJMQk6CTExODY5CitQRy1VTkstMTA5CToJMQk6CTExODY5CitQRy1VTkstMTEwCToJMQk6CTExODY5CitQRy1VTkstMTExCToJMQk6CTExODY5CitQRy1VTkstMTEyCToJMQk6CTExODY5CitQRy1VTkstMTEzCToJMQk6CTExODY5CitQRy1VTkstMTE0CToJMQk6CTExODY5CitQRy1VTkstMTE1CToJMQk6CTExODY5CitQRy1VTkstMTE2CToJMQk6CTExODY5CitQRy1VTkstMTE3CToJMQk6CTExODY5CitQRy1VTkstMTE4CToJMQk6CTExODY5CitQRy1VTkstMTE5CToJMQk6CTExODY5CitQRy1VTkstMTIwCToJMQk6CTExODY5CitQRy1VTkstMTIxCToJMQk6CTExODY5CitQRy1VTkstMTIyCToJMQk6CTExODY5CitQRy1VTkstMTIzCToJMQk6CTExODY5CitQRy1VTkstMTI0CToJMQk6CTExODY5CitQRy1VTkstMTI1CToJMQk6CTExODY5CitQRy1VTkstMTI2CToJMQk6CTExODY5CitQRy1VTkstMTI3CToJMQk6CTExODY5CitQRy1VTkstMTI4CToJMQk6CTExODY5CitQRy1VTkstMTI5CToJMQk6CTExODY5CitQRy1VTkstMTMwCToJMQk6CTExODY5CitQRy1VTkstMTMxCToJMQk6CTExODY5CitQRy1VTkstMTMyCToJMQk6CTExODY5CitQRy1VTkstMTMzCToJMQk6CTExODY5CitQRy1VTkstMTM0CToJMQk6CTExODY5CitQRy1VTkstMTM1CToJMQk6CTExODY5CitQRy1VTkstMTM2CToJMQk6CTExODY5CitQRy1VTkstMTM3CToJMQk6CTExODY5CitQRy1VTkstMTM4CToJMQk6CTExODY5CitQRy1VTkstMTM5CToJMQk6CTExODY5CitQRy1VTkstMTQwCToJMQk6CTExODY5CitQRy1VTkstMTQxCToJMQk6CTExODY5CitQRy1VTkstMTQyCToJMQk6CTExODY5CitQRy1VTkstMTQzCToJMQk6CTExODY5CitQRy1VTkstMTQ0CToJMQk6CTExODY5CitQRy1VTkstMTQ1CToJMQk6CTExODY5CitQRy1VTkstMTQ2CToJMQk6CTExODY5CitQRy1VTkstMTQ3CToJMQk6CTExODY5CitQRy1VTkstMTQ4CToJMQk6CTExODY5CitQRy1VTkstMTQ5CToJMQk6CTExODY5CitQRy1VTkstMTUwCToJMQk6CTExODY5CitQRy1VTkstMTUxCToJMQk6CTExODY5CitQRy1VTkstMTUyCToJMQk6CTExODY5CitQRy1VTkstMTUzCToJMQk6CTExODY5CitQRy1VTkstMTU0CToJMQk6CTExODY5CitQRy1VTkstMTU1CToJMQk6CTExODY5CitQRy1VTkstMTU2CToJMQk6CTExODY5CitQRy1VTkstMTU3CToJMQk6CTExODY5CitQRy1VTkstMTU4CToJMQk6CTExODY5CitQRy1VTkstMTU5CToJMQk6CTExODY5CitQRy1VTkstMTYwCToJMQk6CTExODY5CitQRy1VTkstMTYxCToJMQk6CTExODY5CitQRy1VTkstMTYyCToJMQk6CTExODY5CitQRy1VTkstMTYzCToJMQk6CTExODY5CitQRy1VTkstMTY0CToJMQk6CTExODY5CitQRy1VTkstMTY1CToJMQk6CTExODY5CitQRy1VTkstMTY2CToJMQk6CTExODY5CitQRy1VTkstMTY3CToJMQk6CTExODY5CitQRy1VTkstMTY4CToJMQk6CTExODY5CitQRy1VTkstMTY5CToJMQk6CTExODY5CitQRy1VTkstMTcwCToJMQk6CTExODY5CitQRy1VTkstMTcxCToJMQk6CTExODY5CitQRy1VTkstMTcyCToJMQk6CTExODY5CitQRy1VTkstMTczCToJMQk6CTExODY5CitQRy1VTkstMTc0CToJMQk6CTExODY5CitQRy1VTkstMTc1CToJMQk6CTExODY5CitQRy1VTkstMTc2CToJMQk6CTExODY5CitQRy1VTkstMTc3CToJMQk6CTExODY5CitQRy1VTkstMTc4CToJMQk6CTExODY5CitQRy1VTkstMTc5CToJMQk6CTExODY5CitQRy1VTkstMTgwCToJMQk6CTExODY5CitQRy1VTkstMTgxCToJMQk6CTExODY5CitQRy1VTkstMTgyCToJMQk6CTExODY5CitQRy1VTkstMTgzCToJMQk6CTExODY5CitQRy1VTkstMTg0CToJMQk6CTExODY5CitQRy1VTkstMTg1CToJMQk6CTExODY5CitQRy1VTkstMTg2CToJMQk6CTExODY5CitQRy1VTkstMTg3CToJMQk6CTExODY5CitQRy1VTkstMTg4CToJMQk6CTExODY5CitQRy1VTkstMTg5CToJMQk6CTExODY5CitQRy1VTkstMTkwCToJMQk6CTExODY5CitQRy1VTkstMTkxCToJMQk6CTExODY5CitQRy1VTkstMTkyCToJMQk6CTExODY5CitQRy1VTkstMTkzCToJMQk6CTExODY5CitQRy1VTkstMTk0CToJMQk6CTExODY5CitQRy1VTkstMTk1CToJMQk6CTExODY5CitQRy1VTkstMTk2CToJMQk6CTExODY5CitQRy1VTkstMTk3CToJMQk6CTExODY5CitQRy1VTkstMTk4CToJMQk6CTExODY5CitQRy1VTkstMTk5CToJMQk6CTExODY5CitQRy1VTkstMjAwCToJMQk6CTExODY5CitQRy1VTkstMjAxCToJMQk6CTExODY5CitQRy1VTkstMjAyCToJMQk6CTExODY5CitQRy1VTkstMjAzCToJMQk6CTExODY5CitQRy1VTkstMjA0CToJMQk6CTExODY5CitQRy1VTkstMjA1CToJMQk6CTExODY5CitQRy1VTkstMjA2CToJMQk6CTExODY5CitQRy1VTkstMjA3CToJMQk6CTExODY5CitQRy1VTkstMjA4CToJMQk6CTExODY5CitQRy1VTkstMjA5CToJMQk6CTExODY5CitQRy1VTkstMjEwCToJMQk6CTExODY5CitQRy1VTkstMjExCToJMQk6CTExODY5CitQRy1VTkstMjEyCToJMQk6CTExODY5CitQRy1VTkstMjEzCToJMQk6CTExODY5CitQRy1VTkstMjE0CToJMQk6CTExODY5CitQRy1VTkstMjE1CToJMQk6CTExODY5CitQRy1VTkstMjE2CToJMQk6CTExODY5CitQRy1VTkstMjE3CToJMQk6CTExODY5CitQRy1VTkstMjE4CToJMQk6CTExODY5CitQRy1VTkstMjE5CToJMQk6CTExODY5CitQRy1VTkstMjIwCToJMQk6CTExODY5CitQRy1VTkstMjIxCToJMQk6CTExODY5CitQRy1VTkstMjIyCToJMQk6CTExODY5CitQRy1VTkstMjIzCToJMQk6CTExODY5CitQRy1VTkstMjI0CToJMQk6CTExODY5CitQRy1VTkstMjI1CToJMQk6CTExODY5CitQRy1VTkstMjI2CToJMQk6CTExODY5CitQRy1VTkstMjI3CToJMQk6CTExODY5CitQRy1VTkstMjI4CToJMQk6CTExODY5CitQRy1VTkstMjI5CToJMQk6CTExODY5CitQRy1VTkstMjMwCToJMQk6CTExODY5CitQRy1VTkstMjMxCToJMQk6CTExODY5CitQRy1VTkstMjMyCToJMQk6CTExODY5CitQRy1VTkstMjMzCToJMQk6CTExODY5CitQRy1VTkstMjM0CToJMQk6CTExODY5CitQRy1VTkstMjM1CToJMQk6CTExODY5CitQRy1VTkstMjM2CToJMQk6CTExODY5CitQRy1VTkstMjM3CToJMQk6CTExODY5CitQRy1VTkstMjM4CToJMQk6CTExODY5CitQRy1VTkstMjM5CToJMQk6CTExODY5CitQRy1VTkstMjQwCToJMQk6CTExODY5CitQRy1VTkstMjQxCToJMQk6CTExODY5CitQRy1VTkstMjQyCToJMQk6CTExODY5CitQRy1VTkstMjQzCToJMQk6CTExODY5CitQRy1VTkstMjQ0CToJMQk6CTExODY5CitQRy1VTkstMjQ1CToJMQk6CTExODY5CitQRy1VTkstMjQ2CToJMQk6CTExODY5CitQRy1VTkstMjQ3CToJMQk6CTExODY5CitQRy1VTkstMjQ4CToJMQk6CTExODY5CitQRy1VTkstMjQ5CToJMQk6CTExODY5CitQRy1VTkstMjUwCToJMQk6CTExODY5CitQRy1VTkstMjUxCToJMQk6CTExODY5CitQRy1VTkstMjUyCToJMQk6CTExODY5CitQRy1VTkstMjUzCToJMQk6CTExODY5CitQRy1VTkstMjU0CToJMQk6CTExODY5CitQRy1VTkstMjU1CToJMQk6CTExODY5CitQRy1VTkstMjU2CToJMQk6CTExODY5CitQRy1VTkstMjU3CToJMQk6CTExODY5CitQRy1VTkstMjU4CToJMQk6CTExODY5CitQRy1VTkstMjU5CToJMQk6CTExODY5CitQRy1VTkstMjYwCToJMQk6CTExODY5CitQRy1VTkstMjYxCToJMQk6CTExODY5CitQRy1VTkstMjYyCToJMQk6CTExODY5CitQRy1VTkstMjYzCToJMQk6CTExODY5CitQRy1VTkstMjY0CToJMQk6CTExODY5CitQRy1VTkstMjY1CToJMQk6CTExODY5CitQRy1VTkstMjY2CToJMQk6CTExODY5CitQRy1VTkstMjY3CToJMQk6CTExODY5CitQRy1VTkstMjY4CToJMQk6CTExODY5CitQRy1VTkstMjY5CToJMQk6CTExODY5CitQRy1VTkstMjcwCToJMQk6CTExODY5CitQRy1VTkstMjcxCToJMQk6CTExODY5CitQRy1VTkstMjcyCToJMQk6CTExODY5CitQRy1VTkstMjczCToJMQk6CTExODY5CitQRy1VTkstMjc0CToJMQk6CTExODY5CitQRy1VTkstMjc1CToJMQk6CTExODY5CitQRy1VTkstMjc2CToJMQk6CTExODY5CitQRy1VTkstMjc3CToJMQk6CTExODY5CitQRy1VTkstMjc4CToJMQk6CTExODY5CitQRy1VTkstMjc5CToJMQk6CTExODY5CitQRy1VTkstMjgwCToJMQk6CTExODY5CitQRy1VTkstMjgxCToJMQk6CTExODY5CitQRy1VTkstMjgyCToJMQk6CTExODY5CitQRy1VTkstMjgzCToJMQk6CTExODY5CitQRy1VTkstMjg0CToJMQk6CTExODY5CitQRy1VTkstMjg1CToJMQk6CTExODY5CitQRy1VTkstMjg2CToJMQk6CTExODY5CitQRy1VTkstMjg3CToJMQk6CTExODY5CitQRy1VTkstMjg4CToJMQk6CTExODY5CitQRy1VTkstMjg5CToJMQk6CTExODY5CitQRy1VTkstMjkwCToJMQk6CTExODY5CitQRy1VTkstMjkxCToJMQk6CTExODY5CitQRy1VTkstMjkyCToJMQk6CTExODY5CitQRy1VTkstMjkzCToJMQk6CTExODY5CitQRy1VTkstMjk0CToJMQk6CTExODY5CitQRy1VTkstMjk1CToJMQk6CTExODY5CitQRy1VTkstMjk2CToJMQk6CTExODY5CitQRy1VTkstMjk3CToJMQk6CTExODY5CitQRy1VTkstMjk4CToJMQk6CTExODY5CitQRy1VTkstMjk5CToJMQk6CTExODY5CitQRy1VTkstMzAwCToJMQk6CTExODY5CitQRy1VTkstMzAxCToJMQk6CTExODY5CitQRy1VTkstMzAyCToJMQk6CTExODY5CitQRy1VTkstMzAzCToJMQk6CTExODY5CitQRy1VTkstMzA0CToJMQk6CTExODY5CitQRy1VTkstMzA1CToJMQk6CTExODY5CitQRy1VTkstMzA2CToJMQk6CTExODY5CitQRy1VTkstMzA3CToJMQk6CTExODY5CitQRy1VTkstMzA4CToJMQk6CTExODY5CitQRy1VTkstMzA5CToJMQk6CTExODY5CitQRy1VTkstMzEwCToJMQk6CTExODY5CitQRy1VTkstMzExCToJMQk6CTExODY5CitQRy1VTkstMzEyCToJMQk6CTExODY5CitQRy1VTkstMzEzCToJMQk6CTExODY5CitQRy1VTkstMzE0CToJMQk6CTExODY5CitQRy1VTkstMzE1CToJMQk6CTExODY5CitQRy1VTkstMzE2CToJMQk6CTExODY5CitQRy1VTkstMzE3CToJMQk6CTExODY5CitQRy1VTkstMzE4CToJMQk6CTExODY5CitQRy1VTkstMzE5CToJMQk6CTExODY5CitQRy1VTkstMzIwCToJMQk6CTExODY5CitQRy1VTkstMzIxCToJMQk6CTExODY5CitQRy1VTkstMzIyCToJMQk6CTExODY5CitQRy1VTkstMzIzCToJMQk6CTExODY5CitQRy1VTkstMzI0CToJMQk6CTExODY5CitQRy1VTkstMzI1CToJMQk6CTExODY5CitQRy1VTkstMzI2CToJMQk6CTExODY5CitQRy1VTkstMzI3CToJMQk6CTExODY5CitQRy1VTkstMzI4CToJMQk6CTExODY5CitQRy1VTkstMzI5CToJMQk6CTExODY5CitQRy1VTkstMzMwCToJMQk6CTExODY5CitQRy1VTkstMzMxCToJMQk6CTExODY5CitQRy1VTkstMzMyCToJMQk6CTExODY5CitQRy1VTkstMzMzCToJMQk6CTExODY5CitQRy1VTkstMzM0CToJMQk6CTExODY5CitQRy1VTkstMzM1CToJMQk6CTExODY5CitQRy1VTkstMzM2CToJMQk6CTExODY5CitQRy1VTkstMzM3CToJMQk6CTExODY5CitQRy1VTkstMzM4CToJMQk6CTExODY5CitQRy1VTkstMzM5CToJMQk6CTExODY5CitQRy1VTkstMzQwCToJMQk6CTExODY5CitQRy1VTkstMzQxCToJMQk6CTExODY5CitQRy1VTkstMzQyCToJMQk6CTExODY5CitQRy1VTkstMzQzCToJMQk6CTExODY5CitQRy1VTkstMzQ0CToJMQk6CTExODY5CitQRy1VTkstMzQ1CToJMQk6CTExODY5CitQRy1VTkstMzQ2CToJMQk6CTExODY5CitQRy1VTkstMzQ3CToJMQk6CTExODY5CitQRy1VTkstMzQ4CToJMQk6CTExODY5CitQRy1VTkstMzQ5CToJMQk6CTExODY5CitQRy1VTkstMzUwCToJMQk6CTExODY5CitQRy1VTkstMzUxCToJMQk6CTExODY5CitQRy1VTkstMzUyCToJMQk6CTExODY5CitQRy1VTkstMzUzCToJMQk6CTExODY5CitQRy1VTkstMzU0CToJMQk6CTExODY5CitQRy1VTkstMzU1CToJMQk6CTExODY5CitQRy1VTkstMzU2CToJMQk6CTExODY5CitQRy1VTkstMzU3CToJMQk6CTExODY5CitQRy1VTkstMzU4CToJMQk6CTExODY5CitQRy1VTkstMzU5CToJMQk6CTExODY5CitQRy1VTkstMzYwCToJMQk6CTExODY5CitQRy1VTkstMzYxCToJMQk6CTExODY5CitQRy1VTkstMzYyCToJMQk6CTExODY5CitQRy1VTkstMzYzCToJMQk6CTExODY5CitQRy1VTkstMzY0CToJMQk6CTExODY5CitQRy1VTkstMzY1CToJMQk6CTExODY5CitQRy1VTkstMzY2CToJMQk6CTExODY5CitQRy1VTkstMzY3CToJMQk6CTExODY5CitQRy1VTkstMzY4CToJMQk6CTExODY5CitQRy1VTkstMzY5CToJMQk6CTExODY5CitQRy1VTkstMzcwCToJMQk6CTExODY5CitQRy1VTkstMzcxCToJMQk6CTExODY5CitQRy1VTkstMzcyCToJMQk6CTExODY5CitQRy1VTkstMzczCToJMQk6CTExODY5CitQRy1VTkstMzc0CToJMQk6CTExODY5CitQRy1VTkstMzc1CToJMQk6CTExODY5CitQRy1VTkstMzc2CToJMQk6CTExODY5CitQRy1VTkstMzc3CToJMQk6CTExODY5CitQRy1VTkstMzc4CToJMQk6CTExODY5CitQRy1VTkstMzc5CToJMQk6CTExODY5CitQRy1VTkstMzgwCToJMQk6CTExODY5CitQRy1VTkstMzgxCToJMQk6CTExODY5CitQRy1VTkstMzgyCToJMQk6CTExODY5CitQRy1VTkstMzgzCToJMQk6CTExODY5CitQRy1VTkstMzg0CToJMQk6CTExODY5CitQRy1VTkstMzg1CToJMQk6CTExODY5CitQRy1VTkstMzg2CToJMQk6CTExODY5CitQRy1VTkstMzg3CToJMQk6CTExODY5CitQRy1VTkstMzg4CToJMQk6CTExODY5CitQRy1VTkstMzg5CToJMQk6CTExODY5CitQRy1VTkstMzkwCToJMQk6CTExODY5CitQRy1VTkstMzkxCToJMQk6CTExODY5CitQRy1VTkstMzkyCToJMQk6CTExODY5CitQRy1VTkstMzkzCToJMQk6CTExODY5CitQRy1VTkstMzk0CToJMQk6CTExODY5CitQRy1VTkstMzk1CToJMQk6CTExODY5CitQRy1VTkstMzk2CToJMQk6CTExODY5CitQRy1VTkstMzk3CToJMQk6CTExODY5CitQRy1VTkstMzk4CToJMQk6CTExODY5CitQRy1VTkstMzk5CToJMQk6CTExODY5CitQRy1VTkstNDAwCToJMQk6CTExODY5CitQRy1VTkstNDAxCToJMQk6CTExODY5CitQRy1VTkstNDAyCToJMQk6CTExODY5CitQRy1VTkstNDAzCToJMQk6CTExODY5CitQRy1VTkstNDA0CToJMQk6CTExODY5CitQRy1VTkstNDA1CToJMQk6CTExODY5CitQRy1VTkstNDA2CToJMQk6CTExODY5CitQRy1VTkstNDA3CToJMQk6CTExODY5CitQRy1VTkstNDA4CToJMQk6CTExODY5CitQRy1VTkstNDA5CToJMQk6CTExODY5CitQRy1VTkstNDEwCToJMQk6CTExODY5CitQRy1VTkstNDExCToJMQk6CTExODY5CitQRy1VTkstNDEyCToJMQk6CTExODY5CitQRy1VTkstNDEzCToJMQk6CTExODY5CitQRy1VTkstNDE0CToJMQk6CTExODY5CitQRy1VTkstNDE1CToJMQk6CTExODY5CitQRy1VTkstNDE2CToJMQk6CTExODY5CitQRy1VTkstNDE3CToJMQk6CTExODY5CitQRy1VTkstNDE4CToJMQk6CTExODY5CitQRy1VTkstNDE5CToJMQk6CTExODY5CitQRy1VTkstNDIwCToJMQk6CTExODY5CitQRy1VTkstNDIxCToJMQk6CTExODY5CitQRy1VTkstNDIyCToJMQk6CTExODY5CitQRy1VTkstNDIzCToJMQk6CTExODY5CitQRy1VTkstNDI0CToJMQk6CTExODY5CitQRy1VTkstNDI1CToJMQk6CTExODY5CitQRy1VTkstNDI2CToJMQk6CTExODY5CitQRy1VTkstNDI3CToJMQk6CTExODY5CitQRy1VTkstNDI4CToJMQk6CTExODY5CitQRy1VTkstNDI5CToJMQk6CTExODY5CitQRy1VTkstNDMwCToJMQk6CTExODY5CitQRy1VTkstNDMxCToJMQk6CTExODY5CitQRy1VTkstNDMyCToJMQk6CTExODY5CitQRy1VTkstNDMzCToJMQk6CTExODY5CitQRy1VTkstNDM0CToJMQk6CTExODY5CitQRy1VTkstNDM1CToJMQk6CTExODY5CitQRy1VTkstNDM2CToJMQk6CTExODY5CitQRy1VTkstNDM3CToJMQk6CTExODY5CitQRy1VTkstNDM4CToJMQk6CTExODY5CitQRy1VTkstNDM5CToJMQk6CTExODY5CitQRy1VTkstNDQwCToJMQk6CTExODY5CitQRy1VTkstNDQxCToJMQk6CTExODY5CitQRy1VTkstNDQyCToJMQk6CTExODY5CitQRy1VTkstNDQzCToJMQk6CTExODY5CitQRy1VTkstNDQ0CToJMQk6CTExODY5CitQRy1VTkstNDQ1CToJMQk6CTExODY5CitQRy1VTkstNDQ2CToJMQk6CTExODY5CitQRy1VTkstNDQ3CToJMQk6CTExODY5CitQRy1VTkstNDQ4CToJMQk6CTExODY5CitQRy1VTkstNDQ5CToJMQk6CTExODY5CitQRy1VTkstNDUwCToJMQk6CTExODY5CitQRy1VTkstNDUxCToJMQk6CTExODY5CitQRy1VTkstNDUyCToJMQk6CTExODY5CitQRy1VTkstNDUzCToJMQk6CTExODY5CitQRy1VTkstNDU0CToJMQk6CTExODY5CitQRy1VTkstNDU1CToJMQk6CTExODY5CitQRy1VTkstNDU2CToJMQk6CTExODY5CitQRy1VTkstNDU3CToJMQk6CTExODY5CitQRy1VTkstNDU4CToJMQk6CTExODY5CitQRy1VTkstNDU5CToJMQk6CTExODY5CitQRy1VTkstNDYwCToJMQk6CTExODY5CitQRy1VTkstNDYxCToJMQk6CTExODY5CitQRy1VTkstNDYyCToJMQk6CTExODY5CitQRy1VTkstNDYzCToJMQk6CTExODY5CitQRy1VTkstNDY0CToJMQk6CTExODY5CitQRy1VTkstNDY1CToJMQk6CTExODY5CitQRy1VTkstNDY2CToJMQk6CTExODY5CitQRy1VTkstNDY3CToJMQk6CTExODY5CitQRy1VTkstNDY4CToJMQk6CTExODY5CitQRy1VTkstNDY5CToJMQk6CTExODY5CitQRy1VTkstNDcwCToJMQk6CTExODY5CitQRy1VTkstNDcxCToJMQk6CTExODY5CitQRy1VTkstNDcyCToJMQk6CTExODY5CitQRy1VTkstNDczCToJMQk6CTExODY5CitQRy1VTkstNDc0CToJMQk6CTExODY5CitQRy1VTkstNDc1CToJMQk6CTExODY5CitQRy1VTkstNDc2CToJMQk6CTExODY5CitQRy1VTkstNDc3CToJMQk6CTExODY5CitQRy1VTkstNDc4CToJMQk6CTExODY5CitQRy1VTkstNDc5CToJMQk6CTExODY5CitQRy1VTkstNDgwCToJMQk6CTExODY5CitQRy1VTkstNDgxCToJMQk6CTExODY5CitQRy1VTkstNDgyCToJMQk6CTExODY5CitQRy1VTkstNDgzCToJMQk6CTExODY5CitQRy1VTkstNDg0CToJMQk6CTExODY5CitQRy1VTkstNDg1CToJMQk6CTExODY5CitQRy1VTkstNDg2CToJMQk6CTExODY5CitQRy1VTkstNDg3CToJMQk6CTExODY5CitQRy1VTkstNDg4CToJMQk6CTExODY5CitQRy1VTkstNDg5CToJMQk6CTExODY5CitQRy1VTkstNDkwCToJMQk6CTExODY5CitQRy1VTkstNDkxCToJMQk6CTExODY5CitQRy1VTkstNDkyCToJMQk6CTExODY5CitQRy1VTkstNDkzCToJMQk6CTExODY5CitQRy1VTkstNDk0CToJMQk6CTExODY5CitQRy1VTkstNDk1CToJMQk6CTExODY5CitQRy1VTkstNDk2CToJMQk6CTExODY5CitQTkcuTDIuMQkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi4yCQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjMJCToJCTIJCToJCTExODY5CitQTkcuTDIuNAkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi41CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjYJCToJCTIJCToJCTExODY5CitQTkcuTDIuNwkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi44CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjkJCToJCTIJCToJCTExODY5CitQTkcuTDIuMTAJCToJCTIJCToJCTExODY5CitQTkcuTDIuMTEJCToJCTIJCToJCTExODY5CitQTkcuTDIuMTIJCToJCTIJCToJCTExODY5CitQTkcuTDIuMTMJCToJCTIJCToJCTExODY5CitQTkcuTDIuMTQJCToJCTIJCToJCTExODY5CitQTkcuTDIuMTUJCToJCTIJCToJCTExODY5CitQTkcuTDIuMTYJCToJCTIJCToJCTExODY5CitQTkcuTDIuMTcJCToJCTIJCToJCTExODY5CitQTkcuTDIuMTgJCToJCTIJCToJCTExODY5CitQTkcuTDIuMTkJCToJCTIJCToJCTExODY5CitQTkcuTDIuMjAJCToJCTIJCToJCTExODY5CitQTkcuTDIuMjEJCToJCTIJCToJCTExODY5CitQTkcuTDIuMjIJCToJCTIJCToJCTExODY5CitQTkcuTDIuMjMJCToJCTIJCToJCTExODY5CitQTkcuTDIuMjQJCToJCTIJCToJCTExODY5CitQTkcuTDIuMjUJCToJCTIJCToJCTExODY5CitQTkcuTDIuMjYJCToJCTIJCToJCTExODY5CitQTkcuTDIuMjcJCToJCTIJCToJCTExODY5CitQTkcuTDIuMjgJCToJCTIJCToJCTExODY5CitQTkcuTDIuMjkJCToJCTIJCToJCTExODY5CitQTkcuTDIuMzAJCToJCTIJCToJCTExODY5CitQTkcuTDIuMzEJCToJCTIJCToJCTExODY5CitQTkcuTDIuMzIJCToJCTIJCToJCTExODY5CitQTkcuTDIuMzMJCToJCTIJCToJCTExODY5CitQTkcuTDIuMzQJCToJCTIJCToJCTExODY5CitQTkcuTDIuMzUJCToJCTIJCToJCTExODY5CitQTkcuTDIuMzYJCToJCTIJCToJCTExODY5CitQTkcuTDIuMzcJCToJCTIJCToJCTExODY5CitQTkcuTDIuMzgJCToJCTIJCToJCTExODY5CitQTkcuTDIuMzkJCToJCTIJCToJCTExODY5CitQTkcuTDIuNDAJCToJCTIJCToJCTExODY5CitQTkcuTDIuNDEJCToJCTIJCToJCTExODY5CitQTkcuTDIuNDIJCToJCTIJCToJCTExODY5CitQTkcuTDIuNDMJCToJCTIJCToJCTExODY5CitQTkcuTDIuNDQJCToJCTIJCToJCTExODY5CitQTkcuTDIuNDUJCToJCTIJCToJCTExODY5CitQTkcuTDIuNDYJCToJCTIJCToJCTExODY5CitQTkcuTDIuNDcJCToJCTIJCToJCTExODY5CitQTkcuTDIuNDgJCToJCTIJCToJCTExODY5CitQTkcuTDIuNDkJCToJCTIJCToJCTExODY5CitQTkcuTDIuNTAJCToJCTIJCToJCTExODY5CitQTkcuTDIuNTEJCToJCTIJCToJCTExODY5CitQTkcuTDIuNTIJCToJCTIJCToJCTExODY5CitQTkcuTDIuNTMJCToJCTIJCToJCTExODY5CitQTkcuTDIuNTQJCToJCTIJCToJCTExODY5CitQTkcuTDIuNTUJCToJCTIJCToJCTExODY5CitQTkcuTDIuNTYJCToJCTIJCToJCTExODY5CitQTkcuTDIuNTcJCToJCTIJCToJCTExODY5CitQTkcuTDIuNTgJCToJCTIJCToJCTExODY5CitQTkcuTDIuNTkJCToJCTIJCToJCTExODY5CitQTkcuTDIuNjAJCToJCTIJCToJCTExODY5CitQTkcuTDIuNjEJCToJCTIJCToJCTExODY5CitQTkcuTDIuNjIJCToJCTIJCToJCTExODY5CitQTkcuTDIuNjMJCToJCTIJCToJCTExODY5CitQTkcuTDIuNjQJCToJCTIJCToJCTExODY5CitQTkcuTDIuNjUJCToJCTIJCToJCTExODY5CitQTkcuTDIuNjYJCToJCTIJCToJCTExODY5CitQTkcuTDIuNjcJCToJCTIJCToJCTExODY5CitQTkcuTDIuNjgJCToJCTIJCToJCTExODY5CitQTkcuTDIuNjkJCToJCTIJCToJCTExODY5CitQTkcuTDIuNzAJCToJCTIJCToJCTExODY5CitQTkcuTDIuNzEJCToJCTIJCToJCTExODY5CitQTkcuTDIuNzIJCToJCTIJCToJCTExODY5CitQTkcuTDIuNzMJCToJCTIJCToJCTExODY5CitQTkcuTDIuNzQJCToJCTIJCToJCTExODY5CitQTkcuTDIuNzUJCToJCTIJCToJCTExODY5CitQTkcuTDIuNzYJCToJCTIJCToJCTExODY5CitQTkcuTDIuNzcJCToJCTIJCToJCTExODY5CitQTkcuTDIuNzgJCToJCTIJCToJCTExODY5CitQTkcuTDIuNzkJCToJCTIJCToJCTExODY5CitQTkcuTDIuODAJCToJCTIJCToJCTExODY5CitQTkcuTDIuODEJCToJCTIJCToJCTExODY5CitQTkcuTDIuODIJCToJCTIJCToJCTExODY5CitQTkcuTDIuODMJCToJCTIJCToJCTExODY5CitQTkcuTDIuODQJCToJCTIJCToJCTExODY5CitQTkcuTDIuODUJCToJCTIJCToJCTExODY5CitQTkcuTDIuODYJCToJCTIJCToJCTExODY5CitQTkcuTDIuODcJCToJCTIJCToJCTExODY5CitQTkcuTDIuODgJCToJCTIJCToJCTExODY5CitQTkcuTDIuODkJCToJCTIJCToJCTExODY5CitQTkcuTDIuOTAJCToJCTIJCToJCTExODY5CitQTkcuTDIuOTEJCToJCTIJCToJCTExODY5CitQTkcuTDIuOTIJCToJCTIJCToJCTExODY5CitQTkcuTDIuOTMJCToJCTIJCToJCTExODY5CitQTkcuTDIuOTQJCToJCTIJCToJCTExODY5CitQTkcuTDIuOTUJCToJCTIJCToJCTExODY5CitQTkcuTDIuOTYJCToJCTIJCToJCTExODY5CitQTkcuTDIuOTcJCToJCTIJCToJCTExODY5CitQTkcuTDIuOTgJCToJCTIJCToJCTExODY5CitQTkcuTDIuOTkJCToJCTIJCToJCTExODY5CitQTkcuTDIuMTAwCQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjEwMQkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi4xMDIJCToJCTIJCToJCTExODY5CitQTkcuTDIuMTAzCQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjEwNAkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi4xMDUJCToJCTIJCToJCTExODY5CitQTkcuTDIuMTA2CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjEwNwkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi4xMDgJCToJCTIJCToJCTExODY5CitQTkcuTDIuMTA5CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjExMAkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi4xMTEJCToJCTIJCToJCTExODY5CitQTkcuTDIuMTEyCQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjExMwkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi4xMTQJCToJCTIJCToJCTExODY5CitQTkcuTDIuMTE1CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjExNgkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi4xMTcJCToJCTIJCToJCTExODY5CitQTkcuTDIuMTE4CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjExOQkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi4xMjAJCToJCTIJCToJCTExODY5CitQTkcuTDIuMTIxCQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjEyMgkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi4xMjMJCToJCTIJCToJCTExODY5CitQTkcuTDIuMTI0CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjEyNQkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi4xMjYJCToJCTIJCToJCTExODY5CitQTkcuTDIuMTI3CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjEyOAkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi4xMjkJCToJCTIJCToJCTExODY5CitQTkcuTDIuMTMwCQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjEzMQkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi4xMzIJCToJCTIJCToJCTExODY5CitQTkcuTDIuMTMzCQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjEzNAkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi4xMzUJCToJCTIJCToJCTExODY5CitQTkcuTDIuMTM2CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjEzNwkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi4xMzgJCToJCTIJCToJCTExODY5CitQTkcuTDIuMTM5CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjE0MAkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi4xNDEJCToJCTIJCToJCTExODY5CitQTkcuTDIuMTQyCQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjE0MwkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi4xNDQJCToJCTIJCToJCTExODY5CitQTkcuTDIuMTQ1CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjE0NgkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi4xNDcJCToJCTIJCToJCTExODY5CitQTkcuTDIuMTQ4CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjE0OQkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi4xNTAJCToJCTIJCToJCTExODY5CitQTkcuTDIuMTUxCQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjE1MgkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi4xNTMJCToJCTIJCToJCTExODY5CitQTkcuTDIuMTU0CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjE1NQkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi4xNTYJCToJCTIJCToJCTExODY5CitQTkcuTDIuMTU3CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjE1OAkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi4xNTkJCToJCTIJCToJCTExODY5CitQTkcuTDIuMTYwCQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjE2MQkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi4xNjIJCToJCTIJCToJCTExODY5CitQTkcuTDIuMTYzCQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjE2NAkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi4xNjUJCToJCTIJCToJCTExODY5CitQTkcuTDIuMTY2CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjE2NwkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi4xNjgJCToJCTIJCToJCTExODY5CitQTkcuTDIuMTY5CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjE3MAkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi4xNzEJCToJCTIJCToJCTExODY5CitQTkcuTDIuMTcyCQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjE3MwkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi4xNzQJCToJCTIJCToJCTExODY5CitQTkcuTDIuMTc1CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjE3NgkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi4xNzcJCToJCTIJCToJCTExODY5CitQTkcuTDIuMTc4CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjE3OQkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi4xODAJCToJCTIJCToJCTExODY5CitQTkcuTDIuMTgxCQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjE4MgkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi4xODMJCToJCTIJCToJCTExODY5CitQTkcuTDIuMTg0CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjE4NQkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi4xODYJCToJCTIJCToJCTExODY5CitQTkcuTDIuMTg3CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjE4OAkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi4xODkJCToJCTIJCToJCTExODY5CitQTkcuTDIuMTkwCQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjE5MQkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi4xOTIJCToJCTIJCToJCTExODY5CitQTkcuTDIuMTkzCQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjE5NAkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi4xOTUJCToJCTIJCToJCTExODY5CitQTkcuTDIuMTk2CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjE5NwkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi4xOTgJCToJCTIJCToJCTExODY5CitQTkcuTDIuMTk5CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjIwMAkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi4yMDEJCToJCTIJCToJCTExODY5CitQTkcuTDIuMjAyCQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjIwMwkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi4yMDQJCToJCTIJCToJCTExODY5CitQTkcuTDIuMjA1CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjIwNgkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi4yMDcJCToJCTIJCToJCTExODY5CitQTkcuTDIuMjA4CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjIwOQkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi4yMTAJCToJCTIJCToJCTExODY5CitQTkcuTDIuMjExCQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjIxMgkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi4yMTMJCToJCTIJCToJCTExODY5CitQTkcuTDIuMjE0CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjIxNQkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi4yMTYJCToJCTIJCToJCTExODY5CitQTkcuTDIuMjE3CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjIxOAkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi4yMTkJCToJCTIJCToJCTExODY5CitQTkcuTDIuMjIwCQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjIyMQkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi4yMjIJCToJCTIJCToJCTExODY5CitQTkcuTDIuMjIzCQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjIyNAkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi4yMjUJCToJCTIJCToJCTExODY5CitQTkcuTDIuMjI2CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjIyNwkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi4yMjgJCToJCTIJCToJCTExODY5CitQTkcuTDIuMjI5CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjIzMAkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi4yMzEJCToJCTIJCToJCTExODY5CitQTkcuTDIuMjMyCQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjIzMwkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi4yMzQJCToJCTIJCToJCTExODY5CitQTkcuTDIuMjM1CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjIzNgkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi4yMzcJCToJCTIJCToJCTExODY5CitQTkcuTDIuMjM4CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjIzOQkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi4yNDAJCToJCTIJCToJCTExODY5CitQTkcuTDIuMjQxCQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjI0MgkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi4yNDMJCToJCTIJCToJCTExODY5CitQTkcuTDIuMjQ0CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjI0NQkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi4yNDYJCToJCTIJCToJCTExODY5CitQTkcuTDIuMjQ3CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjI0OAkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi4yNDkJCToJCTIJCToJCTExODY5CitQTkcuTDIuMjUwCQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjI1MQkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi4yNTIJCToJCTIJCToJCTExODY5CitQTkcuTDIuMjUzCQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjI1NAkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi4yNTUJCToJCTIJCToJCTExODY5CitQTkcuTDIuMjU2CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjI1NwkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi4yNTgJCToJCTIJCToJCTExODY5CitQTkcuTDIuMjU5CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjI2MAkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi4yNjEJCToJCTIJCToJCTExODY5CitQTkcuTDIuMjYyCQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjI2MwkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi4yNjQJCToJCTIJCToJCTExODY5CitQTkcuTDIuMjY1CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjI2NgkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi4yNjcJCToJCTIJCToJCTExODY5CitQTkcuTDIuMjY4CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjI2OQkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi4yNzAJCToJCTIJCToJCTExODY5CitQTkcuTDIuMjcxCQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjI3MgkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi4yNzMJCToJCTIJCToJCTExODY5CitQTkcuTDIuMjc0CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjI3NQkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi4yNzYJCToJCTIJCToJCTExODY5CitQTkcuTDIuMjc3CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjI3OAkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi4yNzkJCToJCTIJCToJCTExODY5CitQTkcuTDIuMjgwCQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjI4MQkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi4yODIJCToJCTIJCToJCTExODY5CitQTkcuTDIuMjgzCQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjI4NAkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi4yODUJCToJCTIJCToJCTExODY5CitQTkcuTDIuMjg2CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjI4NwkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi4yODgJCToJCTIJCToJCTExODY5CitQTkcuTDIuMjg5CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjI5MAkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi4yOTEJCToJCTIJCToJCTExODY5CitQTkcuTDIuMjkyCQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjI5MwkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi4yOTQJCToJCTIJCToJCTExODY5CitQTkcuTDIuMjk1CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjI5NgkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi4yOTcJCToJCTIJCToJCTExODY5CitQTkcuTDIuMjk4CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjI5OQkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi4zMDAJCToJCTIJCToJCTExODY5CitQTkcuTDIuMzAxCQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjMwMgkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi4zMDMJCToJCTIJCToJCTExODY5CitQTkcuTDIuMzA0CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjMwNQkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi4zMDYJCToJCTIJCToJCTExODY5CitQTkcuTDIuMzA3CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjMwOAkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi4zMDkJCToJCTIJCToJCTExODY5CitQTkcuTDIuMzEwCQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjMxMQkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi4zMTIJCToJCTIJCToJCTExODY5CitQTkcuTDIuMzEzCQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjMxNAkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi4zMTUJCToJCTIJCToJCTExODY5CitQTkcuTDIuMzE2CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjMxNwkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi4zMTgJCToJCTIJCToJCTExODY5CitQTkcuTDIuMzE5CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjMyMAkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi4zMjEJCToJCTIJCToJCTExODY5CitQTkcuTDIuMzIyCQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjMyMwkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi4zMjQJCToJCTIJCToJCTExODY5CitQTkcuTDIuMzI1CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjMyNgkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi4zMjcJCToJCTIJCToJCTExODY5CitQTkcuTDIuMzI4CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjMyOQkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi4zMzAJCToJCTIJCToJCTExODY5CitQTkcuTDIuMzMxCQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjMzMgkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi4zMzMJCToJCTIJCToJCTExODY5CitQTkcuTDIuMzM0CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjMzNQkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi4zMzYJCToJCTIJCToJCTExODY5CitQTkcuTDIuMzM3CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjMzOAkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi4zMzkJCToJCTIJCToJCTExODY5CitQTkcuTDIuMzQwCQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjM0MQkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi4zNDIJCToJCTIJCToJCTExODY5CitQTkcuTDIuMzQzCQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjM0NAkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi4zNDUJCToJCTIJCToJCTExODY5CitQTkcuTDIuMzQ2CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjM0NwkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi4zNDgJCToJCTIJCToJCTExODY5CitQTkcuTDIuMzQ5CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjM1MAkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi4zNTEJCToJCTIJCToJCTExODY5CitQTkcuTDIuMzUyCQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjM1MwkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi4zNTQJCToJCTIJCToJCTExODY5CitQTkcuTDIuMzU1CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjM1NgkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi4zNTcJCToJCTIJCToJCTExODY5CitQTkcuTDIuMzU4CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjM1OQkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi4zNjAJCToJCTIJCToJCTExODY5CitQTkcuTDIuMzYxCQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjM2MgkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi4zNjMJCToJCTIJCToJCTExODY5CitQTkcuTDIuMzY0CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjM2NQkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi4zNjYJCToJCTIJCToJCTExODY5CitQTkcuTDIuMzY3CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjM2OAkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi4zNjkJCToJCTIJCToJCTExODY5CitQTkcuTDIuMzcwCQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjM3MQkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi4zNzIJCToJCTIJCToJCTExODY5CitQTkcuTDIuMzczCQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjM3NAkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi4zNzUJCToJCTIJCToJCTExODY5CitQTkcuTDIuMzc2CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjM3NwkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi4zNzgJCToJCTIJCToJCTExODY5CitQTkcuTDIuMzc5CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjM4MAkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi4zODEJCToJCTIJCToJCTExODY5CitQTkcuTDIuMzgyCQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjM4MwkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi4zODQJCToJCTIJCToJCTExODY5CitQTkcuTDIuMzg1CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjM4NgkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi4zODcJCToJCTIJCToJCTExODY5CitQTkcuTDIuMzg4CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjM4OQkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi4zOTAJCToJCTIJCToJCTExODY5CitQTkcuTDIuMzkxCQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjM5MgkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi4zOTMJCToJCTIJCToJCTExODY5CitQTkcuTDIuMzk0CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjM5NQkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi4zOTYJCToJCTIJCToJCTExODY5CitQTkcuTDIuMzk3CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjM5OAkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi4zOTkJCToJCTIJCToJCTExODY5CitQTkcuTDIuNDAwCQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjQwMQkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi40MDIJCToJCTIJCToJCTExODY5CitQTkcuTDIuNDAzCQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjQwNAkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi40MDUJCToJCTIJCToJCTExODY5CitQTkcuTDIuNDA2CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjQwNwkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi40MDgJCToJCTIJCToJCTExODY5CitQTkcuTDIuNDA5CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjQxMAkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi40MTEJCToJCTIJCToJCTExODY5CitQTkcuTDIuNDEyCQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjQxMwkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi40MTQJCToJCTIJCToJCTExODY5CitQTkcuTDIuNDE1CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjQxNgkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi40MTcJCToJCTIJCToJCTExODY5CitQTkcuTDIuNDE4CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjQxOQkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi40MjAJCToJCTIJCToJCTExODY5CitQTkcuTDIuNDIxCQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjQyMgkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi40MjMJCToJCTIJCToJCTExODY5CitQTkcuTDIuNDI0CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjQyNQkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi40MjYJCToJCTIJCToJCTExODY5CitQTkcuTDIuNDI3CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjQyOAkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi40MjkJCToJCTIJCToJCTExODY5CitQTkcuTDIuNDMwCQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjQzMQkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi40MzIJCToJCTIJCToJCTExODY5CitQTkcuTDIuNDMzCQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjQzNAkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi40MzUJCToJCTIJCToJCTExODY5CitQTkcuTDIuNDM2CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjQzNwkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi40MzgJCToJCTIJCToJCTExODY5CitQTkcuTDIuNDM5CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjQ0MAkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi40NDEJCToJCTIJCToJCTExODY5CitQTkcuTDIuNDQyCQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjQ0MwkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi40NDQJCToJCTIJCToJCTExODY5CitQTkcuTDIuNDQ1CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjQ0NgkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi40NDcJCToJCTIJCToJCTExODY5CitQTkcuTDIuNDQ4CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjQ0OQkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi40NTAJCToJCTIJCToJCTExODY5CitQTkcuTDIuNDUxCQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjQ1MgkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi40NTMJCToJCTIJCToJCTExODY5CitQTkcuTDIuNDU0CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjQ1NQkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi40NTYJCToJCTIJCToJCTExODY5CitQTkcuTDIuNDU3CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjQ1OAkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi40NTkJCToJCTIJCToJCTExODY5CitQTkcuTDIuNDYwCQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjQ2MQkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi40NjIJCToJCTIJCToJCTExODY5CitQTkcuTDIuNDYzCQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjQ2NAkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi40NjUJCToJCTIJCToJCTExODY5CitQTkcuTDIuNDY2CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjQ2NwkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi40NjgJCToJCTIJCToJCTExODY5CitQTkcuTDIuNDY5CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjQ3MAkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi40NzEJCToJCTIJCToJCTExODY5CitQTkcuTDIuNDcyCQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjQ3MwkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi40NzQJCToJCTIJCToJCTExODY5CitQTkcuTDIuNDc1CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjQ3NgkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi40NzcJCToJCTIJCToJCTExODY5CitQTkcuTDIuNDc4CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjQ3OQkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi40ODAJCToJCTIJCToJCTExODY5CitQTkcuTDIuNDgxCQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjQ4MgkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi40ODMJCToJCTIJCToJCTExODY5CitQTkcuTDIuNDg0CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjQ4NQkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi40ODYJCToJCTIJCToJCTExODY5CitQTkcuTDIuNDg3CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjQ4OAkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi40ODkJCToJCTIJCToJCTExODY5CitQTkcuTDIuNDkwCQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjQ5MQkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi40OTIJCToJCTIJCToJCTExODY5CitQTkcuTDIuNDkzCQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjQ5NAkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi40OTUJCToJCTIJCToJCTExODY5CitQTkcuTDIuNDk2CQk6CQkyCQk6CQkxMTg2OQorQ2VudHJhbCAgCToJMQk6CTE4MzE1MworU2ltYnUgCToJMQk6CTI1ODc3NgorRWFzdCBOZXcgQnJpdGFpbiAJOgkxCToJMjIwMDM1CitFYXN0IFNlcGlrIAk6CTEJOgkzNDE1ODMKK0Vhc3Rlcm4gSGlnaGxhbmRzIAk6CTEJOgk0Mjk0ODAKK0VuZ2EgCToJMQk6CTI4OTI5OQorR3VsZiAJOgkxCToJMTA1MDUwCitNYWRhbmcgCToJMQk6CTM2MjgwNQorTWFudXMgCToJMQk6CTQzNTg5CitNaWxuZSBCYXkgCToJMQk6CTIwOTA1NAorTW9yb2JlIAk6CTEJOgk1MzY5MTcKK05hdGlvbmFsIENhcGl0YWwgRGlzdHJpY3QgCToJMQk6CTI1MjQ2OQorTmV3IElyZWxhbmQgCToJMQk6CTExODE0OAorTm9ydGggU29sb21vbnMgCToJMQk6CTE0MTE2MQorT3JvIChOb3J0aGVybikgCToJMQk6CTEzMjcxNAorU291dGhlcm4gSGlnaGxhbmRzIAk6CTEJOgk1NDQzNTIKK1dlc3QgTmV3IEJyaXRhaW4gCToJMQk6CTE4NDgzOAorV2VzdCBTZXBpayAJOgkxCToJMTg1NzkwCitXZXN0ZXJuIAk6CTEJOgkxNTIwNjcKK1dlc3Rlcm4gSGlnaGxhbmRzIAk6CTEJOgk0MzkwODUKKworCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9QQVBVQU5FV0dVSU5FQV9BUkVBLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL1BBUFVBTkVXR1VJTkVBX0FSRUEudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFkYzgxYWEKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9QQVBVQU5FV0dVSU5FQV9BUkVBLnR4dApAQCAtMCwwICsxLDEwMTMgQEAKK1BhcHVhIE5ldyBHdWluZWEJOgkwCToJNDYyODQwCitQRy1VTkstMQk6CTEJOgk5MzMKK1BHLVVOSy0yCToJMQk6CTkzMworUEctVU5LLTMJOgkxCToJOTMzCitQRy1VTkstNAk6CTEJOgk5MzMKK1BHLVVOSy01CToJMQk6CTkzMworUEctVU5LLTYJOgkxCToJOTMzCitQRy1VTkstNwk6CTEJOgk5MzMKK1BHLVVOSy04CToJMQk6CTkzMworUEctVU5LLTkJOgkxCToJOTMzCitQRy1VTkstMTAJOgkxCToJOTMzCitQRy1VTkstMTEJOgkxCToJOTMzCitQRy1VTkstMTIJOgkxCToJOTMzCitQRy1VTkstMTMJOgkxCToJOTMzCitQRy1VTkstMTQJOgkxCToJOTMzCitQRy1VTkstMTUJOgkxCToJOTMzCitQRy1VTkstMTYJOgkxCToJOTMzCitQRy1VTkstMTcJOgkxCToJOTMzCitQRy1VTkstMTgJOgkxCToJOTMzCitQRy1VTkstMTkJOgkxCToJOTMzCitQRy1VTkstMjAJOgkxCToJOTMzCitQRy1VTkstMjEJOgkxCToJOTMzCitQRy1VTkstMjIJOgkxCToJOTMzCitQRy1VTkstMjMJOgkxCToJOTMzCitQRy1VTkstMjQJOgkxCToJOTMzCitQRy1VTkstMjUJOgkxCToJOTMzCitQRy1VTkstMjYJOgkxCToJOTMzCitQRy1VTkstMjcJOgkxCToJOTMzCitQRy1VTkstMjgJOgkxCToJOTMzCitQRy1VTkstMjkJOgkxCToJOTMzCitQRy1VTkstMzAJOgkxCToJOTMzCitQRy1VTkstMzEJOgkxCToJOTMzCitQRy1VTkstMzIJOgkxCToJOTMzCitQRy1VTkstMzMJOgkxCToJOTMzCitQRy1VTkstMzQJOgkxCToJOTMzCitQRy1VTkstMzUJOgkxCToJOTMzCitQRy1VTkstMzYJOgkxCToJOTMzCitQRy1VTkstMzcJOgkxCToJOTMzCitQRy1VTkstMzgJOgkxCToJOTMzCitQRy1VTkstMzkJOgkxCToJOTMzCitQRy1VTkstNDAJOgkxCToJOTMzCitQRy1VTkstNDEJOgkxCToJOTMzCitQRy1VTkstNDIJOgkxCToJOTMzCitQRy1VTkstNDMJOgkxCToJOTMzCitQRy1VTkstNDQJOgkxCToJOTMzCitQRy1VTkstNDUJOgkxCToJOTMzCitQRy1VTkstNDYJOgkxCToJOTMzCitQRy1VTkstNDcJOgkxCToJOTMzCitQRy1VTkstNDgJOgkxCToJOTMzCitQRy1VTkstNDkJOgkxCToJOTMzCitQRy1VTkstNTAJOgkxCToJOTMzCitQRy1VTkstNTEJOgkxCToJOTMzCitQRy1VTkstNTIJOgkxCToJOTMzCitQRy1VTkstNTMJOgkxCToJOTMzCitQRy1VTkstNTQJOgkxCToJOTMzCitQRy1VTkstNTUJOgkxCToJOTMzCitQRy1VTkstNTYJOgkxCToJOTMzCitQRy1VTkstNTcJOgkxCToJOTMzCitQRy1VTkstNTgJOgkxCToJOTMzCitQRy1VTkstNTkJOgkxCToJOTMzCitQRy1VTkstNjAJOgkxCToJOTMzCitQRy1VTkstNjEJOgkxCToJOTMzCitQRy1VTkstNjIJOgkxCToJOTMzCitQRy1VTkstNjMJOgkxCToJOTMzCitQRy1VTkstNjQJOgkxCToJOTMzCitQRy1VTkstNjUJOgkxCToJOTMzCitQRy1VTkstNjYJOgkxCToJOTMzCitQRy1VTkstNjcJOgkxCToJOTMzCitQRy1VTkstNjgJOgkxCToJOTMzCitQRy1VTkstNjkJOgkxCToJOTMzCitQRy1VTkstNzAJOgkxCToJOTMzCitQRy1VTkstNzEJOgkxCToJOTMzCitQRy1VTkstNzIJOgkxCToJOTMzCitQRy1VTkstNzMJOgkxCToJOTMzCitQRy1VTkstNzQJOgkxCToJOTMzCitQRy1VTkstNzUJOgkxCToJOTMzCitQRy1VTkstNzYJOgkxCToJOTMzCitQRy1VTkstNzcJOgkxCToJOTMzCitQRy1VTkstNzgJOgkxCToJOTMzCitQRy1VTkstNzkJOgkxCToJOTMzCitQRy1VTkstODAJOgkxCToJOTMzCitQRy1VTkstODEJOgkxCToJOTMzCitQRy1VTkstODIJOgkxCToJOTMzCitQRy1VTkstODMJOgkxCToJOTMzCitQRy1VTkstODQJOgkxCToJOTMzCitQRy1VTkstODUJOgkxCToJOTMzCitQRy1VTkstODYJOgkxCToJOTMzCitQRy1VTkstODcJOgkxCToJOTMzCitQRy1VTkstODgJOgkxCToJOTMzCitQRy1VTkstODkJOgkxCToJOTMzCitQRy1VTkstOTAJOgkxCToJOTMzCitQRy1VTkstOTEJOgkxCToJOTMzCitQRy1VTkstOTIJOgkxCToJOTMzCitQRy1VTkstOTMJOgkxCToJOTMzCitQRy1VTkstOTQJOgkxCToJOTMzCitQRy1VTkstOTUJOgkxCToJOTMzCitQRy1VTkstOTYJOgkxCToJOTMzCitQRy1VTkstOTcJOgkxCToJOTMzCitQRy1VTkstOTgJOgkxCToJOTMzCitQRy1VTkstOTkJOgkxCToJOTMzCitQRy1VTkstMTAwCToJMQk6CTkzMworUEctVU5LLTEwMQk6CTEJOgk5MzMKK1BHLVVOSy0xMDIJOgkxCToJOTMzCitQRy1VTkstMTAzCToJMQk6CTkzMworUEctVU5LLTEwNAk6CTEJOgk5MzMKK1BHLVVOSy0xMDUJOgkxCToJOTMzCitQRy1VTkstMTA2CToJMQk6CTkzMworUEctVU5LLTEwNwk6CTEJOgk5MzMKK1BHLVVOSy0xMDgJOgkxCToJOTMzCitQRy1VTkstMTA5CToJMQk6CTkzMworUEctVU5LLTExMAk6CTEJOgk5MzMKK1BHLVVOSy0xMTEJOgkxCToJOTMzCitQRy1VTkstMTEyCToJMQk6CTkzMworUEctVU5LLTExMwk6CTEJOgk5MzMKK1BHLVVOSy0xMTQJOgkxCToJOTMzCitQRy1VTkstMTE1CToJMQk6CTkzMworUEctVU5LLTExNgk6CTEJOgk5MzMKK1BHLVVOSy0xMTcJOgkxCToJOTMzCitQRy1VTkstMTE4CToJMQk6CTkzMworUEctVU5LLTExOQk6CTEJOgk5MzMKK1BHLVVOSy0xMjAJOgkxCToJOTMzCitQRy1VTkstMTIxCToJMQk6CTkzMworUEctVU5LLTEyMgk6CTEJOgk5MzMKK1BHLVVOSy0xMjMJOgkxCToJOTMzCitQRy1VTkstMTI0CToJMQk6CTkzMworUEctVU5LLTEyNQk6CTEJOgk5MzMKK1BHLVVOSy0xMjYJOgkxCToJOTMzCitQRy1VTkstMTI3CToJMQk6CTkzMworUEctVU5LLTEyOAk6CTEJOgk5MzMKK1BHLVVOSy0xMjkJOgkxCToJOTMzCitQRy1VTkstMTMwCToJMQk6CTkzMworUEctVU5LLTEzMQk6CTEJOgk5MzMKK1BHLVVOSy0xMzIJOgkxCToJOTMzCitQRy1VTkstMTMzCToJMQk6CTkzMworUEctVU5LLTEzNAk6CTEJOgk5MzMKK1BHLVVOSy0xMzUJOgkxCToJOTMzCitQRy1VTkstMTM2CToJMQk6CTkzMworUEctVU5LLTEzNwk6CTEJOgk5MzMKK1BHLVVOSy0xMzgJOgkxCToJOTMzCitQRy1VTkstMTM5CToJMQk6CTkzMworUEctVU5LLTE0MAk6CTEJOgk5MzMKK1BHLVVOSy0xNDEJOgkxCToJOTMzCitQRy1VTkstMTQyCToJMQk6CTkzMworUEctVU5LLTE0Mwk6CTEJOgk5MzMKK1BHLVVOSy0xNDQJOgkxCToJOTMzCitQRy1VTkstMTQ1CToJMQk6CTkzMworUEctVU5LLTE0Ngk6CTEJOgk5MzMKK1BHLVVOSy0xNDcJOgkxCToJOTMzCitQRy1VTkstMTQ4CToJMQk6CTkzMworUEctVU5LLTE0OQk6CTEJOgk5MzMKK1BHLVVOSy0xNTAJOgkxCToJOTMzCitQRy1VTkstMTUxCToJMQk6CTkzMworUEctVU5LLTE1Mgk6CTEJOgk5MzMKK1BHLVVOSy0xNTMJOgkxCToJOTMzCitQRy1VTkstMTU0CToJMQk6CTkzMworUEctVU5LLTE1NQk6CTEJOgk5MzMKK1BHLVVOSy0xNTYJOgkxCToJOTMzCitQRy1VTkstMTU3CToJMQk6CTkzMworUEctVU5LLTE1OAk6CTEJOgk5MzMKK1BHLVVOSy0xNTkJOgkxCToJOTMzCitQRy1VTkstMTYwCToJMQk6CTkzMworUEctVU5LLTE2MQk6CTEJOgk5MzMKK1BHLVVOSy0xNjIJOgkxCToJOTMzCitQRy1VTkstMTYzCToJMQk6CTkzMworUEctVU5LLTE2NAk6CTEJOgk5MzMKK1BHLVVOSy0xNjUJOgkxCToJOTMzCitQRy1VTkstMTY2CToJMQk6CTkzMworUEctVU5LLTE2Nwk6CTEJOgk5MzMKK1BHLVVOSy0xNjgJOgkxCToJOTMzCitQRy1VTkstMTY5CToJMQk6CTkzMworUEctVU5LLTE3MAk6CTEJOgk5MzMKK1BHLVVOSy0xNzEJOgkxCToJOTMzCitQRy1VTkstMTcyCToJMQk6CTkzMworUEctVU5LLTE3Mwk6CTEJOgk5MzMKK1BHLVVOSy0xNzQJOgkxCToJOTMzCitQRy1VTkstMTc1CToJMQk6CTkzMworUEctVU5LLTE3Ngk6CTEJOgk5MzMKK1BHLVVOSy0xNzcJOgkxCToJOTMzCitQRy1VTkstMTc4CToJMQk6CTkzMworUEctVU5LLTE3OQk6CTEJOgk5MzMKK1BHLVVOSy0xODAJOgkxCToJOTMzCitQRy1VTkstMTgxCToJMQk6CTkzMworUEctVU5LLTE4Mgk6CTEJOgk5MzMKK1BHLVVOSy0xODMJOgkxCToJOTMzCitQRy1VTkstMTg0CToJMQk6CTkzMworUEctVU5LLTE4NQk6CTEJOgk5MzMKK1BHLVVOSy0xODYJOgkxCToJOTMzCitQRy1VTkstMTg3CToJMQk6CTkzMworUEctVU5LLTE4OAk6CTEJOgk5MzMKK1BHLVVOSy0xODkJOgkxCToJOTMzCitQRy1VTkstMTkwCToJMQk6CTkzMworUEctVU5LLTE5MQk6CTEJOgk5MzMKK1BHLVVOSy0xOTIJOgkxCToJOTMzCitQRy1VTkstMTkzCToJMQk6CTkzMworUEctVU5LLTE5NAk6CTEJOgk5MzMKK1BHLVVOSy0xOTUJOgkxCToJOTMzCitQRy1VTkstMTk2CToJMQk6CTkzMworUEctVU5LLTE5Nwk6CTEJOgk5MzMKK1BHLVVOSy0xOTgJOgkxCToJOTMzCitQRy1VTkstMTk5CToJMQk6CTkzMworUEctVU5LLTIwMAk6CTEJOgk5MzMKK1BHLVVOSy0yMDEJOgkxCToJOTMzCitQRy1VTkstMjAyCToJMQk6CTkzMworUEctVU5LLTIwMwk6CTEJOgk5MzMKK1BHLVVOSy0yMDQJOgkxCToJOTMzCitQRy1VTkstMjA1CToJMQk6CTkzMworUEctVU5LLTIwNgk6CTEJOgk5MzMKK1BHLVVOSy0yMDcJOgkxCToJOTMzCitQRy1VTkstMjA4CToJMQk6CTkzMworUEctVU5LLTIwOQk6CTEJOgk5MzMKK1BHLVVOSy0yMTAJOgkxCToJOTMzCitQRy1VTkstMjExCToJMQk6CTkzMworUEctVU5LLTIxMgk6CTEJOgk5MzMKK1BHLVVOSy0yMTMJOgkxCToJOTMzCitQRy1VTkstMjE0CToJMQk6CTkzMworUEctVU5LLTIxNQk6CTEJOgk5MzMKK1BHLVVOSy0yMTYJOgkxCToJOTMzCitQRy1VTkstMjE3CToJMQk6CTkzMworUEctVU5LLTIxOAk6CTEJOgk5MzMKK1BHLVVOSy0yMTkJOgkxCToJOTMzCitQRy1VTkstMjIwCToJMQk6CTkzMworUEctVU5LLTIyMQk6CTEJOgk5MzMKK1BHLVVOSy0yMjIJOgkxCToJOTMzCitQRy1VTkstMjIzCToJMQk6CTkzMworUEctVU5LLTIyNAk6CTEJOgk5MzMKK1BHLVVOSy0yMjUJOgkxCToJOTMzCitQRy1VTkstMjI2CToJMQk6CTkzMworUEctVU5LLTIyNwk6CTEJOgk5MzMKK1BHLVVOSy0yMjgJOgkxCToJOTMzCitQRy1VTkstMjI5CToJMQk6CTkzMworUEctVU5LLTIzMAk6CTEJOgk5MzMKK1BHLVVOSy0yMzEJOgkxCToJOTMzCitQRy1VTkstMjMyCToJMQk6CTkzMworUEctVU5LLTIzMwk6CTEJOgk5MzMKK1BHLVVOSy0yMzQJOgkxCToJOTMzCitQRy1VTkstMjM1CToJMQk6CTkzMworUEctVU5LLTIzNgk6CTEJOgk5MzMKK1BHLVVOSy0yMzcJOgkxCToJOTMzCitQRy1VTkstMjM4CToJMQk6CTkzMworUEctVU5LLTIzOQk6CTEJOgk5MzMKK1BHLVVOSy0yNDAJOgkxCToJOTMzCitQRy1VTkstMjQxCToJMQk6CTkzMworUEctVU5LLTI0Mgk6CTEJOgk5MzMKK1BHLVVOSy0yNDMJOgkxCToJOTMzCitQRy1VTkstMjQ0CToJMQk6CTkzMworUEctVU5LLTI0NQk6CTEJOgk5MzMKK1BHLVVOSy0yNDYJOgkxCToJOTMzCitQRy1VTkstMjQ3CToJMQk6CTkzMworUEctVU5LLTI0OAk6CTEJOgk5MzMKK1BHLVVOSy0yNDkJOgkxCToJOTMzCitQRy1VTkstMjUwCToJMQk6CTkzMworUEctVU5LLTI1MQk6CTEJOgk5MzMKK1BHLVVOSy0yNTIJOgkxCToJOTMzCitQRy1VTkstMjUzCToJMQk6CTkzMworUEctVU5LLTI1NAk6CTEJOgk5MzMKK1BHLVVOSy0yNTUJOgkxCToJOTMzCitQRy1VTkstMjU2CToJMQk6CTkzMworUEctVU5LLTI1Nwk6CTEJOgk5MzMKK1BHLVVOSy0yNTgJOgkxCToJOTMzCitQRy1VTkstMjU5CToJMQk6CTkzMworUEctVU5LLTI2MAk6CTEJOgk5MzMKK1BHLVVOSy0yNjEJOgkxCToJOTMzCitQRy1VTkstMjYyCToJMQk6CTkzMworUEctVU5LLTI2Mwk6CTEJOgk5MzMKK1BHLVVOSy0yNjQJOgkxCToJOTMzCitQRy1VTkstMjY1CToJMQk6CTkzMworUEctVU5LLTI2Ngk6CTEJOgk5MzMKK1BHLVVOSy0yNjcJOgkxCToJOTMzCitQRy1VTkstMjY4CToJMQk6CTkzMworUEctVU5LLTI2OQk6CTEJOgk5MzMKK1BHLVVOSy0yNzAJOgkxCToJOTMzCitQRy1VTkstMjcxCToJMQk6CTkzMworUEctVU5LLTI3Mgk6CTEJOgk5MzMKK1BHLVVOSy0yNzMJOgkxCToJOTMzCitQRy1VTkstMjc0CToJMQk6CTkzMworUEctVU5LLTI3NQk6CTEJOgk5MzMKK1BHLVVOSy0yNzYJOgkxCToJOTMzCitQRy1VTkstMjc3CToJMQk6CTkzMworUEctVU5LLTI3OAk6CTEJOgk5MzMKK1BHLVVOSy0yNzkJOgkxCToJOTMzCitQRy1VTkstMjgwCToJMQk6CTkzMworUEctVU5LLTI4MQk6CTEJOgk5MzMKK1BHLVVOSy0yODIJOgkxCToJOTMzCitQRy1VTkstMjgzCToJMQk6CTkzMworUEctVU5LLTI4NAk6CTEJOgk5MzMKK1BHLVVOSy0yODUJOgkxCToJOTMzCitQRy1VTkstMjg2CToJMQk6CTkzMworUEctVU5LLTI4Nwk6CTEJOgk5MzMKK1BHLVVOSy0yODgJOgkxCToJOTMzCitQRy1VTkstMjg5CToJMQk6CTkzMworUEctVU5LLTI5MAk6CTEJOgk5MzMKK1BHLVVOSy0yOTEJOgkxCToJOTMzCitQRy1VTkstMjkyCToJMQk6CTkzMworUEctVU5LLTI5Mwk6CTEJOgk5MzMKK1BHLVVOSy0yOTQJOgkxCToJOTMzCitQRy1VTkstMjk1CToJMQk6CTkzMworUEctVU5LLTI5Ngk6CTEJOgk5MzMKK1BHLVVOSy0yOTcJOgkxCToJOTMzCitQRy1VTkstMjk4CToJMQk6CTkzMworUEctVU5LLTI5OQk6CTEJOgk5MzMKK1BHLVVOSy0zMDAJOgkxCToJOTMzCitQRy1VTkstMzAxCToJMQk6CTkzMworUEctVU5LLTMwMgk6CTEJOgk5MzMKK1BHLVVOSy0zMDMJOgkxCToJOTMzCitQRy1VTkstMzA0CToJMQk6CTkzMworUEctVU5LLTMwNQk6CTEJOgk5MzMKK1BHLVVOSy0zMDYJOgkxCToJOTMzCitQRy1VTkstMzA3CToJMQk6CTkzMworUEctVU5LLTMwOAk6CTEJOgk5MzMKK1BHLVVOSy0zMDkJOgkxCToJOTMzCitQRy1VTkstMzEwCToJMQk6CTkzMworUEctVU5LLTMxMQk6CTEJOgk5MzMKK1BHLVVOSy0zMTIJOgkxCToJOTMzCitQRy1VTkstMzEzCToJMQk6CTkzMworUEctVU5LLTMxNAk6CTEJOgk5MzMKK1BHLVVOSy0zMTUJOgkxCToJOTMzCitQRy1VTkstMzE2CToJMQk6CTkzMworUEctVU5LLTMxNwk6CTEJOgk5MzMKK1BHLVVOSy0zMTgJOgkxCToJOTMzCitQRy1VTkstMzE5CToJMQk6CTkzMworUEctVU5LLTMyMAk6CTEJOgk5MzMKK1BHLVVOSy0zMjEJOgkxCToJOTMzCitQRy1VTkstMzIyCToJMQk6CTkzMworUEctVU5LLTMyMwk6CTEJOgk5MzMKK1BHLVVOSy0zMjQJOgkxCToJOTMzCitQRy1VTkstMzI1CToJMQk6CTkzMworUEctVU5LLTMyNgk6CTEJOgk5MzMKK1BHLVVOSy0zMjcJOgkxCToJOTMzCitQRy1VTkstMzI4CToJMQk6CTkzMworUEctVU5LLTMyOQk6CTEJOgk5MzMKK1BHLVVOSy0zMzAJOgkxCToJOTMzCitQRy1VTkstMzMxCToJMQk6CTkzMworUEctVU5LLTMzMgk6CTEJOgk5MzMKK1BHLVVOSy0zMzMJOgkxCToJOTMzCitQRy1VTkstMzM0CToJMQk6CTkzMworUEctVU5LLTMzNQk6CTEJOgk5MzMKK1BHLVVOSy0zMzYJOgkxCToJOTMzCitQRy1VTkstMzM3CToJMQk6CTkzMworUEctVU5LLTMzOAk6CTEJOgk5MzMKK1BHLVVOSy0zMzkJOgkxCToJOTMzCitQRy1VTkstMzQwCToJMQk6CTkzMworUEctVU5LLTM0MQk6CTEJOgk5MzMKK1BHLVVOSy0zNDIJOgkxCToJOTMzCitQRy1VTkstMzQzCToJMQk6CTkzMworUEctVU5LLTM0NAk6CTEJOgk5MzMKK1BHLVVOSy0zNDUJOgkxCToJOTMzCitQRy1VTkstMzQ2CToJMQk6CTkzMworUEctVU5LLTM0Nwk6CTEJOgk5MzMKK1BHLVVOSy0zNDgJOgkxCToJOTMzCitQRy1VTkstMzQ5CToJMQk6CTkzMworUEctVU5LLTM1MAk6CTEJOgk5MzMKK1BHLVVOSy0zNTEJOgkxCToJOTMzCitQRy1VTkstMzUyCToJMQk6CTkzMworUEctVU5LLTM1Mwk6CTEJOgk5MzMKK1BHLVVOSy0zNTQJOgkxCToJOTMzCitQRy1VTkstMzU1CToJMQk6CTkzMworUEctVU5LLTM1Ngk6CTEJOgk5MzMKK1BHLVVOSy0zNTcJOgkxCToJOTMzCitQRy1VTkstMzU4CToJMQk6CTkzMworUEctVU5LLTM1OQk6CTEJOgk5MzMKK1BHLVVOSy0zNjAJOgkxCToJOTMzCitQRy1VTkstMzYxCToJMQk6CTkzMworUEctVU5LLTM2Mgk6CTEJOgk5MzMKK1BHLVVOSy0zNjMJOgkxCToJOTMzCitQRy1VTkstMzY0CToJMQk6CTkzMworUEctVU5LLTM2NQk6CTEJOgk5MzMKK1BHLVVOSy0zNjYJOgkxCToJOTMzCitQRy1VTkstMzY3CToJMQk6CTkzMworUEctVU5LLTM2OAk6CTEJOgk5MzMKK1BHLVVOSy0zNjkJOgkxCToJOTMzCitQRy1VTkstMzcwCToJMQk6CTkzMworUEctVU5LLTM3MQk6CTEJOgk5MzMKK1BHLVVOSy0zNzIJOgkxCToJOTMzCitQRy1VTkstMzczCToJMQk6CTkzMworUEctVU5LLTM3NAk6CTEJOgk5MzMKK1BHLVVOSy0zNzUJOgkxCToJOTMzCitQRy1VTkstMzc2CToJMQk6CTkzMworUEctVU5LLTM3Nwk6CTEJOgk5MzMKK1BHLVVOSy0zNzgJOgkxCToJOTMzCitQRy1VTkstMzc5CToJMQk6CTkzMworUEctVU5LLTM4MAk6CTEJOgk5MzMKK1BHLVVOSy0zODEJOgkxCToJOTMzCitQRy1VTkstMzgyCToJMQk6CTkzMworUEctVU5LLTM4Mwk6CTEJOgk5MzMKK1BHLVVOSy0zODQJOgkxCToJOTMzCitQRy1VTkstMzg1CToJMQk6CTkzMworUEctVU5LLTM4Ngk6CTEJOgk5MzMKK1BHLVVOSy0zODcJOgkxCToJOTMzCitQRy1VTkstMzg4CToJMQk6CTkzMworUEctVU5LLTM4OQk6CTEJOgk5MzMKK1BHLVVOSy0zOTAJOgkxCToJOTMzCitQRy1VTkstMzkxCToJMQk6CTkzMworUEctVU5LLTM5Mgk6CTEJOgk5MzMKK1BHLVVOSy0zOTMJOgkxCToJOTMzCitQRy1VTkstMzk0CToJMQk6CTkzMworUEctVU5LLTM5NQk6CTEJOgk5MzMKK1BHLVVOSy0zOTYJOgkxCToJOTMzCitQRy1VTkstMzk3CToJMQk6CTkzMworUEctVU5LLTM5OAk6CTEJOgk5MzMKK1BHLVVOSy0zOTkJOgkxCToJOTMzCitQRy1VTkstNDAwCToJMQk6CTkzMworUEctVU5LLTQwMQk6CTEJOgk5MzMKK1BHLVVOSy00MDIJOgkxCToJOTMzCitQRy1VTkstNDAzCToJMQk6CTkzMworUEctVU5LLTQwNAk6CTEJOgk5MzMKK1BHLVVOSy00MDUJOgkxCToJOTMzCitQRy1VTkstNDA2CToJMQk6CTkzMworUEctVU5LLTQwNwk6CTEJOgk5MzMKK1BHLVVOSy00MDgJOgkxCToJOTMzCitQRy1VTkstNDA5CToJMQk6CTkzMworUEctVU5LLTQxMAk6CTEJOgk5MzMKK1BHLVVOSy00MTEJOgkxCToJOTMzCitQRy1VTkstNDEyCToJMQk6CTkzMworUEctVU5LLTQxMwk6CTEJOgk5MzMKK1BHLVVOSy00MTQJOgkxCToJOTMzCitQRy1VTkstNDE1CToJMQk6CTkzMworUEctVU5LLTQxNgk6CTEJOgk5MzMKK1BHLVVOSy00MTcJOgkxCToJOTMzCitQRy1VTkstNDE4CToJMQk6CTkzMworUEctVU5LLTQxOQk6CTEJOgk5MzMKK1BHLVVOSy00MjAJOgkxCToJOTMzCitQRy1VTkstNDIxCToJMQk6CTkzMworUEctVU5LLTQyMgk6CTEJOgk5MzMKK1BHLVVOSy00MjMJOgkxCToJOTMzCitQRy1VTkstNDI0CToJMQk6CTkzMworUEctVU5LLTQyNQk6CTEJOgk5MzMKK1BHLVVOSy00MjYJOgkxCToJOTMzCitQRy1VTkstNDI3CToJMQk6CTkzMworUEctVU5LLTQyOAk6CTEJOgk5MzMKK1BHLVVOSy00MjkJOgkxCToJOTMzCitQRy1VTkstNDMwCToJMQk6CTkzMworUEctVU5LLTQzMQk6CTEJOgk5MzMKK1BHLVVOSy00MzIJOgkxCToJOTMzCitQRy1VTkstNDMzCToJMQk6CTkzMworUEctVU5LLTQzNAk6CTEJOgk5MzMKK1BHLVVOSy00MzUJOgkxCToJOTMzCitQRy1VTkstNDM2CToJMQk6CTkzMworUEctVU5LLTQzNwk6CTEJOgk5MzMKK1BHLVVOSy00MzgJOgkxCToJOTMzCitQRy1VTkstNDM5CToJMQk6CTkzMworUEctVU5LLTQ0MAk6CTEJOgk5MzMKK1BHLVVOSy00NDEJOgkxCToJOTMzCitQRy1VTkstNDQyCToJMQk6CTkzMworUEctVU5LLTQ0Mwk6CTEJOgk5MzMKK1BHLVVOSy00NDQJOgkxCToJOTMzCitQRy1VTkstNDQ1CToJMQk6CTkzMworUEctVU5LLTQ0Ngk6CTEJOgk5MzMKK1BHLVVOSy00NDcJOgkxCToJOTMzCitQRy1VTkstNDQ4CToJMQk6CTkzMworUEctVU5LLTQ0OQk6CTEJOgk5MzMKK1BHLVVOSy00NTAJOgkxCToJOTMzCitQRy1VTkstNDUxCToJMQk6CTkzMworUEctVU5LLTQ1Mgk6CTEJOgk5MzMKK1BHLVVOSy00NTMJOgkxCToJOTMzCitQRy1VTkstNDU0CToJMQk6CTkzMworUEctVU5LLTQ1NQk6CTEJOgk5MzMKK1BHLVVOSy00NTYJOgkxCToJOTMzCitQRy1VTkstNDU3CToJMQk6CTkzMworUEctVU5LLTQ1OAk6CTEJOgk5MzMKK1BHLVVOSy00NTkJOgkxCToJOTMzCitQRy1VTkstNDYwCToJMQk6CTkzMworUEctVU5LLTQ2MQk6CTEJOgk5MzMKK1BHLVVOSy00NjIJOgkxCToJOTMzCitQRy1VTkstNDYzCToJMQk6CTkzMworUEctVU5LLTQ2NAk6CTEJOgk5MzMKK1BHLVVOSy00NjUJOgkxCToJOTMzCitQRy1VTkstNDY2CToJMQk6CTkzMworUEctVU5LLTQ2Nwk6CTEJOgk5MzMKK1BHLVVOSy00NjgJOgkxCToJOTMzCitQRy1VTkstNDY5CToJMQk6CTkzMworUEctVU5LLTQ3MAk6CTEJOgk5MzMKK1BHLVVOSy00NzEJOgkxCToJOTMzCitQRy1VTkstNDcyCToJMQk6CTkzMworUEctVU5LLTQ3Mwk6CTEJOgk5MzMKK1BHLVVOSy00NzQJOgkxCToJOTMzCitQRy1VTkstNDc1CToJMQk6CTkzMworUEctVU5LLTQ3Ngk6CTEJOgk5MzMKK1BHLVVOSy00NzcJOgkxCToJOTMzCitQRy1VTkstNDc4CToJMQk6CTkzMworUEctVU5LLTQ3OQk6CTEJOgk5MzMKK1BHLVVOSy00ODAJOgkxCToJOTMzCitQRy1VTkstNDgxCToJMQk6CTkzMworUEctVU5LLTQ4Mgk6CTEJOgk5MzMKK1BHLVVOSy00ODMJOgkxCToJOTMzCitQRy1VTkstNDg0CToJMQk6CTkzMworUEctVU5LLTQ4NQk6CTEJOgk5MzMKK1BHLVVOSy00ODYJOgkxCToJOTMzCitQRy1VTkstNDg3CToJMQk6CTkzMworUEctVU5LLTQ4OAk6CTEJOgk5MzMKK1BHLVVOSy00ODkJOgkxCToJOTMzCitQRy1VTkstNDkwCToJMQk6CTkzMworUEctVU5LLTQ5MQk6CTEJOgk5MzMKK1BHLVVOSy00OTIJOgkxCToJOTMzCitQRy1VTkstNDkzCToJMQk6CTkzMworUEctVU5LLTQ5NAk6CTEJOgk5MzMKK1BHLVVOSy00OTUJOgkxCToJOTMzCitQRy1VTkstNDk2CToJMQk6CTkzMworUE5HLkwyLjEJCToJCTIJCToJCTkzMworUE5HLkwyLjIJCToJCTIJCToJCTkzMworUE5HLkwyLjMJCToJCTIJCToJCTkzMworUE5HLkwyLjQJCToJCTIJCToJCTkzMworUE5HLkwyLjUJCToJCTIJCToJCTkzMworUE5HLkwyLjYJCToJCTIJCToJCTkzMworUE5HLkwyLjcJCToJCTIJCToJCTkzMworUE5HLkwyLjgJCToJCTIJCToJCTkzMworUE5HLkwyLjkJCToJCTIJCToJCTkzMworUE5HLkwyLjEwCQk6CQkyCQk6CQk5MzMKK1BORy5MMi4xMQkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMTIJCToJCTIJCToJCTkzMworUE5HLkwyLjEzCQk6CQkyCQk6CQk5MzMKK1BORy5MMi4xNAkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMTUJCToJCTIJCToJCTkzMworUE5HLkwyLjE2CQk6CQkyCQk6CQk5MzMKK1BORy5MMi4xNwkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMTgJCToJCTIJCToJCTkzMworUE5HLkwyLjE5CQk6CQkyCQk6CQk5MzMKK1BORy5MMi4yMAkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMjEJCToJCTIJCToJCTkzMworUE5HLkwyLjIyCQk6CQkyCQk6CQk5MzMKK1BORy5MMi4yMwkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMjQJCToJCTIJCToJCTkzMworUE5HLkwyLjI1CQk6CQkyCQk6CQk5MzMKK1BORy5MMi4yNgkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMjcJCToJCTIJCToJCTkzMworUE5HLkwyLjI4CQk6CQkyCQk6CQk5MzMKK1BORy5MMi4yOQkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMzAJCToJCTIJCToJCTkzMworUE5HLkwyLjMxCQk6CQkyCQk6CQk5MzMKK1BORy5MMi4zMgkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMzMJCToJCTIJCToJCTkzMworUE5HLkwyLjM0CQk6CQkyCQk6CQk5MzMKK1BORy5MMi4zNQkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMzYJCToJCTIJCToJCTkzMworUE5HLkwyLjM3CQk6CQkyCQk6CQk5MzMKK1BORy5MMi4zOAkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMzkJCToJCTIJCToJCTkzMworUE5HLkwyLjQwCQk6CQkyCQk6CQk5MzMKK1BORy5MMi40MQkJOgkJMgkJOgkJOTMzCitQTkcuTDIuNDIJCToJCTIJCToJCTkzMworUE5HLkwyLjQzCQk6CQkyCQk6CQk5MzMKK1BORy5MMi40NAkJOgkJMgkJOgkJOTMzCitQTkcuTDIuNDUJCToJCTIJCToJCTkzMworUE5HLkwyLjQ2CQk6CQkyCQk6CQk5MzMKK1BORy5MMi40NwkJOgkJMgkJOgkJOTMzCitQTkcuTDIuNDgJCToJCTIJCToJCTkzMworUE5HLkwyLjQ5CQk6CQkyCQk6CQk5MzMKK1BORy5MMi41MAkJOgkJMgkJOgkJOTMzCitQTkcuTDIuNTEJCToJCTIJCToJCTkzMworUE5HLkwyLjUyCQk6CQkyCQk6CQk5MzMKK1BORy5MMi41MwkJOgkJMgkJOgkJOTMzCitQTkcuTDIuNTQJCToJCTIJCToJCTkzMworUE5HLkwyLjU1CQk6CQkyCQk6CQk5MzMKK1BORy5MMi41NgkJOgkJMgkJOgkJOTMzCitQTkcuTDIuNTcJCToJCTIJCToJCTkzMworUE5HLkwyLjU4CQk6CQkyCQk6CQk5MzMKK1BORy5MMi41OQkJOgkJMgkJOgkJOTMzCitQTkcuTDIuNjAJCToJCTIJCToJCTkzMworUE5HLkwyLjYxCQk6CQkyCQk6CQk5MzMKK1BORy5MMi42MgkJOgkJMgkJOgkJOTMzCitQTkcuTDIuNjMJCToJCTIJCToJCTkzMworUE5HLkwyLjY0CQk6CQkyCQk6CQk5MzMKK1BORy5MMi42NQkJOgkJMgkJOgkJOTMzCitQTkcuTDIuNjYJCToJCTIJCToJCTkzMworUE5HLkwyLjY3CQk6CQkyCQk6CQk5MzMKK1BORy5MMi42OAkJOgkJMgkJOgkJOTMzCitQTkcuTDIuNjkJCToJCTIJCToJCTkzMworUE5HLkwyLjcwCQk6CQkyCQk6CQk5MzMKK1BORy5MMi43MQkJOgkJMgkJOgkJOTMzCitQTkcuTDIuNzIJCToJCTIJCToJCTkzMworUE5HLkwyLjczCQk6CQkyCQk6CQk5MzMKK1BORy5MMi43NAkJOgkJMgkJOgkJOTMzCitQTkcuTDIuNzUJCToJCTIJCToJCTkzMworUE5HLkwyLjc2CQk6CQkyCQk6CQk5MzMKK1BORy5MMi43NwkJOgkJMgkJOgkJOTMzCitQTkcuTDIuNzgJCToJCTIJCToJCTkzMworUE5HLkwyLjc5CQk6CQkyCQk6CQk5MzMKK1BORy5MMi44MAkJOgkJMgkJOgkJOTMzCitQTkcuTDIuODEJCToJCTIJCToJCTkzMworUE5HLkwyLjgyCQk6CQkyCQk6CQk5MzMKK1BORy5MMi44MwkJOgkJMgkJOgkJOTMzCitQTkcuTDIuODQJCToJCTIJCToJCTkzMworUE5HLkwyLjg1CQk6CQkyCQk6CQk5MzMKK1BORy5MMi44NgkJOgkJMgkJOgkJOTMzCitQTkcuTDIuODcJCToJCTIJCToJCTkzMworUE5HLkwyLjg4CQk6CQkyCQk6CQk5MzMKK1BORy5MMi44OQkJOgkJMgkJOgkJOTMzCitQTkcuTDIuOTAJCToJCTIJCToJCTkzMworUE5HLkwyLjkxCQk6CQkyCQk6CQk5MzMKK1BORy5MMi45MgkJOgkJMgkJOgkJOTMzCitQTkcuTDIuOTMJCToJCTIJCToJCTkzMworUE5HLkwyLjk0CQk6CQkyCQk6CQk5MzMKK1BORy5MMi45NQkJOgkJMgkJOgkJOTMzCitQTkcuTDIuOTYJCToJCTIJCToJCTkzMworUE5HLkwyLjk3CQk6CQkyCQk6CQk5MzMKK1BORy5MMi45OAkJOgkJMgkJOgkJOTMzCitQTkcuTDIuOTkJCToJCTIJCToJCTkzMworUE5HLkwyLjEwMAkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMTAxCQk6CQkyCQk6CQk5MzMKK1BORy5MMi4xMDIJCToJCTIJCToJCTkzMworUE5HLkwyLjEwMwkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMTA0CQk6CQkyCQk6CQk5MzMKK1BORy5MMi4xMDUJCToJCTIJCToJCTkzMworUE5HLkwyLjEwNgkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMTA3CQk6CQkyCQk6CQk5MzMKK1BORy5MMi4xMDgJCToJCTIJCToJCTkzMworUE5HLkwyLjEwOQkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMTEwCQk6CQkyCQk6CQk5MzMKK1BORy5MMi4xMTEJCToJCTIJCToJCTkzMworUE5HLkwyLjExMgkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMTEzCQk6CQkyCQk6CQk5MzMKK1BORy5MMi4xMTQJCToJCTIJCToJCTkzMworUE5HLkwyLjExNQkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMTE2CQk6CQkyCQk6CQk5MzMKK1BORy5MMi4xMTcJCToJCTIJCToJCTkzMworUE5HLkwyLjExOAkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMTE5CQk6CQkyCQk6CQk5MzMKK1BORy5MMi4xMjAJCToJCTIJCToJCTkzMworUE5HLkwyLjEyMQkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMTIyCQk6CQkyCQk6CQk5MzMKK1BORy5MMi4xMjMJCToJCTIJCToJCTkzMworUE5HLkwyLjEyNAkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMTI1CQk6CQkyCQk6CQk5MzMKK1BORy5MMi4xMjYJCToJCTIJCToJCTkzMworUE5HLkwyLjEyNwkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMTI4CQk6CQkyCQk6CQk5MzMKK1BORy5MMi4xMjkJCToJCTIJCToJCTkzMworUE5HLkwyLjEzMAkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMTMxCQk6CQkyCQk6CQk5MzMKK1BORy5MMi4xMzIJCToJCTIJCToJCTkzMworUE5HLkwyLjEzMwkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMTM0CQk6CQkyCQk6CQk5MzMKK1BORy5MMi4xMzUJCToJCTIJCToJCTkzMworUE5HLkwyLjEzNgkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMTM3CQk6CQkyCQk6CQk5MzMKK1BORy5MMi4xMzgJCToJCTIJCToJCTkzMworUE5HLkwyLjEzOQkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMTQwCQk6CQkyCQk6CQk5MzMKK1BORy5MMi4xNDEJCToJCTIJCToJCTkzMworUE5HLkwyLjE0MgkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMTQzCQk6CQkyCQk6CQk5MzMKK1BORy5MMi4xNDQJCToJCTIJCToJCTkzMworUE5HLkwyLjE0NQkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMTQ2CQk6CQkyCQk6CQk5MzMKK1BORy5MMi4xNDcJCToJCTIJCToJCTkzMworUE5HLkwyLjE0OAkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMTQ5CQk6CQkyCQk6CQk5MzMKK1BORy5MMi4xNTAJCToJCTIJCToJCTkzMworUE5HLkwyLjE1MQkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMTUyCQk6CQkyCQk6CQk5MzMKK1BORy5MMi4xNTMJCToJCTIJCToJCTkzMworUE5HLkwyLjE1NAkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMTU1CQk6CQkyCQk6CQk5MzMKK1BORy5MMi4xNTYJCToJCTIJCToJCTkzMworUE5HLkwyLjE1NwkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMTU4CQk6CQkyCQk6CQk5MzMKK1BORy5MMi4xNTkJCToJCTIJCToJCTkzMworUE5HLkwyLjE2MAkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMTYxCQk6CQkyCQk6CQk5MzMKK1BORy5MMi4xNjIJCToJCTIJCToJCTkzMworUE5HLkwyLjE2MwkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMTY0CQk6CQkyCQk6CQk5MzMKK1BORy5MMi4xNjUJCToJCTIJCToJCTkzMworUE5HLkwyLjE2NgkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMTY3CQk6CQkyCQk6CQk5MzMKK1BORy5MMi4xNjgJCToJCTIJCToJCTkzMworUE5HLkwyLjE2OQkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMTcwCQk6CQkyCQk6CQk5MzMKK1BORy5MMi4xNzEJCToJCTIJCToJCTkzMworUE5HLkwyLjE3MgkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMTczCQk6CQkyCQk6CQk5MzMKK1BORy5MMi4xNzQJCToJCTIJCToJCTkzMworUE5HLkwyLjE3NQkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMTc2CQk6CQkyCQk6CQk5MzMKK1BORy5MMi4xNzcJCToJCTIJCToJCTkzMworUE5HLkwyLjE3OAkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMTc5CQk6CQkyCQk6CQk5MzMKK1BORy5MMi4xODAJCToJCTIJCToJCTkzMworUE5HLkwyLjE4MQkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMTgyCQk6CQkyCQk6CQk5MzMKK1BORy5MMi4xODMJCToJCTIJCToJCTkzMworUE5HLkwyLjE4NAkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMTg1CQk6CQkyCQk6CQk5MzMKK1BORy5MMi4xODYJCToJCTIJCToJCTkzMworUE5HLkwyLjE4NwkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMTg4CQk6CQkyCQk6CQk5MzMKK1BORy5MMi4xODkJCToJCTIJCToJCTkzMworUE5HLkwyLjE5MAkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMTkxCQk6CQkyCQk6CQk5MzMKK1BORy5MMi4xOTIJCToJCTIJCToJCTkzMworUE5HLkwyLjE5MwkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMTk0CQk6CQkyCQk6CQk5MzMKK1BORy5MMi4xOTUJCToJCTIJCToJCTkzMworUE5HLkwyLjE5NgkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMTk3CQk6CQkyCQk6CQk5MzMKK1BORy5MMi4xOTgJCToJCTIJCToJCTkzMworUE5HLkwyLjE5OQkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMjAwCQk6CQkyCQk6CQk5MzMKK1BORy5MMi4yMDEJCToJCTIJCToJCTkzMworUE5HLkwyLjIwMgkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMjAzCQk6CQkyCQk6CQk5MzMKK1BORy5MMi4yMDQJCToJCTIJCToJCTkzMworUE5HLkwyLjIwNQkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMjA2CQk6CQkyCQk6CQk5MzMKK1BORy5MMi4yMDcJCToJCTIJCToJCTkzMworUE5HLkwyLjIwOAkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMjA5CQk6CQkyCQk6CQk5MzMKK1BORy5MMi4yMTAJCToJCTIJCToJCTkzMworUE5HLkwyLjIxMQkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMjEyCQk6CQkyCQk6CQk5MzMKK1BORy5MMi4yMTMJCToJCTIJCToJCTkzMworUE5HLkwyLjIxNAkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMjE1CQk6CQkyCQk6CQk5MzMKK1BORy5MMi4yMTYJCToJCTIJCToJCTkzMworUE5HLkwyLjIxNwkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMjE4CQk6CQkyCQk6CQk5MzMKK1BORy5MMi4yMTkJCToJCTIJCToJCTkzMworUE5HLkwyLjIyMAkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMjIxCQk6CQkyCQk6CQk5MzMKK1BORy5MMi4yMjIJCToJCTIJCToJCTkzMworUE5HLkwyLjIyMwkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMjI0CQk6CQkyCQk6CQk5MzMKK1BORy5MMi4yMjUJCToJCTIJCToJCTkzMworUE5HLkwyLjIyNgkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMjI3CQk6CQkyCQk6CQk5MzMKK1BORy5MMi4yMjgJCToJCTIJCToJCTkzMworUE5HLkwyLjIyOQkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMjMwCQk6CQkyCQk6CQk5MzMKK1BORy5MMi4yMzEJCToJCTIJCToJCTkzMworUE5HLkwyLjIzMgkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMjMzCQk6CQkyCQk6CQk5MzMKK1BORy5MMi4yMzQJCToJCTIJCToJCTkzMworUE5HLkwyLjIzNQkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMjM2CQk6CQkyCQk6CQk5MzMKK1BORy5MMi4yMzcJCToJCTIJCToJCTkzMworUE5HLkwyLjIzOAkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMjM5CQk6CQkyCQk6CQk5MzMKK1BORy5MMi4yNDAJCToJCTIJCToJCTkzMworUE5HLkwyLjI0MQkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMjQyCQk6CQkyCQk6CQk5MzMKK1BORy5MMi4yNDMJCToJCTIJCToJCTkzMworUE5HLkwyLjI0NAkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMjQ1CQk6CQkyCQk6CQk5MzMKK1BORy5MMi4yNDYJCToJCTIJCToJCTkzMworUE5HLkwyLjI0NwkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMjQ4CQk6CQkyCQk6CQk5MzMKK1BORy5MMi4yNDkJCToJCTIJCToJCTkzMworUE5HLkwyLjI1MAkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMjUxCQk6CQkyCQk6CQk5MzMKK1BORy5MMi4yNTIJCToJCTIJCToJCTkzMworUE5HLkwyLjI1MwkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMjU0CQk6CQkyCQk6CQk5MzMKK1BORy5MMi4yNTUJCToJCTIJCToJCTkzMworUE5HLkwyLjI1NgkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMjU3CQk6CQkyCQk6CQk5MzMKK1BORy5MMi4yNTgJCToJCTIJCToJCTkzMworUE5HLkwyLjI1OQkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMjYwCQk6CQkyCQk6CQk5MzMKK1BORy5MMi4yNjEJCToJCTIJCToJCTkzMworUE5HLkwyLjI2MgkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMjYzCQk6CQkyCQk6CQk5MzMKK1BORy5MMi4yNjQJCToJCTIJCToJCTkzMworUE5HLkwyLjI2NQkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMjY2CQk6CQkyCQk6CQk5MzMKK1BORy5MMi4yNjcJCToJCTIJCToJCTkzMworUE5HLkwyLjI2OAkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMjY5CQk6CQkyCQk6CQk5MzMKK1BORy5MMi4yNzAJCToJCTIJCToJCTkzMworUE5HLkwyLjI3MQkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMjcyCQk6CQkyCQk6CQk5MzMKK1BORy5MMi4yNzMJCToJCTIJCToJCTkzMworUE5HLkwyLjI3NAkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMjc1CQk6CQkyCQk6CQk5MzMKK1BORy5MMi4yNzYJCToJCTIJCToJCTkzMworUE5HLkwyLjI3NwkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMjc4CQk6CQkyCQk6CQk5MzMKK1BORy5MMi4yNzkJCToJCTIJCToJCTkzMworUE5HLkwyLjI4MAkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMjgxCQk6CQkyCQk6CQk5MzMKK1BORy5MMi4yODIJCToJCTIJCToJCTkzMworUE5HLkwyLjI4MwkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMjg0CQk6CQkyCQk6CQk5MzMKK1BORy5MMi4yODUJCToJCTIJCToJCTkzMworUE5HLkwyLjI4NgkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMjg3CQk6CQkyCQk6CQk5MzMKK1BORy5MMi4yODgJCToJCTIJCToJCTkzMworUE5HLkwyLjI4OQkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMjkwCQk6CQkyCQk6CQk5MzMKK1BORy5MMi4yOTEJCToJCTIJCToJCTkzMworUE5HLkwyLjI5MgkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMjkzCQk6CQkyCQk6CQk5MzMKK1BORy5MMi4yOTQJCToJCTIJCToJCTkzMworUE5HLkwyLjI5NQkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMjk2CQk6CQkyCQk6CQk5MzMKK1BORy5MMi4yOTcJCToJCTIJCToJCTkzMworUE5HLkwyLjI5OAkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMjk5CQk6CQkyCQk6CQk5MzMKK1BORy5MMi4zMDAJCToJCTIJCToJCTkzMworUE5HLkwyLjMwMQkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMzAyCQk6CQkyCQk6CQk5MzMKK1BORy5MMi4zMDMJCToJCTIJCToJCTkzMworUE5HLkwyLjMwNAkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMzA1CQk6CQkyCQk6CQk5MzMKK1BORy5MMi4zMDYJCToJCTIJCToJCTkzMworUE5HLkwyLjMwNwkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMzA4CQk6CQkyCQk6CQk5MzMKK1BORy5MMi4zMDkJCToJCTIJCToJCTkzMworUE5HLkwyLjMxMAkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMzExCQk6CQkyCQk6CQk5MzMKK1BORy5MMi4zMTIJCToJCTIJCToJCTkzMworUE5HLkwyLjMxMwkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMzE0CQk6CQkyCQk6CQk5MzMKK1BORy5MMi4zMTUJCToJCTIJCToJCTkzMworUE5HLkwyLjMxNgkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMzE3CQk6CQkyCQk6CQk5MzMKK1BORy5MMi4zMTgJCToJCTIJCToJCTkzMworUE5HLkwyLjMxOQkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMzIwCQk6CQkyCQk6CQk5MzMKK1BORy5MMi4zMjEJCToJCTIJCToJCTkzMworUE5HLkwyLjMyMgkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMzIzCQk6CQkyCQk6CQk5MzMKK1BORy5MMi4zMjQJCToJCTIJCToJCTkzMworUE5HLkwyLjMyNQkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMzI2CQk6CQkyCQk6CQk5MzMKK1BORy5MMi4zMjcJCToJCTIJCToJCTkzMworUE5HLkwyLjMyOAkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMzI5CQk6CQkyCQk6CQk5MzMKK1BORy5MMi4zMzAJCToJCTIJCToJCTkzMworUE5HLkwyLjMzMQkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMzMyCQk6CQkyCQk6CQk5MzMKK1BORy5MMi4zMzMJCToJCTIJCToJCTkzMworUE5HLkwyLjMzNAkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMzM1CQk6CQkyCQk6CQk5MzMKK1BORy5MMi4zMzYJCToJCTIJCToJCTkzMworUE5HLkwyLjMzNwkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMzM4CQk6CQkyCQk6CQk5MzMKK1BORy5MMi4zMzkJCToJCTIJCToJCTkzMworUE5HLkwyLjM0MAkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMzQxCQk6CQkyCQk6CQk5MzMKK1BORy5MMi4zNDIJCToJCTIJCToJCTkzMworUE5HLkwyLjM0MwkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMzQ0CQk6CQkyCQk6CQk5MzMKK1BORy5MMi4zNDUJCToJCTIJCToJCTkzMworUE5HLkwyLjM0NgkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMzQ3CQk6CQkyCQk6CQk5MzMKK1BORy5MMi4zNDgJCToJCTIJCToJCTkzMworUE5HLkwyLjM0OQkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMzUwCQk6CQkyCQk6CQk5MzMKK1BORy5MMi4zNTEJCToJCTIJCToJCTkzMworUE5HLkwyLjM1MgkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMzUzCQk6CQkyCQk6CQk5MzMKK1BORy5MMi4zNTQJCToJCTIJCToJCTkzMworUE5HLkwyLjM1NQkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMzU2CQk6CQkyCQk6CQk5MzMKK1BORy5MMi4zNTcJCToJCTIJCToJCTkzMworUE5HLkwyLjM1OAkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMzU5CQk6CQkyCQk6CQk5MzMKK1BORy5MMi4zNjAJCToJCTIJCToJCTkzMworUE5HLkwyLjM2MQkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMzYyCQk6CQkyCQk6CQk5MzMKK1BORy5MMi4zNjMJCToJCTIJCToJCTkzMworUE5HLkwyLjM2NAkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMzY1CQk6CQkyCQk6CQk5MzMKK1BORy5MMi4zNjYJCToJCTIJCToJCTkzMworUE5HLkwyLjM2NwkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMzY4CQk6CQkyCQk6CQk5MzMKK1BORy5MMi4zNjkJCToJCTIJCToJCTkzMworUE5HLkwyLjM3MAkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMzcxCQk6CQkyCQk6CQk5MzMKK1BORy5MMi4zNzIJCToJCTIJCToJCTkzMworUE5HLkwyLjM3MwkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMzc0CQk6CQkyCQk6CQk5MzMKK1BORy5MMi4zNzUJCToJCTIJCToJCTkzMworUE5HLkwyLjM3NgkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMzc3CQk6CQkyCQk6CQk5MzMKK1BORy5MMi4zNzgJCToJCTIJCToJCTkzMworUE5HLkwyLjM3OQkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMzgwCQk6CQkyCQk6CQk5MzMKK1BORy5MMi4zODEJCToJCTIJCToJCTkzMworUE5HLkwyLjM4MgkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMzgzCQk6CQkyCQk6CQk5MzMKK1BORy5MMi4zODQJCToJCTIJCToJCTkzMworUE5HLkwyLjM4NQkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMzg2CQk6CQkyCQk6CQk5MzMKK1BORy5MMi4zODcJCToJCTIJCToJCTkzMworUE5HLkwyLjM4OAkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMzg5CQk6CQkyCQk6CQk5MzMKK1BORy5MMi4zOTAJCToJCTIJCToJCTkzMworUE5HLkwyLjM5MQkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMzkyCQk6CQkyCQk6CQk5MzMKK1BORy5MMi4zOTMJCToJCTIJCToJCTkzMworUE5HLkwyLjM5NAkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMzk1CQk6CQkyCQk6CQk5MzMKK1BORy5MMi4zOTYJCToJCTIJCToJCTkzMworUE5HLkwyLjM5NwkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMzk4CQk6CQkyCQk6CQk5MzMKK1BORy5MMi4zOTkJCToJCTIJCToJCTkzMworUE5HLkwyLjQwMAkJOgkJMgkJOgkJOTMzCitQTkcuTDIuNDAxCQk6CQkyCQk6CQk5MzMKK1BORy5MMi40MDIJCToJCTIJCToJCTkzMworUE5HLkwyLjQwMwkJOgkJMgkJOgkJOTMzCitQTkcuTDIuNDA0CQk6CQkyCQk6CQk5MzMKK1BORy5MMi40MDUJCToJCTIJCToJCTkzMworUE5HLkwyLjQwNgkJOgkJMgkJOgkJOTMzCitQTkcuTDIuNDA3CQk6CQkyCQk6CQk5MzMKK1BORy5MMi40MDgJCToJCTIJCToJCTkzMworUE5HLkwyLjQwOQkJOgkJMgkJOgkJOTMzCitQTkcuTDIuNDEwCQk6CQkyCQk6CQk5MzMKK1BORy5MMi40MTEJCToJCTIJCToJCTkzMworUE5HLkwyLjQxMgkJOgkJMgkJOgkJOTMzCitQTkcuTDIuNDEzCQk6CQkyCQk6CQk5MzMKK1BORy5MMi40MTQJCToJCTIJCToJCTkzMworUE5HLkwyLjQxNQkJOgkJMgkJOgkJOTMzCitQTkcuTDIuNDE2CQk6CQkyCQk6CQk5MzMKK1BORy5MMi40MTcJCToJCTIJCToJCTkzMworUE5HLkwyLjQxOAkJOgkJMgkJOgkJOTMzCitQTkcuTDIuNDE5CQk6CQkyCQk6CQk5MzMKK1BORy5MMi40MjAJCToJCTIJCToJCTkzMworUE5HLkwyLjQyMQkJOgkJMgkJOgkJOTMzCitQTkcuTDIuNDIyCQk6CQkyCQk6CQk5MzMKK1BORy5MMi40MjMJCToJCTIJCToJCTkzMworUE5HLkwyLjQyNAkJOgkJMgkJOgkJOTMzCitQTkcuTDIuNDI1CQk6CQkyCQk6CQk5MzMKK1BORy5MMi40MjYJCToJCTIJCToJCTkzMworUE5HLkwyLjQyNwkJOgkJMgkJOgkJOTMzCitQTkcuTDIuNDI4CQk6CQkyCQk6CQk5MzMKK1BORy5MMi40MjkJCToJCTIJCToJCTkzMworUE5HLkwyLjQzMAkJOgkJMgkJOgkJOTMzCitQTkcuTDIuNDMxCQk6CQkyCQk6CQk5MzMKK1BORy5MMi40MzIJCToJCTIJCToJCTkzMworUE5HLkwyLjQzMwkJOgkJMgkJOgkJOTMzCitQTkcuTDIuNDM0CQk6CQkyCQk6CQk5MzMKK1BORy5MMi40MzUJCToJCTIJCToJCTkzMworUE5HLkwyLjQzNgkJOgkJMgkJOgkJOTMzCitQTkcuTDIuNDM3CQk6CQkyCQk6CQk5MzMKK1BORy5MMi40MzgJCToJCTIJCToJCTkzMworUE5HLkwyLjQzOQkJOgkJMgkJOgkJOTMzCitQTkcuTDIuNDQwCQk6CQkyCQk6CQk5MzMKK1BORy5MMi40NDEJCToJCTIJCToJCTkzMworUE5HLkwyLjQ0MgkJOgkJMgkJOgkJOTMzCitQTkcuTDIuNDQzCQk6CQkyCQk6CQk5MzMKK1BORy5MMi40NDQJCToJCTIJCToJCTkzMworUE5HLkwyLjQ0NQkJOgkJMgkJOgkJOTMzCitQTkcuTDIuNDQ2CQk6CQkyCQk6CQk5MzMKK1BORy5MMi40NDcJCToJCTIJCToJCTkzMworUE5HLkwyLjQ0OAkJOgkJMgkJOgkJOTMzCitQTkcuTDIuNDQ5CQk6CQkyCQk6CQk5MzMKK1BORy5MMi40NTAJCToJCTIJCToJCTkzMworUE5HLkwyLjQ1MQkJOgkJMgkJOgkJOTMzCitQTkcuTDIuNDUyCQk6CQkyCQk6CQk5MzMKK1BORy5MMi40NTMJCToJCTIJCToJCTkzMworUE5HLkwyLjQ1NAkJOgkJMgkJOgkJOTMzCitQTkcuTDIuNDU1CQk6CQkyCQk6CQk5MzMKK1BORy5MMi40NTYJCToJCTIJCToJCTkzMworUE5HLkwyLjQ1NwkJOgkJMgkJOgkJOTMzCitQTkcuTDIuNDU4CQk6CQkyCQk6CQk5MzMKK1BORy5MMi40NTkJCToJCTIJCToJCTkzMworUE5HLkwyLjQ2MAkJOgkJMgkJOgkJOTMzCitQTkcuTDIuNDYxCQk6CQkyCQk6CQk5MzMKK1BORy5MMi40NjIJCToJCTIJCToJCTkzMworUE5HLkwyLjQ2MwkJOgkJMgkJOgkJOTMzCitQTkcuTDIuNDY0CQk6CQkyCQk6CQk5MzMKK1BORy5MMi40NjUJCToJCTIJCToJCTkzMworUE5HLkwyLjQ2NgkJOgkJMgkJOgkJOTMzCitQTkcuTDIuNDY3CQk6CQkyCQk6CQk5MzMKK1BORy5MMi40NjgJCToJCTIJCToJCTkzMworUE5HLkwyLjQ2OQkJOgkJMgkJOgkJOTMzCitQTkcuTDIuNDcwCQk6CQkyCQk6CQk5MzMKK1BORy5MMi40NzEJCToJCTIJCToJCTkzMworUE5HLkwyLjQ3MgkJOgkJMgkJOgkJOTMzCitQTkcuTDIuNDczCQk6CQkyCQk6CQk5MzMKK1BORy5MMi40NzQJCToJCTIJCToJCTkzMworUE5HLkwyLjQ3NQkJOgkJMgkJOgkJOTMzCitQTkcuTDIuNDc2CQk6CQkyCQk6CQk5MzMKK1BORy5MMi40NzcJCToJCTIJCToJCTkzMworUE5HLkwyLjQ3OAkJOgkJMgkJOgkJOTMzCitQTkcuTDIuNDc5CQk6CQkyCQk6CQk5MzMKK1BORy5MMi40ODAJCToJCTIJCToJCTkzMworUE5HLkwyLjQ4MQkJOgkJMgkJOgkJOTMzCitQTkcuTDIuNDgyCQk6CQkyCQk6CQk5MzMKK1BORy5MMi40ODMJCToJCTIJCToJCTkzMworUE5HLkwyLjQ4NAkJOgkJMgkJOgkJOTMzCitQTkcuTDIuNDg1CQk6CQkyCQk6CQk5MzMKK1BORy5MMi40ODYJCToJCTIJCToJCTkzMworUE5HLkwyLjQ4NwkJOgkJMgkJOgkJOTMzCitQTkcuTDIuNDg4CQk6CQkyCQk6CQk5MzMKK1BORy5MMi40ODkJCToJCTIJCToJCTkzMworUE5HLkwyLjQ5MAkJOgkJMgkJOgkJOTMzCitQTkcuTDIuNDkxCQk6CQkyCQk6CQk5MzMKK1BORy5MMi40OTIJCToJCTIJCToJCTkzMworUE5HLkwyLjQ5MwkJOgkJMgkJOgkJOTMzCitQTkcuTDIuNDk0CQk6CQkyCQk6CQk5MzMKK1BORy5MMi40OTUJCToJCTIJCToJCTkzMworUE5HLkwyLjQ5NgkJOgkJMgkJOgkJOTMzCitDZW50cmFsICAJOgkxCToJMjk1MDAKK1NpbWJ1IAk6CTEJOgk2MTAwCitFYXN0IE5ldyBCcml0YWluIAk6CTEJOgkxNTUwMAorRWFzdCBTZXBpayAJOgkxCToJNDI4MDAKK0Vhc3Rlcm4gSGlnaGxhbmRzIAk6CTEJOgkxMTIwMAorRW5nYSAJOgkxCToJMTI4MDAKK0d1bGYgCToJMQk6CTM0NTAwCitNYWRhbmcgCToJMQk6CTI5MDAwCitNYW51cyAJOgkxCToJMjEwMAorTWlsbmUgQmF5IAk6CTEJOgkxNDAwMAorTW9yb2JlIAk6CTEJOgkzNDUwMAorTmF0aW9uYWwgQ2FwaXRhbCBEaXN0cmljdCAJOgkxCToJMjQwCitOZXcgSXJlbGFuZCAJOgkxCToJOTYwMAorTm9ydGggU29sb21vbnMgCToJMQk6CTkzMDAKK09ybyAoTm9ydGhlcm4pIAk6CTEJOgkyMjgwMAorU291dGhlcm4gSGlnaGxhbmRzIAk6CTEJOgkyMzgwMAorV2VzdCBOZXcgQnJpdGFpbiAJOgkxCToJMjEwMDAKK1dlc3QgU2VwaWsgCToJMQk6CTM2MzAwCitXZXN0ZXJuIAk6CTEJOgk5OTMwMAorV2VzdGVybiBIaWdobGFuZHMgCToJMQk6CTg1MDAKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL1BBUFVBTkVXR1VJTkVBX1BPUFVMQVRJT04udHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvUEFQVUFORVdHVUlORUFfUE9QVUxBVElPTi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2E5ODk3MAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL1BBUFVBTkVXR1VJTkVBX1BPUFVMQVRJT04udHh0CkBAIC0wLDAgKzEsMTAxMyBAQAorUGFwdWEgTmV3IEd1aW5lYQk6CTAJOgk1NjcwNTQ0CitQRy1VTkstMQk6CTEJOgkxMTg2OQorUEctVU5LLTIJOgkxCToJMTE4NjkKK1BHLVVOSy0zCToJMQk6CTExODY5CitQRy1VTkstNAk6CTEJOgkxMTg2OQorUEctVU5LLTUJOgkxCToJMTE4NjkKK1BHLVVOSy02CToJMQk6CTExODY5CitQRy1VTkstNwk6CTEJOgkxMTg2OQorUEctVU5LLTgJOgkxCToJMTE4NjkKK1BHLVVOSy05CToJMQk6CTExODY5CitQRy1VTkstMTAJOgkxCToJMTE4NjkKK1BHLVVOSy0xMQk6CTEJOgkxMTg2OQorUEctVU5LLTEyCToJMQk6CTExODY5CitQRy1VTkstMTMJOgkxCToJMTE4NjkKK1BHLVVOSy0xNAk6CTEJOgkxMTg2OQorUEctVU5LLTE1CToJMQk6CTExODY5CitQRy1VTkstMTYJOgkxCToJMTE4NjkKK1BHLVVOSy0xNwk6CTEJOgkxMTg2OQorUEctVU5LLTE4CToJMQk6CTExODY5CitQRy1VTkstMTkJOgkxCToJMTE4NjkKK1BHLVVOSy0yMAk6CTEJOgkxMTg2OQorUEctVU5LLTIxCToJMQk6CTExODY5CitQRy1VTkstMjIJOgkxCToJMTE4NjkKK1BHLVVOSy0yMwk6CTEJOgkxMTg2OQorUEctVU5LLTI0CToJMQk6CTExODY5CitQRy1VTkstMjUJOgkxCToJMTE4NjkKK1BHLVVOSy0yNgk6CTEJOgkxMTg2OQorUEctVU5LLTI3CToJMQk6CTExODY5CitQRy1VTkstMjgJOgkxCToJMTE4NjkKK1BHLVVOSy0yOQk6CTEJOgkxMTg2OQorUEctVU5LLTMwCToJMQk6CTExODY5CitQRy1VTkstMzEJOgkxCToJMTE4NjkKK1BHLVVOSy0zMgk6CTEJOgkxMTg2OQorUEctVU5LLTMzCToJMQk6CTExODY5CitQRy1VTkstMzQJOgkxCToJMTE4NjkKK1BHLVVOSy0zNQk6CTEJOgkxMTg2OQorUEctVU5LLTM2CToJMQk6CTExODY5CitQRy1VTkstMzcJOgkxCToJMTE4NjkKK1BHLVVOSy0zOAk6CTEJOgkxMTg2OQorUEctVU5LLTM5CToJMQk6CTExODY5CitQRy1VTkstNDAJOgkxCToJMTE4NjkKK1BHLVVOSy00MQk6CTEJOgkxMTg2OQorUEctVU5LLTQyCToJMQk6CTExODY5CitQRy1VTkstNDMJOgkxCToJMTE4NjkKK1BHLVVOSy00NAk6CTEJOgkxMTg2OQorUEctVU5LLTQ1CToJMQk6CTExODY5CitQRy1VTkstNDYJOgkxCToJMTE4NjkKK1BHLVVOSy00Nwk6CTEJOgkxMTg2OQorUEctVU5LLTQ4CToJMQk6CTExODY5CitQRy1VTkstNDkJOgkxCToJMTE4NjkKK1BHLVVOSy01MAk6CTEJOgkxMTg2OQorUEctVU5LLTUxCToJMQk6CTExODY5CitQRy1VTkstNTIJOgkxCToJMTE4NjkKK1BHLVVOSy01Mwk6CTEJOgkxMTg2OQorUEctVU5LLTU0CToJMQk6CTExODY5CitQRy1VTkstNTUJOgkxCToJMTE4NjkKK1BHLVVOSy01Ngk6CTEJOgkxMTg2OQorUEctVU5LLTU3CToJMQk6CTExODY5CitQRy1VTkstNTgJOgkxCToJMTE4NjkKK1BHLVVOSy01OQk6CTEJOgkxMTg2OQorUEctVU5LLTYwCToJMQk6CTExODY5CitQRy1VTkstNjEJOgkxCToJMTE4NjkKK1BHLVVOSy02Mgk6CTEJOgkxMTg2OQorUEctVU5LLTYzCToJMQk6CTExODY5CitQRy1VTkstNjQJOgkxCToJMTE4NjkKK1BHLVVOSy02NQk6CTEJOgkxMTg2OQorUEctVU5LLTY2CToJMQk6CTExODY5CitQRy1VTkstNjcJOgkxCToJMTE4NjkKK1BHLVVOSy02OAk6CTEJOgkxMTg2OQorUEctVU5LLTY5CToJMQk6CTExODY5CitQRy1VTkstNzAJOgkxCToJMTE4NjkKK1BHLVVOSy03MQk6CTEJOgkxMTg2OQorUEctVU5LLTcyCToJMQk6CTExODY5CitQRy1VTkstNzMJOgkxCToJMTE4NjkKK1BHLVVOSy03NAk6CTEJOgkxMTg2OQorUEctVU5LLTc1CToJMQk6CTExODY5CitQRy1VTkstNzYJOgkxCToJMTE4NjkKK1BHLVVOSy03Nwk6CTEJOgkxMTg2OQorUEctVU5LLTc4CToJMQk6CTExODY5CitQRy1VTkstNzkJOgkxCToJMTE4NjkKK1BHLVVOSy04MAk6CTEJOgkxMTg2OQorUEctVU5LLTgxCToJMQk6CTExODY5CitQRy1VTkstODIJOgkxCToJMTE4NjkKK1BHLVVOSy04Mwk6CTEJOgkxMTg2OQorUEctVU5LLTg0CToJMQk6CTExODY5CitQRy1VTkstODUJOgkxCToJMTE4NjkKK1BHLVVOSy04Ngk6CTEJOgkxMTg2OQorUEctVU5LLTg3CToJMQk6CTExODY5CitQRy1VTkstODgJOgkxCToJMTE4NjkKK1BHLVVOSy04OQk6CTEJOgkxMTg2OQorUEctVU5LLTkwCToJMQk6CTExODY5CitQRy1VTkstOTEJOgkxCToJMTE4NjkKK1BHLVVOSy05Mgk6CTEJOgkxMTg2OQorUEctVU5LLTkzCToJMQk6CTExODY5CitQRy1VTkstOTQJOgkxCToJMTE4NjkKK1BHLVVOSy05NQk6CTEJOgkxMTg2OQorUEctVU5LLTk2CToJMQk6CTExODY5CitQRy1VTkstOTcJOgkxCToJMTE4NjkKK1BHLVVOSy05OAk6CTEJOgkxMTg2OQorUEctVU5LLTk5CToJMQk6CTExODY5CitQRy1VTkstMTAwCToJMQk6CTExODY5CitQRy1VTkstMTAxCToJMQk6CTExODY5CitQRy1VTkstMTAyCToJMQk6CTExODY5CitQRy1VTkstMTAzCToJMQk6CTExODY5CitQRy1VTkstMTA0CToJMQk6CTExODY5CitQRy1VTkstMTA1CToJMQk6CTExODY5CitQRy1VTkstMTA2CToJMQk6CTExODY5CitQRy1VTkstMTA3CToJMQk6CTExODY5CitQRy1VTkstMTA4CToJMQk6CTExODY5CitQRy1VTkstMTA5CToJMQk6CTExODY5CitQRy1VTkstMTEwCToJMQk6CTExODY5CitQRy1VTkstMTExCToJMQk6CTExODY5CitQRy1VTkstMTEyCToJMQk6CTExODY5CitQRy1VTkstMTEzCToJMQk6CTExODY5CitQRy1VTkstMTE0CToJMQk6CTExODY5CitQRy1VTkstMTE1CToJMQk6CTExODY5CitQRy1VTkstMTE2CToJMQk6CTExODY5CitQRy1VTkstMTE3CToJMQk6CTExODY5CitQRy1VTkstMTE4CToJMQk6CTExODY5CitQRy1VTkstMTE5CToJMQk6CTExODY5CitQRy1VTkstMTIwCToJMQk6CTExODY5CitQRy1VTkstMTIxCToJMQk6CTExODY5CitQRy1VTkstMTIyCToJMQk6CTExODY5CitQRy1VTkstMTIzCToJMQk6CTExODY5CitQRy1VTkstMTI0CToJMQk6CTExODY5CitQRy1VTkstMTI1CToJMQk6CTExODY5CitQRy1VTkstMTI2CToJMQk6CTExODY5CitQRy1VTkstMTI3CToJMQk6CTExODY5CitQRy1VTkstMTI4CToJMQk6CTExODY5CitQRy1VTkstMTI5CToJMQk6CTExODY5CitQRy1VTkstMTMwCToJMQk6CTExODY5CitQRy1VTkstMTMxCToJMQk6CTExODY5CitQRy1VTkstMTMyCToJMQk6CTExODY5CitQRy1VTkstMTMzCToJMQk6CTExODY5CitQRy1VTkstMTM0CToJMQk6CTExODY5CitQRy1VTkstMTM1CToJMQk6CTExODY5CitQRy1VTkstMTM2CToJMQk6CTExODY5CitQRy1VTkstMTM3CToJMQk6CTExODY5CitQRy1VTkstMTM4CToJMQk6CTExODY5CitQRy1VTkstMTM5CToJMQk6CTExODY5CitQRy1VTkstMTQwCToJMQk6CTExODY5CitQRy1VTkstMTQxCToJMQk6CTExODY5CitQRy1VTkstMTQyCToJMQk6CTExODY5CitQRy1VTkstMTQzCToJMQk6CTExODY5CitQRy1VTkstMTQ0CToJMQk6CTExODY5CitQRy1VTkstMTQ1CToJMQk6CTExODY5CitQRy1VTkstMTQ2CToJMQk6CTExODY5CitQRy1VTkstMTQ3CToJMQk6CTExODY5CitQRy1VTkstMTQ4CToJMQk6CTExODY5CitQRy1VTkstMTQ5CToJMQk6CTExODY5CitQRy1VTkstMTUwCToJMQk6CTExODY5CitQRy1VTkstMTUxCToJMQk6CTExODY5CitQRy1VTkstMTUyCToJMQk6CTExODY5CitQRy1VTkstMTUzCToJMQk6CTExODY5CitQRy1VTkstMTU0CToJMQk6CTExODY5CitQRy1VTkstMTU1CToJMQk6CTExODY5CitQRy1VTkstMTU2CToJMQk6CTExODY5CitQRy1VTkstMTU3CToJMQk6CTExODY5CitQRy1VTkstMTU4CToJMQk6CTExODY5CitQRy1VTkstMTU5CToJMQk6CTExODY5CitQRy1VTkstMTYwCToJMQk6CTExODY5CitQRy1VTkstMTYxCToJMQk6CTExODY5CitQRy1VTkstMTYyCToJMQk6CTExODY5CitQRy1VTkstMTYzCToJMQk6CTExODY5CitQRy1VTkstMTY0CToJMQk6CTExODY5CitQRy1VTkstMTY1CToJMQk6CTExODY5CitQRy1VTkstMTY2CToJMQk6CTExODY5CitQRy1VTkstMTY3CToJMQk6CTExODY5CitQRy1VTkstMTY4CToJMQk6CTExODY5CitQRy1VTkstMTY5CToJMQk6CTExODY5CitQRy1VTkstMTcwCToJMQk6CTExODY5CitQRy1VTkstMTcxCToJMQk6CTExODY5CitQRy1VTkstMTcyCToJMQk6CTExODY5CitQRy1VTkstMTczCToJMQk6CTExODY5CitQRy1VTkstMTc0CToJMQk6CTExODY5CitQRy1VTkstMTc1CToJMQk6CTExODY5CitQRy1VTkstMTc2CToJMQk6CTExODY5CitQRy1VTkstMTc3CToJMQk6CTExODY5CitQRy1VTkstMTc4CToJMQk6CTExODY5CitQRy1VTkstMTc5CToJMQk6CTExODY5CitQRy1VTkstMTgwCToJMQk6CTExODY5CitQRy1VTkstMTgxCToJMQk6CTExODY5CitQRy1VTkstMTgyCToJMQk6CTExODY5CitQRy1VTkstMTgzCToJMQk6CTExODY5CitQRy1VTkstMTg0CToJMQk6CTExODY5CitQRy1VTkstMTg1CToJMQk6CTExODY5CitQRy1VTkstMTg2CToJMQk6CTExODY5CitQRy1VTkstMTg3CToJMQk6CTExODY5CitQRy1VTkstMTg4CToJMQk6CTExODY5CitQRy1VTkstMTg5CToJMQk6CTExODY5CitQRy1VTkstMTkwCToJMQk6CTExODY5CitQRy1VTkstMTkxCToJMQk6CTExODY5CitQRy1VTkstMTkyCToJMQk6CTExODY5CitQRy1VTkstMTkzCToJMQk6CTExODY5CitQRy1VTkstMTk0CToJMQk6CTExODY5CitQRy1VTkstMTk1CToJMQk6CTExODY5CitQRy1VTkstMTk2CToJMQk6CTExODY5CitQRy1VTkstMTk3CToJMQk6CTExODY5CitQRy1VTkstMTk4CToJMQk6CTExODY5CitQRy1VTkstMTk5CToJMQk6CTExODY5CitQRy1VTkstMjAwCToJMQk6CTExODY5CitQRy1VTkstMjAxCToJMQk6CTExODY5CitQRy1VTkstMjAyCToJMQk6CTExODY5CitQRy1VTkstMjAzCToJMQk6CTExODY5CitQRy1VTkstMjA0CToJMQk6CTExODY5CitQRy1VTkstMjA1CToJMQk6CTExODY5CitQRy1VTkstMjA2CToJMQk6CTExODY5CitQRy1VTkstMjA3CToJMQk6CTExODY5CitQRy1VTkstMjA4CToJMQk6CTExODY5CitQRy1VTkstMjA5CToJMQk6CTExODY5CitQRy1VTkstMjEwCToJMQk6CTExODY5CitQRy1VTkstMjExCToJMQk6CTExODY5CitQRy1VTkstMjEyCToJMQk6CTExODY5CitQRy1VTkstMjEzCToJMQk6CTExODY5CitQRy1VTkstMjE0CToJMQk6CTExODY5CitQRy1VTkstMjE1CToJMQk6CTExODY5CitQRy1VTkstMjE2CToJMQk6CTExODY5CitQRy1VTkstMjE3CToJMQk6CTExODY5CitQRy1VTkstMjE4CToJMQk6CTExODY5CitQRy1VTkstMjE5CToJMQk6CTExODY5CitQRy1VTkstMjIwCToJMQk6CTExODY5CitQRy1VTkstMjIxCToJMQk6CTExODY5CitQRy1VTkstMjIyCToJMQk6CTExODY5CitQRy1VTkstMjIzCToJMQk6CTExODY5CitQRy1VTkstMjI0CToJMQk6CTExODY5CitQRy1VTkstMjI1CToJMQk6CTExODY5CitQRy1VTkstMjI2CToJMQk6CTExODY5CitQRy1VTkstMjI3CToJMQk6CTExODY5CitQRy1VTkstMjI4CToJMQk6CTExODY5CitQRy1VTkstMjI5CToJMQk6CTExODY5CitQRy1VTkstMjMwCToJMQk6CTExODY5CitQRy1VTkstMjMxCToJMQk6CTExODY5CitQRy1VTkstMjMyCToJMQk6CTExODY5CitQRy1VTkstMjMzCToJMQk6CTExODY5CitQRy1VTkstMjM0CToJMQk6CTExODY5CitQRy1VTkstMjM1CToJMQk6CTExODY5CitQRy1VTkstMjM2CToJMQk6CTExODY5CitQRy1VTkstMjM3CToJMQk6CTExODY5CitQRy1VTkstMjM4CToJMQk6CTExODY5CitQRy1VTkstMjM5CToJMQk6CTExODY5CitQRy1VTkstMjQwCToJMQk6CTExODY5CitQRy1VTkstMjQxCToJMQk6CTExODY5CitQRy1VTkstMjQyCToJMQk6CTExODY5CitQRy1VTkstMjQzCToJMQk6CTExODY5CitQRy1VTkstMjQ0CToJMQk6CTExODY5CitQRy1VTkstMjQ1CToJMQk6CTExODY5CitQRy1VTkstMjQ2CToJMQk6CTExODY5CitQRy1VTkstMjQ3CToJMQk6CTExODY5CitQRy1VTkstMjQ4CToJMQk6CTExODY5CitQRy1VTkstMjQ5CToJMQk6CTExODY5CitQRy1VTkstMjUwCToJMQk6CTExODY5CitQRy1VTkstMjUxCToJMQk6CTExODY5CitQRy1VTkstMjUyCToJMQk6CTExODY5CitQRy1VTkstMjUzCToJMQk6CTExODY5CitQRy1VTkstMjU0CToJMQk6CTExODY5CitQRy1VTkstMjU1CToJMQk6CTExODY5CitQRy1VTkstMjU2CToJMQk6CTExODY5CitQRy1VTkstMjU3CToJMQk6CTExODY5CitQRy1VTkstMjU4CToJMQk6CTExODY5CitQRy1VTkstMjU5CToJMQk6CTExODY5CitQRy1VTkstMjYwCToJMQk6CTExODY5CitQRy1VTkstMjYxCToJMQk6CTExODY5CitQRy1VTkstMjYyCToJMQk6CTExODY5CitQRy1VTkstMjYzCToJMQk6CTExODY5CitQRy1VTkstMjY0CToJMQk6CTExODY5CitQRy1VTkstMjY1CToJMQk6CTExODY5CitQRy1VTkstMjY2CToJMQk6CTExODY5CitQRy1VTkstMjY3CToJMQk6CTExODY5CitQRy1VTkstMjY4CToJMQk6CTExODY5CitQRy1VTkstMjY5CToJMQk6CTExODY5CitQRy1VTkstMjcwCToJMQk6CTExODY5CitQRy1VTkstMjcxCToJMQk6CTExODY5CitQRy1VTkstMjcyCToJMQk6CTExODY5CitQRy1VTkstMjczCToJMQk6CTExODY5CitQRy1VTkstMjc0CToJMQk6CTExODY5CitQRy1VTkstMjc1CToJMQk6CTExODY5CitQRy1VTkstMjc2CToJMQk6CTExODY5CitQRy1VTkstMjc3CToJMQk6CTExODY5CitQRy1VTkstMjc4CToJMQk6CTExODY5CitQRy1VTkstMjc5CToJMQk6CTExODY5CitQRy1VTkstMjgwCToJMQk6CTExODY5CitQRy1VTkstMjgxCToJMQk6CTExODY5CitQRy1VTkstMjgyCToJMQk6CTExODY5CitQRy1VTkstMjgzCToJMQk6CTExODY5CitQRy1VTkstMjg0CToJMQk6CTExODY5CitQRy1VTkstMjg1CToJMQk6CTExODY5CitQRy1VTkstMjg2CToJMQk6CTExODY5CitQRy1VTkstMjg3CToJMQk6CTExODY5CitQRy1VTkstMjg4CToJMQk6CTExODY5CitQRy1VTkstMjg5CToJMQk6CTExODY5CitQRy1VTkstMjkwCToJMQk6CTExODY5CitQRy1VTkstMjkxCToJMQk6CTExODY5CitQRy1VTkstMjkyCToJMQk6CTExODY5CitQRy1VTkstMjkzCToJMQk6CTExODY5CitQRy1VTkstMjk0CToJMQk6CTExODY5CitQRy1VTkstMjk1CToJMQk6CTExODY5CitQRy1VTkstMjk2CToJMQk6CTExODY5CitQRy1VTkstMjk3CToJMQk6CTExODY5CitQRy1VTkstMjk4CToJMQk6CTExODY5CitQRy1VTkstMjk5CToJMQk6CTExODY5CitQRy1VTkstMzAwCToJMQk6CTExODY5CitQRy1VTkstMzAxCToJMQk6CTExODY5CitQRy1VTkstMzAyCToJMQk6CTExODY5CitQRy1VTkstMzAzCToJMQk6CTExODY5CitQRy1VTkstMzA0CToJMQk6CTExODY5CitQRy1VTkstMzA1CToJMQk6CTExODY5CitQRy1VTkstMzA2CToJMQk6CTExODY5CitQRy1VTkstMzA3CToJMQk6CTExODY5CitQRy1VTkstMzA4CToJMQk6CTExODY5CitQRy1VTkstMzA5CToJMQk6CTExODY5CitQRy1VTkstMzEwCToJMQk6CTExODY5CitQRy1VTkstMzExCToJMQk6CTExODY5CitQRy1VTkstMzEyCToJMQk6CTExODY5CitQRy1VTkstMzEzCToJMQk6CTExODY5CitQRy1VTkstMzE0CToJMQk6CTExODY5CitQRy1VTkstMzE1CToJMQk6CTExODY5CitQRy1VTkstMzE2CToJMQk6CTExODY5CitQRy1VTkstMzE3CToJMQk6CTExODY5CitQRy1VTkstMzE4CToJMQk6CTExODY5CitQRy1VTkstMzE5CToJMQk6CTExODY5CitQRy1VTkstMzIwCToJMQk6CTExODY5CitQRy1VTkstMzIxCToJMQk6CTExODY5CitQRy1VTkstMzIyCToJMQk6CTExODY5CitQRy1VTkstMzIzCToJMQk6CTExODY5CitQRy1VTkstMzI0CToJMQk6CTExODY5CitQRy1VTkstMzI1CToJMQk6CTExODY5CitQRy1VTkstMzI2CToJMQk6CTExODY5CitQRy1VTkstMzI3CToJMQk6CTExODY5CitQRy1VTkstMzI4CToJMQk6CTExODY5CitQRy1VTkstMzI5CToJMQk6CTExODY5CitQRy1VTkstMzMwCToJMQk6CTExODY5CitQRy1VTkstMzMxCToJMQk6CTExODY5CitQRy1VTkstMzMyCToJMQk6CTExODY5CitQRy1VTkstMzMzCToJMQk6CTExODY5CitQRy1VTkstMzM0CToJMQk6CTExODY5CitQRy1VTkstMzM1CToJMQk6CTExODY5CitQRy1VTkstMzM2CToJMQk6CTExODY5CitQRy1VTkstMzM3CToJMQk6CTExODY5CitQRy1VTkstMzM4CToJMQk6CTExODY5CitQRy1VTkstMzM5CToJMQk6CTExODY5CitQRy1VTkstMzQwCToJMQk6CTExODY5CitQRy1VTkstMzQxCToJMQk6CTExODY5CitQRy1VTkstMzQyCToJMQk6CTExODY5CitQRy1VTkstMzQzCToJMQk6CTExODY5CitQRy1VTkstMzQ0CToJMQk6CTExODY5CitQRy1VTkstMzQ1CToJMQk6CTExODY5CitQRy1VTkstMzQ2CToJMQk6CTExODY5CitQRy1VTkstMzQ3CToJMQk6CTExODY5CitQRy1VTkstMzQ4CToJMQk6CTExODY5CitQRy1VTkstMzQ5CToJMQk6CTExODY5CitQRy1VTkstMzUwCToJMQk6CTExODY5CitQRy1VTkstMzUxCToJMQk6CTExODY5CitQRy1VTkstMzUyCToJMQk6CTExODY5CitQRy1VTkstMzUzCToJMQk6CTExODY5CitQRy1VTkstMzU0CToJMQk6CTExODY5CitQRy1VTkstMzU1CToJMQk6CTExODY5CitQRy1VTkstMzU2CToJMQk6CTExODY5CitQRy1VTkstMzU3CToJMQk6CTExODY5CitQRy1VTkstMzU4CToJMQk6CTExODY5CitQRy1VTkstMzU5CToJMQk6CTExODY5CitQRy1VTkstMzYwCToJMQk6CTExODY5CitQRy1VTkstMzYxCToJMQk6CTExODY5CitQRy1VTkstMzYyCToJMQk6CTExODY5CitQRy1VTkstMzYzCToJMQk6CTExODY5CitQRy1VTkstMzY0CToJMQk6CTExODY5CitQRy1VTkstMzY1CToJMQk6CTExODY5CitQRy1VTkstMzY2CToJMQk6CTExODY5CitQRy1VTkstMzY3CToJMQk6CTExODY5CitQRy1VTkstMzY4CToJMQk6CTExODY5CitQRy1VTkstMzY5CToJMQk6CTExODY5CitQRy1VTkstMzcwCToJMQk6CTExODY5CitQRy1VTkstMzcxCToJMQk6CTExODY5CitQRy1VTkstMzcyCToJMQk6CTExODY5CitQRy1VTkstMzczCToJMQk6CTExODY5CitQRy1VTkstMzc0CToJMQk6CTExODY5CitQRy1VTkstMzc1CToJMQk6CTExODY5CitQRy1VTkstMzc2CToJMQk6CTExODY5CitQRy1VTkstMzc3CToJMQk6CTExODY5CitQRy1VTkstMzc4CToJMQk6CTExODY5CitQRy1VTkstMzc5CToJMQk6CTExODY5CitQRy1VTkstMzgwCToJMQk6CTExODY5CitQRy1VTkstMzgxCToJMQk6CTExODY5CitQRy1VTkstMzgyCToJMQk6CTExODY5CitQRy1VTkstMzgzCToJMQk6CTExODY5CitQRy1VTkstMzg0CToJMQk6CTExODY5CitQRy1VTkstMzg1CToJMQk6CTExODY5CitQRy1VTkstMzg2CToJMQk6CTExODY5CitQRy1VTkstMzg3CToJMQk6CTExODY5CitQRy1VTkstMzg4CToJMQk6CTExODY5CitQRy1VTkstMzg5CToJMQk6CTExODY5CitQRy1VTkstMzkwCToJMQk6CTExODY5CitQRy1VTkstMzkxCToJMQk6CTExODY5CitQRy1VTkstMzkyCToJMQk6CTExODY5CitQRy1VTkstMzkzCToJMQk6CTExODY5CitQRy1VTkstMzk0CToJMQk6CTExODY5CitQRy1VTkstMzk1CToJMQk6CTExODY5CitQRy1VTkstMzk2CToJMQk6CTExODY5CitQRy1VTkstMzk3CToJMQk6CTExODY5CitQRy1VTkstMzk4CToJMQk6CTExODY5CitQRy1VTkstMzk5CToJMQk6CTExODY5CitQRy1VTkstNDAwCToJMQk6CTExODY5CitQRy1VTkstNDAxCToJMQk6CTExODY5CitQRy1VTkstNDAyCToJMQk6CTExODY5CitQRy1VTkstNDAzCToJMQk6CTExODY5CitQRy1VTkstNDA0CToJMQk6CTExODY5CitQRy1VTkstNDA1CToJMQk6CTExODY5CitQRy1VTkstNDA2CToJMQk6CTExODY5CitQRy1VTkstNDA3CToJMQk6CTExODY5CitQRy1VTkstNDA4CToJMQk6CTExODY5CitQRy1VTkstNDA5CToJMQk6CTExODY5CitQRy1VTkstNDEwCToJMQk6CTExODY5CitQRy1VTkstNDExCToJMQk6CTExODY5CitQRy1VTkstNDEyCToJMQk6CTExODY5CitQRy1VTkstNDEzCToJMQk6CTExODY5CitQRy1VTkstNDE0CToJMQk6CTExODY5CitQRy1VTkstNDE1CToJMQk6CTExODY5CitQRy1VTkstNDE2CToJMQk6CTExODY5CitQRy1VTkstNDE3CToJMQk6CTExODY5CitQRy1VTkstNDE4CToJMQk6CTExODY5CitQRy1VTkstNDE5CToJMQk6CTExODY5CitQRy1VTkstNDIwCToJMQk6CTExODY5CitQRy1VTkstNDIxCToJMQk6CTExODY5CitQRy1VTkstNDIyCToJMQk6CTExODY5CitQRy1VTkstNDIzCToJMQk6CTExODY5CitQRy1VTkstNDI0CToJMQk6CTExODY5CitQRy1VTkstNDI1CToJMQk6CTExODY5CitQRy1VTkstNDI2CToJMQk6CTExODY5CitQRy1VTkstNDI3CToJMQk6CTExODY5CitQRy1VTkstNDI4CToJMQk6CTExODY5CitQRy1VTkstNDI5CToJMQk6CTExODY5CitQRy1VTkstNDMwCToJMQk6CTExODY5CitQRy1VTkstNDMxCToJMQk6CTExODY5CitQRy1VTkstNDMyCToJMQk6CTExODY5CitQRy1VTkstNDMzCToJMQk6CTExODY5CitQRy1VTkstNDM0CToJMQk6CTExODY5CitQRy1VTkstNDM1CToJMQk6CTExODY5CitQRy1VTkstNDM2CToJMQk6CTExODY5CitQRy1VTkstNDM3CToJMQk6CTExODY5CitQRy1VTkstNDM4CToJMQk6CTExODY5CitQRy1VTkstNDM5CToJMQk6CTExODY5CitQRy1VTkstNDQwCToJMQk6CTExODY5CitQRy1VTkstNDQxCToJMQk6CTExODY5CitQRy1VTkstNDQyCToJMQk6CTExODY5CitQRy1VTkstNDQzCToJMQk6CTExODY5CitQRy1VTkstNDQ0CToJMQk6CTExODY5CitQRy1VTkstNDQ1CToJMQk6CTExODY5CitQRy1VTkstNDQ2CToJMQk6CTExODY5CitQRy1VTkstNDQ3CToJMQk6CTExODY5CitQRy1VTkstNDQ4CToJMQk6CTExODY5CitQRy1VTkstNDQ5CToJMQk6CTExODY5CitQRy1VTkstNDUwCToJMQk6CTExODY5CitQRy1VTkstNDUxCToJMQk6CTExODY5CitQRy1VTkstNDUyCToJMQk6CTExODY5CitQRy1VTkstNDUzCToJMQk6CTExODY5CitQRy1VTkstNDU0CToJMQk6CTExODY5CitQRy1VTkstNDU1CToJMQk6CTExODY5CitQRy1VTkstNDU2CToJMQk6CTExODY5CitQRy1VTkstNDU3CToJMQk6CTExODY5CitQRy1VTkstNDU4CToJMQk6CTExODY5CitQRy1VTkstNDU5CToJMQk6CTExODY5CitQRy1VTkstNDYwCToJMQk6CTExODY5CitQRy1VTkstNDYxCToJMQk6CTExODY5CitQRy1VTkstNDYyCToJMQk6CTExODY5CitQRy1VTkstNDYzCToJMQk6CTExODY5CitQRy1VTkstNDY0CToJMQk6CTExODY5CitQRy1VTkstNDY1CToJMQk6CTExODY5CitQRy1VTkstNDY2CToJMQk6CTExODY5CitQRy1VTkstNDY3CToJMQk6CTExODY5CitQRy1VTkstNDY4CToJMQk6CTExODY5CitQRy1VTkstNDY5CToJMQk6CTExODY5CitQRy1VTkstNDcwCToJMQk6CTExODY5CitQRy1VTkstNDcxCToJMQk6CTExODY5CitQRy1VTkstNDcyCToJMQk6CTExODY5CitQRy1VTkstNDczCToJMQk6CTExODY5CitQRy1VTkstNDc0CToJMQk6CTExODY5CitQRy1VTkstNDc1CToJMQk6CTExODY5CitQRy1VTkstNDc2CToJMQk6CTExODY5CitQRy1VTkstNDc3CToJMQk6CTExODY5CitQRy1VTkstNDc4CToJMQk6CTExODY5CitQRy1VTkstNDc5CToJMQk6CTExODY5CitQRy1VTkstNDgwCToJMQk6CTExODY5CitQRy1VTkstNDgxCToJMQk6CTExODY5CitQRy1VTkstNDgyCToJMQk6CTExODY5CitQRy1VTkstNDgzCToJMQk6CTExODY5CitQRy1VTkstNDg0CToJMQk6CTExODY5CitQRy1VTkstNDg1CToJMQk6CTExODY5CitQRy1VTkstNDg2CToJMQk6CTExODY5CitQRy1VTkstNDg3CToJMQk6CTExODY5CitQRy1VTkstNDg4CToJMQk6CTExODY5CitQRy1VTkstNDg5CToJMQk6CTExODY5CitQRy1VTkstNDkwCToJMQk6CTExODY5CitQRy1VTkstNDkxCToJMQk6CTExODY5CitQRy1VTkstNDkyCToJMQk6CTExODY5CitQRy1VTkstNDkzCToJMQk6CTExODY5CitQRy1VTkstNDk0CToJMQk6CTExODY5CitQRy1VTkstNDk1CToJMQk6CTExODY5CitQRy1VTkstNDk2CToJMQk6CTExODY5CitQTkcuTDIuMQkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi4yCQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjMJCToJCTIJCToJCTExODY5CitQTkcuTDIuNAkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi41CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjYJCToJCTIJCToJCTExODY5CitQTkcuTDIuNwkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi44CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjkJCToJCTIJCToJCTExODY5CitQTkcuTDIuMTAJCToJCTIJCToJCTExODY5CitQTkcuTDIuMTEJCToJCTIJCToJCTExODY5CitQTkcuTDIuMTIJCToJCTIJCToJCTExODY5CitQTkcuTDIuMTMJCToJCTIJCToJCTExODY5CitQTkcuTDIuMTQJCToJCTIJCToJCTExODY5CitQTkcuTDIuMTUJCToJCTIJCToJCTExODY5CitQTkcuTDIuMTYJCToJCTIJCToJCTExODY5CitQTkcuTDIuMTcJCToJCTIJCToJCTExODY5CitQTkcuTDIuMTgJCToJCTIJCToJCTExODY5CitQTkcuTDIuMTkJCToJCTIJCToJCTExODY5CitQTkcuTDIuMjAJCToJCTIJCToJCTExODY5CitQTkcuTDIuMjEJCToJCTIJCToJCTExODY5CitQTkcuTDIuMjIJCToJCTIJCToJCTExODY5CitQTkcuTDIuMjMJCToJCTIJCToJCTExODY5CitQTkcuTDIuMjQJCToJCTIJCToJCTExODY5CitQTkcuTDIuMjUJCToJCTIJCToJCTExODY5CitQTkcuTDIuMjYJCToJCTIJCToJCTExODY5CitQTkcuTDIuMjcJCToJCTIJCToJCTExODY5CitQTkcuTDIuMjgJCToJCTIJCToJCTExODY5CitQTkcuTDIuMjkJCToJCTIJCToJCTExODY5CitQTkcuTDIuMzAJCToJCTIJCToJCTExODY5CitQTkcuTDIuMzEJCToJCTIJCToJCTExODY5CitQTkcuTDIuMzIJCToJCTIJCToJCTExODY5CitQTkcuTDIuMzMJCToJCTIJCToJCTExODY5CitQTkcuTDIuMzQJCToJCTIJCToJCTExODY5CitQTkcuTDIuMzUJCToJCTIJCToJCTExODY5CitQTkcuTDIuMzYJCToJCTIJCToJCTExODY5CitQTkcuTDIuMzcJCToJCTIJCToJCTExODY5CitQTkcuTDIuMzgJCToJCTIJCToJCTExODY5CitQTkcuTDIuMzkJCToJCTIJCToJCTExODY5CitQTkcuTDIuNDAJCToJCTIJCToJCTExODY5CitQTkcuTDIuNDEJCToJCTIJCToJCTExODY5CitQTkcuTDIuNDIJCToJCTIJCToJCTExODY5CitQTkcuTDIuNDMJCToJCTIJCToJCTExODY5CitQTkcuTDIuNDQJCToJCTIJCToJCTExODY5CitQTkcuTDIuNDUJCToJCTIJCToJCTExODY5CitQTkcuTDIuNDYJCToJCTIJCToJCTExODY5CitQTkcuTDIuNDcJCToJCTIJCToJCTExODY5CitQTkcuTDIuNDgJCToJCTIJCToJCTExODY5CitQTkcuTDIuNDkJCToJCTIJCToJCTExODY5CitQTkcuTDIuNTAJCToJCTIJCToJCTExODY5CitQTkcuTDIuNTEJCToJCTIJCToJCTExODY5CitQTkcuTDIuNTIJCToJCTIJCToJCTExODY5CitQTkcuTDIuNTMJCToJCTIJCToJCTExODY5CitQTkcuTDIuNTQJCToJCTIJCToJCTExODY5CitQTkcuTDIuNTUJCToJCTIJCToJCTExODY5CitQTkcuTDIuNTYJCToJCTIJCToJCTExODY5CitQTkcuTDIuNTcJCToJCTIJCToJCTExODY5CitQTkcuTDIuNTgJCToJCTIJCToJCTExODY5CitQTkcuTDIuNTkJCToJCTIJCToJCTExODY5CitQTkcuTDIuNjAJCToJCTIJCToJCTExODY5CitQTkcuTDIuNjEJCToJCTIJCToJCTExODY5CitQTkcuTDIuNjIJCToJCTIJCToJCTExODY5CitQTkcuTDIuNjMJCToJCTIJCToJCTExODY5CitQTkcuTDIuNjQJCToJCTIJCToJCTExODY5CitQTkcuTDIuNjUJCToJCTIJCToJCTExODY5CitQTkcuTDIuNjYJCToJCTIJCToJCTExODY5CitQTkcuTDIuNjcJCToJCTIJCToJCTExODY5CitQTkcuTDIuNjgJCToJCTIJCToJCTExODY5CitQTkcuTDIuNjkJCToJCTIJCToJCTExODY5CitQTkcuTDIuNzAJCToJCTIJCToJCTExODY5CitQTkcuTDIuNzEJCToJCTIJCToJCTExODY5CitQTkcuTDIuNzIJCToJCTIJCToJCTExODY5CitQTkcuTDIuNzMJCToJCTIJCToJCTExODY5CitQTkcuTDIuNzQJCToJCTIJCToJCTExODY5CitQTkcuTDIuNzUJCToJCTIJCToJCTExODY5CitQTkcuTDIuNzYJCToJCTIJCToJCTExODY5CitQTkcuTDIuNzcJCToJCTIJCToJCTExODY5CitQTkcuTDIuNzgJCToJCTIJCToJCTExODY5CitQTkcuTDIuNzkJCToJCTIJCToJCTExODY5CitQTkcuTDIuODAJCToJCTIJCToJCTExODY5CitQTkcuTDIuODEJCToJCTIJCToJCTExODY5CitQTkcuTDIuODIJCToJCTIJCToJCTExODY5CitQTkcuTDIuODMJCToJCTIJCToJCTExODY5CitQTkcuTDIuODQJCToJCTIJCToJCTExODY5CitQTkcuTDIuODUJCToJCTIJCToJCTExODY5CitQTkcuTDIuODYJCToJCTIJCToJCTExODY5CitQTkcuTDIuODcJCToJCTIJCToJCTExODY5CitQTkcuTDIuODgJCToJCTIJCToJCTExODY5CitQTkcuTDIuODkJCToJCTIJCToJCTExODY5CitQTkcuTDIuOTAJCToJCTIJCToJCTExODY5CitQTkcuTDIuOTEJCToJCTIJCToJCTExODY5CitQTkcuTDIuOTIJCToJCTIJCToJCTExODY5CitQTkcuTDIuOTMJCToJCTIJCToJCTExODY5CitQTkcuTDIuOTQJCToJCTIJCToJCTExODY5CitQTkcuTDIuOTUJCToJCTIJCToJCTExODY5CitQTkcuTDIuOTYJCToJCTIJCToJCTExODY5CitQTkcuTDIuOTcJCToJCTIJCToJCTExODY5CitQTkcuTDIuOTgJCToJCTIJCToJCTExODY5CitQTkcuTDIuOTkJCToJCTIJCToJCTExODY5CitQTkcuTDIuMTAwCQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjEwMQkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi4xMDIJCToJCTIJCToJCTExODY5CitQTkcuTDIuMTAzCQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjEwNAkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi4xMDUJCToJCTIJCToJCTExODY5CitQTkcuTDIuMTA2CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjEwNwkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi4xMDgJCToJCTIJCToJCTExODY5CitQTkcuTDIuMTA5CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjExMAkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi4xMTEJCToJCTIJCToJCTExODY5CitQTkcuTDIuMTEyCQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjExMwkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi4xMTQJCToJCTIJCToJCTExODY5CitQTkcuTDIuMTE1CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjExNgkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi4xMTcJCToJCTIJCToJCTExODY5CitQTkcuTDIuMTE4CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjExOQkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi4xMjAJCToJCTIJCToJCTExODY5CitQTkcuTDIuMTIxCQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjEyMgkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi4xMjMJCToJCTIJCToJCTExODY5CitQTkcuTDIuMTI0CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjEyNQkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi4xMjYJCToJCTIJCToJCTExODY5CitQTkcuTDIuMTI3CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjEyOAkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi4xMjkJCToJCTIJCToJCTExODY5CitQTkcuTDIuMTMwCQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjEzMQkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi4xMzIJCToJCTIJCToJCTExODY5CitQTkcuTDIuMTMzCQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjEzNAkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi4xMzUJCToJCTIJCToJCTExODY5CitQTkcuTDIuMTM2CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjEzNwkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi4xMzgJCToJCTIJCToJCTExODY5CitQTkcuTDIuMTM5CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjE0MAkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi4xNDEJCToJCTIJCToJCTExODY5CitQTkcuTDIuMTQyCQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjE0MwkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi4xNDQJCToJCTIJCToJCTExODY5CitQTkcuTDIuMTQ1CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjE0NgkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi4xNDcJCToJCTIJCToJCTExODY5CitQTkcuTDIuMTQ4CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjE0OQkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi4xNTAJCToJCTIJCToJCTExODY5CitQTkcuTDIuMTUxCQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjE1MgkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi4xNTMJCToJCTIJCToJCTExODY5CitQTkcuTDIuMTU0CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjE1NQkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi4xNTYJCToJCTIJCToJCTExODY5CitQTkcuTDIuMTU3CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjE1OAkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi4xNTkJCToJCTIJCToJCTExODY5CitQTkcuTDIuMTYwCQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjE2MQkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi4xNjIJCToJCTIJCToJCTExODY5CitQTkcuTDIuMTYzCQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjE2NAkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi4xNjUJCToJCTIJCToJCTExODY5CitQTkcuTDIuMTY2CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjE2NwkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi4xNjgJCToJCTIJCToJCTExODY5CitQTkcuTDIuMTY5CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjE3MAkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi4xNzEJCToJCTIJCToJCTExODY5CitQTkcuTDIuMTcyCQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjE3MwkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi4xNzQJCToJCTIJCToJCTExODY5CitQTkcuTDIuMTc1CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjE3NgkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi4xNzcJCToJCTIJCToJCTExODY5CitQTkcuTDIuMTc4CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjE3OQkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi4xODAJCToJCTIJCToJCTExODY5CitQTkcuTDIuMTgxCQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjE4MgkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi4xODMJCToJCTIJCToJCTExODY5CitQTkcuTDIuMTg0CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjE4NQkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi4xODYJCToJCTIJCToJCTExODY5CitQTkcuTDIuMTg3CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjE4OAkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi4xODkJCToJCTIJCToJCTExODY5CitQTkcuTDIuMTkwCQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjE5MQkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi4xOTIJCToJCTIJCToJCTExODY5CitQTkcuTDIuMTkzCQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjE5NAkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi4xOTUJCToJCTIJCToJCTExODY5CitQTkcuTDIuMTk2CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjE5NwkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi4xOTgJCToJCTIJCToJCTExODY5CitQTkcuTDIuMTk5CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjIwMAkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi4yMDEJCToJCTIJCToJCTExODY5CitQTkcuTDIuMjAyCQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjIwMwkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi4yMDQJCToJCTIJCToJCTExODY5CitQTkcuTDIuMjA1CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjIwNgkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi4yMDcJCToJCTIJCToJCTExODY5CitQTkcuTDIuMjA4CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjIwOQkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi4yMTAJCToJCTIJCToJCTExODY5CitQTkcuTDIuMjExCQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjIxMgkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi4yMTMJCToJCTIJCToJCTExODY5CitQTkcuTDIuMjE0CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjIxNQkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi4yMTYJCToJCTIJCToJCTExODY5CitQTkcuTDIuMjE3CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjIxOAkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi4yMTkJCToJCTIJCToJCTExODY5CitQTkcuTDIuMjIwCQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjIyMQkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi4yMjIJCToJCTIJCToJCTExODY5CitQTkcuTDIuMjIzCQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjIyNAkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi4yMjUJCToJCTIJCToJCTExODY5CitQTkcuTDIuMjI2CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjIyNwkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi4yMjgJCToJCTIJCToJCTExODY5CitQTkcuTDIuMjI5CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjIzMAkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi4yMzEJCToJCTIJCToJCTExODY5CitQTkcuTDIuMjMyCQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjIzMwkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi4yMzQJCToJCTIJCToJCTExODY5CitQTkcuTDIuMjM1CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjIzNgkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi4yMzcJCToJCTIJCToJCTExODY5CitQTkcuTDIuMjM4CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjIzOQkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi4yNDAJCToJCTIJCToJCTExODY5CitQTkcuTDIuMjQxCQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjI0MgkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi4yNDMJCToJCTIJCToJCTExODY5CitQTkcuTDIuMjQ0CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjI0NQkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi4yNDYJCToJCTIJCToJCTExODY5CitQTkcuTDIuMjQ3CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjI0OAkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi4yNDkJCToJCTIJCToJCTExODY5CitQTkcuTDIuMjUwCQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjI1MQkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi4yNTIJCToJCTIJCToJCTExODY5CitQTkcuTDIuMjUzCQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjI1NAkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi4yNTUJCToJCTIJCToJCTExODY5CitQTkcuTDIuMjU2CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjI1NwkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi4yNTgJCToJCTIJCToJCTExODY5CitQTkcuTDIuMjU5CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjI2MAkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi4yNjEJCToJCTIJCToJCTExODY5CitQTkcuTDIuMjYyCQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjI2MwkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi4yNjQJCToJCTIJCToJCTExODY5CitQTkcuTDIuMjY1CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjI2NgkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi4yNjcJCToJCTIJCToJCTExODY5CitQTkcuTDIuMjY4CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjI2OQkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi4yNzAJCToJCTIJCToJCTExODY5CitQTkcuTDIuMjcxCQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjI3MgkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi4yNzMJCToJCTIJCToJCTExODY5CitQTkcuTDIuMjc0CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjI3NQkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi4yNzYJCToJCTIJCToJCTExODY5CitQTkcuTDIuMjc3CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjI3OAkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi4yNzkJCToJCTIJCToJCTExODY5CitQTkcuTDIuMjgwCQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjI4MQkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi4yODIJCToJCTIJCToJCTExODY5CitQTkcuTDIuMjgzCQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjI4NAkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi4yODUJCToJCTIJCToJCTExODY5CitQTkcuTDIuMjg2CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjI4NwkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi4yODgJCToJCTIJCToJCTExODY5CitQTkcuTDIuMjg5CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjI5MAkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi4yOTEJCToJCTIJCToJCTExODY5CitQTkcuTDIuMjkyCQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjI5MwkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi4yOTQJCToJCTIJCToJCTExODY5CitQTkcuTDIuMjk1CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjI5NgkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi4yOTcJCToJCTIJCToJCTExODY5CitQTkcuTDIuMjk4CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjI5OQkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi4zMDAJCToJCTIJCToJCTExODY5CitQTkcuTDIuMzAxCQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjMwMgkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi4zMDMJCToJCTIJCToJCTExODY5CitQTkcuTDIuMzA0CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjMwNQkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi4zMDYJCToJCTIJCToJCTExODY5CitQTkcuTDIuMzA3CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjMwOAkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi4zMDkJCToJCTIJCToJCTExODY5CitQTkcuTDIuMzEwCQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjMxMQkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi4zMTIJCToJCTIJCToJCTExODY5CitQTkcuTDIuMzEzCQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjMxNAkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi4zMTUJCToJCTIJCToJCTExODY5CitQTkcuTDIuMzE2CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjMxNwkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi4zMTgJCToJCTIJCToJCTExODY5CitQTkcuTDIuMzE5CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjMyMAkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi4zMjEJCToJCTIJCToJCTExODY5CitQTkcuTDIuMzIyCQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjMyMwkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi4zMjQJCToJCTIJCToJCTExODY5CitQTkcuTDIuMzI1CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjMyNgkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi4zMjcJCToJCTIJCToJCTExODY5CitQTkcuTDIuMzI4CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjMyOQkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi4zMzAJCToJCTIJCToJCTExODY5CitQTkcuTDIuMzMxCQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjMzMgkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi4zMzMJCToJCTIJCToJCTExODY5CitQTkcuTDIuMzM0CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjMzNQkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi4zMzYJCToJCTIJCToJCTExODY5CitQTkcuTDIuMzM3CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjMzOAkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi4zMzkJCToJCTIJCToJCTExODY5CitQTkcuTDIuMzQwCQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjM0MQkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi4zNDIJCToJCTIJCToJCTExODY5CitQTkcuTDIuMzQzCQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjM0NAkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi4zNDUJCToJCTIJCToJCTExODY5CitQTkcuTDIuMzQ2CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjM0NwkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi4zNDgJCToJCTIJCToJCTExODY5CitQTkcuTDIuMzQ5CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjM1MAkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi4zNTEJCToJCTIJCToJCTExODY5CitQTkcuTDIuMzUyCQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjM1MwkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi4zNTQJCToJCTIJCToJCTExODY5CitQTkcuTDIuMzU1CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjM1NgkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi4zNTcJCToJCTIJCToJCTExODY5CitQTkcuTDIuMzU4CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjM1OQkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi4zNjAJCToJCTIJCToJCTExODY5CitQTkcuTDIuMzYxCQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjM2MgkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi4zNjMJCToJCTIJCToJCTExODY5CitQTkcuTDIuMzY0CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjM2NQkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi4zNjYJCToJCTIJCToJCTExODY5CitQTkcuTDIuMzY3CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjM2OAkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi4zNjkJCToJCTIJCToJCTExODY5CitQTkcuTDIuMzcwCQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjM3MQkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi4zNzIJCToJCTIJCToJCTExODY5CitQTkcuTDIuMzczCQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjM3NAkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi4zNzUJCToJCTIJCToJCTExODY5CitQTkcuTDIuMzc2CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjM3NwkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi4zNzgJCToJCTIJCToJCTExODY5CitQTkcuTDIuMzc5CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjM4MAkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi4zODEJCToJCTIJCToJCTExODY5CitQTkcuTDIuMzgyCQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjM4MwkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi4zODQJCToJCTIJCToJCTExODY5CitQTkcuTDIuMzg1CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjM4NgkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi4zODcJCToJCTIJCToJCTExODY5CitQTkcuTDIuMzg4CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjM4OQkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi4zOTAJCToJCTIJCToJCTExODY5CitQTkcuTDIuMzkxCQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjM5MgkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi4zOTMJCToJCTIJCToJCTExODY5CitQTkcuTDIuMzk0CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjM5NQkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi4zOTYJCToJCTIJCToJCTExODY5CitQTkcuTDIuMzk3CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjM5OAkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi4zOTkJCToJCTIJCToJCTExODY5CitQTkcuTDIuNDAwCQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjQwMQkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi40MDIJCToJCTIJCToJCTExODY5CitQTkcuTDIuNDAzCQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjQwNAkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi40MDUJCToJCTIJCToJCTExODY5CitQTkcuTDIuNDA2CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjQwNwkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi40MDgJCToJCTIJCToJCTExODY5CitQTkcuTDIuNDA5CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjQxMAkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi40MTEJCToJCTIJCToJCTExODY5CitQTkcuTDIuNDEyCQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjQxMwkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi40MTQJCToJCTIJCToJCTExODY5CitQTkcuTDIuNDE1CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjQxNgkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi40MTcJCToJCTIJCToJCTExODY5CitQTkcuTDIuNDE4CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjQxOQkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi40MjAJCToJCTIJCToJCTExODY5CitQTkcuTDIuNDIxCQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjQyMgkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi40MjMJCToJCTIJCToJCTExODY5CitQTkcuTDIuNDI0CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjQyNQkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi40MjYJCToJCTIJCToJCTExODY5CitQTkcuTDIuNDI3CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjQyOAkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi40MjkJCToJCTIJCToJCTExODY5CitQTkcuTDIuNDMwCQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjQzMQkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi40MzIJCToJCTIJCToJCTExODY5CitQTkcuTDIuNDMzCQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjQzNAkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi40MzUJCToJCTIJCToJCTExODY5CitQTkcuTDIuNDM2CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjQzNwkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi40MzgJCToJCTIJCToJCTExODY5CitQTkcuTDIuNDM5CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjQ0MAkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi40NDEJCToJCTIJCToJCTExODY5CitQTkcuTDIuNDQyCQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjQ0MwkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi40NDQJCToJCTIJCToJCTExODY5CitQTkcuTDIuNDQ1CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjQ0NgkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi40NDcJCToJCTIJCToJCTExODY5CitQTkcuTDIuNDQ4CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjQ0OQkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi40NTAJCToJCTIJCToJCTExODY5CitQTkcuTDIuNDUxCQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjQ1MgkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi40NTMJCToJCTIJCToJCTExODY5CitQTkcuTDIuNDU0CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjQ1NQkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi40NTYJCToJCTIJCToJCTExODY5CitQTkcuTDIuNDU3CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjQ1OAkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi40NTkJCToJCTIJCToJCTExODY5CitQTkcuTDIuNDYwCQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjQ2MQkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi40NjIJCToJCTIJCToJCTExODY5CitQTkcuTDIuNDYzCQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjQ2NAkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi40NjUJCToJCTIJCToJCTExODY5CitQTkcuTDIuNDY2CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjQ2NwkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi40NjgJCToJCTIJCToJCTExODY5CitQTkcuTDIuNDY5CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjQ3MAkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi40NzEJCToJCTIJCToJCTExODY5CitQTkcuTDIuNDcyCQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjQ3MwkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi40NzQJCToJCTIJCToJCTExODY5CitQTkcuTDIuNDc1CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjQ3NgkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi40NzcJCToJCTIJCToJCTExODY5CitQTkcuTDIuNDc4CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjQ3OQkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi40ODAJCToJCTIJCToJCTExODY5CitQTkcuTDIuNDgxCQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjQ4MgkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi40ODMJCToJCTIJCToJCTExODY5CitQTkcuTDIuNDg0CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjQ4NQkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi40ODYJCToJCTIJCToJCTExODY5CitQTkcuTDIuNDg3CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjQ4OAkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi40ODkJCToJCTIJCToJCTExODY5CitQTkcuTDIuNDkwCQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjQ5MQkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi40OTIJCToJCTIJCToJCTExODY5CitQTkcuTDIuNDkzCQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjQ5NAkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi40OTUJCToJCTIJCToJCTExODY5CitQTkcuTDIuNDk2CQk6CQkyCQk6CQkxMTg2OQorQ2VudHJhbCAgCToJMQk6CTE4MzE1MworU2ltYnUgCToJMQk6CTI1ODc3NgorRWFzdCBOZXcgQnJpdGFpbiAJOgkxCToJMjIwMDM1CitFYXN0IFNlcGlrIAk6CTEJOgkzNDE1ODMKK0Vhc3Rlcm4gSGlnaGxhbmRzIAk6CTEJOgk0Mjk0ODAKK0VuZ2EgCToJMQk6CTI4OTI5OQorR3VsZiAJOgkxCToJMTA1MDUwCitNYWRhbmcgCToJMQk6CTM2MjgwNQorTWFudXMgCToJMQk6CTQzNTg5CitNaWxuZSBCYXkgCToJMQk6CTIwOTA1NAorTW9yb2JlIAk6CTEJOgk1MzY5MTcKK05hdGlvbmFsIENhcGl0YWwgRGlzdHJpY3QgCToJMQk6CTI1MjQ2OQorTmV3IElyZWxhbmQgCToJMQk6CTExODE0OAorTm9ydGggU29sb21vbnMgCToJMQk6CTE0MTE2MQorT3JvIChOb3J0aGVybikgCToJMQk6CTEzMjcxNAorU291dGhlcm4gSGlnaGxhbmRzIAk6CTEJOgk1NDQzNTIKK1dlc3QgTmV3IEJyaXRhaW4gCToJMQk6CTE4NDgzOAorV2VzdCBTZXBpayAJOgkxCToJMTg1NzkwCitXZXN0ZXJuIAk6CTEJOgkxNTIwNjcKK1dlc3Rlcm4gSGlnaGxhbmRzIAk6CTEJOgk0MzkwODUKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL1BBUkFHVUFZX0FSRUEudHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvUEFSQUdVQVlfQVJFQS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjY1ZWIyNgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL1BBUkFHVUFZX0FSRUEudHh0CkBAIC0wLDAgKzEsMjAgQEAKK1BhcmFndWF5CToJMAk6CTQwNjc1MAorQWx0byBQYXJhZ3VheSAgIAk6CTEJOgk4MjM0OQorQWx0byBQYXJhbmEgCToJMQk6CTE0ODk1CitBbWFtYmF5IAk6CTEJOgkxMjkzMworQXN1bmNpb24gCToJMQk6CTExNworQm9xdWVyb24gCToJMQk6CTkxNjY5CitDYWFndWF6dQk6CTEJOgkxMTQ3NAorQ2FhemFwYSAJOgkxCToJOTQ5NgorQ2FuaW5kZXl1IAk6CTEJOgkxNDY2NworQ2VudHJhbCAJOgkxCToJMjQ2NQorQ29uY2VwY2lvbiAJOgkxCToJMTgwNTEKK0NvcmRpbGxlcmEgCToJMQk6CTQ5NDgKK0d1YWlyYSAJOgkxCToJMzg0NgorSXRhcHVhIAk6CTEJOgkxNjUyNQorTWlzaW9uZXMgCToJMQk6CTk1NTYKK05lZW1idWN1IAk6CTEJOgkxMjE0NworUGFyYWd1YXJpCToJMQk6CTg3MDUKK1ByZXNpZGVudGUgSGF5ZXMgCToJMQk6CTcyOTA3CitTYW4gUGVkcm8gCToJMQk6CTIwMDAyCisKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL1BBUkFHVUFZX1BPUFVMQVRJT04udHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvUEFSQUdVQVlfUE9QVUxBVElPTi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGNlZjhhNAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL1BBUkFHVUFZX1BPUFVMQVRJT04udHh0CkBAIC0wLDAgKzEsMTkgQEAKK1BhcmFndWF5CToJMAk6CTY1MDY0NjQKK0FsdG8gUGFyYWd1YXkgICAJOgkxCToJMTMyNTAKK0FsdG8gUGFyYW5hIAk6CTEJOgk1NTk3NjkKK0FtYW1iYXkgCToJMQk6CTExNTMyMAorQXN1bmNpb24gCToJMQk6CTUxMDkxMAorQm9xdWVyb24gCToJMQk6CTQzNDgwCitDYWFndWF6dQk6CTEJOgk0NDMzMTEKK0NhYXphcGEgCToJMQk6CTEzOTA4MAorQ2FuaW5kZXl1IAk6CTEJOgkxNDAyNTAKK0NlbnRyYWwgCToJMQk6CTEzNjI2NTAKK0NvbmNlcGNpb24gCToJMQk6CTE3ODkwMAorQ29yZGlsbGVyYSAJOgkxCToJMjMzMTcwCitHdWFpcmEgCToJMQk6CTE3ODEzMAorSXRhcHVhIAk6CTEJOgk0NTk0ODAKK01pc2lvbmVzIAk6CTEJOgkxMDIyMzAKK05lZW1idWN1IAk6CTEJOgk3NjczMAorUGFyYWd1YXJpCToJMQk6CTIyNDg1MAorUHJlc2lkZW50ZSBIYXllcyAJOgkxCToJODIwMzAKK1NhbiBQZWRybyAJOgkxCToJMzE5NTQwCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9QRVJVX0FSRUEudHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvUEVSVV9BUkVBLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYWQ0ODMxCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvUEVSVV9BUkVBLnR4dApAQCAtMCwwICsxLDI2IEBACitQZXJ1CToJMAk6CTEyODUyMjAKK0FtYXpvbmFzCToJMQk6CTM5MjQ5LjEzCitBbmNhc2gJOgkxCToJMzU5MTQuODEKK2FwdXJpbWFjCToJMQk6CTIwODk1Ljc5CithcmVxdWlwYQk6CTEJOgk2MzM0NS4zOQorYXlhY3VjaG8JOgkxCToJNDM4MTQuODAKK2NhamFtYXJjYQk6CTEJOgkzMzMxNy41NAorZWwgY2FsbGFvCToJMQk6CTE0Ni45OAorY3V6Y28JOgkxCToJNzE5ODYuNTAKK2h1YW5jYXZlbGljYQk6CTEJOgkyMjEzMS40NworaHVhbnVjbwk6CTEJOgkzNjg0OC44NQoraWNhCToJMQk6CTIxMzI3LjgzCitqdW5pbgk6CTEJOgk0NDE5Ny4yMworbGEgbGliZXJ0YWQJOgkxCToJMjU0OTkuOTAKK2xhbWJheWVxdWUJOgkxCToJMTQyMTMuMzAKK2xpbWEJOgkxCToJMzQ4MDEuNTkKK2xvcmV0bwk6CTEJOgkzNjg4NTEuOTUKK21hZHJlIGRlIGRpb3MJOgkxCToJODUzMDAuNTQKK21vcXVlZ3VhCToJMQk6CTE1NzMzLjk3CitwYXNjbwk6CTEJOgkyNTMxOS41OQorcGl1cmEJOgkxCToJMzU4OTIuNDkKK3B1bm8JOgkxCToJNzE5OTkuMDAKK3NhbiBtYXJ0aW4JOgkxCToJNTEyNTMuMzEKK3RhY25hCToJMQk6CTE2MDc1Ljg5Cit0dW1iZXMJOgkxCToJNDY2OS4yMAordWNheWFsaQk6CTEJOgkxMDI0MTAuNTUKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL1BFUlVfUE9QVUxBVElPTi50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9QRVJVX1BPUFVMQVRJT04udHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhiYmY1OTgKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9QRVJVX1BPUFVMQVRJT04udHh0CkBAIC0wLDAgKzEsMjYgQEAKK1BlcnUJOgkwCToJMjgzMDI2MDMKK0FtYXpvbmFzCToJMQk6CTQzNTU1NgorQW5jYXNoCToJMQk6CTExMjM0MTAKK2FwdXJpbWFjCToJMQk6CTQ3MDcxOQorYXJlcXVpcGEJOgkxCToJMTExMzkxNgorYXlhY3VjaG8JOgkxCToJNTYxMDI5CitjYWphbWFyY2EJOgkxCToJMTUxNTgyNworZWwgY2FsbGFvCToJMQk6CTc5OTUzMAorY3V6Y28JOgkxCToJMTIyMzI0OAoraHVhbmNhdmVsaWNhCToJMQk6CTQ1MTUwOAoraHVhbnVjbwk6CTEJOgk4MjI4MDQKK2ljYQk6CTEJOgk2OTg0MzcKK2p1bmluCToJMQk6CTEyNjA3NzMKK2xhIGxpYmVydGFkCToJMQk6CTE1Mjg0NDgKK2xhbWJheWVxdWUJOgkxCToJMTEzMTQ2NworbGltYQk6CTEJOgk3ODgwMDM5Citsb3JldG8JOgkxCToJOTE5NTA1CittYWRyZSBkZSBkaW9zCToJMQk6CTEwMjE3NAorbW9xdWVndWEJOgkxCToJMTYwMjMyCitwYXNjbwk6CTEJOgkyNzA5ODcKK3BpdXJhCToJMQk6CTE2NjA5NTIKK3B1bm8JOgkxCToJMTI4MDU1NQorc2FuIG1hcnRpbgk6CTEJOgk3Njc4OTAKK3RhY25hCToJMQk6CTMwMTk2MAordHVtYmVzCToJMQk6CTIwNjU3OAordWNheWFsaQk6CTEJOgk0NjA1NTcKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL1BISUxJUFBJTkVTX0FSRUEudHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvUEhJTElQUElORVNfQVJFQS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzdmYzJjNwotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL1BISUxJUFBJTkVTX0FSRUEudHh0CkBAIC0wLDAgKzEsMTkgQEAKK1BoaWxsaXBpbmVzCToJMAk6CTMwMDAwMAorUmVnaW9uIDEJOgkxCToJMTI4NDAKK1JlZ2lvbiAyCToJMQk6CTI2ODM4CitSZWdpb24gMwk6CTEJOgkyMTQ3MAorUmVnaW9uIDQJOgkxCToJMTYyMjkKK1JlZ2lvbiBWCToJMQk6CTI3NDU2CitSZWdpb24gNQk6CTEJOgkxNzYzNAorUmVnaW9uIDYJOgkxCToJMjAyMjMKK1JlZ2lvbiA3CToJMQk6CTE0OTUxCitSZWdpb24gOCA6IDEgOiAyMTQzMgorUmVnaW9uIFoJOgkxCToJMjE0MzIKK1JlZ2lvbiA5CToJMQk6CTE2MDQyCitSZWdpb24gMTAJOgkxCToJMTcxMjUKK1JlZ2lvbiAxMQk6CTEJOgkxOTY3MQorUmVnaW9uIDEyCToJMQk6CTE4MzQ4CitSZWdpb24gMTMJOgkxCToJMTg4NDcKK0FSTU0gLSBBdXRvbm9tb3VzIFJlZ2lvbiBpbiBNdXNsaW0gTWluZGFuYW8gCToJMQk6CTEzMDEwCitDQVIJOgkxCToJMTgyOTQKK05DUgk6CTEJOgk2MzYKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL1BISUxJUFBJTkVTX1BPUFVMQVRJT04udHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvUEhJTElQUElORVNfUE9QVUxBVElPTi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODdhNWJiNwotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL1BISUxJUFBJTkVTX1BPUFVMQVRJT04udHh0CkBAIC0wLDAgKzEsMTkgQEAKK1BoaWxsaXBpbmVzCToJMAk6CTg5NDY4Njc3CitSZWdpb24gMQk6CTEJOgk0MjAwMzI5CitSZWdpb24gMgk6CTEJOgkyODEzMTU5CitSZWdpb24gMwk6CTEJOgk4MjAwMTUxCitSZWdpb24gNAk6CTEJOgk5MzIwNjI5CitSZWdpb24gVgk6CTEJOgkyMjk4Nzk2CitSZWdpb24gNQk6CTEJOgk0NjMyNjg5CitSZWdpb24gNgk6CTEJOgk2MjA4NzMzCitSZWdpb24gNwk6CTEJOgk1NzAwNjI4CitSZWdpb24gOCA6IDEgOiAzNjEwMzU1CitSZWdpb24gWgk6CTEJOgkzNjEwMTkxCitSZWdpb24gOQk6CTEJOgkyODMxMzQyCitSZWdpb24gMTAJOgkxCToJMzQ5MzgwNgorUmVnaW9uIDExCToJMQk6CTM2NzYxNjMKK1JlZ2lvbiAxMgk6CTEJOgkzMjA4NzcwCitSZWdpb24gMTMJOgkxCToJMjA5NDAyMQorQVJNTSAtIEF1dG9ub21vdXMgUmVnaW9uIGluIE11c2xpbSBNaW5kYW5hbyAJOgkxCToJMjgwMzA0NQorQ0FSCToJMQk6CTEzNjUyMjAKK05DUgk6CTEJOgk5OTA2MDQ4CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9QT0xBTkRfQVJFQS50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9QT0xBTkRfQVJFQS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjkzNjA0NwotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL1BPTEFORF9BUkVBLnR4dApAQCAtMCwwICsxLDUwIEBACisgUE9MQU5EIDogMCA6IDMxMjY4My4wCisgR2RhbnNrIDogMSA6IDczOTQuMAorIFNsdXBzayA6IDEgOiA3NDUzLjAKKyBLb3N6YWxpbiA6IDEgOiA4NDcwLjAKKyBFbGJsYWcgOiAxIDogNjEwMy4wCisgU3V3YWxza2kgOiAxIDogMTA0OTAuMAorIE9sc3p0eW4gOiAxIDogMTIzMjcuMAorIFN6Y3plY2luIDogMSA6IDk5ODEuMAorIEJ5ZGdvc3pjeiA6IDEgOiAxMDM0OS4wCisgTG9temEgOiAxIDogNjY4NC4wCisgQmlhbHlzdG9rIDogMSA6IDEwMDU1LjAKKyBQaWxhIDogMSA6IDgyMDUuMAorIFRvcnVuIDogMSA6IDUzNDguMAorIE9zdHJvbGVrYSA6IDEgOiA2NDk4LjAKKyBDaWVjaGFub3cgOiAxIDogNjM2Mi4wCisgR29yem93IDogMSA6IDg0ODQuMAorIFdsb2NsYXdlayA6IDEgOiA0NDAyLjAKKyBQbG9jayA6IDEgOiA1MTE3LjAKKyBQb3puYW4gOiAxIDogODE1MS4wCisgU2llZGxjZSA6IDEgOiA4NDk5LjAKKyBXYXJzemF3YSA6IDEgOiAzNzg4LjAKKyBLb25pbiA6IDEgOiA1MTM5LjAKKyBCaWFsYSBQb2RsYXNrYSA6IDEgOiA1MzQ4LjAKKyBaaWVsb25hIEdvcmEgOiAxIDogODg2OC4wCisgU2tpZXJuaWV3aWNlIDogMSA6IDM5NjAuMAorIExlc3pubyA6IDEgOiA0MTU0LjAKKyBLYWxpc3ogOiAxIDogNjUxMi4wCisgTG9keiA6IDEgOiAxNTIzLjAKKyBTaWVyYWR6IDogMSA6IDQ4NjkuMAorIFJhZG9tIDogMSA6IDcyOTQuMAorIEx1YmxpbiA6IDEgOiA2NzkyLjAKKyBMZWduaWNhIDogMSA6IDQwMzcuMAorIFBpb3Rya293IDogMSA6IDYyNjYuMAorIENoZWxtIDogMSA6IDM4NjYuMAorIFdyb2NsYXcgOiAxIDogNjI4Ny4wCisgSmVsZW5pYSBHb3JhIDogMSA6IDQzNzguMAorIEtpZWxjZSA6IDEgOiA5MjExLjAKKyBDemVzdG9jaG93YSA6IDEgOiA2MTgyLjAKKyBPcG9sZSA6IDEgOiA4NTM1LjAKKyBUYXJub2JyemVnIDogMSA6IDYyODMuMAorIFdhbGJyenljaCA6IDEgOiA0MTY4LjAKKyBaYW1vc2MgOiAxIDogNjk4MC4wCisgS2F0b3dpY2UgOiAxIDogNjY1MC4wCisgUnplc3pvdyA6IDEgOiA0Mzk3LjAKKyBQcnplbXlzbCA6IDEgOiA0NDM3LjAKKyBLcmFrb3cgOiAxIDogMzI1NC4wCisgVGFybm93IDogMSA6IDQxNTEuMAorIEJpZWxza28tQmlhbGEgOiAxIDogMzcwNC4wCisgS3Jvc25vIDogMSA6IDU3MDIuMAorIE5vd3kgU2FjeiA6IDEgOiA1NTc2LjAKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL1BPTEFORF9QT1BVTEFUSU9OLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL1BPTEFORF9QT1BVTEFUSU9OLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZGM2NDZlCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvUE9MQU5EX1BPUFVMQVRJT04udHh0CkBAIC0wLDAgKzEsNDkgQEAKKyBHZGFuc2sgOiAxIDogMTQzMTU2OQorIFNsdXBzayA6IDEgOiA0MTM4MjAKKyBLb3N6YWxpbiA6IDEgOiA1MDgxNzIKKyBFbGJsYWcgOiAxIDogNDc4ODY1CisgU3V3YWxza2kgOiAxIDogNDcxNjIzCisgT2xzenR5biA6IDEgOiA3NTMwMzIKKyBTemN6ZWNpbiA6IDEgOiA5NzIwNzMKKyBCeWRnb3N6Y3ogOiAxIDogMTExMDc3MgorIExvbXphIDogMSA6IDM0NjcwNQorIEJpYWx5c3RvayA6IDEgOiA2OTI4MjEKKyBQaWxhIDogMSA6IDQ4MDc0NQorIFRvcnVuIDogMSA6IDY1OTExNworIE9zdHJvbGVrYSA6IDEgOiAzOTcyNzYKKyBDaWVjaGFub3cgOiAxIDogNDI4MzYxCisgR29yem93IDogMSA6IDUwMDY2NgorIFdsb2NsYXdlayA6IDEgOiA0Mjk0MzMKKyBQbG9jayA6IDEgOiA1MTY0MzEKKyBQb3puYW4gOiAxIDogMTMzNDA5MQorIFNpZWRsY2UgOiAxIDogNjUxNDMzCisgV2Fyc3phd2EgOiAxIDogMjQyMTU5NAorIEtvbmluIDogMSA6IDQ2OTE5MQorIEJpYWxhIFBvZGxhc2thIDogMSA6IDMwNTMzNworIFppZWxvbmEgR29yYSA6IDEgOiA2NTk5NzMKKyBTa2llcm5pZXdpY2UgOiAxIDogNDE5MzM5CisgTGVzem5vIDogMSA6IDM4NjgzNworIEthbGlzeiA6IDEgOiA3MTA3NDYKKyBMb2R6IDogMSA6IDExMzk0OTgKKyBTaWVyYWR6IDogMSA6IDQwODE0MgorIFJhZG9tIDogMSA6IDc1MTEyNgorIEx1YmxpbiA6IDEgOiAxMDE2MzU1CisgTGVnbmljYSA6IDEgOiA1MTU4NTkKKyBQaW90cmtvdyA6IDEgOiA2NDI2MjUKKyBDaGVsbSA6IDEgOiAyNDcyMjYKKyBXcm9jbGF3IDogMSA6IDExMjg3OTEKKyBKZWxlbmlhIEdvcmEgOiAxIDogNTE3ODgwCisgS2llbGNlIDogMSA6IDExMjY2NjgKKyBDemVzdG9jaG93YSA6IDEgOiA3NzY2NjIKKyBPcG9sZSA6IDEgOiAxMDE4NjEwCisgVGFybm9icnplZyA6IDEgOiA1OTkwNjEKKyBXYWxicnp5Y2ggOiAxIDogNzQwODk4CisgWmFtb3NjIDogMSA6IDQ5MDM5NgorIEthdG93aWNlIDogMSA6IDM5ODg4MzEKKyBSemVzem93IDogMSA6IDcyMzY5NworIFByemVteXNsIDogMSA6IDQwNjc3MQorIEtyYWtvdyA6IDEgOiAxMjMxNjM2CisgVGFybm93IDogMSA6IDY3MDI2MQorIEJpZWxza28tQmlhbGEgOiAxIDogOTAwMjU5CisgS3Jvc25vIDogMSA6IDQ5NTAxMQorIE5vd3kgU2FjeiA6IDEgOiA2OTc4NzUKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL1BPUlRVR0FMX0FSRUEudHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvUE9SVFVHQUxfQVJFQS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjI4NTNmOQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL1BPUlRVR0FMX0FSRUEudHh0CkBAIC0wLDAgKzEsNSBAQAorIE5PUlRFIDogMSA6IDIxMjkwLjAKKyBDRU5UUk8gOiAxIDogMjM2NjcuMAorIExJU0JPQSBFIFZBTEUgRE8gVEVKTyA6IDEgOiAxMTk4Mi4wCisgQUxFTlRFSk8gOiAxIDogMjY5OTYuMAorIEFMR0FSVkUgOiAxIDogNDk5MC4wCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9QT1JUVUdBTF9QT1BVTEFUSU9OLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL1BPUlRVR0FMX1BPUFVMQVRJT04udHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRhMzFiYTcKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9QT1JUVUdBTF9QT1BVTEFUSU9OLnR4dApAQCAtMCwwICsxLDUgQEAKKyBOT1JURSA6IDEgOiAzNjQzMzAwCisgQ0VOVFJPIDogMSA6IDE3ODA1MDAKKyBMSVNCT0EgRSBWQUxFIERPIFRFSk8gOiAxIDogMzQ3NjYwMAorIEFMRU5URUpPIDogMSA6IDU2MzYwMAorIEFMR0FSVkUgOiAxIDogMzQ0OTAwCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9QVUVSVE8gUklDT19BUkVBLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL1BVRVJUTyBSSUNPX0FSRUEudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNmMDE3MGYKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9QVUVSVE8gUklDT19BUkVBLnR4dApAQCAtMCwwICsxLDc5IEBACitQdWVydG8gUmljbwk6CTEJOgk1MzI0LjUwCitBZGp1bnRhcyAJOgkxCToJNjcuMTEKK0FndWFkYSAJOgkxCToJNDUuNTUKK0FndWFkaWxsYSAJOgkxCToJNzUuNTYKK0FndWFzIEJ1ZW5hcyAJOgkxCToJMzAuNTcKK0FpYm9uaXRvIAk6CTEJOgkzMS4zCitB8WFzY28gCToJMQk6CTQ0LjkKK0FyZWNpYm8gCToJMQk6CTE3MS4yMgorQXJyb3lvIAk6CTEJOgkzNS42NAorQmFyY2Vsb25ldGEgCToJMQk6CTMwLjkKK0JhcnJhbnF1aXRhcyAJOgkxCToJMzQuMjMKK0JheWFt824gCToJMQk6CTQ0LjUzCitDYWJvIFJvam8gCToJMQk6CTE3Ny40CitDYWd1YXMgCToJMQk6CTU5LjA3CitDYW11eSAJOgkxCToJNjEuOTEKK0NhbvN2YW5hcyAJOgkxCToJMzIuOTcKK0Nhcm9saW5hIAk6CTEJOgk2MC4zNAorQ2F0YfFvIAk6CTEJOgk3LjA0CitDYXlleSAJOgkxCToJNTEuOTEKK0NlaWJhIAk6CTEJOgkxNTguODIKK0NpYWxlcyAJOgkxCToJNjYuODEKK0NpZHJhIAk6CTEJOgkzNi41MQorQ29hbW8gCToJMQk6CTc4LjA1CitDb21lcu1vIAk6CTEJOgkyOC41MgorQ29yb3phbCAJOgkxCToJNDIuNTkKK0N1bGVicmEgCToJMQk6CTE2OC44MworRG9yYWRvIAk6CTEJOgk1My44MworRmFqYXJkbyAJOgkxCToJMTA1LjMyCitGbG9yaWRhIAk6CTEJOgkxNS4yCitHdeFuaWNhIAk6CTEJOgk3OS40NgorR3VheWFtYSAJOgkxCToJMTA2LjgxCitHdWF5YW5pbGxhIAk6CTEJOgk2NC4zMQorR3VheW5hYm8gCToJMQk6CTI3LjMxCitHdXJhYm8gCToJMQk6CTI4LjI4CitIYXRpbGxvIAk6CTEJOgk1OC43MworSG9ybWlndWVyb3MgCToJMQk6CTExLjMyCitIdW1hY2FvIAk6CTEJOgk3MS40CitJc2FiZWxhIAk6CTEJOgk5MS45NQorSmF5dXlhIAk6CTEJOgk0NC41OQorSnVhbmEgRO1heiAJOgkxCToJMTA3LjA0CitKdW5jb3MgCToJMQk6CTI2LjYKK0xhamFzIAk6CTEJOgkxMDEuMTQKK0xhcmVzIAk6CTEJOgk2MS42NQorTGFzIE1hcu1hcyAJOgkxCToJNDYuNDkKK0xhcyBQaWVkcmFzIAk6CTEJOgkzMy44OQorTG/temEgCToJMQk6CTY1LjcxCitMdXF1aWxsbyAJOgkxCToJNDYuNDIKK01hbmF07SAJOgkxCToJNzAuNjkKK01hcmljYW8gCToJMQk6CTM2LjYzCitNYXVuYWJvIAk6CTEJOgkzOC4yNQorTWF5YWf8ZXogCToJMQk6CTI3NC4wOQorTW9jYSAJOgkxCToJNTAuMjkKK01vcm92aXMgCToJMQk6CTM4LjkyCitOYWd1YWJvIAk6CTEJOgk3Mi4yNgorTmFyYW5qaXRvIAk6CTEJOgkyNy43CitPcm9jb3ZpcyAJOgkxCToJNjMuNjYKK1BhdGlsbGFzIAk6CTEJOgk3NS4zMgorUGXxdWVsYXMgCToJMQk6CTY3Ljc3CitQb25jZSAJOgkxCToJMTkzLjYxCitRdWVicmFkaWxsYXMgCToJMQk6CTM0LjMyCitSaW5j824gCToJMQk6CTU0LjQxCitS7W8gR3JhbmRlIAk6CTEJOgk4OS42MgorU2FiYW5hIEdyYW5kZSAJOgkxCToJMzUuODkKK1NhbGluYXMgCToJMQk6CTExNC4xNAorU2FuIEdlcm3hbiAJOgkxCToJNTQuNTEKK1NhbiBKdWFuIAk6CTEJOgk3Ni45MworU2FuIExvcmVuem8gCToJMQk6CTUzLjIyCitTYW4gU2ViYXN0aeFuIAk6CTEJOgk3MS4yNAorU2FudGEgSXNhYmVsIAk6CTEJOgk3Ni45NQorVG9hIEFsdGEgCToJMQk6CTI3LjU3CitUb2EgQmFqYSAJOgkxCToJNDEuNworVHJ1amlsbG8gQWx0byAJOgkxCToJMjEuMzUKK1V0dWFkbyAJOgkxCToJMTE0Ljk5CitWZWdhIEFsdGEgCToJMQk6CTM3LjUxCitWZWdhIEJhamEgCToJMQk6CTY4LjE3CitWaWVxdWVzIAk6CTEJOgkyNjMuOTgKK1ZpbGxhbGJhIAk6CTEJOgkzNy4wNQorWWFidWNvYSAJOgkxCToJODMuMjYKK1lhdWNvIAk6CTEJOgk2OC43NgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvUFVFUlRPIFJJQ09fUE9QVUxBVElPTi50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9QVUVSVE8gUklDT19QT1BVTEFUSU9OLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZGYzNTE3Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvUFVFUlRPIFJJQ09fUE9QVUxBVElPTi50eHQKQEAgLTAsMCArMSw3OSBAQAorUHVlcnRvIFJpY28gOiAxIDogMzkxMjA1NAorQWRqdW50YXMgCToJMQk6CTE5MTQzCitBZ3VhZGEgCToJMQk6CTQyMDQyCitBZ3VhZGlsbGEgCToJMQk6CTY0Njg1CitBZ3VhcyBCdWVuYXMgCToJMQk6CTI5MDMyCitBaWJvbml0byAJOgkxCToJMjY0OTMKK0HxYXNjbyAJOgkxCToJMjgzNDgKK0FyZWNpYm8gCToJMQk6CTEwMDEzMQorQXJyb3lvIAk6CTEJOgkxOTExNworQmFyY2Vsb25ldGEgCToJMQk6CTIyMzIyCitCYXJyYW5xdWl0YXMgCToJMQk6CTI4OTA5CitCYXlhbfNuIAk6CTEJOgkyMjQwNDQKK0NhYm8gUm9qbyAJOgkxCToJNDY5MTEKK0NhZ3VhcyAJOgkxCToJMTQwNTAyCitDYW11eSAJOgkxCToJMzUyNDQKK0NhbvN2YW5hcyAJOgkxCToJNDMzMzUKK0Nhcm9saW5hIAk6CTEJOgkxODYwNzYKK0NhdGHxbyAJOgkxCToJMzAwNzEKK0NheWV5IAk6CTEJOgk0NzM3MAorQ2VpYmEgCToJMQk6CTE4MDA0CitDaWFsZXMgCToJMQk6CTE5ODExCitDaWRyYSAJOgkxCToJNDI3NTMKK0NvYW1vIAk6CTEJOgkzNzU5NworQ29tZXLtbyAJOgkxCToJMjAwMDIKK0Nvcm96YWwgCToJMQk6CTM2ODY3CitDdWxlYnJhIAk6CTEJOgkxODY4CitEb3JhZG8gCToJMQk6CTM0MDE3CitGYWphcmRvIAk6CTEJOgk0MDcxMgorRmxvcmlkYSAJOgkxCToJMTIzNjcKK0d14W5pY2EgCToJMQk6CTIxODg4CitHdWF5YW1hIAk6CTEJOgk0NDMwMQorR3VheWFuaWxsYSAJOgkxCToJMjMwNzIKK0d1YXluYWJvIAk6CTEJOgkxMDAwNTMKK0d1cmFibyAJOgkxCToJMzY3NDMKK0hhdGlsbG8gCToJMQk6CTM4OTI1CitIb3JtaWd1ZXJvcyAJOgkxCToJMTY2MTQKK0h1bWFjYW8gCToJMQk6CTU5MDM1CitJc2FiZWxhIAk6CTEJOgk0NDQ0NAorSmF5dXlhIAk6CTEJOgkxNzMxOAorSnVhbmEgRO1heiAJOgkxCToJNTA1MzEKK0p1bmNvcyAJOgkxCToJMzY0NTIKK0xhamFzIAk6CTEJOgkyNjI2MQorTGFyZXMgCToJMQk6CTM0NDE1CitMYXMgTWFy7WFzIAk6CTEJOgkxMTA2MQorTGFzIFBpZWRyYXMgCToJMQk6CTM0NDg1CitMb+16YSAJOgkxCToJMzI1MzcKK0x1cXVpbGxvIAk6CTEJOgkxOTgxNworTWFuYXTtIAk6CTEJOgk0NTQwOQorTWFyaWNhbyAJOgkxCToJNjQ0OQorTWF1bmFibyAJOgkxCToJMTI3NDEKK01heWFn/GV6IAk6CTEJOgk5ODQzNAorTW9jYSAJOgkxCToJMzk2OTcKK01vcm92aXMgCToJMQk6CTI5OTY1CitOYWd1YWJvIAk6CTEJOgkyMzc1MworTmFyYW5qaXRvIAk6CTEJOgkyOTcwOQorT3JvY292aXMgCToJMQk6CTIzODQ0CitQYXRpbGxhcyAJOgkxCToJMjAxNTIKK1Bl8XVlbGFzIAk6CTEJOgkyNjcxOQorUG9uY2UgCToJMQk6CTE4NjQ3NQorUXVlYnJhZGlsbGFzIAk6CTEJOgkyNTQ1MAorUmluY/NuIAk6CTEJOgkxNDc2NworUu1vIEdyYW5kZSAJOgkxCToJNTIzNjIKK1NhYmFuYSBHcmFuZGUgCToJMQk6CTI1OTM1CitTYWxpbmFzIAk6CTEJOgkzMTExMworU2FuIEdlcm3hbiAJOgkxCToJMzcxMDUKK1NhbiBKdWFuIAk6CTEJOgk0MzQzNzQKK1NhbiBMb3JlbnpvIAk6CTEJOgk0MDk5NworU2FuIFNlYmFzdGnhbiAJOgkxCToJNDQyMDQKK1NhbnRhIElzYWJlbCAJOgkxCToJMjE2NjUKK1RvYSBBbHRhIAk6CTEJOgk2MzkyOQorVG9hIEJhamEgCToJMQk6CTk0MDg1CitUcnVqaWxsbyBBbHRvIAk6CTEJOgk3NTcyOAorVXR1YWRvIAk6CTEJOgkzNTMzNgorVmVnYSBBbHRhIAk6CTEJOgkzNzkxMAorVmVnYSBCYWphIAk6CTEJOgk2MTkyOQorVmllcXVlcyAJOgkxCToJOTEwNgorVmlsbGFsYmEgCToJMQk6CTI3OTEzCitZYWJ1Y29hIAk6CTEJOgkzOTI0NgorWWF1Y28gCToJMQk6CTQ2Mzg0CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9RQVRBUl9BUkVBLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL1FBVEFSX0FSRUEudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRlN2M0OGYKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9RQVRBUl9BUkVBLnR4dApAQCAtMCwwICsxLDEyIEBACitRYXRhcgk6CTAJOgkxMTQzNworUWF0YXIgOiAxIDogMTE0MzcKK0FsIEdodXdhaXJpeWEgIAk6CTEJOgk2MjIuNworQWwgSmVtYWlseWEgCToJMQk6CTI2MTEuNzAKK0FsIEtob3IgCToJMQk6CTEwMDEuNDAKK0FsIFJheXlhbiAJOgkxCToJODkzLjUKK0FsIFNoYW1hbCAJOgkxCToJOTAyLjEKK0FsIFdha3JhIAk6CTEJOgkxMTE2LjMwCitEb2hhIAk6CTEJOgkxNTguNworSmVyeWFuIEFsIEJldG5hIAk6CTEJOgkyMzg5LjQwCitNZXNhaWVlZCAJOgkxCToJMTM1NC44MAorVW1tIFNhbGFsIAk6CTEJOgk0NzAuNApkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvUUFUQVJfUE9QVUxBVElPTi50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9RQVRBUl9QT1BVTEFUSU9OLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZWFmMmZkCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvUUFUQVJfUE9QVUxBVElPTi50eHQKQEAgLTAsMCArMSwxNCBAQAorUWF0YXIJOgkwCToJODg1MzU5CitRYXRhciA6IDEgOiA4ODUzNTkKK0FsIEdodXdhaXJpeWEgIAk6CTEJOgkyMTU5CitBbCBKZW1haWx5YSAJOgkxCToJMTAzMDMKK0FsIEtob3IgCToJMQk6CTMxNTQ3CitBbCBSYXl5YW4gCToJMQk6CTI3Mjg2MAorQWwgU2hhbWFsIAk6CTEJOgk0OTE1CitBbCBXYWtyYSAJOgkxCToJMzE0NDEKK0RvaGEgCToJMQk6CTMzOTg0NworSmVyeWFuIEFsIEJldG5hIAk6CTEJOgk2Njc4CitNZXNhaWVlZCAJOgkxCToJMTI2NzQKK1VtbSBTYWxhbCAJOgkxCToJMzE2MDUKKworCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9ST01BTklBX0FSRUEudHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvUk9NQU5JQV9BUkVBLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMzE0M2IzCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvUk9NQU5JQV9BUkVBLnR4dApAQCAtMCwwICsxLDQxIEBACisgQm90b3NhbmkgOiAxIDogNDk2NS4wCisgU2F0dSBNYXJlIDogMSA6IDQ0MDUuMAorIE1hcmFtdXJlcyA6IDEgOiA2MjE1LjAKKyBTdWNlYXZhIDogMSA6IDg1NTUuMAorIEJpc3RyaXRhLU5hc2F1ZCA6IDEgOiA1MzA1LjAKKyBCaWhvciA6IDEgOiA3NTM1LjAKKyBJYXNpIDogMSA6IDU0NjkuMAorIFNhbGFqIDogMSA6IDM4NTAuMAorIENsdWogOiAxIDogNjY1MC4wCisgTmVhbXQgOiAxIDogNTg5MC4wCisgSGFyZ2hpdGEgOiAxIDogNjYxMC4wCisgTXVyZXMgOiAxIDogNjY5Ni4wCisgVmFzbHVpIDogMSA6IDUyOTcuMAorIEJhY2F1IDogMSA6IDY2MDYuMAorIEFyYWQgOiAxIDogNzY1Mi4wCisgQWxiYSA6IDEgOiA2MjMxLjAKKyBIdW5lZG9hcmEgOiAxIDogNzAxNi4wCisgQ292YXNuYSA6IDEgOiAzNzA1LjAKKyBTaWJpdSA6IDEgOiA1NDIyLjAKKyBUaW1pcyA6IDEgOiA4NjkyLjAKKyBCcmFzb3YgOiAxIDogNTM1MS4wCisgVnJhbmNlYSA6IDEgOiA0ODYzLjAKKyBHYWxhdGkgOiAxIDogNDQyNS4wCisgQnV6YXUgOiAxIDogNjA3Mi4wCisgQ2FyYXMtU2V2ZXJpbiA6IDEgOiA4NTAzLjAKKyBBcmdlcyA6IDEgOiA2ODAxLjAKKyBWaWxjZWEgOiAxIDogNTcwNS4wCisgUHJhaG92YSA6IDEgOiA0Njk0LjAKKyBCcmFpbGEgOiAxIDogNDcyNC4wCisgVHVsY2VhIDogMSA6IDg0MzAuMAorIERpbWJvdml0YSA6IDEgOiA0MDM2LjAKKyBHb3JqIDogMSA6IDU2NDEuMAorIE1laGVkaW50aSA6IDEgOiA0OTAwLjAKKyBPbHQgOiAxIDogNTUwNy4wCisgSWFsb21pdGEgOiAxIDogNDQ0OS4wCisgQ2FsYXJhc2kgOiAxIDogNTA3NC4wCisgQnVjdXJlc3RpIDogMSA6IDE4MjAuMAorIERvbGogOiAxIDogNzQxMy4wCisgQ29uc3RhbnRhIDogMSA6IDcwNTUuMAorIEdpdXJnaXUgOiAxIDogMzUxMS4wCisgVGVsZW9ybWFuIDogMSA6IDU3NjAuMApkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvUk9NQU5JQV9QT1BVTEFUSU9OLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL1JPTUFOSUFfUE9QVUxBVElPTi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjRhZDkzNgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL1JPTUFOSUFfUE9QVUxBVElPTi50eHQKQEAgLTAsMCArMSw0MSBAQAorIEJvdG9zYW5pIDogMSA6IDQ3MDAxMQorIFNhdHUgTWFyZSA6IDEgOiA0MTY4ODkKKyBNYXJhbXVyZXMgOiAxIDogNTU5OTg5CisgU3VjZWF2YSA6IDEgOiA3MDYxNTIKKyBCaXN0cml0YS1OYXNhdWQgOiAxIDogMzI5MjU5CisgQmlob3IgOiAxIDogNjYwMTMxCisgSWFzaSA6IDEgOiA4MjE4MDEKKyBTYWxhaiA6IDEgOiAyNjk1NjYKKyBDbHVqIDogMSA6IDc0NDA0OQorIE5lYW10IDogMSA6IDU5MDAwMAorIEhhcmdoaXRhIDogMSA6IDM2MTg1NgorIE11cmVzIDogMSA6IDYyMTQ5MworIFZhc2x1aSA6IDEgOiA0Njg5MjEKKyBCYWNhdSA6IDEgOiA3NDMzMjMKKyBBcmFkIDogMSA6IDUwODMwMgorIEFsYmEgOiAxIDogNDI0MjU4CisgSHVuZWRvYXJhIDogMSA6IDU2Nzc1NAorIENvdmFzbmEgOiAxIDogMjM3NjY5CisgU2liaXUgOiAxIDogNTAxNTQ2CisgVGltaXMgOiAxIDogNzIyNDI2CisgQnJhc292IDogMSA6IDY5NjQ0MQorIFZyYW5jZWEgOiAxIDogMzk0OTAxCisgR2FsYXRpIDogMSA6IDY1MTQ4NAorIEJ1emF1IDogMSA6IDUyMTMzNAorIENhcmFzLVNldmVyaW4gOiAxIDogNDAzMjM1CisgQXJnZXMgOiAxIDogNjgxNzM1CisgVmlsY2VhIDogMSA6IDQzMjk1OQorIFByYWhvdmEgOiAxIDogODgwNDY1CisgQnJhaWxhIDogMSA6IDQwMzg1NgorIFR1bGNlYSA6IDEgOiAyNzA4ODYKKyBEaW1ib3ZpdGEgOiAxIDogNTY4MTM0CisgR29yaiA6IDEgOiAzODg2MjEKKyBNZWhlZGludGkgOiAxIDogMzI3MjM5CisgT2x0IDogMSA6IDUzMDQyNQorIElhbG9taXRhIDogMSA6IDMwNDQ2NAorIENhbGFyYXNpIDogMSA6IDM0MTYzMQorIEJ1Y3VyZXN0aSA6IDEgOiAyMzc1Njc5CisgRG9saiA6IDEgOiA3NzYxNjEKKyBDb25zdGFudGEgOiAxIDogNzU3OTQxCisgR2l1cmdpdSA6IDEgOiAzMTQ5NDUKKyBUZWxlb3JtYW4gOiAxIDogNDk0MzIyCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9SVVNTSUFfQVJFQS50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9SVVNTSUFfQVJFQS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDg2YWMzNwotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL1JVU1NJQV9BUkVBLnR4dApAQCAtMCwwICsxLDUzNDkgQEAKK1JVLVVOSy0xIDogMSA6IDI5Ny44OTk5OQorUlUtVU5LLTIgOiAxIDogMjc4LjUKK1JVLVVOSy0zIDogMSA6IDEuMAorUlUtVU5LLTQgOiAxIDogMzIuNTk5OTk4CitSVS1VTkstNSA6IDEgOiAxLjUKK1JVLVVOSy02IDogMSA6IDMuNDAwMDAwMQorUlUtVU5LLTcgOiAxIDogMS4wCitSVS1VTkstOCA6IDEgOiAzOS4wOTk5OTgKK1JVLVVOSy05IDogMSA6IDM0NC43OTk5OQorUlUtVU5LLTEwIDogMSA6IDEuMAorUlUtVU5LLTExIDogMSA6IDQuMzAwMDAwMgorUlUtVU5LLTEyIDogMSA6IDEuNAorUlUtVU5LLTEzIDogMSA6IDE0MS4xMDAwMQorUlUtVU5LLTE0IDogMSA6IDUxMC42MDAwMQorUlUtVU5LLTE1IDogMSA6IDIuMAorUlUtVU5LLTE2IDogMSA6IDEuMAorUlUtVU5LLTE3IDogMSA6IDEwLjQKK1JVLVVOSy0xOCA6IDEgOiA1Ny43OTk5OTkKK1JVLVVOSy0xOSA6IDEgOiA4NzI3LjU5OTYKK1JVLVVOSy0yMCA6IDEgOiAxLjUKK1JVLVVOSy0yMSA6IDEgOiAxLjAKK1JVLVVOSy0yMiA6IDEgOiAxNjIuMTAwMDEKK1JVLVVOSy0yMyA6IDEgOiA0My4wOTk5OTgKK1JVLVVOSy0yNCA6IDEgOiA0MjkuMAorUlUtVU5LLTI1IDogMSA6IDEuNworUlUtVU5LLTI2IDogMSA6IDEuMAorUlUtVU5LLTI3IDogMSA6IDE2NTQuOQorUlUtVU5LLTI4IDogMSA6IDExMy4wCitSVS1VTkstMjkgOiAxIDogMjUuNAorUlUtVU5LLTMwIDogMSA6IDQyNS41CitSVS1VTkstMzEgOiAxIDogNDA4LjUKK1JVLVVOSy0zMiA6IDEgOiA5MzIuMDk5OTgKK1JVLVVOSy0zMyA6IDEgOiA0LjE5OTk5OTgKK1JVLVVOSy0zNCA6IDEgOiAyNy4xCitSVS1VTkstMzUgOiAxIDogMTUwLjUKK1JVLVVOSy0zNiA6IDEgOiAyLjUKK1JVLVVOSy0zNyA6IDEgOiAxLjAKK1JVLVVOSy0zOCA6IDEgOiA4Ljg5OTk5OTYKK1JVLVVOSy0zOSA6IDEgOiAyODQuMjk5OTkKK1JVLVVOSy00MCA6IDEgOiAyLjAKK1JVLVVOSy00MSA6IDEgOiAyNzQ0LjcKK1JVLVVOSy00MiA6IDEgOiAyMzYuMworUlUtVU5LLTQzIDogMSA6IDMzNi4zOTk5OQorUlUtVU5LLTQ0IDogMSA6IDEuMAorUlUtVU5LLTQ1IDogMSA6IDIwMzUuNgorUlUtVU5LLTQ2IDogMSA6IDEwNjMuMQorUlUtVU5LLTQ3IDogMSA6IDM1MS44OTk5OQorUlUtVU5LLTQ4IDogMSA6IDEuMAorUlUtVU5LLTQ5IDogMSA6IDEuMworUlUtVU5LLTUwIDogMSA6IDEuMAorUlUtVU5LLTUxIDogMSA6IDEuMAorUlUtVU5LLTUyIDogMSA6IDczLjkwMDAwMgorUlUtVU5LLTUzIDogMSA6IDEuNQorUlUtVU5LLTU0IDogMSA6IDEuMAorUlUtVU5LLTU1IDogMSA6IDExMS4zCitSVS1VTkstNTYgOiAxIDogMjEuMjAwMDAxCitSVS1VTkstNTcgOiAxIDogMTUzLjM5OTk5CitSVS1VTkstNTggOiAxIDogNC4zMDAwMDAyCitSVS1VTkstNTkgOiAxIDogNTguMjk5OTk5CitSVS1VTkstNjAgOiAxIDogNi45MDAwMDAxCitSVS1VTkstNjEgOiAxIDogMTAuNgorUlUtVU5LLTYyIDogMSA6IDU3LjAKK1JVLVVOSy02MyA6IDEgOiA5NzYuNzAwMDEKK1JVLVVOSy02NCA6IDEgOiAyNS4yOTk5OTkKK1JVLVVOSy02NSA6IDEgOiA0Mi40MDAwMDIKK1JVLVVOSy02NiA6IDEgOiAxNC4wCitSVS1VTkstNjcgOiAxIDogNTA1LjUKK1JVLVVOSy02OCA6IDEgOiAxLjEKK1JVLVVOSy02OSA6IDEgOiA1LjA5OTk5OTkKK1JVLVVOSy03MCA6IDEgOiAyMC4xCitSVS1VTkstNzEgOiAxIDogNjM0Ljc5OTk5CitSVS1VTkstNzIgOiAxIDogMS4wCitSVS1VTkstNzMgOiAxIDogMS4zCitSVS1VTkstNzQgOiAxIDogMi4wCitSVS1VTkstNzUgOiAxIDogMTEuNworUlUtVU5LLTc2IDogMSA6IDczLjAKK1JVLVVOSy03NyA6IDEgOiA2Mi41CitSVS1VTkstNzggOiAxIDogNC42OTk5OTk4CitSVS1VTkstNzkgOiAxIDogMi41OTk5OTk5CitSVS1VTkstODAgOiAxIDogMTg2LjAKK1JVLVVOSy04MSA6IDEgOiAxOS42CitSVS1VTkstODIgOiAxIDogMTIuMQorUlUtVU5LLTgzIDogMSA6IDE0MDQ3LjAKK1JVLVVOSy04NCA6IDEgOiA0LjgwMDAwMDIKK1JVLVVOSy04NSA6IDEgOiAxLjEKK1JVLVVOSy04NiA6IDEgOiA2LjU5OTk5OTkKK1JVLVVOSy04NyA6IDEgOiAxLjAKK1JVLVVOSy04OCA6IDEgOiA0LjMwMDAwMDIKK1JVLVVOSy04OSA6IDEgOiAyLjIKK1JVLVVOSy05MCA6IDEgOiAyNzMuNjAwMDEKK1JVLVVOSy05MSA6IDEgOiAxLjAKK1JVLVVOSy05MiA6IDEgOiA0My41CitSVS1VTkstOTMgOiAxIDogMS4wCitSVS1VTkstOTQgOiAxIDogMjYxLjg5OTk5CitSVS1VTkstOTUgOiAxIDogMS4yCitSVS1VTkstOTYgOiAxIDogMTUzMC43CitSVS1VTkstOTcgOiAxIDogNi42OTk5OTk4CitSVS1VTkstOTggOiAxIDogMzIuNQorUlUtVU5LLTk5IDogMSA6IDIuMgorUlUtVU5LLTEwMCA6IDEgOiA1LjU5OTk5OTkKK1JVLVVOSy0xMDEgOiAxIDogMi4zCitSVS1VTkstMTAyIDogMSA6IDEuOAorUlUtVU5LLTEwMyA6IDEgOiAxLjAKK1JVLVVOSy0xMDQgOiAxIDogMS42CitSVS1VTkstMTA1IDogMSA6IDEuMAorUlUtVU5LLTEwNiA6IDEgOiAxLjAKK1JVLVVOSy0xMDcgOiAxIDogNDguMjk5OTk5CitSVS1VTkstMTA4IDogMSA6IDEuMAorUlUtVU5LLTEwOSA6IDEgOiAxLjIKK1JVLVVOSy0xMTAgOiAxIDogMTMuMgorUlUtVU5LLTExMSA6IDEgOiAxLjAKK1JVLVVOSy0xMTIgOiAxIDogMS42CitSVS1VTkstMTEzIDogMSA6IDEuNAorUlUtVU5LLTExNCA6IDEgOiAxLjAKK1JVLVVOSy0xMTUgOiAxIDogMzIuMjAwMDAxCitSVS1VTkstMTE2IDogMSA6IDEuMAorUlUtVU5LLTExNyA6IDEgOiAyODAuMAorUlUtVU5LLTExOCA6IDEgOiAxLjAKK1JVLVVOSy0xMTkgOiAxIDogMS40CitSVS1VTkstMTIwIDogMSA6IDEuMAorUlUtVU5LLTEyMSA6IDEgOiAyMi4yMDAwMDEKK1JVLVVOSy0xMjIgOiAxIDogMy4yCitSVS1VTkstMTIzIDogMSA6IDEwLjgKK1JVLVVOSy0xMjQgOiAxIDogMS4wCitSVS1VTkstMTI1IDogMSA6IDExLjUKK1JVLVVOSy0xMjYgOiAxIDogMS4wCitSVS1VTkstMTI3IDogMSA6IDQuNQorUlUtVU5LLTEyOCA6IDEgOiAzNC41CitSVS1VTkstMTI5IDogMSA6IDEuMAorUlUtVU5LLTEzMCA6IDEgOiAzMC42CitSVS1VTkstMTMxIDogMSA6IDEwNTgyLjcKK1JVLVVOSy0xMzIgOiAxIDogMS4wCitSVS1VTkstMTMzIDogMSA6IDIuNTk5OTk5OQorUlUtVU5LLTEzNCA6IDEgOiAxLjAKK1JVLVVOSy0xMzUgOiAxIDogMTIuNAorUlUtVU5LLTEzNiA6IDEgOiAxLjQKK1JVLVVOSy0xMzcgOiAxIDogMS41CitSVS1VTkstMTM4IDogMSA6IDEyLjIKK1JVLVVOSy0xMzkgOiAxIDogMS4wCitSVS1VTkstMTQwIDogMSA6IDYuMAorUlUtVU5LLTE0MSA6IDEgOiAxLjIKK1JVLVVOSy0xNDIgOiAxIDogMS4xCitSVS1VTkstMTQzIDogMSA6IDIuNDAwMDAwMQorUlUtVU5LLTE0NCA6IDEgOiAxLjAKK1JVLVVOSy0xNDUgOiAxIDogMS4wCitSVS1VTkstMTQ2IDogMSA6IDQuNjk5OTk5OAorUlUtVU5LLTE0NyA6IDEgOiAxLjAKK1JVLVVOSy0xNDggOiAxIDogMS4wCitSVS1VTkstMTQ5IDogMSA6IDEuMAorUlUtVU5LLTE1MCA6IDEgOiAxLjAKK1JVLVVOSy0xNTEgOiAxIDogNy4zMDAwMDAyCitSVS1VTkstMTUyIDogMSA6IDEuNAorUlUtVU5LLTE1MyA6IDEgOiAzLjAKK1JVLVVOSy0xNTQgOiAxIDogMS4xCitSVS1VTkstMTU1IDogMSA6IDIuMgorUlUtVU5LLTE1NiA6IDEgOiAxLjUKK1JVLVVOSy0xNTcgOiAxIDogMS41CitSVS1VTkstMTU4IDogMSA6IDEuMAorUlUtVU5LLTE1OSA6IDEgOiAxMDQuMgorUlUtVU5LLTE2MCA6IDEgOiA0LjQwMDAwMDEKK1JVLVVOSy0xNjEgOiAxIDogMS4wCitSVS1VTkstMTYyIDogMSA6IDEuMAorUlUtVU5LLTE2MyA6IDEgOiAxNC44CitSVS1VTkstMTY0IDogMSA6IDI0OC43CitSVS1VTkstMTY1IDogMSA6IDEuMworUlUtVU5LLTE2NiA6IDEgOiAxLjAKK1JVLVVOSy0xNjcgOiAxIDogMS4wCitSVS1VTkstMTY4IDogMSA6IDEuMAorUlUtVU5LLTE2OSA6IDEgOiAxLjAKK1JVLVVOSy0xNzAgOiAxIDogMS4wCitSVS1VTkstMTcxIDogMSA6IDEuMAorUlUtVU5LLTE3MiA6IDEgOiAxLjAKK1JVLVVOSy0xNzMgOiAxIDogMS4wCitSVS1VTkstMTc0IDogMSA6IDIuNTk5OTk5OQorUlUtVU5LLTE3NSA6IDEgOiAzLjMKK1JVLVVOSy0xNzYgOiAxIDogNS40MDAwMDAxCitSVS1VTkstMTc3IDogMSA6IDI0LjIwMDAwMQorUlUtVU5LLTE3OCA6IDEgOiAyLjgKK1JVLVVOSy0xNzkgOiAxIDogMS4zCitSVS1VTkstMTgwIDogMSA6IDIuMgorUlUtVU5LLTE4MSA6IDEgOiAzMi41CitSVS1VTkstMTgyIDogMSA6IDEuMAorUlUtVU5LLTE4MyA6IDEgOiA0OC40MDAwMDIKK1JVLVVOSy0xODQgOiAxIDogNi4wCitSVS1VTkstMTg1IDogMSA6IDEuOAorUlUtVU5LLTE4NiA6IDEgOiAyLjAKK1JVLVVOSy0xODcgOiAxIDogMS4yCitSVS1VTkstMTg4IDogMSA6IDkyLjA5OTk5OAorUlUtVU5LLTE4OSA6IDEgOiA3LjkwMDAwMDEKK1JVLVVOSy0xOTAgOiAxIDogOC44OTk5OTk2CitSVS1VTkstMTkxIDogMSA6IDguMzAwMDAwMgorUlUtVU5LLTE5MiA6IDEgOiAyLjAKK1JVLVVOSy0xOTMgOiAxIDogMTQzLjMKK1JVLVVOSy0xOTQgOiAxIDogMS4wCitSVS1VTkstMTk1IDogMSA6IDI0LjkKK1JVLVVOSy0xOTYgOiAxIDogMS4wCitSVS1VTkstMTk3IDogMSA6IDUuMAorUlUtVU5LLTE5OCA6IDEgOiA0LjQwMDAwMDEKK1JVLVVOSy0xOTkgOiAxIDogMS42CitSVS1VTkstMjAwIDogMSA6IDMyMy43OTk5OQorUlUtVU5LLTIwMSA6IDEgOiAxLjEKK1JVLVVOSy0yMDIgOiAxIDogNy4zMDAwMDAyCitSVS1VTkstMjAzIDogMSA6IDEuNgorUlUtVU5LLTIwNCA6IDEgOiA1OS41CitSVS1VTkstMjA1IDogMSA6IDE3LjI5OTk5OQorUlUtVU5LLTIwNiA6IDEgOiAxLjIKK1JVLVVOSy0yMDcgOiAxIDogMS4yCitSVS1VTkstMjA4IDogMSA6IDEuMAorUlUtVU5LLTIwOSA6IDEgOiAxLjAKK1JVLVVOSy0yMTAgOiAxIDogMS4zCitSVS1VTkstMjExIDogMSA6IDIuMDk5OTk5OQorUlUtVU5LLTIxMiA6IDEgOiAxLjAKK1JVLVVOSy0yMTMgOiAxIDogNC4zMDAwMDAyCitSVS1VTkstMjE0IDogMSA6IDI0LjUKK1JVLVVOSy0yMTUgOiAxIDogNDU5MjQuNjk5CitSVS1VTkstMjE2IDogMSA6IDEuMAorUlUtVU5LLTIxNyA6IDEgOiAxLjAKK1JVLVVOSy0yMTggOiAxIDogMS41CitSVS1VTkstMjE5IDogMSA6IDEuMAorUlUtVU5LLTIyMCA6IDEgOiAxLjAKK1JVLVVOSy0yMjEgOiAxIDogNy4wOTk5OTk5CitSVS1VTkstMjIyIDogMSA6IDEuNgorUlUtVU5LLTIyMyA6IDEgOiA2LjUKK1JVLVVOSy0yMjQgOiAxIDogNDcuNDAwMDAyCitSVS1VTkstMjI1IDogMSA6IDEuMAorUlUtVU5LLTIyNiA6IDEgOiAxLjAKK1JVLVVOSy0yMjcgOiAxIDogNy45MDAwMDAxCitSVS1VTkstMjI4IDogMSA6IDIuNTk5OTk5OQorUlUtVU5LLTIyOSA6IDEgOiAxLjAKK1JVLVVOSy0yMzAgOiAxIDogMy40MDAwMDAxCitSVS1VTkstMjMxIDogMSA6IDEuOAorUlUtVU5LLTIzMiA6IDEgOiA2LjQwMDAwMDEKK1JVLVVOSy0yMzMgOiAxIDogNy45MDAwMDAxCitSVS1VTkstMjM0IDogMSA6IDEuMAorUlUtVU5LLTIzNSA6IDEgOiAxMy45CitSVS1VTkstMjM2IDogMSA6IDIuNQorUlUtVU5LLTIzNyA6IDEgOiAxLjAKK1JVLVVOSy0yMzggOiAxIDogMS44CitSVS1VTkstMjM5IDogMSA6IDQuMDk5OTk5OQorUlUtVU5LLTI0MCA6IDEgOiA5LjMwMDAwMDIKK1JVLVVOSy0yNDEgOiAxIDogNi4wCitSVS1VTkstMjQyIDogMSA6IDEuNAorUlUtVU5LLTI0MyA6IDEgOiAxLjAKK1JVLVVOSy0yNDQgOiAxIDogMzYuMAorUlUtVU5LLTI0NSA6IDEgOiAxLjAKK1JVLVVOSy0yNDYgOiAxIDogMS4yCitSVS1VTkstMjQ3IDogMSA6IDE0MC4zOTk5OQorUlUtVU5LLTI0OCA6IDEgOiA1LjAKK1JVLVVOSy0yNDkgOiAxIDogMTIuNQorUlUtVU5LLTI1MCA6IDEgOiAxLjAKK1JVLVVOSy0yNTEgOiAxIDogMS4wCitSVS1VTkstMjUyIDogMSA6IDUuNjk5OTk5OAorUlUtVU5LLTI1MyA6IDEgOiAxNS4yCitSVS1VTkstMjU0IDogMSA6IDEuMAorUlUtVU5LLTI1NSA6IDEgOiAxLjAKK1JVLVVOSy0yNTYgOiAxIDogMy4yCitSVS1VTkstMjU3IDogMSA6IDE1LjEKK1JVLVVOSy0yNTggOiAxIDogMi41OTk5OTk5CitSVS1VTkstMjU5IDogMSA6IDMzLjUKK1JVLVVOSy0yNjAgOiAxIDogNC41CitSVS1VTkstMjYxIDogMSA6IDguMzk5OTk5NgorUlUtVU5LLTI2MiA6IDEgOiA2MS4yOTk5OTkKK1JVLVVOSy0yNjMgOiAxIDogNzcuNDAwMDAyCitSVS1VTkstMjY0IDogMSA6IDQwLjkwMDAwMgorUlUtVU5LLTI2NSA6IDEgOiAxLjAKK1JVLVVOSy0yNjYgOiAxIDogMS4wCitSVS1VTkstMjY3IDogMSA6IDEzLjAKK1JVLVVOSy0yNjggOiAxIDogNS42OTk5OTk4CitSVS1VTkstMjY5IDogMSA6IDEuMAorUlUtVU5LLTI3MCA6IDEgOiA3LjgwMDAwMDIKK1JVLVVOSy0yNzEgOiAxIDogMjExLjYwMDAxCitSVS1VTkstMjcyIDogMSA6IDEuMworUlUtVU5LLTI3MyA6IDEgOiAzMS41CitSVS1VTkstMjc0IDogMSA6IDEuMQorUlUtVU5LLTI3NSA6IDEgOiAxLjUKK1JVLVVOSy0yNzYgOiAxIDogMy44CitSVS1VTkstMjc3IDogMSA6IDEuOQorUlUtVU5LLTI3OCA6IDEgOiAxLjQKK1JVLVVOSy0yNzkgOiAxIDogNy40MDAwMDAxCitSVS1VTkstMjgwIDogMSA6IDIuNQorUlUtVU5LLTI4MSA6IDEgOiAyLjcKK1JVLVVOSy0yODIgOiAxIDogMTEuMQorUlUtVU5LLTI4MyA6IDEgOiA0LjUKK1JVLVVOSy0yODQgOiAxIDogMS42CitSVS1VTkstMjg1IDogMSA6IDEuOQorUlUtVU5LLTI4NiA6IDEgOiA0LjU5OTk5OTkKK1JVLVVOSy0yODcgOiAxIDogMS4wCitSVS1VTkstMjg4IDogMSA6IDUuNTk5OTk5OQorUlUtVU5LLTI4OSA6IDEgOiA5Ljg5OTk5OTYKK1JVLVVOSy0yOTAgOiAxIDogMjAuMjk5OTk5CitSVS1VTkstMjkxIDogMSA6IDIuMgorUlUtVU5LLTI5MiA6IDEgOiAyLjMKK1JVLVVOSy0yOTMgOiAxIDogMi43CitSVS1VTkstMjk0IDogMSA6IDEuMAorUlUtVU5LLTI5NSA6IDEgOiAxLjAKK1JVLVVOSy0yOTYgOiAxIDogMS4wCitSVS1VTkstMjk3IDogMSA6IDQ2LjA5OTk5OAorUlUtVU5LLTI5OCA6IDEgOiAxLjUKK1JVLVVOSy0yOTkgOiAxIDogMS44CitSVS1VTkstMzAwIDogMSA6IDIuNQorUlUtVU5LLTMwMSA6IDEgOiAxLjIKK1JVLVVOSy0zMDIgOiAxIDogMi43CitSVS1VTkstMzAzIDogMSA6IDEuMgorUlUtVU5LLTMwNCA6IDEgOiAzLjU5OTk5OTkKK1JVLVVOSy0zMDUgOiAxIDogMS41CitSVS1VTkstMzA2IDogMSA6IDQuOTAwMDAwMQorUlUtVU5LLTMwNyA6IDEgOiA3LjY5OTk5OTgKK1JVLVVOSy0zMDggOiAxIDogODUuNDAwMDAyCitSVS1VTkstMzA5IDogMSA6IDI1Ljc5OTk5OQorUlUtVU5LLTMxMCA6IDEgOiAzOTguNzAwMDEKK1JVLVVOSy0zMTEgOiAxIDogMS4wCitSVS1VTkstMzEyIDogMSA6IDEuMAorUlUtVU5LLTMxMyA6IDEgOiA2LjA5OTk5OTkKK1JVLVVOSy0zMTQgOiAxIDogMy43CitSVS1VTkstMzE1IDogMSA6IDUzLjU5OTk5OAorUlUtVU5LLTMxNiA6IDEgOiAzLjIKK1JVLVVOSy0zMTcgOiAxIDogMi43CitSVS1VTkstMzE4IDogMSA6IDQuMAorUlUtVU5LLTMxOSA6IDEgOiAzLjAKK1JVLVVOSy0zMjAgOiAxIDogMS4wCitSVS1VTkstMzIxIDogMSA6IDEuMAorUlUtVU5LLTMyMiA6IDEgOiA0LjE5OTk5OTgKK1JVLVVOSy0zMjMgOiAxIDogMjQuNzk5OTk5CitSVS1VTkstMzI0IDogMSA6IDI0NjY5LjQKK1JVLVVOSy0zMjUgOiAxIDogMS4wCitSVS1VTkstMzI2IDogMSA6IDYxLjIwMDAwMQorUlUtVU5LLTMyNyA6IDEgOiAxLjUKK1JVLVVOSy0zMjggOiAxIDogNjYuOTAwMDAyCitSVS1VTkstMzI5IDogMSA6IDEuMAorUlUtVU5LLTMzMCA6IDEgOiAxLjAKK1JVLVVOSy0zMzEgOiAxIDogMS40CitSVS1VTkstMzMyIDogMSA6IDEuMAorUlUtVU5LLTMzMyA6IDEgOiA5Mi40MDAwMDIKK1JVLVVOSy0zMzQgOiAxIDogNC4xOTk5OTk4CitSVS1VTkstMzM1IDogMSA6IDEuMworUlUtVU5LLTMzNiA6IDEgOiAxLjAKK1JVLVVOSy0zMzcgOiAxIDogMS4wCitSVS1VTkstMzM4IDogMSA6IDEuMworUlUtVU5LLTMzOSA6IDEgOiAxLjAKK1JVLVVOSy0zNDAgOiAxIDogMS4yCitSVS1VTkstMzQxIDogMSA6IDEuMAorUlUtVU5LLTM0MiA6IDEgOiAxLjAKK1JVLVVOSy0zNDMgOiAxIDogMS4wCitSVS1VTkstMzQ0IDogMSA6IDEuMAorUlUtVU5LLTM0NSA6IDEgOiAxLjAKK1JVLVVOSy0zNDYgOiAxIDogMS4wCitSVS1VTkstMzQ3IDogMSA6IDkuMTAwMDAwNAorUlUtVU5LLTM0OCA6IDEgOiA0LjE5OTk5OTgKK1JVLVVOSy0zNDkgOiAxIDogOC4zMDAwMDAyCitSVS1VTkstMzUwIDogMSA6IDEuMAorUlUtVU5LLTM1MSA6IDEgOiAxLjAKK1JVLVVOSy0zNTIgOiAxIDogOS41CitSVS1VTkstMzUzIDogMSA6IDguNjAwMDAwNAorUlUtVU5LLTM1NCA6IDEgOiAxMDEuNQorUlUtVU5LLTM1NSA6IDEgOiA3LjY5OTk5OTgKK1JVLVVOSy0zNTYgOiAxIDogMzAuNgorUlUtVU5LLTM1NyA6IDEgOiA1OC4yOTk5OTkKK1JVLVVOSy0zNTggOiAxIDogMS4xCitSVS1VTkstMzU5IDogMSA6IDEuMAorUlUtVU5LLTM2MCA6IDEgOiAxLjgKK1JVLVVOSy0zNjEgOiAxIDogMTYuNAorUlUtVU5LLTM2MiA6IDEgOiA1MjYuOTAwMDIKK1JVLVVOSy0zNjMgOiAxIDogNC45MDAwMDAxCitSVS1VTkstMzY0IDogMSA6IDEzLjgKK1JVLVVOSy0zNjUgOiAxIDogMi45MDAwMDAxCitSVS1VTkstMzY2IDogMSA6IDEuMAorUlUtVU5LLTM2NyA6IDEgOiAxLjAKK1JVLVVOSy0zNjggOiAxIDogMS4wCitSVS1VTkstMzY5IDogMSA6IDEuMAorUlUtVU5LLTM3MCA6IDEgOiAyLjQwMDAwMDEKK1JVLVVOSy0zNzEgOiAxIDogMS4wCitSVS1VTkstMzcyIDogMSA6IDIuMworUlUtVU5LLTM3MyA6IDEgOiAxLjEKK1JVLVVOSy0zNzQgOiAxIDogMS4wCitSVS1VTkstMzc1IDogMSA6IDUuNjk5OTk5OAorUlUtVU5LLTM3NiA6IDEgOiAxLjcKK1JVLVVOSy0zNzcgOiAxIDogNjIxNi42MDAxCitSVS1VTkstMzc4IDogMSA6IDEuMAorUlUtVU5LLTM3OSA6IDEgOiAxLjAKK1JVLVVOSy0zODAgOiAxIDogMS40CitSVS1VTkstMzgxIDogMSA6IDcuMzAwMDAwMgorUlUtVU5LLTM4MiA6IDEgOiA0OC4yMDAwMDEKK1JVLVVOSy0zODMgOiAxIDogMTIuMworUlUtVU5LLTM4NCA6IDEgOiAyNTkuMzk5OTkKK1JVLVVOSy0zODUgOiAxIDogMS4wCitSVS1VTkstMzg2IDogMSA6IDcuNDAwMDAwMQorUlUtVU5LLTM4NyA6IDEgOiAxLjAKK1JVLVVOSy0zODggOiAxIDogMS4wCitSVS1VTkstMzg5IDogMSA6IDMuNQorUlUtVU5LLTM5MCA6IDEgOiAxLjAKK1JVLVVOSy0zOTEgOiAxIDogNS41OTk5OTk5CitSVS1VTkstMzkyIDogMSA6IDExLjIKK1JVLVVOSy0zOTMgOiAxIDogNC45MDAwMDAxCitSVS1VTkstMzk0IDogMSA6IDI1My4zOTk5OQorUlUtVU5LLTM5NSA6IDEgOiAzLjAKK1JVLVVOSy0zOTYgOiAxIDogMS42CitSVS1VTkstMzk3IDogMSA6IDEuOQorUlUtVU5LLTM5OCA6IDEgOiAxLjIKK1JVLVVOSy0zOTkgOiAxIDogMS4wCitSVS1VTkstNDAwIDogMSA6IDUuOTAwMDAwMQorUlUtVU5LLTQwMSA6IDEgOiA0LjQwMDAwMDEKK1JVLVVOSy00MDIgOiAxIDogNi4wCitSVS1VTkstNDAzIDogMSA6IDI4LjAKK1JVLVVOSy00MDQgOiAxIDogMy4yCitSVS1VTkstNDA1IDogMSA6IDU1LjAKK1JVLVVOSy00MDYgOiAxIDogMi4wOTk5OTk5CitSVS1VTkstNDA3IDogMSA6IDEuMgorUlUtVU5LLTQwOCA6IDEgOiAyLjAKK1JVLVVOSy00MDkgOiAxIDogMS40CitSVS1VTkstNDEwIDogMSA6IDgwLjkwMDAwMgorUlUtVU5LLTQxMSA6IDEgOiA4LjAKK1JVLVVOSy00MTIgOiAxIDogMi4wOTk5OTk5CitSVS1VTkstNDEzIDogMSA6IDEuMAorUlUtVU5LLTQxNCA6IDEgOiA1LjAKK1JVLVVOSy00MTUgOiAxIDogNzMuNjk5OTk3CitSVS1VTkstNDE2IDogMSA6IDkuMTk5OTk5OAorUlUtVU5LLTQxNyA6IDEgOiAxNDEuODk5OTkKK1JVLVVOSy00MTggOiAxIDogMTkuMjk5OTk5CitSVS1VTkstNDE5IDogMSA6IDEuMAorUlUtVU5LLTQyMCA6IDEgOiA2LjA5OTk5OTkKK1JVLVVOSy00MjEgOiAxIDogMTMyLjIKK1JVLVVOSy00MjIgOiAxIDogOC4xOTk5OTk4CitSVS1VTkstNDIzIDogMSA6IDE4OTQuOQorUlUtVU5LLTQyNCA6IDEgOiAxLjAKK1JVLVVOSy00MjUgOiAxIDogMS4wCitSVS1VTkstNDI2IDogMSA6IDEuMAorUlUtVU5LLTQyNyA6IDEgOiA3OC4zMDAwMDMKK1JVLVVOSy00MjggOiAxIDogNC41OTk5OTk5CitSVS1VTkstNDI5IDogMSA6IDEuMAorUlUtVU5LLTQzMCA6IDEgOiAxLjYKK1JVLVVOSy00MzEgOiAxIDogMy43CitSVS1VTkstNDMyIDogMSA6IDEuMAorUlUtVU5LLTQzMyA6IDEgOiAxMy4wCitSVS1VTkstNDM0IDogMSA6IDEuMAorUlUtVU5LLTQzNSA6IDEgOiAxLjAKK1JVLVVOSy00MzYgOiAxIDogMS45CitSVS1VTkstNDM3IDogMSA6IDMzLjUKK1JVLVVOSy00MzggOiAxIDogMS4wCitSVS1VTkstNDM5IDogMSA6IDEuMAorUlUtVU5LLTQ0MCA6IDEgOiAxMi41CitSVS1VTkstNDQxIDogMSA6IDEuMworUlUtVU5LLTQ0MiA6IDEgOiA0LjgwMDAwMDIKK1JVLVVOSy00NDMgOiAxIDogMS4wCitSVS1VTkstNDQ0IDogMSA6IDE5LjAKK1JVLVVOSy00NDUgOiAxIDogNC4wOTk5OTk5CitSVS1VTkstNDQ2IDogMSA6IDMuNDAwMDAwMQorUlUtVU5LLTQ0NyA6IDEgOiAxLjEKK1JVLVVOSy00NDggOiAxIDogMi4zCitSVS1VTkstNDQ5IDogMSA6IDIwLjEKK1JVLVVOSy00NTAgOiAxIDogOS42OTk5OTk4CitSVS1VTkstNDUxIDogMSA6IDEuOAorUlUtVU5LLTQ1MiA6IDEgOiAxLjAKK1JVLVVOSy00NTMgOiAxIDogMS4wCitSVS1VTkstNDU0IDogMSA6IDEuMAorUlUtVU5LLTQ1NSA6IDEgOiA4OTEuNzk5OTkKK1JVLVVOSy00NTYgOiAxIDogMzA1LjM5OTk5CitSVS1VTkstNDU3IDogMSA6IDQxLjc5OTk5OQorUlUtVU5LLTQ1OCA6IDEgOiAxLjEKK1JVLVVOSy00NTkgOiAxIDogMS4wCitSVS1VTkstNDYwIDogMSA6IDEuMAorUlUtVU5LLTQ2MSA6IDEgOiAxLjkKK1JVLVVOSy00NjIgOiAxIDogOTAuMAorUlUtVU5LLTQ2MyA6IDEgOiAxMDkuMQorUlUtVU5LLTQ2NCA6IDEgOiAxLjAKK1JVLVVOSy00NjUgOiAxIDogMS4wCitSVS1VTkstNDY2IDogMSA6IDEuMAorUlUtVU5LLTQ2NyA6IDEgOiAxLjAKK1JVLVVOSy00NjggOiAxIDogMTMuOQorUlUtVU5LLTQ2OSA6IDEgOiAxLjAKK1JVLVVOSy00NzAgOiAxIDogMS4wCitSVS1VTkstNDcxIDogMSA6IDEuMAorUlUtVU5LLTQ3MiA6IDEgOiAxLjYKK1JVLVVOSy00NzMgOiAxIDogMS4xCitSVS1VTkstNDc0IDogMSA6IDIuMAorUlUtVU5LLTQ3NSA6IDEgOiAxNy40CitSVS1VTkstNDc2IDogMSA6IDMuNworUlUtVU5LLTQ3NyA6IDEgOiAzLjkwMDAwMDEKK1JVLVVOSy00NzggOiAxIDogMS4wCitSVS1VTkstNDc5IDogMSA6IDEuOAorUlUtVU5LLTQ4MCA6IDEgOiA2MS4yMDAwMDEKK1JVLVVOSy00ODEgOiAxIDogMS44CitSVS1VTkstNDgyIDogMSA6IDkuODAwMDAwMgorUlUtVU5LLTQ4MyA6IDEgOiAxMC45CitSVS1VTkstNDg0IDogMSA6IDEuMAorUlUtVU5LLTQ4NSA6IDEgOiA1LjkwMDAwMDEKK1JVLVVOSy00ODYgOiAxIDogMjkuMQorUlUtVU5LLTQ4NyA6IDEgOiAxLjIKK1JVLVVOSy00ODggOiAxIDogMjUuNzAwMDAxCitSVS1VTkstNDg5IDogMSA6IDIuMDk5OTk5OQorUlUtVU5LLTQ5MCA6IDEgOiAxLjAKK1JVLVVOSy00OTEgOiAxIDogMi4wCitSVS1VTkstNDkyIDogMSA6IDY2LjY5OTk5NworUlUtVU5LLTQ5MyA6IDEgOiAxLjAKK1JVLVVOSy00OTQgOiAxIDogNTI4Ny41CitSVS1VTkstNDk1IDogMSA6IDEuMAorUlUtVU5LLTQ5NiA6IDEgOiAxMC45CitSVS1VTkstNDk3IDogMSA6IDEuOQorUlUtVU5LLTQ5OCA6IDEgOiAxLjAKK1JVLVVOSy00OTkgOiAxIDogMS4wCitSVS1VTkstNTAwIDogMSA6IDEuNgorUlUtVU5LLTUwMSA6IDEgOiAxLjAKK1JVLVVOSy01MDIgOiAxIDogMS4xCitSVS1VTkstNTAzIDogMSA6IDguODAwMDAwMgorUlUtVU5LLTUwNCA6IDEgOiAxLjAKK1JVLVVOSy01MDUgOiAxIDogMS44CitSVS1VTkstNTA2IDogMSA6IDMuMDk5OTk5OQorUlUtVU5LLTUwNyA6IDEgOiA4LjAKK1JVLVVOSy01MDggOiAxIDogMS40CitSVS1VTkstNTA5IDogMSA6IDcuMTk5OTk5OAorUlUtVU5LLTUxMCA6IDEgOiA4LjY5OTk5OTgKK1JVLVVOSy01MTEgOiAxIDogMi4yCitSVS1VTkstNTEyIDogMSA6IDEuMAorUlUtVU5LLTUxMyA6IDEgOiAxLjIKK1JVLVVOSy01MTQgOiAxIDogMTAuNQorUlUtVU5LLTUxNSA6IDEgOiAxLjYKK1JVLVVOSy01MTYgOiAxIDogMS4wCitSVS1VTkstNTE3IDogMSA6IDQuNQorUlUtVU5LLTUxOCA6IDEgOiAxLjAKK1JVLVVOSy01MTkgOiAxIDogNi45MDAwMDAxCitSVS1VTkstNTIwIDogMSA6IDEuMQorUlUtVU5LLTUyMSA6IDEgOiAxLjkKK1JVLVVOSy01MjIgOiAxIDogMS4yCitSVS1VTkstNTIzIDogMSA6IDMuNworUlUtVU5LLTUyNCA6IDEgOiAxLjUKK1JVLVVOSy01MjUgOiAxIDogMi4wOTk5OTk5CitSVS1VTkstNTI2IDogMSA6IDIxLjI5OTk5OQorUlUtVU5LLTUyNyA6IDEgOiA3LjQwMDAwMDEKK1JVLVVOSy01MjggOiAxIDogMS4xCitSVS1VTkstNTI5IDogMSA6IDEuMAorUlUtVU5LLTUzMCA6IDEgOiAxLjIKK1JVLVVOSy01MzEgOiAxIDogMS4wCitSVS1VTkstNTMyIDogMSA6IDIuNworUlUtVU5LLTUzMyA6IDEgOiAyLjIKK1JVLVVOSy01MzQgOiAxIDogMS4xCitSVS1VTkstNTM1IDogMSA6IDIuNQorUlUtVU5LLTUzNiA6IDEgOiAxLjEKK1JVLVVOSy01MzcgOiAxIDogMS4wCitSVS1VTkstNTM4IDogMSA6IDcuMAorUlUtVU5LLTUzOSA6IDEgOiA0LjMwMDAwMDIKK1JVLVVOSy01NDAgOiAxIDogMzIuNTk5OTk4CitSVS1VTkstNTQxIDogMSA6IDEuMAorUlUtVU5LLTU0MiA6IDEgOiAxNDIuMAorUlUtVU5LLTU0MyA6IDEgOiAyNC42CitSVS1VTkstNTQ0IDogMSA6IDQ3LjAKK1JVLVVOSy01NDUgOiAxIDogNy4wCitSVS1VTkstNTQ2IDogMSA6IDEuMAorUlUtVU5LLTU0NyA6IDEgOiAyLjA5OTk5OTkKK1JVLVVOSy01NDggOiAxIDogMS45CitSVS1VTkstNTQ5IDogMSA6IDEuMgorUlUtVU5LLTU1MCA6IDEgOiAxOTg2LjIKK1JVLVVOSy01NTEgOiAxIDogNS41OTk5OTk5CitSVS1VTkstNTUyIDogMSA6IDIuNQorUlUtVU5LLTU1MyA6IDEgOiAxLjEKK1JVLVVOSy01NTQgOiAxIDogMS4zCitSVS1VTkstNTU1IDogMSA6IDEuMworUlUtVU5LLTU1NiA6IDEgOiA0LjUKK1JVLVVOSy01NTcgOiAxIDogMS4xCitSVS1VTkstNTU4IDogMSA6IDE4LjIwMDAwMQorUlUtVU5LLTU1OSA6IDEgOiAxLjAKK1JVLVVOSy01NjAgOiAxIDogMS43CitSVS1VTkstNTYxIDogMSA6IDYuOTAwMDAwMQorUlUtVU5LLTU2MiA6IDEgOiAyLjUKK1JVLVVOSy01NjMgOiAxIDogMzI1MjMuNQorUlUtVU5LLTU2NCA6IDEgOiAxMy4wCitSVS1VTkstNTY1IDogMSA6IDMuMAorUlUtVU5LLTU2NiA6IDEgOiAxLjAKK1JVLVVOSy01NjcgOiAxIDogMS4xCitSVS1VTkstNTY4IDogMSA6IDEuMAorUlUtVU5LLTU2OSA6IDEgOiA0LjE5OTk5OTgKK1JVLVVOSy01NzAgOiAxIDogMS4wCitSVS1VTkstNTcxIDogMSA6IDIuMAorUlUtVU5LLTU3MiA6IDEgOiAyLjU5OTk5OTkKK1JVLVVOSy01NzMgOiAxIDogMy40MDAwMDAxCitSVS1VTkstNTc0IDogMSA6IDEuNQorUlUtVU5LLTU3NSA6IDEgOiAyLjUKK1JVLVVOSy01NzYgOiAxIDogMTguMjAwMDAxCitSVS1VTkstNTc3IDogMSA6IDEuMAorUlUtVU5LLTU3OCA6IDEgOiA2LjY5OTk5OTgKK1JVLVVOSy01NzkgOiAxIDogMi4wOTk5OTk5CitSVS1VTkstNTgwIDogMSA6IDkuMAorUlUtVU5LLTU4MSA6IDEgOiAzLjIKK1JVLVVOSy01ODIgOiAxIDogMi4wCitSVS1VTkstNTgzIDogMSA6IDIxLjc5OTk5OQorUlUtVU5LLTU4NCA6IDEgOiAxLjAKK1JVLVVOSy01ODUgOiAxIDogMTIuNgorUlUtVU5LLTU4NiA6IDEgOiAzLjAKK1JVLVVOSy01ODcgOiAxIDogMTAxLjAKK1JVLVVOSy01ODggOiAxIDogMS4wCitSVS1VTkstNTg5IDogMSA6IDEuNgorUlUtVU5LLTU5MCA6IDEgOiA2LjQwMDAwMDEKK1JVLVVOSy01OTEgOiAxIDogMS4wCitSVS1VTkstNTkyIDogMSA6IDEzLjMKK1JVLVVOSy01OTMgOiAxIDogMzcuMjk5OTk5CitSVS1VTkstNTk0IDogMSA6IDkuNQorUlUtVU5LLTU5NSA6IDEgOiAyLjA5OTk5OTkKK1JVLVVOSy01OTYgOiAxIDogMS4wCitSVS1VTkstNTk3IDogMSA6IDQuMDk5OTk5OQorUlUtVU5LLTU5OCA6IDEgOiAxLjAKK1JVLVVOSy01OTkgOiAxIDogMy40MDAwMDAxCitSVS1VTkstNjAwIDogMSA6IDEuMAorUlUtVU5LLTYwMSA6IDEgOiAxLjAKK1JVLVVOSy02MDIgOiAxIDogMS4wCitSVS1VTkstNjAzIDogMSA6IDMuMworUlUtVU5LLTYwNCA6IDEgOiAxLjAKK1JVLVVOSy02MDUgOiAxIDogMS4wCitSVS1VTkstNjA2IDogMSA6IDQuMTk5OTk5OAorUlUtVU5LLTYwNyA6IDEgOiAxLjAKK1JVLVVOSy02MDggOiAxIDogMS4wCitSVS1VTkstNjA5IDogMSA6IDczLjY5OTk5NworUlUtVU5LLTYxMCA6IDEgOiA2LjgwMDAwMDIKK1JVLVVOSy02MTEgOiAxIDogOC42MDAwMDA0CitSVS1VTkstNjEyIDogMSA6IDEuMgorUlUtVU5LLTYxMyA6IDEgOiA0MTEuODk5OTkKK1JVLVVOSy02MTQgOiAxIDogMTUuMgorUlUtVU5LLTYxNSA6IDEgOiAxLjgKK1JVLVVOSy02MTYgOiAxIDogMi4zCitSVS1VTkstNjE3IDogMSA6IDIyLjcwMDAwMQorUlUtVU5LLTYxOCA6IDEgOiA4MjIuNzAwMDEKK1JVLVVOSy02MTkgOiAxIDogMTAuMgorUlUtVU5LLTYyMCA6IDEgOiA2LjUKK1JVLVVOSy02MjEgOiAxIDogNS40MDAwMDAxCitSVS1VTkstNjIyIDogMSA6IDE1LjIKK1JVLVVOSy02MjMgOiAxIDogNTcuMDk5OTk4CitSVS1VTkstNjI0IDogMSA6IDEuMgorUlUtVU5LLTYyNSA6IDEgOiAzLjgKK1JVLVVOSy02MjYgOiAxIDogMTEuMQorUlUtVU5LLTYyNyA6IDEgOiAxLjAKK1JVLVVOSy02MjggOiAxIDogMS4wCitSVS1VTkstNjI5IDogMSA6IDEuMgorUlUtVU5LLTYzMCA6IDEgOiAxLjAKK1JVLVVOSy02MzEgOiAxIDogMS4wCitSVS1VTkstNjMyIDogMSA6IDE3LjEKK1JVLVVOSy02MzMgOiAxIDogMi40MDAwMDAxCitSVS1VTkstNjM0IDogMSA6IDEuMAorUlUtVU5LLTYzNSA6IDEgOiA3LjUKK1JVLVVOSy02MzYgOiAxIDogMS4zCitSVS1VTkstNjM3IDogMSA6IDEuMAorUlUtVU5LLTYzOCA6IDEgOiAxLjAKK1JVLVVOSy02MzkgOiAxIDogMS43CitSVS1VTkstNjQwIDogMSA6IDIuMDk5OTk5OQorUlUtVU5LLTY0MSA6IDEgOiAxLjAKK1JVLVVOSy02NDIgOiAxIDogMy40MDAwMDAxCitSVS1VTkstNjQzIDogMSA6IDEuOQorUlUtVU5LLTY0NCA6IDEgOiA1LjA5OTk5OTkKK1JVLVVOSy02NDUgOiAxIDogMy41OTk5OTk5CitSVS1VTkstNjQ2IDogMSA6IDYuODAwMDAwMgorUlUtVU5LLTY0NyA6IDEgOiAxLjYKK1JVLVVOSy02NDggOiAxIDogOC44OTk5OTk2CitSVS1VTkstNjQ5IDogMSA6IDIuOTAwMDAwMQorUlUtVU5LLTY1MCA6IDEgOiAxLjAKK1JVLVVOSy02NTEgOiAxIDogOS4xMDAwMDA0CitSVS1VTkstNjUyIDogMSA6IDEuMAorUlUtVU5LLTY1MyA6IDEgOiAxLjAKK1JVLVVOSy02NTQgOiAxIDogMS4wCitSVS1VTkstNjU1IDogMSA6IDguODk5OTk5NgorUlUtVU5LLTY1NiA6IDEgOiAxLjAKK1JVLVVOSy02NTcgOiAxIDogMS4wCitSVS1VTkstNjU4IDogMSA6IDMuOTAwMDAwMQorUlUtVU5LLTY1OSA6IDEgOiAxLjAKK1JVLVVOSy02NjAgOiAxIDogMi41CitSVS1VTkstNjYxIDogMSA6IDEuMAorUlUtVU5LLTY2MiA6IDEgOiAzLjAKK1JVLVVOSy02NjMgOiAxIDogMS4wCitSVS1VTkstNjY0IDogMSA6IDIuMDk5OTk5OQorUlUtVU5LLTY2NSA6IDEgOiA3LjUKK1JVLVVOSy02NjYgOiAxIDogMi44CitSVS1VTkstNjY3IDogMSA6IDI3LjYKK1JVLVVOSy02NjggOiAxIDogMjUuMAorUlUtVU5LLTY2OSA6IDEgOiAxLjAKK1JVLVVOSy02NzAgOiAxIDogMS4wCitSVS1VTkstNjcxIDogMSA6IDEuMAorUlUtVU5LLTY3MiA6IDEgOiAxLjAKK1JVLVVOSy02NzMgOiAxIDogMTA3Mi41CitSVS1VTkstNjc0IDogMSA6IDEuNAorUlUtVU5LLTY3NSA6IDEgOiAyLjU5OTk5OTkKK1JVLVVOSy02NzYgOiAxIDogMy40MDAwMDAxCitSVS1VTkstNjc3IDogMSA6IDIuMAorUlUtVU5LLTY3OCA6IDEgOiA0LjQwMDAwMDEKK1JVLVVOSy02NzkgOiAxIDogMi41CitSVS1VTkstNjgwIDogMSA6IDUuNDAwMDAwMQorUlUtVU5LLTY4MSA6IDEgOiAzLjUKK1JVLVVOSy02ODIgOiAxIDogMS41CitSVS1VTkstNjgzIDogMSA6IDI5LjkKK1JVLVVOSy02ODQgOiAxIDogMi45MDAwMDAxCitSVS1VTkstNjg1IDogMSA6IDQuMzAwMDAwMgorUlUtVU5LLTY4NiA6IDEgOiAxLjIKK1JVLVVOSy02ODcgOiAxIDogMS4wCitSVS1VTkstNjg4IDogMSA6IDIuNTk5OTk5OQorUlUtVU5LLTY4OSA6IDEgOiAxLjgKK1JVLVVOSy02OTAgOiAxIDogMS45CitSVS1VTkstNjkxIDogMSA6IDEuMAorUlUtVU5LLTY5MiA6IDEgOiAxLjAKK1JVLVVOSy02OTMgOiAxIDogMTEuMgorUlUtVU5LLTY5NCA6IDEgOiAzLjQwMDAwMDEKK1JVLVVOSy02OTUgOiAxIDogMjQuNgorUlUtVU5LLTY5NiA6IDEgOiAxLjEKK1JVLVVOSy02OTcgOiAxIDogMi41CitSVS1VTkstNjk4IDogMSA6IDEuMQorUlUtVU5LLTY5OSA6IDEgOiA0LjUKK1JVLVVOSy03MDAgOiAxIDogMS4wCitSVS1VTkstNzAxIDogMSA6IDEuNgorUlUtVU5LLTcwMiA6IDEgOiAxLjkKK1JVLVVOSy03MDMgOiAxIDogNC41CitSVS1VTkstNzA0IDogMSA6IDEwLjUKK1JVLVVOSy03MDUgOiAxIDogMS4xCitSVS1VTkstNzA2IDogMSA6IDQuMzAwMDAwMgorUlUtVU5LLTcwNyA6IDEgOiAxLjAKK1JVLVVOSy03MDggOiAxIDogMi4wCitSVS1VTkstNzA5IDogMSA6IDIuNworUlUtVU5LLTcxMCA6IDEgOiAxLjAKK1JVLVVOSy03MTEgOiAxIDogMS4wCitSVS1VTkstNzEyIDogMSA6IDIuNDAwMDAwMQorUlUtVU5LLTcxMyA6IDEgOiAxLjgKK1JVLVVOSy03MTQgOiAxIDogMS4wCitSVS1VTkstNzE1IDogMSA6IDEuMAorUlUtVU5LLTcxNiA6IDEgOiAxLjUKK1JVLVVOSy03MTcgOiAxIDogMi4wCitSVS1VTkstNzE4IDogMSA6IDMuMAorUlUtVU5LLTcxOSA6IDEgOiAxOC4xCitSVS1VTkstNzIwIDogMSA6IDI4Ljc5OTk5OQorUlUtVU5LLTcyMSA6IDEgOiAxNTEuNjAwMDEKK1JVLVVOSy03MjIgOiAxIDogMTUxLjYwMDAxCitSVS1VTkstNzIzIDogMSA6IDEuMAorUlUtVU5LLTcyNCA6IDEgOiAxMDQxLjcKK1JVLVVOSy03MjUgOiAxIDogMTA0MS43CitSVS1VTkstNzI2IDogMSA6IDEwNDEuNworUlUtVU5LLTcyNyA6IDEgOiAxLjAKK1JVLVVOSy03MjggOiAxIDogMTEuNQorUlUtVU5LLTcyOSA6IDEgOiA2LjkwMDAwMDEKK1JVLVVOSy03MzAgOiAxIDogMi4zCitSVS1VTkstNzMxIDogMSA6IDYuMDk5OTk5OQorUlUtVU5LLTczMiA6IDEgOiAzMS4xCitSVS1VTkstNzMzIDogMSA6IDEuOAorUlUtVU5LLTczNCA6IDEgOiAxLjEKK1JVLVVOSy03MzUgOiAxIDogNTYuOTAwMDAyCitSVS1VTkstNzM2IDogMSA6IDIuMDk5OTk5OQorUlUtVU5LLTczNyA6IDEgOiAxLjAKK1JVLVVOSy03MzggOiAxIDogMS45CitSVS1VTkstNzM5IDogMSA6IDcuODAwMDAwMgorUlUtVU5LLTc0MCA6IDEgOiA0LjA5OTk5OTkKK1JVLVVOSy03NDEgOiAxIDogNC44MDAwMDAyCitSVS1VTkstNzQyIDogMSA6IDYuMTk5OTk5OAorUlUtVU5LLTc0MyA6IDEgOiA0LjgwMDAwMDIKK1JVLVVOSy03NDQgOiAxIDogNS41OTk5OTk5CitSVS1VTkstNzQ1IDogMSA6IDEuNworUlUtVU5LLTc0NiA6IDEgOiAxLjAKK1JVLVVOSy03NDcgOiAxIDogMS4wCitSVS1VTkstNzQ4IDogMSA6IDQyMC4xMDAwMQorUlUtVU5LLTc0OSA6IDEgOiA3NzA1LjUKK1JVLVVOSy03NTAgOiAxIDogNzcwNS41CitSVS1VTkstNzUxIDogMSA6IDkuODk5OTk5NgorUlUtVU5LLTc1MiA6IDEgOiAxLjAKK1JVLVVOSy03NTMgOiAxIDogOC44OTk5OTk2CitSVS1VTkstNzU0IDogMSA6IDIuOTAwMDAwMQorUlUtVU5LLTc1NSA6IDEgOiAxLjEKK1JVLVVOSy03NTYgOiAxIDogMTMuOAorUlUtVU5LLTc1NyA6IDEgOiAzLjIKK1JVLVVOSy03NTggOiAxIDogMS4zCitSVS1VTkstNzU5IDogMSA6IDMuMworUlUtVU5LLTc2MCA6IDEgOiAxLjAKK1JVLVVOSy03NjEgOiAxIDogMS4wCitSVS1VTkstNzYyIDogMSA6IDEuMAorUlUtVU5LLTc2MyA6IDEgOiAxLjYKK1JVLVVOSy03NjQgOiAxIDogMS4wCitSVS1VTkstNzY1IDogMSA6IDEuMAorUlUtVU5LLTc2NiA6IDEgOiAxMC41CitSVS1VTkstNzY3IDogMSA6IDQuMDk5OTk5OQorUlUtVU5LLTc2OCA6IDEgOiAyLjQwMDAwMDEKK1JVLVVOSy03NjkgOiAxIDogMjkuNzk5OTk5CitSVS1VTkstNzcwIDogMSA6IDEuMAorUlUtVU5LLTc3MSA6IDEgOiAyLjcKK1JVLVVOSy03NzIgOiAxIDogMS4wCitSVS1VTkstNzczIDogMSA6IDIuNDAwMDAwMQorUlUtVU5LLTc3NCA6IDEgOiAyLjAKK1JVLVVOSy03NzUgOiAxIDogMTUuNgorUlUtVU5LLTc3NiA6IDEgOiA1LjAKK1JVLVVOSy03NzcgOiAxIDogOC41CitSVS1VTkstNzc4IDogMSA6IDEuMgorUlUtVU5LLTc3OSA6IDEgOiAxLjAKK1JVLVVOSy03ODAgOiAxIDogMS4wCitSVS1VTkstNzgxIDogMSA6IDEuMAorUlUtVU5LLTc4MiA6IDEgOiAyLjAKK1JVLVVOSy03ODMgOiAxIDogMS4wCitSVS1VTkstNzg0IDogMSA6IDIuNQorUlUtVU5LLTc4NSA6IDEgOiAyLjkwMDAwMDEKK1JVLVVOSy03ODYgOiAxIDogMS4yCitSVS1VTkstNzg3IDogMSA6IDEyLjMKK1JVLVVOSy03ODggOiAxIDogMTguOQorUlUtVU5LLTc4OSA6IDEgOiAxLjIKK1JVLVVOSy03OTAgOiAxIDogMTQuMAorUlUtVU5LLTc5MSA6IDEgOiA0LjAKK1JVLVVOSy03OTIgOiAxIDogMjQuOQorUlUtVU5LLTc5MyA6IDEgOiA3MzQuNTk5OTgKK1JVLVVOSy03OTQgOiAxIDogMy4yCitSVS1VTkstNzk1IDogMSA6IDEuMAorUlUtVU5LLTc5NiA6IDEgOiAxLjgKK1JVLVVOSy03OTcgOiAxIDogMS44CitSVS1VTkstNzk4IDogMSA6IDEuMAorUlUtVU5LLTc5OSA6IDEgOiAyMi4wCitSVS1VTkstODAwIDogMSA6IDEuNQorUlUtVU5LLTgwMSA6IDEgOiAxLjQKK1JVLVVOSy04MDIgOiAxIDogMi4zCitSVS1VTkstODAzIDogMSA6IDYuNjk5OTk5OAorUlUtVU5LLTgwNCA6IDEgOiAxLjgKK1JVLVVOSy04MDUgOiAxIDogMS41CitSVS1VTkstODA2IDogMSA6IDEwLjgKK1JVLVVOSy04MDcgOiAxIDogMS4wCitSVS1VTkstODA4IDogMSA6IDEuNAorUlUtVU5LLTgwOSA6IDEgOiA1LjQwMDAwMDEKK1JVLVVOSy04MTAgOiAxIDogMjcuMQorUlUtVU5LLTgxMSA6IDEgOiAyLjQwMDAwMDEKK1JVLVVOSy04MTIgOiAxIDogNTIuOTAwMDAyCitSVS1VTkstODEzIDogMSA6IDEuNAorUlUtVU5LLTgxNCA6IDEgOiAyMy40CitSVS1VTkstODE1IDogMSA6IDIxLjAKK1JVLVVOSy04MTYgOiAxIDogMS43CitSVS1VTkstODE3IDogMSA6IDE4LjEKK1JVLVVOSy04MTggOiAxIDogNjQuMAorUlUtVU5LLTgxOSA6IDEgOiAxNS45CitSVS1VTkstODIwIDogMSA6IDIuNQorUlUtVU5LLTgyMSA6IDEgOiA1NC43OTk5OTkKK1JVLVVOSy04MjIgOiAxIDogMy43CitSVS1VTkstODIzIDogMSA6IDQ5LjAKK1JVLVVOSy04MjQgOiAxIDogMjEuMjAwMDAxCitSVS1VTkstODI1IDogMSA6IDM1MC43OTk5OQorUlUtVU5LLTgyNiA6IDEgOiAxOC43OTk5OTkKK1JVLVVOSy04MjcgOiAxIDogMjYuNgorUlUtVU5LLTgyOCA6IDEgOiAxMi41CitSVS1VTkstODI5IDogMSA6IDIuOAorUlUtVU5LLTgzMCA6IDEgOiA3NS42OTk5OTcKK1JVLVVOSy04MzEgOiAxIDogMS4wCitSVS1VTkstODMyIDogMSA6IDUuNTk5OTk5OQorUlUtVU5LLTgzMyA6IDEgOiA0LjAKK1JVLVVOSy04MzQgOiAxIDogNi44MDAwMDAyCitSVS1VTkstODM1IDogMSA6IDE3LjQKK1JVLVVOSy04MzYgOiAxIDogMS4wCitSVS1VTkstODM3IDogMSA6IDMyLjQwMDAwMgorUlUtVU5LLTgzOCA6IDEgOiAxLjMKK1JVLVVOSy04MzkgOiAxIDogODguNQorUlUtVU5LLTg0MCA6IDEgOiA0MzcuMzk5OTkKK1JVLVVOSy04NDEgOiAxIDogNzAuMzAwMDAzCitSVS1VTkstODQyIDogMSA6IDIuNworUlUtVU5LLTg0MyA6IDEgOiAzLjIKK1JVLVVOSy04NDQgOiAxIDogMS4yCitSVS1VTkstODQ1IDogMSA6IDkxLjQwMDAwMgorUlUtVU5LLTg0NiA6IDEgOiAyLjAKK1JVLVVOSy04NDcgOiAxIDogMi45MDAwMDAxCitSVS1VTkstODQ4IDogMSA6IDM4LjcwMDAwMQorUlUtVU5LLTg0OSA6IDEgOiAxLjcKK1JVLVVOSy04NTAgOiAxIDogNy45MDAwMDAxCitSVS1VTkstODUxIDogMSA6IDI2LjUKK1JVLVVOSy04NTIgOiAxIDogNy40MDAwMDAxCitSVS1VTkstODUzIDogMSA6IDEzLjYKK1JVLVVOSy04NTQgOiAxIDogMTYuOQorUlUtVU5LLTg1NSA6IDEgOiAzLjAKK1JVLVVOSy04NTYgOiAxIDogMS4wCitSVS1VTkstODU3IDogMSA6IDEuMAorUlUtVU5LLTg1OCA6IDEgOiA0LjUKK1JVLVVOSy04NTkgOiAxIDogMi4wOTk5OTk5CitSVS1VTkstODYwIDogMSA6IDEuMAorUlUtVU5LLTg2MSA6IDEgOiAxLjAKK1JVLVVOSy04NjIgOiAxIDogNDk2LjcwMDAxCitSVS1VTkstODYzIDogMSA6IDYyLjc5OTk5OQorUlUtVU5LLTg2NCA6IDEgOiAxLjAKK1JVLVVOSy04NjUgOiAxIDogMS4xCitSVS1VTkstODY2IDogMSA6IDIxLjUKK1JVLVVOSy04NjcgOiAxIDogMi41CitSVS1VTkstODY4IDogMSA6IDEuMAorUlUtVU5LLTg2OSA6IDEgOiAyNC4yMDAwMDEKK1JVLVVOSy04NzAgOiAxIDogMS4zCitSVS1VTkstODcxIDogMSA6IDQ1LjI5OTk5OQorUlUtVU5LLTg3MiA6IDEgOiA1LjgwMDAwMDIKK1JVLVVOSy04NzMgOiAxIDogMy4wOTk5OTk5CitSVS1VTkstODc0IDogMSA6IDYuMAorUlUtVU5LLTg3NSA6IDEgOiA0LjUKK1JVLVVOSy04NzYgOiAxIDogOTYuODAwMDAzCitSVS1VTkstODc3IDogMSA6IDM5LjkwMDAwMgorUlUtVU5LLTg3OCA6IDEgOiA2LjAKK1JVLVVOSy04NzkgOiAxIDogMS4wCitSVS1VTkstODgwIDogMSA6IDIuOTAwMDAwMQorUlUtVU5LLTg4MSA6IDEgOiAxLjEKK1JVLVVOSy04ODIgOiAxIDogNi4wCitSVS1VTkstODgzIDogMSA6IDEuOQorUlUtVU5LLTg4NCA6IDEgOiAyNy4yMDAwMDEKK1JVLVVOSy04ODUgOiAxIDogMS4xCitSVS1VTkstODg2IDogMSA6IDMyMzguMworUlUtVU5LLTg4NyA6IDEgOiAyLjA5OTk5OTkKK1JVLVVOSy04ODggOiAxIDogMS40CitSVS1VTkstODg5IDogMSA6IDUuNTk5OTk5OQorUlUtVU5LLTg5MCA6IDEgOiAzMy41OTk5OTgKK1JVLVVOSy04OTEgOiAxIDogMy41CitSVS1VTkstODkyIDogMSA6IDU2LjAKK1JVLVVOSy04OTMgOiAxIDogMS4wCitSVS1VTkstODk0IDogMSA6IDEuNgorUlUtVU5LLTg5NSA6IDEgOiAyLjU5OTk5OTkKK1JVLVVOSy04OTYgOiAxIDogMS4wCitSVS1VTkstODk3IDogMSA6IDEuOAorUlUtVU5LLTg5OCA6IDEgOiA5OC41CitSVS1VTkstODk5IDogMSA6IDEuMAorUlUtVU5LLTkwMCA6IDEgOiA2LjA5OTk5OTkKK1JVLVVOSy05MDEgOiAxIDogMS4zCitSVS1VTkstOTAyIDogMSA6IDcxLjU5OTk5OAorUlUtVU5LLTkwMyA6IDEgOiA2LjE5OTk5OTgKK1JVLVVOSy05MDQgOiAxIDogMTguMjk5OTk5CitSVS1VTkstOTA1IDogMSA6IDEzLjUKK1JVLVVOSy05MDYgOiAxIDogMS4wCitSVS1VTkstOTA3IDogMSA6IDEuMAorUlUtVU5LLTkwOCA6IDEgOiAxLjAKK1JVLVVOSy05MDkgOiAxIDogMS4wCitSVS1VTkstOTEwIDogMSA6IDEuNAorUlUtVU5LLTkxMSA6IDEgOiAxLjAKK1JVLVVOSy05MTIgOiAxIDogMTM4LjM5OTk5CitSVS1VTkstOTEzIDogMSA6IDU1LjUKK1JVLVVOSy05MTQgOiAxIDogMjA0OS44CitSVS1VTkstOTE1IDogMSA6IDIuOAorUlUtVU5LLTkxNiA6IDEgOiAxLjAKK1JVLVVOSy05MTcgOiAxIDogMi41CitSVS1VTkstOTE4IDogMSA6IDMuMDk5OTk5OQorUlUtVU5LLTkxOSA6IDEgOiAxNC4zCitSVS1VTkstOTIwIDogMSA6IDQuMAorUlUtVU5LLTkyMSA6IDEgOiA1LjMwMDAwMDIKK1JVLVVOSy05MjIgOiAxIDogMTMwLjEwMDAxCitSVS1VTkstOTIzIDogMSA6IDIuMgorUlUtVU5LLTkyNCA6IDEgOiAxLjkKK1JVLVVOSy05MjUgOiAxIDogMS4wCitSVS1VTkstOTI2IDogMSA6IDMzLjcwMDAwMQorUlUtVU5LLTkyNyA6IDEgOiAzLjkwMDAwMDEKK1JVLVVOSy05MjggOiAxIDogMS44CitSVS1VTkstOTI5IDogMSA6IDIuNDAwMDAwMQorUlUtVU5LLTkzMCA6IDEgOiA5LjEwMDAwMDQKK1JVLVVOSy05MzEgOiAxIDogOC42MDAwMDA0CitSVS1VTkstOTMyIDogMSA6IDIuMDk5OTk5OQorUlUtVU5LLTkzMyA6IDEgOiAxLjAKK1JVLVVOSy05MzQgOiAxIDogMS4wCitSVS1VTkstOTM1IDogMSA6IDEuMAorUlUtVU5LLTkzNiA6IDEgOiA0LjE5OTk5OTgKK1JVLVVOSy05MzcgOiAxIDogOC4zMDAwMDAyCitSVS1VTkstOTM4IDogMSA6IDUuMDk5OTk5OQorUlUtVU5LLTkzOSA6IDEgOiAxLjMKK1JVLVVOSy05NDAgOiAxIDogMi4yCitSVS1VTkstOTQxIDogMSA6IDEuMgorUlUtVU5LLTk0MiA6IDEgOiAxLjAKK1JVLVVOSy05NDMgOiAxIDogMTYuNQorUlUtVU5LLTk0NCA6IDEgOiAxNy4xCitSVS1VTkstOTQ1IDogMSA6IDIuMworUlUtVU5LLTk0NiA6IDEgOiAzNi41CitSVS1VTkstOTQ3IDogMSA6IDYuMTk5OTk5OAorUlUtVU5LLTk0OCA6IDEgOiA1LjU5OTk5OTkKK1JVLVVOSy05NDkgOiAxIDogMS4wCitSVS1VTkstOTUwIDogMSA6IDUuNQorUlUtVU5LLTk1MSA6IDEgOiAxLjQKK1JVLVVOSy05NTIgOiAxIDogMS4wCitSVS1VTkstOTUzIDogMSA6IDIuNDAwMDAwMQorUlUtVU5LLTk1NCA6IDEgOiAxNDkuMworUlUtVU5LLTk1NSA6IDEgOiAxMTQuNworUlUtVU5LLTk1NiA6IDEgOiAzLjIKK1JVLVVOSy05NTcgOiAxIDogMi40MDAwMDAxCitSVS1VTkstOTU4IDogMSA6IDMuNTk5OTk5OQorUlUtVU5LLTk1OSA6IDEgOiAxLjAKK1JVLVVOSy05NjAgOiAxIDogNC4wOTk5OTk5CitSVS1VTkstOTYxIDogMSA6IDQ5ODkuMjk5OAorUlUtVU5LLTk2MiA6IDEgOiAzLjgKK1JVLVVOSy05NjMgOiAxIDogNi4wCitSVS1VTkstOTY0IDogMSA6IDEuMAorUlUtVU5LLTk2NSA6IDEgOiAxLjAKK1JVLVVOSy05NjYgOiAxIDogMS4wCitSVS1VTkstOTY3IDogMSA6IDkuMzk5OTk5NgorUlUtVU5LLTk2OCA6IDEgOiA2OC42OTk5OTcKK1JVLVVOSy05NjkgOiAxIDogMTQuMQorUlUtVU5LLTk3MCA6IDEgOiAxLjUKK1JVLVVOSy05NzEgOiAxIDogNi4wCitSVS1VTkstOTcyIDogMSA6IDEuNworUlUtVU5LLTk3MyA6IDEgOiAxMDcuOAorUlUtVU5LLTk3NCA6IDEgOiAxLjAKK1JVLVVOSy05NzUgOiAxIDogODUuOTAwMDAyCitSVS1VTkstOTc2IDogMSA6IDMuMworUlUtVU5LLTk3NyA6IDEgOiAyLjQwMDAwMDEKK1JVLVVOSy05NzggOiAxIDogMi4wCitSVS1VTkstOTc5IDogMSA6IDIuMgorUlUtVU5LLTk4MCA6IDEgOiA2LjUKK1JVLVVOSy05ODEgOiAxIDogMS4wCitSVS1VTkstOTgyIDogMSA6IDEwLjkKK1JVLVVOSy05ODMgOiAxIDogMy41OTk5OTk5CitSVS1VTkstOTg0IDogMSA6IDEuMAorUlUtVU5LLTk4NSA6IDEgOiAxLjQKK1JVLVVOSy05ODYgOiAxIDogMS40CitSVS1VTkstOTg3IDogMSA6IDE2LjYKK1JVLVVOSy05ODggOiAxIDogNi45MDAwMDAxCitSVS1VTkstOTg5IDogMSA6IDEuNworUlUtVU5LLTk5MCA6IDEgOiA0LjUKK1JVLVVOSy05OTEgOiAxIDogMS4wCitSVS1VTkstOTkyIDogMSA6IDEuMAorUlUtVU5LLTk5MyA6IDEgOiA5LjUKK1JVLVVOSy05OTQgOiAxIDogMS4wCitSVS1VTkstOTk1IDogMSA6IDIwLjUKK1JVLVVOSy05OTYgOiAxIDogMi4wOTk5OTk5CitSVS1VTkstOTk3IDogMSA6IDUuMzAwMDAwMgorUlUtVU5LLTk5OCA6IDEgOiA5Ljg5OTk5OTYKK1JVLVVOSy05OTkgOiAxIDogMS4wCitSVS1VTkstMTAwMCA6IDEgOiAxLjMKK1JVLVVOSy0xMDAxIDogMSA6IDMuOAorUlUtVU5LLTEwMDIgOiAxIDogMTYuNQorUlUtVU5LLTEwMDMgOiAxIDogMy4wCitSVS1VTkstMTAwNCA6IDEgOiAzNC4wOTk5OTgKK1JVLVVOSy0xMDA1IDogMSA6IDIuMDk5OTk5OQorUlUtVU5LLTEwMDYgOiAxIDogMS40CitSVS1VTkstMTAwNyA6IDEgOiAxLjAKK1JVLVVOSy0xMDA4IDogMSA6IDEuNworUlUtVU5LLTEwMDkgOiAxIDogMi43CitSVS1VTkstMTAxMCA6IDEgOiAxLjAKK1JVLVVOSy0xMDExIDogMSA6IDEuOQorUlUtVU5LLTEwMTIgOiAxIDogMS4wCitSVS1VTkstMTAxMyA6IDEgOiAxLjEKK1JVLVVOSy0xMDE0IDogMSA6IDEuMAorUlUtVU5LLTEwMTUgOiAxIDogMS4wCitSVS1VTkstMTAxNiA6IDEgOiA5LjgwMDAwMDIKK1JVLVVOSy0xMDE3IDogMSA6IDEuMAorUlUtVU5LLTEwMTggOiAxIDogMy45MDAwMDAxCitSVS1VTkstMTAxOSA6IDEgOiAzLjQwMDAwMDEKK1JVLVVOSy0xMDIwIDogMSA6IDIuNDAwMDAwMQorUlUtVU5LLTEwMjEgOiAxIDogMS43CitSVS1VTkstMTAyMiA6IDEgOiAxMDguMQorUlUtVU5LLTEwMjMgOiAxIDogMi4yCitSVS1VTkstMTAyNCA6IDEgOiAxLjgKK1JVLVVOSy0xMDI1IDogMSA6IDYuMAorUlUtVU5LLTEwMjYgOiAxIDogNi4xOTk5OTk4CitSVS1VTkstMTAyNyA6IDEgOiA0MC4wOTk5OTgKK1JVLVVOSy0xMDI4IDogMSA6IDEuMAorUlUtVU5LLTEwMjkgOiAxIDogMS4wCitSVS1VTkstMTAzMCA6IDEgOiA4LjM5OTk5OTYKK1JVLVVOSy0xMDMxIDogMSA6IDIuOAorUlUtVU5LLTEwMzIgOiAxIDogMzQuNDAwMDAyCitSVS1VTkstMTAzMyA6IDEgOiAxLjAKK1JVLVVOSy0xMDM0IDogMSA6IDEuNgorUlUtVU5LLTEwMzUgOiAxIDogMS45CitSVS1VTkstMTAzNiA6IDEgOiA0LjkwMDAwMDEKK1JVLVVOSy0xMDM3IDogMSA6IDIuNDAwMDAwMQorUlUtVU5LLTEwMzggOiAxIDogMS4wCitSVS1VTkstMTAzOSA6IDEgOiAxLjAKK1JVLVVOSy0xMDQwIDogMSA6IDEuMAorUlUtVU5LLTEwNDEgOiAxIDogMS40CitSVS1VTkstMTA0MiA6IDEgOiAyNi40CitSVS1VTkstMTA0MyA6IDEgOiAxLjAKK1JVLVVOSy0xMDQ0IDogMSA6IDIuOAorUlUtVU5LLTEwNDUgOiAxIDogMS4zCitSVS1VTkstMTA0NiA6IDEgOiAxLjMKK1JVLVVOSy0xMDQ3IDogMSA6IDEuMAorUlUtVU5LLTEwNDggOiAxIDogMS4wCitSVS1VTkstMTA0OSA6IDEgOiAxLjYKK1JVLVVOSy0xMDUwIDogMSA6IDEuMAorUlUtVU5LLTEwNTEgOiAxIDogMS4wCitSVS1VTkstMTA1MiA6IDEgOiA4LjM5OTk5OTYKK1JVLVVOSy0xMDUzIDogMSA6IDIuMworUlUtVU5LLTEwNTQgOiAxIDogNi45MDAwMDAxCitSVS1VTkstMTA1NSA6IDEgOiAzLjkwMDAwMDEKK1JVLVVOSy0xMDU2IDogMSA6IDQuNDAwMDAwMQorUlUtVU5LLTEwNTcgOiAxIDogMTAuOAorUlUtVU5LLTEwNTggOiAxIDogMy43CitSVS1VTkstMTA1OSA6IDEgOiAzMi4yOTk5OTkKK1JVLVVOSy0xMDYwIDogMSA6IDEwLjUKK1JVLVVOSy0xMDYxIDogMSA6IDE0LjcKK1JVLVVOSy0xMDYyIDogMSA6IDQuMzAwMDAwMgorUlUtVU5LLTEwNjMgOiAxIDogMS42CitSVS1VTkstMTA2NCA6IDEgOiAxLjAKK1JVLVVOSy0xMDY1IDogMSA6IDQuOTAwMDAwMQorUlUtVU5LLTEwNjYgOiAxIDogNC40MDAwMDAxCitSVS1VTkstMTA2NyA6IDEgOiAyLjgKK1JVLVVOSy0xMDY4IDogMSA6IDEuMAorUlUtVU5LLTEwNjkgOiAxIDogMS4wCitSVS1VTkstMTA3MCA6IDEgOiAxOS4xCitSVS1VTkstMTA3MSA6IDEgOiA4LjE5OTk5OTgKK1JVLVVOSy0xMDcyIDogMSA6IDUuMTk5OTk5OAorUlUtVU5LLTEwNzMgOiAxIDogMi4wCitSVS1VTkstMTA3NCA6IDEgOiAxLjIKK1JVLVVOSy0xMDc1IDogMSA6IDEuNAorUlUtVU5LLTEwNzYgOiAxIDogNC42OTk5OTk4CitSVS1VTkstMTA3NyA6IDEgOiAxLjIKK1JVLVVOSy0xMDc4IDogMSA6IDEuMAorUlUtVU5LLTEwNzkgOiAxIDogMS41CitSVS1VTkstMTA4MCA6IDEgOiAxMjg3LjYKK1JVLVVOSy0xMDgxIDogMSA6IDEuMgorUlUtVU5LLTEwODIgOiAxIDogNi41CitSVS1VTkstMTA4MyA6IDEgOiA4MjQuOTAwMDIKK1JVLVVOSy0xMDg0IDogMSA6IDc3LjA5OTk5OAorUlUtVU5LLTEwODUgOiAxIDogMS4wCitSVS1VTkstMTA4NiA6IDEgOiAxLjAKK1JVLVVOSy0xMDg3IDogMSA6IDEuMAorUlUtVU5LLTEwODggOiAxIDogNC4zMDAwMDAyCitSVS1VTkstMTA4OSA6IDEgOiA4LjYwMDAwMDQKK1JVLVVOSy0xMDkwIDogMSA6IDY4LjMwMDAwMworUlUtVU5LLTEwOTEgOiAxIDogMS40CitSVS1VTkstMTA5MiA6IDEgOiA4MC40MDAwMDIKK1JVLVVOSy0xMDkzIDogMSA6IDQuMDk5OTk5OQorUlUtVU5LLTEwOTQgOiAxIDogMzYuOTAwMDAyCitSVS1VTkstMTA5NSA6IDEgOiAxLjgKK1JVLVVOSy0xMDk2IDogMSA6IDIxNi44OTk5OQorUlUtVU5LLTEwOTcgOiAxIDogMjA3LjYwMDAxCitSVS1VTkstMTA5OCA6IDEgOiAxMDEuMgorUlUtVU5LLTEwOTkgOiAxIDogMi4zCitSVS1VTkstMTEwMCA6IDEgOiAxLjUKK1JVLVVOSy0xMTAxIDogMSA6IDUuMAorUlUtVU5LLTExMDIgOiAxIDogMy44CitSVS1VTkstMTEwMyA6IDEgOiAxLjgKK1JVLVVOSy0xMTA0IDogMSA6IDEuMAorUlUtVU5LLTExMDUgOiAxIDogMS4wCitSVS1VTkstMTEwNiA6IDEgOiAzNS45MDAwMDIKK1JVLVVOSy0xMTA3IDogMSA6IDQwNS4xMDAwMQorUlUtVU5LLTExMDggOiAxIDogNzIuMTk5OTk3CitSVS1VTkstMTEwOSA6IDEgOiAxLjgKK1JVLVVOSy0xMTEwIDogMSA6IDEuMAorUlUtVU5LLTExMTEgOiAxIDogMy44CitSVS1VTkstMTExMiA6IDEgOiA5OC4zMDAwMDMKK1JVLVVOSy0xMTEzIDogMSA6IDYuNQorUlUtVU5LLTExMTQgOiAxIDogMS43CitSVS1VTkstMTExNSA6IDEgOiA3LjY5OTk5OTgKK1JVLVVOSy0xMTE2IDogMSA6IDEuMAorUlUtVU5LLTExMTcgOiAxIDogNS41CitSVS1VTkstMTExOCA6IDEgOiAxLjAKK1JVLVVOSy0xMTE5IDogMSA6IDQuMzAwMDAwMgorUlUtVU5LLTExMjAgOiAxIDogMS4zCitSVS1VTkstMTEyMSA6IDEgOiAxLjAKK1JVLVVOSy0xMTIyIDogMSA6IDEuMgorUlUtVU5LLTExMjMgOiAxIDogMS4zCitSVS1VTkstMTEyNCA6IDEgOiAxLjAKK1JVLVVOSy0xMTI1IDogMSA6IDExLjAKK1JVLVVOSy0xMTI2IDogMSA6IDEuMAorUlUtVU5LLTExMjcgOiAxIDogMS4wCitSVS1VTkstMTEyOCA6IDEgOiAyLjQwMDAwMDEKK1JVLVVOSy0xMTI5IDogMSA6IDEuMworUlUtVU5LLTExMzAgOiAxIDogMS4wCitSVS1VTkstMTEzMSA6IDEgOiAxLjAKK1JVLVVOSy0xMTMyIDogMSA6IDUuMAorUlUtVU5LLTExMzMgOiAxIDogMi4wOTk5OTk5CitSVS1VTkstMTEzNCA6IDEgOiA0LjY5OTk5OTgKK1JVLVVOSy0xMTM1IDogMSA6IDQuOTAwMDAwMQorUlUtVU5LLTExMzYgOiAxIDogNC45MDAwMDAxCitSVS1VTkstMTEzNyA6IDEgOiAxMy40CitSVS1VTkstMTEzOCA6IDEgOiAxLjAKK1JVLVVOSy0xMTM5IDogMSA6IDIuNQorUlUtVU5LLTExNDAgOiAxIDogMi40MDAwMDAxCitSVS1VTkstMTE0MSA6IDEgOiAxLjAKK1JVLVVOSy0xMTQyIDogMSA6IDE2LjYKK1JVLVVOSy0xMTQzIDogMSA6IDEuNAorUlUtVU5LLTExNDQgOiAxIDogMS4wCitSVS1VTkstMTE0NSA6IDEgOiAyOS42CitSVS1VTkstMTE0NiA6IDEgOiA3NC40MDAwMDIKK1JVLVVOSy0xMTQ3IDogMSA6IDE2LjEKK1JVLVVOSy0xMTQ4IDogMSA6IDEuMAorUlUtVU5LLTExNDkgOiAxIDogMS4wCitSVS1VTkstMTE1MCA6IDEgOiAxNy42CitSVS1VTkstMTE1MSA6IDEgOiAyLjU5OTk5OTkKK1JVLVVOSy0xMTUyIDogMSA6IDIyLjEKK1JVLVVOSy0xMTUzIDogMSA6IDEuMAorUlUtVU5LLTExNTQgOiAxIDogMi45MDAwMDAxCitSVS1VTkstMTE1NSA6IDEgOiAyLjgKK1JVLVVOSy0xMTU2IDogMSA6IDEuMgorUlUtVU5LLTExNTcgOiAxIDogMS4wCitSVS1VTkstMTE1OCA6IDEgOiAxNy4yMDAwMDEKK1JVLVVOSy0xMTU5IDogMSA6IDEuMgorUlUtVU5LLTExNjAgOiAxIDogMS4wCitSVS1VTkstMTE2MSA6IDEgOiAxLjkKK1JVLVVOSy0xMTYyIDogMSA6IDEuMAorUlUtVU5LLTExNjMgOiAxIDogMjkuMQorUlUtVU5LLTExNjQgOiAxIDogMS4yCitSVS1VTkstMTE2NSA6IDEgOiAxLjAKK1JVLVVOSy0xMTY2IDogMSA6IDEuMAorUlUtVU5LLTExNjcgOiAxIDogMS4wCitSVS1VTkstMTE2OCA6IDEgOiAxLjUKK1JVLVVOSy0xMTY5IDogMSA6IDUuMzAwMDAwMgorUlUtVU5LLTExNzAgOiAxIDogMS4zCitSVS1VTkstMTE3MSA6IDEgOiA0LjAKK1JVLVVOSy0xMTcyIDogMSA6IDI1My4wCitSVS1VTkstMTE3MyA6IDEgOiAxLjAKK1JVLVVOSy0xMTc0IDogMSA6IDEuNworUlUtVU5LLTExNzUgOiAxIDogOC4zOTk5OTk2CitSVS1VTkstMTE3NiA6IDEgOiAxLjEKK1JVLVVOSy0xMTc3IDogMSA6IDg4LjA5OTk5OAorUlUtVU5LLTExNzggOiAxIDogMTUuNworUlUtVU5LLTExNzkgOiAxIDogMy4wCitSVS1VTkstMTE4MCA6IDEgOiAyOS4yMDAwMDEKK1JVLVVOSy0xMTgxIDogMSA6IDEuMAorUlUtVU5LLTExODIgOiAxIDogMS4wCitSVS1VTkstMTE4MyA6IDEgOiAxLjkKK1JVLVVOSy0xMTg0IDogMSA6IDMuNDAwMDAwMQorUlUtVU5LLTExODUgOiAxIDogNDkuNzk5OTk5CitSVS1VTkstMTE4NiA6IDEgOiAxLjMKK1JVLVVOSy0xMTg3IDogMSA6IDguNjAwMDAwNAorUlUtVU5LLTExODggOiAxIDogMTQuOAorUlUtVU5LLTExODkgOiAxIDogMS4wCitSVS1VTkstMTE5MCA6IDEgOiA2MS40MDAwMDIKK1JVLVVOSy0xMTkxIDogMSA6IDEuMAorUlUtVU5LLTExOTIgOiAxIDogMy44CitSVS1VTkstMTE5MyA6IDEgOiA2My41CitSVS1VTkstMTE5NCA6IDEgOiAzLjUKK1JVLVVOSy0xMTk1IDogMSA6IDMyLjU5OTk5OAorUlUtVU5LLTExOTYgOiAxIDogMS4wCitSVS1VTkstMTE5NyA6IDEgOiAxLjIKK1JVLVVOSy0xMTk4IDogMSA6IDEuMAorUlUtVU5LLTExOTkgOiAxIDogMS42CitSVS1VTkstMTIwMCA6IDEgOiAxLjAKK1JVLVVOSy0xMjAxIDogMSA6IDEuMAorUlUtVU5LLTEyMDIgOiAxIDogMS4wCitSVS1VTkstMTIwMyA6IDEgOiAzLjUKK1JVLVVOSy0xMjA0IDogMSA6IDIuMDk5OTk5OQorUlUtVU5LLTEyMDUgOiAxIDogMS4wCitSVS1VTkstMTIwNiA6IDEgOiAxMS45CitSVS1VTkstMTIwNyA6IDEgOiAzLjMKK1JVLVVOSy0xMjA4IDogMSA6IDMzLjIwMDAwMQorUlUtVU5LLTEyMDkgOiAxIDogMS4wCitSVS1VTkstMTIxMCA6IDEgOiAxLjMKK1JVLVVOSy0xMjExIDogMSA6IDEuMAorUlUtVU5LLTEyMTIgOiAxIDogNS4xOTk5OTk4CitSVS1VTkstMTIxMyA6IDEgOiAxLjAKK1JVLVVOSy0xMjE0IDogMSA6IDEuMQorUlUtVU5LLTEyMTUgOiAxIDogMS4wCitSVS1VTkstMTIxNiA6IDEgOiAxMS45CitSVS1VTkstMTIxNyA6IDEgOiAxLjAKK1JVLVVOSy0xMjE4IDogMSA6IDEuMAorUlUtVU5LLTEyMTkgOiAxIDogMS4wCitSVS1VTkstMTIyMCA6IDEgOiAzLjUKK1JVLVVOSy0xMjIxIDogMSA6IDEuMAorUlUtVU5LLTEyMjIgOiAxIDogMTAyMTYuNQorUlUtVU5LLTEyMjMgOiAxIDogMS43CitSVS1VTkstMTIyNCA6IDEgOiAxNzg0NS40CitSVS1VTkstMTIyNSA6IDEgOiAxMy4xCitSVS1VTkstMTIyNiA6IDEgOiAxLjAKK1JVLVVOSy0xMjI3IDogMSA6IDIuMAorUlUtVU5LLTEyMjggOiAxIDogMi4wCitSVS1VTkstMTIyOSA6IDEgOiAxLjQKK1JVLVVOSy0xMjMwIDogMSA6IDIuMAorUlUtVU5LLTEyMzEgOiAxIDogMS44CitSVS1VTkstMTIzMiA6IDEgOiA2MzAuMDk5OTgKK1JVLVVOSy0xMjMzIDogMSA6IDQuNDAwMDAwMQorUlUtVU5LLTEyMzQgOiAxIDogMS4wCitSVS1VTkstMTIzNSA6IDEgOiAxLjAKK1JVLVVOSy0xMjM2IDogMSA6IDEuMAorUlUtVU5LLTEyMzcgOiAxIDogMS4wCitSVS1VTkstMTIzOCA6IDEgOiA0LjAKK1JVLVVOSy0xMjM5IDogMSA6IDEuMAorUlUtVU5LLTEyNDAgOiAxIDogMS4wCitSVS1VTkstMTI0MSA6IDEgOiAyLjA5OTk5OTkKK1JVLVVOSy0xMjQyIDogMSA6IDEuMAorUlUtVU5LLTEyNDMgOiAxIDogMi41OTk5OTk5CitSVS1VTkstMTI0NCA6IDEgOiAxLjAKK1JVLVVOSy0xMjQ1IDogMSA6IDEuMAorUlUtVU5LLTEyNDYgOiAxIDogMTUuMAorUlUtVU5LLTEyNDcgOiAxIDogMi41OTk5OTk5CitSVS1VTkstMTI0OCA6IDEgOiAxLjAKK1JVLVVOSy0xMjQ5IDogMSA6IDEuMAorUlUtVU5LLTEyNTAgOiAxIDogNy42OTk5OTk4CitSVS1VTkstMTI1MSA6IDEgOiAxLjAKK1JVLVVOSy0xMjUyIDogMSA6IDEuMQorUlUtVU5LLTEyNTMgOiAxIDogMS4yCitSVS1VTkstMTI1NCA6IDEgOiAxLjAKK1JVLVVOSy0xMjU1IDogMSA6IDE3LjEKK1JVLVVOSy0xMjU2IDogMSA6IDEuNAorUlUtVU5LLTEyNTcgOiAxIDogMS4yCitSVS1VTkstMTI1OCA6IDEgOiAyMC4wCitSVS1VTkstMTI1OSA6IDEgOiA0Ny43OTk5OTkKK1JVLVVOSy0xMjYwIDogMSA6IDIyLjkKK1JVLVVOSy0xMjYxIDogMSA6IDQuNQorUlUtVU5LLTEyNjIgOiAxIDogMi4yCitSVS1VTkstMTI2MyA6IDEgOiAxMy4zCitSVS1VTkstMTI2NCA6IDEgOiAxNS41CitSVS1VTkstMTI2NSA6IDEgOiAxLjkKK1JVLVVOSy0xMjY2IDogMSA6IDEuMAorUlUtVU5LLTEyNjcgOiAxIDogMy4yCitSVS1VTkstMTI2OCA6IDEgOiA2LjUKK1JVLVVOSy0xMjY5IDogMSA6IDMuNDAwMDAwMQorUlUtVU5LLTEyNzAgOiAxIDogMS45CitSVS1VTkstMTI3MSA6IDEgOiAxLjAKK1JVLVVOSy0xMjcyIDogMSA6IDE5MjcuNworUlUtVU5LLTEyNzMgOiAxIDogNy40MDAwMDAxCitSVS1VTkstMTI3NCA6IDEgOiAxLjkKK1JVLVVOSy0xMjc1IDogMSA6IDI1NS4yCitSVS1VTkstMTI3NiA6IDEgOiAxLjAKK1JVLVVOSy0xMjc3IDogMSA6IDE5MzMuMQorUlUtVU5LLTEyNzggOiAxIDogMzcuMDk5OTk4CitSVS1VTkstMTI3OSA6IDEgOiAxLjIKK1JVLVVOSy0xMjgwIDogMSA6IDU1MzQuMjk5OAorUlUtVU5LLTEyODEgOiAxIDogMTIxLjcKK1JVLVVOSy0xMjgyIDogMSA6IDIyMTQuNjAwMQorUlUtVU5LLTEyODMgOiAxIDogMjgwOC4yCitSVS1VTkstMTI4NCA6IDEgOiAxMTE1LjYKK1JVLVVOSy0xMjg1IDogMSA6IDEuMAorUlUtVU5LLTEyODYgOiAxIDogNDkuMDk5OTk4CitSVS1VTkstMTI4NyA6IDEgOiA2MDAuMjk5OTkKK1JVLVVOSy0xMjg4IDogMSA6IDE0OS43CitSVS1VTkstMTI4OSA6IDEgOiAxLjQKK1JVLVVOSy0xMjkwIDogMSA6IDMyNi4yOTk5OQorUlUtVU5LLTEyOTEgOiAxIDogNDAuMjk5OTk5CitSVS1VTkstMTI5MiA6IDEgOiAxNTE0My42CitSVS1VTkstMTI5MyA6IDEgOiAxLjAKK1JVLVVOSy0xMjk0IDogMSA6IDE2ODkuOQorUlUtVU5LLTEyOTUgOiAxIDogOTA3Mi4wCitSVS1VTkstMTI5NiA6IDEgOiA0ODkuMjAwMDEKK1JVLVVOSy0xMjk3IDogMSA6IDIzNzcuNworUlUtVU5LLTEyOTggOiAxIDogMjk2MjYuNAorUlUtVU5LLTEyOTkgOiAxIDogMjk2MjYuNAorUlUtVU5LLTEzMDAgOiAxIDogNDAuNDAwMDAyCitSVS1VTkstMTMwMSA6IDEgOiAxODcxLjYKK1JVLVVOSy0xMzAyIDogMSA6IDM3NS43OTk5OQorUlUtVU5LLTEzMDMgOiAxIDogMjQuNQorUlUtVU5LLTEzMDQgOiAxIDogMS4wCitSVS1VTkstMTMwNSA6IDEgOiA1LjU5OTk5OTkKK1JVLVVOSy0xMzA2IDogMSA6IDEuMAorUlUtVU5LLTEzMDcgOiAxIDogMTIxNi42CitSVS1VTkstMTMwOCA6IDEgOiA3LjkwMDAwMDEKK1JVLVVOSy0xMzA5IDogMSA6IDI4LjIwMDAwMQorUlUtVU5LLTEzMTAgOiAxIDogNS45MDAwMDAxCitSVS1VTkstMTMxMSA6IDEgOiAzLjA5OTk5OTkKK1JVLVVOSy0xMzEyIDogMSA6IDUuODAwMDAwMgorUlUtVU5LLTEzMTMgOiAxIDogNzQuMDk5OTk4CitSVS1VTkstMTMxNCA6IDEgOiA2Ny45MDAwMDIKK1JVLVVOSy0xMzE1IDogMSA6IDUuMzAwMDAwMgorUlUtVU5LLTEzMTYgOiAxIDogNC4wCitSVS1VTkstMTMxNyA6IDEgOiAzMS4xCitSVS1VTkstMTMxOCA6IDEgOiAxLjAKK1JVLVVOSy0xMzE5IDogMSA6IDEyLjcKK1JVLVVOSy0xMzIwIDogMSA6IDEzLjMKK1JVLVVOSy0xMzIxIDogMSA6IDEuMQorUlUtVU5LLTEzMjIgOiAxIDogMTkuMQorUlUtVU5LLTEzMjMgOiAxIDogMS4wCitSVS1VTkstMTMyNCA6IDEgOiAxLjAKK1JVLVVOSy0xMzI1IDogMSA6IDEuOAorUlUtVU5LLTEzMjYgOiAxIDogMi41CitSVS1VTkstMTMyNyA6IDEgOiAyLjcKK1JVLVVOSy0xMzI4IDogMSA6IDE5MDEuOAorUlUtVU5LLTEzMjkgOiAxIDogMS42CitSVS1VTkstMTMzMCA6IDEgOiAzLjIKK1JVLVVOSy0xMzMxIDogMSA6IDExLjIKK1JVLVVOSy0xMzMyIDogMSA6IDEuMAorUlUtVU5LLTEzMzMgOiAxIDogOC4wCitSVS1VTkstMTMzNCA6IDEgOiAyLjU5OTk5OTkKK1JVLVVOSy0xMzM1IDogMSA6IDEuMAorUlUtVU5LLTEzMzYgOiAxIDogMi43CitSVS1VTkstMTMzNyA6IDEgOiAxLjIKK1JVLVVOSy0xMzM4IDogMSA6IDEuMAorUlUtVU5LLTEzMzkgOiAxIDogMS4wCitSVS1VTkstMTM0MCA6IDEgOiAxLjAKK1JVLVVOSy0xMzQxIDogMSA6IDEuMAorUlUtVU5LLTEzNDIgOiAxIDogMS4yCitSVS1VTkstMTM0MyA6IDEgOiAxNTQuNworUlUtVU5LLTEzNDQgOiAxIDogOS4zOTk5OTk2CitSVS1VTkstMTM0NSA6IDEgOiA1MS41OTk5OTgKK1JVLVVOSy0xMzQ2IDogMSA6IDc0LjA5OTk5OAorUlUtVU5LLTEzNDcgOiAxIDogMzkzNi4yCitSVS1VTkstMTM0OCA6IDEgOiA1LjkwMDAwMDEKK1JVLVVOSy0xMzQ5IDogMSA6IDMwLjI5OTk5OQorUlUtVU5LLTEzNTAgOiAxIDogMS4wCitSVS1VTkstMTM1MSA6IDEgOiAxLjAKK1JVLVVOSy0xMzUyIDogMSA6IDIuMDk5OTk5OQorUlUtVU5LLTEzNTMgOiAxIDogMy45MDAwMDAxCitSVS1VTkstMTM1NCA6IDEgOiAyMjY5LjMKK1JVLVVOSy0xMzU1IDogMSA6IDIuNworUlUtVU5LLTEzNTYgOiAxIDogNy4wOTk5OTk5CitSVS1VTkstMTM1NyA6IDEgOiAyMi4yOTk5OTkKK1JVLVVOSy0xMzU4IDogMSA6IDEzLjgKK1JVLVVOSy0xMzU5IDogMSA6IDMyLjIwMDAwMQorUlUtVU5LLTEzNjAgOiAxIDogMTguNzk5OTk5CitSVS1VTkstMTM2MSA6IDEgOiAzLjA5OTk5OTkKK1JVLVVOSy0xMzYyIDogMSA6IDY1LjA5OTk5OAorUlUtVU5LLTEzNjMgOiAxIDogMi4yCitSVS1VTkstMTM2NCA6IDEgOiAxLjkKK1JVLVVOSy0xMzY1IDogMSA6IDEyLjMKK1JVLVVOSy0xMzY2IDogMSA6IDE2LjYKK1JVLVVOSy0xMzY3IDogMSA6IDIzLjUKK1JVLVVOSy0xMzY4IDogMSA6IDIuNworUlUtVU5LLTEzNjkgOiAxIDogNy4xOTk5OTk4CitSVS1VTkstMTM3MCA6IDEgOiA4Ljg5OTk5OTYKK1JVLVVOSy0xMzcxIDogMSA6IDE4LjYKK1JVLVVOSy0xMzcyIDogMSA6IDM0LjQwMDAwMgorUlUtVU5LLTEzNzMgOiAxIDogMjM3LjM5OTk5CitSVS1VTkstMTM3NCA6IDEgOiA5NC4wCitSVS1VTkstMTM3NSA6IDEgOiA1LjAKK1JVLVVOSy0xMzc2IDogMSA6IDI4OTkuMworUlUtVU5LLTEzNzcgOiAxIDogMzAuNAorUlUtVU5LLTEzNzggOiAxIDogNC4zMDAwMDAyCitSVS1VTkstMTM3OSA6IDEgOiA1MTUuMDk5OTgKK1JVLVVOSy0xMzgwIDogMSA6IDQuOTAwMDAwMQorUlUtVU5LLTEzODEgOiAxIDogMi41OTk5OTk5CitSVS1VTkstMTM4MiA6IDEgOiAxLjAKK1JVLVVOSy0xMzgzIDogMSA6IDIuNQorUlUtVU5LLTEzODQgOiAxIDogMzQuMDk5OTk4CitSVS1VTkstMTM4NSA6IDEgOiAzLjUKK1JVLVVOSy0xMzg2IDogMSA6IDYuMzAwMDAwMgorUlUtVU5LLTEzODcgOiAxIDogMTEwLjkKK1JVLVVOSy0xMzg4IDogMSA6IDEuNgorUlUtVU5LLTEzODkgOiAxIDogMS4wCitSVS1VTkstMTM5MCA6IDEgOiAxLjEKK1JVLVVOSy0xMzkxIDogMSA6IDEyLjAKK1JVLVVOSy0xMzkyIDogMSA6IDY1LjUKK1JVLVVOSy0xMzkzIDogMSA6IDE2LjAKK1JVLVVOSy0xMzk0IDogMSA6IDEyLjQKK1JVLVVOSy0xMzk1IDogMSA6IDEuMAorUlUtVU5LLTEzOTYgOiAxIDogMy4zCitSVS1VTkstMTM5NyA6IDEgOiAxLjMKK1JVLVVOSy0xMzk4IDogMSA6IDEwOS4zCitSVS1VTkstMTM5OSA6IDEgOiAxNS4wCitSVS1VTkstMTQwMCA6IDEgOiA2LjY5OTk5OTgKK1JVLVVOSy0xNDAxIDogMSA6IDEuMAorUlUtVU5LLTE0MDIgOiAxIDogMzAuNgorUlUtVU5LLTE0MDMgOiAxIDogNi4xOTk5OTk4CitSVS1VTkstMTQwNCA6IDEgOiAxLjcKK1JVLVVOSy0xNDA1IDogMSA6IDEuNgorUlUtVU5LLTE0MDYgOiAxIDogMTcuMQorUlUtVU5LLTE0MDcgOiAxIDogMS4wCitSVS1VTkstMTQwOCA6IDEgOiAxLjcKK1JVLVVOSy0xNDA5IDogMSA6IDEuMAorUlUtVU5LLTE0MTAgOiAxIDogNS44MDAwMDAyCitSVS1VTkstMTQxMSA6IDEgOiAyLjgKK1JVLVVOSy0xNDEyIDogMSA6IDMzLjkwMDAwMgorUlUtVU5LLTE0MTMgOiAxIDogMjk3Ljg5OTk5CitSVS1VTkstMTQxNCA6IDEgOiAyNzguNQorUlUtVU5LLTE0MTUgOiAxIDogMS4wCitSVS1VTkstMTQxNiA6IDEgOiAzMi41OTk5OTgKK1JVLVVOSy0xNDE3IDogMSA6IDEuNQorUlUtVU5LLTE0MTggOiAxIDogMy40MDAwMDAxCitSVS1VTkstMTQxOSA6IDEgOiAxLjAKK1JVLVVOSy0xNDIwIDogMSA6IDM5LjA5OTk5OAorUlUtVU5LLTE0MjEgOiAxIDogMzQ0Ljc5OTk5CitSVS1VTkstMTQyMiA6IDEgOiAxLjAKK1JVLVVOSy0xNDIzIDogMSA6IDQuMzAwMDAwMgorUlUtVU5LLTE0MjQgOiAxIDogMS40CitSVS1VTkstMTQyNSA6IDEgOiAxNDEuMTAwMDEKK1JVLVVOSy0xNDI2IDogMSA6IDUxMC42MDAwMQorUlUtVU5LLTE0MjcgOiAxIDogMi4wCitSVS1VTkstMTQyOCA6IDEgOiAxLjAKK1JVLVVOSy0xNDI5IDogMSA6IDEwLjQKK1JVLVVOSy0xNDMwIDogMSA6IDU3Ljc5OTk5OQorUlUtVU5LLTE0MzEgOiAxIDogODcyNy41OTk2CitSVS1VTkstMTQzMiA6IDEgOiAxLjUKK1JVLVVOSy0xNDMzIDogMSA6IDEuMAorUlUtVU5LLTE0MzQgOiAxIDogMTYyLjEwMDAxCitSVS1VTkstMTQzNSA6IDEgOiA0My4wOTk5OTgKK1JVLVVOSy0xNDM2IDogMSA6IDQyOS4wCitSVS1VTkstMTQzNyA6IDEgOiAxLjcKK1JVLVVOSy0xNDM4IDogMSA6IDEuMAorUlUtVU5LLTE0MzkgOiAxIDogMTY1NC45CitSVS1VTkstMTQ0MCA6IDEgOiAxMTMuMAorUlUtVU5LLTE0NDEgOiAxIDogMjUuNAorUlUtVU5LLTE0NDIgOiAxIDogNDI1LjUKK1JVLVVOSy0xNDQzIDogMSA6IDQwOC41CitSVS1VTkstMTQ0NCA6IDEgOiA5MzIuMDk5OTgKK1JVLVVOSy0xNDQ1IDogMSA6IDQuMTk5OTk5OAorUlUtVU5LLTE0NDYgOiAxIDogMjcuMQorUlUtVU5LLTE0NDcgOiAxIDogMTUwLjUKK1JVLVVOSy0xNDQ4IDogMSA6IDIuNQorUlUtVU5LLTE0NDkgOiAxIDogMS4wCitSVS1VTkstMTQ1MCA6IDEgOiA4Ljg5OTk5OTYKK1JVLVVOSy0xNDUxIDogMSA6IDI4NC4yOTk5OQorUlUtVU5LLTE0NTIgOiAxIDogMi4wCitSVS1VTkstMTQ1MyA6IDEgOiAyNzQ0LjcKK1JVLVVOSy0xNDU0IDogMSA6IDIzNi4zCitSVS1VTkstMTQ1NSA6IDEgOiAzMzYuMzk5OTkKK1JVLVVOSy0xNDU2IDogMSA6IDEuMAorUlUtVU5LLTE0NTcgOiAxIDogMjAzNS42CitSVS1VTkstMTQ1OCA6IDEgOiAxMDYzLjEKK1JVLVVOSy0xNDU5IDogMSA6IDM1MS44OTk5OQorUlUtVU5LLTE0NjAgOiAxIDogMS4wCitSVS1VTkstMTQ2MSA6IDEgOiAxLjMKK1JVLVVOSy0xNDYyIDogMSA6IDEuMAorUlUtVU5LLTE0NjMgOiAxIDogMS4wCitSVS1VTkstMTQ2NCA6IDEgOiA3My45MDAwMDIKK1JVLVVOSy0xNDY1IDogMSA6IDEuNQorUlUtVU5LLTE0NjYgOiAxIDogMS4wCitSVS1VTkstMTQ2NyA6IDEgOiAxMTEuMworUlUtVU5LLTE0NjggOiAxIDogMjEuMjAwMDAxCitSVS1VTkstMTQ2OSA6IDEgOiAxNTMuMzk5OTkKK1JVLVVOSy0xNDcwIDogMSA6IDQuMzAwMDAwMgorUlUtVU5LLTE0NzEgOiAxIDogNTguMjk5OTk5CitSVS1VTkstMTQ3MiA6IDEgOiA2LjkwMDAwMDEKK1JVLVVOSy0xNDczIDogMSA6IDEwLjYKK1JVLVVOSy0xNDc0IDogMSA6IDU3LjAKK1JVLVVOSy0xNDc1IDogMSA6IDk3Ni43MDAwMQorUlUtVU5LLTE0NzYgOiAxIDogMjUuMjk5OTk5CitSVS1VTkstMTQ3NyA6IDEgOiA0Mi40MDAwMDIKK1JVLVVOSy0xNDc4IDogMSA6IDE0LjAKK1JVLVVOSy0xNDc5IDogMSA6IDUwNS41CitSVS1VTkstMTQ4MCA6IDEgOiAxLjEKK1JVLVVOSy0xNDgxIDogMSA6IDUuMDk5OTk5OQorUlUtVU5LLTE0ODIgOiAxIDogMjAuMQorUlUtVU5LLTE0ODMgOiAxIDogNjM0Ljc5OTk5CitSVS1VTkstMTQ4NCA6IDEgOiAxLjAKK1JVLVVOSy0xNDg1IDogMSA6IDEuMworUlUtVU5LLTE0ODYgOiAxIDogMi4wCitSVS1VTkstMTQ4NyA6IDEgOiAxMS43CitSVS1VTkstMTQ4OCA6IDEgOiA3My4wCitSVS1VTkstMTQ4OSA6IDEgOiA2Mi41CitSVS1VTkstMTQ5MCA6IDEgOiA0LjY5OTk5OTgKK1JVLVVOSy0xNDkxIDogMSA6IDIuNTk5OTk5OQorUlUtVU5LLTE0OTIgOiAxIDogMTg2LjAKK1JVLVVOSy0xNDkzIDogMSA6IDE5LjYKK1JVLVVOSy0xNDk0IDogMSA6IDEyLjEKK1JVLVVOSy0xNDk1IDogMSA6IDE0MDQ3LjAKK1JVLVVOSy0xNDk2IDogMSA6IDQuODAwMDAwMgorUlUtVU5LLTE0OTcgOiAxIDogMS4xCitSVS1VTkstMTQ5OCA6IDEgOiA2LjU5OTk5OTkKK1JVLVVOSy0xNDk5IDogMSA6IDEuMAorUlUtVU5LLTE1MDAgOiAxIDogNC4zMDAwMDAyCitSVS1VTkstMTUwMSA6IDEgOiAyLjIKK1JVLVVOSy0xNTAyIDogMSA6IDI3My42MDAwMQorUlUtVU5LLTE1MDMgOiAxIDogMS4wCitSVS1VTkstMTUwNCA6IDEgOiA0My41CitSVS1VTkstMTUwNSA6IDEgOiAxLjAKK1JVLVVOSy0xNTA2IDogMSA6IDI2MS44OTk5OQorUlUtVU5LLTE1MDcgOiAxIDogMS4yCitSVS1VTkstMTUwOCA6IDEgOiAxNTMwLjcKK1JVLVVOSy0xNTA5IDogMSA6IDYuNjk5OTk5OAorUlUtVU5LLTE1MTAgOiAxIDogMzIuNQorUlUtVU5LLTE1MTEgOiAxIDogMi4yCitSVS1VTkstMTUxMiA6IDEgOiA1LjU5OTk5OTkKK1JVLVVOSy0xNTEzIDogMSA6IDIuMworUlUtVU5LLTE1MTQgOiAxIDogMS44CitSVS1VTkstMTUxNSA6IDEgOiAxLjAKK1JVLVVOSy0xNTE2IDogMSA6IDEuNgorUlUtVU5LLTE1MTcgOiAxIDogMS4wCitSVS1VTkstMTUxOCA6IDEgOiAxLjAKK1JVLVVOSy0xNTE5IDogMSA6IDQ4LjI5OTk5OQorUlUtVU5LLTE1MjAgOiAxIDogMS4wCitSVS1VTkstMTUyMSA6IDEgOiAxLjIKK1JVLVVOSy0xNTIyIDogMSA6IDEzLjIKK1JVLVVOSy0xNTIzIDogMSA6IDEuMAorUlUtVU5LLTE1MjQgOiAxIDogMS42CitSVS1VTkstMTUyNSA6IDEgOiAxLjQKK1JVLVVOSy0xNTI2IDogMSA6IDEuMAorUlUtVU5LLTE1MjcgOiAxIDogMzIuMjAwMDAxCitSVS1VTkstMTUyOCA6IDEgOiAxLjAKK1JVLVVOSy0xNTI5IDogMSA6IDI4MC4wCitSVS1VTkstMTUzMCA6IDEgOiAxLjAKK1JVLVVOSy0xNTMxIDogMSA6IDEuNAorUlUtVU5LLTE1MzIgOiAxIDogMS4wCitSVS1VTkstMTUzMyA6IDEgOiAyMi4yMDAwMDEKK1JVLVVOSy0xNTM0IDogMSA6IDMuMgorUlUtVU5LLTE1MzUgOiAxIDogMTAuOAorUlUtVU5LLTE1MzYgOiAxIDogMS4wCitSVS1VTkstMTUzNyA6IDEgOiAxMS41CitSVS1VTkstMTUzOCA6IDEgOiAxLjAKK1JVLVVOSy0xNTM5IDogMSA6IDQuNQorUlUtVU5LLTE1NDAgOiAxIDogMzQuNQorUlUtVU5LLTE1NDEgOiAxIDogMS4wCitSVS1VTkstMTU0MiA6IDEgOiAzMC42CitSVS1VTkstMTU0MyA6IDEgOiAxMDU4Mi43CitSVS1VTkstMTU0NCA6IDEgOiAxLjAKK1JVLVVOSy0xNTQ1IDogMSA6IDIuNTk5OTk5OQorUlUtVU5LLTE1NDYgOiAxIDogMS4wCitSVS1VTkstMTU0NyA6IDEgOiAxMi40CitSVS1VTkstMTU0OCA6IDEgOiAxLjQKK1JVLVVOSy0xNTQ5IDogMSA6IDEuNQorUlUtVU5LLTE1NTAgOiAxIDogMTIuMgorUlUtVU5LLTE1NTEgOiAxIDogMS4wCitSVS1VTkstMTU1MiA6IDEgOiA2LjAKK1JVLVVOSy0xNTUzIDogMSA6IDEuMgorUlUtVU5LLTE1NTQgOiAxIDogMS4xCitSVS1VTkstMTU1NSA6IDEgOiAyLjQwMDAwMDEKK1JVLVVOSy0xNTU2IDogMSA6IDEuMAorUlUtVU5LLTE1NTcgOiAxIDogMS4wCitSVS1VTkstMTU1OCA6IDEgOiA0LjY5OTk5OTgKK1JVLVVOSy0xNTU5IDogMSA6IDEuMAorUlUtVU5LLTE1NjAgOiAxIDogMS4wCitSVS1VTkstMTU2MSA6IDEgOiAxLjAKK1JVLVVOSy0xNTYyIDogMSA6IDEuMAorUlUtVU5LLTE1NjMgOiAxIDogNy4zMDAwMDAyCitSVS1VTkstMTU2NCA6IDEgOiAxLjQKK1JVLVVOSy0xNTY1IDogMSA6IDMuMAorUlUtVU5LLTE1NjYgOiAxIDogMS4xCitSVS1VTkstMTU2NyA6IDEgOiAyLjIKK1JVLVVOSy0xNTY4IDogMSA6IDEuNQorUlUtVU5LLTE1NjkgOiAxIDogMS41CitSVS1VTkstMTU3MCA6IDEgOiAxLjAKK1JVLVVOSy0xNTcxIDogMSA6IDEwNC4yCitSVS1VTkstMTU3MiA6IDEgOiA0LjQwMDAwMDEKK1JVLVVOSy0xNTczIDogMSA6IDEuMAorUlUtVU5LLTE1NzQgOiAxIDogMS4wCitSVS1VTkstMTU3NSA6IDEgOiAxNC44CitSVS1VTkstMTU3NiA6IDEgOiAyNDguNworUlUtVU5LLTE1NzcgOiAxIDogMS4zCitSVS1VTkstMTU3OCA6IDEgOiAxLjAKK1JVLVVOSy0xNTc5IDogMSA6IDEuMAorUlUtVU5LLTE1ODAgOiAxIDogMS4wCitSVS1VTkstMTU4MSA6IDEgOiAxLjAKK1JVLVVOSy0xNTgyIDogMSA6IDEuMAorUlUtVU5LLTE1ODMgOiAxIDogMS4wCitSVS1VTkstMTU4NCA6IDEgOiAxLjAKK1JVLVVOSy0xNTg1IDogMSA6IDEuMAorUlUtVU5LLTE1ODYgOiAxIDogMi41OTk5OTk5CitSVS1VTkstMTU4NyA6IDEgOiAzLjMKK1JVLVVOSy0xNTg4IDogMSA6IDUuNDAwMDAwMQorUlUtVU5LLTE1ODkgOiAxIDogMjQuMjAwMDAxCitSVS1VTkstMTU5MCA6IDEgOiAyLjgKK1JVLVVOSy0xNTkxIDogMSA6IDEuMworUlUtVU5LLTE1OTIgOiAxIDogMi4yCitSVS1VTkstMTU5MyA6IDEgOiAzMi41CitSVS1VTkstMTU5NCA6IDEgOiAxLjAKK1JVLVVOSy0xNTk1IDogMSA6IDQ4LjQwMDAwMgorUlUtVU5LLTE1OTYgOiAxIDogNi4wCitSVS1VTkstMTU5NyA6IDEgOiAxLjgKK1JVLVVOSy0xNTk4IDogMSA6IDIuMAorUlUtVU5LLTE1OTkgOiAxIDogMS4yCitSVS1VTkstMTYwMCA6IDEgOiA5Mi4wOTk5OTgKK1JVLVVOSy0xNjAxIDogMSA6IDcuOTAwMDAwMQorUlUtVU5LLTE2MDIgOiAxIDogOC44OTk5OTk2CitSVS1VTkstMTYwMyA6IDEgOiA4LjMwMDAwMDIKK1JVLVVOSy0xNjA0IDogMSA6IDIuMAorUlUtVU5LLTE2MDUgOiAxIDogMTQzLjMKK1JVLVVOSy0xNjA2IDogMSA6IDEuMAorUlUtVU5LLTE2MDcgOiAxIDogMjQuOQorUlUtVU5LLTE2MDggOiAxIDogMS4wCitSVS1VTkstMTYwOSA6IDEgOiA1LjAKK1JVLVVOSy0xNjEwIDogMSA6IDQuNDAwMDAwMQorUlUtVU5LLTE2MTEgOiAxIDogMS42CitSVS1VTkstMTYxMiA6IDEgOiAzMjMuNzk5OTkKK1JVLVVOSy0xNjEzIDogMSA6IDEuMQorUlUtVU5LLTE2MTQgOiAxIDogNy4zMDAwMDAyCitSVS1VTkstMTYxNSA6IDEgOiAxLjYKK1JVLVVOSy0xNjE2IDogMSA6IDU5LjUKK1JVLVVOSy0xNjE3IDogMSA6IDE3LjI5OTk5OQorUlUtVU5LLTE2MTggOiAxIDogMS4yCitSVS1VTkstMTYxOSA6IDEgOiAxLjIKK1JVLVVOSy0xNjIwIDogMSA6IDEuMAorUlUtVU5LLTE2MjEgOiAxIDogMS4wCitSVS1VTkstMTYyMiA6IDEgOiAxLjMKK1JVLVVOSy0xNjIzIDogMSA6IDIuMDk5OTk5OQorUlUtVU5LLTE2MjQgOiAxIDogMS4wCitSVS1VTkstMTYyNSA6IDEgOiA0LjMwMDAwMDIKK1JVLVVOSy0xNjI2IDogMSA6IDI0LjUKK1JVLVVOSy0xNjI3IDogMSA6IDQ1OTI0LjY5OQorUlUtVU5LLTE2MjggOiAxIDogMS4wCitSVS1VTkstMTYyOSA6IDEgOiAxLjAKK1JVLVVOSy0xNjMwIDogMSA6IDEuNQorUlUtVU5LLTE2MzEgOiAxIDogMS4wCitSVS1VTkstMTYzMiA6IDEgOiAxLjAKK1JVLVVOSy0xNjMzIDogMSA6IDcuMDk5OTk5OQorUlUtVU5LLTE2MzQgOiAxIDogMS42CitSVS1VTkstMTYzNSA6IDEgOiA2LjUKK1JVLVVOSy0xNjM2IDogMSA6IDQ3LjQwMDAwMgorUlUtVU5LLTE2MzcgOiAxIDogMS4wCitSVS1VTkstMTYzOCA6IDEgOiAxLjAKK1JVLVVOSy0xNjM5IDogMSA6IDcuOTAwMDAwMQorUlUtVU5LLTE2NDAgOiAxIDogMi41OTk5OTk5CitSVS1VTkstMTY0MSA6IDEgOiAxLjAKK1JVLVVOSy0xNjQyIDogMSA6IDMuNDAwMDAwMQorUlUtVU5LLTE2NDMgOiAxIDogMS44CitSVS1VTkstMTY0NCA6IDEgOiA2LjQwMDAwMDEKK1JVLVVOSy0xNjQ1IDogMSA6IDcuOTAwMDAwMQorUlUtVU5LLTE2NDYgOiAxIDogMS4wCitSVS1VTkstMTY0NyA6IDEgOiAxMy45CitSVS1VTkstMTY0OCA6IDEgOiAyLjUKK1JVLVVOSy0xNjQ5IDogMSA6IDEuMAorUlUtVU5LLTE2NTAgOiAxIDogMS44CitSVS1VTkstMTY1MSA6IDEgOiA0LjA5OTk5OTkKK1JVLVVOSy0xNjUyIDogMSA6IDkuMzAwMDAwMgorUlUtVU5LLTE2NTMgOiAxIDogNi4wCitSVS1VTkstMTY1NCA6IDEgOiAxLjQKK1JVLVVOSy0xNjU1IDogMSA6IDEuMAorUlUtVU5LLTE2NTYgOiAxIDogMzYuMAorUlUtVU5LLTE2NTcgOiAxIDogMS4wCitSVS1VTkstMTY1OCA6IDEgOiAxLjIKK1JVLVVOSy0xNjU5IDogMSA6IDE0MC4zOTk5OQorUlUtVU5LLTE2NjAgOiAxIDogNS4wCitSVS1VTkstMTY2MSA6IDEgOiAxMi41CitSVS1VTkstMTY2MiA6IDEgOiAxLjAKK1JVLVVOSy0xNjYzIDogMSA6IDEuMAorUlUtVU5LLTE2NjQgOiAxIDogNS42OTk5OTk4CitSVS1VTkstMTY2NSA6IDEgOiAxNS4yCitSVS1VTkstMTY2NiA6IDEgOiAxLjAKK1JVLVVOSy0xNjY3IDogMSA6IDEuMAorUlUtVU5LLTE2NjggOiAxIDogMy4yCitSVS1VTkstMTY2OSA6IDEgOiAxNS4xCitSVS1VTkstMTY3MCA6IDEgOiAyLjU5OTk5OTkKK1JVLVVOSy0xNjcxIDogMSA6IDMzLjUKK1JVLVVOSy0xNjcyIDogMSA6IDQuNQorUlUtVU5LLTE2NzMgOiAxIDogOC4zOTk5OTk2CitSVS1VTkstMTY3NCA6IDEgOiA2MS4yOTk5OTkKK1JVLVVOSy0xNjc1IDogMSA6IDc3LjQwMDAwMgorUlUtVU5LLTE2NzYgOiAxIDogNDAuOTAwMDAyCitSVS1VTkstMTY3NyA6IDEgOiAxLjAKK1JVLVVOSy0xNjc4IDogMSA6IDEuMAorUlUtVU5LLTE2NzkgOiAxIDogMTMuMAorUlUtVU5LLTE2ODAgOiAxIDogNS42OTk5OTk4CitSVS1VTkstMTY4MSA6IDEgOiAxLjAKK1JVLVVOSy0xNjgyIDogMSA6IDcuODAwMDAwMgorUlUtVU5LLTE2ODMgOiAxIDogMjExLjYwMDAxCitSVS1VTkstMTY4NCA6IDEgOiAxLjMKK1JVLVVOSy0xNjg1IDogMSA6IDMxLjUKK1JVLVVOSy0xNjg2IDogMSA6IDEuMQorUlUtVU5LLTE2ODcgOiAxIDogMS41CitSVS1VTkstMTY4OCA6IDEgOiAzLjgKK1JVLVVOSy0xNjg5IDogMSA6IDEuOQorUlUtVU5LLTE2OTAgOiAxIDogMS40CitSVS1VTkstMTY5MSA6IDEgOiA3LjQwMDAwMDEKK1JVLVVOSy0xNjkyIDogMSA6IDIuNQorUlUtVU5LLTE2OTMgOiAxIDogMi43CitSVS1VTkstMTY5NCA6IDEgOiAxMS4xCitSVS1VTkstMTY5NSA6IDEgOiA0LjUKK1JVLVVOSy0xNjk2IDogMSA6IDEuNgorUlUtVU5LLTE2OTcgOiAxIDogMS45CitSVS1VTkstMTY5OCA6IDEgOiA0LjU5OTk5OTkKK1JVLVVOSy0xNjk5IDogMSA6IDEuMAorUlUtVU5LLTE3MDAgOiAxIDogNS41OTk5OTk5CitSVS1VTkstMTcwMSA6IDEgOiA5Ljg5OTk5OTYKK1JVLVVOSy0xNzAyIDogMSA6IDIwLjI5OTk5OQorUlUtVU5LLTE3MDMgOiAxIDogMi4yCitSVS1VTkstMTcwNCA6IDEgOiAyLjMKK1JVLVVOSy0xNzA1IDogMSA6IDIuNworUlUtVU5LLTE3MDYgOiAxIDogMS4wCitSVS1VTkstMTcwNyA6IDEgOiAxLjAKK1JVLVVOSy0xNzA4IDogMSA6IDEuMAorUlUtVU5LLTE3MDkgOiAxIDogNDYuMDk5OTk4CitSVS1VTkstMTcxMCA6IDEgOiAxLjUKK1JVLVVOSy0xNzExIDogMSA6IDEuOAorUlUtVU5LLTE3MTIgOiAxIDogMi41CitSVS1VTkstMTcxMyA6IDEgOiAxLjIKK1JVLVVOSy0xNzE0IDogMSA6IDIuNworUlUtVU5LLTE3MTUgOiAxIDogMS4yCitSVS1VTkstMTcxNiA6IDEgOiAzLjU5OTk5OTkKK1JVLVVOSy0xNzE3IDogMSA6IDEuNQorUlUtVU5LLTE3MTggOiAxIDogNC45MDAwMDAxCitSVS1VTkstMTcxOSA6IDEgOiA3LjY5OTk5OTgKK1JVLVVOSy0xNzIwIDogMSA6IDg1LjQwMDAwMgorUlUtVU5LLTE3MjEgOiAxIDogMjUuNzk5OTk5CitSVS1VTkstMTcyMiA6IDEgOiAzOTguNzAwMDEKK1JVLVVOSy0xNzIzIDogMSA6IDEuMAorUlUtVU5LLTE3MjQgOiAxIDogMS4wCitSVS1VTkstMTcyNSA6IDEgOiA2LjA5OTk5OTkKK1JVLVVOSy0xNzI2IDogMSA6IDMuNworUlUtVU5LLTE3MjcgOiAxIDogNTMuNTk5OTk4CitSVS1VTkstMTcyOCA6IDEgOiAzLjIKK1JVLVVOSy0xNzI5IDogMSA6IDIuNworUlUtVU5LLTE3MzAgOiAxIDogNC4wCitSVS1VTkstMTczMSA6IDEgOiAzLjAKK1JVLVVOSy0xNzMyIDogMSA6IDEuMAorUlUtVU5LLTE3MzMgOiAxIDogMS4wCitSVS1VTkstMTczNCA6IDEgOiA0LjE5OTk5OTgKK1JVLVVOSy0xNzM1IDogMSA6IDI0Ljc5OTk5OQorUlUtVU5LLTE3MzYgOiAxIDogMjQ2NjkuNAorUlUtVU5LLTE3MzcgOiAxIDogMS4wCitSVS1VTkstMTczOCA6IDEgOiA2MS4yMDAwMDEKK1JVLVVOSy0xNzM5IDogMSA6IDEuNQorUlUtVU5LLTE3NDAgOiAxIDogNjYuOTAwMDAyCitSVS1VTkstMTc0MSA6IDEgOiAxLjAKK1JVLVVOSy0xNzQyIDogMSA6IDEuMAorUlUtVU5LLTE3NDMgOiAxIDogMS40CitSVS1VTkstMTc0NCA6IDEgOiAxLjAKK1JVLVVOSy0xNzQ1IDogMSA6IDkyLjQwMDAwMgorUlUtVU5LLTE3NDYgOiAxIDogNC4xOTk5OTk4CitSVS1VTkstMTc0NyA6IDEgOiAxLjMKK1JVLVVOSy0xNzQ4IDogMSA6IDEuMAorUlUtVU5LLTE3NDkgOiAxIDogMS4wCitSVS1VTkstMTc1MCA6IDEgOiAxLjMKK1JVLVVOSy0xNzUxIDogMSA6IDEuMAorUlUtVU5LLTE3NTIgOiAxIDogMS4yCitSVS1VTkstMTc1MyA6IDEgOiAxLjAKK1JVLVVOSy0xNzU0IDogMSA6IDEuMAorUlUtVU5LLTE3NTUgOiAxIDogMS4wCitSVS1VTkstMTc1NiA6IDEgOiAxLjAKK1JVLVVOSy0xNzU3IDogMSA6IDEuMAorUlUtVU5LLTE3NTggOiAxIDogMS4wCitSVS1VTkstMTc1OSA6IDEgOiA5LjEwMDAwMDQKK1JVLVVOSy0xNzYwIDogMSA6IDQuMTk5OTk5OAorUlUtVU5LLTE3NjEgOiAxIDogOC4zMDAwMDAyCitSVS1VTkstMTc2MiA6IDEgOiAxLjAKK1JVLVVOSy0xNzYzIDogMSA6IDEuMAorUlUtVU5LLTE3NjQgOiAxIDogOS41CitSVS1VTkstMTc2NSA6IDEgOiA4LjYwMDAwMDQKK1JVLVVOSy0xNzY2IDogMSA6IDEwMS41CitSVS1VTkstMTc2NyA6IDEgOiA3LjY5OTk5OTgKK1JVLVVOSy0xNzY4IDogMSA6IDMwLjYKK1JVLVVOSy0xNzY5IDogMSA6IDU4LjI5OTk5OQorUlUtVU5LLTE3NzAgOiAxIDogMS4xCitSVS1VTkstMTc3MSA6IDEgOiAxLjAKK1JVLVVOSy0xNzcyIDogMSA6IDEuOAorUlUtVU5LLTE3NzMgOiAxIDogMTYuNAorUlUtVU5LLTE3NzQgOiAxIDogNTI2LjkwMDAyCitSVS1VTkstMTc3NSA6IDEgOiA0LjkwMDAwMDEKK1JVLVVOSy0xNzc2IDogMSA6IDEzLjgKK1JVLVVOSy0xNzc3IDogMSA6IDIuOTAwMDAwMQorUlUtVU5LLTE3NzggOiAxIDogMS4wCitSVS1VTkstMTc3OSA6IDEgOiAxLjAKK1JVLVVOSy0xNzgwIDogMSA6IDEuMAorUlUtVU5LLTE3ODEgOiAxIDogMS4wCitSVS1VTkstMTc4MiA6IDEgOiAyLjQwMDAwMDEKK1JVLVVOSy0xNzgzIDogMSA6IDEuMAorUlUtVU5LLTE3ODQgOiAxIDogMi4zCitSVS1VTkstMTc4NSA6IDEgOiAxLjEKK1JVLVVOSy0xNzg2IDogMSA6IDEuMAorUlUtVU5LLTE3ODcgOiAxIDogNS42OTk5OTk4CitSVS1VTkstMTc4OCA6IDEgOiAxLjcKK1JVLVVOSy0xNzg5IDogMSA6IDYyMTYuNjAwMQorUlUtVU5LLTE3OTAgOiAxIDogMS4wCitSVS1VTkstMTc5MSA6IDEgOiAxLjAKK1JVLVVOSy0xNzkyIDogMSA6IDEuNAorUlUtVU5LLTE3OTMgOiAxIDogNy4zMDAwMDAyCitSVS1VTkstMTc5NCA6IDEgOiA0OC4yMDAwMDEKK1JVLVVOSy0xNzk1IDogMSA6IDEyLjMKK1JVLVVOSy0xNzk2IDogMSA6IDI1OS4zOTk5OQorUlUtVU5LLTE3OTcgOiAxIDogMS4wCitSVS1VTkstMTc5OCA6IDEgOiA3LjQwMDAwMDEKK1JVLVVOSy0xNzk5IDogMSA6IDEuMAorUlUtVU5LLTE4MDAgOiAxIDogMS4wCitSVS1VTkstMTgwMSA6IDEgOiAzLjUKK1JVLVVOSy0xODAyIDogMSA6IDEuMAorUlUtVU5LLTE4MDMgOiAxIDogNS41OTk5OTk5CitSVS1VTkstMTgwNCA6IDEgOiAxMS4yCitSVS1VTkstMTgwNSA6IDEgOiA0LjkwMDAwMDEKK1JVLVVOSy0xODA2IDogMSA6IDI1My4zOTk5OQorUlUtVU5LLTE4MDcgOiAxIDogMy4wCitSVS1VTkstMTgwOCA6IDEgOiAxLjYKK1JVLVVOSy0xODA5IDogMSA6IDEuOQorUlUtVU5LLTE4MTAgOiAxIDogMS4yCitSVS1VTkstMTgxMSA6IDEgOiAxLjAKK1JVLVVOSy0xODEyIDogMSA6IDUuOTAwMDAwMQorUlUtVU5LLTE4MTMgOiAxIDogNC40MDAwMDAxCitSVS1VTkstMTgxNCA6IDEgOiA2LjAKK1JVLVVOSy0xODE1IDogMSA6IDI4LjAKK1JVLVVOSy0xODE2IDogMSA6IDMuMgorUlUtVU5LLTE4MTcgOiAxIDogNTUuMAorUlUtVU5LLTE4MTggOiAxIDogMi4wOTk5OTk5CitSVS1VTkstMTgxOSA6IDEgOiAxLjIKK1JVLVVOSy0xODIwIDogMSA6IDIuMAorUlUtVU5LLTE4MjEgOiAxIDogMS40CitSVS1VTkstMTgyMiA6IDEgOiA4MC45MDAwMDIKK1JVLVVOSy0xODIzIDogMSA6IDguMAorUlUtVU5LLTE4MjQgOiAxIDogMi4wOTk5OTk5CitSVS1VTkstMTgyNSA6IDEgOiAxLjAKK1JVLVVOSy0xODI2IDogMSA6IDUuMAorUlUtVU5LLTE4MjcgOiAxIDogNzMuNjk5OTk3CitSVS1VTkstMTgyOCA6IDEgOiA5LjE5OTk5OTgKK1JVLVVOSy0xODI5IDogMSA6IDE0MS44OTk5OQorUlUtVU5LLTE4MzAgOiAxIDogMTkuMjk5OTk5CitSVS1VTkstMTgzMSA6IDEgOiAxLjAKK1JVLVVOSy0xODMyIDogMSA6IDYuMDk5OTk5OQorUlUtVU5LLTE4MzMgOiAxIDogMTMyLjIKK1JVLVVOSy0xODM0IDogMSA6IDguMTk5OTk5OAorUlUtVU5LLTE4MzUgOiAxIDogMTg5NC45CitSVS1VTkstMTgzNiA6IDEgOiAxLjAKK1JVLVVOSy0xODM3IDogMSA6IDEuMAorUlUtVU5LLTE4MzggOiAxIDogMS4wCitSVS1VTkstMTgzOSA6IDEgOiA3OC4zMDAwMDMKK1JVLVVOSy0xODQwIDogMSA6IDQuNTk5OTk5OQorUlUtVU5LLTE4NDEgOiAxIDogMS4wCitSVS1VTkstMTg0MiA6IDEgOiAxLjYKK1JVLVVOSy0xODQzIDogMSA6IDMuNworUlUtVU5LLTE4NDQgOiAxIDogMS4wCitSVS1VTkstMTg0NSA6IDEgOiAxMy4wCitSVS1VTkstMTg0NiA6IDEgOiAxLjAKK1JVLVVOSy0xODQ3IDogMSA6IDEuMAorUlUtVU5LLTE4NDggOiAxIDogMS45CitSVS1VTkstMTg0OSA6IDEgOiAzMy41CitSVS1VTkstMTg1MCA6IDEgOiAxLjAKK1JVLVVOSy0xODUxIDogMSA6IDEuMAorUlUtVU5LLTE4NTIgOiAxIDogMTIuNQorUlUtVU5LLTE4NTMgOiAxIDogMS4zCitSVS1VTkstMTg1NCA6IDEgOiA0LjgwMDAwMDIKK1JVLVVOSy0xODU1IDogMSA6IDEuMAorUlUtVU5LLTE4NTYgOiAxIDogMTkuMAorUlUtVU5LLTE4NTcgOiAxIDogNC4wOTk5OTk5CitSVS1VTkstMTg1OCA6IDEgOiAzLjQwMDAwMDEKK1JVLVVOSy0xODU5IDogMSA6IDEuMQorUlUtVU5LLTE4NjAgOiAxIDogMi4zCitSVS1VTkstMTg2MSA6IDEgOiAyMC4xCitSVS1VTkstMTg2MiA6IDEgOiA5LjY5OTk5OTgKK1JVLVVOSy0xODYzIDogMSA6IDEuOAorUlUtVU5LLTE4NjQgOiAxIDogMS4wCitSVS1VTkstMTg2NSA6IDEgOiAxLjAKK1JVLVVOSy0xODY2IDogMSA6IDEuMAorUlUtVU5LLTE4NjcgOiAxIDogODkxLjc5OTk5CitSVS1VTkstMTg2OCA6IDEgOiAzMDUuMzk5OTkKK1JVLVVOSy0xODY5IDogMSA6IDQxLjc5OTk5OQorUlUtVU5LLTE4NzAgOiAxIDogMS4xCitSVS1VTkstMTg3MSA6IDEgOiAxLjAKK1JVLVVOSy0xODcyIDogMSA6IDEuMAorUlUtVU5LLTE4NzMgOiAxIDogMS45CitSVS1VTkstMTg3NCA6IDEgOiA5MC4wCitSVS1VTkstMTg3NSA6IDEgOiAxMDkuMQorUlUtVU5LLTE4NzYgOiAxIDogMS4wCitSVS1VTkstMTg3NyA6IDEgOiAxLjAKK1JVLVVOSy0xODc4IDogMSA6IDEuMAorUlUtVU5LLTE4NzkgOiAxIDogMS4wCitSVS1VTkstMTg4MCA6IDEgOiAxMy45CitSVS1VTkstMTg4MSA6IDEgOiAxLjAKK1JVLVVOSy0xODgyIDogMSA6IDEuMAorUlUtVU5LLTE4ODMgOiAxIDogMS4wCitSVS1VTkstMTg4NCA6IDEgOiAxLjYKK1JVLVVOSy0xODg1IDogMSA6IDEuMQorUlUtVU5LLTE4ODYgOiAxIDogMi4wCitSVS1VTkstMTg4NyA6IDEgOiAxNy40CitSVS1VTkstMTg4OCA6IDEgOiAzLjcKK1JVLVVOSy0xODg5IDogMSA6IDMuOTAwMDAwMQorUlUtVU5LLTE4OTAgOiAxIDogMS4wCitSVS1VTkstMTg5MSA6IDEgOiAxLjgKK1JVLVVOSy0xODkyIDogMSA6IDYxLjIwMDAwMQorUlUtVU5LLTE4OTMgOiAxIDogMS44CitSVS1VTkstMTg5NCA6IDEgOiA5LjgwMDAwMDIKK1JVLVVOSy0xODk1IDogMSA6IDEwLjkKK1JVLVVOSy0xODk2IDogMSA6IDEuMAorUlUtVU5LLTE4OTcgOiAxIDogNS45MDAwMDAxCitSVS1VTkstMTg5OCA6IDEgOiAyOS4xCitSVS1VTkstMTg5OSA6IDEgOiAxLjIKK1JVLVVOSy0xOTAwIDogMSA6IDI1LjcwMDAwMQorUlUtVU5LLTE5MDEgOiAxIDogMi4wOTk5OTk5CitSVS1VTkstMTkwMiA6IDEgOiAxLjAKK1JVLVVOSy0xOTAzIDogMSA6IDIuMAorUlUtVU5LLTE5MDQgOiAxIDogNjYuNjk5OTk3CitSVS1VTkstMTkwNSA6IDEgOiAxLjAKK1JVLVVOSy0xOTA2IDogMSA6IDUyODcuNQorUlUtVU5LLTE5MDcgOiAxIDogMS4wCitSVS1VTkstMTkwOCA6IDEgOiAxMC45CitSVS1VTkstMTkwOSA6IDEgOiAxLjkKK1JVLVVOSy0xOTEwIDogMSA6IDEuMAorUlUtVU5LLTE5MTEgOiAxIDogMS4wCitSVS1VTkstMTkxMiA6IDEgOiAxLjYKK1JVLVVOSy0xOTEzIDogMSA6IDEuMAorUlUtVU5LLTE5MTQgOiAxIDogMS4xCitSVS1VTkstMTkxNSA6IDEgOiA4LjgwMDAwMDIKK1JVLVVOSy0xOTE2IDogMSA6IDEuMAorUlUtVU5LLTE5MTcgOiAxIDogMS44CitSVS1VTkstMTkxOCA6IDEgOiAzLjA5OTk5OTkKK1JVLVVOSy0xOTE5IDogMSA6IDguMAorUlUtVU5LLTE5MjAgOiAxIDogMS40CitSVS1VTkstMTkyMSA6IDEgOiA3LjE5OTk5OTgKK1JVLVVOSy0xOTIyIDogMSA6IDguNjk5OTk5OAorUlUtVU5LLTE5MjMgOiAxIDogMi4yCitSVS1VTkstMTkyNCA6IDEgOiAxLjAKK1JVLVVOSy0xOTI1IDogMSA6IDEuMgorUlUtVU5LLTE5MjYgOiAxIDogMTAuNQorUlUtVU5LLTE5MjcgOiAxIDogMS42CitSVS1VTkstMTkyOCA6IDEgOiAxLjAKK1JVLVVOSy0xOTI5IDogMSA6IDQuNQorUlUtVU5LLTE5MzAgOiAxIDogMS4wCitSVS1VTkstMTkzMSA6IDEgOiA2LjkwMDAwMDEKK1JVLVVOSy0xOTMyIDogMSA6IDEuMQorUlUtVU5LLTE5MzMgOiAxIDogMS45CitSVS1VTkstMTkzNCA6IDEgOiAxLjIKK1JVLVVOSy0xOTM1IDogMSA6IDMuNworUlUtVU5LLTE5MzYgOiAxIDogMS41CitSVS1VTkstMTkzNyA6IDEgOiAyLjA5OTk5OTkKK1JVLVVOSy0xOTM4IDogMSA6IDIxLjI5OTk5OQorUlUtVU5LLTE5MzkgOiAxIDogNy40MDAwMDAxCitSVS1VTkstMTk0MCA6IDEgOiAxLjEKK1JVLVVOSy0xOTQxIDogMSA6IDEuMAorUlUtVU5LLTE5NDIgOiAxIDogMS4yCitSVS1VTkstMTk0MyA6IDEgOiAxLjAKK1JVLVVOSy0xOTQ0IDogMSA6IDIuNworUlUtVU5LLTE5NDUgOiAxIDogMi4yCitSVS1VTkstMTk0NiA6IDEgOiAxLjEKK1JVLVVOSy0xOTQ3IDogMSA6IDIuNQorUlUtVU5LLTE5NDggOiAxIDogMS4xCitSVS1VTkstMTk0OSA6IDEgOiAxLjAKK1JVLVVOSy0xOTUwIDogMSA6IDcuMAorUlUtVU5LLTE5NTEgOiAxIDogNC4zMDAwMDAyCitSVS1VTkstMTk1MiA6IDEgOiAzMi41OTk5OTgKK1JVLVVOSy0xOTUzIDogMSA6IDEuMAorUlUtVU5LLTE5NTQgOiAxIDogMTQyLjAKK1JVLVVOSy0xOTU1IDogMSA6IDI0LjYKK1JVLVVOSy0xOTU2IDogMSA6IDQ3LjAKK1JVLVVOSy0xOTU3IDogMSA6IDcuMAorUlUtVU5LLTE5NTggOiAxIDogMS4wCitSVS1VTkstMTk1OSA6IDEgOiAyLjA5OTk5OTkKK1JVLVVOSy0xOTYwIDogMSA6IDEuOQorUlUtVU5LLTE5NjEgOiAxIDogMS4yCitSVS1VTkstMTk2MiA6IDEgOiAxOTg2LjIKK1JVLVVOSy0xOTYzIDogMSA6IDUuNTk5OTk5OQorUlUtVU5LLTE5NjQgOiAxIDogMi41CitSVS1VTkstMTk2NSA6IDEgOiAxLjEKK1JVLVVOSy0xOTY2IDogMSA6IDEuMworUlUtVU5LLTE5NjcgOiAxIDogMS4zCitSVS1VTkstMTk2OCA6IDEgOiA0LjUKK1JVLVVOSy0xOTY5IDogMSA6IDEuMQorUlUtVU5LLTE5NzAgOiAxIDogMTguMjAwMDAxCitSVS1VTkstMTk3MSA6IDEgOiAxLjAKK1JVLVVOSy0xOTcyIDogMSA6IDEuNworUlUtVU5LLTE5NzMgOiAxIDogNi45MDAwMDAxCitSVS1VTkstMTk3NCA6IDEgOiAyLjUKK1JVLVVOSy0xOTc1IDogMSA6IDMyNTIzLjUKK1JVLVVOSy0xOTc2IDogMSA6IDEzLjAKK1JVLVVOSy0xOTc3IDogMSA6IDMuMAorUlUtVU5LLTE5NzggOiAxIDogMS4wCitSVS1VTkstMTk3OSA6IDEgOiAxLjEKK1JVLVVOSy0xOTgwIDogMSA6IDEuMAorUlUtVU5LLTE5ODEgOiAxIDogNC4xOTk5OTk4CitSVS1VTkstMTk4MiA6IDEgOiAxLjAKK1JVLVVOSy0xOTgzIDogMSA6IDIuMAorUlUtVU5LLTE5ODQgOiAxIDogMi41OTk5OTk5CitSVS1VTkstMTk4NSA6IDEgOiAzLjQwMDAwMDEKK1JVLVVOSy0xOTg2IDogMSA6IDEuNQorUlUtVU5LLTE5ODcgOiAxIDogMi41CitSVS1VTkstMTk4OCA6IDEgOiAxOC4yMDAwMDEKK1JVLVVOSy0xOTg5IDogMSA6IDEuMAorUlUtVU5LLTE5OTAgOiAxIDogNi42OTk5OTk4CitSVS1VTkstMTk5MSA6IDEgOiAyLjA5OTk5OTkKK1JVLVVOSy0xOTkyIDogMSA6IDkuMAorUlUtVU5LLTE5OTMgOiAxIDogMy4yCitSVS1VTkstMTk5NCA6IDEgOiAyLjAKK1JVLVVOSy0xOTk1IDogMSA6IDIxLjc5OTk5OQorUlUtVU5LLTE5OTYgOiAxIDogMS4wCitSVS1VTkstMTk5NyA6IDEgOiAxMi42CitSVS1VTkstMTk5OCA6IDEgOiAzLjAKK1JVLVVOSy0xOTk5IDogMSA6IDEwMS4wCitSVS1VTkstMjAwMCA6IDEgOiAxLjAKK1JVLVVOSy0yMDAxIDogMSA6IDEuNgorUlUtVU5LLTIwMDIgOiAxIDogNi40MDAwMDAxCitSVS1VTkstMjAwMyA6IDEgOiAxLjAKK1JVLVVOSy0yMDA0IDogMSA6IDEzLjMKK1JVLVVOSy0yMDA1IDogMSA6IDM3LjI5OTk5OQorUlUtVU5LLTIwMDYgOiAxIDogOS41CitSVS1VTkstMjAwNyA6IDEgOiAyLjA5OTk5OTkKK1JVLVVOSy0yMDA4IDogMSA6IDEuMAorUlUtVU5LLTIwMDkgOiAxIDogNC4wOTk5OTk5CitSVS1VTkstMjAxMCA6IDEgOiAxLjAKK1JVLVVOSy0yMDExIDogMSA6IDMuNDAwMDAwMQorUlUtVU5LLTIwMTIgOiAxIDogMS4wCitSVS1VTkstMjAxMyA6IDEgOiAxLjAKK1JVLVVOSy0yMDE0IDogMSA6IDEuMAorUlUtVU5LLTIwMTUgOiAxIDogMy4zCitSVS1VTkstMjAxNiA6IDEgOiAxLjAKK1JVLVVOSy0yMDE3IDogMSA6IDEuMAorUlUtVU5LLTIwMTggOiAxIDogNC4xOTk5OTk4CitSVS1VTkstMjAxOSA6IDEgOiAxLjAKK1JVLVVOSy0yMDIwIDogMSA6IDEuMAorUlUtVU5LLTIwMjEgOiAxIDogNzMuNjk5OTk3CitSVS1VTkstMjAyMiA6IDEgOiA2LjgwMDAwMDIKK1JVLVVOSy0yMDIzIDogMSA6IDguNjAwMDAwNAorUlUtVU5LLTIwMjQgOiAxIDogMS4yCitSVS1VTkstMjAyNSA6IDEgOiA0MTEuODk5OTkKK1JVLVVOSy0yMDI2IDogMSA6IDE1LjIKK1JVLVVOSy0yMDI3IDogMSA6IDEuOAorUlUtVU5LLTIwMjggOiAxIDogMi4zCitSVS1VTkstMjAyOSA6IDEgOiAyMi43MDAwMDEKK1JVLVVOSy0yMDMwIDogMSA6IDgyMi43MDAwMQorUlUtVU5LLTIwMzEgOiAxIDogMTAuMgorUlUtVU5LLTIwMzIgOiAxIDogNi41CitSVS1VTkstMjAzMyA6IDEgOiA1LjQwMDAwMDEKK1JVLVVOSy0yMDM0IDogMSA6IDE1LjIKK1JVLVVOSy0yMDM1IDogMSA6IDU3LjA5OTk5OAorUlUtVU5LLTIwMzYgOiAxIDogMS4yCitSVS1VTkstMjAzNyA6IDEgOiAzLjgKK1JVLVVOSy0yMDM4IDogMSA6IDExLjEKK1JVLVVOSy0yMDM5IDogMSA6IDEuMAorUlUtVU5LLTIwNDAgOiAxIDogMS4wCitSVS1VTkstMjA0MSA6IDEgOiAxLjIKK1JVLVVOSy0yMDQyIDogMSA6IDEuMAorUlUtVU5LLTIwNDMgOiAxIDogMS4wCitSVS1VTkstMjA0NCA6IDEgOiAxNy4xCitSVS1VTkstMjA0NSA6IDEgOiAyLjQwMDAwMDEKK1JVLVVOSy0yMDQ2IDogMSA6IDEuMAorUlUtVU5LLTIwNDcgOiAxIDogNy41CitSVS1VTkstMjA0OCA6IDEgOiAxLjMKK1JVLVVOSy0yMDQ5IDogMSA6IDEuMAorUlUtVU5LLTIwNTAgOiAxIDogMS4wCitSVS1VTkstMjA1MSA6IDEgOiAxLjcKK1JVLVVOSy0yMDUyIDogMSA6IDIuMDk5OTk5OQorUlUtVU5LLTIwNTMgOiAxIDogMS4wCitSVS1VTkstMjA1NCA6IDEgOiAzLjQwMDAwMDEKK1JVLVVOSy0yMDU1IDogMSA6IDEuOQorUlUtVU5LLTIwNTYgOiAxIDogNS4wOTk5OTk5CitSVS1VTkstMjA1NyA6IDEgOiAzLjU5OTk5OTkKK1JVLVVOSy0yMDU4IDogMSA6IDYuODAwMDAwMgorUlUtVU5LLTIwNTkgOiAxIDogMS42CitSVS1VTkstMjA2MCA6IDEgOiA4Ljg5OTk5OTYKK1JVLVVOSy0yMDYxIDogMSA6IDIuOTAwMDAwMQorUlUtVU5LLTIwNjIgOiAxIDogMS4wCitSVS1VTkstMjA2MyA6IDEgOiA5LjEwMDAwMDQKK1JVLVVOSy0yMDY0IDogMSA6IDEuMAorUlUtVU5LLTIwNjUgOiAxIDogMS4wCitSVS1VTkstMjA2NiA6IDEgOiAxLjAKK1JVLVVOSy0yMDY3IDogMSA6IDguODk5OTk5NgorUlUtVU5LLTIwNjggOiAxIDogMS4wCitSVS1VTkstMjA2OSA6IDEgOiAxLjAKK1JVLVVOSy0yMDcwIDogMSA6IDMuOTAwMDAwMQorUlUtVU5LLTIwNzEgOiAxIDogMS4wCitSVS1VTkstMjA3MiA6IDEgOiAyLjUKK1JVLVVOSy0yMDczIDogMSA6IDEuMAorUlUtVU5LLTIwNzQgOiAxIDogMy4wCitSVS1VTkstMjA3NSA6IDEgOiAxLjAKK1JVLVVOSy0yMDc2IDogMSA6IDIuMDk5OTk5OQorUlUtVU5LLTIwNzcgOiAxIDogNy41CitSVS1VTkstMjA3OCA6IDEgOiAyLjgKK1JVLVVOSy0yMDc5IDogMSA6IDI3LjYKK1JVLVVOSy0yMDgwIDogMSA6IDI1LjAKK1JVLVVOSy0yMDgxIDogMSA6IDEuMAorUlUtVU5LLTIwODIgOiAxIDogMS4wCitSVS1VTkstMjA4MyA6IDEgOiAxLjAKK1JVLVVOSy0yMDg0IDogMSA6IDEuMAorUlUtVU5LLTIwODUgOiAxIDogMTA3Mi41CitSVS1VTkstMjA4NiA6IDEgOiAxLjQKK1JVLVVOSy0yMDg3IDogMSA6IDIuNTk5OTk5OQorUlUtVU5LLTIwODggOiAxIDogMy40MDAwMDAxCitSVS1VTkstMjA4OSA6IDEgOiAyLjAKK1JVLVVOSy0yMDkwIDogMSA6IDQuNDAwMDAwMQorUlUtVU5LLTIwOTEgOiAxIDogMi41CitSVS1VTkstMjA5MiA6IDEgOiA1LjQwMDAwMDEKK1JVLVVOSy0yMDkzIDogMSA6IDMuNQorUlUtVU5LLTIwOTQgOiAxIDogMS41CitSVS1VTkstMjA5NSA6IDEgOiAyOS45CitSVS1VTkstMjA5NiA6IDEgOiAyLjkwMDAwMDEKK1JVLVVOSy0yMDk3IDogMSA6IDQuMzAwMDAwMgorUlUtVU5LLTIwOTggOiAxIDogMS4yCitSVS1VTkstMjA5OSA6IDEgOiAxLjAKK1JVLVVOSy0yMTAwIDogMSA6IDIuNTk5OTk5OQorUlUtVU5LLTIxMDEgOiAxIDogMS44CitSVS1VTkstMjEwMiA6IDEgOiAxLjkKK1JVLVVOSy0yMTAzIDogMSA6IDEuMAorUlUtVU5LLTIxMDQgOiAxIDogMS4wCitSVS1VTkstMjEwNSA6IDEgOiAxMS4yCitSVS1VTkstMjEwNiA6IDEgOiAzLjQwMDAwMDEKK1JVLVVOSy0yMTA3IDogMSA6IDI0LjYKK1JVLVVOSy0yMTA4IDogMSA6IDEuMQorUlUtVU5LLTIxMDkgOiAxIDogMi41CitSVS1VTkstMjExMCA6IDEgOiAxLjEKK1JVLVVOSy0yMTExIDogMSA6IDQuNQorUlUtVU5LLTIxMTIgOiAxIDogMS4wCitSVS1VTkstMjExMyA6IDEgOiAxLjYKK1JVLVVOSy0yMTE0IDogMSA6IDEuOQorUlUtVU5LLTIxMTUgOiAxIDogNC41CitSVS1VTkstMjExNiA6IDEgOiAxMC41CitSVS1VTkstMjExNyA6IDEgOiAxLjEKK1JVLVVOSy0yMTE4IDogMSA6IDQuMzAwMDAwMgorUlUtVU5LLTIxMTkgOiAxIDogMS4wCitSVS1VTkstMjEyMCA6IDEgOiAyLjAKK1JVLVVOSy0yMTIxIDogMSA6IDIuNworUlUtVU5LLTIxMjIgOiAxIDogMS4wCitSVS1VTkstMjEyMyA6IDEgOiAxLjAKK1JVLVVOSy0yMTI0IDogMSA6IDIuNDAwMDAwMQorUlUtVU5LLTIxMjUgOiAxIDogMS44CitSVS1VTkstMjEyNiA6IDEgOiAxLjAKK1JVLVVOSy0yMTI3IDogMSA6IDEuMAorUlUtVU5LLTIxMjggOiAxIDogMS41CitSVS1VTkstMjEyOSA6IDEgOiAyLjAKK1JVLVVOSy0yMTMwIDogMSA6IDMuMAorUlUtVU5LLTIxMzEgOiAxIDogMTguMQorUlUtVU5LLTIxMzIgOiAxIDogMjguNzk5OTk5CitSVS1VTkstMjEzMyA6IDEgOiAxNTEuNjAwMDEKK1JVLVVOSy0yMTM0IDogMSA6IDE1MS42MDAwMQorUlUtVU5LLTIxMzUgOiAxIDogMS4wCitSVS1VTkstMjEzNiA6IDEgOiAxMDQxLjcKK1JVLVVOSy0yMTM3IDogMSA6IDEwNDEuNworUlUtVU5LLTIxMzggOiAxIDogMTA0MS43CitSVS1VTkstMjEzOSA6IDEgOiAxLjAKK1JVLVVOSy0yMTQwIDogMSA6IDExLjUKK1JVLVVOSy0yMTQxIDogMSA6IDYuOTAwMDAwMQorUlUtVU5LLTIxNDIgOiAxIDogMi4zCitSVS1VTkstMjE0MyA6IDEgOiA2LjA5OTk5OTkKK1JVLVVOSy0yMTQ0IDogMSA6IDMxLjEKK1JVLVVOSy0yMTQ1IDogMSA6IDEuOAorUlUtVU5LLTIxNDYgOiAxIDogMS4xCitSVS1VTkstMjE0NyA6IDEgOiA1Ni45MDAwMDIKK1JVLVVOSy0yMTQ4IDogMSA6IDIuMDk5OTk5OQorUlUtVU5LLTIxNDkgOiAxIDogMS4wCitSVS1VTkstMjE1MCA6IDEgOiAxLjkKK1JVLVVOSy0yMTUxIDogMSA6IDcuODAwMDAwMgorUlUtVU5LLTIxNTIgOiAxIDogNC4wOTk5OTk5CitSVS1VTkstMjE1MyA6IDEgOiA0LjgwMDAwMDIKK1JVLVVOSy0yMTU0IDogMSA6IDYuMTk5OTk5OAorUlUtVU5LLTIxNTUgOiAxIDogNC44MDAwMDAyCitSVS1VTkstMjE1NiA6IDEgOiA1LjU5OTk5OTkKK1JVLVVOSy0yMTU3IDogMSA6IDEuNworUlUtVU5LLTIxNTggOiAxIDogMS4wCitSVS1VTkstMjE1OSA6IDEgOiAxLjAKK1JVLVVOSy0yMTYwIDogMSA6IDQyMC4xMDAwMQorUlUtVU5LLTIxNjEgOiAxIDogNzcwNS41CitSVS1VTkstMjE2MiA6IDEgOiA3NzA1LjUKK1JVLVVOSy0yMTYzIDogMSA6IDkuODk5OTk5NgorUlUtVU5LLTIxNjQgOiAxIDogMS4wCitSVS1VTkstMjE2NSA6IDEgOiA4Ljg5OTk5OTYKK1JVLVVOSy0yMTY2IDogMSA6IDIuOTAwMDAwMQorUlUtVU5LLTIxNjcgOiAxIDogMS4xCitSVS1VTkstMjE2OCA6IDEgOiAxMy44CitSVS1VTkstMjE2OSA6IDEgOiAzLjIKK1JVLVVOSy0yMTcwIDogMSA6IDEuMworUlUtVU5LLTIxNzEgOiAxIDogMy4zCitSVS1VTkstMjE3MiA6IDEgOiAxLjAKK1JVLVVOSy0yMTczIDogMSA6IDEuMAorUlUtVU5LLTIxNzQgOiAxIDogMS4wCitSVS1VTkstMjE3NSA6IDEgOiAxLjYKK1JVLVVOSy0yMTc2IDogMSA6IDEuMAorUlUtVU5LLTIxNzcgOiAxIDogMS4wCitSVS1VTkstMjE3OCA6IDEgOiAxMC41CitSVS1VTkstMjE3OSA6IDEgOiA0LjA5OTk5OTkKK1JVLVVOSy0yMTgwIDogMSA6IDIuNDAwMDAwMQorUlUtVU5LLTIxODEgOiAxIDogMjkuNzk5OTk5CitSVS1VTkstMjE4MiA6IDEgOiAxLjAKK1JVLVVOSy0yMTgzIDogMSA6IDIuNworUlUtVU5LLTIxODQgOiAxIDogMS4wCitSVS1VTkstMjE4NSA6IDEgOiAyLjQwMDAwMDEKK1JVLVVOSy0yMTg2IDogMSA6IDIuMAorUlUtVU5LLTIxODcgOiAxIDogMTUuNgorUlUtVU5LLTIxODggOiAxIDogNS4wCitSVS1VTkstMjE4OSA6IDEgOiA4LjUKK1JVLVVOSy0yMTkwIDogMSA6IDEuMgorUlUtVU5LLTIxOTEgOiAxIDogMS4wCitSVS1VTkstMjE5MiA6IDEgOiAxLjAKK1JVLVVOSy0yMTkzIDogMSA6IDEuMAorUlUtVU5LLTIxOTQgOiAxIDogMi4wCitSVS1VTkstMjE5NSA6IDEgOiAxLjAKK1JVLVVOSy0yMTk2IDogMSA6IDIuNQorUlUtVU5LLTIxOTcgOiAxIDogMi45MDAwMDAxCitSVS1VTkstMjE5OCA6IDEgOiAxLjIKK1JVLVVOSy0yMTk5IDogMSA6IDEyLjMKK1JVLVVOSy0yMjAwIDogMSA6IDE4LjkKK1JVLVVOSy0yMjAxIDogMSA6IDEuMgorUlUtVU5LLTIyMDIgOiAxIDogMTQuMAorUlUtVU5LLTIyMDMgOiAxIDogNC4wCitSVS1VTkstMjIwNCA6IDEgOiAyNC45CitSVS1VTkstMjIwNSA6IDEgOiA3MzQuNTk5OTgKK1JVLVVOSy0yMjA2IDogMSA6IDMuMgorUlUtVU5LLTIyMDcgOiAxIDogMS4wCitSVS1VTkstMjIwOCA6IDEgOiAxLjgKK1JVLVVOSy0yMjA5IDogMSA6IDEuOAorUlUtVU5LLTIyMTAgOiAxIDogMS4wCitSVS1VTkstMjIxMSA6IDEgOiAyMi4wCitSVS1VTkstMjIxMiA6IDEgOiAxLjUKK1JVLVVOSy0yMjEzIDogMSA6IDEuNAorUlUtVU5LLTIyMTQgOiAxIDogMi4zCitSVS1VTkstMjIxNSA6IDEgOiA2LjY5OTk5OTgKK1JVLVVOSy0yMjE2IDogMSA6IDEuOAorUlUtVU5LLTIyMTcgOiAxIDogMS41CitSVS1VTkstMjIxOCA6IDEgOiAxMC44CitSVS1VTkstMjIxOSA6IDEgOiAxLjAKK1JVLVVOSy0yMjIwIDogMSA6IDEuNAorUlUtVU5LLTIyMjEgOiAxIDogNS40MDAwMDAxCitSVS1VTkstMjIyMiA6IDEgOiAyNy4xCitSVS1VTkstMjIyMyA6IDEgOiAyLjQwMDAwMDEKK1JVLVVOSy0yMjI0IDogMSA6IDUyLjkwMDAwMgorUlUtVU5LLTIyMjUgOiAxIDogMS40CitSVS1VTkstMjIyNiA6IDEgOiAyMy40CitSVS1VTkstMjIyNyA6IDEgOiAyMS4wCitSVS1VTkstMjIyOCA6IDEgOiAxLjcKK1JVLVVOSy0yMjI5IDogMSA6IDE4LjEKK1JVLVVOSy0yMjMwIDogMSA6IDY0LjAKK1JVLVVOSy0yMjMxIDogMSA6IDE1LjkKK1JVLVVOSy0yMjMyIDogMSA6IDIuNQorUlUtVU5LLTIyMzMgOiAxIDogNTQuNzk5OTk5CitSVS1VTkstMjIzNCA6IDEgOiAzLjcKK1JVLVVOSy0yMjM1IDogMSA6IDQ5LjAKK1JVLVVOSy0yMjM2IDogMSA6IDIxLjIwMDAwMQorUlUtVU5LLTIyMzcgOiAxIDogMzUwLjc5OTk5CitSVS1VTkstMjIzOCA6IDEgOiAxOC43OTk5OTkKK1JVLVVOSy0yMjM5IDogMSA6IDI2LjYKK1JVLVVOSy0yMjQwIDogMSA6IDEyLjUKK1JVLVVOSy0yMjQxIDogMSA6IDIuOAorUlUtVU5LLTIyNDIgOiAxIDogNzUuNjk5OTk3CitSVS1VTkstMjI0MyA6IDEgOiAxLjAKK1JVLVVOSy0yMjQ0IDogMSA6IDUuNTk5OTk5OQorUlUtVU5LLTIyNDUgOiAxIDogNC4wCitSVS1VTkstMjI0NiA6IDEgOiA2LjgwMDAwMDIKK1JVLVVOSy0yMjQ3IDogMSA6IDE3LjQKK1JVLVVOSy0yMjQ4IDogMSA6IDEuMAorUlUtVU5LLTIyNDkgOiAxIDogMzIuNDAwMDAyCitSVS1VTkstMjI1MCA6IDEgOiAxLjMKK1JVLVVOSy0yMjUxIDogMSA6IDg4LjUKK1JVLVVOSy0yMjUyIDogMSA6IDQzNy4zOTk5OQorUlUtVU5LLTIyNTMgOiAxIDogNzAuMzAwMDAzCitSVS1VTkstMjI1NCA6IDEgOiAyLjcKK1JVLVVOSy0yMjU1IDogMSA6IDMuMgorUlUtVU5LLTIyNTYgOiAxIDogMS4yCitSVS1VTkstMjI1NyA6IDEgOiA5MS40MDAwMDIKK1JVLVVOSy0yMjU4IDogMSA6IDIuMAorUlUtVU5LLTIyNTkgOiAxIDogMi45MDAwMDAxCitSVS1VTkstMjI2MCA6IDEgOiAzOC43MDAwMDEKK1JVLVVOSy0yMjYxIDogMSA6IDEuNworUlUtVU5LLTIyNjIgOiAxIDogNy45MDAwMDAxCitSVS1VTkstMjI2MyA6IDEgOiAyNi41CitSVS1VTkstMjI2NCA6IDEgOiA3LjQwMDAwMDEKK1JVLVVOSy0yMjY1IDogMSA6IDEzLjYKK1JVLVVOSy0yMjY2IDogMSA6IDE2LjkKK1JVLVVOSy0yMjY3IDogMSA6IDMuMAorUlUtVU5LLTIyNjggOiAxIDogMS4wCitSVS1VTkstMjI2OSA6IDEgOiAxLjAKK1JVLVVOSy0yMjcwIDogMSA6IDQuNQorUlUtVU5LLTIyNzEgOiAxIDogMi4wOTk5OTk5CitSVS1VTkstMjI3MiA6IDEgOiAxLjAKK1JVLVVOSy0yMjczIDogMSA6IDEuMAorUlUtVU5LLTIyNzQgOiAxIDogNDk2LjcwMDAxCitSVS1VTkstMjI3NSA6IDEgOiA2Mi43OTk5OTkKK1JVLVVOSy0yMjc2IDogMSA6IDEuMAorUlUtVU5LLTIyNzcgOiAxIDogMS4xCitSVS1VTkstMjI3OCA6IDEgOiAyMS41CitSVS1VTkstMjI3OSA6IDEgOiAyLjUKK1JVLVVOSy0yMjgwIDogMSA6IDEuMAorUlUtVU5LLTIyODEgOiAxIDogMjQuMjAwMDAxCitSVS1VTkstMjI4MiA6IDEgOiAxLjMKK1JVLVVOSy0yMjgzIDogMSA6IDQ1LjI5OTk5OQorUlUtVU5LLTIyODQgOiAxIDogNS44MDAwMDAyCitSVS1VTkstMjI4NSA6IDEgOiAzLjA5OTk5OTkKK1JVLVVOSy0yMjg2IDogMSA6IDYuMAorUlUtVU5LLTIyODcgOiAxIDogNC41CitSVS1VTkstMjI4OCA6IDEgOiA5Ni44MDAwMDMKK1JVLVVOSy0yMjg5IDogMSA6IDM5LjkwMDAwMgorUlUtVU5LLTIyOTAgOiAxIDogNi4wCitSVS1VTkstMjI5MSA6IDEgOiAxLjAKK1JVLVVOSy0yMjkyIDogMSA6IDIuOTAwMDAwMQorUlUtVU5LLTIyOTMgOiAxIDogMS4xCitSVS1VTkstMjI5NCA6IDEgOiA2LjAKK1JVLVVOSy0yMjk1IDogMSA6IDEuOQorUlUtVU5LLTIyOTYgOiAxIDogMjcuMjAwMDAxCitSVS1VTkstMjI5NyA6IDEgOiAxLjEKK1JVLVVOSy0yMjk4IDogMSA6IDMyMzguMworUlUtVU5LLTIyOTkgOiAxIDogMi4wOTk5OTk5CitSVS1VTkstMjMwMCA6IDEgOiAxLjQKK1JVLVVOSy0yMzAxIDogMSA6IDUuNTk5OTk5OQorUlUtVU5LLTIzMDIgOiAxIDogMzMuNTk5OTk4CitSVS1VTkstMjMwMyA6IDEgOiAzLjUKK1JVLVVOSy0yMzA0IDogMSA6IDU2LjAKK1JVLVVOSy0yMzA1IDogMSA6IDEuMAorUlUtVU5LLTIzMDYgOiAxIDogMS42CitSVS1VTkstMjMwNyA6IDEgOiAyLjU5OTk5OTkKK1JVLVVOSy0yMzA4IDogMSA6IDEuMAorUlUtVU5LLTIzMDkgOiAxIDogMS44CitSVS1VTkstMjMxMCA6IDEgOiA5OC41CitSVS1VTkstMjMxMSA6IDEgOiAxLjAKK1JVLVVOSy0yMzEyIDogMSA6IDYuMDk5OTk5OQorUlUtVU5LLTIzMTMgOiAxIDogMS4zCitSVS1VTkstMjMxNCA6IDEgOiA3MS41OTk5OTgKK1JVLVVOSy0yMzE1IDogMSA6IDYuMTk5OTk5OAorUlUtVU5LLTIzMTYgOiAxIDogMTguMjk5OTk5CitSVS1VTkstMjMxNyA6IDEgOiAxMy41CitSVS1VTkstMjMxOCA6IDEgOiAxLjAKK1JVLVVOSy0yMzE5IDogMSA6IDEuMAorUlUtVU5LLTIzMjAgOiAxIDogMS4wCitSVS1VTkstMjMyMSA6IDEgOiAxLjAKK1JVLVVOSy0yMzIyIDogMSA6IDEuNAorUlUtVU5LLTIzMjMgOiAxIDogMS4wCitSVS1VTkstMjMyNCA6IDEgOiAxMzguMzk5OTkKK1JVLVVOSy0yMzI1IDogMSA6IDU1LjUKK1JVLVVOSy0yMzI2IDogMSA6IDIwNDkuOAorUlUtVU5LLTIzMjcgOiAxIDogMi44CitSVS1VTkstMjMyOCA6IDEgOiAxLjAKK1JVLVVOSy0yMzI5IDogMSA6IDIuNQorUlUtVU5LLTIzMzAgOiAxIDogMy4wOTk5OTk5CitSVS1VTkstMjMzMSA6IDEgOiAxNC4zCitSVS1VTkstMjMzMiA6IDEgOiA0LjAKK1JVLVVOSy0yMzMzIDogMSA6IDUuMzAwMDAwMgorUlUtVU5LLTIzMzQgOiAxIDogMTMwLjEwMDAxCitSVS1VTkstMjMzNSA6IDEgOiAyLjIKK1JVLVVOSy0yMzM2IDogMSA6IDEuOQorUlUtVU5LLTIzMzcgOiAxIDogMS4wCitSVS1VTkstMjMzOCA6IDEgOiAzMy43MDAwMDEKK1JVLVVOSy0yMzM5IDogMSA6IDMuOTAwMDAwMQorUlUtVU5LLTIzNDAgOiAxIDogMS44CitSVS1VTkstMjM0MSA6IDEgOiAyLjQwMDAwMDEKK1JVLVVOSy0yMzQyIDogMSA6IDkuMTAwMDAwNAorUlUtVU5LLTIzNDMgOiAxIDogOC42MDAwMDA0CitSVS1VTkstMjM0NCA6IDEgOiAyLjA5OTk5OTkKK1JVLVVOSy0yMzQ1IDogMSA6IDEuMAorUlUtVU5LLTIzNDYgOiAxIDogMS4wCitSVS1VTkstMjM0NyA6IDEgOiAxLjAKK1JVLVVOSy0yMzQ4IDogMSA6IDQuMTk5OTk5OAorUlUtVU5LLTIzNDkgOiAxIDogOC4zMDAwMDAyCitSVS1VTkstMjM1MCA6IDEgOiA1LjA5OTk5OTkKK1JVLVVOSy0yMzUxIDogMSA6IDEuMworUlUtVU5LLTIzNTIgOiAxIDogMi4yCitSVS1VTkstMjM1MyA6IDEgOiAxLjIKK1JVLVVOSy0yMzU0IDogMSA6IDEuMAorUlUtVU5LLTIzNTUgOiAxIDogMTYuNQorUlUtVU5LLTIzNTYgOiAxIDogMTcuMQorUlUtVU5LLTIzNTcgOiAxIDogMi4zCitSVS1VTkstMjM1OCA6IDEgOiAzNi41CitSVS1VTkstMjM1OSA6IDEgOiA2LjE5OTk5OTgKK1JVLVVOSy0yMzYwIDogMSA6IDUuNTk5OTk5OQorUlUtVU5LLTIzNjEgOiAxIDogMS4wCitSVS1VTkstMjM2MiA6IDEgOiA1LjUKK1JVLVVOSy0yMzYzIDogMSA6IDEuNAorUlUtVU5LLTIzNjQgOiAxIDogMS4wCitSVS1VTkstMjM2NSA6IDEgOiAyLjQwMDAwMDEKK1JVLVVOSy0yMzY2IDogMSA6IDE0OS4zCitSVS1VTkstMjM2NyA6IDEgOiAxMTQuNworUlUtVU5LLTIzNjggOiAxIDogMy4yCitSVS1VTkstMjM2OSA6IDEgOiAyLjQwMDAwMDEKK1JVLVVOSy0yMzcwIDogMSA6IDMuNTk5OTk5OQorUlUtVU5LLTIzNzEgOiAxIDogMS4wCitSVS1VTkstMjM3MiA6IDEgOiA0LjA5OTk5OTkKK1JVLVVOSy0yMzczIDogMSA6IDQ5ODkuMjk5OAorUlUtVU5LLTIzNzQgOiAxIDogMy44CitSVS1VTkstMjM3NSA6IDEgOiA2LjAKK1JVLVVOSy0yMzc2IDogMSA6IDEuMAorUlUtVU5LLTIzNzcgOiAxIDogMS4wCitSVS1VTkstMjM3OCA6IDEgOiAxLjAKK1JVLVVOSy0yMzc5IDogMSA6IDkuMzk5OTk5NgorUlUtVU5LLTIzODAgOiAxIDogNjguNjk5OTk3CitSVS1VTkstMjM4MSA6IDEgOiAxNC4xCitSVS1VTkstMjM4MiA6IDEgOiAxLjUKK1JVLVVOSy0yMzgzIDogMSA6IDYuMAorUlUtVU5LLTIzODQgOiAxIDogMS43CitSVS1VTkstMjM4NSA6IDEgOiAxMDcuOAorUlUtVU5LLTIzODYgOiAxIDogMS4wCitSVS1VTkstMjM4NyA6IDEgOiA4NS45MDAwMDIKK1JVLVVOSy0yMzg4IDogMSA6IDMuMworUlUtVU5LLTIzODkgOiAxIDogMi40MDAwMDAxCitSVS1VTkstMjM5MCA6IDEgOiAyLjAKK1JVLVVOSy0yMzkxIDogMSA6IDIuMgorUlUtVU5LLTIzOTIgOiAxIDogNi41CitSVS1VTkstMjM5MyA6IDEgOiAxLjAKK1JVLVVOSy0yMzk0IDogMSA6IDEwLjkKK1JVLVVOSy0yMzk1IDogMSA6IDMuNTk5OTk5OQorUlUtVU5LLTIzOTYgOiAxIDogMS4wCitSVS1VTkstMjM5NyA6IDEgOiAxLjQKK1JVLVVOSy0yMzk4IDogMSA6IDEuNAorUlUtVU5LLTIzOTkgOiAxIDogMTYuNgorUlUtVU5LLTI0MDAgOiAxIDogNi45MDAwMDAxCitSVS1VTkstMjQwMSA6IDEgOiAxLjcKK1JVLVVOSy0yNDAyIDogMSA6IDQuNQorUlUtVU5LLTI0MDMgOiAxIDogMS4wCitSVS1VTkstMjQwNCA6IDEgOiAxLjAKK1JVLVVOSy0yNDA1IDogMSA6IDkuNQorUlUtVU5LLTI0MDYgOiAxIDogMS4wCitSVS1VTkstMjQwNyA6IDEgOiAyMC41CitSVS1VTkstMjQwOCA6IDEgOiAyLjA5OTk5OTkKK1JVLVVOSy0yNDA5IDogMSA6IDUuMzAwMDAwMgorUlUtVU5LLTI0MTAgOiAxIDogOS44OTk5OTk2CitSVS1VTkstMjQxMSA6IDEgOiAxLjAKK1JVLVVOSy0yNDEyIDogMSA6IDEuMworUlUtVU5LLTI0MTMgOiAxIDogMy44CitSVS1VTkstMjQxNCA6IDEgOiAxNi41CitSVS1VTkstMjQxNSA6IDEgOiAzLjAKK1JVLVVOSy0yNDE2IDogMSA6IDM0LjA5OTk5OAorUlUtVU5LLTI0MTcgOiAxIDogMi4wOTk5OTk5CitSVS1VTkstMjQxOCA6IDEgOiAxLjQKK1JVLVVOSy0yNDE5IDogMSA6IDEuMAorUlUtVU5LLTI0MjAgOiAxIDogMS43CitSVS1VTkstMjQyMSA6IDEgOiAyLjcKK1JVLVVOSy0yNDIyIDogMSA6IDEuMAorUlUtVU5LLTI0MjMgOiAxIDogMS45CitSVS1VTkstMjQyNCA6IDEgOiAxLjAKK1JVLVVOSy0yNDI1IDogMSA6IDEuMQorUlUtVU5LLTI0MjYgOiAxIDogMS4wCitSVS1VTkstMjQyNyA6IDEgOiAxLjAKK1JVLVVOSy0yNDI4IDogMSA6IDkuODAwMDAwMgorUlUtVU5LLTI0MjkgOiAxIDogMS4wCitSVS1VTkstMjQzMCA6IDEgOiAzLjkwMDAwMDEKK1JVLVVOSy0yNDMxIDogMSA6IDMuNDAwMDAwMQorUlUtVU5LLTI0MzIgOiAxIDogMi40MDAwMDAxCitSVS1VTkstMjQzMyA6IDEgOiAxLjcKK1JVLVVOSy0yNDM0IDogMSA6IDEwOC4xCitSVS1VTkstMjQzNSA6IDEgOiAyLjIKK1JVLVVOSy0yNDM2IDogMSA6IDEuOAorUlUtVU5LLTI0MzcgOiAxIDogNi4wCitSVS1VTkstMjQzOCA6IDEgOiA2LjE5OTk5OTgKK1JVLVVOSy0yNDM5IDogMSA6IDQwLjA5OTk5OAorUlUtVU5LLTI0NDAgOiAxIDogMS4wCitSVS1VTkstMjQ0MSA6IDEgOiAxLjAKK1JVLVVOSy0yNDQyIDogMSA6IDguMzk5OTk5NgorUlUtVU5LLTI0NDMgOiAxIDogMi44CitSVS1VTkstMjQ0NCA6IDEgOiAzNC40MDAwMDIKK1JVLVVOSy0yNDQ1IDogMSA6IDEuMAorUlUtVU5LLTI0NDYgOiAxIDogMS42CitSVS1VTkstMjQ0NyA6IDEgOiAxLjkKK1JVLVVOSy0yNDQ4IDogMSA6IDQuOTAwMDAwMQorUlUtVU5LLTI0NDkgOiAxIDogMi40MDAwMDAxCitSVS1VTkstMjQ1MCA6IDEgOiAxLjAKK1JVLVVOSy0yNDUxIDogMSA6IDEuMAorUlUtVU5LLTI0NTIgOiAxIDogMS4wCitSVS1VTkstMjQ1MyA6IDEgOiAxLjQKK1JVLVVOSy0yNDU0IDogMSA6IDI2LjQKK1JVLVVOSy0yNDU1IDogMSA6IDEuMAorUlUtVU5LLTI0NTYgOiAxIDogMi44CitSVS1VTkstMjQ1NyA6IDEgOiAxLjMKK1JVLVVOSy0yNDU4IDogMSA6IDEuMworUlUtVU5LLTI0NTkgOiAxIDogMS4wCitSVS1VTkstMjQ2MCA6IDEgOiAxLjAKK1JVLVVOSy0yNDYxIDogMSA6IDEuNgorUlUtVU5LLTI0NjIgOiAxIDogMS4wCitSVS1VTkstMjQ2MyA6IDEgOiAxLjAKK1JVLVVOSy0yNDY0IDogMSA6IDguMzk5OTk5NgorUlUtVU5LLTI0NjUgOiAxIDogMi4zCitSVS1VTkstMjQ2NiA6IDEgOiA2LjkwMDAwMDEKK1JVLVVOSy0yNDY3IDogMSA6IDMuOTAwMDAwMQorUlUtVU5LLTI0NjggOiAxIDogNC40MDAwMDAxCitSVS1VTkstMjQ2OSA6IDEgOiAxMC44CitSVS1VTkstMjQ3MCA6IDEgOiAzLjcKK1JVLVVOSy0yNDcxIDogMSA6IDMyLjI5OTk5OQorUlUtVU5LLTI0NzIgOiAxIDogMTAuNQorUlUtVU5LLTI0NzMgOiAxIDogMTQuNworUlUtVU5LLTI0NzQgOiAxIDogNC4zMDAwMDAyCitSVS1VTkstMjQ3NSA6IDEgOiAxLjYKK1JVLVVOSy0yNDc2IDogMSA6IDEuMAorUlUtVU5LLTI0NzcgOiAxIDogNC45MDAwMDAxCitSVS1VTkstMjQ3OCA6IDEgOiA0LjQwMDAwMDEKK1JVLVVOSy0yNDc5IDogMSA6IDIuOAorUlUtVU5LLTI0ODAgOiAxIDogMS4wCitSVS1VTkstMjQ4MSA6IDEgOiAxLjAKK1JVLVVOSy0yNDgyIDogMSA6IDE5LjEKK1JVLVVOSy0yNDgzIDogMSA6IDguMTk5OTk5OAorUlUtVU5LLTI0ODQgOiAxIDogNS4xOTk5OTk4CitSVS1VTkstMjQ4NSA6IDEgOiAyLjAKK1JVLVVOSy0yNDg2IDogMSA6IDEuMgorUlUtVU5LLTI0ODcgOiAxIDogMS40CitSVS1VTkstMjQ4OCA6IDEgOiA0LjY5OTk5OTgKK1JVLVVOSy0yNDg5IDogMSA6IDEuMgorUlUtVU5LLTI0OTAgOiAxIDogMS4wCitSVS1VTkstMjQ5MSA6IDEgOiAxLjUKK1JVLVVOSy0yNDkyIDogMSA6IDEyODcuNgorUlUtVU5LLTI0OTMgOiAxIDogMS4yCitSVS1VTkstMjQ5NCA6IDEgOiA2LjUKK1JVLVVOSy0yNDk1IDogMSA6IDgyNC45MDAwMgorUlUtVU5LLTI0OTYgOiAxIDogNzcuMDk5OTk4CitSVS1VTkstMjQ5NyA6IDEgOiAxLjAKK1JVLVVOSy0yNDk4IDogMSA6IDEuMAorUlUtVU5LLTI0OTkgOiAxIDogMS4wCitSVS1VTkstMjUwMCA6IDEgOiA0LjMwMDAwMDIKK1JVLVVOSy0yNTAxIDogMSA6IDguNjAwMDAwNAorUlUtVU5LLTI1MDIgOiAxIDogNjguMzAwMDAzCitSVS1VTkstMjUwMyA6IDEgOiAxLjQKK1JVLVVOSy0yNTA0IDogMSA6IDgwLjQwMDAwMgorUlUtVU5LLTI1MDUgOiAxIDogNC4wOTk5OTk5CitSVS1VTkstMjUwNiA6IDEgOiAzNi45MDAwMDIKK1JVLVVOSy0yNTA3IDogMSA6IDEuOAorUlUtVU5LLTI1MDggOiAxIDogMjE2Ljg5OTk5CitSVS1VTkstMjUwOSA6IDEgOiAyMDcuNjAwMDEKK1JVLVVOSy0yNTEwIDogMSA6IDEwMS4yCitSVS1VTkstMjUxMSA6IDEgOiAyLjMKK1JVLVVOSy0yNTEyIDogMSA6IDEuNQorUlUtVU5LLTI1MTMgOiAxIDogNS4wCitSVS1VTkstMjUxNCA6IDEgOiAzLjgKK1JVLVVOSy0yNTE1IDogMSA6IDEuOAorUlUtVU5LLTI1MTYgOiAxIDogMS4wCitSVS1VTkstMjUxNyA6IDEgOiAxLjAKK1JVLVVOSy0yNTE4IDogMSA6IDM1LjkwMDAwMgorUlUtVU5LLTI1MTkgOiAxIDogNDA1LjEwMDAxCitSVS1VTkstMjUyMCA6IDEgOiA3Mi4xOTk5OTcKK1JVLVVOSy0yNTIxIDogMSA6IDEuOAorUlUtVU5LLTI1MjIgOiAxIDogMS4wCitSVS1VTkstMjUyMyA6IDEgOiAzLjgKK1JVLVVOSy0yNTI0IDogMSA6IDk4LjMwMDAwMworUlUtVU5LLTI1MjUgOiAxIDogNi41CitSVS1VTkstMjUyNiA6IDEgOiAxLjcKK1JVLVVOSy0yNTI3IDogMSA6IDcuNjk5OTk5OAorUlUtVU5LLTI1MjggOiAxIDogMS4wCitSVS1VTkstMjUyOSA6IDEgOiA1LjUKK1JVLVVOSy0yNTMwIDogMSA6IDEuMAorUlUtVU5LLTI1MzEgOiAxIDogNC4zMDAwMDAyCitSVS1VTkstMjUzMiA6IDEgOiAxLjMKK1JVLVVOSy0yNTMzIDogMSA6IDEuMAorUlUtVU5LLTI1MzQgOiAxIDogMS4yCitSVS1VTkstMjUzNSA6IDEgOiAxLjMKK1JVLVVOSy0yNTM2IDogMSA6IDEuMAorUlUtVU5LLTI1MzcgOiAxIDogMTEuMAorUlUtVU5LLTI1MzggOiAxIDogMS4wCitSVS1VTkstMjUzOSA6IDEgOiAxLjAKK1JVLVVOSy0yNTQwIDogMSA6IDIuNDAwMDAwMQorUlUtVU5LLTI1NDEgOiAxIDogMS4zCitSVS1VTkstMjU0MiA6IDEgOiAxLjAKK1JVLVVOSy0yNTQzIDogMSA6IDEuMAorUlUtVU5LLTI1NDQgOiAxIDogNS4wCitSVS1VTkstMjU0NSA6IDEgOiAyLjA5OTk5OTkKK1JVLVVOSy0yNTQ2IDogMSA6IDQuNjk5OTk5OAorUlUtVU5LLTI1NDcgOiAxIDogNC45MDAwMDAxCitSVS1VTkstMjU0OCA6IDEgOiA0LjkwMDAwMDEKK1JVLVVOSy0yNTQ5IDogMSA6IDEzLjQKK1JVLVVOSy0yNTUwIDogMSA6IDEuMAorUlUtVU5LLTI1NTEgOiAxIDogMi41CitSVS1VTkstMjU1MiA6IDEgOiAyLjQwMDAwMDEKK1JVLVVOSy0yNTUzIDogMSA6IDEuMAorUlUtVU5LLTI1NTQgOiAxIDogMTYuNgorUlUtVU5LLTI1NTUgOiAxIDogMS40CitSVS1VTkstMjU1NiA6IDEgOiAxLjAKK1JVLVVOSy0yNTU3IDogMSA6IDI5LjYKK1JVLVVOSy0yNTU4IDogMSA6IDc0LjQwMDAwMgorUlUtVU5LLTI1NTkgOiAxIDogMTYuMQorUlUtVU5LLTI1NjAgOiAxIDogMS4wCitSVS1VTkstMjU2MSA6IDEgOiAxLjAKK1JVLVVOSy0yNTYyIDogMSA6IDE3LjYKK1JVLVVOSy0yNTYzIDogMSA6IDIuNTk5OTk5OQorUlUtVU5LLTI1NjQgOiAxIDogMjIuMQorUlUtVU5LLTI1NjUgOiAxIDogMS4wCitSVS1VTkstMjU2NiA6IDEgOiAyLjkwMDAwMDEKK1JVLVVOSy0yNTY3IDogMSA6IDIuOAorUlUtVU5LLTI1NjggOiAxIDogMS4yCitSVS1VTkstMjU2OSA6IDEgOiAxLjAKK1JVLVVOSy0yNTcwIDogMSA6IDE3LjIwMDAwMQorUlUtVU5LLTI1NzEgOiAxIDogMS4yCitSVS1VTkstMjU3MiA6IDEgOiAxLjAKK1JVLVVOSy0yNTczIDogMSA6IDEuOQorUlUtVU5LLTI1NzQgOiAxIDogMS4wCitSVS1VTkstMjU3NSA6IDEgOiAyOS4xCitSVS1VTkstMjU3NiA6IDEgOiAxLjIKK1JVLVVOSy0yNTc3IDogMSA6IDEuMAorUlUtVU5LLTI1NzggOiAxIDogMS4wCitSVS1VTkstMjU3OSA6IDEgOiAxLjAKK1JVLVVOSy0yNTgwIDogMSA6IDEuNQorUlUtVU5LLTI1ODEgOiAxIDogNS4zMDAwMDAyCitSVS1VTkstMjU4MiA6IDEgOiAxLjMKK1JVLVVOSy0yNTgzIDogMSA6IDQuMAorUlUtVU5LLTI1ODQgOiAxIDogMjUzLjAKK1JVLVVOSy0yNTg1IDogMSA6IDEuMAorUlUtVU5LLTI1ODYgOiAxIDogMS43CitSVS1VTkstMjU4NyA6IDEgOiA4LjM5OTk5OTYKK1JVLVVOSy0yNTg4IDogMSA6IDEuMQorUlUtVU5LLTI1ODkgOiAxIDogODguMDk5OTk4CitSVS1VTkstMjU5MCA6IDEgOiAxNS43CitSVS1VTkstMjU5MSA6IDEgOiAzLjAKK1JVLVVOSy0yNTkyIDogMSA6IDI5LjIwMDAwMQorUlUtVU5LLTI1OTMgOiAxIDogMS4wCitSVS1VTkstMjU5NCA6IDEgOiAxLjAKK1JVLVVOSy0yNTk1IDogMSA6IDEuOQorUlUtVU5LLTI1OTYgOiAxIDogMy40MDAwMDAxCitSVS1VTkstMjU5NyA6IDEgOiA0OS43OTk5OTkKK1JVLVVOSy0yNTk4IDogMSA6IDEuMworUlUtVU5LLTI1OTkgOiAxIDogOC42MDAwMDA0CitSVS1VTkstMjYwMCA6IDEgOiAxNC44CitSVS1VTkstMjYwMSA6IDEgOiAxLjAKK1JVLVVOSy0yNjAyIDogMSA6IDYxLjQwMDAwMgorUlUtVU5LLTI2MDMgOiAxIDogMS4wCitSVS1VTkstMjYwNCA6IDEgOiAzLjgKK1JVLVVOSy0yNjA1IDogMSA6IDYzLjUKK1JVLVVOSy0yNjA2IDogMSA6IDMuNQorUlUtVU5LLTI2MDcgOiAxIDogMzIuNTk5OTk4CitSVS1VTkstMjYwOCA6IDEgOiAxLjAKK1JVLVVOSy0yNjA5IDogMSA6IDEuMgorUlUtVU5LLTI2MTAgOiAxIDogMS4wCitSVS1VTkstMjYxMSA6IDEgOiAxLjYKK1JVLVVOSy0yNjEyIDogMSA6IDEuMAorUlUtVU5LLTI2MTMgOiAxIDogMS4wCitSVS1VTkstMjYxNCA6IDEgOiAxLjAKK1JVLVVOSy0yNjE1IDogMSA6IDMuNQorUlUtVU5LLTI2MTYgOiAxIDogMi4wOTk5OTk5CitSVS1VTkstMjYxNyA6IDEgOiAxLjAKK1JVLVVOSy0yNjE4IDogMSA6IDExLjkKK1JVLVVOSy0yNjE5IDogMSA6IDMuMworUlUtVU5LLTI2MjAgOiAxIDogMzMuMjAwMDAxCitSVS1VTkstMjYyMSA6IDEgOiAxLjAKK1JVLVVOSy0yNjIyIDogMSA6IDEuMworUlUtVU5LLTI2MjMgOiAxIDogMS4wCitSVS1VTkstMjYyNCA6IDEgOiA1LjE5OTk5OTgKK1JVLVVOSy0yNjI1IDogMSA6IDEuMAorUlUtVU5LLTI2MjYgOiAxIDogMS4xCitSVS1VTkstMjYyNyA6IDEgOiAxLjAKK1JVLVVOSy0yNjI4IDogMSA6IDExLjkKK1JVLVVOSy0yNjI5IDogMSA6IDEuMAorUlUtVU5LLTI2MzAgOiAxIDogMS4wCitSVS1VTkstMjYzMSA6IDEgOiAxLjAKK1JVLVVOSy0yNjMyIDogMSA6IDMuNQorUlUtVU5LLTI2MzMgOiAxIDogMS4wCitSVS1VTkstMjYzNCA6IDEgOiAxMDIxNi41CitSVS1VTkstMjYzNSA6IDEgOiAxLjcKK1JVLVVOSy0yNjM2IDogMSA6IDE3ODQ1LjQKK1JVLVVOSy0yNjM3IDogMSA6IDEzLjEKK1JVLVVOSy0yNjM4IDogMSA6IDEuMAorUlUtVU5LLTI2MzkgOiAxIDogMi4wCitSVS1VTkstMjY0MCA6IDEgOiAyLjAKK1JVLVVOSy0yNjQxIDogMSA6IDEuNAorUlUtVU5LLTI2NDIgOiAxIDogMi4wCitSVS1VTkstMjY0MyA6IDEgOiAxLjgKK1JVLVVOSy0yNjQ0IDogMSA6IDYzMC4wOTk5OAorUlUtVU5LLTI2NDUgOiAxIDogNC40MDAwMDAxCitSVS1VTkstMjY0NiA6IDEgOiAxLjAKK1JVLVVOSy0yNjQ3IDogMSA6IDEuMAorUlUtVU5LLTI2NDggOiAxIDogMS4wCitSVS1VTkstMjY0OSA6IDEgOiAxLjAKK1JVLVVOSy0yNjUwIDogMSA6IDQuMAorUlUtVU5LLTI2NTEgOiAxIDogMS4wCitSVS1VTkstMjY1MiA6IDEgOiAxLjAKK1JVLVVOSy0yNjUzIDogMSA6IDIuMDk5OTk5OQorUlUtVU5LLTI2NTQgOiAxIDogMS4wCitSVS1VTkstMjY1NSA6IDEgOiAyLjU5OTk5OTkKK1JVLVVOSy0yNjU2IDogMSA6IDEuMAorUlUtVU5LLTI2NTcgOiAxIDogMS4wCitSVS1VTkstMjY1OCA6IDEgOiAxNS4wCitSVS1VTkstMjY1OSA6IDEgOiAyLjU5OTk5OTkKK1JVLVVOSy0yNjYwIDogMSA6IDEuMAorUlUtVU5LLTI2NjEgOiAxIDogMS4wCitSVS1VTkstMjY2MiA6IDEgOiA3LjY5OTk5OTgKK1JVLVVOSy0yNjYzIDogMSA6IDEuMAorUlUtVU5LLTI2NjQgOiAxIDogMS4xCitSVS1VTkstMjY2NSA6IDEgOiAxLjIKK1JVLVVOSy0yNjY2IDogMSA6IDEuMAorUlUtVU5LLTI2NjcgOiAxIDogMTcuMQorUlUtVU5LLTI2NjggOiAxIDogMS40CitSVS1VTkstMjY2OSA6IDEgOiAxLjIKK1JVLVVOSy0yNjcwIDogMSA6IDIwLjAKK1JVLVVOSy0yNjcxIDogMSA6IDQ3Ljc5OTk5OQorUlUtVU5LLTI2NzIgOiAxIDogMjIuOQorUlUtVU5LLTI2NzMgOiAxIDogNC41CitSVS1VTkstMjY3NCA6IDEgOiAyLjIKK1JVLVVOSy0yNjc1IDogMSA6IDEzLjMKK1JVLVVOSy0yNjc2IDogMSA6IDE1LjUKK1JVLVVOSy0yNjc3IDogMSA6IDEuOQorUlUtVU5LLTI2NzggOiAxIDogMS4wCitSVS1VTkstMjY3OSA6IDEgOiAzLjIKK1JVLVVOSy0yNjgwIDogMSA6IDYuNQorUlUtVU5LLTI2ODEgOiAxIDogMy40MDAwMDAxCitSVS1VTkstMjY4MiA6IDEgOiAxLjkKK1JVLVVOSy0yNjgzIDogMSA6IDEuMAorUlUtVU5LLTI2ODQgOiAxIDogMTkyNy43CitSVS1VTkstMjY4NSA6IDEgOiA3LjQwMDAwMDEKK1JVLVVOSy0yNjg2IDogMSA6IDEuOQorUlUtVU5LLTI2ODcgOiAxIDogMjU1LjIKK1JVLVVOSy0yNjg4IDogMSA6IDEuMAorUlUtVU5LLTI2ODkgOiAxIDogMTkzMy4xCitSVS1VTkstMjY5MCA6IDEgOiAzNy4wOTk5OTgKK1JVLVVOSy0yNjkxIDogMSA6IDEuMgorUlUtVU5LLTI2OTIgOiAxIDogNTUzNC4yOTk4CitSVS1VTkstMjY5MyA6IDEgOiAxMjEuNworUlUtVU5LLTI2OTQgOiAxIDogMjIxNC42MDAxCitSVS1VTkstMjY5NSA6IDEgOiAyODA4LjIKK1JVLVVOSy0yNjk2IDogMSA6IDExMTUuNgorUlUtVU5LLTI2OTcgOiAxIDogMS4wCitSVS1VTkstMjY5OCA6IDEgOiA0OS4wOTk5OTgKK1JVLVVOSy0yNjk5IDogMSA6IDYwMC4yOTk5OQorUlUtVU5LLTI3MDAgOiAxIDogMTQ5LjcKK1JVLVVOSy0yNzAxIDogMSA6IDEuNAorUlUtVU5LLTI3MDIgOiAxIDogMzI2LjI5OTk5CitSVS1VTkstMjcwMyA6IDEgOiA0MC4yOTk5OTkKK1JVLVVOSy0yNzA0IDogMSA6IDE1MTQzLjYKK1JVLVVOSy0yNzA1IDogMSA6IDEuMAorUlUtVU5LLTI3MDYgOiAxIDogMTY4OS45CitSVS1VTkstMjcwNyA6IDEgOiA5MDcyLjAKK1JVLVVOSy0yNzA4IDogMSA6IDQ4OS4yMDAwMQorUlUtVU5LLTI3MDkgOiAxIDogMjM3Ny43CitSVS1VTkstMjcxMCA6IDEgOiAyOTYyNi40CitSVS1VTkstMjcxMSA6IDEgOiAyOTYyNi40CitSVS1VTkstMjcxMiA6IDEgOiA0MC40MDAwMDIKK1JVLVVOSy0yNzEzIDogMSA6IDE4NzEuNgorUlUtVU5LLTI3MTQgOiAxIDogMzc1Ljc5OTk5CitSVS1VTkstMjcxNSA6IDEgOiAyNC41CitSVS1VTkstMjcxNiA6IDEgOiAxLjAKK1JVLVVOSy0yNzE3IDogMSA6IDUuNTk5OTk5OQorUlUtVU5LLTI3MTggOiAxIDogMS4wCitSVS1VTkstMjcxOSA6IDEgOiAxMjE2LjYKK1JVLVVOSy0yNzIwIDogMSA6IDcuOTAwMDAwMQorUlUtVU5LLTI3MjEgOiAxIDogMjguMjAwMDAxCitSVS1VTkstMjcyMiA6IDEgOiA1LjkwMDAwMDEKK1JVLVVOSy0yNzIzIDogMSA6IDMuMDk5OTk5OQorUlUtVU5LLTI3MjQgOiAxIDogNS44MDAwMDAyCitSVS1VTkstMjcyNSA6IDEgOiA3NC4wOTk5OTgKK1JVLVVOSy0yNzI2IDogMSA6IDY3LjkwMDAwMgorUlUtVU5LLTI3MjcgOiAxIDogNS4zMDAwMDAyCitSVS1VTkstMjcyOCA6IDEgOiA0LjAKK1JVLVVOSy0yNzI5IDogMSA6IDMxLjEKK1JVLVVOSy0yNzMwIDogMSA6IDEuMAorUlUtVU5LLTI3MzEgOiAxIDogMTIuNworUlUtVU5LLTI3MzIgOiAxIDogMTMuMworUlUtVU5LLTI3MzMgOiAxIDogMS4xCitSVS1VTkstMjczNCA6IDEgOiAxOS4xCitSVS1VTkstMjczNSA6IDEgOiAxLjAKK1JVLVVOSy0yNzM2IDogMSA6IDEuMAorUlUtVU5LLTI3MzcgOiAxIDogMS44CitSVS1VTkstMjczOCA6IDEgOiAyLjUKK1JVLVVOSy0yNzM5IDogMSA6IDIuNworUlUtVU5LLTI3NDAgOiAxIDogMTkwMS44CitSVS1VTkstMjc0MSA6IDEgOiAxLjYKK1JVLVVOSy0yNzQyIDogMSA6IDMuMgorUlUtVU5LLTI3NDMgOiAxIDogMTEuMgorUlUtVU5LLTI3NDQgOiAxIDogMS4wCitSVS1VTkstMjc0NSA6IDEgOiA4LjAKK1JVLVVOSy0yNzQ2IDogMSA6IDIuNTk5OTk5OQorUlUtVU5LLTI3NDcgOiAxIDogMS4wCitSVS1VTkstMjc0OCA6IDEgOiAyLjcKK1JVLVVOSy0yNzQ5IDogMSA6IDEuMgorUlUtVU5LLTI3NTAgOiAxIDogMS4wCitSVS1VTkstMjc1MSA6IDEgOiAxLjAKK1JVLVVOSy0yNzUyIDogMSA6IDEuMAorUlUtVU5LLTI3NTMgOiAxIDogMS4wCitSVS1VTkstMjc1NCA6IDEgOiAxLjIKK1JVLVVOSy0yNzU1IDogMSA6IDE1NC43CitSVS1VTkstMjc1NiA6IDEgOiA5LjM5OTk5OTYKK1JVLVVOSy0yNzU3IDogMSA6IDUxLjU5OTk5OAorUlUtVU5LLTI3NTggOiAxIDogNzQuMDk5OTk4CitSVS1VTkstMjc1OSA6IDEgOiAzOTM2LjIKK1JVLVVOSy0yNzYwIDogMSA6IDUuOTAwMDAwMQorUlUtVU5LLTI3NjEgOiAxIDogMzAuMjk5OTk5CitSVS1VTkstMjc2MiA6IDEgOiAxLjAKK1JVLVVOSy0yNzYzIDogMSA6IDEuMAorUlUtVU5LLTI3NjQgOiAxIDogMi4wOTk5OTk5CitSVS1VTkstMjc2NSA6IDEgOiAzLjkwMDAwMDEKK1JVLVVOSy0yNzY2IDogMSA6IDIyNjkuMworUlUtVU5LLTI3NjcgOiAxIDogMi43CitSVS1VTkstMjc2OCA6IDEgOiA3LjA5OTk5OTkKK1JVLVVOSy0yNzY5IDogMSA6IDIyLjI5OTk5OQorUlUtVU5LLTI3NzAgOiAxIDogMTMuOAorUlUtVU5LLTI3NzEgOiAxIDogMzIuMjAwMDAxCitSVS1VTkstMjc3MiA6IDEgOiAxOC43OTk5OTkKK1JVLVVOSy0yNzczIDogMSA6IDMuMDk5OTk5OQorUlUtVU5LLTI3NzQgOiAxIDogNjUuMDk5OTk4CitSVS1VTkstMjc3NSA6IDEgOiAyLjIKK1JVLVVOSy0yNzc2IDogMSA6IDEuOQorUlUtVU5LLTI3NzcgOiAxIDogMTIuMworUlUtVU5LLTI3NzggOiAxIDogMTYuNgorUlUtVU5LLTI3NzkgOiAxIDogMjMuNQorUlUtVU5LLTI3ODAgOiAxIDogMi43CitSVS1VTkstMjc4MSA6IDEgOiA3LjE5OTk5OTgKK1JVLVVOSy0yNzgyIDogMSA6IDguODk5OTk5NgorUlUtVU5LLTI3ODMgOiAxIDogMTguNgorUlUtVU5LLTI3ODQgOiAxIDogMzQuNDAwMDAyCitSVS1VTkstMjc4NSA6IDEgOiAyMzcuMzk5OTkKK1JVLVVOSy0yNzg2IDogMSA6IDk0LjAKK1JVLVVOSy0yNzg3IDogMSA6IDUuMAorUlUtVU5LLTI3ODggOiAxIDogMjg5OS4zCitSVS1VTkstMjc4OSA6IDEgOiAzMC40CitSVS1VTkstMjc5MCA6IDEgOiA0LjMwMDAwMDIKK1JVLVVOSy0yNzkxIDogMSA6IDUxNS4wOTk5OAorUlUtVU5LLTI3OTIgOiAxIDogNC45MDAwMDAxCitSVS1VTkstMjc5MyA6IDEgOiAyLjU5OTk5OTkKK1JVLVVOSy0yNzk0IDogMSA6IDEuMAorUlUtVU5LLTI3OTUgOiAxIDogMi41CitSVS1VTkstMjc5NiA6IDEgOiAzNC4wOTk5OTgKK1JVLVVOSy0yNzk3IDogMSA6IDMuNQorUlUtVU5LLTI3OTggOiAxIDogNi4zMDAwMDAyCitSVS1VTkstMjc5OSA6IDEgOiAxMTAuOQorUlUtVU5LLTI4MDAgOiAxIDogMS42CitSVS1VTkstMjgwMSA6IDEgOiAxLjAKK1JVLVVOSy0yODAyIDogMSA6IDEuMQorUlUtVU5LLTI4MDMgOiAxIDogMTIuMAorUlUtVU5LLTI4MDQgOiAxIDogNjUuNQorUlUtVU5LLTI4MDUgOiAxIDogMTYuMAorUlUtVU5LLTI4MDYgOiAxIDogMTIuNAorUlUtVU5LLTI4MDcgOiAxIDogMS4wCitSVS1VTkstMjgwOCA6IDEgOiAzLjMKK1JVLVVOSy0yODA5IDogMSA6IDEuMworUlUtVU5LLTI4MTAgOiAxIDogMTA5LjMKK1JVLVVOSy0yODExIDogMSA6IDE1LjAKK1JVLVVOSy0yODEyIDogMSA6IDYuNjk5OTk5OAorUlUtVU5LLTI4MTMgOiAxIDogMS4wCitSVS1VTkstMjgxNCA6IDEgOiAzMC42CitSVS1VTkstMjgxNSA6IDEgOiA2LjE5OTk5OTgKK1JVLVVOSy0yODE2IDogMSA6IDEuNworUlUtVU5LLTI4MTcgOiAxIDogMS42CitSVS1VTkstMjgxOCA6IDEgOiAxNy4xCitSVS1VTkstMjgxOSA6IDEgOiAxLjAKK1JVLVVOSy0yODIwIDogMSA6IDEuNworUlUtVU5LLTI4MjEgOiAxIDogMS4wCitSVS1VTkstMjgyMiA6IDEgOiA1LjgwMDAwMDIKK1JVLVVOSy0yODIzIDogMSA6IDIuOAorUlUtVU5LLTI4MjQgOiAxIDogMzMuOTAwMDAyCitNb3VybWFuc2th72Egb2JsYXN0O1BlY2hlbmdza2l5IDogMSA6IDEzMjIxLjgKK05lbmV0c2tpIG5hdGlvbmFsIG9rcm91ZztOZW5ldHNreSBuYXQuIG9rcm91ZyA6IDEgOiAxNjgxNDkuMDkKK01vdXJtYW5za2HvYSBvYmxhc3Q7S29sc2tpeSA6IDEgOiAyMzUwMS4wCitNb3VybWFuc2th72Egb2JsYXN0O1NldmVyb21vcnNrIDogMSA6IDUwMy42MDAwMQorTW91cm1hbnNrYe9hIG9ibGFzdDtQb2x5YXJueWkgOiAxIDogNC4wOTk5OTk5CitNb3VybWFuc2th72Egb2JsYXN0O011cm1hbnNrIDogMSA6IDgwLjE5OTk5NworTW91cm1hbnNrYe9hIG9ibGFzdDtMb3ZvemVyc2tpeSA6IDEgOiA1MjY3NS42MDIKK0tvbWk7Vm9ya3V0YSA6IDEgOiAyMDgxNy42OTkKK01vdXJtYW5za2HvYSBvYmxhc3Q7T2xlbmVnb3JzayA6IDEgOiAxNzk1LjUKK01vdXJtYW5za2HvYSBvYmxhc3Q7TW9uY2hlZ29yc2sgOiAxIDogMzM1OS4yCitNb3VybWFuc2th72Egb2JsYXN0O0tvdmRvcnNraXkgOiAxIDogNDEwNi4wCitNb3VybWFuc2th72Egb2JsYXN0O0tpcm92c2sgOiAxIDogMzYxMi44CitNb3VybWFuc2th72Egb2JsYXN0O0FwYXRpdHkgOiAxIDogMzY2OC44OTk5CitOZW5ldHNraSBuYXRpb25hbCBva3JvdWc7TmFyeWFuLU1hciA6IDEgOiA2My43OTk5OTkKK01vdXJtYW5za2HvYSBvYmxhc3Q7S2FuZGFsYWtzaGEgOiAxIDogMTI2NjUuMgorTW91cm1hbnNrYe9hIG9ibGFzdDtQb2x5YXJuaXllIFpvcnkgOiAxIDogMTA0LjUKK01vdXJtYW5za2HvYSBvYmxhc3Q7VGVyc2tpeSA6IDEgOiAxOTA3NS4wCitLb21pO1VzdC1Uc2lsZW1za2l5IDogMSA6IDQxMDU1LjY5OQorS29taTtVc2luc2tpeSA6IDEgOiAzMjU0Mi44MDEKK0tvbWk7SW50YSA6IDEgOiAzMjY2NC4zMDEKK0thcmVsaWE7TG91a2hza2l5IDogMSA6IDIxNjA4LjQKK0Fya2hhbmdlbHNrYe9hIG9ibGFzdCBy6XM7TWV6ZW5za2l5IDogMSA6IDM0MTU2LjMwMQorS29taTtJemhlbXNraXkgOiAxIDogMTkwMDEuMTk5CitLb21pO1VzaW5zayA6IDEgOiAxLjYKK0thcmVsaWE7S2Vtc2tpeSA6IDEgOiA3NjY0LjM5OTkKK0Fya2hhbmdlbHNrYe9hIG9ibGFzdCBy6XM7UHJpbW9yc2tpeSA6IDEgOiAyMzAxMC4wCitLb21pO1BlY2hvcnNraXkgOiAxIDogMjg2NTkuNAorS2FyZWxpYTtLYWxldmFsc2tpeSA6IDEgOiAxNzAxNS44MDEKK0Fya2hhbmdlbHNrYe9hIG9ibGFzdCBy6XM7TGVzaHVrb25za2l5IDogMSA6IDI4MzE4LjY5OQorQXJraGFuZ2Vsc2th72Egb2JsYXN0IHLpcztQaW5lemhza2l5IDogMSA6IDMwNDI2LjgwMQorQXJraGFuZ2Vsc2th72Egb2JsYXN0IHLpcztTb2xvdmV0c2tpeSA6IDEgOiA0OC4yOTk5OTkKK0tvbWk7UGVjaG9yYSA6IDEgOiA2LjQwMDAwMDEKK0thcmVsaWE7S2VtJyA6IDEgOiAzLjMKK0thcmVsaWE7QmVsb21vcnNraXkgOiAxIDogMTI5NzcuMgorS29taTtVZG9yc2tpeSA6IDEgOiAzNTkxMy4zOTgKK1JVLVVOSy0yODI1IDogMSA6IDIyOTg0LjgwMQorUlUtVU5LLTI4MjYgOiAxIDogMjI5ODQuODAxCitBcmtoYW5nZWxza2HvYSBvYmxhc3QgculzO0tob2xtb2dvcnNraXkgOiAxIDogMTU1NjkuNAorS2FyZWxpYTtLb3N0b211a3NoYSA6IDEgOiA2LjA5OTk5OTkKK0Fya2hhbmdlbHNrYe9hIG9ibGFzdCBy6XM7QXJraGFuZ2Vsc2sgOiAxIDogNDUuMjAwMDAxCitBcmtoYW5nZWxza2HvYSBvYmxhc3QgculzO1NldmVyb2R2aW5zayA6IDEgOiAyMS40CitBcmtoYW5nZWxza2HvYSBvYmxhc3QgculzO09uZXpoc2tpeSA6IDEgOiAyMjYxMi4wCitLb21pO0tueWF6aHBvZ29zdHNraXkgOiAxIDogMjQyMTAuMQorS2FyZWxpYTtNdXllemVyc2tpeSA6IDEgOiAxNzg4Ny40CitLb21pO1Nvc25vZ29yc2tpeSA6IDEgOiAxNzAyOC42OTkKK0tvbWk7VWtodGEgOiAxIDogMTM1NjYuMworQXJraGFuZ2Vsc2th72Egb2JsYXN0IHLpcztOb3ZvZHZpbnNrIDogMSA6IDkuMAorS2FyZWxpYTtTZWdlemhza2l5IDogMSA6IDEwNzgzLjIKK0Fya2hhbmdlbHNrYe9hIG9ibGFzdCBy6XM7UGxlc2V0c2tpeSA6IDEgOiAyNzA5Ni4zMDEKK0Fya2hhbmdlbHNrYe9hIG9ibGFzdCBy6XM7T25lZ2EgOiAxIDogOC4zOTk5OTk2CitLb21pO1Z1a3R5bHNraXkgOiAxIDogOC4xOTk5OTk4CitLYXJlbGlhO01lZHZlemh5ZWdvcnNraXkgOiAxIDogMTMzNzQuMworS2FyZWxpYTtTZWdlemhhIDogMSA6IDUuMDk5OTk5OQorS29taTtUcm9pdHNrby1QZWNob3Jza2l5IDogMSA6IDM5MTM4LjE5OQorQXJraGFuZ2Vsc2th72Egb2JsYXN0IHLpcztWaW5vZ3JhZG92c2tpeSA6IDEgOiAxMjUzOC41CitLb21pO1Nvc25vZ29yc2sgOiAxIDogMS4wCitBcmtoYW5nZWxza2HvYSBvYmxhc3QgculzO1ZlcmtobmV0b3llbXNraXkgOiAxIDogMjAxNjIuODAxCitLYXJlbGlhO1N1b3lhcnZza2l5IDogMSA6IDEzNjI4LjEKK0thcmVsaWE7S29uZG9wb3poc2tpeSA6IDEgOiA2NjgyLjIwMDIKK0tvbWk7S29ydGtlcm9zc2tpeSA6IDEgOiAxOTcyNi4xOTkKK0Fya2hhbmdlbHNrYe9hIG9ibGFzdCBy6XM7TGVuc2tpeSA6IDEgOiA5MDYwLjkwMDQKK0thcmVsaWE7UHVkb3poc2tpeSA6IDEgOiAxMzEwMS4xCitLb21pO1VzdC1WeW1za2l5IDogMSA6IDQ2NDguMzk5OQorS29taTtVc3QtS3Vsb21za2l5IDogMSA6IDI2NjM2LjY5OQorQXJraGFuZ2Vsc2th72Egb2JsYXN0IHLpcztTaGVua3Vyc2tpeSA6IDEgOiAxMDc4MC45CitBcmtoYW5nZWxza2HvYSBvYmxhc3QgculzO055YW5kb21za2l5IDogMSA6IDgwMTguNzAwMgorQXJraGFuZ2Vsc2th72Egb2JsYXN0IHLpcztLcmFzbm9ib3Jza2l5IDogMSA6IDg4MjkuOTAwNAorS2FyZWxpYTtLb25kb3BvZ2EgOiAxIDogNS4xOTk5OTk4CitLYXJlbGlhO1NvcnRhdmFsYSA6IDEgOiAyMDc0LjAKK0tvbWk7U3lrdHl2ZGluc2tpeSA6IDEgOiA3MjY3LjM5OTkKK0Fya2hhbmdlbHNrYe9hIG9ibGFzdCBy6XM7S2FyZ2Fwb2xza2l5IDogMSA6IDk1MjIuNTk5NgorS2FyZWxpYTtQcnlhemhpbnNraXkgOiAxIDogNjM1OC44OTk5CitLYXJlbGlhO1ByaW9uZXpoc2tpeSA6IDEgOiAzNzk0LjMKK0Fya2hhbmdlbHNrYe9hIG9ibGFzdCBy6XM7VmVsc2tpeSA6IDEgOiAxMDA2My41CitLYXJlbGlhO1BpdGt5YXJhbnRza2l5IDogMSA6IDEzODQuNQorQXJraGFuZ2Vsc2th72Egb2JsYXN0IHLpcztVc3R5YW5za2l5IDogMSA6IDEyMTk4LjMKK0Fya2hhbmdlbHNrYe9hIG9ibGFzdCBy6XM7S290bGFzc2tpeSA6IDEgOiA4NTcxLjI5OTgKK0tvbWk7U3lrdHl2a3ZhciA6IDEgOiA2NjkuNzk5OTkKK0thcmVsaWE7UGV0cm96YXZvZHNrIDogMSA6IDc2LjQwMDAwMgorS2FyZWxpYTtMYWtoZGVucG9raHNraXkgOiAxIDogMjEwMi4zOTk5CitBcmtoYW5nZWxza2HvYSBvYmxhc3QgculzO1ZpbGVnb2Rza2l5IDogMSA6IDY0MTUuMjk5OAorS2FyZWxpYTtQeXRraWFyYW50YSA6IDEgOiAzLjAKK1ZvbG9nb2Rza2HvYSBvYmxhc3Q7Vnl0ZWdvcnNraXkgOiAxIDogMTM3NDMuMQorS29taTtTeXNvbHNraXkgOiAxIDogNjI0OC4wCitLYXJlbGlhO09sb25ldHNraXkgOiAxIDogMzk5MS4zCitBcmtoYW5nZWxza2HvYSBvYmxhc3QgculzO0tvbm9zaHNraXkgOiAxIDogOTU0OC4wOTk2CitBcmtoYW5nZWxza2HvYSBvYmxhc3QgculzO0tvcnlhemhtYSA6IDEgOiA3LjQwMDAwMDEKK0Fya2hhbmdlbHNrYe9hIG9ibGFzdCBy6XM7S290bGFzIDogMSA6IDEwLjIKK1ZvbG9nb2Rza2HvYSBvYmxhc3Q7VmVsaWtvdXN0eXVnc2tpeSA6IDEgOiA4MDI5LjI5OTgKK0tvbWk7UHJpbHV6c2tpeSA6IDEgOiAxMzc5NC4yCitWb2xvZ29kc2th72Egb2JsYXN0O1Rhcm5vZ3NraXkgOiAxIDogNTUxNC4yOTk4CitLb21pO0tveWdvcm9kc2tpeSA6IDEgOiAxMDI2NC4zCitWb2xvZ29kc2th72Egb2JsYXN0O055dWtzZW5za2l5IDogMSA6IDUwMzguMzk5OQorVm9sb2dvZHNrYe9hIG9ibGFzdDtWZXJraG92YXpoc2tpeSA6IDEgOiA0NDI3LjcwMDIKK1ZvbG9nb2Rza2HvYSBvYmxhc3Q7S2lyaWxsb3Zza2l5IDogMSA6IDUyODkuODk5OQorVm9sb2dvZHNrYe9hIG9ibGFzdDtWZWxpa2l5IFVzdHl1ZyA6IDEgOiAxMS43CitWb2xvZ29kc2th72Egb2JsYXN0O1ZvemhlZ29kc2tpeSA6IDEgOiA1NDg0LjUKK1ZvbG9nb2Rza2HvYSBvYmxhc3Q7VmFzaGtpbnNraXkgOiAxIDogMzEyMi4zCitWb2xvZ29kc2th72Egb2JsYXN0O0JlbG96ZXJza2l5IDogMSA6IDYxMTMuMTAwMQorVm9sb2dvZHNrYe9hIG9ibGFzdDtCYWJheWV2c2tpeSA6IDEgOiA5MTI4LjA5OTYKK1ZvbG9nb2Rza2HvYSBvYmxhc3Q7S2ljaG1lbmdza28gR29yb2RldHNraXkgOiAxIDogNzQzMS44OTk5CitWb2xvZ29kc2th72Egb2JsYXN0O0toYXJvdnNraXkgOiAxIDogMzU0Ny44OTk5CitWb2xvZ29kc2th72Egb2JsYXN0O1RvdGVtc2tpeSA6IDEgOiA3ODU2Ljg5OTkKK1ZvbG9nb2Rza2HvYSBvYmxhc3Q7U3lhbXpoZW5za2l5IDogMSA6IDM4OTMuMgorVm9sb2dvZHNrYe9hIG9ibGFzdDtVY3QtS3ViaW5za2l5IDogMSA6IDI3MDguNworVm9sb2dvZHNrYe9hIG9ibGFzdDtCYWJ1c2hraW5za2l5IDogMSA6IDczODAuMzk5OQorVm9sb2dvZHNrYe9hIG9ibGFzdDtOaWtvbHNraXkgOiAxIDogNzAzNC43OTk4CitWb2xvZ29kc2th72Egb2JsYXN0O1ZvbG9nb2Rza2l5IDogMSA6IDQ5MDMuNQorVm9sb2dvZHNrYe9hIG9ibGFzdDtTb2tvbHNraXkgOiAxIDogMzk4OC4wCitWb2xvZ29kc2th72Egb2JsYXN0O0thZHV5c2tpeSA6IDEgOiAzMzQ5LjYwMDEKK1ZvbG9nb2Rza2HvYSBvYmxhc3Q7Q2hlcmVwb3ZldHNraXkgOiAxIDogNDg1Ni4yOTk4CitWb2xvZ29kc2th72Egb2JsYXN0O1NoZWtzbmluc2tpeSA6IDEgOiAyNDY4LjIKK1ZvbG9nb2Rza2HvYSBvYmxhc3Q7TWV6aGR1cmVjaGVuc2tpeSA6IDEgOiAzNzA1LjcKK1ZvbG9nb2Rza2HvYSBvYmxhc3Q7U29rb2wgOiAxIDogNy41CitWb2xvZ29kc2th72Egb2JsYXN0O0NoYWdvZGVzY2hlbnNraXkgOiAxIDogMjMwNy43CitWb2xvZ29kc2th72Egb2JsYXN0O1ZvbG9nZGEgOiAxIDogMjQuNAorVm9sb2dvZHNrYe9hIG9ibGFzdDtVc3R5dXpoZW5za2l5IDogMSA6IDM2ODUuNjAwMQorVm9sb2dvZHNrYe9hIG9ibGFzdDtDaGVyZXBvdmV0eiA6IDEgOiAxLjAKK1ZvbG9nb2Rza2HvYSBvYmxhc3Q7R3J5YXpvdmV0c2tpeSA6IDEgOiA0NTA3LjM5OTkKK1JVLVVOSy0yODI3IDogMSA6IDIyOTg0LjgwMQorUlUtVU5LLTI4MjggOiAxIDogMjI5ODQuODAxCitUYW1ib3Zza2HvYSBvYmxhc3Q7TW9yc2hhbnNraXkgOiAxIDogMjc1NS44OTk5CitMaXBldHNrYe9hIG9ibGFzdDtDaGFwbHlnaW5za2l5IDogMSA6IDE2MjguMworTGlwZXRza2HvYSBvYmxhc3Q7RGFua292c2tpeSA6IDEgOiAxNzUyLjgKK1RhbWJvdnNrYe9hIG9ibGFzdDtTdGFyb3l1cnlldnNraXkgOiAxIDogMTE2NC40CitUYW1ib3Zza2HvYSBvYmxhc3Q7U29zbm92c2tpeSA6IDEgOiAyMTIxLjg5OTkKK1RhbWJvdnNrYe9hIG9ibGFzdDtNb3JzaGFuc2sgOiAxIDogMzAuNzAwMDAxCitMaXBldHNrYe9hIG9ibGFzdDtMZXYgLVRvbHN0b3Zza2l5IDogMSA6IDg1Ni4wOTk5OAorVGFtYm92c2th72Egb2JsYXN0O1BlcnZvbWF5c2tpeSA6IDEgOiA5NDIuNzk5OTkKK1RhbWJvdnNrYe9hIG9ibGFzdDtQaWNoYXlldnNraXkgOiAxIDogMTE4My4yCitMaXBldHNrYe9hIG9ibGFzdDtEYW5rb3YgOiAxIDogMS4wCitUYW1ib3Zza2HvYSBvYmxhc3Q7TWljaHVyaW5za2l5IDogMSA6IDE1MjYuOQorVGFtYm92c2th72Egb2JsYXN0O05pa2lmb3JvdnNraXkgOiAxIDogMTIxOS45CitMaXBldHNrYe9hIG9ibGFzdDtMZWJlZHlhbnNraXkgOiAxIDogMTU0NC42CitUYW1ib3Zza2HvYSBvYmxhc3Q7Qm9uZGFyc2tpeSA6IDEgOiAxMDgzLjYKK1RhbWJvdnNrYe9hIG9ibGFzdDtHYXZyaWxvdnNraXkgOiAxIDogMTA3MC43CitUYW1ib3Zza2HvYSBvYmxhc3Q7VGFtYm92c2tpeSA6IDEgOiAyNTgyLjgKK0xpcGV0c2th72Egb2JsYXN0O0tyYXNuaW5za2l5IDogMSA6IDk3MC43OTk5OQorTGlwZXRza2HvYSBvYmxhc3Q7RG9icm92c2tpeSA6IDEgOiAxMTE3LjUKK0xpcGV0c2th72Egb2JsYXN0O1N0YW5vdmx5YW5za2l5IDogMSA6IDEyODguNAorVGFtYm92c2th72Egb2JsYXN0O01pY2h1cmluc2sgOiAxIDogMTAyLjIKK1RhbWJvdnNrYe9hIG9ibGFzdDtLaXJzYW5vdnNraXkgOiAxIDogMTE1OS4zCitUYW1ib3Zza2HvYSBvYmxhc3Q7UmFzc2them92c2tpeSA6IDEgOiAxOTUwLjIKK0xpcGV0c2th72Egb2JsYXN0O0l6bWFsa292c2tpeSA6IDEgOiAxMzE4LjkKK1RhbWJvdnNrYe9hIG9ibGFzdDtVbWV0c2tpeSA6IDEgOiAxMjc5LjYKK0xpcGV0c2th72Egb2JsYXN0O0xpcGV0c2tpeSA6IDEgOiAxNDQ3LjQKK1RhbWJvdnNrYe9hIG9ibGFzdDtQZXRyb3Zza2l5IDogMSA6IDE4MzguMworTGlwZXRza2HvYSBvYmxhc3Q7WmFkb25za2l5IDogMSA6IDE2MDAuOQorTGlwZXRza2HvYSBvYmxhc3Q7WWVsZXRza2l5IDogMSA6IDExNDAuNworVGFtYm92c2th72Egb2JsYXN0O1RhbWJvdiA6IDEgOiA5LjUKK0xpcGV0c2th72Egb2JsYXN0O0xpcGV0c2sgOiAxIDogMTk0Ljg5OTk5CitMaXBldHNrYe9hIG9ibGFzdDtHcnlhemluc2tpeSA6IDEgOiAxNjM5LjQKK1RhbWJvdnNrYe9hIG9ibGFzdDtSYXNza2F6b3ZvIDogMSA6IDM0LjkwMDAwMgorVGFtYm92c2th72Egb2JsYXN0O0tpcnNhbm92byA6IDEgOiA5LjAKK0xpcGV0c2th72Egb2JsYXN0O0VsZXR6IDogMSA6IDQxLjQwMDAwMgorVGFtYm92c2th72Egb2JsYXN0O0tvdG92c2sgOiAxIDogMjIuNQorVGFtYm92c2th72Egb2JsYXN0O1puYW1lbnNraXkgOiAxIDogMTIzMS45CitUYW1ib3Zza2HvYSBvYmxhc3Q7SW56aGF2aW5za2l5IDogMSA6IDE5MTIuNQorTGlwZXRza2HvYSBvYmxhc3Q7R3J5YXp5IDogMSA6IDEuMQorTGlwZXRza2HvYSBvYmxhc3Q7RG9sZ29ydWtvdnNraXkgOiAxIDogOTk4LjU5OTk4CitMaXBldHNrYe9hIG9ibGFzdDtEb2JyaW5za2l5IDogMSA6IDE2NTUuMQorVGFtYm92c2th72Egb2JsYXN0O01vcmRvdnNraXkgOiAxIDogMTgwOC4yCitUYW1ib3Zza2HvYSBvYmxhc3Q7U2FtcHVyc2tpeSA6IDEgOiA5ODYuNzk5OTkKK1RhbWJvdnNrYe9hIG9ibGFzdDtSemhha3NpbnNraXkgOiAxIDogMTE3Mi4wCitLb3Vyc2th72Egb2JsYXN0O1poZWxlem5vZ29yc2tpeSA6IDEgOiA4NTcuNzk5OTkKK0tvdXJza2HvYSBvYmxhc3Q7UG9ueXJvdnNraXkgOiAxIDogODY3LjUKK0tvdXJza2HvYSBvYmxhc3Q7RG1pdHJpeWV2c2tpeSA6IDEgOiAxNDU4LjgKK0xpcGV0c2th72Egb2JsYXN0O1VzbWFuc2tpeSA6IDEgOiAxODU2LjEKK0xpcGV0c2th72Egb2JsYXN0O0tobGV2ZW5za2l5IDogMSA6IDc3MS45MDAwMgorS291cnNrYe9hIG9ibGFzdDtGYXRlemhza2l5IDogMSA6IDE1NjUuNAorUlUtVU5LLTI4MjkgOiAxIDogOS41CitMaXBldHNrYe9hIG9ibGFzdDtUZXJidW5za2l5IDogMSA6IDEyNTAuMAorVGFtYm92c2th72Egb2JsYXN0O1Rva2FyZXZza2l5IDogMSA6IDEyNjYuOAorTGlwZXRza2HvYSBvYmxhc3Q7Vm9sb3Zza2l5IDogMSA6IDc4NC45MDAwMgorS291cnNrYe9hIG9ibGFzdDtab2xvdHVraGluc2tpeSA6IDEgOiAxMTI3LjQKK1RhbWJvdnNrYe9hIG9ibGFzdDtVdmFyb3Zza2l5IDogMSA6IDExNTIuMAorS291cnNrYe9hIG9ibGFzdDtTY2hpZ3JvdnNraXkgOiAxIDogMTQzMC40CitWb3JvbmVqc2th72Egb2JsYXN0O1JhbW9uc2tpeSA6IDEgOiAxMjE4LjAKK1RhbWJvdnNrYe9hIG9ibGFzdDtNdWNoa2Fwc2tpeSA6IDEgOiAxMTM2LjYKK1Zvcm9uZWpza2HvYSBvYmxhc3Q7U2VtaWx1a3NraXkgOiAxIDogMTYzNi4yCitUYW1ib3Zza2HvYSBvYmxhc3Q7WmhlcmRldnNraXkgOiAxIDogMTg1MC4zCitLb3Vyc2th72Egb2JsYXN0O0NoZXJlbWlzaW5vdnNraXkgOiAxIDogODAwLjA5OTk4CitLb3Vyc2th72Egb2JsYXN0O0tob211dG92c2tpeSA6IDEgOiAxMTMzLjgKK1RhbWJvdnNrYe9hIG9ibGFzdDtVdmFyb3ZvIDogMSA6IDQwLjkwMDAwMgorS291cnNrYe9hIG9ibGFzdDtLb255c2hldnNraXkgOiAxIDogMTExNC42CitLb3Vyc2th72Egb2JsYXN0O1NvdmV0c2tpeSA6IDEgOiAxMjk3LjQKK0tvdXJza2HvYSBvYmxhc3Q7S2FzdG9yZW5za2l5IDogMSA6IDEzNzguNQorVm9yb25lanNrYe9hIG9ibGFzdDtWZXJraG5la2hhdnNraXkgOiAxIDogMTQ2OC4xCitWb3JvbmVqc2th72Egb2JsYXN0O0VydGlsc2tpeSA6IDEgOiAxNDQzLjIKK0tvdXJza2HvYSBvYmxhc3Q7S3Vyc2tpeSA6IDEgOiAxNTMwLjcKK0tvdXJza2HvYSBvYmxhc3Q7VHNjaGlncnkgOiAxIDogMTkuOQorS291cnNrYe9hIG9ibGFzdDtLdXJjaGF0b3Zza2l5IDogMSA6IDU5My4yMDAwMQorVm9yb25lanNrYe9hIG9ibGFzdDtWb3JvbmV6aCA6IDEgOiA0NzEuMjk5OTkKK0tvdXJza2HvYSBvYmxhc3Q7T2t0eWFicnNraXkgOiAxIDogNTQ5Ljc5OTk5CitWb3JvbmVqc2th72Egb2JsYXN0O05vdm91c21hbnNraXkgOiAxIDogMTE1NC4zCitWb3JvbmVqc2th72Egb2JsYXN0O1Bhbmluc2tpeSA6IDEgOiAxNDEzLjUKK0tvdXJza2HvYSBvYmxhc3Q7TCdnb3Zza3kgOiAxIDogMTE2MS42CitLb3Vyc2th72Egb2JsYXN0O0t1cnNrIDogMSA6IDE0OS43CitLb3Vyc2th72Egb2JsYXN0O1RpbXNraXkgOiAxIDogODA0LjUKK0tvdXJza2HvYSBvYmxhc3Q7Unlsc2tpeSA6IDEgOiAxNTM3LjMKK1Zvcm9uZWpza2HvYSBvYmxhc3Q7Tml6aG5lZGV2aXRza2l5IDogMSA6IDE0MjMuOAorVm9yb25lanNrYe9hIG9ibGFzdDtUZXJub3Zza2l5IDogMSA6IDExNjcuMgorVm9yb25lanNrYe9hIG9ibGFzdDtHcmliYW5vdnNraXkgOiAxIDogMTg0Mi4wCitWb3JvbmVqc2th72Egb2JsYXN0O0Jvcmlzb2dsZWJza2l5IDogMSA6IDE0ODIuOAorVm9yb25lanNrYe9hIG9ibGFzdDtLaG9raG9sc2tpeSA6IDEgOiAxNTIzLjcKK0tvdXJza2HvYSBvYmxhc3Q7TGdvdiA6IDEgOiAyMi45CitWb3JvbmVqc2th72Egb2JsYXN0O0Fubmluc2tpeSA6IDEgOiAyMDkzLjM5OTkKK0tvdXJza2HvYSBvYmxhc3Q7S3VyY2hhdG92IDogMSA6IDIuNQorS291cnNrYe9hIG9ibGFzdDtTb2xudHNldnNraXkgOiAxIDogMTAxOS4xCitLb3Vyc2th72Egb2JsYXN0O0dvcnNoZWNoZW5za2l5IDogMSA6IDEyODIuNgorS291cnNrYe9hIG9ibGFzdDtNZWR2ZW5za2l5IDogMSA6IDkyMS41OTk5OAorS291cnNrYe9hIG9ibGFzdDtNYW50dXJvdnNraXkgOiAxIDogNzg5LjQwMDAyCitLb3Vyc2th72Egb2JsYXN0O0JvbHNoZXNvbGRhdHNraXkgOiAxIDogNzM1LjkwMDAyCitLb3Vyc2th72Egb2JsYXN0O0tvcmVuZXZza2l5IDogMSA6IDcwMS40MDAwMgorS291cnNrYe9hIG9ibGFzdDtHbHVzaGtvdnNraXkgOiAxIDogODY5LjAKK1Zvcm9uZWpza2HvYSBvYmxhc3Q7S2FzaGlyc2tpeSA6IDEgOiAxMDI0LjUKK1Zvcm9uZWpza2HvYSBvYmxhc3Q7UG92b3JpbnNraXkgOiAxIDogOTg4LjI5OTk5CitLb3Vyc2th72Egb2JsYXN0O1N1ZHpoYW5za2l5IDogMSA6IDg2MC43OTk5OQorQmVsZ29yb2Rza2HvYSBvYmxhc3Q7R3Via2luc2tpeSA6IDEgOiAxNTg2LjEKK0JlbGdvcm9kc2th72Egb2JsYXN0O1N0YXJvb3Nrb2xza2l5IDogMSA6IDE0NTguNworVm9yb25lanNrYe9hIG9ibGFzdDtOb3Zva2hvcGVyc2tpeSA6IDEgOiAyMjk0LjgKK1Zvcm9uZWpza2HvYSBvYmxhc3Q7Qm9yaXNvZ2xlYnNrIDogMSA6IDU1LjAKK1Zvcm9uZWpza2HvYSBvYmxhc3Q7Qm9icm92c2tpeSA6IDEgOiAyMjY5LjAKK0tvdXJza2HvYSBvYmxhc3Q7T2JveWFuc2tpeSA6IDEgOiA4MjMuMjk5OTkKK0tvdXJza2HvYSBvYmxhc3Q7UHJpc3RlbnNraXkgOiAxIDogNzY0LjAKK1Zvcm9uZWpza2HvYSBvYmxhc3Q7VGFsb3Zza2l5IDogMSA6IDE3NzIuNworQmVsZ29yb2Rza2HvYSBvYmxhc3Q7U3RhcnlpIE9za29sIDogMSA6IDIuMAorVm9yb25lanNrYe9hIG9ibGFzdDtSZXBpeWV2a2EgOiAxIDogODU4LjA5OTk4CitSVS1VTkstMjgzMCA6IDEgOiAxLjAKK0JlbGdvcm9kc2th72Egb2JsYXN0O0d1YmtpbiA6IDEgOiAxLjAKK1Zvcm9uZWpza2HvYSBvYmxhc3Q7TGlza2luc2tpeSA6IDEgOiAxODI1LjIKK0tvdXJza2HvYSBvYmxhc3Q7QmVsb3Zza2l5IDogMSA6IDg1OS45MDAwMgorVm9yb25lanNrYe9hIG9ibGFzdDtPc3Ryb2dvemhza2l5IDogMSA6IDE4NDMuMAorQmVsZ29yb2Rza2HvYSBvYmxhc3Q7UHJva2hvcm92c2tpeSA6IDEgOiAxNDYxLjUKK1Zvcm9uZWpza2HvYSBvYmxhc3Q7UG92b3Jpbm8gOiAxIDogMS4wCitCZWxnb3JvZHNrYe9hIG9ibGFzdDtJdm55YW5za2l5IDogMSA6IDk1Ny41CitCZWxnb3JvZHNrYe9hIG9ibGFzdDtDaGVybnlhbnNraXkgOiAxIDogMTM3NS42CitSVS1VTkstMjgzMSA6IDEgOiAxMjk4LjcKK1Zvcm9uZWpza2HvYSBvYmxhc3Q7TGlza2kgOiAxIDogNjguNTk5OTk4CitCZWxnb3JvZHNrYe9hIG9ibGFzdDtSYWtpdHlhbnNraXkgOiAxIDogODM1LjU5OTk4CitWb3JvbmVqc2th72Egb2JsYXN0O0J1dHVybGlub3Zza2l5IDogMSA6IDIwMDEuMAorQmVsZ29yb2Rza2HvYSBvYmxhc3Q7S29yb2NoYW5za2l5IDogMSA6IDE0NTAuMgorQmVsZ29yb2Rza2HvYSBvYmxhc3Q7S3Jhc25veWFydXpzaHNreSA6IDEgOiA2MjYuMjAwMDEKK0JlbGdvcm9kc2th72Egb2JsYXN0O1lha292bGV2c2tpeSA6IDEgOiAxMTU2LjUKK0JlbGdvcm9kc2th72Egb2JsYXN0O05vdm9vc2tvbHNraXkgOiAxIDogMTYxMi4xCitWb3JvbmVqc2th72Egb2JsYXN0O09zdHJvZ296aHNrIDogMSA6IDI5LjEKK0JlbGdvcm9kc2th72Egb2JsYXN0O0tyYXNub2d2YXJkZXlza2l5IDogMSA6IDE1NjAuMQorVm9yb25lanNrYe9hIG9ibGFzdDtWb3JvYnlvdnNraXkgOiAxIDogMTE4NS44CitWb3JvbmVqc2th72Egb2JsYXN0O0thbWVuc2tpeSA6IDEgOiA5MTQuNDAwMDIKK1Zvcm9uZWpza2HvYSBvYmxhc3Q7UGF2bG92c2tpeSA6IDEgOiAxODc4LjEKK0JlbGdvcm9kc2th72Egb2JsYXN0O0JlbGdvcm9kc2tpeSA6IDEgOiAxMzIxLjEKK0JlbGdvcm9kc2th72Egb2JsYXN0O0Jvcmlzb3Zza2l5IDogMSA6IDc0MC4yOTk5OQorVm9yb25lanNrYe9hIG9ibGFzdDtQb2Rnb3JlbnNraXkgOiAxIDogMTYzNi4wCitCZWxnb3JvZHNrYe9hIG9ibGFzdDtBbGVrc2V5ZXZza2l5IDogMSA6IDE2OTAuNQorQmVsZ29yb2Rza2HvYSBvYmxhc3Q7U2hlYmVraW5za2l5IDogMSA6IDE3MTUuMAorQmVsZ29yb2Rza2HvYSBvYmxhc3Q7R3JhaXZvcm9uc2tpeSA6IDEgOiA2OTEuNTk5OTgKK1Zvcm9uZWpza2HvYSBvYmxhc3Q7S2FsYWNoZXlldnNraXkgOiAxIDogMjE0OS4zCitCZWxnb3JvZHNrYe9hIG9ibGFzdDtBbGVrc2VldmthIDogMSA6IDEuNgorQmVsZ29yb2Rza2HvYSBvYmxhc3Q7QmVsZ29yb2QgOiAxIDogMTI2LjMKK0JlbGdvcm9kc2th72Egb2JsYXN0O1ZvbG9rb25vdnNraXkgOiAxIDogMTE4Mi42CitWb3JvbmVqc2th72Egb2JsYXN0O09sa2hvdmF0c2tpeSA6IDEgOiA3MzYuNzk5OTkKK1Zvcm9uZWpza2HvYSBvYmxhc3Q7VmVya2huZW1hbW9uc2tpeSA6IDEgOiAxMjgwLjAKK0JlbGdvcm9kc2th72Egb2JsYXN0O1NoZWJla2lubyA6IDEgOiAxLjAKK0JlbGdvcm9kc2th72Egb2JsYXN0O1ZhbHV5c2tpeSA6IDEgOiAxNjAzLjEKK1Zvcm9uZWpza2HvYSBvYmxhc3Q7Um9zc29zaGFuc2tpeSA6IDEgOiAyMjI1LjYwMDEKK0JlbGdvcm9kc2th72Egb2JsYXN0O1ZleWRlbGV2c2tpeSA6IDEgOiAxMDc3LjQKK1Zvcm9uZWpza2HvYSBvYmxhc3Q7UGV0cm9wYXZsb3Zza2l5IDogMSA6IDE1NTMuMworQmVsZ29yb2Rza2HvYSBvYmxhc3Q7Um92ZW5za2l5IDogMSA6IDEyMTkuMworVm9yb25lanNrYe9hIG9ibGFzdDtSb3Nzb3NoIDogMSA6IDI1LjUKK0JlbGdvcm9kc2th72Egb2JsYXN0O1ZhbHVpa3kgOiAxIDogMS4wCitWb3JvbmVqc2th72Egb2JsYXN0O0JvZ3VjaGFyc2tpeSA6IDEgOiAyMDA0LjcKK1Zvcm9uZWpza2HvYSBvYmxhc3Q7S2FudGVtaXJvdnNraXkgOiAxIDogMjM0My44CitSVS1VTkstMjgzMiA6IDEgOiA5LjUKK1JVLVVOSy0yODMzIDogMSA6IDEuMAorUlUtVU5LLTI4MzQgOiAxIDogMTI5OC43CitZYWtvdXRpYS1TYWhhIHJlc3BvdWJsaWthO0FuYWJhcnNraXkgOiAxIDogNTM3MjcuMzk4CitZYWtvdXRpYS1TYWhhIHJlc3BvdWJsaWthO0J1bHVuc2tpeSA6IDEgOiAxNzY5ODIuNDEKK1lha291dGlhLVNhaGEgcmVzcG91Ymxpa2E7VXN0LVlhbnNraXkgOiAxIDogMTE4NjY3LjcKK1lha291dGlhLVNhaGEgcmVzcG91Ymxpa2E7QWxsYWlraG92c2tpeSA6IDEgOiAxMDE5NjIuMAorWWFrb3V0aWEtU2FoYSByZXNwb3VibGlrYTtPbGVuZWtza2l5IDogMSA6IDMxNzU0Mi42OQorWWFrb3V0aWEtU2FoYSByZXNwb3VibGlrYTtOaXpobmVrb2x5bXNraXkgOiAxIDogODQ0MjMuNQorVGNob3Vrb3Rza2kgbmF0LiBva3JvdWc7Q2hhdW5za2l5IDogMSA6IDU1OTIyLjYwMgorWWFrb3V0aWEtU2FoYSByZXNwb3VibGlrYTtWZXJraG95YW5za2l5IDogMSA6IDExOTQ3NC4xCitUY2hvdWtvdHNraSBuYXQuIG9rcm91ZztTaG1pZHRvdnNraXkgOiAxIDogNjQ0NjkuMTAyCitZYWtvdXRpYS1TYWhhIHJlc3BvdWJsaWthO1NyZWRuZWtvbHltc2tpeSA6IDEgOiAxMTk2MDAuMQorVGNob3Vrb3Rza2kgbmF0LiBva3JvdWc7QmlsaWJpbnNraXkgOiAxIDogMTczMDkwLjcKK1JVLVVOSy0yODM1IDogMSA6IDgyMjU1Ljg5OAorWWFrb3V0aWEtU2FoYSByZXNwb3VibGlrYTtBYnlpc2tpeSA6IDEgOiA2NzMyMC42MDIKK1lha291dGlhLVNhaGEgcmVzcG91Ymxpa2E7WmhpZ2Fuc2tpeSA6IDEgOiAxNDUxMzkuOTEKK1RjaG91a290c2tpIG5hdC4gb2tyb3VnO0l1bHRpbnNraXkgOiAxIDogNzI1NjcuMjAzCitUY2hvdWtvdHNraSBuYXQuIG9rcm91ZztBbmFkeXJza2l5IDogMSA6IDI0NjE1NC4wOQorWWFrb3V0aWEtU2FoYSByZXNwb3VibGlrYTtNb21za2l5IDogMSA6IDEwOTM2Ny42CitZYWtvdXRpYS1TYWhhIHJlc3BvdWJsaWthO1ZlcmtoZWtvbHltc2tpeSA6IDEgOiA3MTM2Mi42MDIKK1RjaG91a290c2tpIG5hdC4gb2tyb3VnO0NodWtvdHNraXkgOiAxIDogMzE3NTUuOQorWWFrb3V0aWEtU2FoYSByZXNwb3VibGlrYTtWaWx5dXlza2l5IDogMSA6IDU1MjU2LjgwMQorWWFrb3V0aWEtU2FoYSByZXNwb3VibGlrYTtNaXJuaW5za2l5IDogMSA6IDE2ODI1NS41CitUY2hvdWtvdHNraSBuYXQuIG9rcm91ZztQcm92aWRlbnNraXkgOiAxIDogMjU5NTMuNAorWWFrb3V0aWEtU2FoYSByZXNwb3VibGlrYTtWZXJraG5ldmlseXVpc2tpeSA6IDEgOiA0MTMwMC44OTgKK1lha291dGlhLVNhaGEgcmVzcG91Ymxpa2E7S29ieWF5c2tpeSA6IDEgOiAxMDM1NjguMworTWFnYWRhbnNrYe9hIG9ibGFzdCBy6XNpZDtTcmVkbmVrYW5za2l5IDogMSA6IDkwNjUxLjEwMgorWWFrb3V0aWEtU2FoYSByZXNwb3VibGlrYTtUb21wb25za2l5IDogMSA6IDEzMDQ2NS41CitZYWtvdXRpYS1TYWhhIHJlc3BvdWJsaWthO0xlbmluc2tpeSA6IDEgOiA1MTQ2My4zMDEKK01hZ2FkYW5za2HvYSBvYmxhc3QgculzaWQ7U2V2ZXJvLUV2ZW5za2l5IDogMSA6IDEwMDU3NS4xCitZYWtvdXRpYS1TYWhhIHJlc3BvdWJsaWthO095bXlha29uc2tpeSA6IDEgOiA4ODkwNy43OTcKK01hZ2FkYW5za2HvYSBvYmxhc3QgculzaWQ7T21zdWtjaGFuc2tpeSA6IDEgOiA2MTA2Ni44MDEKK0tvcmlha3NraSBuYXRpb25hbCBva3JvdWc7UGVuemhpbnNraXkgOiAxIDogMTE0NDkwLjgKK1RjaG91a290c2tpIG5hdC4gb2tyb3VnO0FuYWR5cicgOiAxIDogMTMuOQorTWFnYWRhbnNrYe9hIG9ibGFzdCBy6XNpZDtTdXN1bWFuc2tpeSA6IDEgOiA0Nzk5Mi44OTgKK1RjaG91a290c2tpIG5hdC4gb2tyb3VnO0JlcmluZ292c2tpeSA6IDEgOiAzOTYyMy42OTkKK1lha291dGlhLVNhaGEgcmVzcG91Ymxpa2E7U3VudGFyc2tpeSA6IDEgOiA1NjcwNS41CitZYWtvdXRpYS1TYWhhIHJlc3BvdWJsaWthO1VzdC1BbGRhbnNraXkgOiAxIDogMTgyOTkuNgorTWFnYWRhbnNrYe9hIG9ibGFzdCBy6XNpZDtZYWdvZG5pbnNraXkgOiAxIDogMjkwMzIuMAorWWFrb3V0aWEtU2FoYSByZXNwb3VibGlrYTtOYW1za2l5IDogMSA6IDExNjYyLjUKK1lha291dGlhLVNhaGEgcmVzcG91Ymxpa2E7VGF0dGluc2tpeSA6IDEgOiAxOTkxMi40CitZYWtvdXRpYS1TYWhhIHJlc3BvdWJsaWthO0dvcm55aSA6IDEgOiA0NDU4NC4xMDIKK1lha291dGlhLVNhaGEgcmVzcG91Ymxpa2E7VXN0LU1heXNraXkgOiAxIDogOTI3NzMuODk4CitLb3JpYWtza2kgbmF0aW9uYWwgb2tyb3VnO09seXV0b3Jza2l5IDogMSA6IDcyNzY0LjIwMworS2hhYmFyb3Zza2kga3Jh7yBy6XNpZHVlbDtPa2hvdHNraXkgOiAxIDogMTU2OTY2LjA5CitNYWdhZGFuc2th72Egb2JsYXN0IHLpc2lkO1RlbmtpbnNraXkgOiAxIDogMzU3ODIuODAxCitZYWtvdXRpYS1TYWhhIHJlc3BvdWJsaWthO01pcm55IDogMSA6IDEzLjMKK1lha291dGlhLVNhaGEgcmVzcG91Ymxpa2E7Q2h1cmFwY2hpbnNraXkgOiAxIDogMTA2NTguNQorWWFrb3V0aWEtU2FoYSByZXNwb3VibGlrYTtNZWdpbm8tS2FuZ2FsYXNza2l5IDogMSA6IDExNDU4LjQKK1lha291dGlhLVNhaGEgcmVzcG91Ymxpa2E7WWFrdXRzayA6IDEgOiAyODg3LjgKK01hZ2FkYW5za2HvYSBvYmxhc3QgculzaWQ7S2hhc3luc2tpeSA6IDEgOiAxOTE5MC4zMDEKK1lha291dGlhLVNhaGEgcmVzcG91Ymxpa2E7T3JkemhvbmlraWR6ZXZza2l5IDogMSA6IDI0NjI0LjE5OQorWWFrb3V0aWEtU2FoYSByZXNwb3VibGlrYTtPbGVrbWluc2tpeSA6IDEgOiAxNjE4MDYuMDkKK1lha291dGlhLVNhaGEgcmVzcG91Ymxpa2E7TGVuc2tpeSA6IDEgOiA3NDM1Mi41CitZYWtvdXRpYS1TYWhhIHJlc3BvdWJsaWthO0FtZ2luc2tpeSA6IDEgOiAyNzIxNC4xCitNYWdhZGFuc2th72Egb2JsYXN0IHLpc2lkO09sc2tpeSA6IDEgOiA0MjMzNi44MDEKK1lha291dGlhLVNhaGEgcmVzcG91Ymxpa2E7QWxkYW5za2l5IDogMSA6IDE1MjQ1OC44CitLb3JpYWtza2kgbmF0aW9uYWwgb2tyb3VnO0thcmFnaW5za2l5IDogMSA6IDM4MDk1LjYwMgorS29yaWFrc2tpIG5hdGlvbmFsIG9rcm91ZztUaWdpbHNraXkgOiAxIDogNjIzMjYuMTAyCitNYWdhZGFuc2th72Egb2JsYXN0IHLpc2lkO01hZ2FkYW4gOiAxIDogMTE5Ny4yCitLaGFiYXJvdnNraSBrcmHvIHLpc2lkdWVsO0F5YW5vLU1heXNraXkgOiAxIDogMTY1NjgwLjcKK1lha291dGlhLVNhaGEgcmVzcG91Ymxpa2E7TmVyaXVuZ3JpIDogMSA6IDkzODE3LjAKK0thbXRjaGF0c2th72Egb2JsYXN0IHLpc2k7VXN0LUthbWNoYXRza2l5IDogMSA6IDQxNzI1LjYwMgorQW1vdXJza2HvYSBvYmxhc3Q7VHluZGluc2tpeSA6IDEgOiA3MjAyNS4xMDIKK0thbXRjaGF0c2th72Egb2JsYXN0IHLpc2k7QnlzdHJpbnNraXkgOiAxIDogMjMzOTAuNAorS2FtdGNoYXRza2HvYSBvYmxhc3QgculzaTtNaWxrb3Zza2l5IDogMSA6IDIxNTEyLjEKK0thbXRjaGF0c2th72Egb2JsYXN0IHLpc2k7U29ib2xldnNraXkgOiAxIDogMjA2MTguNQorS2hhYmFyb3Zza2kga3Jh7yBy6XNpZHVlbDtUdWd1cm8tQ2h1bWlrYW5za2l5IDogMSA6IDkwOTU5LjI5NworQW1vdXJza2HvYSBvYmxhc3Q7WmV5c2tpeSA6IDEgOiA5OTI1Mi4xMDIKK0thbXRjaGF0c2th72Egb2JsYXN0IHLpc2k7QWxldXRza2l5IDogMSA6IDEyNTUuNworQW1vdXJza2HvYSBvYmxhc3Q7VHluZGEgOiAxIDogMTIuOAorS2FtdGNoYXRza2HvYSBvYmxhc3QgculzaTtZZWxpem92c2tpeSA6IDEgOiA0MTM1Ni4xOTkKK0Ftb3Vyc2th72Egb2JsYXN0O1Nrb3Zvcm9kaW5za2l5IDogMSA6IDE4NDM5LjYKK1Nha2hhbGluc2th72Egb2JsYXN0O09raGluc2tpeSA6IDEgOiAxNDE5Ni4zCitLaGFiYXJvdnNraSBrcmHvIHLpc2lkdWVsO05pa29sYXlldnNraXkgOiAxIDogMTUyNjcuMworQW1vdXJza2HvYSBvYmxhc3Q7TWFnZGFnYWNoaW5za2l5IDogMSA6IDE2MzMyLjIKK0Ftb3Vyc2th72Egb2JsYXN0O1NlbGVtZHpoaW5za2l5IDogMSA6IDQ2NzQ5LjEwMgorQW1vdXJza2HvYSBvYmxhc3Q7WmV5YSA6IDEgOiAxMC4xCitLYW10Y2hhdHNrYe9hIG9ibGFzdCBy6XNpO1VzdC1Cb2xzaGVyZXRza2l5IDogMSA6IDIwODk2LjEKK0toYWJhcm92c2tpIGtyYe8gculzaWR1ZWw7UG9saW55IE9zaXBlbmtvLiBpbWVuaSA6IDEgOiAzOTQ3Ni4wCitTYWtoYWxpbnNrYe9hIG9ibGFzdDtPa2hhIDogMSA6IDIuMworQW1vdXJza2HvYSBvYmxhc3Q7TWF6YW5vdnNraXkgOiAxIDogMjg5MzguMQorS2hhYmFyb3Zza2kga3Jh7yBy6XNpZHVlbDtVbGNoc2tpeSA6IDEgOiAzNTUzNC4xOTkKK0thbXRjaGF0c2th72Egb2JsYXN0IHLpc2k7RWxpem92byA6IDEgOiAyMS42CitLaGFiYXJvdnNraSBrcmHvIHLpc2lkdWVsO05pa29sYXlldnNrLU5hLUFtdXJlIDogMSA6IDE3LjYKK0thbXRjaGF0c2th72Egb2JsYXN0IHLpc2k7UGV0cm9wYXZsb3Zzay1LYW1jaGF0c2sgOiAxIDogNTAuOTAwMDAyCitBbW91cnNrYe9hIG9ibGFzdDtTaGltYW5vdnNraXkgOiAxIDogMTQ4NjkuOQorU2FraGFsaW5za2HvYSBvYmxhc3Q7Tm9nbGlrc2tpeSA6IDEgOiAxMDE2MC4xCitLaGFiYXJvdnNraSBrcmHvIHLpc2lkdWVsO1ZlcmtobmVidXJlaW5za2l5IDogMSA6IDY0MTQ5LjM5OAorS2hhYmFyb3Zza2kga3Jh7yBy6XNpZHVlbDtTb2xuZWNobnlpIDogMSA6IDMwODE2LjkKK0Ftb3Vyc2th72Egb2JsYXN0O1NoaW1hbm92c2sgOiAxIDogNy4xOTk5OTk4CitTYWtoYWxpbnNrYe9hIG9ibGFzdDtBbGV4YW5kcm92c2stU2FraGFsaW5za2l5IDogMSA6IDU3NDcuNjAwMQorQW1vdXJza2HvYSBvYmxhc3Q7U3ZvYm9kbmVuc2tpeSA6IDEgOiA3OTg1LjEwMDEKK1Nha2hhbGluc2th72Egb2JsYXN0O1R5bW92c2tpeSA6IDEgOiA2Nzg4LjYwMDEKK0toYWJhcm92c2tpIGtyYe8gculzaWR1ZWw7S29tc29tb2xza2l5IDogMSA6IDI1MTcyLjUKK0Ftb3Vyc2th72Egb2JsYXN0O1NlcnlzaGV2c2tpeSA6IDEgOiAzNTQwLjAKK0Ftb3Vyc2th72Egb2JsYXN0O1JvbW5lbnNraXkgOiAxIDogMTAxNTcuNAorQW1vdXJza2HvYSBvYmxhc3Q7U3ZvYm9kbnlpIDogMSA6IDEyLjMKK0Ftb3Vyc2th72Egb2JsYXN0O0JsYWdvdmVzY2hlbnNraXkgOiAxIDogMzI0MC42MDAxCitLaGFiYXJvdnNraSBrcmHvIHLpc2lkdWVsO1Zhbmluc2tpeSA6IDEgOiAyNjM4Ny4zMDEKK0Ftb3Vyc2th72Egb2JsYXN0O0JlbG9nb3Jza2l5IDogMSA6IDI4OTUuMgorQW1vdXJza2HvYSBvYmxhc3Q7QmVsb2dvcnNrIDogMSA6IDEwLjkKK1Nha2hhbGluc2th72Egb2JsYXN0O1NldmVyby1LdXJpbHNraXkgOiAxIDogMzk0Ljg5OTk5CitTYWtoYWxpbnNrYe9hIG9ibGFzdDtBbGVrcy4tU2FraGFsaW5za2l5IDogMSA6IDQuMTk5OTk5OAorQW1vdXJza2HvYSBvYmxhc3Q7SXZhbm92c2tpeSA6IDEgOiAyODgzLjgKK0Ftb3Vyc2th72Egb2JsYXN0O0J1cmV5c2tpeSA6IDEgOiA3MjgzLjg5OTkKK0toYWJhcm92c2tpIGtyYe8gculzaWR1ZWw7S29tc29tb2xzay1OYS1BbXVyZSA6IDEgOiA0NS45MDAwMDIKK0Ftb3Vyc2th72Egb2JsYXN0O09rdHlhYnJza2l5IDogMSA6IDMzNTQuMzk5OQorQW1vdXJza2HvYSBvYmxhc3Q7WmF2aXRpbnNraXkgOiAxIDogMjcxNy42MDAxCitLaGFiYXJvdnNraSBrcmHvIHLpc2lkdWVsO0toYWJhcm92c2tpeSA6IDEgOiAyMzA0Ni42CitLaGFiYXJvdnNraSBrcmHvIHLpc2lkdWVsO0FtdXJza2l5IDogMSA6IDE2NTMwLjY5OQorU2FraGFsaW5za2HvYSBvYmxhc3Q7U21pcm55a2hvdnNraXkgOiAxIDogODE2MS42MDAxCitBbW91cnNrYe9hIG9ibGFzdDtCbGFnb3Zlc2NoZW5zayA6IDEgOiAyOS40CitBbW91cnNrYe9hIG9ibGFzdDtUYW1ib3Zza2l5IDogMSA6IDI0MTEuMTAwMQorS2hhYmFyb3Zza2kga3Jh7yBy6XNpZHVlbDtBbXVyc2sgOiAxIDogMTMuNAorQW1vdXJza2HvYSBvYmxhc3Q7QXJraGFyaW5za2l5IDogMSA6IDE0MTY0LjAKK0Ftb3Vyc2th72Egb2JsYXN0O01pa2hheWxvdnNraXkgOiAxIDogMjg3Ni4wCitLaGFiYXJvdnNraSBrcmHvIHLpc2lkdWVsO05hbmF5c2tpeSA6IDEgOiAyNzIyMS4xCitBbW91cnNrYe9hIG9ibGFzdDtLb25zdGFudGlub3Zza2l5IDogMSA6IDIxOTAuNworU2FraGFsaW5za2HvYSBvYmxhc3Q7UG9yb25heXNraXkgOiAxIDogNjgzNi43MDAyCitBbW91cnNrYe9hIG9ibGFzdDtSYXljaGlraGluc2sgOiAxIDogMzgyLjcwMDAxCitTYWtoYWxpbnNrYe9hIG9ibGFzdDtVZ2xlZ29yc2tpeSA6IDEgOiA0ODA3LjYwMDEKK0V2cmXvc2th72Egb2JsYXN0O09ibHVjaGVuc2tpeSA6IDEgOiAxMjg5OC42CitTYWtoYWxpbnNrYe9hIG9ibGFzdDtQb3JvbmF5c2sgOiAxIDogMy41OTk5OTk5CitLaGFiYXJvdnNraSBrcmHvIHLpc2lkdWVsO1NvdmV0c2tvLUdhdmFuc2tpeSA6IDEgOiAxNTIyMS41CitTYWtoYWxpbnNrYe9hIG9ibGFzdDtNYWthcm92c2tpeSA6IDEgOiAxNjYwLjMKK1Nha2hhbGluc2th72Egb2JsYXN0O1VnbGVnb3JzayA6IDEgOiAyLjkwMDAwMDEKK0V2cmXvc2th72Egb2JsYXN0O0Jpcm9iaWR6aGFuc2tpeSA6IDEgOiA0MjM0LjI5OTgKK0toYWJhcm92c2tpIGtyYe8gculzaWR1ZWw7U292ZXRza2F5YSBHYXZhbiA6IDEgOiAxMy41CitFdnJl73NrYe9hIG9ibGFzdDtTbWlkb3ZpY2hza2l5IDogMSA6IDY2MTQuMjk5OAorS2hhYmFyb3Zza2kga3Jh7yBy6XNpZHVlbDtMYXpvLiBpbWVuaSA6IDEgOiAzMjAzNy40CitFdnJl73NrYe9hIG9ibGFzdDtCaXJvYmlkemhhbiA6IDEgOiAxOC42CitTYWtoYWxpbnNrYe9hIG9ibGFzdDtUb21hcmluc2tpeSA6IDEgOiAzODQ0LjM5OTkKK0V2cmXvc2th72Egb2JsYXN0O09rdHlhYnJza2l5IDogMSA6IDY3MDMuMAorS2hhYmFyb3Zza2kga3Jh7yBy6XNpZHVlbDtLaGFiYXJvdnNrIDogMSA6IDcxLjU5OTk5OAorRXZyZe9za2HvYSBvYmxhc3Q7TGVuaW5za2l5IDogMSA6IDYwMDkuODk5OQorUHJpbW9yc2tpIGtyYe87VGVybmV5c2tpeSA6IDEgOiAyNDYyMy4xOTkKK1Nha2hhbGluc2th72Egb2JsYXN0O0RvbGluc2tpeSA6IDEgOiAyMDQ5LjgKK0toYWJhcm92c2tpIGtyYe8gculzaWR1ZWw7VnlhemVtc2tpeSA6IDEgOiA0MzgwLjEwMDEKK1Nha2hhbGluc2th72Egb2JsYXN0O0tob2xtc2tpeSA6IDEgOiAyNTk0LjYwMDEKK1Nha2hhbGluc2th72Egb2JsYXN0O0RvbGluc2sgOiAxIDogMTEuNgorUHJpbW9yc2tpIGtyYe87UG96aGFyc2tpeSA6IDEgOiAyNDA3NS42OTkKK0toYWJhcm92c2tpIGtyYe8gculzaWR1ZWw7QmlraW5za2l5IDogMSA6IDI0OTUuNjAwMQorU2FraGFsaW5za2HvYSBvYmxhc3Q7WXV6aG5vLVNha2hhbGluc2sgOiAxIDogNjIzLjcwMDAxCitTYWtoYWxpbnNrYe9hIG9ibGFzdDtLdXJpbHNraXkgOiAxIDogMzUzLjYwMDAxCitTYWtoYWxpbnNrYe9hIG9ibGFzdDtLb3JzYWtvdnNraXkgOiAxIDogMjQ3My4zOTk5CitTYWtoYWxpbnNrYe9hIG9ibGFzdDtBbml2c2tpeSA6IDEgOiAyNjA5LjEwMDEKK1Nha2hhbGluc2th72Egb2JsYXN0O0tob2xtc2sgOiAxIDogNC4xOTk5OTk4CitTYWtoYWxpbnNrYe9hIG9ibGFzdDtOZXZlbHNraXkgOiAxIDogMTgyNC45CitLaGFiYXJvdnNraSBrcmHvIHLpc2lkdWVsO0Jpa2luIDogMSA6IDguMAorU2FraGFsaW5za2HvYSBvYmxhc3Q7TmV2ZWwnc2sgOiAxIDogNC4wCitTYWtoYWxpbnNrYe9hIG9ibGFzdDtLb3JzYWtvdiA6IDEgOiA1LjQwMDAwMDEKK1ByaW1vcnNraSBrcmHvO0tyYXNub2FybWV5c2tpeSA6IDEgOiAyMTIyNi45CitQcmltb3Jza2kga3Jh7ztEYWxuZXJlY2hlbnNraXkgOiAxIDogNzQxMy42MDAxCitQcmltb3Jza2kga3Jh7ztEYWxuZXJlY2hlbnNrIDogMSA6IDE0MC4zOTk5OQorUHJpbW9yc2tpIGtyYe87TGVzb3phdm9kc2tpeSA6IDEgOiAzNDgzLjMKK1ByaW1vcnNraSBrcmHvO0xlc296YXZvZHNrIDogMSA6IDEuMworUHJpbW9yc2tpIGtyYe87S2hhbmtheXNraXkgOiAxIDogMjkwNy4zOTk5CitQcmltb3Jza2kga3Jh7ztLaXJvdnNraXkgOiAxIDogMzcyMi42MDAxCitQcmltb3Jza2kga3Jh7ztEYWxuZWdvcnNraXkgOiAxIDogNDk3MC44OTk5CitQcmltb3Jza2kga3Jh7ztTcGFzc2tpeSA6IDEgOiA0MzI2LjM5OTkKK1ByaW1vcnNraSBrcmHvO0NodWd1eWV2c2tpeSA6IDEgOiAxMjgxMS4yCitQcmltb3Jza2kga3Jh7ztQb2dyYW5pY2hueWkgOiAxIDogNDExNC43OTk4CitQcmltb3Jza2kga3Jh7ztZYWtvdmxldnNraXkgOiAxIDogMjM2OC4zOTk5CitQcmltb3Jza2kga3Jh7ztLYXZhbGVyb3Zza2l5IDogMSA6IDQwODQuMTAwMQorUHJpbW9yc2tpIGtyYe87S2hvcm9sc2tpeSA6IDEgOiAyMTE3LjEwMDEKK1ByaW1vcnNraSBrcmHvO0RhbG5lZ29yc2sgOiAxIDogOC4zOTk5OTk2CitQcmltb3Jza2kga3Jh7ztTcGFzc2stRGFsbml5IDogMSA6IDEuOAorUHJpbW9yc2tpIGtyYe87Q2hlcm5pZ292c2tpeSA6IDEgOiAxOTcxLjkKK1Nha2hhbGluc2th72Egb2JsYXN0O1l1emhuby1LdXJpbHNraXkgOiAxIDogMTUyMy45CitQcmltb3Jza2kga3Jh7ztBbnVjaGluc2tpeSA6IDEgOiAzNzAwLjEwMDEKK1ByaW1vcnNraSBrcmHvO01pa2hheWxvdnNraXkgOiAxIDogMjgwMi42MDAxCitQcmltb3Jza2kga3Jh7ztPa3R5YWJyc2tpeSA6IDEgOiAxODQ0LjcKK1ByaW1vcnNraSBrcmHvO0Fyc2VueWV2IDogMSA6IDEyNC43CitQcmltb3Jza2kga3Jh7ztPbGdpbnNreSA6IDEgOiA1Njk4Ljc5OTgKK1ByaW1vcnNraSBrcmHvO1Vzc3VyaXlza2l5IDogMSA6IDM3NzcuNQorUlUtVU5LLTI4MzYgOiAxIDogMy4wOTk5OTk5CitQcmltb3Jza2kga3Jh7ztQYXJ0aXphbnNraXkgOiAxIDogNDE5MS41CitQcmltb3Jza2kga3Jh7ztTaGtvdG92c2tpeSA6IDEgOiAzMzM3LjM5OTkKK1ByaW1vcnNraSBrcmHvO05hZGV6aGRpbnNraXkgOiAxIDogMTYyNi41CitQcmltb3Jza2kga3Jh7ztMYXpvdnNraXkgOiAxIDogNDI1Ni43OTk4CitQcmltb3Jza2kga3Jh7ztBcnR5b20gOiAxIDogNDM5LjM5OTk5CitQcmltb3Jza2kga3Jh7ztQYXJ0aXphbnNrIDogMSA6IDEyNTQuNworUHJpbW9yc2tpIGtyYe87S2hhc2Fuc2tpeSA6IDEgOiA0MTMwLjc5OTgKK1ByaW1vcnNraSBrcmHvO1ZsYWRpdm9zdG9rIDogMSA6IDI4NS4xMDAwMQorUHJpbW9yc2tpIGtyYe87Qm9sc2hveSBLYW1lbiA6IDEgOiAxLjAKK1ByaW1vcnNraSBrcmHvO05ha2hvZGthIDogMSA6IDExMi4yCitSVS1VTkstMjgzNyA6IDEgOiA4MjI1NS44OTgKK1JVLVVOSy0yODM4IDogMSA6IDMuMDk5OTk5OQorS2lyb3Zza2HvYSBvYmxhc3Q7THV6c2tpeSA6IDEgOiA0NTkzLjYwMDEKK0tpcm92c2th72Egb2JsYXN0O1BvZG9zaW5vdnNraXkgOiAxIDogNDE3OC4yOTk4CitLaXJvdnNrYe9hIG9ibGFzdDtWZXJraG5la2Ftc2tpeSA6IDEgOiAxMDg5Mi42CitLaXJvdnNrYe9hIG9ibGFzdDtPcGFyaW5za2l5IDogMSA6IDYwNzQuNzAwMgorS2lyb3Zza2HvYSBvYmxhc3Q7TmFnb3Jza2l5IDogMSA6IDc2NzYuNzAwMgorS2lyb3Zza2HvYSBvYmxhc3Q7TXVyYXNoaW5za2l5IDogMSA6IDMxMDcuMAorS2lyb3Zza2HvYSBvYmxhc3Q7QmVsb2tob2x1bml0c2tpeSA6IDEgOiA1MDg1LjYwMDEKK0tpcm92c2th72Egb2JsYXN0O0FmYW5hc3lldnNraXkgOiAxIDogNTY1MC41CitLaXJvdnNrYe9hIG9ibGFzdDtEYXJvdnNraXkgOiAxIDogNDE5NC43MDAyCitLaXJvdnNrYe9hIG9ibGFzdDtTbG9ib2Rza295IDogMSA6IDMzNjUuODk5OQorS2lyb3Zza2HvYSBvYmxhc3Q7WXVyeWFuc2tpeSA6IDEgOiAzMjA2LjIKK0tpcm92c2th72Egb2JsYXN0O09tdXRuaW5za2l5IDogMSA6IDUxMDAuMTAwMQorS2lyb3Zza2HvYSBvYmxhc3Q7S2hhbHR1cmluc2tpeSA6IDEgOiAxODAzLjAKK0tpcm92c2th72Egb2JsYXN0O1NoYWJhbGluc2tpeSA6IDEgOiAzMzgxLjYwMDEKK0tpcm92c2th72Egb2JsYXN0O0tvdGVsbmljaHNraXkgOiAxIDogMzk4MS41CitLaXJvdnNrYe9hIG9ibGFzdDtLaXJvdiA6IDEgOiAzMjcuNzk5OTkKK0tpcm92c2th72Egb2JsYXN0O0tpcm92by1DaGVwZXRza2l5IDogMSA6IDI0MDIuMzk5OQorS2lyb3Zza2HvYSBvYmxhc3Q7WnV5ZXZza2l5IDogMSA6IDI3MDIuOAorS2lyb3Zza2HvYSBvYmxhc3Q7U3ZlY2hpbnNraXkgOiAxIDogMTYxOS41CitLaXJvdnNrYe9hIG9ibGFzdDtGYWxlbnNraXkgOiAxIDogMjYwMi44OTk5CitLaXJvdnNrYe9hIG9ibGFzdDtPcmljaGV2c2tpeSA6IDEgOiAyNTU3LjgKK0tpcm92c2th72Egb2JsYXN0O0tpcm92by1DaGVwZXRzIDogMSA6IDMuMDk5OTk5OQorS2lyb3Zza2HvYSBvYmxhc3Q7S3VtZW5za2l5IDogMSA6IDE4NjcuMgorS2lyb3Zza2HvYSBvYmxhc3Q7S290ZWxuaWNoJyA6IDEgOiAyLjU5OTk5OTkKK0tpcm92c2th72Egb2JsYXN0O1Zlcmtob3NoaXpoZW1za2l5IDogMSA6IDIwNDMuNgorTmlqZWdvcm9kc2th72Egb2JsYXN0IChHbztWZXRsdXpoc2tpeSA6IDEgOiAyODU4LjAKK05pamVnb3JvZHNrYe9hIG9ibGFzdCAoR287U2hha2h1bnNraXkgOiAxIDogMjM2OS4zOTk5CitOaWplZ29yb2Rza2HvYSBvYmxhc3QgKEdvO1RvbnNoYXlldnNraXkgOiAxIDogMjY1Ni43CitLaXJvdnNrYe9hIG9ibGFzdDtCb2dvcm9kc2tpeSA6IDEgOiAxNTcyLjMKK0tpcm92c2th72Egb2JsYXN0O0FyYmF6aHNraXkgOiAxIDogMTQ2MS4zCitLaXJvdnNrYe9hIG9ibGFzdDtTdW5za2l5IDogMSA6IDEyMDIuNworS2lyb3Zza2HvYSBvYmxhc3Q7Tm9saW5za2l5IDogMSA6IDE5NTAuMAorS2lyb3Zza2HvYSBvYmxhc3Q7VHV6aGluc2tpeSA6IDEgOiAxMzc5LjgKK0tpcm92c2th72Egb2JsYXN0O1VuaW5za2l5IDogMSA6IDIwNzQuMgorS2lyb3Zza2HvYSBvYmxhc3Q7U292ZXRza2l5IDogMSA6IDIzNzUuMAorS2lyb3Zza2HvYSBvYmxhc3Q7TmVtc2tpeSA6IDEgOiAyMDQzLjMKK05pamVnb3JvZHNrYe9hIG9ibGFzdCAoR287VmFybmF2aW5za2l5IDogMSA6IDI1NDEuMzk5OQorTmlqZWdvcm9kc2th72Egb2JsYXN0IChHbztVcmVuc2tpeSA6IDEgOiAxNzE1LjEKK0tpcm92c2th72Egb2JsYXN0O1BpemhhbnNraXkgOiAxIDogMTE4OC41CitOaWplZ29yb2Rza2HvYSBvYmxhc3QgKEdvO1RvbmtpbnNraXkgOiAxIDogMTE1Ny4xCitLaXJvdnNrYe9hIG9ibGFzdDtLaWtudXJza2l5IDogMSA6IDE2MjguNgorTmlqZWdvcm9kc2th72Egb2JsYXN0IChHbztLb3Zlcm5pbnNraXkgOiAxIDogMjcyNi4xMDAxCitLaXJvdnNrYe9hIG9ibGFzdDtMZWJ5YXpoc2tpeSA6IDEgOiAxMzUzLjEKK0tpcm92c2th72Egb2JsYXN0O0tpbG1lenNraXkgOiAxIDogMjk2MC4wCitLaXJvdnNrYe9hIG9ibGFzdDtZYXJhbnNraXkgOiAxIDogMjE5MS43CitLaXJvdnNrYe9hIG9ibGFzdDtVcnpodW1za2l5IDogMSA6IDMwOTYuODk5OQorTmlqZWdvcm9kc2th72Egb2JsYXN0IChHbztTZW15b25vdnNraXkgOiAxIDogMzUwMi4zOTk5CitOaWplZ29yb2Rza2HvYSBvYmxhc3QgKEdvO1NoYXJhbmdza2l5IDogMSA6IDIwMzEuNQorTmlqZWdvcm9kc2th72Egb2JsYXN0IChHbztLcmFzbm9iYWtvdnNraXkgOiAxIDogMTg4My4zCitNYXJpeXNrYe9hIHJlc3BvdWJsaWthO1Nlcm51cnNraXkgOiAxIDogOTEyLjUKK0tpcm92c2th72Egb2JsYXN0O1NhbmNodXJza2l5IDogMSA6IDE0NjUuNgorTmlqZWdvcm9kc2th72Egb2JsYXN0IChHbztWb3NrcmVzZW5za2l5IDogMSA6IDMzMDUuMgorTWFyaXlza2HvYSByZXNwb3VibGlrYTtOb3ZvdGFyeWFsc2tpeSA6IDEgOiA5NTIuNTk5OTgKK01hcml5c2th72EgcmVzcG91Ymxpa2E7T3JzaGFuc2tpeSA6IDEgOiA5NDAuMjAwMDEKK01hcml5c2th72EgcmVzcG91Ymxpa2E7TWFyaS1UdXJla3NraXkgOiAxIDogMTM5NC4zCitOaWplZ29yb2Rza2HvYSBvYmxhc3QgKEdvO0dvcm9kZXRza2l5IDogMSA6IDEzMzIuNgorTWFyaXlza2HvYSByZXNwb3VibGlrYTtLaWxlbWFyc2tpeSA6IDEgOiAzNTM4LjMKK01hcml5c2th72EgcmVzcG91Ymxpa2E7U292ZXRza2l5IDogMSA6IDE0MzcuMQorTWFyaXlza2HvYSByZXNwb3VibGlrYTtQYXJhbmdpbnNraXkgOiAxIDogNjg0LjkwMDAyCitNYXJpeXNrYe9hIHJlc3BvdWJsaWthO01lZHZlZGV2c2tpeSA6IDEgOiAyNzQxLjYwMDEKK01hcml5c2th72EgcmVzcG91Ymxpa2E7S3V6aGVuZXJza2l5IDogMSA6IDc5OS43OTk5OQorTWFyaXlza2HvYSByZXNwb3VibGlrYTtZdXJpbnNraXkgOiAxIDogMTc5OC4zCitOaWplZ29yb2Rza2HvYSBvYmxhc3QgKEdvO0JvcnNraXkgOiAxIDogMjg3My4zCitOaWplZ29yb2Rza2HvYSBvYmxhc3QgKEdvO0Noa2Fsb3Zza2l5IDogMSA6IDg3MC41OTk5OAorS2lyb3Zza2HvYSBvYmxhc3Q7TWFsbXl6aHNraXkgOiAxIDogMjA3MS41CitOaWplZ29yb2Rza2HvYSBvYmxhc3QgKEdvO0dvcm9kZXR6IDogMSA6IDEuMAorTWFyaXlza2HvYSByZXNwb3VibGlrYTtNb3JraW5za2l5IDogMSA6IDIzNzYuMgorTmlqZWdvcm9kc2th72Egb2JsYXN0IChHbztCYWxha2huaW5za2l5IDogMSA6IDEwNDkuMQorTWFyaXlza2HvYSByZXNwb3VibGlrYTtZb3Noa2FyLU9sYSA6IDEgOiAyMC40CitNYXJpeXNrYe9hIHJlc3BvdWJsaWthO0dvcm5vbWFyaXlza2l5IDogMSA6IDU0NS4wCitOaWplZ29yb2Rza2HvYSBvYmxhc3QgKEdvO0JhbGFraG5hIDogMSA6IDIuMworTmlqZWdvcm9kc2th72Egb2JsYXN0IChHbztMeXNrb3Zza2l5IDogMSA6IDg3Ni41CitOaWplZ29yb2Rza2HvYSBvYmxhc3QgKEdvO1Zvcm90eW5za2l5IDogMSA6IDg2OS4yOTk5OQorTmlqZWdvcm9kc2th72Egb2JsYXN0IChHbztWb2xvZGFyc2tpeSA6IDEgOiAxNzE5LjUKK01hcml5c2th72EgcmVzcG91Ymxpa2E7WnZlbmlnb3Zza2l5IDogMSA6IDI3MzkuMAorS2lyb3Zza2HvYSBvYmxhc3Q7VnlhdHNrby1Qb2x5YW5za2l5IDogMSA6IDg4OC40MDAwMgorTmlqZWdvcm9kc2th72Egb2JsYXN0IChHbztOaXpobml5IE5vdmdvcm9kIDogMSA6IDM0My43OTk5OQorTmlqZWdvcm9kc2th72Egb2JsYXN0IChHbztCb3IgOiAxIDogMS4wCitUY2hvdXZhY2hza2HvYSByZXNwb3VibGlrO0NoZWJva3NhcnNraXkgOiAxIDogMzUxLjIwMDAxCitNYXJpeXNrYe9hIHJlc3BvdWJsaWthO0tvem1vZGVteWFuc2sgOiAxIDogMS4wCitOaWplZ29yb2Rza2HvYSBvYmxhc3QgKEdvO0tzdG92c2tpeSA6IDEgOiAxMTM3LjUKK1JVLVVOSy0yODM5IDogMSA6IDEuNworS2lyb3Zza2HvYSBvYmxhc3Q7VnlhdHNreWUgUG9seWFueSA6IDEgOiAxLjkKK05pamVnb3JvZHNrYe9hIG9ibGFzdCAoR287Qm9nb3JvZHNraXkgOiAxIDogMTM5Ny43CitNYXJpeXNrYe9hIHJlc3BvdWJsaWthO1ZvbHpoc2tpeSA6IDEgOiA5OTIuMAorTmlqZWdvcm9kc2th72Egb2JsYXN0IChHbztQYXZsb3Zza2l5IDogMSA6IDEyNjEuMworVGNob3V2YWNoc2th72EgcmVzcG91YmxpaztNb3JnYXVzaHNraXkgOiAxIDogNjc0LjQwMDAyCitOaWplZ29yb2Rza2HvYSBvYmxhc3QgKEdvO0tzdG92byA6IDEgOiAxLjkKK1RjaG91dmFjaHNrYe9hIHJlc3BvdWJsaWs7WWFkcmluc2tpeSA6IDEgOiAxMDczLjYKK05pamVnb3JvZHNrYe9hIG9ibGFzdCAoR287RGFsbmVrb25zdGFudGlub3Zza2l5IDogMSA6IDE0NTkuMAorVGNob3V2YWNoc2th72EgcmVzcG91YmxpaztDaGVib2tzYXJ5IDogMSA6IDMuMDk5OTk5OQorVGNob3V2YWNoc2th72EgcmVzcG91YmxpaztNYXJpaW5za28tIFBvc2Fkc2tpeSA6IDEgOiA0OTQuMzk5OTkKK05pamVnb3JvZHNrYe9hIG9ibGFzdCAoR287Qm9nb3JvZHNrIDogMSA6IDEuMAorTmlqZWdvcm9kc2th72Egb2JsYXN0IChHbztTcGFzc2tpeSA6IDEgOiA2OTEuNzk5OTkKK1RjaG91dmFjaHNrYe9hIHJlc3BvdWJsaWs7Tm92b2NoZWJva3NhcnNrIDogMSA6IDIuOTAwMDAwMQorTmlqZWdvcm9kc2th72Egb2JsYXN0IChHbztWYWNoc2tpeSA6IDEgOiAxMDc3LjkKK1RjaG91dmFjaHNrYe9hIHJlc3BvdWJsaWs7VHN5dmlsc2tpeSA6IDEgOiA4MDcuNzAwMDEKK05pamVnb3JvZHNrYe9hIG9ibGFzdCAoR287U29zbm92c2tpeSA6IDEgOiAxMjM4LjEKK05pamVnb3JvZHNrYe9hIG9ibGFzdCAoR287UGF2bG92byA6IDEgOiAxLjAKK05pamVnb3JvZHNrYe9hIG9ibGFzdCAoR287S255YWdpbmluc2tpeSA6IDEgOiA2NjcuOTAwMDIKK05pamVnb3JvZHNrYe9hIG9ibGFzdCAoR287Qm9sc2hlbXVyYXNoa2luc2tpeSA6IDEgOiA1MzkuMDk5OTgKK1RjaG91dmFjaHNrYe9hIHJlc3BvdWJsaWs7S296bG92c2tpeSA6IDEgOiA1MTAuNzAwMDEKK1RjaG91dmFjaHNrYe9hIHJlc3BvdWJsaWs7S3Jhc25vYXJtZXlza2l5IDogMSA6IDM3Mi43OTk5OQorTmlqZWdvcm9kc2th72Egb2JsYXN0IChHbztQaWxuaW5za2l5IDogMSA6IDEzODguMQorTWFyaXlza2HvYSByZXNwb3VibGlrYTtWb2x6aHNrIDogMSA6IDEuOAorVGNob3V2YWNoc2th72EgcmVzcG91YmxpaztBbGlrb3Zza2l5IDogMSA6IDY0OC41OTk5OAorTmlqZWdvcm9kc2th72Egb2JsYXN0IChHbztQZXJldm96c2tpeSA6IDEgOiA2ODkuNTk5OTgKK1RjaG91dmFjaHNrYe9hIHJlc3BvdWJsaWs7S3Jhc25vY2hldGF5c2tpeSA6IDEgOiA2NzEuNDAwMDIKK1RjaG91dmFjaHNrYe9hIHJlc3BvdWJsaWs7VXJtYXJza2l5IDogMSA6IDU2Ni40MDAwMgorTmlqZWdvcm9kc2th72Egb2JsYXN0IChHbztOYXZhc2hpbnNraXkgOiAxIDogMTIwNi41CitOaWplZ29yb2Rza2HvYSBvYmxhc3QgKEdvO1NlcmdhY2hza2l5IDogMSA6IDEyMjIuMAorTmlqZWdvcm9kc2th72Egb2JsYXN0IChHbztCdXR1cmxpbnNraXkgOiAxIDogMTE0Mi4wCitUY2hvdXZhY2hza2HvYSByZXNwb3VibGlrO1Z1cm5hcnNraXkgOiAxIDogMTAwNC40CitUY2hvdXZhY2hza2HvYSByZXNwb3VibGlrO0thbmFzaHNraXkgOiAxIDogMTA4NS4zCitOaWplZ29yb2Rza2HvYSBvYmxhc3QgKEdvO0FyemFtYXNza2l5IDogMSA6IDE3MjEuNgorTmlqZWdvcm9kc2th72Egb2JsYXN0IChHbztWYWRza2l5IDogMSA6IDcyMy43OTk5OQorVGNob3V2YWNoc2th72EgcmVzcG91YmxpaztTaHVtZXJsaW5za2l5IDogMSA6IDEwOTYuMAorVGNob3V2YWNoc2th72EgcmVzcG91YmxpaztZYW50aWtvdnNraXkgOiAxIDogNDUzLjg5OTk5CitOaWplZ29yb2Rza2HvYSBvYmxhc3QgKEdvO0FyZGF0b3Zza2l5IDogMSA6IDE4NTUuOAorVGNob3V2YWNoc2th72EgcmVzcG91YmxpaztTaHVtZXJseWEgOiAxIDogMS40CitUY2hvdXZhY2hza2HvYSByZXNwb3VibGlrO0thbmFzaCA6IDEgOiAxLjEKK05pamVnb3JvZHNrYe9hIG9ibGFzdCAoR287U2VjaGVub3Zza2l5IDogMSA6IDE2MzguMgorTmlqZWdvcm9kc2th72Egb2JsYXN0IChHbztLdWxlYmFrc2tpeSA6IDEgOiAxMTM1LjIKK05pamVnb3JvZHNrYe9hIG9ibGFzdCAoR287S3Jhc25vb2t0eWFicnNraXkgOiAxIDogODI3LjU5OTk4CitOaWplZ29yb2Rza2HvYSBvYmxhc3QgKEdvO0FyemFtYXMgOiAxIDogMy45MDAwMDAxCitOaWplZ29yb2Rza2HvYSBvYmxhc3QgKEdvO1Z5a3N1bnNraXkgOiAxIDogMTcyNy40CitOaWplZ29yb2Rza2HvYSBvYmxhc3QgKEdvO0dhZ2luc2tpeSA6IDEgOiAxMDc1LjUKK1RjaG91dmFjaHNrYe9hIHJlc3BvdWJsaWs7SWJyZXNpbnNraXkgOiAxIDogMTIxNS43CitOaWplZ29yb2Rza2HvYSBvYmxhc3QgKEdvO0t1bGViYWtpIDogMSA6IDEuOQorVGNob3V2YWNoc2th72EgcmVzcG91YmxpaztQb3JldHNraXkgOiAxIDogMTI2MS4zCitOaWplZ29yb2Rza2HvYSBvYmxhc3QgKEdvO1NoYXRrb3Zza2l5IDogMSA6IDEyNTguNQorVGNob3V2YWNoc2th72EgcmVzcG91YmxpaztLb21zb21vbHNraXkgOiAxIDogNjIyLjA5OTk4CitUY2hvdXZhY2hza2HvYSByZXNwb3VibGlrO1lhbGNoaWtza2l5IDogMSA6IDYwNS4wOTk5OAorTmlqZWdvcm9kc2th72Egb2JsYXN0IChHbztWeWtzYSA6IDEgOiAxLjAKK05pamVnb3JvZHNrYe9hIG9ibGFzdCAoR287RGl2ZXlldnNraXkgOiAxIDogOTg3LjQwMDAyCitOaWplZ29yb2Rza2HvYSBvYmxhc3QgKEdvO0JvbHNoZWJvbGRpbnNraXkgOiAxIDogMTA2MS41CitOaWplZ29yb2Rza2HvYSBvYmxhc3QgKEdvO0x1a295YW5vdnNraXkgOiAxIDogMTc4NS4yCitOaWplZ29yb2Rza2HvYSBvYmxhc3QgKEdvO1BlcnZvbWF5c2tpeSA6IDEgOiAxMTY2LjgKK01vcmRvdnNrYe9hIHJlc3BvdWJsaWthO0JvbHNoZWlnbmF0b3Zza2l5IDogMSA6IDcwNS41CitUY2hvdXZhY2hza2HvYSByZXNwb3VibGlrO0JhdHlyZXZza2l5IDogMSA6IDEwNzUuNAorVGNob3V2YWNoc2th72EgcmVzcG91YmxpaztBbGF0eXJza2l5IDogMSA6IDE3MDMuNgorTmlqZWdvcm9kc2th72Egb2JsYXN0IChHbztWb3puZXNlbnNraXkgOiAxIDogODQxLjc5OTk5CitNb3Jkb3Zza2HvYSByZXNwb3VibGlrYTtBcmRhdG92c2tpeSA6IDEgOiAxMTgyLjYKK01vcmRvdnNrYe9hIHJlc3BvdWJsaWthO1RlbW5pa292c2tpeSA6IDEgOiAyMTU4LjMKK05pamVnb3JvZHNrYe9hIG9ibGFzdCAoR287UG9jaGlua292c2tpeSA6IDEgOiAyMTg5LjM5OTkKK1RjaG91dmFjaHNrYe9hIHJlc3BvdWJsaWs7U2hlbXVyc2hpbnNraXkgOiAxIDogNDAxLjc5OTk5CitUY2hvdXZhY2hza2HvYSByZXNwb3VibGlrO0FsYXR5cicgOiAxIDogMS4yCitNb3Jkb3Zza2HvYSByZXNwb3VibGlrYTtUZW5ndXNoZXZza2l5IDogMSA6IDEyMDcuNQorTW9yZG92c2th72EgcmVzcG91Ymxpa2E7SWNoYWxrb3Zza2l5IDogMSA6IDExNzQuNQorTW9yZG92c2th72EgcmVzcG91Ymxpa2E7WWVsbmlrb3Zza2l5IDogMSA6IDEyMTAuNgorTW9yZG92c2th72EgcmVzcG91Ymxpa2E7QXR5YXNoZXZza2l5IDogMSA6IDEwNDAuOQorTW9yZG92c2th72EgcmVzcG91Ymxpa2E7Q2hhbXppbnNraXkgOiAxIDogMTAwNy42CitNb3Jkb3Zza2HvYSByZXNwb3VibGlrYTtTdGFyb3NoYXlnb3Zza2l5IDogMSA6IDE2MzMuMworTW9yZG92c2th72EgcmVzcG91Ymxpa2E7Um9tb2Rhbm92c2tpeSA6IDEgOiA4NDEuNzk5OTkKK01vcmRvdnNrYe9hIHJlc3BvdWJsaWthO0tyYXNub3Nsb2JvZHNraXkgOiAxIDogMTI0OS4xCitNb3Jkb3Zza2HvYSByZXNwb3VibGlrYTtEdWJlbnNraXkgOiAxIDogNjcxLjA5OTk4CitNb3Jkb3Zza2HvYSByZXNwb3VibGlrYTtMeWFtYmlyc2tpeSA6IDEgOiA4OTUuNDAwMDIKK01vcmRvdnNrYe9hIHJlc3BvdWJsaWthO0F0eXVyaXlldnNraXkgOiAxIDogODc5LjQwMDAyCitNb3Jkb3Zza2HvYSByZXNwb3VibGlrYTtadWJvdm8tUG9seWFuc2tpeSA6IDEgOiAzMDk4LjgKK01vcmRvdnNrYe9hIHJlc3BvdWJsaWthO1RvcmJleWV2c2tpeSA6IDEgOiA5MTUuMDk5OTgKK01vcmRvdnNrYe9hIHJlc3BvdWJsaWthO0JvbHNoZWJlcmV6bmlrb3Zza2l5IDogMSA6IDY1Ni4wOTk5OAorTW9yZG92c2th72EgcmVzcG91Ymxpa2E7S292eWxraW5za2l5IDogMSA6IDIwMTcuMworTW9yZG92c2th72EgcmVzcG91Ymxpa2E7S2Fkb3Noa2luc2t5IDogMSA6IDU1MS41OTk5OAorTW9yZG92c2th72EgcmVzcG91Ymxpa2E7UnV6YXlldnNraXkgOiAxIDogMTExMi4yCitNb3Jkb3Zza2HvYSByZXNwb3VibGlrYTtTYXJhbnNrIDogMSA6IDE4MS4zOTk5OQorTW9yZG92c2th72EgcmVzcG91Ymxpa2E7S29jaGt1cm92c2tpeSA6IDEgOiA4MjguMjk5OTkKK01vcmRvdnNrYe9hIHJlc3BvdWJsaWthO1J1emFldmthIDogMSA6IDIxLjIwMDAwMQorTW9yZG92c2th72EgcmVzcG91Ymxpa2E7S292eWxraW5vIDogMSA6IDE0LjUKK01vcmRvdnNrYe9hIHJlc3BvdWJsaWthO0luc2Fyc2tpeSA6IDEgOiA5NDEuOTAwMDIKK1JVLVVOSy0yODQwIDogMSA6IDEuNworVGHvbXlyc2tpIG5hdGlvbmFsIG9rcm91ZztEaWtzb25za2l5IDogMSA6IDE1Nzk4OC4wOQorVGHvbXlyc2tpIG5hdGlvbmFsIG9rcm91ZztLaGF0YW5nc2tpeSA6IDEgOiAzODk3MTQuMzEKK1Rh7215cnNraSBuYXRpb25hbCBva3JvdWc7RHVkaW5rYSA6IDEgOiAxNTg0MDAuOTEKK1Rh7215cnNraSBuYXRpb25hbCBva3JvdWc7VXN0LVllbmlzZXlza2l5IDogMSA6IDg4MTk0LjcwMworRXZlbmtpc2tpIG5hdGlvbmFsIG9rcm91ZztCYXlraXRza2l5IDogMSA6IDUwMjQxMy40MQorUlUtVU5LLTI4NDEgOiAxIDogMTEuNAorS3Jhc25v72Fyc2tpIGtyYe8gculzaWR1ZTtUdXJ1a2hhbnNraXkgOiAxIDogMTkwMzg3LjA5CitLcmFzbm/vYXJza2kga3Jh7yBy6XNpZHVlO0lnYXJrYSA6IDEgOiAxNjIyMS44CitJcmtvdXRza2HvYSBvYmxhc3QgculzaWR1O0thdGFuZ3NraXkgOiAxIDogMTM3NDc3LjgKK0V2ZW5raXNraSBuYXRpb25hbCBva3JvdWc7SWxpbXBpeXNraXkgOiAxIDogMTQ3NzIxLjQxCitFdmVua2lza2kgbmF0aW9uYWwgb2tyb3VnO1R1bmd1c3Nrby1DaHVuc2tpeSA6IDEgOiAxMDcwMTIuMgorS3Jhc25v72Fyc2tpIGtyYe8gculzaWR1ZTtZZW5pc2V5c2tpeSA6IDEgOiAxMDUzODYuOAorS3Jhc25v72Fyc2tpIGtyYe8gculzaWR1ZTtTZXZlcm8tWWVuaXNleXNraXkgOiAxIDogNDUzODkuODAxCitJcmtvdXRza2HvYSBvYmxhc3QgculzaWR1O0JvZGF5Ymluc2tpeSA6IDEgOiA5MDYzOC43MDMKK0tyYXNub+9hcnNraSBrcmHvIHLpc2lkdWU7Qm9ndWNoYW5za2l5IDogMSA6IDU0NTExLjY5OQorS3Jhc25v72Fyc2tpIGtyYe8gculzaWR1ZTtLZXpoZW1za2l5IDogMSA6IDMyNDkxLjY5OQorSXJrb3V0c2th72Egb2JsYXN0IHLpc2lkdTtNYW1za28tQ2h1eXNraXkgOiAxIDogNDI3MzIuODk4CitLcmFzbm/vYXJza2kga3Jh7yBy6XNpZHVlO01vdHlnaW5za2l5IDogMSA6IDE4NzQzLjEKK0lya291dHNrYe9hIG9ibGFzdCBy6XNpZHU7VXN0LUlsaW1za2l5IDogMSA6IDM1NjI2LjAKK0lya291dHNrYe9hIG9ibGFzdCBy6XNpZHU7S2lyZW5za2l5IDogMSA6IDQyMDU5LjUKK0tyYXNub+9hcnNraSBrcmHvIHLpc2lkdWU7RW5pc2V5c2sgOiAxIDogMTQuNQorVGNoaXRpbnNrYe9hIG9ibGFzdCBy6XNpZDtLYWxhcnNraXkgOiAxIDogNTQ4ODkuNjk5CitLcmFzbm/vYXJza2kga3Jh7yBy6XNpZHVlO0xlc29zaWJpcnNrIDogMSA6IDUwMS4yOTk5OQorUlUtVU5LLTI4NDIgOiAxIDogMzUwOTQuNQorUlUtVU5LLTI4NDMgOiAxIDogMzUwOTQuNQorSXJrb3V0c2th72Egb2JsYXN0IHLpc2lkdTtDaHVuc2tpeSA6IDEgOiAyNTA2NC42CitJcmtvdXRza2HvYSBvYmxhc3QgculzaWR1O1VzdCctSWxpbXNrIDogMSA6IDE2LjYKK0tyYXNub+9hcnNraSBrcmHvIHLpc2lkdWU7UGlyb3Zza2l5IDogMSA6IDYwMjcuNzk5OAorS3Jhc25v72Fyc2tpIGtyYe8gculzaWR1ZTtLYXphY2hpbnNraXkgOiAxIDogNTEyMi4xMDAxCitLcmFzbm/vYXJza2kga3Jh7yBy6XNpZHVlO0JpcmlseXVzc2tpeSA6IDEgOiAxMTI5Ni45CitJcmtvdXRza2HvYSBvYmxhc3QgculzaWR1O0JvZGF5Ym8gOiAxIDogNi41OTk5OTk5CitJcmtvdXRza2HvYSBvYmxhc3QgculzaWR1O05pemhuZWlsaW1za2l5IDogMSA6IDE4MjcwLjMwMQorS3Jhc25v72Fyc2tpIGtyYe8gculzaWR1ZTtUeXVraHRldHNraXkgOiAxIDogOTYzOS43OTk4CitJcmtvdXRza2HvYSBvYmxhc3QgculzaWR1O1RheXNoZXRza2l5IDogMSA6IDI2OTk4LjkKK0tyYXNub+9hcnNraSBrcmHvIHLpc2lkdWU7VGFzZXlldnNraXkgOiAxIDogOTMyOC43MDAyCitJcmtvdXRza2HvYSBvYmxhc3QgculzaWR1O0themFjaGluc2tvLUxlbnNraXkgOiAxIDogMzI4NDYuNQorS3Jhc25v72Fyc2tpIGtyYe8gculzaWR1ZTtBYmFuc2tpeSA6IDEgOiA5Mjc3LjIwMDIKK0tyYXNub+9hcnNraSBrcmHvIHLpc2lkdWU7Qm9sc2hlbXVydGluc2tpeSA6IDEgOiA2ODU1Ljc5OTgKK1JVLVVOSy0yODQ0IDogMSA6IDc0OTk0LjM5OAorS3Jhc25v72Fyc2tpIGtyYe8gculzaWR1ZTtEemVyemhpbnNraXkgOiAxIDogMzU2Ni41CitCb3VyaWF0aWE7U2V2ZXJvLUJheWthbHNraXkgOiAxIDogNDczNTAuNjAyCitLcmFzbm/vYXJza2kga3Jh7yBy6XNpZHVlO1N1a2hvYnV6aW1za2l5IDogMSA6IDU4MzQuMAorSXJrb3V0c2th72Egb2JsYXN0IHLpc2lkdTtCcmF0c2tpeSA6IDEgOiAyMTMwMS44MDEKK0JvdXJpYXRpYTtNdXlza2l5IDogMSA6IDEzMDc1LjQKK0tyYXNub+9hcnNraSBrcmHvIHLpc2lkdWU7WWVtZWx5YW5vdnNraXkgOiAxIDogNjc3Ny43OTk4CitLcmFzbm/vYXJza2kga3Jh7yBy6XNpZHVlO0JvbHNoZXVsdXlza2l5IDogMSA6IDIxODcuNjAwMQorS3Jhc25v72Fyc2tpIGtyYe8gculzaWR1ZTtLb3p1bHNreSA6IDEgOiA1MDY1LjIwMDIKK0tyYXNub+9hcnNraSBrcmHvIHLpc2lkdWU7Tml6aG5laW5nYXNoc2tpeSA6IDEgOiA2NDg0Ljg5OTkKK0lya291dHNrYe9hIG9ibGFzdCBy6XNpZHU7VXN0Jy1LdXQgOiAxIDogMjMuNgorS3Jhc25v72Fyc2tpIGtyYe8gculzaWR1ZTtLYW5za2l5IDogMSA6IDQ5MTcuMTAwMQorS3Jhc25v72Fyc2tpIGtyYe8gculzaWR1ZTtBY2hpbnNraXkgOiAxIDogMjg3My43CitLcmFzbm/vYXJza2kga3Jh7yBy6XNpZHVlO0JvZ290b2xza2l5IDogMSA6IDMxOTguNjAwMQorS3Jhc25v72Fyc2tpIGtyYe8gculzaWR1ZTtJbGFuc2tpeSA6IDEgOiAzMjY4LjYwMDEKK0lya291dHNrYe9hIG9ibGFzdCBy6XNpZHU7VXN0LVVkaW5za2l5IDogMSA6IDE5NDI1LjgwMQorS3Jhc25v72Fyc2tpIGtyYe8gculzaWR1ZTtSeWJpbnNraXkgOiAxIDogMzEyNC4zOTk5CitLcmFzbm/vYXJza2kga3Jh7yBy6XNpZHVlO0FjaGluc2sgOiAxIDogNDIuNTk5OTk4CitLcmFzbm/vYXJza2kga3Jh7yBy6XNpZHVlO0Jlcnlvem92c2tpeSA6IDEgOiA0OTc0Ljc5OTgKK0lya291dHNrYe9hIG9ibGFzdCBy6XNpZHU7QnJhdHNrIDogMSA6IDY5LjQwMDAwMgorS3Jhc25v72Fyc2tpIGtyYe8gculzaWR1ZTtCb2dvdG9sIDogMSA6IDEyLjkKK0tyYXNub+9hcnNraSBrcmHvIHLpc2lkdWU7VXlhcnNraXkgOiAxIDogMjQzNi43CitLcmFzbm/vYXJza2kga3Jh7yBy6XNpZHVlO0thbnNrIDogMSA6IDM2LjUKK0tyYXNub+9hcnNraSBrcmHvIHLpc2lkdWU7U29zbm92b2JvcnNrIDogMSA6IDIyLjc5OTk5OQorS3Jhc25v72Fyc2tpIGtyYe8gculzaWR1ZTtLcmFzbm95YXJzayA6IDEgOiAyMjIuNjAwMDEKK0tyYXNub+9hcnNraSBrcmHvIHLpc2lkdWU7TmF6YXJvdnNraXkgOiAxIDogNDE2OS42MDAxCitLcmFzbm/vYXJza2kga3Jh7yBy6XNpZHVlO01hbnNraXkgOiAxIDogNTY1NS4yMDAyCitLcmFzbm/vYXJza2kga3Jh7yBy6XNpZHVlO05hemFyb3ZvIDogMSA6IDI0LjIwMDAwMQorUlUtVU5LLTI4NDUgOiAxIDogNTA2MzIuNjk5CitLcmFzbm/vYXJza2kga3Jh7yBy6XNpZHVlO1NoYXJ5cG92c2tpeSA6IDEgOiAzNzcyLjM5OTkKK0lya291dHNrYe9hIG9ibGFzdCBy6XNpZHU7Tml6aG5ldWRpbnNraXkgOiAxIDogNTA5NTMuMTk5CitUY2hpdGluc2th72Egb2JsYXN0IHLpc2lkO1R1bmdpcm8tT2xla21pbnNraXkgOiAxIDogNDIwOTcuMTk5CitJcmtvdXRza2HvYSBvYmxhc3QgculzaWR1O1RheXNoZXQgOiAxIDogMTguNQorS3Jhc25v72Fyc2tpIGtyYe8gculzaWR1ZTtEaXZub2dvcnNrIDogMSA6IDkuNjk5OTk5OAorS3Jhc25v72Fyc2tpIGtyYe8gculzaWR1ZTtaYW96ZXJueWkgOiAxIDogMTMuOQorS3Jhc25v72Fyc2tpIGtyYe8gculzaWR1ZTtJcmJleXNraXkgOiAxIDogMTAzNzUuNgorS3Jhc25v72Fyc2tpIGtyYe8gculzaWR1ZTtCb3JvZGlubyA6IDEgOiAxMS4yCitJcmtvdXRza2HvYSBvYmxhc3QgculzaWR1O1poaWdhbG92c2tpeSA6IDEgOiAyMjg5Mi4wCitLcmFzbm/vYXJza2kga3Jh7yBy6XNpZHVlO0JhbGFraHRpbnNraXkgOiAxIDogNDk4Ny43MDAyCitSVS1VTkstMjg0NiA6IDEgOiAxOC45CitLcmFzbm/vYXJza2kga3Jh7yBy6XNpZHVlO1V6aHVyc2tpeSA6IDEgOiA0Mzc5LjEwMDEKK0tyYXNub+9hcnNraSBrcmHvIHLpc2lkdWU7U2F5YW5za2l5IDogMSA6IDgyMDEuOTAwNAorS3Jhc25v72Fyc2tpIGtyYe8gculzaWR1ZTtQYXJ0aXphbnNraXkgOiAxIDogNDc1Ni44OTk5CitCb3VyaWF0aWE7U2V2ZXJvYmF5a2Fsc2sgOiAxIDogNi41OTk5OTk5CitCb3VyaWF0aWE7S3VydW1rYW5za2l5IDogMSA6IDEyMDQ0LjQKK0lya291dHNrYe9hIG9ibGFzdCBy6XNpZHU7QmFsYWdhbnNraXkgOiAxIDogNTA4NS4yMDAyCitSZXNwLiBLaGFrYXNzaWE7T3JkemhvbmlraWR6ZXZza2l5IDogMSA6IDU3ODAuMAorS3Jhc25v72Fyc2tpIGtyYe8gculzaWR1ZTtOb3Zvc2Vsb3Zza2l5IDogMSA6IDE3MTEuNgorSXJrb3V0c2th72Egb2JsYXN0IHLpc2lkdTtLdXl0dW5za2l5IDogMSA6IDEwMDY4LjAKK0lya291dHNrYe9hIG9ibGFzdCBy6XNpZHU7VHVsdW5za2l5IDogMSA6IDE0MzMxLjQKK0lya291dHNrYe9hIG9ibGFzdCBy6XNpZHU7S2FjaHVnc2tpeSA6IDEgOiAzMjE4MS4zMDEKK0tyYXNub+9hcnNraSBrcmHvIHLpc2lkdWU7SWRyaW5za2l5IDogMSA6IDU2MzguNzk5OAorS3Jhc25v72Fyc2tpIGtyYe8gculzaWR1ZTtLdXJhZ2luc2tpeSA6IDEgOiAyNDA3Ny4zMDEKK0tyYXNub+9hcnNraSBrcmHvIHLpc2lkdWU7S3Jhc25vdHVyYW5za2l5IDogMSA6IDI5OTIuMzk5OQorSXJrb3V0c2th72Egb2JsYXN0IHLpc2lkdTtOaXpobmV1ZGluc2sgOiAxIDogMjcuMQorUmVzcC4gS2hha2Fzc2lhO1NoaXJpbnNraXkgOiAxIDogNjIxNC4yOTk4CitSZXNwLiBLaGFrYXNzaWE7Qm9ncmFkc2tpeSA6IDEgOiA0MzExLjIwMDIKK0lya291dHNrYe9hIG9ibGFzdCBy6XNpZHU7VHVsdW4gOiAxIDogMzYuNzAwMDAxCitJcmtvdXRza2HvYSBvYmxhc3QgculzaWR1O09sa2hvbnNraXkgOiAxIDogNjU2Ni4zOTk5CitUY2hpdGluc2th72Egb2JsYXN0IHLpc2lkO01vZ29jaGluc2tpeSA6IDEgOiAyNTQ5Ni41CitJcmtvdXRza2HvYSBvYmxhc3QgculzaWR1O1ppbWluc2tpeSA6IDEgOiA3MTQ3LjEwMDEKK1Jlc3AuIEtoYWthc3NpYTtVc3QtQWJha2Fuc2tpeSA6IDEgOiA5MTI0LjA5OTYKK0JvdXJpYXRpYTtCYXJndXppbnNraXkgOiAxIDogMTI3NDAuNQorT3VzdCctT3JkeW5za2kgbmF0aW9uYWwgbztOdWt1dHNraXkgOiAxIDogMTgyMi44CitPdXN0Jy1PcmR5bnNraSBuYXRpb25hbCBvO09zaW5za2l5IDogMSA6IDM5MTcuMgorS3Jhc25v72Fyc2tpIGtyYe8gculzaWR1ZTtNaW51c2luc2tpeSA6IDEgOiAyODQ4LjgKK0lya291dHNrYe9hIG9ibGFzdCBy6XNpZHU7U2F5YW5zayA6IDEgOiAxMi43CitJcmtvdXRza2HvYSBvYmxhc3QgculzaWR1O1ppbWEgOiAxIDogMjQuMjk5OTk5CitLcmFzbm/vYXJza2kga3Jh7yBy6XNpZHVlO0thcmF0dXpza2l5IDogMSA6IDEwNDMzLjgKK0lya291dHNrYe9hIG9ibGFzdCBy6XNpZHU7WmFsYXJpbnNraXkgOiAxIDogNzUyOC4wCitPdXN0Jy1PcmR5bnNraSBuYXRpb25hbCBvO0FsYXJza2l5IDogMSA6IDI2ODguNworUmVzcC4gS2hha2Fzc2lhO0NoZXJub2dvcnNrIDogMSA6IDQuMzAwMDAwMgorUmVzcC4gS2hha2Fzc2lhO0Fza2l6c2tpeSA6IDEgOiA3ODU4LjM5OTkKK0JvdXJpYXRpYTtZZXJhdm5pbnNraXkgOiAxIDogMzAwOTkuMAorUmVzcC4gS2hha2Fzc2lhO0FsdGF5c2tpeSA6IDEgOiAxOTE4LjMKK0tyYXNub+9hcnNraSBrcmHvIHLpc2lkdWU7TWludXNpbnNrIDogMSA6IDE4LjUKK1RjaGl0aW5za2HvYSBvYmxhc3QgculzaWQ7Q2hlcm55c2hldnNraXkgOiAxIDogMTI2MzUuMgorUmVzcC4gS2hha2Fzc2lhO0FiYWthbiA6IDEgOiAyLjkwMDAwMDEKK1RvdXZhIHJlc3BvdWJsaWthO1RvZHpoaW5za2l5IDogMSA6IDQzNjQzLjM5OAorUlUtVU5LLTI4NDcgOiAxIDogMjg1OC42MDAxCitLcmFzbm/vYXJza2kga3Jh7yBy6XNpZHVlO1NodXNoZW5za2l5IDogMSA6IDMyMzQuMAorT3VzdCctT3JkeW5za2kgbmF0aW9uYWwgbztCb2toYW5za2l5IDogMSA6IDM0NjEuMgorS3Jhc25v72Fyc2tpIGtyYe8gculzaWR1ZTtZZXJtYWtvdnNraXkgOiAxIDogMTUzNzUuMgorT3VzdCctT3JkeW5za2kgbmF0aW9uYWwgbztFa2hpcml0LUJ1bGFnYXRza2l5IDogMSA6IDU0ODQuNzk5OAorVGNoaXRpbnNrYe9hIG9ibGFzdCBy6XNpZDtTcmV0ZW5za2l5IDogMSA6IDE0ODY0LjMKK1Jlc3AuIEtoYWthc3NpYTtCZXlza2l5IDogMSA6IDQ2NTkuODk5OQorQm91cmlhdGlhO09raW5za2l5IDogMSA6IDI4MTU1LjEKK0JvdXJpYXRpYTtQcmliYXlrYWxza2l5IDogMSA6IDEzMTYzLjcKK1RjaGl0aW5za2HvYSBvYmxhc3QgculzaWQ7R2F6aW11cm8tIFphdm9kc2tpeSA6IDEgOiAxNDg4OS45CitJcmtvdXRza2HvYSBvYmxhc3QgculzaWR1O0NoZXJlbWtob3Zza2l5IDogMSA6IDEwNjA0LjgKK0lya291dHNrYe9hIG9ibGFzdCBy6XNpZHU7Q2hlcmVta2hvdm8gOiAxIDogMjMuMQorUmVzcC4gS2hha2Fzc2lhO1Rhc2h0eXBza2l5IDogMSA6IDIwNjc3LjY5OQorUmVzcC4gS2hha2Fzc2lhO1NheWFub2dvcnNrIDogMSA6IDcuMTk5OTk5OAorQm91cmlhdGlhO0tob3JpbnNraXkgOiAxIDogMTM3OTUuMworVGNoaXRpbnNrYe9hIG9ibGFzdCBy6XNpZDtDaGl0aW5za2l5IDogMSA6IDE1NzE1LjgKK0lya291dHNrYe9hIG9ibGFzdCBy6XNpZHU7SXJrdXRza2l5IDogMSA6IDEwMjM2LjkKK0lya291dHNrYe9hIG9ibGFzdCBy6XNpZHU7VXNvbHNraXkgOiAxIDogNjkxNy43MDAyCitUY2hpdGluc2th72Egb2JsYXN0IHLpc2lkO05lcmNoaW5za2l5IDogMSA6IDUyNjYuNzk5OAorVG91dmEgcmVzcG91Ymxpa2E7UGl5LUtodW1za2l5IDogMSA6IDg2MTMuNQorSXJrb3V0c2th72Egb2JsYXN0IHLpc2lkdTtVc29seWUtU2liaXJza29lIDogMSA6IDIwLjIwMDAwMQorQm91cmlhdGlhO0thYmFuc2tpeSA6IDEgOiA5MzE5LjIwMDIKK1RjaGl0aW5za2HvYSBvYmxhc3QgculzaWQ7S2FyeW1za2l5IDogMSA6IDg2OTUuNDAwNAorVGNoaXRpbnNrYe9hIG9ibGFzdCBy6XNpZDtOZXJjaGluc2tpeS1aYXZvZHNraXkgOiAxIDogOTYyMi4yMDAyCitJcmtvdXRza2HvYSBvYmxhc3QgculzaWR1O0FuZ2Fyc2sgOiAxIDogNS4wCitUb3V2YSByZXNwb3VibGlrYTtLeXp5bHNraXkgOiAxIDogNjAxNC43OTk4CitUY2hpdGluc2th72Egb2JsYXN0IHLpc2lkO1NoaWxraW5za2l5IDogMSA6IDYwNzYuODk5OQorSXJrb3V0c2th72Egb2JsYXN0IHLpc2lkdTtJcmt1dHNrIDogMSA6IDI4Ljc5OTk5OQorVG91dmEgcmVzcG91Ymxpa2E7S2FhLUhlbXNraXkgOiAxIDogMjU1NTcuNAorQm91cmlhdGlhO1phaWdyYXlldnNraXkgOiAxIDogNjQ2MC4wCitUY2hpdGluc2th72Egb2JsYXN0IHLpc2lkO0toaWxva3NraXkgOiAxIDogMTUyOTQuOQorVG91dmEgcmVzcG91Ymxpa2E7U3V0LUtob2xza2l5IDogMSA6IDcwOTguMzk5OQorVGNoaXRpbnNrYe9hIG9ibGFzdCBy6XNpZDtTaGVsb3B1Z2luc2tpeSA6IDEgOiA0MzA1LjUKK0lya291dHNrYe9hIG9ibGFzdCBy6XNpZHU7U2hlbGVraG92IDogMSA6IDkuMzk5OTk5NgorUlUtVU5LLTI4NDggOiAxIDogNzg5MS4yOTk4CitUY2hpdGluc2th72Egb2JsYXN0IHLpc2lkO0NoaXRhIDogMSA6IDI3LjkKK0JvdXJpYXRpYTtJdm9sZ2luc2tpeSA6IDEgOiAyOTk2LjIKK1RjaGl0aW5za2HvYSBvYmxhc3QgculzaWQ7QmFsZXlza2l5IDogMSA6IDUwMDguMAorSXJrb3V0c2th72Egb2JsYXN0IHLpc2lkdTtTbHl1ZHlhbnNraXkgOiAxIDogNTMzMC42MDAxCitCb3VyaWF0aWE7VHVua2luc2tpeSA6IDEgOiAxMTY4OS45CitCb3VyaWF0aWE7VWxhbi1VZGUgOiAxIDogMjYyLjI5OTk5CitSVS1VTkstMjg0OSA6IDEgOiA1MTc3LjI5OTgKK1RvdXZhIHJlc3BvdWJsaWthO0NoYWEtS2hvbHNreSA6IDEgOiAzMDk3LjgKK0JvdXJpYXRpYTtUYXJiYWdhdGF5c2tpeSA6IDEgOiAzNDY0Ljg5OTkKK1RvdXZhIHJlc3BvdWJsaWthO0t5enlsIDogMSA6IDI2OC42MDAwMQorVGNoaXRpbnNrYe9hIG9ibGFzdCBy6XNpZDtVbGV0b3Zza2l5IDogMSA6IDE2NTM0LjY5OQorVG91dmEgcmVzcG91Ymxpa2E7QmFydW4tS2hlbWNoaW5za2l5IDogMSA6IDU2MDUuNzAwMgorQWd1aW5za2kgbmF0aW9uYWwgb2tyb3VnO01vZ295dHV5c2tpeSA6IDEgOiA2MjExLjUKK1RjaGl0aW5za2HvYSBvYmxhc3QgculzaWQ7QmFsZXkgOiAxIDogNy4zMDAwMDAyCitUb3V2YSByZXNwb3VibGlrYTtCYXktVGF5Z2luc2tpeSA6IDEgOiA4NTUyLjA5OTYKK1RvdXZhIHJlc3BvdWJsaWthO1RhbmRpbnNraXkgOiAxIDogNDE4MC44OTk5CitCb3VyaWF0aWE7U2VsZW5naW5za2l5IDogMSA6IDgzNDcuNQorVG91dmEgcmVzcG91Ymxpa2E7Q2hlZGktS2hvbHNreSA6IDEgOiAyMzM2LjMKK1RjaGl0aW5za2HvYSBvYmxhc3QgculzaWQ7QWxleGFuZHJvdm8tWmF2b2Rza2l5IDogMSA6IDc0MzMuMTAwMQorVGNoaXRpbnNrYe9hIG9ibGFzdCBy6XNpZDtQZXRyb3Zzay1aYWJheWthbHNraXkgOiAxIDogOTAwMy4yMDAyCitUb3V2YSByZXNwb3VibGlrYTtEenVuLUtoZW1jaGluc2tpeSA6IDEgOiA1ODA0LjAKK1RjaGl0aW5za2HvYSBvYmxhc3QgculzaWQ7T2xvdnlhbm5pbnNraXkgOiAxIDogNjA3Ni43OTk4CitCb3VyaWF0aWE7TXVraG9yc2hpYmlyc2tpeSA6IDEgOiA0NTUzLjAKK1RjaGl0aW5za2HvYSBvYmxhc3QgculzaWQ7S2FsZ2Fuc2tpeSA6IDEgOiAzMDQwLjEwMDEKK0FndWluc2tpIG5hdGlvbmFsIG9rcm91ZztBZ2luc2tpeSA6IDEgOiA2NTgzLjUKK0JvdXJpYXRpYTtaYWthbWVuc2tpeSA6IDEgOiAxNTA3NS4zCitCb3VyaWF0aWE7RHpoaWRpbnNraXkgOiAxIDogODQ0NC40MDA0CitCb3VyaWF0aWE7R3VzaW5vb3plcnNrIDogMSA6IDUuNjk5OTk5OAorVGNoaXRpbnNrYe9hIG9ibGFzdCBy6XNpZDtQZXRyb3Zzay1aYWJheWthbHNreSA6IDEgOiAxMy4xCitBZ3VpbnNraSBuYXRpb25hbCBva3JvdWc7RHVsZHVyZ2luc2tpeSA6IDEgOiA2ODI1LjAKK1RvdXZhIHJlc3BvdWJsaWthO092eXVyc2tpeSA6IDEgOiA0NzY1LjYwMDEKK1RjaGl0aW5za2HvYSBvYmxhc3QgculzaWQ7Qm9yemluc2tpeSA6IDEgOiA4OTE4Ljc5OTgKK1RvdXZhIHJlc3BvdWJsaWthO1Rlcy1LaGVtc2tpeSA6IDEgOiA3MDE1LjEwMDEKK0JvdXJpYXRpYTtCaWNodXJza2l5IDogMSA6IDU4NzkuMzk5OQorVGNoaXRpbnNrYe9hIG9ibGFzdCBy6XNpZDtQcmlhcmd1bnNraXkgOiAxIDogNTUxNC42MDAxCitCb3VyaWF0aWE7S3lha2h0aW5za2l5IDogMSA6IDQ4NDIuNQorVGNoaXRpbnNrYe9hIG9ibGFzdCBy6XNpZDtLcmFzbm9jaGlrb3lza2l5IDogMSA6IDI3NzgyLjAKK1RvdXZhIHJlc3BvdWJsaWthO0Vyemluc2tpeSA6IDEgOiAxMjU4Ni40CitUb3V2YSByZXNwb3VibGlrYTtNb25ndW4tVGF5Z2luc2tpeSA6IDEgOiA0NjgwLjI5OTgKK1RjaGl0aW5za2HvYSBvYmxhc3QgculzaWQ7QWtzaGluc2tpeSA6IDEgOiA3ODExLjc5OTgKK1RjaGl0aW5za2HvYSBvYmxhc3QgculzaWQ7T25vbnNraXkgOiAxIDogNTcxMC4yMDAyCitUY2hpdGluc2th72Egb2JsYXN0IHLpc2lkO0tyYXNub2thbWVuc2tpeSA6IDEgOiA1OTgzLjUKK1RjaGl0aW5za2HvYSBvYmxhc3QgculzaWQ7S3lyaW5za2l5IDogMSA6IDE2MjMxLjYKK1RjaGl0aW5za2HvYSBvYmxhc3QgculzaWQ7Qm9yenlhIDogMSA6IDkuMTk5OTk5OAorVGNoaXRpbnNrYe9hIG9ibGFzdCBy6XNpZDtaYWJheWthbHNraXkgOiAxIDogNTkxMS43OTk4CitUY2hpdGluc2th72Egb2JsYXN0IHLpc2lkO0tyYXNub2thbWVuc2sgOiAxIDogMTMuOAorUlUtVU5LLTI4NTAgOiAxIDogMTEuNAorUlUtVU5LLTI4NTEgOiAxIDogMzUwOTQuNQorUlUtVU5LLTI4NTIgOiAxIDogMzUwOTQuNQorUlUtVU5LLTI4NTMgOiAxIDogNzQ5OTQuMzk4CitSVS1VTkstMjg1NCA6IDEgOiA1MDYzMi42OTkKK1JVLVVOSy0yODU1IDogMSA6IDE4LjkKK1JVLVVOSy0yODU2IDogMSA6IDI4NTguNjAwMQorUlUtVU5LLTI4NTcgOiAxIDogNzg5MS4yOTk4CitSVS1VTkstMjg1OCA6IDEgOiA1MTc3LjI5OTgKK0tvc3Ryb21za2HvYSBvYmxhc3Q7Vm9raG9tc2tpeSA6IDEgOiAzNDczLjcKK0tvc3Ryb21za2HvYSBvYmxhc3Q7U29saWdhbGljaHNraXkgOiAxIDogMzQxOC44CitLb3N0cm9tc2th72Egb2JsYXN0O1Bhdmluc2tpeSA6IDEgOiAxNTUxLjYKK0tvc3Ryb21za2HvYSBvYmxhc3Q7T2t0eWFicnNraXkgOiAxIDogMTc1Ni4yCitLb3N0cm9tc2th72Egb2JsYXN0O0NodWtobG9tc2tpeSA6IDEgOiAzMzk2LjIKK0tvc3Ryb21za2HvYSBvYmxhc3Q7S29sb2dyaXZza2l5IDogMSA6IDM4NjMuODk5OQorS29zdHJvbXNrYe9hIG9ibGFzdDtNZXpoZXZza2l5IDogMSA6IDIyMzUuODk5OQorS29zdHJvbXNrYe9hIG9ibGFzdDtQeXNjaHVnc2tpeSA6IDEgOiAyMDQwLjUKK0tvc3Ryb21za2HvYSBvYmxhc3Q7QnV5c2tpeSA6IDEgOiAzNTU1Ljg5OTkKK0lhcm9zbGF2c2th72Egb2JsYXN0O1Bvc2hla2hvbnNraXkgOiAxIDogMzAyNy44CitJYXJvc2xhdnNrYe9hIG9ibGFzdDtQZXJ2b21heXNraXkgOiAxIDogMjAyNy45CitUdmVyc2th72Egb2JsYXN0IChLYWxpbmluO1Zlc3llZ29uc2tpeSA6IDEgOiAxNTQ1LjMKK0tvc3Ryb21za2HvYSBvYmxhc3Q7UGFyZmVueWV2c2tpeSA6IDEgOiAyMzAwLjMKK0tvc3Ryb21za2HvYSBvYmxhc3Q7U2hhcnlpbnNraXkgOiAxIDogMzkxOS4xMDAxCitLb3N0cm9tc2th72Egb2JsYXN0O05leXNraXkgOiAxIDogMjgwMS4wCitLb3N0cm9tc2th72Egb2JsYXN0O1BvbmF6eXJldnNraXkgOiAxIDogMjE1NC4zCitLb3N0cm9tc2th72Egb2JsYXN0O0dhbGljaHNraXkgOiAxIDogMjc1My4yCitJYXJvc2xhdnNrYe9hIG9ibGFzdDtCcmV5dG92c2tpeSA6IDEgOiAyMDQuNjAwMDEKK1R2ZXJza2HvYSBvYmxhc3QgKEthbGluaW47U2FuZG92c2tpeSA6IDEgOiAxOTM3LjIKK0tvc3Ryb21za2HvYSBvYmxhc3Q7TWFudHVyb3Zza2l5IDogMSA6IDI2MzEuMAorSWFyb3NsYXZza2HvYSBvYmxhc3Q7THl1Ymltc2tpeSA6IDEgOiAxNTI2LjIKK0tvc3Ryb21za2HvYSBvYmxhc3Q7QW50cm9wb3Zza2l5IDogMSA6IDIzNDUuMworS29zdHJvbXNrYe9hIG9ibGFzdDtCdXkgOiAxIDogMS43CitUdmVyc2th72Egb2JsYXN0IChLYWxpbmluO0xlc25veSA6IDEgOiAxNzQ5LjAKK0tvc3Ryb21za2HvYSBvYmxhc3Q7U2hhcnlhIDogMSA6IDEuOAorS29zdHJvbXNrYe9hIG9ibGFzdDtHYWxpdGNoIDogMSA6IDEuMgorSWFyb3NsYXZza2HvYSBvYmxhc3Q7RGFuaWxvdnNraXkgOiAxIDogMjE4My44CitJYXJvc2xhdnNrYe9hIG9ibGFzdDtSeWJpbnNraXkgOiAxIDogMjEwNy4xMDAxCitUdmVyc2th72Egb2JsYXN0IChLYWxpbmluO0tyYXNub2tob2xtc2tpeSA6IDEgOiAxNDMzLjQKK0tvc3Ryb21za2HvYSBvYmxhc3Q7TWFudHVyb3ZvIDogMSA6IDEuNAorVHZlcnNrYe9hIG9ibGFzdCAoS2FsaW5pbjtNb2xva292c2tpeSA6IDEgOiAxMDcyLjIKK0tvc3Ryb21za2HvYSBvYmxhc3Q7S29zdHJvbXNrb3kgOiAxIDogMTM4My43CitLb3N0cm9tc2th72Egb2JsYXN0O05leWEgOiAxIDogMS44CitLb3N0cm9tc2th72Egb2JsYXN0O1N1c2FuaW5za2l5IDogMSA6IDEwNjIuMworSWFyb3NsYXZza2HvYSBvYmxhc3Q7VHV0YXlldnNraXkgOiAxIDogMTM0My41CitUdmVyc2th72Egb2JsYXN0IChLYWxpbmluO1Vkb21lbHNraXkgOiAxIDogMjQ3Mi44CitUdmVyc2th72Egb2JsYXN0IChLYWxpbmluO0JvbG9nb3Zza2l5IDogMSA6IDI3MjcuMTAwMQorS29zdHJvbXNrYe9hIG9ibGFzdDtNYWthcnlldnNraXkgOiAxIDogNDM5MS42MDAxCitUdmVyc2th72Egb2JsYXN0IChLYWxpbmluO01ha3NhdGlraGluc2tpeSA6IDEgOiAyNTcxLjM5OTkKK0lhcm9zbGF2c2th72Egb2JsYXN0O05la291enNraXkgOiAxIDogMTgwNS45CitLb3N0cm9tc2th72Egb2JsYXN0O09zdHJvdnNraXkgOiAxIDogMjI4Ni4wCitLb3N0cm9tc2th72Egb2JsYXN0O1N1ZGlzbGF2c2tpeSA6IDEgOiAxNDc3LjkKK1R2ZXJza2HvYSBvYmxhc3QgKEthbGluaW47QmV6aGV0c2tpeSA6IDEgOiAyODI3LjMKK0tvc3Ryb21za2HvYSBvYmxhc3Q7S2FkeWlza2l5IDogMSA6IDIwOTMuODk5OQorSWFyb3NsYXZza2HvYSBvYmxhc3Q7UnliaW5zayA6IDEgOiAyLjgKK0lhcm9zbGF2c2th72Egb2JsYXN0O1R1dGFldiA6IDEgOiA0LjA5OTk5OTkKK1R2ZXJza2HvYSBvYmxhc3QgKEthbGluaW47U29ua292c2tpeSA6IDEgOiAxMDIyLjEKK0lhcm9zbGF2c2th72Egb2JsYXN0O05la3Jhc292c2tpeSA6IDEgOiA2NDUuMAorSWFyb3NsYXZza2HvYSBvYmxhc3Q7TXlzaGtpbnNraXkgOiAxIDogMTA2My40CitJYXJvc2xhdnNrYe9hIG9ibGFzdDtZYXJvc2xhdnNraXkgOiAxIDogMTkxNy45CitUdmVyc2th72Egb2JsYXN0IChLYWxpbmluO0JvbG9nb3llIDogMSA6IDMuNQorSWFyb3NsYXZza2HvYSBvYmxhc3Q7Qm9sc2hlc2Vsc2tpeSA6IDEgOiAxMjU2LjMKK1R2ZXJza2HvYSBvYmxhc3QgKEthbGluaW47VWRvbWx5YSA6IDEgOiAxLjQKK1R2ZXJza2HvYSBvYmxhc3QgKEthbGluaW47VnlzaG5ldm9sb3Rza2l5IDogMSA6IDMyNTEuMworS29zdHJvbXNrYe9hIG9ibGFzdDtLb3N0cm9tYSA6IDEgOiAzMC4yOTk5OTkKK1R2ZXJza2HvYSBvYmxhc3QgKEthbGluaW47QmV6c2hldHNrIDogMSA6IDEuMworS29zdHJvbXNrYe9hIG9ibGFzdDtLcmFzbm9zZWxza2l5IDogMSA6IDY0OC41OTk5OAorSWFyb3NsYXZza2HvYSBvYmxhc3Q7VWdsaWNoc2tpeSA6IDEgOiAyMjcxLjEwMDEKK0l2YW5vdnNrYe9hIG9ibGFzdDtaYXZvbHpoc2tpeSA6IDEgOiA3OTYuMAorVHZlcnNrYe9hIG9ibGFzdCAoS2FsaW5pbjtLZXNvdm9nb3Jza2l5IDogMSA6IDEwODAuOAorVHZlcnNrYe9hIG9ibGFzdCAoS2FsaW5pbjtGaXJvdnNraXkgOiAxIDogMTgyNy4xCitJYXJvc2xhdnNrYe9hIG9ibGFzdDtZYXJvc2xhdmwgOiAxIDogMi41OTk5OTk5CitJdmFub3Zza2HvYSBvYmxhc3Q7S2luZXNoZW1za2l5IDogMSA6IDQ3NC43OTk5OQorVHZlcnNrYe9hIG9ibGFzdCAoS2FsaW5pbjtTcGlyb3Zza2l5IDogMSA6IDEzODkuMworSXZhbm92c2th72Egb2JsYXN0O1Nva29sc2tpeSA6IDEgOiAxNDIxLjcKK1R2ZXJza2HvYSBvYmxhc3QgKEthbGluaW47S2FzaGluc2tpeSA6IDEgOiAyMDU2LjMKK0tvc3Ryb21za2HvYSBvYmxhc3Q7TmVyZWtodHNraXkgOiAxIDogMTExNi4xCitJYXJvc2xhdnNrYe9hIG9ibGFzdDtCb3Jpc29nbGVic2tpeSA6IDEgOiAxNDgwLjMKK1R2ZXJza2HvYSBvYmxhc3QgKEthbGluaW47TGlraG9zbGF2bHNraXkgOiAxIDogMTczMy4yCitUdmVyc2th72Egb2JsYXN0IChLYWxpbmluO1Z5c2hueSBWb2xvY2hlayA6IDEgOiAxLjgKK1R2ZXJza2HvYSBvYmxhc3QgKEthbGluaW47UmFtZXNoa292c2tpeSA6IDEgOiAyNDE0LjYwMDEKK0lhcm9zbGF2c2th72Egb2JsYXN0O1VnbGljaCA6IDEgOiAyLjMKK0l2YW5vdnNrYe9hIG9ibGFzdDtLaW5lc2htYSA6IDEgOiAxMi44CitJYXJvc2xhdnNrYe9hIG9ibGFzdDtHYXZyaWxvdi1ZYW1za2l5IDogMSA6IDEyMDIuNAorSXZhbm92c2th72Egb2JsYXN0O1ByaXZvbHpoc2tpeSA6IDEgOiA1NDQuNDAwMDIKK0l2YW5vdnNrYe9hIG9ibGFzdDtWaWNodWdza2l5IDogMSA6IDk5Ni40MDAwMgorVHZlcnNrYe9hIG9ibGFzdCAoS2FsaW5pbjtPc3Rhc2hrb3Zza2l5IDogMSA6IDI1ODEuNjAwMQorSXZhbm92c2th72Egb2JsYXN0O1l1cnlldmV0c2tpeSA6IDEgOiA2NDcuNzAwMDEKK0lhcm9zbGF2c2th72Egb2JsYXN0O1Jvc3RvdnNraXkgOiAxIDogMjI0Ny4wCitLb3N0cm9tc2th72Egb2JsYXN0O05lcmVraHRhIDogMSA6IDEuNAorVHZlcnNrYe9hIG9ibGFzdCAoS2FsaW5pbjtLYXNoaW4gOiAxIDogMS4zCitUdmVyc2th72Egb2JsYXN0IChLYWxpbmluO0thbHlhemluc2tpeSA6IDEgOiAxNjk5LjAKK0l2YW5vdnNrYe9hIG9ibGFzdDtGdXJtYW5vdnNraXkgOiAxIDogNjY0LjcwMDAxCitUdmVyc2th72Egb2JsYXN0IChLYWxpbmluO0tpbXJza2l5IDogMSA6IDI1MDAuMgorSXZhbm92c2th72Egb2JsYXN0O1JvZG5pa292c2tpeSA6IDEgOiAxMDExLjkKK1R2ZXJza2HvYSBvYmxhc3QgKEthbGluaW47VG9yemhva3NraXkgOiAxIDogMzEwMS44CitJdmFub3Zza2HvYSBvYmxhc3Q7S29tc29tb2xza2l5IDogMSA6IDEwMTQuMgorSWFyb3NsYXZza2HvYSBvYmxhc3Q7Um9zdG92IDogMSA6IDU2LjI5OTk5OQorSXZhbm92c2th72Egb2JsYXN0O0Z1cm1hbm92IDogMSA6IDEuMAorSXZhbm92c2th72Egb2JsYXN0O1ZpY2h1Z2EgOiAxIDogMTQuNQorVHZlcnNrYe9hIG9ibGFzdCAoS2FsaW5pbjtQZW5vdnNraXkgOiAxIDogMjUxMC4wCitUdmVyc2th72Egb2JsYXN0IChLYWxpbmluO0t1dnNoaW5vdnNraXkgOiAxIDogMTkzNC44CitJdmFub3Zza2HvYSBvYmxhc3Q7SXZhbm92c2tpeSA6IDEgOiAxMTE0LjAKK0l2YW5vdnNrYe9hIG9ibGFzdDtMdWtoc2tpeSA6IDEgOiAxMDE1LjcKK0l2YW5vdnNrYe9hIG9ibGFzdDtJbHlpbnNraXkgOiAxIDogMTM0My44CitJYXJvc2xhdnNrYe9hIG9ibGFzdDtQZXJlc2xhdnNraXkgOiAxIDogMzI5OC41CitJdmFub3Zza2HvYSBvYmxhc3Q7UHVjaGV6aHNraXkgOiAxIDogNzUyLjUKK1R2ZXJza2HvYSBvYmxhc3QgKEthbGluaW47S2FsaW5pbnNraXkgOiAxIDogNDQ5MS4zOTk5CitUdmVyc2th72Egb2JsYXN0IChLYWxpbmluO0FuZHJlYXBvbHNraXkgOiAxIDogMjg4Ny44OTk5CitUdmVyc2th72Egb2JsYXN0IChLYWxpbmluO09zdGFzaGtvdiA6IDEgOiA0LjQwMDAwMDEKK0l2YW5vdnNrYe9hIG9ibGFzdDtJdmFub3ZvIDogMSA6IDEwNC4zCitUdmVyc2th72Egb2JsYXN0IChLYWxpbmluO1NlbGl6aGFyb3Zza2l5IDogMSA6IDMwNDQuOAorSXZhbm92c2th72Egb2JsYXN0O1NodWlza2l5IDogMSA6IDEwNzEuNworSXZhbm92c2th72Egb2JsYXN0O1RleWtvdnNraXkgOiAxIDogMTUxMi40CitUdmVyc2th72Egb2JsYXN0IChLYWxpbmluO1RvcnpzaG9rIDogMSA6IDEuMworVHZlcnNrYe9hIG9ibGFzdCAoS2FsaW5pbjtUb3JvcGV0c2tpeSA6IDEgOiAzMTY2Ljg5OTkKK0l2YW5vdnNrYe9hIG9ibGFzdDtMZXpobmV2c2tpeSA6IDEgOiA3ODIuMjk5OTkKK0l2YW5vdnNrYe9hIG9ibGFzdDtQYWxla2hza2l5IDogMSA6IDgyNi43MDAwMQorTW9za292c2th72Egb2JsYXN0IHLpc2lkdTtUYWxkb21za2l5IDogMSA6IDE5NTUuMworSXZhbm92c2th72Egb2JsYXN0O1ZlcmtobmVsYW5kZWtob3Zza2l5IDogMSA6IDY3OC40MDAwMgorVHZlcnNrYe9hIG9ibGFzdCAoS2FsaW5pbjtUdmVyIDogMSA6IDE1MS4zOTk5OQorVHZlcnNrYe9hIG9ibGFzdCAoS2FsaW5pbjtLb25ha292c2tpeSA6IDEgOiA0NzYuMjAwMDEKK0l2YW5vdnNrYe9hIG9ibGFzdDtTaHV5YSA6IDEgOiAxMy4xCitUdmVyc2th72Egb2JsYXN0IChLYWxpbmluO0tpbXJ5IDogMSA6IDIuMworSXZhbm92c2th72Egb2JsYXN0O1RleWtvdm8gOiAxIDogMS42CitUdmVyc2th72Egb2JsYXN0IChLYWxpbmluO1N0YXJpdHNraXkgOiAxIDogMzMwNi42MDAxCitJdmFub3Zza2HvYSBvYmxhc3Q7R2F2cmlsb3ZvLVBvc2Fkc2tpeSA6IDEgOiA5MzkuMDk5OTgKK1ZsYWRpbWlyc2th72Egb2JsYXN0O1l1cnlldi1Qb2xza2l5IDogMSA6IDE4OTguMAorSXZhbm92c2th72Egb2JsYXN0O1Blc3R5YWtvdnNraXkgOiAxIDogODY0LjU5OTk4CitNb3Nrb3Zza2HvYSBvYmxhc3QgculzaWR1O1phZ29yc2tpeSA6IDEgOiAyNDcyLjM5OTkKK01vc2tvdnNrYe9hIG9ibGFzdCBy6XNpZHU7RHVibmEgOiAxIDogNC44MDAwMDAyCitJdmFub3Zza2HvYSBvYmxhc3Q7WXV6aHNraXkgOiAxIDogMTQ5My44CitSVS1VTkstMjg1OSA6IDEgOiAxLjIKK1R2ZXJza2HvYSBvYmxhc3QgKEthbGluaW47S29uYWtvdm8gOiAxIDogMS43CitJdmFub3Zza2HvYSBvYmxhc3Q7U2F2aW5za2l5IDogMSA6IDExMjMuMQorVmxhZGltaXJza2HvYSBvYmxhc3Q7QWxla3NhbmRyb3Zza2l5IDogMSA6IDE1MzYuOAorVHZlcnNrYe9hIG9ibGFzdCAoS2FsaW5pbjtSemhldnNraXkgOiAxIDogMjg1NS44OTk5CitNb3Nrb3Zza2HvYSBvYmxhc3QgculzaWR1O0RtaXRyb3Zza2l5IDogMSA6IDIwNzQuMAorVmxhZGltaXJza2HvYSBvYmxhc3Q7U3V6ZGFsc2tpeSA6IDEgOiAxNTE0LjEKK1R2ZXJza2HvYSBvYmxhc3QgKEthbGluaW47TmVsaWRvdnNraXkgOiAxIDogMjc1Ny4yCitNb3Nrb3Zza2HvYSBvYmxhc3QgculzaWR1O0tsaW5za2l5IDogMSA6IDIwNTEuMworVmxhZGltaXJza2HvYSBvYmxhc3Q7S2FtZXNoa292c2tpeSA6IDEgOiAxMTgxLjEKK1ZsYWRpbWlyc2th72Egb2JsYXN0O0tvdnJvdnNraXkgOiAxIDogMTcyMy4xCitUdmVyc2th72Egb2JsYXN0IChLYWxpbmluO09sZW5pbnNraXkgOiAxIDogMjc5NS44OTk5CitUdmVyc2th72Egb2JsYXN0IChLYWxpbmluO1phcGFkbm9kdmluc2tpeSA6IDEgOiAyNTMyLjMKK1ZsYWRpbWlyc2th72Egb2JsYXN0O0tvbGNodWdpbnNraXkgOiAxIDogMTA1MC42CitWbGFkaW1pcnNrYe9hIG9ibGFzdDtWeWF6bmlrb3Zza2l5IDogMSA6IDIxNDAuODk5OQorVmxhZGltaXJza2HvYSBvYmxhc3Q7U3V6ZGFsJyA6IDEgOiAxMi4yCitWbGFkaW1pcnNrYe9hIG9ibGFzdDtHb3Jva2hvdmV0c2tpeSA6IDEgOiAxMzc1LjkKK01vc2tvdnNrYe9hIG9ibGFzdCBy6XNpZHU7TG90b3NoaW5za2l5IDogMSA6IDc5Mi4yOTk5OQorVmxhZGltaXJza2HvYSBvYmxhc3Q7S292cm92IDogMSA6IDI1LjcwMDAwMQorUlUtVU5LLTI4NjAgOiAxIDogMi44CitWbGFkaW1pcnNrYe9hIG9ibGFzdDtBbGVrc2FuZHJvdiA6IDEgOiAyMC4yMDAwMDEKK01vc2tvdnNrYe9hIG9ibGFzdCBy6XNpZHU7S2xpbiA6IDEgOiAyMS43OTk5OTkKK01vc2tvdnNrYe9hIG9ibGFzdCBy6XNpZHU7U2VyZ2lldiBQb3NhZCA6IDEgOiAxMC4yCitWbGFkaW1pcnNrYe9hIG9ibGFzdDtLaXJ6aGFjaHNraXkgOiAxIDogMTE1MS4yCitUdmVyc2th72Egb2JsYXN0IChLYWxpbmluO1p1YnRzb3Zza2l5IDogMSA6IDIwOTYuOAorTW9za292c2th72Egb2JsYXN0IHLpc2lkdTtTb2xuZWNobm9nb3Jza2l5IDogMSA6IDEwODkuMAorVmxhZGltaXJza2HvYSBvYmxhc3Q7S29sJ2NodWdpbm8gOiAxIDogMTEuMworTW9za292c2th72Egb2JsYXN0IHLpc2lkdTtWb2xva29sYW1za2l5IDogMSA6IDE2MTYuNworVmxhZGltaXJza2HvYSBvYmxhc3Q7U29iaW5za2l5IDogMSA6IDE4MTAuMAorVHZlcnNrYe9hIG9ibGFzdCAoS2FsaW5pbjtSenNoZXYgOiAxIDogMi4yCitWbGFkaW1pcnNrYe9hIG9ibGFzdDtWeWF6bmlraSA6IDEgOiAxNi45CitNb3Nrb3Zza2HvYSBvYmxhc3QgculzaWR1O1NjaGVsa292c2tpeSA6IDEgOiA4MzUuMjAwMDEKK1R2ZXJza2HvYSBvYmxhc3QgKEthbGluaW47TmVsaWRvdm8gOiAxIDogMS44CitNb3Nrb3Zza2HvYSBvYmxhc3QgculzaWR1O1NoYWtob3Zza295IDogMSA6IDEwNDMuNgorTW9za292c2th72Egb2JsYXN0IHLpc2lkdTtTb2xuZWNobm9nb3JzayA6IDEgOiA5Ljg5OTk5OTYKK01vc2tvdnNrYe9hIG9ibGFzdCBy6XNpZHU7UHVzaGtpbnNraXkgOiAxIDogNjY5LjU5OTk4CitUdmVyc2th72Egb2JsYXN0IChLYWxpbmluO1poYXJrb3Zza2l5IDogMSA6IDIwNzEuOAorVmxhZGltaXJza2HvYSBvYmxhc3Q7VmxhZGltaXIgOiAxIDogMTA0LjAKK1ZsYWRpbWlyc2th72Egb2JsYXN0O1BldHVzaGtpbnNraXkgOiAxIDogMTg2Ni4wCitWbGFkaW1pcnNrYe9hIG9ibGFzdDtTdWRvZ29kc2tpeSA6IDEgOiAyMjk3LjAKK01vc2tvdnNrYe9hIG9ibGFzdCBy6XNpZHU7S3Jhc25vYXJtZXlzayA6IDEgOiA1LjA5OTk5OTkKK1JVLVVOSy0yODYxIDogMSA6IDEuMAorTW9za292c2th72Egb2JsYXN0IHLpc2lkdTtJc3RyaW5za2l5IDogMSA6IDEzODMuMQorTW9za292c2th72Egb2JsYXN0IHLpc2lkdTtNeXRpc2NoaW5za2l5IDogMSA6IDQyNi4wCitUdmVyc2th72Egb2JsYXN0IChLYWxpbmluO0JlbHNraXkgOiAxIDogMTkwMi4wCitTbW9sZW5za2HvYSBvYmxhc3Q7U3ljaGV2a3NraXkgOiAxIDogMTk5NC4xCitNb3Nrb3Zza2HvYSBvYmxhc3QgculzaWR1O05vZ2luc2tpeSA6IDEgOiA5NjAuNTk5OTgKK01vc2tvdnNrYe9hIG9ibGFzdCBy6XNpZHU7Vm9sb2tvbGFtc2sgOiAxIDogMTAuNAorTW9za292c2th72Egb2JsYXN0IHLpc2lkdTtQdXNjaGlubyA6IDEgOiA0LjY5OTk5OTgKK1ZsYWRpbWlyc2th72Egb2JsYXN0O1NlbGl2YW5vdnNraXkgOiAxIDogMTQ5Ny4xCitWbGFkaW1pcnNrYe9hIG9ibGFzdDtTb2JpbmthIDogMSA6IDguMAorTW9za292c2th72Egb2JsYXN0IHLpc2lkdTtSdXpza2l5IDogMSA6IDEzNTEuMgorTW9za292c2th72Egb2JsYXN0IHLpc2lkdTtQYXZsb3ZvLVBvc2Fkc2tpeSA6IDEgOiA2NTkuNzk5OTkKK1Ntb2xlbnNrYe9hIG9ibGFzdDtHYWdhcmluc2tpeSA6IDEgOiAzMzY4LjMKK01vc2tvdnNrYe9hIG9ibGFzdCBy6XNpZHU7TG9ibnlhIDogMSA6IDEuMAorTW9za292c2th72Egb2JsYXN0IHLpc2lkdTtJdmFudGV5ZXZrYSA6IDEgOiA4LjgwMDAwMDIKK01vc2tvdnNrYe9hIG9ibGFzdCBy6XNpZHU7RnJ5YXppbm8gOiAxIDogNS41CitNb3Nrb3Zza2HvYSBvYmxhc3QgculzaWR1O0toaW1raW5za2l5IDogMSA6IDEyNy43CitNb3Nrb3Zza2HvYSBvYmxhc3QgculzaWR1O0RvbGdvcHJ1ZG55aSA6IDEgOiA2LjgwMDAwMDIKK01vc2tvdnNrYe9hIG9ibGFzdCBy6XNpZHU7U2hjaGVsa292byA6IDEgOiA5LjY5OTk5OTgKK1ZsYWRpbWlyc2th72Egb2JsYXN0O011cm9tc2tpeSA6IDEgOiAxMDIzLjgKK01vc2t2YTtNb3Njb3cgOiAxIDogOTg0Ljc5OTk5CitNb3Nrb3Zza2HvYSBvYmxhc3QgculzaWR1O1B1c2hraW5vIDogMSA6IDkuMTAwMDAwNAorTW9za292c2th72Egb2JsYXN0IHLpc2lkdTtNeXR5c2hjaHkgOiAxIDogMTAuMgorTW9za292c2th72Egb2JsYXN0IHLpc2lkdTtJc3RyYSA6IDEgOiA1LjY5OTk5OTgKK1JVLVVOSy0yODYyIDogMSA6IDEuMAorTW9za292c2th72Egb2JsYXN0IHLpc2lkdTtLaGlta2kgOiAxIDogNy41CitNb3Nrb3Zza2HvYSBvYmxhc3QgculzaWR1O05vZ2luc2sgOiAxIDogMzIuMAorTW9za292c2th72Egb2JsYXN0IHLpc2lkdTtLYWxpbmluZ3JhZCA6IDEgOiAxMS45CitNb3Nrb3Zza2HvYSBvYmxhc3QgculzaWR1O0tyYXNub2dvcnNraXkgOiAxIDogMjM2LjcKK1ZsYWRpbWlyc2th72Egb2JsYXN0O0d1cy1LaHJ1c3RhbG55aSA6IDEgOiA0NDU4LjEwMDEKK01vc2tvdnNrYe9hIG9ibGFzdCBy6XNpZHU7T3Jla2hvdm8tWnV5ZXZza2l5IDogMSA6IDE4MjEuOAorTW9za292c2th72Egb2JsYXN0IHLpc2lkdTtCYWxhc2hpa2hpbnNraXkgOiAxIDogMjU4LjM5OTk5CitNb3Nrb3Zza2HvYSBvYmxhc3QgculzaWR1O09yZWtob3ZvLVp1ZXZvIDogMSA6IDguMTAwMDAwNAorTW9za292c2th72Egb2JsYXN0IHLpc2lkdTtNb3poYXlza2l5IDogMSA6IDI2MTguMzk5OQorTW9za292c2th72Egb2JsYXN0IHLpc2lkdTtLcmFzbm9nb3JzayA6IDEgOiA3LjkwMDAwMDEKK01vc2tvdnNrYe9hIG9ibGFzdCBy6XNpZHU7U2hhdHVyc2tpeSA6IDEgOiAyNTA1LjgKK01vc2tvdnNrYe9hIG9ibGFzdCBy6XNpZHU7RWxla3Ryb3N0YWwgOiAxIDogMTYuNgorTW9za292c2th72Egb2JsYXN0IHLpc2lkdTtCYWxhc2hpa2hhIDogMSA6IDIuMDk5OTk5OQorTW9za292c2th72Egb2JsYXN0IHLpc2lkdTtSZXV0b3YgOiAxIDogNy45MDAwMDAxCitNb3Nrb3Zza2HvYSBvYmxhc3QgculzaWR1O09kaW50c292c2tpeSA6IDEgOiAxMTQ0LjgKK01vc2tvdnNrYe9hIG9ibGFzdCBy6XNpZHU7WmhlbGV6bm9kb3JvemhueWkgOiAxIDogOC44MDAwMDAyCitTbW9sZW5za2HvYSBvYmxhc3Q7Tm92b2R1Z2luc2tpeSA6IDEgOiAxOTQwLjEKK1Ntb2xlbnNrYe9hIG9ibGFzdDtWZWxpemhza2l5IDogMSA6IDE1NjAuMgorTW9za292c2th72Egb2JsYXN0IHLpc2lkdTtadmVuaWdvcm9kIDogMSA6IDUuODAwMDAwMgorU21vbGVuc2th72Egb2JsYXN0O0RlbWlkb3Zza2l5IDogMSA6IDI5MjcuNjAwMQorU21vbGVuc2th72Egb2JsYXN0O0tob2xtLVpoaXJrb3Zza2l5IDogMSA6IDI1NzMuNworU21vbGVuc2th72Egb2JsYXN0O0R1a2hvdnNjaGluc2tpeSA6IDEgOiAyODI1LjEwMDEKK01vc2tvdnNrYe9hIG9ibGFzdCBy6XNpZHU7THl1YmVyZXRza2l5IDogMSA6IDc1LjMwMDAwMworTW9za292c2th72Egb2JsYXN0IHLpc2lkdTtPZGludHNvdm8gOiAxIDogMTMuNQorVmxhZGltaXJza2HvYSBvYmxhc3Q7R3VzJy1LaHJ1c3RhbG55IDogMSA6IDE5LjIwMDAwMQorTW9za292c2th72Egb2JsYXN0IHLpc2lkdTtSYW1lbnNraXkgOiAxIDogMTQ0NC40CitNb3Nrb3Zza2HvYSBvYmxhc3QgculzaWR1O0xlbmluc2tpeSA6IDEgOiA0NzIuNQorTW9za292c2th72Egb2JsYXN0IHLpc2lkdTtMaXViZXJ0c3kgOiAxIDogMS44CitWbGFkaW1pcnNrYe9hIG9ibGFzdDtNZWxlbmtvdnNraXkgOiAxIDogMjE3MC4xMDAxCitNb3Nrb3Zza2HvYSBvYmxhc3QgculzaWR1O1podWtvdnNraXkgOiAxIDogNC4xOTk5OTk4CitNb3Nrb3Zza2HvYSBvYmxhc3QgculzaWR1O05hcm8tRm9taW5za2l5IDogMSA6IDE5NDMuMAorTW9za292c2th72Egb2JsYXN0IHLpc2lkdTtSYW1lbnNrb2UgOiAxIDogMTUuNAorTW9za292c2th72Egb2JsYXN0IHLpc2lkdTtTaGF0dXJhIDogMSA6IDUuODAwMDAwMgorVmxhZGltaXJza2HvYSBvYmxhc3Q7TXVyb20gOiAxIDogMjMuNzk5OTk5CitTbW9sZW5za2HvYSBvYmxhc3Q7R2FnYXJpbiA6IDEgOiA5LjMwMDAwMDIKK01vc2tvdnNrYe9hIG9ibGFzdCBy6XNpZHU7Vmlkbm95ZSA6IDEgOiAzLjAKK01vc2tvdnNrYe9hIG9ibGFzdCBy6XNpZHU7THl0a2FyaW5vIDogMSA6IDEuMworTW9za292c2th72Egb2JsYXN0IHLpc2lkdTtWb3NrcmVzZW5za2l5IDogMSA6IDgyOC41OTk5OAorTW9za292c2th72Egb2JsYXN0IHLpc2lkdTtQb2RvbHNraXkgOiAxIDogMTA2NS4yCitNb3Nrb3Zza2HvYSBvYmxhc3QgculzaWR1O01venNoYXlzayA6IDEgOiA5LjYwMDAwMDQKK01vc2tvdnNrYe9hIG9ibGFzdCBy6XNpZHU7VHJvaXRzayA6IDEgOiAyLjU5OTk5OTkKK01vc2tvdnNrYe9hIG9ibGFzdCBy6XNpZHU7WWVnb3J5ZXZza2l5IDogMSA6IDE2MTAuOQorU21vbGVuc2th72Egb2JsYXN0O1lhcnRzZXZza2l5IDogMSA6IDE1MTEuNAorUlUtVU5LLTI4NjMgOiAxIDogMS4wCitNb3Nrb3Zza2HvYSBvYmxhc3QgculzaWR1O0RvbW9kZWRvdnNraXkgOiAxIDogNzI3LjcwMDAxCitNb3Nrb3Zza2HvYSBvYmxhc3QgculzaWR1O1BvZG9sc2sgOiAxIDogMjguMQorTW9za292c2th72Egb2JsYXN0IHLpc2lkdTtEb21vZGVkb3ZvIDogMSA6IDcuOTAwMDAwMQorU21vbGVuc2th72Egb2JsYXN0O1Z5YXplbXNraXkgOiAxIDogMzM5Ni43CitNb3Nrb3Zza2HvYSBvYmxhc3QgculzaWR1O0Vnb3J5ZXZzayA6IDEgOiAxNi42CitNb3Nrb3Zza2HvYSBvYmxhc3QgculzaWR1O05hcm8tRm9taW5zayA6IDEgOiAyMC4yMDAwMDEKK01vc2tvdnNrYe9hIG9ibGFzdCBy6XNpZHU7S2xpbW92c2sgOiAxIDogOC41CitNb3Nrb3Zza2HvYSBvYmxhc3QgculzaWR1O1Zvc2tyZXNlbnNrIDogMSA6IDIyLjI5OTk5OQorUnlhemFuc2th72Egb2JsYXN0O0tsZXBpa292c2tpeSA6IDEgOiAzMDY1LjIKK1Ntb2xlbnNrYe9hIG9ibGFzdDtSdWRueWFuc2tpeSA6IDEgOiAxNTk3LjYKK01vc2tvdnNrYe9hIG9ibGFzdCBy6XNpZHU7QnJvbm5pdHN5IDogMSA6IDEuNgorS2Fsb3Vqc2th72Egb2JsYXN0O0Jvcm92c2tpeSA6IDEgOiA4NzAuMjAwMDEKK1Ntb2xlbnNrYe9hIG9ibGFzdDtTYWZvbm92c2tpeSA6IDEgOiAyMjQ5LjcKK01vc2tvdnNrYe9hIG9ibGFzdCBy6XNpZHU7Q2hla2hvdnNraXkgOiAxIDogODkwLjc5OTk5CitLYWxvdWpza2HvYSBvYmxhc3Q7SXpub3Nrb3Zza2l5IDogMSA6IDEzODYuNgorS2Fsb3Vqc2th72Egb2JsYXN0O01lZHluc2tpeSA6IDEgOiAxMDQ5LjEKK1Ntb2xlbnNrYe9hIG9ibGFzdDtUeW9ta2luc2tpeSA6IDEgOiAxMzgwLjgKK01vc2tvdnNrYe9hIG9ibGFzdCBy6XNpZHU7U3R1cGluc2tpeSA6IDEgOiAxNzQzLjAKK01vc2tvdnNrYe9hIG9ibGFzdCBy6XNpZHU7S29sb21lbnNraXkgOiAxIDogMTE0My4zCitLYWxvdWpza2HvYSBvYmxhc3Q7Wmh1a292c2tpeSA6IDEgOiAxMzU0LjkKK1J5YXphbnNrYe9hIG9ibGFzdDtLYXNpbW92c2tpeSA6IDEgOiAzMjMyLjMKK1Ntb2xlbnNrYe9hIG9ibGFzdDtWeWF6bWEgOiAxIDogNDYuNzk5OTk5CitSVS1VTkstMjg2NCA6IDEgOiAzNi43OTk5OTkKK1Ntb2xlbnNrYe9hIG9ibGFzdDtTYWZvbm92byA6IDEgOiAyNS43MDAwMDEKK0thbG91anNrYe9hIG9ibGFzdDtNYWxveWFyb3NsYXZldHNraXkgOiAxIDogMTcwMy42CitLYWxvdWpza2HvYSBvYmxhc3Q7T2JuaW5zayA6IDEgOiAxMC40CitTbW9sZW5za2HvYSBvYmxhc3Q7U21vbGVuc2tpeSA6IDEgOiAyNjkyLjYwMDEKK01vc2tvdnNrYe9hIG9ibGFzdCBy6XNpZHU7THVraG92aXRza2l5IDogMSA6IDExNjEuMQorTW9za292c2th72Egb2JsYXN0IHLpc2lkdTtLb2xvbW5hIDogMSA6IDIxLjc5OTk5OQorU21vbGVuc2th72Egb2JsYXN0O1lhcnRzZXZvIDogMSA6IDIxLjEKK01vc2tvdnNrYe9hIG9ibGFzdCBy6XNpZHU7U2VycHVraG92c2tpeSA6IDEgOiA5MzguOTAwMDIKK1J5YXphbnNrYe9hIG9ibGFzdDtSeWJub3Zza2l5IDogMSA6IDE2NjUuOAorUnlhemFuc2th72Egb2JsYXN0O1llcm1pc2hpbnNraXkgOiAxIDogMTI3OS4zCitNb3Nrb3Zza2HvYSBvYmxhc3QgculzaWR1O096eW9yc2tpeSA6IDEgOiA1MjUuOTAwMDIKK1Ntb2xlbnNrYe9hIG9ibGFzdDtLYXJkeW1vdnNraXkgOiAxIDogMTA0NC4wCitTbW9sZW5za2HvYSBvYmxhc3Q7VWdyYW5za2l5IDogMSA6IDI1MTAuODk5OQorTW9za292c2th72Egb2JsYXN0IHLpc2lkdTtTdHVwaW5vIDogMSA6IDcuMzAwMDAwMgorU21vbGVuc2th72Egb2JsYXN0O0Rvcm9nb2J1emhza2l5IDogMSA6IDE5MDYuMgorS2Fsb3Vqc2th72Egb2JsYXN0O0R6ZXJ6aGluc2tpeSA6IDEgOiAxMjI0LjMKK1J5YXphbnNrYe9hIG9ibGFzdDtLYXNpbW92IDogMSA6IDE2LjI5OTk5OQorS2Fsb3Vqc2th72Egb2JsYXN0O1l1a2hub3Zza2l5IDogMSA6IDEzODQuNAorTW9za292c2th72Egb2JsYXN0IHLpc2lkdTtTZXJwdWtob3YgOiAxIDogMjUuMQorUnlhemFuc2th72Egb2JsYXN0O1J5YXphbnNraXkgOiAxIDogMjA3MS42MDAxCitSVS1VTkstMjg2NSA6IDEgOiAyLjA5OTk5OTkKK01vc2tvdnNrYe9hIG9ibGFzdCBy6XNpZHU7WmFyYXlza2l5IDogMSA6IDc3OC40MDAwMgorS2Fsb3Vqc2th72Egb2JsYXN0O1RhcnVzc2tpeSA6IDEgOiA4MTAuOTAwMDIKK01vc2tvdnNrYe9hIG9ibGFzdCBy6XNpZHU7T3plcnkgOiAxIDogMTEuNAorUnlhemFuc2th72Egb2JsYXN0O1NwYXNza2l5IDogMSA6IDI2MjYuNjAwMQorTW9za292c2th72Egb2JsYXN0IHLpc2lkdTtLYXNoaXJza2l5IDogMSA6IDUzNy4yOTk5OQorTW9za292c2th72Egb2JsYXN0IHLpc2lkdTtLYXNoaXJhIDogMSA6IDYuMDk5OTk5OQorUnlhemFuc2th72Egb2JsYXN0O1NoaWxvdnNraXkgOiAxIDogMjM3My4zOTk5CitUb3Vsc2th72Egb2JsYXN0O1phb2tza2l5IDogMSA6IDkzMC41OTk5OAorVG91bHNrYe9hIG9ibGFzdDtZYXNub2dvcnNraXkgOiAxIDogMTI0MC40CitTbW9sZW5za2HvYSBvYmxhc3Q7R2xpbmtvdnNraXkgOiAxIDogMTE4OC45CitNb3Nrb3Zza2HvYSBvYmxhc3QgculzaWR1O1phcmF5c2sgOiAxIDogNy41CitSeWF6YW5za2HvYSBvYmxhc3Q7UGl0ZWxpbnNraXkgOiAxIDogODg1Ljc5OTk5CitTbW9sZW5za2HvYSBvYmxhc3Q7U21vbGVuc2sgOiAxIDogMTk0LjUKK0thbG91anNrYe9hIG9ibGFzdDtNb3NhbHNraXkgOiAxIDogMTI1MC44CitSeWF6YW5za2HvYSBvYmxhc3Q7S2Fkb21za2l5IDogMSA6IDk0NC4wCitLYWxvdWpza2HvYSBvYmxhc3Q7RmVyemlrb3Zza2l5IDogMSA6IDEzNTguMgorVG91bHNrYe9hIG9ibGFzdDtWZW5ldnNraXkgOiAxIDogMTkzMy44CitLYWxvdWpza2HvYSBvYmxhc3Q7S2FsdWdhIDogMSA6IDM4NS4xMDAwMQorUnlhemFuc2th72Egb2JsYXN0O1J5YXphbiA6IDEgOiAxNTYuMAorU21vbGVuc2th72Egb2JsYXN0O0tyYXNuaW5za2l5IDogMSA6IDEwNTAuMgorVG91bHNrYe9hIG9ibGFzdDtBbGVrc2luc2tpeSA6IDEgOiA5NzkuNQorU21vbGVuc2th72Egb2JsYXN0O1llbG5pbnNraXkgOiAxIDogMjExMS4wCitNb3Nrb3Zza2HvYSBvYmxhc3QgculzaWR1O1NlcmVicnlhbm9wcnVkc2tpeSA6IDEgOiA3ODguNzk5OTkKK1J5YXphbnNrYe9hIG9ibGFzdDtaYWtoYXJvdnNraXkgOiAxIDogOTE2LjkwMDAyCitLYWxvdWpza2HvYSBvYmxhc3Q7QmFieW5pbnNraXkgOiAxIDogODM5LjIwMDAxCitTbW9sZW5za2HvYSBvYmxhc3Q7UG9jaGlua292c2tpeSA6IDEgOiAyMjc3LjgKK0thbG91anNrYe9hIG9ibGFzdDtTcGFzLURlbWVuc2tpeSA6IDEgOiAxMzU0LjUKK0thbG91anNrYe9hIG9ibGFzdDtCYXJ5YXRpbnNraXkgOiAxIDogMTEyMy4wCitLYWxvdWpza2HvYSBvYmxhc3Q7TWVzY2hvdnNraXkgOiAxIDogMTMwNy4wCitSeWF6YW5za2HvYSBvYmxhc3Q7U2Fzb3Zza2l5IDogMSA6IDE3MzQuOAorUnlhemFuc2th72Egb2JsYXN0O0NodWNoa292c2tpeSA6IDEgOiA3OTYuNDAwMDIKK1RvdWxza2HvYSBvYmxhc3Q7QWxla3NpbiA6IDEgOiAxLjAKK1Ntb2xlbnNrYe9hIG9ibGFzdDtNb25hc3R5cnNoaW5za2l5IDogMSA6IDEwMzUuOQorS2Fsb3Vqc2th72Egb2JsYXN0O1BlcmVteXNobHNraXkgOiAxIDogOTk5LjU5OTk4CitSeWF6YW5za2HvYSBvYmxhc3Q7U3Rhcm96aGlsb3Zza2l5IDogMSA6IDk4NS45MDAwMgorUnlhemFuc2th72Egb2JsYXN0O01pa2hheWxvdnNraXkgOiAxIDogMTc2OC43CitSeWF6YW5za2HvYSBvYmxhc3Q7UHJvbnNraXkgOiAxIDogMTA5NS4xCitUb3Vsc2th72Egb2JsYXN0O0xlbmluc2tpeSA6IDEgOiAxMzA1LjUKK1J5YXphbnNrYe9hIG9ibGFzdDtTYXNvdm8gOiAxIDogOC4xOTk5OTk4CitLYWxvdWpza2HvYSBvYmxhc3Q7U3VraGluaWNoc2tpeSA6IDEgOiAxMDc1LjIKK1RvdWxza2HvYSBvYmxhc3Q7Tm92b21vc2tvdnNraXkgOiAxIDogNjAyLjAKK0thbG91anNrYe9hIG9ibGFzdDtLb3plbHNraXkgOiAxIDogMTczNy40CitUb3Vsc2th72Egb2JsYXN0O0R1YmVuc2tpeSA6IDEgOiA3MjcuOTAwMDIKK1J5YXphbnNrYe9hIG9ibGFzdDtQdXR5YXRpbnNraXkgOiAxIDogMTAwMi42CitLYWxvdWpza2HvYSBvYmxhc3Q7S3V5YnlzaGV2c2tpeSA6IDEgOiAxMDk2LjYKK1RvdWxza2HvYSBvYmxhc3Q7U3V2b3JvdnNraXkgOiAxIDogMTAyOS43CitUb3Vsc2th72Egb2JsYXN0O1R1bGEgOiAxIDogMTU5LjM5OTk5CitTbW9sZW5za2HvYSBvYmxhc3Q7Um9zbGF2bHNraXkgOiAxIDogMjQ1MS4zOTk5CitSeWF6YW5za2HvYSBvYmxhc3Q7U2hhdHNraXkgOiAxIDogMjQ2MC44OTk5CitUb3Vsc2th72Egb2JsYXN0O0tpcmV5ZXZza2l5IDogMSA6IDkzMS41OTk5OAorS2Fsb3Vqc2th72Egb2JsYXN0O0tpcm92c2tpeSA6IDEgOiA5MzQuMjk5OTkKK1Ntb2xlbnNrYe9hIG9ibGFzdDtLaGlzbGF2aWNoc2tpeSA6IDEgOiA2OTQuMDk5OTgKK0thbG91anNrYe9hIG9ibGFzdDtEdW1pbmljaHNraXkgOiAxIDogMTA3OC45CitSeWF6YW5za2HvYSBvYmxhc3Q7S29yYWJsaW5za2l5IDogMSA6IDEyMDEuMworUnlhemFuc2th72Egb2JsYXN0O1NhcG96aGtvdnNraXkgOiAxIDogOTg3LjcwMDAxCitUb3Vsc2th72Egb2JsYXN0O09kb3lldnNraXkgOiAxIDogMTIwMS4wCitUb3Vsc2th72Egb2JsYXN0O0tpbW92c2tpeSA6IDEgOiAxMTM4LjcKK0thbG91anNrYe9hIG9ibGFzdDtLaXJvdiA6IDEgOiAxMC4zCitLYWxvdWpza2HvYSBvYmxhc3Q7THl1ZGlub3Zza2l5IDogMSA6IDkyNy4yOTk5OQorVG91bHNrYe9hIG9ibGFzdDtVemxvdnNraXkgOiAxIDogNjMxLjAKK1RvdWxza2HvYSBvYmxhc3Q7U2NoZWtpbnNraXkgOiAxIDogMTMwMS40CitCcnlhbnNrYe9hIG9ibGFzdDtSb2duZWRpbnNraXkgOiAxIDogMTA0Mi44CitTbW9sZW5za2HvYSBvYmxhc3Q7RGVzbm9nb3JzayA6IDEgOiAxLjkKK1RvdWxza2HvYSBvYmxhc3Q7Tm92b21vc2tvdnNrIDogMSA6IDEuMworU21vbGVuc2th72Egb2JsYXN0O1NodW15YWNoc2tpeSA6IDEgOiAxMDc5LjcKK1RvdWxza2HvYSBvYmxhc3Q7RG9uc2tveSA6IDEgOiAxLjAKK1J5YXphbnNrYe9hIG9ibGFzdDtTYXJheWV2c2tpeSA6IDEgOiAxOTMxLjQKK1RvdWxza2HvYSBvYmxhc3Q7U2NoZWtpbm8gOiAxIDogMS4wCitUb3Vsc2th72Egb2JsYXN0O1V6bG92YXlhIDogMSA6IDEuMAorVG91bHNrYe9hIG9ibGFzdDtCZWx5ZXZza2l5IDogMSA6IDk1OC41OTk5OAorUnlhemFuc2th72Egb2JsYXN0O1VraG9sb3Zza2l5IDogMSA6IDEwNzMuOAorUnlhemFuc2th72Egb2JsYXN0O1Nrb3BpbnNraXkgOiAxIDogMTU4MS42CitTbW9sZW5za2HvYSBvYmxhc3Q7Um9zbGF2bCcgOiAxIDogMjUuNAorVG91bHNrYe9hIG9ibGFzdDtLaW1vdnNrIDogMSA6IDEuMAorS2Fsb3Vqc2th72Egb2JsYXN0O1VseWFub3Zza2l5IDogMSA6IDE3MDYuMQorS2Fsb3Vqc2th72Egb2JsYXN0O0x5dWRpbm92byA6IDEgOiAxOS41CitLYWxvdWpza2HvYSBvYmxhc3Q7WmhpemRyaW5za2l5IDogMSA6IDE0MjUuOQorQnJ5YW5za2HvYSBvYmxhc3Q7RHlhdGtvdnNraXkgOiAxIDogMTMzMS4xCitSeWF6YW5za2HvYSBvYmxhc3Q7Unlhemhza2l5IDogMSA6IDEwNTUuNAorQnJ5YW5za2HvYSBvYmxhc3Q7RHVicm92c2tpeSA6IDEgOiAxMDYxLjkKK1RvdWxza2HvYSBvYmxhc3Q7Qm9nb3JvZGl0c2tpeSA6IDEgOiA4ODcuNQorUnlhemFuc2th72Egb2JsYXN0O1Nrb3BpbiA6IDEgOiA1LjUKK1RvdWxza2HvYSBvYmxhc3Q7UGxhdnNraXkgOiAxIDogOTk5LjIwMDAxCitSeWF6YW5za2HvYSBvYmxhc3Q7TWlsb3NsYXZza2l5IDogMSA6IDE0MzUuMgorVG91bHNrYe9hIG9ibGFzdDtUZXBsby1PZ2FyZXZza2l5IDogMSA6IDEwMDEuNQorVG91bHNrYe9hIG9ibGFzdDtBcnNlbnlldnNraXkgOiAxIDogMTA4NC42CitUb3Vsc2th72Egb2JsYXN0O0JvZ29yb2RpdHNrIDogMSA6IDEuMAorQnJ5YW5za2HvYSBvYmxhc3Q7Wmh1a292c2tpeSA6IDEgOiAxMDI2LjMKK1Ntb2xlbnNrYe9hIG9ibGFzdDtZZXJzaGljaHNraXkgOiAxIDogODQ4LjUKK0thbG91anNrYe9hIG9ibGFzdDtLaHZhc3RvdmljaHNraXkgOiAxIDogMTYxNy41CitUb3Vsc2th72Egb2JsYXN0O1ZvbG92c2tpeSA6IDEgOiAxMTAxLjMKK1RvdWxza2HvYSBvYmxhc3Q7S3Vya2luc2tpeSA6IDEgOiAxMDgxLjAKK1RvdWxza2HvYSBvYmxhc3Q7Q2hlcm5za2l5IDogMSA6IDEzOTQuNgorQnJ5YW5za2HvYSBvYmxhc3Q7S2xldG55YW5za2l5IDogMSA6IDE2NjcuOAorUnlhemFuc2th72Egb2JsYXN0O05vdm9kZXJldmVuc2tpeSA6IDEgOiA4NTEuMAorT3Jsb3Zza2HvYSBvYmxhc3Q7Qm9sa2hvdnNraXkgOiAxIDogMTM0MC4xCitCcnlhbnNrYe9hIG9ibGFzdDtEeWF0J2tvdm8gOiAxIDogMS4wCitCcnlhbnNrYe9hIG9ibGFzdDtCcnlhbnNraXkgOiAxIDogMTk0MC41CitPcmxvdnNrYe9hIG9ibGFzdDtabmFtZW5za2l5IDogMSA6IDcxMS41OTk5OAorT3Jsb3Zza2HvYSBvYmxhc3Q7TXRzZW5za2l5IDogMSA6IDE2NjkuMQorVG91bHNrYe9hIG9ibGFzdDtLYW1lbnNraXkgOiAxIDogNzE2LjAKK1RvdWxza2HvYSBvYmxhc3Q7WWVmcmVtb3Zza2l5IDogMSA6IDE3MzEuMQorT3Jsb3Zza2HvYSBvYmxhc3Q7S2hvdHluZXRza2l5IDogMSA6IDg0OC41CitCcnlhbnNrYe9hIG9ibGFzdDtLYXJhY2hldnNraXkgOiAxIDogMTMxNC42CitCcnlhbnNrYe9hIG9ibGFzdDtTdXJhemhza2l5IDogMSA6IDEzMTkuNgorQnJ5YW5za2HvYSBvYmxhc3Q7QnJ5YW5zayA6IDEgOiAxMzQuODk5OTkKK0JyeWFuc2th72Egb2JsYXN0O1poaXJ5YXRpbnNraXkgOiAxIDogNjE1LjIwMDAxCitSVS1VTkstMjg2NiA6IDEgOiAxLjAKK09ybG92c2th72Egb2JsYXN0O016ZW5zayA6IDEgOiA1LjQwMDAwMDEKK0JyeWFuc2th72Egb2JsYXN0O01nbGluc2tpeSA6IDEgOiA4NjYuMDk5OTgKK09ybG92c2th72Egb2JsYXN0O0tvcnNha292c2tpeSA6IDEgOiA2NjIuNQorT3Jsb3Zza2HvYSBvYmxhc3Q7T3Jsb3Zza2l5IDogMSA6IDE3ODguNgorQnJ5YW5za2HvYSBvYmxhc3Q7S3Jhc25vZ29yc2tpeSA6IDEgOiAxMjQ4LjIKK0JyeWFuc2th72Egb2JsYXN0O1Z5Z29uaWNoc2tpeSA6IDEgOiA5OTguNDAwMDIKK0JyeWFuc2th72Egb2JsYXN0O1BvY2hlcHNraXkgOiAxIDogMjA3NS4zCitPcmxvdnNrYe9hIG9ibGFzdDtOb3Zvc2lsc2tpeSA6IDEgOiA2ODUuNDAwMDIKK09ybG92c2th72Egb2JsYXN0O1VyaXRza2l5IDogMSA6IDcxOS40MDAwMgorVG91bHNrYe9hIG9ibGFzdDtFZnJlbW92IDogMSA6IDEuMAorQnJ5YW5za2HvYSBvYmxhc3Q7R29yZGV5ZXZza2l5IDogMSA6IDg0Mi4yMDAwMQorT3Jsb3Zza2HvYSBvYmxhc3Q7Tm92b2RlcmV2ZW5rb3Zza2l5IDogMSA6IDg5My40MDAwMgorQnJ5YW5za2HvYSBvYmxhc3Q7TmF2bGluc2tpeSA6IDEgOiAxOTc2LjMKK09ybG92c2th72Egb2JsYXN0O1phbGVnb3NjaGVuc2tpeSA6IDEgOiAxMDQ2LjUKK09ybG92c2th72Egb2JsYXN0O1NoYWJseWtpbnNraXkgOiAxIDogOTQ4LjIwMDAxCitPcmxvdnNrYe9hIG9ibGFzdDtPcnlvbCA6IDEgOiA5MS45MDAwMDIKK0JyeWFuc2th72Egb2JsYXN0O1VuZWNoc2tpeSA6IDEgOiAxMDc2LjkKK09ybG92c2th72Egb2JsYXN0O1Zlcmtob3Zza2l5IDogMSA6IDEwOTUuNQorQnJ5YW5za2HvYSBvYmxhc3Q7S2xpbnRzb3Zza2l5IDogMSA6IDEzMjUuOAorT3Jsb3Zza2HvYSBvYmxhc3Q7S3Jhc25vem9yZW5za2l5IDogMSA6IDYyNi41CitPcmxvdnNrYe9hIG9ibGFzdDtTb3Nrb3Zza2l5IDogMSA6IDU3OS41CitCcnlhbnNrYe9hIG9ibGFzdDtUcnViY2hldnNraXkgOiAxIDogMTcwMy4zCitPcmxvdnNrYe9hIG9ibGFzdDtTdmVyZGxvdnNraXkgOiAxIDogMTExMy40CitPcmxvdnNrYe9hIG9ibGFzdDtLcm9tc2tpeSA6IDEgOiAxMDMyLjMKK0JyeWFuc2th72Egb2JsYXN0O0JyYXNvdnNraXkgOiAxIDogMTE3My42CitCcnlhbnNrYe9hIG9ibGFzdDtLbGludHN5IDogMSA6IDEuMAorT3Jsb3Zza2HvYSBvYmxhc3Q7UG9rcm92c2tpeSA6IDEgOiAxMzczLjMKK0JyeWFuc2th72Egb2JsYXN0O05vdm96eWJrb3Zza2l5IDogMSA6IDEzODguNgorQnJ5YW5za2HvYSBvYmxhc3Q7U3Rhcm9kdWJza2l5IDogMSA6IDE3MDIuMgorQnJ5YW5za2HvYSBvYmxhc3Q7UG9nYXJza2l5IDogMSA6IDEwOTkuMgorT3Jsb3Zza2HvYSBvYmxhc3Q7RG1pdHJvdnNraXkgOiAxIDogMTI1OS4zCitPcmxvdnNrYe9hIG9ibGFzdDtMaXZlbnNraXkgOiAxIDogMTgxNy44CitCcnlhbnNrYe9hIG9ibGFzdDtTdXplbXNraXkgOiAxIDogMTI4My45CitPcmxvdnNrYe9hIG9ibGFzdDtHbGF6dW5vdnNraXkgOiAxIDogNTgzLjIwMDAxCitPcmxvdnNrYe9hIG9ibGFzdDtNYWxvYXJraGFuZ2Vsc2tpeSA6IDEgOiA4ODIuNzk5OTkKK0JyeWFuc2th72Egb2JsYXN0O05vdm96eWJrb3YgOiAxIDogMS4wCitCcnlhbnNrYe9hIG9ibGFzdDtLbGltb3Zza2l5IDogMSA6IDExOTkuOAorQnJ5YW5za2HvYSBvYmxhc3Q7S29tYXJpY2hza2l5IDogMSA6IDkxOS4yOTk5OQorT3Jsb3Zza2HvYSBvYmxhc3Q7VHJvc255YW5za2l5IDogMSA6IDYzOC43OTk5OQorT3Jsb3Zza2HvYSBvYmxhc3Q7TGl2bnkgOiAxIDogMjEuMAorQnJ5YW5za2HvYSBvYmxhc3Q7Wmx5bmtvdnNraXkgOiAxIDogNzY1LjUKK09ybG92c2th72Egb2JsYXN0O0tvbHBueWFuc2tpeSA6IDEgOiAxMDkzLjEKK0JyeWFuc2th72Egb2JsYXN0O1NldnNraXkgOiAxIDogMTEzMC44CitPcmxvdnNrYe9hIG9ibGFzdDtEb2x6aGFuc2tpeSA6IDEgOiAxMjg0LjQKK1JVLVVOSy0yODY3IDogMSA6IDEuMgorUlUtVU5LLTI4NjggOiAxIDogMi44CitSVS1VTkstMjg2OSA6IDEgOiAxLjAKK1JVLVVOSy0yODcwIDogMSA6IDEuMAorUlUtVU5LLTI4NzEgOiAxIDogMS4wCitSVS1VTkstMjg3MiA6IDEgOiAzNi43OTk5OTkKK1JVLVVOSy0yODczIDogMSA6IDIuMDk5OTk5OQorUlUtVU5LLTI4NzQgOiAxIDogMS4wCitMZW5pbmdyYWRza2HvYSBvYmxhc3QgculzO1Z5Ym9yZ3NraXkgOiAxIDogNjQyNy4yMDAyCitMZW5pbmdyYWRza2HvYSBvYmxhc3QgculzO1BvZHBvcm96aHNraXkgOiAxIDogNzI2Mi4zOTk5CitMZW5pbmdyYWRza2HvYSBvYmxhc3QgculzO1ByaW96ZXJza2l5IDogMSA6IDQyNTAuNQorTGVuaW5ncmFkc2th72Egb2JsYXN0IHLpcztQcmlvemVyc2sgOiAxIDogMS4wCitMZW5pbmdyYWRza2HvYSBvYmxhc3QgculzO0xvZGV5bm9wb2xza2l5IDogMSA6IDU4OTguMAorTGVuaW5ncmFkc2th72Egb2JsYXN0IHLpcztQb2Rwb3Jvemh5ZSA6IDEgOiAxLjUKK0xlbmluZ3JhZHNrYe9hIG9ibGFzdCBy6XM7TG9kZXlub3llIFBvbGUgOiAxIDogMy4wCitMZW5pbmdyYWRza2HvYSBvYmxhc3QgculzO1Z5Ym9yZyA6IDEgOiAxLjMKK0xlbmluZ3JhZHNrYe9hIG9ibGFzdCBy6XM7Vm9sa2hvdnNraXkgOiAxIDogNzM0NS4zOTk5CitMZW5pbmdyYWRza2HvYSBvYmxhc3QgculzO1ZzZXZvbHpoc2tpeSA6IDEgOiAzMzU4Ljg5OTkKK1Nhbmt0LVBldGVyYnVyZztTYW5rdC1QZXRlcnNidXJnIDogMSA6IDEyMTIuMgorTGVuaW5ncmFkc2th72Egb2JsYXN0IHLpcztUaWtodmluc2tpeSA6IDEgOiA4MDMwLjcwMDIKK0xlbmluZ3JhZHNrYe9hIG9ibGFzdCBy6XM7TG9tb25vc292c2tpeSA6IDEgOiAxNjQ2LjYKK0xlbmluZ3JhZHNrYe9hIG9ibGFzdCBy6XM7Qm9rc2l0b2dvcnNraXkgOiAxIDogNjM4NC44OTk5CitMZW5pbmdyYWRza2HvYSBvYmxhc3QgculzO1ZzZXZvbG96aHNrIDogMSA6IDEuMworTGVuaW5ncmFkc2th72Egb2JsYXN0IHLpcztLaXJvdnNraXkgOiAxIDogMjE1NC4xMDAxCitMZW5pbmdyYWRza2HvYSBvYmxhc3QgculzO1Nvc25vdnlpIEJvciA6IDEgOiAxLjAKK0xlbmluZ3JhZHNrYe9hIG9ibGFzdCBy6XM7S2luZ2lzZXBwc2tpeSA6IDEgOiAyNTkzLjIKK0xlbmluZ3JhZHNrYe9hIG9ibGFzdCBy6XM7Vm9sa2hvdiA6IDEgOiAxLjUKK0xlbmluZ3JhZHNrYe9hIG9ibGFzdCBy6XM7S2lyb3ZzayA6IDEgOiAxLjAKK0xlbmluZ3JhZHNrYe9hIG9ibGFzdCBy6XM7S2lyaXNoc2tpeSA6IDEgOiAyNTMyLjUKK0xlbmluZ3JhZHNrYe9hIG9ibGFzdCBy6XM7VG9zbmVuc2tpeSA6IDEgOiAzOTAwLjYwMDEKK0xlbmluZ3JhZHNrYe9hIG9ibGFzdCBy6XM7R2F0Y2hpbnNraXkgOiAxIDogMjExNS43CitMZW5pbmdyYWRza2HvYSBvYmxhc3QgculzO1ZvbG9zb3Zza2l5IDogMSA6IDIwODMuMzk5OQorTGVuaW5ncmFkc2th72Egb2JsYXN0IHLpcztUaWtodmluIDogMSA6IDIuNQorTGVuaW5ncmFkc2th72Egb2JsYXN0IHLpcztHYXRjaGluYSA6IDEgOiAxLjYKK0xlbmluZ3JhZHNrYe9hIG9ibGFzdCBy6XM7VG9zbm8gOiAxIDogMS4wCitMZW5pbmdyYWRza2HvYSBvYmxhc3QgculzO0Jva3NpdG9nb3JzayA6IDEgOiAxLjkKK0xlbmluZ3JhZHNrYe9hIG9ibGFzdCBy6XM7SXZhbmdvcm9kIDogMSA6IDEuMAorTGVuaW5ncmFkc2th72Egb2JsYXN0IHLpcztLaW5naXNlcHAgOiAxIDogMS4wCitMZW5pbmdyYWRza2HvYSBvYmxhc3QgculzO1Bpa2FsZXZvIDogMSA6IDMuMDk5OTk5OQorTGVuaW5ncmFkc2th72Egb2JsYXN0IHLpcztTbGFudHNldnNraXkgOiAxIDogMjQ3OC4xMDAxCitMZW5pbmdyYWRza2HvYSBvYmxhc3QgculzO0tpcmlzaGkgOiAxIDogMS4yCitOb3Znb3JvZHNrYe9hIG9ibGFzdDtDaHVkb3Zza2l5IDogMSA6IDIzNzcuOAorTm92Z29yb2Rza2HvYSBvYmxhc3Q7THl1Ynl0aW5za2l5IDogMSA6IDQzNTYuNzAwMgorTGVuaW5ncmFkc2th72Egb2JsYXN0IHLpcztMdXpoc2tpeSA6IDEgOiA2NzA0LjI5OTgKK05vdmdvcm9kc2th72Egb2JsYXN0O0todm95bmluc2tpeSA6IDEgOiAzMjA4LjUKK05vdmdvcm9kc2th72Egb2JsYXN0O01hbG92aXNoZXJza2l5IDogMSA6IDMzNDUuNQorTGVuaW5ncmFkc2th72Egb2JsYXN0IHLpcztTbGFudHN5IDogMSA6IDEuMgorTm92Z29yb2Rza2HvYSBvYmxhc3Q7Tm92Z29yb2Rza2l5IDogMSA6IDQ3MjkuNzk5OAorUHNrb3Zza2HvYSBvYmxhc3Q7R2RvdnNraXkgOiAxIDogMjk4Ni4wCitQc2tvdnNrYe9hIG9ibGFzdDtQbHl1c3NraXkgOiAxIDogMjIxNi41CitOb3Znb3JvZHNrYe9hIG9ibGFzdDtCYXRldHNraXkgOiAxIDogMTc0MS4xCitMZW5pbmdyYWRza2HvYSBvYmxhc3QgculzO0x1Z2EgOiAxIDogMS4wCitOb3Znb3JvZHNrYe9hIG9ibGFzdDtQZXN0b3Zza2l5IDogMSA6IDE5MzkuNAorTm92Z29yb2Rza2HvYSBvYmxhc3Q7Qm9yb3ZpY2hza2l5IDogMSA6IDMwMDMuNQorTm92Z29yb2Rza2HvYSBvYmxhc3Q7TW9zaGVuc2tpeSA6IDEgOiAzLjA5OTk5OTkKK05vdmdvcm9kc2th72Egb2JsYXN0O09rdWxvdnNraXkgOiAxIDogMjQwMS41CitOb3Znb3JvZHNrYe9hIG9ibGFzdDtOb3Znb3JvZCA6IDEgOiAxMjcuNQorUHNrb3Zza2HvYSBvYmxhc3Q7U3RydWdvLUtyYXNuZW5za2l5IDogMSA6IDMyMDMuOAorTm92Z29yb2Rza2HvYSBvYmxhc3Q7S3Jlc3RldHNraXkgOiAxIDogMjg1My4zCitOb3Znb3JvZHNrYe9hIG9ibGFzdDtTaGltc2tpeSA6IDEgOiAxODgzLjAKK05vdmdvcm9kc2th72Egb2JsYXN0O0Jvcm92aWNoaSA6IDEgOiA0MS45MDAwMDIKK1Bza292c2th72Egb2JsYXN0O1Bza292c2tpeSA6IDEgOiAzNjIyLjg5OTkKK05vdmdvcm9kc2th72Egb2JsYXN0O1NvbGV0c2tpeSA6IDEgOiAxNDAyLjYKK05vdmdvcm9kc2th72Egb2JsYXN0O1N0YXJvcnVzc2tpeSA6IDEgOiAzMjk4LjgKK05vdmdvcm9kc2th72Egb2JsYXN0O1BhcmZpbm8gOiAxIDogMTU0Ni4xCitOb3Znb3JvZHNrYe9hIG9ibGFzdDtWYWxkYXlza2l5IDogMSA6IDI0OTMuNQorUHNrb3Zza2HvYSBvYmxhc3Q7UG9ya2hvdnNraXkgOiAxIDogMzAzOC44CitOb3Znb3JvZHNrYe9hIG9ibGFzdDtEZW15YW5za2l5IDogMSA6IDMyMDcuODk5OQorTm92Z29yb2Rza2HvYSBvYmxhc3Q7Vm9sb3RvdnNraXkgOiAxIDogMTIyNS43CitOb3Znb3JvZHNrYe9hIG9ibGFzdDtTdGFyYXlhIFJ1c3NhIDogMSA6IDI4LjIwMDAwMQorUHNrb3Zza2HvYSBvYmxhc3Q7UGVjaG9yc2tpeSA6IDEgOiAxMTQzLjgKK1Bza292c2th72Egb2JsYXN0O0Rub3Zza2l5IDogMSA6IDEwNDAuNQorUHNrb3Zza2HvYSBvYmxhc3Q7UHNrb3YgOiAxIDogNS4wCitOb3Znb3JvZHNrYe9hIG9ibGFzdDtQb2Rkb3Jza2l5IDogMSA6IDI3NzcuMgorUHNrb3Zza2HvYSBvYmxhc3Q7UGFsa2luc2tpeSA6IDEgOiAxMjE0LjIKK1Bza292c2th72Egb2JsYXN0O0RlZG92aWNoZXNraXkgOiAxIDogMjMyNS4yCitQc2tvdnNrYe9hIG9ibGFzdDtPc3Ryb3Zza2l5IDogMSA6IDI1NzYuOAorTm92Z29yb2Rza2HvYSBvYmxhc3Q7TWFyZXZza2l5IDogMSA6IDE2MTUuOAorUHNrb3Zza2HvYSBvYmxhc3Q7QmV6aGFuaXRza2l5IDogMSA6IDM1NzUuMAorUHNrb3Zza2HvYSBvYmxhc3Q7UHl0YWxvdnNraXkgOiAxIDogMTEzNS42CitOb3Znb3JvZHNrYe9hIG9ibGFzdDtLaG9sbXNraXkgOiAxIDogMjI4Ni44CitQc2tvdnNrYe9hIG9ibGFzdDtOb3ZvcnpoZXZza2l5IDogMSA6IDE3MTEuNAorUHNrb3Zza2HvYSBvYmxhc3Q7T3N0cm92IDogMSA6IDMuNTk5OTk5OQorUHNrb3Zza2HvYSBvYmxhc3Q7TG9rbnlhbnNraXkgOiAxIDogMjE1MC44CitQc2tvdnNrYe9hIG9ibGFzdDtQdXNoa2luby1Hb3Jza2l5IDogMSA6IDk4MC40MDAwMgorUHNrb3Zza2HvYSBvYmxhc3Q7S3Jhc25vZ29yb2Rza2l5IDogMSA6IDEzNTcuNAorUHNrb3Zza2HvYSBvYmxhc3Q7T3BvY2hlbnNraXkgOiAxIDogMTkxMC43CitQc2tvdnNrYe9hIG9ibGFzdDtWZWxpa29sdWtza2l5IDogMSA6IDMwMDQuNjAwMQorUHNrb3Zza2HvYSBvYmxhc3Q7Tm92b3Nva29sbmljaGVza2l5IDogMSA6IDE3ODQuNgorUHNrb3Zza2HvYSBvYmxhc3Q7UHVzdG9zaGtpbnNraXkgOiAxIDogMjAwMS41CitQc2tvdnNrYe9hIG9ibGFzdDtTZWJlemhza2l5IDogMSA6IDI5MzQuMworUHNrb3Zza2HvYSBvYmxhc3Q7S3VueWluc2tpeSA6IDEgOiAyOTAzLjIKK1Bza292c2th72Egb2JsYXN0O1ZlbGlraWUgTHVraSA6IDEgOiA4LjEwMDAwMDQKK1Bza292c2th72Egb2JsYXN0O05ldmVsc2tpeSA6IDEgOiAyNTU0LjIKK1Bza292c2th72Egb2JsYXN0O1VzdnlhdHNraXkgOiAxIDogMTAxNi42CitSb3N0b3Zza2HvYSBvYmxhc3Q7VmVya2huZWRvbnNrb3kgOiAxIDogMjc0Ny4wCitSb3N0b3Zza2HvYSBvYmxhc3Q7U2hvbG9raG92c2tpeSA6IDEgOiAzNDA0LjMKK1Jvc3RvdnNrYe9hIG9ibGFzdDtDaGVydGtvdnNraXkgOiAxIDogMjI1NS4wCitSb3N0b3Zza2HvYSBvYmxhc3Q7Qm9rb3Zza2l5IDogMSA6IDIwMTMuNQorUm9zdG92c2th72Egb2JsYXN0O0thc2hhcnNraXkgOiAxIDogMzA1Mi41CitSb3N0b3Zza2HvYSBvYmxhc3Q7TWlsbGVyb3Zza2l5IDogMSA6IDMxNjkuMworUm9zdG92c2th72Egb2JsYXN0O1NvdmV0c2tpeSA6IDEgOiAxNTg0LjcKK1Jvc3RvdnNrYe9hIG9ibGFzdDtNaWxsZXJvdm8gOiAxIDogODMuMzAwMDAzCitSb3N0b3Zza2HvYSBvYmxhc3Q7TWlseXV0aW5za2l5IDogMSA6IDIxNzEuNQorUm9zdG92c2th72Egb2JsYXN0O09ibGl2c2tpeSA6IDEgOiAxNzg2LjcKK1Jvc3RvdnNrYe9hIG9ibGFzdDtUYXJhc292c2tpeSA6IDEgOiAyNjk4LjgKK1Jvc3RvdnNrYe9hIG9ibGFzdDtLYW1lbnNraXkgOiAxIDogMjc1My4zOTk5CitSb3N0b3Zza2HvYSBvYmxhc3Q7QmVsb2thbGl0dmluc2tpeSA6IDEgOiAyMzY2LjgKK1Jvc3RvdnNrYe9hIG9ibGFzdDtUYXRzeW5za2l5IDogMSA6IDIwMjQuMgorUm9zdG92c2th72Egb2JsYXN0O01vcm96b3Zza2l5IDogMSA6IDI5NzQuMAorUm9zdG92c2th72Egb2JsYXN0O0RvbmV0c2sgOiAxIDogOTUuNDAwMDAyCitSb3N0b3Zza2HvYSBvYmxhc3Q7S2FtZW5zay1TaGFraHRpbnNraXkgOiAxIDogMTM1LjM5OTk5CitSb3N0b3Zza2HvYSBvYmxhc3Q7QmVsYXlhIEthbGl0dmEgOiAxIDogMjEuMjk5OTk5CitSb3N0b3Zza2HvYSBvYmxhc3Q7S3Jhc25vc3VsaW5za2l5IDogMSA6IDIwNTkuOAorUm9zdG92c2th72Egb2JsYXN0O0d1a292byA6IDEgOiA1My4wOTk5OTgKK1Jvc3RvdnNrYe9hIG9ibGFzdDtUc3ltbHlhbnNraXkgOiAxIDogMTc3Ny4xCitSb3N0b3Zza2HvYSBvYmxhc3Q7WnZlcmV2byA6IDEgOiAxLjgKK1Jvc3RvdnNrYe9hIG9ibGFzdDtLb25zdGFudGlub3Zza2l5IDogMSA6IDIwMzEuNAorUm9zdG92c2th72Egb2JsYXN0O0tyYXNueWkgU3VsaW4gOiAxIDogMTY0LjUKK1Jvc3RvdnNrYe9hIG9ibGFzdDtVc3QtRG9uZXRza2l5IDogMSA6IDE0NTIuNQorUm9zdG92c2th72Egb2JsYXN0O1JvZGlvbm92by1OZXN2ZXRheXNraXkgOiAxIDogMTY5OS44CitSb3N0b3Zza2HvYSBvYmxhc3Q7S3V5YnlzaGV2c2tpeSA6IDEgOiA5NTkuNTk5OTgKK1Jvc3RvdnNrYe9hIG9ibGFzdDtOb3Zvc2hha2h0aW5zayA6IDEgOiAxNTkuNjAwMDEKK1Jvc3RvdnNrYe9hIG9ibGFzdDtPa3R5YWJyc2tpeSA6IDEgOiAxOTI1LjAKK1Jvc3RvdnNrYe9hIG9ibGFzdDtTaGFraHR5IDogMSA6IDE2OS43CitSb3N0b3Zza2HvYSBvYmxhc3Q7TWF0dmV5ZXZvLUt1cmdhbnNraXkgOiAxIDogMTc0My4xCitSb3N0b3Zza2HvYSBvYmxhc3Q7RHVib3Zza2l5IDogMSA6IDQxMTguMjAwMgorUm9zdG92c2th72Egb2JsYXN0O1ZvbGdvZG9uc2tpeSA6IDEgOiAxNDYwLjQKK1Jvc3RvdnNrYe9hIG9ibGFzdDtTZW1pa2FyYWtvcnNraXkgOiAxIDogMTI1OS41CitSb3N0b3Zza2HvYSBvYmxhc3Q7TmVrbGlub3Zza2l5IDogMSA6IDIxMjUuNworUm9zdG92c2th72Egb2JsYXN0O1ZvbGdvZG9uc2sgOiAxIDogNS4wCitSb3N0b3Zza2HvYSBvYmxhc3Q7WmF2ZXRpbnNraXkgOiAxIDogNDUzMi43OTk4CitSb3N0b3Zza2HvYSBvYmxhc3Q7QWtzYXlza2l5IDogMSA6IDEyMjkuOAorUm9zdG92c2th72Egb2JsYXN0O015YXNuaWtvdnNraXkgOiAxIDogNzM0Ljc5OTk5CitSb3N0b3Zza2HvYSBvYmxhc3Q7Tm92b2NoZXJrYXNzayA6IDEgOiAxMjAuNgorUm9zdG92c2th72Egb2JsYXN0O01hcnR5bm92c2tpeSA6IDEgOiAxOTMwLjEKK1Jvc3RvdnNrYe9hIG9ibGFzdDtaaW1vdm5pa292c2tpeSA6IDEgOiA0NjU4LjYwMDEKK1Jvc3RvdnNrYe9hIG9ibGFzdDtCYWdheWV2c2tpeSA6IDEgOiAxMDgzLjEKK1Jvc3RvdnNrYe9hIG9ibGFzdDtSb3N0b3YtbmEtRG9ueSA6IDEgOiAzODQuNzk5OTkKK1Jvc3RvdnNrYe9hIG9ibGFzdDtWZXNlbG92c2tpeSA6IDEgOiAxMTU2LjIKK1Jvc3RvdnNrYe9hIG9ibGFzdDtUYWdhbnJvZyA6IDEgOiA3Ni4wOTk5OTgKK1Jvc3RvdnNrYe9hIG9ibGFzdDtBem92c2tpeSA6IDEgOiAyNzUxLjUKK1Jvc3RvdnNrYe9hIG9ibGFzdDtQcm9sZXRhcnNraXkgOiAxIDogMTg1MC45CitSb3N0b3Zza2HvYSBvYmxhc3Q7QmF0YXlzayA6IDEgOiA3OS45MDAwMDIKK1Jvc3RvdnNrYe9hIG9ibGFzdDtPcmxvdnNraXkgOiAxIDogMzEyMy42MDAxCitSb3N0b3Zza2HvYSBvYmxhc3Q7QXpvdiA6IDEgOiA1Ny43OTk5OTkKK1Jvc3RvdnNrYe9hIG9ibGFzdDtLYWdhbG5pdHNraXkgOiAxIDogMTIwMy4yCitSb3N0b3Zza2HvYSBvYmxhc3Q7WmVybm9ncmFkc2tpeSA6IDEgOiAyODgyLjM5OTkKK1Jvc3RvdnNrYe9hIG9ibGFzdDtTYWxza2l5IDogMSA6IDI5NzYuMzk5OQorUm9zdG92c2th72Egb2JsYXN0O1RzZWxpbnNraXkgOiAxIDogMjE2NC42MDAxCitLcmFzbm9kYXJza2kga3Jh7yBy6XNpZHVlO1NjaGVyYmlub3Zza2l5IDogMSA6IDE0MjAuMAorS3Jhc25vZGFyc2tpIGtyYe8gculzaWR1ZTtLdXNjaGV2c2tpeSA6IDEgOiAyNDQ2LjM5OTkKK1Jvc3RvdnNrYe9hIG9ibGFzdDtSZW1vbnRuZW5za2l5IDogMSA6IDM0NzAuMzk5OQorS3Jhc25vZGFyc2tpIGtyYe8gculzaWR1ZTtZZXlzayA6IDEgOiAxMjAuNworS3Jhc25vZGFyc2tpIGtyYe8gculzaWR1ZTtZZXlza2l5IDogMSA6IDIxODcuNworUm9zdG92c2th72Egb2JsYXN0O1llZ29ybHlrc2tpeSA6IDEgOiAxMjEwLjYKK0tyYXNub2RhcnNraSBrcmHvIHLpc2lkdWU7U3Rhcm9taW5za2l5IDogMSA6IDEyNDEuMQorS3Jhc25vZGFyc2tpIGtyYe8gculzaWR1ZTtLcnlsb3Zza2l5IDogMSA6IDExOTYuMgorUm9zdG92c2th72Egb2JsYXN0O1NhbHNrIDogMSA6IDQxLjQwMDAwMgorS3Jhc25vZGFyc2tpIGtyYe8gculzaWR1ZTtMZW5pbmdyYWRza2l5IDogMSA6IDE2MDUuMworS3Jhc25vZGFyc2tpIGtyYe8gculzaWR1ZTtLYW5ldnNraXkgOiAxIDogMjQ0MS4zOTk5CitSb3N0b3Zza2HvYSBvYmxhc3Q7UGVzY2hhbm9rb3Bza2l5IDogMSA6IDE3OTIuOQorS3Jhc25vZGFyc2tpIGtyYe8gculzaWR1ZTtOb3ZvcG9rcm92c2tpeSA6IDEgOiAyMzE2LjUKK0tyYXNub2RhcnNraSBrcmHvIHLpc2lkdWU7QmVsb2dsaW5za2l5IDogMSA6IDEyMjMuNQorS3Jhc25vZGFyc2tpIGtyYe8gculzaWR1ZTtQYXZsb3Zza2l5IDogMSA6IDE4NzYuMgorU3RhdnJvcG9sc2tpIGtyYe8gculzaWR1ZTtBcGFuYXNlbmtvdnNraXkgOiAxIDogMzIyNS44OTk5CitLcmFzbm9kYXJza2kga3Jh7yBy6XNpZHVlO1ByaW1vcnNrby1Ba2h0YXJza2l5IDogMSA6IDI3MDUuOAorU3RhdnJvcG9sc2tpIGtyYe8gculzaWR1ZTtJcGF0b3Zza2l5IDogMSA6IDM5ODMuMworS3Jhc25vZGFyc2tpIGtyYe8gculzaWR1ZTtUaWtob3JldHNraXkgOiAxIDogMTgzMi41CitLcmFzbm9kYXJza2kga3Jh7yBy6XNpZHVlO0JyeXVraG92ZXRza2l5IDogMSA6IDE0NDEuOQorU3RhdnJvcG9sc2tpIGtyYe8gculzaWR1ZTtLcmFzbm9ndmFyZGV5c2tpeSA6IDEgOiAyMDc4Ljg5OTkKK0tyYXNub2RhcnNraSBrcmHvIHLpc2lkdWU7VGlraG9yZXR6ayA6IDEgOiAyNy4xCitLcmFzbm9kYXJza2kga3Jh7yBy6XNpZHVlO1Z5c2Vsa292c2tpeSA6IDEgOiAxNzIwLjgKK1N0YXZyb3BvbHNraSBrcmHvIHLpc2lkdWU7VHJ1bm92c2tpeSA6IDEgOiAxODQyLjgKK0tyYXNub2RhcnNraSBrcmHvIHLpc2lkdWU7S29yZW5vdnNraXkgOiAxIDogMTE2MS4wCitLcmFzbm9kYXJza2kga3Jh7yBy6XNpZHVlO0thbGluaW5za2l5IDogMSA6IDE1MzUuNAorU3RhdnJvcG9sc2tpIGtyYe8gculzaWR1ZTtOb3ZvYWxla3NhbmRyb3Zza2l5IDogMSA6IDIxMTAuMAorS3Jhc25vZGFyc2tpIGtyYe8gculzaWR1ZTtUaW1hc2hldnNraXkgOiAxIDogMTQzMS40CitLcmFzbm9kYXJza2kga3Jh7yBy6XNpZHVlO1NsYXZ5YW5za2l5IDogMSA6IDIwNDMuNgorU3RhdnJvcG9sc2tpIGtyYe8gculzaWR1ZTtUdXJrbWVuc2tpeSA6IDEgOiAzMTM0LjcKK0tyYXNub2RhcnNraSBrcmHvIHLpc2lkdWU7S2F2a2F6c2tpeSA6IDEgOiAxMDg2LjAKK1N0YXZyb3BvbHNraSBrcmHvIHLpc2lkdWU7SXpvYmlsbmVuc2tpeSA6IDEgOiAxODc4LjYKK1N0YXZyb3BvbHNraSBrcmHvIHLpc2lkdWU7QXJ6Z2lyenNraXkgOiAxIDogMzE5Ny44OTk5CitLcmFzbm9kYXJza2kga3Jh7yBy6XNpZHVlO1RiaWxpc3NraXkgOiAxIDogMTEzMi40CitTdGF2cm9wb2xza2kga3Jh7yBy6XNpZHVlO1BldHJvdnNraXkgOiAxIDogMjcyOC43CitLcmFzbm9kYXJza2kga3Jh7yBy6XNpZHVlO0tyYXNub2FybWV5c2tpeSA6IDEgOiAxODk4LjIKK0tyYXNub2RhcnNraSBrcmHvIHLpc2lkdWU7S3Jhc25vZGFyIDogMSA6IDI1NS41CitLcmFzbm9kYXJza2kga3Jh7yBy6XNpZHVlO0tyb3BvdGtpbiA6IDEgOiA5Mi4xOTk5OTcKK1N0YXZyb3BvbHNraSBrcmHvIHLpc2lkdWU7R3JhY2hldnNraXkgOiAxIDogMTQ4NS44CitLcmFzbm9kYXJza2kga3Jh7yBy6XNpZHVlO1RlbXJ5dWtza2l5IDogMSA6IDIwMzMuOQorS3Jhc25vZGFyc2tpIGtyYe8gculzaWR1ZTtVc3QtTGFiaW5za2l5IDogMSA6IDE1MDUuMAorU3RhdnJvcG9sc2tpIGtyYe8gculzaWR1ZTtMZXZva3Vtc2tpeSA6IDEgOiA0NTExLjIwMDIKK0tyYXNub2RhcnNraSBrcmHvIHLpc2lkdWU7R3Vsa2V2aWNoc2tpeSA6IDEgOiAxNTk4LjIKK0tyYXNub2RhcnNraSBrcmHvIHLpc2lkdWU7RGluc2tpeSA6IDEgOiAxNDM4LjQKK1N0YXZyb3BvbHNraSBrcmHvIHLpc2lkdWU7QmxhZ29kYXJuZW5za2l5IDogMSA6IDE4MjAuOAorU3RhdnJvcG9sc2tpIGtyYe8gculzaWR1ZTtTaHBha292c2tpeSA6IDEgOiAyMzg1LjYwMDEKK0tyYXNub2RhcnNraSBrcmHvIHLpc2lkdWU7U2xhdnlhbnNrLU5hLUt1YmFuaSA6IDEgOiAyNTQuMAorS3Jhc25vZGFyc2tpIGtyYe8gculzaWR1ZTtOb3Zva3ViYW5za2l5IDogMSA6IDE4MTkuNgorUmVzcG91Ymxpa2EgQWR5Z2XvYTtLcmFzbm9ndmFyZGV5c2tpeSA6IDEgOiA1OTcuNTk5OTgKK0tyYXNub2RhcnNraSBrcmHvIHLpc2lkdWU7S3VyZ2FuaW5za2l5IDogMSA6IDE1MzkuNgorS3Jhc25vZGFyc2tpIGtyYe8gculzaWR1ZTtBbmFwc2tpeSA6IDEgOiA4MDMuMAorU3RhdnJvcG9sc2tpIGtyYe8gculzaWR1ZTtTdGF2cm9wb2wgOiAxIDogMjU3LjM5OTk5CitLcmFzbm9kYXJza2kga3Jh7yBy6XNpZHVlO0tyeW1za2l5IDogMSA6IDE2NjEuNAorS3Jhc25vZGFyc2tpIGtyYe8gculzaWR1ZTtBYmluc2tpeSA6IDEgOiAxODEyLjAKK1Jlc3BvdWJsaWthIEFkeWdl72E7U2hvdmdlbm92c2tpeSA6IDEgOiA1NTQuNTk5OTgKK1N0YXZyb3BvbHNraSBrcmHvIHLpc2lkdWU7QnVkZW5ub3Zza2l5IDogMSA6IDI5NzcuODk5OQorS3Jhc25vZGFyc2tpIGtyYe8gculzaWR1ZTtBcm1hdmlyIDogMSA6IDI1MC44OTk5OQorUmVzcG91Ymxpa2EgQWR5Z2XvYTtUYWtodGFtdWtheXNraXkgOiAxIDogNDU1LjAKK0tyYXNub2RhcnNraSBrcmHvIHLpc2lkdWU7QW5hcGEgOiAxIDogNjkuMzAwMDAzCitLcmFzbm9kYXJza2kga3Jh7yBy6XNpZHVlO1NldmVyc2tpeSA6IDEgOiAyMjc4LjcKK1Jlc3BvdWJsaWthIEFkeWdl72E7S29zaGVraGFibHNraXkgOiAxIDogNDYwLjI5OTk5CitSZXNwb3VibGlrYSBBZHlnZe9hO1RldWNoZXpoc2tpeSA6IDEgOiA0ODguNjAwMDEKK0tyYXNub2RhcnNraSBrcmHvIHLpc2lkdWU7VXNwZW5za2l5IDogMSA6IDkxNC4yMDAwMQorU3RhdnJvcG9sc2tpIGtyYe8gculzaWR1ZTtLb2NodWJleWV2c2tpeSA6IDEgOiAyNTczLjM5OTkKK1N0YXZyb3BvbHNraSBrcmHvIHLpc2lkdWU7QWxla3NhbmRyb3Zza2l5IDogMSA6IDE4MjMuNAorU3RhdnJvcG9sc2tpIGtyYe8gculzaWR1ZTtOZWZ0ZWt1bXNraXkgOiAxIDogMzg5MC4zOTk5CitTdGF2cm9wb2xza2kga3Jh7yBy6XNpZHVlO0FuZHJvcG92c2tpeSA6IDEgOiAyNTkyLjUKK1N0YXZyb3BvbHNraSBrcmHvIHLpc2lkdWU7Tm92b3NlbGl0c2tpeSA6IDEgOiAyMDM0LjEKK0RhZ2VzdGFuO05vZ2F5c2tpeSA6IDEgOiA4NjA3LjcwMDIKK0tyYXNub2RhcnNraSBrcmHvIHLpc2lkdWU7QmVsb3JlY2huc2tpeSA6IDEgOiAxMjk4LjYKK0RhZ2VzdGFuO1RhcnVtb3Zza2l5IDogMSA6IDMwMjguMzk5OQorUmVzcG91Ymxpa2EgQWR5Z2XvYTtHaWFnaW5za2l5IDogMSA6IDg1MC43MDAwMQorS3Jhc25vZGFyc2tpIGtyYe8gculzaWR1ZTtOb3Zvcm9zc2l5c2sgOiAxIDogNTYxLjA5OTk4CitLcmFzbm9kYXJza2kga3Jh7yBy6XNpZHVlO0tyeW1zayA6IDEgOiA0LjU5OTk5OTkKK1N0YXZyb3BvbHNraSBrcmHvIHLpc2lkdWU7QnVkZW5ub3ZzayA6IDEgOiA2MS41CitLcmFzbm9kYXJza2kga3Jh7yBy6XNpZHVlO0dvcnlhY2hpeSBLbHl1Y2ggOiAxIDogMTY4MS4wCitSVS1VTkstMjg3NSA6IDEgOiAzLjgKK1Jlc3BvdWJsaWthIEFkeWdl72E7TWF5a29wc2tpeSA6IDEgOiA0MTc1Ljc5OTgKK0tyYXNub2RhcnNraSBrcmHvIHLpc2lkdWU7QmVsb3JlY2hlbnNrIDogMSA6IDQ2LjI5OTk5OQorS3Jhc25vZGFyc2tpIGtyYe8gculzaWR1ZTtHZWxlbmR6aGlrIDogMSA6IDg4My4wOTk5OAorS3Jhc25vZGFyc2tpIGtyYe8gculzaWR1ZTtMYWJpbnNrIDogMSA6IDY2LjE5OTk5NworS3Jhc25vZGFyc2tpIGtyYe8gculzaWR1ZTtMYWJpbnNraXkgOiAxIDogMTU5My4wCitLcmFzbm9kYXJza2kga3Jh7yBy6XNpZHVlO01vc3RvdnNraXkgOiAxIDogMzM2MC41CitTdGF2cm9wb2xza2kga3Jh7yBy6XNpZHVlO05ldmlubm9teXNzayA6IDEgOiA4Ni42OTk5OTcKK1JVLVVOSy0yODc2IDogMSA6IDMuOAorUmVzcG91Ymxpa2EgQWR5Z2XvYTtNYXlrb3AgOiAxIDogMy4zCitLcmFzbm9kYXJza2kga3Jh7yBy6XNpZHVlO0Fwc2hlcm9uc2tpeSA6IDEgOiAyNDYyLjgKK0tyYXNub2RhcnNraSBrcmHvIHLpc2lkdWU7T3RyYWRuZW5za2l5IDogMSA6IDI0NDkuOAorU3RhdnJvcG9sc2tpIGtyYe8gculzaWR1ZTtHZW9yZ2l5ZXZza2l5IDogMSA6IDE5MjEuMgorU3RhdnJvcG9sc2tpIGtyYe8gculzaWR1ZTtTb3ZldHNraXkgOiAxIDogMTgzNC44CitTdGF2cm9wb2xza2kga3Jh7yBy6XNpZHVlO01pbmVyYWxvdm9kc2tpeSA6IDEgOiAxNTM2LjkKK1N0YXZyb3BvbHNraSBrcmHvIHLpc2lkdWU7U3RlcG5vdnNraXkgOiAxIDogMTczMy43CitLYXJhdGNoYWV2by1UY2hlcmtlc3NrYe9hO0FkeWdlLUtoYWJsc2tpeSA6IDEgOiA2MDkuMAorS3Jhc25vZGFyc2tpIGtyYe8gculzaWR1ZTtUdWFwc2luc2tpeSA6IDEgOiAyMDQyLjYKK0thcmF0Y2hhZXZvLVRjaGVya2Vzc2th72E7UHJpa3ViYW5za2l5IDogMSA6IDEwNDAuMAorRGFnZXN0YW47S2l6bHlhcnNraXkgOiAxIDogMzQyMC4zOTk5CitTdGF2cm9wb2xza2kga3Jh7yBy6XNpZHVlO1ByZWRnb3JueWkgOiAxIDogMjIwNy4yCitTdGF2cm9wb2xza2kga3Jh7yBy6XNpZHVlO0t1cnNraXkgOiAxIDogMzg5NC42MDAxCitLYXJhdGNoYWV2by1UY2hlcmtlc3NrYe9hO0NoZXJrZXNzayA6IDEgOiA3MC4wOTk5OTgKK0thcmF0Y2hhZXZvLVRjaGVya2Vzc2th72E7S2hhYmV6c2tpeSA6IDEgOiA3NTQuMjAwMDEKK1N0YXZyb3BvbHNraSBrcmHvIHLpc2lkdWU7TWluZXJhbG5peWUgVm9keSA6IDEgOiA2OC41CitTdGF2cm9wb2xza2kga3Jh7yBy6XNpZHVlO0dlb3JnaXlldnNrIDogMSA6IDI2LjI5OTk5OQorU3RhdnJvcG9sc2tpIGtyYe8gculzaWR1ZTtLaXJvdnNraXkgOiAxIDogMTQwOS4xCitTdGF2cm9wb2xza2kga3Jh7yBy6XNpZHVlO1poZWxlem5vdm9kc2sgOiAxIDogODYuNQorS2FyYXRjaGFldm8tVGNoZXJrZXNza2HvYTtVc3QtRHpoZWd1dGluc2tpeSA6IDEgOiA5OTYuOTAwMDIKK1N0YXZyb3BvbHNraSBrcmHvIHLpc2lkdWU7TGVybW9udG92IDogMSA6IDI3LjIwMDAwMQorS2FyYXRjaGFldm8tVGNoZXJrZXNza2HvYTtaZWxlbmNodWdza2l5IDogMSA6IDI4MzAuODk5OQorS2FyYXRjaGFldm8tVGNoZXJrZXNza2HvYTtVcnVwc2tpeSA6IDEgOiAzMTIyLjUKK1N0YXZyb3BvbHNraSBrcmHvIHLpc2lkdWU7UHlhdGlnb3JzayA6IDEgOiA1Mi45MDAwMDIKK1N0YXZyb3BvbHNraSBrcmHvIHLpc2lkdWU7WWVzc2VudHVraSA6IDEgOiAzOS45MDAwMDIKK0tyYXNub2RhcnNraSBrcmHvIHLpc2lkdWU7U29jaGkgOiAxIDogMzI5Ny42MDAxCitLcmFzbm9kYXJza2kga3Jh7yBy6XNpZHVlO1R1YXBzZSA6IDEgOiA0LjAKK0thcmF0Y2hhZXZvLVRjaGVya2Vzc2th72E7TWFsb2thcmFjaGF5ZXZza2l5IDogMSA6IDExMDkuMworVGNoZXRjaGVuaWEqO05hdXJza2l5IDogMSA6IDIwNjYuMworS2FiYXJkaW5vLUJhbGthcmlhO1Byb2tobGFkbmVuc2tpeSA6IDEgOiAxNDM1LjcKK1N0YXZyb3BvbHNraSBrcmHvIHLpc2lkdWU7S2lzbG92b2RzayA6IDEgOiA1MS43MDAwMDEKK1RjaGV0Y2hlbmlhKjtTaGVsa292c2tpeSA6IDEgOiAyNjg2LjM5OTkKK0thYmFyZGluby1CYWxrYXJpYTtab2xza2l5IDogMSA6IDI0MzkuMworRGFnZXN0YW47TWFraGFjaGthbGEgOiAxIDogODEyLjA5OTk4CitLYXJhdGNoYWV2by1UY2hlcmtlc3NrYe9hO0thcmFjaGF5ZXZza2l5IDogMSA6IDM4MDkuODk5OQorRGFnZXN0YW47QmFiYXl1cnRvdnNraXkgOiAxIDogMjkyMy43CitEYWdlc3RhbjtLaXpseWFyIDogMSA6IDU5LjUKK0thYmFyZGluby1CYWxrYXJpYTtCYWtzYW5za2l5IDogMSA6IDE2MjkuNQorU2V2ZXJvLU9zZXRpbnNrYe9hIHJlc3BvdTtNb3pkb2tza2l5IDogMSA6IDEyNTAuNAorS2FyYXRjaGFldm8tVGNoZXJrZXNza2HvYTtLYXJhY2hheWV2c2sgOiAxIDogMTIuMworS2FiYXJkaW5vLUJhbGthcmlhO1RlcnNraXkgOiAxIDogODU4Ljc5OTk5CitLYWJhcmRpbm8tQmFsa2FyaWE7UHJva2hsYWRueWkgOiAxIDogMzYuOTAwMDAyCitLYWJhcmRpbm8tQmFsa2FyaWE7TWF5c2tpeSA6IDEgOiAzMzYuMjk5OTkKK1RjaGV0Y2hlbmlhKjtOYWR0ZXJlY2hueWkgOiAxIDogMTAxNy40CitLYWJhcmRpbm8tQmFsa2FyaWE7VXJ2YW5za2l5IDogMSA6IDExNzguNAorS2FiYXJkaW5vLUJhbGthcmlhO0NoZWdlbXNraXkgOiAxIDogMTM2OS4zCitJbmdvdWNoZXRpYSo7TWFsZ29iZWtza2l5IDogMSA6IDYzNy4yMDAwMQorVGNoZXRjaGVuaWEqO0dyb3puZW5za2l5IDogMSA6IDE0MTQuMQorRGFnZXN0YW47S2hhc2F2eXVydG92c2tpeSA6IDEgOiAxNTY3LjgKK1JVLVVOSy0yODc3IDogMSA6IDE0MC43CitJbmdvdWNoZXRpYSo7U3VuemhlbnNraXkgOiAxIDogMTgxMS4zCitLYWJhcmRpbm8tQmFsa2FyaWE7U292ZXRza2l5IDogMSA6IDE5ODUuOQorSW5nb3VjaGV0aWEqO01hbGdvYmVrIDogMSA6IDEuMAorVGNoZXRjaGVuaWEqO0d1ZGVybWVzc2tpeSA6IDEgOiA2ODEuMjk5OTkKK0thYmFyZGluby1CYWxrYXJpYTtUeXJueWF1eiA6IDEgOiA4NjMuNzk5OTkKK1NldmVyby1Pc2V0aW5za2HvYSByZXNwb3U7S2lyb3Zza2l5IDogMSA6IDQxNi4yOTk5OQorVGNoZXRjaGVuaWEqO0dyb3pueWkgOiAxIDogMjkzLjIwMDAxCitTZXZlcm8tT3NldGluc2th72EgcmVzcG91O1ByYXZvYmVyZXpobnlpIDogMSA6IDUzOS4wOTk5OAorSW5nb3VjaGV0aWEqO05henJhbm92c2tpeSA6IDEgOiA0OTEuNQorRGFnZXN0YW47S2l6aWx5dXJ0b3Zza2l5IDogMSA6IDEzNzMuNQorVGNoZXRjaGVuaWEqO0FjaGtob3ktTWFydGFub3Zza2l5IDogMSA6IDkyNy4wCitUY2hldGNoZW5pYSo7R3VkZXJtZXMgOiAxIDogMS4wCitUY2hldGNoZW5pYSo7U2hhbGluc2tpeSA6IDEgOiA5NjEuOTAwMDIKK1RjaGV0Y2hlbmlhKjtBcmd1biA6IDEgOiAxLjAKK1NldmVyby1Pc2V0aW5za2HvYSByZXNwb3U7UHJpZ29yb2RueWkgOiAxIDogMTMyNC41CitTZXZlcm8tT3NldGluc2th72EgcmVzcG91O0lyYWZza2l5IDogMSA6IDk4Mi41CitEYWdlc3RhbjtLaGFzYXZ5dXJ0IDogMSA6IDMyLjc5OTk5OQorU2V2ZXJvLU9zZXRpbnNrYe9hIHJlc3BvdTtEaWdvcnNraXkgOiAxIDogNjA3Ljc5OTk5CitTZXZlcm8tT3NldGluc2th72EgcmVzcG91O0FyZG9uc2tpeSA6IDEgOiA0MDYuNjAwMDEKK0RhZ2VzdGFuO05vdm9sYWtza2l5IDogMSA6IDI2My44OTk5OQorRGFnZXN0YW47S2l6aWx5dXJ0IDogMSA6IDg1LjkwMDAwMgorVGNoZXRjaGVuaWEqO1VydXMtTWFydGFub3Zza2l5IDogMSA6IDQ5MC4zOTk5OQorVGNoZXRjaGVuaWEqO05vemhheS1ZdXJ0b3Zza2l5IDogMSA6IDcwNi43OTk5OQorRGFnZXN0YW47S2F6YmVrb3Zza2l5IDogMSA6IDY3NS4wCitUY2hldGNoZW5pYSo7U2hhbGkgOiAxIDogMS4wCitUY2hldGNoZW5pYSo7VXJ1cy1NYXJ0YW4gOiAxIDogMS4wCitEYWdlc3RhbjtCdXluYWtza2l5IDogMSA6IDIxNDUuMworU2V2ZXJvLU9zZXRpbnNrYe9hIHJlc3BvdTtWbGFkaWthdmtheiA6IDEgOiAyNTMuMworU2V2ZXJvLU9zZXRpbnNrYe9hIHJlc3BvdTtBbGFnaXJza2l5IDogMSA6IDIwMjcuMQorVGNoZXRjaGVuaWEqO1ZlZGVuc2tpeSA6IDEgOiA5NDIuMjk5OTkKK1RjaGV0Y2hlbmlhKjtTaGF0b3lza2l5IDogMSA6IDQzNi4wCitEYWdlc3RhbjtLYXNwaXlzayA6IDEgOiA3MS45MDAwMDIKK0RhZ2VzdGFuO0d1bWJldG92c2tpeSA6IDEgOiA2NjAuNTk5OTgKK0RhZ2VzdGFuO0JvdGxpa2hza2l5IDogMSA6IDk0Ni4yOTk5OQorRGFnZXN0YW47TGVuaW5za2l5IDogMSA6IDEyNTYuNworVGNoZXRjaGVuaWEqO0l0dW0tS2FsaW5za2l5IDogMSA6IDIwOTkuOAorRGFnZXN0YW47VW50c3VrdWxza2l5IDogMSA6IDUzNS4yMDAwMQorRGFnZXN0YW47QnV5bmFrc2sgOiAxIDogMTYuOQorRGFnZXN0YW47S2h1bnpha2hza2l5IDogMSA6IDQ1NC4yOTk5OQorRGFnZXN0YW47QWtodmFraHNraXkgOiAxIDogMzA4LjcwMDAxCitEYWdlc3RhbjtUc3VtYWRpbnNraXkgOiAxIDogMTIyMS40CitEYWdlc3RhbjtLYXlha2VudHNraXkgOiAxIDogODIwLjc5OTk5CitEYWdlc3RhbjtMZXZhc2hpbnNraXkgOiAxIDogMTAzOS43CitEYWdlc3RhbjtHZXJnZWJpbHNraXkgOiAxIDogMzgxLjYwMDAxCitEYWdlc3RhbjtJemJlcmJhc2ggOiAxIDogMTQuNAorRGFnZXN0YW47U292ZXRza2l5IDogMSA6IDEwMTEuNQorRGFnZXN0YW47R3VuaWJza2l5IDogMSA6IDYyOC4yOTk5OQorRGFnZXN0YW47U2VyZ29rYWxpbnNraXkgOiAxIDogNTQxLjU5OTk4CitEYWdlc3RhbjtUc3VudGluc2tpeSA6IDEgOiAxMTg2LjcKK0RhZ2VzdGFuO0FrdXNoaW5za2l5IDogMSA6IDU5OS40MDAwMgorRGFnZXN0YW47VGx5YXJhdGluc2tpeSA6IDEgOiAxMzk2LjEKK0RhZ2VzdGFuO0NoYXJvZGluc2tpeSA6IDEgOiAxMDk5LjEKK0RhZ2VzdGFuO0RlcmJlbnRza2l5IDogMSA6IDczNC43MDAwMQorRGFnZXN0YW47TGFrc2tpeSA6IDEgOiA3MzkuMAorRGFnZXN0YW47S2F5dGFnc2tpeSA6IDEgOiA3NTEuNQorRGFnZXN0YW47RGFraGFkYXlldnNraXkgOiAxIDogODA2LjUKK0RhZ2VzdGFuO0t1bGluc2tpeSA6IDEgOiA2ODAuNTk5OTgKK0RhZ2VzdGFuO0RlcmJlbnQgOiAxIDogMTAzLjMKK0RhZ2VzdGFuO0RhZ2VzdGFuc2tpeWUgT2duaSA6IDEgOiAxLjUKK0RhZ2VzdGFuO1RhYmFzYXJhbnNraXkgOiAxIDogOTI1LjA5OTk4CitEYWdlc3RhbjtBZ3Vsc2tpeSA6IDEgOiA3MzMuMAorRGFnZXN0YW47UnV0dWxza2l5IDogMSA6IDIxNzQuMzk5OQorRGFnZXN0YW47TWFnYXJhbWtlbnRza2l5IDogMSA6IDQxNi4wCitEYWdlc3RhbjtLaGl2c2tpeSA6IDEgOiA1MDcuNzAwMDEKK0RhZ2VzdGFuO1N1bGV5bWFuLVN0YWxza2l5IDogMSA6IDUyOS4yOTk5OQorRGFnZXN0YW47S3VyYWtoc2tpeSA6IDEgOiA2NDkuNzAwMDEKK0RhZ2VzdGFuO0FraHR5bnNraXkgOiAxIDogMTIxNy44CitSVS1VTkstMjg3OCA6IDEgOiAzLjgKK1JVLVVOSy0yODc5IDogMSA6IDMuOAorUlUtVU5LLTI4ODAgOiAxIDogMTQwLjcKK1N2ZXJkbG92c2th72Egb2JsYXN0O0l2ZGVsIDogMSA6IDI1OTg1LjY5OQorUGVybXNrYe9hIG9ibGFzdCBy6XNpZHVlbDtLcmFzbm92aXNoZXJza2l5IDogMSA6IDE0NjIxLjkKK1Blcm1za2HvYSBvYmxhc3QgculzaWR1ZWw7Q2hlcmR5bnNraXkgOiAxIDogMjA3MTEuOQorS29taS1QZXJtaWF0c2tpIG5hdGlvbmFsO0dheW5za2l5IDogMSA6IDE0NjAxLjcKK1N2ZXJkbG92c2th72Egb2JsYXN0O1NldmVyb3VyYWxzayA6IDEgOiAzNzUxLjcKK1N2ZXJkbG92c2th72Egb2JsYXN0O0dhcmluc2tpeSA6IDEgOiAxNzExNy44MDEKK0tvbWktUGVybWlhdHNraSBuYXRpb25hbDtLb3NpbnNraXkgOiAxIDogMzA0MS4xMDAxCitQZXJtc2th72Egb2JsYXN0IHLpc2lkdWVsO1NvbGlrYW1za2l5IDogMSA6IDU0NjAuNzAwMgorU3ZlcmRsb3Zza2HvYSBvYmxhc3Q7S2FycGluc2sgOiAxIDogNTU2Ny4xMDAxCitTdmVyZGxvdnNrYe9hIG9ibGFzdDtTZXJvdnNraXkgOiAxIDogOTkwMy41CitLb21pLVBlcm1pYXRza2kgbmF0aW9uYWw7S29jaGV2c2tpeSA6IDEgOiAzMDE3Ljg5OTkKK1N2ZXJkbG92c2th72Egb2JsYXN0O0tyYXNub3R1cmluc2sgOiAxIDogNjE5LjcwMDAxCitQZXJtc2th72Egb2JsYXN0IHLpc2lkdWVsO0FsZWtzYW5kcm92c2sgOiAxIDogNTgyMi43MDAyCitQZXJtc2th72Egb2JsYXN0IHLpc2lkdWVsO1Vzb2xza2l5IDogMSA6IDMwNzQuNjAwMQorS29taS1QZXJtaWF0c2tpIG5hdGlvbmFsO1l1cmxpbnNraXkgOiAxIDogMzk1Ny42MDAxCitTdmVyZGxvdnNrYe9hIG9ibGFzdDtTZXJvdiA6IDEgOiA0MTkuNzk5OTkKK1N2ZXJkbG92c2th72Egb2JsYXN0O05vdm9seWFsaW5za2l5IDogMSA6IDYwNzcuMjk5OAorUGVybXNrYe9hIG9ibGFzdCBy6XNpZHVlbDtTb2xpa2Ftc2sgOiAxIDogNS41OTk5OTk5CitQZXJtc2th72Egb2JsYXN0IHLpc2lkdWVsO0JlcmV6bmlraSA6IDEgOiAzOTMuMAorS29taS1QZXJtaWF0c2tpIG5hdGlvbmFsO0t1ZHlta2Fyc2tpeSA6IDEgOiA0MzA3LjI5OTgKK1N2ZXJkbG92c2th72Egb2JsYXN0O1RhYm9yaW5za2l5IDogMSA6IDEwOTU1LjYKK1Blcm1za2HvYSBvYmxhc3QgculzaWR1ZWw7S2l6ZWwgOiAxIDogMTE2OC42CitQZXJtc2th72Egb2JsYXN0IHLpc2lkdWVsO0dvcm5vemF2b2Rza2l5IDogMSA6IDY3MzguMAorS29taS1QZXJtaWF0c2tpIG5hdGlvbmFsO1l1c3ZpbnNraXkgOiAxIDogMzQzNC4zOTk5CitLb21pLVBlcm1pYXRza2kgbmF0aW9uYWw7S3VkeW1rYXIgOiAxIDogMi44CitTdmVyZGxvdnNrYe9hIG9ibGFzdDtBbGFwYXlldnNraXkgOiAxIDogMTA3MTEuNworU3ZlcmRsb3Zza2HvYSBvYmxhc3Q7VmVya2hvdHVyc2tpeSA6IDEgOiA1MDUxLjg5OTkKK1Blcm1za2HvYSBvYmxhc3QgculzaWR1ZWw7RG9icnlhbnNraXkgOiAxIDogNDQ1MS4zOTk5CitQZXJtc2th72Egb2JsYXN0IHLpc2lkdWVsO0dyZW15YWNoaW5zayA6IDEgOiAxNDIxLjQKK1N2ZXJkbG92c2th72Egb2JsYXN0O05pemhueWF5YSBUdXJhIDogMSA6IDIzODMuNQorUGVybXNrYe9hIG9ibGFzdCBy6XNpZHVlbDtHdWJha2hhIDogMSA6IDEwMjUuMAorUGVybXNrYe9hIG9ibGFzdCBy6XNpZHVlbDtJbHlpbnNraXkgOiAxIDogMjIyOS4xMDAxCitTdmVyZGxvdnNrYe9hIG9ibGFzdDtLYWNoa2FuYXIgOiAxIDogMzQxLjI5OTk5CitQZXJtc2th72Egb2JsYXN0IHLpc2lkdWVsO0thcmFnYXlza2l5IDogMSA6IDI0MTkuNQorU3ZlcmRsb3Zza2HvYSBvYmxhc3Q7VHVyaW5za2l5IDogMSA6IDcyMjQuNjAwMQorUGVybXNrYe9hIG9ibGFzdCBy6XNpZHVlbDtDaHVzb3Zza295IDogMSA6IDM0OTUuMworUGVybXNrYe9hIG9ibGFzdCBy6XNpZHVlbDtTaXZpbnNraXkgOiAxIDogMjQ1MC41CitTdmVyZGxvdnNrYe9hIG9ibGFzdDtUYXZkaW5za2l5IDogMSA6IDY1MTMuNjAwMQorU3ZlcmRsb3Zza2HvYSBvYmxhc3Q7S3VzaHZhIDogMSA6IDIzMzUuMTAwMQorU3ZlcmRsb3Zza2HvYSBvYmxhc3Q7S3Jhc25vdXJhbHNrIDogMSA6IDE1MzcuMworT3VkbW91cnRpYTtHbGF6b3Zza2l5IDogMSA6IDIwMTUuOAorT3VkbW91cnRpYTtCYWxlemluc2tpeSA6IDEgOiAyNTc4LjMKK1N2ZXJkbG92c2th72Egb2JsYXN0O1ZlcmtobmVzYWxkaW5za2l5IDogMSA6IDI0OTUuMTAwMQorT3VkbW91cnRpYTtZYXJza2l5IDogMSA6IDEzODQuOAorT3VkbW91cnRpYTtLZXpza2l5IDogMSA6IDI1NDkuMTAwMQorUGVybXNrYe9hIG9ibGFzdCBy6XNpZHVlbDtOeXR2ZW5za2l5IDogMSA6IDE2MzcuNQorUGVybXNrYe9hIG9ibGFzdCBy6XNpZHVlbDtLcmFzbm9rYW1zayA6IDEgOiA5MzAuMjAwMDEKK1Blcm1za2HvYSBvYmxhc3QgculzaWR1ZWw7Q2h1c292b3kgOiAxIDogMy4wCitQZXJtc2th72Egb2JsYXN0IHLpc2lkdWVsO1ZlcmVzY2hhZ2luc2tpeSA6IDEgOiAxNTg2LjEKK1Blcm1za2HvYSBvYmxhc3QgculzaWR1ZWw7THlzdmVuc2tpeSA6IDEgOiAzNDQ1LjUKK1N2ZXJkbG92c2th72Egb2JsYXN0O1ByaWdvcm9kbnlpIDogMSA6IDc2MTAuMTAwMQorUGVybXNrYe9hIG9ibGFzdCBy6XNpZHVlbDtQZXJtIDogMSA6IDEwOC4yCitQZXJtc2th72Egb2JsYXN0IHLpc2lkdWVsO1Blcm1za2l5IDogMSA6IDM1MzUuNQorUGVybXNrYe9hIG9ibGFzdCBy6XNpZHVlbDtMeXN2YSA6IDEgOiAyLjcKK1N2ZXJkbG92c2th72Egb2JsYXN0O05pemhuaWF5YSBTYWxkYSA6IDEgOiAyLjkwMDAwMDEKK091ZG1vdXJ0aWE7WXVrYW1lbnNraXkgOiAxIDogODM1LjA5OTk4CitPdWRtb3VydGlhO0dsYXpvdiA6IDEgOiAxLjAKK1Blcm1za2HvYSBvYmxhc3QgculzaWR1ZWw7T2NoZXJza2l5IDogMSA6IDEzMTguMAorU3ZlcmRsb3Zza2HvYSBvYmxhc3Q7VmVya2huaWF5YSBTYWxkYSA6IDEgOiAzLjcKK1N2ZXJkbG92c2th72Egb2JsYXN0O0lyYml0c2tpeSA6IDEgOiA0NjUwLjAKK1N2ZXJkbG92c2th72Egb2JsYXN0O1RhdmRhIDogMSA6IDMuNQorU3ZlcmRsb3Zza2HvYSBvYmxhc3Q7Tml6aG5peSBUYWdpbCA6IDEgOiAzMDYuMTAwMDEKK1Blcm1za2HvYSBvYmxhc3QgculzaWR1ZWw7S3VuZ3Vyc2tpeSA6IDEgOiA0NDQ4LjUKK1N2ZXJkbG92c2th72Egb2JsYXN0O0FsYXBheWV2c2sgOiAxIDogMTA0NS40CitTdmVyZGxvdnNrYe9hIG9ibGFzdDtTbG9ib2RvLVR1cmluc2tpeSA6IDEgOiAyNjAzLjM5OTkKK1Blcm1za2HvYSBvYmxhc3QgculzaWR1ZWw7T2toYW5za2l5IDogMSA6IDgzNi4wOTk5OAorUGVybXNrYe9hIG9ibGFzdCBy6XNpZHVlbDtCZXJ5b3pvdnNraXkgOiAxIDogMjE4OC43CitQZXJtc2th72Egb2JsYXN0IHLpc2lkdWVsO0JvbHNoZXNvc25vdnNraXkgOiAxIDogMjg1Mi44CitPdWRtb3VydGlhO0tyYXNub2dvcnNraXkgOiAxIDogMTc4Mi42CitTdmVyZGxvdnNrYe9hIG9ibGFzdDtCYXlrYWxvdnNraXkgOiAxIDogMjI4Ni44OTk5CitPdWRtb3VydGlhO0RlYmVzc2tpeSA6IDEgOiA5MjQuMDk5OTgKK1N2ZXJkbG92c2th72Egb2JsYXN0O05ldnlhbnNraXkgOiAxIDogMTk3My4xCitPdWRtb3VydGlhO0lncmluc2tpeSA6IDEgOiAyMDgyLjYwMDEKK1N2ZXJkbG92c2th72Egb2JsYXN0O1NoYWxpbnNraXkgOiAxIDogNDgxOS43OTk4CitTdmVyZGxvdnNrYe9hIG9ibGFzdDtSZXpoZXZza2l5IDogMSA6IDIwODMuNjAwMQorU3ZlcmRsb3Zza2HvYSBvYmxhc3Q7S2lyb3ZncmFkIDogMSA6IDk0My43OTk5OQorU3ZlcmRsb3Zza2HvYSBvYmxhc3Q7QXJ0eWVtb3Zza2l5IDogMSA6IDE4NjUuMgorU3ZlcmRsb3Zza2HvYSBvYmxhc3Q7SXJiaXQgOiAxIDogNC4xOTk5OTk4CitTdmVyZGxvdnNrYe9hIG9ibGFzdDtOZXZ5YW5zayA6IDEgOiA0LjkwMDAwMDEKK1Blcm1za2HvYSBvYmxhc3QgculzaWR1ZWw7T3NpbnNreSA6IDEgOiA0MDYuODk5OTkKK1Blcm1za2HvYSBvYmxhc3QgculzaWR1ZWw7Q2hhc3RpbnNraXkgOiAxIDogMTE2My4wCitPdWRtb3VydGlhO1NlbHRpbnNraXkgOiAxIDogMTk5MS42CitQZXJtc2th72Egb2JsYXN0IHLpc2lkdWVsO0tpc2hlcnRza2l5IDogMSA6IDE2NjMuNAorT3VkbW91cnRpYTtTaGFya2Fuc2tpeSA6IDEgOiAxNDIxLjAKK091ZG1vdXJ0aWE7U3l1bXNpbnNraXkgOiAxIDogMTc0NS4zCitQZXJtc2th72Egb2JsYXN0IHLpc2lkdWVsO0t1bmd1ciA6IDEgOiAyLjU5OTk5OTkKK1N2ZXJkbG92c2th72Egb2JsYXN0O1JlenNoIDogMSA6IDYuNjk5OTk5OAorU3ZlcmRsb3Zza2HvYSBvYmxhc3Q7VHVndWx5bXNraXkgOiAxIDogMzQxNC4zCitTdmVyZGxvdnNrYe9hIG9ibGFzdDtBcnR5b21vdnNraXkgOiAxIDogMy40MDAwMDAxCitPdWRtb3VydGlhO1lha3NodXItQm9keWluc2tpeSA6IDEgOiAxNjAxLjcKK1N2ZXJkbG92c2th72Egb2JsYXN0O1BlcnZvdXJhbHNrIDogMSA6IDIzNzYuNworU3ZlcmRsb3Zza2HvYSBvYmxhc3Q7VmVya2hueWF5IFB5c2htYSA6IDEgOiAxMDY5LjkKK1N2ZXJkbG92c2th72Egb2JsYXN0O1RhbGl0c2tpeSA6IDEgOiA0NTUzLjcwMDIKK1N2ZXJkbG92c2th72Egb2JsYXN0O1B5c2htaW5za2l5IDogMSA6IDIxMzkuNjAwMQorT3VkbW91cnRpYTtVdmluc2tpeSA6IDEgOiAyMzQ2Ljg5OTkKK1Blcm1za2HvYSBvYmxhc3QgculzaWR1ZWw7U3Vrc3Vuc2tpeSA6IDEgOiAxNjQyLjgKK091ZG1vdXJ0aWE7Vm90a2luc2tpeSA6IDEgOiAxNjgxLjcKK1N2ZXJkbG92c2th72Egb2JsYXN0O0FzYmVzdCA6IDEgOiA3NTMuNTk5OTgKK1N2ZXJkbG92c2th72Egb2JsYXN0O0thbXlzaGxvdnNraXkgOiAxIDogMjE3NS4wCitTdmVyZGxvdnNrYe9hIG9ibGFzdDtCZXJlem92c2tpeSA6IDEgOiAxMDg0LjYKK1Blcm1za2HvYSBvYmxhc3QgculzaWR1ZWw7T3JkaW5za3kgOiAxIDogMTAwNC40CitTdmVyZGxvdnNrYe9hIG9ibGFzdDtTdWtob2xvemhza2l5IDogMSA6IDE3NDQuNworUGVybXNrYe9hIG9ibGFzdCBy6XNpZHVlbDtCYXJkeW1za2l5IDogMSA6IDIyMDguMworUGVybXNrYe9hIG9ibGFzdCBy6XNpZHVlbDtZZWxvdnNraXkgOiAxIDogMTEzNi44CitTdmVyZGxvdnNrYe9hIG9ibGFzdDtOaXpobmVzZXJnaW5za2l5IDogMSA6IDQ3ODkuMAorU3ZlcmRsb3Zza2HvYSBvYmxhc3Q7QWNoaXRza2l5IDogMSA6IDIxOTEuMzk5OQorUGVybXNrYe9hIG9ibGFzdCBy6XNpZHVlbDtVaW5za2l5IDogMSA6IDE4MDYuNQorT3VkbW91cnRpYTtaYXZ5YWxvdnNraXkgOiAxIDogMjM2Ny44OTk5CitPdWRtb3VydGlhO1ZvdGtpbnNrIDogMSA6IDEuOAorU3ZlcmRsb3Zza2HvYSBvYmxhc3Q7WWVrYXRlcmluYnVyZyA6IDEgOiAxMDU3LjAKK091ZG1vdXJ0aWE7VmF2b3poc2tpeSA6IDEgOiAxNDY5LjkKK091ZG1vdXJ0aWE7SXpoZXZzayA6IDEgOiAyNTQuMworUGVybXNrYe9hIG9ibGFzdCBy6XNpZHVlbDtDaGF5a292c2tpeSA6IDEgOiAxNzg0LjEKK1N2ZXJkbG92c2th72Egb2JsYXN0O0JlbG95YXJza2l5IDogMSA6IDE3NDguMAorU3ZlcmRsb3Zza2HvYSBvYmxhc3Q7U3VraG95IExvZyA6IDEgOiAxLjcKK1N2ZXJkbG92c2th72Egb2JsYXN0O0tyYXNub3VmaW1za2l5IDogMSA6IDMyNzkuNjAwMQorU3ZlcmRsb3Zza2HvYSBvYmxhc3Q7Qm9nZGFub3ZpY2hza2l5IDogMSA6IDEyODYuNworU3ZlcmRsb3Zza2HvYSBvYmxhc3Q7S2FteXNobG92IDogMSA6IDIuOTAwMDAwMQorUGVybXNrYe9hIG9ibGFzdCBy6XNpZHVlbDtPa3R5YWJyc2tpeSA6IDEgOiAzMTkxLjcKK1N2ZXJkbG92c2th72Egb2JsYXN0O1phcmVjaG55IDogMSA6IDEuNAorU3ZlcmRsb3Zza2HvYSBvYmxhc3Q7UmV2ZGEgOiAxIDogMTA1Ny43CitTdmVyZGxvdnNrYe9hIG9ibGFzdDtCb2dkYW5vdmljaCA6IDEgOiAyLjgKK1Blcm1za2HvYSBvYmxhc3QgculzaWR1ZWw7S3V5ZWRpbnNraXkgOiAxIDogMjg5NS44OTk5CitQZXJtc2th72Egb2JsYXN0IHLpc2lkdWVsO0NoZXJudXNoaW5za2l5IDogMSA6IDE3NDQuOAorS291cmdhbnNrYe9hIG9ibGFzdDtTaGF0cm92c2tpeSA6IDEgOiAzNDY2LjYwMDEKK091ZG1vdXJ0aWE7S2l6bmVyc2tpeSA6IDEgOiAyNzA0LjYwMDEKK1Blcm1za2HvYSBvYmxhc3QgculzaWR1ZWw7Q2hheWtvdnNreSA6IDEgOiAyLjMKK091ZG1vdXJ0aWE7TWFsb3B1cmdpbnNraXkgOiAxIDogOTkwLjU5OTk4CitTdmVyZGxvdnNrYe9hIG9ibGFzdDtTeXNlcnRza2l5IDogMSA6IDIyOTEuMAorU3ZlcmRsb3Zza2HvYSBvYmxhc3Q7QXJ0aW5za2l5IDogMSA6IDMwNDQuMgorT3VkbW91cnRpYTtNb3poZ2luc2tpeSA6IDEgOiAyMTUyLjAKK091ZG1vdXJ0aWE7U2FyYXB1bHNraXkgOiAxIDogMTkwMS42CitTdmVyZGxvdnNrYe9hIG9ibGFzdDtQb2xldnNrb3kgOiAxIDogMTU1Ni40CitTdmVyZGxvdnNrYe9hIG9ibGFzdDtLYW1lbnNraXkgOiAxIDogMjI4MC4zOTk5CitLb3VyZ2Fuc2th72Egb2JsYXN0O0RhbG1hdG92c2tpeSA6IDEgOiAzNjk3LjgKK0tvdXJnYW5za2HvYSBvYmxhc3Q7S2F0YXlza2l5IDogMSA6IDI3OTguNQorU3ZlcmRsb3Zza2HvYSBvYmxhc3Q7S2FtZW5zay1VcmFsc2tpeSA6IDEgOiAxOTIuOAorT3VkbW91cnRpYTtTYXJhcHVsIDogMSA6IDIuNQorS291cmdhbnNrYe9hIG9ibGFzdDtTaGFkcmluc2tpeSA6IDEgOiAzOTM3LjcKK0JhY2hraXJpYTtZYW5hdWxza2l5IDogMSA6IDIyNTcuMworT3VkbW91cnRpYTtLYW1iYXJza2l5IDogMSA6IDUxOS4wOTk5OAorT3VkbW91cnRpYTtLaXlhc292c2tpeSA6IDEgOiA2NDcuNzk5OTkKK091ZG1vdXJ0aWE7TW9nenNoYSA6IDEgOiAxLjYKK0JhY2hraXJpYTtUYXR5c2hsaW5za2l5IDogMSA6IDEyODcuNAorQmFjaGtpcmlhO0Fza2luc2tpeSA6IDEgOiAyMzg0LjcKK091ZG1vdXJ0aWE7QWxuYXNoc2tpeSA6IDEgOiA5OTkuNzk5OTkKK1RjaGVsaWFiaW5za2HvYSBvYmxhc3Q7S2FzbGluc2tpeSA6IDEgOiAzMzIzLjIKK1RjaGVsaWFiaW5za2HvYSBvYmxhc3Q7TnlhemVwZXRyb3Zza3NraXkgOiAxIDogMzQxMS44CitCYWNoa2lyaWE7WWFuYXVsIDogMSA6IDIuOTAwMDAwMQorS291cmdhbnNrYe9hIG9ibGFzdDtCZWxvemVyc2tpeSA6IDEgOiAzNjQxLjgKK1RjaGVsaWFiaW5za2HvYSBvYmxhc3Q7S3VuYXNoYWtza2l5IDogMSA6IDMyMzguMworQmFjaGtpcmlhO0tyYXNub2thbXNraXkgOiAxIDogMjAwNC41CitPdWRtb3VydGlhO0dyYWtob3Zza2l5IDogMSA6IDEwMzUuOAorT3VkbW91cnRpYTtLYXJha3VsaW5za2l5IDogMSA6IDY5OC45MDAwMgorVGNoZWxpYWJpbnNrYe9hIG9ibGFzdDtWZXJraG5peSBVZmFsZXkgOiAxIDogMTQ2NC4zCitCYWNoa2lyaWE7QmFsdGFjaGV2c2tpeSA6IDEgOiAxNjgxLjIKK0tvdXJnYW5za2HvYSBvYmxhc3Q7S2FyZ2Fwb2xza2l5IDogMSA6IDM0MjkuODk5OQorQmFjaGtpcmlhO0JlbG9rYXRheXNraXkgOiAxIDogMjczOC44OTk5CitLb3VyZ2Fuc2th72Egb2JsYXN0O1NoYWRyaW5zayA6IDEgOiAyNC4yOTk5OTkKK0JhY2hraXJpYTtLYWx0YXNpbnNraXkgOiAxIDogMTUwOS40CitCYWNoa2lyaWE7S2FyYWlkZWxza2l5IDogMSA6IDM1NzguODk5OQorQmFjaGtpcmlhO01lY2hldGxpbnNraXkgOiAxIDogMTMxMS40CitCYWNoa2lyaWE7RHV2YW5za2l5IDogMSA6IDMwMDkuMAorQmFjaGtpcmlhO05lZnRla2Ftc2sgOiAxIDogMi43CitCYWNoa2lyaWE7QnVyYXlldnNraXkgOiAxIDogMTY2OS4yCitLb3VyZ2Fuc2th72Egb2JsYXN0O1Zhcmdhc2hpbnNraXkgOiAxIDogMjg5OS43CitLb3VyZ2Fuc2th72Egb2JsYXN0O01va3JvdXNvdnNraXkgOiAxIDogMzI4My44CitUY2hlbGlhYmluc2th72Egb2JsYXN0O0tyYXNub2FybWV5c2tpeSA6IDEgOiAzOTMzLjg5OTkKK1RjaGVsaWFiaW5za2HvYSBvYmxhc3Q7S2FzbGkgOiAxIDogMS41CitSVS1VTkstMjg4MSA6IDEgOiAzLjAKK1RjaGVsaWFiaW5za2HvYSBvYmxhc3Q7S3lzaHR5bSA6IDEgOiA4OTYuNDAwMDIKK0tvdXJnYW5za2HvYSBvYmxhc3Q7TWlzaGtpbnNraXkgOiAxIDogMzIwMC44OTk5CitCYWNoa2lyaWE7TWlzaGtpbnNraXkgOiAxIDogNC4xOTk5OTk4CitLb3VyZ2Fuc2th72Egb2JsYXN0O1NjaHVjaGFuc2tpeSA6IDEgOiAyOTcxLjMKK0tvdXJnYW5za2HvYSBvYmxhc3Q7U2h1bWlraGluc2tpeSA6IDEgOiAyNjQ0LjYwMDEKK0JhY2hraXJpYTtJbGlzaGV2c2tpeSA6IDEgOiAxOTE3LjIKK0tvdXJnYW5za2HvYSBvYmxhc3Q7S2V0b3Zza2l5IDogMSA6IDM2MDEuMTAwMQorQmFjaGtpcmlhO0R5dXJ0eXVsaW5za2l5IDogMSA6IDE2ODUuMAorVGNoZWxpYWJpbnNrYe9hIG9ibGFzdDtBcmdheWFzaHNraXkgOiAxIDogMjc5Ni4zOTk5CitLb3VyZ2Fuc2th72Egb2JsYXN0O0NoYXN0b296ZXJza2l5IDogMSA6IDIwNTQuNQorQmFjaGtpcmlhO0tpZ2luc2tpeSA6IDEgOiAxNzc5LjgKK1RjaGVsaWFiaW5za2HvYSBvYmxhc3Q7S2FyYWJhc2ggOiAxIDogNTg1Ljc5OTk5CitLb3VyZ2Fuc2th72Egb2JsYXN0O1l1cmdhbXlzaHNraXkgOiAxIDogMjI5OS43CitUY2hlbGlhYmluc2th72Egb2JsYXN0O1Nvc25vdnNraXkgOiAxIDogMjA5Mi42MDAxCitCYWNoa2lyaWE7TnVyaW1hbm92c2tpeSA6IDEgOiAyNzEyLjcKK0JhY2hraXJpYTtCaXJza2l5IDogMSA6IDE1NjguOQorS291cmdhbnNrYe9hIG9ibGFzdDtMZWJ5YXpoeWV2c2tpeSA6IDEgOiAzMTk1LjIKK1RjaGVsaWFiaW5za2HvYSBvYmxhc3Q7S3VzaW5za2l5IDogMSA6IDE0NDAuOAorQmFjaGtpcmlhO1NhbGF2YXRza2l5IDogMSA6IDMwNTEuOAorQmFjaGtpcmlhO0JsYWdvdmVzaGNoZW5za2l5IDogMSA6IDIyODcuMTAwMQorS291cmdhbnNrYe9hIG9ibGFzdDtNYWt1c2hpbnNraXkgOiAxIDogMzI1MS4xMDAxCitCYWNoa2lyaWE7RHl1cnR1bGkgOiAxIDogMi4yCitLb3VyZ2Fuc2th72Egb2JsYXN0O0t1cmdhbiA6IDEgOiAyMDEuMworVGNoZWxpYWJpbnNrYe9hIG9ibGFzdDtNaWFzcyA6IDEgOiAxNjA3LjYKK1RjaGVsaWFiaW5za2HvYSBvYmxhc3Q7WmxhdG91c3QgOiAxIDogMTY0OS4xCitCYWNoa2lyaWE7Qmlyc2sgOiAxIDogMi4yCitLb3VyZ2Fuc2th72Egb2JsYXN0O1BldHVraG92c2tpeSA6IDEgOiAyNTAxLjMKK0JhY2hraXJpYTtCYWthbGluc2tpeSA6IDEgOiAyMTcyLjgKK0JhY2hraXJpYTtDaGVrbWFndXNoZXZza2l5IDogMSA6IDE5MjYuNQorVGNoZWxpYWJpbnNrYe9hIG9ibGFzdDtDaGVseWFiaW5zayA6IDEgOiA0NzguNQorVGNoZWxpYWJpbnNrYe9hIG9ibGFzdDtTYXRraW5za2l5IDogMSA6IDI1NTAuMTAwMQorVGNoZWxpYWJpbnNrYe9hIG9ibGFzdDtBc2h5bnNraXkgOiAxIDogMjMyNS44CitCYWNoa2lyaWE7S3VzaG5hcmVua292c2tpeSA6IDEgOiAxNjIyLjkKK1RjaGVsaWFiaW5za2HvYSBvYmxhc3Q7S29wZXlzayA6IDEgOiAxODUuMgorQmFjaGtpcmlhO0lnbGluc2tpeSA6IDEgOiAyNDExLjAKK0tvdXJnYW5za2HvYSBvYmxhc3Q7UHJpdG9ib2xueWkgOiAxIDogMTY0OS41CitUY2hlbGlhYmluc2th72Egb2JsYXN0O0NoZWJhcmt1bHNraXkgOiAxIDogMjkyNS44OTk5CitLb3VyZ2Fuc2th72Egb2JsYXN0O1NhZmFrdWxldnNraXkgOiAxIDogMjIyNy4zOTk5CitUY2hlbGlhYmluc2th72Egb2JsYXN0O0thdGF5ZXYtSXZhbm92c2tpeSA6IDEgOiA0NzkzLjEwMDEKK0tvdXJnYW5za2HvYSBvYmxhc3Q7S3VydGFteXNoc2tpeSA6IDEgOiA0NDE5LjM5OTkKK0tvdXJnYW5za2HvYSBvYmxhc3Q7UG9sb3ZpbnNraXkgOiAxIDogMjU4NC4zOTk5CitLb3VyZ2Fuc2th72Egb2JsYXN0O0FsbWVuZXZza2l5IDogMSA6IDI0NTguMzk5OQorVGNoZWxpYWJpbnNrYe9hIG9ibGFzdDtZZXRrdWxza2l5IDogMSA6IDI3MjIuMAorQmFjaGtpcmlhO0JsYWdvdmVzaGNoZW5zayA6IDEgOiAyLjMKK1RjaGVsaWFiaW5za2HvYSBvYmxhc3Q7U2F0a2EgOiAxIDogMi43CitCYWNoa2lyaWE7U2hhcmFuc2tpeSA6IDEgOiAxMzAzLjIKK1RjaGVsaWFiaW5za2HvYSBvYmxhc3Q7QXNoYSA6IDEgOiAyLjUKK0JhY2hraXJpYTtVZmltc2tpeSA6IDEgOiAxNzU1LjYKK1RjaGVsaWFiaW5za2HvYSBvYmxhc3Q7Q2hlYmFya3VsJyA6IDEgOiAxLjYKK0JhY2hraXJpYTtCbGFnb3ZhcnNraXkgOiAxIDogMjExNC4zCitUY2hlbGlhYmluc2th72Egb2JsYXN0O0tvcmtpbm8gOiAxIDogNjIuMDk5OTk4CitUY2hlbGlhYmluc2th72Egb2JsYXN0O1VzdC1LYXRheWV2IDogMSA6IDEuMAorQmFjaGtpcmlhO1VjaGFseSA6IDEgOiA0MjkxLjI5OTgKK0JhY2hraXJpYTtCdXpkeWFrc2tpeSA6IDEgOiAxMzQ5LjEKK0JhY2hraXJpYTtVZmEgOiAxIDogNDU0LjM5OTk5CitCYWNoa2lyaWE7Q2hpc2htaW5za2l5IDogMSA6IDE2MzAuMAorQmFjaGtpcmlhO0Fya2hhbmdlbHNraXkgOiAxIDogMjUwNS41CitUY2hlbGlhYmluc2th72Egb2JsYXN0O1llbWFuemhlbGluc2sgOiAxIDogNTMuMjAwMDAxCitLb3VyZ2Fuc2th72Egb2JsYXN0O1RzZWxpbm55aSA6IDEgOiAzNTU5LjAKK0JhY2hraXJpYTtUdXltYXppbnNraXkgOiAxIDogMjYzOC42MDAxCitUY2hlbGlhYmluc2th72Egb2JsYXN0O1V2ZWxza2l5IDogMSA6IDIzMDAuMzk5OQorVGNoZWxpYWJpbnNrYe9hIG9ibGFzdDtLYXRheWV2LUl2YW5vdnNrIDogMSA6IDEuMworQmFjaGtpcmlhO0JlbG9yZXRza2l5IDogMSA6IDEwMzYwLjMKK0tvdXJnYW5za2HvYSBvYmxhc3Q7WnZlcmlub2dvbG92c2t5IDogMSA6IDkzNS45MDAwMgorVGNoZWxpYWJpbnNrYe9hIG9ibGFzdDtPa3R5YWJyc2tpeSA6IDEgOiA0MDEyLjcKK1RjaGVsaWFiaW5za2HvYSBvYmxhc3Q7VXlza2l5IDogMSA6IDI0NDcuMzk5OQorQmFjaGtpcmlhO0thcm1hc2thbGluc2tpeSA6IDEgOiAxNzAxLjYKK0JhY2hraXJpYTtUdXltYXp5IDogMSA6IDMuMgorVGNoZWxpYWJpbnNrYe9hIG9ibGFzdDtQbGFzdCA6IDEgOiAxMjczLjMKK0JhY2hraXJpYTtPa3R5YWJyc2tpeSA6IDEgOiA2LjAKK1RjaGVsaWFiaW5za2HvYSBvYmxhc3Q7WXV6aG5vLVVyYWxzayA6IDEgOiAyLjA5OTk5OTkKK1RjaGVsaWFiaW5za2HvYSBvYmxhc3Q7VHJvaXRza2l5IDogMSA6IDQ3MjYuMAorQmFjaGtpcmlhO0JlbGViZXlldnNraXkgOiAxIDogMTc3NC45CitCYWNoa2lyaWE7RGF2bGVrYW5vdnNraXkgOiAxIDogMTkxOC44CitPcmVuYm91cmdza2HvYSBvYmxhc3Q7U2V2ZXJueWkgOiAxIDogMjE4NC4yCitSVS1VTkstMjg4MiA6IDEgOiAyLjgKK0JhY2hraXJpYTtHYWZ1cml5c2tpeSA6IDEgOiAzMDgzLjMKK0JhY2hraXJpYTtZZXJtZWtleWV2c2tpeSA6IDEgOiAxNjE0LjcKK0JhY2hraXJpYTtBdXJnYXppbnNraXkgOiAxIDogMjIyOC42MDAxCitCYWNoa2lyaWE7QWxzaGV5ZXZza2l5IDogMSA6IDIxNzYuMworQmFjaGtpcmlhO0Rhdmxla2Fub3ZvIDogMSA6IDEuNQorVGNoZWxpYWJpbnNrYe9hIG9ibGFzdDtWZXJraG5ldXJhbHNraXkgOiAxIDogMzAxNS4zCitUY2hlbGlhYmluc2th72Egb2JsYXN0O1Ryb2l0c2sgOiAxIDogMTUzLjAKK0JhY2hraXJpYTtCZWxlYmV5IDogMSA6IDIuNDAwMDAwMQorT3JlbmJvdXJnc2th72Egb2JsYXN0O0FiZHVsaW5za2l5IDogMSA6IDE2ODUuNgorQmFjaGtpcmlhO0JlbG9yZXRzayA6IDEgOiAzLjU5OTk5OTkKK09yZW5ib3VyZ3NrYe9hIG9ibGFzdDtCdWd1cnVzbGFuc2tpeSA6IDEgOiAyOTYyLjAKK0JhY2hraXJpYTtBYnplbGlsb3Zza2l5IDogMSA6IDM2NTAuMgorQmFjaGtpcmlhO0JpemhidWx5YWtza2l5IDogMSA6IDIyNDguMworQmFjaGtpcmlhO1N0ZXJsaXRhbWFrc2tpeSA6IDEgOiAyMTc4LjYwMDEKK1RjaGVsaWFiaW5za2HvYSBvYmxhc3Q7TmFnYXliYWtza2l5IDogMSA6IDMxOTguMworVGNoZWxpYWJpbnNrYe9hIG9ibGFzdDtDaGVzbWVuc2tpeSA6IDEgOiAyNTMyLjIKK0JhY2hraXJpYTtNaXlha2luc2tpeSA6IDEgOiAyMjY4LjgKK0JhY2hraXJpYTtJc2hpbWJheXNreSA6IDEgOiA0MDM5LjcKK09yZW5ib3VyZ3NrYe9hIG9ibGFzdDtBc2VrZXlldnNraXkgOiAxIDogMjQwMi4wCitUY2hlbGlhYmluc2th72Egb2JsYXN0O0FnYXBvdnNraXkgOiAxIDogMjU0MC4zCitPcmVuYm91cmdza2HvYSBvYmxhc3Q7QnVndXJ1c2xhbiA6IDEgOiAyLjQwMDAwMDEKK0JhY2hraXJpYTtTdGVybGl0YW1hayA6IDEgOiA1LjUKK0JhY2hraXJpYTtTdGVybGliYXNoZXZza2l5IDogMSA6IDE3OTIuOAorVGNoZWxpYWJpbnNrYe9hIG9ibGFzdDtWYXJuZW5za2l5IDogMSA6IDM1MjcuODk5OQorT3JlbmJvdXJnc2th72Egb2JsYXN0O0FiZHVsaW5vIDogMSA6IDIuMworT3JlbmJvdXJnc2th72Egb2JsYXN0O01hdHZleWV2c2tpeSA6IDEgOiA1My41CitCYWNoa2lyaWE7QnVyenlhbnNraXkgOiAxIDogNDYwOC43MDAyCitCYWNoa2lyaWE7SXNoaW1iYXkgOiAxIDogMy41OTk5OTk5CitUY2hlbGlhYmluc2th72Egb2JsYXN0O01hZ25pdG9nb3JzayA6IDEgOiAzOTMuMjAwMDEKK1RjaGVsaWFiaW5za2HvYSBvYmxhc3Q7S2FydGFsaW5za2l5IDogMSA6IDQ4MjEuMTAwMQorT3JlbmJvdXJnc2th72Egb2JsYXN0O1Bvbm9tYXJ5b3Zza2l5IDogMSA6IDIwOTguOAorQmFjaGtpcmlhO01lbGV1enNraXkgOiAxIDogMzA1Mi4xMDAxCitCYWNoa2lyaWE7RnlvZG9yb3Zza2l5IDogMSA6IDE5MjYuNgorQmFjaGtpcmlhO1NhbGF2YXQgOiAxIDogMi40MDAwMDAxCitPcmVuYm91cmdza2HvYSBvYmxhc3Q7QnV6dWx1a3NraXkgOiAxIDogMzIzNy41CitCYWNoa2lyaWE7QmF5bWFrc2tpeSA6IDEgOiA2MTIyLjAKK09yZW5ib3VyZ3NrYe9hIG9ibGFzdDtTaGFybHlrc2tpeSA6IDEgOiAzMTE2LjcKK09yZW5ib3VyZ3NrYe9hIG9ibGFzdDtHcmFjaGV2c2tpeSA6IDEgOiAxNjgzLjEKK1RjaGVsaWFiaW5za2HvYSBvYmxhc3Q7S2l6aWxza2l5IDogMSA6IDQ0MzMuMjk5OAorT3JlbmJvdXJnc2th72Egb2JsYXN0O0tyYXNub2d2YXJkZXlza2l5IDogMSA6IDMwNjEuNQorVGNoZWxpYWJpbnNrYe9hIG9ibGFzdDtLYXJ0YWx5IDogMSA6IDIuMAorQmFjaGtpcmlhO0t1Z2FyY2hpbnNraXkgOiAxIDogMzY3NC44CitCYWNoa2lyaWE7WmlsYWlyc2tpeSA6IDEgOiA1MjkwLjcwMDIKK0JhY2hraXJpYTtNZWxldXogOiAxIDogMi43CitCYWNoa2lyaWE7S3VtZXJ0YXVza2l5IDogMSA6IDI4NDguMworT3JlbmJvdXJnc2th72Egb2JsYXN0O0FsZWtzYW5kcm92c2tpeSA6IDEgOiAyOTk4Ljg5OTkKK09yZW5ib3VyZ3NrYe9hIG9ibGFzdDtLdXJtYW5heWV2c2tpeSA6IDEgOiAzMTY0LjYwMDEKK1RjaGVsaWFiaW5za2HvYSBvYmxhc3Q7QnJlZGluc2tpeSA6IDEgOiA1MDYzLjIwMDIKK09yZW5ib3VyZ3NrYe9hIG9ibGFzdDtCdXp1bHVrIDogMSA6IDMuNQorQmFjaGtpcmlhO0t1bWVydGF5IDogMSA6IDIuNQorQmFjaGtpcmlhO1NpYmF5IDogMSA6IDQuMTk5OTk5OAorT3JlbmJvdXJnc2th72Egb2JsYXN0O1Nvcm9jaGluc2tpeSA6IDEgOiAyNjgwLjMKK09yZW5ib3VyZ3NrYe9hIG9ibGFzdDtPa3R5YWJyc2tpeSA6IDEgOiAzMDQwLjg5OTkKK09yZW5ib3VyZ3NrYe9hIG9ibGFzdDtOb3Zvc2VyZ2l5ZXZza2l5IDogMSA6IDQ1ODEuNzk5OAorQmFjaGtpcmlhO0JheW1hayA6IDEgOiAzLjgKK09yZW5ib3VyZ3NrYe9hIG9ibGFzdDtUb3Rza2l5IDogMSA6IDMxNTUuOAorT3JlbmJvdXJnc2th72Egb2JsYXN0O1R5dWxnYW5za2l5IDogMSA6IDIwNDQuNAorQmFjaGtpcmlhO1ppYW5jaHVyaW5za2l5IDogMSA6IDM3MDQuMzk5OQorT3JlbmJvdXJnc2th72Egb2JsYXN0O0t2YXJrZW5za2l5IDogMSA6IDU1NzYuNjAwMQorQmFjaGtpcmlhO0toYXlidWxsaW5za2l5IDogMSA6IDQzODIuMTAwMQorUlUtVU5LLTI4ODMgOiAxIDogMy4yCitPcmVuYm91cmdza2HvYSBvYmxhc3Q7UGVyZXZvbG90c2tpeSA6IDEgOiAyNjA5LjUKK09yZW5ib3VyZ3NrYe9hIG9ibGFzdDtQZXJ2b21heXNraXkgOiAxIDogNTA4Mi4wCitPcmVuYm91cmdza2HvYSBvYmxhc3Q7U2FrbWFyc2tpeSA6IDEgOiAxOTY0LjEKK09yZW5ib3VyZ3NrYe9hIG9ibGFzdDtUYXNobGluc2tpeSA6IDEgOiAzMTA4LjgKK09yZW5ib3VyZ3NrYe9hIG9ibGFzdDtTYXJha3Rhc2hza2l5IDogMSA6IDQxNjAuMzk5OQorT3JlbmJvdXJnc2th72Egb2JsYXN0O09yZW5idXJnc2tpeSA6IDEgOiA2MDE1LjcwMDIKK09yZW5ib3VyZ3NrYe9hIG9ibGFzdDtBZGFtb3Zza2l5IDogMSA6IDYyNTYuMzk5OQorT3JlbmJvdXJnc2th72Egb2JsYXN0O09yZW5idXJnIDogMSA6IDM2My4xMDAwMQorT3JlbmJvdXJnc2th72Egb2JsYXN0O0t1dmFuZHlrc2tpeSA6IDEgOiA2NTI2LjEwMDEKK09yZW5ib3VyZ3NrYe9hIG9ibGFzdDtHYXlza2l5IDogMSA6IDI5MTcuODk5OQorT3JlbmJvdXJnc2th72Egb2JsYXN0O05vdm9vcnNraXkgOiAxIDogMzQ1NC4wCitPcmVuYm91cmdza2HvYSBvYmxhc3Q7SWxla3NraXkgOiAxIDogMzUxMi4zOTk5CitPcmVuYm91cmdza2HvYSBvYmxhc3Q7QmVseWFldnNraXkgOiAxIDogMzQyOS4zOTk5CitPcmVuYm91cmdza2HvYSBvYmxhc3Q7S3V2YW5keWsgOiAxIDogMy4wCitPcmVuYm91cmdza2HvYSBvYmxhc3Q7U3ZldGxpbnNraXkgOiAxIDogNTE3OS44OTk5CitPcmVuYm91cmdza2HvYSBvYmxhc3Q7R2F5IDogMSA6IDEuOQorT3JlbmJvdXJnc2th72Egb2JsYXN0O01lZG5vZ29yc2sgOiAxIDogMi43CitPcmVuYm91cmdza2HvYSBvYmxhc3Q7U29sLUlsZXRza2l5IDogMSA6IDQ3NzcuNzAwMgorT3JlbmJvdXJnc2th72Egb2JsYXN0O1lhc25lbnNraXkgOiAxIDogMzY3My42MDAxCitPcmVuYm91cmdza2HvYSBvYmxhc3Q7QWtidWxha3NraXkgOiAxIDogMzk4NS42MDAxCitPcmVuYm91cmdza2HvYSBvYmxhc3Q7T3JzayA6IDEgOiA3NjEuOTAwMDIKK09yZW5ib3VyZ3NrYe9hIG9ibGFzdDtOb3ZvdHJvaXRzayA6IDEgOiAyMzEuODk5OTkKK09yZW5ib3VyZ3NrYe9hIG9ibGFzdDtEb21iYXJvdnNraXkgOiAxIDogMzQ4MS42MDAxCitPcmVuYm91cmdza2HvYSBvYmxhc3Q7WWFzbnkgOiAxIDogMS44CitSVS1VTkstMjg4NCA6IDEgOiAzLjAKK1JVLVVOSy0yODg1IDogMSA6IDIuOAorUlUtVU5LLTI4ODYgOiAxIDogMy4yCitJYW1hbG8tTmVuZXRza2kgbmF0aW9uYWw7WWFtYWxza2l5IDogMSA6IDExMjQ3Ni4wCitJYW1hbG8tTmVuZXRza2kgbmF0aW9uYWw7VGF6b3Zza2l5IDogMSA6IDEyMjg0Ni4xCitJYW1hbG8tTmVuZXRza2kgbmF0aW9uYWw7UHJpdXJhbHNraXkgOiAxIDogNjUzMTguMTAyCitJYW1hbG8tTmVuZXRza2kgbmF0aW9uYWw7UHVyb3Zza2l5IDogMSA6IDYwNzQuNjAwMQorSWFtYWxvLU5lbmV0c2tpIG5hdGlvbmFsO05hZHltc2tpeSA6IDEgOiA5ODAyNS4zOTgKK0lhbWFsby1OZW5ldHNraSBuYXRpb25hbDtLcmFub3NlbGt1cHNraXkgOiAxIDogMTA1OTU4LjQKK0lhbWFsby1OZW5ldHNraSBuYXRpb25hbDtTaHVyeXNoa2Fyc2tpeSA6IDEgOiA1NDE1MS41CitJYW1hbG8tTmVuZXRza2kgbmF0aW9uYWw7TGFieXRuYW5naSA6IDEgOiAxNy41CitJYW1hbG8tTmVuZXRza2kgbmF0aW9uYWw7U2FsZWtoYXJkIDogMSA6IDIwLjUKK0lhbWFsby1OZW5ldHNraSBuYXRpb25hbDtOb3Z5aSBVcmVuZ295IDogMSA6IDI4LjI5OTk5OQorS2hhbnR5LU1hbnNpc2tpIG5hdGlvbmFsO0JlcmV6b3Zza2l5IDogMSA6IDg1ODc0LjAKK0lhbWFsby1OZW5ldHNraSBuYXRpb25hbDtOYWR5bSA6IDEgOiA0MC4wCitLaGFudHktTWFuc2lza2kgbmF0aW9uYWw7QmVsb3lhcnNraXkgOiAxIDogNDI0MDEuNQorSWFtYWxvLU5lbmV0c2tpIG5hdGlvbmFsO011cmF2bGVua28gOiAxIDogMjMuNQorS2hhbnR5LU1hbnNpc2tpIG5hdGlvbmFsO0JlbG95YXJza3kgOiAxIDogMTkuMQorS2hhbnR5LU1hbnNpc2tpIG5hdGlvbmFsO09rdHlhYnJza2l5IDogMSA6IDI1MDY4LjkKK0toYW50eS1NYW5zaXNraSBuYXRpb25hbDtTdXJndXRza2l5IDogMSA6IDk0MDI4LjYwMgorSWFtYWxvLU5lbmV0c2tpIG5hdGlvbmFsO05veWFicnNrIDogMSA6IDIyLjI5OTk5OQorS2hhbnR5LU1hbnNpc2tpIG5hdGlvbmFsO0toYW50eS1NYW5zaXlza2l5IDogMSA6IDU2NzM5LjY5OQorS2hhbnR5LU1hbnNpc2tpIG5hdGlvbmFsO05pemhuZXZhcnRvdnNraXkgOiAxIDogMTE4MDY4LjgKK0toYW50eS1NYW5zaXNraSBuYXRpb25hbDtTb3ZldHNraXkgOiAxIDogMjk3NjEuMTk5CitLaGFudHktTWFuc2lza2kgbmF0aW9uYWw7TnlhZ2FuIDogMSA6IDMuNworS2hhbnR5LU1hbnNpc2tpIG5hdGlvbmFsO0tvZ2FseW0gOiAxIDogMi4yCitLaGFudHktTWFuc2lza2kgbmF0aW9uYWw7UmFkdXpobnlpIDogMSA6IDQwLjcwMDAwMQorS2hhbnR5LU1hbnNpc2tpIG5hdGlvbmFsO1Bva2FjaHkgOiAxIDogNTMuMjAwMDAxCitLaGFudHktTWFuc2lza2kgbmF0aW9uYWw7U3VyZ3V0IDogMSA6IDMzLjAKK0toYW50eS1NYW5zaXNraSBuYXRpb25hbDtMYW5nZXBhcyA6IDEgOiAxMy4xCitLaGFudHktTWFuc2lza2kgbmF0aW9uYWw7S29uZGluc2tpeSA6IDEgOiA1NTM0NC44MDEKK0toYW50eS1NYW5zaXNraSBuYXRpb25hbDtOZWZ0ZXl1Z2Fuc2tpeSA6IDEgOiAyNDk4MS4xOTkKK0toYW50eS1NYW5zaXNraSBuYXRpb25hbDtOZWZ0ZXVnYW5zayA6IDEgOiAxLjAKK0toYW50eS1NYW5zaXNraSBuYXRpb25hbDtLaGFudHktTWFuc3lpc2sgOiAxIDogMi4zCitUb21za2HvYSBvYmxhc3Q7S2FyZ2Fzb2tza2l5IDogMSA6IDg1MjAxLjg5OAorS2hhbnR5LU1hbnNpc2tpIG5hdGlvbmFsO01lZ2lvbiA6IDEgOiA0MS41OTk5OTgKK0toYW50eS1NYW5zaXNraSBuYXRpb25hbDtOaXpzaG52YXJ0b3ZzayA6IDEgOiAyNC41CitSVS1VTkstMjg4NyA6IDEgOiAzNzIzNC44OTgKK1JVLVVOSy0yODg4IDogMSA6IDM3MjM0Ljg5OAorS2hhbnR5LU1hbnNpc2tpIG5hdGlvbmFsO1B5dC1ZYWtoIDogMSA6IDM4LjA5OTk5OAorVG9tc2th72Egb2JsYXN0O1N0cmV6aGV2b2ogOiAxIDogMi43CitLaGFudHktTWFuc2lza2kgbmF0aW9uYWw7VXJheSA6IDEgOiA4LjM5OTk5OTYKK1Rpb3VtZW5za2HvYSBvYmwuIHLpc2lkdWU7VXZhdHNraXkgOiAxIDogNDY5NjAuODAxCitUb21za2HvYSBvYmxhc3Q7VmVya2huZWtldHNraXkgOiAxIDogNDEwNDcuMTAyCitUb21za2HvYSBvYmxhc3Q7UGFyYWJlbHNraXkgOiAxIDogMzMyMTkuMAorVG9tc2th72Egb2JsYXN0O0tvbHBhc2hldnNraXkgOiAxIDogMTQ0NTAuMgorVGlvdW1lbnNrYe9hIG9ibC4gculzaWR1ZTtUb2JvbHNraXkgOiAxIDogMTgxNDMuMzAxCitUaW91bWVuc2th72Egb2JsLiBy6XNpZHVlO1ZhZ2F5c2tpeSA6IDEgOiAxODI2My4xCitPbXNrYe9hIG9ibGFzdDtUYXJza2l5IDogMSA6IDE1MzQ5LjcKK09tc2th72Egb2JsYXN0O1VzdC1Jc2hpbXNraXkgOiAxIDogODMzNS45MDA0CitUb21za2HvYSBvYmxhc3Q7UGVydm9tYXlza2l5IDogMSA6IDEzNDEyLjAKK1RvbXNrYe9hIG9ibGFzdDtUZWd1bGRldHNraXkgOiAxIDogMTA3NDUuNAorVG9tc2th72Egb2JsYXN0O0tvbHBhc2hldm8gOiAxIDogMi4zCitUaW91bWVuc2th72Egb2JsLiBy6XNpZHVlO1RvYm9sc2sgOiAxIDogMTUuMgorT21za2HvYSBvYmxhc3Q7VGV2cml6c2tpeSA6IDEgOiAxMDIzNi45CitUaW91bWVuc2th72Egb2JsLiBy6XNpZHVlO05pemhuZXRhdmRpbnNraXkgOiAxIDogNzY5NS44OTk5CitUaW91bWVuc2th72Egb2JsLiBy6XNpZHVlO1lhcmtvdnNraXkgOiAxIDogNjUwMy44OTk5CitUb21za2HvYSBvYmxhc3Q7TW9sY2hhbm92c2tpeSA6IDEgOiA1NzcwLjI5OTgKK1RvbXNrYe9hIG9ibGFzdDtDaGFpbnNraXkgOiAxIDogNjAyMi42MDAxCitUb21za2HvYSBvYmxhc3Q7QXNpbm92c2tpeSA6IDEgOiA0MjQyLjM5OTkKK1RvbXNrYe9hIG9ibGFzdDtCYWtjaGFyc2tpeSA6IDEgOiAyNDM5MC44MDEKK09tc2th72Egb2JsYXN0O1puYW1lbnNraXkgOiAxIDogMzIzOC4zCitUb21za2HvYSBvYmxhc3Q7S3Jpdm9zaGVpbnNraXkgOiAxIDogMzgyNC4wCitPbXNrYe9hIG9ibGFzdDtTZWRlbG5pa292c2tpeSA6IDEgOiA1MTY5Ljg5OTkKK1JVLVVOSy0yODg5IDogMSA6IDEuNworVGlvdW1lbnNrYe9hIG9ibC4gculzaWR1ZTtUeXVtZW5za2l5IDogMSA6IDQ3NjIuODk5OQorVG9tc2th72Egb2JsYXN0O1RvbXNraXkgOiAxIDogMTI5MTYuNworVGlvdW1lbnNrYe9hIG9ibC4gculzaWR1ZTtWaWt1bG92c2tpeSA6IDEgOiA0ODI2LjM5OTkKK09tc2th72Egb2JsYXN0O0JvbHNoZXVrb3Zza2l5IDogMSA6IDk5NTIuNzAwMgorVG9tc2th72Egb2JsYXN0O1p5cnlhbnNraXkgOiAxIDogMTA4MTQuNQorVGlvdW1lbnNrYe9hIG9ibC4gculzaWR1ZTtBcm9tYXNoZXZza2l5IDogMSA6IDM5NTIuMgorTm92b3NpYmlyc2th72Egb2JsYXN0O0t5c2h0b3Zza2l5IDogMSA6IDEwMzc4LjEKK1Rpb3VtZW5za2HvYSBvYmwuIHLpc2lkdWU7WXVyZ2luc2tpeSA6IDEgOiA0MDY4LjgKK1RvbXNrYe9hIG9ibGFzdDtTaGVnYXJza2l5IDogMSA6IDQyNDUuNQorVG9tc2th72Egb2JsYXN0O0FzaW5vIDogMSA6IDQuMTk5OTk5OAorVGlvdW1lbnNrYe9hIG9ibC4gculzaWR1ZTtUeXVtZW4gOiAxIDogMjMuNQorTm92b3NpYmlyc2th72Egb2JsYXN0O1NldmVybnlpIDogMSA6IDE1MTU1LjUKK1Rpb3VtZW5za2HvYSBvYmwuIHLpc2lkdWU7WWFsdXRvcm92c2tpeSA6IDEgOiAzMDAxLjM5OTkKK1Rpb3VtZW5za2HvYSBvYmwuIHLpc2lkdWU7U29yb2tpbnNraXkgOiAxIDogMjkzOS4zCitUaW91bWVuc2th72Egb2JsLiBy6XNpZHVlO1phdm9kb3Vrb3Zza2l5IDogMSA6IDI3MjUuMTAwMQorT21za2HvYSBvYmxhc3Q7VGFyYSA6IDEgOiAzLjAKK0tlbWVyb3Zza2HvYSBvYmxhc3Q7TWFyaWluc2tpeSA6IDEgOiA1MzYxLjEwMDEKK1Rpb3VtZW5za2HvYSBvYmwuIHLpc2lkdWU7R29seXNobWFub3Zza2l5IDogMSA6IDQwNTIuMTAwMQorVGlvdW1lbnNrYe9hIG9ibC4gculzaWR1ZTtJc2V0c2tpeSA6IDEgOiAyNTQzLjcKK09tc2th72Egb2JsYXN0O0tvbG9zb3Zza2l5IDogMSA6IDQ4NDguMjAwMgorVG9tc2th72Egb2JsYXN0O1RvbXNrIDogMSA6IDE1MS43CitUaW91bWVuc2th72Egb2JsLiBy6XNpZHVlO09tdXRpbnNraXkgOiAxIDogMzMxOS44CitPbXNrYe9hIG9ibGFzdDtNdXJvbXRzZXZza2l5IDogMSA6IDY3OTcuMzk5OQorT21za2HvYSBvYmxhc3Q7S3J1dGluc2tpeSA6IDEgOiA1OTA2LjM5OTkKK1Rpb3VtZW5za2HvYSBvYmwuIHLpc2lkdWU7QWJhdHNraXkgOiAxIDogMzkwMi44OTk5CitPbXNrYe9hIG9ibGFzdDtCb2xzaGVyZWNoZW5za2l5IDogMSA6IDE3LjkKK1RvbXNrYe9hIG9ibGFzdDtLb3poZXZuaWtvdnNraXkgOiAxIDogMzYzMC41CitUaW91bWVuc2th72Egb2JsLiBy6XNpZHVlO1lhbHV0b3JvdnNrIDogMSA6IDEuMworS2VtZXJvdnNrYe9hIG9ibGFzdDtZYXlza2l5IDogMSA6IDI5NjQuNQorVGlvdW1lbnNrYe9hIG9ibC4gculzaWR1ZTtJc2hpbXNraXkgOiAxIDogNTQ3NS4yOTk4CitLZW1lcm92c2th72Egb2JsYXN0O0l6aG1vcnNraXkgOiAxIDogMzQwOS43CitOb3Zvc2liaXJza2HvYSBvYmxhc3Q7VWJpbnNraXkgOiAxIDogMTM5NjMuMworTm92b3NpYmlyc2th72Egb2JsYXN0O0tvbHl2YW5za2l5IDogMSA6IDEwMDQzLjAKK09tc2th72Egb2JsYXN0O1R5dWthbGluc2tpeSA6IDEgOiA2MTM3Ljg5OTkKK0tlbWVyb3Zza2HvYSBvYmxhc3Q7VHlhemhpbnNraXkgOiAxIDogMzMyOS44OTk5CitUaW91bWVuc2th72Egb2JsLiBy6XNpZHVlO1Vwb3JvdnNraXkgOiAxIDogMjk3My4xMDAxCitUaW91bWVuc2th72Egb2JsLiBy6XNpZHVlO1phdm9kb3Vrb3ZzayA6IDEgOiAxLjMKK05vdm9zaWJpcnNrYe9hIG9ibGFzdDtWZW5nZXJvdnNraXkgOiAxIDogNjU5Ni43OTk4CitUaW91bWVuc2th72Egb2JsLiBy6XNpZHVlO0FybWl6b25za2l5IDogMSA6IDMyMTYuMAorTm92b3NpYmlyc2th72Egb2JsYXN0O0t1eWJ5c2hldnNraXkgOiAxIDogODUxNy4yOTk4CitLZW1lcm92c2th72Egb2JsYXN0O01hcmlpbnNrIDogMSA6IDEuMAorS2VtZXJvdnNrYe9hIG9ibGFzdDtZYXNoa2luc2tpeSA6IDEgOiAzNTk5LjAKK05vdm9zaWJpcnNrYe9hIG9ibGFzdDtVc3QtVGFya3NraXkgOiAxIDogNDM0My4yMDAyCitLZW1lcm92c2th72Egb2JsYXN0O1l1cmdpbnNraXkgOiAxIDogMjU5OS44CitLZW1lcm92c2th72Egb2JsYXN0O0NoZWJ1bGluc2tpeSA6IDEgOiAzNTcxLjcKK1Rpb3VtZW5za2HvYSBvYmwuIHLpc2lkdWU7SXNoaW0gOiAxIDogMi41CitSVS1VTkstMjg5MCA6IDEgOiAzNjk0LjUKK0tlbWVyb3Zza2HvYSBvYmxhc3Q7QW56aGVyby1TdWR6aGVuc2sgOiAxIDogMS4wCitLZW1lcm92c2th72Egb2JsYXN0O1RheWdhIDogMSA6IDEuMAorTm92b3NpYmlyc2th72Egb2JsYXN0O0JvbG90bmluc2tpeSA6IDEgOiAzMTU2Ljg5OTkKK1Rpb3VtZW5za2HvYSBvYmwuIHLpc2lkdWU7QmVyZHl1emhza2l5IDogMSA6IDMxOTkuNworTm92b3NpYmlyc2th72Egb2JsYXN0O0NodWx5bXNraXkgOiAxIDogODU5MS41CitPbXNrYe9hIG9ibGFzdDtOaXpobmVvbXNraXkgOiAxIDogMjk5Mi41CitLZW1lcm92c2th72Egb2JsYXN0O1Rpc3Vsc2tpeSA6IDEgOiAxMDg2MC4yCitPbXNrYe9hIG9ibGFzdDtTYXJnYXRza2l5IDogMSA6IDYwMzAuNzk5OAorVGlvdW1lbnNrYe9hIG9ibC4gculzaWR1ZTtTbGFka292c2tpeSA6IDEgOiAzNjkzLjIKK0tlbWVyb3Zza2HvYSBvYmxhc3Q7S2VtZXJvdnNraXkgOiAxIDogNDQ5OS43MDAyCitPbXNrYe9hIG9ibGFzdDtUdWthbGluc2sgOiAxIDogNC42OTk5OTk4CitUaW91bWVuc2th72Egb2JsLiBy6XNpZHVlO0themFuc2tpeSA6IDEgOiAyODQ1LjEwMDEKK0tlbWVyb3Zza2HvYSBvYmxhc3Q7QmVyZXpvdnNraXkgOiAxIDogMS44CitPbXNrYe9hIG9ibGFzdDtHb3Jrb3Zza2l5IDogMSA6IDI2NTguMTAwMQorS2VtZXJvdnNrYe9hIG9ibGFzdDtZdXJnYSA6IDEgOiAxLjAKK05vdm9zaWJpcnNrYe9hIG9ibGFzdDtLYXJnYXRza2l5IDogMSA6IDU2NjYuNzk5OAorS2VtZXJvdnNrYe9hIG9ibGFzdDtUb3BraW5za2l5IDogMSA6IDI3NDkuNworTm92b3NpYmlyc2th72Egb2JsYXN0O01vc2hrb3Zza2l5IDogMSA6IDI3MTAuOAorTm92b3NpYmlyc2th72Egb2JsYXN0O0NoYW5vdnNraXkgOiAxIDogNTI4OC4xMDAxCitOb3Zvc2liaXJza2HvYSBvYmxhc3Q7VGF0YXJza2l5IDogMSA6IDUyMTYuNQorT21za2HvYSBvYmxhc3Q7THl1Ymluc2tpeSA6IDEgOiAzMDMyLjAKK05vdm9zaWJpcnNrYe9hIG9ibGFzdDtLb2NoZW5ldnNraXkgOiAxIDogNDkyMy4xMDAxCitPbXNrYe9hIG9ibGFzdDtOYXp5dmF5ZXZzayA6IDEgOiAyLjkwMDAwMDEKK05vdm9zaWJpcnNrYe9hIG9ibGFzdDtUb2d1Y2hpbnNraXkgOiAxIDogNjM4OS41CitOb3Zvc2liaXJza2HvYSBvYmxhc3Q7Tm92b3NpYmlyc2tpeSA6IDEgOiAyNzM4LjUKK05vdm9zaWJpcnNrYe9hIG9ibGFzdDtLdXliaXNoZXYgOiAxIDogMy4wCitPbXNrYe9hIG9ibGFzdDtPbXNraXkgOiAxIDogMzY2My43CitOb3Zvc2liaXJza2HvYSBvYmxhc3Q7QmFyYWJpbnNraXkgOiAxIDogNTYxMy41CitLZW1lcm92c2th72Egb2JsYXN0O0tyYXBpdmluc2tpeSA6IDEgOiA0MjA4LjcwMDIKK0tlbWVyb3Zza2HvYSBvYmxhc3Q7S2VtZXJvdm8gOiAxIDogMy4wOTk5OTk5CitOb3Zvc2liaXJza2HvYSBvYmxhc3Q7QmFyYWJpbnNrIDogMSA6IDQuMAorT21za2HvYSBvYmxhc3Q7S2FsYWNoaW5za2l5IDogMSA6IDI2NDguMzk5OQorT21za2HvYSBvYmxhc3Q7SXNpbGt1bHNraXkgOiAxIDogMzAyMi44OTk5CitLZW1lcm92c2th72Egb2JsYXN0O1RvcGtpIDogMSA6IDEuMAorTm92b3NpYmlyc2th72Egb2JsYXN0O1RhdGFyc2sgOiAxIDogMS42CitPbXNrYe9hIG9ibGFzdDtNb3NrYWxlbnNraXkgOiAxIDogMjQxNi4zOTk5CitPbXNrYe9hIG9ibGFzdDtLb3JtaWxvdnNraXkgOiAxIDogMTg3MC4zCitOb3Zvc2liaXJza2HvYSBvYmxhc3Q7Tm92b3NpYmlyc2sgOiAxIDogNDg1LjM5OTk5CitLZW1lcm92c2th72Egb2JsYXN0O1Byb215c2hsZW5ub3Zza2l5IDogMSA6IDI5MzEuMzk5OQorT21za2HvYSBvYmxhc3Q7TWFyeWFub3Zza2l5IDogMSA6IDE5MzYuMAorT21za2HvYSBvYmxhc3Q7T21zayA6IDEgOiA0MjcuNzAwMDEKK05vdm9zaWJpcnNrYe9hIG9ibGFzdDtDaGlzdG9venlvcm55aSA6IDEgOiA2MDUyLjYwMDEKK09tc2th72Egb2JsYXN0O0thbGFjaGluc2sgOiAxIDogMS42CitOb3Zvc2liaXJza2HvYSBvYmxhc3Q7WmR2aW5za2l5IDogMSA6IDUwMDEuNzk5OAorT21za2HvYSBvYmxhc3Q7T2tvbmVzaG5pa292c2tpeSA6IDEgOiAzMDMwLjIKK05vdm9zaWJpcnNrYe9hIG9ibGFzdDtJc2tpdGltc2tpeSA6IDEgOiAzNzAxLjg5OTkKK05vdm9zaWJpcnNrYe9hIG9ibGFzdDtPYiA6IDEgOiA1LjAKK0tlbWVyb3Zza2HvYSBvYmxhc3Q7TGVuaW5zay1rdXpuZXRza2l5IDogMSA6IDIyOTQuNjAwMQorT21za2HvYSBvYmxhc3Q7SXNpbCdrdWwnIDogMSA6IDIuMDk5OTk5OQorTm92b3NpYmlyc2th72Egb2JsYXN0O0t1cGluc2tpeSA6IDEgOiA2MDM0LjM5OTkKK05vdm9zaWJpcnNrYe9hIG9ibGFzdDtEb3ZvbGVuc2tpeSA6IDEgOiA0MDg1LjIKK0tlbWVyb3Zza2HvYSBvYmxhc3Q7TWV6aGR1cmVjaGVuc2tpeSA6IDEgOiAxMTU0NS44CitPbXNrYe9hIG9ibGFzdDtUYXZyaWNoZXNraXkgOiAxIDogMjY0Ni42MDAxCitOb3Zvc2liaXJza2HvYSBvYmxhc3Q7TWFzbHlhbmluc2tpeSA6IDEgOiAzNzczLjM5OTkKK05vdm9zaWJpcnNrYe9hIG9ibGFzdDtCZXJkc2sgOiAxIDogNjguNDAwMDAyCitPbXNrYe9hIG9ibGFzdDtBem92c2t5IG5lbWV0c2t5IG5hdGlvbmFsIDogMSA6IDgzMy4yOTk5OQorTm92b3NpYmlyc2th72Egb2JsYXN0O09yZHluc2tpeSA6IDEgOiAzNTQ4LjUKK09tc2th72Egb2JsYXN0O1NoZXJiYWt1bHNraXkgOiAxIDogMjUwMy4xMDAxCitOb3Zvc2liaXJza2HvYSBvYmxhc3Q7SXNraXRpbSA6IDEgOiAyLjMKK09tc2th72Egb2JsYXN0O0NoZXJsYWtza2l5IDogMSA6IDQ1NTUuNQorT21za2HvYSBvYmxhc3Q7UG9sdGF2c2tpeSA6IDEgOiAyNzYxLjUKK0tlbWVyb3Zza2HvYSBvYmxhc3Q7QmVsb3Zza2l5IDogMSA6IDMyOTUuNjAwMQorS2VtZXJvdnNrYe9hIG9ibGFzdDtHdXJ5ZXZza2l5IDogMSA6IDI0MDcuMzk5OQorS2VtZXJvdnNrYe9hIG9ibGFzdDtMZW5pbnNrLUt1em5ldHNraXkgOiAxIDogMS4wCitOb3Zvc2liaXJza2HvYSBvYmxhc3Q7S29jaGtvdnNraXkgOiAxIDogMjU3My44OTk5CitPbXNrYe9hIG9ibGFzdDtPZGVzc2tpeSA6IDEgOiAyMDIwLjkKK05vdm9zaWJpcnNrYe9hIG9ibGFzdDtDaGVyZXBhbm92c2tpeSA6IDEgOiAzMTUyLjcKK05vdm9zaWJpcnNrYe9hIG9ibGFzdDtTdXp1bnNraXkgOiAxIDogNTA1MS41CitPbXNrYe9hIG9ibGFzdDtQYXZsb2dyYWRza2l5IDogMSA6IDIwNDkuMAorQWx0Ye9za2kga3Jh7yBy6XNpZHVlbDtaYWxlc292c2tpeSA6IDEgOiAyOTIxLjM5OTkKK0tlbWVyb3Zza2HvYSBvYmxhc3Q7QmVsb3ZvIDogMSA6IDIuMAorTm92b3NpYmlyc2th72Egb2JsYXN0O0tyYXNub3plcnNraXkgOiAxIDogNTQzOC4wCitLZW1lcm92c2th72Egb2JsYXN0O1Byb2tvcHlldnNraXkgOiAxIDogMzkxNi4wCitPbXNrYe9hIG9ibGFzdDtOb3ZvdmFyc2hhdnNraXkgOiAxIDogMjM1Ny42MDAxCitOb3Zvc2liaXJza2HvYSBvYmxhc3Q7QmFnYW5za2l5IDogMSA6IDMyNzMuNworQWx0Ye9za2kga3Jh7yBy6XNpZHVlbDtLcnV0aWtoaW5rc2l5IDogMSA6IDIzNjAuNjAwMQorTm92b3NpYmlyc2th72Egb2JsYXN0O0thcmFzdWtza2l5IDogMSA6IDQ3MjYuMTAwMQorS2VtZXJvdnNrYe9hIG9ibGFzdDtHdXJ5ZXZzayA6IDEgOiAxLjIKK0FsdGHvc2tpIGtyYe8gculzaWR1ZWw7WmFyaW5za2l5IDogMSA6IDUwMjIuMjAwMgorS2VtZXJvdnNrYe9hIG9ibGFzdDtOb3Zva3V6bmV0c2tpeSA6IDEgOiA4NjQwLjI5OTgKK0FsdGHvc2tpIGtyYe8gculzaWR1ZWw7VGFsbWVuc2tpeSA6IDEgOiAzODUxLjUKK0FsdGHvc2tpIGtyYe8gculzaWR1ZWw7UGFua3J1c2h5a2hpbnNraXkgOiAxIDogMjk0NS41CitBbHRh73NraSBrcmHvIHLpc2lkdWVsO0thbWVuc2tpeSA6IDEgOiAzMzkwLjIKK09tc2th72Egb2JsYXN0O1J1c3Nrby1Qb2x5YW5za2l5IDogMSA6IDM0MDMuNjAwMQorS2VtZXJvdnNrYe9hIG9ibGFzdDtLaXNpbGV2c2sgOiAxIDogMS43CitBbHRh73NraSBrcmHvIHLpc2lkdWVsO1BlcnZvbWF5c2tpeSA6IDEgOiAzNDU1Ljg5OTkKK0tlbWVyb3Zza2HvYSBvYmxhc3Q7UHJva29weWV2c2sgOiAxIDogMS40CitBbHRh73NraSBrcmHvIHLpc2lkdWVsO0t5dG1hbm92c2tpeSA6IDEgOiAyNTI5LjMKK0FsdGHvc2tpIGtyYe8gculzaWR1ZWw7S2hhYmFyc2tpeSA6IDEgOiAzMzEwLjAKK0FsdGHvc2tpIGtyYe8gculzaWR1ZWw7S2FtZW4nLW5hLU9iaSA6IDEgOiAxLjIKK0tlbWVyb3Zza2HvYSBvYmxhc3Q7TWV6c2hkdXJlY2hlbnNrIDogMSA6IDE0LjcKK0FsdGHvc2tpIGtyYe8gculzaWR1ZWw7U2hlbGFib2xpa2hpbnNraXkgOiAxIDogMjA4My44OTk5CitLZW1lcm92c2th72Egb2JsYXN0O05vdm9rdXpuZXRzayA6IDEgOiAyLjIKK0FsdGHvc2tpIGtyYe8gculzaWR1ZWw7VG9ndWxza2l5IDogMSA6IDIwOTYuMAorS2VtZXJvdnNrYe9hIG9ibGFzdDtNeXNraSA6IDEgOiAxLjAKK1JVLVVOSy0yODkxIDogMSA6IDMuNQorQWx0Ye9za2kga3Jh7yBy6XNpZHVlbDtCdXJsaW5za2l5IDogMSA6IDMwNzguNworS2VtZXJvdnNrYe9hIG9ibGFzdDtPc2lubmlraSA6IDEgOiAxLjAKK0FsdGHvc2tpIGtyYe8gculzaWR1ZWw7UGF2bG92c2tpeSA6IDEgOiAyMTM5LjgKK0FsdGHvc2tpIGtyYe8gculzaWR1ZWw7QmF5ZXZza2l5IDogMSA6IDI1ODQuMzk5OQorQWx0Ye9za2kga3Jh7yBy6XNpZHVlbDtLb3Npa2hpbnNraXkgOiAxIDogMTk1MS43CitBbHRh73NraSBrcmHvIHLpc2lkdWVsO1R5dW1lbnRzZXZza2l5IDogMSA6IDI1MjguMAorS2VtZXJvdnNrYe9hIG9ibGFzdDtUYXNodGFnb2xza2l5IDogMSA6IDEyOTA1LjAKK0FsdGHvc2tpIGtyYe8gculzaWR1ZWw7WWVsdHNvdnNraXkgOiAxIDogMjAxNy41CitBbHRh73NraSBrcmHvIHLpc2lkdWVsO0Jhcm5hdWwgOiAxIDogODMwLjA5OTk4CitBbHRh73NraSBrcmHvIHLpc2lkdWVsO1N1eWV0c2tpeSA6IDEgOiAxNTM4LjYKK0FsdGHvc2tpIGtyYe8gculzaWR1ZWw7Tm92b2FsdGF5c2sgOiAxIDogMTAzLjYKK1JVLVVOSy0yODkyIDogMSA6IDE5MzQuNworQWx0Ye9za2kga3Jh7yBy6XNpZHVlbDtSZWJyaWtoaW5za2l5IDogMSA6IDI5MDMuNQorQWx0Ye9za2kga3Jh7yBy6XNpZHVlbDtUc2VsaW5uaXkgOiAxIDogMjY5OS4wCitBbHRh73NraSBrcmHvIHLpc2lkdWVsO0thbG1hbnNraXkgOiAxIDogMTk0NS4xCitBbHRh73NraSBrcmHvIHLpc2lkdWVsO1NsYXZnb3JvZHNraXkgOiAxIDogMTQxNS41CitBbHRh73NraSBrcmHvIHLpc2lkdWVsO1Ryb2l0c2tpeSA6IDEgOiAzODEyLjcKK0FsdGHvc2tpIGtyYe8gculzaWR1ZWw7QmxhZ292ZXNjaGVuc2tpeSA6IDEgOiAzMDk0LjcKK0FsdGHvc2tpIGtyYe8gculzaWR1ZWw7WmF2eWFsb3Zza2l5IDogMSA6IDE4NzAuOAorQWx0Ye9za2kga3Jh7yBy6XNpZHVlbDtTbGF2Z29yb2QgOiAxIDogMS4yCitBbHRh73NraSBrcmHvIHLpc2lkdWVsO1NvbHRvbnNraXkgOiAxIDogMjc2NS41CitBbHRh73NraSBrcmHvIHLpc2lkdWVsO1RvcGNoaWtoaW5za2l5IDogMSA6IDMwMDcuNQorQWx0Ye9za2kga3Jh7yBy6XNpZHVlbDtUYWJ1bnNraXkgOiAxIDogMTc1Ni4zCitBbHRh73NraSBrcmHvIHLpc2lkdWVsO01hbW9udG92c2tpeSA6IDEgOiAyMTkyLjMKK0FsdGHvc2tpIGtyYe8gculzaWR1ZWw7Wm9uYWxueWkgOiAxIDogMjEwMi4wCitBbHRh73NraSBrcmHvIHLpc2lkdWVsO0JpeXNraXkgOiAxIDogMjQ0OC4xMDAxCitBbHRh73NraSBrcmHvIHLpc2lkdWVsO1JvZGluc2tpeSA6IDEgOiAzMzI1Ljg5OTkKK0FsdGHvc2tpIGtyYe8gculzaWR1ZWw7Um9tYW5vdnNraXkgOiAxIDogMjIwMi4wCitLZW1lcm92c2th72Egb2JsYXN0O1Rhc2h0YWdvbCA6IDEgOiAxLjAKK0FsdGHvc2tpIGtyYe8gculzaWR1ZWw7S3VsdW5kaW5za2l5IDogMSA6IDIxNzMuNworQWx0Ye9za2kga3Jh7yBy6XNpZHVlbDtBbGV5c2tpeSA6IDEgOiAzNjUyLjM5OTkKK1Jlc3BvdWJsaWthIEFsdGHvO1R1cm9jaGFrc2tpeSA6IDEgOiAxMTA5NS41CitBbHRh73NraSBrcmHvIHLpc2lkdWVsO1VzdC1QcmlzdGFuc2tpeSA6IDEgOiAyNjI5LjcKK0FsdGHvc2tpIGtyYe8gculzaWR1ZWw7U2hpcHVub3Zza2l5IDogMSA6IDQxMjAuMjAwMgorQWx0Ye9za2kga3Jh7yBy6XNpZHVlbDtLcmFzbm9nb3Jza2l5IDogMSA6IDMwNjEuNworQWx0Ye9za2kga3Jh7yBy6XNpZHVlbDtCeXN0cm9pc3Rva3NraXkgOiAxIDogMTUyNi42CitBbHRh73NraSBrcmHvIHLpc2lkdWVsO0tseXVjaGV2c2tpeSA6IDEgOiAzMjAwLjcKK0FsdGHvc2tpIGtyYe8gculzaWR1ZWw7Qml5c2sgOiAxIDogMi4zCitBbHRh73NraSBrcmHvIHLpc2lkdWVsO0FsZXlzayA6IDEgOiAxLjAKK0FsdGHvc2tpIGtyYe8gculzaWR1ZWw7U21vbGVuc2tpeSA6IDEgOiAyMTIzLjMKK0FsdGHvc2tpIGtyYe8gculzaWR1ZWw7U292ZXRza2l5IDogMSA6IDE1MjAuNQorQWx0Ye9za2kga3Jh7yBy6XNpZHVlbDtOb3ZpY2hpa2hpbnNraXkgOiAxIDogMjA0MS42CitBbHRh73NraSBrcmHvIHLpc2lkdWVsO1BldHJvcGF2bG92c2tpeSA6IDEgOiAxNjYwLjcKK0FsdGHvc2tpIGtyYe8gculzaWR1ZWw7Vm9sY2hpa2hpbnNraXkgOiAxIDogMzYxMi42MDAxCitBbHRh73NraSBrcmHvIHLpc2lkdWVsO1VzdC1LYWxtYW5za2l5IDogMSA6IDI1NTEuNjAwMQorQWx0Ye9za2kga3Jh7yBy6XNpZHVlbDtQb3NwZWxpa2hpbnNraXkgOiAxIDogMjUwNS4zOTk5CitBbHRh73NraSBrcmHvIHLpc2lkdWVsO01pa2hheWxvdnNraXkgOiAxIDogMzM5NS42MDAxCitBbHRh73NraSBrcmHvIHLpc2lkdWVsO0FsdGF5c2tpeSA6IDEgOiAzODc1LjMKK1Jlc3BvdWJsaWthIEFsdGHvO0Nob3lza2l5IDogMSA6IDQwNjYuNQorQWx0Ye9za2kga3Jh7yBy6XNpZHVlbDtZZWdvcnlldnNraXkgOiAxIDogMjI5OC4wCitSZXNwb3VibGlrYSBBbHRh7ztNYXltaW5za2l5IDogMSA6IDEyNDAuOQorQWx0Ye9za2kga3Jh7yBy6XNpZHVlbDtCZWxva3VyaWtoYSA6IDEgOiAxLjQKK0FsdGHvc2tpIGtyYe8gculzaWR1ZWw7U29sb25lc2hlbnNraXkgOiAxIDogMzUwNS42MDAxCitBbHRh73NraSBrcmHvIHLpc2lkdWVsO1J1YnRzb3Zza2l5IDogMSA6IDM1NjUuNQorUmVzcG91Ymxpa2EgQWx0Ye87R29ybm8tQWx0YXlzayA6IDEgOiA0LjAKK0FsdGHvc2tpIGtyYe8gculzaWR1ZWw7S3Jhc25vc2hla292c2tpeSA6IDEgOiAzNDI0LjYwMDEKK0FsdGHvc2tpIGtyYe8gculzaWR1ZWw7Q2hhcnlzaHNraXkgOiAxIDogNjkyOC42MDAxCitBbHRh73NraSBrcmHvIHLpc2lkdWVsO1VnbG92c2tpeSA6IDEgOiA0OTIxLjg5OTkKK0FsdGHvc2tpIGtyYe8gculzaWR1ZWw7S3VyeWluc2tpeSA6IDEgOiAyNDcyLjcKK1Jlc3BvdWJsaWthIEFsdGHvO1NoZWJhbGluc2tpeSA6IDEgOiAzODc0LjgKK1Jlc3BvdWJsaWthIEFsdGHvO0NoZW1hbHNreSA6IDEgOiAyODI4LjAKK0FsdGHvc2tpIGtyYe8gculzaWR1ZWw7Wm1laW5vZ29yc2tpeSA6IDEgOiAyOTg1LjgKK1Jlc3BvdWJsaWthIEFsdGHvO1VsYWdhbnNraXkgOiAxIDogMTg0MDUuMzAxCitBbHRh73NraSBrcmHvIHLpc2lkdWVsO1J1YnR6b3ZzayA6IDEgOiA3LjkwMDAwMDEKK1Jlc3BvdWJsaWthIEFsdGHvO1VzdC1LYW5za2l5IDogMSA6IDY2NDQuNzAwMgorQWx0Ye9za2kga3Jh7yBy6XNpZHVlbDtMb2t0ZXZza2l5IDogMSA6IDI0ODAuOAorUmVzcG91Ymxpa2EgQWx0Ye87T25ndWRheXNraXkgOiAxIDogMTE4ODQuNworQWx0Ye9za2kga3Jh7yBy6XNpZHVlbDtabWVpbm9nb3JzayA6IDEgOiAxLjAKK0FsdGHvc2tpIGtyYe8gculzaWR1ZWw7VHJldGl5YWtvdnNraXkgOiAxIDogMTkyNC4xCitSZXNwb3VibGlrYSBBbHRh7ztVc3QtS29rc2luc2tpeSA6IDEgOiAxMzIyMC42CitSZXNwb3VibGlrYSBBbHRh7ztLb3NoLUFnYWNoc2tpeSA6IDEgOiAxOTc4NC40CitSVS1VTkstMjg5MyA6IDEgOiAzNzIzNC44OTgKK1JVLVVOSy0yODk0IDogMSA6IDM3MjM0Ljg5OAorUlUtVU5LLTI4OTUgOiAxIDogMS43CitSVS1VTkstMjg5NiA6IDEgOiAzNjk0LjUKK1JVLVVOSy0yODk3IDogMSA6IDMuNQorUlUtVU5LLTI4OTggOiAxIDogMTkzNC43CitUYXRhcnN0YW47QmFsdGFzaW5za2l5IDogMSA6IDExNDcuNgorVGF0YXJzdGFuO0Fncnl6c2tpeSA6IDEgOiAxODc0LjAKK1RhdGFyc3RhbjtBcnNraXkgOiAxIDogMTU4Ny45CitUYXRhcnN0YW47Vnlzb2tvZ29yc2tpeSA6IDEgOiAxOTgwLjcKK1RhdGFyc3RhbjtBdG5pbnNraXkgOiAxIDogNDc1Ljg5OTk5CitUYXRhcnN0YW47S3VrbW9yc2tpeSA6IDEgOiAxMzE5LjkKK1RhdGFyc3RhbjtTYWJpbnNraXkgOiAxIDogMTUyOS40CitUYXRhcnN0YW47TWFtYWR5c2hza2l5IDogMSA6IDI1NjEuMgorVGF0YXJzdGFuO1plbGVub2RvbHNraXkgOiAxIDogNzQ3LjUKK1RhdGFyc3RhbjtNZW5kZWxleWV2c2tpeSA6IDEgOiA1MjIuNDAwMDIKK1RhdGFyc3RhbjtQZXN0cmVjaGluc2tpeSA6IDEgOiAxMzU4LjIKK1RhdGFyc3RhbjtZZWxhYnV6aHNraXkgOiAxIDogMTI4My45CitUYXRhcnN0YW47S2F6YW4gOiAxIDogMzc5LjYwMDAxCitUYXRhcnN0YW47QWt0YW55c2hza2l5IDogMSA6IDIxNzIuNjAwMQorVGF0YXJzdGFuO1R1eWxhY2hpbnNraXkgOiAxIDogNTI2LjAKK1RhdGFyc3RhbjtUdWtheWV2c2tpeSA6IDEgOiAxNTY1LjAKK1RhdGFyc3RhbjtNZW56ZWxpbnNraXkgOiAxIDogMTI4Ni4xCitUYXRhcnN0YW47WmVsZW5vZG9sJ3NrIDogMSA6IDEuMAorVGF0YXJzdGFuO1J5Ym5vLVNsb2JvZHNraXkgOiAxIDogMTcxOS4wCitUYXRhcnN0YW47RWxhYnVnYSA6IDEgOiAzLjIKK1RhdGFyc3RhbjtWZXJraG5ldXNsb25za2l5IDogMSA6IDk5MC41OTk5OAorVGF0YXJzdGFuO0xhaXNoZXZza2l5IDogMSA6IDE1MjUuMworVGF0YXJzdGFuO05hYmVyZXpobml5ZSBDaGVsbnkgOiAxIDogNC4xOTk5OTk4CitUYXRhcnN0YW47Tml6aG5la2Ftc2tpeSA6IDEgOiAxNTExLjIKK1RhdGFyc3RhbjtOaXpzaG5la2Ftc2sgOiAxIDogMy40MDAwMDAxCitSVS1VTkstMjg5OSA6IDEgOiAxMjc3LjEKK1JVLVVOSy0yOTAwIDogMSA6IDc1MC40MDAwMgorVGF0YXJzdGFuO1Nhcm1hbm92c2tpeSA6IDEgOiAxMjM3LjcKK1RhdGFyc3RhbjtaYWluc2tpeSA6IDEgOiAxOTkwLjQKK1RhdGFyc3RhbjtLYW1za28tVXN0eWluc2tpeSA6IDEgOiA3NjguNzk5OTkKK1RhdGFyc3RhbjtNdXNseXVtb3Zza2l5IDogMSA6IDE0MDYuNworVGF0YXJzdGFuO0NoaXN0b3BvbHNraXkgOiAxIDogMTQ2My41CitUYXRhcnN0YW47Q2hpc3RvcG9sJyA6IDEgOiAyLjU5OTk5OTkKK1RhdGFyc3RhbjtBbGVrc2V5ZXZza2l5IDogMSA6IDE1MzYuMgorVGF0YXJzdGFuO05vdm9zaGVzaG1pbnNraXkgOiAxIDogMTI0NS4yCitUYXRhcnN0YW47WmFpbnNrIDogMSA6IDEuNAorVGF0YXJzdGFuO0J1aW5za2l5IDogMSA6IDE1MzUuNgorVGF0YXJzdGFuO0FsbWV0eWV2c2tpeSA6IDEgOiAyNzMxLjM5OTkKK1RhdGFyc3RhbjtLdXlieXNoZXZza2l5IDogMSA6IDE2NDIuOAorVGF0YXJzdGFuO1RldHl1c2hza2l5IDogMSA6IDE1NTkuOAorVGF0YXJzdGFuO0F6bmFrYXlldnNraXkgOiAxIDogMTkzMy4zCitUYXRhcnN0YW47QWtzdWJheWV2c2tpeSA6IDEgOiAxMTI5LjAKK1RhdGFyc3RhbjtBbGtleWV2c2tpeSA6IDEgOiAxNzU3LjIKK1RhdGFyc3RhbjtDaGVyZW1zaGFuc2tpeSA6IDEgOiAxNTE0LjQKK1RhdGFyc3RhbjtBbG1ldHlldnNrIDogMSA6IDUuMzAwMDAwMgorVGF0YXJzdGFuO09rdHlhYnJza2l5IDogMSA6IDIzODkuMgorVGF0YXJzdGFuO0F6bmFrYWV2byA6IDEgOiAyLjAKK1RhdGFyc3RhbjtEcm96aGFub3Zza2l5IDogMSA6IDEwODMuOAorT3VsaWFub3Zza2HvYSBvYmxhc3Q7U3Rhcm9tYXluc2tpeSA6IDEgOiAxNDY3LjEKK1RhdGFyc3RhbjtMZW5pbm9nb3Jza2l5IDogMSA6IDE2MTAuNAorVGF0YXJzdGFuO1l1dGF6aW5za2l5IDogMSA6IDk0Ni4yMDAwMQorVGF0YXJzdGFuO0J1Z3VsbWluc2tpeSA6IDEgOiAxMjc1LjkKK091bGlhbm92c2th72Egb2JsYXN0O1N1cnNraXkgOiAxIDogMjI0MS4yCitPdWxpYW5vdnNrYe9hIG9ibGFzdDtUc3lsbmluc2tpeSA6IDEgOiAxMjkxLjUKK091bGlhbm92c2th72Egb2JsYXN0O1VseWFub3Zza2l5IDogMSA6IDE4MDcuMAorVGF0YXJzdGFuO0xlbmluaWdvcnNrIDogMSA6IDMuMworU2FtYXJza2HvYSAoS29172J5Y2hldnNrYTtDaGVsbm8tVmVyc2hpbnNraXkgOiAxIDogMTExMy42CitTYW1hcnNrYe9hIChLb3XvYnljaGV2c2thO1NoZW50YWxpbnNraXkgOiAxIDogMTI1Mi45CitPdWxpYW5vdnNrYe9hIG9ibGFzdDtNZWxla2Vzc2tpeSA6IDEgOiAzNTgzLjUKK091bGlhbm92c2th72Egb2JsYXN0O01heW5za2l5IDogMSA6IDIzNTguOAorVGF0YXJzdGFuO0J1Z3VsJ21hIDogMSA6IDMuMgorU2FtYXJza2HvYSAoS29172J5Y2hldnNrYTtLbHlhdmxpbnNraXkgOiAxIDogMTQ1NS44CitPdWxpYW5vdnNrYe9hIG9ibGFzdDtOb3ZvbWFseWtsaW5za2l5IDogMSA6IDEwMDMuOAorU2FtYXJza2HvYSAoS29172J5Y2hldnNrYTtLb3Noa2luc2tpeSA6IDEgOiAxODk3LjQKK091bGlhbm92c2th72Egb2JsYXN0O0NoZXJkYWtsaW5za2l5IDogMSA6IDE1NjIuNQorVGF0YXJzdGFuO0JhdmxpbnNraXkgOiAxIDogMTE3NC40CitPdWxpYW5vdnNrYe9hIG9ibGFzdDtLYXJzdW5za2l5IDogMSA6IDE2NjMuOAorT3VsaWFub3Zza2HvYSBvYmxhc3Q7VWx5YW5vdnNrIDogMSA6IDM0LjAKK1NhbWFyc2th72EgKEtvde9ieWNoZXZza2E7U2VyZ2l5ZXZza2l5IDogMSA6IDI0OTYuOAorT3VsaWFub3Zza2HvYSBvYmxhc3Q7SW56ZW5za2l5IDogMSA6IDIxODkuMgorT3VsaWFub3Zza2HvYSBvYmxhc3Q7RGltaXRyb3ZncmFkIDogMSA6IDUuMDk5OTk5OQorU2FtYXJza2HvYSAoS29172J5Y2hldnNrYTtLYW15c2hsZW5za3kgOiAxIDogOTc4LjUKK1NhbWFyc2th72EgKEtvde9ieWNoZXZza2E7SXNha2xpbnNraXkgOiAxIDogMTc2OC41CitPdWxpYW5vdnNrYe9hIG9ibGFzdDtWZXNoa2F5bXNraXkgOiAxIDogMTYyNC40CitPdWxpYW5vdnNrYe9hIG9ibGFzdDtTZW5naWxleWV2c2tpeSA6IDEgOiAxMTY1LjcKK091bGlhbm92c2th72Egb2JsYXN0O1RlcmVuZ3Vsc2tpeSA6IDEgOiAyMDc0LjIKK1NhbWFyc2th72EgKEtvde9ieWNoZXZza2E7RWxraG92c2t5IDogMSA6IDk3Ni4wCitPdWxpYW5vdnNrYe9hIG9ibGFzdDtLdXpvdmF0b3Zza2l5IDogMSA6IDIxMDkuNjAwMQorUGVuemVuc2th72Egb2JsYXN0O05pa29sc2tpeSA6IDEgOiAyMzIxLjMKK1NhbWFyc2th72EgKEtvde9ieWNoZXZza2E7UG9raHZpc3RuZXZvIDogMSA6IDIwMTEuMworUGVuemVuc2th72Egb2JsYXN0O0JlZG5vZGVteWFub3Zza2l5IDogMSA6IDY3NC4yOTk5OQorUGVuemVuc2th72Egb2JsYXN0O05hcm92Y2hhdHNraXkgOiAxIDogNzYyLjAKK1BlbnplbnNrYe9hIG9ibGFzdDtJc3NpbnNraXkgOiAxIDogNzI4LjcwMDAxCitQZW56ZW5za2HvYSBvYmxhc3Q7THVuaW5vIDogMSA6IDE2ODQuNworU2FtYXJza2HvYSAoS29172J5Y2hldnNrYTtTdGF2cm9wb2xza2l5IDogMSA6IDE4NTEuMQorT3VsaWFub3Zza2HvYSBvYmxhc3Q7QmF6YXJub3N5emdhbnNraXkgOiAxIDogOTA3LjAKK1NhbWFyc2th72EgKEtvde9ieWNoZXZza2E7S3Jhc25veWFyc2tpeSA6IDEgOiAyNzQyLjMKK091bGlhbm92c2th72Egb2JsYXN0O0JhcnlzaHNraXkgOiAxIDogMTk3NC4wCitQZW56ZW5za2HvYSBvYmxhc3Q7WmVtZXRjaGluc2tpeSA6IDEgOiAxODY1LjYKK1BlbnplbnNrYe9hIG9ibGFzdDtWYWRpbnNraXkgOiAxIDogOTM0LjUKK1BlbnplbnNrYe9hIG9ibGFzdDtOaXpobmVsb21vdnNraXkgOiAxIDogMTk4OC4wCitTYW1hcnNrYe9hIChLb3XvYnljaGV2c2thO1NoaWdvbnNraXkgOiAxIDogMTI2NS43CitQZW56ZW5za2HvYSBvYmxhc3Q7TW9rc2hhbnNraXkgOiAxIDogMjMyMS43CitTYW1hcnNrYe9hIChLb3XvYnljaGV2c2thO0tpbmVsLUNoZXJrYXNza2l5IDogMSA6IDI1ODQuMzk5OQorT3VsaWFub3Zza2HvYSBvYmxhc3Q7QmFyeXNoIDogMSA6IDEuOAorU2FtYXJza2HvYSAoS29172J5Y2hldnNrYTtWb2x6aHNraXkgOiAxIDogNTAuNTk5OTk4CitQZW56ZW5za2HvYSBvYmxhc3Q7U29zbm92b2JvcnNraXkgOiAxIDogMTU5OS43CitSVS1VTkstMjkwMSA6IDEgOiAyMS4wCitQZW56ZW5za2HvYSBvYmxhc3Q7QmVzc29ub3Zza2l5IDogMSA6IDEyMDkuNAorUGVuemVuc2th72Egb2JsYXN0O0dvcm9kaXNjaGVuc2tpeSA6IDEgOiAyMTg3LjUKK1NhbWFyc2th72EgKEtvde9ieWNoZXZza2E7VG9seWF0dGkgOiAxIDogNi42OTk5OTk4CitQZW56ZW5za2HvYSBvYmxhc3Q7QmFzaG1ha292c2tpeSA6IDEgOiAxNzQwLjYKK1BlbnplbnNrYe9hIG9ibGFzdDtQYWNoZWxtc2tpeSA6IDEgOiAxMzE2LjMKK1NhbWFyc2th72EgKEtvde9ieWNoZXZza2E7U3l6cmFuc2tpeSA6IDEgOiAyMjIyLjgKK1NhbWFyc2th72EgKEtvde9ieWNoZXZza2E7S2luZWxza2l5IDogMSA6IDIxMzAuNQorU2FtYXJza2HvYSAoS29172J5Y2hldnNrYTtaaGlndWx5b3Zza2l5IDogMSA6IDYuMTk5OTk5OAorUGVuemVuc2th72Egb2JsYXN0O0t1em5ldHNraXkgOiAxIDogMTgwNS44CitQZW56ZW5za2HvYSBvYmxhc3Q7S2FtZW5za2l5IDogMSA6IDIxOTYuODk5OQorU2FtYXJza2HvYSAoS29172J5Y2hldnNrYTtPdHJhZG55aSA6IDEgOiAyLjgKK091bGlhbm92c2th72Egb2JsYXN0O05vdm9zcGFzc2tpeSA6IDEgOiAxNDMyLjEKK091bGlhbm92c2th72Egb2JsYXN0O05pa29sYXlldnNraXkgOiAxIDogMjA4Ni4yCitTYW1hcnNrYe9hIChLb3XvYnljaGV2c2thO0JvcnNraXkgOiAxIDogMjM2My44CitTYW1hcnNrYe9hIChLb3XvYnljaGV2c2thO1NhbWFyYSA6IDEgOiAxNDIuOAorUGVuemVuc2th72Egb2JsYXN0O1BlbnphIDogMSA6IDI2NS4yMDAwMQorUGVuemVuc2th72Egb2JsYXN0O1BlbnplbnNraXkgOiAxIDogMTg3Ni42CitTYW1hcnNrYe9hIChLb3XvYnljaGV2c2thO0JvZ2F0b3Zza2l5IDogMSA6IDY1MS40MDAwMgorU2FtYXJza2HvYSAoS29172J5Y2hldnNrYTtLaW5lbCA6IDEgOiAxLjMKK1BlbnplbnNrYe9hIG9ibGFzdDtCZWxpbnNraXkgOiAxIDogMjM0MC4xMDAxCitQZW56ZW5za2HvYSBvYmxhc3Q7S2FtZW5rYSA6IDEgOiAzMC45CitTYW1hcnNrYe9hIChLb3XvYnljaGV2c2thO09rdHlhYnJzayA6IDEgOiAxLjAKK1NhbWFyc2th72EgKEtvde9ieWNoZXZza2E7UHJpdm9semhza2l5IDogMSA6IDEwOTkuMworU2FtYXJza2HvYSAoS29172J5Y2hldnNrYTtCZXplbmNodWtza2l5IDogMSA6IDEzNzEuNQorU2FtYXJza2HvYSAoS29172J5Y2hldnNrYTtTeXpyYW4gOiAxIDogMi45MDAwMDAxCitQZW56ZW5za2HvYSBvYmxhc3Q7S3V6bmV0c2sgOiAxIDogMzEuNQorU2FtYXJza2HvYSAoS29172J5Y2hldnNrYTtOb3Zva3V5YnlzaGV2c2sgOiAxIDogNS4wCitQZW56ZW5za2HvYSBvYmxhc3Q7U2hlbXlzaGV5c2tpeSA6IDEgOiAxMzczLjIKK091bGlhbm92c2th72Egb2JsYXN0O1JhZGlzY2hldnNraXkgOiAxIDogMTYwOC40CitQZW56ZW5za2HvYSBvYmxhc3Q7S2FtZXNoa2lyc2tpeSA6IDEgOiAxMjA4LjIKK1NhbWFyc2th72EgKEtvde9ieWNoZXZza2E7TmVmdGVnb3Jza2l5IDogMSA6IDE0NjYuNAorU2FtYXJza2HvYSAoS29172J5Y2hldnNrYTtDaGFwYXlldnNrIDogMSA6IDIuMgorUGVuemVuc2th72Egb2JsYXN0O05ldmVya2luc2tpeSA6IDEgOiAxMDA2LjIKK091bGlhbm92c2th72Egb2JsYXN0O1N0YXJva3VsYXRraW5za2l5IDogMSA6IDk1Ni4yMDAwMQorU2FtYXJza2HvYSAoS29172J5Y2hldnNrYTtLcmFzbm9hcm1leXNraXkgOiAxIDogMTk4Ny4zCitQZW56ZW5za2HvYSBvYmxhc3Q7S29seXNobGV5c2tpeSA6IDEgOiAxNjIzLjUKK1BlbnplbnNrYe9hIG9ibGFzdDtLb25kb2xza2l5IDogMSA6IDkxNC40MDAwMgorU2FtYXJza2HvYSAoS29172J5Y2hldnNrYTtBbGVrc2V5ZXZza2l5IDogMSA6IDE3OTAuMgorU2FtYXJza2HvYSAoS29172J5Y2hldnNrYTtLaHZvcm9zdHlhbnNraXkgOiAxIDogMjA0Ni45CitPdWxpYW5vdnNrYe9hIG9ibGFzdDtQYXZsb3Zza2l5IDogMSA6IDcwOS4yOTk5OQorUGVuemVuc2th72Egb2JsYXN0O1NlcmRvYnNraXkgOiAxIDogMTU0OS42CitQZW56ZW5za2HvYSBvYmxhc3Q7VGFtYWxpbnNraXkgOiAxIDogOTczLjA5OTk4CitQZW56ZW5za2HvYSBvYmxhc3Q7TG9wYXRpbm8gOiAxIDogMTYxMi42CitTYXJhdG92c2th72Egb2JsYXN0O0todmFseW5za2l5IDogMSA6IDE2NDUuNgorUGVuemVuc2th72Egb2JsYXN0O0Jla292c2tpeSA6IDEgOiA5NDguNDAwMDIKK1NhcmF0b3Zza2HvYSBvYmxhc3Q7RHVraG92bml0c2tpeSA6IDEgOiAxNjMzLjQKK1NhbWFyc2th72EgKEtvde9ieWNoZXZza2E7Qm9sc2hlZ2x1c2hpdHNraXkgOiAxIDogMjg3My4wCitTYXJhdG92c2th72Egb2JsYXN0O0JhbHRheXNraXkgOiAxIDogMTM5Mi43CitTYW1hcnNrYe9hIChLb3XvYnljaGV2c2thO1Blc3RyYXZza2l5IDogMSA6IDE4MzAuMgorUGVuemVuc2th72Egb2JsYXN0O01hbG9zZXJkb2JpbnNraXkgOiAxIDogMTMxOS45CitTYXJhdG92c2th72Egb2JsYXN0O0JhemFybm8tS2FyYWJ1bGFrc2tpeSA6IDEgOiAyMTc0Ljg5OTkKK1NhcmF0b3Zza2HvYSBvYmxhc3Q7Vm9sc2tpeSA6IDEgOiAzMjUyLjYwMDEKK1NhcmF0b3Zza2HvYSBvYmxhc3Q7WWVrYXRlcmlub3Zza2l5IDogMSA6IDMwNDAuMgorU2FyYXRvdnNrYe9hIG9ibGFzdDtJdmFudGV5ZXZza2l5IDogMSA6IDIxMTEuMAorU2FyYXRvdnNrYe9hIG9ibGFzdDtLaHZhbHluc2sgOiAxIDogMS44CitTYXJhdG92c2th72Egb2JsYXN0O1BldHJvdnNraXkgOiAxIDogMjEwNS4yCitQZW56ZW5za2HvYSBvYmxhc3Q7U2VyZG9ic2sgOiAxIDogMTYuMjAwMDAxCitTYXJhdG92c2th72Egb2JsYXN0O1J0aXNjaGV2c2tpeSA6IDEgOiAyMTc2LjYwMDEKK1NhcmF0b3Zza2HvYSBvYmxhc3Q7Tm92b2J1cmFzc2tpeSA6IDEgOiAxODczLjIKK1NhcmF0b3Zza2HvYSBvYmxhc3Q7UHVnYWNoeW92c2tpeSA6IDEgOiAzODYzLjYwMDEKK1NhbWFyc2th72EgKEtvde9ieWNoZXZza2E7Qm9sc2hlY2hlcm5pZ292c2tpeSA6IDEgOiAyNzYyLjAKK1NhcmF0b3Zza2HvYSBvYmxhc3Q7UGV0cm92c2sgOiAxIDogMjcuMjAwMDAxCitTYXJhdG92c2th72Egb2JsYXN0O1R1cmtvdnNraXkgOiAxIDogMTM2MS4wCitTYXJhdG92c2th72Egb2JsYXN0O1J0aXNoY2hldm8gOiAxIDogNDIuNQorU2FyYXRvdnNrYe9hIG9ibGFzdDtBdGthcnNraXkgOiAxIDogMjg0Mi4zCitTYXJhdG92c2th72Egb2JsYXN0O0JhbGFrb3Zza2l5IDogMSA6IDMyNjcuNworU2FyYXRvdnNrYe9hIG9ibGFzdDtQZXJlbHl1YnNraXkgOiAxIDogMzY4MS43CitTYXJhdG92c2th72Egb2JsYXN0O0Fya2FkYWtza2l5IDogMSA6IDI1NDAuNjAwMQorU2FyYXRvdnNrYe9hIG9ibGFzdDtWb3NrcmVzZW5za2l5IDogMSA6IDEzMzYuNQorU2FyYXRvdnNrYe9hIG9ibGFzdDtWb2xzayA6IDEgOiA2Ni4zMDAwMDMKK1NhcmF0b3Zza2HvYSBvYmxhc3Q7QmFsYWtvdm8gOiAxIDogNzIuNQorU2FyYXRvdnNrYe9hIG9ibGFzdDtUYXRpc2NoZXZza2l5IDogMSA6IDE5OTEuOAorU2FyYXRvdnNrYe9hIG9ibGFzdDtQdWdhY2hldiA6IDEgOiA5NC41CitTYXJhdG92c2th72Egb2JsYXN0O1JvbWFub3Zza2l5IDogMSA6IDE1MzcuNworU2FyYXRvdnNrYe9hIG9ibGFzdDtNYXJrc292c2tpeSA6IDEgOiAyNjY5LjAKK1NhcmF0b3Zza2HvYSBvYmxhc3Q7S3Jhc25vcGFydGl6YW5za2l5IDogMSA6IDIyNTAuMzk5OQorU2FyYXRvdnNrYe9hIG9ibGFzdDtBdGthcnNrIDogMSA6IDEuNQorU2FyYXRvdnNrYe9hIG9ibGFzdDtTYXJhdG92c2tpeSA6IDEgOiA0MjguMjk5OTkKK1NhcmF0b3Zza2HvYSBvYmxhc3Q7QmFsYXNob3Zza2l5IDogMSA6IDI5MDEuODk5OQorU2FyYXRvdnNrYe9hIG9ibGFzdDtZZXJzaG92c2tpeSA6IDEgOiA0Mzc1LjUKK1NhcmF0b3Zza2HvYSBvYmxhc3Q7S2FsaW5pbnNraXkgOiAxIDogMzU5OS42MDAxCitTYXJhdG92c2th72Egb2JsYXN0O01hcnggOiAxIDogMS42CitTYXJhdG92c2th72Egb2JsYXN0O096aW5za2l5IDogMSA6IDMyMzkuNworU2FyYXRvdnNrYe9hIG9ibGFzdDtMeXNvZ29yc2tpeSA6IDEgOiAyNDI3LjM5OTkKK1NhcmF0b3Zza2HvYSBvYmxhc3Q7U2FyYXRvdiA6IDEgOiAyNDcuNjAwMDEKK1NhcmF0b3Zza2HvYSBvYmxhc3Q7RW5nZWxza2l5IDogMSA6IDI3ODAuMTAwMQorU2FyYXRvdnNrYe9hIG9ibGFzdDtEZXJnYWNoeW92c2tpeSA6IDEgOiA0MjAyLjAKK1NhcmF0b3Zza2HvYSBvYmxhc3Q7QmFsYXNob3YgOiAxIDogNjcuMDk5OTk4CitTYXJhdG92c2th72Egb2JsYXN0O0ZlZG9yb3Zza2l5IDogMSA6IDI2MTUuMTAwMQorU2FyYXRvdnNrYe9hIG9ibGFzdDtTb3ZldHNraXkgOiAxIDogMTYxOS43CitTYXJhdG92c2th72Egb2JsYXN0O0VuZ2VscyA6IDEgOiA5NC4wCitTYXJhdG92c2th72Egb2JsYXN0O1NhbW95bG92c2tpeSA6IDEgOiAyNTg1Ljg5OTkKK1NhcmF0b3Zza2HvYSBvYmxhc3Q7S3Jhc25vYXJtZXlza2l5IDogMSA6IDI2NjUuMgorVm9sZ29ncmFkc2th72Egb2JsYXN0O05vdm9uaWtvbGF5ZXZza2l5IDogMSA6IDI2MDMuMTAwMQorU2FyYXRvdnNrYe9hIG9ibGFzdDtLcmFzbm9rdXRza2l5IDogMSA6IDI5NDQuMTAwMQorVm9sZ29ncmFkc2th72Egb2JsYXN0O1llbGFuc2tpeSA6IDEgOiAyNjU5LjEwMDEKK1ZvbGdvZ3JhZHNrYe9hIG9ibGFzdDtVcnl1cGluc2tpeSA6IDEgOiAzNTE3Ljg5OTkKK1NhcmF0b3Zza2HvYSBvYmxhc3Q7Um92ZW5za2l5IDogMSA6IDIyOTEuMzk5OQorVm9sZ29ncmFkc2th72Egb2JsYXN0O1poaXJub3Zza2l5IDogMSA6IDI1MzcuMAorVm9sZ29ncmFkc2th72Egb2JsYXN0O0tpa3ZpZHplbnNraXkgOiAxIDogMjExMC4yCitWb2xnb2dyYWRza2HvYSBvYmxhc3Q7UnVkbnlhbnNraXkgOiAxIDogMTc5My4zCitTYXJhdG92c2th72Egb2JsYXN0O0tyYXNub2FybWV5c2sgOiAxIDogMS42CitTYXJhdG92c2th72Egb2JsYXN0O1BpdGVyc2tpeSA6IDEgOiAyNTI4LjEwMDEKK1NhcmF0b3Zza2HvYSBvYmxhc3Q7Tm92b3V6ZW5za2l5IDogMSA6IDQyOTUuMjk5OAorVm9sZ29ncmFkc2th72Egb2JsYXN0O05vdm9hbm5pbnNraXkgOiAxIDogMjYxNS43CitWb2xnb2dyYWRza2HvYSBvYmxhc3Q7VXJ1cGluc2sgOiAxIDogMi41CitWb2xnb2dyYWRza2HvYSBvYmxhc3Q7RGFuaWxvdnNraXkgOiAxIDogMzE2MC4yCitWb2xnb2dyYWRza2HvYSBvYmxhc3Q7U3Rhcm9wb2x0YXZza2l5IDogMSA6IDMxMjAuMworVm9sZ29ncmFkc2th72Egb2JsYXN0O0thbXlzaGluc2tpeSA6IDEgOiAzNTE5LjMKK1ZvbGdvZ3JhZHNrYe9hIG9ibGFzdDtLb3RvdnNraXkgOiAxIDogMjM5OC44OTk5CitWb2xnb2dyYWRza2HvYSBvYmxhc3Q7TmVraGF5ZXZza2l5IDogMSA6IDIyNTcuNQorVm9sZ29ncmFkc2th72Egb2JsYXN0O01pa2hheWxvdnNraXkgOiAxIDogMzgxOC41CitTYXJhdG92c2th72Egb2JsYXN0O0FsZWtzYW5kcm92LUdheXNraXkgOiAxIDogMjIwMi4zOTk5CitWb2xnb2dyYWRza2HvYSBvYmxhc3Q7QWxla3NleWV2c2tpeSA6IDEgOiAyMzcwLjEwMDEKK1ZvbGdvZ3JhZHNrYe9hIG9ibGFzdDtQYWxsYXNvdnNraXkgOiAxIDogMTI3MzEuOAorVm9sZ29ncmFkc2th72Egb2JsYXN0O05pa29sYXlldnNraXkgOiAxIDogMjU4MS4zOTk5CitWb2xnb2dyYWRza2HvYSBvYmxhc3Q7RnJvbG92c2tpeSA6IDEgOiAzNzc4LjYwMDEKK1ZvbGdvZ3JhZHNrYe9hIG9ibGFzdDtPbGtob3Zza2l5IDogMSA6IDMzMTMuNjAwMQorVm9sZ29ncmFkc2th72Egb2JsYXN0O0thbXlzaGluIDogMSA6IDUuNjk5OTk5OAorVm9sZ29ncmFkc2th72Egb2JsYXN0O01pa2hhaWxvdmthIDogMSA6IDUuOTAwMDAwMQorVm9sZ29ncmFkc2th72Egb2JsYXN0O1BvZHRlbGtvdnNraXkgOiAxIDogMjc5OC44CitWb2xnb2dyYWRza2HvYSBvYmxhc3Q7Qnlrb3Zza2l5IDogMSA6IDMxNTYuNQorVm9sZ29ncmFkc2th72Egb2JsYXN0O1NlcmFmaW1vdmljaHNraXkgOiAxIDogNDAzMS4xMDAxCitWb2xnb2dyYWRza2HvYSBvYmxhc3Q7RnJvbG92byA6IDEgOiAzLjQwMDAwMDEKK1ZvbGdvZ3JhZHNrYe9hIG9ibGFzdDtEdWJvdnNraXkgOiAxIDogMjM2Ny4xMDAxCitWb2xnb2dyYWRza2HvYSBvYmxhc3Q7SWxvdmxpbnNraXkgOiAxIDogMzY0NC4zCitWb2xnb2dyYWRza2HvYSBvYmxhc3Q7S2xldHNraXkgOiAxIDogMzQxMy4yCitWb2xnb2dyYWRza2HvYSBvYmxhc3Q7TGVuaW5za2l5IDogMSA6IDI2MzcuNjAwMQorVm9sZ29ncmFkc2th72Egb2JsYXN0O0thbGFjaGV2c2tpeSA6IDEgOiA2MjMuNzAwMDEKK1ZvbGdvZ3JhZHNrYe9hIG9ibGFzdDtHb3JvZGlzY2hlbnNraXkgOiAxIDogMjU0OS4zOTk5CitWb2xnb2dyYWRza2HvYSBvYmxhc3Q7U3JlZG5lYWtodHViaW5za2l5IDogMSA6IDE5NTAuOAorVm9sZ29ncmFkc2th72Egb2JsYXN0O1N1cm92aWtpbnNraXkgOiAxIDogMzUxMy4yCitWb2xnb2dyYWRza2HvYSBvYmxhc3Q7Vm9sZ29ncmFkIDogMSA6IDI5NC4yMDAwMQorVm9sZ29ncmFkc2th72Egb2JsYXN0O1ZvbHpoc2tpeSA6IDEgOiA5Mi4wOTk5OTgKK0FzdHJha2hhbnNrYe9hIG9ibGFzdDtBa2h0dWJpbnNraXkgOiAxIDogNzQxOS43OTk4CitWb2xnb2dyYWRza2HvYSBvYmxhc3Q7U3ZldGxveWFyc2tpeSA6IDEgOiAzNDQyLjM5OTkKK0FzdHJha2hhbnNrYe9hIG9ibGFzdDtDaHlvcm5veWFyc2tpeSA6IDEgOiAzODcyLjAKK1ZvbGdvZ3JhZHNrYe9hIG9ibGFzdDtDaGVybnlzaGtvdnNraXkgOiAxIDogMjM4MS4zCitLYWxteWtpYTtNYWxvZGVyYmV0b3Zza2l5IDogMSA6IDM5NTEuMworVm9sZ29ncmFkc2th72Egb2JsYXN0O09rdHlhYnJza2l5IDogMSA6IDM1MjcuNQorQXN0cmFraGFuc2th72Egb2JsYXN0O0FraHR1Ymluc2sgOiAxIDogMi41OTk5OTk5CitLYWxteWtpYTtPa3R5YWJyc2tpeSA6IDEgOiA0ODk3LjI5OTgKK1ZvbGdvZ3JhZHNrYe9hIG9ibGFzdDtLb3RlbG5pa292c2tpeSA6IDEgOiAyODIyLjUKK0FzdHJha2hhbnNrYe9hIG9ibGFzdDtZZW5vdGF5ZXZza2l5IDogMSA6IDIxMzguNjAwMQorS2FsbXlraWE7U2FycGluc2tpeSA6IDEgOiAzMjMwLjM5OTkKK0FzdHJha2hhbnNrYe9hIG9ibGFzdDtLaGFyYWJhbGluc2tpeSA6IDEgOiA4OTE2LjU5OTYKK0thbG15a2lhO1l1c3RpbnNraXkgOiAxIDogODk4Mi4yMDAyCitLYWxteWtpYTtLZXRjaGVuZXJvdnNraXkgOiAxIDogNTA5Ny4wCitBc3RyYWtoYW5za2HvYSBvYmxhc3Q7S3Jhc25veWFyc2tpeSA6IDEgOiA1MTEyLjUKK0thbG15a2lhO1lhc2hrdWxza2l5IDogMSA6IDEyMzEzLjAKK0thbG15a2lhO1RzZWxpbm55aSA6IDEgOiA0NzUxLjc5OTgKK0FzdHJha2hhbnNrYe9hIG9ibGFzdDtOYXJpbWFub3Zza2l5IDogMSA6IDUyOTMuODk5OQorS2FsbXlraWE7WWFzaGFsdGluc2tpeSA6IDEgOiAxNzkwLjIKK0FzdHJha2hhbnNrYe9hIG9ibGFzdDtWb2xvZGFyc2tpeSA6IDEgOiAyNjY4LjYwMDEKK0FzdHJha2hhbnNrYe9hIG9ibGFzdDtQcml2b2x6aHNraXkgOiAxIDogNzI2LjAKK0thbG15a2lhO1ByaXl1dGluc2tpeSA6IDEgOiAzMTk2LjgKK0FzdHJha2hhbnNrYe9hIG9ibGFzdDtBc3RyYWtoYW4gOiAxIDogMjA1LjEwMDAxCitLYWxteWtpYTtFbGlzdGEgOiAxIDogMTUxLjgKK0thbG15a2lhO0NoZXJub3plbWVsc2tpeSA6IDEgOiAxNDE5NC4yCitLYWxteWtpYTtHb3JvZG92aWtvdnNraXkgOiAxIDogOTk3LjcwMDAxCitBc3RyYWtoYW5za2HvYSBvYmxhc3Q7SWtyeWFuaW5za2l5IDogMSA6IDE3NTcuMQorS2FsbXlraWE7SWtpLUJ1cnVsc2tpeSA6IDEgOiA2NDA5LjEwMDEKK0FzdHJha2hhbnNrYe9hIG9ibGFzdDtLYW15enlha3NraXkgOiAxIDogMjUwNC43CitBc3RyYWtoYW5za2HvYSBvYmxhc3Q7TGltYW5za2l5IDogMSA6IDIyNjkuMTAwMQorS2FsbXlraWE7S2FzcGl5c2tpeSA6IDEgOiA0NTA4LjcwMDIKK1JVLVVOSy0yOTAyIDogMSA6IDEyNzcuMQorUlUtVU5LLTI5MDMgOiAxIDogNzUwLjQwMDAyCitSVS1VTkstMjkwNCA6IDEgOiAyMS4wCitLYWxpbmluZ3JhZHNrYe9hIG9ibGFzdDtHdmFyZGV5c2tpeSA6IDEgOiA3OTYuNzAwMDEKK0thbGluaW5ncmFkc2th72Egb2JsYXN0O0d1cnlldnNraXkgOiAxIDogNzQ5LjUKK0thbGluaW5ncmFkc2th72Egb2JsYXN0O0thbGluaW5ncmFkIDogMSA6IDI4OC4yMDAwMQorS2FsaW5pbmdyYWRza2HvYSBvYmxhc3Q7TmVzdGVyb3Zza2l5IDogMSA6IDEwNDcuMgorS2FsaW5pbmdyYWRza2HvYSBvYmxhc3Q7Q2hlcm55YWtob3ZzayA6IDEgOiAxLjAKK0thbGluaW5ncmFkc2th72Egb2JsYXN0O0d1c2V2IDogMSA6IDEuMAorS2FsaW5pbmdyYWRza2HvYSBvYmxhc3Q7UHJhdmRpbnNraXkgOiAxIDogMTMzNy42CitLYWxpbmluZ3JhZHNrYe9hIG9ibGFzdDtPemVyc2tpeSA6IDEgOiA4NzguNzAwMDEKK0thbGluaW5ncmFkc2th72Egb2JsYXN0O1NsYXZza2l5IDogMSA6IDExMjcuOAorS2FsaW5pbmdyYWRza2HvYSBvYmxhc3Q7WmVsZW5vZ3JhZHNraXkgOiAxIDogOTU4LjA5OTk4CitLYWxpbmluZ3JhZHNrYe9hIG9ibGFzdDtTb3ZldHNrIDogMSA6IDE3LjEKK0thbGluaW5ncmFkc2th72Egb2JsYXN0O05lbWFuc2tpeSA6IDEgOiA2OTEuNzk5OTkKK0thbGluaW5ncmFkc2th72Egb2JsYXN0O0tyYXpub3puYW1lbnNraXkgOiAxIDogMTI5MC44CitLYWxpbmluZ3JhZHNrYe9hIG9ibGFzdDtOZW1hbiA6IDEgOiAxLjAKK0thbGluaW5ncmFkc2th72Egb2JsYXN0O1BvbGVzc2tpeSA6IDEgOiA4NjQuMjAwMDEKK0thbGluaW5ncmFkc2th72Egb2JsYXN0O1N2ZXRsb2dvcnNrIDogMSA6IDEuOAorS2FsaW5pbmdyYWRza2HvYSBvYmxhc3Q7Q2hlcm55YWtob3Zza2l5IDogMSA6IDEzODMuMQorS2FsaW5pbmdyYWRza2HvYSBvYmxhc3Q7R3VzZXZza2l5IDogMSA6IDYyNy43OTk5OQorS2FsaW5pbmdyYWRza2HvYSBvYmxhc3Q7U3ZldGx5aSA6IDEgOiAxLjAKK0thbGluaW5ncmFkc2th72Egb2JsYXN0O0JhbHRpeXNrIDogMSA6IDEuMAorS2FsaW5pbmdyYWRza2HvYSBvYmxhc3Q7QmFncmF0aW9ub3Zza2l5IDogMSA6IDEzNTIuMgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvUlVTU0lBX1BPUFVMQVRJT04udHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvUlVTU0lBX1BPUFVMQVRJT04udHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZmNjYyMmMKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9SVVNTSUFfUE9QVUxBVElPTi50eHQKQEAgLTAsMCArMSw1MzQ5IEBACitSVS1VTkstMSA6IDEgOiAwCitSVS1VTkstMiA6IDEgOiAwCitSVS1VTkstMyA6IDEgOiAwCitSVS1VTkstNCA6IDEgOiAwCitSVS1VTkstNSA6IDEgOiAwCitSVS1VTkstNiA6IDEgOiAwCitSVS1VTkstNyA6IDEgOiAwCitSVS1VTkstOCA6IDEgOiAwCitSVS1VTkstOSA6IDEgOiAwCitSVS1VTkstMTAgOiAxIDogMAorUlUtVU5LLTExIDogMSA6IDAKK1JVLVVOSy0xMiA6IDEgOiAwCitSVS1VTkstMTMgOiAxIDogMAorUlUtVU5LLTE0IDogMSA6IDAKK1JVLVVOSy0xNSA6IDEgOiAwCitSVS1VTkstMTYgOiAxIDogMAorUlUtVU5LLTE3IDogMSA6IDAKK1JVLVVOSy0xOCA6IDEgOiAwCitSVS1VTkstMTkgOiAxIDogMAorUlUtVU5LLTIwIDogMSA6IDAKK1JVLVVOSy0yMSA6IDEgOiAwCitSVS1VTkstMjIgOiAxIDogMAorUlUtVU5LLTIzIDogMSA6IDAKK1JVLVVOSy0yNCA6IDEgOiAwCitSVS1VTkstMjUgOiAxIDogMAorUlUtVU5LLTI2IDogMSA6IDAKK1JVLVVOSy0yNyA6IDEgOiAwCitSVS1VTkstMjggOiAxIDogMAorUlUtVU5LLTI5IDogMSA6IDAKK1JVLVVOSy0zMCA6IDEgOiAwCitSVS1VTkstMzEgOiAxIDogMAorUlUtVU5LLTMyIDogMSA6IDAKK1JVLVVOSy0zMyA6IDEgOiAwCitSVS1VTkstMzQgOiAxIDogMAorUlUtVU5LLTM1IDogMSA6IDAKK1JVLVVOSy0zNiA6IDEgOiAwCitSVS1VTkstMzcgOiAxIDogMAorUlUtVU5LLTM4IDogMSA6IDAKK1JVLVVOSy0zOSA6IDEgOiAwCitSVS1VTkstNDAgOiAxIDogMAorUlUtVU5LLTQxIDogMSA6IDAKK1JVLVVOSy00MiA6IDEgOiAwCitSVS1VTkstNDMgOiAxIDogMAorUlUtVU5LLTQ0IDogMSA6IDAKK1JVLVVOSy00NSA6IDEgOiAwCitSVS1VTkstNDYgOiAxIDogMAorUlUtVU5LLTQ3IDogMSA6IDAKK1JVLVVOSy00OCA6IDEgOiAwCitSVS1VTkstNDkgOiAxIDogMAorUlUtVU5LLTUwIDogMSA6IDAKK1JVLVVOSy01MSA6IDEgOiAwCitSVS1VTkstNTIgOiAxIDogMAorUlUtVU5LLTUzIDogMSA6IDAKK1JVLVVOSy01NCA6IDEgOiAwCitSVS1VTkstNTUgOiAxIDogMAorUlUtVU5LLTU2IDogMSA6IDAKK1JVLVVOSy01NyA6IDEgOiAwCitSVS1VTkstNTggOiAxIDogMAorUlUtVU5LLTU5IDogMSA6IDAKK1JVLVVOSy02MCA6IDEgOiAwCitSVS1VTkstNjEgOiAxIDogMAorUlUtVU5LLTYyIDogMSA6IDAKK1JVLVVOSy02MyA6IDEgOiAwCitSVS1VTkstNjQgOiAxIDogMAorUlUtVU5LLTY1IDogMSA6IDAKK1JVLVVOSy02NiA6IDEgOiAwCitSVS1VTkstNjcgOiAxIDogMAorUlUtVU5LLTY4IDogMSA6IDAKK1JVLVVOSy02OSA6IDEgOiAwCitSVS1VTkstNzAgOiAxIDogMAorUlUtVU5LLTcxIDogMSA6IDAKK1JVLVVOSy03MiA6IDEgOiAwCitSVS1VTkstNzMgOiAxIDogMAorUlUtVU5LLTc0IDogMSA6IDAKK1JVLVVOSy03NSA6IDEgOiAwCitSVS1VTkstNzYgOiAxIDogMAorUlUtVU5LLTc3IDogMSA6IDAKK1JVLVVOSy03OCA6IDEgOiAwCitSVS1VTkstNzkgOiAxIDogMAorUlUtVU5LLTgwIDogMSA6IDAKK1JVLVVOSy04MSA6IDEgOiAwCitSVS1VTkstODIgOiAxIDogMAorUlUtVU5LLTgzIDogMSA6IDAKK1JVLVVOSy04NCA6IDEgOiAwCitSVS1VTkstODUgOiAxIDogMAorUlUtVU5LLTg2IDogMSA6IDAKK1JVLVVOSy04NyA6IDEgOiAwCitSVS1VTkstODggOiAxIDogMAorUlUtVU5LLTg5IDogMSA6IDAKK1JVLVVOSy05MCA6IDEgOiAwCitSVS1VTkstOTEgOiAxIDogMAorUlUtVU5LLTkyIDogMSA6IDAKK1JVLVVOSy05MyA6IDEgOiAwCitSVS1VTkstOTQgOiAxIDogMAorUlUtVU5LLTk1IDogMSA6IDAKK1JVLVVOSy05NiA6IDEgOiAwCitSVS1VTkstOTcgOiAxIDogMAorUlUtVU5LLTk4IDogMSA6IDAKK1JVLVVOSy05OSA6IDEgOiAwCitSVS1VTkstMTAwIDogMSA6IDAKK1JVLVVOSy0xMDEgOiAxIDogMAorUlUtVU5LLTEwMiA6IDEgOiAwCitSVS1VTkstMTAzIDogMSA6IDAKK1JVLVVOSy0xMDQgOiAxIDogMAorUlUtVU5LLTEwNSA6IDEgOiAwCitSVS1VTkstMTA2IDogMSA6IDAKK1JVLVVOSy0xMDcgOiAxIDogMAorUlUtVU5LLTEwOCA6IDEgOiAwCitSVS1VTkstMTA5IDogMSA6IDAKK1JVLVVOSy0xMTAgOiAxIDogMAorUlUtVU5LLTExMSA6IDEgOiAwCitSVS1VTkstMTEyIDogMSA6IDAKK1JVLVVOSy0xMTMgOiAxIDogMAorUlUtVU5LLTExNCA6IDEgOiAwCitSVS1VTkstMTE1IDogMSA6IDAKK1JVLVVOSy0xMTYgOiAxIDogMAorUlUtVU5LLTExNyA6IDEgOiAwCitSVS1VTkstMTE4IDogMSA6IDAKK1JVLVVOSy0xMTkgOiAxIDogMAorUlUtVU5LLTEyMCA6IDEgOiAwCitSVS1VTkstMTIxIDogMSA6IDAKK1JVLVVOSy0xMjIgOiAxIDogMAorUlUtVU5LLTEyMyA6IDEgOiAwCitSVS1VTkstMTI0IDogMSA6IDAKK1JVLVVOSy0xMjUgOiAxIDogMAorUlUtVU5LLTEyNiA6IDEgOiAwCitSVS1VTkstMTI3IDogMSA6IDAKK1JVLVVOSy0xMjggOiAxIDogMAorUlUtVU5LLTEyOSA6IDEgOiAwCitSVS1VTkstMTMwIDogMSA6IDAKK1JVLVVOSy0xMzEgOiAxIDogMAorUlUtVU5LLTEzMiA6IDEgOiAwCitSVS1VTkstMTMzIDogMSA6IDAKK1JVLVVOSy0xMzQgOiAxIDogMAorUlUtVU5LLTEzNSA6IDEgOiAwCitSVS1VTkstMTM2IDogMSA6IDAKK1JVLVVOSy0xMzcgOiAxIDogMAorUlUtVU5LLTEzOCA6IDEgOiAwCitSVS1VTkstMTM5IDogMSA6IDAKK1JVLVVOSy0xNDAgOiAxIDogMAorUlUtVU5LLTE0MSA6IDEgOiAwCitSVS1VTkstMTQyIDogMSA6IDAKK1JVLVVOSy0xNDMgOiAxIDogMAorUlUtVU5LLTE0NCA6IDEgOiAwCitSVS1VTkstMTQ1IDogMSA6IDAKK1JVLVVOSy0xNDYgOiAxIDogMAorUlUtVU5LLTE0NyA6IDEgOiAwCitSVS1VTkstMTQ4IDogMSA6IDAKK1JVLVVOSy0xNDkgOiAxIDogMAorUlUtVU5LLTE1MCA6IDEgOiAwCitSVS1VTkstMTUxIDogMSA6IDAKK1JVLVVOSy0xNTIgOiAxIDogMAorUlUtVU5LLTE1MyA6IDEgOiAwCitSVS1VTkstMTU0IDogMSA6IDAKK1JVLVVOSy0xNTUgOiAxIDogMAorUlUtVU5LLTE1NiA6IDEgOiAwCitSVS1VTkstMTU3IDogMSA6IDAKK1JVLVVOSy0xNTggOiAxIDogMAorUlUtVU5LLTE1OSA6IDEgOiAwCitSVS1VTkstMTYwIDogMSA6IDAKK1JVLVVOSy0xNjEgOiAxIDogMAorUlUtVU5LLTE2MiA6IDEgOiAwCitSVS1VTkstMTYzIDogMSA6IDAKK1JVLVVOSy0xNjQgOiAxIDogMAorUlUtVU5LLTE2NSA6IDEgOiAwCitSVS1VTkstMTY2IDogMSA6IDAKK1JVLVVOSy0xNjcgOiAxIDogMAorUlUtVU5LLTE2OCA6IDEgOiAwCitSVS1VTkstMTY5IDogMSA6IDAKK1JVLVVOSy0xNzAgOiAxIDogMAorUlUtVU5LLTE3MSA6IDEgOiAwCitSVS1VTkstMTcyIDogMSA6IDAKK1JVLVVOSy0xNzMgOiAxIDogMAorUlUtVU5LLTE3NCA6IDEgOiAwCitSVS1VTkstMTc1IDogMSA6IDAKK1JVLVVOSy0xNzYgOiAxIDogMAorUlUtVU5LLTE3NyA6IDEgOiAwCitSVS1VTkstMTc4IDogMSA6IDAKK1JVLVVOSy0xNzkgOiAxIDogMAorUlUtVU5LLTE4MCA6IDEgOiAwCitSVS1VTkstMTgxIDogMSA6IDAKK1JVLVVOSy0xODIgOiAxIDogMAorUlUtVU5LLTE4MyA6IDEgOiAwCitSVS1VTkstMTg0IDogMSA6IDAKK1JVLVVOSy0xODUgOiAxIDogMAorUlUtVU5LLTE4NiA6IDEgOiAwCitSVS1VTkstMTg3IDogMSA6IDAKK1JVLVVOSy0xODggOiAxIDogMAorUlUtVU5LLTE4OSA6IDEgOiAwCitSVS1VTkstMTkwIDogMSA6IDAKK1JVLVVOSy0xOTEgOiAxIDogMAorUlUtVU5LLTE5MiA6IDEgOiAwCitSVS1VTkstMTkzIDogMSA6IDAKK1JVLVVOSy0xOTQgOiAxIDogMAorUlUtVU5LLTE5NSA6IDEgOiAwCitSVS1VTkstMTk2IDogMSA6IDAKK1JVLVVOSy0xOTcgOiAxIDogMAorUlUtVU5LLTE5OCA6IDEgOiAwCitSVS1VTkstMTk5IDogMSA6IDAKK1JVLVVOSy0yMDAgOiAxIDogMAorUlUtVU5LLTIwMSA6IDEgOiAwCitSVS1VTkstMjAyIDogMSA6IDAKK1JVLVVOSy0yMDMgOiAxIDogMAorUlUtVU5LLTIwNCA6IDEgOiAwCitSVS1VTkstMjA1IDogMSA6IDAKK1JVLVVOSy0yMDYgOiAxIDogMAorUlUtVU5LLTIwNyA6IDEgOiAwCitSVS1VTkstMjA4IDogMSA6IDAKK1JVLVVOSy0yMDkgOiAxIDogMAorUlUtVU5LLTIxMCA6IDEgOiAwCitSVS1VTkstMjExIDogMSA6IDAKK1JVLVVOSy0yMTIgOiAxIDogMAorUlUtVU5LLTIxMyA6IDEgOiAwCitSVS1VTkstMjE0IDogMSA6IDAKK1JVLVVOSy0yMTUgOiAxIDogMAorUlUtVU5LLTIxNiA6IDEgOiAwCitSVS1VTkstMjE3IDogMSA6IDAKK1JVLVVOSy0yMTggOiAxIDogMAorUlUtVU5LLTIxOSA6IDEgOiAwCitSVS1VTkstMjIwIDogMSA6IDAKK1JVLVVOSy0yMjEgOiAxIDogMAorUlUtVU5LLTIyMiA6IDEgOiAwCitSVS1VTkstMjIzIDogMSA6IDAKK1JVLVVOSy0yMjQgOiAxIDogMAorUlUtVU5LLTIyNSA6IDEgOiAwCitSVS1VTkstMjI2IDogMSA6IDAKK1JVLVVOSy0yMjcgOiAxIDogMAorUlUtVU5LLTIyOCA6IDEgOiAwCitSVS1VTkstMjI5IDogMSA6IDAKK1JVLVVOSy0yMzAgOiAxIDogMAorUlUtVU5LLTIzMSA6IDEgOiAwCitSVS1VTkstMjMyIDogMSA6IDAKK1JVLVVOSy0yMzMgOiAxIDogMAorUlUtVU5LLTIzNCA6IDEgOiAwCitSVS1VTkstMjM1IDogMSA6IDAKK1JVLVVOSy0yMzYgOiAxIDogMAorUlUtVU5LLTIzNyA6IDEgOiAwCitSVS1VTkstMjM4IDogMSA6IDAKK1JVLVVOSy0yMzkgOiAxIDogMAorUlUtVU5LLTI0MCA6IDEgOiAwCitSVS1VTkstMjQxIDogMSA6IDAKK1JVLVVOSy0yNDIgOiAxIDogMAorUlUtVU5LLTI0MyA6IDEgOiAwCitSVS1VTkstMjQ0IDogMSA6IDAKK1JVLVVOSy0yNDUgOiAxIDogMAorUlUtVU5LLTI0NiA6IDEgOiAwCitSVS1VTkstMjQ3IDogMSA6IDAKK1JVLVVOSy0yNDggOiAxIDogMAorUlUtVU5LLTI0OSA6IDEgOiAwCitSVS1VTkstMjUwIDogMSA6IDAKK1JVLVVOSy0yNTEgOiAxIDogMAorUlUtVU5LLTI1MiA6IDEgOiAwCitSVS1VTkstMjUzIDogMSA6IDAKK1JVLVVOSy0yNTQgOiAxIDogMAorUlUtVU5LLTI1NSA6IDEgOiAwCitSVS1VTkstMjU2IDogMSA6IDAKK1JVLVVOSy0yNTcgOiAxIDogMAorUlUtVU5LLTI1OCA6IDEgOiAwCitSVS1VTkstMjU5IDogMSA6IDAKK1JVLVVOSy0yNjAgOiAxIDogMAorUlUtVU5LLTI2MSA6IDEgOiAwCitSVS1VTkstMjYyIDogMSA6IDAKK1JVLVVOSy0yNjMgOiAxIDogMAorUlUtVU5LLTI2NCA6IDEgOiAwCitSVS1VTkstMjY1IDogMSA6IDAKK1JVLVVOSy0yNjYgOiAxIDogMAorUlUtVU5LLTI2NyA6IDEgOiAwCitSVS1VTkstMjY4IDogMSA6IDAKK1JVLVVOSy0yNjkgOiAxIDogMAorUlUtVU5LLTI3MCA6IDEgOiAwCitSVS1VTkstMjcxIDogMSA6IDAKK1JVLVVOSy0yNzIgOiAxIDogMAorUlUtVU5LLTI3MyA6IDEgOiAwCitSVS1VTkstMjc0IDogMSA6IDAKK1JVLVVOSy0yNzUgOiAxIDogMAorUlUtVU5LLTI3NiA6IDEgOiAwCitSVS1VTkstMjc3IDogMSA6IDAKK1JVLVVOSy0yNzggOiAxIDogMAorUlUtVU5LLTI3OSA6IDEgOiAwCitSVS1VTkstMjgwIDogMSA6IDAKK1JVLVVOSy0yODEgOiAxIDogMAorUlUtVU5LLTI4MiA6IDEgOiAwCitSVS1VTkstMjgzIDogMSA6IDAKK1JVLVVOSy0yODQgOiAxIDogMAorUlUtVU5LLTI4NSA6IDEgOiAwCitSVS1VTkstMjg2IDogMSA6IDAKK1JVLVVOSy0yODcgOiAxIDogMAorUlUtVU5LLTI4OCA6IDEgOiAwCitSVS1VTkstMjg5IDogMSA6IDAKK1JVLVVOSy0yOTAgOiAxIDogMAorUlUtVU5LLTI5MSA6IDEgOiAwCitSVS1VTkstMjkyIDogMSA6IDAKK1JVLVVOSy0yOTMgOiAxIDogMAorUlUtVU5LLTI5NCA6IDEgOiAwCitSVS1VTkstMjk1IDogMSA6IDAKK1JVLVVOSy0yOTYgOiAxIDogMAorUlUtVU5LLTI5NyA6IDEgOiAwCitSVS1VTkstMjk4IDogMSA6IDAKK1JVLVVOSy0yOTkgOiAxIDogMAorUlUtVU5LLTMwMCA6IDEgOiAwCitSVS1VTkstMzAxIDogMSA6IDAKK1JVLVVOSy0zMDIgOiAxIDogMAorUlUtVU5LLTMwMyA6IDEgOiAwCitSVS1VTkstMzA0IDogMSA6IDAKK1JVLVVOSy0zMDUgOiAxIDogMAorUlUtVU5LLTMwNiA6IDEgOiAwCitSVS1VTkstMzA3IDogMSA6IDAKK1JVLVVOSy0zMDggOiAxIDogMAorUlUtVU5LLTMwOSA6IDEgOiAwCitSVS1VTkstMzEwIDogMSA6IDAKK1JVLVVOSy0zMTEgOiAxIDogMAorUlUtVU5LLTMxMiA6IDEgOiAwCitSVS1VTkstMzEzIDogMSA6IDAKK1JVLVVOSy0zMTQgOiAxIDogMAorUlUtVU5LLTMxNSA6IDEgOiAwCitSVS1VTkstMzE2IDogMSA6IDAKK1JVLVVOSy0zMTcgOiAxIDogMAorUlUtVU5LLTMxOCA6IDEgOiAwCitSVS1VTkstMzE5IDogMSA6IDAKK1JVLVVOSy0zMjAgOiAxIDogMAorUlUtVU5LLTMyMSA6IDEgOiAwCitSVS1VTkstMzIyIDogMSA6IDAKK1JVLVVOSy0zMjMgOiAxIDogMAorUlUtVU5LLTMyNCA6IDEgOiAwCitSVS1VTkstMzI1IDogMSA6IDAKK1JVLVVOSy0zMjYgOiAxIDogMAorUlUtVU5LLTMyNyA6IDEgOiAwCitSVS1VTkstMzI4IDogMSA6IDAKK1JVLVVOSy0zMjkgOiAxIDogMAorUlUtVU5LLTMzMCA6IDEgOiAwCitSVS1VTkstMzMxIDogMSA6IDAKK1JVLVVOSy0zMzIgOiAxIDogMAorUlUtVU5LLTMzMyA6IDEgOiAwCitSVS1VTkstMzM0IDogMSA6IDAKK1JVLVVOSy0zMzUgOiAxIDogMAorUlUtVU5LLTMzNiA6IDEgOiAwCitSVS1VTkstMzM3IDogMSA6IDAKK1JVLVVOSy0zMzggOiAxIDogMAorUlUtVU5LLTMzOSA6IDEgOiAwCitSVS1VTkstMzQwIDogMSA6IDAKK1JVLVVOSy0zNDEgOiAxIDogMAorUlUtVU5LLTM0MiA6IDEgOiAwCitSVS1VTkstMzQzIDogMSA6IDAKK1JVLVVOSy0zNDQgOiAxIDogMAorUlUtVU5LLTM0NSA6IDEgOiAwCitSVS1VTkstMzQ2IDogMSA6IDAKK1JVLVVOSy0zNDcgOiAxIDogMAorUlUtVU5LLTM0OCA6IDEgOiAwCitSVS1VTkstMzQ5IDogMSA6IDAKK1JVLVVOSy0zNTAgOiAxIDogMAorUlUtVU5LLTM1MSA6IDEgOiAwCitSVS1VTkstMzUyIDogMSA6IDAKK1JVLVVOSy0zNTMgOiAxIDogMAorUlUtVU5LLTM1NCA6IDEgOiAwCitSVS1VTkstMzU1IDogMSA6IDAKK1JVLVVOSy0zNTYgOiAxIDogMAorUlUtVU5LLTM1NyA6IDEgOiAwCitSVS1VTkstMzU4IDogMSA6IDAKK1JVLVVOSy0zNTkgOiAxIDogMAorUlUtVU5LLTM2MCA6IDEgOiAwCitSVS1VTkstMzYxIDogMSA6IDAKK1JVLVVOSy0zNjIgOiAxIDogMAorUlUtVU5LLTM2MyA6IDEgOiAwCitSVS1VTkstMzY0IDogMSA6IDAKK1JVLVVOSy0zNjUgOiAxIDogMAorUlUtVU5LLTM2NiA6IDEgOiAwCitSVS1VTkstMzY3IDogMSA6IDAKK1JVLVVOSy0zNjggOiAxIDogMAorUlUtVU5LLTM2OSA6IDEgOiAwCitSVS1VTkstMzcwIDogMSA6IDAKK1JVLVVOSy0zNzEgOiAxIDogMAorUlUtVU5LLTM3MiA6IDEgOiAwCitSVS1VTkstMzczIDogMSA6IDAKK1JVLVVOSy0zNzQgOiAxIDogMAorUlUtVU5LLTM3NSA6IDEgOiAwCitSVS1VTkstMzc2IDogMSA6IDAKK1JVLVVOSy0zNzcgOiAxIDogMAorUlUtVU5LLTM3OCA6IDEgOiAwCitSVS1VTkstMzc5IDogMSA6IDAKK1JVLVVOSy0zODAgOiAxIDogMAorUlUtVU5LLTM4MSA6IDEgOiAwCitSVS1VTkstMzgyIDogMSA6IDAKK1JVLVVOSy0zODMgOiAxIDogMAorUlUtVU5LLTM4NCA6IDEgOiAwCitSVS1VTkstMzg1IDogMSA6IDAKK1JVLVVOSy0zODYgOiAxIDogMAorUlUtVU5LLTM4NyA6IDEgOiAwCitSVS1VTkstMzg4IDogMSA6IDAKK1JVLVVOSy0zODkgOiAxIDogMAorUlUtVU5LLTM5MCA6IDEgOiAwCitSVS1VTkstMzkxIDogMSA6IDAKK1JVLVVOSy0zOTIgOiAxIDogMAorUlUtVU5LLTM5MyA6IDEgOiAwCitSVS1VTkstMzk0IDogMSA6IDAKK1JVLVVOSy0zOTUgOiAxIDogMAorUlUtVU5LLTM5NiA6IDEgOiAwCitSVS1VTkstMzk3IDogMSA6IDAKK1JVLVVOSy0zOTggOiAxIDogMAorUlUtVU5LLTM5OSA6IDEgOiAwCitSVS1VTkstNDAwIDogMSA6IDAKK1JVLVVOSy00MDEgOiAxIDogMAorUlUtVU5LLTQwMiA6IDEgOiAwCitSVS1VTkstNDAzIDogMSA6IDAKK1JVLVVOSy00MDQgOiAxIDogMAorUlUtVU5LLTQwNSA6IDEgOiAwCitSVS1VTkstNDA2IDogMSA6IDAKK1JVLVVOSy00MDcgOiAxIDogMAorUlUtVU5LLTQwOCA6IDEgOiAwCitSVS1VTkstNDA5IDogMSA6IDAKK1JVLVVOSy00MTAgOiAxIDogMAorUlUtVU5LLTQxMSA6IDEgOiAwCitSVS1VTkstNDEyIDogMSA6IDAKK1JVLVVOSy00MTMgOiAxIDogMAorUlUtVU5LLTQxNCA6IDEgOiAwCitSVS1VTkstNDE1IDogMSA6IDAKK1JVLVVOSy00MTYgOiAxIDogMAorUlUtVU5LLTQxNyA6IDEgOiAwCitSVS1VTkstNDE4IDogMSA6IDAKK1JVLVVOSy00MTkgOiAxIDogMAorUlUtVU5LLTQyMCA6IDEgOiAwCitSVS1VTkstNDIxIDogMSA6IDAKK1JVLVVOSy00MjIgOiAxIDogMAorUlUtVU5LLTQyMyA6IDEgOiAwCitSVS1VTkstNDI0IDogMSA6IDAKK1JVLVVOSy00MjUgOiAxIDogMAorUlUtVU5LLTQyNiA6IDEgOiAwCitSVS1VTkstNDI3IDogMSA6IDAKK1JVLVVOSy00MjggOiAxIDogMAorUlUtVU5LLTQyOSA6IDEgOiAwCitSVS1VTkstNDMwIDogMSA6IDAKK1JVLVVOSy00MzEgOiAxIDogMAorUlUtVU5LLTQzMiA6IDEgOiAwCitSVS1VTkstNDMzIDogMSA6IDAKK1JVLVVOSy00MzQgOiAxIDogMAorUlUtVU5LLTQzNSA6IDEgOiAwCitSVS1VTkstNDM2IDogMSA6IDAKK1JVLVVOSy00MzcgOiAxIDogMAorUlUtVU5LLTQzOCA6IDEgOiAwCitSVS1VTkstNDM5IDogMSA6IDAKK1JVLVVOSy00NDAgOiAxIDogMAorUlUtVU5LLTQ0MSA6IDEgOiAwCitSVS1VTkstNDQyIDogMSA6IDAKK1JVLVVOSy00NDMgOiAxIDogMAorUlUtVU5LLTQ0NCA6IDEgOiAwCitSVS1VTkstNDQ1IDogMSA6IDAKK1JVLVVOSy00NDYgOiAxIDogMAorUlUtVU5LLTQ0NyA6IDEgOiAwCitSVS1VTkstNDQ4IDogMSA6IDAKK1JVLVVOSy00NDkgOiAxIDogMAorUlUtVU5LLTQ1MCA6IDEgOiAwCitSVS1VTkstNDUxIDogMSA6IDAKK1JVLVVOSy00NTIgOiAxIDogMAorUlUtVU5LLTQ1MyA6IDEgOiAwCitSVS1VTkstNDU0IDogMSA6IDAKK1JVLVVOSy00NTUgOiAxIDogMAorUlUtVU5LLTQ1NiA6IDEgOiAwCitSVS1VTkstNDU3IDogMSA6IDAKK1JVLVVOSy00NTggOiAxIDogMAorUlUtVU5LLTQ1OSA6IDEgOiAwCitSVS1VTkstNDYwIDogMSA6IDAKK1JVLVVOSy00NjEgOiAxIDogMAorUlUtVU5LLTQ2MiA6IDEgOiAwCitSVS1VTkstNDYzIDogMSA6IDAKK1JVLVVOSy00NjQgOiAxIDogMAorUlUtVU5LLTQ2NSA6IDEgOiAwCitSVS1VTkstNDY2IDogMSA6IDAKK1JVLVVOSy00NjcgOiAxIDogMAorUlUtVU5LLTQ2OCA6IDEgOiAwCitSVS1VTkstNDY5IDogMSA6IDAKK1JVLVVOSy00NzAgOiAxIDogMAorUlUtVU5LLTQ3MSA6IDEgOiAwCitSVS1VTkstNDcyIDogMSA6IDAKK1JVLVVOSy00NzMgOiAxIDogMAorUlUtVU5LLTQ3NCA6IDEgOiAwCitSVS1VTkstNDc1IDogMSA6IDAKK1JVLVVOSy00NzYgOiAxIDogMAorUlUtVU5LLTQ3NyA6IDEgOiAwCitSVS1VTkstNDc4IDogMSA6IDAKK1JVLVVOSy00NzkgOiAxIDogMAorUlUtVU5LLTQ4MCA6IDEgOiAwCitSVS1VTkstNDgxIDogMSA6IDAKK1JVLVVOSy00ODIgOiAxIDogMAorUlUtVU5LLTQ4MyA6IDEgOiAwCitSVS1VTkstNDg0IDogMSA6IDAKK1JVLVVOSy00ODUgOiAxIDogMAorUlUtVU5LLTQ4NiA6IDEgOiAwCitSVS1VTkstNDg3IDogMSA6IDAKK1JVLVVOSy00ODggOiAxIDogMAorUlUtVU5LLTQ4OSA6IDEgOiAwCitSVS1VTkstNDkwIDogMSA6IDAKK1JVLVVOSy00OTEgOiAxIDogMAorUlUtVU5LLTQ5MiA6IDEgOiAwCitSVS1VTkstNDkzIDogMSA6IDAKK1JVLVVOSy00OTQgOiAxIDogMAorUlUtVU5LLTQ5NSA6IDEgOiAwCitSVS1VTkstNDk2IDogMSA6IDAKK1JVLVVOSy00OTcgOiAxIDogMAorUlUtVU5LLTQ5OCA6IDEgOiAwCitSVS1VTkstNDk5IDogMSA6IDAKK1JVLVVOSy01MDAgOiAxIDogMAorUlUtVU5LLTUwMSA6IDEgOiAwCitSVS1VTkstNTAyIDogMSA6IDAKK1JVLVVOSy01MDMgOiAxIDogMAorUlUtVU5LLTUwNCA6IDEgOiAwCitSVS1VTkstNTA1IDogMSA6IDAKK1JVLVVOSy01MDYgOiAxIDogMAorUlUtVU5LLTUwNyA6IDEgOiAwCitSVS1VTkstNTA4IDogMSA6IDAKK1JVLVVOSy01MDkgOiAxIDogMAorUlUtVU5LLTUxMCA6IDEgOiAwCitSVS1VTkstNTExIDogMSA6IDAKK1JVLVVOSy01MTIgOiAxIDogMAorUlUtVU5LLTUxMyA6IDEgOiAwCitSVS1VTkstNTE0IDogMSA6IDAKK1JVLVVOSy01MTUgOiAxIDogMAorUlUtVU5LLTUxNiA6IDEgOiAwCitSVS1VTkstNTE3IDogMSA6IDAKK1JVLVVOSy01MTggOiAxIDogMAorUlUtVU5LLTUxOSA6IDEgOiAwCitSVS1VTkstNTIwIDogMSA6IDAKK1JVLVVOSy01MjEgOiAxIDogMAorUlUtVU5LLTUyMiA6IDEgOiAwCitSVS1VTkstNTIzIDogMSA6IDAKK1JVLVVOSy01MjQgOiAxIDogMAorUlUtVU5LLTUyNSA6IDEgOiAwCitSVS1VTkstNTI2IDogMSA6IDAKK1JVLVVOSy01MjcgOiAxIDogMAorUlUtVU5LLTUyOCA6IDEgOiAwCitSVS1VTkstNTI5IDogMSA6IDAKK1JVLVVOSy01MzAgOiAxIDogMAorUlUtVU5LLTUzMSA6IDEgOiAwCitSVS1VTkstNTMyIDogMSA6IDAKK1JVLVVOSy01MzMgOiAxIDogMAorUlUtVU5LLTUzNCA6IDEgOiAwCitSVS1VTkstNTM1IDogMSA6IDAKK1JVLVVOSy01MzYgOiAxIDogMAorUlUtVU5LLTUzNyA6IDEgOiAwCitSVS1VTkstNTM4IDogMSA6IDAKK1JVLVVOSy01MzkgOiAxIDogMAorUlUtVU5LLTU0MCA6IDEgOiAwCitSVS1VTkstNTQxIDogMSA6IDAKK1JVLVVOSy01NDIgOiAxIDogMAorUlUtVU5LLTU0MyA6IDEgOiAwCitSVS1VTkstNTQ0IDogMSA6IDAKK1JVLVVOSy01NDUgOiAxIDogMAorUlUtVU5LLTU0NiA6IDEgOiAwCitSVS1VTkstNTQ3IDogMSA6IDAKK1JVLVVOSy01NDggOiAxIDogMAorUlUtVU5LLTU0OSA6IDEgOiAwCitSVS1VTkstNTUwIDogMSA6IDAKK1JVLVVOSy01NTEgOiAxIDogMAorUlUtVU5LLTU1MiA6IDEgOiAwCitSVS1VTkstNTUzIDogMSA6IDAKK1JVLVVOSy01NTQgOiAxIDogMAorUlUtVU5LLTU1NSA6IDEgOiAwCitSVS1VTkstNTU2IDogMSA6IDAKK1JVLVVOSy01NTcgOiAxIDogMAorUlUtVU5LLTU1OCA6IDEgOiAwCitSVS1VTkstNTU5IDogMSA6IDAKK1JVLVVOSy01NjAgOiAxIDogMAorUlUtVU5LLTU2MSA6IDEgOiAwCitSVS1VTkstNTYyIDogMSA6IDAKK1JVLVVOSy01NjMgOiAxIDogMAorUlUtVU5LLTU2NCA6IDEgOiAwCitSVS1VTkstNTY1IDogMSA6IDAKK1JVLVVOSy01NjYgOiAxIDogMAorUlUtVU5LLTU2NyA6IDEgOiAwCitSVS1VTkstNTY4IDogMSA6IDAKK1JVLVVOSy01NjkgOiAxIDogMAorUlUtVU5LLTU3MCA6IDEgOiAwCitSVS1VTkstNTcxIDogMSA6IDAKK1JVLVVOSy01NzIgOiAxIDogMAorUlUtVU5LLTU3MyA6IDEgOiAwCitSVS1VTkstNTc0IDogMSA6IDAKK1JVLVVOSy01NzUgOiAxIDogMAorUlUtVU5LLTU3NiA6IDEgOiAwCitSVS1VTkstNTc3IDogMSA6IDAKK1JVLVVOSy01NzggOiAxIDogMAorUlUtVU5LLTU3OSA6IDEgOiAwCitSVS1VTkstNTgwIDogMSA6IDAKK1JVLVVOSy01ODEgOiAxIDogMAorUlUtVU5LLTU4MiA6IDEgOiAwCitSVS1VTkstNTgzIDogMSA6IDAKK1JVLVVOSy01ODQgOiAxIDogMAorUlUtVU5LLTU4NSA6IDEgOiAwCitSVS1VTkstNTg2IDogMSA6IDAKK1JVLVVOSy01ODcgOiAxIDogMAorUlUtVU5LLTU4OCA6IDEgOiAwCitSVS1VTkstNTg5IDogMSA6IDAKK1JVLVVOSy01OTAgOiAxIDogMAorUlUtVU5LLTU5MSA6IDEgOiAwCitSVS1VTkstNTkyIDogMSA6IDAKK1JVLVVOSy01OTMgOiAxIDogMAorUlUtVU5LLTU5NCA6IDEgOiAwCitSVS1VTkstNTk1IDogMSA6IDAKK1JVLVVOSy01OTYgOiAxIDogMAorUlUtVU5LLTU5NyA6IDEgOiAwCitSVS1VTkstNTk4IDogMSA6IDAKK1JVLVVOSy01OTkgOiAxIDogMAorUlUtVU5LLTYwMCA6IDEgOiAwCitSVS1VTkstNjAxIDogMSA6IDAKK1JVLVVOSy02MDIgOiAxIDogMAorUlUtVU5LLTYwMyA6IDEgOiAwCitSVS1VTkstNjA0IDogMSA6IDAKK1JVLVVOSy02MDUgOiAxIDogMAorUlUtVU5LLTYwNiA6IDEgOiAwCitSVS1VTkstNjA3IDogMSA6IDAKK1JVLVVOSy02MDggOiAxIDogMAorUlUtVU5LLTYwOSA6IDEgOiAwCitSVS1VTkstNjEwIDogMSA6IDAKK1JVLVVOSy02MTEgOiAxIDogMAorUlUtVU5LLTYxMiA6IDEgOiAwCitSVS1VTkstNjEzIDogMSA6IDAKK1JVLVVOSy02MTQgOiAxIDogMAorUlUtVU5LLTYxNSA6IDEgOiAwCitSVS1VTkstNjE2IDogMSA6IDAKK1JVLVVOSy02MTcgOiAxIDogMAorUlUtVU5LLTYxOCA6IDEgOiAwCitSVS1VTkstNjE5IDogMSA6IDAKK1JVLVVOSy02MjAgOiAxIDogMAorUlUtVU5LLTYyMSA6IDEgOiAwCitSVS1VTkstNjIyIDogMSA6IDAKK1JVLVVOSy02MjMgOiAxIDogMAorUlUtVU5LLTYyNCA6IDEgOiAwCitSVS1VTkstNjI1IDogMSA6IDAKK1JVLVVOSy02MjYgOiAxIDogMAorUlUtVU5LLTYyNyA6IDEgOiAwCitSVS1VTkstNjI4IDogMSA6IDAKK1JVLVVOSy02MjkgOiAxIDogMAorUlUtVU5LLTYzMCA6IDEgOiAwCitSVS1VTkstNjMxIDogMSA6IDAKK1JVLVVOSy02MzIgOiAxIDogMAorUlUtVU5LLTYzMyA6IDEgOiAwCitSVS1VTkstNjM0IDogMSA6IDAKK1JVLVVOSy02MzUgOiAxIDogMAorUlUtVU5LLTYzNiA6IDEgOiAwCitSVS1VTkstNjM3IDogMSA6IDAKK1JVLVVOSy02MzggOiAxIDogMAorUlUtVU5LLTYzOSA6IDEgOiAwCitSVS1VTkstNjQwIDogMSA6IDAKK1JVLVVOSy02NDEgOiAxIDogMAorUlUtVU5LLTY0MiA6IDEgOiAwCitSVS1VTkstNjQzIDogMSA6IDAKK1JVLVVOSy02NDQgOiAxIDogMAorUlUtVU5LLTY0NSA6IDEgOiAwCitSVS1VTkstNjQ2IDogMSA6IDAKK1JVLVVOSy02NDcgOiAxIDogMAorUlUtVU5LLTY0OCA6IDEgOiAwCitSVS1VTkstNjQ5IDogMSA6IDAKK1JVLVVOSy02NTAgOiAxIDogMAorUlUtVU5LLTY1MSA6IDEgOiAwCitSVS1VTkstNjUyIDogMSA6IDAKK1JVLVVOSy02NTMgOiAxIDogMAorUlUtVU5LLTY1NCA6IDEgOiAwCitSVS1VTkstNjU1IDogMSA6IDAKK1JVLVVOSy02NTYgOiAxIDogMAorUlUtVU5LLTY1NyA6IDEgOiAwCitSVS1VTkstNjU4IDogMSA6IDAKK1JVLVVOSy02NTkgOiAxIDogMAorUlUtVU5LLTY2MCA6IDEgOiAwCitSVS1VTkstNjYxIDogMSA6IDAKK1JVLVVOSy02NjIgOiAxIDogMAorUlUtVU5LLTY2MyA6IDEgOiAwCitSVS1VTkstNjY0IDogMSA6IDAKK1JVLVVOSy02NjUgOiAxIDogMAorUlUtVU5LLTY2NiA6IDEgOiAwCitSVS1VTkstNjY3IDogMSA6IDAKK1JVLVVOSy02NjggOiAxIDogMAorUlUtVU5LLTY2OSA6IDEgOiAwCitSVS1VTkstNjcwIDogMSA6IDAKK1JVLVVOSy02NzEgOiAxIDogMAorUlUtVU5LLTY3MiA6IDEgOiAwCitSVS1VTkstNjczIDogMSA6IDAKK1JVLVVOSy02NzQgOiAxIDogMAorUlUtVU5LLTY3NSA6IDEgOiAwCitSVS1VTkstNjc2IDogMSA6IDAKK1JVLVVOSy02NzcgOiAxIDogMAorUlUtVU5LLTY3OCA6IDEgOiAwCitSVS1VTkstNjc5IDogMSA6IDAKK1JVLVVOSy02ODAgOiAxIDogMAorUlUtVU5LLTY4MSA6IDEgOiAwCitSVS1VTkstNjgyIDogMSA6IDAKK1JVLVVOSy02ODMgOiAxIDogMAorUlUtVU5LLTY4NCA6IDEgOiAwCitSVS1VTkstNjg1IDogMSA6IDAKK1JVLVVOSy02ODYgOiAxIDogMAorUlUtVU5LLTY4NyA6IDEgOiAwCitSVS1VTkstNjg4IDogMSA6IDAKK1JVLVVOSy02ODkgOiAxIDogMAorUlUtVU5LLTY5MCA6IDEgOiAwCitSVS1VTkstNjkxIDogMSA6IDAKK1JVLVVOSy02OTIgOiAxIDogMAorUlUtVU5LLTY5MyA6IDEgOiAwCitSVS1VTkstNjk0IDogMSA6IDAKK1JVLVVOSy02OTUgOiAxIDogMAorUlUtVU5LLTY5NiA6IDEgOiAwCitSVS1VTkstNjk3IDogMSA6IDAKK1JVLVVOSy02OTggOiAxIDogMAorUlUtVU5LLTY5OSA6IDEgOiAwCitSVS1VTkstNzAwIDogMSA6IDAKK1JVLVVOSy03MDEgOiAxIDogMAorUlUtVU5LLTcwMiA6IDEgOiAwCitSVS1VTkstNzAzIDogMSA6IDAKK1JVLVVOSy03MDQgOiAxIDogMAorUlUtVU5LLTcwNSA6IDEgOiAwCitSVS1VTkstNzA2IDogMSA6IDAKK1JVLVVOSy03MDcgOiAxIDogMAorUlUtVU5LLTcwOCA6IDEgOiAwCitSVS1VTkstNzA5IDogMSA6IDAKK1JVLVVOSy03MTAgOiAxIDogMAorUlUtVU5LLTcxMSA6IDEgOiAwCitSVS1VTkstNzEyIDogMSA6IDAKK1JVLVVOSy03MTMgOiAxIDogMAorUlUtVU5LLTcxNCA6IDEgOiAwCitSVS1VTkstNzE1IDogMSA6IDAKK1JVLVVOSy03MTYgOiAxIDogMAorUlUtVU5LLTcxNyA6IDEgOiAwCitSVS1VTkstNzE4IDogMSA6IDAKK1JVLVVOSy03MTkgOiAxIDogMAorUlUtVU5LLTcyMCA6IDEgOiAwCitSVS1VTkstNzIxIDogMSA6IDAKK1JVLVVOSy03MjIgOiAxIDogMAorUlUtVU5LLTcyMyA6IDEgOiAwCitSVS1VTkstNzI0IDogMSA6IDAKK1JVLVVOSy03MjUgOiAxIDogMAorUlUtVU5LLTcyNiA6IDEgOiAwCitSVS1VTkstNzI3IDogMSA6IDAKK1JVLVVOSy03MjggOiAxIDogMAorUlUtVU5LLTcyOSA6IDEgOiAwCitSVS1VTkstNzMwIDogMSA6IDAKK1JVLVVOSy03MzEgOiAxIDogMAorUlUtVU5LLTczMiA6IDEgOiAwCitSVS1VTkstNzMzIDogMSA6IDAKK1JVLVVOSy03MzQgOiAxIDogMAorUlUtVU5LLTczNSA6IDEgOiAwCitSVS1VTkstNzM2IDogMSA6IDAKK1JVLVVOSy03MzcgOiAxIDogMAorUlUtVU5LLTczOCA6IDEgOiAwCitSVS1VTkstNzM5IDogMSA6IDAKK1JVLVVOSy03NDAgOiAxIDogMAorUlUtVU5LLTc0MSA6IDEgOiAwCitSVS1VTkstNzQyIDogMSA6IDAKK1JVLVVOSy03NDMgOiAxIDogMAorUlUtVU5LLTc0NCA6IDEgOiAwCitSVS1VTkstNzQ1IDogMSA6IDAKK1JVLVVOSy03NDYgOiAxIDogMAorUlUtVU5LLTc0NyA6IDEgOiAwCitSVS1VTkstNzQ4IDogMSA6IDAKK1JVLVVOSy03NDkgOiAxIDogMAorUlUtVU5LLTc1MCA6IDEgOiAwCitSVS1VTkstNzUxIDogMSA6IDAKK1JVLVVOSy03NTIgOiAxIDogMAorUlUtVU5LLTc1MyA6IDEgOiAwCitSVS1VTkstNzU0IDogMSA6IDAKK1JVLVVOSy03NTUgOiAxIDogMAorUlUtVU5LLTc1NiA6IDEgOiAwCitSVS1VTkstNzU3IDogMSA6IDAKK1JVLVVOSy03NTggOiAxIDogMAorUlUtVU5LLTc1OSA6IDEgOiAwCitSVS1VTkstNzYwIDogMSA6IDAKK1JVLVVOSy03NjEgOiAxIDogMAorUlUtVU5LLTc2MiA6IDEgOiAwCitSVS1VTkstNzYzIDogMSA6IDAKK1JVLVVOSy03NjQgOiAxIDogMAorUlUtVU5LLTc2NSA6IDEgOiAwCitSVS1VTkstNzY2IDogMSA6IDAKK1JVLVVOSy03NjcgOiAxIDogMAorUlUtVU5LLTc2OCA6IDEgOiAwCitSVS1VTkstNzY5IDogMSA6IDAKK1JVLVVOSy03NzAgOiAxIDogMAorUlUtVU5LLTc3MSA6IDEgOiAwCitSVS1VTkstNzcyIDogMSA6IDAKK1JVLVVOSy03NzMgOiAxIDogMAorUlUtVU5LLTc3NCA6IDEgOiAwCitSVS1VTkstNzc1IDogMSA6IDAKK1JVLVVOSy03NzYgOiAxIDogMAorUlUtVU5LLTc3NyA6IDEgOiAwCitSVS1VTkstNzc4IDogMSA6IDAKK1JVLVVOSy03NzkgOiAxIDogMAorUlUtVU5LLTc4MCA6IDEgOiAwCitSVS1VTkstNzgxIDogMSA6IDAKK1JVLVVOSy03ODIgOiAxIDogMAorUlUtVU5LLTc4MyA6IDEgOiAwCitSVS1VTkstNzg0IDogMSA6IDAKK1JVLVVOSy03ODUgOiAxIDogMAorUlUtVU5LLTc4NiA6IDEgOiAwCitSVS1VTkstNzg3IDogMSA6IDAKK1JVLVVOSy03ODggOiAxIDogMAorUlUtVU5LLTc4OSA6IDEgOiAwCitSVS1VTkstNzkwIDogMSA6IDAKK1JVLVVOSy03OTEgOiAxIDogMAorUlUtVU5LLTc5MiA6IDEgOiAwCitSVS1VTkstNzkzIDogMSA6IDAKK1JVLVVOSy03OTQgOiAxIDogMAorUlUtVU5LLTc5NSA6IDEgOiAwCitSVS1VTkstNzk2IDogMSA6IDAKK1JVLVVOSy03OTcgOiAxIDogMAorUlUtVU5LLTc5OCA6IDEgOiAwCitSVS1VTkstNzk5IDogMSA6IDAKK1JVLVVOSy04MDAgOiAxIDogMAorUlUtVU5LLTgwMSA6IDEgOiAwCitSVS1VTkstODAyIDogMSA6IDAKK1JVLVVOSy04MDMgOiAxIDogMAorUlUtVU5LLTgwNCA6IDEgOiAwCitSVS1VTkstODA1IDogMSA6IDAKK1JVLVVOSy04MDYgOiAxIDogMAorUlUtVU5LLTgwNyA6IDEgOiAwCitSVS1VTkstODA4IDogMSA6IDAKK1JVLVVOSy04MDkgOiAxIDogMAorUlUtVU5LLTgxMCA6IDEgOiAwCitSVS1VTkstODExIDogMSA6IDAKK1JVLVVOSy04MTIgOiAxIDogMAorUlUtVU5LLTgxMyA6IDEgOiAwCitSVS1VTkstODE0IDogMSA6IDAKK1JVLVVOSy04MTUgOiAxIDogMAorUlUtVU5LLTgxNiA6IDEgOiAwCitSVS1VTkstODE3IDogMSA6IDAKK1JVLVVOSy04MTggOiAxIDogMAorUlUtVU5LLTgxOSA6IDEgOiAwCitSVS1VTkstODIwIDogMSA6IDAKK1JVLVVOSy04MjEgOiAxIDogMAorUlUtVU5LLTgyMiA6IDEgOiAwCitSVS1VTkstODIzIDogMSA6IDAKK1JVLVVOSy04MjQgOiAxIDogMAorUlUtVU5LLTgyNSA6IDEgOiAwCitSVS1VTkstODI2IDogMSA6IDAKK1JVLVVOSy04MjcgOiAxIDogMAorUlUtVU5LLTgyOCA6IDEgOiAwCitSVS1VTkstODI5IDogMSA6IDAKK1JVLVVOSy04MzAgOiAxIDogMAorUlUtVU5LLTgzMSA6IDEgOiAwCitSVS1VTkstODMyIDogMSA6IDAKK1JVLVVOSy04MzMgOiAxIDogMAorUlUtVU5LLTgzNCA6IDEgOiAwCitSVS1VTkstODM1IDogMSA6IDAKK1JVLVVOSy04MzYgOiAxIDogMAorUlUtVU5LLTgzNyA6IDEgOiAwCitSVS1VTkstODM4IDogMSA6IDAKK1JVLVVOSy04MzkgOiAxIDogMAorUlUtVU5LLTg0MCA6IDEgOiAwCitSVS1VTkstODQxIDogMSA6IDAKK1JVLVVOSy04NDIgOiAxIDogMAorUlUtVU5LLTg0MyA6IDEgOiAwCitSVS1VTkstODQ0IDogMSA6IDAKK1JVLVVOSy04NDUgOiAxIDogMAorUlUtVU5LLTg0NiA6IDEgOiAwCitSVS1VTkstODQ3IDogMSA6IDAKK1JVLVVOSy04NDggOiAxIDogMAorUlUtVU5LLTg0OSA6IDEgOiAwCitSVS1VTkstODUwIDogMSA6IDAKK1JVLVVOSy04NTEgOiAxIDogMAorUlUtVU5LLTg1MiA6IDEgOiAwCitSVS1VTkstODUzIDogMSA6IDAKK1JVLVVOSy04NTQgOiAxIDogMAorUlUtVU5LLTg1NSA6IDEgOiAwCitSVS1VTkstODU2IDogMSA6IDAKK1JVLVVOSy04NTcgOiAxIDogMAorUlUtVU5LLTg1OCA6IDEgOiAwCitSVS1VTkstODU5IDogMSA6IDAKK1JVLVVOSy04NjAgOiAxIDogMAorUlUtVU5LLTg2MSA6IDEgOiAwCitSVS1VTkstODYyIDogMSA6IDAKK1JVLVVOSy04NjMgOiAxIDogMAorUlUtVU5LLTg2NCA6IDEgOiAwCitSVS1VTkstODY1IDogMSA6IDAKK1JVLVVOSy04NjYgOiAxIDogMAorUlUtVU5LLTg2NyA6IDEgOiAwCitSVS1VTkstODY4IDogMSA6IDAKK1JVLVVOSy04NjkgOiAxIDogMAorUlUtVU5LLTg3MCA6IDEgOiAwCitSVS1VTkstODcxIDogMSA6IDAKK1JVLVVOSy04NzIgOiAxIDogMAorUlUtVU5LLTg3MyA6IDEgOiAwCitSVS1VTkstODc0IDogMSA6IDAKK1JVLVVOSy04NzUgOiAxIDogMAorUlUtVU5LLTg3NiA6IDEgOiAwCitSVS1VTkstODc3IDogMSA6IDAKK1JVLVVOSy04NzggOiAxIDogMAorUlUtVU5LLTg3OSA6IDEgOiAwCitSVS1VTkstODgwIDogMSA6IDAKK1JVLVVOSy04ODEgOiAxIDogMAorUlUtVU5LLTg4MiA6IDEgOiAwCitSVS1VTkstODgzIDogMSA6IDAKK1JVLVVOSy04ODQgOiAxIDogMAorUlUtVU5LLTg4NSA6IDEgOiAwCitSVS1VTkstODg2IDogMSA6IDAKK1JVLVVOSy04ODcgOiAxIDogMAorUlUtVU5LLTg4OCA6IDEgOiAwCitSVS1VTkstODg5IDogMSA6IDAKK1JVLVVOSy04OTAgOiAxIDogMAorUlUtVU5LLTg5MSA6IDEgOiAwCitSVS1VTkstODkyIDogMSA6IDAKK1JVLVVOSy04OTMgOiAxIDogMAorUlUtVU5LLTg5NCA6IDEgOiAwCitSVS1VTkstODk1IDogMSA6IDAKK1JVLVVOSy04OTYgOiAxIDogMAorUlUtVU5LLTg5NyA6IDEgOiAwCitSVS1VTkstODk4IDogMSA6IDAKK1JVLVVOSy04OTkgOiAxIDogMAorUlUtVU5LLTkwMCA6IDEgOiAwCitSVS1VTkstOTAxIDogMSA6IDAKK1JVLVVOSy05MDIgOiAxIDogMAorUlUtVU5LLTkwMyA6IDEgOiAwCitSVS1VTkstOTA0IDogMSA6IDAKK1JVLVVOSy05MDUgOiAxIDogMAorUlUtVU5LLTkwNiA6IDEgOiAwCitSVS1VTkstOTA3IDogMSA6IDAKK1JVLVVOSy05MDggOiAxIDogMAorUlUtVU5LLTkwOSA6IDEgOiAwCitSVS1VTkstOTEwIDogMSA6IDAKK1JVLVVOSy05MTEgOiAxIDogMAorUlUtVU5LLTkxMiA6IDEgOiAwCitSVS1VTkstOTEzIDogMSA6IDAKK1JVLVVOSy05MTQgOiAxIDogMAorUlUtVU5LLTkxNSA6IDEgOiAwCitSVS1VTkstOTE2IDogMSA6IDAKK1JVLVVOSy05MTcgOiAxIDogMAorUlUtVU5LLTkxOCA6IDEgOiAwCitSVS1VTkstOTE5IDogMSA6IDAKK1JVLVVOSy05MjAgOiAxIDogMAorUlUtVU5LLTkyMSA6IDEgOiAwCitSVS1VTkstOTIyIDogMSA6IDAKK1JVLVVOSy05MjMgOiAxIDogMAorUlUtVU5LLTkyNCA6IDEgOiAwCitSVS1VTkstOTI1IDogMSA6IDAKK1JVLVVOSy05MjYgOiAxIDogMAorUlUtVU5LLTkyNyA6IDEgOiAwCitSVS1VTkstOTI4IDogMSA6IDAKK1JVLVVOSy05MjkgOiAxIDogMAorUlUtVU5LLTkzMCA6IDEgOiAwCitSVS1VTkstOTMxIDogMSA6IDAKK1JVLVVOSy05MzIgOiAxIDogMAorUlUtVU5LLTkzMyA6IDEgOiAwCitSVS1VTkstOTM0IDogMSA6IDAKK1JVLVVOSy05MzUgOiAxIDogMAorUlUtVU5LLTkzNiA6IDEgOiAwCitSVS1VTkstOTM3IDogMSA6IDAKK1JVLVVOSy05MzggOiAxIDogMAorUlUtVU5LLTkzOSA6IDEgOiAwCitSVS1VTkstOTQwIDogMSA6IDAKK1JVLVVOSy05NDEgOiAxIDogMAorUlUtVU5LLTk0MiA6IDEgOiAwCitSVS1VTkstOTQzIDogMSA6IDAKK1JVLVVOSy05NDQgOiAxIDogMAorUlUtVU5LLTk0NSA6IDEgOiAwCitSVS1VTkstOTQ2IDogMSA6IDAKK1JVLVVOSy05NDcgOiAxIDogMAorUlUtVU5LLTk0OCA6IDEgOiAwCitSVS1VTkstOTQ5IDogMSA6IDAKK1JVLVVOSy05NTAgOiAxIDogMAorUlUtVU5LLTk1MSA6IDEgOiAwCitSVS1VTkstOTUyIDogMSA6IDAKK1JVLVVOSy05NTMgOiAxIDogMAorUlUtVU5LLTk1NCA6IDEgOiAwCitSVS1VTkstOTU1IDogMSA6IDAKK1JVLVVOSy05NTYgOiAxIDogMAorUlUtVU5LLTk1NyA6IDEgOiAwCitSVS1VTkstOTU4IDogMSA6IDAKK1JVLVVOSy05NTkgOiAxIDogMAorUlUtVU5LLTk2MCA6IDEgOiAwCitSVS1VTkstOTYxIDogMSA6IDAKK1JVLVVOSy05NjIgOiAxIDogMAorUlUtVU5LLTk2MyA6IDEgOiAwCitSVS1VTkstOTY0IDogMSA6IDAKK1JVLVVOSy05NjUgOiAxIDogMAorUlUtVU5LLTk2NiA6IDEgOiAwCitSVS1VTkstOTY3IDogMSA6IDAKK1JVLVVOSy05NjggOiAxIDogMAorUlUtVU5LLTk2OSA6IDEgOiAwCitSVS1VTkstOTcwIDogMSA6IDAKK1JVLVVOSy05NzEgOiAxIDogMAorUlUtVU5LLTk3MiA6IDEgOiAwCitSVS1VTkstOTczIDogMSA6IDAKK1JVLVVOSy05NzQgOiAxIDogMAorUlUtVU5LLTk3NSA6IDEgOiAwCitSVS1VTkstOTc2IDogMSA6IDAKK1JVLVVOSy05NzcgOiAxIDogMAorUlUtVU5LLTk3OCA6IDEgOiAwCitSVS1VTkstOTc5IDogMSA6IDAKK1JVLVVOSy05ODAgOiAxIDogMAorUlUtVU5LLTk4MSA6IDEgOiAwCitSVS1VTkstOTgyIDogMSA6IDAKK1JVLVVOSy05ODMgOiAxIDogMAorUlUtVU5LLTk4NCA6IDEgOiAwCitSVS1VTkstOTg1IDogMSA6IDAKK1JVLVVOSy05ODYgOiAxIDogMAorUlUtVU5LLTk4NyA6IDEgOiAwCitSVS1VTkstOTg4IDogMSA6IDAKK1JVLVVOSy05ODkgOiAxIDogMAorUlUtVU5LLTk5MCA6IDEgOiAwCitSVS1VTkstOTkxIDogMSA6IDAKK1JVLVVOSy05OTIgOiAxIDogMAorUlUtVU5LLTk5MyA6IDEgOiAwCitSVS1VTkstOTk0IDogMSA6IDAKK1JVLVVOSy05OTUgOiAxIDogMAorUlUtVU5LLTk5NiA6IDEgOiAwCitSVS1VTkstOTk3IDogMSA6IDAKK1JVLVVOSy05OTggOiAxIDogMAorUlUtVU5LLTk5OSA6IDEgOiAwCitSVS1VTkstMTAwMCA6IDEgOiAwCitSVS1VTkstMTAwMSA6IDEgOiAwCitSVS1VTkstMTAwMiA6IDEgOiAwCitSVS1VTkstMTAwMyA6IDEgOiAwCitSVS1VTkstMTAwNCA6IDEgOiAwCitSVS1VTkstMTAwNSA6IDEgOiAwCitSVS1VTkstMTAwNiA6IDEgOiAwCitSVS1VTkstMTAwNyA6IDEgOiAwCitSVS1VTkstMTAwOCA6IDEgOiAwCitSVS1VTkstMTAwOSA6IDEgOiAwCitSVS1VTkstMTAxMCA6IDEgOiAwCitSVS1VTkstMTAxMSA6IDEgOiAwCitSVS1VTkstMTAxMiA6IDEgOiAwCitSVS1VTkstMTAxMyA6IDEgOiAwCitSVS1VTkstMTAxNCA6IDEgOiAwCitSVS1VTkstMTAxNSA6IDEgOiAwCitSVS1VTkstMTAxNiA6IDEgOiAwCitSVS1VTkstMTAxNyA6IDEgOiAwCitSVS1VTkstMTAxOCA6IDEgOiAwCitSVS1VTkstMTAxOSA6IDEgOiAwCitSVS1VTkstMTAyMCA6IDEgOiAwCitSVS1VTkstMTAyMSA6IDEgOiAwCitSVS1VTkstMTAyMiA6IDEgOiAwCitSVS1VTkstMTAyMyA6IDEgOiAwCitSVS1VTkstMTAyNCA6IDEgOiAwCitSVS1VTkstMTAyNSA6IDEgOiAwCitSVS1VTkstMTAyNiA6IDEgOiAwCitSVS1VTkstMTAyNyA6IDEgOiAwCitSVS1VTkstMTAyOCA6IDEgOiAwCitSVS1VTkstMTAyOSA6IDEgOiAwCitSVS1VTkstMTAzMCA6IDEgOiAwCitSVS1VTkstMTAzMSA6IDEgOiAwCitSVS1VTkstMTAzMiA6IDEgOiAwCitSVS1VTkstMTAzMyA6IDEgOiAwCitSVS1VTkstMTAzNCA6IDEgOiAwCitSVS1VTkstMTAzNSA6IDEgOiAwCitSVS1VTkstMTAzNiA6IDEgOiAwCitSVS1VTkstMTAzNyA6IDEgOiAwCitSVS1VTkstMTAzOCA6IDEgOiAwCitSVS1VTkstMTAzOSA6IDEgOiAwCitSVS1VTkstMTA0MCA6IDEgOiAwCitSVS1VTkstMTA0MSA6IDEgOiAwCitSVS1VTkstMTA0MiA6IDEgOiAwCitSVS1VTkstMTA0MyA6IDEgOiAwCitSVS1VTkstMTA0NCA6IDEgOiAwCitSVS1VTkstMTA0NSA6IDEgOiAwCitSVS1VTkstMTA0NiA6IDEgOiAwCitSVS1VTkstMTA0NyA6IDEgOiAwCitSVS1VTkstMTA0OCA6IDEgOiAwCitSVS1VTkstMTA0OSA6IDEgOiAwCitSVS1VTkstMTA1MCA6IDEgOiAwCitSVS1VTkstMTA1MSA6IDEgOiAwCitSVS1VTkstMTA1MiA6IDEgOiAwCitSVS1VTkstMTA1MyA6IDEgOiAwCitSVS1VTkstMTA1NCA6IDEgOiAwCitSVS1VTkstMTA1NSA6IDEgOiAwCitSVS1VTkstMTA1NiA6IDEgOiAwCitSVS1VTkstMTA1NyA6IDEgOiAwCitSVS1VTkstMTA1OCA6IDEgOiAwCitSVS1VTkstMTA1OSA6IDEgOiAwCitSVS1VTkstMTA2MCA6IDEgOiAwCitSVS1VTkstMTA2MSA6IDEgOiAwCitSVS1VTkstMTA2MiA6IDEgOiAwCitSVS1VTkstMTA2MyA6IDEgOiAwCitSVS1VTkstMTA2NCA6IDEgOiAwCitSVS1VTkstMTA2NSA6IDEgOiAwCitSVS1VTkstMTA2NiA6IDEgOiAwCitSVS1VTkstMTA2NyA6IDEgOiAwCitSVS1VTkstMTA2OCA6IDEgOiAwCitSVS1VTkstMTA2OSA6IDEgOiAwCitSVS1VTkstMTA3MCA6IDEgOiAwCitSVS1VTkstMTA3MSA6IDEgOiAwCitSVS1VTkstMTA3MiA6IDEgOiAwCitSVS1VTkstMTA3MyA6IDEgOiAwCitSVS1VTkstMTA3NCA6IDEgOiAwCitSVS1VTkstMTA3NSA6IDEgOiAwCitSVS1VTkstMTA3NiA6IDEgOiAwCitSVS1VTkstMTA3NyA6IDEgOiAwCitSVS1VTkstMTA3OCA6IDEgOiAwCitSVS1VTkstMTA3OSA6IDEgOiAwCitSVS1VTkstMTA4MCA6IDEgOiAwCitSVS1VTkstMTA4MSA6IDEgOiAwCitSVS1VTkstMTA4MiA6IDEgOiAwCitSVS1VTkstMTA4MyA6IDEgOiAwCitSVS1VTkstMTA4NCA6IDEgOiAwCitSVS1VTkstMTA4NSA6IDEgOiAwCitSVS1VTkstMTA4NiA6IDEgOiAwCitSVS1VTkstMTA4NyA6IDEgOiAwCitSVS1VTkstMTA4OCA6IDEgOiAwCitSVS1VTkstMTA4OSA6IDEgOiAwCitSVS1VTkstMTA5MCA6IDEgOiAwCitSVS1VTkstMTA5MSA6IDEgOiAwCitSVS1VTkstMTA5MiA6IDEgOiAwCitSVS1VTkstMTA5MyA6IDEgOiAwCitSVS1VTkstMTA5NCA6IDEgOiAwCitSVS1VTkstMTA5NSA6IDEgOiAwCitSVS1VTkstMTA5NiA6IDEgOiAwCitSVS1VTkstMTA5NyA6IDEgOiAwCitSVS1VTkstMTA5OCA6IDEgOiAwCitSVS1VTkstMTA5OSA6IDEgOiAwCitSVS1VTkstMTEwMCA6IDEgOiAwCitSVS1VTkstMTEwMSA6IDEgOiAwCitSVS1VTkstMTEwMiA6IDEgOiAwCitSVS1VTkstMTEwMyA6IDEgOiAwCitSVS1VTkstMTEwNCA6IDEgOiAwCitSVS1VTkstMTEwNSA6IDEgOiAwCitSVS1VTkstMTEwNiA6IDEgOiAwCitSVS1VTkstMTEwNyA6IDEgOiAwCitSVS1VTkstMTEwOCA6IDEgOiAwCitSVS1VTkstMTEwOSA6IDEgOiAwCitSVS1VTkstMTExMCA6IDEgOiAwCitSVS1VTkstMTExMSA6IDEgOiAwCitSVS1VTkstMTExMiA6IDEgOiAwCitSVS1VTkstMTExMyA6IDEgOiAwCitSVS1VTkstMTExNCA6IDEgOiAwCitSVS1VTkstMTExNSA6IDEgOiAwCitSVS1VTkstMTExNiA6IDEgOiAwCitSVS1VTkstMTExNyA6IDEgOiAwCitSVS1VTkstMTExOCA6IDEgOiAwCitSVS1VTkstMTExOSA6IDEgOiAwCitSVS1VTkstMTEyMCA6IDEgOiAwCitSVS1VTkstMTEyMSA6IDEgOiAwCitSVS1VTkstMTEyMiA6IDEgOiAwCitSVS1VTkstMTEyMyA6IDEgOiAwCitSVS1VTkstMTEyNCA6IDEgOiAwCitSVS1VTkstMTEyNSA6IDEgOiAwCitSVS1VTkstMTEyNiA6IDEgOiAwCitSVS1VTkstMTEyNyA6IDEgOiAwCitSVS1VTkstMTEyOCA6IDEgOiAwCitSVS1VTkstMTEyOSA6IDEgOiAwCitSVS1VTkstMTEzMCA6IDEgOiAwCitSVS1VTkstMTEzMSA6IDEgOiAwCitSVS1VTkstMTEzMiA6IDEgOiAwCitSVS1VTkstMTEzMyA6IDEgOiAwCitSVS1VTkstMTEzNCA6IDEgOiAwCitSVS1VTkstMTEzNSA6IDEgOiAwCitSVS1VTkstMTEzNiA6IDEgOiAwCitSVS1VTkstMTEzNyA6IDEgOiAwCitSVS1VTkstMTEzOCA6IDEgOiAwCitSVS1VTkstMTEzOSA6IDEgOiAwCitSVS1VTkstMTE0MCA6IDEgOiAwCitSVS1VTkstMTE0MSA6IDEgOiAwCitSVS1VTkstMTE0MiA6IDEgOiAwCitSVS1VTkstMTE0MyA6IDEgOiAwCitSVS1VTkstMTE0NCA6IDEgOiAwCitSVS1VTkstMTE0NSA6IDEgOiAwCitSVS1VTkstMTE0NiA6IDEgOiAwCitSVS1VTkstMTE0NyA6IDEgOiAwCitSVS1VTkstMTE0OCA6IDEgOiAwCitSVS1VTkstMTE0OSA6IDEgOiAwCitSVS1VTkstMTE1MCA6IDEgOiAwCitSVS1VTkstMTE1MSA6IDEgOiAwCitSVS1VTkstMTE1MiA6IDEgOiAwCitSVS1VTkstMTE1MyA6IDEgOiAwCitSVS1VTkstMTE1NCA6IDEgOiAwCitSVS1VTkstMTE1NSA6IDEgOiAwCitSVS1VTkstMTE1NiA6IDEgOiAwCitSVS1VTkstMTE1NyA6IDEgOiAwCitSVS1VTkstMTE1OCA6IDEgOiAwCitSVS1VTkstMTE1OSA6IDEgOiAwCitSVS1VTkstMTE2MCA6IDEgOiAwCitSVS1VTkstMTE2MSA6IDEgOiAwCitSVS1VTkstMTE2MiA6IDEgOiAwCitSVS1VTkstMTE2MyA6IDEgOiAwCitSVS1VTkstMTE2NCA6IDEgOiAwCitSVS1VTkstMTE2NSA6IDEgOiAwCitSVS1VTkstMTE2NiA6IDEgOiAwCitSVS1VTkstMTE2NyA6IDEgOiAwCitSVS1VTkstMTE2OCA6IDEgOiAwCitSVS1VTkstMTE2OSA6IDEgOiAwCitSVS1VTkstMTE3MCA6IDEgOiAwCitSVS1VTkstMTE3MSA6IDEgOiAwCitSVS1VTkstMTE3MiA6IDEgOiAwCitSVS1VTkstMTE3MyA6IDEgOiAwCitSVS1VTkstMTE3NCA6IDEgOiAwCitSVS1VTkstMTE3NSA6IDEgOiAwCitSVS1VTkstMTE3NiA6IDEgOiAwCitSVS1VTkstMTE3NyA6IDEgOiAwCitSVS1VTkstMTE3OCA6IDEgOiAwCitSVS1VTkstMTE3OSA6IDEgOiAwCitSVS1VTkstMTE4MCA6IDEgOiAwCitSVS1VTkstMTE4MSA6IDEgOiAwCitSVS1VTkstMTE4MiA6IDEgOiAwCitSVS1VTkstMTE4MyA6IDEgOiAwCitSVS1VTkstMTE4NCA6IDEgOiAwCitSVS1VTkstMTE4NSA6IDEgOiAwCitSVS1VTkstMTE4NiA6IDEgOiAwCitSVS1VTkstMTE4NyA6IDEgOiAwCitSVS1VTkstMTE4OCA6IDEgOiAwCitSVS1VTkstMTE4OSA6IDEgOiAwCitSVS1VTkstMTE5MCA6IDEgOiAwCitSVS1VTkstMTE5MSA6IDEgOiAwCitSVS1VTkstMTE5MiA6IDEgOiAwCitSVS1VTkstMTE5MyA6IDEgOiAwCitSVS1VTkstMTE5NCA6IDEgOiAwCitSVS1VTkstMTE5NSA6IDEgOiAwCitSVS1VTkstMTE5NiA6IDEgOiAwCitSVS1VTkstMTE5NyA6IDEgOiAwCitSVS1VTkstMTE5OCA6IDEgOiAwCitSVS1VTkstMTE5OSA6IDEgOiAwCitSVS1VTkstMTIwMCA6IDEgOiAwCitSVS1VTkstMTIwMSA6IDEgOiAwCitSVS1VTkstMTIwMiA6IDEgOiAwCitSVS1VTkstMTIwMyA6IDEgOiAwCitSVS1VTkstMTIwNCA6IDEgOiAwCitSVS1VTkstMTIwNSA6IDEgOiAwCitSVS1VTkstMTIwNiA6IDEgOiAwCitSVS1VTkstMTIwNyA6IDEgOiAwCitSVS1VTkstMTIwOCA6IDEgOiAwCitSVS1VTkstMTIwOSA6IDEgOiAwCitSVS1VTkstMTIxMCA6IDEgOiAwCitSVS1VTkstMTIxMSA6IDEgOiAwCitSVS1VTkstMTIxMiA6IDEgOiAwCitSVS1VTkstMTIxMyA6IDEgOiAwCitSVS1VTkstMTIxNCA6IDEgOiAwCitSVS1VTkstMTIxNSA6IDEgOiAwCitSVS1VTkstMTIxNiA6IDEgOiAwCitSVS1VTkstMTIxNyA6IDEgOiAwCitSVS1VTkstMTIxOCA6IDEgOiAwCitSVS1VTkstMTIxOSA6IDEgOiAwCitSVS1VTkstMTIyMCA6IDEgOiAwCitSVS1VTkstMTIyMSA6IDEgOiAwCitSVS1VTkstMTIyMiA6IDEgOiAwCitSVS1VTkstMTIyMyA6IDEgOiAwCitSVS1VTkstMTIyNCA6IDEgOiAwCitSVS1VTkstMTIyNSA6IDEgOiAwCitSVS1VTkstMTIyNiA6IDEgOiAwCitSVS1VTkstMTIyNyA6IDEgOiAwCitSVS1VTkstMTIyOCA6IDEgOiAwCitSVS1VTkstMTIyOSA6IDEgOiAwCitSVS1VTkstMTIzMCA6IDEgOiAwCitSVS1VTkstMTIzMSA6IDEgOiAwCitSVS1VTkstMTIzMiA6IDEgOiAwCitSVS1VTkstMTIzMyA6IDEgOiAwCitSVS1VTkstMTIzNCA6IDEgOiAwCitSVS1VTkstMTIzNSA6IDEgOiAwCitSVS1VTkstMTIzNiA6IDEgOiAwCitSVS1VTkstMTIzNyA6IDEgOiAwCitSVS1VTkstMTIzOCA6IDEgOiAwCitSVS1VTkstMTIzOSA6IDEgOiAwCitSVS1VTkstMTI0MCA6IDEgOiAwCitSVS1VTkstMTI0MSA6IDEgOiAwCitSVS1VTkstMTI0MiA6IDEgOiAwCitSVS1VTkstMTI0MyA6IDEgOiAwCitSVS1VTkstMTI0NCA6IDEgOiAwCitSVS1VTkstMTI0NSA6IDEgOiAwCitSVS1VTkstMTI0NiA6IDEgOiAwCitSVS1VTkstMTI0NyA6IDEgOiAwCitSVS1VTkstMTI0OCA6IDEgOiAwCitSVS1VTkstMTI0OSA6IDEgOiAwCitSVS1VTkstMTI1MCA6IDEgOiAwCitSVS1VTkstMTI1MSA6IDEgOiAwCitSVS1VTkstMTI1MiA6IDEgOiAwCitSVS1VTkstMTI1MyA6IDEgOiAwCitSVS1VTkstMTI1NCA6IDEgOiAwCitSVS1VTkstMTI1NSA6IDEgOiAwCitSVS1VTkstMTI1NiA6IDEgOiAwCitSVS1VTkstMTI1NyA6IDEgOiAwCitSVS1VTkstMTI1OCA6IDEgOiAwCitSVS1VTkstMTI1OSA6IDEgOiAwCitSVS1VTkstMTI2MCA6IDEgOiAwCitSVS1VTkstMTI2MSA6IDEgOiAwCitSVS1VTkstMTI2MiA6IDEgOiAwCitSVS1VTkstMTI2MyA6IDEgOiAwCitSVS1VTkstMTI2NCA6IDEgOiAwCitSVS1VTkstMTI2NSA6IDEgOiAwCitSVS1VTkstMTI2NiA6IDEgOiAwCitSVS1VTkstMTI2NyA6IDEgOiAwCitSVS1VTkstMTI2OCA6IDEgOiAwCitSVS1VTkstMTI2OSA6IDEgOiAwCitSVS1VTkstMTI3MCA6IDEgOiAwCitSVS1VTkstMTI3MSA6IDEgOiAwCitSVS1VTkstMTI3MiA6IDEgOiAwCitSVS1VTkstMTI3MyA6IDEgOiAwCitSVS1VTkstMTI3NCA6IDEgOiAwCitSVS1VTkstMTI3NSA6IDEgOiAwCitSVS1VTkstMTI3NiA6IDEgOiAwCitSVS1VTkstMTI3NyA6IDEgOiAwCitSVS1VTkstMTI3OCA6IDEgOiAwCitSVS1VTkstMTI3OSA6IDEgOiAwCitSVS1VTkstMTI4MCA6IDEgOiAwCitSVS1VTkstMTI4MSA6IDEgOiAwCitSVS1VTkstMTI4MiA6IDEgOiAwCitSVS1VTkstMTI4MyA6IDEgOiAwCitSVS1VTkstMTI4NCA6IDEgOiAwCitSVS1VTkstMTI4NSA6IDEgOiAwCitSVS1VTkstMTI4NiA6IDEgOiAwCitSVS1VTkstMTI4NyA6IDEgOiAwCitSVS1VTkstMTI4OCA6IDEgOiAwCitSVS1VTkstMTI4OSA6IDEgOiAwCitSVS1VTkstMTI5MCA6IDEgOiAwCitSVS1VTkstMTI5MSA6IDEgOiAwCitSVS1VTkstMTI5MiA6IDEgOiAwCitSVS1VTkstMTI5MyA6IDEgOiAwCitSVS1VTkstMTI5NCA6IDEgOiAwCitSVS1VTkstMTI5NSA6IDEgOiAwCitSVS1VTkstMTI5NiA6IDEgOiAwCitSVS1VTkstMTI5NyA6IDEgOiAwCitSVS1VTkstMTI5OCA6IDEgOiAwCitSVS1VTkstMTI5OSA6IDEgOiAwCitSVS1VTkstMTMwMCA6IDEgOiAwCitSVS1VTkstMTMwMSA6IDEgOiAwCitSVS1VTkstMTMwMiA6IDEgOiAwCitSVS1VTkstMTMwMyA6IDEgOiAwCitSVS1VTkstMTMwNCA6IDEgOiAwCitSVS1VTkstMTMwNSA6IDEgOiAwCitSVS1VTkstMTMwNiA6IDEgOiAwCitSVS1VTkstMTMwNyA6IDEgOiAwCitSVS1VTkstMTMwOCA6IDEgOiAwCitSVS1VTkstMTMwOSA6IDEgOiAwCitSVS1VTkstMTMxMCA6IDEgOiAwCitSVS1VTkstMTMxMSA6IDEgOiAwCitSVS1VTkstMTMxMiA6IDEgOiAwCitSVS1VTkstMTMxMyA6IDEgOiAwCitSVS1VTkstMTMxNCA6IDEgOiAwCitSVS1VTkstMTMxNSA6IDEgOiAwCitSVS1VTkstMTMxNiA6IDEgOiAwCitSVS1VTkstMTMxNyA6IDEgOiAwCitSVS1VTkstMTMxOCA6IDEgOiAwCitSVS1VTkstMTMxOSA6IDEgOiAwCitSVS1VTkstMTMyMCA6IDEgOiAwCitSVS1VTkstMTMyMSA6IDEgOiAwCitSVS1VTkstMTMyMiA6IDEgOiAwCitSVS1VTkstMTMyMyA6IDEgOiAwCitSVS1VTkstMTMyNCA6IDEgOiAwCitSVS1VTkstMTMyNSA6IDEgOiAwCitSVS1VTkstMTMyNiA6IDEgOiAwCitSVS1VTkstMTMyNyA6IDEgOiAwCitSVS1VTkstMTMyOCA6IDEgOiAwCitSVS1VTkstMTMyOSA6IDEgOiAwCitSVS1VTkstMTMzMCA6IDEgOiAwCitSVS1VTkstMTMzMSA6IDEgOiAwCitSVS1VTkstMTMzMiA6IDEgOiAwCitSVS1VTkstMTMzMyA6IDEgOiAwCitSVS1VTkstMTMzNCA6IDEgOiAwCitSVS1VTkstMTMzNSA6IDEgOiAwCitSVS1VTkstMTMzNiA6IDEgOiAwCitSVS1VTkstMTMzNyA6IDEgOiAwCitSVS1VTkstMTMzOCA6IDEgOiAwCitSVS1VTkstMTMzOSA6IDEgOiAwCitSVS1VTkstMTM0MCA6IDEgOiAwCitSVS1VTkstMTM0MSA6IDEgOiAwCitSVS1VTkstMTM0MiA6IDEgOiAwCitSVS1VTkstMTM0MyA6IDEgOiAwCitSVS1VTkstMTM0NCA6IDEgOiAwCitSVS1VTkstMTM0NSA6IDEgOiAwCitSVS1VTkstMTM0NiA6IDEgOiAwCitSVS1VTkstMTM0NyA6IDEgOiAwCitSVS1VTkstMTM0OCA6IDEgOiAwCitSVS1VTkstMTM0OSA6IDEgOiAwCitSVS1VTkstMTM1MCA6IDEgOiAwCitSVS1VTkstMTM1MSA6IDEgOiAwCitSVS1VTkstMTM1MiA6IDEgOiAwCitSVS1VTkstMTM1MyA6IDEgOiAwCitSVS1VTkstMTM1NCA6IDEgOiAwCitSVS1VTkstMTM1NSA6IDEgOiAwCitSVS1VTkstMTM1NiA6IDEgOiAwCitSVS1VTkstMTM1NyA6IDEgOiAwCitSVS1VTkstMTM1OCA6IDEgOiAwCitSVS1VTkstMTM1OSA6IDEgOiAwCitSVS1VTkstMTM2MCA6IDEgOiAwCitSVS1VTkstMTM2MSA6IDEgOiAwCitSVS1VTkstMTM2MiA6IDEgOiAwCitSVS1VTkstMTM2MyA6IDEgOiAwCitSVS1VTkstMTM2NCA6IDEgOiAwCitSVS1VTkstMTM2NSA6IDEgOiAwCitSVS1VTkstMTM2NiA6IDEgOiAwCitSVS1VTkstMTM2NyA6IDEgOiAwCitSVS1VTkstMTM2OCA6IDEgOiAwCitSVS1VTkstMTM2OSA6IDEgOiAwCitSVS1VTkstMTM3MCA6IDEgOiAwCitSVS1VTkstMTM3MSA6IDEgOiAwCitSVS1VTkstMTM3MiA6IDEgOiAwCitSVS1VTkstMTM3MyA6IDEgOiAwCitSVS1VTkstMTM3NCA6IDEgOiAwCitSVS1VTkstMTM3NSA6IDEgOiAwCitSVS1VTkstMTM3NiA6IDEgOiAwCitSVS1VTkstMTM3NyA6IDEgOiAwCitSVS1VTkstMTM3OCA6IDEgOiAwCitSVS1VTkstMTM3OSA6IDEgOiAwCitSVS1VTkstMTM4MCA6IDEgOiAwCitSVS1VTkstMTM4MSA6IDEgOiAwCitSVS1VTkstMTM4MiA6IDEgOiAwCitSVS1VTkstMTM4MyA6IDEgOiAwCitSVS1VTkstMTM4NCA6IDEgOiAwCitSVS1VTkstMTM4NSA6IDEgOiAwCitSVS1VTkstMTM4NiA6IDEgOiAwCitSVS1VTkstMTM4NyA6IDEgOiAwCitSVS1VTkstMTM4OCA6IDEgOiAwCitSVS1VTkstMTM4OSA6IDEgOiAwCitSVS1VTkstMTM5MCA6IDEgOiAwCitSVS1VTkstMTM5MSA6IDEgOiAwCitSVS1VTkstMTM5MiA6IDEgOiAwCitSVS1VTkstMTM5MyA6IDEgOiAwCitSVS1VTkstMTM5NCA6IDEgOiAwCitSVS1VTkstMTM5NSA6IDEgOiAwCitSVS1VTkstMTM5NiA6IDEgOiAwCitSVS1VTkstMTM5NyA6IDEgOiAwCitSVS1VTkstMTM5OCA6IDEgOiAwCitSVS1VTkstMTM5OSA6IDEgOiAwCitSVS1VTkstMTQwMCA6IDEgOiAwCitSVS1VTkstMTQwMSA6IDEgOiAwCitSVS1VTkstMTQwMiA6IDEgOiAwCitSVS1VTkstMTQwMyA6IDEgOiAwCitSVS1VTkstMTQwNCA6IDEgOiAwCitSVS1VTkstMTQwNSA6IDEgOiAwCitSVS1VTkstMTQwNiA6IDEgOiAwCitSVS1VTkstMTQwNyA6IDEgOiAwCitSVS1VTkstMTQwOCA6IDEgOiAwCitSVS1VTkstMTQwOSA6IDEgOiAwCitSVS1VTkstMTQxMCA6IDEgOiAwCitSVS1VTkstMTQxMSA6IDEgOiAwCitSVS1VTkstMTQxMiA6IDEgOiAwCitSVS1VTkstMTQxMyA6IDEgOiAwCitSVS1VTkstMTQxNCA6IDEgOiAwCitSVS1VTkstMTQxNSA6IDEgOiAwCitSVS1VTkstMTQxNiA6IDEgOiAwCitSVS1VTkstMTQxNyA6IDEgOiAwCitSVS1VTkstMTQxOCA6IDEgOiAwCitSVS1VTkstMTQxOSA6IDEgOiAwCitSVS1VTkstMTQyMCA6IDEgOiAwCitSVS1VTkstMTQyMSA6IDEgOiAwCitSVS1VTkstMTQyMiA6IDEgOiAwCitSVS1VTkstMTQyMyA6IDEgOiAwCitSVS1VTkstMTQyNCA6IDEgOiAwCitSVS1VTkstMTQyNSA6IDEgOiAwCitSVS1VTkstMTQyNiA6IDEgOiAwCitSVS1VTkstMTQyNyA6IDEgOiAwCitSVS1VTkstMTQyOCA6IDEgOiAwCitSVS1VTkstMTQyOSA6IDEgOiAwCitSVS1VTkstMTQzMCA6IDEgOiAwCitSVS1VTkstMTQzMSA6IDEgOiAwCitSVS1VTkstMTQzMiA6IDEgOiAwCitSVS1VTkstMTQzMyA6IDEgOiAwCitSVS1VTkstMTQzNCA6IDEgOiAwCitSVS1VTkstMTQzNSA6IDEgOiAwCitSVS1VTkstMTQzNiA6IDEgOiAwCitSVS1VTkstMTQzNyA6IDEgOiAwCitSVS1VTkstMTQzOCA6IDEgOiAwCitSVS1VTkstMTQzOSA6IDEgOiAwCitSVS1VTkstMTQ0MCA6IDEgOiAwCitSVS1VTkstMTQ0MSA6IDEgOiAwCitSVS1VTkstMTQ0MiA6IDEgOiAwCitSVS1VTkstMTQ0MyA6IDEgOiAwCitSVS1VTkstMTQ0NCA6IDEgOiAwCitSVS1VTkstMTQ0NSA6IDEgOiAwCitSVS1VTkstMTQ0NiA6IDEgOiAwCitSVS1VTkstMTQ0NyA6IDEgOiAwCitSVS1VTkstMTQ0OCA6IDEgOiAwCitSVS1VTkstMTQ0OSA6IDEgOiAwCitSVS1VTkstMTQ1MCA6IDEgOiAwCitSVS1VTkstMTQ1MSA6IDEgOiAwCitSVS1VTkstMTQ1MiA6IDEgOiAwCitSVS1VTkstMTQ1MyA6IDEgOiAwCitSVS1VTkstMTQ1NCA6IDEgOiAwCitSVS1VTkstMTQ1NSA6IDEgOiAwCitSVS1VTkstMTQ1NiA6IDEgOiAwCitSVS1VTkstMTQ1NyA6IDEgOiAwCitSVS1VTkstMTQ1OCA6IDEgOiAwCitSVS1VTkstMTQ1OSA6IDEgOiAwCitSVS1VTkstMTQ2MCA6IDEgOiAwCitSVS1VTkstMTQ2MSA6IDEgOiAwCitSVS1VTkstMTQ2MiA6IDEgOiAwCitSVS1VTkstMTQ2MyA6IDEgOiAwCitSVS1VTkstMTQ2NCA6IDEgOiAwCitSVS1VTkstMTQ2NSA6IDEgOiAwCitSVS1VTkstMTQ2NiA6IDEgOiAwCitSVS1VTkstMTQ2NyA6IDEgOiAwCitSVS1VTkstMTQ2OCA6IDEgOiAwCitSVS1VTkstMTQ2OSA6IDEgOiAwCitSVS1VTkstMTQ3MCA6IDEgOiAwCitSVS1VTkstMTQ3MSA6IDEgOiAwCitSVS1VTkstMTQ3MiA6IDEgOiAwCitSVS1VTkstMTQ3MyA6IDEgOiAwCitSVS1VTkstMTQ3NCA6IDEgOiAwCitSVS1VTkstMTQ3NSA6IDEgOiAwCitSVS1VTkstMTQ3NiA6IDEgOiAwCitSVS1VTkstMTQ3NyA6IDEgOiAwCitSVS1VTkstMTQ3OCA6IDEgOiAwCitSVS1VTkstMTQ3OSA6IDEgOiAwCitSVS1VTkstMTQ4MCA6IDEgOiAwCitSVS1VTkstMTQ4MSA6IDEgOiAwCitSVS1VTkstMTQ4MiA6IDEgOiAwCitSVS1VTkstMTQ4MyA6IDEgOiAwCitSVS1VTkstMTQ4NCA6IDEgOiAwCitSVS1VTkstMTQ4NSA6IDEgOiAwCitSVS1VTkstMTQ4NiA6IDEgOiAwCitSVS1VTkstMTQ4NyA6IDEgOiAwCitSVS1VTkstMTQ4OCA6IDEgOiAwCitSVS1VTkstMTQ4OSA6IDEgOiAwCitSVS1VTkstMTQ5MCA6IDEgOiAwCitSVS1VTkstMTQ5MSA6IDEgOiAwCitSVS1VTkstMTQ5MiA6IDEgOiAwCitSVS1VTkstMTQ5MyA6IDEgOiAwCitSVS1VTkstMTQ5NCA6IDEgOiAwCitSVS1VTkstMTQ5NSA6IDEgOiAwCitSVS1VTkstMTQ5NiA6IDEgOiAwCitSVS1VTkstMTQ5NyA6IDEgOiAwCitSVS1VTkstMTQ5OCA6IDEgOiAwCitSVS1VTkstMTQ5OSA6IDEgOiAwCitSVS1VTkstMTUwMCA6IDEgOiAwCitSVS1VTkstMTUwMSA6IDEgOiAwCitSVS1VTkstMTUwMiA6IDEgOiAwCitSVS1VTkstMTUwMyA6IDEgOiAwCitSVS1VTkstMTUwNCA6IDEgOiAwCitSVS1VTkstMTUwNSA6IDEgOiAwCitSVS1VTkstMTUwNiA6IDEgOiAwCitSVS1VTkstMTUwNyA6IDEgOiAwCitSVS1VTkstMTUwOCA6IDEgOiAwCitSVS1VTkstMTUwOSA6IDEgOiAwCitSVS1VTkstMTUxMCA6IDEgOiAwCitSVS1VTkstMTUxMSA6IDEgOiAwCitSVS1VTkstMTUxMiA6IDEgOiAwCitSVS1VTkstMTUxMyA6IDEgOiAwCitSVS1VTkstMTUxNCA6IDEgOiAwCitSVS1VTkstMTUxNSA6IDEgOiAwCitSVS1VTkstMTUxNiA6IDEgOiAwCitSVS1VTkstMTUxNyA6IDEgOiAwCitSVS1VTkstMTUxOCA6IDEgOiAwCitSVS1VTkstMTUxOSA6IDEgOiAwCitSVS1VTkstMTUyMCA6IDEgOiAwCitSVS1VTkstMTUyMSA6IDEgOiAwCitSVS1VTkstMTUyMiA6IDEgOiAwCitSVS1VTkstMTUyMyA6IDEgOiAwCitSVS1VTkstMTUyNCA6IDEgOiAwCitSVS1VTkstMTUyNSA6IDEgOiAwCitSVS1VTkstMTUyNiA6IDEgOiAwCitSVS1VTkstMTUyNyA6IDEgOiAwCitSVS1VTkstMTUyOCA6IDEgOiAwCitSVS1VTkstMTUyOSA6IDEgOiAwCitSVS1VTkstMTUzMCA6IDEgOiAwCitSVS1VTkstMTUzMSA6IDEgOiAwCitSVS1VTkstMTUzMiA6IDEgOiAwCitSVS1VTkstMTUzMyA6IDEgOiAwCitSVS1VTkstMTUzNCA6IDEgOiAwCitSVS1VTkstMTUzNSA6IDEgOiAwCitSVS1VTkstMTUzNiA6IDEgOiAwCitSVS1VTkstMTUzNyA6IDEgOiAwCitSVS1VTkstMTUzOCA6IDEgOiAwCitSVS1VTkstMTUzOSA6IDEgOiAwCitSVS1VTkstMTU0MCA6IDEgOiAwCitSVS1VTkstMTU0MSA6IDEgOiAwCitSVS1VTkstMTU0MiA6IDEgOiAwCitSVS1VTkstMTU0MyA6IDEgOiAwCitSVS1VTkstMTU0NCA6IDEgOiAwCitSVS1VTkstMTU0NSA6IDEgOiAwCitSVS1VTkstMTU0NiA6IDEgOiAwCitSVS1VTkstMTU0NyA6IDEgOiAwCitSVS1VTkstMTU0OCA6IDEgOiAwCitSVS1VTkstMTU0OSA6IDEgOiAwCitSVS1VTkstMTU1MCA6IDEgOiAwCitSVS1VTkstMTU1MSA6IDEgOiAwCitSVS1VTkstMTU1MiA6IDEgOiAwCitSVS1VTkstMTU1MyA6IDEgOiAwCitSVS1VTkstMTU1NCA6IDEgOiAwCitSVS1VTkstMTU1NSA6IDEgOiAwCitSVS1VTkstMTU1NiA6IDEgOiAwCitSVS1VTkstMTU1NyA6IDEgOiAwCitSVS1VTkstMTU1OCA6IDEgOiAwCitSVS1VTkstMTU1OSA6IDEgOiAwCitSVS1VTkstMTU2MCA6IDEgOiAwCitSVS1VTkstMTU2MSA6IDEgOiAwCitSVS1VTkstMTU2MiA6IDEgOiAwCitSVS1VTkstMTU2MyA6IDEgOiAwCitSVS1VTkstMTU2NCA6IDEgOiAwCitSVS1VTkstMTU2NSA6IDEgOiAwCitSVS1VTkstMTU2NiA6IDEgOiAwCitSVS1VTkstMTU2NyA6IDEgOiAwCitSVS1VTkstMTU2OCA6IDEgOiAwCitSVS1VTkstMTU2OSA6IDEgOiAwCitSVS1VTkstMTU3MCA6IDEgOiAwCitSVS1VTkstMTU3MSA6IDEgOiAwCitSVS1VTkstMTU3MiA6IDEgOiAwCitSVS1VTkstMTU3MyA6IDEgOiAwCitSVS1VTkstMTU3NCA6IDEgOiAwCitSVS1VTkstMTU3NSA6IDEgOiAwCitSVS1VTkstMTU3NiA6IDEgOiAwCitSVS1VTkstMTU3NyA6IDEgOiAwCitSVS1VTkstMTU3OCA6IDEgOiAwCitSVS1VTkstMTU3OSA6IDEgOiAwCitSVS1VTkstMTU4MCA6IDEgOiAwCitSVS1VTkstMTU4MSA6IDEgOiAwCitSVS1VTkstMTU4MiA6IDEgOiAwCitSVS1VTkstMTU4MyA6IDEgOiAwCitSVS1VTkstMTU4NCA6IDEgOiAwCitSVS1VTkstMTU4NSA6IDEgOiAwCitSVS1VTkstMTU4NiA6IDEgOiAwCitSVS1VTkstMTU4NyA6IDEgOiAwCitSVS1VTkstMTU4OCA6IDEgOiAwCitSVS1VTkstMTU4OSA6IDEgOiAwCitSVS1VTkstMTU5MCA6IDEgOiAwCitSVS1VTkstMTU5MSA6IDEgOiAwCitSVS1VTkstMTU5MiA6IDEgOiAwCitSVS1VTkstMTU5MyA6IDEgOiAwCitSVS1VTkstMTU5NCA6IDEgOiAwCitSVS1VTkstMTU5NSA6IDEgOiAwCitSVS1VTkstMTU5NiA6IDEgOiAwCitSVS1VTkstMTU5NyA6IDEgOiAwCitSVS1VTkstMTU5OCA6IDEgOiAwCitSVS1VTkstMTU5OSA6IDEgOiAwCitSVS1VTkstMTYwMCA6IDEgOiAwCitSVS1VTkstMTYwMSA6IDEgOiAwCitSVS1VTkstMTYwMiA6IDEgOiAwCitSVS1VTkstMTYwMyA6IDEgOiAwCitSVS1VTkstMTYwNCA6IDEgOiAwCitSVS1VTkstMTYwNSA6IDEgOiAwCitSVS1VTkstMTYwNiA6IDEgOiAwCitSVS1VTkstMTYwNyA6IDEgOiAwCitSVS1VTkstMTYwOCA6IDEgOiAwCitSVS1VTkstMTYwOSA6IDEgOiAwCitSVS1VTkstMTYxMCA6IDEgOiAwCitSVS1VTkstMTYxMSA6IDEgOiAwCitSVS1VTkstMTYxMiA6IDEgOiAwCitSVS1VTkstMTYxMyA6IDEgOiAwCitSVS1VTkstMTYxNCA6IDEgOiAwCitSVS1VTkstMTYxNSA6IDEgOiAwCitSVS1VTkstMTYxNiA6IDEgOiAwCitSVS1VTkstMTYxNyA6IDEgOiAwCitSVS1VTkstMTYxOCA6IDEgOiAwCitSVS1VTkstMTYxOSA6IDEgOiAwCitSVS1VTkstMTYyMCA6IDEgOiAwCitSVS1VTkstMTYyMSA6IDEgOiAwCitSVS1VTkstMTYyMiA6IDEgOiAwCitSVS1VTkstMTYyMyA6IDEgOiAwCitSVS1VTkstMTYyNCA6IDEgOiAwCitSVS1VTkstMTYyNSA6IDEgOiAwCitSVS1VTkstMTYyNiA6IDEgOiAwCitSVS1VTkstMTYyNyA6IDEgOiAwCitSVS1VTkstMTYyOCA6IDEgOiAwCitSVS1VTkstMTYyOSA6IDEgOiAwCitSVS1VTkstMTYzMCA6IDEgOiAwCitSVS1VTkstMTYzMSA6IDEgOiAwCitSVS1VTkstMTYzMiA6IDEgOiAwCitSVS1VTkstMTYzMyA6IDEgOiAwCitSVS1VTkstMTYzNCA6IDEgOiAwCitSVS1VTkstMTYzNSA6IDEgOiAwCitSVS1VTkstMTYzNiA6IDEgOiAwCitSVS1VTkstMTYzNyA6IDEgOiAwCitSVS1VTkstMTYzOCA6IDEgOiAwCitSVS1VTkstMTYzOSA6IDEgOiAwCitSVS1VTkstMTY0MCA6IDEgOiAwCitSVS1VTkstMTY0MSA6IDEgOiAwCitSVS1VTkstMTY0MiA6IDEgOiAwCitSVS1VTkstMTY0MyA6IDEgOiAwCitSVS1VTkstMTY0NCA6IDEgOiAwCitSVS1VTkstMTY0NSA6IDEgOiAwCitSVS1VTkstMTY0NiA6IDEgOiAwCitSVS1VTkstMTY0NyA6IDEgOiAwCitSVS1VTkstMTY0OCA6IDEgOiAwCitSVS1VTkstMTY0OSA6IDEgOiAwCitSVS1VTkstMTY1MCA6IDEgOiAwCitSVS1VTkstMTY1MSA6IDEgOiAwCitSVS1VTkstMTY1MiA6IDEgOiAwCitSVS1VTkstMTY1MyA6IDEgOiAwCitSVS1VTkstMTY1NCA6IDEgOiAwCitSVS1VTkstMTY1NSA6IDEgOiAwCitSVS1VTkstMTY1NiA6IDEgOiAwCitSVS1VTkstMTY1NyA6IDEgOiAwCitSVS1VTkstMTY1OCA6IDEgOiAwCitSVS1VTkstMTY1OSA6IDEgOiAwCitSVS1VTkstMTY2MCA6IDEgOiAwCitSVS1VTkstMTY2MSA6IDEgOiAwCitSVS1VTkstMTY2MiA6IDEgOiAwCitSVS1VTkstMTY2MyA6IDEgOiAwCitSVS1VTkstMTY2NCA6IDEgOiAwCitSVS1VTkstMTY2NSA6IDEgOiAwCitSVS1VTkstMTY2NiA6IDEgOiAwCitSVS1VTkstMTY2NyA6IDEgOiAwCitSVS1VTkstMTY2OCA6IDEgOiAwCitSVS1VTkstMTY2OSA6IDEgOiAwCitSVS1VTkstMTY3MCA6IDEgOiAwCitSVS1VTkstMTY3MSA6IDEgOiAwCitSVS1VTkstMTY3MiA6IDEgOiAwCitSVS1VTkstMTY3MyA6IDEgOiAwCitSVS1VTkstMTY3NCA6IDEgOiAwCitSVS1VTkstMTY3NSA6IDEgOiAwCitSVS1VTkstMTY3NiA6IDEgOiAwCitSVS1VTkstMTY3NyA6IDEgOiAwCitSVS1VTkstMTY3OCA6IDEgOiAwCitSVS1VTkstMTY3OSA6IDEgOiAwCitSVS1VTkstMTY4MCA6IDEgOiAwCitSVS1VTkstMTY4MSA6IDEgOiAwCitSVS1VTkstMTY4MiA6IDEgOiAwCitSVS1VTkstMTY4MyA6IDEgOiAwCitSVS1VTkstMTY4NCA6IDEgOiAwCitSVS1VTkstMTY4NSA6IDEgOiAwCitSVS1VTkstMTY4NiA6IDEgOiAwCitSVS1VTkstMTY4NyA6IDEgOiAwCitSVS1VTkstMTY4OCA6IDEgOiAwCitSVS1VTkstMTY4OSA6IDEgOiAwCitSVS1VTkstMTY5MCA6IDEgOiAwCitSVS1VTkstMTY5MSA6IDEgOiAwCitSVS1VTkstMTY5MiA6IDEgOiAwCitSVS1VTkstMTY5MyA6IDEgOiAwCitSVS1VTkstMTY5NCA6IDEgOiAwCitSVS1VTkstMTY5NSA6IDEgOiAwCitSVS1VTkstMTY5NiA6IDEgOiAwCitSVS1VTkstMTY5NyA6IDEgOiAwCitSVS1VTkstMTY5OCA6IDEgOiAwCitSVS1VTkstMTY5OSA6IDEgOiAwCitSVS1VTkstMTcwMCA6IDEgOiAwCitSVS1VTkstMTcwMSA6IDEgOiAwCitSVS1VTkstMTcwMiA6IDEgOiAwCitSVS1VTkstMTcwMyA6IDEgOiAwCitSVS1VTkstMTcwNCA6IDEgOiAwCitSVS1VTkstMTcwNSA6IDEgOiAwCitSVS1VTkstMTcwNiA6IDEgOiAwCitSVS1VTkstMTcwNyA6IDEgOiAwCitSVS1VTkstMTcwOCA6IDEgOiAwCitSVS1VTkstMTcwOSA6IDEgOiAwCitSVS1VTkstMTcxMCA6IDEgOiAwCitSVS1VTkstMTcxMSA6IDEgOiAwCitSVS1VTkstMTcxMiA6IDEgOiAwCitSVS1VTkstMTcxMyA6IDEgOiAwCitSVS1VTkstMTcxNCA6IDEgOiAwCitSVS1VTkstMTcxNSA6IDEgOiAwCitSVS1VTkstMTcxNiA6IDEgOiAwCitSVS1VTkstMTcxNyA6IDEgOiAwCitSVS1VTkstMTcxOCA6IDEgOiAwCitSVS1VTkstMTcxOSA6IDEgOiAwCitSVS1VTkstMTcyMCA6IDEgOiAwCitSVS1VTkstMTcyMSA6IDEgOiAwCitSVS1VTkstMTcyMiA6IDEgOiAwCitSVS1VTkstMTcyMyA6IDEgOiAwCitSVS1VTkstMTcyNCA6IDEgOiAwCitSVS1VTkstMTcyNSA6IDEgOiAwCitSVS1VTkstMTcyNiA6IDEgOiAwCitSVS1VTkstMTcyNyA6IDEgOiAwCitSVS1VTkstMTcyOCA6IDEgOiAwCitSVS1VTkstMTcyOSA6IDEgOiAwCitSVS1VTkstMTczMCA6IDEgOiAwCitSVS1VTkstMTczMSA6IDEgOiAwCitSVS1VTkstMTczMiA6IDEgOiAwCitSVS1VTkstMTczMyA6IDEgOiAwCitSVS1VTkstMTczNCA6IDEgOiAwCitSVS1VTkstMTczNSA6IDEgOiAwCitSVS1VTkstMTczNiA6IDEgOiAwCitSVS1VTkstMTczNyA6IDEgOiAwCitSVS1VTkstMTczOCA6IDEgOiAwCitSVS1VTkstMTczOSA6IDEgOiAwCitSVS1VTkstMTc0MCA6IDEgOiAwCitSVS1VTkstMTc0MSA6IDEgOiAwCitSVS1VTkstMTc0MiA6IDEgOiAwCitSVS1VTkstMTc0MyA6IDEgOiAwCitSVS1VTkstMTc0NCA6IDEgOiAwCitSVS1VTkstMTc0NSA6IDEgOiAwCitSVS1VTkstMTc0NiA6IDEgOiAwCitSVS1VTkstMTc0NyA6IDEgOiAwCitSVS1VTkstMTc0OCA6IDEgOiAwCitSVS1VTkstMTc0OSA6IDEgOiAwCitSVS1VTkstMTc1MCA6IDEgOiAwCitSVS1VTkstMTc1MSA6IDEgOiAwCitSVS1VTkstMTc1MiA6IDEgOiAwCitSVS1VTkstMTc1MyA6IDEgOiAwCitSVS1VTkstMTc1NCA6IDEgOiAwCitSVS1VTkstMTc1NSA6IDEgOiAwCitSVS1VTkstMTc1NiA6IDEgOiAwCitSVS1VTkstMTc1NyA6IDEgOiAwCitSVS1VTkstMTc1OCA6IDEgOiAwCitSVS1VTkstMTc1OSA6IDEgOiAwCitSVS1VTkstMTc2MCA6IDEgOiAwCitSVS1VTkstMTc2MSA6IDEgOiAwCitSVS1VTkstMTc2MiA6IDEgOiAwCitSVS1VTkstMTc2MyA6IDEgOiAwCitSVS1VTkstMTc2NCA6IDEgOiAwCitSVS1VTkstMTc2NSA6IDEgOiAwCitSVS1VTkstMTc2NiA6IDEgOiAwCitSVS1VTkstMTc2NyA6IDEgOiAwCitSVS1VTkstMTc2OCA6IDEgOiAwCitSVS1VTkstMTc2OSA6IDEgOiAwCitSVS1VTkstMTc3MCA6IDEgOiAwCitSVS1VTkstMTc3MSA6IDEgOiAwCitSVS1VTkstMTc3MiA6IDEgOiAwCitSVS1VTkstMTc3MyA6IDEgOiAwCitSVS1VTkstMTc3NCA6IDEgOiAwCitSVS1VTkstMTc3NSA6IDEgOiAwCitSVS1VTkstMTc3NiA6IDEgOiAwCitSVS1VTkstMTc3NyA6IDEgOiAwCitSVS1VTkstMTc3OCA6IDEgOiAwCitSVS1VTkstMTc3OSA6IDEgOiAwCitSVS1VTkstMTc4MCA6IDEgOiAwCitSVS1VTkstMTc4MSA6IDEgOiAwCitSVS1VTkstMTc4MiA6IDEgOiAwCitSVS1VTkstMTc4MyA6IDEgOiAwCitSVS1VTkstMTc4NCA6IDEgOiAwCitSVS1VTkstMTc4NSA6IDEgOiAwCitSVS1VTkstMTc4NiA6IDEgOiAwCitSVS1VTkstMTc4NyA6IDEgOiAwCitSVS1VTkstMTc4OCA6IDEgOiAwCitSVS1VTkstMTc4OSA6IDEgOiAwCitSVS1VTkstMTc5MCA6IDEgOiAwCitSVS1VTkstMTc5MSA6IDEgOiAwCitSVS1VTkstMTc5MiA6IDEgOiAwCitSVS1VTkstMTc5MyA6IDEgOiAwCitSVS1VTkstMTc5NCA6IDEgOiAwCitSVS1VTkstMTc5NSA6IDEgOiAwCitSVS1VTkstMTc5NiA6IDEgOiAwCitSVS1VTkstMTc5NyA6IDEgOiAwCitSVS1VTkstMTc5OCA6IDEgOiAwCitSVS1VTkstMTc5OSA6IDEgOiAwCitSVS1VTkstMTgwMCA6IDEgOiAwCitSVS1VTkstMTgwMSA6IDEgOiAwCitSVS1VTkstMTgwMiA6IDEgOiAwCitSVS1VTkstMTgwMyA6IDEgOiAwCitSVS1VTkstMTgwNCA6IDEgOiAwCitSVS1VTkstMTgwNSA6IDEgOiAwCitSVS1VTkstMTgwNiA6IDEgOiAwCitSVS1VTkstMTgwNyA6IDEgOiAwCitSVS1VTkstMTgwOCA6IDEgOiAwCitSVS1VTkstMTgwOSA6IDEgOiAwCitSVS1VTkstMTgxMCA6IDEgOiAwCitSVS1VTkstMTgxMSA6IDEgOiAwCitSVS1VTkstMTgxMiA6IDEgOiAwCitSVS1VTkstMTgxMyA6IDEgOiAwCitSVS1VTkstMTgxNCA6IDEgOiAwCitSVS1VTkstMTgxNSA6IDEgOiAwCitSVS1VTkstMTgxNiA6IDEgOiAwCitSVS1VTkstMTgxNyA6IDEgOiAwCitSVS1VTkstMTgxOCA6IDEgOiAwCitSVS1VTkstMTgxOSA6IDEgOiAwCitSVS1VTkstMTgyMCA6IDEgOiAwCitSVS1VTkstMTgyMSA6IDEgOiAwCitSVS1VTkstMTgyMiA6IDEgOiAwCitSVS1VTkstMTgyMyA6IDEgOiAwCitSVS1VTkstMTgyNCA6IDEgOiAwCitSVS1VTkstMTgyNSA6IDEgOiAwCitSVS1VTkstMTgyNiA6IDEgOiAwCitSVS1VTkstMTgyNyA6IDEgOiAwCitSVS1VTkstMTgyOCA6IDEgOiAwCitSVS1VTkstMTgyOSA6IDEgOiAwCitSVS1VTkstMTgzMCA6IDEgOiAwCitSVS1VTkstMTgzMSA6IDEgOiAwCitSVS1VTkstMTgzMiA6IDEgOiAwCitSVS1VTkstMTgzMyA6IDEgOiAwCitSVS1VTkstMTgzNCA6IDEgOiAwCitSVS1VTkstMTgzNSA6IDEgOiAwCitSVS1VTkstMTgzNiA6IDEgOiAwCitSVS1VTkstMTgzNyA6IDEgOiAwCitSVS1VTkstMTgzOCA6IDEgOiAwCitSVS1VTkstMTgzOSA6IDEgOiAwCitSVS1VTkstMTg0MCA6IDEgOiAwCitSVS1VTkstMTg0MSA6IDEgOiAwCitSVS1VTkstMTg0MiA6IDEgOiAwCitSVS1VTkstMTg0MyA6IDEgOiAwCitSVS1VTkstMTg0NCA6IDEgOiAwCitSVS1VTkstMTg0NSA6IDEgOiAwCitSVS1VTkstMTg0NiA6IDEgOiAwCitSVS1VTkstMTg0NyA6IDEgOiAwCitSVS1VTkstMTg0OCA6IDEgOiAwCitSVS1VTkstMTg0OSA6IDEgOiAwCitSVS1VTkstMTg1MCA6IDEgOiAwCitSVS1VTkstMTg1MSA6IDEgOiAwCitSVS1VTkstMTg1MiA6IDEgOiAwCitSVS1VTkstMTg1MyA6IDEgOiAwCitSVS1VTkstMTg1NCA6IDEgOiAwCitSVS1VTkstMTg1NSA6IDEgOiAwCitSVS1VTkstMTg1NiA6IDEgOiAwCitSVS1VTkstMTg1NyA6IDEgOiAwCitSVS1VTkstMTg1OCA6IDEgOiAwCitSVS1VTkstMTg1OSA6IDEgOiAwCitSVS1VTkstMTg2MCA6IDEgOiAwCitSVS1VTkstMTg2MSA6IDEgOiAwCitSVS1VTkstMTg2MiA6IDEgOiAwCitSVS1VTkstMTg2MyA6IDEgOiAwCitSVS1VTkstMTg2NCA6IDEgOiAwCitSVS1VTkstMTg2NSA6IDEgOiAwCitSVS1VTkstMTg2NiA6IDEgOiAwCitSVS1VTkstMTg2NyA6IDEgOiAwCitSVS1VTkstMTg2OCA6IDEgOiAwCitSVS1VTkstMTg2OSA6IDEgOiAwCitSVS1VTkstMTg3MCA6IDEgOiAwCitSVS1VTkstMTg3MSA6IDEgOiAwCitSVS1VTkstMTg3MiA6IDEgOiAwCitSVS1VTkstMTg3MyA6IDEgOiAwCitSVS1VTkstMTg3NCA6IDEgOiAwCitSVS1VTkstMTg3NSA6IDEgOiAwCitSVS1VTkstMTg3NiA6IDEgOiAwCitSVS1VTkstMTg3NyA6IDEgOiAwCitSVS1VTkstMTg3OCA6IDEgOiAwCitSVS1VTkstMTg3OSA6IDEgOiAwCitSVS1VTkstMTg4MCA6IDEgOiAwCitSVS1VTkstMTg4MSA6IDEgOiAwCitSVS1VTkstMTg4MiA6IDEgOiAwCitSVS1VTkstMTg4MyA6IDEgOiAwCitSVS1VTkstMTg4NCA6IDEgOiAwCitSVS1VTkstMTg4NSA6IDEgOiAwCitSVS1VTkstMTg4NiA6IDEgOiAwCitSVS1VTkstMTg4NyA6IDEgOiAwCitSVS1VTkstMTg4OCA6IDEgOiAwCitSVS1VTkstMTg4OSA6IDEgOiAwCitSVS1VTkstMTg5MCA6IDEgOiAwCitSVS1VTkstMTg5MSA6IDEgOiAwCitSVS1VTkstMTg5MiA6IDEgOiAwCitSVS1VTkstMTg5MyA6IDEgOiAwCitSVS1VTkstMTg5NCA6IDEgOiAwCitSVS1VTkstMTg5NSA6IDEgOiAwCitSVS1VTkstMTg5NiA6IDEgOiAwCitSVS1VTkstMTg5NyA6IDEgOiAwCitSVS1VTkstMTg5OCA6IDEgOiAwCitSVS1VTkstMTg5OSA6IDEgOiAwCitSVS1VTkstMTkwMCA6IDEgOiAwCitSVS1VTkstMTkwMSA6IDEgOiAwCitSVS1VTkstMTkwMiA6IDEgOiAwCitSVS1VTkstMTkwMyA6IDEgOiAwCitSVS1VTkstMTkwNCA6IDEgOiAwCitSVS1VTkstMTkwNSA6IDEgOiAwCitSVS1VTkstMTkwNiA6IDEgOiAwCitSVS1VTkstMTkwNyA6IDEgOiAwCitSVS1VTkstMTkwOCA6IDEgOiAwCitSVS1VTkstMTkwOSA6IDEgOiAwCitSVS1VTkstMTkxMCA6IDEgOiAwCitSVS1VTkstMTkxMSA6IDEgOiAwCitSVS1VTkstMTkxMiA6IDEgOiAwCitSVS1VTkstMTkxMyA6IDEgOiAwCitSVS1VTkstMTkxNCA6IDEgOiAwCitSVS1VTkstMTkxNSA6IDEgOiAwCitSVS1VTkstMTkxNiA6IDEgOiAwCitSVS1VTkstMTkxNyA6IDEgOiAwCitSVS1VTkstMTkxOCA6IDEgOiAwCitSVS1VTkstMTkxOSA6IDEgOiAwCitSVS1VTkstMTkyMCA6IDEgOiAwCitSVS1VTkstMTkyMSA6IDEgOiAwCitSVS1VTkstMTkyMiA6IDEgOiAwCitSVS1VTkstMTkyMyA6IDEgOiAwCitSVS1VTkstMTkyNCA6IDEgOiAwCitSVS1VTkstMTkyNSA6IDEgOiAwCitSVS1VTkstMTkyNiA6IDEgOiAwCitSVS1VTkstMTkyNyA6IDEgOiAwCitSVS1VTkstMTkyOCA6IDEgOiAwCitSVS1VTkstMTkyOSA6IDEgOiAwCitSVS1VTkstMTkzMCA6IDEgOiAwCitSVS1VTkstMTkzMSA6IDEgOiAwCitSVS1VTkstMTkzMiA6IDEgOiAwCitSVS1VTkstMTkzMyA6IDEgOiAwCitSVS1VTkstMTkzNCA6IDEgOiAwCitSVS1VTkstMTkzNSA6IDEgOiAwCitSVS1VTkstMTkzNiA6IDEgOiAwCitSVS1VTkstMTkzNyA6IDEgOiAwCitSVS1VTkstMTkzOCA6IDEgOiAwCitSVS1VTkstMTkzOSA6IDEgOiAwCitSVS1VTkstMTk0MCA6IDEgOiAwCitSVS1VTkstMTk0MSA6IDEgOiAwCitSVS1VTkstMTk0MiA6IDEgOiAwCitSVS1VTkstMTk0MyA6IDEgOiAwCitSVS1VTkstMTk0NCA6IDEgOiAwCitSVS1VTkstMTk0NSA6IDEgOiAwCitSVS1VTkstMTk0NiA6IDEgOiAwCitSVS1VTkstMTk0NyA6IDEgOiAwCitSVS1VTkstMTk0OCA6IDEgOiAwCitSVS1VTkstMTk0OSA6IDEgOiAwCitSVS1VTkstMTk1MCA6IDEgOiAwCitSVS1VTkstMTk1MSA6IDEgOiAwCitSVS1VTkstMTk1MiA6IDEgOiAwCitSVS1VTkstMTk1MyA6IDEgOiAwCitSVS1VTkstMTk1NCA6IDEgOiAwCitSVS1VTkstMTk1NSA6IDEgOiAwCitSVS1VTkstMTk1NiA6IDEgOiAwCitSVS1VTkstMTk1NyA6IDEgOiAwCitSVS1VTkstMTk1OCA6IDEgOiAwCitSVS1VTkstMTk1OSA6IDEgOiAwCitSVS1VTkstMTk2MCA6IDEgOiAwCitSVS1VTkstMTk2MSA6IDEgOiAwCitSVS1VTkstMTk2MiA6IDEgOiAwCitSVS1VTkstMTk2MyA6IDEgOiAwCitSVS1VTkstMTk2NCA6IDEgOiAwCitSVS1VTkstMTk2NSA6IDEgOiAwCitSVS1VTkstMTk2NiA6IDEgOiAwCitSVS1VTkstMTk2NyA6IDEgOiAwCitSVS1VTkstMTk2OCA6IDEgOiAwCitSVS1VTkstMTk2OSA6IDEgOiAwCitSVS1VTkstMTk3MCA6IDEgOiAwCitSVS1VTkstMTk3MSA6IDEgOiAwCitSVS1VTkstMTk3MiA6IDEgOiAwCitSVS1VTkstMTk3MyA6IDEgOiAwCitSVS1VTkstMTk3NCA6IDEgOiAwCitSVS1VTkstMTk3NSA6IDEgOiAwCitSVS1VTkstMTk3NiA6IDEgOiAwCitSVS1VTkstMTk3NyA6IDEgOiAwCitSVS1VTkstMTk3OCA6IDEgOiAwCitSVS1VTkstMTk3OSA6IDEgOiAwCitSVS1VTkstMTk4MCA6IDEgOiAwCitSVS1VTkstMTk4MSA6IDEgOiAwCitSVS1VTkstMTk4MiA6IDEgOiAwCitSVS1VTkstMTk4MyA6IDEgOiAwCitSVS1VTkstMTk4NCA6IDEgOiAwCitSVS1VTkstMTk4NSA6IDEgOiAwCitSVS1VTkstMTk4NiA6IDEgOiAwCitSVS1VTkstMTk4NyA6IDEgOiAwCitSVS1VTkstMTk4OCA6IDEgOiAwCitSVS1VTkstMTk4OSA6IDEgOiAwCitSVS1VTkstMTk5MCA6IDEgOiAwCitSVS1VTkstMTk5MSA6IDEgOiAwCitSVS1VTkstMTk5MiA6IDEgOiAwCitSVS1VTkstMTk5MyA6IDEgOiAwCitSVS1VTkstMTk5NCA6IDEgOiAwCitSVS1VTkstMTk5NSA6IDEgOiAwCitSVS1VTkstMTk5NiA6IDEgOiAwCitSVS1VTkstMTk5NyA6IDEgOiAwCitSVS1VTkstMTk5OCA6IDEgOiAwCitSVS1VTkstMTk5OSA6IDEgOiAwCitSVS1VTkstMjAwMCA6IDEgOiAwCitSVS1VTkstMjAwMSA6IDEgOiAwCitSVS1VTkstMjAwMiA6IDEgOiAwCitSVS1VTkstMjAwMyA6IDEgOiAwCitSVS1VTkstMjAwNCA6IDEgOiAwCitSVS1VTkstMjAwNSA6IDEgOiAwCitSVS1VTkstMjAwNiA6IDEgOiAwCitSVS1VTkstMjAwNyA6IDEgOiAwCitSVS1VTkstMjAwOCA6IDEgOiAwCitSVS1VTkstMjAwOSA6IDEgOiAwCitSVS1VTkstMjAxMCA6IDEgOiAwCitSVS1VTkstMjAxMSA6IDEgOiAwCitSVS1VTkstMjAxMiA6IDEgOiAwCitSVS1VTkstMjAxMyA6IDEgOiAwCitSVS1VTkstMjAxNCA6IDEgOiAwCitSVS1VTkstMjAxNSA6IDEgOiAwCitSVS1VTkstMjAxNiA6IDEgOiAwCitSVS1VTkstMjAxNyA6IDEgOiAwCitSVS1VTkstMjAxOCA6IDEgOiAwCitSVS1VTkstMjAxOSA6IDEgOiAwCitSVS1VTkstMjAyMCA6IDEgOiAwCitSVS1VTkstMjAyMSA6IDEgOiAwCitSVS1VTkstMjAyMiA6IDEgOiAwCitSVS1VTkstMjAyMyA6IDEgOiAwCitSVS1VTkstMjAyNCA6IDEgOiAwCitSVS1VTkstMjAyNSA6IDEgOiAwCitSVS1VTkstMjAyNiA6IDEgOiAwCitSVS1VTkstMjAyNyA6IDEgOiAwCitSVS1VTkstMjAyOCA6IDEgOiAwCitSVS1VTkstMjAyOSA6IDEgOiAwCitSVS1VTkstMjAzMCA6IDEgOiAwCitSVS1VTkstMjAzMSA6IDEgOiAwCitSVS1VTkstMjAzMiA6IDEgOiAwCitSVS1VTkstMjAzMyA6IDEgOiAwCitSVS1VTkstMjAzNCA6IDEgOiAwCitSVS1VTkstMjAzNSA6IDEgOiAwCitSVS1VTkstMjAzNiA6IDEgOiAwCitSVS1VTkstMjAzNyA6IDEgOiAwCitSVS1VTkstMjAzOCA6IDEgOiAwCitSVS1VTkstMjAzOSA6IDEgOiAwCitSVS1VTkstMjA0MCA6IDEgOiAwCitSVS1VTkstMjA0MSA6IDEgOiAwCitSVS1VTkstMjA0MiA6IDEgOiAwCitSVS1VTkstMjA0MyA6IDEgOiAwCitSVS1VTkstMjA0NCA6IDEgOiAwCitSVS1VTkstMjA0NSA6IDEgOiAwCitSVS1VTkstMjA0NiA6IDEgOiAwCitSVS1VTkstMjA0NyA6IDEgOiAwCitSVS1VTkstMjA0OCA6IDEgOiAwCitSVS1VTkstMjA0OSA6IDEgOiAwCitSVS1VTkstMjA1MCA6IDEgOiAwCitSVS1VTkstMjA1MSA6IDEgOiAwCitSVS1VTkstMjA1MiA6IDEgOiAwCitSVS1VTkstMjA1MyA6IDEgOiAwCitSVS1VTkstMjA1NCA6IDEgOiAwCitSVS1VTkstMjA1NSA6IDEgOiAwCitSVS1VTkstMjA1NiA6IDEgOiAwCitSVS1VTkstMjA1NyA6IDEgOiAwCitSVS1VTkstMjA1OCA6IDEgOiAwCitSVS1VTkstMjA1OSA6IDEgOiAwCitSVS1VTkstMjA2MCA6IDEgOiAwCitSVS1VTkstMjA2MSA6IDEgOiAwCitSVS1VTkstMjA2MiA6IDEgOiAwCitSVS1VTkstMjA2MyA6IDEgOiAwCitSVS1VTkstMjA2NCA6IDEgOiAwCitSVS1VTkstMjA2NSA6IDEgOiAwCitSVS1VTkstMjA2NiA6IDEgOiAwCitSVS1VTkstMjA2NyA6IDEgOiAwCitSVS1VTkstMjA2OCA6IDEgOiAwCitSVS1VTkstMjA2OSA6IDEgOiAwCitSVS1VTkstMjA3MCA6IDEgOiAwCitSVS1VTkstMjA3MSA6IDEgOiAwCitSVS1VTkstMjA3MiA6IDEgOiAwCitSVS1VTkstMjA3MyA6IDEgOiAwCitSVS1VTkstMjA3NCA6IDEgOiAwCitSVS1VTkstMjA3NSA6IDEgOiAwCitSVS1VTkstMjA3NiA6IDEgOiAwCitSVS1VTkstMjA3NyA6IDEgOiAwCitSVS1VTkstMjA3OCA6IDEgOiAwCitSVS1VTkstMjA3OSA6IDEgOiAwCitSVS1VTkstMjA4MCA6IDEgOiAwCitSVS1VTkstMjA4MSA6IDEgOiAwCitSVS1VTkstMjA4MiA6IDEgOiAwCitSVS1VTkstMjA4MyA6IDEgOiAwCitSVS1VTkstMjA4NCA6IDEgOiAwCitSVS1VTkstMjA4NSA6IDEgOiAwCitSVS1VTkstMjA4NiA6IDEgOiAwCitSVS1VTkstMjA4NyA6IDEgOiAwCitSVS1VTkstMjA4OCA6IDEgOiAwCitSVS1VTkstMjA4OSA6IDEgOiAwCitSVS1VTkstMjA5MCA6IDEgOiAwCitSVS1VTkstMjA5MSA6IDEgOiAwCitSVS1VTkstMjA5MiA6IDEgOiAwCitSVS1VTkstMjA5MyA6IDEgOiAwCitSVS1VTkstMjA5NCA6IDEgOiAwCitSVS1VTkstMjA5NSA6IDEgOiAwCitSVS1VTkstMjA5NiA6IDEgOiAwCitSVS1VTkstMjA5NyA6IDEgOiAwCitSVS1VTkstMjA5OCA6IDEgOiAwCitSVS1VTkstMjA5OSA6IDEgOiAwCitSVS1VTkstMjEwMCA6IDEgOiAwCitSVS1VTkstMjEwMSA6IDEgOiAwCitSVS1VTkstMjEwMiA6IDEgOiAwCitSVS1VTkstMjEwMyA6IDEgOiAwCitSVS1VTkstMjEwNCA6IDEgOiAwCitSVS1VTkstMjEwNSA6IDEgOiAwCitSVS1VTkstMjEwNiA6IDEgOiAwCitSVS1VTkstMjEwNyA6IDEgOiAwCitSVS1VTkstMjEwOCA6IDEgOiAwCitSVS1VTkstMjEwOSA6IDEgOiAwCitSVS1VTkstMjExMCA6IDEgOiAwCitSVS1VTkstMjExMSA6IDEgOiAwCitSVS1VTkstMjExMiA6IDEgOiAwCitSVS1VTkstMjExMyA6IDEgOiAwCitSVS1VTkstMjExNCA6IDEgOiAwCitSVS1VTkstMjExNSA6IDEgOiAwCitSVS1VTkstMjExNiA6IDEgOiAwCitSVS1VTkstMjExNyA6IDEgOiAwCitSVS1VTkstMjExOCA6IDEgOiAwCitSVS1VTkstMjExOSA6IDEgOiAwCitSVS1VTkstMjEyMCA6IDEgOiAwCitSVS1VTkstMjEyMSA6IDEgOiAwCitSVS1VTkstMjEyMiA6IDEgOiAwCitSVS1VTkstMjEyMyA6IDEgOiAwCitSVS1VTkstMjEyNCA6IDEgOiAwCitSVS1VTkstMjEyNSA6IDEgOiAwCitSVS1VTkstMjEyNiA6IDEgOiAwCitSVS1VTkstMjEyNyA6IDEgOiAwCitSVS1VTkstMjEyOCA6IDEgOiAwCitSVS1VTkstMjEyOSA6IDEgOiAwCitSVS1VTkstMjEzMCA6IDEgOiAwCitSVS1VTkstMjEzMSA6IDEgOiAwCitSVS1VTkstMjEzMiA6IDEgOiAwCitSVS1VTkstMjEzMyA6IDEgOiAwCitSVS1VTkstMjEzNCA6IDEgOiAwCitSVS1VTkstMjEzNSA6IDEgOiAwCitSVS1VTkstMjEzNiA6IDEgOiAwCitSVS1VTkstMjEzNyA6IDEgOiAwCitSVS1VTkstMjEzOCA6IDEgOiAwCitSVS1VTkstMjEzOSA6IDEgOiAwCitSVS1VTkstMjE0MCA6IDEgOiAwCitSVS1VTkstMjE0MSA6IDEgOiAwCitSVS1VTkstMjE0MiA6IDEgOiAwCitSVS1VTkstMjE0MyA6IDEgOiAwCitSVS1VTkstMjE0NCA6IDEgOiAwCitSVS1VTkstMjE0NSA6IDEgOiAwCitSVS1VTkstMjE0NiA6IDEgOiAwCitSVS1VTkstMjE0NyA6IDEgOiAwCitSVS1VTkstMjE0OCA6IDEgOiAwCitSVS1VTkstMjE0OSA6IDEgOiAwCitSVS1VTkstMjE1MCA6IDEgOiAwCitSVS1VTkstMjE1MSA6IDEgOiAwCitSVS1VTkstMjE1MiA6IDEgOiAwCitSVS1VTkstMjE1MyA6IDEgOiAwCitSVS1VTkstMjE1NCA6IDEgOiAwCitSVS1VTkstMjE1NSA6IDEgOiAwCitSVS1VTkstMjE1NiA6IDEgOiAwCitSVS1VTkstMjE1NyA6IDEgOiAwCitSVS1VTkstMjE1OCA6IDEgOiAwCitSVS1VTkstMjE1OSA6IDEgOiAwCitSVS1VTkstMjE2MCA6IDEgOiAwCitSVS1VTkstMjE2MSA6IDEgOiAwCitSVS1VTkstMjE2MiA6IDEgOiAwCitSVS1VTkstMjE2MyA6IDEgOiAwCitSVS1VTkstMjE2NCA6IDEgOiAwCitSVS1VTkstMjE2NSA6IDEgOiAwCitSVS1VTkstMjE2NiA6IDEgOiAwCitSVS1VTkstMjE2NyA6IDEgOiAwCitSVS1VTkstMjE2OCA6IDEgOiAwCitSVS1VTkstMjE2OSA6IDEgOiAwCitSVS1VTkstMjE3MCA6IDEgOiAwCitSVS1VTkstMjE3MSA6IDEgOiAwCitSVS1VTkstMjE3MiA6IDEgOiAwCitSVS1VTkstMjE3MyA6IDEgOiAwCitSVS1VTkstMjE3NCA6IDEgOiAwCitSVS1VTkstMjE3NSA6IDEgOiAwCitSVS1VTkstMjE3NiA6IDEgOiAwCitSVS1VTkstMjE3NyA6IDEgOiAwCitSVS1VTkstMjE3OCA6IDEgOiAwCitSVS1VTkstMjE3OSA6IDEgOiAwCitSVS1VTkstMjE4MCA6IDEgOiAwCitSVS1VTkstMjE4MSA6IDEgOiAwCitSVS1VTkstMjE4MiA6IDEgOiAwCitSVS1VTkstMjE4MyA6IDEgOiAwCitSVS1VTkstMjE4NCA6IDEgOiAwCitSVS1VTkstMjE4NSA6IDEgOiAwCitSVS1VTkstMjE4NiA6IDEgOiAwCitSVS1VTkstMjE4NyA6IDEgOiAwCitSVS1VTkstMjE4OCA6IDEgOiAwCitSVS1VTkstMjE4OSA6IDEgOiAwCitSVS1VTkstMjE5MCA6IDEgOiAwCitSVS1VTkstMjE5MSA6IDEgOiAwCitSVS1VTkstMjE5MiA6IDEgOiAwCitSVS1VTkstMjE5MyA6IDEgOiAwCitSVS1VTkstMjE5NCA6IDEgOiAwCitSVS1VTkstMjE5NSA6IDEgOiAwCitSVS1VTkstMjE5NiA6IDEgOiAwCitSVS1VTkstMjE5NyA6IDEgOiAwCitSVS1VTkstMjE5OCA6IDEgOiAwCitSVS1VTkstMjE5OSA6IDEgOiAwCitSVS1VTkstMjIwMCA6IDEgOiAwCitSVS1VTkstMjIwMSA6IDEgOiAwCitSVS1VTkstMjIwMiA6IDEgOiAwCitSVS1VTkstMjIwMyA6IDEgOiAwCitSVS1VTkstMjIwNCA6IDEgOiAwCitSVS1VTkstMjIwNSA6IDEgOiAwCitSVS1VTkstMjIwNiA6IDEgOiAwCitSVS1VTkstMjIwNyA6IDEgOiAwCitSVS1VTkstMjIwOCA6IDEgOiAwCitSVS1VTkstMjIwOSA6IDEgOiAwCitSVS1VTkstMjIxMCA6IDEgOiAwCitSVS1VTkstMjIxMSA6IDEgOiAwCitSVS1VTkstMjIxMiA6IDEgOiAwCitSVS1VTkstMjIxMyA6IDEgOiAwCitSVS1VTkstMjIxNCA6IDEgOiAwCitSVS1VTkstMjIxNSA6IDEgOiAwCitSVS1VTkstMjIxNiA6IDEgOiAwCitSVS1VTkstMjIxNyA6IDEgOiAwCitSVS1VTkstMjIxOCA6IDEgOiAwCitSVS1VTkstMjIxOSA6IDEgOiAwCitSVS1VTkstMjIyMCA6IDEgOiAwCitSVS1VTkstMjIyMSA6IDEgOiAwCitSVS1VTkstMjIyMiA6IDEgOiAwCitSVS1VTkstMjIyMyA6IDEgOiAwCitSVS1VTkstMjIyNCA6IDEgOiAwCitSVS1VTkstMjIyNSA6IDEgOiAwCitSVS1VTkstMjIyNiA6IDEgOiAwCitSVS1VTkstMjIyNyA6IDEgOiAwCitSVS1VTkstMjIyOCA6IDEgOiAwCitSVS1VTkstMjIyOSA6IDEgOiAwCitSVS1VTkstMjIzMCA6IDEgOiAwCitSVS1VTkstMjIzMSA6IDEgOiAwCitSVS1VTkstMjIzMiA6IDEgOiAwCitSVS1VTkstMjIzMyA6IDEgOiAwCitSVS1VTkstMjIzNCA6IDEgOiAwCitSVS1VTkstMjIzNSA6IDEgOiAwCitSVS1VTkstMjIzNiA6IDEgOiAwCitSVS1VTkstMjIzNyA6IDEgOiAwCitSVS1VTkstMjIzOCA6IDEgOiAwCitSVS1VTkstMjIzOSA6IDEgOiAwCitSVS1VTkstMjI0MCA6IDEgOiAwCitSVS1VTkstMjI0MSA6IDEgOiAwCitSVS1VTkstMjI0MiA6IDEgOiAwCitSVS1VTkstMjI0MyA6IDEgOiAwCitSVS1VTkstMjI0NCA6IDEgOiAwCitSVS1VTkstMjI0NSA6IDEgOiAwCitSVS1VTkstMjI0NiA6IDEgOiAwCitSVS1VTkstMjI0NyA6IDEgOiAwCitSVS1VTkstMjI0OCA6IDEgOiAwCitSVS1VTkstMjI0OSA6IDEgOiAwCitSVS1VTkstMjI1MCA6IDEgOiAwCitSVS1VTkstMjI1MSA6IDEgOiAwCitSVS1VTkstMjI1MiA6IDEgOiAwCitSVS1VTkstMjI1MyA6IDEgOiAwCitSVS1VTkstMjI1NCA6IDEgOiAwCitSVS1VTkstMjI1NSA6IDEgOiAwCitSVS1VTkstMjI1NiA6IDEgOiAwCitSVS1VTkstMjI1NyA6IDEgOiAwCitSVS1VTkstMjI1OCA6IDEgOiAwCitSVS1VTkstMjI1OSA6IDEgOiAwCitSVS1VTkstMjI2MCA6IDEgOiAwCitSVS1VTkstMjI2MSA6IDEgOiAwCitSVS1VTkstMjI2MiA6IDEgOiAwCitSVS1VTkstMjI2MyA6IDEgOiAwCitSVS1VTkstMjI2NCA6IDEgOiAwCitSVS1VTkstMjI2NSA6IDEgOiAwCitSVS1VTkstMjI2NiA6IDEgOiAwCitSVS1VTkstMjI2NyA6IDEgOiAwCitSVS1VTkstMjI2OCA6IDEgOiAwCitSVS1VTkstMjI2OSA6IDEgOiAwCitSVS1VTkstMjI3MCA6IDEgOiAwCitSVS1VTkstMjI3MSA6IDEgOiAwCitSVS1VTkstMjI3MiA6IDEgOiAwCitSVS1VTkstMjI3MyA6IDEgOiAwCitSVS1VTkstMjI3NCA6IDEgOiAwCitSVS1VTkstMjI3NSA6IDEgOiAwCitSVS1VTkstMjI3NiA6IDEgOiAwCitSVS1VTkstMjI3NyA6IDEgOiAwCitSVS1VTkstMjI3OCA6IDEgOiAwCitSVS1VTkstMjI3OSA6IDEgOiAwCitSVS1VTkstMjI4MCA6IDEgOiAwCitSVS1VTkstMjI4MSA6IDEgOiAwCitSVS1VTkstMjI4MiA6IDEgOiAwCitSVS1VTkstMjI4MyA6IDEgOiAwCitSVS1VTkstMjI4NCA6IDEgOiAwCitSVS1VTkstMjI4NSA6IDEgOiAwCitSVS1VTkstMjI4NiA6IDEgOiAwCitSVS1VTkstMjI4NyA6IDEgOiAwCitSVS1VTkstMjI4OCA6IDEgOiAwCitSVS1VTkstMjI4OSA6IDEgOiAwCitSVS1VTkstMjI5MCA6IDEgOiAwCitSVS1VTkstMjI5MSA6IDEgOiAwCitSVS1VTkstMjI5MiA6IDEgOiAwCitSVS1VTkstMjI5MyA6IDEgOiAwCitSVS1VTkstMjI5NCA6IDEgOiAwCitSVS1VTkstMjI5NSA6IDEgOiAwCitSVS1VTkstMjI5NiA6IDEgOiAwCitSVS1VTkstMjI5NyA6IDEgOiAwCitSVS1VTkstMjI5OCA6IDEgOiAwCitSVS1VTkstMjI5OSA6IDEgOiAwCitSVS1VTkstMjMwMCA6IDEgOiAwCitSVS1VTkstMjMwMSA6IDEgOiAwCitSVS1VTkstMjMwMiA6IDEgOiAwCitSVS1VTkstMjMwMyA6IDEgOiAwCitSVS1VTkstMjMwNCA6IDEgOiAwCitSVS1VTkstMjMwNSA6IDEgOiAwCitSVS1VTkstMjMwNiA6IDEgOiAwCitSVS1VTkstMjMwNyA6IDEgOiAwCitSVS1VTkstMjMwOCA6IDEgOiAwCitSVS1VTkstMjMwOSA6IDEgOiAwCitSVS1VTkstMjMxMCA6IDEgOiAwCitSVS1VTkstMjMxMSA6IDEgOiAwCitSVS1VTkstMjMxMiA6IDEgOiAwCitSVS1VTkstMjMxMyA6IDEgOiAwCitSVS1VTkstMjMxNCA6IDEgOiAwCitSVS1VTkstMjMxNSA6IDEgOiAwCitSVS1VTkstMjMxNiA6IDEgOiAwCitSVS1VTkstMjMxNyA6IDEgOiAwCitSVS1VTkstMjMxOCA6IDEgOiAwCitSVS1VTkstMjMxOSA6IDEgOiAwCitSVS1VTkstMjMyMCA6IDEgOiAwCitSVS1VTkstMjMyMSA6IDEgOiAwCitSVS1VTkstMjMyMiA6IDEgOiAwCitSVS1VTkstMjMyMyA6IDEgOiAwCitSVS1VTkstMjMyNCA6IDEgOiAwCitSVS1VTkstMjMyNSA6IDEgOiAwCitSVS1VTkstMjMyNiA6IDEgOiAwCitSVS1VTkstMjMyNyA6IDEgOiAwCitSVS1VTkstMjMyOCA6IDEgOiAwCitSVS1VTkstMjMyOSA6IDEgOiAwCitSVS1VTkstMjMzMCA6IDEgOiAwCitSVS1VTkstMjMzMSA6IDEgOiAwCitSVS1VTkstMjMzMiA6IDEgOiAwCitSVS1VTkstMjMzMyA6IDEgOiAwCitSVS1VTkstMjMzNCA6IDEgOiAwCitSVS1VTkstMjMzNSA6IDEgOiAwCitSVS1VTkstMjMzNiA6IDEgOiAwCitSVS1VTkstMjMzNyA6IDEgOiAwCitSVS1VTkstMjMzOCA6IDEgOiAwCitSVS1VTkstMjMzOSA6IDEgOiAwCitSVS1VTkstMjM0MCA6IDEgOiAwCitSVS1VTkstMjM0MSA6IDEgOiAwCitSVS1VTkstMjM0MiA6IDEgOiAwCitSVS1VTkstMjM0MyA6IDEgOiAwCitSVS1VTkstMjM0NCA6IDEgOiAwCitSVS1VTkstMjM0NSA6IDEgOiAwCitSVS1VTkstMjM0NiA6IDEgOiAwCitSVS1VTkstMjM0NyA6IDEgOiAwCitSVS1VTkstMjM0OCA6IDEgOiAwCitSVS1VTkstMjM0OSA6IDEgOiAwCitSVS1VTkstMjM1MCA6IDEgOiAwCitSVS1VTkstMjM1MSA6IDEgOiAwCitSVS1VTkstMjM1MiA6IDEgOiAwCitSVS1VTkstMjM1MyA6IDEgOiAwCitSVS1VTkstMjM1NCA6IDEgOiAwCitSVS1VTkstMjM1NSA6IDEgOiAwCitSVS1VTkstMjM1NiA6IDEgOiAwCitSVS1VTkstMjM1NyA6IDEgOiAwCitSVS1VTkstMjM1OCA6IDEgOiAwCitSVS1VTkstMjM1OSA6IDEgOiAwCitSVS1VTkstMjM2MCA6IDEgOiAwCitSVS1VTkstMjM2MSA6IDEgOiAwCitSVS1VTkstMjM2MiA6IDEgOiAwCitSVS1VTkstMjM2MyA6IDEgOiAwCitSVS1VTkstMjM2NCA6IDEgOiAwCitSVS1VTkstMjM2NSA6IDEgOiAwCitSVS1VTkstMjM2NiA6IDEgOiAwCitSVS1VTkstMjM2NyA6IDEgOiAwCitSVS1VTkstMjM2OCA6IDEgOiAwCitSVS1VTkstMjM2OSA6IDEgOiAwCitSVS1VTkstMjM3MCA6IDEgOiAwCitSVS1VTkstMjM3MSA6IDEgOiAwCitSVS1VTkstMjM3MiA6IDEgOiAwCitSVS1VTkstMjM3MyA6IDEgOiAwCitSVS1VTkstMjM3NCA6IDEgOiAwCitSVS1VTkstMjM3NSA6IDEgOiAwCitSVS1VTkstMjM3NiA6IDEgOiAwCitSVS1VTkstMjM3NyA6IDEgOiAwCitSVS1VTkstMjM3OCA6IDEgOiAwCitSVS1VTkstMjM3OSA6IDEgOiAwCitSVS1VTkstMjM4MCA6IDEgOiAwCitSVS1VTkstMjM4MSA6IDEgOiAwCitSVS1VTkstMjM4MiA6IDEgOiAwCitSVS1VTkstMjM4MyA6IDEgOiAwCitSVS1VTkstMjM4NCA6IDEgOiAwCitSVS1VTkstMjM4NSA6IDEgOiAwCitSVS1VTkstMjM4NiA6IDEgOiAwCitSVS1VTkstMjM4NyA6IDEgOiAwCitSVS1VTkstMjM4OCA6IDEgOiAwCitSVS1VTkstMjM4OSA6IDEgOiAwCitSVS1VTkstMjM5MCA6IDEgOiAwCitSVS1VTkstMjM5MSA6IDEgOiAwCitSVS1VTkstMjM5MiA6IDEgOiAwCitSVS1VTkstMjM5MyA6IDEgOiAwCitSVS1VTkstMjM5NCA6IDEgOiAwCitSVS1VTkstMjM5NSA6IDEgOiAwCitSVS1VTkstMjM5NiA6IDEgOiAwCitSVS1VTkstMjM5NyA6IDEgOiAwCitSVS1VTkstMjM5OCA6IDEgOiAwCitSVS1VTkstMjM5OSA6IDEgOiAwCitSVS1VTkstMjQwMCA6IDEgOiAwCitSVS1VTkstMjQwMSA6IDEgOiAwCitSVS1VTkstMjQwMiA6IDEgOiAwCitSVS1VTkstMjQwMyA6IDEgOiAwCitSVS1VTkstMjQwNCA6IDEgOiAwCitSVS1VTkstMjQwNSA6IDEgOiAwCitSVS1VTkstMjQwNiA6IDEgOiAwCitSVS1VTkstMjQwNyA6IDEgOiAwCitSVS1VTkstMjQwOCA6IDEgOiAwCitSVS1VTkstMjQwOSA6IDEgOiAwCitSVS1VTkstMjQxMCA6IDEgOiAwCitSVS1VTkstMjQxMSA6IDEgOiAwCitSVS1VTkstMjQxMiA6IDEgOiAwCitSVS1VTkstMjQxMyA6IDEgOiAwCitSVS1VTkstMjQxNCA6IDEgOiAwCitSVS1VTkstMjQxNSA6IDEgOiAwCitSVS1VTkstMjQxNiA6IDEgOiAwCitSVS1VTkstMjQxNyA6IDEgOiAwCitSVS1VTkstMjQxOCA6IDEgOiAwCitSVS1VTkstMjQxOSA6IDEgOiAwCitSVS1VTkstMjQyMCA6IDEgOiAwCitSVS1VTkstMjQyMSA6IDEgOiAwCitSVS1VTkstMjQyMiA6IDEgOiAwCitSVS1VTkstMjQyMyA6IDEgOiAwCitSVS1VTkstMjQyNCA6IDEgOiAwCitSVS1VTkstMjQyNSA6IDEgOiAwCitSVS1VTkstMjQyNiA6IDEgOiAwCitSVS1VTkstMjQyNyA6IDEgOiAwCitSVS1VTkstMjQyOCA6IDEgOiAwCitSVS1VTkstMjQyOSA6IDEgOiAwCitSVS1VTkstMjQzMCA6IDEgOiAwCitSVS1VTkstMjQzMSA6IDEgOiAwCitSVS1VTkstMjQzMiA6IDEgOiAwCitSVS1VTkstMjQzMyA6IDEgOiAwCitSVS1VTkstMjQzNCA6IDEgOiAwCitSVS1VTkstMjQzNSA6IDEgOiAwCitSVS1VTkstMjQzNiA6IDEgOiAwCitSVS1VTkstMjQzNyA6IDEgOiAwCitSVS1VTkstMjQzOCA6IDEgOiAwCitSVS1VTkstMjQzOSA6IDEgOiAwCitSVS1VTkstMjQ0MCA6IDEgOiAwCitSVS1VTkstMjQ0MSA6IDEgOiAwCitSVS1VTkstMjQ0MiA6IDEgOiAwCitSVS1VTkstMjQ0MyA6IDEgOiAwCitSVS1VTkstMjQ0NCA6IDEgOiAwCitSVS1VTkstMjQ0NSA6IDEgOiAwCitSVS1VTkstMjQ0NiA6IDEgOiAwCitSVS1VTkstMjQ0NyA6IDEgOiAwCitSVS1VTkstMjQ0OCA6IDEgOiAwCitSVS1VTkstMjQ0OSA6IDEgOiAwCitSVS1VTkstMjQ1MCA6IDEgOiAwCitSVS1VTkstMjQ1MSA6IDEgOiAwCitSVS1VTkstMjQ1MiA6IDEgOiAwCitSVS1VTkstMjQ1MyA6IDEgOiAwCitSVS1VTkstMjQ1NCA6IDEgOiAwCitSVS1VTkstMjQ1NSA6IDEgOiAwCitSVS1VTkstMjQ1NiA6IDEgOiAwCitSVS1VTkstMjQ1NyA6IDEgOiAwCitSVS1VTkstMjQ1OCA6IDEgOiAwCitSVS1VTkstMjQ1OSA6IDEgOiAwCitSVS1VTkstMjQ2MCA6IDEgOiAwCitSVS1VTkstMjQ2MSA6IDEgOiAwCitSVS1VTkstMjQ2MiA6IDEgOiAwCitSVS1VTkstMjQ2MyA6IDEgOiAwCitSVS1VTkstMjQ2NCA6IDEgOiAwCitSVS1VTkstMjQ2NSA6IDEgOiAwCitSVS1VTkstMjQ2NiA6IDEgOiAwCitSVS1VTkstMjQ2NyA6IDEgOiAwCitSVS1VTkstMjQ2OCA6IDEgOiAwCitSVS1VTkstMjQ2OSA6IDEgOiAwCitSVS1VTkstMjQ3MCA6IDEgOiAwCitSVS1VTkstMjQ3MSA6IDEgOiAwCitSVS1VTkstMjQ3MiA6IDEgOiAwCitSVS1VTkstMjQ3MyA6IDEgOiAwCitSVS1VTkstMjQ3NCA6IDEgOiAwCitSVS1VTkstMjQ3NSA6IDEgOiAwCitSVS1VTkstMjQ3NiA6IDEgOiAwCitSVS1VTkstMjQ3NyA6IDEgOiAwCitSVS1VTkstMjQ3OCA6IDEgOiAwCitSVS1VTkstMjQ3OSA6IDEgOiAwCitSVS1VTkstMjQ4MCA6IDEgOiAwCitSVS1VTkstMjQ4MSA6IDEgOiAwCitSVS1VTkstMjQ4MiA6IDEgOiAwCitSVS1VTkstMjQ4MyA6IDEgOiAwCitSVS1VTkstMjQ4NCA6IDEgOiAwCitSVS1VTkstMjQ4NSA6IDEgOiAwCitSVS1VTkstMjQ4NiA6IDEgOiAwCitSVS1VTkstMjQ4NyA6IDEgOiAwCitSVS1VTkstMjQ4OCA6IDEgOiAwCitSVS1VTkstMjQ4OSA6IDEgOiAwCitSVS1VTkstMjQ5MCA6IDEgOiAwCitSVS1VTkstMjQ5MSA6IDEgOiAwCitSVS1VTkstMjQ5MiA6IDEgOiAwCitSVS1VTkstMjQ5MyA6IDEgOiAwCitSVS1VTkstMjQ5NCA6IDEgOiAwCitSVS1VTkstMjQ5NSA6IDEgOiAwCitSVS1VTkstMjQ5NiA6IDEgOiAwCitSVS1VTkstMjQ5NyA6IDEgOiAwCitSVS1VTkstMjQ5OCA6IDEgOiAwCitSVS1VTkstMjQ5OSA6IDEgOiAwCitSVS1VTkstMjUwMCA6IDEgOiAwCitSVS1VTkstMjUwMSA6IDEgOiAwCitSVS1VTkstMjUwMiA6IDEgOiAwCitSVS1VTkstMjUwMyA6IDEgOiAwCitSVS1VTkstMjUwNCA6IDEgOiAwCitSVS1VTkstMjUwNSA6IDEgOiAwCitSVS1VTkstMjUwNiA6IDEgOiAwCitSVS1VTkstMjUwNyA6IDEgOiAwCitSVS1VTkstMjUwOCA6IDEgOiAwCitSVS1VTkstMjUwOSA6IDEgOiAwCitSVS1VTkstMjUxMCA6IDEgOiAwCitSVS1VTkstMjUxMSA6IDEgOiAwCitSVS1VTkstMjUxMiA6IDEgOiAwCitSVS1VTkstMjUxMyA6IDEgOiAwCitSVS1VTkstMjUxNCA6IDEgOiAwCitSVS1VTkstMjUxNSA6IDEgOiAwCitSVS1VTkstMjUxNiA6IDEgOiAwCitSVS1VTkstMjUxNyA6IDEgOiAwCitSVS1VTkstMjUxOCA6IDEgOiAwCitSVS1VTkstMjUxOSA6IDEgOiAwCitSVS1VTkstMjUyMCA6IDEgOiAwCitSVS1VTkstMjUyMSA6IDEgOiAwCitSVS1VTkstMjUyMiA6IDEgOiAwCitSVS1VTkstMjUyMyA6IDEgOiAwCitSVS1VTkstMjUyNCA6IDEgOiAwCitSVS1VTkstMjUyNSA6IDEgOiAwCitSVS1VTkstMjUyNiA6IDEgOiAwCitSVS1VTkstMjUyNyA6IDEgOiAwCitSVS1VTkstMjUyOCA6IDEgOiAwCitSVS1VTkstMjUyOSA6IDEgOiAwCitSVS1VTkstMjUzMCA6IDEgOiAwCitSVS1VTkstMjUzMSA6IDEgOiAwCitSVS1VTkstMjUzMiA6IDEgOiAwCitSVS1VTkstMjUzMyA6IDEgOiAwCitSVS1VTkstMjUzNCA6IDEgOiAwCitSVS1VTkstMjUzNSA6IDEgOiAwCitSVS1VTkstMjUzNiA6IDEgOiAwCitSVS1VTkstMjUzNyA6IDEgOiAwCitSVS1VTkstMjUzOCA6IDEgOiAwCitSVS1VTkstMjUzOSA6IDEgOiAwCitSVS1VTkstMjU0MCA6IDEgOiAwCitSVS1VTkstMjU0MSA6IDEgOiAwCitSVS1VTkstMjU0MiA6IDEgOiAwCitSVS1VTkstMjU0MyA6IDEgOiAwCitSVS1VTkstMjU0NCA6IDEgOiAwCitSVS1VTkstMjU0NSA6IDEgOiAwCitSVS1VTkstMjU0NiA6IDEgOiAwCitSVS1VTkstMjU0NyA6IDEgOiAwCitSVS1VTkstMjU0OCA6IDEgOiAwCitSVS1VTkstMjU0OSA6IDEgOiAwCitSVS1VTkstMjU1MCA6IDEgOiAwCitSVS1VTkstMjU1MSA6IDEgOiAwCitSVS1VTkstMjU1MiA6IDEgOiAwCitSVS1VTkstMjU1MyA6IDEgOiAwCitSVS1VTkstMjU1NCA6IDEgOiAwCitSVS1VTkstMjU1NSA6IDEgOiAwCitSVS1VTkstMjU1NiA6IDEgOiAwCitSVS1VTkstMjU1NyA6IDEgOiAwCitSVS1VTkstMjU1OCA6IDEgOiAwCitSVS1VTkstMjU1OSA6IDEgOiAwCitSVS1VTkstMjU2MCA6IDEgOiAwCitSVS1VTkstMjU2MSA6IDEgOiAwCitSVS1VTkstMjU2MiA6IDEgOiAwCitSVS1VTkstMjU2MyA6IDEgOiAwCitSVS1VTkstMjU2NCA6IDEgOiAwCitSVS1VTkstMjU2NSA6IDEgOiAwCitSVS1VTkstMjU2NiA6IDEgOiAwCitSVS1VTkstMjU2NyA6IDEgOiAwCitSVS1VTkstMjU2OCA6IDEgOiAwCitSVS1VTkstMjU2OSA6IDEgOiAwCitSVS1VTkstMjU3MCA6IDEgOiAwCitSVS1VTkstMjU3MSA6IDEgOiAwCitSVS1VTkstMjU3MiA6IDEgOiAwCitSVS1VTkstMjU3MyA6IDEgOiAwCitSVS1VTkstMjU3NCA6IDEgOiAwCitSVS1VTkstMjU3NSA6IDEgOiAwCitSVS1VTkstMjU3NiA6IDEgOiAwCitSVS1VTkstMjU3NyA6IDEgOiAwCitSVS1VTkstMjU3OCA6IDEgOiAwCitSVS1VTkstMjU3OSA6IDEgOiAwCitSVS1VTkstMjU4MCA6IDEgOiAwCitSVS1VTkstMjU4MSA6IDEgOiAwCitSVS1VTkstMjU4MiA6IDEgOiAwCitSVS1VTkstMjU4MyA6IDEgOiAwCitSVS1VTkstMjU4NCA6IDEgOiAwCitSVS1VTkstMjU4NSA6IDEgOiAwCitSVS1VTkstMjU4NiA6IDEgOiAwCitSVS1VTkstMjU4NyA6IDEgOiAwCitSVS1VTkstMjU4OCA6IDEgOiAwCitSVS1VTkstMjU4OSA6IDEgOiAwCitSVS1VTkstMjU5MCA6IDEgOiAwCitSVS1VTkstMjU5MSA6IDEgOiAwCitSVS1VTkstMjU5MiA6IDEgOiAwCitSVS1VTkstMjU5MyA6IDEgOiAwCitSVS1VTkstMjU5NCA6IDEgOiAwCitSVS1VTkstMjU5NSA6IDEgOiAwCitSVS1VTkstMjU5NiA6IDEgOiAwCitSVS1VTkstMjU5NyA6IDEgOiAwCitSVS1VTkstMjU5OCA6IDEgOiAwCitSVS1VTkstMjU5OSA6IDEgOiAwCitSVS1VTkstMjYwMCA6IDEgOiAwCitSVS1VTkstMjYwMSA6IDEgOiAwCitSVS1VTkstMjYwMiA6IDEgOiAwCitSVS1VTkstMjYwMyA6IDEgOiAwCitSVS1VTkstMjYwNCA6IDEgOiAwCitSVS1VTkstMjYwNSA6IDEgOiAwCitSVS1VTkstMjYwNiA6IDEgOiAwCitSVS1VTkstMjYwNyA6IDEgOiAwCitSVS1VTkstMjYwOCA6IDEgOiAwCitSVS1VTkstMjYwOSA6IDEgOiAwCitSVS1VTkstMjYxMCA6IDEgOiAwCitSVS1VTkstMjYxMSA6IDEgOiAwCitSVS1VTkstMjYxMiA6IDEgOiAwCitSVS1VTkstMjYxMyA6IDEgOiAwCitSVS1VTkstMjYxNCA6IDEgOiAwCitSVS1VTkstMjYxNSA6IDEgOiAwCitSVS1VTkstMjYxNiA6IDEgOiAwCitSVS1VTkstMjYxNyA6IDEgOiAwCitSVS1VTkstMjYxOCA6IDEgOiAwCitSVS1VTkstMjYxOSA6IDEgOiAwCitSVS1VTkstMjYyMCA6IDEgOiAwCitSVS1VTkstMjYyMSA6IDEgOiAwCitSVS1VTkstMjYyMiA6IDEgOiAwCitSVS1VTkstMjYyMyA6IDEgOiAwCitSVS1VTkstMjYyNCA6IDEgOiAwCitSVS1VTkstMjYyNSA6IDEgOiAwCitSVS1VTkstMjYyNiA6IDEgOiAwCitSVS1VTkstMjYyNyA6IDEgOiAwCitSVS1VTkstMjYyOCA6IDEgOiAwCitSVS1VTkstMjYyOSA6IDEgOiAwCitSVS1VTkstMjYzMCA6IDEgOiAwCitSVS1VTkstMjYzMSA6IDEgOiAwCitSVS1VTkstMjYzMiA6IDEgOiAwCitSVS1VTkstMjYzMyA6IDEgOiAwCitSVS1VTkstMjYzNCA6IDEgOiAwCitSVS1VTkstMjYzNSA6IDEgOiAwCitSVS1VTkstMjYzNiA6IDEgOiAwCitSVS1VTkstMjYzNyA6IDEgOiAwCitSVS1VTkstMjYzOCA6IDEgOiAwCitSVS1VTkstMjYzOSA6IDEgOiAwCitSVS1VTkstMjY0MCA6IDEgOiAwCitSVS1VTkstMjY0MSA6IDEgOiAwCitSVS1VTkstMjY0MiA6IDEgOiAwCitSVS1VTkstMjY0MyA6IDEgOiAwCitSVS1VTkstMjY0NCA6IDEgOiAwCitSVS1VTkstMjY0NSA6IDEgOiAwCitSVS1VTkstMjY0NiA6IDEgOiAwCitSVS1VTkstMjY0NyA6IDEgOiAwCitSVS1VTkstMjY0OCA6IDEgOiAwCitSVS1VTkstMjY0OSA6IDEgOiAwCitSVS1VTkstMjY1MCA6IDEgOiAwCitSVS1VTkstMjY1MSA6IDEgOiAwCitSVS1VTkstMjY1MiA6IDEgOiAwCitSVS1VTkstMjY1MyA6IDEgOiAwCitSVS1VTkstMjY1NCA6IDEgOiAwCitSVS1VTkstMjY1NSA6IDEgOiAwCitSVS1VTkstMjY1NiA6IDEgOiAwCitSVS1VTkstMjY1NyA6IDEgOiAwCitSVS1VTkstMjY1OCA6IDEgOiAwCitSVS1VTkstMjY1OSA6IDEgOiAwCitSVS1VTkstMjY2MCA6IDEgOiAwCitSVS1VTkstMjY2MSA6IDEgOiAwCitSVS1VTkstMjY2MiA6IDEgOiAwCitSVS1VTkstMjY2MyA6IDEgOiAwCitSVS1VTkstMjY2NCA6IDEgOiAwCitSVS1VTkstMjY2NSA6IDEgOiAwCitSVS1VTkstMjY2NiA6IDEgOiAwCitSVS1VTkstMjY2NyA6IDEgOiAwCitSVS1VTkstMjY2OCA6IDEgOiAwCitSVS1VTkstMjY2OSA6IDEgOiAwCitSVS1VTkstMjY3MCA6IDEgOiAwCitSVS1VTkstMjY3MSA6IDEgOiAwCitSVS1VTkstMjY3MiA6IDEgOiAwCitSVS1VTkstMjY3MyA6IDEgOiAwCitSVS1VTkstMjY3NCA6IDEgOiAwCitSVS1VTkstMjY3NSA6IDEgOiAwCitSVS1VTkstMjY3NiA6IDEgOiAwCitSVS1VTkstMjY3NyA6IDEgOiAwCitSVS1VTkstMjY3OCA6IDEgOiAwCitSVS1VTkstMjY3OSA6IDEgOiAwCitSVS1VTkstMjY4MCA6IDEgOiAwCitSVS1VTkstMjY4MSA6IDEgOiAwCitSVS1VTkstMjY4MiA6IDEgOiAwCitSVS1VTkstMjY4MyA6IDEgOiAwCitSVS1VTkstMjY4NCA6IDEgOiAwCitSVS1VTkstMjY4NSA6IDEgOiAwCitSVS1VTkstMjY4NiA6IDEgOiAwCitSVS1VTkstMjY4NyA6IDEgOiAwCitSVS1VTkstMjY4OCA6IDEgOiAwCitSVS1VTkstMjY4OSA6IDEgOiAwCitSVS1VTkstMjY5MCA6IDEgOiAwCitSVS1VTkstMjY5MSA6IDEgOiAwCitSVS1VTkstMjY5MiA6IDEgOiAwCitSVS1VTkstMjY5MyA6IDEgOiAwCitSVS1VTkstMjY5NCA6IDEgOiAwCitSVS1VTkstMjY5NSA6IDEgOiAwCitSVS1VTkstMjY5NiA6IDEgOiAwCitSVS1VTkstMjY5NyA6IDEgOiAwCitSVS1VTkstMjY5OCA6IDEgOiAwCitSVS1VTkstMjY5OSA6IDEgOiAwCitSVS1VTkstMjcwMCA6IDEgOiAwCitSVS1VTkstMjcwMSA6IDEgOiAwCitSVS1VTkstMjcwMiA6IDEgOiAwCitSVS1VTkstMjcwMyA6IDEgOiAwCitSVS1VTkstMjcwNCA6IDEgOiAwCitSVS1VTkstMjcwNSA6IDEgOiAwCitSVS1VTkstMjcwNiA6IDEgOiAwCitSVS1VTkstMjcwNyA6IDEgOiAwCitSVS1VTkstMjcwOCA6IDEgOiAwCitSVS1VTkstMjcwOSA6IDEgOiAwCitSVS1VTkstMjcxMCA6IDEgOiAwCitSVS1VTkstMjcxMSA6IDEgOiAwCitSVS1VTkstMjcxMiA6IDEgOiAwCitSVS1VTkstMjcxMyA6IDEgOiAwCitSVS1VTkstMjcxNCA6IDEgOiAwCitSVS1VTkstMjcxNSA6IDEgOiAwCitSVS1VTkstMjcxNiA6IDEgOiAwCitSVS1VTkstMjcxNyA6IDEgOiAwCitSVS1VTkstMjcxOCA6IDEgOiAwCitSVS1VTkstMjcxOSA6IDEgOiAwCitSVS1VTkstMjcyMCA6IDEgOiAwCitSVS1VTkstMjcyMSA6IDEgOiAwCitSVS1VTkstMjcyMiA6IDEgOiAwCitSVS1VTkstMjcyMyA6IDEgOiAwCitSVS1VTkstMjcyNCA6IDEgOiAwCitSVS1VTkstMjcyNSA6IDEgOiAwCitSVS1VTkstMjcyNiA6IDEgOiAwCitSVS1VTkstMjcyNyA6IDEgOiAwCitSVS1VTkstMjcyOCA6IDEgOiAwCitSVS1VTkstMjcyOSA6IDEgOiAwCitSVS1VTkstMjczMCA6IDEgOiAwCitSVS1VTkstMjczMSA6IDEgOiAwCitSVS1VTkstMjczMiA6IDEgOiAwCitSVS1VTkstMjczMyA6IDEgOiAwCitSVS1VTkstMjczNCA6IDEgOiAwCitSVS1VTkstMjczNSA6IDEgOiAwCitSVS1VTkstMjczNiA6IDEgOiAwCitSVS1VTkstMjczNyA6IDEgOiAwCitSVS1VTkstMjczOCA6IDEgOiAwCitSVS1VTkstMjczOSA6IDEgOiAwCitSVS1VTkstMjc0MCA6IDEgOiAwCitSVS1VTkstMjc0MSA6IDEgOiAwCitSVS1VTkstMjc0MiA6IDEgOiAwCitSVS1VTkstMjc0MyA6IDEgOiAwCitSVS1VTkstMjc0NCA6IDEgOiAwCitSVS1VTkstMjc0NSA6IDEgOiAwCitSVS1VTkstMjc0NiA6IDEgOiAwCitSVS1VTkstMjc0NyA6IDEgOiAwCitSVS1VTkstMjc0OCA6IDEgOiAwCitSVS1VTkstMjc0OSA6IDEgOiAwCitSVS1VTkstMjc1MCA6IDEgOiAwCitSVS1VTkstMjc1MSA6IDEgOiAwCitSVS1VTkstMjc1MiA6IDEgOiAwCitSVS1VTkstMjc1MyA6IDEgOiAwCitSVS1VTkstMjc1NCA6IDEgOiAwCitSVS1VTkstMjc1NSA6IDEgOiAwCitSVS1VTkstMjc1NiA6IDEgOiAwCitSVS1VTkstMjc1NyA6IDEgOiAwCitSVS1VTkstMjc1OCA6IDEgOiAwCitSVS1VTkstMjc1OSA6IDEgOiAwCitSVS1VTkstMjc2MCA6IDEgOiAwCitSVS1VTkstMjc2MSA6IDEgOiAwCitSVS1VTkstMjc2MiA6IDEgOiAwCitSVS1VTkstMjc2MyA6IDEgOiAwCitSVS1VTkstMjc2NCA6IDEgOiAwCitSVS1VTkstMjc2NSA6IDEgOiAwCitSVS1VTkstMjc2NiA6IDEgOiAwCitSVS1VTkstMjc2NyA6IDEgOiAwCitSVS1VTkstMjc2OCA6IDEgOiAwCitSVS1VTkstMjc2OSA6IDEgOiAwCitSVS1VTkstMjc3MCA6IDEgOiAwCitSVS1VTkstMjc3MSA6IDEgOiAwCitSVS1VTkstMjc3MiA6IDEgOiAwCitSVS1VTkstMjc3MyA6IDEgOiAwCitSVS1VTkstMjc3NCA6IDEgOiAwCitSVS1VTkstMjc3NSA6IDEgOiAwCitSVS1VTkstMjc3NiA6IDEgOiAwCitSVS1VTkstMjc3NyA6IDEgOiAwCitSVS1VTkstMjc3OCA6IDEgOiAwCitSVS1VTkstMjc3OSA6IDEgOiAwCitSVS1VTkstMjc4MCA6IDEgOiAwCitSVS1VTkstMjc4MSA6IDEgOiAwCitSVS1VTkstMjc4MiA6IDEgOiAwCitSVS1VTkstMjc4MyA6IDEgOiAwCitSVS1VTkstMjc4NCA6IDEgOiAwCitSVS1VTkstMjc4NSA6IDEgOiAwCitSVS1VTkstMjc4NiA6IDEgOiAwCitSVS1VTkstMjc4NyA6IDEgOiAwCitSVS1VTkstMjc4OCA6IDEgOiAwCitSVS1VTkstMjc4OSA6IDEgOiAwCitSVS1VTkstMjc5MCA6IDEgOiAwCitSVS1VTkstMjc5MSA6IDEgOiAwCitSVS1VTkstMjc5MiA6IDEgOiAwCitSVS1VTkstMjc5MyA6IDEgOiAwCitSVS1VTkstMjc5NCA6IDEgOiAwCitSVS1VTkstMjc5NSA6IDEgOiAwCitSVS1VTkstMjc5NiA6IDEgOiAwCitSVS1VTkstMjc5NyA6IDEgOiAwCitSVS1VTkstMjc5OCA6IDEgOiAwCitSVS1VTkstMjc5OSA6IDEgOiAwCitSVS1VTkstMjgwMCA6IDEgOiAwCitSVS1VTkstMjgwMSA6IDEgOiAwCitSVS1VTkstMjgwMiA6IDEgOiAwCitSVS1VTkstMjgwMyA6IDEgOiAwCitSVS1VTkstMjgwNCA6IDEgOiAwCitSVS1VTkstMjgwNSA6IDEgOiAwCitSVS1VTkstMjgwNiA6IDEgOiAwCitSVS1VTkstMjgwNyA6IDEgOiAwCitSVS1VTkstMjgwOCA6IDEgOiAwCitSVS1VTkstMjgwOSA6IDEgOiAwCitSVS1VTkstMjgxMCA6IDEgOiAwCitSVS1VTkstMjgxMSA6IDEgOiAwCitSVS1VTkstMjgxMiA6IDEgOiAwCitSVS1VTkstMjgxMyA6IDEgOiAwCitSVS1VTkstMjgxNCA6IDEgOiAwCitSVS1VTkstMjgxNSA6IDEgOiAwCitSVS1VTkstMjgxNiA6IDEgOiAwCitSVS1VTkstMjgxNyA6IDEgOiAwCitSVS1VTkstMjgxOCA6IDEgOiAwCitSVS1VTkstMjgxOSA6IDEgOiAwCitSVS1VTkstMjgyMCA6IDEgOiAwCitSVS1VTkstMjgyMSA6IDEgOiAwCitSVS1VTkstMjgyMiA6IDEgOiAwCitSVS1VTkstMjgyMyA6IDEgOiAwCitSVS1VTkstMjgyNCA6IDEgOiAwCitNb3VybWFuc2th72Egb2JsYXN0O1BlY2hlbmdza2l5IDogMSA6IDU0OTkxCitOZW5ldHNraSBuYXRpb25hbCBva3JvdWc7TmVuZXRza3kgbmF0LiBva3JvdWcgOiAxIDogMjIxOTYKK01vdXJtYW5za2HvYSBvYmxhc3Q7S29sc2tpeSA6IDEgOiA2OTExOAorTW91cm1hbnNrYe9hIG9ibGFzdDtTZXZlcm9tb3JzayA6IDEgOiA5MTMwMworTW91cm1hbnNrYe9hIG9ibGFzdDtQb2x5YXJueWkgOiAxIDogMjY2NDIKK01vdXJtYW5za2HvYSBvYmxhc3Q7TXVybWFuc2sgOiAxIDogNDM1NjU5CitNb3VybWFuc2th72Egb2JsYXN0O0xvdm96ZXJza2l5IDogMSA6IDE2ODc2CitLb21pO1Zvcmt1dGEgOiAxIDogMjA0ODc5CitNb3VybWFuc2th72Egb2JsYXN0O09sZW5lZ29yc2sgOiAxIDogNDQwODcKK01vdXJtYW5za2HvYSBvYmxhc3Q7TW9uY2hlZ29yc2sgOiAxIDogNzEwMTQKK01vdXJtYW5za2HvYSBvYmxhc3Q7S292ZG9yc2tpeSA6IDEgOiAzMzk0MworTW91cm1hbnNrYe9hIG9ibGFzdDtLaXJvdnNrIDogMSA6IDQ1MDM1CitNb3VybWFuc2th72Egb2JsYXN0O0FwYXRpdHkgOiAxIDogODAxMTYKK05lbmV0c2tpIG5hdGlvbmFsIG9rcm91ZztOYXJ5YW4tTWFyIDogMSA6IDI2OTgwCitNb3VybWFuc2th72Egb2JsYXN0O0thbmRhbGFrc2hhIDogMSA6IDczODU4CitNb3VybWFuc2th72Egb2JsYXN0O1BvbHlhcm5peWUgWm9yeSA6IDEgOiAyNDA4MgorTW91cm1hbnNrYe9hIG9ibGFzdDtUZXJza2l5IDogMSA6IDk1NzYKK0tvbWk7VXN0LVRzaWxlbXNraXkgOiAxIDogMTY3MzMKK0tvbWk7VXNpbnNraXkgOiAxIDogMTczMTYKK0tvbWk7SW50YSA6IDEgOiA2NzkwNAorS2FyZWxpYTtMb3VraHNraXkgOiAxIDogMjQ2MjEKK0Fya2hhbmdlbHNrYe9hIG9ibGFzdCBy6XM7TWV6ZW5za2l5IDogMSA6IDE3NjA3CitLb21pO0l6aGVtc2tpeSA6IDEgOiAyMzY0MAorS29taTtVc2luc2sgOiAxIDogNTA2ODUKK0thcmVsaWE7S2Vtc2tpeSA6IDEgOiA3MDIwCitBcmtoYW5nZWxza2HvYSBvYmxhc3QgculzO1ByaW1vcnNraXkgOiAxIDogMzI3NTUKK0tvbWk7UGVjaG9yc2tpeSA6IDEgOiAyNjc1MworS2FyZWxpYTtLYWxldmFsc2tpeSA6IDEgOiAxMTc2NworQXJraGFuZ2Vsc2th72Egb2JsYXN0IHLpcztMZXNodWtvbnNraXkgOiAxIDogMTU3MzgKK0Fya2hhbmdlbHNrYe9hIG9ibGFzdCBy6XM7UGluZXpoc2tpeSA6IDEgOiA0MTAxOAorQXJraGFuZ2Vsc2th72Egb2JsYXN0IHLpcztTb2xvdmV0c2tpeSA6IDEgOiAxNDc1CitLb21pO1BlY2hvcmEgOiAxIDogNjQwMTMKK0thcmVsaWE7S2VtJyA6IDEgOiAxODM5MQorS2FyZWxpYTtCZWxvbW9yc2tpeSA6IDEgOiAyOTc2MgorS29taTtVZG9yc2tpeSA6IDEgOiAyMTIwOAorUlUtVU5LLTI4MjUgOiAxIDogNzI5NgorUlUtVU5LLTI4MjYgOiAxIDogNzI5NgorQXJraGFuZ2Vsc2th72Egb2JsYXN0IHLpcztLaG9sbW9nb3Jza2l5IDogMSA6IDM1MzEzCitLYXJlbGlhO0tvc3RvbXVrc2hhIDogMSA6IDMyODI4CitBcmtoYW5nZWxza2HvYSBvYmxhc3QgculzO0Fya2hhbmdlbHNrIDogMSA6IDQxMjUzNworQXJraGFuZ2Vsc2th72Egb2JsYXN0IHLpcztTZXZlcm9kdmluc2sgOiAxIDogMjQ4ODYwCitBcmtoYW5nZWxza2HvYSBvYmxhc3QgculzO09uZXpoc2tpeSA6IDEgOiAyMTgzNworS29taTtLbnlhemhwb2dvc3Rza2l5IDogMSA6IDM1MDIyCitLYXJlbGlhO011eWV6ZXJza2l5IDogMSA6IDIwMjcwCitLb21pO1Nvc25vZ29yc2tpeSA6IDEgOiAzMDI1NQorS29taTtVa2h0YSA6IDEgOiAxMzc2NTYKK0Fya2hhbmdlbHNrYe9hIG9ibGFzdCBy6XM7Tm92b2R2aW5zayA6IDEgOiA0ODg4NworS2FyZWxpYTtTZWdlemhza2l5IDogMSA6IDE3NDAzCitBcmtoYW5nZWxza2HvYSBvYmxhc3QgculzO1BsZXNldHNraXkgOiAxIDogNzk0NzgKK0Fya2hhbmdlbHNrYe9hIG9ibGFzdCBy6XM7T25lZ2EgOiAxIDogMjU2NzMKK0tvbWk7VnVrdHlsc2tpeSA6IDEgOiAxODQ4NAorS2FyZWxpYTtNZWR2ZXpoeWVnb3Jza2l5IDogMSA6IDQ1OTc4CitLYXJlbGlhO1NlZ2V6aGEgOiAxIDogMzcyNzcKK0tvbWk7VHJvaXRza28tUGVjaG9yc2tpeSA6IDEgOiAyNDYxMworQXJraGFuZ2Vsc2th72Egb2JsYXN0IHLpcztWaW5vZ3JhZG92c2tpeSA6IDEgOiAyNDM5NAorS29taTtTb3Nub2dvcnNrIDogMSA6IDMwMjU1CitBcmtoYW5nZWxza2HvYSBvYmxhc3QgculzO1ZlcmtobmV0b3llbXNraXkgOiAxIDogMjcyNDcKK0thcmVsaWE7U3VveWFydnNraXkgOiAxIDogMjYyMDMKK0thcmVsaWE7S29uZG9wb3poc2tpeSA6IDEgOiAxMTI3MgorS29taTtLb3J0a2Vyb3Nza2l5IDogMSA6IDI2NTU4CitBcmtoYW5nZWxza2HvYSBvYmxhc3QgculzO0xlbnNraXkgOiAxIDogMTk3NzEKK0thcmVsaWE7UHVkb3poc2tpeSA6IDEgOiAzMTI0NgorS29taTtVc3QtVnltc2tpeSA6IDEgOiAzOTQ5NworS29taTtVc3QtS3Vsb21za2l5IDogMSA6IDM4NDI3CitBcmtoYW5nZWxza2HvYSBvYmxhc3QgculzO1NoZW5rdXJza2l5IDogMSA6IDIyMTMyCitBcmtoYW5nZWxza2HvYSBvYmxhc3QgculzO055YW5kb21za2l5IDogMSA6IDM5NDQ0CitBcmtoYW5nZWxza2HvYSBvYmxhc3QgculzO0tyYXNub2JvcnNraXkgOiAxIDogMjAxNjUKK0thcmVsaWE7S29uZG9wb2dhIDogMSA6IDM3MDc5CitLYXJlbGlhO1NvcnRhdmFsYSA6IDEgOiAzNzU3NAorS29taTtTeWt0eXZkaW5za2l5IDogMSA6IDI3NDM0CitBcmtoYW5nZWxza2HvYSBvYmxhc3QgculzO0thcmdhcG9sc2tpeSA6IDEgOiAyNTk2OAorS2FyZWxpYTtQcnlhemhpbnNraXkgOiAxIDogMjIyNDgKK0thcmVsaWE7UHJpb25lemhza2l5IDogMSA6IDI0NDIzCitBcmtoYW5nZWxza2HvYSBvYmxhc3QgculzO1ZlbHNraXkgOiAxIDogNjk5MzYKK0thcmVsaWE7UGl0a3lhcmFudHNraXkgOiAxIDogMTI4NTQKK0Fya2hhbmdlbHNrYe9hIG9ibGFzdCBy6XM7VXN0eWFuc2tpeSA6IDEgOiA0Mzg3MAorQXJraGFuZ2Vsc2th72Egb2JsYXN0IHLpcztLb3RsYXNza2l5IDogMSA6IDMwMDk5CitLb21pO1N5a3R5dmt2YXIgOiAxIDogMjM0NjQ4CitLYXJlbGlhO1BldHJvemF2b2RzayA6IDEgOiAyNzY0NjQKK0thcmVsaWE7TGFraGRlbnBva2hza2l5IDogMSA6IDE5NDc5CitBcmtoYW5nZWxza2HvYSBvYmxhc3QgculzO1ZpbGVnb2Rza2l5IDogMSA6IDE2NDI3CitLYXJlbGlhO1B5dGtpYXJhbnRhIDogMSA6IDE0NzMzCitWb2xvZ29kc2th72Egb2JsYXN0O1Z5dGVnb3Jza2l5IDogMSA6IDM3MjU3CitLb21pO1N5c29sc2tpeSA6IDEgOiAxODc3NgorS2FyZWxpYTtPbG9uZXRza2l5IDogMSA6IDMwNTUzCitBcmtoYW5nZWxza2HvYSBvYmxhc3QgculzO0tvbm9zaHNraXkgOiAxIDogMzkxNDkKK0Fya2hhbmdlbHNrYe9hIG9ibGFzdCBy6XM7S29yeWF6aG1hIDogMSA6IDQyODg3CitBcmtoYW5nZWxza2HvYSBvYmxhc3QgculzO0tvdGxhcyA6IDEgOiA4MjIzMgorVm9sb2dvZHNrYe9hIG9ibGFzdDtWZWxpa291c3R5dWdza2l5IDogMSA6IDI2MTk5CitLb21pO1ByaWx1enNraXkgOiAxIDogMjgxMTUKK1ZvbG9nb2Rza2HvYSBvYmxhc3Q7VGFybm9nc2tpeSA6IDEgOiAxNzUzMworS29taTtLb3lnb3JvZHNraXkgOiAxIDogMTE3NzEKK1ZvbG9nb2Rza2HvYSBvYmxhc3Q7Tnl1a3NlbnNraXkgOiAxIDogMTM2NDcKK1ZvbG9nb2Rza2HvYSBvYmxhc3Q7VmVya2hvdmF6aHNraXkgOiAxIDogMTgzMjkKK1ZvbG9nb2Rza2HvYSBvYmxhc3Q7S2lyaWxsb3Zza2l5IDogMSA6IDIxNjE3CitWb2xvZ29kc2th72Egb2JsYXN0O1ZlbGlraXkgVXN0eXVnIDogMSA6IDQ3NjE3CitWb2xvZ29kc2th72Egb2JsYXN0O1ZvemhlZ29kc2tpeSA6IDEgOiAyMjAxNQorVm9sb2dvZHNrYe9hIG9ibGFzdDtWYXNoa2luc2tpeSA6IDEgOiAxMTk1NAorVm9sb2dvZHNrYe9hIG9ibGFzdDtCZWxvemVyc2tpeSA6IDEgOiAyNDMwNgorVm9sb2dvZHNrYe9hIG9ibGFzdDtCYWJheWV2c2tpeSA6IDEgOiAyODY5MAorVm9sb2dvZHNrYe9hIG9ibGFzdDtLaWNobWVuZ3NrbyBHb3JvZGV0c2tpeSA6IDEgOiAyNjE5OQorVm9sb2dvZHNrYe9hIG9ibGFzdDtLaGFyb3Zza2l5IDogMSA6IDI0NjA1CitWb2xvZ29kc2th72Egb2JsYXN0O1RvdGVtc2tpeSA6IDEgOiAyNzg5MworVm9sb2dvZHNrYe9hIG9ibGFzdDtTeWFtemhlbnNraXkgOiAxIDogMTIzNTIKK1ZvbG9nb2Rza2HvYSBvYmxhc3Q7VWN0LUt1Ymluc2tpeSA6IDEgOiAxMDg1OAorVm9sb2dvZHNrYe9hIG9ibGFzdDtCYWJ1c2hraW5za2l5IDogMSA6IDE3NzMyCitWb2xvZ29kc2th72Egb2JsYXN0O05pa29sc2tpeSA6IDEgOiAzMTE4MAorVm9sb2dvZHNrYe9hIG9ibGFzdDtWb2xvZ29kc2tpeSA6IDEgOiA1NzE4MAorVm9sb2dvZHNrYe9hIG9ibGFzdDtTb2tvbHNraXkgOiAxIDogMTc1MzMKK1ZvbG9nb2Rza2HvYSBvYmxhc3Q7S2FkdXlza2l5IDogMSA6IDIwMTIzCitWb2xvZ29kc2th72Egb2JsYXN0O0NoZXJlcG92ZXRza2l5IDogMSA6IDQ3MTE5CitWb2xvZ29kc2th72Egb2JsYXN0O1NoZWtzbmluc2tpeSA6IDEgOiAzNDI2OAorVm9sb2dvZHNrYe9hIG9ibGFzdDtNZXpoZHVyZWNoZW5za2l5IDogMSA6IDk0NjQKK1ZvbG9nb2Rza2HvYSBvYmxhc3Q7U29rb2wgOiAxIDogNDY5MTkKK1ZvbG9nb2Rza2HvYSBvYmxhc3Q7Q2hhZ29kZXNjaGVuc2tpeSA6IDEgOiAxNzYzMgorVm9sb2dvZHNrYe9hIG9ibGFzdDtWb2xvZ2RhIDogMSA6IDI5NjY1OQorVm9sb2dvZHNrYe9hIG9ibGFzdDtVc3R5dXpoZW5za2l5IDogMSA6IDIyOTEyCitWb2xvZ29kc2th72Egb2JsYXN0O0NoZXJlcG92ZXR6IDogMSA6IDMxNjY4MgorVm9sb2dvZHNrYe9hIG9ibGFzdDtHcnlhem92ZXRza2l5IDogMSA6IDQ1OTIzCitSVS1VTkstMjgyNyA6IDEgOiA3Mjk2CitSVS1VTkstMjgyOCA6IDEgOiA3Mjk2CitUYW1ib3Zza2HvYSBvYmxhc3Q7TW9yc2hhbnNraXkgOiAxIDogNDQzNzgKK0xpcGV0c2th72Egb2JsYXN0O0NoYXBseWdpbnNraXkgOiAxIDogMzk0OTQKK0xpcGV0c2th72Egb2JsYXN0O0RhbmtvdnNraXkgOiAxIDogMTkyOTUKK1RhbWJvdnNrYe9hIG9ibGFzdDtTdGFyb3l1cnlldnNraXkgOiAxIDogMjEwNDIKK1RhbWJvdnNrYe9hIG9ibGFzdDtTb3Nub3Zza2l5IDogMSA6IDQ2MTczCitUYW1ib3Zza2HvYSBvYmxhc3Q7TW9yc2hhbnNrIDogMSA6IDQ5NzYzCitMaXBldHNrYe9hIG9ibGFzdDtMZXYgLVRvbHN0b3Zza2l5IDogMSA6IDE4OTkzCitUYW1ib3Zza2HvYSBvYmxhc3Q7UGVydm9tYXlza2l5IDogMSA6IDM1NDAzCitUYW1ib3Zza2HvYSBvYmxhc3Q7UGljaGF5ZXZza2l5IDogMSA6IDE5MDQ4CitMaXBldHNrYe9hIG9ibGFzdDtEYW5rb3YgOiAxIDogMjUwMjMKK1RhbWJvdnNrYe9hIG9ibGFzdDtNaWNodXJpbnNraXkgOiAxIDogMzgxOTUKK1RhbWJvdnNrYe9hIG9ibGFzdDtOaWtpZm9yb3Zza2l5IDogMSA6IDI2MTI4CitMaXBldHNrYe9hIG9ibGFzdDtMZWJlZHlhbnNraXkgOiAxIDogNDY0MjgKK1RhbWJvdnNrYe9hIG9ibGFzdDtCb25kYXJza2l5IDogMSA6IDE4MTUwCitUYW1ib3Zza2HvYSBvYmxhc3Q7R2F2cmlsb3Zza2l5IDogMSA6IDE1MzU4CitUYW1ib3Zza2HvYSBvYmxhc3Q7VGFtYm92c2tpeSA6IDEgOiA4MDk3OAorTGlwZXRza2HvYSBvYmxhc3Q7S3Jhc25pbnNraXkgOiAxIDogMTY0ODEKK0xpcGV0c2th72Egb2JsYXN0O0RvYnJvdnNraXkgOiAxIDogMjczMzQKK0xpcGV0c2th72Egb2JsYXN0O1N0YW5vdmx5YW5za2l5IDogMSA6IDIxOTA4CitUYW1ib3Zza2HvYSBvYmxhc3Q7TWljaHVyaW5zayA6IDEgOiAxMjEzNjcKK1RhbWJvdnNrYe9hIG9ibGFzdDtLaXJzYW5vdnNraXkgOiAxIDogMjQ1MzMKK1RhbWJvdnNrYe9hIG9ibGFzdDtSYXNza2F6b3Zza2l5IDogMSA6IDI1MTMxCitMaXBldHNrYe9hIG9ibGFzdDtJem1hbGtvdnNraXkgOiAxIDogMjAzMDAKK1RhbWJvdnNrYe9hIG9ibGFzdDtVbWV0c2tpeSA6IDEgOiAxNDg1OQorTGlwZXRza2HvYSBvYmxhc3Q7TGlwZXRza2l5IDogMSA6IDQ4MjM3CitUYW1ib3Zza2HvYSBvYmxhc3Q7UGV0cm92c2tpeSA6IDEgOiAyNzgyNAorTGlwZXRza2HvYSBvYmxhc3Q7WmFkb25za2l5IDogMSA6IDM4OTkyCitMaXBldHNrYe9hIG9ibGFzdDtZZWxldHNraXkgOiAxIDogMzQzNjkKK1RhbWJvdnNrYe9hIG9ibGFzdDtUYW1ib3YgOiAxIDogMzM0MjgzCitMaXBldHNrYe9hIG9ibGFzdDtMaXBldHNrIDogMSA6IDUwNjg5MAorTGlwZXRza2HvYSBvYmxhc3Q7R3J5YXppbnNraXkgOiAxIDogMjU0MjUKK1RhbWJvdnNrYe9hIG9ibGFzdDtSYXNza2F6b3ZvIDogMSA6IDQ5MDY1CitUYW1ib3Zza2HvYSBvYmxhc3Q7S2lyc2Fub3ZvIDogMSA6IDE5OTQ1CitMaXBldHNrYe9hIG9ibGFzdDtFbGV0eiA6IDEgOiAxMTk0ODcKK1RhbWJvdnNrYe9hIG9ibGFzdDtLb3RvdnNrIDogMSA6IDM5MTkyCitUYW1ib3Zza2HvYSBvYmxhc3Q7Wm5hbWVuc2tpeSA6IDEgOiAyMzAzNworVGFtYm92c2th72Egb2JsYXN0O0luemhhdmluc2tpeSA6IDEgOiAzMzIwOQorTGlwZXRza2HvYSBvYmxhc3Q7R3J5YXp5IDogMSA6IDQ3MjMyCitMaXBldHNrYe9hIG9ibGFzdDtEb2xnb3J1a292c2tpeSA6IDEgOiAyMzUxNgorTGlwZXRza2HvYSBvYmxhc3Q7RG9icmluc2tpeSA6IDEgOiA0MzIxMgorVGFtYm92c2th72Egb2JsYXN0O01vcmRvdnNraXkgOiAxIDogMjc0MjUKK1RhbWJvdnNrYe9hIG9ibGFzdDtTYW1wdXJza2l5IDogMSA6IDE4NzQ5CitUYW1ib3Zza2HvYSBvYmxhc3Q7UnpoYWtzaW5za2l5IDogMSA6IDI0OTMyCitLb3Vyc2th72Egb2JsYXN0O1poZWxlem5vZ29yc2tpeSA6IDEgOiAyMTUwOQorS291cnNrYe9hIG9ibGFzdDtQb255cm92c2tpeSA6IDEgOiAxNTc4MAorS291cnNrYe9hIG9ibGFzdDtEbWl0cml5ZXZza2l5IDogMSA6IDMwMDUyCitMaXBldHNrYe9hIG9ibGFzdDtVc21hbnNraXkgOiAxIDogNTY0NzcKK0xpcGV0c2th72Egb2JsYXN0O0tobGV2ZW5za2l5IDogMSA6IDIzODE3CitLb3Vyc2th72Egb2JsYXN0O0ZhdGV6aHNraXkgOiAxIDogMjc0MzkKK1JVLVVOSy0yODI5IDogMSA6IDkxNzY0CitMaXBldHNrYe9hIG9ibGFzdDtUZXJidW5za2l5IDogMSA6IDI1ODI3CitUYW1ib3Zza2HvYSBvYmxhc3Q7VG9rYXJldnNraXkgOiAxIDogMjU0MzAKK0xpcGV0c2th72Egb2JsYXN0O1ZvbG92c2tpeSA6IDEgOiAxODM5MAorS291cnNrYe9hIG9ibGFzdDtab2xvdHVraGluc2tpeSA6IDEgOiAzMTU2MAorVGFtYm92c2th72Egb2JsYXN0O1V2YXJvdnNraXkgOiAxIDogMTM3NjIKK0tvdXJza2HvYSBvYmxhc3Q7U2NoaWdyb3Zza2l5IDogMSA6IDE3ODkwCitWb3JvbmVqc2th72Egb2JsYXN0O1JhbW9uc2tpeSA6IDEgOiA0MjAxNgorVGFtYm92c2th72Egb2JsYXN0O011Y2hrYXBza2l5IDogMSA6IDIwODQzCitWb3JvbmVqc2th72Egb2JsYXN0O1NlbWlsdWtza2l5IDogMSA6IDczODgwCitUYW1ib3Zza2HvYSBvYmxhc3Q7WmhlcmRldnNraXkgOiAxIDogMzg5OTMKK0tvdXJza2HvYSBvYmxhc3Q7Q2hlcmVtaXNpbm92c2tpeSA6IDEgOiAxNDQ3MworS291cnNrYe9hIG9ibGFzdDtLaG9tdXRvdnNraXkgOiAxIDogMjAyMDIKK1RhbWJvdnNrYe9hIG9ibGFzdDtVdmFyb3ZvIDogMSA6IDM1MjAzCitLb3Vyc2th72Egb2JsYXN0O0tvbnlzaGV2c2tpeSA6IDEgOiAxODQ5MworS291cnNrYe9hIG9ibGFzdDtTb3ZldHNraXkgOiAxIDogMjcxMzcKK0tvdXJza2HvYSBvYmxhc3Q7S2FzdG9yZW5za2l5IDogMSA6IDI4NTQ0CitWb3JvbmVqc2th72Egb2JsYXN0O1ZlcmtobmVraGF2c2tpeSA6IDEgOiAzMDI1NgorVm9yb25lanNrYe9hIG9ibGFzdDtFcnRpbHNraXkgOiAxIDogMzYyODcKK0tvdXJza2HvYSBvYmxhc3Q7S3Vyc2tpeSA6IDEgOiA1MTI1OQorS291cnNrYe9hIG9ibGFzdDtUc2NoaWdyeSA6IDEgOiAyMTUwOQorS291cnNrYe9hIG9ibGFzdDtLdXJjaGF0b3Zza2l5IDogMSA6IDIzOTIxCitWb3JvbmVqc2th72Egb2JsYXN0O1Zvcm9uZXpoIDogMSA6IDk1ODgzMworS291cnNrYe9hIG9ibGFzdDtPa3R5YWJyc2tpeSA6IDEgOiAyNTAyNworVm9yb25lanNrYe9hIG9ibGFzdDtOb3ZvdXNtYW5za2l5IDogMSA6IDY3ODQ5CitWb3JvbmVqc2th72Egb2JsYXN0O1Bhbmluc2tpeSA6IDEgOiAzNTY4NAorS291cnNrYe9hIG9ibGFzdDtMJ2dvdnNreSA6IDEgOiAyMjUxNAorS291cnNrYe9hIG9ibGFzdDtLdXJzayA6IDEgOiA0MzU0MDEKK0tvdXJza2HvYSBvYmxhc3Q7VGltc2tpeSA6IDEgOiAxNjg4NQorS291cnNrYe9hIG9ibGFzdDtSeWxza2l5IDogMSA6IDQ1ODMyCitWb3JvbmVqc2th72Egb2JsYXN0O05pemhuZWRldml0c2tpeSA6IDEgOiAyODY0NworVm9yb25lanNrYe9hIG9ibGFzdDtUZXJub3Zza2l5IDogMSA6IDI5ODU0CitWb3JvbmVqc2th72Egb2JsYXN0O0dyaWJhbm92c2tpeSA6IDEgOiA0MjkyMQorVm9yb25lanNrYe9hIG9ibGFzdDtCb3Jpc29nbGVic2tpeSA6IDEgOiAxNTE3OAorVm9yb25lanNrYe9hIG9ibGFzdDtLaG9raG9sc2tpeSA6IDEgOiAzODE5NworS291cnNrYe9hIG9ibGFzdDtMZ292IDogMSA6IDI1MzI4CitWb3JvbmVqc2th72Egb2JsYXN0O0Fubmluc2tpeSA6IDEgOiA1Njc5MgorS291cnNrYe9hIG9ibGFzdDtLdXJjaGF0b3YgOiAxIDogNDU1MzAKK0tvdXJza2HvYSBvYmxhc3Q7U29sbnRzZXZza2l5IDogMSA6IDIyMjEyCitLb3Vyc2th72Egb2JsYXN0O0dvcnNoZWNoZW5za2l5IDogMSA6IDI1ODMxCitLb3Vyc2th72Egb2JsYXN0O01lZHZlbnNraXkgOiAxIDogMjEyMDcKK0tvdXJza2HvYSBvYmxhc3Q7TWFudHVyb3Zza2l5IDogMSA6IDIwMTAyCitLb3Vyc2th72Egb2JsYXN0O0JvbHNoZXNvbGRhdHNraXkgOiAxIDogMTc5OTEKK0tvdXJza2HvYSBvYmxhc3Q7S29yZW5ldnNraXkgOiAxIDogMjM1MTkKK0tvdXJza2HvYSBvYmxhc3Q7R2x1c2hrb3Zza2l5IDogMSA6IDMxMzU5CitWb3JvbmVqc2th72Egb2JsYXN0O0thc2hpcnNraXkgOiAxIDogMzAwNTUKK1Zvcm9uZWpza2HvYSBvYmxhc3Q7UG92b3JpbnNraXkgOiAxIDogMTg2OTYKK0tvdXJza2HvYSBvYmxhc3Q7U3VkemhhbnNraXkgOiAxIDogMzQzNzQKK0JlbGdvcm9kc2th72Egb2JsYXN0O0d1YmtpbnNraXkgOiAxIDogMzM2NDkKK0JlbGdvcm9kc2th72Egb2JsYXN0O1N0YXJvb3Nrb2xza2l5IDogMSA6IDMzNDQ1CitWb3JvbmVqc2th72Egb2JsYXN0O05vdm9raG9wZXJza2l5IDogMSA6IDUxMDYzCitWb3JvbmVqc2th72Egb2JsYXN0O0Jvcmlzb2dsZWJzayA6IDEgOiA3MDk2NQorVm9yb25lanNrYe9hIG9ibGFzdDtCb2Jyb3Zza2l5IDogMSA6IDU5MTA0CitLb3Vyc2th72Egb2JsYXN0O09ib3lhbnNraXkgOiAxIDogMzk1MDAKK0tvdXJza2HvYSBvYmxhc3Q7UHJpc3RlbnNraXkgOiAxIDogMjQyMjIKK1Zvcm9uZWpza2HvYSBvYmxhc3Q7VGFsb3Zza2l5IDogMSA6IDUxOTY3CitCZWxnb3JvZHNrYe9hIG9ibGFzdDtTdGFyeWkgT3Nrb2wgOiAxIDogMTkyNzk0CitWb3JvbmVqc2th72Egb2JsYXN0O1JlcGl5ZXZrYSA6IDEgOiAxOTcwMQorUlUtVU5LLTI4MzAgOiAxIDogMzg1OTkKK0JlbGdvcm9kc2th72Egb2JsYXN0O0d1YmtpbiA6IDEgOiA4MDI4OAorVm9yb25lanNrYe9hIG9ibGFzdDtMaXNraW5za2l5IDogMSA6IDQ3OTQ3CitLb3Vyc2th72Egb2JsYXN0O0JlbG92c2tpeSA6IDEgOiAyNTEyNworVm9yb25lanNrYe9hIG9ibGFzdDtPc3Ryb2dvemhza2l5IDogMSA6IDMwODU5CitCZWxnb3JvZHNrYe9hIG9ibGFzdDtQcm9raG9yb3Zza2l5IDogMSA6IDMwMzc2CitWb3JvbmVqc2th72Egb2JsYXN0O1Bvdm9yaW5vIDogMSA6IDE4ODk3CitCZWxnb3JvZHNrYe9hIG9ibGFzdDtJdm55YW5za2l5IDogMSA6IDI1MTYwCitCZWxnb3JvZHNrYe9hIG9ibGFzdDtDaGVybnlhbnNraXkgOiAxIDogMzQ1NzAKK1JVLVVOSy0yODMxIDogMSA6IDE2ODc2CitWb3JvbmVqc2th72Egb2JsYXN0O0xpc2tpIDogMSA6IDU0ODgyCitCZWxnb3JvZHNrYe9hIG9ibGFzdDtSYWtpdHlhbnNraXkgOiAxIDogMzYzMDkKK1Zvcm9uZWpza2HvYSBvYmxhc3Q7QnV0dXJsaW5vdnNraXkgOiAxIDogNjA3MTIKK0JlbGdvcm9kc2th72Egb2JsYXN0O0tvcm9jaGFuc2tpeSA6IDEgOiA0MTcyOQorQmVsZ29yb2Rza2HvYSBvYmxhc3Q7S3Jhc25veWFydXpzaHNreSA6IDEgOiAxNDYyNgorQmVsZ29yb2Rza2HvYSBvYmxhc3Q7WWFrb3ZsZXZza2l5IDogMSA6IDQ3ODY2CitCZWxnb3JvZHNrYe9hIG9ibGFzdDtOb3Zvb3Nrb2xza2l5IDogMSA6IDQ4NDgwCitWb3JvbmVqc2th72Egb2JsYXN0O09zdHJvZ296aHNrIDogMSA6IDM2Mjg3CitCZWxnb3JvZHNrYe9hIG9ibGFzdDtLcmFzbm9ndmFyZGV5c2tpeSA6IDEgOiA0NzQ1NworVm9yb25lanNrYe9hIG9ibGFzdDtWb3JvYnlvdnNraXkgOiAxIDogMjM1MjEKK1Zvcm9uZWpza2HvYSBvYmxhc3Q7S2FtZW5za2l5IDogMSA6IDIzMzIwCitWb3JvbmVqc2th72Egb2JsYXN0O1BhdmxvdnNraXkgOiAxIDogNjAyMTAKK0JlbGdvcm9kc2th72Egb2JsYXN0O0JlbGdvcm9kc2tpeSA6IDEgOiA3NDE1MQorQmVsZ29yb2Rza2HvYSBvYmxhc3Q7Qm9yaXNvdnNraXkgOiAxIDogMjU0NjcKK1Zvcm9uZWpza2HvYSBvYmxhc3Q7UG9kZ29yZW5za2l5IDogMSA6IDMyNTY4CitCZWxnb3JvZHNrYe9hIG9ibGFzdDtBbGVrc2V5ZXZza2l5IDogMSA6IDI4ODQyCitCZWxnb3JvZHNrYe9hIG9ibGFzdDtTaGViZWtpbnNraXkgOiAxIDogNDUwMDIKK0JlbGdvcm9kc2th72Egb2JsYXN0O0dyYWl2b3JvbnNraXkgOiAxIDogMjczMDgKK1Zvcm9uZWpza2HvYSBvYmxhc3Q7S2FsYWNoZXlldnNraXkgOiAxIDogNjQzMzEKK0JlbGdvcm9kc2th72Egb2JsYXN0O0FsZWtzZWV2a2EgOiAxIDogMzg0NTYKK0JlbGdvcm9kc2th72Egb2JsYXN0O0JlbGdvcm9kIDogMSA6IDMyMDIzMgorQmVsZ29yb2Rza2HvYSBvYmxhc3Q7Vm9sb2tvbm92c2tpeSA6IDEgOiAzNzg0MworVm9yb25lanNrYe9hIG9ibGFzdDtPbGtob3ZhdHNraXkgOiAxIDogMjY0MzYKK1Zvcm9uZWpza2HvYSBvYmxhc3Q7VmVya2huZW1hbW9uc2tpeSA6IDEgOiAyMzUyMQorQmVsZ29yb2Rza2HvYSBvYmxhc3Q7U2hlYmVraW5vIDogMSA6IDQ2MDI1CitCZWxnb3JvZHNrYe9hIG9ibGFzdDtWYWx1eXNraXkgOiAxIDogMzg2NjEKK1Zvcm9uZWpza2HvYSBvYmxhc3Q7Um9zc29zaGFuc2tpeSA6IDEgOiAzMTg2NAorQmVsZ29yb2Rza2HvYSBvYmxhc3Q7VmV5ZGVsZXZza2l5IDogMSA6IDI1ODc2CitWb3JvbmVqc2th72Egb2JsYXN0O1BldHJvcGF2bG92c2tpeSA6IDEgOiAyNTYzMgorQmVsZ29yb2Rza2HvYSBvYmxhc3Q7Um92ZW5za2l5IDogMSA6IDI1ODc2CitWb3JvbmVqc2th72Egb2JsYXN0O1Jvc3Nvc2ggOiAxIDogNjA0MTEKK0JlbGdvcm9kc2th72Egb2JsYXN0O1ZhbHVpa3kgOiAxIDogMzUyODYKK1Zvcm9uZWpza2HvYSBvYmxhc3Q7Qm9ndWNoYXJza2l5IDogMSA6IDM2MTg2CitWb3JvbmVqc2th72Egb2JsYXN0O0thbnRlbWlyb3Zza2l5IDogMSA6IDQzMjIyCitSVS1VTkstMjgzMiA6IDEgOiA5MTc2NAorUlUtVU5LLTI4MzMgOiAxIDogMzg1OTkKK1JVLVVOSy0yODM0IDogMSA6IDE2ODc2CitZYWtvdXRpYS1TYWhhIHJlc3BvdWJsaWthO0FuYWJhcnNraXkgOiAxIDogMzg0MgorWWFrb3V0aWEtU2FoYSByZXNwb3VibGlrYTtCdWx1bnNraXkgOiAxIDogMTQwMjQKK1lha291dGlhLVNhaGEgcmVzcG91Ymxpa2E7VXN0LVlhbnNraXkgOiAxIDogMjk4NzIKK1lha291dGlhLVNhaGEgcmVzcG91Ymxpa2E7QWxsYWlraG92c2tpeSA6IDEgOiA0OTk1CitZYWtvdXRpYS1TYWhhIHJlc3BvdWJsaWthO09sZW5la3NraXkgOiAxIDogNDEzMAorWWFrb3V0aWEtU2FoYSByZXNwb3VibGlrYTtOaXpobmVrb2x5bXNraXkgOiAxIDogMTEyMzgKK1RjaG91a290c2tpIG5hdC4gb2tyb3VnO0NoYXVuc2tpeSA6IDEgOiAxOTMzMgorWWFrb3V0aWEtU2FoYSByZXNwb3VibGlrYTtWZXJraG95YW5za2l5IDogMSA6IDE5NTk1CitUY2hvdWtvdHNraSBuYXQuIG9rcm91ZztTaG1pZHRvdnNraXkgOiAxIDogOTk0MAorWWFrb3V0aWEtU2FoYSByZXNwb3VibGlrYTtTcmVkbmVrb2x5bXNraXkgOiAxIDogOTYwNQorVGNob3Vrb3Rza2kgbmF0LiBva3JvdWc7QmlsaWJpbnNraXkgOiAxIDogMTg1NDkKK1JVLVVOSy0yODM1IDogMSA6IDI4ODIKK1lha291dGlhLVNhaGEgcmVzcG91Ymxpa2E7QWJ5aXNraXkgOiAxIDogNTY2NworWWFrb3V0aWEtU2FoYSByZXNwb3VibGlrYTtaaGlnYW5za2l5IDogMSA6IDU0NzUKK1RjaG91a290c2tpIG5hdC4gb2tyb3VnO0l1bHRpbnNraXkgOiAxIDogOTk0MAorVGNob3Vrb3Rza2kgbmF0LiBva3JvdWc7QW5hZHlyc2tpeSA6IDEgOiAxNTQxOQorWWFrb3V0aWEtU2FoYSByZXNwb3VibGlrYTtNb21za2l5IDogMSA6IDU1NzEKK1lha291dGlhLVNhaGEgcmVzcG91Ymxpa2E7VmVya2hla29seW1za2l5IDogMSA6IDg5MzMKK1RjaG91a290c2tpIG5hdC4gb2tyb3VnO0NodWtvdHNraXkgOiAxIDogNDc3NAorWWFrb3V0aWEtU2FoYSByZXNwb3VibGlrYTtWaWx5dXlza2l5IDogMSA6IDI3NzU5CitZYWtvdXRpYS1TYWhhIHJlc3BvdWJsaWthO01pcm5pbnNraXkgOiAxIDogNTA5MDgKK1RjaG91a290c2tpIG5hdC4gb2tyb3VnO1Byb3ZpZGVuc2tpeSA6IDEgOiA2NTc0CitZYWtvdXRpYS1TYWhhIHJlc3BvdWJsaWthO1ZlcmtobmV2aWx5dWlza2l5IDogMSA6IDIwNzQ3CitZYWtvdXRpYS1TYWhhIHJlc3BvdWJsaWthO0tvYnlheXNraXkgOiAxIDogMTgyNTAKK01hZ2FkYW5za2HvYSBvYmxhc3QgculzaWQ7U3JlZG5la2Fuc2tpeSA6IDEgOiAxMTA2MQorWWFrb3V0aWEtU2FoYSByZXNwb3VibGlrYTtUb21wb25za2l5IDogMSA6IDIwNDU5CitZYWtvdXRpYS1TYWhhIHJlc3BvdWJsaWthO0xlbmluc2tpeSA6IDEgOiAyODgxNgorTWFnYWRhbnNrYe9hIG9ibGFzdCBy6XNpZDtTZXZlcm8tRXZlbnNraXkgOiAxIDogNjI0OAorWWFrb3V0aWEtU2FoYSByZXNwb3VibGlrYTtPeW15YWtvbnNraXkgOiAxIDogMjgzMzUKK01hZ2FkYW5za2HvYSBvYmxhc3QgculzaWQ7T21zdWtjaGFuc2tpeSA6IDEgOiAxMjY2NQorS29yaWFrc2tpIG5hdGlvbmFsIG9rcm91ZztQZW56aGluc2tpeSA6IDEgOiA0NTA5CitUY2hvdWtvdHNraSBuYXQuIG9rcm91ZztBbmFkeXInIDogMSA6IDExODk3CitNYWdhZGFuc2th72Egb2JsYXN0IHLpc2lkO1N1c3VtYW5za2l5IDogMSA6IDMxODMyCitUY2hvdWtvdHNraSBuYXQuIG9rcm91ZztCZXJpbmdvdnNraXkgOiAxIDogNTg3MAorWWFrb3V0aWEtU2FoYSByZXNwb3VibGlrYTtTdW50YXJza2l5IDogMSA6IDI2MDMwCitZYWtvdXRpYS1TYWhhIHJlc3BvdWJsaWthO1VzdC1BbGRhbnNraXkgOiAxIDogMjE3MDgKK01hZ2FkYW5za2HvYSBvYmxhc3QgculzaWQ7WWFnb2RuaW5za2l5IDogMSA6IDM1MjA5CitZYWtvdXRpYS1TYWhhIHJlc3BvdWJsaWthO05hbXNraXkgOiAxIDogMTg0NDIKK1lha291dGlhLVNhaGEgcmVzcG91Ymxpa2E7VGF0dGluc2tpeSA6IDEgOiAxNjUyMQorWWFrb3V0aWEtU2FoYSByZXNwb3VibGlrYTtHb3JueWkgOiAxIDogMTAxODIKK1lha291dGlhLVNhaGEgcmVzcG91Ymxpa2E7VXN0LU1heXNraXkgOiAxIDogMTk0OTkKK0tvcmlha3NraSBuYXRpb25hbCBva3JvdWc7T2x5dXRvcnNraXkgOiAxIDogMTA4MjIKK0toYWJhcm92c2tpIGtyYe8gculzaWR1ZWw7T2tob3Rza2l5IDogMSA6IDE4Mjk5CitNYWdhZGFuc2th72Egb2JsYXN0IHLpc2lkO1RlbmtpbnNraXkgOiAxIDogMTY4ODcKK1lha291dGlhLVNhaGEgcmVzcG91Ymxpa2E7TWlybnkgOiAxIDogMzg1MTcKK1lha291dGlhLVNhaGEgcmVzcG91Ymxpa2E7Q2h1cmFwY2hpbnNraXkgOiAxIDogMTg1MzgKK1lha291dGlhLVNhaGEgcmVzcG91Ymxpa2E7TWVnaW5vLUthbmdhbGFzc2tpeSA6IDEgOiAzMTMxMworWWFrb3V0aWEtU2FoYSByZXNwb3VibGlrYTtZYWt1dHNrIDogMSA6IDIyMDgyNAorTWFnYWRhbnNrYe9hIG9ibGFzdCBy6XNpZDtLaGFzeW5za2l5IDogMSA6IDIyMDM3CitZYWtvdXRpYS1TYWhhIHJlc3BvdWJsaWthO09yZHpob25pa2lkemV2c2tpeSA6IDEgOiAzNTE1NQorWWFrb3V0aWEtU2FoYSByZXNwb3VibGlrYTtPbGVrbWluc2tpeSA6IDEgOiAzMDQ0OQorWWFrb3V0aWEtU2FoYSByZXNwb3VibGlrYTtMZW5za2l5IDogMSA6IDQ4NTA2CitZYWtvdXRpYS1TYWhhIHJlc3BvdWJsaWthO0FtZ2luc2tpeSA6IDEgOiAxNjIzMworTWFnYWRhbnNrYe9hIG9ibGFzdCBy6XNpZDtPbHNraXkgOiAxIDogMTYxMjcKK1lha291dGlhLVNhaGEgcmVzcG91Ymxpa2E7QWxkYW5za2l5IDogMSA6IDU5MzYwCitLb3JpYWtza2kgbmF0aW9uYWwgb2tyb3VnO0thcmFnaW5za2l5IDogMSA6IDgyOTcKK0tvcmlha3NraSBuYXRpb25hbCBva3JvdWc7VGlnaWxza2l5IDogMSA6IDEwOTEyCitNYWdhZGFuc2th72Egb2JsYXN0IHLpc2lkO01hZ2FkYW4gOiAxIDogMTI4OTMxCitLaGFiYXJvdnNraSBrcmHvIHLpc2lkdWVsO0F5YW5vLU1heXNraXkgOiAxIDogNDYyNAorWWFrb3V0aWEtU2FoYSByZXNwb3VibGlrYTtOZXJpdW5ncmkgOiAxIDogMTExMjI4CitLYW10Y2hhdHNrYe9hIG9ibGFzdCBy6XNpO1VzdC1LYW1jaGF0c2tpeSA6IDEgOiAyNTExMgorQW1vdXJza2HvYSBvYmxhc3Q7VHluZGluc2tpeSA6IDEgOiAzMDE2OQorS2FtdGNoYXRza2HvYSBvYmxhc3QgculzaTtCeXN0cmluc2tpeSA6IDEgOiAyNzgwCitLYW10Y2hhdHNrYe9hIG9ibGFzdCBy6XNpO01pbGtvdnNraXkgOiAxIDogMTQ5MTkKK0thbXRjaGF0c2th72Egb2JsYXN0IHLpc2k7U29ib2xldnNraXkgOiAxIDogNDkxMQorS2hhYmFyb3Zza2kga3Jh7yBy6XNpZHVlbDtUdWd1cm8tQ2h1bWlrYW5za2l5IDogMSA6IDMyNDcKK0Ftb3Vyc2th72Egb2JsYXN0O1pleXNraXkgOiAxIDogMjgxOTEKK0thbXRjaGF0c2th72Egb2JsYXN0IHLpc2k7QWxldXRza2l5IDogMSA6IDEyMDUKK0Ftb3Vyc2th72Egb2JsYXN0O1R5bmRhIDogMSA6IDU2Nzc4CitLYW10Y2hhdHNrYe9hIG9ibGFzdCBy6XNpO1llbGl6b3Zza2l5IDogMSA6IDI2NDEwCitBbW91cnNrYe9hIG9ibGFzdDtTa292b3JvZGluc2tpeSA6IDEgOiA0MTk0MAorU2FraGFsaW5za2HvYSBvYmxhc3Q7T2toaW5za2l5IDogMSA6IDE2OTU1CitLaGFiYXJvdnNraSBrcmHvIHLpc2lkdWVsO05pa29sYXlldnNraXkgOiAxIDogMTk5NzEKK0Ftb3Vyc2th72Egb2JsYXN0O01hZ2RhZ2FjaGluc2tpeSA6IDEgOiAzMzkyOAorQW1vdXJza2HvYSBvYmxhc3Q7U2VsZW1kemhpbnNraXkgOiAxIDogMTk3ODMKK0Ftb3Vyc2th72Egb2JsYXN0O1pleWEgOiAxIDogMzIzNDYKK0thbXRjaGF0c2th72Egb2JsYXN0IHLpc2k7VXN0LUJvbHNoZXJldHNraXkgOiAxIDogMTI2OTUKK0toYWJhcm92c2tpIGtyYe8gculzaWR1ZWw7UG9saW55IE9zaXBlbmtvLiBpbWVuaSA6IDEgOiA4MDY3CitTYWtoYWxpbnNrYe9hIG9ibGFzdDtPa2hhIDogMSA6IDM0Mzc5CitBbW91cnNrYe9hIG9ibGFzdDtNYXphbm92c2tpeSA6IDEgOiAyMTE2OAorS2hhYmFyb3Zza2kga3Jh7yBy6XNpZHVlbDtVbGNoc2tpeSA6IDEgOiAyOTIxOQorS2FtdGNoYXRza2HvYSBvYmxhc3QgculzaTtFbGl6b3ZvIDogMSA6IDQ0Mjk0CitLaGFiYXJvdnNraSBrcmHvIHLpc2lkdWVsO05pa29sYXlldnNrLU5hLUFtdXJlIDogMSA6IDM2MDA3CitLYW10Y2hhdHNrYe9hIG9ibGFzdCBy6XNpO1BldHJvcGF2bG92c2stS2FtY2hhdHNrIDogMSA6IDI2MDY2NgorQW1vdXJza2HvYSBvYmxhc3Q7U2hpbWFub3Zza2l5IDogMSA6IDk0OTYKK1Nha2hhbGluc2th72Egb2JsYXN0O05vZ2xpa3NraXkgOiAxIDogMTU4MzEKK0toYWJhcm92c2tpIGtyYe8gculzaWR1ZWw7VmVya2huZWJ1cmVpbnNraXkgOiAxIDogNDQ3NjMKK0toYWJhcm92c2tpIGtyYe8gculzaWR1ZWw7U29sbmVjaG55aSA6IDEgOiA0NTE1NgorQW1vdXJza2HvYSBvYmxhc3Q7U2hpbWFub3ZzayA6IDEgOiAyNjMxMgorU2FraGFsaW5za2HvYSBvYmxhc3Q7QWxleGFuZHJvdnNrLVNha2hhbGluc2tpeSA6IDEgOiA3OTYyCitBbW91cnNrYe9hIG9ibGFzdDtTdm9ib2RuZW5za2l5IDogMSA6IDE3NTA4CitTYWtoYWxpbnNrYe9hIG9ibGFzdDtUeW1vdnNraXkgOiAxIDogMjQzNTUKK0toYWJhcm92c2tpIGtyYe8gculzaWR1ZWw7S29tc29tb2xza2l5IDogMSA6IDMzNTQ3CitBbW91cnNrYe9hIG9ibGFzdDtTZXJ5c2hldnNraXkgOiAxIDogMzY2OTgKK0Ftb3Vyc2th72Egb2JsYXN0O1JvbW5lbnNraXkgOiAxIDogMTUyMzMKK0Ftb3Vyc2th72Egb2JsYXN0O1N2b2JvZG55aSA6IDEgOiA4MDIyMQorQW1vdXJza2HvYSBvYmxhc3Q7QmxhZ292ZXNjaGVuc2tpeSA6IDEgOiAxODk5MgorS2hhYmFyb3Zza2kga3Jh7yBy6XNpZHVlbDtWYW5pbnNraXkgOiAxIDogNTA4NjIKK0Ftb3Vyc2th72Egb2JsYXN0O0JlbG9nb3Jza2l5IDogMSA6IDI5Mzc4CitBbW91cnNrYe9hIG9ibGFzdDtCZWxvZ29yc2sgOiAxIDogNzQyODYKK1Nha2hhbGluc2th72Egb2JsYXN0O1NldmVyby1LdXJpbHNraXkgOiAxIDogNDY4NAorU2FraGFsaW5za2HvYSBvYmxhc3Q7QWxla3MuLVNha2hhbGluc2tpeSA6IDEgOiAxODE3MworQW1vdXJza2HvYSBvYmxhc3Q7SXZhbm92c2tpeSA6IDEgOiAzNDQyMworQW1vdXJza2HvYSBvYmxhc3Q7QnVyZXlza2l5IDogMSA6IDI5OTcyCitLaGFiYXJvdnNraSBrcmHvIHLpc2lkdWVsO0tvbXNvbW9sc2stTmEtQW11cmUgOiAxIDogMzExMDc1CitBbW91cnNrYe9hIG9ibGFzdDtPa3R5YWJyc2tpeSA6IDEgOiAyNDQzMgorQW1vdXJza2HvYSBvYmxhc3Q7WmF2aXRpbnNraXkgOiAxIDogMzA1NjUKK0toYWJhcm92c2tpIGtyYe8gculzaWR1ZWw7S2hhYmFyb3Zza2l5IDogMSA6IDc3NzIwCitLaGFiYXJvdnNraSBrcmHvIHLpc2lkdWVsO0FtdXJza2l5IDogMSA6IDMwMzk5CitTYWtoYWxpbnNrYe9hIG9ibGFzdDtTbWlybnlraG92c2tpeSA6IDEgOiAxOTU3OAorQW1vdXJza2HvYSBvYmxhc3Q7QmxhZ292ZXNjaGVuc2sgOiAxIDogMjEzMDY1CitBbW91cnNrYe9hIG9ibGFzdDtUYW1ib3Zza2l5IDogMSA6IDI1OTE2CitLaGFiYXJvdnNraSBrcmHvIHLpc2lkdWVsO0FtdXJzayA6IDEgOiA1OTEyNgorQW1vdXJza2HvYSBvYmxhc3Q7QXJraGFyaW5za2l5IDogMSA6IDI2NzA3CitBbW91cnNrYe9hIG9ibGFzdDtNaWtoYXlsb3Zza2l5IDogMSA6IDIxMDY5CitLaGFiYXJvdnNraSBrcmHvIHLpc2lkdWVsO05hbmF5c2tpeSA6IDEgOiAyMTg0MAorQW1vdXJza2HvYSBvYmxhc3Q7S29uc3RhbnRpbm92c2tpeSA6IDEgOiAxNzIxMQorU2FraGFsaW5za2HvYSBvYmxhc3Q7UG9yb25heXNraXkgOiAxIDogMTY2NzQKK0Ftb3Vyc2th72Egb2JsYXN0O1JheWNoaWtoaW5zayA6IDEgOiA0NzY3NworU2FraGFsaW5za2HvYSBvYmxhc3Q7VWdsZWdvcnNraXkgOiAxIDogMjY0MTYKK0V2cmXvc2th72Egb2JsYXN0O09ibHVjaGVuc2tpeSA6IDEgOiA0MDEzNworU2FraGFsaW5za2HvYSBvYmxhc3Q7UG9yb25heXNrIDogMSA6IDIzNDE5CitLaGFiYXJvdnNraSBrcmHvIHLpc2lkdWVsO1NvdmV0c2tvLUdhdmFuc2tpeSA6IDEgOiAyNDk4OAorU2FraGFsaW5za2HvYSBvYmxhc3Q7TWFrYXJvdnNraXkgOiAxIDogMTQxNDUKK1Nha2hhbGluc2th72Egb2JsYXN0O1VnbGVnb3JzayA6IDEgOiAxNzk4NgorRXZyZe9za2HvYSBvYmxhc3Q7Qmlyb2JpZHpoYW5za2l5IDogMSA6IDE1MzMyCitLaGFiYXJvdnNraSBrcmHvIHLpc2lkdWVsO1NvdmV0c2theWEgR2F2YW4gOiAxIDogMzQxMzgKK0V2cmXvc2th72Egb2JsYXN0O1NtaWRvdmljaHNraXkgOiAxIDogMjk0OTIKK0toYWJhcm92c2tpIGtyYe8gculzaWR1ZWw7TGF6by4gaW1lbmkgOiAxIDogNjI1NjkKK0V2cmXvc2th72Egb2JsYXN0O0Jpcm9iaWR6aGFuIDogMSA6IDgzMzAwCitTYWtoYWxpbnNrYe9hIG9ibGFzdDtUb21hcmluc2tpeSA6IDEgOiAxNjU4MAorRXZyZe9za2HvYSBvYmxhc3Q7T2t0eWFicnNraXkgOiAxIDogMTY2MDIKK0toYWJhcm92c2tpIGtyYe8gculzaWR1ZWw7S2hhYmFyb3ZzayA6IDEgOiA2MTA1NDIKK0V2cmXvc2th72Egb2JsYXN0O0xlbmluc2tpeSA6IDEgOiAyNzUzOQorUHJpbW9yc2tpIGtyYe87VGVybmV5c2tpeSA6IDEgOiAxNTU5OAorU2FraGFsaW5za2HvYSBvYmxhc3Q7RG9saW5za2l5IDogMSA6IDIwNzk2CitLaGFiYXJvdnNraSBrcmHvIHLpc2lkdWVsO1Z5YXplbXNraXkgOiAxIDogMjk1MTQKK1Nha2hhbGluc2th72Egb2JsYXN0O0tob2xtc2tpeSA6IDEgOiAxOTI5NworU2FraGFsaW5za2HvYSBvYmxhc3Q7RG9saW5zayA6IDEgOiAxNDg5NAorUHJpbW9yc2tpIGtyYe87UG96aGFyc2tpeSA6IDEgOiAzNzUxNAorS2hhYmFyb3Zza2kga3Jh7yBy6XNpZHVlbDtCaWtpbnNraXkgOiAxIDogMTA0MjgKK1Nha2hhbGluc2th72Egb2JsYXN0O1l1emhuby1TYWtoYWxpbnNrIDogMSA6IDE2MDY1MgorU2FraGFsaW5za2HvYSBvYmxhc3Q7S3VyaWxza2l5IDogMSA6IDk2NDkKK1Nha2hhbGluc2th72Egb2JsYXN0O0tvcnNha292c2tpeSA6IDEgOiAxMDU4NQorU2FraGFsaW5za2HvYSBvYmxhc3Q7QW5pdnNraXkgOiAxIDogMzY2MjcKK1Nha2hhbGluc2th72Egb2JsYXN0O0tob2xtc2sgOiAxIDogNDc1ODcKK1Nha2hhbGluc2th72Egb2JsYXN0O05ldmVsc2tpeSA6IDEgOiAxMjE3OAorS2hhYmFyb3Zza2kga3Jh7yBy6XNpZHVlbDtCaWtpbiA6IDEgOiAxODAwMworU2FraGFsaW5za2HvYSBvYmxhc3Q7TmV2ZWwnc2sgOiAxIDogMjMzMjUKK1Nha2hhbGluc2th72Egb2JsYXN0O0tvcnNha292IDogMSA6IDQzMjc4CitQcmltb3Jza2kga3Jh7ztLcmFzbm9hcm1leXNraXkgOiAxIDogMjc1NDMKK1ByaW1vcnNraSBrcmHvO0RhbG5lcmVjaGVuc2tpeSA6IDEgOiAxNzA3OQorUHJpbW9yc2tpIGtyYe87RGFsbmVyZWNoZW5zayA6IDEgOiAzOTA5MworUHJpbW9yc2tpIGtyYe87TGVzb3phdm9kc2tpeSA6IDEgOiAxMjgzNAorUHJpbW9yc2tpIGtyYe87TGVzb3phdm9kc2sgOiAxIDogNDQ2MjIKK1ByaW1vcnNraSBrcmHvO0toYW5rYXlza2l5IDogMSA6IDI5NzE1CitQcmltb3Jza2kga3Jh7ztLaXJvdnNraXkgOiAxIDogMjg1MzAKK1ByaW1vcnNraSBrcmHvO0RhbG5lZ29yc2tpeSA6IDEgOiAxMzQyNgorUHJpbW9yc2tpIGtyYe87U3Bhc3NraXkgOiAxIDogMzE5ODUKK1ByaW1vcnNraSBrcmHvO0NodWd1eWV2c2tpeSA6IDEgOiAzMTM5MworUHJpbW9yc2tpIGtyYe87UG9ncmFuaWNobnlpIDogMSA6IDI2ODUyCitQcmltb3Jza2kga3Jh7ztZYWtvdmxldnNraXkgOiAxIDogMjEzMjQKK1ByaW1vcnNraSBrcmHvO0thdmFsZXJvdnNraXkgOiAxIDogMzYyMzAKK1ByaW1vcnNraSBrcmHvO0tob3JvbHNraXkgOiAxIDogNDM0MzcKK1ByaW1vcnNraSBrcmHvO0RhbG5lZ29yc2sgOiAxIDogNTAzNDcKK1ByaW1vcnNraSBrcmHvO1NwYXNzay1EYWxuaXkgOiAxIDogNjA2MTQKK1ByaW1vcnNraSBrcmHvO0NoZXJuaWdvdnNraXkgOiAxIDogNDU1MTAKK1Nha2hhbGluc2th72Egb2JsYXN0O1l1emhuby1LdXJpbHNraXkgOiAxIDogMTMzMDIKK1ByaW1vcnNraSBrcmHvO0FudWNoaW5za2l5IDogMSA6IDE4NzU3CitQcmltb3Jza2kga3Jh7ztNaWtoYXlsb3Zza2l5IDogMSA6IDQ0NDI0CitQcmltb3Jza2kga3Jh7ztPa3R5YWJyc2tpeSA6IDEgOiAzOTk4MgorUHJpbW9yc2tpIGtyYe87QXJzZW55ZXYgOiAxIDogNzAzODgKK1ByaW1vcnNraSBrcmHvO09sZ2luc2t5IDogMSA6IDE1OTkzCitQcmltb3Jza2kga3Jh7ztVc3N1cml5c2tpeSA6IDEgOiAzMTA5NworUlUtVU5LLTI4MzYgOiAxIDogMTU5MTM3CitQcmltb3Jza2kga3Jh7ztQYXJ0aXphbnNraXkgOiAxIDogMjk0MTkKK1ByaW1vcnNraSBrcmHvO1Noa290b3Zza2l5IDogMSA6IDMyMjgyCitQcmltb3Jza2kga3Jh7ztOYWRlemhkaW5za2l5IDogMSA6IDQyOTQzCitQcmltb3Jza2kga3Jh7ztMYXpvdnNraXkgOiAxIDogMjA2MzMKK1ByaW1vcnNraSBrcmHvO0FydHlvbSA6IDEgOiAxMTM5MjMKK1ByaW1vcnNraSBrcmHvO1BhcnRpemFuc2sgOiAxIDogNjA0MTcKK1ByaW1vcnNraSBrcmHvO0toYXNhbnNraXkgOiAxIDogNDQ5MTgKK1ByaW1vcnNraSBrcmHvO1ZsYWRpdm9zdG9rIDogMSA6IDY1OTI1NAorUHJpbW9yc2tpIGtyYe87Qm9sc2hveSBLYW1lbiA6IDEgOiA4MDc1MworUHJpbW9yc2tpIGtyYe87TmFraG9ka2EgOiAxIDogMTkyMDExCitSVS1VTkstMjgzNyA6IDEgOiAyODgyCitSVS1VTkstMjgzOCA6IDEgOiAxNTkxMzcKK0tpcm92c2th72Egb2JsYXN0O0x1enNraXkgOiAxIDogMjU3OTUKK0tpcm92c2th72Egb2JsYXN0O1BvZG9zaW5vdnNraXkgOiAxIDogMjU0MDUKK0tpcm92c2th72Egb2JsYXN0O1ZlcmtobmVrYW1za2l5IDogMSA6IDUwNjE2CitLaXJvdnNrYe9hIG9ibGFzdDtPcGFyaW5za2l5IDogMSA6IDE2NjQ1CitLaXJvdnNrYe9hIG9ibGFzdDtOYWdvcnNraXkgOiAxIDogMTU4NjYKK0tpcm92c2th72Egb2JsYXN0O011cmFzaGluc2tpeSA6IDEgOiAxODc4NgorS2lyb3Zza2HvYSBvYmxhc3Q7QmVsb2tob2x1bml0c2tpeSA6IDEgOiAyNjI4MQorS2lyb3Zza2HvYSBvYmxhc3Q7QWZhbmFzeWV2c2tpeSA6IDEgOiAxODk4MQorS2lyb3Zza2HvYSBvYmxhc3Q7RGFyb3Zza2l5IDogMSA6IDE4MTA1CitLaXJvdnNrYe9hIG9ibGFzdDtTbG9ib2Rza295IDogMSA6IDM2MzA3CitLaXJvdnNrYe9hIG9ibGFzdDtZdXJ5YW5za2l5IDogMSA6IDMzNjc5CitLaXJvdnNrYe9hIG9ibGFzdDtPbXV0bmluc2tpeSA6IDEgOiA1NzgxOQorS2lyb3Zza2HvYSBvYmxhc3Q7S2hhbHR1cmluc2tpeSA6IDEgOiAxOTQ2OAorS2lyb3Zza2HvYSBvYmxhc3Q7U2hhYmFsaW5za2l5IDogMSA6IDE2NTQ3CitLaXJvdnNrYe9hIG9ibGFzdDtLb3RlbG5pY2hza2l5IDogMSA6IDI0OTE5CitLaXJvdnNrYe9hIG9ibGFzdDtLaXJvdiA6IDEgOiA1MDg5ODEKK0tpcm92c2th72Egb2JsYXN0O0tpcm92by1DaGVwZXRza2l5IDogMSA6IDM2MTEyCitLaXJvdnNrYe9hIG9ibGFzdDtadXlldnNraXkgOiAxIDogMzMzODcKK0tpcm92c2th72Egb2JsYXN0O1N2ZWNoaW5za2l5IDogMSA6IDExNDg2CitLaXJvdnNrYe9hIG9ibGFzdDtGYWxlbnNraXkgOiAxIDogMTcxMzIKK0tpcm92c2th72Egb2JsYXN0O09yaWNoZXZza2l5IDogMSA6IDM1MDQyCitLaXJvdnNrYe9hIG9ibGFzdDtLaXJvdm8tQ2hlcGV0cyA6IDEgOiA5NzgyNQorS2lyb3Zza2HvYSBvYmxhc3Q7S3VtZW5za2l5IDogMSA6IDE5OTU0CitLaXJvdnNrYe9hIG9ibGFzdDtLb3RlbG5pY2gnIDogMSA6IDM1NDMxCitLaXJvdnNrYe9hIG9ibGFzdDtWZXJraG9zaGl6aGVtc2tpeSA6IDEgOiAxMjQ1OQorTmlqZWdvcm9kc2th72Egb2JsYXN0IChHbztWZXRsdXpoc2tpeSA6IDEgOiAyMjE5NworTmlqZWdvcm9kc2th72Egb2JsYXN0IChHbztTaGFraHVuc2tpeSA6IDEgOiA1MDExOAorTmlqZWdvcm9kc2th72Egb2JsYXN0IChHbztUb25zaGF5ZXZza2l5IDogMSA6IDE5MDgzCitLaXJvdnNrYe9hIG9ibGFzdDtCb2dvcm9kc2tpeSA6IDEgOiA4NDY4CitLaXJvdnNrYe9hIG9ibGFzdDtBcmJhemhza2l5IDogMSA6IDExMzg5CitLaXJvdnNrYe9hIG9ibGFzdDtTdW5za2l5IDogMSA6IDEwMDI2CitLaXJvdnNrYe9hIG9ibGFzdDtOb2xpbnNraXkgOiAxIDogMjgwMzMKK0tpcm92c2th72Egb2JsYXN0O1R1emhpbnNraXkgOiAxIDogMTE5NzMKK0tpcm92c2th72Egb2JsYXN0O1VuaW5za2l5IDogMSA6IDEyODQ5CitLaXJvdnNrYe9hIG9ibGFzdDtTb3ZldHNraXkgOiAxIDogMzQ5NDQKK0tpcm92c2th72Egb2JsYXN0O05lbXNraXkgOiAxIDogMTEyOTEKK05pamVnb3JvZHNrYe9hIG9ibGFzdCAoR287VmFybmF2aW5za2l5IDogMSA6IDE0NjY0CitOaWplZ29yb2Rza2HvYSBvYmxhc3QgKEdvO1VyZW5za2l5IDogMSA6IDM2NDU5CitLaXJvdnNrYe9hIG9ibGFzdDtQaXpoYW5za2l5IDogMSA6IDE1MTg1CitOaWplZ29yb2Rza2HvYSBvYmxhc3QgKEdvO1RvbmtpbnNraXkgOiAxIDogMTI3NTYKK0tpcm92c2th72Egb2JsYXN0O0tpa251cnNraXkgOiAxIDogMTUzNzkKK05pamVnb3JvZHNrYe9hIG9ibGFzdCAoR287S292ZXJuaW5za2l5IDogMSA6IDI0NDA2CitLaXJvdnNrYe9hIG9ibGFzdDtMZWJ5YXpoc2tpeSA6IDEgOiAxMjk0NgorS2lyb3Zza2HvYSBvYmxhc3Q7S2lsbWV6c2tpeSA6IDEgOiAxODc4NgorS2lyb3Zza2HvYSBvYmxhc3Q7WWFyYW5za2l5IDogMSA6IDM2Nzk0CitLaXJvdnNrYe9hIG9ibGFzdDtVcnpodW1za2l5IDogMSA6IDM3ODY1CitOaWplZ29yb2Rza2HvYSBvYmxhc3QgKEdvO1NlbXlvbm92c2tpeSA6IDEgOiA1NzI0OQorTmlqZWdvcm9kc2th72Egb2JsYXN0IChHbztTaGFyYW5nc2tpeSA6IDEgOiAxNTI2NgorTmlqZWdvcm9kc2th72Egb2JsYXN0IChHbztLcmFzbm9iYWtvdnNraXkgOiAxIDogMjY5MTcKK01hcml5c2th72EgcmVzcG91Ymxpa2E7U2VybnVyc2tpeSA6IDEgOiAyODU1NQorS2lyb3Zza2HvYSBvYmxhc3Q7U2FuY2h1cnNraXkgOiAxIDogMTcxMzIKK05pamVnb3JvZHNrYe9hIG9ibGFzdCAoR287Vm9za3Jlc2Vuc2tpeSA6IDEgOiAyOTMyOAorTWFyaXlza2HvYSByZXNwb3VibGlrYTtOb3ZvdGFyeWFsc2tpeSA6IDEgOiAyMDQzOQorTWFyaXlza2HvYSByZXNwb3VibGlrYTtPcnNoYW5za2l5IDogMSA6IDE2ODMyCitNYXJpeXNrYe9hIHJlc3BvdWJsaWthO01hcmktVHVyZWtza2l5IDogMSA6IDI4NjU1CitOaWplZ29yb2Rza2HvYSBvYmxhc3QgKEdvO0dvcm9kZXRza2l5IDogMSA6IDY5MDAwCitNYXJpeXNrYe9hIHJlc3BvdWJsaWthO0tpbGVtYXJza2l5IDogMSA6IDE2NjMyCitNYXJpeXNrYe9hIHJlc3BvdWJsaWthO1NvdmV0c2tpeSA6IDEgOiAzMzg2NQorTWFyaXlza2HvYSByZXNwb3VibGlrYTtQYXJhbmdpbnNraXkgOiAxIDogMjAwMzgKK01hcml5c2th72EgcmVzcG91Ymxpa2E7TWVkdmVkZXZza2l5IDogMSA6IDU0NTA0CitNYXJpeXNrYe9hIHJlc3BvdWJsaWthO0t1emhlbmVyc2tpeSA6IDEgOiAxNzgzNAorTWFyaXlza2HvYSByZXNwb3VibGlrYTtZdXJpbnNraXkgOiAxIDogMTQyMjcKK05pamVnb3JvZHNrYe9hIG9ibGFzdCAoR287Qm9yc2tpeSA6IDEgOiA2OTcwMworTmlqZWdvcm9kc2th72Egb2JsYXN0IChHbztDaGthbG92c2tpeSA6IDEgOiAyOTYyOQorS2lyb3Zza2HvYSBvYmxhc3Q7TWFsbXl6aHNraXkgOiAxIDogMzQ5NDQKK05pamVnb3JvZHNrYe9hIG9ibGFzdCAoR287R29yb2RldHogOiAxIDogMzQzNTAKK01hcml5c2th72EgcmVzcG91Ymxpa2E7TW9ya2luc2tpeSA6IDEgOiAzOTc3NgorTmlqZWdvcm9kc2th72Egb2JsYXN0IChHbztCYWxha2huaW5za2l5IDogMSA6IDYwNzY0CitNYXJpeXNrYe9hIHJlc3BvdWJsaWthO1lvc2hrYXItT2xhIDogMSA6IDI3NTcyOAorTWFyaXlza2HvYSByZXNwb3VibGlrYTtHb3Jub21hcml5c2tpeSA6IDEgOiAzMjg2MworTmlqZWdvcm9kc2th72Egb2JsYXN0IChHbztCYWxha2huYSA6IDEgOiAzMTMzNgorTmlqZWdvcm9kc2th72Egb2JsYXN0IChHbztMeXNrb3Zza2l5IDogMSA6IDQ3MzA2CitOaWplZ29yb2Rza2HvYSBvYmxhc3QgKEdvO1Zvcm90eW5za2l5IDogMSA6IDI1ODEyCitOaWplZ29yb2Rza2HvYSBvYmxhc3QgKEdvO1ZvbG9kYXJza2l5IDogMSA6IDUyODMwCitNYXJpeXNrYe9hIHJlc3BvdWJsaWthO1p2ZW5pZ292c2tpeSA6IDEgOiA1MTY5OQorS2lyb3Zza2HvYSBvYmxhc3Q7VnlhdHNrby1Qb2x5YW5za2l5IDogMSA6IDM4MjU0CitOaWplZ29yb2Rza2HvYSBvYmxhc3QgKEdvO05pemhuaXkgTm92Z29yb2QgOiAxIDogMTQ0NTA5MAorTmlqZWdvcm9kc2th72Egb2JsYXN0IChHbztCb3IgOiAxIDogNjQzODAKK1RjaG91dmFjaHNrYe9hIHJlc3BvdWJsaWs7Q2hlYm9rc2Fyc2tpeSA6IDEgOiA1NTg4NworTWFyaXlza2HvYSByZXNwb3VibGlrYTtLb3ptb2RlbXlhbnNrIDogMSA6IDI1MDQ4CitOaWplZ29yb2Rza2HvYSBvYmxhc3QgKEdvO0tzdG92c2tpeSA6IDEgOiA0ODAwOQorUlUtVU5LLTI4MzkgOiAxIDogMjk5NTA0CitLaXJvdnNrYe9hIG9ibGFzdDtWeWF0c2t5ZSBQb2x5YW55IDogMSA6IDQ0OTcwCitOaWplZ29yb2Rza2HvYSBvYmxhc3QgKEdvO0JvZ29yb2Rza2l5IDogMSA6IDM0MTQ5CitNYXJpeXNrYe9hIHJlc3BvdWJsaWthO1ZvbHpoc2tpeSA6IDEgOiAyNTI0OAorTmlqZWdvcm9kc2th72Egb2JsYXN0IChHbztQYXZsb3Zza2l5IDogMSA6IDQ3ODA4CitUY2hvdXZhY2hza2HvYSByZXNwb3VibGlrO01vcmdhdXNoc2tpeSA6IDEgOiAzODI5MQorTmlqZWdvcm9kc2th72Egb2JsYXN0IChHbztLc3Rvdm8gOiAxIDogNjY4OTEKK1RjaG91dmFjaHNrYe9hIHJlc3BvdWJsaWs7WWFkcmluc2tpeSA6IDEgOiAzNjk5MQorTmlqZWdvcm9kc2th72Egb2JsYXN0IChHbztEYWxuZWtvbnN0YW50aW5vdnNraXkgOiAxIDogMjYzMTUKK1RjaG91dmFjaHNrYe9hIHJlc3BvdWJsaWs7Q2hlYm9rc2FyeSA6IDEgOiA0NTc3OTAKK1RjaG91dmFjaHNrYe9hIHJlc3BvdWJsaWs7TWFyaWluc2tvLSBQb3NhZHNraXkgOiAxIDogMjg4OTMKK05pamVnb3JvZHNrYe9hIG9ibGFzdCAoR287Qm9nb3JvZHNrIDogMSA6IDM3NjY0CitOaWplZ29yb2Rza2HvYSBvYmxhc3QgKEdvO1NwYXNza2l5IDogMSA6IDE2MDcwCitUY2hvdXZhY2hza2HvYSByZXNwb3VibGlrO05vdm9jaGVib2tzYXJzayA6IDEgOiAxMjI3NzAKK05pamVnb3JvZHNrYe9hIG9ibGFzdCAoR287VmFjaHNraXkgOiAxIDogMjg5MjYKK1RjaG91dmFjaHNrYe9hIHJlc3BvdWJsaWs7VHN5dmlsc2tpeSA6IDEgOiAzNzA5MQorTmlqZWdvcm9kc2th72Egb2JsYXN0IChHbztTb3Nub3Zza2l5IDogMSA6IDI0OTA4CitOaWplZ29yb2Rza2HvYSBvYmxhc3QgKEdvO1Bhdmxvdm8gOiAxIDogNzI1MTYKK05pamVnb3JvZHNrYe9hIG9ibGFzdCAoR287S255YWdpbmluc2tpeSA6IDEgOiAxMzQ1OQorTmlqZWdvcm9kc2th72Egb2JsYXN0IChHbztCb2xzaGVtdXJhc2hraW5za2l5IDogMSA6IDE0MzYzCitUY2hvdXZhY2hza2HvYSByZXNwb3VibGlrO0tvemxvdnNraXkgOiAxIDogMjgwOTMKK1RjaG91dmFjaHNrYe9hIHJlc3BvdWJsaWs7S3Jhc25vYXJtZXlza2l5IDogMSA6IDE5Mzk1CitOaWplZ29yb2Rza2HvYSBvYmxhc3QgKEdvO1BpbG5pbnNraXkgOiAxIDogMjkxMjcKK01hcml5c2th72EgcmVzcG91Ymxpa2E7Vm9semhzayA6IDEgOiA2MzYyMgorVGNob3V2YWNoc2th72EgcmVzcG91YmxpaztBbGlrb3Zza2l5IDogMSA6IDIzMzk0CitOaWplZ29yb2Rza2HvYSBvYmxhc3QgKEdvO1BlcmV2b3pza2l5IDogMSA6IDE4MjgwCitUY2hvdXZhY2hza2HvYSByZXNwb3VibGlrO0tyYXNub2NoZXRheXNraXkgOiAxIDogMjQwOTQKK1RjaG91dmFjaHNrYe9hIHJlc3BvdWJsaWs7VXJtYXJza2l5IDogMSA6IDI5NzkzCitOaWplZ29yb2Rza2HvYSBvYmxhc3QgKEdvO05hdmFzaGluc2tpeSA6IDEgOiAzMDAzMQorTmlqZWdvcm9kc2th72Egb2JsYXN0IChHbztTZXJnYWNoc2tpeSA6IDEgOiA0MTk4MworTmlqZWdvcm9kc2th72Egb2JsYXN0IChHbztCdXR1cmxpbnNraXkgOiAxIDogMTgwNzkKK1RjaG91dmFjaHNrYe9hIHJlc3BvdWJsaWs7VnVybmFyc2tpeSA6IDEgOiA0NDg4OQorVGNob3V2YWNoc2th72EgcmVzcG91YmxpaztLYW5hc2hza2l5IDogMSA6IDQ0MTg5CitOaWplZ29yb2Rza2HvYSBvYmxhc3QgKEdvO0FyemFtYXNza2l5IDogMSA6IDUxMDIyCitOaWplZ29yb2Rza2HvYSBvYmxhc3QgKEdvO1ZhZHNraXkgOiAxIDogMTU4NjkKK1RjaG91dmFjaHNrYe9hIHJlc3BvdWJsaWs7U2h1bWVybGluc2tpeSA6IDEgOiAxNTc5NgorVGNob3V2YWNoc2th72EgcmVzcG91YmxpaztZYW50aWtvdnNraXkgOiAxIDogMTk5OTUKK05pamVnb3JvZHNrYe9hIG9ibGFzdCAoR287QXJkYXRvdnNraXkgOiAxIDogMzI5NDMKK1RjaG91dmFjaHNrYe9hIHJlc3BvdWJsaWs7U2h1bWVybHlhIDogMSA6IDQxOTkwCitUY2hvdXZhY2hza2HvYSByZXNwb3VibGlrO0thbmFzaCA6IDEgOiA1NDk4NworTmlqZWdvcm9kc2th72Egb2JsYXN0IChHbztTZWNoZW5vdnNraXkgOiAxIDogMTg2ODEKK05pamVnb3JvZHNrYe9hIG9ibGFzdCAoR287S3VsZWJha3NraXkgOiAxIDogMTY0NzIKK05pamVnb3JvZHNrYe9hIG9ibGFzdCAoR287S3Jhc25vb2t0eWFicnNraXkgOiAxIDogMTY1NzIKK05pamVnb3JvZHNrYe9hIG9ibGFzdCAoR287QXJ6YW1hcyA6IDEgOiAxMTE5ODcKK05pamVnb3JvZHNrYe9hIG9ibGFzdCAoR287Vnlrc3Vuc2tpeSA6IDEgOiAzMTkzOQorTmlqZWdvcm9kc2th72Egb2JsYXN0IChHbztHYWdpbnNraXkgOiAxIDogMTc0NzYKK1RjaG91dmFjaHNrYe9hIHJlc3BvdWJsaWs7SWJyZXNpbnNraXkgOiAxIDogMjkxOTMKK05pamVnb3JvZHNrYe9hIG9ibGFzdCAoR287S3VsZWJha2kgOiAxIDogNDYwMDAKK1RjaG91dmFjaHNrYe9hIHJlc3BvdWJsaWs7UG9yZXRza2l5IDogMSA6IDE5Mzk1CitOaWplZ29yb2Rza2HvYSBvYmxhc3QgKEdvO1NoYXRrb3Zza2l5IDogMSA6IDMwNDMyCitUY2hvdXZhY2hza2HvYSByZXNwb3VibGlrO0tvbXNvbW9sc2tpeSA6IDEgOiAyODI5MworVGNob3V2YWNoc2th72EgcmVzcG91YmxpaztZYWxjaGlrc2tpeSA6IDEgOiAyNzI5MworTmlqZWdvcm9kc2th72Egb2JsYXN0IChHbztWeWtzYSA6IDEgOiA2MzU3NworTmlqZWdvcm9kc2th72Egb2JsYXN0IChHbztEaXZleWV2c2tpeSA6IDEgOiAxODU4MQorTmlqZWdvcm9kc2th72Egb2JsYXN0IChHbztCb2xzaGVib2xkaW5za2l5IDogMSA6IDE0MTYyCitOaWplZ29yb2Rza2HvYSBvYmxhc3QgKEdvO0x1a295YW5vdnNraXkgOiAxIDogMzgxNjYKK05pamVnb3JvZHNrYe9hIG9ibGFzdCAoR287UGVydm9tYXlza2l5IDogMSA6IDI2OTE3CitNb3Jkb3Zza2HvYSByZXNwb3VibGlrYTtCb2xzaGVpZ25hdG92c2tpeSA6IDEgOiAxMDU0MQorVGNob3V2YWNoc2th72EgcmVzcG91YmxpaztCYXR5cmV2c2tpeSA6IDEgOiA0MjI5MAorVGNob3V2YWNoc2th72EgcmVzcG91YmxpaztBbGF0eXJza2l5IDogMSA6IDI0Nzk0CitOaWplZ29yb2Rza2HvYSBvYmxhc3QgKEdvO1Zvem5lc2Vuc2tpeSA6IDEgOiAyMjkwMAorTW9yZG92c2th72EgcmVzcG91Ymxpa2E7QXJkYXRvdnNraXkgOiAxIDogMzU2MDIKK01vcmRvdnNrYe9hIHJlc3BvdWJsaWthO1RlbW5pa292c2tpeSA6IDEgOiAyNjU1MgorTmlqZWdvcm9kc2th72Egb2JsYXN0IChHbztQb2NoaW5rb3Zza2l5IDogMSA6IDM3ODY1CitUY2hvdXZhY2hza2HvYSByZXNwb3VibGlrO1NoZW11cnNoaW5za2l5IDogMSA6IDE3Njk2CitUY2hvdXZhY2hza2HvYSByZXNwb3VibGlrO0FsYXR5cicgOiAxIDogNDc2ODkKK01vcmRvdnNrYe9hIHJlc3BvdWJsaWthO1Rlbmd1c2hldnNraXkgOiAxIDogMTQ1MTkKK01vcmRvdnNrYe9hIHJlc3BvdWJsaWthO0ljaGFsa292c2tpeSA6IDEgOiAyNTU1OAorTW9yZG92c2th72EgcmVzcG91Ymxpa2E7WWVsbmlrb3Zza2l5IDogMSA6IDE1OTExCitNb3Jkb3Zza2HvYSByZXNwb3VibGlrYTtBdHlhc2hldnNraXkgOiAxIDogMjYzNTMKK01vcmRvdnNrYe9hIHJlc3BvdWJsaWthO0NoYW16aW5za2l5IDogMSA6IDM2ODk0CitNb3Jkb3Zza2HvYSByZXNwb3VibGlrYTtTdGFyb3NoYXlnb3Zza2l5IDogMSA6IDE3ODAxCitNb3Jkb3Zza2HvYSByZXNwb3VibGlrYTtSb21vZGFub3Zza2l5IDogMSA6IDIyNjc0CitNb3Jkb3Zza2HvYSByZXNwb3VibGlrYTtLcmFzbm9zbG9ib2Rza2l5IDogMSA6IDMzMDE2CitNb3Jkb3Zza2HvYSByZXNwb3VibGlrYTtEdWJlbnNraXkgOiAxIDogMTgwOTkKK01vcmRvdnNrYe9hIHJlc3BvdWJsaWthO0x5YW1iaXJza2l5IDogMSA6IDM0MTEwCitNb3Jkb3Zza2HvYSByZXNwb3VibGlrYTtBdHl1cml5ZXZza2l5IDogMSA6IDE0NzE4CitNb3Jkb3Zza2HvYSByZXNwb3VibGlrYTtadWJvdm8tUG9seWFuc2tpeSA6IDEgOiA2NzEyNgorTW9yZG92c2th72EgcmVzcG91Ymxpa2E7VG9yYmV5ZXZza2l5IDogMSA6IDI2MDU1CitNb3Jkb3Zza2HvYSByZXNwb3VibGlrYTtCb2xzaGViZXJlem5pa292c2tpeSA6IDEgOiAxODA5OQorTW9yZG92c2th72EgcmVzcG91Ymxpa2E7S292eWxraW5za2l5IDogMSA6IDMxMzI1CitNb3Jkb3Zza2HvYSByZXNwb3VibGlrYTtLYWRvc2hraW5za3kgOiAxIDogMTA0NDIKK01vcmRvdnNrYe9hIHJlc3BvdWJsaWthO1J1emF5ZXZza2l5IDogMSA6IDIwNjg1CitNb3Jkb3Zza2HvYSByZXNwb3VibGlrYTtTYXJhbnNrIDogMSA6IDM0Nzk2MAorTW9yZG92c2th72EgcmVzcG91Ymxpa2E7S29jaGt1cm92c2tpeSA6IDEgOiAxMzMyNgorTW9yZG92c2th72EgcmVzcG91Ymxpa2E7UnV6YWV2a2EgOiAxIDogNTAxMjEKK01vcmRvdnNrYe9hIHJlc3BvdWJsaWthO0tvdnlsa2lubyA6IDEgOiAyMjQ3NQorTW9yZG92c2th72EgcmVzcG91Ymxpa2E7SW5zYXJza2l5IDogMSA6IDE4NDk3CitSVS1VTkstMjg0MCA6IDEgOiAyOTk1MDQKK1Rh7215cnNraSBuYXRpb25hbCBva3JvdWc7RGlrc29uc2tpeSA6IDEgOiAyMjQ1CitUYe9teXJza2kgbmF0aW9uYWwgb2tyb3VnO0toYXRhbmdza2l5IDogMSA6IDg1MTIKK1Rh7215cnNraSBuYXRpb25hbCBva3JvdWc7RHVkaW5rYSA6IDEgOiAzMzk1NAorVGHvbXlyc2tpIG5hdGlvbmFsIG9rcm91ZztVc3QtWWVuaXNleXNraXkgOiAxIDogMzM2NworRXZlbmtpc2tpIG5hdGlvbmFsIG9rcm91ZztCYXlraXRza2l5IDogMSA6IDY3MDgKK1JVLVVOSy0yODQxIDogMSA6IDI3NjU2NQorS3Jhc25v72Fyc2tpIGtyYe8gculzaWR1ZTtUdXJ1a2hhbnNraXkgOiAxIDogMTgxMjAKK0tyYXNub+9hcnNraSBrcmHvIHLpc2lkdWU7SWdhcmthIDogMSA6IDIxMTU3CitJcmtvdXRza2HvYSBvYmxhc3QgculzaWR1O0thdGFuZ3NraXkgOiAxIDogOTIzNAorRXZlbmtpc2tpIG5hdGlvbmFsIG9rcm91ZztJbGltcGl5c2tpeSA6IDEgOiA5NDgwCitFdmVua2lza2kgbmF0aW9uYWwgb2tyb3VnO1R1bmd1c3Nrby1DaHVuc2tpeSA6IDEgOiA1Mjc3CitLcmFzbm/vYXJza2kga3Jh7yBy6XNpZHVlO1llbmlzZXlza2l5IDogMSA6IDM5NjgzCitLcmFzbm/vYXJza2kga3Jh7yBy6XNpZHVlO1NldmVyby1ZZW5pc2V5c2tpeSA6IDEgOiAxNzkxOAorSXJrb3V0c2th72Egb2JsYXN0IHLpc2lkdTtCb2RheWJpbnNraXkgOiAxIDogMTU4MTYKK0tyYXNub+9hcnNraSBrcmHvIHLpc2lkdWU7Qm9ndWNoYW5za2l5IDogMSA6IDYwNDM1CitLcmFzbm/vYXJza2kga3Jh7yBy6XNpZHVlO0tlemhlbXNraXkgOiAxIDogMzQyMTYKK0lya291dHNrYe9hIG9ibGFzdCBy6XNpZHU7TWFtc2tvLUNodXlza2l5IDogMSA6IDE2Nzk4CitLcmFzbm/vYXJza2kga3Jh7yBy6XNpZHVlO01vdHlnaW5za2l5IDogMSA6IDI2NzI1CitJcmtvdXRza2HvYSBvYmxhc3QgculzaWR1O1VzdC1JbGltc2tpeSA6IDEgOiAyNjYyMgorSXJrb3V0c2th72Egb2JsYXN0IHLpc2lkdTtLaXJlbnNraXkgOiAxIDogMjk3NjUKK0tyYXNub+9hcnNraSBrcmHvIHLpc2lkdWU7RW5pc2V5c2sgOiAxIDogMjI5ODAKK1RjaGl0aW5za2HvYSBvYmxhc3QgculzaWQ7S2FsYXJza2l5IDogMSA6IDE3MDc1CitLcmFzbm/vYXJza2kga3Jh7yBy6XNpZHVlO0xlc29zaWJpcnNrIDogMSA6IDc3OTQ4CitSVS1VTkstMjg0MiA6IDEgOiAyMDIzNworUlUtVU5LLTI4NDMgOiAxIDogMjAyMzcKK0lya291dHNrYe9hIG9ibGFzdCBy6XNpZHU7Q2h1bnNraXkgOiAxIDogNTA0OTMKK0lya291dHNrYe9hIG9ibGFzdCBy6XNpZHU7VXN0Jy1JbGltc2sgOiAxIDogMTEyMzgyCitLcmFzbm/vYXJza2kga3Jh7yBy6XNpZHVlO1Bpcm92c2tpeSA6IDEgOiAxMjE0OAorS3Jhc25v72Fyc2tpIGtyYe8gculzaWR1ZTtLYXphY2hpbnNraXkgOiAxIDogMTYyOTgKK0tyYXNub+9hcnNraSBrcmHvIHLpc2lkdWU7QmlyaWx5dXNza2l5IDogMSA6IDE3NDEyCitJcmtvdXRza2HvYSBvYmxhc3QgculzaWR1O0JvZGF5Ym8gOiAxIDogMjA3MjgKK0lya291dHNrYe9hIG9ibGFzdCBy6XNpZHU7Tml6aG5laWxpbXNraXkgOiAxIDogNzY3MjIKK0tyYXNub+9hcnNraSBrcmHvIHLpc2lkdWU7VHl1a2h0ZXRza2l5IDogMSA6IDEzMjYxCitJcmtvdXRza2HvYSBvYmxhc3QgculzaWR1O1RheXNoZXRza2l5IDogMSA6IDM0NDgxCitLcmFzbm/vYXJza2kga3Jh7yBy6XNpZHVlO1Rhc2V5ZXZza2l5IDogMSA6IDE5MjM0CitJcmtvdXRza2HvYSBvYmxhc3QgculzaWR1O0themFjaGluc2tvLUxlbnNraXkgOiAxIDogMjgxOTQKK0tyYXNub+9hcnNraSBrcmHvIHLpc2lkdWU7QWJhbnNraXkgOiAxIDogMzM3MTAKK0tyYXNub+9hcnNraSBrcmHvIHLpc2lkdWU7Qm9sc2hlbXVydGluc2tpeSA6IDEgOiAyNjMyMAorUlUtVU5LLTI4NDQgOiAxIDogMTI5OTAKK0tyYXNub+9hcnNraSBrcmHvIHLpc2lkdWU7RHplcnpoaW5za2l5IDogMSA6IDIwNjUxCitCb3VyaWF0aWE7U2V2ZXJvLUJheWthbHNraXkgOiAxIDogMjMyODIKK0tyYXNub+9hcnNraSBrcmHvIHLpc2lkdWU7U3VraG9idXppbXNraXkgOiAxIDogMjYzMjAKK0lya291dHNrYe9hIG9ibGFzdCBy6XNpZHU7QnJhdHNraXkgOiAxIDogNzUzNDcKK0JvdXJpYXRpYTtNdXlza2l5IDogMSA6IDI0MzgxCitLcmFzbm/vYXJza2kga3Jh7yBy6XNpZHVlO1llbWVseWFub3Zza2l5IDogMSA6IDQ4NjkyCitLcmFzbm/vYXJza2kga3Jh7yBy6XNpZHVlO0JvbHNoZXVsdXlza2l5IDogMSA6IDEwODMyCitLcmFzbm/vYXJza2kga3Jh7yBy6XNpZHVlO0tvenVsc2t5IDogMSA6IDIxMzYwCitLcmFzbm/vYXJza2kga3Jh7yBy6XNpZHVlO05pemhuZWluZ2FzaHNraXkgOiAxIDogNDI5MjIKK0lya291dHNrYe9hIG9ibGFzdCBy6XNpZHU7VXN0Jy1LdXQgOiAxIDogNjAyMTkKK0tyYXNub+9hcnNraSBrcmHvIHLpc2lkdWU7S2Fuc2tpeSA6IDEgOiAzMjI5MworS3Jhc25v72Fyc2tpIGtyYe8gculzaWR1ZTtBY2hpbnNraXkgOiAxIDogMTY1MDEKK0tyYXNub+9hcnNraSBrcmHvIHLpc2lkdWU7Qm9nb3RvbHNraXkgOiAxIDogMTUyODYKK0tyYXNub+9hcnNraSBrcmHvIHLpc2lkdWU7SWxhbnNraXkgOiAxIDogMzIwOTAKK0lya291dHNrYe9hIG9ibGFzdCBy6XNpZHU7VXN0LVVkaW5za2l5IDogMSA6IDE4MjcyCitLcmFzbm/vYXJza2kga3Jh7yBy6XNpZHVlO1J5Ymluc2tpeSA6IDEgOiAyMzY4OAorS3Jhc25v72Fyc2tpIGtyYe8gculzaWR1ZTtBY2hpbnNrIDogMSA6IDEyNDYxNgorS3Jhc25v72Fyc2tpIGtyYe8gculzaWR1ZTtCZXJ5b3pvdnNraXkgOiAxIDogNDA5OTkKK0lya291dHNrYe9hIG9ibGFzdCBy6XNpZHU7QnJhdHNrIDogMSA6IDI4MjkxOQorS3Jhc25v72Fyc2tpIGtyYe8gculzaWR1ZTtCb2dvdG9sIDogMSA6IDI3MzMzCitLcmFzbm/vYXJza2kga3Jh7yBy6XNpZHVlO1V5YXJza2l5IDogMSA6IDI4OTUyCitLcmFzbm/vYXJza2kga3Jh7yBy6XNpZHVlO0thbnNrIDogMSA6IDExMjM2NworS3Jhc25v72Fyc2tpIGtyYe8gculzaWR1ZTtTb3Nub3ZvYm9yc2sgOiAxIDogMzE4ODgKK0tyYXNub+9hcnNraSBrcmHvIHLpc2lkdWU7S3Jhc25veWFyc2sgOiAxIDogOTMwNDIxCitLcmFzbm/vYXJza2kga3Jh7yBy6XNpZHVlO05hemFyb3Zza2l5IDogMSA6IDIzMTgyCitLcmFzbm/vYXJza2kga3Jh7yBy6XNpZHVlO01hbnNraXkgOiAxIDogMjIyNzEKK0tyYXNub+9hcnNraSBrcmHvIHLpc2lkdWU7TmF6YXJvdm8gOiAxIDogNjYzMDcKK1JVLVVOSy0yODQ1IDogMSA6IDE4NzA1CitLcmFzbm/vYXJza2kga3Jh7yBy6XNpZHVlO1NoYXJ5cG92c2tpeSA6IDEgOiAxNzEwOAorSXJrb3V0c2th72Egb2JsYXN0IHLpc2lkdTtOaXpobmV1ZGluc2tpeSA6IDEgOiAzNzMzMAorVGNoaXRpbnNrYe9hIG9ibGFzdCBy6XNpZDtUdW5naXJvLU9sZWttaW5za2l5IDogMSA6IDE4MjMKK0lya291dHNrYe9hIG9ibGFzdCBy6XNpZHU7VGF5c2hldCA6IDEgOiA1OTcyNworS3Jhc25v72Fyc2tpIGtyYe8gculzaWR1ZTtEaXZub2dvcnNrIDogMSA6IDM1NDMxCitLcmFzbm/vYXJza2kga3Jh7yBy6XNpZHVlO1phb3plcm55aSA6IDEgOiAxOTc0MAorS3Jhc25v72Fyc2tpIGtyYe8gculzaWR1ZTtJcmJleXNraXkgOiAxIDogMjIyNzEKK0tyYXNub+9hcnNraSBrcmHvIHLpc2lkdWU7Qm9yb2Rpbm8gOiAxIDogMTkxMzMKK0lya291dHNrYe9hIG9ibGFzdCBy6XNpZHU7WmhpZ2Fsb3Zza2l5IDogMSA6IDExMzk1CitLcmFzbm/vYXJza2kga3Jh7yBy6XNpZHVlO0JhbGFraHRpbnNraXkgOiAxIDogMjg0NDYKK1JVLVVOSy0yODQ2IDogMSA6IDU3ODAzCitLcmFzbm/vYXJza2kga3Jh7yBy6XNpZHVlO1V6aHVyc2tpeSA6IDEgOiA0OTUwMgorS3Jhc25v72Fyc2tpIGtyYe8gculzaWR1ZTtTYXlhbnNraXkgOiAxIDogMTc4MTcKK0tyYXNub+9hcnNraSBrcmHvIHLpc2lkdWU7UGFydGl6YW5za2l5IDogMSA6IDE1NjkxCitCb3VyaWF0aWE7U2V2ZXJvYmF5a2Fsc2sgOiAxIDogMjg3NzgKK0JvdXJpYXRpYTtLdXJ1bWthbnNraXkgOiAxIDogMTg0ODYKK0lya291dHNrYe9hIG9ibGFzdCBy6XNpZHU7QmFsYWdhbnNraXkgOiAxIDogMTA5MDQKK1Jlc3AuIEtoYWthc3NpYTtPcmR6aG9uaWtpZHpldnNraXkgOiAxIDogMTkzOTEKK0tyYXNub+9hcnNraSBrcmHvIHLpc2lkdWU7Tm92b3NlbG92c2tpeSA6IDEgOiAxODQyNAorSXJrb3V0c2th72Egb2JsYXN0IHLpc2lkdTtLdXl0dW5za2l5IDogMSA6IDQxODQ4CitJcmtvdXRza2HvYSBvYmxhc3QgculzaWR1O1R1bHVuc2tpeSA6IDEgOiAzMTE0MQorSXJrb3V0c2th72Egb2JsYXN0IHLpc2lkdTtLYWNodWdza2l5IDogMSA6IDIzODcxCitLcmFzbm/vYXJza2kga3Jh7yBy6XNpZHVlO0lkcmluc2tpeSA6IDEgOiAxODYyNworS3Jhc25v72Fyc2tpIGtyYe8gculzaWR1ZTtLdXJhZ2luc2tpeSA6IDEgOiA1NjY5MAorS3Jhc25v72Fyc2tpIGtyYe8gculzaWR1ZTtLcmFzbm90dXJhbnNraXkgOiAxIDogMTk3NDAKK0lya291dHNrYe9hIG9ibGFzdCBy6XNpZHU7Tml6aG5ldWRpbnNrIDogMSA6IDUyMzYwCitSZXNwLiBLaGFrYXNzaWE7U2hpcmluc2tpeSA6IDEgOiAzOTA4MworUmVzcC4gS2hha2Fzc2lhO0JvZ3JhZHNraXkgOiAxIDogMjAxOTQKK0lya291dHNrYe9hIG9ibGFzdCBy6XNpZHU7VHVsdW4gOiAxIDogNTI1NTYKK0lya291dHNrYe9hIG9ibGFzdCBy6XNpZHU7T2xraG9uc2tpeSA6IDEgOiA5MDM4CitUY2hpdGluc2th72Egb2JsYXN0IHLpc2lkO01vZ29jaGluc2tpeSA6IDEgOiAzNTQ5MgorSXJrb3V0c2th72Egb2JsYXN0IHLpc2lkdTtaaW1pbnNraXkgOiAxIDogMTU1MjEKK1Jlc3AuIEtoYWthc3NpYTtVc3QtQWJha2Fuc2tpeSA6IDEgOiA1ODQ3MworQm91cmlhdGlhO0Jhcmd1emluc2tpeSA6IDEgOiAyODQ3OAorT3VzdCctT3JkeW5za2kgbmF0aW9uYWwgbztOdWt1dHNraXkgOiAxIDogMTgxODUKK091c3QnLU9yZHluc2tpIG5hdGlvbmFsIG87T3NpbnNraXkgOiAxIDogMjE3MDEKK0tyYXNub+9hcnNraSBrcmHvIHLpc2lkdWU7TWludXNpbnNraXkgOiAxIDogMjcwMjkKK0lya291dHNrYe9hIG9ibGFzdCBy6XNpZHU7U2F5YW5zayA6IDEgOiA0NjE3MQorSXJrb3V0c2th72Egb2JsYXN0IHLpc2lkdTtaaW1hIDogMSA6IDM2NzQwCitLcmFzbm/vYXJza2kga3Jh7yBy6XNpZHVlO0thcmF0dXpza2l5IDogMSA6IDIxNTYyCitJcmtvdXRza2HvYSBvYmxhc3QgculzaWR1O1phbGFyaW5za2l5IDogMSA6IDMzOTkwCitPdXN0Jy1PcmR5bnNraSBuYXRpb25hbCBvO0FsYXJza2l5IDogMSA6IDI5MzM3CitSZXNwLiBLaGFrYXNzaWE7Q2hlcm5vZ29yc2sgOiAxIDogODIyODQKK1Jlc3AuIEtoYWthc3NpYTtBc2tpenNraXkgOiAxIDogNTA5MzgKK0JvdXJpYXRpYTtZZXJhdm5pbnNraXkgOiAxIDogMjAzODUKK1Jlc3AuIEtoYWthc3NpYTtBbHRheXNraXkgOiAxIDogMjMyMDgKK0tyYXNub+9hcnNraSBrcmHvIHLpc2lkdWU7TWludXNpbnNrIDogMSA6IDc3NzQ2CitUY2hpdGluc2th72Egb2JsYXN0IHLpc2lkO0NoZXJueXNoZXZza2l5IDogMSA6IDQ5MzA2CitSZXNwLiBLaGFrYXNzaWE7QWJha2FuIDogMSA6IDE1NzgzNworVG91dmEgcmVzcG91Ymxpa2E7VG9kemhpbnNraXkgOiAxIDogNjQ1OQorUlUtVU5LLTI4NDcgOiAxIDogMTUzNzIKK0tyYXNub+9hcnNraSBrcmHvIHLpc2lkdWU7U2h1c2hlbnNraXkgOiAxIDogMzg5NzQKK091c3QnLU9yZHluc2tpIG5hdGlvbmFsIG87Qm9raGFuc2tpeSA6IDEgOiAyNzYyOQorS3Jhc25v72Fyc2tpIGtyYe8gculzaWR1ZTtZZXJtYWtvdnNraXkgOiAxIDogMjU3MTMKK091c3QnLU9yZHluc2tpIG5hdGlvbmFsIG87RWtoaXJpdC1CdWxhZ2F0c2tpeSA6IDEgOiAzMDI0MQorVGNoaXRpbnNrYe9hIG9ibGFzdCBy6XNpZDtTcmV0ZW5za2l5IDogMSA6IDMxMzY4CitSZXNwLiBLaGFrYXNzaWE7QmV5c2tpeSA6IDEgOiAyMjEwMworQm91cmlhdGlhO09raW5za2l5IDogMSA6IDQ1OTcKK0JvdXJpYXRpYTtQcmliYXlrYWxza2l5IDogMSA6IDMxMTc2CitUY2hpdGluc2th72Egb2JsYXN0IHLpc2lkO0dhemltdXJvLSBaYXZvZHNraXkgOiAxIDogMTA3NDQKK0lya291dHNrYe9hIG9ibGFzdCBy6XNpZHU7Q2hlcmVta2hvdnNraXkgOiAxIDogMzU2NjAKK0lya291dHNrYe9hIG9ibGFzdCBy6XNpZHU7Q2hlcmVta2hvdm8gOiAxIDogODk4ODYKK1Jlc3AuIEtoYWthc3NpYTtUYXNodHlwc2tpeSA6IDEgOiAzNzA3MworUmVzcC4gS2hha2Fzc2lhO1NheWFub2dvcnNrIDogMSA6IDczODQ1CitCb3VyaWF0aWE7S2hvcmluc2tpeSA6IDEgOiAyMzc4MgorVGNoaXRpbnNrYe9hIG9ibGFzdCBy6XNpZDtDaGl0aW5za2l5IDogMSA6IDYwMDQ5CitJcmtvdXRza2HvYSBvYmxhc3QgculzaWR1O0lya3V0c2tpeSA6IDEgOiA1NjE5MQorSXJrb3V0c2th72Egb2JsYXN0IHLpc2lkdTtVc29sc2tpeSA6IDEgOiA1NTAxMgorVGNoaXRpbnNrYe9hIG9ibGFzdCBy6XNpZDtOZXJjaGluc2tpeSA6IDEgOiAzMjk5OAorVG91dmEgcmVzcG91Ymxpa2E7UGl5LUtodW1za2l5IDogMSA6IDEzNzI0CitJcmtvdXRza2HvYSBvYmxhc3QgculzaWR1O1Vzb2x5ZS1TaWJpcnNrb2UgOiAxIDogMTA0OTE2CitCb3VyaWF0aWE7S2FiYW5za2l5IDogMSA6IDcwNDQ2CitUY2hpdGluc2th72Egb2JsYXN0IHLpc2lkO0thcnltc2tpeSA6IDEgOiA0MDAwMQorVGNoaXRpbnNrYe9hIG9ibGFzdCBy6XNpZDtOZXJjaGluc2tpeS1aYXZvZHNraXkgOiAxIDogMTUwNjAKK0lya291dHNrYe9hIG9ibGFzdCBy6XNpZHU7QW5nYXJzayA6IDEgOiAyNzExMzEKK1RvdXZhIHJlc3BvdWJsaWthO0t5enlsc2tpeSA6IDEgOiAyMTY5NworVGNoaXRpbnNrYe9hIG9ibGFzdCBy6XNpZDtTaGlsa2luc2tpeSA6IDEgOiA1NTM0OQorSXJrb3V0c2th72Egb2JsYXN0IHLpc2lkdTtJcmt1dHNrIDogMSA6IDYyMjIyNQorVG91dmEgcmVzcG91Ymxpa2E7S2FhLUhlbXNraXkgOiAxIDogMTQ5MzUKK0JvdXJpYXRpYTtaYWlncmF5ZXZza2l5IDogMSA6IDU1NTU4CitUY2hpdGluc2th72Egb2JsYXN0IHLpc2lkO0toaWxva3NraXkgOiAxIDogMzgyNzQKK1RvdXZhIHJlc3BvdWJsaWthO1N1dC1LaG9sc2tpeSA6IDEgOiAxMTkwOAorVGNoaXRpbnNrYe9hIG9ibGFzdCBy6XNpZDtTaGVsb3B1Z2luc2tpeSA6IDEgOiAxMjM3NAorSXJrb3V0c2th72Egb2JsYXN0IHLpc2lkdTtTaGVsZWtob3YgOiAxIDogNTU3OTgKK1JVLVVOSy0yODQ4IDogMSA6IDIxNzgzCitUY2hpdGluc2th72Egb2JsYXN0IHLpc2lkO0NoaXRhIDogMSA6IDM1MTU2NgorQm91cmlhdGlhO0l2b2xnaW5za2l5IDogMSA6IDIxMjg0CitUY2hpdGluc2th72Egb2JsYXN0IHLpc2lkO0JhbGV5c2tpeSA6IDEgOiAxMTAzMQorSXJrb3V0c2th72Egb2JsYXN0IHLpc2lkdTtTbHl1ZHlhbnNraXkgOiAxIDogNDQ1MDEKK0JvdXJpYXRpYTtUdW5raW5za2l5IDogMSA6IDI2MjgwCitCb3VyaWF0aWE7VWxhbi1VZGUgOiAxIDogMzg2MDA2CitSVS1VTkstMjg0OSA6IDEgOiAxODk3MgorVG91dmEgcmVzcG91Ymxpa2E7Q2hhYS1LaG9sc2t5IDogMSA6IDc5NzIKK0JvdXJpYXRpYTtUYXJiYWdhdGF5c2tpeSA6IDEgOiAxNzQ4NworVG91dmEgcmVzcG91Ymxpa2E7S3l6eWwgOiAxIDogOTAxMTcKK1RjaGl0aW5za2HvYSBvYmxhc3QgculzaWQ7VWxldG92c2tpeSA6IDEgOiAzMzA5NAorVG91dmEgcmVzcG91Ymxpa2E7QmFydW4tS2hlbWNoaW5za2l5IDogMSA6IDMwODgwCitBZ3VpbnNraSBuYXRpb25hbCBva3JvdWc7TW9nb3l0dXlza2l5IDogMSA6IDI5MTI1CitUY2hpdGluc2th72Egb2JsYXN0IHLpc2lkO0JhbGV5IDogMSA6IDIyMzUxCitUb3V2YSByZXNwb3VibGlrYTtCYXktVGF5Z2luc2tpeSA6IDEgOiAxMzgyNQorVG91dmEgcmVzcG91Ymxpa2E7VGFuZGluc2tpeSA6IDEgOiAxMzkyNgorQm91cmlhdGlhO1NlbGVuZ2luc2tpeSA6IDEgOiAyNjI4MAorVG91dmEgcmVzcG91Ymxpa2E7Q2hlZGktS2hvbHNreSA6IDEgOiA4MDczCitUY2hpdGluc2th72Egb2JsYXN0IHLpc2lkO0FsZXhhbmRyb3ZvLVphdm9kc2tpeSA6IDEgOiAxNDM4OQorVGNoaXRpbnNrYe9hIG9ibGFzdCBy6XNpZDtQZXRyb3Zzay1aYWJheWthbHNraXkgOiAxIDogMjM2OTQKK1RvdXZhIHJlc3BvdWJsaWthO0R6dW4tS2hlbWNoaW5za2l5IDogMSA6IDIwNzg4CitUY2hpdGluc2th72Egb2JsYXN0IHLpc2lkO09sb3Z5YW5uaW5za2l5IDogMSA6IDU5NzYxCitCb3VyaWF0aWE7TXVraG9yc2hpYmlyc2tpeSA6IDEgOiAzMDI3NworVGNoaXRpbnNrYe9hIG9ibGFzdCBy6XNpZDtLYWxnYW5za2l5IDogMSA6IDEyMjc4CitBZ3VpbnNraSBuYXRpb25hbCBva3JvdWc7QWdpbnNraXkgOiAxIDogMzMzMjgKK0JvdXJpYXRpYTtaYWthbWVuc2tpeSA6IDEgOiAzNTQ3MworQm91cmlhdGlhO0R6aGlkaW5za2l5IDogMSA6IDM2ODcyCitCb3VyaWF0aWE7R3VzaW5vb3plcnNrIDogMSA6IDMxNDc2CitUY2hpdGluc2th72Egb2JsYXN0IHLpc2lkO1BldHJvdnNrLVphYmF5a2Fsc2t5IDogMSA6IDI2NjY3CitBZ3VpbnNraSBuYXRpb25hbCBva3JvdWc7RHVsZHVyZ2luc2tpeSA6IDEgOiAxNjUxNAorVG91dmEgcmVzcG91Ymxpa2E7T3Z5dXJza2l5IDogMSA6IDkxODMKK1RjaGl0aW5za2HvYSBvYmxhc3QgculzaWQ7Qm9yemluc2tpeSA6IDEgOiAzMDUwNAorVG91dmEgcmVzcG91Ymxpa2E7VGVzLUtoZW1za2l5IDogMSA6IDEwNDk1CitCb3VyaWF0aWE7QmljaHVyc2tpeSA6IDEgOiAzMTU3NgorVGNoaXRpbnNrYe9hIG9ibGFzdCBy6XNpZDtQcmlhcmd1bnNraXkgOiAxIDogMjg3NzgKK0JvdXJpYXRpYTtLeWFraHRpbnNraXkgOiAxIDogNDU3NjUKK1RjaGl0aW5za2HvYSBvYmxhc3QgculzaWQ7S3Jhc25vY2hpa295c2tpeSA6IDEgOiAyMjI1NQorVG91dmEgcmVzcG91Ymxpa2E7RXJ6aW5za2l5IDogMSA6IDkwODIKK1RvdXZhIHJlc3BvdWJsaWthO01vbmd1bi1UYXlnaW5za2l5IDogMSA6IDYyNTcKK1RjaGl0aW5za2HvYSBvYmxhc3QgculzaWQ7QWtzaGluc2tpeSA6IDEgOiAxNDE5NworVGNoaXRpbnNrYe9hIG9ibGFzdCBy6XNpZDtPbm9uc2tpeSA6IDEgOiAxNjIxMQorVGNoaXRpbnNrYe9hIG9ibGFzdCBy6XNpZDtLcmFzbm9rYW1lbnNraXkgOiAxIDogMTEzMTkKK1RjaGl0aW5za2HvYSBvYmxhc3QgculzaWQ7S3lyaW5za2l5IDogMSA6IDE4NDE4CitUY2hpdGluc2th72Egb2JsYXN0IHLpc2lkO0Jvcnp5YSA6IDEgOiAzNTMwMQorVGNoaXRpbnNrYe9hIG9ibGFzdCBy6XNpZDtaYWJheWthbHNraXkgOiAxIDogMjIxNTkKK1RjaGl0aW5za2HvYSBvYmxhc3QgculzaWQ7S3Jhc25va2FtZW5zayA6IDEgOiA2ODk3MAorUlUtVU5LLTI4NTAgOiAxIDogMjc2NTY1CitSVS1VTkstMjg1MSA6IDEgOiAyMDIzNworUlUtVU5LLTI4NTIgOiAxIDogMjAyMzcKK1JVLVVOSy0yODUzIDogMSA6IDEyOTkwCitSVS1VTkstMjg1NCA6IDEgOiAxODcwNQorUlUtVU5LLTI4NTUgOiAxIDogNTc4MDMKK1JVLVVOSy0yODU2IDogMSA6IDE1MzcyCitSVS1VTkstMjg1NyA6IDEgOiAyMTc4MworUlUtVU5LLTI4NTggOiAxIDogMTg5NzIKK0tvc3Ryb21za2HvYSBvYmxhc3Q7Vm9raG9tc2tpeSA6IDEgOiAxNjk5MgorS29zdHJvbXNrYe9hIG9ibGFzdDtTb2xpZ2FsaWNoc2tpeSA6IDEgOiAxNDY5MworS29zdHJvbXNrYe9hIG9ibGFzdDtQYXZpbnNraXkgOiAxIDogNzY5NgorS29zdHJvbXNrYe9hIG9ibGFzdDtPa3R5YWJyc2tpeSA6IDEgOiA3Njk2CitLb3N0cm9tc2th72Egb2JsYXN0O0NodWtobG9tc2tpeSA6IDEgOiAxNTE5MgorS29zdHJvbXNrYe9hIG9ibGFzdDtLb2xvZ3JpdnNraXkgOiAxIDogMTA2OTUKK0tvc3Ryb21za2HvYSBvYmxhc3Q7TWV6aGV2c2tpeSA6IDEgOiA2OTk3CitLb3N0cm9tc2th72Egb2JsYXN0O1B5c2NodWdza2l5IDogMSA6IDY4OTcKK0tvc3Ryb21za2HvYSBvYmxhc3Q7QnV5c2tpeSA6IDEgOiAxMTM5NAorSWFyb3NsYXZza2HvYSBvYmxhc3Q7UG9zaGVraG9uc2tpeSA6IDEgOiAyMjE1NworSWFyb3NsYXZza2HvYSBvYmxhc3Q7UGVydm9tYXlza2l5IDogMSA6IDE1MTAyCitUdmVyc2th72Egb2JsYXN0IChLYWxpbmluO1Zlc3llZ29uc2tpeSA6IDEgOiAyMDE1NAorS29zdHJvbXNrYe9hIG9ibGFzdDtQYXJmZW55ZXZza2l5IDogMSA6IDg4OTYKK0tvc3Ryb21za2HvYSBvYmxhc3Q7U2hhcnlpbnNraXkgOiAxIDogMTU5OTIKK0tvc3Ryb21za2HvYSBvYmxhc3Q7TmV5c2tpeSA6IDEgOiA3OTk2CitLb3N0cm9tc2th72Egb2JsYXN0O1BvbmF6eXJldnNraXkgOiAxIDogMTM1OTMKK0tvc3Ryb21za2HvYSBvYmxhc3Q7R2FsaWNoc2tpeSA6IDEgOiAxNDE5MworSWFyb3NsYXZza2HvYSBvYmxhc3Q7QnJleXRvdnNraXkgOiAxIDogMTEzMjcKK1R2ZXJza2HvYSBvYmxhc3QgKEthbGluaW47U2FuZG92c2tpeSA6IDEgOiAxMjQ3MgorS29zdHJvbXNrYe9hIG9ibGFzdDtNYW50dXJvdnNraXkgOiAxIDogODk5NgorSWFyb3NsYXZza2HvYSBvYmxhc3Q7THl1Ymltc2tpeSA6IDEgOiAxNjE5NQorS29zdHJvbXNrYe9hIG9ibGFzdDtBbnRyb3BvdnNraXkgOiAxIDogMTEwOTQKK0tvc3Ryb21za2HvYSBvYmxhc3Q7QnV5IDogMSA6IDM1MTgyCitUdmVyc2th72Egb2JsYXN0IChLYWxpbmluO0xlc25veSA6IDEgOiA3OTgyCitLb3N0cm9tc2th72Egb2JsYXN0O1NoYXJ5YSA6IDEgOiA0Mjc3OQorS29zdHJvbXNrYe9hIG9ibGFzdDtHYWxpdGNoIDogMSA6IDIxNDg5CitJYXJvc2xhdnNrYe9hIG9ibGFzdDtEYW5pbG92c2tpeSA6IDEgOiAzMjk4NworSWFyb3NsYXZza2HvYSBvYmxhc3Q7UnliaW5za2l5IDogMSA6IDM0Nzc1CitUdmVyc2th72Egb2JsYXN0IChLYWxpbmluO0tyYXNub2tob2xtc2tpeSA6IDEgOiAxODg1NworS29zdHJvbXNrYe9hIG9ibGFzdDtNYW50dXJvdm8gOiAxIDogMjE3ODkKK1R2ZXJza2HvYSBvYmxhc3QgKEthbGluaW47TW9sb2tvdnNraXkgOiAxIDogOTE3OQorS29zdHJvbXNrYe9hIG9ibGFzdDtLb3N0cm9tc2tveSA6IDEgOiA0NTg3NworS29zdHJvbXNrYe9hIG9ibGFzdDtOZXlhIDogMSA6IDEyOTk0CitLb3N0cm9tc2th72Egb2JsYXN0O1N1c2FuaW5za2l5IDogMSA6IDExMTk0CitJYXJvc2xhdnNrYe9hIG9ibGFzdDtUdXRheWV2c2tpeSA6IDEgOiAxODE4MworVHZlcnNrYe9hIG9ibGFzdCAoS2FsaW5pbjtVZG9tZWxza2l5IDogMSA6IDExOTczCitUdmVyc2th72Egb2JsYXN0IChLYWxpbmluO0JvbG9nb3Zza2l5IDogMSA6IDMxMjI5CitLb3N0cm9tc2th72Egb2JsYXN0O01ha2FyeWV2c2tpeSA6IDEgOiAyNDU4OAorVHZlcnNrYe9hIG9ibGFzdCAoS2FsaW5pbjtNYWtzYXRpa2hpbnNraXkgOiAxIDogMjQzNDUKK0lhcm9zbGF2c2th72Egb2JsYXN0O05la291enNraXkgOiAxIDogMjI4NTIKK0tvc3Ryb21za2HvYSBvYmxhc3Q7T3N0cm92c2tpeSA6IDEgOiAxNjc5MgorS29zdHJvbXNrYe9hIG9ibGFzdDtTdWRpc2xhdnNraXkgOiAxIDogMTcwOTEKK1R2ZXJza2HvYSBvYmxhc3QgKEthbGluaW47QmV6aGV0c2tpeSA6IDEgOiAxODg1NworS29zdHJvbXNrYe9hIG9ibGFzdDtLYWR5aXNraXkgOiAxIDogMTI0OTQKK0lhcm9zbGF2c2th72Egb2JsYXN0O1J5Ymluc2sgOiAxIDogMjUwMDg0CitJYXJvc2xhdnNrYe9hIG9ibGFzdDtUdXRhZXYgOiAxIDogNDM2MTgKK1R2ZXJza2HvYSBvYmxhc3QgKEthbGluaW47U29ua292c2tpeSA6IDEgOiAxMjg3MQorSWFyb3NsYXZza2HvYSBvYmxhc3Q7TmVrcmFzb3Zza2l5IDogMSA6IDI3NjIyCitJYXJvc2xhdnNrYe9hIG9ibGFzdDtNeXNoa2luc2tpeSA6IDEgOiAxMzExNQorSWFyb3NsYXZza2HvYSBvYmxhc3Q7WWFyb3NsYXZza2l5IDogMSA6IDU1NzQwCitUdmVyc2th72Egb2JsYXN0IChLYWxpbmluO0JvbG9nb3llIDogMSA6IDMyNzI2CitJYXJvc2xhdnNrYe9hIG9ibGFzdDtCb2xzaGVzZWxza2l5IDogMSA6IDEyNDIwCitUdmVyc2th72Egb2JsYXN0IChLYWxpbmluO1Vkb21seWEgOiAxIDogMzI3MjYKK1R2ZXJza2HvYSBvYmxhc3QgKEthbGluaW47VnlzaG5ldm9sb3Rza2l5IDogMSA6IDM0NzIxCitLb3N0cm9tc2th72Egb2JsYXN0O0tvc3Ryb21hIDogMSA6IDMwMDM1MAorVHZlcnNrYe9hIG9ibGFzdCAoS2FsaW5pbjtCZXpzaGV0c2sgOiAxIDogMzAzMzEKK0tvc3Ryb21za2HvYSBvYmxhc3Q7S3Jhc25vc2Vsc2tpeSA6IDEgOiAyMDM5MAorSWFyb3NsYXZza2HvYSBvYmxhc3Q7VWdsaWNoc2tpeSA6IDEgOiAxNzY4NgorSXZhbm92c2th72Egb2JsYXN0O1phdm9semhza2l5IDogMSA6IDI2OTYwCitUdmVyc2th72Egb2JsYXN0IChLYWxpbmluO0tlc292b2dvcnNraXkgOiAxIDogMTAzNzcKK1R2ZXJza2HvYSBvYmxhc3QgKEthbGluaW47Rmlyb3Zza2l5IDogMSA6IDE0MTY4CitJYXJvc2xhdnNrYe9hIG9ibGFzdDtZYXJvc2xhdmwgOiAxIDogNjI1OTU2CitJdmFub3Zza2HvYSBvYmxhc3Q7S2luZXNoZW1za2l5IDogMSA6IDMwMzkyCitUdmVyc2th72Egb2JsYXN0IChLYWxpbmluO1NwaXJvdnNraXkgOiAxIDogMTUxNjYKK0l2YW5vdnNrYe9hIG9ibGFzdDtTb2tvbHNraXkgOiAxIDogMTkxMTcKK1R2ZXJza2HvYSBvYmxhc3QgKEthbGluaW47S2FzaGluc2tpeSA6IDEgOiAxNTc2NAorS29zdHJvbXNrYe9hIG9ibGFzdDtOZXJla2h0c2tpeSA6IDEgOiAxNDQ5MworSWFyb3NsYXZza2HvYSBvYmxhc3Q7Qm9yaXNvZ2xlYnNraXkgOiAxIDogMTYwOTYKK1R2ZXJza2HvYSBvYmxhc3QgKEthbGluaW47TGlraG9zbGF2bHNraXkgOiAxIDogMzM4MjMKK1R2ZXJza2HvYSBvYmxhc3QgKEthbGluaW47VnlzaG55IFZvbG9jaGVrIDogMSA6IDY0MDU1CitUdmVyc2th72Egb2JsYXN0IChLYWxpbmluO1JhbWVzaGtvdnNraXkgOiAxIDogMTc3NjAKK0lhcm9zbGF2c2th72Egb2JsYXN0O1VnbGljaCA6IDEgOiAzOTQ0NQorSXZhbm92c2th72Egb2JsYXN0O0tpbmVzaG1hIDogMSA6IDEwMTc2MworSWFyb3NsYXZza2HvYSBvYmxhc3Q7R2F2cmlsb3YtWWFtc2tpeSA6IDEgOiAzMTM5NworSXZhbm92c2th72Egb2JsYXN0O1ByaXZvbHpoc2tpeSA6IDEgOiAzMjY0NgorSXZhbm92c2th72Egb2JsYXN0O1ZpY2h1Z3NraXkgOiAxIDogMjYwNzgKK1R2ZXJza2HvYSBvYmxhc3QgKEthbGluaW47T3N0YXNoa292c2tpeSA6IDEgOiA4NjgwCitJdmFub3Zza2HvYSBvYmxhc3Q7WXVyeWV2ZXRza2l5IDogMSA6IDIzNDMxCitJYXJvc2xhdnNrYe9hIG9ibGFzdDtSb3N0b3Zza2l5IDogMSA6IDQzNTE5CitLb3N0cm9tc2th72Egb2JsYXN0O05lcmVraHRhIDogMSA6IDI5Mzg1CitUdmVyc2th72Egb2JsYXN0IChLYWxpbmluO0thc2hpbiA6IDEgOiAyMDU1NAorVHZlcnNrYe9hIG9ibGFzdCAoS2FsaW5pbjtLYWx5YXppbnNraXkgOiAxIDogMjY5MzkKK0l2YW5vdnNrYe9hIG9ibGFzdDtGdXJtYW5vdnNraXkgOiAxIDogODEzNworVHZlcnNrYe9hIG9ibGFzdCAoS2FsaW5pbjtLaW1yc2tpeSA6IDEgOiAxODk1NworSXZhbm92c2th72Egb2JsYXN0O1JvZG5pa292c2tpeSA6IDEgOiA0MzkyMQorVHZlcnNrYe9hIG9ibGFzdCAoS2FsaW5pbjtUb3J6aG9rc2tpeSA6IDEgOiAyNjkzOQorSXZhbm92c2th72Egb2JsYXN0O0tvbXNvbW9sc2tpeSA6IDEgOiAyNzM1MgorSWFyb3NsYXZza2HvYSBvYmxhc3Q7Um9zdG92IDogMSA6IDM2MDY3CitJdmFub3Zza2HvYSBvYmxhc3Q7RnVybWFub3YgOiAxIDogNDQ5OTkKK0l2YW5vdnNrYe9hIG9ibGFzdDtWaWNodWdhIDogMSA6IDQ4MTM2CitUdmVyc2th72Egb2JsYXN0IChLYWxpbmluO1Blbm92c2tpeSA6IDEgOiAxMDA3NworVHZlcnNrYe9hIG9ibGFzdCAoS2FsaW5pbjtLdXZzaGlub3Zza2l5IDogMSA6IDIwNjUzCitJdmFub3Zza2HvYSBvYmxhc3Q7SXZhbm92c2tpeSA6IDEgOiA2MDk3OQorSXZhbm92c2th72Egb2JsYXN0O0x1a2hza2l5IDogMSA6IDEwODgyCitJdmFub3Zza2HvYSBvYmxhc3Q7SWx5aW5za2l5IDogMSA6IDEzNjI3CitJYXJvc2xhdnNrYe9hIG9ibGFzdDtQZXJlc2xhdnNraXkgOiAxIDogMjY3MjcKK0l2YW5vdnNrYe9hIG9ibGFzdDtQdWNoZXpoc2tpeSA6IDEgOiAyMTU2OAorVHZlcnNrYe9hIG9ibGFzdCAoS2FsaW5pbjtLYWxpbmluc2tpeSA6IDEgOiA1NjA3MworVHZlcnNrYe9hIG9ibGFzdCAoS2FsaW5pbjtBbmRyZWFwb2xza2l5IDogMSA6IDE3NTYwCitUdmVyc2th72Egb2JsYXN0IChLYWxpbmluO09zdGFzaGtvdiA6IDEgOiAyNjA0MQorSXZhbm92c2th72Egb2JsYXN0O0l2YW5vdm8gOiAxIDogNDY1ODc0CitUdmVyc2th72Egb2JsYXN0IChLYWxpbmluO1NlbGl6aGFyb3Zza2l5IDogMSA6IDE4MDU5CitJdmFub3Zza2HvYSBvYmxhc3Q7U2h1aXNraXkgOiAxIDogMjM3MjUKK0l2YW5vdnNrYe9hIG9ibGFzdDtUZXlrb3Zza2l5IDogMSA6IDE4MDM5CitUdmVyc2th72Egb2JsYXN0IChLYWxpbmluO1RvcnpzaG9rIDogMSA6IDUwNTg2CitUdmVyc2th72Egb2JsYXN0IChLYWxpbmluO1Rvcm9wZXRza2l5IDogMSA6IDMwOTMwCitJdmFub3Zza2HvYSBvYmxhc3Q7TGV6aG5ldnNraXkgOiAxIDogMjE1NjgKK0l2YW5vdnNrYe9hIG9ibGFzdDtQYWxla2hza2l5IDogMSA6IDE0NjA4CitNb3Nrb3Zza2HvYSBvYmxhc3QgculzaWR1O1RhbGRvbXNraXkgOiAxIDogNTE5OTcKK0l2YW5vdnNrYe9hIG9ibGFzdDtWZXJraG5lbGFuZGVraG92c2tpeSA6IDEgOiA2NzY1CitUdmVyc2th72Egb2JsYXN0IChLYWxpbmluO1R2ZXIgOiAxIDogNDUzMDc1CitUdmVyc2th72Egb2JsYXN0IChLYWxpbmluO0tvbmFrb3Zza2l5IDogMSA6IDU0Mjc3CitJdmFub3Zza2HvYSBvYmxhc3Q7U2h1eWEgOiAxIDogNjgzMzIKK1R2ZXJza2HvYSBvYmxhc3QgKEthbGluaW47S2ltcnkgOiAxIDogNjAxNjQKK0l2YW5vdnNrYe9hIG9ibGFzdDtUZXlrb3ZvIDogMSA6IDM4MzMzCitUdmVyc2th72Egb2JsYXN0IChLYWxpbmluO1N0YXJpdHNraXkgOiAxIDogMjg3MzUKK0l2YW5vdnNrYe9hIG9ibGFzdDtHYXZyaWxvdm8tUG9zYWRza2l5IDogMSA6IDIyNzQ1CitWbGFkaW1pcnNrYe9hIG9ibGFzdDtZdXJ5ZXYtUG9sc2tpeSA6IDEgOiA0MjEyOAorSXZhbm92c2th72Egb2JsYXN0O1Blc3R5YWtvdnNraXkgOiAxIDogOTUxMAorTW9za292c2th72Egb2JsYXN0IHLpc2lkdTtaYWdvcnNraXkgOiAxIDogMTIzNTE3CitNb3Nrb3Zza2HvYSBvYmxhc3QgculzaWR1O0R1Ym5hIDogMSA6IDY2MzQxCitJdmFub3Zza2HvYSBvYmxhc3Q7WXV6aHNraXkgOiAxIDogMzIyNTQKK1JVLVVOSy0yODU5IDogMSA6IDQzMDIyCitUdmVyc2th72Egb2JsYXN0IChLYWxpbmluO0tvbmFrb3ZvIDogMSA6IDQzMDAzCitJdmFub3Zza2HvYSBvYmxhc3Q7U2F2aW5za2l5IDogMSA6IDE3MjU1CitWbGFkaW1pcnNrYe9hIG9ibGFzdDtBbGVrc2FuZHJvdnNraXkgOiAxIDogNjE3OTUKK1R2ZXJza2HvYSBvYmxhc3QgKEthbGluaW47UnpoZXZza2l5IDogMSA6IDE3MDYxCitNb3Nrb3Zza2HvYSBvYmxhc3QgculzaWR1O0RtaXRyb3Zza2l5IDogMSA6IDg4MTU2CitWbGFkaW1pcnNrYe9hIG9ibGFzdDtTdXpkYWxza2l5IDogMSA6IDQwMTMyCitUdmVyc2th72Egb2JsYXN0IChLYWxpbmluO05lbGlkb3Zza2l5IDogMSA6IDEwNzc2CitNb3Nrb3Zza2HvYSBvYmxhc3QgculzaWR1O0tsaW5za2l5IDogMSA6IDQ2OTE3CitWbGFkaW1pcnNrYe9hIG9ibGFzdDtLYW1lc2hrb3Zza2l5IDogMSA6IDQxMzMwCitWbGFkaW1pcnNrYe9hIG9ibGFzdDtLb3Zyb3Zza2l5IDogMSA6IDI5MDUxCitUdmVyc2th72Egb2JsYXN0IChLYWxpbmluO09sZW5pbnNraXkgOiAxIDogMTg3NTgKK1R2ZXJza2HvYSBvYmxhc3QgKEthbGluaW47WmFwYWRub2R2aW5za2l5IDogMSA6IDIzNTQ3CitWbGFkaW1pcnNrYe9hIG9ibGFzdDtLb2xjaHVnaW5za2l5IDogMSA6IDE2MzcyCitWbGFkaW1pcnNrYe9hIG9ibGFzdDtWeWF6bmlrb3Zza2l5IDogMSA6IDYwMjk3CitWbGFkaW1pcnNrYe9hIG9ibGFzdDtTdXpkYWwnIDogMSA6IDExOTgwCitWbGFkaW1pcnNrYe9hIG9ibGFzdDtHb3Jva2hvdmV0c2tpeSA6IDEgOiAyOTU1MAorTW9za292c2th72Egb2JsYXN0IHLpc2lkdTtMb3Rvc2hpbnNraXkgOiAxIDogMTg3MjcKK1ZsYWRpbWlyc2th72Egb2JsYXN0O0tvdnJvdiA6IDEgOiAxNjIxMjQKK1JVLVVOSy0yODYwIDogMSA6IDY1MDQ2CitWbGFkaW1pcnNrYe9hIG9ibGFzdDtBbGVrc2FuZHJvdiA6IDEgOiA2NTc4OAorTW9za292c2th72Egb2JsYXN0IHLpc2lkdTtLbGluIDogMSA6IDk0NzMwCitNb3Nrb3Zza2HvYSBvYmxhc3QgculzaWR1O1NlcmdpZXYgUG9zYWQgOiAxIDogMTE0NDUzCitWbGFkaW1pcnNrYe9hIG9ibGFzdDtLaXJ6aGFjaHNraXkgOiAxIDogNDkzMTYKK1R2ZXJza2HvYSBvYmxhc3QgKEthbGluaW47WnVidHNvdnNraXkgOiAxIDogMjIwNTAKK01vc2tvdnNrYe9hIG9ibGFzdCBy6XNpZHU7U29sbmVjaG5vZ29yc2tpeSA6IDEgOiA2ODgzMQorVmxhZGltaXJza2HvYSBvYmxhc3Q7S29sJ2NodWdpbm8gOiAxIDogNDQ5MjQKK01vc2tvdnNrYe9hIG9ibGFzdCBy6XNpZHU7Vm9sb2tvbGFtc2tpeSA6IDEgOiAzNTk1OQorVmxhZGltaXJza2HvYSBvYmxhc3Q7U29iaW5za2l5IDogMSA6IDI2MDU2CitUdmVyc2th72Egb2JsYXN0IChLYWxpbmluO1J6c2hldiA6IDEgOiA2OTM0MworVmxhZGltaXJza2HvYSBvYmxhc3Q7Vnlhem5pa2kgOiAxIDogNDQ2MjQKK01vc2tvdnNrYe9hIG9ibGFzdCBy6XNpZHU7U2NoZWxrb3Zza2l5IDogMSA6IDk3NDE5CitUdmVyc2th72Egb2JsYXN0IChLYWxpbmluO05lbGlkb3ZvIDogMSA6IDI5NDMzCitNb3Nrb3Zza2HvYSBvYmxhc3QgculzaWR1O1NoYWtob3Zza295IDogMSA6IDI0MTA2CitNb3Nrb3Zza2HvYSBvYmxhc3QgculzaWR1O1NvbG5lY2hub2dvcnNrIDogMSA6IDU1MTg0CitNb3Nrb3Zza2HvYSBvYmxhc3QgculzaWR1O1B1c2hraW5za2l5IDogMSA6IDg5ODQ5CitUdmVyc2th72Egb2JsYXN0IChLYWxpbmluO1poYXJrb3Zza2l5IDogMSA6IDEwMzc3CitWbGFkaW1pcnNrYe9hIG9ibGFzdDtWbGFkaW1pciA6IDEgOiAzNTYyOTQKK1ZsYWRpbWlyc2th72Egb2JsYXN0O1BldHVzaGtpbnNraXkgOiAxIDogNzU3NzEKK1ZsYWRpbWlyc2th72Egb2JsYXN0O1N1ZG9nb2Rza2l5IDogMSA6IDQ3MDIwCitNb3Nrb3Zza2HvYSBvYmxhc3QgculzaWR1O0tyYXNub2FybWV5c2sgOiAxIDogMjc0OTMKK1JVLVVOSy0yODYxIDogMSA6IDE2ODcxCitNb3Nrb3Zza2HvYSBvYmxhc3QgculzaWR1O0lzdHJpbnNraXkgOiAxIDogODgxNTYKK01vc2tvdnNrYe9hIG9ibGFzdCBy6XNpZHU7TXl0aXNjaGluc2tpeSA6IDEgOiAyNjU5NgorVHZlcnNrYe9hIG9ibGFzdCAoS2FsaW5pbjtCZWxza2l5IDogMSA6IDEwMjc3CitTbW9sZW5za2HvYSBvYmxhc3Q7U3ljaGV2a3NraXkgOiAxIDogMTgwMjMKK01vc2tvdnNrYe9hIG9ibGFzdCBy6XNpZHU7Tm9naW5za2l5IDogMSA6IDExODQzNworTW9za292c2th72Egb2JsYXN0IHLpc2lkdTtWb2xva29sYW1zayA6IDEgOiAxNzkzMAorTW9za292c2th72Egb2JsYXN0IHLpc2lkdTtQdXNjaGlubyA6IDEgOiAyMDEyMQorVmxhZGltaXJza2HvYSBvYmxhc3Q7U2VsaXZhbm92c2tpeSA6IDEgOiAyNDM1OQorVmxhZGltaXJza2HvYSBvYmxhc3Q7U29iaW5rYSA6IDEgOiA0MjIyOAorTW9za292c2th72Egb2JsYXN0IHLpc2lkdTtSdXpza2l5IDogMSA6IDY2MTQyCitNb3Nrb3Zza2HvYSBvYmxhc3QgculzaWR1O1Bhdmxvdm8tUG9zYWRza2l5IDogMSA6IDQwMDQ0CitTbW9sZW5za2HvYSBvYmxhc3Q7R2FnYXJpbnNraXkgOiAxIDogMjE1NDcKK01vc2tvdnNrYe9hIG9ibGFzdCBy6XNpZHU7TG9ibnlhIDogMSA6IDY0NjQ3CitNb3Nrb3Zza2HvYSBvYmxhc3QgculzaWR1O0l2YW50ZXlldmthIDogMSA6IDUxNjk4CitNb3Nrb3Zza2HvYSBvYmxhc3QgculzaWR1O0ZyeWF6aW5vIDogMSA6IDUzNjkwCitNb3Nrb3Zza2HvYSBvYmxhc3QgculzaWR1O0toaW1raW5za2l5IDogMSA6IDM0MTY2CitNb3Nrb3Zza2HvYSBvYmxhc3QgculzaWR1O0RvbGdvcHJ1ZG55aSA6IDEgOiA3NjQwMQorTW9za292c2th72Egb2JsYXN0IHLpc2lkdTtTaGNoZWxrb3ZvIDogMSA6IDEwODA3OAorVmxhZGltaXJza2HvYSBvYmxhc3Q7TXVyb21za2l5IDogMSA6IDI4NzUxCitNb3NrdmE7TW9zY293IDogMSA6IDg3MDU3NTAKK01vc2tvdnNrYe9hIG9ibGFzdCBy6XNpZHU7UHVzaGtpbm8gOiAxIDogNzQ4MDgKK01vc2tvdnNrYe9hIG9ibGFzdCBy6XNpZHU7TXl0eXNoY2h5IDogMSA6IDE1MzQwMQorTW9za292c2th72Egb2JsYXN0IHLpc2lkdTtJc3RyYSA6IDEgOiAzNTg2MAorUlUtVU5LLTI4NjIgOiAxIDogMjU0MDEKK01vc2tvdnNrYe9hIG9ibGFzdCBy6XNpZHU7S2hpbWtpIDogMSA6IDEzNjc2NgorTW9za292c2th72Egb2JsYXN0IHLpc2lkdTtOb2dpbnNrIDogMSA6IDEyMDYyOQorTW9za292c2th72Egb2JsYXN0IHLpc2lkdTtLYWxpbmluZ3JhZCA6IDEgOiAxNjQyNTgKK01vc2tvdnNrYe9hIG9ibGFzdCBy6XNpZHU7S3Jhc25vZ29yc2tpeSA6IDEgOiA0ODQxMQorVmxhZGltaXJza2HvYSBvYmxhc3Q7R3VzLUtocnVzdGFsbnlpIDogMSA6IDU3MzAzCitNb3Nrb3Zza2HvYSBvYmxhc3QgculzaWR1O09yZWtob3ZvLVp1eWV2c2tpeSA6IDEgOiAxMzAyOTEKK01vc2tvdnNrYe9hIG9ibGFzdCBy6XNpZHU7QmFsYXNoaWtoaW5za2l5IDogMSA6IDMxMzc3CitNb3Nrb3Zza2HvYSBvYmxhc3QgculzaWR1O09yZWtob3ZvLVp1ZXZvIDogMSA6IDEzNDg3MworTW9za292c2th72Egb2JsYXN0IHLpc2lkdTtNb3poYXlza2l5IDogMSA6IDQyMTM1CitNb3Nrb3Zza2HvYSBvYmxhc3QgculzaWR1O0tyYXNub2dvcnNrIDogMSA6IDkwNjQ2CitNb3Nrb3Zza2HvYSBvYmxhc3QgculzaWR1O1NoYXR1cnNraXkgOiAxIDogNzA4MjMKK01vc2tvdnNrYe9hIG9ibGFzdCBy6XNpZHU7RWxla3Ryb3N0YWwgOiAxIDogMTUxNTA4CitNb3Nrb3Zza2HvYSBvYmxhc3QgculzaWR1O0JhbGFzaGlraGEgOiAxIDogMTM1NzY5CitNb3Nrb3Zza2HvYSBvYmxhc3QgculzaWR1O1JldXRvdiA6IDEgOiA2OTcyOAorTW9za292c2th72Egb2JsYXN0IHLpc2lkdTtPZGludHNvdnNraXkgOiAxIDogMTIzMzE4CitNb3Nrb3Zza2HvYSBvYmxhc3QgculzaWR1O1poZWxlem5vZG9yb3pobnlpIDogMSA6IDEwNDM5MgorU21vbGVuc2th72Egb2JsYXN0O05vdm9kdWdpbnNraXkgOiAxIDogMTQzOTgKK1Ntb2xlbnNrYe9hIG9ibGFzdDtWZWxpemhza2l5IDogMSA6IDE3MjE4CitNb3Nrb3Zza2HvYSBvYmxhc3QgculzaWR1O1p2ZW5pZ29yb2QgOiAxIDogMTcwMzMKK1Ntb2xlbnNrYe9hIG9ibGFzdDtEZW1pZG92c2tpeSA6IDEgOiAyMjg1NgorU21vbGVuc2th72Egb2JsYXN0O0tob2xtLVpoaXJrb3Zza2l5IDogMSA6IDE0OTAyCitTbW9sZW5za2HvYSBvYmxhc3Q7RHVraG92c2NoaW5za2l5IDogMSA6IDIzMTU4CitNb3Nrb3Zza2HvYSBvYmxhc3QgculzaWR1O0x5dWJlcmV0c2tpeSA6IDEgOiAxMzgwNjAKK01vc2tvdnNrYe9hIG9ibGFzdCBy6XNpZHU7T2RpbnRzb3ZvIDogMSA6IDEzMDA5MgorVmxhZGltaXJza2HvYSBvYmxhc3Q7R3VzJy1LaHJ1c3RhbG55IDogMSA6IDgwODYyCitNb3Nrb3Zza2HvYSBvYmxhc3QgculzaWR1O1JhbWVuc2tpeSA6IDEgOiAxMzMyNzkKK01vc2tvdnNrYe9hIG9ibGFzdCBy6XNpZHU7TGVuaW5za2l5IDogMSA6IDY5NzI4CitNb3Nrb3Zza2HvYSBvYmxhc3QgculzaWR1O0xpdWJlcnRzeSA6IDEgOiAxNjI3NjQKK1ZsYWRpbWlyc2th72Egb2JsYXN0O01lbGVua292c2tpeSA6IDEgOiA0NzQxOQorTW9za292c2th72Egb2JsYXN0IHLpc2lkdTtaaHVrb3Zza2l5IDogMSA6IDEwMDUwNworTW9za292c2th72Egb2JsYXN0IHLpc2lkdTtOYXJvLUZvbWluc2tpeSA6IDEgOiAxMTIzNjEKK01vc2tvdnNrYe9hIG9ibGFzdCBy6XNpZHU7UmFtZW5za29lIDogMSA6IDg3ODU3CitNb3Nrb3Zza2HvYSBvYmxhc3QgculzaWR1O1NoYXR1cmEgOiAxIDogMzE1NzcKK1ZsYWRpbWlyc2th72Egb2JsYXN0O011cm9tIDogMSA6IDE0Mzc1NQorU21vbGVuc2th72Egb2JsYXN0O0dhZ2FyaW4gOiAxIDogMjk2MDIKK01vc2tvdnNrYe9hIG9ibGFzdCBy6XNpZHU7Vmlkbm95ZSA6IDEgOiA1NTg4MgorTW9za292c2th72Egb2JsYXN0IHLpc2lkdTtMeXRrYXJpbm8gOiAxIDogNTE0OTkKK01vc2tvdnNrYe9hIG9ibGFzdCBy6XNpZHU7Vm9za3Jlc2Vuc2tpeSA6IDEgOiA3NjkwMAorTW9za292c2th72Egb2JsYXN0IHLpc2lkdTtQb2RvbHNraXkgOiAxIDogNzM2MTIKK01vc2tvdnNrYe9hIG9ibGFzdCBy6XNpZHU7TW96c2hheXNrIDogMSA6IDMwODc5CitNb3Nrb3Zza2HvYSBvYmxhc3QgculzaWR1O1Ryb2l0c2sgOiAxIDogMzAzODEKK01vc2tvdnNrYe9hIG9ibGFzdCBy6XNpZHU7WWVnb3J5ZXZza2l5IDogMSA6IDMxMDc5CitTbW9sZW5za2HvYSBvYmxhc3Q7WWFydHNldnNraXkgOiAxIDogMTA0NzIKK1JVLVVOSy0yODYzIDogMSA6IDI4Nzg4CitNb3Nrb3Zza2HvYSBvYmxhc3QgculzaWR1O0RvbW9kZWRvdnNraXkgOiAxIDogNjUxNDUKK01vc2tvdnNrYe9hIG9ibGFzdCBy6XNpZHU7UG9kb2xzayA6IDEgOiAyMDQyMDIKK01vc2tvdnNrYe9hIG9ibGFzdCBy6XNpZHU7RG9tb2RlZG92byA6IDEgOiA1NTg4MgorU21vbGVuc2th72Egb2JsYXN0O1Z5YXplbXNraXkgOiAxIDogMjUyNzMKK01vc2tvdnNrYe9hIG9ibGFzdCBy6XNpZHU7RWdvcnlldnNrIDogMSA6IDczMzE0CitNb3Nrb3Zza2HvYSBvYmxhc3QgculzaWR1O05hcm8tRm9taW5zayA6IDEgOiA1ODc3MAorTW9za292c2th72Egb2JsYXN0IHLpc2lkdTtLbGltb3ZzayA6IDEgOiA1Nzg3NAorTW9za292c2th72Egb2JsYXN0IHLpc2lkdTtWb3NrcmVzZW5zayA6IDEgOiA4MTE4MworUnlhemFuc2th72Egb2JsYXN0O0tsZXBpa292c2tpeSA6IDEgOiAzMzY4OQorU21vbGVuc2th72Egb2JsYXN0O1J1ZG55YW5za2l5IDogMSA6IDMzNzMxCitNb3Nrb3Zza2HvYSBvYmxhc3QgculzaWR1O0Jyb25uaXRzeSA6IDEgOiAxNjUzNQorS2Fsb3Vqc2th72Egb2JsYXN0O0Jvcm92c2tpeSA6IDEgOiA1NDQ2OAorU21vbGVuc2th72Egb2JsYXN0O1NhZm9ub3Zza2l5IDogMSA6IDE3MTE3CitNb3Nrb3Zza2HvYSBvYmxhc3QgculzaWR1O0NoZWtob3Zza2l5IDogMSA6IDM1MDYzCitLYWxvdWpza2HvYSBvYmxhc3Q7SXpub3Nrb3Zza2l5IDogMSA6IDg0NzMKK0thbG91anNrYe9hIG9ibGFzdDtNZWR5bnNraXkgOiAxIDogMTQ1MjUKK1Ntb2xlbnNrYe9hIG9ibGFzdDtUeW9ta2luc2tpeSA6IDEgOiA4MzU3CitNb3Nrb3Zza2HvYSBvYmxhc3QgculzaWR1O1N0dXBpbnNraXkgOiAxIDogNDg2MTAKK01vc2tvdnNrYe9hIG9ibGFzdCBy6XNpZHU7S29sb21lbnNraXkgOiAxIDogNDMyMzEKK0thbG91anNrYe9hIG9ibGFzdDtaaHVrb3Zza2l5IDogMSA6IDUwMDMwCitSeWF6YW5za2HvYSBvYmxhc3Q7S2FzaW1vdnNraXkgOiAxIDogNDAxMjkKK1Ntb2xlbnNrYe9hIG9ibGFzdDtWeWF6bWEgOiAxIDogNjA2MTQKK1JVLVVOSy0yODY0IDogMSA6IDU5MDY5CitTbW9sZW5za2HvYSBvYmxhc3Q7U2Fmb25vdm8gOiAxIDogNTY2ODcKK0thbG91anNrYe9hIG9ibGFzdDtNYWxveWFyb3NsYXZldHNraXkgOiAxIDogNTE2NDMKK0thbG91anNrYe9hIG9ibGFzdDtPYm5pbnNrIDogMSA6IDEwNjUxNAorU21vbGVuc2th72Egb2JsYXN0O1Ntb2xlbnNraXkgOiAxIDogNDk0MzgKK01vc2tvdnNrYe9hIG9ibGFzdCBy6XNpZHU7THVraG92aXRza2l5IDogMSA6IDY1MTQ1CitNb3Nrb3Zza2HvYSBvYmxhc3QgculzaWR1O0tvbG9tbmEgOiAxIDogMTYyMzY1CitTbW9sZW5za2HvYSBvYmxhc3Q7WWFydHNldm8gOiAxIDogNTU5ODMKK01vc2tvdnNrYe9hIG9ibGFzdCBy6XNpZHU7U2VycHVraG92c2tpeSA6IDEgOiAzNDk2MworUnlhemFuc2th72Egb2JsYXN0O1J5Ym5vdnNraXkgOiAxIDogMzgwNDgKK1J5YXphbnNrYe9hIG9ibGFzdDtZZXJtaXNoaW5za2l5IDogMSA6IDEzMDc5CitNb3Nrb3Zza2HvYSBvYmxhc3QgculzaWR1O096eW9yc2tpeSA6IDEgOiAxMTM1NgorU21vbGVuc2th72Egb2JsYXN0O0thcmR5bW92c2tpeSA6IDEgOiAxMzc5NAorU21vbGVuc2th72Egb2JsYXN0O1VncmFuc2tpeSA6IDEgOiAxMzc5NAorTW9za292c2th72Egb2JsYXN0IHLpc2lkdTtTdHVwaW5vIDogMSA6IDczNzEyCitTbW9sZW5za2HvYSBvYmxhc3Q7RG9yb2dvYnV6aHNraXkgOiAxIDogMzcxNTQKK0thbG91anNrYe9hIG9ibGFzdDtEemVyemhpbnNraXkgOiAxIDogNjIwMzMKK1J5YXphbnNrYe9hIG9ibGFzdDtLYXNpbW92IDogMSA6IDM4MTQ3CitLYWxvdWpza2HvYSBvYmxhc3Q7WXVraG5vdnNraXkgOiAxIDogMTM3MTgKK01vc2tvdnNrYe9hIG9ibGFzdCBy6XNpZHU7U2VycHVraG92IDogMSA6IDEzOTk1MworUnlhemFuc2th72Egb2JsYXN0O1J5YXphbnNraXkgOiAxIDogNzI1MzAKK1JVLVVOSy0yODY1IDogMSA6IDM2NzU2CitNb3Nrb3Zza2HvYSBvYmxhc3QgculzaWR1O1phcmF5c2tpeSA6IDEgOiAxODIyOQorS2Fsb3Vqc2th72Egb2JsYXN0O1RhcnVzc2tpeSA6IDEgOiAxNjIzOQorTW9za292c2th72Egb2JsYXN0IHLpc2lkdTtPemVyeSA6IDEgOiAyODI4OQorUnlhemFuc2th72Egb2JsYXN0O1NwYXNza2l5IDogMSA6IDQwMDMwCitNb3Nrb3Zza2HvYSBvYmxhc3QgculzaWR1O0thc2hpcnNraXkgOiAxIDogMzI1NzMKK01vc2tvdnNrYe9hIG9ibGFzdCBy6XNpZHU7S2FzaGlyYSA6IDEgOiA0MzgyOQorUnlhemFuc2th72Egb2JsYXN0O1NoaWxvdnNraXkgOiAxIDogNTEwMjgKK1RvdWxza2HvYSBvYmxhc3Q7WmFva3NraXkgOiAxIDogMTk4NTcKK1RvdWxza2HvYSBvYmxhc3Q7WWFzbm9nb3Jza2l5IDogMSA6IDQwMTEwCitTbW9sZW5za2HvYSBvYmxhc3Q7R2xpbmtvdnNraXkgOiAxIDogNzY1MgorTW9za292c2th72Egb2JsYXN0IHLpc2lkdTtaYXJheXNrIDogMSA6IDI3MDk0CitSeWF6YW5za2HvYSBvYmxhc3Q7UGl0ZWxpbnNraXkgOiAxIDogODgxOAorU21vbGVuc2th72Egb2JsYXN0O1Ntb2xlbnNrIDogMSA6IDM1MTQwMgorS2Fsb3Vqc2th72Egb2JsYXN0O01vc2Fsc2tpeSA6IDEgOiAxMTkwMgorUnlhemFuc2th72Egb2JsYXN0O0thZG9tc2tpeSA6IDEgOiAxNDI2OAorS2Fsb3Vqc2th72Egb2JsYXN0O0Zlcnppa292c2tpeSA6IDEgOiAxNzE0NworVG91bHNrYe9hIG9ibGFzdDtWZW5ldnNraXkgOiAxIDogNDAyMDkKK0thbG91anNrYe9hIG9ibGFzdDtLYWx1Z2EgOiAxIDogMzY0MjI3CitSeWF6YW5za2HvYSBvYmxhc3Q7UnlhemFuIDogMSA6IDUyMzU2MQorU21vbGVuc2th72Egb2JsYXN0O0tyYXNuaW5za2l5IDogMSA6IDE4NzI4CitUb3Vsc2th72Egb2JsYXN0O0FsZWtzaW5za2l5IDogMSA6IDE0MDk4CitTbW9sZW5za2HvYSBvYmxhc3Q7WWVsbmluc2tpeSA6IDEgOiAxODcyOAorTW9za292c2th72Egb2JsYXN0IHLpc2lkdTtTZXJlYnJ5YW5vcHJ1ZHNraXkgOiAxIDogMjUxMDIKK1J5YXphbnNrYe9hIG9ibGFzdDtaYWtoYXJvdnNraXkgOiAxIDogMTEyOTYKK0thbG91anNrYe9hIG9ibGFzdDtCYWJ5bmluc2tpeSA6IDEgOiAxOTM2NgorU21vbGVuc2th72Egb2JsYXN0O1BvY2hpbmtvdnNraXkgOiAxIDogNDM3OTkKK0thbG91anNrYe9hIG9ibGFzdDtTcGFzLURlbWVuc2tpeSA6IDEgOiAxMjgxMAorS2Fsb3Vqc2th72Egb2JsYXN0O0JhcnlhdGluc2tpeSA6IDEgOiA4MTcwCitLYWxvdWpza2HvYSBvYmxhc3Q7TWVzY2hvdnNraXkgOiAxIDogMTUyMzEKK1J5YXphbnNrYe9hIG9ibGFzdDtTYXNvdnNraXkgOiAxIDogMjU3NjIKK1J5YXphbnNrYe9hIG9ibGFzdDtDaHVjaGtvdnNraXkgOiAxIDogMTIwODgKK1RvdWxza2HvYSBvYmxhc3Q7QWxla3NpbiA6IDEgOiA3MjM3NworU21vbGVuc2th72Egb2JsYXN0O01vbmFzdHlyc2hpbnNraXkgOiAxIDogMTcxMTcKK0thbG91anNrYe9hIG9ibGFzdDtQZXJlbXlzaGxza2l5IDogMSA6IDE1MjMxCitSeWF6YW5za2HvYSBvYmxhc3Q7U3Rhcm96aGlsb3Zza2l5IDogMSA6IDE4MDMzCitSeWF6YW5za2HvYSBvYmxhc3Q7TWlraGF5bG92c2tpeSA6IDEgOiA0Mzk5MworUnlhemFuc2th72Egb2JsYXN0O1Byb25za2l5IDogMSA6IDM1NjcwCitUb3Vsc2th72Egb2JsYXN0O0xlbmluc2tpeSA6IDEgOiA2NTIyOQorUnlhemFuc2th72Egb2JsYXN0O1Nhc292byA6IDEgOiAzNDM4MgorS2Fsb3Vqc2th72Egb2JsYXN0O1N1a2hpbmljaHNraXkgOiAxIDogMzEwNjcKK1RvdWxza2HvYSBvYmxhc3Q7Tm92b21vc2tvdnNraXkgOiAxIDogMjU5MTMKK0thbG91anNrYe9hIG9ibGFzdDtLb3plbHNraXkgOiAxIDogNDkyMjMKK1RvdWxza2HvYSBvYmxhc3Q7RHViZW5za2l5IDogMSA6IDE1Mzg5CitSeWF6YW5za2HvYSBvYmxhc3Q7UHV0eWF0aW5za2l5IDogMSA6IDEwNTAzCitLYWxvdWpza2HvYSBvYmxhc3Q7S3V5YnlzaGV2c2tpeSA6IDEgOiAxMTYwMAorVG91bHNrYe9hIG9ibGFzdDtTdXZvcm92c2tpeSA6IDEgOiA0NDg3NgorVG91bHNrYe9hIG9ibGFzdDtUdWxhIDogMSA6IDU4MDcwNAorU21vbGVuc2th72Egb2JsYXN0O1Jvc2xhdmxza2l5IDogMSA6IDI4Mzk0CitSeWF6YW5za2HvYSBvYmxhc3Q7U2hhdHNraXkgOiAxIDogMzY1NjIKK1RvdWxza2HvYSBvYmxhc3Q7S2lyZXlldnNraXkgOiAxIDogOTA2NDUKK0thbG91anNrYe9hIG9ibGFzdDtLaXJvdnNraXkgOiAxIDogOTU4MgorU21vbGVuc2th72Egb2JsYXN0O0toaXNsYXZpY2hza2l5IDogMSA6IDE0Mzk4CitLYWxvdWpza2HvYSBvYmxhc3Q7RHVtaW5pY2hza2l5IDogMSA6IDE3MzQ5CitSeWF6YW5za2HvYSBvYmxhc3Q7S29yYWJsaW5za2l5IDogMSA6IDI4MjM5CitSeWF6YW5za2HvYSBvYmxhc3Q7U2Fwb3poa292c2tpeSA6IDEgOiAxNTU1NgorVG91bHNrYe9hIG9ibGFzdDtPZG95ZXZza2l5IDogMSA6IDE1Mzg5CitUb3Vsc2th72Egb2JsYXN0O0tpbW92c2tpeSA6IDEgOiAxOTU1OQorS2Fsb3Vqc2th72Egb2JsYXN0O0tpcm92IDogMSA6IDM5NDM5CitLYWxvdWpza2HvYSBvYmxhc3Q7THl1ZGlub3Zza2l5IDogMSA6IDY1NTYKK1RvdWxza2HvYSBvYmxhc3Q7VXpsb3Zza2l5IDogMSA6IDEzMDA2CitUb3Vsc2th72Egb2JsYXN0O1NjaGVraW5za2l5IDogMSA6IDQ1OTY4CitCcnlhbnNrYe9hIG9ibGFzdDtSb2duZWRpbnNraXkgOiAxIDogMTEwODAKK1Ntb2xlbnNrYe9hIG9ibGFzdDtEZXNub2dvcnNrIDogMSA6IDM0NDM1CitUb3Vsc2th72Egb2JsYXN0O05vdm9tb3Nrb3ZzayA6IDEgOiAxNDMzNjQKK1Ntb2xlbnNrYe9hIG9ibGFzdDtTaHVteWFjaHNraXkgOiAxIDogMTc1MjAKK1RvdWxza2HvYSBvYmxhc3Q7RG9uc2tveSA6IDEgOiA3NDE2NAorUnlhemFuc2th72Egb2JsYXN0O1NhcmF5ZXZza2l5IDogMSA6IDI3NTQ1CitUb3Vsc2th72Egb2JsYXN0O1NjaGVraW5vIDogMSA6IDc5MzI3CitUb3Vsc2th72Egb2JsYXN0O1V6bG92YXlhIDogMSA6IDg0Njg4CitUb3Vsc2th72Egb2JsYXN0O0JlbHlldnNraXkgOiAxIDogMjg5OTEKK1J5YXphbnNrYe9hIG9ibGFzdDtVa2hvbG92c2tpeSA6IDEgOiAxMzM3NgorUnlhemFuc2th72Egb2JsYXN0O1Nrb3BpbnNraXkgOiAxIDogMzc1NTMKK1Ntb2xlbnNrYe9hIG9ibGFzdDtSb3NsYXZsJyA6IDEgOiA2MDkxNgorVG91bHNrYe9hIG9ibGFzdDtLaW1vdnNrIDogMSA6IDM3MzMwCitLYWxvdWpza2HvYSBvYmxhc3Q7VWx5YW5vdnNraXkgOiAxIDogMTIwMDMKK0thbG91anNrYe9hIG9ibGFzdDtMeXVkaW5vdm8gOiAxIDogNDU0OTEKK0thbG91anNrYe9hIG9ibGFzdDtaaGl6ZHJpbnNraXkgOiAxIDogMTM3MTgKK0JyeWFuc2th72Egb2JsYXN0O0R5YXRrb3Zza2l5IDogMSA6IDQ5NjU2CitSeWF6YW5za2HvYSBvYmxhc3Q7Unlhemhza2l5IDogMSA6IDM1NDcyCitCcnlhbnNrYe9hIG9ibGFzdDtEdWJyb3Zza2l5IDogMSA6IDIzMTY2CitUb3Vsc2th72Egb2JsYXN0O0JvZ29yb2RpdHNraXkgOiAxIDogMTM4MDAKK1J5YXphbnNrYe9hIG9ibGFzdDtTa29waW4gOiAxIDogMzc5NDkKK1RvdWxza2HvYSBvYmxhc3Q7UGxhdnNraXkgOiAxIDogMjg3OTIKK1J5YXphbnNrYe9hIG9ibGFzdDtNaWxvc2xhdnNraXkgOiAxIDogMjA2MTAKK1RvdWxza2HvYSBvYmxhc3Q7VGVwbG8tT2dhcmV2c2tpeSA6IDEgOiAxNTM4OQorVG91bHNrYe9hIG9ibGFzdDtBcnNlbnlldnNraXkgOiAxIDogMTI5MDcKK1RvdWxza2HvYSBvYmxhc3Q7Qm9nb3JvZGl0c2sgOiAxIDogNTE2MjcKK0JyeWFuc2th72Egb2JsYXN0O1podWtvdnNraXkgOiAxIDogMzg0NzYKK1Ntb2xlbnNrYe9hIG9ibGFzdDtZZXJzaGljaHNraXkgOiAxIDogMTExNzYKK0thbG91anNrYe9hIG9ibGFzdDtLaHZhc3RvdmljaHNraXkgOiAxIDogMTQ4MjcKK1RvdWxza2HvYSBvYmxhc3Q7Vm9sb3Zza2l5IDogMSA6IDE3NTczCitUb3Vsc2th72Egb2JsYXN0O0t1cmtpbnNraXkgOiAxIDogMTUwOTEKK1RvdWxza2HvYSBvYmxhc3Q7Q2hlcm5za2l5IDogMSA6IDIyOTM0CitCcnlhbnNrYe9hIG9ibGFzdDtLbGV0bnlhbnNraXkgOiAxIDogMjQxNzMKK1J5YXphbnNrYe9hIG9ibGFzdDtOb3ZvZGVyZXZlbnNraXkgOiAxIDogMTM0NzUKK09ybG92c2th72Egb2JsYXN0O0JvbGtob3Zza2l5IDogMSA6IDIzNTI0CitCcnlhbnNrYe9hIG9ibGFzdDtEeWF0J2tvdm8gOiAxIDogMzUyNTMKK0JyeWFuc2th72Egb2JsYXN0O0JyeWFuc2tpeSA6IDEgOiA1Mzc4NgorT3Jsb3Zza2HvYSBvYmxhc3Q7Wm5hbWVuc2tpeSA6IDEgOiA3MjM4CitPcmxvdnNrYe9hIG9ibGFzdDtNdHNlbnNraXkgOiAxIDogMjI4MjAKK1RvdWxza2HvYSBvYmxhc3Q7S2FtZW5za2l5IDogMSA6IDExMzE4CitUb3Vsc2th72Egb2JsYXN0O1llZnJlbW92c2tpeSA6IDEgOiAyNDkyMAorT3Jsb3Zza2HvYSBvYmxhc3Q7S2hvdHluZXRza2l5IDogMSA6IDEzMTY5CitCcnlhbnNrYe9hIG9ibGFzdDtLYXJhY2hldnNraXkgOiAxIDogNDE4MDAKK0JyeWFuc2th72Egb2JsYXN0O1N1cmF6aHNraXkgOiAxIDogMzA3MjAKK0JyeWFuc2th72Egb2JsYXN0O0JyeWFuc2sgOiAxIDogNDgxOTU5CitCcnlhbnNrYe9hIG9ibGFzdDtaaGlyeWF0aW5za2l5IDogMSA6IDkzNjcKK1JVLVVOSy0yODY2IDogMSA6IDIwNDQ3CitPcmxvdnNrYe9hIG9ibGFzdDtNemVuc2sgOiAxIDogNTA4NjcKK0JyeWFuc2th72Egb2JsYXN0O01nbGluc2tpeSA6IDEgOiAyNDU3NgorT3Jsb3Zza2HvYSBvYmxhc3Q7S29yc2Frb3Zza2l5IDogMSA6IDYwMzIKK09ybG92c2th72Egb2JsYXN0O09ybG92c2tpeSA6IDEgOiA2NDQzOQorQnJ5YW5za2HvYSBvYmxhc3Q7S3Jhc25vZ29yc2tpeSA6IDEgOiAxNjIxNgorQnJ5YW5za2HvYSBvYmxhc3Q7Vnlnb25pY2hza2l5IDogMSA6IDIzODcxCitCcnlhbnNrYe9hIG9ibGFzdDtQb2NoZXBza2l5IDogMSA6IDQ4ODUxCitPcmxvdnNrYe9hIG9ibGFzdDtOb3Zvc2lsc2tpeSA6IDEgOiAxMjI2NAorT3Jsb3Zza2HvYSBvYmxhc3Q7VXJpdHNraXkgOiAxIDogMTk3MDQKK1RvdWxza2HvYSBvYmxhc3Q7RWZyZW1vdiA6IDEgOiA1NTQ5OQorQnJ5YW5za2HvYSBvYmxhc3Q7R29yZGV5ZXZza2l5IDogMSA6IDE0NzA2CitPcmxvdnNrYe9hIG9ibGFzdDtOb3ZvZGVyZXZlbmtvdnNraXkgOiAxIDogMTU0ODEKK0JyeWFuc2th72Egb2JsYXN0O05hdmxpbnNraXkgOiAxIDogMzIxMzEKK09ybG92c2th72Egb2JsYXN0O1phbGVnb3NjaGVuc2tpeSA6IDEgOiAxOTkwNQorT3Jsb3Zza2HvYSBvYmxhc3Q7U2hhYmx5a2luc2tpeSA6IDEgOiAxMDk1OAorT3Jsb3Zza2HvYSBvYmxhc3Q7T3J5b2wgOiAxIDogMzQ0ODEzCitCcnlhbnNrYe9hIG9ibGFzdDtVbmVjaHNraXkgOiAxIDogNDg5NTEKK09ybG92c2th72Egb2JsYXN0O1Zlcmtob3Zza2l5IDogMSA6IDI0NjMwCitCcnlhbnNrYe9hIG9ibGFzdDtLbGludHNvdnNraXkgOiAxIDogMjczOTcKK09ybG92c2th72Egb2JsYXN0O0tyYXNub3pvcmVuc2tpeSA6IDEgOiA5NDUwCitPcmxvdnNrYe9hIG9ibGFzdDtTb3Nrb3Zza2l5IDogMSA6IDk1NTAKK0JyeWFuc2th72Egb2JsYXN0O1RydWJjaGV2c2tpeSA6IDEgOiA0NDcyMQorT3Jsb3Zza2HvYSBvYmxhc3Q7U3ZlcmRsb3Zza2l5IDogMSA6IDE5NzA0CitPcmxvdnNrYe9hIG9ibGFzdDtLcm9tc2tpeSA6IDEgOiAyNTMzMworQnJ5YW5za2HvYSBvYmxhc3Q7QnJhc292c2tpeSA6IDEgOiAyNzQ5NworQnJ5YW5za2HvYSBvYmxhc3Q7S2xpbnRzeSA6IDEgOiA3ODc2NQorT3Jsb3Zza2HvYSBvYmxhc3Q7UG9rcm92c2tpeSA6IDEgOiAyMDUwOAorQnJ5YW5za2HvYSBvYmxhc3Q7Tm92b3p5YmtvdnNraXkgOiAxIDogMTUzMTAKK0JyeWFuc2th72Egb2JsYXN0O1N0YXJvZHVic2tpeSA6IDEgOiA1MDI2MQorQnJ5YW5za2HvYSBvYmxhc3Q7UG9nYXJza2l5IDogMSA6IDM4NTc3CitPcmxvdnNrYe9hIG9ibGFzdDtEbWl0cm92c2tpeSA6IDEgOiAxNzk5NQorT3Jsb3Zza2HvYSBvYmxhc3Q7TGl2ZW5za2l5IDogMSA6IDM1MDg0CitCcnlhbnNrYe9hIG9ibGFzdDtTdXplbXNraXkgOiAxIDogMjExNTIKK09ybG92c2th72Egb2JsYXN0O0dsYXp1bm92c2tpeSA6IDEgOiAxNjg4OQorT3Jsb3Zza2HvYSBvYmxhc3Q7TWFsb2Fya2hhbmdlbHNraXkgOiAxIDogMTU4ODQKK0JyeWFuc2th72Egb2JsYXN0O05vdm96eWJrb3YgOiAxIDogNDI1MDUKK0JyeWFuc2th72Egb2JsYXN0O0tsaW1vdnNraXkgOiAxIDogNDAzOTAKK0JyeWFuc2th72Egb2JsYXN0O0tvbWFyaWNoc2tpeSA6IDEgOiAyMTc1NgorT3Jsb3Zza2HvYSBvYmxhc3Q7VHJvc255YW5za2l5IDogMSA6IDE0Mjc1CitPcmxvdnNrYe9hIG9ibGFzdDtMaXZueSA6IDEgOiA1MzU4MgorQnJ5YW5za2HvYSBvYmxhc3Q7Wmx5bmtvdnNraXkgOiAxIDogMTUzMTAKK09ybG92c2th72Egb2JsYXN0O0tvbHBueWFuc2tpeSA6IDEgOiAyMjExNgorQnJ5YW5za2HvYSBvYmxhc3Q7U2V2c2tpeSA6IDEgOiAyMTU1NQorT3Jsb3Zza2HvYSBvYmxhc3Q7RG9semhhbnNraXkgOiAxIDogMTUzODEKK1JVLVVOSy0yODY3IDogMSA6IDQzMDIyCitSVS1VTkstMjg2OCA6IDEgOiA2NTA0NgorUlUtVU5LLTI4NjkgOiAxIDogMTY4NzEKK1JVLVVOSy0yODcwIDogMSA6IDI1NDAxCitSVS1VTkstMjg3MSA6IDEgOiAyODc4OAorUlUtVU5LLTI4NzIgOiAxIDogNTkwNjkKK1JVLVVOSy0yODczIDogMSA6IDM2NzU2CitSVS1VTkstMjg3NCA6IDEgOiAyMDQ0NworTGVuaW5ncmFkc2th72Egb2JsYXN0IHLpcztWeWJvcmdza2l5IDogMSA6IDExMDkwNgorTGVuaW5ncmFkc2th72Egb2JsYXN0IHLpcztQb2Rwb3Jvemhza2l5IDogMSA6IDE3ODY1CitMZW5pbmdyYWRza2HvYSBvYmxhc3QgculzO1ByaW96ZXJza2l5IDogMSA6IDQzMTU4CitMZW5pbmdyYWRza2HvYSBvYmxhc3QgculzO1ByaW96ZXJzayA6IDEgOiAyMDI3NAorTGVuaW5ncmFkc2th72Egb2JsYXN0IHLpcztMb2RleW5vcG9sc2tpeSA6IDEgOiAxMzg1MQorTGVuaW5ncmFkc2th72Egb2JsYXN0IHLpcztQb2Rwb3Jvemh5ZSA6IDEgOiAyMzI4NQorTGVuaW5ncmFkc2th72Egb2JsYXN0IHLpcztMb2RleW5veWUgUG9sZSA6IDEgOiAyNTQ5MworTGVuaW5ncmFkc2th72Egb2JsYXN0IHLpcztWeWJvcmcgOiAxIDogODA3OTYKK0xlbmluZ3JhZHNrYe9hIG9ibGFzdCBy6XM7Vm9sa2hvdnNraXkgOiAxIDogNTgxMTMKK0xlbmluZ3JhZHNrYe9hIG9ibGFzdCBy6XM7VnNldm9semhza2l5IDogMSA6IDE0MjUyMgorU2Fua3QtUGV0ZXJidXJnO1Nhbmt0LVBldGVyc2J1cmcgOiAxIDogNDg0MDU0MworTGVuaW5ncmFkc2th72Egb2JsYXN0IHLpcztUaWtodmluc2tpeSA6IDEgOiAxNjg2MgorTGVuaW5ncmFkc2th72Egb2JsYXN0IHLpcztMb21vbm9zb3Zza2l5IDogMSA6IDY3NDQ3CitMZW5pbmdyYWRza2HvYSBvYmxhc3QgculzO0Jva3NpdG9nb3Jza2l5IDogMSA6IDIzODg4CitMZW5pbmdyYWRza2HvYSBvYmxhc3QgculzO1ZzZXZvbG96aHNrIDogMSA6IDMzMDIxCitMZW5pbmdyYWRza2HvYSBvYmxhc3QgculzO0tpcm92c2tpeSA6IDEgOiA3NTY3NworTGVuaW5ncmFkc2th72Egb2JsYXN0IHLpcztTb3Nub3Z5aSBCb3IgOiAxIDogNTg3MTUKK0xlbmluZ3JhZHNrYe9hIG9ibGFzdCBy6XM7S2luZ2lzZXBwc2tpeSA6IDEgOiAyMzk4OAorTGVuaW5ncmFkc2th72Egb2JsYXN0IHLpcztWb2xraG92IDogMSA6IDQ4ODc5CitMZW5pbmdyYWRza2HvYSBvYmxhc3QgculzO0tpcm92c2sgOiAxIDogMjM2ODcKK0xlbmluZ3JhZHNrYe9hIG9ibGFzdCBy6XM7S2lyaXNoc2tpeSA6IDEgOiAxNDM1MworTGVuaW5ncmFkc2th72Egb2JsYXN0IHLpcztUb3NuZW5za2l5IDogMSA6IDc3MTgzCitMZW5pbmdyYWRza2HvYSBvYmxhc3QgculzO0dhdGNoaW5za2l5IDogMSA6IDEzMjQ4NQorTGVuaW5ncmFkc2th72Egb2JsYXN0IHLpcztWb2xvc292c2tpeSA6IDEgOiA0NjU3MQorTGVuaW5ncmFkc2th72Egb2JsYXN0IHLpcztUaWtodmluIDogMSA6IDcxNzYzCitMZW5pbmdyYWRza2HvYSBvYmxhc3QgculzO0dhdGNoaW5hIDogMSA6IDgyNzAzCitMZW5pbmdyYWRza2HvYSBvYmxhc3QgculzO1Rvc25vIDogMSA6IDM0NTI2CitMZW5pbmdyYWRza2HvYSBvYmxhc3QgculzO0Jva3NpdG9nb3JzayA6IDEgOiAyMTY3OQorTGVuaW5ncmFkc2th72Egb2JsYXN0IHLpcztJdmFuZ29yb2QgOiAxIDogMTE2NDMKK0xlbmluZ3JhZHNrYe9hIG9ibGFzdCBy6XM7S2luZ2lzZXBwIDogMSA6IDUxMzg4CitMZW5pbmdyYWRza2HvYSBvYmxhc3QgculzO1Bpa2FsZXZvIDogMSA6IDI1MjkzCitMZW5pbmdyYWRza2HvYSBvYmxhc3QgculzO1NsYW50c2V2c2tpeSA6IDEgOiAxMTA0MAorTGVuaW5ncmFkc2th72Egb2JsYXN0IHLpcztLaXJpc2hpIDogMSA6IDU0NjAwCitOb3Znb3JvZHNrYe9hIG9ibGFzdDtDaHVkb3Zza2l5IDogMSA6IDI2NzIzCitOb3Znb3JvZHNrYe9hIG9ibGFzdDtMeXVieXRpbnNraXkgOiAxIDogMTQ3MDIKK0xlbmluZ3JhZHNrYe9hIG9ibGFzdCBy6XM7THV6aHNraXkgOiAxIDogNDU5NjgKK05vdmdvcm9kc2th72Egb2JsYXN0O0todm95bmluc2tpeSA6IDEgOiAxODg3NQorTm92Z29yb2Rza2HvYSBvYmxhc3Q7TWFsb3Zpc2hlcnNraXkgOiAxIDogMjM5NDEKK0xlbmluZ3JhZHNrYe9hIG9ibGFzdCBy6XM7U2xhbnRzeSA6IDEgOiA0MTc1MworTm92Z29yb2Rza2HvYSBvYmxhc3Q7Tm92Z29yb2Rza2l5IDogMSA6IDU1MDM0CitQc2tvdnNrYe9hIG9ibGFzdDtHZG92c2tpeSA6IDEgOiAxOTk5NgorUHNrb3Zza2HvYSBvYmxhc3Q7UGx5dXNza2l5IDogMSA6IDEzODI4CitOb3Znb3JvZHNrYe9hIG9ibGFzdDtCYXRldHNraXkgOiAxIDogNzQ1MQorTGVuaW5ncmFkc2th72Egb2JsYXN0IHLpcztMdWdhIDogMSA6IDQxNDUyCitOb3Znb3JvZHNrYe9hIG9ibGFzdDtQZXN0b3Zza2l5IDogMSA6IDI1NjMwCitOb3Znb3JvZHNrYe9hIG9ibGFzdDtCb3JvdmljaHNraXkgOiAxIDogMjA5NjEKK05vdmdvcm9kc2th72Egb2JsYXN0O01vc2hlbnNraXkgOiAxIDogMTA1MzAKK05vdmdvcm9kc2th72Egb2JsYXN0O09rdWxvdnNraXkgOiAxIDogMzUyNjYKK05vdmdvcm9kc2th72Egb2JsYXN0O05vdmdvcm9kIDogMSA6IDIzOTQxMAorUHNrb3Zza2HvYSBvYmxhc3Q7U3RydWdvLUtyYXNuZW5za2l5IDogMSA6IDE2MDE3CitOb3Znb3JvZHNrYe9hIG9ibGFzdDtLcmVzdGV0c2tpeSA6IDEgOiAxNjU5MAorTm92Z29yb2Rza2HvYSBvYmxhc3Q7U2hpbXNraXkgOiAxIDogMTMzMTIKK05vdmdvcm9kc2th72Egb2JsYXN0O0Jvcm92aWNoaSA6IDEgOiA2MTc5MAorUHNrb3Zza2HvYSBvYmxhc3Q7UHNrb3Zza2l5IDogMSA6IDM2OTA4CitOb3Znb3JvZHNrYe9hIG9ibGFzdDtTb2xldHNraXkgOiAxIDogMTk4NjgKK05vdmdvcm9kc2th72Egb2JsYXN0O1N0YXJvcnVzc2tpeSA6IDEgOiAxODU3NworTm92Z29yb2Rza2HvYSBvYmxhc3Q7UGFyZmlubyA6IDEgOiAxNjk4NworTm92Z29yb2Rza2HvYSBvYmxhc3Q7VmFsZGF5c2tpeSA6IDEgOiAzMjI4NgorUHNrb3Zza2HvYSBvYmxhc3Q7UG9ya2hvdnNraXkgOiAxIDogMzM3MjUKK05vdmdvcm9kc2th72Egb2JsYXN0O0RlbXlhbnNraXkgOiAxIDogMTgyNzkKK05vdmdvcm9kc2th72Egb2JsYXN0O1ZvbG90b3Zza2l5IDogMSA6IDY4NTQKK05vdmdvcm9kc2th72Egb2JsYXN0O1N0YXJheWEgUnVzc2EgOiAxIDogNDAwMzQKK1Bza292c2th72Egb2JsYXN0O1BlY2hvcnNraXkgOiAxIDogMjc1NTcKK1Bza292c2th72Egb2JsYXN0O0Rub3Zza2l5IDogMSA6IDE5MjAwCitQc2tvdnNrYe9hIG9ibGFzdDtQc2tvdiA6IDEgOiAyMDY5MjUKK05vdmdvcm9kc2th72Egb2JsYXN0O1BvZGRvcnNraXkgOiAxIDogNjY1NgorUHNrb3Zza2HvYSBvYmxhc3Q7UGFsa2luc2tpeSA6IDEgOiAxMTkzOAorUHNrb3Zza2HvYSBvYmxhc3Q7RGVkb3ZpY2hlc2tpeSA6IDEgOiAxODcwMworUHNrb3Zza2HvYSBvYmxhc3Q7T3N0cm92c2tpeSA6IDEgOiAxMzMzMQorTm92Z29yb2Rza2HvYSBvYmxhc3Q7TWFyZXZza2l5IDogMSA6IDY0NTcKK1Bza292c2th72Egb2JsYXN0O0Jlemhhbml0c2tpeSA6IDEgOiAyMTI4OQorUHNrb3Zza2HvYSBvYmxhc3Q7UHl0YWxvdnNraXkgOiAxIDogMTU1MTkKK05vdmdvcm9kc2th72Egb2JsYXN0O0tob2xtc2tpeSA6IDEgOiA4ODQxCitQc2tvdnNrYe9hIG9ibGFzdDtOb3ZvcnpoZXZza2l5IDogMSA6IDE1MTIxCitQc2tvdnNrYe9hIG9ibGFzdDtPc3Ryb3YgOiAxIDogMjg4NTAKK1Bza292c2th72Egb2JsYXN0O0xva255YW5za2l5IDogMSA6IDE1ODE4CitQc2tvdnNrYe9hIG9ibGFzdDtQdXNoa2luby1Hb3Jza2l5IDogMSA6IDEzMDMyCitQc2tvdnNrYe9hIG9ibGFzdDtLcmFzbm9nb3JvZHNraXkgOiAxIDogMTE3MzkKK1Bza292c2th72Egb2JsYXN0O09wb2NoZW5za2l5IDogMSA6IDI4MDU0CitQc2tvdnNrYe9hIG9ibGFzdDtWZWxpa29sdWtza2l5IDogMSA6IDI4NDUyCitQc2tvdnNrYe9hIG9ibGFzdDtOb3Zvc29rb2xuaWNoZXNraXkgOiAxIDogMjA3OTIKK1Bza292c2th72Egb2JsYXN0O1B1c3Rvc2hraW5za2l5IDogMSA6IDEzODI4CitQc2tvdnNrYe9hIG9ibGFzdDtTZWJlemhza2l5IDogMSA6IDI2NDYzCitQc2tvdnNrYe9hIG9ibGFzdDtLdW55aW5za2l5IDogMSA6IDE2NTE0CitQc2tvdnNrYe9hIG9ibGFzdDtWZWxpa2llIEx1a2kgOiAxIDogMTE1NDAxCitQc2tvdnNrYe9hIG9ibGFzdDtOZXZlbHNraXkgOiAxIDogMzc1MDUKK1Bza292c2th72Egb2JsYXN0O1VzdnlhdHNraXkgOiAxIDogNzk1OQorUm9zdG92c2th72Egb2JsYXN0O1ZlcmtobmVkb25za295IDogMSA6IDI2NjM2CitSb3N0b3Zza2HvYSBvYmxhc3Q7U2hvbG9raG92c2tpeSA6IDEgOiAzMDE2OAorUm9zdG92c2th72Egb2JsYXN0O0NoZXJ0a292c2tpeSA6IDEgOiA0MDY2MQorUm9zdG92c2th72Egb2JsYXN0O0Jva292c2tpeSA6IDEgOiAxODc2NworUm9zdG92c2th72Egb2JsYXN0O0thc2hhcnNraXkgOiAxIDogMzAyNjkKK1Jvc3RvdnNrYe9hIG9ibGFzdDtNaWxsZXJvdnNraXkgOiAxIDogMzcwMjkKK1Jvc3RvdnNrYe9hIG9ibGFzdDtTb3ZldHNraXkgOiAxIDogODk4MAorUm9zdG92c2th72Egb2JsYXN0O01pbGxlcm92byA6IDEgOiAzODg0NQorUm9zdG92c2th72Egb2JsYXN0O01pbHl1dGluc2tpeSA6IDEgOiAyMDE3OQorUm9zdG92c2th72Egb2JsYXN0O09ibGl2c2tpeSA6IDEgOiAyMTA4NworUm9zdG92c2th72Egb2JsYXN0O1RhcmFzb3Zza2l5IDogMSA6IDM0NjA3CitSb3N0b3Zza2HvYSBvYmxhc3Q7S2FtZW5za2l5IDogMSA6IDUzODc4CitSb3N0b3Zza2HvYSBvYmxhc3Q7QmVsb2thbGl0dmluc2tpeSA6IDEgOiAyODQ1MworUm9zdG92c2th72Egb2JsYXN0O1RhdHN5bnNraXkgOiAxIDogNDQ0OTUKK1Jvc3RvdnNrYe9hIG9ibGFzdDtNb3Jvem92c2tpeSA6IDEgOiA0NjEwOQorUm9zdG92c2th72Egb2JsYXN0O0RvbmV0c2sgOiAxIDogNTUxOTAKK1Jvc3RvdnNrYe9hIG9ibGFzdDtLYW1lbnNrLVNoYWtodGluc2tpeSA6IDEgOiA5NzI2NAorUm9zdG92c2th72Egb2JsYXN0O0JlbGF5YSBLYWxpdHZhIDogMSA6IDk1OTUyCitSb3N0b3Zza2HvYSBvYmxhc3Q7S3Jhc25vc3VsaW5za2l5IDogMSA6IDM0NDA1CitSb3N0b3Zza2HvYSBvYmxhc3Q7R3Vrb3ZvIDogMSA6IDc4Mzk2CitSb3N0b3Zza2HvYSBvYmxhc3Q7VHN5bWx5YW5za2l5IDogMSA6IDM1MDExCitSb3N0b3Zza2HvYSBvYmxhc3Q7WnZlcmV2byA6IDEgOiAzMzI5NgorUm9zdG92c2th72Egb2JsYXN0O0tvbnN0YW50aW5vdnNraXkgOiAxIDogMzc3MzUKK1Jvc3RvdnNrYe9hIG9ibGFzdDtLcmFzbnlpIFN1bGluIDogMSA6IDQ2NjE0CitSb3N0b3Zza2HvYSBvYmxhc3Q7VXN0LURvbmV0c2tpeSA6IDEgOiAzMTM3OQorUm9zdG92c2th72Egb2JsYXN0O1JvZGlvbm92by1OZXN2ZXRheXNraXkgOiAxIDogMjI2MDEKK1Jvc3RvdnNrYe9hIG9ibGFzdDtLdXlieXNoZXZza2l5IDogMSA6IDE0ODMyCitSb3N0b3Zza2HvYSBvYmxhc3Q7Tm92b3NoYWtodGluc2sgOiAxIDogMTIzMzk1CitSb3N0b3Zza2HvYSBvYmxhc3Q7T2t0eWFicnNraXkgOiAxIDogNjg0MDcKK1Jvc3RvdnNrYe9hIG9ibGFzdDtTaGFraHR5IDogMSA6IDI1OTgwNworUm9zdG92c2th72Egb2JsYXN0O01hdHZleWV2by1LdXJnYW5za2l5IDogMSA6IDQ0Mzk0CitSb3N0b3Zza2HvYSBvYmxhc3Q7RHVib3Zza2l5IDogMSA6IDI3MTQxCitSb3N0b3Zza2HvYSBvYmxhc3Q7Vm9sZ29kb25za2l5IDogMSA6IDI2OTM5CitSb3N0b3Zza2HvYSBvYmxhc3Q7U2VtaWthcmFrb3Jza2l5IDogMSA6IDU0Nzg2CitSb3N0b3Zza2HvYSBvYmxhc3Q7TmVrbGlub3Zza2l5IDogMSA6IDc5NDA1CitSb3N0b3Zza2HvYSBvYmxhc3Q7Vm9sZ29kb25zayA6IDEgOiAxOTMwMTQKK1Jvc3RvdnNrYe9hIG9ibGFzdDtaYXZldGluc2tpeSA6IDEgOiAyMDA3OAorUm9zdG92c2th72Egb2JsYXN0O0Frc2F5c2tpeSA6IDEgOiA3NDk2NgorUm9zdG92c2th72Egb2JsYXN0O015YXNuaWtvdnNraXkgOiAxIDogMzQxMDMKK1Jvc3RvdnNrYe9hIG9ibGFzdDtOb3ZvY2hlcmthc3NrIDogMSA6IDIwMjI5NgorUm9zdG92c2th72Egb2JsYXN0O01hcnR5bm92c2tpeSA6IDEgOiAzNTExMgorUm9zdG92c2th72Egb2JsYXN0O1ppbW92bmlrb3Zza2l5IDogMSA6IDM5NjUyCitSb3N0b3Zza2HvYSBvYmxhc3Q7QmFnYXlldnNraXkgOiAxIDogMzQ1MDYKK1Jvc3RvdnNrYe9hIG9ibGFzdDtSb3N0b3YtbmEtRG9ueSA6IDEgOiAxMDIyNjgwCitSb3N0b3Zza2HvYSBvYmxhc3Q7VmVzZWxvdnNraXkgOiAxIDogMjQ2MTkKK1Jvc3RvdnNrYe9hIG9ibGFzdDtUYWdhbnJvZyA6IDEgOiAyOTM2MDcKK1Jvc3RvdnNrYe9hIG9ibGFzdDtBem92c2tpeSA6IDEgOiA4NzI3NQorUm9zdG92c2th72Egb2JsYXN0O1Byb2xldGFyc2tpeSA6IDEgOiAzNzczNQorUm9zdG92c2th72Egb2JsYXN0O0JhdGF5c2sgOiAxIDogOTUxNDUKK1Jvc3RvdnNrYe9hIG9ibGFzdDtPcmxvdnNraXkgOiAxIDogNDAxNTcKK1Jvc3RvdnNrYe9hIG9ibGFzdDtBem92IDogMSA6IDgyMjMwCitSb3N0b3Zza2HvYSBvYmxhc3Q7S2FnYWxuaXRza2l5IDogMSA6IDI5NDYyCitSb3N0b3Zza2HvYSBvYmxhc3Q7WmVybm9ncmFkc2tpeSA6IDEgOiA2NTg4NQorUm9zdG92c2th72Egb2JsYXN0O1NhbHNraXkgOiAxIDogNTA2NTAKK1Jvc3RvdnNrYe9hIG9ibGFzdDtUc2VsaW5za2l5IDogMSA6IDM2NTI0CitLcmFzbm9kYXJza2kga3Jh7yBy6XNpZHVlO1NjaGVyYmlub3Zza2l5IDogMSA6IDM5MTcxCitLcmFzbm9kYXJza2kga3Jh7yBy6XNpZHVlO0t1c2NoZXZza2l5IDogMSA6IDcxNDM2CitSb3N0b3Zza2HvYSBvYmxhc3Q7UmVtb250bmVuc2tpeSA6IDEgOiAyNDYxOQorS3Jhc25vZGFyc2tpIGtyYe8gculzaWR1ZTtZZXlzayA6IDEgOiA5MjA1MgorS3Jhc25vZGFyc2tpIGtyYe8gculzaWR1ZTtZZXlza2l5IDogMSA6IDQzOTEzCitSb3N0b3Zza2HvYSBvYmxhc3Q7WWVnb3JseWtza2l5IDogMSA6IDM1MjEzCitLcmFzbm9kYXJza2kga3Jh7yBy6XNpZHVlO1N0YXJvbWluc2tpeSA6IDEgOiA0MDcxNworS3Jhc25vZGFyc2tpIGtyYe8gculzaWR1ZTtLcnlsb3Zza2l5IDogMSA6IDM3NDE5CitSb3N0b3Zza2HvYSBvYmxhc3Q7U2Fsc2sgOiAxIDogNjM4NjcKK0tyYXNub2RhcnNraSBrcmHvIHLpc2lkdWU7TGVuaW5ncmFkc2tpeSA6IDEgOiA2NzgyOAorS3Jhc25vZGFyc2tpIGtyYe8gculzaWR1ZTtLYW5ldnNraXkgOiAxIDogOTYyNzkKK1Jvc3RvdnNrYe9hIG9ibGFzdDtQZXNjaGFub2tvcHNraXkgOiAxIDogMzUyMTMKK0tyYXNub2RhcnNraSBrcmHvIHLpc2lkdWU7Tm92b3Bva3JvdnNraXkgOiAxIDogNDk3ODkKK0tyYXNub2RhcnNraSBrcmHvIHLpc2lkdWU7QmVsb2dsaW5za2l5IDogMSA6IDM2Mjg1CitLcmFzbm9kYXJza2kga3Jh7yBy6XNpZHVlO1BhdmxvdnNraXkgOiAxIDogNjg4NTkKK1N0YXZyb3BvbHNraSBrcmHvIHLpc2lkdWU7QXBhbmFzZW5rb3Zza2l5IDogMSA6IDM4MjE2CitLcmFzbm9kYXJza2kga3Jh7yBy6XNpZHVlO1ByaW1vcnNrby1Ba2h0YXJza2l5IDogMSA6IDU5MDY2CitTdGF2cm9wb2xza2kga3Jh7yBy6XNpZHVlO0lwYXRvdnNraXkgOiAxIDogNzE3OTcKK0tyYXNub2RhcnNraSBrcmHvIHLpc2lkdWU7VGlraG9yZXRza2l5IDogMSA6IDYxNzQ2CitLcmFzbm9kYXJza2kga3Jh7yBy6XNpZHVlO0JyeXVraG92ZXRza2l5IDogMSA6IDU0MTE4CitTdGF2cm9wb2xza2kga3Jh7yBy6XNpZHVlO0tyYXNub2d2YXJkZXlza2l5IDogMSA6IDQzMjY0CitLcmFzbm9kYXJza2kga3Jh7yBy6XNpZHVlO1Rpa2hvcmV0emsgOiAxIDogNzA0MDUKK0tyYXNub2RhcnNraSBrcmHvIHLpc2lkdWU7VnlzZWxrb3Zza2l5IDogMSA6IDYwODE4CitTdGF2cm9wb2xza2kga3Jh7yBy6XNpZHVlO1RydW5vdnNraXkgOiAxIDogMzUzMzIKK0tyYXNub2RhcnNraSBrcmHvIHLpc2lkdWU7S29yZW5vdnNraXkgOiAxIDogODQwMTIKK0tyYXNub2RhcnNraSBrcmHvIHLpc2lkdWU7S2FsaW5pbnNraXkgOiAxIDogNDg2NTUKK1N0YXZyb3BvbHNraSBrcmHvIHLpc2lkdWU7Tm92b2FsZWtzYW5kcm92c2tpeSA6IDEgOiA2NTUxNAorS3Jhc25vZGFyc2tpIGtyYe8gculzaWR1ZTtUaW1hc2hldnNraXkgOiAxIDogMTAyMjU3CitLcmFzbm9kYXJza2kga3Jh7yBy6XNpZHVlO1NsYXZ5YW5za2l5IDogMSA6IDY1MDQ1CitTdGF2cm9wb2xza2kga3Jh7yBy6XNpZHVlO1R1cmttZW5za2l5IDogMSA6IDMwMDc5CitLcmFzbm9kYXJza2kga3Jh7yBy6XNpZHVlO0thdmthenNraXkgOiAxIDogNDU3NjgKK1N0YXZyb3BvbHNraSBrcmHvIHLpc2lkdWU7SXpvYmlsbmVuc2tpeSA6IDEgOiA5NTc5OAorU3RhdnJvcG9sc2tpIGtyYe8gculzaWR1ZTtBcnpnaXJ6c2tpeSA6IDEgOiAzMjM0NQorS3Jhc25vZGFyc2tpIGtyYe8gculzaWR1ZTtUYmlsaXNza2l5IDogMSA6IDQ4NjU1CitTdGF2cm9wb2xza2kga3Jh7yBy6XNpZHVlO1BldHJvdnNraXkgOiAxIDogODQ0NjcKK0tyYXNub2RhcnNraSBrcmHvIHLpc2lkdWU7S3Jhc25vYXJtZXlza2l5IDogMSA6IDk4OTU5CitLcmFzbm9kYXJza2kga3Jh7yBy6XNpZHVlO0tyYXNub2RhciA6IDEgOiA3NzQ2NjEKK0tyYXNub2RhcnNraSBrcmHvIHLpc2lkdWU7S3JvcG90a2luIDogMSA6IDc5NTc5CitTdGF2cm9wb2xza2kga3Jh7yBy6XNpZHVlO0dyYWNoZXZza2l5IDogMSA6IDM1OTUwCitLcmFzbm9kYXJza2kga3Jh7yBy6XNpZHVlO1RlbXJ5dWtza2l5IDogMSA6IDExMzQ5MworS3Jhc25vZGFyc2tpIGtyYe8gculzaWR1ZTtVc3QtTGFiaW5za2l5IDogMSA6IDEwNzMwOAorU3RhdnJvcG9sc2tpIGtyYe8gculzaWR1ZTtMZXZva3Vtc2tpeSA6IDEgOiA0NTExOAorS3Jhc25vZGFyc2tpIGtyYe8gculzaWR1ZTtHdWxrZXZpY2hza2l5IDogMSA6IDEwMDA5MworS3Jhc25vZGFyc2tpIGtyYe8gculzaWR1ZTtEaW5za2l5IDogMSA6IDExNDIxNQorU3RhdnJvcG9sc2tpIGtyYe8gculzaWR1ZTtCbGFnb2Rhcm5lbnNraXkgOiAxIDogNjMxNDUKK1N0YXZyb3BvbHNraSBrcmHvIHLpc2lkdWU7U2hwYWtvdnNraXkgOiAxIDogOTEyNjYKK0tyYXNub2RhcnNraSBrcmHvIHLpc2lkdWU7U2xhdnlhbnNrLU5hLUt1YmFuaSA6IDEgOiA2MTc0NgorS3Jhc25vZGFyc2tpIGtyYe8gculzaWR1ZTtOb3Zva3ViYW5za2l5IDogMSA6IDgzNTk5CitSZXNwb3VibGlrYSBBZHlnZe9hO0tyYXNub2d2YXJkZXlza2l5IDogMSA6IDMxNDk2CitLcmFzbm9kYXJza2kga3Jh7yBy6XNpZHVlO0t1cmdhbmluc2tpeSA6IDEgOiAxMDA2MDgKK0tyYXNub2RhcnNraSBrcmHvIHLpc2lkdWU7QW5hcHNraXkgOiAxIDogNjE3NDYKK1N0YXZyb3BvbHNraSBrcmHvIHLpc2lkdWU7U3RhdnJvcG9sIDogMSA6IDM0MTc4NAorS3Jhc25vZGFyc2tpIGtyYe8gculzaWR1ZTtLcnltc2tpeSA6IDEgOiA3MjE1NworS3Jhc25vZGFyc2tpIGtyYe8gculzaWR1ZTtBYmluc2tpeSA6IDEgOiA5MDcxMgorUmVzcG91Ymxpa2EgQWR5Z2XvYTtTaG92Z2Vub3Zza2l5IDogMSA6IDE3NzEwCitTdGF2cm9wb2xza2kga3Jh7yBy6XNpZHVlO0J1ZGVubm92c2tpeSA6IDEgOiA1Mjg0NAorS3Jhc25vZGFyc2tpIGtyYe8gculzaWR1ZTtBcm1hdmlyIDogMSA6IDE4MzI4MAorUmVzcG91Ymxpa2EgQWR5Z2XvYTtUYWtodGFtdWtheXNraXkgOiAxIDogNjU5MTAKK0tyYXNub2RhcnNraSBrcmHvIHLpc2lkdWU7QW5hcGEgOiAxIDogNTk4OTEKK0tyYXNub2RhcnNraSBrcmHvIHLpc2lkdWU7U2V2ZXJza2l5IDogMSA6IDEwNDMxOQorUmVzcG91Ymxpa2EgQWR5Z2XvYTtLb3NoZWtoYWJsc2tpeSA6IDEgOiAzMTA5NAorUmVzcG91Ymxpa2EgQWR5Z2XvYTtUZXVjaGV6aHNraXkgOiAxIDogMjE3MzUKK0tyYXNub2RhcnNraSBrcmHvIHLpc2lkdWU7VXNwZW5za2l5IDogMSA6IDM5NDgwCitTdGF2cm9wb2xza2kga3Jh7yBy6XNpZHVlO0tvY2h1YmV5ZXZza2l5IDogMSA6IDc3ODc1CitTdGF2cm9wb2xza2kga3Jh7yBy6XNpZHVlO0FsZWtzYW5kcm92c2tpeSA6IDEgOiA1MzM1OQorU3RhdnJvcG9sc2tpIGtyYe8gculzaWR1ZTtOZWZ0ZWt1bXNraXkgOiAxIDogNjgwODkKK1N0YXZyb3BvbHNraSBrcmHvIHLpc2lkdWU7QW5kcm9wb3Zza2l5IDogMSA6IDM2MDUzCitTdGF2cm9wb2xza2kga3Jh7yBy6XNpZHVlO05vdm9zZWxpdHNraXkgOiAxIDogMjU4NTUKK0RhZ2VzdGFuO05vZ2F5c2tpeSA6IDEgOiAxODYzOAorS3Jhc25vZGFyc2tpIGtyYe8gculzaWR1ZTtCZWxvcmVjaG5za2l5IDogMSA6IDQxOTU0CitEYWdlc3RhbjtUYXJ1bW92c2tpeSA6IDEgOiAzNjIxNgorUmVzcG91Ymxpa2EgQWR5Z2XvYTtHaWFnaW5za2l5IDogMSA6IDM0NDE0CitLcmFzbm9kYXJza2kga3Jh7yBy6XNpZHVlO05vdm9yb3NzaXlzayA6IDEgOiAyNDQ5MjMKK0tyYXNub2RhcnNraSBrcmHvIHLpc2lkdWU7S3J5bXNrIDogMSA6IDU0NzM3CitTdGF2cm9wb2xza2kga3Jh7yBy6XNpZHVlO0J1ZGVubm92c2sgOiAxIDogNjA4NzgKK0tyYXNub2RhcnNraSBrcmHvIHLpc2lkdWU7R29yeWFjaGl5IEtseXVjaCA6IDEgOiA1MTc0NworUlUtVU5LLTI4NzUgOiAxIDogMTI2NzkKK1Jlc3BvdWJsaWthIEFkeWdl72E7TWF5a29wc2tpeSA6IDEgOiA1ODc2NgorS3Jhc25vZGFyc2tpIGtyYe8gculzaWR1ZTtCZWxvcmVjaGVuc2sgOiAxIDogNTg5NjMKK0tyYXNub2RhcnNraSBrcmHvIHLpc2lkdWU7R2VsZW5kemhpayA6IDEgOiA3ODU0OAorS3Jhc25vZGFyc2tpIGtyYe8gculzaWR1ZTtMYWJpbnNrIDogMSA6IDYzMzk1CitLcmFzbm9kYXJza2kga3Jh7yBy6XNpZHVlO0xhYmluc2tpeSA6IDEgOiA0MDIwMgorS3Jhc25vZGFyc2tpIGtyYe8gculzaWR1ZTtNb3N0b3Zza2l5IDogMSA6IDcxOTUxCitTdGF2cm9wb2xza2kga3Jh7yBy6XNpZHVlO05ldmlubm9teXNzayA6IDEgOiAxMjk3OTEKK1JVLVVOSy0yODc2IDogMSA6IDEzMzQzCitSZXNwb3VibGlrYSBBZHlnZe9hO01heWtvcCA6IDEgOiAxNzUyOTEKK0tyYXNub2RhcnNraSBrcmHvIHLpc2lkdWU7QXBzaGVyb25za2l5IDogMSA6IDkyODc3CitLcmFzbm9kYXJza2kga3Jh7yBy6XNpZHVlO090cmFkbmVuc2tpeSA6IDEgOiA2NzYyMgorU3RhdnJvcG9sc2tpIGtyYe8gculzaWR1ZTtHZW9yZ2l5ZXZza2l5IDogMSA6IDcwMTQ5CitTdGF2cm9wb2xza2kga3Jh7yBy6XNpZHVlO1NvdmV0c2tpeSA6IDEgOiA3MTc5NworU3RhdnJvcG9sc2tpIGtyYe8gculzaWR1ZTtNaW5lcmFsb3ZvZHNraXkgOiAxIDogNDI5NTUKK1N0YXZyb3BvbHNraSBrcmHvIHLpc2lkdWU7U3RlcG5vdnNraXkgOiAxIDogMjI2NjIKK0thcmF0Y2hhZXZvLVRjaGVya2Vzc2th72E7QWR5Z2UtS2hhYmxza2l5IDogMSA6IDI4NTA1CitLcmFzbm9kYXJza2kga3Jh7yBy6XNpZHVlO1R1YXBzaW5za2l5IDogMSA6IDUzOTEyCitLYXJhdGNoYWV2by1UY2hlcmtlc3NrYe9hO1ByaWt1YmFuc2tpeSA6IDEgOiAzMzg0MworRGFnZXN0YW47S2l6bHlhcnNraXkgOiAxIDogNTM0NzcKK1N0YXZyb3BvbHNraSBrcmHvIHLpc2lkdWU7UHJlZGdvcm55aSA6IDEgOiA5NTI4MworU3RhdnJvcG9sc2tpIGtyYe8gculzaWR1ZTtLdXJza2l5IDogMSA6IDQ4NTE3CitLYXJhdGNoYWV2by1UY2hlcmtlc3NrYe9hO0NoZXJrZXNzayA6IDEgOiAxMTkzNTkKK0thcmF0Y2hhZXZvLVRjaGVya2Vzc2th72E7S2hhYmV6c2tpeSA6IDEgOiAyNzkwMQorU3RhdnJvcG9sc2tpIGtyYe8gculzaWR1ZTtNaW5lcmFsbml5ZSBWb2R5IDogMSA6IDg3NDU1CitTdGF2cm9wb2xza2kga3Jh7yBy6XNpZHVlO0dlb3JnaXlldnNrIDogMSA6IDc1MTk3CitTdGF2cm9wb2xza2kga3Jh7yBy6XNpZHVlO0tpcm92c2tpeSA6IDEgOiA2MjMyMAorU3RhdnJvcG9sc2tpIGtyYe8gculzaWR1ZTtaaGVsZXpub3ZvZHNrIDogMSA6IDQ4NDE0CitLYXJhdGNoYWV2by1UY2hlcmtlc3NrYe9hO1VzdC1EemhlZ3V0aW5za2l5IDogMSA6IDUwNjY0CitTdGF2cm9wb2xza2kga3Jh7yBy6XNpZHVlO0xlcm1vbnRvdiA6IDEgOiAyNTQ0MworS2FyYXRjaGFldm8tVGNoZXJrZXNza2HvYTtaZWxlbmNodWdza2l5IDogMSA6IDUzODg4CitLYXJhdGNoYWV2by1UY2hlcmtlc3NrYe9hO1VydXBza2l5IDogMSA6IDIyNjYzCitTdGF2cm9wb2xza2kga3Jh7yBy6XNpZHVlO1B5YXRpZ29yc2sgOiAxIDogMTg5MDIxCitTdGF2cm9wb2xza2kga3Jh7yBy6XNpZHVlO1llc3NlbnR1a2kgOiAxIDogOTExNjMKK0tyYXNub2RhcnNraSBrcmHvIHLpc2lkdWU7U29jaGkgOiAxIDogMzg5OTU5CitLcmFzbm9kYXJza2kga3Jh7yBy6XNpZHVlO1R1YXBzZSA6IDEgOiA2NzAwMworS2FyYXRjaGFldm8tVGNoZXJrZXNza2HvYTtNYWxva2FyYWNoYXlldnNraXkgOiAxIDogMzc2NzEKK1RjaGV0Y2hlbmlhKjtOYXVyc2tpeSA6IDEgOiA0MTUyOQorS2FiYXJkaW5vLUJhbGthcmlhO1Byb2tobGFkbmVuc2tpeSA6IDEgOiA0MzM3MQorU3RhdnJvcG9sc2tpIGtyYe8gculzaWR1ZTtLaXNsb3ZvZHNrIDogMSA6IDExODU2MworVGNoZXRjaGVuaWEqO1NoZWxrb3Zza2l5IDogMSA6IDM5Mzg5CitLYWJhcmRpbm8tQmFsa2FyaWE7Wm9sc2tpeSA6IDEgOiA0MTU1NQorRGFnZXN0YW47TWFraGFjaGthbGEgOiAxIDogMzkyMTMxCitLYXJhdGNoYWV2by1UY2hlcmtlc3NrYe9hO0thcmFjaGF5ZXZza2l5IDogMSA6IDI2NDkxCitEYWdlc3RhbjtCYWJheXVydG92c2tpeSA6IDEgOiAzNDIwNAorRGFnZXN0YW47S2l6bHlhciA6IDEgOiA0NTY0MQorS2FiYXJkaW5vLUJhbGthcmlhO0Jha3NhbnNraXkgOiAxIDogMTAwNDU4CitTZXZlcm8tT3NldGluc2th72EgcmVzcG91O01vemRva3NraXkgOiAxIDogODA2MzQKK0thcmF0Y2hhZXZvLVRjaGVya2Vzc2th72E7S2FyYWNoYXlldnNrIDogMSA6IDMzNzQzCitLYWJhcmRpbm8tQmFsa2FyaWE7VGVyc2tpeSA6IDEgOiA0OTYyNAorS2FiYXJkaW5vLUJhbGthcmlhO1Byb2tobGFkbnlpIDogMSA6IDU5MjA2CitLYWJhcmRpbm8tQmFsa2FyaWE7TWF5c2tpeSA6IDEgOiAzNzUyMQorVGNoZXRjaGVuaWEqO05hZHRlcmVjaG55aSA6IDEgOiAzMjYyNAorS2FiYXJkaW5vLUJhbGthcmlhO1VydmFuc2tpeSA6IDEgOiA4NTYzMgorS2FiYXJkaW5vLUJhbGthcmlhO0NoZWdlbXNraXkgOiAxIDogNTE5NDQKK0luZ291Y2hldGlhKjtNYWxnb2Jla3NraXkgOiAxIDogMzgzMzAKK1RjaGV0Y2hlbmlhKjtHcm96bmVuc2tpeSA6IDEgOiA5MTUzNgorRGFnZXN0YW47S2hhc2F2eXVydG92c2tpeSA6IDEgOiAxMDIyOTUKK1JVLVVOSy0yODc3IDogMSA6IDI1NzA5NgorSW5nb3VjaGV0aWEqO1N1bnpoZW5za2l5IDogMSA6IDc5MTk4CitLYWJhcmRpbm8tQmFsa2FyaWE7U292ZXRza2l5IDogMSA6IDIyMDg5CitJbmdvdWNoZXRpYSo7TWFsZ29iZWsgOiAxIDogMjY5MDcKK1RjaGV0Y2hlbmlhKjtHdWRlcm1lc3NraXkgOiAxIDogNDUwNDAKK0thYmFyZGluby1CYWxrYXJpYTtUeXJueWF1eiA6IDEgOiAzODAyNQorU2V2ZXJvLU9zZXRpbnNrYe9hIHJlc3BvdTtLaXJvdnNraXkgOiAxIDogMjU3MzAKK1RjaGV0Y2hlbmlhKjtHcm96bnlpIDogMSA6IDMwOTk3MworU2V2ZXJvLU9zZXRpbnNrYe9hIHJlc3BvdTtQcmF2b2JlcmV6aG55aSA6IDEgOiA1MjE2OQorSW5nb3VjaGV0aWEqO05henJhbm92c2tpeSA6IDEgOiAxMjE1ODkKK0RhZ2VzdGFuO0tpemlseXVydG92c2tpeSA6IDEgOiA0ODkyNAorVGNoZXRjaGVuaWEqO0FjaGtob3ktTWFydGFub3Zza2l5IDogMSA6IDUzMjYxCitUY2hldGNoZW5pYSo7R3VkZXJtZXMgOiAxIDogMzI0NTMKK1RjaGV0Y2hlbmlhKjtTaGFsaW5za2l5IDogMSA6IDgwNDkwCitUY2hldGNoZW5pYSo7QXJndW4gOiAxIDogMjM2MzMKK1NldmVyby1Pc2V0aW5za2HvYSByZXNwb3U7UHJpZ29yb2RueWkgOiAxIDogNzA3MDYKK1NldmVyby1Pc2V0aW5za2HvYSByZXNwb3U7SXJhZnNraXkgOiAxIDogMTU5MDQKK0RhZ2VzdGFuO0toYXNhdnl1cnQgOiAxIDogNzkxMDQKK1NldmVyby1Pc2V0aW5za2HvYSByZXNwb3U7RGlnb3Jza2l5IDogMSA6IDIwNDYyCitTZXZlcm8tT3NldGluc2th72EgcmVzcG91O0FyZG9uc2tpeSA6IDEgOiAyNTQyNgorRGFnZXN0YW47Tm92b2xha3NraXkgOiAxIDogMTUyNDkKK0RhZ2VzdGFuO0tpemlseXVydCA6IDEgOiA0Mzk0NworVGNoZXRjaGVuaWEqO1VydXMtTWFydGFub3Zza2l5IDogMSA6IDQ1NjQwCitUY2hldGNoZW5pYSo7Tm96aGF5LVl1cnRvdnNraXkgOiAxIDogNDAxNTkKK0RhZ2VzdGFuO0themJla292c2tpeSA6IDEgOiAyNjU4MAorVGNoZXRjaGVuaWEqO1NoYWxpIDogMSA6IDIzMjA1CitUY2hldGNoZW5pYSo7VXJ1cy1NYXJ0YW4gOiAxIDogMzMyMjQKK0RhZ2VzdGFuO0J1eW5ha3NraXkgOiAxIDogNTUzODMKK1NldmVyby1Pc2V0aW5za2HvYSByZXNwb3U7VmxhZGlrYXZrYXogOiAxIDogMzIzMjQ0CitTZXZlcm8tT3NldGluc2th72EgcmVzcG91O0FsYWdpcnNraXkgOiAxIDogNDQwNjUKK1RjaGV0Y2hlbmlhKjtWZWRlbnNraXkgOiAxIDogMjkyODUKK1RjaGV0Y2hlbmlhKjtTaGF0b3lza2l5IDogMSA6IDEwNzg5CitEYWdlc3RhbjtLYXNwaXlzayA6IDEgOiA2NjYwOAorRGFnZXN0YW47R3VtYmV0b3Zza2l5IDogMSA6IDE0MDg0CitEYWdlc3RhbjtCb3RsaWtoc2tpeSA6IDEgOiAzMzU2OQorRGFnZXN0YW47TGVuaW5za2l5IDogMSA6IDQzODQxCitUY2hldGNoZW5pYSo7SXR1bS1LYWxpbnNraXkgOiAxIDogMjY1NAorRGFnZXN0YW47VW50c3VrdWxza2l5IDogMSA6IDE5ODAyCitEYWdlc3RhbjtCdXluYWtzayA6IDEgOiA2MTYzMQorRGFnZXN0YW47S2h1bnpha2hza2l5IDogMSA6IDI0ODg1CitEYWdlc3RhbjtBa2h2YWtoc2tpeSA6IDEgOiAxNjA5NgorRGFnZXN0YW47VHN1bWFkaW5za2l5IDogMSA6IDE3ODk2CitEYWdlc3RhbjtLYXlha2VudHNraXkgOiAxIDogMzc2OTkKK0RhZ2VzdGFuO0xldmFzaGluc2tpeSA6IDEgOiA0NjA2NQorRGFnZXN0YW47R2VyZ2ViaWxza2l5IDogMSA6IDEzNjYxCitEYWdlc3RhbjtJemJlcmJhc2ggOiAxIDogMzU2ODcKK0RhZ2VzdGFuO1NvdmV0c2tpeSA6IDEgOiAyMTA3MworRGFnZXN0YW47R3VuaWJza2l5IDogMSA6IDIwNTQ0CitEYWdlc3RhbjtTZXJnb2thbGluc2tpeSA6IDEgOiAyMTI4NQorRGFnZXN0YW47VHN1bnRpbnNraXkgOiAxIDogMTUyNDkKK0RhZ2VzdGFuO0FrdXNoaW5za2l5IDogMSA6IDQxNTExCitEYWdlc3RhbjtUbHlhcmF0aW5za2l5IDogMSA6IDIwMzMyCitEYWdlc3RhbjtDaGFyb2RpbnNraXkgOiAxIDogMTEzMzEKK0RhZ2VzdGFuO0RlcmJlbnRza2l5IDogMSA6IDc0NzYyCitEYWdlc3RhbjtMYWtza2l5IDogMSA6IDk4NDgKK0RhZ2VzdGFuO0theXRhZ3NraXkgOiAxIDogMjYwNTAKK0RhZ2VzdGFuO0Rha2hhZGF5ZXZza2l5IDogMSA6IDMzODg3CitEYWdlc3RhbjtLdWxpbnNraXkgOiAxIDogMTEzMzEKK0RhZ2VzdGFuO0RlcmJlbnQgOiAxIDogODY4MzQKK0RhZ2VzdGFuO0RhZ2VzdGFuc2tpeWUgT2duaSA6IDEgOiAyNTIwMworRGFnZXN0YW47VGFiYXNhcmFuc2tpeSA6IDEgOiA0NjU5NAorRGFnZXN0YW47QWd1bHNraXkgOiAxIDogODA0OAorRGFnZXN0YW47UnV0dWxza2l5IDogMSA6IDE4NTMyCitEYWdlc3RhbjtNYWdhcmFta2VudHNraXkgOiAxIDogMzk4MTcKK0RhZ2VzdGFuO0toaXZza2l5IDogMSA6IDIwMDE0CitEYWdlc3RhbjtTdWxleW1hbi1TdGFsc2tpeSA6IDEgOiA0MjY3NgorRGFnZXN0YW47S3VyYWtoc2tpeSA6IDEgOiAxMjgxMworRGFnZXN0YW47QWtodHluc2tpeSA6IDEgOiAzMzg4NworUlUtVU5LLTI4NzggOiAxIDogMTI2NzkKK1JVLVVOSy0yODc5IDogMSA6IDEzMzQzCitSVS1VTkstMjg4MCA6IDEgOiAyNTcwOTYKK1N2ZXJkbG92c2th72Egb2JsYXN0O0l2ZGVsIDogMSA6IDM3NjkyCitQZXJtc2th72Egb2JsYXN0IHLpc2lkdWVsO0tyYXNub3Zpc2hlcnNraXkgOiAxIDogMzAzOTQKK1Blcm1za2HvYSBvYmxhc3QgculzaWR1ZWw7Q2hlcmR5bnNraXkgOiAxIDogNDEwODEKK0tvbWktUGVybWlhdHNraSBuYXRpb25hbDtHYXluc2tpeSA6IDEgOiAyMDY1NQorU3ZlcmRsb3Zza2HvYSBvYmxhc3Q7U2V2ZXJvdXJhbHNrIDogMSA6IDU5NTg3CitTdmVyZGxvdnNrYe9hIG9ibGFzdDtHYXJpbnNraXkgOiAxIDogODg5OAorS29taS1QZXJtaWF0c2tpIG5hdGlvbmFsO0tvc2luc2tpeSA6IDEgOiAxMDI3OAorUGVybXNrYe9hIG9ibGFzdCBy6XNpZHVlbDtTb2xpa2Ftc2tpeSA6IDEgOiAxODEzOAorU3ZlcmRsb3Zza2HvYSBvYmxhc3Q7S2FycGluc2sgOiAxIDogNTM2ODgKK1N2ZXJkbG92c2th72Egb2JsYXN0O1Nlcm92c2tpeSA6IDEgOiAzMDU5MworS29taS1QZXJtaWF0c2tpIG5hdGlvbmFsO0tvY2hldnNraXkgOiAxIDogMTQxMzMKK1N2ZXJkbG92c2th72Egb2JsYXN0O0tyYXNub3R1cmluc2sgOiAxIDogNzMyODQKK1Blcm1za2HvYSBvYmxhc3QgculzaWR1ZWw7QWxla3NhbmRyb3ZzayA6IDEgOiA0MzYzMAorUGVybXNrYe9hIG9ibGFzdCBy6XNpZHVlbDtVc29sc2tpeSA6IDEgOiAxNTE5NworS29taS1QZXJtaWF0c2tpIG5hdGlvbmFsO1l1cmxpbnNraXkgOiAxIDogMTU0MTcKK1N2ZXJkbG92c2th72Egb2JsYXN0O1Nlcm92IDogMSA6IDEwNTU3NworU3ZlcmRsb3Zza2HvYSBvYmxhc3Q7Tm92b2x5YWxpbnNraXkgOiAxIDogMjkyOTQKK1Blcm1za2HvYSBvYmxhc3QgculzaWR1ZWw7U29saWthbXNrIDogMSA6IDEwNzA2NQorUGVybXNrYe9hIG9ibGFzdCBy6XNpZHVlbDtCZXJlem5pa2kgOiAxIDogMTk1MzA2CitLb21pLVBlcm1pYXRza2kgbmF0aW9uYWw7S3VkeW1rYXJza2l5IDogMSA6IDM1Njc3CitTdmVyZGxvdnNrYe9hIG9ibGFzdDtUYWJvcmluc2tpeSA6IDEgOiA2Nzk5CitQZXJtc2th72Egb2JsYXN0IHLpc2lkdWVsO0tpemVsIDogMSA6IDU3ODQ3CitQZXJtc2th72Egb2JsYXN0IHLpc2lkdWVsO0dvcm5vemF2b2Rza2l5IDogMSA6IDM2OTYzCitLb21pLVBlcm1pYXRza2kgbmF0aW9uYWw7WXVzdmluc2tpeSA6IDEgOiAyODc1OQorS29taS1QZXJtaWF0c2tpIG5hdGlvbmFsO0t1ZHlta2FyIDogMSA6IDMzMTA4CitTdmVyZGxvdnNrYe9hIG9ibGFzdDtBbGFwYXlldnNraXkgOiAxIDogNDgwODkKK1N2ZXJkbG92c2th72Egb2JsYXN0O1Zlcmtob3R1cnNraXkgOiAxIDogMjEzOTUKK1Blcm1za2HvYSBvYmxhc3QgculzaWR1ZWw7RG9icnlhbnNraXkgOiAxIDogNjI4NDcKK1Blcm1za2HvYSBvYmxhc3QgculzaWR1ZWw7R3JlbXlhY2hpbnNrIDogMSA6IDI4NTMxCitTdmVyZGxvdnNrYe9hIG9ibGFzdDtOaXpobnlheWEgVHVyYSA6IDEgOiAzNzQ5MgorUGVybXNrYe9hIG9ibGFzdCBy6XNpZHVlbDtHdWJha2hhIDogMSA6IDU0OTA1CitQZXJtc2th72Egb2JsYXN0IHLpc2lkdWVsO0lseWluc2tpeSA6IDEgOiAyNDcwNworU3ZlcmRsb3Zza2HvYSBvYmxhc3Q7S2FjaGthbmFyIDogMSA6IDUxMzg5CitQZXJtc2th72Egb2JsYXN0IHLpc2lkdWVsO0thcmFnYXlza2l5IDogMSA6IDI1OTgyCitTdmVyZGxvdnNrYe9hIG9ibGFzdDtUdXJpbnNraXkgOiAxIDogNDEwOTEKK1Blcm1za2HvYSBvYmxhc3QgculzaWR1ZWw7Q2h1c292c2tveSA6IDEgOiAyODYyOQorUGVybXNrYe9hIG9ibGFzdCBy6XNpZHVlbDtTaXZpbnNraXkgOiAxIDogMTkwMjEKK1N2ZXJkbG92c2th72Egb2JsYXN0O1RhdmRpbnNraXkgOiAxIDogMTA5OTgKK1N2ZXJkbG92c2th72Egb2JsYXN0O0t1c2h2YSA6IDEgOiA3MDc4NAorU3ZlcmRsb3Zza2HvYSBvYmxhc3Q7S3Jhc25vdXJhbHNrIDogMSA6IDM1MjkyCitPdWRtb3VydGlhO0dsYXpvdnNraXkgOiAxIDogMjA2OTcKK091ZG1vdXJ0aWE7QmFsZXppbnNraXkgOiAxIDogNDA2OTUKK1N2ZXJkbG92c2th72Egb2JsYXN0O1ZlcmtobmVzYWxkaW5za2l5IDogMSA6IDQ5OTkKK091ZG1vdXJ0aWE7WWFyc2tpeSA6IDEgOiAyMDU5NworT3VkbW91cnRpYTtLZXpza2l5IDogMSA6IDI5ODk2CitQZXJtc2th72Egb2JsYXN0IHLpc2lkdWVsO055dHZlbnNraXkgOiAxIDogNTE3NjgKK1Blcm1za2HvYSBvYmxhc3QgculzaWR1ZWw7S3Jhc25va2Ftc2sgOiAxIDogNzUwMDUKK1Blcm1za2HvYSBvYmxhc3QgculzaWR1ZWw7Q2h1c292b3kgOiAxIDogNTUzOTYKK1Blcm1za2HvYSBvYmxhc3QgculzaWR1ZWw7VmVyZXNjaGFnaW5za2l5IDogMSA6IDQ2MDgxCitQZXJtc2th72Egb2JsYXN0IHLpc2lkdWVsO0x5c3ZlbnNraXkgOiAxIDogMTYzNzQKK1N2ZXJkbG92c2th72Egb2JsYXN0O1ByaWdvcm9kbnlpIDogMSA6IDUwMjg5CitQZXJtc2th72Egb2JsYXN0IHLpc2lkdWVsO1Blcm0gOiAxIDogMTA4MzEwNworUGVybXNrYe9hIG9ibGFzdCBy6XNpZHVlbDtQZXJtc2tpeSA6IDEgOiA4Njg2OAorUGVybXNrYe9hIG9ibGFzdCBy6XNpZHVlbDtMeXN2YSA6IDEgOiA3NzE2MgorU3ZlcmRsb3Zza2HvYSBvYmxhc3Q7Tml6aG5pYXlhIFNhbGRhIDogMSA6IDIwNjk1CitPdWRtb3VydGlhO1l1a2FtZW5za2l5IDogMSA6IDEzMzk4CitPdWRtb3VydGlhO0dsYXpvdiA6IDEgOiAxMDc0ODcKK1Blcm1za2HvYSBvYmxhc3QgculzaWR1ZWw7T2NoZXJza2l5IDogMSA6IDI1MTk4CitTdmVyZGxvdnNrYe9hIG9ibGFzdDtWZXJraG5pYXlhIFNhbGRhIDogMSA6IDU1MDg4CitTdmVyZGxvdnNrYe9hIG9ibGFzdDtJcmJpdHNraXkgOiAxIDogMzU2OTIKK1N2ZXJkbG92c2th72Egb2JsYXN0O1RhdmRhIDogMSA6IDQ2MzkwCitTdmVyZGxvdnNrYe9hIG9ibGFzdDtOaXpobml5IFRhZ2lsIDogMSA6IDQzMzIwNQorUGVybXNrYe9hIG9ibGFzdCBy6XNpZHVlbDtLdW5ndXJza2l5IDogMSA6IDQ2NzY4CitTdmVyZGxvdnNrYe9hIG9ibGFzdDtBbGFwYXlldnNrIDogMSA6IDU4MDg3CitTdmVyZGxvdnNrYe9hIG9ibGFzdDtTbG9ib2RvLVR1cmluc2tpeSA6IDEgOiAxOTM5NgorUGVybXNrYe9hIG9ibGFzdCBy6XNpZHVlbDtPa2hhbnNraXkgOiAxIDogMTkxMTkKK1Blcm1za2HvYSBvYmxhc3QgculzaWR1ZWw7QmVyeW96b3Zza2l5IDogMSA6IDE5MDIxCitQZXJtc2th72Egb2JsYXN0IHLpc2lkdWVsO0JvbHNoZXNvc25vdnNraXkgOiAxIDogMTY3NjYKK091ZG1vdXJ0aWE7S3Jhc25vZ29yc2tpeSA6IDEgOiAxNDI5OAorU3ZlcmRsb3Zza2HvYSBvYmxhc3Q7QmF5a2Fsb3Zza2l5IDogMSA6IDIxNjk1CitPdWRtb3VydGlhO0RlYmVzc2tpeSA6IDEgOiAxNDM5OAorU3ZlcmRsb3Zza2HvYSBvYmxhc3Q7TmV2eWFuc2tpeSA6IDEgOiAzMTA5MworT3VkbW91cnRpYTtJZ3JpbnNraXkgOiAxIDogNDY5OTQKK1N2ZXJkbG92c2th72Egb2JsYXN0O1NoYWxpbnNraXkgOiAxIDogMzEzOTMKK1N2ZXJkbG92c2th72Egb2JsYXN0O1JlemhldnNraXkgOiAxIDogMTA4OTgKK1N2ZXJkbG92c2th72Egb2JsYXN0O0tpcm92Z3JhZCA6IDEgOiA1MDk4OQorU3ZlcmRsb3Zza2HvYSBvYmxhc3Q7QXJ0eWVtb3Zza2l5IDogMSA6IDM0MDkzCitTdmVyZGxvdnNrYe9hIG9ibGFzdDtJcmJpdCA6IDEgOiA1MDQ4OQorU3ZlcmRsb3Zza2HvYSBvYmxhc3Q7TmV2eWFuc2sgOiAxIDogMjkxOTQKK1Blcm1za2HvYSBvYmxhc3QgculzaWR1ZWw7T3NpbnNreSA6IDEgOiAzNjA4MQorUGVybXNrYe9hIG9ibGFzdCBy6XNpZHVlbDtDaGFzdGluc2tpeSA6IDEgOiAxNDYwOQorT3VkbW91cnRpYTtTZWx0aW5za2l5IDogMSA6IDE1NDk4CitQZXJtc2th72Egb2JsYXN0IHLpc2lkdWVsO0tpc2hlcnRza2l5IDogMSA6IDE3MTU4CitPdWRtb3VydGlhO1NoYXJrYW5za2l5IDogMSA6IDIyMzk3CitPdWRtb3VydGlhO1N5dW1zaW5za2l5IDogMSA6IDE4Nzk4CitQZXJtc2th72Egb2JsYXN0IHLpc2lkdWVsO0t1bmd1ciA6IDEgOiA3ODMzOAorU3ZlcmRsb3Zza2HvYSBvYmxhc3Q7UmV6c2ggOiAxIDogNDMyOTAKK1N2ZXJkbG92c2th72Egb2JsYXN0O1R1Z3VseW1za2l5IDogMSA6IDMwNjkzCitTdmVyZGxvdnNrYe9hIG9ibGFzdDtBcnR5b21vdnNraXkgOiAxIDogNDE3OTEKK091ZG1vdXJ0aWE7WWFrc2h1ci1Cb2R5aW5za2l5IDogMSA6IDIyNjk3CitTdmVyZGxvdnNrYe9hIG9ibGFzdDtQZXJ2b3VyYWxzayA6IDEgOiAxNzE4NjIKK1N2ZXJkbG92c2th72Egb2JsYXN0O1ZlcmtobnlheSBQeXNobWEgOiAxIDogODUyODEKK1N2ZXJkbG92c2th72Egb2JsYXN0O1RhbGl0c2tpeSA6IDEgOiA2MzU4NgorU3ZlcmRsb3Zza2HvYSBvYmxhc3Q7UHlzaG1pbnNraXkgOiAxIDogMjU2OTQKK091ZG1vdXJ0aWE7VXZpbnNraXkgOiAxIDogNDE5OTUKK1Blcm1za2HvYSBvYmxhc3QgculzaWR1ZWw7U3Vrc3Vuc2tpeSA6IDEgOiAyMzQzMworT3VkbW91cnRpYTtWb3RraW5za2l5IDogMSA6IDIzNjk3CitTdmVyZGxvdnNrYe9hIG9ibGFzdDtBc2Jlc3QgOiAxIDogMTE5NDc0CitTdmVyZGxvdnNrYe9hIG9ibGFzdDtLYW15c2hsb3Zza2l5IDogMSA6IDIxMjk1CitTdmVyZGxvdnNrYe9hIG9ibGFzdDtCZXJlem92c2tpeSA6IDEgOiA2NTc4NgorUGVybXNrYe9hIG9ibGFzdCBy6XNpZHVlbDtPcmRpbnNreSA6IDEgOiAxNzg0NAorU3ZlcmRsb3Zza2HvYSBvYmxhc3Q7U3VraG9sb3poc2tpeSA6IDEgOiAxMzQ5NworUGVybXNrYe9hIG9ibGFzdCBy6XNpZHVlbDtCYXJkeW1za2l5IDogMSA6IDI3ODQ1CitQZXJtc2th72Egb2JsYXN0IHLpc2lkdWVsO1llbG92c2tpeSA6IDEgOiAxNDIxNworU3ZlcmRsb3Zza2HvYSBvYmxhc3Q7Tml6aG5lc2VyZ2luc2tpeSA6IDEgOiA3MTA4NAorU3ZlcmRsb3Zza2HvYSBvYmxhc3Q7QWNoaXRza2l5IDogMSA6IDIzMzk1CitQZXJtc2th72Egb2JsYXN0IHLpc2lkdWVsO1VpbnNraXkgOiAxIDogMTQxMTkKK091ZG1vdXJ0aWE7WmF2eWFsb3Zza2l5IDogMSA6IDUyNzk0CitPdWRtb3VydGlhO1ZvdGtpbnNrIDogMSA6IDEwNDk4NworU3ZlcmRsb3Zza2HvYSBvYmxhc3Q7WWVrYXRlcmluYnVyZyA6IDEgOiAxNDAwODkyCitPdWRtb3VydGlhO1Zhdm96aHNraXkgOiAxIDogMTg1OTgKK091ZG1vdXJ0aWE7SXpoZXZzayA6IDEgOiA2NTI0MjAKK1Blcm1za2HvYSBvYmxhc3QgculzaWR1ZWw7Q2hheWtvdnNraXkgOiAxIDogMTc1NTAKK1N2ZXJkbG92c2th72Egb2JsYXN0O0JlbG95YXJza2l5IDogMSA6IDQxMDkxCitTdmVyZGxvdnNrYe9hIG9ibGFzdDtTdWtob3kgTG9nIDogMSA6IDM3MDkyCitTdmVyZGxvdnNrYe9hIG9ibGFzdDtLcmFzbm91Zmltc2tpeSA6IDEgOiAzNjg5MgorU3ZlcmRsb3Zza2HvYSBvYmxhc3Q7Qm9nZGFub3ZpY2hza2l5IDogMSA6IDE5MDk2CitTdmVyZGxvdnNrYe9hIG9ibGFzdDtLYW15c2hsb3YgOiAxIDogMzIxOTMKK1Blcm1za2HvYSBvYmxhc3QgculzaWR1ZWw7T2t0eWFicnNraXkgOiAxIDogMzc3NDcKK1N2ZXJkbG92c2th72Egb2JsYXN0O1phcmVjaG55IDogMSA6IDI5NzkzCitTdmVyZGxvdnNrYe9hIG9ibGFzdDtSZXZkYSA6IDEgOiA4NTQ4MQorU3ZlcmRsb3Zza2HvYSBvYmxhc3Q7Qm9nZGFub3ZpY2ggOiAxIDogMzU1OTIKK1Blcm1za2HvYSBvYmxhc3QgculzaWR1ZWw7S3V5ZWRpbnNraXkgOiAxIDogMzM0MzMKK1Blcm1za2HvYSBvYmxhc3QgculzaWR1ZWw7Q2hlcm51c2hpbnNraXkgOiAxIDogNTI2NTAKK0tvdXJnYW5za2HvYSBvYmxhc3Q7U2hhdHJvdnNraXkgOiAxIDogMjgzMjAKK091ZG1vdXJ0aWE7S2l6bmVyc2tpeSA6IDEgOiAyNjM5NworUGVybXNrYe9hIG9ibGFzdCBy6XNpZHVlbDtDaGF5a292c2t5IDogMSA6IDg2NjcyCitPdWRtb3VydGlhO01hbG9wdXJnaW5za2l5IDogMSA6IDMxNTk2CitTdmVyZGxvdnNrYe9hIG9ibGFzdDtTeXNlcnRza2l5IDogMSA6IDgwMDgyCitTdmVyZGxvdnNrYe9hIG9ibGFzdDtBcnRpbnNraXkgOiAxIDogMzkxOTEKK091ZG1vdXJ0aWE7TW96aGdpbnNraXkgOiAxIDogMjg3OTYKK091ZG1vdXJ0aWE7U2FyYXB1bHNraXkgOiAxIDogMjY1OTcKK1N2ZXJkbG92c2th72Egb2JsYXN0O1BvbGV2c2tveSA6IDEgOiA3OTg4MgorU3ZlcmRsb3Zza2HvYSBvYmxhc3Q7S2FtZW5za2l5IDogMSA6IDMxOTkzCitLb3VyZ2Fuc2th72Egb2JsYXN0O0RhbG1hdG92c2tpeSA6IDEgOiAzOTU4OAorS291cmdhbnNrYe9hIG9ibGFzdDtLYXRheXNraXkgOiAxIDogMzE3MTAKK1N2ZXJkbG92c2th72Egb2JsYXN0O0thbWVuc2stVXJhbHNraXkgOiAxIDogMjA4NTU0CitPdWRtb3VydGlhO1NhcmFwdWwgOiAxIDogMTEwNDg2CitLb3VyZ2Fuc2th72Egb2JsYXN0O1NoYWRyaW5za2l5IDogMSA6IDM2Njk2CitCYWNoa2lyaWE7WWFuYXVsc2tpeSA6IDEgOiAyMzY0MQorT3VkbW91cnRpYTtLYW1iYXJza2l5IDogMSA6IDIzMjk3CitPdWRtb3VydGlhO0tpeWFzb3Zza2l5IDogMSA6IDEzMDk4CitPdWRtb3VydGlhO01vZ3pzaGEgOiAxIDogNDgxOTQKK0JhY2hraXJpYTtUYXR5c2hsaW5za2l5IDogMSA6IDI2ODc0CitCYWNoa2lyaWE7QXNraW5za2l5IDogMSA6IDI0MTQ2CitPdWRtb3VydGlhO0FsbmFzaHNraXkgOiAxIDogMjEzOTcKK1RjaGVsaWFiaW5za2HvYSBvYmxhc3Q7S2FzbGluc2tpeSA6IDEgOiAxNzA4NworVGNoZWxpYWJpbnNrYe9hIG9ibGFzdDtOeWF6ZXBldHJvdnNrc2tpeSA6IDEgOiAyNzgwNAorQmFjaGtpcmlhO1lhbmF1bCA6IDEgOiAyNjE2NgorS291cmdhbnNrYe9hIG9ibGFzdDtCZWxvemVyc2tpeSA6IDEgOiAyNDYzMAorVGNoZWxpYWJpbnNrYe9hIG9ibGFzdDtLdW5hc2hha3NraXkgOiAxIDogMzU5OTMKK0JhY2hraXJpYTtLcmFzbm9rYW1za2l5IDogMSA6IDI1NzYyCitPdWRtb3VydGlhO0dyYWtob3Zza2l5IDogMSA6IDExOTk5CitPdWRtb3VydGlhO0thcmFrdWxpbnNraXkgOiAxIDogMTQ5OTgKK1RjaGVsaWFiaW5za2HvYSBvYmxhc3Q7VmVya2huaXkgVWZhbGV5IDogMSA6IDQ3MDE0CitCYWNoa2lyaWE7QmFsdGFjaGV2c2tpeSA6IDEgOiAyNTE1NgorS291cmdhbnNrYe9hIG9ibGFzdDtLYXJnYXBvbHNraXkgOiAxIDogMzg1OTEKK0JhY2hraXJpYTtCZWxva2F0YXlza2l5IDogMSA6IDIyODMyCitLb3VyZ2Fuc2th72Egb2JsYXN0O1NoYWRyaW5zayA6IDEgOiA4NzU1MworQmFjaGtpcmlhO0thbHRhc2luc2tpeSA6IDEgOiAyODM4OQorQmFjaGtpcmlhO0thcmFpZGVsc2tpeSA6IDEgOiAzMDgxNAorQmFjaGtpcmlhO01lY2hldGxpbnNraXkgOiAxIDogMjQ2NTEKK0JhY2hraXJpYTtEdXZhbnNraXkgOiAxIDogMzEwMTYKK0JhY2hraXJpYTtOZWZ0ZWthbXNrIDogMSA6IDEyNDE2NAorQmFjaGtpcmlhO0J1cmF5ZXZza2l5IDogMSA6IDI5NTAwCitLb3VyZ2Fuc2th72Egb2JsYXN0O1Zhcmdhc2hpbnNraXkgOiAxIDogMjQ5MzAKK0tvdXJnYW5za2HvYSBvYmxhc3Q7TW9rcm91c292c2tpeSA6IDEgOiAxNzE1MgorVGNoZWxpYWJpbnNrYe9hIG9ibGFzdDtLcmFzbm9hcm1leXNraXkgOiAxIDogNDcyMTYKK1RjaGVsaWFiaW5za2HvYSBvYmxhc3Q7S2FzbGkgOiAxIDogMzAxMjkKK1JVLVVOSy0yODgxIDogMSA6IDIwNjEwCitUY2hlbGlhYmluc2th72Egb2JsYXN0O0t5c2h0eW0gOiAxIDogNTQ1OTcKK0tvdXJnYW5za2HvYSBvYmxhc3Q7TWlzaGtpbnNraXkgOiAxIDogMjU4MjcKK0JhY2hraXJpYTtNaXNoa2luc2tpeSA6IDEgOiAyODE4NworS291cmdhbnNrYe9hIG9ibGFzdDtTY2h1Y2hhbnNraXkgOiAxIDogMzA3MTMKK0tvdXJnYW5za2HvYSBvYmxhc3Q7U2h1bWlraGluc2tpeSA6IDEgOiAzODE5MgorQmFjaGtpcmlhO0lsaXNoZXZza2l5IDogMSA6IDM2Nzc0CitLb3VyZ2Fuc2th72Egb2JsYXN0O0tldG92c2tpeSA6IDEgOiA1NDI0NworQmFjaGtpcmlhO0R5dXJ0eXVsaW5za2l5IDogMSA6IDMyMjI4CitUY2hlbGlhYmluc2th72Egb2JsYXN0O0FyZ2F5YXNoc2tpeSA6IDEgOiA0NTE5NAorS291cmdhbnNrYe9hIG9ibGFzdDtDaGFzdG9vemVyc2tpeSA6IDEgOiA5MTc0CitCYWNoa2lyaWE7S2lnaW5za2l5IDogMSA6IDE5NjAwCitUY2hlbGlhYmluc2th72Egb2JsYXN0O0thcmFiYXNoIDogMSA6IDE2ODg1CitLb3VyZ2Fuc2th72Egb2JsYXN0O1l1cmdhbXlzaHNraXkgOiAxIDogMjc0MjMKK1RjaGVsaWFiaW5za2HvYSBvYmxhc3Q7U29zbm92c2tpeSA6IDEgOiA1NjUxOAorQmFjaGtpcmlhO051cmltYW5vdnNraXkgOiAxIDogMjI2MzAKK0JhY2hraXJpYTtCaXJza2l5IDogMSA6IDE5NDk4CitLb3VyZ2Fuc2th72Egb2JsYXN0O0xlYnlhemh5ZXZza2l5IDogMSA6IDIzNjMzCitUY2hlbGlhYmluc2th72Egb2JsYXN0O0t1c2luc2tpeSA6IDEgOiAzNzcxMgorQmFjaGtpcmlhO1NhbGF2YXRza2l5IDogMSA6IDI3Mjc4CitCYWNoa2lyaWE7QmxhZ292ZXNoY2hlbnNraXkgOiAxIDogMTg1ODkKK0tvdXJnYW5za2HvYSBvYmxhc3Q7TWFrdXNoaW5za2l5IDogMSA6IDI2MDI3CitCYWNoa2lyaWE7RHl1cnR1bGkgOiAxIDogMjgwODYKK0tvdXJnYW5za2HvYSBvYmxhc3Q7S3VyZ2FuIDogMSA6IDM2NTg2NworVGNoZWxpYWJpbnNrYe9hIG9ibGFzdDtNaWFzcyA6IDEgOiAxODU4MzEKK1RjaGVsaWFiaW5za2HvYSBvYmxhc3Q7WmxhdG91c3QgOiAxIDogMjEyMTE4CitCYWNoa2lyaWE7Qmlyc2sgOiAxIDogMzY3NzQKK0tvdXJnYW5za2HvYSBvYmxhc3Q7UGV0dWtob3Zza2l5IDogMSA6IDI3MDI0CitCYWNoa2lyaWE7QmFrYWxpbnNraXkgOiAxIDogMzI0MzAKK0JhY2hraXJpYTtDaGVrbWFndXNoZXZza2l5IDogMSA6IDMyOTM1CitUY2hlbGlhYmluc2th72Egb2JsYXN0O0NoZWx5YWJpbnNrIDogMSA6IDExNzQ1MzUKK1RjaGVsaWFiaW5za2HvYSBvYmxhc3Q7U2F0a2luc2tpeSA6IDEgOiA0NTkwMgorVGNoZWxpYWJpbnNrYe9hIG9ibGFzdDtBc2h5bnNraXkgOiAxIDogNDQxODMKK0JhY2hraXJpYTtLdXNobmFyZW5rb3Zza2l5IDogMSA6IDI3OTg1CitUY2hlbGlhYmluc2th72Egb2JsYXN0O0tvcGV5c2sgOiAxIDogMTQ4MjIwCitCYWNoa2lyaWE7SWdsaW5za2l5IDogMSA6IDQzMTM5CitLb3VyZ2Fuc2th72Egb2JsYXN0O1ByaXRvYm9sbnlpIDogMSA6IDE5MjQ2CitUY2hlbGlhYmluc2th72Egb2JsYXN0O0NoZWJhcmt1bHNraXkgOiAxIDogMzEwMzkKK0tvdXJnYW5za2HvYSBvYmxhc3Q7U2FmYWt1bGV2c2tpeSA6IDEgOiAyMDU0MgorVGNoZWxpYWJpbnNrYe9hIG9ibGFzdDtLYXRheWV2LUl2YW5vdnNraXkgOiAxIDogMjM0NTYKK0tvdXJnYW5za2HvYSBvYmxhc3Q7S3VydGFteXNoc2tpeSA6IDEgOiA0Mjg3OQorS291cmdhbnNrYe9hIG9ibGFzdDtQb2xvdmluc2tpeSA6IDEgOiAxNzM1MQorS291cmdhbnNrYe9hIG9ibGFzdDtBbG1lbmV2c2tpeSA6IDEgOiAxOTU0NQorVGNoZWxpYWJpbnNrYe9hIG9ibGFzdDtZZXRrdWxza2l5IDogMSA6IDMxMDM5CitCYWNoa2lyaWE7QmxhZ292ZXNoY2hlbnNrIDogMSA6IDI4ODk0CitUY2hlbGlhYmluc2th72Egb2JsYXN0O1NhdGthIDogMSA6IDUxNzY2CitCYWNoa2lyaWE7U2hhcmFuc2tpeSA6IDEgOiAyNDU1MAorVGNoZWxpYWJpbnNrYe9hIG9ibGFzdDtBc2hhIDogMSA6IDM4NjIyCitCYWNoa2lyaWE7VWZpbXNraXkgOiAxIDogNDc5ODkKK1RjaGVsaWFiaW5za2HvYSBvYmxhc3Q7Q2hlYmFya3VsJyA6IDEgOiA1MTQ2MgorQmFjaGtpcmlhO0JsYWdvdmFyc2tpeSA6IDEgOiAyNDc1MgorVGNoZWxpYWJpbnNrYe9hIG9ibGFzdDtLb3JraW5vIDogMSA6IDcyODk3CitUY2hlbGlhYmluc2th72Egb2JsYXN0O1VzdC1LYXRheWV2IDogMSA6IDM1OTkzCitCYWNoa2lyaWE7VWNoYWx5IDogMSA6IDMzMDM2CitCYWNoa2lyaWE7QnV6ZHlha3NraXkgOiAxIDogMzEyMTgKK0JhY2hraXJpYTtVZmEgOiAxIDogMTExMDMwMworQmFjaGtpcmlhO0NoaXNobWluc2tpeSA6IDEgOiA1MTkyOQorQmFjaGtpcmlhO0Fya2hhbmdlbHNraXkgOiAxIDogMjAxMDUKK1RjaGVsaWFiaW5za2HvYSBvYmxhc3Q7WWVtYW56aGVsaW5zayA6IDEgOiA1NTkxMQorS291cmdhbnNrYe9hIG9ibGFzdDtUc2VsaW5ueWkgOiAxIDogMjU5MjcKK0JhY2hraXJpYTtUdXltYXppbnNraXkgOiAxIDogMzA1MTEKK1RjaGVsaWFiaW5za2HvYSBvYmxhc3Q7VXZlbHNraXkgOiAxIDogMzE0NDQKK1RjaGVsaWFiaW5za2HvYSBvYmxhc3Q7S2F0YXlldi1JdmFub3ZzayA6IDEgOiAyNTM3NworQmFjaGtpcmlhO0JlbG9yZXRza2l5IDogMSA6IDMzMTM3CitLb3VyZ2Fuc2th72Egb2JsYXN0O1p2ZXJpbm9nb2xvdnNreSA6IDEgOiAxMDk2OQorVGNoZWxpYWJpbnNrYe9hIG9ibGFzdDtPa3R5YWJyc2tpeSA6IDEgOiAzMTI0MQorVGNoZWxpYWJpbnNrYe9hIG9ibGFzdDtVeXNraXkgOiAxIDogMzA4MzcKK0JhY2hraXJpYTtLYXJtYXNrYWxpbnNraXkgOiAxIDogNDY1NzQKK0JhY2hraXJpYTtUdXltYXp5IDogMSA6IDk0NTYzCitUY2hlbGlhYmluc2th72Egb2JsYXN0O1BsYXN0IDogMSA6IDI2OTk1CitCYWNoa2lyaWE7T2t0eWFicnNraXkgOiAxIDogMTA4MTAwCitUY2hlbGlhYmluc2th72Egb2JsYXN0O1l1emhuby1VcmFsc2sgOiAxIDogNDI0NjQKK1RjaGVsaWFiaW5za2HvYSBvYmxhc3Q7VHJvaXRza2l5IDogMSA6IDM2Mzk4CitCYWNoa2lyaWE7QmVsZWJleWV2c2tpeSA6IDEgOiAxNjc3MQorQmFjaGtpcmlhO0Rhdmxla2Fub3Zza2l5IDogMSA6IDE4MTg1CitPcmVuYm91cmdza2HvYSBvYmxhc3Q7U2V2ZXJueWkgOiAxIDogMjEwODIKK1JVLVVOSy0yODgyIDogMSA6IDM5MDk4CitCYWNoa2lyaWE7R2FmdXJpeXNraXkgOiAxIDogMzYwNjcKK0JhY2hraXJpYTtZZXJtZWtleWV2c2tpeSA6IDEgOiAxODA4NAorQmFjaGtpcmlhO0F1cmdhemluc2tpeSA6IDEgOiAzOTA5OAorQmFjaGtpcmlhO0Fsc2hleWV2c2tpeSA6IDEgOiA0ODM5MworQmFjaGtpcmlhO0Rhdmxla2Fub3ZvIDogMSA6IDIyOTMzCitUY2hlbGlhYmluc2th72Egb2JsYXN0O1ZlcmtobmV1cmFsc2tpeSA6IDEgOiA0NTkwMgorVGNoZWxpYWJpbnNrYe9hIG9ibGFzdDtUcm9pdHNrIDogMSA6IDg4OTcyCitCYWNoa2lyaWE7QmVsZWJleSA6IDEgOiA4MDQxOQorT3JlbmJvdXJnc2th72Egb2JsYXN0O0FiZHVsaW5za2l5IDogMSA6IDE3NjY5CitCYWNoa2lyaWE7QmVsb3JldHNrIDogMSA6IDkxMDI3CitPcmVuYm91cmdza2HvYSBvYmxhc3Q7QnVndXJ1c2xhbnNraXkgOiAxIDogMjM5OTMKK0JhY2hraXJpYTtBYnplbGlsb3Zza2l5IDogMSA6IDQwNjEzCitCYWNoa2lyaWE7Qml6aGJ1bHlha3NraXkgOiAxIDogMjgwODYKK0JhY2hraXJpYTtTdGVybGl0YW1ha3NraXkgOiAxIDogMzQwNDcKK1RjaGVsaWFiaW5za2HvYSBvYmxhc3Q7TmFnYXliYWtza2l5IDogMSA6IDI2Mjg3CitUY2hlbGlhYmluc2th72Egb2JsYXN0O0NoZXNtZW5za2l5IDogMSA6IDIwOTI5CitCYWNoa2lyaWE7TWl5YWtpbnNraXkgOiAxIDogMzE2MjIKK0JhY2hraXJpYTtJc2hpbWJheXNreSA6IDEgOiAyNTM1OAorT3JlbmJvdXJnc2th72Egb2JsYXN0O0FzZWtleWV2c2tpeSA6IDEgOiAyNTI5OAorVGNoZWxpYWJpbnNrYe9hIG9ibGFzdDtBZ2Fwb3Zza2l5IDogMSA6IDM3NTEwCitPcmVuYm91cmdza2HvYSBvYmxhc3Q7QnVndXJ1c2xhbiA6IDEgOiA1MzAwNgorQmFjaGtpcmlhO1N0ZXJsaXRhbWFrIDogMSA6IDI1NjgxNAorQmFjaGtpcmlhO1N0ZXJsaWJhc2hldnNraXkgOiAxIDogMjIzMjcKK1RjaGVsaWFiaW5za2HvYSBvYmxhc3Q7VmFybmVuc2tpeSA6IDEgOiAzMjU1NgorT3JlbmJvdXJnc2th72Egb2JsYXN0O0FiZHVsaW5vIDogMSA6IDIyMDg2CitPcmVuYm91cmdza2HvYSBvYmxhc3Q7TWF0dmV5ZXZza2l5IDogMSA6IDE2MzY0CitCYWNoa2lyaWE7QnVyenlhbnNraXkgOiAxIDogMTUwNTMKK0JhY2hraXJpYTtJc2hpbWJheSA6IDEgOiA3MjQzNworVGNoZWxpYWJpbnNrYe9hIG9ibGFzdDtNYWduaXRvZ29yc2sgOiAxIDogNDQ0ODYxCitUY2hlbGlhYmluc2th72Egb2JsYXN0O0thcnRhbGluc2tpeSA6IDEgOiAyMzI1NAorT3JlbmJvdXJnc2th72Egb2JsYXN0O1Bvbm9tYXJ5b3Zza2l5IDogMSA6IDE4NjczCitCYWNoa2lyaWE7TWVsZXV6c2tpeSA6IDEgOiAyNjQ2OQorQmFjaGtpcmlhO0Z5b2Rvcm92c2tpeSA6IDEgOiAyMDEwNQorQmFjaGtpcmlhO1NhbGF2YXQgOiAxIDogMTU2Njk1CitPcmVuYm91cmdza2HvYSBvYmxhc3Q7QnV6dWx1a3NraXkgOiAxIDogMzI5MjgKK0JhY2hraXJpYTtCYXltYWtza2l5IDogMSA6IDQzNTQzCitPcmVuYm91cmdza2HvYSBvYmxhc3Q7U2hhcmx5a3NraXkgOiAxIDogMjM2OTIKK09yZW5ib3VyZ3NrYe9hIG9ibGFzdDtHcmFjaGV2c2tpeSA6IDEgOiAxNjk2NgorVGNoZWxpYWJpbnNrYe9hIG9ibGFzdDtLaXppbHNraXkgOiAxIDogMzM0NjYKK09yZW5ib3VyZ3NrYe9hIG9ibGFzdDtLcmFzbm9ndmFyZGV5c2tpeSA6IDEgOiAyNjkwNQorVGNoZWxpYWJpbnNrYe9hIG9ibGFzdDtLYXJ0YWx5IDogMSA6IDM3MjA3CitCYWNoa2lyaWE7S3VnYXJjaGluc2tpeSA6IDEgOiAzMjUzMQorQmFjaGtpcmlhO1ppbGFpcnNraXkgOiAxIDogMTg5OTMKK0JhY2hraXJpYTtNZWxldXogOiAxIDogNTkwMDEKK0JhY2hraXJpYTtLdW1lcnRhdXNraXkgOiAxIDogMjQwNDUKK09yZW5ib3VyZ3NrYe9hIG9ibGFzdDtBbGVrc2FuZHJvdnNraXkgOiAxIDogMjEyODMKK09yZW5ib3VyZ3NrYe9hIG9ibGFzdDtLdXJtYW5heWV2c2tpeSA6IDEgOiAyMjU4OAorVGNoZWxpYWJpbnNrYe9hIG9ibGFzdDtCcmVkaW5za2l5IDogMSA6IDMzNjY4CitPcmVuYm91cmdza2HvYSBvYmxhc3Q7QnV6dWx1ayA6IDEgOiA4NDUyOQorQmFjaGtpcmlhO0t1bWVydGF5IDogMSA6IDcyMjM1CitCYWNoa2lyaWE7U2liYXkgOiAxIDogNTMwNDAKK09yZW5ib3VyZ3NrYe9hIG9ibGFzdDtTb3JvY2hpbnNraXkgOiAxIDogMTY5NjYKK09yZW5ib3VyZ3NrYe9hIG9ibGFzdDtPa3R5YWJyc2tpeSA6IDEgOiAyMjU4OAorT3JlbmJvdXJnc2th72Egb2JsYXN0O05vdm9zZXJnaXlldnNraXkgOiAxIDogMzg5NTIKK0JhY2hraXJpYTtCYXltYWsgOiAxIDogMTc0NzgKK09yZW5ib3VyZ3NrYe9hIG9ibGFzdDtUb3Rza2l5IDogMSA6IDM0NjM1CitPcmVuYm91cmdza2HvYSBvYmxhc3Q7VHl1bGdhbnNraXkgOiAxIDogMjU3MDAKK0JhY2hraXJpYTtaaWFuY2h1cmluc2tpeSA6IDEgOiAyODE4NworT3JlbmJvdXJnc2th72Egb2JsYXN0O0t2YXJrZW5za2l5IDogMSA6IDI0NDk1CitCYWNoa2lyaWE7S2hheWJ1bGxpbnNraXkgOiAxIDogMzE0MjAKK1JVLVVOSy0yODgzIDogMSA6IDI3NjA3CitPcmVuYm91cmdza2HvYSBvYmxhc3Q7UGVyZXZvbG90c2tpeSA6IDEgOiAzMDAxNworT3JlbmJvdXJnc2th72Egb2JsYXN0O1BlcnZvbWF5c2tpeSA6IDEgOiAyNjMwMgorT3JlbmJvdXJnc2th72Egb2JsYXN0O1Nha21hcnNraXkgOiAxIDogMjgwMDkKK09yZW5ib3VyZ3NrYe9hIG9ibGFzdDtUYXNobGluc2tpeSA6IDEgOiAyNDg5NworT3JlbmJvdXJnc2th72Egb2JsYXN0O1NhcmFrdGFzaHNraXkgOiAxIDogNDIyNjUKK09yZW5ib3VyZ3NrYe9hIG9ibGFzdDtPcmVuYnVyZ3NraXkgOiAxIDogNTY2MjAKK09yZW5ib3VyZ3NrYe9hIG9ibGFzdDtBZGFtb3Zza2l5IDogMSA6IDMxMDIxCitPcmVuYm91cmdza2HvYSBvYmxhc3Q7T3JlbmJ1cmcgOiAxIDogNTczNDMyCitPcmVuYm91cmdza2HvYSBvYmxhc3Q7S3V2YW5keWtza2l5IDogMSA6IDI1ODAwCitPcmVuYm91cmdza2HvYSBvYmxhc3Q7R2F5c2tpeSA6IDEgOiAxMzU1MworT3JlbmJvdXJnc2th72Egb2JsYXN0O05vdm9vcnNraXkgOiAxIDogMzQyMzMKK09yZW5ib3VyZ3NrYe9hIG9ibGFzdDtJbGVrc2tpeSA6IDEgOiAyODcxMgorT3JlbmJvdXJnc2th72Egb2JsYXN0O0JlbHlhZXZza2l5IDogMSA6IDIwNTgwCitPcmVuYm91cmdza2HvYSBvYmxhc3Q7S3V2YW5keWsgOiAxIDogMjk4MTYKK09yZW5ib3VyZ3NrYe9hIG9ibGFzdDtTdmV0bGluc2tpeSA6IDEgOiAyMDk4MgorT3JlbmJvdXJnc2th72Egb2JsYXN0O0dheSA6IDEgOiA0NDM3MworT3JlbmJvdXJnc2th72Egb2JsYXN0O01lZG5vZ29yc2sgOiAxIDogMzk3NTUKK09yZW5ib3VyZ3NrYe9hIG9ibGFzdDtTb2wtSWxldHNraXkgOiAxIDogNTMxMDcKK09yZW5ib3VyZ3NrYe9hIG9ibGFzdDtZYXNuZW5za2l5IDogMSA6IDg0MzMKK09yZW5ib3VyZ3NrYe9hIG9ibGFzdDtBa2J1bGFrc2tpeSA6IDEgOiAzMDQxOAorT3JlbmJvdXJnc2th72Egb2JsYXN0O09yc2sgOiAxIDogMjc5Njg5CitPcmVuYm91cmdza2HvYSBvYmxhc3Q7Tm92b3Ryb2l0c2sgOiAxIDogMTE1MzQ5CitPcmVuYm91cmdza2HvYSBvYmxhc3Q7RG9tYmFyb3Zza2l5IDogMSA6IDIwNzgxCitPcmVuYm91cmdza2HvYSBvYmxhc3Q7WWFzbnkgOiAxIDogMjgxMDkKK1JVLVVOSy0yODg0IDogMSA6IDIwNjEwCitSVS1VTkstMjg4NSA6IDEgOiAzOTA5OAorUlUtVU5LLTI4ODYgOiAxIDogMjc2MDcKK0lhbWFsby1OZW5ldHNraSBuYXRpb25hbDtZYW1hbHNraXkgOiAxIDogMTQwODAKK0lhbWFsby1OZW5ldHNraSBuYXRpb25hbDtUYXpvdnNraXkgOiAxIDogMTczNDUKK0lhbWFsby1OZW5ldHNraSBuYXRpb25hbDtQcml1cmFsc2tpeSA6IDEgOiA2OTM4CitJYW1hbG8tTmVuZXRza2kgbmF0aW9uYWw7UHVyb3Zza2l5IDogMSA6IDU1NTA1CitJYW1hbG8tTmVuZXRza2kgbmF0aW9uYWw7TmFkeW1za2l5IDogMSA6IDI3MDM4CitJYW1hbG8tTmVuZXRza2kgbmF0aW9uYWw7S3Jhbm9zZWxrdXBza2l5IDogMSA6IDg2NzMKK0lhbWFsby1OZW5ldHNraSBuYXRpb25hbDtTaHVyeXNoa2Fyc2tpeSA6IDEgOiA5NDg5CitJYW1hbG8tTmVuZXRza2kgbmF0aW9uYWw7TGFieXRuYW5naSA6IDEgOiAzNDA3OAorSWFtYWxvLU5lbmV0c2tpIG5hdGlvbmFsO1NhbGVraGFyZCA6IDEgOiAzMTUyOAorSWFtYWxvLU5lbmV0c2tpIG5hdGlvbmFsO05vdnlpIFVyZW5nb3kgOiAxIDogMTAxMTEzCitLaGFudHktTWFuc2lza2kgbmF0aW9uYWw7QmVyZXpvdnNraXkgOiAxIDogMjg1MjYKK0lhbWFsby1OZW5ldHNraSBuYXRpb25hbDtOYWR5bSA6IDEgOiA1MTIyMAorS2hhbnR5LU1hbnNpc2tpIG5hdGlvbmFsO0JlbG95YXJza2l5IDogMSA6IDg3NzAKK0lhbWFsby1OZW5ldHNraSBuYXRpb25hbDtNdXJhdmxlbmtvIDogMSA6IDI4MzY1CitLaGFudHktTWFuc2lza2kgbmF0aW9uYWw7QmVsb3lhcnNreSA6IDEgOiAxODE0NAorS2hhbnR5LU1hbnNpc2tpIG5hdGlvbmFsO09rdHlhYnJza2l5IDogMSA6IDMyOTYxCitLaGFudHktTWFuc2lza2kgbmF0aW9uYWw7U3VyZ3V0c2tpeSA6IDEgOiA3Mzk4NworSWFtYWxvLU5lbmV0c2tpIG5hdGlvbmFsO05veWFicnNrIDogMSA6IDk3NzQ2CitLaGFudHktTWFuc2lza2kgbmF0aW9uYWw7S2hhbnR5LU1hbnNpeXNraXkgOiAxIDogMjAzNjEKK0toYW50eS1NYW5zaXNraSBuYXRpb25hbDtOaXpobmV2YXJ0b3Zza2l5IDogMSA6IDMyMjU2CitLaGFudHktTWFuc2lza2kgbmF0aW9uYWw7U292ZXRza2l5IDogMSA6IDc0MTg4CitLaGFudHktTWFuc2lza2kgbmF0aW9uYWw7TnlhZ2FuIDogMSA6IDYyODk5CitLaGFudHktTWFuc2lza2kgbmF0aW9uYWw7S29nYWx5bSA6IDEgOiA0ODc4NworS2hhbnR5LU1hbnNpc2tpIG5hdGlvbmFsO1JhZHV6aG55aSA6IDEgOiA0NzA3MworS2hhbnR5LU1hbnNpc2tpIG5hdGlvbmFsO1Bva2FjaHkgOiAxIDogMTMxMDQKK0toYW50eS1NYW5zaXNraSBuYXRpb25hbDtTdXJndXQgOiAxIDogMjYyODg1CitLaGFudHktTWFuc2lza2kgbmF0aW9uYWw7TGFuZ2VwYXMgOiAxIDogMzEwNDYKK0toYW50eS1NYW5zaXNraSBuYXRpb25hbDtLb25kaW5za2l5IDogMSA6IDM2NTkwCitLaGFudHktTWFuc2lza2kgbmF0aW9uYWw7TmVmdGV5dWdhbnNraXkgOiAxIDogMjY3MTIKK0toYW50eS1NYW5zaXNraSBuYXRpb25hbDtOZWZ0ZXVnYW5zayA6IDEgOiA5NjE2MworS2hhbnR5LU1hbnNpc2tpIG5hdGlvbmFsO0toYW50eS1NYW5zeWlzayA6IDEgOiAzNTY4MworVG9tc2th72Egb2JsYXN0O0thcmdhc29rc2tpeSA6IDEgOiAzMDYyOAorS2hhbnR5LU1hbnNpc2tpIG5hdGlvbmFsO01lZ2lvbiA6IDEgOiA0ODk4OQorS2hhbnR5LU1hbnNpc2tpIG5hdGlvbmFsO05penNobnZhcnRvdnNrIDogMSA6IDI0Njk1OAorUlUtVU5LLTI4ODcgOiAxIDogMTI2NDgKK1JVLVVOSy0yODg4IDogMSA6IDEyNjQ4CitLaGFudHktTWFuc2lza2kgbmF0aW9uYWw7UHl0LVlha2ggOiAxIDogMzkxMTAKK1RvbXNrYe9hIG9ibGFzdDtTdHJlemhldm9qIDogMSA6IDQ2ODMwCitLaGFudHktTWFuc2lza2kgbmF0aW9uYWw7VXJheSA6IDEgOiA0MDMyMAorVGlvdW1lbnNrYe9hIG9ibC4gculzaWR1ZTtVdmF0c2tpeSA6IDEgOiAxOTMyMgorVG9tc2th72Egb2JsYXN0O1ZlcmtobmVrZXRza2l5IDogMSA6IDI2ODY0CitUb21za2HvYSBvYmxhc3Q7UGFyYWJlbHNraXkgOiAxIDogMTcxNDMKK1RvbXNrYe9hIG9ibGFzdDtLb2xwYXNoZXZza2l5IDogMSA6IDI0NTY1CitUaW91bWVuc2th72Egb2JsLiBy6XNpZHVlO1RvYm9sc2tpeSA6IDEgOiAyNjczMAorVGlvdW1lbnNrYe9hIG9ibC4gculzaWR1ZTtWYWdheXNraXkgOiAxIDogMjc4MzIKK09tc2th72Egb2JsYXN0O1RhcnNraXkgOiAxIDogMjU3OTUKK09tc2th72Egb2JsYXN0O1VzdC1Jc2hpbXNraXkgOiAxIDogMjE0OTYKK1RvbXNrYe9hIG9ibGFzdDtQZXJ2b21heXNraXkgOiAxIDogMjUyOTcKK1RvbXNrYe9hIG9ibGFzdDtUZWd1bGRldHNraXkgOiAxIDogOTgyNgorVG9tc2th72Egb2JsYXN0O0tvbHBhc2hldm8gOiAxIDogMzIwOTEKK1Rpb3VtZW5za2HvYSBvYmwuIHLpc2lkdWU7VG9ib2xzayA6IDEgOiAxMTc5MzQKK09tc2th72Egb2JsYXN0O1RldnJpenNraXkgOiAxIDogMjA4OTYKK1Rpb3VtZW5za2HvYSBvYmwuIHLpc2lkdWU7Tml6aG5ldGF2ZGluc2tpeSA6IDEgOiAyNzMzMQorVGlvdW1lbnNrYe9hIG9ibC4gculzaWR1ZTtZYXJrb3Zza2l5IDogMSA6IDI2MjMwCitUb21za2HvYSBvYmxhc3Q7TW9sY2hhbm92c2tpeSA6IDEgOiAyMDU5MworVG9tc2th72Egb2JsYXN0O0NoYWluc2tpeSA6IDEgOiAxODI5MworVG9tc2th72Egb2JsYXN0O0FzaW5vdnNraXkgOiAxIDogMTY5MzQKK1RvbXNrYe9hIG9ibGFzdDtCYWtjaGFyc2tpeSA6IDEgOiAxOTEyOQorT21za2HvYSBvYmxhc3Q7Wm5hbWVuc2tpeSA6IDEgOiAxNTE5NworVG9tc2th72Egb2JsYXN0O0tyaXZvc2hlaW5za2l5IDogMSA6IDIwNDg4CitPbXNrYe9hIG9ibGFzdDtTZWRlbG5pa292c2tpeSA6IDEgOiAxMzg5NworUlUtVU5LLTI4ODkgOiAxIDogNTAxNworVGlvdW1lbnNrYe9hIG9ibC4gculzaWR1ZTtUeXVtZW5za2l5IDogMSA6IDg4OTAxCitUb21za2HvYSBvYmxhc3Q7VG9tc2tpeSA6IDEgOiA5ODQ2OAorVGlvdW1lbnNrYe9hIG9ibC4gculzaWR1ZTtWaWt1bG92c2tpeSA6IDEgOiAyMTIyNAorT21za2HvYSBvYmxhc3Q7Qm9sc2hldWtvdnNraXkgOiAxIDogMTE0OTgKK1RvbXNrYe9hIG9ibGFzdDtaeXJ5YW5za2l5IDogMSA6IDE5NDQzCitUaW91bWVuc2th72Egb2JsLiBy6XNpZHVlO0Fyb21hc2hldnNraXkgOiAxIDogMTY4MTkKK05vdm9zaWJpcnNrYe9hIG9ibGFzdDtLeXNodG92c2tpeSA6IDEgOiAxODk2NQorVGlvdW1lbnNrYe9hIG9ibC4gculzaWR1ZTtZdXJnaW5za2l5IDogMSA6IDE1NzE4CitUb21za2HvYSBvYmxhc3Q7U2hlZ2Fyc2tpeSA6IDEgOiAyNTUwNgorVG9tc2th72Egb2JsYXN0O0FzaW5vIDogMSA6IDM0NzA0CitUaW91bWVuc2th72Egb2JsLiBy6XNpZHVlO1R5dW1lbiA6IDEgOiA1NDQxMTgKK05vdm9zaWJpcnNrYe9hIG9ibGFzdDtTZXZlcm55aSA6IDEgOiAxMjU0NQorVGlvdW1lbnNrYe9hIG9ibC4gculzaWR1ZTtZYWx1dG9yb3Zza2l5IDogMSA6IDE3MTE5CitUaW91bWVuc2th72Egb2JsLiBy6XNpZHVlO1Nvcm9raW5za2l5IDogMSA6IDEzMzE1CitUaW91bWVuc2th72Egb2JsLiBy6XNpZHVlO1phdm9kb3Vrb3Zza2l5IDogMSA6IDIzNjI3CitPbXNrYe9hIG9ibGFzdDtUYXJhIDogMSA6IDI2NTk1CitLZW1lcm92c2th72Egb2JsYXN0O01hcmlpbnNraXkgOiAxIDogMjIwODMKK1Rpb3VtZW5za2HvYSBvYmwuIHLpc2lkdWU7R29seXNobWFub3Zza2l5IDogMSA6IDI5MzMzCitUaW91bWVuc2th72Egb2JsLiBy6XNpZHVlO0lzZXRza2l5IDogMSA6IDI2MTMwCitPbXNrYe9hIG9ibGFzdDtLb2xvc292c2tpeSA6IDEgOiAxODA5NworVG9tc2th72Egb2JsYXN0O1RvbXNrIDogMSA6IDUyMzQ5MQorVGlvdW1lbnNrYe9hIG9ibC4gculzaWR1ZTtPbXV0aW5za2l5IDogMSA6IDI0NTI4CitPbXNrYe9hIG9ibGFzdDtNdXJvbXRzZXZza2l5IDogMSA6IDMyMjk0CitPbXNrYe9hIG9ibGFzdDtLcnV0aW5za2l5IDogMSA6IDIzNzk2CitUaW91bWVuc2th72Egb2JsLiBy6XNpZHVlO0FiYXRza2l5IDogMSA6IDI3NDMxCitPbXNrYe9hIG9ibGFzdDtCb2xzaGVyZWNoZW5za2l5IDogMSA6IDM3NzkzCitUb21za2HvYSBvYmxhc3Q7S296aGV2bmlrb3Zza2l5IDogMSA6IDI2MDI4CitUaW91bWVuc2th72Egb2JsLiBy6XNpZHVlO1lhbHV0b3JvdnNrIDogMSA6IDM3MTQyCitLZW1lcm92c2th72Egb2JsYXN0O1lheXNraXkgOiAxIDogMjY0ODEKK1Rpb3VtZW5za2HvYSBvYmwuIHLpc2lkdWU7SXNoaW1za2l5IDogMSA6IDM2MzQxCitLZW1lcm92c2th72Egb2JsYXN0O0l6aG1vcnNraXkgOiAxIDogMTkxNTIKK05vdm9zaWJpcnNrYe9hIG9ibGFzdDtVYmluc2tpeSA6IDEgOiAyMTA0MAorTm92b3NpYmlyc2th72Egb2JsYXN0O0tvbHl2YW5za2l5IDogMSA6IDI4NDQ4CitPbXNrYe9hIG9ibGFzdDtUeXVrYWxpbnNraXkgOiAxIDogMjIyOTYKK0tlbWVyb3Zza2HvYSBvYmxhc3Q7VHlhemhpbnNraXkgOiAxIDogMzM5MDcKK1Rpb3VtZW5za2HvYSBvYmwuIHLpc2lkdWU7VXBvcm92c2tpeSA6IDEgOiAyMjIyNQorVGlvdW1lbnNrYe9hIG9ibC4gculzaWR1ZTtaYXZvZG91a292c2sgOiAxIDogMjU2MjkKK05vdm9zaWJpcnNrYe9hIG9ibGFzdDtWZW5nZXJvdnNraXkgOiAxIDogMjQ5OTEKK1Rpb3VtZW5za2HvYSBvYmwuIHLpc2lkdWU7QXJtaXpvbnNraXkgOiAxIDogMTM5MTYKK05vdm9zaWJpcnNrYe9hIG9ibGFzdDtLdXlieXNoZXZza2l5IDogMSA6IDIxOTI5CitLZW1lcm92c2th72Egb2JsYXN0O01hcmlpbnNrIDogMSA6IDM5MjgxCitLZW1lcm92c2th72Egb2JsYXN0O1lhc2hraW5za2l5IDogMSA6IDM2NDQ4CitOb3Zvc2liaXJza2HvYSBvYmxhc3Q7VXN0LVRhcmtza2l5IDogMSA6IDE1NzA2CitLZW1lcm92c2th72Egb2JsYXN0O1l1cmdpbnNraXkgOiAxIDogMjMwNjEKK0tlbWVyb3Zza2HvYSBvYmxhc3Q7Q2hlYnVsaW5za2l5IDogMSA6IDE4MTc1CitUaW91bWVuc2th72Egb2JsLiBy6XNpZHVlO0lzaGltIDogMSA6IDY0MTczCitSVS1VTkstMjg5MCA6IDEgOiAyNDQ5NQorS2VtZXJvdnNrYe9hIG9ibGFzdDtBbnpoZXJvLVN1ZHpoZW5zayA6IDEgOiAxMDkxNDcKK0tlbWVyb3Zza2HvYSBvYmxhc3Q7VGF5Z2EgOiAxIDogMjYwOTAKK05vdm9zaWJpcnNrYe9hIG9ibGFzdDtCb2xvdG5pbnNraXkgOiAxIDogMzYzNTAKK1Rpb3VtZW5za2HvYSBvYmwuIHLpc2lkdWU7QmVyZHl1emhza2l5IDogMSA6IDE1MTE3CitOb3Zvc2liaXJza2HvYSBvYmxhc3Q7Q2h1bHltc2tpeSA6IDEgOiAzMTIxNAorT21za2HvYSBvYmxhc3Q7Tml6aG5lb21za2l5IDogMSA6IDIyNDk2CitLZW1lcm92c2th72Egb2JsYXN0O1Rpc3Vsc2tpeSA6IDEgOiAzMzQxOAorT21za2HvYSBvYmxhc3Q7U2FyZ2F0c2tpeSA6IDEgOiAyMjI5NgorVGlvdW1lbnNrYe9hIG9ibC4gculzaWR1ZTtTbGFka292c2tpeSA6IDEgOiAxNzcyMAorS2VtZXJvdnNrYe9hIG9ibGFzdDtLZW1lcm92c2tpeSA6IDEgOiAzNjc0MQorT21za2HvYSBvYmxhc3Q7VHVrYWxpbnNrIDogMSA6IDEyNDk4CitUaW91bWVuc2th72Egb2JsLiBy6XNpZHVlO0themFuc2tpeSA6IDEgOiAyNDQyOAorS2VtZXJvdnNrYe9hIG9ibGFzdDtCZXJlem92c2tpeSA6IDEgOiA1Njc3MgorT21za2HvYSBvYmxhc3Q7R29ya292c2tpeSA6IDEgOiAyODY5NQorS2VtZXJvdnNrYe9hIG9ibGFzdDtZdXJnYSA6IDEgOiA5MjYzMworTm92b3NpYmlyc2th72Egb2JsYXN0O0thcmdhdHNraXkgOiAxIDogMjUwODkKK0tlbWVyb3Zza2HvYSBvYmxhc3Q7VG9wa2luc2tpeSA6IDEgOiAxOTI1MAorTm92b3NpYmlyc2th72Egb2JsYXN0O01vc2hrb3Zza2l5IDogMSA6IDQxNjg0CitOb3Zvc2liaXJza2HvYSBvYmxhc3Q7Q2hhbm92c2tpeSA6IDEgOiAzMzU4NAorTm92b3NpYmlyc2th72Egb2JsYXN0O1RhdGFyc2tpeSA6IDEgOiAyMDk0MQorT21za2HvYSBvYmxhc3Q7THl1Ymluc2tpeSA6IDEgOiA0NDI5MgorTm92b3NpYmlyc2th72Egb2JsYXN0O0tvY2hlbmV2c2tpeSA6IDEgOiA0NzAxOAorT21za2HvYSBvYmxhc3Q7TmF6eXZheWV2c2sgOiAxIDogMTQwOTcKK05vdm9zaWJpcnNrYe9hIG9ibGFzdDtUb2d1Y2hpbnNraXkgOiAxIDogNjY5NzEKK05vdm9zaWJpcnNrYe9hIG9ibGFzdDtOb3Zvc2liaXJza2l5IDogMSA6IDEwODE2MQorTm92b3NpYmlyc2th72Egb2JsYXN0O0t1eWJpc2hldiA6IDEgOiA1MTk1NworT21za2HvYSBvYmxhc3Q7T21za2l5IDogMSA6IDg5NDg0CitOb3Zvc2liaXJza2HvYSBvYmxhc3Q7QmFyYWJpbnNraXkgOiAxIDogMTgzNzMKK0tlbWVyb3Zza2HvYSBvYmxhc3Q7S3JhcGl2aW5za2l5IDogMSA6IDMwNjgyCitLZW1lcm92c2th72Egb2JsYXN0O0tlbWVyb3ZvIDogMSA6IDU0MDk0OAorTm92b3NpYmlyc2th72Egb2JsYXN0O0JhcmFiaW5zayA6IDEgOiAzNDU3MgorT21za2HvYSBvYmxhc3Q7S2FsYWNoaW5za2l5IDogMSA6IDIzNTk2CitPbXNrYe9hIG9ibGFzdDtJc2lsa3Vsc2tpeSA6IDEgOiAyMjA5NgorS2VtZXJvdnNrYe9hIG9ibGFzdDtUb3BraSA6IDEgOiAzMjkzMAorTm92b3NpYmlyc2th72Egb2JsYXN0O1RhdGFyc2sgOiAxIDogMjgzNDkKK09tc2th72Egb2JsYXN0O01vc2thbGVuc2tpeSA6IDEgOiAzMzc5NAorT21za2HvYSBvYmxhc3Q7S29ybWlsb3Zza2l5IDogMSA6IDI2Nzk1CitOb3Zvc2liaXJza2HvYSBvYmxhc3Q7Tm92b3NpYmlyc2sgOiAxIDogMTQ0MjU0NworS2VtZXJvdnNrYe9hIG9ibGFzdDtQcm9teXNobGVubm92c2tpeSA6IDEgOiA0OTA1MworT21za2HvYSBvYmxhc3Q7TWFyeWFub3Zza2l5IDogMSA6IDI4Mzk1CitPbXNrYe9hIG9ibGFzdDtPbXNrIDogMSA6IDExOTAyODEKK05vdm9zaWJpcnNrYe9hIG9ibGFzdDtDaGlzdG9venlvcm55aSA6IDEgOiAyNDAwMworT21za2HvYSBvYmxhc3Q7S2FsYWNoaW5zayA6IDEgOiAyNTM5NQorTm92b3NpYmlyc2th72Egb2JsYXN0O1pkdmluc2tpeSA6IDEgOiAyMTczMQorT21za2HvYSBvYmxhc3Q7T2tvbmVzaG5pa292c2tpeSA6IDEgOiAxOTY5NgorTm92b3NpYmlyc2th72Egb2JsYXN0O0lza2l0aW1za2l5IDogMSA6IDY5OTM0CitOb3Zvc2liaXJza2HvYSBvYmxhc3Q7T2IgOiAxIDogMjQ5OTEKK0tlbWVyb3Zza2HvYSBvYmxhc3Q7TGVuaW5zay1rdXpuZXRza2l5IDogMSA6IDI5NDEyCitPbXNrYe9hIG9ibGFzdDtJc2lsJ2t1bCcgOiAxIDogMjYyOTUKK05vdm9zaWJpcnNrYe9hIG9ibGFzdDtLdXBpbnNraXkgOiAxIDogNDA1OTgKK05vdm9zaWJpcnNrYe9hIG9ibGFzdDtEb3ZvbGVuc2tpeSA6IDEgOiAyMjYyMAorS2VtZXJvdnNrYe9hIG9ibGFzdDtNZXpoZHVyZWNoZW5za2l5IDogMSA6IDMwMjkKK09tc2th72Egb2JsYXN0O1RhdnJpY2hlc2tpeSA6IDEgOiA0MjE5MgorTm92b3NpYmlyc2th72Egb2JsYXN0O01hc2x5YW5pbnNraXkgOiAxIDogMjY4NjcKK05vdm9zaWJpcnNrYe9hIG9ibGFzdDtCZXJkc2sgOiAxIDogODA4OTkKK09tc2th72Egb2JsYXN0O0F6b3Zza3kgbmVtZXRza3kgbmF0aW9uYWwgOiAxIDogMTkwOTYKK05vdm9zaWJpcnNrYe9hIG9ibGFzdDtPcmR5bnNraXkgOiAxIDogMzg0MjQKK09tc2th72Egb2JsYXN0O1NoZXJiYWt1bHNraXkgOiAxIDogMjcxOTUKK05vdm9zaWJpcnNrYe9hIG9ibGFzdDtJc2tpdGltIDogMSA6IDY4MTU3CitPbXNrYe9hIG9ibGFzdDtDaGVybGFrc2tpeSA6IDEgOiAzNzg5MworT21za2HvYSBvYmxhc3Q7UG9sdGF2c2tpeSA6IDEgOiAyNTA5NQorS2VtZXJvdnNrYe9hIG9ibGFzdDtCZWxvdnNraXkgOiAxIDogMzM1MTYKK0tlbWVyb3Zza2HvYSBvYmxhc3Q7R3VyeWV2c2tpeSA6IDEgOiAxMzE5MQorS2VtZXJvdnNrYe9hIG9ibGFzdDtMZW5pbnNrLUt1em5ldHNraXkgOiAxIDogMTY3ODczCitOb3Zvc2liaXJza2HvYSBvYmxhc3Q7S29jaGtvdnNraXkgOiAxIDogMTY4OTEKK09tc2th72Egb2JsYXN0O09kZXNza2l5IDogMSA6IDE5MTk2CitOb3Zvc2liaXJza2HvYSBvYmxhc3Q7Q2hlcmVwYW5vdnNraXkgOiAxIDogNTMwNDQKK05vdm9zaWJpcnNrYe9hIG9ibGFzdDtTdXp1bnNraXkgOiAxIDogMzYyNTEKK09tc2th72Egb2JsYXN0O1BhdmxvZ3JhZHNraXkgOiAxIDogMjMzOTYKK0FsdGHvc2tpIGtyYe8gculzaWR1ZWw7WmFsZXNvdnNraXkgOiAxIDogMjA4MzkKK0tlbWVyb3Zza2HvYSBvYmxhc3Q7QmVsb3ZvIDogMSA6IDE3MTU4NworTm92b3NpYmlyc2th72Egb2JsYXN0O0tyYXNub3plcnNraXkgOiAxIDogNDAzMDEKK0tlbWVyb3Zza2HvYSBvYmxhc3Q7UHJva29weWV2c2tpeSA6IDEgOiAzNTE3NworT21za2HvYSBvYmxhc3Q7Tm92b3ZhcnNoYXZza2l5IDogMSA6IDI5NDk1CitOb3Zvc2liaXJza2HvYSBvYmxhc3Q7QmFnYW5za2l5IDogMSA6IDE5MjYyCitBbHRh73NraSBrcmHvIHLpc2lkdWVsO0tydXRpa2hpbmtzaXkgOiAxIDogMTQ3MjcKK05vdm9zaWJpcnNrYe9hIG9ibGFzdDtLYXJhc3Vrc2tpeSA6IDEgOiA1MTE2NworS2VtZXJvdnNrYe9hIG9ibGFzdDtHdXJ5ZXZzayA6IDEgOiAzOTM3OQorQWx0Ye9za2kga3Jh7yBy6XNpZHVlbDtaYXJpbnNraXkgOiAxIDogMjQ0NDUKK0tlbWVyb3Zza2HvYSBvYmxhc3Q7Tm92b2t1em5ldHNraXkgOiAxIDogNDkzNDYKK0FsdGHvc2tpIGtyYe8gculzaWR1ZWw7VGFsbWVuc2tpeSA6IDEgOiA1MDc5NAorQWx0Ye9za2kga3Jh7yBy6XNpZHVlbDtQYW5rcnVzaHlraGluc2tpeSA6IDEgOiAxODMzNAorQWx0Ye9za2kga3Jh7yBy6XNpZHVlbDtLYW1lbnNraXkgOiAxIDogMTc4MzMKK09tc2th72Egb2JsYXN0O1J1c3Nrby1Qb2x5YW5za2l5IDogMSA6IDI4Njk1CitLZW1lcm92c2th72Egb2JsYXN0O0tpc2lsZXZzayA6IDEgOiAxMjg0OTUKK0FsdGHvc2tpIGtyYe8gculzaWR1ZWw7UGVydm9tYXlza2l5IDogMSA6IDUxODk3CitLZW1lcm92c2th72Egb2JsYXN0O1Byb2tvcHlldnNrIDogMSA6IDI2MDYwNQorQWx0Ye9za2kga3Jh7yBy6XNpZHVlbDtLeXRtYW5vdnNraXkgOiAxIDogMTkzMzYKK0FsdGHvc2tpIGtyYe8gculzaWR1ZWw7S2hhYmFyc2tpeSA6IDEgOiAyMTM0MAorQWx0Ye9za2kga3Jh7yBy6XNpZHVlbDtLYW1lbictbmEtT2JpIDogMSA6IDQ0NjgzCitLZW1lcm92c2th72Egb2JsYXN0O01lenNoZHVyZWNoZW5zayA6IDEgOiAxMDU0MzQKK0FsdGHvc2tpIGtyYe8gculzaWR1ZWw7U2hlbGFib2xpa2hpbnNraXkgOiAxIDogMTYzMzAKK0tlbWVyb3Zza2HvYSBvYmxhc3Q7Tm92b2t1em5ldHNrIDogMSA6IDYwMDE2MworQWx0Ye9za2kga3Jh7yBy6XNpZHVlbDtUb2d1bHNraXkgOiAxIDogMTIxMjMKK0tlbWVyb3Zza2HvYSBvYmxhc3Q7TXlza2kgOiAxIDogNDc2ODUKK1JVLVVOSy0yODkxIDogMSA6IDUyODk4CitBbHRh73NraSBrcmHvIHLpc2lkdWVsO0J1cmxpbnNraXkgOiAxIDogMTY0MzEKK0tlbWVyb3Zza2HvYSBvYmxhc3Q7T3Npbm5pa2kgOiAxIDogMTA1MTQxCitBbHRh73NraSBrcmHvIHLpc2lkdWVsO1BhdmxvdnNraXkgOiAxIDogNDA4NzYKK0FsdGHvc2tpIGtyYe8gculzaWR1ZWw7QmF5ZXZza2l5IDogMSA6IDE1MzI5CitBbHRh73NraSBrcmHvIHLpc2lkdWVsO0tvc2lraGluc2tpeSA6IDEgOiAyMjU0MgorQWx0Ye9za2kga3Jh7yBy6XNpZHVlbDtUeXVtZW50c2V2c2tpeSA6IDEgOiAxODgzNQorS2VtZXJvdnNrYe9hIG9ibGFzdDtUYXNodGFnb2xza2l5IDogMSA6IDM3NDI1CitBbHRh73NraSBrcmHvIHLpc2lkdWVsO1llbHRzb3Zza2l5IDogMSA6IDk2MTgKK0FsdGHvc2tpIGtyYe8gculzaWR1ZWw7QmFybmF1bCA6IDEgOiA2NTkzMjYKK0FsdGHvc2tpIGtyYe8gculzaWR1ZWw7U3V5ZXRza2l5IDogMSA6IDc0MTQKK0FsdGHvc2tpIGtyYe8gculzaWR1ZWw7Tm92b2FsdGF5c2sgOiAxIDogNjkyMjkKK1JVLVVOSy0yODkyIDogMSA6IDIwNTM4CitBbHRh73NraSBrcmHvIHLpc2lkdWVsO1JlYnJpa2hpbnNraXkgOiAxIDogMjk4NTYKK0FsdGHvc2tpIGtyYe8gculzaWR1ZWw7VHNlbGlubml5IDogMSA6IDIxOTQxCitBbHRh73NraSBrcmHvIHLpc2lkdWVsO0thbG1hbnNraXkgOiAxIDogMTU4MjkKK0FsdGHvc2tpIGtyYe8gculzaWR1ZWw7U2xhdmdvcm9kc2tpeSA6IDEgOiAxMzIyNQorQWx0Ye9za2kga3Jh7yBy6XNpZHVlbDtUcm9pdHNraXkgOiAxIDogMzM4NjMKK0FsdGHvc2tpIGtyYe8gculzaWR1ZWw7QmxhZ292ZXNjaGVuc2tpeSA6IDEgOiAzNjk2OQorQWx0Ye9za2kga3Jh7yBy6XNpZHVlbDtaYXZ5YWxvdnNraXkgOiAxIDogMjI1NDIKK0FsdGHvc2tpIGtyYe8gculzaWR1ZWw7U2xhdmdvcm9kIDogMSA6IDU5NDExCitBbHRh73NraSBrcmHvIHLpc2lkdWVsO1NvbHRvbnNraXkgOiAxIDogMTI1MjMKK0FsdGHvc2tpIGtyYe8gculzaWR1ZWw7VG9wY2hpa2hpbnNraXkgOiAxIDogMjg0NTMKK0FsdGHvc2tpIGtyYe8gculzaWR1ZWw7VGFidW5za2l5IDogMSA6IDEzMzI1CitBbHRh73NraSBrcmHvIHLpc2lkdWVsO01hbW9udG92c2tpeSA6IDEgOiAyNzQ1MQorQWx0Ye9za2kga3Jh7yBy6XNpZHVlbDtab25hbG55aSA6IDEgOiAyMDUzOAorQWx0Ye9za2kga3Jh7yBy6XNpZHVlbDtCaXlza2l5IDogMSA6IDM0NTY0CitBbHRh73NraSBrcmHvIHLpc2lkdWVsO1JvZGluc2tpeSA6IDEgOiAyNTk0OAorQWx0Ye9za2kga3Jh7yBy6XNpZHVlbDtSb21hbm92c2tpeSA6IDEgOiAxNjUzMQorS2VtZXJvdnNrYe9hIG9ibGFzdDtUYXNodGFnb2wgOiAxIDogMjU0MDYKK0FsdGHvc2tpIGtyYe8gculzaWR1ZWw7S3VsdW5kaW5za2l5IDogMSA6IDI3ODUyCitBbHRh73NraSBrcmHvIHLpc2lkdWVsO0FsZXlza2l5IDogMSA6IDIzMTQzCitSZXNwb3VibGlrYSBBbHRh7ztUdXJvY2hha3NraXkgOiAxIDogMTQ1MzIKK0FsdGHvc2tpIGtyYe8gculzaWR1ZWw7VXN0LVByaXN0YW5za2l5IDogMSA6IDE5NDM2CitBbHRh73NraSBrcmHvIHLpc2lkdWVsO1NoaXB1bm92c2tpeSA6IDEgOiAzODg3MgorQWx0Ye9za2kga3Jh7yBy6XNpZHVlbDtLcmFzbm9nb3Jza2l5IDogMSA6IDIwNjM4CitBbHRh73NraSBrcmHvIHLpc2lkdWVsO0J5c3Ryb2lzdG9rc2tpeSA6IDEgOiAxNDMyNworQWx0Ye9za2kga3Jh7yBy6XNpZHVlbDtLbHl1Y2hldnNraXkgOiAxIDogMjAyMzgKK0FsdGHvc2tpIGtyYe8gculzaWR1ZWw7Qml5c2sgOiAxIDogMjQwNzQ4CitBbHRh73NraSBrcmHvIHLpc2lkdWVsO0FsZXlzayA6IDEgOiAzMDQ1NworQWx0Ye9za2kga3Jh7yBy6XNpZHVlbDtTbW9sZW5za2l5IDogMSA6IDI2NzUwCitBbHRh73NraSBrcmHvIHLpc2lkdWVsO1NvdmV0c2tpeSA6IDEgOiAxODUzNAorQWx0Ye9za2kga3Jh7yBy6XNpZHVlbDtOb3ZpY2hpa2hpbnNraXkgOiAxIDogMTI1MjMKK0FsdGHvc2tpIGtyYe8gculzaWR1ZWw7UGV0cm9wYXZsb3Zza2l5IDogMSA6IDE0NzI3CitBbHRh73NraSBrcmHvIHLpc2lkdWVsO1ZvbGNoaWtoaW5za2l5IDogMSA6IDIyOTQzCitBbHRh73NraSBrcmHvIHLpc2lkdWVsO1VzdC1LYWxtYW5za2l5IDogMSA6IDIwODM5CitBbHRh73NraSBrcmHvIHLpc2lkdWVsO1Bvc3BlbGlraGluc2tpeSA6IDEgOiAzMDE1NgorQWx0Ye9za2kga3Jh7yBy6XNpZHVlbDtNaWtoYXlsb3Zza2l5IDogMSA6IDI0ODQ2CitBbHRh73NraSBrcmHvIHLpc2lkdWVsO0FsdGF5c2tpeSA6IDEgOiAyNzA1MAorUmVzcG91Ymxpa2EgQWx0Ye87Q2hveXNraXkgOiAxIDogOTc1NQorQWx0Ye9za2kga3Jh7yBy6XNpZHVlbDtZZWdvcnlldnNraXkgOiAxIDogMTYxMzAKK1Jlc3BvdWJsaWthIEFsdGHvO01heW1pbnNraXkgOiAxIDogMjQyODcKK0FsdGHvc2tpIGtyYe8gculzaWR1ZWw7QmVsb2t1cmlraGEgOiAxIDogMTMyMjUKK0FsdGHvc2tpIGtyYe8gculzaWR1ZWw7U29sb25lc2hlbnNraXkgOiAxIDogMTQ3MjcKK0FsdGHvc2tpIGtyYe8gculzaWR1ZWw7UnVidHNvdnNraXkgOiAxIDogMjcxNTEKK1Jlc3BvdWJsaWthIEFsdGHvO0dvcm5vLUFsdGF5c2sgOiAxIDogNDczNTUKK0FsdGHvc2tpIGtyYe8gculzaWR1ZWw7S3Jhc25vc2hla292c2tpeSA6IDEgOiAyNDg0NgorQWx0Ye9za2kga3Jh7yBy6XNpZHVlbDtDaGFyeXNoc2tpeSA6IDEgOiAxNjMzMAorQWx0Ye9za2kga3Jh7yBy6XNpZHVlbDtVZ2xvdnNraXkgOiAxIDogMTY1MzEKK0FsdGHvc2tpIGtyYe8gculzaWR1ZWw7S3VyeWluc2tpeSA6IDEgOiAxNTMyOQorUmVzcG91Ymxpa2EgQWx0Ye87U2hlYmFsaW5za2l5IDogMSA6IDE0NDMwCitSZXNwb3VibGlrYSBBbHRh7ztDaGVtYWxza3kgOiAxIDogOTU1MgorQWx0Ye9za2kga3Jh7yBy6XNpZHVlbDtabWVpbm9nb3Jza2l5IDogMSA6IDEzODI2CitSZXNwb3VibGlrYSBBbHRh7ztVbGFnYW5za2l5IDogMSA6IDEyMTk0CitBbHRh73NraSBrcmHvIHLpc2lkdWVsO1J1YnR6b3ZzayA6IDEgOiAxNzE5MjAKK1Jlc3BvdWJsaWthIEFsdGHvO1VzdC1LYW5za2l5IDogMSA6IDE3Mzc3CitBbHRh73NraSBrcmHvIHLpc2lkdWVsO0xva3RldnNraXkgOiAxIDogMzU0NjYKK1Jlc3BvdWJsaWthIEFsdGHvO09uZ3VkYXlza2l5IDogMSA6IDE3Mjc1CitBbHRh73NraSBrcmHvIHLpc2lkdWVsO1ptZWlub2dvcnNrIDogMSA6IDEyODI0CitBbHRh73NraSBrcmHvIHLpc2lkdWVsO1RyZXRpeWFrb3Zza2l5IDogMSA6IDE2NTMxCitSZXNwb3VibGlrYSBBbHRh7ztVc3QtS29rc2luc2tpeSA6IDEgOiAxODU5NgorUmVzcG91Ymxpa2EgQWx0Ye87S29zaC1BZ2FjaHNraXkgOiAxIDogMTQ2MzMKK1JVLVVOSy0yODkzIDogMSA6IDEyNjQ4CitSVS1VTkstMjg5NCA6IDEgOiAxMjY0OAorUlUtVU5LLTI4OTUgOiAxIDogNTAxNworUlUtVU5LLTI4OTYgOiAxIDogMjQ0OTUKK1JVLVVOSy0yODk3IDogMSA6IDUyODk4CitSVS1VTkstMjg5OCA6IDEgOiAyMDUzOAorVGF0YXJzdGFuO0JhbHRhc2luc2tpeSA6IDEgOiAzMDM4MQorVGF0YXJzdGFuO0Fncnl6c2tpeSA6IDEgOiAzODgzMQorVGF0YXJzdGFuO0Fyc2tpeSA6IDEgOiA0ODQ4OAorVGF0YXJzdGFuO1Z5c29rb2dvcnNraXkgOiAxIDogNTE4MDgKK1RhdGFyc3RhbjtBdG5pbnNraXkgOiAxIDogMTQ2ODcKK1RhdGFyc3RhbjtLdWttb3Jza2l5IDogMSA6IDUyMTEwCitUYXRhcnN0YW47U2FiaW5za2l5IDogMSA6IDMxOTkwCitUYXRhcnN0YW47TWFtYWR5c2hza2l5IDogMSA6IDUwOTAzCitUYXRhcnN0YW47WmVsZW5vZG9sc2tpeSA6IDEgOiA1OTQ1NAorVGF0YXJzdGFuO01lbmRlbGV5ZXZza2l5IDogMSA6IDI5NDc1CitUYXRhcnN0YW47UGVzdHJlY2hpbnNraXkgOiAxIDogMjg1NzAKK1RhdGFyc3RhbjtZZWxhYnV6aHNraXkgOiAxIDogMTA0NjIKK1RhdGFyc3RhbjtLYXphbiA6IDEgOiAxMDk3MzI3CitUYXRhcnN0YW47QWt0YW55c2hza2l5IDogMSA6IDMyNTk0CitUYXRhcnN0YW47VHV5bGFjaGluc2tpeSA6IDEgOiAxMzQ4MAorVGF0YXJzdGFuO1R1a2F5ZXZza2l5IDogMSA6IDI3MTYyCitUYXRhcnN0YW47TWVuemVsaW5za2l5IDogMSA6IDMwNDgxCitUYXRhcnN0YW47WmVsZW5vZG9sJ3NrIDogMSA6IDEwMTQwMworVGF0YXJzdGFuO1J5Ym5vLVNsb2JvZHNraXkgOiAxIDogMzA5ODQKK1RhdGFyc3RhbjtFbGFidWdhIDogMSA6IDY0MjgyCitUYXRhcnN0YW47VmVya2huZXVzbG9uc2tpeSA6IDEgOiAxOTUxNgorVGF0YXJzdGFuO0xhaXNoZXZza2l5IDogMSA6IDM1OTE0CitUYXRhcnN0YW47TmFiZXJlemhuaXllIENoZWxueSA6IDEgOiA1MzA5NTgKK1RhdGFyc3RhbjtOaXpobmVrYW1za2l5IDogMSA6IDM5MTMzCitUYXRhcnN0YW47Tml6c2huZWthbXNrIDogMSA6IDIwNTcyNAorUlUtVU5LLTI4OTkgOiAxIDogMTU4OTUKK1JVLVVOSy0yOTAwIDogMSA6IDIyNjM1CitUYXRhcnN0YW47U2FybWFub3Zza2l5IDogMSA6IDM0ODA3CitUYXRhcnN0YW47WmFpbnNraXkgOiAxIDogMTYwOTYKK1RhdGFyc3RhbjtLYW1za28tVXN0eWluc2tpeSA6IDEgOiAxOTAxMworVGF0YXJzdGFuO011c2x5dW1vdnNraXkgOiAxIDogMjM4NDIKK1RhdGFyc3RhbjtDaGlzdG9wb2xza2l5IDogMSA6IDIxOTMwCitUYXRhcnN0YW47Q2hpc3RvcG9sJyA6IDEgOiA2NzQwMQorVGF0YXJzdGFuO0FsZWtzZXlldnNraXkgOiAxIDogMjU0NTEKK1RhdGFyc3RhbjtOb3Zvc2hlc2htaW5za2l5IDogMSA6IDE1MjkxCitUYXRhcnN0YW47WmFpbnNrIDogMSA6IDQwNTQxCitUYXRhcnN0YW47QnVpbnNraXkgOiAxIDogNDYwNzQKK1RhdGFyc3RhbjtBbG1ldHlldnNraXkgOiAxIDogMzU1MTEKK1RhdGFyc3RhbjtLdXlieXNoZXZza2l5IDogMSA6IDIzMzM5CitUYXRhcnN0YW47VGV0eXVzaHNraXkgOiAxIDogMjgzNjkKK1RhdGFyc3RhbjtBem5ha2F5ZXZza2l5IDogMSA6IDI5NDc1CitUYXRhcnN0YW47QWtzdWJheWV2c2tpeSA6IDEgOiAzMzYwMAorVGF0YXJzdGFuO0Fsa2V5ZXZza2l5IDogMSA6IDIzNjQxCitUYXRhcnN0YW47Q2hlcmVtc2hhbnNraXkgOiAxIDogMjIxMzIKK1RhdGFyc3RhbjtBbG1ldHlldnNrIDogMSA6IDE0NTM2NQorVGF0YXJzdGFuO09rdHlhYnJza2l5IDogMSA6IDU2MzM1CitUYXRhcnN0YW47QXpuYWthZXZvIDogMSA6IDM1MTA5CitUYXRhcnN0YW47RHJvemhhbm92c2tpeSA6IDEgOiAyODY3MQorT3VsaWFub3Zza2HvYSBvYmxhc3Q7U3Rhcm9tYXluc2tpeSA6IDEgOiAyMTU2MworVGF0YXJzdGFuO0xlbmlub2dvcnNraXkgOiAxIDogMjM0MzkKK1RhdGFyc3RhbjtZdXRhemluc2tpeSA6IDEgOiAyMzc0MQorVGF0YXJzdGFuO0J1Z3VsbWluc2tpeSA6IDEgOiAyMTEyNgorT3VsaWFub3Zza2HvYSBvYmxhc3Q7U3Vyc2tpeSA6IDEgOiAyNzg2OQorT3VsaWFub3Zza2HvYSBvYmxhc3Q7VHN5bG5pbnNraXkgOiAxIDogMzE3MzQKK091bGlhbm92c2th72Egb2JsYXN0O1VseWFub3Zza2l5IDogMSA6IDU3OTc2CitUYXRhcnN0YW47TGVuaW5pZ29yc2sgOiAxIDogNjUyODgKK1NhbWFyc2th72EgKEtvde9ieWNoZXZza2E7Q2hlbG5vLVZlcnNoaW5za2l5IDogMSA6IDIxNzA5CitTYW1hcnNrYe9hIChLb3XvYnljaGV2c2thO1NoZW50YWxpbnNraXkgOiAxIDogMjAzMDkKK091bGlhbm92c2th72Egb2JsYXN0O01lbGVrZXNza2l5IDogMSA6IDQyMjExCitPdWxpYW5vdnNrYe9hIG9ibGFzdDtNYXluc2tpeSA6IDEgOiAzNDk4OQorVGF0YXJzdGFuO0J1Z3VsJ21hIDogMSA6IDkyNzUyCitTYW1hcnNrYe9hIChLb3XvYnljaGV2c2thO0tseWF2bGluc2tpeSA6IDEgOiAxODQwOAorT3VsaWFub3Zza2HvYSBvYmxhc3Q7Tm92b21hbHlrbGluc2tpeSA6IDEgOiAxOTczMgorU2FtYXJza2HvYSAoS29172J5Y2hldnNrYTtLb3Noa2luc2tpeSA6IDEgOiAyNTAxMQorT3VsaWFub3Zza2HvYSBvYmxhc3Q7Q2hlcmRha2xpbnNraXkgOiAxIDogNDMzMzAKK1RhdGFyc3RhbjtCYXZsaW5za2l5IDogMSA6IDM2MzE2CitPdWxpYW5vdnNrYe9hIG9ibGFzdDtLYXJzdW5za2l5IDogMSA6IDMzNzY5CitPdWxpYW5vdnNrYe9hIG9ibGFzdDtVbHlhbm92c2sgOiAxIDogNjkwOTMzCitTYW1hcnNrYe9hIChLb3XvYnljaGV2c2thO1NlcmdpeWV2c2tpeSA6IDEgOiA0ODMyMAorT3VsaWFub3Zza2HvYSBvYmxhc3Q7SW56ZW5za2l5IDogMSA6IDQ2Mjc5CitPdWxpYW5vdnNrYe9hIG9ibGFzdDtEaW1pdHJvdmdyYWQgOiAxIDogMTMyNjMzCitTYW1hcnNrYe9hIChLb3XvYnljaGV2c2thO0thbXlzaGxlbnNreSA6IDEgOiAxMTYwNQorU2FtYXJza2HvYSAoS29172J5Y2hldnNrYTtJc2FrbGluc2tpeSA6IDEgOiAxNTgwNworT3VsaWFub3Zza2HvYSBvYmxhc3Q7VmVzaGtheW1za2l5IDogMSA6IDI3MTU3CitPdWxpYW5vdnNrYe9hIG9ibGFzdDtTZW5naWxleWV2c2tpeSA6IDEgOiAzMDYxNQorT3VsaWFub3Zza2HvYSBvYmxhc3Q7VGVyZW5ndWxza2l5IDogMSA6IDIyOTg3CitTYW1hcnNrYe9hIChLb3XvYnljaGV2c2thO0Vsa2hvdnNreSA6IDEgOiA5NzA0CitPdWxpYW5vdnNrYe9hIG9ibGFzdDtLdXpvdmF0b3Zza2l5IDogMSA6IDMwODE5CitQZW56ZW5za2HvYSBvYmxhc3Q7Tmlrb2xza2l5IDogMSA6IDQ3MzE3CitTYW1hcnNrYe9hIChLb3XvYnljaGV2c2thO1Bva2h2aXN0bmV2byA6IDEgOiAzMjMxNAorUGVuemVuc2th72Egb2JsYXN0O0JlZG5vZGVteWFub3Zza2l5IDogMSA6IDE1OTc2CitQZW56ZW5za2HvYSBvYmxhc3Q7TmFyb3ZjaGF0c2tpeSA6IDEgOiAxNTU2OQorUGVuemVuc2th72Egb2JsYXN0O0lzc2luc2tpeSA6IDEgOiAxNTc3MgorUGVuemVuc2th72Egb2JsYXN0O0x1bmlubyA6IDEgOiAyNjI1MworU2FtYXJza2HvYSAoS29172J5Y2hldnNrYTtTdGF2cm9wb2xza2l5IDogMSA6IDM5OTE3CitPdWxpYW5vdnNrYe9hIG9ibGFzdDtCYXphcm5vc3l6Z2Fuc2tpeSA6IDEgOiAxMzczMQorU2FtYXJza2HvYSAoS29172J5Y2hldnNrYTtLcmFzbm95YXJza2l5IDogMSA6IDUxNDIyCitPdWxpYW5vdnNrYe9hIG9ibGFzdDtCYXJ5c2hza2l5IDogMSA6IDM2NTE1CitQZW56ZW5za2HvYSBvYmxhc3Q7WmVtZXRjaGluc2tpeSA6IDEgOiAzODE1OQorUGVuemVuc2th72Egb2JsYXN0O1ZhZGluc2tpeSA6IDEgOiAxNDI0NgorUGVuemVuc2th72Egb2JsYXN0O05pemhuZWxvbW92c2tpeSA6IDEgOiAyNTc0NQorU2FtYXJza2HvYSAoS29172J5Y2hldnNrYTtTaGlnb25za2l5IDogMSA6IDI1NDExCitQZW56ZW5za2HvYSBvYmxhc3Q7TW9rc2hhbnNraXkgOiAxIDogMzUwMDUKK1NhbWFyc2th72EgKEtvde9ieWNoZXZza2E7S2luZWwtQ2hlcmthc3NraXkgOiAxIDogNTAzMjEKK091bGlhbm92c2th72Egb2JsYXN0O0JhcnlzaCA6IDEgOiAyMjA3MgorU2FtYXJza2HvYSAoS29172J5Y2hldnNrYTtWb2x6aHNraXkgOiAxIDogNjI4MjcKK1BlbnplbnNrYe9hIG9ibGFzdDtTb3Nub3ZvYm9yc2tpeSA6IDEgOiAyNDUyNAorUlUtVU5LLTI5MDEgOiAxIDogMjc2NzgKK1BlbnplbnNrYe9hIG9ibGFzdDtCZXNzb25vdnNraXkgOiAxIDogNDU3OTEKK1BlbnplbnNrYe9hIG9ibGFzdDtHb3JvZGlzY2hlbnNraXkgOiAxIDogNjA0NDQKK1NhbWFyc2th72EgKEtvde9ieWNoZXZza2E7VG9seWF0dGkgOiAxIDogNjg4NjkxCitQZW56ZW5za2HvYSBvYmxhc3Q7QmFzaG1ha292c2tpeSA6IDEgOiAyOTAwMQorUGVuemVuc2th72Egb2JsYXN0O1BhY2hlbG1za2l5IDogMSA6IDIyNDg4CitTYW1hcnNrYe9hIChLb3XvYnljaGV2c2thO1N5enJhbnNraXkgOiAxIDogMjQ2MTAKK1NhbWFyc2th72EgKEtvde9ieWNoZXZza2E7S2luZWxza2l5IDogMSA6IDMxMTEzCitTYW1hcnNrYe9hIChLb3XvYnljaGV2c2thO1poaWd1bHlvdnNraXkgOiAxIDogNTgwMjQKK1BlbnplbnNrYe9hIG9ibGFzdDtLdXpuZXRza2l5IDogMSA6IDQzMDQzCitQZW56ZW5za2HvYSBvYmxhc3Q7S2FtZW5za2l5IDogMSA6IDI3MDY3CitTYW1hcnNrYe9hIChLb3XvYnljaGV2c2thO090cmFkbnlpIDogMSA6IDUxMTIyCitPdWxpYW5vdnNrYe9hIG9ibGFzdDtOb3Zvc3Bhc3NraXkgOiAxIDogMjUwMjEKK091bGlhbm92c2th72Egb2JsYXN0O05pa29sYXlldnNraXkgOiAxIDogMzUxOTMKK1NhbWFyc2th72EgKEtvde9ieWNoZXZza2E7Qm9yc2tpeSA6IDEgOiAyNTMxMQorU2FtYXJza2HvYSAoS29172J5Y2hldnNrYTtTYW1hcmEgOiAxIDogMTI2NzAzNQorUGVuemVuc2th72Egb2JsYXN0O1BlbnphIDogMSA6IDU1ODAzOAorUGVuemVuc2th72Egb2JsYXN0O1BlbnplbnNraXkgOiAxIDogNDMxNDUKK1NhbWFyc2th72EgKEtvde9ieWNoZXZza2E7Qm9nYXRvdnNraXkgOiAxIDogMTYwMDcKK1NhbWFyc2th72EgKEtvde9ieWNoZXZza2E7S2luZWwgOiAxIDogNDk1MjEKK1BlbnplbnNrYe9hIG9ibGFzdDtCZWxpbnNraXkgOiAxIDogNDAwOTIKK1BlbnplbnNrYe9hIG9ibGFzdDtLYW1lbmthIDogMSA6IDQzMzQ5CitTYW1hcnNrYe9hIChLb3XvYnljaGV2c2thO09rdHlhYnJzayA6IDEgOiAzMTMxMworU2FtYXJza2HvYSAoS29172J5Y2hldnNrYTtQcml2b2x6aHNraXkgOiAxIDogMjM5MTAKK1NhbWFyc2th72EgKEtvde9ieWNoZXZza2E7QmV6ZW5jaHVrc2tpeSA6IDEgOiA0MzgxOAorU2FtYXJza2HvYSAoS29172J5Y2hldnNrYTtTeXpyYW4gOiAxIDogMTg0OTc4CitQZW56ZW5za2HvYSBvYmxhc3Q7S3V6bmV0c2sgOiAxIDogMTAzODk0CitTYW1hcnNrYe9hIChLb3XvYnljaGV2c2thO05vdm9rdXlieXNoZXZzayA6IDEgOiAxMTUxNDkKK1BlbnplbnNrYe9hIG9ibGFzdDtTaGVteXNoZXlza2l5IDogMSA6IDIyODk1CitPdWxpYW5vdnNrYe9hIG9ibGFzdDtSYWRpc2NoZXZza2l5IDogMSA6IDE3MzkzCitQZW56ZW5za2HvYSBvYmxhc3Q7S2FtZXNoa2lyc2tpeSA6IDEgOiAxNjg5MgorU2FtYXJza2HvYSAoS29172J5Y2hldnNrYTtOZWZ0ZWdvcnNraXkgOiAxIDogMzI5MTQKK1NhbWFyc2th72EgKEtvde9ieWNoZXZza2E7Q2hhcGF5ZXZzayA6IDEgOiA5NDc0MAorUGVuemVuc2th72Egb2JsYXN0O05ldmVya2luc2tpeSA6IDEgOiAxOTk0NAorT3VsaWFub3Zza2HvYSBvYmxhc3Q7U3Rhcm9rdWxhdGtpbnNraXkgOiAxIDogMjAyNDEKK1NhbWFyc2th72EgKEtvde9ieWNoZXZza2E7S3Jhc25vYXJtZXlza2l5IDogMSA6IDE5MTA4CitQZW56ZW5za2HvYSBvYmxhc3Q7S29seXNobGV5c2tpeSA6IDEgOiAzMDkzNAorUGVuemVuc2th72Egb2JsYXN0O0tvbmRvbHNraXkgOiAxIDogMTI2MTgKK1NhbWFyc2th72EgKEtvde9ieWNoZXZza2E7QWxla3NleWV2c2tpeSA6IDEgOiAxNDQwNgorU2FtYXJza2HvYSAoS29172J5Y2hldnNrYTtLaHZvcm9zdHlhbnNraXkgOiAxIDogMTU2MDcKK091bGlhbm92c2th72Egb2JsYXN0O1BhdmxvdnNraXkgOiAxIDogMTc4MDAKK1BlbnplbnNrYe9hIG9ibGFzdDtTZXJkb2Jza2l5IDogMSA6IDIxOTgwCitQZW56ZW5za2HvYSBvYmxhc3Q7VGFtYWxpbnNraXkgOiAxIDogMjE3NzYKK1BlbnplbnNrYe9hIG9ibGFzdDtMb3BhdGlubyA6IDEgOiAxODMxNgorU2FyYXRvdnNrYe9hIG9ibGFzdDtLaHZhbHluc2tpeSA6IDEgOiAxNTQ3NAorUGVuemVuc2th72Egb2JsYXN0O0Jla292c2tpeSA6IDEgOiAyMTk4MAorU2FyYXRvdnNrYe9hIG9ibGFzdDtEdWtob3ZuaXRza2l5IDogMSA6IDE2OTgxCitTYW1hcnNrYe9hIChLb3XvYnljaGV2c2thO0JvbHNoZWdsdXNoaXRza2l5IDogMSA6IDIxOTA5CitTYXJhdG92c2th72Egb2JsYXN0O0JhbHRheXNraXkgOiAxIDogMTI2NjAKK1NhbWFyc2th72EgKEtvde9ieWNoZXZza2E7UGVzdHJhdnNraXkgOiAxIDogMTg5MDgKK1BlbnplbnNrYe9hIG9ibGFzdDtNYWxvc2VyZG9iaW5za2l5IDogMSA6IDEyNzIwCitTYXJhdG92c2th72Egb2JsYXN0O0JhemFybm8tS2FyYWJ1bGFrc2tpeSA6IDEgOiAzNjc3NgorU2FyYXRvdnNrYe9hIG9ibGFzdDtWb2xza2l5IDogMSA6IDMxMDQ4CitTYXJhdG92c2th72Egb2JsYXN0O1lla2F0ZXJpbm92c2tpeSA6IDEgOiAyMzgxNAorU2FyYXRvdnNrYe9hIG9ibGFzdDtJdmFudGV5ZXZza2l5IDogMSA6IDE2ODgxCitTYXJhdG92c2th72Egb2JsYXN0O0todmFseW5zayA6IDEgOiAxNDY3MAorU2FyYXRvdnNrYe9hIG9ibGFzdDtQZXRyb3Zza2l5IDogMSA6IDE2MTc3CitQZW56ZW5za2HvYSBvYmxhc3Q7U2VyZG9ic2sgOiAxIDogNDYwOTYKK1NhcmF0b3Zza2HvYSBvYmxhc3Q7UnRpc2NoZXZza2l5IDogMSA6IDIxNjAzCitTYXJhdG92c2th72Egb2JsYXN0O05vdm9idXJhc3NraXkgOiAxIDogMTc0ODMKK1NhcmF0b3Zza2HvYSBvYmxhc3Q7UHVnYWNoeW92c2tpeSA6IDEgOiAyNTUyMgorU2FtYXJza2HvYSAoS29172J5Y2hldnNrYTtCb2xzaGVjaGVybmlnb3Zza2l5IDogMSA6IDIyMTA5CitTYXJhdG92c2th72Egb2JsYXN0O1BldHJvdnNrIDogMSA6IDM1NDY5CitTYXJhdG92c2th72Egb2JsYXN0O1R1cmtvdnNraXkgOiAxIDogMTgxODcKK1NhcmF0b3Zza2HvYSBvYmxhc3Q7UnRpc2hjaGV2byA6IDEgOiA0MjgwNAorU2FyYXRvdnNrYe9hIG9ibGFzdDtBdGthcnNraXkgOiAxIDogMTc2ODQKK1NhcmF0b3Zza2HvYSBvYmxhc3Q7QmFsYWtvdnNraXkgOiAxIDogMjAwOTYKK1NhcmF0b3Zza2HvYSBvYmxhc3Q7UGVyZWx5dWJza2l5IDogMSA6IDE5MzkzCitTYXJhdG92c2th72Egb2JsYXN0O0Fya2FkYWtza2l5IDogMSA6IDMzODYyCitTYXJhdG92c2th72Egb2JsYXN0O1Zvc2tyZXNlbnNraXkgOiAxIDogMTI3NjEKK1NhcmF0b3Zza2HvYSBvYmxhc3Q7Vm9sc2sgOiAxIDogODE2OTAKK1NhcmF0b3Zza2HvYSBvYmxhc3Q7QmFsYWtvdm8gOiAxIDogMjA4Mjk0CitTYXJhdG92c2th72Egb2JsYXN0O1RhdGlzY2hldnNraXkgOiAxIDogMzczNzgKK1NhcmF0b3Zza2HvYSBvYmxhc3Q7UHVnYWNoZXYgOiAxIDogNDE4MDAKK1NhcmF0b3Zza2HvYSBvYmxhc3Q7Um9tYW5vdnNraXkgOiAxIDogMTkxOTIKK1NhcmF0b3Zza2HvYSBvYmxhc3Q7TWFya3NvdnNraXkgOiAxIDogMzM0NjAKK1NhcmF0b3Zza2HvYSBvYmxhc3Q7S3Jhc25vcGFydGl6YW5za2l5IDogMSA6IDE5NDkzCitTYXJhdG92c2th72Egb2JsYXN0O0F0a2Fyc2sgOiAxIDogMjc0MzEKK1NhcmF0b3Zza2HvYSBvYmxhc3Q7U2FyYXRvdnNraXkgOiAxIDogNDA2OTQKK1NhcmF0b3Zza2HvYSBvYmxhc3Q7QmFsYXNob3Zza2l5IDogMSA6IDM0NTY1CitTYXJhdG92c2th72Egb2JsYXN0O1llcnNob3Zza2l5IDogMSA6IDU0MDU4CitTYXJhdG92c2th72Egb2JsYXN0O0thbGluaW5za2l5IDogMSA6IDQwNDkzCitTYXJhdG92c2th72Egb2JsYXN0O01hcnggOiAxIDogMzI3NTYKK1NhcmF0b3Zza2HvYSBvYmxhc3Q7T3ppbnNraXkgOiAxIDogMjgwMzQKK1NhcmF0b3Zza2HvYSBvYmxhc3Q7THlzb2dvcnNraXkgOiAxIDogMjE4MDQKK1NhcmF0b3Zza2HvYSBvYmxhc3Q7U2FyYXRvdiA6IDEgOiA5MTMyNjAKK1NhcmF0b3Zza2HvYSBvYmxhc3Q7RW5nZWxza2l5IDogMSA6IDQzOTEwCitTYXJhdG92c2th72Egb2JsYXN0O0RlcmdhY2h5b3Zza2l5IDogMSA6IDMxMzUwCitTYXJhdG92c2th72Egb2JsYXN0O0JhbGFzaG92IDogMSA6IDk2MzYwCitTYXJhdG92c2th72Egb2JsYXN0O0ZlZG9yb3Zza2l5IDogMSA6IDIzMDEwCitTYXJhdG92c2th72Egb2JsYXN0O1NvdmV0c2tpeSA6IDEgOiAyOTc0MgorU2FyYXRvdnNrYe9hIG9ibGFzdDtFbmdlbHMgOiAxIDogMjE4NDQzCitTYXJhdG92c2th72Egb2JsYXN0O1NhbW95bG92c2tpeSA6IDEgOiAyNzEzMAorU2FyYXRvdnNrYe9hIG9ibGFzdDtLcmFzbm9hcm1leXNraXkgOiAxIDogMjI2MDgKK1ZvbGdvZ3JhZHNrYe9hIG9ibGFzdDtOb3Zvbmlrb2xheWV2c2tpeSA6IDEgOiAyODYxMworU2FyYXRvdnNrYe9hIG9ibGFzdDtLcmFzbm9rdXRza2l5IDogMSA6IDM4Njg1CitWb2xnb2dyYWRza2HvYSBvYmxhc3Q7WWVsYW5za2l5IDogMSA6IDM4MzIwCitWb2xnb2dyYWRza2HvYSBvYmxhc3Q7VXJ5dXBpbnNraXkgOiAxIDogMzM5NzIKK1NhcmF0b3Zza2HvYSBvYmxhc3Q7Um92ZW5za2l5IDogMSA6IDE5NTk0CitWb2xnb2dyYWRza2HvYSBvYmxhc3Q7Wmhpcm5vdnNraXkgOiAxIDogNDkzNDAKK1ZvbGdvZ3JhZHNrYe9hIG9ibGFzdDtLaWt2aWR6ZW5za2l5IDogMSA6IDE5ODE3CitWb2xnb2dyYWRza2HvYSBvYmxhc3Q7UnVkbnlhbnNraXkgOiAxIDogMjE3MzgKK1NhcmF0b3Zza2HvYSBvYmxhc3Q7S3Jhc25vYXJtZXlzayA6IDEgOiAyNTMyMQorU2FyYXRvdnNrYe9hIG9ibGFzdDtQaXRlcnNraXkgOiAxIDogMTk5OTUKK1NhcmF0b3Zza2HvYSBvYmxhc3Q7Tm92b3V6ZW5za2l5IDogMSA6IDM1MjY4CitWb2xnb2dyYWRza2HvYSBvYmxhc3Q7Tm92b2Fubmluc2tpeSA6IDEgOiA0NTA5NAorVm9sZ29ncmFkc2th72Egb2JsYXN0O1VydXBpbnNrIDogMSA6IDQ0NTg4CitWb2xnb2dyYWRza2HvYSBvYmxhc3Q7RGFuaWxvdnNraXkgOiAxIDogMjIxNDMKK1ZvbGdvZ3JhZHNrYe9hIG9ibGFzdDtTdGFyb3BvbHRhdnNraXkgOiAxIDogMjY1OTEKK1ZvbGdvZ3JhZHNrYe9hIG9ibGFzdDtLYW15c2hpbnNraXkgOiAxIDogNDAyNDEKK1ZvbGdvZ3JhZHNrYe9hIG9ibGFzdDtLb3RvdnNraXkgOiAxIDogNDExNTEKK1ZvbGdvZ3JhZHNrYe9hIG9ibGFzdDtOZWtoYXlldnNraXkgOiAxIDogMjAxMjAKK1ZvbGdvZ3JhZHNrYe9hIG9ibGFzdDtNaWtoYXlsb3Zza2l5IDogMSA6IDI2NzkzCitTYXJhdG92c2th72Egb2JsYXN0O0FsZWtzYW5kcm92LUdheXNraXkgOiAxIDogMTc3ODUKK1ZvbGdvZ3JhZHNrYe9hIG9ibGFzdDtBbGVrc2V5ZXZza2l5IDogMSA6IDIwMTIwCitWb2xnb2dyYWRza2HvYSBvYmxhc3Q7UGFsbGFzb3Zza2l5IDogMSA6IDQ5OTQ3CitWb2xnb2dyYWRza2HvYSBvYmxhc3Q7Tmlrb2xheWV2c2tpeSA6IDEgOiAzNjgwMworVm9sZ29ncmFkc2th72Egb2JsYXN0O0Zyb2xvdnNraXkgOiAxIDogMTY4ODUKK1ZvbGdvZ3JhZHNrYe9hIG9ibGFzdDtPbGtob3Zza2l5IDogMSA6IDIwMDE5CitWb2xnb2dyYWRza2HvYSBvYmxhc3Q7S2FteXNoaW4gOiAxIDogMTI4OTEyCitWb2xnb2dyYWRza2HvYSBvYmxhc3Q7TWlraGFpbG92a2EgOiAxIDogNjQwMDEKK1ZvbGdvZ3JhZHNrYe9hIG9ibGFzdDtQb2R0ZWxrb3Zza2l5IDogMSA6IDI1Mzc4CitWb2xnb2dyYWRza2HvYSBvYmxhc3Q7Qnlrb3Zza2l5IDogMSA6IDI4NjEzCitWb2xnb2dyYWRza2HvYSBvYmxhc3Q7U2VyYWZpbW92aWNoc2tpeSA6IDEgOiAyOTAxOAorVm9sZ29ncmFkc2th72Egb2JsYXN0O0Zyb2xvdm8gOiAxIDogNDI2NjcKK1ZvbGdvZ3JhZHNrYe9hIG9ibGFzdDtEdWJvdnNraXkgOiAxIDogMzA3MzcKK1ZvbGdvZ3JhZHNrYe9hIG9ibGFzdDtJbG92bGluc2tpeSA6IDEgOiAzNDA3MworVm9sZ29ncmFkc2th72Egb2JsYXN0O0tsZXRza2l5IDogMSA6IDE5ODE3CitWb2xnb2dyYWRza2HvYSBvYmxhc3Q7TGVuaW5za2l5IDogMSA6IDMxODQ5CitWb2xnb2dyYWRza2HvYSBvYmxhc3Q7S2FsYWNoZXZza2l5IDogMSA6IDU1ODExCitWb2xnb2dyYWRza2HvYSBvYmxhc3Q7R29yb2Rpc2NoZW5za2l5IDogMSA6IDUxODY4CitWb2xnb2dyYWRza2HvYSBvYmxhc3Q7U3JlZG5lYWtodHViaW5za2l5IDogMSA6IDUwMjUwCitWb2xnb2dyYWRza2HvYSBvYmxhc3Q7U3Vyb3Zpa2luc2tpeSA6IDEgOiA0MDAzOQorVm9sZ29ncmFkc2th72Egb2JsYXN0O1ZvbGdvZ3JhZCA6IDEgOiAxMDM2NzU2CitWb2xnb2dyYWRza2HvYSBvYmxhc3Q7Vm9semhza2l5IDogMSA6IDI5MjQwMworQXN0cmFraGFuc2th72Egb2JsYXN0O0FraHR1Ymluc2tpeSA6IDEgOiAzNjg0MQorVm9sZ29ncmFkc2th72Egb2JsYXN0O1N2ZXRsb3lhcnNraXkgOiAxIDogMzc0MTAKK0FzdHJha2hhbnNrYe9hIG9ibGFzdDtDaHlvcm5veWFyc2tpeSA6IDEgOiAyMzY0OAorVm9sZ29ncmFkc2th72Egb2JsYXN0O0NoZXJueXNoa292c2tpeSA6IDEgOiAyMDYyNgorS2FsbXlraWE7TWFsb2RlcmJldG92c2tpeSA6IDEgOiAxMzUxMAorVm9sZ29ncmFkc2th72Egb2JsYXN0O09rdHlhYnJza2l5IDogMSA6IDI2MTg3CitBc3RyYWtoYW5za2HvYSBvYmxhc3Q7QWtodHViaW5zayA6IDEgOiA1MTQ1NgorS2FsbXlraWE7T2t0eWFicnNraXkgOiAxIDogMTIwMjAKK1ZvbGdvZ3JhZHNrYe9hIG9ibGFzdDtLb3RlbG5pa292c2tpeSA6IDEgOiA0MDE0MAorQXN0cmFraGFuc2th72Egb2JsYXN0O1llbm90YXlldnNraXkgOiAxIDogMzEwNTYKK0thbG15a2lhO1NhcnBpbnNraXkgOiAxIDogMTcyODUKK0FzdHJha2hhbnNrYe9hIG9ibGFzdDtLaGFyYWJhbGluc2tpeSA6IDEgOiA0Mzc0MworS2FsbXlraWE7WXVzdGluc2tpeSA6IDEgOiAxNTQ5NgorS2FsbXlraWE7S2V0Y2hlbmVyb3Zza2l5IDogMSA6IDE0OTAwCitBc3RyYWtoYW5za2HvYSBvYmxhc3Q7S3Jhc25veWFyc2tpeSA6IDEgOiA0MzU0MAorS2FsbXlraWE7WWFzaGt1bHNraXkgOiAxIDogMjA2NjIKK0thbG15a2lhO1RzZWxpbm55aSA6IDEgOiAyMjE1MgorQXN0cmFraGFuc2th72Egb2JsYXN0O05hcmltYW5vdnNraXkgOiAxIDogNDU2NzEKK0thbG15a2lhO1lhc2hhbHRpbnNraXkgOiAxIDogMTg0NzcKK0FzdHJha2hhbnNrYe9hIG9ibGFzdDtWb2xvZGFyc2tpeSA6IDEgOiA0OTMyNQorQXN0cmFraGFuc2th72Egb2JsYXN0O1ByaXZvbHpoc2tpeSA6IDEgOiA0MDgwMAorS2FsbXlraWE7UHJpeXV0aW5za2l5IDogMSA6IDE1Mzk3CitBc3RyYWtoYW5za2HvYSBvYmxhc3Q7QXN0cmFraGFuIDogMSA6IDUxNDk2OAorS2FsbXlraWE7RWxpc3RhIDogMSA6IDkzNzczCitLYWxteWtpYTtDaGVybm96ZW1lbHNraXkgOiAxIDogMTU4OTQKK0thbG15a2lhO0dvcm9kb3Zpa292c2tpeSA6IDEgOiAyMDM2NAorQXN0cmFraGFuc2th72Egb2JsYXN0O0lrcnlhbmluc2tpeSA6IDEgOiA1MTI1MworS2FsbXlraWE7SWtpLUJ1cnVsc2tpeSA6IDEgOiAxNjA5MgorQXN0cmFraGFuc2th72Egb2JsYXN0O0thbXl6eWFrc2tpeSA6IDEgOiA1MjY3NAorQXN0cmFraGFuc2th72Egb2JsYXN0O0xpbWFuc2tpeSA6IDEgOiAzNjMzNAorS2FsbXlraWE7S2FzcGl5c2tpeSA6IDEgOiAyMzU0MworUlUtVU5LLTI5MDIgOiAxIDogMTU4OTUKK1JVLVVOSy0yOTAzIDogMSA6IDIyNjM1CitSVS1VTkstMjkwNCA6IDEgOiAyNzY3OAorS2FsaW5pbmdyYWRza2HvYSBvYmxhc3Q7R3ZhcmRleXNraXkgOiAxIDogMjk0NTUKK0thbGluaW5ncmFkc2th72Egb2JsYXN0O0d1cnlldnNraXkgOiAxIDogMzk2NDYKK0thbGluaW5ncmFkc2th72Egb2JsYXN0O0thbGluaW5ncmFkIDogMSA6IDQyMDUxNworS2FsaW5pbmdyYWRza2HvYSBvYmxhc3Q7TmVzdGVyb3Zza2l5IDogMSA6IDE2NjEzCitLYWxpbmluZ3JhZHNrYe9hIG9ibGFzdDtDaGVybnlha2hvdnNrIDogMSA6IDQyMDkyCitLYWxpbmluZ3JhZHNrYe9hIG9ibGFzdDtHdXNldiA6IDEgOiAyODUzNworS2FsaW5pbmdyYWRza2HvYSBvYmxhc3Q7UHJhdmRpbnNraXkgOiAxIDogMjA3OTEKK0thbGluaW5ncmFkc2th72Egb2JsYXN0O096ZXJza2l5IDogMSA6IDE3NzM0CitLYWxpbmluZ3JhZHNrYe9hIG9ibGFzdDtTbGF2c2tpeSA6IDEgOiAyMTcwOQorS2FsaW5pbmdyYWRza2HvYSBvYmxhc3Q7WmVsZW5vZ3JhZHNraXkgOiAxIDogMjkyNTEKK0thbGluaW5ncmFkc2th72Egb2JsYXN0O1NvdmV0c2sgOiAxIDogNDQyMzMKK0thbGluaW5ncmFkc2th72Egb2JsYXN0O05lbWFuc2tpeSA6IDEgOiA5NjgyCitLYWxpbmluZ3JhZHNrYe9hIG9ibGFzdDtLcmF6bm96bmFtZW5za2l5IDogMSA6IDEzNTU1CitLYWxpbmluZ3JhZHNrYe9hIG9ibGFzdDtOZW1hbiA6IDEgOiAxNDQ3MgorS2FsaW5pbmdyYWRza2HvYSBvYmxhc3Q7UG9sZXNza2l5IDogMSA6IDE3NzM0CitLYWxpbmluZ3JhZHNrYe9hIG9ibGFzdDtTdmV0bG9nb3JzayA6IDEgOiAzMzUzMQorS2FsaW5pbmdyYWRza2HvYSBvYmxhc3Q7Q2hlcm55YWtob3Zza2l5IDogMSA6IDEzODYxCitLYWxpbmluZ3JhZHNrYe9hIG9ibGFzdDtHdXNldnNraXkgOiAxIDogODE1NAorS2FsaW5pbmdyYWRza2HvYSBvYmxhc3Q7U3ZldGx5aSA6IDEgOiAyODk0NQorS2FsaW5pbmdyYWRza2HvYSBvYmxhc3Q7QmFsdGl5c2sgOiAxIDogMjkzNTMKK0thbGluaW5ncmFkc2th72Egb2JsYXN0O0JhZ3JhdGlvbm92c2tpeSA6IDEgOiA0MzUxOQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvUldBTkRBX0FSRUEudHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvUldBTkRBX0FSRUEudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY2Nzk2YTIKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9SV0FOREFfQVJFQS50eHQKQEAgLTAsMCArMSwxMTkgQEAKK1J3YW5kYQk6CTAJOgkyNjM4OAorQnV0YXJlCToJMQk6CTE4NzIKK0J1dGFyZSBUb3duIAk6CTIJOgkwCitEaXN0cmljdCBvZiBHaWtvbmtvIAk6CTIJOgkwCitEaXN0cmljdCBvZiBLaWJpbmdvIAk6CTIJOgkwCitEaXN0cmljdCBvZiBLaXJ1aHVyYSAJOgkyCToJMAorRGlzdHJpY3Qgb2YgTWFyYWJhIAk6CTIJOgkwCitEaXN0cmljdCBvZiBNdWdvbWJ3YSAJOgkyCToJMAorRGlzdHJpY3Qgb2YgTnlha2l6dSAJOgkyCToJMAorRGlzdHJpY3Qgb2YgTnlhbXVyZSAJOgkyCToJMAorTnlhbnphIFRvd24gCToJMgk6CTAKK0Rpc3RyaWN0IG9mIFNhdmUgCToJMgk6CTAKK0J5dW1iYQk6CTEJOgkxNjk0CitEaXN0cmljdCBvZiBCdW5nd2UgCToJMgk6CTAKK0J5dW1iYSBUb3duIAk6CTIJOgkwCitEaXN0cmljdCBvZiBIdW11cmUgCToJMgk6CTAKK0Rpc3RyaWN0IG9mIEtpbmloaXJhIAk6CTIJOgkwCitEaXN0cmljdCBvZiBLaXNhcm8gCToJMgk6CTAKK0Rpc3RyaWN0IG9mIE5nYXJhbWEgCToJMgk6CTAKK0Rpc3RyaWN0IG9mIFJlYmVybyAJOgkyCToJMAorRGlzdHJpY3Qgb2YgUnVzaGFraSAJOgkyCToJMAorRGlzdHJpY3Qgb2YgUndhbWlrbyAJOgkyCToJMAorQ3lhbmd1Z3UJOgkxCToJMTg5NAorRGlzdHJpY3Qgb2YgQnVnYXJhbWEgCToJMgk6CTAKK0Rpc3RyaWN0IG9mIEJ1a3VuemkgCToJMgk6CTAKK0N5YW5ndWd1IFRvd24gCToJMgk6CTAKK0Rpc3RyaWN0IG9mIEdhc2hvbmdhIAk6CTIJOgkwCitEaXN0cmljdCBvZiBHYXRhcmUgCToJMgk6CTAKK0Rpc3RyaWN0IG9mIEltcGFsYSAJOgkyCToJMAorRGlzdHJpY3Qgb2YgTnlhbWFzaGVrZSAJOgkyCToJMAorR2lrb25nb3JvCToJMQk6CTE5NzQKK0dpa29uZ29ybyBUb3duIAk6CTIJOgkwCitEaXN0cmljdCBvZiBLYWR1aGEgCToJMgk6CTAKK0Rpc3RyaWN0IG9mIEthcmFiYSAJOgkyCToJMAorRGlzdHJpY3Qgb2YgTXVkYXNvbXdhIAk6CTIJOgkwCitEaXN0cmljdCBvZiBNdXNodWJpIAk6CTIJOgkwCitEaXN0cmljdCBvZiBOc2hpbGkgCToJMgk6CTAKK0Rpc3RyaWN0IG9mIE55YXJ1Z3VydSAJOgkyCToJMAorR2lzZW55aQk6CTEJOgkyMDQ3CitEaXN0cmljdCBvZiBDeWFuemFyd2UgCToJMgk6CTAKK0Rpc3RyaWN0IG9mIEdhc2VrZSAJOgkyCToJMAorRGlzdHJpY3Qgb2YgR2FzaXphIAk6CTIJOgkwCitHaXNlbnlpIFRvd24gCToJMgk6CTAKK0Rpc3RyaWN0IG9mIEthZ2V5byAJOgkyCToJMAorRGlzdHJpY3Qgb2YgS2FuYW1hIAk6CTIJOgkwCitEaXN0cmljdCBvZiBLYXlvdmUgCToJMgk6CTAKK0Rpc3RyaWN0IG9mIE11dHVyYSAJOgkyCToJMAorRGlzdHJpY3Qgb2YgTnlhZ2lzYWdhcmEgCToJMgk6CTAKK0Rpc3RyaWN0IG9mIE55YW15dW1iYSAJOgkyCToJMAorR2l0YXJhbWEJOgkxCToJMjE0MQorR2l0YXJhbWEgVG93biAJOgkyCToJMAorRGlzdHJpY3Qgb2YgS2FiYWdhcmkgCToJMgk6CTAKK0Rpc3RyaWN0IG9mIEthbW9ueWkgCToJMgk6CTAKK0Rpc3RyaWN0IG9mIEtheXVtYnUgCToJMgk6CTAKK0Rpc3RyaWN0IG9mIE11aGFuZ2EgCToJMgk6CTAKK0Rpc3RyaWN0IG9mIE5kaXphIAk6CTIJOgkwCitEaXN0cmljdCBvZiBOdGVueW8gCToJMgk6CTAKK0Rpc3RyaWN0IG9mIE50b25nd2UgCToJMgk6CTAKK1Rvd25SdWhhbmdvIAk6CTIJOgkwCitEaXN0cmljdCBvZiBSdXl1bWJhIAk6CTIJOgkwCitLaWJ1bmd1CToJMQk6CTI5NjQKK0Rpc3RyaWN0IG9mIEN5dXJhYmFyZSAJOgkyCToJMAorRGlzdHJpY3Qgb2YgS2FiYXJvbmRhIAk6CTIJOgkwCitLaWJ1bmdvIFRvd24gCToJMgk6CTAKK0Rpc3RyaWN0IG9mIEtpZ2FyYW1hIAk6CTIJOgkwCitEaXN0cmljdCBvZiBNaXJlbmdlIAk6CTIJOgkwCitEaXN0cmljdCBvZiBNdWhhemkgCToJMgk6CTAKK0Rpc3RyaWN0IG9mIE55YXJ1YnV5ZSAJOgkyCToJMAorRGlzdHJpY3Qgb2YgUnVraXJhIAk6CTIJOgkwCitEaXN0cmljdCBvZiBSdXN1bW8gCToJMgk6CTAKK1J3YW1hZ2FuYSBUb3duIAk6CTIJOgkwCitLaWJ1eWUJOgkxCToJMTc0OAorRGlzdHJpY3Qgb2YgQnVkYWhhIAk6CTIJOgkwCitEaXN0cmljdCBvZiBHaXN1bnp1IAk6CTIJOgkwCitEaXN0cmljdCBvZiBJdGFiaXJlIAk6CTIJOgkwCitLaWJ1eWUgVG93biAJOgkyCToJMAorRGlzdHJpY3Qgb2YgUnVzZW55aSAJOgkyCToJMAorRGlzdHJpY3Qgb2YgUnV0c2lybyAJOgkyCToJMAorS2lnYWxpCToJMQk6CTMxMworRGlzdHJpY3Qgb2YgQnV0YW13YSAJOgkyCToJMAorRGlzdHJpY3Qgb2YgR2lrb25kbyAJOgkyCToJMAorRGlzdHJpY3Qgb2YgR2lzb3ppIAk6CTIJOgkwCitEaXN0cmljdCBvZiBLYWN5aXJ1IAk6CTIJOgkwCitEaXN0cmljdCBvZiBLYW5vbWJlIAk6CTIJOgkwCitEaXN0cmljdCBvZiBLaWN1a2lybyAJOgkyCToJMAorRGlzdHJpY3Qgb2YgTnlhbWlyYW1ibyAJOgkyCToJMAorRGlzdHJpY3Qgb2YgTnlhcnVnZW5nZSAJOgkyCToJMAorTWFzYWthCToJMQk6CTI3ODAKK0Rpc3RyaWN0IG9mIEJpY3VtYmkgCToJMgk6CTAKK0Rpc3RyaWN0IG9mIEJ1bGl6YSAJOgkyCToJMAorRGlzdHJpY3Qgb2YgR2FzYWJvIAk6CTIJOgkwCitEaXN0cmljdCBvZiBHYXNob3JhIAk6CTIJOgkwCitLYWJ1Z2EgVG93biAJOgkyCToJMAorRGlzdHJpY3Qgb2YgTmdlbmRhIAk6CTIJOgkwCitEaXN0cmljdCBvZiBOeWFtYXRhIAk6CTIJOgkwCitEaXN0cmljdCBvZiBSdWxpbmRvIAk6CTIJOgkwCitEaXN0cmljdCBvZiBSdXNoYXNoaSAJOgkyCToJMAorRGlzdHJpY3Qgb2YgU2h5b3JvbmdpIAk6CTIJOgkwCitSdWhlbmdlcmkJOgkxCToJMTY1NworRGlzdHJpY3Qgb2YgQnVnYXJ1cmEgCToJMgk6CTAKK0Rpc3RyaWN0IG9mIEJ1aG9tYSAJOgkyCToJMAorRGlzdHJpY3Qgb2YgQnVrYW1iYSAJOgkyCToJMAorRGlzdHJpY3Qgb2YgQnVrb255YSAJOgkyCToJMAorRGlzdHJpY3Qgb2YgQnV0YXJvIAk6CTIJOgkwCitEaXN0cmljdCBvZiBDeWVydSAJOgkyCToJMAorRGlzdHJpY3Qgb2YgS2luaWdpIAk6CTIJOgkwCitEaXN0cmljdCBvZiBNdXRvYm8gCToJMgk6CTAKK0Rpc3RyaWN0IG9mIE55YW11Z2FsaSAJOgkyCToJMAorRGlzdHJpY3Qgb2YgTnl1cmF0b3Z1IAk6CTIJOgkwCitSdWhlbmdlcmkgVG93biAJOgkyCToJMAorTnlhZ2F0YXJlCToJMQk6CTQyMzAKK0Rpc3RyaWN0IG9mIEJ1Z2FyYWdhcmEgCToJMgk6CTAKK0Rpc3RyaWN0IG9mIEdhYmlybyAJOgkyCToJMAorRGlzdHJpY3Qgb2YgS2FiYXJlIAk6CTIJOgkwCitEaXN0cmljdCBvZiBLYWhpIAk6CTIJOgkwCitEaXN0cmljdCBvZiBNdXJhbWJpIAk6CTIJOgkwCitEaXN0cmljdCBvZiBNdXZ1bWJhIAk6CTIJOgkwCitEaXN0cmljdCBvZiBSdWthcmEgCToJMgk6CTAKK1VtdXR1cmEgVG93biAJOgkyCToJMApkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvUldBTkRBX1BPUFVMQVRJT04udHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvUldBTkRBX1BPUFVMQVRJT04udHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRiNjE3YTQKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9SV0FOREFfUE9QVUxBVElPTi50eHQKQEAgLTAsMCArMSwxMTkgQEAKK1J3YW5kYQk6CTAJOgk4NjQ4MjQ4CitCdXRhcmUJOgkxCToJNzI1OTE0CitCdXRhcmUgVG93biAJOgkyCToJNzc0NDkKK0Rpc3RyaWN0IG9mIEdpa29ua28gCToJMgk6CTcwNDc1CitEaXN0cmljdCBvZiBLaWJpbmdvIAk6CTIJOgk5ODg1NgorRGlzdHJpY3Qgb2YgS2lydWh1cmEgCToJMgk6CTUxMTYzCitEaXN0cmljdCBvZiBNYXJhYmEgCToJMgk6CTYyMTQ5CitEaXN0cmljdCBvZiBNdWdvbWJ3YSAJOgkyCToJNzY1NTgKK0Rpc3RyaWN0IG9mIE55YWtpenUgCToJMgk6CTg1NTg3CitEaXN0cmljdCBvZiBOeWFtdXJlIAk6CTIJOgk4MjcxNgorTnlhbnphIFRvd24gCToJMgk6CTU1Njk5CitEaXN0cmljdCBvZiBTYXZlIAk6CTIJOgk2MTk2NAorQnl1bWJhCToJMQk6CTcwNzc4NgorRGlzdHJpY3Qgb2YgQnVuZ3dlIAk6CTIJOgk4MDA2OAorQnl1bWJhIFRvd24gCToJMgk6CTY2NTM2CitEaXN0cmljdCBvZiBIdW11cmUgCToJMgk6CTcxNDg1CitEaXN0cmljdCBvZiBLaW5paGlyYSAJOgkyCToJOTIwMDMKK0Rpc3RyaWN0IG9mIEtpc2FybyAJOgkyCToJNzczMjAKK0Rpc3RyaWN0IG9mIE5nYXJhbWEgCToJMgk6CTczNjI2CitEaXN0cmljdCBvZiBSZWJlcm8gCToJMgk6CTc5ODk0CitEaXN0cmljdCBvZiBSdXNoYWtpIAk6CTIJOgk3OTQ4NAorRGlzdHJpY3Qgb2YgUndhbWlrbyAJOgkyCToJOTE5NTYKK0N5YW5ndWd1CToJMQk6CTYwNzQ5NQorRGlzdHJpY3Qgb2YgQnVnYXJhbWEgCToJMgk6CTk5NDcxCitEaXN0cmljdCBvZiBCdWt1bnppIAk6CTIJOgk4NzcwNgorQ3lhbmd1Z3UgVG93biAJOgkyCToJNTk0MjkKK0Rpc3RyaWN0IG9mIEdhc2hvbmdhIAk6CTIJOgk3NDk4OAorRGlzdHJpY3Qgb2YgR2F0YXJlIAk6CTIJOgk4MzQyOAorRGlzdHJpY3Qgb2YgSW1wYWxhIAk6CTIJOgkxMjk5ODYKK0Rpc3RyaWN0IG9mIE55YW1hc2hla2UgCToJMgk6CTc0NDk2CitHaWtvbmdvcm8JOgkxCToJNDg5NzI5CitHaWtvbmdvcm8gVG93biAJOgkyCToJMzI0NzYKK0Rpc3RyaWN0IG9mIEthZHVoYSAJOgkyCToJNjA5NjEKK0Rpc3RyaWN0IG9mIEthcmFiYSAJOgkyCToJOTAyODAKK0Rpc3RyaWN0IG9mIE11ZGFzb213YSAJOgkyCToJNzAxODMKK0Rpc3RyaWN0IG9mIE11c2h1YmkgCToJMgk6CTkwMzM2CitEaXN0cmljdCBvZiBOc2hpbGkgCToJMgk6CTgxMjc3CitEaXN0cmljdCBvZiBOeWFydWd1cnUgCToJMgk6CTY3MDkyCitHaXNlbnlpCToJMQk6CTg2NDM3NworRGlzdHJpY3Qgb2YgQ3lhbnphcndlIAk6CTIJOgk3MTE0MgorRGlzdHJpY3Qgb2YgR2FzZWtlIAk6CTIJOgk3ODQ1OAorRGlzdHJpY3Qgb2YgR2FzaXphIAk6CTIJOgkxMjI2ODEKK0dpc2VueWkgVG93biAJOgkyCToJNjcxOTIKK0Rpc3RyaWN0IG9mIEthZ2V5byAJOgkyCToJODQzNDUKK0Rpc3RyaWN0IG9mIEthbmFtYSAJOgkyCToJNzc3MDkKK0Rpc3RyaWN0IG9mIEtheW92ZSAJOgkyCToJOTYwOTAKK0Rpc3RyaWN0IG9mIE11dHVyYSAJOgkyCToJMTIyMzI1CitEaXN0cmljdCBvZiBOeWFnaXNhZ2FyYSAJOgkyCToJODE3MjcKK0Rpc3RyaWN0IG9mIE55YW15dW1iYSAJOgkyCToJNjU1NTYKK0dpdGFyYW1hCToJMQk6CTg1NjQ4OAorR2l0YXJhbWEgVG93biAJOgkyCToJODQ2NjkKK0Rpc3RyaWN0IG9mIEthYmFnYXJpIAk6CTIJOgk4MzAwNgorRGlzdHJpY3Qgb2YgS2Ftb255aSAJOgkyCToJMTE2MjU1CitEaXN0cmljdCBvZiBLYXl1bWJ1IAk6CTIJOgk3NDI2NAorRGlzdHJpY3Qgb2YgTXVoYW5nYSAJOgkyCToJNzk4MTEKK0Rpc3RyaWN0IG9mIE5kaXphIAk6CTIJOgk5OTQ5MAorRGlzdHJpY3Qgb2YgTnRlbnlvIAk6CTIJOgkxMDk2NTYKK0Rpc3RyaWN0IG9mIE50b25nd2UgCToJMgk6CTg0ODcwCitUb3duUnVoYW5nbyAJOgkyCToJNDM3ODAKK0Rpc3RyaWN0IG9mIFJ1eXVtYmEgCToJMgk6CTg4NzkzCitLaWJ1bmd1CToJMQk6CTcwMjI0OAorRGlzdHJpY3Qgb2YgQ3l1cmFiYXJlIAk6CTIJOgk2NzE4NAorRGlzdHJpY3Qgb2YgS2FiYXJvbmRhIAk6CTIJOgk2Nzc1MAorS2lidW5nbyBUb3duIAk6CTIJOgk0MzU4MgorRGlzdHJpY3Qgb2YgS2lnYXJhbWEgCToJMgk6CTYyNzczCitEaXN0cmljdCBvZiBNaXJlbmdlIAk6CTIJOgkxMDEwMjYKK0Rpc3RyaWN0IG9mIE11aGF6aSAJOgkyCToJNTg0OTIKK0Rpc3RyaWN0IG9mIE55YXJ1YnV5ZSAJOgkyCToJNDk1NjUKK0Rpc3RyaWN0IG9mIFJ1a2lyYSAJOgkyCToJNjAzMzAKK0Rpc3RyaWN0IG9mIFJ1c3VtbyAJOgkyCToJMTQ5NjQzCitSd2FtYWdhbmEgVG93biAJOgkyCToJNDcyMDMKK0tpYnV5ZQk6CTEJOgk0NjkwMTYKK0Rpc3RyaWN0IG9mIEJ1ZGFoYSAJOgkyCToJODU0MjAKK0Rpc3RyaWN0IG9mIEdpc3VuenUgCToJMgk6CTc3MDg5CitEaXN0cmljdCBvZiBJdGFiaXJlIAk6CTIJOgk3ODA4NgorS2lidXllIFRvd24gCToJMgk6CTQ2NTAwCitEaXN0cmljdCBvZiBSdXNlbnlpIAk6CTIJOgkxMDU4MjYKK0Rpc3RyaWN0IG9mIFJ1dHNpcm8gCToJMgk6CTc0ODI0CitLaWdhbGkJOgkxCToJNjAzMDQ5CitEaXN0cmljdCBvZiBCdXRhbXdhIAk6CTIJOgkzMDQ2NAorRGlzdHJpY3Qgb2YgR2lrb25kbyAJOgkyCToJNzc2ODAKK0Rpc3RyaWN0IG9mIEdpc296aSAJOgkyCToJNjY4NzUKK0Rpc3RyaWN0IG9mIEthY3lpcnUgCToJMgk6CTEyMTE5MQorRGlzdHJpY3Qgb2YgS2Fub21iZSAJOgkyCToJNTMwMTAKK0Rpc3RyaWN0IG9mIEtpY3VraXJvIAk6CTIJOgk1OTE2NQorRGlzdHJpY3Qgb2YgTnlhbWlyYW1ibyAJOgkyCToJOTg4MjcKK0Rpc3RyaWN0IG9mIE55YXJ1Z2VuZ2UgCToJMgk6CTEwMDkyOQorTWFzYWthCToJMQk6CTc4OTMzMAorRGlzdHJpY3Qgb2YgQmljdW1iaSAJOgkyCToJMTAxMDU3CitEaXN0cmljdCBvZiBCdWxpemEgCToJMgk6CTg1Mzk0CitEaXN0cmljdCBvZiBHYXNhYm8gCToJMgk6CTkwNTM0CitEaXN0cmljdCBvZiBHYXNob3JhIAk6CTIJOgk4NjYwNgorS2FidWdhIFRvd24gCToJMgk6CTUxMTI4CitEaXN0cmljdCBvZiBOZ2VuZGEgCToJMgk6CTEwNjExMgorRGlzdHJpY3Qgb2YgTnlhbWF0YSAJOgkyCToJNzY0NTYKK0Rpc3RyaWN0IG9mIFJ1bGluZG8gCToJMgk6CTcxNzE1CitEaXN0cmljdCBvZiBSdXNoYXNoaSAJOgkyCToJNjg1OTQKK0Rpc3RyaWN0IG9mIFNoeW9yb25naSAJOgkyCToJNTQ5NDYKK1J1aGVuZ2VyaQk6CTEJOgk4OTE0OTgKK0Rpc3RyaWN0IG9mIEJ1Z2FydXJhIAk6CTIJOgk5OTUyMAorRGlzdHJpY3Qgb2YgQnVob21hIAk6CTIJOgk4OTA5MQorRGlzdHJpY3Qgb2YgQnVrYW1iYSAJOgkyCToJMTE5OTM1CitEaXN0cmljdCBvZiBCdWtvbnlhIAk6CTIJOgk4NDM1OAorRGlzdHJpY3Qgb2YgQnV0YXJvIAk6CTIJOgk2MjY1OAorRGlzdHJpY3Qgb2YgQ3llcnUgCToJMgk6CTg1MTAyCitEaXN0cmljdCBvZiBLaW5pZ2kgCToJMgk6CTYyNjQ0CitEaXN0cmljdCBvZiBNdXRvYm8gCToJMgk6CTk4MzU1CitEaXN0cmljdCBvZiBOeWFtdWdhbGkgCToJMgk6CTU0NzQzCitEaXN0cmljdCBvZiBOeXVyYXRvdnUgCToJMgk6CTY3MjQ4CitSdWhlbmdlcmkgVG93biAJOgkyCToJNzA1MjUKK055YWdhdGFyZQk6CTEJOgk0MjE2MjMKK0Rpc3RyaWN0IG9mIEJ1Z2FyYWdhcmEgCToJMgk6CTMzMDc4CitEaXN0cmljdCBvZiBHYWJpcm8gCToJMgk6CTM0MjUwCitEaXN0cmljdCBvZiBLYWJhcmUgCToJMgk6CTI5MjI4CitEaXN0cmljdCBvZiBLYWhpIAk6CTIJOgk2NTc1MAorRGlzdHJpY3Qgb2YgTXVyYW1iaSAJOgkyCToJODM0MTgKK0Rpc3RyaWN0IG9mIE11dnVtYmEgCToJMgk6CTk1OTk2CitEaXN0cmljdCBvZiBSdWthcmEgCToJMgk6CTczOTE5CitVbXV0dXJhIFRvd24gCToJMgk6CTgwMDMKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL1NBTiBNQVJJTk9fQVJFQS50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9TQU4gTUFSSU5PX0FSRUEudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU5MzZmZTQKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9TQU4gTUFSSU5PX0FSRUEudHh0CkBAIC0wLDAgKzEgQEAKKyBTYW4gTWFyaW5vIDogMSA6IDEuMApkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvU0FOIE1BUklOT19QT1BVTEFUSU9OLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL1NBTiBNQVJJTk9fUE9QVUxBVElPTi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDQyZTIwMQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL1NBTiBNQVJJTk9fUE9QVUxBVElPTi50eHQKQEAgLTAsMCArMSBAQAorIFNhbiBNYXJpbm8gOiAxIDogMjk1MjEKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL1NBTyBUT01FIEFORCBQUklOQ0lQRV9BUkVBLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL1NBTyBUT01FIEFORCBQUklOQ0lQRV9BUkVBLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZmYyZGY1Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvU0FPIFRPTUUgQU5EIFBSSU5DSVBFX0FSRUEudHh0CkBAIC0wLDAgKzEsMTQgQEAKK1NhbyB0b21lIGFuZCBwcmluY2lwZQk6CTAJOgkxMDAxCitSZWdp428gQ2VudHJvICAJOgkxCToJMTM4LjUKK8FndWEgR3JhbmRlIGRpc3RyaXRvIAk6CTEJOgkxNi41CitN6S1a82NoaSBkaXN0cml0byAJOgkxCToJMTIyCitSZWdp428gTm9ydGUgCToJMQk6CTMzNC41CitMZW1i4SBkaXN0cml0byAJOgkxCToJMjI5LjUKK0xvYmF0YSBkaXN0cml0byAJOgkxCToJMTA1CitSZWdp428gU3VsIAk6CTEJOgkzODYKK0NhbnRhZ2FsbyBkaXN0cml0byAJOgkxCToJMTE5CitDYXXpIGRpc3RyaXRvIAk6CTEJOgkyNjcKK1JlZ2njbyBQcmluY2lwZSBbUHJpbmNpcGVdCToJMQk6CTE0MgorU2FvIFRvbWUgOiAxIDogODU0CitQYWd16SBkaXN0cml0byAJOgkxCToJMTQyCisKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL1NBTyBUT01FIEFORCBQUklOQ0lQRV9QT1BVTEFUSU9OLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL1NBTyBUT01FIEFORCBQUklOQ0lQRV9QT1BVTEFUSU9OLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40OWJjODg2Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvU0FPIFRPTUUgQU5EIFBSSU5DSVBFX1BPUFVMQVRJT04udHh0CkBAIC0wLDAgKzEsMTMgQEAKK1NhbyB0b21lIGFuZCBwcmluY2lwZQk6CTAJOgkxOTM0MTMKK1JlZ2njbyBDZW50cm8gIAk6CTEJOgk4Njk5MQorwWd1YSBHcmFuZGUgZGlzdHJpdG8gCToJMQk6CTUxODg2CitN6S1a82NoaSBkaXN0cml0byAJOgkxCToJMzUxMDUKK1JlZ2njbyBOb3J0ZSAJOgkxCToJMjU4ODMKK0xlbWLhIGRpc3RyaXRvIAk6CTEJOgkxMDY5NgorTG9iYXRhIGRpc3RyaXRvIAk6CTEJOgkxNTE4NworUmVnaeNvIFN1bCAJOgkxCToJMTg3NTkKK0NhbnRhZ2FsbyBkaXN0cml0byAJOgkxCToJMTMyNTgKK0NhdekgZGlzdHJpdG8gCToJMQk6CTU1MDEKK1JlZ2njbyBQcmluY2lwZSBbUHJpbmNpcGVdCToJMQk6CTU5NjYKK1NhbyBUb21lICA6IDEgOiAxMzM2MDAKK1BhZ3XpIGRpc3RyaXRvIAk6CTEJOgk1OTY2ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvU0FPVE9NRVBSSU5DSVBFX0FSRUEudHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvU0FPVE9NRVBSSU5DSVBFX0FSRUEudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQxMGU3MTgKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9TQU9UT01FUFJJTkNJUEVfQVJFQS50eHQKQEAgLTAsMCArMSwxMyBAQAorU2FvIHRvbWUgYW5kIHByaW5jaXBlCToJMAk6CTEwMDEKK1JlZ2njbyBDZW50cm8gIAk6CTEJOgkxMzguNQorwWd1YSBHcmFuZGUgZGlzdHJpdG8gCToJMQk6CTE2LjUKK03pLVrzY2hpIGRpc3RyaXRvIAk6CTEJOgkxMjIKK1JlZ2njbyBOb3J0ZSAJOgkxCToJMzM0LjUKK0xlbWLhIGRpc3RyaXRvIAk6CTEJOgkyMjkuNQorTG9iYXRhIGRpc3RyaXRvIAk6CTEJOgkxMDUKK1JlZ2njbyBTdWwgCToJMQk6CTM4NgorQ2FudGFnYWxvIGRpc3RyaXRvIAk6CTEJOgkxMTkKK0NhdekgZGlzdHJpdG8gCToJMQk6CTI2NworUmVnaeNvIFByaW5jaXBlIFtQcmluY2lwZV0JOgkxCToJMTQyCitTYW8gVG9tZSA6IDEgOiA4NTQKK1BhZ3XpIGRpc3RyaXRvIAk6CTEJOgkxNDIKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9TQU9UT01FUFJJTkNJUEVfUE9QVUxBVElPTi50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9TQU9UT01FUFJJTkNJUEVfUE9QVUxBVElPTi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDliYzg4NgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL1NBT1RPTUVQUklOQ0lQRV9QT1BVTEFUSU9OLnR4dApAQCAtMCwwICsxLDEzIEBACitTYW8gdG9tZSBhbmQgcHJpbmNpcGUJOgkwCToJMTkzNDEzCitSZWdp428gQ2VudHJvICAJOgkxCToJODY5OTEKK8FndWEgR3JhbmRlIGRpc3RyaXRvIAk6CTEJOgk1MTg4NgorTektWvNjaGkgZGlzdHJpdG8gCToJMQk6CTM1MTA1CitSZWdp428gTm9ydGUgCToJMQk6CTI1ODgzCitMZW1i4SBkaXN0cml0byAJOgkxCToJMTA2OTYKK0xvYmF0YSBkaXN0cml0byAJOgkxCToJMTUxODcKK1JlZ2njbyBTdWwgCToJMQk6CTE4NzU5CitDYW50YWdhbG8gZGlzdHJpdG8gCToJMQk6CTEzMjU4CitDYXXpIGRpc3RyaXRvIAk6CTEJOgk1NTAxCitSZWdp428gUHJpbmNpcGUgW1ByaW5jaXBlXQk6CTEJOgk1OTY2CitTYW8gVG9tZSAgOiAxIDogMTMzNjAwCitQYWd16SBkaXN0cml0byAJOgkxCToJNTk2NgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL1NBVURJIEFSQUJJQV9BUkVBLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL1NBVURJIEFSQUJJQV9BUkVBLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yODc3YWQzCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvU0FVREkgQVJBQklBX0FSRUEudHh0CkBAIC0wLDAgKzEsMTYgQEAKK1NhdWRpIEFyYWJpYQk6CTAJOgkxOTYwNTgyCitCYWhhCToJMQk6CTk5MjEKK0FsIEphd2YgW0phd2ZdCToJMQk6CTEwMDIxMgorUXVyYXkgWWF0IFtJbmNsLiBpbiBBbCBKYXdmXSA6IDEgOiAxMDAyMTIKK0FzaXIJOgkxCToJNzY2OTMKK0Vhc3Rlcm4gUHJvdmluY2UJOgkxCToJNjcyNTIyCitIYWlsCToJMQk6CTEwMzg4NworSml6YW4JOgkxCToJMTE2NzEKK01hZGluYWgJOgkxCToJMTUxOTkwCitNYWtrYWgJOgkxCToJMTUzMTI4CitOYWpyYW4JOgkxCToJMTQ5NTExCitOb3J0aGVybiBGcm9udGllcgk6CTEJOgkxMTE3OTcKK1F1YXNzaW0JOgkxCToJNTgwNDYKK1JpeWFkCToJMQk6CTQwNDI0MAorVGFidWsJOgkxCToJMTQ2MDcyCitJUlEvU0FVIE5ldXRyYWwgWm9uZSA6IDEgOiA3MDQ0CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9TQVVESSBBUkFCSUFfUE9QVUxBVElPTi50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9TQVVESSBBUkFCSUFfUE9QVUxBVElPTi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmViNjRkNQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL1NBVURJIEFSQUJJQV9QT1BVTEFUSU9OLnR4dApAQCAtMCwwICsxLDE3IEBACitTYXVkaSBBcmFiaWEJOgkwCToJMjcwMTk3MzEKK0JhaGEJOgkxCToJMzc3NzM5CitBbCBKYXdmIFtKYXdmXQk6CTEJOgkzNjE2NzYKK1F1cmF5IFlhdCBbSW5jbC4gaW4gQWwgSmF3Zl0gOiAxIDogMzYxNjc2CitBc2lyCToJMQk6CTE2ODgzNjgKK0Vhc3Rlcm4gUHJvdmluY2UJOgkxCToJMzM2MDE1NworSGFpbAk6CTEJOgk1MjcwMzMKK0ppemFuCToJMQk6CTExODYxMzkKK01hZGluYWgJOgkxCToJMTUxMjA3NgorTWFra2FoCToJMQk6CTU3OTc5NzEKK05hanJhbgk6CTEJOgk0MTk0NTcKK05vcnRoZXJuIEZyb250aWVyCToJMQk6CTI3OTI4NgorUXVhc3NpbQk6CTEJOgkxMDE2NzU2CitSaXlhZAk6CTEJOgk1NDU1MzYzCitUYWJ1awk6CTEJOgk2OTE1MTcKK0lSUS9TQVUgTmV1dHJhbCBab25lIDogMSA6IDAKKwpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvU0FVRElBUkFCSUFfQVJFQS50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9TQVVESUFSQUJJQV9BUkVBLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNDZjMTllCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvU0FVRElBUkFCSUFfQVJFQS50eHQKQEAgLTAsMCArMSwxNiBAQAorU2F1ZGkgQXJhYmlhCToJMAk6CTE5NjA1ODIKK0JhaGEJOgkxCToJOTkyMQorQWwgSmF3ZiBbSmF3Zl0JOgkxCToJMTAwMjEyCitRdXJheSBZYXQgW0luY2wuIGluIEFsIEphd2ZdIDogMSA6IDEwMDIxMgorQXNpcgk6CTEJOgk3NjY5MworRWFzdGVybiBQcm92aW5jZQk6CTEJOgk2NzI1MjIKK0hhaWwJOgkxCToJMTAzODg3CitKaXphbgk6CTEJOgkxMTY3MQorTWFkaW5haAk6CTEJOgkxNTE5OTAKK01ha2thaAk6CTEJOgkxNTMxMjgKK05hanJhbgk6CTEJOgkxNDk1MTEKK05vcnRoZXJuIEZyb250aWVyCToJMQk6CTExMTc5NworUXVhc3NpbQk6CTEJOgk1ODA0NgorUml5YWQJOgkxCToJNDA0MjQwCitUYWJ1awk6CTEJOgkxNDYwNzIKK0lSUS9TQVUgTmV1dHJhbCBab25lIDogMSA6IDcwNDQKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9TQVVESUFSQUJJQV9QT1BVTEFUSU9OLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL1NBVURJQVJBQklBX1BPUFVMQVRJT04udHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg3YWQ5YTQKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9TQVVESUFSQUJJQV9QT1BVTEFUSU9OLnR4dApAQCAtMCwwICsxLDE2IEBACitTYXVkaSBBcmFiaWEJOgkwCToJMjcwMTk3MzEKK0JhaGEJOgkxCToJMzc3NzM5CitBbCBKYXdmIFtKYXdmXQk6CTEJOgkzNjE2NzYKK1F1cmF5IFlhdCBbSW5jbC4gaW4gQWwgSmF3Zl0gOiAxIDogMzYxNjc2CitBc2lyCToJMQk6CTE2ODgzNjgKK0Vhc3Rlcm4gUHJvdmluY2UJOgkxCToJMzM2MDE1NworSGFpbAk6CTEJOgk1MjcwMzMKK0ppemFuCToJMQk6CTExODYxMzkKK01hZGluYWgJOgkxCToJMTUxMjA3NgorTWFra2FoCToJMQk6CTU3OTc5NzEKK05hanJhbgk6CTEJOgk0MTk0NTcKK05vcnRoZXJuIEZyb250aWVyCToJMQk6CTI3OTI4NgorUXVhc3NpbQk6CTEJOgkxMDE2NzU2CitSaXlhZAk6CTEJOgk1NDU1MzYzCitUYWJ1awk6CTEJOgk2OTE1MTcKK0lSUS9TQVUgTmV1dHJhbCBab25lIDogMSA6IDAKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL1NFTkVHQUxfQVJFQS50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9TRU5FR0FMX0FSRUEudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE3OTExMWUKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9TRU5FR0FMX0FSRUEudHh0CkBAIC0wLDAgKzEsNDYgQEAKK1NlbmVnYWwJOgkwCToJMTk2MTkwCitEYWthcgk6CTEJOgk1NTAKK0RlcGFydGVtZW50IGRlIERha2FyIAk6CTEJOgk4MworR3VlZGlhd2F5ZQk6CTEJOgkwCitQaWtpbmUJOgkxCToJOTUKK1J1ZmlzcXVlLUJhcmdueQk6CTEJOgkzNzIKK0Rpb3VyYmVsCToJMQk6CTQzNTkKK0JhbWJleQk6CTEJOgkxMzUxCitEZXBhcnRlbWVudCBkZSBEaW91cmJlbCAJOgkxCToJMTE3NQorTWJhY2tlIFtEZXBhcnRlbWVudCBkZSBNYmFja2VdIAk6CTEJOgkxODMzCitGYXRpY2sJOgkxCToJNzkzMAorRGVwYXJ0ZW1lbnQgZGUgRmF0aWNrIAk6CTEJOgkyNjQ2CitGb3VuZGlvdWduZQk6CTEJOgkyOTU5CitHb3NzYXMJOgkxCToJMjMzMAorS2FvbGFjCToJMQk6CTE2MDEwCitLYWZmcmluZQk6CTEJOgkxMTEwMgorS2FvbGFjayBbRGVwYXJ0ZW1lbnQgZGUgS2FvbGFja10gCToJMQk6CTE4ODAKK05pb3JvIGR1IFJpcAk6CTEJOgkyMjc3CitLb2xkYQk6CTEJOgkyMTAxMQorRGVwYXJ0ZW1lbnQgZGUgS29sZGEgCToJMQk6CTgyODQKK1NlZGhpb3UJOgkxCToJNzI5MworVmVsaW5nYXJhCToJMQk6CTU0MzQKK0xvdWdhCToJMQk6CTI5MTg4CitLZWJlbWVyCToJMQk6CTM4MjMKK0xpbmd1ZXJlCToJMQk6CTE5NzE2CitEZXBhcnRlbWVudCBkZSBMb3VnYSAJOgkxCToJNTY0OQorTWF0YW0JOgkxCToJMjUwODMKK0thbmVsCToJMQk6CTAKK0RlcGFydGVtZW50IGRlIE1hdGFtIAk6CTEJOgkwCitSYW5lcm91CToJMQk6CTAKK1NhaW50LUxvdWlzCToJMQk6CTE5MDQ0CitEYWdhbmEJOgkxCToJNjA4NworUG9kb3IJOgkxCToJMTI5NDcKK0RlcGFydGVtZW50IGRlIFNhaW50LUxvdWlzIAk6CTEJOgkwCitCYWtlbAk6CTEJOgk1OTYwMgorRGVwYXJ0ZW1lbnQgZGUgQmFrZWwgCToJMQk6CTIyMzc4CitLZWRvdWdvdQk6CTEJOgkxNjg5NgorVGFtYmFjb3VuZGEgW0RlcGFydGVtZW50IGRlIFRhbWJhY291bmRhXSAJOgkxCToJMjAzMjgKK1LpZ2lvbiBkZSBUaGnocyAJOgkxCToJNjYwMQorTWJvdXIJOgkxCToJMTYwNworVGhpZXMJOgkxCToJMTg3MworVGl2YW91YW5lCToJMQk6CTMxMjEKK1ppZ3VpbmNob3IJOgkxCToJNzMzOQorQmlnbm9uYQk6CTEJOgk1Mjk1CitPdXNzb3V5ZQk6CTEJOgk4OTEKK0RlcGFydGVtZW50IGRlIFppZ3VpbmNob3IgCToJMQk6CTExNTMKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL1NFTkVHQUxfUE9QVUxBVElPTi50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9TRU5FR0FMX1BPUFVMQVRJT04udHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU1ZWE3MjUKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9TRU5FR0FMX1BPUFVMQVRJT04udHh0CkBAIC0wLDAgKzEsNDYgQEAKK1NlbmVnYWwJOgkwCToJMTE5ODcxMjEKK0Rha2FyCToJMQk6CTI0NTI2NTYKK0RlcGFydGVtZW50IGRlIERha2FyIAk6CTEJOgkxMDMwNTk0CitHdWVkaWF3YXllCToJMQk6CTI4MDM1MworUGlraW5lCToJMQk6CTgzNDI0NgorUnVmaXNxdWUtQmFyZ255CToJMQk6CTMwNzQ2MworRGlvdXJiZWwJOgkxCToJMTE4MzA5NQorQmFtYmV5CToJMQk6CTI1MjUzMgorRGVwYXJ0ZW1lbnQgZGUgRGlvdXJiZWwgCToJMQk6CTIyMDIyMQorTWJhY2tlIFtEZXBhcnRlbWVudCBkZSBNYmFja2VdIAk6CTEJOgk3MTAzNDIKK0ZhdGljawk6CTEJOgk2NTIzNjEKK0RlcGFydGVtZW50IGRlIEZhdGljayAJOgkxCToJMjY3NzU2CitGb3VuZGlvdWduZQk6CTEJOgkyMjQ2NTkKK0dvc3Nhcwk6CTEJOgkxNTk5NDYKK0thb2xhYwk6CTEJOgkxMTMyNzA3CitLYWZmcmluZQk6CTEJOgk0Njc3NDgKK0thb2xhY2sgW0RlcGFydGVtZW50IGRlIEthb2xhY2tdIAk6CTEJOgkzODI3ODQKK05pb3JvIGR1IFJpcAk6CTEJOgkyODIxNzUKK0tvbGRhCToJMQk6CTkxMjUwMworRGVwYXJ0ZW1lbnQgZGUgS29sZGEgCToJMQk6CTMwNjU5MQorU2VkaGlvdQk6CTEJOgkzOTkzNjUKK1ZlbGluZ2FyYQk6CTEJOgkyMDY1NDcKK0xvdWdhCToJMQk6CTcyOTYwNgorS2ViZW1lcgk6CTEJOgkyMTU2NDgKK0xpbmd1ZXJlCToJMQk6CTIxNDg4MworRGVwYXJ0ZW1lbnQgZGUgTG91Z2EgCToJMQk6CTI5OTA3NQorTWF0YW0JOgkxCToJNDc4NTczCitLYW5lbAk6CTEJOgkxOTY5MTkKK0RlcGFydGVtZW50IGRlIE1hdGFtIAk6CTEJOgkyMzMxNzkKK1JhbmVyb3UJOgkxCToJNDg0NzUKK1NhaW50LUxvdWlzCToJMQk6CTc2NDM0NworRGFnYW5hCToJMQk6CTIwNzk5MQorUG9kb3IJOgkxCToJMzI5Mzc5CitEZXBhcnRlbWVudCBkZSBTYWludC1Mb3VpcyAJOgkxCToJMjI2OTc3CitCYWtlbAk6CTEJOgk2NjkwOTEKK0RlcGFydGVtZW50IGRlIEJha2VsIAk6CTEJOgkyMTU2ODAKK0tlZG91Z291CToJMQk6CTExMTIwNworVGFtYmFjb3VuZGEgW0RlcGFydGVtZW50IGRlIFRhbWJhY291bmRhXSAJOgkxCToJMzQyMjA0CitS6Wdpb24gZGUgVGhp6HMgCToJMQk6CTEzODUwNTgKK01ib3VyCToJMQk6CTUxMzI3OAorVGhpZXMJOgkxCToJNTI5MjYxCitUaXZhb3VhbmUJOgkxCToJMzQyNTE5CitaaWd1aW5jaG9yCToJMQk6CTQ1Nzg0NworQmlnbm9uYQk6CTEJOgkyMjkwMTYKK091c3NvdXllCToJMQk6CTM2NTA2CitEZXBhcnRlbWVudCBkZSBaaWd1aW5jaG9yIAk6CTEJOgkxOTIzMjUKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL1NFUkJJQV9BUkVBLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL1NFUkJJQV9BUkVBLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZjFmODYyCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvU0VSQklBX0FSRUEudHh0CkBAIC0wLDAgKzEsNSBAQAorIFZvanZvZGluYSA6IDEgOiAyMTUwNi4wCisgU3JiaWphIDogMSA6IDU1OTY4LjAKKyBDcm5hIEdvcmEgOiAxIDogMTM4MTIuMAorIEtvc292byA6IDEgOiAxMDg4Ny4wCisgTWFrZWRvbmlqYSA6IDEgOiAyNTcxMy4wClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvU0VSQklBX1BPUFVMQVRJT04udHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvU0VSQklBX1BPUFVMQVRJT04udHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU4YTQwYzEKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9TRVJCSUFfUE9QVUxBVElPTi50eHQKQEAgLTAsMCArMSw1IEBACisgVm9qdm9kaW5hIDogMSA6IDIwMzE5OTIKKyBTcmJpamEgOiAxIDogMTU3NjEyNAorIENybmEgR29yYSA6IDEgOiA2Mzg0NjEKKyBLb3Nvdm8gOiAxIDogMjEwMDAwMAorIE1ha2Vkb25pamEgOiAxIDogOTgzMjU4MQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL1NFWUNIRUxMRVNfQVJFQS50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9TRVlDSEVMTEVTX0FSRUEudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM0MDVmMjIKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9TRVlDSEVMTEVTX0FSRUEudHh0CkBAIC0wLDAgKzEsMjcgQEAKK1NleWNoZWxsZXMJOgkwCToJNDU1CitBbnNlIGF1eCBQaW5zICAJOgkxCToJMgorQW5zZSBCb2lsZWF1IAk6CTEJOgkxMQorQW5zZSBFdG9pbGUgCToJMQk6CTUKK0Fuc2UgUm95YWxlIAk6CTEJOgk2CitBdSBDYXAgCToJMQk6CTgKK0JhaWUgTGF6YXJlIAk6CTEJOgkxMgorQmFpZSBTYWludGUgQW5uZSBQcmFzbGluIAk6CTEJOgkyNQorQmVhdSBWYWxsb24gCToJMQk6CTQKK0JlbCBBaXIgCToJMQk6CTQKK0JlbCBPbWJyZSAJOgkxCToJOQorQ2FzY2FkZSAJOgkxCToJMTAKK0VuZ2xpc2ggUml2ZXIgCToJMQk6CTEKK0dsYWNpcyAJOgkxCToJNworTWFoZSBJc2xhbmQJOgkxCToJMTUKK1ByYXNsaW4gSXNsYW5kCToJMQk6CTE0CitMYSBEaWd1ZSAtIElubmVyIElzbGFuZHMgCToJMQk6CTU2CitMZXMgTWFtZWxsZXMgCToJMQk6CTQKK01vbnQgQnV4dG9uIAk6CTEJOgkxCitNb250IEZsZXVyaSAJOgkxCToJMgorT3V0ZXIgSXNsYW5kcyAJOgkxCToJMjExCitQbGFpc2FuY2UgCToJMQk6CTMKK1BvaW50ZSBMYSBSdWUgCToJMQk6CTQKK1BvcnQgR2xhdWQgCToJMQk6CTI1CitSb2NoZSBDYWltYW4gCToJMQk6CTMKK1NhaW50IExvdWlzIAk6CTEJOgkxCitUYWthbWFrYSAJOgkxCToJMTQKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL1NFWUNIRUxMRVNfUE9QVUxBVElPTi50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9TRVlDSEVMTEVTX1BPUFVMQVRJT04udHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM5YmVlM2MKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9TRVlDSEVMTEVTX1BPUFVMQVRJT04udHh0CkBAIC0wLDAgKzEsMjYgQEAKK0Fuc2UgYXV4IFBpbnMgIAk6CTEJOgkzNTM1CitBbnNlIEJvaWxlYXUgCToJMQk6CTM5OTQKK0Fuc2UgRXRvaWxlIAk6CTEJOgk0MjcyCitBbnNlIFJveWFsZSAJOgkxCToJMzY4OAorQXUgQ2FwIAk6CTEJOgkyOTk3CitCYWllIExhemFyZSAJOgkxCToJMjk1NworQmFpZSBTYWludGUgQW5uZSBQcmFzbGluIAk6CTEJOgkzNjY1CitCZWF1IFZhbGxvbiAJOgkxCToJMzc5NworQmVsIEFpciAJOgkxCToJMjkwMAorQmVsIE9tYnJlIAk6CTEJOgkzNTM4CitDYXNjYWRlIAk6CTEJOgkzNDM5CitFbmdsaXNoIFJpdmVyIAk6CTEJOgkzNjI0CitHbGFjaXMgCToJMQk6CTM1NzYKK01haGUgSXNsYW5kCToJMQk6CTI1ODcKK1ByYXNsaW4gSXNsYW5kCToJMQk6CTMzMzUKK0xhIERpZ3VlIC0gSW5uZXIgSXNsYW5kcyAJOgkxCToJMjA5OQorTGVzIE1hbWVsbGVzIAk6CTEJOgkyMzUyCitNb250IEJ1eHRvbiAJOgkxCToJMzEwNworTW9udCBGbGV1cmkgCToJMQk6CTM2MTEKK091dGVyIElzbGFuZHMgCToJMQk6CSAwCitQbGFpc2FuY2UgCToJMQk6CTMzOTkKK1BvaW50ZSBMYSBSdWUgCToJMQk6CTI3MTUKK1BvcnQgR2xhdWQgCToJMQk6CTIxNzQKK1JvY2hlIENhaW1hbiAJOgkxCToJMjY1MgorU2FpbnQgTG91aXMgCToJMQk6CTMzMjUKK1Rha2FtYWthIAk6CTEJOgkyNTg5CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9TSUVSUkEgTEVPTkVfQVJFQS50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9TSUVSUkEgTEVPTkVfQVJFQS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2I0NWY3YwotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL1NJRVJSQSBMRU9ORV9BUkVBLnR4dApAQCAtMCwwICsxLDIzIEBACitTaWVycmEgTGVvbmUJOgkwCToJNzE3NDAKK0Vhc3Rlcm4yCToJMQk6CTE1NTUzCitOb3J0aGVybjIgOiAxIDogMzU5MzYKK1dlc3Rlcm4zIDogMSA6IDU1NworU291dGhlcm4gOiAxIDogMTk2OTQKK0thaWxhaHVuIERpc3RyaWN0IAk6CTEJOgkzODU5CitLZW5lbWEgRGlzdHJpY3QgCToJMQk6CTYwNTMKK0tvbm8gRGlzdHJpY3QgCToJMQk6CTU2NDEKK05vcnRoZXJuCToJMQk6CTM1OTM2CitCb21iYWxpIERpc3RyaWN0IAk6CTEJOgk3OTg1CitLYW1iaWEgRGlzdHJpY3QgCToJMQk6CTMxMDgKK0tvaW5hZHVndSBEaXN0cmljdCAJOgkxCToJMTIxMjEKK1BvcnQgTG9rbyBEaXN0cmljdCAJOgkxCToJNTcxOQorVG9ua29saWxpIERpc3RyaWN0IAk6CTEJOgk3MDAzCitTb3V0dGhlcm4JOgkxCToJMTk2OTQKK0JvIERpc3RyaWN0IAk6CTEJOgk1MjE5CitCb250aGUgRGlzdHJpY3QgCToJMQk6CTM0NTgKK01veWFtYmEgRGlzdHJpY3QgCToJMQk6CTY5MDIKK1B1amVodW4gRGlzdHJpY3QgCToJMQk6CTQxMDUKK1NoZXJicm8gVXJiYW4gRGlzdHJpY3QgCToJMQk6CTEwCitXZXN0ZXJuCToJMQk6CTU1NworUnVyYWwgRGlzdHJpY3QgCToJMQk6CTU0NAorVXJiYW4gRGlzdHJpY3QgCToJMQk6CTEzClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvU0lFUlJBIExFT05FX1BPUFVMQVRJT04udHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvU0lFUlJBIExFT05FX1BPUFVMQVRJT04udHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZiZjU1MjIKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9TSUVSUkEgTEVPTkVfUE9QVUxBVElPTi50eHQKQEAgLTAsMCArMSwyMyBAQAorU2llcnJhIExlb25lCToJMAk6CTYwMDUyNTAKK0Vhc3Rlcm4yCToJMQk6CTExOTE1MzkKK05vcnRoZXJuMiA6IDEgOiAxNzE4MjQwCitXZXN0ZXJuMyA6IDEgOiA5NTA5MjQKK1NvdXRoZXJuIDogMSA6IDEwOTI2NTcKK0thaWxhaHVuIERpc3RyaWN0IAk6CTEJOgkzNTgxOTAKK0tlbmVtYSBEaXN0cmljdCAJOgkxCToJNDk3OTQ4CitLb25vIERpc3RyaWN0IAk6CTEJOgkzMzU0MDEKK05vcnRoZXJuCToJMQk6CTE3NDU1NTMKK0JvbWJhbGkgRGlzdHJpY3QgCToJMQk6CTQwODM5MAorS2FtYmlhIERpc3RyaWN0IAk6CTEJOgkyNzA0NjIKK0tvaW5hZHVndSBEaXN0cmljdCAJOgkxCToJMjY1NzU4CitQb3J0IExva28gRGlzdHJpY3QgCToJMQk6CTQ1Mzc0NgorVG9ua29saWxpIERpc3RyaWN0IAk6CTEJOgkzNDcxOTcKK1NvdXR0aGVybgk6CTEJOgkxMDkyNjU3CitCbyBEaXN0cmljdCAJOgkxCToJNDYzNjY4CitCb250aGUgRGlzdHJpY3QgCToJMQk6CTEyOTk0NworTW95YW1iYSBEaXN0cmljdCAJOgkxCToJMjYwOTEwCitQdWplaHVuIERpc3RyaWN0IAk6CTEJOgkyMjgzOTIKK1NoZXJicm8gVXJiYW4gRGlzdHJpY3QgCToJMQk6CTk3NDAKK1dlc3Rlcm4JOgkxCToJOTQ3MTIyCitSdXJhbCBEaXN0cmljdCAJOgkxCToJMTc0MjQ5CitVcmJhbiBEaXN0cmljdCAJOgkxCToJNzcyODczCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9TSUVSUkFMRU9ORV9BUkVBLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL1NJRVJSQUxFT05FX0FSRUEudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI3ZWIwMmIKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9TSUVSUkFMRU9ORV9BUkVBLnR4dApAQCAtMCwwICsxLDIzIEBACitTaWVycmEgTGVvbmUJOgkwCToJNzE3NDAKK0Vhc3Rlcm4yCToJMQk6CTE1NTUzCitOb3J0aGVybjIgOiAxIDogMzU5MzYKK1dlc3Rlcm4zIDogMSA6IDU1NworU291dGhlcm4gOiAxIDogMTk2OTQKK0thaWxhaHVuIERpc3RyaWN0IAk6CTEJOgkzODU5CitLZW5lbWEgRGlzdHJpY3QgCToJMQk6CTYwNTMKK0tvbm8gRGlzdHJpY3QgCToJMQk6CTU2NDEKK05vcnRoZXJuCToJMQk6CTM1OTM2CitCb21iYWxpIERpc3RyaWN0IAk6CTEJOgk3OTg1CitLYW1iaWEgRGlzdHJpY3QgCToJMQk6CTMxMDgKK0tvaW5hZHVndSBEaXN0cmljdCAJOgkxCToJMTIxMjEKK1BvcnQgTG9rbyBEaXN0cmljdCAJOgkxCToJNTcxOQorVG9ua29saWxpIERpc3RyaWN0IAk6CTEJOgk3MDAzCitTb3V0dGhlcm4JOgkxCToJMTk2OTQKK0JvIERpc3RyaWN0IAk6CTEJOgk1MjE5CitCb250aGUgRGlzdHJpY3QgCToJMQk6CTM0NTgKK01veWFtYmEgRGlzdHJpY3QgCToJMQk6CTY5MDIKK1B1amVodW4gRGlzdHJpY3QgCToJMQk6CTQxMDUKK1NoZXJicm8gVXJiYW4gRGlzdHJpY3QgCToJMQk6CTEwCitXZXN0ZXJuCToJMQk6CTU1NworUnVyYWwgRGlzdHJpY3QgCToJMQk6CTU0NAorVXJiYW4gRGlzdHJpY3QgCToJMQk6CTEzCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9TSUVSUkFMRU9ORV9QT1BVTEFUSU9OLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL1NJRVJSQUxFT05FX1BPUFVMQVRJT04udHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFhMjRjZWUKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9TSUVSUkFMRU9ORV9QT1BVTEFUSU9OLnR4dApAQCAtMCwwICsxLDIzIEBACitTaWVycmEgTGVvbmUJOgkwCToJNjAwNTI1MAorRWFzdGVybjIJOgkxCToJMTE5MTUzOQorTm9ydGhlcm4yIDogMSA6IDE3MTgyNDAKK1dlc3Rlcm4zIDogMSA6IDk1MDkyNAorU291dGhlcm4gOiAxIDogMTA5MjY1NworS2FpbGFodW4gRGlzdHJpY3QgCToJMQk6CTM1ODE5MAorS2VuZW1hIERpc3RyaWN0IAk6CTEJOgk0OTc5NDgKK0tvbm8gRGlzdHJpY3QgCToJMQk6CTMzNTQwMQorTm9ydGhlcm4JOgkxCToJMTc0NTU1MworQm9tYmFsaSBEaXN0cmljdCAJOgkxCToJNDA4MzkwCitLYW1iaWEgRGlzdHJpY3QgCToJMQk6CTI3MDQ2MgorS29pbmFkdWd1IERpc3RyaWN0IAk6CTEJOgkyNjU3NTgKK1BvcnQgTG9rbyBEaXN0cmljdCAJOgkxCToJNDUzNzQ2CitUb25rb2xpbGkgRGlzdHJpY3QgCToJMQk6CTM0NzE5NworU291dHRoZXJuCToJMQk6CTEwOTI2NTcKK0JvIERpc3RyaWN0IAk6CTEJOgk0NjM2NjgKK0JvbnRoZSBEaXN0cmljdCAJOgkxCToJMTI5OTQ3CitNb3lhbWJhIERpc3RyaWN0IAk6CTEJOgkyNjA5MTAKK1B1amVodW4gRGlzdHJpY3QgCToJMQk6CTIyODM5MgorU2hlcmJybyBVcmJhbiBEaXN0cmljdCAJOgkxCToJOTc0MAorV2VzdGVybgk6CTEJOgk5NDcxMjIKK1J1cmFsIERpc3RyaWN0IAk6CTEJOgkxNzQyNDkKK1VyYmFuIERpc3RyaWN0IAk6CTEJOgk3NzI4NzMKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9TSU5HQVBPUkVfQVJFQS50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9TSU5HQVBPUkVfQVJFQS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTUyN2MwZgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL1NJTkdBUE9SRV9BUkVBLnR4dApAQCAtMCwwICsxLDcgQEAKK1NJTkdBUE9SRQk6CTAJOgk2OTMKK0NlbnRyYWwgUmVnaW9uIFtTaW5nYXBvcmVdIAk6CTEJOgkxMzIuNworRWFzdCBSZWdpb24gCToJMQk6CTkzLjEKK05vcnRoIEVhc3QgUmVnaW9uIAk6CTEJOgkxNDEuMQorTm9ydGggUmVnaW9uIAk6CTEJOgk5Ny4zCitTSU5HQVBPUkUgW1dlc3QgUmVnaW9uXQk6CTEJOgkyMDEuMworCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9TSU5HQVBPUkVfUE9QVUxBVElPTi50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9TSU5HQVBPUkVfUE9QVUxBVElPTi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzUwMTBiOQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL1NJTkdBUE9SRV9QT1BVTEFUSU9OLnR4dApAQCAtMCwwICsxLDYgQEAKK1NJTkdBUE9SRQk6CTAJOgk0NDkyMTUwIAorQ2VudHJhbCBSZWdpb24gW1NpbmdhcG9yZV0gCToJMQk6CTMwMDAwMDAKK0Vhc3QgUmVnaW9uIAk6CTEJOgkwCitOb3J0aCBFYXN0IFJlZ2lvbiAJOgkxCToJMAorTm9ydGggUmVnaW9uIAk6CTEJOgkwCitTSU5HQVBPUkUgW1dlc3QgUmVnaW9uXQk6CTEJOgkwCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9TTE9WQUtJQV9QT1BVTEFUSU9OLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL1NMT1ZBS0lBX1BPUFVMQVRJT04udHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBhNWZjNjQKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9TTE9WQUtJQV9QT1BVTEFUSU9OLnR4dApAQCAtMCwwICsxIEBACitTTE9WQUtJQTowOjUzNzQzNjI6Mjg1CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9TTE9WRU5JQV9BUkVBLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL1NMT1ZFTklBX0FSRUEudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY0YzQ4ZmUKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9TTE9WRU5JQV9BUkVBLnR4dApAQCAtMCwwICsxIEBACisgU2xvdmVuaWphIDogMSA6IDIwMjUxLjAKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL1NMT1ZFTklBX1BPUFVMQVRJT04udHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvU0xPVkVOSUFfUE9QVUxBVElPTi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjZlYWUxNwotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL1NMT1ZFTklBX1BPUFVMQVRJT04udHh0CkBAIC0wLDAgKzEgQEAKKyBTbG92ZW5pamEgOiAxIDogMTk0ODA2MApkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvU09NQUxJQV9BUkVBLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL1NPTUFMSUFfQVJFQS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDcxMWUwNgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL1NPTUFMSUFfQVJFQS50eHQKQEAgLTAsMCArMSwxMDUgQEAKK1NPTUFMSUE6MDo2Mzc2NTcKK1NBTkFBRzoxOjIzMjkzLjYwOQorSi4gSE9PU0U6MToxODY5My45MTAKK1cuIEdBTEJFRUQ6MToxMDQyMC45OTAKK0JBTkFBRElSOjE6MTk5LjA5NAorTlVHQUFMOjE6ODM5OC43NTYKK0dBTEdVRFVVRDoxOjE3MjU0Ljc0MAorSi4gREhFWEU6MToxMTYxNi42MTAKK1NILiBESEVYRToxOjgwNDMuNzQ1CitCQVJJOjE6MjgxNTMuMTUwCitCQVk6MToxNDc4Mi4wMDAKK1NILiBIT09TRToxOjExNDkwLjU1MAorSElJUkFOOjE6MTM2NjIuODMwCitCQUtPT0w6MToxMDM2My4yMDAKK01VRFVHOjE6MjYzNjMuMDkwCitUT0ctREhFRVI6MToxMjI0NS40NzAKK0dBRE86MToxMjQ5MC45MDAKK0tJU01BQVlPOjI6MS4wMDAwMDAKK0JBS0k6Mjo4NDUuMDI5OTkzCitLSVNNQUFZTzoyOjIuMjcxMzA4CitNQVJLQToyOjQzMC4zNzY3NjUKK0pBV0hBUjoyOjIwNTEuNzM2NDgwCitDQVlOQUJPOjI6MjU0Ni41NzIxNzEKK0JVJ0FBTEU6MjozNDExLjU4ODMzNworQlVVTE8gQlVSRE8gKEJVTEEtQlJJRik6Mjo2NDA2Ljg1ODkyMgorV0FOTEEgV0VZTjoyOjI1NzUuNzExODk2CitRT1JZT09MRVk6MjoxNDUwLjg0MTk1MAorQ0FEQUFETzoyOjIzODAuMDM5NDMyCitUQUxFRVg6MjoxMzE0LjM1ODU3MworQ0VFTC1BRldFSU46Mjo2NTg4Ljg2Mjg0MQorU0FZTEFDOjI6MS4xMjA2MzQKK0RIVVVTQU1BUkVFQjoyOjQ0NjQuMDQ2NTMwCitUSVlFRUdMT1c6MjoyNjY3LjEwNzEzMQorQlVVUiBYQUtBQkEgKEJVUiBIQUNBQkEpOjI6NTg4OC40NzY2MjIKK0JBTkRFUi1CRVlMQSAoQkVOREVSQkVMQToyOjQ1MzUuNjU4MDY1CitIT0JZTzoyOjExMzgwLjU4NjAxNQorQkVSQkVSQToyOjI1MDcuODczNzgwCitCRUxFRCBYQUFXTyAoQlVMQS1IQVdBKToyOjExMzUuNTc3NDkwCitCT1NBQVNPOjI6MzI4Ny41MjE4ODEKK1hVRFVSIChIVURVUik6MjoyMTE5Ljg5MzU1MgorU0FZTEFDOjI6MTQ5Mi40NTE2MjIKK1hBUkFSREhFRVJFIChIQVJBUkRFUkUpOjI6MjIzOS4xMzIwOTAKK1NBQUtPVzoyOjUwNzkuNDA1OTY3CitBRk1BRE9XOjI6MTA2NDMuNjAyMjI3CitDRUVSSUdBQUJPIChFUklHQVZPKToyOjExMTQ1LjM3Mjg2NworSkFSSUlCQU46Mjo1MDYxLjk0NjkxOQorUkFCIERIVVVSRToyOjEzMzEuMzM2NjgxCitLSVNNQUFZTzoyOjMuOTYzNTk4CitKQUxBTEFRU0k6MjoxMzAyLjU4ODc0MgorU0FZTEFDOjI6MS4wMDAwMDAKK0JBQVItREhFRVJFOjI6NDA3Mi43NzcxOTMKK0dBQUxLQUNBWU86Mjo2ODQ0LjQ2MzUwNworS0lTTUFBWU86MjoyLjM3NDUzMQorUUFOU0FYIERIRUVSRToyOjExNzkuNzY2MzQ5CitCQURIQU46Mjo1NTU5LjM3MzI5MgorSEFSR0VZU0E6MjozMTIzLjAxNTEyOQorSkFNQUFNRToyOjgxMS42MjEyNDAKK1NIRUVLSDoyOjk0Mi45ODExNjMKK0tJU01BQVlPOjI6MzM3MS4zMzk0MDUKK1NBWUxBQzoyOjEuMDAwMDAwCitCVVVIT09ETEU6MjoxOTY5Ljc3MjU3NQorQlVSVElOTEU6MjoxMzgxLjA5OTAzMworS0lTTUFBWU86MjoxLjAwMDAwMAorSklMSUI6MjozMTI1LjYxNTY5NgorQlVSQU86Mjo0NDcyLjY3NDg5OQorQk9PUkFNQToyOjY4Ny4xMTc5MjkKK0JBREhBQURIRToyOjM4NTMuMDc0OTkyCitMQVNDQUFOT0QgKExBU0FOT0QpOjI6MTY2MS4wNTE3ODcKK0NFRUwgQkFSREUgKEVMIEJBUkRFKToyOjMxNDYuOTY5NTIzCitTQUJMQUxFOjI6Mjc5NS41ODMxMTEKK0RPTE9XOjI6NDk1LjU5MDAyNAorS0lTTUFBWU86MjoxLjAwMDAwMAorR0FST09XRToyOjEyODcuMDk0NDg0CitDQUFCVURXQUFROjI6MjA4NC45MTEwMjUKK0NFRUwgREhFRVIgKEVMIERFUkUpOjI6MzY1NC4wMDYyNDgKK0JBUkFBV0U6MjoxMjg4LjEzMTYyMAorS0lTTUFBWU86MjoxLjAwMDAwMAorS0lTTUFBWU86MjoxLjA3ODMyNgorQkFESEFBREhFOjI6MS4wMDAwMDAKK0tJU01BQVlPOjI6MS4wMDAwMDAKK0NFRUwgV0FBUSAoRUwgV0FLKToyOjIyNjcuMzM2MDc4CitNT0dBRElTSE86MjoxOTkuMDk0MDAwCitCQURIQUFESEU6MjoxLjUyMzUyMQorT09EV0VZTkU6MjoyMzEzLjQ2OTE5MgorUUFSREhPOjI6NzUyNC42NDc4MzQKK0VZTDoyOjEzOTguNTg3MDI5CitRQU5EQUxBOjI6MzMxOC41MDY0ODYKK0dBQklMRVk6Mjo5NTcuNTExODA0CitYVURVTjoyOjEzNTYuNTY1MDkzCitHQVJCQUhBQVJBWToyOjIyMTIuNDgyNzk4CitMVVVLOjI6MjMwNy4xMzY0MTcKK0tVTlRVV0FBUkFZOjI6MTE0MC43NjU2MzEKK0RJSU5TT09SOjI6MzI2MS41MTMwNzEKK0NFRUwgQlVVUiAoRUwgQlVSKToyOjQ2NzEuNzM2NzY1CitCQVlESEFCTzoyOjQ0NTIuMjQzOTU4CitBRkdPT1lFIChBRkdPSSk6MjoxODA5LjEzOTAyOAorQkVMRUQgV0VZTjoyOjU5NTMuMzgyMzM3CitDQUxBV0xBIChBTFVMQSk6MjoyMDQ1LjA5Mzc5MworSVNLVVNIVUJBTjoyOjc0NDEuNzIxOTQyCitXQUpJRDoyOjEwOTcuODkzMTEyCitCQUxDQUQ6MjoxNzM4LjU3MTY5NgorQ0FEQUxFOjI6MjQ4Ni40NTQ2NzAKK0dPTERPR09COjI6ODM2Ljk2MTQ2OQorQUFEQU46MjoxNzY2Ljk4MjE1MworTFVHSEFZQToyOjgwNS44ODYzMjcKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL1NPTUFMSUFfUE9QVUxBVElPTi50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9TT01BTElBX1BPUFVMQVRJT04udHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkzNjg1NDMKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9TT01BTElBX1BPUFVMQVRJT04udHh0CkBAIC0wLDAgKzEsMTA1IEBACitTT01BTElBOjA6ODU5MTYyOToxMy40NzM3NDcKK0JBS09PTDoxOjI5MTY4ODoyOC4xNDY1MTgKK0JBTkFBRElSOjE6MTAyMDA2Njo1MTIzLjUzOTYzNQorQkFSSToxOjQzNTk2NToxNS40ODU0NzkKK0JBWToxOjg4NDUwOTo1OS44MzY4OTYKK0dBRE86MTo0NjEwMjA6MzYuOTA4NDY5CitHQUxHVURVVUQ6MTo1MDE4MDQ6MjkuMDgyMDk2CitISUlSQU46MTo0MzAxNjM6MzEuNDg0MTgwCitKLiBESEVYRToxOjI4OTg5NjoyNC45NTUzMDEKK0ouIEhPT1NFOjE6NTM0MTg5OjI4LjU3NTU2MworTVVEVUc6MTo2MTA0MDg6MjMuMTUzODg3CitOVUdBQUw6MToyMTk5ODA6MjYuMTkxOTc0CitTQU5BQUc6MTo0MjQ2OTM6MTguMjMyMTY4CitTSC4gREhFWEU6MTo2OTA0NDc6ODUuODM2NTEwCitTSC4gSE9PU0U6MToxMTE5MjAxOjk3LjQwMTg2NQorVE9HLURIRUVSOjE6NzUyODY5OjYxLjQ4MTQyOQorVy4gR0FMQkVFRDoxOjEyODQ2MTc6MTIzLjI3MjA2OQorQ0FMQVdMQSAoQUxVTEEpOjI6NzI2NjA6MzUuNTI5MzQwCitRQU5EQUxBOjI6NzI2NjA6MjEuODk1NjQzCitTQVlMQUM6MjoxMjg0NjE6MTI4NDYxLjcwMDAwMAorU0FZTEFDOjI6MTI4NDYxOjEyODQ2MS43MDAwMDAKK1NBWUxBQzoyOjEyODQ2MTo4Ni4wNzQyODEKK0lTS1VTSFVCQU46Mjo3MjY2MDo5Ljc2Mzk4MQorU0FZTEFDOjI6MTI4NDYxOjExNDYzMy4wNTU5MzEKK0JPU0FBU086Mjo3MjY2MDoyMi4xMDIwMDgKK0JBREhBTjoyOjE0MTU2NDoyNS40NjQwODEKK0NFRVJJR0FBQk8gKEVSSUdBVk8pOjI6MTQxNTY0OjEyLjcwMTYyNAorTFVHSEFZQToyOjEyODQ2MToxNTkuNDA0MjQzCitCRVJCRVJBOjI6MTI4NDYxOjUxLjIyMzM1MQorQ0VFTC1BRldFSU46MjoxNDE1NjQ6MjEuNDg1Mzk3CitCQUtJOjI6MTI4NDYxOjE1Mi4wMjAyODUKK1FBUkRITzoyOjcyNjYwOjkuNjU2Mzc3CitCT09SQU1BOjI6MTI4NDYxOjE4Ni45NTcyODEKK0hBUkdFWVNBOjI6MTI4NDYxOjQxLjEzMzg3MQorR0FCSUxFWToyOjEyODQ2MToxMzQuMTYyMDAxCitTSEVFS0g6MjoxNTA1NzM6MTU5LjY3ODQ4MQorQlVSQU86MjoxNTA1NzM6MzMuNjY1MjY4CitDQVlOQUJPOjI6MTUwNTczOjU5LjEyODAzMgorT09EV0VZTkU6MjoxNTA1NzM6NjUuMDg1NzE3CitCQU5ERVItQkVZTEEgKEJFTkRFUkJFTEE6Mjo3MjY2MDoxNi4wMTk5MTAKK1RBTEVFWDoyOjM2NjYzOjI3Ljg5NDQ2OAorWFVEVU46MjozNjY2MzoyNy4wMjY1OTQKK0dBUk9PV0U6MjozNjY2MzoyOC40ODUzNDcKK0xBU0NBQU5PRCAoTEFTQU5PRCk6MjozNjY2MzoyMi4wNzIzNjAKK0JVVUhPT0RMRToyOjE1MDU3Mzo3Ni40NDIyMjYKK0VZTDoyOjM2NjYzOjI2LjIxNDU1MworQlVSVElOTEU6MjozNjY2MzoyNi41NDY0OTEKK0pBUklJQkFOOjI6MTIyMDgxOjI0LjExNzUxOQorR0FBTEtBQ0FZTzoyOjEyMjA4MToxNy44MzY1NDgKK0dPTERPR09COjI6MTIyMDgxOjE0NS44NjI4NjgKK0hPQllPOjI6MTIyMDgxOjEwLjcyNzE4MAorQ0FEQUFETzoyOjEwMDM2MDo0Mi4xNjc3MDUKK0NBQUJVRFdBQVE6MjoxMDAzNjA6NDguMTM2NzMwCitESFVVU0FNQVJFRUI6MjoxMDAzNjA6MjIuNDgyMDI0CitCRUxFRCBXRVlOOjI6MTQzMzg3OjI0LjA4NTA3NgorQ0VFTCBCVVVSIChFTCBCVVIpOjI6MTAwMzYwOjIxLjQ4MjU0NgorWEFSQVJESEVFUkUgKEhBUkFSREVSRSk6MjoxMjIwODE6NTQuNTIxODM5CitDRUVMIEJBUkRFIChFTCBCQVJERSk6Mjo1ODMzNzoxOC41Mzc3MDcKK1JBQiBESFVVUkU6Mjo1ODMzNzo0My44MTg4MTgKK0NFRUwgREhFRVIgKEVMIERFUkUpOjI6MTAwMzYwOjI3LjQ2NTk2MworWFVEVVIgKEhVRFVSKToyOjU4MzM3OjI3LjUxOTExOAorVElZRUVHTE9XOjI6NTgzMzc6MjEuODcyOTg3CitCVVVMTyBCVVJETyAoQlVMQS1CUklGKToyOjE0MzM4NzoyMi4zODAzMzgKK0xVVUs6Mjo3NjgzNjozMy4zMDM5MTEKK0RPTE9XOjI6NzY4MzY6MTU1LjA0MDc4NgorV0FKSUQ6Mjo1ODMzNzo1My4xMzU5NTYKK0JBWURIQUJPOjI6MjIxMTI3OjQ5LjY2NjQ3MgorQkVMRUQgWEFBV08gKEJVTEEtSEFXQSk6Mjo3NjgzNjo2Ny42NjMwNzcKK0FBREFOOjI6MTcyNjExOjk3LjY4NzMxOQorR0FSQkFIQUFSQVk6Mjo3NjgzNjozNC43Mjg3MDcKK0pBTEFMQVFTSToyOjE0MzM4NzoxMTAuMDc5MDAwCitDQURBTEU6MjoxNzI2MTE6NjkuNDIwODMxCitCVVVSIFhBS0FCQSAoQlVSIEhBQ0FCQSk6MjoyMjExMjc6MzcuNTUyNTM5CitXQU5MQSBXRVlOOjI6MTU5ODg1OjYyLjA3NDQzNAorSkFXSEFSOjI6MTcyNjExOjg0LjEyOTU5MQorQ0VFTCBXQUFRIChFTCBXQUspOjI6NzY4MzY6MzMuODg4NTIxCitRQU5TQVggREhFRVJFOjI6MjIxMTI3OjE4Ny40MzMwODgKK0JBQVItREhFRVJFOjI6NzY4MzY6MTguODY1OTE1CitCQUxDQUQ6MjoxNzI2MTE6OTkuMjgzNjU0CitBRkdPT1lFIChBRkdPSSk6MjoxNTk4ODU6ODguMzc2NzY2CitESUlOU09PUjoyOjIyMTEyNzo2Ny43OTg5NzcKK1FPUllPT0xFWToyOjE1OTg4NToxMTAuMjAyMTE5CitNT0dBRElTSE86MjoxMDIwMDY2OjUxMjMuNTM5NjM1CitTQUFLT1c6Mjo5NjYzMjoxOS4wMjQyNzIKK01BUktBOjI6MTU5ODg1OjM3MS41MDIwNjYKK0tVTlRVV0FBUkFZOjI6MTU5ODg1OjE0MC4xNTY2MjIKK1NBQkxBTEU6MjoxNTk4ODU6NTcuMTkyMzEwCitCQVJBQVdFOjI6MTU5ODg1OjEyNC4xMjIyOTgKK0JVJ0FBTEU6Mjo5NjYzMjoyOC4zMjQ2MzcKK0FGTUFET1c6MjozNTYxMjozLjM0NTkxNgorSklMSUI6Mjo5NjYzMjozMC45MTYxNDkKK0pBTUFBTUU6MjozNTYxMjo0My44NzgzNDkKK0tJU01BQVlPOjI6MzU2MTI6MTAuNTYzMzM5CitCQURIQUFESEU6MjozNTYxMjo5LjI0MjY0NAorS0lTTUFBWU86MjozNTYxMjozNTYxMi42MDAwMDAKK0tJU01BQVlPOjI6MzU2MTI6MTU2NzkuMzM1NDMxCitLSVNNQUFZTzoyOjM1NjEyOjMzMDI1LjgxOTY1MAorS0lTTUFBWU86MjozNTYxMjozNTYxMi42MDAwMDAKK0tJU01BQVlPOjI6MzU2MTI6MzU2MTIuNjAwMDAwCitLSVNNQUFZTzoyOjM1NjEyOjg5ODQuOTE3MjM5CitLSVNNQUFZTzoyOjM1NjEyOjM1NjEyLjYwMDAwMAorS0lTTUFBWU86MjozNTYxMjozNTYxMi42MDAwMDAKK0tJU01BQVlPOjI6MzU2MTI6MTQ5OTcuNzQwNjA2CitCQURIQUFESEU6MjozNTYxMjozNTYxMi42MDAwMDAKK0JBREhBQURIRToyOjM1NjEyOjIzMzc1LjE5NDY5NwpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvU09VVEggQUZSSUNBX0FSRUEudHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvU09VVEggQUZSSUNBX0FSRUEudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU4YmYzOWQKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9TT1VUSCBBRlJJQ0FfQVJFQS50eHQKQEAgLTAsMCArMSw0MDcgQEAKK1NPVVRIIEFGUklDQTowOjEyMTk5MTIKK09SQU5HRSBGUkVFIFNUQVRFOjE6NTAyMTYuMzk4CitXRVNURVJOIENBUEU6MTo1MjA2MS41MzEKK09SQU5HRToxOjY5OTAuOTU1CitOT1JUSEVSTiBDQVBFOjE6MTQwNTIxLjU5NAorRUFTVEVSTiBUVkw6MTo2Nzg4Ni42NDgKK1BXViBbR2F1dGVuZ106MToxNzAxMAorTk9SVEhFUk4gVFZMOjE6MTQwNTIxLjU5NAorRUFTVEVSTiBDQVBFOjE6Njc4ODYuNjQ4CitOT1JUSCBXRVNUOjE6NDM4NDguODc5CitOQVRBTDoxOjM1NjcyLjAzOQorTE9XRVIgVU1GT0xPWkk6Mjo0NDkuNDYyNTg4CitOR09UU0hFOjI6MTI5MC45MjU4NDIKK05PUlRIRVJOIFRWTC0yNjoyOjIzNi41OTY5NjIKK0tPUFBJRVM6Mjo2MTMuNTY1ODc2CitCQVJLTFkgV0VTVDoyOjI1NTMuMDM0NzE0CitOQVRBTC0xNDoyOjEzMi42MDUyNjIKK1NURUxMRU5CT1NDSDoyOjE5Mi41MDk5MjMKK0RVUkJBTi9DSEFUUy46MjoxMDEuMDg2NTk2CitOQVRBTC01NzoyOjM2NC45OTU5NTcKK0NBUk9MSU5BOjI6Mzc4Ni42ODI4NTUKK05BVEFMLTE2OjI6NjAuMjc3NTYxCitOS0FOREFMQToyOjY2Ni4yNDE0ODQKK0tVSUxTUklWRVI6Mjo0Ni45MzE4MzAKK05PUlRIIFdFU1QtMjM6MjoxMDU3LjgzNzY5NAorTkFUQUwtNTQ6MjozNS4yMTMzODAKK1NPVVRQQU5TQkVSRzoyOjQ0NzEuNjAyNTg0CitGUkFTRVJCVVJHOjI6NDU3MS44Njg1OTMKK0hVTUFOU0RPUlA6MjoxNTQ3LjgxNTY0MgorSEVSQkVSVDoyOjI4NzAuMzE1MDA3CitDQUxFRE9OOjI6MTU4Mi44MjE5ODQKK0VBU1RFUk4gQ0FQRS0xOjI6MTU1NTMuOTE4MjE2CitQT1RHSUVURVJTUlVTOjI6MTUwNzMuMjgwOTI0CitNQUxBTVVFTEU6MjoxNDM5LjE5MTI3MQorRVNUQ09VUlQ6MjoxMDAzLjIwMjczNgorUVVFRU5TVE9XTjoyOjQyLjU5NzYzOQorUEFVTFBJRVRFUlNCVVJHOjI6NTcwLjMxMjIxNgorTU9VVFNFOjI6Mjg2LjYyMjE0NQorSE9FVkVMRFJJRjoyOjEzOTUuODQ4MjYyCitDQUxWSU5JQToyOjE0NzA2LjYzODY4OQorTFlERU5CVVJHOjI6NDUwOS45NDQwMTEKK0RVUkJBTi9DSEFUUy46MjoxMC4xMTkyOTIKK0tVUlVNQU46Mjo2NjIxLjYyMTcyOQorV0VQRU5FUjoyOjczMC43Mzk3MzQKK09CRVJIT0xaRVI6Mjo0LjA4NTUzOAorVEFSS0FTVEFEOjI6MTI3NS4zNTEwMDUKK05BVEFMLTgwOjI6NDcuMzI3NDUyCitNVE9OSkFORU5JOjI6MzMzLjg4MzEyOAorTk9SVEhFUk4gVFZMLTI4OjI6MzI2LjEwMzc2NgorVlJZQlVSRzoyOjQxOTIuOTY0MjA1CitFRVJTVEVIT0VLOjI6NTMuNjI0MTA5CitGT1JUIEJFQVVGT1JUOjI6NTMyLjA5MTY4MworQkVSR1ZJTExFOjI6OTk2LjIzMjMzMworV0FSUkVOVE9OOjI6NjMzLjM5MTM0OQorR1JPQkxFUlNEQUw6MjoyMjU0LjUzNjk3NworTkFUQUwtNDQ6MjozNC4zNzcxNzcKK1RIRVVOSVNTRU46Mjo3MzAuOTM0MTE0CitCRURGT1JEOjI6MTEwOC43MDU4OTgKK05BVEFMLTUxOjI6Ni41MjQxNDYKK05JR0VMOjI6Ni43NjQ5MjcKK01BSExBQkFUSU5JOjI6NTUyLjI2Nzc5MgorUk9PREUgUE9SVDoyOjEuODg0MjkwCitFQVNURVJOIFRWTC0yMToyOjcwLjIxOTM5MgorU1RFWU5TQlVSRzoyOjEwOTQuMDg0NDAzCitFREVOQlVSRzoyOjgwMC41MTQwMzIKK0xBRElTTUlUSDoyOjE0ODcuMzM2ODMwCitJTkFOREE6MjoxMzQuMzg3MTE1CitaQVNUUk9OOjI6NzUwLjIyNjg5OAorQlJJVFNUT1dOOjI6Mjg0My4xNDkxNzkKK1ZFUkVFTklHSU5HOjI6MTIuMDgxMTkzCitUSEFCQU1PT1BPOjI6MjkwOS43NjQ5MzkKK0xBRFlCUkFORDoyOjg1OC42MjQyNDIKK1dJTExJU1RPTjoyOjUxNTQuODgyOTgxCitORUJPOjI6MzI5NC40NDQyNzcKK05PUlRIRVJOIFRWTC00MzoyOjg1NS4zNDM0MjQKK1FVRUVOU1RPV046MjozNC44MjM5MjIKK0xPV0VSIFRVR1VMQToyOjM3Ny44NDY2OTIKK0JBUkJFUlRPTjoyOjMxMzIuMTQ4MDgwCitOQVRBTC01MzoyOjE4MC42MDQ4NzIKK01BUklDTzoyOjIzMTQuODE2NzE0CitOQVRBTC00OToyOjIwLjYwMTIzNworTElPTiBSSVZFUjoyOjYxMS4xNjI3NDkKK0dMRU5DT0U6MjoyNDguNjM5MDU3CitNSURETEVCVVJHOjI6MjI5OS43MzA4NzQKK1BPVENIRUZTVFJPT006MjoxMjk3LjI4NDkzOQorVlVMQU0uL0VNWlVNQkU6Mjo5Ny43MTUzNTIKK0hPT1BTVEFEOjI6MTM1NS4wMDE0MzMKK1ZVTEFNLi9FTVpVTUJFOjI6OTQuMjg0Mzk1CitTRUtHT1NFU0U6MjozNjQuODcyMzc0CitSSVZFUlNEQUxFOjI6MTYyMS45OTg1MTAKK1dPTE1BUkFOU1NUQUQ6MjoxOTE3LjY4OTUzNgorQUxGUkVEOjI6MzA0LjQxMzE2OQorTkFUQUwtNjE6MjoxNjEuOTQyMDc1CitTVE9DSEVOU1RST006Mjo4OS4zNjQ0NDcKK1JJVEFWSToyOjM0Mi44NzYxMjUKK05BVEFMLTYwOjI6NDkuNTI5NTAwCitFTExJT1Q6Mjo4NDIuMDAzOTEzCitXT05ERVJCT09NOjI6MTAuMzgxNTE2CitNRVNTSU5BOjI6NTUxNi4wNTc3NzkKK1dBVEVSVkFMIEJPVkVOOjI6OTU5LjQzNTYwMworTk9SVEggV0VTVC0xNDoyOjYxODMuNTE2OTMyCitOQVRBTC0yOToyOjExNC4wNjAxNDIKK0ZPVVJJRVNCVVJHOjI6NDYyLjI1MTkzMworQkVMTEVWSUxMRToyOjE3Mi41MjIwNjgKK01PVVRTRToyOjI5Mi43OTY3NzIKK0hFSURFTEJFUkc6Mjo4LjM3ODIxOAorU1VUSEVSTEFORDoyOjM2MDAuNTE4NjI2CitQSElMSVBQT0xJUzoyOjEyNTguNzQ0NzE2CitFQVNUIExPTkRPTjoyOjQ4OC40NDk5NjEKK01PVU5UIENVUlJJRToyOjE3ODIuMzM2NDQ1CitIRUlMQlJPTjoyOjE0OTQuNjc0MzY5CitXT0RFSE9VU0U6MjoxMjE2LjA4OTU5NAorTkFUQUwtODY6MjoxNS40ODcyNzAKK05PUlRIRVJOIFRWTC0xODoyOjcwLjExODczNAorTkFUQUwtNDY6MjoyNTYuNzYzNDI3CitMSU5ETEVZOjI6MTExMy4yMDg2MDEKK1JFSVRaOjI6MTA3NC40MDU5NjIKK0NBUEU6Mjo2Mi44NzM0MDYKK1NXQVJUUlVHR0VOOjI6NjE5LjU4NzMyMAorTk9SVEhFUk4gVFZMLTIyOjI6Nzc5LjE4MDk5MQorSEFOS0VZOjI6Njc5LjkxMDI4NQorRUFTVEVSTiBUVkwtODoyOjg0Mi4xNDA4ODUKK05PUlRIRVJOIFRWTC0zMjoyOjMxMy42ODg4MzEKK05BVEFMLTQ4OjI6MjMuOTkyODI0CitCRVRITEVIRU06MjoxNDIyLjEzNDg5OQorSExBQklTQToyOjEwMTkuOTMxMjEyCitNREFOVFNBTkU6MjoyOS44OTM4MDIKK05BVEFMLTkzOjI6Mzc5LjMwNjk1MAorRUFTVEVSTiBDQVBFLTM6Mjo2NzcuNzM4MDc0CitFQVNURVJOIFRWTC0xNzoyOjkyNS41OTQ5NTkKK0pPVUJFUlRJTkE6Mjo1MzYuMjYzNzc0CitIQU5PVkVSOjI6MTQzNS42NzYxODUKK05BVEFMLTczOjI6MTQwLjc5OTY0MworTUFMTUVTQlVSWToyOjEuMzE4NTIxCitOQVRBTC00NToyOjE4LjAwNzAwNQorUkFOREZPTlRFSU46Mjo2LjM4OTI2NworUEVBUlNUT046MjoxMDQ5LjM1MDE4OAorTEFJTkdTQlVSRzoyOjM1MjMuNjQzODgyCitMQURZIEdSRVk6Mjo1ODMuNTA3MzkwCitXRVNTRUxTIEJST046Mjo2NjAuMDE4MTYyCitOQVRBTC0yODoyOjExLjM0NjE5MQorTU9LRVJPTkc6Mjo3MDEuODE4MjU0CitCUklUUzoyOjc5My4xNjA4NTcKK1NNSVRIRklFTEQ6MjoxMTMwLjUyOTg3MQorTkFUQUwtOToyOjI0Ljc0MzE3OAorS0lSS1dPT0Q6Mjo2OTguNzE0NDAxCitTQ0hXRUlaRVIgUi46MjoyOTI0LjczMzUzMgorRVJNRUxPOjI6Njk2Ni44OTg4NDAKK1dJVEJBTks6MjoyNjM5LjExMzAxOQorSkFOU0VOVklMTEU6MjoxODM3LjMyMjIyNgorTk9SVEhFUk4gVFZMLTMwOjI6MzkuMDY3NzE1CitLSU5HIFdJTExJQU0gVE9XTjoyOjI2Mi45NDY5NDMKK0ZSQU5LRk9SVDoyOjExOTEuMDY0MzgyCitWRU5URVJTQlVSRzoyOjQ5Ni4zMDEwNDgKK0VBU1RFUk4gVFZMLTc6Mjo2ODcuNDI2MzM5CitTVEVZTEVSVklMTEU6MjoxNDc3LjE3MTAwOQorU1VUVEVSSEVJTToyOjY1MS45Nzg3MzIKK1BJRVRFUlNCVVJHOjI6NTM0OC44MTE3OTgKK05PUlRIIFdFU1QtMTA6MjoxOTY0LjgxNDQyMQorRU1CVU1CVUxVOjI6MjYxLjk5MzkzMworTkFUQUwtNzg6Mjo0OS4yMzgxNTAKK0JBQkFOQU5HTzoyOjMxOC4xNjM0OTUKK1dFRU5FTjoyOjM2Mi4zOTI0ODUKK05EV0VEV0U6MjoyNjMuOTI3MjIwCitLRU5IQVJEVDoyOjE0MDkwLjgzNTg4MgorRUVSU1RFSE9FSzoyOjMzLjg2ODg0OQorUVVFRU5TVE9XTjoyOjY4OS41NDI1NDcKK01PS0VST05HOjI6NzQxLjkxMTkyOQorR0lZQU5JOjI6Mzc0Ny45MDA5OTMKK01TSU5HQToyOjc1MC45NDUxNTkKK1BJRVRFUk1BUklUWkJVUkc6MjoyNDMuMTQ4MzY3CitWUkVERU5EQUw6MjoxLjAwMDAwMAorVkVOVEVSU0RPUlA6MjoxMzUyLjgzNDk2OQorRUFTVEVSTiBUVkwtMTM6Mjo5NDEuODYxODQwCitOT1JUSEVSTiBUVkwtNzoyOjk1Ny4zODkwNzYKK01PVU5UIENVUlJJRToyOjExMi44NjE5MjIKK1VCT01CTzoyOjg1Ny4yODI3NjUKK1NUQU5ERVJUT046Mjo0NjA1Ljk2NDUxNgorTkFUQUwtNDA6MjoxNDcuMzM2NzA0CitIT0ZNRVlSOjI6OTUzLjc0OTkwNAorQUxFWEFORFJJQToyOjk2My43MTM1NDUKK01BTE1FU0JVUlk6MjoxNzk0LjQ3MjI4NgorUE9TVE1BU0JVUkc6Mjo3MTg1LjcwNzEzNworUkFOREJVUkc6MjoyLjY4NzY5MAorQlJJVFM6MjoxNS4wMzEzODgKK1VNVk9USToyOjY1My45NTgzMzAKK0FNRVJTRk9SVDoyOjE4MDEuODE4ODM2CitCRUxGQVNUOjI6Mjg2MC4xMDYzMjAKK0NBTElUWkRPUlA6Mjo0NDAuOTk0NTE1CitOQVBIVU5POjI6NTgxLjY3MDAzOAorVklDVE9SSUEgRUFTVDoyOjMyMTEuNDg0NjUxCitOT1JUSCBXRVNULTM6MjoyODc1LjQ0ODA1NgorVFJPTVBTQlVSRzoyOjc4Mi4wODI3NjAKK1JVU1RFTkJVUkc6MjoxMjAuMDIyMTcxCitCRUFVRk9SVCBXRVNUOjI6NjY4MS40MDU2MjUKK0FCRVJERUVOOjI6MjgwNi45MTIzMjcKK05FTFNQUlVJVDoyOjIwNjUuMDQyNTQ4CitTV0VMTEVOREFNOjI6MTYzNC42ODUyMzAKK1ZPTEtTUlVTVDoyOjE3MjMuOTM1ODI0CitSSUNITU9ORDoyOjM5NS44ODMyNDYKK0FMSVdBTCBOT1JUSDoyOjc5Ni45NjMyNzYKK1NBU09MU0JVUkc6MjozODIuMjIyODE0CitXSU5CRVJHOjI6MTUyLjI5NzM0MgorQ1VMTElOQU46MjoxMS4xOTAwMTQKK0JSRURBU0RPUlA6MjoxNzkwLjM0MDU1NAorQkFSS0xZIEVBU1Q6MjoxNTQxLjgwMDk0NAorR09PRFdPT0Q6MjoxNi4zODE4MjAKK1BJTEdSSU0nUyBSRVNUOjI6MTMwMTkuOTQ0MjAyCitOQVRBTC0zMDoyOjMxNS42Nzg4NjkKK05BVEFMLTExOjI6MTA5Ljg1MTQwMgorUEhJTElQU1RPV046MjoyMjI3LjgzNjU2MQorQlJBTkRGT1JUOjI6MTQ4MC42NTA4OTkKK09ERU5EQUFMU1JVUzoyOjU1Ny4yNTAwMzUKK1ZFVEVSU1RBRDoyOjgxOS4zNTQ2NzUKK0RBTk5IQVVTRVI6MjoyNDEuNTYwMDMwCitLUlVHRVJTRE9SUDoyOjEwLjM0NDExOAorTk9SVEhFUk4gVFZMLTQ1OjI6MTEyLjExMTY5NgorU1RFUktTVFJPT006Mjo2ODQuOTczNTQ1CitQUklFU0tBOjI6NTQ4Mi44MTQyNDAKK1BSRVRPUklBOjI6OS45MzQ3OTAKK05BVEFMLTcyOjI6NDUuNDI5Mzc2CitCUkFLUEFOOjI6MS45MzMyMDUKK05BUEhVTk86MjoyOTEuNTE1NzcwCitPUkFOR0UgRlJFRSBTVEFURS0zMzoyOjQ5OC4yMzc0NjkKK05BVEFMLTU1OjI6MTYwLjQ5NzA2NworTk9SVEhFUk4gVFZMLTQyOjI6NDgwLjMzMTYzMAorTkVXIEhBTk9WRVI6Mjo0NDUuMjM5NTM1CitBTEJFUlRPTjoyOjEuMDAwMDAwCitQSU5FVE9XTjoyOjEzMS44MDg3OTgKK1dBUk1CQUQ6Mjo0ODE5Ljg4NDY2NQorVU5ERVJCRVJHOjI6NzEyLjcxNTI1MQorTkFUQUwtNjI6Mjo3Mi44MjEwNjMKK01VUlJBWVNCVVJHOjI6MjEzMC43MzU4NzgKK05BVEFMLTMyOjI6My44MTY4NjQKK0hBWToyOjQ5MjQuNTQ1OTEyCitVVFJFQ0hUOjI6MTQ4Ny44MTAzNzAKK0NPTElHTlk6Mjo1ODkuODI3MDUwCitNVFVOWklOSToyOjE1MC45NjIxMzcKK0pBR0VSU0ZPTlRFSU46Mjo0ODEuODU1OTM0CitOQVRBTC05MToyOjg1Ni4wMzMyMTkKK05PUlRIIFdFU1QtMjoyOjk3NS4wMjkyNDUKK0tST09OU1RBRDoyOjE2MDUuMTIyMzcwCitOQVRBTC0zNzoyOjYzLjA4ODYxMAorSU5HV0FWVU1BOjI6MTUzNy40NTI0MjAKK1dBTFZJUyBCQVk6Mjo0MTIuOTMxNDY3CitOQVRBTC05MDoyOjEwNS41NDU1NTQKK0dFUk1JU1RPTjoyOjEuMTkxNDQzCitVTklPTkRBTEU6MjoxMjQ3LjU3NjQ4MAorVU1aSU5UTzoyOjI3Ny45NDI3NTYKK0FERUxBSURFOjI6NjEwLjE0ODM5OQorV0VTVE9OQVJJQToyOjQuNTEzMzYxCitTUFJJTkdTOjI6Mi4xNTcwMTkKK0RVTkRFRToyOjcwNi4zMjc1NTMKK0xFVEFCQToyOjExMzc2LjE3NDMyMgorU09NRVJTRVQgRUFTVDoyOjIzMDguNTE4NDQxCitXSVRaSUVTSE9FSyAoUUFRV0EpOjI6Njk5MC45NTUwMDAKK0tMSVBSSVZFUjoyOjExODAuMTkyOTE3CitNQVBVTVVMTzoyOjMwMC4xMzMyMjcKK1NUUkFORDoyOjQ4LjgzMDcyNgorTU9PSVJJVklFUjoyOjU2Mi45OTY0MDIKK01EVVRKQU5BOjI6Njk5LjU3MDM5MworTk9SVEhFUk4gVFZMLTM3OjI6ODcuMDMyOTYyCitCRU5PTkk6MjoyLjM4ODc4OAorRVNIT1dFOjI6NDA4LjA0NDMyOQorSE9QRVRPV046MjozMjQ0Ljc0MDUyMworQk9LU0JVUkc6MjoxLjQ4MzgyOAorS09NR0E6Mjo1ODUuMTQ5MTEyCitOT1JUSEVSTiBUVkwtMjA6MjoyODAuODUzNzcwCitOT1JUSEVSTiBUVkwtNDQ6Mjo0ODEuMjk1NjM5CitBTEJFUlQ6MjoxNTkzLjEwMzE4OAorV09SQ0VTVEVSOjI6MTYzMi4xNTY2MjIKK01PS0VST05HOjI6MjgxOS4yMzMxNjYKK05BVEFMLTk4OjI6MjAuNDkwMzMxCitNT0xURU5POjI6NzgyLjQ2MDU3OQorTk9SVEhFUk4gVFZMLTQ6Mjo2NjA3LjY1ODUwNworTk9SVEhFUk4gVFZMLTQ2OjI6MjAwLjQxMDU2OAorTk9SVEhFUk4gVFZMLTI0OjI6NTcuMjEwNTA5CitDQU1QRVIgRE9XTjoyOjI4Mi43MDgzNDEKK05BVEFMLTM0OjI6NDU3LjcwMzY1OQorTElDSFRFTkJVUkc6MjoxOTAzLjcxMDE0MworVlJFREVOREFMOjI6MTUwOC44MzIzNjIKK0JST05LSE9SU1RTUFJVSVQ6MjoxMy44MTQxOTAKK1NPVVRQQU5TQkVSRzoyOjEwNDE5LjY4NjgzNgorUk9VWFZJTExFOjI6MTEyMy44Njc4OTAKK05PTkdPTUE6Mjo3MzAuODEwMTIwCitERUxBUkVZVklMTEU6MjoxMjA5LjEwMTk5NAorVlJZQlVSRyAxL01BRkVLSU5HIDE6Mjo3MTYyLjMzNTczMAorRVhDRUxTSU9SOjI6NjgzLjQwMTI4NQorTk9SVEhFUk4gVFZMLTM5OjI6MTY5LjM2MDkzOAorQ0FQRToyOjEuNjM3NjY4CitFRVJTVEVIT0VLOjI6MjQuMDMyNzQwCitERVdUUyBET09SUDoyOjk5MC42MTQ3ODMKK1ZBTkRFUkJJSkwgUC46Mjo3LjAwMzA4NgorQkVUSFVMSUU6MjoxMDY0LjA5MDY0MworTk9SVEggV0VTVC01OjI6MTIwNy40MjIzNDIKK05RVVRVOjI6NjQ4LjY3Njc2NgorSU5EV0U6MjozNjAuOTczODQ2CitNT1NTRUwgQkFBSToyOjgwNS43MDY2NzYKK0VFUlNURUhPRUs6MjoxMDc4LjEwMzg1NAorTkVXQ0FTVExFOjI6NjcyLjA1ODA5MAorVklDVE9SSUEgV0VTVDoyOjQ0NjAuNjUxNzU4CitTRUtIVUtIVU5FTEFORDoyOjM3NTkuMTY0MDQ5CitFQVNURVJOIFRWTC05OjI6MjMuMDMyMjAwCitIRVJNQU5VUzoyOjI5NS45MjU0MzAKK1JVU1RFTkJVUkc6Mjo3NDkuMzY2NjExCitERSBBQVI6MjoxMjcyLjg5NDYyNQorUE9SVCBFTElTQUJFVEg6Mjo2MDQuMDI4NDEzCitNT1VUU0U6Mjo0OS41MTM1ODIKK0JMT0VNRk9OVEVJTi9CT1RTOjI6MjE5OC4zNDczOTAKK0NMQU5XSUxMSUFOOjI6Mjk0OC42Njg1MDQKK0dFT1JHRToyOjEwMzQuNDk2NDI2CitWQU5IWU5TRE9SUDoyOjM3MzUuNzk0NTc5CitOQVRBTC0xNzoyOjMzLjIyNzA4MgorRUFTVEVSTiBUVkwtMjA6MjoxNy4wMTMxNTUKK05PUlRIRVJOIFRWTC0zMToyOjI2Ni4xMjE3MjMKK0hBUlJJU01JVEg6MjoyODUzLjQ4NTA0OAorTkFUQUwtMjc6Mjo2OC44MDAzNTcKK0NBUk5BUlZPTjoyOjYyNDQuMjUwMzQ0CitWVUxBTS4vRU1aVU1CRToyOjMzNy40NDc0NzgKK09VRFRTSE9PUk46MjoxMzU4Ljg4OTIyOQorTkFUQUwtMTI6Mjo1Mi44ODk5NjAKK01BQ0xFQVI6MjoxMDA3LjE3NDIyNAorUFJJTkNFIEFMQkVSVDoyOjMxODQuMjYxNTkwCitQSUtFVEJFUkc6MjoxNzYzLjU2NDI4NAorQ0xPQ09MQU46Mjo0MzAuOTgwNDg2CitBTEJBTlk6MjoxNzk0LjUxODY2MAorQkFUSFVSU1Q6Mjo2MDguNDIyMzE2CitCRVRIQUw6MjoyMzI5LjE2OTEwMworV0lMTE9XTU9SRToyOjMwODMuMjkyMzg4CitOT1VQT09SVDoyOjU4MS45NjA3MzgKK05BTUFLV0FMQU5EOjI6MTgzMTkuNzEyNzUxCitOT1JUSEVSTiBUVkwtMzM6MjoxNDEuMDkzMjYwCitUVUxCQUdIOjI6MzU1LjI5ODk3OAorVUlURU5IQUdFOjI6MTI1Mi44MTA5NjYKK0JPTE9CRURVOjI6ODc5LjUzOTk1NgorVklMSk9FTlNLUk9PTjoyOjg0My4wNjQyNzcKK1dJVFJJVkVSOjI6MzE5OC44NTM3ODgKK0lYT1BPOjI6NTY5LjM0OTE3MAorUklDSE1PTkQ6MjoyODg2LjU5ODc4NworVUJPTUJPOjI6NzY2LjU5MjkwMAorTkFUQUwtMTg6MjoyMTEuODY5NTUxCitOT1JUSEVSTiBUVkwtMTk6Mjo1MS43NjMwMDAKK0tOWVNOQToyOjgxNi4xMjE1NDkKK1dJTkJVUkc6MjoxMTQ3LjQ0MjA1MQorSEVOTkVOTUFOOjI6MjQ3LjgzOTU3NAorQkFMRk9VUjoyOjE5ODguOTQ2NDQ2CitOQVRBTC03NDoyOjE2Ny44NTgxMTkKK05BVEFMLTg4OjI6NDYuODcyNzIyCitWUkVERUZPUlQ6Mjo1MTEuOTc3NDM5CitNREFOVFNBTkUgNDoyOjMyLjM0MDA5NAorTVBFTkRMRToyOjQ5Mi41MzY4NDkKK0hBUlRTV0FURVI6MjoyNjcuMjg3NzA5CitLUkFOU0tPUDoyOjI3Ny4yODY1MzcKK1RIQUJBWklNQkk6MjoxMTc0My4zNDI5MDMKK1BBQVJMOjI6NDQ3LjUzNzQ1MgorVlJFREVOQlVSRzoyOjI4Mi4wMjY4NjEKK0pPSEFOTkVTQlVSRzoyOjQuMzcxMDQyCitCT1RIQVZJTExFOjI6MTAxNy42ODY5NjQKK0NIQVRDQVJUOjI6MTAyNy45Nzk4NDIKK05BVEFMLTI0OjI6MTc5LjQzMjUwOAorRUVSU1RFSE9FSzoyOjQ4NC43NDY2MDgKK0JVTEZPTlRFSU46MjoxMjUzLjc2Nzk3NQorV0FURVJCRVJHOjI6MTYyNDMuMzMyOTUyCitQQVJZUzoyOjM1NS41MjA3OTYKK05BVEFMLTM5OjI6MTMuNjk5NTY3CitNT05UQUdVOjI6MTAyMy4wNzkyMDcKK05PUlRIRVJOIFRWTC00MDoyOjE2NTQuNDMzMzg2CitNQVJRVUFSRDoyOjQ5OC4yODQ3MzQKK1BJRVQgUkVUSUVGOjI6NDI3NS4wMDQxNDYKK0VaSU5HT0xXRU5JOjI6MTkyLjczMjIyMworTkFUQUwtNjk6MjoxMzUuNzY2MTU4CitXQUtLRVJTVFJPT006MjoyMjAwLjE5ODE2MAorSE9QRUZJRUxEOjI6NTA4LjI1NDE4MworTkFUQUwtMzM6Mjo1Ljc3MzAwNQorQk9DSFVNOjI6MjY2Ni40OTQ1MDYKK0tMRVJLU0RPUlA6MjoxMzQ3Ljk3MjI1MAorS0VNUFRPTiBQQVJLOjI6My41NDE3NDkKK1BPUlQgU0hFUFNUT05FOjI6MzA1LjA3OTkzOAorUkVEREVTU0JVUkc6Mjo1ODYuNzM0ODA5CitQT0xFTEE6MjoyNTEuMjIxNjY4CitWUllIRUlEOjI6MTQ0NS4zMTA3OTYKK0dPUkRPTklBOjI6MjA0MjUuOTE0NzU0CitGSUNLU0JVUkc6Mjo1MTAuMzE3OTE3CitOQVRBTC0yNjoyOjIzMS43MzI5NDEKK1NFTkVLQUw6MjoxNDI0LjY4OTczNQorS0lNQkVSTEVZOjI6MTM0NS45NDU1MjQKK0RFTE1BUzoyOjExODYuNDIwMjcwCitDUkFET0NLOjI6MjMyMi4yNTQ1MDgKK0VBU1RFUk4gVFZMLTExOjI6Njg1LjkwMzYzNgorTkFUQUwtODU6MjoyNC4yMzM1NDIKK1BFVFJVU0JVUkc6MjoxMTc0LjUxOTk0MgorRUFTVEVSTiBUVkwtMTU6Mjo5NC4xNzIwMDAKK0tPU1RFUjoyOjEwNzQuMzcwOTA0CitWUkVERToyOjIxMTIuMDE0MDM2CitTRVNIRUdPOjI6Mzc4MS45MTAzMDEKK1JPQkVSVFNPTjoyOjY2Ni41ODc5MzIKK0JPL0pBSy9LT0YvRkFVOjI6NzI1Ny4zODc2NzUKK01JRERFTFNCVVJHOjI6NTM4OC4xNjI0MDgKK1dFTExJTkdUT046MjoxODEuNDEzOTQ4CitTSU1PTlNUT1dOOjI6MTEwLjQ3MTkzOQorTkFUQUwtNzY6MjozMC4wMTU2MTgKK0dSQUFGRi1SRUlORVQ6MjoyNzIyLjI5MTY2OQorTkFUQUwtMTAxOjI6MTE2LjY4OTk2MAorQ09MRVNCRVJHOjI6MjE1NS44NjgyMzUKK0NFUkVTOjI6Mzk3NS42OTI4MDkKK0VFUlNURUhPRUs6MjoxMzI4LjE3NDUzMQorSEVJREVMQkVSRzoyOjc5NS4yNTUyMDIKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL1NPVVRIIEFGUklDQV9QT1BVTEFUSU9OLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL1NPVVRIIEFGUklDQV9QT1BVTEFUSU9OLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43OTRkNTkzCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvU09VVEggQUZSSUNBX1BPUFVMQVRJT04udHh0CkBAIC0wLDAgKzEsNDA3IEBACitTT1VUSCBBRlJJQ0EJOgkwCToJMzcxMTAyOTEKK0VBU1RFUk4gQ0FQRQk6CTEJOgk2MDA3NzQwCitFQVNURVJOIFRWTAk6CTEJOgk2MDA3NzQwCitOQVRBTAk6CTEJOgk3OTU1NTI0CitOT1JUSCBXRVNUCToJMQk6CTMyODUzODQKK05PUlRIRVJOIENBUEUJOgkxCToJNzIwOTc0CitOT1JUSEVSTiBUVkwJOgkxCToJNzIwOTc0CitPUkFOR0UJOgkxCToJNjQ1ODMzMworT1JBTkdFIEZSRUUgU1RBVEUJOgkxCToJMjUzNTk0NworUFdWIFtHYXV0ZW5nXSAJOgkxCToJODgzNzE3OAorV0VTVEVSTiBDQVBFCToJMQk6CTM0MTc2NzUKK01FU1NJTkEJOgkyCToJMTU2NzMKK1NPVVRQQU5TQkVSRwk6CTIJOgkxNTY3MworU09VVFBBTlNCRVJHCToJMgk6CTE1NjczCitOT1JUSEVSTiBUVkwtNAk6CTIJOgkxNTY3MworUE9UR0lFVEVSU1JVUwk6CTIJOgkxNTY3MworV0FMVklTIEJBWQk6CTIJOgkyNjcwMgorTUFMQU1VRUxFCToJMgk6CTE1NjczCitOT1JUSEVSTiBUVkwtNwk6CTIJOgkxNTY3MworQk9DSFVNCToJMgk6CTE1NjczCitHSVlBTkkJOgkyCToJMTU2NzMKK0xFVEFCQQk6CTIJOgkxNTY3MworTU9LRVJPTkcJOgkyCToJMTU2NzMKK1dBVEVSQkVSRwk6CTIJOgkxNTY3MworUElFVEVSU0JVUkcJOgkyCToJMTU2NzMKK1NFU0hFR08JOgkyCToJMTU2NzMKK1NFS0dPU0VTRQk6CTIJOgkxNTY3MworTU9LRVJPTkcJOgkyCToJMTU2NzMKK0JPTE9CRURVCToJMgk6CTE1NjczCitOT1JUSEVSTiBUVkwtMTgJOgkyCToJMTU2NzMKK05PUlRIRVJOIFRWTC0xOQk6CTIJOgkxNTY3MworTk9SVEhFUk4gVFZMLTIwCToJMgk6CTE1NjczCitUSEFCQVpJTUJJCToJMgk6CTE1NjczCitOT1JUSEVSTiBUVkwtMjIJOgkyCToJMTU2NzMKK1RIQUJBTU9PUE8JOgkyCToJMTU2NzMKK05PUlRIRVJOIFRWTC0yNAk6CTIJOgkxNTY3MworUklUQVZJCToJMgk6CTE1NjczCitOT1JUSEVSTiBUVkwtMjYJOgkyCToJMTU2NzMKK05BUEhVTk8JOgkyCToJMTU2NzMKK05PUlRIRVJOIFRWTC0yOAk6CTIJOgkxNTY3MworUElMR1JJTSdTIFJFU1QJOgkyCToJMTU2NzMKK05PUlRIRVJOIFRWTC0zMAk6CTIJOgkxNTY3MworTk9SVEhFUk4gVFZMLTMxCToJMgk6CTE1NjczCitOT1JUSEVSTiBUVkwtMzIJOgkyCToJMTU2NzMKK05PUlRIRVJOIFRWTC0zMwk6CTIJOgkxNTY3MworTkFQSFVOTwk6CTIJOgkxNTY3MworU0VLSFVLSFVORUxBTkQJOgkyCToJMTU2NzMKK01PS0VST05HCToJMgk6CTE1NjczCitOT1JUSEVSTiBUVkwtMzcJOgkyCToJMTU2NzMKK05FQk8JOgkyCToJMTU2NzMKK05PUlRIRVJOIFRWTC0zOQk6CTIJOgkxNTY3MworTk9SVEhFUk4gVFZMLTQwCToJMgk6CTE1NjczCitXQVJNQkFECToJMgk6CTE1NjczCitMWURFTkJVUkcJOgkyCToJMTU0MDQ0CitOT1JUSEVSTiBUVkwtNDIJOgkyCToJMTU2NzMKK05PUlRIRVJOIFRWTC00Mwk6CTIJOgkxNTY3MworTk9SVEhFUk4gVFZMLTQ0CToJMgk6CTE1NjczCitNQVJJQ08JOgkyCToJMTQyODQyCitOT1JUSCBXRVNULTIJOgkyCToJMTQyODQyCitOT1JUSCBXRVNULTMJOgkyCToJMTQyODQyCitHT1JET05JQQk6CTIJOgkyNjcwMgorTk9SVEhFUk4gVFZMLTQ1CToJMgk6CTE1NjczCitHUk9CTEVSU0RBTAk6CTIJOgkxNTQwNDQKK05PUlRIRVJOIFRWTC00Ngk6CTIJOgkxNTY3MworTU9VVFNFCToJMgk6CTE1NDA0NAorTURVVEpBTkEJOgkyCToJMTU0MDQ0CitXSVRSSVZFUgk6CTIJOgkxNTQwNDQKK0JSSVRTCToJMgk6CTE0Mjg0MgorTU9VVFNFCToJMgk6CTE1NDA0NAorTk9SVEggV0VTVC01CToJMgk6CTE0Mjg0MgorRUFTVEVSTiBUVkwtNwk6CTIJOgkxNTQwNDQKK0VBU1RFUk4gVFZMLTgJOgkyCToJMTU0MDQ0CitFQVNURVJOIFRWTC05CToJMgk6CTE1NDA0NAorQkVMRkFTVAk6CTIJOgkxNTQwNDQKK0VBU1RFUk4gVFZMLTExCToJMgk6CTE1NDA0NAorUlVTVEVOQlVSRwk6CTIJOgkxNDI4NDIKK01JRERFTFNCVVJHCToJMgk6CTE1NDA0NAorRUFTVEVSTiBUVkwtMTMJOgkyCToJMTU0MDQ0CitNT1VUU0UJOgkyCToJMTU0MDQ0CitDVUxMSU5BTgk6CTIJOgkwCitFQVNURVJOIFRWTC0xNQk6CTIJOgkxNTQwNDQKK05FTFNQUlVJVAk6CTIJOgkxNTQwNDQKK1ZSWUJVUkcgMS9NQUZFS0lORyAxCToJMgk6CTE0Mjg0MgorV09OREVSQk9PTQk6CTIJOgkwCitFQVNURVJOIFRWTC0xNwk6CTIJOgkxNTQwNDQKK0JBUkJFUlRPTgk6CTIJOgkxNTQwNDQKK1NXQVJUUlVHR0VOCToJMgk6CTE0Mjg0MgorUlVTVEVOQlVSRwk6CTIJOgkxNDI4NDIKK1dJVEJBTksJOgkyCToJMTU0MDQ0CitFQVNURVJOIFRWTC0yMAk6CTIJOgkxNTQwNDQKK0VBU1RFUk4gVFZMLTIxCToJMgk6CTE1NDA0NAorV0FURVJWQUwgQk9WRU4JOgkyCToJMTU0MDQ0CitCUk9OS0hPUlNUU1BSVUlUCToJMgk6CTAKK0VFUlNURUhPRUsJOgkyCToJMTU0MDQ0CitOT1JUSCBXRVNULTEwCToJMgk6CTE0Mjg0MgorRUVSU1RFSE9FSwk6CTIJOgkxNTQwNDQKK0JSSVRTCToJMgk6CTE0Mjg0MgorS09TVEVSCToJMgk6CTE0Mjg0MgorUFJFVE9SSUEJOgkyCToJMAorQ0FST0xJTkEJOgkyCToJMTU0MDQ0CitLUlVHRVJTRE9SUAk6CTIJOgkwCitMSUNIVEVOQlVSRwk6CTIJOgkxNDI4NDIKK05PUlRIIFdFU1QtMTQJOgkyCToJMTQyODQyCitFRVJTVEVIT0VLCToJMgk6CTE1NDA0NAorS0VNUFRPTiBQQVJLCToJMgk6CTAKK1JBTkRCVVJHCToJMgk6CTAKK0RFTE1BUwk6CTIJOgkxNTQwNDQKK1ZFTlRFUlNET1JQCToJMgk6CTE0Mjg0MgorQkVOT05JCToJMgk6CTAKK1JPT0RFIFBPUlQJOgkyCToJMAorQ09MSUdOWQk6CTIJOgkxNDI4NDIKK1JBTkRGT05URUlOCToJMgk6CTAKK0JFVEhBTAk6CTIJOgkxNTQwNDQKK0VSTUVMTwk6CTIJOgkxNTQwNDQKK0pPSEFOTkVTQlVSRwk6CTIJOgkwCitHRVJNSVNUT04JOgkyCToJMAorS1VSVU1BTgk6CTIJOgkyNjcwMgorU1BSSU5HUwk6CTIJOgkwCitIT0VWRUxEUklGCToJMgk6CTE1NDA0NAorQk9LU0JVUkcJOgkyCToJMAorRUVSU1RFSE9FSwk6CTIJOgkxNTQwNDQKK0JSQUtQQU4JOgkyCToJMAorV0VTVE9OQVJJQQk6CTIJOgkwCitPQkVSSE9MWkVSCToJMgk6CTAKK0FMQkVSVE9OCToJMgk6CTAKK1ZFUkVFTklHSU5HCToJMgk6CTAKK0RFTEFSRVlWSUxMRQk6CTIJOgkxNDI4NDIKK05JR0VMCToJMgk6CTAKK0VFUlNURUhPRUsJOgkyCToJMTU0MDQ0CitWUllCVVJHCToJMgk6CTE0Mjg0MgorSEVJREVMQkVSRwk6CTIJOgkwCitQT1RDSEVGU1RST09NCToJMgk6CTE0Mjg0MgorVkFOREVSQklKTCBQLgk6CTIJOgkwCitCQUxGT1VSCToJMgk6CTE1NDA0NAorRUVSU1RFSE9FSwk6CTIJOgkxNTQwNDQKK0tMRVJLU0RPUlAJOgkyCToJMTQyODQyCitTVEFOREVSVE9OCToJMgk6CTE1NDA0NAorUElFVCBSRVRJRUYJOgkyCToJMTU0MDQ0CitTQVNPTFNCVVJHCToJMgk6CTU2MzU0CitQQVJZUwk6CTIJOgk1NjM1NAorQU1FUlNGT1JUCToJMgk6CTE1NDA0NAorV0FLS0VSU1RST09NCToJMgk6CTE1NDA0NAorU0NIV0VJWkVSIFIuCToJMgk6CTE0Mjg0MgorSU5HV0FWVU1BCToJMgk6CTc4NzY3CitXT0xNQVJBTlNTVEFECToJMgk6CTE0Mjg0MgorVlJFREVGT1JUCToJMgk6CTU2MzU0CitIRUlMQlJPTgk6CTIJOgk1NjM1NAorVklMSk9FTlNLUk9PTgk6CTIJOgk1NjM1NAorRlJBTktGT1JUCToJMgk6CTU2MzU0CitWUkVERQk6CTIJOgk1NjM1NAorVk9MS1NSVVNUCToJMgk6CTE1NDA0NAorS09QUElFUwk6CTIJOgk1NjM1NAorUE9TVE1BU0JVUkcJOgkyCToJMjY3MDIKK0JPVEhBVklMTEUJOgkyCToJNTYzNTQKK1VCT01CTwk6CTIJOgk3ODc2NworTk9SVEggV0VTVC0yMwk6CTIJOgkxNDI4NDIKK1VUUkVDSFQJOgkyCToJNzg3NjcKK1BBVUxQSUVURVJTQlVSRwk6CTIJOgk3ODc2NworS1JPT05TVEFECToJMgk6CTU2MzU0CitOR09UU0hFCToJMgk6CTc4NzY3CitORVdDQVNUTEUJOgkyCToJNzg3NjcKK1ZSWUhFSUQJOgkyCToJNzg3NjcKK1JFSVRaCToJMgk6CTU2MzU0CitXRVNTRUxTIEJST04JOgkyCToJNTYzNTQKK1VCT01CTwk6CTIJOgk3ODc2NworTElORExFWQk6CTIJOgk1NjM1NAorSE9PUFNUQUQJOgkyCToJNTYzNTQKK0hBUlRTV0FURVIJOgkyCToJMjY3MDIKK05BVEFMLTkJOgkyCToJNzg3NjcKK0hBUlJJU01JVEgJOgkyCToJNTYzNTQKK05PTkdPTUEJOgkyCToJNzg3NjcKK09ERU5EQUFMU1JVUwk6CTIJOgk1NjM1NAorQkFSS0xZIFdFU1QJOgkyCToJMjY3MDIKK05BVEFMLTExCToJMgk6CTc4NzY3CitOQVRBTC0xMgk6CTIJOgk3ODc2NworSExBQklTQQk6CTIJOgk3ODc2NworSEVOTkVOTUFOCToJMgk6CTU2MzU0CitCTy9KQUsvS09GL0ZBVQk6CTIJOgk1NjM1NAorTkFUQUwtMTQJOgkyCToJNzg3NjcKK0RBTk5IQVVTRVIJOgkyCToJNzg3NjcKK05BVEFMLTE2CToJMgk6CTc4NzY3CitCRVRITEVIRU0JOgkyCToJNTYzNTQKK05BVEFMLTE3CToJMgk6CTc4NzY3CitWRU5URVJTQlVSRwk6CTIJOgk1NjM1NAorTkFUQUwtMTgJOgkyCToJNzg3NjcKK1dBUlJFTlRPTgk6CTIJOgkyNjcwMgorTlFVVFUJOgkyCToJNzg3NjcKK01BSExBQkFUSU5JCToJMgk6CTc4NzY3CitTRU5FS0FMCToJMgk6CTU2MzU0CitEVU5ERUUJOgkyCToJNzg3NjcKK0JVTEZPTlRFSU4JOgkyCToJNTYzNTQKK1dJTkJVUkcJOgkyCToJNTYzNTQKK0dMRU5DT0UJOgkyCToJNzg3NjcKK05BTUFLV0FMQU5ECToJMgk6CTI2NzAyCitUSEVVTklTU0VOCToJMgk6CTU2MzU0CitLTElQUklWRVIJOgkyCToJNzg3NjcKK05BVEFMLTI0CToJMgk6CTc4NzY3CitCQUJBTkFOR08JOgkyCToJNzg3NjcKK05BVEFMLTI2CToJMgk6CTc4NzY3CitOQVRBTC0yNwk6CTIJOgk3ODc2NworTkFUQUwtMjgJOgkyCToJNzg3NjcKK05BVEFMLTI5CToJMgk6CTc4NzY3CitOQVRBTC0zMAk6CTIJOgk3ODc2NworTE9XRVIgVU1GT0xPWkkJOgkyCToJNzg3NjcKK05BVEFMLTMyCToJMgk6CTc4NzY3CitIRVJCRVJUCToJMgk6CTI2NzAyCitOQVRBTC0zMwk6CTIJOgk3ODc2NworTkFUQUwtMzQJOgkyCToJNzg3NjcKK0ZPVVJJRVNCVVJHCToJMgk6CTU2MzU0CitCUkFOREZPUlQJOgkyCToJNTYzNTQKK1dJVFpJRVNIT0VLIChRQVFXQSkJOgkyCToJNjQ1ODMzMworTVRPTkpBTkVOSQk6CTIJOgk3ODc2NworSEFZCToJMgk6CTI2NzAyCitOS0FOREFMQQk6CTIJOgk3ODc2NworTkFUQUwtMzcJOgkyCToJNzg3NjcKK0tFTkhBUkRUCToJMgk6CTI2NzAyCitLSU1CRVJMRVkJOgkyCToJMjY3MDIKK0JFUkdWSUxMRQk6CTIJOgk3ODc2NworTkFUQUwtMzkJOgkyCToJNzg3NjcKK05BVEFMLTQwCToJMgk6CTc4NzY3CitNQVJRVUFSRAk6CTIJOgk1NjM1NAorTVNJTkdBCToJMgk6CTc4NzY3CitGSUNLU0JVUkcJOgkyCToJNTYzNTQKK0VTVENPVVJUCToJMgk6CTc4NzY3CitXRUVORU4JOgkyCToJNzg3NjcKK05BVEFMLTQ0CToJMgk6CTc4NzY3CitOQVRBTC00NQk6CTIJOgk3ODc2NworQ0xPQ09MQU4JOgkyCToJNTYzNTQKK05BVEFMLTQ2CToJMgk6CTc4NzY3CitLUkFOU0tPUAk6CTIJOgk3ODc2NworTkFUQUwtNDgJOgkyCToJNzg3NjcKK05BVEFMLTQ5CToJMgk6CTc4NzY3CitFWENFTFNJT1IJOgkyCToJNTYzNTQKK0JMT0VNRk9OVEVJTi9CT1RTCToJMgk6CTU2MzU0CitFU0hPV0UJOgkyCToJNzg3NjcKK05BVEFMLTUxCToJMgk6CTc4NzY3CitNVFVOWklOSQk6CTIJOgk3ODc2NworTkFUQUwtNTMJOgkyCToJNzg3NjcKK1BSSUVTS0EJOgkyCToJMjY3MDIKK05BVEFMLTU0CToJMgk6CTc4NzY3CitOQVRBTC01NQk6CTIJOgk3ODc2NworUEVUUlVTQlVSRwk6CTIJOgk1NjM1NAorVU1WT1RJCToJMgk6CTc4NzY3CitOQVRBTC01Nwk6CTIJOgk3ODc2NworT1JBTkdFIEZSRUUgU1RBVEUtMzMJOgkyCToJNTYzNTQKK01PT0lSSVZJRVIJOgkyCToJNzg3NjcKK0xBRFlCUkFORAk6CTIJOgk1NjM1NAorTUFQVU1VTE8JOgkyCToJNzg3NjcKK05BVEFMLTYwCToJMgk6CTc4NzY3CitIT1BFVE9XTgk6CTIJOgkyNjcwMgorTkFUQUwtNjEJOgkyCToJNzg3NjcKK05BVEFMLTYyCToJMgk6CTc4NzY3CitMT1dFUiBUVUdVTEEJOgkyCToJNzg3NjcKK05FVyBIQU5PVkVSCToJMgk6CTc4NzY3CitMSU9OIFJJVkVSCToJMgk6CTc4NzY3CitERVdUUyBET09SUAk6CTIJOgk1NjM1NAorTVBFTkRMRQk6CTIJOgk3ODc2NworTkRXRURXRQk6CTIJOgk3ODc2NworUkVEREVTU0JVUkcJOgkyCToJNTYzNTQKK1BJRVRFUk1BUklUWkJVUkcJOgkyCToJNzg3NjcKK05BVEFMLTY5CToJMgk6CTc4NzY3CitFREVOQlVSRwk6CTIJOgk1NjM1NAorVU5ERVJCRVJHCToJMgk6CTc4NzY3CitXRVBFTkVSCToJMgk6CTU2MzU0CitKQUdFUlNGT05URUlOCToJMgk6CTU2MzU0CitJTkFOREEJOgkyCToJNzg3NjcKK05BVEFMLTcyCToJMgk6CTc4NzY3CitOQVRBTC03Mwk6CTIJOgk3ODc2NworTkFUQUwtNzQJOgkyCToJNzg3NjcKK01PVU5UIENVUlJJRQk6CTIJOgk3ODc2NworTkFUQUwtNzYJOgkyCToJNzg3NjcKK0NBTVBFUiBET1dOCToJMgk6CTc4NzY3CitDQUxWSU5JQQk6CTIJOgkyNjcwMgorTkFUQUwtNzgJOgkyCToJNzg3NjcKK1BPTEVMQQk6CTIJOgk3ODc2NworTkFUQUwtODAJOgkyCToJNzg3NjcKK1BJTkVUT1dOCToJMgk6CTc4NzY3CitSSUNITU9ORAk6CTIJOgk3ODc2NworRFVSQkFOL0NIQVRTLgk6CTIJOgk3ODc2NworUEhJTElQU1RPV04JOgkyCToJMjY3MDIKK0RVUkJBTi9DSEFUUy4JOgkyCToJNzg3NjcKK1RST01QU0JVUkcJOgkyCToJNTYzNTQKK05BVEFMLTg1CToJMgk6CTc4NzY3CitOQVRBTC04Ngk6CTIJOgk3ODc2NworRU1CVU1CVUxVCToJMgk6CTc4NzY3CitOQVRBTC04OAk6CTIJOgk3ODc2NworU01JVEhGSUVMRAk6CTIJOgk1NjM1NAorSVhPUE8JOgkyCToJNzg3NjcKK0JSSVRTVE9XTgk6CTIJOgkyNjcwMgorUEhJTElQUE9MSVMJOgkyCToJNTYzNTQKK0NBUk5BUlZPTgk6CTIJOgkyNjcwMgorWkFTVFJPTgk6CTIJOgk1NjM1NAorTkFUQUwtOTAJOgkyCToJNzg3NjcKK0VBU1RFUk4gQ0FQRS0xCToJMgk6CTEyMDE1NAorTkFUQUwtOTEJOgkyCToJNzg3NjcKK1JPVVhWSUxMRQk6CTIJOgk1NjM1NAorV0lMTElTVE9OCToJMgk6CTI2NzAyCitWVUxBTS4vRU1aVU1CRQk6CTIJOgk3ODc2NworTkFUQUwtOTMJOgkyCToJNzg3NjcKK0JFVEhVTElFCToJMgk6CTU2MzU0CitVTVpJTlRPCToJMgk6CTc4NzY3CitDT0xFU0JFUkcJOgkyCToJMjY3MDIKK01PVU5UIENVUlJJRQk6CTIJOgkxMjAxNTQKK0RFIEFBUgk6CTIJOgkyNjcwMgorRUFTVEVSTiBDQVBFLTMJOgkyCToJMTIwMTU0CitWQU5IWU5TRE9SUAk6CTIJOgk4MTM3MworVlVMQU0uL0VNWlVNQkUJOgkyCToJNzg3NjcKK1ZJQ1RPUklBIFdFU1QJOgkyCToJMjY3MDIKK1ZVTEFNLi9FTVpVTUJFCToJMgk6CTc4NzY3CitBTEJFUlQJOgkyCToJMTIwMTU0CitBTEZSRUQJOgkyCToJNzg3NjcKK1ZFVEVSU1RBRAk6CTIJOgkxMjAxNTQKK05BVEFMLTk4CToJMgk6CTc4NzY3CitMQURZIEdSRVkJOgkyCToJMTIwMTU0CitQT1JUIFNIRVBTVE9ORQk6CTIJOgk3ODc2NworQUxJV0FMIE5PUlRICToJMgk6CTEyMDE1NAorRVpJTkdPTFdFTkkJOgkyCToJNzg3NjcKK0JBUktMWSBFQVNUCToJMgk6CTEyMDE1NAorTUFDTEVBUgk6CTIJOgkxMjAxNTQKK0hBTk9WRVIJOgkyCToJMjY3MDIKK05BVEFMLTEwMQk6CTIJOgk3ODc2NworUklDSE1PTkQJOgkyCToJMjY3MDIKK1dPREVIT1VTRQk6CTIJOgkxMjAxNTQKK1NURVlOU0JVUkcJOgkyCToJMTIwMTU0CitOT1VQT09SVAk6CTIJOgkyNjcwMgorRUxMSU9UCToJMgk6CTEyMDE1NAorVlJFREVOREFMCToJMgk6CTgxMzczCitGUkFTRVJCVVJHCToJMgk6CTI2NzAyCitNT0xURU5PCToJMgk6CTEyMDE1NAorTUlERExFQlVSRwk6CTIJOgkxMjAxNTQKK0lORFdFCToJMgk6CTEyMDE1NAorSE9GTUVZUgk6CTIJOgkxMjAxNTQKK1NURVJLU1RST09NCToJMgk6CTEyMDE1NAorQkVBVUZPUlQgV0VTVAk6CTIJOgk4MTM3MworVEFSS0FTVEFECToJMgk6CTEyMDE1NAorTVVSUkFZU0JVUkcJOgkyCToJODEzNzMKK1ZSRURFTkRBTAk6CTIJOgk4MTM3MworR1JBQUZGLVJFSU5FVAk6CTIJOgkxMjAxNTQKK1FVRUVOU1RPV04JOgkyCToJMTIwMTU0CitDUkFET0NLCToJMgk6CTEyMDE1NAorU1VUSEVSTEFORAk6CTIJOgkyNjcwMgorQ0xBTldJTExJQU4JOgkyCToJODEzNzMKK1ZJQ1RPUklBIEVBU1QJOgkyCToJMTIwMTU0CitDSEFUQ0FSVAk6CTIJOgkxMjAxNTQKK0FCRVJERUVOCToJMgk6CTEyMDE1NAorQ0VSRVMJOgkyCToJODEzNzMKK1FVRUVOU1RPV04JOgkyCToJMTIwMTU0CitTVVRURVJIRUlNCToJMgk6CTEyMDE1NAorQkVERk9SRAk6CTIJOgkxMjAxNTQKK1BFQVJTVE9OCToJMgk6CTEyMDE1NAorUElLRVRCRVJHCToJMgk6CTgxMzczCitTT01FUlNFVCBFQVNUCToJMgk6CTEyMDE1NAorUVVFRU5TVE9XTgk6CTIJOgkxMjAxNTQKK0FERUxBSURFCToJMgk6CTEyMDE1NAorRk9SVCBCRUFVRk9SVAk6CTIJOgkxMjAxNTQKK0tPTUdBCToJMgk6CTEyMDE1NAorU1RPQ0hFTlNUUk9NCToJMgk6CTEyMDE1NAorTEFJTkdTQlVSRwk6CTIJOgk4MTM3MworUFJJTkNFIEFMQkVSVAk6CTIJOgk4MTM3MworS0lORyBXSUxMSUFNIFRPV04JOgkyCToJMTIwMTU0CitNREFOVFNBTkUgNAk6CTIJOgkxMjAxNTQKK0pBTlNFTlZJTExFCToJMgk6CTEyMDE1NAorVlJFREVOQlVSRwk6CTIJOgk4MTM3MworRUFTVCBMT05ET04JOgkyCToJMTIwMTU0CitXSUxMT1dNT1JFCToJMgk6CTEyMDE1NAorTURBTlRTQU5FCToJMgk6CTEyMDE1NAorSE9QRUZJRUxECToJMgk6CTgxMzczCitNQUxNRVNCVVJZCToJMgk6CTgxMzczCitBTEJBTlkJOgkyCToJMTIwMTU0CitTVEVZTEVSVklMTEUJOgkyCToJMTIwMTU0CitUVUxCQUdICToJMgk6CTgxMzczCitXT1JDRVNURVIJOgkyCToJODEzNzMKK1VJVEVOSEFHRQk6CTIJOgkxMjAxNTQKK0tJUktXT09ECToJMgk6CTEyMDE1NAorQkFUSFVSU1QJOgkyCToJMTIwMTU0CitBTEVYQU5EUklBCToJMgk6CTEyMDE1NAorT1VEVFNIT09STgk6CTIJOgk4MTM3MworQ0FMSVRaRE9SUAk6CTIJOgk4MTM3MworV0VMTElOR1RPTgk6CTIJOgk4MTM3MworVU5JT05EQUxFCToJMgk6CTgxMzczCitMQURJU01JVEgJOgkyCToJODEzNzMKK01BTE1FU0JVUlkJOgkyCToJODEzNzMKK01PTlRBR1UJOgkyCToJODEzNzMKK1BBQVJMCToJMgk6CTgxMzczCitKT1VCRVJUSU5BCToJMgk6CTEyMDE1NAorUE9SVCBFTElTQUJFVEgJOgkyCToJMTIwMTU0CitIQU5LRVkJOgkyCToJMTIwMTU0CitHRU9SR0UJOgkyCToJODEzNzMKK1NXRUxMRU5EQU0JOgkyCToJODEzNzMKK1JPQkVSVFNPTgk6CTIJOgk4MTM3MworSFVNQU5TRE9SUAk6CTIJOgkxMjAxNTQKK0JFTExFVklMTEUJOgkyCToJODEzNzMKK0NBUEUJOgkyCToJODEzNzMKK0tOWVNOQQk6CTIJOgk4MTM3MworU1RFTExFTkJPU0NICToJMgk6CTgxMzczCitDQVBFCToJMgk6CTgxMzczCitSSVZFUlNEQUxFCToJMgk6CTgxMzczCitNT1NTRUwgQkFBSQk6CTIJOgk4MTM3MworQ0FMRURPTgk6CTIJOgk4MTM3MworR09PRFdPT0QJOgkyCToJODEzNzMKK0tVSUxTUklWRVIJOgkyCToJODEzNzMKK0hFSURFTEJFUkcJOgkyCToJODEzNzMKK1dJTkJFUkcJOgkyCToJODEzNzMKK1NJTU9OU1RPV04JOgkyCToJODEzNzMKK1NUUkFORAk6CTIJOgk4MTM3MworQlJFREFTRE9SUAk6CTIJOgk4MTM3MworSEVSTUFOVVMJOgkyCToJODEzNzMKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9TT1VUSCBLT1JFQV9BUkVBLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL1NPVVRIIEtPUkVBX0FSRUEudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE0NjcwOTAKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9TT1VUSCBLT1JFQV9BUkVBLnR4dApAQCAtMCwwICsxLDE3IEBACitTb3V0aCBLb3JlYQk6CTAJOgk5ODQ4MAorQnVzYW4gW1B1c2FuXQk6CTEJOgk3NjIuOTIKK0NodW5nY2hvbmdidWstZG8gCToJMQk6CTc0MzEuNjAKK0NodW5nY2hvbmduYW0tZG8gCToJMQk6CTg1OTcuOTQKK0RhZWd1IFtUYWVndV0JOgkxCToJODg1LjcKK0RhZWplb24gW1RhZWpvbl0JOgkxCToJNTM5LjcKK0thbmctd29uLWRvIAk6CTEJOgkxNjg3My4zOAorS3dhbmdqdQk6CTEJOgk1MDEuNDQKK0t5b25nc2FuZ2J1ay1kbyAJOgkxCToJMTkwMjQuODEKK0t5b25nc2FuZ25hbS1kbyAJOgkxCToJMTA1MTcuNzQKK0t5b25nZ2ktZG8gCToJMQk6CTEwMTgxLjI5CitJbmNob24JOgkxCToJOTg2LjQ1CitDaGVqdS1kbyAJOgkxCToJMTg0Ny4xOQorY2hvbGxhYnVrLWRvIAk6CTEJOgk4MDUwLjk0CitjaG9sbGFuYW0tZG8gCToJMQk6CTEyMDM2Ljk1CitTZW91bAk6CTEJOgk2MDUuNTIKK1Vsc2FuCToJMQk6CTEwNTYuMzgKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9TT1VUSCBLT1JFQV9QT1BVTEFUSU9OLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL1NPVVRIIEtPUkVBX1BPUFVMQVRJT04udHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFlMWQyYzgKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9TT1VUSCBLT1JFQV9QT1BVTEFUSU9OLnR4dApAQCAtMCwwICsxLDE3IEBACitTb3V0aCBLb3JlYQk6CTAJOgk0ODg0NjgyMworQnVzYW4gW1B1c2FuXQk6CTEJOgkzNjg0MTUzCitDaHVuZ2Nob25nYnVrLWRvIAk6CTEJOgkxNTAwNjEwCitDaHVuZ2Nob25nbmFtLWRvIAk6CTEJOgkxOTcyNTUzCitEYWVndSBbVGFlZ3VdCToJMQk6CTI1Mzk3MzgKK0RhZWplb24gW1RhZWpvbl0JOgkxCToJMTQ1MDc1MAorS2FuZy13b24tZG8gCToJMQk6CTE1Mjg2NDAKK0t3YW5nanUJOgkxCToJMTQwNjkxNQorS3lvbmdzYW5nYnVrLWRvIAk6CTEJOgkyNzE4NjEzCitLeW9uZ3NhbmduYW0tZG8gCToJMQk6CTMxNjg3MzQKK0t5b25nZ2ktZG8gCToJMQk6CTEwNjI4ODQyCitJbmNob24JOgkxCToJMjYxMDcxNQorQ2hlanUtZG8gCToJMQk6CTU1NzIzNQorY2hvbGxhYnVrLWRvIAk6CTEJOgkxOTE1Njc0CitjaG9sbGFuYW0tZG8gCToJMQk6CTE5OTQwMTEKK1Nlb3VsCToJMQk6CTEwMjg3ODQ3CitVbHNhbgk6CTEJOgkxMDg3OTU4ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvU09VVEhBRlJJQ0FfQVJFQS50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9TT1VUSEFGUklDQV9BUkVBLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYjNkYmNmCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvU09VVEhBRlJJQ0FfQVJFQS50eHQKQEAgLTAsMCArMSw0MDcgQEAKK1NPVVRIIEFGUklDQTowOjEyMTk5MTIKK09SQU5HRSBGUkVFIFNUQVRFOjE6NTAyMTYuMzk4CitXRVNURVJOIENBUEU6MTo1MjA2MS41MzEKK09SQU5HRToxOjY5OTAuOTU1CitOT1JUSEVSTiBDQVBFOjE6MTQwNTIxLjU5NAorRUFTVEVSTiBUVkw6MTo2Nzg4Ni42NDgKK1BXVjoxOjEyNzI4MworTk9SVEhFUk4gVFZMOjE6MTQwNTIxLjU5NAorRUFTVEVSTiBDQVBFOjE6Njc4ODYuNjQ4CitOT1JUSCBXRVNUOjE6NDM4NDguODc5CitOQVRBTDoxOjM1NjcyLjAzOQorTE9XRVIgVU1GT0xPWkk6Mjo0NDkuNDYyNTg4CitOR09UU0hFOjI6MTI5MC45MjU4NDIKK05PUlRIRVJOIFRWTC0yNjoyOjIzNi41OTY5NjIKK0tPUFBJRVM6Mjo2MTMuNTY1ODc2CitCQVJLTFkgV0VTVDoyOjI1NTMuMDM0NzE0CitOQVRBTC0xNDoyOjEzMi42MDUyNjIKK1NURUxMRU5CT1NDSDoyOjE5Mi41MDk5MjMKK0RVUkJBTi9DSEFUUy46MjoxMDEuMDg2NTk2CitOQVRBTC01NzoyOjM2NC45OTU5NTcKK0NBUk9MSU5BOjI6Mzc4Ni42ODI4NTUKK05BVEFMLTE2OjI6NjAuMjc3NTYxCitOS0FOREFMQToyOjY2Ni4yNDE0ODQKK0tVSUxTUklWRVI6Mjo0Ni45MzE4MzAKK05PUlRIIFdFU1QtMjM6MjoxMDU3LjgzNzY5NAorTkFUQUwtNTQ6MjozNS4yMTMzODAKK1NPVVRQQU5TQkVSRzoyOjQ0NzEuNjAyNTg0CitGUkFTRVJCVVJHOjI6NDU3MS44Njg1OTMKK0hVTUFOU0RPUlA6MjoxNTQ3LjgxNTY0MgorSEVSQkVSVDoyOjI4NzAuMzE1MDA3CitDQUxFRE9OOjI6MTU4Mi44MjE5ODQKK0VBU1RFUk4gQ0FQRS0xOjI6MTU1NTMuOTE4MjE2CitQT1RHSUVURVJTUlVTOjI6MTUwNzMuMjgwOTI0CitNQUxBTVVFTEU6MjoxNDM5LjE5MTI3MQorRVNUQ09VUlQ6MjoxMDAzLjIwMjczNgorUVVFRU5TVE9XTjoyOjQyLjU5NzYzOQorUEFVTFBJRVRFUlNCVVJHOjI6NTcwLjMxMjIxNgorTU9VVFNFOjI6Mjg2LjYyMjE0NQorSE9FVkVMRFJJRjoyOjEzOTUuODQ4MjYyCitDQUxWSU5JQToyOjE0NzA2LjYzODY4OQorTFlERU5CVVJHOjI6NDUwOS45NDQwMTEKK0RVUkJBTi9DSEFUUy46MjoxMC4xMTkyOTIKK0tVUlVNQU46Mjo2NjIxLjYyMTcyOQorV0VQRU5FUjoyOjczMC43Mzk3MzQKK09CRVJIT0xaRVI6Mjo0LjA4NTUzOAorVEFSS0FTVEFEOjI6MTI3NS4zNTEwMDUKK05BVEFMLTgwOjI6NDcuMzI3NDUyCitNVE9OSkFORU5JOjI6MzMzLjg4MzEyOAorTk9SVEhFUk4gVFZMLTI4OjI6MzI2LjEwMzc2NgorVlJZQlVSRzoyOjQxOTIuOTY0MjA1CitFRVJTVEVIT0VLOjI6NTMuNjI0MTA5CitGT1JUIEJFQVVGT1JUOjI6NTMyLjA5MTY4MworQkVSR1ZJTExFOjI6OTk2LjIzMjMzMworV0FSUkVOVE9OOjI6NjMzLjM5MTM0OQorR1JPQkxFUlNEQUw6MjoyMjU0LjUzNjk3NworTkFUQUwtNDQ6MjozNC4zNzcxNzcKK1RIRVVOSVNTRU46Mjo3MzAuOTM0MTE0CitCRURGT1JEOjI6MTEwOC43MDU4OTgKK05BVEFMLTUxOjI6Ni41MjQxNDYKK05JR0VMOjI6Ni43NjQ5MjcKK01BSExBQkFUSU5JOjI6NTUyLjI2Nzc5MgorUk9PREUgUE9SVDoyOjEuODg0MjkwCitFQVNURVJOIFRWTC0yMToyOjcwLjIxOTM5MgorU1RFWU5TQlVSRzoyOjEwOTQuMDg0NDAzCitFREVOQlVSRzoyOjgwMC41MTQwMzIKK0xBRElTTUlUSDoyOjE0ODcuMzM2ODMwCitJTkFOREE6MjoxMzQuMzg3MTE1CitaQVNUUk9OOjI6NzUwLjIyNjg5OAorQlJJVFNUT1dOOjI6Mjg0My4xNDkxNzkKK1ZFUkVFTklHSU5HOjI6MTIuMDgxMTkzCitUSEFCQU1PT1BPOjI6MjkwOS43NjQ5MzkKK0xBRFlCUkFORDoyOjg1OC42MjQyNDIKK1dJTExJU1RPTjoyOjUxNTQuODgyOTgxCitORUJPOjI6MzI5NC40NDQyNzcKK05PUlRIRVJOIFRWTC00MzoyOjg1NS4zNDM0MjQKK1FVRUVOU1RPV046MjozNC44MjM5MjIKK0xPV0VSIFRVR1VMQToyOjM3Ny44NDY2OTIKK0JBUkJFUlRPTjoyOjMxMzIuMTQ4MDgwCitOQVRBTC01MzoyOjE4MC42MDQ4NzIKK01BUklDTzoyOjIzMTQuODE2NzE0CitOQVRBTC00OToyOjIwLjYwMTIzNworTElPTiBSSVZFUjoyOjYxMS4xNjI3NDkKK0dMRU5DT0U6MjoyNDguNjM5MDU3CitNSURETEVCVVJHOjI6MjI5OS43MzA4NzQKK1BPVENIRUZTVFJPT006MjoxMjk3LjI4NDkzOQorVlVMQU0uL0VNWlVNQkU6Mjo5Ny43MTUzNTIKK0hPT1BTVEFEOjI6MTM1NS4wMDE0MzMKK1ZVTEFNLi9FTVpVTUJFOjI6OTQuMjg0Mzk1CitTRUtHT1NFU0U6MjozNjQuODcyMzc0CitSSVZFUlNEQUxFOjI6MTYyMS45OTg1MTAKK1dPTE1BUkFOU1NUQUQ6MjoxOTE3LjY4OTUzNgorQUxGUkVEOjI6MzA0LjQxMzE2OQorTkFUQUwtNjE6MjoxNjEuOTQyMDc1CitTVE9DSEVOU1RST006Mjo4OS4zNjQ0NDcKK1JJVEFWSToyOjM0Mi44NzYxMjUKK05BVEFMLTYwOjI6NDkuNTI5NTAwCitFTExJT1Q6Mjo4NDIuMDAzOTEzCitXT05ERVJCT09NOjI6MTAuMzgxNTE2CitNRVNTSU5BOjI6NTUxNi4wNTc3NzkKK1dBVEVSVkFMIEJPVkVOOjI6OTU5LjQzNTYwMworTk9SVEggV0VTVC0xNDoyOjYxODMuNTE2OTMyCitOQVRBTC0yOToyOjExNC4wNjAxNDIKK0ZPVVJJRVNCVVJHOjI6NDYyLjI1MTkzMworQkVMTEVWSUxMRToyOjE3Mi41MjIwNjgKK01PVVRTRToyOjI5Mi43OTY3NzIKK0hFSURFTEJFUkc6Mjo4LjM3ODIxOAorU1VUSEVSTEFORDoyOjM2MDAuNTE4NjI2CitQSElMSVBQT0xJUzoyOjEyNTguNzQ0NzE2CitFQVNUIExPTkRPTjoyOjQ4OC40NDk5NjEKK01PVU5UIENVUlJJRToyOjE3ODIuMzM2NDQ1CitIRUlMQlJPTjoyOjE0OTQuNjc0MzY5CitXT0RFSE9VU0U6MjoxMjE2LjA4OTU5NAorTkFUQUwtODY6MjoxNS40ODcyNzAKK05PUlRIRVJOIFRWTC0xODoyOjcwLjExODczNAorTkFUQUwtNDY6MjoyNTYuNzYzNDI3CitMSU5ETEVZOjI6MTExMy4yMDg2MDEKK1JFSVRaOjI6MTA3NC40MDU5NjIKK0NBUEU6Mjo2Mi44NzM0MDYKK1NXQVJUUlVHR0VOOjI6NjE5LjU4NzMyMAorTk9SVEhFUk4gVFZMLTIyOjI6Nzc5LjE4MDk5MQorSEFOS0VZOjI6Njc5LjkxMDI4NQorRUFTVEVSTiBUVkwtODoyOjg0Mi4xNDA4ODUKK05PUlRIRVJOIFRWTC0zMjoyOjMxMy42ODg4MzEKK05BVEFMLTQ4OjI6MjMuOTkyODI0CitCRVRITEVIRU06MjoxNDIyLjEzNDg5OQorSExBQklTQToyOjEwMTkuOTMxMjEyCitNREFOVFNBTkU6MjoyOS44OTM4MDIKK05BVEFMLTkzOjI6Mzc5LjMwNjk1MAorRUFTVEVSTiBDQVBFLTM6Mjo2NzcuNzM4MDc0CitFQVNURVJOIFRWTC0xNzoyOjkyNS41OTQ5NTkKK0pPVUJFUlRJTkE6Mjo1MzYuMjYzNzc0CitIQU5PVkVSOjI6MTQzNS42NzYxODUKK05BVEFMLTczOjI6MTQwLjc5OTY0MworTUFMTUVTQlVSWToyOjEuMzE4NTIxCitOQVRBTC00NToyOjE4LjAwNzAwNQorUkFOREZPTlRFSU46Mjo2LjM4OTI2NworUEVBUlNUT046MjoxMDQ5LjM1MDE4OAorTEFJTkdTQlVSRzoyOjM1MjMuNjQzODgyCitMQURZIEdSRVk6Mjo1ODMuNTA3MzkwCitXRVNTRUxTIEJST046Mjo2NjAuMDE4MTYyCitOQVRBTC0yODoyOjExLjM0NjE5MQorTU9LRVJPTkc6Mjo3MDEuODE4MjU0CitCUklUUzoyOjc5My4xNjA4NTcKK1NNSVRIRklFTEQ6MjoxMTMwLjUyOTg3MQorTkFUQUwtOToyOjI0Ljc0MzE3OAorS0lSS1dPT0Q6Mjo2OTguNzE0NDAxCitTQ0hXRUlaRVIgUi46MjoyOTI0LjczMzUzMgorRVJNRUxPOjI6Njk2Ni44OTg4NDAKK1dJVEJBTks6MjoyNjM5LjExMzAxOQorSkFOU0VOVklMTEU6MjoxODM3LjMyMjIyNgorTk9SVEhFUk4gVFZMLTMwOjI6MzkuMDY3NzE1CitLSU5HIFdJTExJQU0gVE9XTjoyOjI2Mi45NDY5NDMKK0ZSQU5LRk9SVDoyOjExOTEuMDY0MzgyCitWRU5URVJTQlVSRzoyOjQ5Ni4zMDEwNDgKK0VBU1RFUk4gVFZMLTc6Mjo2ODcuNDI2MzM5CitTVEVZTEVSVklMTEU6MjoxNDc3LjE3MTAwOQorU1VUVEVSSEVJTToyOjY1MS45Nzg3MzIKK1BJRVRFUlNCVVJHOjI6NTM0OC44MTE3OTgKK05PUlRIIFdFU1QtMTA6MjoxOTY0LjgxNDQyMQorRU1CVU1CVUxVOjI6MjYxLjk5MzkzMworTkFUQUwtNzg6Mjo0OS4yMzgxNTAKK0JBQkFOQU5HTzoyOjMxOC4xNjM0OTUKK1dFRU5FTjoyOjM2Mi4zOTI0ODUKK05EV0VEV0U6MjoyNjMuOTI3MjIwCitLRU5IQVJEVDoyOjE0MDkwLjgzNTg4MgorRUVSU1RFSE9FSzoyOjMzLjg2ODg0OQorUVVFRU5TVE9XTjoyOjY4OS41NDI1NDcKK01PS0VST05HOjI6NzQxLjkxMTkyOQorR0lZQU5JOjI6Mzc0Ny45MDA5OTMKK01TSU5HQToyOjc1MC45NDUxNTkKK1BJRVRFUk1BUklUWkJVUkc6MjoyNDMuMTQ4MzY3CitWUkVERU5EQUw6MjoxLjAwMDAwMAorVkVOVEVSU0RPUlA6MjoxMzUyLjgzNDk2OQorRUFTVEVSTiBUVkwtMTM6Mjo5NDEuODYxODQwCitOT1JUSEVSTiBUVkwtNzoyOjk1Ny4zODkwNzYKK01PVU5UIENVUlJJRToyOjExMi44NjE5MjIKK1VCT01CTzoyOjg1Ny4yODI3NjUKK1NUQU5ERVJUT046Mjo0NjA1Ljk2NDUxNgorTkFUQUwtNDA6MjoxNDcuMzM2NzA0CitIT0ZNRVlSOjI6OTUzLjc0OTkwNAorQUxFWEFORFJJQToyOjk2My43MTM1NDUKK01BTE1FU0JVUlk6MjoxNzk0LjQ3MjI4NgorUE9TVE1BU0JVUkc6Mjo3MTg1LjcwNzEzNworUkFOREJVUkc6MjoyLjY4NzY5MAorQlJJVFM6MjoxNS4wMzEzODgKK1VNVk9USToyOjY1My45NTgzMzAKK0FNRVJTRk9SVDoyOjE4MDEuODE4ODM2CitCRUxGQVNUOjI6Mjg2MC4xMDYzMjAKK0NBTElUWkRPUlA6Mjo0NDAuOTk0NTE1CitOQVBIVU5POjI6NTgxLjY3MDAzOAorVklDVE9SSUEgRUFTVDoyOjMyMTEuNDg0NjUxCitOT1JUSCBXRVNULTM6MjoyODc1LjQ0ODA1NgorVFJPTVBTQlVSRzoyOjc4Mi4wODI3NjAKK1JVU1RFTkJVUkc6MjoxMjAuMDIyMTcxCitCRUFVRk9SVCBXRVNUOjI6NjY4MS40MDU2MjUKK0FCRVJERUVOOjI6MjgwNi45MTIzMjcKK05FTFNQUlVJVDoyOjIwNjUuMDQyNTQ4CitTV0VMTEVOREFNOjI6MTYzNC42ODUyMzAKK1ZPTEtTUlVTVDoyOjE3MjMuOTM1ODI0CitSSUNITU9ORDoyOjM5NS44ODMyNDYKK0FMSVdBTCBOT1JUSDoyOjc5Ni45NjMyNzYKK1NBU09MU0JVUkc6MjozODIuMjIyODE0CitXSU5CRVJHOjI6MTUyLjI5NzM0MgorQ1VMTElOQU46MjoxMS4xOTAwMTQKK0JSRURBU0RPUlA6MjoxNzkwLjM0MDU1NAorQkFSS0xZIEVBU1Q6MjoxNTQxLjgwMDk0NAorR09PRFdPT0Q6MjoxNi4zODE4MjAKK1BJTEdSSU0nUyBSRVNUOjI6MTMwMTkuOTQ0MjAyCitOQVRBTC0zMDoyOjMxNS42Nzg4NjkKK05BVEFMLTExOjI6MTA5Ljg1MTQwMgorUEhJTElQU1RPV046MjoyMjI3LjgzNjU2MQorQlJBTkRGT1JUOjI6MTQ4MC42NTA4OTkKK09ERU5EQUFMU1JVUzoyOjU1Ny4yNTAwMzUKK1ZFVEVSU1RBRDoyOjgxOS4zNTQ2NzUKK0RBTk5IQVVTRVI6MjoyNDEuNTYwMDMwCitLUlVHRVJTRE9SUDoyOjEwLjM0NDExOAorTk9SVEhFUk4gVFZMLTQ1OjI6MTEyLjExMTY5NgorU1RFUktTVFJPT006Mjo2ODQuOTczNTQ1CitQUklFU0tBOjI6NTQ4Mi44MTQyNDAKK1BSRVRPUklBOjI6OS45MzQ3OTAKK05BVEFMLTcyOjI6NDUuNDI5Mzc2CitCUkFLUEFOOjI6MS45MzMyMDUKK05BUEhVTk86MjoyOTEuNTE1NzcwCitPUkFOR0UgRlJFRSBTVEFURS0zMzoyOjQ5OC4yMzc0NjkKK05BVEFMLTU1OjI6MTYwLjQ5NzA2NworTk9SVEhFUk4gVFZMLTQyOjI6NDgwLjMzMTYzMAorTkVXIEhBTk9WRVI6Mjo0NDUuMjM5NTM1CitBTEJFUlRPTjoyOjEuMDAwMDAwCitQSU5FVE9XTjoyOjEzMS44MDg3OTgKK1dBUk1CQUQ6Mjo0ODE5Ljg4NDY2NQorVU5ERVJCRVJHOjI6NzEyLjcxNTI1MQorTkFUQUwtNjI6Mjo3Mi44MjEwNjMKK01VUlJBWVNCVVJHOjI6MjEzMC43MzU4NzgKK05BVEFMLTMyOjI6My44MTY4NjQKK0hBWToyOjQ5MjQuNTQ1OTEyCitVVFJFQ0hUOjI6MTQ4Ny44MTAzNzAKK0NPTElHTlk6Mjo1ODkuODI3MDUwCitNVFVOWklOSToyOjE1MC45NjIxMzcKK0pBR0VSU0ZPTlRFSU46Mjo0ODEuODU1OTM0CitOQVRBTC05MToyOjg1Ni4wMzMyMTkKK05PUlRIIFdFU1QtMjoyOjk3NS4wMjkyNDUKK0tST09OU1RBRDoyOjE2MDUuMTIyMzcwCitOQVRBTC0zNzoyOjYzLjA4ODYxMAorSU5HV0FWVU1BOjI6MTUzNy40NTI0MjAKK1dBTFZJUyBCQVk6Mjo0MTIuOTMxNDY3CitOQVRBTC05MDoyOjEwNS41NDU1NTQKK0dFUk1JU1RPTjoyOjEuMTkxNDQzCitVTklPTkRBTEU6MjoxMjQ3LjU3NjQ4MAorVU1aSU5UTzoyOjI3Ny45NDI3NTYKK0FERUxBSURFOjI6NjEwLjE0ODM5OQorV0VTVE9OQVJJQToyOjQuNTEzMzYxCitTUFJJTkdTOjI6Mi4xNTcwMTkKK0RVTkRFRToyOjcwNi4zMjc1NTMKK0xFVEFCQToyOjExMzc2LjE3NDMyMgorU09NRVJTRVQgRUFTVDoyOjIzMDguNTE4NDQxCitXSVRaSUVTSE9FSyAoUUFRV0EpOjI6Njk5MC45NTUwMDAKK0tMSVBSSVZFUjoyOjExODAuMTkyOTE3CitNQVBVTVVMTzoyOjMwMC4xMzMyMjcKK1NUUkFORDoyOjQ4LjgzMDcyNgorTU9PSVJJVklFUjoyOjU2Mi45OTY0MDIKK01EVVRKQU5BOjI6Njk5LjU3MDM5MworTk9SVEhFUk4gVFZMLTM3OjI6ODcuMDMyOTYyCitCRU5PTkk6MjoyLjM4ODc4OAorRVNIT1dFOjI6NDA4LjA0NDMyOQorSE9QRVRPV046MjozMjQ0Ljc0MDUyMworQk9LU0JVUkc6MjoxLjQ4MzgyOAorS09NR0E6Mjo1ODUuMTQ5MTEyCitOT1JUSEVSTiBUVkwtMjA6MjoyODAuODUzNzcwCitOT1JUSEVSTiBUVkwtNDQ6Mjo0ODEuMjk1NjM5CitBTEJFUlQ6MjoxNTkzLjEwMzE4OAorV09SQ0VTVEVSOjI6MTYzMi4xNTY2MjIKK01PS0VST05HOjI6MjgxOS4yMzMxNjYKK05BVEFMLTk4OjI6MjAuNDkwMzMxCitNT0xURU5POjI6NzgyLjQ2MDU3OQorTk9SVEhFUk4gVFZMLTQ6Mjo2NjA3LjY1ODUwNworTk9SVEhFUk4gVFZMLTQ2OjI6MjAwLjQxMDU2OAorTk9SVEhFUk4gVFZMLTI0OjI6NTcuMjEwNTA5CitDQU1QRVIgRE9XTjoyOjI4Mi43MDgzNDEKK05BVEFMLTM0OjI6NDU3LjcwMzY1OQorTElDSFRFTkJVUkc6MjoxOTAzLjcxMDE0MworVlJFREVOREFMOjI6MTUwOC44MzIzNjIKK0JST05LSE9SU1RTUFJVSVQ6MjoxMy44MTQxOTAKK1NPVVRQQU5TQkVSRzoyOjEwNDE5LjY4NjgzNgorUk9VWFZJTExFOjI6MTEyMy44Njc4OTAKK05PTkdPTUE6Mjo3MzAuODEwMTIwCitERUxBUkVZVklMTEU6MjoxMjA5LjEwMTk5NAorVlJZQlVSRyAxL01BRkVLSU5HIDE6Mjo3MTYyLjMzNTczMAorRVhDRUxTSU9SOjI6NjgzLjQwMTI4NQorTk9SVEhFUk4gVFZMLTM5OjI6MTY5LjM2MDkzOAorQ0FQRToyOjEuNjM3NjY4CitFRVJTVEVIT0VLOjI6MjQuMDMyNzQwCitERVdUUyBET09SUDoyOjk5MC42MTQ3ODMKK1ZBTkRFUkJJSkwgUC46Mjo3LjAwMzA4NgorQkVUSFVMSUU6MjoxMDY0LjA5MDY0MworTk9SVEggV0VTVC01OjI6MTIwNy40MjIzNDIKK05RVVRVOjI6NjQ4LjY3Njc2NgorSU5EV0U6MjozNjAuOTczODQ2CitNT1NTRUwgQkFBSToyOjgwNS43MDY2NzYKK0VFUlNURUhPRUs6MjoxMDc4LjEwMzg1NAorTkVXQ0FTVExFOjI6NjcyLjA1ODA5MAorVklDVE9SSUEgV0VTVDoyOjQ0NjAuNjUxNzU4CitTRUtIVUtIVU5FTEFORDoyOjM3NTkuMTY0MDQ5CitFQVNURVJOIFRWTC05OjI6MjMuMDMyMjAwCitIRVJNQU5VUzoyOjI5NS45MjU0MzAKK1JVU1RFTkJVUkc6Mjo3NDkuMzY2NjExCitERSBBQVI6MjoxMjcyLjg5NDYyNQorUE9SVCBFTElTQUJFVEg6Mjo2MDQuMDI4NDEzCitNT1VUU0U6Mjo0OS41MTM1ODIKK0JMT0VNRk9OVEVJTi9CT1RTOjI6MjE5OC4zNDczOTAKK0NMQU5XSUxMSUFOOjI6Mjk0OC42Njg1MDQKK0dFT1JHRToyOjEwMzQuNDk2NDI2CitWQU5IWU5TRE9SUDoyOjM3MzUuNzk0NTc5CitOQVRBTC0xNzoyOjMzLjIyNzA4MgorRUFTVEVSTiBUVkwtMjA6MjoxNy4wMTMxNTUKK05PUlRIRVJOIFRWTC0zMToyOjI2Ni4xMjE3MjMKK0hBUlJJU01JVEg6MjoyODUzLjQ4NTA0OAorTkFUQUwtMjc6Mjo2OC44MDAzNTcKK0NBUk5BUlZPTjoyOjYyNDQuMjUwMzQ0CitWVUxBTS4vRU1aVU1CRToyOjMzNy40NDc0NzgKK09VRFRTSE9PUk46MjoxMzU4Ljg4OTIyOQorTkFUQUwtMTI6Mjo1Mi44ODk5NjAKK01BQ0xFQVI6MjoxMDA3LjE3NDIyNAorUFJJTkNFIEFMQkVSVDoyOjMxODQuMjYxNTkwCitQSUtFVEJFUkc6MjoxNzYzLjU2NDI4NAorQ0xPQ09MQU46Mjo0MzAuOTgwNDg2CitBTEJBTlk6MjoxNzk0LjUxODY2MAorQkFUSFVSU1Q6Mjo2MDguNDIyMzE2CitCRVRIQUw6MjoyMzI5LjE2OTEwMworV0lMTE9XTU9SRToyOjMwODMuMjkyMzg4CitOT1VQT09SVDoyOjU4MS45NjA3MzgKK05BTUFLV0FMQU5EOjI6MTgzMTkuNzEyNzUxCitOT1JUSEVSTiBUVkwtMzM6MjoxNDEuMDkzMjYwCitUVUxCQUdIOjI6MzU1LjI5ODk3OAorVUlURU5IQUdFOjI6MTI1Mi44MTA5NjYKK0JPTE9CRURVOjI6ODc5LjUzOTk1NgorVklMSk9FTlNLUk9PTjoyOjg0My4wNjQyNzcKK1dJVFJJVkVSOjI6MzE5OC44NTM3ODgKK0lYT1BPOjI6NTY5LjM0OTE3MAorUklDSE1PTkQ6MjoyODg2LjU5ODc4NworVUJPTUJPOjI6NzY2LjU5MjkwMAorTkFUQUwtMTg6MjoyMTEuODY5NTUxCitOT1JUSEVSTiBUVkwtMTk6Mjo1MS43NjMwMDAKK0tOWVNOQToyOjgxNi4xMjE1NDkKK1dJTkJVUkc6MjoxMTQ3LjQ0MjA1MQorSEVOTkVOTUFOOjI6MjQ3LjgzOTU3NAorQkFMRk9VUjoyOjE5ODguOTQ2NDQ2CitOQVRBTC03NDoyOjE2Ny44NTgxMTkKK05BVEFMLTg4OjI6NDYuODcyNzIyCitWUkVERUZPUlQ6Mjo1MTEuOTc3NDM5CitNREFOVFNBTkUgNDoyOjMyLjM0MDA5NAorTVBFTkRMRToyOjQ5Mi41MzY4NDkKK0hBUlRTV0FURVI6MjoyNjcuMjg3NzA5CitLUkFOU0tPUDoyOjI3Ny4yODY1MzcKK1RIQUJBWklNQkk6MjoxMTc0My4zNDI5MDMKK1BBQVJMOjI6NDQ3LjUzNzQ1MgorVlJFREVOQlVSRzoyOjI4Mi4wMjY4NjEKK0pPSEFOTkVTQlVSRzoyOjQuMzcxMDQyCitCT1RIQVZJTExFOjI6MTAxNy42ODY5NjQKK0NIQVRDQVJUOjI6MTAyNy45Nzk4NDIKK05BVEFMLTI0OjI6MTc5LjQzMjUwOAorRUVSU1RFSE9FSzoyOjQ4NC43NDY2MDgKK0JVTEZPTlRFSU46MjoxMjUzLjc2Nzk3NQorV0FURVJCRVJHOjI6MTYyNDMuMzMyOTUyCitQQVJZUzoyOjM1NS41MjA3OTYKK05BVEFMLTM5OjI6MTMuNjk5NTY3CitNT05UQUdVOjI6MTAyMy4wNzkyMDcKK05PUlRIRVJOIFRWTC00MDoyOjE2NTQuNDMzMzg2CitNQVJRVUFSRDoyOjQ5OC4yODQ3MzQKK1BJRVQgUkVUSUVGOjI6NDI3NS4wMDQxNDYKK0VaSU5HT0xXRU5JOjI6MTkyLjczMjIyMworTkFUQUwtNjk6MjoxMzUuNzY2MTU4CitXQUtLRVJTVFJPT006MjoyMjAwLjE5ODE2MAorSE9QRUZJRUxEOjI6NTA4LjI1NDE4MworTkFUQUwtMzM6Mjo1Ljc3MzAwNQorQk9DSFVNOjI6MjY2Ni40OTQ1MDYKK0tMRVJLU0RPUlA6MjoxMzQ3Ljk3MjI1MAorS0VNUFRPTiBQQVJLOjI6My41NDE3NDkKK1BPUlQgU0hFUFNUT05FOjI6MzA1LjA3OTkzOAorUkVEREVTU0JVUkc6Mjo1ODYuNzM0ODA5CitQT0xFTEE6MjoyNTEuMjIxNjY4CitWUllIRUlEOjI6MTQ0NS4zMTA3OTYKK0dPUkRPTklBOjI6MjA0MjUuOTE0NzU0CitGSUNLU0JVUkc6Mjo1MTAuMzE3OTE3CitOQVRBTC0yNjoyOjIzMS43MzI5NDEKK1NFTkVLQUw6MjoxNDI0LjY4OTczNQorS0lNQkVSTEVZOjI6MTM0NS45NDU1MjQKK0RFTE1BUzoyOjExODYuNDIwMjcwCitDUkFET0NLOjI6MjMyMi4yNTQ1MDgKK0VBU1RFUk4gVFZMLTExOjI6Njg1LjkwMzYzNgorTkFUQUwtODU6MjoyNC4yMzM1NDIKK1BFVFJVU0JVUkc6MjoxMTc0LjUxOTk0MgorRUFTVEVSTiBUVkwtMTU6Mjo5NC4xNzIwMDAKK0tPU1RFUjoyOjEwNzQuMzcwOTA0CitWUkVERToyOjIxMTIuMDE0MDM2CitTRVNIRUdPOjI6Mzc4MS45MTAzMDEKK1JPQkVSVFNPTjoyOjY2Ni41ODc5MzIKK0JPL0pBSy9LT0YvRkFVOjI6NzI1Ny4zODc2NzUKK01JRERFTFNCVVJHOjI6NTM4OC4xNjI0MDgKK1dFTExJTkdUT046MjoxODEuNDEzOTQ4CitTSU1PTlNUT1dOOjI6MTEwLjQ3MTkzOQorTkFUQUwtNzY6MjozMC4wMTU2MTgKK0dSQUFGRi1SRUlORVQ6MjoyNzIyLjI5MTY2OQorTkFUQUwtMTAxOjI6MTE2LjY4OTk2MAorQ09MRVNCRVJHOjI6MjE1NS44NjgyMzUKK0NFUkVTOjI6Mzk3NS42OTI4MDkKK0VFUlNURUhPRUs6MjoxMzI4LjE3NDUzMQorSEVJREVMQkVSRzoyOjc5NS4yNTUyMDIKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL1NPVVRIQUZSSUNBX1BPUFVMQVRJT04udHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvU09VVEhBRlJJQ0FfUE9QVUxBVElPTi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzk0ZDU5MwotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL1NPVVRIQUZSSUNBX1BPUFVMQVRJT04udHh0CkBAIC0wLDAgKzEsNDA3IEBACitTT1VUSCBBRlJJQ0EJOgkwCToJMzcxMTAyOTEKK0VBU1RFUk4gQ0FQRQk6CTEJOgk2MDA3NzQwCitFQVNURVJOIFRWTAk6CTEJOgk2MDA3NzQwCitOQVRBTAk6CTEJOgk3OTU1NTI0CitOT1JUSCBXRVNUCToJMQk6CTMyODUzODQKK05PUlRIRVJOIENBUEUJOgkxCToJNzIwOTc0CitOT1JUSEVSTiBUVkwJOgkxCToJNzIwOTc0CitPUkFOR0UJOgkxCToJNjQ1ODMzMworT1JBTkdFIEZSRUUgU1RBVEUJOgkxCToJMjUzNTk0NworUFdWIFtHYXV0ZW5nXSAJOgkxCToJODgzNzE3OAorV0VTVEVSTiBDQVBFCToJMQk6CTM0MTc2NzUKK01FU1NJTkEJOgkyCToJMTU2NzMKK1NPVVRQQU5TQkVSRwk6CTIJOgkxNTY3MworU09VVFBBTlNCRVJHCToJMgk6CTE1NjczCitOT1JUSEVSTiBUVkwtNAk6CTIJOgkxNTY3MworUE9UR0lFVEVSU1JVUwk6CTIJOgkxNTY3MworV0FMVklTIEJBWQk6CTIJOgkyNjcwMgorTUFMQU1VRUxFCToJMgk6CTE1NjczCitOT1JUSEVSTiBUVkwtNwk6CTIJOgkxNTY3MworQk9DSFVNCToJMgk6CTE1NjczCitHSVlBTkkJOgkyCToJMTU2NzMKK0xFVEFCQQk6CTIJOgkxNTY3MworTU9LRVJPTkcJOgkyCToJMTU2NzMKK1dBVEVSQkVSRwk6CTIJOgkxNTY3MworUElFVEVSU0JVUkcJOgkyCToJMTU2NzMKK1NFU0hFR08JOgkyCToJMTU2NzMKK1NFS0dPU0VTRQk6CTIJOgkxNTY3MworTU9LRVJPTkcJOgkyCToJMTU2NzMKK0JPTE9CRURVCToJMgk6CTE1NjczCitOT1JUSEVSTiBUVkwtMTgJOgkyCToJMTU2NzMKK05PUlRIRVJOIFRWTC0xOQk6CTIJOgkxNTY3MworTk9SVEhFUk4gVFZMLTIwCToJMgk6CTE1NjczCitUSEFCQVpJTUJJCToJMgk6CTE1NjczCitOT1JUSEVSTiBUVkwtMjIJOgkyCToJMTU2NzMKK1RIQUJBTU9PUE8JOgkyCToJMTU2NzMKK05PUlRIRVJOIFRWTC0yNAk6CTIJOgkxNTY3MworUklUQVZJCToJMgk6CTE1NjczCitOT1JUSEVSTiBUVkwtMjYJOgkyCToJMTU2NzMKK05BUEhVTk8JOgkyCToJMTU2NzMKK05PUlRIRVJOIFRWTC0yOAk6CTIJOgkxNTY3MworUElMR1JJTSdTIFJFU1QJOgkyCToJMTU2NzMKK05PUlRIRVJOIFRWTC0zMAk6CTIJOgkxNTY3MworTk9SVEhFUk4gVFZMLTMxCToJMgk6CTE1NjczCitOT1JUSEVSTiBUVkwtMzIJOgkyCToJMTU2NzMKK05PUlRIRVJOIFRWTC0zMwk6CTIJOgkxNTY3MworTkFQSFVOTwk6CTIJOgkxNTY3MworU0VLSFVLSFVORUxBTkQJOgkyCToJMTU2NzMKK01PS0VST05HCToJMgk6CTE1NjczCitOT1JUSEVSTiBUVkwtMzcJOgkyCToJMTU2NzMKK05FQk8JOgkyCToJMTU2NzMKK05PUlRIRVJOIFRWTC0zOQk6CTIJOgkxNTY3MworTk9SVEhFUk4gVFZMLTQwCToJMgk6CTE1NjczCitXQVJNQkFECToJMgk6CTE1NjczCitMWURFTkJVUkcJOgkyCToJMTU0MDQ0CitOT1JUSEVSTiBUVkwtNDIJOgkyCToJMTU2NzMKK05PUlRIRVJOIFRWTC00Mwk6CTIJOgkxNTY3MworTk9SVEhFUk4gVFZMLTQ0CToJMgk6CTE1NjczCitNQVJJQ08JOgkyCToJMTQyODQyCitOT1JUSCBXRVNULTIJOgkyCToJMTQyODQyCitOT1JUSCBXRVNULTMJOgkyCToJMTQyODQyCitHT1JET05JQQk6CTIJOgkyNjcwMgorTk9SVEhFUk4gVFZMLTQ1CToJMgk6CTE1NjczCitHUk9CTEVSU0RBTAk6CTIJOgkxNTQwNDQKK05PUlRIRVJOIFRWTC00Ngk6CTIJOgkxNTY3MworTU9VVFNFCToJMgk6CTE1NDA0NAorTURVVEpBTkEJOgkyCToJMTU0MDQ0CitXSVRSSVZFUgk6CTIJOgkxNTQwNDQKK0JSSVRTCToJMgk6CTE0Mjg0MgorTU9VVFNFCToJMgk6CTE1NDA0NAorTk9SVEggV0VTVC01CToJMgk6CTE0Mjg0MgorRUFTVEVSTiBUVkwtNwk6CTIJOgkxNTQwNDQKK0VBU1RFUk4gVFZMLTgJOgkyCToJMTU0MDQ0CitFQVNURVJOIFRWTC05CToJMgk6CTE1NDA0NAorQkVMRkFTVAk6CTIJOgkxNTQwNDQKK0VBU1RFUk4gVFZMLTExCToJMgk6CTE1NDA0NAorUlVTVEVOQlVSRwk6CTIJOgkxNDI4NDIKK01JRERFTFNCVVJHCToJMgk6CTE1NDA0NAorRUFTVEVSTiBUVkwtMTMJOgkyCToJMTU0MDQ0CitNT1VUU0UJOgkyCToJMTU0MDQ0CitDVUxMSU5BTgk6CTIJOgkwCitFQVNURVJOIFRWTC0xNQk6CTIJOgkxNTQwNDQKK05FTFNQUlVJVAk6CTIJOgkxNTQwNDQKK1ZSWUJVUkcgMS9NQUZFS0lORyAxCToJMgk6CTE0Mjg0MgorV09OREVSQk9PTQk6CTIJOgkwCitFQVNURVJOIFRWTC0xNwk6CTIJOgkxNTQwNDQKK0JBUkJFUlRPTgk6CTIJOgkxNTQwNDQKK1NXQVJUUlVHR0VOCToJMgk6CTE0Mjg0MgorUlVTVEVOQlVSRwk6CTIJOgkxNDI4NDIKK1dJVEJBTksJOgkyCToJMTU0MDQ0CitFQVNURVJOIFRWTC0yMAk6CTIJOgkxNTQwNDQKK0VBU1RFUk4gVFZMLTIxCToJMgk6CTE1NDA0NAorV0FURVJWQUwgQk9WRU4JOgkyCToJMTU0MDQ0CitCUk9OS0hPUlNUU1BSVUlUCToJMgk6CTAKK0VFUlNURUhPRUsJOgkyCToJMTU0MDQ0CitOT1JUSCBXRVNULTEwCToJMgk6CTE0Mjg0MgorRUVSU1RFSE9FSwk6CTIJOgkxNTQwNDQKK0JSSVRTCToJMgk6CTE0Mjg0MgorS09TVEVSCToJMgk6CTE0Mjg0MgorUFJFVE9SSUEJOgkyCToJMAorQ0FST0xJTkEJOgkyCToJMTU0MDQ0CitLUlVHRVJTRE9SUAk6CTIJOgkwCitMSUNIVEVOQlVSRwk6CTIJOgkxNDI4NDIKK05PUlRIIFdFU1QtMTQJOgkyCToJMTQyODQyCitFRVJTVEVIT0VLCToJMgk6CTE1NDA0NAorS0VNUFRPTiBQQVJLCToJMgk6CTAKK1JBTkRCVVJHCToJMgk6CTAKK0RFTE1BUwk6CTIJOgkxNTQwNDQKK1ZFTlRFUlNET1JQCToJMgk6CTE0Mjg0MgorQkVOT05JCToJMgk6CTAKK1JPT0RFIFBPUlQJOgkyCToJMAorQ09MSUdOWQk6CTIJOgkxNDI4NDIKK1JBTkRGT05URUlOCToJMgk6CTAKK0JFVEhBTAk6CTIJOgkxNTQwNDQKK0VSTUVMTwk6CTIJOgkxNTQwNDQKK0pPSEFOTkVTQlVSRwk6CTIJOgkwCitHRVJNSVNUT04JOgkyCToJMAorS1VSVU1BTgk6CTIJOgkyNjcwMgorU1BSSU5HUwk6CTIJOgkwCitIT0VWRUxEUklGCToJMgk6CTE1NDA0NAorQk9LU0JVUkcJOgkyCToJMAorRUVSU1RFSE9FSwk6CTIJOgkxNTQwNDQKK0JSQUtQQU4JOgkyCToJMAorV0VTVE9OQVJJQQk6CTIJOgkwCitPQkVSSE9MWkVSCToJMgk6CTAKK0FMQkVSVE9OCToJMgk6CTAKK1ZFUkVFTklHSU5HCToJMgk6CTAKK0RFTEFSRVlWSUxMRQk6CTIJOgkxNDI4NDIKK05JR0VMCToJMgk6CTAKK0VFUlNURUhPRUsJOgkyCToJMTU0MDQ0CitWUllCVVJHCToJMgk6CTE0Mjg0MgorSEVJREVMQkVSRwk6CTIJOgkwCitQT1RDSEVGU1RST09NCToJMgk6CTE0Mjg0MgorVkFOREVSQklKTCBQLgk6CTIJOgkwCitCQUxGT1VSCToJMgk6CTE1NDA0NAorRUVSU1RFSE9FSwk6CTIJOgkxNTQwNDQKK0tMRVJLU0RPUlAJOgkyCToJMTQyODQyCitTVEFOREVSVE9OCToJMgk6CTE1NDA0NAorUElFVCBSRVRJRUYJOgkyCToJMTU0MDQ0CitTQVNPTFNCVVJHCToJMgk6CTU2MzU0CitQQVJZUwk6CTIJOgk1NjM1NAorQU1FUlNGT1JUCToJMgk6CTE1NDA0NAorV0FLS0VSU1RST09NCToJMgk6CTE1NDA0NAorU0NIV0VJWkVSIFIuCToJMgk6CTE0Mjg0MgorSU5HV0FWVU1BCToJMgk6CTc4NzY3CitXT0xNQVJBTlNTVEFECToJMgk6CTE0Mjg0MgorVlJFREVGT1JUCToJMgk6CTU2MzU0CitIRUlMQlJPTgk6CTIJOgk1NjM1NAorVklMSk9FTlNLUk9PTgk6CTIJOgk1NjM1NAorRlJBTktGT1JUCToJMgk6CTU2MzU0CitWUkVERQk6CTIJOgk1NjM1NAorVk9MS1NSVVNUCToJMgk6CTE1NDA0NAorS09QUElFUwk6CTIJOgk1NjM1NAorUE9TVE1BU0JVUkcJOgkyCToJMjY3MDIKK0JPVEhBVklMTEUJOgkyCToJNTYzNTQKK1VCT01CTwk6CTIJOgk3ODc2NworTk9SVEggV0VTVC0yMwk6CTIJOgkxNDI4NDIKK1VUUkVDSFQJOgkyCToJNzg3NjcKK1BBVUxQSUVURVJTQlVSRwk6CTIJOgk3ODc2NworS1JPT05TVEFECToJMgk6CTU2MzU0CitOR09UU0hFCToJMgk6CTc4NzY3CitORVdDQVNUTEUJOgkyCToJNzg3NjcKK1ZSWUhFSUQJOgkyCToJNzg3NjcKK1JFSVRaCToJMgk6CTU2MzU0CitXRVNTRUxTIEJST04JOgkyCToJNTYzNTQKK1VCT01CTwk6CTIJOgk3ODc2NworTElORExFWQk6CTIJOgk1NjM1NAorSE9PUFNUQUQJOgkyCToJNTYzNTQKK0hBUlRTV0FURVIJOgkyCToJMjY3MDIKK05BVEFMLTkJOgkyCToJNzg3NjcKK0hBUlJJU01JVEgJOgkyCToJNTYzNTQKK05PTkdPTUEJOgkyCToJNzg3NjcKK09ERU5EQUFMU1JVUwk6CTIJOgk1NjM1NAorQkFSS0xZIFdFU1QJOgkyCToJMjY3MDIKK05BVEFMLTExCToJMgk6CTc4NzY3CitOQVRBTC0xMgk6CTIJOgk3ODc2NworSExBQklTQQk6CTIJOgk3ODc2NworSEVOTkVOTUFOCToJMgk6CTU2MzU0CitCTy9KQUsvS09GL0ZBVQk6CTIJOgk1NjM1NAorTkFUQUwtMTQJOgkyCToJNzg3NjcKK0RBTk5IQVVTRVIJOgkyCToJNzg3NjcKK05BVEFMLTE2CToJMgk6CTc4NzY3CitCRVRITEVIRU0JOgkyCToJNTYzNTQKK05BVEFMLTE3CToJMgk6CTc4NzY3CitWRU5URVJTQlVSRwk6CTIJOgk1NjM1NAorTkFUQUwtMTgJOgkyCToJNzg3NjcKK1dBUlJFTlRPTgk6CTIJOgkyNjcwMgorTlFVVFUJOgkyCToJNzg3NjcKK01BSExBQkFUSU5JCToJMgk6CTc4NzY3CitTRU5FS0FMCToJMgk6CTU2MzU0CitEVU5ERUUJOgkyCToJNzg3NjcKK0JVTEZPTlRFSU4JOgkyCToJNTYzNTQKK1dJTkJVUkcJOgkyCToJNTYzNTQKK0dMRU5DT0UJOgkyCToJNzg3NjcKK05BTUFLV0FMQU5ECToJMgk6CTI2NzAyCitUSEVVTklTU0VOCToJMgk6CTU2MzU0CitLTElQUklWRVIJOgkyCToJNzg3NjcKK05BVEFMLTI0CToJMgk6CTc4NzY3CitCQUJBTkFOR08JOgkyCToJNzg3NjcKK05BVEFMLTI2CToJMgk6CTc4NzY3CitOQVRBTC0yNwk6CTIJOgk3ODc2NworTkFUQUwtMjgJOgkyCToJNzg3NjcKK05BVEFMLTI5CToJMgk6CTc4NzY3CitOQVRBTC0zMAk6CTIJOgk3ODc2NworTE9XRVIgVU1GT0xPWkkJOgkyCToJNzg3NjcKK05BVEFMLTMyCToJMgk6CTc4NzY3CitIRVJCRVJUCToJMgk6CTI2NzAyCitOQVRBTC0zMwk6CTIJOgk3ODc2NworTkFUQUwtMzQJOgkyCToJNzg3NjcKK0ZPVVJJRVNCVVJHCToJMgk6CTU2MzU0CitCUkFOREZPUlQJOgkyCToJNTYzNTQKK1dJVFpJRVNIT0VLIChRQVFXQSkJOgkyCToJNjQ1ODMzMworTVRPTkpBTkVOSQk6CTIJOgk3ODc2NworSEFZCToJMgk6CTI2NzAyCitOS0FOREFMQQk6CTIJOgk3ODc2NworTkFUQUwtMzcJOgkyCToJNzg3NjcKK0tFTkhBUkRUCToJMgk6CTI2NzAyCitLSU1CRVJMRVkJOgkyCToJMjY3MDIKK0JFUkdWSUxMRQk6CTIJOgk3ODc2NworTkFUQUwtMzkJOgkyCToJNzg3NjcKK05BVEFMLTQwCToJMgk6CTc4NzY3CitNQVJRVUFSRAk6CTIJOgk1NjM1NAorTVNJTkdBCToJMgk6CTc4NzY3CitGSUNLU0JVUkcJOgkyCToJNTYzNTQKK0VTVENPVVJUCToJMgk6CTc4NzY3CitXRUVORU4JOgkyCToJNzg3NjcKK05BVEFMLTQ0CToJMgk6CTc4NzY3CitOQVRBTC00NQk6CTIJOgk3ODc2NworQ0xPQ09MQU4JOgkyCToJNTYzNTQKK05BVEFMLTQ2CToJMgk6CTc4NzY3CitLUkFOU0tPUAk6CTIJOgk3ODc2NworTkFUQUwtNDgJOgkyCToJNzg3NjcKK05BVEFMLTQ5CToJMgk6CTc4NzY3CitFWENFTFNJT1IJOgkyCToJNTYzNTQKK0JMT0VNRk9OVEVJTi9CT1RTCToJMgk6CTU2MzU0CitFU0hPV0UJOgkyCToJNzg3NjcKK05BVEFMLTUxCToJMgk6CTc4NzY3CitNVFVOWklOSQk6CTIJOgk3ODc2NworTkFUQUwtNTMJOgkyCToJNzg3NjcKK1BSSUVTS0EJOgkyCToJMjY3MDIKK05BVEFMLTU0CToJMgk6CTc4NzY3CitOQVRBTC01NQk6CTIJOgk3ODc2NworUEVUUlVTQlVSRwk6CTIJOgk1NjM1NAorVU1WT1RJCToJMgk6CTc4NzY3CitOQVRBTC01Nwk6CTIJOgk3ODc2NworT1JBTkdFIEZSRUUgU1RBVEUtMzMJOgkyCToJNTYzNTQKK01PT0lSSVZJRVIJOgkyCToJNzg3NjcKK0xBRFlCUkFORAk6CTIJOgk1NjM1NAorTUFQVU1VTE8JOgkyCToJNzg3NjcKK05BVEFMLTYwCToJMgk6CTc4NzY3CitIT1BFVE9XTgk6CTIJOgkyNjcwMgorTkFUQUwtNjEJOgkyCToJNzg3NjcKK05BVEFMLTYyCToJMgk6CTc4NzY3CitMT1dFUiBUVUdVTEEJOgkyCToJNzg3NjcKK05FVyBIQU5PVkVSCToJMgk6CTc4NzY3CitMSU9OIFJJVkVSCToJMgk6CTc4NzY3CitERVdUUyBET09SUAk6CTIJOgk1NjM1NAorTVBFTkRMRQk6CTIJOgk3ODc2NworTkRXRURXRQk6CTIJOgk3ODc2NworUkVEREVTU0JVUkcJOgkyCToJNTYzNTQKK1BJRVRFUk1BUklUWkJVUkcJOgkyCToJNzg3NjcKK05BVEFMLTY5CToJMgk6CTc4NzY3CitFREVOQlVSRwk6CTIJOgk1NjM1NAorVU5ERVJCRVJHCToJMgk6CTc4NzY3CitXRVBFTkVSCToJMgk6CTU2MzU0CitKQUdFUlNGT05URUlOCToJMgk6CTU2MzU0CitJTkFOREEJOgkyCToJNzg3NjcKK05BVEFMLTcyCToJMgk6CTc4NzY3CitOQVRBTC03Mwk6CTIJOgk3ODc2NworTkFUQUwtNzQJOgkyCToJNzg3NjcKK01PVU5UIENVUlJJRQk6CTIJOgk3ODc2NworTkFUQUwtNzYJOgkyCToJNzg3NjcKK0NBTVBFUiBET1dOCToJMgk6CTc4NzY3CitDQUxWSU5JQQk6CTIJOgkyNjcwMgorTkFUQUwtNzgJOgkyCToJNzg3NjcKK1BPTEVMQQk6CTIJOgk3ODc2NworTkFUQUwtODAJOgkyCToJNzg3NjcKK1BJTkVUT1dOCToJMgk6CTc4NzY3CitSSUNITU9ORAk6CTIJOgk3ODc2NworRFVSQkFOL0NIQVRTLgk6CTIJOgk3ODc2NworUEhJTElQU1RPV04JOgkyCToJMjY3MDIKK0RVUkJBTi9DSEFUUy4JOgkyCToJNzg3NjcKK1RST01QU0JVUkcJOgkyCToJNTYzNTQKK05BVEFMLTg1CToJMgk6CTc4NzY3CitOQVRBTC04Ngk6CTIJOgk3ODc2NworRU1CVU1CVUxVCToJMgk6CTc4NzY3CitOQVRBTC04OAk6CTIJOgk3ODc2NworU01JVEhGSUVMRAk6CTIJOgk1NjM1NAorSVhPUE8JOgkyCToJNzg3NjcKK0JSSVRTVE9XTgk6CTIJOgkyNjcwMgorUEhJTElQUE9MSVMJOgkyCToJNTYzNTQKK0NBUk5BUlZPTgk6CTIJOgkyNjcwMgorWkFTVFJPTgk6CTIJOgk1NjM1NAorTkFUQUwtOTAJOgkyCToJNzg3NjcKK0VBU1RFUk4gQ0FQRS0xCToJMgk6CTEyMDE1NAorTkFUQUwtOTEJOgkyCToJNzg3NjcKK1JPVVhWSUxMRQk6CTIJOgk1NjM1NAorV0lMTElTVE9OCToJMgk6CTI2NzAyCitWVUxBTS4vRU1aVU1CRQk6CTIJOgk3ODc2NworTkFUQUwtOTMJOgkyCToJNzg3NjcKK0JFVEhVTElFCToJMgk6CTU2MzU0CitVTVpJTlRPCToJMgk6CTc4NzY3CitDT0xFU0JFUkcJOgkyCToJMjY3MDIKK01PVU5UIENVUlJJRQk6CTIJOgkxMjAxNTQKK0RFIEFBUgk6CTIJOgkyNjcwMgorRUFTVEVSTiBDQVBFLTMJOgkyCToJMTIwMTU0CitWQU5IWU5TRE9SUAk6CTIJOgk4MTM3MworVlVMQU0uL0VNWlVNQkUJOgkyCToJNzg3NjcKK1ZJQ1RPUklBIFdFU1QJOgkyCToJMjY3MDIKK1ZVTEFNLi9FTVpVTUJFCToJMgk6CTc4NzY3CitBTEJFUlQJOgkyCToJMTIwMTU0CitBTEZSRUQJOgkyCToJNzg3NjcKK1ZFVEVSU1RBRAk6CTIJOgkxMjAxNTQKK05BVEFMLTk4CToJMgk6CTc4NzY3CitMQURZIEdSRVkJOgkyCToJMTIwMTU0CitQT1JUIFNIRVBTVE9ORQk6CTIJOgk3ODc2NworQUxJV0FMIE5PUlRICToJMgk6CTEyMDE1NAorRVpJTkdPTFdFTkkJOgkyCToJNzg3NjcKK0JBUktMWSBFQVNUCToJMgk6CTEyMDE1NAorTUFDTEVBUgk6CTIJOgkxMjAxNTQKK0hBTk9WRVIJOgkyCToJMjY3MDIKK05BVEFMLTEwMQk6CTIJOgk3ODc2NworUklDSE1PTkQJOgkyCToJMjY3MDIKK1dPREVIT1VTRQk6CTIJOgkxMjAxNTQKK1NURVlOU0JVUkcJOgkyCToJMTIwMTU0CitOT1VQT09SVAk6CTIJOgkyNjcwMgorRUxMSU9UCToJMgk6CTEyMDE1NAorVlJFREVOREFMCToJMgk6CTgxMzczCitGUkFTRVJCVVJHCToJMgk6CTI2NzAyCitNT0xURU5PCToJMgk6CTEyMDE1NAorTUlERExFQlVSRwk6CTIJOgkxMjAxNTQKK0lORFdFCToJMgk6CTEyMDE1NAorSE9GTUVZUgk6CTIJOgkxMjAxNTQKK1NURVJLU1RST09NCToJMgk6CTEyMDE1NAorQkVBVUZPUlQgV0VTVAk6CTIJOgk4MTM3MworVEFSS0FTVEFECToJMgk6CTEyMDE1NAorTVVSUkFZU0JVUkcJOgkyCToJODEzNzMKK1ZSRURFTkRBTAk6CTIJOgk4MTM3MworR1JBQUZGLVJFSU5FVAk6CTIJOgkxMjAxNTQKK1FVRUVOU1RPV04JOgkyCToJMTIwMTU0CitDUkFET0NLCToJMgk6CTEyMDE1NAorU1VUSEVSTEFORAk6CTIJOgkyNjcwMgorQ0xBTldJTExJQU4JOgkyCToJODEzNzMKK1ZJQ1RPUklBIEVBU1QJOgkyCToJMTIwMTU0CitDSEFUQ0FSVAk6CTIJOgkxMjAxNTQKK0FCRVJERUVOCToJMgk6CTEyMDE1NAorQ0VSRVMJOgkyCToJODEzNzMKK1FVRUVOU1RPV04JOgkyCToJMTIwMTU0CitTVVRURVJIRUlNCToJMgk6CTEyMDE1NAorQkVERk9SRAk6CTIJOgkxMjAxNTQKK1BFQVJTVE9OCToJMgk6CTEyMDE1NAorUElLRVRCRVJHCToJMgk6CTgxMzczCitTT01FUlNFVCBFQVNUCToJMgk6CTEyMDE1NAorUVVFRU5TVE9XTgk6CTIJOgkxMjAxNTQKK0FERUxBSURFCToJMgk6CTEyMDE1NAorRk9SVCBCRUFVRk9SVAk6CTIJOgkxMjAxNTQKK0tPTUdBCToJMgk6CTEyMDE1NAorU1RPQ0hFTlNUUk9NCToJMgk6CTEyMDE1NAorTEFJTkdTQlVSRwk6CTIJOgk4MTM3MworUFJJTkNFIEFMQkVSVAk6CTIJOgk4MTM3MworS0lORyBXSUxMSUFNIFRPV04JOgkyCToJMTIwMTU0CitNREFOVFNBTkUgNAk6CTIJOgkxMjAxNTQKK0pBTlNFTlZJTExFCToJMgk6CTEyMDE1NAorVlJFREVOQlVSRwk6CTIJOgk4MTM3MworRUFTVCBMT05ET04JOgkyCToJMTIwMTU0CitXSUxMT1dNT1JFCToJMgk6CTEyMDE1NAorTURBTlRTQU5FCToJMgk6CTEyMDE1NAorSE9QRUZJRUxECToJMgk6CTgxMzczCitNQUxNRVNCVVJZCToJMgk6CTgxMzczCitBTEJBTlkJOgkyCToJMTIwMTU0CitTVEVZTEVSVklMTEUJOgkyCToJMTIwMTU0CitUVUxCQUdICToJMgk6CTgxMzczCitXT1JDRVNURVIJOgkyCToJODEzNzMKK1VJVEVOSEFHRQk6CTIJOgkxMjAxNTQKK0tJUktXT09ECToJMgk6CTEyMDE1NAorQkFUSFVSU1QJOgkyCToJMTIwMTU0CitBTEVYQU5EUklBCToJMgk6CTEyMDE1NAorT1VEVFNIT09STgk6CTIJOgk4MTM3MworQ0FMSVRaRE9SUAk6CTIJOgk4MTM3MworV0VMTElOR1RPTgk6CTIJOgk4MTM3MworVU5JT05EQUxFCToJMgk6CTgxMzczCitMQURJU01JVEgJOgkyCToJODEzNzMKK01BTE1FU0JVUlkJOgkyCToJODEzNzMKK01PTlRBR1UJOgkyCToJODEzNzMKK1BBQVJMCToJMgk6CTgxMzczCitKT1VCRVJUSU5BCToJMgk6CTEyMDE1NAorUE9SVCBFTElTQUJFVEgJOgkyCToJMTIwMTU0CitIQU5LRVkJOgkyCToJMTIwMTU0CitHRU9SR0UJOgkyCToJODEzNzMKK1NXRUxMRU5EQU0JOgkyCToJODEzNzMKK1JPQkVSVFNPTgk6CTIJOgk4MTM3MworSFVNQU5TRE9SUAk6CTIJOgkxMjAxNTQKK0JFTExFVklMTEUJOgkyCToJODEzNzMKK0NBUEUJOgkyCToJODEzNzMKK0tOWVNOQQk6CTIJOgk4MTM3MworU1RFTExFTkJPU0NICToJMgk6CTgxMzczCitDQVBFCToJMgk6CTgxMzczCitSSVZFUlNEQUxFCToJMgk6CTgxMzczCitNT1NTRUwgQkFBSQk6CTIJOgk4MTM3MworQ0FMRURPTgk6CTIJOgk4MTM3MworR09PRFdPT0QJOgkyCToJODEzNzMKK0tVSUxTUklWRVIJOgkyCToJODEzNzMKK0hFSURFTEJFUkcJOgkyCToJODEzNzMKK1dJTkJFUkcJOgkyCToJODEzNzMKK1NJTU9OU1RPV04JOgkyCToJODEzNzMKK1NUUkFORAk6CTIJOgk4MTM3MworQlJFREFTRE9SUAk6CTIJOgk4MTM3MworSEVSTUFOVVMJOgkyCToJODEzNzMKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9TT1VUSEtPUkVBX0FSRUEudHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvU09VVEhLT1JFQV9BUkVBLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMTZjMGE4Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvU09VVEhLT1JFQV9BUkVBLnR4dApAQCAtMCwwICsxLDE3IEBACitTb3V0aCBLb3JlYQk6CTAJOgk5ODQ4MAorQnVzYW4gW1B1c2FuXQk6CTEJOgk3NjIuOTIKK0NodW5nY2hvbmdidWstZG8gCToJMQk6CTc0MzEuNjAKK0NodW5nY2hvbmduYW0tZG8gCToJMQk6CTg1OTcuOTQKK0RhZWd1IFtUYWVndV0JOgkxCToJODg1LjcKK0RhZWplb24gW1RhZWpvbl0JOgkxCToJNTM5LjcKK0thbmctd29uLWRvIAk6CTEJOgkxNjg3My4zOAorS3dhbmdqdQk6CTEJOgk1MDEuNDQKK0t5b25nc2FuZ2J1ay1kbyAJOgkxCToJMTkwMjQuODEKK0t5b25nc2FuZ25hbS1kbyAJOgkxCToJMTA1MTcuNzQKK0t5b25nZ2ktZG8gCToJMQk6CTEwMTgxLjI5CitJbmNob24JOgkxCToJOTg2LjQ1CitDaGVqdS1kbyAJOgkxCToJMTg0Ny4xOQorY2hvbGxhYnVrLWRvIAk6CTEJOgk4MDUwLjk0CitjaG9sbGFuYW0tZG8gCToJMQk6CTEyMDM2Ljk1CitTZW91bAk6CTEJOgk2MDUuNTIKK1Vsc2FuCToJMQk6CTEwNTYuMzgKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL1NPVVRIS09SRUFfUE9QVUxBVElPTi50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9TT1VUSEtPUkVBX1BPUFVMQVRJT04udHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFlMWQyYzgKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9TT1VUSEtPUkVBX1BPUFVMQVRJT04udHh0CkBAIC0wLDAgKzEsMTcgQEAKK1NvdXRoIEtvcmVhCToJMAk6CTQ4ODQ2ODIzCitCdXNhbiBbUHVzYW5dCToJMQk6CTM2ODQxNTMKK0NodW5nY2hvbmdidWstZG8gCToJMQk6CTE1MDA2MTAKK0NodW5nY2hvbmduYW0tZG8gCToJMQk6CTE5NzI1NTMKK0RhZWd1IFtUYWVndV0JOgkxCToJMjUzOTczOAorRGFlamVvbiBbVGFlam9uXQk6CTEJOgkxNDUwNzUwCitLYW5nLXdvbi1kbyAJOgkxCToJMTUyODY0MAorS3dhbmdqdQk6CTEJOgkxNDA2OTE1CitLeW9uZ3NhbmdidWstZG8gCToJMQk6CTI3MTg2MTMKK0t5b25nc2FuZ25hbS1kbyAJOgkxCToJMzE2ODczNAorS3lvbmdnaS1kbyAJOgkxCToJMTA2Mjg4NDIKK0luY2hvbgk6CTEJOgkyNjEwNzE1CitDaGVqdS1kbyAJOgkxCToJNTU3MjM1CitjaG9sbGFidWstZG8gCToJMQk6CTE5MTU2NzQKK2Nob2xsYW5hbS1kbyAJOgkxCToJMTk5NDAxMQorU2VvdWwJOgkxCToJMTAyODc4NDcKK1Vsc2FuCToJMQk6CTEwODc5NTgKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9TUEFJTl9BUkVBLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL1NQQUlOX0FSRUEudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJjYzI0NmYKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9TUEFJTl9BUkVBLnR4dApAQCAtMCwwICsxLDE3IEBACisgR0FMSUNJQSA6IDEgOiAyOTQzNC4wCisgQVNUVVJJQVMgOiAxIDogMTA1NjUuMAorIENBTlRBQlJJQSA6IDEgOiA1Mjk4LjAKKyBQQUlTIFZBU0NPIDogMSA6IDcyNjEuMAorIE5BVkFSUkEgOiAxIDogMTA0MjEuMAorIENBU1RJTExBIC0gTEVPTiA6IDEgOiA5NDE5My4wCisgQVJBR09OIDogMSA6IDQ3NjUwLjAKKyBDQVRBTFVOQSA6IDEgOiAzMTkzMC4wCisgUklPSkEgOiAxIDogNTAzNC4wCisgQ0FTVElMTEEgLSBMQSBNQU5DSEEgOiAxIDogNzkyMzAuMAorIE1BRFJJRCA6IDEgOiA3OTk1LjAKKyBDT01VTklEQUQgVkFMRU5DSUFOQSA6IDEgOiAyMzMwNS4wCisgRVhUUkVNQURVUkEgOiAxIDogNDE2MDIuMAorIEJBTEVBUkVTIDogMSA6IDUwMTQuMAorIE1VUkNJQSA6IDEgOiAxMTMxNy4wCisgQU5EQUxVQ0lBIDogMSA6IDg3MjY4LjAKKyBDQU5BUklBUyA6IDEgOiA3MjQyLjAKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL1NQQUlOX1BPUFVMQVRJT04udHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvU1BBSU5fUE9QVUxBVElPTi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTk3ZDg3NgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL1NQQUlOX1BPUFVMQVRJT04udHh0CkBAIC0wLDAgKzEsMTcgQEAKKyBHQUxJQ0lBIDogMSA6IDI4MDY1MDAKKyBBU1RVUklBUyA6IDEgOiAxMTI3NTAwCisgQ0FOVEFCUklBIDogMSA6IDUyNzIwMAorIFBBSVMgVkFTQ08gOiAxIDogMjEyOTgwMAorIE5BVkFSUkEgOiAxIDogNTIxNDAwCisgQ0FTVElMTEEgLSBMRU9OIDogMSA6IDI2Mjc4MDAKKyBBUkFHT04gOiAxIDogMTIxMzkwMAorIENBVEFMVU5BIDogMSA6IDYwMTA0MDAKKyBSSU9KQSA6IDEgOiAyNjEwMDAKKyBDQVNUSUxMQSAtIExBIE1BTkNIQSA6IDEgOiAxNzE0MDAwCisgTUFEUklEIDogMSA6IDQ4ODY1MDAKKyBDT01VTklEQUQgVkFMRU5DSUFOQSA6IDEgOiAzNzg5NzAwCisgRVhUUkVNQURVUkEgOiAxIDogMTEyODgwMAorIEJBTEVBUkVTIDogMSA6IDY4MzEwMAorIE1VUkNJQSA6IDEgOiAxMDI5NDAwCisgQU5EQUxVQ0lBIDogMSA6IDY5MzY1MDAKKyBDQU5BUklBUyA6IDEgOiAxNDg5MTAwCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9TVURBTl9BUkVBLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL1NVREFOX0FSRUEudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY2ZjYxZmIKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9TVURBTl9BUkVBLnR4dApAQCAtMCwwICsxLDEwMiBAQAorU3VkYW4JOgkwCToJMjUwNTgxMAorRGFyZnVyIDogMSA6IDMxODEzMworS29yZHVmYW4gOiAxIDogMzc2MTQ1CitVcHBlciBOaWxlCToJMQk6CTc3NzczCitQb3J0IFN1ZGFuIAk6CTEJOgkyMTg4ODcKK0hhbGF5ZWIgCToJMQk6CTAKK1JlZCBTZWEgCToJMQk6CTAKK1NpbmthdCAJOgkxCToJMAorVG9rYXIgCToJMQk6CTAKK1J1bWJlayAJOgkxCToJNDAyMzUKK1dhZCBNZWRhbmkgCToJMQk6CTIzMzczCitLYW1saW4gCToJMQk6CTAKK0hhc2FoZXNhIAk6CTEJOgkwCitCdXRhbmEgCToJMQk6CTAKK0dlemlyYSAJOgkxCToJMAorTWFuYWdpbCAJOgkxCToJMAorVW0gRWxnb3JhIAk6CTEJOgkwCitLaGFydG91bSAJOgkxCToJMjIxNDIKK0toYXJ0b3VtIAk6CTEJOgkwCitPbWR1cm1hbiAJOgkxCToJMAorRWFzdCBOaWxlIAk6CTEJOgkwCitHZWRhcmlmICBbRWFzdGVybjFdIFtFYXN0ZXJuXQk6CTEJOgk3NTI2MworR2VkYXJlZiAJOgkxCToJMAorUmFoYWQgCToJMQk6CTAKK0dhbGFiYXQgCToJMQk6CTAKK0Zhc2hnYSAJOgkxCToJMAorQmFudGlvIAk6CTEJOgkzNjAKK1JhYmFrIAk6CTEJOgkzMDQxMQorR2l0YWluYSAJOgkxCToJMAorRHVlbSAJOgkxCToJMAorS29zdGkgCToJMQk6CTAKK0dhYmFsYWluIAk6CTEJOgkwCitBbC1EYW1hemluIAk6CTEJOgk0NTg0NAorRGFtYXppbiAJOgkxCToJMAorS3VybXVrIAk6CTEJOgkwCitSb3NhaXJpcyAJOgkxCToJMAorQmF3IAk6CTEJOgkwCitOb3J0aGVybjMgW05vcnRoZXJuXQk6CTEJOgkzNDg3NjUKK1dhZGkgSGFsZmEgCToJMQk6CTAKK0RvbmdsYSAJOgkxCToJMAorTWVyYXdpIAk6CTEJOgkwCitFbGRhYmEgCToJMQk6CTAKK0JhaHIgRWwgR2hhemFsCToJMQk6CTIyOTU2CitZYW1iaW8gCToJMQk6CTc5MzE5CitXYXUgCToJMQk6CTkzOTAwCitHZW5laW5hIAk6CTEJOgk3OTQ2MAorRWxnaW5laW5hIAk6CTEJOgkwCitaYWxpbmdpIAk6CTEJOgkwCitKYWJlbCBNYXJyYSAJOgkxCToJMAorSGliaWxhIAk6CTEJOgkwCitLaWxiZXNzIAk6CTEJOgkwCitXYWRpIFNhbGloIAk6CTEJOgkwCitBbC1GdWxhIAk6CTEJOgkxMTEzNzMKK0VsbnVodWQgCToJMQk6CTAKK0dhYmllc2ggCToJMQk6CTAKK0Vsc2FsYW0gCToJMQk6CTAKK0xhZ2F3YSAJOgkxCToJMAorTnlhbGEgCToJMQk6CTEyNzMwMAorTnlhbGEgCToJMQk6CTAKK1JhaGV0IEVsYnVyZGkgCToJMQk6CTAKK0lkZGVsZmlyc2FuIAk6CTEJOgkwCitBZGllbGEgCToJMQk6CTAKK0RlYWluIAk6CTEJOgkwCitTaGVyaWEgCToJMQk6CTAKK0J1cmFtIAk6CTEJOgkwCitLYWR1Z2xpIAk6CTEJOgk3OTQ3MAorUmFzaGFkIAk6CTEJOgkwCitBYnUgSmliZWhhIAk6CTEJOgkwCitJZGRlbGZpcnNhbiAJOgkxCToJMAorS2FkdWdsaSAJOgkxCToJMAorVGFsdWRpIAk6CTEJOgkwCitCb3IgCToJMQk6CTEyMjQ3OQorS2Fzc2FsYSAJOgkxCToJMzY3MTAKK0thc3NhbGEgCToJMQk6CTAKK0F0YmFyYSBSaXZlciAJOgkxCToJMAorU2V0dGV0IAk6CTEJOgkwCitFbCBHYXNoIAk6CTEJOgkwCitIYW1hc2tvcmFiZSAJOgkxCToJMAorQWwtRGFtYXIgCToJMQk6CTEyMjEyMworQmVyYmVyIAk6CTEJOgkwCitFZGRhbWVyIAk6CTEJOgkwCitTaGVuZGkgCToJMQk6CTAKK01hdGFtbWEgCToJMQk6CTAKK0FibyBIYW1lZCAJOgkxCToJMAorQXdpbCAJOgkxCToJMzM1NTgKK0FsLUZhc2hpciAJOgkxCToJMjk2NDIwCitLdXR1bSAJOgkxCToJMAorRmFzaGlyIAk6CTEJOgkwCitVbWthZGFkYSAJOgkxCToJMAorS2Fia2FkaWEgCToJMQk6CTAKK0FsLU9iZWlkIAk6CTEJOgkxODUzMDIKK1NvZGFyaSAJOgkxCToJMAorQmFyYSAJOgkxCToJMAorVW1yd2FiYSAJOgkxCToJMAorU2hpa2FuIAk6CTEJOgkwCitIYW1yYXQgRWxzaGllayAJOgkxCToJMAorS2Fwb2l0YSBbRXF1YXRvcmlhXQk6CTEJOgk4MjU0MgorU2VubmFyIFtDZW50cmFsXSAJOgkxCToJMzc4NDQKK1Nlbm5hciAJOgkxCToJMAorRGluZGlyIAk6CTEJOgkwCitTaW5nYSAJOgkxCToJMAorV2FyYXAgCToJMQk6CTMxMDI3CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9TVURBTl9QT1BVTEFUSU9OLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL1NVREFOX1BPUFVMQVRJT04udHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI1NDBjYzcKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9TVURBTl9QT1BVTEFUSU9OLnR4dApAQCAtMCwwICsxLDEwMiBAQAorU3VkYW4JOgkwCToJNDEyMzYzNzgKK0RhcmZ1ciA6IDEgOiA2NDcwMDAwCitLb3JkdWZhbiA6IDEgOiAzODI3MDAwCitHZWRhcmlmIFtFYXN0ZXJuMV0gW0Vhc3Rlcm5dCToJMQk6CTE1NjcwMDAKK0thcG9pdGEgW0VxdWF0b3JpYV0JOgkxCToJIDM1OTA1NgorU2VubmFyICBbQ2VudHJhbF0JOgkxCToJMTIzNjAwMAorQmFociBFbCBHaGF6YWwJOgkxCToJMTUwMAorTm9ydGhlcm4zIFtOb3J0aGVybl0JOgkxCToJNjAzMDAwCitVcHBlciBOaWxlCToJMQk6CTEzNDI5NDMKK1BvcnQgU3VkYW4gCToJMQk6CTcyODAwMAorSGFsYXllYiAJOgkxCToJNzMwMDAKK1JlZCBTZWEgCToJMQk6CTEzODAwMAorU2lua2F0IAk6CTEJOgkyODQwMDAKK1Rva2FyIAk6CTEJOgkyMzMwMDAKK1J1bWJlayAJOgkxCToJMjI1Njk0MgorV2FkIE1lZGFuaSAJOgkxCToJMzU4MzAwMAorS2FtbGluIAk6CTEJOgk0MzAwMDAKK0hhc2FoZXNhIAk6CTEJOgk2NDUwMDAKK0J1dGFuYSAJOgkxCToJNTAyMDAwCitHZXppcmEgCToJMQk6CTc4ODAwMAorTWFuYWdpbCAJOgkxCToJMTA3NTAwMAorVW0gRWxnb3JhIAk6CTEJOgkxNDMwMDAKK0toYXJ0b3VtIAk6CTEJOgk1MTM5MDAwCitLaGFydG91bSAJOgkxCToJNjE3MDAwCitPbWR1cm1hbiAJOgkxCToJMTY5NjAwMAorRWFzdCBOaWxlIAk6CTEJOgkyODI2MDAwCitHZWRhcmVmIAk6CTEJOgkyMTkwMDAKK1JhaGFkIAk6CTEJOgk3MDUwMDAKK0dhbGFiYXQgCToJMQk6CTYyNjAwMAorRmFzaGdhIAk6CTEJOgkxNzAwMAorQmFudGlvIAk6CTEJOgkwCitSYWJhayAJOgkxCToJMTU1NTAwMAorR2l0YWluYSAJOgkxCToJMjk1MDAwCitEdWVtIAk6CTEJOgkzMTIwMDAKK0tvc3RpIAk6CTEJOgk2NTMwMDAKK0dhYmFsYWluIAk6CTEJOgkyOTUwMDAKK0FsLURhbWF6aW4gCToJMQk6CTY3NTAwMAorRGFtYXppbiAJOgkxCToJMTYyMDAwCitLdXJtdWsgCToJMQk6CTEzNTAwMAorUm9zYWlyaXMgCToJMQk6CTM2NTAwMAorQmF3IAk6CTEJOgkxMzAwMAorV2FkaSBIYWxmYSAJOgkxCToJMTA5MDAwCitEb25nbGEgCToJMQk6CTIxMTAwMAorTWVyYXdpIAk6CTEJOgkyNzIwMDAKK0VsZGFiYSAJOgkxCToJMTEwMDAKK1lhbWJpbyAJOgkxCToJMAorV2F1IAk6CTEJOgkwCitHZW5laW5hIAk6CTEJOgkxNjUzMDAwCitFbGdpbmVpbmEgCToJMQk6CTAKK1phbGluZ2kgCToJMQk6CTAKK0phYmVsIE1hcnJhIAk6CTEJOgkwCitIaWJpbGEgCToJMQk6CTAKK0tpbGJlc3MgCToJMQk6CTAKK1dhZGkgU2FsaWggCToJMQk6CTAKK0FsLUZ1bGEgCToJMQk6CTExNjQwMDAKK0VsbnVodWQgCToJMQk6CTAKK0dhYmllc2ggCToJMQk6CTAKK0Vsc2FsYW0gCToJMQk6CTAKK0xhZ2F3YSAJOgkxCToJMAorTnlhbGEgCToJMQk6CTAKK055YWxhIAk6CTEJOgkwCitSYWhldCBFbGJ1cmRpIAk6CTEJOgkwCitJZGRlbGZpcnNhbiAJOgkxCToJMAorQWRpZWxhIAk6CTEJOgkwCitEZWFpbiAJOgkxCToJMAorU2hlcmlhIAk6CTEJOgkwCitCdXJhbSAJOgkxCToJMAorS2FkdWdsaSAJOgkxCToJMTE0MzAwMAorUmFzaGFkIAk6CTEJOgkwCitBYnUgSmliZWhhIAk6CTEJOgkwCitJZGRlbGZpcnNhbiAJOgkxCToJMAorS2FkdWdsaSAJOgkxCToJMAorVGFsdWRpIAk6CTEJOgkwCitCb3IgCToJMQk6CTAKK0thc3NhbGEgCToJMQk6CTEyMTMwMDAKK0thc3NhbGEgCToJMQk6CTk1NzAwMAorQXRiYXJhIFJpdmVyIAk6CTEJOgkyNTYwMDAKK1NldHRldCAJOgkxCToJMAorRWwgR2FzaCAJOgkxCToJMAorSGFtYXNrb3JhYmUgCToJMQk6CTAKK0FsLURhbWFyIAk6CTEJOgk5MzYwMDAKK0JlcmJlciAJOgkxCToJMzA4MDAwCitFZGRhbWVyIAk6CTEJOgkyOTkwMDAKK1NoZW5kaSAJOgkxCToJMTY4MDAwCitNYXRhbW1hIAk6CTEJOgkxNDAwMDAKK0FibyBIYW1lZCAJOgkxCToJMjEwMDAKK0F3aWwgCToJMQk6CTAKK0FsLUZhc2hpciAJOgkxCToJMTU1MjAwMAorS3V0dW0gCToJMQk6CTAKK0Zhc2hpciAJOgkxCToJMAorVW1rYWRhZGEgCToJMQk6CTAKK0thYmthZGlhIAk6CTEJOgkwCitBbC1PYmVpZCAJOgkxCToJMTUzMDAwMAorU29kYXJpIAk6CTEJOgkxMjIwMDAKK0JhcmEgCToJMQk6CTQxMzAwMAorVW1yd2FiYSAJOgkxCToJNzgwMDAwCitTaGlrYW4gCToJMQk6CTE4NDAwMAorSGFtcmF0IEVsc2hpZWsgCToJMQk6CTMxMDAwCitTZW5uYXIgCToJMQk6CTYwNjAwMAorRGluZGlyIAk6CTEJOgkzNzEwMDAKK1NpbmdhIAk6CTEJOgkyNTkwMDAKK1dhcmFwIAk6CTEJOgkwCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9TVVJJTkFNRV9BUkVBLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL1NVUklOQU1FX0FSRUEudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA2MjQyNTgKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9TVVJJTkFNRV9BUkVBLnR4dApAQCAtMCwwICsxLDExIEBACitTdXJpbmFtZQk6CTAJOgkxNjMyNzAKK0Jyb2tvcG9uZG8gIAk6CTEJOgk3MzY0CitDb21tZXdpam5lIAk6CTEJOgkyMzUzCitDb3JvbmllIAk6CTEJOgkzOTAyCitNYXJvd2lqbmUgCToJMQk6CTQ2MjcKK05pY2tlcmllIAk6CTEJOgk1MzUzCitQYXJhIAk6CTEJOgk1MzkzCitQYXJhbWFyaWJvIAk6CTEJOgkxODMKK1NhcmFtYWNjYSAJOgkxCToJMzYzNgorU2lwYWxpd2luaSAJOgkxCToJMTMwNTY3CitXYW5pY2EgCToJMQk6CTQ0MwpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvU1VSSU5BTUVfUE9QVUxBVElPTi50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9TVVJJTkFNRV9QT1BVTEFUSU9OLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMjEyYTNiCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvU1VSSU5BTUVfUE9QVUxBVElPTi50eHQKQEAgLTAsMCArMSwxMiBAQAorU3VyaW5hbWUJOgkwCToJNDM5MTE3CitCcm9rb3BvbmRvICAJOgkxCToJMTQyMTUKK0NvbW1ld2lqbmUgCToJMQk6CTI0NjQ5CitDb3JvbmllIAk6CTEJOgkyODg3CitNYXJvd2lqbmUgCToJMQk6CTE2NjQyCitOaWNrZXJpZSAJOgkxCToJMzY2MzkKK1BhcmEgCToJMQk6CTE4NzQ5CitQYXJhbWFyaWJvIAk6CTEJOgkyNDI5NDYKK1NhcmFtYWNjYSAJOgkxCToJMTU5ODAKK1NpcGFsaXdpbmkgCToJMQk6CTM0MTM2CitXYW5pY2EgCToJMQk6CTg1OTg2CisKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL1NXRURFTl9BUkVBLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL1NXRURFTl9BUkVBLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40OGRkNTE2Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvU1dFREVOX0FSRUEudHh0CkBAIC0wLDAgKzEsMjUgQEAKKyBTV0VERU4gOiAwICA6IDQ0OTk2NAorIE5vcnJib3R0ZW4gOiAxIDogOTg5MTAuMAorIFaEc3RlcmJvdHRlbiA6IDEgOiA1NTQwMS4wCisgSoRtdGxhbmQgOiAxIDogNDk0NDMuMAorIFaEc3Rlcm5vcnJsYW5kIDogMSA6IDIxNjc4LjAKKyBHhHZsZWJvcmcgOiAxIDogMTgxOTEuMAorIEtvcHBhcmJlcmcgOiAxIDogMjgxOTMuMAorIFaEcm1sYW5kIDogMSA6IDE3NTgzLjAKKyBVcHBzYWxhIDogMSA6IDY5ODkuMAorIFYgc3RtYW5sYW5kIDogMSA6IDYzMDIuMAorIFN0b2NraG9sbSA6IDEgOiA2NDg3LjAKKyBPcmVicm8gOiAxIDogODUxOC4wCisgU5RybWxhbmQgOiAxIDogNjA2MC4wCisgWmx2c2JvcmcgOiAxIDogMTEzOTUuMAorIEKUaHVzIDogMSA6IDU0MTAuMAorIFNrYXJhYm9yZyA6IDEgOiA3OTM2LjAKKyBPc3RlcmeUdGxhbmQgOiAxIDogMTA1NjIuMAorIEdvdGxhbmQgOiAxIDogMzE0MC4wCisgSpRua5RwaW5nIDogMSA6IDk5NDMuMAorIEthbG1hciA6IDEgOiAxMTE3MS4wCisgSGFsbGFuZCA6IDEgOiA1NDU0LjAKKyBLcm9ub2JlcmcgOiAxIDogODQ1Ny4wCisgS3Jpc3RpYW5zdGFkIDogMSA6IDYwODguMAorIEJsZWtpbmdlIDogMSA6IDI5NDEuMAorIE1hbG2UaHVzIDogMSA6IDQ5MzguMApkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvU1dFREVOX1BPUFVMQVRJT04udHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvU1dFREVOX1BPUFVMQVRJT04udHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY4Y2M2ZjUKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9TV0VERU5fUE9QVUxBVElPTi50eHQKQEAgLTAsMCArMSwyNCBAQAorIE5vcnJib3R0ZW4gOiAxIDogMjYzNzM1CisgVoRzdGVyYm90dGVuIDogMSA6IDI1MTk2OAorIEqEbXRsYW5kIDogMSA6IDEzNTcyNgorIFaEc3Rlcm5vcnJsYW5kIDogMSA6IDI2MTE1NQorIEeEdmxlYm9yZyA6IDEgOiAyODkyOTQKKyBLb3BwYXJiZXJnIDogMSA6IDI4OTA2NworIFaEcm1sYW5kIDogMSA6IDI4MzExMAorIFVwcHNhbGEgOiAxIDogMjY4ODM1CisgViBzdG1hbmxhbmQgOiAxIDogMjU4NDg3CisgU3RvY2tob2xtIDogMSA6IDE2NDE2NjkKKyBPcmVicm8gOiAxIDogMjcyNTEzCisgU5RybWxhbmQgOiAxIDogMjU1NjM2CisgWmx2c2JvcmcgOiAxIDogNDQxMzkxCisgQpRodXMgOiAxIDogNzM5OTQ1CisgU2thcmFib3JnIDogMSA6IDI3NjgzMAorIE9zdGVyZ5R0bGFuZCA6IDEgOiA0MDMwMTEKKyBHb3RsYW5kIDogMSA6IDU3MTA4CisgSpRua5RwaW5nIDogMSA6IDMwODI5MAorIEthbG1hciA6IDEgOiAyNDExMDIKKyBIYWxsYW5kIDogMSA6IDI1NDcyNQorIEtyb25vYmVyZyA6IDEgOiAxNzc4ODIKKyBLcmlzdGlhbnN0YWQgOiAxIDogMjg5Mjc4CisgQmxla2luZ2UgOiAxIDogMTUwNTY0CisgTWFsbZRodXMgOiAxIDogNzc5MzA5CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9TV0lUWkVSTEFORF9BUkVBLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL1NXSVRaRVJMQU5EX0FSRUEudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdhMWQwZDYKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9TV0lUWkVSTEFORF9BUkVBLnR4dApAQCAtMCwwICsxLDI2IEBACisgU1dJVFpFUkxBTkQgOiAwICA6NDEyODUKKyBTY2hhZmZoYXVzZW4gOiAxIDogMjk4LjAKKyBUaHVyZ2F1IDogMSA6IDEwMTIuMAorIFp1cmljaCA6IDEgOiAxNzI4LjAKKyBBYXJnYXUgOiAxIDogMTQwNC4wCisgQmFzZWwtU3RhZHQgOiAxIDogMzcuMAorIEJhc2VsLUxhbmRzY2hhZnQgOiAxIDogNDI4LjAKKyBTYW5rdCBHYWxsZW4gOiAxIDogMjAxNC4wCisgQmVybi9CZXJuZSA6IDEgOiA2MDQ5LjAKKyBTb2xvdGh1cm4gOiAxIDogNzkwLjAKKyBBcHBlbnplbGwgQXVzc2VycmhvZGVuIDogMSA6IDI0My4wCisgQXBwZW56ZWxsIElubmVycmhvZGVuIDogMSA6IDE3Mi4wCisgTHV6ZXJuIDogMSA6IDE0OTIuMAorIFp1ZyA6IDEgOiAyMzguMAorIFNjaHd5eiA6IDEgOiA5MDguMAorIEdsYXJ1cyA6IDEgOiA2ODQuMAorIE5ldWNoYXRlbCA6IDEgOiA3OTYuMAorIEdyYXViP25kZW4vR3JpZ2lvbmkvR3Jpc2NodW4gOiAxIDogNzEwNS4wCisgRnJpYm91cmcvRnJlaWJ1cmcgOiAxIDogMTY3MC4wCisgTWlkd2FsZGVuIDogMSA6IDI3NS4wCisgVXJpIDogMSA6IDEwNzYuMAorIE9id2FsZGVuIDogMSA6IDQ5MC4wCisgVmF1ZCA6IDEgOiAzMjE5LjAKKyBWYWxhaXMvV2FsbGlzIDogMSA6IDUyMjUuMAorIFRpY2lubyA6IDEgOiAyODEwLjAKKyBHZW6KdmUgOiAxIDogMjgyLjAKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL1NXSVRaRVJMQU5EX1BPUFVMQVRJT04udHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvU1dJVFpFUkxBTkRfUE9QVUxBVElPTi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmZiZjE4MQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL1NXSVRaRVJMQU5EX1BPUFVMQVRJT04udHh0CkBAIC0wLDAgKzEsMjUgQEAKKyBTY2hhZmZoYXVzZW4gOiAxIDogNzE2OTcKKyBUaHVyZ2F1IDogMSA6IDIwNTk0NgorIFp1cmljaCA6IDEgOiAxMTUwNTQ2CisgQWFyZ2F1IDogMSA6IDQ5NjI4MAorIEJhc2VsLVN0YWR0IDogMSA6IDE5MTc4NworIEJhc2VsLUxhbmRzY2hhZnQgOiAxIDogMjMwMTEyCisgU2Fua3QgR2FsbGVuIDogMSA6IDQyMDI2OAorIEJlcm4vQmVybmUgOiAxIDogOTQ1NTczCisgU29sb3RodXJuIDogMSA6IDIyNjY1NQorIEFwcGVuemVsbCBBdXNzZXJyaG9kZW4gOiAxIDogNTE0NzAKKyBBcHBlbnplbGwgSW5uZXJyaG9kZW4gOiAxIDogMTM1NzMKKyBMdXplcm4gOiAxIDogMzE5NTI1CisgWnVnIDogMSA6IDg0OTA4CisgU2Nod3l6IDogMSA6IDExMDUyNgorIEdsYXJ1cyA6IDEgOiAzNzY0OAorIE5ldWNoYXRlbCA6IDEgOiAxNjA2MDkKKyBHcmF1Yj9uZGVuL0dyaWdpb25pL0dyaXNjaHVuIDogMSA6IDE3MDQxMQorIEZyaWJvdXJnL0ZyZWlidXJnIDogMSA6IDIwNzc1MQorIE1pZHdhbGRlbiA6IDEgOiAzMjYyOAorIFVyaSA6IDEgOiAzMzY1MAorIE9id2FsZGVuIDogMSA6IDI4ODEzCisgVmF1ZCA6IDEgOiA1ODM2MjUKKyBWYWxhaXMvV2FsbGlzIDogMSA6IDI0ODMxMworIFRpY2lubyA6IDEgOiAyODY3MjUKKyBHZW6KdmUgOiAxIDogMzc1OTU3CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9TWVJJQV9BUkVBLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL1NZUklBX0FSRUEudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU4NTg2MDcKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9TWVJJQV9BUkVBLnR4dApAQCAtMCwwICsxLDE1IEBACitTeXJpYQk6CTAJOgkxODUxODAKK0hhc2FrYSAoQUwgSGFrc2EpCToJMQk6CTIzMzM0CitMYXR0YWtpYSAoQWwgTGFkaGlxaXlhaAk6CTEJOgkyMjk3CitLdW5laXRyYSAoRWwgUXVuYXl0aXJhaAk6CTEJOgkxODYxCitBciBSYXFxYWgJOgkxCToJMTk2MTYKK0FzIFN1d2F5ZGEJOgkxCToJNTU1MAorRGFyYQk6CTEJOgkzNzMwCitEYXlyIEF6IFphd3IJOgkxCToJMzMwNjAKK0RpbWFzaHEJOgkxCToJMTA1CitBbGVwcG8gKEhhbGFiKSAJOgkxCToJMTg1MDAKK0hhbWFoIAk6CTEJOgk4ODgzCitIb21zIChIaW1zKSAJOgkxCToJNDIyMjMKK0lkbGliIAk6CTEJOgk2MDk3CitSaWYgRGltYXNocSAJOgkxCToJMTgwMzIKK1RhcnR1cyAJOgkxCToJMTg5MgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvU1lSSUFfUE9QVUxBVElPTi50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9TWVJJQV9QT1BVTEFUSU9OLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZjExYmNjCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvU1lSSUFfUE9QVUxBVElPTi50eHQKQEAgLTAsMCArMSwxNSBAQAorU3lyaWEJOgkwCToJMTg4ODEzNjEKK0hhc2FrYSAoQUwgSGFrc2EpCToJMQk6CTEyNjUwMDAKK0xhdHRha2lhIChBbCBMYWRoaXFpeWFoCToJMQk6CTg3NjAwMAorS3VuZWl0cmEgKEVsIFF1bmF5dGlyYWgJOgkxCToJNjYwMDAKK0FyIFJhcXFhaAk6CTEJOgk2OTEwMDAKK0FzIFN1d2F5ZGEJOgkxCToJMzA3MDAwCitEYXJhCToJMQk6CTc4MDAwMAorRGF5ciBBeiBaYXdyCToJMQk6CTkxOTAwMAorRGltYXNocQk6CTEJOgkxNjUzMDAwCitBbGVwcG8gKEhhbGFiKSAJOgkxCToJMzcxOTAwMAorSGFtYWggCToJMQk6CTEzMzUwMDAKK0hvbXMgKEhpbXMpIAk6CTEJOgkxNDkwMDAwCitJZGxpYiAJOgkxCToJMTEyMDAwMAorUmlmIERpbWFzaHEgCToJMQk6CTIyMzUwMDAKK1RhcnR1cyAJOgkxCToJNjc0MDAwCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9UQUpJS0lTVEFOX0FSRUEudHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvVEFKSUtJU1RBTl9BUkVBLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MTMyYzYwCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvVEFKSUtJU1RBTl9BUkVBLnR4dApAQCAtMCwwICsxLDYgQEAKK1RhamlraXN0YW4JOgkwCToJMTQzMTAwCitEdXNoYW5iZQk6CTEJOgkxMDAKK0toYXRsb24JOgkxCToJMjQ4MDAKK0dvcm5vLUJhZGFraHNoYW4JOgkxCToJNjQyMDAKK1JSUyBbVGFkemhpa2lzdGFuIFRlcnJpdG9yaWVzXQk6CTEJOgkyODYwMAorS2h1amFuZCBbTGVuaW5hYmFkXQk6CTEJOgkyNTQwMApkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvVEFKSUtJU1RBTl9QT1BVTEFUSU9OLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL1RBSklLSVNUQU5fUE9QVUxBVElPTi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmM3MTA3YgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL1RBSklLSVNUQU5fUE9QVUxBVElPTi50eHQKQEAgLTAsMCArMSw2IEBACitUYWppa2lzdGFuCToJMAk6CTczMjA4MTUKK0R1c2hhbmJlCToJMQk6CTYzMTcwMAorS2hhdGxvbgk6CTEJOgkyNDI0MTAwCitHb3Juby1CYWRha2hzaGFuCToJMQk6CTIxNzkwMAorUlJTIFtUYWR6aGlraXN0YW4gVGVycml0b3JpZXNdCToJMQk6CTE0OTg5MDAKK0todWphbmQgW0xlbmluYWJhZF0JOgkxCToJMjAyNzgwMApkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvVEFOWkFOSUEgVU5JVEVEIFJFUFVCTElDX0FSRUEudHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvVEFOWkFOSUEgVU5JVEVEIFJFUFVCTElDX0FSRUEudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMxZDM1NWIKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9UQU5aQU5JQSBVTklURUQgUkVQVUJMSUNfQVJFQS50eHQKQEAgLTAsMCArMSwyOCBAQAorVGFuemFuaWEgVW5pdGVkIFJlcHVibGljCToJMAk6CTk0NTA4NworTC4gVmljdG9yaWEgOiAxIDogNjg4MDAKK0FydXNoYSAgIAk6CTEJOgkzNjQ4NgorRGFyLWVzLVNhbGFhbSAJOgkxCToJMTM5MworRG9kb21hIAk6CTEJOgk0MTMxMQorSXJpbmdhIAk6CTEJOgk1Njg2NAorS2FnZXJhIAk6CTEJOgkyODM4OAorS2Fza2F6aW5pLVBlbWJhIAk6CTEJOgk1NzQKK0thc2themluaS1Vbmd1amEgCToJMQk6CTQ3MAorS2lnb21hIAk6CTEJOgkzNzAzNworS2lsaW1hbmphcm8gCToJMQk6CTEzMzA5CitLdXNpbmkgUGVtYmEgCToJMQk6CTMzMgorS3VzaW5pIFVuZ3VqYSAJOgkxCToJODU0CitMaW5kaSAJOgkxCToJNjYwNDYKK01hbnlhcmEgCToJMQk6CTQ1ODIwCitNYXJhIAk6CTEJOgkxOTU2NgorTWJleWEgCToJMQk6CTYwMzUwCitNamluaS1NYWdoYXJpYmkJOgkxCToJMjMwCitNb3JvZ29ybyAJOgkxCToJNzA3OTkKK010d2FyYSAJOgkxCToJMTY3MDcKK013YW56YSAJOgkxCToJMTk1OTIKK1B3YW5pIAk6CTEJOgkzMjQwNworUnVrd2EgCToJMQk6CTY4NjM1CitSdXZ1bWEgCToJMQk6CTYzNDk4CitTaGlueWFuZ2EgCToJMQk6CTUwNzgxCitTaW5naWRhIAk6CTEJOgk0OTM0MQorVGFib3JhIAk6CTEJOgk3NjE1MQorVGFuZ2EgCToJMQk6CTI2ODA4CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9UQU5aQU5JQSBVTklURUQgUkVQVUJMSUNfUE9QVUxBVElPTi50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9UQU5aQU5JQSBVTklURUQgUkVQVUJMSUNfUE9QVUxBVElPTi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGU5OGEyYwotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL1RBTlpBTklBIFVOSVRFRCBSRVBVQkxJQ19QT1BVTEFUSU9OLnR4dApAQCAtMCwwICsxLDI4IEBACitUYW56YW5pYSBVbml0ZWQgUmVwdWJsaWMJOgkwCToJMzc0NDUzOTIKK0wuIFZpY3RvcmlhIDogMSA6IDAKK0FydXNoYSAgIAk6CTEJOgkxMjg4MDg4CitEYXItZXMtU2FsYWFtIAk6CTEJOgkyNDg3Mjg4CitEb2RvbWEgCToJMQk6CTE2OTIwMjUKK0lyaW5nYSAJOgkxCToJMTQ5MDg5MgorS2FnZXJhIAk6CTEJOgkyMDI4MTU3CitLYXNrYXppbmktUGVtYmEgCToJMQk6CTE4NTMyNgorS2Fza2F6aW5pLVVuZ3VqYSAJOgkxCToJMTM2NjM5CitLaWdvbWEgCToJMQk6CTE2NzQwNDcKK0tpbGltYW5qYXJvIAk6CTEJOgkxMzc2NzAyCitLdXNpbmkgUGVtYmEgCToJMQk6CTE3NTQ3MQorS3VzaW5pIFVuZ3VqYSAJOgkxCToJOTQyNDQKK0xpbmRpIAk6CTEJOgk3ODc2MjQKK01hbnlhcmEgCToJMQk6CTEwMzc2MDUKK01hcmEgCToJMQk6CTEzNjMzOTcKK01iZXlhIAk6CTEJOgkyMDYzMzI4CitNamluaS1NYWdoYXJpYmkJOgkxCToJMzkwMDc0CitNb3JvZ29ybyAJOgkxCToJMTc1MzM2MgorTXR3YXJhIAk6CTEJOgkxMTI0NDgxCitNd2FuemEgCToJMQk6CTI5Mjk2NDQKK1B3YW5pIAk6CTEJOgk4ODUwMTcKK1J1a3dhIAk6CTEJOgkxMTM2MzU0CitSdXZ1bWEgCToJMQk6CTExMTM3MTUKK1NoaW55YW5nYSAJOgkxCToJMjc5NjYzMAorU2luZ2lkYSAJOgkxCToJMTA4Njc0OAorVGFib3JhIAk6CTEJOgkxNzEwNDY1CitUYW5nYSAJOgkxCToJMTYzNjI4MApkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvVEFOWkFOSUFfQVJFQS50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9UQU5aQU5JQV9BUkVBLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMWQzNTViCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvVEFOWkFOSUFfQVJFQS50eHQKQEAgLTAsMCArMSwyOCBAQAorVGFuemFuaWEgVW5pdGVkIFJlcHVibGljCToJMAk6CTk0NTA4NworTC4gVmljdG9yaWEgOiAxIDogNjg4MDAKK0FydXNoYSAgIAk6CTEJOgkzNjQ4NgorRGFyLWVzLVNhbGFhbSAJOgkxCToJMTM5MworRG9kb21hIAk6CTEJOgk0MTMxMQorSXJpbmdhIAk6CTEJOgk1Njg2NAorS2FnZXJhIAk6CTEJOgkyODM4OAorS2Fza2F6aW5pLVBlbWJhIAk6CTEJOgk1NzQKK0thc2themluaS1Vbmd1amEgCToJMQk6CTQ3MAorS2lnb21hIAk6CTEJOgkzNzAzNworS2lsaW1hbmphcm8gCToJMQk6CTEzMzA5CitLdXNpbmkgUGVtYmEgCToJMQk6CTMzMgorS3VzaW5pIFVuZ3VqYSAJOgkxCToJODU0CitMaW5kaSAJOgkxCToJNjYwNDYKK01hbnlhcmEgCToJMQk6CTQ1ODIwCitNYXJhIAk6CTEJOgkxOTU2NgorTWJleWEgCToJMQk6CTYwMzUwCitNamluaS1NYWdoYXJpYmkJOgkxCToJMjMwCitNb3JvZ29ybyAJOgkxCToJNzA3OTkKK010d2FyYSAJOgkxCToJMTY3MDcKK013YW56YSAJOgkxCToJMTk1OTIKK1B3YW5pIAk6CTEJOgkzMjQwNworUnVrd2EgCToJMQk6CTY4NjM1CitSdXZ1bWEgCToJMQk6CTYzNDk4CitTaGlueWFuZ2EgCToJMQk6CTUwNzgxCitTaW5naWRhIAk6CTEJOgk0OTM0MQorVGFib3JhIAk6CTEJOgk3NjE1MQorVGFuZ2EgCToJMQk6CTI2ODA4CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9UQU5aQU5JQV9QT1BVTEFUSU9OLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL1RBTlpBTklBX1BPUFVMQVRJT04udHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBlOThhMmMKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9UQU5aQU5JQV9QT1BVTEFUSU9OLnR4dApAQCAtMCwwICsxLDI4IEBACitUYW56YW5pYSBVbml0ZWQgUmVwdWJsaWMJOgkwCToJMzc0NDUzOTIKK0wuIFZpY3RvcmlhIDogMSA6IDAKK0FydXNoYSAgIAk6CTEJOgkxMjg4MDg4CitEYXItZXMtU2FsYWFtIAk6CTEJOgkyNDg3Mjg4CitEb2RvbWEgCToJMQk6CTE2OTIwMjUKK0lyaW5nYSAJOgkxCToJMTQ5MDg5MgorS2FnZXJhIAk6CTEJOgkyMDI4MTU3CitLYXNrYXppbmktUGVtYmEgCToJMQk6CTE4NTMyNgorS2Fza2F6aW5pLVVuZ3VqYSAJOgkxCToJMTM2NjM5CitLaWdvbWEgCToJMQk6CTE2NzQwNDcKK0tpbGltYW5qYXJvIAk6CTEJOgkxMzc2NzAyCitLdXNpbmkgUGVtYmEgCToJMQk6CTE3NTQ3MQorS3VzaW5pIFVuZ3VqYSAJOgkxCToJOTQyNDQKK0xpbmRpIAk6CTEJOgk3ODc2MjQKK01hbnlhcmEgCToJMQk6CTEwMzc2MDUKK01hcmEgCToJMQk6CTEzNjMzOTcKK01iZXlhIAk6CTEJOgkyMDYzMzI4CitNamluaS1NYWdoYXJpYmkJOgkxCToJMzkwMDc0CitNb3JvZ29ybyAJOgkxCToJMTc1MzM2MgorTXR3YXJhIAk6CTEJOgkxMTI0NDgxCitNd2FuemEgCToJMQk6CTI5Mjk2NDQKK1B3YW5pIAk6CTEJOgk4ODUwMTcKK1J1a3dhIAk6CTEJOgkxMTM2MzU0CitSdXZ1bWEgCToJMQk6CTExMTM3MTUKK1NoaW55YW5nYSAJOgkxCToJMjc5NjYzMAorU2luZ2lkYSAJOgkxCToJMTA4Njc0OAorVGFib3JhIAk6CTEJOgkxNzEwNDY1CitUYW5nYSAJOgkxCToJMTYzNjI4MApkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvVEhBSUxBTkRfQVJFQS50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9USEFJTEFORF9BUkVBLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44M2RlNWFlCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvVEhBSUxBTkRfQVJFQS50eHQKQEAgLTAsMCArMSw4NiBAQAorVGhhaWxhbmQJOgkwCToJNTE0MDAwCitCYW5na29rCToJMQk6CTc3NjEuNjAKK0tydW5nIFRoZXAgTWFuYWtob24gW0NlbnRyYWxdCToJMQk6CTE1NjguNzAKK05ha2hvbiBQYXRob20gCToJMQk6CTIxNjguMzAKK05vbnRoYWJ1cmkgCToJMQk6CTYyMi4zCitQYXRodW0gVGhhbmkgCToJMQk6CTE1MjUuOTAKK1NhbXV0IFByYWthbiAJOgkxCToJMTAwNC4xMAorU2FtdXQgU2FraG9uIAk6CTEJOgk4NzIuMworRWFzdGVybgk6CTEJOgkzNjUwMi41MAorQ2hhY2hvZW5nc2FvIAk6CTEJOgk1MzUxLjAwCitDaGFudGhhYnVyaSAJOgkxCToJNjMzOC4wMAorQ2hvbiBCdXJpIAk6CTEJOgk0MzYzLjAwCitOYWtob24gTmF5b2sgCToJMQk6CTIxMjIuMDAKK1ByYWNoaW4gQnVyaSAJOgkxCToJNDc2Mi40MAorUmF5b25nIAk6CTEJOgkzNTUyLjAwCitTYSBLYWVvIAk6CTEJOgk3MTk1LjEwCitUcmF0IAk6CTEJOgkyODE5LjAwCitOb3J0aGVhc3Rlcm4JOgkxCToJMTY4ODU1LjMwCitBbW5hdCBDaGFyb2VuIAk6CTEJOgkzMTYxLjIwCitCdXJpIFJhbSAJOgkxCToJMTAzMjIuOTAKK0NoYWl5YXBodW0gCToJMQk6CTEyNzc4LjMwCitLYWxhc2luIAk6CTEJOgk2OTQ2LjcwCitLaG9uIEthZW4gCToJMQk6CTEwODg2LjAwCitMb2VpIAk6CTEJOgkxMTQyNC42MAorTWFoYSBTYXJha2hhbSAJOgkxCToJNTI5MS43MAorTXVrZGFoYW4gCToJMQk6CTQzMzkuODAKK05ha2hvbiBQaGFub20gCToJMQk6CTU1MTIuNzAKK05ha2hvbiBSYXRjaGFzaW1hIAk6CTEJOgkyMDQ5NC4wMAorTm9uZyBCdWEgTGFtIFBodSAJOgkxCToJMzg1OS4wMAorTm9uZyBLaGFpIAk6CTEJOgk3MzMyLjMwCitSb2kgRXQgCToJMQk6CTgyOTkuNDAKK1Nha29uIE5ha2hvbiAJOgkxCToJOTYwNS44MAorU2kgU2EgS2V0IAk6CTEJOgk4ODQwLjAwCitTdXJpbiAJOgkxCToJODEyNC4xMAorVWJvbiBSYXRjaGF0aGFuaSAJOgkxCToJMTU3NDQuODAKK1Vkb24gVGhhbmkgCToJMQk6CTExNzMwLjMwCitZYXNvdGhvbiAJOgkxCToJNDE2MS43MAorTm9ydGhlcm4JOgkxCToJMTY5NjQ0LjMwCitDaGlhbmcgTWFpIAk6CTEJOgkyMDEwNy4wMAorQ2hpYW5nIFJhaSAJOgkxCToJMTE2NzguNDAKK0thbXBoYWVuZyBQaGV0IAk6CTEJOgk4NjA3LjUwCitMYW1wYW5nIAk6CTEJOgkxMjUzNC4wMAorTGFtcGh1biAJOgkxCToJNDUwNS45MAorTWFlIEhvbmcgU29uIAk6CTEJOgkxMjY4MS4zMAorTmFraG9uIFNhd2FuIAk6CTEJOgk5NTk3LjcwCitOYW4gCToJMQk6CTExNDcyLjEwCitQaGF5YW8gCToJMQk6CTYzMzUuMTAKK1BoZXRjaGFidW4gCToJMQk6CTEyNjY4LjQwCitQaGljaGl0IAk6CTEJOgk0NTMxLjAwCitQaGl0c2FudWxvayAJOgkxCToJMTA4MTUuODAKK1BocmFlIAk6CTEJOgk2NTM4LjYwCitTdWtob3RoYWkgCToJMQk6CTY1OTYuMTAKK1RhayAJOgkxCToJMTY0MDYuNjAKK1V0aGFpIFRoYW5pIAk6CTEJOgk2NzMwLjIwCitVdHRhcmFkaXQgCToJMQk6CTc4MzguNjAKK1NvdXRoZXJuCToJMQk6CTcwNzE1LjIwCitDaHVtcGhvbiAJOgkxCToJNjAwOS4wMAorS3JhYmkgCToJMQk6CTQ3MDguNTAKK05ha2hvbiBTaSBUaGFtbWFyYXQgCToJMQk6CTk5NDIuNTAKK05hcmF0aGl3YXQgCToJMQk6CTQ0NzUuNDAKK1BhdHRhbmkgCToJMQk6CTE5NDAuNDAKK1BoYW5nbmdhIAk6CTEJOgk0MTcwLjkwCitQaGF0dGhhbHVuZyAJOgkxCToJMzQyNC41MAorUGh1a2V0IAk6CTEJOgk1NDMKK1Jhbm9uZyAJOgkxCToJMzI5OC4wMAorU2F0dW4gCToJMQk6CTI0NzkuMDAKK1NvbmdraGxhIAk6CTEJOgk3MzkzLjkwCitTdXJhdCBUaGFuaSAJOgkxCToJMTI4OTEuNTAKK1RyYW5nIAk6CTEJOgk0OTE3LjUwCitZYWxhIAk6CTEJOgk0NTIxLjEwCitTdWIgQ2VudHJhbAk6CTEJOgkxNjU5My41MAorQW5nIFRob25nIAk6CTEJOgk5NjguNAorQ2hhaSBOYXQgCToJMQk6CTI0NjkuNzAKK0xvcCBCdXJpIAk6CTEJOgk2MTk5LjgwCitQaHJhIE5ha2hvbiBTaSBBeXV0dGhheWEgCToJMQk6CTI1NTYuNjAKK1NhcmFidXJpIAk6CTEJOgkzNTc2LjUwCitTaW5nIEJ1cmkgCToJMQk6CTgyMi41CitXZXN0ZXJuIFJlZ2lvbiAJOgkxCToJNDMwNDcuMTAKK0thbmNoYW5hYnVyaSAJOgkxCToJMTk0ODMuMjAKK1BoZXRjaGFidXJpIAk6CTEJOgk2MjI1LjEwCitQcmFjaHVhcCBLaGlyaSBLaGFuIAk6CTEJOgk2MzY3LjYwCitSYXRjaGFidXJpIAk6CTEJOgk1MTk2LjUwCitTYW11dCBTb25na2hyYW0gCToJMQk6CTQxNi43CitTdXBoYW4gQnVyaSAJOgkxCToJNTM1OC4wMAorCisKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL1RIQUlMQU5EX1BPUFVMQVRJT04udHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvVEhBSUxBTkRfUE9QVUxBVElPTi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTdjZWQyZAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL1RIQUlMQU5EX1BPUFVMQVRJT04udHh0CkBAIC0wLDAgKzEsODQgQEAKK1RoYWlsYW5kCToJMAk6CTY0NjMxNTk1CitCYW5na29rCToJMQk6CTk2Njg4NTQKK0tydW5nIFRoZXAgTWFuYWtob24gW0NlbnRyYWxdCToJMQk6CTU3ODIxNTkKK05ha2hvbiBQYXRob20gCToJMQk6CTgwMTk1NgorTm9udGhhYnVyaSAJOgkxCToJOTA1MTk3CitQYXRodW0gVGhhbmkgCToJMQk6CTcwODkwOQorU2FtdXQgUHJha2FuIAk6CTEJOgkxMDI3NzE5CitTYW11dCBTYWtob24gCToJMQk6CTQ0MjkxNAorRWFzdGVybgk6CTEJOgk0MzAwNTEzCitDaGFjaG9lbmdzYW8gCToJMQk6CTY0OTc1OAorQ2hhbnRoYWJ1cmkgCToJMQk6CTUwNjAxMQorQ2hvbiBCdXJpIAk6CTEJOgkxMTI5ODg2CitOYWtob24gTmF5b2sgCToJMQk6CTI1MTA2NAorUHJhY2hpbiBCdXJpIAk6CTEJOgk0NTI4MjIKK1JheW9uZyAJOgkxCToJNTQ2NTcwCitTYSBLYWVvIAk6CTEJOgk1MzkxMDcKK1RyYXQgCToJMQk6CTIyNTI5NQorTm9ydGhlYXN0ZXJuCToJMQk6CTIxNjA5MTg1CitBbW5hdCBDaGFyb2VuIAk6CTEJOgkzNzAzNjAKK0J1cmkgUmFtIAk6CTEJOgkxNTQ1Nzc5CitDaGFpeWFwaHVtIAk6CTEJOgkxMTM2NTA4CitLYWxhc2luIAk6CTEJOgk5OTAyMTIKK0tob24gS2FlbiAJOgkxCToJMTc2NzY0MworTG9laSAJOgkxCToJNjM1NTg3CitNYWhhIFNhcmFraGFtIAk6CTEJOgk5NDI5MDkKK011a2RhaGFuIAk6CTEJOgkzMzgyNzYKK05ha2hvbiBQaGFub20gCToJMQk6CTcyMTU0MAorTmFraG9uIFJhdGNoYXNpbWEgCToJMQk6CTI1ODEyNDQKK05vbmcgQnVhIExhbSBQaHUgCToJMQk6CTQ5ODUxMworTm9uZyBLaGFpIAk6CTEJOgk5MDk1NDMKK1JvaSBFdCAJOgkxCToJMTMyMjg2NAorU2Frb24gTmFraG9uIAk6CTEJOgkxMTA3NzUyCitTaSBTYSBLZXQgCToJMQk6CTE0NTg5NjkKK1N1cmluIAk6CTEJOgkxMzk5Mzc3CitVYm9uIFJhdGNoYXRoYW5pIAk6CTEJOgkxNzkyNzc0CitVZG9uIFRoYW5pIAk6CTEJOgkxNTM1NDcxCitZYXNvdGhvbiAJOgkxCToJNTUzODY0CitOb3J0aGVybgk6CTEJOgkxMjE1MjUwMgorQ2hpYW5nIE1haSAJOgkxCToJMTU5NTg1NQorQ2hpYW5nIFJhaSAJOgkxCToJMTI3NDIxNAorS2FtcGhhZW5nIFBoZXQgCToJMQk6CTc2ODEzMAorTGFtcGFuZyAJOgkxCToJODAwNzc1CitMYW1waHVuIAk6CTEJOgk0MDcyMDIKK01hZSBIb25nIFNvbiAJOgkxCToJMjQwMDE0CitOYWtob24gU2F3YW4gCToJMQk6CTExMzA4NDEKK05hbiAJOgkxCToJNDg3NzQyCitQaGF5YW8gCToJMQk6CTUwODU1NAorUGhldGNoYWJ1biAJOgkxCToJMTA0MDc4NgorUGhpY2hpdCAJOgkxCToJNTkxOTUzCitQaGl0c2FudWxvayAJOgkxCToJODY3Njg1CitQaHJhZSAJOgkxCToJNDg1MTIxCitTdWtob3RoYWkgCToJMQk6CTYyNTA5OQorVGFrIAk6CTEJOgk1MDczNzEKK1V0aGFpIFRoYW5pIAk6CTEJOgkzMzYxNzYKK1V0dGFyYWRpdCAJOgkxCToJNDg0OTg0CitTb3V0aGVybgk6CTEJOgk4NDE1OTA4CitDaHVtcGhvbiAJOgkxCToJNDczODE4CitLcmFiaSAJOgkxCToJMzc3OTU0CitOYWtob24gU2kgVGhhbW1hcmF0IAk6CTEJOgkxNTMzODk0CitOYXJhdGhpd2F0IAk6CTEJOgk2OTk5NTEKK1BhdHRhbmkgCToJMQk6CTYyNzk1NQorUGhhbmduZ2EgCToJMQk6CTIzOTQwMQorUGhhdHRoYWx1bmcgCToJMQk6CTUwNDQ1NAorUGh1a2V0IAk6CTEJOgkyNzA0MzgKK1Jhbm9uZyAJOgkxCToJMTYzMTYwCitTYXR1biAJOgkxCToJMjcwODAyCitTb25na2hsYSAJOgkxCToJMTI3MTA2NworU3VyYXQgVGhhbmkgCToJMQk6CTkyMDI4MworVHJhbmcgCToJMQk6CTYwMzA3MgorWWFsYSAJOgkxCToJNDU5NjU5CitTdWIgQ2VudHJhbAk6CTEJOgkzMDAyNTQ0CitBbmcgVGhvbmcgCToJMQk6CTI5MDQyMworQ2hhaSBOYXQgCToJMQk6CTM1MDU0NworTG9wIEJ1cmkgCToJMQk6CTc2Nzk4NQorUGhyYSBOYWtob24gU2kgQXl1dHRoYXlhIAk6CTEJOgk3NDgyNDMKK1NhcmFidXJpIAk6CTEJOgk2MjE5OTQKK1NpbmcgQnVyaSAJOgkxCToJMjIzMzUyCitXZXN0ZXJuIFJlZ2lvbiAJOgkxCToJMzY1MDM2NgorS2FuY2hhbmFidXJpIAk6CTEJOgk4MDE4MzYKK1BoZXRjaGFidXJpIAk6CTEJOgk0NjEzMzkKK1ByYWNodWFwIEtoaXJpIEtoYW4gCToJMQk6CTQ4ODQ3NworUmF0Y2hhYnVyaSAJOgkxCToJODMwMjc1CitTYW11dCBTb25na2hyYW0gCToJMQk6CTIwNTEzNQorU3VwaGFuIEJ1cmkgCToJMQk6CTg2MzMwNApkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvVE9HT19BUkVBLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL1RPR09fQVJFQS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODlhYzYyYgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL1RPR09fQVJFQS50eHQKQEAgLTAsMCArMSwzNiBAQAorVG9nbwk6CTAJOgk1Njc4NQorQ2VudHJlCToJMQk6CTEzMzE3CitCbGl0dGEgCToJMgk6CTI5NzMKK1NvdG91Ym91YSAJOgkyCToJNDQ4NworVGNoYW1iYSAJOgkyCToJMzE0OQorVGNoYW91ZGpvIAk6CTIJOgkyNzA4CitLYXJhCToJMQk6CTExNzM4CitBc3NvbGkgCToJMgk6CTkzOAorQmFzc2FyIAk6CTIJOgkzNjIwCitCaW5haCAJOgkyCToJNDgwCitEYW5rcGVuIAk6CTIJOgkyNjkwCitEb3VmZWxnb3UgCToJMgk6CTEyNzUKK0tlcmFuIAk6CTIJOgkxNjYwCitLb3phaCAJOgkyCToJMTA3NQorTWFyaXRpbWUJOgkxCToJNjEwMAorQXZlIAk6CTIJOgkxMTQ2CitHb2xmZSAJOgkyCToJMjgwCitMYWNzIAk6CTIJOgk3MDYKK1ZvIAk6CTIJOgk3MTQKK1lvdG8gCToJMgk6CTEyMDAKK1ppbyAJOgkyCToJMjA1NAorUGxhdGVhdXgJOgkxCToJMTY5NzUKK0Fnb3UgCToJMgk6CTEwMjYKK0Ftb3UgCToJMgk6CTIwMDMKK0RhbnlpIAk6CTIJOgkzODcKK0VzdC1Nb25vIAk6CTIJOgkyNDc0CitIYWhvIAk6CTIJOgkzMDM0CitLbG90byAJOgkyCToJMTM2NAorTW95ZW4tTW9ubyAJOgkyCToJNjA3CitPZ291IAk6CTIJOgkzNjA5CitXYXdhIAk6CTIJOgkyNDcxCitTYXZhbmVzCToJMQk6CTg0NzAKK0twZW5kamFsIAk6CTIJOgkxNzk0CitPdGkgCToJMgk6CTQzMTMKK1RhbmRqb2FyZSAJOgkyCToJODQ4CitUb25lIAk6CTIJOgkxNTE1CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9UT0dPX1BPUFVMQVRJT04udHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvVE9HT19QT1BVTEFUSU9OLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZDU0MTJmCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvVE9HT19QT1BVTEFUSU9OLnR4dApAQCAtMCwwICsxLDM2IEBACitUb2dvCToJMAk6CTU1NDg3MDIKK0NlbnRyZTEJOgkxCToJNTEwNDQ2CitCbGl0dGEgCToJMgk6CTExMTk5NworU290b3Vib3VhIAk6CTIJOgkxNDEwNzMKK1RjaGFtYmEgCToJMgk6CTgzOTk3CitUY2hhb3Vkam8gCToJMgk6CTE3MzM3OQorS2FyYQk6CTEJOgk2ODkyMTAKK0Fzc29saSAJOgkyCToJNTM4NDUKK0Jhc3NhciAJOgkyCToJMTA4NzY2CitCaW5haCAJOgkyCToJNjc4NDQKK0RhbmtwZW4gCToJMgk6CTc3NTM2CitEb3VmZWxnb3UgCToJMgk6CTg3MjI4CitLZXJhbiAJOgkyCToJNzMyMjkKK0tvemFoIAk6CTIJOgkyMjA3NjMKK01hcml0aW1lCToJMQk6CTIxOTY4NTcKK0F2ZSAJOgkyCToJOTE1MzYKK0dvbGZlIAk6CTIJOgkxMjI0NDI1CitMYWNzIAk6CTIJOgkyMzQ3NjIKK1ZvIAk6CTIJOgkyMjUwNzAKK1lvdG8gCToJMgk6CTE1OTM4MAorWmlvIAk6CTIJOgkyNjE2ODQKK1BsYXRlYXV4CToJMQk6CTEyMDE4MTAKK0Fnb3UgCToJMgk6CTg4MzA1CitBbW91IAk6CTIJOgkxMDAxNTEKK0RhbnlpIAk6CTIJOgk0MzA3NgorRXN0LU1vbm8gCToJMgk6CTc5NjkwCitIYWhvIAk6CTIJOgkxOTQ5MTcKK0tsb3RvIAk6CTIJOgkxOTI3NjMKK01veWVuLU1vbm8gCToJMgk6CTc1MzgyCitPZ291IAk6CTIJOgkyNjQ5MTUKK1dhd2EgCToJMgk6CTE2MjYxMAorU2F2YW5lcwk6CTEJOgk2Mjg5MDQKK0twZW5kamFsIAk6CTIJOgkxMjA2MTIKK090aSAJOgkyCToJMTM4OTE5CitUYW5kam9hcmUgCToJMgk6CTkyNjEzCitUb25lIAk6CTIJOgkyNzY3NjEKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL1RVTklTSUFfQVJFQS50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9UVU5JU0lBX0FSRUEudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE2YTk2NjcKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9UVU5JU0lBX0FSRUEudHh0CkBAIC0wLDAgKzEsMzMgQEAKK1R1bmlzaWEJOgkwCToJMTYzNjEwCitSZWdpb24gMSA6IDEgOiAyNjY1CitSZWdpb24gMiA6IDEgOiA5MjQxCitSZWdpb24gMyA6IDEgOiAxMzE1NAorUmVnaW9uIDQgOiAxIDogMjE3NzIKK1JlZ2lvbiA1IDogMSA6IDE0MTUxCitSZWdpb24gNiA6IDEgOiAzNTc5MworUmVnaW9uIDcgOiAxIDogNTQ2NTIKK0FyaWFuYSAJOgkxCToJMTU1OAorQulqYSAJOgkxCToJMzU1OAorQmVuIEFyb3VzIAk6CTEJOgk3NjEKK0JpemVydGUgCToJMQk6CTM2ODUKK0dhYuhzIAk6CTEJOgk3MTc1CitHYWZzYSAJOgkxCToJODk5MAorSmVuZG91YmEgCToJMQk6CTMxMDIKK0thaXJvdWFuIAk6CTEJOgk2NzEyCitLYXNzZXJpbmUgCToJMQk6CTgwNjYKK0vpYmlsaSAJOgkxCToJMjIwODQKK0xlIEtlZiAJOgkxCToJNDk2NQorTWFoZGlhIAk6CTEJOgkyOTY2CitNYW5vdWJhIAk6CTEJOgkwCitN6WRlbmluZSAJOgkxCToJODU4OAorTW9uYXN0aXIgCToJMQk6CTEwMTkKK05hYmV1bCAJOgkxCToJMjc4OAorU2ZheCAJOgkxCToJNzU0NQorU2lkaSBCb3V6aWQgCToJMQk6CTY5OTQKK1NpbGlhbmEgCToJMQk6CTQ2MzEKK1NvdXNzZSAJOgkxCToJMjYyMQorVGF0YW91aW5lIAk6CTEJOgkzODg4OQorVG96ZXVyIAk6CTEJOgk0NzE5CitUdW5pcyAJOgkxCToJMzQ2CitaYWdob3VhbiAJOgkxCToJMjc2OAorCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9UVU5JU0lBX1BPUFVMQVRJT04udHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvVFVOSVNJQV9QT1BVTEFUSU9OLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NTE3Yzk2Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvVFVOSVNJQV9QT1BVTEFUSU9OLnR4dApAQCAtMCwwICsxLDMyIEBACitUdW5pc2lhCToJMAk6CTEwMTc1MDE0CitSZWdpb24gMSA6IDEgOiAxOTQzNjAwCitSZWdpb24gMiA6IDEgOiAxMzk3ODAwCitSZWdpb24gMyA6IDEgOiA3OTU2MDAKK1JlZ2lvbiA0IDogMSA6IDEzNjEyMDAKK1JlZ2lvbiA1IDogMSA6IDIyNzYzMDAKK1JlZ2lvbiA2IDogMSA6IDU2ODgwMAorUmVnaW9uIDcgOiAxIDogOTI2OTAwCitBcmlhbmEgIAk6CTEJOgk0MzY2MDAKK0LpamEgCToJMQk6CTMwMzcwMAorQmVuIEFyb3VzIAk6CTEJOgk1MjEwMDAKK0JpemVydGUgCToJMQk6CTUyOTMwMAorR2Fi6HMgCToJMQk6CTM0NTkwMAorR2Fmc2EgCToJMQk6CTMyNTkwMAorSmVuZG91YmEgCToJMQk6CTQxODAwMAorS2Fpcm91YW4gCToJMQk6CTU0NzcwMAorS2Fzc2VyaW5lIAk6CTEJOgk0MTU0MDAKK0vpYmlsaSAJOgkxCToJMTQ0NDAwCitMZSBLZWYgCToJMQk6CTI1ODIwMAorTWFoZGlhIAk6CTEJOgkzODIzMDAKK01hbm91YmEgCToJMQk6CTM0MjAwMAorTelkZW5pbmUgCToJMQk6CTQzNzAwMAorTW9uYXN0aXIgCToJMQk6CTQ2NjcwMAorTmFiZXVsIAk6CTEJOgk3MDUyMDAKK1NmYXggCToJMQk6CTg2OTYwMAorU2lkaSBCb3V6aWQgCToJMQk6CTM5ODEwMAorU2lsaWFuYSAJOgkxCToJMjMzNzAwCitTb3Vzc2UgCToJMQk6CTU1NzcwMAorVGF0YW91aW5lIAk6CTEJOgkxNDQwMDAKK1RvemV1ciAJOgkxCToJOTg1MDAKK1R1bmlzIAk6CTEJOgk5ODYwMDAKK1phZ2hvdWFuIAk6CTEJOgkxNjMzMDAKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL1RVUktFWV9BUkVBLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL1RVUktFWV9BUkVBLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZjUxZDhiCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvVFVSS0VZX0FSRUEudHh0CkBAIC0wLDAgKzEsOTAgQEAKK1R1cmtleQk6CTAJOgk3ODA1ODAKK01hcm1hcmEgQvZsZ2VzaSAgCToJMQk6CTczMDI3LjU3CitCYWxpa2VzaXIgCToJMQk6CTE0NDcyLjczCitCaWxlY2lrIAk6CTEJOgk0MzA2Ljc3CitCdXJzYSAJOgkxCToJMTA4ODYuMzgKK0NhbmFra2FsZSAJOgkxCToJOTk1MC40MworRWRpcm5lIAk6CTEJOgk2MDk3LjkxCitJc3RhbmJ1bCAJOgkxCToJNTMxNS4zMworS2lya2xhcmVsaSAJOgkxCToJNjI5OS43OAorSXptaXQgW0tvY2FlbGldCToJMQk6CTM2MjUuMjkKK1Nha2FyeWEgCToJMQk6CTQ4ODAuMTkKK1Rla2lyZGFnCToJMQk6CTYzNDIuMzAKK1lhbG92YSAJOgkxCToJODUwLjQ2CitFZ2UgQvZsZ2VzaSAJOgkxCToJODk5OTcuMjMKK0FmeW9uIAk6CTEJOgkxNDcxOC42MworQXlkaW4gCToJMQk6CTc5MDQuNDMKK0Rlbml6bGkgCToJMQk6CTExODA0LjE5CitJem1pciAJOgkxCToJMTIwMTUuNjEKK0t1dGFoeWEgCToJMQk6CTEyMDEzLjU3CitNYW5pc2EgCToJMQk6CTEzMjI4LjUwCitNdWdsYSAJOgkxCToJMTI5NDkuMjEKK1VzYWsgCToJMQk6CTUzNjMuMDkKK0FrZGVuaXogQvZsZ2VzaSAJOgkxCToJODk4MzguNDkKK0FkYW5hIAk6CTEJOgkxNDA0NS41NgorQW50YWx5YSAJOgkxCToJMjA3OTAuNTYKK0J1cmR1ciAJOgkxCToJNzEzNC45NQorQW50YWt5YSAoQW50aW9jaGlhKSAJOgkxCToJNTgzMS4zNgorTWVyc2luIFtJY2VsXQk6CTEJOgkxNTUxMi4yNQorSXNwYXJ0YSAJOgkxCToJODg3MS4wOAorSy4gTWFyYXMgCToJMQk6CTE0NDU2Ljc0CitPc21hbml5ZSAJOgkxCToJMzE5NS45OQorSS7nIEFuYWRvbHUgQvZsZ2VzaSAJOgkxCToJMTg4MDUxLjU2CitBa3NhcmF5IAk6CTEJOgk3OTY1LjUxCitBbmthcmEgCToJMQk6CTI1NDAxLjk0CitDYW5raXJpIAk6CTEJOgk3NDkxLjg5CitFc2tpc2VoaXIgCToJMQk6CTEzOTAyLjAzCitLYXJhbWFuIAk6CTEJOgk4ODY4LjkwCitLYXlzZXJpIAk6CTEJOgkxNzEwOS4zMworS2lua2thbGUgCToJMQk6CTQ1NjkuNzYKK0tpcnNlaGlyIAk6CTEJOgk2NTMwLjMyCitLb255YSAJOgkxCToJNDA4MTMuNTIKK05ldnNlaGlyIAk6CTEJOgk1MzkxLjY0CitOaWdkZSAJOgkxCToJNzM2NS4yOQorU2l2YXMgCToJMQk6CTI4NTY3LjM0CitZb3pnYXQgCToJMQk6CTE0MDc0LjA5CitLYXJhZGVuaXogQvZsZ2VzaSAJOgkxCToJMTE2MjM5Ljg4CitBbWFzeWEgCToJMQk6CTU3MDMuNzgKK0FydHZpbiAJOgkxCToJNzM2Ny4xMAorQmFydD9uIAk6CTEJOgkyMDgwLjM2CitCYXlidXJ0IAk6CTEJOgkzNzM5LjA4CitCb2x1IAk6CTEJOgk4MzIzLjM5CitDb3J1bSAJOgkxCToJMTI3OTYuMjEKK0T8emNlIAk6CTEJOgkyNTkyLjk1CitHaXJlc3VuIAk6CTEJOgk2ODMxLjU4CitHdW11c2hhbmUgCToJMQk6CTY0MzcuMDEKK0thcmFi/GsgCToJMQk6CTQxMDguODAKK0thc3RhbW9udSAJOgkxCToJMTMxNTcuOTgKK09yZHUgCToJMQk6CTU5NTIuNDkKK1JpemUgCToJMQk6CTM5MjEuOTgKK1NhbXN1biAJOgkxCToJOTM2NC4xMAorU2lub3AgCToJMQk6CTU4MTYuNTUKK1Rva2F0IAk6CTEJOgkxMDA3Mi42MgorVHJhYnpvbiAJOgkxCToJNDY2NC4wNAorWmluZ3VsZGFrIAk6CTEJOgkzMzA5Ljg2CitEb2codSBBbmFkb2x1IEL2bGdlc2kgCToJMQk6CTE0OTg5OC41NworQWdyaQk6CTEJOgkxMTQ5OC42NworQXJkYWhhbiAJOgkxCToJNDk2Ny42MworQmluZ29sIAk6CTEJOgk4MjUzLjUxCitCaXRsaXMgCToJMQk6CTcwOTQuNTAKK0VsYXppZwk6CTEJOgk5MjgxLjQ1CitFcnppbmNhbiAJOgkxCToJMTE3MjcuNTUKK0VyenVydW0gCToJMQk6CTI1MzMwLjkwCitIYWtrYXJpIAk6CTEJOgk3MTc4Ljg4CitJZyhkP3IgCToJMQk6CTM1ODcuODEKK0thcnMgCToJMQk6CTEwMTM5LjA5CitNYWxhdHlhIAk6CTEJOgkxMjEwMi43MAorTXVzIAk6CTEJOgk4MDY3LjE2CitUdW5jZWxpIAk6CTEJOgk3Njg1LjY2CitWYW4gCToJMQk6CTIyOTgzLjA2CitH/G5leWRvZyh1IEFuYWRvbHUgQvZsZ2VzaSAJOgkxCToJNzY1MDkuMDgKK0FkaXlhbWFuIAk6CTEJOgk3NjA2LjE2CitCYXRtYW4gCToJMQk6CTQ2NTkuMjEKK0RpeWFyYmFraXIgCToJMQk6CTE1MjA0LjAwCitHYXppYW50ZXAgCToJMQk6CTY4NDQuODQKK0tpbGlzIAk6CTEJOgkxNDI3Ljc2CitNYXJkaW4gCToJMQk6CTg4MDYuMDQKK1NhbmxpdXJmYSAJOgkxCToJMTkzMzYuMjEKK1NpaXJ0IAk6CTEJOgk1NDczLjI5CitTaXJuYWsgCToJMQk6CTcxNTEuNTcKK0hhdGF5ICA6IDEgOiA1NTQ1CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9UVVJLRVlfUE9QVUxBVElPTi50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9UVVJLRVlfUE9QVUxBVElPTi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2EzYjg1ZgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL1RVUktFWV9QT1BVTEFUSU9OLnR4dApAQCAtMCwwICsxLDkwIEBACitUdXJrZXkJOgkwCToJNzA0MTM5NTgKK01hcm1hcmEgQvZsZ2VzaSAgCToJMQk6CTE5MTQ3MDAwCitCYWxpa2VzaXIgCToJMQk6CTEwOTcwMDAKK0JpbGVjaWsgCToJMQk6CTE5ODAwMAorQnVyc2EgCToJMQk6CTIzNjIwMDAKK0NhbmFra2FsZSAJOgkxCToJNDY3MDAwCitFZGlybmUgCToJMQk6CTM4NjAwMAorSXN0YW5idWwgCToJMQk6CTExMzMyMDAwCitLaXJrbGFyZWxpIAk6CTEJOgkzMjcwMDAKK0l6bWl0IFtLb2NhZWxpXQk6CTEJOgkxMzMyMDAwCitTYWthcnlhIAk6CTEJOgk3NzEwMDAKK1Rla2lyZGFnCToJMQk6CTY5MzAwMAorWWFsb3ZhIAk6CTEJOgkxODIwMDAKK0VnZSBC9mxnZXNpIAk6CTEJOgk5NDA3MDAwCitBZnlvbiAJOgkxCToJODI2MDAwCitBeWRpbiAJOgkxCToJOTkwMDAwCitEZW5pemxpIAk6CTEJOgk4NzcwMDAKK0l6bWlyIAk6CTEJOgkzNjQ5MDAwCitLdXRhaHlhIAk6CTEJOgk2ODAwMDAKK01hbmlzYSAJOgkxCToJMTI3NjAwMAorTXVnbGEgCToJMQk6CTc4MDAwMAorVXNhayAJOgkxCToJMzI5MDAwCitBa2Rlbml6IEL2bGdlc2kgCToJMQk6CTkzODQwMDAKK0FkYW5hIAk6CTEJOgkxOTYwMDAwCitBbnRhbHlhIAk6CTEJOgkyMDA3MDAwCitCdXJkdXIgCToJMQk6CTI0ODAwMAorQW50YWt5YSAoQW50aW9jaGlhKSAJOgkxCToJMTI5MzAwMAorTWVyc2luIFtJY2VsXSAJOgkxCToJMTgxOTAwMAorSXNwYXJ0YSAJOgkxCToJNTQyMDAwCitLLiBNYXJhcyAJOgkxCToJMTAyOTAwMAorT3NtYW5peWUgCToJMQk6CTQ4NjAwMAorSS7nIEFuYWRvbHUgQvZsZ2VzaSAJOgkxCToJMTIxODkwMDAKK0Frc2FyYXkgCToJMQk6CTQyMDAwMAorQW5rYXJhIAk6CTEJOgk0MzE5MDAwCitDYW5raXJpIAk6CTEJOgkyNzMwMDAKK0Vza2lzZWhpciAJOgkxCToJNzE4MDAwCitLYXJhbWFuIAk6CTEJOgkyNTEwMDAKK0theXNlcmkgCToJMQk6CTEwOTAwMDAKK0tpbmtrYWxlIAk6CTEJOgkzODkwMDAKK0tpcnNlaGlyIAk6CTEJOgkyNDIwMDAKK0tvbnlhIAk6CTEJOgkyMzczMDAwCitOZXZzZWhpciAJOgkxCToJMzExMDAwCitOaWdkZSAJOgkxCToJMzYzMDAwCitTaXZhcyAJOgkxCToJNzIwMDAwCitZb3pnYXQgCToJMQk6CTcyMDAwMAorS2FyYWRlbml6IEL2bGdlc2kgCToJMQk6CTgzMDQwMDAKK0FtYXN5YSAJOgkxCToJMzU1MDAwCitBcnR2aW4gCToJMQk6CTE3MjAwMAorQmFydD9uIAk6CTEJOgkxNjQwMDAKK0JheWJ1cnQgCToJMQk6CTg4MDAwCitCb2x1IAk6CTEJOgkyNjUwMDAKK0NvcnVtIAk6CTEJOgk1NjgwMDAKK0T8emNlIAk6CTEJOgkzMjcwMDAKK0dpcmVzdW4gCToJMQk6CTUxOTAwMAorR3VtdXNoYW5lIAk6CTEJOgkxOTEwMDAKK0thcmFi/GsgCToJMQk6CTIwNTAwMAorS2FzdGFtb251IAk6CTEJOgkzMzMwMDAKK09yZHUgCToJMQk6CTg5MTAwMAorUml6ZSAJOgkxCToJMzYyMDAwCitTYW1zdW4gCToJMQk6CTExOTMwMDAKK1Npbm9wIAk6CTEJOgkxOTMwMDAKK1Rva2F0IAk6CTEJOgk4NjIwMDAKK1RyYWJ6b24gCToJMQk6CTEwNDYwMDAKK1ppbmd1bGRhayAJOgkxCToJNTcwMDAwCitEb2codSBBbmFkb2x1IEL2bGdlc2kgCToJMQk6CTY0MDMwMDAKK0FncmkJOgkxCToJNTY0MDAwCitBcmRhaGFuIAk6CTEJOgkxMjIwMDAKK0JpbmdvbCAJOgkxCToJMjQ3MDAwCitCaXRsaXMgCToJMQk6CTQwOTAwMAorRWxhemlnCToJMQk6CTU5MTAwMAorRXJ6aW5jYW4gCToJMQk6CTMxNTAwMAorRXJ6dXJ1bSAJOgkxCToJOTU2MDAwCitIYWtrYXJpIAk6CTEJOgkyNjYwMDAKK0lnKGQ/ciAJOgkxCToJMTc4MDAwCitLYXJzIAk6CTEJOgkyOTQwMDAKK01hbGF0eWEgCToJMQk6CTkxMTAwMAorTXVzIAk6CTEJOgk0ODMwMDAKK1R1bmNlbGkgCToJMQk6CTc5MDAwCitWYW4gCToJMQk6CTk4ODAwMAorR/xuZXlkb2codSBBbmFkb2x1IEL2bGdlc2kgCToJMQk6CTcyMzEwMDAKK0FkaXlhbWFuIAk6CTEJOgk2NjgwMDAKK0JhdG1hbiAJOgkxCToJNTA3MDAwCitEaXlhcmJha2lyIAk6CTEJOgkxNDcxMDAwCitHYXppYW50ZXAgCToJMQk6CTE0MDIwMDAKK0tpbGlzIAk6CTEJOgkxMDEwMDAKK01hcmRpbiAJOgkxCToJNzY3MDAwCitTYW5saXVyZmEgCToJMQk6CTE2NTQwMDAKK1NpaXJ0IAk6CTEJOgkyNjYwMDAKK1Npcm5hayAJOgkxCToJMzk1MDAwCitIYXRheSAgOiAxIDogMTI1MzcyNgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvVFVSS01FTklTVEFOX0FSRUEudHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvVFVSS01FTklTVEFOX0FSRUEudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZhNTBmOWMKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9UVVJLTUVOSVNUQU5fQVJFQS50eHQKQEAgLTAsMCArMSwxMCBAQAorVHVya21lbmlzdGFuCToJMAk6CTQ4ODEwMAorQW5uYXUgIAk6CTEJOgk5NzQyOAorQXNoZ2FiYXQgCToJMQk6CTAKK0JhbGthbmFiYXQgCToJMQk6CTEzODUwMAorRGFzaGhvd3V6IAk6CTEJOgk3MzYwMAorVHVya21lbmFiYXQgCToJMQk6CTkzODAwCitNYXJ5IAk6CTEJOgk4NjgwMAorQ2hhcmR6aG91IDogMSA6IDkzMjAwCitUYXNoYXV6IDogMSA6IDcyODAwMCAKK1R1cmttZW5pc3RhbiBUZXJyaXRvcmllcyA6IDEgOiAgMTM4MDAwCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9UVVJLTUVOSVNUQU5fUE9QVUxBVElPTi50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9UVVJLTUVOSVNUQU5fUE9QVUxBVElPTi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTg0ZDEzZQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL1RVUktNRU5JU1RBTl9QT1BVTEFUSU9OLnR4dApAQCAtMCwwICsxLDEwIEBACitUdXJrbWVuaXN0YW4JOgkwCToJNTA0MjkyMAorQW5uYXUgIAk6CTEJOgk3Nzk0MDAKK0FzaGdhYmF0IAk6CTEJOgk3MTIwMDAKK0JhbGthbmFiYXQgCToJMQk6CTQ3NzYwMAorRGFzaGhvd3V6IAk6CTEJOgkxMTgzMTAwCitUdXJrbWVuYWJhdCAJOgkxCToJMTE0NzAwMAorTWFyeSAJOgkxCToJMTI3MTIwMAorQ2hhcmR6aG91IDogMSA6IDIwMzAwMAorVGFzaGF1eiA6IDEgOiAxNjU0MDAgCitUdXJrbWVuaXN0YW4gVGVycml0b3JpZXMgOiAxIDogIDUzMjgwCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9VR0FOREFfQVJFQS50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9VR0FOREFfQVJFQS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDFhNDM5MAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL1VHQU5EQV9BUkVBLnR4dApAQCAtMCwwICsxLDYyIEBACitVZ2FuZGEJOgkwCToJMjM2MDQwCitMYWtlIFZpY3RvcmlhIDogMSA6IDY4ODAwCitDZW50cmFsICAJOgkxCToJNjE0MDMuMjAKK0thbGFuZ2FsYSAJOgkxCToJOTA2OC4zMAorS2FtcGFsYSAJOgkxCToJMTk3CitLYXl1bmdhIAk6CTEJOgkxNzAyLjQwCitLaWJvZ2EgCToJMQk6CTQwNDUuNTAKK0x1d2VybyAJOgkxCToJNTY5My45MAorTWFzYWthIAk6CTEJOgk0NjkxLjcwCitNcGlnaSAJOgkxCToJMzYwNS42MAorTXViZW5kZSAJOgkxCToJNjE5Ny43MAorTXVrb25vIAk6CTEJOgkxMjY1NS43MAorTmFrYXNvbmdvbGEgCToJMQk6CTM1MDkuOTAKK1Jha2FpIAk6CTEJOgk0OTA4LjcwCitTZW1iYWJ1bGUgCToJMQk6CTIzMTkuMjAKK1dha2lzbyAJOgkxCToJMjgwNy43MAorRWFzdGVybiAJOgkxCToJMzk0NzguODAKK0J1Z2lyaSAJOgkxCToJNTY3MC45MAorQnVzaWEgCToJMQk6CTc1OS40CitJZ2FuZ2EgCToJMQk6CTI0ODIuMzAKK0ppbmphIAk6CTEJOgk3MjIuNworS2FiZXJhbWFpZG8gCToJMQk6CTE2MjMuOTAKK0thbXVsaSAJOgkxCToJNDMwMS41MAorS2FwY2hvcndhIAk6CTEJOgkxNzMxLjcwCitLYXRha3dpIAk6CTEJOgk1MDE0LjQwCitLdW1pIAk6CTEJOgkyODQ4LjEwCitNYXl1Z2UgCToJMQk6CTQ2MzguNTAKK01iYWxlIAk6CTEJOgkxMzcyLjgwCitQYWxsaXNhIAk6CTEJOgkxOTkxLjcwCitTaXJvbmtvIAk6CTEJOgkxMDkzLjkwCitTb3JvdGkgCToJMQk6CTMzNzcuNzAKK1Rvcm9ybyAJOgkxCToJMTg0OS4zMAorTm9ydGhlcm4gCToJMQk6CTg1MzkxLjcwCitBZGp1bWFuaSAJOgkxCToJMzA4Ny4wMAorQXBhYyAJOgkxCToJNjU0MS4yMAorQXJ1YSAJOgkxCToJNTQ3Ni4yMAorR3VsdSAJOgkxCToJMTE3MTUuNTAKK0tpdGd1bSAJOgkxCToJOTYzNC41MAorS290aWRvIAk6CTEJOgkxMzI0NS4xMAorTGlyYSAJOgkxCToJNzIwMC43MAorTW9yb3RvIAk6CTEJOgk4NTE3LjYwCitNb3lvIAk6CTEJOgkxODkwLjcwCitOYWthcGlyaXBpcml0IAk6CTEJOgk1ODMzLjgwCitOZWJiaSAJOgkxCToJMjkxNy4yMAorUGFkZXIgCToJMQk6CTY5MjkuMjAKK1l1bWJlIAk6CTEJOgkyNDAzLjAwCitXZXN0ZXJuIAk6CTEJOgk1NTI3Ni42MAorQnVuZGlidWd5byAJOgkxCToJMjI2MS43MAorQnVzaGVueWkgCToJMQk6CTQyOTIuNTAKK0hvaW1hIAk6CTEJOgk1OTMyLjgwCitLYWJhbGUgCToJMQk6CTE3MjkuNjAKK0thYmFyb2xlIAk6CTEJOgkxODI0LjQwCitLYW13ZW5nZSAJOgkxCToJMjQzOS40MAorS2FudW5ndSAJOgkxCToJMTI5Mi4xMAorS2FzZXNlIAk6CTEJOgkzMzg5LjYwCitLaWJhYWxlIAk6CTEJOgk0MjQ2LjAwCitLaXNvcm8gCToJMQk6CTcyOS42CitLeWVuam9qbyAJOgkxCToJNDA1NC40MAorTWFzaW5kaSAJOgkxCToJOTQ0My4wMAorTWJhcmFyYSAJOgkxCToJMTAwMTkuMTAKK050dW5nYW1vIAk6CTEJOgkyMDU1LjUwCitSdWt1bmdpcmkgCToJMQk6CTE1NjYuODAKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL1VHQU5EQV9QT1BVTEFUSU9OLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL1VHQU5EQV9QT1BVTEFUSU9OLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMWUwM2NjCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvVUdBTkRBX1BPUFVMQVRJT04udHh0CkBAIC0wLDAgKzEsNjIgQEAKK1VnYW5kYQk6CTAJOgkyODE5NTc1NAorTGFrZSBWaWN0b3JpYSA6IDEgOiAwCitDZW50cmFsICAJOgkxCToJNzIwNTUwMAorS2FsYW5nYWxhIAk6CTEJOgk0NDMwMAorS2FtcGFsYSAJOgkxCToJMTMzNzkwMAorS2F5dW5nYSAJOgkxCToJMzEyMzAwCitLaWJvZ2EgCToJMQk6CTI1OTQwMAorTHV3ZXJvIAk6CTEJOgk1MDgzMDAKK01hc2FrYSAJOgkxCToJNzgyNDAwCitNcGlnaSAJOgkxCToJNDI5NTAwCitNdWJlbmRlIAk6CTEJOgk3NjMwMDAKK011a29ubyAJOgkxCToJODY3MzAwCitOYWthc29uZ29sYSAJOgkxCToJMTMxNDAwCitSYWthaSAJOgkxCToJNDkzMzAwCitTZW1iYWJ1bGUgCToJMQk6CTE5NDQwMAorV2FraXNvIAk6CTEJOgkxMDgxODAwCitFYXN0ZXJuIAk6CTEJOgk2OTUwNjAwCitCdWdpcmkgCToJMQk6CTQ4NzQwMAorQnVzaWEgCToJMQk6CTI0NTkwMAorSWdhbmdhIAk6CTEJOgk3ODA4MDAKK0ppbmphIAk6CTEJOgk0NDg3MDAKK0thYmVyYW1haWRvIAk6CTEJOgkxMzUwMDAKK0thbXVsaSAJOgkxCToJNzc2ODAwCitLYXBjaG9yd2EgCToJMQk6CTIxNzQwMAorS2F0YWt3aSAJOgkxCToJMzY1OTAwCitLdW1pIAk6CTEJOgk0MzQ2MDAKK01heXVnZSAJOgkxCToJMzU4NDAwCitNYmFsZSAJOgkxCToJNzgzNjAwCitQYWxsaXNhIAk6CTEJOgk1NjkwMDAKK1Npcm9ua28gCToJMQk6CTMxMzUwMAorU29yb3RpIAk6CTEJOgk0MjczMDAKK1Rvcm9ybyAJOgkxCToJNjA2MzAwCitOb3J0aGVybiAJOgkxCToJNjA5MTgwMAorQWRqdW1hbmkgCToJMQk6CTIzOTMwMAorQXBhYyAJOgkxCToJNzQwMTAwCitBcnVhIAk6CTEJOgk5NTA2MDAKK0d1bHUgCToJMQk6CTUwMzgwMAorS2l0Z3VtIAk6CTEJOgkzMjAwMDAKK0tvdGlkbyAJOgkxCToJNzc0NDAwCitMaXJhIAk6CTEJOgk4MzI2MDAKK01vcm90byAJOgkxCToJMTk0MzAwCitNb3lvIAk6CTEJOgkyNDgyMDAKK05ha2FwaXJpcGlyaXQgCToJMQk6CTE4MDQwMAorTmViYmkgCToJMQk6CTQ2NDkwMAorUGFkZXIgCToJMQk6CTMyNzkwMAorWXVtYmUgCToJMQk6CTMxNTEwMAorV2VzdGVybiAJOgkxCToJNjk2MDAwMAorQnVuZGlidWd5byAJOgkxCToJMjQ0NzAwCitCdXNoZW55aSAJOgkxCToJNzU5MjAwCitIb2ltYSAJOgkxCToJMzk4MjAwCitLYWJhbGUgCToJMQk6CTQ4MzQwMAorS2FiYXJvbGUgCToJMQk6CTM3MzMwMAorS2Ftd2VuZ2UgCToJMQk6CTMyMjAwMAorS2FudW5ndSAJOgkxCToJMjE2NDAwCitLYXNlc2UgCToJMQk6CTU4OTIwMAorS2liYWFsZSAJOgkxCToJNDc4MzAwCitLaXNvcm8gCToJMQk6CTIyNjkwMAorS3llbmpvam8gCToJMQk6CTQyMDMwMAorTWFzaW5kaSAJOgkxCToJNTM4NDAwCitNYmFyYXJhIAk6CTEJOgkxMTcyODAwCitOdHVuZ2FtbyAJOgkxCToJNDA3NDAwCitSdWt1bmdpcmkgCToJMQk6CTMyOTYwMApkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvVUtSQUlORV9QT1BVTEFUSU9OLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL1VLUkFJTkVfUE9QVUxBVElPTi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjI4MmFhZgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL1VLUkFJTkVfUE9QVUxBVElPTi50eHQKQEAgLTAsMCArMSwyMyBAQAorOjE6MTU3MTE4NTo3NAorOjE6MTQ0OTE0MTo0NgorOjE6OTYzMDE3OjExOQorOjE6Mzk5ODcyNzoxMjYKKzoxOjU0NzU1NTk6MjA2Cis6MToxNDY3NjAyOjEwNgorOjE6MzI3ODc3MjoxMDQKKzoxOjE1NjE5NTU6NzcKKzoxOjEyNzE3MTY6NTIKKzoxOjI1NjQ5NzA6MTAwCis6MTo0Njg4OTQxOjE2NAorOjE6MDowCis6MToyODI0NDQxOjEzMAorOjE6MjcwNTQ3NDo4MworOjE6MTgwMTk0MDo2NAorOjE6MTIwMzAwMzo1OQorOjE6MTQ2NzYwMjo2MgorOjE6MTIwMTk3Nzo4NgorOjE6MTk3NTI2Mjo3NAorOjE6MTA5MDE4OTo1NQorOjE6MDowCis6MToyMTQ1NTA4Ojc5Cis6MToxNTc2MzEzOjUzCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9VTklURUQgS0lOR0RPTV9BUkVBLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL1VOSVRFRCBLSU5HRE9NX0FSRUEudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZlYjUwZGQKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9VTklURUQgS0lOR0RPTV9BUkVBLnR4dApAQCAtMCwwICsxLDM2IEBACisgSElHSExBTkRTIDogMSA6IDMxNzAzLjAKKyBHUkFNUElBTiA6IDEgOiA4NzUyLjAKKyBCT1JELUNFTlRSLUZJRkUtTE9USElBTi1UQVkgOiAxIDogMTgxMjQuMAorIERVTUZSSUVTLUdBTExPIDogMSA6IDIwMjA0LjAKKyBOT1JUSFVNQkVSTEFORCA6IDEgOiA1NTcyLjAKKyBOT1JUSEVSTiBJUkVMQU5EIDogMSA6IDE0MTIwLjAKKyBDVU1CUklBIDogMSA6IDY4MTAuMAorIENMRVZFTEFORCA6IDEgOiAzMDE5LjAKKyBOT1JUSCBZT1JLU0hJUkUgOiAxIDogODMwOS4wCisgVU5JVEVEIEtJTkdET00gOiAxIDogMjQ0MTExLjAKKyBMQU5DQVNISVJFIDogMSA6IDMwNjMuMAorIEhVTUJFUlNJREUgOiAxIDogMzUxMi4wCisgV0VTVCBZT1JLU0hJUkUgOiAxIDogMjAzOS4wCisgTUVSU0VZU0lERSA6IDEgOiA2NTIuMAorIEdSRUFURVIgTUFOQ0hFU1RFUiA6IDEgOiAxMjg3LjAKKyBTT1VUSCBZT1JLU0hJUkUgOiAxIDogMTU2MC4wCisgTElOQ09MTlNISVJFIDogMSA6IDU5MTUuMAorIERFUkJZU0hJUkUgOiAxIDogNDc5NS4wCisgQ0hFU0hJUkUgOiAxIDogMjMyOC4wCisgQ0xXWUQgOiAxIDogMTcxNDEuMAorIFNIUk9QU0hJUkUgOiAxIDogNjIwNi4wCisgRUFTVCBBTkdMSUEgOiAxIDogMTI1NzMuMAorIExFSUNFU1RFUlNISVJFIDogMSA6IDQ5MjAuMAorIEhFUkVGT1JEIDogMSA6IDU5MDcuMAorIFdFU1QgTUlETEFORFMgKENPVU5UWSkgOiAxIDogODk5LjAKKyBCRURGT1JEU0hJUkUgOiAxIDogMjg2OS4wCisgQkVSS1MgOiAxIDogNTc1MC4wCisgQVZPTiA6IDEgOiA3NDcwLjAKKyBFU1NFWCA6IDEgOiAzNjcyLjAKKyBHV0VOVCA6IDEgOiAzNjI3LjAKKyBHUkVBVEVSIExPTkRPTiA6IDEgOiAxNTc5LjAKKyBLRU5UIDogMSA6IDM3MzEuMAorIFNVUlJFWSA6IDEgOiA1NDYzLjAKKyBIQU1QU0hJUkUgOiAxIDogNDE1OC4wCisgRE9SU0VUIDogMSA6IDYxMDUuMAorIENPUk5XQUxMIDogMSA6IDEwMjc1LjAKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL1VOSVRFRCBLSU5HRE9NX1BPUFVMQVRJT04udHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvVU5JVEVEIEtJTkdET01fUE9QVUxBVElPTi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmY3YjE0ZAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL1VOSVRFRCBLSU5HRE9NX1BPUFVMQVRJT04udHh0CkBAIC0wLDAgKzEsMzYgQEAKKyBISUdITEFORFMgOiAxIDogMjc1NDAwCisgR1JBTVBJQU4gOiAxIDogNTA0ODAwCisgQk9SRC1DRU5UUi1GSUZFLUxPVEhJQU4tVEFZIDogMSA6IDE4NTk3MDAKKyBEVU1GUklFUy1HQUxMTyA6IDEgOiAyNDU2NjAwCisgTk9SVEhVTUJFUkxBTkQgOiAxIDogMTQzMTcwMAorIE5PUlRIRVJOIElSRUxBTkQgOiAxIDogMTU4NjMwMAorIENVTUJSSUEgOiAxIDogNDkxOTAwCisgQ0xFVkVMQU5EIDogMSA6IDExNTA2MDAKKyBOT1JUSCBZT1JLU0hJUkUgOiAxIDogNzI0NDAwCisgVU5JVEVEIEtJTkdET00gOiAxIDogNTczMjM1MDAKKyBMQU5DQVNISVJFIDogMSA6IDEzOTMwMDAKKyBIVU1CRVJTSURFIDogMSA6IDg1NzcwMAorIFdFU1QgWU9SS1NISVJFIDogMSA6IDIwNjg0MDAKKyBNRVJTRVlTSURFIDogMSA6IDE0NDU4MDAKKyBHUkVBVEVSIE1BTkNIRVNURVIgOiAxIDogMjU4NjUwMAorIFNPVVRIIFlPUktTSElSRSA6IDEgOiAxMjk1NzAwCisgTElOQ09MTlNISVJFIDogMSA6IDU4OTAwMAorIERFUkJZU0hJUkUgOiAxIDogMTk0NzAwMAorIENIRVNISVJFIDogMSA6IDk1ODgwMAorIENMV1lEIDogMSA6IDQwMjkyNworIFNIUk9QU0hJUkUgOiAxIDogMTQ0NDEwMAorIEVBU1QgQU5HTElBIDogMSA6IDIwNTE4MDAKKyBMRUlDRVNURVJTSElSRSA6IDEgOiAxNDcyOTAwCisgSEVSRUZPUkQgOiAxIDogMTE1ODYwMAorIFdFU1QgTUlETEFORFMgKENPVU5UWSkgOiAxIDogMjYxNTAwMAorIEJFREZPUkRTSElSRSA6IDEgOiAzOTc3MDAKKyBCRVJLUyA6IDEgOiAxOTcxOTAwCisgQVZPTiA6IDEgOiAyMDQzMTAwCisgRVNTRVggOiAxIDogMTUzMjgwMAorIEdXRU5UIDogMSA6IDE3NTQ1MDAKKyBHUkVBVEVSIExPTkRPTiA6IDEgOiA2Nzc1NDAwCisgS0VOVCA6IDEgOiAxNTI0NjAwCisgU1VSUkVZIDogMSA6IDI0MTg0MDAKKyBIQU1QU0hJUkUgOiAxIDogMTY3NjYwMAorIERPUlNFVCA6IDEgOiAxMTIwNDAwCisgQ09STldBTEwgOiAxIDogMTQ5NTkwMApkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvVU5JVEVEQVJBQkVNSVJBVEVTX0FSRUEudHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvVU5JVEVEQVJBQkVNSVJBVEVTX0FSRUEudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIyZmM3YzEKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9VTklURURBUkFCRU1JUkFURVNfQVJFQS50eHQKQEAgLTAsMCArMSw5IEBACitVbml0ZWQgQXJhYiBFbWlyYXQJOgkwCToJODI4ODAKK0FqbWFuCToJMQk6CTI1OQorQWJ1IERoYWJpCToJMQk6CTY3MzQwCitBbCBGdWpheXJhaAk6CTEJOgkxMTY0CitTaGFyaXFhaAk6CTEJOgkyNTkwCitEdWJhaQk6CTEJOgkzODg1CitSQVMgQWwgS2hheW1haAk6CTEJOgkxNjg0CitVTU0gQWwgUWF5d2F5bgk6CTEJOgk3NzcKK05ldXRyYWwgWm9uZSA6IDEgOiAzMDAKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL1VOSVRFREFSQUJFTUlSQVRFU19QT1BVTEFUSU9OLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL1VOSVRFREFSQUJFTUlSQVRFU19QT1BVTEFUSU9OLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MjA4YTlmCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvVU5JVEVEQVJBQkVNSVJBVEVTX1BPUFVMQVRJT04udHh0CkBAIC0wLDAgKzEsOSBAQAorVW5pdGVkIEFyYWIgRW1pcmF0CToJMAk6CTI2MDI3MTMKK0FqbWFuCToJMQk6CTE4OTg0OQorQWJ1IERoYWJpCToJMQk6CTEyOTIxMTkKK0FsIEZ1amF5cmFoCToJMQk6CTExODYxNworU2hhcmlxYWgJOgkxCToJNzI0ODU5CitEdWJhaQk6CTEJOgkxMjAwMzA5CitSQVMgQWwgS2hheW1haAk6CTEJOgkxOTc1NzEKK1VNTSBBbCBRYXl3YXluCToJMQk6CTQ1NzU2CitOZXV0cmFsIFpvbmUgOiAxIDogMApkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvVVJVR1VBWV9BUkVBLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL1VSVUdVQVlfQVJFQS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjc5OWY5OQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL1VSVUdVQVlfQVJFQS50eHQKQEAgLTAsMCArMSwyMyBAQAorVXJ1Z3VheQk6CTAJOgkxNzYyMjAKK0FydGlnYXMgIAk6CTEJOgkxMTkyOAorQ2FuZWxvbmVzIAk6CTEJOgk0NTM2CitDZXJybyBMYXJnbyAJOgkxCToJMTM2NDgKK0NvbG9uaWEgCToJMQk6CTYxMDYKK0R1cmF6bm8gCToJMQk6CTExNjQzCitGbG9yZXMgCToJMQk6CTUxNDQKK0Zsb3JpZGEgCToJMQk6CTEwNDE3CitMYXZhbGxlamEgCToJMQk6CTEwMDE2CitNYWxkb25hZG8gCToJMQk6CTQ3OTMKK01vbnRldmlkZW8gCToJMQk6CTUzMAorUGF5c2FuZHUgCToJMQk6CTEzOTIyCitSaW8gTmVncm8gCToJMQk6CTkyODIKK1JpdmVyYSAJOgkxCToJOTM3MAorUm9jaGEgCToJMQk6CTEwNTUxCitTYWx0byAJOgkxCToJMTQxNjMKK1NhbiBKb3NlIAk6CTEJOgk0OTkyCitTb3JpYW5vIAk6CTEJOgk5MDA4CitUYWN1YXJlbWJvIAk6CTEJOgkxNTQzOAorVHJlaW50YSB5IFRyZXMgCToJMQk6CTk1MjkKKworCisKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL1VSVUdVQVlfUE9QVUxBVElPTi50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9VUlVHVUFZX1BPUFVMQVRJT04udHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFmNjJiODcKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9VUlVHVUFZX1BPUFVMQVRJT04udHh0CkBAIC0wLDAgKzEsMjAgQEAKK1VydWd1YXkJOgkwCToJMzQzMTkzMgorQXJ0aWdhcyAgCToJMQk6CTc5MzY3CitDYW5lbG9uZXMgCToJMQk6CTQ5ODM0NAorQ2Vycm8gTGFyZ28gCToJMQk6CTg4NDMyCitDb2xvbmlhIAk6CTEJOgkxMjA5NDgKK0R1cmF6bm8gCToJMQk6CTYwMTcyCitGbG9yZXMgCToJMQk6CTI1NTI4CitGbG9yaWRhIAk6CTEJOgk2OTQ3MgorTGF2YWxsZWphIAk6CTEJOgk2MTg1MgorTWFsZG9uYWRvIAk6CTEJOgkxNDQxMDcKK01vbnRldmlkZW8gCToJMQk6CTEzNDc4ODgKK1BheXNhbmR1IAk6CTEJOgkxMTUyMjIKK1JpbyBOZWdybyAJOgkxCToJNTUxMjQKK1JpdmVyYSAJOgkxCToJMTA3NTEzCitSb2NoYSAJOgkxCToJNzA4NjkKK1NhbHRvIAk6CTEJOgkxMjU2NjIKK1NhbiBKb3NlIAk6CTEJOgkxMDU2ODUKK1Nvcmlhbm8gCToJMQk6CTg2MjcxCitUYWN1YXJlbWJvIAk6CTEJOgk5MzI3NgorVHJlaW50YSB5IFRyZXMgCToJMQk6CTQ5OTkxCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9VU0FfMl9BUkVBLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL1VTQV8yX0FSRUEudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAzZDE1YWMKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9VU0FfMl9BUkVBLnR4dApAQCAtMCwwICsxLDMxNDEgQEAKK0F1dGF1Z2EgCToJMQk6CTE1NjUuNTI1NQorQmFsZHdpbiAJOgkxCToJNTI0OS43NDg3CitCYXJib3VyIAk6CTEJOgkyMzQyLjcwNjgKK0JpYmIgCToJMQk6CTE2MjEuNzU0NAorQmxvdW50IAk6CTEJOgkxNjg1LjA1NAorQnVsbG9jayAJOgkxCToJMTYyMS40OTU0CitCdXRsZXIgCToJMQk6CTIwMTQuODEyOAorQ2FsaG91biAJOgkxCToJMTU4NS45MDg4CitDaGFtYmVycyAJOgkxCToJMTU2Mi4wNTQ5CitDaGVyb2tlZSAJOgkxCToJMTU1My44NzA1CitDaGlsdG9uIAk6CTEJOgkxODE0Ljk2ODQKK0Nob2N0YXcgCToJMQk6CTIzODUuMDAxNQorQ2xhcmtlIAk6CTEJOgkzMjQ0LjAwMDkKK0NsYXkgCToJMQk6CTE1NjkuNTQKK0NsZWJ1cm5lIAk6CTEJOgkxNDUzLjA0MTgKK0NvZmZlZSAJOgkxCToJMTc2Mi40NDMyCitDb2xiZXJ0IAk6CTEJOgkxNjE1LjE0OTkKK0NvbmVjdWggCToJMQk6CTIyMDguMDAwOQorQ29vc2EgCToJMQk6CTE3MjUuODcyNAorQ292aW5ndG9uIAk6CTEJOgkyNzAzLjU5NzQKK0NyZW5zaGF3IAk6CTEJOgkxNTgyLjE3OTIKK0N1bGxtYW4gCToJMQk6CTE5NTQuOTgzOAorRGFsZSAJOgkxCToJMTQ1Ny4zMTUzCitEYWxsYXMgCToJMQk6CTI1NzIuODI4MworRGVLYWxiIAk6CTEJOgkyMDE2LjcwMzUKK0VsbW9yZSAJOgkxCToJMTcwMi4xNzM5CitFc2NhbWJpYSAJOgkxCToJMjQ2OC4xNDA1CitFdG93YWggCToJMQk6CTE0MjEuMjYyNQorRmF5ZXR0ZSAJOgkxCToJMTYyOS45OTA2CitGcmFua2xpbiAJOgkxCToJMTY3NC40NjA5CitHZW5ldmEgCToJMQk6CTE0OTkuMzUxCitHcmVlbmUgCToJMQk6CTE3MDkuMjE4NworSGFsZSAJOgkxCToJMTcwMC4yNTczCitIZW5yeSAJOgkxCToJMTQ3MS45NzQ3CitIb3VzdG9uIAk6CTEJOgkxNTA2LjQ3MzUKK0phY2tzb24gCToJMQk6CTI5MTguMzM0MworSmVmZmVyc29uIAk6CTEJOgkyOTEwLjY0MgorTGFtYXIgCToJMQk6CTE1NjguMTY3MworTGF1ZGVyZGFsZSAJOgkxCToJMTg2MS42NDAyCitMYXdyZW5jZSAJOgkxCToJMTg1OS44MDEzCitMZWUgCToJMQk6CTE1OTQuMjc0NQorTGltZXN0b25lIAk6CTEJOgkxNTcyLjMzNzIKK0xvd25kZXMgCToJMQk6CTE4NzcuODI3NworTWFjb24gCToJMQk6CTE1ODguMjkxNgorTWFkaXNvbiAJOgkxCToJMjEwNS4yODE1CitNYXJlbmdvIAk6CTEJOgkyNTQ1LjU4MTUKK01hcmlvbiAJOgkxCToJMTkyNS44NDYzCitNYXJzaGFsbCAJOgkxCToJMTYxMy45ODQ0CitNb2JpbGUgCToJMQk6CTQyNTguMDExOAorTW9ucm9lIAk6CTEJOgkyNjc5LjQzMjcKK01vbnRnb21lcnkgCToJMQk6CTIwNzEuMzc4NAorTW9yZ2FuIAk6CTEJOgkxNTUxLjU2NTQKK1BlcnJ5IAk6CTEJOgkxODc1LjM2NzIKK1BpY2tlbnMgCToJMQk6CTIzMDUuMjI5NQorUGlrZSAJOgkxCToJMTc0MC43MzkKK1JhbmRvbHBoIAk6CTEJOgkxNTEyLjg0NDkKK1J1c3NlbGwgCToJMQk6CTE2NzYuNzE0MgorU3QuIENsYWlyIAk6CTEJOgkxNjkyLjg0OTkKK1NoZWxieSAJOgkxCToJMjA5Ni42ODI3CitTdW10ZXIgCToJMQk6CTIzNjUuNDQ3CitUYWxsYWRlZ2EgCToJMQk6CTE5NjkuMDQ3NQorVGFsbGFwb29zYSAJOgkxCToJMTk4NC41MzU3CitUdXNjYWxvb3NhIAk6CTEJOgkzNDk5LjY4NTcKK1dhbGtlciAJOgkxCToJMjA4NS43MjcKK1dhc2hpbmd0b24gCToJMQk6CTI4MTkuMzE4NgorV2lsY294IAk6CTEJOgkyMzUwLjMyMTQKK1dpbnN0b24gCToJMQk6CTE2MzYuNTE3NAorQWxldXRpYW5zIEVhc3QgCToJMgk6CTM4ODgwLjA0NAorQWxldXRpYW5zIFdlc3QgCToJMgk6CTM2NTYxLjc2MDkKK0FuY2hvcmFnZSAJOgkyCToJNTA3OS4yMjMxCitCZXRoZWwgCToJMgk6CTExNzg2Ni45MTE0CitCcmlzdG9sIEJheSAJOgkyCToJMjI5OS4wOTEyCitEZW5hbGkgCToJMgk6CTMzMDg2LjAzMjcKK0RpbGxpbmdoYW0gCToJMgk6CTU0MjA0LjU4MTkKK0ZhaXJiYW5rcyBOb3J0aCBTdGFyIAk6CTIJOgkxOTI4MC4wMTE4CitIYWluZXMgCToJMgk6CTcwNTkuODczOAorSnVuZWF1IAk6CTIJOgk4NDMwLjQ3NTkKK0tlbmFpIFBlbmluc3VsYSAJOgkyCToJNjQxMTQuNDE0CitLZXRjaGlrYW4gR2F0ZXdheSAJOgkyCToJNDU0Mi44MDgyCitLb2RpYWsgSXNsYW5kIAk6CTIJOgkzMTE0MS4zMDUzCitMYWtlIGFuZCBQZW5pbnN1bGEgCToJMgk6CTgwMDQ5LjAyNjQKK01hdGFudXNrYS1TdXNpdG5hIAk6CTIJOgk2NTQyMi44NTYxCitOb21lIAk6CTIJOgk3MzI1My44MjQ3CitOb3J0aCBTbG9wZSAJOgkyCToJMjQ1NDM1LjIzNzYKK05vcnRod2VzdCBBcmN0aWMgCToJMgk6CTEwNTU3My41OAorUHJpbmNlIG9mIFdhbGVzLU91dGVyIEtldGNoaWthbiAJOgkyCToJMzI5MDkuMzE3CitTaXRrYSAJOgkyCToJMTI0NjEuODYyNworU2thZ3dheS1Ib29uYWgtQW5nb29uIAk6CTIJOgkyOTQ2NS43MzA3CitTb3V0aGVhc3QgRmFpcmJhbmtzIAk6CTIJOgk2NDkwOC40ODIxCitWYWxkZXotQ29yZG92YSAJOgkyCToJMTA0MTE1Ljc5ODUKK1dhZGUgSGFtcHRvbiAJOgkyCToJNTA5NDMuMzMxNgorV3JhbmdlbGwtUGV0ZXJzYnVyZyAJOgkyCToJMjMzNjQuOTMzOQorWWFrdXRhdCAJOgkyCToJMjQ0OTkuNTM1MgorWXVrb24tS295dWt1ayAJOgkyCToJMzgyOTEyLjEwMDkKK0FwYWNoZSAJOgk0CToJMjkwNTUuNzA3OAorQ29jaGlzZSAJOgk0CToJMTYxMDYuNjE0MworQ29jb25pbm8gCToJNAk6CTQ4MzMyLjUzMzkKK0dpbGEgCToJNAk6CTEyNDIwLjk2NjYKK0dyYWhhbSAJOgk0CToJMTIwMjAuNTUyNgorR3JlZW5sZWUgCToJNAk6CTQ3ODcuNDA3OAorTGEgUGF6IAk6CTQJOgkxMTY4OS42MDI0CitNYXJpY29wYSAJOgk0CToJMjM4OTAuODU5MworTW9oYXZlIAk6CTQJOgkzNDg4Ni41NDg5CitOYXZham8gCToJNAk6CTI1Nzk1LjA3OTEKK1BpbWEgCToJNAk6CTIzNzk5LjA2OTcKK1BpbmFsIAk6CTQJOgkxMzkxOC44OTMxCitTYW50YSBDcnV6IAk6CTQJOgkzMjA2LjcwNDkKK1lhdmFwYWkgCToJNAk6CTIxMDUwLjk1MDIKK1l1bWEgCToJNAk6CTE0Mjk0LjEwNjQKK0Fya2Fuc2FzIAk6CTUJOgkyNjc3LjUxNjEKK0FzaGxleSAJOgk1CToJMjQzMi4yMTcyCitCYXh0ZXIgCToJNQk6CTE1MTkuNjU2NgorQmVudG9uIAk6CTUJOgkyMjc5LjgyMTYKK0Jvb25lIAk6CTUJOgkxNTU4LjcxMzgKK0JyYWRsZXkgCToJNQk6CTE2OTQuODQ0MgorQ2FsaG91biAJOgk1CToJMTYzOC4yNzg2CitDYXJyb2xsIAk6CTUJOgkxNjU0LjUxNzkKK0NoaWNvdCAJOgk1CToJMTc4OS4zNzkyCitDbGFyayAJOgk1CToJMjI4NS45MzQKK0NsYXkgCToJNQk6CTE2NjEuMjc3OAorQ2xlYnVybmUgCToJNQk6CTE1MzMuMDQ2OQorQ2xldmVsYW5kIAk6CTUJOgkxNTUwLjg5MgorQ29sdW1iaWEgCToJNQk6CTE5ODYuMTY3NAorQ29ud2F5IAk6CTUJOgkxNDY3LjY0OTQKK0NyYWlnaGVhZCAJOgk1CToJMTg0Ni42MTgyCitDcmF3Zm9yZCAJOgk1CToJMTU2NC44NzgKK0NyaXR0ZW5kZW4gCToJNQk6CTE2NDkuMDI3MQorQ3Jvc3MgCToJNQk6CTE2MTEuODM0NworRGFsbGFzIAk6CTUJOgkxNzMwLjUzNDQKK0Rlc2hhIAk6CTUJOgkyMTIyLjU1NjgKK0RyZXcgCToJNQk6CTIxNjQuMzMzNQorRmF1bGtuZXIgCToJNQk6CTE3MTkuNzg1OQorRnJhbmtsaW4gCToJNQk6CTE2MDQuOTk3MQorRnVsdG9uIAk6CTUJOgkxNjA2LjYwMjkKK0dhcmxhbmQgCToJNQk6CTE5MDIuNTM2MworR3JhbnQgCToJNQk6CTE2MzkuNDk1OQorR3JlZW5lIAk6CTUJOgkxNTAxLjI5MzUKK0hlbXBzdGVhZCAJOgk1CToJMTkyMC4xMjI0CitIb3QgU3ByaW5nIAk6CTUJOgkxNjExLjM5NDQKK0hvd2FyZCAJOgk1CToJMTU0MS41NjgKK0luZGVwZW5kZW5jZSAJOgk1CToJMTk5OC4zNjYzCitJemFyZCAJOgk1CToJMTUxMi42MTE4CitKYWNrc29uIAk6CTUJOgkxNjYxLjM1NTUKK0plZmZlcnNvbiAJOgk1CToJMjM2Ni40ODMKK0pvaG5zb24gCToJNQk6CTE3NjguMjk2NgorTGFmYXlldHRlIAk6CTUJOgkxNDExLjczMTMKK0xhd3JlbmNlIAk6CTUJOgkxNTM0LjE2MDYKK0xlZSAJOgk1CToJMTYwNC40MjczCitMaW5jb2xuIAk6CTUJOgkxNDgxLjkyMDMKK0xpdHRsZSBSaXZlciAJOgk1CToJMTQ2My4wMTMzCitMb2dhbiAJOgk1CToJMTg5NC41ODUKK0xvbm9rZSAJOgk1CToJMjA3OC4yOTM3CitNYWRpc29uIAk6CTUJOgkyMTY3Ljk4NTQKK01hcmlvbiAJOgk1CToJMTY1OC41MDY1CitNaWxsZXIgCToJNQk6CTE2NTEuMDczMgorTWlzc2lzc2lwcGkgCToJNQk6CTIzODIuMTAwNworTW9ucm9lIAk6CTUJOgkxNjA5LjQ1MTkKK01vbnRnb21lcnkgCToJNQk6CTIwNzIuNzUxMQorTmV2YWRhIAk6CTUJOgkxNjA3LjgyMDIKK05ld3RvbiAJOgk1CToJMjEzMi4wMzYyCitPdWFjaGl0YSAJOgk1CToJMTkxNS42NDE3CitQZXJyeSAJOgk1CToJMTQ1MS42MTczCitQaGlsbGlwcyAJOgk1CToJMTg4My42ODExCitQaWtlIAk6CTUJOgkxNTg5Ljk0OTIKK1BvaW5zZXR0IAk6CTUJOgkxOTc3LjE4MDEKK1BvbGsgCToJNQk6CTIyMzMuNjY3OAorUG9wZSAJOgk1CToJMjE1MS43NDYxCitQcmFpcmllIAk6CTUJOgkxNzUwLjIxODQKK1B1bGFza2kgCToJNQk6CTIwOTIuMzA1NgorUmFuZG9scGggCToJNQk6CTE2OTkuMTQzNgorU3QuIEZyYW5jaXMgCToJNQk6CTE2NjMuODE2CitTYWxpbmUgCToJNQk6CTE4OTEuODkxNAorU2NvdHQgCToJNQk6CTIzMjYuMDUzMQorU2VhcmN5IAk6CTUJOgkxNzMxLjQ0MDkKK1NlYmFzdGlhbiAJOgk1CToJMTQxNC4yNDM2CitTZXZpZXIgCToJNQk6CTE1MDUuNjk2NQorU2hhcnAgCToJNQk6CTE1NzAuNDQ2NQorU3RvbmUgCToJNQk6CTE1NzguNDIzNworVW5pb24gCToJNQk6CTI3MzMuMTQ5MworVmFuIEJ1cmVuIAk6CTUJOgkxODc1Ljk4ODgKK1dhc2hpbmd0b24gCToJNQk6CTI0NzYuMDY1OQorV2hpdGUgCToJNQk6CTI2OTkuNzEyNAorV29vZHJ1ZmYgCToJNQk6CTE1MzguNTg5NQorWWVsbCAJOgk1CToJMjQ1Ny40OTU2CitBbGFtZWRhIAk6CTYJOgkyMTI2Ljc3ODUKK0FscGluZSAJOgk2CToJMTkyNC44NjIxCitBbWFkb3IgCToJNgk6CTE1NjYuMTQ3MQorQnV0dGUgCToJNgk6CTQzNDMuNzE0OQorQ2FsYXZlcmFzIAk6CTYJOgkyNjg1LjQxNTYKK0NvbHVzYSAJOgk2CToJMjk5NC42MDk4CitDb250cmEgQ29zdGEgCToJNgk6CTIwNzcuNTY4NQorRGVsIE5vcnRlIAk6CTYJOgkzMTg1LjA1MjUKK0VsIERvcmFkbyAJOgk2CToJNDYzMS4xNzkKK0ZyZXNubyAJOgk2CToJMTU1ODUuMTE3OAorR2xlbm4gCToJNgk6CTM0MzcuMzQ0NAorSHVtYm9sZHQgCToJNgk6CTEwNDk1LjI0OTgKK0ltcGVyaWFsIAk6CTYJOgkxMTYwNy42ODA3CitJbnlvIAk6CTYJOgkyNjQ4Ny44NzgyCitLZXJuIAk6CTYJOgkyMTEzOC4wNzc4CitLaW5ncyAJOgk2CToJMzYwMy45NTkxCitMYWtlIAk6CTYJOgkzNDQzLjM1MzIKK0xhc3NlbiAJOgk2CToJMTIyMjUuNzU4MworTG9zIEFuZ2VsZXMgCToJNgk6CTEyMzA4LjUwODgKK01hZGVyYSAJOgk2CToJNTU3Ny4wOTg4CitNYXJpbiAJOgk2CToJMjE0NS4wMzgKK01hcmlwb3NhIAk6CTYJOgkzNzg4LjYyNjEKK01lbmRvY2lubyAJOgk2CToJMTAwNDQuMzgyNgorTWVyY2VkIAk6CTYJOgk1MTA3LjE0MzMKK01vZG9jIAk6CTYJOgkxMDg4Ni43MjgzCitNb25vIAk6CTYJOgk4MTExLjM2MgorTW9udGVyZXkgCToJNgk6CTk3NjcuMDcxMworTmFwYSAJOgk2CToJMjA0MS42MTkzCitOZXZhZGEgCToJNgk6CTI1MjMuOTI5MQorT3JhbmdlIAk6CTYJOgkyNDU1LjI2ODIKK1BsYWNlciAJOgk2CToJMzg5Mi4yMDAyCitQbHVtYXMgCToJNgk6CTY3NjguOTEzMgorUml2ZXJzaWRlIAk6CTYJOgkxODkxNS4xMDY3CitTYWNyYW1lbnRvIAk6CTYJOgkyNTc4LjI5MzIKK1NhbiBCZW5pdG8gCToJNgk6CTM2MDEuOTkwNworU2FuIEJlcm5hcmRpbm8gCToJNgk6CTUyMDcyLjc3ODgKK1NhbiBEaWVnbyAJOgk2CToJMTE3MjEuMDk2OAorU2FuIEZyYW5jaXNjbyAJOgk2CToJNjAwLjY3MjgKK1NhbiBKb2FxdWluIAk6CTYJOgkzNjkzLjk4NzUKK1NhbiBMdWlzIE9iaXNwbyAJOgk2CToJOTM2NC4yNDg2CitTYW4gTWF0ZW8gCToJNgk6CTE5MTkuMjE1OQorU2FudGEgQmFyYmFyYSAJOgk2CToJOTgxMy43MTcyCitTYW50YSBDbGFyYSAJOgk2CToJMzM3Ny4zODU5CitTYW50YSBDcnV6IAk6CTYJOgkxNTcyLjU0NDQKK1NoYXN0YSAJOgk2CToJOTk2NC44Njk2CitTaWVycmEgCToJNgk6CTI0OTEuNTAyMworU2lza2l5b3UgCToJNgk6CTE2NDM5LjkyMTQKK1NvbGFubyAJOgk2CToJMjM0OC4yNzUzCitTb25vbWEgCToJNgk6CTQ1NzkuNzE1NworU3RhbmlzbGF1cyAJOgk2CToJMzkyMi45OTUzCitTdXR0ZXIgCToJNgk6CTE1NzYuMjIyMgorVGVoYW1hIAk6CTYJOgk3NjcyLjI3OTMKK1RyaW5pdHkgCToJNgk6CTgzMDcuNTI4NgorVHVsYXJlIAk6CTYJOgkxMjUzMy4yNDMxCitUdW9sdW1uZSAJOgk2CToJNTg5MC41NDA2CitWZW50dXJhIAk6CTYJOgk1NzE5LjIzOAorWW9sbyAJOgk2CToJMjY0OS4yODUxCitZdWJhIAk6CTYJOgkxNjY3LjI2MDcKK0FkYW1zIAk6CTgJOgkzMTAyLjA2ODkKK0FsYW1vc2EgCToJOAk6CTE4NzMuOTQyNworQXJhcGFob2UgCToJOAk6CTIwODYuMDYzNworQXJjaHVsZXRhIAk6CTgJOgkzNTEwLjY5MzIKK0JhY2EgCToJOAk6CTY2MjIuODYzMQorQmVudCAJOgk4CToJMzk5MS41MDA4CitCb3VsZGVyIAk6CTgJOgkxOTQ2LjA0ODMKK0NoYWZmZWUgCToJOAk6CTI2MjguODc1OQorQ2hleWVubmUgCToJOAk6CTQ2MTMuNzQ4MworQ2xlYXIgQ3JlZWsgCToJOAk6CTEwMjYuODMxNAorQ29uZWpvcyAJOgk4CToJMzM0My4zNTMzCitDb3N0aWxsYSAJOgk4CToJMzE4Ni44Mzk2CitDcm93bGV5IAk6CTgJOgkyMDcyLjg1NDcKK0N1c3RlciAJOgk4CToJMTkxNi4zNDEKK0RlbHRhIAk6CTgJOgkyOTc0LjY2NjgKK0RlbnZlciAJOgk4CToJNDAxLjI5NDYKK0RvbG9yZXMgCToJOAk6CTI3NjYuMzUzMQorRG91Z2xhcyAJOgk4CToJMjE4Mi43MjI1CitFYWdsZSAJOgk4CToJNDM4MS43NjIKK0VsYmVydCAJOgk4CToJNDc5My44MDUxCitFbCBQYXNvIAk6CTgJOgk1NTE1LjU2MDQKK0ZyZW1vbnQgCToJOAk6CTM5NzIuOTMwNQorR2FyZmllbGQgCToJOAk6CTc2NTUuNDE4NAorR2lscGluIAk6CTgJOgkzODkuMTQ3NQorR3JhbmQgCToJOAk6CTQ4NDIuMjY0CitHdW5uaXNvbiAJOgk4CToJODQ0Mi43NTI1CitIaW5zZGFsZSAJOgk4CToJMjkwOC45MzI2CitIdWVyZmFubyAJOgk4CToJNDEyNi40OTE2CitKYWNrc29uIAk6CTgJOgk0MTk4LjI2MDUKK0plZmZlcnNvbiAJOgk4CToJMjAxNS4xNzU0CitLaW93YSAJOgk4CToJNDYyNS4xMTg0CitLaXQgQ2Fyc29uIAk6CTgJOgk1NTk4LjQ0MDQKK0xha2UgCToJOAk6CTk5NC4zMDEKK0xhIFBsYXRhIAk6CTgJOgk0NDAyLjgxODcKK0xhcmltZXIgCToJOAk6CTY4MjEuNjk3NAorTGFzIEFuaW1hcyAJOgk4CToJMTIzNjguMzM3OAorTGluY29sbiAJOgk4CToJNjY5OC43NTAxCitMb2dhbiAJOgk4CToJNDc3OC4xODc0CitNZXNhIAk6CTgJOgk4NjUzLjQ3NDkKK01pbmVyYWwgCToJOAk6CTIyNzMuMjQzCitNb2ZmYXQgCToJOAk6CTEyMzA0LjkzNDYKK01vbnRlenVtYSAJOgk4CToJNTI4My41MjIzCitNb250cm9zZSAJOgk4CToJNTgwOC4yNTYzCitNb3JnYW4gCToJOAk6CTMzNTEuMTIzMworT3Rlcm8gCToJOAk6CTMyODguNjI2NgorT3VyYXkgCToJOAk6CTE0MDQuMzIzOQorUGFyayAJOgk4CToJNTcyNS42ODcxCitQaGlsbGlwcyAJOgk4CToJMTc4MS4yNDY2CitQaXRraW4gCToJOAk6CTI1MjAuNjY1NworUHJvd2VycyAJOgk4CToJNDI1OC44NjY1CitQdWVibG8gCToJOAk6CTYyMTAuMTIwNworUmlvIEJsYW5jbyAJOgk4CToJODM0Ny4zMzY5CitSaW8gR3JhbmRlIAk6CTgJOgkyMzYyLjQ0MjYKK1JvdXR0IAk6CTgJOgk2MTMzLjE3MTgKK1NhZ3VhY2hlIAk6CTgJOgk4MjEwLjk0NzUKK1NhbiBKdWFuIAk6CTgJOgkxMDA1LjY3MTEKK1NhbiBNaWd1ZWwgCToJOAk6CTMzMzcuMTg5MQorU2VkZ3dpY2sgCToJOAk6CTE0MjMuNDY0CitTdW1taXQgCToJOAk6CTE2MDMuODU3NQorVGVsbGVyIAk6CTgJOgkxNDQ3LjcwNjQKK1dhc2hpbmd0b24gCToJOAk6CTY1MzcuNDcwOAorV2VsZCAJOgk4CToJMTA0MTUuODQwNAorWXVtYSAJOgk4CToJNjEzNS45NjkKK0ZhaXJmaWVsZCAJOgk5CToJMjE2Ny43MjY0CitIYXJ0Zm9yZCAJOgk5CToJMTk0My45NzYzCitMaXRjaGZpZWxkIAk6CTkJOgkyNDQ2LjQzNjMKK01pZGRsZXNleCAJOgk5CToJMTEzNy4xOTEzCitOZXcgSGF2ZW4gCToJOQk6CTIyMzIuNjMxOAorTmV3IExvbmRvbiAJOgk5CToJMTk5OC41OTk0CitUb2xsYW5kIAk6CTkJOgkxMDgwLjA1NTkKK1dpbmRoYW0gCToJOQk6CTEzNTAuNjA3MworS2VudCAJOgkxMAk6CTIwNzIuMzEwOAorTmV3IENhc3RsZSAJOgkxMAk6CTEyNzguMTkwOQorU3Vzc2V4IAk6CTEwCToJMzA5Ni43MzM1CitEaXN0cmljdCBvZiBDb2x1bWJpYQk6CTExCToJMTc3LjAwMDYKK0FsYWNodWEgCToJMTIJOgkyNTEwLjAyMDgKK0Jha2VyIAk6CTEyCToJMTUyNS4yMjUxCitCYXkgCToJMTIJOgkyNjc2LjE2OTMKK0JyYWRmb3JkIAk6CTEyCToJNzc3LjEwMzYKK0JyZXZhcmQgCToJMTIJOgk0MDMyLjUwMDUKK0Jyb3dhcmQgCToJMTIJOgkzNDE3Ljg0MTcKK0NhbGhvdW4gCToJMTIJOgkxNDg3LjU0MDYKK0NoYXJsb3R0ZSAJOgkxMgk6CTIyMjUuMTIwOAorQ2l0cnVzIAk6CTEyCToJMjAwMi40NTg1CitDbGF5IAk6CTEyCToJMTY2Ny4xNTcxCitDb2xsaWVyIAk6CTEyCToJNTk2OS43Njg3CitDb2x1bWJpYSAJOgkxMgk6CTIwNzQuNjkzNgorRGVTb3RvIAk6CTEyCToJMTY1Ni4zMDUKK0RpeGllIAk6CTEyCToJMjIzNi44Nzk0CitEdXZhbCAJOgkxMgk6CTIzNzguMjQxNgorRXNjYW1iaWEgCToJMTIJOgkyMjY3LjcyNjMKK0ZsYWdsZXIgCToJMTIJOgkxNDc4LjI2ODQKK0ZyYW5rbGluIAk6CTEyCToJMjY4Ny4wNzMyCitHYWRzZGVuIAk6CTEyCToJMTM2OC43ODkxCitHaWxjaHJpc3QgCToJMTIJOgk5MjAuNjY3MworR2xhZGVzIAk6CTEyCToJMjU1NC44NTM3CitHdWxmIAk6CTEyCToJMTkyOC40ODgxCitIYW1pbHRvbiAJOgkxMgk6CTEzNDUuMDEyOQorSGFyZGVlIAk6CTEyCToJMTY1My4yNzQ3CitIZW5kcnkgCToJMTIJOgkzMDgxLjU1NjEKK0hlcm5hbmRvIAk6CTEyCToJMTUyNS43MTcyCitIaWdobGFuZHMgCToJMTIJOgkyODY1LjI2NTIKK0hpbGxzYm9yb3VnaCAJOgkxMgk6CTMyNzkuNTA5OAorSG9sbWVzIAk6CTEyCToJMTI2NS43NTg5CitJbmRpYW4gUml2ZXIgCToJMTIJOgkxNTk3LjgyMjgKK0phY2tzb24gCToJMTIJOgkyNDcyLjM2MjIKK0plZmZlcnNvbiAJOgkxMgk6CTE2NDguOTIzNQorTGFmYXlldHRlIAk6CTEyCToJMTQxOS4xMTI4CitMYWtlIAk6CTEyCToJMjk5NS4wNzYKK0xlZSAJOgkxMgk6CTMxMzguNzk1MQorTGVvbiAJOgkxMgk6CTE4MTcuNjEwMgorTGV2eSAJOgkxMgk6CTM2NTcuOTA4OAorTGliZXJ0eSAJOgkxMgk6CTIxODMuNzg0NAorTWFkaXNvbiAJOgkxMgk6CTE4NTMuOTIyCitNYW5hdGVlIAk6CTEyCToJMjMxMi4yMjI1CitNYXJpb24gCToJMTIJOgk0MzA3LjE5NTkKK01hcnRpbiAJOgkxMgk6CTE5NDkuNzI2MQorTWlhbWktRGFkZSAJOgkxMgk6CTYyOTYuOTYzNAorTW9ucm9lIAk6CTEyCToJOTY3OS4yMTg1CitOYXNzYXUgCToJMTIJOgkxODc5Ljk3NzQKK09rYWxvb3NhIAk6CTEyCToJMjgwMi4zOAorT2tlZWNob2JlZSAJOgkxMgk6CTIzMDkuMTY2MworT3JhbmdlIAk6CTEyCToJMjYwMC44NTIxCitPc2Nlb2xhIAk6CTEyCToJMzkwMS40NDY1CitQYWxtIEJlYWNoIAk6CTEyCToJNjE4MC41OTQ3CitQYXNjbyAJOgkxMgk6CTIyNDcuOTkwNQorUGluZWxsYXMgCToJMTIJOgkxNTczLjg2NTMKK1BvbGsgCToJMTIJOgk1MjA1Ljg3NDEKK1B1dG5hbSAJOgkxMgk6CTIxNDIuMzQ0NAorU3QuIEpvaG5zIAk6CTEyCToJMjEyNy41MDM3CitTdC4gTHVjaWUgCToJMTIJOgkxNzgyLjEyNzIKK1NhbnRhIFJvc2EgCToJMTIJOgkzMDM5LjU0NjMKK1NhcmFzb3RhIAk6CTEyCToJMTg3OC4yMTYyCitTZW1pbm9sZSAJOgkxMgk6CTg5My4yMTMzCitTdW10ZXIgCToJMTIJOgkxNTAzLjAwMjkKK1N1d2FubmVlIAk6CTEyCToJMTc5Mi4wMjEKK1RheWxvciAJOgkxMgk6CTMxOTAuOTA1OQorVW5pb24gCToJMTIJOgk2NDYuNzQ4OQorVm9sdXNpYSAJOgkxMgk6CTM3MTAuMDE5NgorV2FrdWxsYSAJOgkxMgk6CTE5MDUuNTY2NgorV2FsdG9uIAk6CTEyCToJMzIwNi40OTc3CitXYXNoaW5ndG9uIAk6CTEyCToJMTU5NC44OTYxCitBcHBsaW5nIAk6CTEzCToJMTMyNi4zNjQ5CitBdGtpbnNvbiAJOgkxMwk6CTg5MS4yMTkKK0JhY29uIAk6CTEzCToJNzQwLjUzMjgKK0Jha2VyIAk6CTEzCToJOTA0LjM1MDMKK0JhbGR3aW4gCToJMTMJOgk2OTIuODI1CitCYW5rcyAJOgkxMwk6CTYwNS43MjMzCitCYXJyb3cgCToJMTMJOgk0MjEuNzU1NgorQmFydG93IAk6CTEzCToJMTIxNy41ODQ5CitCZW4gSGlsbCAJOgkxMwk6CTY1Ny45Mzc3CitCZXJyaWVuIAk6CTEzCToJMTE4NS42NTAyCitCaWJiIAk6CTEzCToJNjYwLjc4NjcKK0JsZWNrbGV5IAk6CTEzCToJNTY3LjU3MjYKK0JyYW50bGV5IAk6CTEzCToJMTE1OC44MTc4CitCcm9va3MgCToJMTMJOgkxMjg5LjIyNDMKK0JyeWFuIAk6CTEzCToJMTE3Ny4xMjkxCitCdWxsb2NoIAk6CTEzCToJMTc4NC4wOTU2CitCdXJrZSAJOgkxMwk6CTIxNjIuNjI0MQorQnV0dHMgCToJMTMJOgk0OTIuMTI1OQorQ2FsaG91biAJOgkxMwk6CTczNC40NDYzCitDYW1kZW4gCToJMTMJOgkyMDI2LjcyNjgKK0NhbmRsZXIgCToJMTMJOgk2NDQuNDE3OQorQ2Fycm9sbCAJOgkxMwk6CTEzMDQuOTE5NworQ2F0b29zYSAJOgkxMwk6CTQyMS4yODk0CitDaGFybHRvbiAJOgkxMwk6CTIwMjcuODkyMworQ2hhdGhhbSAJOgkxMwk6CTE2MzcuNjA1MgorQ2hhdHRhaG9vY2hlZSAJOgkxMwk6CTY1MC41MzAzCitDaGF0dG9vZ2EgCToJMTMJOgk4MTIuMDk0NQorQ2hlcm9rZWUgCToJMTMJOgkxMTI0LjAzNDEKK0NsYXJrZSAJOgkxMwk6CTMxNC4xMTUyCitDbGF5IAk6CTEzCToJNTYyLjAwNDEKK0NsYXl0b24gCToJMTMJOgkzNzMuNjg1MgorQ2xpbmNoIAk6CTEzCToJMjEzNC42MDAzCitDb2JiIAk6CTEzCToJODkyLjI4MDkKK0NvZmZlZSAJOgkxMwk6CTE1NjAuNzU5OQorQ29scXVpdHQgCToJMTMJOgkxNDQxLjQ2NDUKK0NvbHVtYmlhIAk6CTEzCToJNzk3LjE1MDIKK0Nvb2sgCToJMTMJOgk2MDQuMDM5OAorQ293ZXRhIAk6CTEzCToJMTE1NS4wODgyCitDcmF3Zm9yZCAJOgkxMwk6CTg0NS41MDU1CitDcmlzcCAJOgkxMwk6CTcyOC4zMDgKK0RhZGUgCToJMTMJOgk0NTEuMDc0NAorRGF3c29uIAk6CTEzCToJNTU0LjA3ODcKK0RlY2F0dXIgCToJMTMJOgkxNjEzLjk4NDQKK0RlS2FsYiAJOgkxMwk6CTcwMS42NTY5CitEb2RnZSAJOgkxMwk6CTEzMDMuMjEwMworRG9vbHkgCToJMTMJOgkxMDI4LjQxMTMKK0RvdWdoZXJ0eSAJOgkxMwk6CTg2Ni43MTc2CitEb3VnbGFzIAk6CTEzCToJNTE4LjY3MzQKK0Vhcmx5IAk6CTEzCToJMTMzNy4xMzkzCitFY2hvbHMgCToJMTMJOgkxMDg5Ljg3MgorRWZmaW5naGFtIAk6CTEzCToJMTI1MC41MDM4CitFbGJlcnQgCToJMTMJOgk5NzAuMDU4NgorRW1hbnVlbCAJOgkxMwk6CTE3ODcuOTU0NworRXZhbnMgCToJMTMJOgk0ODQuMDE5MgorRmFubmluIAk6CTEzCToJMTAxMy44MDM3CitGYXlldHRlIAk6CTEzCToJNTE2LjA1NzUKK0Zsb3lkIAk6CTEzCToJMTM0Mi44MTE0CitGb3JzeXRoIAk6CTEzCToJNjQwLjY4ODMKK0ZyYW5rbGluIAk6CTEzCToJNjg5Ljg5ODMKK0Z1bHRvbiAJOgkxMwk6CTEzODQuNjM5OQorR2lsbWVyIAk6CTEzCToJMTExOC40Mzk3CitHbGFzY29jayAJOgkxMwk6CTM3NC4xMjU1CitHbHlubiAJOgkxMwk6CTE1MTUuNTkwMworR29yZG9uIAk6CTEzCToJOTI3LjI0NTkKK0dyYWR5IAk6CTEzCToJMTE5Mi4yODA2CitHcmVlbmUgCToJMTMJOgkxMDUyLjE2MTYKK0d3aW5uZXR0IAk6CTEzCToJMTEzMS4xMDQ4CitIYWJlcnNoYW0gCToJMTMJOgk3MjMuMTI4CitIYWxsIAk6CTEzCToJMTExMS42MDIxCitIYW5jb2NrIAk6CTEzCToJMTIzOS45ODg0CitIYXJhbHNvbiAJOgkxMwk6CTczMy4zODQ0CitIYXJyaXMgCToJMTMJOgkxMjI0Ljg4ODcKK0hhcnQgCToJMTMJOgk2NjQuMTI3OAorSGVhcmQgCToJMTMJOgk3NzkuNzk3MgorSGVucnkgCToJMTMJOgk4NDAuNDAzMgorSG91c3RvbiAJOgkxMwk6CTk4My43NTk3CitJcndpbiAJOgkxMwk6CTkzOS40NzA3CitKYWNrc29uIAk6CTEzCToJODg4LjM3CitKYXNwZXIgCToJMTMJOgk5NjcuNTcyMgorSmVmZiBEYXZpcyAJOgkxMwk6CTg2OC43Mzc4CitKZWZmZXJzb24gCToJMTMJOgkxMzcxLjU2MDQKK0plbmtpbnMgCToJMTMJOgk5MTIuODQ1NQorSm9obnNvbiAJOgkxMwk6CTc5My44ODY4CitKb25lcyAJOgkxMwk6CTEwMjQuMDYwMQorTGFtYXIgCToJMTMJOgk0ODEuMTk2MQorTGFuaWVyIAk6CTEzCToJNTE3LjU1OTcKK0xhdXJlbnMgCToJMTMJOgkyMTE5Ljk0MDkKK0xlZSAJOgkxMwk6CTkzNy42MDU5CitMaWJlcnR5IAk6CTEzCToJMTU2MC41MjY4CitMaW5jb2xuIAk6CTEzCToJNjY2LjM1NTIKK0xvbmcgCToJMTMJOgkxMDQ1LjAzOTEKK0xvd25kZXMgCToJMTMJOgkxMzIyLjUzMTcKK0x1bXBraW4gCToJMTMJOgk3MzcuODEzMworTWNEdWZmaWUgCToJMTMJOgk2ODkuNzE3CitNY0ludG9zaCAJOgkxMwk6CTE0ODguMDMyNworTWFjb24gCToJMTMJOgkxMDUxLjQxMDUKK01hZGlzb24gCToJMTMJOgk3MzkuNjI2MworTWFyaW9uIAk6CTEzCToJOTUxLjc5OTEKK01lcml3ZXRoZXIgCToJMTMJOgkxMzA4LjgzMDYKK01pbGxlciAJOgkxMwk6CTczNC44MzQ4CitNaXRjaGVsbCAJOgkxMwk6CTEzMzAuNzY3OQorTW9ucm9lIAk6CTEzCToJMTAzMC4zMDIKK01vbnRnb21lcnkgCToJMTMJOgk2NDAuNTU4OAorTW9yZ2FuIAk6CTEzCToJOTE4LjQxNAorTXVycmF5IAk6CTEzCToJODk4LjQxOTIKK011c2NvZ2VlIAk6CTEzCToJNTcyLjM5CitOZXd0b24gCToJMTMJOgk3MjMuMTAyMQorT2NvbmVlIAk6CTEzCToJNDgyLjEwMjYKK09nbGV0aG9ycGUgCToJMTMJOgkxMTQ1LjIyMDMKK1BhdWxkaW5nIAk6CTEzCToJODE2LjAwNTQKK1BlYWNoIAk6CTEzCToJMzkyLjI4MTQKK1BpY2tlbnMgCToJMTMJOgk2MDIuOTAwMgorUGllcmNlIAk6CTEzCToJODkwLjcwMQorUGlrZSAJOgkxMwk6CTU2OC4zMjM3CitQb2xrIAk6CTEzCToJODA4LjQxNjcKK1B1bGFza2kgCToJMTMJOgk2NDcuMjE1MQorUHV0bmFtIAk6CTEzCToJOTM0LjAzMTcKK1F1aXRtYW4gCToJMTMJOgk0MTYuNzgyOAorUmFidW4gCToJMTMJOgk5NzYuNDA0MQorUmFuZG9scGggCToJMTMJOgkxMTE2LjAwNTEKK1JpY2htb25kIAk6CTEzCToJODUwLjY4NTUKK1JvY2tkYWxlIAk6CTEzCToJMzQyLjIxNjcKK1NjaGxleSAJOgkxMwk6CTQzNC42NTM4CitTY3JldmVuIAk6CTEzCToJMTY5Ny45NzgxCitTZW1pbm9sZSAJOgkxMwk6CTY2NC40OTA0CitTcGFsZGluZyAJOgkxMwk6CTUxNi45NjQKK1N0ZXBoZW5zIAk6CTEzCToJNDc3LjE1NTcKK1N0ZXdhcnQgCToJMTMJOgkxMTk5Ljc2NTcKK1N1bXRlciAJOgkxMwk6CTEyNzUuNjc4NgorVGFsYm90IAk6CTEzCToJMTAyMi4zNzY2CitUYWxpYWZlcnJvIAk6CTEzCToJNTA2LjI2NzMKK1RhdHRuYWxsIAk6CTEzCToJMTI2NC40ODk4CitUYXlsb3IgCToJMTMJOgk5ODMuMTg5OQorVGVsZmFpciAJOgkxMwk6CTExNTAuMTY3MgorVGVycmVsbCAJOgkxMwk6CTg3NC40NjE3CitUaG9tYXMgCToJMTMJOgkxNDI5Ljg4NzIKK1RpZnQgCToJMTMJOgk2OTYuMzQ3NAorVG9vbWJzIAk6CTEzCToJOTU0Ljc3NzYKK1Rvd25zIAk6CTEzCToJNDQ1LjUwNTkKK1RyZXV0bGVuIAk6CTEzCToJNTIzLjY3MjEKK1Ryb3VwIAk6CTEzCToJMTE1NS4wMzY0CitUdXJuZXIgCToJMTMJOgk3NTAuNzExNQorVHdpZ2dzIAk6CTEzCToJOTQwLjA0MDUKK1VuaW9uIAk6CTEzCToJODUyLjE2MTgKK1Vwc29uIAk6CTEzCToJODQ4LjU4NzYKK1dhbGtlciAJOgkxMwk6CTExNTcuODA3NworV2FsdG9uIAk6CTEzCToJODU0LjgyOTUKK1dhcmUgCToJMTMJOgkyMzQ3LjM0MjkKK1dhcnJlbiAJOgkxMwk6CTc0Mi42NTY2CitXYXNoaW5ndG9uIAk6CTEzCToJMTc3Mi41MTgzCitXYXluZSAJOgkxMwk6CTE2ODAuMzkyCitXZWJzdGVyIAk6CTEzCToJNTQ0LjU3MzQKK1doZWVsZXIgCToJMTMJOgk3NzcuMzYyNgorV2hpdGUgCToJMTMJOgk2MjcuMTk0NAorV2hpdGZpZWxkIAk6CTEzCToJNzUyLjc4MzUKK1dpbGNveCAJOgkxMwk6CTk5Mi43NDcKK1dpbGtlcyAJOgkxMwk6CTEyMjcuNjYKK1dpbGtpbnNvbiAJOgkxMwk6CTExNzAuNzA1OQorV29ydGggCToJMTMJOgkxNDg4LjE2MjIKK0hhd2FpaSAJOgkxNQk6CTEzMTc0LjU1MworSG9ub2x1bHUgCToJMTUJOgk1NTA4LjU0MTUKK0thbGF3YW8gCToJMTUJOgkxMzUuNTM0NworS2F1YWkgCToJMTUJOgkzMjc5Ljg5ODMKK01hdWkgCToJMTUJOgk2MjEyLjczNjYKK0FkYSAJOgkxNgk6CTI3NDYuMjU0NworQWRhbXMgCToJMTYJOgkzNTQ4LjMKK0Jhbm5vY2sgCToJMTYJOgkyOTcxLjkyMTQKK0JlYXIgTGFrZSAJOgkxNgk6CTI3MTguMDQ5NgorQmVuZXdhaCAJOgkxNgk6CTIwMzAuNTA4MgorQmluZ2hhbSAJOgkxNgk6CTU0OTEuNDIxNgorQmxhaW5lIAk6CTE2CToJNjg5Mi4wNDE4CitCb2lzZSAJOgkxNgk6CTQ5MzguNTA4NAorQm9ubmVyIAk6CTE2CToJNDk3MS43MzgxCitCb25uZXZpbGxlIAk6CTE2CToJNDkyMi42ODM1CitCb3VuZGFyeSAJOgkxNgk6CTMzMTAuNTYzOQorQnV0dGUgCToJMTYJOgk1Nzg0Ljk5ODEKK0NhbWFzIAk6CTE2CToJMjc5NC42NjE4CitDYW55b24gCToJMTYJOgkxNTYzLjA5MDkKK0Nhcmlib3UgCToJMTYJOgk0NjU4LjQyNTgKK0Nhc3NpYSAJOgkxNgk6CTY2ODMuMDAyOQorQ2xhcmsgCToJMTYJOgk0NTcxLjg5MzkKK0NsZWFyd2F0ZXIgCToJMTYJOgk2NDQ0LjE3OQorQ3VzdGVyIAk6CTE2CToJMTI3ODYuMjg2MQorRWxtb3JlIAk6CTE2CToJODAzMC4zMjA5CitGcmFua2xpbiAJOgkxNgk6CTE3MzEuMDUyNAorRnJlbW9udCAJOgkxNgk6CTQ5MDkuNTc4MQorR2VtIAk6CTE2CToJMTQ2NS4yOTI1CitHb29kaW5nIAk6CTE2CToJMTkwMC42NDU2CitJZGFobyAJOgkxNgk6CTIyMDIxLjQyMzIKK0plZmZlcnNvbiAJOgkxNgk6CTI4NjMuMzc0NQorSmVyb21lIAk6CTE2CToJMTU1OC44NDMzCitLb290ZW5haSAJOgkxNgk6CTM0MDcuNjM3MQorTGF0YWggCToJMTYJOgkyNzg5LjE0NTEKK0xlbWhpIAk6CTE2CToJMTE4MzUuMDA1CitMZXdpcyAJOgkxNgk6CTEyNDIuNzA3OQorTGluY29sbiAJOgkxNgk6CTMxMjMuMTc3NAorTWFkaXNvbiAJOgkxNgk6CTEyMjYuMDAyNAorTWluaWRva2EgCToJMTYJOgkxOTc2LjExODIKK05leiBQZXJjZSAJOgkxNgk6CTIyMTcuOTcyNAorT25laWRhIAk6CTE2CToJMzExMi4xNjk5CitPd3loZWUgCToJMTYJOgkxOTkzNC40Nzg5CitQYXlldHRlIAk6CTE2CToJMTA2Mi4zOTIxCitQb3dlciAJOgkxNgk6CTM3MzYuMzM0CitTaG9zaG9uZSAJOgkxNgk6CTY4MjUuOTQ1CitUZXRvbiAJOgkxNgk6CTExNjYuOTc2MworVHdpbiBGYWxscyAJOgkxNgk6CTQ5OTQuNzM3MworVmFsbGV5IAk6CTE2CToJOTY3MC4xNzk0CitXYXNoaW5ndG9uIAk6CTE2CToJMzgxNi40Njg2CitBZGFtcyAJOgkxNwk6CTIyNTYuNjE1MgorQWxleGFuZGVyIAk6CTE3CToJNjU0LjA3ODYKK0JvbmQgCToJMTcJOgk5OTEuMTE1MworQm9vbmUgCToJMTcJOgk3MzAuMjI0NgorQnJvd24gCToJMTcJOgk3OTUuNzUxNgorQnVyZWF1IAk6CTE3CToJMjI2MS44NDcKK0NhbGhvdW4gCToJMTcJOgk3MzQuNzU3MQorQ2Fycm9sbCAJOgkxNwk6CTEyMDYuMzQ0MworQ2FzcyAJOgkxNwk6CTk5My44NjA3CitDaGFtcGFpZ24gCToJMTcJOgkyNTgzLjYwMjcKK0NocmlzdGlhbiAJOgkxNwk6CTE4NTMuNjg4OQorQ2xhcmsgCToJMTcJOgkxMzA3LjYzOTIKK0NsYXkgCToJMTcJOgkxMjE2Ljg4NTYKK0NsaW50b24gCToJMTcJOgkxMzA0LjAxMzIKK0NvbGVzIAk6CTE3CToJMTMyMS4wODEzCitDb29rIAk6CTE3CToJNDIzNC43NTM2CitDcmF3Zm9yZCAJOgkxNwk6CTExNTQuNDY2NgorQ3VtYmVybGFuZCAJOgkxNwk6CTg5OC43MworRGVLYWxiIAk6CTE3CToJMTY0NC41NzIzCitEZSBXaXR0IAk6CTE3CToJMTA0OS4zMzg1CitEb3VnbGFzIAk6CTE3CToJMTA4MS4xMTc4CitEdVBhZ2UgCToJMTcJOgk4NzEuNjY0NQorRWRnYXIgCToJMTcJOgkxNjE2LjYyNjIKK0Vkd2FyZHMgCToJMTcJOgk1NzYuNjg5NAorRWZmaW5naGFtIAk6CTE3CToJMTI0Mi45NDEKK0ZheWV0dGUgCToJMTcJOgkxODc4LjY4MjQKK0ZvcmQgCToJMTcJOgkxMjU5LjgyNzgKK0ZyYW5rbGluIAk6CTE3CToJMTExNy4zMjYKK0Z1bHRvbiAJOgkxNwk6CTIyODUuOTA4MQorR2FsbGF0aW4gCToJMTcJOgk4NTAuNTgxOQorR3JlZW5lIAk6CTE3CToJMTQxNS4wMjA2CitHcnVuZHkgCToJMTcJOgkxMTE0Ljc4NzgKK0hhbWlsdG9uIAk6CTE3CToJMTEyOC44MjU2CitIYW5jb2NrIAk6CTE3CToJMjEwOS42NTg2CitIYXJkaW4gCToJMTcJOgk0NzAuMTYyNworSGVuZGVyc29uIAk6CTE3CToJMTAyMy4zNjA4CitIZW5yeSAJOgkxNwk6CTIxMzguMzA0CitJcm9xdW9pcyAJOgkxNwk6CTI4OTUuNjk3NworSmFja3NvbiAJOgkxNwk6CTE1NjAuNTUyNworSmFzcGVyIAk6CTE3CToJMTI4OS44NzE4CitKZWZmZXJzb24gCToJMTcJOgkxNTExLjgwODkKK0plcnNleSAJOgkxNwk6CTk3Ni40ODE4CitKbyBEYXZpZXNzIAk6CTE3CToJMTYwMi40ODQ4CitKb2huc29uIAk6CTE3CToJOTAzLjU5OTIKK0thbmUgCToJMTcJOgkxMzU3LjM2NzIKK0thbmtha2VlIAk6CTE3CToJMTc2NC45Mjk2CitLZW5kYWxsIAk6CTE3CToJODM1LjcxNTMKK0tub3ggCToJMTcJOgkxODY0LjAyMworTGFrZSAJOgkxNwk6CTM1NDIuOTkwNQorTGEgU2FsbGUgCToJMTcJOgkyOTczLjQyMzYKK0xhd3JlbmNlIAk6CTE3CToJOTY4LjUwNDYKK0xlZSAJOgkxNwk6CTE4ODguODYxMQorTGl2aW5nc3RvbiAJOgkxNwk6CTI3MDcuNjYzNworTG9nYW4gCToJMTcJOgkxNjAzLjIzNTkKK01jRG9ub3VnaCAJOgkxNwk6CTE1MjguMTUxOAorTWNIZW5yeSAJOgkxNwk6CTE1ODIuODI2NworTWNMZWFuIAk6CTE3CToJMzA3Mi40OTExCitNYWNvbiAJOgkxNwk6CTE1MTYuMTM0MgorTWFjb3VwaW4gCToJMTcJOgkyMjQ3LjEwOTkKK01hZGlzb24gCToJMTcJOgkxOTE3LjUwNjUKK01hcmlvbiAJOgkxNwk6CTE0OTEuMDg4OQorTWFyc2hhbGwgCToJMTcJOgkxMDMyLjE2NjgKK01hc29uIAk6CTE3CToJMTQ1OS4xMjgzCitNYXNzYWMgCToJMTcJOgk2MjcuMDkwOAorTWVuYXJkIAk6CTE3CToJODE2LjgwODMKK01lcmNlciAJOgkxNwk6CTE0NzMuMzk5MgorTW9ucm9lIAk6CTE3CToJMTAzMC4wNjg5CitNb250Z29tZXJ5IAk6CTE3CToJMTgzOC4yNTI1CitNb3JnYW4gCToJMTcJOgkxNDgyLjE1MzQKK01vdWx0cmllIAk6CTE3CToJODkyLjE3NzMKK09nbGUgCToJMTcJOgkxOTc2Ljg2OTMKK1Blb3JpYSAJOgkxNwk6CTE2MzQuMDA1MQorUGVycnkgCToJMTcJOgkxMTU3LjIzNzkKK1BpYXR0IAk6CTE3CToJMTE0MC40NTQ3CitQaWtlIAk6CTE3CToJMjE5OC41NzMzCitQb3BlIAk6CTE3CToJOTcwLjMxNzYKK1B1bGFza2kgCToJMTcJOgk1MjYuNjI0NworUHV0bmFtIAk6CTE3CToJNDQ2LjEwMTYKK1JhbmRvbHBoIAk6CTE3CToJMTU0Ni45MDM0CitSaWNobGFuZCAJOgkxNwk6CTkzNy42MDU5CitSb2NrIElzbGFuZCAJOgkxNwk6CTExNjguNTA0NAorU3QuIENsYWlyIAk6CTE3CToJMTc0NS41MzA1CitTYWxpbmUgCToJMTcJOgkxMDAyLjI3ODIKK1NhbmdhbW9uIAk6CTE3CToJMjI3MS40NTU5CitTY2h1eWxlciAJOgkxNwk6CTExNDMuMjAwMQorU2NvdHQgCToJMTcJOgk2NTQuNjc0MworU2hlbGJ5IAk6CTE3CToJMTk4OS4yNDk1CitTdGFyayAJOgkxNwk6CTc0Ni40NjM5CitTdGVwaGVuc29uIAk6CTE3CToJMTQ2Mi42MjQ4CitUYXpld2VsbCAJOgkxNwk6CTE3MDMuOTM1MQorVW5pb24gCToJMTcJOgkxMDkzLjMxNjcKK1Zlcm1pbGlvbiAJOgkxNwk6CTIzMzYuNTQyNgorV2FiYXNoIAk6CTE3CToJNTg5Ljg5ODQKK1dhcnJlbiAJOgkxNwk6CTE0MDYuODEwMworV2FzaGluZ3RvbiAJOgkxNwk6CTE0NjEuMDcwOAorV2F5bmUgCToJMTcJOgkxODUzLjMwMDQKK1doaXRlIAk6CTE3CToJMTI5OS40MDMKK1doaXRlc2lkZSAJOgkxNwk6CTE4MDUuMjU1OQorV2lsbCAJOgkxNwk6CTIxOTkuOTIwMQorV2lsbGlhbXNvbiAJOgkxNwk6CTExNTAuOTQ0MgorV2lubmViYWdvIAk6CTE3CToJMTM0NC45MDkzCitXb29kZm9yZCAJOgkxNwk6CTE0MDUuNjk2NgorQWRhbXMgCToJMTgJOgk4ODAuNDE4NworQWxsZW4gCToJMTgJOgkxNzA5LjY1OQorQmFydGhvbG9tZXcgCToJMTgJOgkxMDYwLjI0MjQKK0JlbnRvbiAJOgkxOAk6CTEwNTIuNTc2CitCbGFja2ZvcmQgCToJMTgJOgk0MjguMzg2CitCb29uZSAJOgkxOAk6CTEwOTYuMjk1MgorQnJvd24gCToJMTgJOgk4MjAuMDQ1OAorQ2Fycm9sbCAJOgkxOAk6CTk3MS4zNzk1CitDYXNzIAk6CTE4CToJMTA3NC42NDI4CitDbGFyayAJOgkxOAk6CTk3NC4zNTgKK0NsYXkgCToJMTgJOgk5MzMuNDEwMQorQ2xpbnRvbiAJOgkxOAk6CTEwNDkuNjc1MgorQ3Jhd2ZvcmQgCToJMTgJOgk3OTkuOTIxNQorRGF2aWVzcyAJOgkxOAk6CTExMzEuNDY3NAorRGVhcmJvcm4gCToJMTgJOgk3OTUuMjU5NQorRGVjYXR1ciAJOgkxOAk6CTk2Ny4xNTc4CitEZUthbGIgCToJMTgJOgk5NDIuMzQ1NgorRGVsYXdhcmUgCToJMTgJOgkxMDI1LjQzMjgKK0R1Ym9pcyAJOgkxOAk6CTExMjcuMjQ1NworRWxraGFydCAJOgkxOAk6CTEyMTEuNzMxNQorRmF5ZXR0ZSAJOgkxOAk6CTU1Ny4xNjA4CitGbG95ZCAJOgkxOAk6CTM4NC4xMjI5CitGb3VudGFpbiAJOgkxOAk6CTEwMzAuNjEyOAorRnJhbmtsaW4gCToJMTgJOgkxMDEzLjU3MDYKK0Z1bHRvbiAJOgkxOAk6CTk2MS44NDgzCitHaWJzb24gCToJMTgJOgkxMjkyLjUzOTUKK0dyYW50IAk6CTE4CToJMTA3NC40MDk3CitHcmVlbmUgCToJMTgJOgkxNDEzLjkwNjkKK0hhbWlsdG9uIAk6CTE4CToJMTA0My4wNzA3CitIYW5jb2NrIAk6CTE4CToJNzk0LjQzMDcKK0hhcnJpc29uIAk6CTE4CToJMTI2MS4wMTkyCitIZW5kcmlja3MgCToJMTgJOgkxMDU4Ljk5OTIKK0hlbnJ5IAk6CTE4CToJMTAyMi43OTEKK0hvd2FyZCAJOgkxOAk6CTc2MS4yNzg3CitIdW50aW5ndG9uIAk6CTE4CToJMTAwNC43NjQ2CitKYWNrc29uIAk6CTE4CToJMTMzMC42MTI1CitKYXNwZXIgCToJMTgJOgkxNDUzLjU1OTgKK0pheSAJOgkxOAk6CTk5NC4wOTM4CitKZWZmZXJzb24gCToJMTgJOgk5NDAuMDE0NgorSmVubmluZ3MgCToJMTgJOgk5NzkuOTI2NQorSm9obnNvbiAJOgkxOAk6CTgzMi44NDA0CitLbm94IAk6CTE4CToJMTM1Ny4zMTU0CitLb3NjaXVza28gCToJMTgJOgkxNDM1Ljc0MDYKK0xhZ3JhbmdlIAk6CTE4CToJMTAwMS42MDQ4CitMYWtlIAk6CTE4CToJMTYyMi4yMjA2CitMYVBvcnRlIAk6CTE4CToJMTU4Ny43NzM2CitMYXdyZW5jZSAJOgkxOAk6CTExNzAuODYxMworTWFkaXNvbiAJOgkxOAk6CTExNzMuMDM2OQorTWFyaW9uIAk6CTE4CToJMTA0My44NzM2CitNYXJzaGFsbCAJOgkxOAk6CTExNjUuMjkyOAorTWFydGluIAk6CTE4CToJODgxLjk3MjcKK01pYW1pIAk6CTE4CToJOTc3LjM2MjQKK01vbnJvZSAJOgkxOAk6CTEwNjUuMzE4OAorTW9udGdvbWVyeSAJOgkxOAk6CTEzMDguODMwNgorTW9yZ2FuIAk6CTE4CToJMTA2MC4zMjAxCitOZXd0b24gCToJMTgJOgkxMDQ1LjE0MjcKK05vYmxlIAk6CTE4CToJMTA4MS42MDk5CitPaGlvIAk6CTE4CToJMjI2LjU0NzMKK09yYW5nZSAJOgkxOAk6CTEwNTcuMjM4CitPd2VuIAk6CTE4CToJMTAwNC40Nzk3CitQYXJrZSAJOgkxOAk6CTExNjUuNzU5CitQZXJyeSAJOgkxOAk6CTEwMDAuNjIwNgorUGlrZSAJOgkxOAk6CTg4My4zOTcyCitQb3J0ZXIgCToJMTgJOgkxMzUwLjk2OTkKK1Bvc2V5IAk6CTE4CToJMTA4Ni4zNzU1CitQdWxhc2tpIAk6CTE4CToJMTEyNS41MzYzCitQdXRuYW0gCToJMTgJOgkxMjQ5Ljg4MjIKK1JhbmRvbHBoIAk6CTE4CToJMTE3My44NjU3CitSaXBsZXkgCToJMTgJOgkxMTYwLjA4NjkKK1J1c2ggCToJMTgJOgkxMDU4LjMyNTgKK1N0LiBKb3NlcGggCToJMTgJOgkxMTkzLjkxMjMKK1Njb3R0IAk6CTE4CToJNDk5LjE3MDcKK1NoZWxieSAJOgkxOAk6CTEwNjkuOTU0OQorU3BlbmNlciAJOgkxOAk6CTEwMzkuMTg1NworU3RhcmtlIAk6CTE4CToJODA4Ljg4MjkKK1N0ZXViZW4gCToJMTgJOgk4MzUuMjIzMgorU3VsbGl2YW4gCToJMTgJOgkxMTc1Ljk2MzYKK1N3aXR6ZXJsYW5kIAk6CTE4CToJNTc4LjkxNjgKK1RpcHBlY2Fub2UgCToJMTgJOgkxMzAyLjk1MTMKK1RpcHRvbiAJOgkxOAk6CTY3NC40NjE5CitVbmlvbiAJOgkxOAk6CTQyNy45OTc1CitWYW5kZXJidXJnaCAJOgkxOAk6CTYxMC41NjY2CitWZXJtaWxsaW9uIAk6CTE4CToJNjczLjI0NDYKK1ZpZ28gCToJMTgJOgkxMDYzLjExNzMKK1dhYmFzaCAJOgkxOAk6CTEwOTAuNTcxMworV2FycmVuIAk6CTE4CToJOTQ5LjQ5NAorV2FycmljayAJOgkxOAk6CTEwMTIuMzI3NAorV2FzaGluZ3RvbiAJOgkxOAk6CTEzMzcuODEyNworV2F5bmUgCToJMTgJOgkxMDQ3LjI0MDYKK1dlbGxzIAk6CTE4CToJOTU5LjM2MTkKK1doaXRlIAk6CTE4CToJMTMxNy43OTIKK1doaXRsZXkgCToJMTgJOgk4NzUuMTYxCitBZGFpciAJOgkxOQk6CTE0NzcuMTAyOQorQWRhbXMgCToJMTkJOgkxMTAxLjgxMTkKK0FsbGFtYWtlZSAJOgkxOQk6CTE3MDYuMDU4OQorQXBwYW5vb3NlIAk6CTE5CToJMTMzNy4zNDY1CitBdWR1Ym9uIAk6CTE5CToJMTE0OC44NzIyCitCZW50b24gCToJMTkJOgkxODYwLjc4NTUKK0JsYWNrIEhhd2sgCToJMTkJOgkxNDgxLjI0NjkKK0Jvb25lIAk6CTE5CToJMTQ4NS4zOTA5CitCcmVtZXIgCToJMTkJOgkxMTM4LjU2NAorQnVjaGFuYW4gCToJMTkJOgkxNDg0Ljk3NjUKK0J1ZW5hIFZpc3RhIAk6CTE5CToJMTUwMi4zODEzCitCdXRsZXIgCToJMTkJOgkxNTA2LjI0MDQKK0NhbGhvdW4gCToJMTkJOgkxNDgyLjIzMTEKK0NhcnJvbGwgCToJMTkJOgkxNDc2LjkyMTYKK0Nhc3MgCToJMTkJOgkxNDYzLjM3NTkKK0NlZGFyIAk6CTE5CToJMTUwNy4yNzY0CitDZXJybyBHb3JkbyAJOgkxOQk6CTE0ODkuNTYwOAorQ2hlcm9rZWUgCToJMTkJOgkxNDk1LjMxMDYKK0NoaWNrYXNhdyAJOgkxOQk6CTEzMDkuMTkzMgorQ2xhcmtlIAk6CTE5CToJMTExOC4xNTQ4CitDbGF5IAk6CTE5CToJMTQ4Mi44MDA5CitDbGF5dG9uIAk6CTE5CToJMjA1My4zNzc5CitDbGludG9uIAk6CTE5CToJMTgzOS4zOTIxCitDcmF3Zm9yZCAJOgkxOQk6CTE4NTEuODI0MQorRGFsbGFzIAk6CTE5CToJMTUzMi41ODA3CitEYXZpcyAJOgkxOQk6CTEzMDcuNjY1MQorRGVjYXR1ciAJOgkxOQk6CTEzODEuMjk4OAorRGVsYXdhcmUgCToJMTkJOgkxNDk5LjczOTUKK0RlcyBNb2luZXMgCToJMTkJOgkxMTEzLjE4MgorRGlja2luc29uIAk6CTE5CToJMTA0NS41NTcxCitEdWJ1cXVlIAk6CTE5CToJMTU5Ni44OTA0CitFbW1ldCAJOgkxOQk6CTEwNDIuMTY0MgorRmF5ZXR0ZSAJOgkxOQk6CTE4OTQuNDU1NQorRmxveWQgCToJMTkJOgkxMjk4LjM5MjkKK0ZyYW5rbGluIAk6CTE5CToJMTUwOS45OTU5CitGcmVtb250IAk6CTE5CToJMTMzOC40MDg0CitHcmVlbmUgCToJMTkJOgkxNDc5LjIyNjcKK0dydW5keSAJOgkxOQk6CTEzMDEuNjA0NQorR3V0aHJpZSAJOgkxOQk6CTE1MzYuMDI1NAorSGFtaWx0b24gCToJMTkJOgkxNDk1LjU2OTYKK0hhbmNvY2sgCToJMTkJOgkxNDg0LjQzMjYKK0hhcmRpbiAJOgkxOQk6CTE0NzYuMTE4NworSGFycmlzb24gCToJMTkJOgkxODE1LjQwODcKK0hlbnJ5IAk6CTE5CToJMTEzMS4wMDEyCitIb3dhcmQgCToJMTkJOgkxMjI3LjAzODQKK0h1bWJvbGR0IAk6CTE5CToJMTEyOC41NDA3CitJZGEgCToJMTkJOgkxMTE5LjQ3NTcKK0lvd2EgCToJMTkJOgkxNTIxLjIzNjUKK0phY2tzb24gCToJMTkJOgkxNjgyLjg1MjUKK0phc3BlciAJOgkxOQk6CTE4OTguMjg4NworSmVmZmVyc29uIAk6CTE5CToJMTEzMS4xMDQ4CitKb2huc29uIAk6CTE5CToJMTYxNC40NzY1CitKb25lcyAJOgkxOQk6CTE0OTMuNjUzCitLZW9rdWsgCToJMTkJOgkxNTAyLjA0NDYKK0tvc3N1dGggCToJMTkJOgkyNTIzLjY3MDEKK0xlZSAJOgkxOQk6CTEzOTUuNDE0MworTGlubiAJOgkxOQk6CTE4NzYuNTg0NQorTG91aXNhIAk6CTE5CToJMTA4MS42ODc2CitMdWNhcyAJOgkxOQk6CTExMjQuNTAwMworTHlvbiAJOgkxOQk6CTE1MjEuOTYxNworTWFkaXNvbiAJOgkxOQk6CTE0NTYuMzU3CitNYWhhc2thIAk6CTE5CToJMTQ4NS4xMDYKK01hcmlvbiAJOgkxOQk6CTE0NzcuNjcyNworTWFyc2hhbGwgCToJMTkJOgkxNDg0LjEyMTgKK01pbGxzIAk6CTE5CToJMTEzOC43NDUzCitNaXRjaGVsbCAJOgkxOQk6CTEyMTUuNzQ2CitNb25vbmEgCToJMTkJOgkxODEwLjAyMTUKK01vbnJvZSAJOgkxOQk6CTExMjQuMzQ0OQorTW9udGdvbWVyeSAJOgkxOQk6CTExMDAuMjU3OQorTXVzY2F0aW5lIAk6CTE5CToJMTE2My4wOTEzCitPJ0JyaWVuIAk6CTE5CToJMTQ4NC43MTc1CitPc2Nlb2xhIAk6CTE5CToJMTAzNC42NTMyCitQYWdlIAk6CTE5CToJMTM4Ni41NTY1CitQYWxvIEFsdG8gCToJMTkJOgkxNDc0Ljc0NgorUGx5bW91dGggCToJMTkJOgkyMjM3LjY1NjQKK1BvY2Fob250YXMgCToJMTkJOgkxNDk5Ljk0NjcKK1BvbGsgCToJMTkJOgkxNTMzLjAyMQorUG90dGF3YXR0YW1pZSAJOgkxOQk6CTI0ODYuMjQ0NgorUG93ZXNoaWVrIAk6CTE5CToJMTUxOC4xODAzCitSaW5nZ29sZCAJOgkxOQk6CTEzOTUuODAyOAorU2FjIAk6CTE5CToJMTQ5OC4wMDQyCitTY290dCAJOgkxOQk6CTEyMTIuNTYwMworU2hlbGJ5IAk6CTE5CToJMTUzMS42NDgzCitTaW91eCAJOgkxOQk6CTE5OTAuNjIyMgorU3RvcnkgCToJMTkJOgkxNDg1Ljg4MworVGFtYSAJOgkxOQk6CTE4NzAuOTM4MworVGF5bG9yIAk6CTE5CToJMTM4NS4yMDk3CitVbmlvbiAJOgkxOQk6CTExMDMuMjEwNQorVmFuIEJ1cmVuIAk6CTE5CToJMTI3MC41MjQ1CitXYXBlbGxvIAk6CTE5CToJMTEyOS4xODgyCitXYXJyZW4gCToJMTkJOgkxNDg0LjYxMzkKK1dhc2hpbmd0b24gCToJMTkJOgkxNDc4LjI5NDMKK1dheW5lIAk6CTE5CToJMTM2NS4xMzcyCitXZWJzdGVyIAk6CTE5CToJMTg1OS43NDk1CitXaW5uZWJhZ28gCToJMTkJOgkxMDQwLjA2NjMKK1dpbm5lc2hpZWsgCToJMTkJOgkxNzg2Ljc4OTIKK1dvb2RidXJ5IAk6CTE5CToJMjI3Mi40NDAxCitXb3J0aCAJOgkxOQk6CTEwNDAuNDI4OQorV3JpZ2h0IAk6CTE5CToJMTUwOC43Nzg2CitBbGxlbiAJOgkyMAk6CTEzMDguNDE2MgorQW5kZXJzb24gCToJMjAJOgkxNTEzLjMxMTEKK0F0Y2hpc29uIAk6CTIwCToJMTEyNi43NTM2CitCYXJiZXIgCToJMjAJOgkyOTQyLjc4MzkKK0JhcnRvbiAJOgkyMAk6CTIzMzIuMTkxNAorQm91cmJvbiAJOgkyMAk6CTE2NTQuNTQzOAorQnJvd24gCToJMjAJOgkxNDgxLjk5OAorQnV0bGVyIAk6CTIwCToJMzc0Ni4yMjc4CitDaGFzZSAJOgkyMAk6CTIwMTUuMDQ1OQorQ2hhdXRhdXF1YSAJOgkyMAk6CTE2NzAuMTA5NworQ2hlcm9rZWUgCToJMjAJOgkxNTMwLjU4NjQKK0NoZXllbm5lIAk6CTIwCToJMjY0My45NzU2CitDbGFyayAJOgkyMAk6CTI1MzAuOTQ4CitDbGF5IAk6CTIwCToJMTY5Ny41ODk2CitDbG91ZCAJOgkyMAk6CTE4NjAuODM3MworQ29mZmV5IAk6CTIwCToJMTY5NS4zMzYzCitDb21hbmNoZSAJOgkyMAk6CTIwNDUuMzIzCitDb3dsZXkgCToJMjAJOgkyOTMzLjQzNAorQ3Jhd2ZvcmQgCToJMjAJOgkxNTQxLjE3OTUKK0RlY2F0dXIgCToJMjAJOgkyMzE1LjkyNjIKK0RpY2tpbnNvbiAJOgkyMAk6CTIyMDYuOTkwOAorRG9uaXBoYW4gCToJMjAJOgkxMDI4LjQxMTMKK0RvdWdsYXMgCToJMjAJOgkxMjI4Ljg3NzMKK0Vkd2FyZHMgCToJMjAJOgkxNjExLjIzOQorRWxrIAk6CTIwCToJMTY4NC40MzI0CitFbGxpcyAJOgkyMAk6CTIzMzIuMjE3MworRWxsc3dvcnRoIAk6CTIwCToJMTg3My43MDk2CitGaW5uZXkgCToJMjAJOgkzMzczLjc4NTgKK0ZvcmQgCToJMjAJOgkyODQ3LjE2MTEKK0ZyYW5rbGluIAk6CTIwCToJMTQ5My41MjM1CitHZWFyeSAJOgkyMAk6CTEwNDcuMzcwMQorR292ZSAJOgkyMAk6CTI3NzUuMTA3MworR3JhaGFtIAk6CTIwCToJMjMyNy41NTUzCitHcmFudCAJOgkyMAk6CTE0ODkuMzUzNgorR3JheSAJOgkyMAk6CTIyNTEuNTkwNgorR3JlZWxleSAJOgkyMAk6CTIwMTUuMDQ1OQorR3JlZW53b29kIAk6CTIwCToJMjk4NS4yMDgxCitIYW1pbHRvbiAJOgkyMAk6CTI1ODMuODM1OAorSGFycGVyIAk6CTIwCToJMjA3OS42NDA1CitIYXJ2ZXkgCToJMjAJOgkxMzk5Ljg5NQorSGFza2VsbCAJOgkyMAk6CTE0OTYuMzIwNworSG9kZ2VtYW4gCToJMjAJOgkyMjI4LjAyMTYKK0phY2tzb24gCToJMjAJOgkxNzAzLjg1NzQKK0plZmZlcnNvbiAJOgkyMAk6CTE0NDIuNDc0NgorSmV3ZWxsIAk6CTIwCToJMjM2OC40NzczCitKb2huc29uIAk6CTIwCToJMTI0My41ODg1CitLZWFybnkgCToJMjAJOgkyMjU3LjE4NQorS2luZ21hbiAJOgkyMAk6CTIyNDQuNzUzCitLaW93YSAJOgkyMAk6CTE4NzEuNTg1OAorTGFiZXR0ZSAJOgkyMAk6CTE2OTIuMDQ3CitMYW5lIAk6CTIwCToJMTg1OC4xNDM3CitMZWF2ZW53b3J0aCAJOgkyMAk6CTEyMTIuOTc0NworTGluY29sbiAJOgkyMAk6CTE4NjQuNjQ0NgorTGlubiAJOgkyMAk6CTE1NzAuMjkxMQorTG9nYW4gCToJMjAJOgkyNzc5LjMwMzEKK0x5b24gCToJMjAJOgkyMjE0LjgxMjYKK01jUGhlcnNvbiAJOgkyMAk6CTIzMzQuMjExNgorTWFyaW9uIAk6CTIwCToJMjQ2OS42Njg2CitNYXJzaGFsbCAJOgkyMAk6CTIzNDIuMjkyNAorTWVhZGUgCToJMjAJOgkyNTM3LjMxOTQKK01pYW1pIAk6CTIwCToJMTUyOC40ODg1CitNaXRjaGVsbCAJOgkyMAk6CTE4NjEuMjI1OAorTW9udGdvbWVyeSAJOgkyMAk6CTE2ODcuMTI2CitNb3JyaXMgCToJMjAJOgkxODIwLjM1NTYKK01vcnRvbiAJOgkyMAk6CTE4OTAuNTQ0NgorTmVtYWhhIAk6CTIwCToJMTg2My4yNDYKK05lb3NobyAJOgkyMAk6CTE0OTcuMDcxOAorTmVzcyAJOgkyMAk6CTI3ODQuMjUKK05vcnRvbiAJOgkyMAk6CTIyODIuODAwMQorT3NhZ2UgCToJMjAJOgkxODYyLjgwNTcKK09zYm9ybmUgCToJMjAJOgkyMzE2LjE4NTIKK090dGF3YSAJOgkyMAk6CTE4NjkuNzIxCitQYXduZWUgCToJMjAJOgkxOTU0LjMxMDQKK1BoaWxsaXBzIAk6CTIwCToJMjMxNy41NTc5CitQb3R0YXdhdG9taWUgCToJMjAJOgkyMjMyLjc2MTMKK1ByYXR0IAk6CTIwCToJMTkwNS42MTg0CitSYXdsaW5zIAk6CTIwCToJMjc3MC41NzQ4CitSZW5vIAk6CTIwCToJMzI5Mi41Mzc1CitSZXB1YmxpYyAJOgkyMAk6CTE4NjUuNjAyOQorUmljZSAJOgkyMAk6CTE4ODYuMjk3CitSaWxleSAJOgkyMAk6CTE2MTEuMjY0OQorUm9va3MgCToJMjAJOgkyMzE4Ljk4MjQKK1J1c2ggCToJMjAJOgkxODYwLjcwNzgKK1J1c3NlbGwgCToJMjAJOgkyMzI4LjM1ODIKK1NhbGluZSAJOgkyMAk6CTE4NjguMTE1MgorU2NvdHQgCToJMjAJOgkxODU4LjY4NzYKK1NlZGd3aWNrIAk6CTIwCToJMjYxNC4zNzE5CitTZXdhcmQgCToJMjAJOgkxNjU4LjkyMDkKK1NoYXduZWUgCToJMjAJOgkxNDQwLjg2ODgKK1NoZXJpZGFuIAk6CTIwCToJMjMyMi4yMTk5CitTaGVybWFuIAk6CTIwCToJMjczNS4wNjU5CitTbWl0aCAJOgkyMAk6CTIzMjIuMDEyNworU3RhZmZvcmQgCToJMjAJOgkyMDU4LjMyNDgKK1N0YW50b24gCToJMjAJOgkxNzYxLjM1NTQKK1N0ZXZlbnMgCToJMjAJOgkxODg0Ljc2ODkKK1N1bW5lciAJOgkyMAk6CTMwNjguNTgwMgorVGhvbWFzIAk6CTIwCToJMjc4My45OTEKK1RyZWdvIAk6CTIwCToJMjMyOC40NjE4CitXYWJhdW5zZWUgCToJMjAJOgkyMDcxLjQ4MgorV2FsbGFjZSAJOgkyMAk6CTIzNjcuMzg5NQorV2FzaGluZ3RvbiAJOgkyMAk6CTIzMjcuOTk1NgorV2ljaGl0YSAJOgkyMAk6CTE4NjEuMDE4NgorV2lsc29uIAk6CTIwCToJMTQ4OS4xNzIzCitXb29kc29uIAk6CTIwCToJMTMwOS4xMTU1CitXeWFuZG90dGUgCToJMjAJOgk0MDMuMjM3MQorQWRhaXIgCToJMjEJOgkxMDY3LjY3NTcKK0FsbGVuIAk6CTIxCToJOTExLjc4MzYKK0FuZGVyc29uIAk6CTIxCToJNTI5LjA4NTIKK0JhbGxhcmQgCToJMjEJOgk3MDguNjI0CitCYXJyZW4gCToJMjEJOgkxMjk0LjgxODcKK0JhdGggCToJMjEJOgk3MzUuNDA0NgorQmVsbCAJOgkyMQk6CTkzNS44OTY1CitCb29uZSAJOgkyMQk6CTY2NS41MjY0CitCb3VyYm9uIAk6CTIxCToJNzU1LjM5OTQKK0JveWQgCToJMjEJOgk0MTkuMTEzOAorQm95bGUgCToJMjEJOgk0NzMuOTQ0MQorQnJhY2tlbiAJOgkyMQk6CTU0MS4wMjUxCitCcmVhdGhpdHQgCToJMjEJOgkxMjgyLjgwMTEKK0JyZWNraW5yaWRnZSAJOgkyMQk6CTE1MTYuNTIyNworQnVsbGl0dCAJOgkyMQk6CTc3Ny41MTgKK0J1dGxlciAJOgkyMQk6CTExMTcuNjM2OAorQ2FsZHdlbGwgCToJMjEJOgk5MDEuNzg2MgorQ2FsbG93YXkgCToJMjEJOgkxMDYzLjk0NjEKK0NhbXBiZWxsIAk6CTIxCToJNDEyLjkyMzcKK0Nhcmxpc2xlIAk6CTIxCToJNTE1LjQ2MTgKK0NhcnJvbGwgCToJMjEJOgkzNTUuNTI5MworQ2FydGVyIAk6CTIxCToJMTA2Ny40Njg1CitDYXNleSAJOgkyMQk6CTExNTQuNDQwNworQ2hyaXN0aWFuIAk6CTIxCToJMTg3NS4xODU5CitDbGFyayAJOgkyMQk6CTY2MC44NjQ0CitDbGF5IAk6CTIxCToJMTIyMC4wOTcyCitDbGludG9uIAk6CTIxCToJNTMyLjM0ODYKK0NyaXR0ZW5kZW4gCToJMjEJOgk5NjAuNzYwNQorQ3VtYmVybGFuZCAJOgkyMQk6CTgwNS4xMDE1CitEYXZpZXNzIAk6CTIxCToJMTIzMy41MzkzCitFZG1vbnNvbiAJOgkyMQk6CTc5Ny43NDU5CitFbGxpb3R0IAk6CTIxCToJNjA5LjE2OAorRXN0aWxsIAk6CTIxCToJNjYyLjI2MworRmF5ZXR0ZSAJOgkyMQk6CTczOS40OTY4CitGbGVtaW5nIAk6CTIxCToJOTEwLjMwNzMKK0Zsb3lkIAk6CTIxCToJMTAyNC4yNDE0CitGcmFua2xpbiAJOgkyMQk6CTU0OS4zNjQ5CitGdWx0b24gCToJMjEJOgk1OTcuMTI0NQorR2FsbGF0aW4gCToJMjEJOgkyNzEuMDk1MworR2FycmFyZCAJOgkyMQk6CTYwNS43NDkyCitHcmFudCAJOgkyMQk6CTY3NS40NDYxCitHcmF2ZXMgCToJMjEJOgkxNDQxLjIzMTQKK0dyYXlzb24gCToJMjEJOgkxMzIzLjEwMTUKK0dyZWVuIAk6CTIxCToJNzQ3Ljk0MDIKK0dyZWVudXAgCToJMjEJOgk5MTguMTgwOQorSGFuY29jayAJOgkyMQk6CTUxNS4yMDI4CitIYXJkaW4gCToJMjEJOgkxNjMxLjMzNzQKK0hhcmxhbiAJOgkyMQk6CTEyMTIuMDQyMworSGFycmlzb24gCToJMjEJOgk4MDIuNTg5MgorSGFydCAJOgkyMQk6CTEwODIuMzg2OQorSGVuZGVyc29uIAk6CTIxCToJMTIxMC4xNTE2CitIZW5yeSAJOgkyMQk6CTc1My45NzQ5CitIaWNrbWFuIAk6CTIxCToJNjU1LjExNDYKK0hvcGtpbnMgCToJMjEJOgkxNDM1LjQ1NTcKK0phY2tzb24gCToJMjEJOgk4OTcuNjE2MworSmVmZmVyc29uIAk6CTIxCToJMTAzMi4zMjIyCitKZXNzYW1pbmUgCToJMjEJOgk0NTEuODI1NQorSm9obnNvbiAJOgkyMQk6CTY4My42MDQ2CitLZW50b24gCToJMjEJOgk0MjUuNzQ0MgorS25vdHQgCToJMjEJOgk5MTQuMjk1OQorS25veCAJOgkyMQk6CTEwMDQuMTY4OQorTGFydWUgCToJMjEJOgk2ODMuMDM0OAorTGF1cmVsIAk6CTIxCToJMTE0OS4yODY2CitMYXdyZW5jZSAJOgkyMQk6CTEwODguMTEwOAorTGVlIAk6CTIxCToJNTQ3LjA1OTgKK0xlc2xpZSAJOgkyMQk6CTEwNDcuMjkyNAorTGV0Y2hlciAJOgkyMQk6CTg3OC4zMjA4CitMZXdpcyAJOgkyMQk6CTEyODMuODYzCitMaW5jb2xuIAk6CTIxCToJODcxLjQ1NzMKK0xpdmluZ3N0b24gCToJMjEJOgk4ODYuMjk4CitMb2dhbiAJOgkyMQk6CTE0NDIuODg5CitMeW9uIAk6CTIxCToJNjY0LjEyNzgKK01jQ3JhY2tlbiAJOgkyMQk6CTY5NC4zMjcyCitNY0NyZWFyeSAJOgkyMQk6CTExMTUuMzU3NgorTWNMZWFuIAk6CTIxCToJNjYzLjQ4MDMKK01hZGlzb24gCToJMjEJOgkxMTQ3LjY1NDkKK01hZ29mZmluIAk6CTIxCToJODAxLjQ0OTYKK01hcmlvbiAJOgkyMQk6CTg5OC4zNjc0CitNYXJzaGFsbCAJOgkyMQk6CTg4MS40Mjg4CitNYXJ0aW4gCToJMjEJOgk1OTcuNzk3OQorTWFzb24gCToJMjEJOgk2MzguNjk0CitNZWFkZSAJOgkyMQk6CTgzOS43Mjk4CitNZW5pZmVlIAk6CTIxCToJNTMzLjYxNzcKK01lcmNlciAJOgkyMQk6CTY1NS41NTQ5CitNZXRjYWxmZSAJOgkyMQk6CTc1My41ODY0CitNb25yb2UgCToJMjEJOgk4NjAuMTY0OQorTW9udGdvbWVyeSAJOgkyMQk6CTUxNC44OTIKK01vcmdhbiAJOgkyMQk6CTk5My44NjA3CitNdWhsZW5iZXJnIAk6CTIxCToJMTI0MS43MjM3CitOZWxzb24gCToJMjEJOgkxMDk4LjM0MTMKK05pY2hvbGFzIAk6CTIxCToJNTA5Ljg0MTUKK09oaW8gCToJMjEJOgkxNTQ1LjUzMDcKK09sZGhhbSAJOgkyMQk6CTUwOS4wMzg2CitPd2VuIAk6CTIxCToJOTE3LjI3NDQKK093c2xleSAJOgkyMQk6CTUxMy4wNTMxCitQZW5kbGV0b24gCToJMjEJOgk3MzAuMDQzMworUGVycnkgCToJMjEJOgk4ODcuNDM3NgorUGlrZSAJOgkyMQk6CTIwNDMuMDk1NgorUG93ZWxsIAk6CTIxCToJNDY2LjcxOAorUHVsYXNraSAJOgkyMQk6CTE3NTMuNTU5NQorUm9iZXJ0c29uIAk6CTIxCToJMjU5LjI4NDkKK1JvY2tjYXN0bGUgCToJMjEJOgk4MjMuNzc1NAorUm93YW4gCToJMjEJOgk3NDEuMzg3NQorUnVzc2VsbCAJOgkyMQk6CTczMi41MDM4CitTY290dCAJOgkyMQk6CTczOC45MjcKK1NoZWxieSAJOgkyMQk6CTk5OC44MzM1CitTaW1wc29uIAk6CTIxCToJNjExLjczMjEKK1NwZW5jZXIgCToJMjEJOgk0OTYuNzYyCitUYXlsb3IgCToJMjEJOgk3MTcuNTU5NQorVG9kZCAJOgkyMQk6CTk3Ni4zNTIzCitUcmlnZyAJOgkyMQk6CTEyNDYuMTI2NworVHJpbWJsZSAJOgkyMQk6CTQwNC42MzU3CitVbmlvbiAJOgkyMQk6CTk0MS4yODM3CitXYXJyZW4gCToJMjEJOgkxNDE4LjUxNzEKK1dhc2hpbmd0b24gCToJMjEJOgk3ODAuOTM2OAorV2F5bmUgCToJMjEJOgkxMjU0LjA3OAorV2Vic3RlciAJOgkyMQk6CTg2OS40MTEyCitXaGl0bGV5IAk6CTIxCToJMTE1Mi45Mzg1CitXb2xmZSAJOgkyMQk6CTU3Ny4yMDc0CitXb29kZm9yZCAJOgkyMQk6CTQ5Ny4yMjgyCitBY2FkaWEgCToJMjIJOgkxNzAzLjIzNTgKK0FsbGVuIAk6CTIyCToJMTk4My4wODUzCitBc2NlbnNpb24gCToJMjIJOgk3ODQuNDU5MgorQXNzdW1wdGlvbiAJOgkyMgk6CTk0NC4xODQ1CitBdm95ZWxsZXMgCToJMjIJOgkyMjQyLjA4NTMKK0JlYXVyZWdhcmQgCToJMjIJOgkzMDE5LjkxNDEKK0JpZW52aWxsZSAJOgkyMgk6CTIxMjguMzg0MworQm9zc2llciAJOgkyMgk6CTIyNDUuMzQ4NworQ2FkZG8gCToJMjIJOgkyNDI2LjU3MQorQ2FsY2FzaWV1IAk6CTIyCToJMjgzNC4zNDA2CitDYWxkd2VsbCAJOgkyMgk6CTE0MDAuNDY0OAorQ2FtZXJvbiAJOgkyMgk6CTUwMDIuODQ0CitDYXRhaG91bGEgCToJMjIJOgkxOTE1LjEyMzcKK0NsYWlib3JuZSAJOgkyMgk6CTE5ODcuOTU0NQorQ29uY29yZGlhIAk6CTIyCToJMTkzOS4wODEyCitEZSBTb3RvIAk6CTIyCToJMjMxNi43MjkxCitFYXN0IEJhdG9uIFJvdWdlIAk6CTIyCToJMTIxOC42OTg2CitFYXN0IENhcnJvbGwgCToJMjIJOgkxMTQ1Ljk0NTUKK0Vhc3QgRmVsaWNpYW5hIAk6CTIyCToJMTE4MC4yMzcxCitFdmFuZ2VsaW5lIAk6CTIyCToJMTc2MC4xODk5CitGcmFua2xpbiAJOgkyMgk6CTE2NDUuNzYzNworR3JhbnQgCToJMjIJOgkxNzIxLjIxMDQKK0liZXJpYSAJOgkyMgk6CTI2NjkuOTI3NAorSWJlcnZpbGxlIAk6CTIyCToJMTY5MC44NTU2CitKYWNrc29uIAk6CTIyCToJMTUwMy4wODA2CitKZWZmZXJzb24gCToJMjIJOgkxNjYzLjg0MTkKK0plZmZlcnNvbiBEYXZpcyAJOgkyMgk6CTE3MDUuNzIyMgorTGFmYXlldHRlIAk6CTIyCToJNzAwLjA1MTEKK0xhZm91cmNoZSAJOgkyMgk6CTM4MTIuOTcyMQorTGEgU2FsbGUgCToJMjIJOgkxNzE1LjUxMjQKK0xpbmNvbG4gCToJMjIJOgkxMjIzLjE3OTMKK0xpdmluZ3N0b24gCToJMjIJOgkxODIwLjM1NTYKK01hZGlzb24gCToJMjIJOgkxNjg0Ljg3MjcKK01vcmVob3VzZSAJOgkyMgk6CTIwODUuNDY4CitOYXRjaGl0b2NoZXMgCToJMjIJOgkzMzY1LjE4NworT3JsZWFucyAJOgkyMgk6CTkwNy4wNDM5CitPdWFjaGl0YSAJOgkyMgk6CTE2MzguNjkzCitQbGFxdWVtaW5lcyAJOgkyMgk6CTYyODkuOTE4NgorUG9pbnRlIENvdXBlZSAJOgkyMgk6CTE1MjkuODYxMgorUmFwaWRlcyAJOgkyMgk6CTM1MjcuNDc2NAorUmVkIFJpdmVyIAk6CTIyCToJMTA0MS4zODcyCitSaWNobGFuZCAJOgkyMgk6CTE0NjIuMDgwOQorU2FiaW5lIAk6CTIyCToJMjYxOS44MTA5CitTdC4gQmVybmFyZCAJOgkyMgk6CTQ2NDUuODEyNQorU3QuIENoYXJsZXMgCToJMjIJOgkxMDYyLjMxNDQKK1N0LiBIZWxlbmEgCToJMjIJOgkxMDYwLjUwMTQKK1N0LiBKYW1lcyAJOgkyMgk6CTY2Ny42NzYxCitTdC4gSm9obiB0aGUgQmFwdGlzdCAJOgkyMgk6CTkwMC45MDU2CitTdC4gTGFuZHJ5IAk6CTIyCToJMjQzMS41Njk3CitTdC4gTWFydGluIAk6CTIyCToJMjExNC42MzE0CitTdC4gTWFyeSAJOgkyMgk6CTI4OTcuNzY5NworU3QuIFRhbW1hbnkgCToJMjIJOgkyOTExLjM2NzIKK1RhbmdpcGFob2EgCToJMjIJOgkyMTMxLjg4MDgKK1RlbnNhcyAJOgkyMgk6CTE2NjAuNzA4CitUZXJyZWJvbm5lIAk6CTIyCToJNTM4Ni45NDEKK1VuaW9uIAk6CTIyCToJMjM0NC42NzUyCitWZXJtaWxpb24gCToJMjIJOgkzOTg0LjIyMjkKK1Zlcm5vbiAJOgkyMgk6CTM0NzQuNTEwOQorV2FzaGluZ3RvbiAJOgkyMgk6CTE3NTAuNzYyMworV2Vic3RlciAJOgkyMgk6CTE1OTMuMDMxMworV2VzdCBCYXRvbiBSb3VnZSAJOgkyMgk6CTUyNy4zNzU4CitXZXN0IENhcnJvbGwgCToJMjIJOgk5MzMuMjI4OAorV2VzdCBGZWxpY2lhbmEgCToJMjIJOgkxMTAzLjM2NTkKK1dpbm4gCToJMjIJOgkyNDc4LjM5NjkKK0FuZHJvc2NvZ2dpbiAJOgkyMwk6CTEyODcuODI1NworQXJvb3N0b29rIAk6CTIzCToJMTc2ODYuNTY2MQorQ3VtYmVybGFuZCAJOgkyMwk6CTMxNTEuNzQ1MQorRnJhbmtsaW4gCToJMjMJOgk0NTE3Ljc2MjkKK0hhbmNvY2sgCToJMjMJOgk2MDg5LjE2NzcKK0tlbm5lYmVjIAk6CTIzCToJMjQ2My41NTYyCitLbm94IAk6CTIzCToJMjk1OC4wMzkKK0xpbmNvbG4gCToJMjMJOgkxODEyLjUwNzkKK094Zm9yZCAJOgkyMwk6CTU2MzMuOTIzNAorUGVub2JzY290IAk6CTIzCToJOTIxMC40MDI2CitQaXNjYXRhcXVpcyAJOgkyMwk6CTExMzM3LjM2MjQKK1NhZ2FkYWhvYyAJOgkyMwk6CTk1OC43OTIxCitTb21lcnNldCAJOgkyMwk6CTEwNjA3LjAwODMKK1dhbGRvIAk6CTIzCToJMjIwOC41OTY2CitXYXNoaW5ndG9uIAk6CTIzCToJODQzMC4yMTY5CitZb3JrIAk6CTIzCToJMzI5Mi43NzA2CitBbGxlZ2FueSAJOgkyNAk6CTExMTMuMjMzOAorQW5uZSBBcnVuZGVsIAk6CTI0CToJMTUyMi42NjEKK0JhbHRpbW9yZSAJOgkyNAk6CTE3NjYuNDU3NworQ2FsdmVydCAJOgkyNAk6CTg5My43ODMxCitDYXJvbGluZSAJOgkyNAk6CTg0NC40OTU0CitDYXJyb2xsIAk6CTI0CToJMTE3MS43MTYKK0NlY2lsIAk6CTI0CToJMTA4Mi4zMDkyCitDaGFybGVzIAk6CTI0CToJMTY2NS45Mzk4CitEb3JjaGVzdGVyIAk6CTI0CToJMjU0NS43NjI4CitGcmVkZXJpY2sgCToJMjQJOgkxNzI4LjQxMDYKK0dhcnJldHQgCToJMjQJOgkxNjk4Ljc4MQorSGFyZm9yZCAJOgkyNAk6CTEzNjQuMjA0OAorSG93YXJkIAk6CTI0CToJNjU2LjY5NDUKK0tlbnQgCToJMjQJOgkxMDczLjA2MjkKK01vbnRnb21lcnkgCToJMjQJOgkxMzEzLjQ5MjYKK1ByaW5jZSBHZW9yZ2UncyAJOgkyNAk6CTEyOTAuOTg1NQorUXVlZW4gQW5uZSdzIAk6CTI0CToJMTMyMC4zNTYxCitTdC4gTWFyeSdzIAk6CTI0CToJMTk4MC4wNTUKK1NvbWVyc2V0IAk6CTI0CToJMTU4MS45MjAyCitUYWxib3QgCToJMjQJOgkxMjM0LjgzNDMKK1dhc2hpbmd0b24gCToJMjQJOgkxMjEwLjk1NDUKK1dpY29taWNvIAk6CTI0CToJMTAzNS40NTYxCitXb3JjZXN0ZXIgCToJMjQJOgkxNzk5LjM1MDcKK0JhbHRpbW9yZSBjaXR5CToJMjQJOgkyMzguNDg3MgorQmFybnN0YWJsZSAJOgkyNQk6CTMzODEuNTU1OAorQmVya3NoaXJlIAk6CTI1CToJMjQ1MC44MzkzCitCcmlzdG9sIAk6CTI1CToJMTc5MC4xODIxCitEdWtlcyAJOgkyNQk6CTEyNzEuNTYwNQorRXNzZXggCToJMjUJOgkyMTQ1Ljg5MjcKK0ZyYW5rbGluIAk6CTI1CToJMTg3Ny4wNzY2CitIYW1wZGVuIAk6CTI1CToJMTY0Mi4zNzA4CitIYW1wc2hpcmUgCToJMjUJOgkxNDEyLjY4OTYKK01pZGRsZXNleCAJOgkyNQk6CTIxOTUuMTI4NgorTmFudHVja2V0IAk6CTI1CToJNzg2LjQyNzYKK05vcmZvbGsgCToJMjUJOgkxMTQ5LjgwNDYKK1BseW1vdXRoIAk6CTI1CToJMjgzMS44ODAxCitTdWZmb2xrIAk6CTI1CToJMzExLjI5MjEKK1dvcmNlc3RlciAJOgkyNQk6CTQwODkuNjYxOAorQWxjb25hIAk6CTI2CToJNDYzNy40OTg2CitBbGdlciAJOgkyNgk6CTEzMDc3LjExNzIKK0FsbGVnYW4gCToJMjYJOgk0NzQ4LjI0NworQWxwZW5hIAk6CTI2CToJNDM5MC4wNQorQW50cmltIAk6CTI2CToJMTU1OC45MjEKK0FyZW5hYyAJOgkyNgk6CTE3NjMuMjk3OQorQmFyYWdhIAk6CTI2CToJMjc2OC4zMjE1CitCYXJyeSAJOgkyNgk6CTE0OTQuMTcxCitCYXkgCToJMjYJOgkxNjM0LjA1NjkKK0JlbnppZSAJOgkyNgk6CTIyMjYuNDY3NgorQmVycmllbiAJOgkyNgk6CTQwOTUuNzc0MgorQnJhbmNoIAk6CTI2CToJMTM0NS40NzkxCitDYWxob3VuIAk6CTI2CToJMTg2MC43NTk2CitDYXNzIAk6CTI2CToJMTMxNi45MTE0CitDaGFybGV2b2l4IAk6CTI2CToJMzYwMi4wNjg0CitDaGVib3lnYW4gCToJMjYJOgkyMjkyLjc0NTcKK0NoaXBwZXdhIAk6CTI2CToJNjk4Ny43NjgyCitDbGFyZSAJOgkyNgk6CTE0ODkuODE5OAorQ2xpbnRvbiAJOgkyNgk6CTE0ODguMTM2MworQ3Jhd2ZvcmQgCToJMjYJOgkxNDU5LjEyODMKK0RlbHRhIAk6CTI2CToJNTE1OC4xOTIyCitEaWNraW5zb24gCToJMjYJOgkyMDEyLjc0MDgKK0VhdG9uIAk6CTI2CToJMTQ5OS42NjE4CitFbW1ldCAJOgkyNgk6CTIyODUuMDUzNAorR2VuZXNlZSAJOgkyNgk6CTE2ODEuNzkwNgorR2xhZHdpbiAJOgkyNgk6CTEzMzcuNTUzNworR29nZWJpYyAJOgkyNgk6CTM4MjMuOTUzNworR3JhbmQgVHJhdmVyc2UgCToJMjYJOgkxNTU2LjkyNjcKK0dyYXRpb3QgCToJMjYJOgkxNDgwLjQ2OTkKK0hpbGxzZGFsZSAJOgkyNgk6CTE1NzIuNDkyNgorSG91Z2h0b24gCToJMjYJOgkzODg5LjA0MDQKK0h1cm9uIAk6CTI2CToJNTUzMy40NTczCitJbmdoYW0gCToJMjYJOgkxNDUyLjgzNDYKK0lvbmlhIAk6CTI2CToJMTUwMi43OTU3CitJb3NjbyAJOgkyNgk6CTQ4OTcuMDk0MworSXJvbiAJOgkyNgk6CTMxMzYuNTQxOAorSXNhYmVsbGEgCToJMjYJOgkxNDk2LjM3MjUKK0phY2tzb24gCToJMjYJOgkxODc0LjUzODQKK0thbGFtYXpvbyAJOgkyNgk6CTE1MDIuNjY2MgorS2Fsa2Fza2EgCToJMjYJOgkxNDc4LjI2ODQKK0tlbnQgCToJMjYJOgkyMjU4Ljk0NjIKK0tld2VlbmF3IAk6CTI2CToJMTU0NTEuODM2NAorTGFrZSAJOgkyNgk6CTE0ODguMjE0CitMYXBlZXIgCToJMjYJOgkxNzE3LjM3NzIKK0xlZWxhbmF1IAk6CTI2CToJNjU1OC44NjQyCitMZW5hd2VlIAk6CTI2CToJMTk3MS43OTI5CitMaXZpbmdzdG9uIAk6CTI2CToJMTUxNi4yNjM3CitMdWNlIAk6CTI2CToJNDk1MS43OTUxCitNYWNraW5hYyAJOgkyNgk6CTU0NDAuNDI0NQorTWFjb21iIAk6CTI2CToJMTQ3NS43MzAyCitNYW5pc3RlZSAJOgkyNgk6CTMzMTcuMTk0MworTWFycXVldHRlIAk6CTI2CToJODg3MS4xOTAzCitNYXNvbiAJOgkyNgk6CTMyMTYuNDE3NAorTWVjb3N0YSAJOgkyNgk6CTE0NzkuMTQ5CitNZW5vbWluZWUgCToJMjYJOgkzNDY1LjM5NDEKK01pZGxhbmQgCToJMjYJOgkxMzY3LjIzNTEKK01pc3NhdWtlZSAJOgkyNgk6CTE0ODYuMTkzOAorTW9ucm9lIAk6CTI2CToJMTc2MS4yNzc3CitNb250Y2FsbSAJOgkyNgk6CTE4NjcuMzM4MgorTW9udG1vcmVuY3kgCToJMjYJOgkxNDU2LjcxOTYKK011c2tlZ29uIAk6CTI2CToJMzc3OS41ODcKK05ld2F5Z28gCToJMjYJOgkyMjMxLjAwMDEKK09ha2xhbmQgCToJMjYJOgkyMzUxLjcyCitPY2VhbmEgCToJMjYJOgkzMzg0LjQzMDcKK09nZW1hdyAJOgkyNgk6CTE0ODguMjkxNworT250b25hZ29uIAk6CTI2CToJOTY5MC4zNTU1CitPc2Nlb2xhIAk6CTI2CToJMTQ4NC4zMjkKK09zY29kYSAJOgkyNgk6CTE0ODAuMzY2MworT3RzZWdvIAk6CTI2CToJMTM2Mi4yODgyCitPdHRhd2EgCToJMjYJOgk0MjI2LjgwMjMKK1ByZXNxdWUgSXNsZSAJOgkyNgk6CTY2NjMuNDIyNQorUm9zY29tbW9uIAk6CTI2CToJMTUwMS43ODU2CitTYWdpbmF3IAk6CTI2CToJMjExMi44NzAyCitTdC4gQ2xhaXIgCToJMjYJOgkyMTY2Ljg3MTcKK1N0LiBKb3NlcGggCToJMjYJOgkxMzQ5Ljc3ODUKK1NhbmlsYWMgCToJMjYJOgk0MTE4LjY2OTgKK1NjaG9vbGNyYWZ0IAk6CTI2CToJNDg3OC43NTcxCitTaGlhd2Fzc2VlIAk6CTI2CToJMTQwMC40OTA3CitUdXNjb2xhIAk6CTI2CToJMjM2Ni43OTM4CitWYW4gQnVyZW4gCToJMjYJOgkyODIzLjU5MjEKK1dhc2h0ZW5hdyAJOgkyNgk6CTE4NzEuMzUyNworV2F5bmUgCToJMjYJOgkxNzQwLjk5OAorV2V4Zm9yZCAJOgkyNgk6CTE0OTEuNDI1NgorQWl0a2luIAk6CTI3CToJNTE2Ny44NTI5CitBbm9rYSAJOgkyNwk6CTExNTUuODEzNAorQmVja2VyIAk6CTI3CToJMzc0Mi44MzQ5CitCZWx0cmFtaSAJOgkyNwk6CTc5MTMuOTc4MQorQmVudG9uIAk6CTI3CToJMTA2OS42NworQmlnIFN0b25lIAk6CTI3CToJMTM2Ny4yMDkyCitCbHVlIEVhcnRoIAk6CTI3CToJMTk4My42ODEKK0Jyb3duIAk6CTI3CToJMTYwMi4xNzQKK0Nhcmx0b24gCToJMjcJOgkyMjY2Ljg0NTcKK0NhcnZlciAJOgkyNwk6CTk3NC4yMjg1CitDYXNzIAk6CTI3CToJNjI1Mi44MDM5CitDaGlwcGV3YSAJOgkyNwk6CTE1MjIuNDc5NworQ2hpc2FnbyAJOgkyNwk6CTExNDYuMDQ5MQorQ2xheSAJOgkyNwk6CTI3MjYuNTk2NgorQ2xlYXJ3YXRlciAJOgkyNwk6CTI2NjcuMTU2MQorQ29vayAJOgkyNwk6CTg2NDkuODc0OAorQ290dG9ud29vZCAJOgkyNwk6CTE2ODAuNjc2OQorQ3JvdyBXaW5nIAk6CTI3CToJMjk5NS40OTA0CitEYWtvdGEgCToJMjcJOgkxNTE4LjU5NDcKK0RvZGdlIAk6CTI3CToJMTEzOC42NDE3CitEb3VnbGFzIAk6CTI3CToJMTg2NC42NDQ2CitGYXJpYmF1bHQgCToJMjcJOgkxODY4Ljk2OTkKK0ZpbGxtb3JlIAk6CTI3CToJMjIzMi45Njg1CitGcmVlYm9ybiAJOgkyNwk6CTE4NzEuNjExNworR29vZGh1ZSAJOgkyNwk6CTIwMjEuMzM5NgorR3JhbnQgCToJMjcJOgkxNDg5LjcxNjIKK0hlbm5lcGluIAk6CTI3CToJMTU3MC41MjQyCitIb3VzdG9uIAk6CTI3CToJMTQ3My40NzY5CitIdWJiYXJkIAk6CTI3CToJMjU4OC40MjAxCitJc2FudGkgCToJMjcJOgkxMTcwLjM0MzMKK0l0YXNjYSAJOgkyNwk6CTc1ODIuOTUwMgorSmFja3NvbiAJOgkyNwk6CTE4NjMuNDAxNAorS2FuYWJlYyAJOgkyNwk6CTEzODEuNDU0MgorS2FuZGl5b2hpIAk6CTI3CToJMjIzMi41MDIzCitLaXR0c29uIAk6CTI3CToJMjg1OC4wOTA5CitLb29jaGljaGluZyAJOgkyNwk6CTgxNjkuNjg4OAorTGFjIHF1aSBQYXJsZSAJOgkyNwk6CTIwMTUuMTQ5NQorTGFrZSAJOgkyNwk6CTc3NDYuMjIzOAorTGFrZSBvZiB0aGUgV29vZHMgCToJMjcJOgk0NTk3LjM3OTUKK0xlIFN1ZXVyIAk6CTI3CToJMTIyNy4yOTc0CitMaW5jb2xuIAk6CTI3CToJMTQyMC40NTk2CitMeW9uIAk6CTI3CToJMTg2OC41ODE0CitNY0xlb2QgCToJMjcJOgkxMzA5LjY4NTMKK01haG5vbWVuIAk6CTI3CToJMTUwOS45NDQxCitNYXJzaGFsbCAJOgkyNwk6CTQ2OTUuMTI2MQorTWFydGluIAk6CTI3CToJMTg4OS41NjA0CitNZWVrZXIgCToJMjcJOgkxNjcwLjc1NzIKK01pbGxlIExhY3MgCToJMjcJOgkxNzY1Ljc4NDMKK01vcnJpc29uIAk6CTI3CToJMjk4Ny4wOTg4CitNb3dlciAJOgkyNwk6CTE4NDMuMzI4OQorTXVycmF5IAk6CTI3CToJMTg2My41NTY4CitOaWNvbGxldCAJOgkyNwk6CTEyMDkuNDAwNQorTm9ibGVzIAk6CTI3CToJMTg3MC44MzQ3CitOb3JtYW4gCToJMjcJOgkyMjcwLjk2MzgKK09sbXN0ZWQgCToJMjcJOgkxNjk1LjE1NQorT3R0ZXIgVGFpbCAJOgkyNwk6CTU3NjIuNTE2OQorUGVubmluZ3RvbiAJOgkyNwk6CTE2MDEuNTAwNgorUGluZSAJOgkyNwk6CTM3MTUuNTM2MworUGlwZXN0b25lIAk6CTI3CToJMTIwNy4zMjg1CitQb2xrIAk6CTI3CToJNTE3NC4zMjc5CitQb3BlIAk6CTI3CToJMTg1Ny43ODExCitSYW1zZXkgCToJMjcJOgk0NDAuNjM2NworUmVkIExha2UgCToJMjcJOgkxMTIwLjIwMDkKK1JlZHdvb2QgCToJMjcJOgkyMjgyLjQxMTYKK1JlbnZpbGxlIAk6CTI3CToJMjU1Ni44OTk4CitSaWNlIAk6CTI3CToJMTMzNi43NzY3CitSb2NrIAk6CTI3CToJMTI1MC41NTU2CitSb3NlYXUgCToJMjcJOgk0MzQ2Ljg3NDcKK1N0LiBMb3VpcyAJOgkyNwk6CTE3NzY3LjE2NjkKK1Njb3R0IAk6CTI3CToJOTU0LjU3MDQKK1NoZXJidXJuZSAJOgkyNwk6CTExNjguMDkKK1NpYmxleSAJOgkyNwk6CTE1NTUuMDYxOQorU3RlYXJucyAJOgkyNwk6CTM1OTkuOTE4NworU3RlZWxlIAk6CTI3CToJMTExOS4yOTQ0CitTdGV2ZW5zIAk6CTI3CToJMTQ4OS44NzE2CitTd2lmdCAJOgkyNwk6CTE5NDguNTg2NQorVG9kZCAJOgkyNwk6CTI1MzYuNDkwNgorVHJhdmVyc2UgCToJMjcJOgkxNTE3LjYzNjQKK1dhYmFzaGEgCToJMjcJOgkxNDI0LjA1OTcKK1dhZGVuYSAJOgkyNwk6CTE0MDYuMzcKK1dhc2VjYSAJOgkyNwk6CTExMjAuOTc3OQorV2FzaGluZ3RvbiAJOgkyNwk6CTEwOTUuOTg0NAorV2F0b253YW4gCToJMjcJOgkxMTM5LjM5MjgKK1dpbGtpbiAJOgkyNwk6CTE5NDYuNzIxNworV2lub25hIAk6CTI3CToJMTY2MS43MTgxCitXcmlnaHQgCToJMjcJOgkxODUwLjI3MDEKK1llbGxvdyBNZWRpY2luZSAJOgkyNwk6CTE5NzcuMTgwMQorQWRhbXMgCToJMjgJOgkxMjU5LjM4NzUKK0FsY29ybiAJOgkyOAk6CTEwMzkuNDk2NQorQW1pdGUgCToJMjgJOgkxODk0Ljk0NzYKK0F0dGFsYSAJOgkyOAk6CTE5MDkuMDg5CitCZW50b24gCToJMjgJOgkxMDU4LjQwMzUKK0JvbGl2YXIgCToJMjgJOgkyMzQ1LjkxODQKK0NhbGhvdW4gCToJMjgJOgkxNTIyLjg0MjMKK0NhcnJvbGwgCToJMjgJOgkxNjQzLjQ1ODYKK0NoaWNrYXNhdyAJOgkyOAk6CTEzMDYuMDU5MworQ2hvY3RhdyAJOgkyOAk6CTEwODcuMzA3OQorQ2xhaWJvcm5lIAk6CTI4CToJMTI5OC41MjI0CitDbGFya2UgCToJMjgJOgkxNzk1LjkzMTkKK0NsYXkgCToJMjgJOgkxMDc3LjQ5MTgKK0NvYWhvbWEgCToJMjgJOgkxNTEwLjMzMjYKK0NvcGlhaCAJOgkyOAk6CTIwMTguNTk0MgorQ292aW5ndG9uIAk6CTI4CToJMTA3NC42OTQ2CitEZVNvdG8gCToJMjgJOgkxMjg2LjYzNDMKK0ZvcnJlc3QgCToJMjgJOgkxMjE3Ljc0MDMKK0ZyYW5rbGluIAk6CTI4CToJMTQ2Ny44NTY2CitHZW9yZ2UgCToJMjgJOgkxMjUyLjYwMTcKK0dyZWVuZSAJOgkyOAk6CTE4NjEuNDA3MQorR3JlbmFkYSAJOgkyOAk6CTExNjMuODk0MgorSGFuY29jayAJOgkyOAk6CTE0MzEuMDUyNworSGFycmlzb24gCToJMjgJOgkyNTI4LjIyODUKK0hpbmRzIAk6CTI4CToJMjI3Mi4zMzY1CitIb2xtZXMgCToJMjgJOgkxOTc5LjIyNjIKK0h1bXBocmV5cyAJOgkyOAk6CTExMTYuNzA0NAorSXNzYXF1ZW5hIAk6CTI4CToJMTE0My4xMjI0CitJdGF3YW1iYSAJOgkyOAk6CTEzOTkuNjg3OAorSmFja3NvbiAJOgkyOAk6CTI3MDIuMTQ3CitKYXNwZXIgCToJMjgJOgkxNzU0LjU2OTYKK0plZmZlcnNvbiAJOgkyOAk6CTEzNjUuNDIyMQorSmVmZmVyc29uIERhdmlzIAk6CTI4CToJMTA1OS41NjkKK0pvbmVzIAk6CTI4CToJMTgxMi4zMDA3CitLZW1wZXIgCToJMjgJOgkxOTg2LjUzCitMYWZheWV0dGUgCToJMjgJOgkxNzU5LjM2MTEKK0xhbWFyIAk6CTI4CToJMTI5Ni4yNjkxCitMYXVkZXJkYWxlIAk6CTI4CToJMTg1Mi41NzUyCitMYXdyZW5jZSAJOgkyOAk6CTExMjguNTQwNworTGVha2UgCToJMjgJOgkxNTE2LjE2MDEKK0xlZSAJOgkyOAk6CTExNzMuNjMyNgorTGVmbG9yZSAJOgkyOAk6CTE1NzAuNDQ2NQorTGluY29sbiAJOgkyOAk6CTE1MjMuMzYwMworTG93bmRlcyAJOgkyOAk6CTEzMzcuNjA1NQorTWFkaXNvbiAJOgkyOAk6CTE5MjEuNzAyMworTWFyaW9uIAk6CTI4CToJMTQyMC44MjIyCitNYXJzaGFsbCAJOgkyOAk6CTE4MzguMzgyCitNb25yb2UgCToJMjgJOgkxOTk5LjU4MzYKK01vbnRnb21lcnkgCToJMjgJOgkxMDU2LjM1NzQKK05lc2hvYmEgCToJMjgJOgkxNDgwLjU0NzYKK05ld3RvbiAJOgkyOAk6CTE1MDEuMTEyMgorTm94dWJlZSAJOgkyOAk6CTE4MTMuMTI5NQorT2t0aWJiZWhhIAk6CTI4CToJMTE5Ni4zMjEKK1Bhbm9sYSAJOgkyOAk6CTE4MjYuMjg2NworUGVhcmwgUml2ZXIgCToJMjgJOgkyMTIxLjAyODcKK1BlcnJ5IAk6CTI4CToJMTY4NC4wMTgKK1Bpa2UgCToJMjgJOgkxMDYzLjkyMDIKK1BvbnRvdG9jIAk6CTI4CToJMTI5Ny41NjQxCitQcmVudGlzcyAJOgkyOAk6CTEwODMuMjQxNgorUXVpdG1hbiAJOgkyOAk6CTEwNTIuODA5MQorUmFua2luIAk6CTI4CToJMjA4Ny43NzMxCitTY290dCAJOgkyOAk6CTE1ODAuODg0MgorU2hhcmtleSAJOgkyOAk6CTExMjYuMzM5MgorU2ltcHNvbiAJOgkyOAk6CTE1MjkuNDcyNworU21pdGggCToJMjgJOgkxNjUwLjUyOTMKK1N0b25lIAk6CTI4CToJMTE2MC41MDEzCitTdW5mbG93ZXIgCToJMjgJOgkxODMxLjY5OTgKK1RhbGxhaGF0Y2hpZSAJOgkyOAk6CTE2ODguODg3MgorVGF0ZSAJOgkyOAk6CTEwNjQuMzYwNQorVGlwcGFoIAk6CTI4CToJMTE5MS4zMjIzCitUaXNob21pbmdvIAk6CTI4CToJMTE1MS4zNTg2CitUdW5pY2EgCToJMjgJOgkxMjQ1LjIyMDIKK1VuaW9uIAk6CTI4CToJMTA3OS42OTMzCitXYWx0aGFsbCAJOgkyOAk6CTEwNDcuNDk5NgorV2FycmVuIAk6CTI4CToJMTYwMi41ODg0CitXYXNoaW5ndG9uIAk6CTI4CToJMTk3MS42NjM0CitXYXluZSAJOgkyOAk6CTIxMDYuOTY1CitXZWJzdGVyIAk6CTI4CToJMTA5Ni40NTA2CitXaWxraW5zb24gCToJMjgJOgkxNzgxLjAzOTQKK1dpbnN0b24gCToJMjgJOgkxNTgwLjE4NDkKK1lhbG9idXNoYSAJOgkyOAk6CTEyODIuMDUKK1lhem9vIAk6CTI4CToJMjQxOS4zNzA4CitBZGFpciAJOgkyOQk6CTE0NzQuNTM4OAorQW5kcmV3IAk6CTI5CToJMTEzMC41MzUKK0F0Y2hpc29uIAk6CTI5CToJMTQxNy42NjI0CitBdWRyYWluIAk6CTI5CToJMTgwNC42ODYxCitCYXJyeSAJOgkyOQk6CTIwNDguNDA1MQorQmFydG9uIAk6CTI5CToJMTU0NS41MDQ4CitCYXRlcyAJOgkyOQk6CTIyMDUuMDQ4MworQmVudG9uIAk6CTI5CToJMTk0OC45MjMyCitCb2xsaW5nZXIgCToJMjkJOgkxNjA4LjkwOAorQm9vbmUgCToJMjkJOgkxNzkwLjQ5MjkKK0J1Y2hhbmFuIAk6CTI5CToJMTA3My43MzYzCitCdXRsZXIgCToJMjkJOgkxODEwLjMzMjMKK0NhbGR3ZWxsIAk6CTI5CToJMTExMi45NzQ4CitDYWxsYXdheSAJOgkyOQk6CTIxOTMuODA3NworQ2FtZGVuIAk6CTI5CToJMTgzNS45NDc0CitDYXBlIEdpcmFyZGVhdSAJOgkyOQk6CTE1MTguNDkxMQorQ2Fycm9sbCAJOgkyOQk6CTE4MTguOTU3CitDYXJ0ZXIgCToJMjkJOgkxMzE4LjM2MTgKK0Nhc3MgCToJMjkJOgkxODE5LjkxNTMKK0NlZGFyIAk6CTI5CToJMTI5MS4xNDA5CitDaGFyaXRvbiAJOgkyOQk6CTE5ODkuNzY3NQorQ2hyaXN0aWFuIAk6CTI5CToJMTQ2MC44ODk1CitDbGFyayAJOgkyOQk6CTEzMjUuODIxCitDbGF5IAk6CTI5CToJMTA1OC45NDc0CitDbGludG9uIAk6CTI5CToJMTA5Ni43ODczCitDb2xlIAk6CTI5CToJMTAzMy42MTcyCitDb29wZXIgCToJMjkJOgkxNDc2Ljg2OTgKK0NyYXdmb3JkIAk6CTI5CToJMTkyNi40MTYxCitEYWRlIAk6CTI5CToJMTMxMS4zMTcKK0RhbGxhcyAJOgkyOQk6CTE0MDUuOTI5NworRGF2aWVzcyAJOgkyOQk6CTE0NzMuODkxMworRGVLYWxiIAk6CTI5CToJMTEwMi43NDQzCitEZW50IAk6CTI5CToJMTk1NC4xODA5CitEb3VnbGFzIAk6CTI5CToJMjEwOS44MTQKK0R1bmtsaW4gCToJMjkJOgkxNDE3LjAxNDkKK0ZyYW5rbGluIAk6CTI5CToJMjQxMC4zODM1CitHYXNjb25hZGUgCToJMjkJOgkxMzYyLjU3MzEKK0dlbnRyeSAJOgkyOQk6CTEyNzMuNzg3OQorR3JlZW5lIAk6CTI5CToJMTc1NS41MDIKK0dydW5keSAJOgkyOQk6CTExMzQuMzY4MgorSGFycmlzb24gCToJMjkJOgkxODgxLjUwNTUKK0hlbnJ5IAk6CTI5CToJMTg5Ny4zMDQ1CitIaWNrb3J5IAk6CTI5CToJMTA2Ni40MDY2CitIb2x0IAk6CTI5CToJMTIxNC44Mzk1CitIb3dhcmQgCToJMjkJOgkxMjE4LjcyNDUKK0hvd2VsbCAJOgkyOQk6CTI0MDQuMzc0NworSXJvbiAJOgkyOQk6CTE0MjkuODA5NQorSmFja3NvbiAJOgkyOQk6CTE1OTYuNTAxOQorSmFzcGVyIAk6CTI5CToJMTY2MS4wMTg4CitKZWZmZXJzb24gCToJMjkJOgkxNzE5Ljk5MzEKK0pvaG5zb24gCToJMjkJOgkyMTU3LjU0NzcKK0tub3ggCToJMjkJOgkxMzEyLjUzNDMKK0xhY2xlZGUgCToJMjkJOgkxOTg5LjEyCitMYWZheWV0dGUgCToJMjkJOgkxNjU0LjY0NzQKK0xhd3JlbmNlIAk6CTI5CToJMTU4OC42NTQyCitMZXdpcyAJOgkyOQk6CTEzMjMuMTAxNQorTGluY29sbiAJOgkyOQk6CTE2NTguNjYxOQorTGlubiAJOgkyOQk6CTE2MDkuNTgxNAorTGl2aW5nc3RvbiAJOgkyOQk6CTEzOTQuNjYzMgorTWNEb25hbGQgCToJMjkJOgkxMzk3LjgyMworTWFjb24gCToJMjkJOgkyMTA0LjQ1MjcKK01hZGlzb24gCToJMjkJOgkxMjg4Ljc4NAorTWFyaWVzIAk6CTI5CToJMTM3Mi42MjIzCitNYXJpb24gCToJMjkJOgkxMTUwLjA4OTUKK01lcmNlciAJOgkyOQk6CTExNzguOTE2MgorTWlsbGVyIAk6CTI5CToJMTU1My44NDQ2CitNaXNzaXNzaXBwaSAJOgkyOQk6CTExMTAuODc2OQorTW9uaXRlYXUgCToJMjkJOgkxMDg0LjgyMTUKK01vbnJvZSAJOgkyOQk6CTE3MzUuODk1NworTW9udGdvbWVyeSAJOgkyOQk6CTEzOTkuNDgwNgorTW9yZ2FuIAk6CTI5CToJMTU4OS45NzUxCitOZXcgTWFkcmlkIAk6CTI5CToJMTgwNy44NzE4CitOZXd0b24gCToJMjkJOgkxNjIzLjA0OTQKK05vZGF3YXkgCToJMjkJOgkyMjczLjM3MjUKK09yZWdvbiAJOgkyOQk6CTIwNTAuMjE4MQorT3NhZ2UgCToJMjkJOgkxNTg4LjczMTkKK096YXJrIAk6CTI5CToJMTk1NS42MzEzCitQZW1pc2NvdCAJOgkyOQk6CTEzMjcuMTQxOQorUGVycnkgCToJMjkJOgkxMjU0LjI4NTIKK1BldHRpcyAJOgkyOQk6CTE3NzcuNjIwNgorUGhlbHBzIAk6CTI5CToJMTc0Ni4zODUyCitQaWtlIAk6CTI5CToJMTc3My42NTc5CitQbGF0dGUgCToJMjkJOgkxMTA2LjQ5OTgKK1BvbGsgCToJMjkJOgkxNjYzLjk3MTQKK1B1bGFza2kgCToJMjkJOgkxNDI4LjE1MTkKK1B1dG5hbSAJOgkyOQk6CTEzNDUuOTE5NAorUmFsbHMgCToJMjkJOgkxMjUzLjA5MzgKK1JhbmRvbHBoIAk6CTI5CToJMTI2My4wMTM1CitSYXkgCToJMjkJOgkxNDg1LjU0NjMKK1JleW5vbGRzIAk6CTI5CToJMjEwOS4zMjE5CitSaXBsZXkgCToJMjkJOgkxNjM1Ljk5OTQKK1N0LiBDaGFybGVzIAk6CTI5CToJMTUzNC4xODY1CitTdC4gQ2xhaXIgCToJMjkJOgkxODE3LjkyMQorU3RlLiBHZW5ldmlldmUgCToJMjkJOgkxMzE4LjE1NDYKK1N0LiBGcmFuY29pcyAJOgkyOQk6CTExNzEuNzE2CitTdC4gTG91aXMgCToJMjkJOgkxMzU2LjM1NzEKK1NhbGluZSAJOgkyOQk6CTE5ODAuMjg4MQorU2NodXlsZXIgCToJMjkJOgk3OTguMTM0NAorU2NvdGxhbmQgCToJMjkJOgkxMTM3LjY1NzUKK1Njb3R0IAk6CTI5CToJMTEwMy40NDM2CitTaGFubm9uIAk6CTI5CToJMjYwMC4zMzQxCitTaGVsYnkgCToJMjkJOgkxMzAxLjI5MzcKK1N0b2RkYXJkIAk6CTI5CToJMjE0Ni45NTQ2CitTdG9uZSAJOgkyOQk6CTEzMjMuMjU2OQorU3VsbGl2YW4gCToJMjkJOgkxNjg3LjIwMzcKK1RhbmV5IAk6CTI5CToJMTY4Ny4zMzMyCitUZXhhcyAJOgkyOQk6CTMwNTQuMjMxNgorVmVybm9uIAk6CTI5CToJMjE2Ny45MzM2CitXYXJyZW4gCToJMjkJOgkxMTMzLjc0NjYKK1dhc2hpbmd0b24gCToJMjkJOgkxOTc0Ljc3MTQKK1dheW5lIAk6CTI5CToJMjAwNC44OTMxCitXZWJzdGVyIAk6CTI5CToJMTUzNy42NTcxCitXb3J0aCAJOgkyOQk6CTY5MC44ODI1CitXcmlnaHQgCToJMjkJOgkxNzY5LjQzNjIKK1N0LiBMb3VpcyBjaXR5CToJMjkJOgkxNzEuMzI4NQorQmVhdmVyaGVhZCAJOgkzMAk6CTE0NDMxLjU4MzYKK0JpZyBIb3JuIAk6CTMwCToJMTI5ODcuOTQzNQorQmxhaW5lIAk6CTMwCToJMTA5NzguODAyOAorQnJvYWR3YXRlciAJOgkzMAk6CTMyMDguODU0NgorQ2FyYm9uIAk6CTMwCToJNTM0MS4wNzIxCitDYXJ0ZXIgCToJMzAJOgk4NjcyLjA3MTEKK0Nhc2NhZGUgCToJMzAJOgk3MDIzLjE3MzUKK0Nob3V0ZWF1IAk6CTMwCToJMTAzNTIuMjMKK0N1c3RlciAJOgkzMAk6CTk4MjQuNDM5OAorRGFuaWVscyAJOgkzMAk6CTM2OTQuNjg2OAorRGF3c29uIAk6CTMwCToJNjE3Mi4zMDY3CitEZWVyIExvZGdlIAk6CTMwCToJMTkxOS42MDQ0CitGYWxsb24gCToJMzAJOgk0MjAzLjYyMTgKK0Zlcmd1cyAJOgkzMAk6CTExMjY3LjQzMjQKK0ZsYXRoZWFkIAk6CTMwCToJMTM2MTQuMjA1NQorR2FsbGF0aW4gCToJMzAJOgk2ODE2LjQ2NTYKK0dhcmZpZWxkIAk6CTMwCToJMTI1NTUuMTI4NgorR2xhY2llciAJOgkzMAk6CTc4NjYuMTE0OQorR29sZGVuIFZhbGxleSAJOgkzMAk6CTMwNDYuODc2CitHcmFuaXRlIAk6CTMwCToJNDQ4OC43NTQ5CitIaWxsIAk6CTMwCToJNzU1Mi41Njk1CitKZWZmZXJzb24gCToJMzAJOgk0Mjk2LjM2OTcKK0p1ZGl0aCBCYXNpbiAJOgkzMAk6CTQ4NDUuMTM4OQorTGFrZSAJOgkzMAk6CTQyODMuMTM0OAorTGV3aXMgYW5kIENsYXJrIAk6CTMwCToJOTA1OC42ODA0CitMaWJlcnR5IAk6CTMwCToJMzc0OC4yMjIxCitMaW5jb2xuIAk6CTMwCToJOTUxOC41MzQ5CitNY0NvbmUgCToJMzAJOgk2OTQ4LjM3NDMKK01hZGlzb24gCToJMzAJOgk5MzMxLjM4MTUKK01lYWdoZXIgCToJMzAJOgk2MjAyLjYwOTcKK01pbmVyYWwgCToJMzAJOgkzMTY4LjU1NDIKK01pc3NvdWxhIAk6CTMwCToJNjc4MS41MDA2CitNdXNzZWxzaGVsbCAJOgkzMAk6CTQ4NDUuNjU2OQorUGFyayAJOgkzMAk6CTcyODcuMTk4MQorUGV0cm9sZXVtIAk6CTMwCToJNDMzNS42ODU5CitQaGlsbGlwcyAJOgkzMAk6CTEzNDk5LjUyMDMKK1BvbmRlcmEgCToJMzAJOgk0MjQ3LjIxMTUKK1Bvd2RlciBSaXZlciAJOgkzMAk6CTg1NDEuNjY0NgorUG93ZWxsIAk6CTMwCToJNjA0MS42NDEyCitQcmFpcmllIAk6CTMwCToJNDUxMy4yMzA0CitSYXZhbGxpIAk6CTMwCToJNjIxNi44Mjg4CitSaWNobGFuZCAJOgkzMAk6CTU0NDYuODIxOAorUm9vc2V2ZWx0IAk6CTMwCToJNjEzNy4zOTM1CitSb3NlYnVkIAk6CTMwCToJMTMwMTkuNzc0NgorU2FuZGVycyAJOgkzMAk6CTcyMjYuMTc3NworU2hlcmlkYW4gCToJMzAJOgk0NDE5LjMxNworU2lsdmVyIEJvdyAJOgkzMAk6CTE4NjIuMTMyMworU3RpbGx3YXRlciAJOgkzMAk6CTQ2NzMuOTM5OQorU3dlZXQgR3Jhc3MgCToJMzAJOgk0ODIyLjU4CitUZXRvbiAJOgkzMAk6CTU5MzcuNzgyMgorVG9vbGUgCToJMzAJOgk1MDM5Ljc3NzQKK1RyZWFzdXJlIAk6CTMwCToJMjU0OC44NDQ5CitWYWxsZXkgCToJMzAJOgkxMzExMC41MjgyCitXaGVhdGxhbmQgCToJMzAJOgkzNjk5LjI3MTEKK1dpYmF1eCAJOgkzMAk6CTIzMDUuMzMzMQorWWVsbG93c3RvbmUgCToJMzAJOgk2ODYxLjAzOTUKK0FkYW1zIAk6CTMxCToJMTQ2MS4xNzQ0CitBbnRlbG9wZSAJOgkzMQk6CTIyMjMuMzMzNworQXJ0aHVyIAk6CTMxCToJMTg2MC40NDg4CitCYW5uZXIgCToJMzEJOgkxOTMzLjA5ODMKK0JsYWluZSAJOgkzMQk6CTE4NTAuMTQwNgorQm9vbmUgCToJMzEJOgkxNzc5Ljk3NzUKK0JveCBCdXR0ZSAJOgkzMQk6CTI3OTEuNjA1NgorQm95ZCAJOgkzMQk6CTE0MTAuNDg4MQorQnJvd24gCToJMzEJOgkzMTcyLjk1NzIKK0J1ZmZhbG8gCToJMzEJOgkyNTI1Ljk0OTMKK0J1cnQgCToJMzEJOgkxMjg3LjQ4OQorQnV0bGVyIAk6CTMxCToJMTUxMy42MjE5CitDYXNzIAk6CTMxCToJMTQ2Ni40ODM5CitDZWRhciAJOgkzMQk6CTE5MzEuNjQ3OQorQ2hhc2UgCToJMzEJOgkyMzI0Ljg2MTcKK0NoZXJyeSAJOgkzMQk6CTE1NTY0LjcwODYKK0NoZXllbm5lIAk6CTMxCToJMzA5OC44MDU1CitDbGF5IAk6CTMxCToJMTQ4NS40NDI3CitDb2xmYXggCToJMzEJOgkxMDg0LjEyMjIKK0N1bWluZyAJOgkzMQk6CTE0ODguMDU4NgorQ3VzdGVyIAk6CTMxCToJNjY3Mi4wNDcyCitEYWtvdGEgCToJMzEJOgk2OTIuNTQwMQorRGF3ZXMgCToJMzEJOgkzNjI4LjIyNzQKK0Rhd3NvbiAJOgkzMQk6CTI2MzkuOTg3CitEZXVlbCAJOgkzMQk6CTExNDEuNjQ2MQorRGl4b24gCToJMzEJOgkxMjUwLjI0NDgKK0RvZGdlIAk6CTMxCToJMTQwOC43NTI4CitEb3VnbGFzIAk6CTMxCToJODc5LjU2NAorRHVuZHkgCToJMzEJOgkyMzg0Ljg0NjEKK0ZpbGxtb3JlIAk6CTMxCToJMTQ5My40NDU4CitGcmFua2xpbiAJOgkzMQk6CTE0OTIuMTI0OQorRnJvbnRpZXIgCToJMzEJOgkyNTM4LjM1NTQKK0Z1cm5hcyAJOgkzMQk6CTE4NjYuMTIwOQorR2FnZSAJOgkzMQk6CTIyMjcuMjQ0NgorR2FyZGVuIAk6CTMxCToJNDQ4My4yOQorR2FyZmllbGQgCToJMzEJOgkxNDc5Ljc3MDYKK0dvc3BlciAJOgkzMQk6CTExOTguNDk2NgorR3JhbnQgCToJMzEJOgkyMDI4LjU2NTcKK0dyZWVsZXkgCToJMzEJOgkxNDc4LjEzODkKK0hhbGwgCToJMzEJOgkxNDMwLjI0OTgKK0hhbWlsdG9uIAk6CTMxCToJMTQxNi4xMzQzCitIYXJsYW4gCToJMzEJOgkxNDg3LjEyNjIKK0hheWVzIAk6CTMxCToJMTg0Ny41MjQ3CitIaXRjaGNvY2sgCToJMzEJOgkxODYxLjA5NjMKK0hvbHQgCToJMzEJOgk2MjYxLjcxMzUKK0hvb2tlciAJOgkzMQk6CTE4NjguNzEwOQorSG93YXJkIAk6CTMxCToJMTQ5MS4xNjY2CitKZWZmZXJzb24gCToJMzEJOgkxNDkwLjU0NQorSm9obnNvbiAJOgkzMQk6CTk3NS45NjM4CitLZWFybmV5IAk6CTMxCToJMTMzNi43NzY3CitLZWl0aCAJOgkzMQk6CTI4NzQuMzA0MworS2V5YSBQYWhhIAk6CTMxCToJMjAwNS4xMDAzCitLaW1iYWxsIAk6CTMxCToJMjQ2Ni40ODI5CitLbm94IAk6CTMxCToJMjk1MS42OTM1CitMYW5jYXN0ZXIgCToJMzEJOgkyMTkyLjk3ODkKK0xpbmNvbG4gCToJMzEJOgk2NjY5LjUwOQorTG9nYW4gCToJMzEJOgkxNDc5LjI3ODUKK0xvdXAgCToJMzEJOgkxNDc4Ljk0MTgKK01jUGhlcnNvbiAJOgkzMQk6CTIyMjcuNDUxOAorTWFkaXNvbiAJOgkzMQk6CTE0ODkuMzc5NQorTWVycmljayAJOgkzMQk6CTEyODEuMzI0OAorTW9ycmlsbCAJOgkzMQk6CTM3MDMuMjA3OQorTmFuY2UgCToJMzEJOgkxMTYwLjQyMzYKK05lbWFoYSAJOgkzMQk6CTEwNjYuNzk1MQorTnVja29sbHMgCToJMzEJOgkxNDkxLjczNjQKK090b2UgCToJMzEJOgkxNjAzLjQ0MzEKK1Bhd25lZSAJOgkzMQk6CTExMjEuMzQwNQorUGVya2lucyAJOgkzMQk6CTIyOTAuMjU5MworUGhlbHBzIAk6CTMxCToJMTQwMC4xNTQKK1BpZXJjZSAJOgkzMQk6CTE0ODkuOTQ5MworUGxhdHRlIAk6CTMxCToJMTc4NC43MTcyCitQb2xrIAk6CTMxCToJMTE0MS40NjQ4CitSZWQgV2lsbG93IAk6CTMxCToJMTg1OS43NzU0CitSaWNoYXJkc29uIAk6CTMxCToJMTQzOS45MTA1CitSb2NrIAk6CTMxCToJMjYyMC42OTE1CitTYWxpbmUgCToJMzEJOgkxNDkxLjk5NTQKK1NhcnB5IAk6CTMxCToJNjQwLjQ1NTIKK1NhdW5kZXJzIAk6CTMxCToJMTk2NS4zNDM4CitTY290dHMgQmx1ZmYgCToJMzEJOgkxOTMwLjg0NQorU2V3YXJkIAk6CTMxCToJMTQ5MS4xNDA3CitTaGVyaWRhbiAJOgkzMQk6CTYzOTcuMjc0MQorU2hlcm1hbiAJOgkzMQk6CTE0ODAuNTIxNworU2lvdXggCToJMzEJOgk1MzU0LjM1ODgKK1N0YW50b24gCToJMzEJOgkxMTE2LjQ0NTQKK1RoYXllciAJOgkzMQk6CTE0OTAuMDI3CitUaG9tYXMgCToJMzEJOgkxODQ4LjM1MzUKK1RodXJzdG9uIAk6CTMxCToJMTAyNi4yODc1CitWYWxsZXkgCToJMzEJOgkxNDc3LjYyMDkKK1dhc2hpbmd0b24gCToJMzEJOgkxMDE5LjgzODQKK1dheW5lIAk6CTMxCToJMTE0OC42MTMyCitXZWJzdGVyIAk6CTMxCToJMTQ4OS4zMDE4CitXaGVlbGVyIAk6CTMxCToJMTQ5MC43MjYzCitZb3JrIAk6CTMxCToJMTQ5MS44OTE4CitDaHVyY2hpbGwgCToJMzIJOgkxMzAxMC41NTQyCitDbGFyayAJOgkzMgk6CTIwOTU0LjgwOTQKK0RvdWdsYXMgCToJMzIJOgkxOTEwLjUxMzUKK0Vsa28gCToJMzIJOgk0NDU1NS42MTQ2CitFc21lcmFsZGEgCToJMzIJOgk5Mjk1LjUxCitFdXJla2EgCToJMzIJOgkxMDgyNi4wOTY0CitIdW1ib2xkdCAJOgkzMgk6CTI1MDEzLjg4MzMKK0xhbmRlciAJOgkzMgk6CTE0Mjk1LjQyNzMKK0xpbmNvbG4gCToJMzIJOgkyNzU0OS4yMzQzCitMeW9uIAk6CTMyCToJNTIyMi40NzYKK01pbmVyYWwgCToJMzIJOgk5ODc1LjU5MjMKK055ZSAJOgkzMgk6CTQ3MDMxLjExMDcKK1BlcnNoaW5nIAk6CTMyCToJMTU3MTQuOTU0NQorU3RvcmV5IAk6CTMyCToJNjgzLjI0MgorV2FzaG9lIAk6CTMyCToJMTY5NjcuOTE4OAorV2hpdGUgUGluZSAJOgkzMgk6CTIzMDQyLjE5NAorQ2Fyc29uIENpdHkJOgkzMgk6CTQwMy4xNTk0CitCZWxrbmFwIAk6CTMzCToJMTIxMy41NDQ1CitDYXJyb2xsIAk6CTMzCToJMjU2OS45MDE2CitDaGVzaGlyZSAJOgkzMwk6CTE4ODguNDk4NQorQ29vcyAJOgkzMwk6CTQ3NDMuNDI5NgorR3JhZnRvbiAJOgkzMwk6CTQ1MzIuNzA3MgorSGlsbHNib3JvdWdoIAk6CTMzCToJMjMxMC43OTgKK01lcnJpbWFjayAJOgkzMwk6CTI0NzcuMzA5MQorUm9ja2luZ2hhbSAJOgkzMwk6CTIwNTYuMzU2NAorU3RyYWZmb3JkIAk6CTMzCToJOTk0LjMyNjkKK1N1bGxpdmFuIAk6CTMzCToJMTQyOS40NzI4CitBdGxhbnRpYyAJOgkzNAk6CTE3MzkuMDU1NQorQmVyZ2VuIAk6CTM0CToJNjM5LjIxMgorQnVybGluZ3RvbiAJOgkzNAk6CTIxMjIuMzIzNworQ2FtZGVuIAk6CTM0CToJNTg5LjQzMjIKK0NhcGUgTWF5IAk6CTM0CToJMTYwNi41MjUyCitDdW1iZXJsYW5kIAk6CTM0CToJMTc1Mi4zNjgxCitFc3NleCAJOgkzNAk6CTMzNS41NjA0CitHbG91Y2VzdGVyIAk6CTM0CToJODcyLjYyMjgKK0h1ZHNvbiAJOgkzNAk6CTE2MS42OTM3CitIdW50ZXJkb24gCToJMzQJOgkxMTMzLjc5ODQKK01lcmNlciAJOgkzNAk6CTU5Mi42OTU2CitNaWRkbGVzZXggCToJMzQJOgk4MzUuMzAwOQorTW9ubW91dGggCToJMzQJOgkxNzIyLjY2MDgKK01vcnJpcyAJOgkzNAk6CTEyNDYuNTQxMQorT2NlYW4gCToJMzQJOgkyMzcyLjEyOTIKK1Bhc3NhaWMgCToJMzQJOgk1MTAuMzU5NQorU2FsZW0gCToJMzQJOgk5NjQuOTU2MworU29tZXJzZXQgCToJMzQJOgk3OTAuMDc5NQorU3Vzc2V4IAk6CTM0CToJMTM4OC4yMTQxCitVbmlvbiAJOgkzNAk6CTI3My4xNDE0CitXYXJyZW4gCToJMzQJOgk5MzkuNTIyNQorQmVybmFsaWxsbyAJOgkzNQk6CTMwMjYuODAzNQorQ2F0cm9uIAk6CTM1CToJMTc5NDYuMTg3NworQ2hhdmVzIAk6CTM1CToJMTU3MzQuNDMxMworQ2lib2xhIAk6CTM1CToJMTE3NjMuMDI4OQorQ29sZmF4IAk6CTM1CToJOTc1OS4yNDk1CitDdXJyeSAJOgkzNQk6CTM2NDUuODY1MworRGUgQmFjYSAJOgkzNQk6CTYwNDQuNjE5NworRG9uYSBBbmEgCToJMzUJOgk5ODc5Ljg2NTgKK0VkZHkgCToJMzUJOgkxMDg3MS43MDYzCitHcmFudCAJOgkzNQk6CTEwMjc1LjgyNQorR3VhZGFsdXBlIAk6CTM1CToJNzg1MS43OTIyCitIYXJkaW5nIAk6CTM1CToJNTUwNi4yMTA1CitIaWRhbGdvIAk6CTM1CToJODkyNC45MDY5CitMZWEgCToJMzUJOgkxMTM4MC41MTE4CitMaW5jb2xuIAk6CTM1CToJMTI1MTIuOTM3NQorTG9zIEFsYW1vcyAJOgkzNQk6CTI4My4yMTY1CitMdW5hIAk6CTM1CToJNzY4MC4wNzUyCitNY0tpbmxleSAJOgkzNQk6CTE0MTI5LjAxOTgKK01vcmEgCToJMzUJOgk1MDA3LjcxMzIKK090ZXJvIAk6CTM1CToJMTcxNjUuMDQzNworUXVheSAJOgkzNQk6CTc0NjMuODYyCitSaW8gQXJyaWJhIAk6CTM1CToJMTUyNzAuODk5CitSb29zZXZlbHQgCToJMzUJOgk2MzU4LjExMzMKK1NhbmRvdmFsIAk6CTM1CToJOTYyMC4wODg4CitTYW4gSnVhbiAJOgkzNQk6CTE0MzQ0LjM1MjQKK1NhbiBNaWd1ZWwgCToJMzUJOgkxMjI2NS4yODE3CitTYW50YSBGZSAJOgkzNQk6CTQ5NDguOTQ2MQorU2llcnJhIAk6CTM1CToJMTA5NzIuMDE3CitTb2NvcnJvIAk6CTM1CToJMTcyMjAuMTU4OQorVGFvcyAJOgkzNQk6CTU3MDkuOTY1OAorVG9ycmFuY2UgCToJMzUJOgk4NjY1LjY0NzkKK1VuaW9uIAk6CTM1CToJOTkyMS43NDYxCitWYWxlbmNpYSAJOgkzNQk6CTI3NjYuNjYzOQorQWxiYW55IAk6CTM2CToJMTM4MS4wMTM5CitBbGxlZ2FueSAJOgkzNgk6CTI2NzkuMTQ3OAorQnJvbnggCToJMzYJOgkxNDguNzQzNworQnJvb21lIAk6CTM2CToJMTg1My4wNDE0CitDYXR0YXJhdWd1cyAJOgkzNgk6CTM0MjQuNjI3NQorQ2F5dWdhIAk6CTM2CToJMjIzNi44Mjc2CitDaGF1dGF1cXVhIAk6CTM2CToJMzg4NS4wNTE4CitDaGVtdW5nIAk6CTM2CToJMTA2My45NDYxCitDaGVuYW5nbyAJOgkzNgk6CTIzMjcuNjMzCitDbGludG9uIAk6CTM2CToJMjg5NC42MDk5CitDb2x1bWJpYSAJOgkzNgk6CTE2NzkuMDE5MworQ29ydGxhbmQgCToJMzYJOgkxMjk4LjkzNjgKK0RlbGF3YXJlIAk6CTM2CToJMzgwMi4yMjM2CitEdXRjaGVzcyAJOgkzNgk6CTIxMzcuNzM0MgorRXJpZSAJOgkzNgk6CTMxNzcuNjQ1MQorRXNzZXggCToJMzYJOgk0OTYzLjczNQorRnJhbmtsaW4gCToJMzYJOgk0Mzk2LjM2OTYKK0Z1bHRvbiAJOgkzNgk6CTEzODAuMjExCitHZW5lc2VlIAk6CTM2CToJMTI4Mi45MDQ3CitHcmVlbmUgCToJMzYJOgkxNzA0LjU1NjcKK0hhbWlsdG9uIAk6CTM2CToJNDY4Mi4yMjc5CitIZXJraW1lciAJOgkzNgk6CTM3NzcuMTI2NQorSmVmZmVyc29uIAk6CTM2CToJNDgwOS44MzcyCitLaW5ncyAJOgkzNgk6CTI1MC45NzEKK0xld2lzIAk6CTM2CToJMzM0MC44MTUxCitMaXZpbmdzdG9uIAk6CTM2CToJMTY1OC43Mzk2CitNYWRpc29uIAk6CTM2CToJMTcxMy4zODg2CitNb25yb2UgCToJMzYJOgkzNTM2LjkyOTkKK01vbnRnb21lcnkgCToJMzYJOgkxMDYyLjcyODgKK05hc3NhdSAJOgkzNgk6CTExNzMuNDc3MgorTmV3IFlvcmsgCToJMzYJOgk4Ny40NjQzCitOaWFnYXJhIAk6CTM2CToJMjk1Mi4xNTk3CitPbmVpZGEgCToJMzYJOgkzMjU1LjkxNDkKK09ub25kYWdhIAk6CTM2CToJMjA4Ni43MzcxCitPbnRhcmlvIAk6CTM2CToJMTcxNS42OTM3CitPcmFuZ2UgCToJMzYJOgkyMTcxLjg0NDUKK09ybGVhbnMgCToJMzYJOgkyMTE3LjI0NzMKK09zd2VnbyAJOgkzNgk6CTMzOTguNTQ2MgorT3RzZWdvIAk6CTM2CToJMjYyOS4xMDkKK1B1dG5hbSAJOgkzNgk6CTYzNy43ODc1CitRdWVlbnMgCToJMzYJOgk0NjEuNzQ1MgorUmVuc3NlbGFlciAJOgkzNgk6CTE3MjMuMzYwMQorUmljaG1vbmQgCToJMzYJOgkyNjUuNDc1CitSb2NrbGFuZCAJOgkzNgk6CTUxNi4yOTA2CitTdC4gTGF3cmVuY2UgCToJMzYJOgk3MzA3LjYzMzIKK1NhcmF0b2dhIAk6CTM2CToJMjE4NS4yMDg5CitTY2hlbmVjdGFkeSAJOgkzNgk6CTU0Mi45MTU4CitTY2hvaGFyaWUgCToJMzYJOgkxNjIyLjI3MjQKK1NjaHV5bGVyIAk6CTM2CToJODg2LjM0OTgKK1NlbmVjYSAJOgkzNgk6CTEwMTEuNDIwOQorU3RldWJlbiAJOgkzNgk6CTM2MzYuNjE5CitTdWZmb2xrIAk6CTM2CToJNjE0Ni4yNTEzCitTdWxsaXZhbiAJOgkzNgk6CTI1ODEuODQxNQorVGlvZ2EgCToJMzYJOgkxMzU0LjMzNjkKK1RvbXBraW5zIAk6CTM2CToJMTI3My4zMjE3CitVbHN0ZXIgCToJMzYJOgkzMDA2LjM2ODQKK1dhcnJlbiAJOgkzNgk6CTI0MTIuOTk5NAorV2FzaGluZ3RvbiAJOgkzNgk6CTIxOTAuNzI1NgorV2F5bmUgCToJMzYJOgkzNTg0LjkyMjYKK1dlc3RjaGVzdGVyIAk6CTM2CToJMTI5NS4yMDcyCitXeW9taW5nIAk6CTM2CToJMTU0NC43Nzk2CitZYXRlcyAJOgkzNgk6CTk3My4yMTg0CitBbGFtYW5jZSAJOgkzNwk6CTExMjYuMDU0MworQWxleGFuZGVyIAk6CTM3CToJNjgxLjUzMjYKK0FsbGVnaGFueSAJOgkzNwk6CTYwOS45OTY4CitBbnNvbiAJOgkzNwk6CTEzOTEuMTY2NworQXNoZSAJOgkzNwk6CTExMDUuMzYwMgorQXZlcnkgCToJMzcJOgk2NDAuMjczOQorQmVhdWZvcnQgCToJMzcJOgkyNDgzLjAwNzEKK0JlcnRpZSAJOgkzNwk6CTE5MTkuNzU5OAorQmxhZGVuIAk6CTM3CToJMjI5Ny42NjY3CitCcnVuc3dpY2sgCToJMzcJOgkyNzE5LjUyNTkKK0J1bmNvbWJlIAk6CTM3CToJMTcwOC44ODIKK0J1cmtlIAk6CTM3CToJMTMzMy41NjUxCitDYWJhcnJ1cyAJOgkzNwk6CTk0NS4yOTgyCitDYWxkd2VsbCAJOgkzNwk6CTEyMjguNDExMQorQ2FtZGVuIAk6CTM3CToJNzkxLjc2MworQ2FydGVyZXQgCToJMzcJOgkzNDcxLjk3MjcKK0Nhc3dlbGwgCToJMzcJOgkxMTA5LjYzMzcKK0NhdGF3YmEgCToJMzcJOgkxMDcwLjk5MDkKK0NoYXRoYW0gCToJMzcJOgkxODM2LjQzOTUKK0NoZXJva2VlIAk6CTM3CToJMTIwOC43MDEyCitDaG93YW4gCToJMzcJOgk2MDQuMjcyOQorQ2xheSAJOgkzNwk6CTU3MS4zNTQKK0NsZXZlbGFuZCAJOgkzNwk6CTEyMTMuNjc0CitDb2x1bWJ1cyAJOgkzNwk6CTI0NjkuODI0CitDcmF2ZW4gCToJMzcJOgkyMDA1LjAyMjYKK0N1bWJlcmxhbmQgCToJMzcJOgkxNzA1LjQxMTQKK0N1cnJpdHVjayAJOgkzNwk6CTEzNjEuNDMzNQorRGFyZSAJOgkzNwk6CTQwNDQuMzEwOQorRGF2aWRzb24gCToJMzcJOgkxNDY3LjkzNDMKK0RhdmllIAk6CTM3CToJNjkxLjI0NTEKK0R1cGxpbiAJOgkzNwk6CTIxMjEuNDk0OQorRHVyaGFtIAk6CTM3CToJNzcxLjI3NjEKK0VkZ2Vjb21iZSAJOgkzNwk6CTEzMTIuMDQyMgorRm9yc3l0aCAJOgkzNwk6CTEwNjkuNDYyOAorRnJhbmtsaW4gCToJMzcJOgkxMjgwLjk4ODEKK0dhc3RvbiAJOgkzNwk6CTk0MS41Njg2CitHYXRlcyAJOgkzNwk6CTg5NS4xMDQKK0dyYWhhbSAJOgkzNwk6CTc4MS4xNDQKK0dyYW52aWxsZSAJOgkzNwk6CTEzODkuNjkwNAorR3JlZW5lIAk6CTM3CToJNjg4LjY1NTEKK0d1aWxmb3JkIAk6CTM3CToJMTcwMy40NDMKK0hhbGlmYXggCToJMzcJOgkxODk0LjE5NjUKK0hhcm5ldHQgCToJMzcJOgkxNTU3LjM2NworSGF5d29vZCAJOgkzNwk6CTE0MzYuNDY1OAorSGVuZGVyc29uIAk6CTM3CToJOTcxLjM1MzYKK0hlcnRmb3JkIAk6CTM3CToJOTMzLjQ4NzgKK0hva2UgCToJMzcJOgkxMDE2LjE2MDYKK0h5ZGUgCToJMzcJOgkzNjg4LjE2CitJcmVkZWxsIAk6CTM3CToJMTU0Ni4yNTU5CitKYWNrc29uIAk6CTM3CToJMTI4MC43NTUKK0pvaG5zdG9uIAk6CTM3CToJMjA2MS4wOTYxCitKb25lcyAJOgkzNwk6CTEyMjUuODk4OAorTGVlIAk6CTM3CToJNjcxLjY2NDcKK0xlbm9pciAJOgkzNwk6CTEwNDEuNDEzMQorTGluY29sbiAJOgkzNwk6CTc5NS4yMDc3CitNY0Rvd2VsbCAJOgkzNwk6CTExNTYuMjAxOQorTWFjb24gCToJMzcJOgkxMzQ1LjQyNzMKK01hZGlzb24gCToJMzcJOgkxMTY5LjYxODEKK01hcnRpbiAJOgkzNwk6CTExOTUuMjU5MQorTWVja2xlbmJ1cmcgCToJMzcJOgkxNDE0LjcwOTgKK01pdGNoZWxsIAk6CTM3CToJNTc1LjM0MjYKK01vbnRnb21lcnkgCToJMzcJOgkxMjk5LjI0NzYKK01vb3JlIAk6CTM3CToJMTgyNy42ODUzCitOYXNoIAk6CTM3CToJMTQwNS41NjcxCitOZXcgSGFub3ZlciAJOgkzNwk6CTg0OS4zMTI4CitOb3J0aGFtcHRvbiAJOgkzNwk6CTE0MjYuMDc5OQorT25zbG93IAk6CTM3CToJMjM1My4xNzA0CitPcmFuZ2UgCToJMzcJOgkxMDM5LjEzMzkKK1BhbWxpY28gCToJMzcJOgkxNDY2LjUzNTcKK1Bhc3F1b3RhbmsgCToJMzcJOgk3NDkuNjQ5NgorUGVuZGVyIAk6CTM3CToJMjQxNS41Mzc2CitQZXJxdWltYW5zIAk6CTM3CToJODUxLjkyODcKK1BlcnNvbiAJOgkzNwk6CTEwNDYuNTkzMQorUGl0dCAJOgkzNwk6CTE2OTUuODU0MworUG9sayAJOgkzNwk6CTYxNy45NzQKK1JhbmRvbHBoIAk6CTM3CToJMjA0NS45MTg3CitSaWNobW9uZCAJOgkzNwk6CTEyNDIuMTEyMgorUm9iZXNvbiAJOgkzNwk6CTI0NjMuMTY3NworUm9ja2luZ2hhbSAJOgkzNwk6CTE0ODIuMzM0NworUm93YW4gCToJMzcJOgkxMzU2Ljc5NzQKK1J1dGhlcmZvcmQgCToJMzcJOgkxNDY1LjY4MQorU2FtcHNvbiAJOgkzNwk6CTI0NTMuODk1NQorU2NvdGxhbmQgCToJMzcJOgk4MzAuNDU3NgorU3Rhbmx5IAk6CTM3CToJMTA0Ny4wMzM0CitTdG9rZXMgCToJMzcJOgkxMTgwLjc1NTEKK1N1cnJ5IAk6CTM3CToJMTM5Mi44NzYxCitTd2FpbiAJOgkzNwk6CTE0MDAuMjU3NgorVHJhbnN5bHZhbmlhIAk6CTM3CToJOTg1LjY1MDQKK1R5cnJlbGwgCToJMzcJOgkxNTU0Ljc3NworVW5pb24gCToJMzcJOgkxNjU2LjUzODEKK1ZhbmNlIAk6CTM3CToJNjk4LjgzMzgKK1dha2UgCToJMzcJOgkyMjIwLjMwMzQKK1dhcnJlbiAJOgkzNwk6CTExNDkuNDQyCitXYXNoaW5ndG9uIAk6CTM3CToJMTA5OS4xNzAxCitXYXRhdWdhIAk6CTM3CToJODA5Ljk3MDcKK1dheW5lIAk6CTM3CToJMTQ0MS44MjcxCitXaWxrZXMgCToJMzcJOgkxOTY4LjIxODcKK1dpbHNvbiAJOgkzNwk6CTk2OS4zMzM0CitZYWRraW4gCToJMzcJOgk4NzQuMDk5MQorWWFuY2V5IAk6CTM3CToJODEwLjk1NDkKK0FkYW1zIAk6CTM4CToJMjU2MS4wOTU2CitCYXJuZXMgCToJMzgJOgkzOTE5LjI2NTcKK0JlbnNvbiAJOgkzOAk6CTM3MjcuNzA5MworQmlsbGluZ3MgCToJMzgJOgkyOTg3LjMwNgorQm90dGluZWF1IAk6CTM4CToJNDM5Ny4xNDY2CitCb3dtYW4gCToJMzgJOgkzMDIyLjUwNDEKK0J1cmtlIAk6CTM4CToJMjkyNC43ODM0CitCdXJsZWlnaCAJOgkzOAk6CTQzMjAuMjIzNgorQ2FzcyAJOgkzOAk6CTQ1NzguODg2OQorQ2F2YWxpZXIgCToJMzgJOgkzOTExLjI2MjYKK0RpY2tleSAJOgkzOAk6CTI5NTYuODk5NAorRGl2aWRlIAk6CTM4CToJMzM1MS45MjYyCitEdW5uIAk6CTM4CToJNTM5My4wMjc1CitFZGR5IAk6CTM4CToJMTY2OC41NTU3CitFbW1vbnMgCToJMzgJOgk0MDI2LjcyNDgKK0Zvc3RlciAJOgkzOAk6CTE2NzUuMDA0OAorR29sZGVuIFZhbGxleSAJOgkzOAk6CTI1OTYuMTEyNAorR3JhbmQgRm9ya3MgCToJMzgJOgkzNzI5LjE1OTcKK0dyYW50IAk6CTM4CToJNDMxNC43MzI4CitHcmlnZ3MgCToJMzgJOgkxODU0Ljg4MDMKK0hldHRpbmdlciAJOgkzOAk6CTI5MzYuMjgzCitLaWRkZXIgCToJMzgJOgkzNzEyLjAxMzkKK0xhTW91cmUgCToJMzgJOgkyOTgwLjU5NzkKK0xvZ2FuIAk6CTM4CToJMjYxOC42NzEzCitNY0hlbnJ5IAk6CTM4CToJNDk1MS4zMjg5CitNY0ludG9zaCAJOgkzOAk6CTI1NzcuMTUzNgorTWNLZW56aWUgCToJMzgJOgk3NDA5LjcwNTEKK01jTGVhbiAJOgkzOAk6CTYwMjkuOTYwMworTWVyY2VyIAk6CTM4CToJMjg4MS4xNjc4CitNb3J0b24gCToJMzgJOgk1MDM4LjI3NTIKK01vdW50cmFpbCAJOgkzOAk6CTUwMjcuMzk3MgorTmVsc29uIAk6CTM4CToJMjYxMi42MzY2CitPbGl2ZXIgCToJMzgJOgkxODkzLjc4MjEKK1BlbWJpbmEgCToJMzgJOgkyOTA1LjMwNjYKK1BpZXJjZSAJOgkzOAk6CTI4MDIuNzk0NAorUmFtc2V5IAk6CTM4CToJMzM2OS4yNzkyCitSYW5zb20gCToJMzgJOgkyMjM4LjA5NjcKK1JlbnZpbGxlIAk6CTM4CToJMjMxMC4zNTc3CitSaWNobGFuZCAJOgkzOAk6CTM3NDQuNDQwNworUm9sZXR0ZSAJOgkzOAk6CTI0MzIuODY0NworU2FyZ2VudCAJOgkzOAk6CTIyNDUuNzYzMQorU2hlcmlkYW4gCToJMzgJOgkyNjA0Ljk3MDIKK1Npb3V4IAk6CTM4CToJMjkyMi4yOTcKK1Nsb3BlIAk6CTM4CToJMzE1Ny43Nzk4CitTdGFyayAJOgkzOAk6CTM0NzEuNzkxNAorU3RlZWxlIAk6CTM4CToJMTg1My4xMTkxCitTdHV0c21hbiAJOgkzOAk6CTU5NTIuNDkzNAorVG93bmVyIAk6CTM4CToJMjY5Ny42NDA0CitUcmFpbGwgCToJMzgJOgkyMjMzLjk1MjcKK1dhbHNoIAk6CTM4CToJMzM1MS43NDQ5CitXYXJkIAk6CTM4CToJNTMyNS42ODc1CitXZWxscyAJOgkzOAk6CTMzNDIuNzA1OAorV2lsbGlhbXMgCToJMzgJOgk1NTYzLjI0MjMKK0FkYW1zIAk6CTM5CToJMTUxNy4xOTYxCitBbGxlbiAJOgkzOQk6CTEwNTMuODE5MgorQXNobGFuZCAJOgkzOQk6CTExMDUuNTQxNQorQXNodGFidWxhIAk6CTM5CToJMzU0NC4zMzczCitBdGhlbnMgCToJMzkJOgkxMzE3LjExODYKK0F1Z2xhaXplIAk6CTM5CToJMTA0MC40NTQ4CitCZWxtb250IAk6CTM5CToJMTQwMi4yMDAxCitCcm93biAJOgkzOQk6CTEyODIuNjE5OAorQnV0bGVyIAk6CTM5CToJMTIxNy44MTgKK0NhcnJvbGwgCToJMzkJOgkxMDMzLjQzNTkKK0NoYW1wYWlnbiAJOgkzOQk6CTExMTIuOTQ4OQorQ2xhcmsgCToJMzkJOgkxMDQ1LjIyMDQKK0NsZXJtb250IAk6CTM5CToJMTE4NS4zNjUzCitDbGludG9uIAk6CTM5CToJMTA2Ny44MzExCitDb2x1bWJpYW5hIAk6CTM5CToJMTM4Ni4xMTYyCitDb3Nob2N0b24gCToJMzkJOgkxNDcwLjAzMjIKK0NyYXdmb3JkIAk6CTM5CToJMTA0My4zMjk3CitDdXlhaG9nYSAJOgkzOQk6CTMyMjYuMDAwNAorRGFya2UgCToJMzkJOgkxNTU0Ljc1MTEKK0RlZmlhbmNlIAk6CTM5CToJMTA3Mi43NTIxCitEZWxhd2FyZSAJOgkzOQk6CTExODAuOTYyMworRXJpZSAJOgkzOQk6CTE2MjEuNzI4NQorRmFpcmZpZWxkIAk6CTM5CToJMTMxNy4yNzQKK0ZheWV0dGUgCToJMzkJOgkxMDU0LjMzNzIKK0ZyYW5rbGluIAk6CTM5CToJMTQwNy4xOTg4CitGdWx0b24gCToJMzkJOgkxMDU0Ljk1ODgKK0dhbGxpYSAJOgkzOQk6CTEyMjAuMjI2NworR2VhdWdhIAk6CTM5CToJMTA1Ny40NzExCitHcmVlbmUgCToJMzkJOgkxMDc3Ljk4MzkKK0d1ZXJuc2V5IAk6CTM5CToJMTM2OC4yNzExCitIYW1pbHRvbiAJOgkzOQk6CTEwNjkuMTAwMgorSGFuY29jayAJOgkzOQk6CTEzODIuMDI0CitIYXJkaW4gCToJMzkJOgkxMjE4LjY5ODYKK0hhcnJpc29uIAk6CTM5CToJMTA2My45NDYxCitIZW5yeSAJOgkzOQk6CTEwODcuNzQ4MgorSGlnaGxhbmQgCToJMzkJOgkxNDQ0LjgwNTYKK0hvY2tpbmcgCToJMzkJOgkxMDk3LjEyNAorSG9sbWVzIAk6CTM5CToJMTA5OC4yMTE4CitIdXJvbiAJOgkzOQk6CTEyODAuODA2OAorSmFja3NvbiAJOgkzOQk6CTEwOTEuNjg1CitKZWZmZXJzb24gCToJMzkJOgkxMDY0LjE1MzMKK0tub3ggCToJMzkJOgkxMzcxLjQ4MjcKK0xha2UgCToJMzkJOgkyNTM1LjI3MzMKK0xhd3JlbmNlIAk6CTM5CToJMTE4NC4zNTUyCitMaWNraW5nIAk6CTM5CToJMTc4Mi45MDQyCitMb2dhbiAJOgkzOQk6CTEyMDguOTYwMgorTG9yYWluIAk6CTM5CToJMjM5MC42MjE4CitMdWNhcyAJOgkzOQk6CTE1NDMuMzI5MgorTWFkaXNvbiAJOgkzOQk6CTEyMDcuNDA2MgorTWFob25pbmcgCToJMzkJOgkxMDk2LjU1NDIKK01hcmlvbiAJOgkzOQk6CTEwNDYuNzQ4NQorTWVkaW5hIAk6CTM5CToJMTA5NS44NTQ5CitNZWlncyAJOgkzOQk6CTExMTkuODY0MgorTWVyY2VyIAk6CTM5CToJMTIyNS44MjExCitNaWFtaSAJOgkzOQk6CTEwNTkuODc5OAorTW9ucm9lIAk6CTM5CToJMTE4NC44MjE0CitNb250Z29tZXJ5IAk6CTM5CToJMTIwMi42NDA2CitNb3JnYW4gCToJMzkJOgkxMDkyLjYxNzQKK01vcnJvdyAJOgkzOQk6CTEwNTUuMDYyNAorTXVza2luZ3VtIAk6CTM5CToJMTc0Mi4wMDgxCitOb2JsZSAJOgkzOQk6CTEwNDcuODg4MQorT3R0YXdhIAk6CTM5CToJMTUxNS40NjA4CitQYXVsZGluZyAJOgkzOQk6CTEwODQuOTUxCitQZXJyeSAJOgkzOQk6CTEwNjguNjA4MQorUGlja2F3YXkgCToJMzkJOgkxMzEyLjU4NjEKK1Bpa2UgCToJMzkJOgkxMTQ5LjgwNDYKK1BvcnRhZ2UgCToJMzkJOgkxMzEzLjQxNDkKK1ByZWJsZSAJOgkzOQk6CTExMDQuMTk0NworUHV0bmFtIAk6CTM5CToJMTI1NC4xNTU3CitSaWNobGFuZCAJOgkzOQk6CTEyOTUuODU0NworUm9zcyAJOgkzOQk6CTE3OTQuNzY2NAorU2FuZHVza3kgCToJMzkJOgkxMDgyLjAyNDMKK1NjaW90byAJOgkzOQk6CTE1OTUuNjIxMworU2VuZWNhIAk6CTM5CToJMTQzMC42MzgzCitTaGVsYnkgCToJMzkJOgkxMDY0LjU2NzcKK1N0YXJrIAk6CTM5CToJMTUwNC41NTY5CitTdW1taXQgCToJMzkJOgkxMDg3Ljk1NTQKK1RydW1idWxsIAk6CTM5CToJMTY0My45MjQ4CitUdXNjYXJhd2FzIAk6CTM5CToJMTQ4MC4xMzMyCitVbmlvbiAJOgkzOQk6CTExMzEuNzc4MgorVmFuIFdlcnQgCToJMzkJOgkxMDYzLjE2OTEKK1ZpbnRvbiAJOgkzOQk6CTEwNzQuNzQ2NAorV2FycmVuIAk6CTM5CToJMTA1NC40OTI2CitXYXNoaW5ndG9uIAk6CTM5CToJMTY1Ny45ODg1CitXYXluZSAJOgkzOQk6CTE0NDAuODQyOQorV2lsbGlhbXMgCToJMzkJOgkxMDk1LjY5OTUKK1dvb2QgCToJMzkJOgkxNjA3LjE5ODYKK1d5YW5kb3QgCToJMzkJOgkxMDU1LjczNTgKK0FkYWlyIAk6CTQwCToJMTQ5NC41MDc3CitBbGZhbGZhIAk6CTQwCToJMjI4Mi45Mjk2CitBdG9rYSAJOgk0MAk6CTI1NjQuMQorQmVhdmVyIAk6CTQwCToJNDcwNy41MzIyCitCZWNraGFtIAk6CTQwCToJMjM0MS43MjI2CitCbGFpbmUgCToJNDAJOgkyNDMxLjY5OTIKK0JyeWFuIAk6CTQwCToJMjQ0My40ODM3CitDYWRkbyAJOgk0MAk6CTMzNDEuOTAyOQorQ2FuYWRpYW4gCToJNDAJOgkyMzQ0LjM5MDMKK0NhcnRlciAJOgk0MAk6CTIxNTkuMzM0OAorQ2hlcm9rZWUgCToJNDAJOgkyMDEwLjg3NgorQ2hvY3RhdyAJOgk0MAk6CTIwNzMuNzYxMgorQ2ltYXJyb24gCToJNDAJOgk0NzY4LjYzMDMKK0NsZXZlbGFuZCAJOgk0MAk6CTE0NDYuMTAwNgorQ29hbCAJOgk0MAk6CTEzNTAuMTY3CitDb21hbmNoZSAJOgk0MAk6CTI4MDcuMDkzOAorQ290dG9uIAk6CTQwCToJMTY2Mi42MjQ2CitDcmFpZyAJOgk0MAk6CTE5NzUuNDE4OQorQ3JlZWsgCToJNDAJOgkyNTExLjcwNDMKK0N1c3RlciAJOgk0MAk6CTI1OTUuMTgKK0RlbGF3YXJlIAk6CTQwCToJMjA1Mi4xMzQ3CitEZXdleSAJOgk0MAk6CTI2MTEuMzkzNAorRWxsaXMgCToJNDAJOgkzMTkwLjQ2NTYKK0dhcmZpZWxkIAk6CTQwCToJMjc0NS4yNDQ2CitHYXJ2aW4gCToJNDAJOgkyMTA3LjM3OTQKK0dyYWR5IAk6CTQwCToJMjg2Mi43MjcKK0dyYW50IAk6CTQwCToJMjU5OS4zNDk5CitHcmVlciAJOgk0MAk6CTE2NjcuMDc5NAorSGFybW9uIAk6CTQwCToJMTM5NC44NzA0CitIYXJwZXIgCToJNDAJOgkyNjk2LjA4NjQKK0hhc2tlbGwgCToJNDAJOgkxNjE5LjQ0OTMKK0h1Z2hlcyAJOgk0MAk6CTIxMDkuOTE3NgorSmFja3NvbiAJOgk0MAk6CTIwODIuNzQ4NQorSmVmZmVyc29uIAk6CTQwCToJMjAwNC4yMTk3CitKb2huc3RvbiAJOgk0MAk6CTE3MDQuOTcxMQorS2F5IAk6CTQwCToJMjQ0Ny44NjA4CitLaW5nZmlzaGVyIAk6CTQwCToJMjM0Ni40MzY0CitLaW93YSAJOgk0MAk6CTI2NjkuNDA5NAorTGF0aW1lciAJOgk0MAk6CTE4ODguNDIwOAorTGUgRmxvcmUgCToJNDAJOgk0MTY0Ljc5NzcKK0xpbmNvbG4gCToJNDAJOgkyNTAwLjk1NTgKK0xvZ2FuIAk6CTQwCToJMTkzOS43MDI4CitMb3ZlIAk6CTQwCToJMTM3Ny43MjQ2CitNY0NsYWluIAk6CTQwCToJMTUwMi41MzY3CitNY0N1cnRhaW4gCToJNDAJOgk0OTI0LjQxODgKK01jSW50b3NoIAk6CTQwCToJMTg0NS4zMjMyCitNYWpvciAJOgk0MAk6CTI0ODAuODgzMworTWFyc2hhbGwgCToJNDAJOgkxMTA1LjgwMDUKK01heWVzIAk6CTQwCToJMTc3MC4yOTA5CitNdXJyYXkgCToJNDAJOgkxMTAwLjU0MjgKK011c2tvZ2VlIAk6CTQwCToJMjE3Mi45ODQxCitOb2JsZSAJOgk0MAk6CTE5MjIuOTE5NgorTm93YXRhIAk6CTQwCToJMTUwNC40NTMzCitPa2Z1c2tlZSAJOgk0MAk6CTE2MjguODc2OQorT2tsYWhvbWEgCToJNDAJOgkxODYwLjQyMjkKK09rbXVsZ2VlIAk6CTQwCToJMTgxOS4wMDg4CitPc2FnZSAJOgk0MAk6CTU5NjYuODQyCitPdHRhd2EgCToJNDAJOgkxMjU1LjQ1MDcKK1Bhd25lZSAJOgk0MAk6CTE1NDAuNzEzMworUGF5bmUgCToJNDAJOgkxODA1LjU2NjcKK1BpdHRzYnVyZyAJOgk0MAk6CTM1NjguNjMxNQorUG9udG90b2MgCToJNDAJOgkxODc4LjkxNTUKK1BvdHRhd2F0b21pZSAJOgk0MAk6CTIwNTQuNTQzNAorUHVzaG1hdGFoYSAJOgk0MAk6CTM2ODUuMDAwMgorUm9nZXIgTWlsbHMgCToJNDAJOgkyOTY5LjMzMTQKK1JvZ2VycyAJOgk0MAk6CTE4NDIuNjI5NgorU2VtaW5vbGUgCToJNDAJOgkxNjU5LjA3NjMKK1NlcXVveWFoIAk6CTQwCToJMTg1MS41MzkyCitTdGVwaGVucyAJOgk0MAk6CTIzMDguMDAwOAorVGV4YXMgCToJNDAJOgk1MzA2LjQxNzkKK1RpbGxtYW4gCToJNDAJOgkyMjc3LjE1MzkKK1R1bHNhIAk6CTQwCToJMTUyMC4zODE4CitXYWdvbmVyIAk6CTQwCToJMTUzMC42NjQxCitXYXNoaW5ndG9uIAk6CTQwCToJMTA5OC41NDg1CitXYXNoaXRhIAk6CTQwCToJMjYxMy40OTEzCitXb29kcyAJOgk0MAk6CTMzNDEuMjgxMworV29vZHdhcmQgCToJNDAJOgkzMjI3LjE2NTkKK0Jha2VyIAk6CTQxCToJNzk5OS4wMzM3CitCZW50b24gCToJNDEJOgkxNzU4LjUzMjMKK0NsYWNrYW1hcyAJOgk0MQk6CTQ4NjYuNjM1OQorQ2xhdHNvcCAJOgk0MQk6CTI4MDkuNTAyNQorQ29sdW1iaWEgCToJNDEJOgkxNzgyLjc3NDcKK0Nvb3MgCToJNDEJOgk0Njc4LjUyNDIKK0Nyb29rIAk6CTQxCToJNzczNy4zOTE5CitDdXJyeSAJOgk0MQk6CTUxNTAuMzk2MworRGVzY2h1dGVzIAk6CTQxCToJNzkxMS44NTQzCitEb3VnbGFzIAk6CTQxCToJMTMyOTYuNjE5NworR2lsbGlhbSAJOgk0MQk6CTMxNjcuMTU1NgorR3JhbnQgCToJNDEJOgkxMTczMC45Mzg4CitIYXJuZXkgCToJNDEJOgkyNjQ4Ni42MDkxCitIb29kIFJpdmVyIAk6CTQxCToJMTM4MS45MjA0CitKYWNrc29uIAk6CTQxCToJNzI1Ni41ODQzCitKZWZmZXJzb24gCToJNDEJOgk0NjM5LjEzMDMKK0pvc2VwaGluZSAJOgk0MQk6CTQyNTEuODIxNworS2xhbWF0aCAJOgk0MQk6CTE1ODkxLjU5MjUKK0xha2UgCToJNDEJOgkyMTY0OC40MzczCitMYW5lIAk6CTQxCToJMTIyMjkuNDM2MQorTGluY29sbiAJOgk0MQk6CTMwOTEuOTE2MQorTGlubiAJOgk0MQk6CTU5ODMuMjg4NQorTWFsaGV1ciAJOgk0MQk6CTI1NzE4LjY3NDEKK01hcmlvbiAJOgk0MQk6CTMwOTIuNzk2NworTW9ycm93IAk6CTQxCToJNTMwNS42OTI3CitNdWx0bm9tYWggCToJNDEJOgkxMjA2LjAzMzUKK1BvbGsgCToJNDEJOgkxOTI3LjM0ODUKK1NoZXJtYW4gCToJNDEJOgkyMTUyLjgwOAorVGlsbGFtb29rIAk6CTQxCToJMzQ1MS45MDAyCitVbWF0aWxsYSAJOgk0MQk6CTgzNjguOTM3NQorVW5pb24gCToJNDEJOgk1Mjc5Ljg0NDUKK1dhbGxvd2EgCToJNDEJOgk4MTYyLjg3NzEKK1dhc2NvIAk6CTQxCToJNjIwMy44Nzg4CitXYXNoaW5ndG9uIAk6CTQxCToJMTg4MS4zMjQyCitXaGVlbGVyIAk6CTQxCToJNDQ0My4wNDE0CitZYW1oaWxsIAk6CTQxCToJMTg2MC41NTI0CitBZGFtcyAJOgk0Mgk6CTEzNTAuNzM2OAorQWxsZWdoZW55IAk6CTQyCToJMTkyOC43OTg5CitBcm1zdHJvbmcgCToJNDIJOgkxNzIwLjg5OTYKK0JlYXZlciAJOgk0Mgk6CTExNDkuNzAxCitCZWRmb3JkIAk6CTQyCToJMjYzNS4wNjYKK0JlcmtzIAk6CTQyCToJMjI0Mi4wODUzCitCbGFpciAJOgk0Mgk6CTEzNjUuMjE0OQorQnJhZGZvcmQgCToJNDIJOgkzMDA3LjA2NzcKK0J1Y2tzIAk6CTQyCToJMTYxMS4yNjQ5CitCdXRsZXIgCToJNDIJOgkyMDU4LjUwNjEKK0NhbWJyaWEgCToJNDIJOgkxNzk1Ljk4MzcKK0NhbWVyb24gCToJNDIJOgkxMDMyLjM3NAorQ2FyYm9uIAk6CTQyCToJMTAwMi45MjU3CitDZW50cmUgCToJNDIJOgkyODc5LjY5MTUKK0NoZXN0ZXIgCToJNDIJOgkxOTY3LjkwNzkKK0NsYXJpb24gCToJNDIJOgkxNTc3LjE4MDUKK0NsZWFyZmllbGQgCToJNDIJOgkyOTg4LjM0MgorQ2xpbnRvbiAJOgk0Mgk6CTIzMjYuMDUzMQorQ29sdW1iaWEgCToJNDIJOgkxMjY4LjU1NjEKK0NyYXdmb3JkIAk6CTQyCToJMjY4Ny43NDY2CitDdW1iZXJsYW5kIAk6CTQyCToJMTQyNy40NTI2CitEYXVwaGluIAk6CTQyCToJMTQ0NC4wMDI3CitEZWxhd2FyZSAJOgk0Mgk6CTQ5NC4wMTY2CitFbGsgCToJNDIJOgkyMTU1LjQ3NTcKK0VyaWUgCToJNDIJOgk0MDM2LjI1NgorRmF5ZXR0ZSAJOgk0Mgk6CTIwNjYuODIKK0ZvcmVzdCAJOgk0Mgk6CTExMTcuMzI2CitGcmFua2xpbiAJOgk0Mgk6CTIwMDEuMTExNworRnVsdG9uIAk6CTQyCToJMTEzNC40OTc3CitHcmVlbmUgCToJNDIJOgkxNDk2Ljg5MDUKK0h1bnRpbmdkb24gCToJNDIJOgkyMzAyLjU4NzcKK0luZGlhbmEgCToJNDIJOgkyMTYwLjgxMTEKK0plZmZlcnNvbiAJOgk0Mgk6CTE3MDEuMjkzMworSnVuaWF0YSAJOgk0Mgk6CTEwMTkuMzQ2MworTGFja2F3YW5uYSAJOgk0Mgk6CTEyMDMuMDgwOQorTGFuY2FzdGVyIAk6CTQyCToJMjU0OC4wNjc5CitMYXdyZW5jZSAJOgk0Mgk6CTkzOS41NDg0CitMZWJhbm9uIAk6CTQyCToJOTM5LjEzNAorTGVoaWdoIAk6CTQyCToJOTAyLjIwMDYKK0x1emVybmUgCToJNDIJOgkyMzQ5LjQ2NjcKK0x5Y29taW5nIAk6CTQyCToJMzIyMS4zNjQzCitNY0tlYW4gCToJNDIJOgkyNTQ5LjAwMDMKK01lcmNlciAJOgk0Mgk6CTE3NjcuODU2MworTWlmZmxpbiAJOgk0Mgk6CTEwNzMuODE0CitNb25yb2UgCToJNDIJOgkxNTk5LjExNzgKK01vbnRnb21lcnkgCToJNDIJOgkxMjYyLjQ5NTUKK01vbnRvdXIgCToJNDIJOgkzNDIuNjU3CitOb3J0aGFtcHRvbiAJOgk0Mgk6CTk3Ny4zNjI0CitOb3J0aHVtYmVybGFuZCAJOgk0Mgk6CTEyMzYuNDE0MgorUGVycnkgCToJNDIJOgkxNDM5LjQ0NDMKK1BoaWxhZGVscGhpYSAJOgk0Mgk6CTM2OS40Mzc2CitQaWtlIAk6CTQyCToJMTQ2Ny41OTc2CitQb3R0ZXIgCToJNDIJOgkyODAwLjg3NzgKK1NjaHV5bGtpbGwgCToJNDIJOgkyMDI2Ljk1OTkKK1NueWRlciAJOgk0Mgk6CTg2MC4yOTQ0CitTb21lcnNldCAJOgk0Mgk6CTI4MDAuMjMwMworU3VsbGl2YW4gCToJNDIJOgkxMTcxLjU4NjUKK1N1c3F1ZWhhbm5hIAk6CTQyCToJMjE1NS45MTYKK1Rpb2dhIAk6CTQyCToJMjk0NS42MDcKK1VuaW9uIAk6CTQyCToJODIxLjM0MDgKK1ZlbmFuZ28gCToJNDIJOgkxNzY5LjAyMTgKK1dhcnJlbiAJOgk0Mgk6CTIzMjUuMzI3OQorV2FzaGluZ3RvbiAJOgk0Mgk6CTIyMjkuODYwNQorV2F5bmUgCToJNDIJOgkxOTQzLjg5ODYKK1dlc3Rtb3JlbGFuZCAJOgk0Mgk6CTI2ODQuMTIwNgorV3lvbWluZyAJOgk0Mgk6CTEwNDguNDA2MQorWW9yayAJOgk0Mgk6CTIzNTcuNTQ3NQorQnJpc3RvbCAJOgk0NAk6CTExNS43OTg5CitLZW50IAk6CTQ0CToJNDg3LjE3OQorTmV3cG9ydCAJOgk0NAk6CTgxMi4zMjc2CitQcm92aWRlbmNlIAk6CTQ0CToJMTEyOC43NzM4CitXYXNoaW5ndG9uIAk6CTQ0CToJMTQ1Ny41NzQzCitBYmJldmlsbGUgCToJNDUJOgkxMzIzLjYxOTUKK0Fpa2VuIAk6CTQ1CToJMjc5OC4zOTE0CitBbGxlbmRhbGUgCToJNDUJOgkxMDY4LjU4MjIKK0FuZGVyc29uIAk6CTQ1CToJMTk2MS43OTU1CitCYW1iZXJnIAk6CTQ1CToJMTAyNC4yNjczCitCYXJud2VsbCAJOgk0NQk6CTE0NDMuMjc3NQorQmVhdWZvcnQgCToJNDUJOgkyMzkwLjI1OTIKK0JlcmtlbGV5IAk6CTQ1CToJMzE4MC43MDEzCitDYWxob3VuIAk6CTQ1CToJMTAxNi4xNjA2CitDaGFybGVzdG9uIAk6CTQ1CToJMzUxNy41MDQ5CitDaGVyb2tlZSAJOgk0NQk6CTEwMjguOTU1MgorQ2hlc3RlciAJOgk0NQk6CTE1MTguMTU0NAorQ2hlc3RlcmZpZWxkIAk6CTQ1CToJMjA4Ni45NzAyCitDbGFyZW5kb24gCToJNDUJOgkxODAxLjc1OTQKK0NvbGxldG9uIAk6CTQ1CToJMjkzNS4wMTM5CitEYXJsaW5ndG9uIAk6CTQ1CToJMTQ2Ny45NjAyCitEaWxsb24gCToJNDUJOgkxMDUyLjkzODYKK0RvcmNoZXN0ZXIgCToJNDUJOgkxNDkzLjYyNzEKK0VkZ2VmaWVsZCAJOgk0NQk6CTEzMTEuOTM4NgorRmFpcmZpZWxkIAk6CTQ1CToJMTgzOC43MTg3CitGbG9yZW5jZSAJOgk0NQk6CTIwODEuNjg2NgorR2VvcmdldG93biAJOgk0NQk6CTI2ODAuNjUKK0dyZWVudmlsbGUgCToJNDUJOgkyMDU4Ljk0NjQKK0dyZWVud29vZCAJOgk0NQk6CTExOTkuMDE0NgorSGFtcHRvbiAJOgk0NQk6CTE0NTcuMjExNworSG9ycnkgCToJNDUJOgkzMjUwLjM0NjQKK0phc3BlciAJOgk0NQk6CTE4MTIuNDU2MQorS2Vyc2hhdyAJOgk0NQk6CTE5MTcuMjQ3NQorTGFuY2FzdGVyIAk6CTQ1CToJMTQzOC4yMDExCitMYXVyZW5zIAk6CTQ1CToJMTg3NS4xMDgyCitMZWUgCToJNDUJOgkxMDY1LjI2NworTGV4aW5ndG9uIAk6CTQ1CToJMTk2Mi45MDkyCitNY0Nvcm1pY2sgCToJNDUJOgkxMDIwLjA3MTUKK01hcmlvbiAJOgk0NQk6CTEyNzkuNjkzMQorTWFybGJvcm8gCToJNDUJOgkxMjU2Ljg3NTIKK05ld2JlcnJ5IAk6CTQ1CToJMTY3Ni40NTUyCitPY29uZWUgCToJNDUJOgkxNzQ0LjU3MjIKK09yYW5nZWJ1cmcgCToJNDUJOgkyOTIxLjc1MzEKK1BpY2tlbnMgCToJNDUJOgkxMzI1LjY5MTUKK1JpY2hsYW5kIAk6CTQ1CToJMTk5OC43NTQ4CitTYWx1ZGEgCToJNDUJOgkxMTk2LjAxMDIKK1NwYXJ0YW5idXJnIAk6CTQ1CToJMjEyMS41NzI2CitTdW10ZXIgCToJNDUJOgkxNzY2LjQ1NzcKK1VuaW9uIAk6CTQ1CToJMTMzNi4yMzI4CitXaWxsaWFtc2J1cmcgCToJNDUJOgkyNDI2LjYyMjgKK1lvcmsgCToJNDUJOgkxODAxLjkxNDgKK0F1cm9yYSAJOgk0Ngk6CTE4NDUuNDUyNworQmVhZGxlIAk6CTQ2CToJMzI3NS44ODM4CitCZW5uZXR0IAk6CTQ2CToJMzA4My42MjgxCitCb24gSG9tbWUgCToJNDYJOgkxNTA1LjYxODgKK0Jyb29raW5ncyAJOgk0Ngk6CTIwODQuMzI4NAorQnJvd24gCToJNDYJOgk0NDgzLjgzMzkKK0JydWxlIAk6CTQ2CToJMjE5Mi40MDkxCitCdWZmYWxvIAk6CTQ2CToJMTI2Mi40NDM3CitCdXR0ZSAJOgk0Ngk6CTU4NjkuODcyNAorQ2FtcGJlbGwgCToJNDYJOgkxOTk3Ljc3MDYKK0NoYXJsZXMgTWl4IAk6CTQ2CToJMjk3OC45OTIxCitDbGFyayAJOgk0Ngk6CTI1MDYuNTc2MQorQ2xheSAJOgk0Ngk6CTEwNzkuMjUzCitDb2Rpbmd0b24gCToJNDYJOgkxODU3LjIzNzIKK0NvcnNvbiAJOgk0Ngk6CTY1NTEuMTk3OAorQ3VzdGVyIAk6CTQ2CToJNDAzOC4xNzI2CitEYXZpc29uIAk6CTQ2CToJMTEzMS4yNjAyCitEYXkgCToJNDYJOgkyODI2LjIzMzkKK0RldWVsIAk6CTQ2CToJMTY0OS4xMDQ4CitEZXdleSAJOgk0Ngk6CTYzMzQuMjg1MworRG91Z2xhcyAJOgk0Ngk6CTExMjQuMzk2NworRWRtdW5kcyAJOgk0Ngk6CTI5ODEuNTA0NAorRmFsbCBSaXZlciAJOgk0Ngk6CTQ1MzAuMjcyNgorRmF1bGsgCToJNDYJOgkyNjA0LjczNzEKK0dyYW50IAk6CTQ2CToJMTc4MS42ODY5CitHcmVnb3J5IAk6CTQ2CToJMjcyOC40MzU1CitIYWFrb24gCToJNDYJOgk0NzMyLjQ5OTgKK0hhbWxpbiAJOgk0Ngk6CTEzOTMuMzE2NAorSGFuZCAJOgk0Ngk6CTM3MzAuMTQzOQorSGFuc29uIAk6CTQ2CToJMTEyOC4zMDc2CitIYXJkaW5nIAk6CTQ2CToJNjkzNC45MzIyCitIdWdoZXMgCToJNDYJOgkyMDcyLjc1MTEKK0h1dGNoaW5zb24gCToJNDYJOgkyMTA5LjIxODMKK0h5ZGUgCToJNDYJOgkyMjQ0LjQ2ODEKK0phY2tzb24gCToJNDYJOgk0ODQ2LjUxMTYKK0plcmF1bGQgCToJNDYJOgkxMzc5LjUxMTcKK0pvbmVzIAk6CTQ2CToJMjUxNi41OTk0CitLaW5nc2J1cnkgCToJNDYJOgkyMjM2LjkwNTMKK0xha2UgCToJNDYJOgkxNDg5LjQwNTQKK0xhd3JlbmNlIAk6CTQ2CToJMjA3Mi44MDI5CitMaW5jb2xuIAk6CTQ2CToJMTQ5OC41NDgxCitMeW1hbiAJOgk0Ngk6CTQ0MjEuMjg1NAorTWNDb29rIAk6CTQ2CToJMTQ5NC44NDQ0CitNY1BoZXJzb24gCToJNDYJOgkyOTgzLjI5MTUKK01hcnNoYWxsIAk6CTQ2CToJMjI5My43ODE3CitNZWFkZSAJOgk0Ngk6CTkwMTkuNTcxNAorTWVsbGV0dGUgCToJNDYJOgkzMzkyLjI1MjUKK01pbmVyIAk6CTQ2CToJMTQ4MS40NTQxCitNaW5uZWhhaGEgCToJNDYJOgkyMTA3LjQ1NzEKK01vb2R5IAk6CTQ2CToJMTM0OS42NDkKK1Blbm5pbmd0b24gCToJNDYJOgk3MjExLjM2MjkKK1BlcmtpbnMgCToJNDYJOgk3NDg2LjkzODkKK1BvdHRlciAJOgk0Ngk6CTIzMjYuOTMzNworUm9iZXJ0cyAJOgk0Ngk6CTI5NDAuNTU2NQorU2FuYm9ybiAJOgk0Ngk6CTE0NzYuODQzOQorU2hhbm5vbiAJOgk0Ngk6CTU0MzAuMzIzNQorU3BpbmsgCToJNDYJOgkzOTExLjAyOTUKK1N0YW5sZXkgCToJNDYJOgkzOTI5LjAwNDEKK1N1bGx5IAk6CTQ2CToJMjc3Mi4yMzI0CitUb2RkIAk6CTQ2CToJMzYwMi40MzEKK1RyaXBwIAk6CTQ2CToJNDE4OS4wNjYKK1R1cm5lciAJOgk0Ngk6CTE1OTkuMTk1NQorVW5pb24gCToJNDYJOgkxMjA5LjczNzIKK1dhbHdvcnRoIAk6CTQ2CToJMTkyNy41Mjk4CitZYW5rdG9uIAk6CTQ2CToJMTM3OS40ODU4CitaaWViYWNoIAk6CTQ2CToJNTEwNS4wMTk1CitBbmRlcnNvbiAJOgk0Nwk6CTg5My4wODM4CitCZWRmb3JkIAk6CTQ3CToJMTIyOS44MDk3CitCZW50b24gCToJNDcJOgkxMTI5Ljc1OAorQmxlZHNvZSAJOgk0Nwk6CTEwNTMuMzc4OQorQmxvdW50IAk6CTQ3CToJMTQ2Ny42MjM1CitCcmFkbGV5IAk6CTQ3CToJODU4LjU4NQorQ2FtcGJlbGwgCToJNDcJOgkxMjkwLjQ2NzUKK0Nhbm5vbiAJOgk0Nwk6CTY4OC4xODg5CitDYXJyb2xsIAk6CTQ3CToJMTU1My42Mzc0CitDYXJ0ZXIgCToJNDcJOgk5MDAuMzM1OAorQ2hlYXRoYW0gCToJNDcJOgk3OTUuNDY2NworQ2hlc3RlciAJOgk0Nwk6CTc0Ny44MzY2CitDbGFpYm9ybmUgCToJNDcJOgkxMTQzLjYxNDUKK0NsYXkgCToJNDcJOgk2NzEuNDU3NQorQ29ja2UgCToJNDcJOgkxMTQ3Ljc1ODUKK0NvZmZlZSAJOgk0Nwk6CTExMjUuMjUxNAorQ3JvY2tldHQgCToJNDcJOgk2ODcuNTY3MworQ3VtYmVybGFuZCAJOgk0Nwk6CTE3NzQuMDIwNQorRGF2aWRzb24gCToJNDcJOgkxMzYyLjYyNDkKK0RlY2F0dXIgCToJNDcJOgk4OTMuMzE2OQorRGVLYWxiIAk6CTQ3CToJODUyLjA1ODIKK0RpY2tzb24gCToJNDcJOgkxMjcyLjQxNTIKK0R5ZXIgCToJNDcJOgkxMzYzLjU4MzIKK0ZheWV0dGUgCToJNDcJOgkxODI5LjEzNTcKK0ZlbnRyZXNzIAk6CTQ3CToJMTI5Mi4zMzIzCitGcmFua2xpbiAJOgk0Nwk6CTE0OTEuMjQ0MworR2lic29uIAk6CTQ3CToJMTU2My4yOTgxCitHaWxlcyAJOgk0Nwk6CTE1ODIuOTMwMworR3JhaW5nZXIgCToJNDcJOgk3ODMuMzE5NgorR3JlZW5lIAk6CTQ3CToJMTYxNi40NDQ5CitHcnVuZHkgCToJNDcJOgk5MzUuMzUyNgorSGFtYmxlbiAJOgk0Nwk6CTQ1NS4yNDQzCitIYW1pbHRvbiAJOgk0Nwk6CTE0OTEuMTE0OAorSGFuY29jayAJOgk0Nwk6CTU3OC44NjUKK0hhcmRlbWFuIAk6CTQ3CToJMTczNi4zMTAxCitIYXJkaW4gCToJNDcJOgkxNTQ0LjQ0MjkKK0hhd2tpbnMgCToJNDcJOgkxMjk0LjA0MTcKK0hheXdvb2QgCToJNDcJOgkxMzgzLjQ0ODUKK0hlbmRlcnNvbiAJOgk0Nwk6CTEzNjIuMTA2OQorSGVucnkgCToJNDcJOgkxNTM3LjAzNTUKK0hpY2ttYW4gCToJNDcJOgkxNTg2Ljg5MworSG91c3RvbiAJOgk0Nwk6CTUzNS45MjI4CitIdW1waHJleXMgCToJNDcJOgkxNDQxLjkwNDgKK0phY2tzb24gCToJNDcJOgk4MjcuNjYwNAorSmVmZmVyc29uIAk6CTQ3CToJODE0LjExNDcKK0pvaG5zb24gCToJNDcJOgk3ODQuMDcwNworS25veCAJOgk0Nwk6CTEzNjEuNzcwMgorTGFrZSAJOgk0Nwk6CTUwMS45MTYxCitMYXVkZXJkYWxlIAk6CTQ3CToJMTMxMy40OTI2CitMYXdyZW5jZSAJOgk0Nwk6CTE2MDAuMzg2OQorTGV3aXMgCToJNDcJOgk3MzEuNjIzMgorTGluY29sbiAJOgk0Nwk6CTE0NzcuOTMxNworTG91ZG9uIAk6CTQ3CToJNjQwLjUzMjkKK01jTWlubiAJOgk0Nwk6CTExMTkuNDQ5OAorTWNOYWlyeSAJOgk0Nwk6CTE0NTIuNTc1NgorTWFjb24gCToJNDcJOgk3OTUuNjIyMQorTWFkaXNvbiAJOgk0Nwk6CTE0NDYuODUxNworTWFyaW9uIAk6CTQ3CToJMTMyNi45MDg4CitNYXJzaGFsbCAJOgk0Nwk6CTk3NC4wOTkKK01hdXJ5IAk6CTQ3CToJMTU5NC4xOTY4CitNZWlncyAJOgk0Nwk6CTU2MS40NjAyCitNb25yb2UgCToJNDcJOgkxNjkwLjE4MjIKK01vbnRnb21lcnkgCToJNDcJOgkxNDA4LjU0NTYKK01vb3JlIAk6CTQ3CToJMzM3LjY4NDIKK01vcmdhbiAJOgk0Nwk6CTEzNTMuMDE2CitPYmlvbiAJOgk0Nwk6CTE0MzguMzU2NQorT3ZlcnRvbiAJOgk0Nwk6CTExMjYuMTgzOAorUGVycnkgCToJNDcJOgkxMDk1LjMxMQorUGlja2V0dCAJOgk0Nwk6CTQ1Mi4xNjIyCitQb2xrIAk6CTQ3CToJMTE0NS42ODY1CitQdXRuYW0gCToJNDcJOgkxMDQyLjYzMDQKK1JoZWEgCToJNDcJOgk4NzEuMjUwMQorUm9hbmUgCToJNDcJOgkxMDIyLjk5ODIKK1JvYmVydHNvbiAJOgk0Nwk6CTEyMzQuNTc1MworUnV0aGVyZm9yZCAJOgk0Nwk6CTE2MTYuMDA0NgorU2NvdHQgCToJNDcJOgkxMzgxLjAzOTgKK1NlcXVhdGNoaWUgCToJNDcJOgk2ODguOTkxOAorU2V2aWVyIAk6CTQ3CToJMTU0OC4xMjA3CitTaGVsYnkgCToJNDcJOgkyMDI5LjYwMTcKK1NtaXRoIAk6CTQ3CToJODQyLjY1NjUKK1N0ZXdhcnQgCToJNDcJOgkxMjc3LjM4OAorU3VsbGl2YW4gCToJNDcJOgkxMTEyLjg5NzEKK1N1bW5lciAJOgk0Nwk6CTE0MDYuNjgwOAorVGlwdG9uIAk6CTQ3CToJMTIyOS41MjQ4CitUcm91c2RhbGUgCToJNDcJOgkzMDIuMDk3NgorVW5pY29pIAk6CTQ3CToJNDgzLjAwOTEKK1VuaW9uIAk6CTQ3CToJNjQwLjA2NjcKK1ZhbiBCdXJlbiAJOgk0Nwk6CTcxMS4xODgxCitXYXJyZW4gCToJNDcJOgkxMTI0LjI2NzIKK1dhc2hpbmd0b24gCToJNDcJOgk4NTQuMTgyCitXYXluZSAJOgk0Nwk6CTE5MDUuMTc4MQorV2Vha2xleSAJOgk0Nwk6CTE1MDYuODg3OQorV2hpdGUgCToJNDcJOgk5ODIuNjIwMQorV2lsbGlhbXNvbiAJOgk0Nwk6CTE1MTEuNTc1OAorV2lsc29uIAk6CTQ3CToJMTUxMC40ODgKK0FuZGVyc29uIAk6CTQ4CToJMjc5MS44OTA1CitBbmRyZXdzIAk6CTQ4CToJMzg4Ny41NjQxCitBbmdlbGluYSAJOgk0OAk6CTIyMzguOTI1NQorQXJhbnNhcyAJOgk0OAk6CTEzNjcuMzkwNQorQXJjaGVyIAk6CTQ4CToJMjM5Ny43NzAyCitBcm1zdHJvbmcgCToJNDgJOgkyMzY2Ljc2NzkKK0F0YXNjb3NhIAk6CTQ4CToJMzIwMC4yMjk5CitBdXN0aW4gCToJNDgJOgkxNjk5Ljk5ODMKK0JhaWxleSAJOgk0OAk6CTIxNDIuOTE0MgorQmFuZGVyYSAJOgk0OAk6CTIwNjUuNjI4NgorQmFzdHJvcCAJOgk0OAk6CTIzMjAuNDMyOAorQmF5bG9yIAk6CTQ4CToJMjMzMy42MTU5CitCZWUgCToJNDgJOgkyMjgwLjAwMjkKK0JlbGwgCToJNDgJOgkyODE3LjczODcKK0JleGFyIAk6CTQ4CToJMzI1NC43NDk0CitCbGFuY28gCToJNDgJOgkxODQ3LjczMTkKK0JvcmRlbiAJOgk0OAk6CTIzNDYuNjQzNgorQm9zcXVlIAk6CTQ4CToJMjU5Ni44MTE3CitCb3dpZSAJOgk0OAk6CTIzODkuOTc0MworQnJhem9yaWEgCToJNDgJOgk0MTM3LjM2OTYKK0JyYXpvcyAJOgk0OAk6CTE1MjguODUxMQorQnJld3N0ZXIgCToJNDgJOgkxNjAzOS4zMDAyCitCcmlzY29lIAk6CTQ4CToJMjMzNS4xMTgxCitCcm9va3MgCToJNDgJOgkyNDQzLjk0OTkKK0Jyb3duIAk6CTQ4CToJMjQ3OC40NzQ2CitCdXJsZXNvbiAJOgk0OAk6CTE3NTUuNDUwMgorQnVybmV0IAk6CTQ4CToJMjY0NC4yODY0CitDYWxkd2VsbCAJOgk0OAk6CTE0MTcuNzkxOQorQ2FsaG91biAJOgk0OAk6CTI2NzMuMjk0NAorQ2FsbGFoYW4gCToJNDgJOgkyMzM0LjI2MzQKK0NhbWVyb24gCToJNDgJOgkzMzA1LjY5NDcKK0NhbXAgCToJNDgJOgk1MjYuMjg4CitDYXJzb24gCToJNDgJOgkyMzkzLjQxOQorQ2FzcyAJOgk0OAk6CTI0ODcuMzA2NQorQ2FzdHJvIAk6CTQ4CToJMjMyOS4yMzg4CitDaGFtYmVycyAJOgk0OAk6CTIyNTguNDU0MQorQ2hlcm9rZWUgCToJNDgJOgkyNzUwLjM5ODcKK0NoaWxkcmVzcyAJOgk0OAk6CTE4NDguMjQ5OQorQ2xheSAJOgk0OAk6CTI4OTAuODgwMworQ29jaHJhbiAJOgk0OAk6CTIwMDguMDUyOQorQ29rZSAJOgk0OAk6CTI0MDMuNDQyMworQ29sZW1hbiAJOgk0OAk6CTMzMTguOTU1NQorQ29sbGluIAk6CTQ4CToJMjI5NC4zNTE1CitDb2xsaW5nc3dvcnRoIAk6CTQ4CToJMjM4MS4zNDk2CitDb2xvcmFkbyAJOgk0OAk6CTI1MjEuNTk4MQorQ29tYWwgCToJNDgJOgkxNDg4LjE4ODEKK0NvbWFuY2hlIAk6CTQ4CToJMjQ1NC40NjUzCitDb25jaG8gCToJNDgJOgkyNTczLjY1NzEKK0Nvb2tlIAk6CTQ4CToJMjMyNy45MTc5CitDb3J5ZWxsIAk6CTQ4CToJMjczNi45MzA3CitDb3R0bGUgCToJNDgJOgkyMzM1LjExODEKK0NyYW5lIAk6CTQ4CToJMjAzNC42NzgxCitDcm9ja2V0dCAJOgk0OAk6CTcyNzEuMjQzNworQ3Jvc2J5IAk6CTQ4CToJMjMzNS4zNzcxCitDdWxiZXJzb24gCToJNDgJOgk5ODc0LjkxODkKK0RhbGxhbSAJOgk0OAk6CTM4OTguNjIzNAorRGFsbGFzIAk6CTQ4CToJMjM1My4xNzA0CitEYXdzb24gCToJNDgJOgkyMzM2LjQ5MDgKK0RlYWYgU21pdGggCToJNDgJOgkzODgwLjQ5MzQKK0RlbHRhIAk6CTQ4CToJNzE5LjgxMjgKK0RlbnRvbiAJOgk0OAk6CTI0ODAuOTA5MgorRGVXaXR0IAk6CTQ4CToJMjM1OC4xMTczCitEaWNrZW5zIAk6CTQ4CToJMjM0NC40OTM5CitEaW1taXQgCToJNDgJOgkzNDU2LjMwMzIKK0RvbmxleSAJOgk0OAk6CTI0MTYuNTk5NQorRHV2YWwgCToJNDgJOgk0NjUwLjc4NTMKK0Vhc3RsYW5kIAk6CTQ4CToJMjQxMy42MjEKK0VjdG9yIAk6CTQ4CToJMjMzNS4zNTEyCitFZHdhcmRzIAk6CTQ4CToJNTQ5MC42NzA1CitFbGxpcyAJOgk0OAk6CTI0NjQuNzk5NAorRWwgUGFzbyAJOgk0OAk6CTI2MjguMDIxMgorRXJhdGggCToJNDgJOgkyODIyLjU4MgorRmFsbHMgCToJNDgJOgkyMDA0LjE2NzkKK0Zhbm5pbiAJOgk0OAk6CTIzMjguODI0NAorRmF5ZXR0ZSAJOgk0OAk6CTI0ODUuOTg1NgorRmlzaGVyIAk6CTQ4CToJMjMzNS41MDY2CitGbG95ZCAJOgk0OAk6CTI1NzAuNjAwOQorRm9hcmQgCToJNDgJOgkxODMyLjkxNzEKK0ZvcnQgQmVuZCAJOgk0OAk6CTIyOTQuODY5NQorRnJhbmtsaW4gCToJNDgJOgk3NjMuNDU0MworRnJlZXN0b25lIAk6CTQ4CToJMjMxMC42MTY3CitGcmlvIAk6CTQ4CToJMjkzNy43ODUyCitHYWluZXMgCToJNDgJOgkzODkyLjM1NTYKK0dhbHZlc3RvbiAJOgk0OAk6CTIyNjAuODg4NworR2FyemEgCToJNDgJOgkyMzIxLjEzMjEKK0dpbGxlc3BpZSAJOgk0OAk6CTI3NDkuMjMzMgorR2xhc3Njb2NrIAk6CTQ4CToJMjMzMy40MDg3CitHb2xpYWQgCToJNDgJOgkyMjI1LjcxNjUKK0dvbnphbGVzIAk6CTQ4CToJMjc3MC44MzM4CitHcmF5IAk6CTQ4CToJMjQwNi43NTc1CitHcmF5c29uIAk6CTQ4CToJMjUzNi4xMDIxCitHcmVnZyAJOgk0OAk6CTcxNS43OTgzCitHcmltZXMgCToJNDgJOgkyMDc1LjAwNDQKK0d1YWRhbHVwZSAJOgk0OAk6CTE4NDkuNzAwMworSGFsZSAJOgk0OAk6CTI2MDIuMzU0MworSGFsbCAJOgk0OAk6CTIzNDEuNTY3MgorSGFtaWx0b24gCToJNDgJOgkyMTY2LjIyNDIKK0hhbnNmb3JkIAk6CTQ4CToJMjM4My44MzYKK0hhcmRlbWFuIAk6CTQ4CToJMTgwNS4yMworSGFyZGluIAk6CTQ4CToJMjMyNC4xODgzCitIYXJyaXMgCToJNDgJOgk0NjA0LjIxNzEKK0hhcnJpc29uIAk6CTQ4CToJMjM3MC4wODMxCitIYXJ0bGV5IAk6CTQ4CToJMzc4OS42ODgKK0hhc2tlbGwgCToJNDgJOgkyMzU3LjU0NzUKK0hheXMgCToJNDgJOgkxNzYwLjY1NjEKK0hlbXBoaWxsIAk6CTQ4CToJMjM2Mi4yMzU0CitIZW5kZXJzb24gCToJNDgJOgkyNDU3LjkxCitIaWRhbGdvIAk6CTQ4CToJNDA5OS4wODk0CitIaWxsIAk6CTQ4CToJMjU1Mi44MzM1CitIb2NrbGV5IAk6CTQ4CToJMjM1My4xNDQ1CitIb29kIAk6CTQ4CToJMTEzMS4zMTIKK0hvcGtpbnMgCToJNDgJOgkyMDUzLjE5NjYKK0hvdXN0b24gCToJNDgJOgkzMjAzLjM4OTcKK0hvd2FyZCAJOgk0OAk6CTIzNDEuODUyMQorSHVkc3BldGggCToJNDgJOgkxMTg0MS4yOTg3CitIdW50IAk6CTQ4CToJMjI4NC40MzE4CitIdXRjaGluc29uIAk6CTQ4CToJMjMxNy45MjA1CitJcmlvbiAJOgk0OAk6CTI3MjMuNjE4MQorSmFjayAJOgk0OAk6CTIzODMuMDg0OQorSmFja3NvbiAJOgk0OAk6CTIyMTkuNzA3NworSmFzcGVyIAk6CTQ4CToJMjUxMS4zMTU4CitKZWZmIERhdmlzIAk6CTQ4CToJNTg2NS4zMTQKK0plZmZlcnNvbiAJOgk0OAk6CTI4NzguMTYzNAorSmltIEhvZ2cgCToJNDgJOgkyOTQyLjY1NDQKK0ppbSBXZWxscyAJOgk0OAk6CTIyNDguNjg5OAorSm9obnNvbiAJOgk0OAk6CTE5MDIuMjUxNAorSm9uZXMgCToJNDgJOgkyNDI3LjE2NjcKK0thcm5lcyAJOgk0OAk6CTE5NTEuNzcyMgorS2F1Zm1hbiAJOgk0OAk6CTIwODkuNjM3OQorS2VuZGFsbCAJOgk0OAk6CTE3MTcuMjczNgorS2VuZWR5IAk6CTQ4CToJNTAzOS4xMDQKK0tlbnQgCToJNDgJOgkyMzM4LjUzNjkKK0tlcnIgCToJNDgJOgkyODY4LjgzOTQKK0tpbWJsZSAJOgk0OAk6CTMyMzkuODgyOAorS2luZyAJOgk0OAk6CTIzNjUuNTI0NworS2lubmV5IAk6CTQ4CToJMzUzNi4xNTI5CitLbGViZXJnIAk6CTQ4CToJMjgyMy44NTExCitLbm94IAk6CTQ4CToJMjIxNS41NjM3CitMYW1hciAJOgk0OAk6CTI0MTUuMDk3MworTGFtYiAJOgk0OAk6CTI2MzUuOTIwNworTGFtcGFzYXMgCToJNDgJOgkxODQ5LjE1NjQKK0xhIFNhbGxlIAk6CTQ4CToJMzg3MC4wNTU3CitMYXZhY2EgCToJNDgJOgkyNTEzLjIwNjUKK0xlZSAJOgk0OAk6CTE2NDIuMTM3NworTGVvbiAJOgk0OAk6CTI3OTguMTg0MgorTGliZXJ0eSAJOgk0OAk6CTMwNDYuNDA5OAorTGltZXN0b25lIAk6CTQ4CToJMjQxNi44NTg1CitMaXBzY29tYiAJOgk0OAk6CTI0MTQuNDQ5OAorTGl2ZSBPYWsgCToJNDgJOgkyNzk0LjE2OTcKK0xsYW5vIAk6CTQ4CToJMjUwMi40MDYyCitMb3ZpbmcgCToJNDgJOgkxNzUzLjA0MTUKK0x1YmJvY2sgCToJNDgJOgkyMzMyLjgxMworTHlubiAJOgk0OAk6CTIzMTQuMDYxNAorTWNDdWxsb2NoIAk6CTQ4CToJMjc3OS45NzY1CitNY0xlbm5hbiAJOgk0OAk6CTI3NDUuOTk1NworTWNNdWxsZW4gCToJNDgJOgkyOTU5LjMzNAorTWFkaXNvbiAJOgk0OAk6CTEyMjMuNjE5NgorTWFyaW9uIAk6CTQ4CToJMTA4OC43MzI0CitNYXJ0aW4gCToJNDgJOgkyMzcxLjQ1NTgKK01hc29uIAk6CTQ4CToJMjQxNC4zNDYyCitNYXRhZ29yZGEgCToJNDgJOgk0MTc1LjU3MjEKK01hdmVyaWNrIAk6CTQ4CToJMzM0NS42MDY2CitNZWRpbmEgCToJNDgJOgkzNDU2LjQzMjcKK01lbmFyZCAJOgk0OAk6CTIzMzYuODI3NQorTWlkbGFuZCAJOgk0OAk6CTIzMzYuMTAyMworTWlsYW0gCToJNDgJOgkyNjQ2LjEyNTMKK01pbGxzIAk6CTQ4CToJMTk0Mi4yMTUxCitNaXRjaGVsbCAJOgk0OAk6CTIzNzIuMTgxCitNb250YWd1ZSAJOgk0OAk6CTI0MzAuNTU5NgorTW9udGdvbWVyeSAJOgk0OAk6CTI3ODguOTM3OQorTW9vcmUgCToJNDgJOgkyMzU1Ljg4OTkKK01vcnJpcyAJOgk0OAk6CTY2OS44Nzc2CitNb3RsZXkgCToJNDgJOgkyNTYzLjYwNzkKK05hY29nZG9jaGVzIAk6CTQ4CToJMjU0MS42NDQ3CitOYXZhcnJvIAk6CTQ4CToJMjgxMy4xODAzCitOZXd0b24gCToJNDgJOgkyNDMzLjMzMDkKK05vbGFuIAk6CTQ4CToJMjM2Ny4wNzg3CitOdWVjZXMgCToJNDgJOgkzMDIxLjAyNzgKK09jaGlsdHJlZSAJOgk0OAk6CTIzNzcuODAxMworT2xkaGFtIAk6CTQ4CToJMzg4OC42Nzc4CitPcmFuZ2UgCToJNDgJOgk5ODMuMDA4NgorUGFsbyBQaW50byAJOgk0OAk6CTI1NTIuNDQ1CitQYW5vbGEgCToJNDgJOgkyMTI3LjI3MDYKK1BhcmtlciAJOgk0OAk6CTIzNTcuMTMzMQorUGFybWVyIAk6CTQ4CToJMjI5Mi41OTAzCitQZWNvcyAJOgk0OAk6CTEyMzQwLjY1MDcKK1BvbGsgCToJNDgJOgkyODc0LjQwNzkKK1BvdHRlciAJOgk0OAk6CTIzODcuOTI4MgorUHJlc2lkaW8gCToJNDgJOgk5OTg3LjcxMzQKK1JhaW5zIAk6CTQ4CToJNjcwLjQ3MzMKK1JhbmRhbGwgCToJNDgJOgkyMzg5LjA2NzgKK1JlYWdhbiAJOgk0OAk6CTMwNDUuNzg4MgorUmVhbCAJOgk0OAk6CTE4MTMuMTAzNgorUmVkIFJpdmVyIAk6CTQ4CToJMjczOS4yMDk5CitSZWV2ZXMgCToJNDgJOgk2ODQyLjY1MDUKK1JlZnVnaW8gCToJNDgJOgkyMTIwLjI3NzYKK1JvYmVydHMgCToJNDgJOgkyMzkzLjY1MjEKK1JvYmVydHNvbiAJOgk0OAk6CTIyNDIuMDg1MworUm9ja3dhbGwgCToJNDgJOgkzODUuMTMzCitSdW5uZWxzIAk6CTQ4CToJMjczNy45NjY3CitSdXNrIAk6CTQ4CToJMjQzMS4wMjU4CitTYWJpbmUgCToJNDgJOgkxNDkzLjQxOTkKK1NhbiBBdWd1c3RpbmUgCToJNDgJOgkxNTMzLjgyMzkKK1NhbiBKYWNpbnRvIAk6CTQ4CToJMTYyNi4yNjEKK1NhbiBQYXRyaWNpbyAJOgk0OAk6CTE4MzEuMjg1NAorU2FuIFNhYmEgCToJNDgJOgkyOTQ4LjA2NzUKK1NjaGxlaWNoZXIgCToJNDgJOgkzMzk0LjU4MzUKK1NjdXJyeSAJOgk0OAk6CTIzNTAuNTAyNworU2hhY2tlbGZvcmQgCToJNDgJOgkyMzcxLjI0ODYKK1NoZWxieSAJOgk0OAk6CTIxNjEuNDMyNworU2hlcm1hbiAJOgk0OAk6CTIzOTEuMDg4CitTbWl0aCAJOgk0OAk6CTI0NTkuMDc1NQorU29tZXJ2ZWxsIAk6CTQ4CToJNDk3LjAyMQorU3RhcnIgCToJNDgJOgkzMTgzLjgzNTIKK1N0ZXBoZW5zIAk6CTQ4CToJMjM4Ni42MzMyCitTdGVybGluZyAJOgk0OAk6CTIzOTEuODM5MQorU3RvbmV3YWxsIAk6CTQ4CToJMjM4My4zOTU3CitTdXR0b24gCToJNDgJOgkzNzY2Ljg5NgorU3dpc2hlciAJOgk0OAk6CTIzMzIuNzYxMgorVGFycmFudCAJOgk0OAk6CTIzMjQuNDczMgorVGF5bG9yIAk6CTQ4CToJMjM4MC44NTc1CitUZXJyZWxsIAk6CTQ4CToJNjEwNi41NzI1CitUZXJyeSAJOgk0OAk6CTIzMDcuNTA4NworVGhyb2NrbW9ydG9uIAk6CTQ4CToJMjM3MS4wNjczCitUaXR1cyAJOgk0OAk6CTExMDIuNTM3MQorVG9tIEdyZWVuIAk6CTQ4CToJMzk4OS45OTg2CitUcmF2aXMgCToJNDgJOgkyNjQ3LjE4NzIKK1RyaW5pdHkgCToJNDgJOgkxODQ5LjI2CitUeWxlciAJOgk0OAk6CTI0MjMuNDg4OQorVXBzaHVyIAk6CTQ4CToJMTUzNS4wMTUzCitVcHRvbiAJOgk0OAk6CTMyMTYuMzM5NworVXZhbGRlIAk6CTQ4CToJNDAzNi43NzQKK1ZhbCBWZXJkZSAJOgk0OAk6CTgzNzEuOTE2CitWYW4gWmFuZHQgCToJNDgJOgkyMjI2LjA1MzIKK1ZpY3RvcmlhIAk6CTQ4CToJMjMwMS44MTA3CitXYWxrZXIgCToJNDgJOgkyMDc1LjcyOTYKK1dhbGxlciAJOgk0OAk6CTEzNDIuODg5MQorV2FyZCAJOgk0OAk6CTIxNjQuNTY2NgorV2FzaGluZ3RvbiAJOgk0OAk6CTE2MDkuMjk2NQorV2ViYiAJOgk0OAk6CTg3NDIuNjIyNworV2hhcnRvbiAJOgk0OAk6CTI4MzQuNTczNworV2hlZWxlciAJOgk0OAk6CTIzNzAuNzMwNgorV2ljaGl0YSAJOgk0OAk6CTE2MzkuNDk1OQorV2lsYmFyZ2VyIAk6CTQ4CToJMjUzMy4yNzkKK1dpbGxhY3kgCToJNDgJOgkyMDMxLjE1NTcKK1dpbGxpYW1zb24gCToJNDgJOgkyOTM4Ljk3NjYKK1dpbHNvbiAJOgk0OAk6CTIwOTQuMTk2MworV2lua2xlciAJOgk0OAk6CTIxNzguODExNgorV2lzZSAJOgk0OAk6CTIzODkuOTc0MworV29vZCAJOgk0OAk6CTE4MDIuMTIyCitZb2FrdW0gCToJNDgJOgkyMDcxLjM3ODQKK1lvdW5nIAk6CTQ4CToJMjQxMC44NzU2CitaYXBhdGEgCToJNDgJOgkyNzQwLjQ3OQorWmF2YWxhIAk6CTQ4CToJMzM3MS40NTQ4CitCZWF2ZXIgCToJNDkJOgk2NzE0LjAwNTIKK0JveCBFbGRlciAJOgk0OQk6CTE3NDI4LjE4NzcKK0NhY2hlIAk6CTQ5CToJMzAzOC4yNTEzCitDYXJib24gCToJNDkJOgkzODQ1LjAzNjMKK0RhZ2dldHQgCToJNDkJOgkxODcyLjcyNTQKK0RhdmlzIAk6CTQ5CToJMTY0MS4yODMKK0R1Y2hlc25lIAk6CTQ5CToJODQzMi45NjIzCitFbWVyeSAJOgk0OQk6CTExNTU1LjM4ODYKK0dhcmZpZWxkIAk6CTQ5CToJMTM0ODkuMjM4CitHcmFuZCAJOgk0OQk6CTk1NjcuNjY3MgorSXJvbiAJOgk0OQk6CTg1NTEuNzY1NgorSnVhYiAJOgk0OQk6CTg4MjIuMjY1MgorS2FuZSAJOgk0OQk6CTEwNjQwLjgwNzgKK01pbGxhcmQgCToJNDkJOgkxNzY4NC41NDU5CitNb3JnYW4gCToJNDkJOgkxNTgxLjk0NjEKK1BpdXRlIAk6CTQ5CToJMTk4My4zMTg0CitSaWNoIAk6CTQ5CToJMjgxMy40OTExCitTYWx0IExha2UgCToJNDkJOgkyMDkyLjE1MDIKK1NhbiBKdWFuIAk6CTQ5CToJMjA1NDYuNzAzMQorU2FucGV0ZSAJOgk0OQk6CTQxNTAuODg5NAorU2V2aWVyIAk6CTQ5CToJNDk2OC4zNDUyCitTdW1taXQgCToJNDkJOgk0ODc0LjUwOTUKK1Rvb2VsZSAJOgk0OQk6CTE4ODczLjY0MDgKK1VpbnRhaCAJOgk0OQk6CTExNjUyLjM1ODIKK1V0YWggCToJNDkJOgk1NTQ1LjEzODIKK1dhc2F0Y2ggCToJNDkJOgkzMTMxLjc1MDMKK1dhc2hpbmd0b24gCToJNDkJOgk2MjkzLjQ2NjkKK1dheW5lIAk6CTQ5CToJNjM4OC4xNTczCitXZWJlciAJOgk0OQk6CTE3MDguMDAxNAorQWRkaXNvbiAJOgk1MAk6CTIwOTMuNDk3CitCZW5uaW5ndG9uIAk6CTUwCToJMTc1NS4xNjUzCitDYWxlZG9uaWEgCToJNTAJOgkxNzAyLjk3NjgKK0NoaXR0ZW5kZW4gCToJNTAJOgkxNjA0Ljg2NzYKK0Vzc2V4IAk6CTUwCToJMTc0NS4wMTI1CitGcmFua2xpbiAJOgk1MAk6CTE3OTIuMzMxOAorR3JhbmQgSXNsZSAJOgk1MAk6CTUwNC4xOTUzCitMYW1vaWxsZSAJOgk1MAk6CTEyMDEuMTEyNQorT3JhbmdlIAk6CTUwCToJMTc5MS42MDY2CitPcmxlYW5zIAk6CTUwCToJMTg2Ny43NTI2CitSdXRsYW5kIAk6CTUwCToJMjQ0Ni45NTQzCitXYXNoaW5ndG9uIAk6CTUwCToJMTgwMS4xNjM3CitXaW5kaGFtIAk6CTUwCToJMjA2Ny4xMzA4CitXaW5kc29yIAk6CTUwCToJMjUyNy4xNjY2CitBY2NvbWFjayAJOgk1MQk6CTMzOTMuMDI5NQorQWxiZW1hcmxlIAk6CTUxCToJMTg4MC44MDYyCitBbGxlZ2hhbnkgCToJNTEJOgkxMTU0LjI4NTMKK0FtZWxpYSAJOgk1MQk6CTkyOC42MTg2CitBbWhlcnN0IAk6CTUxCToJMTI0MC4wNDAyCitBcHBvbWF0dG94IAk6CTUxCToJODY2Ljk1MDcKK0FybGluZ3RvbiAJOgk1MQk6CTY3LjIzNjQKK0F1Z3VzdGEgCToJNTEJOgkyNTE0LjcwODcKK0JhdGggCToJNTEJOgkxMzg0LjUxMDQKK0JlZGZvcmQgCToJNTEJOgkxOTkyLjM1NzUKK0JsYW5kIAk6CTUxCToJOTI5LjExMDcKK0JvdGV0b3VydCAJOgk1MQk6CTE0MTMuOTg0NgorQnJ1bnN3aWNrIAk6CTUxCToJMTQ3NC42NjgzCitCdWNoYW5hbiAJOgk1MQk6CTEzMDUuMDQ5MgorQnVja2luZ2hhbSAJOgk1MQk6CTE1MTEuNDIwNAorQ2FtcGJlbGwgCToJNTEJOgkxMzEzLjgwMzQKK0Nhcm9saW5lIAk6CTUxCToJMTM5NS43MjUxCitDYXJyb2xsIAk6CTUxCToJMTIzNy4wODc2CitDaGFybGVzIENpdHkgIAk6CTUxCToJNTI4LjkyOTgKK0NoYXJsb3R0ZSAJOgk1MQk6CTEyMzYuNTY5NgorQ2hlc3RlcmZpZWxkIAk6CTUxCToJMTEzMS44MDQxCitDbGFya2UgCToJNTEJOgk0NjEuNTEyMQorQ3JhaWcgCToJNTEJOgk4NTYuMjc5OQorQ3VscGVwZXIgCToJNTEJOgk5OTAuMTA1MgorQ3VtYmVybGFuZCAJOgk1MQk6CTc3Ni4zMDA3CitEaWNrZW5zb24gCToJNTEJOgk4NjQuMTAxNworRGlud2lkZGllIAk6CTUxCToJMTMxMy4wNzgyCitFc3NleCAJOgk1MQk6CTc0MC41MDY5CitGYWlyZmF4IAk6CTUxCToJMTA1My4xMTk5CitGYXVxdWllciAJOgk1MQk6CTE2ODcuMTc3OAorRmxveWQgCToJNTEJOgk5ODcuMzg1NworRmx1dmFubmEgCToJNTEJOgk3NTEuNjQzOQorRnJhbmtsaW4gCToJNTEJOgkxODQyLjk0MDQKK0ZyZWRlcmljayAJOgk1MQk6CTEwNzYuNDU1OAorR2lsZXMgCToJNTEJOgk5MzMuNDM2CitHbG91Y2VzdGVyIAk6CTUxCToJNzQ1LjkyCitHb29jaGxhbmQgCToJNTEJOgk3NTEuMDc0MQorR3JheXNvbiAJOgk1MQk6CTExNTQuODgxCitHcmVlbmUgCToJNTEJOgk0MDYuNTI2NAorR3JlZW5zdmlsbGUgCToJNTEJOgk3NjguNzM3OQorSGFsaWZheCAJOgk1MQk6CTIxNDguNTYwNAorSGFub3ZlciAJOgk1MQk6CTEyMjcuODY3MgorSGVucmljbyAJOgk1MQk6CTYzMy41MTQKK0hlbnJ5IAk6CTUxCToJOTk1LjU3MDEKK0hpZ2hsYW5kIAk6CTUxCToJMTA3Ny4wNzc0CitJc2xlIG9mIFdpZ2h0IAk6CTUxCToJOTM5LjU0ODQKK0phbWVzIENpdHkgCToJNTEJOgk0NjUuNDQ4OQorS2luZyBhbmQgUXVlZW4gCToJNTEJOgk4NDUuMTk0NworS2luZyBHZW9yZ2UgCToJNTEJOgk0ODYuMzc2MQorS2luZyBXaWxsaWFtIAk6CTUxCToJNzM5LjgzMzUKK0xhbmNhc3RlciAJOgk1MQk6CTU5OS4xOTY1CitMZWUgCToJNTEJOgkxMTMyLjY1ODgKK0xvdWRvdW4gCToJNTEJOgkxMzQ5LjY0OQorTG91aXNhIAk6CTUxCToJMTMyMi45NDYxCitMdW5lbmJ1cmcgCToJNTEJOgkxMTE5Ljg2NDIKK01hZGlzb24gCToJNTEJOgk4MzMuNDEwMgorTWF0aGV3cyAJOgk1MQk6CTY1Mi41NzY0CitNZWNrbGVuYnVyZyAJOgk1MQk6CTE3NTkuMzYxMQorTWlkZGxlc2V4IAk6CTUxCToJNTQ1Ljg0MjUKK01vbnRnb21lcnkgCToJNTEJOgkxMDA4LjYyMzcKK05lbHNvbiAJOgk1MQk6CTEyMjguNDYyOQorTmV3IEtlbnQgCToJNTEJOgk1NzguODEzMgorTm9ydGhhbXB0b24gCToJNTEJOgkyMDU5LjkzMDYKK05vcnRodW1iZXJsYW5kIAk6CTUxCToJNzM5Ljg4NTMKK05vdHRvd2F5IAk6CTUxCToJODE4LjY5OQorT3JhbmdlIAk6CTUxCToJODg5LjQzMTkKK1BhZ2UgCToJNTEJOgk4MTMuNDkzMQorUGF0cmljayAJOgk1MQk6CTEyNTguNDAzMworUGl0dHN5bHZhbmlhIAk6CTUxCToJMjUzMy40ODYyCitQb3doYXRhbiAJOgk1MQk6CTY3OS42MTYKK1ByaW5jZSBFZHdhcmQgCToJNTEJOgk5MTYuNDcxNQorUHJpbmNlIEdlb3JnZSAJOgk1MQk6CTcyOS45OTE1CitQcmluY2UgV2lsbGlhbSAJOgk1MQk6CTkwMi4yNTI0CitQdWxhc2tpIAk6CTUxCToJODUzLjYzODEKK1JhcHBhaGFubm9jayAJOgk1MQk6CTY5MS4wODk3CitSaWNobW9uZCAJOgk1MQk6CTU2MC40MjQyCitSb2Fub2tlIAk6CTUxCToJNjUwLjE5MzYKK1JvY2ticmlkZ2UgCToJNTEJOgkxNTU2LjUzODIKK1JvY2tpbmdoYW0gCToJNTEJOgkyMjEwLjAyMTEKK1J1c3NlbGwgCToJNTEJOgkxMjM0LjgzNDMKK1Njb3R0IAk6CTUxCToJMTM5NS4wNTE3CitTaGVuYW5kb2FoIAk6CTUxCToJMTMyNy40NTI3CitTbXl0aCAJOgk1MQk6CTExNzEuNDgyOQorU291dGhhbXB0b24gCToJNTEJOgkxNTYwLjA4NjUKK1Nwb3RzeWx2YW5pYSAJOgk1MQk6CTEwNjcuNzc5MworU3RhZmZvcmQgCToJNTEJOgk3MjUuMDcwNQorU3VycnkgCToJNTEJOgk4MDMuNzAyOQorU3Vzc2V4IAk6CTUxCToJMTI3Ni40Mjk3CitUYXpld2VsbCAJOgk1MQk6CTEzNDYuNTE1MQorV2FycmVuIAk6CTUxCToJNTYwLjI2ODgKK1dhc2hpbmd0b24gCToJNTEJOgkxNDY1Ljg4ODIKK1dlc3Rtb3JlbGFuZCAJOgk1MQk6CTY1NC4zMzc2CitXaXNlIAk6CTUxCToJMTA0OS41MTk4CitXeXRoZSAJOgk1MQk6CTEyMDMuMzY1OAorWW9yayAJOgk1MQk6CTU1OC4xOTY4CitBbGV4YW5kcmlhIAk6CTUxCToJMzkuOTExOQorQmVkZm9yZCAJOgk1MQk6CTE3Ljg3MQorQnJpc3RvbCAJOgk1MQk6CTM0LjA4NDQKK0J1ZW5hIFZpc3RhIAk6CTUxCToJMTcuNjg5NworQ2hhcmxvdHRlc3ZpbGxlIAk6CTUxCToJMjYuNTczNAorQ2hlc2FwZWFrZSAJOgk1MQk6CTkwOC44MzEKK0NsaWZ0b24gRm9yZ2UgCToJNTEJOgk4LjAyOQorQ29sb25pYWwgSGVpZ2h0cyAJOgk1MQk6CTIwLjE3NjEKK0NvdmluZ3RvbiAJOgk1MQk6CTE0LjY4NTMKK0RhbnZpbGxlIAk6CTUxCToJMTEzLjgwNDYKK0VtcG9yaWEgCToJNTEJOgkxOC4wNTIzCitGYWlyZmF4IAk6CTUxCToJMTYuMzQyOQorRmFsbHMgQ2h1cmNoIAk6CTUxCToJNS4xNTQxCitGcmFua2xpbiAJOgk1MQk6CTIxLjc1NgorRnJlZGVyaWNrc2J1cmcgCToJNTEJOgkyNy4yNDY4CitHYWxheCAJOgk1MQk6CTIxLjMxNTcKK0hhbXB0b24gCToJNTEJOgkzNTIuODM1NworSGFycmlzb25idXJnIAk6CTUxCToJNDUuNTU4MQorSG9wZXdlbGwgCToJNTEJOgkyOC4wMjM4CitMZXhpbmd0b24gCToJNTEJOgk2LjQ0OTEKK0x5bmNoYnVyZyAJOgk1MQk6CTEyOC44Nzg0CitNYW5hc3NhcyAJOgk1MQk6CTI1Ljc5NjQKK01hbmFzc2FzIFBhcmsgCToJNTEJOgk2LjQ0OTEKK01hcnRpbnN2aWxsZSAJOgk1MQk6CTI4LjUxNTkKK05ld3BvcnQgTmV3cyAJOgk1MQk6CTMwOC4zMzk1CitOb3Jmb2xrIAk6CTUxCToJMjQ5LjQxNworTm9ydG9uIAk6CTUxCToJMTkuNTAyNworUGV0ZXJzYnVyZyAJOgk1MQk6CTYwLjA2MjEKK1BvcXVvc29uIAk6CTUxCToJMjAzLjEzMzcKK1BvcnRzbW91dGggCToJNTEJOgkxMjAuNzQ1OAorUmFkZm9yZCAJOgk1MQk6CTI2LjM5MjEKK1JpY2htb25kIAk6CTUxCToJMTYyLjAwNDUKK1JvYW5va2UgCToJNTEJOgkxMTEuMTM2OQorU2FsZW0gCToJNTEJOgkzNy43ODgxCitTdGF1bnRvbiAJOgk1MQk6CTUxLjA0ODkKK1N1ZmZvbGsgCToJNTEJOgkxMTExLjI5MTMKK1ZpcmdpbmlhIEJlYWNoIAk6CTUxCToJMTI4OC4wODQ3CitXYXluZXNib3JvIAk6CTUxCToJMzkuODM0MgorV2lsbGlhbXNidXJnIAk6CTUxCToJMjIuNDU1MworV2luY2hlc3RlciAJOgk1MQk6CTI0LjE2NDcKK0FkYW1zIAk6CTUzCToJNDk5Ny44OTcxCitBc290aW4gCToJNTMJOgkxNjU5LjM4NzEKK0JlbnRvbiAJOgk1Mwk6CTQ1NTguNzEwOAorQ2hlbGFuIAk6CTUzCToJNzc1My40NzU4CitDbGFsbGFtIAk6CTUzCToJNjkxNi4xODA2CitDbGFyayAJOgk1Mwk6CTE2OTkuNjA5OAorQ29sdW1iaWEgCToJNTMJOgkyMjYyLjQ0MjcKK0Nvd2xpdHogCToJNTMJOgkzMDIwLjc5NDcKK0RvdWdsYXMgCToJNTMJOgk0Nzg4LjEwNzEKK0ZlcnJ5IAk6CTUzCToJNTg0Ni44MjE0CitGcmFua2xpbiAJOgk1Mwk6CTMyNzcuMjU2NQorR2FyZmllbGQgCToJNTMJOgkxODYwLjExMjEKK0dyYW50IAk6CTUzCToJNzIyOS40NDExCitHcmF5cyBIYXJib3IgCToJNTMJOgk1NzYxLjI5OTYKK0lzbGFuZCAJOgk1Mwk6CTEzNDAuMDQwMQorSmVmZmVyc29uIAk6CTUzCToJNTY1NS4zMTY4CitLaW5nIAk6CTUzCToJNTk3My45MTI3CitLaXRzYXAgCToJNTMJOgkxNDY1Ljg4ODIKK0tpdHRpdGFzIAk6CTUzCToJNjA0Mi43NTQ5CitLbGlja2l0YXQgCToJNTMJOgk0OTMxLjgyNjIKK0xld2lzIAk6CTUzCToJNjMwOS45MTM0CitMaW5jb2xuIAk6CTUzCToJNjA1OS44NDg5CitNYXNvbiAJOgk1Mwk6CTI3MjIuMTY3NworT2thbm9nYW4gCToJNTMJOgkxMzc2Ni4yNjQ0CitQYWNpZmljIAk6CTUzCToJMzE2OC44NjUKK1BlbmQgT3JlaWxsZSAJOgk1Mwk6CTM2OTEuNTc4OAorUGllcmNlIAk6CTUzCToJNDY3OC44MzUKK1NhbiBKdWFuIAk6CTUzCToJMTYwOC41NzEzCitTa2FnaXQgCToJNTMJOgk0OTc0LjAxNzMKK1NrYW1hbmlhIAk6CTUzCToJNDM2MS4xOTc0CitTbm9ob21pc2ggCToJNTMJOgk1Njg4LjcwMTkKK1Nwb2thbmUgCToJNTMJOgk0NjEyLjA2NDgKK1N0ZXZlbnMgCToJNTMJOgk2NTgwLjI1NzYKK1RodXJzdG9uIAk6CTUzCToJMjAwMy43Mjc2CitXYWhraWFrdW0gCToJNTMJOgk3NDIuNTI3MQorV2FsbGEgV2FsbGEgCToJNTMJOgkzMzY1LjA1NzUKK1doYXRjb20gCToJNTMJOgk2NDg0LjE5NDUKK1doaXRtYW4gCToJNTMJOgk1NjM5Ljk4NAorWWFraW1hIAk6CTUzCToJMTExNjcuMDY5OQorQmFyYm91ciAJOgk1NAk6CTg4Ny43MjI1CitCZXJrZWxleSAJOgk1NAk6CTgzMi44OTIyCitCb29uZSAJOgk1NAk6CTEzMDMuMjM2MgorQnJheHRvbiAJOgk1NAk6CTEzMzYuODgwMworQnJvb2tlIAk6CTU0CToJMjM4Ljk1MzQKK0NhYmVsbCAJOgk1NAk6CTc0NS45NzE4CitDYWxob3VuIAk6CTU0CToJNzI2Ljg1NzYKK0NsYXkgCToJNTQJOgk4OTAuNDkzOAorRG9kZHJpZGdlIAk6CTU0CToJODMwLjA0MzIKK0ZheWV0dGUgCToJNTQJOgkxNzMxLjA1MjQKK0dpbG1lciAJOgk1NAk6CTg4MC43ODEzCitHcmFudCAJOgk1NAk6CTEyNDMuNjkyMQorR3JlZW5icmllciAJOgk1NAk6CTI2NTMuMjczNworSGFtcHNoaXJlIAk6CTU0CToJMTY2OS41NjU4CitIYW5jb2NrIAk6CTU0CToJMjI4LjgyNjUKK0hhcmR5IAk6CTU0CToJMTUxMy44MDMyCitIYXJyaXNvbiAJOgk1NAk6CTEwNzguOTk0CitKYWNrc29uIAk6CTU0CToJMTIyMS40MTgxCitKZWZmZXJzb24gCToJNTQJOgk1NDcuOTY2MworS2FuYXdoYSAJOgk1NAk6CTIzNTkuNDY0MQorTGV3aXMgCToJNTQJOgkxMDA5LjQ1MjUKK0xpbmNvbG4gCToJNTQJOgkxMTM1Ljk0ODEKK0xvZ2FuIAk6CTU0CToJMTE4MC4wMjk5CitNY0Rvd2VsbCAJOgk1NAk6CTEzODUuMzkxCitNYXJpb24gCToJNTQJOgk4MDYuNzU5MQorTWFyc2hhbGwgCToJNTQJOgk4MDguNTQ2MgorTWFzb24gCToJNTQJOgkxMTUyLjAzMgorTWVyY2VyIAk6CTU0CToJMTA4OS41ODcxCitNaW5lcmFsIAk6CTU0CToJODUyLjQ0NjcKK01pbmdvIAk6CTU0CToJMTA5Ny4yMjc2CitNb25vbmdhbGlhIAk6CTU0CToJOTQ3LjY1NTEKK01vbnJvZSAJOgk1NAk6CTEyMjYuNzc5NAorTW9yZ2FuIAk6CTU0CToJNTk0Ljg0NTMKK05pY2hvbGFzIAk6CTU0CToJMTY5NC44OTYKK09oaW8gCToJNTQJOgkyODEuOTQ3NAorUGVuZGxldG9uIAk6CTU0CToJMTgwOC4yMDg1CitQbGVhc2FudHMgCToJNTQJOgkzNDguNTg4MQorUG9jYWhvbnRhcyAJOgk1NAk6CTI0MzkuMzkxNQorUHJlc3RvbiAJOgk1NAk6CTE2ODcuMTAwMQorUHV0bmFtIAk6CTU0CToJOTA3LjUzNgorUmFsZWlnaCAJOgk1NAk6CTE1NzguMTkwNgorUmFuZG9scGggCToJNTQJOgkyNjkzLjM5MjgKK1JpdGNoaWUgCToJNTQJOgkxMTc0Ljc3MjIKK1JvYW5lIAk6CTU0CToJMTI1Mi45MTI1CitTdW1tZXJzIAk6CTU0CToJOTUyLjM5NDgKK1RheWxvciAJOgk1NAk6CTQ1NS4wMzcxCitUdWNrZXIgCToJNTQJOgkxMDkwLjY3NDkKK1R5bGVyIAk6CTU0CToJNjc1LjE4NzEKK1Vwc2h1ciAJOgk1NAk6CTkxOS4wODc0CitXYXluZSAJOgk1NAk6CTEzMjYuNTcyMQorV2Vic3RlciAJOgk1NAk6CTE0NDAuNDI4NQorV2V0emVsIAk6CTU0CToJOTM1Ljk0ODMKK1dpcnQgCToJNTQJOgk2MDguMjA5NworV29vZCAJOgk1NAk6CTk3Ni4yNzQ2CitXeW9taW5nIAk6CTU0CToJMTI5OS43MTM4CitBZGFtcyAJOgk1NQk6CTE3ODMuMjQwOQorQXNobGFuZCAJOgk1NQk6CTU5NDAuNzYwNworQmFycm9uIAk6CTU1CToJMjMwNS4xNTE4CitCYXlmaWVsZCAJOgk1NQk6CTUyODcuNTYyNworQnJvd24gCToJNTUJOgkxNTkzLjkzNzgKK0J1ZmZhbG8gCToJNTUJOgkxODM3LjgxMjIKK0J1cm5ldHQgCToJNTUJOgkyMjgwLjE4NDIKK0NhbHVtZXQgCToJNTUJOgkxMDI4LjMwNzcKK0NoaXBwZXdhIAk6CTU1CToJMjY5Ny4wMTg4CitDbGFyayAJOgk1NQk6CTMxNTcuNDE3MgorQ29sdW1iaWEgCToJNTUJOgkyMDYwLjg2MworQ3Jhd2ZvcmQgCToJNTUJOgkxNTUxLjk3OTgKK0RhbmUgCToJNTUJOgkzMjA3LjI0ODgKK0RvZGdlIAk6CTU1CToJMjM0OS4xMDQxCitEb29yIAk6CTU1CToJNjEzNy44NTk3CitEb3VnbGFzIAk6CTU1CToJMzgzMi45NjY5CitEdW5uIAk6CTU1CToJMjIzNy41MjY5CitFYXUgQ2xhaXJlIAk6CTU1CToJMTY3MS4yNzUyCitGbG9yZW5jZSAJOgk1NQk6CTEyODguNDIxNAorRm9uZCBkdSBMYWMgCToJNTUJOgkxOTgzLjQyMgorRm9yZXN0IAk6CTU1CToJMjcxMC4xNzYKK0dyYW50IAk6CTU1CToJMzA2NC43NzI5CitHcmVlbiAJOgk1NQk6CTE1MTQuMDEwNAorR3JlZW4gTGFrZSAJOgk1NQk6CTk4NS4zMzk2CitJb3dhIAk6CTU1CToJMTk4OS4zMjcyCitJcm9uIAk6CTU1CToJMjM4MC44MzE2CitKYWNrc29uIAk6CTU1CToJMjU5MC4yODQ5CitKZWZmZXJzb24gCToJNTUJOgkxNTA5LjMyMjUKK0p1bmVhdSAJOgk1NQk6CTIwODIuNjk2NworS2Vub3NoYSAJOgk1NQk6CTE5NTMuNjYyOQorS2V3YXVuZWUgCToJNTUJOgkyODA4LjkwNjgKK0xhIENyb3NzZSAJOgk1NQk6CTEyNDIuOTkyOAorTGFmYXlldHRlIAk6CTU1CToJMTY0My41MTA0CitMYW5nbGFkZSAJOgk1NQk6CTIyOTkuNjA5MgorTGluY29sbiAJOgk1NQk6CTIzNDkuMjU5NQorTWFuaXRvd29jIAk6CTU1CToJMzg2OS4xMjMzCitNYXJhdGhvbiAJOgk1NQk6CTQwODIuMjAyNgorTWFyaW5ldHRlIAk6CTU1CToJNDAxNC42ODEzCitNYXJxdWV0dGUgCToJNTUJOgkxMjAyLjg0NzgKK01lbm9taW5lZSAJOgk1NQk6CTk0NS4zMjQxCitNaWx3YXVrZWUgCToJNTUJOgkzMDgxLjMyMworTW9ucm9lIAk6CTU1CToJMjM1Mi40NzExCitPY29udG8gCToJNTUJOgkyOTc2LjAxMzYKK09uZWlkYSAJOgk1NQk6CTMyMDAuOTI5MgorT3V0YWdhbWllIAk6CTU1CToJMTY2OC45OTYKK096YXVrZWUgCToJNTUJOgkyODkwLjk1OAorUGVwaW4gCToJNTUJOgk2NDQuMDgxMgorUGllcmNlIAk6CTU1CToJMTUzMi4yMTgxCitQb2xrIAk6CTU1CToJMjQ3Ni43NjUyCitQb3J0YWdlIAk6CTU1CToJMjEzMC45NDg0CitQcmljZSAJOgk1NQk6CTMzMTEuMTMzNworUmFjaW5lIAk6CTU1CToJMjA1MS4wMjEKK1JpY2hsYW5kIAk6CTU1CToJMTUyNi40OTQyCitSb2NrIAk6CTU1CToJMTg4MC44NTgKK1J1c2sgCToJNTUJOgkyNDExLjAwNTEKK1N0LiBDcm9peCAJOgk1NQk6CTE5MDUuNzQ3OQorU2F1ayAJOgk1NQk6CTIxOTcuNDMzNworU2F3eWVyIAk6CTU1CToJMzQ5Ny4zMjg4CitTaGF3YW5vIAk6CTU1CToJMjM1NS4xNjQ3CitTaGVib3lnYW4gCToJNTUJOgkzMjkxLjgxMjMKK1RheWxvciAJOgk1NQk6CTI1NDkuODI5MQorVHJlbXBlYWxlYXUgCToJNTUJOgkxOTIxLjcyODIKK1Zlcm5vbiAJOgk1NQk6CTIxMTQuNTAxOQorVmlsYXMgCToJNTUJOgkyNjM2LjIzMTUKK1dhbHdvcnRoIAk6CTU1CToJMTQ5My4xMzUKK1dhc2hidXJuIAk6CTU1CToJMjIwOS40MjU0CitXYXNoaW5ndG9uIAk6CTU1CToJMTEyOC45NTUxCitXYXVrZXNoYSAJOgk1NQk6CTE1MDMuNDQzMgorV2F1cGFjYSAJOgk1NQk6CTE5ODIuMjA0NworV2F1c2hhcmEgCToJNTUJOgkxNjUwLjg0MDEKK1dpbm5lYmFnbyAJOgk1NQk6CTE0OTguODMzCitXb29kIAk6CTU1CToJMjA5Ni41MDE0CitBbGJhbnkgCToJNTYJOgkxMTE1OS43NjYxCitCaWcgSG9ybiAJOgk1Ngk6CTgxODEuNzA2NAorQ2FtcGJlbGwgCToJNTYJOgkxMjQzNi4wNDA0CitDYXJib24gCToJNTYJOgkyMDYyNi44Mzc3CitDb252ZXJzZSAJOgk1Ngk6CTExMDQ2LjYwOQorQ3Jvb2sgCToJNTYJOgk3NDM0LjY0NjgKK0ZyZW1vbnQgCToJNTYJOgkyMzk5OC40MjIKK0dvc2hlbiAJOgk1Ngk6CTU3ODEuMjk0NAorSG90IFNwcmluZ3MgCToJNTYJOgk1MTk2LjA4MzkKK0pvaG5zb24gCToJNTYJOgkxMDgxMi40OTg5CitMYXJhbWllIAk6CTU2CToJNjk2MC45NjE3CitMaW5jb2xuIAk6CTU2CToJMTA1OTAuNTM1OQorTmF0cm9uYSAJOgk1Ngk6CTEzOTIzLjExNDgKK05pb2JyYXJhIAk6CTU2CToJNjgwNi4yNjEKK1BhcmsgCToJNTYJOgkxODA0OC40NDA5CitQbGF0dGUgCToJNTYJOgk1NDY3LjIzMQorU2hlcmlkYW4gCToJNTYJOgk2NTQ1LjExMTMKK1N1YmxldHRlIAk6CTU2CToJMTI3ODMuMzU5NAorU3dlZXR3YXRlciAJOgk1Ngk6CTI3MTcyLjEzMDMKK1RldG9uIAk6CTU2CToJMTA5MzQuNDYyCitVaW50YSAJOgk1Ngk6CTU0MDYuNzgwNAorV2FzaGFraWUgCToJNTYJOgk1ODA4LjcyMjUKK1dlc3RvbiAJOgk1Ngk6CTYyMTYuMTgxMwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL1VTQV8yX1BPUFVMQVRJT04udHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvVVNBXzJfUE9QVUxBVElPTi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmRlY2ZhZQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL1VTQV8yX1BPUFVMQVRJT04udHh0CkBAIC0wLDAgKzEsMzE0MSBAQAorQXV0YXVnYSAJOgkxCToJNDM2NzEKK0JhbGR3aW4gCToJMQk6CTE0MDQxNQorQmFyYm91ciAJOgkxCToJMjkwMzgKK0JpYmIgCToJMQk6CTIwODI2CitCbG91bnQgCToJMQk6CTUxMDI0CitCdWxsb2NrIAk6CTEJOgkxMTcxNAorQnV0bGVyIAk6CTEJOgkyMTM5OQorQ2FsaG91biAJOgkxCToJMTEyMjQ5CitDaGFtYmVycyAJOgkxCToJMzY1ODMKK0NoZXJva2VlIAk6CTEJOgkyMzk4OAorQ2hpbHRvbiAJOgkxCToJMzk1OTMKK0Nob2N0YXcgCToJMQk6CTE1OTIyCitDbGFya2UgCToJMQk6CTI3ODY3CitDbGF5IAk6CTEJOgkxNDI1NAorQ2xlYnVybmUgCToJMQk6CTE0MTIzCitDb2ZmZWUgCToJMQk6CTQzNjE1CitDb2xiZXJ0IAk6CTEJOgk1NDk4NAorQ29uZWN1aCAJOgkxCToJMTQwODkKK0Nvb3NhIAk6CTEJOgkxMjIwMgorQ292aW5ndG9uIAk6CTEJOgkzNzYzMQorQ3JlbnNoYXcgCToJMQk6CTEzNjY1CitDdWxsbWFuIAk6CTEJOgk3NzQ4MworRGFsZSAJOgkxCToJNDkxMjkKK0RhbGxhcyAJOgkxCToJNDYzNjUKK0RlS2FsYiAJOgkxCToJNjQ0NTIKK0VsbW9yZSAJOgkxCToJNjU4NzQKK0VzY2FtYmlhIAk6CTEJOgkzODQ0MAorRXRvd2FoIAk6CTEJOgkxMDM0NTkKK0ZheWV0dGUgCToJMQk6CTE4NDk1CitGcmFua2xpbiAJOgkxCToJMzEyMjMKK0dlbmV2YSAJOgkxCToJMjU3NjQKK0dyZWVuZSAJOgkxCToJOTk3NAorSGFsZSAJOgkxCToJMTcxODUKK0hlbnJ5IAk6CTEJOgkxNjMxMAorSG91c3RvbiAJOgkxCToJODg3ODcKK0phY2tzb24gCToJMQk6CTUzOTI2CitKZWZmZXJzb24gCToJMQk6CTY2MjA0NworTGFtYXIgCToJMQk6CTE1OTA0CitMYXVkZXJkYWxlIAk6CTEJOgk4Nzk2NgorTGF3cmVuY2UgCToJMQk6CTM0ODAzCitMZWUgCToJMQk6CTExNTA5MgorTGltZXN0b25lIAk6CTEJOgk2NTY3NgorTG93bmRlcyAJOgkxCToJMTM0NzMKK01hY29uIAk6CTEJOgkyNDEwNQorTWFkaXNvbiAJOgkxCToJMjc2NzAwCitNYXJlbmdvIAk6CTEJOgkyMjUzOQorTWFyaW9uIAk6CTEJOgkzMTIxNAorTWFyc2hhbGwgCToJMQk6CTgyMjMxCitNb2JpbGUgCToJMQk6CTM5OTg0MworTW9ucm9lIAk6CTEJOgkyNDMyNAorTW9udGdvbWVyeSAJOgkxCToJMjIzNTEwCitNb3JnYW4gCToJMQk6CTExMTA2NAorUGVycnkgCToJMQk6CTExODYxCitQaWNrZW5zIAk6CTEJOgkyMDk0OQorUGlrZSAJOgkxCToJMjk2MDUKK1JhbmRvbHBoIAk6CTEJOgkyMjM4MAorUnVzc2VsbCAJOgkxCToJNDk3NTYKK1N0LiBDbGFpciAJOgkxCToJNjQ3NDIKK1NoZWxieSAJOgkxCToJMTQzMjkzCitTdW10ZXIgCToJMQk6CTE0Nzk4CitUYWxsYWRlZ2EgCToJMQk6CTgwMzIxCitUYWxsYXBvb3NhIAk6CTEJOgk0MTQ3NQorVHVzY2Fsb29zYSAJOgkxCToJMTY0ODc1CitXYWxrZXIgCToJMQk6CTcwNzEzCitXYXNoaW5ndG9uIAk6CTEJOgkxODA5NworV2lsY294IAk6CTEJOgkxMzE4MworV2luc3RvbiAJOgkxCToJMjQ4NDMKK0FsZXV0aWFucyBFYXN0IAk6CTIJOgkyNjk3CitBbGV1dGlhbnMgV2VzdCAJOgkyCToJNTQ2NQorQW5jaG9yYWdlIAk6CTIJOgkyNjAyODMKK0JldGhlbCAJOgkyCToJMTYwMDYKK0JyaXN0b2wgQmF5IAk6CTIJOgkxMjU4CitEZW5hbGkgCToJMgk6CTE4OTMKK0RpbGxpbmdoYW0gCToJMgk6CTQ5MjIKK0ZhaXJiYW5rcyBOb3J0aCBTdGFyIAk6CTIJOgk4Mjg0MAorSGFpbmVzIAk6CTIJOgkyMzkyCitKdW5lYXUgCToJMgk6CTMwNzExCitLZW5haSBQZW5pbnN1bGEgCToJMgk6CTQ5NjkxCitLZXRjaGlrYW4gR2F0ZXdheSAJOgkyCToJMTQwNzAKK0tvZGlhayBJc2xhbmQgCToJMgk6CTEzOTEzCitMYWtlIGFuZCBQZW5pbnN1bGEgCToJMgk6CTE4MjMKK01hdGFudXNrYS1TdXNpdG5hIAk6CTIJOgk1OTMyMgorTm9tZSAJOgkyCToJOTE5NgorTm9ydGggU2xvcGUgCToJMgk6CTczODUKK05vcnRod2VzdCBBcmN0aWMgCToJMgk6CTcyMDgKK1ByaW5jZSBvZiBXYWxlcy1PdXRlciBLZXRjaGlrYW4gCToJMgk6CTYxNDYKK1NpdGthIAk6CTIJOgk4ODM1CitTa2Fnd2F5LUhvb25haC1Bbmdvb24gCToJMgk6CTM0MzYKK1NvdXRoZWFzdCBGYWlyYmFua3MgCToJMgk6CTYxNzQKK1ZhbGRlei1Db3Jkb3ZhIAk6CTIJOgkxMDE5NQorV2FkZSBIYW1wdG9uIAk6CTIJOgk3MDI4CitXcmFuZ2VsbC1QZXRlcnNidXJnIAk6CTIJOgk2Njg0CitZYWt1dGF0IAk6CTIJOgk4MDgKK1l1a29uLUtveXVrdWsgCToJMgk6CTY1NTEKK0FwYWNoZSAJOgk0CToJNjk0MjMKK0NvY2hpc2UgCToJNAk6CTExNzc1NQorQ29jb25pbm8gCToJNAk6CTExNjMyMAorR2lsYSAJOgk0CToJNTEzMzUKK0dyYWhhbSAJOgk0CToJMzM0ODkKK0dyZWVubGVlIAk6CTQJOgk4NTQ3CitMYSBQYXogCToJNAk6CTE5NzE1CitNYXJpY29wYSAJOgk0CToJMzA3MjE0OQorTW9oYXZlIAk6CTQJOgkxNTUwMzIKK05hdmFqbyAJOgk0CToJOTc0NzAKK1BpbWEgCToJNAk6CTg0Mzc0NgorUGluYWwgCToJNAk6CTE3OTcyNworU2FudGEgQ3J1eiAJOgk0CToJMzgzODEKK1lhdmFwYWkgCToJNAk6CTE2NzUxNworWXVtYSAJOgk0CToJMTYwMDI2CitBcmthbnNhcyAJOgk1CToJMjA3NDkKK0FzaGxleSAJOgk1CToJMjQyMDkKK0JheHRlciAJOgk1CToJMzgzODYKK0JlbnRvbiAJOgk1CToJMTUzNDA2CitCb29uZSAJOgk1CToJMzM5NDgKK0JyYWRsZXkgCToJNQk6CTEyNjAwCitDYWxob3VuIAk6CTUJOgk1NzQ0CitDYXJyb2xsIAk6CTUJOgkyNTM1NworQ2hpY290IAk6CTUJOgkxNDExNworQ2xhcmsgCToJNQk6CTIzNTQ2CitDbGF5IAk6CTUJOgkxNzYwOQorQ2xlYnVybmUgCToJNQk6CTI0MDQ2CitDbGV2ZWxhbmQgCToJNQk6CTg1NzEKK0NvbHVtYmlhIAk6CTUJOgkyNTYwMworQ29ud2F5IAk6CTUJOgkyMDMzNgorQ3JhaWdoZWFkIAk6CTUJOgk4MjE0OAorQ3Jhd2ZvcmQgCToJNQk6CTUzMjQ3CitDcml0dGVuZGVuIAk6CTUJOgk1MDg2NgorQ3Jvc3MgCToJNQk6CTE5NTI2CitEYWxsYXMgCToJNQk6CTkyMTAKK0Rlc2hhIAk6CTUJOgkxNTM0MQorRHJldyAJOgk1CToJMTg3MjMKK0ZhdWxrbmVyIAk6CTUJOgk4NjAxNAorRnJhbmtsaW4gCToJNQk6CTE3NzcxCitGdWx0b24gCToJNQk6CTExNjQyCitHYXJsYW5kIAk6CTUJOgk4ODA2OAorR3JhbnQgCToJNQk6CTE2NDY0CitHcmVlbmUgCToJNQk6CTM3MzMxCitIZW1wc3RlYWQgCToJNQk6CTIzNTg3CitIb3QgU3ByaW5nIAk6CTUJOgkzMDM1MworSG93YXJkIAk6CTUJOgkxNDMwMAorSW5kZXBlbmRlbmNlIAk6CTUJOgkzNDIzMworSXphcmQgCToJNQk6CTEzMjQ5CitKYWNrc29uIAk6CTUJOgkxODQxOAorSmVmZmVyc29uIAk6CTUJOgk4NDI3OAorSm9obnNvbiAJOgk1CToJMjI3ODEKK0xhZmF5ZXR0ZSAJOgk1CToJODU1OQorTGF3cmVuY2UgCToJNQk6CTE3Nzc0CitMZWUgCToJNQk6CTEyNTgwCitMaW5jb2xuIAk6CTUJOgkxNDQ5MgorTGl0dGxlIFJpdmVyIAk6CTUJOgkxMzYyOAorTG9nYW4gCToJNQk6CTIyNDg2CitMb25va2UgCToJNQk6CTUyODI4CitNYWRpc29uIAk6CTUJOgkxNDI0MworTWFyaW9uIAk6CTUJOgkxNjE0MAorTWlsbGVyIAk6CTUJOgk0MDQ0MworTWlzc2lzc2lwcGkgCToJNQk6CTUxOTc5CitNb25yb2UgCToJNQk6CTEwMjU0CitNb250Z29tZXJ5IAk6CTUJOgk5MjQ1CitOZXZhZGEgCToJNQk6CTk5NTUKK05ld3RvbiAJOgk1CToJODYwOAorT3VhY2hpdGEgCToJNQk6CTI4NzkwCitQZXJyeSAJOgk1CToJMTAyMDkKK1BoaWxsaXBzIAk6CTUJOgkyNjQ0NQorUGlrZSAJOgk1CToJMTEzMDMKK1BvaW5zZXR0IAk6CTUJOgkyNTYxNAorUG9sayAJOgk1CToJMjAyMjkKK1BvcGUgCToJNQk6CTU0NDY5CitQcmFpcmllIAk6CTUJOgk5NTM5CitQdWxhc2tpIAk6CTUJOgkzNjE0NzQKK1JhbmRvbHBoIAk6CTUJOgkxODE5NQorU3QuIEZyYW5jaXMgCToJNQk6CTI5MzI5CitTYWxpbmUgCToJNQk6CTgzNTI5CitTY290dCAJOgk1CToJMTA5OTYKK1NlYXJjeSAJOgk1CToJODI2MQorU2ViYXN0aWFuIAk6CTUJOgkxMTUwNzEKK1NldmllciAJOgk1CToJMTU3NTcKK1NoYXJwIAk6CTUJOgkxNzExOQorU3RvbmUgCToJNQk6CTExNDk5CitVbmlvbiAJOgk1CToJNDU2MjkKK1ZhbiBCdXJlbiAJOgk1CToJMTYxOTIKK1dhc2hpbmd0b24gCToJNQk6CTE1NzcxNQorV2hpdGUgCToJNQk6CTY3MTY1CitXb29kcnVmZiAJOgk1CToJODc0MQorWWVsbCAJOgk1CToJMjExMzkKK0FsYW1lZGEgCToJNgk6CTE0NDM3NDEKK0FscGluZSAJOgk2CToJMTIwOAorQW1hZG9yIAk6CTYJOgkzNTEwMAorQnV0dGUgCToJNgk6CTIwMzE3MQorQ2FsYXZlcmFzIAk6CTYJOgk0MDU1NAorQ29sdXNhIAk6CTYJOgkxODgwNAorQ29udHJhIENvc3RhIAk6CTYJOgk5NDg4MTYKK0RlbCBOb3J0ZSAJOgk2CToJMjc1MDcKK0VsIERvcmFkbyAJOgk2CToJMTU2Mjk5CitGcmVzbm8gCToJNgk6CTc5OTQwNworR2xlbm4gCToJNgk6CTI2NDUzCitIdW1ib2xkdCAJOgk2CToJMTI2NTE4CitJbXBlcmlhbCAJOgk2CToJMTQyMzYxCitJbnlvIAk6CTYJOgkxNzk0NQorS2VybiAJOgk2CToJNjYxNjQ1CitLaW5ncyAJOgk2CToJMTI5NDYxCitMYWtlIAk6CTYJOgk1ODMwOQorTGFzc2VuIAk6CTYJOgkzMzgyOAorTG9zIEFuZ2VsZXMgCToJNgk6CTk1MTkzMzgKK01hZGVyYSAJOgk2CToJMTIzMTA5CitNYXJpbiAJOgk2CToJMjQ3Mjg5CitNYXJpcG9zYSAJOgk2CToJMTcxMzAKK01lbmRvY2lubyAJOgk2CToJODYyNjUKK01lcmNlZCAJOgk2CToJMjEwNTU0CitNb2RvYyAJOgk2CToJOTQ0OQorTW9ubyAJOgk2CToJMTI4NTMKK01vbnRlcmV5IAk6CTYJOgk0MDE3NjIKK05hcGEgCToJNgk6CTEyNDI3OQorTmV2YWRhIAk6CTYJOgk5MjAzMworT3JhbmdlIAk6CTYJOgkyODQ2Mjg5CitQbGFjZXIgCToJNgk6CTI0ODM5OQorUGx1bWFzIAk6CTYJOgkyMDgyNAorUml2ZXJzaWRlIAk6CTYJOgkxNTQ1Mzg3CitTYWNyYW1lbnRvIAk6CTYJOgkxMjIzNDk5CitTYW4gQmVuaXRvIAk6CTYJOgk1MzIzNAorU2FuIEJlcm5hcmRpbm8gCToJNgk6CTE3MDk0MzQKK1NhbiBEaWVnbyAJOgk2CToJMjgxMzgzMworU2FuIEZyYW5jaXNjbyAJOgk2CToJNzc2NzMzCitTYW4gSm9hcXVpbiAJOgk2CToJNTYzNTk4CitTYW4gTHVpcyBPYmlzcG8gCToJNgk6CTI0NjY4MQorU2FuIE1hdGVvIAk6CTYJOgk3MDcxNjEKK1NhbnRhIEJhcmJhcmEgCToJNgk6CTM5OTM0NworU2FudGEgQ2xhcmEgCToJNgk6CTE2ODI1ODUKK1NhbnRhIENydXogCToJNgk6CTI1NTYwMgorU2hhc3RhIAk6CTYJOgkxNjMyNTYKK1NpZXJyYSAJOgk2CToJMzU1NQorU2lza2l5b3UgCToJNgk6CTQ0MzAxCitTb2xhbm8gCToJNgk6CTM5NDU0MgorU29ub21hIAk6CTYJOgk0NTg2MTQKK1N0YW5pc2xhdXMgCToJNgk6CTQ0Njk5NworU3V0dGVyIAk6CTYJOgk3ODkzMAorVGVoYW1hIAk6CTYJOgk1NjAzOQorVHJpbml0eSAJOgk2CToJMTMwMjIKK1R1bGFyZSAJOgk2CToJMzY4MDIxCitUdW9sdW1uZSAJOgk2CToJNTQ1MDEKK1ZlbnR1cmEgCToJNgk6CTc1MzE5NworWW9sbyAJOgk2CToJMTY4NjYwCitZdWJhIAk6CTYJOgk2MDIxOQorQWRhbXMgCToJOAk6CTM2Mzg1NworQWxhbW9zYSAJOgk4CToJMTQ5NjYKK0FyYXBhaG9lIAk6CTgJOgk0ODc5NjcKK0FyY2h1bGV0YSAJOgk4CToJOTg5OAorQmFjYSAJOgk4CToJNDUxNworQmVudCAJOgk4CToJNTk5OAorQm91bGRlciAJOgk4CToJMjkxMjg4CitDaGFmZmVlIAk6CTgJOgkxNjI0MgorQ2hleWVubmUgCToJOAk6CTIyMzEKK0NsZWFyIENyZWVrIAk6CTgJOgk5MzIyCitDb25lam9zIAk6CTgJOgk4NDAwCitDb3N0aWxsYSAJOgk4CToJMzY2MworQ3Jvd2xleSAJOgk4CToJNTUxOAorQ3VzdGVyIAk6CTgJOgkzNTAzCitEZWx0YSAJOgk4CToJMjc4MzQKK0RlbnZlciAJOgk4CToJNTU0NjM2CitEb2xvcmVzIAk6CTgJOgkxODQ0CitEb3VnbGFzIAk6CTgJOgkxNzU3NjYKK0VhZ2xlIAk6CTgJOgk0MTY1OQorRWxiZXJ0IAk6CTgJOgkxOTg3MgorRWwgUGFzbyAJOgk4CToJNTE2OTI5CitGcmVtb250IAk6CTgJOgk0NjE0NQorR2FyZmllbGQgCToJOAk6CTQzNzkxCitHaWxwaW4gCToJOAk6CTQ3NTcKK0dyYW5kIAk6CTgJOgkxMjQ0MgorR3Vubmlzb24gCToJOAk6CTEzOTU2CitIaW5zZGFsZSAJOgk4CToJNzkwCitIdWVyZmFubyAJOgk4CToJNzg2MgorSmFja3NvbiAJOgk4CToJMTU3NworSmVmZmVyc29uIAk6CTgJOgk1MjcwNTYKK0tpb3dhIAk6CTgJOgkxNjIyCitLaXQgQ2Fyc29uIAk6CTgJOgk4MDExCitMYWtlIAk6CTgJOgk3ODEyCitMYSBQbGF0YSAJOgk4CToJNDM5NDEKK0xhcmltZXIgCToJOAk6CTI1MTQ5NAorTGFzIEFuaW1hcyAJOgk4CToJMTUyMDcKK0xpbmNvbG4gCToJOAk6CTYwODcKK0xvZ2FuIAk6CTgJOgkyMDUwNAorTWVzYSAJOgk4CToJMTE2MjU1CitNaW5lcmFsIAk6CTgJOgk4MzEKK01vZmZhdCAJOgk4CToJMTMxODQKK01vbnRlenVtYSAJOgk4CToJMjM4MzAKK01vbnRyb3NlIAk6CTgJOgkzMzQzMgorTW9yZ2FuIAk6CTgJOgkyNzE3MQorT3Rlcm8gCToJOAk6CTIwMzExCitPdXJheSAJOgk4CToJMzc0MgorUGFyayAJOgk4CToJMTQ1MjMKK1BoaWxsaXBzIAk6CTgJOgk0NDgwCitQaXRraW4gCToJOAk6CTE0ODcyCitQcm93ZXJzIAk6CTgJOgkxNDQ4MworUHVlYmxvIAk6CTgJOgkxNDE0NzIKK1JpbyBCbGFuY28gCToJOAk6CTU5ODYKK1JpbyBHcmFuZGUgCToJOAk6CTEyNDEzCitSb3V0dCAJOgk4CToJMTk2OTAKK1NhZ3VhY2hlIAk6CTgJOgk1OTE3CitTYW4gSnVhbiAJOgk4CToJNTU4CitTYW4gTWlndWVsIAk6CTgJOgk2NTk0CitTZWRnd2ljayAJOgk4CToJMjc0NworU3VtbWl0IAk6CTgJOgkyMzU0OAorVGVsbGVyIAk6CTgJOgkyMDU1NQorV2FzaGluZ3RvbiAJOgk4CToJNDkyNgorV2VsZCAJOgk4CToJMTgwOTM2CitZdW1hIAk6CTgJOgk5ODQxCitGYWlyZmllbGQgCToJOQk6CTg4MjU2NworSGFydGZvcmQgCToJOQk6CTg1NzE4MworTGl0Y2hmaWVsZCAJOgk5CToJMTgyMTkzCitNaWRkbGVzZXggCToJOQk6CTE1NTA3MQorTmV3IEhhdmVuIAk6CTkJOgk4MjQwMDgKK05ldyBMb25kb24gCToJOQk6CTI1OTA4OAorVG9sbGFuZCAJOgk5CToJMTM2MzY0CitXaW5kaGFtIAk6CTkJOgkxMDkwOTEKK0tlbnQgCToJMTAJOgkxMjY2OTcKK05ldyBDYXN0bGUgCToJMTAJOgk1MDAyNjUKK1N1c3NleCAJOgkxMAk6CTE1NjYzOAorRGlzdHJpY3Qgb2YgQ29sdW1iaWEJOgkxMQk6CTU3MjA1OQorQWxhY2h1YSAJOgkxMgk6CTIxNzk1NQorQmFrZXIgCToJMTIJOgkyMjI1OQorQmF5IAk6CTEyCToJMTQ4MjE3CitCcmFkZm9yZCAJOgkxMgk6CTI2MDg4CitCcmV2YXJkIAk6CTEyCToJNDc2MjMwCitCcm93YXJkIAk6CTEyCToJMTYyMzAxOAorQ2FsaG91biAJOgkxMgk6CTEzMDE3CitDaGFybG90dGUgCToJMTIJOgkxNDE2MjcKK0NpdHJ1cyAJOgkxMgk6CTExODA4NQorQ2xheSAJOgkxMgk6CTE0MDgxNAorQ29sbGllciAJOgkxMgk6CTI1MTM3NworQ29sdW1iaWEgCToJMTIJOgk1NjUxMworRGVTb3RvIAk6CTEyCToJMzIyMDkKK0RpeGllIAk6CTEyCToJMTM4MjcKK0R1dmFsIAk6CTEyCToJNzc4ODc5CitFc2NhbWJpYSAJOgkxMgk6CTI5NDQxMAorRmxhZ2xlciAJOgkxMgk6CTQ5ODMyCitGcmFua2xpbiAJOgkxMgk6CTExMDU3CitHYWRzZGVuIAk6CTEyCToJNDUwODcKK0dpbGNocmlzdCAJOgkxMgk6CTE0NDM3CitHbGFkZXMgCToJMTIJOgkxMDU3NgorR3VsZiAJOgkxMgk6CTEzMzMyCitIYW1pbHRvbiAJOgkxMgk6CTEzMzI3CitIYXJkZWUgCToJMTIJOgkyNjkzOAorSGVuZHJ5IAk6CTEyCToJMzYyMTAKK0hlcm5hbmRvIAk6CTEyCToJMTMwODAyCitIaWdobGFuZHMgCToJMTIJOgk4NzM2NgorSGlsbHNib3JvdWdoIAk6CTEyCToJOTk4OTQ4CitIb2xtZXMgCToJMTIJOgkxODU2NAorSW5kaWFuIFJpdmVyIAk6CTEyCToJMTEyOTQ3CitKYWNrc29uIAk6CTEyCToJNDY3NTUKK0plZmZlcnNvbiAJOgkxMgk6CTEyOTAyCitMYWZheWV0dGUgCToJMTIJOgk3MDIyCitMYWtlIAk6CTEyCToJMjEwNTI4CitMZWUgCToJMTIJOgk0NDA4ODgKK0xlb24gCToJMTIJOgkyMzk0NTIKK0xldnkgCToJMTIJOgkzNDQ1MAorTGliZXJ0eSAJOgkxMgk6CTcwMjEKK01hZGlzb24gCToJMTIJOgkxODczMworTWFuYXRlZSAJOgkxMgk6CTI2NDAwMgorTWFyaW9uIAk6CTEyCToJMjU4OTE2CitNYXJ0aW4gCToJMTIJOgkxMjY3MzEKK01pYW1pLURhZGUgCToJMTIJOgkyMjUzMzYyCitNb25yb2UgCToJMTIJOgk3OTU4OQorTmFzc2F1IAk6CTEyCToJNTc2NjMKK09rYWxvb3NhIAk6CTEyCToJMTcwNDk4CitPa2VlY2hvYmVlIAk6CTEyCToJMzU5MTAKK09yYW5nZSAJOgkxMgk6CTg5NjM0NAorT3NjZW9sYSAJOgkxMgk6CTE3MjQ5MworUGFsbSBCZWFjaCAJOgkxMgk6CTExMzExODQKK1Bhc2NvIAk6CTEyCToJMzQ0NzY1CitQaW5lbGxhcyAJOgkxMgk6CTkyMTQ4MgorUG9sayAJOgkxMgk6CTQ4MzkyNAorUHV0bmFtIAk6CTEyCToJNzA0MjMKK1N0LiBKb2hucyAJOgkxMgk6CTEyMzEzNQorU3QuIEx1Y2llIAk6CTEyCToJMTkyNjk1CitTYW50YSBSb3NhIAk6CTEyCToJMTE3NzQzCitTYXJhc290YSAJOgkxMgk6CTMyNTk1NworU2VtaW5vbGUgCToJMTIJOgkzNjUxOTYKK1N1bXRlciAJOgkxMgk6CTUzMzQ1CitTdXdhbm5lZSAJOgkxMgk6CTM0ODQ0CitUYXlsb3IgCToJMTIJOgkxOTI1NgorVW5pb24gCToJMTIJOgkxMzQ0MgorVm9sdXNpYSAJOgkxMgk6CTQ0MzM0MworV2FrdWxsYSAJOgkxMgk6CTIyODYzCitXYWx0b24gCToJMTIJOgk0MDYwMQorV2FzaGluZ3RvbiAJOgkxMgk6CTIwOTczCitBcHBsaW5nIAk6CTEzCToJMTc0MTkKK0F0a2luc29uIAk6CTEzCToJNzYwOQorQmFjb24gCToJMTMJOgkxMDEwMworQmFrZXIgCToJMTMJOgk0MDc0CitCYWxkd2luIAk6CTEzCToJNDQ3MDAKK0JhbmtzIAk6CTEzCToJMTQ0MjIKK0JhcnJvdyAJOgkxMwk6CTQ2MTQ0CitCYXJ0b3cgCToJMTMJOgk3NjAxOQorQmVuIEhpbGwgCToJMTMJOgkxNzQ4NAorQmVycmllbiAJOgkxMwk6CTE2MjM1CitCaWJiIAk6CTEzCToJMTUzODg3CitCbGVja2xleSAJOgkxMwk6CTExNjY2CitCcmFudGxleSAJOgkxMwk6CTE0NjI5CitCcm9va3MgCToJMTMJOgkxNjQ1MAorQnJ5YW4gCToJMTMJOgkyMzQxNworQnVsbG9jaCAJOgkxMwk6CTU1OTgzCitCdXJrZSAJOgkxMwk6CTIyMjQzCitCdXR0cyAJOgkxMwk6CTE5NTIyCitDYWxob3VuIAk6CTEzCToJNjMyMAorQ2FtZGVuIAk6CTEzCToJNDM2NjQKK0NhbmRsZXIgCToJMTMJOgk5NTc3CitDYXJyb2xsIAk6CTEzCToJODcyNjgKK0NhdG9vc2EgCToJMTMJOgk1MzI4MgorQ2hhcmx0b24gCToJMTMJOgkxMDI4MgorQ2hhdGhhbSAJOgkxMwk6CTIzMjA0OAorQ2hhdHRhaG9vY2hlZSAJOgkxMwk6CTE0ODgyCitDaGF0dG9vZ2EgCToJMTMJOgkyNTQ3MAorQ2hlcm9rZWUgCToJMTMJOgkxNDE5MDMKK0NsYXJrZSAJOgkxMwk6CTEwMTQ4OQorQ2xheSAJOgkxMwk6CTMzNTcKK0NsYXl0b24gCToJMTMJOgkyMzY1MTcKK0NsaW5jaCAJOgkxMwk6CTY4NzgKK0NvYmIgCToJMTMJOgk2MDc3NTEKK0NvZmZlZSAJOgkxMwk6CTM3NDEzCitDb2xxdWl0dCAJOgkxMwk6CTQyMDUzCitDb2x1bWJpYSAJOgkxMwk6CTg5Mjg4CitDb29rIAk6CTEzCToJMTU3NzEKK0Nvd2V0YSAJOgkxMwk6CTg5MjE1CitDcmF3Zm9yZCAJOgkxMwk6CTEyNDk1CitDcmlzcCAJOgkxMwk6CTIxOTk2CitEYWRlIAk6CTEzCToJMTUxNTQKK0Rhd3NvbiAJOgkxMwk6CTE1OTk5CitEZWNhdHVyIAk6CTEzCToJMjgyNDAKK0RlS2FsYiAJOgkxMwk6CTY2NTg2NQorRG9kZ2UgCToJMTMJOgkxOTE3MQorRG9vbHkgCToJMTMJOgkxMTUyNQorRG91Z2hlcnR5IAk6CTEzCToJOTYwNjUKK0RvdWdsYXMgCToJMTMJOgk5MjE3NAorRWFybHkgCToJMTMJOgkxMjM1NAorRWNob2xzIAk6CTEzCToJMzc1NAorRWZmaW5naGFtIAk6CTEzCToJMzc1MzUKK0VsYmVydCAJOgkxMwk6CTIwNTExCitFbWFudWVsIAk6CTEzCToJMjE4MzcKK0V2YW5zIAk6CTEzCToJMTA0OTUKK0Zhbm5pbiAJOgkxMwk6CTE5Nzk4CitGYXlldHRlIAk6CTEzCToJOTEyNjMKK0Zsb3lkIAk6CTEzCToJOTA1NjUKK0ZvcnN5dGggCToJMTMJOgk5ODQwNworRnJhbmtsaW4gCToJMTMJOgkyMDI4NQorRnVsdG9uIAk6CTEzCToJODE2MDA2CitHaWxtZXIgCToJMTMJOgkyMzQ1NgorR2xhc2NvY2sgCToJMTMJOgkyNTU2CitHbHlubiAJOgkxMwk6CTY3NTY4CitHb3Jkb24gCToJMTMJOgk0NDEwNAorR3JhZHkgCToJMTMJOgkyMzY1OQorR3JlZW5lIAk6CTEzCToJMTQ0MDYKK0d3aW5uZXR0IAk6CTEzCToJNTg4NDQ4CitIYWJlcnNoYW0gCToJMTMJOgkzNTkwMgorSGFsbCAJOgkxMwk6CTEzOTI3NworSGFuY29jayAJOgkxMwk6CTEwMDc2CitIYXJhbHNvbiAJOgkxMwk6CTI1NjkwCitIYXJyaXMgCToJMTMJOgkyMzY5NQorSGFydCAJOgkxMwk6CTIyOTk3CitIZWFyZCAJOgkxMwk6CTExMDEyCitIZW5yeSAJOgkxMwk6CTExOTM0MQorSG91c3RvbiAJOgkxMwk6CTExMDc2NQorSXJ3aW4gCToJMTMJOgk5OTMxCitKYWNrc29uIAk6CTEzCToJNDE1ODkKK0phc3BlciAJOgkxMwk6CTExNDI2CitKZWZmIERhdmlzIAk6CTEzCToJMTI2ODQKK0plZmZlcnNvbiAJOgkxMwk6CTE3MjY2CitKZW5raW5zIAk6CTEzCToJODU3NQorSm9obnNvbiAJOgkxMwk6CTg1NjAKK0pvbmVzIAk6CTEzCToJMjM2MzkKK0xhbWFyIAk6CTEzCToJMTU5MTIKK0xhbmllciAJOgkxMwk6CTcyNDEKK0xhdXJlbnMgCToJMTMJOgk0NDg3NAorTGVlIAk6CTEzCToJMjQ3NTcKK0xpYmVydHkgCToJMTMJOgk2MTYxMAorTGluY29sbiAJOgkxMwk6CTgzNDgKK0xvbmcgCToJMTMJOgkxMDMwNAorTG93bmRlcyAJOgkxMwk6CTkyMTE1CitMdW1wa2luIAk6CTEzCToJMjEwMTYKK01jRHVmZmllIAk6CTEzCToJMjEyMzEKK01jSW50b3NoIAk6CTEzCToJMTA4NDcKK01hY29uIAk6CTEzCToJMTQwNzQKK01hZGlzb24gCToJMTMJOgkyNTczMAorTWFyaW9uIAk6CTEzCToJNzE0NAorTWVyaXdldGhlciAJOgkxMwk6CTIyNTM0CitNaWxsZXIgCToJMTMJOgk2MzgzCitNaXRjaGVsbCAJOgkxMwk6CTIzOTMyCitNb25yb2UgCToJMTMJOgkyMTc1NworTW9udGdvbWVyeSAJOgkxMwk6CTgyNzAKK01vcmdhbiAJOgkxMwk6CTE1NDU3CitNdXJyYXkgCToJMTMJOgkzNjUwNgorTXVzY29nZWUgCToJMTMJOgkxODYyOTEKK05ld3RvbiAJOgkxMwk6CTYyMDAxCitPY29uZWUgCToJMTMJOgkyNjIyNQorT2dsZXRob3JwZSAJOgkxMwk6CTEyNjM1CitQYXVsZGluZyAJOgkxMwk6CTgxNjc4CitQZWFjaCAJOgkxMwk6CTIzNjY4CitQaWNrZW5zIAk6CTEzCToJMjI5ODMKK1BpZXJjZSAJOgkxMwk6CTE1NjM2CitQaWtlIAk6CTEzCToJMTM2ODgKK1BvbGsgCToJMTMJOgkzODEyNworUHVsYXNraSAJOgkxMwk6CTk1ODgKK1B1dG5hbSAJOgkxMwk6CTE4ODEyCitRdWl0bWFuIAk6CTEzCToJMjU5OAorUmFidW4gCToJMTMJOgkxNTA1MAorUmFuZG9scGggCToJMTMJOgk3NzkxCitSaWNobW9uZCAJOgkxMwk6CTE5OTc3NQorUm9ja2RhbGUgCToJMTMJOgk3MDExMQorU2NobGV5IAk6CTEzCToJMzc2NgorU2NyZXZlbiAJOgkxMwk6CTE1Mzc0CitTZW1pbm9sZSAJOgkxMwk6CTkzNjkKK1NwYWxkaW5nIAk6CTEzCToJNTg0MTcKK1N0ZXBoZW5zIAk6CTEzCToJMjU0MzUKK1N0ZXdhcnQgCToJMTMJOgk1MjUyCitTdW10ZXIgCToJMTMJOgkzMzIwMAorVGFsYm90IAk6CTEzCToJNjQ5OAorVGFsaWFmZXJybyAJOgkxMwk6CTIwNzcKK1RhdHRuYWxsIAk6CTEzCToJMjIzMDUKK1RheWxvciAJOgkxMwk6CTg4MTUKK1RlbGZhaXIgCToJMTMJOgkxMTc5NAorVGVycmVsbCAJOgkxMwk6CTEwOTcwCitUaG9tYXMgCToJMTMJOgk0MjczNworVGlmdCAJOgkxMwk6CTM4NDA3CitUb29tYnMgCToJMTMJOgkyNjA2NworVG93bnMgCToJMTMJOgk5MzE5CitUcmV1dGxlbiAJOgkxMwk6CTY4NTQKK1Ryb3VwIAk6CTEzCToJNTg3NzkKK1R1cm5lciAJOgkxMwk6CTk1MDQKK1R3aWdncyAJOgkxMwk6CTEwNTkwCitVbmlvbiAJOgkxMwk6CTE3Mjg5CitVcHNvbiAJOgkxMwk6CTI3NTk3CitXYWxrZXIgCToJMTMJOgk2MTA1MworV2FsdG9uIAk6CTEzCToJNjA2ODcKK1dhcmUgCToJMTMJOgkzNTQ4MworV2FycmVuIAk6CTEzCToJNjMzNgorV2FzaGluZ3RvbiAJOgkxMwk6CTIxMTc2CitXYXluZSAJOgkxMwk6CTI2NTY1CitXZWJzdGVyIAk6CTEzCToJMjM5MAorV2hlZWxlciAJOgkxMwk6CTYxNzkKK1doaXRlIAk6CTEzCToJMTk5NDQKK1doaXRmaWVsZCAJOgkxMwk6CTgzNTI1CitXaWxjb3ggCToJMTMJOgk4NTc3CitXaWxrZXMgCToJMTMJOgkxMDY4NworV2lsa2luc29uIAk6CTEzCToJMTAyMjAKK1dvcnRoIAk6CTEzCToJMjE5NjcKK0hhd2FpaSAJOgkxNQk6CTE0ODY3NworSG9ub2x1bHUgCToJMTUJOgk4NzYxNTYKK0thbGF3YW8gCToJMTUJOgkxNDcKK0thdWFpIAk6CTE1CToJNTg0NjMKK01hdWkgCToJMTUJOgkxMjgwOTQKK0FkYSAJOgkxNgk6CTMwMDkwNAorQWRhbXMgCToJMTYJOgkzNDc2CitCYW5ub2NrIAk6CTE2CToJNzU1NjUKK0JlYXIgTGFrZSAJOgkxNgk6CTY0MTEKK0JlbmV3YWggCToJMTYJOgk5MTcxCitCaW5naGFtIAk6CTE2CToJNDE3MzUKK0JsYWluZSAJOgkxNgk6CTE4OTkxCitCb2lzZSAJOgkxNgk6CTY2NzAKK0Jvbm5lciAJOgkxNgk6CTM2ODM1CitCb25uZXZpbGxlIAk6CTE2CToJODI1MjIKK0JvdW5kYXJ5IAk6CTE2CToJOTg3MQorQnV0dGUgCToJMTYJOgkyODk5CitDYW1hcyAJOgkxNgk6CTk5MQorQ2FueW9uIAk6CTE2CToJMTMxNDQxCitDYXJpYm91IAk6CTE2CToJNzMwNAorQ2Fzc2lhIAk6CTE2CToJMjE0MTYKK0NsYXJrIAk6CTE2CToJMTAyMgorQ2xlYXJ3YXRlciAJOgkxNgk6CTg5MzAKK0N1c3RlciAJOgkxNgk6CTQzNDIKK0VsbW9yZSAJOgkxNgk6CTI5MTMwCitGcmFua2xpbiAJOgkxNgk6CTExMzI5CitGcmVtb250IAk6CTE2CToJMTE4MTkKK0dlbSAJOgkxNgk6CTE1MTgxCitHb29kaW5nIAk6CTE2CToJMTQxNTUKK0lkYWhvIAk6CTE2CToJMTU1MTEKK0plZmZlcnNvbiAJOgkxNgk6CTE5MTU1CitKZXJvbWUgCToJMTYJOgkxODM0MgorS29vdGVuYWkgCToJMTYJOgkxMDg2ODUKK0xhdGFoIAk6CTE2CToJMzQ5MzUKK0xlbWhpIAk6CTE2CToJNzgwNgorTGV3aXMgCToJMTYJOgkzNzQ3CitMaW5jb2xuIAk6CTE2CToJNDA0NAorTWFkaXNvbiAJOgkxNgk6CTI3NDY3CitNaW5pZG9rYSAJOgkxNgk6CTIwMTc0CitOZXogUGVyY2UgCToJMTYJOgkzNzQxMAorT25laWRhIAk6CTE2CToJNDEyNQorT3d5aGVlIAk6CTE2CToJMTA2NDQKK1BheWV0dGUgCToJMTYJOgkyMDU3OAorUG93ZXIgCToJMTYJOgk3NTM4CitTaG9zaG9uZSAJOgkxNgk6CTEzNzcxCitUZXRvbiAJOgkxNgk6CTU5OTkKK1R3aW4gRmFsbHMgCToJMTYJOgk2NDI4NAorVmFsbGV5IAk6CTE2CToJNzY1MQorV2FzaGluZ3RvbiAJOgkxNgk6CTk5NzcKK0FkYW1zIAk6CTE3CToJNjgyNzcKK0FsZXhhbmRlciAJOgkxNwk6CTk1OTAKK0JvbmQgCToJMTcJOgkxNzYzMworQm9vbmUgCToJMTcJOgk0MTc4NgorQnJvd24gCToJMTcJOgk2OTUwCitCdXJlYXUgCToJMTcJOgkzNTUwMworQ2FsaG91biAJOgkxNwk6CTUwODQKK0NhcnJvbGwgCToJMTcJOgkxNjY3NAorQ2FzcyAJOgkxNwk6CTEzNjk1CitDaGFtcGFpZ24gCToJMTcJOgkxNzk2NjkKK0NocmlzdGlhbiAJOgkxNwk6CTM1MzcyCitDbGFyayAJOgkxNwk6CTE3MDA4CitDbGF5IAk6CTE3CToJMTQ1NjAKK0NsaW50b24gCToJMTcJOgkzNTUzNQorQ29sZXMgCToJMTcJOgk1MzE5NgorQ29vayAJOgkxNwk6CTUzNzY3NDEKK0NyYXdmb3JkIAk6CTE3CToJMjA0NTIKK0N1bWJlcmxhbmQgCToJMTcJOgkxMTI1MworRGVLYWxiIAk6CTE3CToJODg5NjkKK0RlIFdpdHQgCToJMTcJOgkxNjc5OAorRG91Z2xhcyAJOgkxNwk6CTE5OTIyCitEdVBhZ2UgCToJMTcJOgk5MDQxNjEKK0VkZ2FyIAk6CTE3CToJMTk3MDQKK0Vkd2FyZHMgCToJMTcJOgk2OTcxCitFZmZpbmdoYW0gCToJMTcJOgkzNDI2NAorRmF5ZXR0ZSAJOgkxNwk6CTIxODAyCitGb3JkIAk6CTE3CToJMTQyNDEKK0ZyYW5rbGluIAk6CTE3CToJMzkwMTgKK0Z1bHRvbiAJOgkxNwk6CTM4MjUwCitHYWxsYXRpbiAJOgkxNwk6CTY0NDUKK0dyZWVuZSAJOgkxNwk6CTE0NzYxCitHcnVuZHkgCToJMTcJOgkzNzUzNQorSGFtaWx0b24gCToJMTcJOgk4NjIxCitIYW5jb2NrIAk6CTE3CToJMjAxMjEKK0hhcmRpbiAJOgkxNwk6CTQ4MDAKK0hlbmRlcnNvbiAJOgkxNwk6CTgyMTMKK0hlbnJ5IAk6CTE3CToJNTEwMjAKK0lyb3F1b2lzIAk6CTE3CToJMzEzMzQKK0phY2tzb24gCToJMTcJOgk1OTYxMgorSmFzcGVyIAk6CTE3CToJMTAxMTcKK0plZmZlcnNvbiAJOgkxNwk6CTQwMDQ1CitKZXJzZXkgCToJMTcJOgkyMTY2OAorSm8gRGF2aWVzcyAJOgkxNwk6CTIyMjg5CitKb2huc29uIAk6CTE3CToJMTI4NzgKK0thbmUgCToJMTcJOgk0MDQxMTkKK0thbmtha2VlIAk6CTE3CToJMTAzODMzCitLZW5kYWxsIAk6CTE3CToJNTQ1NDQKK0tub3ggCToJMTcJOgk1NTgzNgorTGFrZSAJOgkxNwk6CTY0NDM1NgorTGEgU2FsbGUgCToJMTcJOgkxMTE1MDkKK0xhd3JlbmNlIAk6CTE3CToJMTU0NTIKK0xlZSAJOgkxNwk6CTM2MDYyCitMaXZpbmdzdG9uIAk6CTE3CToJMzk2NzgKK0xvZ2FuIAk6CTE3CToJMzExODMKK01jRG9ub3VnaCAJOgkxNwk6CTMyOTEzCitNY0hlbnJ5IAk6CTE3CToJMjYwMDc3CitNY0xlYW4gCToJMTcJOgkxNTA0MzMKK01hY29uIAk6CTE3CToJMTE0NzA2CitNYWNvdXBpbiAJOgkxNwk6CTQ5MDE5CitNYWRpc29uIAk6CTE3CToJMjU4OTQxCitNYXJpb24gCToJMTcJOgk0MTY5MQorTWFyc2hhbGwgCToJMTcJOgkxMzE4MAorTWFzb24gCToJMTcJOgkxNjAzOAorTWFzc2FjIAk6CTE3CToJMTUxNjEKK01lbmFyZCAJOgkxNwk6CTEyNDg2CitNZXJjZXIgCToJMTcJOgkxNjk1NworTW9ucm9lIAk6CTE3CToJMjc2MTkKK01vbnRnb21lcnkgCToJMTcJOgkzMDY1MgorTW9yZ2FuIAk6CTE3CToJMzY2MTYKK01vdWx0cmllIAk6CTE3CToJMTQyODcKK09nbGUgCToJMTcJOgk1MTAzMgorUGVvcmlhIAk6CTE3CToJMTgzNDMzCitQZXJyeSAJOgkxNwk6CTIzMDk0CitQaWF0dCAJOgkxNwk6CTE2MzY1CitQaWtlIAk6CTE3CToJMTczODQKK1BvcGUgCToJMTcJOgk0NDEzCitQdWxhc2tpIAk6CTE3CToJNzM0OAorUHV0bmFtIAk6CTE3CToJNjA4NgorUmFuZG9scGggCToJMTcJOgkzMzg5MworUmljaGxhbmQgCToJMTcJOgkxNjE0OQorUm9jayBJc2xhbmQgCToJMTcJOgkxNDkzNzQKK1N0LiBDbGFpciAJOgkxNwk6CTI1NjA4MgorU2FsaW5lIAk6CTE3CToJMjY3MzMKK1NhbmdhbW9uIAk6CTE3CToJMTg4OTUxCitTY2h1eWxlciAJOgkxNwk6CTcxODkKK1Njb3R0IAk6CTE3CToJNTUzNworU2hlbGJ5IAk6CTE3CToJMjI4OTMKK1N0YXJrIAk6CTE3CToJNjMzMgorU3RlcGhlbnNvbiAJOgkxNwk6CTQ4OTc5CitUYXpld2VsbCAJOgkxNwk6CTEyODQ4NQorVW5pb24gCToJMTcJOgkxODI5MworVmVybWlsaW9uIAk6CTE3CToJODM5MTkKK1dhYmFzaCAJOgkxNwk6CTEyOTM3CitXYXJyZW4gCToJMTcJOgkxODczNQorV2FzaGluZ3RvbiAJOgkxNwk6CTE1MTQ4CitXYXluZSAJOgkxNwk6CTE3MTUxCitXaGl0ZSAJOgkxNwk6CTE1MzcxCitXaGl0ZXNpZGUgCToJMTcJOgk2MDY1MworV2lsbCAJOgkxNwk6CTUwMjI2NgorV2lsbGlhbXNvbiAJOgkxNwk6CTYxMjk2CitXaW5uZWJhZ28gCToJMTcJOgkyNzg0MTgKK1dvb2Rmb3JkIAk6CTE3CToJMzU0NjkKK0FkYW1zIAk6CTE4CToJMzM2MjUKK0FsbGVuIAk6CTE4CToJMzMxODQ5CitCYXJ0aG9sb21ldyAJOgkxOAk6CTcxNDM1CitCZW50b24gCToJMTgJOgk5NDIxCitCbGFja2ZvcmQgCToJMTgJOgkxNDA0OAorQm9vbmUgCToJMTgJOgk0NjEwNworQnJvd24gCToJMTgJOgkxNDk1NworQ2Fycm9sbCAJOgkxOAk6CTIwMTY1CitDYXNzIAk6CTE4CToJNDA5MzAKK0NsYXJrIAk6CTE4CToJOTY0NzIKK0NsYXkgCToJMTgJOgkyNjU1NgorQ2xpbnRvbiAJOgkxOAk6CTMzODY2CitDcmF3Zm9yZCAJOgkxOAk6CTEwNzQzCitEYXZpZXNzIAk6CTE4CToJMjk4MjAKK0RlYXJib3JuIAk6CTE4CToJNDYxMDkKK0RlY2F0dXIgCToJMTgJOgkyNDU1NQorRGVLYWxiIAk6CTE4CToJNDAyODUKK0RlbGF3YXJlIAk6CTE4CToJMTE4NzY5CitEdWJvaXMgCToJMTgJOgkzOTY3NAorRWxraGFydCAJOgkxOAk6CTE4Mjc5MQorRmF5ZXR0ZSAJOgkxOAk6CTI1NTg4CitGbG95ZCAJOgkxOAk6CTcwODIzCitGb3VudGFpbiAJOgkxOAk6CTE3OTU0CitGcmFua2xpbiAJOgkxOAk6CTIyMTUxCitGdWx0b24gCToJMTgJOgkyMDUxMQorR2lic29uIAk6CTE4CToJMzI1MDAKK0dyYW50IAk6CTE4CToJNzM0MDMKK0dyZWVuZSAJOgkxOAk6CTMzMTU3CitIYW1pbHRvbiAJOgkxOAk6CTE4Mjc0MAorSGFuY29jayAJOgkxOAk6CTU1MzkxCitIYXJyaXNvbiAJOgkxOAk6CTM0MzI1CitIZW5kcmlja3MgCToJMTgJOgkxMDQwOTMKK0hlbnJ5IAk6CTE4CToJNDg1MDgKK0hvd2FyZCAJOgkxOAk6CTg0OTY0CitIdW50aW5ndG9uIAk6CTE4CToJMzgwNzUKK0phY2tzb24gCToJMTgJOgk0MTMzNQorSmFzcGVyIAk6CTE4CToJMzAwNDMKK0pheSAJOgkxOAk6CTIxODA2CitKZWZmZXJzb24gCToJMTgJOgkzMTcwNQorSmVubmluZ3MgCToJMTgJOgkyNzU1NAorSm9obnNvbiAJOgkxOAk6CTExNTIwOQorS25veCAJOgkxOAk6CTM5MjU2CitLb3NjaXVza28gCToJMTgJOgk3NDA1NworTGFncmFuZ2UgCToJMTgJOgkzNDkwOQorTGFrZSAJOgkxOAk6CTQ4NDU2NAorTGFQb3J0ZSAJOgkxOAk6CTExMDEwNgorTGF3cmVuY2UgCToJMTgJOgk0NTkyMgorTWFkaXNvbiAJOgkxOAk6CTEzMzM1OAorTWFyaW9uIAk6CTE4CToJODYwNDU0CitNYXJzaGFsbCAJOgkxOAk6CTQ1MTI4CitNYXJ0aW4gCToJMTgJOgkxMDM2OQorTWlhbWkgCToJMTgJOgkzNjA4MgorTW9ucm9lIAk6CTE4CToJMTIwNTYzCitNb250Z29tZXJ5IAk6CTE4CToJMzc2MjkKK01vcmdhbiAJOgkxOAk6CTY2Njg5CitOZXd0b24gCToJMTgJOgkxNDU2NgorTm9ibGUgCToJMTgJOgk0NjI3NQorT2hpbyAJOgkxOAk6CTU2MjMKK09yYW5nZSAJOgkxOAk6CTE5MzA2CitPd2VuIAk6CTE4CToJMjE3ODYKK1BhcmtlIAk6CTE4CToJMTcyNDEKK1BlcnJ5IAk6CTE4CToJMTg4OTkKK1Bpa2UgCToJMTgJOgkxMjgzNworUG9ydGVyIAk6CTE4CToJMTQ2Nzk4CitQb3NleSAJOgkxOAk6CTI3MDYxCitQdWxhc2tpIAk6CTE4CToJMTM3NTUKK1B1dG5hbSAJOgkxOAk6CTM2MDE5CitSYW5kb2xwaCAJOgkxOAk6CTI3NDAxCitSaXBsZXkgCToJMTgJOgkyNjUyMworUnVzaCAJOgkxOAk6CTE4MjYxCitTdC4gSm9zZXBoIAk6CTE4CToJMjY1NTU5CitTY290dCAJOgkxOAk6CTIyOTYwCitTaGVsYnkgCToJMTgJOgk0MzQ0NQorU3BlbmNlciAJOgkxOAk6CTIwMzkxCitTdGFya2UgCToJMTgJOgkyMzU1NgorU3RldWJlbiAJOgkxOAk6CTMzMjE0CitTdWxsaXZhbiAJOgkxOAk6CTIxNzUxCitTd2l0emVybGFuZCAJOgkxOAk6CTkwNjUKK1RpcHBlY2Fub2UgCToJMTgJOgkxNDg5NTUKK1RpcHRvbiAJOgkxOAk6CTE2NTc3CitVbmlvbiAJOgkxOAk6CTczNDkKK1ZhbmRlcmJ1cmdoIAk6CTE4CToJMTcxOTIyCitWZXJtaWxsaW9uIAk6CTE4CToJMTY3ODgKK1ZpZ28gCToJMTgJOgkxMDU4NDgKK1dhYmFzaCAJOgkxOAk6CTM0OTYwCitXYXJyZW4gCToJMTgJOgk4NDE5CitXYXJyaWNrIAk6CTE4CToJNTIzODMKK1dhc2hpbmd0b24gCToJMTgJOgkyNzIyMworV2F5bmUgCToJMTgJOgk3MTA5NworV2VsbHMgCToJMTgJOgkyNzYwMAorV2hpdGUgCToJMTgJOgkyNTI2NworV2hpdGxleSAJOgkxOAk6CTMwNzA3CitBZGFpciAJOgkxOQk6CTgyNDMKK0FkYW1zIAk6CTE5CToJNDQ4MgorQWxsYW1ha2VlIAk6CTE5CToJMTQ2NzUKK0FwcGFub29zZSAJOgkxOQk6CTEzNzIxCitBdWR1Ym9uIAk6CTE5CToJNjgzMAorQmVudG9uIAk6CTE5CToJMjUzMDgKK0JsYWNrIEhhd2sgCToJMTkJOgkxMjgwMTIKK0Jvb25lIAk6CTE5CToJMjYyMjQKK0JyZW1lciAJOgkxOQk6CTIzMzI1CitCdWNoYW5hbiAJOgkxOQk6CTIxMDkzCitCdWVuYSBWaXN0YSAJOgkxOQk6CTIwNDExCitCdXRsZXIgCToJMTkJOgkxNTMwNQorQ2FsaG91biAJOgkxOQk6CTExMTE1CitDYXJyb2xsIAk6CTE5CToJMjE0MjEKK0Nhc3MgCToJMTkJOgkxNDY4NAorQ2VkYXIgCToJMTkJOgkxODE4NworQ2Vycm8gR29yZG8gCToJMTkJOgk0NjQ0NworQ2hlcm9rZWUgCToJMTkJOgkxMzAzNQorQ2hpY2thc2F3IAk6CTE5CToJMTMwOTUKK0NsYXJrZSAJOgkxOQk6CTkxMzMKK0NsYXkgCToJMTkJOgkxNzM3MgorQ2xheXRvbiAJOgkxOQk6CTE4Njc4CitDbGludG9uIAk6CTE5CToJNTAxNDkKK0NyYXdmb3JkIAk6CTE5CToJMTY5NDIKK0RhbGxhcyAJOgkxOQk6CTQwNzUwCitEYXZpcyAJOgkxOQk6CTg1NDEKK0RlY2F0dXIgCToJMTkJOgk4Njg5CitEZWxhd2FyZSAJOgkxOQk6CTE4NDA0CitEZXMgTW9pbmVzIAk6CTE5CToJNDIzNTEKK0RpY2tpbnNvbiAJOgkxOQk6CTE2NDI0CitEdWJ1cXVlIAk6CTE5CToJODkxNDMKK0VtbWV0IAk6CTE5CToJMTEwMjcKK0ZheWV0dGUgCToJMTkJOgkyMjAwOAorRmxveWQgCToJMTkJOgkxNjkwMAorRnJhbmtsaW4gCToJMTkJOgkxMDcwNAorRnJlbW9udCAJOgkxOQk6CTgwMTAKK0dyZWVuZSAJOgkxOQk6CTEwMzY2CitHcnVuZHkgCToJMTkJOgkxMjM2OQorR3V0aHJpZSAJOgkxOQk6CTExMzUzCitIYW1pbHRvbiAJOgkxOQk6CTE2NDM4CitIYW5jb2NrIAk6CTE5CToJMTIxMDAKK0hhcmRpbiAJOgkxOQk6CTE4ODEyCitIYXJyaXNvbiAJOgkxOQk6CTE1NjY2CitIZW5yeSAJOgkxOQk6CTIwMzM2CitIb3dhcmQgCToJMTkJOgk5OTMyCitIdW1ib2xkdCAJOgkxOQk6CTEwMzgxCitJZGEgCToJMTkJOgk3ODM3CitJb3dhIAk6CTE5CToJMTU2NzEKK0phY2tzb24gCToJMTkJOgkyMDI5NgorSmFzcGVyIAk6CTE5CToJMzcyMTMKK0plZmZlcnNvbiAJOgkxOQk6CTE2MTgxCitKb2huc29uIAk6CTE5CToJMTExMDA2CitKb25lcyAJOgkxOQk6CTIwMjIxCitLZW9rdWsgCToJMTkJOgkxMTQwMAorS29zc3V0aCAJOgkxOQk6CTE3MTYzCitMZWUgCToJMTkJOgkzODA1MgorTGlubiAJOgkxOQk6CTE5MTcwMQorTG91aXNhIAk6CTE5CToJMTIxODMKK0x1Y2FzIAk6CTE5CToJOTQyMgorTHlvbiAJOgkxOQk6CTExNzYzCitNYWRpc29uIAk6CTE5CToJMTQwMTkKK01haGFza2EgCToJMTkJOgkyMjMzNQorTWFyaW9uIAk6CTE5CToJMzIwNTIKK01hcnNoYWxsIAk6CTE5CToJMzkzMTEKK01pbGxzIAk6CTE5CToJMTQ1NDcKK01pdGNoZWxsIAk6CTE5CToJMTA4NzQKK01vbm9uYSAJOgkxOQk6CTEwMDIwCitNb25yb2UgCToJMTkJOgk4MDE2CitNb250Z29tZXJ5IAk6CTE5CToJMTE3NzEKK011c2NhdGluZSAJOgkxOQk6CTQxNzIyCitPJ0JyaWVuIAk6CTE5CToJMTUxMDIKK09zY2VvbGEgCToJMTkJOgk3MDAzCitQYWdlIAk6CTE5CToJMTY5NzYKK1BhbG8gQWx0byAJOgkxOQk6CTEwMTQ3CitQbHltb3V0aCAJOgkxOQk6CTI0ODQ5CitQb2NhaG9udGFzIAk6CTE5CToJODY2MgorUG9sayAJOgkxOQk6CTM3NDYwMQorUG90dGF3YXR0YW1pZSAJOgkxOQk6CTg3NzA0CitQb3dlc2hpZWsgCToJMTkJOgkxODgxNQorUmluZ2dvbGQgCToJMTkJOgk1NDY5CitTYWMgCToJMTkJOgkxMTUyOQorU2NvdHQgCToJMTkJOgkxNTg2NjgKK1NoZWxieSAJOgkxOQk6CTEzMTczCitTaW91eCAJOgkxOQk6CTMxNTg5CitTdG9yeSAJOgkxOQk6CTc5OTgxCitUYW1hIAk6CTE5CToJMTgxMDMKK1RheWxvciAJOgkxOQk6CTY5NTgKK1VuaW9uIAk6CTE5CToJMTIzMDkKK1ZhbiBCdXJlbiAJOgkxOQk6CTc4MDkKK1dhcGVsbG8gCToJMTkJOgkzNjA1MQorV2FycmVuIAk6CTE5CToJNDA2NzEKK1dhc2hpbmd0b24gCToJMTkJOgkyMDY3MAorV2F5bmUgCToJMTkJOgk2NzMwCitXZWJzdGVyIAk6CTE5CToJNDAyMzUKK1dpbm5lYmFnbyAJOgkxOQk6CTExNzIzCitXaW5uZXNoaWVrIAk6CTE5CToJMjEzMTAKK1dvb2RidXJ5IAk6CTE5CToJMTAzODc3CitXb3J0aCAJOgkxOQk6CTc5MDkKK1dyaWdodCAJOgkxOQk6CTE0MzM0CitBbGxlbiAJOgkyMAk6CTE0Mzg1CitBbmRlcnNvbiAJOgkyMAk6CTgxMTAKK0F0Y2hpc29uIAk6CTIwCToJMTY3NzQKK0JhcmJlciAJOgkyMAk6CTUzMDcKK0JhcnRvbiAJOgkyMAk6CTI4MjA1CitCb3VyYm9uIAk6CTIwCToJMTUzNzkKK0Jyb3duIAk6CTIwCToJMTA3MjQKK0J1dGxlciAJOgkyMAk6CTU5NDgyCitDaGFzZSAJOgkyMAk6CTMwMzAKK0NoYXV0YXVxdWEgCToJMjAJOgk0MzU5CitDaGVyb2tlZSAJOgkyMAk6CTIyNjA1CitDaGV5ZW5uZSAJOgkyMAk6CTMxNjUKK0NsYXJrIAk6CTIwCToJMjM5MAorQ2xheSAJOgkyMAk6CTg4MjIKK0Nsb3VkIAk6CTIwCToJMTAyNjgKK0NvZmZleSAJOgkyMAk6CTg4NjUKK0NvbWFuY2hlIAk6CTIwCToJMTk2NworQ293bGV5IAk6CTIwCToJMzYyOTEKK0NyYXdmb3JkIAk6CTIwCToJMzgyNDIKK0RlY2F0dXIgCToJMjAJOgkzNDcyCitEaWNraW5zb24gCToJMjAJOgkxOTM0NAorRG9uaXBoYW4gCToJMjAJOgk4MjQ5CitEb3VnbGFzIAk6CTIwCToJOTk5NjIKK0Vkd2FyZHMgCToJMjAJOgkzNDQ5CitFbGsgCToJMjAJOgkzMjYxCitFbGxpcyAJOgkyMAk6CTI3NTA3CitFbGxzd29ydGggCToJMjAJOgk2NTI1CitGaW5uZXkgCToJMjAJOgk0MDUyMworRm9yZCAJOgkyMAk6CTMyNDU4CitGcmFua2xpbiAJOgkyMAk6CTI0Nzg0CitHZWFyeSAJOgkyMAk6CTI3OTQ3CitHb3ZlIAk6CTIwCToJMzA2OAorR3JhaGFtIAk6CTIwCToJMjk0NgorR3JhbnQgCToJMjAJOgk3OTA5CitHcmF5IAk6CTIwCToJNTkwNAorR3JlZWxleSAJOgkyMAk6CTE1MzQKK0dyZWVud29vZCAJOgkyMAk6CTc2NzMKK0hhbWlsdG9uIAk6CTIwCToJMjY3MAorSGFycGVyIAk6CTIwCToJNjUzNgorSGFydmV5IAk6CTIwCToJMzI4NjkKK0hhc2tlbGwgCToJMjAJOgk0MzA3CitIb2RnZW1hbiAJOgkyMAk6CTIwODUKK0phY2tzb24gCToJMjAJOgkxMjY1NworSmVmZmVyc29uIAk6CTIwCToJMTg0MjYKK0pld2VsbCAJOgkyMAk6CTM3OTEKK0pvaG5zb24gCToJMjAJOgk0NTEwODYKK0tlYXJueSAJOgkyMAk6CTQ1MzEKK0tpbmdtYW4gCToJMjAJOgk4NjczCitLaW93YSAJOgkyMAk6CTMyNzgKK0xhYmV0dGUgCToJMjAJOgkyMjgzNQorTGFuZSAJOgkyMAk6CTIxNTUKK0xlYXZlbndvcnRoIAk6CTIwCToJNjg2OTEKK0xpbmNvbG4gCToJMjAJOgkzNTc4CitMaW5uIAk6CTIwCToJOTU3MAorTG9nYW4gCToJMjAJOgkzMDQ2CitMeW9uIAk6CTIwCToJMzU5MzUKK01jUGhlcnNvbiAJOgkyMAk6CTI5NTU0CitNYXJpb24gCToJMjAJOgkxMzM2MQorTWFyc2hhbGwgCToJMjAJOgkxMDk2NQorTWVhZGUgCToJMjAJOgk0NjMxCitNaWFtaSAJOgkyMAk6CTI4MzUxCitNaXRjaGVsbCAJOgkyMAk6CTY5MzIKK01vbnRnb21lcnkgCToJMjAJOgkzNjI1MgorTW9ycmlzIAk6CTIwCToJNjEwNAorTW9ydG9uIAk6CTIwCToJMzQ5NgorTmVtYWhhIAk6CTIwCToJMTA3MTcKK05lb3NobyAJOgkyMAk6CTE2OTk3CitOZXNzIAk6CTIwCToJMzQ1NAorTm9ydG9uIAk6CTIwCToJNTk1MworT3NhZ2UgCToJMjAJOgkxNjcxMgorT3Nib3JuZSAJOgkyMAk6CTQ0NTIKK090dGF3YSAJOgkyMAk6CTYxNjMKK1Bhd25lZSAJOgkyMAk6CTcyMzMKK1BoaWxsaXBzIAk6CTIwCToJNjAwMQorUG90dGF3YXRvbWllIAk6CTIwCToJMTgyMDkKK1ByYXR0IAk6CTIwCToJOTY0NworUmF3bGlucyAJOgkyMAk6CTI5NjYKK1Jlbm8gCToJMjAJOgk2NDc5MAorUmVwdWJsaWMgCToJMjAJOgk1ODM1CitSaWNlIAk6CTIwCToJMTA3NjEKK1JpbGV5IAk6CTIwCToJNjI4NDMKK1Jvb2tzIAk6CTIwCToJNTY4NQorUnVzaCAJOgkyMAk6CTM1NTEKK1J1c3NlbGwgCToJMjAJOgk3MzcwCitTYWxpbmUgCToJMjAJOgk1MzU5NworU2NvdHQgCToJMjAJOgk1MTIwCitTZWRnd2ljayAJOgkyMAk6CTQ1Mjg2OQorU2V3YXJkIAk6CTIwCToJMjI1MTAKK1NoYXduZWUgCToJMjAJOgkxNjk4NzEKK1NoZXJpZGFuIAk6CTIwCToJMjgxMworU2hlcm1hbiAJOgkyMAk6CTY3NjAKK1NtaXRoIAk6CTIwCToJNDUzNgorU3RhZmZvcmQgCToJMjAJOgk0Nzg5CitTdGFudG9uIAk6CTIwCToJMjQwNgorU3RldmVucyAJOgkyMAk6CTU0NjMKK1N1bW5lciAJOgkyMAk6CTI1OTQ2CitUaG9tYXMgCToJMjAJOgk4MTgwCitUcmVnbyAJOgkyMAk6CTMzMTkKK1dhYmF1bnNlZSAJOgkyMAk6CTY4ODUKK1dhbGxhY2UgCToJMjAJOgkxNzQ5CitXYXNoaW5ndG9uIAk6CTIwCToJNjQ4MworV2ljaGl0YSAJOgkyMAk6CTI1MzEKK1dpbHNvbiAJOgkyMAk6CTEwMzMyCitXb29kc29uIAk6CTIwCToJMzc4OAorV3lhbmRvdHRlIAk6CTIwCToJMTU3ODgyCitBZGFpciAJOgkyMQk6CTE3MjQ0CitBbGxlbiAJOgkyMQk6CTE3ODAwCitBbmRlcnNvbiAJOgkyMQk6CTE5MTExCitCYWxsYXJkIAk6CTIxCToJODI4NgorQmFycmVuIAk6CTIxCToJMzgwMzMKK0JhdGggCToJMjEJOgkxMTA4NQorQmVsbCAJOgkyMQk6CTMwMDYwCitCb29uZSAJOgkyMQk6CTg1OTkxCitCb3VyYm9uIAk6CTIxCToJMTkzNjAKK0JveWQgCToJMjEJOgk0OTc1MgorQm95bGUgCToJMjEJOgkyNzY5NworQnJhY2tlbiAJOgkyMQk6CTgyNzkKK0JyZWF0aGl0dCAJOgkyMQk6CTE2MTAwCitCcmVja2lucmlkZ2UgCToJMjEJOgkxODY0OAorQnVsbGl0dCAJOgkyMQk6CTYxMjM2CitCdXRsZXIgCToJMjEJOgkxMzAxMAorQ2FsZHdlbGwgCToJMjEJOgkxMzA2MAorQ2FsbG93YXkgCToJMjEJOgkzNDE3NworQ2FtcGJlbGwgCToJMjEJOgk4ODYxNgorQ2FybGlzbGUgCToJMjEJOgk1MzUxCitDYXJyb2xsIAk6CTIxCToJMTAxNTUKK0NhcnRlciAJOgkyMQk6CTI2ODg5CitDYXNleSAJOgkyMQk6CTE1NDQ3CitDaHJpc3RpYW4gCToJMjEJOgk3MjI2NQorQ2xhcmsgCToJMjEJOgkzMzE0NAorQ2xheSAJOgkyMQk6CTI0NTU2CitDbGludG9uIAk6CTIxCToJOTYzNAorQ3JpdHRlbmRlbiAJOgkyMQk6CTkzODQKK0N1bWJlcmxhbmQgCToJMjEJOgk3MTQ3CitEYXZpZXNzIAk6CTIxCToJOTE1NDUKK0VkbW9uc29uIAk6CTIxCToJMTE2NDQKK0VsbGlvdHQgCToJMjEJOgk2NzQ4CitFc3RpbGwgCToJMjEJOgkxNTMwNworRmF5ZXR0ZSAJOgkyMQk6CTI2MDUxMgorRmxlbWluZyAJOgkyMQk6CTEzNzkyCitGbG95ZCAJOgkyMQk6CTQyNDQxCitGcmFua2xpbiAJOgkyMQk6CTQ3Njg3CitGdWx0b24gCToJMjEJOgk3NzUyCitHYWxsYXRpbiAJOgkyMQk6CTc4NzAKK0dhcnJhcmQgCToJMjEJOgkxNDc5MgorR3JhbnQgCToJMjEJOgkyMjM4NAorR3JhdmVzIAk6CTIxCToJMzcwMjgKK0dyYXlzb24gCToJMjEJOgkyNDA1MworR3JlZW4gCToJMjEJOgkxMTUxOAorR3JlZW51cCAJOgkyMQk6CTM2ODkxCitIYW5jb2NrIAk6CTIxCToJODM5MgorSGFyZGluIAk6CTIxCToJOTQxNzQKK0hhcmxhbiAJOgkyMQk6CTMzMjAyCitIYXJyaXNvbiAJOgkyMQk6CTE3OTgzCitIYXJ0IAk6CTIxCToJMTc0NDUKK0hlbmRlcnNvbiAJOgkyMQk6CTQ0ODI5CitIZW5yeSAJOgkyMQk6CTE1MDYwCitIaWNrbWFuIAk6CTIxCToJNTI2MgorSG9wa2lucyAJOgkyMQk6CTQ2NTE5CitKYWNrc29uIAk6CTIxCToJMTM0OTUKK0plZmZlcnNvbiAJOgkyMQk6CTY5MzYwNAorSmVzc2FtaW5lIAk6CTIxCToJMzkwNDEKK0pvaG5zb24gCToJMjEJOgkyMzQ0NQorS2VudG9uIAk6CTIxCToJMTUxNDY0CitLbm90dCAJOgkyMQk6CTE3NjQ5CitLbm94IAk6CTIxCToJMzE3OTUKK0xhcnVlIAk6CTIxCToJMTMzNzMKK0xhdXJlbCAJOgkyMQk6CTUyNzE1CitMYXdyZW5jZSAJOgkyMQk6CTE1NTY5CitMZWUgCToJMjEJOgk3OTE2CitMZXNsaWUgCToJMjEJOgkxMjQwMQorTGV0Y2hlciAJOgkyMQk6CTI1Mjc3CitMZXdpcyAJOgkyMQk6CTE0MDkyCitMaW5jb2xuIAk6CTIxCToJMjMzNjEKK0xpdmluZ3N0b24gCToJMjEJOgk5ODA0CitMb2dhbiAJOgkyMQk6CTI2NTczCitMeW9uIAk6CTIxCToJODA4MAorTWNDcmFja2VuIAk6CTIxCToJNjU1MTQKK01jQ3JlYXJ5IAk6CTIxCToJMTcwODAKK01jTGVhbiAJOgkyMQk6CTk5MzgKK01hZGlzb24gCToJMjEJOgk3MDg3MgorTWFnb2ZmaW4gCToJMjEJOgkxMzMzMgorTWFyaW9uIAk6CTIxCToJMTgyMTIKK01hcnNoYWxsIAk6CTIxCToJMzAxMjUKK01hcnRpbiAJOgkyMQk6CTEyNTc4CitNYXNvbiAJOgkyMQk6CTE2ODAwCitNZWFkZSAJOgkyMQk6CTI2MzQ5CitNZW5pZmVlIAk6CTIxCToJNjU1NgorTWVyY2VyIAk6CTIxCToJMjA4MTcKK01ldGNhbGZlIAk6CTIxCToJMTAwMzcKK01vbnJvZSAJOgkyMQk6CTExNzU2CitNb250Z29tZXJ5IAk6CTIxCToJMjI1NTQKK01vcmdhbiAJOgkyMQk6CTEzOTQ4CitNdWhsZW5iZXJnIAk6CTIxCToJMzE4MzkKK05lbHNvbiAJOgkyMQk6CTM3NDc3CitOaWNob2xhcyAJOgkyMQk6CTY4MTMKK09oaW8gCToJMjEJOgkyMjkxNgorT2xkaGFtIAk6CTIxCToJNDYxNzgKK093ZW4gCToJMjEJOgkxMDU0NworT3dzbGV5IAk6CTIxCToJNDg1OAorUGVuZGxldG9uIAk6CTIxCToJMTQzOTAKK1BlcnJ5IAk6CTIxCToJMjkzOTAKK1Bpa2UgCToJMjEJOgk2ODczNgorUG93ZWxsIAk6CTIxCToJMTMyMzcKK1B1bGFza2kgCToJMjEJOgk1NjIxNworUm9iZXJ0c29uIAk6CTIxCToJMjI2NgorUm9ja2Nhc3RsZSAJOgkyMQk6CTE2NTgyCitSb3dhbiAJOgkyMQk6CTIyMDk0CitSdXNzZWxsIAk6CTIxCToJMTYzMTUKK1Njb3R0IAk6CTIxCToJMzMwNjEKK1NoZWxieSAJOgkyMQk6CTMzMzM3CitTaW1wc29uIAk6CTIxCToJMTY0MDUKK1NwZW5jZXIgCToJMjEJOgkxMTc2NgorVGF5bG9yIAk6CTIxCToJMjI5MjcKK1RvZGQgCToJMjEJOgkxMTk3MQorVHJpZ2cgCToJMjEJOgkxMjU5NworVHJpbWJsZSAJOgkyMQk6CTgxMjUKK1VuaW9uIAk6CTIxCToJMTU2MzcKK1dhcnJlbiAJOgkyMQk6CTkyNTIyCitXYXNoaW5ndG9uIAk6CTIxCToJMTA5MTYKK1dheW5lIAk6CTIxCToJMTk5MjMKK1dlYnN0ZXIgCToJMjEJOgkxNDEyMAorV2hpdGxleSAJOgkyMQk6CTM1ODY1CitXb2xmZSAJOgkyMQk6CTcwNjUKK1dvb2Rmb3JkIAk6CTIxCToJMjMyMDgKK0FjYWRpYSAJOgkyMgk6CTU4ODYxCitBbGxlbiAJOgkyMgk6CTI1NDQwCitBc2NlbnNpb24gCToJMjIJOgk3NjYyNworQXNzdW1wdGlvbiAJOgkyMgk6CTIzMzg4CitBdm95ZWxsZXMgCToJMjIJOgk0MTQ4MQorQmVhdXJlZ2FyZCAJOgkyMgk6CTMyOTg2CitCaWVudmlsbGUgCToJMjIJOgkxNTc1MgorQm9zc2llciAJOgkyMgk6CTk4MzEwCitDYWRkbyAJOgkyMgk6CTI1MjE2MQorQ2FsY2FzaWV1IAk6CTIyCToJMTgzNTc3CitDYWxkd2VsbCAJOgkyMgk6CTEwNTYwCitDYW1lcm9uIAk6CTIyCToJOTk5MQorQ2F0YWhvdWxhIAk6CTIyCToJMTA5MjAKK0NsYWlib3JuZSAJOgkyMgk6CTE2ODUxCitDb25jb3JkaWEgCToJMjIJOgkyMDI0NworRGUgU290byAJOgkyMgk6CTI1NDk0CitFYXN0IEJhdG9uIFJvdWdlIAk6CTIyCToJNDEyODUyCitFYXN0IENhcnJvbGwgCToJMjIJOgk5NDIxCitFYXN0IEZlbGljaWFuYSAJOgkyMgk6CTIxMzYwCitFdmFuZ2VsaW5lIAk6CTIyCToJMzU0MzQKK0ZyYW5rbGluIAk6CTIyCToJMjEyNjMKK0dyYW50IAk6CTIyCToJMTg2OTgKK0liZXJpYSAJOgkyMgk6CTczMjY2CitJYmVydmlsbGUgCToJMjIJOgkzMzMyMAorSmFja3NvbiAJOgkyMgk6CTE1Mzk3CitKZWZmZXJzb24gCToJMjIJOgk0NTU0NjYKK0plZmZlcnNvbiBEYXZpcyAJOgkyMgk6CTMxNDM1CitMYWZheWV0dGUgCToJMjIJOgkxOTA1MDMKK0xhZm91cmNoZSAJOgkyMgk6CTg5OTc0CitMYSBTYWxsZSAJOgkyMgk6CTE0MjgyCitMaW5jb2xuIAk6CTIyCToJNDI1MDkKK0xpdmluZ3N0b24gCToJMjIJOgk5MTgxNAorTWFkaXNvbiAJOgkyMgk6CTEzNzI4CitNb3JlaG91c2UgCToJMjIJOgkzMTAyMQorTmF0Y2hpdG9jaGVzIAk6CTIyCToJMzkwODAKK09ybGVhbnMgCToJMjIJOgk0ODQ2NzQKK091YWNoaXRhIAk6CTIyCToJMTQ3MjUwCitQbGFxdWVtaW5lcyAJOgkyMgk6CTI2NzU3CitQb2ludGUgQ291cGVlIAk6CTIyCToJMjI3NjMKK1JhcGlkZXMgCToJMjIJOgkxMjYzMzcKK1JlZCBSaXZlciAJOgkyMgk6CTk2MjIKK1JpY2hsYW5kIAk6CTIyCToJMjA5ODEKK1NhYmluZSAJOgkyMgk6CTIzNDU5CitTdC4gQmVybmFyZCAJOgkyMgk6CTY3MjI5CitTdC4gQ2hhcmxlcyAJOgkyMgk6CTQ4MDcyCitTdC4gSGVsZW5hIAk6CTIyCToJMTA1MjUKK1N0LiBKYW1lcyAJOgkyMgk6CTIxMjE2CitTdC4gSm9obiB0aGUgQmFwdGlzdCAJOgkyMgk6CTQzMDQ0CitTdC4gTGFuZHJ5IAk6CTIyCToJODc3MDAKK1N0LiBNYXJ0aW4gCToJMjIJOgk0ODU4MworU3QuIE1hcnkgCToJMjIJOgk1MzUwMAorU3QuIFRhbW1hbnkgCToJMjIJOgkxOTEyNjgKK1RhbmdpcGFob2EgCToJMjIJOgkxMDA1ODgKK1RlbnNhcyAJOgkyMgk6CTY2MTgKK1RlcnJlYm9ubmUgCToJMjIJOgkxMDQ1MDMKK1VuaW9uIAk6CTIyCToJMjI4MDMKK1Zlcm1pbGlvbiAJOgkyMgk6CTUzODA3CitWZXJub24gCToJMjIJOgk1MjUzMQorV2FzaGluZ3RvbiAJOgkyMgk6CTQzOTI2CitXZWJzdGVyIAk6CTIyCToJNDE4MzEKK1dlc3QgQmF0b24gUm91Z2UgCToJMjIJOgkyMTYwMQorV2VzdCBDYXJyb2xsIAk6CTIyCToJMTIzMTQKK1dlc3QgRmVsaWNpYW5hIAk6CTIyCToJMTUxMTEKK1dpbm4gCToJMjIJOgkxNjg5NAorQW5kcm9zY29nZ2luIAk6CTIzCToJMTAzNzkzCitBcm9vc3Rvb2sgCToJMjMJOgk3MzkzOAorQ3VtYmVybGFuZCAJOgkyMwk6CTI2NTYxMgorRnJhbmtsaW4gCToJMjMJOgkyOTQ2NworSGFuY29jayAJOgkyMwk6CTUxNzkxCitLZW5uZWJlYyAJOgkyMwk6CTExNzExNAorS25veCAJOgkyMwk6CTM5NjE4CitMaW5jb2xuIAk6CTIzCToJMzM2MTYKK094Zm9yZCAJOgkyMwk6CTU0NzU1CitQZW5vYnNjb3QgCToJMjMJOgkxNDQ5MTkKK1Bpc2NhdGFxdWlzIAk6CTIzCToJMTcyMzUKK1NhZ2FkYWhvYyAJOgkyMwk6CTM1MjE0CitTb21lcnNldCAJOgkyMwk6CTUwODg4CitXYWxkbyAJOgkyMwk6CTM2MjgwCitXYXNoaW5ndG9uIAk6CTIzCToJMzM5NDEKK1lvcmsgCToJMjMJOgkxODY3NDIKK0FsbGVnYW55IAk6CTI0CToJNzQ5MzAKK0FubmUgQXJ1bmRlbCAJOgkyNAk6CTQ4OTY1NgorQmFsdGltb3JlIAk6CTI0CToJNzU0MjkyCitDYWx2ZXJ0IAk6CTI0CToJNzQ1NjMKK0Nhcm9saW5lIAk6CTI0CToJMjk3NzIKK0NhcnJvbGwgCToJMjQJOgkxNTA4OTcKK0NlY2lsIAk6CTI0CToJODU5NTEKK0NoYXJsZXMgCToJMjQJOgkxMjA1NDYKK0RvcmNoZXN0ZXIgCToJMjQJOgkzMDY3NAorRnJlZGVyaWNrIAk6CTI0CToJMTk1Mjc3CitHYXJyZXR0IAk6CTI0CToJMjk4NDYKK0hhcmZvcmQgCToJMjQJOgkyMTg1OTAKK0hvd2FyZCAJOgkyNAk6CTI0Nzg0MgorS2VudCAJOgkyNAk6CTE5MTk3CitNb250Z29tZXJ5IAk6CTI0CToJODczMzQxCitQcmluY2UgR2VvcmdlJ3MgCToJMjQJOgk4MDE1MTUKK1F1ZWVuIEFubmUncyAJOgkyNAk6CTQwNTYzCitTdC4gTWFyeSdzIAk6CTI0CToJODYyMTEKK1NvbWVyc2V0IAk6CTI0CToJMjQ3NDcKK1RhbGJvdCAJOgkyNAk6CTMzODEyCitXYXNoaW5ndG9uIAk6CTI0CToJMTMxOTIzCitXaWNvbWljbyAJOgkyNAk6CTg0NjQ0CitXb3JjZXN0ZXIgCToJMjQJOgk0NjU0MworQmFsdGltb3JlIGNpdHkJOgkyNAk6CTY1MTE1NAorQmFybnN0YWJsZSAJOgkyNQk6CTIyMjIzMAorQmVya3NoaXJlIAk6CTI1CToJMTM0OTUzCitCcmlzdG9sIAk6CTI1CToJNTM0Njc4CitEdWtlcyAJOgkyNQk6CTE0OTg3CitFc3NleCAJOgkyNQk6CTcyMzQxOQorRnJhbmtsaW4gCToJMjUJOgk3MTUzNQorSGFtcGRlbiAJOgkyNQk6CTQ1NjIyOAorSGFtcHNoaXJlIAk6CTI1CToJMTUyMjUxCitNaWRkbGVzZXggCToJMjUJOgkxNDY1Mzk2CitOYW50dWNrZXQgCToJMjUJOgk5NTIwCitOb3Jmb2xrIAk6CTI1CToJNjUwMzA4CitQbHltb3V0aCAJOgkyNQk6CTQ3MjgyMgorU3VmZm9sayAJOgkyNQk6CTY4OTgwNworV29yY2VzdGVyIAk6CTI1CToJNzUwOTYzCitBbGNvbmEgCToJMjYJOgkxMTcxOQorQWxnZXIgCToJMjYJOgk5ODYyCitBbGxlZ2FuIAk6CTI2CToJMTA1NjY1CitBbHBlbmEgCToJMjYJOgkzMTMxNAorQW50cmltIAk6CTI2CToJMjMxMTAKK0FyZW5hYyAJOgkyNgk6CTE3MjY5CitCYXJhZ2EgCToJMjYJOgk4NzQ2CitCYXJyeSAJOgkyNgk6CTU2NzU1CitCYXkgCToJMjYJOgkxMTAxNTcKK0JlbnppZSAJOgkyNgk6CTE1OTk4CitCZXJyaWVuIAk6CTI2CToJMTYyNDUzCitCcmFuY2ggCToJMjYJOgk0NTc4NworQ2FsaG91biAJOgkyNgk6CTEzNzk4NQorQ2FzcyAJOgkyNgk6CTUxMTA0CitDaGFybGV2b2l4IAk6CTI2CToJMjYwOTAKK0NoZWJveWdhbiAJOgkyNgk6CTI2NDQ4CitDaGlwcGV3YSAJOgkyNgk6CTM4NTQzCitDbGFyZSAJOgkyNgk6CTMxMjUyCitDbGludG9uIAk6CTI2CToJNjQ3NTMKK0NyYXdmb3JkIAk6CTI2CToJMTQyNzMKK0RlbHRhIAk6CTI2CToJMzg1MjAKK0RpY2tpbnNvbiAJOgkyNgk6CTI3NDcyCitFYXRvbiAJOgkyNgk6CTEwMzY1NQorRW1tZXQgCToJMjYJOgkzMTQzNworR2VuZXNlZSAJOgkyNgk6CTQzNjE0MQorR2xhZHdpbiAJOgkyNgk6CTI2MDIzCitHb2dlYmljIAk6CTI2CToJMTczNzAKK0dyYW5kIFRyYXZlcnNlIAk6CTI2CToJNzc2NTQKK0dyYXRpb3QgCToJMjYJOgk0MjI4NQorSGlsbHNkYWxlIAk6CTI2CToJNDY1MjcKK0hvdWdodG9uIAk6CTI2CToJMzYwMTYKK0h1cm9uIAk6CTI2CToJMzYwNzkKK0luZ2hhbSAJOgkyNgk6CTI3OTMyMAorSW9uaWEgCToJMjYJOgk2MTUxOAorSW9zY28gCToJMjYJOgkyNzMzOQorSXJvbiAJOgkyNgk6CTEzMTM4CitJc2FiZWxsYSAJOgkyNgk6CTYzMzUxCitKYWNrc29uIAk6CTI2CToJMTU4NDIyCitLYWxhbWF6b28gCToJMjYJOgkyMzg2MDMKK0thbGthc2thIAk6CTI2CToJMTY1NzEKK0tlbnQgCToJMjYJOgk1NzQzMzUKK0tld2VlbmF3IAk6CTI2CToJMjMwMQorTGFrZSAJOgkyNgk6CTExMzMzCitMYXBlZXIgCToJMjYJOgk4NzkwNAorTGVlbGFuYXUgCToJMjYJOgkyMTExOQorTGVuYXdlZSAJOgkyNgk6CTk4ODkwCitMaXZpbmdzdG9uIAk6CTI2CToJMTU2OTUxCitMdWNlIAk6CTI2CToJNzAyNAorTWFja2luYWMgCToJMjYJOgkxMTk0MworTWFjb21iIAk6CTI2CToJNzg4MTQ5CitNYW5pc3RlZSAJOgkyNgk6CTI0NTI3CitNYXJxdWV0dGUgCToJMjYJOgk2NDYzNAorTWFzb24gCToJMjYJOgkyODI3NAorTWVjb3N0YSAJOgkyNgk6CTQwNTUzCitNZW5vbWluZWUgCToJMjYJOgkyNTMyNgorTWlkbGFuZCAJOgkyNgk6CTgyODc0CitNaXNzYXVrZWUgCToJMjYJOgkxNDQ3OAorTW9ucm9lIAk6CTI2CToJMTQ1OTQ1CitNb250Y2FsbSAJOgkyNgk6CTYxMjY2CitNb250bW9yZW5jeSAJOgkyNgk6CTEwMzE1CitNdXNrZWdvbiAJOgkyNgk6CTE3MDIwMAorTmV3YXlnbyAJOgkyNgk6CTQ3ODc0CitPYWtsYW5kIAk6CTI2CToJMTE5NDE1NgorT2NlYW5hIAk6CTI2CToJMjY4NzMKK09nZW1hdyAJOgkyNgk6CTIxNjQ1CitPbnRvbmFnb24gCToJMjYJOgk3ODE4CitPc2Nlb2xhIAk6CTI2CToJMjMxOTcKK09zY29kYSAJOgkyNgk6CTk0MTgKK090c2VnbyAJOgkyNgk6CTIzMzAxCitPdHRhd2EgCToJMjYJOgkyMzgzMTQKK1ByZXNxdWUgSXNsZSAJOgkyNgk6CTE0NDExCitSb3Njb21tb24gCToJMjYJOgkyNTQ2OQorU2FnaW5hdyAJOgkyNgk6CTIxMDAzOQorU3QuIENsYWlyIAk6CTI2CToJMTY0MjM1CitTdC4gSm9zZXBoIAk6CTI2CToJNjI0MjIKK1NhbmlsYWMgCToJMjYJOgk0NDU0NworU2Nob29sY3JhZnQgCToJMjYJOgk4OTAzCitTaGlhd2Fzc2VlIAk6CTI2CToJNzE2ODcKK1R1c2NvbGEgCToJMjYJOgk1ODI2NgorVmFuIEJ1cmVuIAk6CTI2CToJNzYyNjMKK1dhc2h0ZW5hdyAJOgkyNgk6CTMyMjg5NQorV2F5bmUgCToJMjYJOgkyMDYxMTYyCitXZXhmb3JkIAk6CTI2CToJMzA0ODQKK0FpdGtpbiAJOgkyNwk6CTE1MzAxCitBbm9rYSAJOgkyNwk6CTI5ODA4NAorQmVja2VyIAk6CTI3CToJMzAwMDAKK0JlbHRyYW1pIAk6CTI3CToJMzk2NTAKK0JlbnRvbiAJOgkyNwk6CTM0MjI2CitCaWcgU3RvbmUgCToJMjcJOgk1ODIwCitCbHVlIEVhcnRoIAk6CTI3CToJNTU5NDEKK0Jyb3duIAk6CTI3CToJMjY5MTEKK0Nhcmx0b24gCToJMjcJOgkzMTY3MQorQ2FydmVyIAk6CTI3CToJNzAyMDUKK0Nhc3MgCToJMjcJOgkyNzE1MAorQ2hpcHBld2EgCToJMjcJOgkxMzA4OAorQ2hpc2FnbyAJOgkyNwk6CTQxMTAxCitDbGF5IAk6CTI3CToJNTEyMjkKK0NsZWFyd2F0ZXIgCToJMjcJOgk4NDIzCitDb29rIAk6CTI3CToJNTE2OAorQ290dG9ud29vZCAJOgkyNwk6CTEyMTY3CitDcm93IFdpbmcgCToJMjcJOgk1NTA5OQorRGFrb3RhIAk6CTI3CToJMzU1OTA0CitEb2RnZSAJOgkyNwk6CTE3NzMxCitEb3VnbGFzIAk6CTI3CToJMzI4MjEKK0ZhcmliYXVsdCAJOgkyNwk6CTE2MTgxCitGaWxsbW9yZSAJOgkyNwk6CTIxMTIyCitGcmVlYm9ybiAJOgkyNwk6CTMyNTg0CitHb29kaHVlIAk6CTI3CToJNDQxMjcKK0dyYW50IAk6CTI3CToJNjI4OQorSGVubmVwaW4gCToJMjcJOgkxMTE2MjAwCitIb3VzdG9uIAk6CTI3CToJMTk3MTgKK0h1YmJhcmQgCToJMjcJOgkxODM3NgorSXNhbnRpIAk6CTI3CToJMzEyODcKK0l0YXNjYSAJOgkyNwk6CTQzOTkyCitKYWNrc29uIAk6CTI3CToJMTEyNjgKK0thbmFiZWMgCToJMjcJOgkxNDk5NgorS2FuZGl5b2hpIAk6CTI3CToJNDEyMDMKK0tpdHRzb24gCToJMjcJOgk1Mjg1CitLb29jaGljaGluZyAJOgkyNwk6CTE0MzU1CitMYWMgcXVpIFBhcmxlIAk6CTI3CToJODA2NworTGFrZSAJOgkyNwk6CTExMDU4CitMYWtlIG9mIHRoZSBXb29kcyAJOgkyNwk6CTQ1MjIKK0xlIFN1ZXVyIAk6CTI3CToJMjU0MjYKK0xpbmNvbG4gCToJMjcJOgk2NDI5CitMeW9uIAk6CTI3CToJMjU0MjUKK01jTGVvZCAJOgkyNwk6CTM0ODk4CitNYWhub21lbiAJOgkyNwk6CTUxOTAKK01hcnNoYWxsIAk6CTI3CToJMTAxNTUKK01hcnRpbiAJOgkyNwk6CTIxODAyCitNZWVrZXIgCToJMjcJOgkyMjY0NAorTWlsbGUgTGFjcyAJOgkyNwk6CTIyMzMwCitNb3JyaXNvbiAJOgkyNwk6CTMxNzEyCitNb3dlciAJOgkyNwk6CTM4NjAzCitNdXJyYXkgCToJMjcJOgk5MTY1CitOaWNvbGxldCAJOgkyNwk6CTI5NzcxCitOb2JsZXMgCToJMjcJOgkyMDgzMgorTm9ybWFuIAk6CTI3CToJNzQ0MgorT2xtc3RlZCAJOgkyNwk6CTEyNDI3NworT3R0ZXIgVGFpbCAJOgkyNwk6CTU3MTU5CitQZW5uaW5ndG9uIAk6CTI3CToJMTM1ODQKK1BpbmUgCToJMjcJOgkyNjUzMAorUGlwZXN0b25lIAk6CTI3CToJOTg5NQorUG9sayAJOgkyNwk6CTMxMzY5CitQb3BlIAk6CTI3CToJMTEyMzYKK1JhbXNleSAJOgkyNwk6CTUxMTAzNQorUmVkIExha2UgCToJMjcJOgk0Mjk5CitSZWR3b29kIAk6CTI3CToJMTY4MTUKK1JlbnZpbGxlIAk6CTI3CToJMTcxNTQKK1JpY2UgCToJMjcJOgk1NjY2NQorUm9jayAJOgkyNwk6CTk3MjEKK1Jvc2VhdSAJOgkyNwk6CTE2MzM4CitTdC4gTG91aXMgCToJMjcJOgkyMDA1MjgKK1Njb3R0IAk6CTI3CToJODk0OTgKK1NoZXJidXJuZSAJOgkyNwk6CTY0NDE3CitTaWJsZXkgCToJMjcJOgkxNTM1NgorU3RlYXJucyAJOgkyNwk6CTEzMzE2NgorU3RlZWxlIAk6CTI3CToJMzM2ODAKK1N0ZXZlbnMgCToJMjcJOgkxMDA1MworU3dpZnQgCToJMjcJOgkxMTk1NgorVG9kZCAJOgkyNwk6CTI0NDI2CitUcmF2ZXJzZSAJOgkyNwk6CTQxMzQKK1dhYmFzaGEgCToJMjcJOgkyMTYxMAorV2FkZW5hIAk6CTI3CToJMTM3MTMKK1dhc2VjYSAJOgkyNwk6CTE5NTI2CitXYXNoaW5ndG9uIAk6CTI3CToJMjAxMTMwCitXYXRvbndhbiAJOgkyNwk6CTExODc2CitXaWxraW4gCToJMjcJOgk3MTM4CitXaW5vbmEgCToJMjcJOgk0OTk4NQorV3JpZ2h0IAk6CTI3CToJODk5ODYKK1llbGxvdyBNZWRpY2luZSAJOgkyNwk6CTExMDgwCitBZGFtcyAJOgkyOAk6CTM0MzQwCitBbGNvcm4gCToJMjgJOgkzNDU1OAorQW1pdGUgCToJMjgJOgkxMzU5OQorQXR0YWxhIAk6CTI4CToJMTk2NjEKK0JlbnRvbiAJOgkyOAk6CTgwMjYKK0JvbGl2YXIgCToJMjgJOgk0MDYzMworQ2FsaG91biAJOgkyOAk6CTE1MDY5CitDYXJyb2xsIAk6CTI4CToJMTA3NjkKK0NoaWNrYXNhdyAJOgkyOAk6CTE5NDQwCitDaG9jdGF3IAk6CTI4CToJOTc1OAorQ2xhaWJvcm5lIAk6CTI4CToJMTE4MzEKK0NsYXJrZSAJOgkyOAk6CTE3OTU1CitDbGF5IAk6CTI4CToJMjE5NzkKK0NvYWhvbWEgCToJMjgJOgkzMDYyMgorQ29waWFoIAk6CTI4CToJMjg3NTcKK0NvdmluZ3RvbiAJOgkyOAk6CTE5NDA3CitEZVNvdG8gCToJMjgJOgkxMDcxOTkKK0ZvcnJlc3QgCToJMjgJOgk3MjYwNAorRnJhbmtsaW4gCToJMjgJOgk4NDQ4CitHZW9yZ2UgCToJMjgJOgkxOTE0NAorR3JlZW5lIAk6CTI4CToJMTMyOTkKK0dyZW5hZGEgCToJMjgJOgkyMzI2MworSGFuY29jayAJOgkyOAk6CTQyOTY3CitIYXJyaXNvbiAJOgkyOAk6CTE4OTYwMQorSGluZHMgCToJMjgJOgkyNTA4MDAKK0hvbG1lcyAJOgkyOAk6CTIxNjA5CitIdW1waHJleXMgCToJMjgJOgkxMTIwNgorSXNzYXF1ZW5hIAk6CTI4CToJMjI3NAorSXRhd2FtYmEgCToJMjgJOgkyMjc3MAorSmFja3NvbiAJOgkyOAk6CTEzMTQyMAorSmFzcGVyIAk6CTI4CToJMTgxNDkKK0plZmZlcnNvbiAJOgkyOAk6CTk3NDAKK0plZmZlcnNvbiBEYXZpcyAJOgkyOAk6CTEzOTYyCitKb25lcyAJOgkyOAk6CTY0OTU4CitLZW1wZXIgCToJMjgJOgkxMDQ1MworTGFmYXlldHRlIAk6CTI4CToJMzg3NDQKK0xhbWFyIAk6CTI4CToJMzkwNzAKK0xhdWRlcmRhbGUgCToJMjgJOgk3ODE2MQorTGF3cmVuY2UgCToJMjgJOgkxMzI1OAorTGVha2UgCToJMjgJOgkyMDk0MAorTGVlIAk6CTI4CToJNzU3NTUKK0xlZmxvcmUgCToJMjgJOgkzNzk0NworTGluY29sbiAJOgkyOAk6CTMzMTY2CitMb3duZGVzIAk6CTI4CToJNjE1ODYKK01hZGlzb24gCToJMjgJOgk3NDY3NAorTWFyaW9uIAk6CTI4CToJMjU1OTUKK01hcnNoYWxsIAk6CTI4CToJMzQ5OTMKK01vbnJvZSAJOgkyOAk6CTM4MDE0CitNb250Z29tZXJ5IAk6CTI4CToJMTIxODkKK05lc2hvYmEgCToJMjgJOgkyODY4NAorTmV3dG9uIAk6CTI4CToJMjE4MzgKK05veHViZWUgCToJMjgJOgkxMjU0OAorT2t0aWJiZWhhIAk6CTI4CToJNDI5MDIKK1Bhbm9sYSAJOgkyOAk6CTM0Mjc0CitQZWFybCBSaXZlciAJOgkyOAk6CTQ4NjIxCitQZXJyeSAJOgkyOAk6CTEyMTM4CitQaWtlIAk6CTI4CToJMzg5NDAKK1BvbnRvdG9jIAk6CTI4CToJMjY3MjYKK1ByZW50aXNzIAk6CTI4CToJMjU1NTYKK1F1aXRtYW4gCToJMjgJOgkxMDExNworUmFua2luIAk6CTI4CToJMTE1MzI3CitTY290dCAJOgkyOAk6CTI4NDIzCitTaGFya2V5IAk6CTI4CToJNjU4MAorU2ltcHNvbiAJOgkyOAk6CTI3NjM5CitTbWl0aCAJOgkyOAk6CTE2MTgyCitTdG9uZSAJOgkyOAk6CTEzNjIyCitTdW5mbG93ZXIgCToJMjgJOgkzNDM2OQorVGFsbGFoYXRjaGllIAk6CTI4CToJMTQ5MDMKK1RhdGUgCToJMjgJOgkyNTM3MAorVGlwcGFoIAk6CTI4CToJMjA4MjYKK1Rpc2hvbWluZ28gCToJMjgJOgkxOTE2MworVHVuaWNhIAk6CTI4CToJOTIyNworVW5pb24gCToJMjgJOgkyNTM2MgorV2FsdGhhbGwgCToJMjgJOgkxNTE1NgorV2FycmVuIAk6CTI4CToJNDk2NDQKK1dhc2hpbmd0b24gCToJMjgJOgk2Mjk3NworV2F5bmUgCToJMjgJOgkyMTIxNgorV2Vic3RlciAJOgkyOAk6CTEwMjk0CitXaWxraW5zb24gCToJMjgJOgkxMDMxMgorV2luc3RvbiAJOgkyOAk6CTIwMTYwCitZYWxvYnVzaGEgCToJMjgJOgkxMzA1MQorWWF6b28gCToJMjgJOgkyODE0OQorQWRhaXIgCToJMjkJOgkyNDk3NworQW5kcmV3IAk6CTI5CToJMTY0OTIKK0F0Y2hpc29uIAk6CTI5CToJNjQzMAorQXVkcmFpbiAJOgkyOQk6CTI1ODUzCitCYXJyeSAJOgkyOQk6CTM0MDEwCitCYXJ0b24gCToJMjkJOgkxMjU0MQorQmF0ZXMgCToJMjkJOgkxNjY1MworQmVudG9uIAk6CTI5CToJMTcxODAKK0JvbGxpbmdlciAJOgkyOQk6CTEyMDI5CitCb29uZSAJOgkyOQk6CTEzNTQ1NAorQnVjaGFuYW4gCToJMjkJOgk4NTk5OAorQnV0bGVyIAk6CTI5CToJNDA4NjcKK0NhbGR3ZWxsIAk6CTI5CToJODk2OQorQ2FsbGF3YXkgCToJMjkJOgk0MDc2NgorQ2FtZGVuIAk6CTI5CToJMzcwNTEKK0NhcGUgR2lyYXJkZWF1IAk6CTI5CToJNjg2OTMKK0NhcnJvbGwgCToJMjkJOgkxMDI4NQorQ2FydGVyIAk6CTI5CToJNTk0MQorQ2FzcyAJOgkyOQk6CTgyMDkyCitDZWRhciAJOgkyOQk6CTEzNzMzCitDaGFyaXRvbiAJOgkyOQk6CTg0MzgKK0NocmlzdGlhbiAJOgkyOQk6CTU0Mjg1CitDbGFyayAJOgkyOQk6CTc0MTYKK0NsYXkgCToJMjkJOgkxODQwMDYKK0NsaW50b24gCToJMjkJOgkxODk3OQorQ29sZSAJOgkyOQk6CTcxMzk3CitDb29wZXIgCToJMjkJOgkxNjY3MAorQ3Jhd2ZvcmQgCToJMjkJOgkyMjgwNAorRGFkZSAJOgkyOQk6CTc5MjMKK0RhbGxhcyAJOgkyOQk6CTE1NjYxCitEYXZpZXNzIAk6CTI5CToJODAxNgorRGVLYWxiIAk6CTI5CToJMTE1OTcKK0RlbnQgCToJMjkJOgkxNDkyNworRG91Z2xhcyAJOgkyOQk6CTEzMDg0CitEdW5rbGluIAk6CTI5CToJMzMxNTUKK0ZyYW5rbGluIAk6CTI5CToJOTM4MDcKK0dhc2NvbmFkZSAJOgkyOQk6CTE1MzQyCitHZW50cnkgCToJMjkJOgk2ODYxCitHcmVlbmUgCToJMjkJOgkyNDAzOTEKK0dydW5keSAJOgkyOQk6CTEwNDMyCitIYXJyaXNvbiAJOgkyOQk6CTg4NTAKK0hlbnJ5IAk6CTI5CToJMjE5OTcKK0hpY2tvcnkgCToJMjkJOgk4OTQwCitIb2x0IAk6CTI5CToJNTM1MQorSG93YXJkIAk6CTI5CToJMTAyMTIKK0hvd2VsbCAJOgkyOQk6CTM3MjM4CitJcm9uIAk6CTI5CToJMTA2OTcKK0phY2tzb24gCToJMjkJOgk2NTQ4ODAKK0phc3BlciAJOgkyOQk6CTEwNDY4NgorSmVmZmVyc29uIAk6CTI5CToJMTk4MDk5CitKb2huc29uIAk6CTI5CToJNDgyNTgKK0tub3ggCToJMjkJOgk0MzYxCitMYWNsZWRlIAk6CTI5CToJMzI1MTMKK0xhZmF5ZXR0ZSAJOgkyOQk6CTMyOTYwCitMYXdyZW5jZSAJOgkyOQk6CTM1MjA0CitMZXdpcyAJOgkyOQk6CTEwNDk0CitMaW5jb2xuIAk6CTI5CToJMzg5NDQKK0xpbm4gCToJMjkJOgkxMzc1NAorTGl2aW5nc3RvbiAJOgkyOQk6CTE0NTU4CitNY0RvbmFsZCAJOgkyOQk6CTIxNjgxCitNYWNvbiAJOgkyOQk6CTE1NzYyCitNYWRpc29uIAk6CTI5CToJMTE4MDAKK01hcmllcyAJOgkyOQk6CTg5MDMKK01hcmlvbiAJOgkyOQk6CTI4Mjg5CitNZXJjZXIgCToJMjkJOgkzNzU3CitNaWxsZXIgCToJMjkJOgkyMzU2NAorTWlzc2lzc2lwcGkgCToJMjkJOgkxMzQyNworTW9uaXRlYXUgCToJMjkJOgkxNDgyNworTW9ucm9lIAk6CTI5CToJOTMxMQorTW9udGdvbWVyeSAJOgkyOQk6CTEyMTM2CitNb3JnYW4gCToJMjkJOgkxOTMwOQorTmV3IE1hZHJpZCAJOgkyOQk6CTE5NzYwCitOZXd0b24gCToJMjkJOgk1MjYzNgorTm9kYXdheSAJOgkyOQk6CTIxOTEyCitPcmVnb24gCToJMjkJOgkxMDM0NAorT3NhZ2UgCToJMjkJOgkxMzA2MgorT3phcmsgCToJMjkJOgk5NTQyCitQZW1pc2NvdCAJOgkyOQk6CTIwMDQ3CitQZXJyeSAJOgkyOQk6CTE4MTMyCitQZXR0aXMgCToJMjkJOgkzOTQwMworUGhlbHBzIAk6CTI5CToJMzk4MjUKK1Bpa2UgCToJMjkJOgkxODM1MQorUGxhdHRlIAk6CTI5CToJNzM3ODEKK1BvbGsgCToJMjkJOgkyNjk5MgorUHVsYXNraSAJOgkyOQk6CTQxMTY1CitQdXRuYW0gCToJMjkJOgk1MjIzCitSYWxscyAJOgkyOQk6CTk2MjYKK1JhbmRvbHBoIAk6CTI5CToJMjQ2NjMKK1JheSAJOgkyOQk6CTIzMzU0CitSZXlub2xkcyAJOgkyOQk6CTY2ODkKK1JpcGxleSAJOgkyOQk6CTEzNTA5CitTdC4gQ2hhcmxlcyAJOgkyOQk6CTI4Mzg4MworU3QuIENsYWlyIAk6CTI5CToJOTY1MgorU3RlLiBHZW5ldmlldmUgCToJMjkJOgkxNzg0MgorU3QuIEZyYW5jb2lzIAk6CTI5CToJNTU2NDEKK1N0LiBMb3VpcyAJOgkyOQk6CTEwMTYzMTUKK1NhbGluZSAJOgkyOQk6CTIzNzU2CitTY2h1eWxlciAJOgkyOQk6CTQxNzAKK1Njb3RsYW5kIAk6CTI5CToJNDk4MworU2NvdHQgCToJMjkJOgk0MDQyMgorU2hhbm5vbiAJOgkyOQk6CTgzMjQKK1NoZWxieSAJOgkyOQk6CTY3OTkKK1N0b2RkYXJkIAk6CTI5CToJMjk3MDUKK1N0b25lIAk6CTI5CToJMjg2NTgKK1N1bGxpdmFuIAk6CTI5CToJNzIxOQorVGFuZXkgCToJMjkJOgkzOTcwMworVGV4YXMgCToJMjkJOgkyMzAwMworVmVybm9uIAk6CTI5CToJMjA0NTQKK1dhcnJlbiAJOgkyOQk6CTI0NTI1CitXYXNoaW5ndG9uIAk6CTI5CToJMjMzNDQKK1dheW5lIAk6CTI5CToJMTMyNTkKK1dlYnN0ZXIgCToJMjkJOgkzMTA0NQorV29ydGggCToJMjkJOgkyMzgyCitXcmlnaHQgCToJMjkJOgkxNzk1NQorU3QuIExvdWlzIGNpdHkJOgkyOQk6CTM0ODE4OQorQmVhdmVyaGVhZCAJOgkzMAk6CTkyMDIKK0JpZyBIb3JuIAk6CTMwCToJMTI2NzEKK0JsYWluZSAJOgkzMAk6CTcwMDkKK0Jyb2Fkd2F0ZXIgCToJMzAJOgk0Mzg1CitDYXJib24gCToJMzAJOgk5NTUyCitDYXJ0ZXIgCToJMzAJOgkxMzYwCitDYXNjYWRlIAk6CTMwCToJODAzNTcKK0Nob3V0ZWF1IAk6CTMwCToJNTk3MAorQ3VzdGVyIAk6CTMwCToJMTE2OTYKK0RhbmllbHMgCToJMzAJOgkyMDE3CitEYXdzb24gCToJMzAJOgk5MDU5CitEZWVyIExvZGdlIAk6CTMwCToJOTQxNworRmFsbG9uIAk6CTMwCToJMjgzNworRmVyZ3VzIAk6CTMwCToJMTE4OTMKK0ZsYXRoZWFkIAk6CTMwCToJNzQ0NzEKK0dhbGxhdGluIAk6CTMwCToJNjc4MzEKK0dhcmZpZWxkIAk6CTMwCToJMTI3OQorR2xhY2llciAJOgkzMAk6CTEzMjQ3CitHb2xkZW4gVmFsbGV5IAk6CTMwCToJMTA0MgorR3Jhbml0ZSAJOgkzMAk6CTI4MzAKK0hpbGwgCToJMzAJOgkxNjY3MworSmVmZmVyc29uIAk6CTMwCToJMTAwNDkKK0p1ZGl0aCBCYXNpbiAJOgkzMAk6CTIzMjkKK0xha2UgCToJMzAJOgkyNjUwNworTGV3aXMgYW5kIENsYXJrIAk6CTMwCToJNTU3MTYKK0xpYmVydHkgCToJMzAJOgkyMTU4CitMaW5jb2xuIAk6CTMwCToJMTg4MzcKK01jQ29uZSAJOgkzMAk6CTE5NzcKK01hZGlzb24gCToJMzAJOgk2ODUxCitNZWFnaGVyIAk6CTMwCToJMTkzMgorTWluZXJhbCAJOgkzMAk6CTM4ODQKK01pc3NvdWxhIAk6CTMwCToJOTU4MDIKK011c3NlbHNoZWxsIAk6CTMwCToJNDQ5NworUGFyayAJOgkzMAk6CTE1Njk0CitQZXRyb2xldW0gCToJMzAJOgk0OTMKK1BoaWxsaXBzIAk6CTMwCToJNDYwMQorUG9uZGVyYSAJOgkzMAk6CTY0MjQKK1Bvd2RlciBSaXZlciAJOgkzMAk6CTE4NTgKK1Bvd2VsbCAJOgkzMAk6CTcxODAKK1ByYWlyaWUgCToJMzAJOgkxMTk5CitSYXZhbGxpIAk6CTMwCToJMzYwNzAKK1JpY2hsYW5kIAk6CTMwCToJOTY2NworUm9vc2V2ZWx0IAk6CTMwCToJMTA2MjAKK1Jvc2VidWQgCToJMzAJOgk5MzgzCitTYW5kZXJzIAk6CTMwCToJMTAyMjcKK1NoZXJpZGFuIAk6CTMwCToJNDEwNQorU2lsdmVyIEJvdyAJOgkzMAk6CTM0NjA2CitTdGlsbHdhdGVyIAk6CTMwCToJODE5NQorU3dlZXQgR3Jhc3MgCToJMzAJOgkzNjA5CitUZXRvbiAJOgkzMAk6CTY0NDUKK1Rvb2xlIAk6CTMwCToJNTI2NworVHJlYXN1cmUgCToJMzAJOgk4NjEKK1ZhbGxleSAJOgkzMAk6CTc2NzUKK1doZWF0bGFuZCAJOgkzMAk6CTIyNTkKK1dpYmF1eCAJOgkzMAk6CTEwNjgKK1llbGxvd3N0b25lIAk6CTMwCToJMTI5MzUyCitBZGFtcyAJOgkzMQk6CTMxMTUxCitBbnRlbG9wZSAJOgkzMQk6CTc0NTIKK0FydGh1ciAJOgkzMQk6CTQ0NAorQmFubmVyIAk6CTMxCToJODE5CitCbGFpbmUgCToJMzEJOgk1ODMKK0Jvb25lIAk6CTMxCToJNjI1OQorQm94IEJ1dHRlIAk6CTMxCToJMTIxNTgKK0JveWQgCToJMzEJOgkyNDM4CitCcm93biAJOgkzMQk6CTM1MjUKK0J1ZmZhbG8gCToJMzEJOgk0MjI1OQorQnVydCAJOgkzMQk6CTc3OTEKK0J1dGxlciAJOgkzMQk6CTg3NjcKK0Nhc3MgCToJMzEJOgkyNDMzNAorQ2VkYXIgCToJMzEJOgk5NjE1CitDaGFzZSAJOgkzMQk6CTQwNjgKK0NoZXJyeSAJOgkzMQk6CTYxNDgKK0NoZXllbm5lIAk6CTMxCToJOTgzMAorQ2xheSAJOgkzMQk6CTcwMzkKK0NvbGZheCAJOgkzMQk6CTEwNDQxCitDdW1pbmcgCToJMzEJOgkxMDIwMworQ3VzdGVyIAk6CTMxCToJMTE3OTMKK0Rha290YSAJOgkzMQk6CTIwMjUzCitEYXdlcyAJOgkzMQk6CTkwNjAKK0Rhd3NvbiAJOgkzMQk6CTI0MzY1CitEZXVlbCAJOgkzMQk6CTIwOTgKK0RpeG9uIAk6CTMxCToJNjMzOQorRG9kZ2UgCToJMzEJOgkzNjE2MAorRG91Z2xhcyAJOgkzMQk6CTQ2MzU4NQorRHVuZHkgCToJMzEJOgkyMjkyCitGaWxsbW9yZSAJOgkzMQk6CTY2MzQKK0ZyYW5rbGluIAk6CTMxCToJMzU3NAorRnJvbnRpZXIgCToJMzEJOgkzMDk5CitGdXJuYXMgCToJMzEJOgk1MzI0CitHYWdlIAk6CTMxCToJMjI5OTMKK0dhcmRlbiAJOgkzMQk6CTIyOTIKK0dhcmZpZWxkIAk6CTMxCToJMTkwMgorR29zcGVyIAk6CTMxCToJMjE0MworR3JhbnQgCToJMzEJOgk3NDcKK0dyZWVsZXkgCToJMzEJOgkyNzE0CitIYWxsIAk6CTMxCToJNTM1MzQKK0hhbWlsdG9uIAk6CTMxCToJOTQwMworSGFybGFuIAk6CTMxCToJMzc4NgorSGF5ZXMgCToJMzEJOgkxMDY4CitIaXRjaGNvY2sgCToJMzEJOgkzMTExCitIb2x0IAk6CTMxCToJMTE1NTEKK0hvb2tlciAJOgkzMQk6CTc4MworSG93YXJkIAk6CTMxCToJNjU2NworSmVmZmVyc29uIAk6CTMxCToJODMzMworSm9obnNvbiAJOgkzMQk6CTQ0ODgKK0tlYXJuZXkgCToJMzEJOgk2ODgyCitLZWl0aCAJOgkzMQk6CTg4NzUKK0tleWEgUGFoYSAJOgkzMQk6CTk4MworS2ltYmFsbCAJOgkzMQk6CTQwODkKK0tub3ggCToJMzEJOgk5Mzc0CitMYW5jYXN0ZXIgCToJMzEJOgkyNTAyOTEKK0xpbmNvbG4gCToJMzEJOgkzNDYzMgorTG9nYW4gCToJMzEJOgk3NzQKK0xvdXAgCToJMzEJOgk3MTIKK01jUGhlcnNvbiAJOgkzMQk6CTUzMworTWFkaXNvbiAJOgkzMQk6CTM1MjI2CitNZXJyaWNrIAk6CTMxCToJODIwNAorTW9ycmlsbCAJOgkzMQk6CTU0NDAKK05hbmNlIAk6CTMxCToJNDAzOAorTmVtYWhhIAk6CTMxCToJNzU3NgorTnVja29sbHMgCToJMzEJOgk1MDU3CitPdG9lIAk6CTMxCToJMTUzOTYKK1Bhd25lZSAJOgkzMQk6CTMwODcKK1BlcmtpbnMgCToJMzEJOgkzMjAwCitQaGVscHMgCToJMzEJOgk5NzQ3CitQaWVyY2UgCToJMzEJOgk3ODU3CitQbGF0dGUgCToJMzEJOgkzMTY2MgorUG9sayAJOgkzMQk6CTU2MzkKK1JlZCBXaWxsb3cgCToJMzEJOgkxMTQ0OAorUmljaGFyZHNvbiAJOgkzMQk6CTk1MzEKK1JvY2sgCToJMzEJOgkxNzU2CitTYWxpbmUgCToJMzEJOgkxMzg0MworU2FycHkgCToJMzEJOgkxMjI1OTUKK1NhdW5kZXJzIAk6CTMxCToJMTk4MzAKK1Njb3R0cyBCbHVmZiAJOgkzMQk6CTM2OTUxCitTZXdhcmQgCToJMzEJOgkxNjQ5NgorU2hlcmlkYW4gCToJMzEJOgk2MTk4CitTaGVybWFuIAk6CTMxCToJMzMxOAorU2lvdXggCToJMzEJOgkxNDc1CitTdGFudG9uIAk6CTMxCToJNjQ1NQorVGhheWVyIAk6CTMxCToJNjA1NQorVGhvbWFzIAk6CTMxCToJNzI5CitUaHVyc3RvbiAJOgkzMQk6CTcxNzEKK1ZhbGxleSAJOgkzMQk6CTQ2NDcKK1dhc2hpbmd0b24gCToJMzEJOgkxODc4MAorV2F5bmUgCToJMzEJOgk5ODUxCitXZWJzdGVyIAk6CTMxCToJNDA2MQorV2hlZWxlciAJOgkzMQk6CTg4NgorWW9yayAJOgkzMQk6CTE0NTk4CitDaHVyY2hpbGwgCToJMzIJOgkyMzk4MgorQ2xhcmsgCToJMzIJOgkxMzc1NzY1CitEb3VnbGFzIAk6CTMyCToJNDEyNTkKK0Vsa28gCToJMzIJOgk0NTI5MQorRXNtZXJhbGRhIAk6CTMyCToJOTcxCitFdXJla2EgCToJMzIJOgkxNjUxCitIdW1ib2xkdCAJOgkzMgk6CTE2MTA2CitMYW5kZXIgCToJMzIJOgk1Nzk0CitMaW5jb2xuIAk6CTMyCToJNDE2NQorTHlvbiAJOgkzMgk6CTM0NTAxCitNaW5lcmFsIAk6CTMyCToJNTA3MQorTnllIAk6CTMyCToJMzI0ODUKK1BlcnNoaW5nIAk6CTMyCToJNjY5MworU3RvcmV5IAk6CTMyCToJMzM5OQorV2FzaG9lIAk6CTMyCToJMzM5NDg2CitXaGl0ZSBQaW5lIAk6CTMyCToJOTE4MQorQ2Fyc29uIENpdHkJOgkzMgk6CTUyNDU3CitCZWxrbmFwIAk6CTMzCToJNTYzMjUKK0NhcnJvbGwgCToJMzMJOgk0MzY2NgorQ2hlc2hpcmUgCToJMzMJOgk3MzgyNQorQ29vcyAJOgkzMwk6CTMzMTExCitHcmFmdG9uIAk6CTMzCToJODE3NDMKK0hpbGxzYm9yb3VnaCAJOgkzMwk6CTM4MDg0MQorTWVycmltYWNrIAk6CTMzCToJMTM2MjI1CitSb2NraW5naGFtIAk6CTMzCToJMjc3MzU5CitTdHJhZmZvcmQgCToJMzMJOgkxMTIyMzMKK1N1bGxpdmFuIAk6CTMzCToJNDA0NTgKK0F0bGFudGljIAk6CTM0CToJMjUyNTUyCitCZXJnZW4gCToJMzQJOgk4ODQxMTgKK0J1cmxpbmd0b24gCToJMzQJOgk0MjMzOTQKK0NhbWRlbiAJOgkzNAk6CTUwODkzMgorQ2FwZSBNYXkgCToJMzQJOgkxMDIzMjYKK0N1bWJlcmxhbmQgCToJMzQJOgkxNDY0MzgKK0Vzc2V4IAk6CTM0CToJNzkzNjMzCitHbG91Y2VzdGVyIAk6CTM0CToJMjU0NjczCitIdWRzb24gCToJMzQJOgk2MDg5NzUKK0h1bnRlcmRvbiAJOgkzNAk6CTEyMTk4OQorTWVyY2VyIAk6CTM0CToJMzUwNzYxCitNaWRkbGVzZXggCToJMzQJOgk3NTAxNjIKK01vbm1vdXRoIAk6CTM0CToJNjE1MzAxCitNb3JyaXMgCToJMzQJOgk0NzAyMTIKK09jZWFuIAk6CTM0CToJNTEwOTE2CitQYXNzYWljIAk6CTM0CToJNDg5MDQ5CitTYWxlbSAJOgkzNAk6CTY0Mjg1CitTb21lcnNldCAJOgkzNAk6CTI5NzQ5MAorU3Vzc2V4IAk6CTM0CToJMTQ0MTY2CitVbmlvbiAJOgkzNAk6CTUyMjU0MQorV2FycmVuIAk6CTM0CToJMTAyNDM3CitCZXJuYWxpbGxvIAk6CTM1CToJNTU2Njc4CitDYXRyb24gCToJMzUJOgkzNTQzCitDaGF2ZXMgCToJMzUJOgk2MTM4MgorQ2lib2xhIAk6CTM1CToJMjU1OTUKK0NvbGZheCAJOgkzNQk6CTE0MTg5CitDdXJyeSAJOgkzNQk6CTQ1MDQ0CitEZSBCYWNhIAk6CTM1CToJMjI0MAorRG9uYSBBbmEgCToJMzUJOgkxNzQ2ODIKK0VkZHkgCToJMzUJOgk1MTY1OAorR3JhbnQgCToJMzUJOgkzMTAwMgorR3VhZGFsdXBlIAk6CTM1CToJNDY4MAorSGFyZGluZyAJOgkzNQk6CTgxMAorSGlkYWxnbyAJOgkzNQk6CTU5MzIKK0xlYSAJOgkzNQk6CTU1NTExCitMaW5jb2xuIAk6CTM1CToJMTk0MTEKK0xvcyBBbGFtb3MgCToJMzUJOgkxODM0MworTHVuYSAJOgkzNQk6CTI1MDE2CitNY0tpbmxleSAJOgkzNQk6CTc0Nzk4CitNb3JhIAk6CTM1CToJNTE4MAorT3Rlcm8gCToJMzUJOgk2MjI5OAorUXVheSAJOgkzNQk6CTEwMTU1CitSaW8gQXJyaWJhIAk6CTM1CToJNDExOTAKK1Jvb3NldmVsdCAJOgkzNQk6CTE4MDE4CitTYW5kb3ZhbCAJOgkzNQk6CTg5OTA4CitTYW4gSnVhbiAJOgkzNQk6CTExMzgwMQorU2FuIE1pZ3VlbCAJOgkzNQk6CTMwMTI2CitTYW50YSBGZSAJOgkzNQk6CTEyOTI5MgorU2llcnJhIAk6CTM1CToJMTMyNzAKK1NvY29ycm8gCToJMzUJOgkxODA3OAorVGFvcyAJOgkzNQk6CTI5OTc5CitUb3JyYW5jZSAJOgkzNQk6CTE2OTExCitVbmlvbiAJOgkzNQk6CTQxNzQKK1ZhbGVuY2lhIAk6CTM1CToJNjYxNTIKK0FsYmFueSAJOgkzNgk6CTI5NDU2NQorQWxsZWdhbnkgCToJMzYJOgk0OTkyNworQnJvbnggCToJMzYJOgkxMzMyNjUwCitCcm9vbWUgCToJMzYJOgkyMDA1MzYKK0NhdHRhcmF1Z3VzIAk6CTM2CToJODM5NTUKK0NheXVnYSAJOgkzNgk6CTgxOTYzCitDaGF1dGF1cXVhIAk6CTM2CToJMTM5NzUwCitDaGVtdW5nIAk6CTM2CToJOTEwNzAKK0NoZW5hbmdvIAk6CTM2CToJNTE0MDEKK0NsaW50b24gCToJMzYJOgk3OTg5NAorQ29sdW1iaWEgCToJMzYJOgk2MzA5NAorQ29ydGxhbmQgCToJMzYJOgk0ODU5OQorRGVsYXdhcmUgCToJMzYJOgk0ODA1NQorRHV0Y2hlc3MgCToJMzYJOgkyODAxNTAKK0VyaWUgCToJMzYJOgk5NTAyNjUKK0Vzc2V4IAk6CTM2CToJMzg4NTEKK0ZyYW5rbGluIAk6CTM2CToJNTExMzQKK0Z1bHRvbiAJOgkzNgk6CTU1MDczCitHZW5lc2VlIAk6CTM2CToJNjAzNzAKK0dyZWVuZSAJOgkzNgk6CTQ4MTk1CitIYW1pbHRvbiAJOgkzNgk6CTUzNzkKK0hlcmtpbWVyIAk6CTM2CToJNjQ0MjcKK0plZmZlcnNvbiAJOgkzNgk6CTExMTczOAorS2luZ3MgCToJMzYJOgkyNDY1MzI2CitMZXdpcyAJOgkzNgk6CTI2OTQ0CitMaXZpbmdzdG9uIAk6CTM2CToJNjQzMjgKK01hZGlzb24gCToJMzYJOgk2OTQ0MQorTW9ucm9lIAk6CTM2CToJNzM1MzQzCitNb250Z29tZXJ5IAk6CTM2CToJNDk3MDgKK05hc3NhdSAJOgkzNgk6CTEzMzQ1NDQKK05ldyBZb3JrIAk6CTM2CToJMTUzNzE5NQorTmlhZ2FyYSAJOgkzNgk6CTIxOTg0NgorT25laWRhIAk6CTM2CToJMjM1NDY5CitPbm9uZGFnYSAJOgkzNgk6CTQ1ODMzNgorT250YXJpbyAJOgkzNgk6CTEwMDIyNAorT3JhbmdlIAk6CTM2CToJMzQxMzY3CitPcmxlYW5zIAk6CTM2CToJNDQxNzEKK09zd2VnbyAJOgkzNgk6CTEyMjM3NworT3RzZWdvIAk6CTM2CToJNjE2NzYKK1B1dG5hbSAJOgkzNgk6CTk1NzQ1CitRdWVlbnMgCToJMzYJOgkyMjI5Mzc5CitSZW5zc2VsYWVyIAk6CTM2CToJMTUyNTM4CitSaWNobW9uZCAJOgkzNgk6CTQ0MzcyOAorUm9ja2xhbmQgCToJMzYJOgkyODY3NTMKK1N0LiBMYXdyZW5jZSAJOgkzNgk6CTExMTkzMQorU2FyYXRvZ2EgCToJMzYJOgkyMDA2MzUKK1NjaGVuZWN0YWR5IAk6CTM2CToJMTQ2NTU1CitTY2hvaGFyaWUgCToJMzYJOgkzMTU4MgorU2NodXlsZXIgCToJMzYJOgkxOTIyNAorU2VuZWNhIAk6CTM2CToJMzMzNDIKK1N0ZXViZW4gCToJMzYJOgk5ODcyNgorU3VmZm9sayAJOgkzNgk6CTE0MTkzNjkKK1N1bGxpdmFuIAk6CTM2CToJNzM5NjYKK1Rpb2dhIAk6CTM2CToJNTE3ODQKK1RvbXBraW5zIAk6CTM2CToJOTY1MDEKK1Vsc3RlciAJOgkzNgk6CTE3Nzc0OQorV2FycmVuIAk6CTM2CToJNjMzMDMKK1dhc2hpbmd0b24gCToJMzYJOgk2MTA0MgorV2F5bmUgCToJMzYJOgk5Mzc2NQorV2VzdGNoZXN0ZXIgCToJMzYJOgk5MjM0NTkKK1d5b21pbmcgCToJMzYJOgk0MzQyNAorWWF0ZXMgCToJMzYJOgkyNDYyMQorQWxhbWFuY2UgCToJMzcJOgkxMzA4MDAKK0FsZXhhbmRlciAJOgkzNwk6CTMzNjAzCitBbGxlZ2hhbnkgCToJMzcJOgkxMDY3NworQW5zb24gCToJMzcJOgkyNTI3NQorQXNoZSAJOgkzNwk6CTI0Mzg0CitBdmVyeSAJOgkzNwk6CTE3MTY3CitCZWF1Zm9ydCAJOgkzNwk6CTQ0OTU4CitCZXJ0aWUgCToJMzcJOgkxOTc3MworQmxhZGVuIAk6CTM3CToJMzIyNzgKK0JydW5zd2ljayAJOgkzNwk6CTczMTQzCitCdW5jb21iZSAJOgkzNwk6CTIwNjMzMAorQnVya2UgCToJMzcJOgk4OTE0OAorQ2FiYXJydXMgCToJMzcJOgkxMzEwNjMKK0NhbGR3ZWxsIAk6CTM3CToJNzc0MTUKK0NhbWRlbiAJOgkzNwk6CTY4ODUKK0NhcnRlcmV0IAk6CTM3CToJNTkzODMKK0Nhc3dlbGwgCToJMzcJOgkyMzUwMQorQ2F0YXdiYSAJOgkzNwk6CTE0MTY4NQorQ2hhdGhhbSAJOgkzNwk6CTQ5MzI5CitDaGVyb2tlZSAJOgkzNwk6CTI0Mjk4CitDaG93YW4gCToJMzcJOgkxNDUyNgorQ2xheSAJOgkzNwk6CTg3NzUKK0NsZXZlbGFuZCAJOgkzNwk6CTk2Mjg3CitDb2x1bWJ1cyAJOgkzNwk6CTU0NzQ5CitDcmF2ZW4gCToJMzcJOgk5MTQzNgorQ3VtYmVybGFuZCAJOgkzNwk6CTMwMjk2MworQ3Vycml0dWNrIAk6CTM3CToJMTgxOTAKK0RhcmUgCToJMzcJOgkyOTk2NworRGF2aWRzb24gCToJMzcJOgkxNDcyNDYKK0RhdmllIAk6CTM3CToJMzQ4MzUKK0R1cGxpbiAJOgkzNwk6CTQ5MDYzCitEdXJoYW0gCToJMzcJOgkyMjMzMTQKK0VkZ2Vjb21iZSAJOgkzNwk6CTU1NjA2CitGb3JzeXRoIAk6CTM3CToJMzA2MDY3CitGcmFua2xpbiAJOgkzNwk6CTQ3MjYwCitHYXN0b24gCToJMzcJOgkxOTAzNjUKK0dhdGVzIAk6CTM3CToJMTA1MTYKK0dyYWhhbSAJOgkzNwk6CTc5OTMKK0dyYW52aWxsZSAJOgkzNwk6CTQ4NDk4CitHcmVlbmUgCToJMzcJOgkxODk3NAorR3VpbGZvcmQgCToJMzcJOgk0MjEwNDgKK0hhbGlmYXggCToJMzcJOgk1NzM3MAorSGFybmV0dCAJOgkzNwk6CTkxMDI1CitIYXl3b29kIAk6CTM3CToJNTQwMzMKK0hlbmRlcnNvbiAJOgkzNwk6CTg5MTczCitIZXJ0Zm9yZCAJOgkzNwk6CTIyNjAxCitIb2tlIAk6CTM3CToJMzM2NDYKK0h5ZGUgCToJMzcJOgk1ODI2CitJcmVkZWxsIAk6CTM3CToJMTIyNjYwCitKYWNrc29uIAk6CTM3CToJMzMxMjEKK0pvaG5zdG9uIAk6CTM3CToJMTIxOTY1CitKb25lcyAJOgkzNwk6CTEwMzgxCitMZWUgCToJMzcJOgk0OTA0MAorTGVub2lyIAk6CTM3CToJNTk2NDgKK0xpbmNvbG4gCToJMzcJOgk2Mzc4MAorTWNEb3dlbGwgCToJMzcJOgk0MjE1MQorTWFjb24gCToJMzcJOgkyOTgxMQorTWFkaXNvbiAJOgkzNwk6CTE5NjM1CitNYXJ0aW4gCToJMzcJOgkyNTU5MworTWVja2xlbmJ1cmcgCToJMzcJOgk2OTU0NTQKK01pdGNoZWxsIAk6CTM3CToJMTU2ODcKK01vbnRnb21lcnkgCToJMzcJOgkyNjgyMgorTW9vcmUgCToJMzcJOgk3NDc2OQorTmFzaCAJOgkzNwk6CTg3NDIwCitOZXcgSGFub3ZlciAJOgkzNwk6CTE2MDMwNworTm9ydGhhbXB0b24gCToJMzcJOgkyMjA4NgorT25zbG93IAk6CTM3CToJMTUwMzU1CitPcmFuZ2UgCToJMzcJOgkxMTgyMjcKK1BhbWxpY28gCToJMzcJOgkxMjkzNAorUGFzcXVvdGFuayAJOgkzNwk6CTM0ODk3CitQZW5kZXIgCToJMzcJOgk0MTA4MgorUGVycXVpbWFucyAJOgkzNwk6CTExMzY4CitQZXJzb24gCToJMzcJOgkzNTYyMworUGl0dCAJOgkzNwk6CTEzMzc5OAorUG9sayAJOgkzNwk6CTE4MzI0CitSYW5kb2xwaCAJOgkzNwk6CTEzMDQ1NAorUmljaG1vbmQgCToJMzcJOgk0NjU2NAorUm9iZXNvbiAJOgkzNwk6CTEyMzMzOQorUm9ja2luZ2hhbSAJOgkzNwk6CTkxOTI4CitSb3dhbiAJOgkzNwk6CTEzMDM0MAorUnV0aGVyZm9yZCAJOgkzNwk6CTYyODk5CitTYW1wc29uIAk6CTM3CToJNjAxNjEKK1Njb3RsYW5kIAk6CTM3CToJMzU5OTgKK1N0YW5seSAJOgkzNwk6CTU4MTAwCitTdG9rZXMgCToJMzcJOgk0NDcxMQorU3VycnkgCToJMzcJOgk3MTIxOQorU3dhaW4gCToJMzcJOgkxMjk2OAorVHJhbnN5bHZhbmlhIAk6CTM3CToJMjkzMzQKK1R5cnJlbGwgCToJMzcJOgk0MTQ5CitVbmlvbiAJOgkzNwk6CTEyMzY3NworVmFuY2UgCToJMzcJOgk0Mjk1NAorV2FrZSAJOgkzNwk6CTYyNzg0NgorV2FycmVuIAk6CTM3CToJMTk5NzIKK1dhc2hpbmd0b24gCToJMzcJOgkxMzcyMworV2F0YXVnYSAJOgkzNwk6CTQyNjk1CitXYXluZSAJOgkzNwk6CTExMzMyOQorV2lsa2VzIAk6CTM3CToJNjU2MzIKK1dpbHNvbiAJOgkzNwk6CTczODE0CitZYWRraW4gCToJMzcJOgkzNjM0OAorWWFuY2V5IAk6CTM3CToJMTc3NzQKK0FkYW1zIAk6CTM4CToJMjU5MworQmFybmVzIAk6CTM4CToJMTE3NzUKK0JlbnNvbiAJOgkzOAk6CTY5NjQKK0JpbGxpbmdzIAk6CTM4CToJODg4CitCb3R0aW5lYXUgCToJMzgJOgk3MTQ5CitCb3dtYW4gCToJMzgJOgkzMjQyCitCdXJrZSAJOgkzOAk6CTIyNDIKK0J1cmxlaWdoIAk6CTM4CToJNjk0MTYKK0Nhc3MgCToJMzgJOgkxMjMxMzgKK0NhdmFsaWVyIAk6CTM4CToJNDgzMQorRGlja2V5IAk6CTM4CToJNTc1NworRGl2aWRlIAk6CTM4CToJMjI4MworRHVubiAJOgkzOAk6CTM2MDAKK0VkZHkgCToJMzgJOgkyNzU3CitFbW1vbnMgCToJMzgJOgk0MzMxCitGb3N0ZXIgCToJMzgJOgkzNzU5CitHb2xkZW4gVmFsbGV5IAk6CTM4CToJMTkyNAorR3JhbmQgRm9ya3MgCToJMzgJOgk2NjEwOQorR3JhbnQgCToJMzgJOgkyODQxCitHcmlnZ3MgCToJMzgJOgkyNzU0CitIZXR0aW5nZXIgCToJMzgJOgkyNzE1CitLaWRkZXIgCToJMzgJOgkyNzUzCitMYU1vdXJlIAk6CTM4CToJNDcwMQorTG9nYW4gCToJMzgJOgkyMzA4CitNY0hlbnJ5IAk6CTM4CToJNTk4NworTWNJbnRvc2ggCToJMzgJOgkzMzkwCitNY0tlbnppZSAJOgkzOAk6CTU3MzcKK01jTGVhbiAJOgkzOAk6CTkzMTEKK01lcmNlciAJOgkzOAk6CTg2NDQKK01vcnRvbiAJOgkzOAk6CTI1MzAzCitNb3VudHJhaWwgCToJMzgJOgk2NjMxCitOZWxzb24gCToJMzgJOgkzNzE1CitPbGl2ZXIgCToJMzgJOgkyMDY1CitQZW1iaW5hIAk6CTM4CToJODU4NQorUGllcmNlIAk6CTM4CToJNDY3NQorUmFtc2V5IAk6CTM4CToJMTIwNjYKK1JhbnNvbSAJOgkzOAk6CTU4OTAKK1JlbnZpbGxlIAk6CTM4CToJMjYxMAorUmljaGxhbmQgCToJMzgJOgkxNzk5OAorUm9sZXR0ZSAJOgkzOAk6CTEzNjc0CitTYXJnZW50IAk6CTM4CToJNDM2NgorU2hlcmlkYW4gCToJMzgJOgkxNzEwCitTaW91eCAJOgkzOAk6CTQwNDQKK1Nsb3BlIAk6CTM4CToJNzY3CitTdGFyayAJOgkzOAk6CTIyNjM2CitTdGVlbGUgCToJMzgJOgkyMjU4CitTdHV0c21hbiAJOgkzOAk6CTIxOTA4CitUb3duZXIgCToJMzgJOgkyODc2CitUcmFpbGwgCToJMzgJOgk4NDc3CitXYWxzaCAJOgkzOAk6CTEyMzg5CitXYXJkIAk6CTM4CToJNTg3OTUKK1dlbGxzIAk6CTM4CToJNTEwMgorV2lsbGlhbXMgCToJMzgJOgkxOTc2MQorQWRhbXMgCToJMzkJOgkyNzMzMAorQWxsZW4gCToJMzkJOgkxMDg0NzMKK0FzaGxhbmQgCToJMzkJOgk1MjUyMworQXNodGFidWxhIAk6CTM5CToJMTAyNzI4CitBdGhlbnMgCToJMzkJOgk2MjIyMworQXVnbGFpemUgCToJMzkJOgk0NjYxMQorQmVsbW9udCAJOgkzOQk6CTcwMjI2CitCcm93biAJOgkzOQk6CTQyMjg1CitCdXRsZXIgCToJMzkJOgkzMzI4MDcKK0NhcnJvbGwgCToJMzkJOgkyODgzNgorQ2hhbXBhaWduIAk6CTM5CToJMzg4OTAKK0NsYXJrIAk6CTM5CToJMTQ0NzQyCitDbGVybW9udCAJOgkzOQk6CTE3Nzk3NworQ2xpbnRvbiAJOgkzOQk6CTQwNTQzCitDb2x1bWJpYW5hIAk6CTM5CToJMTEyMDc1CitDb3Nob2N0b24gCToJMzkJOgkzNjY1NQorQ3Jhd2ZvcmQgCToJMzkJOgk0Njk2NgorQ3V5YWhvZ2EgCToJMzkJOgkxMzkzOTc4CitEYXJrZSAJOgkzOQk6CTUzMzA5CitEZWZpYW5jZSAJOgkzOQk6CTM5NTAwCitEZWxhd2FyZSAJOgkzOQk6CTEwOTk4OQorRXJpZSAJOgkzOQk6CTc5NTUxCitGYWlyZmllbGQgCToJMzkJOgkxMjI3NTkKK0ZheWV0dGUgCToJMzkJOgkyODQzMworRnJhbmtsaW4gCToJMzkJOgkxMDY4OTc4CitGdWx0b24gCToJMzkJOgk0MjA4NAorR2FsbGlhIAk6CTM5CToJMzEwNjkKK0dlYXVnYSAJOgkzOQk6CTkwODk1CitHcmVlbmUgCToJMzkJOgkxNDc4ODYKK0d1ZXJuc2V5IAk6CTM5CToJNDA3OTIKK0hhbWlsdG9uIAk6CTM5CToJODQ1MzAzCitIYW5jb2NrIAk6CTM5CToJNzEyOTUKK0hhcmRpbiAJOgkzOQk6CTMxOTQ1CitIYXJyaXNvbiAJOgkzOQk6CTE1ODU2CitIZW5yeSAJOgkzOQk6CTI5MjEwCitIaWdobGFuZCAJOgkzOQk6CTQwODc1CitIb2NraW5nIAk6CTM5CToJMjgyNDEKK0hvbG1lcyAJOgkzOQk6CTM4OTQzCitIdXJvbiAJOgkzOQk6CTU5NDg3CitKYWNrc29uIAk6CTM5CToJMzI2NDEKK0plZmZlcnNvbiAJOgkzOQk6CTczODk0CitLbm94IAk6CTM5CToJNTQ1MDAKK0xha2UgCToJMzkJOgkyMjc1MTEKK0xhd3JlbmNlIAk6CTM5CToJNjIzMTkKK0xpY2tpbmcgCToJMzkJOgkxNDU0OTEKK0xvZ2FuIAk6CTM5CToJNDYwMDUKK0xvcmFpbiAJOgkzOQk6CTI4NDY2NAorTHVjYXMgCToJMzkJOgk0NTUwNTQKK01hZGlzb24gCToJMzkJOgk0MDIxMworTWFob25pbmcgCToJMzkJOgkyNTc1NTUKK01hcmlvbiAJOgkzOQk6CTY2MjE3CitNZWRpbmEgCToJMzkJOgkxNTEwOTUKK01laWdzIAk6CTM5CToJMjMwNzIKK01lcmNlciAJOgkzOQk6CTQwOTI0CitNaWFtaSAJOgkzOQk6CTk4ODY4CitNb25yb2UgCToJMzkJOgkxNTE4MAorTW9udGdvbWVyeSAJOgkzOQk6CTU1OTA2MgorTW9yZ2FuIAk6CTM5CToJMTQ4OTcKK01vcnJvdyAJOgkzOQk6CTMxNjI4CitNdXNraW5ndW0gCToJMzkJOgk4NDU4NQorTm9ibGUgCToJMzkJOgkxNDA1OAorT3R0YXdhIAk6CTM5CToJNDA5ODUKK1BhdWxkaW5nIAk6CTM5CToJMjAyOTMKK1BlcnJ5IAk6CTM5CToJMzQwNzgKK1BpY2thd2F5IAk6CTM5CToJNTI3MjcKK1Bpa2UgCToJMzkJOgkyNzY5NQorUG9ydGFnZSAJOgkzOQk6CTE1MjA2MQorUHJlYmxlIAk6CTM5CToJNDIzMzcKK1B1dG5hbSAJOgkzOQk6CTM0NzI2CitSaWNobGFuZCAJOgkzOQk6CTEyODg1MgorUm9zcyAJOgkzOQk6CTczMzQ1CitTYW5kdXNreSAJOgkzOQk6CTYxNzkyCitTY2lvdG8gCToJMzkJOgk3OTE5NQorU2VuZWNhIAk6CTM5CToJNTg2ODMKK1NoZWxieSAJOgkzOQk6CTQ3OTEwCitTdGFyayAJOgkzOQk6CTM3ODA5OAorU3VtbWl0IAk6CTM5CToJNTQyODk5CitUcnVtYnVsbCAJOgkzOQk6CTIyNTExNgorVHVzY2FyYXdhcyAJOgkzOQk6CTkwOTE0CitVbmlvbiAJOgkzOQk6CTQwOTA5CitWYW4gV2VydCAJOgkzOQk6CTI5NjU5CitWaW50b24gCToJMzkJOgkxMjgwNgorV2FycmVuIAk6CTM5CToJMTU4MzgzCitXYXNoaW5ndG9uIAk6CTM5CToJNjMyNTEKK1dheW5lIAk6CTM5CToJMTExNTY0CitXaWxsaWFtcyAJOgkzOQk6CTM5MTg4CitXb29kIAk6CTM5CToJMTIxMDY1CitXeWFuZG90IAk6CTM5CToJMjI5MDgKK0FkYWlyIAk6CTQwCToJMjEwMzgKK0FsZmFsZmEgCToJNDAJOgk2MTA1CitBdG9rYSAJOgk0MAk6CTEzODc5CitCZWF2ZXIgCToJNDAJOgk1ODU3CitCZWNraGFtIAk6CTQwCToJMTk3OTkKK0JsYWluZSAJOgk0MAk6CTExOTc2CitCcnlhbiAJOgk0MAk6CTM2NTM0CitDYWRkbyAJOgk0MAk6CTMwMTUwCitDYW5hZGlhbiAJOgk0MAk6CTg3Njk3CitDYXJ0ZXIgCToJNDAJOgk0NTYyMQorQ2hlcm9rZWUgCToJNDAJOgk0MjUyMQorQ2hvY3RhdyAJOgk0MAk6CTE1MzQyCitDaW1hcnJvbiAJOgk0MAk6CTMxNDgKK0NsZXZlbGFuZCAJOgk0MAk6CTIwODAxNgorQ29hbCAJOgk0MAk6CTYwMzEKK0NvbWFuY2hlIAk6CTQwCToJMTE0OTk2CitDb3R0b24gCToJNDAJOgk2NjE0CitDcmFpZyAJOgk0MAk6CTE0OTUwCitDcmVlayAJOgk0MAk6CTY3MzY3CitDdXN0ZXIgCToJNDAJOgkyNjE0MgorRGVsYXdhcmUgCToJNDAJOgkzNzA3NworRGV3ZXkgCToJNDAJOgk0NzQzCitFbGxpcyAJOgk0MAk6CTQwNzUKK0dhcmZpZWxkIAk6CTQwCToJNTc4MTMKK0dhcnZpbiAJOgk0MAk6CTI3MjEwCitHcmFkeSAJOgk0MAk6CTQ1NTE2CitHcmFudCAJOgk0MAk6CTUxNDQKK0dyZWVyIAk6CTQwCToJNjA2MQorSGFybW9uIAk6CTQwCToJMzI4MworSGFycGVyIAk6CTQwCToJMzU2MgorSGFza2VsbCAJOgk0MAk6CTExNzkyCitIdWdoZXMgCToJNDAJOgkxNDE1NAorSmFja3NvbiAJOgk0MAk6CTI4NDM5CitKZWZmZXJzb24gCToJNDAJOgk2ODE4CitKb2huc3RvbiAJOgk0MAk6CTEwNTEzCitLYXkgCToJNDAJOgk0ODA4MAorS2luZ2Zpc2hlciAJOgk0MAk6CTEzOTI2CitLaW93YSAJOgk0MAk6CTEwMjI3CitMYXRpbWVyIAk6CTQwCToJMTA2OTIKK0xlIEZsb3JlIAk6CTQwCToJNDgxMDkKK0xpbmNvbG4gCToJNDAJOgkzMjA4MAorTG9nYW4gCToJNDAJOgkzMzkyNAorTG92ZSAJOgk0MAk6CTg4MzEKK01jQ2xhaW4gCToJNDAJOgkyNzc0MAorTWNDdXJ0YWluIAk6CTQwCToJMzQ0MDIKK01jSW50b3NoIAk6CTQwCToJMTk0NTYKK01ham9yIAk6CTQwCToJNzU0NQorTWFyc2hhbGwgCToJNDAJOgkxMzE4NAorTWF5ZXMgCToJNDAJOgkzODM2OQorTXVycmF5IAk6CTQwCToJMTI2MjMKK011c2tvZ2VlIAk6CTQwCToJNjk0NTEKK05vYmxlIAk6CTQwCToJMTE0MTEKK05vd2F0YSAJOgk0MAk6CTEwNTY5CitPa2Z1c2tlZSAJOgk0MAk6CTExODE0CitPa2xhaG9tYSAJOgk0MAk6CTY2MDQ0OAorT2ttdWxnZWUgCToJNDAJOgkzOTY4NQorT3NhZ2UgCToJNDAJOgk0NDQzNworT3R0YXdhIAk6CTQwCToJMzMxOTQKK1Bhd25lZSAJOgk0MAk6CTE2NjEyCitQYXluZSAJOgk0MAk6CTY4MTkwCitQaXR0c2J1cmcgCToJNDAJOgk0Mzk1MworUG9udG90b2MgCToJNDAJOgkzNTE0MworUG90dGF3YXRvbWllIAk6CTQwCToJNjU1MjEKK1B1c2htYXRhaGEgCToJNDAJOgkxMTY2NworUm9nZXIgTWlsbHMgCToJNDAJOgkzNDM2CitSb2dlcnMgCToJNDAJOgk3MDY0MQorU2VtaW5vbGUgCToJNDAJOgkyNDg5NAorU2VxdW95YWggCToJNDAJOgkzODk3MgorU3RlcGhlbnMgCToJNDAJOgk0MzE4MgorVGV4YXMgCToJNDAJOgkyMDEwNworVGlsbG1hbiAJOgk0MAk6CTkyODcKK1R1bHNhIAk6CTQwCToJNTYzMjk5CitXYWdvbmVyIAk6CTQwCToJNTc0OTEKK1dhc2hpbmd0b24gCToJNDAJOgk0ODk5NgorV2FzaGl0YSAJOgk0MAk6CTExNTA4CitXb29kcyAJOgk0MAk6CTkwODkKK1dvb2R3YXJkIAk6CTQwCToJMTg0ODYKK0Jha2VyIAk6CTQxCToJMTY3NDEKK0JlbnRvbiAJOgk0MQk6CTc4MTUzCitDbGFja2FtYXMgCToJNDEJOgkzMzgzOTEKK0NsYXRzb3AgCToJNDEJOgkzNTYzMAorQ29sdW1iaWEgCToJNDEJOgk0MzU2MAorQ29vcyAJOgk0MQk6CTYyNzc5CitDcm9vayAJOgk0MQk6CTE5MTgyCitDdXJyeSAJOgk0MQk6CTIxMTM3CitEZXNjaHV0ZXMgCToJNDEJOgkxMTUzNjcKK0RvdWdsYXMgCToJNDEJOgkxMDAzOTkKK0dpbGxpYW0gCToJNDEJOgkxOTE1CitHcmFudCAJOgk0MQk6CTc5MzUKK0hhcm5leSAJOgk0MQk6CTc2MDkKK0hvb2QgUml2ZXIgCToJNDEJOgkyMDQxMQorSmFja3NvbiAJOgk0MQk6CTE4MTI2OQorSmVmZmVyc29uIAk6CTQxCToJMTkwMDkKK0pvc2VwaGluZSAJOgk0MQk6CTc1NzI2CitLbGFtYXRoIAk6CTQxCToJNjM3NzUKK0xha2UgCToJNDEJOgk3NDIyCitMYW5lIAk6CTQxCToJMzIyOTU5CitMaW5jb2xuIAk6CTQxCToJNDQ0NzkKK0xpbm4gCToJNDEJOgkxMDMwNjkKK01hbGhldXIgCToJNDEJOgkzMTYxNQorTWFyaW9uIAk6CTQxCToJMjg0ODM0CitNb3Jyb3cgCToJNDEJOgkxMDk5NQorTXVsdG5vbWFoIAk6CTQxCToJNjYwNDg2CitQb2xrIAk6CTQxCToJNjIzODAKK1NoZXJtYW4gCToJNDEJOgkxOTM0CitUaWxsYW1vb2sgCToJNDEJOgkyNDI2MgorVW1hdGlsbGEgCToJNDEJOgk3MDU0OAorVW5pb24gCToJNDEJOgkyNDUzMAorV2FsbG93YSAJOgk0MQk6CTcyMjYKK1dhc2NvIAk6CTQxCToJMjM3OTEKK1dhc2hpbmd0b24gCToJNDEJOgk0NDUzNDIKK1doZWVsZXIgCToJNDEJOgkxNTQ3CitZYW1oaWxsIAk6CTQxCToJODQ5OTIKK0FkYW1zIAk6CTQyCToJOTEyOTIKK0FsbGVnaGVueSAJOgk0Mgk6CTEyODE2NjYKK0FybXN0cm9uZyAJOgk0Mgk6CTcyMzkyCitCZWF2ZXIgCToJNDIJOgkxODE0MTIKK0JlZGZvcmQgCToJNDIJOgk0OTk4NAorQmVya3MgCToJNDIJOgkzNzM2MzgKK0JsYWlyIAk6CTQyCToJMTI5MTQ0CitCcmFkZm9yZCAJOgk0Mgk6CTYyNzYxCitCdWNrcyAJOgk0Mgk6CTU5NzYzNQorQnV0bGVyIAk6CTQyCToJMTc0MDgzCitDYW1icmlhIAk6CTQyCToJMTUyNTk4CitDYW1lcm9uIAk6CTQyCToJNTk3NAorQ2FyYm9uIAk6CTQyCToJNTg4MDIKK0NlbnRyZSAJOgk0Mgk6CTEzNTc1OAorQ2hlc3RlciAJOgk0Mgk6CTQzMzUwMQorQ2xhcmlvbiAJOgk0Mgk6CTQxNzY1CitDbGVhcmZpZWxkIAk6CTQyCToJODMzODIKK0NsaW50b24gCToJNDIJOgkzNzkxNAorQ29sdW1iaWEgCToJNDIJOgk2NDE1MQorQ3Jhd2ZvcmQgCToJNDIJOgk5MDM2NgorQ3VtYmVybGFuZCAJOgk0Mgk6CTIxMzY3NAorRGF1cGhpbiAJOgk0Mgk6CTI1MTc5OAorRGVsYXdhcmUgCToJNDIJOgk1NTA4NjQKK0VsayAJOgk0Mgk6CTM1MTEyCitFcmllIAk6CTQyCToJMjgwODQzCitGYXlldHRlIAk6CTQyCToJMTQ4NjQ0CitGb3Jlc3QgCToJNDIJOgk0OTQ2CitGcmFua2xpbiAJOgk0Mgk6CTEyOTMxMworRnVsdG9uIAk6CTQyCToJMTQyNjEKK0dyZWVuZSAJOgk0Mgk6CTQwNjcyCitIdW50aW5nZG9uIAk6CTQyCToJNDU1ODYKK0luZGlhbmEgCToJNDIJOgk4OTYwNQorSmVmZmVyc29uIAk6CTQyCToJNDU5MzIKK0p1bmlhdGEgCToJNDIJOgkyMjgyMQorTGFja2F3YW5uYSAJOgk0Mgk6CTIxMzI5NQorTGFuY2FzdGVyIAk6CTQyCToJNDcwNjU4CitMYXdyZW5jZSAJOgk0Mgk6CTk0NjQzCitMZWJhbm9uIAk6CTQyCToJMTIwMzI3CitMZWhpZ2ggCToJNDIJOgkzMTIwOTAKK0x1emVybmUgCToJNDIJOgkzMTkyNTAKK0x5Y29taW5nIAk6CTQyCToJMTIwMDQ0CitNY0tlYW4gCToJNDIJOgk0NTkzNgorTWVyY2VyIAk6CTQyCToJMTIwMjkzCitNaWZmbGluIAk6CTQyCToJNDY0ODYKK01vbnJvZSAJOgk0Mgk6CTEzODY4NworTW9udGdvbWVyeSAJOgk0Mgk6CTc1MDA5NworTW9udG91ciAJOgk0Mgk6CTE4MjM2CitOb3J0aGFtcHRvbiAJOgk0Mgk6CTI2NzA2NgorTm9ydGh1bWJlcmxhbmQgCToJNDIJOgk5NDU1NgorUGVycnkgCToJNDIJOgk0MzYwMgorUGhpbGFkZWxwaGlhIAk6CTQyCToJMTUxNzU1MAorUGlrZSAJOgk0Mgk6CTQ2MzAyCitQb3R0ZXIgCToJNDIJOgkxODA4MAorU2NodXlsa2lsbCAJOgk0Mgk6CTE1MDMzNgorU255ZGVyIAk6CTQyCToJMzc1NDYKK1NvbWVyc2V0IAk6CTQyCToJODAwMjMKK1N1bGxpdmFuIAk6CTQyCToJNjU1NgorU3VzcXVlaGFubmEgCToJNDIJOgk0MjIzOAorVGlvZ2EgCToJNDIJOgk0MTM3MworVW5pb24gCToJNDIJOgk0MTYyNAorVmVuYW5nbyAJOgk0Mgk6CTU3NTY1CitXYXJyZW4gCToJNDIJOgk0Mzg2MworV2FzaGluZ3RvbiAJOgk0Mgk6CTIwMjg5NworV2F5bmUgCToJNDIJOgk0NzcyMgorV2VzdG1vcmVsYW5kIAk6CTQyCToJMzY5OTkzCitXeW9taW5nIAk6CTQyCToJMjgwODAKK1lvcmsgCToJNDIJOgkzODE3NTEKK0JyaXN0b2wgCToJNDQJOgk1MDY0OAorS2VudCAJOgk0NAk6CTE2NzA5MAorTmV3cG9ydCAJOgk0NAk6CTg1NDMzCitQcm92aWRlbmNlIAk6CTQ0CToJNjIxNjAyCitXYXNoaW5ndG9uIAk6CTQ0CToJMTIzNTQ2CitBYmJldmlsbGUgCToJNDUJOgkyNjE2NworQWlrZW4gCToJNDUJOgkxNDI1NTIKK0FsbGVuZGFsZSAJOgk0NQk6CTExMjExCitBbmRlcnNvbiAJOgk0NQk6CTE2NTc0MAorQmFtYmVyZyAJOgk0NQk6CTE2NjU4CitCYXJud2VsbCAJOgk0NQk6CTIzNDc4CitCZWF1Zm9ydCAJOgk0NQk6CTEyMDkzNworQmVya2VsZXkgCToJNDUJOgkxNDI2NTEKK0NhbGhvdW4gCToJNDUJOgkxNTE4NQorQ2hhcmxlc3RvbiAJOgk0NQk6CTMwOTk2OQorQ2hlcm9rZWUgCToJNDUJOgk1MjUzNworQ2hlc3RlciAJOgk0NQk6CTM0MDY4CitDaGVzdGVyZmllbGQgCToJNDUJOgk0Mjc2OAorQ2xhcmVuZG9uIAk6CTQ1CToJMzI1MDIKK0NvbGxldG9uIAk6CTQ1CToJMzgyNjQKK0Rhcmxpbmd0b24gCToJNDUJOgk2NzM5NAorRGlsbG9uIAk6CTQ1CToJMzA3MjIKK0RvcmNoZXN0ZXIgCToJNDUJOgk5NjQxMworRWRnZWZpZWxkIAk6CTQ1CToJMjQ1OTUKK0ZhaXJmaWVsZCAJOgk0NQk6CTIzNDU0CitGbG9yZW5jZSAJOgk0NQk6CTEyNTc2MQorR2VvcmdldG93biAJOgk0NQk6CTU1Nzk3CitHcmVlbnZpbGxlIAk6CTQ1CToJMzc5NjE2CitHcmVlbndvb2QgCToJNDUJOgk2NjI3MQorSGFtcHRvbiAJOgk0NQk6CTIxMzg2CitIb3JyeSAJOgk0NQk6CTE5NjYyOQorSmFzcGVyIAk6CTQ1CToJMjA2NzgKK0tlcnNoYXcgCToJNDUJOgk1MjY0NworTGFuY2FzdGVyIAk6CTQ1CToJNjEzNTEKK0xhdXJlbnMgCToJNDUJOgk2OTU2NworTGVlIAk6CTQ1CToJMjAxMTkKK0xleGluZ3RvbiAJOgk0NQk6CTIxNjAxNAorTWNDb3JtaWNrIAk6CTQ1CToJOTk1OAorTWFyaW9uIAk6CTQ1CToJMzU0NjYKK01hcmxib3JvIAk6CTQ1CToJMjg4MTgKK05ld2JlcnJ5IAk6CTQ1CToJMzYxMDgKK09jb25lZSAJOgk0NQk6CTY2MjE1CitPcmFuZ2VidXJnIAk6CTQ1CToJOTE1ODIKK1BpY2tlbnMgCToJNDUJOgkxMTA3NTcKK1JpY2hsYW5kIAk6CTQ1CToJMzIwNjc3CitTYWx1ZGEgCToJNDUJOgkxOTE4MQorU3BhcnRhbmJ1cmcgCToJNDUJOgkyNTM3OTEKK1N1bXRlciAJOgk0NQk6CTEwNDY0NgorVW5pb24gCToJNDUJOgkyOTg4MQorV2lsbGlhbXNidXJnIAk6CTQ1CToJMzcyMTcKK1lvcmsgCToJNDUJOgkxNjQ2MTQKK0F1cm9yYSAJOgk0Ngk6CTMwNTgKK0JlYWRsZSAJOgk0Ngk6CTE3MDIzCitCZW5uZXR0IAk6CTQ2CToJMzU3NAorQm9uIEhvbW1lIAk6CTQ2CToJNzI2MAorQnJvb2tpbmdzIAk6CTQ2CToJMjgyMjAKK0Jyb3duIAk6CTQ2CToJMzU0NjAKK0JydWxlIAk6CTQ2CToJNTM2NAorQnVmZmFsbyAJOgk0Ngk6CTIwMzIKK0J1dHRlIAk6CTQ2CToJOTA5NAorQ2FtcGJlbGwgCToJNDYJOgkxNzgyCitDaGFybGVzIE1peCAJOgk0Ngk6CTkzNTAKK0NsYXJrIAk6CTQ2CToJNDE0MworQ2xheSAJOgk0Ngk6CTEzNTM3CitDb2Rpbmd0b24gCToJNDYJOgkyNTg5NworQ29yc29uIAk6CTQ2CToJNDE4MQorQ3VzdGVyIAk6CTQ2CToJNzI3NQorRGF2aXNvbiAJOgk0Ngk6CTE4NzQxCitEYXkgCToJNDYJOgk2MjY3CitEZXVlbCAJOgk0Ngk6CTQ0OTgKK0Rld2V5IAk6CTQ2CToJNTk3MgorRG91Z2xhcyAJOgk0Ngk6CTM0NTgKK0VkbXVuZHMgCToJNDYJOgk0MzY3CitGYWxsIFJpdmVyIAk6CTQ2CToJNzQ1MworRmF1bGsgCToJNDYJOgkyNjQwCitHcmFudCAJOgk0Ngk6CTc4NDcKK0dyZWdvcnkgCToJNDYJOgk0NzkyCitIYWFrb24gCToJNDYJOgkyMTk2CitIYW1saW4gCToJNDYJOgk1NTQwCitIYW5kIAk6CTQ2CToJMzc0MQorSGFuc29uIAk6CTQ2CToJMzEzOQorSGFyZGluZyAJOgk0Ngk6CTEzNTMKK0h1Z2hlcyAJOgk0Ngk6CTE2NDgxCitIdXRjaGluc29uIAk6CTQ2CToJODA3NQorSHlkZSAJOgk0Ngk6CTE2NzEKK0phY2tzb24gCToJNDYJOgkyOTMwCitKZXJhdWxkIAk6CTQ2CToJMjI5NQorSm9uZXMgCToJNDYJOgkxMTkzCitLaW5nc2J1cnkgCToJNDYJOgk1ODE1CitMYWtlIAk6CTQ2CToJMTEyNzYKK0xhd3JlbmNlIAk6CTQ2CToJMjE4MDIKK0xpbmNvbG4gCToJNDYJOgkyNDEzMQorTHltYW4gCToJNDYJOgkzODk1CitNY0Nvb2sgCToJNDYJOgk1ODMyCitNY1BoZXJzb24gCToJNDYJOgkyOTA0CitNYXJzaGFsbCAJOgk0Ngk6CTQ1NzYKK01lYWRlIAk6CTQ2CToJMjQyNTMKK01lbGxldHRlIAk6CTQ2CToJMjA4MworTWluZXIgCToJNDYJOgkyODg0CitNaW5uZWhhaGEgCToJNDYJOgkxNDgyODEKK01vb2R5IAk6CTQ2CToJNjU5NQorUGVubmluZ3RvbiAJOgk0Ngk6CTg4NTY1CitQZXJraW5zIAk6CTQ2CToJMzM2MworUG90dGVyIAk6CTQ2CToJMjY5MworUm9iZXJ0cyAJOgk0Ngk6CTEwMDE2CitTYW5ib3JuIAk6CTQ2CToJMjY3NQorU2hhbm5vbiAJOgk0Ngk6CTEyNDY2CitTcGluayAJOgk0Ngk6CTc0NTQKK1N0YW5sZXkgCToJNDYJOgkyNzcyCitTdWxseSAJOgk0Ngk6CTE1NTYKK1RvZGQgCToJNDYJOgk5MDUwCitUcmlwcCAJOgk0Ngk6CTY0MzAKK1R1cm5lciAJOgk0Ngk6CTg4NDkKK1VuaW9uIAk6CTQ2CToJMTI1ODQKK1dhbHdvcnRoIAk6CTQ2CToJNTk3NAorWWFua3RvbiAJOgk0Ngk6CTIxNjUyCitaaWViYWNoIAk6CTQ2CToJMjUxOQorQW5kZXJzb24gCToJNDcJOgk3MTMzMAorQmVkZm9yZCAJOgk0Nwk6CTM3NTg2CitCZW50b24gCToJNDcJOgkxNjUzNworQmxlZHNvZSAJOgk0Nwk6CTEyMzY3CitCbG91bnQgCToJNDcJOgkxMDU4MjMKK0JyYWRsZXkgCToJNDcJOgk4Nzk2NQorQ2FtcGJlbGwgCToJNDcJOgkzOTg1NAorQ2Fubm9uIAk6CTQ3CToJMTI4MjYKK0NhcnJvbGwgCToJNDcJOgkyOTQ3NQorQ2FydGVyIAk6CTQ3CToJNTY3NDIKK0NoZWF0aGFtIAk6CTQ3CToJMzU5MTIKK0NoZXN0ZXIgCToJNDcJOgkxNTU0MAorQ2xhaWJvcm5lIAk6CTQ3CToJMjk4NjIKK0NsYXkgCToJNDcJOgk3OTc2CitDb2NrZSAJOgk0Nwk6CTMzNTY1CitDb2ZmZWUgCToJNDcJOgk0ODAxNAorQ3JvY2tldHQgCToJNDcJOgkxNDUzMgorQ3VtYmVybGFuZCAJOgk0Nwk6CTQ2ODAyCitEYXZpZHNvbiAJOgk0Nwk6CTU2OTg5MQorRGVjYXR1ciAJOgk0Nwk6CTExNzMxCitEZUthbGIgCToJNDcJOgkxNzQyMworRGlja3NvbiAJOgk0Nwk6CTQzMTU2CitEeWVyIAk6CTQ3CToJMzcyNzkKK0ZheWV0dGUgCToJNDcJOgkyODgwNgorRmVudHJlc3MgCToJNDcJOgkxNjYyNQorRnJhbmtsaW4gCToJNDcJOgkzOTI3MAorR2lic29uIAk6CTQ3CToJNDgxNTIKK0dpbGVzIAk6CTQ3CToJMjk0NDcKK0dyYWluZ2VyIAk6CTQ3CToJMjA2NTkKK0dyZWVuZSAJOgk0Nwk6CTYyOTA5CitHcnVuZHkgCToJNDcJOgkxNDMzMgorSGFtYmxlbiAJOgk0Nwk6CTU4MTI4CitIYW1pbHRvbiAJOgk0Nwk6CTMwNzg5NgorSGFuY29jayAJOgk0Nwk6CTY3ODYKK0hhcmRlbWFuIAk6CTQ3CToJMjgxMDUKK0hhcmRpbiAJOgk0Nwk6CTI1NTc4CitIYXdraW5zIAk6CTQ3CToJNTM1NjMKK0hheXdvb2QgCToJNDcJOgkxOTc5NworSGVuZGVyc29uIAk6CTQ3CToJMjU1MjIKK0hlbnJ5IAk6CTQ3CToJMzExMTUKK0hpY2ttYW4gCToJNDcJOgkyMjI5NQorSG91c3RvbiAJOgk0Nwk6CTgwODgKK0h1bXBocmV5cyAJOgk0Nwk6CTE3OTI5CitKYWNrc29uIAk6CTQ3CToJMTA5ODQKK0plZmZlcnNvbiAJOgk0Nwk6CTQ0Mjk0CitKb2huc29uIAk6CTQ3CToJMTc0OTkKK0tub3ggCToJNDcJOgkzODIwMzIKK0xha2UgCToJNDcJOgk3OTU0CitMYXVkZXJkYWxlIAk6CTQ3CToJMjcxMDEKK0xhd3JlbmNlIAk6CTQ3CToJMzk5MjYKK0xld2lzIAk6CTQ3CToJMTEzNjcKK0xpbmNvbG4gCToJNDcJOgkzMTM0MAorTG91ZG9uIAk6CTQ3CToJMzkwODYKK01jTWlubiAJOgk0Nwk6CTQ5MDE1CitNY05haXJ5IAk6CTQ3CToJMjQ2NTMKK01hY29uIAk6CTQ3CToJMjAzODYKK01hZGlzb24gCToJNDcJOgk5MTgzNworTWFyaW9uIAk6CTQ3CToJMjc3NzYKK01hcnNoYWxsIAk6CTQ3CToJMjY3NjcKK01hdXJ5IAk6CTQ3CToJNjk0OTgKK01laWdzIAk6CTQ3CToJMTEwODYKK01vbnJvZSAJOgk0Nwk6CTM4OTYxCitNb250Z29tZXJ5IAk6CTQ3CToJMTM0NzY4CitNb29yZSAJOgk0Nwk6CTU3NDAKK01vcmdhbiAJOgk0Nwk6CTE5NzU3CitPYmlvbiAJOgk0Nwk6CTMyNDUwCitPdmVydG9uIAk6CTQ3CToJMjAxMTgKK1BlcnJ5IAk6CTQ3CToJNzYzMQorUGlja2V0dCAJOgk0Nwk6CTQ5NDUKK1BvbGsgCToJNDcJOgkxNjA1MAorUHV0bmFtIAk6CTQ3CToJNjIzMTUKK1JoZWEgCToJNDcJOgkyODQwMAorUm9hbmUgCToJNDcJOgk1MTkxMAorUm9iZXJ0c29uIAk6CTQ3CToJNTQ0MzMKK1J1dGhlcmZvcmQgCToJNDcJOgkxODIwMjMKK1Njb3R0IAk6CTQ3CToJMjExMjcKK1NlcXVhdGNoaWUgCToJNDcJOgkxMTM3MAorU2V2aWVyIAk6CTQ3CToJNzExNzAKK1NoZWxieSAJOgk0Nwk6CTg5NzQ3MgorU21pdGggCToJNDcJOgkxNzcxMgorU3Rld2FydCAJOgk0Nwk6CTEyMzcwCitTdWxsaXZhbiAJOgk0Nwk6CTE1MzA0OAorU3VtbmVyIAk6CTQ3CToJMTMwNDQ5CitUaXB0b24gCToJNDcJOgk1MTI3MQorVHJvdXNkYWxlIAk6CTQ3CToJNzI1OQorVW5pY29pIAk6CTQ3CToJMTc2NjcKK1VuaW9uIAk6CTQ3CToJMTc4MDgKK1ZhbiBCdXJlbiAJOgk0Nwk6CTU1MDgKK1dhcnJlbiAJOgk0Nwk6CTM4Mjc2CitXYXNoaW5ndG9uIAk6CTQ3CToJMTA3MTk4CitXYXluZSAJOgk0Nwk6CTE2ODQyCitXZWFrbGV5IAk6CTQ3CToJMzQ4OTUKK1doaXRlIAk6CTQ3CToJMjMxMDIKK1dpbGxpYW1zb24gCToJNDcJOgkxMjY2MzgKK1dpbHNvbiAJOgk0Nwk6CTg4ODA5CitBbmRlcnNvbiAJOgk0OAk6CTU1MTA5CitBbmRyZXdzIAk6CTQ4CToJMTMwMDQKK0FuZ2VsaW5hIAk6CTQ4CToJODAxMzAKK0FyYW5zYXMgCToJNDgJOgkyMjQ5NworQXJjaGVyIAk6CTQ4CToJODg1NAorQXJtc3Ryb25nIAk6CTQ4CToJMjE0OAorQXRhc2Nvc2EgCToJNDgJOgkzODYyOAorQXVzdGluIAk6CTQ4CToJMjM1OTAKK0JhaWxleSAJOgk0OAk6CTY1OTQKK0JhbmRlcmEgCToJNDgJOgkxNzY0NQorQmFzdHJvcCAJOgk0OAk6CTU3NzMzCitCYXlsb3IgCToJNDgJOgk0MDkzCitCZWUgCToJNDgJOgkzMjM1OQorQmVsbCAJOgk0OAk6CTIzNzk3NAorQmV4YXIgCToJNDgJOgkxMzkyOTMxCitCbGFuY28gCToJNDgJOgk4NDE4CitCb3JkZW4gCToJNDgJOgk3MjkKK0Jvc3F1ZSAJOgk0OAk6CTE3MjA0CitCb3dpZSAJOgk0OAk6CTg5MzA2CitCcmF6b3JpYSAJOgk0OAk6CTI0MTc2NworQnJhem9zIAk6CTQ4CToJMTUyNDE1CitCcmV3c3RlciAJOgk0OAk6CTg4NjYKK0JyaXNjb2UgCToJNDgJOgkxNzkwCitCcm9va3MgCToJNDgJOgk3OTc2CitCcm93biAJOgk0OAk6CTM3Njc0CitCdXJsZXNvbiAJOgk0OAk6CTE2NDcwCitCdXJuZXQgCToJNDgJOgkzNDE0NworQ2FsZHdlbGwgCToJNDgJOgkzMjE5NAorQ2FsaG91biAJOgk0OAk6CTIwNjQ3CitDYWxsYWhhbiAJOgk0OAk6CTEyOTA1CitDYW1lcm9uIAk6CTQ4CToJMzM1MjI3CitDYW1wIAk6CTQ4CToJMTE1NDkKK0NhcnNvbiAJOgk0OAk6CTY1MTYKK0Nhc3MgCToJNDgJOgkzMDQzOAorQ2FzdHJvIAk6CTQ4CToJODI4NQorQ2hhbWJlcnMgCToJNDgJOgkyNjAzMQorQ2hlcm9rZWUgCToJNDgJOgk0NjY1OQorQ2hpbGRyZXNzIAk6CTQ4CToJNzY4OAorQ2xheSAJOgk0OAk6CTExMDA2CitDb2NocmFuIAk6CTQ4CToJMzczMAorQ29rZSAJOgk0OAk6CTM4NjQKK0NvbGVtYW4gCToJNDgJOgk5MjM1CitDb2xsaW4gCToJNDgJOgk0OTE2NzUKK0NvbGxpbmdzd29ydGggCToJNDgJOgkzMjA2CitDb2xvcmFkbyAJOgk0OAk6CTIwMzkwCitDb21hbCAJOgk0OAk6CTc4MDIxCitDb21hbmNoZSAJOgk0OAk6CTE0MDI2CitDb25jaG8gCToJNDgJOgkzOTY2CitDb29rZSAJOgk0OAk6CTM2MzYzCitDb3J5ZWxsIAk6CTQ4CToJNzQ5NzgKK0NvdHRsZSAJOgk0OAk6CTE5MDQKK0NyYW5lIAk6CTQ4CToJMzk5NgorQ3JvY2tldHQgCToJNDgJOgk0MDk5CitDcm9zYnkgCToJNDgJOgk3MDcyCitDdWxiZXJzb24gCToJNDgJOgkyOTc1CitEYWxsYW0gCToJNDgJOgk2MjIyCitEYWxsYXMgCToJNDgJOgkyMjE4ODk5CitEYXdzb24gCToJNDgJOgkxNDk4NQorRGVhZiBTbWl0aCAJOgk0OAk6CTE4NTYxCitEZWx0YSAJOgk0OAk6CTUzMjcKK0RlbnRvbiAJOgk0OAk6CTQzMjk3NgorRGVXaXR0IAk6CTQ4CToJMjAwMTMKK0RpY2tlbnMgCToJNDgJOgkyNzYyCitEaW1taXQgCToJNDgJOgkxMDI0OAorRG9ubGV5IAk6CTQ4CToJMzgyOAorRHV2YWwgCToJNDgJOgkxMzEyMAorRWFzdGxhbmQgCToJNDgJOgkxODI5NworRWN0b3IgCToJNDgJOgkxMjExMjMKK0Vkd2FyZHMgCToJNDgJOgkyMTYyCitFbGxpcyAJOgk0OAk6CTExMTM2MAorRWwgUGFzbyAJOgk0OAk6CTY3OTYyMgorRXJhdGggCToJNDgJOgkzMzAwMQorRmFsbHMgCToJNDgJOgkxODU3NgorRmFubmluIAk6CTQ4CToJMzEyNDIKK0ZheWV0dGUgCToJNDgJOgkyMTgwNAorRmlzaGVyIAk6CTQ4CToJNDM0NAorRmxveWQgCToJNDgJOgk3NzcxCitGb2FyZCAJOgk0OAk6CTE2MjIKK0ZvcnQgQmVuZCAJOgk0OAk6CTM1NDQ1MgorRnJhbmtsaW4gCToJNDgJOgk5NDU4CitGcmVlc3RvbmUgCToJNDgJOgkxNzg2NworRnJpbyAJOgk0OAk6CTE2MjUyCitHYWluZXMgCToJNDgJOgkxNDQ2NworR2FsdmVzdG9uIAk6CTQ4CToJMjUwMTU4CitHYXJ6YSAJOgk0OAk6CTQ4NzIKK0dpbGxlc3BpZSAJOgk0OAk6CTIwODE0CitHbGFzc2NvY2sgCToJNDgJOgkxNDA2CitHb2xpYWQgCToJNDgJOgk2OTI4CitHb256YWxlcyAJOgk0OAk6CTE4NjI4CitHcmF5IAk6CTQ4CToJMjI3NDQKK0dyYXlzb24gCToJNDgJOgkxMTA1OTUKK0dyZWdnIAk6CTQ4CToJMTExMzc5CitHcmltZXMgCToJNDgJOgkyMzU1MgorR3VhZGFsdXBlIAk6CTQ4CToJODkwMjMKK0hhbGUgCToJNDgJOgkzNjYwMgorSGFsbCAJOgk0OAk6CTM3ODIKK0hhbWlsdG9uIAk6CTQ4CToJODIyOQorSGFuc2ZvcmQgCToJNDgJOgk1MzY5CitIYXJkZW1hbiAJOgk0OAk6CTQ3MjQKK0hhcmRpbiAJOgk0OAk6CTQ4MDczCitIYXJyaXMgCToJNDgJOgkzNDAwNTc4CitIYXJyaXNvbiAJOgk0OAk6CTYyMTEwCitIYXJ0bGV5IAk6CTQ4CToJNTUzNworSGFza2VsbCAJOgk0OAk6CTYwOTMKK0hheXMgCToJNDgJOgk5NzU4OQorSGVtcGhpbGwgCToJNDgJOgkzMzUxCitIZW5kZXJzb24gCToJNDgJOgk3MzI3NworSGlkYWxnbyAJOgk0OAk6CTU2OTQ2MworSGlsbCAJOgk0OAk6CTMyMzIxCitIb2NrbGV5IAk6CTQ4CToJMjI3MTYKK0hvb2QgCToJNDgJOgk0MTEwMAorSG9wa2lucyAJOgk0OAk6CTMxOTYwCitIb3VzdG9uIAk6CTQ4CToJMjMxODUKK0hvd2FyZCAJOgk0OAk6CTMzNjI3CitIdWRzcGV0aCAJOgk0OAk6CTMzNDQKK0h1bnQgCToJNDgJOgk3NjU5NgorSHV0Y2hpbnNvbiAJOgk0OAk6CTIzODU3CitJcmlvbiAJOgk0OAk6CTE3NzEKK0phY2sgCToJNDgJOgk4NzYzCitKYWNrc29uIAk6CTQ4CToJMTQzOTEKK0phc3BlciAJOgk0OAk6CTM1NjA0CitKZWZmIERhdmlzIAk6CTQ4CToJMjIwNworSmVmZmVyc29uIAk6CTQ4CToJMjUyMDUxCitKaW0gSG9nZyAJOgk0OAk6CTUyODEKK0ppbSBXZWxscyAJOgk0OAk6CTM5MzI2CitKb2huc29uIAk6CTQ4CToJMTI2ODExCitKb25lcyAJOgk0OAk6CTIwNzg1CitLYXJuZXMgCToJNDgJOgkxNTQ0NgorS2F1Zm1hbiAJOgk0OAk6CTcxMzEzCitLZW5kYWxsIAk6CTQ4CToJMjM3NDMKK0tlbmVkeSAJOgk0OAk6CTQxNAorS2VudCAJOgk0OAk6CTg1OQorS2VyciAJOgk0OAk6CTQzNjUzCitLaW1ibGUgCToJNDgJOgk0NDY4CitLaW5nIAk6CTQ4CToJMzU2CitLaW5uZXkgCToJNDgJOgkzMzc5CitLbGViZXJnIAk6CTQ4CToJMzE1NDkKK0tub3ggCToJNDgJOgk0MjUzCitMYW1hciAJOgk0OAk6CTQ4NDk5CitMYW1iIAk6CTQ4CToJMTQ3MDkKK0xhbXBhc2FzIAk6CTQ4CToJMTc3NjIKK0xhIFNhbGxlIAk6CTQ4CToJNTg2NgorTGF2YWNhIAk6CTQ4CToJMTkyMTAKK0xlZSAJOgk0OAk6CTE1NjU3CitMZW9uIAk6CTQ4CToJMTUzMzUKK0xpYmVydHkgCToJNDgJOgk3MDE1NAorTGltZXN0b25lIAk6CTQ4CToJMjIwNTEKK0xpcHNjb21iIAk6CTQ4CToJMzA1NworTGl2ZSBPYWsgCToJNDgJOgkxMjMwOQorTGxhbm8gCToJNDgJOgkxNzA0NAorTG92aW5nIAk6CTQ4CToJNjcKK0x1YmJvY2sgCToJNDgJOgkyNDI2MjgKK0x5bm4gCToJNDgJOgk2NTUwCitNY0N1bGxvY2ggCToJNDgJOgk4MjA1CitNY0xlbm5hbiAJOgk0OAk6CTIxMzUxNworTWNNdWxsZW4gCToJNDgJOgk4NTEKK01hZGlzb24gCToJNDgJOgkxMjk0MAorTWFyaW9uIAk6CTQ4CToJMTA5NDEKK01hcnRpbiAJOgk0OAk6CTQ3NDYKK01hc29uIAk6CTQ4CToJMzczOAorTWF0YWdvcmRhIAk6CTQ4CToJMzc5NTcKK01hdmVyaWNrIAk6CTQ4CToJNDcyOTcKK01lZGluYSAJOgk0OAk6CTM5MzA0CitNZW5hcmQgCToJNDgJOgkyMzYwCitNaWRsYW5kIAk6CTQ4CToJMTE2MDA5CitNaWxhbSAJOgk0OAk6CTI0MjM4CitNaWxscyAJOgk0OAk6CTUxNTEKK01pdGNoZWxsIAk6CTQ4CToJOTY5OAorTW9udGFndWUgCToJNDgJOgkxOTExNworTW9udGdvbWVyeSAJOgk0OAk6CTI5Mzc2OAorTW9vcmUgCToJNDgJOgkyMDEyMQorTW9ycmlzIAk6CTQ4CToJMTMwNDgKK01vdGxleSAJOgk0OAk6CTE0MjYKK05hY29nZG9jaGVzIAk6CTQ4CToJNTkyMDMKK05hdmFycm8gCToJNDgJOgk0NTEyNAorTmV3dG9uIAk6CTQ4CToJMTUwNzIKK05vbGFuIAk6CTQ4CToJMTU4MDIKK051ZWNlcyAJOgk0OAk6CTMxMzY0NQorT2NoaWx0cmVlIAk6CTQ4CToJOTAwNgorT2xkaGFtIAk6CTQ4CToJMjE4NQorT3JhbmdlIAk6CTQ4CToJODQ5NjYKK1BhbG8gUGludG8gCToJNDgJOgkyNzAyNgorUGFub2xhIAk6CTQ4CToJMjI3NTYKK1BhcmtlciAJOgk0OAk6CTg4NDk1CitQYXJtZXIgCToJNDgJOgkxMDAxNgorUGVjb3MgCToJNDgJOgkxNjgwOQorUG9sayAJOgk0OAk6CTQxMTMzCitQb3R0ZXIgCToJNDgJOgkxMTM1NDYKK1ByZXNpZGlvIAk6CTQ4CToJNzMwNAorUmFpbnMgCToJNDgJOgk5MTM5CitSYW5kYWxsIAk6CTQ4CToJMTA0MzEyCitSZWFnYW4gCToJNDgJOgkzMzI2CitSZWFsIAk6CTQ4CToJMzA0NworUmVkIFJpdmVyIAk6CTQ4CToJMTQzMTQKK1JlZXZlcyAJOgk0OAk6CTEzMTM3CitSZWZ1Z2lvIAk6CTQ4CToJNzgyOAorUm9iZXJ0cyAJOgk0OAk6CTg4NworUm9iZXJ0c29uIAk6CTQ4CToJMTYwMDAKK1JvY2t3YWxsIAk6CTQ4CToJNDMwODAKK1J1bm5lbHMgCToJNDgJOgkxMTQ5NQorUnVzayAJOgk0OAk6CTQ3MzcyCitTYWJpbmUgCToJNDgJOgkxMDQ2OQorU2FuIEF1Z3VzdGluZSAJOgk0OAk6CTg5NDYKK1NhbiBKYWNpbnRvIAk6CTQ4CToJMjIyNDYKK1NhbiBQYXRyaWNpbyAJOgk0OAk6CTY3MTM4CitTYW4gU2FiYSAJOgk0OAk6CTYxODYKK1NjaGxlaWNoZXIgCToJNDgJOgkyOTM1CitTY3VycnkgCToJNDgJOgkxNjM2MQorU2hhY2tlbGZvcmQgCToJNDgJOgkzMzAyCitTaGVsYnkgCToJNDgJOgkyNTIyNAorU2hlcm1hbiAJOgk0OAk6CTMxODYKK1NtaXRoIAk6CTQ4CToJMTc0NzA2CitTb21lcnZlbGwgCToJNDgJOgk2ODA5CitTdGFyciAJOgk0OAk6CTUzNTk3CitTdGVwaGVucyAJOgk0OAk6CTk2NzQKK1N0ZXJsaW5nIAk6CTQ4CToJMTM5MworU3RvbmV3YWxsIAk6CTQ4CToJMTY5MworU3V0dG9uIAk6CTQ4CToJNDA3NworU3dpc2hlciAJOgk0OAk6CTgzNzgKK1RhcnJhbnQgCToJNDgJOgkxNDQ2MjE5CitUYXlsb3IgCToJNDgJOgkxMjY1NTUKK1RlcnJlbGwgCToJNDgJOgkxMDgxCitUZXJyeSAJOgk0OAk6CTEyNzYxCitUaHJvY2ttb3J0b24gCToJNDgJOgkxODUwCitUaXR1cyAJOgk0OAk6CTI4MTE4CitUb20gR3JlZW4gCToJNDgJOgkxMDQwMTAKK1RyYXZpcyAJOgk0OAk6CTgxMjI4MAorVHJpbml0eSAJOgk0OAk6CTEzNzc5CitUeWxlciAJOgk0OAk6CTIwODcxCitVcHNodXIgCToJNDgJOgkzNTI5MQorVXB0b24gCToJNDgJOgkzNDA0CitVdmFsZGUgCToJNDgJOgkyNTkyNgorVmFsIFZlcmRlIAk6CTQ4CToJNDQ4NTYKK1ZhbiBaYW5kdCAJOgk0OAk6CTQ4MTQwCitWaWN0b3JpYSAJOgk0OAk6CTg0MDg4CitXYWxrZXIgCToJNDgJOgk2MTc1OAorV2FsbGVyIAk6CTQ4CToJMzI2NjMKK1dhcmQgCToJNDgJOgkxMDkwOQorV2FzaGluZ3RvbiAJOgk0OAk6CTMwMzczCitXZWJiIAk6CTQ4CToJMTkzMTE3CitXaGFydG9uIAk6CTQ4CToJNDExODgKK1doZWVsZXIgCToJNDgJOgk1Mjg0CitXaWNoaXRhIAk6CTQ4CToJMTMxNjY0CitXaWxiYXJnZXIgCToJNDgJOgkxNDY3NgorV2lsbGFjeSAJOgk0OAk6CTIwMDgyCitXaWxsaWFtc29uIAk6CTQ4CToJMjQ5OTY3CitXaWxzb24gCToJNDgJOgkzMjQwOAorV2lua2xlciAJOgk0OAk6CTcxNzMKK1dpc2UgCToJNDgJOgk0ODc5MworV29vZCAJOgk0OAk6CTM2NzUyCitZb2FrdW0gCToJNDgJOgk3MzIyCitZb3VuZyAJOgk0OAk6CTE3OTQzCitaYXBhdGEgCToJNDgJOgkxMjE4MgorWmF2YWxhIAk6CTQ4CToJMTE2MDAKK0JlYXZlciAJOgk0OQk6CTYwMDUKK0JveCBFbGRlciAJOgk0OQk6CTQyNzQ1CitDYWNoZSAJOgk0OQk6CTkxMzkxCitDYXJib24gCToJNDkJOgkyMDQyMgorRGFnZ2V0dCAJOgk0OQk6CTkyMQorRGF2aXMgCToJNDkJOgkyMzg5OTQKK0R1Y2hlc25lIAk6CTQ5CToJMTQzNzEKK0VtZXJ5IAk6CTQ5CToJMTA4NjAKK0dhcmZpZWxkIAk6CTQ5CToJNDczNQorR3JhbmQgCToJNDkJOgk4NDg1CitJcm9uIAk6CTQ5CToJMzM3NzkKK0p1YWIgCToJNDkJOgk4MjM4CitLYW5lIAk6CTQ5CToJNjA0NgorTWlsbGFyZCAJOgk0OQk6CTEyNDA1CitNb3JnYW4gCToJNDkJOgk3MTI5CitQaXV0ZSAJOgk0OQk6CTE0MzUKK1JpY2ggCToJNDkJOgkxOTYxCitTYWx0IExha2UgCToJNDkJOgk4OTgzODcKK1NhbiBKdWFuIAk6CTQ5CToJMTQ0MTMKK1NhbnBldGUgCToJNDkJOgkyMjc2MworU2V2aWVyIAk6CTQ5CToJMTg4NDIKK1N1bW1pdCAJOgk0OQk6CTI5NzM2CitUb29lbGUgCToJNDkJOgk0MDczNQorVWludGFoIAk6CTQ5CToJMjUyMjQKK1V0YWggCToJNDkJOgkzNjg1MzYKK1dhc2F0Y2ggCToJNDkJOgkxNTIxNQorV2FzaGluZ3RvbiAJOgk0OQk6CTkwMzU0CitXYXluZSAJOgk0OQk6CTI1MDkKK1dlYmVyIAk6CTQ5CToJMTk2NTMzCitBZGRpc29uIAk6CTUwCToJMzU5NzQKK0Jlbm5pbmd0b24gCToJNTAJOgkzNjk5NAorQ2FsZWRvbmlhIAk6CTUwCToJMjk3MDIKK0NoaXR0ZW5kZW4gCToJNTAJOgkxNDY1NzEKK0Vzc2V4IAk6CTUwCToJNjQ1OQorRnJhbmtsaW4gCToJNTAJOgk0NTQxNworR3JhbmQgSXNsZSAJOgk1MAk6CTY5MDEKK0xhbW9pbGxlIAk6CTUwCToJMjMyMzMKK09yYW5nZSAJOgk1MAk6CTI4MjI2CitPcmxlYW5zIAk6CTUwCToJMjYyNzcKK1J1dGxhbmQgCToJNTAJOgk2MzQwMAorV2FzaGluZ3RvbiAJOgk1MAk6CTU4MDM5CitXaW5kaGFtIAk6CTUwCToJNDQyMTYKK1dpbmRzb3IgCToJNTAJOgk1NzQxOAorQWNjb21hY2sgCToJNTEJOgkzODMwNQorQWxiZW1hcmxlIAk6CTUxCToJNzkyMzYKK0FsbGVnaGFueSAJOgk1MQk6CTEyOTI2CitBbWVsaWEgCToJNTEJOgkxMTQwMAorQW1oZXJzdCAJOgk1MQk6CTMxODk0CitBcHBvbWF0dG94IAk6CTUxCToJMTM3MDUKK0FybGluZ3RvbiAJOgk1MQk6CTE4OTQ1MworQXVndXN0YSAJOgk1MQk6CTY1NjE1CitCYXRoIAk6CTUxCToJNTA0OAorQmVkZm9yZCAJOgk1MQk6CTYwMzcxCitCbGFuZCAJOgk1MQk6CTY4NzEKK0JvdGV0b3VydCAJOgk1MQk6CTMwNDk2CitCcnVuc3dpY2sgCToJNTEJOgkxODQxOQorQnVjaGFuYW4gCToJNTEJOgkyNjk3OAorQnVja2luZ2hhbSAJOgk1MQk6CTE1NjIzCitDYW1wYmVsbCAJOgk1MQk6CTUxMDc4CitDYXJvbGluZSAJOgk1MQk6CTIyMTIxCitDYXJyb2xsIAk6CTUxCToJMjkyNDUKK0NoYXJsZXMgQ2l0eSAJOgk1MQk6CTY5MjYKK0NoYXJsb3R0ZSAJOgk1MQk6CTEyNDcyCitDaGVzdGVyZmllbGQgCToJNTEJOgkyNTk5MDMKK0NsYXJrZSAJOgk1MQk6CTEyNjUyCitDcmFpZyAJOgk1MQk6CTUwOTEKK0N1bHBlcGVyIAk6CTUxCToJMzQyNjIKK0N1bWJlcmxhbmQgCToJNTEJOgk5MDE3CitEaWNrZW5zb24gCToJNTEJOgkxNjM5NQorRGlud2lkZGllIAk6CTUxCToJMjQ1MzMKK0Vzc2V4IAk6CTUxCToJOTk4OQorRmFpcmZheCAJOgk1MQk6CTk2OTc0OQorRmF1cXVpZXIgCToJNTEJOgk1NTEzOQorRmxveWQgCToJNTEJOgkxMzg3NAorRmx1dmFubmEgCToJNTEJOgkyMDA0NworRnJhbmtsaW4gCToJNTEJOgk0NzI4NgorRnJlZGVyaWNrIAk6CTUxCToJNTkyMDkKK0dpbGVzIAk6CTUxCToJMTY2NTcKK0dsb3VjZXN0ZXIgCToJNTEJOgkzNDc4MAorR29vY2hsYW5kIAk6CTUxCToJMTY4NjMKK0dyYXlzb24gCToJNTEJOgkxNzkxNworR3JlZW5lIAk6CTUxCToJMTUyNDQKK0dyZWVuc3ZpbGxlIAk6CTUxCToJMTE1NjAKK0hhbGlmYXggCToJNTEJOgkzNzM1NQorSGFub3ZlciAJOgk1MQk6CTg2MzIwCitIZW5yaWNvIAk6CTUxCToJMjYyMzAwCitIZW5yeSAJOgk1MQk6CTU3OTMwCitIaWdobGFuZCAJOgk1MQk6CTI1MzYKK0lzbGUgb2YgV2lnaHQgCToJNTEJOgkyOTcyOAorSmFtZXMgQ2l0eSAJOgk1MQk6CTQ4MTAyCitLaW5nIGFuZCBRdWVlbiAJOgk1MQk6CTY2MzAKK0tpbmcgR2VvcmdlIAk6CTUxCToJMTY4MDMKK0tpbmcgV2lsbGlhbSAJOgk1MQk6CTEzMTQ2CitMYW5jYXN0ZXIgCToJNTEJOgkxMTU2NworTGVlIAk6CTUxCToJMjM1ODkKK0xvdWRvdW4gCToJNTEJOgkxNjk1OTkKK0xvdWlzYSAJOgk1MQk6CTI1NjI3CitMdW5lbmJ1cmcgCToJNTEJOgkxMzE0NgorTWFkaXNvbiAJOgk1MQk6CTEyNTIwCitNYXRoZXdzIAk6CTUxCToJOTIwNworTWVja2xlbmJ1cmcgCToJNTEJOgkzMjM4MAorTWlkZGxlc2V4IAk6CTUxCToJOTkzMgorTW9udGdvbWVyeSAJOgk1MQk6CTgzNjI5CitOZWxzb24gCToJNTEJOgkxNDQ0NQorTmV3IEtlbnQgCToJNTEJOgkxMzQ2MgorTm9ydGhhbXB0b24gCToJNTEJOgkxMzA5MworTm9ydGh1bWJlcmxhbmQgCToJNTEJOgkxMjI1OQorTm90dG93YXkgCToJNTEJOgkxNTcyNQorT3JhbmdlIAk6CTUxCToJMjU4ODEKK1BhZ2UgCToJNTEJOgkyMzE3NworUGF0cmljayAJOgk1MQk6CTE5NDA3CitQaXR0c3lsdmFuaWEgCToJNTEJOgk2MTc0NQorUG93aGF0YW4gCToJNTEJOgkyMjM3NworUHJpbmNlIEVkd2FyZCAJOgk1MQk6CTE5NzIwCitQcmluY2UgR2VvcmdlIAk6CTUxCToJMzMwNDcKK1ByaW5jZSBXaWxsaWFtIAk6CTUxCToJMjgwODEzCitQdWxhc2tpIAk6CTUxCToJMzUxMjcKK1JhcHBhaGFubm9jayAJOgk1MQk6CTY5ODMKK1JpY2htb25kIAk6CTUxCToJODgwOQorUm9hbm9rZSAJOgk1MQk6CTg1Nzc4CitSb2NrYnJpZGdlIAk6CTUxCToJMjA4MDgKK1JvY2tpbmdoYW0gCToJNTEJOgk2NzcyNQorUnVzc2VsbCAJOgk1MQk6CTMwMzA4CitTY290dCAJOgk1MQk6CTIzNDAzCitTaGVuYW5kb2FoIAk6CTUxCToJMzUwNzUKK1NteXRoIAk6CTUxCToJMzMwODEKK1NvdXRoYW1wdG9uIAk6CTUxCToJMTc0ODIKK1Nwb3RzeWx2YW5pYSAJOgk1MQk6CTkwMzk1CitTdGFmZm9yZCAJOgk1MQk6CTkyNDQ2CitTdXJyeSAJOgk1MQk6CTY4MjkKK1N1c3NleCAJOgk1MQk6CTEyNTA0CitUYXpld2VsbCAJOgk1MQk6CTQ0NTk4CitXYXJyZW4gCToJNTEJOgkzMTU4NAorV2FzaGluZ3RvbiAJOgk1MQk6CTUxMTAzCitXZXN0bW9yZWxhbmQgCToJNTEJOgkxNjcxOAorV2lzZSAJOgk1MQk6CTQwMTIzCitXeXRoZSAJOgk1MQk6CTI3NTk5CitZb3JrIAk6CTUxCToJNTYyOTcKK0FsZXhhbmRyaWEgCToJNTEJOgkxMjgyODMKK0JlZGZvcmQgCToJNTEJOgk2Mjk5CitCcmlzdG9sIAk6CTUxCToJMTczNjcKK0J1ZW5hIFZpc3RhIAk6CTUxCToJNjM0OQorQ2hhcmxvdHRlc3ZpbGxlIAk6CTUxCToJNDUwNDkKK0NoZXNhcGVha2UgCToJNTEJOgkxOTkxODQKK0NsaWZ0b24gRm9yZ2UgCToJNTEJOgk0Mjg5CitDb2xvbmlhbCBIZWlnaHRzIAk6CTUxCToJMTY4OTcKK0NvdmluZ3RvbiAJOgk1MQk6CTYzMDMKK0RhbnZpbGxlIAk6CTUxCToJNDg0MTEKK0VtcG9yaWEgCToJNTEJOgk1NjY1CitGYWlyZmF4IAk6CTUxCToJMjE0OTgKK0ZhbGxzIENodXJjaCAJOgk1MQk6CTEwMzc3CitGcmFua2xpbiAJOgk1MQk6CTgzNDYKK0ZyZWRlcmlja3NidXJnIAk6CTUxCToJMTkyNzkKK0dhbGF4IAk6CTUxCToJNjgzNworSGFtcHRvbiAJOgk1MQk6CTE0NjQzNworSGFycmlzb25idXJnIAk6CTUxCToJNDA0NjgKK0hvcGV3ZWxsIAk6CTUxCToJMjIzNTQKK0xleGluZ3RvbiAJOgk1MQk6CTY4NjcKK0x5bmNoYnVyZyAJOgk1MQk6CTY1MjY5CitNYW5hc3NhcyAJOgk1MQk6CTM1MTM1CitNYW5hc3NhcyBQYXJrIAk6CTUxCToJMTAyOTAKK01hcnRpbnN2aWxsZSAJOgk1MQk6CTE1NDE2CitOZXdwb3J0IE5ld3MgCToJNTEJOgkxODAxNTAKK05vcmZvbGsgCToJNTEJOgkyMzQ0MDMKK05vcnRvbiAJOgk1MQk6CTM5MDQKK1BldGVyc2J1cmcgCToJNTEJOgkzMzc0MAorUG9xdW9zb24gCToJNTEJOgkxMTU2NgorUG9ydHNtb3V0aCAJOgk1MQk6CTEwMDU2NQorUmFkZm9yZCAJOgk1MQk6CTE1ODU5CitSaWNobW9uZCAJOgk1MQk6CTE5Nzc5MAorUm9hbm9rZSAJOgk1MQk6CTk0OTExCitTYWxlbSAJOgk1MQk6CTI0NzQ3CitTdGF1bnRvbiAJOgk1MQk6CTIzODUzCitTdWZmb2xrIAk6CTUxCToJNjM2NzcKK1ZpcmdpbmlhIEJlYWNoIAk6CTUxCToJNDI1MjU3CitXYXluZXNib3JvIAk6CTUxCToJMTk1MjAKK1dpbGxpYW1zYnVyZyAJOgk1MQk6CTExOTk4CitXaW5jaGVzdGVyIAk6CTUxCToJMjM1ODUKK0FkYW1zIAk6CTUzCToJMTY0MjgKK0Fzb3RpbiAJOgk1Mwk6CTIwNTUxCitCZW50b24gCToJNTMJOgkxNDI0NzUKK0NoZWxhbiAJOgk1Mwk6CTY2NjE2CitDbGFsbGFtIAk6CTUzCToJNjQ1MjUKK0NsYXJrIAk6CTUzCToJMzQ1MjM4CitDb2x1bWJpYSAJOgk1Mwk6CTQwNjQKK0Nvd2xpdHogCToJNTMJOgk5Mjk0OAorRG91Z2xhcyAJOgk1Mwk6CTMyNjAzCitGZXJyeSAJOgk1Mwk6CTcyNjAKK0ZyYW5rbGluIAk6CTUzCToJNDkzNDcKK0dhcmZpZWxkIAk6CTUzCToJMjM5NworR3JhbnQgCToJNTMJOgk3NDY5OAorR3JheXMgSGFyYm9yIAk6CTUzCToJNjcxOTQKK0lzbGFuZCAJOgk1Mwk6CTcxNTU4CitKZWZmZXJzb24gCToJNTMJOgkyNTk1MworS2luZyAJOgk1Mwk6CTE3MzcwMzQKK0tpdHNhcCAJOgk1Mwk6CTIzMTk2OQorS2l0dGl0YXMgCToJNTMJOgkzMzM2MgorS2xpY2tpdGF0IAk6CTUzCToJMTkxNjEKK0xld2lzIAk6CTUzCToJNjg2MDAKK0xpbmNvbG4gCToJNTMJOgkxMDE4NAorTWFzb24gCToJNTMJOgk0OTQwNQorT2thbm9nYW4gCToJNTMJOgkzOTU2NAorUGFjaWZpYyAJOgk1Mwk6CTIwOTg0CitQZW5kIE9yZWlsbGUgCToJNTMJOgkxMTczMgorUGllcmNlIAk6CTUzCToJNzAwODIwCitTYW4gSnVhbiAJOgk1Mwk6CTE0MDc3CitTa2FnaXQgCToJNTMJOgkxMDI5NzkKK1NrYW1hbmlhIAk6CTUzCToJOTg3MgorU25vaG9taXNoIAk6CTUzCToJNjA2MDI0CitTcG9rYW5lIAk6CTUzCToJNDE3OTM5CitTdGV2ZW5zIAk6CTUzCToJNDAwNjYKK1RodXJzdG9uIAk6CTUzCToJMjA3MzU1CitXYWhraWFrdW0gCToJNTMJOgkzODI0CitXYWxsYSBXYWxsYSAJOgk1Mwk6CTU1MTgwCitXaGF0Y29tIAk6CTUzCToJMTY2ODE0CitXaGl0bWFuIAk6CTUzCToJNDA3NDAKK1lha2ltYSAJOgk1Mwk6CTIyMjU4MQorQmFyYm91ciAJOgk1NAk6CTE1NTU3CitCZXJrZWxleSAJOgk1NAk6CTc1OTA1CitCb29uZSAJOgk1NAk6CTI1NTM1CitCcmF4dG9uIAk6CTU0CToJMTQ3MDIKK0Jyb29rZSAJOgk1NAk6CTI1NDQ3CitDYWJlbGwgCToJNTQJOgk5Njc4NAorQ2FsaG91biAJOgk1NAk6CTc1ODIKK0NsYXkgCToJNTQJOgkxMDMzMAorRG9kZHJpZGdlIAk6CTU0CToJNzQwMworRmF5ZXR0ZSAJOgk1NAk6CTQ3NTc5CitHaWxtZXIgCToJNTQJOgk3MTYwCitHcmFudCAJOgk1NAk6CTExMjk5CitHcmVlbmJyaWVyIAk6CTU0CToJMzQ0NTMKK0hhbXBzaGlyZSAJOgk1NAk6CTIwMjAzCitIYW5jb2NrIAk6CTU0CToJMzI2NjcKK0hhcmR5IAk6CTU0CToJMTI2NjkKK0hhcnJpc29uIAk6CTU0CToJNjg2NTIKK0phY2tzb24gCToJNTQJOgkyODAwMAorSmVmZmVyc29uIAk6CTU0CToJNDIxOTAKK0thbmF3aGEgCToJNTQJOgkyMDAwNzMKK0xld2lzIAk6CTU0CToJMTY5MTkKK0xpbmNvbG4gCToJNTQJOgkyMjEwOAorTG9nYW4gCToJNTQJOgkzNzcxMAorTWNEb3dlbGwgCToJNTQJOgkyNzMyOQorTWFyaW9uIAk6CTU0CToJNTY1OTgKK01hcnNoYWxsIAk6CTU0CToJMzU1MTkKK01hc29uIAk6CTU0CToJMjU5NTcKK01lcmNlciAJOgk1NAk6CTYyOTgwCitNaW5lcmFsIAk6CTU0CToJMjcwNzgKK01pbmdvIAk6CTU0CToJMjgyNTMKK01vbm9uZ2FsaWEgCToJNTQJOgk4MTg2NgorTW9ucm9lIAk6CTU0CToJMTQ1ODMKK01vcmdhbiAJOgk1NAk6CTE0OTQzCitOaWNob2xhcyAJOgk1NAk6CTI2NTYyCitPaGlvIAk6CTU0CToJNDc0MjcKK1BlbmRsZXRvbiAJOgk1NAk6CTgxOTYKK1BsZWFzYW50cyAJOgk1NAk6CTc1MTQKK1BvY2Fob250YXMgCToJNTQJOgk5MTMxCitQcmVzdG9uIAk6CTU0CToJMjkzMzQKK1B1dG5hbSAJOgk1NAk6CTUxNTg5CitSYWxlaWdoIAk6CTU0CToJNzkyMjAKK1JhbmRvbHBoIAk6CTU0CToJMjgyNjIKK1JpdGNoaWUgCToJNTQJOgkxMDM0MworUm9hbmUgCToJNTQJOgkxNTQ0NgorU3VtbWVycyAJOgk1NAk6CTEyOTk5CitUYXlsb3IgCToJNTQJOgkxNjA4OQorVHVja2VyIAk6CTU0CToJNzMyMQorVHlsZXIgCToJNTQJOgk5NTkyCitVcHNodXIgCToJNTQJOgkyMzQwNAorV2F5bmUgCToJNTQJOgk0MjkwMworV2Vic3RlciAJOgk1NAk6CTk3MTkKK1dldHplbCAJOgk1NAk6CTE3NjkzCitXaXJ0IAk6CTU0CToJNTg3MworV29vZCAJOgk1NAk6CTg3OTg2CitXeW9taW5nIAk6CTU0CToJMjU3MDgKK0FkYW1zIAk6CTU1CToJMTg2NDMKK0FzaGxhbmQgCToJNTUJOgkxNjg2NgorQmFycm9uIAk6CTU1CToJNDQ5NjMKK0JheWZpZWxkIAk6CTU1CToJMTUwMTMKK0Jyb3duIAk6CTU1CToJMjI2Nzc4CitCdWZmYWxvIAk6CTU1CToJMTM4MDQKK0J1cm5ldHQgCToJNTUJOgkxNTY3NAorQ2FsdW1ldCAJOgk1NQk6CTQwNjMxCitDaGlwcGV3YSAJOgk1NQk6CTU1MTk1CitDbGFyayAJOgk1NQk6CTMzNTU3CitDb2x1bWJpYSAJOgk1NQk6CTUyNDY4CitDcmF3Zm9yZCAJOgk1NQk6CTE3MjQzCitEYW5lIAk6CTU1CToJNDI2NTI2CitEb2RnZSAJOgk1NQk6CTg1ODk3CitEb29yIAk6CTU1CToJMjc5NjEKK0RvdWdsYXMgCToJNTUJOgk0MzI4NworRHVubiAJOgk1NQk6CTM5ODU4CitFYXUgQ2xhaXJlIAk6CTU1CToJOTMxNDIKK0Zsb3JlbmNlIAk6CTU1CToJNTA4OAorRm9uZCBkdSBMYWMgCToJNTUJOgk5NzI5NgorRm9yZXN0IAk6CTU1CToJMTAwMjQKK0dyYW50IAk6CTU1CToJNDk1OTcKK0dyZWVuIAk6CTU1CToJMzM2NDcKK0dyZWVuIExha2UgCToJNTUJOgkxOTEwNQorSW93YSAJOgk1NQk6CTIyNzgwCitJcm9uIAk6CTU1CToJNjg2MQorSmFja3NvbiAJOgk1NQk6CTE5MTAwCitKZWZmZXJzb24gCToJNTUJOgk3NDAyMQorSnVuZWF1IAk6CTU1CToJMjQzMTYKK0tlbm9zaGEgCToJNTUJOgkxNDk1NzcKK0tld2F1bmVlIAk6CTU1CToJMjAxODcKK0xhIENyb3NzZSAJOgk1NQk6CTEwNzEyMAorTGFmYXlldHRlIAk6CTU1CToJMTYxMzcKK0xhbmdsYWRlIAk6CTU1CToJMjA3NDAKK0xpbmNvbG4gCToJNTUJOgkyOTY0MQorTWFuaXRvd29jIAk6CTU1CToJODI4ODcKK01hcmF0aG9uIAk6CTU1CToJMTI1ODM0CitNYXJpbmV0dGUgCToJNTUJOgk0MzM4NAorTWFycXVldHRlIAk6CTU1CToJMTU4MzIKK01lbm9taW5lZSAJOgk1NQk6CTQ1NjIKK01pbHdhdWtlZSAJOgk1NQk6CTk0MDE2NAorTW9ucm9lIAk6CTU1CToJNDA4OTkKK09jb250byAJOgk1NQk6CTM1NjM0CitPbmVpZGEgCToJNTUJOgkzNjc3NgorT3V0YWdhbWllIAk6CTU1CToJMTYwOTcxCitPemF1a2VlIAk6CTU1CToJODIzMTcKK1BlcGluIAk6CTU1CToJNzIxMworUGllcmNlIAk6CTU1CToJMzY4MDQKK1BvbGsgCToJNTUJOgk0MTMxOQorUG9ydGFnZSAJOgk1NQk6CTY3MTgyCitQcmljZSAJOgk1NQk6CTE1ODIyCitSYWNpbmUgCToJNTUJOgkxODg4MzEKK1JpY2hsYW5kIAk6CTU1CToJMTc5MjQKK1JvY2sgCToJNTUJOgkxNTIzMDcKK1J1c2sgCToJNTUJOgkxNTM0NworU3QuIENyb2l4IAk6CTU1CToJNjMxNTUKK1NhdWsgCToJNTUJOgk1NTIyNQorU2F3eWVyIAk6CTU1CToJMTYxOTYKK1NoYXdhbm8gCToJNTUJOgk0MDY2NAorU2hlYm95Z2FuIAk6CTU1CToJMTEyNjQ2CitUYXlsb3IgCToJNTUJOgkxOTY4MAorVHJlbXBlYWxlYXUgCToJNTUJOgkyNzAxMAorVmVybm9uIAk6CTU1CToJMjgwNTYKK1ZpbGFzIAk6CTU1CToJMjEwMzMKK1dhbHdvcnRoIAk6CTU1CToJOTM3NTkKK1dhc2hidXJuIAk6CTU1CToJMTYwMzYKK1dhc2hpbmd0b24gCToJNTUJOgkxMTc0OTMKK1dhdWtlc2hhIAk6CTU1CToJMzYwNzY3CitXYXVwYWNhIAk6CTU1CToJNTE3MzEKK1dhdXNoYXJhIAk6CTU1CToJMjMxNTQKK1dpbm5lYmFnbyAJOgk1NQk6CTE1Njc2MworV29vZCAJOgk1NQk6CTc1NTU1CitBbGJhbnkgCToJNTYJOgkzMjAxNAorQmlnIEhvcm4gCToJNTYJOgkxMTQ2MQorQ2FtcGJlbGwgCToJNTYJOgkzMzY5OAorQ2FyYm9uIAk6CTU2CToJMTU2MzkKK0NvbnZlcnNlIAk6CTU2CToJMTIwNTIKK0Nyb29rIAk6CTU2CToJNTg4NworRnJlbW9udCAJOgk1Ngk6CTM1ODA0CitHb3NoZW4gCToJNTYJOgkxMjUzOAorSG90IFNwcmluZ3MgCToJNTYJOgk0ODgyCitKb2huc29uIAk6CTU2CToJNzA3NQorTGFyYW1pZSAJOgk1Ngk6CTgxNjA3CitMaW5jb2xuIAk6CTU2CToJMTQ1NzMKK05hdHJvbmEgCToJNTYJOgk2NjUzMworTmlvYnJhcmEgCToJNTYJOgkyNDA3CitQYXJrIAk6CTU2CToJMjU3ODYKK1BsYXR0ZSAJOgk1Ngk6CTg4MDcKK1NoZXJpZGFuIAk6CTU2CToJMjY1NjAKK1N1YmxldHRlIAk6CTU2CToJNTkyMAorU3dlZXR3YXRlciAJOgk1Ngk6CTM3NjEzCitUZXRvbiAJOgk1Ngk6CTE4MjUxCitVaW50YSAJOgk1Ngk6CTE5NzQyCitXYXNoYWtpZSAJOgk1Ngk6CTgyODkKK1dlc3RvbiAJOgk1Ngk6CTY2NDQKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9VU0FfQVJFQS50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9VU0FfQVJFQS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTRiNTRhNAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL1VTQV9BUkVBLnR4dApAQCAtMCwwICsxLDUyIEBACitVbml0ZWQgU3RhdGVzIDogMCA6IDk2MzE0MjAKK0FsYWJhbWEJOgkxCToJNTI0MTkuMDIKK0FsYXNrYQk6CTEJOgk2NjMyNjcuMjYKK0FyaXpvbmEJOgkxCToJMTEzOTk4LjMwCitBcmthbnNhcwk6CTEJOgk1MzE3OC42MgorQ2FsaWZvcm5pYQk6CTEJOgkxNjM2OTUuNTcKK0NvbG9yYWRvCToJMQk6CTEwNDA5My41NworQ29ubmVjdGljdXQJOgkxCToJNTU0My4zMworRGVsYXdhcmUJOgkxCToJMjQ4OS4yNworRGlzdHJpY3Qgb2YgQ29sdW1iaWEJOgkxCToJNjguMzQKK0Zsb3JpZGEJOgkxCToJNjU3NTQuNTkKK0dlb3JnaWEJOgkxCToJNTk0MjQuNzcKK0hhd2FpaQk6CTEJOgkxMDkzMC45OAorSWRhaG8JOgkxCToJODM1NzAuMDgKK0lsbGlub2lzCToJMQk6CTU3OTE0LjM4CitJbmRpYW5hCToJMQk6CTM2NDE3LjczCitJb3dhCToJMQk6CTU2MjcxLjU1CitLYW5zYXMJOgkxCToJODIyNzYuODQKK0tlbnR1Y2t5CToJMQk6CTQwNDA5LjAyCitMb3Vpc2lhbmEJOgkxCToJNTE4MzkuNzAKK01haW5lCToJMQk6CTM1Mzg0LjY1CitNYXJ5bGFuZAk6CTEJOgkxMjQwNi42OAorTWFzc2FjaHVzZXR0cwk6CTEJOgkxMDU1NC41NworTWljaGlnYW4JOgkxCToJOTY3MTYuMTEKK01pbm5lc290YQk6CTEJOgk4NjkzOC44NworTWlzc2lzc2lwcGkJOgkxCToJNDg0MzAuMTkKK01pc3NvdXJpCToJMQk6CTY5NzA0LjMxCitNb250YW5hCToJMQk6CTE0NzA0Mi40MAorTmVicmFza2EJOgkxCToJNzczNTMuNzMKK05ldmFkYQk6CTEJOgkxMTA1NjAuNzEKK05ldyBIYW1wc2hpcmUJOgkxCToJOTM0OS45NAorTmV3IEplcnNleQk6CTEJOgk4NzIxLjMwCitOZXcgTWV4aWNvCToJMQk6CTEyMTU4OS40OAorTmV3IFlvcmsJOgkxCToJNTQ1NTYuMDAKK05vcnRoIENhcm9saW5hCToJMQk6CTUzODE4LjUxCitOb3J0aCBEYWtvdGEJOgkxCToJNzA2OTkuNzkKK09oaW8JOgkxCToJNDQ4MjQuOTAKK09rbGFob21hCToJMQk6CTY5ODk4LjE5CitPcmVnb24JOgkxCToJOTgzODAuNjQKK1Blbm5zeWx2YW5pYQk6CTEJOgk0NjA1NS4yNAorUmhvZGUgSXNsYW5kCToJMQk6CTE1NDUuMDUKK1NvdXRoIENhcm9saW5hCToJMQk6CTMyMDIwLjIwCitTb3V0aCBEYWtvdGEJOgkxCToJNzcxMTYuNDkKK1Rlbm5lc3NlZQk6CTEJOgk0MjE0My4yNworVGV4YXMJOgkxCToJMjY4NTgwLjgyCitVdGFoCToJMQk6CTg0ODk4LjgzCitWZXJtb250CToJMQk6CTk2MTQuMjYKK1ZpcmdpbmlhCToJMQk6CTQyNzc0LjIwCitXYXNoaW5ndG9uCToJMQk6CTcxMjk5LjY0CitXZXN0IFZpcmdpbmlhCToJMQk6CTI0MjI5Ljc2CitXaXNjb25zaW4JOgkxCToJNjU0OTcuODIKK1d5b21pbmcJOgkxCToJOTc4MTMuNTYKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL1VTQV9QT1BVTEFUSU9OLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL1VTQV9QT1BVTEFUSU9OLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YmM2MzQwCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvVVNBX1BPUFVMQVRJT04udHh0CkBAIC0wLDAgKzEsNTIgQEAKK1VuaXRlZCBTdGF0ZXMJOgkwCToJMjgxNDIxOTA2CisgICAgQ2FsaWZvcm5pYQk6CTEJOgkzMzg3MTY0OAorICAgIFRleGFzCToJMQk6CTIwODUxODIwCisgICAgTmV3IFlvcmsJOgkxCToJMTg5NzY0NTcKKyAgICBGbG9yaWRhCToJMQk6CTE1OTgyMzc4CisgICAgSWxsaW5vaXMJOgkxCToJMTI0MTkyOTMKKyAgICBQZW5uc3lsdmFuaWEJOgkxCToJMTIyODEwNTQKKyAgICBPaGlvCToJMQk6CTExMzUzMTQwCisgICAgTWljaGlnYW4JOgkxCToJOTkzODQ0NAorICAgIE5ldyBKZXJzZXkJOgkxCToJODQxNDM1MAorICAgIEdlb3JnaWEJOgkxCToJODE4NjQ1MworICAgIE5vcnRoIENhcm9saW5hCToJMQk6CTgwNDkzMTMKKyAgICBWaXJnaW5pYQk6CTEJOgk3MDc4NTE1CisgICAgTWFzc2FjaHVzZXR0cwk6CTEJOgk2MzQ5MDk3CisgICAgSW5kaWFuYQk6CTEJOgk2MDgwNDg1CisgICAgV2FzaGluZ3Rvbgk6CTEJOgk1ODk0MTIxCisgICAgVGVubmVzc2VlCToJMQk6CTU2ODkyODMKKyAgICBNaXNzb3VyaQk6CTEJOgk1NTk1MjExCisgICAgV2lzY29uc2luCToJMQk6CTUzNjM2NzUKKyAgICBNYXJ5bGFuZAk6CTEJOgk1Mjk2NDg2CisgICAgQXJpem9uYQk6CTEJOgk1MTMwNjMyCisgICAgTWlubmVzb3RhCToJMQk6CTQ5MTk0NzkKKyAgICBMb3Vpc2lhbmEJOgkxCToJNDQ2ODk3NgorICAgIEFsYWJhbWEJOgkxCToJNDQ0NzEwMAorICAgIENvbG9yYWRvCToJMQk6CTQzMDEyNjEKKyAgICBLZW50dWNreQk6CTEJOgk0MDQxNzY5CisgICAgU291dGggQ2Fyb2xpbmEJOgkxCToJNDAxMjAxMgorICAgIE9rbGFob21hCToJMQk6CTM0NTA2NTQKKyAgICBPcmVnb24JOgkxCToJMzQyMTM5OQorICAgIENvbm5lY3RpY3V0CToJMQk6CTM0MDU1NjUKKyAgICBJb3dhCToJMQk6CTI5MjYzMjQKKyAgICBNaXNzaXNzaXBwaQk6CTEJOgkyODQ0NjU4CisgICAgS2Fuc2FzCToJMQk6CTI2ODg0MTgKKyAgICBBcmthbnNhcwk6CTEJOgkyNjczNDAwCisgICAgVXRhaAk6CTEJOgkyMjMzMTY5CisgICAgTmV2YWRhCToJMQk6CTE5OTgyNTcKKyAgICBOZXcgTWV4aWNvCToJMQk6CTE4MTkwNDYKKyAgICBXZXN0IFZpcmdpbmlhCToJMQk6CTE4MDgzNDQKKyAgICBOZWJyYXNrYQk6CTEJOgkxNzExMjYzCisgICAgSWRhaG8JOgkxCToJMTI5Mzk1MworICAgIE1haW5lCToJMQk6CTEyNzQ5MjMKKyAgICBOZXcgSGFtcHNoaXJlCToJMQk6CTEyMzU3ODYKKyAgICBIYXdhaWkJOgkxCToJMTIxMTUzNworICAgIFJob2RlIElzbGFuZAk6CTEJOgkxMDQ4MzE5CisgICAgTW9udGFuYQk6CTEJOgk5MDIxOTUKKyAgICBEZWxhd2FyZQk6CTEJOgk3ODM2MDAKKyAgICBTb3V0aCBEYWtvdGEJOgkxCToJNzU0ODQ0CisgICAgTm9ydGggRGFrb3RhCToJMQk6CTY0MjIwMAorICAgIEFsYXNrYQk6CTEJOgk2MjY5MzIKKyAgICBWZXJtb250CToJMQk6CTYwODgyNworICAgIERpc3RyaWN0IG9mIENvbHVtYmlhCToJMQk6CTU3MjA1OQorICAgIFd5b21pbmcJOgkxCToJNDkzNzgyCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9VWkJFS0lTVEFOX0FSRUEudHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvVVpCRUtJU1RBTl9BUkVBLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMWJkMmNhCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvVVpCRUtJU1RBTl9BUkVBLnR4dApAQCAtMCwwICsxLDIxIEBACitVemJla2lzdGFuCToJMAk6CTQ0NzQwMAorUW9yYXFhbHBvZ2hpc3RvbiAgW0FyYWwgU2VhXSA6IDEgOiAxNjQwMDAKK0FuZGlqYW4gW0FuZGl6aGFuXSAJOgkxCToJNDIwMAorQnVraGFyYSAJOgkxCToJMzk0MDAKK0ZlcmdoYW5hIFtGZXJnYW5hXQk6CTEJOgk2ODAwCitKaXp6YWsgCToJMQk6CTIwNTAwCitOdWt1cyAJOgkxCToJMTY1NjAwCitLYXJzaGkgCToJMQk6CTI4NDAwCitVcmdlbmNoIAk6CTEJOgk2MzAwCitOYW1hbmdhbiAJOgkxCToJNzkwMAorTmF2b2l5IAk6CTEJOgkxMTA4MDAKK1NhbWFycWFuZCBbU2FtYXJrYW5kXQk6CTEJOgkxNjQwMAorVGVybWV6IAk6CTEJOgkyMDgwMAorR3VsaXN0YW4gCToJMQk6CTUxMDAKK1Rhc2hrZW50IENpdHkJOgkxCToJMzAwCitUYXNoa2VudCBbVGFzaGtlbnQgT2JsYXN0XQk6CTEJOgkxNTAwMAorS2FyYWthbHBhayA6IDEgOiAxNjQ5MDAKK0thc2hrYWRhcnlhIDogMSA6IDI4NDAwCitLaG9yZXptIDogMSAgOiA2MzAwCitTdXJraGFuZGFyeWEgOiAxIDogMjA4MDAKK1N5cmRhcnlhIDogMSA6IDUxMDAKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL1VaQkVLSVNUQU5fUE9QVUxBVElPTi50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9VWkJFS0lTVEFOX1BPUFVMQVRJT04udHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQzODg0MTkKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9VWkJFS0lTVEFOX1BPUFVMQVRJT04udHh0CkBAIC0wLDAgKzEsMjQgQEAKK1V6YmVraXN0YW4JOgkwCToJMjczMDcxMzQKK1FvcmFxYWxwb2doaXN0b24gIFtBcmFsIFNlYV0gOiAxIDogMTM0MzAwMAorQW5kaWphbiBbQW5kaXpoYW5dICAJOgkxCToJMjI4NjAwMAorQnVraGFyYSAJOgkxCToJMTUzNDkwMAorRmVyZ2hhbmEgW0ZlcmdhbmFdCToJMQk6CTI3NjEzMDAKK0ppenphayAJOgkxCToJMTAyNjAwMAorTnVrdXMgCToJMQk6CTE2MzM5MDAKK0thcnNoaSAJOgkxCToJMjMwMjAwMAorVXJnZW5jaCAJOgkxCToJMTQwMjYwMAorTmFtYW5nYW4gCToJMQk6CTIwNDk5MDAKK05hdm9peSAJOgkxCToJODc3MTAwCitTYW1hcnFhbmQgW1NhbWFya2FuZF0gCToJMQk6CTI3NDkxMDAKK1Rlcm1leiAJOgkxCToJMTg0NjQwMAorR3VsaXN0YW4gCToJMQk6CTY3MDgwMAorVGFzaGtlbnQgQ2l0eQk6CTEJOgkyMTIwMDAwCitUYXNoa2VudCBbVGFzaGtlbnQgT2JsYXN0XSAJOgkxCToJMjg2NjgwMAorS2FyYWthbHBhayA6IDEgOiAxMzQzMDAwCitLYXNoa2FkYXJ5YSA6IDEgOiAxODEyMDAwCitLaG9yZXptIDogMSAgOiAxMTM1MDAwCitTdXJraGFuZGFyeWEgOiAxIDogMTQzNzAwMAorU3lyZGFyeWEgOiAxIDogNjAwMDAwCisKKworCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9Vbml0ZWQgU3RhdGVzX0FSRUEudHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvVW5pdGVkIFN0YXRlc19BUkVBLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMzZjMDk4Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvVW5pdGVkIFN0YXRlc19BUkVBLnR4dApAQCAtMCwwICsxLDUzIEBACitVbml0ZWQgU3RhdGVzIDogMCA6IDk2MzE0MjAgCitBbGFiYW1hCToJMQk6CTUyNDE5LjAyCitBbGFza2EJOgkxCToJNjYzMjY3LjI2CitBcml6b25hCToJMQk6CTExMzk5OC4zMAorQXJrYW5zYXMJOgkxCToJNTMxNzguNjIKK0NhbGlmb3JuaWEJOgkxCToJMTYzNjk1LjU3CitDb2xvcmFkbwk6CTEJOgkxMDQwOTMuNTcKK0Nvbm5lY3RpY3V0CToJMQk6CTU1NDMuMzMKK0RlbGF3YXJlCToJMQk6CTI0ODkuMjcKK0Rpc3RyaWN0IG9mIENvbHVtYmlhCToJMQk6CTY4LjM0CitGbG9yaWRhCToJMQk6CTY1NzU0LjU5CitHZW9yZ2lhCToJMQk6CTU5NDI0Ljc3CitIYXdhaWkJOgkxCToJMTA5MzAuOTgKK0lkYWhvCToJMQk6CTgzNTcwLjA4CitJbGxpbm9pcwk6CTEJOgk1NzkxNC4zOAorSW5kaWFuYQk6CTEJOgkzNjQxNy43MworSW93YQk6CTEJOgk1NjI3MS41NQorS2Fuc2FzCToJMQk6CTgyMjc2Ljg0CitLZW50dWNreQk6CTEJOgk0MDQwOS4wMgorTG91aXNpYW5hCToJMQk6CTUxODM5LjcwCitNYWluZQk6CTEJOgkzNTM4NC42NQorTWFyeWxhbmQJOgkxCToJMTI0MDYuNjgKK01hc3NhY2h1c2V0dHMJOgkxCToJMTA1NTQuNTcKK01pY2hpZ2FuCToJMQk6CTk2NzE2LjExCitNaW5uZXNvdGEJOgkxCToJODY5MzguODcKK01pc3Npc3NpcHBpCToJMQk6CTQ4NDMwLjE5CitNaXNzb3VyaQk6CTEJOgk2OTcwNC4zMQorTW9udGFuYQk6CTEJOgkxNDcwNDIuNDAKK05lYnJhc2thCToJMQk6CTc3MzUzLjczCitOZXZhZGEJOgkxCToJMTEwNTYwLjcxCitOZXcgSGFtcHNoaXJlCToJMQk6CTkzNDkuOTQKK05ldyBKZXJzZXkJOgkxCToJODcyMS4zMAorTmV3IE1leGljbwk6CTEJOgkxMjE1ODkuNDgKK05ldyBZb3JrCToJMQk6CTU0NTU2LjAwCitOb3J0aCBDYXJvbGluYQk6CTEJOgk1MzgxOC41MQorTm9ydGggRGFrb3RhCToJMQk6CTcwNjk5Ljc5CitPaGlvCToJMQk6CTQ0ODI0LjkwCitPa2xhaG9tYQk6CTEJOgk2OTg5OC4xOQorT3JlZ29uCToJMQk6CTk4MzgwLjY0CitQZW5uc3lsdmFuaWEJOgkxCToJNDYwNTUuMjQKK1Job2RlIElzbGFuZAk6CTEJOgkxNTQ1LjA1CitTb3V0aCBDYXJvbGluYQk6CTEJOgkzMjAyMC4yMAorU291dGggRGFrb3RhCToJMQk6CTc3MTE2LjQ5CitUZW5uZXNzZWUJOgkxCToJNDIxNDMuMjcKK1RleGFzCToJMQk6CTI2ODU4MC44MgorVXRhaAk6CTEJOgk4NDg5OC44MworVmVybW9udAk6CTEJOgk5NjE0LjI2CitWaXJnaW5pYQk6CTEJOgk0Mjc3NC4yMAorV2FzaGluZ3Rvbgk6CTEJOgk3MTI5OS42NAorV2VzdCBWaXJnaW5pYQk6CTEJOgkyNDIyOS43NgorV2lzY29uc2luCToJMQk6CTY1NDk3LjgyCitXeW9taW5nCToJMQk6CTk3ODEzLjU2CitQdWVydG8gUmljbwk6CTEJOgk1MzI0LjUwCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9Vbml0ZWQgU3RhdGVzX1BPUFVMQVRJT04udHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvVW5pdGVkIFN0YXRlc19QT1BVTEFUSU9OLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYjUxOTYwCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvVW5pdGVkIFN0YXRlc19QT1BVTEFUSU9OLnR4dApAQCAtMCwwICsxLDUzIEBACitVbml0ZWQgU3RhdGVzCToJMAk6CTI4MTQyMTkwNgorICAgIENhbGlmb3JuaWEJOgkxCToJMzM4NzE2NDgKKyAgICBUZXhhcwk6CTEJOgkyMDg1MTgyMAorICAgIE5ldyBZb3JrCToJMQk6CTE4OTc2NDU3CisgICAgRmxvcmlkYQk6CTEJOgkxNTk4MjM3OAorICAgIElsbGlub2lzCToJMQk6CTEyNDE5MjkzCisgICAgUGVubnN5bHZhbmlhCToJMQk6CTEyMjgxMDU0CisgICAgT2hpbwk6CTEJOgkxMTM1MzE0MAorICAgIE1pY2hpZ2FuCToJMQk6CTk5Mzg0NDQKKyAgICBOZXcgSmVyc2V5CToJMQk6CTg0MTQzNTAKKyAgICBHZW9yZ2lhCToJMQk6CTgxODY0NTMKKyAgICBOb3J0aCBDYXJvbGluYQk6CTEJOgk4MDQ5MzEzCisgICAgVmlyZ2luaWEJOgkxCToJNzA3ODUxNQorICAgIE1hc3NhY2h1c2V0dHMJOgkxCToJNjM0OTA5NworICAgIEluZGlhbmEJOgkxCToJNjA4MDQ4NQorICAgIFdhc2hpbmd0b24JOgkxCToJNTg5NDEyMQorICAgIFRlbm5lc3NlZQk6CTEJOgk1Njg5MjgzCisgICAgTWlzc291cmkJOgkxCToJNTU5NTIxMQorICAgIFdpc2NvbnNpbgk6CTEJOgk1MzYzNjc1CisgICAgTWFyeWxhbmQJOgkxCToJNTI5NjQ4NgorICAgIEFyaXpvbmEJOgkxCToJNTEzMDYzMgorICAgIE1pbm5lc290YQk6CTEJOgk0OTE5NDc5CisgICAgTG91aXNpYW5hCToJMQk6CTQ0Njg5NzYKKyAgICBBbGFiYW1hCToJMQk6CTQ0NDcxMDAKKyAgICBDb2xvcmFkbwk6CTEJOgk0MzAxMjYxCisgICAgS2VudHVja3kJOgkxCToJNDA0MTc2OQorICAgIFNvdXRoIENhcm9saW5hCToJMQk6CTQwMTIwMTIKKyAgICBPa2xhaG9tYQk6CTEJOgkzNDUwNjU0CisgICAgT3JlZ29uCToJMQk6CTM0MjEzOTkKKyAgICBDb25uZWN0aWN1dAk6CTEJOgkzNDA1NTY1CisgICAgSW93YQk6CTEJOgkyOTI2MzI0CisgICAgTWlzc2lzc2lwcGkJOgkxCToJMjg0NDY1OAorICAgIEthbnNhcwk6CTEJOgkyNjg4NDE4CisgICAgQXJrYW5zYXMJOgkxCToJMjY3MzQwMAorICAgIFV0YWgJOgkxCToJMjIzMzE2OQorICAgIE5ldmFkYQk6CTEJOgkxOTk4MjU3CisgICAgTmV3IE1leGljbwk6CTEJOgkxODE5MDQ2CisgICAgV2VzdCBWaXJnaW5pYQk6CTEJOgkxODA4MzQ0CisgICAgTmVicmFza2EJOgkxCToJMTcxMTI2MworICAgIElkYWhvCToJMQk6CTEyOTM5NTMKKyAgICBNYWluZQk6CTEJOgkxMjc0OTIzCisgICAgTmV3IEhhbXBzaGlyZQk6CTEJOgkxMjM1Nzg2CisgICAgSGF3YWlpCToJMQk6CTEyMTE1MzcKKyAgICBSaG9kZSBJc2xhbmQJOgkxCToJMTA0ODMxOQorICAgIE1vbnRhbmEJOgkxCToJOTAyMTk1CisgICAgRGVsYXdhcmUJOgkxCToJNzgzNjAwCisgICAgU291dGggRGFrb3RhCToJMQk6CTc1NDg0NAorICAgIE5vcnRoIERha290YQk6CTEJOgk2NDIyMDAKKyAgICBBbGFza2EJOgkxCToJNjI2OTMyCisgICAgVmVybW9udAk6CTEJOgk2MDg4MjcKKyAgICBEaXN0cmljdCBvZiBDb2x1bWJpYQk6CTEJOgk1NzIwNTkKKyAgICBXeW9taW5nCToJMQk6CTQ5Mzc4MgorCVB1ZXJ0byBSaWNvIDogMSA6IDM5MTIwNTQKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9WRU5FWlVFTEFfQVJFQS50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9WRU5FWlVFTEFfQVJFQS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzIxYWI1MgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL1ZFTkVaVUVMQV9BUkVBLnR4dApAQCAtMCwwICsxLDI3IEBACitWZW5lenVlbGEJOgkwCToJOTEyMDUwCitBbWF6b25hcyAgIAk6CTEJOgkxODAxNDUKK0Fuem9hdGVndWkgCToJMQk6CTQzMzAwCitBcHVyZSAJOgkxCToJNzY1MDAKK0FyYWd1YSAJOgkxCToJNzAxNAorQmFyaW5hcyAJOgkxCToJMzUyMDAKK0JvbGl2YXIgCToJMQk6CTIzODAwMAorQ2FyYWJvYm8gCToJMQk6CTQ2NTAKK0NvamVkZXMgCToJMQk6CTE0ODAwCitEZWx0YSBBbWFjdXJvIAk6CTEJOgk0MDIwMAorRmFsY29uIAk6CTEJOgkyNDgwMAorR3VhcmljbyAJOgkxCToJNjQ5ODYKK0xhcmEgCToJMQk6CTE5ODAwCitNZXJpZGEgCToJMQk6CTExMzAwCitNaXJhbmRhIAk6CTEJOgk3OTUwCitNb25hZ2FzIAk6CTEJOgkyODkwMAorTnVldmEgRXNwYXJ0YSAJOgkxCToJMTE1MAorUG9ydHVndWVzYSAJOgkxCToJMTUyMDAKK1N1Y3JlIAk6CTEJOgkxMTgwMAorVGFjaGlyYSAJOgkxCToJMTExMDAKK1RydWppbGxvIAk6CTEJOgk3NDAwCitWYXJnYXMgCToJMQk6CTE0OTcKK1lhcmFjdXkgCToJMQk6CTcxMDAKK1p1bGlhIAk6CTEJOgk2MzEwMAorRGlzdHJpdG8gRmVkZXJhbCAJOgkxCToJNDMzCitEZXBlbmRlbmNpYXMgRmVkZXJhbGVzIChERikgCToJMQk6CTEyMAorCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9WRU5FWlVFTEFfUE9QVUxBVElPTi50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9WRU5FWlVFTEFfUE9QVUxBVElPTi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODFlNTRkMwotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL1ZFTkVaVUVMQV9QT1BVTEFUSU9OLnR4dApAQCAtMCwwICsxLDI2IEBACitWZW5lenVlbGEJOgkwCToJMjU3MzA0MzUKK0FtYXpvbmFzICAgCToJMQk6CTcwNDY0CitBbnpvYXRlZ3VpIAk6CTEJOgkxMjIyMjI1CitBcHVyZSAJOgkxCToJMzc3NzU2CitBcmFndWEgCToJMQk6CTE0NDk2MTYKK0JhcmluYXMgCToJMQk6CTYyNDUwOAorQm9saXZhciAJOgkxCToJMTIxNDg0NgorQ2FyYWJvYm8gCToJMQk6CTE5MzIxNjgKK0NvamVkZXMgCToJMQk6CTI1MzEwNQorRGVsdGEgQW1hY3VybyAJOgkxCToJOTc5ODcKK0ZhbGNvbiAJOgkxCToJNzYzMTg4CitHdWFyaWNvIAk6CTEJOgk2MjcwODYKK0xhcmEgCToJMQk6CTE1NTY0MTUKK01lcmlkYSAJOgkxCToJNzE1MjY4CitNaXJhbmRhIAk6CTEJOgkyMzMwODcyCitNb25hZ2FzIAk6CTEJOgk3MTI2MjYKK051ZXZhIEVzcGFydGEgCToJMQk6CTM3Mzg1MQorUG9ydHVndWVzYSAJOgkxCToJNzI1NzQwCitTdWNyZSAJOgkxCToJNzg2NDgzCitUYWNoaXJhIAk6CTEJOgk5OTI2NjkKK1RydWppbGxvIAk6CTEJOgk2MDg1NjMKK1ZhcmdhcyAJOgkxCToJMjk4MTA5CitZYXJhY3V5IAk6CTEJOgk0OTkwNDkKK1p1bGlhIAk6CTEJOgkyOTgzNjc5CitEaXN0cml0byBGZWRlcmFsIAk6CTEJOgkxODM2Mjg2CitEZXBlbmRlbmNpYXMgRmVkZXJhbGVzIChERikgCToJMQk6CTE2NTEKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL1ZJRVROQU1fQVJFQS50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9WSUVUTkFNX0FSRUEudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVlNDI1YmQKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9WSUVUTkFNX0FSRUEudHh0CkBAIC0wLDAgKzEsNzUgQEAKK1ZpZXRuYW0JOgkwCToJMzI5NTYwCitOb3J0aEVhc3QJOgkxCToJNjM2MjkuODAKK0FuIEdpYW5nIFtCYWMgR2lhbmcgdG93bl0gCToJMQk6CTM4MjIuNzAKK0JhYyBLYW4gdG93biAJOgkxCToJNDg1Ny4yMAorQ2FvIEJhbmcgW0NhbyBCYW5nIHRvd25dIAk6CTEJOgk2NjkwLjcwCitIYSBHaWFuZyBbSGEgR2lhbmcgdG93bl0gCToJMQk6CTc4ODQuMzAKK0xhbmcgU29uIFtMYW5nIFNvbiB0b3duXSAJOgkxCToJODMwNS4yMAorTGFvIENhaSBbTGFvIENhaSBjaXR5XSAJOgkxCToJNjM1Ny4wMAorVmlldCBUcmkgY2l0eSAJOgkxCToJMzUxOS42MAorUXVhbmcgTmluaCBbSGEgTG9uZyBjaXR5XSAJOgkxCToJNTg5OS42MAorVGhhaSBOZ3V5ZW4gY2l0eSAJOgkxCToJMzU0Mi42MAorVHV5ZW4gUXVhbmcgW1R1eWVuIFF1YW5nIHRvd25dIAk6CTEJOgk1ODY4LjAwCitZZW4gQmFpIFtZZW4gQmFpIGNpdHldIAk6CTEJOgk2ODgyLjkwCitOb3J0aFdlc3QJOgkxCToJMzczMzYuOTAKK0RpZW4gQmllbiBQaHUgQ2l0eSAJOgkxCToJOTU2MC4wMAorSG9hIEJpbmggW0hvYSBCaW5oIHRvd25dIAk6CTEJOgk0NjYyLjUwCitQaG9uZyBUaG8gdG93biAJOgkxCToJOTA1OS40MAorU29uIExhIFtTb24gTGEgdG93bl0gCToJMQk6CTE0MDU1LjAwCitSZWQgUml2ZXIgRGVsdGEJOgkxCToJMTQ4MTIuNTAKK0JhYyBOaW5oIHRvd24gW0JhYyBUaGFpXQk6CTEJOgk4MDcuNgorTmFtIEhhIFtQaHUgTHkgdG93bl0gCToJMQk6CTg1Mi4yCitIYSBOb2kgW0hhbm9pIENpdHldIAk6CTEJOgk5MjEKK0hhIFRheSBbSGEgRG9uZyB0b3duXSAJOgkxCToJMjE5Mi4xMAorSGFpIER1b25nIGNpdHkgW0RvbmcgVGhhcF0JOgkxCToJMTY0OC40MAorSGFpIFBob25nIFtIYWkgUGhvbmcgY2l0eV0gCToJMQk6CTE1MjYuMzAKK0h1bmcgWWVuIHRvd24gW0hhaSBIdW5nXSAJOgkxCToJOTIzLjEKK05hbSBEaW5oIGNpdHkgIFtMYWkgQ2hhdV0JOgkxCToJMTY0MS4zMAorTmluaCBCaW5oIFtOaW5oIEJpbmggdG93bl0gCToJMQk6CTEzODMuNzAKK1RoYWkgQmluaCBbVGhhaSBCaW5oIHRvd25dIAk6CTEJOgkxNTQ1LjQwCitWaW5oIFBodSBbVmluaCBZZW4gdG93bl0gCToJMQk6CTEzNzEuNDAKK05vcnRoIENlbnRyYWwgQ29hc3QJOgkxCToJNTE1MTAuODAKK0hhIFRpbmggW0hhIFRpbmggdG93bl0gCToJMQk6CTYwNTUuNjAKK05naGUgQW4gW1ZpbmggY2l0eV0gCToJMQk6CTE2NDg3LjQwCitRdWFuZyBCaW5oIFtEb25nIEhvaSB0b3duXSAJOgkxCToJODA1MS44MAorUXVhbmcgVHJpIFtEb25nIEhhIHRvd25dIAk6CTEJOgk0NzQ1LjcwCitUaGFuaCBIb2EgW1RoYW5oIEhvYSBjaXR5XSAJOgkxCToJMTExMTYuMzAKK1RodWEgVGhpZW4tSHVlIFtIdekgQ2l0eV0gCToJMQk6CTUwNTQuMDAKK1NvdXRoIENlbnRyYWwgQ29hc3QJOgkxCToJMzMwNjkuMDAKK0JpbmggRGluaCBbUXV5IE5ob24gY2l0eV0gCToJMQk6CTYwMjUuMDAKK0RhIE5hbmcgQ2l0eSAJOgkxCToJMTI1NS41MAorS2hhbmggSG9hIFtOaGEgVHJhbmcgQ2l0eV0gCToJMQk6CTUxOTguMjAKK1BodSBZZW4gW1R1eSBIb2EgdG93bl0gCToJMQk6CTUwNDUuMzAKK1F1YW5nIE5hbS1EYSBOYW5nIFtUYW0gS3kgdG93bl0gCToJMQk6CTEwNDA3LjQwCitRdWFuZyBOZ2FpIFtRdWFuZyBOZ2FpIHRvd25dIAk6CTEJOgk1MTM3LjYwCitDZW50cmFsIEhpZ2hsYW5kcwk6CTEJOgk1NDQ3My43MAorRGFjIExhYyBbQnVvbiBNYSBUaHVvdCBjaXR5XSAJOgkxCToJMTMwODUuMDAKK0dpYSBOZ2hpYSB0b3duIFtIYSBCYWNdCToJMQk6CTY1MTQuNTAKK0dpYSBMYWkgW1BsZWkgS3UgY2l0eV0gCToJMQk6CTE1NDk0LjkwCitLb24gVHVtIFtLb24gVHVtIHRvd25dcyAJOgkxCToJOTYxNC41MAorTGFtIERvbmcgW0RhIExhdCBjaXR5XSAJOgkxCToJOTc2NC44MAorTm9ydGhFYXN0IFNvdXRoCToJMQk6CTM0NzQzLjEwCitCYSBSaWEgLSBWdW5nIFRhdSBbVnVuZyBUYXUgY2l0eV0gCToJMQk6CTE5ODIuMjAKK1RodSBEYXUgTW90IHRvd24gW1NvbmcgQmVdCToJMQk6CTI2OTUuNTAKK0RvbmcgTmFpIFtEb25nIFhvYWkgdG93bl0gCToJMQk6CTY4NTcuMzAKK0JpbmggVGh1YW4gW1BoYW4gVGhpZXQgY2l0eV0gCToJMQk6CTc4MjguNDAKK0JpZW4gSG9hIGNpdHkgW01pbmggSGFpXQk6CTEJOgk1ODk0LjgwCitIbyBDaGkgTWluaCBDaXR5IAk6CTEJOgkyMDk1LjIwCitOaW5oIFRodWFuIFtQaGFuIFJhbmctVGhhcCBDaGFtIHRvd25dIAk6CTEJOgkzMzYwLjEwCitUYXkgTmluaCB0b3duIAk6CTEJOgk0MDI5LjYwCitNZWtvbmcgUml2ZXIgRGVsdGEJOgkxCToJMzk3MzguNzAKK0xvbmcgWHV5ZW4gY2l0eSAJOgkxCToJMzQwNi4yMAorQmFjIExpZXUgdG93biAJOgkxCToJMjUyNS43MCAKK0JlbiBUcmUgW0JlbiBUcmUgdG93bl0gCToJMQk6CTIzMjEuNjAKK0NhIE1hdSB0b3duIAk6CTEJOgk1MjAxLjUwCitDYW4gVGhvIFtDYW4gVGhvIGNpdHldIAk6CTEJOgkxMzkwLjAwCitTYSBEZWMgdG93biAJOgkxCToJMzI0Ni4xMAorVmkgVGhhbmggVG93biAJOgkxCToJMTYwOC4wMAorS2llbiBHaWFuZyBbUmFjaCBHaWEgdG93bl0gCToJMQk6CTYyNjguMjAKK0xvbmcgQW4gW1RhbiBBbiB0b3duXSAJOgkxCToJNDQ5MS4yMAorU29jIFRyYW5nIFtTb2MgVHJhbmcgdG93bl0gCToJMQk6CTMyMjMuMzAKK1RpZW4gR2lhbmcgW015IFRobyBjaXR5XSAJOgkxCToJMjM2Ni42MAorVHJhIFZpbmggW1RyYSBWaW5oIHRvd25dIAk6CTEJOgkyMjE1LjEwCitWaW5oIExvbmcgW1ZpbmggTG9uZyB0b3duXSAJOgkxCToJMTQ3NS4yMAorCisKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL1ZJRVROQU1fUE9QVUxBVElPTi50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9WSUVUTkFNX1BPUFVMQVRJT04udHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkzMzJmZDUKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9WSUVUTkFNX1BPUFVMQVRJT04udHh0CkBAIC0wLDAgKzEsNzYgQEAKK1ZpZXRuYW0JOgkwCToJODQ0MDI5NjYKK05vcnRoRWFzdAk6CTEJOgk5MjQ0ODAwCitBbiBHaWFuZyBbQmFjIEdpYW5nIHRvd25dIAk6CTEJOgkxNTYzNTAwCitCYWMgS2FuIHRvd24gCToJMQk6CTI5NjIwMAorQ2FvIEJhbmcgW0NhbyBCYW5nIHRvd25dIAk6CTEJOgk1MDgyMDAKK0hhIEdpYW5nIFtIYSBHaWFuZyB0b3duXSAJOgkxCToJNjYwNzAwCitMYW5nIFNvbiBbTGFuZyBTb24gdG93bl0gCToJMQk6CTczMTcwMAorTGFvIENhaSBbTGFvIENhaSBjaXR5XSAJOgkxCToJNTY1NzAwCitWaWV0IFRyaSBjaXR5IAk6CTEJOgkxMzE0NTAwCitRdWFuZyBOaW5oIFtIYSBMb25nIGNpdHldIAk6CTEJOgkxMDY3MzAwCitUaGFpIE5ndXllbiBjaXR5IAk6CTEJOgkxMDk1NDAwCitUdXllbiBRdWFuZyBbVHV5ZW4gUXVhbmcgdG93bl0gCToJMQk6CTcxODEwMAorWWVuIEJhaSBbWWVuIEJhaSBjaXR5XSAJOgkxCToJNzIzNTAwCitOb3J0aFdlc3QJOgkxCToJMjUyNDkwMAorRGllbiBCaWVuIFBodSBDaXR5IAk6CTEJOgk0NDA4MDAKK0hvYSBCaW5oIFtIb2EgQmluaCB0b3duXSAJOgkxCToJODAzMzAwCitQaG9uZyBUaG8gdG93biAJOgkxCToJMzA4MDAwCitTb24gTGEgW1NvbiBMYSB0b3duXSAJOgkxCToJOTcyODAwCitSZWQgUml2ZXIgRGVsdGEJOgkxCToJMTc4MzYwMDAKK0JhYyBOaW5oIHRvd24gW0JhYyBUaGFpXQk6CTEJOgk5ODc0MDAKK05hbSBIYSBbUGh1IEx5IHRvd25dIAk6CTEJOgk4MjAxMDAKK0hhIE5vaSBbSGFub2kgQ2l0eV0gCToJMQk6CTMwODI4MDAKK0hhIFRheSBbSGEgRG9uZyB0b3duXSAJOgkxCToJMjUwMDAwMAorSGFpIER1b25nIGNpdHkgW0RvbmcgVGhhcF0gCToJMQk6CTE2OTgzMDAKK0hhaSBQaG9uZyBbSGFpIFBob25nIGNpdHldIAk6CTEJOgkxNzcwODAwCitIdW5nIFllbiB0b3duIFtIYWkgSHVuZ10JOgkxCToJMTEyMDMwMAorTmFtIERpbmggY2l0eSBbTGFpIENoYXVdCToJMQk6CTE5NDcxMDAKK05pbmggQmluaCBbTmluaCBCaW5oIHRvd25dIAk6CTEJOgk5MTE2MDAKK1RoYWkgQmluaCBbVGhhaSBCaW5oIHRvd25dIAk6CTEJOgkxODQyODAwCitWaW5oIFBodSBbVmluaCBZZW4gdG93bl0gCToJMQk6CTExNTQ4MDAKK05vcnRoIENlbnRyYWwgQ29hc3QJOgkxCToJMTA1MDQ1MDAKK0hhIFRpbmggW0hhIFRpbmggdG93bl0gCToJMQk6CTEyODY3MDAKK05naGUgQW4gW1ZpbmggY2l0eV0gCToJMQk6CTMwMDMyMDAKK1F1YW5nIEJpbmggW0RvbmcgSG9pIHRvd25dIAk6CTEJOgk4MzE2MDAKK1F1YW5nIFRyaSBbRG9uZyBIYSB0b3duXSAJOgkxCToJNjE2NjAwCitUaGFuaCBIb2EgW1RoYW5oIEhvYSBjaXR5XSAJOgkxCToJMzY0NjYwMAorVGh1YSBUaGllbi1IdWUgW0h16SBDaXR5XSAJOgkxCToJMTExOTgwMAorU291dGggQ2VudHJhbCBDb2FzdAk6CTEJOgk2OTgxNzAwCitCaW5oIERpbmggW1F1eSBOaG9uIGNpdHldIAk6CTEJOgkxNTQ1MzAwCitEYSBOYW5nIENpdHkgCToJMQk6CTc2NDUwMAorS2hhbmggSG9hIFtOaGEgVHJhbmcgQ2l0eV0gCToJMQk6CTExMTEzMDAKK1BodSBZZW4gW1R1eSBIb2EgdG93bl0gCToJMQk6CTg0ODkwMAorUXVhbmcgTmFtLURhIE5hbmcgW1RhbSBLeSB0b3duXSAJOgkxCToJMTQ1MjMwMAorUXVhbmcgTmdhaSBbUXVhbmcgTmdhaSB0b3duXSAJOgkxCToJMTI1OTQwMAorQ2VudHJhbCBIaWdobGFuZHMJOgkxCToJNDY3NDIwMAorRGFjIExhYyBbQnVvbiBNYSBUaHVvdCBjaXR5XSAJOgkxCToJMTY4NzcwMAorR2lhIE5naGlhIHRvd24gW0hhIEJhY10JOgkxCToJMzg1ODAwCitHaWEgTGFpIFtQbGVpIEt1IGNpdHldIAk6CTEJOgkxMDk1OTAwCitLb24gVHVtIFtLb24gVHVtIHRvd25dIAk6CTEJOgkzNjYxMDAKK0xhbSBEb25nIFtEYSBMYXQgY2l0eV0gCToJMQk6CTExMzg3MDAKK05vcnRoRWFzdCBTb3V0aAk6CTEJOgkxMzE5MDEwMAorQmEgUmlhIC0gVnVuZyBUYXUgW1Z1bmcgVGF1IGNpdHldIAk6CTEJOgk4OTc2MDAKK1RodSBEYXUgTW90IHRvd24gIFtTb25nIEJlXQk6CTEJOgk4ODMyMDAKK0RvbmcgTmFpIFtEb25nIFhvYWkgdG93bl0gCToJMQk6CTc4MzYwMAorQmluaCBUaHVhbiBbUGhhbiBUaGlldCBjaXR5XSAJOgkxCToJMTEzNTkwMAorQmllbiBIb2EgY2l0eSBbTWluaCBIYWldCToJMQk6CTIxNzQ2MDAKK0hvIENoaSBNaW5oIENpdHkgCToJMQk6CTU3MzA3MDAKK05pbmggVGh1YW4gW1BoYW4gUmFuZy1UaGFwIENoYW0gdG93bl0gCToJMQk6CTU1NDcwMAorVGF5IE5pbmggdG93biAJOgkxCToJMTAyOTgwMAorTWVrb25nIFJpdmVyIERlbHRhCToJMQk6CTE3MDc2MTAwCitMb25nIFh1eWVuIGNpdHkgCToJMQk6CTIxNzAxMDAKK0JhYyBMaWV1IHRvd24gCToJMQk6CTc4NjIwMAorQmVuIFRyZSBbQmVuIFRyZSB0b3duXSAJOgkxCToJMTM0NTYwMAorQ2EgTWF1IHRvd24gCToJMQk6CTEyMDA4MDAKK0NhbiBUaG8gW0NhbiBUaG8gY2l0eV0gCToJMQk6CTExMjI1MDAKK1NhIERlYyB0b3duIAk6CTEJOgkxNjM5NDAwCitWaSBUaGFuaCBUb3duIAk6CTEJOgk3ODEwMDAKK0tpZW4gR2lhbmcgW1JhY2ggR2lhIHRvd25dIAk6CTEJOgkxNjMwMzAwCitMb25nIEFuIFtUYW4gQW4gdG93bl0gCToJMQk6CTE0MDA1MDAKK1NvYyBUcmFuZyBbU29jIFRyYW5nIHRvd25dIAk6CTEJOgkxMjU3NDAwCitUaWVuIEdpYW5nIFtNeSBUaG8gY2l0eV0gCToJMQk6CTE2ODE2MDAKK1RyYSBWaW5oIFtUcmEgVmluaCB0b3duXSAJOgkxCToJMTAxNTgwMAorVmluaCBMb25nIFtWaW5oIExvbmcgdG93bl0gCToJMQk6CTEwNDQ5MDAKKworCisKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL1lFTUVOX0FSRUEudHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvWUVNRU5fQVJFQS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTliMGJlMAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL1lFTUVOX0FSRUEudHh0CkBAIC0wLDAgKzEsMjEgQEAKK1llbWVuCToJMAk6CTUyNzk3MAorTXVoYWZhemF0IEFieWEtbiAgCToJMQk6CTI0MTMxCitGb3JtZXIgU291dGggWWVtZW4gW011aGFmYXphdCAnQWRhbl0gCToJMQk6CTcwOTkKK011aGFmYXphdCBBZD8gRD9hLWxpJyAJOgkxCToJMAorTXVoYWZhemF0IGFsIEJheWQ/YS0nIAk6CTEJOgkxMDcxMQorTXVoYWZhemF0IGFsIEg/dWRheWRhaCAJOgkxCToJMTY2NDYKK011aGFmYXphdCBhbCBKYXdmIAk6CTEJOgkxMzE3NQorTXVoYWZhemF0IGFsIE1haHJhaCAJOgkxCToJOTgyNDkKK011aGFmYXphdCBhbCBNYWg/d2ktdCAJOgkxCToJMjUwMQorTXVoYWZhemF0ICdBbXJhLW4gCToJMQk6CTAKK0NhcGl0YWwgU2VjcmV0YXJpYXQgKFNhbidhJyBDaXR5KSAJOgkxCToJMjQ3CitNdWhhZmF6YXQgRGhhbWEtciAJOgkxCToJODc0NQorTXVoYWZhemF0IEg/YWQ/cmFtYXd0IAk6CTEJOgkxNDgxNzgKK011aGFmYXphdCBIP2FqamFoIAk6CTEJOgkxMDY3NworTXVoYWZhemF0IEliYiAJOgkxCToJNzYzMgorTXVoYWZhemF0IExhaD9paiAJOgkxCToJMTQ4MzYKK011aGFmYXphdCBNYSdyaWIgCToJMQk6CTEzNDY2CitNdWhhZmF6YXQgUz9hLZFkYWggCToJMQk6CTI5NjE3CitGb3JtZXIgTm9ydGggWWVtZW4gW011aGFmYXphdCBTP2FukWEtJ10gCToJMQk6CTI4OTc3CitNdWhhZmF6YXQgU2hhYndhaCAJOgkxCToJNzg5OTUKK011aGFmYXphdCBUYS2RaXp6IAk6CTEJOgkxNDE5NApkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvWUVNRU5fUE9QVUxBVElPTi50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9ZRU1FTl9QT1BVTEFUSU9OLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYTdjYzgwCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvWUVNRU5fUE9QVUxBVElPTi50eHQKQEAgLTAsMCArMSwyMSBAQAorWWVtZW4JOgkwCToJMjE0NTYxODgKK011aGFmYXphdCBBYnlhLW4gIAk6CTEJOgk0MzI1MjkKK0Zvcm1lciBTb3V0aCBZZW1lbiBbTXVoYWZhemF0ICdBZGFuXSAJOgkxCToJNTE5ODIyCitNdWhhZmF6YXQgQWQ/IEQ/YS1saScgCToJMQk6CTQxNTA2NgorTXVoYWZhemF0IGFsIEJheWQ/YS0nIAk6CTEJOgk1Nzk5NTUKK011aGFmYXphdCBhbCBIP3VkYXlkYWggCToJMQk6CTIwMDQwNDkKK011aGFmYXphdCBhbCBKYXdmIAk6CTEJOgk0NDcwMjAKK011aGFmYXphdCBhbCBNYWhyYWggCToJMQk6CTcyNTU1CitNdWhhZmF6YXQgYWwgTWFoP3dpLXQgCToJMQk6CTQ2NDE1OAorTXVoYWZhemF0ICdBbXJhLW4gCToJMQk6CTk5MzcyMgorQ2FwaXRhbCBTZWNyZXRhcmlhdCAoU2FuJ2EnIENpdHkpIAk6CTEJOgkxNTkwNjI0CitNdWhhZmF6YXQgRGhhbWEtciAJOgkxCToJMTIzNDQyNAorTXVoYWZhemF0IEg/YWQ/cmFtYXd0IAk6CTEJOgk4OTAyNDYKK011aGFmYXphdCBIP2FqamFoIAk6CTEJOgkxNDA0NTU0CitNdWhhZmF6YXQgSWJiIAk6CTEJOgkyMDc0MTM5CitNdWhhZmF6YXQgTGFoP2lqIAk6CTEJOgk2NjQwNzAKK011aGFmYXphdCBNYSdyaWIgCToJMQk6CTIzMzY5NQorTXVoYWZhemF0IFM/YS2RZGFoIAk6CTEJOgk2MTQ2ODIKK0Zvcm1lciBOb3J0aCBZZW1lbiBbTXVoYWZhemF0IFM/YW6RYS0nXSAJOgkxCToJMTM5NDk0NworTXVoYWZhemF0IFNoYWJ3YWggCToJMQk6CTQ2OTI1NgorTXVoYWZhemF0IFRhLZFpenogCToJMQk6CTIzNjM0ODYKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL1lVR09TTEFWSUFfQVJFQS50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9ZVUdPU0xBVklBX0FSRUEudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFhNGYzNjMKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9ZVUdPU0xBVklBX0FSRUEudHh0CkBAIC0wLDAgKzEsNSBAQAorIFZvanZvZGluYSA6IDEgOiAyMTUwNi4wCisgU3JiaWphIDogMSA6IDU1OTY4LjAKKyBDcm5hIEdvcmEgOiAxIDogMTM4MTIuMAorIEtvc292byA6IDEgOiAxMDg4Ny4wCisgTWFrZWRvbmlqYSA6IDEgOiAyNTcxMy4wCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9ZVUdPU0xBVklBX1BPUFVMQVRJT04udHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvWVVHT1NMQVZJQV9QT1BVTEFUSU9OLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZWYwOTZhCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvWVVHT1NMQVZJQV9QT1BVTEFUSU9OLnR4dApAQCAtMCwwICsxLDUgQEAKKyBWb2p2b2RpbmEgOiAxIDogMjAzMTk5MgorIFNyYmlqYSA6IDEgOiAxNTc2MTI0CisgQ3JuYSBHb3JhIDogMSA6IDYzODQ2MQorIEtvc292byA6IDEgOiAyMTAwMDAwCisgTWFrZWRvbmlqYSA6IDEgOiA5ODMyNTgxCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9aQUlSRV9BUkVBLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL1pBSVJFX0FSRUEudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM2NzlhNTgKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9aQUlSRV9BUkVBLnR4dApAQCAtMCwwICsxIEBACitaYWlyZQk6CTAJOgkyMzQ1NDEwCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9aQUlSRV9QT1BVTEFUSU9OLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL1pBSVJFX1BPUFVMQVRJT04udHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFlNWMyMGQKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9aQUlSRV9QT1BVTEFUSU9OLnR4dApAQCAtMCwwICsxIEBACitaYWlyZQk6CTAJOgk0NjQ5ODUzOSAKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL1pBTUJJQV9BUkVBLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL1pBTUJJQV9BUkVBLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MDk2YzY0Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvWkFNQklBX0FSRUEudHh0CkBAIC0wLDAgKzEsODMgQEAKK1phbWJpYQk6CTAJOgk3NTI2MTQKK0NlbnRyYWwzIFtDZW50cmFsXVtDZW50cmFsIFByb3ZpbmNlXQk6CTEJOgk5NDM5NAorTW9uZ3UgW1dlc3Rlcm40XSBbV2VzdGVybl0gOiAxIDogMTI2Mzg2CitOb3J0aGVybjQgW05vcnRoZXJuXSBbTm9ydGhlcm4gUHJvdmluY2VdCToJMQk6CTE0NzgyNgorQ2hpYm9tYm8gCToJMQk6CTAKK0thYndlIAk6CTEJOgkwCitLYXBpcmkgTXBvc2hpIAk6CTEJOgkwCitNa3VzaGkgCToJMQk6CTAKK011bWJ3YSAJOgkxCToJMAorU2VyZW5qZSAJOgkxCToJMAorTmRvbGEJOgkxCToJMzEzMjgKK0NoaWxpbGFib21id2UgCToJMQk6CTAKK0NoaW5nb2xhIAk6CTEJOgkwCitLYWx1bHVzaGkgCToJMQk6CTAKK0tpdHdlIAk6CTEJOgkwCitMdWFuc2h5YSAJOgkxCToJMAorTHVmd2FueWFtYSAJOgkxCToJMAorTWFzYWl0aSAJOgkxCToJMAorTXBvbmd3ZSAJOgkxCToJMAorTXVmdWxpcmEgCToJMQk6CTAKK05kb2xhIFtDb3BwZXJiZWx0XQk6CTEJOgkzMTMyOAorRWFzdGVybjQgW0Vhc3Rlcm5dIFtFYXN0ZXJuIFByb3ZpbmNlXQk6CTEJOgk2OTEwNgorQ2hhZGl6YSAJOgkxCToJMAorQ2hhbWEgCToJMQk6CTAKK0NoaXBhdGEgCToJMQk6CTAKK0thdGV0ZSAJOgkxCToJMAorTHVuZGF6aSAJOgkxCToJMAorTWFtYndlIAk6CTEJOgkwCitOeWltYmEgCToJMQk6CTAKK1BldGF1a2UgCToJMQk6CTAKK01hbnNhIFtMdWFwdWxhXQk6CTEJOgk1MDU2NworQ2hpZW5naSAJOgkxCToJMAorS2F3YW1id2EgCToJMQk6CTAKK01hbnNhIAk6CTEJOgkwCitNaWxlbmdlIAk6CTEJOgkwCitNd2Vuc2UgCToJMQk6CTAKK05jaGVsZW5nZSAJOgkxCToJMAorU2FtZnlhIAk6CTEJOgkwCitMdXNha2EgCToJMQk6CTIxODk2CitDaG9uZ3dlIAk6CTEJOgkwCitLYWZ1ZSAJOgkxCToJMAorTHVhbmd3YSAJOgkxCToJMAorTHVzYWthIAk6CTEJOgkwCitDaGlsdWJpIAk6CTEJOgkwCitDaGluc2FsaSAJOgkxCToJMAorSXNva2EgCToJMQk6CTAKK0thcHV0YSAJOgkxCToJMAorS2FzYW1hIAk6CTEJOgkwCitMdXdpbmd1IAk6CTEJOgkwCitNYmFsYSAJOgkxCToJMAorTXBpa2EgCToJMQk6CTAKK01wb3Jva29zbyAJOgkxCToJMAorTXB1bHVuZ3UgCToJMQk6CTAKK011bmd3aSAJOgkxCToJMAorTmFrb25kZSAJOgkxCToJMAorTm9ydGggV2VzdGVybgk6CTEJOgkxMjU4MjYKK0NoYXZ1bWEgCToJMQk6CTAKK011ZnVtYndlIChDaGl6ZXJhKSAJOgkxCToJMAorS2Fib21wbyAJOgkxCToJMAorS2FzZW1wYSAJOgkxCToJMAorTXdpbmlsdW5nYSAJOgkxCToJMAorU29sd2V6aSAJOgkxCToJMAorWmFtYmV6aSAJOgkxCToJMAorU291dGhlcm4zIFtTb3V0aGVybl0gW1NvdXRoZXJuIFByb3ZpbmNlXQk6CTEJOgk4NTI4MworQ2hvbWEgCToJMQk6CTAKK0d3ZW1iZSAJOgkxCToJMAorSXRlemhpLXRlemhpIAk6CTEJOgkwCitLYWxvbW8gCToJMQk6CTAKK0thenVuZ3VsYSAJOgkxCToJMAorTGl2aW5nc3RvbmUgCToJMQk6CTAKK01hemFidWthIAk6CQk6CTAKK01vbnplIAk6CTEJOgkwCitOYW13YWxhIAk6CTEJOgkwCitTaWF2b25nYSAJOgkxCToJMAorU2luYXpvbmd3ZSAJOgkxCToJMAorTW9uZ3UJOgkxCToJMTI2Mzg2CitLYWxhYm8gCToJMQk6CTAKK0thb21hIAk6CTEJOgkwCitMdWt1bHUgCToJMQk6CTAKK01vbmd1IAk6CTEJOgkwCitTZW5hbmdhIAk6CTEJOgkwCitTZXNoZWtlIAk6CTEJOgkwCitTaGFuZydvbWJvIAk6CTEJOgkwCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9aQU1CSUFfUE9QVUxBVElPTi50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9aQU1CSUFfUE9QVUxBVElPTi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmRiY2IxYwotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL1pBTUJJQV9QT1BVTEFUSU9OLnR4dApAQCAtMCwwICsxLDgzIEBACitaYW1iaWEJOgkwCToJMTE1MDIwMTAKK0NlbnRyYWwzIFtDZW50cmFsIFByb3ZpbmNlXQk6CTEJOgkxMDEyMjU3CitNb25ndSBbV2VzdGVybjRdIFtXZXN0ZXJuXSA6IDEgOiA3NjUwODggCitDaGlib21ibyAJOgkxCToJMjQxNjEyCitLYWJ3ZSAJOgkxCToJMTc2NzU4CitLYXBpcmkgTXBvc2hpIAk6CTEJOgkxOTQ3NTIKK01rdXNoaSAJOgkxCToJMTA3NDM4CitNdW1id2EgCToJMQk6CTE1ODg2MQorU2VyZW5qZSAJOgkxCToJMTMyODM2CitOZG9sYQk6CTEJOgkxNTgxMjIxCitDaGlsaWxhYm9tYndlIAk6CTEJOgk2NzUzMworQ2hpbmdvbGEgCToJMQk6CTE3MjAyNgorS2FsdWx1c2hpIAk6CTEJOgk3NTgwNgorS2l0d2UgCToJMQk6CTM3NjEyNAorTHVhbnNoeWEgCToJMQk6CTE0NzkwOAorTHVmd2FueWFtYSAJOgkxCToJNjMxODUKK01hc2FpdGkgCToJMQk6CTk1NTgxCitNcG9uZ3dlIAk6CTEJOgk2NDM3MQorTXVmdWxpcmEgCToJMQk6CTE0MzkzMAorTmRvbGEgW0NvcHBlcmJlbHRdCToJMQk6CTM3NDc1NworRWFzdGVybjQgW0Vhc3Rlcm4gUHJvdmluY2VdCToJMQk6CTEzMDYxNzMKK0NoYWRpemEgCToJMQk6CTgzOTgxCitDaGFtYSAJOgkxCToJNzQ4OTAKK0NoaXBhdGEgCToJMQk6CTM2NzUzOQorS2F0ZXRlIAk6CTEJOgkxODkyNTAKK0x1bmRhemkgCToJMQk6CTIzNjgzMworTWFtYndlIAk6CTEJOgk3MDQyNQorTnlpbWJhIAk6CTEJOgk0NzM3NgorUGV0YXVrZSAJOgkxCToJMjM1ODc5CitNYW5zYSBbTHVhcHVsYV0JOgkxCToJNzc1MzUzCitDaGllbmdpIAk6CTEJOgk4MzgyNAorS2F3YW1id2EgCToJMQk6CTEwMjUwMworTWFuc2EgCToJMQk6CTE3OTc0OQorTWlsZW5nZSAJOgkxCToJMjg3OTAKK013ZW5zZSAJOgkxCToJMTA1NzU5CitOY2hlbGVuZ2UgCToJMQk6CTExMTExOQorU2FtZnlhIAk6CTEJOgkxNjM2MDkKK0x1c2FrYSAJOgkxCToJMTM5MTMyOQorQ2hvbmd3ZSAJOgkxCToJMTM3NDYxCitLYWZ1ZSAJOgkxCToJMTUwMjE3CitMdWFuZ3dhIAk6CTEJOgkxODk0OAorTHVzYWthIAk6CTEJOgkxMDg0NzAzCitOb3J0aGVybjQgW05vcnRoZXJuIFByb3ZpbmNlXQk6CTEJOgkxMjU4Njk2CitDaGlsdWJpIAk6CTEJOgk2NjMzOAorQ2hpbnNhbGkgCToJMQk6CTEyODY0NgorSXNva2EgCToJMQk6CTk5MzE5CitLYXB1dGEgCToJMQk6CTg3MjMzCitLYXNhbWEgCToJMQk6CTE3MDkyOQorTHV3aW5ndSAJOgkxCToJODA3NTgKK01iYWxhIAk6CTEJOgkxNDk2MzQKK01waWthIAk6CTEJOgkxNDYxOTYKK01wb3Jva29zbyAJOgkxCToJNzM5MjkKK01wdWx1bmd1IAk6CTEJOgk2NzYwMgorTXVuZ3dpIAk6CTEJOgkxMTI5NzcKK05ha29uZGUgCToJMQk6CTc1MTM1CitOb3J0aCBXZXN0ZXJuCToJMQk6CTU4MzM1MAorQ2hhdnVtYSAJOgkxCToJMjk5NDEKK011ZnVtYndlIChDaGl6ZXJhKSAJOgkxCToJNzEyMzgKK0thYm9tcG8gCToJMQk6CTUxOTA0CitLYXNlbXBhIAk6CTEJOgk0NDAwMgorTXdpbmlsdW5nYSAJOgkxCToJMTE3NTA1CitTb2x3ZXppIAk6CTEJOgkyMDM3OTcKK1phbWJlemkgCToJMQk6CTY0OTYzCitTb3V0aGVybjMgW1NvdXRoZXJuIFByb3ZpbmNlXQk6CTEJOgkxMjEyMTI0CitDaG9tYSAJOgkxCToJMjA0ODk4CitHd2VtYmUgCToJMQk6CTM0MTMzCitJdGV6aGktdGV6aGkgCToJMQk6CTQzMTExCitLYWxvbW8gCToJMQk6CTE2OTUwMworS2F6dW5ndWxhIAk6CTEJOgk2ODI2NQorTGl2aW5nc3RvbmUgCToJMQk6CTEwMzI4OAorTWF6YWJ1a2EgCToJMQk6CTIwMzIxOQorTW9uemUgCToJMQk6CTE2MzU3OAorTmFtd2FsYSAJOgkxCToJODI4MTAKK1NpYXZvbmdhIAk6CTEJOgk1ODg2NAorU2luYXpvbmd3ZSAJOgkxCToJODA0NTUKK01vbmd1CToJMQk6CTc2NTA4OAorS2FsYWJvIAk6CTEJOgkxMTQ4MDYKK0thb21hIAk6CTEJOgkxNjI1NjgKK0x1a3VsdSAJOgkxCToJNjgzNzUKK01vbmd1IAk6CTEJOgkxNjIwMDIKK1NlbmFuZ2EgCToJMQk6CTEwOTExOQorU2VzaGVrZSAJOgkxCToJNzgxNjkKK1NoYW5nJ29tYm8gCToJMQk6CTcwMDQ5CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9aSU1CQUJXRV9BUkVBLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL1pJTUJBQldFX0FSRUEudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEwN2VkNDcKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9aSU1CQUJXRV9BUkVBLnR4dApAQCAtMCwwICsxIEBACitaaW1iYWJ3ZQk6CTAJOgkzOTA3NTcKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL1pJTUJBQldFX1BPUFVMQVRJT04udHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvWklNQkFCV0VfUE9QVUxBVElPTi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDNlM2I3ZgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL1pJTUJBQldFX1BPUFVMQVRJT04udHh0CkBAIC0wLDAgKzEgQEAKK1ppbWJhYndlCToJMAk6CTExNjM0NjYzCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0lTTzMxNjYtMS9GSVBTX0FETUlOMS50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0lTTzMxNjYtMS9GSVBTX0FETUlOMS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTk2YzM3NwotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvSVNPMzE2Ni0xL0ZJUFNfQURNSU4xLnR4dApAQCAtMCwwICsxLDYwIEBACitBTEFCQU1BOjAxOkFMCitNSVNTT1VSSToyOTpNTworQUxBU0tBOjAyOkFLCitNT05UQU5BOjMwOk1UCitBUklaT05BOjA0OkFaCitORUJSQVNLQTozMTpORQorQVJLQU5TQVM6MDU6QVIKK05FVkFEQTozMjpOVgorQ0FMSUZPUk5JQTowNjpDQQorTkVXIEhBTVBTSElSRTozMzpOSAorQ09MT1JBRE86MDg6Q08KK05FVyBKRVJTRVk6MzQ6TkoKK0NPTk5FQ1RJQ1VUOjA5OkNUCitORVcgTUVYSUNPOjM1Ok5NCitERUxBV0FSRToxMDpERQorTkVXIFlPUks6MzY6TlkKK0RJU1RSSUNUIE9GIENPTFVNQklBOjExOkRDCitOT1JUSCBDQVJPTElOQTozNzpOQworRkxPUklEQToxMjpGTAorTk9SVEggREFLT1RBOjM4Ok5ECitHRU9SR0lBOjEzOkdBCitPSElPOjM5Ok9ICitPS0xBSE9NQTo0MDpPSworT1JFR09OOjQxOk9SCitIQVdBSUk6MTU6SEkKK1BFTk5TWUxWQU5JQTo0MjpQQQorSURBSE86MTY6SUQKK1JIT0RFIElTTEFORDo0NDpSSQorSUxMSU5PSVM6MTc6SUwKK1NPVVRIIENBUk9MSU5BOjQ1OlNDCitJTkRJQU5BOjE4OklOCitTT1VUSCBEQUtPVEE6NDY6U0QKK0lPV0E6MTk6SUEKK1RFTk5FU1NFRTo0NzpUTgorS0FOU0FTOjIwOktTCitURVhBUzo0ODpUWAorS0VOVFVDS1k6MjE6S1kKK1VUQUg6NDk6VVQKK0xPVUlTSUFOQToyMjpMQQorVkVSTU9OVDo1MDpWVAorTUFJTkU6MjM6TUUKK1ZJUkdJTklBOjUxOlZBCitNQVJZTEFORDoyNDpNRAorV0FTSElOR1RPTjo1MzpXQQorTUFTU0FDSFVTRVRUUzoyNTpNQQorV0VTVCBWSVJHSU5JQTo1NDpXVgorTUlDSElHQU46MjY6TUkKK1dJU0NPTlNJTjo1NTpXSQorTUlOTkVTT1RBOjI3Ok1OCitXWU9NSU5HOjU2OldZCitNSVNTSVNTSVBQSToyODpNUworQU1FUklDQU4gU0FNT0E6NjA6QVMKK0ZFREVSQVRFRCBTVEFURVMgT0YgTUlDUk9ORVNJQTo2NDpGTQorR1VBTTo2NjpHVQorTUFSU0hBTEwgSVNMQU5EUzo2ODpNSAorTk9SVEhFUk4gTUFSSUFOQSBJU0xBTkRTOjY5Ok1QCitQQUxBVTo3MDpQUgorUFVFUlRPIFJJQ086NzI6UFIKK1UuUy4gTUlOT1IgT1VUTFlJTkcgSVNMQU5EUzo3NDpVTQorVklSR0lOIElTTEFORFMgT0YgVEhFIFUuUy46Nzg6VkkKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvSVNPMzE2Ni0xL0ZJUFNfQURNSU4xX1VORk9STUFUVEVELnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvSVNPMzE2Ni0xL0ZJUFNfQURNSU4xX1VORk9STUFUVEVELnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MDUxMjU3Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9JU08zMTY2LTEvRklQU19BRE1JTjFfVU5GT1JNQVRURUQudHh0CkBAIC0wLDAgKzEsNTMwIEBACitBbGFiYW1hCisJCisKKzAxCisJCisKK0FMCisJCisKK01pc3NvdXJpCisJCisKKzI5CisJCisKK01PCisKK0FsYXNrYQorCQorCiswMgorCQorCitBSworCQorCitNb250YW5hCisJCisKKzMwCisJCisKK01UCisKK0FyaXpvbmEKKwkKKworMDQKKwkKKworQVoKKwkKKworTmVicmFza2EKKwkKKworMzEKKwkKKworTkUKKworQXJrYW5zYXMKKwkKKworMDUKKwkKKworQVIKKwkKKworTmV2YWRhCisJCisKKzMyCisJCisKK05WCisKK0NhbGlmb3JuaWEKKwkKKworMDYKKwkKKworQ0EKKwkKKworTmV3IEhhbXBzaGlyZQorCQorCiszMworCQorCitOSAorCitDb2xvcmFkbworCQorCiswOAorCQorCitDTworCQorCitOZXcgSmVyc2V5CisJCisKKzM0CisJCisKK05KCisKK0Nvbm5lY3RpY3V0CisJCisKKzA5CisJCisKK0NUCisJCisKK05ldyBNZXhpY28KKwkKKworMzUKKwkKKworTk0KKworRGVsYXdhcmUKKwkKKworMTAKKwkKKworREUKKwkKKworTmV3IFlvcmsKKwkKKworMzYKKwkKKworTlkKKworRGlzdHJpY3Qgb2YgQ29sdW1iaWEKKwkKKworMTEKKwkKKworREMKKwkKKworTm9ydGggQ2Fyb2xpbmEKKwkKKworMzcKKwkKKworTkMKKworRmxvcmlkYQorCQorCisxMgorCQorCitGTAorCQorCitOb3J0aCBEYWtvdGEKKwkKKworMzgKKwkKKworTkQKKworR2VvcmdpYQorCQorCisxMworCQorCitHQQorCQorCitPaGlvCisJCisKKzM5CisJCisKK09ICisKKyAKKwkKKworIAorCQorCisgCisJCisKK09rbGFob21hCisJCisKKzQwCisJCisKK09LCisKKyAKKwkKKworIAorCQorCisgCisJCisKK09yZWdvbgorCQorCis0MQorCQorCitPUgorCitIYXdhaWkKKwkKKworMTUKKwkKKworSEkKKwkKKworUGVubnN5bHZhbmlhCisJCisKKzQyCisJCisKK1BBCisKK0lkYWhvCisJCisKKzE2CisJCisKK0lECisJCisKK1Job2RlIElzbGFuZAorCQorCis0NAorCQorCitSSQorCitJbGxpbm9pcworCQorCisxNworCQorCitJTAorCQorCitTb3V0aCBDYXJvbGluYQorCQorCis0NQorCQorCitTQworCitJbmRpYW5hCisJCisKKzE4CisJCisKK0lOCisJCisKK1NvdXRoIERha290YQorCQorCis0NgorCQorCitTRAorCitJb3dhCisJCisKKzE5CisJCisKK0lBCisJCisKK1Rlbm5lc3NlZQorCQorCis0NworCQorCitUTgorCitLYW5zYXMKKwkKKworMjAKKwkKKworS1MKKwkKKworVGV4YXMKKwkKKworNDgKKwkKKworVFgKKworS2VudHVja3kKKwkKKworMjEKKwkKKworS1kKKwkKKworVXRhaAorCQorCis0OQorCQorCitVVAorCitMb3Vpc2lhbmEKKwkKKworMjIKKwkKKworTEEKKwkKKworVmVybW9udAorCQorCis1MAorCQorCitWVAorCitNYWluZQorCQorCisyMworCQorCitNRQorCQorCitWaXJnaW5pYQorCQorCis1MQorCQorCitWQQorCitNYXJ5bGFuZAorCQorCisyNAorCQorCitNRAorCQorCitXYXNoaW5ndG9uCisJCisKKzUzCisJCisKK1dBCisKK01hc3NhY2h1c2V0dHMKKwkKKworMjUKKwkKKworTUEKKwkKKworV2VzdCBWaXJnaW5pYQorCQorCis1NAorCQorCitXVgorCitNaWNoaWdhbgorCQorCisyNgorCQorCitNSQorCQorCitXaXNjb25zaW4KKwkKKworNTUKKwkKKworV0kKKworTWlubmVzb3RhCisJCisKKzI3CisJCisKK01OCisJCisKK1d5b21pbmcKKwkKKworNTYKKwkKKworV1kKKworTWlzc2lzc2lwcGkKKwkKKworMjgKKwkKKworTVMKKworQW1lcmljYW4gU2Ftb2EKKwkKKworNjAKKwkKKworQVMKKwkKKworRmVkZXJhdGVkIFN0YXRlcyBvZiBNaWNyb25lc2lhCisJCisKKzY0CisJCisKK0ZNCisJCisKK0d1YW0KKwkKKworNjYKKwkKKworR1UKKwkKKworTWFyc2hhbGwgSXNsYW5kcworCQorCis2OAorCQorCitNSAorCQorCitOb3J0aGVybiBNYXJpYW5hIElzbGFuZHMKKwkKKworNjkKKwkKKworTVAKKwkKKworUGFsYXUKKwkKKworNzAKKwkKKwkKKworUFIKKwkKKworUHVlcnRvIFJpY28KKwkKKworNzIKKwkKKworUFIKKwkKKworVS5TLiBNaW5vciBPdXRseWluZyBJc2xhbmRzCisJCisKKzc0CisJCisKK1VNCisJCisKK1ZpcmdpbiBJc2xhbmRzIG9mIHRoZSBVLlMuCisJCisKKzc4CisJCisKK1ZJClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9JU08zMTY2LTEvSVNPMzE2Nl8xX0FMUEhBMi50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0lTTzMxNjYtMS9JU08zMTY2XzFfQUxQSEEyLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNDQzNWI0Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9JU08zMTY2LTEvSVNPMzE2Nl8xX0FMUEhBMi50eHQKQEAgLTAsMCArMSwyNDMgQEAKK0FGR0hBTklTVEFOOkFGCivFTEFORCBJU0xBTkRTOkFYCitBTEJBTklBOkFMCitBTEdFUklBOkRaCitBTUVSSUNBTiBTQU1PQTpBUworQU5ET1JSQTpBRAorQU5HT0xBOkFPCitBTkdVSUxMQTpBSQorQU5UQVJDVElDQTpBUQorQU5USUdVQSBBTkQgQkFSQlVEQTpBRworQVJHRU5USU5BOkFSCitBUk1FTklBOkFNCitBUlVCQTpBVworQVVTVFJBTElBOkFVCitBVVNUUklBOkFUCitBWkVSQkFJSkFOOkFaCitCQUhBTUFTOkJTCitCQUhSQUlOOkJICitCQU5HTEFERVNIOkJECitCQVJCQURPUzpCQgorQkVMQVJVUzpCWQorQkVMR0lVTTpCRQorQkVMSVpFOkJaCitCRU5JTjpCSgorQkVSTVVEQTpCTQorQkhVVEFOOkJUCitCT0xJVklBOkJPCitCT1NOSUEgQU5EIEhFUlpFR09WSU5BOkJBCitCT1RTV0FOQTpCVworQk9VVkVUIElTTEFORDpCVgorQlJBWklMOkJSCitCUklUSVNIIElORElBTiBPQ0VBTiBURVJSSVRPUlk6SU8KK0JSVU5FSSBEQVJVU1NBTEFNOkJOCitCVUxHQVJJQTpCRworQlVSS0lOQSBGQVNPOkJGCitCVVJVTkRJOkJJCitDQU1CT0RJQTpLSAorQ0FNRVJPT046Q00KK0NBTkFEQTpDQQorQ0FQRSBWRVJERTpDVgorQ0FZTUFOIElTTEFORFM6S1kKK0NFTlRSQUwgQUZSSUNBTiBSRVBVQkxJQzpDRgorQ0hBRDpURAorQ0hJTEU6Q0wKK0NISU5BOkNOCitDSFJJU1RNQVMgSVNMQU5EOkNYCitDT0NPUyAoS0VFTElORykgSVNMQU5EUzpDQworQ09MT01CSUE6Q08KK0NPTU9ST1M6S00KK0NPTkdPOkNHCitDT05HTywgVEhFIERFTU9DUkFUSUMgUkVQVUJMSUMgT0YgVEhFOkNECitDT09LIElTTEFORFM6Q0sKK0NPU1RBIFJJQ0E6Q1IKK0NPVEUgRCdJVk9JUkU6Q0kKK0NST0FUSUE6SFIKK0NVQkE6Q1UKK0NZUFJVUzpDWQorQ1pFQ0ggUkVQVUJMSUM6Q1oKK0RFTk1BUks6REsKK0RKSUJPVVRJOkRKCitET01JTklDQTpETQorRE9NSU5JQ0FOIFJFUFVCTElDOkRPCitFQ1VBRE9SOkVDCitFR1lQVDpFRworRUwgU0FMVkFET1I6U1YKK0VRVUFUT1JJQUwgR1VJTkVBOkdRCitFUklUUkVBOkVSCitFU1RPTklBOkVFCitFVEhJT1BJQTpFVAorRkFMS0xBTkQgSVNMQU5EUyAoTUFMVklOQVMpOkZLCitGQVJPRSBJU0xBTkRTOkZPCitGSUpJOkZKCitGSU5MQU5EOkZJCitGUkFOQ0U6RlIKK0ZSRU5DSCBHVUlBTkE6R0YKK0ZSRU5DSCBQT0xZTkVTSUE6UEYKK0ZSRU5DSCBTT1VUSEVSTiBURVJSSVRPUklFUzpURgorR0FCT046R0EKK0dBTUJJQTpHTQorR0VPUkdJQTpHRQorR0VSTUFOWTpERQorR0hBTkE6R0gKK0dJQlJBTFRBUjpHSQorR1JFRUNFOkdSCitHUkVFTkxBTkQ6R0wKK0dSRU5BREE6R0QKK0dVQURFTE9VUEU6R1AKK0dVQU06R1UKK0dVQVRFTUFMQTpHVAorR1VFUk5TRVk6IEdHCitHVUlORUE6R04KK0dVSU5FQS1CSVNTQVU6R1cKK0dVWUFOQTpHWQorSEFJVEk6SFQKK0hFQVJEIElTTEFORCBBTkQgTUNET05BTEQgSVNMQU5EUzpITQorSE9MWSBTRUUgKFZBVElDQU4gQ0lUWSBTVEFURSk6VkEKK0hPTkRVUkFTOkhOCitIT05HIEtPTkc6SEsKK0hVTkdBUlk6SFUKK0lDRUxBTkQ6SVMKK0lORElBOklOCitJTkRPTkVTSUE6SUQKK0lSQU4sIElTTEFNSUMgUkVQVUJMSUMgT0Y6SVIKK0lSQVE6SVEKK0lSRUxBTkQ6SUUKK0lTTEUgT0YgTUFOOklNCitJU1JBRUw6SUwKK0lUQUxZOklUCitKQU1BSUNBOkpNCitKQVBBTjpKUAorSkVSU0VZOkpFCitKT1JEQU46Sk8KK0tBWkFLSFNUQU46S1oKK0tFTllBOktFCitLSVJJQkFUSTpLSQorS09SRUEsIERFTU9DUkFUSUMgUEVPUExFJ1MgUkVQVUJMSUMgT0Y6S1AKK0tPUkVBLCBSRVBVQkxJQyBPRjpLUgorS1VXQUlUOktXCitLWVJHWVpTVEFOOktHCitMQU8gUEVPUExFJ1MgREVNT0NSQVRJQyBSRVBVQkxJQzpMQQorTEFUVklBOkxWCitMRUJBTk9OOkxCCitMRVNPVEhPOkxTCitMSUJFUklBOkxSCitMSUJZQU4gQVJBQiBKQU1BSElSSVlBOkxZCitMSUVDSFRFTlNURUlOOkxJCitMSVRIVUFOSUE6TFQKK0xVWEVNQk9VUkc6TFUKK01BQ0FPOk1PCitNQUNFRE9OSUEsIFRIRSBGT1JNRVIgWVVHT1NMQVYgUkVQVUJMSUMgT0Y6TUsKK01BREFHQVNDQVI6TUcKK01BTEFXSTpNVworTUFMQVlTSUE6TVkKK01BTERJVkVTOk1WCitNQUxJOk1MCitNQUxUQTpNVAorTUFSU0hBTEwgSVNMQU5EUzpNSAorTUFSVElOSVFVRTpNUQorTUFVUklUQU5JQTpNUgorTUFVUklUSVVTOk1VCitNQVlPVFRFOllUCitNRVhJQ086TVgKK01JQ1JPTkVTSUEsIEZFREVSQVRFRCBTVEFURVMgT0Y6Rk0KK01PTERPVkEsIFJFUFVCTElDIE9GOk1ECitNT05BQ086TUMKK01PTkdPTElBOk1OCitNT05UU0VSUkFUOk1TCitNT1JPQ0NPOk1BCitNT1pBTUJJUVVFOk1aCitNWUFOTUFSOk1NCitOQU1JQklBOk5BCitOQVVSVTpOUgorTkVQQUw6TlAKK05FVEhFUkxBTkRTOk5MCitORVRIRVJMQU5EUyBBTlRJTExFUzpBTgorTkVXIENBTEVET05JQTpOQworTkVXIFpFQUxBTkQ6TloKK05JQ0FSQUdVQTpOSQorTklHRVI6TkUKK05JR0VSSUE6TkcKK05JVUU6TlUKK05PUkZPTEsgSVNMQU5EOk5GCitOT1JUSEVSTiBNQVJJQU5BIElTTEFORFM6TVAKK05PUldBWTpOTworT01BTjpPTQorUEFLSVNUQU46UEsKK1BBTEFVOlBXCitQQUxFU1RJTklBTiBURVJSSVRPUlksIE9DQ1VQSUVEOlBTCitQQU5BTUE6UEEKK1BBUFVBIE5FVyBHVUlORUE6UEcKK1BBUkFHVUFZOlBZCitQRVJVOlBFCitQSElMSVBQSU5FUzpQSAorUElUQ0FJUk46UE4KK1BPTEFORDpQTAorUE9SVFVHQUw6UFQKK1BVRVJUTyBSSUNPOlBSCitRQVRBUjpRQQorUkVVTklPTjpSRQorUk9NQU5JQTpSTworUlVTU0lBTiBGRURFUkFUSU9OOlJVCitSV0FOREE6UlcKK1NBSU5UIEhFTEVOQTpTSAorU0FJTlQgS0lUVFMgQU5EIE5FVklTOktOCitTQUlOVCBMVUNJQTpMQworU0FJTlQgUElFUlJFIEFORCBNSVFVRUxPTjpQTQorU0FJTlQgVklOQ0VOVCBBTkQgVEhFIEdSRU5BRElORVM6VkMKK1NBTU9BOldTCitTQU4gTUFSSU5POlNNCitTQU8gVE9NRSBBTkQgUFJJTkNJUEU6U1QKK1NBVURJIEFSQUJJQTpTQQorU0VORUdBTDpTTgorU0VSQklBIEFORCBNT05URU5FR1JPOkNTCitTRVlDSEVMTEVTOlNDCitTSUVSUkEgTEVPTkU6U0wKK1NJTkdBUE9SRTpTRworU0xPVkFLSUE6U0sKK1NMT1ZFTklBOlNJCitTT0xPTU9OIElTTEFORFM6U0IKK1NPTUFMSUE6U08KK1NPVVRIIEFGUklDQTpaQQorU09VVEggR0VPUkdJQSBBTkQgVEhFIFNPVVRIIFNBTkRXSUNIIElTTEFORFM6R1MKK1NQQUlOOkVTCitTUkkgTEFOS0E6TEsKK1NVREFOOlNECitTVVJJTkFNRTpTUgorU1ZBTEJBUkQgQU5EIEpBTiBNQVlFTjpTSgorU1dBWklMQU5EOlNaCitTV0VERU46U0UKK1NXSVRaRVJMQU5EOkNICitTWVJJQU4gQVJBQiBSRVBVQkxJQzpTWQorVEFJV0FOLCBQUk9WSU5DRSBPRiBDSElOQTpUVworVEFKSUtJU1RBTjpUSgorVEFOWkFOSUEsIFVOSVRFRCBSRVBVQkxJQyBPRjpUWgorVEhBSUxBTkQ6VEgKK1RJTU9SLUxFU1RFOlRMCitUT0dPOlRHCitUT0tFTEFVOlRLCitUT05HQTpUTworVFJJTklEQUQgQU5EIFRPQkFHTzpUVAorVFVOSVNJQTpUTgorVFVSS0VZOlRSCitUVVJLTUVOSVNUQU46VE0KK1RVUktTIEFORCBDQUlDT1MgSVNMQU5EUzpUQworVFVWQUxVOlRWCitVR0FOREE6VUcKK1VLUkFJTkU6VUEKK1VOSVRFRCBBUkFCIEVNSVJBVEVTOkFFCitVTklURUQgS0lOR0RPTTpHQgorVU5JVEVEIFNUQVRFUzpVUworVU5JVEVEIFNUQVRFUyBNSU5PUiBPVVRMWUlORyBJU0xBTkRTOlVNCitVUlVHVUFZOlVZCitVWkJFS0lTVEFOOlVaCitWQU5VQVRVOlZVCitWRU5FWlVFTEE6VkUKK1ZJRVQgTkFNOlZOCitWSVJHSU4gSVNMQU5EUywgQlJJVElTSDpWRworVklSR0lOIElTTEFORFMsIFUuUy46VkkKK1dBTExJUyBBTkQgRlVUVU5BOldGCitXRVNURVJOIFNBSEFSQTpFSAorWUVNRU46WUUKK1pBTUJJQTpaTQorWklNQkFCV0U6WlcKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvSVNPMzE2Ni0xL0lTTzMxNjZfMV9BTFBIQTJVUkwudHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9JU08zMTY2LTEvSVNPMzE2Nl8xX0FMUEhBMlVSTC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGVjZWMzMQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvSVNPMzE2Ni0xL0lTTzMxNjZfMV9BTFBIQTJVUkwudHh0CkBAIC0wLDAgKzEgQEAKK2h0dHA6Ly93d3cuaXNvLmNoL2lzby9lbi9wcm9kcy1zZXJ2aWNlcy9pc28zMTY2bWEvMDJpc28tMzE2Ni1jb2RlLWxpc3RzL2xpc3QtZW4xLXNlbWljLnR4dApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvSVNPMzE2Ni0xL0lTTzMxNjZfMV9BTFBIQTMudHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9JU08zMTY2LTEvSVNPMzE2Nl8xX0FMUEhBMy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjhkNmNmMQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvSVNPMzE2Ni0xL0lTTzMxNjZfMV9BTFBIQTMudHh0CkBAIC0wLDAgKzEsMjMxIEBACiswMDQ6QUZHSEFOSVNUQU46QUZHCisyNDg6xUxBTkQgSVNMQU5EUzpBTEEKKzAwODpBTEJBTklBOkFMQgorMDEyOkFMR0VSSUE6RFpBCiswMTY6QU1FUklDQU4gU0FNT0E6QVNNCiswMjA6QU5ET1JSQTpBTkQKKzAyNDpBTkdPTEE6QUdPCis2NjA6QU5HVUlMTEE6QUlBCiswMjg6QU5USUdVQSBBTkQgQkFSQlVEQTpBVEcKKzAzMjpBUkdFTlRJTkE6QVJHCiswNTE6QVJNRU5JQTpBUk0KKzUzMzpBUlVCQTpBQlcKKzAzNjpBVVNUUkFMSUE6QVVTCiswNDA6QVVTVFJJQTpBVVQKKzAzMTpBWkVSQkFJSkFOOkFaRQorMDQ0OkJBSEFNQVM6QkhTCiswNDg6QkFIUkFJTjpCSFIKKzA1MDpCQU5HTEFERVNIOkJHRAorMDUyOkJBUkJBRE9TOkJSQgorMTEyOkJFTEFSVVM6QkxSCiswNTY6QkVMR0lVTTpCRUwKKzA4NDpCRUxJWkU6QkxaCisyMDQ6QkVOSU46QkVOCiswNjA6QkVSTVVEQTpCTVUKKzA2NDpCSFVUQU46QlROCiswNjg6Qk9MSVZJQTpCT0wKKzA3MDpCT1NOSUEgQU5EIEhFUlpFR09WSU5BOkJJSAorMDcyOkJPVFNXQU5BOkJXQQorMDc2OkJSQVpJTDpCUkEKKzA5MjpCUklUSVNIIFZJUkdJTiBJU0xBTkRTOlZHQgorMDk2OkJSVU5FSSBEQVJVU1NBTEFNOkJSTgorMTAwOkJVTEdBUklBOkJHUgorODU0OkJVUktJTkEgRkFTTzpCRkEKKzEwODpCVVJVTkRJOkJESQorMTE2OkNBTUJPRElBOktITQorMTIwOkNBTUVST09OOkNNUgorMTI0OkNBTkFEQTpDQU4KKzEzMjpDQVBFIFZFUkRFOkNQVgorMTM2OkNBWU1BTiBJU0xBTkRTOkNZTQorMTQwOkNFTlRSQUwgQUZSSUNBTiBSRVBVQkxJQzpDQUYKKzE0ODpDSEFEOlRDRAorMTUyOkNISUxFOkNITAorMTU2OkNISU5BOkNITgorMzQ0OkhPTkcgS09ORyBTUEVDSUFMIEFETUlOSVNUUkFUSVZFIFJFR0lPTiBPRiBDSElOQTpIS0cKKzQ0NjpNQUNBTyBTUEVDSUFMIEFETUlOSVNUUkFUSVZFIFJFR0lPTiBPRiBDSElOQTpNQUMKKzE3MDpDT0xPTUJJQTpDT0wKKzE3NDpDT01PUk9TOkNPTQorMTc4OkNPTkdPOkNPRworMTg0OkNPT0sgSVNMQU5EUzpDT0sKKzE4ODpDT1NUQSBSSUNBOkNSSQorMzg0OkPUVEUgRCdJVk9JUkU6Q0lWCisxOTE6Q1JPQVRJQTpIUlYKKzE5MjpDVUJBOkNVQgorMTk2OkNZUFJVUzpDWVAKKzIwMzpDWkVDSCBSRVBVQkxJQzpDWkUKKzQwODpERU1PQ1JBVElDIFBFT1BMRSdTIFJFUFVCTElDIE9GIEtPUkVBOlBSSworMTgwOkRFTU9DUkFUSUMgUkVQVUJMSUMgT0YgVEhFIENPTkdPOkNPRAorMjA4OkRFTk1BUks6RE5LCisyNjI6REpJQk9VVEk6REpJCisyMTI6RE9NSU5JQ0E6RE1BCisyMTQ6RE9NSU5JQ0FOIFJFUFVCTElDOkRPTQorMjE4OkVDVUFET1I6RUNVCis4MTg6RUdZUFQ6RUdZCisyMjI6RUwgU0FMVkFET1I6U0xWCisyMjY6RVFVQVRPUklBTCBHVUlORUE6R05RCisyMzI6RVJJVFJFQTpFUkkKKzIzMzpFU1RPTklBOkVTVAorMjMxOkVUSElPUElBOkVUSAorMjM0OkZBRVJPRSBJU0xBTkRTOkZSTworMjM4OkZBTEtMQU5EIElTTEFORFMgKE1BTFZJTkFTKTpGTEsKKzI0MjpGSUpJOkZKSQorMjQ2OkZJTkxBTkQ6RklOCisyNTA6RlJBTkNFOkZSQQorMjU0OkZSRU5DSCBHVUlBTkE6R1VGCisyNTg6RlJFTkNIIFBPTFlORVNJQTpQWUYKKzI2NjpHQUJPTjpHQUIKKzI3MDpHQU1CSUE6R01CCisyNjg6R0VPUkdJQTpHRU8KKzI3NjpHRVJNQU5ZOkRFVQorMjg4OkdIQU5BOkdIQQorMjkyOkdJQlJBTFRBUjpHSUIKKzMwMDpHUkVFQ0U6R1JDCiszMDQ6R1JFRU5MQU5EOkdSTAorMzA4OkdSRU5BREE6R1JECiszMTI6R1VBREVMT1VQRTpHTFAKKzMxNjpHVUFNOkdVTQorMzIwOkdVQVRFTUFMQTpHVE0KKzMyNDpHVUlORUE6R0lOCis2MjQ6R1VJTkVBLUJJU1NBVTpHTkIKKzMyODpHVVlBTkE6R1VZCiszMzI6SEFJVEk6SFRJCiszMzY6SE9MWSBTRUU6VkFUCiszNDA6SE9ORFVSQVM6SE5ECiszNDg6SFVOR0FSWTpIVU4KKzM1MjpJQ0VMQU5EOklTTAorMzU2OklORElBOklORAorMzYwOklORE9ORVNJQTpJRE4KKzM2NDpJUkFOLCBJU0xBTUlDIFJFUFVCTElDIE9GOklSTgorMzY4OklSQVE6SVJRCiszNzI6SVJFTEFORDpJUkwKKzM3NjpJU1JBRUw6SVNSCiszODA6SVRBTFk6SVRBCiszODg6SkFNQUlDQTpKQU0KKzM5MjpKQVBBTjpKUE4KKzQwMDpKT1JEQU46Sk9SCiszOTg6S0FaQUtIU1RBTjpLQVoKKzQwNDpLRU5ZQTpLRU4KKzI5NjpLSVJJQkFUSTpLSVIKKzQxNDpLVVdBSVQ6S1dUCis0MTc6S1lSR1laU1RBTjpLR1oKKzQxODpMQU8gUEVPUExFJ1MgREVNT0NSQVRJQyBSRVBVQkxJQzpMQU8KKzQyODpMQVRWSUE6TFZBCis0MjI6TEVCQU5PTjpMQk4KKzQyNjpMRVNPVEhPOkxTTworNDMwOkxJQkVSSUE6TEJSCis0MzQ6TElCWUFOIEFSQUIgSkFNQUhJUklZQTpMQlkKKzQzODpMSUVDSFRFTlNURUlOOkxJRQorNDQwOkxJVEhVQU5JQTpMVFUKKzQ0MjpMVVhFTUJPVVJHOkxVWAorNDUwOk1BREFHQVNDQVI6TURHCis0NTQ6TUFMQVdJOk1XSQorNDU4Ok1BTEFZU0lBOk1ZUworNDYyOk1BTERJVkVTOk1EVgorNDY2Ok1BTEk6TUxJCis0NzA6TUFMVEE6TUxUCis1ODQ6TUFSU0hBTEwgSVNMQU5EUzpNSEwKKzQ3NDpNQVJUSU5JUVVFOk1UUQorNDc4Ok1BVVJJVEFOSUE6TVJUCis0ODA6TUFVUklUSVVTOk1VUworMTc1Ok1BWU9UVEU6TVlUCis0ODQ6TUVYSUNPOk1FWAorNTgzOk1JQ1JPTkVTSUEsIEZFREVSQVRFRCBTVEFURVMgT0Y6RlNNCis0OTI6TU9OQUNPOk1DTworNDk2Ok1PTkdPTElBOk1ORworNDk5Ok1PTlRFTkVHUk86VU5LCis1MDA6TU9OVFNFUlJBVDpNU1IKKzUwNDpNT1JPQ0NPOk1BUgorNTA4Ok1PWkFNQklRVUU6TU9aCisxMDQ6TVlBTk1BUjpNTVIKKzUxNjpOQU1JQklBOk5BTQorNTIwOk5BVVJVOk5SVQorNTI0Ok5FUEFMOk5QTAorNTI4Ok5FVEhFUkxBTkRTOk5MRAorNTMwOk5FVEhFUkxBTkRTIEFOVElMTEVTOkFOVAorNTQwOk5FVyBDQUxFRE9OSUE6TkNMCis1NTQ6TkVXIFpFQUxBTkQ6TlpMCis1NTg6TklDQVJBR1VBOk5JQworNTYyOk5JR0VSOk5FUgorNTY2Ok5JR0VSSUE6TkdBCis1NzA6TklVRTpOSVUKKzU3NDpOT1JGT0xLIElTTEFORDpORksKKzU4MDpOT1JUSEVSTiBNQVJJQU5BIElTTEFORFM6TU5QCis1Nzg6Tk9SV0FZOk5PUgorMjc1Ok9DQ1VQSUVEIFBBTEVTVElOSUFOIFRFUlJJVE9SWTpQU0UKKzUxMjpPTUFOOk9NTgorNTg2OlBBS0lTVEFOOlBBSworNTg1OlBBTEFVOlBMVworNTkxOlBBTkFNQTpQQU4KKzU5ODpQQVBVQSBORVcgR1VJTkVBOlBORworNjAwOlBBUkFHVUFZOlBSWQorNjA0OlBFUlU6UEVSCis2MDg6UEhJTElQUElORVM6UEhMCis2MTI6UElUQ0FJUk46UENOCis2MTY6UE9MQU5EOlBPTAorNjIwOlBPUlRVR0FMOlBSVAorNjMwOlBVRVJUTyBSSUNPOlBSSQorNjM0OlFBVEFSOlFBVAorNDEwOlJFUFVCTElDIE9GIEtPUkVBOktPUgorNDk4OlJFUFVCTElDIE9GIE1PTERPVkE6TURBCis2Mzg6UslVTklPTjpSRVUKKzY0MjpST01BTklBOlJPVQorNjQzOlJVU1NJQU4gRkVERVJBVElPTjpSVVMKKzY0NjpSV0FOREE6UldBCis2NTQ6U0FJTlQgSEVMRU5BOlNITgorNjU5OlNBSU5UIEtJVFRTIEFORCBORVZJUzpLTkEKKzY2MjpTQUlOVCBMVUNJQTpMQ0EKKzY2NjpTQUlOVCBQSUVSUkUgQU5EIE1JUVVFTE9OOlNQTQorNjcwOlNBSU5UIFZJTkNFTlQgQU5EIFRIRSBHUkVOQURJTkVTOlZDVAorODgyOlNBTU9BOldTTQorNjc0OlNBTiBNQVJJTk86U01SCis2Nzg6U0FPIFRPTUUgQU5EIFBSSU5DSVBFOlNUUAorNjgyOlNBVURJIEFSQUJJQTpTQVUKKzY4NjpTRU5FR0FMOlNFTgorNjg4OlNFUkJJQTpVTksKKzY5MDpTRVlDSEVMTEVTOlNZQworNjk0OlNJRVJSQSBMRU9ORTpTTEUKKzcwMjpTSU5HQVBPUkU6U0dQCis3MDM6U0xPVkFLSUE6U1ZLCis3MDU6U0xPVkVOSUE6U1ZOCiswOTA6U09MT01PTiBJU0xBTkRTOlNMQgorNzA2OlNPTUFMSUE6U09NCis3MTA6U09VVEggQUZSSUNBOlpBRgorNzI0OlNQQUlOOkVTUAorMTQ0OlNSSSBMQU5LQTpMS0EKKzczNjpTVURBTjpTRE4KKzc0MDpTVVJJTkFNRTpTVVIKKzc0NDpTVkFMQkFSRCBBTkQgSkFOIE1BWUVOIElTTEFORFM6U0pNCis3NDg6U1dBWklMQU5EOlNXWgorNzUyOlNXRURFTjpTV0UKKzc1NjpTV0lUWkVSTEFORDpDSEUKKzc2MDpTWVJJQU4gQVJBQiBSRVBVQkxJQzpTWVIKKzc2MjpUQUpJS0lTVEFOOlRKSworNzY0OlRIQUlMQU5EOlRIQQorODA3OlRIRSBGT1JNRVIgWVVHT1NMQVYgUkVQVUJMSUMgT0YgTUFDRURPTklBOk1LRAorNjI2OlRJTU9SLUxFU1RFOlRMUworNzY4OlRPR086VEdPCis3NzI6VE9LRUxBVTpUS0wKKzc3NjpUT05HQTpUT04KKzc4MDpUUklOSURBRCBBTkQgVE9CQUdPOlRUTworNzg4OlRVTklTSUE6VFVOCis3OTI6VFVSS0VZOlRVUgorNzk1OlRVUktNRU5JU1RBTjpUS00KKzc5NjpUVVJLUyBBTkQgQ0FJQ09TIElTTEFORFM6VENBCis3OTg6VFVWQUxVOlRVVgorODAwOlVHQU5EQTpVR0EKKzgwNDpVS1JBSU5FOlVLUgorNzg0OlVOSVRFRCBBUkFCIEVNSVJBVEVTOkFSRQorODI2OlVOSVRFRCBLSU5HRE9NIE9GIEdSRUFUIEJSSVRBSU4gQU5EIE5PUlRIRVJOIElSRUxBTkQ6R0JSCis4MzQ6VU5JVEVEIFJFUFVCTElDIE9GIFRBTlpBTklBOlRaQQorODQwOlVOSVRFRCBTVEFURVMgT0YgQU1FUklDQTpVU0EKKzg1MDpVTklURUQgU1RBVEVTIFZJUkdJTiBJU0xBTkRTOlZJUgorODU4OlVSVUdVQVk6VVJZCis4NjA6VVpCRUtJU1RBTjpVWkIKKzU0ODpWQU5VQVRVOlZVVAorODYyOlZFTkVaVUVMQSAoQk9MSVZBUklBTiBSRVBVQkxJQyBPRik6VkVOCis3MDQ6VklFVCBOQU06Vk5NCis4NzY6V0FMTElTIEFORCBGVVRVTkEgSVNMQU5EUzpXTEYKKzczMjpXRVNURVJOIFNBSEFSQTpFU0gKKzg4NzpZRU1FTjpZRU0KKzg5NDpaQU1CSUE6Wk1CCis3MTY6WklNQkFCV0U6WldFCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0lTTzMxNjYtMS9JU08zMTY2XzFfQUxQSEEzVVJMLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvSVNPMzE2Ni0xL0lTTzMxNjZfMV9BTFBIQTNVUkwudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI1YTIyMzUKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0lTTzMxNjYtMS9JU08zMTY2XzFfQUxQSEEzVVJMLnR4dApAQCAtMCwwICsxIEBACitodHRwOi8vdW5zdGF0cy51bi5vcmcvdW5zZC9tZXRob2RzL200OS9tNDlhbHBoYS5odG0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0lTTzMxNjYtMS9JU08zMTY2XzFfbGlzdC50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0lTTzMxNjYtMS9JU08zMTY2XzFfbGlzdC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGM5ZjNkNQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvSVNPMzE2Ni0xL0lTTzMxNjZfMV9saXN0LnR4dApAQCAtMCwwICsxLDI4MCBAQAorI1RoaXMgSVNPIDMxNjZfMSBkYXRhIGhhcyBiZWVuIG1vZGlmaWVkIGJ5IE5lbHNvbiB0byBtYXRjaCBvdXIgZGl2YSBkYXRhIHNldC4KK0VxdWF0b3JpYWwgR3VpbmVhLCAyMjYsICBHTlEsIEdRCitHdWluZWEsIDMyNCwgR0lOLCBHTgorR3VpbmVhIEJpc3NhdSwgNjI0LCBHTkIsIEdXCitBZmdoYW5pc3RhbiwgMDA0LCBBRkcsIEFGCivFbGFuZCBJc2xhbmRzLCAyNDgsIEFMQSwgQVgKK0FsYmFuaWEsIDAwOCwgQUxCLCBBTAorQWxnZXJpYSwgMDEyLCBEWkEsIERaCitBbWVyaWNhbiBTYW1vYSwgMDE2LCBBU00sIEFTCitBbmRvcnJhLCAwMjAsIEFORCwgQUQKK0FuZ29sYSwgMDI0LCBBR08sIEFPCitBbmd1aWxsYSwgNjYwLCBBSUEsIEFJCitBbnRhcmN0aWNhLCAwMTAsICBBVEEsIEFRCitBbnRpZ3VhIGFuZCBCYXJidWRhLCAwMjgsIEFURywgQUcKK0FyZ2VudGluYSwgMDMyLCBBUkcsIEFSCitBcm1lbmlhLCAwNTEsICBBUk0sIEFNCitBcnViYSwgNTMzLCBBQlcsIEFXCitBdXN0cmFsaWEsIDAzNiwgQVVTLCBBVQorQXVzdHJpYSwgMDQwLCAgQVVULCBBVAorQXplcmJhaWphbiwgMDMxLCBBWkUsIEFaCitCYWhhbWFzLCAwNDQsIEJIUywgQlMKK0JhaHJhaW4sIDA0OCwgQkhSLCBCSAorQmFuZ2xhZGVzaCwgIDA1MCwgQkdELCBCRAorQmFyYmFkb3MsIDA1MiwgQlJCLCBCQgorQmVsYXJ1cywgMTEyLCBCTFIsIEJZCitCZWxnaXVtLCAgMDU2LCBCRUwsIEJFCitCZWxpemUsIDA4NCwgQkxaLCBCWgorQmVuaW4sIDIwNCwgQkVOLCBCSgorQmVybXVkYSwgIDA2MCwgQk1VLCBCTQorQmh1dGFuLCAwNjQsIEJUTiwgQlQKK0JvbGl2aWEsIDA2OCwgQk9MLCBCTworQm9zbmlhIGFuZCBIZXJ6ZWdvdmluYSwgIDA3MCwgQklILCBCQQorI0Jvc25pYSBhbmQgSGVyemVnb3ZpbmEsICAwNzAsIEJJSCwgQkgKK0JvdHN3YW5hLCAwNzIsIEJXQSwgQlcKK0JvdXZldCBJc2xhbmQsIDA3NCwgQlZULCBCVgorQnJhemlsLCAgMDc2LCBCUkEsIEJSCitCcmFzaWwsICAwNzYsIEJSQSwgQlIKKyNCcml0aXNoIEluZGlhbiBPY2VhbiBUZXJyaXRvcnksIDA4NiwgSU9ULCBJTworI0JydW5laSBEYXJ1c3NhbGFtLCAwOTYsIEJSTiwgQk4KK0JydW5laSwgMDk2LCBCUk4sIEJOCitCdWxnYXJpYSwgIDEwMCwgQkdSLCBCRworQnVya2luYSwgODU0LCBCRkEsIEJGCitCdXJraW5hRmFzbywgODU0LCBCRkEsIEJGCitCdXJ1bmRpLCAxMDgsIEJESSwgQkkKK0NhbWJvZGlhLCAxMTYsIEtITSwgS0gKK0NhbWVyb29uLCAxMjAsIENNUiwgQ00KK0NhbmFkYSwgMTI0LCAgQ0FOLCBDQQorQ2FwZSBWZXJkZSwgMTMyLCBDUFYsIENWCitDYXltYW4gSXNsYW5kcywgMTM2LCBDWU0sIEtZCitDZW50cmFsIEFmcmljYW4gUmVwdWJsaWMsIDE0MCwgIENBRiwgQ0YKK0NoYWQsIDE0OCwgVENELCBURAorQ2hpbGUsIDE1MiwgQ0hMLCBDTAorQ2hpbmEsIDE1NiwgIENITiwgQ04KK0NocmlzdG1hcyBJc2xhbmQsIDE2MiwgQ1hSLCBDWAorQ29jb3MgKEtlZWxpbmcpIElzbGFuZHMsIDE2NiwgQ0NLLCBDQworQ29sb21iaWEsIDE3MCwgIENPTCwgQ08KK0NvbW9yb3MsIDE3NCwgQ09NLCBLTQorQ29uZ28sIDE3OCwgQ09HLCBDRworQ29uZ28gKHRoZSBEZW1vY3JhdGljIFJlcHVibGljIG9mIHRoZSksIDE4MCwgIENPRCwgQ0QKK0Nvb2sgSXNsYW5kcywgMTg0LCBDT0ssIENLCitDb3N0YSBSaWNhLCAxODgsIENSSSwgQ1IKK0P0dGUgZCdJdm9pcmUsIDM4NCwgIENJViwgQ0kKK0l2b3J5IENvYXN0LCAzODQsIENJViwgQ0kKK0Nyb2F0aWEsIDE5MSwgSFJWLCBIUgorQ3ViYSwgMTkyLCBDVUIsIENVCitDeXBydXMsIDE5NiwgIENZUCwgQ1kKKyNDemVjaCBSZXB1YmxpYywgMjAzLCBDWkUsIENaCitDemVjaCBSZXB1YmxpYywgMjAzLCBDWkUsIENTCitEZW5tYXJrLCAyMDgsIEROSywgREsKK0RqaWJvdXRpLCAyNjIsIERKSSwgREoKK0RvbWluaWNhLCAgMjEyLCBETUEsIERNCitEb21pbmljYW4gUmVwdWJsaWMsIDIxNCwgRE9NLCBETworRWN1YWRvciwgMjE4LCBFQ1UsICBFQworRWd5cHQsIDgxOCwgRUdZLCBFRworRWwgU2FsdmFkb3IsIDIyMiwgU0xWLCBTVgorI0VxdWF0b3JpYWwgR3VpbmVhLCAyMjYsICBHTlEsIEdRCitFcml0cmVhLCAyMzIsIEVSSSwgRVIKK0VzdG9uaWEsIDIzMywgRVNULCBFRQorRXRoaW9waWEsIDIzMSwgIEVUSCwgRVQKKyNGYWxrbGFuZCBJc2xhbmRzIChNYWx2aW5hcyksICAyMzgsIEZMSywgRksKKyNGYXVsa2xhbmQgSXNsYW5kcywgMjM4LCBGTEssIEZLCitGYXJvZSBJc2xhbmRzLCAyMzQsIEZSTywgRk8KK0ZpamksIDI0MiwgRkpJLCBGSgorRmlubGFuZCwgIDI0NiwgRklOLCBGSQorRnJhbmNlLCAyNTAsIEZSQSwgRlIKK0ZyZW5jaCBHdWlhbmEsIDI1NCwgR1VGLCBHRgorRnJlbmNoIFBvbHluZXNpYSwgIDI1OCwgUFlGLCBQRgorRnJlbmNoIFNvdXRoZXJuIFRlcnJpdG9yaWVzLCAyNjAsIEFURiwgVEYKK0dhYm9uLCAyNjYsIEdBQiwgIEdBCitHYW1iaWEsIDI3MCwgR01CLCBHTQorR2FtYmlhIFRoZSwgMjcwLCBHTUIsIEdNCitHZW9yZ2lhLCAyNjgsIEdFTywgR0UKK0dlcm1hbnksIDI3NiwgIERFVSwgREUKK0doYW5hLCAyODgsIEdIQSwgR0gKK0dpYnJhbHRhciwgMjkyLCBHSUIsIEdJCitHcmVlY2UsIDMwMCwgIEdSQywgR1IKK0dyZWVubGFuZCwgMzA0LCBHUkwsIEdMCitHcmVuYWRhLCAzMDgsIEdSRCwgR0QKK0d1YWRlbG91cGUsIDMxMiwgIEdMUCwgR1AKK0d1YW0sIDMxNiwgR1VNLCBHVQorR3VhdGVtYWxhLCAzMjAsIEdUTSwgR1QKK0d1ZXJuc2V5LCA4MzEsICBHR1ksIEdHCisjR3VpbmVhLCAzMjQsIEdJTiwgR04KKyNHdWluZWEgQmlzc2F1LCA2MjQsIEdOQiwgR1cKKyNHdWluZWEtQmlzc2F1LCA2MjQsIEdOQiwgR1cKK0d1eWFuYSwgMzI4LCAgR1VZLCBHWQorSGFpdGksICAzMzIsIEhUSSwgSFQKK0hlYXJkIElzbGFuZCBhbmQgTWNEb25hbGQgSXNsYW5kcywgMzM0LCBITUQsIEhNCitIb2x5IFNlZSAoVmF0aWNhbiBDaXR5IFN0YXRlKSwgMzM2LCBWQVQsIFZBCitIb25kdXJhcywgIDM0MCwgSE5ELCBITgorSG9uZyBLb25nLCAzNDQsIEhLRywgSEsKK0h1bmdhcnksIDM0OCwgSFVOLCBIVQorSWNlbGFuZCwgMzUyLCBJU0wsIElTCitJbmRpYSwgMzU2LCBJTkQsIElOCitJbmRvbmVzaWEsIDM2MCwgIElETiwgSUQKKyNJcmFuIChJc2xhbWljIFJlcHVibGljIG9mKSwgMzY0LCBJUk4sIElSCitJcmFuLCAzNjQsIElSTiwgSVIKK0lyYXEsIDM2OCwgSVJRLCBJUQorI0lyYWssIDM2OCwgSVJRLCBJUQorSXJlbGFuZCwgMzcyLCAgSVJMLCBJRQorSXNsZSBvZiBNYW4sIDgzMywgSU1OLCBJTQorSXNyYWVsLCAzNzYsIElTUiwgSUwKK0l0YWx5LCAzODAsICBJVEEsIElUCitKYW1haWNhLCAgMzg4LCBKQU0sIEpNCitKYXBhbiwgMzkyLCBKUE4sIEpQCitKZXJzZXksIDgzMiwgSkVZLCBKRQorSm9yZGFuLCAgNDAwLCBKT1IsIEpPCitLYXpha2hzdGFuLCAzOTgsIEtBWiwgS1oKK0tlbnlhLCA0MDQsIEtFTiwgS0UKK0tpcmliYXRpLCAyOTYsIEtJUiwgS0kKKyNLb3JlYSAoRGVtb2NyYXRpYyBQZW9wbGUncyBSZXB1YmxpYyBvZiksIDQwOCwgUFJLLCBLUAorTm9ydGggS29yZWEsIDQwOCwgUFJLLEtQCisjS29yZWEgKFJlcHVibGljIG9mKSwgNDEwLCAgS09SLCBLUgorU291dGggS29yZWEsIDQxMCwgS09SLCBLUgorS3V3YWl0LCA0MTQsIEtXVCwgS1cKK0t5cmd5enN0YW4sIDQxNywgS0daLCBLRworI0xhbyBQZW9wbGUncyBEZW1vY3JhdGljIFJlcHVibGljLCA0MTgsIExBTywgTEEKK0xhb3MsIDQxOCwgTEFPLCBMQQorTGF0dmlhLCAgNDI4LCBMVkEsIExWCitMZWJhbm9uLCA0MjIsIExCTiwgTEIKK0xlc290aG8sIDQyNiwgTFNPLCBMUworTGliZXJpYSwgIDQzMCwgTEJSLCBMUgorI0xpYnlhbiBBcmFiIEphbWFoaXJpeWEsIDQzNCwgTEJZLCBMWQorTGlieWEsIDQzNCwgTEJZLCBMWQorTGllY2h0ZW5zdGVpbiwgNDM4LCBMSUUsIExJCitMaXRodWFuaWEsICA0NDAsIExUVSwgTFQKKy8vTHV4ZW1ib3VyZywgNDQyLCBMVVgsIExVCitMdXhlbWJvdXJnLCA0NDIsIExVWCwgTFgKKyNNYWNhbywgNDQ2LCBNQUMsICBNTworTWFjYXUsIDQ0NiwgTUFDLCBNTworI01hY2Vkb25pYSAodGhlIEZvcm1lciBZdWdvc2xhdiBSZXB1YmxpYyBvZiksIDgwNywgTUtELCBNSworTWFjZWRvbmlhLCA4MDcsIE1LRCwgTUsKK01ha2Vkb25pamEsIDgwNywgTUtELCBNSworTWFkYWdhc2NhciwgNDUwLCBNREcsIE1HCitNYWxhd2ksIDQ1NCwgIE1XSSwgTVcKK01hbGF5c2lhLCA0NTgsIE1ZUywgTVkKK01hbGRpdmVzLCA0NjIsIE1EViwgTVYKK01hbGksIDQ2NiwgIE1MSSwgTUwKK01hbHRhLCA0NzAsIE1MVCwgTVQKK01hcnNoYWxsIElzbGFuZHMsIDU4NCwgTUhMLCBNSAorTWFydGluaXF1ZSwgNDc0LCAgTVRRLCBNUQorTWF1cml0YW5pYSwgNDc4LCBNUlQsIE1SCitNYXVyaXRpdXMsIDQ4MCwgTVVTLCBNVQorTWF5b3R0ZSwgMTc1LCAgTVlULCBZVAorTWV4aWNvLCA0ODQsIE1FWCwgTVgKK01pY3JvbmVzaWEgKEZlZGVyYXRlZCBTdGF0ZXMgb2YpLCA1ODMsIEZTTSwgRk0KK01vbGRvdmEsIDQ5OCwgIE1EQSwgTUQKK01vbGRvdmlhLCA0OTgsIE1EQSwgTUQKK01vbGRhdmlhLCA0OTgsIE1EQSwgTUQKK01vbmFjbywgNDkyLCBNQ08sIE1DCitNb25nb2xpYSwgNDk2LCBNTkcsIE1OCitNb250ZW5lZ3JvLCA0OTksICBDR1IsICYjMTYwOz8KK01vbnRzZXJyYXQsIDUwMCwgTVNSLCBNUworTW9yb2NjbywgNTA0LCBNQVIsIE1BCitNb3phbWJpcXVlLCA1MDgsICBNT1osIE1aCitNeWFubWFyLCAxMDQsIE1NUiwgTU0KK015YW5tYXIgKEJ1cm1hKSwgMTA0LCBNTVIsIE1NCitOYW1pYmlhLCA1MTYsIE5BTSwgTkEKK05hdXJ1LCA1MjAsIE5SVSwgTlIKK05lcGFsLCAgNTI0LCBOUEwsIE5QCitOZXRoZXJsYW5kcywgNTI4LCBOTEQsIE5MCitOZXRoZXJsYW5kcyBBbnRpbGxlcywgNTMwLCBBTlQsIEFOCitOZXcgQ2FsZWRvbmlhLCAgNTQwLCBOQ0wsIE5DCitOZXcgWmVhbGFuZCwgNTU0LCBOWkwsIE5aCitOaWNhcmFndWEsIDU1OCwgTklDLCBOSQorTmlnZXIsICA1NjIsIE5FUiwgTkUKK05pZ2VyaWEsIDU2NiwgTkdBLCBORworTml1ZSwgNTcwLCBOSVUsIE5VCitOb3Jmb2xrIElzbGFuZCwgIDU3NCwgTkZLLCBORgorTm9ydGhlcm4gTWFyaWFuYSBJc2xhbmRzLCA1ODAsIE1OUCwgTVAKK05vcndheSwgNTc4LCBOT1IsIE5PCitPbWFuLCA1MTIsIE9NTiwgT00KK1Bha2lzdGFuLCA1ODYsIFBBSywgUEsKK1BhbGF1LCA1ODUsIFBMVywgUFcKK1BhbGVzdGluaWFuIFRlcnJpdG9yeSAoT2NjdXBpZWQpLCAyNzUsICBQU0UsIFBTCitQYW5hbWEsIDU5MSwgUEFOLCBQQQorUGFwdWEgTmV3IEd1aW5lYSwgNTk4LCBQTkcsIFBHCitQYXJhZ3VheSwgNjAwLCAgUFJZLCBQWQorUGVydSwgNjA0LCBQRVIsIFBFCitQaGlsaXBwaW5lcywgNjA4LCBQSEwsIFBICitQaXRjYWlybiwgNjEyLCAgUENOLCBQTgorUG9sYW5kLCA2MTYsIFBPTCwgUEwKK1BvcnR1Z2FsLCA2MjAsIFBSVCwgUFQKK1B1ZXJ0byBSaWNvLCA2MzAsICBQUkksIFBSCitRYXRhciwgIDYzNCwgUUFULCBRQQorUul1bmlvbiwgNjM4LCBSRVUsIFJFCitSb21hbmlhLCA2NDIsIFJPVSwgIFJPCitSdXNzaWEsIDY0MywgUlVTLCBSVSAKKyNSdXNzaWFuIEZlZGVyYXRpb24sIDY0MywgUlVTLCBSVQorUndhbmRhLCA2NDYsIFJXQSwgUlcKK1NhaW50IEhlbGVuYSwgNjU0LCBTSE4sIFNICitTYWludCBLaXR0cyBhbmQgTmV2aXMsICA2NTksIEtOQSwgS04KK1NhaW50IEx1Y2lhLCA2NjIsIExDQSwgTEMKK1NhaW50IFBpZXJyZSBhbmQgTWlxdWVsb24sIDY2NiwgU1BNLCBQTQorU2FpbnQgVmluY2VudCBhbmQgdGhlIEdyZW5hZGluZXMsICA2NzAsIFZDVCwgVkMKK1NhbW9hLCA4ODIsIFdTTSwgV1MKK1NhbiBNYXJpbm8sIDY3NCwgU01SLCBTTQorU2FvIFRvbWUgYW5kIFByaW5jaXBlLCAgNjc4LCBTVFAsIFNUCitTYXVkaSBBcmFiaWEsIDY4MiwgU0FVLCBTQQorU2VuZWdhbCwgNjg2LCBTRU4sIFNOCitTZXJiaWEsICA2ODgsIFNSQiwgJiMxNjA7PworI1l1Z29zbGF2aWEsICA2ODgsIFNSQiwgUlMKK1l1Z29zbGF2aWEsICA2ODgsIFNSQiwgWVUKK1NleWNoZWxsZXMsIDY5MCwgU1lDLCBTQworU2llcnJhIExlb25lLCA2OTQsIFNMRSwgU0wKK1NpbmdhcG9yZSwgIDcwMiwgU0dQLCBTRworU2xvdmFraWEsIDcwMywgU1ZLLCBTSworU2xvdmVuaWEsIDcwNSwgU1ZOLCBTSQorU29sb21vbiBJc2xhbmRzLCAgMDkwLCBTTEIsIFNCCitTb21hbGlhLCA3MDYsIFNPTSwgU08KK1NvdXRoIEFmcmljYSwgNzEwLCBaQUYsIFpBCitTb3V0aCBHZW9yZ2lhIGFuZCB0aGUgU291dGggU2FuZHdpY2ggSXNsYW5kcywgIDIzOSwgU0dTLCBHUworU3BhaW4sIDcyNCwgRVNQLCBFUworU3JpIExhbmthLCAxNDQsIExLQSwgTEsKK1N1ZGFuLCAgNzM2LCBTRE4sIFNECitTdXJpbmFtZSwgNzQwLCBTVVIsIFNSCitTdmFsYmFyZCBhbmQgSmFuIE1heWVuLCA3NDQsIFNKTSwgU0oKK1N3YXppbGFuZCwgIDc0OCwgU1daLCBTWgorU3dlZGVuLCA3NTIsIFNXRSwgU0UKK1N3aXR6ZXJsYW5kLCA3NTYsIENIRSwgQ0gKKyNTeXJpYW4gQXJhYiBSZXB1YmxpYywgIDc2MCwgU1lSLCBTWQorU3lyaWEsICA3NjAsIFNZUiwgU1kKK1RhaXdhbiAoUHJvdmluY2Ugb2YgQ2hpbmEpLCAxNTgsIFRXTiwgVFcKK1RhamlraXN0YW4sIDc2MiwgVEpLLCBUSgorI1RhbnphbmlhIChVbml0ZWQgUmVwdWJsaWMgb2YpLCA4MzQsIFRaQSwgVFoKK1RhbnphbmlhLCA4MzQsIFRaQSwgVFoKK1RhbnphbmlhIFVuaXRlZCBSZXB1YmxpYywgODM0LCBUWkEsIFRaCitUaGFpbGFuZCwgNzY0LCBUSEEsIFRICitUaW1vci1MZXN0ZSwgNjI2LCAgVExTLCBUTAorVG9nbywgNzY4LCBUR08sIFRHCitUb2tlbGF1LCA3NzIsIFRLTCwgVEsKK1RvbmdhLCA3NzYsICBUT04sIFRPCitUcmluaWRhZCBhbmQgVG9iYWdvLCA3ODAsIFRUTywgVFQKK1R1bmlzaWEsIDc4OCwgVFVOLCBUTgorVHVya2V5LCA3OTIsICBUVVIsIFRSCitUdXJrbWVuaXN0YW4sIDc5NSwgVEtNLCBUTQorVHVya3MgYW5kIENhaWNvcyBJc2xhbmRzLCA3OTYsIFRDQSwgVEMKK1R1dmFsdSwgNzk4LCAgVFVWLCBUVgorVWdhbmRhLCAgODAwLCBVR0EsIFVHCitVa3JhaW5lLCA4MDQsIFVLUiwgVUEKK1VuaXRlZCBBcmFiIEVtaXJhdGVzLCA3ODQsIEFSRSwgQUUKK1VuaXRlZEFyYWJFbWlyYXRlcywgNzg0LCBBUkUsIEFFCisjVW5pdGVkIEtpbmdkb20sICA4MjYsIEdCUixHQgorVW5pdGVkIEtpbmdkb20sICA4MjYsIEdCUixHQgorVW5pdGVkIFN0YXRlcywgODQwLCBVU0EsIFVTCitVbml0ZWQgU3RhdGVzIE1pbm9yIE91dGx5aW5nIElzbGFuZHMsIDU4MSwgVU1JLCBVTQorVXJ1Z3VheSwgIDg1OCwgVVJZLCBVWQorVXpiZWtpc3RhbiwgODYwLCBVWkIsIFVaCitWYW51YXR1LCA1NDgsIFZVVCwgVlUKK1ZlbmV6dWVsYSwgODYyLCBWRU4sIFZFCisjVmlldCBOYW0sIDcwNCwgVk5NLCBWTgorVmlldG5hbSwgNzA0LCBWTk0sIFZOCitWaXJnaW4gSXNsYW5kcyAoQnJpdGlzaCksIDA5MiwgIFZHQiwgVkcKK1ZpcmdpbiBJc2xhbmRzIChVLlMuKSwgODUwLCBWSVIsIFZJCitXYWxsaXMgYW5kIEZ1dHVuYSwgODc2LCBXTEYsIFdGCitXZXN0ZXJuIFNhaGFyYSwgNzMyLCBFU0gsIEVICitZZW1lbiwgODg3LCBZRU0sIFlFCitaYW1iaWEsIDg5NCwgWk1CLCBaTQorWmFpcmUsIDE4MCwgWkFSLCBaUgorWmltYmFid2UsIDcxNiwgWldFLCBaVwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvSVNPMzE2Ni0yL0lTTzMxNjZfMl9saXN0LnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvSVNPMzE2Ni0yL0lTTzMxNjZfMl9saXN0LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MzhkMzgzCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9JU08zMTY2LTIvSVNPMzE2Nl8yX2xpc3QudHh0CkBAIC0wLDAgKzEsNDA1OCBAQAorUFIJOwlQUi03MjAwMQk7CUFkanVudGFzIAk7CTIJOwkwCTsJMAk7CW11bmljaXBhbGl0eQorUFIJOwlQUi03MjAwMwk7CUFndWFkYSAJOwkyCTsJMAk7CTAJOwltdW5pY2lwYWxpdHkKK1BSCTsJUFItNzIwMDUJOwlBZ3VhZGlsbGEgCTsJMgk7CTAJOwkwCTsJbXVuaWNpcGFsaXR5CitQUgk7CVBSLTcyMDA3CTsJQWd1YXMgQnVlbmFzIAk7CTIJOwkwCTsJMAk7CW11bmljaXBhbGl0eQorUFIJOwlQUi03MjAwOQk7CUFpYm9uaXRvIAk7CTIJOwkwCTsJMAk7CW11bmljaXBhbGl0eQorUFIJOwlQUi03MjAxMQk7CUHxYXNjbyAJOwkyCTsJMAk7CTAJOwltdW5pY2lwYWxpdHkKK1BSCTsJUFItNzIwMTMJOwlBcmVjaWJvIAk7CTIJOwkwCTsJMAk7CW11bmljaXBhbGl0eQorUFIJOwlQUi03MjAxNQk7CUFycm95byAJOwkyCTsJMAk7CTAJOwltdW5pY2lwYWxpdHkKK1BSCTsJUFItNzIwMTcJOwlCYXJjZWxvbmV0YSAJOwkyCTsJMAk7CTAJOwltdW5pY2lwYWxpdHkKK1BSCTsJUFItNzIwMTkJOwlCYXJyYW5xdWl0YXMgCTsJMgk7CTAJOwkwCTsJbXVuaWNpcGFsaXR5CitQUgk7CVBSLTcyMDIxCTsJQmF5YW3zbiAJOwkyCTsJMAk7CTAJOwltdW5pY2lwYWxpdHkKK1BSCTsJUFItNzIwMjMJOwlDYWJvIFJvam8gCTsJMgk7CTAJOwkwCTsJbXVuaWNpcGFsaXR5CitQUgk7CVBSLTcyMDI1CTsJQ2FndWFzIAk7CTIJOwkwCTsJMAk7CW11bmljaXBhbGl0eQorUFIJOwlQUi03MjAyNwk7CUNhbXV5IAk7CTIJOwkwCTsJMAk7CW11bmljaXBhbGl0eQorUFIJOwlQUi03MjAyOQk7CUNhbvN2YW5hcyAJOwkyCTsJMAk7CTAJOwltdW5pY2lwYWxpdHkKK1BSCTsJUFItNzIwMzEJOwlDYXJvbGluYSAJOwkyCTsJMAk7CTAJOwltdW5pY2lwYWxpdHkKK1BSCTsJUFItNzIwMzMJOwlDYXRh8W8gCTsJMgk7CTAJOwkwCTsJbXVuaWNpcGFsaXR5CitQUgk7CVBSLTcyMDM1CTsJQ2F5ZXkgCTsJMgk7CTAJOwkwCTsJbXVuaWNpcGFsaXR5CitQUgk7CVBSLTcyMDM3CTsJQ2VpYmEgCTsJMgk7CTAJOwkwCTsJbXVuaWNpcGFsaXR5CitQUgk7CVBSLTcyMDM5CTsJQ2lhbGVzIAk7CTIJOwkwCTsJMAk7CW11bmljaXBhbGl0eQorUFIJOwlQUi03MjA0MQk7CUNpZHJhIAk7CTIJOwkwCTsJMAk7CW11bmljaXBhbGl0eQorUFIJOwlQUi03MjA0Mwk7CUNvYW1vIAk7CTIJOwkwCTsJMAk7CW11bmljaXBhbGl0eQorUFIJOwlQUi03MjA0NQk7CUNvbWVy7W8gCTsJMgk7CTAJOwkwCTsJbXVuaWNpcGFsaXR5CitQUgk7CVBSLTcyMDQ3CTsJQ29yb3phbCAJOwkyCTsJMAk7CTAJOwltdW5pY2lwYWxpdHkKK1BSCTsJUFItNzIwNDkJOwlDdWxlYnJhIAk7CTIJOwkwCTsJMAk7CW11bmljaXBhbGl0eQorUFIJOwlQUi03MjA1MQk7CURvcmFkbyAJOwkyCTsJMAk7CTAJOwltdW5pY2lwYWxpdHkKK1BSCTsJUFItNzIwNTMJOwlGYWphcmRvIAk7CTIJOwkwCTsJMAk7CW11bmljaXBhbGl0eQorUFIJOwlQUi03MjA1NAk7CUZsb3JpZGEgCTsJMgk7CTAJOwkwCTsJbXVuaWNpcGFsaXR5CitQUgk7CVBSLTcyMDU1CTsJR3XhbmljYSAJOwkyCTsJMAk7CTAJOwltdW5pY2lwYWxpdHkKK1BSCTsJUFItNzIwNTcJOwlHdWF5YW1hIAk7CTIJOwkwCTsJMAk7CW11bmljaXBhbGl0eQorUFIJOwlQUi03MjA1OQk7CUd1YXlhbmlsbGEgCTsJMgk7CTAJOwkwCTsJbXVuaWNpcGFsaXR5CitQUgk7CVBSLTcyMDYxCTsJR3VheW5hYm8gCTsJMgk7CTAJOwkwCTsJbXVuaWNpcGFsaXR5CitQUgk7CVBSLTcyMDYzCTsJR3VyYWJvIAk7CTIJOwkwCTsJMAk7CW11bmljaXBhbGl0eQorUFIJOwlQUi03MjA2NQk7CUhhdGlsbG8gCTsJMgk7CTAJOwkwCTsJbXVuaWNpcGFsaXR5CitQUgk7CVBSLTcyMDY3CTsJSG9ybWlndWVyb3MgCTsJMgk7CTAJOwkwCTsJbXVuaWNpcGFsaXR5CitQUgk7CVBSLTcyMDY5CTsJSHVtYWNhbyAJOwkyCTsJMAk7CTAJOwltdW5pY2lwYWxpdHkKK1BSCTsJUFItNzIwNzEJOwlJc2FiZWxhIAk7CTIJOwkwCTsJMAk7CW11bmljaXBhbGl0eQorUFIJOwlQUi03MjA3Mwk7CUpheXV5YSAJOwkyCTsJMAk7CTAJOwltdW5pY2lwYWxpdHkKK1BSCTsJUFItNzIwNzUJOwlKdWFuYSBE7WF6IAk7CTIJOwkwCTsJMAk7CW11bmljaXBhbGl0eQorUFIJOwlQUi03MjA3Nwk7CUp1bmNvcyAJOwkyCTsJMAk7CTAJOwltdW5pY2lwYWxpdHkKK1BSCTsJUFItNzIwNzkJOwlMYWphcyAJOwkyCTsJMAk7CTAJOwltdW5pY2lwYWxpdHkKK1BSCTsJUFItNzIwODEJOwlMYXJlcyAJOwkyCTsJMAk7CTAJOwltdW5pY2lwYWxpdHkKK1BSCTsJUFItNzIwODMJOwlMYXMgTWFy7WFzIAk7CTIJOwkwCTsJMAk7CW11bmljaXBhbGl0eQorUFIJOwlQUi03MjA4NQk7CUxhcyBQaWVkcmFzIAk7CTIJOwkwCTsJMAk7CW11bmljaXBhbGl0eQorUFIJOwlQUi03MjA4Nwk7CUxv7XphIAk7CTIJOwkwCTsJMAk7CW11bmljaXBhbGl0eQorUFIJOwlQUi03MjA4OQk7CUx1cXVpbGxvIAk7CTIJOwkwCTsJMAk7CW11bmljaXBhbGl0eQorUFIJOwlQUi03MjA5MQk7CU1hbmF07SAJOwkyCTsJMAk7CTAJOwltdW5pY2lwYWxpdHkKK1BSCTsJUFItNzIwOTMJOwlNYXJpY2FvIAk7CTIJOwkwCTsJMAk7CW11bmljaXBhbGl0eQorUFIJOwlQUi03MjA5NQk7CU1hdW5hYm8gCTsJMgk7CTAJOwkwCTsJbXVuaWNpcGFsaXR5CitQUgk7CVBSLTcyMDk3CTsJTWF5YWf8ZXogCTsJMgk7CTAJOwkwCTsJbXVuaWNpcGFsaXR5CitQUgk7CVBSLTcyMDk5CTsJTW9jYSAJOwkyCTsJMAk7CTAJOwltdW5pY2lwYWxpdHkKK1BSCTsJUFItNzIxMDEJOwlNb3JvdmlzIAk7CTIJOwkwCTsJMAk7CW11bmljaXBhbGl0eQorUFIJOwlQUi03MjEwMwk7CU5hZ3VhYm8gCTsJMgk7CTAJOwkwCTsJbXVuaWNpcGFsaXR5CitQUgk7CVBSLTcyMTA1CTsJTmFyYW5qaXRvIAk7CTIJOwkwCTsJMAk7CW11bmljaXBhbGl0eQorUFIJOwlQUi03MjEwNwk7CU9yb2NvdmlzIAk7CTIJOwkwCTsJMAk7CW11bmljaXBhbGl0eQorUFIJOwlQUi03MjEwOQk7CVBhdGlsbGFzIAk7CTIJOwkwCTsJMAk7CW11bmljaXBhbGl0eQorUFIJOwlQUi03MjExMQk7CVBl8XVlbGFzIAk7CTIJOwkwCTsJMAk7CW11bmljaXBhbGl0eQorUFIJOwlQUi03MjExMwk7CVBvbmNlIAk7CTIJOwkwCTsJMAk7CW11bmljaXBhbGl0eQorUFIJOwlQUi03MjExNQk7CVF1ZWJyYWRpbGxhcyAJOwkyCTsJMAk7CTAJOwltdW5pY2lwYWxpdHkKK1BSCTsJUFItNzIxMTcJOwlSaW5j824gCTsJMgk7CTAJOwkwCTsJbXVuaWNpcGFsaXR5CitQUgk7CVBSLTcyMTE5CTsJUu1vIEdyYW5kZSAJOwkyCTsJMAk7CTAJOwltdW5pY2lwYWxpdHkKK1BSCTsJUFItNzIxMjEJOwlTYWJhbmEgR3JhbmRlIAk7CTIJOwkwCTsJMAk7CW11bmljaXBhbGl0eQorUFIJOwlQUi03MjEyMwk7CVNhbGluYXMgCTsJMgk7CTAJOwkwCTsJbXVuaWNpcGFsaXR5CitQUgk7CVBSLTcyMTI1CTsJU2FuIEdlcm3hbiAJOwkyCTsJMAk7CTAJOwltdW5pY2lwYWxpdHkKK1BSCTsJUFItNzIxMjcJOwlTYW4gSnVhbiAJOwkyCTsJMAk7CTAJOwltdW5pY2lwYWxpdHkKK1BSCTsJUFItNzIxMjkJOwlTYW4gTG9yZW56byAJOwkyCTsJMAk7CTAJOwltdW5pY2lwYWxpdHkKK1BSCTsJUFItNzIxMzEJOwlTYW4gU2ViYXN0aeFuIAk7CTIJOwkwCTsJMAk7CW11bmljaXBhbGl0eQorUFIJOwlQUi03MjEzMwk7CVNhbnRhIElzYWJlbCAJOwkyCTsJMAk7CTAJOwltdW5pY2lwYWxpdHkKK1BSCTsJUFItNzIxMzUJOwlUb2EgQWx0YSAJOwkyCTsJMAk7CTAJOwltdW5pY2lwYWxpdHkKK1BSCTsJUFItNzIxMzcJOwlUb2EgQmFqYSAJOwkyCTsJMAk7CTAJOwltdW5pY2lwYWxpdHkKK1BSCTsJUFItNzIxMzkJOwlUcnVqaWxsbyBBbHRvIAk7CTIJOwkwCTsJMAk7CW11bmljaXBhbGl0eQorUFIJOwlQUi03MjE0MQk7CVV0dWFkbyAJOwkyCTsJMAk7CTAJOwltdW5pY2lwYWxpdHkKK1BSCTsJUFItNzIxNDMJOwlWZWdhIEFsdGEgCTsJMgk7CTAJOwkwCTsJbXVuaWNpcGFsaXR5CitQUgk7CVBSLTcyMTQ1CTsJVmVnYSBCYWphIAk7CTIJOwkwCTsJMAk7CW11bmljaXBhbGl0eQorUFIJOwlQUi03MjE0Nwk7CVZpZXF1ZXMgCTsJMgk7CTAJOwkwCTsJbXVuaWNpcGFsaXR5CitQUgk7CVBSLTcyMTQ5CTsJVmlsbGFsYmEgCTsJMgk7CTAJOwkwCTsJbXVuaWNpcGFsaXR5CitQUgk7CVBSLTcyMTUxCTsJWWFidWNvYSAJOwkyCTsJMAk7CTAJOwltdW5pY2lwYWxpdHkKK1BSCTsJUFItNzIxNTMJOwlZYXVjbyAJOwkyCTsJMAk7CTAJOwltdW5pY2lwYWxpdHkKK1VTO1VTLUFMO0FsYWJhbWE7MTswOzA7c3RhdGUKK1VTO1VTLUFLO0FsYXNrYTsyOzA7MDtzdGF0ZQorVVM7VVMtQVo7QXJpem9uYTs0OzA7MDtzdGF0ZQorVVM7VVMtQVI7QXJrYW5zYXM7NTswOzA7c3RhdGUKK1VTO1VTLURVTU1ZMTtBcmw7MDswOzA7c3RhdGUKK1VTO1VTLUNBO0NhbGlmb3JuaWE7NjswOzA7c3RhdGUKK1VTO1VTLURVTU1ZMjtDYW07MDswOzA7c3RhdGUKK1VTO1VTLUNPO0NvbG9yYWRvOzg7MDswO3N0YXRlCitVUztVUy1DVDtDb25uZWN0aWN1dDs5OzA7MDtzdGF0ZQorVVM7VVMtREU7RGVsYXdhcmU7MTA7MDswO3N0YXRlCitVUztVUy1GTDtGbG9yaWRhOzEyOzA7MDtzdGF0ZQorVVM7VVMtR0E7R2VvcmdpYTsxMzswOzA7c3RhdGUKK1VTO1VTLURVTU1ZMztHZXA7MDswOzA7c3RhdGUKK1VTO1VTLUhJO0hhd2FpaTsxNTswOzA7c3RhdGUKK1VTO1VTLUlEO0lkYWhvOzE2OzA7MDtzdGF0ZQorVVM7VVMtSUw7SWxsaW5vaXM7MTc7MDswO3N0YXRlCitVUztVUy1JTjtJbmRpYW5hOzE4OzA7MDtzdGF0ZQorVVM7VVMtSUE7SW93YTsxOTswOzA7c3RhdGUKK1VTO1VTLUtTO0thbnNhczsyMDswOzA7c3RhdGUKK1VTO1VTLUtZO0tlbnR1Y2t5OzIxOzA7MDtzdGF0ZQorVVM7VVMtTEE7TG91aXNpYW5hOzIyOzA7MDtzdGF0ZQorVVM7VVMtTUU7TWFpbmU7MjM7MDswO3N0YXRlCitVUztVUy1NRDtNYXJ5bGFuZDsyNDswOzA7c3RhdGUKK1VTO1VTLU1BO01hc3NhY2h1c2V0dHM7MjU7MDswO3N0YXRlCitVUztVUy1NSTtNaWNoaWdhbjsyNjswOzA7c3RhdGUKK1VTO1VTLU1OO01pbm5lc290YTsyNzswOzA7c3RhdGUKK1VTO1VTLU1TO01pc3Npc3NpcHBpOzI4OzA7MDtzdGF0ZQorVVM7VVMtTU87TWlzc291cmk7Mjk7MDswO3N0YXRlCitVUztVUy1NVDtNb250YW5hOzMwOzA7MDtzdGF0ZQorVVM7VVMtTkU7TmVicmFza2E7MzE7MDswO3N0YXRlCitVUztVUy1OVjtOZXZhZGE7MzI7MDswO3N0YXRlCitVUztVUy1OSDtOZXcgSGFtcHNoaXJlOzMzOzA7MDtzdGF0ZQorVVM7VVMtTko7TmV3IEplcnNleTszNDswOzA7c3RhdGUKK1VTO1VTLU5NO05ldyBNZXhpY287MzU7MDswO3N0YXRlCitVUztVUy1OWTtOZXcgWW9yazszNjswOzA7c3RhdGUKK1VTO1VTLU5DO05vcnRoIENhcm9saW5hOzM3OzA7MDtzdGF0ZQorVVM7VVMtTkQ7Tm9ydGggRGFrb3RhOzM4OzA7MDtzdGF0ZQorVVM7VVMtT0g7T2hpbzszOTswOzA7c3RhdGUKK1VTO1VTLU9LO09rbGFob21hOzQwOzA7MDtzdGF0ZQorVVM7VVMtT1I7T3JlZ29uOzQxOzA7MDtzdGF0ZQorVVM7VVMtUEE7UGVubnN5bHZhbmlhOzQyOzA7MDtzdGF0ZQorVVM7VVMtUkk7UmhvZGUgSXNsYW5kOzQ0OzA7MDtzdGF0ZQorVVM7VVMtU0M7U291dGggQ2Fyb2xpbmE7NDU7MDswO3N0YXRlCitVUztVUy1TRDtTb3V0aCBEYWtvdGE7NDY7MDswO3N0YXRlCitVUztVUy1UTjtUZW5uZXNzZWU7NDc7MDswO3N0YXRlCitVUztVUy1UWDtUZXhhczs0ODswOzA7c3RhdGUKK1VTO1VTLVVUO1V0YWg7NDk7MDswO3N0YXRlCitVUztVUy1WVDtWZXJtb250OzUwOzA7MDtzdGF0ZQorVVM7VVMtVkE7VmlyZ2luaWE7NTE7MDswO3N0YXRlCitVUztVUy1EVU1NWTQ7VmlzOzUyOzA7MDtzdGF0ZQorVVM7VVMtV0E7V2FzaGluZ3Rvbjs1MzswOzA7c3RhdGUKK1VTO1VTLVdWO1dlc3QgVmlyZ2luaWE7NTQ7MDswO3N0YXRlCitVUztVUy1XSTtXaXNjb25zaW47NTU7MDswO3N0YXRlCitVUztVUy1XWTtXeW9taW5nOzU2OzA7MDtzdGF0ZQorVVM7VVMtREM7RGlzdHJpY3Qgb2YgQ29sdW1iaWE7MTE7MDswO2Rpc3RyaWN0CisjVVM7VVMtQVM7QW1lcmljYW4gU2Ftb2E7MDswOzA7b3V0bHlpbmcgYXJlYQorI1VTO1VTLUdVO0d1YW07MDswOzA7b3V0bHlpbmcgYXJlYQorI1VTO1VTLU1QO05vcnRoZXJuIE1hcmlhbmEgSXNsYW5kczswOzA7MDtvdXRseWluZyBhcmVhCitVUztVUy1QUjtQdWVydG8gUmljbzs3MjswOzA7b3V0bHlpbmcgYXJlYQorI1VTO1VTLVVNO1VuaXRlZCBTdGF0ZXMgTWlub3I7MDswOzA7b3V0bHlpbmcgYXJlYQorI1VTO1VTLVZJO1ZpcmdpbiBJc2xhbmRzLCBVLlMuOzA7MDswO291dGx5aW5nIGFyZWEKK1BSO1BSLVRSO1B1ZXJ0byBSaWNvOzA7MDswO291dGx5aW5nIGFyZWEKK0JSO0JSLURGO0Rpc3RyaXRvIEZlZGVyYWw7MDswOzA7ZmVkZXJhbCBkaXN0cmljdAorQlI7QlItQUM7QWNyZTswOzA7MDtzdGF0ZQorQlI7QlItQUw7QWxhZ29hczswOzA7MDtzdGF0ZQorQlI7QlItQVA7QW1hcGE7MDswOzA7c3RhdGUKK0JSO0JSLUFNO0FtYXpvbmFzOzA7MDswO3N0YXRlCitCUjtCUi1CQTtCYWhpYTswOzA7MDtzdGF0ZQorQlI7QlItQ0U7Q2VhcmE7MDswOzA7c3RhdGUKK0JSO0JSLUVTO0VzcGlyaXR1IFNhbnRvOzA7MDswO3N0YXRlCitCUjtCUi1HTztHb2lhczswOzA7MDtzdGF0ZQorQlI7QlItTUE7TWFyYW5oYW87MDswOzA7c3RhdGUKK0JSO0JSLU1UO01hdG8gR3Jvc3NvOzA7MDswO3N0YXRlCitCUjtCUi1NUztNYXRvIEdyb3NzbyBkbyBTdWw7MDswOzA7c3RhdGUKK0JSO0JSLU1HO01pbmFzIEdlcmFpczswOzA7MDtzdGF0ZQorQlI7QlItUEE7UGFyYTswOzA7MDtzdGF0ZQorQlI7QlItUEI7UGFyYWliYTswOzA7MDtzdGF0ZQorQlI7QlItUFI7UGFyYW5hOzA7MDswO3N0YXRlCitCUjtCUi1QRTtQZXJuYW1idWNvOzA7MDswO3N0YXRlCitCUjtCUi1SSjtSaW8gZGUgSmFuZWlybzswOzA7MDtzdGF0ZQorQlI7QlItUk47UmlvIEdyYW5kZSBkbyBOb3J0ZTswOzA7MDtzdGF0ZQorQlI7QlItUlM7UmlvIEdyYW5kZSBkbyBTdWwgW1JpbyBHcmFhbmRlIGRvIHN1bF0gW1JpbyBncm5kZSBkbyBzdWxdIDswOzA7MDtzdGF0ZQorQlI7QlItUk87Um9uZG9uaWE7MDswOzA7c3RhdGUKK0JSO0JSLVJSO1JvcmFpbWE7MDswOzA7c3RhdGUKK0JSO0JSLVNDO1NhbnRhIENhdGFyaW5hOzA7MDswO3N0YXRlCitCUjtCUi1TUDtTYW8gUGF1bG87MDswOzA7c3RhdGUKK0JSO0JSLVNFO1NlcmdpcGU7MDswOzA7c3RhdGUKK0JSO0JSLVRPO1RvY2FudGluczswOzA7MDtzdGF0ZQorR1Q7R1QtQVY7QWx0YSBWZXJhcGF6OzA7MDswCitHVDtHVC1CVjtCYWphIFZlcmFwYXo7MDswOzAKK0dUO0dULUNNO0NoaW1hbHRlbmFuZ287MDswOzAKK0dUO0dULUNRO0NoaXF1aW11bGE7MDswOzAKK0dUO0dULVBSO0VsIFByb2dyZXNvOzA7MDswCitHVDtHVC1FUztFc2N1aW50bGE7MDswOzAKK0dUO0dULUdVO0d1YXRlbWFsYTswOzA7MAorR1Q7R1QtSFU7SHVlaHVldGVuYW5nbzswOzA7MAorR1Q7R1QtSVo7SXphYmFsOzA7MDswCitHVDtHVC1KQTtKYWxhcGE7MDswOzAKK0dUO0dULUpVO0p1dGlhcGE7MDswOzAKK0dUO0dULVBFO1BldGVuOzA7MDswCitHVDtHVC1RWjtRdWV0emFsdGVuYW5nbzswOzA7MAorR1Q7R1QtUUM7UXVpY2hlOzA7MDswCitHVDtHVC1SRTtSZXRhbGh1bGV1OzA7MDswCitHVDtHVC1TQTtTYWNhdGVwZXF1ZXo7MDswOzAKK0dUO0dULVNNO1NhbiBNYXJjb3M7MDswOzAKK0dUO0dULVNSO1NhbnRhIFJvc2E7MDswOzAKK0dUO0dULVNPO1NvbG9sYTswOzA7MAorR1Q7R1QtU1U7U3VjaGl0ZXBlcXVlejswOzA7MAorR1Q7R1QtVE87VG90b25pY2FwYW47MDswOzAKK0dUO0dULVpBO1phY2FwYTswOzA7MAorR1c7R1ctQlM7Qmlzc2F1OzA7MDswYXV0b25vbW91cyBzZWN0b3IKK0dXO0dXLUJBO0JhZmF0YTswOzA7TDtyZWdpb24KK0dXO0dXLUJNO0Jpb21ibzswOzA7TjtyZWdpb24KK0dXO0dXLUJMO0JvbGFtYTswOzA7UztyZWdpb24KK0dXO0dXLUNBO0NhY2hldTswOzA7TjtyZWdpb24KK0dXO0dXLUdBO0dhYnU7MDswO0w7cmVnaW9uCitHVztHVy1PSTtPaW87MDswO047cmVnaW9uCitHVztHVy1RVTtRdWluYXJhOzA7MDtTO3JlZ2lvbgorR1c7R1ctVE87VG9tYmFsaTswOzA7UztyZWdpb24KK0hOO0hOLUFUO0F0bGFudGlkYTswOzA7MAorSE47SE4tQ0w7Q29sb247MDswOzAKK0hOO0hOLUNNO0NvbWF5YWd1YTswOzA7MAorSE47SE4tQ1A7Q29wYW47MDswOzAKK0hOO0hOLUNSO0NvcnRlczswOzA7MAorSE47SE4tQ0g7Q2hvbHV0ZWNhOzA7MDswCitITjtITi1FUDtFbCBQYXJhaXNvOzA7MDswCitITjtITi1GTTtGcmFuY2lzY28gTW9yYXphbjswOzA7MAorSE47SE4tR0Q7R3JhY2lhcyBhIERpb3M7MDswOzAKK0hOO0hOLUlOO0ludGlidWNhOzA7MDswCitITjtITi1JQjtJc2xhcyBkZSBsYSBCYWhpYTswOzA7MAorSE47SE4tTFA7TGEgUGF6OzA7MDswCitITjtITi1MRTtMZW1waXJhOzA7MDswCitITjtITi1PTDtPbGFuY2hvOzA7MDswCitITjtITi1TQjtTYW50YSBCYXJiYXJhOzA7MDswCitITjtITi1WQTtWYWxsZTswOzA7MAorSE47SE4tWU87WW9ybzswOzA7MAorSFI7SFItMjtHcmFkIFphZ3JlYjswOzA7MGNpdHkKK0hSO0hSLTA3O0JqZWxvdmFyc2tvLWJpbG9nb3Jza2EgenVwYW5pamE7MDswO2NvdW50eQorSFI7SFItMjtCcm9kc2tvLXBvc2F2c2thIHp1cGFuaWphOzA7MDtjb3VudHkKK0hSO0hSLTk7RHVicm92YWtvLW5lcmV0dmFuc2thIHp1cGFuaWphOzA7MDtjb3VudHkKK0dZO0dZLUJBO0JhcmltYS1XYWluaTswOzA7MAorSFI7SFItODtJc3RhcnNrYSB6dXBhbmlqYTswOzA7Y291bnR5CitIUjtIUi0wNDtLYXJsb3Zha2EgenVwYW5pamE7MDswO2NvdW50eQorSFI7SFItMDY7S29wcml2bmlrby1rcml6ZXZhIGthIHp1cGFuaWphOzA7MDtjb3VudHkKK0hSO0hSLTAyO0tyYXBpbnNrby16YWdvcnNrYSB6dXBhbmlqYTswOzA7Y291bnR5CitIUjtIUi0wOTtMaWtvLXNlbmpza2EgenVwYW5pamE7MDswO2NvdW50eQorSFI7SFItMjA7TWVpbXVyc2thIHp1cGFuaWphOzA7MDtjb3VudHkKK0hSO0hSLTQ7T3NqZWtvLWJhcmFuanNrYSB6dXBhbmlqYTswOzA7Y291bnR5CitIUjtIUi07UG96ZXNrby1zbGF2b25za2EgenVwYW5pamE7MDswO2NvdW50eQorSFI7SFItMDg7UHJpbW9yc2tvLWdvcmFuc2thIHp1cGFuaWphOzA7MDtjb3VudHkKK0hSO0hSLTAzO1Npc2Frby1tb3NsYXZha2EgenVwYW5pamE7MDswO2NvdW50eQorSFI7SFItNztTcGxpdHNrby1kYWxtYXRpbnNrYSB6dXBhbmlqYTswOzA7Y291bnR5CitIUjtIUi01O3NpYmVuc2tvLWtuaW5za2EgenVwYW5pamE7MDswO2NvdW50eQorSFI7SFItMDU7VmFyYXpkaW5za2EgenVwYW5pamE7MDswO2NvdW50eQorSFI7SFItMDtWaXJvdml0aWtvLXBvZHJhdnNrYSB6dXBhbmlqYTswOzA7Y291bnR5CitIUjtIUi02O1Z1a292YXJza28tc3JpamVtc2thIHp1cGFuaWphOzA7MDtjb3VudHkKK0hSO0hSLTM7WmFkYXJza2EgenVwYW5pamE7MDswO2NvdW50eQorSFI7SFItMDtaYWdyZWJha2EgenVwYW5pamE7MDswO2NvdW50eQorSFQ7SFQtQVI7QXJ0aWJvbml0ZTswOzA7MAorSFQ7SFQtQ0U7Q2VudHJlOzA7MDswCitIVDtIVC1HQTtHcmFuZGUtQW5zZTswOzA7MAorSFQ7SFQtTkQ7Tm9yZDswOzA7MAorSFQ7SFQtTkU7Tm9yZC1Fc3Q7MDswOzAKK0hUO0hULU5PO05vcmQtT3Vlc3Q7MDswOzAKK0hUO0hULU9VO091ZXN0OzA7MDswCitIVDtIVC1TRDtTdWQ7MDswOzAKK0hUO0hULVNFO1N1ZC1Fc3Q7MDswOzAKK0hVO0hVLUJVO0J1ZGFwZXN0OzA7MDswO2NhcGl0YWwgY2l0eQorSFU7SFUtQks7QmFjcy1LaXNrdW47MDswO2NvdW50eQorSFU7SFUtQkE7QmFyYW55YTswOzA7Y291bnR5CitIVTtIVS1CRTtCZWtlczswOzA7Y291bnR5CitIVTtIVS1CWjtCb3Jzb2QtQWJhdWotWmVtcGxlbjswOzA7Y291bnR5CitIVTtIVS1DUztDc29uZ3JhZDswOzA7Y291bnR5CitIVTtIVS1GRTtGZWplcjswOzA7Y291bnR5CitIVTtIVS1HUztHeXItTW9zb24tU29wcm9uOzA7MDtjb3VudHkKK0hVO0hVLUhCO0hhamR1LUJpaGFyOzA7MDtjb3VudHkKK0hVO0hVLUhFO0hldmVzOzA7MDtjb3VudHkKK0hVO0hVLUpOO0phc3otTmFneWt1bi1Tem9sbm9rOzA7MDtjb3VudHkKK0hVO0hVLUtFO0tvbWFyb20tRXN6dGVyZ29tOzA7MDtjb3VudHkKK0hVO0hVLU5PO05vZ3JhZDswOzA7Y291bnR5CitIVTtIVS1QRTtQZXN0OzA7MDtjb3VudHkKK0hVO0hVLVNPO1NvbW9neTswOzA7Y291bnR5CitIVTtIVS1TWjtTemFib2xjcy1TemF0bWFyLUJlcmVnOzA7MDtjb3VudHkKK0hVO0hVLVRPO1RvbG5hOzA7MDtjb3VudHkKK0hVO0hVLVZBO1ZhczswOzA7Y291bnR5CitIVTtIVS1WRTtWZXN6cHJlbTswOzA7Y291bnR5CitIVTtIVS1aQTtaYWxhOzA7MDtjb3VudHkKK0hVO0hVLUJDO0Jla2VzY3NhYmE7MDswOzA7Y2l0eSBvZiBjb3VudHkgcmlnaHQKK0hVO0hVLURFO0RlYnJlY2VuOzA7MDswO2NpdHkgb2YgY291bnR5IHJpZ2h0CitIVTtIVS1EVTtEdW5hdWp2YXJvczswOzA7MDtjaXR5IG9mIGNvdW50eSByaWdodAorSFU7SFUtRUc7RWdlcjswOzA7MDtjaXR5IG9mIGNvdW50eSByaWdodAorSFU7SFUtR1k7R3lyOzA7MDswO2NpdHkgb2YgY291bnR5IHJpZ2h0CitIVTtIVS1IVjtIb2RtZXp2YXNhcmhlbHk7MDswOzA7Y2l0eSBvZiBjb3VudHkgcmlnaHQKK0hVO0hVLUtWO0thcG9zdmFyOzA7MDswO2NpdHkgb2YgY291bnR5IHJpZ2h0CitIVTtIVS1LTTtLZWNza2VtZXQ7MDswOzA7Y2l0eSBvZiBjb3VudHkgcmlnaHQKK0hVO0hVLU1JO01pc2tvbGM7MDswOzA7Y2l0eSBvZiBjb3VudHkgcmlnaHQKK0hVO0hVLU5LO05hZ3lrYW5penNhOzA7MDswO2NpdHkgb2YgY291bnR5IHJpZ2h0CitIVTtIVS1OWTtOeWlyZWd5aGF6YTswOzA7MDtjaXR5IG9mIGNvdW50eSByaWdodAorSFU7SFUtUFM7UGVjczswOzA7MDtjaXR5IG9mIGNvdW50eSByaWdodAorSFU7SFUtU1Q7U2FsZ290YXJqYW47MDswOzA7Y2l0eSBvZiBjb3VudHkgcmlnaHQKK0hVO0hVLVNOO1NvcHJvbjswOzA7MDtjaXR5IG9mIGNvdW50eSByaWdodAorSFU7SFUtU0Q7U3plZ2VkOzA7MDswO2NpdHkgb2YgY291bnR5IHJpZ2h0CitIVTtIVS1TRjtTemVrZXNmZWhlcnZhcjswOzA7MDtjaXR5IG9mIGNvdW50eSByaWdodAorSFU7SFUtU1M7U3pla3N6YXJkOzA7MDswO2NpdHkgb2YgY291bnR5IHJpZ2h0CitIVTtIVS1TSztTem9sbm9rOzA7MDswO2NpdHkgb2YgY291bnR5IHJpZ2h0CitIVTtIVS1TSDtTem9tYmF0aGVseTswOzA7MDtjaXR5IG9mIGNvdW50eSByaWdodAorSFU7SFUtVEI7VGF0YWJhbnlhOzA7MDswO2NpdHkgb2YgY291bnR5IHJpZ2h0CitIVTtIVS1WTTtWZXN6cHJlbTswOzA7MDtjaXR5IG9mIGNvdW50eSByaWdodAorSFU7SFUtWkU7WmFsYWVnZXJzemVnOzA7MDswO2NpdHkgb2YgY291bnR5IHJpZ2h0CitJRDtJRC1CQTtCYWxpOzA7MDtOVTtwcm92aW5jZQorSUQ7SUQtQkI7QmFuZ2thIEJlbGl0dW5nOzA7MDtTTTtwcm92aW5jZQorSUQ7SUQtQlQ7QmFudGVuOzA7MDtKVztwcm92aW5jZQorSUQ7SUQtQkU7QmVuZ2t1bHU7MDswO1NNO3Byb3ZpbmNlCitJRDtJRC1HTztHb3JvbnRhbG87MDswO1NMO3Byb3ZpbmNlCitJRDtJRC1KQTtKYW1iaTswOzA7U007cHJvdmluY2UKK0lEO0lELUpCO0phd2EgQmFyYXQ7MDswO0pXO3Byb3ZpbmNlCitJRDtJRC1KVDtKYXdhIFRlbmdhaDswOzA7Slc7cHJvdmluY2UKK0lEO0lELUpJO0phd2EgVGltdXI7MDswO0pXO3Byb3ZpbmNlCitJRDtJRC1LQjtLYWxpbWFudGFuIEJhcmF0OzA7MDtLQTtwcm92aW5jZQorSUQ7SUQtS1M7S2FsaW1hbnRhbiBTZWxhdGFuOzA7MDtLQTtwcm92aW5jZQorSUQ7SUQtS1Q7S2FsaW1hbnRhbiBUZW5nYWg7MDswO0tBO3Byb3ZpbmNlCitJRDtJRC1LSTtLYWxpbWFudGFuIFRpbXVyOzA7MDtLQTtwcm92aW5jZQorSUQ7SUQtTEE7TGFtcHVuZzswOzA7U007cHJvdmluY2UKK0lEO0lELU1BO01hbHVrdTswOzA7TUE7cHJvdmluY2UKK0lEO0lELU1VO01hbHVrdSBVdGFyYTswOzA7TUE7cHJvdmluY2UKK0lEO0lELU5CO051c2EgVGVuZ2dhcmEgQmFyYXQ7MDswO05VO3Byb3ZpbmNlCitJRDtJRC1OVDtOdXNhIFRlbmdnYXJhIFRpbXVyOzA7MDtOVTtwcm92aW5jZQorSUQ7SUQtUEE7UGFwdWE7MDswO0lKO3Byb3ZpbmNlCitJRDtJRC1SSTtSaWF1OzA7MDtTTTtwcm92aW5jZQorSUQ7SUQtU047U3VsYXdlc2kgU2VsYXRhbjswOzA7U0w7cHJvdmluY2UKK0lEO0lELVNUO1N1bGF3ZXNpIFRlbmdhaDswOzA7U0w7cHJvdmluY2UKK0lEO0lELVNHO1N1bGF3ZXNpIFRlbmdnYXJhOzA7MDtTTDtwcm92aW5jZQorSUQ7SUQtU0E7U3VsYXdlc2kgVXRhcmE7MDswO1NMO3Byb3ZpbmNlCitJRDtJRC1TQjtTdW1hdGVyYSBCYXJhdDswOzA7U007cHJvdmluY2UKK0lEO0lELVNTO1N1bWF0ZXJhIFNlbGF0YW47MDswO1NNO3Byb3ZpbmNlCitJRDtJRC1TVTtTdW1hdGVyYSBVdGFyYTswOzA7U007cHJvdmluY2UKK0lEO0lELUpLO0pha2FydGEgUmF5YTswOzA7Slc7c3BlY2lhbCBkaXN0cmljdAorSUQ7SUQtQUM7QWNlaDswOzA7U007YXV0b25vbW91cyBwcm92aW5jZQorSUQ7SUQtWU87WW9neWFrYXJ0YTswOzA7Slc7c3BlY2lhbCByZWdpb24KK0lFO0lFLUNXO0NhcmxvdztDZWF0aGFybGFjaDswO0wKK0lFO0lFLUNOO0NhdmFuO0FuIENhYmhhbjswO1UKK0lFO0lFLUNFO0NsYXJlO0FuIENsYXI7MDtNCitJRTtJRS1DO0Nvcms7Q29yY2FpZ2g7MDtNCitJRTtJRS1ETDtEb25lZ2FsO0R1biBuYSBuR2FsbDswO1UKK0lFO0lFLUQ7RHVibGluO0JhaWxlIGF0aGEgQ2xpYXRoOzA7TAorSUU7SUUtRztHYWx3YXk7R2FpbGxpbWg7MDtDCitJRTtJRS1LWTtLZXJyeTtDaWFycmFpOzA7TQorSUU7SUUtS0U7S2lsZGFyZTtDaWxsIERhcmE7MDtMCitJRTtJRS1LSztLaWxrZW5ueTtDaWxsIENoYWlubmlnaDswO0wKK0lFO0lFLUxTO0xhb2lzO0xhb2lzOzA7TAorSUU7SUUtTE07TGVpdHJpbTtMaWF0cm9pbTswO0MKK0lFO0lFLUxLO0xpbWVyaWNrO0x1aW1uZWFjaDswO00KK0lFO0lFLUxEO0xvbmdmb3JkO0FuIExvbmdmb3J0OzA7TAorSUU7SUUtTEg7TG91dGg7THU7MDtMCitJRTtJRS1NTztNYXlvO01haWdoIEVvOzA7QworSUU7SUUtTUg7TWVhdGg7QW4gTWhpOzA7TAorSUU7SUUtTU47TW9uYWdoYW47TXVpbmVhY2hhbjswO1UKK0lFO0lFLU9ZO09mZmFseTtVaWJoIEZoYWlsaTswO0wKK0lFO0lFLVJOO1Jvc2NvbW1vbjtSb3MgQ29tYWluOzA7QworSUU7SUUtU087U2xpZ287U2xpZ2VhY2g7MDtDCitJRTtJRS1UQTtUaXBwZXJhcnk7VGlvYnJhaWQgYXJhbm47MDtNCitJRTtJRS1XRDtXYXRlcmZvcmQ7UG9ydCBMYWlyZ2U7MDtNCitJRTtJRS1XSDtXZXN0bWVhdGg7QW4gSWFybWhpOzA7TAorSUU7SUUtV1g7V2V4Zm9yZDtMb2NoIEdhcm1hbjswO0wKK0lFO0lFLVdXO1dpY2tsb3c7Q2lsbCBNaGFudGFpbjswO0wKK0lMO0lMLUQ7SGFEYXJvbTtFbCBKYWNvYjswOzAKK0lMO0lMLU07SGFNZXJrYXo7RWwgQXdzYTswOzAKK0lMO0lMLVo7SGEgWmFmb247RXNoIFNoYW1hbGk7MDswCitJTDtJTC1IQTtIYWlmYTs/ZWlmPzswOzAKK0lMO0lMLVRBO1RlbC1Bdml2O1RlbGwgQWI/YjswOzAKK0lMO0lMLUpNO1llcnVzaGFsYXlpbTtBbCBRdWRzOzA7MAorSU47SU4tQVA7QW5kaHJhIFByYWRlc2g7MDswOzBzdGF0ZQorSU47SU4tQVI7QXJ1bmFjaGFsIFByYWRlc2g7MDswOzBzdGF0ZQorSU47SU4tQVM7QXNzYW07MDswOzBzdGF0ZQorSU47SU4tQlI7QmloYXI7MDswOzBzdGF0ZQorSU47SU4tQ1Q7Q2hoYXR0YXNnYXJoOzA7MDswc3RhdGUKK0lOO0lOLUdBO0dvYTswOzA7MHN0YXRlCitJTjtJTi1HSjtHdWphcmF0OzA7MDswc3RhdGUKK0lOO0lOLUhSO0hhcnlhbmE7MDswOzBzdGF0ZQorSU47SU4tSFA7SGltYWNoYWwgUHJhZGVzaDswOzA7MHN0YXRlCitJTjtJTi1KSztKYW1tdSBhbmQgS2FzaG1pcjswOzA7MHN0YXRlCitJTjtJTi1KSDtKaGFya2hhbmQ7MDswOzBzdGF0ZQorSU47SU4tS0E7S2FybmF0YWthOzA7MDswc3RhdGUKK0lOO0lOLUtMO0tlcmFsYTswOzA7MHN0YXRlCitJTjtJTi1NUDtNYWRoeWEgUHJhZGVzaDswOzA7MHN0YXRlCitJTjtJTi1NSDtNYWhhcmFzaHRyYTswOzA7MHN0YXRlCitJTjtJTi1NTjtNYW5pcHVyOzA7MDswc3RhdGUKK0lOO0lOLU1MO01lZ2hhbGF5YTswOzA7MHN0YXRlCitJTjtJTi1NWjtNaXpvcmFtOzA7MDswc3RhdGUKK0lOO0lOLU5MO05hZ2FsYW5kOzA7MDswc3RhdGUKK0lOO0lOLU9SO09yaXNzYTswOzA7MHN0YXRlCitJTjtJTi1QQjtQdW5qYWI7MDswOzBzdGF0ZQorSU47SU4tUko7UmFqYXN0aGFuOzA7MDswc3RhdGUKK0lOO0lOLVNLO1Npa2tpbTswOzA7MHN0YXRlCitJTjtJTi1UTjtUYW1pbCBOYWR1OzA7MDswc3RhdGUKK0lOO0lOLVRSO1RyaXB1cmE7MDswOzBzdGF0ZQorSU47SU4tVUw7VXR0YXJhbmNoYWw7MDswOzBzdGF0ZQorSU47SU4tVVA7VXR0YXIgUHJhZGVzaDswOzA7MHN0YXRlCitJTjtJTi1XQjtXZXN0IEJlbmdhbDswOzA7MHN0YXRlCitJTjtJTi1BTjtBbmRhbWFuIGFuZCBOaWNvYmFyIElzbGFuZHM7MDswOzB1bmlvbiB0ZXJyaXRvcnkKK0lOO0lOLUNIO0NoYW5kaWdhcmg7MDswOzB1bmlvbiB0ZXJyaXRvcnkKK0lOO0lOLUROO0RhZHJhIGFuZCBOYWdhciBIYXZlbGk7MDswOzB1bmlvbiB0ZXJyaXRvcnkKK0lOO0lOLUREO0RhbWFuIGFuZCBEaXU7MDswOzB1bmlvbiB0ZXJyaXRvcnkKK0lOO0lOLURMO0RlbGhpOzA7MDswdW5pb24gdGVycml0b3J5CitJTjtJTi1MRDtMYWtzaGFkd2VlcDswOzA7MHVuaW9uIHRlcnJpdG9yeQorSU47SU4tUFk7UG9uZGljaGVycnk7MDswOzB1bmlvbiB0ZXJyaXRvcnkKK0lRO0lRLUFOO0FsIEFuYnI7MDswOzAKK0lRO0lRLUJBO0FsIEJhcmFoOzA7MDswCitJUTtJUS1NVTtBbCBNdXRoYW5uYTswOzA7MAorSVE7SVEtUUE7QWwgUWRpc3lhaDswOzA7MAorSVE7SVEtTkE7QW4gTmFqYWY7MDswOzAKK0lRO0lRLUFSO0FyYmw7MDswOzAKK0lRO0lRLVNVO0FzIFN1bGF5bW55YWg7MDswOzAKK0lRO0lRLVRTO0F0IFRhbW07MDswOzAKK0lRO0lRLUJCO0JiaWw7MDswOzAKK0lRO0lRLUJHO0JhZ2hkZDswOzA7MAorSVE7SVEtREE7RGFoazswOzA7MAorSVE7SVEtRFE7RGggUXI7MDswOzAKK0lRO0lRLURJO0RpeWxhOzA7MDswCitJUTtJUS1LQTtLYXJiYWw7MDswOzAKK0lRO0lRLU1BO01heXNuOzA7MDswCitJUTtJUS1OSTtObmF3YTswOzA7MAorSVE7SVEtU0Q7YWwgYWQgRG47MDswOzAKK0lRO0lRLVdBO1dzaTswOzA7MAorSVI7SVItMDM7QXJkYWJsOzA7MDswCitJUjtJUi0wMjt6YXJieWpuLWUgR2hhcmI7MDswOzAKK0lSO0lSLTA7emFyYnlqbi1lIFNoYXJxOzA7MDswCitJUjtJUi0wNjtCc2hlaHI7MDswOzAKK0lSO0lSLTA4O0NoYWhyIE1haGxsIHZhIEJha2h0cjswOzA7MAorSVI7SVItMDQ7RWZhaG47MDswOzAKK0lSO0lSLTQ7RnJzOzA7MDswCitJUjtJUi05O0dsbjswOzA7MAorSVI7SVItMjc7R29sZXN0bjswOzA7MAorSVI7SVItMjQ7SGFtYWRuOzA7MDswCitJUjtJUi0yMztIb3Jtb3pnbjswOzA7MAorSVI7SVItMDU7bG07MDswOzAKK0lSO0lSLTU7S2VybW47MDswOzAKK0lSO0lSLTc7S2VybW5zaGg7MDswOzAKK0lSO0lSLTA5O0tob3JzbjswOzA7MAorSVI7SVItMTA7S2h6ZXN0bjswOzA7MAorSVI7SVItODtLb2hrbHllaCB2YSBCeWVyIEFobWFkOzA7MDswCitJUjtJUi02O0tvcmRlc3RuOzA7MDswCitHUTtHUS1DO1JlZ2lvbiBDb250aW5lbnRhbDswOzA7cmVnaW9uCitHUTtHUS1JO1JlZ2lvbiBJbnN1bGFyOzA7MDtyZWdpb24KK0dRO0dRLUFOO0Fubm9ib247MDswO0k7cHJvdmluY2UKK0dRO0dRLUJOO0Jpb2tvIE5vcnRlOzA7MDtJO3Byb3ZpbmNlCitHUTtHUS1CUztCaW9rbyBTdXI7MDswO0k7cHJvdmluY2UKK0dRO0dRLUNTO0NlbnRybyBTdXI7MDswO0M7cHJvdmluY2UKK0dRO0dRLUtOO0tpZS1OdGVtOzA7MDtDO3Byb3ZpbmNlCitHUTtHUS1MSTtMaXRvcmFsOzA7MDtDO3Byb3ZpbmNlCitHUTtHUS1XTjtXZWxlLU56YXM7MDswO0M7cHJvdmluY2UKK0dSO0dSLTM7QWNoYWlhOzA7MDtWSUk7ZGVwYXJ0bWVudAorR1I7R1ItMDtBaXRvbGlhLUFrYXJuYW5pYTswOzA7VklJO2RlcGFydG1lbnQKK0dSO0dSLTtBcmdvbGlzOzA7MDtYO2RlcGFydG1lbnQKK0dSO0dSLTI7QXJrYWRpYTswOzA7WDtkZXBhcnRtZW50CitHUjtHUi0zO0FydGE7MDswO0lWO2RlcGFydG1lbnQKK0dSO0dSLUE7QXR0aWtpOzA7MDtJWDtkZXBhcnRtZW50CitHUjtHUi02NDtDaGFsa2lkaWtpOzA7MDtJSTtkZXBhcnRtZW50CitHUjtHUi05NDtDaGFuaWE7MDswO1hJSUk7ZGVwYXJ0bWVudAorR1I7R1ItODU7Q2hpb3M7MDswO1hJO2RlcGFydG1lbnQKK0dSO0dSLTg7RG9kZWthbmlzb3M7MDswO1hJSTtkZXBhcnRtZW50CitHUjtHUi01MjtEcmFtYTswOzA7STtkZXBhcnRtZW50CitHUjtHUi03O0V2cm9zOzA7MDtJO2RlcGFydG1lbnQKK0dSO0dSLTA1O0V2cnl0YW5pYTswOzA7VklJSTtkZXBhcnRtZW50CitHUjtHUi0wNDtFdnZvaWE7MDswO1ZJSUk7ZGVwYXJ0bWVudAorR1I7R1ItNjM7RmxvcmluYTswOzA7SUlJO2RlcGFydG1lbnQKK0dSO0dSLTA3O0Zva2lzOzA7MDtWSUlJO2RlcGFydG1lbnQKK0dSO0dSLTA2O0Z0aGlvdGlzOzA7MDtWSUlJO2RlcGFydG1lbnQKK0dSO0dSLTU7R3JldmVuYTswOzA7SUlJO2RlcGFydG1lbnQKK0dSO0dSLTQ7SWxlaWE7MDswO1ZJSTtkZXBhcnRtZW50CitHUjtHUi01MztJbWF0aGlhOzA7MDtJSTtkZXBhcnRtZW50CitHUjtHUi0zMztJb2FubmluYTswOzA7SVY7ZGVwYXJ0bWVudAorR1I7R1ItOTtJcmFrbGVpb247MDswO1hJSUk7ZGVwYXJ0bWVudAorR1I7R1ItNDtLYXJkaXRzYTswOzA7VjtkZXBhcnRtZW50CitHUjtHUi01NjtLYXN0b3JpYTswOzA7SUlJO2RlcGFydG1lbnQKK0dSO0dSLTU1O0thdmFsbGE7MDswO0k7ZGVwYXJ0bWVudAorR1I7R1ItMjM7S2VmYWxsaW5pYTswOzA7Vkk7ZGVwYXJ0bWVudAorR1I7R1ItMjI7S2Vya3lyYTswOzA7Vkk7ZGVwYXJ0bWVudAorR1I7R1ItNTc7S2lsa2lzOzA7MDtJSTtkZXBhcnRtZW50CitHUjtHUi01O0tvcmludGhpYTswOzA7WDtkZXBhcnRtZW50CitHUjtHUi01ODtLb3phbmk7MDswO0lJSTtkZXBhcnRtZW50CitHUjtHUi04MjtLeWtsYWRlczswOzA7WElJO2RlcGFydG1lbnQKK0dSO0dSLTY7TGFrb25pYTswOzA7WDtkZXBhcnRtZW50CitHUjtHUi00MjtMYXJpc2E7MDswO1Y7ZGVwYXJ0bWVudAorR1I7R1ItOTI7TGFzaXRoaW9uOzA7MDtYSUlJO2RlcGFydG1lbnQKK0dSO0dSLTI0O0xlZmthczswOzA7Vkk7ZGVwYXJ0bWVudAorR1I7R1ItODM7TGVzdm9zOzA7MDtYSTtkZXBhcnRtZW50CitHUjtHUi00MztNYWduaXNpYTswOzA7VjtkZXBhcnRtZW50CitHUjtHUi03O01lc3NpbmlhOzA7MDtYO2RlcGFydG1lbnQKK0dSO0dSLTU5O1BlbGxhOzA7MDtJSTtkZXBhcnRtZW50CitHUjtHUi02O1BpZXJpYTswOzA7SUk7ZGVwYXJ0bWVudAorR1I7R1ItMzQ7UHJldmV6YTswOzA7SVY7ZGVwYXJ0bWVudAorR1I7R1ItOTM7UmV0aHltbm9uOzA7MDtYSUlJO2RlcGFydG1lbnQKK0dSO0dSLTczO1JvZG9waTswOzA7STtkZXBhcnRtZW50CitHUjtHUi04NDtTYW1vczswOzA7WEk7ZGVwYXJ0bWVudAorR1I7R1ItNjI7U2VycmFpOzA7MDtJSTtkZXBhcnRtZW50CitHUjtHUi0zMjtUaGVzcHJvdGlhOzA7MDtJVjtkZXBhcnRtZW50CitHUjtHUi01NDtUaGVzc2Fsb25pa2k7MDswO0lJO2RlcGFydG1lbnQKK0dSO0dSLTQ0O1RyaWthbGE7MDswO1Y7ZGVwYXJ0bWVudAorR1I7R1ItMDM7Vm9pb3RpYTswOzA7VklJSTtkZXBhcnRtZW50CitHUjtHUi03MjtYYW50aGk7MDswO0k7ZGVwYXJ0bWVudAorR1I7R1ItMjtaYWt5bnRob3M7MDswO1ZJO2RlcGFydG1lbnQKK0dSO0dSLTY5O0FnaW8gT3JvczswOzA7MHNlbGYtZ292ZXJuZWQgcGFydAorSVI7SVItMjA7TG9yZXN0bjswOzA7MAorSVI7SVItMjI7TWFya2F6OzA7MDswCitJUjtJUi0yO016YW5kYXJuOzA7MDswCitJUjtJUi0yODtRYXp2bjswOzA7MAorSVI7SVItMjY7UW9tOzA7MDswCitJUjtJUi0yO1NlbW5uOzA7MDswCitJUjtJUi0zO1NzdG4gdmEgQmFsY2hlc3RuOzA7MDswCitJUjtJUi0wNztUZWhybjswOzA7MAorSVI7SVItMjU7WWF6ZDswOzA7MAorSVI7SVItMTE7WmFuam47MDswOzAKK0lTO0lTLTc7QXVzdHVybGFuZDswOzA7MAorSVM7SVMtO0hvZnVvYm9yZ2Fyc3Zhb2kgdXRhbiBSZXlramF2aWt1cjswOzA7MAorSVM7SVMtNjtOb3JvdXJsYW5kIGV5c3RyYTswOzA7MAorSVM7SVMtNTtOb3JvdXJsYW5kIHZlc3RyYTswOzA7MAorSVM7SVMtMDtSZXlramF2aWs7MDswOzAKK0lTO0lTLTg7U3VvdXJsYW5kOzA7MDswCitJUztJUy0yO1N1b3VybmVzOzA7MDswCitJUztJUy00O1Zlc3RmaXJvaXI7MDswOzAKK0lTO0lTLTM7VmVzdHVybGFuZDswOzA7MAorSVQ7SVQtQUc7QWdyaWdlbnRvOzA7MDs4MgorSVQ7SVQtQUw7QWxlc3NhbmRyaWE7MDswOzIKK0lUO0lULUFOO0FuY29uYTswOzA7NTcKK0lUO0lULUFPO0Fvc3RhO0Fvc3RlOzA7MjMKK0lUO0lULUFSO0FyZXp6bzswOzA7NTIKK0lUO0lULUFQO0FzY29saSBQaWNlbm87MDswOzU3CitJVDtJVC1BVDtBc3RpOzA7MDsyCitJVDtJVC1BVjtBdmVsbGlubzswOzA7NzIKK0lUO0lULUJBO0Jhcmk7MDswOzc1CitJVDtJVC1CTDtCZWxsdW5vOzA7MDszNAorSVQ7SVQtQk47QmVuZXZlbnRvOzA7MDs3MgorSVQ7SVQtQkc7QmVyZ2FtbzswOzA7MjUKK0lUO0lULUJJO0JpZWxsYTswOzA7MgorSVQ7SVQtQk87Qm9sb2duYTswOzA7NDUKK0lUO0lULUJaO0JvbHphbm87Qm96ZW4gOzA7MzIKK0lUO0lULUJTO0JyZXNjaWE7MDswOzI1CitJVDtJVC1CUjtCcmluZGlzaTswOzA7NzUKK0lUO0lULUNBO0NhZ2xpYXJpOzA7MDs4OAorSVQ7SVQtQ0w7Q2FsdGFuaXNzZXR0YTswOzA7ODIKK0lUO0lULUNCO0NhbXBvYmFzc287MDswOzY3CitJVDtJVC1DRTtDYXNlcnRhOzA7MDs3MgorSVQ7SVQtQ1Q7Q2F0YW5pYTswOzA7ODIKK0lUO0lULUNaO0NhdGFuemFybzswOzA7NzgKK0lUO0lULUNIO0NoaWV0aTswOzA7NjUKK0lUO0lULUNPO0NvbW87MDswOzI1CitJVDtJVC1DUztDb3NlbnphOzA7MDs3OAorSVQ7SVQtQ1I7Q3JlbW9uYTswOzA7MjUKK0lUO0lULUtSO0Nyb3RvbmU7MDswOzc4CitJVDtJVC1DTjtDdW5lbzswOzA7MgorSVQ7SVQtRU47RW5uYTswOzA7ODIKK0lUO0lULUZFO0ZlcnJhcmE7MDswOzQ1CitJVDtJVC1GSTtGaXJlbnplOzA7MDs1MjsKK0lUO0lULUZHO0ZvZ2dpYTswOzA7NzU7CitJVDtJVC1GTztGb3Js7DswOzA7NDU7CitJVDtJVC1GUjtGcm9zaW5vbmUgOzA7MDs2MjsKK0lUO0lULUdFO0dlbm92YTswOzA7NDI7CitJVDtJVC1HTztHb3JpemlhOzA7MDszNjsKK0lUO0lULUdSO0dyb3NzZXRvOzA7MDs1MjsKK0lUO0lULUlNO0ltcGVyaWE7MDswOzQyOworSVQ7SVQtSVM7SXNlcm5pYTswOzA7Njc7CitJVDtJVC1BUTtMQXF1aWxhOzA7MDs2NTsKK0lUO0lULVNQO0xhIFNwZXppYTswOzA7NDI7CitJVDtJVC1MVDtMYXRpbmE7MDswOzYyOworSVQ7SVQtTEU7TGVjY2U7MDswOzc1OworSVQ7SVQtTEM7TGVjY287MDswOzI1OworSVQ7SVQtTEk7TGl2b3JubzswOzA7NTI7CitJVDtJVC1MTztMb2RpOzA7MDsyNTsKK0lUO0lULUxVO0x1Y2NhOzA7MDs1MjsKK0lUO0lULU1DO01hY2VyYXRhOzA7MDs1NzsKK0lUO0lULU1OO01hbnRvdmE7MDswOzI1OworSVQ7SVQtTVM7TWFzc2EtQ2FycmFyYTswOzA7NTI7CitJVDtJVC1NVDtNYXRlcmE7MDswOzc3OworSVQ7SVQtTUU7TWVzc2luYTswOzA7ODI7CitJVDtJVC1NSTtNaWxhbm87MDswOzI1OworSVQ7SVQtTU87TW9kZW5hOzA7MDs0NTsKK0lUO0lULU5BO05hcG9saTswOzA7NzI7CitJVDtJVC1OTztOb3ZhcmE7MDswOzI7CitJVDtJVC1OVTtOdW9ybzswOzA7ODg7CitJVDtJVC1PUjtPcmlzdGFubzswOzA7ODg7CitJVDtJVC1QRDtQYWRvdmE7MDswOzM0OworSVQ7SVQtUEE7UGFsZXJtbzswOzA7ODI7CitJVDtJVC1QUjtQYXJtYTswOzA7NDU7CitJVDtJVC1QVjtQYXZpYTswOzA7MjU7CitJVDtJVC1QRztQZXJ1Z2lhOzA7MDs1NTsKK0lUO0lULVBTO1Blc2FybyBlIFVyYmlubzswOzA7NTc7CitJVDtJVC1QRTtQZXNjYXJhOzA7MDs2NTsKK0lUO0lULVBDO1BpYWNlbnphOzA7MDs0NTsKK0lUO0lULVBJO1Bpc2E7MDswOzUyOworSVQ7SVQtUFQ7UGlzdG9pYTswOzA7NTI7CitJVDtJVC1QTjtQb3JkZW5vbmU7MDswOzM2OworSVQ7SVQtUFo7UG90ZW56YTswOzA7Nzc7CitJVDtJVC1QTztQcmF0bzswOzA7NTI7CitJVDtJVC1SRztSYWd1c2E7MDswOzgyOworSVQ7SVQtUkE7UmF2ZW5uYTswOzA7NDU7CitJVDtJVC1SQztSZWdnaW8gQ2FsYWJyaWE7MDswOzc4OworSVQ7SVQtUkU7UmVnZ2lvIEVtaWxpYTswOzA7NDU7CitJVDtJVC1SSTtSaWV0aTswOzA7NjI7CitJVDtJVC1STjtSaW1pbmk7MDswOzQ1OworSVQ7SVQtUk07Um9tYTswOzA7NjI7CitJVDtJVC1STztSb3ZpZ287MDswOzM0OworSVQ7SVQtU0E7U2FsZXJubzswOzA7NzI7CitJVDtJVC1TUztTYXNzYXJpOzA7MDs4ODsKK0lUO0lULVNWO1Nhdm9uYTswOzA7NDI7CitJVDtJVC1TSTtTaWVuYTswOzA7NTI7CitJVDtJVC1TUjtTaXJhY3VzYTswOzA7ODI7CitJVDtJVC1TTztTb25kcmlvOzA7MDsyNTsKK0lUO0lULVRBO1RhcmFudG87MDswOzc1OworSVQ7SVQtVEU7VGVyYW1vOzA7MDs2NTsKK0lUO0lULVRSO1Rlcm5pOzA7MDs1NTsKK0lUO0lULVRPO1RvcmlubzswOzA7MjsKK0lUO0lULVRQO1RyYXBhbmk7MDswOzgyOworSVQ7SVQtVE47VHJlbnRvOzA7MDszMjsKK0lUO0lULVRWO1RyZXZpc287MDswOzM0OworSVQ7SVQtVFM7VHJpZXN0ZTswOzA7MzY7CitJVDtJVC1VRDtVZGluZTswOzA7MzY7CitJVDtJVC1WQTtWYXJlc2U7MDswOzI1OworSVQ7SVQtVkU7VmVuZXppYTswOzA7MzQ7CitJVDtJVC1WQjtWZXJiYW5vLUN1c2lvLU9zc29sYTswOzA7MjsKK0lUO0lULVZDO1ZlcmNlbGxpOzA7MDsyOworSVQ7SVQtVlI7VmVyb25hOzA7MDszNDsKK0lUO0lULVZWO1ZpYm8gVmFsZW50aWE7MDswOzc4OworSVQ7SVQtVkk7VmljZW56YTswOzA7MzQ7CitJVDtJVC1WVDtWaXRlcmJvOzA7MDs2MjsKK0pNO0pNLTM7Q2xhcmVuZG9uOzA7MDswCitKTTtKTS0wOTtIYW5vdmVyOzA7MDswCitKTTtKTS0wO0tpbmdzdG9uOzA7MDswCitKTTtKTS0yO01hbmNoZXN0ZXI7MDswOzAKK0pNO0pNLTA0O1BvcnRsYW5kOzA7MDswCitKTTtKTS0wMjtTYWludCBBbmRyZXc7MDswOzAKK0pNO0pNLTA2O1NhaW50IEFubjswOzA7MAorSk07Sk0tNDtTYWludCBDYXRoZXJpbmU7MDswOzAKK0pNO0pNLTtTYWludCBFbGl6YWJldGg7MDswOzAKK0pNO0pNLTA4O1NhaW50IEphbWVzOzA7MDswCitKTTtKTS0wNTtTYWludCBNYXJ5OzA7MDswCitKTTtKTS0wMztTYWludCBUaG9tYXM7MDswOzAKK0pNO0pNLTA3O1RyZWxhd255OzA7MDswCitKTTtKTS0wO1dlc3Rtb3JlbGFuZDswOzA7MAorSk87Sk8tQUo7amxuOzA7MDswCitKTztKTy1BUTtBbCBxYWJhOzA7MDswCitKTztKTy1CQTtBbCBCYWxxOzA7MDswCitKTztKTy1LQTtBbCBLYXJhazswOzA7MAorSk87Sk8tTUE7QWwgTWFmcmFxOzA7MDswCitKTztKTy1BTTttbW47MDswOzAKK0pPO0pPLUFUO0EgYWZsYWg7MDswOzAKK0pPO0pPLUFaO0F6IFphcnE7MDswOzAKK0pPO0pPLUlSO0lyYmlkOzA7MDswCitKTztKTy1KQTtKYXJhc2g7MDswOzAKK0pPO0pPLU1OO01hbjswOzA7MAorSk87Sk8tTUQ7TWRhYmE7MDswOzAKK0pQO0pQLTIzO0FpdGkgW0FpY2hpXTswOzA7MAorSlA7SlAtMDU7QWtpdGE7MDswOzAKK0pQO0pQLTAyO0FvbW9yaTswOzA7MAorSlA7SlAtMzg7RWhpbWU7MDswOzAKK0pQO0pQLTI7R2lodSBbR2lmdV07MDswOzAKK0pQO0pQLTUxO0d1bm1hOzA7MDswCitKUDtKUC0zNDtIaXJvc2ltYSBbSGlyb3NoaW1hXTswOzA7MAorSlA7SlAtMDtIb2trYWlkbyBbSG9ra2FpZG9dOzA7MDswCitKUDtKUC04O0h1a3VpIFtGdWt1aV07MDswOzAKK0pQO0pQLTQwO0h1a3Vva2EgW0Z1a3Vva2FdOzA7MDswCitKUDtKUC0wNztIdWt1c2ltYSBbRnVrdXNoaW1hXTswOzA7MAorSlA7SlAtMjg7SHlvZ28gW0h5b2dvXTswOzA7MAorSlA7SlAtMDg7SWJhcmFraTswOzA7MAorSlA7SlAtNztJc2lrYXdhIFtJc2hpa2F3YV07MDswOzAKK0pQO0pQLTAzO0l3YXRlOzA7MDswCitKUDtKUC0zNztLYWdhd2E7MDswOzAKK0pQO0pQLTQ2O0thZ29zaW1hIFtLYWdvc2hpbWFdOzA7MDswCitKUDtKUC00O0thbmFnYXdhOzA7MDswCitKUDtKUC0zOTtLb3RpIFtLb2NoaV07MDswOzAKK0pQO0pQLTQzO0t1bWFtb3RvOzA7MDswCitKUDtKUC0yNjtLeW90byBbS3lvdG9dOzA7MDswCitKUDtKUC0yNDtNaWU7MDswOzAKK0pQO0pQLTA0O01peWFnaTswOzA7MAorSlA7SlAtNDU7TWl5YXpha2k7MDswOzAKK0pQO0pQLTIwO05hZ2FubzswOzA7MAorSlA7SlAtNDI7TmFnYXNha2k7MDswOzAKK0pQO0pQLTI5O05hcmE7MDswOzAKK0pQO0pQLTU7TmlpZ2F0YTswOzA7MAorSlA7SlAtNDQ7aXRhIFtPaXRhXTswOzA7MAorSlA7SlAtMzM7T2theWFtYTswOzA7MAorSlA7SlAtNDc7T2tpbmF3YTswOzA7MAorSlA7SlAtMjc7c2FrYSBbT3Nha2FdOzA7MDswCitKUDtKUC00O1NhZ2E7MDswOzAKK0pQO0pQLTUwO1NhaXRhbWE7MDswOzAKK0pQO0pQLTI1O1NpZ2EgW1NoaWdhXTswOzA7MAorSlA7SlAtMzI7U2ltYW5lIFtTaGltYW5lXTswOzA7MAorSlA7SlAtMjI7U2l6dW9rYSBbU2hpenVva2FdOzA7MDswCitKUDtKUC01MjtUaWJhIFtDaGliYV07MDswOzAKK0pQO0pQLTA5O1RvdGlnaSBbVG9jaGlnaV07MDswOzAKK0pQO0pQLTM2O1Rva3VzaW1hIFtUb2t1c2hpbWFdOzA7MDswCitKUDtKUC01MztUb2t5byBbVG9reW9dOzA7MDswCitKUDtKUC0zO1RvdHRvcmk7MDswOzAKK0pQO0pQLTY7VG95YW1hOzA7MDswCitKUDtKUC0zMDtXYWtheWFtYTswOzA7MAorSlA7SlAtMDY7WWFtYWdhdGE7MDswOzAKK0pQO0pQLTM1O1lhbWFndXRpIFtZYW1hZ3VjaGldOzA7MDswCitKUDtKUC05O1lhbWFuYXNpIFtZYW1hbmFzaGldOzA7MDswCisjS0U7S0UtMDsgTmFpcm9iaSBbTmFpcm9iaSBNdW5pY2lwYWxpdHldOzA7MDswbXVuaWNpcGFsaXR5CitLRTtLRS0wOyBOYWlyb2JpIFtOYWlyb2JpIE11bmljaXBhbGl0eV07MDswOzBtdW5pY2lwYWxpdHkKK0tFO0tFLTIwMDtDZW50cmFsIFtDZW50cmFsMl07S2F0aTswOzA7cHJvdmluY2UKK0tFO0tFLTMwMDtDb2FzdDtQd2FuaTswOzA7cHJvdmluY2UKK0tFO0tFLTQwMDtFYXN0ZXJuO01hc2hhcmlraTswOzA7cHJvdmluY2UKK0tFO0tFLTUwMDtOb3J0aC1FYXN0ZXJuICBbTi4gRWFzdGVybl07S2Fza2F6aW5pIE1hc2hhcmlraTswOzA7cHJvdmluY2UKK0tFO0tFLTYwMDtOeWFuemE7MDswO3Byb3ZpbmNlCitLRTtLRS03MDA7UmlmdCBWYWxsZXk7MDswO3Byb3ZpbmNlCitLRTtLRS05MDA7V2VzdGVybjtNYWdoYXJpYmk7MDswO3Byb3ZpbmNlCitLRztLRy1DO0No/DtDaHV5c2theWEgb2JsYXN0O3Vqc2thamEgb2JsYXN0OzA7cmVnaW9uCitLRztLRy1KO0phbGFsLUFiYWQ7RHpoYWxhbC1BYmFkc2theWEgb2JsYXN0O0RhbGFsLUFiYWRza2FqYSBvYmxhc3Q7MDtyZWdpb24KK0tHO0tHLU47TmFyeW47TmFyeW5za2F5YSBvYmxhc3Q7TmFyeW5za2FqYSBvYmxhc3Q7MDtyZWdpb24KK0tHO0tHLU87T3NoO09zaHNrYXlhIG9ibGFzdDtPc2thamEgb2JsYXN0OzA7cmVnaW9uCitLRztLRy1UO1RhbGFzO1RhbGFzc2theWEgb2JsYXN0O1RhbGFzc2thamEgb2JsYXN0OzA7cmVnaW9uCitLRztLRy1ZO1lzeWstS2w7SXNzeWstS3Vsc2theWEgb2JsYXN0O0lzc3lrLUt1bHNrYWphIG9ibGFzdDswO3JlZ2lvbgorS0g7S0gtMjM7S3JvbmcgS2FlYjswOzA7MGF1dG9ub21vdXMgbXVuaWNpcGFsaXR5CitLSDtLSC04O0tyb25nIFByZWFoIFNpaGFub3VrOzA7MDswYXV0b25vbW91cyBtdW5pY2lwYWxpdHkKK0tIO0tILTIwO1Bobm9tIFBlbmg7MDswOzBhdXRvbm9tb3VzIG11bmljaXBhbGl0eQorS0g7S0gtMjtCYWF0IERhbWJhbmc7MDswO3Byb3ZpbmNlCitLSDtLSC0xMDtCYW50ZWF5IE1lYW4gQ2hleSBbQmFudGVheSBNZWFuY2hleV07MDswO3Byb3ZpbmNlCitLSDtLSC0zO0thbXBvbmcgQ2hhYW07MDswO3Byb3ZpbmNlCitLSDtLSC00O0thbXBvbmcgQ2hobmFuZzswOzA7cHJvdmluY2UKK0tIO0tILTU7S2FtcG9uZyBTcHVldSBbS2FtcG5nIFNwZV07MDswO3Byb3ZpbmNlCitLSDtLSC02O0thbXBvbmcgVGh1bSBbS2FtcG5nIFRodW1dOzA7MDtwcm92aW5jZQorS0g7S0gtNztLYW1wb3QgW0thbXBvdF07MDswO3Byb3ZpbmNlCitLSDtLSC04O0thbmRhYWwgW0thbmRhbF07MDswO3Byb3ZpbmNlCitLSDtLSC05O0thb2ggS29uZyBbS2FvaCBLbmddOzA7MDtwcm92aW5jZQorS0g7S0gtMDtLcmFjaGVoIFtLcmFjaGVoXTswOzA7cHJvdmluY2UKK0tIO0tILTI0O01vbmRvbCBLaXJpIFtNb25kbCBLaXJpXTswOzA7cHJvdmluY2UKK0tIO0tILTIyO090ZGFyIE1lYW4gQ2hleSBbdGRhciBNZWFuY2hleV0gOzA7MDtwcm92aW5jZQorS0g7S0gtNTtQb3VzYWF0IFtQb3Roc3RdOzA7MDtwcm92aW5jZQorS0g7S0gtMjE7UHJlYWggVmloZWFyOzA7MDtwcm92aW5jZQorS0g7S0gtNDtQcmV5IFZlYWVuZyBbUHJleSBWZW5nXTswOzA7cHJvdmluY2UKK0tIO0tILTY7Um90YW5hayBLaXJpIFtSb3Rhbm9raXJpXTswOzA7cHJvdmluY2UKK0tIO0tILTc7U2llbSBSZWFiIFtTaW1yZWFiXTswOzA7cHJvdmluY2UKK0tIO0tILTk7U3R1ZW5nIFRyYWVuZyBbU3RlbmcgVHJlbmddOzA7MDtwcm92aW5jZQorS0g7S0gtMjA7U3ZhYXkgUmllbmcgW1N2YXkgUmluZ107MDswO3Byb3ZpbmNlCitLSDtLSC0yNTtUYWFrYWV2IFtUYWtldl07MDswO3Byb3ZpbmNlCitLSTtLSS1HO0dpbGJlcnQgSXNsYW5kczswOzA7MAorS0k7S0ktTDtMaW5lIElzbGFuZHM7MDswOzAKK0tJO0tJLVA7UGhvZW5peCBJc2xhbmRzOzA7MDswCitLTTtLTS1BO0Fuam91YW47TmR6b3Vhbmk7MDswOworS007S00tRztHcmFuZGUgQ29tb3JlO05nYXppZGphOzA7MDsKK0tNO0tNLU07TW9oZWxpO01vaWxpOzA7MDsKK0tQO0tQLUtBRTtLYWVzb25nLXNpOzA7MDswc3BlY2lhbCBjaXR5CitLUDtLUC1OQU07TmFtcG8tc2k7MDswOzBzcGVjaWFsIGNpdHkKK0tQO0tQLVBZTztQeW9uZ3lhbmctc2k7MDswOzBzcGVjaWFsIGNpdHkKK0tQO0tQLUNIQTtDaGFnYW5nLWRvOzA7MDtwcm92aW5jZQorS1A7S1AtSEFCO0hhbWd5b25nYnVrLWRvOzA7MDtwcm92aW5jZQorS1A7S1AtSEFOO0hhbWd5b25nbmFtLWRvOzA7MDtwcm92aW5jZQorS1A7S1AtSFdCO0h3YW5naGFlYnVrLWRvOzA7MDtwcm92aW5jZQorS1A7S1AtSFdOO0h3YW5naGFlbmFtLWRvOzA7MDtwcm92aW5jZQorS1A7S1AtS0FOO0thbmd3b24tZG87MDswO3Byb3ZpbmNlCitLUDtLUC1QWUI7UHlvbmdhbmJ1ay1kbzswOzA7cHJvdmluY2UKK0tQO0tQLVBZTjtQeW9uZ2FubmFtLWRvOzA7MDtwcm92aW5jZQorS1A7S1AtWUFOO1lhbmdnYW5nLWRvOzA7MDtwcm92aW5jZQorS1I7S1ItMDtTZW91bCBUZXVnYnllb2xzaSBbU2VvdWwtVGtweWxzaGldOzA7MDswO2NhcGl0YWwgbWV0cm9wb2xpdGFuIGNpdHkKK0tSO0tSLTI2O0J1c2FuIEd3YW5neWVvZ3NpIFtQdXNhbi1Ld2FuZ3lrc2hpXTswOzA7MG1ldHJvcG9saXRhbiBjaXR5CitLUjtLUi0yNztEYWVndSBHd2FuZ3llb2dzaSBbVGFlZ3UtS3dhbmd5a3NoaV07MDswOzBtZXRyb3BvbGl0YW4gY2l0eQorS1I7S1ItMzA7RGFlamVvbiBHd2FuZ3llb2dzaSBbVGFlam4tS3dhbmd5a3NoaV07MDswOzBtZXRyb3BvbGl0YW4gY2l0eQorS1I7S1ItMjk7R3dhbmdqdSBHd2FuZ3llb2dzaSBbS3dhbmdqdS1Ld2FuZ3lrc2hpXTswOzA7MG1ldHJvcG9saXRhbiBjaXR5CitLUjtLUi0yODtJbmNoZW9uIEd3YW5neWVvZ3NpIFtJbmNobi1Ld2FuZ3lrc2hpXTswOzA7MG1ldHJvcG9saXRhbiBjaXR5CitLUjtLUi0zO1Vsc2FuIEd3YW5neWVvZ3NpIFtVbHNhbi1Ld2FuZ3lrc2hpXTswOzA7MG1ldHJvcG9saXRhbiBjaXR5CitLUjtLUi00MztDaHVuZ2NoZW9uZ2J1Z2RvIFtDaHVuZ2NobmdidWstZG9dOzA7MDtwcm92aW5jZQorS1I7S1ItNDQ7Q2h1bmdjaGVvbmduYW1kbyBbQ2h1bmdjaG5nbmFtLWRvXTswOzA7cHJvdmluY2UKK0tSO0tSLTQyO0dhbmd3ZW9uZG8gW0thbmctd29uLWRvXTswOzA7cHJvdmluY2UKK0tSO0tSLTQ7R3llb25nZ2lkbyBbS3luZ2dpLWRvXTswOzA7cHJvdmluY2UKK0tSO0tSLTQ3O0d5ZW9uZ3NhbmdidWdkbyBbS3luZ3NhbmdidWstZG9dOzA7MDtwcm92aW5jZQorS1I7S1ItNDg7R3llb25nc2FuZ25hbWRvIFtLeW5nc2FuZ25hbS1kb107MDswO3Byb3ZpbmNlCitLUjtLUi00OTtKZWp1ZG8gW0NoZWp1LWRvXTswOzA7cHJvdmluY2UKK0tSO0tSLTQ1O0plb25yYWJ1Z2RvW0NobGxhYnVrLWRvXTswOzA7cHJvdmluY2UKK0tSO0tSLTQ2O0plb25yYW5hbWRvIFtDaGxsYW5hbS1kb107MDswO3Byb3ZpbmNlCitLVztLVy1BSDtBbCBBbWFkaTswOzA7MAorS1c7S1ctRkE7QWwgRmFyd2FuaXlhaDswOzA7MAorS1c7S1ctSkE7QWwgSmFocmFoOzA7MDswCitLVztLVy1LVTtBbCBLdXdheXQ7MDswOzAKK0tXO0tXLUhBO2F3YWxsaTswOzA7MAorS1o7S1otQUxBO0FsbWF0eTtBbG1hdHk7QWxtYXR5OzA7Y2l0eQorS1o7S1otQVNUO0FzdGFuYTtBc3RhbmE7QXN0YW5hOzA7Y2l0eQorQUU7QUUtQVo7QWJ1IERoYWJpOzA7MDswCitBRTtBRS1BSjtBam1hbjswOzA7MAorQUU7QUUtRlU7QWwgRnVqYXlyYWg7MDswOzAKK0FFO0FFLVNIO1NoYXJpcWFoOzA7MDswCitBRTtBRS1EVTtEdWJhaTswOzA7MAorQUU7QUUtUks7UmFzIGFsIEtoYXltYWg7MDswOzAKK0FFO0FFLVVRO1VtbSBhbCBRYXl3YXluOzA7MDswCitBRjtBRi1CRFM7QmFkYWtoc2hhbjswOzA7MAorQUY7QUYtQkRHO0JhZGdoaXM7MDswOzAKK0FGO0FGLUJHTDtCYWdobGFuIFtCYWdoaWFuXTswOzA7MAorQUY7QUYtQkFMO0JhbGtoOzA7MDswCitBRjtBRi1CQU07QmFtaWFuOzA7MDswCitBRjtBRi1GUkE7RmFyYWg7MDswOzAKK0FGO0FGLUZZQjtGYXJ5YWI7MDswOzAKK0FGO0FGLUdIQTtHaGF6bmkgW0doYXpuXTswOzA7MAorQUY7QUYtR0hPO0dob3dyOzA7MDswCitBRjtBRi1IRUw7SGVsbWFuZDswOzA7MAorQUY7QUYtSEVSO0hlcmF0OzA7MDswCitBRjtBRi1KT1c7Sm93emphbjswOzA7MAorQUY7QUYtS0FCO0thYnVsIFtLYWJvbF07MDswOzAKK0FGO0FGLUtBTjtLYW5kYWhhcjswOzA7MAorQUY7QUYtS0FQO0thcGlzYTswOzA7MAorQUY7QUYtS05SO0tvbmFyIFtLdW5hcl07MDswOzAKK0FGO0FGLUtEWjtLb25kb3ogW0t1bmR1el0gW0tvbmR1el07MDswOzAKK0FGO0FGLUxBRztMYWdobWFuOzA7MDswCitBRjtBRi1MT1c7TG93Z2FyOzA7MDswCitBRjtBRi1OQU47TmFuZ3JhaGFyIFtOYW5nYXJoYXJdIFtOYW5nYXJoYV07MDswOzAKK0FGO0FGLU5JTTtOaW1ydXo7MDswOzAKK0FGO0FGLU9SVTtPcnV6Z2FuIFtVcnV6Z2FuXTswOzA7MAorQUY7QUYtUElBO1Bha3RpYTswOzA7MAorQUY7QUYtUEtBO1Bha3Rpa2E7MDswOzAKK0FGO0FGLVBBUjtQYXJ3YW4gW1BhcnZhbl07MDswOzAKK0FGO0FGLVNBTTtTYW1hbmdhbjswOzA7MAorQUY7QUYtU0FSO1Nhci1lIFBvbDswOzA7MAorQUY7QUYtVEFLO1Rha2hhcjswOzA7MAorQUY7QUYtV0FSO1dhcmRhayBbV2FyZGFnXSBbVmFyZGFrXTswOzA7MAorQUY7QUYtWkFCO1phYm9sIFtaYWJ1bF07MDswOzAKK0FEO0FELTAxO0FuZG9ycmE7MDswOzAKK0FMO0FMLUJSO0JlcmF0OzA7MDswCitBTDtBTC1CVTtCdWxxaXplOzA7MDs5CitBTDtBTC1ETDtEZWx2aW5lOzA7MDsyCitBTDtBTC1EVjtEZXZvbGw7MDswOzYKK0FMO0FMLURJO0RpYmVyOzA7MDs5CitBTDtBTC1EUjtEdXJyZXM7MDswOzIKK0FMO0FMLUVMO0VsYmFzYW47MDswOzMKK0FMO0FMLUZSO0ZpZXI7MDswOzQKK0FMO0FMLUdSO0dyYW1zaDswOzA7MworQUw7QUwtR0o7R2ppcm9rYXN0ZXI7MDswOzUKK0FMO0FMLUhBO0hhczswOzA7NworQUw7QUwtS0E7S2F2YWplOzA7MDswCitBTDtBTC1FUjtLb2xvbmplOzA7MDs2CitBTDtBTC1LTztLb3JjZTswOzA7NgorQUw7QUwtS1I7S3J1amU7MDswOzIKK0FMO0FMLUtDO0t1Y292ZTswOzA7MAorQUw7QUwtS1U7S3VrZXM7MDswOzcKK0FMO0FMLUtCO0t1cmJpbjswOzA7OAorQUw7QUwtTEU7TGV6aGU7MDswOzgKK0taO0taLUFMTTtBbG1hdHkgb2JseXN5O0FsbWF0aW5za2F5YSBvYmxhc3Q7QWxtYXRpbnNrYWphIG9ibGFzdDswO3JlZ2lvbgorS1o7S1otQUtNO0FxbW9sYSBvYmx5c3k7QWttb2xpbnNrYXlhIG9ibGFzdDtBa21vbGluc2thamEgb2JsYXN0OzA7cmVnaW9uCitLWjtLWi1BS1Q7QXF0YmUgb2JseXN5O0FrdHl1Ymluc2theWEgb2JsYXN0O0FrdGp1Ymluc2thamEgb2JsYXN0OzA7cmVnaW9uCitLWjtLWi1BVFk7QXR5cmF1IG9ibHlzeTtBdHlyYXVza2F5YSBvYmxhc3Q7QXR5cmF1c2thamEgb2JsYXN0OzA7cmVnaW9uCitLWjtLWi1aQVA7QmF0eXMgUWF6YXFzdGFuIG9ibHlzeTtaYXBhZG5vLUthemFraHN0YW5za2F5YSBvYmxhc3Q7WmFwYWRuby1LYXphaHN0YW5za2FqYSBvYmxhc3Q7MDtyZWdpb24KK0taO0taLU1BTjtNYW5nZ2h5c3RhdSBvYmx5c3k7TWFuZ2lzdGF1c2theWEgb2JsYXN0O01hbmd5c3RhdXNrYWphIG9ibGFzdDswO3JlZ2lvbgorS1o7S1otWVVaO09uZ3T8c3RpayBRYXphcXN0YW4gb2JseXN5O1l1emhuby1LYXpha2hzdGFua2F5YSBvYmxhc3Q7SnVuby1LYXphaHN0YW5rYWphIG9ibGFzdDswO3JlZ2lvbgorS1o7S1otUEFWO1BhdmxvZGFyIG9ibHlzeTtQYXZsb2RhcnNrYXlhIG9ibGFzdDtQYXZsb2RhcnNrYWphIG9ibGFzdDswO3JlZ2lvbgorS1o7S1otS0FSO1FhcmFnaGFuZHkgb2JseXN5O0thcmFnYW5kaW5za2F5YSBvYmxhc3Q7S2FyYWdhbmRpbnNrYWphIG9ibGFzdDswO3JlZ2lvbgorS1o7S1otS1VTO1Fvc3RhbmF5IG9ibHlzeTtLb3N0YW5heXNrYXlhIG9ibGFzdDtLb3N0YW5hanNrYWphIG9ibGFzdDswO3JlZ2lvbgorS1o7S1otS1pZO1F5enlsb3JkYSBvYmx5c3k7S3l6eWxvcmRpbnNrYXlhIG9ibGFzdDtLeXp5bG9yZGluc2thamEgb2JsYXN0OzA7cmVnaW9uCitLWjtLWi1WT1M7U2h5Z2h5cyBRYXphcXN0YW4gb2JseXN5O1Zvc3RvY2huby1LYXpha2hzdGFuc2theWEgb2JsYXN0O1Zvc3RvZW5vLUthemFoc3RhbnNrYWphIG9ibGFzdDswO3JlZ2lvbgorS1o7S1otU0VWO1NvbHT8c3RpayBRYXphcXN0YW4gb2JseXN5O1NldmVyby1LYXpha2hzdGFuc2theWEgb2JsYXN0O1NldmVyby1LYXphaHN0YW5za2FqYSBvYmxhc3Q7MDtyZWdpb24KK0taO0taLVpIQTtaaGFtYnlsIG9ibHlzeTtaaGFtYnlsc2theWEgb2JsYXN0O2FtYnlsc2thamEgb2JsYXN0OzA7cmVnaW9uCitMQTtMQS1WVDtWaWVudGlhbmU7MDswOzBwcmVmZWN0dXJlCitMQTtMQS1BVDtBdHRhcHUgW0F0dG9wZXVdOzA7MDtwcm92aW5jZQorTEE7TEEtQks7Qm9rZW87MDswO3Byb3ZpbmNlCitMQTtMQS1CTDtCb2xpa2hhbXhhaSBbQm9yaWtoYW5lXTswOzA7cHJvdmluY2UKK0xBO0xBLUNIO0NoYW1wYXNhayBbQ2hhbXBhc3Nha107MDswO3Byb3ZpbmNlCitMQTtMQS1ITztIb3VhcGhhbjswOzA7cHJvdmluY2UKK0xBO0xBLUtIO0toYW1tb3VhbjswOzA7cHJvdmluY2UKK0xBO0xBLUxNO0xvdWFuZyBOYW10aGE7MDswO3Byb3ZpbmNlCitNRDtNRC1UQTtUYXJhY2xpYTswOzA7MDtkaXN0cmljdAorTEE7TEEtTFA7TG91YW5ncGhhYmFuZyBbTG91YW5nIFByYWJhbmddOzA7MDtwcm92aW5jZQorTEE7TEEtT1U7T3Vkb214YWkgW091ZG9tc2FpXTswOzA7cHJvdmluY2UKK0xBO0xBLVBIO1Bob25nc2FsaSBbUGhvbmcgU2FseV07MDswO3Byb3ZpbmNlCitMQTtMQS1TTDtTYWxhdmFuIFtTYXJhdmFuZV07MDswO3Byb3ZpbmNlCitMQTtMQS1TVjtTYXZhbm5ha2hldDswOzA7cHJvdmluY2UKK0xBO0xBLVZJO1ZpZW50aWFuZTswOzA7cHJvdmluY2UKK0xBO0xBLVhBO1hhaWduYWJvdWxpIFtTYXlhYm91cnldOzA7MDtwcm92aW5jZQorTEE7TEEtWE47WGFpc29tYm91bjswOzA7MHNwZWNpYWwgem9uZQorTEE7TEEtWEU7WGVrb25nIFtTZWtvbmddOzA7MDtwcm92aW5jZQorTEE7TEEtWEk7WGlhbmdraG9hbmcgW1hpZW5nIEtob3VhbmddOzA7MDtwcm92aW5jZQorTEI7TEItQkE7QmVpcm91dDtCYXlydXQ7MDswCitMQjtMQi1CSTtFbCBCZXFhYTtBbCBCaXFhOzA7MAorTEI7TEItSkw7SmFiYWwgTG91Ym5hbmU7SmFiYWwgTHVibmFuOzA7MAorTEI7TEItQVM7TG91Ym5hbmUgZWNoIENoZW1hbGk7QXNoIFNoYW1hbDswOzAKK0xCO0xCLUpBO0xvdWJuYW5lIGVqIEpub3ViaTtBbCBKYW51YjswOzAKK0xCO0xCLU5BO05hYmF0aXllO0FuIE5hYmF5YWg7MDswCitMSztMSy01MjtBbXBhcmE7MDswOzUKK0xLO0xLLTc7QW51cmFkaGFwdXJhOzA7MDs3CitMSztMSy04O0JhZHVsbGE7MDswOzgKK0xLO0xLLTU7QmF0dGljYWxvYTswOzA7NQorTEs7TEstO0NvbG9tYm87MDswOzAKK0xLO0xLLTM7R2FsbGU7MDswOzMKK0xLO0xLLTI7R2FtcGFoYTswOzA7CitMSztMSy0zMztIYW1iYW50b3RhOzA7MDszCitMSztMSy00O0phZmZuYTswOzA7NAorTEs7TEstMztLYWx1dGFyYTswOzA7MAorTEs7TEstMjtLYW5keTswOzA7MgorTEs7TEstOTI7S2VnYWxsYTswOzA7OQorTEs7TEstNDI7S2lsaW5vY2hjaGk7MDswOzQKK0xLO0xLLTY7S3VydW5lZ2FsYTswOzA7NgorTEs7TEstNDM7TWFubmFyOzA7MDs0CitMSztMSy0yMjtNYXRhbGU7MDswOzIKK0xLO0xLLTMyO01hdGFyYTswOzA7MworTEs7TEstODI7TW9uYXJhZ2FsYTswOzA7OAorTEs7TEstNDU7TXVsbGFpdHRpdnU7MDswOzQKK0xLO0xLLTIzO051d2FyYSBFbGl5YTswOzA7MgorTEs7TEstNzI7UG9sb25uYXJ1d2E7MDswOzcKK0xLO0xLLTYyO1B1dHRhbGFtOzA7MDs2CitMSztMSy05O1JhdG5hcHVyYTswOzA7OQorTEs7TEstNTM7VHJpbmNvbWFsZWU7MDswOzUKK0xLO0xLLTQ0O1ZhdnVuaXlhOzA7MDs0CitMUjtMUi1CTTtCb21pOzA7MDswCitMUjtMUi1CRztCb25nOzA7MDswCitMUjtMUi1HQjtHcmFuZCBCYXNzYTswOzA7MAorTFI7TFItQ007R3JhbmQgQ2FwZSBNb3VudDswOzA7MAorTFI7TFItR0c7R3JhbmQgR2VkZWg7MDswOzAKK0xSO0xSLUdLO0dyYW5kIEtydTswOzA7MAorTFI7TFItTE87TG9mYTswOzA7MAorTFI7TFItTUc7TWFyZ2liaTswOzA7MAorTFI7TFItTVk7TWFyeWxhbmQ7MDswOzAKK0xSO0xSLU1PO01vbnRzZXJyYWRvOzA7MDswCitMUjtMUi1OSTtOaW1iYTswOzA7MAorTFI7TFItUkk7Uml2ZXJjZXNzOzA7MDswCitMUjtMUi1TSTtTaW5vZTswOzA7MAorTFM7TFMtRDtCZXJlYTswOzA7MAorTFM7TFMtQjtCdXRoYS1CdXRoZTswOzA7MAorTFM7TFMtQztMZXJpYmU7MDswOzAKK0xTO0xTLUU7TWFmZXRlbmc7MDswOzAKK0xTO0xTLUE7TWFzZXJ1OzA7MDswCitMUztMUy1GO01vaGFsZXMgSG9lazswOzA7MAorTFM7TFMtSjtNb2tob3Rsb25nOzA7MDswCitMUztMUy1IO1FhY2hhcyBOZWs7MDswOzAKK0xTO0xTLUc7UXV0aGluZzswOzA7MAorTFM7TFMtSztUaGFiYS1Uc2VrYTswOzA7MAorTFQ7TFQtQUw7QWx5dGF1cyBBcHNrcml0aXM7MDswOzAKK0xUO0xULUtVO0thdW5vIEFwc2tyaXRpczswOzA7MAorTFQ7TFQtS0w7S2xhaXBkb3MgQXBza3JpdGlzOzA7MDswCitMVDtMVC1NUjtNYXJpamFtcG9scyBBcHNrcml0aXM7MDswOzAKK0xUO0xULVBOO1BhbmV2aW8gQXBza3JpdGlzOzA7MDswCitMVDtMVC1TQTtpYXVsaSBBcHNrcml0aXM7MDswOzAKK0xUO0xULVRBO1RhdXJhZ3MgQXBza3JpdGlzOzA7MDswCitMVDtMVC1URTtUZWxpIEFwc2tyaXRpczswOzA7MAorTFQ7TFQtVVQ7VXRlbm9zIEFwc2tyaXRpczswOzA7MAorTFQ7TFQtVkw7VmlsbmlhdXMgQXBza3JpdGlzOzA7MDswCitMVTtMVS1EO0RpZWtpcmNoOzA7MDswCitMVTtMVS1HO0dyZXZlbm1hY2hlcjswOzA7MAorTFU7TFUtTDtMdXhlbWJvdXJnO0x1eGVtYnVyZyA7MDswOworTFY7TFYtQUk7QWl6a3JhdWtsZXMgQXByaWlzOzA7MDswO2Rpc3RyaWN0CitMVjtMVi1BTDtBbGtzbmVzIEFwcmlpczswOzA7MDtkaXN0cmljdAorTFY7TFYtQkw7QmFsdnUgQXByaWlzOzA7MDswO2Rpc3RyaWN0CitMVjtMVi1CVTtCYXVza2FzIEFwcmlpczswOzA7MDtkaXN0cmljdAorTFY7TFYtQ0U7Q3N1IEFwcmlpczswOzA7MDtkaXN0cmljdAorTFY7TFYtREE7RGF1Z2F2cGlscyBBcHJpaXM7MDswOzA7ZGlzdHJpY3QKK0xWO0xWLURPO0RvYmVsZXMgQXByaWlzOzA7MDswO2Rpc3RyaWN0CitMVjtMVi1HVTtHdWxiZW5lcyBBcHJpaXM7MDswOzA7ZGlzdHJpY3QKK0xWO0xWLUpMO0plbGdhdmFzIEFwcmlpczswOzA7MDtkaXN0cmljdAorTFY7TFYtSks7SmthYnBpbHMgQXByaWlzOzA7MDswO2Rpc3RyaWN0CitMVjtMVi1LUjtLcnNsYXZhcyBBcHJpaXM7MDswOzA7ZGlzdHJpY3QKK0xWO0xWLUtVO0t1bGRnYXMgQXByaWlzOzA7MDswO2Rpc3RyaWN0CitMVjtMVi1MTTtMaW1iYXUgQXByaWlzOzA7MDswO2Rpc3RyaWN0CitMVjtMVi1MRTtMaWVwamFzIEFwcmlpczswOzA7MDtkaXN0cmljdAorTFY7TFYtTFU7THVkemFzIEFwcmlpczswOzA7MDtkaXN0cmljdAorTFY7TFYtTUE7TWFkb25hcyBBcHJpaXM7MDswOzA7ZGlzdHJpY3QKK0xWO0xWLU9HO09ncmVzIEFwcmlpczswOzA7MDtkaXN0cmljdAorTFY7TFYtUFI7UHJlaXUgQXByaWlzOzA7MDswO2Rpc3RyaWN0CitMVjtMVi1SRTtSemVrbmVzIEFwcmlpczswOzA7MDtkaXN0cmljdAorTFY7TFYtUkk7UmdhcyBBcHJpaXM7MDswOzA7ZGlzdHJpY3QKK0xWO0xWLVNBO1NhbGR1cyBBcHJpaXM7MDswOzA7ZGlzdHJpY3QKK0xWO0xWLVRBO1RhbHN1IEFwcmlpczswOzA7MDtkaXN0cmljdAorTFY7TFYtVFU7VHVrdW1hIEFwcmlpczswOzA7MDtkaXN0cmljdAorTFY7TFYtVks7VmFsa2FzIEFwcmlpczswOzA7MDtkaXN0cmljdAorTFY7TFYtVk07VmFsbWllcmFzIEFwcmlpczswOzA7MDtkaXN0cmljdAorTFY7TFYtVkU7VmVudHNwaWxzIEFwcmlpczswOzA7MDtkaXN0cmljdAorTFY7TFYtREdWO0RhdWdhdnBpbHM7MDswOzA7Y2l0eQorTFY7TFYtSkVMO0plbGdhdmE7MDswOzA7Y2l0eQorTFY7TFYtSlVSO0pybWFsYTswOzA7MDtjaXR5CitMVjtMVi1MUFg7TGllcGphOzA7MDswO2NpdHkKK0xWO0xWLVJFWjtSemVrbmU7MDswOzA7Y2l0eQorTFY7TFYtUklYO1JnYTswOzA7MDtjaXR5CitMVjtMVi1WRU47VmVudHNwaWxzOzA7MDswO2NpdHkKK0xZO0xZLUJVO0FsIEJ1bm47MDswOzAKK0xZO0xZLUpBO0FsIEphYmFsIGFsIEFraGFyOzA7MDswCitMWTtMWS1KVTtBbCBKdWZyYWg7MDswOzAKK0xZO0xZLVdBO0FsIFdhaDswOzA7MAorTFk7TFktWkE7QXogWndpeWFoOzA7MDswCitMWTtMWS1CQTtCYW5naHo7MDswOzAKK0xZO0xZLU1JO01pcnRhaDswOzA7MAorTFk7TFktVEI7YXJidWx1czswOzA7MAorTUE7TUEtQUdEO0FnYWRpcjswOzA7MworTUE7TUEtQkFIO0FpdCBCYWhhOzA7MDszCitNQTtNQS1NRUw7QWl0IE1lbGxvdWw7MDswOzMKK01BO01BLUhBTztBbCBIYW91ejswOzA7MAorTUE7TUEtSE9DO0FsIEhvY2VpbWE7MDswOzAKK01BO01BLUFTWjtBc3NhLVphZzswOzA7NAorTUE7TUEtQVpJO0F6aWxhbDswOzA7MgorTUE7TUEtQkVNO0JlbmkgTWVsbGFsOzA7MDsyCitNQTtNQS1CRVM7QmVuIFNsaW1hbmU7MDswOzA5CitNQTtNQS1CRVI7QmVya2FuZTswOzA7MDQKK01BO01BLUJPRDtCb3VqZG91cjswOzA7NQorTUE7TUEtQk9NO0JvdWxlbWFuZTswOzA7MDUKK01BO01BLUNBUztDYXNhYmxhbmNhIFtEYXIgZWwgQmVpZGFdOzA7MDswOAorTUE7TUEtQ0hFO0NoZWZjaGFvdWVuZTswOzA7MAorTUE7TUEtQ0hJO0NoaWNoYW91YTswOzA7MAorTUE7TUEtSEFKO0VsIEhhamViOzA7MDswNgorTUE7TUEtSkRJO0VsIEphZGlkYTswOzA7MAorTUE7TUEtRVJSO0VycmFjaGlkaWE7MDswOzA2CitNQTtNQS1FU0k7RXNzYW91aXJhOzA7MDswCitNQTtNQS1FU007RXMgU21hcmE7MDswOzQKK01BO01BLUZFUztGZXM7MDswOzA1CitBTDtBTC1MQjtMaWJyYXpoZDswOzA7MworQUw7QUwtTFU7THVzaG5qZTswOzA7NAorQUw7QUwtTU07TWFsZXNpIGUgTWFkaGU7MDswOzAKK0FMO0FMLU1LO01hbGxha2FzdGVyOzA7MDs0CitBTDtBTC1NVDtNYXQ7MDswOzkKK0FMO0FMLU1SO01pcmRpdGU7MDswOzgKK0FMO0FMLVBRO1BlcWluOzA7MDszCitBTDtBTC1QUjtQZXJtZXQ7MDswOzUKK0FMO0FMLVBHO1BvZ3JhZGVjOzA7MDs2CitBTDtBTC1QVTtQdWtlOzA7MDswCitBTDtBTC1TUjtTYXJhbmRlOzA7MDsyCitBTDtBTC1TSztTa3JhcGFyOzA7MDswCitBTDtBTC1TSDtTaGtvZGVyOzA7MDswCitBTDtBTC1URTtUZXBlbGVuZTswOzA7NQorQUw7QUwtVFI7VGlyYW5lOzA7MDswCitBTDtBTC1UUDtUcm9wb2plOzA7MDs3CitBTDtBTC1WTDtWbG9yZTswOzA7MgorQU07QU0tRVI7RXJldmFuIFtZZXJldmFuXSBbQXJtZW5pYSB4IFllcmV2YW5dOzA7MDswO2NpdHkKK0FNO0FNLUFHO0FyYWdhY290bjswOzA7cmVnaW9uCitBTTtBTS1BUjtBcmFyYXQ7MDswO3JlZ2lvbgorQU07QU0tQVY7QXJtYXZpcjswOzA7cmVnaW9uCitBTTtBTS1HUjtHZWFya3VuaWs7MDswO3JlZ2lvbgorQU07QU0tS1Q7S290YXlrOzA7MDtyZWdpb24KK0FNO0FNLUxPO0xveTswOzA7cmVnaW9uCitBTTtBTS1TSDtpcmFrOzA7MDtyZWdpb24KK0FNO0FNLVNVO1N5dW5pazswOzA7cmVnaW9uCitBTTtBTS1UVjtUYXZ1OzA7MDtyZWdpb24KK0FNO0FNLVZEO1ZheW9jIEpvcjswOzA7cmVnaW9uCitBTztBTy1CR087QmVuZ287MDswOzAKK0FPO0FPLUJHVTtCZW5ndWVsYTswOzA7MAorQU87QU8tQklFO0JpZTswOzA7MAorQU87QU8tQ0FCO0NhYmluZGE7MDswOzAKK1NOO1NOLU1UO01hdGFtOzA7MDswCitBTztBTy1DQ1U7Q3VhbmRvLUN1YmFuZ287MDswOzAKK0FPO0FPLUNOTztDdWFuemEgTm9ydGU7MDswOzAKK0FPO0FPLUNVUztDdWFuemEgU3VsOzA7MDswCitBTztBTy1DTk47Q3VuZW5lOzA7MDswCitBTztBTy1IVUE7SHVhbWJvOzA7MDswCitBTztBTy1IVUk7SHVsYTswOzA7MAorQU87QU8tTFVBO0x1YW5kYTswOzA7MAorQU87QU8tTE5PO0x1bmRhIE5vcnRlOzA7MDswCitBTztBTy1MU1U7THVuZGEgU3VsOzA7MDswCitBTztBTy1NQUw7TWFsYW5nZTswOzA7MAorQU87QU8tTU9YO01veGljbzswOzA7MAorQU87QU8tTkFNO05hbWliZTswOzA7MAorQU87QU8tVUlHO1VnZTswOzA7MAorQU87QU8tWkFJO1phaXJlOzA7MDswCitBUjtBUi1DO0NhcGl0YWwgZmVkZXJhbDswOzA7MDtmZWRlcmFsIGRpc3RyaWN0CitBUjtBUi1CO0J1ZW5vcyBBaXJlczswOzA7cHJvdmluY2UKK0FSO0FSLUs7Q2F0YW1hcmNhOzA7MDtwcm92aW5jZQorQVI7QVItWDtDcmRvYmE7MDswO3Byb3ZpbmNlCitBUjtBUi1XO0NvcnJpZW50ZXM7MDswO3Byb3ZpbmNlCitBUjtBUi1IO0NoYWNvOzA7MDtwcm92aW5jZQorQVI7QVItVTtDaHVidXQ7MDswO3Byb3ZpbmNlCitBUjtBUi1FO0VudHJlIFJvczswOzA7cHJvdmluY2UKK0FSO0FSLVA7Rm9ybW9zYTswOzA7cHJvdmluY2UKK0FSO0FSLVk7SnVqdXk7MDswO3Byb3ZpbmNlCitBUjtBUi1MO0xhIFBhbXBhOzA7MDtwcm92aW5jZQorQVI7QVItRjtMYSBSaW9qYTswOzA7cHJvdmluY2UKK0FSO0FSLU07TWVuZG96YTswOzA7cHJvdmluY2UKK0FSO0FSLU47TWlzaW9uZXM7MDswO3Byb3ZpbmNlCitBUjtBUi1RO05ldXF1ZW47MDswO3Byb3ZpbmNlCitBUjtBUi1SO1JvIE5lZ3JvOzA7MDtwcm92aW5jZQorQVI7QVItQTtTYWx0YTswOzA7cHJvdmluY2UKK0FSO0FSLUo7U2FuIEp1YW47MDswO3Byb3ZpbmNlCitBUjtBUi1EO1NhbiBMdWlzOzA7MDtwcm92aW5jZQorQVI7QVItWjtTYW50YSBDcnV6OzA7MDtwcm92aW5jZQorQVI7QVItUztTYW50YSBGZTswOzA7cHJvdmluY2UKK0FSO0FSLUc7U2FudGlhZ28gZGVsIEVzdGVybzswOzA7cHJvdmluY2UKK0FSO0FSLVY7VGllcnJhIGRlbCBGdWVnbzswOzA7cHJvdmluY2UKK0FSO0FSLVQ7VHVjdW1uOzA7MDtwcm92aW5jZQorQVQ7QVQtMTA7QnVyZ2VubGFuZDswOzA7MAorQVQ7QVQtMjtLcm50ZW47MDswOzAKK0FUO0FULTM7TmllZGVyc3RlcnJlaWNoOzA7MDswCitBVDtBVC00O09iZXJzdGVycmVpY2g7MDswOzAKK0FUO0FULTU7U2FsemJ1cmc7MDswOzAKK0FUO0FULTY7U3RlaWVybWFyazswOzA7MAorQVQ7QVQtNztUaXJvbDswOzA7MAorQVQ7QVQtODtWb3JhcmxiZXJnOzA7MDswCitBVDtBVC05O1dpZW47MDswOzAKK0FVO0FVLU5TO05ldyBTb3V0aCBXYWxlczswOzA7MHN0YXRlCitBVTtBVS1RTDtRdWVlbnNsYW5kOzA7MDswc3RhdGUKK0FVO0FVLVNBO1NvdXRoIEF1c3RyYWxpYTswOzA7MHN0YXRlCitBVTtBVS1UUztUYXNtYW5pYTswOzA7MHN0YXRlCitBVTtBVS1WSTtWaWN0b3JpYTswOzA7MHN0YXRlCitBVTtBVS1XQTtXZXN0ZXJuIEF1c3RyYWxpYTswOzA7MHN0YXRlCitBVTtBVS1DVDtBdXN0cmFsaWFuIENhcGl0YWwgVGVycml0b3J5OzA7MDswO3RlcnJpdG9yeQorQVU7QVUtTlQ7Tm9ydGhlcm4gVGVycml0b3J5OzA7MDswO3RlcnJpdG9yeQorQVo7QVotQUI7bGkgQmF5cmFtbDswOzA7MDtjaXR5CitBWjtBWi1CQTtCYWs7MDswOzA7Y2l0eQorQVo7QVotR0E7R25jOzA7MDswO2NpdHkKK0FaO0FaLUxBO0xua3JhbjswOzA7MDtjaXR5CitBWjtBWi1NSTtNaW5nY2V2aXI7MDswOzA7Y2l0eQorQVo7QVotTkE7TmFmdGFsYW47MDswOzA7Y2l0eQorQVo7QVotU0E7a2k7MDswOzA7Y2l0eQorQVo7QVotU007U3VtcWF5dDswOzA7MDtjaXR5CitBWjtBWi1TUzt1YTswOzA7MDtjaXR5CitBWjtBWi1YQTtYYW5rbmRpOzA7MDswO2NpdHkKK0FaO0FaLVlFO1lldmxheDswOzA7MDtjaXR5CitBWjtBWi1BQlM7QWJlcm9uOzA7MDswcmF5b24KK0FaO0FaLUFHQztBY2FiZGk7MDswOzByYXlvbgorQVo7QVotQUdNO0FkYW07MDswOzByYXlvbgorQVo7QVotQUdTO0FkYTswOzA7MHJheW9uCitBWjtBWi1BR0E7QXN0YWZhOzA7MDswcmF5b24KK0FaO0FaLUFHVTtBc3U7MDswOzByYXlvbgorQVo7QVotQVNUO0FzdGFyYTswOzA7MHJheW9uCitBWjtBWi1CQUI7QmFiazswOzA7Tlg7cmF5b24KK0FaO0FaLUJBTDtCYWxha247MDswOzByYXlvbgorQVo7QVotQkFSO0JyZDswOzA7MHJheW9uCitBWjtBWi1CRVk7QmV5bHFhbjswOzA7MHJheW9uCitBWjtBWi1CSUw7Qmlsc3V2YXI7MDswOzByYXlvbgorQVo7QVotQ0FCO0NicmF5bDswOzA7MHJheW9uCitBWjtBWi1DQUw7Q2xpbGFiYWI7MDswOzByYXlvbgorQVo7QVotQ1VMO0N1bGZhOzA7MDtOWDtyYXlvbgorQVo7QVotREFTO0Rha3NuOzA7MDswcmF5b24KK0FaO0FaLURBVjtEdmNpOzA7MDswcmF5b24KK0FaO0FaLUZVWjtG/Hp1bGk7MDswOzByYXlvbgorQVo7QVotR0FEO0dkYnk7MDswOzByYXlvbgorQVo7QVotR09SO0dvcmFuYm95OzA7MDswcmF5b24KK0FaO0FaLUdPWTtHeWNheTswOzA7MHJheW9uCitBWjtBWi1IQUM7SGFjcWFidWw7MDswOzByYXlvbgorQVo7QVotSU1JO21pbGk7MDswOzByYXlvbgorQVo7QVotSVNNO3NtYXlsbDswOzA7MHJheW9uCitBWjtBWi1LQUw7S2xiY3I7MDswOzByYXlvbgorQVo7QVotS1VSO0v8cmRtaXI7MDswOzByYXlvbgorQVo7QVotTEFDO0xhY247MDswOzByYXlvbgorQVo7QVotTEFOO0xua3JhbjswOzA7MHJheW9uCitBWjtBWi1MRVI7TGVyaWs7MDswOzByYXlvbgorQVo7QVotTUFTO01hc2FsbDswOzA7MHJheW9uCitBWjtBWi1ORUY7TmVmdGNhbGE7MDswOzByYXlvbgorQVo7QVotT0dVO091ejswOzA7MHJheW9uCitBWjtBWi1PUkQ7T3JkdWJhZDswOzA7Tlg7cmF5b24KK0FaO0FaLVFBQjtRYmw7MDswOzByYXlvbgorQVo7QVotUUFYO1FheDswOzA7MHJheW9uCitBWjtBWi1RQVo7UWF6YXg7MDswOzByYXlvbgorQVo7QVotUU9CO1FvYnVzdGFuOzA7MDswcmF5b24KK0FaO0FaLVFCQTtRdWJhOzA7MDswcmF5b24KK0FaO0FaLVFCSTtRdWJhZGw7MDswOzByYXlvbgorQVo7QVotUVVTO1F1c2FyOzA7MDswcmF5b24KK0FaO0FaLVNBVDtTYWF0bDswOzA7MHJheW9uCitBWjtBWi1TQUI7U2FiaXJhYmFkOzA7MDswcmF5b24KK0FaO0FaLVNBRDtTZHJrOzA7MDtOWDtyYXlvbgorQVo7QVotU0FIO2FoYnV6OzA7MDtOWDtyYXlvbgorQVo7QVotU0FLO2tpOzA7MDswcmF5b24KK0FaO0FaLVNBTDtTYWx5YW47MDswOzByYXlvbgorQVo7QVotU01JO2FtYXg7MDswOzByYXlvbgorQVo7QVotU0tSO21raXI7MDswOzByYXlvbgorQVo7QVotU01YO1NhbXV4OzA7MDswcmF5b24KK0FaO0FaLVNBUjtydXI7MDswO05YO3JheW9uCitBWjtBWi1TSVk7U2l5em47MDswOzByYXlvbgorQVo7QVotU1VTO3VhOzA7MDswcmF5b24KK0FaO0FaLVRBUjtUcnRyOzA7MDswcmF5b24KK0FaO0FaLVRPVjtUb3Z1ejswOzA7MHJheW9uCitBWjtBWi1VQ0E7VWNhcjswOzA7MHJheW9uCitBWjtBWi1YQUM7WGFjbWF6OzA7MDswcmF5b24KK0FaO0FaLVhBTjtYYW5sYXI7MDswOzByYXlvbgorQVo7QVotWElaO1h6OzA7MDswcmF5b24KK0FaO0FaLVhDSTtYb2NhbDswOzA7MHJheW9uCitBWjtBWi1YVkQ7WG9jYXZuZDswOzA7MHJheW9uCitBWjtBWi1ZQVI7WWFyZG1sOzA7MDswcmF5b24KK0FaO0FaLVlFVjtZZXZsYXg7MDswOzByYXlvbgorQVo7QVotWkFOO1puZ2lsYW47MDswOzByYXlvbgorQVo7QVotWkFRO1phcWF0YWxhOzA7MDswcmF5b24KK0FaO0FaLVpBUjtacmRhYjswOzA7MHJheW9uCitCQTtCQS1CSUg7RmVkZXJhY2lqYSBCb3NuYSBpIEhlcmNlZ292aW5hOzA7MDswCitCQTtCQS1TUlA7UmVwdWJsaWthIFNycHNrYTswOzA7MAorQkQ7QkQtMDU7QmFnZXJoYXQgemlsYTswOzA7NAorQkQ7QkQtMDtCYW5kYXJiYW4gemlsYTswOzA7MgorQkQ7QkQtMDI7QmFyZ3VuYSB6aWxhOzA7MDswCitCRDtCRC0wNjtCYXJpc2FsIHppbGE7MDswOzAKK0JEO0JELTA3O0Job2xhIHppbGE7MDswOzAKK0JEO0JELTAzO0JvZ3JhIHppbGE7MDswOzUKK0JEO0JELTA0O0JyYWhtYW5iYXJpYSB6aWxhOzA7MDsyCitCRDtCRC0wOTtDaGFuZHB1ciB6aWxhOzA7MDsyCitCRDtCRC0wO0NoaXR0YWdvbmcgemlsYTswOzA7MgorQkQ7QkQtMjtDaHVhZGFuZ2EgemlsYTswOzA7NAorQkQ7QkQtMDg7Q29taWxsYSB6aWxhOzA7MDsyCitCRDtCRC0xMDtDb3hzIEJhemFyIHppbGE7MDswOzIKK0JEO0JELTM7RGhha2EgemlsYTswOzA7MworQkQ7QkQtNDtEaW5hanB1ciB6aWxhOzA7MDs1CitCRDtCRC01O0ZhcmlkcHVyIHppbGE7MDswOzMKK0JEO0JELTY7RmVuaSB6aWxhOzA7MDsyCitCRDtCRC05O0dhaWJhbmRoYSB6aWxhOzA7MDs1CitCRDtCRC04O0dhemlwdXIgemlsYTswOzA7MworQkQ7QkQtNztHb3BhbGdhbmogemlsYTswOzA7MworQkQ7QkQtMjA7SGFiaWdhbmogemlsYTswOzA7NgorQkQ7QkQtMjQ7SmFpcHVyaGF0IHppbGE7MDswOzUKK0JEO0JELTI7SmFtYWxwdXIgemlsYTswOzA7MworQkQ7QkQtMjI7SmVzc29yZSB6aWxhOzA7MDs0CitCRDtCRC0yNTtKaGFsYWthdGkgemlsYTswOzA7MAorQkQ7QkQtMjM7SmhlbmFpZGFoIHppbGE7MDswOzQKK0JEO0JELTI5O0toYWdyYWNoYXJpIHppbGE7MDswOzIKK0JEO0JELTI3O0todWxuYSB6aWxhOzA7MDs0CitCRDtCRC0yNjtLaXNob3JlZ2FuaiB6aWxhOzA7MDszCitCRDtCRC0yODtLdXJpZ3JhbSB6aWxhOzA7MDs1CitCRDtCRC0zMDtLdXNodGlhIHppbGE7MDswOzQKK0JEO0JELTM7TGFrc2htaXB1ciB6aWxhOzA7MDsyCitCRDtCRC0zMjtMYWxtb25pcmhhdCB6aWxhOzA7MDs1CitCRDtCRC0zNjtNYWRhcmlwdXIgemlsYTswOzA7MworQkQ7QkQtMzc7TWFndXJhIHppbGE7MDswOzQKK0JEO0JELTMzO01hbmlrZ2FuaiB6aWxhOzA7MDszCitCRDtCRC0zOTtNZWhlcnB1ciB6aWxhOzA7MDs0CitCRDtCRC0zODtNb3VsdmliYXphciB6aWxhOzA7MDs2CitCRDtCRC0zNTtNdW5zaGlnYW5qIHppbGE7MDswOzMKK0JEO0JELTM0O015bWVuc2luZ2ggemlsYTswOzA7MworQkQ7QkQtNDg7TmFvZ2FvbiB6aWxhOzA7MDs1CitCRDtCRC00MztOYXJhaWwgemlsYTswOzA7NAorQkQ7QkQtNDA7TmFyYXlhbmdhbmogemlsYTswOzA7MworQkQ7QkQtNDI7TmFyc2luZ2RpIHppbGE7MDswOzMKK0JEO0JELTQ0O05hdG9yZSB6aWxhOzA7MDs1CitCRDtCRC00NTtOYXdhYmdhbmogemlsYTswOzA7NQorQkQ7QkQtNDtOZXRyYWtvbmEgemlsYTswOzA7MworQkQ7QkQtNDY7TmlscGhhbWFyaSB6aWxhOzA7MDs1CitCRDtCRC00NztOb2FraGFsaSB6aWxhOzA7MDsyCitCRDtCRC00OTtQYWJuYSB6aWxhOzA7MDs1CitCRDtCRC01MjtQYW5jaGFnYXJoIHppbGE7MDswOzUKK0JEO0JELTU7UGF0dWFraGFsaSB6aWxhOzA7MDswCitCRDtCRC01MDtQaXJvanB1ciB6aWxhOzA7MDswCitCRDtCRC01MztSYWpiYXJpIHppbGE7MDswOzMKK0JEO0JELTU0O1JhanNoYWhpIHppbGE7MDswOzUKK0JEO0JELTU2O1JhbmdhbWF0aSB6aWxhOzA7MDsyCitCRDtCRC01NTtSYW5ncHVyIHppbGE7MDswOzUKK0JEO0JELTU4O1NhdGtoaXJhIHppbGE7MDswOzQKK0JEO0JELTYyO1NoYXJpYXRwdXIgemlsYTswOzA7MworQkQ7QkQtNTc7U2hlcnB1ciB6aWxhOzA7MDszCitCRDtCRC01OTtTaXJhamdhbmogemlsYTswOzA7NQorQkQ7QkQtNjtTdW5hbWdhbmogemlsYTswOzA7NgorQkQ7QkQtNjA7U3lsaGV0IHppbGE7MDswOzYKK0JEO0JELTYzO1RhbmdhaWwgemlsYTswOzA7MworQkQ7QkQtNjQ7VGhha3VyZ2FvbiB6aWxhOzA7MDs1CitCRTtCRS1WQU47QW50d2VycGVuOzA7MDtWTEcKK0JFO0JFLVdCUjtCcmFiYW50IFdhbGxvbjswOzA7V0FMCitCRTtCRS1XSFQ7SGFpbmF1dDswOzA7V0FMCitCRTtCRS1XTEc7TGllZ2U7MDswO1dBTAorQkU7QkUtVkxJO0xpbWJ1cmc7MDswO1ZMRworQkU7QkUtV0xYO0x1eGVtYm91cmc7MDswO1dBTAorQkU7QkUtV05BO05hbXVyOzA7MDtXQUwKK0JFO0JFLVZPVjtPb3N0LVZsYWFuZGVyZW47MDswO1ZMRworQkU7QkUtVkJSO1ZsYWFtcyBCcmFiYW50OzA7MDtWTEcKK0JFO0JFLVZXVjtXZXN0LVZsYWFuZGVyZW47MDswO1ZMRworQkY7QkYtQkFMO0JhbGU7MDswOzAKK0JGO0JGLUJBTTtCYW07MDswOzAKK0JGO0JGLUJBTjtCYW53YTswOzA7MAorQkY7QkYtQkFaO0JhemVnYTswOzA7MAorQkY7QkYtQkdSO0JvdWdvdXJpYmE7MDswOzAKK0JGO0JGLUJMRztCb3VsZ291OzA7MDswCitCRjtCRi1CTEs7Qm91bGtpZW1kZTswOzA7MAorQkY7QkYtQ09NO0NvbW9lOzA7MDswCitCRjtCRi1HQU47R2Fuem91cmdvdTswOzA7MAorQkY7QkYtR05BO0duYWduYTswOzA7MAorQkY7QkYtR09VO0dvdXJtYTswOzA7MAorQkY7QkYtSE9VO0hvdWV0OzA7MDswCitCRjtCRi1JT0I7SW9iYTswOzA7MAorQkY7QkYtS0FEO0thZGlvZ287MDswOzAKK0JGO0JGLUtFTjtLZW5lZG91Z291OzA7MDswCitCRjtCRi1LTUQ7S29tb25kamFyaTswOzA7MAorQkY7QkYtS01QO0tvbXBpZW5nYTswOzA7MAorQkY7QkYtS09TO0tvc3NpOzA7MDswCitCRjtCRi1LT1A7S291bHBlbG9nbzswOzA7MAorQkY7QkYtS09UO0tvdXJpdGVuZ2E7MDswOzAKK0JGO0JGLUtPVztLb3Vyd2VvZ287MDswOzAKK0JGO0JGLUxFUjtMZXJhYmE7MDswOzAKK0JGO0JGLUxPUjtMb3JvdW07MDswOzAKK0JGO0JGLU1PVTtNb3Vob3VuIFtNb3UgSG91bl07MDswOzAKK0JGO0JGLU5BTztOYWhvdXJpOzA7MDswCitCRjtCRi1OQU07TmFtZW50ZW5nYTswOzA7MAorQkY7QkYtTkFZO05heWFsYTswOzA7MAorQkY7QkYtTk9VO05vdW1iaWVsOzA7MDswCitCRjtCRi1PVUI7T3Vicml0ZW5nYTswOzA7MAorQkY7QkYtT1VEO091ZGFsYW47MDswOzAKK0JGO0JGLVBBUztQYXNzb3JlOzA7MDswCitCRjtCRi1QT047UG9uaTswOzA7MAorQkY7QkYtU05HO1Nhbmd1aWU7MDswOzAKK0JGO0JGLVNNVDtTYW5tYXRlbmdhOzA7MDswCitCRjtCRi1TRU47U2VubzswOzA7MAorQkY7QkYtU0lTO1Npc3NpbGk7MDswOzAKK0JGO0JGLVNPTTtTb3VtOzA7MDswCitCRjtCRi1TT1I7U291cm91OzA7MDswCitCRjtCRi1UQVA7VGFwb2E7MDswOzAKK0JGO0JGLVRVSTtUdWk7MDswOzAKK0JGO0JGLVlBRztZYWdoYTswOzA7MAorQkY7QkYtWUFUO1lhdGVuZ2E7MDswOzAKK0JGO0JGLVpJUjtaaXJvOzA7MDswCitCRjtCRi1aT047Wm9uZG9tYTswOzA7MAorQkY7QkYtWk9VO1pvdW5kd2VvZ287MDswOzAKK0JHO0JHLTA7QmxhZ29ldmdyYWQ7MDswOzAKK0JHO0JHLTAyO0J1cmdhczswOzA7MAorQkc7QkctMDg7RG9icmllOzA7MDswCitNQTtNQS1GSUc7RmlndWlnOzA7MDswNAorTUE7TUEtR1VFO0d1ZWxtaW07MDswOzQKK01BO01BLUlGUjtJZnJhbmU7MDswOzA2CitNQTtNQS1KUkE7SmVyYWRhOzA7MDswNAorTUE7TUEtS0VTO0tlbGFhdCBTcmFnaG5hOzA7MDswCitNQTtNQS1LRU47S2VuaXRyYTswOzA7MDIKK01BO01BLUtIRTtLaGVtaXNzZXQ7MDswOzA3CitNQTtNQS1LSE47S2hlbmlmcmE7MDswOzA2CitNQTtNQS1LSE87S2hvdXJpYmdhOzA7MDswOQorTUE7TUEtTEFBO0xhYXlvdW5lOzA7MDs1CitNQTtNQS1MQVI7TGFyYWNoZTswOzA7MAorTUE7TUEtTUFSO01hcnJha2VjaDswOzA7MAorTUE7TUEtTUVLO01la25lczswOzA7MDYKK01BO01BLU5BRDtOYWRvcjswOzA7MDQKK01BO01BLU9VQTtPdWFyemF6YXRlOzA7MDszCitNQTtNQS1PVUQ7T3VlZCBlZCBEYWhhYjswOzA7NgorTUE7TUEtT1VKO091amRhOzA7MDswNAorTUE7TUEtUkJBO1JhYmF0LVNhbGU7MDswOzA3CitNQTtNQS1TQUY7U2FmaTswOzA7MAorTUE7TUEtU0VGO1NlZnJvdTswOzA7MDUKK01BO01BLVNFVDtTZXR0YXQ7MDswOzA5CitNQTtNQS1TSUs7U2lkaSBLYWNlbTswOzA7MDIKK01BO01BLVRORztUYW5nZXI7MDswOzAKK01BO01BLVROVDtUYW4tVGFuOzA7MDs0CitNQTtNQS1UQU87VGFvdW5hdGU7MDswOzA7MworTUE7TUEtVEFSO1Rhcm91ZGFubnQ7MDswOzMKK01BO01BLVRBVDtUYXRhOzA7MDs0OworTUE7TUEtVEFaO1RhemE7MDswOzAzOworTUE7TUEtVEVUO1RldG91YW47MDswOzAKK01BO01BLVRJWjtUaXpuaXQ7MDswOzMKK01EO01ELUdBO0dndXppYSwgVW5pdGF0ZSBUZXJpdG9yaWFsIEF1dG9ub207MDswOzBhdXRvbm9tb3VzIHRlcnJpdG9yeQorTUQ7TUQtQ1U7Q2hpaW51OzA7MDswO2NpdHkKK01EO01ELVNOO1N0aW5nYSBOaXN0cnVsdWksIHVuaXRhdGVhIHRlcml0b3JpYWwgZGluOzA7MDswdGVycml0b3JpYWwgdW5pdAorTUQ7TUQtQkE7QmxpOzA7MDswO2Rpc3RyaWN0CitNRDtNRC1DQTtDYWh1bDswOzA7MDtkaXN0cmljdAorTUQ7TUQtQ0g7Q2hpaW51OzA7MDswO2Rpc3RyaWN0CitNRDtNRC1FRDtFZGluZTswOzA7MDtkaXN0cmljdAorTUQ7TUQtTEE7THB1bmE7MDswOzA7ZGlzdHJpY3QKK01EO01ELU9SO09yaGVpOzA7MDswO2Rpc3RyaWN0CitNRDtNRC1TTztTb3JvY2E7MDswOzA7ZGlzdHJpY3QKK01EO01ELVRJO1RpZ2hpbmEgW0JlbmRlcl07MDswOzA7ZGlzdHJpY3QKK01EO01ELVVOO1VuZ2hlbmk7MDswOzA7ZGlzdHJpY3QKK01HO01HLVQ7QW50YW5hbmFyaXZvOzA7MDswCitNRztNRy1EO0FudHNpcmFuYW5hOzA7MDswCitNRztNRy1GO0ZpYW5hcmFudHNvYTswOzA7MAorTUc7TUctTTtNYWhhamFuZ2E7MDswOzAKK01HO01HLUE7VG9hbWFzaW5hOzA7MDswCitNRztNRy1VO1RvbGlhcmE7MDswOzAKK01IO01ILUFMTDtBaWxpbmdsYXBhbGFwOzA7MDtMCitNSDtNSC1BTEs7QWlsdWs7MDswO1QKK01IO01ILUFSTjtBcm5vOzA7MDtUCitNSDtNSC1BVVI7QXVyOzA7MDtUCitNSDtNSC1FQk87RWJvbjswOzA7TAorTUg7TUgtRU5JO0VuaXdldG9rOzA7MDtMCitNSDtNSC1KQUw7SmFsdWl0OzA7MDtMCitNSDtNSC1LSUw7S2lsaTswOzA7TAorTUg7TUgtS1dBO0t3YWphbGVpbjswOzA7TAorTUg7TUgtTEFFO0xhZTswOzA7TAorTUg7TUgtTElCO0xpYjswOzA7TAorTUg7TUgtTElLO0xpa2llcDswOzA7VAorTUg7TUgtTUFKO01hanVybzswOzA7VAorTUg7TUgtTUFMO01hbG9lbGFwOzA7MDtUCitNSDtNSC1NRUo7TWVqaXQ7MDswO1QKK01IO01ILU1JTDtNaWxpOzA7MDtUCitNSDtNSC1OTUs7TmFtb3JpazswOzA7TAorTUg7TUgtTk1VO05hbXU7MDswO0wKK01IO01ILVJPTjtSb25nZWxhcDswOzA7TAorTUg7TUgtVUpBO1VqYWU7MDswO0wKK01IO01ILVVKTDtVamVsYW5nOzA7MDtMCitNSDtNSC1VVEk7VXRpcmlrOzA7MDtUCitNSDtNSC1XVEg7V290aG87MDswO0wKK01IO01ILVdUSjtXb3RqZTswOzA7VAorQkc7QkctMDc7R2Ficm92bzswOzA7MAorQkc7QkctMjY7SGFza292bzswOzA7MAorQkc7QkctMjg7SmFtYm9sOzA7MDswCitCRztCRy0wOTtLcmRhbGk7MDswOzAKK0JHO0JHLTA7S2p1c3RlbmRpbDswOzA7MAorQkc7QkctO0xvdmVlOzA7MDswCitCRztCRy0yO01vbnRhbmE7MDswOzAKK0JHO0JHLTM7UGF6YXJkaWs7MDswOzAKK0JHO0JHLTQ7UGVybmlrOzA7MDswCitCRztCRy01O1BsZXZlbjswOzA7MAorQkc7QkctNjtQbG92ZGl2OzA7MDswCitCRztCRy03O1JhemdyYWQ7MDswOzAKK0JHO0JHLTg7UnVzZTswOzA7MAorQkc7QkctOTtTaWxpc3RyYTswOzA7MAorQkc7QkctMjA7U2xpdmVuOzA7MDswCitCRztCRy0yO1Ntb2xqYW47MDswOzAKK0JHO0JHLTIzO1NvZmlqYTswOzA7MAorQkc7QkctMjI7U29maWphLUdyYWQ7MDswOzAKK0JHO0JHLTI0O1N0YXJhIFphZ29yYTswOzA7MAorQkc7QkctMjc7dW1lbjswOzA7MAorQkc7QkctMjU7VHJnb3ZpdGU7MDswOzAKK0JHO0JHLTAzO1Zhcm5hOzA7MDswCitCRztCRy0wNDtWZWxpa28gVHJub3ZvOzA7MDswCitCRztCRy0wNTtWaWRpbjswOzA7MAorQkc7QkctMDY7VnJhY2E7MDswOzAKK0JIO0JILTA7QWwgYWRkOzA7MDswCitCSDtCSC0wMztBbCBNYW5tYWg7MDswOzAKK0JIO0JILTA7QWwgTWluYXFhaCBhbCBHaGFyYnlhaDswOzA7MAorQkg7QkgtMDc7QWwgTWluYXFhaCBhbCBXdXM7MDswOzAKK0JIO0JILTA1O0FsIE1pbmFxYWggYXNoIFNoYW1seWFoOzA7MDswCitCSDtCSC0wMjtBbCBNdWFycmFxOzA7MDswCitCSDtCSC0wOTtBciBSaWY7MDswOzAKK0JIO0JILTA0O0ppZGQgYWY7MDswOzAKK0JIO0JILTI7TWFkbmF0IGFtYWQ7MDswOzAKK0JIO0JILTA4O01hZG5hdCBzOzA7MDswCitCSDtCSC0xMDtNaW5hcWF0IEp1enVyIGF3cjswOzA7MAorQkg7QkgtMDY7U2l0cmFoOzA7MDswCitCSTtCSS1CQjtCdWJhbnphOzA7MDswCitCSTtCSS1CSjtCdWp1bWJ1cmE7MDswOzAKK0JJO0JJLUJSO0J1cnVyaTswOzA7MAorQkk7QkktQ0E7Q2Fua3V6bzswOzA7MAorQkk7QkktQ0k7Q2liaXRva2U7MDswOzAKK0JJO0JJLUdJO0dpdGVnYTswOzA7MAorQkk7QkktS1I7S2FydXppOzA7MDswCitCSTtCSS1LWTtLYXlhbnphOzA7MDswCitCSTtCSS1LSTtLaXJ1bmRvOzA7MDswCitCSTtCSS1NQTtNYWthbWJhOzA7MDswCitCSTtCSS1NVTtNdXJhbXZ5YTswOzA7MAorQkk7QkktTVk7TXV5aW5nYTswOzA7MAorQkk7QkktTkc7Tmdvemk7MDswOzAKK0JJO0JJLVJUO1J1dGFuYTswOzA7MAorQkk7QkktUlk7UnV5aWdpOzA7MDswCitCSjtCSi1BTDtBbGlib3JpOzA7MDswCitCSjtCSi1BSztBdGFrb3JhOzA7MDswCitCSjtCSi1BUTtBdGxhbnRpcXVlOzA7MDswCitCSjtCSi1CTztCb3Jnb3U7MDswOzAKK0JKO0JKLUNPO0NvbGxpbmVzOzA7MDswCitCSjtCSi1ETztEb25nYTswOzA7MAorQko7QkotS087S291ZmZvOzA7MDswCitCSjtCSi1MSTtMaXR0b3JhbDswOzA7MAorQko7QkotTU87TW9ubzswOzA7MAorQko7QkotT1U7T3VlbWU7MDswOzAKK0JKO0JKLVBMO1BsYXRlYXU7MDswOzAKK0JKO0JKLVpPO1pvdTswOzA7MAorQk47Qk4tQkU7QmVsYWl0OzA7MDswCitCTjtCTi1CTTtCcnVuZWktTXVhcmE7MDswOzAKK0JOO0JOLVRFO1RlbWJ1cm9uZzswOzA7MAorQk47Qk4tVFU7VHV0b25nOzA7MDswCitCTztCTy1DO0NvY2hhYmFtYmE7MDswOzAKK0JPO0JPLUg7Q2h1cXVpc2FjYTswOzA7MAorQk87Qk8tQjtFbCBCZW5pOzA7MDswCitCTztCTy1MO0xhIFBhejswOzA7MAorQk87Qk8tTztPcnVybzswOzA7MAorQk87Qk8tTjtQYW5kbzswOzA7MAorQk87Qk8tUDtQb3RvczswOzA7MAorQk87Qk8tUztTYW50YSBDcnV6OzA7MDswCitCTztCTy1UO1RhcmlqYTswOzA7MAorQlI7QlItREY7RGlzdHJpdG8gRmVkZXJhbDswOzA7MDtmZWRlcmFsIGRpc3RyaWN0CitCUjtCUi1BQztBY3JlOzA7MDswc3RhdGUKK0JSO0JSLUFMO0FsYWdvYXM7MDswOzBzdGF0ZQorQlI7QlItQVA7QW1hcDswOzA7MHN0YXRlCitCUjtCUi1BTTtBbWF6b25hczswOzA7MHN0YXRlCitCUjtCUi1CQTtCYWhpYTswOzA7MHN0YXRlCitCUjtCUi1DRTtDZWFyOzA7MDswc3RhdGUKK0JSO0JSLUVTO0VzcHJpdG8gU2FudG87MDswOzBzdGF0ZQorQlI7QlItR087R29pczswOzA7MHN0YXRlCitCUjtCUi1NQTtNYXJhbmhvOzA7MDswc3RhdGUKK0JSO0JSLU1UO01hdG8gR3Jvc3NvOzA7MDswc3RhdGUKK0JSO0JSLU1TO01hdG8gR3Jvc3NvIGRvIFN1bDswOzA7MHN0YXRlCitCUjtCUi1NRztNaW5hcyBHZXJhaXM7MDswOzBzdGF0ZQorQlI7QlItUEE7UGFyOzA7MDswc3RhdGUKK0JSO0JSLVBCO1BhcmFiYTswOzA7MHN0YXRlCitCUjtCUi1QUjtQYXJhbjswOzA7MHN0YXRlCitCUjtCUi1QRTtQZXJuYW1idWNvOzA7MDswc3RhdGUKK0JSO0JSLVBJO1BpYXVpOzA7MDswc3RhdGUKK0JSO0JSLVJKO1JpbyBkZSBKYW5laXJvOzA7MDswc3RhdGUKK0JSO0JSLVJOO1JpbyBHcmFuZGUgZG8gTm9ydGU7MDswOzBzdGF0ZQorQlI7QlItUlM7UmlvIEdyYW5kZSBkbyBTdWw7MDswOzBzdGF0ZQorQlI7QlItUk87Um9uZG9uaWE7MDswOzBzdGF0ZQorQlI7QlItUlI7Um9yYWltYTswOzA7MHN0YXRlCitCUjtCUi1TQztTYW50YSBDYXRhcmluYTswOzA7MHN0YXRlCitCUjtCUi1TUDtTbyBQYXVsbzswOzA7MHN0YXRlCitCUjtCUi1TRTtTZXJnaXBlOzA7MDswc3RhdGUKK0JSO0JSLVRPO1RvY2FudGluczswOzA7MHN0YXRlCitCUztCUy1BQztBY2tsaW5zIGFuZCBDcm9va2VkIElzbGFuZHM7MDswOzAKK0JTO0JTLUJJO0JpbWluaTswOzA7MAorQlM7QlMtQ0k7Q2F0IElzbGFuZDswOzA7MAorQlM7QlMtRVg7RXh1bWE7MDswOzAKK0JTO0JTLUZQO0ZyZWVwb3J0OzA7MDswCitCUztCUy1GQztGcmVzaCBDcmVlazswOzA7MAorQlM7QlMtR0g7R292ZXJub3JzIEhhcmJvdXI7MDswOzAKK0JTO0JTLUdUO0dyZWVuIFR1cnRsZSBDYXk7MDswOzAKK0JTO0JTLUhJO0hhcmJvdXIgSXNsYW5kOzA7MDswCitCUztCUy1IUjtIaWdoIFJvY2s7MDswOzAKK0JTO0JTLUlOO0luYWd1YTswOzA7MAorQlM7QlMtS0I7S2VtcHMgQmF5OzA7MDswCitCUztCUy1MSTtMb25nIElzbGFuZDswOzA7MAorQlM7QlMtTUg7TWFyc2ggSGFyYm91cjswOzA7MAorQlM7QlMtTUc7TWF5YWd1YW5hOzA7MDswCitCUztCUy1OUDtOZXcgUHJvdmlkZW5jZTswOzA7MAorQlM7QlMtTkI7TmljaG9sbHMgVG93biBhbmQgQmVycnkgSXNsYW5kczswOzA7MAorQlM7QlMtUkk7UmFnZ2VkIElzbGFuZDswOzA7MAorQlM7QlMtUlM7Um9jayBTb3VuZDswOzA7MAorQlM7QlMtU1A7U2FuZHkgUG9pbnQ7MDswOzAKK0JTO0JTLVNSO1NhbiBTYWx2YWRvciBhbmQgUnVtIENheTswOzA7MAorQlQ7QlQtMzM7QnVtdGhhbmc7MDswOzAKK0JUO0JULTI7Q2hodWtoYTswOzA7MAorQlQ7QlQtMjI7RGFnYW5hOzA7MDswCitCVDtCVC1HQTtHYXNhOzA7MDswCitCVDtCVC0zO0hhOzA7MDswCitCVDtCVC00NDtMaHVlbnRzZTswOzA7MAorQlQ7QlQtNDI7TW9uZ2dhcjswOzA7MAorQlQ7QlQtMzQ7UGFybzswOzA7MAorQlQ7QlQtNDM7UGVtYWdhdHNoZWw7MDswOzAKK0JUO0JULTIzO1B1bmFraGE7MDswOzAKK0JUO0JULTQ1O1NhbWRydXAgSm9uZ2toYTswOzA7MAorQlQ7QlQtNDtTYW10c2U7MDswOzAKK0JUO0JULTM2O1NhcnBhbmc7MDswOzAKK0JUO0JULTU7VGhpbXBodTswOzA7MAorQlQ7QlQtMzU7VHJhc2hpZ2FuZzswOzA7MAorQlQ7QlQtVFk7VHJhc2hpIFlhbmd0c2U7MDswOzAKK0JUO0JULTMyO1Ryb25nc2E7MDswOzAKK0JUO0JULTM4O1RzaXJhbmc7MDswOzAKK0JUO0JULTI0O1dhbmdkdWUgUGhvZHJhbmc7MDswOzAKK0JUO0JULTM3O1poZW1nYW5nOzA7MDswCitCVztCVy1DRTtDZW50cmFsOzA7MDswCitCVztCVy1HSDtHaGFuemk7MDswOzAKK0JXO0JXLUtHO0tnYWxhZ2FkaTswOzA7MAorQlc7QlctS0w7S2dhdGxlbmc7MDswOzAKK0JXO0JXLUtXO0t3ZW5lbmc7MDswOzAKK0JXO0JXLU5XO05vcnRoLVdlc3Q7MDswOzAKK0JXO0JXLU5FO05vcnRoLUVhc3Q7MDswOzAKK0JXO0JXLVNFO1NvdXRoLUVhc3Q7MDswOzAKK0JXO0JXLVNPO1NvdXRoZXJuOzA7MDswCitCWTtCWS1CUjtCcmVzdHNrYXlhIHZvYmxhc3RzIFtCcmVzdHNrYXlhIG9ibGFzdF07QnJlc2NrYWphIHZvYmxhc2MgW0JyZXN0c2thamEgb2JsYXN0XTswOzAKK0JZO0JZLUhPO0hvbXllbHNrYXlhIHZvYmxhc3RzIFtHb21lbHNrYXlhIG9ibGFzdF07SG9tZWxza2FqYSB2b2JsYXNjIFtHb21lbHNrYWphIG9ibGFzdF07MDswCitCWTtCWS1IUjtIcm9kemVuc2theWEgdm9ibGFzdHMgW0dyb2RuZW5za2F5YSBvYmxhc3RdO0hyb2R6ZW5za2FqYSB2b2JsYXNjIFtHcm9kbmVuc2thamEgb2JsYXN0XTswOzAKK0JZO0JZLU1BO01haGlseW93c2theWEgdm9ibGFzdHMgW01vZ2lsZXZza2F5YSBvYmxhc3RdO01haGlsZXVza2FqYSB2b2JsYXNjIFtNb2dpbGV2c2thamEgb2JsYXN0XTswOzAKK0JZO0JZLU1JO01pbnNrYXlhIHZvYmxhc3RzIFtNaW5za2F5YSBvYmxhc3RdO01pbnNrYWphIHZvYmxhc2MgW01pbnNrYWphIG9ibGFzdF07MDswCitCWTtCWS1WSTtWaXRzeWVic2theWEgdm9ibGFzdHMgW1ZpdGVic2theWEgb2JsYXN0XTtWaWNlYnNrYWphIHZvYmxhc2MgW1ZpdGVic2thamEgb2JsYXN0XTswOzAKK0JaO0JaLUJaO0JlbGl6ZTswOzA7MAorQlo7QlotQ1k7Q2F5bzswOzA7MAorQlo7QlotQ1pMO0Nvcm96YWw7MDswOzAKK0JaO0JaLU9XO09yYW5nZSBXYWxrOzA7MDswCitCWjtCWi1TQztTdGFubiBDcmVlazswOzA7MAorQlo7QlotVE9MO1RvbGVkbzswOzA7MAorQ0E7Q0EtQUI7QWxiZXJ0YTswOzA7cHJvdmluY2UKK0NBO0NBLUJDO0JyaXRpc2ggQ29sdW1iaWE7Q29sb21iaWUtQnJpdGFubmlxdWU7MDswO3Byb3ZpbmNlCitDQTtDQS1NQjtNYW5pdG9iYTswOzA7cHJvdmluY2UKK0NBO0NBLU5CO05ldyBCcnVuc3dpY2s7Tm91dmVhdS1CcnVuc3dpY2s7MDswO3Byb3ZpbmNlCitDQTtDQS1OTDtOZXdmb3VuZGxhbmQgYW5kIExhYnJhZG9yO1RlcnJlLU5ldXZlLWV0LUxhYnJhZG9yOzA7MDtwcm92aW5jZQorQ0E7Q0EtTlM7Tm92YSBTY290aWE7Tm91dmVsbGUtY29zc2U7MDswO3Byb3ZpbmNlCitDQTtDQS1PTjtPbnRhcmlvOzA7MDtwcm92aW5jZQorQ0E7Q0EtUEU7UHJpbmNlIEVkd2FyZCBJc2xhbmQ7bGUtZHUtUHJpbmNlLWRvdWFyZDswOzA7cHJvdmluY2UKK0NBO0NBLVFDO1F1ZWJlYztRdWViZWM7MDswO3Byb3ZpbmNlCitDQTtDQS1TSztTYXNrYXRjaGV3YW47MDswO3Byb3ZpbmNlCitDQTtDQS1OVDtOb3J0aHdlc3QgVGVycml0b3JpZXM7VGVycml0b2lyZXMgZHUgTm9yZC1PdWVzdDswOzA7dGVycml0b3J5CitDQTtDQS1OVTtOdW5hdnV0OzA7MDswO3RlcnJpdG9yeQorQ0E7Q0EtWVQ7WXVrb24gVGVycml0b3J5O1RlcnJpdG9pcmUgZHUgWXVrb247MDswO3RlcnJpdG9yeQorQ0Q7Q0QtS047S2luc2hhc2E7MDswOzA7Y2l0eQorQ0Q7Q0QtQk47QmFuZHVuZHU7MDswO3Byb3ZpbmNlCitDRDtDRC1CQztCYXMtQ29uZ287MDswO3Byb3ZpbmNlCitDRDtDRC1FUTtxdWF0ZXVyOzA7MDtwcm92aW5jZQorQ0Q7Q0QtS1c7S2FzYWktT2NjaWRlbnRhbDswOzA7cHJvdmluY2UKK0NEO0NELUtFO0thc2FpLU9yaWVudGFsOzA7MDtwcm92aW5jZQorQ0Q7Q0QtS0E7S2F0YW5nYTswOzA7cHJvdmluY2UKK0NEO0NELU1BO01hbmllbWE7MDswO3Byb3ZpbmNlCitDRDtDRC1OSztOb3JkLUtpdnU7MDswO3Byb3ZpbmNlCitDRDtDRC1PUjtPcmllbnRhbGU7MDswO3Byb3ZpbmNlCitDRDtDRC1TSztTdWQtS2l2dTswOzA7cHJvdmluY2UKK0NGO0NGLUJHRjtCYW5ndWk7MDswOzA7Y2FwaXRhbAorQ0Y7Q0YtQkI7QmFtaW5ndWktQmFuZ29yYW4gW0JhbWluZ3VpLUJhbmdvcmFdOzA7MDswcHJlZmVjdHVyZQorQ0Y7Q0YtQks7QmFzc2UtS290dG87MDswOzBwcmVmZWN0dXJlCitDRjtDRi1ISztIYXV0ZS1Lb3R0bzswOzA7MHByZWZlY3R1cmUKK0NGO0NGLUhNO0hhdXQtTWJvbW91OzA7MDswcHJlZmVjdHVyZQorQ0Y7Q0YtS0c7S2VtbzswOzA7MHByZWZlY3R1cmUKK0NGO0NGLUxCO0xvYmF5ZTswOzA7MHByZWZlY3R1cmUKK0NGO0NGLUhTO01hbWJlcmUtS2FkZWk7MDswOzBwcmVmZWN0dXJlCitDRjtDRi1NQjtNYm9tb3U7MDswOzBwcmVmZWN0dXJlCitDRjtDRi1LQjtOYW5hLUdyZWJpemkgW05hbmEtR3JpYmluZ3VpXTswOzA7MHByZWZlY3R1cmUKK0NGO0NGLU5NO05hbmEtTWFtYmVyZTswOzA7MHByZWZlY3R1cmUKK0NGO0NGLU1QO09tYmVsbGEtTXBva287MDswOzBwcmVmZWN0dXJlCitDRjtDRi1VSztPdWFrYTswOzA7MHByZWZlY3R1cmUKK0NGO0NGLUFDO091aGFtOzA7MDswcHJlZmVjdHVyZQorQ0Y7Q0YtT1A7T3VoYW0tUGVuZGU7MDswOzBwcmVmZWN0dXJlCisjQ0Y7Q0YtU0U7U2FuZ2hhLU1iYWVyZSBbU2FuZ2hhMV0gW1NhbmdoYV07MDswOzBwcmVmZWN0dXJlCitDRjtDRi1TRTtTYW5naGExOzA7MDswcHJlZmVjdHVyZQorQ0Y7Q0YtVks7VmFrYWdhOzA7MDswcHJlZmVjdHVyZQorQ0c7Q0ctQlpWO0JyYXp6YXZpbGxlOzA7MDswO2NhcGl0YWwKK0NHO0NHLTEwO0JvdWVuemE7MDswO3JlZ2lvbgorQ0c7Q0ctODtDdXZldHRlOzA7MDtyZWdpb24KK0NHO0NHLTU7Q3V2ZXR0ZS1PdWVzdDswOzA7cmVnaW9uCitDRztDRy0xNDtLb3VpbG91OzA7MDtyZWdpb24KK0NHO0NHLTI7TGVrb3Vtb3U7MDswO3JlZ2lvbgorQ0c7Q0ctNztMaWtvdWFsYTswOzA7cmVnaW9uCitDRztDRy05O05pYXJpOzA7MDtyZWdpb24KK0NHO0NHLTQ7UGxhdGVhdXggW1BsYXRlYXV4MV07MDswO3JlZ2lvbgorQ0c7Q0ctMTI7UG9vbDswOzA7cmVnaW9uCitDRztDRy0zO1NhbmdoYTswOzA7cmVnaW9uCitDSDtDSC1BRztBYXJnYXU7MDswOzAKK0NIO0NILUFSO0FwcGVuemVsbCBBdXNzZXJyaG9kZW47MDswOzAKK0NIO0NILUFJO0FwcGVuemVsbCBJbm5lcnJob2RlbjswOzA7MAorQ0g7Q0gtQkw7QmFzZWwtTGFuZHNjaGFmdDswOzA7MAorQ0g7Q0gtQlM7QmFzZWwtU3RhZHQ7MDswOzAKK0NIO0NILUJFO0Jlcm47QmVybmU7MDswCitDSDtDSC1GUjtGcmlib3VyZyA7RnJlaWJ1cmcgOzA7MAorQ0g7Q0gtR0U7R2VuZXZlIDswOzA7MAorQ0g7Q0gtR0w7R2xhcnVzIDswOzA7MAorQ0g7Q0gtR1I7R3JhdWL8bmRlbiA7R3JpZ2lvbmkgKGl0KTswOzAKK0NIO0NILUpVO0p1cmEgOzA7MDswCitDSDtDSC1MVTtMdXplcm4gOzA7MDswCitDSDtDSC1ORTtOZXVjaGF0ZWw7MDswOzAKK0NIO0NILU5XO05pZHdhbGRlbiA7MDswOzAKK0NIO0NILU9XO09id2FsZGVuIDswOzA7MAorQ0g7Q0gtU0c7U2Fua3QgR2FsbGVuIDswOzA7MAorQ0g7Q0gtU0g7U2NoYWZmaGF1c2VuIDswOzA7MAorQ0g7Q0gtU1o7U2Nod3l6IDswOzA7MAorQ0g7Q0gtU087U29sb3RodXJuIDswOzA7MAorQ0g7Q0gtVEc7VGh1cmdhdSA7MDswOzAKK0NIO0NILVRJO1RpY2lubyAoaXQpOzA7MDswCitDSDtDSC1VUjtVcmkgOzA7MDswCitDSDtDSC1WUztWYWxhaXMgO1dhbGxpcyA7MDswCitDSDtDSC1WRDtWYXVkIDswOzA7MAorQ0g7Q0gtWkc7WnVnIDswOzA7MAorQ0g7Q0gtWkg7WnVyaWNoOzA7MDswCitDSTtDSS0wNjs4IE1vbnRhZ25lcyA7MDswOzAKK0NJO0NJLTY7QWduZWJpIDswOzA7MAorQ0k7Q0ktMDk7QmFzLVNhc3NhbmRyYSA7MDswOzAKK0NJO0NJLTA7RGVuZ3VlbGUgOzA7MDswCitDSTtDSS0wMjtIYXV0LVNhc3NhbmRyYSA7MDswOzAKK0NJO0NJLTA3O0xhY3MgOzA7MDswCitDSTtDSS0wO0xhZ3VuZXMgOzA7MDswCitDSTtDSS0yO01hcmFob3VlIDswOzA7MAorQ0k7Q0ktMDU7TW95ZW4tQ29tb2UgOzA7MDswCitDSTtDSS0xMDtOemktQ29tb2UgOzA7MDswCitDSTtDSS0wMztTYXZhbmVzIDswOzA7MAorQ0k7Q0ktNTtTdWQtQmFuZGFtYSA7MDswOzAKK0NJO0NJLTM7U3VkLUNvbW9lIDswOzA7MAorQ0k7Q0ktMDQ7VmFsbGVlIGR1IEJhbmRhbWEgOzA7MDswCitDSTtDSS00O1dvcm9kb3Vnb3UgOzA7MDswCitDSTtDSS0wODtaYW56YW4gOzA7MDswCitDTDtDTC1BSTtBaXNlbiBkZWwgR2VuZXJhbCBDYXJsb3MgSWJleiBkZWwgQ2FtcG87MDswOzAKK0NMO0NMLUFOO0FudG9mYWdhc3RhOzA7MDswCitDTDtDTC1BUjtBcmF1Y2FuYTswOzA7MAorQ0w7Q0wtQVQ7QXRhY2FtYTswOzA7MAorQ0w7Q0wtQkk7Qm8tQm87MDswOzAKK0NMO0NMLUNPO0NvcXVpbWJvOzA7MDswCitDTDtDTC1MSTtMaWJlcnRhZG9yIEdlbmVyYWwgQmVybmFyZG8gT0hpZ2dpbnM7MDswOzAKK0NMO0NMLUxMO0xvcyBMYWdvczswOzA7MAorQ0w7Q0wtTUE7TWFnYWxsYW5lczswOzA7MAorQ0w7Q0wtTUw7TWF1bGU7MDswOzAKK0NMO0NMLVJNO1JlZ2luIE1ldHJvcG9saXRhbmEgZGUgU2FudGlhZ287MDswOzAKK0NMO0NMLVRBO1RhcmFwYWM7MDswOzAKK0NMO0NMLVZTO1ZhbHBhcmFzbzswOzA7MAorQ007Q00tQUQ7QWRhbWFvdWE7QWRhbWFvdWE7MDswOworQ007Q00tQ0U7Q2VudHJlO0NlbnRyZTswOzA7CitDTTtDTS1FUztFYXN0O0VzdDswOzA7CitDTTtDTS1FTjtGYXIgTm9ydGg7RXh0cmVtZS1Ob3JkOzA7MAorQ007Q00tTFQ7TGl0dG9yYWw7TGl0dG9yYWw7MDswCitDTTtDTS1OTztOb3J0aDtOb3JkOzA7MAorQ007Q00tTlc7Tm9ydGgtV2VzdDtOb3JkLU91ZXN0OzA7MAorQ007Q00tU1U7U291dGg7U3VkOzA7MAorQ007Q00tU1c7U291dGgtV2VzdDtTdWQtT3Vlc3Q7MDswCitDTTtDTS1PVTtXZXN0O091ZXN0OzA7MAorQ047Q04tMDtCZWlqaW5nOzA7MDswbXVuaWNpcGFsaXR5CitDTjtDTi01MDtDaG9uZ3Fpbmc7MDswOzBtdW5pY2lwYWxpdHkKK0NOO0NOLTM7U2hhbmdoYWk7MDswOzBtdW5pY2lwYWxpdHkKK0NOO0NOLTI7VGlhbmppbjswOzA7MG11bmljaXBhbGl0eQorQ047Q04tMzQ7QW5odWk7MDswO3Byb3ZpbmNlCitDTjtDTi0zNTtGdWppYW47MDswO3Byb3ZpbmNlCitDTjtDTi02MjtHYW5zdTswOzA7cHJvdmluY2UKK0NOO0NOLTQ0O0d1YW5nZG9uZzswOzA7cHJvdmluY2UKK0NOO0NOLTUyO0d1aXpob3U7MDswO3Byb3ZpbmNlCitDTjtDTi00NjtIYWluYW47MDswO3Byb3ZpbmNlCitDTjtDTi03MztIZWJlaTswOzA7cHJvdmluY2UKK0NOO0NOLTIzO0hlaWxvbmdqaWFuZzswOzA7cHJvdmluY2UKK0NOO0NOLTQ7SGVuYW47MDswO3Byb3ZpbmNlCitDTjtDTi00MjtIdWJlaTswOzA7cHJvdmluY2UKK0NOO0NOLTQzO0h1bmFuOzA7MDtwcm92aW5jZQorQ047Q04tMzI7SmlhbmdzdTswOzA7cHJvdmluY2UKK0NOO0NOLTM2O0ppYW5neGk7MDswO3Byb3ZpbmNlCitDTjtDTi0yMjtKaWxpbjswOzA7cHJvdmluY2UKK0NOO0NOLTcyO0xpYW9uaW5nOzA7MDtwcm92aW5jZQorQ047Q04tNjM7UWluZ2hhaTswOzA7cHJvdmluY2UKK0NOO0NOLTY7U2hhYW54aTswOzA7cHJvdmluY2UKK0NOO0NOLTM3O1NoYW5kb25nOzA7MDtwcm92aW5jZQorQ047Q04tNzQ7U2hhbnhpOzA7MDtwcm92aW5jZQorQ047Q04tNTtTaWNodWFuOzA7MDtwcm92aW5jZQorQ047Q04tNztUYWl3YW4gOzA7MDtwcm92aW5jZQorQ047Q04tNTM7WXVubmFuOzA7MDtwcm92aW5jZQorQ047Q04tMzM7Wmhlamlhbmc7MDswO3Byb3ZpbmNlCitDTjtDTi00NTtHdWFuZ3hpOzA7MDthdXRvbm9tb3VzIHJlZ2lvbgorQ047Q04tNzU7TmVpIE1vbmdvbCAobW4pOzA7MDthdXRvbm9tb3VzIHJlZ2lvbgorQ047Q04tNjQ7TmluZ3hpYTswOzA7YXV0b25vbW91cyByZWdpb24KK0NOO0NOLTY1O1hpbmppYW5nOzA7MDthdXRvbm9tb3VzIHJlZ2lvbgorQ047Q04tNTQ7WGl6YW5nOzA7MDthdXRvbm9tb3VzIHJlZ2lvbgorQ047Q04tOTtYaWFuZ2dhbmcgKHpoKSA7SG9uZyBLb25nIChlbik7MDswO3NwZWNpYWwgYWRtaW5pc3RyYXRpdmUgcmVnaW9uCitDTjtDTi05MjtBb21lbiAoemgpIDtNYWNhbyAoZW4pOzA7MDtzcGVjaWFsIGFkbWluaXN0cmF0aXZlIHJlZ2lvbgorQ087Q08tREM7RGlzdHJpdG8gQ2FwaXRhbCBkZSBCb2dvdDswOzA7MDtjYXBpdGFsIGRpc3RyaWN0CitDTztDTy1BTUE7QW1hem9uYXM7MDswOzBkZXBhcnRtZW50CitDTztDTy1BTlQ7QW50aW9xdWlhOzA7MDswZGVwYXJ0bWVudAorQ087Q08tQVJBO0FyYXVjYTswOzA7MGRlcGFydG1lbnQKK0NPO0NPLUFUTDtBdGxudGljbzswOzA7MGRlcGFydG1lbnQKK0NPO0NPLUJPTDtCb2x2YXI7MDswOzBkZXBhcnRtZW50CitDTztDTy1CT1k7Qm95YWM7MDswOzBkZXBhcnRtZW50CitDTztDTy1DQUw7Q2FsZGFzOzA7MDswZGVwYXJ0bWVudAorQ087Q08tQ0FRO0NhcXVldDswOzA7MGRlcGFydG1lbnQKK0NPO0NPLUNBUztDYXNhbmFyZTswOzA7MGRlcGFydG1lbnQKK0NPO0NPLUNBVTtDYXVjYTswOzA7MGRlcGFydG1lbnQKK0NPO0NPLUNFUztDZXNhcjswOzA7MGRlcGFydG1lbnQKK0NPO0NPLUNPUjtDcmRvYmE7MDswOzBkZXBhcnRtZW50CitDTztDTy1DVU47Q3VuZGluYW1hcmNhOzA7MDswZGVwYXJ0bWVudAorQ087Q08tQ0hPO0Nob2M7MDswOzBkZXBhcnRtZW50CitDTztDTy1HVUE7R3VhaW5hOzA7MDswZGVwYXJ0bWVudAorQ087Q08tR1VWO0d1YXZpYXJlOzA7MDswZGVwYXJ0bWVudAorQ087Q08tSFVJO0h1aWxhOzA7MDswZGVwYXJ0bWVudAorQ087Q08tTEFHO0xhIEd1YWppcmE7MDswOzBkZXBhcnRtZW50CitDTztDTy1NQUc7TWFnZGFsZW5hOzA7MDswZGVwYXJ0bWVudAorQ087Q08tTUVUO01ldGE7MDswOzBkZXBhcnRtZW50CitDTztDTy1OQVI7TmFyaW87MDswOzBkZXBhcnRtZW50CitDTztDTy1OU0E7Tm9ydGUgZGUgU2FudGFuZGVyOzA7MDswZGVwYXJ0bWVudAorQ087Q08tUFVUO1B1dHVtYXlvOzA7MDswZGVwYXJ0bWVudAorQ087Q08tUVVJO1F1aW5kbzswOzA7MGRlcGFydG1lbnQKK0NPO0NPLVJJUztSaXNhcmFsZGE7MDswOzBkZXBhcnRtZW50CitDTztDTy1TQVA7U2FuIEFuZHJlcywgUHJvdmlkZW5jaWEgeSBTYW50YSBDYXRhbGluYTswOzA7MGRlcGFydG1lbnQKK0NPO0NPLVNBTjtTYW50YW5kZXI7MDswOzBkZXBhcnRtZW50CitDTztDTy1TVUM7U3VjcmU7MDswOzBkZXBhcnRtZW50CitDTztDTy1UT0w7VG9saW1hOzA7MDswZGVwYXJ0bWVudAorQ087Q08tVkFDO1ZhbGxlIGRlbCBDYXVjYTswOzA7MGRlcGFydG1lbnQKK0NPO0NPLVZBVTtWYXVwZXM7MDswOzBkZXBhcnRtZW50CitDTztDTy1WSUQ7VmljaGFkYTswOzA7MGRlcGFydG1lbnQKK0NSO0NSLUE7QWxhanVlbGE7MDswOzAKK0NSO0NSLUM7Q2FydGFnbzswOzA7MAorQ1I7Q1ItRztHdWFuYWNhc3RlOzA7MDswCitDUjtDUi1IO0hlcmVkaWE7MDswOzAKK0NSO0NSLUw7TGltbjswOzA7MAorQ1I7Q1ItUDtQdW50YXJlbmFzOzA7MDswCitDUjtDUi1TSjtTYW4gSm9zZTswOzA7MAorQ1U7Q1UtMDk7Q2FtYWf8ZXk7MDswO3Byb3ZpbmNlCitDVTtDVS0wODtDaWVnbyBkZSB2aWxhOzA7MDtwcm92aW5jZQorQ1U7Q1UtMDY7Q2llbmZ1ZWdvczswOzA7cHJvdmluY2UKK0NVO0NVLTAzO0NpdWRhZCBkZSBMYSBIYWJhbmE7MDswO3Byb3ZpbmNlCitDVTtDVS0yO0dyYW5tYTswOzA7cHJvdmluY2UKK0NVO0NVLTQ7R3VhbnRuYW1vOzA7MDtwcm92aW5jZQorQ1U7Q1UtO0hvbGd1bjswOzA7cHJvdmluY2UKK0NVO0NVLTAyO0xhIEhhYmFuYTswOzA7cHJvdmluY2UKK0NVO0NVLTA7TGFzIFR1bmFzOzA7MDtwcm92aW5jZQorQ1U7Q1UtMDQ7TWF0YW56YXM7MDswO3Byb3ZpbmNlCitDVTtDVS0wO1BpbmFyIGRlbCBSbzswOzA7cHJvdmluY2UKK0NVO0NVLTA3O1NhbmN0aSBTcHJpdHVzOzA7MDtwcm92aW5jZQorQ1U7Q1UtMztTYW50aWFnbyBkZSBDdWJhOzA7MDtwcm92aW5jZQorQ1U7Q1UtMDU7VmlsbGEgQ2xhcmE7MDswO3Byb3ZpbmNlCitDVTtDVS05OTtJc2xhIGRlIGxhIEp1dmVudHVkOzA7MDswc3BlY2lhbCBtdW5pY2lwYWxpdHkKK0NWO0NWLUJWO0JvYSBWaXN0YTswOzA7QgorQ1Y7Q1YtQlI7QnJhdmE7MDswO1MKK0NWO0NWLUNTO0NhbGhldGEgZGUgU28gTWlndWVsOzA7MDtTCitDVjtDVi1NQTtNYWlvOzA7MDtTCitDVjtDVi1NTztNb3N0ZWlyb3M7MDswO1MKK0NWO0NWLVBBO1BhbDswOzA7QgorQ1Y7Q1YtUE47UG9ydG8gTm92bzswOzA7QgorQ1Y7Q1YtUFI7UHJhaWE7MDswO1MKK0NWO0NWLVJHO1JpYmVpcmEgR3JhbmRlOzA7MDtCCitDVjtDVi1TTDtTYWw7MDswO0IKK0NWO0NWLUNBO1NhbnRhIENhdGFyaW5hOzA7MDtTCitDVjtDVi1DUjtTYW50YSBDcnV6OzA7MDtTCitDVjtDVi1TRDtTbyBEb21pbmdvczswOzA7UworQ1Y7Q1YtU0Y7U28gRmlsaXBlOzA7MDtTCitDVjtDVi1TTjtTbyBOaWNvbGF1OzA7MDtCCitDVjtDVi1TVjtTbyBWaWNlbnRlOzA7MDtCCitDVjtDVi1UQTtUYXJyYWZhbDswOzA7UworQ1k7Q1ktMDQ7QW1tb2Nob3N0b3M7TWF1c2E7MDswCitDWTtDWS0wNjtLZXJ5bmVpYTtHaXJuZTswOzAKK0NZO0NZLTAzO0xhcm5ha2E7TGFybmFrYTswOzAKK0NZO0NZLTA7TGVma29zaWE7TGVma29hOzA7MAorQ1k7Q1ktMDI7TGVtZXNvcztMZXltb3N1bjswOzAKK0NZO0NZLTA1O1BhZm9zO0JhZjswOzAKK0NaO0NaLUpDO0ppaG9lZXNrIGtyYWo7MDswOzAKK0NaO0NaLUpNO0ppaG9tb3JhdnNrIGtyYWogOzA7MDswCitDWjtDWi1LQTtLYXJsb3ZhcnNrIGtyYWo7MDswOzAKK0NaO0NaLUtSO0tybG92ZWhyYWRlY2sga3JhajswOzA7MAorQ1o7Q1otTEk7TGliZXJlY2sga3JhajswOzA7MAorQ1o7Q1otTU87TW9yYXZza29zbGV6c2sga3JhajswOzA7MAorQ1o7Q1otT0w7T2xvbW91Y2sga3JhajswOzA7MAorQ1o7Q1otUEE7UGFyZHViaWNrIGtyYWo7MDswOzAKK0NaO0NaLVBMO1BsemVzayBrcmFqOzA7MDswCitDWjtDWi1QUjtQcmFoYSwgaGxhdm4gbXN0bzswOzA7MAorQ1o7Q1otU1Q7U3RlZG9lZXNrIGtyYWo7MDswOzAKK0NaO0NaLVVTO3N0ZWNrIGtyYWogOzA7MDswCitDWjtDWi1WWTtWeXNvZWluYTswOzA7MAorQ1o7Q1otWkw7Wmxuc2sga3JhajswOzA7MAorREU7REUtQlc7QmFkZW4tV/xydHRlbWJlcmc7MDswOzAKK0RFO0RFLUJZO0JheWVybjswOzA7MAorREU7REUtQkU7QmVybGluOzA7MDswCitERTtERS1CQjtCcmFuZGVuYnVyZzswOzA7MAorREU7REUtSEI7QnJlbWVuOzA7MDswCitERTtERS1ISDtIYW1idXJnOzA7MDswCitERTtERS1IRTtIZXNzZW47MDswOzAKK0RFO0RFLU1WO01lY2tsZW5idXJnLVZvcnBvbW1lcm47MDswOzAKK0RFO0RFLU5JO05pZWRlcnNhY2hzZW47MDswOzAKK0RFO0RFLU5XO05vcmRyaGVpbi1XZXN0ZmFsZW47MDswOzAKK0RFO0RFLVJQO1JoZWlubGFuZC1QZmFsejswOzA7MAorREU7REUtU0w7U2FhcmxhbmQ7MDswOzAKK0RFO0RFLVNOO1NhY2hzZW47MDswOzAKK0RFO0RFLVNUO1NhY2hzZW4tQW5oYWx0OzA7MDswCitERTtERS1TSDtTY2hsZXN3aWctSG9sc3RlaW47MDswOzAKK0RFO0RFLVRIO1Ro/HJpbmdlbjswOzA7MAorREo7REotQVM7QWxpIFNhYmllaDswOzA7cmVnaW9uCitESjtESi1ESTtEaWtoaWw7MDswO3JlZ2lvbgorREo7REotREo7RGppYm91dGk7MDswOzB2aWxsZQorREo7REotT0I7T2JvY2s7MDswO3JlZ2lvbgorREo7REotVEE7VGFkam91cmFoOzA7MDtyZWdpb24KK0RLO0RLLTQ3O0ZyZWRlcmlrc2Jlcmc7MDswOzA7Y2l0eQorREs7REstMDtLYmVuaGF2bjswOzA7MDtjaXR5CitESztESy0wNDA7Qm9ybmhvbG07MDswO2NvdW50eQorREs7REstMDIwO0ZyZWRlcmlrc2Jvcmc7MDswO2NvdW50eQorREs7REstMDQyO0Z5bjswOzA7Y291bnR5CitESztESy0wNTtLYmVuaGF2bjswOzA7Y291bnR5CitESztESy0wODA7Tm9yZGp5bGxhbmQ7MDswO2NvdW50eQorREs7REstMDU1O1JpYmU7MDswO2NvdW50eQorREs7REstMDY1O1JpbmdrYmluZzswOzA7Y291bnR5CitESztESy0wMjU7Um9za2lsZGU7MDswO2NvdW50eQorREs7REstMDM1O1N0b3JzdHJtOzA7MDtjb3VudHkKK0RLO0RLLTA1MDtTbmRlcmp5bGxhbmQ7MDswO2NvdW50eQorREs7REstMDYwO1ZlamxlOzA7MDtjb3VudHkKK0RLO0RLLTAzMDtWZXN0c2psbGFuZDswOzA7Y291bnR5CitESztESy0wNzY7Vmlib3JnOzA7MDtjb3VudHkKK0RLO0RLLTA3MDtyaHVzOzA7MDtjb3VudHkKK0RPO0RPLTA7RGlzdHJpdG8gTmFjaW9uYWwgKFNhbnRvIERvbWluZ28pOzA7MDswO2Rpc3RyaWN0CitETztETy0wMjtBenVhOzA7MDtwcm92aW5jZQorRE87RE8tMDM7QmFob3J1Y287MDswO3Byb3ZpbmNlCitETztETy0wNDtCYXJhaG9uYTswOzA7cHJvdmluY2UKK0RPO0RPLTA1O0RhamFibjswOzA7cHJvdmluY2UKK0RPO0RPLTA2O0R1YXJ0ZTswOzA7cHJvdmluY2UKK0RPO0RPLTA4O0VsIFNleWJvIFtFbCBTZWlib107MDswO3Byb3ZpbmNlCitETztETy0wOTtFc3BhaWxsYXQ7MDswO3Byb3ZpbmNlCitETztETy0zMDtIYXRvIE1heW9yOzA7MDtwcm92aW5jZQorRE87RE8tMDtJbmRlcGVuZGVuY2lhOzA7MDtwcm92aW5jZQorRE87RE8tO0xhIEFsdGFncmFjaWE7MDswO3Byb3ZpbmNlCitETztETy0wNztMYSBFc3RyZWxsZXRhIFtFbGFzIFBpYV07MDswO3Byb3ZpbmNlCitETztETy0yO0xhIFJvbWFuYTswOzA7cHJvdmluY2UKK0RPO0RPLTM7TGEgVmVnYTswOzA7cHJvdmluY2UKK0RPO0RPLTQ7TWFyYSBUcmluaWRhZCBTbmNoZXo7MDswO3Byb3ZpbmNlCitETztETy0yODtNb25zZW9yIE5vdWVsOzA7MDtwcm92aW5jZQorRE87RE8tNTtNb250ZSBDcmlzdGk7MDswO3Byb3ZpbmNlCitETztETy0yOTtNb250ZSBQbGF0YTswOzA7cHJvdmluY2UKK0RPO0RPLTY7UGVkZXJuYWxlczswOzA7cHJvdmluY2UKK0RPO0RPLTc7UGVyYXZpYTswOzA7cHJvdmluY2UKK0RPO0RPLTg7UHVlcnRvIFBsYXRhOzA7MDtwcm92aW5jZQorRE87RE8tOTtTYWxjZWRvOzA7MDtwcm92aW5jZQorRE87RE8tMjA7U2FtYW47MDswO3Byb3ZpbmNlCitETztETy0yO1NhbiBDcmlzdGJhbDswOzA7cHJvdmluY2UKK0RPO0RPLTIyO1NhbiBKdWFuOzA7MDtwcm92aW5jZQorRE87RE8tMjM7U2FuIFBlZHJvIGRlIE1hY29yczswOzA7cHJvdmluY2UKK0RPO0RPLTI0O1NuY2hleiBSYW1yZXo7MDswO3Byb3ZpbmNlCitETztETy0yNTtTYW50aWFnbzswOzA7cHJvdmluY2UKK0RPO0RPLTI2O1NhbnRpYWdvIFJvZHJndWV6OzA7MDtwcm92aW5jZQorRE87RE8tMjc7VmFsdmVyZGU7MDswO3Byb3ZpbmNlCitEWjtEWi0wO0FkcmFyIFtBZHJhcjFdOzA7MDswCitEWjtEWi00NDtBaW4gRGVmbGE7MDswOzAKK0RaO0RaLTQ2O0FpbiBUZW1vdWNoZW50OzA7MDswCitEWjtEWi02O0FsZ2VyOzA7MDswCitEWjtEWi0yMztBbm5hYmE7MDswOzAKK0RaO0RaLTA1O0JhdG5hOzA7MDswCitEWjtEWi0wODtCZWNoYXI7MDswOzAKK0RaO0RaLTA2O0JlamFpYTswOzA7MAorRFo7RFotMDc7Qmlza3JhOzA7MDswCitEWjtEWi0wOTtCbGlkYTswOzA7MAorRFo7RFotMzQ7Qm9yZGogQm91IEFycmVyaWRqOzA7MDswCitEWjtEWi01NDtCb3VpcmE7MDswOzAKK0RaO0RaLTM1O0JvdW1lcmRlczswOzA7MAorRFo7RFotMDI7Q2hsZWY7MDswOzAKK0RaO0RaLTI1O0NvbnN0YW50aW5lOzA7MDswCitEWjtEWi03O0RqZWxmYTswOzA7MAorRFo7RFotMzI7RWwgQmF5YWRoOzA7MDswCitEWjtEWi0zOTtFbCBPdWVkOzA7MDswCitEWjtEWi0zNjtFbCBUYXJmOzA7MDswCitEWjtEWi00NztHaGFyZGFpYTswOzA7MAorRFo7RFotMjQ7R3VlbG1hOzA7MDswCitEWjtEWi0zMztJbGxpemk7MDswOzAKK0RaO0RaLTg7SmlqZWw7MDswOzAKK0RaO0RaLTQwO0toZW5jaGVsYTswOzA7MAorRFo7RFotMDM7TGFnaG91YXQ7MDswOzAKK0RaO0RaLTI5O01hc2NhcmE7MDswOzAKK0RaO0RaLTI2O01lZGVhOzA7MDswCitEWjtEWi00MztNaWxhOzA7MDswCitEWjtEWi0yNztNb3N0YWdhbmVtOzA7MDswCitEWjtEWi0yODtNc2lsYTswOzA7MAorRFo7RFotNDU7TmFhbWE7MDswOzAKK0RaO0RaLTYzO09yYW47MDswOzAKK0RaO0RaLTMwO091YXJnbGE7MDswOzAKK0RaO0RaLTA0O091bSBlbCBCb3VhZ2hpOzA7MDswCitEWjtEWi00ODtSZWxpemFuZTswOzA7MAorRFo7RFotMjA7U2FpZGE7MDswOzAKK0RaO0RaLTk7U2V0aWY7MDswOzAKK0RaO0RaLTIyO1NpZGkgQmVsIEFiYmVzOzA7MDswCitEWjtEWi02MjtTa2lrZGE7MDswOzAKK0RaO0RaLTQ7U291ayBBaHJhczswOzA7MAorRFo7RFotMTtUYW1hbmdoYXNzZXQ7MDswOzAKK0RaO0RaLTUyO1RlYmVzc2E7MDswOzAKK0RaO0RaLTY0O1RpYXJldDswOzA7MAorRFo7RFotMzc7VGluZG91ZjswOzA7MAorRFo7RFotNDI7VGlwYXphOzA7MDswCitEWjtEWi0zODtUaXNzZW1zaWx0OzA7MDswCitEWjtEWi01O1RpemkgT3V6b3U7MDswOzAKK0RaO0RaLTY1O1RsZW1jZW47MDswOzAKK0VDO0VDLUE7QXp1YXk7MDswOzAKK0VDO0VDLUI7Qm9sdmFyOzA7MDswCitFQztFQy1GO0NhYXI7MDswOzAKK0VDO0VDLUM7Q2FyY2hpOzA7MDswCitFQztFQy1YO0NvdG9wYXhpOzA7MDswCitFQztFQy1IO0NoaW1ib3Jhem87MDswOzAKK0VDO0VDLU87RWwgT3JvOzA7MDswCitFQztFQy1FO0VzbWVyYWxkYXM7MDswOzAKK0VDO0VDLVc7R2FscGFnb3M7MDswOzAKK0VDO0VDLUc7R3VheWFzOzA7MDswCitFQztFQy1JO0ltYmFidXJhOzA7MDswCitFQztFQy1MO0xvamE7MDswOzAKK0VDO0VDLVI7TG9zIFJvczswOzA7MAorRUM7RUMtTTtNYW5hYjswOzA7MAorRUM7RUMtUztNb3JvbmEtU2FudGlhZ287MDswOzAKK0VDO0VDLU47TmFwbzswOzA7MAorRUM7RUMtWTtQYXN0YXphOzA7MDswCitFQztFQy1QO1BpY2hpbmNoYTswOzA7MAorRUM7RUMtVTtTdWN1bWJvczswOzA7MAorRUM7RUMtVDtUdW5ndXJhaHVhOzA7MDswCitFQztFQy1aO1phbW9yYS1DaGluY2hpcGU7MDswOzAKK0VFO0VFLTM3O0hhcmp1bWFhOzA7MDswCitFRTtFRS0zOTtIaWl1bWFhOzA7MDswCitFRTtFRS00NDtJZGEtVmlydW1hYTswOzA7MAorRUU7RUUtNDk7SmdldmFtYWE7MDswOzAKK0VFO0VFLTU7SnJ2YW1hYTswOzA7MAorRUU7RUUtNTc7TG5lbWFhOzA7MDswCitFRTtFRS01OTtMbmUtVmlydW1hYTswOzA7MAorRUU7RUUtNjU7UGx2YW1hYTswOzA7MAorRUU7RUUtNjc7UHJudW1hYTswOzA7MAorRUU7RUUtNzA7UmFwbGFtYWE7MDswOzAKK0VFO0VFLTc0O1NhYXJlbWFhOzA7MDswCitFRTtFRS03ODtUYXJ0dW1hYTswOzA7MAorRUU7RUUtODI7VmFsZ2FtYWE7MDswOzAKK0VFO0VFLTg0O1ZpbGphbmRpbWFhOzA7MDswCitFRTtFRS04NjtWcnVtYWE7MDswOzAKK0VHO0VHLURLO0FkIERhcWFobGl5YWg7MDswOzAKK0VHO0VHLUJBO0FsIEJhciBhbCBBbWFyOzA7MDswCitFRztFRy1CSDtBbCBCdWF5cmFoOzA7MDswCitFRztFRy1GWU07QWwgRmF5eXVtOzA7MDswCitFRztFRy1HSDtBbCBHaGFyYml5YWg7MDswOzAKK0VHO0VHLUFMWDtBbCBJc2thbmRhcml5YWg7MDswOzAKK0VHO0VHLUlTO0FsIElzbWFseWFoOzA7MDswCitFRztFRy1HWjtBbCBKemFoOzA7MDswCitFRztFRy1NTkY7QWwgTWluZnlhaDswOzA7MAorRUc7RUctTU47QWwgTWlueTswOzA7MAorRUc7RUctQztBbCBRaGlyYWg7MDswOzAKK0VHO0VHLUtCO0FsIFFhbHlieWFoOzA7MDswCitFRztFRy1XQUQ7QWwgV2QgYWwgSmFkZDswOzA7MAorRUc7RUctU0hSO0FzaCBTaGFycXlhaDswOzA7MAorRUc7RUctU1VaO0FzIFN1d2F5czswOzA7MAorRUc7RUctQVNOO0Fzd247MDswOzAKK0VHO0VHLUFTVDtBc3k7MDswOzAKK0VHO0VHLUJOUztCYW4gU3V3YXlmOzA7MDswCitFRztFRy1QVFM7QnIgU2FkOzA7MDswCitFRztFRy1EVDtEdW15OzA7MDswCitFRztFRy1KUztKYW5iIFNuOzA7MDswCitFRztFRy1LRlM7S2FmciBhc2ggU2hheWtoOzA7MDswCitFRztFRy1NVDtNYXI7MDswOzAKK0VHO0VHLUtOO1FpbjswOzA7MAorRUc7RUctU0lOO1NoYW1sIFNuOzA7MDswCitFRztFRy1TSEc7U2hqOzA7MDswCitFUjtFUi1BTjtBbnNlYmE7MDswOzAKK0VSO0VSLURVO0RlYnViOzA7MDswCitFUjtFUi1ESztEZWJ1YmF3aSBLZXlpaCBCYWhyaSBbRGVidWItS2VpaC1CYWhyaV07MDswOzAKK0VSO0VSLUdCO0dhc2gtQmFya2E7MDswOzAKK0VSO0VSLU1BO01hYWtlbCBbTWFla2VsXTswOzA7MAorRVI7RVItU0s7U2VtZW5hd2kgS2V5aWggQmFocmkgW1NlbWllbi1LZWloLUJhaHJpXTswOzA7MAorRVM7RVMtQztBIENvcnVhOzA7MDtHQTtwcm92aW5jZQorRVM7RVMtVkk7bGF2YTswOzA7UFY7cHJvdmluY2UKK0VTO0VTLUFCO0FsYmFjZXRlOzA7MDtDTTtwcm92aW5jZQorRVM7RVMtQTtBbGljYW50ZTswOzA7VkM7cHJvdmluY2UKK0VTO0VTLUFMO0FsbWVyYTswOzA7QU47cHJvdmluY2UKK0VTO0VTLU87QXN0dXJpYXM7MDswO087cHJvdmluY2UKK0VTO0VTLUFWO3ZpbGE7MDswO0NMO3Byb3ZpbmNlCitFUztFUy1CQTtCYWRham96OzA7MDtFWDtwcm92aW5jZQorRVM7RVMtUE07QmFsZWFyZXM7MDswO0lCO3Byb3ZpbmNlCitFUztFUy1CO0JhcmNlbG9uYTswOzA7Q1Q7cHJvdmluY2UKK0VTO0VTLUJVO0J1cmdvczswOzA7Q0w7cHJvdmluY2UKK0VTO0VTLUNDO0NjZXJlczswOzA7RVg7cHJvdmluY2UKK0VTO0VTLUNBO0NkaXo7MDswO0FOO3Byb3ZpbmNlCitFUztFUy1TO0NhbnRhYnJpYTswOzA7Uztwcm92aW5jZQorRVM7RVMtQ1M7Q2FzdGVsbG47MDswO1ZDO3Byb3ZpbmNlCitFUztFUy1DUjtDaXVkYWQgUmVhbDswOzA7Q007cHJvdmluY2UKK0VTO0VTLUNPO0NyZG9iYTswOzA7QU47cHJvdmluY2UKK0VTO0VTLUNVO0N1ZW5jYTswOzA7Q007cHJvdmluY2UKK0VTO0VTLUdJO0dpcm9uYTswOzA7Q1Q7cHJvdmluY2UKK0VTO0VTLUdSO0dyYW5hZGE7MDswO0FOO3Byb3ZpbmNlCitFUztFUy1HVTtHdWFkYWxhamFyYTswOzA7Q007cHJvdmluY2UKK0VTO0VTLVNTO0d1aXB6Y29hOzA7MDtQVjtwcm92aW5jZQorRVM7RVMtSDtIdWVsdmE7MDswO0FOO3Byb3ZpbmNlCitFUztFUy1IVTtIdWVzY2E7MDswO0FSO3Byb3ZpbmNlCitFUztFUy1KO0phZW47MDswO0FOO3Byb3ZpbmNlCitFUztFUy1MTztMYSBSaW9qYTswOzA7TE87cHJvdmluY2UKK0VTO0VTLUdDO0xhcyBQYWxtYXM7MDswO0NOO3Byb3ZpbmNlCitFUztFUy1MRTtMZW47MDswO0NMO3Byb3ZpbmNlCitFUztFUy1MO0xsZWlkYTswOzA7Q1Q7cHJvdmluY2UKK0VTO0VTLUxVO0x1Z287MDswO0dBO3Byb3ZpbmNlCitFUztFUy1NO01hZHJpZDswOzA7TTtwcm92aW5jZQorRVM7RVMtTUE7TWxhZ2E7MDswO0FOO3Byb3ZpbmNlCitFUztFUy1NVTtNdXJjaWE7MDswO01VO3Byb3ZpbmNlCitFUztFUy1OQTtOYXZhcnJhOzA7MDtOQTtwcm92aW5jZQorRVM7RVMtT1I7T3VyZW5zZTswOzA7R0E7cHJvdmluY2UKK0VTO0VTLVA7UGFsZW5jaWE7MDswO0NMO3Byb3ZpbmNlCitFUztFUy1QTztQb250ZXZlZHJhOzA7MDtHQTtwcm92aW5jZQorRVM7RVMtU0E7U2FsYW1hbmNhOzA7MDtDTDtwcm92aW5jZQorRVM7RVMtVEY7U2FudGEgQ3J1eiBkZSBUZW5lcmlmZTswOzA7Q047cHJvdmluY2UKK0VTO0VTLVNHO1NlZ292aWE7MDswO0NMO3Byb3ZpbmNlCitFUztFUy1TRTtTZXZpbGxhOzA7MDtBTjtwcm92aW5jZQorRVM7RVMtU087U29yaWE7MDswO0NMO3Byb3ZpbmNlCitFUztFUy1UO1RhcnJhZ29uYTswOzA7Q1Q7cHJvdmluY2UKK0VTO0VTLVRFO1RlcnVlbDswOzA7QVI7cHJvdmluY2UKK0VTO0VTLVRPO1RvbGVkbzswOzA7Q007cHJvdmluY2UKK0VTO0VTLVY7VmFsZW5jaWE7MDswO1ZDO3Byb3ZpbmNlCitFUztFUy1WQTtWYWxsYWRvbGlkOzA7MDtDTDtwcm92aW5jZQorRVM7RVMtQkk7Vml6Y2F5YTswOzA7UFY7cHJvdmluY2UKK0VTO0VTLVpBO1phbW9yYTswOzA7Q0w7cHJvdmluY2UKK0VTO0VTLVo7WmFyYWdvemE7MDswO0FSO3Byb3ZpbmNlCitFUztFUy1DRTtDZXV0YTswOzA7MGF1dG9ub21vdXMgY2l0eSBpbiBOb3J0aCBBZnJpY2EKK0VTO0VTLU1MO01lbGlsbGE7MDswOzBhdXRvbm9tb3VzIGNpdHkgaW4gTm9ydGggQWZyaWNhCitFVDtFVC1BQTtkaXMgYmViYTtBZGRpcyBBYmFiYTswOzA7YWRtaW5pc3RyYXRpb24KK0VUO0VULUFGO2ZhcjtBZmFyOzA7MDtzdGF0ZQorRVQ7RVQtQU07bWFyYTtBbWFyYTswOzA7c3RhdGUKK0VUO0VULUJFO0JpbnNoYW5ndWwgR3VtdXo7QmVuc2hhbmd1bC1HdW1hejswOzA7c3RhdGUKK0VUO0VULUdBO0dhbWJjbGEgSGl6Ym9jaDtHYW1iZWxhIFBlb3BsZXM7MDswO3N0YXRlCitFVDtFVC1IQTtIYXJlcmkgSGl6YjtIYXJhcmkgUGVvcGxlOzA7MDtzdGF0ZQorRVQ7RVQtT1I7T3JvbWl5YTtPcm9taWE7MDswO3N0YXRlCitFVDtFVC1TTztTdW1hbGM7U29tYWxpOzA7MDtzdGF0ZQorRVQ7RVQtU047WWVEZWJ1YiBCaWhjcm9jaCBCaWhjcmVzZWJvY2ggbmEgSGl6Ym9jaDtTb3V0aGVybiBOYXRpb25zLCBOYXRpb25hbGl0aWVzIGFuZCBQZW9wbGVzOzA7MDtzdGF0ZQorRVQ7RVQtVEk7VGlncmF5O1RpZ3JhaTswOzA7c3RhdGUKK0ZJO0ZJLUFMO0FodmVuYW5tYWFuIGxuaTtsYW5kcyBsbjswOzAKK0ZJO0ZJLUVTO0V0ZWwtU3VvbWVuIGxuaTtTZHJhIEZpbmxhbmRzIGxuOzA7MAorRkk7RkktSVM7SXQtU3VvbWVuIGxuaTtzdHJhIEZpbmxhbmRzIGxuOzA7MAorRkk7RkktTEw7TGFwaW4gbG5pO0xhcHBsYW5kcyBsbjswOzAKK0ZJO0ZJLUxTO0xuc2ktU3VvbWVuIGxuaTtWc3RyYSBGaW5sYW5kcyBsbjswOzAKK0ZJO0ZJLU9MO091bHVuIGxuaTtVbGVib3JncyBsbjswOzAKK0ZKO0ZKLUM7Q2VudHJhbDswOzA7MGRpdmlzaW9uCitGSjtGSi1FO0Vhc3Rlcm47MDswOzBkaXZpc2lvbgorRko7RkotTjtOb3J0aGVybjswOzA7MGRpdmlzaW9uCitGSjtGSi1XO1dlc3Rlcm47MDswOzBkaXZpc2lvbgorRko7RkotUjtSb3R1bWE7MDswOzBkZXBlbmRlbmN5CitGTTtGTS1UUks7Q2h1dWs7MDswOzAKK0ZNO0ZNLUtTQTtLb3NyYWU7MDswOzAKK0ZNO0ZNLVBOSTtQb2hucGVpOzA7MDswCitGTTtGTS1ZQVA7WWFwOzA7MDswCitGUjtGUi0wO0FpbjswOzA7VjttZXRyb3BvbGl0YW4gZGVwYXJ0bWVudAorRlI7RlItMDI7QWlzbmU7MDswO1M7bWV0cm9wb2xpdGFuIGRlcGFydG1lbnQKK0ZSO0ZSLTAzO0FsbGllcjswOzA7QzttZXRyb3BvbGl0YW4gZGVwYXJ0bWVudAorRlI7RlItMDQ7QWxwZXMtZGUtSGF1dGUtUHJvdmVuY2U7MDswO1U7bWV0cm9wb2xpdGFuIGRlcGFydG1lbnQKK0ZSO0ZSLTA2O0FscGVzLU1hcml0aW1lczswOzA7VTttZXRyb3BvbGl0YW4gZGVwYXJ0bWVudAorRlI7RlItMDc7QXJkZWNoZTswOzA7VjttZXRyb3BvbGl0YW4gZGVwYXJ0bWVudAorRlI7RlItMDg7QXJkZW5uZXM7MDswO0c7bWV0cm9wb2xpdGFuIGRlcGFydG1lbnQKK0ZSO0ZSLTA5O0FyaWVnZTswOzA7TjttZXRyb3BvbGl0YW4gZGVwYXJ0bWVudAorRlI7RlItMDtBdWJlOzA7MDtHO21ldHJvcG9saXRhbiBkZXBhcnRtZW50CitGUjtGUi07QXVkZTswOzA7SzttZXRyb3BvbGl0YW4gZGVwYXJ0bWVudAorRlI7RlItMjtBdmV5cm9uOzA7MDtOO21ldHJvcG9saXRhbiBkZXBhcnRtZW50CitGUjtGUi02NztCYXMtUmhpbjswOzA7QTttZXRyb3BvbGl0YW4gZGVwYXJ0bWVudAorRlI7RlItMztCb3VjaGVzLWR1LVJob25lOzA7MDtVO21ldHJvcG9saXRhbiBkZXBhcnRtZW50CitGUjtGUi00O0NhbHZhZG9zOzA7MDtQO21ldHJvcG9saXRhbiBkZXBhcnRtZW50CitGUjtGUi01O0NhbnRhbDswOzA7QzttZXRyb3BvbGl0YW4gZGVwYXJ0bWVudAorRlI7RlItNjtDaGFyZW50ZTswOzA7VDttZXRyb3BvbGl0YW4gZGVwYXJ0bWVudAorRlI7RlItNztDaGFyZW50ZS1NYXJpdGltZTswOzA7VDttZXRyb3BvbGl0YW4gZGVwYXJ0bWVudAorRlI7RlItODtDaGVyOzA7MDtGO21ldHJvcG9saXRhbiBkZXBhcnRtZW50CitGUjtGUi05O0NvcnJlemU7MDswO0w7bWV0cm9wb2xpdGFuIGRlcGFydG1lbnQKK0ZSO0ZSLTJBO0NvcnNlLWR1LVN1ZDswOzA7SDttZXRyb3BvbGl0YW4gZGVwYXJ0bWVudAorRlI7RlItMjtDb3RlLWRPcjswOzA7RDttZXRyb3BvbGl0YW4gZGVwYXJ0bWVudAorRlI7RlItMjI7Q290ZXMtZEFybW9yOzA7MDtFO21ldHJvcG9saXRhbiBkZXBhcnRtZW50CitGUjtGUi0yMztDcmV1c2U7MDswO0w7bWV0cm9wb2xpdGFuIGRlcGFydG1lbnQKK0ZSO0ZSLTc5O0RldXgtU2V2cmVzOzA7MDtUO21ldHJvcG9saXRhbiBkZXBhcnRtZW50CitGUjtGUi0yNDtEb3Jkb2duZTswOzA7QjttZXRyb3BvbGl0YW4gZGVwYXJ0bWVudAorRlI7RlItMjU7RG91YnM7MDswO0k7bWV0cm9wb2xpdGFuIGRlcGFydG1lbnQKK0ZSO0ZSLTI2O0Ryb21lOzA7MDtWO21ldHJvcG9saXRhbiBkZXBhcnRtZW50CitGUjtGUi05O0Vzc29ubmU7MDswO0o7bWV0cm9wb2xpdGFuIGRlcGFydG1lbnQKK0ZSO0ZSLTI3O0V1cmU7MDswO1E7bWV0cm9wb2xpdGFuIGRlcGFydG1lbnQKK0ZSO0ZSLTI4O0V1cmUtZXQtTG9pcjswOzA7RjttZXRyb3BvbGl0YW4gZGVwYXJ0bWVudAorRlI7RlItMjk7RmluaXN0ZXJlOzA7MDtFO21ldHJvcG9saXRhbiBkZXBhcnRtZW50CitGUjtGUi0zMDtHYXJkOzA7MDtLO21ldHJvcG9saXRhbiBkZXBhcnRtZW50CitGUjtGUi0zMjtHZXJzOzA7MDtOO21ldHJvcG9saXRhbiBkZXBhcnRtZW50CitGUjtGUi0zMztHaXJvbmRlOzA7MDtCO21ldHJvcG9saXRhbiBkZXBhcnRtZW50CitGUjtGUi0yQjtIYXV0ZS1Db3JzZTswOzA7SDttZXRyb3BvbGl0YW4gZGVwYXJ0bWVudAorRlI7RlItMztIYXV0ZS1HYXJvbm5lOzA7MDtOO21ldHJvcG9saXRhbiBkZXBhcnRtZW50CitGUjtGUi00MztIYXV0ZS1Mb2lyZTswOzA7QzttZXRyb3BvbGl0YW4gZGVwYXJ0bWVudAorRlI7RlItNTI7SGF1dGUtTWFybmU7MDswO0c7bWV0cm9wb2xpdGFuIGRlcGFydG1lbnQKK0ZSO0ZSLTA1O0hhdXRlcy1BbHBlczswOzA7VTttZXRyb3BvbGl0YW4gZGVwYXJ0bWVudAorRlI7RlItNzA7SGF1dGUtU2FvbmU7MDswO0k7bWV0cm9wb2xpdGFuIGRlcGFydG1lbnQKK0ZSO0ZSLTc0O0hhdXRlLVNhdm9pZTswOzA7VjttZXRyb3BvbGl0YW4gZGVwYXJ0bWVudAorRlI7RlItNjU7SGF1dGVzLVB5cmVuZWVzOzA7MDtOO21ldHJvcG9saXRhbiBkZXBhcnRtZW50CitGUjtGUi04NztIYXV0ZS1WaWVubmU7MDswO0w7bWV0cm9wb2xpdGFuIGRlcGFydG1lbnQKK0ZSO0ZSLTY4O0hhdXQtUmhpbjswOzA7QTttZXRyb3BvbGl0YW4gZGVwYXJ0bWVudAorRlI7RlItOTI7SGF1dHMtZGUtU2VpbmU7MDswO0o7bWV0cm9wb2xpdGFuIGRlcGFydG1lbnQKK0ZSO0ZSLTM0O0hlcmF1bHQ7MDswO0s7bWV0cm9wb2xpdGFuIGRlcGFydG1lbnQKK0ZSO0ZSLTM1O0lsbGUtZXQtVmlsYWluZTswOzA7RTttZXRyb3BvbGl0YW4gZGVwYXJ0bWVudAorRlI7RlItMzY7SW5kcmU7MDswO0Y7bWV0cm9wb2xpdGFuIGRlcGFydG1lbnQKK0ZSO0ZSLTM3O0luZHJlLWV0LUxvaXJlOzA7MDtGO21ldHJvcG9saXRhbiBkZXBhcnRtZW50CitGUjtGUi0zODtJc2VyZTswOzA7VjttZXRyb3BvbGl0YW4gZGVwYXJ0bWVudAorRlI7RlItMzk7SnVyYTswOzA7STttZXRyb3BvbGl0YW4gZGVwYXJ0bWVudAorRlI7RlItNDA7TGFuZGVzOzA7MDtCO21ldHJvcG9saXRhbiBkZXBhcnRtZW50CitGUjtGUi00O0xvaXItZXQtQ2hlcjswOzA7RjttZXRyb3BvbGl0YW4gZGVwYXJ0bWVudAorRlI7RlItNDI7TG9pcmU7MDswO1Y7bWV0cm9wb2xpdGFuIGRlcGFydG1lbnQKK0ZSO0ZSLTQ0O0xvaXJlLUF0bGFudGlxdWU7MDswO1I7bWV0cm9wb2xpdGFuIGRlcGFydG1lbnQKK0ZSO0ZSLTQ1O0xvaXJldDswOzA7RjttZXRyb3BvbGl0YW4gZGVwYXJ0bWVudAorRlI7RlItNDY7TG90OzA7MDtOO21ldHJvcG9saXRhbiBkZXBhcnRtZW50CitGUjtGUi00NztMb3QtZXQtR2Fyb25uZTswOzA7QjttZXRyb3BvbGl0YW4gZGVwYXJ0bWVudAorRlI7RlItNDg7TG96ZXJlOzA7MDtLO21ldHJvcG9saXRhbiBkZXBhcnRtZW50CitGUjtGUi00OTtNYWluZS1ldC1Mb2lyZTswOzA7UjttZXRyb3BvbGl0YW4gZGVwYXJ0bWVudAorRlI7RlItNTA7TWFuY2hlOzA7MDtQO21ldHJvcG9saXRhbiBkZXBhcnRtZW50CitGUjtGUi01O01hcm5lOzA7MDtHO21ldHJvcG9saXRhbiBkZXBhcnRtZW50CitGUjtGUi01MztNYXllbm5lOzA7MDtSO21ldHJvcG9saXRhbiBkZXBhcnRtZW50CitGUjtGUi01NDtNZXVydGhlLWV0LU1vc2VsbGU7MDswO007bWV0cm9wb2xpdGFuIGRlcGFydG1lbnQKK0ZSO0ZSLTU1O01ldXNlOzA7MDtNO21ldHJvcG9saXRhbiBkZXBhcnRtZW50CitGUjtGUi01NjtNb3JiaWhhbjswOzA7RTttZXRyb3BvbGl0YW4gZGVwYXJ0bWVudAorRlI7RlItNTc7TW9zZWxsZTswOzA7TTttZXRyb3BvbGl0YW4gZGVwYXJ0bWVudAorRlI7RlItNTg7TmlldnJlOzA7MDtEO21ldHJvcG9saXRhbiBkZXBhcnRtZW50CitGUjtGUi01OTtOb3JkOzA7MDtPO21ldHJvcG9saXRhbiBkZXBhcnRtZW50CitGUjtGUi02MDtPaXNlOzA7MDtTO21ldHJvcG9saXRhbiBkZXBhcnRtZW50CitGUjtGUi02O09ybmU7MDswO1A7bWV0cm9wb2xpdGFuIGRlcGFydG1lbnQKK0ZSO0ZSLTc1O1BhcmlzOzA7MDtKO21ldHJvcG9saXRhbiBkZXBhcnRtZW50CitGUjtGUi02MjtQYXMtZGUtQ2FsYWlzOzA7MDtPO21ldHJvcG9saXRhbiBkZXBhcnRtZW50CitGUjtGUi02MztQdXktZGUtRG9tZTswOzA7QzttZXRyb3BvbGl0YW4gZGVwYXJ0bWVudAorRlI7RlItNjQ7UHlyZW5lZXMtQXRsYW50aXF1ZXM7MDswO0I7bWV0cm9wb2xpdGFuIGRlcGFydG1lbnQKK0ZSO0ZSLTY2O1B5cmVuZWVzLU9yaWVudGFsZXM7MDswO0s7bWV0cm9wb2xpdGFuIGRlcGFydG1lbnQKK0ZSO0ZSLTY5O1Job25lOzA7MDtWO21ldHJvcG9saXRhbiBkZXBhcnRtZW50CitGUjtGUi03O1Nhb25lLWV0LUxvaXJlOzA7MDtEO21ldHJvcG9saXRhbiBkZXBhcnRtZW50CitGUjtGUi03MjtTYXJ0aGU7MDswO1I7bWV0cm9wb2xpdGFuIGRlcGFydG1lbnQKK0ZSO0ZSLTczO1Nhdm9pZTswOzA7VjttZXRyb3BvbGl0YW4gZGVwYXJ0bWVudAorRlI7RlItNzc7U2VpbmUtZXQtTWFybmU7MDswO0o7bWV0cm9wb2xpdGFuIGRlcGFydG1lbnQKK0ZSO0ZSLTc2O1NlaW5lLU1hcml0aW1lOzA7MDtRO21ldHJvcG9saXRhbiBkZXBhcnRtZW50CitGUjtGUi05MztTZWluZS1TYWludC1EZW5pczswOzA7SjttZXRyb3BvbGl0YW4gZGVwYXJ0bWVudAorRlI7RlItODA7U29tbWU7MDswO1M7bWV0cm9wb2xpdGFuIGRlcGFydG1lbnQKK0ZSO0ZSLTg7VGFybjswOzA7TjttZXRyb3BvbGl0YW4gZGVwYXJ0bWVudAorRlI7RlItODI7VGFybi1ldC1HYXJvbm5lOzA7MDtOO21ldHJvcG9saXRhbiBkZXBhcnRtZW50CitGUjtGUi05MDtUZXJyaXRvaXJlIGRlIEJlbGZvcnQ7MDswO0k7bWV0cm9wb2xpdGFuIGRlcGFydG1lbnQKK0ZSO0ZSLTk0O1ZhbC1kZS1NYXJuZTswOzA7SjttZXRyb3BvbGl0YW4gZGVwYXJ0bWVudAorRlI7RlItOTU7VmFsLWRPaXNlOzA7MDtKO21ldHJvcG9saXRhbiBkZXBhcnRtZW50CitGUjtGUi04MztWYXI7MDswO1U7bWV0cm9wb2xpdGFuIGRlcGFydG1lbnQKK0ZSO0ZSLTg0O1ZhdWNsdXNlOzA7MDtVO21ldHJvcG9saXRhbiBkZXBhcnRtZW50CitGUjtGUi04NTtWZW5kZWU7MDswO1I7bWV0cm9wb2xpdGFuIGRlcGFydG1lbnQKK0ZSO0ZSLTg2O1ZpZW5uZTswOzA7VDttZXRyb3BvbGl0YW4gZGVwYXJ0bWVudAorRlI7RlItODg7Vm9zZ2VzOzA7MDtNO21ldHJvcG9saXRhbiBkZXBhcnRtZW50CitGUjtGUi04OTtZb25uZTswOzA7RDttZXRyb3BvbGl0YW4gZGVwYXJ0bWVudAorRlI7RlItNzg7WXZlbGluZXM7MDswO0o7bWV0cm9wb2xpdGFuIGRlcGFydG1lbnQKK0ZSO0ZSLVlUO01heW90dGUgKHNlZSBhbHNvIHNlcGFyYXRlIGVudHJ5IHVuZGVyIFlUKTswOzA7MHRlcnJpdG9yaWFsIGNvbGxlY3Rpdml0eQorRlI7RlItUE07U2FpbnQtUGllcnJlLWV0LU1pcXVlbG9uIChzZWUgYWxzbyBzZXBhcmF0ZSBlbnRyeSB1bmRlciBQTSk7MDswOzB0ZXJyaXRvcmlhbCBjb2xsZWN0aXZpdHkKK0ZSO0ZSLU5DO05vdXZlbGxlLUNhbGVkb25pZSAoc2VlIGFsc28gc2VwYXJhdGUgZW50cnkgdW5kZXIgTkMpOzA7MDswb3ZlcnNlYXMgdGVycml0b3J5CitGUjtGUi1QRjtQb2x5bmVzaWUgZnJhbmNhaXNlIChzZWUgYWxzbyBzZXBhcmF0ZSBlbnRyeSB1bmRlciBQRik7MDswOzBvdmVyc2VhcyB0ZXJyaXRvcnkKK0ZSO0ZSLVRGO1RlcnJlcyBBdXN0cmFsZXMgRnJhbmNhaXNlcyAoc2VlIGFsc28gc2VwYXJhdGUgZW50cnkgdW5kZXIgVEYpOzA7MDswb3ZlcnNlYXMgdGVycml0b3J5CitGUjtGUi1XRjtXYWxsaXMgZXQgRnV0dW5hIChzZWUgYWxzbyBzZXBhcmF0ZSBlbnRyeSB1bmRlciBXRik7MDswOzBvdmVyc2VhcyB0ZXJyaXRvcnkKK0dBO0dBLTE7RXN0dWFpcmU7MDswOzAKK0dBO0dBLTI7SGF1dC1PZ29vdWU7MDswOzAKK0dBO0dBLTM7TW95ZW4tT2dvb3VlOzA7MDswCitHQTtHQS00O05nb3VuaWU7MDswOzAKK0dBO0dBLTU7TnlhbmdhOzA7MDswCitHQTtHQS02O09nb291ZS1JdmluZG87MDswOzAKK0dBO0dBLTc7T2dvb3VlLUxvbG87MDswOzAKK0dBO0dBLTg7T2dvb3VlLU1hcml0aW1lOzA7MDswCitHQTtHQS05O1dvbGV1LU50ZW07MDswOzAKK0dCO0dCLUFCRTtBYmVyZGVlbiBDaXR5OzA7MDtTQ1QKK0dCO0dCLUFCRDtBYmVyZGVlbnNoaXJlOzA7MDtTQ1QKK0dCO0dCLUFOUztBbmd1czswOzA7U0NUCitHQjtHQi1BTlQ7QW50cmltOzA7MDtOSVIKK0dCO0dCLUFSRDtBcmRzOzA7MDtOSVIKK0dCO0dCLUFHQjtBcmd5bGwgYW5kIEJ1dGU7MDswO1NDVAorR0I7R0ItQVJNO0FybWFnaDswOzA7TklSCitHQjtHQi1CTEE7QmFsbHltZW5hOzA7MDtOSVIKK0dCO0dCLUJMWTtCYWxseW1vbmV5OzA7MDtOSVIKK0dCO0dCLUJOQjtCYW5icmlkZ2U7MDswO05JUgorR0I7R0ItQkRHO0JhcmtpbmcgYW5kIERhZ2VuaGFtOzA7MDtFTkcKK0dCO0dCLUJORTtCYXJuZXQ7MDswO0VORworR0I7R0ItQk5TO0Jhcm5zbGV5OzA7MDtFTkcKK0dCO0dCLUJBUztCYXRoIGFuZCBOb3J0aCBFYXN0IFNvbWVyc2V0OzA7MDtFTkcKK0dCO0dCLUJERjtCZWRmb3Jkc2hpcmU7MDswO0VORworR0I7R0ItQkZTO0JlbGZhc3Q7MDswO05JUgorR0I7R0ItQkVYO0JleGxleTswOzA7RU5HCitHQjtHQi1CSVI7QmlybWluZ2hhbTswOzA7RU5HCitHQjtHQi1CQkQ7QmxhY2tidXJuIHdpdGggRGFyd2VuOzA7MDtFTkcKK0dCO0dCLUJQTDtCbGFja3Bvb2w7MDswO0VORworR0I7R0ItQkdXO0JsYWVuYXUgR3dlbnQ7MDswO1dMUworR0I7R0ItQk9MO0JvbHRvbjswOzA7RU5HCitHQjtHQi1CTUg7Qm91cm5lbW91dGg7MDswO0VORworR0I7R0ItQlJDO0JyYWNrbmVsbCBGb3Jlc3Q7MDswO0VORworR0I7R0ItQlJEO0JyYWRmb3JkOzA7MDtFTkcKK0dCO0dCLUJFTjtCcmVudDswOzA7RU5HCitHQjtHQi1CR0U7QnJpZGdlbmQgW1Blbi15LWJvbnQgYXIgT2d3ciBHQi1QT0ddOzA7MDtXTFMKK0dCO0dCLUJOSDtCcmlnaHRvbiBhbmQgSG92ZTswOzA7RU5HCitHQjtHQi1CU1Q7QnJpc3RvbCwgQ2l0eSBvZjswOzA7RU5HCitHQjtHQi1CUlk7QnJvbWxleTswOzA7RU5HCitHQjtHQi1CS007QnVja2luZ2hhbXNoaXJlOzA7MDtFTkc7CitHQjtHQi1CVVI7QnVyeTswOzA7RU5HOworR0I7R0ItQ0FZO0NhZXJwaGlsbHkgW0NhZXJmZmlsaSBHQi1DQUZdOzA7MDtXTFM7CitHQjtHQi1DTEQ7Q2FsZGVyZGFsZTswOzA7RU5HOworR0I7R0ItQ0FNO0NhbWJyaWRnZXNoaXJlOzA7MDtFTkc7CitHQjtHQi1DTUQ7Q2FtZGVuOzA7MDtFTkc7CitHQjtHQi1DUkY7Q2FyZGlmZiBbQ2FlcmR5ZGQgR0ItQ1JEXTswOzA7V0xTOworR0I7R0ItQ01OO0Nhcm1hcnRoZW5zaGlyZSBbU2lyIEdhZXJmeXJkZGluIEdCLUdGWV07MDswO1dMUzsKK0dCO0dCLUNLRjtDYXJyaWNrZmVyZ3VzOzA7MDtOSVI7CitHQjtHQi1DU1I7Q2FzdGxlcmVhZ2g7MDswO05JUjsKK0dCO0dCLUNHTjtDZXJlZGlnaW9uIFtTaXIgQ2VyZWRpZ2lvbl07MDswO1dMUzsKK0dCO0dCLUNIUztDaGVzaGlyZTswOzA7RU5HOworR0I7R0ItQ0xLO0NsYWNrbWFubmFuc2hpcmU7MDswO1NDVDsKK0dCO0dCLUNMUjtDb2xlcmFpbmU7MDswO05JUjsKK0dCO0dCLUNXWTtDb253eTswOzA7V0xTOworR0I7R0ItQ0tUO0Nvb2tzdG93bjswOzA7TklSOworR0I7R0ItQ09OO0Nvcm53YWxsOzA7MDtFTkc7CitHQjtHQi1DT1Y7Q292ZW50cnk7MDswO0VORzsKK0dCO0dCLUNHVjtDcmFpZ2F2b247MDswO05JUjsKK0dCO0dCLUNSWTtDcm95ZG9uOzA7MDtFTkc7CitHQjtHQi1DTUE7Q3VtYnJpYTswOzA7RU5HOworR0I7R0ItREFMO0Rhcmxpbmd0b247MDswO0VORzsKK0dCO0dCLURFTjtEZW5iaWdoc2hpcmUgW1NpciBEZGluYnljaCBHQi1EREJdOzA7MDtXTFM7CitHQjtHQi1ERVI7RGVyYnk7MDswO0VORzsKK0dCO0dCLURCWTtEZXJieXNoaXJlOzA7MDtFTkc7CitHQjtHQi1EUlk7RGVycnk7MDswO05JUjsKK0dCO0dCLURFVjtEZXZvbjswOzA7RU5HOworR0I7R0ItRE5DO0RvbmNhc3RlcjswOzA7RU5HOworR0I7R0ItRE9SO0RvcnNldDswOzA7RU5HOworR0I7R0ItRE9XO0Rvd247MDswO05JUjsKK0dCO0dCLURVRDtEdWRsZXk7MDswO0VORzsKK0dCO0dCLURHWTtEdW1mcmllcyBhbmQgR2FsbG93YXk7MDswO1NDVDsKK0dCO0dCLURORDtEdW5kZWUgQ2l0eTswOzA7U0NUOworR0I7R0ItREdOO0R1bmdhbm5vbjswOzA7TklSOworR0I7R0ItRFVSO0R1cmhhbTswOzA7RU5HOworR0I7R0ItRUFMO0VhbGluZzswOzA7RU5HOworR0I7R0ItRUFZO0Vhc3QgQXlyc2hpcmU7MDswO1NDVDsKK0dCO0dCLUVEVTtFYXN0IER1bmJhcnRvbnNoaXJlOzA7MDtTQ1Q7CitHQjtHQi1FTE47RWFzdCBMb3RoaWFuOzA7MDtTQ1Q7CitHQjtHQi1FUlc7RWFzdCBSZW5mcmV3c2hpcmU7MDswO1NDVDsKK0dCO0dCLUVSWTtFYXN0IFJpZGluZyBvZiBZb3Jrc2hpcmU7MDswO0VORzsKK0dCO0dCLUVTWDtFYXN0IFN1c3NleDswOzA7RU5HOworR0I7R0ItRURIO0VkaW5idXJnaCwgQ2l0eSBvZjswOzA7U0NUOworR0I7R0ItRUxTO0VpbGVhbiBTaWFyOzA7MDtTQ1Q7CitHQjtHQi1FTkY7RW5maWVsZDswOzA7RU5HOworR0I7R0ItRVNTO0Vzc2V4OzA7MDtFTkc7CitHQjtHQi1GQUw7RmFsa2lyazswOzA7U0NUOworR0I7R0ItRkVSO0Zlcm1hbmFnaDswOzA7TklSOworR0I7R0ItRklGO0ZpZmU7MDswO1NDVDsKK0dCO0dCLUZMTjtGbGludHNoaXJlIFtTaXIgeSBGZmxpbnQgR0ItRkZMXTswOzA7V0xTOworR0I7R0ItR0FUO0dhdGVzaGVhZDswOzA7RU5HOworR0I7R0ItR0xHO0dsYXNnb3cgQ2l0eTswOzA7U0NUOworR0I7R0ItR0xTO0dsb3VjZXN0ZXJzaGlyZTswOzA7RU5HOworR0I7R0ItR1JFO0dyZWVud2ljaDswOzA7RU5HOworR0I7R0ItR1NZO0d1ZXJuc2V5IFtHdWVybmVzZXldOzA7MDtDSEE7CitHQjtHQi1HV047R3d5bmVkZDswOzA7V0xTOworR0I7R0ItSENLO0hhY2tuZXk7MDswO0VORzsKK0dCO0dCLUhBTDtIYWx0b247MDswO0VORzsKK0dCO0dCLUhNRjtIYW1tZXJzbWl0aCBhbmQgRnVsaGFtOzA7MDtFTkc7CitHQjtHQi1IQU07SGFtcHNoaXJlOzA7MDtFTkc7CitHQjtHQi1IUlk7SGFyaW5nZXk7MDswO0VORzsKK0dCO0dCLUhSVztIYXJyb3c7MDswO0VORzsKK0dCO0dCLUhQTDtIYXJ0bGVwb29sOzA7MDtFTkc7CitHQjtHQi1IQVY7SGF2ZXJpbmc7MDswO0VORzsKK0dCO0dCLUhFRjtIZXJlZm9yZHNoaXJlLCBDb3VudHkgb2Y7MDswO0VORzsKK0dCO0dCLUhSVDtIZXJ0Zm9yZHNoaXJlOzA7MDtFTkc7CitHQjtHQi1ITEQ7SGlnaGxhbmQ7MDswO1NDVDsKK0dCO0dCLUhJTDtIaWxsaW5nZG9uOzA7MDtFTkc7CitHQjtHQi1ITlM7SG91bnNsb3c7MDswO0VORzsKK0dCO0dCLUlWQztJbnZlcmNseWRlOzA7MDtTQ1Q7CitHQjtHQi1BR1k7SXNsZSBvZiBBbmdsZXNleSBbU2lyIFlueXMgTW9uIEdCLVlOTV07MDswO1dMUzsKK0dCO0dCLUlPVztJc2xlIG9mIFdpZ2h0OzA7MDtFTkc7CitHQjtHQi1JT1M7SXNsZXMgb2YgU2NpbGx5OzA7MDtFTkc7CitHQjtHQi1JU0w7SXNsaW5ndG9uOzA7MDtFTkc7CitHQjtHQi1KU1k7SmVyc2V5OzA7MDtDSEE7CitHQjtHQi1LRUM7S2Vuc2luZ3RvbiBhbmQgQ2hlbHNlYTswOzA7RU5HOworR0I7R0ItS0VOO0tlbnQ7MDswO0VORzsKK0dCO0dCLUtITDtLaW5nc3RvbiB1cG9uIEh1bGwsIENpdHkgb2Y7MDswO0VORzsKK0dCO0dCLUtUVDtLaW5nc3RvbiB1cG9uIFRoYW1lczswOzA7RU5HOworR0I7R0ItS0lSO0tpcmtsZWVzOzA7MDtFTkc7CitHQjtHQi1LV0w7S25vd3NsZXk7MDswO0VORzsKK0dCO0dCLUxCSDtMYW1iZXRoOzA7MDtFTkc7CitHQjtHQi1MQU47TGFuY2FzaGlyZTswOzA7RU5HOworR0I7R0ItTFJOO0xhcm5lOzA7MDtOSVI7CitHQjtHQi1MRFM7TGVlZHM7MDswO0VORzsKK0dCO0dCLUxDRTtMZWljZXN0ZXI7MDswO0VORzsKK0dCO0dCLUxFQztMZWljZXN0ZXJzaGlyZTswOzA7RU5HOworR0I7R0ItTEVXO0xld2lzaGFtOzA7MDtFTkc7CitHQjtHQi1MTVY7TGltYXZhZHk7MDswO05JUjsKK0dCO0dCLUxJTjtMaW5jb2xuc2hpcmU7MDswO0VORzsKK0dCO0dCLUxTQjtMaXNidXJuOzA7MDtOSVI7CitHQjtHQi1MSVY7TGl2ZXJwb29sOzA7MDtFTkc7CitHQjtHQi1MTkQ7TG9uZG9uLCBDaXR5IG9mOzA7MDtFTkc7CitHQjtHQi1MVVQ7THV0b247MDswO0VORzsKK0dCO0dCLU1GVDtNYWdoZXJhZmVsdDswOzA7TklSOworR0I7R0ItTUFOO01hbmNoZXN0ZXI7MDswO0VORzsKK0dCO0dCLU1EVztNZWR3YXk7MDswO0VORzsKK0dCO0dCLU1UWTtNZXJ0aHlyIFR5ZGZpbCBbTWVydGh5ciBUdWRmdWwgR0ItTVRVXTswOzA7V0xTOworR0I7R0ItTVJUO01lcnRvbjswOzA7RU5HOworR0I7R0ItTURCO01pZGRsZXNicm91Z2g7MDswO0VORzsKK0dCO0dCLU1MTjtNaWRsb3RoaWFuOzA7MDtTQ1Q7CitHQjtHQi1NSUs7TWlsdG9uIEtleW5lczswOzA7RU5HOworR0I7R0ItTU9OO01vbm1vdXRoc2hpcmUgW1NpciBGeW53eSBHQi1GWU5dOzA7MDtXTFM7CitHQjtHQi1NUlk7TW9yYXk7MDswO1NDVDsKK0dCO0dCLU1ZTDtNb3lsZTswOzA7TklSOworR0I7R0ItTlRMO05lYXRoIFBvcnQgVGFsYm90IFtDYXN0ZWxsLW5lZGQgUG9ydCBUYWxib3QgR0ItQ1RMXTswOzA7V0xTOworR0I7R0ItTkVUO05ld2Nhc3RsZSB1cG9uIFR5bmU7MDswO0VORzsKK0dCO0dCLU5XTTtOZXdoYW07MDswO0VORzsKK0dCO0dCLU5XUDtOZXdwb3J0IFtDYXNuZXd5ZGQgR0ItQ05XXTswOzA7V0xTOworR0I7R0ItTllNO05ld3J5IGFuZCBNb3VybmU7MDswO05JUjsKK0dCO0dCLU5UQTtOZXd0b3duYWJiZXk7MDswO05JUjsKK0dCO0dCLU5GSztOb3Jmb2xrOzA7MDtFTkc7CitHQjtHQi1OQVk7Tm9ydGggQXlyc2hpcmU7MDswO1NDVDsKK0dCO0dCLU5ETjtOb3J0aCBEb3duOzA7MDtOSVI7CitHQjtHQi1ORUw7Tm9ydGggRWFzdCBMaW5jb2xuc2hpcmU7MDswO0VORzsKK0dCO0dCLU5MSztOb3J0aCBMYW5hcmtzaGlyZTswOzA7U0NUOworR0I7R0ItTkxOO05vcnRoIExpbmNvbG5zaGlyZTswOzA7RU5HOworR0I7R0ItTlNNO05vcnRoIFNvbWVyc2V0OzA7MDtFTkc7CitHQjtHQi1OVFk7Tm9ydGggVHluZXNpZGU7MDswO0VORzsKK0dCO0dCLU5ZSztOb3J0aCBZb3Jrc2hpcmU7MDswO0VORzsKK0dCO0dCLU5USDtOb3J0aGFtcHRvbnNoaXJlOzA7MDtFTkc7CitHQjtHQi1OQkw7Tm9ydGh1bWJlcmxhbmQ7MDswO0VORzsKK0dCO0dCLU5HTTtOb3R0aW5naGFtOzA7MDtFTkc7CitHQjtHQi1OVFQ7Tm90dGluZ2hhbXNoaXJlOzA7MDtFTkc7CitHQjtHQi1PTEQ7T2xkaGFtOzA7MDtFTkc7CitHQjtHQi1PTUg7T21hZ2g7MDswO05JUjsKK0dCO0dCLU9SSztPcmtuZXkgSXNsYW5kczswOzA7U0NUOworR0I7R0ItT1hGO094Zm9yZHNoaXJlOzA7MDtFTkc7CitHQjtHQi1QRU07UGVtYnJva2VzaGlyZSBbU2lyIEJlbmZybyBHQi1CTkZdOzA7MDtXTFM7CitHQjtHQi1QS047UGVydGggYW5kIEtpbnJvc3M7MDswO1NDVDsKK0dCO0dCLVBURTtQZXRlcmJvcm91Z2g7MDswO0VORzsKK0dCO0dCLVBMWTtQbHltb3V0aDswOzA7RU5HOworR0I7R0ItUE9MO1Bvb2xlOzA7MDtFTkc7CitHQjtHQi1QT1I7UG9ydHNtb3V0aDswOzA7RU5HOworR0I7R0ItUE9XO1Bvd3lzOzA7MDtXTFM7CitHQjtHQi1SREc7UmVhZGluZzswOzA7RU5HOworR0I7R0ItUkRCO1JlZGJyaWRnZTswOzA7RU5HOworR0I7R0ItUkNDO1JlZGNhciBhbmQgQ2xldmVsYW5kOzA7MDtFTkc7CitHQjtHQi1SRlc7UmVuZnJld3NoaXJlOzA7MDtTQ1Q7CitHQjtHQi1SQ1Q7UmhvbmRkYSwgQ3lub24sIFRhZmYgW1Job25kZGEsIEN5bm9uLFRhZl07MDswO1dMUzsKK0dCO0dCLVJJQztSaWNobW9uZCB1cG9uIFRoYW1lczswOzA7RU5HOworR0I7R0ItUkNIO1JvY2hkYWxlOzA7MDtFTkc7CitHQjtHQi1ST1Q7Um90aGVyaGFtOzA7MDtFTkc7CitHQjtHQi1SVVQ7UnV0bGFuZDswOzA7RU5HOworR0I7R0ItU0hOO1N0LiBIZWxlbnM7MDswO0VORzsKK0dCO0dCLVNMRjtTYWxmb3JkOzA7MDtFTkc7CitHQjtHQi1TQVc7U2FuZHdlbGw7MDswO0VORzsKK0dCO0dCLVNDQjtTY290dGlzaCBCb3JkZXJzLCBUaGU7MDswO1NDVDsKK0dCO0dCLVNGVDtTZWZ0b247MDswO0VORzsKK0dCO0dCLVNIRjtTaGVmZmllbGQ7MDswO0VORzsKK0dCO0dCLVpFVDtTaGV0bGFuZCBJc2xhbmRzOzA7MDtTQ1Q7CitHQjtHQi1TSFI7U2hyb3BzaGlyZTswOzA7RU5HOworR0I7R0ItU0xHO1Nsb3VnaDswOzA7RU5HOworR0I7R0ItU09MO1NvbGlodWxsOzA7MDtFTkc7CitHQjtHQi1TT007U29tZXJzZXQ7MDswO0VORzsKK0dCO0dCLVNBWTtTb3V0aCBBeXJzaGlyZTswOzA7U0NUOworR0I7R0ItU0dDO1NvdXRoIEdsb3VjZXN0ZXJzaGlyZTswOzA7RU5HOworR0I7R0ItU0xLO1NvdXRoIExhbmFya3NoaXJlOzA7MDtTQ1Q7CitHQjtHQi1TVFk7U291dGggVHluZXNpZGU7MDswO0VORzsKK0dCO0dCLVNUSDtTb3V0aGFtcHRvbjswOzA7RU5HOworR0I7R0ItU09TO1NvdXRoZW5kLW9uLVNlYTswOzA7RU5HOworR0I7R0ItU1dLO1NvdXRod2FyazswOzA7RU5HOworR0I7R0ItU1RTO1N0YWZmb3Jkc2hpcmU7MDswO0VORzsKK0dCO0dCLVNURztTdGlybGluZzswOzA7U0NUOworR0I7R0ItU0tQO1N0b2NrcG9ydDswOzA7RU5HOworR0I7R0ItU1RUO1N0b2NrdG9uLW9uLVRlZXM7MDswO0VORzsKK0dCO0dCLVNURTtTdG9rZS1vbi1UcmVudDswOzA7RU5HOworR0I7R0ItU1RCO1N0cmFiYW5lOzA7MDtOSVI7CitHQjtHQi1TRks7U3VmZm9sazswOzA7RU5HOworR0I7R0ItU05EO1N1bmRlcmxhbmQ7MDswO0VORzsKK0dCO0dCLVNSWTtTdXJyZXk7MDswO0VORzsKK0dCO0dCLVNUTjtTdXR0b247MDswO0VORzsKK0dCO0dCLVNXQTtTd2Fuc2VhIFtBYmVydGF3ZSBHQi1BVEFdOzA7MDtXTFM7CitHQjtHQi1TV0Q7U3dpbmRvbjswOzA7RU5HOworR0I7R0ItVEFNO1RhbWVzaWRlOzA7MDtFTkc7CitHQjtHQi1URlc7VGVsZm9yZCBhbmQgV3Jla2luOzA7MDtFTkc7CitHQjtHQi1USFI7VGh1cnJvY2s7MDswO0VORzsKK0dCO0dCLVRPQjtUb3JiYXk7MDswO0VORzsKK0dCO0dCLVRPRjtUb3JmYWVuIFtUb3ItZmFlbl07MDswO1dMUzsKK0dCO0dCLVRXSDtUb3dlciBIYW1sZXRzOzA7MDtFTkc7CitHQjtHQi1UUkY7VHJhZmZvcmQ7MDswO0VORzsKK0dCO0dCLVZHTDtWYWxlIG9mIEdsYW1vcmdhbiwgVGhlIFtCcm8gTW9yZ2FubndnIEdCLUJNR107MDswO1dMUzsKK0dCO0dCLVdLRjtXYWtlZmllbGQ7MDswO0VORzsKK0dCO0dCLVdMTDtXYWxzYWxsOzA7MDtFTkc7CitHQjtHQi1XRlQ7V2FsdGhhbSBGb3Jlc3Q7MDswO0VORzsKK0dCO0dCLVdORDtXYW5kc3dvcnRoOzA7MDtFTkc7CitHQjtHQi1XUlQ7V2FycmluZ3RvbjswOzA7RU5HOworR0I7R0ItV0FSO1dhcndpY2tzaGlyZTswOzA7RU5HOworR0I7R0ItV0JLO1dlc3QgQmVya3NoaXJlOzA7MDtFTkc7CitHQjtHQi1XRFU7V2VzdCBEdW5iYXJ0b25zaGlyZTswOzA7U0NUOworR0I7R0ItV0xOO1dlc3QgTG90aGlhbjswOzA7U0NUOworR0I7R0ItV1NYO1dlc3QgU3Vzc2V4OzA7MDtFTkc7CitHQjtHQi1XU007V2VzdG1pbnN0ZXI7MDswO0VORzsKK0dCO0dCLVdHTjtXaWdhbjswOzA7RU5HOworR0I7R0ItV0lMO1dpbHRzaGlyZTswOzA7RU5HOworR0I7R0ItV05NO1dpbmRzb3IgYW5kIE1haWRlbmhlYWQ7MDswO0VORzsKK0dCO0dCLVdSTDtXaXJyYWw7MDswO0VORzsKK0dCO0dCLVdPSztXb2tpbmdoYW07MDswO0VORzsKK0dCO0dCLVdMVjtXb2x2ZXJoYW1wdG9uOzA7MDtFTkc7CitHQjtHQi1XT1I7V29yY2VzdGVyc2hpcmU7MDswO0VORzsKK0dCO0dCLVdSWDtXcmV4aGFtIFtXcmVjc2FtIEdCLVdSQ107MDswO1dMUzsKK0dCO0dCLVlPUjtZb3JrOzA7MDtFTkc7CitHSDtHSC1BSDtBc2hhbnRpOzA7MDswCitHSDtHSC1CQTtCcm9uZy1BaGFmbzswOzA7MAorR0g7R0gtQ1A7Q2VudHJhbCBbQ2VudHJhbDFdOzA7MDswCitHSDtHSC1FUDtFYXN0ZXJuIFtFYXN0ZXJuM107MDswOzAKK0dIO0dILUFBO0dyZWF0ZXIgQWNjcmE7MDswOzAKK0dIO0dILU5QO05vcnRoZXJuOzA7MDswCitHSDtHSC1VRTtVcHBlciBFYXN0OzA7MDswCitHSDtHSC1VVztVcHBlciBXZXN0OzA7MDswCitHSDtHSC1UVjtWb2x0YTswOzA7MAorR0g7R0gtV1A7V2VzdGVybjswOzA7MAorR007R00tQjtCYW5qdWw7MDswOzA7Y2l0eQorR007R00tTDtMb3dlciBSaXZlcjswOzA7MGRpdmlzaW9uCitHTTtHTS1NO01hY0NhcnRoeSBJc2xhbmQ7MDswOzBkaXZpc2lvbgorR007R00tTjtOb3J0aCBCYW5rOzA7MDswZGl2aXNpb24KK0dNO0dNLVU7VXBwZXIgUml2ZXI7MDswOzBkaXZpc2lvbgorR007R00tVztXZXN0ZXJuIFtXZXN0ZXJuMV0gOzA7MDswZGl2aXNpb24KK0dOO0dOLUJFO0JleWxhOzA7MDtOCitHTjtHTi1CRjtCb2ZmYTswOzA7QgorR047R04tQks7Qm9rZTswOzA7QgorR047R04tQ087Q295YWg7MDswO0QKK0dOO0dOLURCO0RhYm9sYTswOzA7RgorR047R04tREw7RGFsYWJhOzA7MDtNCitHTjtHTi1ESTtEaW5ndWlyYXllOzA7MDtGCitHTjtHTi1EVTtEdWJyZWthOzA7MDtECitHTjtHTi1GQTtGYXJhbmFoOzA7MDtGCitHTjtHTi1GTztGb3JlY2FyaWFoOzA7MDtECitHTjtHTi1GUjtGcmlhOzA7MDtCCitHTjtHTi1HQTtHYW91YWw7MDswO0IKK0dOO0dOLUdVO0d1ZWtlZG91OzA7MDtOCitHTjtHTi1LQTtLYW5rYW47MDswO0sKK0dOO0dOLUtFO0tlcm91YW5lOzA7MDtLCitHTjtHTi1LRDtLaW5kaWE7MDswO0QKK0dOO0dOLUtTO0tpc3NpZG91Z291OzA7MDtGCitHTjtHTi1LQjtLb3ViaWE7MDswO0wKK0dOO0dOLUtOO0tvdW5kYXJhOzA7MDtCCitHTjtHTi1LTztLb3Vyb3Vzc2E7MDswO0sKK0dOO0dOLUxBO0xhYmU7MDswO0wKK0dOO0dOLUxFO0xlbG91bWE7MDswO0wKK0dOO0dOLUxPO0xvbGE7MDswO04KK0dOO0dOLU1DO01hY2VudGE7MDswO04KK0dOO0dOLU1MO01hbGk7MDswO0wKK0dOO0dOLU1NO01hbW91OzA7MDtNCitHTjtHTi1NRDtNYW5kaWFuYTswOzA7SworR047R04tTlo7TnplcmVrb3JlOzA7MDtOCitHTjtHTi1QSTtQaXRhOzA7MDtNCitHTjtHTi1TSTtTaWd1aXJpOzA7MDtLCitHTjtHTi1URTtUZWxpbWVsZTswOzA7RAorR047R04tVE87VG91Z3VlOzA7MDtMCitHTjtHTi1ZTztZb21vdTswOzA7TgorTUw7TUwtQktPO0JhbWFrbzswOzA7MDtkaXN0cmljdAorTUw7TUwtNztHYW87MDswO3JlZ2lvbgorTUw7TUwtOTtLYXllczswOzA7cmVnaW9uCitNTDtNTC04O0tpZGFsOzA7MDtyZWdpb24KK01MO01MLTI7S291bGlrb3JvOzA7MDtyZWdpb24KK01MO01MLTU7TW9wdGk7MDswO3JlZ2lvbgorTUw7TUwtNDtTZWdvdTswOzA7cmVnaW9uCitNTDtNTC0zO1Npa2Fzc287MDswO3JlZ2lvbgorTUw7TUwtNjtUb21ib3VjdG91OzA7MDtyZWdpb24KK01NO01NLTA3O0F5ZXlhcndhZHk7MDswOzBkaXZpc2lvbgorTU07TU0tMDI7QmFnbzswOzA7MGRpdmlzaW9uCitNTTtNTS0wMztNYWd3YXk7MDswOzBkaXZpc2lvbgorTU07TU0tMDQ7TWFuZGFsYXk7MDswOzBkaXZpc2lvbgorTU07TU0tMDtTYWdhaW5nOzA7MDswZGl2aXNpb24KK01NO01NLTA1O1RhbmludGhhcnlpOzA7MDswZGl2aXNpb24KK01NO01NLTA2O1lhbmdvbjswOzA7MGRpdmlzaW9uCitNTTtNTS00O0NoaW47MDswOzBzdGF0ZQorTU07TU0tMDg7S2FjaGluOzA7MDswc3RhdGUKK01NO01NLTI7S2F5YWg7MDswOzBzdGF0ZQorTU07TU0tMztLYXlpbjswOzA7MHN0YXRlCitNTTtNTS01O01vbjswOzA7MHN0YXRlCitNTTtNTS02O1Jha2hpbmU7MDswOzBzdGF0ZQorTU07TU0tNztTaGFuOzA7MDswc3RhdGUKK01OO01OLTAzO1VsYWFuYmFhdGFyOzA7MDswO2NhcGl0YWwgY2l0eQorTU47TU4tMDczO0FyaGFuZ2F5OzA7MDtwcm92aW5jZQorTU47TU4tMDY5O0JheWFuaG9uZ29yOzA7MDtwcm92aW5jZQorTU47TU4tMDc7QmF5YW4tT2xnaXkgW0JheWFuLWxnaXldOzA7MDtwcm92aW5jZQorTU47TU4tMDY3O0J1bGdhbjswOzA7cHJvdmluY2UKK01OO01OLTAzNztEYXJoYW4gdXVsOzA7MDtwcm92aW5jZQorTU47TU4tMDY7RG9ybm9kOzA7MDtwcm92aW5jZQorTU47TU4tMDYzO0Rvcm5vZ292aSBbRG9ybm9nb3ZdOzA7MDtwcm92aW5jZQorTU47TU4tMDU5O0R1bmRnb3ZpIFtEdW5kZ292XTswOzA7cHJvdmluY2UKK01OO01OLTA1NztEemF2aGFuOzA7MDtwcm92aW5jZQorTU47TU4tMDY1O0dvdmktQWx0YXkgW0dvdi1BbHRheV07MDswO3Byb3ZpbmNlCitNTjtNTi0wNjQ7R292LVP8bWJlcjswOzA7cHJvdmluY2UKK01OO01OLTAzOTtIZW50aXk7MDswO3Byb3ZpbmNlCitNTjtNTi0wNDM7SG92ZDswOzA7cHJvdmluY2UKK01OO01OLTA0O0hvdnNnb2wgW0h2c2dsXTswOzA7cHJvdmluY2UKK01OO01OLTA1MztPbW5vZ292aSBbbW5nb3ZdOzA7MDtwcm92aW5jZQorTU47TU4tMDM1O09yaG9uOzA7MDtwcm92aW5jZQorTU47TU4tMDU1O092b3JoYW5nYXkgW3ZyaGFuZ2F5XTswOzA7cHJvdmluY2UKK01OO01OLTA0OTtTZWxlbmdlOzA7MDtwcm92aW5jZQorTU47TU4tMDU7U3VoYmFhdGFyIFtT/GhiYWF0YXJdOzA7MDtwcm92aW5jZQorTU47TU4tMDQ3O1RvdiBbVHZdOzA7MDtwcm92aW5jZQorTU47TU4tMDQ2O1V2czswOzA7cHJvdmluY2UKK01SO01SLU5LQztOb3Vha2Nob3R0OzA7MDswO2Rpc3RyaWN0CitNUjtNUi0wNztBZHJhcjswOzA7cmVnaW9uCitNUjtNUi0wMztBc3NhYmE7MDswO3JlZ2lvbgorTVI7TVItMDU7QnJha25hOzA7MDtyZWdpb24KK01SO01SLTA4O0Rha2hsZXQgTm91YWRoaWJvdTswOzA7cmVnaW9uCitNUjtNUi0wNDtHb3Jnb2w7MDswO3JlZ2lvbgorTVI7TVItMDtHdWlkaW1ha2E7MDswO3JlZ2lvbgorTVI7TVItMDtIb2RoIGVjaCBDaGFyZ3VpOzA7MDtyZWdpb24KK01SO01SLTAyO0hvZGggZWwgR2hhcmJpOzA7MDtyZWdpb24KK01SO01SLTI7SW5jaGlyaTswOzA7cmVnaW9uCitNUjtNUi0wOTtUYWdhbnQ7MDswO3JlZ2lvbgorTVI7TVItO1RpcmlzIFplbW1vdXI7MDswO3JlZ2lvbgorTVI7TVItMDY7VHJhcnphOzA7MDtyZWdpb24KK01VO01VLUJSO0JlYXUgQmFzc2luLVJvc2UgSGlsbDswOzA7MDtjaXR5CitNVTtNVS1DVTtDdXJlcGlwZTswOzA7MDtjaXR5CitNVTtNVS1QVTtQb3J0IExvdWlzOzA7MDswO2NpdHkKK01VO01VLVFCO1F1YXRyZSBCb3JuZXM7MDswOzA7Y2l0eQorTVU7TVUtVlA7VmFjb2FzLVBob2VuaXg7MDswOzA7Y2l0eQorTVU7TVUtQkw7QmxhY2sgUml2ZXI7MDswOzA7ZGlzdHJpY3QKK01VO01VLUZMO0ZsYWNxOzA7MDswO2Rpc3RyaWN0CitNVTtNVS1HUDtHcmFuZCBQb3J0OzA7MDswO2Rpc3RyaWN0CitNVTtNVS1NTztNb2thOzA7MDswO2Rpc3RyaWN0CitNVTtNVS1QQTtQYW1wbGVtb3Vzc2VzOzA7MDswO2Rpc3RyaWN0CitNVTtNVS1QVztQbGFpbmVzIFdpbGhlbXM7MDswOzA7ZGlzdHJpY3QKK01VO01VLVBMO1BvcnQgTG91aXM7MDswOzA7ZGlzdHJpY3QKK01VO01VLVJSO1JpdmllcmUgZHUgUmVtcGFydDswOzA7MDtkaXN0cmljdAorTVU7TVUtU0E7U2F2YW5uZTswOzA7MDtkaXN0cmljdAorTVU7TVUtQUc7QWdhbGVnYSBJc2xhbmRzOzA7MDswZGVwZW5kZW5jeQorTVU7TVUtQ0M7Q2FyZ2Fkb3MgQ2FyYWpvcyBTaG9hbHMgW1NhaW50IEJyYW5kb24gSXNsYW5kc107MDswOzBkZXBlbmRlbmN5CitNVTtNVS1STztSb2RyaWd1ZXMgSXNsYW5kOzA7MDswZGVwZW5kZW5jeQorTVY7TVYtTUxFO01hbGU7MDswOzA7Y2FwaXRhbAorTVY7TVYtMDI7QWxpZjswOzA7MGFkbWluaXN0cmF0aXZlIGF0b2xsCitNVjtNVi0yMDtCYWE7MDswOzBhZG1pbmlzdHJhdGl2ZSBhdG9sbAorTVY7TVYtNztEaGFhbHU7MDswOzBhZG1pbmlzdHJhdGl2ZSBhdG9sbAorTVY7TVYtNDtGYWFmdTswOzA7MGFkbWluaXN0cmF0aXZlIGF0b2xsCitNVjtNVi0yNztHYWFmIEFsaWY7MDswOzBhZG1pbmlzdHJhdGl2ZSBhdG9sbAorTVY7TVYtMjg7R2FhZnUgRGhhYWx1OzA7MDswYWRtaW5pc3RyYXRpdmUgYXRvbGwKK01WO01WLTI5O0duYXZpeWFuaTswOzA7MGFkbWluaXN0cmF0aXZlIGF0b2xsCitNVjtNVi0wNztIYWEgQWxpZjswOzA7MGFkbWluaXN0cmF0aXZlIGF0b2xsCitNVjtNVi0yMztIYWEgRGhhYWx1OzA7MDswYWRtaW5pc3RyYXRpdmUgYXRvbGwKK01WO01WLTI2O0thYWZ1OzA7MDswYWRtaW5pc3RyYXRpdmUgYXRvbGwKK01WO01WLTA1O0xhYW11OzA7MDswYWRtaW5pc3RyYXRpdmUgYXRvbGwKK01WO01WLTAzO0xoYXZpeWFuaTswOzA7MGFkbWluaXN0cmF0aXZlIGF0b2xsCitNVjtNVi0yO01lZW11OzA7MDswYWRtaW5pc3RyYXRpdmUgYXRvbGwKK01WO01WLTI1O05vb251OzA7MDswYWRtaW5pc3RyYXRpdmUgYXRvbGwKK01WO01WLTM7UmFhOzA7MDswYWRtaW5pc3RyYXRpdmUgYXRvbGwKK01WO01WLTA7U2VlbnU7MDswOzBhZG1pbmlzdHJhdGl2ZSBhdG9sbAorTVY7TVYtMjQ7U2hhdml5YW5pOzA7MDswYWRtaW5pc3RyYXRpdmUgYXRvbGwKK01WO01WLTA4O1RoYWE7MDswOzBhZG1pbmlzdHJhdGl2ZSBhdG9sbAorTVY7TVYtMDQ7VmFhdnU7MDswOzBhZG1pbmlzdHJhdGl2ZSBhdG9sbAorTVc7TVctQkE7QmFsYWthOzA7MDtTCitNVztNVy1CTDtCbGFudHlyZTswOzA7UworTVc7TVctQ0s7Q2hpa3dhd2E7MDswO1MKK01XO01XLUNSO0NoaXJhZHp1bHU7MDswO1MKK01XO01XLUNUO0NoaXRpcGE7MDswO04KK01XO01XLURFO0RlZHphOzA7MDtDCitNVztNVy1ETztEb3dhOzA7MDtDCitNVztNVy1LUjtLYXJvbmdhOzA7MDtOCitNVztNVy1LUztLYXN1bmd1OzA7MDtDCitNVztNVy1MSztMaWtvbWEgSXNsYW5kOzA7MDtOCitNVztNVy1MSTtMaWxvbmd3ZTswOzA7QworTVc7TVctTUg7TWFjaGluZ2E7MDswO1MKK01XO01XLU1HO01hbmdvY2hpOzA7MDtTCitNVztNVy1NQztNY2hpbmppOzA7MDtDCitNVztNVy1NVTtNdWxhbmplOzA7MDtTCitNVztNVy1NVztNd2FuemE7MDswO1MKK01XO01XLU1aO016aW1iYTswOzA7TgorTVc7TVctTkI7TmtoYXRhIEJheTswOzA7TgorTVc7TVctTks7Tmtob3Rha290YTswOzA7QworTVc7TVctTlM7TnNhbmplOzA7MDtTCitNVztNVy1OVTtOdGNoZXU7MDswO0MKK01XO01XLU5JO050Y2hpc2k7MDswO0MKK01XO01XLVBIO1BoYWxvbWJlOzA7MDtTCitNVztNVy1SVTtSdW1waGk7MDswO04KK01XO01XLVNBO1NhbGltYTswOzA7QworTVc7TVctVEg7VGh5b2xvOzA7MDtTCitNVztNVy1aTztab21iYTswOzA7UworTVc7TVctQztDZW50cmFsIFtDZW50cmFsNF07MDswO0MKK01XO01XLU47Tm9ydGhlcm4gW05vcnRoZXJuMV07MDswO04KK01XO01XLVM7U291dGhlcm4gW1NvdXRoZXJuMl07MDswO1MKK01YO01YLURJRjtEaXN0cml0byBGZWRlcmFsOzA7MDswO2ZlZGVyYWwgZGlzdHJpY3QKK01YO01YLUFHVTtBZ3Vhc2NhbGllbnRlczswOzA7MHN0YXRlCitNWDtNWC1CQ047QmFqYSBDYWxpZm9ybmlhOzA7MDswc3RhdGUKK01YO01YLUJDUztCYWphIENhbGlmb3JuaWEgU3VyOzA7MDswc3RhdGUKK01YO01YLUNBTTtDYW1wZWNoZTswOzA7MHN0YXRlCitNWDtNWC1DT0E7Q29haHVpbGE7MDswOzBzdGF0ZQorTVg7TVgtQ09MO0NvbGltYTswOzA7MHN0YXRlCitNWDtNWC1DSFA7Q2hpYXBhczswOzA7MHN0YXRlCitNWDtNWC1DSEg7Q2hpaHVhaHVhOzA7MDswc3RhdGUKK01YO01YLURVUjtEdXJhbmdvOzA7MDswc3RhdGUKK01YO01YLUdVQTtHdWFuYWp1YXRvOzA7MDswc3RhdGUKK01YO01YLUdSTztHdWVycmVybzswOzA7MHN0YXRlCitNWDtNWC1ISUQ7SGlkYWxnbzswOzA7MHN0YXRlCitNWDtNWC1KQUw7SmFsaXNjbzswOzA7MHN0YXRlCitNWDtNWC1NRVg7TWV4aWNvOzA7MDswc3RhdGUKK01YO01YLU1JQztNaWNob2FjbjswOzA7MHN0YXRlCitNWDtNWC1NT1I7TW9yZWxvczswOzA7MHN0YXRlCitNWDtNWC1OQVk7TmF5YXJpdDswOzA7MHN0YXRlCitNWDtNWC1OTEU7TnVldm8gTGVuOzA7MDswc3RhdGUKK01YO01YLU9BWDtPYXhhY2E7MDswOzBzdGF0ZQorTVg7TVgtUFVFO1B1ZWJsYTswOzA7MHN0YXRlCitNWDtNWC1RVUU7UXVlcmV0YXJvOzA7MDswc3RhdGUKK01YO01YLVJPTztRdWludGFuYSBSb287MDswOzBzdGF0ZQorTVg7TVgtU0xQO1NhbiBMdWlzIFBvdG9zOzA7MDswc3RhdGUKK01YO01YLVNJTjtTaW5hbG9hOzA7MDswc3RhdGUKK01YO01YLVNPTjtTb25vcmE7MDswOzBzdGF0ZQorTVg7TVgtVEFCO1RhYmFzY287MDswOzBzdGF0ZQorTVg7TVgtVEFNO1RhbWF1bGlwYXM7MDswOzBzdGF0ZQorTVg7TVgtVExBO1RsYXhjYWxhOzA7MDswc3RhdGUKK01YO01YLVZFUjtWZXJhY3J1ejswOzA7MHN0YXRlCitNWDtNWC1ZVUM7WXVjYXRuOzA7MDswc3RhdGUKK01YO01YLVpBQztaYWNhdGVjYXM7MDswOzBzdGF0ZQorTVk7TVktNDtXaWxheWFoIFBlcnNla3V0dWFuIEt1YWxhIEx1bXB1cjswOzA7MDtmZWRlcmFsIHRlcnJpdG9yeQorTVk7TVktNTtXaWxheWFoIFBlcnNla3V0dWFuIExhYnVhbjswOzA7MDtmZWRlcmFsIHRlcnJpdG9yeQorTVk7TVktMDtKb2hvcjswOzA7MHN0YXRlCitNWTtNWS0wMjtLZWRhaDswOzA7MHN0YXRlCitNWTtNWS0wMztLZWxhbnRhbjswOzA7MHN0YXRlCitNWTtNWS0wNDtNZWxha2E7MDswOzBzdGF0ZQorTVk7TVktMDU7TmVnZXJpIFNlbWJpbGFuOzA7MDswc3RhdGUKK01ZO01ZLTA2O1BhaGFuZzswOzA7MHN0YXRlCitNWTtNWS0wODtQZXJhazswOzA7MHN0YXRlCitNWTtNWS0wOTtQZXJsaXM7MDswOzBzdGF0ZQorTVk7TVktMDc7UHVsYXUgUGluYW5nOzA7MDswc3RhdGUKK01ZO01ZLTI7U2FiYWg7MDswOzBzdGF0ZQorTVk7TVktMztTYXJhd2FrOzA7MDswc3RhdGUKK01ZO01ZLTA7U2VsYW5nb3I7MDswOzBzdGF0ZQorTVk7TVktO1RlcmVuZ2dhbnU7MDswOzBzdGF0ZQorTVo7TVotTVBNO01hcHV0bzswOzA7MDtjaXR5CitNWjtNWi1QO0NhYm8gRGVsZ2FkbzswOzA7cHJvdmluY2UKK01aO01aLUc7R2F6YTswOzA7cHJvdmluY2UKK01aO01aLUk7SW5oYW1iYW5lOzA7MDtwcm92aW5jZQorTVo7TVotQjtNYW5pY2E7MDswO3Byb3ZpbmNlCitNWjtNWi1MO01hcHV0bzswOzA7cHJvdmluY2UKK01aO01aLU47TmFtcHVsYTswOzA7cHJvdmluY2UKK01aO01aLUE7Tmlhc3NhOzA7MDtwcm92aW5jZQorTVo7TVotUztTb2ZhbGE7MDswO3Byb3ZpbmNlCitNWjtNWi1UO1RldGU7MDswO3Byb3ZpbmNlCitNWjtNWi1RO1phbWJlemlhOzA7MDtwcm92aW5jZQorTkE7TkEtQ0E7Q2Fwcml2aTswOzA7MAorTkE7TkEtRVI7RXJvbmdvOzA7MDswCitOQTtOQS1IQTtIYXJkYXA7MDswOzAKK05BO05BLUtBO0thcmFzOzA7MDswCitOQTtOQS1LSDtLaG9tYXM7MDswOzAKK05BO05BLUtVO0t1bmVuZTswOzA7MAorTkE7TkEtT1c7T2hhbmd3ZW5hOzA7MDswCitOQTtOQS1PSztPa2F2YW5nbzswOzA7MAorTkE7TkEtT0g7T21haGVrZTswOzA7MAorTkE7TkEtT1M7T211c2F0aTswOzA7MAorTkE7TkEtT047T3NoYW5hOzA7MDswCitOQTtOQS1PVDtPc2hpa290bzswOzA7MAorTkE7TkEtT0Q7T3Rqb3pvbmRqdXBhOzA7MDswCitORTtORS04O05pYW1leTswOzA7MHVyYmFuIGNvbW11bml0eQorTkU7TkUtOTtBZ2FkZXo7MDswOzBkZXBhcnRtZW50CitORTtORS0yO0RpZmZhOzA7MDswZGVwYXJ0bWVudAorTkU7TkUtMztEb3NzbzswOzA7MGRlcGFydG1lbnQKK05FO05FLTQ7TWFyYWRpOzA7MDswZGVwYXJ0bWVudAorTkU7TkUtNTtUYWhvdWE7MDswOzBkZXBhcnRtZW50CitORTtORS02O1RpbGxhYmVyaTswOzA7MGRlcGFydG1lbnQKK05FO05FLTc7WmluZGVyOzA7MDswZGVwYXJ0bWVudAorTkc7TkctRkM7QWJ1amEgQ2FwaXRhbCBUZXJyaXRvcnk7MDswOzA7Y2FwaXRhbCB0ZXJyaXRvcnkKK05HO05HLUFCO0FiaWE7MDswOzBzdGF0ZQorTkc7TkctQUQ7QWRhbWF3YTswOzA7MHN0YXRlCitORztORy1BSztBa3dhIElib207MDswOzBzdGF0ZQorTkc7TkctQU47QW5hbWJyYTswOzA7MHN0YXRlCitORztORy1CQTtCYXVjaGk7MDswOzBzdGF0ZQorTkc7TkctQlk7QmF5ZWxzYTswOzA7MHN0YXRlCitORztORy1CRTtCZW51ZTswOzA7MHN0YXRlCitORztORy1CTztCb3JubzswOzA7MHN0YXRlCitORztORy1DUjtDcm9zcyBSaXZlcjswOzA7MHN0YXRlCitORztORy1ERTtEZWx0YTswOzA7MHN0YXRlCitORztORy1FQjtFYm9ueWk7MDswOzBzdGF0ZQorTkc7TkctRUQ7RWRvOzA7MDswc3RhdGUKK05HO05HLUVLO0VraXRpOzA7MDswc3RhdGUKK05HO05HLUVOO0VudWd1OzA7MDswc3RhdGUKK05HO05HLUdPO0dvbWJlOzA7MDswc3RhdGUKK05HO05HLUlNO0ltbzswOzA7MHN0YXRlCitORztORy1KSTtKaWdhd2E7MDswOzBzdGF0ZQorTkc7TkctS0Q7S2FkdW5hOzA7MDswc3RhdGUKK05HO05HLUtOO0thbm87MDswOzBzdGF0ZQorTkc7TkctS1Q7S2F0c2luYTswOzA7MHN0YXRlCitORztORy1LRTtLZWJiaTswOzA7MHN0YXRlCitORztORy1LTztLb2dpOzA7MDswc3RhdGUKK05HO05HLUtXO0t3YXJhOzA7MDswc3RhdGUKK05HO05HLUxBO0xhZ29zOzA7MDswc3RhdGUKK05HO05HLU5BO05hc3NhcmF3YTswOzA7MHN0YXRlCitORztORy1OSTtOaWdlcjswOzA7MHN0YXRlCitORztORy1PRztPZ3VuOzA7MDswc3RhdGUKK05HO05HLU9OO09uZG87MDswOzBzdGF0ZQorTkc7TkctT1M7T3N1bjswOzA7MHN0YXRlCitORztORy1PWTtPeW87MDswOzBzdGF0ZQorTkc7TkctUEw7UGxhdGVhdTswOzA7MHN0YXRlCitORztORy1SSTtSaXZlcnM7MDswOzBzdGF0ZQorTkc7TkctU087U29rb3RvOzA7MDswc3RhdGUKK05HO05HLVRBO1RhcmFiYTswOzA7MHN0YXRlCitORztORy1ZTztZb2JlOzA7MDswc3RhdGUKK05HO05HLVpBO1phbWZhcmE7MDswOzBzdGF0ZQorTkk7TkktQk87Qm9hY287MDswOzBkZXBhcnRtZW50CitOSTtOSS1DQTtDYXJhem87MDswOzBkZXBhcnRtZW50CitOSTtOSS1DSTtDaGluYW5kZWdhOzA7MDswZGVwYXJ0bWVudAorTkk7TkktQ087Q2hvbnRhbGVzOzA7MDswZGVwYXJ0bWVudAorTkk7TkktRVM7RXN0ZWw7MDswOzBkZXBhcnRtZW50CitOSTtOSS1HUjtHcmFuYWRhOzA7MDswZGVwYXJ0bWVudAorTkk7TkktSkk7Smlub3RlZ2E7MDswOzBkZXBhcnRtZW50CitOSTtOSS1MRTtMZW47MDswOzBkZXBhcnRtZW50CitOSTtOSS1NRDtNYWRyaXo7MDswOzBkZXBhcnRtZW50CitOSTtOSS1NTjtNYW5hZ3VhOzA7MDswZGVwYXJ0bWVudAorTkk7TkktTVM7TWFzYXlhOzA7MDswZGVwYXJ0bWVudAorTkk7TkktTVQ7TWF0YWdhbHBhOzA7MDswZGVwYXJ0bWVudAorTkk7TkktTlM7TnVldmEgU2Vnb3ZpYTswOzA7MGRlcGFydG1lbnQKK05JO05JLVNKO1JvIFNhbiBKdWFuOzA7MDswZGVwYXJ0bWVudAorTkk7TkktUkk7Uml2YXM7MDswOzBkZXBhcnRtZW50CitOSTtOSS1BTjtBdGxudGljbyBOb3J0ZTswOzA7YXV0b25vbW91cyByZWdpb24KK05JO05JLUFTO0F0bG50aWNvIFN1cjswOzA7YXV0b25vbW91cyByZWdpb24KK05MO05MLURSO0RyZW50aGU7MDswOzAKK05MO05MLUZMO0ZsZXZvbGFuZDswOzA7MAorTkw7TkwtRlI7RnJpZXNsYW5kOzA7MDswCitOTDtOTC1HRTtHZWxkZXJsYW5kOzA7MDswCitOTDtOTC1HUjtHcm9uaW5nZW47MDswOzAKK05MO05MLUxJO0xpbWJ1cmc7MDswOzAKK05MO05MLU5CO05vb3JkLUJyYWJhbnQ7MDswOzAKK05MO05MLU5IO05vb3JkLUhvbGxhbmQ7MDswOzAKK05MO05MLU9WO092ZXJpanNzZWw7MDswOzAKK05MO05MLVVUO1V0cmVjaHQ7MDswOzAKK05MO05MLVpFO1plZWxhbmQ7MDswOzAKK05MO05MLVpIO1p1aWQtSG9sbGFuZDswOzA7MAorTk87Tk8tMDI7QWtlcnNodXM7MDswOzAKK05PO05PLTA5O0F1c3QtQWdkZXI7MDswOzAKK05PO05PLTA2O0J1c2tlcnVkOzA7MDswCitOTztOTy0yMDtGaW5ubWFyazswOzA7MAorTk87Tk8tMDQ7SGVkbWFyazswOzA7MAorTk87Tk8tMjtIb3JkYWxhbmQ7MDswOzAKK05PO05PLTU7TXJlIG9nIFJvbXNkYWw7MDswOzAKK05PO05PLTg7Tm9yZGxhbmQ7MDswOzAKK05PO05PLTc7Tm9yZC1Ucm5kZWxhZzswOzA7MAorTk87Tk8tMDU7T3BwbGFuZDswOzA7MAorTk87Tk8tMDM7T3NsbzswOzA7MAorTk87Tk8tMjE7Um9nYWxhbmQ7MDswOzAKK05PO05PLTQ7U29nbiBvZyBGam9yZGFuZTswOzA7MAorTk87Tk8tNjtTci1Ucm5kZWxhZzswOzA7MAorTk87Tk8tMDg7VGVsZW1hcms7MDswOzAKK05PO05PLTk7VHJvbXM7MDswOzAKK05PO05PLTA7VmVzdC1BZ2RlcjswOzA7MAorTk87Tk8tMDc7VmVzdGZvbGQ7MDswOzAKK05PO05PLTA7c3Rmb2xkOzA7MDswCitOTztOTy0yMjtKYW4gTWF5ZW4gKEFyY3RpYyBSZWdpb24pIChTZWUgYWxzbyBjb3VudHJ5IGNvZGUgU0opOzA7MDswCitOTztOTy0yO1N2YWxiYXJkIChBcmN0aWMgUmVnaW9uKSAoU2VlIGFsc28gY291bnRyeSBjb2RlIFNKKTswOzA7MAorTlA7TlAtQkE7QmFnbWF0aTswOzA7MAorTlA7TlAtQkg7Qmhlcmk7MDswOzIKK05QO05QLURIO0RoYXdhbGFnaXJpOzA7MDszCitOUDtOUC1HQTtHYW5kYWtpOzA7MDszCitOUDtOUC1KQTtKYW5ha3B1cjswOzA7MAorTlA7TlAtS0E7S2FybmFsaTswOzA7MgorTlA7TlAtS087S29zaSBbS29zaGldOzA7MDs0CitOUDtOUC1MVTtMdW1iaW5pOzA7MDszCitOUDtOUC1NQTtNYWhha2FsaTswOzA7NQorTlA7TlAtTUU7TWVjaGk7MDswOzQKK05QO05QLU5BO05hcmF5YW5pOzA7MDswCitOUDtOUC1SQTtSYXB0aTswOzA7MgorTlA7TlAtU0E7U2FnYXJtYXRoYTswOzA7NAorTlA7TlAtU0U7U2V0aTswOzA7NQorTlo7TlotQVVLO0F1Y2tsYW5kOzA7MDtOCitOWjtOWi1CT1A7QmF5IG9mIFBsZW50eTswOzA7TgorTlo7TlotQ0FOO0NhbnRlcmJ1cnk7MDswO1MKK05aO05aLUdJUztHaXNib3JuZTswOzA7TgorTlo7TlotSEtCO0hhd2tlc3MgQmF5OzA7MDtOCitOWjtOWi1NV1Q7TWFuYXdhdHUtV2FuZ2FudWk7MDswO04KK05aO05aLU1CSDtNYXJsYm9yb3VnaDswOzA7UzsKK05aO05aLU5TTjtOZWxzb247MDswO1M7CitOWjtOWi1OVEw7Tm9ydGhsYW5kOzA7MDtOOworTlo7TlotT1RBO090YWdvOzA7MDtTOworTlo7TlotU1RMO1NvdXRobGFuZDswOzA7UzsKK05aO05aLVRLSTtUYXJhbmFraTswOzA7TjsKK05aO05aLVRBUztUYXNtYW47MDswO1M7CitOWjtOWi1XS087V2Fpa2F0bzswOzA7TjsKK05aO05aLVdHTjtXZWxsaW5ndG9uOzA7MDtOOworTlo7TlotV1RDO1dlc3QgQ29hc3Q7MDswO1M7CitPTTtPTS1EQTtBZCBEYWtoaWxpeWFoOzA7MDswCitPTTtPTS1CQTtBbCBCYWluYWg7MDswOzAKK09NO09NLUpBO0FsIEphbmJ5YWggW1p1ZnJdOzA7MDswCitPTTtPTS1XVTtBbCBXdXM7MDswOzAKK09NO09NLVNIO0FzaCBTaGFycXlhaDswOzA7MAorT007T00tWkE7QXogWmhpcmFoOzA7MDswCitPTTtPTS1NQTtNYXNxYTswOzA7MAorT007T00tTVU7TXVzYW5kYW07MDswOzAKK1BBO1BBLTtCb2NhcyBkZWwgVG9ybzswOzA7cHJvdmluY2UKK1BBO1BBLTI7Q29jbGU7MDswO3Byb3ZpbmNlCitQQTtQQS0zO0NvbG47MDswO3Byb3ZpbmNlCitQQTtQQS00O0NoaXJpcXU7MDswO3Byb3ZpbmNlCitQQTtQQS01O0RhcmllbjswOzA7cHJvdmluY2UKK1BBO1BBLTY7SGVycmVyYTswOzA7cHJvdmluY2UKK1BBO1BBLTc7TG9zIFNhbnRvczswOzA7cHJvdmluY2UKK1BBO1BBLTg7UGFuYW07MDswO3Byb3ZpbmNlCitQQTtQQS05O1ZlcmFndWFzOzA7MDtwcm92aW5jZQorUEE7UEEtMDtDb21hcmNhIGRlIFNhbiBCbGFzOzA7MDswc3BlY2lhbCB0ZXJyaXRvcnkKK1BFO1BFLUNBTDtFbCBDYWxsYW87MDswOzBjb25zdGl0dXRpb25hbCBwcm92aW5jZQorUEU7UEUtQU1BO0FtYXpvbmFzOzA7MDswZGVwYXJ0bWVudAorUEU7UEUtQU5DO0FuY2FzaDswOzA7MGRlcGFydG1lbnQKK1BFO1BFLUFQVTtBcHVyaW1hYzswOzA7MGRlcGFydG1lbnQKK1BFO1BFLUFSRTtBcmVxdWlwYTswOzA7MGRlcGFydG1lbnQKK1BFO1BFLUFZQTtBeWFjdWNobzswOzA7MGRlcGFydG1lbnQKK1BFO1BFLUNBSjtDYWphbWFyY2E7MDswOzBkZXBhcnRtZW50CitQRTtQRS1DVVM7Q3V6Y28gW0N1c2NvXTswOzA7MGRlcGFydG1lbnQKK1BFO1BFLUhVVjtIdWFuY2F2ZWxpY2E7MDswOzBkZXBhcnRtZW50CitQRTtQRS1IVUM7SHVhbnVjbzswOzA7MGRlcGFydG1lbnQKK1BFO1BFLUlDQTtJY2E7MDswOzBkZXBhcnRtZW50CitQRTtQRS1KVU47SnVuaW47MDswOzBkZXBhcnRtZW50CitQRTtQRS1MQUw7TGEgTGliZXJ0YWQ7MDswOzBkZXBhcnRtZW50CitQRTtQRS1MQU07TGFtYmF5ZXF1ZTswOzA7MGRlcGFydG1lbnQKK1BFO1BFLUxJTTtMaW1hOzA7MDswZGVwYXJ0bWVudAorUEU7UEUtTE9SO0xvcmV0bzswOzA7MGRlcGFydG1lbnQKK1BFO1BFLU1ERDtNYWRyZSBkZSBEaW9zOzA7MDswZGVwYXJ0bWVudAorUEU7UEUtTU9RO01vcXVlZ3VhOzA7MDswZGVwYXJ0bWVudAorUEU7UEUtUEFTO1Bhc2NvOzA7MDswZGVwYXJ0bWVudAorUEU7UEUtUElVO1BpdXJhOzA7MDswZGVwYXJ0bWVudAorUEU7UEUtUFVOO1B1bm87MDswOzBkZXBhcnRtZW50CitQRTtQRS1TQU07U2FuIE1hcnRpbjswOzA7MGRlcGFydG1lbnQKK1BFO1BFLVRBQztUYWNuYTswOzA7MGRlcGFydG1lbnQKK1BFO1BFLVRVTTtUdW1iZXM7MDswOzBkZXBhcnRtZW50CitQRTtQRS1VQ0E7VWNheWFsaTswOzA7MGRlcGFydG1lbnQKK1BHO1BHLU5DRDtOYXRpb25hbCBDYXBpdGFsIERpc3RyaWN0IChQb3J0IE1vcmVzYnkpOzA7MDswO2Rpc3RyaWN0CitQRztQRy1DUE07Q2VudHJhbDswOzA7cHJvdmluY2UKK1BHO1BHLUNQSztDaGltYnU7MDswO3Byb3ZpbmNlCitQRztQRy1FSEc7RWFzdGVybiBIaWdobGFuZHM7MDswO3Byb3ZpbmNlCitQRztQRy1FQlI7RWFzdCBOZXcgQnJpdGFpbjswOzA7cHJvdmluY2UKK1BHO1BHLUVTVztFYXN0IFNlcGlrOzA7MDtwcm92aW5jZQorUEc7UEctRVBXO0VuZ2E7MDswO3Byb3ZpbmNlCitQRztQRy1HUEs7R3VsZjswOzA7cHJvdmluY2UKK1BHO1BHLU1QTTtNYWRhbmc7MDswO3Byb3ZpbmNlCitQRztQRy1NUkw7TWFudXM7MDswO3Byb3ZpbmNlCitQRztQRy1NQkE7TWlsbmUgQmF5OzA7MDtwcm92aW5jZQorUEc7UEctTVBMO01vcm9iZTswOzA7cHJvdmluY2UKK1BHO1BHLU5JSztOZXcgSXJlbGFuZDswOzA7cHJvdmluY2UKK1BHO1BHLU5QUDtOb3J0aGVybjswOzA7cHJvdmluY2UKK1BHO1BHLU5TQTtOb3J0aCBTb2xvbW9uczswOzA7cHJvdmluY2UKK1BHO1BHLVNBTjtTYW5kYXVuIFtXZXN0IFNlcGlrXTswOzA7cHJvdmluY2UKK1BHO1BHLVNITTtTb3V0aGVybiBIaWdobGFuZHM7MDswO3Byb3ZpbmNlCitQRztQRy1XUEQ7V2VzdGVybjswOzA7cHJvdmluY2UKK1BHO1BHLVdITTtXZXN0ZXJuIEhpZ2hsYW5kczswOzA7cHJvdmluY2UKK1BHO1BHLVdCSztXZXN0IE5ldyBCcml0YWluOzA7MDtwcm92aW5jZQorUEg7UEgtQUJSO0FicmE7MDswOzUKK1BIO1BILUFHTjtBZ3VzYW4gZGVsIE5vcnRlOzA7MDszCitQSDtQSC1BR1M7QWd1c2FuIGRlbCBTdXI7MDswOzMKK1BIO1BILUFLTDtBa2xhbjswOzA7MDYKK1BIO1BILUFMQjtBbGJheTswOzA7MDUKK1BIO1BILUFOVDtBbnRpcXVlOzA7MDswNgorUEg7UEgtQVBBO0FwYXlhbzswOzA7NQorUEg7UEgtQVVSO0F1cm9yYTswOzA7MDQKK1BIO1BILUJBUztCYXNpbGFuOzA7MDswOQorUEg7UEgtQkFOO0JhdGFhbjswOzA7MDMKK1BIO1BILUJUTjtCYXRhbmVzOzA7MDswMgorUEg7UEgtQlRHO0JhdGFuZ2FzOzA7MDswNAorUEg7UEgtQkVOO0Jlbmd1ZXQ7MDswOzUKK1BIO1BILUJJTDtCaWxpcmFuOzA7MDswOAorUEg7UEgtQk9IO0JvaG9sOzA7MDswNworUEg7UEgtQlVLO0J1a2lkbm9uOzA7MDswCitQSDtQSC1CVUw7QnVsYWNhbjswOzA7MDMKK1BIO1BILUNBRztDYWdheWFuOzA7MDswMgorUEg7UEgtQ0FOO0NhbWFyaW5lcyBOb3J0ZTswOzA7MDUKK1BIO1BILUNBUztDYW1hcmluZXMgU3VyOzA7MDswNQorUEg7UEgtQ0FNO0NhbWlndWluOzA7MDswCitQSDtQSC1DQVA7Q2FwaXo7MDswOzA2CitQSDtQSC1DQVQ7Q2F0YW5kdWFuZXM7MDswOzA1CitQSDtQSC1DQVY7Q2F2aXRlOzA7MDswNAorUEg7UEgtQ0VCO0NlYnU7MDswOzA3CitQSDtQSC1DT007Q29tcG9zdGVsYSBWYWxsZXk7MDswOzAKK1BIO1BILURBVjtEYXZhbyBkZWwgTm9ydGU7MDswOzAKK1BIO1BILURBUztEYXZhbyBkZWwgU3VyOzA7MDswCitQSDtQSC1EQU87RGF2YW8gT3JpZW50YWw7MDswOzAKK1BIO1BILUVBUztFYXN0ZXJuIFNhbWFyOzA7MDswOAorUEg7UEgtR1VJO0d1aW1hcmFzOzA7MDswNgorUEg7UEgtSUZVO0lmdWdhbzswOzA7NQorUEg7UEgtSUxOO0lsb2NvcyBOb3J0ZTswOzA7MAorUEg7UEgtSUxTO0lsb2NvcyBTdXI7MDswOzAKK1BIO1BILUlMSTtJbG9pbG87MDswOzA2CitQSDtQSC1JU0E7SXNhYmVsYTswOzA7MDIKK1BIO1BILUtBTDtLYWxpbmdhOzA7MDs1CitQSDtQSC1MQUc7TGFndW5hOzA7MDswNAorUEg7UEgtTEFOO0xhbmFvIGRlbCBOb3J0ZTswOzA7MgorUEg7UEgtTEFTO0xhbmFvIGRlbCBTdXI7MDswOzQKK1BIO1BILUxVTjtMYSBVbmlvbjswOzA7MAorUEg7UEgtTEVZO0xleXRlOzA7MDswOAorUEg7UEgtTUFHO01hZ3VpbmRhbmFvOzA7MDs0CitQSDtQSC1NQUQ7TWFyaW5kdXF1ZTswOzA7MDQKK1BIO1BILU1BUztNYXNiYXRlOzA7MDswNQorUEg7UEgtTURDO01pbmRvcm8gT2NjaWRlbnRhbDswOzA7MDQKK1BIO1BILU1EUjtNaW5kb3JvIE9yaWVudGFsOzA7MDswNAorUEg7UEgtTVNDO01pc2FtaXMgT2NjaWRlbnRhbDswOzA7MAorUEg7UEgtTVNSO01pc2FtaXMgT3JpZW50YWw7MDswOzAKK1BIO1BILU1PVTtNb3VudGFpbiBQcm92aW5jZTswOzA7NQorUEg7UEgtTkVDO05lZ3JvcyBPY2NpZGVudGFsOzA7MDswNgorUEg7UEgtTkVSO05lZ3JvcyBPcmllbnRhbDswOzA7MDcKK1BIO1BILU5DTztOb3J0aCBDb3RhYmF0bzswOzA7MgorUEg7UEgtTlNBO05vcnRoZXJuIFNhbWFyOzA7MDswOAorUEg7UEgtTlVFO051ZXZhIEVjaWphOzA7MDswMworUEg7UEgtTlVWO051ZXZhIFZpemNheWE7MDswOzAyCitQSDtQSC1QTFc7UGFsYXdhbjswOzA7MDQKK1BIO1BILVBBTTtQYW1wYW5nYTswOzA7MDMKK1BIO1BILVBBTjtQYW5nYXNpbmFuOzA7MDswCitQSDtQSC1RVUU7UXVlem9uOzA7MDswNAorUEg7UEgtUVVJO1F1aXJpbm87MDswOzAyCitQSDtQSC1SSVo7Uml6YWw7MDswOzA0CitQSDtQSC1ST007Um9tYmxvbjswOzA7MDQKK1BIO1BILVNBUjtTYXJhbmdhbmk7MDswOzAKK1BIO1BILVNJRztTaXF1aWpvcjswOzA7MDcKK1BIO1BILVNPUjtTb3Jzb2dvbjswOzA7MDUKK1BIO1BILVNDTztTb3V0aCBDb3RhYmF0bzswOzA7MAorUEg7UEgtU0xFO1NvdXRoZXJuIExleXRlOzA7MDswOAorUEg7UEgtU1VLO1N1bHRhbiBLdWRhcmF0OzA7MDsyCitQSDtQSC1TTFU7U3VsdTswOzA7NAorUEg7UEgtU1VOO1N1cmlnYW8gZGVsIE5vcnRlOzA7MDszCitQSDtQSC1TVVI7U3VyaWdhbyBkZWwgU3VyOzA7MDszCitQSDtQSC1UQVI7VGFybGFjOzA7MDswMworUEg7UEgtVEFXO1Rhd2ktVGF3aTswOzA7NAorUEg7UEgtV1NBO1dlc3Rlcm4gU2FtYXI7MDswOzA4CitQSDtQSC1aTUI7WmFtYmFsZXM7MDswOzAzCitQSDtQSC1aQU47WmFtYm9hbmdhIGRlbCBOb3J0ZTswOzA7MDkKK1BIO1BILVpBUztaYW1ib2FuZ2EgZGVsIFN1cjswOzA7MDkKK1BIO1BILVpTSTtaYW1ib2FuZ2EgU2lidWd1ZXkgW1phbWJvYW5nYSBTaWJ1Z2F5XTswOzA7MDkKK1BLO1BLLUlTO0lzbGFtYWJhZDswOzA7MDtmZWRlcmFsIGNhcGl0YWwgdGVycml0b3J5CitQSztQSy1CQTtCYWx1Y2hpc3RhbiBbQmFsdWNoaXN0YW4gKGVuKV07QmFsb2NoaXN0biAodXIpOzA7MDtwcm92aW5jZQorUEs7UEstTlc7Ti5XLkYuUC4gW05vcnRoLVdlc3QgRnJvbnRpZXJdOzA7MDtwcm92aW5jZQorUEs7UEstUEI7UHVuamFiOzA7MDtwcm92aW5jZQorUEs7UEstU0Q7U2luZCBbU2luZCAoZW4pXTtTaW5kaCAodXIpOzA7MDtwcm92aW5jZQorUEs7UEstVEE7Ri5BLlQuQS4gW0ZlZGVyYWxseSBBZG1pbmlzdGVyZWQgVHJpYmFsIEFyZWFzXTswOzA7MDt0ZXJyaXRvcnkKK1BLO1BLLUpLO0phbW11IGFuZCBLYXNobWlyIFtBemFkIEthc2htaXJdOzA7MDswO1Bha2lzdGFuIGFkbWluaXN0ZXJlZCBhcmVhCitQSztQSy1OQTtOb3J0aGVybiBBcmVhczswOzA7MDtQYWtpc3RhbiBhZG1pbmlzdGVyZWQgYXJlYQorUEw7UEwtRFM7RG9sbm9lbHNraWU7MDswOzAKK1BMO1BMLUtQO0t1amF3c2tvLXBvbW9yc2tpZTswOzA7MAorUEw7UEwtTFU7THViZWxza2llOzA7MDswCitQTDtQTC1MQjtMdWJ1c2tpZTswOzA7MAorUEw7UEwtTEQ7o2R6a2llOzA7MDswCitQTDtQTC1NQTtNYbNvcG9sc2tpZTswOzA7MAorUEw7UEwtTVo7TWF6b3dpZWNraWU7MDswOzAKK1BMO1BMLU9QO09wb2xza2llOzA7MDswCitQTDtQTC1QSztQb2RrYXJwYWNraWU7MDswOzAKK1BMO1BMLVBEO1BvZGxhc2tpZTswOzA7MAorUEw7UEwtUE07UG9tb3Jza2llOzA7MDswCitQTDtQTC1TTDtlbHNraWU7MDswOzAKK1BMO1BMLVNLO2V3aWV0b2tyenlza2llOzA7MDswCitQTDtQTC1XTjtXYXJtaXNrby1tYXp1cnNraWU7MDswOzAKK1BMO1BMLVdQO1dpZWxrb3BvbHNraWU7MDswOzAKK1BMO1BMLVpQO1phY2hvZG5pb3BvbW9yc2tpZTswOzA7MAorUFQ7UFQtMDtBdmVpcm87MDswOzA7ZGlzdHJpY3QKK1BUO1BULTAyO0JlamE7MDswOzA7ZGlzdHJpY3QKK1BUO1BULTAzO0JyYWdhOzA7MDswO2Rpc3RyaWN0CitQVDtQVC0wNDtCcmFnYW5jYTswOzA7MDtkaXN0cmljdAorUFQ7UFQtMDU7Q2FzdGVsbyBCcmFuY287MDswOzA7ZGlzdHJpY3QKK1BUO1BULTA2O0NvaW1icmE7MDswOzA7ZGlzdHJpY3QKK1BUO1BULTA3O3ZvcmE7MDswOzA7ZGlzdHJpY3QKK1BUO1BULTA4O0Zhcm87MDswOzA7ZGlzdHJpY3QKK1BUO1BULTA5O0d1YXJkYTswOzA7MDtkaXN0cmljdAorUFQ7UFQtMDtMZWlyaWE7MDswOzA7ZGlzdHJpY3QKK1BUO1BULTtMaXNib2E7MDswOzA7ZGlzdHJpY3QKK1BUO1BULTI7UG9ydGFsZWdyZTswOzA7MDtkaXN0cmljdAorUFQ7UFQtMztQb3J0bzswOzA7MDtkaXN0cmljdAorUFQ7UFQtNDtTYW50YXJlbTswOzA7MDtkaXN0cmljdAorUFQ7UFQtNTtTZXRiYWw7MDswOzA7ZGlzdHJpY3QKK1BUO1BULTY7VmlhbmEgZG8gQ2FzdGVsbzswOzA7MDtkaXN0cmljdAorUFQ7UFQtNztWaWxhIFJlYWw7MDswOzA7ZGlzdHJpY3QKK1BUO1BULTg7VmlzZXU7MDswOzA7ZGlzdHJpY3QKK1BUO1BULTIwO1JlZ2lvIEF1dG5vbWEgZG9zIEFjb3JlczswOzA7YXV0b25vbW91cyByZWdpb24KK1BUO1BULTMwO1JlZ2lvIEF1dG5vbWEgZGEgTWFkZWlyYTswOzA7YXV0b25vbW91cyByZWdpb24KK1BZO1BZLUFTVTtBc3VuY2lvbjswOzA7MDtjYXBpdGFsCitQWTtQWS02O0FsdG8gUGFyYWd1YXk7MDswOzBkZXBhcnRtZW50CitQWTtQWS0wO0FsdG8gUGFyYW5hOzA7MDswZGVwYXJ0bWVudAorUFk7UFktMztBbWFtYmF5OzA7MDswZGVwYXJ0bWVudAorUFk7UFktMTk7Qm9xdWVyb247MDswOzBkZXBhcnRtZW50CitQWTtQWS01O0NhYWd1YXo7MDswOzBkZXBhcnRtZW50CitQWTtQWS0xNjtDYWF6YXBhOzA7MDswZGVwYXJ0bWVudAorUFk7UFktMTQ7Q2FuaW5kZXl1OzA7MDswZGVwYXJ0bWVudAorUFk7UFktMTc7Q2VudHJhbDswOzA7MGRlcGFydG1lbnQKK1BZO1BZLTE4O0NvbmNlcGNpb247MDswOzBkZXBhcnRtZW50CitQWTtQWS0xMztDb3JkaWxsZXJhOzA7MDswZGVwYXJ0bWVudAorUFk7UFktNDtHdWFpcmE7MDswOzBkZXBhcnRtZW50CitQWTtQWS03O0l0YXB1YTswOzA7MGRlcGFydG1lbnQKK1BZO1BZLTg7TWlzaW9uZXM7MDswOzBkZXBhcnRtZW50CitQWTtQWS0yO05lZW1idWN1OzA7MDswZGVwYXJ0bWVudAorUFk7UFktOTtQYXJhZ3Vhcmk7MDswOzBkZXBhcnRtZW50CitQWTtQWS0xNTtQcmVzaWRlbnRlIEhheWVzOzA7MDswZGVwYXJ0bWVudAorUFk7UFktMTI7U2FuIFBlZHJvOzA7MDswZGVwYXJ0bWVudAorUUE7UUEtREE7QWQgRGF3YWg7MDswOzAKK1FBO1FBLUdIO0FsIEdodXdheXJpeWFoOzA7MDswCitRQTtRQS1KVTtBbCBKdW1heWxpeWFoOzA7MDswCitRQTtRQS1LSDtBbCBLaGF3cjswOzA7MAorUUE7UUEtV0E7QWwgV2FrcmFoOzA7MDswCitRQTtRQS1SQTtBciBSYXl5YW47MDswOzAKK1FBO1FBLUpCO0phcml5YW4gYWwgQmFuYWg7MDswOzAKK1FBO1FBLU1TO01hZG5hdCBhc2ggU2hhbWw7MDswOzAKK1FBO1FBLVVTO1VtbSBhbGw7MDswOzAKK1JPO1JPLUI7QnVjdXJldGk7MDswOzBtdW5pY2lwYWxpdHkKK1JPO1JPLUFCO0FsYmE7MDswOzBkZXBhcnRtZW50CitSTztSTy1BUjtBcmFkOzA7MDswZGVwYXJ0bWVudAorUk87Uk8tQUc7QXJnZTswOzA7MGRlcGFydG1lbnQKK1JPO1JPLUJDO0JhY3U7MDswOzBkZXBhcnRtZW50CitSTztSTy1CSDtCaWhvcjswOzA7MGRlcGFydG1lbnQKK1JPO1JPLUJOO0Jpc3RyaWEtTnN1ZDswOzA7MGRlcGFydG1lbnQKK1JPO1JPLUJUO0JvdG9hbmk7MDswOzBkZXBhcnRtZW50CitSTztSTy1CVjtCcmFvdjswOzA7MGRlcGFydG1lbnQKK1JPO1JPLUJSO0JyaWxhOzA7MDswZGVwYXJ0bWVudAorUk87Uk8tQlo7QnV6dTswOzA7MGRlcGFydG1lbnQKK1JPO1JPLUNTO0NhcmEtU2V2ZXJpbjswOzA7MGRlcGFydG1lbnQKK1JPO1JPLUNMO0NscmFpOzA7MDswZGVwYXJ0bWVudAorUk87Uk8tQ0o7Q2x1ajswOzA7MGRlcGFydG1lbnQKK1JPO1JPLUNUO0NvbnN0YW5hOzA7MDswZGVwYXJ0bWVudAorUk87Uk8tQ1Y7Q292YXNuYTswOzA7MGRlcGFydG1lbnQKK1JPO1JPLURCO0RhbWJvdmlhOzA7MDswZGVwYXJ0bWVudAorUk87Uk8tREo7RG9sajswOzA7MGRlcGFydG1lbnQKK1JPO1JPLUdMO0dhbGFpOzA7MDswZGVwYXJ0bWVudAorUk87Uk8tR1I7R2l1cmdpdTswOzA7MGRlcGFydG1lbnQKK1JPO1JPLUdKO0dvcmo7MDswOzBkZXBhcnRtZW50CitSTztSTy1IUjtIYXJnaGl0YTswOzA7MGRlcGFydG1lbnQKK1JPO1JPLUhEO0h1bmVkb2FyYTswOzA7MGRlcGFydG1lbnQKK1JPO1JPLUlMO0lhbG9taWE7MDswOzBkZXBhcnRtZW50CitSTztSTy1JUztJYWk7MDswOzBkZXBhcnRtZW50CitSTztSTy1NTTtNYXJhbXVyZTswOzA7MGRlcGFydG1lbnQKK1JPO1JPLU1IO01laGVkaW5pOzA7MDswZGVwYXJ0bWVudAorUk87Uk8tTVM7TXVyZTswOzA7MGRlcGFydG1lbnQKK1JPO1JPLU5UO05lYW07MDswOzBkZXBhcnRtZW50CitSTztSTy1PVDtPbHQ7MDswOzBkZXBhcnRtZW50CitSTztSTy1QSDtQcmFob3ZhOzA7MDswZGVwYXJ0bWVudAorUk87Uk8tU007U2F0dSBNYXJlOzA7MDswZGVwYXJ0bWVudAorUk87Uk8tU0o7U2xhajswOzA7MGRlcGFydG1lbnQKK1JPO1JPLVNCO1NpYml1OzA7MDswZGVwYXJ0bWVudAorUk87Uk8tU1Y7U3VjZWF2YTswOzA7MGRlcGFydG1lbnQKK1JPO1JPLVRSO1RlbGVvcm1hbjswOzA7MGRlcGFydG1lbnQKK1JPO1JPLVRNO1RpbWk7MDswOzBkZXBhcnRtZW50CitSTztSTy1UTDtUdWxjZWE7MDswOzBkZXBhcnRtZW50CitSTztSTy1WUztWYXNsdWk7MDswOzBkZXBhcnRtZW50CitSTztSTy1WTDtWYWxjZWE7MDswOzBkZXBhcnRtZW50CitSTztSTy1WTjtWcmFuY2VhOzA7MDswZGVwYXJ0bWVudAorUlU7UlUtQUQ7QWR5Z2V5YSwgUmVzcHVibGlrYTtBZHlnZWphLCBSZXNwdWJsaWthOzA7MDtyZXB1YmxpYworUlU7UlUtQUw7QWx0YXksIFJlc3B1Ymxpa2E7QWx0YWosIFJlc3B1Ymxpa2E7MDswO3JlcHVibGljCitSVTtSVS1CQTtCYXNoa29ydG9zdGFuLCBSZXNwdWJsaWthO0Jha29ydG9zdGFuLCBSZXNwdWJsaWthOzA7MDtyZXB1YmxpYworUlU7UlUtQlU7QnVyeWF0aXlhLCBSZXNwdWJsaWthO0J1cmphdGlqYSwgUmVzcHVibGlrYTswOzA7cmVwdWJsaWMKK1JVO1JVLUNFO0NoZWNoZW5za2F5YSBSZXNwdWJsaWthO2VlZW5za2FqYSBSZXNwdWJsaWthOzA7MDtyZXB1YmxpYworUlU7UlUtQ1U7Q2h1dmFzaHNrYXlhIFJlc3B1Ymxpa2E7dXZhc2thamEgUmVzcHVibGlrYTswOzA7cmVwdWJsaWMKK1JVO1JVLURBO0RhZ2VzdGFuLCBSZXNwdWJsaWthO0RhZ2VzdGFuLCBSZXNwdWJsaWthOzA7MDtyZXB1YmxpYworUlU7UlUtSU47SW5ndXNoc2theWEgUmVzcHVibGlrYSBbUmVzcHVibGlrYSBJbmd1c2hldGl5YV07SW5ndXNrYWphIFJlc3B1Ymxpa2EgW1Jlc3B1Ymxpa2EgSW5ndWV0aWphXTswOzA7cmVwdWJsaWMKK1JVO1JVLUtCO0thYmFyZGluby1CYWxrYXJza2F5YSBSZXNwdWJsaWthO0thYmFyZGluby1CYWxrYXJza2FqYSBSZXNwdWJsaWthOzA7MDtyZXB1YmxpYworUlU7UlUtS0w7S2FsbXlraXlhLCBSZXNwdWJsaWthO0thbG15a2lqYSwgUmVzcHVibGlrYTswOzA7cmVwdWJsaWMKK1JVO1JVLUtDO0thcmFjaGF5ZXZvLUNoZXJrZXNza2F5YSBSZXNwdWJsaWthO0thcmFlYWpldm8tZXJrZXNza2FqYSBSZXNwdWJsaWthOzA7MDtyZXB1YmxpYworUlU7UlUtS1I7S2FyZWxpeWEsIFJlc3B1Ymxpa2E7S2FyZWxpamEsIFJlc3B1Ymxpa2E7MDswO3JlcHVibGljCitSVTtSVS1LSztLaGFrYXNpeWEsIFJlc3B1Ymxpa2E7SGFrYXNpamEsIFJlc3B1Ymxpa2E7MDswO3JlcHVibGljCitSVTtSVS1LTztLb21pLCBSZXNwdWJsaWthO0tvbWksIFJlc3B1Ymxpa2E7MDswO3JlcHVibGljCitSVTtSVS1NRTtNYXJpeSBFbCwgUmVzcHVibGlrYTtNYXJpaiBsLCBSZXNwdWJsaWthOzA7MDtyZXB1YmxpYworUlU7UlUtTU87TW9yZG92aXlhLCBSZXNwdWJsaWthO01vcmRvdmlqYSwgUmVzcHVibGlrYTswOzA7cmVwdWJsaWMKK1JVO1JVLVNBO1Nha2hhLCBSZXNwdWJsaWthIFtZYWt1dGl5YV07U2FoYSwgUmVzcHVibGlrYSBbSmFrdXRpamFdOzA7MDtyZXB1YmxpYworUlU7UlUtU0U7U2V2ZXJuYXlhIE9zZXRpeWEsIFJlc3B1Ymxpa2EgW0FsYW5peWFdIFtSZXNwdWJsaWthIFNldmVybmF5YSBPc2V0aXlhLUFsYW5peWFdO1NldmVybmFqYSBPc2V0aWphLCBSZXNwdWJsaWthIFtBbGFuaWphXSBbUmVzcHVibGlrYSBTZXZlcm5hamEgT3NldGlqYS1BbGFuaWphXTswOzA7cmVwdWJsaWMKK1JVO1JVLVRBO1RhdGFyc3RhbiwgUmVzcHVibGlrYTtUYXRhcnN0YW4sIFJlc3B1Ymxpa2E7MDswO3JlcHVibGljCitSVTtSVS1UWTtUeXZhLCBSZXNwdWJsaWthIFtUdXZhXTtUeXZhLCBSZXNwdWJsaWthIFtUdXZhXTswOzA7cmVwdWJsaWMKK1JVO1JVLVVEO1VkbXVydHNrYXlhIFJlc3B1Ymxpa2E7VWRtdXJ0c2thamEgUmVzcHVibGlrYTswOzA7cmVwdWJsaWMKK1JVO1JVLUFMVDtBbHRheXNraXkga3JheTtBbHRhanNraWoga3JhajswOzA7YWRtaW5pc3RyYXRpdmUgdGVycml0b3J5CitSVTtSVS1LSEE7S2hhYmFyb3Zza2l5IGtyYXk7SGFiYXJvdnNraWoga3JhajswOzA7YWRtaW5pc3RyYXRpdmUgdGVycml0b3J5CitSVTtSVS1LREE7S3Jhc25vZGFyc2tpeSBrcmF5O0tyYXNub2RhcnNraWoga3JhajswOzA7YWRtaW5pc3RyYXRpdmUgdGVycml0b3J5CitSVTtSVS1LWUE7S3Jhc25veWFyc2tpeSBrcmF5O0tyYXNub2phcnNraWoga3JhajswOzA7YWRtaW5pc3RyYXRpdmUgdGVycml0b3J5CitSVTtSVS1QUkk7UHJpbW9yc2tpeSBrcmF5O1ByaW1vcnNraWoga3JhajswOzA7YWRtaW5pc3RyYXRpdmUgdGVycml0b3J5CitSVTtSVS1TVEE7U3RhdnJvcG9sc2tpeSBrcmF5O1N0YXZyb3BvbHNraWoga3JhajswOzA7YWRtaW5pc3RyYXRpdmUgdGVycml0b3J5CitSVTtSVS1BTVU7QW11cnNrYXlhIG9ibGFzdDtBbXVyc2thamEgb2JsYXN0OzA7MDthZG1pbmlzdHJhdGl2ZSByZWdpb24KK1JVO1JVLUFSSztBcmtoYW5nZWxza2F5YSBvYmxhc3Q7QXJoYW5nZWxza2FqYSBvYmxhc3Q7MDswO2FkbWluaXN0cmF0aXZlIHJlZ2lvbgorUlU7UlUtQVNUO0FzdHJha2hhbnNrYXlhIG9ibGFzdDtBc3RyYWhhbnNrYWphIG9ibGFzdDswOzA7YWRtaW5pc3RyYXRpdmUgcmVnaW9uCitSVTtSVS1CRUw7QmVsZ29yb2Rza2F5YSBvYmxhc3Q7QmVsZ29yb2Rza2FqYSBvYmxhc3Q7MDswO2FkbWluaXN0cmF0aXZlIHJlZ2lvbgorUlU7UlUtQlJZO0JyeWFuc2theWEgb2JsYXN0O0JyamFuc2thamEgb2JsYXN0OzA7MDthZG1pbmlzdHJhdGl2ZSByZWdpb24KK1JVO1JVLUNIRTtDaGVseWFiaW5za2F5YSBvYmxhc3Q7ZWxqYWJpbnNrYWphIG9ibGFzdDswOzA7YWRtaW5pc3RyYXRpdmUgcmVnaW9uCitSVTtSVS1DSEk7Q2hpdGluc2theWEgb2JsYXN0O2l0aW5za2FqYSBvYmxhc3Q7MDswO2FkbWluaXN0cmF0aXZlIHJlZ2lvbgorUlU7UlUtSVJLO0lya3V0c2theWEgb2JsYXN0O0lya3V0c2thamEgb2JsYXN0OzA7MDthZG1pbmlzdHJhdGl2ZSByZWdpb24KK1JVO1JVLUlWQTtJdmFub3Zza2F5YSBvYmxhc3Q7SXZhbm92c2thamEgb2JsYXN0OzA7MDthZG1pbmlzdHJhdGl2ZSByZWdpb24KK1JVO1JVLUtHRDtLYWxpbmluZ3JhZHNrYXlhIG9ibGFzdDtLYWxpbmluZ3JhZHNrYWphIG9ibGFzdDswOzA7YWRtaW5pc3RyYXRpdmUgcmVnaW9uCitSVTtSVS1LTFU7S2FsdXpoc2theWEgb2JsYXN0O0thbHVza2FqYSBvYmxhc3Q7MDswO2FkbWluaXN0cmF0aXZlIHJlZ2lvbgorUlU7UlUtS0FNO0thbWNoYXRza2F5YSBvYmxhc3Q7S2FtZWF0c2thamEgb2JsYXN0OzA7MDthZG1pbmlzdHJhdGl2ZSByZWdpb24KK1JVO1JVLUtFTTtLZW1lcm92c2theWEgb2JsYXN0O0tlbWVyb3Zza2FqYSBvYmxhc3Q7MDswO2FkbWluaXN0cmF0aXZlIHJlZ2lvbgorUlU7UlUtS0lSO0tpcm92c2theWEgb2JsYXN0O0tpcm92c2thamEgb2JsYXN0OzA7MDthZG1pbmlzdHJhdGl2ZSByZWdpb24KK1JVO1JVLUtPUztLb3N0cm9tc2theWEgb2JsYXN0O0tvc3Ryb21za2FqYSBvYmxhc3Q7MDswO2FkbWluaXN0cmF0aXZlIHJlZ2lvbgorUlU7UlUtS0dOO0t1cmdhbnNrYXlhIG9ibGFzdDtLdXJnYW5za2FqYSBvYmxhc3Q7MDswO2FkbWluaXN0cmF0aXZlIHJlZ2lvbgorUlU7UlUtS1JTO0t1cnNrYXlhIG9ibGFzdDtLdXJza2FqYSBvYmxhc3Q7MDswO2FkbWluaXN0cmF0aXZlIHJlZ2lvbgorUlU7UlUtTEVOO0xlbmluZ3JhZHNrYXlhIG9ibGFzdDtMZW5pbmdyYWRza2FqYSBvYmxhc3Q7MDswO2FkbWluaXN0cmF0aXZlIHJlZ2lvbgorUlU7UlUtTElQO0xpcGV0c2theWEgb2JsYXN0O0xpcGV0c2thamEgb2JsYXN0OzA7MDthZG1pbmlzdHJhdGl2ZSByZWdpb24KK1JVO1JVLU1BRztNYWdhZGFuc2theWEgb2JsYXN0O01hZ2FkYW5za2FqYSBvYmxhc3Q7MDswO2FkbWluaXN0cmF0aXZlIHJlZ2lvbgorUlU7UlUtTU9TO01vc2tvdnNrYXlhIG9ibGFzdDtNb3Nrb3Zza2FqYSBvYmxhc3Q7MDswO2FkbWluaXN0cmF0aXZlIHJlZ2lvbgorUlU7UlUtTVVSO011cm1hbnNrYXlhIG9ibGFzdDtNdXJtYW5za2FqYSBvYmxhc3Q7MDswO2FkbWluaXN0cmF0aXZlIHJlZ2lvbgorUlU7UlUtTklaO05pemhlZ29yb2Rza2F5YSBvYmxhc3Q7TmllZ29yb2Rza2FqYSBvYmxhc3Q7MDswO2FkbWluaXN0cmF0aXZlIHJlZ2lvbgorUlU7UlUtTkdSO05vdmdvcm9kc2theWEgb2JsYXN0O05vdmdvcm9kc2thamEgb2JsYXN0OzA7MDthZG1pbmlzdHJhdGl2ZSByZWdpb24KK1JVO1JVLU5WUztOb3Zvc2liaXJza2F5YSBvYmxhc3Q7Tm92b3NpYmlyc2thamEgb2JsYXN0OzA7MDthZG1pbmlzdHJhdGl2ZSByZWdpb24KK1JVO1JVLU9NUztPbXNrYXlhIG9ibGFzdDtPbXNrYWphIG9ibGFzdDswOzA7YWRtaW5pc3RyYXRpdmUgcmVnaW9uCitSVTtSVS1PUkU7T3JlbmJ1cmdza2F5YSBvYmxhc3Q7T3JlbmJ1cmdza2FqYSBvYmxhc3Q7MDswO2FkbWluaXN0cmF0aXZlIHJlZ2lvbgorUlU7UlUtT1JMO09ybG92c2theWEgb2JsYXN0O09ybG92c2thamEgb2JsYXN0OzA7MDthZG1pbmlzdHJhdGl2ZSByZWdpb24KK1JVO1JVLVBOWjtQZW56ZW5za2F5YSBvYmxhc3Q7UGVuemVuc2thamEgb2JsYXN0OzA7MDthZG1pbmlzdHJhdGl2ZSByZWdpb24KK1JVO1JVLVBFUjtQZXJtc2theWEgb2JsYXN0O1Blcm1za2FqYSBvYmxhc3Q7MDswO2FkbWluaXN0cmF0aXZlIHJlZ2lvbgorUlU7UlUtUFNLO1Bza292c2theWEgb2JsYXN0O1Bza292c2thamEgb2JsYXN0OzA7MDthZG1pbmlzdHJhdGl2ZSByZWdpb24KK1JVO1JVLVJPUztSb3N0b3Zza2F5YSBvYmxhc3Q7Um9zdG92c2thamEgb2JsYXN0OzA7MDthZG1pbmlzdHJhdGl2ZSByZWdpb24KK1JVO1JVLVJZQTtSeWF6YW5za2F5YSBvYmxhc3Q7UmphemFuc2thamEgb2JsYXN0OzA7MDthZG1pbmlzdHJhdGl2ZSByZWdpb24KK1JVO1JVLVNBSztTYWtoYWxpbnNrYXlhIG9ibGFzdDtTYWhhbGluc2thamEgb2JsYXN0OzA7MDthZG1pbmlzdHJhdGl2ZSByZWdpb24KK1JVO1JVLVNBTTtTYW1hcnNrYXlhIG9ibGFzdDtTYW1hcnNrYWphIG9ibGFzdDswOzA7YWRtaW5pc3RyYXRpdmUgcmVnaW9uCitSVTtSVS1TQVI7U2FyYXRvdnNrYXlhIG9ibGFzdDtTYXJhdG92c2thamEgb2JsYXN0OzA7MDthZG1pbmlzdHJhdGl2ZSByZWdpb24KK1JVO1JVLVNNTztTbW9sZW5za2F5YSBvYmxhc3Q7U21vbGVuc2thamEgb2JsYXN0OzA7MDthZG1pbmlzdHJhdGl2ZSByZWdpb24KK1JVO1JVLVNWRTtTdmVyZGxvdnNrYXlhIG9ibGFzdDtTdmVyZGxvdnNrYWphIG9ibGFzdDswOzA7YWRtaW5pc3RyYXRpdmUgcmVnaW9uCitSVTtSVS1UQU07VGFtYm92c2theWEgb2JsYXN0O1RhbWJvdnNrYWphIG9ibGFzdDswOzA7YWRtaW5pc3RyYXRpdmUgcmVnaW9uCitSVTtSVS1UT007VG9tc2theWEgb2JsYXN0O1RvbXNrYWphIG9ibGFzdDswOzA7YWRtaW5pc3RyYXRpdmUgcmVnaW9uCitSVTtSVS1UVUw7VHVsc2theWEgb2JsYXN0O1R1bHNrYWphIG9ibGFzdDswOzA7YWRtaW5pc3RyYXRpdmUgcmVnaW9uCitSVTtSVS1UVkU7VHZlcnNrYXlhIG9ibGFzdDtUdmVyc2thamEgb2JsYXN0OzA7MDthZG1pbmlzdHJhdGl2ZSByZWdpb24KK1JVO1JVLVRZVTtUeXVtZW5za2F5YSBvYmxhc3Q7VGp1bWVuc2thamEgb2JsYXN0OzA7MDthZG1pbmlzdHJhdGl2ZSByZWdpb24KK1JVO1JVLVVMWTtVbHlhbm92c2theWEgb2JsYXN0O1VsamFub3Zza2FqYSBvYmxhc3Q7MDswO2FkbWluaXN0cmF0aXZlIHJlZ2lvbgorUlU7UlUtVkxBO1ZsYWRpbWlyc2theWEgb2JsYXN0O1ZsYWRpbWlyc2thamEgb2JsYXN0OzA7MDthZG1pbmlzdHJhdGl2ZSByZWdpb24KK1JVO1JVLVZHRztWb2xnb2dyYWRza2F5YSBvYmxhc3Q7Vm9sZ29ncmFkc2thamEgb2JsYXN0OzA7MDthZG1pbmlzdHJhdGl2ZSByZWdpb24KK1JVO1JVLVZMRztWb2xvZ29kc2theWEgb2JsYXN0O1ZvbG9nb2Rza2FqYSBvYmxhc3Q7MDswO2FkbWluaXN0cmF0aXZlIHJlZ2lvbgorUlU7UlUtVk9SO1Zvcm9uZXpoc2theWEgb2JsYXN0O1Zvcm9uZXNrYWphIG9ibGFzdDswOzA7YWRtaW5pc3RyYXRpdmUgcmVnaW9uCitSVTtSVS1ZQVI7WWFyb3NsYXZza2F5YSBvYmxhc3Q7SmFyb3NsYXZza2FqYSBvYmxhc3Q7MDswO2FkbWluaXN0cmF0aXZlIHJlZ2lvbgorUlU7UlUtTU9XO01vc2t2YTtNb3NrdmE7MDswO2F1dG9ub21vdXMgY2l0eQorUlU7UlUtU1BFO1Nhbmt0LVBldGVyYnVyZztTYW5rdC1QZXRlcmJ1cmc7MDswO2F1dG9ub21vdXMgY2l0eQorUlU7UlUtWUVWO1lldnJleXNrYXlhIGF2dG9ub21uYXlhIG9ibGFzdDtFdnJlanNrYWphIGF2dG9ub21uYWphIG9ibGFzdDswOzA7YXV0b25vbW91cyByZWdpb24KK1JVO1JVLUFHQjtBZ2luc2tpeSBCdXJ5YXRza2l5IGF2dG9ub21ueXkgb2tydWc7QWdpbnNraWogQnVyamF0c2tpaiBhdnRvbm9tbnlqIG9rcnVnOzA7MDthdXRvbm9tb3VzIGRpc3RyaWN0CitSVTtSVS1DSFU7Q2h1a290c2tpeSBhdnRvbm9tbnl5IG9rcnVnO3Vrb3Rza2lqIGF2dG9ub21ueWogb2tydWc7MDswO2F1dG9ub21vdXMgZGlzdHJpY3QKK1JVO1JVLUVWRTtFdmVua2l5c2tpeSBhdnRvbm9tbnl5IG9rcnVnO3ZlbmtpanNraWogYXZ0b25vbW55aiBva3J1ZzswOzA7YXV0b25vbW91cyBkaXN0cmljdAorUlU7UlUtS0hNO0toYW50eS1NYW5zaXlza2l5IGF2dG9ub21ueXkgb2tydWcgW1l1Z3JhXTtIYW50eS1NYW5zaWpza2lqIGF2dG9ub21ueWogb2tydWcgW0p1Z3JhXTswOzA7YXV0b25vbW91cyBkaXN0cmljdAorUlU7UlUtS09QO0tvbWktUGVybXlhdHNraXkgYXZ0b25vbW55eSBva3J1ZztLb21pLVBlcm1qYXRza2lqIGF2dG9ub21ueWogb2tydWc7MDswO2F1dG9ub21vdXMgZGlzdHJpY3QKK1JVO1JVLUtPUjtLb3J5YWtza2l5IGF2dG9ub21ueXkgb2tydWc7S29yamFrc2tpaiBhdnRvbm9tbnlqIG9rcnVnOzA7MDthdXRvbm9tb3VzIGRpc3RyaWN0CitSVTtSVS1ORU47TmVuZXRza2l5IGF2dG9ub21ueXkgb2tydWc7TmVuZXRza2lqIGF2dG9ub21ueWogb2tydWc7MDswO2F1dG9ub21vdXMgZGlzdHJpY3QKK1JVO1JVLVRBWTtUYXlteXJza2l5IChEb2xnYW5vLU5lbmV0c2tpeSkgYXZ0b25vbW55eSBva3J1ZztUYWpteXJza2lqIChEb2xnYW5vLU5lbmV0c2tpaikgYXZ0b25vbW55aiBva3J1ZzswOzA7YXV0b25vbW91cyBkaXN0cmljdAorUlU7UlUtVU9CO1VzdC1PcmR5bnNraXkgQnVyeWF0c2tpeSBhdnRvbm9tbnl5IG9rcnVnO1VzdC1PcmR5bnNraWogQnVyamF0c2tpaiBhdnRvbm9tbnlqIG9rcnVnOzA7MDthdXRvbm9tb3VzIGRpc3RyaWN0CitSVTtSVS1ZQU47WWFtYWxvLU5lbmV0c2tpeSBhdnRvbm9tbnl5IG9rcnVnO0phbWFsby1OZW5ldHNraWogYXZ0b25vbW55aiBva3J1ZzswOzA7YXV0b25vbW91cyBkaXN0cmljdAorUlc7UlctQztCdXRhcmU7MDswOzAKK1JXO1JXLUk7Qnl1bWJhOzA7MDswCitSVztSVy1FO0N5YW5ndWd1OzA7MDswCitSVztSVy1EO0dpa29uZ29ybzswOzA7MAorUlc7UlctRztHaXNlbnlpOzA7MDswCitSVztSVy1CO0dpdGFyYW1hOzA7MDswCitSVztSVy1KO0tpYnVuZ287MDswOzAKK1JXO1JXLUY7S2lidXllOzA7MDswCitSVztSVy1LO0tpZ2FsaS1SdXJhbDtLaWdhbGkgeSBJY3lhcm87MDswOworUlc7UlctTDtLaWdhbGktVmlsbGU7S2lnYWxpIE5nYXJpOzA7MDsKK1JXO1JXLU07TXV0YXJhOzA7MDswCitSVztSVy1IO1J1aGVuZ2VyaTswOzA7MAorU0E7U0EtMTA7QmFoYTswOzA7MAorU0E7U0EtMDg7Tm9ydGhlcm4gRnJvbnRpZXI7MDswOzAKK1NBO1NBLTI7SmF3ZjswOzA7MAorU0E7U0EtMDM7TWFkaW5haDswOzA7MAorU0E7U0EtMDU7UXVhc3NpbTswOzA7MAorU0E7U0EtMDtSaXlhZDswOzA7MAorU0E7U0EtMDQ7RWFzdGVybiBQcm92aW5jZTswOzA7MAorU0E7U0EtNDtBc2lyOzA7MDswCitTQTtTQS0wNjtIYWlsOzA7MDswCitTQTtTQS0wOTtKaXphbjswOzA7MAorU0E7U0EtMDI7TWFra2FoOzA7MDswCitTQTtTQS0xMjtOYWpyYW47MDswOzAKK1NBO1NBLTA3O1RhYnVrOzA7MDswCitTQjtTQi1DVDtDYXBpdGFsIFRlcnJpdG9yeSAoSG9uaWFyYSk7MDswOzBjYXBpdGFsIHRlcnJpdG9yeQorU0I7U0ItQ0U7Q2VudHJhbDswOzA7cHJvdmluY2UKK1NCO1NCLUdVO0d1YWRhbGNhbmFsOzA7MDtwcm92aW5jZQorU0I7U0ItSVM7SXNhYmVsOzA7MDtwcm92aW5jZQorU0I7U0ItTUs7TWFraXJhOzA7MDtwcm92aW5jZQorU0I7U0ItTUw7TWFsYWl0YTswOzA7cHJvdmluY2UKK1NCO1NCLVRFO1RlbW90dTswOzA7cHJvdmluY2UKK1NCO1NCLVdFO1dlc3Rlcm47MDswO3Byb3ZpbmNlCitTRDtTRC0yMztsIGFuIE5sOzA7MDswCitTRDtTRC0yNjtBbCBCYXIgYWwgQW1hcjswOzA7MAorU0Q7U0QtODtBbCBCdWF5cnQ7MDswOzAKK1NEO1NELTA3O0FsIEphenJhaDswOzA7MAorU0Q7U0QtMDM7QWwgS2hhcm07MDswOzAKK1NEO1NELTA2O0FsIFFhcmlmOzA7MDswCitTRDtTRC0yMjtBbCBXYWRhaDswOzA7MAorU0Q7U0QtMDQ7QW4gTmw7MDswOzAKK1NEO1NELTA4O0FuIE5sIGFsIEFieWE7MDswOzAKK1NEO1NELTI0O0FuIE5sIGFsIEF6cmFxOzA7MDswCitTRDtTRC0wO0FzaCBTaGFtbHlhaDswOzA7MAorU0Q7U0QtNztCYXIgYWwgSmFiYWw7MDswOzAKK1NEO1NELTY7R2hhcmIgYWwgSXN0aXd5YWg7MDswOzAKK1NEO1NELTQ7R2hhcmIgQmFyIGFsIEdoYXpsOzA7MDswCitTRDtTRC0yO0doYXJiIERyZnI7MDswOzAKK1NEO1NELTA7R2hhcmIgS3VyZHVmbjswOzA7MAorU0Q7U0QtMTA7SmFuYiBEcmZyOzA7MDswCitTRDtTRC0zO0phbmIgS3VyZHVmbjswOzA7MAorU0Q7U0QtMjA7Sm5xYWw7MDswOzAKK1NEO1NELTA1O0thc3NhbDswOzA7MAorU0Q7U0QtNTtTaGFtbCBCYXIgYWwgR2hhemw7MDswOzAKK1NEO1NELTAyO1NoYW1sIERyZnI7MDswOzAKK1NEO1NELTA5O1NoYW1sIEt1cmR1Zm47MDswOzAKK1NEO1NELTk7U2hhcnEgYWwgSXN0aXd5YWg7MDswOzAKK1NEO1NELTI1O1Npbm5yOzA7MDswCitTRDtTRC0yO1dyYjswOzA7MAorU0Q7U0QtRTtFYXN0ZXJuIFtFYXN0ZXJuMV07MDswOzAKK1NEO1NELU47Tm9ydGhlcm4gW05vcnRoZXJuM10gOzA7MDswCitTRDtTRC1DO0NlbnRyYWw7MDswOzAKK1NFO1NFLUs7Qmxla2luZ2UgbG4gW1NFLTBdOzA7MDswCitTRTtTRS1XO0RhbGFybmFzIGxuIFtTRS0yMF07MDswOzAKK1NFO1NFLUk7R290bGFuZHMgbG4gW1NFLTA5XTswOzA7MAorU0U7U0UtWDtHdmxlYm9yZ3MgbG4gW1NFLTJdOzA7MDswCitTRTtTRS1OO0hhbGxhbmRzIGxuIFtTRS0zXTswOzA7MAorU0U7U0UtWjtKbXRsYW5kcyBsbiBbU0UtMjNdOzA7MDswCitTRTtTRS1GO0pua3BpbmdzIGxuIFtTRS0wNl07MDswOzAKK1NFO1NFLUg7S2FsbWFyIGxuIFtTRS0wOF07MDswOzAKK1NFO1NFLUc7S3Jvbm9iZXJncyBsbiBbU0UtMDddOzA7MDswCitTRTtTRS1CRDtOb3JyYm90dGVucyBsbiBbU0UtMjVdOzA7MDswCitTRTtTRS1NO1NrbmUgbG4gW1NFLTJdOzA7MDswCitTRTtTRS1BQjtTdG9ja2hvbG1zIGxuIFtTRS0wXTswOzA7MAorU0U7U0UtRDtTZGVybWFubGFuZHMgbG4gW1NFLTA0XTswOzA7MAorU0U7U0UtQztVcHBzYWxhIGxuIFtTRS0wM107MDswOzAKK1NFO1NFLVM7VnJtbGFuZHMgbG4gW1NFLTddOzA7MDswCitTRTtTRS1BQztWc3RlcmJvdHRlbnMgbG4gW1NFLTI0XTswOzA7MAorU0U7U0UtWTtWc3Rlcm5vcnJsYW5kcyBsbiBbU0UtMjJdOzA7MDswCitTRTtTRS1VO1ZzdG1hbmxhbmRzIGxuIFtTRS05XTswOzA7MAorU0U7U0UtTztWc3RyYSBHdGFsYW5kcyBsbiBbU0UtNF07MDswOzAKK1NFO1NFLVQ7cmVicm8gbG4gW1NFLThdOzA7MDswCitTRTtTRS1FO3N0ZXJndGxhbmRzIGxuIFtTRS0wNV07MDswOzAKK1NIO1NILVNIO1NhaW50IEhlbGVuYTswOzA7MGFkbWluaXN0cmF0aXZlIGFyZWEKK1NIO1NILUFDO0FzY2Vuc2lvbjswOzA7MGRlcGVuZGVuY3kKK1NIO1NILVRBO1RyaXN0YW4gZGEgQ3VuaGE7MDswOzBkZXBlbmRlbmN5CitTSztTSy1CQztCYW5za29ieXN0cmljayBrcmFqOzA7MDswCitTSztTSy1CTDtCcmF0aXNsYXZzayBrcmFqOzA7MDswCitTSztTSy1LSTtLb2ljayBrcmFqOzA7MDswCitTSztTSy1OSTtOaXRyaWFuc2t5IGtyYWo7MDswOzAKK1NLO1NLLVBWO1ByZW92c2sga3JhajswOzA7MAorU0s7U0stVEM7VHJlbmVpYW5za3kga3JhajswOzA7MAorU0s7U0stVEE7VHJuYXZzayBrcmFqOzA7MDswCitTSztTSy1aSTtpbGluc2sga3JhajswOzA7MAorU0w7U0wtVztXZXN0ZXJuIEFyZWEgKEZyZWV0b3duKSBbV2VzdGVybjNdIFtXZXN0ZXJuXTswOzA7MGFyZWEKK1NMO1NMLUU7RWFzdGVybiBbRWFzdGVybjJdOzA7MDtwcm92aW5jZQorU0w7U0wtTjtOb3J0aGVybiBbTm9ydGhlcm4yXTswOzA7cHJvdmluY2UKK1NMO1NMLVM7U291dGhlcm47MDswO3Byb3ZpbmNlCitTTjtTTi1ESztEYWthcjswOzA7MAorU047U04tREI7RGlvdXJiZWw7MDswOzAKK1NOO1NOLUZLO0ZhdGljazswOzA7MAorU047U04tS0w7S2FvbGFjazswOzA7MAorU047U04tS0Q7S29sZGE7MDswOzAKK1NOO1NOLUxHO0xvdWdhOzA7MDswCitTTjtTTi1TTDtTYWludC1Mb3VpczswOzA7MAorU047U04tVEM7VGFtYmFjb3VuZGE7MDswOzAKK1NOO1NOLVRIO1RoaWVzOzA7MDswCitTTjtTTi1aRztaaWd1aW5jaG9yOzA7MDswCitTTztTTy1BVztBd2RhbDswOzA7MAorU087U08tQks7QmFrb29sOzA7MDswCitTTztTTy1CTjtCYW5hYWRpcjswOzA7MAorU087U08tQlI7QmFyaTswOzA7MAorU087U08tQlk7QmF5OzA7MDswCitTTztTTy1HQTtHYWxndWR1dWQ7MDswOzAKK1NPO1NPLUdFO0dlZG87MDswOzAKK1NPO1NPLUhJO0hpaXJhYW47MDswOzAKK1NPO1NPLUpEO0p1YmJhZGEgRGhleGU7MDswOzAKK1NPO1NPLUpIO0p1YmJhZGEgSG9vc2U7MDswOzAKK1NPO1NPLU1VO011ZHVnOzA7MDswCitTTztTTy1OVTtOdWdhYWw7MDswOzAKK1NPO1NPLVNBO1NhbmFhZzswOzA7MAorU087U08tU0Q7U2hhYmVlbGxhaGEgRGhleGU7MDswOzAKK1NPO1NPLVNIO1NoYWJlZWxsYWhhIEhvb3NlOzA7MDswCitTTztTTy1TTztTb29sOzA7MDswCitTTztTTy1UTztUb2dkaGVlcjswOzA7MAorU087U08tV087V29xb295aSBHYWxiZWVkOzA7MDswCitTUjtTUi1CUjtCcm9rb3BvbmRvOzA7MDswCitTUjtTUi1DTTtDb21tZXdpam5lOzA7MDswCitTUjtTUi1DUjtDb3JvbmllOzA7MDswCitTUjtTUi1NQTtNYXJvd2lqbmU7MDswOzAKK1NSO1NSLU5JO05pY2tlcmllOzA7MDswCitTUjtTUi1QUjtQYXJhOzA7MDswCitTUjtTUi1QTTtQYXJhbWFyaWJvOzA7MDswCitTUjtTUi1TQTtTYXJhbWFjY2E7MDswOzAKK1NSO1NSLVNJO1NpcGFsaXdpbmk7MDswOzAKK1NSO1NSLVdBO1dhbmljYTswOzA7MAorU1Q7U1QtUDtQcm5jaXBlOzA7MDswCitTVDtTVC1TO1NvIFRvbWU7MDswOzAKK1NWO1NWLUFIO0FodWFjaGFwbjswOzA7MAorU1Y7U1YtQ0E7Q2FiYWFzOzA7MDswCitTVjtTVi1DVTtDdXNjYXRsbjswOzA7MAorU1Y7U1YtQ0g7Q2hhbGF0ZW5hbmdvOzA7MDswCitTVjtTVi1MSTtMYSBMaWJlcnRhZDswOzA7MAorU1Y7U1YtUEE7TGEgUGF6OzA7MDswCitTVjtTVi1VTjtMYSBVbmluOzA7MDswCitTVjtTVi1NTztNb3Jhem47MDswOzAKK1NWO1NWLVNNO1NhbiBNaWd1ZWw7MDswOzAKK1NWO1NWLVNTO1NhbiBTYWx2YWRvcjswOzA7MAorU1Y7U1YtU0E7U2FudGEgQW5hOzA7MDswCitTVjtTVi1TVjtTYW4gVmljZW50ZTswOzA7MAorU1Y7U1YtU087U29uc29uYXRlOzA7MDswCitTVjtTVi1VUztVc3VsdXRuOzA7MDswCitTWTtTWS1IQTtBbCBhc2FrYWg7MDswOzAKK1NZO1NZLUxBO0FsIExhZGhpcWl5YWg7MDswOzAKK1NZO1NZLVFVO0FsIFF1bmF5aXJhaDswOzA7MAorU1k7U1ktUkE7QXIgUmFxcWFoOzA7MDswCitTWTtTWS1TVTtBcyBTdXdheWQ7MDswOzAKK1NZO1NZLURSO0RhcjswOzA7MAorU1k7U1ktRFk7RGF5ciBheiBaYXdyOzA7MDswCitTWTtTWS1ESTtEaW1hc2hxOzA7MDswCitTWTtTWS1ITDthbGFiOzA7MDswCitTWTtTWS1ITTthbWg7MDswOzAKK1NZO1NZLUhJO2ltOzA7MDswCitTWTtTWS1JRDtJZGxpYjswOzA7MAorU1k7U1ktUkQ7UmYgRGltYXNocTswOzA7MAorU1k7U1ktVEE7YXJzOzA7MDswCitTWjtTWi1ISDtIaG9oaG87MDswOzAKK1NaO1NaLUxVO0x1Ym9tYm87MDswOzAKK1NaO1NaLU1BO01hbnppbmk7MDswOzAKK1NaO1NaLVNIO1NoaXNlbHdlbmk7MDswOzAKK1REO1RELUJBO0JhdGhhOzA7MDswCitURDtURC1CSTtCaWx0aW5lOzA7MDswCitURDtURC1CRVQ7Qm9ya291LUVubmVkaS1UaWJlc3RpOzA7MDswCitURDtURC1DQjtDaGFyaS1CYWd1aXJtaTswOzA7MAorVEQ7VEQtR1I7R3VlcmE7MDswOzAKK1REO1RELUtBO0thbmVtOzA7MDswCitURDtURC1MQztMYWM7MDswOzAKK1REO1RELUxPO0xvZ29uZS1PY2NpZGVudGFsOzA7MDswCitURDtURC1MUjtMb2dvbmUtT3JpZW50YWw7MDswOzAKK1REO1RELU1LO01heW8tS2ViYmk7MDswOzAKK1REO1RELU1DO01veWVuLUNoYXJpOzA7MDswCitURDtURC1PRDtPdWFkZGFpOzA7MDswCitURDtURC1TQTtTYWxhbWF0OzA7MDswCitURDtURC1UQTtUYW5kamlsZTswOzA7MAorVEc7VEctQztDZW50cmUgW0NlbnRyZTFdOzA7MDswCitURztURy1LO0thcmE7MDswOzAKK1RHO1RHLU07TWFyaXRpbWUgOzA7MDswCitURztURy1QO1BsYXRlYXV4OzA7MDswCitURztURy1TO1NhdmFubmVzIFtTYXZhbmVzXTswOzA7MAorVEg7VEgtMDtLcnVuZyBUaGVwIE1haGEgTmFraG9uIFtCYW5na29rXTswOzA7MG1ldHJvcG9saXRhbiBhZG1pbmlzdHJhdGlvbgorVEg7VEgtUztQaGF0dGhheWE7MDswOzBzcGVjaWFsIGFkbWluaXN0cmF0aXZlIGNpdHkKK1RIO1RILTM3O0FtbmF0IENoYXJvZW47MDswO3Byb3ZpbmNlCitUSDtUSC01O0FuZyBUaG9uZzswOzA7cHJvdmluY2UKK1RIO1RILTM7QnVyaSBSYW07MDswO3Byb3ZpbmNlCitUSDtUSC0yNDtDaGFjaG9lbmdzYW87MDswO3Byb3ZpbmNlCitUSDtUSC04O0NoYWkgTmF0OzA7MDtwcm92aW5jZQorVEg7VEgtMzY7Q2hhaXlhcGh1bTswOzA7cHJvdmluY2UKK1RIO1RILTIyO0NoYW50aGFidXJpOzA7MDtwcm92aW5jZQorVEg7VEgtNTA7Q2hpYW5nIE1haTswOzA7cHJvdmluY2UKK1RIO1RILTU3O0NoaWFuZyBSYWk7MDswO3Byb3ZpbmNlCitUSDtUSC0yMDtDaG9uIEJ1cmk7MDswO3Byb3ZpbmNlCitUSDtUSC04NjtDaHVtcGhvbjswOzA7cHJvdmluY2UKK1RIO1RILTQ2O0thbGFzaW47MDswO3Byb3ZpbmNlCitUSDtUSC02MjtLYW1waGFlbmcgUGhldDswOzA7cHJvdmluY2UKK1RIO1RILTc7S2FuY2hhbmFidXJpOzA7MDtwcm92aW5jZQorVEg7VEgtNDA7S2hvbiBLYWVuOzA7MDtwcm92aW5jZQorVEg7VEgtODtLcmFiaTswOzA7cHJvdmluY2UKK1RIO1RILTUyO0xhbXBhbmc7MDswO3Byb3ZpbmNlCitUSDtUSC01O0xhbXBodW47MDswO3Byb3ZpbmNlCitUSDtUSC00MjtMb2VpOzA7MDtwcm92aW5jZQorVEg7VEgtNjtMb3AgQnVyaTswOzA7cHJvdmluY2UKK1RIO1RILTU4O01hZSBIb25nIFNvbjswOzA7cHJvdmluY2UKK1RIO1RILTQ0O01haGEgU2FyYWtoYW07MDswO3Byb3ZpbmNlCitUSDtUSC00OTtNdWtkYWhhbjswOzA7cHJvdmluY2UKK1RIO1RILTI2O05ha2hvbiBOYXlvazswOzA7cHJvdmluY2UKK1RIO1RILTczO05ha2hvbiBQYXRob207MDswO3Byb3ZpbmNlCitUSDtUSC00ODtOYWtob24gUGhhbm9tOzA7MDtwcm92aW5jZQorVEg7VEgtMzA7TmFraG9uIFJhdGNoYXNpbWE7MDswO3Byb3ZpbmNlCitUSDtUSC02MDtOYWtob24gU2F3YW47MDswO3Byb3ZpbmNlCitUSDtUSC04MDtOYWtob24gU2kgVGhhbW1hcmF0OzA7MDtwcm92aW5jZQorVEg7VEgtNTU7TmFuOzA7MDtwcm92aW5jZQorVEg7VEgtOTY7TmFyYXRoaXdhdDswOzA7cHJvdmluY2UKK1RIO1RILTM5O05vbmcgQnVhIExhbSBQaHU7MDswO3Byb3ZpbmNlCitUSDtUSC00MztOb25nIEtoYWk7MDswO3Byb3ZpbmNlCitUSDtUSC0yO05vbnRoYWJ1cmk7MDswO3Byb3ZpbmNlCitUSDtUSC0zO1BhdGh1bSBUaGFuaTswOzA7cHJvdmluY2UKK1RIO1RILTk0O1BhdHRhbmk7MDswO3Byb3ZpbmNlCitUSDtUSC04MjtQaGFuZ25nYTswOzA7cHJvdmluY2UKK1RIO1RILTkzO1BoYXR0aGFsdW5nOzA7MDtwcm92aW5jZQorVEg7VEgtNTY7UGhheWFvOzA7MDtwcm92aW5jZQorVEg7VEgtNjc7UGhldGNoYWJ1bjswOzA7cHJvdmluY2UKK1RIO1RILTc2O1BoZXRjaGFidXJpOzA7MDtwcm92aW5jZQorVEg7VEgtNjY7UGhpY2hpdDswOzA7cHJvdmluY2UKK1RIO1RILTY1O1BoaXRzYW51bG9rOzA7MDtwcm92aW5jZQorVEg7VEgtNTQ7UGhyYWU7MDswO3Byb3ZpbmNlCitUSDtUSC00O1BocmEgTmFraG9uIFNpIEF5dXR0aGF5YTswOzA7cHJvdmluY2UKK1RIO1RILTgzO1BodWtldDswOzA7cHJvdmluY2UKK1RIO1RILTI1O1ByYWNoaW4gQnVyaTswOzA7cHJvdmluY2UKK1RIO1RILTc3O1ByYWNodWFwIEtoaXJpIEtoYW47MDswO3Byb3ZpbmNlCitUSDtUSC04NTtSYW5vbmc7MDswO3Byb3ZpbmNlCitUSDtUSC03MDtSYXRjaGFidXJpOzA7MDtwcm92aW5jZQorVEg7VEgtMjtSYXlvbmc7MDswO3Byb3ZpbmNlCitUSDtUSC00NTtSb2kgRXQ7MDswO3Byb3ZpbmNlCitUSDtUSC0yNztTYSBLYWVvOzA7MDtwcm92aW5jZQorVEg7VEgtNDc7U2Frb24gTmFraG9uOzA7MDtwcm92aW5jZQorVEg7VEgtODE7U2FtdXQgUHJha2FuOzA7MDtwcm92aW5jZQorVEg7VEgtNzQ7U2FtdXQgU2FraG9uOzA7MDtwcm92aW5jZQorVEg7VEgtNzU7U2FtdXQgU29uZ2tocmFtOzA7MDtwcm92aW5jZQorVEg7VEgtNzk7U2FyYWJ1cmk7MDswO3Byb3ZpbmNlCitUSDtUSC05O1NhdHVuOzA7MDtwcm92aW5jZQorVEg7VEgtNztTaW5nIEJ1cmk7MDswO3Byb3ZpbmNlCitUSDtUSC0zMztTaSBTYSBLZXQ7MDswO3Byb3ZpbmNlCitUSDtUSC05MDtTb25na2hsYTswOzA7cHJvdmluY2UKK1RIO1RILTY0O1N1a2hvdGhhaTswOzA7cHJvdmluY2UKK1RIO1RILTcyO1N1cGhhbiBCdXJpOzA7MDtwcm92aW5jZQorVEg7VEgtODQ7U3VyYXQgVGhhbmk7MDswO3Byb3ZpbmNlCitUSDtUSC0zMjtTdXJpbjswOzA7cHJvdmluY2UKK1RIO1RILTYzO1RhazswOzA7cHJvdmluY2UKK1RIO1RILTkyO1RyYW5nOzA7MDtwcm92aW5jZQorVEg7VEgtMjM7VHJhdDswOzA7cHJvdmluY2UKK1RIO1RILTM0O1Vib24gUmF0Y2hhdGhhbmk7MDswO3Byb3ZpbmNlCitUSDtUSC00O1Vkb24gVGhhbmk7MDswO3Byb3ZpbmNlCitUSDtUSC02O1V0aGFpIFRoYW5pOzA7MDtwcm92aW5jZQorVEg7VEgtNTM7VXR0YXJhZGl0OzA7MDtwcm92aW5jZQorVEg7VEgtOTU7WWFsYTswOzA7cHJvdmluY2UKK1RIO1RILTM1O1lhc290aG9uOzA7MDtwcm92aW5jZQorVEo7VEotS1Q7S2hhdGxvbjswOzA7cmVnaW9uCitUSjtUSi1TVTtTdWdoZDswOzA7cmVnaW9uCitUSjtUSi1HQjtHb3Juby1CYWRha2hzaGFuOzA7MDthdXRvbm9tb3VzIHJlZ2lvbgorVE07VE0tQTtBaGFsOzA7MDswCitUTTtUTS1CO0JhbGthbjswOzA7MAorVE07VE0tRDtEYW9ndXo7MDswOzAKK1RNO1RNLUw7TGViYXA7MDswOzAKK1RNO1RNLU07TWFyeTswOzA7MAorVE47VE4tMztCZWphOzA7MDswCitUTjtUTi0zO0JlbiBBcm91czswOzA7MAorVE47VE4tMjM7Qml6ZXJ0ZTswOzA7MAorVE47VE4tODtHYWJlczswOzA7MAorVE47VE4tNztHYWZzYTswOzA7MAorVE47VE4tMzI7SmVuZG91YmE7MDswOzAKK1ROO1ROLTQ7S2Fpcm91YW47MDswOzAKK1ROO1ROLTQyO0thc3NlcmluZTswOzA7MAorVE47VE4tNzM7S2ViaWxpOzA7MDswCitUTjtUTi0yO0xBcmlhbmE7MDswOzAKK1ROO1ROLTMzO0xlIEtlZjswOzA7MAorVE47VE4tNTM7TWFoZGlhOzA7MDswCitUTjtUTi04MjtNZWRlbmluZTswOzA7MAorVE47VE4tNTI7TW9uYXN0aXI7MDswOzAKK1ROO1ROLTI7TmFiZXVsOzA7MDswCitUTjtUTi02O1NmYXg7MDswOzAKK1ROO1ROLTQzO1NpZGkgQm91emlkOzA7MDswCitUTjtUTi0zNDtTaWxpYW5hOzA7MDswCitUTjtUTi01O1NvdXNzZTswOzA7MAorVE47VE4tODM7VGF0YW91aW5lOzA7MDswCitUTjtUTi03MjtUb3pldXI7MDswOzAKK1ROO1ROLTEwO1R1bmlzOzA7MDswCitUTjtUTi0yMjtaYWdob3VhbjswOzA7MAorVFI7VFItMDtBZGFuYTswOzA7MAorVFI7VFItMDI7QWRpeWFtYW47MDswOzAKK1RSO1RSLTAzO0FmeW9uOzA7MDswCitUUjtUUi0wNDtBZ3JpOzA7MDswCitUUjtUUi02ODtBa3NhcmF5OzA7MDswCitUUjtUUi0wNTtBbWFzeWE7MDswOzAKK1RSO1RSLTA2O0Fua2FyYTswOzA7MAorVFI7VFItMDc7QW50YWx5YTswOzA7MAorVFI7VFItNzU7QXJkYWhhbjswOzA7MAorVFI7VFItMDg7QXJ0dmluOzA7MDswCitUUjtUUi0wOTtBeWRpbjswOzA7MAorVFI7VFItMTA7QmFsaWtlc2lyOzA7MDswCitUUjtUUi03NDtCYXJ0bjswOzA7MAorVFI7VFItNzI7QmF0bWFuOzA7MDswCitUUjtUUi02OTtCYXlidXJ0OzA7MDswCitUUjtUUi04NztCaWxlY2lrOzA7MDswCitUUjtUUi0yO0JpbmdvbDswOzA7MAorVFI7VFItODM7Qml0bGlzOzA7MDswCitUUjtUUi00O0JvbHU7MDswOzAKK1RSO1RSLTg1O0J1cmR1cjswOzA7MAorVFI7VFItOTA7QnVyc2E7MDswOzAKK1RSO1RSLTc7Q2FuYWtrYWxlOzA7MDswCitUUjtUUi04O0Nhbmtpcmk7MDswOzAKK1RSO1RSLTk7Q29ydW07MDswOzAKK1RSO1RSLTIwO0Rlbml6bGk7MDswOzAKK1RSO1RSLTgyO0RpeWFyYmFraXI7MDswOzAKK1RSO1RSLTg7RPx6Y2U7MDswOzAKK1RSO1RSLTIyO0VkaXJuZTswOzA7MAorVFI7VFItMjM7RWxhemlnOzA7MDswCitUUjtUUi0yNDtFcnppbmNhbjswOzA7MAorVFI7VFItMjU7RXJ6dXJ1bTswOzA7MAorVFI7VFItMjY7RXNraXNlaGlyOzA7MDswCitUUjtUUi0yNztHYXppYW50ZXA7MDswOzAKK1RSO1RSLTI4O0dpcmVzdW47MDswOzAKK1RSO1RSLTI5O0d1bXVzaGFuZTswOzA7MAorVFI7VFItMzA7SGFra2FyaTswOzA7MAorVFI7VFItMztIYXRheTswOzA7MAorVFI7VFItNzY7SWRyOzA7MDswCitUUjtUUi0zMjtJc3BhcnRhOzA7MDswCitUUjtUUi0zMztJY2VsOzA7MDswCitUUjtUUi0zNDtJc3RhbmJ1bDswOzA7MAorVFI7VFItMzU7SXptaXI7MDswOzAKK1RSO1RSLTQ2O0thaHJhbWFubWFyYTswOzA7MAorVFI7VFItNzg7S2FyYWL8azswOzA7MAorVFI7VFItNzA7S2FyYW1hbjswOzA7MAorVFI7VFItMzY7S2FyczswOzA7MAorVFI7VFItMzc7S2FzdGFtb251OzA7MDswCitUUjtUUi0zODtLYXlzZXJpOzA7MDswCitUUjtUUi04ODtLaW5ra2FsZTswOzA7MAorVFI7VFItMzk7S2lya2xhcmVsaTswOzA7MAorVFI7VFItNDA7S2lyc2VoaXI7MDswOzAKK1RSO1RSLTc5O0tpbGlzOzA7MDswCitUUjtUUi04NDtLb2NhZWxpOzA7MDswCitUUjtUUi00MjtLb255YTswOzA7MAorVFI7VFItNDM7S3V0YWh5YTswOzA7MAorVFI7VFItNDQ7TWFsYXR5YTswOzA7MAorVFI7VFItNDU7TWFuaXNhOzA7MDswCitUUjtUUi00NztNYXJkaW47MDswOzAKK1RSO1RSLTQ4O011Z2xhOzA7MDswCitUUjtUUi00OTtNdXM7MDswOzAKK1RSO1RSLTUwO05ldnNlaGlyOzA7MDswCitUUjtUUi01O05pZ2RlOzA7MDswCitUUjtUUi01MjtPcmR1OzA7MDswCitUUjtUUi04MDtPc21hbml5ZTswOzA7MAorVFI7VFItNTM7Uml6ZTswOzA7MAorVFI7VFItNTQ7U2FrYXJ5YTswOzA7MAorVFI7VFItNTU7U2Ftc3VuOzA7MDswCitUUjtUUi01NjtTaWlydDswOzA7MAorVFI7VFItNTc7U2lub3A7MDswOzAKK1RSO1RSLTU4O1NpdmFzOzA7MDswCitUUjtUUi02MztTYW5saXVyZmE7MDswOzAKK1RSO1RSLTczO1Npcm5hazswOzA7MAorVFI7VFItNTk7VGVraXJkYWc7MDswOzAKK1RSO1RSLTYwO1Rva2F0OzA7MDswCitUUjtUUi02O1RyYWJ6b247MDswOzAKK1RSO1RSLTYyO1R1bmNlbGk7MDswOzAKK1RSO1RSLTY0O1VzYWs7MDswOzAKK1RSO1RSLTY1O1ZhbjswOzA7MAorVFI7VFItNzc7WWFsb3ZhOzA7MDswCitUUjtUUi02NjtZb3pnYXQ7MDswOzAKK1RSO1RSLTY3O1ppbmd1bGRhazswOzA7MAorVFQ7VFQtQ1RUO0NvdXZhLVRhYmFxdWl0ZS1UYWxwYXJvOzA7MDtyZWdpb24KK1RUO1RULURNTjtEaWVnbyBNYXJ0aW47MDswO3JlZ2lvbgorVFQ7VFQtRVRPO0Vhc3Rlcm4gVG9iYWdvOzA7MDtyZWdpb24KK1RUO1RULVBFRDtQZW5hbC1EZWJlOzA7MDtyZWdpb24KK1RUO1RULVBSVDtQcmluY2VzIFRvd247MDswO3JlZ2lvbgorVFQ7VFQtUkNNO1JpbyBDbGFyby1NYXlhcm87MDswO3JlZ2lvbgorVFQ7VFQtU0dFO1NhbmdyZSBHcmFuZGU7MDswO3JlZ2lvbgorVFQ7VFQtU0pMO1NhbiBKdWFuLUxhdmVudGlsbGU7MDswO3JlZ2lvbgorVFQ7VFQtU0lQO1NpcGFyaWE7MDswO3JlZ2lvbgorVFQ7VFQtVFVQO1R1bmFwdW5hLVBpYXJjbzswOzA7cmVnaW9uCitUVDtUVC1XVE87V2VzdGVybiBUb2JhZ287MDswO3JlZ2lvbgorVFQ7VFQtQVJJO0FyaW1hOzA7MDswbXVuaWNpcGFsaXR5CitUVDtUVC1DSEE7Q2hhZ3VhbmFzOzA7MDswbXVuaWNpcGFsaXR5CitUVDtUVC1QVEY7UG9pbnQgRm9ydGluOzA7MDswbXVuaWNpcGFsaXR5CitUVDtUVC1QT1M7UG9ydCBvZiBTcGFpbjswOzA7MG11bmljaXBhbGl0eQorVFQ7VFQtU0ZPO1NhbiBGZXJuYW5kbzswOzA7MG11bmljaXBhbGl0eQorVFc7VFctS0hIO0thb2hzaXVuZzswOzA7MHNwZWNpYWwgbXVuaWNpcGFsaXR5CitUVztUVy1UUEU7VGFpcGVpOzA7MDswc3BlY2lhbCBtdW5pY2lwYWxpdHkKK1RXO1RXLUNZSTtDaGlheWk7MDswOzBtdW5pY2lwYWxpdHkKK1RXO1RXLUhTWjtIc2luY2h1OzA7MDswbXVuaWNpcGFsaXR5CitUVztUVy1LRUU7S2VlbHVuZzswOzA7MG11bmljaXBhbGl0eQorVFc7VFctVFhHO1RhaWNodW5nOzA7MDswbXVuaWNpcGFsaXR5CitUVztUVy1UTk47VGFpbmFuOzA7MDswbXVuaWNpcGFsaXR5CitUVztUVy1DSEE7Q2hhbmdodWE7MDswOzA7ZGlzdHJpY3QKK1RXO1RXLUNZUTtDaGlheWk7MDswOzA7ZGlzdHJpY3QKK1RXO1RXLUhTUTtIc2luY2h1OzA7MDswO2Rpc3RyaWN0CitUVztUVy1IVUE7SHVhbGllbjswOzA7MDtkaXN0cmljdAorVFc7VFctSUxBO0lsYW47MDswOzA7ZGlzdHJpY3QKK1RXO1RXLUtIUTtLYW9oc2l1bmc7MDswOzA7ZGlzdHJpY3QKK1RXO1RXLU1JQTtNaWFvbGk7MDswOzA7ZGlzdHJpY3QKK1RXO1RXLU5BTjtOYW50b3U7MDswOzA7ZGlzdHJpY3QKK1RXO1RXLVBFTjtQZW5naHU7MDswOzA7ZGlzdHJpY3QKK1RXO1RXLVBJRjtQaW5ndHVuZzswOzA7MDtkaXN0cmljdAorVFc7VFctVFhRO1RhaWNodW5nOzA7MDswO2Rpc3RyaWN0CitUVztUVy1UTlE7VGFpbmFuOzA7MDswO2Rpc3RyaWN0CitUVztUVy1UUFE7VGFpcGVpOzA7MDswO2Rpc3RyaWN0CitUVztUVy1UVFQ7VGFpdHVuZzswOzA7MDtkaXN0cmljdAorVFc7VFctVEFPO1Rhb3l1YW47MDswOzA7ZGlzdHJpY3QKK1RXO1RXLVlVTjtZdW5saW47MDswOzA7ZGlzdHJpY3QKK1RaO1RaLTA7QXJ1c2hhOzA7MDswCitUWjtUWi0wMjtEYXIgZXMgU2FsYWFtOzA7MDswCitUWjtUWi0wMztEb2RvbWE7MDswOzAKK1RaO1RaLTA0O0lyaW5nYTswOzA7MAorVFo7VFotMDU7S2FnZXJhOzA7MDswCitUWjtUWi0wNjtLYXNrYXppbmkgUGVtYmE7UGVtYmEgTm9ydGg7MDswCitUWjtUWi0wNztLYXNrYXppbmkgVW5ndWphO1phbnppYmFyIE5vcnRoOzA7MAorVFo7VFotMDg7S2lnb21hOzA7MDswCitUWjtUWi0wOTtLaWxpbWFuamFybzswOzA7MAorVFo7VFotMTA7S3VzaW5pIFBlbWJhO1BlbWJhIFNvdXRoOzA7MDsKK1RaO1RaLTExO0t1c2luaSBVbmd1amE7WmFuemliYXIgU291dGg7MDswCitUWjtUWi0yO0xpbmRpOzA7MDswCitUWjtUWi0zO01hcmE7MDswOzAKK1RaO1RaLTQ7TWJleWE7MDswOzAKK1RaO1RaLTU7TWppbmkgTWFnaGFyaWJpO1phbnppYmFyIFdlc3Q7MDswCitUWjtUWi02O01vcm9nb3JvOzA7MDswCitUWjtUWi03O010d2FyYTswOzA7MAorVFo7VFotODtNd2FuemE7MDswOzAKK1RaO1RaLTk7UHdhbmk7Q29hc3Q7MDswCitUWjtUWi0yMDtSdWt3YTswOzA7MAorVFo7VFotMTI7UnV2dW1hOzA7MDswCitUWjtUWi0yMjtTaGlueWFuZ2E7MDswOzAKK1RaO1RaLTIzO1NpbmdpZGE7MDswOzAKK1RaO1RaLTI0O1RhYm9yYTswOzA7MAorVFo7VFotMjU7VGFuZ2E7MDswOzAKK1VBO1VBLTc7Q2hlcmthc2thIE9ibGFzdDswOzA7cmVnaW9uCitVQTtVQS03NDtDaGVybmloaXZza2EgT2JsYXN0OzA7MDtyZWdpb24KK1VBO1VBLTc3O0NoZXJuaXZldHNrYSBPYmxhc3Q7MDswO3JlZ2lvbgorVUE7VUEtMjtEbmlwcm9wZXRyb3Zza2EgT2JsYXN0OzA7MDtyZWdpb24KK1VBO1VBLTQ7RG9uZXRza2EgT2JsYXN0OzA7MDtyZWdpb24KK1VBO1VBLTI2O0l2YW5vLUZyYW5raXZza2EgT2JsYXN0OzA7MDtyZWdpb24KK1VBO1VBLTYzO0toYXJraXZza2EgT2JsYXN0OzA7MDtyZWdpb24KK1VBO1VBLTY1O0toZXJzb25za2EgT2JsYXN0OzA7MDtyZWdpb24KK1VBO1VBLTY4O0tobWVsbnl0c2thIE9ibGFzdDswOzA7cmVnaW9uCitVQTtVQS0zNTtLaXJvdm9ocmFkc2thIE9ibGFzdDswOzA7cmVnaW9uCitVQTtVQS0zMjtLeWl2c2thIE9ibGFzdDswOzA7cmVnaW9uCitVQTtVQS0wOTtMdWhhbnNrYSBPYmxhc3Q7MDswO3JlZ2lvbgorVUE7VUEtNDY7THZpdnNrYSBPYmxhc3Q7MDswO3JlZ2lvbgorVUE7VUEtNDg7TXlrb2xhaXZza2EgT2JsYXN0OzA7MDtyZWdpb24KK1VBO1VBLTU7T2Rlc2thIE9ibGFzdDswOzA7cmVnaW9uCitVQTtVQS01MztQb2x0YXZza2EgT2JsYXN0OzA7MDtyZWdpb24KK1VBO1VBLTU2O1Jpdm5lbnNrYSBPYmxhc3Q7MDswO3JlZ2lvbgorVUE7VUEtNTk7U3Vtc2thIE9ibGFzdDswOzA7cmVnaW9uCitVQTtVQS02O1Rlcm5vcGlsc2thIE9ibGFzdDswOzA7cmVnaW9uCitVQTtVQS0wNTtWaW5ueXRza2EgT2JsYXN0OzA7MDtyZWdpb24KK1VBO1VBLTA3O1ZvbHluc2thIE9ibGFzdDswOzA7cmVnaW9uCitVQTtVQS0yO1pha2FycGF0c2thIE9ibGFzdDswOzA7cmVnaW9uCitVQTtVQS0yMztaYXBvcml6a2EgT2JsYXN0OzA7MDtyZWdpb24KK1VBO1VBLTg7Wmh5dG9teXJza2EgT2JsYXN0OzA7MDtyZWdpb24KK1VBO1VBLTQzO1Jlc3B1Ymxpa2EgS3J5bTswOzA7MHJlcHVibGljCitVQTtVQS0zMDtLeWl2OzA7MDswO2NpdHkKK1VBO1VBLTQwO1NldmFzdG9wb2w7MDswOzA7Y2l0eQorVUc7VUctMzAyO0FwYWM7MDswO04KK1VHO1VHLTMwMztBcnVhOzA7MDtOCitVRztVRy00MDtCdW5kaWJ1Z3lvOzA7MDtXCitVRztVRy00MDI7QnVzaGVueWk7MDswO1cKK1VHO1VHLTMwNDtHdWx1OzA7MDtOOworVUc7VUctNDAzO0hvaW1hOzA7MDtXOworVUc7VUctMjAzO0lnYW5nYTswOzA7RTsKK1VHO1VHLTIwNDtKaW5qYTswOzA7RTsKK1VHO1VHLTQwNDtLYWJhbGU7MDswO1c7CitVRztVRy00MDU7S2FiYXJvbGU7MDswO1cKK1VHO1VHLTA7S2FsYW5nYWxhOzA7MDtDOworVUc7VUctMDI7S2FtcGFsYTswOzA7QzsKK1VHO1VHLTIwNTtLYW11bGk7MDswO0U7CitVRztVRy0yMDY7S2FwY2hvcndhOzA7MDtFOworVUc7VUctNDA2O0thc2VzZTswOzA7VworVUc7VUctNDA3O0tpYmFhbGU7MDswO1cKK1VHO1VHLTAzO0tpYm9nYTswOzA7QzsKK1VHO1VHLTQwODtLaXNvcm87MDswO1cKK1VHO1VHLTMwNTtLaXRndW07MDswO047CitVRztVRy0zMDY7S290aWRvOzA7MDtOOworVUc7VUctMjA4O0t1bWk7MDswO0U7CitVRztVRy0zMDc7TGlyYTswOzA7TjsKK1VHO1VHLTA0O0x1d2VybzswOzA7QzsKK1VHO1VHLTA1O01hc2FrYTswOzA7QzsKK1VHO1VHLTQwOTtNYXNpbmRpOzA7MDtXCitVRztVRy0yMDk7TWJhbGU7MDswO0U7CitVRztVRy00MTtNYmFyYXJhOzA7MDtXCitVRztVRy0zMDg7TW9yb3RvOzA7MDtOOworVUc7VUctMzA5O01veW87MDswO047CitVRztVRy0wNjtNcGlnaTswOzA7QzsKK1VHO1VHLTA3O011YmVuZGU7MDswO0M7CitVRztVRy0wODtNdWtvbm87MDswO0M7CitVRztVRy0zMTtOZWJiaTswOzA7TjsKK1VHO1VHLTQ7TnR1bmdhbW87MDswO1cKK1VHO1VHLTIwO1BhbGxpc2E7MDswO0U7CitVRztVRy0xMDtSYWthaTswOzA7QzsKK1VHO1VHLTQyO1J1a3VuZ2lyaTswOzA7VworVUc7VUctNTI7U29yb3RpOzA7MDtFOworVUc7VUctMjI7VG9yb3JvOzA7MDtFOworVU07VU0tODtCYWtlciBJc2xhbmQ7MDswOzAKK1VNO1VNLTg0O0hvd2xhbmQgSXNsYW5kOzA7MDswCitVTTtVTS04NjtKYXJ2aXMgSXNsYW5kOzA7MDswCitVTTtVTS02NztKb2huc3RvbiBBdG9sbDswOzA7MAorVU07VU0tODk7S2luZ21hbiBSZWVmOzA7MDswCitVTTtVTS03O01pZHdheSBJc2xhbmRzOzA7MDswCitVTTtVTS03NjtOYXZhc3NhIElzbGFuZDswOzA7MAorVU07VU0tOTU7UGFsbXlyYSBBdG9sbDswOzA7MAorVU07VU0tNzk7V2FrZSBJc2xhbmQ7MDswOzAKKyMgVVMgR09FUyBIRVJFCitVWTtVWS1BUjtBcnRpZ2FzOzA7MDswCitVWTtVWS1DQTtDYW5lbG9uZXM7MDswOzAKK1VZO1VZLUNMO0NlcnJvIExhcmdvOzA7MDswCitVWTtVWS1DTztDb2xvbmlhOzA7MDswCitVWTtVWS1EVTtEdXJhem5vOzA7MDswCitVWTtVWS1GUztGbG9yZXM7MDswOzAKK1VZO1VZLUZEO0Zsb3JpZGE7MDswOzAKK1VZO1VZLUxBO0xhdmFsbGVqYTswOzA7MAorVVk7VVktTUE7TWFsZG9uYWRvOzA7MDswCitVWTtVWS1NTztNb250ZXZpZGVvOzA7MDswCitVWTtVWS1QQTtQYXlzYW5kOzA7MDswCitVWTtVWS1STjtSbyBOZWdybzswOzA7MAorVVk7VVktUlY7Uml2ZXJhOzA7MDswCitVWTtVWS1STztSb2NoYTswOzA7MAorVVk7VVktU0E7U2FsdG87MDswOzAKK1VZO1VZLVNKO1NhbiBKb3NlOzA7MDswCitVWTtVWS1TTztTb3JpYW5vOzA7MDswCitVWTtVWS1UQTtUYWN1YXJlbWI7MDswOzAKK1VZO1VZLVRUO1RyZWludGEgeSBUcmVzOzA7MDswCitVWjtVWi1RUjtLYXJha2FscGFrIFtRb3JhcWFscG9nkWlzdG9uIFJlc3B1Ymxpa2FzaV07MDswOzByZXB1YmxpYworVVo7VVotQU47QW5kaXpoYW47MDswO3JlZ2lvbgorVVo7VVotQlU7QnVraGFyYTswOzA7cmVnaW9uCitVWjtVWi1GQTtGZXJnYW5hOzA7MDtyZWdpb24KK1VaO1VaLUpJO0ppenpheDswOzA7cmVnaW9uCitVWjtVWi1ORztOYW1hbmdhbjswOzA7cmVnaW9uCitVWjtVWi1OVztOYXZvaXk7MDswO3JlZ2lvbgorVVo7VVotUUE7S2FzaGthZGFyeWEgW1Fhc2hxYWRhcnlvXTswOzA7cmVnaW9uCitVWjtVWi1TQTtTYW1hcmthbmQgW1NhbWFycWFuZF07MDswO3JlZ2lvbgorVVo7VVotU0k7U3lyZGFyeWEgW1NpcmRhcnlvXTswOzA7cmVnaW9uCitVWjtVWi1TVTtTdXJraGFuZGFyeWEgW1N1cnhvbmRhcnlvXTswOzA7cmVnaW9uCitVWjtVWi1UTztUYXNoa2VudCBPYmxhc3QgW1Rvc2hrZW50XTswOzA7cmVnaW9uCitVWjtVWi1YTztLaG9yZXptIFtYb3Jhem1dOzA7MDtyZWdpb24KK1ZFO1ZFLUE7RGlzdHJpdG8gRmVkZXJhbDswOzA7MDtmZWRlcmFsIGRpc3RyaWN0CitWRTtWRS1CO0Fuem90ZWd1aTswOzA7MHN0YXRlCitWRTtWRS1DO0FwdXJlOzA7MDswc3RhdGUKK1ZFO1ZFLUQ7QXJhZ3VhOzA7MDswc3RhdGUKK1ZFO1ZFLUU7QmFyaW5hczswOzA7MHN0YXRlCitWRTtWRS1GO0JvbHZhcjswOzA7MHN0YXRlCitWRTtWRS1HO0NhcmFib2JvOzA7MDswc3RhdGUKK1ZFO1ZFLUg7Q29qZWRlczswOzA7MHN0YXRlCitWRTtWRS1JO0ZhbGNuOzA7MDswc3RhdGUKK1ZFO1ZFLUo7R3VyaWNvOzA7MDswc3RhdGUKK1ZFO1ZFLUs7TGFyYTswOzA7MHN0YXRlCitWRTtWRS1MO01lcmlkYTswOzA7MHN0YXRlCitWRTtWRS1NO01pcmFuZGE7MDswOzBzdGF0ZQorVkU7VkUtTjtNb25hZ2FzOzA7MDswc3RhdGUKK1ZFO1ZFLU87TnVldmEgRXNwYXJ0YTswOzA7MHN0YXRlCitWRTtWRS1QO1BvcnR1Z3Vlc2E7MDswOzBzdGF0ZQorVkU7VkUtUjtTdWNyZTswOzA7MHN0YXRlCitWRTtWRS1TO1RjaGlyYTswOzA7MHN0YXRlCitWRTtWRS1UO1RydWppbGxvOzA7MDswc3RhdGUKK1ZFO1ZFLVU7WWFyYWN1eTswOzA7MHN0YXRlCitWRTtWRS1WO1p1bGlhOzA7MDswc3RhdGUKK1ZFO1ZFLVo7QW1hem9uYXM7MDswOzBzdGF0ZQorVkU7VkUtWTtEZWx0YSBBbWFjdXJvOzA7MDswc3RhdGUKK1ZFO1ZFLVc7RGVwZW5kZW5jaWFzIEZlZGVyYWxlczswOzA7MDtmZWRlcmFsIGRlcGVuZGVuY3kKK1ZOO1ZOLTQ0O0FuIEdpYW5nOzA7MDswCitWTjtWTi00MztCYSBSaWEgLSBWdW5nIFRhdTswOzA7MAorVk47Vk4tNTM7QmFjIENhbjswOzA7MAorVk47Vk4tNTQ7QmFjIEdpYW5nOzA7MDswCitWTjtWTi01NTtCYWMgTGlldTswOzA7MAorVk47Vk4tNTY7QmFjIE5pbmg7MDswOzAKK1ZOO1ZOLTUwO0JlbiBUcmU7MDswOzAKK1ZOO1ZOLTM7QmluaCBEaW5oOzA7MDswCitWTjtWTi01NztCaW5oIER1b25nOzA7MDswCitWTjtWTi01ODtCaW5oIFBodW9jOzA7MDswCitWTjtWTi00MDtCaW5oIFRodWFuOzA7MDswCitWTjtWTi01OTtDYSBNYXU7MDswOzAKK1ZOO1ZOLTQ4O0NhbiBUaG87MDswOzAKK1ZOO1ZOLTA0O0NhbyBCYW5nOzA7MDswCitWTjtWTi02MDtEYSBOYW5nLCB0aGFuaCBwaG87MDswOzAKK1ZOO1ZOLTMzO0RhYyBMYWM7MDswOzAKK1ZOO1ZOLTM5O0RvbmcgTmFpOzA7MDswCitWTjtWTi00NTtEb25nIFRoYXA7MDswOzAKK1ZOO1ZOLTMwO0dpYSBMYWk7MDswOzAKK1ZOO1ZOLTAzO0hhIEdpYW5nOzA7MDswCitWTjtWTi02MztIYSBOYW07MDswOzAKK1ZOO1ZOLTY0O0hhIE5vaSwgdGh1IGRvOzA7MDswCitWTjtWTi02NTtIYSBUYXk7MDswOzAKK1ZOO1ZOLTIzO0hhIFRpbmg7MDswOzAKK1ZOO1ZOLTY7SGFpIER1b25nOzA7MDswCitWTjtWTi02MjtIYWkgUGhvbmcsIHRoYW5oIHBobzswOzA7MAorVk47Vk4tNDtIb2EgQmluaDswOzA7MAorVk47Vk4tNjY7SG8gQ2hpIE1pbmgsIHRoYW5oIHBobyBbU2FpIEdvbl07MDswOzAKK1ZOO1ZOLTY3O0h1bmcgWWVuOzA7MDswCitWTjtWTi0zNDtLaGFuaCBIb2E7MDswOzAKK1ZOO1ZOLTQ3O0tpZW4gR2lhbmc7MDswOzAKK1ZOO1ZOLTI4O0tvbiBUdW07MDswOzAKK1ZOO1ZOLTA7TGFpIENoYXU7MDswOzAKK1ZOO1ZOLTM1O0xhbSBEb25nOzA7MDswCitWTjtWTi0wOTtMYW5nIFNvbjswOzA7MAorVk47Vk4tMDI7TGFvIENhaTswOzA7MAorVk47Vk4tNDE7TG9uZyBBbjswOzA7MAorVk47Vk4tNzQ7TmFtIERpbmg7MDswOzAKK1ZOO1ZOLTIyO05naGUgQW47MDswOzAKK1ZOO1ZOLTg7TmluaCBCaW5oOzA7MDswCitWTjtWTi0zNjtOaW5oIFRodWFuOzA7MDswCitWTjtWTi02ODtQaHUgVGhvOzA7MDswCitWTjtWTi0zMjtQaHUgWWVuOzA7MDswCitWTjtWTi0yNDtRdWFuZyBCaW5oOzA7MDswCitWTjtWTi0yNztRdWFuZyBOYW07MDswOzAKK1ZOO1ZOLTI5O1F1YW5nIE5nYWk7MDswOzAKK1ZOO1ZOLTMxO1F1YW5nIE5pbmg7MDswOzAKK1ZOO1ZOLTI1O1F1YW5nIFRyaTswOzA7MAorVk47Vk4tNTI7U29jIFRyYW5nOzA7MDswCitWTjtWTi0wNTtTb24gTGE7MDswOzAKK1ZOO1ZOLTM3O1RheSBOaW5oOzA7MDswCitWTjtWTi0yMDtUaGFpIEJpbmg7MDswOzAKK1ZOO1ZOLTY5O1RoYWkgTmd1eWVuOzA7MDswCitWTjtWTi0yO1RoYW5oIEhvYTswOzA7MAorVk47Vk4tMjY7VGh1YSBUaGllbi1IdWU7MDswOzAKK1ZOO1ZOLTQ2O1RpZW4gR2lhbmc7MDswOzAKK1ZOO1ZOLTUxO1RyYSBWaW5oOzA7MDswCitWTjtWTi0wNztUdXllbiBRdWFuZzswOzA7MAorVk47Vk4tNDk7VmluaCBMb25nOzA7MDswCitWTjtWTi03MDtWaW5oIFBodWM7MDswOzAKK1ZOO1ZOLTA2O1llbiBCYWk7MDswOzAKK1ZVO1ZVLU1BUDtNYWxhbXBhOzA7MDswCitWVTtWVS1QQU07UGVuYW1hOzA7MDswCitWVTtWVS1TQU07U2FubWE7MDswOzAKK1ZVO1ZVLVNFRTtTaGVmYTswOzA7MAorVlU7VlUtVEFFO1RhZmVhOzA7MDswCitWVTtWVS1UT0I7VG9yYmE7MDswOzAKK1dTO1dTLUFBO0FhbmE7MDswOzAKK1dTO1dTLUFMO0FpZ2EtaS1sZS1UYWk7MDswOzAKK1dTO1dTLUFUO0F0dWE7MDswOzAKK1dTO1dTLUZBO0ZhYXNhbGVsZWFnYTswOzA7MAorV1M7V1MtR0U7R2FnYWVtYXVnYTswOzA7MAorV1M7V1MtR0k7R2FnYWlmb21hdWdhOzA7MDswCitXUztXUy1QQTtQYWxhdWxpOzA7MDswCitXUztXUy1TQTtTYXR1cGFpdGVhOzA7MDswCitXUztXUy1UVTtUdWFtYXNhZ2E7MDswOzAKK1dTO1dTLVZGO1ZhYS1vLUZvbm90aTswOzA7MAorV1M7V1MtVlM7VmFpc2lnYW5vOzA7MDswCitZRTtZRS1BQjtBYnlhbjswOzA7MAorWUU7WUUtQUQ7QWRhbjswOzA7MAorWUU7WUUtQkE7QWwgQmF5YTswOzA7MAorWUU7WUUtSFU7QWwgdWRheWRhaDswOzA7MAorWUU7WUUtSkE7QWwgSmF3ZjswOzA7MAorWUU7WUUtTVI7QWwgTWFocmFoOzA7MDswCitZRTtZRS1NVztBbCBNYXdpdDswOzA7MAorWUU7WUUtREg7RGhhbWFyOzA7MDswCitZRTtZRS1IRDthcmFtYXd0OzA7MDswCitZRTtZRS1ISjthamphaDswOzA7MAorWUU7WUUtSUI7SWJiOzA7MDswCitZRTtZRS1MQTtMYWlqOzA7MDswCitZRTtZRS1NQTtNYXJpYjswOzA7MAorWUU7WUUtU0Q7ZGFoOzA7MDswCitZRTtZRS1TTjthbjswOzA7MAorWUU7WUUtU0g7U2hhYndhaDswOzA7MAorWUU7WUUtVEE7VGl6ejswOzA7MAorQ1M7Q1MtQ0c7Q3JuYSBHb3JhOzA7MDswcmVwdWJsaWMKK0NTO0NTLVNSO1NyYmlqYTswOzA7MHJlcHVibGljCitDUztDUy1LTTtLb3Nvdm8tTWV0b2hpamE7MDswO0NTLVNSO2F1dG9ub21vdXMgcHJvdmluY2UKK0NTO0NTLVZPO1ZvanZvZGluYTswOzA7Q1MtU1I7YXV0b25vbW91cyBwcm92aW5jZQorWkE7WkEtRUM7RWFzdGVybiBDYXBlIFtFYXN0ZXJuIFRWTF07T29zLUthYXA7MDswOworWkE7WkEtRlM7RnJlZSBTdGF0ZTtWcnlzdGFhdDswOzA7CitaQTtaQS1HVDtHYXV0ZW5nOzA7MDswCitaQTtaQS1OTDtLd2F6dWx1LU5hdGFsOzA7MDswCitaQTtaQS1NUDtNcHVtYWxhbmdhOzA7MDswCitaQTtaQS1OQztOb3J0aGVybiBDYXBlIFtOb3J0aGVybiBUVkxdO05vb3JkLUthYXA7MDswOworWkE7WkEtTFA7TGltcG9wbztMaW1wb3BvOzA7MDsKK1pBO1pBLU5XO05vcnRoLVdlc3Q7Tm9vcmQtV2VzOzA7MDsKK1pBO1pBLVdDO1dlc3Rlcm4gQ2FwZTtXZXMtS2FhcDswOzA7CitaTTtaTS0wMjtDZW50cmFsOzA7MDswCitaTTtaTS0wODtDb3BwZXJiZWx0OzA7MDswCitaTTtaTS0wMztFYXN0ZXJuOzA7MDswCitaTTtaTS0wNDtMdWFwdWxhOzA7MDswCitaTTtaTS0wOTtMdXNha2E7MDswOzAKK1pNO1pNLTA1O05vcnRoZXJuOzA7MDswCitaTTtaTS0wNjtOb3J0aC1XZXN0ZXJuOzA7MDswCitaTTtaTS0wNztTb3V0aGVybjswOzA7MAorWk07Wk0tMDtXZXN0ZXJuOzA7MDswCitaVztaVy1CVTtCdWxhd2F5bzswOzA7MAorWlc7WlctSEE7SGFyYXJlOzA7MDswCitaVztaVy1NQTtNYW5pY2FsYW5kOzA7MDswCitaVztaVy1NQztNYXNob25hbGFuZCBDZW50cmFsOzA7MDswCitaVztaVy1NRTtNYXNob25hbGFuZCBFYXN0OzA7MDswCitaVztaVy1NVztNYXNob25hbGFuZCBXZXN0OzA7MDswCitaVztaVy1NVjtNYXN2aW5nbzswOzA7MAorWlc7WlctTU47TWF0YWJlbGVsYW5kIE5vcnRoOzA7MDswCitaVztaVy1NUztNYXRhYmVsZWxhbmQgU291dGg7MDswOzAKK1pXO1pXLU1JO01pZGxhbmRzOzA7MDswCitHRTtHRS1BQjtBYmtoYXppYTswOzA7MGF1dG9ub21vdXMgcmVwdWJsaWMKK0dFO0dFLUFKO0FqYXJpYTswOzA7MGF1dG9ub21vdXMgcmVwdWJsaWMKK0dFO0dFLUdVO0d1cmlhOzA7MDtyZWdpb24KK0dFO0dFLUlNO0ltZXJldGk7MDswO3JlZ2lvbgorR0U7R0UtS0E7S2FraGV0aTswOzA7cmVnaW9uCitHRTtHRS1LSztLdmVtbyBLYXJ0bGk7MDswO3JlZ2lvbgorR0U7R0UtTU07TXRza2hldGEtTXRpYW5ldGk7MDswO3JlZ2lvbgorR0U7R0UtUkw7UmFjaGEtTGVjaGtodW1pIFthbmRdIEt2ZW1vIFN2YW5ldGk7MDswO3JlZ2lvbgorR0U7R0UtU1o7U2FtZWdyZWxvLVplbW8gU3ZhbmV0aTswOzA7cmVnaW9uCitHRTtHRS1TSjtTYW10c2toZS1KYXZha2hldGk7MDswO3JlZ2lvbgorR0U7R0UtU0s7U2hpZGEgS2FydGxpOzA7MDtyZWdpb24KK0dFO0dFLVRCO1RiaWxpc2k7MDswOzA7Y2l0eQorVEw7VEwtQUw7QWlsZXU7MDswOzAKK1RMO1RMLUFOO0FpbmFybzswOzA7MAorVEw7VEwtQkE7QmF1Y2F1OzA7MDswCitUTDtUTC1CTztCb2JvbmFybzswOzA7MAorVEw7VEwtQ087Q292YSBMaW1hOzA7MDswCitUTDtUTC1ESTtEaWxpOzA7MDswCitUTDtUTC1FUjtFcm1lcmE7MDswOzAKK1RMO1RMLUxBO0xhdXRlbTswOzA7MAorVEw7VEwtTEk7TGlxdWljYTswOzA7MAorVEw7VEwtTVQ7TWFuYXR1dG87MDswOzAKK1RMO1RMLU1GO01hbnVmYWhpOzA7MDswCitUTDtUTC1PRTtPZWN1c3NpOzA7MDswCitUTDtUTC1WSTtWaXF1ZXF1ZTswOzA7MAorVUc7VUctMzA7QWRqdW1hbmk7MDswO047CitVRztVRy0yMTtCdWdpcmk7MDswO0U7CitVRztVRy0yMDI7QnVzaWE7MDswO0U7CitVRztVRy0yMDc7S2F0YWt3aTswOzA7RTsKK1VHO1VHLTA5O05ha2Fzb25nb2xhOzA7MDtDCitVRztVRy0xMTtTZW1iYWJ1bGU7MDswO0MKK0JJO0JJLU1XO013YXJvOzA7MDswCitFQztFQy1EO09yZWxsYW5hOzA7MDswCitFVDtFVC1ERDtEaXIgRGF3YTtEaXJlIERhd2E7MDswO2FkbWluaXN0cmF0aW9uCitLRztLRy1HQjtCaXNoa2VrO0dvcm9kIEJpc2hrZWs7R29yb2QgQmlrZWs7MDtjaXR5CitLRztLRy1CO0JhdGtlbjtCYXRrZW5za2F5YSBvYmxhc3Q7QmF0a2Vuc2thamEgb2JsYXN0OzA7cmVnaW9uCitLSDtLSC0yNDtLcm9uZyBQYWlsaW4gW0tybmcgUGFpbG5dOzA7MDswYXV0b25vbW91cyBtdW5pY2lwYWxpdHkKK0tQO0tQLU5BSjtOYWppbiBTb25ib25nLXNpOzA7MDswc3BlY2lhbCBjaXR5CitSTztSTy1JRjtJbGZvdjswOzA7MDtkZXBhcnRtZW50CitTSTtTSS0wMDtBamRvdmVpbmE7MDswOzAKK1NJO1NJLTAwMjtCZWx0aW5jaTswOzA7MAorU0k7U0ktNDg7QmVuZWRpa3Q7MDswOzAKK1NJO1NJLTQ5O0Jpc3RyaWNhIG9iIFNvdGxpOzA7MDswCitTSTtTSS0wMDM7QmxlZDswOzA7MAorU0k7U0ktNTA7Qmxva2U7MDswOzAKK1NJO1NJLTAwNDtCb2hpbmo7MDswOzAKK1NJO1NJLTAwNTtCb3Jvdm5pY2E7MDswOzAKK1NJO1NJLTAwNjtCb3ZlYzswOzA7MAorU0k7U0ktNTtCcmFzbG92ZWU7MDswOzAKK1NJO1NJLTAwNztCcmRhOzA7MDswCitTSTtTSS0wMDg7QnJlem92aWNhOzA7MDswCitTSTtTSS0wMDk7QnJlaWNlOzA7MDswCitTSTtTSS01MjtDYW5rb3ZhOzA7MDswCitTSTtTSS0wO0NlbGplOzA7MDswCitTSTtTSS0wMjtDZXJrbGplIG5hIEdvcmVuanNrZW07MDswOzAKK1NJO1NJLTAzO0NlcmtuaWNhOzA7MDswCitTSTtTSS0wNDtDZXJrbm87MDswOzAKK1NJO1NJLTUzO0Nlcmt2ZW5qYWs7MDswOzAKK1NJO1NJLTA1O3Jlbm92Y2k7MDswOzAKK1NJO1NJLTA2O3JuYSBuYSBLb3Jva2VtOzA7MDswCitTSTtTSS0wNztybm9tZWxqOzA7MDswCitTSTtTSS0wODtEZXN0cm5pazswOzA7MAorU0k7U0ktMDk7RGl2YWVhOzA7MDswCitTSTtTSS01NDtEb2JqZTswOzA7MAorU0k7U0ktMDIwO0RvYnJlcG9samU7MDswOzAKK1NJO1NJLTU1O0RvYnJuYTswOzA7MAorU0k7U0ktMDI7RG9icm92YS1Qb2xob3YgR3JhZGVjOzA7MDswCitTSTtTSS01NjtEb2Jyb3ZuaWtbRG9icm9uYWtdOzA7MDswCitTSTtTSS0wMjI7RG9sIHByaSBManVibGphbmk7MDswOzAKK1NJO1NJLTU3O0RvbGVuanNrZSBUb3BsaWNlOzA7MDswCitTSTtTSS0wMjM7RG9tYWxlOzA7MDswCitTSTtTSS0wMjQ7RG9ybmF2YTswOzA7MAorU0k7U0ktMDI1O0RyYXZvZ3JhZDswOzA7MAorU0k7U0ktMDI2O0R1cGxlazswOzA7MAorU0k7U0ktMDI3O0dvcmVuamEgdmFzLVBvbGphbmU7MDswOzAKK1NJO1NJLTAyODtHb3JpbmljYTswOzA7MAorU0k7U0ktMDI5O0dvcm5qYSBSYWRnb25hOzA7MDswCitTSTtTSS0wMzA7R29ybmppIEdyYWQ7MDswOzAKK1NJO1NJLTAzO0dvcm5qaSBQZXRyb3ZjaTswOzA7MAorU0k7U0ktNTg7R3JhZDswOzA7MAorU0k7U0ktMDMyO0dyb3N1cGxqZTswOzA7MAorU0k7U0ktNTk7SGFqZGluYTswOzA7MAorU0k7U0ktNjA7SG9lZS1TbGl2bmljYTswOzA7MAorU0k7U0ktNjtIb2RvW0hvZG9zXTswOzA7MAorU0k7U0ktNjI7SG9yanVsOzA7MDswCitTSTtTSS0wMzQ7SHJhc3RuaWs7MDswOzAKK1NJO1NJLTAzNTtIcnBlbGplLUtvemluYTswOzA7MAorU0k7U0ktMDM2O0lkcmlqYTswOzA7MAorU0k7U0ktMDM3O0lnOzA7MDswCitTSTtTSS0wMzg7SWxpcnNrYSBCaXN0cmljYTswOzA7MAorU0k7U0ktMDM5O0l2YW5lbmEgR29yaWNhOzA7MDswCitTSTtTSS0wNDA7SXpvbGFbSXNvbGFdOzA7MDswCitTSTtTSS0wNDtKZXNlbmljZTswOzA7MAorU0k7U0ktNjM7SmV6ZXJza287MDswOzAKK1NJO1NJLTA0MjtKdXJpbmNpOzA7MDswCitTSTtTSS0wNDM7S2FtbmlrOzA7MDswCitTSTtTSS0wNDQ7S2FuYWw7MDswOzAKK1NJO1NJLTA0NTtLaWRyaWVldm87MDswOzAKK1NJO1NJLTA0NjtLb2JhcmlkOzA7MDswCitTSTtTSS0wNDc7S29iaWxqZTswOzA7MAorU0k7U0ktMDQ4O0tvZWV2amU7MDswOzAKK1NJO1NJLTA0OTtLb21lbjswOzA7MAorU0k7U0ktNjQ7S29tZW5kYTswOzA7MAorU0k7U0ktMDUwO0tvcGVyW0NhcG9kaXN0cmlhXTswOzA7MAorU0k7U0ktNjU7S29zdGVsOzA7MDswCitTSTtTSS0wNTtLb3pqZTswOzA7MAorU0k7U0ktMDUyO0tyYW5qOzA7MDswCitTSTtTSS0wNTM7S3Jhbmpza2EgR29yYTswOzA7MAorU0k7U0ktNjY7S3JpZXZjaTswOzA7MAorU0k7U0ktMDU0O0tya287MDswOzAKK1NJO1NJLTA1NTtLdW5nb3RhOzA7MDswCitTSTtTSS0wNTY7S3V6bWE7MDswOzAKK1NJO1NJLTA1NztMYWtvOzA7MDswCitTSTtTSS0wNTg7TGVuYXJ0OzA7MDswCitTSTtTSS0wNTk7TGVuZGF2YVtMZW5kdmFdOzA7MDswCitTSTtTSS0wNjA7TGl0aWphOzA7MDswCitTSTtTSS0wNjtManVibGphbmE7MDswOzAKK1NJO1NJLTA2MjtManVibm87MDswOzAKK1NJO1NJLTA2MztManV0b21lcjswOzA7MAorU0k7U0ktMDY0O0xvZ2F0ZWM7MDswOzAKK1NJO1NJLTA2NTtMb2thIGRvbGluYTswOzA7MAorU0k7U0ktMDY2O0xva2kgUG90b2s7MDswOzAKK1NJO1NJLTY3O0xvdnJlbmMgbmEgUG9ob3JqdTswOzA7MAorU0k7U0ktMDY3O0x1ZWU7MDswOzAKK1NJO1NJLTA2ODtMdWtvdmljYTswOzA7MAorU0k7U0ktMDY5O01hanBlcms7MDswOzAKK1NJO1NJLTA3MDtNYXJpYm9yOzA7MDswCitTSTtTSS02ODtNYXJrb3ZjaTswOzA7MAorU0k7U0ktMDc7TWVkdm9kZTswOzA7MAorU0k7U0ktMDcyO01lbmdlOzA7MDswCitTSTtTSS0wNzM7TWV0bGlrYTswOzA7MAorU0k7U0ktMDc0O01laWNhOzA7MDswCitTSTtTSS02OTtNaWtsYXYgbmEgRHJhdnNrZW0gcG9sanU7MDswOzAKK1NJO1NJLTA3NTtNaXJlbi1Lb3N0YW5qZXZpY2E7MDswOzAKK1NJO1NJLTcwO01pcm5hIFBlZTswOzA7MAorU0k7U0ktMDc2O01pc2xpbmphOzA7MDswCitTSTtTSS0wNzc7TW9yYXZlZTswOzA7MAorU0k7U0ktMDc4O01vcmF2c2tlIFRvcGxpY2U7MDswOzAKK1NJO1NJLTA3OTtNb3ppcmplOzA7MDswCitTSTtTSS0wODA7TXVyc2thIFNvYm90YTswOzA7MAorU0k7U0ktMDg7TXV0YTswOzA7MAorU0k7U0ktMDgyO05ha2xvOzA7MDswCitTSTtTSS0wODM7TmF6YXJqZTswOzA7MAorU0k7U0ktMDg0O05vdmEgR29yaWNhOzA7MDswCitTSTtTSS0wODU7Tm92byBtZXN0bzswOzA7MAorU0k7U0ktMDg2O09kcmFuY2k7MDswOzAKK1NJO1NJLTc7T3Bsb3RuaWNhOzA7MDswCitTSTtTSS0wODc7T3JtbzswOzA7MAorU0k7U0ktMDg4O09zaWxuaWNhOzA7MDswCitTSTtTSS0wODk7UGVzbmljYTswOzA7MAorU0k7U0ktMDkwO1BpcmFuW1BpcmFub107MDswOzAKK1NJO1NJLTA5O1BpdmthOzA7MDswCitTSTtTSS0wOTI7UG9kZWV0cnRlazswOzA7MAorU0k7U0ktNzI7UG9kbGVobmlrOzA7MDswCitTSTtTSS0wOTM7UG9kdmVsa2E7MDswOzAKK1NJO1NJLTczO1BvbHplbGE7MDswOzAKK1NJO1NJLTA5NDtQb3N0b2puYTswOzA7MAorU0k7U0ktNzQ7UHJlYm9sZDswOzA7MAorU0k7U0ktMDk1O1ByZWRkdm9yOzA7MDswCitTSTtTSS03NTtQcmV2YWxqZTswOzA7MAorU0k7U0ktMDk2O1B0dWo7MDswOzAKK1NJO1NJLTA5NztQdWNvbmNpOzA7MDswCitTSTtTSS0wOTg7UmFlZS1GcmFtOzA7MDswCitTSTtTSS0wOTk7UmFkZWVlOzA7MDswCitTSTtTSS0wMDtSYWRlbmNpOzA7MDswCitTSTtTSS0wO1JhZGxqZSBvYiBEcmF2aTswOzA7MAorU0k7U0ktMDI7UmFkb3ZsamljYTswOzA7MAorU0k7U0ktMDM7UmF2bmUgbmEgS29yb2tlbTswOzA7MAorU0k7U0ktNzY7UmF6a3JpamU7MDswOzAKK1NJO1NJLTA0O1JpYm5pY2E7MDswOzAKK1NJO1NJLTc3O1JpYm5pY2EgbmEgUG9ob3JqdTswOzA7MAorU0k7U0ktMDY7Um9nYWthIFNsYXRpbmE7MDswOzAKK1NJO1NJLTA1O1JvZ2FvdmNpOzA7MDswCitTSTtTSS0wNztSb2dhdGVjOzA7MDswCitTSTtTSS0wODtSdWU7MDswOzAKK1NJO1NJLTc4O1NlbG5pY2Egb2IgRHJhdmk7MDswOzAKK1NJO1NJLTA5O1NlbWllOzA7MDswCitTSTtTSS0wO1Nldm5pY2E7MDswOzAKK1NJO1NJLTtTZWFuYTswOzA7MAorU0k7U0ktMjtTbG92ZW5qIEdyYWRlYzswOzA7MAorU0k7U0ktMztTbG92ZW5za2EgQmlzdHJpY2E7MDswOzAKK1NJO1NJLTQ7U2xvdmVuc2tlIEtvbmppY2U7MDswOzAKK1NJO1NJLTc5O1NvZHJhaWNhOzA7MDswCitTSTtTSS04MDtTb2xlYXZhOzA7MDswCitTSTtTSS01O1N0YXJlOzA7MDswCitTSTtTSS04O1N2ZXRhIEFuYTswOzA7MAorU0k7U0ktODI7U3ZldGkgQW5kcmEgdiBTbG92ZW5za2loIGdvcmljYWg7MDswOzAKK1NJO1NJLTY7U3ZldGkgSnVyaWo7MDswOzAKK1NJO1NJLTAzMzthbG92Y2k7MDswOzAKK1NJO1NJLTgzO2VtcGV0ZXItVnJ0b2piYTswOzA7MAorU0k7U0ktNztlbmV1cjswOzA7MAorU0k7U0ktODtlbnRpbGo7MDswOzAKK1NJO1NJLTk7ZW50amVybmVqOzA7MDswCitTSTtTSS0yMDtlbnRqdXIgcHJpIENlbGp1OzA7MDswCitTSTtTSS0yO2tvY2phbjswOzA7MAorU0k7U0ktMjI7a29mamEgTG9rYTswOzA7MAorU0k7U0ktMjM7a29mbGppY2E7MDswOzAKK1NJO1NJLTI0O21hcmplIHByaSBKZWxhaDswOzA7MAorU0k7U0ktMjU7bWFydG5vIG9iIFBha2k7MDswOzAKK1NJO1NJLTk0O21hcnRubyBwcmkgTGl0aWppOzA7MDswCitTSTtTSS0yNjtvdGFuajswOzA7MAorU0k7U0ktMjc7dG9yZTswOzA7MAorU0k7U0ktODQ7VGFib3I7MDswOzAKK1NJO1NJLTAwO1RpaW5hOzA7MDswCitTSTtTSS0yODtUb2xtaW47MDswOzAKK1NJO1NJLTI5O1RyYm92bGplOzA7MDswCitTSTtTSS0zMDtUcmVibmplOzA7MDswCitTSTtTSS04NTtUcm5vdnNrYSB2YXM7MDswOzAKK1NJO1NJLTM7VHJpZTswOzA7MAorU0k7U0ktODY7VHJ6aW47MDswOzAKK1NJO1NJLTMyO1R1cm5pZWU7MDswOzAKK1NJO1NJLTMzO1ZlbGVuamU7MDswOzAKK1NJO1NJLTg3O1ZlbGlrYSBQb2xhbmE7MDswOzAKK1NJO1NJLTM0O1ZlbGlrZSBMYWVlOzA7MDswCitTSTtTSS04ODtWZXJlajswOzA7MAorU0k7U0ktMzU7VmlkZW07MDswOzAKK1NJO1NJLTM2O1ZpcGF2YTswOzA7MAorU0k7U0ktMzc7Vml0YW5qZTswOzA7MAorU0k7U0ktMzg7Vm9kaWNlOzA7MDswCitTSTtTSS0zOTtWb2puaWs7MDswOzAKK1NJO1NJLTg5O1ZyYW5za287MDswOzAKK1NJO1NJLTQwO1ZyaG5pa2E7MDswOzAKK1NJO1NJLTQ7VnV6ZW5pY2E7MDswOzAKK1NJO1NJLTQyO1phZ29yamUgb2IgU2F2aTswOzA7MAorU0k7U0ktNDM7WmF2cmU7MDswOzAKK1NJO1NJLTQ0O1pyZWVlOzA7MDswCitTSTtTSS05MDthbGVjOzA7MDswCitTSTtTSS00NjtlbGV6bmlraTswOzA7MAorU0k7U0ktOTtldGFsZTswOzA7MAorU0k7U0ktNDc7aXJpOzA7MDswCitTSTtTSS05Mjtpcm92bmljYTswOzA7MAorU0k7U0ktOTM7dWVtYmVyazswOzA7MAorVVo7VVotVEs7VG9zaGtlbnQ7MDswOzA7Y2l0eQorVkU7VkUtWDtWYXJnYXM7MDswOzBzdGF0ZQorWUU7WUUtREE7QWQgRGxpOzA7MDswCitZRTtZRS1BTTtBbXJuOzA7MDswCitITjtITi1PQztPY290ZXBlcXVlOzA7MDswCitNWTtNWS02O1dpbGF5YWggUGVyc2VrdXR1YW4gUHV0cmFqYXlhOzA7MDswZmVkZXJhbCB0ZXJyaXRvcnkKK1RaO1RaLTI2O01hbnlhcmE7MDswOzAKK1VHO1VHLTIzO0thYmVyYW1haWRvOzA7MDtFCitVRztVRy00MztLYW13ZW5nZTswOzA7VworVUc7VUctNDQ7S2FudW5ndTswOzA7VworVUc7VUctMjtLYXl1bmdhOzA7MDtDOworVUc7VUctNDU7S3llbmpvam87MDswO1cKK1VHO1VHLTI0O01heXVnZTswOzA7RQorVUc7VUctMztOYWthcGlyaXBpcml0OzA7MDtOCitVRztVRy0zMjtQYWRlcjswOzA7TgorVUc7VUctMjU7U2lyb25rbzswOzA7RQorVUc7VUctMztXYWtpc287MDswO0M7CitVRztVRy0zMztZdW1iZTswOzA7TgorTFk7TFktQUo7QWpkYml5OzA7MDswCitMWTtMWS1IWjtBbCBpem0gYWwgQWtoYXI7MDswOzAKK0xZO0xZLUpJO0FsIEppZnJhaDswOzA7MAorTFk7TFktS0Y7QWwgS3VmcmFoOzA7MDswCitMWTtMWS1NSjtBbCBNYXJqOzA7MDswCitMWTtMWS1NQjtBbCBNYXJxYWI7MDswOzAKK0xZO0xZLVFUO0FsIFFhcm47MDswOzAKK0xZO0xZLVFCO0FsIFF1YmJhaDswOzA7MAorTFk7TFktTlE7QW4gTnVxYSBhbCBLaGFtczswOzA7MAorTFk7TFktU0g7QXNoIFNoaTswOzA7MAorTFk7TFktQlc7QmFuIFdhbGQ7MDswOzAKK0xZO0xZLURSO0Rhcm5haDswOzA7MAorTFk7TFktR0Q7R2hhZG1pczswOzA7MAorTFk7TFktR1I7R2hhcnluOzA7MDswCitMWTtMWS1HVDtHaHQ7MDswOzAKK0xZO0xZLUpCO0phZ2hiYjswOzA7MAorTFk7TFktTVo7TWl6ZGFoOzA7MDswCitMWTtMWS1NUTtNdXJ6dXE7MDswOzAKK0xZO0xZLU5MO05sdDswOzA7MAorTFk7TFktU0I7U2FiaDswOzA7MAorTFk7TFktU1M7YWJydGFoIHVybW47MDswOzAKK0xZO0xZLVNSO1N1cnQ7MDswOzAKK0xZO0xZLVROO1RqciB3YSBhbiBOYXcgQXJiOzA7MDswCitMWTtMWS1UTTtUYXJobmFoLU1hc2FsbHRhaDswOzA7MAorTFk7TFktV0Q7V2QgYWwgYXl0OzA7MDswCitMWTtMWS1ZSjtZYWZyYW4tSmQ7MDswOzAKK1ROO1ROLTQ7TGEgTWFub3ViYTswOzA7MAorR1k7R1ktQ1U7Q3V5dW5pL01hemFydW5pOzA7MDswCitHWTtHWS1ERTtEZW1lcmFyYS9NYWhhaWNhOzA7MDswCitHWTtHWS1FQjtFYXN0IEJlcmJpY2UvQ29yZW50eW5lOzA7MDswCitHWTtHWS1FUztFc3NlcXVpYm8gSS4vV0VTVCBELjswOzA7MAorR1k7R1ktTUE7TWFoYWljYS9CZXJiaWNlOzA7MDswCitHWTtHWS1QTTtQb21lcm9vbi9TdXBlbmFhbTswOzA7MAorR1k7R1ktUFQ7UG90YXJvL1NpcGFydW5pOzA7MDswCitHWTtHWS1VRDtVcHBlciBEZW1lcmFyYS9CZXJiaWNlOzA7MDswCitHWTtHWS1VVDtVcHBlciBUYWt1dHUvVS5Fc3NlcXVpYm87MDswOzAKK0FGO0FGLUtITztLaG93c3Q7MDswOzAKK0FGO0FGLU5VUjtOcmVzdG47MDswOzAKK0lEO0lELUtSO0tlcHVsYXVhbiBSaWF1OzA7MDtTTTtwcm92aW5jZQorQUY7QUYtREFZO0R5a29uZDswOzA7MAorQUY7QUYtUEFOO1BhbmpzaHI7MDswOzAKK0RKO0RKLUFSO0FydGE7MDswO3JlZ2lvbgorSUQ7SUQtU1I7U3VsYXdlc2kgQmFyYXQ7MDswO1NMO3Byb3ZpbmNlCitWTjtWTi03O0RpZW4gQmllbjswOzA7MAorVk47Vk4tNzI7RGFrIE5vbmc7MDswOzAKK1ZOO1ZOLTczO0hhdSBHaWFuZzswOzA7MAorCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0lTT0ZJWC9JU09fRklYLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvSVNPRklYL0lTT19GSVgudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc3YzU3NjEKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0lTT0ZJWC9JU09fRklYLnR4dApAQCAtMCwwICsxLDMyOTQgQEAKK0FsYmFuaWE6U0hRSVCJUklBOlVOS05PV046QUwtU0gKK0F1c3RyaWE6TklFREVSlFNURVJSRUlDSDpVTktOT1dOOkFULTMKK0F1c3RyaWE6T0JFUpRTVEVSUkVJQ0g6VU5LTk9XTjpBVC00CitBdXN0cmlhOlZPUkFMQkVSRzpVTktOT1dOOkFULTgKK0F1c3RyaWE6S4RSTlRFTjpVTktOT1dOOkFULTIKK0JlbGdpdW06QlJVWEVMTEVTLUJSVVNTRUw6VU5LTk9XTjpCRS1CUlgKK0JlbGdpdW06TklWRUxMRVM6VU5LTk9XTjpCRS1OVkwKK0J1bGdhcmlhOk1JSEFKTE9WR1JBRDpVTktOT1dOOkJHLTIxCitCdWxnYXJpYTpHUkFEIFNPRklKQSAoTVVOLik6VU5LTk9XTjpCRy0yMgorQnVsZ2FyaWE6U09GSUpBIC0gQ0lUWTpVTktOT1dOOkJHLTIzCitCdWxnYXJpYTpMT1ZFQzpVTktOT1dOOkJHLTI5CitJY2VsYW5kOklTTEFORDpVTktOT1dOOklTLUlTTAorU3dpdHplcmxhbmQ6QkVSTi9CRVJORTpVTktOT1dOOkNILUJFCitTd2l0emVybGFuZDpORVVDSEFURUw6VU5LTk9XTjpDSC1ORQorU3dpdHplcmxhbmQ6R1JBVUI/TkRFTi9HUklHSU9OSS9HUklTQ0hVTjpVTktOT1dOOkNILUdSCitTd2l0emVybGFuZDpGUklCT1VSRy9GUkVJQlVSRzpVTktOT1dOOkNILUZSCitTd2l0emVybGFuZDpNSURXQUxERU46VU5LTk9XTjpDSC1OVworU3dpdHplcmxhbmQ6VkFMQUlTL1dBTExJUzpVTktOT1dOOkNILVZTCitTd2l0emVybGFuZDpCRVJOL0JFUk5FOlVOS05PV046Q0gtQkUKK1N3aXR6ZXJsYW5kOkdFTopWRTpVTktOT1dOOkNILUdOCitTd2l0emVybGFuZDpaVVJJQ0g6VU5LTk9XTjpDSC1aSAorU3dpdHplcmxhbmQ6VElDSU5POlVOS05PV046Q0gtVEkKK0NaRUNIIFJFUFVCTElDOlNFVkVST0NFU0tZIEtSQUo6VU5LTk9XTjpDUy1TRQorQ1pFQ0ggUkVQVUJMSUM6VllDSE9ET0NFU0tZIEtSQUo6VU5LTk9XTjpDUy1WWQorQ1pFQ0ggUkVQVUJMSUM6U1RSRURPQ0VTS1kgS1JBSjpVTktOT1dOOkNTLVNSCitDWkVDSCBSRVBVQkxJQzpaQVBBRE9DRVNLWSBLUkFKOlVOS05PV046Q1MtWkQKK0NaRUNIIFJFUFVCTElDOlNFVkVST01PUkFWU0tZIEtSQUo6VU5LTk9XTjpDUy1TVgorQ1pFQ0ggUkVQVUJMSUM6UFJBSEE6VU5LTk9XTjpDUy1QUgorQ1pFQ0ggUkVQVUJMSUM6SklIT01PUkFWU0tZIEtSQUo6VU5LTk9XTjpDUy1KTQorQ1pFQ0ggUkVQVUJMSUM6SklIT0NFU0tZIEtSQUo6VU5LTk9XTjpDUy1KQworQ1pFQ0ggUkVQVUJMSUM6U1RSRURPTFNMT1ZFTlNLWSBLUkFKOlVOS05PV046Q1MtU1QKK0NaRUNIIFJFUFVCTElDOllDSE9ET1NMT1ZFTlNLSSBLUkFKOlVOS05PV046Q1MtWUMKK0NaRUNIIFJFUFVCTElDOlpBUEFET1NMT1ZFTlNLWSBLUkFKOlVOS05PV046Q1MtWkEKK0NaRUNIIFJFUFVCTElDOkJSQVRJU0xBVkE6VU5LTk9XTjpDUy1CUgorR0VSTUFOWTpDSEVNTklUWjpVTktOT1dOOkRFLUNNCitHRVJNQU5ZOldFU0VSLUVNUzpVTktOT1dOOkRFLVdFCitHRVJNQU5ZOkxVRU5FQlVSRzpVTktOT1dOOkRFLUxVCitHRVJNQU5ZOkhBTk5PVkVSOlVOS05PV046REUtSEEKK0dFUk1BTlk6TUFHREVCVVJHOlVOS05PV046REUtTUEKK0dFUk1BTlk6QlJBVU5TQ0hXRUlHOlVOS05PV046REUtQlIKK0dFUk1BTlk6REVUTU9MRDpVTktOT1dOOkRFLURUCitHRVJNQU5ZOk1VRU5TVEVSOlVOS05PV046REUtTVUKK0dFUk1BTlk6REVTU0FVOlVOS05PV046REUtREEKK0dFUk1BTlk6SEFMTEU6VU5LTk9XTjpERS1IQQorR0VSTUFOWTpEVUVTU0VMRE9SRjpVTktOT1dOOkRFLURVCitHRVJNQU5ZOkFSTlNCRVJHOlVOS05PV046REUtQVIKK0dFUk1BTlk6TEVJUFpJRzpVTktOT1dOOkRELUxQCitHRVJNQU5ZOktBU1NFTDpVTktOT1dOOkRFLUtBCitHRVJNQU5ZOlRIVVJJTkdFTjpVTktOT1dOOkRFLVRICitHRVJNQU5ZOkRSRVNERU46VU5LTk9XTjpERS1EUgorR0VSTUFOWTpLT0VMTjpVTktOT1dOOkRFLUtPCitHRVJNQU5ZOkdJRVNTRU46VU5LTk9XTjpERS1HSQorR0VSTUFOWTpLT0JMRU5aOlVOS05PV046REUtS08KK0dFUk1BTlk6VU5URVJGUkFOS1JFTjpVTktOT1dOOkRFLVVOCitHRVJNQU5ZOk9CRVJGUkFOS0VOOlVOS05PV046REUtT0IKK0dFUk1BTlk6REFSTVNUQURUOlVOS05PV046REUtREEKK0dFUk1BTlk6VFJJRVI6VU5LTk9XTjpERS1USQorR0VSTUFOWTpSSEVJTkhFU1NFTjpVTktOT1dOOkRFLVJICitHRVJNQU5ZOk9CRVJQRkFMWjpVTktOT1dOOkRFLU9CCitHRVJNQU5ZOlNUVVRUR0FSVDpVTktOT1dOOkRFLVNUCitHRVJNQU5ZOk1JVFRFTEZSQU5LRU46VU5LTk9XTjpERS1NVAorR0VSTUFOWTpLQVJMU1JVSEU6VU5LTk9XTjpERS1LQQorR0VSTUFOWTpOSUVERVJCQVlFUk46VU5LTk9XTjpERS1OSQorR0VSTUFOWTpPQkVSQkFZRVJOOlVOS05PV046REUtQlkKK0dFUk1BTlk6U0NIV0FCRU46VU5LTk9XTjpERS1TSAorR0VSTUFOWTpGUkVJQlVSRzpVTktOT1dOOkRFLUZSCitHRVJNQU5ZOlRVRUJJTkdFTjpVTktOT1dOOkRFLVRVCitHRVJNQU5ZOlVOVEVSRlJBTktFTjpVTktOT1dOOkRFLVVUCitHRVJNQU5ZOlJIRUlOSEVTU0VOLVBGQUxaOlVOS05PV046REUtUlAKK0RFTk1BUks6VkVTVCBGT1IgU1RPUkVCQUVMVDpVTktOT1dOOkRLLTAyMQorREVOTUFSSzpIT1ZFRFNUQURTUkVHSU9ORU46VU5LTk9XTjpESy0wMjIKK0RFTk1BUks6T1NUIEZPUiBTVE9SRUJBRUxUOlVOS05PV046REstMDIzCitTUEFJTjpHQUxJQ0lBOlVOS05PV046RVMtR0EKK1NQQUlOOlBBSVMgVkFTQ086VU5LTk9XTjpFUy1WQQorU1BBSU46Q0FTVElMTEEgLSBMRU9OOlVOS05PV046RVMtTEUKK1NQQUlOOkFSQUdPTjpVTktOT1dOOkVTLUFSCitTUEFJTjpDQVRBTFVOQTpVTktOT1dOOkVTLUNUCitTUEFJTjpSSU9KQTpVTktOT1dOOkVTLVJJCitTUEFJTjpDQVNUSUxMQSAtIExBIE1BTkNIQTpVTktOT1dOOkVTLU1BCitTUEFJTjpDT01VTklEQUQgVkFMRU5DSUFOQTpVTktOT1dOOkVTLVZBCitTUEFJTjpFWFRSRU1BRFVSQTpVTktOT1dOOkVTLUVUCitTUEFJTjpBTkRBTFVDSUE6VU5LTk9XTjpFUy1BRAorU1BBSU46Q0FOQVJJQVM6VU5LTk9XTjpFUy1DTgorRklOTEFORDpMQVBQSS9MQVBQTEFORDpVTktOT1dOOkZJLUxMCitGSU5MQU5EOk9VTFUvVUxFQUJPUkc6VU5LTk9XTjpGSS1VTAorRklOTEFORDpWQUFTQS9WQVNBOlVOS05PV046RkktVkEKK0ZJTkxBTkQ6S1VPUElPOlVOS05PV046RkktS1UKK0ZJTkxBTkQ6UE9ISk9JUy1LQVJKQUxBL05PUlJBLUtBUkVMRU46VU5LTk9XTjpGSS1QTworRklOTEFORDpLRVNLSS1TVU9NSS9NRUxMRVJTVEEtRklOTEFORDpVTktOT1dOOkZJLUtFCitGSU5MQU5EOk1JS0tFTEkvU1QgTUlDSEVMOlVOS05PV046RkktTUsKK0ZJTkxBTkQ6SIRNRS9UQVZBU1RFSFVTOlVOS05PV046RkktVEEKK0ZJTkxBTkQ6VFVSS1UtUE9SSS9BQk8tQkqUUk5FQk9SRzpVTktOT1dOOkZJLVRVCitGSU5MQU5EOktZTUkvS1lNTUVORTpVTktOT1dOOkZJLUtZCitGSU5MQU5EOlVVREVOTUFBL05ZTEFORDpVTktOT1dOOkZJLVVVCitGSU5MQU5EOkFMQU5EL0FIVkVOQU5NQUE6VU5LTk9XTjpGSS1BTAorRlJBTkNFOk5PUkQgLSBQQVMtREUtQ0FMQUlTOlVOS05PV046RlItUEMKK0ZSQU5DRTpQSUNBUkRJRTpVTktOT1dOOkZSLVBJCitGUkFOQ0U6Q0hBTVBBR05FLUFSREVOTkU6VU5LTk9XTjpGUi1DSAorRlJBTkNFOkhBVVRFLU5PUk1BTkRJRTpVTktOT1dOOkZSLUhBCitGUkFOQ0U6QkFTU0UtTk9STUFORElFOlVOS05PV046RlItQkEKK0ZSQU5DRTpMT1JSQUlORTpVTktOT1dOOkZSLUxPCitGUkFOQ0U6SUxFIERFIEZSQU5DRTpVTktOT1dOOkZSLUlGCitGUkFOQ0U6QUxTQUNFOlVOS05PV046RlItQUwKK0ZSQU5DRTpDRU5UUkU6VU5LTk9XTjpGUi1DRQorRlJBTkNFOkJSRVRBR05FOlVOS05PV046RlItQlIKK0ZSQU5DRTpQQVlTIERFIExBIExPSVJFOlVOS05PV046RlItUEwKK0ZSQU5DRTpCT1VSR09HTkU6VU5LTk9XTjpGUi1CTworRlJBTkNFOkZSQU5DSEUtQ09NVEU6VU5LTk9XTjpGUi1DTworRlJBTkNFOlBPSVRPVS1DSEFSRU5URVM6VU5LTk9XTjpGUi1QTworRlJBTkNFOkFVVkVSR05FOlVOS05PV046RlItQVUKK0ZSQU5DRTpSSE9ORS1BTFBFUzpVTktOT1dOOkZSLVJICitGUkFOQ0U6TElNT1VTSU46VU5LTk9XTjpGUi1MSQorRlJBTkNFOkFRVUlUQUlORTpVTktOT1dOOkZSLUFRCitGUkFOQ0U6UFJPVkVOQ0UtQUxQRVMtQ09URSBEJ0FaVVI6VU5LTk9XTjpGUi1QQQorRlJBTkNFOk1JREktUFlSRU5FRVM6VU5LTk9XTjpGUi1NUAorRlJBTkNFOkxBTkdVRURPQy1ST1VTU0lMTE9OOlVOS05PV046RlItTEEKK0ZSQU5DRTpDT1JTRTpVTktOT1dOOkZSLUNPCitHUkVFQ0U6QU5BVE9MSUtJIE1BS0VET05JQTpVTktOT1dOOkdSLTgwCitHUkVFQ0U6S0VOVFJJS0kgTUFLRURPTklBOlVOS05PV046R1ItODYKK0dSRUVDRTpEWVRJS0kgTUFLRURPTklBOlVOS05PV046R1ItNjAKK0dSRUVDRTpJUEVJUk9TOlVOS05PV046R1ItNjEKK0dSRUVDRTpUSEVTU0FMSUE6VU5LTk9XTjpHUi02MworR1JFRUNFOlZPUkVJTyBBSUdBSU86VU5LTk9XTjpHUi02NQorR1JFRUNFOklPTklBIE5JU0lBOlVOS05PV046R1ItNjcKK0dSRUVDRTpTVEVSRUEgRUxMQURBOlVOS05PV046R1ItNzAKK0dSRUVDRTpEWVRJS0kgRUxMQURBOlVOS05PV046R1ItNzEKK0dSRUVDRTpQRUxPUE9OTklTT1M6VU5LTk9XTjpHUi03NAorR1JFRUNFOk5PVElPIEFJR0FJTzpVTktOT1dOOkdSLTc1CitHUkVFQ0U6S1JJVEk6VU5LTk9XTjpHUi03NgorQ1JPQVRJQTpIUlZBVFNLQTpVTktOT1dOOkhSLTExCitIVU5HQVJZOkJPUlNPRC1BQkFVSi1aRU1QTEVOOlVOS05PV046SFUtWkUKK0hVTkdBUlk6U1pBQk9MQ1MtU1pBVEFSLUJFUkVHOlVOS05PV046SFUtQkUKK0hVTkdBUlk6R1mUUi1NT1NPTi1TT1BST046VU5LTk9XTjpIVS1TTworSVJFTEFORDpJUkVMQU5EOlVOS05PV046SUUtSQorSVRBTFk6VFJFTlRJTk8tQUxUTyBBRElHRTpVTktOT1dOOklULUFECitJVEFMWTpWRU5FVE86VU5LTk9XTjpJVC1WTgorSVRBTFk6RlJJVUxJLVZFTkVaSUE6VU5LTk9XTjpJVC1HSQorSVRBTFk6TE9NQkFSRElBOlVOS05PV046SVQtTEIKK0lUQUxZOlBJRU1PTlRFOlVOS05PV046SVQtUE0KK0lUQUxZOlZBTExFIEQnQU9TVEE6VU5LTk9XTjpJVC1BUworSVRBTFk6RU1JTElBLVJPTUFHTkE6VU5LTk9XTjpJVC1FUgorSVRBTFk6TElHVVJJQTpVTktOT1dOOklULUxHCitJVEFMWTpUT1NDQU5BOlVOS05PV046SVQtVEMKK0lUQUxZOk1BUkNIRTpVTktOT1dOOklULU1BCitJVEFMWTpVTUJSSUE6VU5LTk9XTjpJVC1VTQorSVRBTFk6QUJSVVpaSTpVTktOT1dOOklULUFCCitJVEFMWTpMQVpJTzpVTktOT1dOOklULUxBCitJVEFMWTpQVUdMSUE6VU5LTk9XTjpJVC1QVQorSVRBTFk6TU9MSVNFOlVOS05PV046SVQtTUwKK0lUQUxZOkNBTVBBTklBOlVOS05PV046SVQtQ00KK0lUQUxZOlNBUkRFR05BOlVOS05PV046SVQtU0QKK0lUQUxZOkJBU0lMSUNBVEE6VU5LTk9XTjpJVC1CQworSVRBTFk6Q0FMQUJSSUE6VU5LTk9XTjpJVC1DSQorSVRBTFk6U0lDSUxJQTpVTktOT1dOOklULVNDCitJVEFMWTpGUklVTEktVkVORVpJQSBHSVVMSUE6VU5LTk9XTjpJVC1GVgorSUNFTEFORDpJQ0VMQU5EOlVOS05PV046SVMtSQorTFVYRU1CT1VSRzpMVVhFTUJPVVJHIChHUkFORC1EVUNIRSk6VU5LTk9XTjpMVS1MCitMSUVDSFRFTlNURUlOOkxpY2h0ZW5zdGVpbjpVTktOT1dOOkxJLUxJRQorTk9SV0FZOk5PUkQtVFJPRU5ERUxBRzpVTktOT1dOOk5PLTcKK05PUldBWTpTT0VSLVRST0VOREVMQUc6VU5LTk9XTjpOTy02CitOT1JXQVk6TU9FUkUgT0cgUk9NU0RBTDpVTktOT1dOOk5PLTUKK05PUldBWTpPU0xPIE9HIEFLRVJTSFVTOlVOS05PV046Tk8tMDMKK05PUldBWTpPRVNURk9MRDpVTktOT1dOOk5PLTAKK1BPTEFORDpHREFOU0s6VU5LTk9XTjpQTC1HRAorUE9MQU5EOlNMVVBTSzpVTktOT1dOOlBMLVNQCitQT0xBTkQ6S09TWkFMSU46VU5LTk9XTjpQTC1LTworUE9MQU5EOkVMQkxBRzpVTktOT1dOOlBMLUVMCitQT0xBTkQ6U1VXQUxTS0k6VU5LTk9XTjpQTC1TVQorUE9MQU5EOk9MU1pUWU46VU5LTk9XTjpQTC1PTAorUE9MQU5EOlNaQ1pFQ0lOOlVOS05PV046UEwtQ0kKK1BPTEFORDpCWURHT1NaQ1o6VU5LTk9XTjpQTC1CWQorUE9MQU5EOkxPTVpBOlVOS05PV046UEwtTE8KK1BPTEFORDpCSUFMWVNUT0s6VU5LTk9XTjpQTC1CSQorUE9MQU5EOlBJTEE6VU5LTk9XTjpQTC1QSQorUE9MQU5EOlRPUlVOOlVOS05PV046UEwtVE8KK1BPTEFORDpPU1RST0xFS0E6VU5LTk9XTjpQTC1PUworUE9MQU5EOkNJRUNIQU5PVzpVTktOT1dOOlBMLUNFCitQT0xBTkQ6R09SWk9XOlVOS05PV046UEwtR08KK1BPTEFORDpXTE9DTEFXRUs6VU5LTk9XTjpQTC1XTworUE9MQU5EOlBMT0NLOlVOS05PV046UEwtTE8KK1BPTEFORDpQT1pOQU46VU5LTk9XTjpQTC1QWgorUE9MQU5EOlNJRURMQ0U6VU5LTk9XTjpQTC1TSQorUE9MQU5EOldBUlNaQVdBOlVOS05PV046UEwtV0EKK1BPTEFORDpLT05JTjpVTktOT1dOOlBMLUtPCitQT0xBTkQ6QklBTEEgUE9ETEFTS0E6VU5LTk9XTjpQTC1CUAorUE9MQU5EOlpJRUxPTkEgR09SQTpVTktOT1dOOlBMLVpFCitQT0xBTkQ6U0tJRVJOSUVXSUNFOlVOS05PV046UEwtU0sKK1BPTEFORDpMRVNaTk86VU5LTk9XTjpQTC1MRQorUE9MQU5EOktBTElTWjpVTktOT1dOOlBMLUtBCitQT0xBTkQ6TE9EWjpVTktOT1dOOlBMLUxECitQT0xBTkQ6U0lFUkFEWjpVTktOT1dOOlBMLVNSCitQT0xBTkQ6UkFET006VU5LTk9XTjpQTC1SQQorUE9MQU5EOkxVQkxJTjpVTktOT1dOOlBMLUxMCitQT0xBTkQ6TEVHTklDQTpVTktOT1dOOlBMLUxHCitQT0xBTkQ6UElPVFJLT1c6VU5LTk9XTjpQTC1QTworUE9MQU5EOkNIRUxNOlVOS05PV046UEwtQ0gKK1BPTEFORDpXUk9DTEFXOlVOS05PV046UEwtV1IKK1BPTEFORDpKRUxFTklBIEdPUkE6VU5LTk9XTjpQTC1KRQorUE9MQU5EOktJRUxDRTpVTktOT1dOOlBMLUtMCitQT0xBTkQ6Q1pFU1RPQ0hPV0E6VU5LTk9XTjpQTC1DWgorUE9MQU5EOk9QT0xFOlVOS05PV046UEwtT1AKK1BPTEFORDpUQVJOT0JSWkVHOlVOS05PV046UEwtVEEKK1BPTEFORDpXQUxCUlpZQ0g6VU5LTk9XTjpQTC1XWQorUE9MQU5EOlpBTU9TQzpVTktOT1dOOlBMLVpNCitQT0xBTkQ6S0FUT1dJQ0U6VU5LTk9XTjpQTC1LVAorUE9MQU5EOlJaRVNaT1c6VU5LTk9XTjpQTC1SWgorUE9MQU5EOlBSWkVNWVNMOlVOS05PV046UEwtUFIKK1BPTEFORDpLUkFLT1c6VU5LTk9XTjpQTC1LVworUE9MQU5EOlRBUk5PVzpVTktOT1dOOlBMLVRXCitQT0xBTkQ6QklFTFNLTy1CSUFMQTpVTktOT1dOOlBMLUJCCitQT0xBTkQ6S1JPU05POlVOS05PV046UEwtS1IKK1BPTEFORDpOT1dZIFNBQ1o6VU5LTk9XTjpQTC1OUworUE9SVFVHQUw6Tk9SVEU6VU5LTk9XTjpQVC0xMQorUE9SVFVHQUw6Q0VOVFJPOlVOS05PV046UFQtMTAKK1BPUlRVR0FMOkxJU0JPQSBFIFZBTEUgRE8gVEVKTzpVTktOT1dOOlBULTAxCitQT1JUVUdBTDpBTEVOVEVKTzpVTktOT1dOOlBULTE0CitQT1JUVUdBTDpBTEdBUlZFOlVOS05PV046UFQtMTUKK1JPTUFOSUE6Qk9UT1NBTkk6VU5LTk9XTjpSTy1CVAorUk9NQU5JQTpNQVJBTVVSRVM6VU5LTk9XTjpSTy1NTQorUk9NQU5JQTpCSVNUUklUQS1OQVNBVUQ6VU5LTk9XTjpSTy1CTgorUk9NQU5JQTpJQVNJOlVOS05PV046Uk8tSVMKK1JPTUFOSUE6U0FMQUo6VU5LTk9XTjpSTy1TSgorUk9NQU5JQTpORUFNVDpVTktOT1dOOlJPLU5UCitST01BTklBOk1VUkVTOlVOS05PV046Uk8tTVMKK1JPTUFOSUE6QkFDQVU6VU5LTk9XTjpSTy1CQworUk9NQU5JQTpUSU1JUzpVTktOT1dOOlJPLVRNCitST01BTklBOkJSQVNPVjpVTktOT1dOOlJPLUJWCitST01BTklBOkdBTEFUSTpVTktOT1dOOlJPLUdMCitST01BTklBOkJVWkFVOlVOS05PV046Uk8tQloKK1JPTUFOSUE6Q0FSQVMtU0VWRVJJTjpVTktOT1dOOlJPLUNTCitST01BTklBOkFSR0VTOlVOS05PV046Uk8tQUcKK1JPTUFOSUE6VklMQ0VBOlVOS05PV046Uk8tVkwKK1JPTUFOSUE6QlJBSUxBOlVOS05PV046Uk8tQlIKK1JPTUFOSUE6RElNQk9WSVRBOlVOS05PV046Uk8tREIKK1JPTUFOSUE6TUVIRURJTlRJOlVOS05PV046Uk8tTUgKK1JPTUFOSUE6SUFMT01JVEE6VU5LTk9XTjpSTy1JTAorUk9NQU5JQTpDQUxBUkFTSTpVTktOT1dOOlJPLUNBCitST01BTklBOkJVQ1VSRVNUSTpVTktOT1dOOlJPLUIKK1JPTUFOSUE6Q09OU1RBTlRBOlVOS05PV046Uk8tQ1QKK1JVU1NJQTpNT1VSTUFOU0tB70EgT0JMQVNUO1BFQ0hFTkdTS0lZOlVOS05PV046UlUtUENHCitSVVNTSUE6TkVORVRTS0kgTkFUSU9OQUwgT0tST1VHO05FTkVUU0tZIE5BVC4gT0tST1VHOlVOS05PV046UlUtTk5UCitSVVNTSUE6TU9VUk1BTlNLQe9BIE9CTEFTVDtLT0xTS0lZOlVOS05PV046UlUtS0xLCitSVVNTSUE6TU9VUk1BTlNLQe9BIE9CTEFTVDtTRVZFUk9NT1JTSzpVTktOT1dOOlJVLVNWTQorUlVTU0lBOk1PVVJNQU5TS0HvQSBPQkxBU1Q7UE9MWUFSTllJOlVOS05PV046UlUtUExSCitSVVNTSUE6TU9VUk1BTlNLQe9BIE9CTEFTVDtNVVJNQU5TSzpVTktOT1dOOlJVLU1STgorUlVTU0lBOk1PVVJNQU5TS0HvQSBPQkxBU1Q7TE9WT1pFUlNLSVk6VU5LTk9XTjpSVS1MVlIKK1JVU1NJQTpLT01JO1ZPUktVVEE6VU5LTk9XTjpSVS1WUlQKK1JVU1NJQTpNT1VSTUFOU0tB70EgT0JMQVNUO09MRU5FR09SU0s6VU5LTk9XTjpSVS1PTEcKK1JVU1NJQTpNT1VSTUFOU0tB70EgT0JMQVNUO01PTkNIRUdPUlNLOlVOS05PV046UlUtTU5HCitSVVNTSUE6TU9VUk1BTlNLQe9BIE9CTEFTVDtLT1ZET1JTS0lZOlVOS05PV046UlUtS1ZSCitSVVNTSUE6TU9VUk1BTlNLQe9BIE9CTEFTVDtLSVJPVlNLOlVOS05PV046UlUtS1JWCitSVVNTSUE6TU9VUk1BTlNLQe9BIE9CTEFTVDtBUEFUSVRZOlVOS05PV046UlUtQVBUCitSVVNTSUE6TkVORVRTS0kgTkFUSU9OQUwgT0tST1VHO05BUllBTi1NQVI6VU5LTk9XTjpSVS1OUk4KK1JVU1NJQTpNT1VSTUFOU0tB70EgT0JMQVNUO0tBTkRBTEFLU0hBOlVOS05PV046UlUtS05LCitSVVNTSUE6TU9VUk1BTlNLQe9BIE9CTEFTVDtQT0xZQVJOSVlFIFpPUlk6VU5LTk9XTjpSVS1QTFkKK1JVU1NJQTpNT1VSTUFOU0tB70EgT0JMQVNUO1RFUlNLSVk6VU5LTk9XTjpSVS1UUksKK1JVU1NJQTpLT01JO1VTVC1UU0lMRU1TS0lZOlVOS05PV046UlUtVVNMCitSVVNTSUE6S09NSTtVU0lOU0tJWTpVTktOT1dOOlJVLVVTUworUlVTU0lBOktPTUk7SU5UQTpVTktOT1dOOlJVLUlOVAorUlVTU0lBOktBUkVMSUE7TE9VS0hTS0lZOlVOS05PV046UlUtTFVTCitSVVNTSUE6QVJLSEFOR0VMU0tB70EgT0JMQVNUIFLpUztNRVpFTlNLSVk6VU5LTk9XTjpSVS1NWlMKK1JVU1NJQTpLT01JO0laSEVNU0tJWTpVTktOT1dOOlJVLUlaUworUlVTU0lBOktPTUk7VVNJTlNLOlVOS05PV046UlUtVVNOCitSVVNTSUE6S0FSRUxJQTtLRU1TS0lZOlVOS05PV046UlUtS01LCitSVVNTSUE6QVJLSEFOR0VMU0tB70EgT0JMQVNUIFLpUztQUklNT1JTS0lZOlVOS05PV046UlUtUFJSCitSVVNTSUE6S09NSTtQRUNIT1JTS0lZOlVOS05PV046UlUtUENSCitSVVNTSUE6S0FSRUxJQTtLQUxFVkFMU0tJWTpVTktOT1dOOlJVLUtMTAorUlVTU0lBOkFSS0hBTkdFTFNLQe9BIE9CTEFTVCBS6VM7TEVTSFVLT05TS0lZOlVOS05PV046UlUtTFNOCitSVVNTSUE6QVJLSEFOR0VMU0tB70EgT0JMQVNUIFLpUztQSU5FWkhTS0lZOlVOS05PV046UlUtUE5ICitSVVNTSUE6QVJLSEFOR0VMU0tB70EgT0JMQVNUIFLpUztTT0xPVkVUU0tJWTpVTktOT1dOOlJVLVNMVAorUlVTU0lBOktPTUk7UEVDSE9SQTpVTktOT1dOOlJVLVBDQQorUlVTU0lBOktBUkVMSUE7S0VNJzpVTktOT1dOOlJVLUtFTQorUlVTU0lBOktBUkVMSUE7QkVMT01PUlNLSVk6VU5LTk9XTjpSVS1CTFIKK1JVU1NJQTpLT01JO1VET1JTS0lZOlVOS05PV046UlUtVURTCitSVVNTSUE6QVJLSEFOR0VMU0tB70EgT0JMQVNUIFLpUztLSE9MTU9HT1JTS0lZOlVOS05PV046UlUtS0hSCitSVVNTSUE6S0FSRUxJQTtLT1NUT01VS1NIQTpVTktOT1dOOlJVLUtTSworUlVTU0lBOkFSS0hBTkdFTFNLQe9BIE9CTEFTVCBS6VM7QVJLSEFOR0VMU0s6VU5LTk9XTjpSVS1BUkcKK1JVU1NJQTpBUktIQU5HRUxTS0HvQSBPQkxBU1QgUulTO1NFVkVST0RWSU5TSzpVTktOT1dOOlJVLVNWRAorUlVTU0lBOkFSS0hBTkdFTFNLQe9BIE9CTEFTVCBS6VM7T05FWkhTS0lZOlVOS05PV046UlUtT05TCitSVVNTSUE6S09NSTtLTllBWkhQT0dPU1RTS0lZOlVOS05PV046UlUtS05HCitSVVNTSUE6S0FSRUxJQTtNVVlFWkVSU0tJWTpVTktOT1dOOlJVLU1ZUgorUlVTU0lBOktPTUk7U09TTk9HT1JTS0lZOlVOS05PV046UlUtU1NSCitSVVNTSUE6S09NSTtVS0hUQTpVTktOT1dOOlJVLVVLVAorUlVTU0lBOkFSS0hBTkdFTFNLQe9BIE9CTEFTVCBS6VM7Tk9WT0RWSU5TSzpVTktOT1dOOlJVLU5WVgorUlVTU0lBOktBUkVMSUE7U0VHRVpIU0tJWTpVTktOT1dOOlJVLVNHSAorUlVTU0lBOkFSS0hBTkdFTFNLQe9BIE9CTEFTVCBS6VM7UExFU0VUU0tJWTpVTktOT1dOOlJVLVBMVAorUlVTU0lBOkFSS0hBTkdFTFNLQe9BIE9CTEFTVCBS6VM7T05FR0E6VU5LTk9XTjpSVS1PTkcKK1JVU1NJQTpLT01JO1ZVS1RZTFNLSVk6VU5LTk9XTjpSVS1WS0wKK1JVU1NJQTpLQVJFTElBO01FRFZFWkhZRUdPUlNLSVk6VU5LTk9XTjpSVS1NREcKK1JVU1NJQTpLQVJFTElBO1NFR0VaSEE6VU5LTk9XTjpSVS1TR1oKK1JVU1NJQTpLT01JO1RST0lUU0tPLVBFQ0hPUlNLSVk6VU5LTk9XTjpSVS1UUkMKK1JVU1NJQTpBUktIQU5HRUxTS0HvQSBPQkxBU1QgUulTO1ZJTk9HUkFET1ZTS0lZOlVOS05PV046UlUtVk5ECitSVVNTSUE6S09NSTtTT1NOT0dPUlNLOlVOS05PV046UlUtU1NHCitSVVNTSUE6QVJLSEFOR0VMU0tB70EgT0JMQVNUIFLpUztWRVJLSE5FVE9ZRU1TS0lZOlVOS05PV046UlUtVlJZCitSVVNTSUE6S0FSRUxJQTtTVU9ZQVJWU0tJWTpVTktOT1dOOlJVLVNPVgorUlVTU0lBOktBUkVMSUE7S09ORE9QT1pIU0tJWTpVTktOT1dOOlJVLUtOWgorUlVTU0lBOktPTUk7S09SVEtFUk9TU0tJWTpVTktOT1dOOlJVLUtSUworUlVTU0lBOkFSS0hBTkdFTFNLQe9BIE9CTEFTVCBS6VM7TEVOU0tJWTpVTktOT1dOOlJVLUxOSworUlVTU0lBOktBUkVMSUE7UFVET1pIU0tJWTpVTktOT1dOOlJVLVBESAorUlVTU0lBOktPTUk7VVNULVZZTVNLSVk6VU5LTk9XTjpSVS1VU00KK1JVU1NJQTpLT01JO1VTVC1LVUxPTVNLSVk6VU5LTk9XTjpSVS1VU0sKK1JVU1NJQTpBUktIQU5HRUxTS0HvQSBPQkxBU1QgUulTO1NIRU5LVVJTS0lZOlVOS05PV046UlUtU0hSCitSVVNTSUE6QVJLSEFOR0VMU0tB70EgT0JMQVNUIFLpUztOWUFORE9NU0tJWTpVTktOT1dOOlJVLU5ZTQorUlVTU0lBOkFSS0hBTkdFTFNLQe9BIE9CTEFTVCBS6VM7S1JBU05PQk9SU0tJWTpVTktOT1dOOlJVLUtSUgorUlVTU0lBOktBUkVMSUE7S09ORE9QT0dBOlVOS05PV046UlUtS05QCitSVVNTSUE6S0FSRUxJQTtTT1JUQVZBTEE6VU5LTk9XTjpSVS1TUlYKK1JVU1NJQTpLT01JO1NZS1RZVkRJTlNLSVk6VU5LTk9XTjpSVS1TWU4KK1JVU1NJQTpBUktIQU5HRUxTS0HvQSBPQkxBU1QgUulTO0tBUkdBUE9MU0tJWTpVTktOT1dOOlJVLUtSTAorUlVTU0lBOktBUkVMSUE7UFJZQVpISU5TS0lZOlVOS05PV046UlUtUFJOCitSVVNTSUE6S0FSRUxJQTtQUklPTkVaSFNLSVk6VU5LTk9XTjpSVS1QUloKK1JVU1NJQTpBUktIQU5HRUxTS0HvQSBPQkxBU1QgUulTO1ZFTFNLSVk6VU5LTk9XTjpSVS1WTEsKK1JVU1NJQTpLQVJFTElBO1BJVEtZQVJBTlRTS0lZOlVOS05PV046UlUtUFROCitSVVNTSUE6QVJLSEFOR0VMU0tB70EgT0JMQVNUIFLpUztVU1RZQU5TS0lZOlVOS05PV046UlUtVVNJCitSVVNTSUE6QVJLSEFOR0VMU0tB70EgT0JMQVNUIFLpUztLT1RMQVNTS0lZOlVOS05PV046UlUtS1RTCitSVVNTSUE6S09NSTtTWUtUWVZLVkFSOlVOS05PV046UlUtU1lWCitSVVNTSUE6S0FSRUxJQTtQRVRST1pBVk9EU0s6VU5LTk9XTjpSVS1QVFYKK1JVU1NJQTpLQVJFTElBO0xBS0hERU5QT0tIU0tJWTpVTktOT1dOOlJVLUxLSworUlVTU0lBOkFSS0hBTkdFTFNLQe9BIE9CTEFTVCBS6VM7VklMRUdPRFNLSVk6VU5LTk9XTjpSVS1WTEQKK1JVU1NJQTpLQVJFTElBO1BZVEtJQVJBTlRBOlVOS05PV046UlUtUFlSCitSVVNTSUE6Vk9MT0dPRFNLQe9BIE9CTEFTVDtWWVRFR09SU0tJWTpVTktOT1dOOlJVLVZZUgorUlVTU0lBOktPTUk7U1lTT0xTS0lZOlVOS05PV046UlUtU1lTCitSVVNTSUE6S0FSRUxJQTtPTE9ORVRTS0lZOlVOS05PV046UlUtT0xUCitSVVNTSUE6QVJLSEFOR0VMU0tB70EgT0JMQVNUIFLpUztLT05PU0hTS0lZOlVOS05PV046UlUtS05ICitSVVNTSUE6QVJLSEFOR0VMU0tB70EgT0JMQVNUIFLpUztLT1JZQVpITUE6VU5LTk9XTjpSVS1LUloKK1JVU1NJQTpBUktIQU5HRUxTS0HvQSBPQkxBU1QgUulTO0tPVExBUzpVTktOT1dOOlJVLUtPTAorUlVTU0lBOlZPTE9HT0RTS0HvQSBPQkxBU1Q7VkVMSUtPVVNUWVVHU0tJWTpVTktOT1dOOlJVLVZMVAorUlVTU0lBOktPTUk7UFJJTFVaU0tJWTpVTktOT1dOOlJVLVBSUworUlVTU0lBOlZPTE9HT0RTS0HvQSBPQkxBU1Q7VEFSTk9HU0tJWTpVTktOT1dOOlJVLVRSRworUlVTU0lBOktPTUk7S09ZR09ST0RTS0lZOlVOS05PV046UlUtS1lECitSVVNTSUE6Vk9MT0dPRFNLQe9BIE9CTEFTVDtOWVVLU0VOU0tJWTpVTktOT1dOOlJVLU5ZTgorUlVTU0lBOlZPTE9HT0RTS0HvQSBPQkxBU1Q7VkVSS0hPVkFaSFNLSVk6VU5LTk9XTjpSVS1WUloKK1JVU1NJQTpWT0xPR09EU0tB70EgT0JMQVNUO0tJUklMTE9WU0tJWTpVTktOT1dOOlJVLUtSSworUlVTU0lBOlZPTE9HT0RTS0HvQSBPQkxBU1Q7VkVMSUtJWSBVU1RZVUc6VU5LTk9XTjpSVS1WTCAKK1JVU1NJQTpWT0xPR09EU0tB70EgT0JMQVNUO1ZPWkhFR09EU0tJWTpVTktOT1dOOlJVLVZaRAorUlVTU0lBOlZPTE9HT0RTS0HvQSBPQkxBU1Q7VkFTSEtJTlNLSVk6VU5LTk9XTjpSVS1WU04KK1JVU1NJQTpWT0xPR09EU0tB70EgT0JMQVNUO0JFTE9aRVJTS0lZOlVOS05PV046UlUtQkxTCitSVVNTSUE6Vk9MT0dPRFNLQe9BIE9CTEFTVDtCQUJBWUVWU0tJWTpVTktOT1dOOlJVLUJCVgorUlVTU0lBOlZPTE9HT0RTS0HvQSBPQkxBU1Q7S0lDSE1FTkdTS08gR09ST0RFVFNLSVk6VU5LTk9XTjpSVS1LQ0cKK1JVU1NJQTpWT0xPR09EU0tB70EgT0JMQVNUO0tIQVJPVlNLSVk6VU5LTk9XTjpSVS1LSFYKK1JVU1NJQTpWT0xPR09EU0tB70EgT0JMQVNUO1RPVEVNU0tJWTpVTktOT1dOOlJVLVRUUworUlVTU0lBOlZPTE9HT0RTS0HvQSBPQkxBU1Q7U1lBTVpIRU5TS0lZOlVOS05PV046UlUtU1lLCitSVVNTSUE6Vk9MT0dPRFNLQe9BIE9CTEFTVDtVQ1QtS1VCSU5TS0lZOlVOS05PV046UlUtVUNOCitSVVNTSUE6Vk9MT0dPRFNLQe9BIE9CTEFTVDtCQUJVU0hLSU5TS0lZOlVOS05PV046UlUtQkJOCitSVVNTSUE6Vk9MT0dPRFNLQe9BIE9CTEFTVDtOSUtPTFNLSVk6VU5LTk9XTjpSVS1OS1MKK1JVU1NJQTpWT0xPR09EU0tB70EgT0JMQVNUO1ZPTE9HT0RTS0lZOlVOS05PV046UlUtVkxTCitSVVNTSUE6Vk9MT0dPRFNLQe9BIE9CTEFTVDtTT0tPTFNLSVk6VU5LTk9XTjpSVS1TS1MKK1JVU1NJQTpWT0xPR09EU0tB70EgT0JMQVNUO0tBRFVZU0tJWTpVTktOT1dOOlJVLUtEUworUlVTU0lBOlZPTE9HT0RTS0HvQSBPQkxBU1Q7Q0hFUkVQT1ZFVFNLSVk6VU5LTk9XTjpSVS1DSFYKK1JVU1NJQTpWT0xPR09EU0tB70EgT0JMQVNUO1NIRUtTTklOU0tJWTpVTktOT1dOOlJVLVNITgorUlVTU0lBOlZPTE9HT0RTS0HvQSBPQkxBU1Q7TUVaSERVUkVDSEVOU0tJWTpVTktOT1dOOlJVLU1aQworUlVTU0lBOlZPTE9HT0RTS0HvQSBPQkxBU1Q7U09LT0w6VU5LTk9XTjpSVS1TT0wKK1JVU1NJQTpWT0xPR09EU0tB70EgT0JMQVNUO0NIQUdPREVTQ0hFTlNLSVk6VU5LTk9XTjpSVS1DSEMKK1JVU1NJQTpWT0xPR09EU0tB70EgT0JMQVNUO1ZPTE9HREE6VU5LTk9XTjpSVS1WTEcKK1JVU1NJQTpWT0xPR09EU0tB70EgT0JMQVNUO1VTVFlVWkhFTlNLSVk6VU5LTk9XTjpSVS1VU1kKK1JVU1NJQTpWT0xPR09EU0tB70EgT0JMQVNUO0NIRVJFUE9WRVRaOlVOS05PV046UlUtQ0hFCitSVVNTSUE6Vk9MT0dPRFNLQe9BIE9CTEFTVDtHUllBWk9WRVRTS0lZOlVOS05PV046UlUtR1JUCitSVVNTSUE6VEFNQk9WU0tB70EgT0JMQVNUO01PUlNIQU5TS0lZOlVOS05PV046UlUtTVJTCitSVVNTSUE6TElQRVRTS0HvQSBPQkxBU1Q7Q0hBUExZR0lOU0tJWTpVTktOT1dOOlJVLUNITgorUlVTU0lBOkxJUEVUU0tB70EgT0JMQVNUO0RBTktPVlNLSVk6VU5LTk9XTjpSVS1ETlYKK1JVU1NJQTpUQU1CT1ZTS0HvQSBPQkxBU1Q7U1RBUk9ZVVJZRVZTS0lZOlVOS05PV046UlUtU1RZCitSVVNTSUE6VEFNQk9WU0tB70EgT0JMQVNUO1NPU05PVlNLSVk6VU5LTk9XTjpSVS1TU1YKK1JVU1NJQTpUQU1CT1ZTS0HvQSBPQkxBU1Q7TU9SU0hBTlNLOlVOS05PV046UlUtTVJLCitSVVNTSUE6TElQRVRTS0HvQSBPQkxBU1Q7TEVWIC1UT0xTVE9WU0tJWTpVTktOT1dOOlJVLUxWUworUlVTU0lBOlRBTUJPVlNLQe9BIE9CTEFTVDtQRVJWT01BWVNLSVk6VU5LTk9XTjpSVS1QUlkKK1JVU1NJQTpUQU1CT1ZTS0HvQSBPQkxBU1Q7UElDSEFZRVZTS0lZOlVOS05PV046UlUtUENWCitSVVNTSUE6TElQRVRTS0HvQSBPQkxBU1Q7REFOS09WOlVOS05PV046UlUtREFLCitSVVNTSUE6VEFNQk9WU0tB70EgT0JMQVNUO01JQ0hVUklOU0tJWTpVTktOT1dOOlJVLU1DTgorUlVTU0lBOlRBTUJPVlNLQe9BIE9CTEFTVDtOSUtJRk9ST1ZTS0lZOlVOS05PV046UlUtTktWCitSVVNTSUE6TElQRVRTS0HvQSBPQkxBU1Q7TEVCRURZQU5TS0lZOlVOS05PV046UlUtTEJOCitSVVNTSUE6VEFNQk9WU0tB70EgT0JMQVNUO0JPTkRBUlNLSVk6VU5LTk9XTjpSVS1CTlIKK1JVU1NJQTpUQU1CT1ZTS0HvQSBPQkxBU1Q7R0FWUklMT1ZTS0lZOlVOS05PV046UlUtR1ZWCitSVVNTSUE6VEFNQk9WU0tB70EgT0JMQVNUO1RBTUJPVlNLSVk6VU5LTk9XTjpSVS1UTVYKK1JVU1NJQTpMSVBFVFNLQe9BIE9CTEFTVDtLUkFTTklOU0tJWTpVTktOT1dOOlJVLUtSTgorUlVTU0lBOkxJUEVUU0tB70EgT0JMQVNUO0RPQlJPVlNLSVk6VU5LTk9XTjpSVS1EQlYKK1JVU1NJQTpMSVBFVFNLQe9BIE9CTEFTVDtTVEFOT1ZMWUFOU0tJWTpVTktOT1dOOlJVLVNUQQorUlVTU0lBOlRBTUJPVlNLQe9BIE9CTEFTVDtNSUNIVVJJTlNLOlVOS05PV046UlUtTUNSCitSVVNTSUE6VEFNQk9WU0tB70EgT0JMQVNUO0tJUlNBTk9WU0tJWTpVTktOT1dOOlJVLUtSSQorUlVTU0lBOlRBTUJPVlNLQe9BIE9CTEFTVDtSQVNTS0FaT1ZTS0lZOlVOS05PV046UlUtUlNWCitSVVNTSUE6TElQRVRTS0HvQSBPQkxBU1Q7SVpNQUxLT1ZTS0lZOlVOS05PV046UlUtSVpWCitSVVNTSUE6VEFNQk9WU0tB70EgT0JMQVNUO1VNRVRTS0lZOlVOS05PV046UlUtVU1TCitSVVNTSUE6TElQRVRTS0HvQSBPQkxBU1Q7TElQRVRTS0lZOlVOS05PV046UlUtTFBTCitSVVNTSUE6VEFNQk9WU0tB70EgT0JMQVNUO1BFVFJPVlNLSVk6VU5LTk9XTjpSVS1QVFMKK1JVU1NJQTpMSVBFVFNLQe9BIE9CTEFTVDtaQURPTlNLSVk6VU5LTk9XTjpSVS1aRFMKK1JVU1NJQTpMSVBFVFNLQe9BIE9CTEFTVDtZRUxFVFNLSVk6VU5LTk9XTjpSVS1ZTFMKK1JVU1NJQTpUQU1CT1ZTS0HvQSBPQkxBU1Q7VEFNQk9WOlVOS05PV046UlUtVEFCCitSVVNTSUE6TElQRVRTS0HvQSBPQkxBU1Q7TElQRVRTSzpVTktOT1dOOlJVLUxQVAorUlVTU0lBOkxJUEVUU0tB70EgT0JMQVNUO0dSWUFaSU5TS0lZOlVOS05PV046UlUtR1JOCitSVVNTSUE6VEFNQk9WU0tB70EgT0JMQVNUO1JBU1NLQVpPVk86VU5LTk9XTjpSVS1SU1oKK1JVU1NJQTpUQU1CT1ZTS0HvQSBPQkxBU1Q7S0lSU0FOT1ZPOlVOS05PV046UlUtS1JPCitSVVNTSUE6TElQRVRTS0HvQSBPQkxBU1Q7RUxFVFo6VU5LTk9XTjpSVS1FTFQKK1JVU1NJQTpUQU1CT1ZTS0HvQSBPQkxBU1Q7S09UT1ZTSzpVTktOT1dOOlJVLUtUVgorUlVTU0lBOlRBTUJPVlNLQe9BIE9CTEFTVDtaTkFNRU5TS0lZOlVOS05PV046UlUtWk5OCitSVVNTSUE6VEFNQk9WU0tB70EgT0JMQVNUO0lOWkhBVklOU0tJWTpVTktOT1dOOlJVLUlOTgorUlVTU0lBOkxJUEVUU0tB70EgT0JMQVNUO0dSWUFaWTpVTktOT1dOOlJVLUdSWgorUlVTU0lBOkxJUEVUU0tB70EgT0JMQVNUO0RPTEdPUlVLT1ZTS0lZOlVOS05PV046UlUtRExLCitSVVNTSUE6TElQRVRTS0HvQSBPQkxBU1Q7RE9CUklOU0tJWTpVTktOT1dOOlJVLURCTgorUlVTU0lBOlRBTUJPVlNLQe9BIE9CTEFTVDtNT1JET1ZTS0lZOlVOS05PV046UlUtTVJWCitSVVNTSUE6VEFNQk9WU0tB70EgT0JMQVNUO1NBTVBVUlNLSVk6VU5LTk9XTjpSVS1TTVIKK1JVU1NJQTpUQU1CT1ZTS0HvQSBPQkxBU1Q7UlpIQUtTSU5TS0lZOlVOS05PV046UlUtUlpOCitSVVNTSUE6S09VUlNLQe9BIE9CTEFTVDtaSEVMRVpOT0dPUlNLSVk6VU5LTk9XTjpSVS1aSEcKK1JVU1NJQTpLT1VSU0tB70EgT0JMQVNUO1BPTllST1ZTS0lZOlVOS05PV046UlUtUE5WCitSVVNTSUE6S09VUlNLQe9BIE9CTEFTVDtETUlUUklZRVZTS0lZOlVOS05PV046UlUtRE1WCitSVVNTSUE6TElQRVRTS0HvQSBPQkxBU1Q7VVNNQU5TS0lZOlVOS05PV046UlUtVVMgCitSVVNTSUE6TElQRVRTS0HvQSBPQkxBU1Q7S0hMRVZFTlNLSVk6VU5LTk9XTjpSVS1LSE4KK1JVU1NJQTpLT1VSU0tB70EgT0JMQVNUO0ZBVEVaSFNLSVk6VU5LTk9XTjpSVS1GVEgKK1JVU1NJQTpMSVBFVFNLQe9BIE9CTEFTVDtURVJCVU5TS0lZOlVOS05PV046UlUtVFJOCitSVVNTSUE6VEFNQk9WU0tB70EgT0JMQVNUO1RPS0FSRVZTS0lZOlVOS05PV046UlUtVEtWCitSVVNTSUE6TElQRVRTS0HvQSBPQkxBU1Q7Vk9MT1ZTS0lZOlVOS05PV046UlUtVkxJCitSVVNTSUE6S09VUlNLQe9BIE9CTEFTVDtaT0xPVFVLSElOU0tJWTpVTktOT1dOOlJVLVpMSAorUlVTU0lBOlRBTUJPVlNLQe9BIE9CTEFTVDtVVkFST1ZTS0lZOlVOS05PV046UlUtVVZWCitSVVNTSUE6S09VUlNLQe9BIE9CTEFTVDtTQ0hJR1JPVlNLSVk6VU5LTk9XTjpSVS1TQ1YKK1JVU1NJQTpWT1JPTkVKU0tB70EgT0JMQVNUO1JBTU9OU0tJWTpVTktOT1dOOlJVLVJNUworUlVTU0lBOlRBTUJPVlNLQe9BIE9CTEFTVDtNVUNIS0FQU0tJWTpVTktOT1dOOlJVLU1DUAorUlVTU0lBOlZPUk9ORUpTS0HvQSBPQkxBU1Q7U0VNSUxVS1NLSVk6VU5LTk9XTjpSVS1TTUsKK1JVU1NJQTpUQU1CT1ZTS0HvQSBPQkxBU1Q7WkhFUkRFVlNLSVk6VU5LTk9XTjpSVS1aSFYKK1JVU1NJQTpLT1VSU0tB70EgT0JMQVNUO0NIRVJFTUlTSU5PVlNLSVk6VU5LTk9XTjpSVS1DSE8KK1JVU1NJQTpLT1VSU0tB70EgT0JMQVNUO0tIT01VVE9WU0tJWTpVTktOT1dOOlJVLUtIUworUlVTU0lBOlRBTUJPVlNLQe9BIE9CTEFTVDtVVkFST1ZPOlVOS05PV046UlUtVVZPCitSVVNTSUE6S09VUlNLQe9BIE9CTEFTVDtLT05ZU0hFVlNLSVk6VU5LTk9XTjpSVS1LTlYKK1JVU1NJQTpLT1VSU0tB70EgT0JMQVNUO1NPVkVUU0tJWTpVTktOT1dOOlJVLVNWUworUlVTU0lBOktPVVJTS0HvQSBPQkxBU1Q7S0FTVE9SRU5TS0lZOlVOS05PV046UlUtS1NOCitSVVNTSUE6Vk9ST05FSlNLQe9BIE9CTEFTVDtWRVJLSE5FS0hBVlNLSVk6VU5LTk9XTjpSVS1WUkgKK1JVU1NJQTpWT1JPTkVKU0tB70EgT0JMQVNUO0VSVElMU0tJWTpVTktOT1dOOlJVLUVSUworUlVTU0lBOktPVVJTS0HvQSBPQkxBU1Q7S1VSU0tJWTpVTktOT1dOOlJVLUtSWQorUlVTU0lBOktPVVJTS0HvQSBPQkxBU1Q7VFNDSElHUlk6VU5LTk9XTjpSVS1UU0cKK1JVU1NJQTpLT1VSU0tB70EgT0JMQVNUO0tVUkNIQVRPVlNLSVk6VU5LTk9XTjpSVS1LUiAKK1JVU1NJQTpWT1JPTkVKU0tB70EgT0JMQVNUO1ZPUk9ORVpIOlVOS05PV046UlUtVlJOCitSVVNTSUE6S09VUlNLQe9BIE9CTEFTVDtPS1RZQUJSU0tJWTpVTktOT1dOOlJVLU9LUgorUlVTU0lBOlZPUk9ORUpTS0HvQSBPQkxBU1Q7Tk9WT1VTTUFOU0tJWTpVTktOT1dOOlJVLU5WTgorUlVTU0lBOlZPUk9ORUpTS0HvQSBPQkxBU1Q7UEFOSU5TS0lZOlVOS05PV046UlUtUE5TCitSVVNTSUE6S09VUlNLQe9BIE9CTEFTVDtMJ0dPVlNLWTpVTktOT1dOOlJVLUxHVgorUlVTU0lBOktPVVJTS0HvQSBPQkxBU1Q7S1VSU0s6VU5LTk9XTjpSVS1LVVMKK1JVU1NJQTpLT1VSU0tB70EgT0JMQVNUO1RJTVNLSVk6VU5LTk9XTjpSVS1UTUsKK1JVU1NJQTpLT1VSU0tB70EgT0JMQVNUO1JZTFNLSVk6VU5LTk9XTjpSVS1SWUsKK1JVU1NJQTpWT1JPTkVKU0tB70EgT0JMQVNUO05JWkhORURFVklUU0tJWTpVTktOT1dOOlJVLU5aVgorUlVTU0lBOlZPUk9ORUpTS0HvQSBPQkxBU1Q7VEVSTk9WU0tJWTpVTktOT1dOOlJVLVRSVgorUlVTU0lBOlZPUk9ORUpTS0HvQSBPQkxBU1Q7R1JJQkFOT1ZTS0lZOlVOS05PV046UlUtR1JWCitSVVNTSUE6Vk9ST05FSlNLQe9BIE9CTEFTVDtCT1JJU09HTEVCU0tJWTpVTktOT1dOOlJVLUJSTAorUlVTU0lBOlZPUk9ORUpTS0HvQSBPQkxBU1Q7S0hPS0hPTFNLSVk6VU5LTk9XTjpSVS1LSEwKK1JVU1NJQTpLT1VSU0tB70EgT0JMQVNUO0xHT1Y6VU5LTk9XTjpSVS1MRyAKK1JVU1NJQTpWT1JPTkVKU0tB70EgT0JMQVNUO0FOTklOU0tJWTpVTktOT1dOOlJVLUFOUworUlVTU0lBOktPVVJTS0HvQSBPQkxBU1Q7S1VSQ0hBVE9WOlVOS05PV046UlUtS1JUCitSVVNTSUE6S09VUlNLQe9BIE9CTEFTVDtTT0xOVFNFVlNLSVk6VU5LTk9XTjpSVS1TTFYKK1JVU1NJQTpLT1VSU0tB70EgT0JMQVNUO0dPUlNIRUNIRU5TS0lZOlVOS05PV046UlUtR1JICitSVVNTSUE6S09VUlNLQe9BIE9CTEFTVDtNRURWRU5TS0lZOlVOS05PV046UlUtTUROCitSVVNTSUE6S09VUlNLQe9BIE9CTEFTVDtNQU5UVVJPVlNLSVk6VU5LTk9XTjpSVS1NTlYKK1JVU1NJQTpLT1VSU0tB70EgT0JMQVNUO0JPTFNIRVNPTERBVFNLSVk6VU5LTk9XTjpSVS1CTEwKK1JVU1NJQTpLT1VSU0tB70EgT0JMQVNUO0tPUkVORVZTS0lZOlVOS05PV046UlUtS1IxCitSVVNTSUE6S09VUlNLQe9BIE9CTEFTVDtHTFVTSEtPVlNLSVk6VU5LTk9XTjpSVS1HTFYKK1JVU1NJQTpWT1JPTkVKU0tB70EgT0JMQVNUO0tBU0hJUlNLSVk6VU5LTk9XTjpSVS1LU1IKK1JVU1NJQTpWT1JPTkVKU0tB70EgT0JMQVNUO1BPVk9SSU5TS0lZOlVOS05PV046UlUtUFZOCitSVVNTSUE6S09VUlNLQe9BIE9CTEFTVDtTVURaSEFOU0tJWTpVTktOT1dOOlJVLVNETgorUlVTU0lBOkJFTEdPUk9EU0tB70EgT0JMQVNUO0dVQktJTlNLSVk6VU5LTk9XTjpSVS1HQk4KK1JVU1NJQTpCRUxHT1JPRFNLQe9BIE9CTEFTVDtTVEFST09TS09MU0tJWTpVTktOT1dOOlJVLVNUSworUlVTU0lBOlZPUk9ORUpTS0HvQSBPQkxBU1Q7Tk9WT0tIT1BFUlNLSVk6VU5LTk9XTjpSVS1OVlAKK1JVU1NJQTpWT1JPTkVKU0tB70EgT0JMQVNUO0JPUklTT0dMRUJTSzpVTktOT1dOOlJVLUJSRworUlVTU0lBOlZPUk9ORUpTS0HvQSBPQkxBU1Q7Qk9CUk9WU0tJWTpVTktOT1dOOlJVLUJCUworUlVTU0lBOktPVVJTS0HvQSBPQkxBU1Q7T0JPWUFOU0tJWTpVTktOT1dOOlJVLU9CTgorUlVTU0lBOktPVVJTS0HvQSBPQkxBU1Q7UFJJU1RFTlNLSVk6VU5LTk9XTjpSVS1QUksKK1JVU1NJQTpWT1JPTkVKU0tB70EgT0JMQVNUO1RBTE9WU0tJWTpVTktOT1dOOlJVLVRMUworUlVTU0lBOkJFTEdPUk9EU0tB70EgT0JMQVNUO1NUQVJZSSBPU0tPTDpVTktOT1dOOlJVLVNUIAorUlVTU0lBOlZPUk9ORUpTS0HvQSBPQkxBU1Q7UkVQSVlFVktBOlVOS05PV046UlUtUlBWCitSVVNTSUE6QkVMR09ST0RTS0HvQSBPQkxBU1Q7R1VCS0lOOlVOS05PV046UlUtR1VLCitSVVNTSUE6Vk9ST05FSlNLQe9BIE9CTEFTVDtMSVNLSU5TS0lZOlVOS05PV046UlUtTFNTCitSVVNTSUE6S09VUlNLQe9BIE9CTEFTVDtCRUxPVlNLSVk6VU5LTk9XTjpSVS1CTEsKK1JVU1NJQTpWT1JPTkVKU0tB70EgT0JMQVNUO09TVFJPR09aSFNLSVk6VU5LTk9XTjpSVS1PU1oKK1JVU1NJQTpCRUxHT1JPRFNLQe9BIE9CTEFTVDtQUk9LSE9ST1ZTS0lZOlVOS05PV046UlUtUFJWCitSVVNTSUE6Vk9ST05FSlNLQe9BIE9CTEFTVDtQT1ZPUklOTzpVTktOT1dOOlJVLVBWUgorUlVTU0lBOkJFTEdPUk9EU0tB70EgT0JMQVNUO0lWTllBTlNLSVk6VU5LTk9XTjpSVS1JVk4KK1JVU1NJQTpCRUxHT1JPRFNLQe9BIE9CTEFTVDtDSEVSTllBTlNLSVk6VU5LTk9XTjpSVS1DSFMKK1JVU1NJQTpWT1JPTkVKU0tB70EgT0JMQVNUO0xJU0tJOlVOS05PV046UlUtTElLCitSVVNTSUE6QkVMR09ST0RTS0HvQSBPQkxBU1Q7UkFLSVRZQU5TS0lZOlVOS05PV046UlUtUktOCitSVVNTSUE6Vk9ST05FSlNLQe9BIE9CTEFTVDtCVVRVUkxJTk9WU0tJWTpVTktOT1dOOlJVLUJUTgorUlVTU0lBOkJFTEdPUk9EU0tB70EgT0JMQVNUO0tPUk9DSEFOU0tJWTpVTktOT1dOOlJVLUtSMgorUlVTU0lBOkJFTEdPUk9EU0tB70EgT0JMQVNUO0tSQVNOT1lBUlVaU0hTS1k6VU5LTk9XTjpSVS1LUlUKK1JVU1NJQTpCRUxHT1JPRFNLQe9BIE9CTEFTVDtZQUtPVkxFVlNLSVk6VU5LTk9XTjpSVS1ZS1YKK1JVU1NJQTpCRUxHT1JPRFNLQe9BIE9CTEFTVDtOT1ZPT1NLT0xTS0lZOlVOS05PV046UlUtTlZMCitSVVNTSUE6Vk9ST05FSlNLQe9BIE9CTEFTVDtPU1RST0dPWkhTSzpVTktOT1dOOlJVLU9TSAorUlVTU0lBOkJFTEdPUk9EU0tB70EgT0JMQVNUO0tSQVNOT0dWQVJERVlTS0lZOlVOS05PV046UlUtS1JECitSVVNTSUE6Vk9ST05FSlNLQe9BIE9CTEFTVDtWT1JPQllPVlNLSVk6VU5LTk9XTjpSVS1WUlYKK1JVU1NJQTpWT1JPTkVKU0tB70EgT0JMQVNUO0tBTUVOU0tJWTpVTktOT1dOOlJVLUtNUworUlVTU0lBOlZPUk9ORUpTS0HvQSBPQkxBU1Q7UEFWTE9WU0tJWTpVTktOT1dOOlJVLVBWVgorUlVTU0lBOkJFTEdPUk9EU0tB70EgT0JMQVNUO0JFTEdPUk9EU0tJWTpVTktOT1dOOlJVLUJMRAorUlVTU0lBOkJFTEdPUk9EU0tB70EgT0JMQVNUO0JPUklTT1ZTS0lZOlVOS05PV046UlUtQlJWCitSVVNTSUE6Vk9ST05FSlNLQe9BIE9CTEFTVDtQT0RHT1JFTlNLSVk6VU5LTk9XTjpSVS1QRE4KK1JVU1NJQTpCRUxHT1JPRFNLQe9BIE9CTEFTVDtBTEVLU0VZRVZTS0lZOlVOS05PV046UlUtQUxWCitSVVNTSUE6QkVMR09ST0RTS0HvQSBPQkxBU1Q7U0hFQkVLSU5TS0lZOlVOS05PV046UlUtU0hTCitSVVNTSUE6QkVMR09ST0RTS0HvQSBPQkxBU1Q7R1JBSVZPUk9OU0tJWTpVTktOT1dOOlJVLUdSUworUlVTU0lBOlZPUk9ORUpTS0HvQSBPQkxBU1Q7S0FMQUNIRVlFVlNLSVk6VU5LTk9XTjpSVS1LTFkKK1JVU1NJQTpCRUxHT1JPRFNLQe9BIE9CTEFTVDtBTEVLU0VFVktBOlVOS05PV046UlUtQUxFCitSVVNTSUE6QkVMR09ST0RTS0HvQSBPQkxBU1Q7QkVMR09ST0Q6VU5LTk9XTjpSVS1CTE8KK1JVU1NJQTpCRUxHT1JPRFNLQe9BIE9CTEFTVDtWT0xPS09OT1ZTS0lZOlVOS05PV046UlUtVkxWCitSVVNTSUE6Vk9ST05FSlNLQe9BIE9CTEFTVDtPTEtIT1ZBVFNLSVk6VU5LTk9XTjpSVS1PTFMKK1JVU1NJQTpWT1JPTkVKU0tB70EgT0JMQVNUO1ZFUktITkVNQU1PTlNLSVk6VU5LTk9XTjpSVS1WUk0KK1JVU1NJQTpCRUxHT1JPRFNLQe9BIE9CTEFTVDtTSEVCRUtJTk86VU5LTk9XTjpSVS1TSEsKK1JVU1NJQTpCRUxHT1JPRFNLQe9BIE9CTEFTVDtWQUxVWVNLSVk6VU5LTk9XTjpSVS1WTFkKK1JVU1NJQTpWT1JPTkVKU0tB70EgT0JMQVNUO1JPU1NPU0hBTlNLSVk6VU5LTk9XTjpSVS1SU04KK1JVU1NJQTpCRUxHT1JPRFNLQe9BIE9CTEFTVDtWRVlERUxFVlNLSVk6VU5LTk9XTjpSVS1WWVYKK1JVU1NJQTpWT1JPTkVKU0tB70EgT0JMQVNUO1BFVFJPUEFWTE9WU0tJWTpVTktOT1dOOlJVLVBUTAorUlVTU0lBOkJFTEdPUk9EU0tB70EgT0JMQVNUO1JPVkVOU0tJWTpVTktOT1dOOlJVLVJWUworUlVTU0lBOlZPUk9ORUpTS0HvQSBPQkxBU1Q7Uk9TU09TSDpVTktOT1dOOlJVLVJTUworUlVTU0lBOkJFTEdPUk9EU0tB70EgT0JMQVNUO1ZBTFVJS1k6VU5LTk9XTjpSVS1WTDEKK1JVU1NJQTpWT1JPTkVKU0tB70EgT0JMQVNUO0JPR1VDSEFSU0tJWTpVTktOT1dOOlJVLUJHUgorUlVTU0lBOlZPUk9ORUpTS0HvQSBPQkxBU1Q7S0FOVEVNSVJPVlNLSVk6VU5LTk9XTjpSVS1LTlIKK1JVU1NJQTpZQUtPVVRJQS1TQUhBIFJFU1BPVUJMSUtBO0FOQUJBUlNLSVk6VU5LTk9XTjpSVS1BTlIKK1JVU1NJQTpZQUtPVVRJQS1TQUhBIFJFU1BPVUJMSUtBO0JVTFVOU0tJWTpVTktOT1dOOlJVLUJMSQorUlVTU0lBOllBS09VVElBLVNBSEEgUkVTUE9VQkxJS0E7VVNULVlBTlNLSVk6VU5LTk9XTjpSVS1VUzEKK1JVU1NJQTpZQUtPVVRJQS1TQUhBIFJFU1BPVUJMSUtBO0FMTEFJS0hPVlNLSVk6VU5LTk9XTjpSVS1BTFMKK1JVU1NJQTpZQUtPVVRJQS1TQUhBIFJFU1BPVUJMSUtBO09MRU5FS1NLSVk6VU5LTk9XTjpSVS1PTEsKK1JVU1NJQTpZQUtPVVRJQS1TQUhBIFJFU1BPVUJMSUtBO05JWkhORUtPTFlNU0tJWTpVTktOT1dOOlJVLU5aTAorUlVTU0lBOlRDSE9VS09UU0tJIE5BVC4gT0tST1VHO0NIQVVOU0tJWTpVTktOT1dOOlJVLUNISworUlVTU0lBOllBS09VVElBLVNBSEEgUkVTUE9VQkxJS0E7VkVSS0hPWUFOU0tJWTpVTktOT1dOOlJVLVZSUworUlVTU0lBOlRDSE9VS09UU0tJIE5BVC4gT0tST1VHO1NITUlEVE9WU0tJWTpVTktOT1dOOlJVLVNIVgorUlVTU0lBOllBS09VVElBLVNBSEEgUkVTUE9VQkxJS0E7U1JFRE5FS09MWU1TS0lZOlVOS05PV046UlUtU1JMCitSVVNTSUE6VENIT1VLT1RTS0kgTkFULiBPS1JPVUc7QklMSUJJTlNLSVk6VU5LTk9XTjpSVS1CTE4KK1JVU1NJQTpZQUtPVVRJQS1TQUhBIFJFU1BPVUJMSUtBO0FCWUlTS0lZOlVOS05PV046UlUtQUJTCitSVVNTSUE6WUFLT1VUSUEtU0FIQSBSRVNQT1VCTElLQTtaSElHQU5TS0lZOlVOS05PV046UlUtWkhOCitSVVNTSUE6VENIT1VLT1RTS0kgTkFULiBPS1JPVUc7SVVMVElOU0tJWTpVTktOT1dOOlJVLUlMTgorUlVTU0lBOlRDSE9VS09UU0tJIE5BVC4gT0tST1VHO0FOQURZUlNLSVk6VU5LTk9XTjpSVS1BTksKK1JVU1NJQTpZQUtPVVRJQS1TQUhBIFJFU1BPVUJMSUtBO01PTVNLSVk6VU5LTk9XTjpSVS1NTUsKK1JVU1NJQTpZQUtPVVRJQS1TQUhBIFJFU1BPVUJMSUtBO1ZFUktIRUtPTFlNU0tJWTpVTktOT1dOOlJVLVZSTAorUlVTU0lBOlRDSE9VS09UU0tJIE5BVC4gT0tST1VHO0NIVUtPVFNLSVk6VU5LTk9XTjpSVS1DSFQKK1JVU1NJQTpZQUtPVVRJQS1TQUhBIFJFU1BPVUJMSUtBO1ZJTFlVWVNLSVk6VU5LTk9XTjpSVS1WTDIKK1JVU1NJQTpZQUtPVVRJQS1TQUhBIFJFU1BPVUJMSUtBO01JUk5JTlNLSVk6VU5LTk9XTjpSVS1NUkkKK1JVU1NJQTpUQ0hPVUtPVFNLSSBOQVQuIE9LUk9VRztQUk9WSURFTlNLSVk6VU5LTk9XTjpSVS1QUkkKK1JVU1NJQTpZQUtPVVRJQS1TQUhBIFJFU1BPVUJMSUtBO1ZFUktITkVWSUxZVUlTS0lZOlVOS05PV046UlUtVlJVCitSVVNTSUE6WUFLT1VUSUEtU0FIQSBSRVNQT1VCTElLQTtLT0JZQVlTS0lZOlVOS05PV046UlUtS0JZCitSVVNTSUE6TUFHQURBTlNLQe9BIE9CTEFTVCBS6VNJRDtTUkVETkVLQU5TS0lZOlVOS05PV046UlUtU1JOCitSVVNTSUE6WUFLT1VUSUEtU0FIQSBSRVNQT1VCTElLQTtUT01QT05TS0lZOlVOS05PV046UlUtVE1OCitSVVNTSUE6WUFLT1VUSUEtU0FIQSBSRVNQT1VCTElLQTtMRU5JTlNLSVk6VU5LTk9XTjpSVS1MTlMKK1JVU1NJQTpNQUdBREFOU0tB70EgT0JMQVNUIFLpU0lEO1NFVkVSTy1FVkVOU0tJWTpVTktOT1dOOlJVLVNWVgorUlVTU0lBOllBS09VVElBLVNBSEEgUkVTUE9VQkxJS0E7T1lNWUFLT05TS0lZOlVOS05PV046UlUtT1lOCitSVVNTSUE6TUFHQURBTlNLQe9BIE9CTEFTVCBS6VNJRDtPTVNVS0NIQU5TS0lZOlVOS05PV046UlUtT01OCitSVVNTSUE6S09SSUFLU0tJIE5BVElPTkFMIE9LUk9VRztQRU5aSElOU0tJWTpVTktOT1dOOlJVLVBOTgorUlVTU0lBOlRDSE9VS09UU0tJIE5BVC4gT0tST1VHO0FOQURZUic6VU5LTk9XTjpSVS1BTlkKK1JVU1NJQTpNQUdBREFOU0tB70EgT0JMQVNUIFLpU0lEO1NVU1VNQU5TS0lZOlVOS05PV046UlUtU1NOCitSVVNTSUE6VENIT1VLT1RTS0kgTkFULiBPS1JPVUc7QkVSSU5HT1ZTS0lZOlVOS05PV046UlUtQlJTCitSVVNTSUE6WUFLT1VUSUEtU0FIQSBSRVNQT1VCTElLQTtTVU5UQVJTS0lZOlVOS05PV046UlUtU05SCitSVVNTSUE6WUFLT1VUSUEtU0FIQSBSRVNQT1VCTElLQTtVU1QtQUxEQU5TS0lZOlVOS05PV046UlUtVVMyCitSVVNTSUE6TUFHQURBTlNLQe9BIE9CTEFTVCBS6VNJRDtZQUdPRE5JTlNLSVk6VU5LTk9XTjpSVS1ZR04KK1JVU1NJQTpZQUtPVVRJQS1TQUhBIFJFU1BPVUJMSUtBO05BTVNLSVk6VU5LTk9XTjpSVS1OTUsKK1JVU1NJQTpZQUtPVVRJQS1TQUhBIFJFU1BPVUJMSUtBO1RBVFRJTlNLSVk6VU5LTk9XTjpSVS1UVE4KK1JVU1NJQTpZQUtPVVRJQS1TQUhBIFJFU1BPVUJMSUtBO0dPUk5ZSTpVTktOT1dOOlJVLUdPTgorUlVTU0lBOllBS09VVElBLVNBSEEgUkVTUE9VQkxJS0E7VVNULU1BWVNLSVk6VU5LTk9XTjpSVS1VUzMKK1JVU1NJQTpLT1JJQUtTS0kgTkFUSU9OQUwgT0tST1VHO09MWVVUT1JTS0lZOlVOS05PV046UlUtT0xSCitSVVNTSUE6S0hBQkFST1ZTS0kgS1JB7yBS6VNJRFVFTDtPS0hPVFNLSVk6VU5LTk9XTjpSVS1PS1MKK1JVU1NJQTpNQUdBREFOU0tB70EgT0JMQVNUIFLpU0lEO1RFTktJTlNLSVk6VU5LTk9XTjpSVS1UTk4KK1JVU1NJQTpZQUtPVVRJQS1TQUhBIFJFU1BPVUJMSUtBO01JUk5ZOlVOS05PV046UlUtTUlOCitSVVNTSUE6WUFLT1VUSUEtU0FIQSBSRVNQT1VCTElLQTtDSFVSQVBDSElOU0tJWTpVTktOT1dOOlJVLUNISAorUlVTU0lBOllBS09VVElBLVNBSEEgUkVTUE9VQkxJS0E7TUVHSU5PLUtBTkdBTEFTU0tJWTpVTktOT1dOOlJVLU1HRworUlVTU0lBOllBS09VVElBLVNBSEEgUkVTUE9VQkxJS0E7WUFLVVRTSzpVTktOT1dOOlJVLVlLVAorUlVTU0lBOk1BR0FEQU5TS0HvQSBPQkxBU1QgUulTSUQ7S0hBU1lOU0tJWTpVTktOT1dOOlJVLUtISworUlVTU0lBOllBS09VVElBLVNBSEEgUkVTUE9VQkxJS0E7T1JEWkhPTklLSURaRVZTS0lZOlVOS05PV046UlUtT1JECitSVVNTSUE6WUFLT1VUSUEtU0FIQSBSRVNQT1VCTElLQTtPTEVLTUlOU0tJWTpVTktOT1dOOlJVLU9MTgorUlVTU0lBOllBS09VVElBLVNBSEEgUkVTUE9VQkxJS0E7TEVOU0tJWTpVTktOT1dOOlJVLUxOSQorUlVTU0lBOllBS09VVElBLVNBSEEgUkVTUE9VQkxJS0E7QU1HSU5TS0lZOlVOS05PV046UlUtQU1TCitSVVNTSUE6TUFHQURBTlNLQe9BIE9CTEFTVCBS6VNJRDtPTFNLSVk6VU5LTk9XTjpSVS1PTEkKK1JVU1NJQTpZQUtPVVRJQS1TQUhBIFJFU1BPVUJMSUtBO0FMREFOU0tJWTpVTktOT1dOOlJVLUFMSworUlVTU0lBOktPUklBS1NLSSBOQVRJT05BTCBPS1JPVUc7S0FSQUdJTlNLSVk6VU5LTk9XTjpSVS1LUjMKK1JVU1NJQTpLT1JJQUtTS0kgTkFUSU9OQUwgT0tST1VHO1RJR0lMU0tJWTpVTktOT1dOOlJVLVRHUworUlVTU0lBOk1BR0FEQU5TS0HvQSBPQkxBU1QgUulTSUQ7TUFHQURBTjpVTktOT1dOOlJVLU1HRAorUlVTU0lBOktIQUJBUk9WU0tJIEtSQe8gUulTSURVRUw7QVlBTk8tTUFZU0tJWTpVTktOT1dOOlJVLUFZWQorUlVTU0lBOllBS09VVElBLVNBSEEgUkVTUE9VQkxJS0E7TkVSSVVOR1JJOlVOS05PV046UlUtTlJHCitSVVNTSUE6S0FNVENIQVRTS0HvQSBPQkxBU1QgUulTSTtVU1QtS0FNQ0hBVFNLSVk6VU5LTk9XTjpSVS1VU0gKK1JVU1NJQTpBTU9VUlNLQe9BIE9CTEFTVDtUWU5ESU5TS0lZOlVOS05PV046UlUtVFlOCitSVVNTSUE6S0FNVENIQVRTS0HvQSBPQkxBU1QgUulTSTtCWVNUUklOU0tJWTpVTktOT1dOOlJVLUJZTgorUlVTU0lBOktBTVRDSEFUU0tB70EgT0JMQVNUIFLpU0k7TUlMS09WU0tJWTpVTktOT1dOOlJVLU1MVgorUlVTU0lBOktBTVRDSEFUU0tB70EgT0JMQVNUIFLpU0k7U09CT0xFVlNLSVk6VU5LTk9XTjpSVS1TQlYKK1JVU1NJQTpLSEFCQVJPVlNLSSBLUkHvIFLpU0lEVUVMO1RVR1VSTy1DSFVNSUtBTlNLSVk6VU5LTk9XTjpSVS1UR00KK1JVU1NJQTpBTU9VUlNLQe9BIE9CTEFTVDtaRVlTS0lZOlVOS05PV046UlUtWllLCitSVVNTSUE6S0FNVENIQVRTS0HvQSBPQkxBU1QgUulTSTtBTEVVVFNLSVk6VU5LTk9XTjpSVS1BTEkKK1JVU1NJQTpBTU9VUlNLQe9BIE9CTEFTVDtUWU5EQTpVTktOT1dOOlJVLVRZRAorUlVTU0lBOktBTVRDSEFUU0tB70EgT0JMQVNUIFLpU0k7WUVMSVpPVlNLSVk6VU5LTk9XTjpSVS1ZTFYKK1JVU1NJQTpBTU9VUlNLQe9BIE9CTEFTVDtTS09WT1JPRElOU0tJWTpVTktOT1dOOlJVLVNLRAorUlVTU0lBOlNBS0hBTElOU0tB70EgT0JMQVNUO09LSElOU0tJWTpVTktOT1dOOlJVLU9LSworUlVTU0lBOktIQUJBUk9WU0tJIEtSQe8gUulTSURVRUw7TklLT0xBWUVWU0tJWTpVTktOT1dOOlJVLU5LSworUlVTU0lBOkFNT1VSU0tB70EgT0JMQVNUO01BR0RBR0FDSElOU0tJWTpVTktOT1dOOlJVLU1HSAorUlVTU0lBOkFNT1VSU0tB70EgT0JMQVNUO1NFTEVNRFpISU5TS0lZOlVOS05PV046UlUtU0xICitSVVNTSUE6QU1PVVJTS0HvQSBPQkxBU1Q7WkVZQTpVTktOT1dOOlJVLVpFWQorUlVTU0lBOktBTVRDSEFUU0tB70EgT0JMQVNUIFLpU0k7VVNULUJPTFNIRVJFVFNLSVk6VU5LTk9XTjpSVS1VU1IKK1JVU1NJQTpLSEFCQVJPVlNLSSBLUkHvIFLpU0lEVUVMO1BPTElOWSBPU0lQRU5LTy4gSU1FTkk6VU5LTk9XTjpSVS1QTE4KK1JVU1NJQTpTQUtIQUxJTlNLQe9BIE9CTEFTVDtPS0hBOlVOS05PV046UlUtT0tICitSVVNTSUE6QU1PVVJTS0HvQSBPQkxBU1Q7TUFaQU5PVlNLSVk6VU5LTk9XTjpSVS1NWlYKK1JVU1NJQTpLSEFCQVJPVlNLSSBLUkHvIFLpU0lEVUVMO1VMQ0hTS0lZOlVOS05PV046UlUtVUxTCitSVVNTSUE6S0FNVENIQVRTS0HvQSBPQkxBU1QgUulTSTtFTElaT1ZPOlVOS05PV046UlUtRUxWCitSVVNTSUE6S0hBQkFST1ZTS0kgS1JB7yBS6VNJRFVFTDtOSUtPTEFZRVZTSy1OQS1BTVVSRTpVTktOT1dOOlJVLU5LTgorUlVTU0lBOktBTVRDSEFUU0tB70EgT0JMQVNUIFLpU0k7UEVUUk9QQVZMT1ZTSy1LQU1DSEFUU0s6VU5LTk9XTjpSVS1QVEsKK1JVU1NJQTpBTU9VUlNLQe9BIE9CTEFTVDtTSElNQU5PVlNLSVk6VU5LTk9XTjpSVS1TSEkKK1JVU1NJQTpTQUtIQUxJTlNLQe9BIE9CTEFTVDtOT0dMSUtTS0lZOlVOS05PV046UlUtTkdLCitSVVNTSUE6S0hBQkFST1ZTS0kgS1JB7yBS6VNJRFVFTDtWRVJLSE5FQlVSRUlOU0tJWTpVTktOT1dOOlJVLVZSUgorUlVTU0lBOktIQUJBUk9WU0tJIEtSQe8gUulTSURVRUw7U09MTkVDSE5ZSTpVTktOT1dOOlJVLVNMQworUlVTU0lBOkFNT1VSU0tB70EgT0JMQVNUO1NISU1BTk9WU0s6VU5LTk9XTjpSVS1TSE8KK1JVU1NJQTpTQUtIQUxJTlNLQe9BIE9CTEFTVDtBTEVYQU5EUk9WU0stU0FLSEFMSU5TS0lZOlVOS05PV046UlUtQUxBCitSVVNTSUE6QU1PVVJTS0HvQSBPQkxBU1Q7U1ZPQk9ETkVOU0tJWTpVTktOT1dOOlJVLVNWTgorUlVTU0lBOlNBS0hBTElOU0tB70EgT0JMQVNUO1RZTU9WU0tJWTpVTktOT1dOOlJVLVRZUworUlVTU0lBOktIQUJBUk9WU0tJIEtSQe8gUulTSURVRUw7S09NU09NT0xTS0lZOlVOS05PV046UlUtS01MCitSVVNTSUE6QU1PVVJTS0HvQSBPQkxBU1Q7U0VSWVNIRVZTS0lZOlVOS05PV046UlUtU1JTCitSVVNTSUE6QU1PVVJTS0HvQSBPQkxBU1Q7Uk9NTkVOU0tJWTpVTktOT1dOOlJVLVJNTgorUlVTU0lBOkFNT1VSU0tB70EgT0JMQVNUO1NWT0JPRE5ZSTpVTktOT1dOOlJVLVNWWQorUlVTU0lBOkFNT1VSU0tB70EgT0JMQVNUO0JMQUdPVkVTQ0hFTlNLSVk6VU5LTk9XTjpSVS1CTEMKK1JVU1NJQTpLSEFCQVJPVlNLSSBLUkHvIFLpU0lEVUVMO1ZBTklOU0tJWTpVTktOT1dOOlJVLVZOUworUlVTU0lBOkFNT1VSU0tB70EgT0JMQVNUO0JFTE9HT1JTS0lZOlVOS05PV046UlUtQkxZCitSVVNTSUE6QU1PVVJTS0HvQSBPQkxBU1Q7QkVMT0dPUlNLOlVOS05PV046UlUtQkwgCitSVVNTSUE6U0FLSEFMSU5TS0HvQSBPQkxBU1Q7U0VWRVJPLUtVUklMU0tJWTpVTktOT1dOOlJVLVNWUgorUlVTU0lBOlNBS0hBTElOU0tB70EgT0JMQVNUO0FMRUtTLi1TQUtIQUxJTlNLSVk6VU5LTk9XTjpSVS1BTEgKK1JVU1NJQTpBTU9VUlNLQe9BIE9CTEFTVDtJVkFOT1ZTS0lZOlVOS05PV046UlUtSVZWCitSVVNTSUE6QU1PVVJTS0HvQSBPQkxBU1Q7QlVSRVlTS0lZOlVOS05PV046UlUtQlJLCitSVVNTSUE6S0hBQkFST1ZTS0kgS1JB7yBS6VNJRFVFTDtLT01TT01PTFNLLU5BLUFNVVJFOlVOS05PV046UlUtS01OCitSVVNTSUE6QU1PVVJTS0HvQSBPQkxBU1Q7T0tUWUFCUlNLSVk6VU5LTk9XTjpSVS1PS0kKK1JVU1NJQTpBTU9VUlNLQe9BIE9CTEFTVDtaQVZJVElOU0tJWTpVTktOT1dOOlJVLVpWTgorUlVTU0lBOktIQUJBUk9WU0tJIEtSQe8gUulTSURVRUw7S0hBQkFST1ZTS0lZOlVOS05PV046UlUtS0hJCitSVVNTSUE6S0hBQkFST1ZTS0kgS1JB7yBS6VNJRFVFTDtBTVVSU0tJWTpVTktOT1dOOlJVLUFNSworUlVTU0lBOlNBS0hBTElOU0tB70EgT0JMQVNUO1NNSVJOWUtIT1ZTS0lZOlVOS05PV046UlUtU01ICitSVVNTSUE6QU1PVVJTS0HvQSBPQkxBU1Q7QkxBR09WRVNDSEVOU0s6VU5LTk9XTjpSVS1CTEgKK1JVU1NJQTpBTU9VUlNLQe9BIE9CTEFTVDtUQU1CT1ZTS0lZOlVOS05PV046UlUtVE1TCitSVVNTSUE6S0hBQkFST1ZTS0kgS1JB7yBS6VNJRFVFTDtBTVVSU0s6VU5LTk9XTjpSVS1BTVIKK1JVU1NJQTpBTU9VUlNLQe9BIE9CTEFTVDtBUktIQVJJTlNLSVk6VU5LTk9XTjpSVS1BUk4KK1JVU1NJQTpBTU9VUlNLQe9BIE9CTEFTVDtNSUtIQVlMT1ZTS0lZOlVOS05PV046UlUtTUtWCitSVVNTSUE6S0hBQkFST1ZTS0kgS1JB7yBS6VNJRFVFTDtOQU5BWVNLSVk6VU5LTk9XTjpSVS1OTlMKK1JVU1NJQTpBTU9VUlNLQe9BIE9CTEFTVDtLT05TVEFOVElOT1ZTS0lZOlVOS05PV046UlUtS05OCitSVVNTSUE6U0FLSEFMSU5TS0HvQSBPQkxBU1Q7UE9ST05BWVNLSVk6VU5LTk9XTjpSVS1QUiAKK1JVU1NJQTpBTU9VUlNLQe9BIE9CTEFTVDtSQVlDSElLSElOU0s6VU5LTk9XTjpSVS1SWUgKK1JVU1NJQTpTQUtIQUxJTlNLQe9BIE9CTEFTVDtVR0xFR09SU0tJWTpVTktOT1dOOlJVLVVHUgorUlVTU0lBOkVWUkXvU0tB70EgT0JMQVNUO09CTFVDSEVOU0tJWTpVTktOT1dOOlJVLU9CUworUlVTU0lBOlNBS0hBTElOU0tB70EgT0JMQVNUO1BPUk9OQVlTSzpVTktOT1dOOlJVLVBSMQorUlVTU0lBOktIQUJBUk9WU0tJIEtSQe8gUulTSURVRUw7U09WRVRTS08tR0FWQU5TS0lZOlVOS05PV046UlUtU1ZHCitSVVNTSUE6U0FLSEFMSU5TS0HvQSBPQkxBU1Q7TUFLQVJPVlNLSVk6VU5LTk9XTjpSVS1NS1MKK1JVU1NJQTpTQUtIQUxJTlNLQe9BIE9CTEFTVDtVR0xFR09SU0s6VU5LTk9XTjpSVS1VR1MKK1JVU1NJQTpFVlJF71NLQe9BIE9CTEFTVDtCSVJPQklEWkhBTlNLSVk6VU5LTk9XTjpSVS1CUkgKK1JVU1NJQTpLSEFCQVJPVlNLSSBLUkHvIFLpU0lEVUVMO1NPVkVUU0tBWUEgR0FWQU46VU5LTk9XTjpSVS1TVkEKK1JVU1NJQTpFVlJF71NLQe9BIE9CTEFTVDtTTUlET1ZJQ0hTS0lZOlVOS05PV046UlUtU01DCitSVVNTSUE6S0hBQkFST1ZTS0kgS1JB7yBS6VNJRFVFTDtMQVpPLiBJTUVOSTpVTktOT1dOOlJVLUxaTQorUlVTU0lBOkVWUkXvU0tB70EgT0JMQVNUO0JJUk9CSURaSEFOOlVOS05PV046UlUtQlJECitSVVNTSUE6U0FLSEFMSU5TS0HvQSBPQkxBU1Q7VE9NQVJJTlNLSVk6VU5LTk9XTjpSVS1UTUkKK1JVU1NJQTpFVlJF71NLQe9BIE9CTEFTVDtPS1RZQUJSU0tJWTpVTktOT1dOOlJVLU9LWQorUlVTU0lBOktIQUJBUk9WU0tJIEtSQe8gUulTSURVRUw7S0hBQkFST1ZTSzpVTktOT1dOOlJVLUtITworUlVTU0lBOkVWUkXvU0tB70EgT0JMQVNUO0xFTklOU0tJWTpVTktOT1dOOlJVLUxOWQorUlVTU0lBOlBSSU1PUlNLSSBLUkHvO1RFUk5FWVNLSVk6VU5LTk9XTjpSVS1UUlkKK1JVU1NJQTpTQUtIQUxJTlNLQe9BIE9CTEFTVDtET0xJTlNLSVk6VU5LTk9XTjpSVS1ETFMKK1JVU1NJQTpLSEFCQVJPVlNLSSBLUkHvIFLpU0lEVUVMO1ZZQVpFTVNLSVk6VU5LTk9XTjpSVS1WWU0KK1JVU1NJQTpTQUtIQUxJTlNLQe9BIE9CTEFTVDtLSE9MTVNLSVk6VU5LTk9XTjpSVS1LSFkKK1JVU1NJQTpTQUtIQUxJTlNLQe9BIE9CTEFTVDtET0xJTlNLOlVOS05PV046UlUtRExOCitSVVNTSUE6UFJJTU9SU0tJIEtSQe87UE9aSEFSU0tJWTpVTktOT1dOOlJVLVBaUgorUlVTU0lBOktIQUJBUk9WU0tJIEtSQe8gUulTSURVRUw7QklLSU5TS0lZOlVOS05PV046UlUtQktTCitSVVNTSUE6U0FLSEFMSU5TS0HvQSBPQkxBU1Q7WVVaSE5PLVNBS0hBTElOU0s6VU5LTk9XTjpSVS1ZWksKK1JVU1NJQTpTQUtIQUxJTlNLQe9BIE9CTEFTVDtLVVJJTFNLSVk6VU5LTk9XTjpSVS1LUjQKK1JVU1NJQTpTQUtIQUxJTlNLQe9BIE9CTEFTVDtLT1JTQUtPVlNLSVk6VU5LTk9XTjpSVS1LUjUKK1JVU1NJQTpTQUtIQUxJTlNLQe9BIE9CTEFTVDtBTklWU0tJWTpVTktOT1dOOlJVLUFOSQorUlVTU0lBOlNBS0hBTElOU0tB70EgT0JMQVNUO0tIT0xNU0s6VU5LTk9XTjpSVS1LSE0KK1JVU1NJQTpTQUtIQUxJTlNLQe9BIE9CTEFTVDtORVZFTFNLSVk6VU5LTk9XTjpSVS1OVlMKK1JVU1NJQTpLSEFCQVJPVlNLSSBLUkHvIFLpU0lEVUVMO0JJS0lOOlVOS05PV046UlUtQklOCitSVVNTSUE6U0FLSEFMSU5TS0HvQSBPQkxBU1Q7TkVWRUwnU0s6VU5LTk9XTjpSVS1OVksKK1JVU1NJQTpTQUtIQUxJTlNLQe9BIE9CTEFTVDtLT1JTQUtPVjpVTktOT1dOOlJVLUtSNgorUlVTU0lBOlBSSU1PUlNLSSBLUkHvO0tSQVNOT0FSTUVZU0tJWTpVTktOT1dOOlJVLUtSTQorUlVTU0lBOlBSSU1PUlNLSSBLUkHvO0RBTE5FUkVDSEVOU0tJWTpVTktOT1dOOlJVLURMSAorUlVTU0lBOlBSSU1PUlNLSSBLUkHvO0RBTE5FUkVDSEVOU0s6VU5LTk9XTjpSVS1ETEMKK1JVU1NJQTpQUklNT1JTS0kgS1JB7ztMRVNPWkFWT0RTS0lZOlVOS05PV046UlUtTFNECitSVVNTSUE6UFJJTU9SU0tJIEtSQe87TEVTT1pBVk9EU0s6VU5LTk9XTjpSVS1MU1YKK1JVU1NJQTpQUklNT1JTS0kgS1JB7ztLSEFOS0FZU0tJWTpVTktOT1dOOlJVLUtIIAorUlVTU0lBOlBSSU1PUlNLSSBLUkHvO0tJUk9WU0tJWTpVTktOT1dOOlJVLUtSNworUlVTU0lBOlBSSU1PUlNLSSBLUkHvO0RBTE5FR09SU0tJWTpVTktOT1dOOlJVLURMUgorUlVTU0lBOlBSSU1PUlNLSSBLUkHvO1NQQVNTS0lZOlVOS05PV046UlUtU1BTCitSVVNTSUE6UFJJTU9SU0tJIEtSQe87Q0hVR1VZRVZTS0lZOlVOS05PV046UlUtQ0hJCitSVVNTSUE6UFJJTU9SU0tJIEtSQe87UE9HUkFOSUNITllJOlVOS05PV046UlUtUEdDCitSVVNTSUE6UFJJTU9SU0tJIEtSQe87WUFLT1ZMRVZTS0lZOlVOS05PV046UlUtWUtTCitSVVNTSUE6UFJJTU9SU0tJIEtSQe87S0FWQUxFUk9WU0tJWTpVTktOT1dOOlJVLUtWVgorUlVTU0lBOlBSSU1PUlNLSSBLUkHvO0tIT1JPTFNLSVk6VU5LTk9XTjpSVS1LSDEKK1JVU1NJQTpQUklNT1JTS0kgS1JB7ztEQUxORUdPUlNLOlVOS05PV046UlUtRExHCitSVVNTSUE6UFJJTU9SU0tJIEtSQe87U1BBU1NLLURBTE5JWTpVTktOT1dOOlJVLVNQRAorUlVTU0lBOlBSSU1PUlNLSSBLUkHvO0NIRVJOSUdPVlNLSVk6VU5LTk9XTjpSVS1DSFkKK1JVU1NJQTpTQUtIQUxJTlNLQe9BIE9CTEFTVDtZVVpITk8tS1VSSUxTS0lZOlVOS05PV046UlUtWVpSCitSVVNTSUE6UFJJTU9SU0tJIEtSQe87QU5VQ0hJTlNLSVk6VU5LTk9XTjpSVS1BTk4KK1JVU1NJQTpQUklNT1JTS0kgS1JB7ztNSUtIQVlMT1ZTS0lZOlVOS05PV046UlUtTUtLCitSVVNTSUE6UFJJTU9SU0tJIEtSQe87T0tUWUFCUlNLSVk6VU5LTk9XTjpSVS1PSyAKK1JVU1NJQTpQUklNT1JTS0kgS1JB7ztBUlNFTllFVjpVTktOT1dOOlJVLUFSWQorUlVTU0lBOlBSSU1PUlNLSSBLUkHvO09MR0lOU0tZOlVOS05PV046UlUtT0xZCitSVVNTSUE6UFJJTU9SU0tJIEtSQe87VVNTVVJJWVNLSVk6VU5LTk9XTjpSVS1VUzQKK1JVU1NJQTpQUklNT1JTS0kgS1JB7ztQQVJUSVpBTlNLSVk6VU5LTk9XTjpSVS1QUjIKK1JVU1NJQTpQUklNT1JTS0kgS1JB7ztTSEtPVE9WU0tJWTpVTktOT1dOOlJVLVNIWQorUlVTU0lBOlBSSU1PUlNLSSBLUkHvO05BREVaSERJTlNLSVk6VU5LTk9XTjpSVS1ORE4KK1JVU1NJQTpQUklNT1JTS0kgS1JB7ztMQVpPVlNLSVk6VU5LTk9XTjpSVS1MWlMKK1JVU1NJQTpQUklNT1JTS0kgS1JB7ztBUlRZT006VU5LTk9XTjpSVS1BUk8KK1JVU1NJQTpQUklNT1JTS0kgS1JB7ztQQVJUSVpBTlNLOlVOS05PV046UlUtUFJBCitSVVNTSUE6UFJJTU9SU0tJIEtSQe87S0hBU0FOU0tJWTpVTktOT1dOOlJVLUtIMgorUlVTU0lBOlBSSU1PUlNLSSBLUkHvO1ZMQURJVk9TVE9LOlVOS05PV046UlUtVkxPCitSVVNTSUE6UFJJTU9SU0tJIEtSQe87Qk9MU0hPWSBLQU1FTjpVTktOT1dOOlJVLUJMQQorUlVTU0lBOlBSSU1PUlNLSSBLUkHvO05BS0hPREtBOlVOS05PV046UlUtTktECitSVVNTSUE6S0lST1ZTS0HvQSBPQkxBU1Q7TFVaU0tJWTpVTktOT1dOOlJVLUxaSworUlVTU0lBOktJUk9WU0tB70EgT0JMQVNUO1BPRE9TSU5PVlNLSVk6VU5LTk9XTjpSVS1QRFYKK1JVU1NJQTpLSVJPVlNLQe9BIE9CTEFTVDtWRVJLSE5FS0FNU0tJWTpVTktOT1dOOlJVLVZSSworUlVTU0lBOktJUk9WU0tB70EgT0JMQVNUO09QQVJJTlNLSVk6VU5LTk9XTjpSVS1PUE4KK1JVU1NJQTpLSVJPVlNLQe9BIE9CTEFTVDtOQUdPUlNLSVk6VU5LTk9XTjpSVS1OR1MKK1JVU1NJQTpLSVJPVlNLQe9BIE9CTEFTVDtNVVJBU0hJTlNLSVk6VU5LTk9XTjpSVS1NUlkKK1JVU1NJQTpLSVJPVlNLQe9BIE9CTEFTVDtCRUxPS0hPTFVOSVRTS0lZOlVOS05PV046UlUtQkxUCitSVVNTSUE6S0lST1ZTS0HvQSBPQkxBU1Q7QUZBTkFTWUVWU0tJWTpVTktOT1dOOlJVLUFGVgorUlVTU0lBOktJUk9WU0tB70EgT0JMQVNUO0RBUk9WU0tJWTpVTktOT1dOOlJVLURSUworUlVTU0lBOktJUk9WU0tB70EgT0JMQVNUO1NMT0JPRFNLT1k6VU5LTk9XTjpSVS1TTEQKK1JVU1NJQTpLSVJPVlNLQe9BIE9CTEFTVDtZVVJZQU5TS0lZOlVOS05PV046UlUtWVJOCitSVVNTSUE6S0lST1ZTS0HvQSBPQkxBU1Q7T01VVE5JTlNLSVk6VU5LTk9XTjpSVS1PTVMKK1JVU1NJQTpLSVJPVlNLQe9BIE9CTEFTVDtLSEFMVFVSSU5TS0lZOlVOS05PV046UlUtS0gzCitSVVNTSUE6S0lST1ZTS0HvQSBPQkxBU1Q7U0hBQkFMSU5TS0lZOlVOS05PV046UlUtU0ggCitSVVNTSUE6S0lST1ZTS0HvQSBPQkxBU1Q7S09URUxOSUNIU0tJWTpVTktOT1dOOlJVLUtUQworUlVTU0lBOktJUk9WU0tB70EgT0JMQVNUO0tJUk9WOlVOS05PV046UlUtS0lWCitSVVNTSUE6S0lST1ZTS0HvQSBPQkxBU1Q7S0lST1ZPLUNIRVBFVFNLSVk6VU5LTk9XTjpSVS1LUlAKK1JVU1NJQTpLSVJPVlNLQe9BIE9CTEFTVDtaVVlFVlNLSVk6VU5LTk9XTjpSVS1aWVMKK1JVU1NJQTpLSVJPVlNLQe9BIE9CTEFTVDtTVkVDSElOU0tJWTpVTktOT1dOOlJVLVNWSworUlVTU0lBOktJUk9WU0tB70EgT0JMQVNUO0ZBTEVOU0tJWTpVTktOT1dOOlJVLUZMUworUlVTU0lBOktJUk9WU0tB70EgT0JMQVNUO09SSUNIRVZTS0lZOlVOS05PV046UlUtT1JWCitSVVNTSUE6S0lST1ZTS0HvQSBPQkxBU1Q7S0lST1ZPLUNIRVBFVFM6VU5LTk9XTjpSVS1LUkMKK1JVU1NJQTpLSVJPVlNLQe9BIE9CTEFTVDtLVU1FTlNLSVk6VU5LTk9XTjpSVS1LTUkKK1JVU1NJQTpLSVJPVlNLQe9BIE9CTEFTVDtLT1RFTE5JQ0gnOlVOS05PV046UlUtS1ROCitSVVNTSUE6S0lST1ZTS0HvQSBPQkxBU1Q7VkVSS0hPU0hJWkhFTVNLSVk6VU5LTk9XTjpSVS1WUkUKK1JVU1NJQTpOSUpFR09ST0RTS0HvQSBPQkxBU1QgKEdPO1ZFVExVWkhTS0lZOlVOS05PV046UlUtVlRICitSVVNTSUE6TklKRUdPUk9EU0tB70EgT0JMQVNUIChHTztTSEFLSFVOU0tJWTpVTktOT1dOOlJVLVNIMQorUlVTU0lBOk5JSkVHT1JPRFNLQe9BIE9CTEFTVCAoR087VE9OU0hBWUVWU0tJWTpVTktOT1dOOlJVLVROVgorUlVTU0lBOktJUk9WU0tB70EgT0JMQVNUO0JPR09ST0RTS0lZOlVOS05PV046UlUtQkdECitSVVNTSUE6S0lST1ZTS0HvQSBPQkxBU1Q7QVJCQVpIU0tJWTpVTktOT1dOOlJVLUFSSAorUlVTU0lBOktJUk9WU0tB70EgT0JMQVNUO1NVTlNLSVk6VU5LTk9XTjpSVS1TTksKK1JVU1NJQTpLSVJPVlNLQe9BIE9CTEFTVDtOT0xJTlNLSVk6VU5LTk9XTjpSVS1OTFMKK1JVU1NJQTpLSVJPVlNLQe9BIE9CTEFTVDtUVVpISU5TS0lZOlVOS05PV046UlUtVFpOCitSVVNTSUE6S0lST1ZTS0HvQSBPQkxBU1Q7VU5JTlNLSVk6VU5LTk9XTjpSVS1VTlMKK1JVU1NJQTpLSVJPVlNLQe9BIE9CTEFTVDtTT1ZFVFNLSVk6VU5LTk9XTjpSVS1TVkkKK1JVU1NJQTpLSVJPVlNLQe9BIE9CTEFTVDtORU1TS0lZOlVOS05PV046UlUtTk1JCitSVVNTSUE6TklKRUdPUk9EU0tB70EgT0JMQVNUIChHTztWQVJOQVZJTlNLSVk6VU5LTk9XTjpSVS1WUkkKK1JVU1NJQTpOSUpFR09ST0RTS0HvQSBPQkxBU1QgKEdPO1VSRU5TS0lZOlVOS05PV046UlUtVVJTCitSVVNTSUE6S0lST1ZTS0HvQSBPQkxBU1Q7UElaSEFOU0tJWTpVTktOT1dOOlJVLVBaTgorUlVTU0lBOk5JSkVHT1JPRFNLQe9BIE9CTEFTVCAoR087VE9OS0lOU0tJWTpVTktOT1dOOlJVLVROUworUlVTU0lBOktJUk9WU0tB70EgT0JMQVNUO0tJS05VUlNLSVk6VU5LTk9XTjpSVS1LS1IKK1JVU1NJQTpOSUpFR09ST0RTS0HvQSBPQkxBU1QgKEdPO0tPVkVSTklOU0tJWTpVTktOT1dOOlJVLUtWTgorUlVTU0lBOktJUk9WU0tB70EgT0JMQVNUO0xFQllBWkhTS0lZOlVOS05PV046UlUtTEJICitSVVNTSUE6S0lST1ZTS0HvQSBPQkxBU1Q7S0lMTUVaU0tJWTpVTktOT1dOOlJVLUtMWgorUlVTU0lBOktJUk9WU0tB70EgT0JMQVNUO1lBUkFOU0tJWTpVTktOT1dOOlJVLVlSUworUlVTU0lBOktJUk9WU0tB70EgT0JMQVNUO1VSWkhVTVNLSVk6VU5LTk9XTjpSVS1VUk0KK1JVU1NJQTpOSUpFR09ST0RTS0HvQSBPQkxBU1QgKEdPO1NFTVlPTk9WU0tJWTpVTktOT1dOOlJVLVNNVgorUlVTU0lBOk5JSkVHT1JPRFNLQe9BIE9CTEFTVCAoR087U0hBUkFOR1NLSVk6VU5LTk9XTjpSVS1TSEcKK1JVU1NJQTpOSUpFR09ST0RTS0HvQSBPQkxBU1QgKEdPO0tSQVNOT0JBS09WU0tJWTpVTktOT1dOOlJVLUtSOAorUlVTU0lBOk1BUklZU0tB70EgUkVTUE9VQkxJS0E7U0VSTlVSU0tJWTpVTktOT1dOOlJVLVNSUgorUlVTU0lBOktJUk9WU0tB70EgT0JMQVNUO1NBTkNIVVJTS0lZOlVOS05PV046UlUtU05TCitSVVNTSUE6TklKRUdPUk9EU0tB70EgT0JMQVNUIChHTztWT1NLUkVTRU5TS0lZOlVOS05PV046UlUtVlNTCitSVVNTSUE6TUFSSVlTS0HvQSBSRVNQT1VCTElLQTtOT1ZPVEFSWUFMU0tJWTpVTktOT1dOOlJVLU5WWQorUlVTU0lBOk1BUklZU0tB70EgUkVTUE9VQkxJS0E7T1JTSEFOU0tJWTpVTktOT1dOOlJVLU9STgorUlVTU0lBOk1BUklZU0tB70EgUkVTUE9VQkxJS0E7TUFSSS1UVVJFS1NLSVk6VU5LTk9XTjpSVS1NUlIKK1JVU1NJQTpOSUpFR09ST0RTS0HvQSBPQkxBU1QgKEdPO0dPUk9ERVRTS0lZOlVOS05PV046UlUtR1JLCitSVVNTSUE6TUFSSVlTS0HvQSBSRVNQT1VCTElLQTtLSUxFTUFSU0tJWTpVTktOT1dOOlJVLUtMUgorUlVTU0lBOk1BUklZU0tB70EgUkVTUE9VQkxJS0E7U09WRVRTS0lZOlVOS05PV046UlUtU1YgCitSVVNTSUE6TUFSSVlTS0HvQSBSRVNQT1VCTElLQTtQQVJBTkdJTlNLSVk6VU5LTk9XTjpSVS1QUjMKK1JVU1NJQTpNQVJJWVNLQe9BIFJFU1BPVUJMSUtBO01FRFZFREVWU0tJWTpVTktOT1dOOlJVLU1EVgorUlVTU0lBOk1BUklZU0tB70EgUkVTUE9VQkxJS0E7S1VaSEVORVJTS0lZOlVOS05PV046UlUtS1pSCitSVVNTSUE6TUFSSVlTS0HvQSBSRVNQT1VCTElLQTtZVVJJTlNLSVk6VU5LTk9XTjpSVS1ZUksKK1JVU1NJQTpOSUpFR09ST0RTS0HvQSBPQkxBU1QgKEdPO0JPUlNLSVk6VU5LTk9XTjpSVS1CUkkKK1JVU1NJQTpOSUpFR09ST0RTS0HvQSBPQkxBU1QgKEdPO0NIS0FMT1ZTS0lZOlVOS05PV046UlUtQ0ggCitSVVNTSUE6S0lST1ZTS0HvQSBPQkxBU1Q7TUFMTVlaSFNLSVk6VU5LTk9XTjpSVS1NTEgKK1JVU1NJQTpOSUpFR09ST0RTS0HvQSBPQkxBU1QgKEdPO0dPUk9ERVRaOlVOS05PV046UlUtR1JECitSVVNTSUE6TUFSSVlTS0HvQSBSRVNQT1VCTElLQTtNT1JLSU5TS0lZOlVOS05PV046UlUtTVIgCitSVVNTSUE6TklKRUdPUk9EU0tB70EgT0JMQVNUIChHTztCQUxBS0hOSU5TS0lZOlVOS05PV046UlUtQkwxCitSVVNTSUE6TUFSSVlTS0HvQSBSRVNQT1VCTElLQTtZT1NIS0FSLU9MQTpVTktOT1dOOlJVLVlTUgorUlVTU0lBOk1BUklZU0tB70EgUkVTUE9VQkxJS0E7R09STk9NQVJJWVNLSVk6VU5LTk9XTjpSVS1HUlIKK1JVU1NJQTpOSUpFR09ST0RTS0HvQSBPQkxBU1QgKEdPO0JBTEFLSE5BOlVOS05PV046UlUtQkwyCitSVVNTSUE6TklKRUdPUk9EU0tB70EgT0JMQVNUIChHTztMWVNLT1ZTS0lZOlVOS05PV046UlUtTFlWCitSVVNTSUE6TklKRUdPUk9EU0tB70EgT0JMQVNUIChHTztWT1JPVFlOU0tJWTpVTktOT1dOOlJVLVZSIAorUlVTU0lBOk5JSkVHT1JPRFNLQe9BIE9CTEFTVCAoR087Vk9MT0RBUlNLSVk6VU5LTk9XTjpSVS1WTFIKK1JVU1NJQTpNQVJJWVNLQe9BIFJFU1BPVUJMSUtBO1pWRU5JR09WU0tJWTpVTktOT1dOOlJVLVpWVgorUlVTU0lBOktJUk9WU0tB70EgT0JMQVNUO1ZZQVRTS08tUE9MWUFOU0tJWTpVTktOT1dOOlJVLVZZTAorUlVTU0lBOk5JSkVHT1JPRFNLQe9BIE9CTEFTVCAoR087TklaSE5JWSBOT1ZHT1JPRDpVTktOT1dOOlJVLU5aTgorUlVTU0lBOk5JSkVHT1JPRFNLQe9BIE9CTEFTVCAoR087Qk9SOlVOS05PV046UlUtQk9SCitSVVNTSUE6VENIT1VWQUNIU0tB70EgUkVTUE9VQkxJSztDSEVCT0tTQVJTS0lZOlVOS05PV046UlUtQ0hSCitSVVNTSUE6TUFSSVlTS0HvQSBSRVNQT1VCTElLQTtLT1pNT0RFTVlBTlNLOlVOS05PV046UlUtS1pNCitSVVNTSUE6TklKRUdPUk9EU0tB70EgT0JMQVNUIChHTztLU1RPVlNLSVk6VU5LTk9XTjpSVS1LU1MKK1JVU1NJQTpLSVJPVlNLQe9BIE9CTEFTVDtWWUFUU0tZRSBQT0xZQU5ZOlVOS05PV046UlUtVlkgCitSVVNTSUE6TklKRUdPUk9EU0tB70EgT0JMQVNUIChHTztCT0dPUk9EU0tJWTpVTktOT1dOOlJVLUJHUworUlVTU0lBOk1BUklZU0tB70EgUkVTUE9VQkxJS0E7Vk9MWkhTS0lZOlVOS05PV046UlUtVkwzCitSVVNTSUE6TklKRUdPUk9EU0tB70EgT0JMQVNUIChHTztQQVZMT1ZTS0lZOlVOS05PV046UlUtUFZTCitSVVNTSUE6VENIT1VWQUNIU0tB70EgUkVTUE9VQkxJSztNT1JHQVVTSFNLSVk6VU5LTk9XTjpSVS1NUkgKK1JVU1NJQTpOSUpFR09ST0RTS0HvQSBPQkxBU1QgKEdPO0tTVE9WTzpVTktOT1dOOlJVLUtTVgorUlVTU0lBOlRDSE9VVkFDSFNLQe9BIFJFU1BPVUJMSUs7WUFEUklOU0tJWTpVTktOT1dOOlJVLVlETgorUlVTU0lBOk5JSkVHT1JPRFNLQe9BIE9CTEFTVCAoR087REFMTkVLT05TVEFOVElOT1ZTS0lZOlVOS05PV046UlUtRExUCitSVVNTSUE6VENIT1VWQUNIU0tB70EgUkVTUE9VQkxJSztDSEVCT0tTQVJZOlVOS05PV046UlUtQ0hBCitSVVNTSUE6VENIT1VWQUNIU0tB70EgUkVTUE9VQkxJSztNQVJJSU5TS08tIFBPU0FEU0tJWTpVTktOT1dOOlJVLU1SUAorUlVTU0lBOk5JSkVHT1JPRFNLQe9BIE9CTEFTVCAoR087Qk9HT1JPRFNLOlVOS05PV046UlUtQkdLCitSVVNTSUE6TklKRUdPUk9EU0tB70EgT0JMQVNUIChHTztTUEFTU0tJWTpVTktOT1dOOlJVLVNQSworUlVTU0lBOlRDSE9VVkFDSFNLQe9BIFJFU1BPVUJMSUs7Tk9WT0NIRUJPS1NBUlNLOlVOS05PV046UlUtTlZBCitSVVNTSUE6TklKRUdPUk9EU0tB70EgT0JMQVNUIChHTztWQUNIU0tJWTpVTktOT1dOOlJVLVZDUworUlVTU0lBOlRDSE9VVkFDSFNLQe9BIFJFU1BPVUJMSUs7VFNZVklMU0tJWTpVTktOT1dOOlJVLVRTTAorUlVTU0lBOk5JSkVHT1JPRFNLQe9BIE9CTEFTVCAoR087U09TTk9WU0tJWTpVTktOT1dOOlJVLVNTUworUlVTU0lBOk5JSkVHT1JPRFNLQe9BIE9CTEFTVCAoR087UEFWTE9WTzpVTktOT1dOOlJVLVBWTworUlVTU0lBOk5JSkVHT1JPRFNLQe9BIE9CTEFTVCAoR087S05ZQUdJTklOU0tJWTpVTktOT1dOOlJVLUtOUworUlVTU0lBOk5JSkVHT1JPRFNLQe9BIE9CTEFTVCAoR087Qk9MU0hFTVVSQVNIS0lOU0tJWTpVTktOT1dOOlJVLUJMMworUlVTU0lBOlRDSE9VVkFDSFNLQe9BIFJFU1BPVUJMSUs7S09aTE9WU0tJWTpVTktOT1dOOlJVLUtaVgorUlVTU0lBOlRDSE9VVkFDSFNLQe9BIFJFU1BPVUJMSUs7S1JBU05PQVJNRVlTS0lZOlVOS05PV046UlUtS1JFCitSVVNTSUE6TklKRUdPUk9EU0tB70EgT0JMQVNUIChHTztQSUxOSU5TS0lZOlVOS05PV046UlUtUExTCitSVVNTSUE6TUFSSVlTS0HvQSBSRVNQT1VCTElLQTtWT0xaSFNLOlVOS05PV046UlUtVkxICitSVVNTSUE6VENIT1VWQUNIU0tB70EgUkVTUE9VQkxJSztBTElLT1ZTS0lZOlVOS05PV046UlUtQUxZCitSVVNTSUE6TklKRUdPUk9EU0tB70EgT0JMQVNUIChHTztQRVJFVk9aU0tJWTpVTktOT1dOOlJVLVBSNAorUlVTU0lBOlRDSE9VVkFDSFNLQe9BIFJFU1BPVUJMSUs7S1JBU05PQ0hFVEFZU0tJWTpVTktOT1dOOlJVLUtSQQorUlVTU0lBOlRDSE9VVkFDSFNLQe9BIFJFU1BPVUJMSUs7VVJNQVJTS0lZOlVOS05PV046UlUtVVJLCitSVVNTSUE6TklKRUdPUk9EU0tB70EgT0JMQVNUIChHTztOQVZBU0hJTlNLSVk6VU5LTk9XTjpSVS1OVkkKK1JVU1NJQTpOSUpFR09ST0RTS0HvQSBPQkxBU1QgKEdPO1NFUkdBQ0hTS0lZOlVOS05PV046UlUtU1JICitSVVNTSUE6TklKRUdPUk9EU0tB70EgT0JMQVNUIChHTztCVVRVUkxJTlNLSVk6VU5LTk9XTjpSVS1CVFMKK1JVU1NJQTpUQ0hPVVZBQ0hTS0HvQSBSRVNQT1VCTElLO1ZVUk5BUlNLSVk6VU5LTk9XTjpSVS1WUjEKK1JVU1NJQTpUQ0hPVVZBQ0hTS0HvQSBSRVNQT1VCTElLO0tBTkFTSFNLSVk6VU5LTk9XTjpSVS1LTkkKK1JVU1NJQTpOSUpFR09ST0RTS0HvQSBPQkxBU1QgKEdPO0FSWkFNQVNTS0lZOlVOS05PV046UlUtQVJTCitSVVNTSUE6TklKRUdPUk9EU0tB70EgT0JMQVNUIChHTztWQURTS0lZOlVOS05PV046UlUtVkRLCitSVVNTSUE6VENIT1VWQUNIU0tB70EgUkVTUE9VQkxJSztTSFVNRVJMSU5TS0lZOlVOS05PV046UlUtU0gyCitSVVNTSUE6VENIT1VWQUNIU0tB70EgUkVTUE9VQkxJSztZQU5USUtPVlNLSVk6VU5LTk9XTjpSVS1ZTlYKK1JVU1NJQTpOSUpFR09ST0RTS0HvQSBPQkxBU1QgKEdPO0FSREFUT1ZTS0lZOlVOS05PV046UlUtQVJWCitSVVNTSUE6VENIT1VWQUNIU0tB70EgUkVTUE9VQkxJSztTSFVNRVJMWUE6VU5LTk9XTjpSVS1TSEwKK1JVU1NJQTpUQ0hPVVZBQ0hTS0HvQSBSRVNQT1VCTElLO0tBTkFTSDpVTktOT1dOOlJVLUtBUworUlVTU0lBOk5JSkVHT1JPRFNLQe9BIE9CTEFTVCAoR087U0VDSEVOT1ZTS0lZOlVOS05PV046UlUtU0NTCitSVVNTSUE6TklKRUdPUk9EU0tB70EgT0JMQVNUIChHTztLVUxFQkFLU0tJWTpVTktOT1dOOlJVLUtMUworUlVTU0lBOk5JSkVHT1JPRFNLQe9BIE9CTEFTVCAoR087S1JBU05PT0tUWUFCUlNLSVk6VU5LTk9XTjpSVS1LUkIKK1JVU1NJQTpOSUpFR09ST0RTS0HvQSBPQkxBU1QgKEdPO0FSWkFNQVM6VU5LTk9XTjpSVS1BUk0KK1JVU1NJQTpOSUpFR09ST0RTS0HvQSBPQkxBU1QgKEdPO1ZZS1NVTlNLSVk6VU5LTk9XTjpSVS1WWU4KK1JVU1NJQTpOSUpFR09ST0RTS0HvQSBPQkxBU1QgKEdPO0dBR0lOU0tJWTpVTktOT1dOOlJVLUdHUworUlVTU0lBOlRDSE9VVkFDSFNLQe9BIFJFU1BPVUJMSUs7SUJSRVNJTlNLSVk6VU5LTk9XTjpSVS1JQk4KK1JVU1NJQTpOSUpFR09ST0RTS0HvQSBPQkxBU1QgKEdPO0tVTEVCQUtJOlVOS05PV046UlUtS0xCCitSVVNTSUE6VENIT1VWQUNIU0tB70EgUkVTUE9VQkxJSztQT1JFVFNLSVk6VU5LTk9XTjpSVS1QUjUKK1JVU1NJQTpOSUpFR09ST0RTS0HvQSBPQkxBU1QgKEdPO1NIQVRLT1ZTS0lZOlVOS05PV046UlUtU0gzCitSVVNTSUE6VENIT1VWQUNIU0tB70EgUkVTUE9VQkxJSztLT01TT01PTFNLSVk6VU5LTk9XTjpSVS1LTVkKK1JVU1NJQTpUQ0hPVVZBQ0hTS0HvQSBSRVNQT1VCTElLO1lBTENISUtTS0lZOlVOS05PV046UlUtWUxLCitSVVNTSUE6TklKRUdPUk9EU0tB70EgT0JMQVNUIChHTztWWUtTQTpVTktOT1dOOlJVLVZZUworUlVTU0lBOk5JSkVHT1JPRFNLQe9BIE9CTEFTVCAoR087RElWRVlFVlNLSVk6VU5LTk9XTjpSVS1EVlYKK1JVU1NJQTpOSUpFR09ST0RTS0HvQSBPQkxBU1QgKEdPO0JPTFNIRUJPTERJTlNLSVk6VU5LTk9XTjpSVS1CTDQKK1JVU1NJQTpOSUpFR09ST0RTS0HvQSBPQkxBU1QgKEdPO0xVS09ZQU5PVlNLSVk6VU5LTk9XTjpSVS1MS1YKK1JVU1NJQTpOSUpFR09ST0RTS0HvQSBPQkxBU1QgKEdPO1BFUlZPTUFZU0tJWTpVTktOT1dOOlJVLVBSNgorUlVTU0lBOk1PUkRPVlNLQe9BIFJFU1BPVUJMSUtBO0JPTFNIRUlHTkFUT1ZTS0lZOlVOS05PV046UlUtQkxWCitSVVNTSUE6VENIT1VWQUNIU0tB70EgUkVTUE9VQkxJSztCQVRZUkVWU0tJWTpVTktOT1dOOlJVLUJUVgorUlVTU0lBOlRDSE9VVkFDSFNLQe9BIFJFU1BPVUJMSUs7QUxBVFlSU0tJWTpVTktOT1dOOlJVLUFMUgorUlVTU0lBOk5JSkVHT1JPRFNLQe9BIE9CTEFTVCAoR087Vk9aTkVTRU5TS0lZOlVOS05PV046UlUtVlpOCitSVVNTSUE6TU9SRE9WU0tB70EgUkVTUE9VQkxJS0E7QVJEQVRPVlNLSVk6VU5LTk9XTjpSVS1BUksKK1JVU1NJQTpNT1JET1ZTS0HvQSBSRVNQT1VCTElLQTtURU1OSUtPVlNLSVk6VU5LTk9XTjpSVS1UTVkKK1JVU1NJQTpOSUpFR09ST0RTS0HvQSBPQkxBU1QgKEdPO1BPQ0hJTktPVlNLSVk6VU5LTk9XTjpSVS1QQ1MKK1JVU1NJQTpUQ0hPVVZBQ0hTS0HvQSBSRVNQT1VCTElLO1NIRU1VUlNISU5TS0lZOlVOS05PV046UlUtU0hICitSVVNTSUE6VENIT1VWQUNIU0tB70EgUkVTUE9VQkxJSztBTEFUWVInOlVOS05PV046UlUtQUwgCitSVVNTSUE6TU9SRE9WU0tB70EgUkVTUE9VQkxJS0E7VEVOR1VTSEVWU0tJWTpVTktOT1dOOlJVLVROSworUlVTU0lBOk1PUkRPVlNLQe9BIFJFU1BPVUJMSUtBO0lDSEFMS09WU0tJWTpVTktOT1dOOlJVLUlDVgorUlVTU0lBOk1PUkRPVlNLQe9BIFJFU1BPVUJMSUtBO1lFTE5JS09WU0tJWTpVTktOT1dOOlJVLVlMSQorUlVTU0lBOk1PUkRPVlNLQe9BIFJFU1BPVUJMSUtBO0FUWUFTSEVWU0tJWTpVTktOT1dOOlJVLUFUVgorUlVTU0lBOk1PUkRPVlNLQe9BIFJFU1BPVUJMSUtBO0NIQU1aSU5TS0lZOlVOS05PV046UlUtQ0gxCitSVVNTSUE6TU9SRE9WU0tB70EgUkVTUE9VQkxJS0E7U1RBUk9TSEFZR09WU0tJWTpVTktOT1dOOlJVLVNURworUlVTU0lBOk1PUkRPVlNLQe9BIFJFU1BPVUJMSUtBO1JPTU9EQU5PVlNLSVk6VU5LTk9XTjpSVS1STVYKK1JVU1NJQTpNT1JET1ZTS0HvQSBSRVNQT1VCTElLQTtLUkFTTk9TTE9CT0RTS0lZOlVOS05PV046UlUtS1I5CitSVVNTSUE6TU9SRE9WU0tB70EgUkVTUE9VQkxJS0E7RFVCRU5TS0lZOlVOS05PV046UlUtREJTCitSVVNTSUE6TU9SRE9WU0tB70EgUkVTUE9VQkxJS0E7TFlBTUJJUlNLSVk6VU5LTk9XTjpSVS1MWVIKK1JVU1NJQTpNT1JET1ZTS0HvQSBSRVNQT1VCTElLQTtBVFlVUklZRVZTS0lZOlVOS05PV046UlUtQVRTCitSVVNTSUE6TU9SRE9WU0tB70EgUkVTUE9VQkxJS0E7WlVCT1ZPLVBPTFlBTlNLSVk6VU5LTk9XTjpSVS1aQkwKK1JVU1NJQTpNT1JET1ZTS0HvQSBSRVNQT1VCTElLQTtUT1JCRVlFVlNLSVk6VU5LTk9XTjpSVS1UUlMKK1JVU1NJQTpNT1JET1ZTS0HvQSBSRVNQT1VCTElLQTtCT0xTSEVCRVJFWk5JS09WU0tJWTpVTktOT1dOOlJVLUJMWgorUlVTU0lBOk1PUkRPVlNLQe9BIFJFU1BPVUJMSUtBO0tPVllMS0lOU0tJWTpVTktOT1dOOlJVLUtWUworUlVTU0lBOk1PUkRPVlNLQe9BIFJFU1BPVUJMSUtBO0tBRE9TSEtJTlNLWTpVTktOT1dOOlJVLUtESworUlVTU0lBOk1PUkRPVlNLQe9BIFJFU1BPVUJMSUtBO1JVWkFZRVZTS0lZOlVOS05PV046UlUtUlpWCitSVVNTSUE6TU9SRE9WU0tB70EgUkVTUE9VQkxJS0E7U0FSQU5TSzpVTktOT1dOOlJVLVNSSworUlVTU0lBOk1PUkRPVlNLQe9BIFJFU1BPVUJMSUtBO0tPQ0hLVVJPVlNLSVk6VU5LTk9XTjpSVS1LQ1YKK1JVU1NJQTpNT1JET1ZTS0HvQSBSRVNQT1VCTElLQTtSVVpBRVZLQTpVTktOT1dOOlJVLVJaSworUlVTU0lBOk1PUkRPVlNLQe9BIFJFU1BPVUJMSUtBO0tPVllMS0lOTzpVTktOT1dOOlJVLUtWSworUlVTU0lBOk1PUkRPVlNLQe9BIFJFU1BPVUJMSUtBO0lOU0FSU0tJWTpVTktOT1dOOlJVLUlOUworUlVTU0lBOlRB701ZUlNLSSBOQVRJT05BTCBPS1JPVUc7RElLU09OU0tJWTpVTktOT1dOOlJVLURLTgorUlVTU0lBOlRB701ZUlNLSSBOQVRJT05BTCBPS1JPVUc7S0hBVEFOR1NLSVk6VU5LTk9XTjpSVS1LSEcKK1JVU1NJQTpUQe9NWVJTS0kgTkFUSU9OQUwgT0tST1VHO0RVRElOS0E6VU5LTk9XTjpSVS1ERE4KK1JVU1NJQTpUQe9NWVJTS0kgTkFUSU9OQUwgT0tST1VHO1VTVC1ZRU5JU0VZU0tJWTpVTktOT1dOOlJVLVVTRQorUlVTU0lBOkVWRU5LSVNLSSBOQVRJT05BTCBPS1JPVUc7QkFZS0lUU0tJWTpVTktOT1dOOlJVLUJZVAorUlVTU0lBOktSQVNOT+9BUlNLSSBLUkHvIFLpU0lEVUU7VFVSVUtIQU5TS0lZOlVOS05PV046UlUtVFJJCitSVVNTSUE6S1JBU05P70FSU0tJIEtSQe8gUulTSURVRTtJR0FSS0E6VU5LTk9XTjpSVS1JR1IKK1JVU1NJQTpJUktPVVRTS0HvQSBPQkxBU1QgUulTSURVO0tBVEFOR1NLSVk6VU5LTk9XTjpSVS1LVEcKK1JVU1NJQTpFVkVOS0lTS0kgTkFUSU9OQUwgT0tST1VHO0lMSU1QSVlTS0lZOlVOS05PV046UlUtSUxZCitSVVNTSUE6RVZFTktJU0tJIE5BVElPTkFMIE9LUk9VRztUVU5HVVNTS08tQ0hVTlNLSVk6VU5LTk9XTjpSVS1UTkMKK1JVU1NJQTpLUkFTTk/vQVJTS0kgS1JB7yBS6VNJRFVFO1lFTklTRVlTS0lZOlVOS05PV046UlUtWU5ZCitSVVNTSUE6S1JBU05P70FSU0tJIEtSQe8gUulTSURVRTtTRVZFUk8tWUVOSVNFWVNLSVk6VU5LTk9XTjpSVS1TVkUKK1JVU1NJQTpJUktPVVRTS0HvQSBPQkxBU1QgUulTSURVO0JPREFZQklOU0tJWTpVTktOT1dOOlJVLUJETgorUlVTU0lBOktSQVNOT+9BUlNLSSBLUkHvIFLpU0lEVUU7Qk9HVUNIQU5TS0lZOlVOS05PV046UlUtQkdOCitSVVNTSUE6S1JBU05P70FSU0tJIEtSQe8gUulTSURVRTtLRVpIRU1TS0lZOlVOS05PV046UlUtS1pTCitSVVNTSUE6SVJLT1VUU0tB70EgT0JMQVNUIFLpU0lEVTtNQU1TS08tQ0hVWVNLSVk6VU5LTk9XTjpSVS1NTUgKK1JVU1NJQTpLUkFTTk/vQVJTS0kgS1JB7yBS6VNJRFVFO01PVFlHSU5TS0lZOlVOS05PV046UlUtTVROCitSVVNTSUE6SVJLT1VUU0tB70EgT0JMQVNUIFLpU0lEVTtVU1QtSUxJTVNLSVk6VU5LTk9XTjpSVS1VUzUKK1JVU1NJQTpJUktPVVRTS0HvQSBPQkxBU1QgUulTSURVO0tJUkVOU0tJWTpVTktOT1dOOlJVLUtFUworUlVTU0lBOktSQVNOT+9BUlNLSSBLUkHvIFLpU0lEVUU7RU5JU0VZU0s6VU5LTk9XTjpSVS1FTlkKK1JVU1NJQTpUQ0hJVElOU0tB70EgT0JMQVNUIFLpU0lEO0tBTEFSU0tJWTpVTktOT1dOOlJVLUtMSQorUlVTU0lBOktSQVNOT+9BUlNLSSBLUkHvIFLpU0lEVUU7TEVTT1NJQklSU0s6VU5LTk9XTjpSVS1MU0IKK1JVU1NJQTpJUktPVVRTS0HvQSBPQkxBU1QgUulTSURVO0NIVU5TS0lZOlVOS05PV046UlUtQ0gyCitSVVNTSUE6SVJLT1VUU0tB70EgT0JMQVNUIFLpU0lEVTtVU1QnLUlMSU1TSzpVTktOT1dOOlJVLVVTNgorUlVTU0lBOktSQVNOT+9BUlNLSSBLUkHvIFLpU0lEVUU7UElST1ZTS0lZOlVOS05PV046UlUtUFI3CitSVVNTSUE6S1JBU05P70FSU0tJIEtSQe8gUulTSURVRTtLQVpBQ0hJTlNLSVk6VU5LTk9XTjpSVS1LWk4KK1JVU1NJQTpLUkFTTk/vQVJTS0kgS1JB7yBS6VNJRFVFO0JJUklMWVVTU0tJWTpVTktOT1dOOlJVLUJSWQorUlVTU0lBOklSS09VVFNLQe9BIE9CTEFTVCBS6VNJRFU7Qk9EQVlCTzpVTktOT1dOOlJVLUJEWQorUlVTU0lBOklSS09VVFNLQe9BIE9CTEFTVCBS6VNJRFU7TklaSE5FSUxJTVNLSVk6VU5LTk9XTjpSVS1OWkkKK1JVU1NJQTpLUkFTTk/vQVJTS0kgS1JB7yBS6VNJRFVFO1RZVUtIVEVUU0tJWTpVTktOT1dOOlJVLVRZVAorUlVTU0lBOklSS09VVFNLQe9BIE9CTEFTVCBS6VNJRFU7VEFZU0hFVFNLSVk6VU5LTk9XTjpSVS1UWUsKK1JVU1NJQTpLUkFTTk/vQVJTS0kgS1JB7yBS6VNJRFVFO1RBU0VZRVZTS0lZOlVOS05PV046UlUtVFNWCitSVVNTSUE6SVJLT1VUU0tB70EgT0JMQVNUIFLpU0lEVTtLQVpBQ0hJTlNLTy1MRU5TS0lZOlVOS05PV046UlUtS1pMCitSVVNTSUE6S1JBU05P70FSU0tJIEtSQe8gUulTSURVRTtBQkFOU0tJWTpVTktOT1dOOlJVLUFCSworUlVTU0lBOktSQVNOT+9BUlNLSSBLUkHvIFLpU0lEVUU7Qk9MU0hFTVVSVElOU0tJWTpVTktOT1dOOlJVLUJMNQorUlVTU0lBOktSQVNOT+9BUlNLSSBLUkHvIFLpU0lEVUU7RFpFUlpISU5TS0lZOlVOS05PV046UlUtRFpOCitSVVNTSUE6Qk9VUklBVElBO1NFVkVSTy1CQVlLQUxTS0lZOlVOS05PV046UlUtU1ZMCitSVVNTSUE6S1JBU05P70FSU0tJIEtSQe8gUulTSURVRTtTVUtIT0JVWklNU0tJWTpVTktOT1dOOlJVLVNLWgorUlVTU0lBOklSS09VVFNLQe9BIE9CTEFTVCBS6VNJRFU7QlJBVFNLSVk6VU5LTk9XTjpSVS1CUiAKK1JVU1NJQTpCT1VSSUFUSUE7TVVZU0tJWTpVTktOT1dOOlJVLU1ZSworUlVTU0lBOktSQVNOT+9BUlNLSSBLUkHvIFLpU0lEVUU7WUVNRUxZQU5PVlNLSVk6VU5LTk9XTjpSVS1ZTU4KK1JVU1NJQTpLUkFTTk/vQVJTS0kgS1JB7yBS6VNJRFVFO0JPTFNIRVVMVVlTS0lZOlVOS05PV046UlUtQkxVCitSVVNTSUE6S1JBU05P70FSU0tJIEtSQe8gUulTSURVRTtLT1pVTFNLWTpVTktOT1dOOlJVLUtaSworUlVTU0lBOktSQVNOT+9BUlNLSSBLUkHvIFLpU0lEVUU7TklaSE5FSU5HQVNIU0tJWTpVTktOT1dOOlJVLU5aRworUlVTU0lBOklSS09VVFNLQe9BIE9CTEFTVCBS6VNJRFU7VVNUJy1LVVQ6VU5LTk9XTjpSVS1VU1UKK1JVU1NJQTpLUkFTTk/vQVJTS0kgS1JB7yBS6VNJRFVFO0tBTlNLSVk6VU5LTk9XTjpSVS1LTlkKK1JVU1NJQTpLUkFTTk/vQVJTS0kgS1JB7yBS6VNJRFVFO0FDSElOU0tJWTpVTktOT1dOOlJVLUFDUworUlVTU0lBOktSQVNOT+9BUlNLSSBLUkHvIFLpU0lEVUU7Qk9HT1RPTFNLSVk6VU5LTk9XTjpSVS1CR0wKK1JVU1NJQTpLUkFTTk/vQVJTS0kgS1JB7yBS6VNJRFVFO0lMQU5TS0lZOlVOS05PV046UlUtSUxTCitSVVNTSUE6SVJLT1VUU0tB70EgT0JMQVNUIFLpU0lEVTtVU1QtVURJTlNLSVk6VU5LTk9XTjpSVS1VUzcKK1JVU1NJQTpLUkFTTk/vQVJTS0kgS1JB7yBS6VNJRFVFO1JZQklOU0tJWTpVTktOT1dOOlJVLVJZUworUlVTU0lBOktSQVNOT+9BUlNLSSBLUkHvIFLpU0lEVUU7QUNISU5TSzpVTktOT1dOOlJVLUFDTgorUlVTU0lBOktSQVNOT+9BUlNLSSBLUkHvIFLpU0lEVUU7QkVSWU9aT1ZTS0lZOlVOS05PV046UlUtQlIxCitSVVNTSUE6SVJLT1VUU0tB70EgT0JMQVNUIFLpU0lEVTtCUkFUU0s6VU5LTk9XTjpSVS1CUlQKK1JVU1NJQTpLUkFTTk/vQVJTS0kgS1JB7yBS6VNJRFVFO0JPR09UT0w6VU5LTk9XTjpSVS1CR1QKK1JVU1NJQTpLUkFTTk/vQVJTS0kgS1JB7yBS6VNJRFVFO1VZQVJTS0lZOlVOS05PV046UlUtVVlTCitSVVNTSUE6S1JBU05P70FSU0tJIEtSQe8gUulTSURVRTtLQU5TSzpVTktOT1dOOlJVLUtBSworUlVTU0lBOktSQVNOT+9BUlNLSSBLUkHvIFLpU0lEVUU7U09TTk9WT0JPUlNLOlVOS05PV046UlUtU1NCCitSVVNTSUE6S1JBU05P70FSU0tJIEtSQe8gUulTSURVRTtLUkFTTk9ZQVJTSzpVTktOT1dOOlJVLUtBWQorUlVTU0lBOktSQVNOT+9BUlNLSSBLUkHvIFLpU0lEVUU7TkFaQVJPVlNLSVk6VU5LTk9XTjpSVS1OWlMKK1JVU1NJQTpLUkFTTk/vQVJTS0kgS1JB7yBS6VNJRFVFO01BTlNLSVk6VU5LTk9XTjpSVS1NTksKK1JVU1NJQTpLUkFTTk/vQVJTS0kgS1JB7yBS6VNJRFVFO05BWkFST1ZPOlVOS05PV046UlUtTlpSCitSVVNTSUE6S1JBU05P70FSU0tJIEtSQe8gUulTSURVRTtTSEFSWVBPVlNLSVk6VU5LTk9XTjpSVS1TSDQKK1JVU1NJQTpJUktPVVRTS0HvQSBPQkxBU1QgUulTSURVO05JWkhORVVESU5TS0lZOlVOS05PV046UlUtTlpECitSVVNTSUE6VENISVRJTlNLQe9BIE9CTEFTVCBS6VNJRDtUVU5HSVJPLU9MRUtNSU5TS0lZOlVOS05PV046UlUtVE5NCitSVVNTSUE6SVJLT1VUU0tB70EgT0JMQVNUIFLpU0lEVTtUQVlTSEVUOlVOS05PV046UlUtVFlICitSVVNTSUE6S1JBU05P70FSU0tJIEtSQe8gUulTSURVRTtESVZOT0dPUlNLOlVOS05PV046UlUtRFZHCitSVVNTSUE6S1JBU05P70FSU0tJIEtSQe8gUulTSURVRTtaQU9aRVJOWUk6VU5LTk9XTjpSVS1aT1IKK1JVU1NJQTpLUkFTTk/vQVJTS0kgS1JB7yBS6VNJRFVFO0lSQkVZU0tJWTpVTktOT1dOOlJVLUlSUworUlVTU0lBOktSQVNOT+9BUlNLSSBLUkHvIFLpU0lEVUU7Qk9ST0RJTk86VU5LTk9XTjpSVS1CUk4KK1JVU1NJQTpJUktPVVRTS0HvQSBPQkxBU1QgUulTSURVO1pISUdBTE9WU0tJWTpVTktOT1dOOlJVLVpIUworUlVTU0lBOktSQVNOT+9BUlNLSSBLUkHvIFLpU0lEVUU7QkFMQUtIVElOU0tJWTpVTktOT1dOOlJVLUJMNgorUlVTU0lBOktSQVNOT+9BUlNLSSBLUkHvIFLpU0lEVUU7VVpIVVJTS0lZOlVOS05PV046UlUtVVpTCitSVVNTSUE6S1JBU05P70FSU0tJIEtSQe8gUulTSURVRTtTQVlBTlNLSVk6VU5LTk9XTjpSVS1TWUkKK1JVU1NJQTpLUkFTTk/vQVJTS0kgS1JB7yBS6VNJRFVFO1BBUlRJWkFOU0tJWTpVTktOT1dOOlJVLVBSOAorUlVTU0lBOkJPVVJJQVRJQTtTRVZFUk9CQVlLQUxTSzpVTktOT1dOOlJVLVNWMQorUlVTU0lBOkJPVVJJQVRJQTtLVVJVTUtBTlNLSVk6VU5LTk9XTjpSVS1LVU4KK1JVU1NJQTpJUktPVVRTS0HvQSBPQkxBU1QgUulTSURVO0JBTEFHQU5TS0lZOlVOS05PV046UlUtQkw3CitSVVNTSUE6UkVTUC4gS0hBS0FTU0lBO09SRFpIT05JS0lEWkVWU0tJWTpVTktOT1dOOlJVLU9SWgorUlVTU0lBOktSQVNOT+9BUlNLSSBLUkHvIFLpU0lEVUU7Tk9WT1NFTE9WU0tJWTpVTktOT1dOOlJVLU5WIAorUlVTU0lBOklSS09VVFNLQe9BIE9CTEFTVCBS6VNJRFU7S1VZVFVOU0tJWTpVTktOT1dOOlJVLUtZTgorUlVTU0lBOklSS09VVFNLQe9BIE9CTEFTVCBS6VNJRFU7VFVMVU5TS0lZOlVOS05PV046UlUtVExLCitSVVNTSUE6SVJLT1VUU0tB70EgT0JMQVNUIFLpU0lEVTtLQUNIVUdTS0lZOlVOS05PV046UlUtS0NTCitSVVNTSUE6S1JBU05P70FSU0tJIEtSQe8gUulTSURVRTtJRFJJTlNLSVk6VU5LTk9XTjpSVS1JRFMKK1JVU1NJQTpLUkFTTk/vQVJTS0kgS1JB7yBS6VNJRFVFO0tVUkFHSU5TS0lZOlVOS05PV046UlUtS0FOCitSVVNTSUE6S1JBU05P70FSU0tJIEtSQe8gUulTSURVRTtLUkFTTk9UVVJBTlNLSVk6VU5LTk9XTjpSVS1LQVIKK1JVU1NJQTpJUktPVVRTS0HvQSBPQkxBU1QgUulTSURVO05JWkhORVVESU5TSzpVTktOT1dOOlJVLU5aSworUlVTU0lBOlJFU1AuIEtIQUtBU1NJQTtTSElSSU5TS0lZOlVOS05PV046UlUtU0g1CitSVVNTSUE6UkVTUC4gS0hBS0FTU0lBO0JPR1JBRFNLSVk6VU5LTk9XTjpSVS1CR0kKK1JVU1NJQTpJUktPVVRTS0HvQSBPQkxBU1QgUulTSURVO1RVTFVOOlVOS05PV046UlUtVFVOCitSVVNTSUE6SVJLT1VUU0tB70EgT0JMQVNUIFLpU0lEVTtPTEtIT05TS0lZOlVOS05PV046UlUtT0wgCitSVVNTSUE6VENISVRJTlNLQe9BIE9CTEFTVCBS6VNJRDtNT0dPQ0hJTlNLSVk6VU5LTk9XTjpSVS1NR04KK1JVU1NJQTpJUktPVVRTS0HvQSBPQkxBU1QgUulTSURVO1pJTUlOU0tJWTpVTktOT1dOOlJVLVpNUworUlVTU0lBOlJFU1AuIEtIQUtBU1NJQTtVU1QtQUJBS0FOU0tJWTpVTktOT1dOOlJVLVVTQQorUlVTU0lBOkJPVVJJQVRJQTtCQVJHVVpJTlNLSVk6VU5LTk9XTjpSVS1CUjIKK1JVU1NJQTpPVVNUJy1PUkRZTlNLSSBOQVRJT05BTCBPO05VS1VUU0tJWTpVTktOT1dOOlJVLU5LSQorUlVTU0lBOk9VU1QnLU9SRFlOU0tJIE5BVElPTkFMIE87T1NJTlNLSVk6VU5LTk9XTjpSVS1PU1MKK1JVU1NJQTpLUkFTTk/vQVJTS0kgS1JB7yBS6VNJRFVFO01JTlVTSU5TS0lZOlVOS05PV046UlUtTU5OCitSVVNTSUE6SVJLT1VUU0tB70EgT0JMQVNUIFLpU0lEVTtTQVlBTlNLOlVOS05PV046UlUtU1kgCitSVVNTSUE6SVJLT1VUU0tB70EgT0JMQVNUIFLpU0lEVTtaSU1BOlVOS05PV046UlUtWklNCitSVVNTSUE6S1JBU05P70FSU0tJIEtSQe8gUulTSURVRTtLQVJBVFVaU0tJWTpVTktOT1dOOlJVLUtBWgorUlVTU0lBOklSS09VVFNLQe9BIE9CTEFTVCBS6VNJRFU7WkFMQVJJTlNLSVk6VU5LTk9XTjpSVS1aTE4KK1JVU1NJQTpPVVNUJy1PUkRZTlNLSSBOQVRJT05BTCBPO0FMQVJTS0lZOlVOS05PV046UlUtQUwxCitSVVNTSUE6UkVTUC4gS0hBS0FTU0lBO0NIRVJOT0dPUlNLOlVOS05PV046UlUtQ0hHCitSVVNTSUE6UkVTUC4gS0hBS0FTU0lBO0FTS0laU0tJWTpVTktOT1dOOlJVLUFTUworUlVTU0lBOkJPVVJJQVRJQTtZRVJBVk5JTlNLSVk6VU5LTk9XTjpSVS1ZUkkKK1JVU1NJQTpSRVNQLiBLSEFLQVNTSUE7QUxUQVlTS0lZOlVOS05PV046UlUtQUwyCitSVVNTSUE6S1JBU05P70FSU0tJIEtSQe8gUulTSURVRTtNSU5VU0lOU0s6VU5LTk9XTjpSVS1NTlMKK1JVU1NJQTpUQ0hJVElOU0tB70EgT0JMQVNUIFLpU0lEO0NIRVJOWVNIRVZTS0lZOlVOS05PV046UlUtQ0gzCitSVVNTSUE6UkVTUC4gS0hBS0FTU0lBO0FCQUtBTjpVTktOT1dOOlJVLUFCQQorUlVTU0lBOlRPVVZBIFJFU1BPVUJMSUtBO1RPRFpISU5TS0lZOlVOS05PV046UlUtVEROCitSVVNTSUE6S1JBU05P70FSU0tJIEtSQe8gUulTSURVRTtTSFVTSEVOU0tJWTpVTktOT1dOOlJVLVNINgorUlVTU0lBOk9VU1QnLU9SRFlOU0tJIE5BVElPTkFMIE87Qk9LSEFOU0tJWTpVTktOT1dOOlJVLUJLTgorUlVTU0lBOktSQVNOT+9BUlNLSSBLUkHvIFLpU0lEVUU7WUVSTUFLT1ZTS0lZOlVOS05PV046UlUtWVJWCitSVVNTSUE6T1VTVCctT1JEWU5TS0kgTkFUSU9OQUwgTztFS0hJUklULUJVTEFHQVRTS0lZOlVOS05PV046UlUtRUtMCitSVVNTSUE6VENISVRJTlNLQe9BIE9CTEFTVCBS6VNJRDtTUkVURU5TS0lZOlVOS05PV046UlUtU1JJCitSVVNTSUE6UkVTUC4gS0hBS0FTU0lBO0JFWVNLSVk6VU5LTk9XTjpSVS1CWUsKK1JVU1NJQTpCT1VSSUFUSUE7T0tJTlNLSVk6VU5LTk9XTjpSVS1PSzEKK1JVU1NJQTpCT1VSSUFUSUE7UFJJQkFZS0FMU0tJWTpVTktOT1dOOlJVLVBSTAorUlVTU0lBOlRDSElUSU5TS0HvQSBPQkxBU1QgUulTSUQ7R0FaSU1VUk8tIFpBVk9EU0tJWTpVTktOT1dOOlJVLUdaWgorUlVTU0lBOklSS09VVFNLQe9BIE9CTEFTVCBS6VNJRFU7Q0hFUkVNS0hPVlNLSVk6VU5LTk9XTjpSVS1DSDQKK1JVU1NJQTpJUktPVVRTS0HvQSBPQkxBU1QgUulTSURVO0NIRVJFTUtIT1ZPOlVOS05PV046UlUtQ0g1CitSVVNTSUE6UkVTUC4gS0hBS0FTU0lBO1RBU0hUWVBTS0lZOlVOS05PV046UlUtVFNQCitSVVNTSUE6UkVTUC4gS0hBS0FTU0lBO1NBWUFOT0dPUlNLOlVOS05PV046UlUtU1lHCitSVVNTSUE6Qk9VUklBVElBO0tIT1JJTlNLSVk6VU5LTk9XTjpSVS1LSDQKK1JVU1NJQTpUQ0hJVElOU0tB70EgT0JMQVNUIFLpU0lEO0NISVRJTlNLSVk6VU5LTk9XTjpSVS1DSDYKK1JVU1NJQTpJUktPVVRTS0HvQSBPQkxBU1QgUulTSURVO0lSS1VUU0tJWTpVTktOT1dOOlJVLUlSSworUlVTU0lBOklSS09VVFNLQe9BIE9CTEFTVCBS6VNJRFU7VVNPTFNLSVk6VU5LTk9XTjpSVS1VUzgKK1JVU1NJQTpUQ0hJVElOU0tB70EgT0JMQVNUIFLpU0lEO05FUkNISU5TS0lZOlVOS05PV046UlUtTlJTCitSVVNTSUE6VE9VVkEgUkVTUE9VQkxJS0E7UElZLUtIVU1TS0lZOlVOS05PV046UlUtUFlNCitSVVNTSUE6SVJLT1VUU0tB70EgT0JMQVNUIFLpU0lEVTtVU09MWUUtU0lCSVJTS09FOlVOS05PV046UlUtVVNCCitSVVNTSUE6Qk9VUklBVElBO0tBQkFOU0tJWTpVTktOT1dOOlJVLUtCUworUlVTU0lBOlRDSElUSU5TS0HvQSBPQkxBU1QgUulTSUQ7S0FSWU1TS0lZOlVOS05PV046UlUtS1lTCitSVVNTSUE6VENISVRJTlNLQe9BIE9CTEFTVCBS6VNJRDtORVJDSElOU0tJWS1aQVZPRFNLSVk6VU5LTk9XTjpSVS1OUloKK1JVU1NJQTpJUktPVVRTS0HvQSBPQkxBU1QgUulTSURVO0FOR0FSU0s6VU5LTk9XTjpSVS1BTiAKK1JVU1NJQTpUT1VWQSBSRVNQT1VCTElLQTtLWVpZTFNLSVk6VU5LTk9XTjpSVS1LWUsKK1JVU1NJQTpUQ0hJVElOU0tB70EgT0JMQVNUIFLpU0lEO1NISUxLSU5TS0lZOlVOS05PV046UlUtU0g3CitSVVNTSUE6SVJLT1VUU0tB70EgT0JMQVNUIFLpU0lEVTtJUktVVFNLOlVOS05PV046UlUtSVJUCitSVVNTSUE6VE9VVkEgUkVTUE9VQkxJS0E7S0FBLUhFTVNLSVk6VU5LTk9XTjpSVS1LQU0KK1JVU1NJQTpCT1VSSUFUSUE7WkFJR1JBWUVWU0tJWTpVTktOT1dOOlJVLVpJVgorUlVTU0lBOlRDSElUSU5TS0HvQSBPQkxBU1QgUulTSUQ7S0hJTE9LU0tJWTpVTktOT1dOOlJVLUtINQorUlVTU0lBOlRPVVZBIFJFU1BPVUJMSUtBO1NVVC1LSE9MU0tJWTpVTktOT1dOOlJVLVNUTAorUlVTU0lBOlRDSElUSU5TS0HvQSBPQkxBU1QgUulTSUQ7U0hFTE9QVUdJTlNLSVk6VU5LTk9XTjpSVS1TSDgKK1JVU1NJQTpJUktPVVRTS0HvQSBPQkxBU1QgUulTSURVO1NIRUxFS0hPVjpVTktOT1dOOlJVLVNIOQorUlVTU0lBOlRDSElUSU5TS0HvQSBPQkxBU1QgUulTSUQ7Q0hJVEE6VU5LTk9XTjpSVS1DSDcKK1JVU1NJQTpCT1VSSUFUSUE7SVZPTEdJTlNLSVk6VU5LTk9XTjpSVS1JVlMKK1JVU1NJQTpUQ0hJVElOU0tB70EgT0JMQVNUIFLpU0lEO0JBTEVZU0tJWTpVTktOT1dOOlJVLUJMOAorUlVTU0lBOklSS09VVFNLQe9BIE9CTEFTVCBS6VNJRFU7U0xZVURZQU5TS0lZOlVOS05PV046UlUtU0xOCitSVVNTSUE6Qk9VUklBVElBO1RVTktJTlNLSVk6VU5LTk9XTjpSVS1UTkkKK1JVU1NJQTpCT1VSSUFUSUE7VUxBTi1VREU6VU5LTk9XTjpSVS1VTFUKK1JVU1NJQTpUT1VWQSBSRVNQT1VCTElLQTtDSEFBLUtIT0xTS1k6VU5LTk9XTjpSVS1DSEwKK1JVU1NJQTpCT1VSSUFUSUE7VEFSQkFHQVRBWVNLSVk6VU5LTk9XTjpSVS1UUlQKK1JVU1NJQTpUT1VWQSBSRVNQT1VCTElLQTtLWVpZTDpVTktOT1dOOlJVLUtZWQorUlVTU0lBOlRDSElUSU5TS0HvQSBPQkxBU1QgUulTSUQ7VUxFVE9WU0tJWTpVTktOT1dOOlJVLVVMVgorUlVTU0lBOlRPVVZBIFJFU1BPVUJMSUtBO0JBUlVOLUtIRU1DSElOU0tJWTpVTktOT1dOOlJVLUJSTQorUlVTU0lBOkFHVUlOU0tJIE5BVElPTkFMIE9LUk9VRztNT0dPWVRVWVNLSVk6VU5LTk9XTjpSVS1NR1kKK1JVU1NJQTpUQ0hJVElOU0tB70EgT0JMQVNUIFLpU0lEO0JBTEVZOlVOS05PV046UlUtQkFZCitSVVNTSUE6VE9VVkEgUkVTUE9VQkxJS0E7QkFZLVRBWUdJTlNLSVk6VU5LTk9XTjpSVS1CWUcKK1JVU1NJQTpUT1VWQSBSRVNQT1VCTElLQTtUQU5ESU5TS0lZOlVOS05PV046UlUtVE5ZCitSVVNTSUE6Qk9VUklBVElBO1NFTEVOR0lOU0tJWTpVTktOT1dOOlJVLVNMUworUlVTU0lBOlRPVVZBIFJFU1BPVUJMSUtBO0NIRURJLUtIT0xTS1k6VU5LTk9XTjpSVS1DSDgKK1JVU1NJQTpUQ0hJVElOU0tB70EgT0JMQVNUIFLpU0lEO0FMRVhBTkRST1ZPLVpBVk9EU0tJWTpVTktOT1dOOlJVLUFMWgorUlVTU0lBOlRDSElUSU5TS0HvQSBPQkxBU1QgUulTSUQ7UEVUUk9WU0stWkFCQVlLQUxTS0lZOlVOS05PV046UlUtUFRCCitSVVNTSUE6VE9VVkEgUkVTUE9VQkxJS0E7RFpVTi1LSEVNQ0hJTlNLSVk6VU5LTk9XTjpSVS1EWkMKK1JVU1NJQTpUQ0hJVElOU0tB70EgT0JMQVNUIFLpU0lEO09MT1ZZQU5OSU5TS0lZOlVOS05PV046UlUtT0wxCitSVVNTSUE6Qk9VUklBVElBO01VS0hPUlNISUJJUlNLSVk6VU5LTk9XTjpSVS1NS0IKK1JVU1NJQTpUQ0hJVElOU0tB70EgT0JMQVNUIFLpU0lEO0tBTEdBTlNLSVk6VU5LTk9XTjpSVS1LTE4KK1JVU1NJQTpBR1VJTlNLSSBOQVRJT05BTCBPS1JPVUc7QUdJTlNLSVk6VU5LTk9XTjpSVS1BR1MKK1JVU1NJQTpCT1VSSUFUSUE7WkFLQU1FTlNLSVk6VU5LTk9XTjpSVS1aS04KK1JVU1NJQTpCT1VSSUFUSUE7RFpISURJTlNLSVk6VU5LTk9XTjpSVS1EWlMKK1JVU1NJQTpCT1VSSUFUSUE7R1VTSU5PT1pFUlNLOlVOS05PV046UlUtR1NaCitSVVNTSUE6VENISVRJTlNLQe9BIE9CTEFTVCBS6VNJRDtQRVRST1ZTSy1aQUJBWUtBTFNLWTpVTktOT1dOOlJVLVBUQQorUlVTU0lBOkFHVUlOU0tJIE5BVElPTkFMIE9LUk9VRztEVUxEVVJHSU5TS0lZOlVOS05PV046UlUtRExJCitSVVNTSUE6VE9VVkEgUkVTUE9VQkxJS0E7T1ZZVVJTS0lZOlVOS05PV046UlUtT1ZTCitSVVNTSUE6VENISVRJTlNLQe9BIE9CTEFTVCBS6VNJRDtCT1JaSU5TS0lZOlVOS05PV046UlUtQlIzCitSVVNTSUE6VE9VVkEgUkVTUE9VQkxJS0E7VEVTLUtIRU1TS0lZOlVOS05PV046UlUtVFNNCitSVVNTSUE6Qk9VUklBVElBO0JJQ0hVUlNLSVk6VU5LTk9XTjpSVS1CQ1IKK1JVU1NJQTpUQ0hJVElOU0tB70EgT0JMQVNUIFLpU0lEO1BSSUFSR1VOU0tJWTpVTktOT1dOOlJVLVBSOQorUlVTU0lBOkJPVVJJQVRJQTtLWUFLSFRJTlNLSVk6VU5LTk9XTjpSVS1LWUkKK1JVU1NJQTpUQ0hJVElOU0tB70EgT0JMQVNUIFLpU0lEO0tSQVNOT0NISUtPWVNLSVk6VU5LTk9XTjpSVS1LQU8KK1JVU1NJQTpUT1VWQSBSRVNQT1VCTElLQTtFUlpJTlNLSVk6VU5LTk9XTjpSVS1FUksKK1JVU1NJQTpUT1VWQSBSRVNQT1VCTElLQTtNT05HVU4tVEFZR0lOU0tJWTpVTktOT1dOOlJVLU1OWQorUlVTU0lBOlRDSElUSU5TS0HvQSBPQkxBU1QgUulTSUQ7QUtTSElOU0tJWTpVTktOT1dOOlJVLUFLTgorUlVTU0lBOlRDSElUSU5TS0HvQSBPQkxBU1QgUulTSUQ7T05PTlNLSVk6VU5LTk9XTjpSVS1PTksKK1JVU1NJQTpUQ0hJVElOU0tB70EgT0JMQVNUIFLpU0lEO0tSQVNOT0tBTUVOU0tJWTpVTktOT1dOOlJVLUtBRQorUlVTU0lBOlRDSElUSU5TS0HvQSBPQkxBU1QgUulTSUQ7S1lSSU5TS0lZOlVOS05PV046UlUtS1kgCitSVVNTSUE6VENISVRJTlNLQe9BIE9CTEFTVCBS6VNJRDtCT1JaWUE6VU5LTk9XTjpSVS1CT1oKK1JVU1NJQTpUQ0hJVElOU0tB70EgT0JMQVNUIFLpU0lEO1pBQkFZS0FMU0tJWTpVTktOT1dOOlJVLVpCUworUlVTU0lBOlRDSElUSU5TS0HvQSBPQkxBU1QgUulTSUQ7S1JBU05PS0FNRU5TSzpVTktOT1dOOlJVLUtBIAorUlVTU0lBOktPU1RST01TS0HvQSBPQkxBU1Q7Vk9LSE9NU0tJWTpVTktOT1dOOlJVLVZLTQorUlVTU0lBOktPU1RST01TS0HvQSBPQkxBU1Q7U09MSUdBTElDSFNLSVk6VU5LTk9XTjpSVS1TTEsKK1JVU1NJQTpLT1NUUk9NU0tB70EgT0JMQVNUO1BBVklOU0tJWTpVTktOT1dOOlJVLVBWSworUlVTU0lBOktPU1RST01TS0HvQSBPQkxBU1Q7T0tUWUFCUlNLSVk6VU5LTk9XTjpSVS1PSzIKK1JVU1NJQTpLT1NUUk9NU0tB70EgT0JMQVNUO0NIVUtITE9NU0tJWTpVTktOT1dOOlJVLUNITQorUlVTU0lBOktPU1RST01TS0HvQSBPQkxBU1Q7S09MT0dSSVZTS0lZOlVOS05PV046UlUtS0xWCitSVVNTSUE6S09TVFJPTVNLQe9BIE9CTEFTVDtNRVpIRVZTS0lZOlVOS05PV046UlUtTVpLCitSVVNTSUE6S09TVFJPTVNLQe9BIE9CTEFTVDtQWVNDSFVHU0tJWTpVTktOT1dOOlJVLVBZRworUlVTU0lBOktPU1RST01TS0HvQSBPQkxBU1Q7QlVZU0tJWTpVTktOT1dOOlJVLUJZSQorUlVTU0lBOklBUk9TTEFWU0tB70EgT0JMQVNUO1BPU0hFS0hPTlNLSVk6VU5LTk9XTjpSVS1QU04KK1JVU1NJQTpJQVJPU0xBVlNLQe9BIE9CTEFTVDtQRVJWT01BWVNLSVk6VU5LTk9XTjpSVS1QVlkKK1JVU1NJQTpUVkVSU0tB70EgT0JMQVNUIChLQUxJTklOO1ZFU1lFR09OU0tJWTpVTktOT1dOOlJVLVZTSworUlVTU0lBOktPU1RST01TS0HvQSBPQkxBU1Q7UEFSRkVOWUVWU0tJWTpVTktOT1dOOlJVLVBGVgorUlVTU0lBOktPU1RST01TS0HvQSBPQkxBU1Q7U0hBUllJTlNLSVk6VU5LTk9XTjpSVS1TQU4KK1JVU1NJQTpLT1NUUk9NU0tB70EgT0JMQVNUO05FWVNLSVk6VU5LTk9XTjpSVS1OWUsKK1JVU1NJQTpLT1NUUk9NU0tB70EgT0JMQVNUO1BPTkFaWVJFVlNLSVk6VU5LTk9XTjpSVS1QTksKK1JVU1NJQTpLT1NUUk9NU0tB70EgT0JMQVNUO0dBTElDSFNLSVk6VU5LTk9XTjpSVS1HTEgKK1JVU1NJQTpJQVJPU0xBVlNLQe9BIE9CTEFTVDtCUkVZVE9WU0tJWTpVTktOT1dOOlJVLUJSNAorUlVTU0lBOlRWRVJTS0HvQSBPQkxBU1QgKEtBTElOSU47U0FORE9WU0tJWTpVTktOT1dOOlJVLVNOVgorUlVTU0lBOktPU1RST01TS0HvQSBPQkxBU1Q7TUFOVFVST1ZTS0lZOlVOS05PV046UlUtTU5JCitSVVNTSUE6SUFST1NMQVZTS0HvQSBPQkxBU1Q7TFlVQklNU0tJWTpVTktOT1dOOlJVLUxZTQorUlVTU0lBOktPU1RST01TS0HvQSBPQkxBU1Q7QU5UUk9QT1ZTS0lZOlVOS05PV046UlUtQU5WCitSVVNTSUE6S09TVFJPTVNLQe9BIE9CTEFTVDtCVVk6VU5LTk9XTjpSVS1CVVkKK1JVU1NJQTpUVkVSU0tB70EgT0JMQVNUIChLQUxJTklOO0xFU05PWTpVTktOT1dOOlJVLUxFTgorUlVTU0lBOktPU1RST01TS0HvQSBPQkxBU1Q7U0hBUllBOlVOS05PV046UlUtU0hBCitSVVNTSUE6S09TVFJPTVNLQe9BIE9CTEFTVDtHQUxJVENIOlVOS05PV046UlUtR0xUCitSVVNTSUE6SUFST1NMQVZTS0HvQSBPQkxBU1Q7REFOSUxPVlNLSVk6VU5LTk9XTjpSVS1ETlMKK1JVU1NJQTpJQVJPU0xBVlNLQe9BIE9CTEFTVDtSWUJJTlNLSVk6VU5LTk9XTjpSVS1SWUkKK1JVU1NJQTpUVkVSU0tB70EgT0JMQVNUIChLQUxJTklOO0tSQVNOT0tIT0xNU0tJWTpVTktOT1dOOlJVLUtBTAorUlVTU0lBOktPU1RST01TS0HvQSBPQkxBU1Q7TUFOVFVST1ZPOlVOS05PV046UlUtTU5SCitSVVNTSUE6VFZFUlNLQe9BIE9CTEFTVCAoS0FMSU5JTjtNT0xPS09WU0tJWTpVTktOT1dOOlJVLU1MUworUlVTU0lBOktPU1RST01TS0HvQSBPQkxBU1Q7S09TVFJPTVNLT1k6VU5LTk9XTjpSVS1LU00KK1JVU1NJQTpLT1NUUk9NU0tB70EgT0JMQVNUO05FWUE6VU5LTk9XTjpSVS1ORVkKK1JVU1NJQTpLT1NUUk9NU0tB70EgT0JMQVNUO1NVU0FOSU5TS0lZOlVOS05PV046UlUtU1NLCitSVVNTSUE6SUFST1NMQVZTS0HvQSBPQkxBU1Q7VFVUQVlFVlNLSVk6VU5LTk9XTjpSVS1UVFYKK1JVU1NJQTpUVkVSU0tB70EgT0JMQVNUIChLQUxJTklOO1VET01FTFNLSVk6VU5LTk9XTjpSVS1VREwKK1JVU1NJQTpUVkVSU0tB70EgT0JMQVNUIChLQUxJTklOO0JPTE9HT1ZTS0lZOlVOS05PV046UlUtQkw5CitSVVNTSUE6S09TVFJPTVNLQe9BIE9CTEFTVDtNQUtBUllFVlNLSVk6VU5LTk9XTjpSVS1NS0kKK1JVU1NJQTpUVkVSU0tB70EgT0JMQVNUIChLQUxJTklOO01BS1NBVElLSElOU0tJWTpVTktOT1dOOlJVLU1LSAorUlVTU0lBOklBUk9TTEFWU0tB70EgT0JMQVNUO05FS09VWlNLSVk6VU5LTk9XTjpSVS1OS1oKK1JVU1NJQTpLT1NUUk9NU0tB70EgT0JMQVNUO09TVFJPVlNLSVk6VU5LTk9XTjpSVS1PU1YKK1JVU1NJQTpLT1NUUk9NU0tB70EgT0JMQVNUO1NVRElTTEFWU0tJWTpVTktOT1dOOlJVLVNEVgorUlVTU0lBOlRWRVJTS0HvQSBPQkxBU1QgKEtBTElOSU47QkVaSEVUU0tJWTpVTktOT1dOOlJVLUJaVAorUlVTU0lBOktPU1RST01TS0HvQSBPQkxBU1Q7S0FEWUlTS0lZOlVOS05PV046UlUtS0RJCitSVVNTSUE6SUFST1NMQVZTS0HvQSBPQkxBU1Q7UllCSU5TSzpVTktOT1dOOlJVLVJZTgorUlVTU0lBOklBUk9TTEFWU0tB70EgT0JMQVNUO1RVVEFFVjpVTktOT1dOOlJVLVRVRQorUlVTU0lBOlRWRVJTS0HvQSBPQkxBU1QgKEtBTElOSU47U09OS09WU0tJWTpVTktOT1dOOlJVLVNOSQorUlVTU0lBOklBUk9TTEFWU0tB70EgT0JMQVNUO05FS1JBU09WU0tJWTpVTktOT1dOOlJVLU5LWQorUlVTU0lBOklBUk9TTEFWU0tB70EgT0JMQVNUO01ZU0hLSU5TS0lZOlVOS05PV046UlUtTVlOCitSVVNTSUE6SUFST1NMQVZTS0HvQSBPQkxBU1Q7WUFST1NMQVZTS0lZOlVOS05PV046UlUtWVJZCitSVVNTSUE6VFZFUlNLQe9BIE9CTEFTVCAoS0FMSU5JTjtCT0xPR09ZRTpVTktOT1dOOlJVLUJMRworUlVTU0lBOklBUk9TTEFWU0tB70EgT0JMQVNUO0JPTFNIRVNFTFNLSVk6VU5LTk9XTjpSVS1CU0wKK1JVU1NJQTpUVkVSU0tB70EgT0JMQVNUIChLQUxJTklOO1VET01MWUE6VU5LTk9XTjpSVS1VRFkKK1JVU1NJQTpUVkVSU0tB70EgT0JMQVNUIChLQUxJTklOO1ZZU0hORVZPTE9UU0tJWTpVTktOT1dOOlJVLVZZTworUlVTU0lBOktPU1RST01TS0HvQSBPQkxBU1Q7S09TVFJPTUE6VU5LTk9XTjpSVS1LU08KK1JVU1NJQTpUVkVSU0tB70EgT0JMQVNUIChLQUxJTklOO0JFWlNIRVRTSzpVTktOT1dOOlJVLUJaUworUlVTU0lBOktPU1RST01TS0HvQSBPQkxBU1Q7S1JBU05PU0VMU0tJWTpVTktOT1dOOlJVLUtBSQorUlVTU0lBOklBUk9TTEFWU0tB70EgT0JMQVNUO1VHTElDSFNLSVk6VU5LTk9XTjpSVS1VR0gKK1JVU1NJQTpJVkFOT1ZTS0HvQSBPQkxBU1Q7WkFWT0xaSFNLSVk6VU5LTk9XTjpSVS1aVkgKK1JVU1NJQTpUVkVSU0tB70EgT0JMQVNUIChLQUxJTklOO0tFU09WT0dPUlNLSVk6VU5LTk9XTjpSVS1LU0kKK1JVU1NJQTpUVkVSU0tB70EgT0JMQVNUIChLQUxJTklOO0ZJUk9WU0tJWTpVTktOT1dOOlJVLUZSUworUlVTU0lBOklBUk9TTEFWU0tB70EgT0JMQVNUO1lBUk9TTEFWTDpVTktOT1dOOlJVLVlSTAorUlVTU0lBOklWQU5PVlNLQe9BIE9CTEFTVDtLSU5FU0hFTVNLSVk6VU5LTk9XTjpSVS1LTk0KK1JVU1NJQTpUVkVSU0tB70EgT0JMQVNUIChLQUxJTklOO1NQSVJPVlNLSVk6VU5LTk9XTjpSVS1TUFYKK1JVU1NJQTpJVkFOT1ZTS0HvQSBPQkxBU1Q7U09LT0xTS0lZOlVOS05PV046UlUtU0tLCitSVVNTSUE6VFZFUlNLQe9BIE9CTEFTVCAoS0FMSU5JTjtLQVNISU5TS0lZOlVOS05PV046UlUtS1NZCitSVVNTSUE6S09TVFJPTVNLQe9BIE9CTEFTVDtORVJFS0hUU0tJWTpVTktOT1dOOlJVLU5SVAorUlVTU0lBOklBUk9TTEFWU0tB70EgT0JMQVNUO0JPUklTT0dMRUJTS0lZOlVOS05PV046UlUtQlJFCitSVVNTSUE6VFZFUlNLQe9BIE9CTEFTVCAoS0FMSU5JTjtMSUtIT1NMQVZMU0tJWTpVTktOT1dOOlJVLUxLTAorUlVTU0lBOlRWRVJTS0HvQSBPQkxBU1QgKEtBTElOSU47VllTSE5ZIFZPTE9DSEVLOlVOS05PV046UlUtVllDCitSVVNTSUE6VFZFUlNLQe9BIE9CTEFTVCAoS0FMSU5JTjtSQU1FU0hLT1ZTS0lZOlVOS05PV046UlUtUk1LCitSVVNTSUE6SUFST1NMQVZTS0HvQSBPQkxBU1Q7VUdMSUNIOlVOS05PV046UlUtVUdDCitSVVNTSUE6SVZBTk9WU0tB70EgT0JMQVNUO0tJTkVTSE1BOlVOS05PV046UlUtS05BCitSVVNTSUE6SUFST1NMQVZTS0HvQSBPQkxBU1Q7R0FWUklMT1YtWUFNU0tJWTpVTktOT1dOOlJVLUdWWQorUlVTU0lBOklWQU5PVlNLQe9BIE9CTEFTVDtQUklWT0xaSFNLSVk6VU5LTk9XTjpSVS1QUkgKK1JVU1NJQTpJVkFOT1ZTS0HvQSBPQkxBU1Q7VklDSFVHU0tJWTpVTktOT1dOOlJVLVZDRworUlVTU0lBOlRWRVJTS0HvQSBPQkxBU1QgKEtBTElOSU47T1NUQVNIS09WU0tJWTpVTktOT1dOOlJVLU9TSworUlVTU0lBOklWQU5PVlNLQe9BIE9CTEFTVDtZVVJZRVZFVFNLSVk6VU5LTk9XTjpSVS1ZUlQKK1JVU1NJQTpJQVJPU0xBVlNLQe9BIE9CTEFTVDtST1NUT1ZTS0lZOlVOS05PV046UlUtUlNLCitSVVNTSUE6S09TVFJPTVNLQe9BIE9CTEFTVDtORVJFS0hUQTpVTktOT1dOOlJVLU5SSworUlVTU0lBOlRWRVJTS0HvQSBPQkxBU1QgKEtBTElOSU47S0FTSElOOlVOS05PV046UlUtS0FICitSVVNTSUE6VFZFUlNLQe9BIE9CTEFTVCAoS0FMSU5JTjtLQUxZQVpJTlNLSVk6VU5LTk9XTjpSVS1LTCAKK1JVU1NJQTpJVkFOT1ZTS0HvQSBPQkxBU1Q7RlVSTUFOT1ZTS0lZOlVOS05PV046UlUtRlJWCitSVVNTSUE6VFZFUlNLQe9BIE9CTEFTVCAoS0FMSU5JTjtLSU1SU0tJWTpVTktOT1dOOlJVLUtNIAorUlVTU0lBOklWQU5PVlNLQe9BIE9CTEFTVDtST0ROSUtPVlNLSVk6VU5LTk9XTjpSVS1SRFYKK1JVU1NJQTpUVkVSU0tB70EgT0JMQVNUIChLQUxJTklOO1RPUlpIT0tTS0lZOlVOS05PV046UlUtVFIgCitSVVNTSUE6SVZBTk9WU0tB70EgT0JMQVNUO0tPTVNPTU9MU0tJWTpVTktOT1dOOlJVLUtNMQorUlVTU0lBOklBUk9TTEFWU0tB70EgT0JMQVNUO1JPU1RPVjpVTktOT1dOOlJVLVJPVAorUlVTU0lBOklWQU5PVlNLQe9BIE9CTEFTVDtGVVJNQU5PVjpVTktOT1dOOlJVLUZSTgorUlVTU0lBOklWQU5PVlNLQe9BIE9CTEFTVDtWSUNIVUdBOlVOS05PV046UlUtVkNBCitSVVNTSUE6VFZFUlNLQe9BIE9CTEFTVCAoS0FMSU5JTjtQRU5PVlNLSVk6VU5LTk9XTjpSVS1QTkkKK1JVU1NJQTpUVkVSU0tB70EgT0JMQVNUIChLQUxJTklOO0tVVlNISU5PVlNLSVk6VU5LTk9XTjpSVS1LVkkKK1JVU1NJQTpJVkFOT1ZTS0HvQSBPQkxBU1Q7SVZBTk9WU0tJWTpVTktOT1dOOlJVLUlWSworUlVTU0lBOklWQU5PVlNLQe9BIE9CTEFTVDtMVUtIU0tJWTpVTktOT1dOOlJVLUxLUworUlVTU0lBOklWQU5PVlNLQe9BIE9CTEFTVDtJTFlJTlNLSVk6VU5LTk9XTjpSVS1JTEsKK1JVU1NJQTpJQVJPU0xBVlNLQe9BIE9CTEFTVDtQRVJFU0xBVlNLSVk6VU5LTk9XTjpSVS1QRVYKK1JVU1NJQTpJVkFOT1ZTS0HvQSBPQkxBU1Q7UFVDSEVaSFNLSVk6VU5LTk9XTjpSVS1QQ0gKK1JVU1NJQTpUVkVSU0tB70EgT0JMQVNUIChLQUxJTklOO0tBTElOSU5TS0lZOlVOS05PV046UlUtS0wxCitSVVNTSUE6VFZFUlNLQe9BIE9CTEFTVCAoS0FMSU5JTjtBTkRSRUFQT0xTS0lZOlVOS05PV046UlUtQU5MCitSVVNTSUE6VFZFUlNLQe9BIE9CTEFTVCAoS0FMSU5JTjtPU1RBU0hLT1Y6VU5LTk9XTjpSVS1PU08KK1JVU1NJQTpJVkFOT1ZTS0HvQSBPQkxBU1Q7SVZBTk9WTzpVTktOT1dOOlJVLUlWTworUlVTU0lBOlRWRVJTS0HvQSBPQkxBU1QgKEtBTElOSU47U0VMSVpIQVJPVlNLSVk6VU5LTk9XTjpSVS1TTFIKK1JVU1NJQTpJVkFOT1ZTS0HvQSBPQkxBU1Q7U0hVSVNLSVk6VU5LTk9XTjpSVS1TVVMKK1JVU1NJQTpJVkFOT1ZTS0HvQSBPQkxBU1Q7VEVZS09WU0tJWTpVTktOT1dOOlJVLVRZVgorUlVTU0lBOlRWRVJTS0HvQSBPQkxBU1QgKEtBTElOSU47VE9SWlNIT0s6VU5LTk9XTjpSVS1UUkgKK1JVU1NJQTpUVkVSU0tB70EgT0JMQVNUIChLQUxJTklOO1RPUk9QRVRTS0lZOlVOS05PV046UlUtVFIxCitSVVNTSUE6SVZBTk9WU0tB70EgT0JMQVNUO0xFWkhORVZTS0lZOlVOS05PV046UlUtTFpWCitSVVNTSUE6SVZBTk9WU0tB70EgT0JMQVNUO1BBTEVLSFNLSVk6VU5LTk9XTjpSVS1QTEgKK1JVU1NJQTpNT1NLT1ZTS0HvQSBPQkxBU1QgUulTSURVO1RBTERPTVNLSVk6VU5LTk9XTjpSVS1UTE0KK1JVU1NJQTpJVkFOT1ZTS0HvQSBPQkxBU1Q7VkVSS0hORUxBTkRFS0hPVlNLSVk6VU5LTk9XTjpSVS1WUkQKK1JVU1NJQTpUVkVSU0tB70EgT0JMQVNUIChLQUxJTklOO1RWRVI6VU5LTk9XTjpSVS1UVlIKK1JVU1NJQTpUVkVSU0tB70EgT0JMQVNUIChLQUxJTklOO0tPTkFLT1ZTS0lZOlVOS05PV046UlUtS04gCitSVVNTSUE6SVZBTk9WU0tB70EgT0JMQVNUO1NIVVlBOlVOS05PV046UlUtU1VZCitSVVNTSUE6VFZFUlNLQe9BIE9CTEFTVCAoS0FMSU5JTjtLSU1SWTpVTktOT1dOOlJVLUtJUgorUlVTU0lBOklWQU5PVlNLQe9BIE9CTEFTVDtURVlLT1ZPOlVOS05PV046UlUtVFlPCitSVVNTSUE6VFZFUlNLQe9BIE9CTEFTVCAoS0FMSU5JTjtTVEFSSVRTS0lZOlVOS05PV046UlUtU1RUCitSVVNTSUE6SVZBTk9WU0tB70EgT0JMQVNUO0dBVlJJTE9WTy1QT1NBRFNLSVk6VU5LTk9XTjpSVS1HVlAKK1JVU1NJQTpWTEFESU1JUlNLQe9BIE9CTEFTVDtZVVJZRVYtUE9MU0tJWTpVTktOT1dOOlJVLVlSUAorUlVTU0lBOklWQU5PVlNLQe9BIE9CTEFTVDtQRVNUWUFLT1ZTS0lZOlVOS05PV046UlUtUFNWCitSVVNTSUE6TU9TS09WU0tB70EgT0JMQVNUIFLpU0lEVTtaQUdPUlNLSVk6VU5LTk9XTjpSVS1aR1MKK1JVU1NJQTpNT1NLT1ZTS0HvQSBPQkxBU1QgUulTSURVO0RVQk5BOlVOS05PV046UlUtRFVOCitSVVNTSUE6SVZBTk9WU0tB70EgT0JMQVNUO1lVWkhTS0lZOlVOS05PV046UlUtWVpTCitSVVNTSUE6VFZFUlNLQe9BIE9CTEFTVCAoS0FMSU5JTjtLT05BS09WTzpVTktOT1dOOlJVLUtOTworUlVTU0lBOklWQU5PVlNLQe9BIE9CTEFTVDtTQVZJTlNLSVk6VU5LTk9XTjpSVS1TVjIKK1JVU1NJQTpWTEFESU1JUlNLQe9BIE9CTEFTVDtBTEVLU0FORFJPVlNLSVk6VU5LTk9XTjpSVS1BTE8KK1JVU1NJQTpUVkVSU0tB70EgT0JMQVNUIChLQUxJTklOO1JaSEVWU0tJWTpVTktOT1dOOlJVLVJaUworUlVTU0lBOk1PU0tPVlNLQe9BIE9CTEFTVCBS6VNJRFU7RE1JVFJPVlNLSVk6VU5LTk9XTjpSVS1ETVMKK1JVU1NJQTpWTEFESU1JUlNLQe9BIE9CTEFTVDtTVVpEQUxTS0lZOlVOS05PV046UlUtU1pMCitSVVNTSUE6VFZFUlNLQe9BIE9CTEFTVCAoS0FMSU5JTjtORUxJRE9WU0tJWTpVTktOT1dOOlJVLU5MVgorUlVTU0lBOk1PU0tPVlNLQe9BIE9CTEFTVCBS6VNJRFU7S0xJTlNLSVk6VU5LTk9XTjpSVS1LTDIKK1JVU1NJQTpWTEFESU1JUlNLQe9BIE9CTEFTVDtLQU1FU0hLT1ZTS0lZOlVOS05PV046UlUtS01WCitSVVNTSUE6VkxBRElNSVJTS0HvQSBPQkxBU1Q7S09WUk9WU0tJWTpVTktOT1dOOlJVLUtWWQorUlVTU0lBOlRWRVJTS0HvQSBPQkxBU1QgKEtBTElOSU47T0xFTklOU0tJWTpVTktOT1dOOlJVLU9MMgorUlVTU0lBOlRWRVJTS0HvQSBPQkxBU1QgKEtBTElOSU47WkFQQUROT0RWSU5TS0lZOlVOS05PV046UlUtWlBWCitSVVNTSUE6VkxBRElNSVJTS0HvQSBPQkxBU1Q7S09MQ0hVR0lOU0tJWTpVTktOT1dOOlJVLUtMMworUlVTU0lBOlZMQURJTUlSU0tB70EgT0JMQVNUO1ZZQVpOSUtPVlNLSVk6VU5LTk9XTjpSVS1WWUsKK1JVU1NJQTpWTEFESU1JUlNLQe9BIE9CTEFTVDtTVVpEQUwnOlVOS05PV046UlUtU1ogCitSVVNTSUE6VkxBRElNSVJTS0HvQSBPQkxBU1Q7R09ST0tIT1ZFVFNLSVk6VU5LTk9XTjpSVS1HUkUKK1JVU1NJQTpNT1NLT1ZTS0HvQSBPQkxBU1QgUulTSURVO0xPVE9TSElOU0tJWTpVTktOT1dOOlJVLUxUTgorUlVTU0lBOlZMQURJTUlSU0tB70EgT0JMQVNUO0tPVlJPVjpVTktOT1dOOlJVLUtPUgorUlVTU0lBOlZMQURJTUlSU0tB70EgT0JMQVNUO0FMRUtTQU5EUk9WOlVOS05PV046UlUtQUxOCitSVVNTSUE6TU9TS09WU0tB70EgT0JMQVNUIFLpU0lEVTtLTElOOlVOS05PV046UlUtS0w0CitSVVNTSUE6TU9TS09WU0tB70EgT0JMQVNUIFLpU0lEVTtTRVJHSUVWIFBPU0FEOlVOS05PV046UlUtU1IgCitSVVNTSUE6VkxBRElNSVJTS0HvQSBPQkxBU1Q7S0lSWkhBQ0hTS0lZOlVOS05PV046UlUtS1JICitSVVNTSUE6VFZFUlNLQe9BIE9CTEFTVCAoS0FMSU5JTjtaVUJUU09WU0tJWTpVTktOT1dOOlJVLVpCVgorUlVTU0lBOk1PU0tPVlNLQe9BIE9CTEFTVCBS6VNJRFU7U09MTkVDSE5PR09SU0tJWTpVTktOT1dOOlJVLVNMRworUlVTU0lBOlZMQURJTUlSU0tB70EgT0JMQVNUO0tPTCdDSFVHSU5POlVOS05PV046UlUtS0xHCitSVVNTSUE6TU9TS09WU0tB70EgT0JMQVNUIFLpU0lEVTtWT0xPS09MQU1TS0lZOlVOS05PV046UlUtVkxNCitSVVNTSUE6VkxBRElNSVJTS0HvQSBPQkxBU1Q7U09CSU5TS0lZOlVOS05PV046UlUtU0JTCitSVVNTSUE6VFZFUlNLQe9BIE9CTEFTVCAoS0FMSU5JTjtSWlNIRVY6VU5LTk9XTjpSVS1SWkgKK1JVU1NJQTpWTEFESU1JUlNLQe9BIE9CTEFTVDtWWUFaTklLSTpVTktOT1dOOlJVLVZZSQorUlVTU0lBOk1PU0tPVlNLQe9BIE9CTEFTVCBS6VNJRFU7U0NIRUxLT1ZTS0lZOlVOS05PV046UlUtU0NLCitSVVNTSUE6VFZFUlNLQe9BIE9CTEFTVCAoS0FMSU5JTjtORUxJRE9WTzpVTktOT1dOOlJVLU5MRAorUlVTU0lBOk1PU0tPVlNLQe9BIE9CTEFTVCBS6VNJRFU7U0hBS0hPVlNLT1k6VU5LTk9XTjpSVS1TQVYKK1JVU1NJQTpNT1NLT1ZTS0HvQSBPQkxBU1QgUulTSURVO1NPTE5FQ0hOT0dPUlNLOlVOS05PV046UlUtU0xPCitSVVNTSUE6TU9TS09WU0tB70EgT0JMQVNUIFLpU0lEVTtQVVNIS0lOU0tJWTpVTktOT1dOOlJVLVBTUworUlVTU0lBOlRWRVJTS0HvQSBPQkxBU1QgKEtBTElOSU47WkhBUktPVlNLSVk6VU5LTk9XTjpSVS1aSEsKK1JVU1NJQTpWTEFESU1JUlNLQe9BIE9CTEFTVDtWTEFESU1JUjpVTktOT1dOOlJVLVZMNAorUlVTU0lBOlZMQURJTUlSU0tB70EgT0JMQVNUO1BFVFVTSEtJTlNLSVk6VU5LTk9XTjpSVS1QVEkKK1JVU1NJQTpWTEFESU1JUlNLQe9BIE9CTEFTVDtTVURPR09EU0tJWTpVTktOT1dOOlJVLVNERAorUlVTU0lBOk1PU0tPVlNLQe9BIE9CTEFTVCBS6VNJRFU7S1JBU05PQVJNRVlTSzpVTktOT1dOOlJVLUtBMQorUlVTU0lBOk1PU0tPVlNLQe9BIE9CTEFTVCBS6VNJRFU7SVNUUklOU0tJWTpVTktOT1dOOlJVLUlTTgorUlVTU0lBOk1PU0tPVlNLQe9BIE9CTEFTVCBS6VNJRFU7TVlUSVNDSElOU0tJWTpVTktOT1dOOlJVLU1ZUworUlVTU0lBOlRWRVJTS0HvQSBPQkxBU1QgKEtBTElOSU47QkVMU0tJWTpVTktOT1dOOlJVLUJTSworUlVTU0lBOlNNT0xFTlNLQe9BIE9CTEFTVDtTWUNIRVZLU0tJWTpVTktOT1dOOlJVLVNZWQorUlVTU0lBOk1PU0tPVlNLQe9BIE9CTEFTVCBS6VNJRFU7Tk9HSU5TS0lZOlVOS05PV046UlUtTkdJCitSVVNTSUE6TU9TS09WU0tB70EgT0JMQVNUIFLpU0lEVTtWT0xPS09MQU1TSzpVTktOT1dOOlJVLVZMTAorUlVTU0lBOk1PU0tPVlNLQe9BIE9CTEFTVCBS6VNJRFU7UFVTQ0hJTk86VU5LTk9XTjpSVS1QU0gKK1JVU1NJQTpWTEFESU1JUlNLQe9BIE9CTEFTVDtTRUxJVkFOT1ZTS0lZOlVOS05PV046UlUtU0xJCitSVVNTSUE6VkxBRElNSVJTS0HvQSBPQkxBU1Q7U09CSU5LQTpVTktOT1dOOlJVLVNCTgorUlVTU0lBOk1PU0tPVlNLQe9BIE9CTEFTVCBS6VNJRFU7UlVaU0tJWTpVTktOT1dOOlJVLVJaSQorUlVTU0lBOk1PU0tPVlNLQe9BIE9CTEFTVCBS6VNJRFU7UEFWTE9WTy1QT1NBRFNLSVk6VU5LTk9XTjpSVS1QVkEKK1JVU1NJQTpTTU9MRU5TS0HvQSBPQkxBU1Q7R0FHQVJJTlNLSVk6VU5LTk9XTjpSVS1HR04KK1JVU1NJQTpNT1NLT1ZTS0HvQSBPQkxBU1QgUulTSURVO0xPQk5ZQTpVTktOT1dOOlJVLUxPTgorUlVTU0lBOk1PU0tPVlNLQe9BIE9CTEFTVCBS6VNJRFU7SVZBTlRFWUVWS0E6VU5LTk9XTjpSVS1JVlkKK1JVU1NJQTpNT1NLT1ZTS0HvQSBPQkxBU1QgUulTSURVO0ZSWUFaSU5POlVOS05PV046UlUtRlJaCitSVVNTSUE6TU9TS09WU0tB70EgT0JMQVNUIFLpU0lEVTtLSElNS0lOU0tJWTpVTktOT1dOOlJVLUtINgorUlVTU0lBOk1PU0tPVlNLQe9BIE9CTEFTVCBS6VNJRFU7RE9MR09QUlVETllJOlVOS05PV046UlUtRExVCitSVVNTSUE6TU9TS09WU0tB70EgT0JMQVNUIFLpU0lEVTtTSENIRUxLT1ZPOlVOS05PV046UlUtU0NMCitSVVNTSUE6VkxBRElNSVJTS0HvQSBPQkxBU1Q7TVVST01TS0lZOlVOS05PV046UlUtTVIxCitSVVNTSUE6TU9TS1ZBO01PU0NPVzpVTktOT1dOOlJVLU1PQworUlVTU0lBOk1PU0tPVlNLQe9BIE9CTEFTVCBS6VNJRFU7UFVTSEtJTk86VU5LTk9XTjpSVS1QU0sKK1JVU1NJQTpNT1NLT1ZTS0HvQSBPQkxBU1QgUulTSURVO01ZVFlTSENIWTpVTktOT1dOOlJVLU1ZSAorUlVTU0lBOk1PU0tPVlNLQe9BIE9CTEFTVCBS6VNJRFU7SVNUUkE6VU5LTk9XTjpSVS1JU1IKK1JVU1NJQTpNT1NLT1ZTS0HvQSBPQkxBU1QgUulTSURVO0tISU1LSTpVTktOT1dOOlJVLUtINworUlVTU0lBOk1PU0tPVlNLQe9BIE9CTEFTVCBS6VNJRFU7Tk9HSU5TSzpVTktOT1dOOlJVLU5HTgorUlVTU0lBOk1PU0tPVlNLQe9BIE9CTEFTVCBS6VNJRFU7S0FMSU5JTkdSQUQ6VU5LTk9XTjpSVS1LTEEKK1JVU1NJQTpNT1NLT1ZTS0HvQSBPQkxBU1QgUulTSURVO0tSQVNOT0dPUlNLSVk6VU5LTk9XTjpSVS1LQTIKK1JVU1NJQTpWTEFESU1JUlNLQe9BIE9CTEFTVDtHVVMtS0hSVVNUQUxOWUk6VU5LTk9XTjpSVS1HU1MKK1JVU1NJQTpNT1NLT1ZTS0HvQSBPQkxBU1QgUulTSURVO09SRUtIT1ZPLVpVWUVWU0tJWTpVTktOT1dOOlJVLU9SVQorUlVTU0lBOk1PU0tPVlNLQe9BIE9CTEFTVCBS6VNJRFU7QkFMQVNISUtISU5TS0lZOlVOS05PV046UlUtQkFICitSVVNTSUE6TU9TS09WU0tB70EgT0JMQVNUIFLpU0lEVTtPUkVLSE9WTy1aVUVWTzpVTktOT1dOOlJVLU9SRQorUlVTU0lBOk1PU0tPVlNLQe9BIE9CTEFTVCBS6VNJRFU7TU9aSEFZU0tJWTpVTktOT1dOOlJVLU1aWQorUlVTU0lBOk1PU0tPVlNLQe9BIE9CTEFTVCBS6VNJRFU7S1JBU05PR09SU0s6VU5LTk9XTjpSVS1LUkcKK1JVU1NJQTpNT1NLT1ZTS0HvQSBPQkxBU1QgUulTSURVO1NIQVRVUlNLSVk6VU5LTk9XTjpSVS1TQVIKK1JVU1NJQTpNT1NLT1ZTS0HvQSBPQkxBU1QgUulTSURVO0VMRUtUUk9TVEFMOlVOS05PV046UlUtRUxTCitSVVNTSUE6TU9TS09WU0tB70EgT0JMQVNUIFLpU0lEVTtCQUxBU0hJS0hBOlVOS05PV046UlUtQkFJCitSVVNTSUE6TU9TS09WU0tB70EgT0JMQVNUIFLpU0lEVTtSRVVUT1Y6VU5LTk9XTjpSVS1SRVQKK1JVU1NJQTpNT1NLT1ZTS0HvQSBPQkxBU1QgUulTSURVO09ESU5UU09WU0tJWTpVTktOT1dOOlJVLU9EVgorUlVTU0lBOk1PU0tPVlNLQe9BIE9CTEFTVCBS6VNJRFU7WkhFTEVaTk9ET1JPWkhOWUk6VU5LTk9XTjpSVS1aSFIKK1JVU1NJQTpTTU9MRU5TS0HvQSBPQkxBU1Q7Tk9WT0RVR0lOU0tJWTpVTktOT1dOOlJVLU5WMQorUlVTU0lBOlNNT0xFTlNLQe9BIE9CTEFTVDtWRUxJWkhTS0lZOlVOS05PV046UlUtVkw1CitSVVNTSUE6TU9TS09WU0tB70EgT0JMQVNUIFLpU0lEVTtaVkVOSUdPUk9EOlVOS05PV046UlUtWlZHCitSVVNTSUE6U01PTEVOU0tB70EgT0JMQVNUO0RFTUlET1ZTS0lZOlVOS05PV046UlUtRE1LCitSVVNTSUE6U01PTEVOU0tB70EgT0JMQVNUO0tIT0xNLVpISVJLT1ZTS0lZOlVOS05PV046UlUtS0g4CitSVVNTSUE6U01PTEVOU0tB70EgT0JMQVNUO0RVS0hPVlNDSElOU0tJWTpVTktOT1dOOlJVLURLSAorUlVTU0lBOk1PU0tPVlNLQe9BIE9CTEFTVCBS6VNJRFU7TFlVQkVSRVRTS0lZOlVOS05PV046UlUtTFlUCitSVVNTSUE6TU9TS09WU0tB70EgT0JMQVNUIFLpU0lEVTtPRElOVFNPVk86VU5LTk9XTjpSVS1PRFMKK1JVU1NJQTpWTEFESU1JUlNLQe9BIE9CTEFTVDtHVVMnLUtIUlVTVEFMTlk6VU5LTk9XTjpSVS1HU1QKK1JVU1NJQTpNT1NLT1ZTS0HvQSBPQkxBU1QgUulTSURVO1JBTUVOU0tJWTpVTktOT1dOOlJVLVJNSQorUlVTU0lBOk1PU0tPVlNLQe9BIE9CTEFTVCBS6VNJRFU7TEVOSU5TS0lZOlVOS05PV046UlUtTE4gCitSVVNTSUE6TU9TS09WU0tB70EgT0JMQVNUIFLpU0lEVTtMSVVCRVJUU1k6VU5LTk9XTjpSVS1MVVIKK1JVU1NJQTpWTEFESU1JUlNLQe9BIE9CTEFTVDtNRUxFTktPVlNLSVk6VU5LTk9XTjpSVS1NTEsKK1JVU1NJQTpNT1NLT1ZTS0HvQSBPQkxBU1QgUulTSURVO1pIVUtPVlNLSVk6VU5LTk9XTjpSVS1aSEkKK1JVU1NJQTpNT1NLT1ZTS0HvQSBPQkxBU1QgUulTSURVO05BUk8tRk9NSU5TS0lZOlVOS05PV046UlUtTlJNCitSVVNTSUE6TU9TS09WU0tB70EgT0JMQVNUIFLpU0lEVTtSQU1FTlNLT0U6VU5LTk9XTjpSVS1STU8KK1JVU1NJQTpNT1NLT1ZTS0HvQSBPQkxBU1QgUulTSURVO1NIQVRVUkE6VU5LTk9XTjpSVS1TQUEKK1JVU1NJQTpWTEFESU1JUlNLQe9BIE9CTEFTVDtNVVJPTTpVTktOT1dOOlJVLU1VTQorUlVTU0lBOlNNT0xFTlNLQe9BIE9CTEFTVDtHQUdBUklOOlVOS05PV046UlUtR0dSCitSVVNTSUE6TU9TS09WU0tB70EgT0JMQVNUIFLpU0lEVTtWSUROT1lFOlVOS05PV046UlUtVkRZCitSVVNTSUE6TU9TS09WU0tB70EgT0JMQVNUIFLpU0lEVTtMWVRLQVJJTk86VU5LTk9XTjpSVS1MWUkKK1JVU1NJQTpNT1NLT1ZTS0HvQSBPQkxBU1QgUulTSURVO1ZPU0tSRVNFTlNLSVk6VU5LTk9XTjpSVS1WU0kKK1JVU1NJQTpNT1NLT1ZTS0HvQSBPQkxBU1QgUulTSURVO1BPRE9MU0tJWTpVTktOT1dOOlJVLVBEUworUlVTU0lBOk1PU0tPVlNLQe9BIE9CTEFTVCBS6VNJRFU7TU9aU0hBWVNLOlVOS05PV046UlUtTVogCitSVVNTSUE6TU9TS09WU0tB70EgT0JMQVNUIFLpU0lEVTtUUk9JVFNLOlVOS05PV046UlUtVFIyCitSVVNTSUE6TU9TS09WU0tB70EgT0JMQVNUIFLpU0lEVTtZRUdPUllFVlNLSVk6VU5LTk9XTjpSVS1ZR1YKK1JVU1NJQTpTTU9MRU5TS0HvQSBPQkxBU1Q7WUFSVFNFVlNLSVk6VU5LTk9XTjpSVS1ZUiAKK1JVU1NJQTpNT1NLT1ZTS0HvQSBPQkxBU1QgUulTSURVO0RPTU9ERURPVlNLSVk6VU5LTk9XTjpSVS1ETUkKK1JVU1NJQTpNT1NLT1ZTS0HvQSBPQkxBU1QgUulTSURVO1BPRE9MU0s6VU5LTk9XTjpSVS1QREwKK1JVU1NJQTpNT1NLT1ZTS0HvQSBPQkxBU1QgUulTSURVO0RPTU9ERURPVk86VU5LTk9XTjpSVS1ETUQKK1JVU1NJQTpTTU9MRU5TS0HvQSBPQkxBU1Q7VllBWkVNU0tJWTpVTktOT1dOOlJVLVZZWQorUlVTU0lBOk1PU0tPVlNLQe9BIE9CTEFTVCBS6VNJRFU7RUdPUllFVlNLOlVOS05PV046UlUtRUdWCitSVVNTSUE6TU9TS09WU0tB70EgT0JMQVNUIFLpU0lEVTtOQVJPLUZPTUlOU0s6VU5LTk9XTjpSVS1OUkkKK1JVU1NJQTpNT1NLT1ZTS0HvQSBPQkxBU1QgUulTSURVO0tMSU1PVlNLOlVOS05PV046UlUtS0w1CitSVVNTSUE6TU9TS09WU0tB70EgT0JMQVNUIFLpU0lEVTtWT1NLUkVTRU5TSzpVTktOT1dOOlJVLVZTRQorUlVTU0lBOlJZQVpBTlNLQe9BIE9CTEFTVDtLTEVQSUtPVlNLSVk6VU5LTk9XTjpSVS1LTDYKK1JVU1NJQTpTTU9MRU5TS0HvQSBPQkxBU1Q7UlVETllBTlNLSVk6VU5LTk9XTjpSVS1SRE4KK1JVU1NJQTpNT1NLT1ZTS0HvQSBPQkxBU1QgUulTSURVO0JST05OSVRTWTpVTktOT1dOOlJVLUJSNQorUlVTU0lBOktBTE9VSlNLQe9BIE9CTEFTVDtCT1JPVlNLSVk6VU5LTk9XTjpSVS1CUjYKK1JVU1NJQTpTTU9MRU5TS0HvQSBPQkxBU1Q7U0FGT05PVlNLSVk6VU5LTk9XTjpSVS1TRlYKK1JVU1NJQTpNT1NLT1ZTS0HvQSBPQkxBU1QgUulTSURVO0NIRUtIT1ZTS0lZOlVOS05PV046UlUtQ0g5CitSVVNTSUE6S0FMT1VKU0tB70EgT0JMQVNUO0laTk9TS09WU0tJWTpVTktOT1dOOlJVLUlaSworUlVTU0lBOktBTE9VSlNLQe9BIE9CTEFTVDtNRURZTlNLSVk6VU5LTk9XTjpSVS1NRFMKK1JVU1NJQTpTTU9MRU5TS0HvQSBPQkxBU1Q7VFlPTUtJTlNLSVk6VU5LTk9XTjpSVS1UWUkKK1JVU1NJQTpNT1NLT1ZTS0HvQSBPQkxBU1QgUulTSURVO1NUVVBJTlNLSVk6VU5LTk9XTjpSVS1TVE4KK1JVU1NJQTpNT1NLT1ZTS0HvQSBPQkxBU1QgUulTSURVO0tPTE9NRU5TS0lZOlVOS05PV046UlUtS0w3CitSVVNTSUE6S0FMT1VKU0tB70EgT0JMQVNUO1pIVUtPVlNLSVk6VU5LTk9XTjpSVS1aSFkKK1JVU1NJQTpSWUFaQU5TS0HvQSBPQkxBU1Q7S0FTSU1PVlNLSVk6VU5LTk9XTjpSVS1LUyAKK1JVU1NJQTpTTU9MRU5TS0HvQSBPQkxBU1Q7VllBWk1BOlVOS05PV046UlUtVllaCitSVVNTSUE6U01PTEVOU0tB70EgT0JMQVNUO1NBRk9OT1ZPOlVOS05PV046UlUtU0ZOCitSVVNTSUE6S0FMT1VKU0tB70EgT0JMQVNUO01BTE9ZQVJPU0xBVkVUU0tJWTpVTktOT1dOOlJVLU1MTAorUlVTU0lBOktBTE9VSlNLQe9BIE9CTEFTVDtPQk5JTlNLOlVOS05PV046UlUtT0JLCitSVVNTSUE6U01PTEVOU0tB70EgT0JMQVNUO1NNT0xFTlNLSVk6VU5LTk9XTjpSVS1TTU4KK1JVU1NJQTpNT1NLT1ZTS0HvQSBPQkxBU1QgUulTSURVO0xVS0hPVklUU0tJWTpVTktOT1dOOlJVLUxLVAorUlVTU0lBOk1PU0tPVlNLQe9BIE9CTEFTVCBS6VNJRFU7S09MT01OQTpVTktOT1dOOlJVLUtMTQorUlVTU0lBOlNNT0xFTlNLQe9BIE9CTEFTVDtZQVJUU0VWTzpVTktOT1dOOlJVLVlSRQorUlVTU0lBOk1PU0tPVlNLQe9BIE9CTEFTVCBS6VNJRFU7U0VSUFVLSE9WU0tJWTpVTktOT1dOOlJVLVNSWQorUlVTU0lBOlJZQVpBTlNLQe9BIE9CTEFTVDtSWUJOT1ZTS0lZOlVOS05PV046UlUtUllWCitSVVNTSUE6UllBWkFOU0tB70EgT0JMQVNUO1lFUk1JU0hJTlNLSVk6VU5LTk9XTjpSVS1ZUjEKK1JVU1NJQTpNT1NLT1ZTS0HvQSBPQkxBU1QgUulTSURVO09aWU9SU0tJWTpVTktOT1dOOlJVLU9aUworUlVTU0lBOlNNT0xFTlNLQe9BIE9CTEFTVDtLQVJEWU1PVlNLSVk6VU5LTk9XTjpSVS1LRFYKK1JVU1NJQTpTTU9MRU5TS0HvQSBPQkxBU1Q7VUdSQU5TS0lZOlVOS05PV046UlUtVUdLCitSVVNTSUE6TU9TS09WU0tB70EgT0JMQVNUIFLpU0lEVTtTVFVQSU5POlVOS05PV046UlUtU1RPCitSVVNTSUE6U01PTEVOU0tB70EgT0JMQVNUO0RPUk9HT0JVWkhTS0lZOlVOS05PV046UlUtRFJaCitSVVNTSUE6S0FMT1VKU0tB70EgT0JMQVNUO0RaRVJaSElOU0tJWTpVTktOT1dOOlJVLURaSworUlVTU0lBOlJZQVpBTlNLQe9BIE9CTEFTVDtLQVNJTU9WOlVOS05PV046UlUtS1MxCitSVVNTSUE6S0FMT1VKU0tB70EgT0JMQVNUO1lVS0hOT1ZTS0lZOlVOS05PV046UlUtWUtLCitSVVNTSUE6TU9TS09WU0tB70EgT0JMQVNUIFLpU0lEVTtTRVJQVUtIT1Y6VU5LTk9XTjpSVS1TUk8KK1JVU1NJQTpSWUFaQU5TS0HvQSBPQkxBU1Q7UllBWkFOU0tJWTpVTktOT1dOOlJVLVJZWQorUlVTU0lBOk1PU0tPVlNLQe9BIE9CTEFTVCBS6VNJRFU7WkFSQVlTS0lZOlVOS05PV046UlUtWlJTCitSVVNTSUE6S0FMT1VKU0tB70EgT0JMQVNUO1RBUlVTU0tJWTpVTktOT1dOOlJVLVRSMworUlVTU0lBOk1PU0tPVlNLQe9BIE9CTEFTVCBS6VNJRFU7T1pFUlk6VU5LTk9XTjpSVS1PWlIKK1JVU1NJQTpSWUFaQU5TS0HvQSBPQkxBU1Q7U1BBU1NLSVk6VU5LTk9XTjpSVS1TUEkKK1JVU1NJQTpNT1NLT1ZTS0HvQSBPQkxBU1QgUulTSURVO0tBU0hJUlNLSVk6VU5LTk9XTjpSVS1LUzIKK1JVU1NJQTpNT1NLT1ZTS0HvQSBPQkxBU1QgUulTSURVO0tBU0hJUkE6VU5LTk9XTjpSVS1LU0EKK1JVU1NJQTpSWUFaQU5TS0HvQSBPQkxBU1Q7U0hJTE9WU0tJWTpVTktOT1dOOlJVLVNJVgorUlVTU0lBOlRPVUxTS0HvQSBPQkxBU1Q7WkFPS1NLSVk6VU5LTk9XTjpSVS1aT1MKK1JVU1NJQTpUT1VMU0tB70EgT0JMQVNUO1lBU05PR09SU0tJWTpVTktOT1dOOlJVLVlTUworUlVTU0lBOlNNT0xFTlNLQe9BIE9CTEFTVDtHTElOS09WU0tJWTpVTktOT1dOOlJVLUdMUworUlVTU0lBOk1PU0tPVlNLQe9BIE9CTEFTVCBS6VNJRFU7WkFSQVlTSzpVTktOT1dOOlJVLVpSWQorUlVTU0lBOlJZQVpBTlNLQe9BIE9CTEFTVDtQSVRFTElOU0tJWTpVTktOT1dOOlJVLVBUWQorUlVTU0lBOlNNT0xFTlNLQe9BIE9CTEFTVDtTTU9MRU5TSzpVTktOT1dOOlJVLVNNUworUlVTU0lBOktBTE9VSlNLQe9BIE9CTEFTVDtNT1NBTFNLSVk6VU5LTk9XTjpSVS1NU1MKK1JVU1NJQTpSWUFaQU5TS0HvQSBPQkxBU1Q7S0FET01TS0lZOlVOS05PV046UlUtS0RZCitSVVNTSUE6S0FMT1VKU0tB70EgT0JMQVNUO0ZFUlpJS09WU0tJWTpVTktOT1dOOlJVLUZSSworUlVTU0lBOlRPVUxTS0HvQSBPQkxBU1Q7VkVORVZTS0lZOlVOS05PV046UlUtVk5LCitSVVNTSUE6S0FMT1VKU0tB70EgT0JMQVNUO0tBTFVHQTpVTktOT1dOOlJVLUtBRworUlVTU0lBOlJZQVpBTlNLQe9BIE9CTEFTVDtSWUFaQU46VU5LTk9XTjpSVS1SWVoKK1JVU1NJQTpTTU9MRU5TS0HvQSBPQkxBU1Q7S1JBU05JTlNLSVk6VU5LTk9XTjpSVS1LQTMKK1JVU1NJQTpUT1VMU0tB70EgT0JMQVNUO0FMRUtTSU5TS0lZOlVOS05PV046UlUtQUwzCitSVVNTSUE6U01PTEVOU0tB70EgT0JMQVNUO1lFTE5JTlNLSVk6VU5LTk9XTjpSVS1ZTE4KK1JVU1NJQTpNT1NLT1ZTS0HvQSBPQkxBU1QgUulTSURVO1NFUkVCUllBTk9QUlVEU0tJWTpVTktOT1dOOlJVLVNSUAorUlVTU0lBOlJZQVpBTlNLQe9BIE9CTEFTVDtaQUtIQVJPVlNLSVk6VU5LTk9XTjpSVS1aS1YKK1JVU1NJQTpLQUxPVUpTS0HvQSBPQkxBU1Q7QkFCWU5JTlNLSVk6VU5LTk9XTjpSVS1CQksKK1JVU1NJQTpTTU9MRU5TS0HvQSBPQkxBU1Q7UE9DSElOS09WU0tJWTpVTktOT1dOOlJVLVBDSworUlVTU0lBOktBTE9VSlNLQe9BIE9CTEFTVDtTUEFTLURFTUVOU0tJWTpVTktOT1dOOlJVLVNQTQorUlVTU0lBOktBTE9VSlNLQe9BIE9CTEFTVDtCQVJZQVRJTlNLSVk6VU5LTk9XTjpSVS1CUjcKK1JVU1NJQTpLQUxPVUpTS0HvQSBPQkxBU1Q7TUVTQ0hPVlNLSVk6VU5LTk9XTjpSVS1NU1YKK1JVU1NJQTpSWUFaQU5TS0HvQSBPQkxBU1Q7U0FTT1ZTS0lZOlVOS05PV046UlUtU1NJCitSVVNTSUE6UllBWkFOU0tB70EgT0JMQVNUO0NIVUNIS09WU0tJWTpVTktOT1dOOlJVLUNVVgorUlVTU0lBOlRPVUxTS0HvQSBPQkxBU1Q7QUxFS1NJTjpVTktOT1dOOlJVLUFMNAorUlVTU0lBOlNNT0xFTlNLQe9BIE9CTEFTVDtNT05BU1RZUlNISU5TS0lZOlVOS05PV046UlUtTU5ICitSVVNTSUE6S0FMT1VKU0tB70EgT0JMQVNUO1BFUkVNWVNITFNLSVk6VU5LTk9XTjpSVS1QRUgKK1JVU1NJQTpSWUFaQU5TS0HvQSBPQkxBU1Q7U1RBUk9aSElMT1ZTS0lZOlVOS05PV046UlUtU1RWCitSVVNTSUE6UllBWkFOU0tB70EgT0JMQVNUO01JS0hBWUxPVlNLSVk6VU5LTk9XTjpSVS1NS1kKK1JVU1NJQTpSWUFaQU5TS0HvQSBPQkxBU1Q7UFJPTlNLSVk6VU5LTk9XTjpSVS1QT1MKK1JVU1NJQTpUT1VMU0tB70EgT0JMQVNUO0xFTklOU0tJWTpVTktOT1dOOlJVLUxOMQorUlVTU0lBOlJZQVpBTlNLQe9BIE9CTEFTVDtTQVNPVk86VU5LTk9XTjpSVS1TQU8KK1JVU1NJQTpLQUxPVUpTS0HvQSBPQkxBU1Q7U1VLSElOSUNIU0tJWTpVTktOT1dOOlJVLVNLQworUlVTU0lBOlRPVUxTS0HvQSBPQkxBU1Q7Tk9WT01PU0tPVlNLSVk6VU5LTk9XTjpSVS1OVk8KK1JVU1NJQTpLQUxPVUpTS0HvQSBPQkxBU1Q7S09aRUxTS0lZOlVOS05PV046UlUtS1pJCitSVVNTSUE6VE9VTFNLQe9BIE9CTEFTVDtEVUJFTlNLSVk6VU5LTk9XTjpSVS1EQksKK1JVU1NJQTpSWUFaQU5TS0HvQSBPQkxBU1Q7UFVUWUFUSU5TS0lZOlVOS05PV046UlUtUFQgCitSVVNTSUE6S0FMT1VKU0tB70EgT0JMQVNUO0tVWUJZU0hFVlNLSVk6VU5LTk9XTjpSVS1LWVYKK1JVU1NJQTpUT1VMU0tB70EgT0JMQVNUO1NVVk9ST1ZTS0lZOlVOS05PV046UlUtU1YzCitSVVNTSUE6VE9VTFNLQe9BIE9CTEFTVDtUVUxBOlVOS05PV046UlUtVFVMCitSVVNTSUE6U01PTEVOU0tB70EgT0JMQVNUO1JPU0xBVkxTS0lZOlVOS05PV046UlUtUlNMCitSVVNTSUE6UllBWkFOU0tB70EgT0JMQVNUO1NIQVRTS0lZOlVOS05PV046UlUtU0FTCitSVVNTSUE6VE9VTFNLQe9BIE9CTEFTVDtLSVJFWUVWU0tJWTpVTktOT1dOOlJVLUtFVgorUlVTU0lBOktBTE9VSlNLQe9BIE9CTEFTVDtLSVJPVlNLSVk6VU5LTk9XTjpSVS1LT1MKK1JVU1NJQTpTTU9MRU5TS0HvQSBPQkxBU1Q7S0hJU0xBVklDSFNLSVk6VU5LTk9XTjpSVS1LSEMKK1JVU1NJQTpLQUxPVUpTS0HvQSBPQkxBU1Q7RFVNSU5JQ0hTS0lZOlVOS05PV046UlUtRE1DCitSVVNTSUE6UllBWkFOU0tB70EgT0JMQVNUO0tPUkFCTElOU0tJWTpVTktOT1dOOlJVLUtBNAorUlVTU0lBOlJZQVpBTlNLQe9BIE9CTEFTVDtTQVBPWkhLT1ZTS0lZOlVOS05PV046UlUtU1BZCitSVVNTSUE6VE9VTFNLQe9BIE9CTEFTVDtPRE9ZRVZTS0lZOlVOS05PV046UlUtT0RLCitSVVNTSUE6VE9VTFNLQe9BIE9CTEFTVDtLSU1PVlNLSVk6VU5LTk9XTjpSVS1LTTIKK1JVU1NJQTpLQUxPVUpTS0HvQSBPQkxBU1Q7S0lST1Y6VU5LTk9XTjpSVS1LSSAKK1JVU1NJQTpLQUxPVUpTS0HvQSBPQkxBU1Q7TFlVRElOT1ZTS0lZOlVOS05PV046UlUtTFlTCitSVVNTSUE6VE9VTFNLQe9BIE9CTEFTVDtVWkxPVlNLSVk6VU5LTk9XTjpSVS1VWksKK1JVU1NJQTpUT1VMU0tB70EgT0JMQVNUO1NDSEVLSU5TS0lZOlVOS05PV046UlUtU0NOCitSVVNTSUE6QlJZQU5TS0HvQSBPQkxBU1Q7Uk9HTkVESU5TS0lZOlVOS05PV046UlUtUkdOCitSVVNTSUE6U01PTEVOU0tB70EgT0JMQVNUO0RFU05PR09SU0s6VU5LTk9XTjpSVS1EU0cKK1JVU1NJQTpUT1VMU0tB70EgT0JMQVNUO05PVk9NT1NLT1ZTSzpVTktOT1dOOlJVLU5WMgorUlVTU0lBOlNNT0xFTlNLQe9BIE9CTEFTVDtTSFVNWUFDSFNLSVk6VU5LTk9XTjpSVS1TSEMKK1JVU1NJQTpUT1VMU0tB70EgT0JMQVNUO0RPTlNLT1k6VU5LTk9XTjpSVS1ETksKK1JVU1NJQTpSWUFaQU5TS0HvQSBPQkxBU1Q7U0FSQVlFVlNLSVk6VU5LTk9XTjpSVS1TUjEKK1JVU1NJQTpUT1VMU0tB70EgT0JMQVNUO1NDSEVLSU5POlVOS05PV046UlUtU0NJCitSVVNTSUE6VE9VTFNLQe9BIE9CTEFTVDtVWkxPVkFZQTpVTktOT1dOOlJVLVVaVgorUlVTU0lBOlRPVUxTS0HvQSBPQkxBU1Q7QkVMWUVWU0tJWTpVTktOT1dOOlJVLUJZVgorUlVTU0lBOlJZQVpBTlNLQe9BIE9CTEFTVDtVS0hPTE9WU0tJWTpVTktOT1dOOlJVLVVLVgorUlVTU0lBOlJZQVpBTlNLQe9BIE9CTEFTVDtTS09QSU5TS0lZOlVOS05PV046UlUtU0tOCitSVVNTSUE6U01PTEVOU0tB70EgT0JMQVNUO1JPU0xBVkwnOlVOS05PV046UlUtUlMgCitSVVNTSUE6VE9VTFNLQe9BIE9CTEFTVDtLSU1PVlNLOlVOS05PV046UlUtS00zCitSVVNTSUE6S0FMT1VKU0tB70EgT0JMQVNUO1VMWUFOT1ZTS0lZOlVOS05PV046UlUtVUxLCitSVVNTSUE6S0FMT1VKU0tB70EgT0JMQVNUO0xZVURJTk9WTzpVTktOT1dOOlJVLUxZTgorUlVTU0lBOktBTE9VSlNLQe9BIE9CTEFTVDtaSElaRFJJTlNLSVk6VU5LTk9XTjpSVS1aSCAKK1JVU1NJQTpCUllBTlNLQe9BIE9CTEFTVDtEWUFUS09WU0tJWTpVTktOT1dOOlJVLURZVgorUlVTU0lBOlJZQVpBTlNLQe9BIE9CTEFTVDtSWUFaSFNLSVk6VU5LTk9XTjpSVS1SWSAKK1JVU1NJQTpCUllBTlNLQe9BIE9CTEFTVDtEVUJST1ZTS0lZOlVOS05PV046UlUtREJJCitSVVNTSUE6VE9VTFNLQe9BIE9CTEFTVDtCT0dPUk9ESVRTS0lZOlVOS05PV046UlUtQkdZCitSVVNTSUE6UllBWkFOU0tB70EgT0JMQVNUO1NLT1BJTjpVTktOT1dOOlJVLVNLUAorUlVTU0lBOlRPVUxTS0HvQSBPQkxBU1Q7UExBVlNLSVk6VU5LTk9XTjpSVS1QTEsKK1JVU1NJQTpSWUFaQU5TS0HvQSBPQkxBU1Q7TUlMT1NMQVZTS0lZOlVOS05PV046UlUtTUxJCitSVVNTSUE6VE9VTFNLQe9BIE9CTEFTVDtURVBMTy1PR0FSRVZTS0lZOlVOS05PV046UlUtVFBSCitSVVNTSUE6VE9VTFNLQe9BIE9CTEFTVDtBUlNFTllFVlNLSVk6VU5LTk9XTjpSVS1BUkkKK1JVU1NJQTpUT1VMU0tB70EgT0JMQVNUO0JPR09ST0RJVFNLOlVOS05PV046UlUtQkcgCitSVVNTSUE6QlJZQU5TS0HvQSBPQkxBU1Q7WkhVS09WU0tJWTpVTktOT1dOOlJVLVpIMQorUlVTU0lBOlNNT0xFTlNLQe9BIE9CTEFTVDtZRVJTSElDSFNLSVk6VU5LTk9XTjpSVS1ZUkMKK1JVU1NJQTpLQUxPVUpTS0HvQSBPQkxBU1Q7S0hWQVNUT1ZJQ0hTS0lZOlVOS05PV046UlUtS0hICitSVVNTSUE6VE9VTFNLQe9BIE9CTEFTVDtWT0xPVlNLSVk6VU5LTk9XTjpSVS1WTDYKK1JVU1NJQTpUT1VMU0tB70EgT0JMQVNUO0tVUktJTlNLSVk6VU5LTk9XTjpSVS1LS04KK1JVU1NJQTpUT1VMU0tB70EgT0JMQVNUO0NIRVJOU0tJWTpVTktOT1dOOlJVLUNFUworUlVTU0lBOkJSWUFOU0tB70EgT0JMQVNUO0tMRVROWUFOU0tJWTpVTktOT1dOOlJVLUtMOAorUlVTU0lBOlJZQVpBTlNLQe9BIE9CTEFTVDtOT1ZPREVSRVZFTlNLSVk6VU5LTk9XTjpSVS1OVkUKK1JVU1NJQTpPUkxPVlNLQe9BIE9CTEFTVDtCT0xLSE9WU0tJWTpVTktOT1dOOlJVLUJLVgorUlVTU0lBOkJSWUFOU0tB70EgT0JMQVNUO0RZQVQnS09WTzpVTktOT1dOOlJVLURZSworUlVTU0lBOkJSWUFOU0tB70EgT0JMQVNUO0JSWUFOU0tJWTpVTktOT1dOOlJVLUJSOAorUlVTU0lBOk9STE9WU0tB70EgT0JMQVNUO1pOQU1FTlNLSVk6VU5LTk9XTjpSVS1aTlMKK1JVU1NJQTpPUkxPVlNLQe9BIE9CTEFTVDtNVFNFTlNLSVk6VU5LTk9XTjpSVS1NVFMKK1JVU1NJQTpUT1VMU0tB70EgT0JMQVNUO0tBTUVOU0tJWTpVTktOT1dOOlJVLUtNNAorUlVTU0lBOlRPVUxTS0HvQSBPQkxBU1Q7WUVGUkVNT1ZTS0lZOlVOS05PV046UlUtWUZWCitSVVNTSUE6T1JMT1ZTS0HvQSBPQkxBU1Q7S0hPVFlORVRTS0lZOlVOS05PV046UlUtS0hUCitSVVNTSUE6QlJZQU5TS0HvQSBPQkxBU1Q7S0FSQUNIRVZTS0lZOlVOS05PV046UlUtS0FWCitSVVNTSUE6QlJZQU5TS0HvQSBPQkxBU1Q7U1VSQVpIU0tJWTpVTktOT1dOOlJVLVNSMgorUlVTU0lBOkJSWUFOU0tB70EgT0JMQVNUO0JSWUFOU0s6VU5LTk9XTjpSVS1CUjkKK1JVU1NJQTpCUllBTlNLQe9BIE9CTEFTVDtaSElSWUFUSU5TS0lZOlVOS05PV046UlUtWkgyCitSVVNTSUE6T1JMT1ZTS0HvQSBPQkxBU1Q7TVpFTlNLOlVOS05PV046UlUtTVpOCitSVVNTSUE6QlJZQU5TS0HvQSBPQkxBU1Q7TUdMSU5TS0lZOlVOS05PV046UlUtTUdTCitSVVNTSUE6T1JMT1ZTS0HvQSBPQkxBU1Q7S09SU0FLT1ZTS0lZOlVOS05PV046UlUtS1MzCitSVVNTSUE6T1JMT1ZTS0HvQSBPQkxBU1Q7T1JMT1ZTS0lZOlVOS05PV046UlUtT1JTCitSVVNTSUE6QlJZQU5TS0HvQSBPQkxBU1Q7S1JBU05PR09SU0tJWTpVTktOT1dOOlJVLUtBNQorUlVTU0lBOkJSWUFOU0tB70EgT0JMQVNUO1ZZR09OSUNIU0tJWTpVTktOT1dOOlJVLVZZSAorUlVTU0lBOkJSWUFOU0tB70EgT0JMQVNUO1BPQ0hFUFNLSVk6VU5LTk9XTjpSVS1QQ1AKK1JVU1NJQTpPUkxPVlNLQe9BIE9CTEFTVDtOT1ZPU0lMU0tJWTpVTktOT1dOOlJVLU5WMworUlVTU0lBOk9STE9WU0tB70EgT0JMQVNUO1VSSVRTS0lZOlVOS05PV046UlUtVVJJCitSVVNTSUE6VE9VTFNLQe9BIE9CTEFTVDtFRlJFTU9WOlVOS05PV046UlUtRUZNCitSVVNTSUE6QlJZQU5TS0HvQSBPQkxBU1Q7R09SREVZRVZTS0lZOlVOS05PV046UlUtR1JJCitSVVNTSUE6T1JMT1ZTS0HvQSBPQkxBU1Q7Tk9WT0RFUkVWRU5LT1ZTS0lZOlVOS05PV046UlUtTlY0CitSVVNTSUE6QlJZQU5TS0HvQSBPQkxBU1Q7TkFWTElOU0tJWTpVTktOT1dOOlJVLU5WNQorUlVTU0lBOk9STE9WU0tB70EgT0JMQVNUO1pBTEVHT1NDSEVOU0tJWTpVTktOT1dOOlJVLVpMRQorUlVTU0lBOk9STE9WU0tB70EgT0JMQVNUO1NIQUJMWUtJTlNLSVk6VU5LTk9XTjpSVS1TQUsKK1JVU1NJQTpPUkxPVlNLQe9BIE9CTEFTVDtPUllPTDpVTktOT1dOOlJVLU9STAorUlVTU0lBOkJSWUFOU0tB70EgT0JMQVNUO1VORUNIU0tJWTpVTktOT1dOOlJVLVVOSworUlVTU0lBOk9STE9WU0tB70EgT0JMQVNUO1ZFUktIT1ZTS0lZOlVOS05PV046UlUtVlIyCitSVVNTSUE6QlJZQU5TS0HvQSBPQkxBU1Q7S0xJTlRTT1ZTS0lZOlVOS05PV046UlUtS0w5CitSVVNTSUE6T1JMT1ZTS0HvQSBPQkxBU1Q7S1JBU05PWk9SRU5TS0lZOlVOS05PV046UlUtS0E2CitSVVNTSUE6T1JMT1ZTS0HvQSBPQkxBU1Q7U09TS09WU0tJWTpVTktOT1dOOlJVLVNTWQorUlVTU0lBOkJSWUFOU0tB70EgT0JMQVNUO1RSVUJDSEVWU0tJWTpVTktOT1dOOlJVLVRSNAorUlVTU0lBOk9STE9WU0tB70EgT0JMQVNUO1NWRVJETE9WU0tJWTpVTktOT1dOOlJVLVNWNAorUlVTU0lBOk9STE9WU0tB70EgT0JMQVNUO0tST01TS0lZOlVOS05PV046UlUtS09LCitSVVNTSUE6QlJZQU5TS0HvQSBPQkxBU1Q7QlJBU09WU0tJWTpVTktOT1dOOlJVLUJBVgorUlVTU0lBOkJSWUFOU0tB70EgT0JMQVNUO0tMSU5UU1k6VU5LTk9XTjpSVS1LTFQKK1JVU1NJQTpPUkxPVlNLQe9BIE9CTEFTVDtQT0tST1ZTS0lZOlVOS05PV046UlUtUEtWCitSVVNTSUE6QlJZQU5TS0HvQSBPQkxBU1Q7Tk9WT1pZQktPVlNLSVk6VU5LTk9XTjpSVS1OVjYKK1JVU1NJQTpCUllBTlNLQe9BIE9CTEFTVDtTVEFST0RVQlNLSVk6VU5LTk9XTjpSVS1TVEIKK1JVU1NJQTpCUllBTlNLQe9BIE9CTEFTVDtQT0dBUlNLSVk6VU5LTk9XTjpSVS1QR1MKK1JVU1NJQTpPUkxPVlNLQe9BIE9CTEFTVDtETUlUUk9WU0tJWTpVTktOT1dOOlJVLURNWQorUlVTU0lBOk9STE9WU0tB70EgT0JMQVNUO0xJVkVOU0tJWTpVTktOT1dOOlJVLUxWSworUlVTU0lBOkJSWUFOU0tB70EgT0JMQVNUO1NVWkVNU0tJWTpVTktOT1dOOlJVLVNaUworUlVTU0lBOk9STE9WU0tB70EgT0JMQVNUO0dMQVpVTk9WU0tJWTpVTktOT1dOOlJVLUdMSworUlVTU0lBOk9STE9WU0tB70EgT0JMQVNUO01BTE9BUktIQU5HRUxTS0lZOlVOS05PV046UlUtTUxOCitSVVNTSUE6QlJZQU5TS0HvQSBPQkxBU1Q7Tk9WT1pZQktPVjpVTktOT1dOOlJVLU5WQgorUlVTU0lBOkJSWUFOU0tB70EgT0JMQVNUO0tMSU1PVlNLSVk6VU5LTk9XTjpSVS1LSVMKK1JVU1NJQTpCUllBTlNLQe9BIE9CTEFTVDtLT01BUklDSFNLSVk6VU5LTk9XTjpSVS1LTUMKK1JVU1NJQTpPUkxPVlNLQe9BIE9CTEFTVDtUUk9TTllBTlNLSVk6VU5LTk9XTjpSVS1UUjUKK1JVU1NJQTpPUkxPVlNLQe9BIE9CTEFTVDtMSVZOWTpVTktOT1dOOlJVLUxJTgorUlVTU0lBOkJSWUFOU0tB70EgT0JMQVNUO1pMWU5LT1ZTS0lZOlVOS05PV046UlUtWkxWCitSVVNTSUE6T1JMT1ZTS0HvQSBPQkxBU1Q7S09MUE5ZQU5TS0lZOlVOS05PV046UlUtS1BOCitSVVNTSUE6QlJZQU5TS0HvQSBPQkxBU1Q7U0VWU0tJWTpVTktOT1dOOlJVLVNWNQorUlVTU0lBOk9STE9WU0tB70EgT0JMQVNUO0RPTFpIQU5TS0lZOlVOS05PV046UlUtRExZCitSVVNTSUE6TEVOSU5HUkFEU0tB70EgT0JMQVNUIFLpUztWWUJPUkdTS0lZOlVOS05PV046UlUtVllHCitSVVNTSUE6TEVOSU5HUkFEU0tB70EgT0JMQVNUIFLpUztQT0RQT1JPWkhTS0lZOlVOS05PV046UlUtUERaCitSVVNTSUE6TEVOSU5HUkFEU0tB70EgT0JMQVNUIFLpUztQUklPWkVSU0tJWTpVTktOT1dOOlJVLVBJUgorUlVTU0lBOkxFTklOR1JBRFNLQe9BIE9CTEFTVCBS6VM7UFJJT1pFUlNLOlVOS05PV046UlUtUElTCitSVVNTSUE6TEVOSU5HUkFEU0tB70EgT0JMQVNUIFLpUztMT0RFWU5PUE9MU0tJWTpVTktOT1dOOlJVLUxEUAorUlVTU0lBOkxFTklOR1JBRFNLQe9BIE9CTEFTVCBS6VM7UE9EUE9ST1pIWUU6VU5LTk9XTjpSVS1QRFkKK1JVU1NJQTpMRU5JTkdSQURTS0HvQSBPQkxBU1QgUulTO0xPREVZTk9ZRSBQT0xFOlVOS05PV046UlUtTERZCitSVVNTSUE6TEVOSU5HUkFEU0tB70EgT0JMQVNUIFLpUztWWUJPUkc6VU5LTk9XTjpSVS1WWTEKK1JVU1NJQTpMRU5JTkdSQURTS0HvQSBPQkxBU1QgUulTO1ZPTEtIT1ZTS0lZOlVOS05PV046UlUtVkw3CitSVVNTSUE6TEVOSU5HUkFEU0tB70EgT0JMQVNUIFLpUztWU0VWT0xaSFNLSVk6VU5LTk9XTjpSVS1WU1oKK1JVU1NJQTpTQU5LVC1QRVRFUkJVUkc7U0FOS1QtUEVURVJTQlVSRzpVTktOT1dOOlJVLVNOVAorUlVTU0lBOkxFTklOR1JBRFNLQe9BIE9CTEFTVCBS6VM7VElLSFZJTlNLSVk6VU5LTk9XTjpSVS1US04KK1JVU1NJQTpMRU5JTkdSQURTS0HvQSBPQkxBU1QgUulTO0xPTU9OT1NPVlNLSVk6VU5LTk9XTjpSVS1MTVYKK1JVU1NJQTpMRU5JTkdSQURTS0HvQSBPQkxBU1QgUulTO0JPS1NJVE9HT1JTS0lZOlVOS05PV046UlUtQktHCitSVVNTSUE6TEVOSU5HUkFEU0tB70EgT0JMQVNUIFLpUztWU0VWT0xPWkhTSzpVTktOT1dOOlJVLVZTSAorUlVTU0lBOkxFTklOR1JBRFNLQe9BIE9CTEFTVCBS6VM7S0lST1ZTS0lZOlVOS05PV046UlUtS09JCitSVVNTSUE6TEVOSU5HUkFEU0tB70EgT0JMQVNUIFLpUztTT1NOT1ZZSSBCT1I6VU5LTk9XTjpSVS1TUyAKK1JVU1NJQTpMRU5JTkdSQURTS0HvQSBPQkxBU1QgUulTO0tJTkdJU0VQUFNLSVk6VU5LTk9XTjpSVS1LTjEKK1JVU1NJQTpMRU5JTkdSQURTS0HvQSBPQkxBU1QgUulTO1ZPTEtIT1Y6VU5LTk9XTjpSVS1WTDgKK1JVU1NJQTpMRU5JTkdSQURTS0HvQSBPQkxBU1QgUulTO0tJUk9WU0s6VU5LTk9XTjpSVS1LT1YKK1JVU1NJQTpMRU5JTkdSQURTS0HvQSBPQkxBU1QgUulTO0tJUklTSFNLSVk6VU5LTk9XTjpSVS1LSUgKK1JVU1NJQTpMRU5JTkdSQURTS0HvQSBPQkxBU1QgUulTO1RPU05FTlNLSVk6VU5LTk9XTjpSVS1UU04KK1JVU1NJQTpMRU5JTkdSQURTS0HvQSBPQkxBU1QgUulTO0dBVENISU5TS0lZOlVOS05PV046UlUtR1ROCitSVVNTSUE6TEVOSU5HUkFEU0tB70EgT0JMQVNUIFLpUztWT0xPU09WU0tJWTpVTktOT1dOOlJVLVZMOQorUlVTU0lBOkxFTklOR1JBRFNLQe9BIE9CTEFTVCBS6VM7VElLSFZJTjpVTktOT1dOOlJVLVRLSQorUlVTU0lBOkxFTklOR1JBRFNLQe9BIE9CTEFTVCBS6VM7R0FUQ0hJTkE6VU5LTk9XTjpSVS1HVEgKK1JVU1NJQTpMRU5JTkdSQURTS0HvQSBPQkxBU1QgUulTO1RPU05POlVOS05PV046UlUtVE9OCitSVVNTSUE6TEVOSU5HUkFEU0tB70EgT0JMQVNUIFLpUztCT0tTSVRPR09SU0s6VU5LTk9XTjpSVS1CS08KK1JVU1NJQTpMRU5JTkdSQURTS0HvQSBPQkxBU1QgUulTO0lWQU5HT1JPRDpVTktOT1dOOlJVLUlWUgorUlVTU0lBOkxFTklOR1JBRFNLQe9BIE9CTEFTVCBS6VM7S0lOR0lTRVBQOlVOS05PV046UlUtS05FCitSVVNTSUE6TEVOSU5HUkFEU0tB70EgT0JMQVNUIFLpUztQSUtBTEVWTzpVTktOT1dOOlJVLVBLTAorUlVTU0lBOkxFTklOR1JBRFNLQe9BIE9CTEFTVCBS6VM7U0xBTlRTRVZTS0lZOlVOS05PV046UlUtU0xZCitSVVNTSUE6TEVOSU5HUkFEU0tB70EgT0JMQVNUIFLpUztLSVJJU0hJOlVOS05PV046UlUtS0lJCitSVVNTSUE6Tk9WR09ST0RTS0HvQSBPQkxBU1Q7Q0hVRE9WU0tJWTpVTktOT1dOOlJVLUNVUworUlVTU0lBOk5PVkdPUk9EU0tB70EgT0JMQVNUO0xZVUJZVElOU0tJWTpVTktOT1dOOlJVLUxZSworUlVTU0lBOkxFTklOR1JBRFNLQe9BIE9CTEFTVCBS6VM7TFVaSFNLSVk6VU5LTk9XTjpSVS1MWkkKK1JVU1NJQTpOT1ZHT1JPRFNLQe9BIE9CTEFTVDtLSFZPWU5JTlNLSVk6VU5LTk9XTjpSVS1LSDkKK1JVU1NJQTpOT1ZHT1JPRFNLQe9BIE9CTEFTVDtNQUxPVklTSEVSU0tJWTpVTktOT1dOOlJVLU1MRQorUlVTU0lBOkxFTklOR1JBRFNLQe9BIE9CTEFTVCBS6VM7U0xBTlRTWTpVTktOT1dOOlJVLVNMIAorUlVTU0lBOk5PVkdPUk9EU0tB70EgT0JMQVNUO05PVkdPUk9EU0tJWTpVTktOT1dOOlJVLU5WRAorUlVTU0lBOlBTS09WU0tB70EgT0JMQVNUO0dET1ZTS0lZOlVOS05PV046UlUtR0RTCitSVVNTSUE6UFNLT1ZTS0HvQSBPQkxBU1Q7UExZVVNTS0lZOlVOS05PV046UlUtUExJCitSVVNTSUE6Tk9WR09ST0RTS0HvQSBPQkxBU1Q7QkFURVRTS0lZOlVOS05PV046UlUtQlRLCitSVVNTSUE6TEVOSU5HUkFEU0tB70EgT0JMQVNUIFLpUztMVUdBOlVOS05PV046UlUtTFVHCitSVVNTSUE6Tk9WR09ST0RTS0HvQSBPQkxBU1Q7UEVTVE9WU0tJWTpVTktOT1dOOlJVLVBTSQorUlVTU0lBOk5PVkdPUk9EU0tB70EgT0JMQVNUO0JPUk9WSUNIU0tJWTpVTktOT1dOOlJVLUJSQworUlVTU0lBOk5PVkdPUk9EU0tB70EgT0JMQVNUO01PU0hFTlNLSVk6VU5LTk9XTjpSVS1NU04KK1JVU1NJQTpOT1ZHT1JPRFNLQe9BIE9CTEFTVDtPS1VMT1ZTS0lZOlVOS05PV046UlUtT0tWCitSVVNTSUE6Tk9WR09ST0RTS0HvQSBPQkxBU1Q7Tk9WR09ST0Q6VU5LTk9XTjpSVS1OVlIKK1JVU1NJQTpQU0tPVlNLQe9BIE9CTEFTVDtTVFJVR08tS1JBU05FTlNLSVk6VU5LTk9XTjpSVS1TVFMKK1JVU1NJQTpOT1ZHT1JPRFNLQe9BIE9CTEFTVDtLUkVTVEVUU0tJWTpVTktOT1dOOlJVLUtFVAorUlVTU0lBOk5PVkdPUk9EU0tB70EgT0JMQVNUO1NISU1TS0lZOlVOS05PV046UlUtU0lTCitSVVNTSUE6Tk9WR09ST0RTS0HvQSBPQkxBU1Q7Qk9ST1ZJQ0hJOlVOS05PV046UlUtQk9DCitSVVNTSUE6UFNLT1ZTS0HvQSBPQkxBU1Q7UFNLT1ZTS0lZOlVOS05PV046UlUtUFNZCitSVVNTSUE6Tk9WR09ST0RTS0HvQSBPQkxBU1Q7U09MRVRTS0lZOlVOS05PV046UlUtU0wxCitSVVNTSUE6Tk9WR09ST0RTS0HvQSBPQkxBU1Q7U1RBUk9SVVNTS0lZOlVOS05PV046UlUtU1RJCitSVVNTSUE6Tk9WR09ST0RTS0HvQSBPQkxBU1Q7UEFSRklOTzpVTktOT1dOOlJVLVBSTworUlVTU0lBOk5PVkdPUk9EU0tB70EgT0JMQVNUO1ZBTERBWVNLSVk6VU5LTk9XTjpSVS1WRFMKK1JVU1NJQTpQU0tPVlNLQe9BIE9CTEFTVDtQT1JLSE9WU0tJWTpVTktOT1dOOlJVLVBLUworUlVTU0lBOk5PVkdPUk9EU0tB70EgT0JMQVNUO0RFTVlBTlNLSVk6VU5LTk9XTjpSVS1ETU4KK1JVU1NJQTpOT1ZHT1JPRFNLQe9BIE9CTEFTVDtWT0xPVE9WU0tJWTpVTktOT1dOOlJVLVZPVgorUlVTU0lBOk5PVkdPUk9EU0tB70EgT0JMQVNUO1NUQVJBWUEgUlVTU0E6VU5LTk9XTjpSVS1TVFIKK1JVU1NJQTpQU0tPVlNLQe9BIE9CTEFTVDtQRUNIT1JTS0lZOlVOS05PV046UlUtUENJCitSVVNTSUE6UFNLT1ZTS0HvQSBPQkxBU1Q7RE5PVlNLSVk6VU5LTk9XTjpSVS1ETkkKK1JVU1NJQTpQU0tPVlNLQe9BIE9CTEFTVDtQU0tPVjpVTktOT1dOOlJVLVBTIAorUlVTU0lBOk5PVkdPUk9EU0tB70EgT0JMQVNUO1BPRERPUlNLSVk6VU5LTk9XTjpSVS1QRFIKK1JVU1NJQTpQU0tPVlNLQe9BIE9CTEFTVDtQQUxLSU5TS0lZOlVOS05PV046UlUtUEwgCitSVVNTSUE6UFNLT1ZTS0HvQSBPQkxBU1Q7REVET1ZJQ0hFU0tJWTpVTktOT1dOOlJVLURESAorUlVTU0lBOlBTS09WU0tB70EgT0JMQVNUO09TVFJPVlNLSVk6VU5LTk9XTjpSVS1PU0kKK1JVU1NJQTpOT1ZHT1JPRFNLQe9BIE9CTEFTVDtNQVJFVlNLSVk6VU5LTk9XTjpSVS1NUjIKK1JVU1NJQTpQU0tPVlNLQe9BIE9CTEFTVDtCRVpIQU5JVFNLSVk6VU5LTk9XTjpSVS1CWksKK1JVU1NJQTpQU0tPVlNLQe9BIE9CTEFTVDtQWVRBTE9WU0tJWTpVTktOT1dOOlJVLVBZVgorUlVTU0lBOk5PVkdPUk9EU0tB70EgT0JMQVNUO0tIT0xNU0tJWTpVTktOT1dOOlJVLUtPWQorUlVTU0lBOlBTS09WU0tB70EgT0JMQVNUO05PVk9SWkhFVlNLSVk6VU5LTk9XTjpSVS1OVjcKK1JVU1NJQTpQU0tPVlNLQe9BIE9CTEFTVDtPU1RST1Y6VU5LTk9XTjpSVS1PU1IKK1JVU1NJQTpQU0tPVlNLQe9BIE9CTEFTVDtMT0tOWUFOU0tJWTpVTktOT1dOOlJVLUxLTgorUlVTU0lBOlBTS09WU0tB70EgT0JMQVNUO1BVU0hLSU5PLUdPUlNLSVk6VU5LTk9XTjpSVS1QU0cKK1JVU1NJQTpQU0tPVlNLQe9BIE9CTEFTVDtLUkFTTk9HT1JPRFNLSVk6VU5LTk9XTjpSVS1LQUQKK1JVU1NJQTpQU0tPVlNLQe9BIE9CTEFTVDtPUE9DSEVOU0tJWTpVTktOT1dOOlJVLU9QUworUlVTU0lBOlBTS09WU0tB70EgT0JMQVNUO1ZFTElLT0xVS1NLSVk6VU5LTk9XTjpSVS1WSUsKK1JVU1NJQTpQU0tPVlNLQe9BIE9CTEFTVDtOT1ZPU09LT0xOSUNIRVNLSVk6VU5LTk9XTjpSVS1OVkMKK1JVU1NJQTpQU0tPVlNLQe9BIE9CTEFTVDtQVVNUT1NIS0lOU0tJWTpVTktOT1dOOlJVLVBTMQorUlVTU0lBOlBTS09WU0tB70EgT0JMQVNUO1NFQkVaSFNLSVk6VU5LTk9XTjpSVS1TQkgKK1JVU1NJQTpQU0tPVlNLQe9BIE9CTEFTVDtLVU5ZSU5TS0lZOlVOS05PV046UlUtS04yCitSVVNTSUE6UFNLT1ZTS0HvQSBPQkxBU1Q7VkVMSUtJRSBMVUtJOlVOS05PV046UlUtVkxVCitSVVNTSUE6UFNLT1ZTS0HvQSBPQkxBU1Q7TkVWRUxTS0lZOlVOS05PV046UlUtTlY4CitSVVNTSUE6UFNLT1ZTS0HvQSBPQkxBU1Q7VVNWWUFUU0tJWTpVTktOT1dOOlJVLVVTVAorUlVTU0lBOlJPU1RPVlNLQe9BIE9CTEFTVDtWRVJLSE5FRE9OU0tPWTpVTktOT1dOOlJVLVZSTworUlVTU0lBOlJPU1RPVlNLQe9BIE9CTEFTVDtTSE9MT0tIT1ZTS0lZOlVOS05PV046UlUtU09TCitSVVNTSUE6Uk9TVE9WU0tB70EgT0JMQVNUO0NIRVJUS09WU0tJWTpVTktOT1dOOlJVLUNFVgorUlVTU0lBOlJPU1RPVlNLQe9BIE9CTEFTVDtCT0tPVlNLSVk6VU5LTk9XTjpSVS1CS0sKK1JVU1NJQTpST1NUT1ZTS0HvQSBPQkxBU1Q7S0FTSEFSU0tJWTpVTktOT1dOOlJVLUtTNAorUlVTU0lBOlJPU1RPVlNLQe9BIE9CTEFTVDtNSUxMRVJPVlNLSVk6VU5LTk9XTjpSVS1NTFkKK1JVU1NJQTpST1NUT1ZTS0HvQSBPQkxBU1Q7U09WRVRTS0lZOlVOS05PV046UlUtU1Y2CitSVVNTSUE6Uk9TVE9WU0tB70EgT0JMQVNUO01JTExFUk9WTzpVTktOT1dOOlJVLU1MUgorUlVTU0lBOlJPU1RPVlNLQe9BIE9CTEFTVDtNSUxZVVRJTlNLSVk6VU5LTk9XTjpSVS1NTCAKK1JVU1NJQTpST1NUT1ZTS0HvQSBPQkxBU1Q7T0JMSVZTS0lZOlVOS05PV046UlUtT0JJCitSVVNTSUE6Uk9TVE9WU0tB70EgT0JMQVNUO1RBUkFTT1ZTS0lZOlVOS05PV046UlUtVFI2CitSVVNTSUE6Uk9TVE9WU0tB70EgT0JMQVNUO0tBTUVOU0tJWTpVTktOT1dOOlJVLUtNNQorUlVTU0lBOlJPU1RPVlNLQe9BIE9CTEFTVDtCRUxPS0FMSVRWSU5TS0lZOlVOS05PV046UlUtQk9UCitSVVNTSUE6Uk9TVE9WU0tB70EgT0JMQVNUO1RBVFNZTlNLSVk6VU5LTk9XTjpSVS1UVEsKK1JVU1NJQTpST1NUT1ZTS0HvQSBPQkxBU1Q7TU9ST1pPVlNLSVk6VU5LTk9XTjpSVS1NUjMKK1JVU1NJQTpST1NUT1ZTS0HvQSBPQkxBU1Q7RE9ORVRTSzpVTktOT1dOOlJVLUROVAorUlVTU0lBOlJPU1RPVlNLQe9BIE9CTEFTVDtLQU1FTlNLLVNIQUtIVElOU0tJWTpVTktOT1dOOlJVLUtNSAorUlVTU0lBOlJPU1RPVlNLQe9BIE9CTEFTVDtCRUxBWUEgS0FMSVRWQTpVTktOT1dOOlJVLUJBSworUlVTU0lBOlJPU1RPVlNLQe9BIE9CTEFTVDtLUkFTTk9TVUxJTlNLSVk6VU5LTk9XTjpSVS1LQTcKK1JVU1NJQTpST1NUT1ZTS0HvQSBPQkxBU1Q7R1VLT1ZPOlVOS05PV046UlUtR1VWCitSVVNTSUE6Uk9TVE9WU0tB70EgT0JMQVNUO1RTWU1MWUFOU0tJWTpVTktOT1dOOlJVLVRTUworUlVTU0lBOlJPU1RPVlNLQe9BIE9CTEFTVDtaVkVSRVZPOlVOS05PV046UlUtWlZPCitSVVNTSUE6Uk9TVE9WU0tB70EgT0JMQVNUO0tPTlNUQU5USU5PVlNLSVk6VU5LTk9XTjpSVS1LTjMKK1JVU1NJQTpST1NUT1ZTS0HvQSBPQkxBU1Q7S1JBU05ZSSBTVUxJTjpVTktOT1dOOlJVLUtBVQorUlVTU0lBOlJPU1RPVlNLQe9BIE9CTEFTVDtVU1QtRE9ORVRTS0lZOlVOS05PV046UlUtVVM5CitSVVNTSUE6Uk9TVE9WU0tB70EgT0JMQVNUO1JPRElPTk9WTy1ORVNWRVRBWVNLSVk6VU5LTk9XTjpSVS1SRFMKK1JVU1NJQTpST1NUT1ZTS0HvQSBPQkxBU1Q7S1VZQllTSEVWU0tJWTpVTktOT1dOOlJVLUtZMQorUlVTU0lBOlJPU1RPVlNLQe9BIE9CTEFTVDtOT1ZPU0hBS0hUSU5TSzpVTktOT1dOOlJVLU5WSAorUlVTU0lBOlJPU1RPVlNLQe9BIE9CTEFTVDtPS1RZQUJSU0tJWTpVTktOT1dOOlJVLU9LMworUlVTU0lBOlJPU1RPVlNLQe9BIE9CTEFTVDtTSEFLSFRZOlVOS05PV046UlUtU0hUCitSVVNTSUE6Uk9TVE9WU0tB70EgT0JMQVNUO01BVFZFWUVWTy1LVVJHQU5TS0lZOlVOS05PV046UlUtTVRLCitSVVNTSUE6Uk9TVE9WU0tB70EgT0JMQVNUO0RVQk9WU0tJWTpVTktOT1dOOlJVLURCWQorUlVTU0lBOlJPU1RPVlNLQe9BIE9CTEFTVDtWT0xHT0RPTlNLSVk6VU5LTk9XTjpSVS1WTE4KK1JVU1NJQTpST1NUT1ZTS0HvQSBPQkxBU1Q7U0VNSUtBUkFLT1JTS0lZOlVOS05PV046UlUtU01PCitSVVNTSUE6Uk9TVE9WU0tB70EgT0JMQVNUO05FS0xJTk9WU0tJWTpVTktOT1dOOlJVLU5LIAorUlVTU0lBOlJPU1RPVlNLQe9BIE9CTEFTVDtWT0xHT0RPTlNLOlVOS05PV046UlUtVkdECitSVVNTSUE6Uk9TVE9WU0tB70EgT0JMQVNUO1pBVkVUSU5TS0lZOlVOS05PV046UlUtWlZTCitSVVNTSUE6Uk9TVE9WU0tB70EgT0JMQVNUO0FLU0FZU0tJWTpVTktOT1dOOlJVLUFLUworUlVTU0lBOlJPU1RPVlNLQe9BIE9CTEFTVDtNWUFTTklLT1ZTS0lZOlVOS05PV046UlUtTVlWCitSVVNTSUE6Uk9TVE9WU0tB70EgT0JMQVNUO05PVk9DSEVSS0FTU0s6VU5LTk9XTjpSVS1OVjkKK1JVU1NJQTpST1NUT1ZTS0HvQSBPQkxBU1Q7TUFSVFlOT1ZTS0lZOlVOS05PV046UlUtTVI0CitSVVNTSUE6Uk9TVE9WU0tB70EgT0JMQVNUO1pJTU9WTklLT1ZTS0lZOlVOS05PV046UlUtWk1LCitSVVNTSUE6Uk9TVE9WU0tB70EgT0JMQVNUO0JBR0FZRVZTS0lZOlVOS05PV046UlUtQkdWCitSVVNTSUE6Uk9TVE9WU0tB70EgT0JMQVNUO1JPU1RPVi1OQS1ET05ZOlVOS05PV046UlUtUlNBCitSVVNTSUE6Uk9TVE9WU0tB70EgT0JMQVNUO1ZFU0VMT1ZTS0lZOlVOS05PV046UlUtVlNWCitSVVNTSUE6Uk9TVE9WU0tB70EgT0JMQVNUO1RBR0FOUk9HOlVOS05PV046UlUtVEdOCitSVVNTSUE6Uk9TVE9WU0tB70EgT0JMQVNUO0FaT1ZTS0lZOlVOS05PV046UlUtQVpTCitSVVNTSUE6Uk9TVE9WU0tB70EgT0JMQVNUO1BST0xFVEFSU0tJWTpVTktOT1dOOlJVLVBPUgorUlVTU0lBOlJPU1RPVlNLQe9BIE9CTEFTVDtCQVRBWVNLOlVOS05PV046UlUtQlRZCitSVVNTSUE6Uk9TVE9WU0tB70EgT0JMQVNUO09STE9WU0tJWTpVTktOT1dOOlJVLU9SSworUlVTU0lBOlJPU1RPVlNLQe9BIE9CTEFTVDtBWk9WOlVOS05PV046UlUtQVpWCitSVVNTSUE6Uk9TVE9WU0tB70EgT0JMQVNUO0tBR0FMTklUU0tJWTpVTktOT1dOOlJVLUtHVAorUlVTU0lBOlJPU1RPVlNLQe9BIE9CTEFTVDtaRVJOT0dSQURTS0lZOlVOS05PV046UlUtWlJECitSVVNTSUE6Uk9TVE9WU0tB70EgT0JMQVNUO1NBTFNLSVk6VU5LTk9XTjpSVS1TTDIKK1JVU1NJQTpST1NUT1ZTS0HvQSBPQkxBU1Q7VFNFTElOU0tJWTpVTktOT1dOOlJVLVRTSworUlVTU0lBOktSQVNOT0RBUlNLSSBLUkHvIFLpU0lEVUU7U0NIRVJCSU5PVlNLSVk6VU5LTk9XTjpSVS1TQ08KK1JVU1NJQTpLUkFTTk9EQVJTS0kgS1JB7yBS6VNJRFVFO0tVU0NIRVZTS0lZOlVOS05PV046UlUtS1M1CitSVVNTSUE6Uk9TVE9WU0tB70EgT0JMQVNUO1JFTU9OVE5FTlNLSVk6VU5LTk9XTjpSVS1STVkKK1JVU1NJQTpLUkFTTk9EQVJTS0kgS1JB7yBS6VNJRFVFO1lFWVNLOlVOS05PV046UlUtWUVTCitSVVNTSUE6S1JBU05PREFSU0tJIEtSQe8gUulTSURVRTtZRVlTS0lZOlVOS05PV046UlUtWVlLCitSVVNTSUE6Uk9TVE9WU0tB70EgT0JMQVNUO1lFR09STFlLU0tJWTpVTktOT1dOOlJVLVlHWQorUlVTU0lBOktSQVNOT0RBUlNLSSBLUkHvIFLpU0lEVUU7U1RBUk9NSU5TS0lZOlVOS05PV046UlUtU1QxCitSVVNTSUE6S1JBU05PREFSU0tJIEtSQe8gUulTSURVRTtLUllMT1ZTS0lZOlVOS05PV046UlUtS1kyCitSVVNTSUE6Uk9TVE9WU0tB70EgT0JMQVNUO1NBTFNLOlVOS05PV046UlUtU0EgCitSVVNTSUE6S1JBU05PREFSU0tJIEtSQe8gUulTSURVRTtMRU5JTkdSQURTS0lZOlVOS05PV046UlUtTE5ECitSVVNTSUE6S1JBU05PREFSU0tJIEtSQe8gUulTSURVRTtLQU5FVlNLSVk6VU5LTk9XTjpSVS1LTjQKK1JVU1NJQTpST1NUT1ZTS0HvQSBPQkxBU1Q7UEVTQ0hBTk9LT1BTS0lZOlVOS05PV046UlUtUFNPCitSVVNTSUE6S1JBU05PREFSU0tJIEtSQe8gUulTSURVRTtOT1ZPUE9LUk9WU0tJWTpVTktOT1dOOlJVLU5PUgorUlVTU0lBOktSQVNOT0RBUlNLSSBLUkHvIFLpU0lEVUU7QkVMT0dMSU5TS0lZOlVOS05PV046UlUtQk9OCitSVVNTSUE6S1JBU05PREFSU0tJIEtSQe8gUulTSURVRTtQQVZMT1ZTS0lZOlVOS05PV046UlUtUFZJCitSVVNTSUE6U1RBVlJPUE9MU0tJIEtSQe8gUulTSURVRTtBUEFOQVNFTktPVlNLSVk6VU5LTk9XTjpSVS1BUEsKK1JVU1NJQTpLUkFTTk9EQVJTS0kgS1JB7yBS6VNJRFVFO1BSSU1PUlNLTy1BS0hUQVJTS0lZOlVOS05PV046UlUtUFJUCitSVVNTSUE6U1RBVlJPUE9MU0tJIEtSQe8gUulTSURVRTtJUEFUT1ZTS0lZOlVOS05PV046UlUtSVBWCitSVVNTSUE6S1JBU05PREFSU0tJIEtSQe8gUulTSURVRTtUSUtIT1JFVFNLSVk6VU5LTk9XTjpSVS1US1QKK1JVU1NJQTpLUkFTTk9EQVJTS0kgS1JB7yBS6VNJRFVFO0JSWVVLSE9WRVRTS0lZOlVOS05PV046UlUtQllFCitSVVNTSUE6U1RBVlJPUE9MU0tJIEtSQe8gUulTSURVRTtLUkFTTk9HVkFSREVZU0tJWTpVTktOT1dOOlJVLUtBOAorUlVTU0lBOktSQVNOT0RBUlNLSSBLUkHvIFLpU0lEVUU7VElLSE9SRVRaSzpVTktOT1dOOlJVLVRLUgorUlVTU0lBOktSQVNOT0RBUlNLSSBLUkHvIFLpU0lEVUU7VllTRUxLT1ZTS0lZOlVOS05PV046UlUtVlkyCitSVVNTSUE6U1RBVlJPUE9MU0tJIEtSQe8gUulTSURVRTtUUlVOT1ZTS0lZOlVOS05PV046UlUtVFI3CitSVVNTSUE6S1JBU05PREFSU0tJIEtSQe8gUulTSURVRTtLT1JFTk9WU0tJWTpVTktOT1dOOlJVLUtFSworUlVTU0lBOktSQVNOT0RBUlNLSSBLUkHvIFLpU0lEVUU7S0FMSU5JTlNLSVk6VU5LTk9XTjpSVS1LSU4KK1JVU1NJQTpTVEFWUk9QT0xTS0kgS1JB7yBS6VNJRFVFO05PVk9BTEVLU0FORFJPVlNLSVk6VU5LTk9XTjpSVS1OT04KK1JVU1NJQTpLUkFTTk9EQVJTS0kgS1JB7yBS6VNJRFVFO1RJTUFTSEVWU0tJWTpVTktOT1dOOlJVLVRNIAorUlVTU0lBOktSQVNOT0RBUlNLSSBLUkHvIFLpU0lEVUU7U0xBVllBTlNLSVk6VU5LTk9XTjpSVS1TTDMKK1JVU1NJQTpTVEFWUk9QT0xTS0kgS1JB7yBS6VNJRFVFO1RVUktNRU5TS0lZOlVOS05PV046UlUtVFI4CitSVVNTSUE6S1JBU05PREFSU0tJIEtSQe8gUulTSURVRTtLQVZLQVpTS0lZOlVOS05PV046UlUtS1ZaCitSVVNTSUE6U1RBVlJPUE9MU0tJIEtSQe8gUulTSURVRTtJWk9CSUxORU5TS0lZOlVOS05PV046UlUtSVpOCitSVVNTSUE6U1RBVlJPUE9MU0tJIEtSQe8gUulTSURVRTtBUlpHSVJaU0tJWTpVTktOT1dOOlJVLUFSWgorUlVTU0lBOktSQVNOT0RBUlNLSSBLUkHvIFLpU0lEVUU7VEJJTElTU0tJWTpVTktOT1dOOlJVLVRCUworUlVTU0lBOlNUQVZST1BPTFNLSSBLUkHvIFLpU0lEVUU7UEVUUk9WU0tJWTpVTktOT1dOOlJVLVBUMQorUlVTU0lBOktSQVNOT0RBUlNLSSBLUkHvIFLpU0lEVUU7S1JBU05PQVJNRVlTS0lZOlVOS05PV046UlUtS0E5CitSVVNTSUE6S1JBU05PREFSU0tJIEtSQe8gUulTSURVRTtLUkFTTk9EQVI6VU5LTk9XTjpSVS1LQUEKK1JVU1NJQTpLUkFTTk9EQVJTS0kgS1JB7yBS6VNJRFVFO0tST1BPVEtJTjpVTktOT1dOOlJVLUtPVAorUlVTU0lBOlNUQVZST1BPTFNLSSBLUkHvIFLpU0lEVUU7R1JBQ0hFVlNLSVk6VU5LTk9XTjpSVS1HUlkKK1JVU1NJQTpLUkFTTk9EQVJTS0kgS1JB7yBS6VNJRFVFO1RFTVJZVUtTS0lZOlVOS05PV046UlUtVE0xCitSVVNTSUE6S1JBU05PREFSU0tJIEtSQe8gUulTSURVRTtVU1QtTEFCSU5TS0lZOlVOS05PV046UlUtVVROCitSVVNTSUE6U1RBVlJPUE9MU0tJIEtSQe8gUulTSURVRTtMRVZPS1VNU0tJWTpVTktOT1dOOlJVLUxWTQorUlVTU0lBOktSQVNOT0RBUlNLSSBLUkHvIFLpU0lEVUU7R1VMS0VWSUNIU0tJWTpVTktOT1dOOlJVLUdMQworUlVTU0lBOktSQVNOT0RBUlNLSSBLUkHvIFLpU0lEVUU7RElOU0tJWTpVTktOT1dOOlJVLUROWQorUlVTU0lBOlNUQVZST1BPTFNLSSBLUkHvIFLpU0lEVUU7QkxBR09EQVJORU5TS0lZOlVOS05PV046UlUtQkxFCitSVVNTSUE6U1RBVlJPUE9MU0tJIEtSQe8gUulTSURVRTtTSFBBS09WU0tJWTpVTktOT1dOOlJVLVNQIAorUlVTU0lBOktSQVNOT0RBUlNLSSBLUkHvIFLpU0lEVUU7U0xBVllBTlNLLU5BLUtVQkFOSTpVTktOT1dOOlJVLVNMQQorUlVTU0lBOktSQVNOT0RBUlNLSSBLUkHvIFLpU0lEVUU7Tk9WT0tVQkFOU0tJWTpVTktOT1dOOlJVLU5PUworUlVTU0lBOlJFU1BPVUJMSUtBIEFEWUdF70E7S1JBU05PR1ZBUkRFWVNLSVk6VU5LTk9XTjpSVS1LU0QKK1JVU1NJQTpLUkFTTk9EQVJTS0kgS1JB7yBS6VNJRFVFO0tVUkdBTklOU0tJWTpVTktOT1dOOlJVLUtHTgorUlVTU0lBOktSQVNOT0RBUlNLSSBLUkHvIFLpU0lEVUU7QU5BUFNLSVk6VU5LTk9XTjpSVS1BTjEKK1JVU1NJQTpTVEFWUk9QT0xTS0kgS1JB7yBS6VNJRFVFO1NUQVZST1BPTDpVTktOT1dOOlJVLVNUUAorUlVTU0lBOktSQVNOT0RBUlNLSSBLUkHvIFLpU0lEVUU7S1JZTVNLSVk6VU5LTk9XTjpSVS1LWTMKK1JVU1NJQTpLUkFTTk9EQVJTS0kgS1JB7yBS6VNJRFVFO0FCSU5TS0lZOlVOS05PV046UlUtQUJJCitSVVNTSUE6UkVTUE9VQkxJS0EgQURZR0XvQTtTSE9WR0VOT1ZTS0lZOlVOS05PV046UlUtU09LCitSVVNTSUE6U1RBVlJPUE9MU0tJIEtSQe8gUulTSURVRTtCVURFTk5PVlNLSVk6VU5LTk9XTjpSVS1CRFYKK1JVU1NJQTpLUkFTTk9EQVJTS0kgS1JB7yBS6VNJRFVFO0FSTUFWSVI6VU5LTk9XTjpSVS1BUlIKK1JVU1NJQTpSRVNQT1VCTElLQSBBRFlHRe9BO1RBS0hUQU1VS0FZU0tJWTpVTktOT1dOOlJVLVRLSworUlVTU0lBOktSQVNOT0RBUlNLSSBLUkHvIFLpU0lEVUU7QU5BUEE6VU5LTk9XTjpSVS1BTlAKK1JVU1NJQTpLUkFTTk9EQVJTS0kgS1JB7yBS6VNJRFVFO1NFVkVSU0tJWTpVTktOT1dOOlJVLVNWNworUlVTU0lBOlJFU1BPVUJMSUtBIEFEWUdF70E7S09TSEVLSEFCTFNLSVk6VU5LTk9XTjpSVS1LU0IKK1JVU1NJQTpSRVNQT1VCTElLQSBBRFlHRe9BO1RFVUNIRVpIU0tJWTpVTktOT1dOOlJVLVRVWgorUlVTU0lBOktSQVNOT0RBUlNLSSBLUkHvIFLpU0lEVUU7VVNQRU5TS0lZOlVOS05PV046UlUtVVBTCitSVVNTSUE6U1RBVlJPUE9MU0tJIEtSQe8gUulTSURVRTtLT0NIVUJFWUVWU0tJWTpVTktOT1dOOlJVLUtDWQorUlVTU0lBOlNUQVZST1BPTFNLSSBLUkHvIFLpU0lEVUU7QUxFS1NBTkRST1ZTS0lZOlVOS05PV046UlUtQUw1CitSVVNTSUE6U1RBVlJPUE9MU0tJIEtSQe8gUulTSURVRTtORUZURUtVTVNLSVk6VU5LTk9XTjpSVS1ORk0KK1JVU1NJQTpTVEFWUk9QT0xTS0kgS1JB7yBS6VNJRFVFO0FORFJPUE9WU0tJWTpVTktOT1dOOlJVLUFOMgorUlVTU0lBOlNUQVZST1BPTFNLSSBLUkHvIFLpU0lEVUU7Tk9WT1NFTElUU0tJWTpVTktOT1dOOlJVLU5WVAorUlVTU0lBOkRBR0VTVEFOO05PR0FZU0tJWTpVTktOT1dOOlJVLU5HWQorUlVTU0lBOktSQVNOT0RBUlNLSSBLUkHvIFLpU0lEVUU7QkVMT1JFQ0hOU0tJWTpVTktOT1dOOlJVLUJPSAorUlVTU0lBOkRBR0VTVEFOO1RBUlVNT1ZTS0lZOlVOS05PV046UlUtVFI5CitSVVNTSUE6UkVTUE9VQkxJS0EgQURZR0XvQTtHSUFHSU5TS0lZOlVOS05PV046UlUtR0FOCitSVVNTSUE6S1JBU05PREFSU0tJIEtSQe8gUulTSURVRTtOT1ZPUk9TU0lZU0s6VU5LTk9XTjpSVS1OT0kKK1JVU1NJQTpLUkFTTk9EQVJTS0kgS1JB7yBS6VNJRFVFO0tSWU1TSzpVTktOT1dOOlJVLUtZTQorUlVTU0lBOlNUQVZST1BPTFNLSSBLUkHvIFLpU0lEVUU7QlVERU5OT1ZTSzpVTktOT1dOOlJVLUJETworUlVTU0lBOktSQVNOT0RBUlNLSSBLUkHvIFLpU0lEVUU7R09SWUFDSElZIEtMWVVDSDpVTktOT1dOOlJVLUdSIAorUlVTU0lBOlJFU1BPVUJMSUtBIEFEWUdF70E7TUFZS09QU0tJWTpVTktOT1dOOlJVLU1ZUAorUlVTU0lBOktSQVNOT0RBUlNLSSBLUkHvIFLpU0lEVUU7QkVMT1JFQ0hFTlNLOlVOS05PV046UlUtQk9FCitSVVNTSUE6S1JBU05PREFSU0tJIEtSQe8gUulTSURVRTtHRUxFTkRaSElLOlVOS05PV046UlUtR0xECitSVVNTSUE6S1JBU05PREFSU0tJIEtSQe8gUulTSURVRTtMQUJJTlNLOlVOS05PV046UlUtTEJTCitSVVNTSUE6S1JBU05PREFSU0tJIEtSQe8gUulTSURVRTtMQUJJTlNLSVk6VU5LTk9XTjpSVS1MQksKK1JVU1NJQTpLUkFTTk9EQVJTS0kgS1JB7yBS6VNJRFVFO01PU1RPVlNLSVk6VU5LTk9XTjpSVS1NU0sKK1JVU1NJQTpTVEFWUk9QT0xTS0kgS1JB7yBS6VNJRFVFO05FVklOTk9NWVNTSzpVTktOT1dOOlJVLU5WTQorUlVTU0lBOlJFU1BPVUJMSUtBIEFEWUdF70E7TUFZS09QOlVOS05PV046UlUtTUFLCitSVVNTSUE6S1JBU05PREFSU0tJIEtSQe8gUulTSURVRTtBUFNIRVJPTlNLSVk6VU5LTk9XTjpSVS1BUE4KK1JVU1NJQTpLUkFTTk9EQVJTS0kgS1JB7yBS6VNJRFVFO09UUkFETkVOU0tJWTpVTktOT1dOOlJVLU9UTgorUlVTU0lBOlNUQVZST1BPTFNLSSBLUkHvIFLpU0lEVUU7R0VPUkdJWUVWU0tJWTpVTktOT1dOOlJVLUdPVgorUlVTU0lBOlNUQVZST1BPTFNLSSBLUkHvIFLpU0lEVUU7U09WRVRTS0lZOlVOS05PV046UlUtU1Y4CitSVVNTSUE6U1RBVlJPUE9MU0tJIEtSQe8gUulTSURVRTtNSU5FUkFMT1ZPRFNLSVk6VU5LTk9XTjpSVS1NTk8KK1JVU1NJQTpTVEFWUk9QT0xTS0kgS1JB7yBS6VNJRFVFO1NURVBOT1ZTS0lZOlVOS05PV046UlUtU1QyCitSVVNTSUE6S0FSQVRDSEFFVk8tVENIRVJLRVNTS0HvQTtBRFlHRS1LSEFCTFNLSVk6VU5LTk9XTjpSVS1BREIKK1JVU1NJQTpLUkFTTk9EQVJTS0kgS1JB7yBS6VNJRFVFO1RVQVBTSU5TS0lZOlVOS05PV046UlUtVEFOCitSVVNTSUE6S0FSQVRDSEFFVk8tVENIRVJLRVNTS0HvQTtQUklLVUJBTlNLSVk6VU5LTk9XTjpSVS1QSU4KK1JVU1NJQTpEQUdFU1RBTjtLSVpMWUFSU0tJWTpVTktOT1dOOlJVLUtaWQorUlVTU0lBOlNUQVZST1BPTFNLSSBLUkHvIFLpU0lEVUU7UFJFREdPUk5ZSTpVTktOT1dOOlJVLVBFUgorUlVTU0lBOlNUQVZST1BPTFNLSSBLUkHvIFLpU0lEVUU7S1VSU0tJWTpVTktOT1dOOlJVLUtTNgorUlVTU0lBOktBUkFUQ0hBRVZPLVRDSEVSS0VTU0tB70E7Q0hFUktFU1NLOlVOS05PV046UlUtQ0VLCitSVVNTSUE6S0FSQVRDSEFFVk8tVENIRVJLRVNTS0HvQTtLSEFCRVpTS0lZOlVOS05PV046UlUtS0haCitSVVNTSUE6U1RBVlJPUE9MU0tJIEtSQe8gUulTSURVRTtNSU5FUkFMTklZRSBWT0RZOlVOS05PV046UlUtTU5FCitSVVNTSUE6U1RBVlJPUE9MU0tJIEtSQe8gUulTSURVRTtHRU9SR0lZRVZTSzpVTktOT1dOOlJVLUdPWQorUlVTU0lBOlNUQVZST1BPTFNLSSBLUkHvIFLpU0lEVUU7S0lST1ZTS0lZOlVOS05PV046UlUtS08gCitSVVNTSUE6U1RBVlJPUE9MU0tJIEtSQe8gUulTSURVRTtaSEVMRVpOT1ZPRFNLOlVOS05PV046UlUtWkhPCitSVVNTSUE6S0FSQVRDSEFFVk8tVENIRVJLRVNTS0HvQTtVU1QtRFpIRUdVVElOU0tJWTpVTktOT1dOOlJVLVVUVAorUlVTU0lBOlNUQVZST1BPTFNLSSBLUkHvIFLpU0lEVUU7TEVSTU9OVE9WOlVOS05PV046UlUtTFJOCitSVVNTSUE6S0FSQVRDSEFFVk8tVENIRVJLRVNTS0HvQTtaRUxFTkNIVUdTS0lZOlVOS05PV046UlUtWkxHCitSVVNTSUE6S0FSQVRDSEFFVk8tVENIRVJLRVNTS0HvQTtVUlVQU0tJWTpVTktOT1dOOlJVLVVSWQorUlVTU0lBOlNUQVZST1BPTFNLSSBLUkHvIFLpU0lEVUU7UFlBVElHT1JTSzpVTktOT1dOOlJVLVBZTworUlVTU0lBOlNUQVZST1BPTFNLSSBLUkHvIFLpU0lEVUU7WUVTU0VOVFVLSTpVTktOT1dOOlJVLVlTTgorUlVTU0lBOktSQVNOT0RBUlNLSSBLUkHvIFLpU0lEVUU7U09DSEk6VU5LTk9XTjpSVS1TT0gKK1JVU1NJQTpLUkFTTk9EQVJTS0kgS1JB7yBS6VNJRFVFO1RVQVBTRTpVTktOT1dOOlJVLVRVUAorUlVTU0lBOktBUkFUQ0hBRVZPLVRDSEVSS0VTU0tB70E7TUFMT0tBUkFDSEFZRVZTS0lZOlVOS05PV046UlUtTUxBCitSVVNTSUE6VENIRVRDSEVOSUEqO05BVVJTS0lZOlVOS05PV046UlUtTlVTCitSVVNTSUE6S0FCQVJESU5PLUJBTEtBUklBO1BST0tITEFETkVOU0tJWTpVTktOT1dOOlJVLVBSRQorUlVTU0lBOlNUQVZST1BPTFNLSSBLUkHvIFLpU0lEVUU7S0lTTE9WT0RTSzpVTktOT1dOOlJVLUtTNworUlVTU0lBOlRDSEVUQ0hFTklBKjtTSEVMS09WU0tJWTpVTktOT1dOOlJVLVNFVgorUlVTU0lBOktBQkFSRElOTy1CQUxLQVJJQTtaT0xTS0lZOlVOS05PV046UlUtWkxLCitSVVNTSUE6REFHRVNUQU47TUFLSEFDSEtBTEE6VU5LTk9XTjpSVS1NS0EKK1JVU1NJQTpLQVJBVENIQUVWTy1UQ0hFUktFU1NLQe9BO0tBUkFDSEFZRVZTS0lZOlVOS05PV046UlUtS0NFCitSVVNTSUE6REFHRVNUQU47QkFCQVlVUlRPVlNLSVk6VU5LTk9XTjpSVS1CQlQKK1JVU1NJQTpEQUdFU1RBTjtLSVpMWUFSOlVOS05PV046UlUtS1pBCitSVVNTSUE6S0FCQVJESU5PLUJBTEtBUklBO0JBS1NBTlNLSVk6VU5LTk9XTjpSVS1CS0kKK1JVU1NJQTpTRVZFUk8tT1NFVElOU0tB70EgUkVTUE9VO01PWkRPS1NLSVk6VU5LTk9XTjpSVS1NWkkKK1JVU1NJQTpLQVJBVENIQUVWTy1UQ0hFUktFU1NLQe9BO0tBUkFDSEFZRVZTSzpVTktOT1dOOlJVLUtDSworUlVTU0lBOktBQkFSRElOTy1CQUxLQVJJQTtURVJTS0lZOlVOS05PV046UlUtVFNJCitSVVNTSUE6S0FCQVJESU5PLUJBTEtBUklBO1BST0tITEFETllJOlVOS05PV046UlUtUFJECitSVVNTSUE6S0FCQVJESU5PLUJBTEtBUklBO01BWVNLSVk6VU5LTk9XTjpSVS1NWUkKK1JVU1NJQTpUQ0hFVENIRU5JQSo7TkFEVEVSRUNITllJOlVOS05PV046UlUtTkRDCitSVVNTSUE6S0FCQVJESU5PLUJBTEtBUklBO1VSVkFOU0tJWTpVTktOT1dOOlJVLVVSIAorUlVTU0lBOktBQkFSRElOTy1CQUxLQVJJQTtDSEVHRU1TS0lZOlVOS05PV046UlUtQ0VNCitSVVNTSUE6SU5HT1VDSEVUSUEqO01BTEdPQkVLU0tJWTpVTktOT1dOOlJVLU1MMQorUlVTU0lBOlRDSEVUQ0hFTklBKjtHUk9aTkVOU0tJWTpVTktOT1dOOlJVLUdSMQorUlVTU0lBOkRBR0VTVEFOO0tIQVNBVllVUlRPVlNLSVk6VU5LTk9XTjpSVS1LQVQKK1JVU1NJQTpJTkdPVUNIRVRJQSo7U1VOWkhFTlNLSVk6VU5LTk9XTjpSVS1TTk4KK1JVU1NJQTpLQUJBUkRJTk8tQkFMS0FSSUE7U09WRVRTS0lZOlVOS05PV046UlUtU1Y5CitSVVNTSUE6SU5HT1VDSEVUSUEqO01BTEdPQkVLOlVOS05PV046UlUtTUxCCitSVVNTSUE6VENIRVRDSEVOSUEqO0dVREVSTUVTU0tJWTpVTktOT1dOOlJVLUdESworUlVTU0lBOktBQkFSRElOTy1CQUxLQVJJQTtUWVJOWUFVWjpVTktOT1dOOlJVLVRZWQorUlVTU0lBOlNFVkVSTy1PU0VUSU5TS0HvQSBSRVNQT1U7S0lST1ZTS0lZOlVOS05PV046UlUtS08xCitSVVNTSUE6VENIRVRDSEVOSUEqO0dST1pOWUk6VU5LTk9XTjpSVS1HUjIKK1JVU1NJQTpTRVZFUk8tT1NFVElOU0tB70EgUkVTUE9VO1BSQVZPQkVSRVpITllJOlVOS05PV046UlUtUEFSCitSVVNTSUE6SU5HT1VDSEVUSUEqO05BWlJBTk9WU0tJWTpVTktOT1dOOlJVLU5aWQorUlVTU0lBOkRBR0VTVEFOO0tJWklMWVVSVE9WU0tJWTpVTktOT1dOOlJVLUtaVAorUlVTU0lBOlRDSEVUQ0hFTklBKjtBQ0hLSE9ZLU1BUlRBTk9WU0tJWTpVTktOT1dOOlJVLUFDUgorUlVTU0lBOlRDSEVUQ0hFTklBKjtHVURFUk1FUzpVTktOT1dOOlJVLUdEUgorUlVTU0lBOlRDSEVUQ0hFTklBKjtTSEFMSU5TS0lZOlVOS05PV046UlUtU0FJCitSVVNTSUE6VENIRVRDSEVOSUEqO0FSR1VOOlVOS05PV046UlUtQVIgCitSVVNTSUE6U0VWRVJPLU9TRVRJTlNLQe9BIFJFU1BPVTtQUklHT1JPRE5ZSTpVTktOT1dOOlJVLVBJRAorUlVTU0lBOlNFVkVSTy1PU0VUSU5TS0HvQSBSRVNQT1U7SVJBRlNLSVk6VU5LTk9XTjpSVS1JUkkKK1JVU1NJQTpEQUdFU1RBTjtLSEFTQVZZVVJUOlVOS05PV046UlUtS0hVCitSVVNTSUE6U0VWRVJPLU9TRVRJTlNLQe9BIFJFU1BPVTtESUdPUlNLSVk6VU5LTk9XTjpSVS1ER1MKK1JVU1NJQTpTRVZFUk8tT1NFVElOU0tB70EgUkVTUE9VO0FSRE9OU0tJWTpVTktOT1dOOlJVLUFSMQorUlVTU0lBOkRBR0VTVEFOO05PVk9MQUtTS0lZOlVOS05PV046UlUtTk9LCitSVVNTSUE6REFHRVNUQU47S0laSUxZVVJUOlVOS05PV046UlUtS1pVCitSVVNTSUE6VENIRVRDSEVOSUEqO1VSVVMtTUFSVEFOT1ZTS0lZOlVOS05PV046UlUtVVJOCitSVVNTSUE6VENIRVRDSEVOSUEqO05PWkhBWS1ZVVJUT1ZTS0lZOlVOS05PV046UlUtTlpUCitSVVNTSUE6REFHRVNUQU47S0FaQkVLT1ZTS0lZOlVOS05PV046UlUtS1ogCitSVVNTSUE6VENIRVRDSEVOSUEqO1NIQUxJOlVOS05PV046UlUtU0FMCitSVVNTSUE6VENIRVRDSEVOSUEqO1VSVVMtTUFSVEFOOlVOS05PV046UlUtVVJSCitSVVNTSUE6REFHRVNUQU47QlVZTkFLU0tJWTpVTktOT1dOOlJVLUJZUworUlVTU0lBOlNFVkVSTy1PU0VUSU5TS0HvQSBSRVNQT1U7VkxBRElLQVZLQVo6VU5LTk9XTjpSVS1WTEEKK1JVU1NJQTpTRVZFUk8tT1NFVElOU0tB70EgUkVTUE9VO0FMQUdJUlNLSVk6VU5LTk9XTjpSVS1BTDYKK1JVU1NJQTpUQ0hFVENIRU5JQSo7VkVERU5TS0lZOlVOS05PV046UlUtVkRJCitSVVNTSUE6VENIRVRDSEVOSUEqO1NIQVRPWVNLSVk6VU5LTk9XTjpSVS1TQVkKK1JVU1NJQTpEQUdFU1RBTjtLQVNQSVlTSzpVTktOT1dOOlJVLUtTOAorUlVTU0lBOkRBR0VTVEFOO0dVTUJFVE9WU0tJWTpVTktOT1dOOlJVLUdNVgorUlVTU0lBOkRBR0VTVEFOO0JPVExJS0hTS0lZOlVOS05PV046UlUtQlRICitSVVNTSUE6REFHRVNUQU47TEVOSU5TS0lZOlVOS05PV046UlUtTE4yCitSVVNTSUE6VENIRVRDSEVOSUEqO0lUVU0tS0FMSU5TS0lZOlVOS05PV046UlUtSVRMCitSVVNTSUE6REFHRVNUQU47VU5UU1VLVUxTS0lZOlVOS05PV046UlUtVU5MCitSVVNTSUE6REFHRVNUQU47QlVZTkFLU0s6VU5LTk9XTjpSVS1CWSAKK1JVU1NJQTpEQUdFU1RBTjtLSFVOWkFLSFNLSVk6VU5LTk9XTjpSVS1LVUsKK1JVU1NJQTpEQUdFU1RBTjtBS0hWQUtIU0tJWTpVTktOT1dOOlJVLUFLSAorUlVTU0lBOkRBR0VTVEFOO1RTVU1BRElOU0tJWTpVTktOT1dOOlJVLVRTWQorUlVTU0lBOkRBR0VTVEFOO0tBWUFLRU5UU0tJWTpVTktOT1dOOlJVLUtZVAorUlVTU0lBOkRBR0VTVEFOO0xFVkFTSElOU0tJWTpVTktOT1dOOlJVLUxWTgorUlVTU0lBOkRBR0VTVEFOO0dFUkdFQklMU0tJWTpVTktOT1dOOlJVLUdSTAorUlVTU0lBOkRBR0VTVEFOO0laQkVSQkFTSDpVTktOT1dOOlJVLUlaQgorUlVTU0lBOkRBR0VTVEFOO1NPVkVUU0tJWTpVTktOT1dOOlJVLVNFUworUlVTU0lBOkRBR0VTVEFOO0dVTklCU0tJWTpVTktOT1dOOlJVLUdOUworUlVTU0lBOkRBR0VTVEFOO1NFUkdPS0FMSU5TS0lZOlVOS05PV046UlUtU1IzCitSVVNTSUE6REFHRVNUQU47VFNVTlRJTlNLSVk6VU5LTk9XTjpSVS1UUyAKK1JVU1NJQTpEQUdFU1RBTjtBS1VTSElOU0tJWTpVTktOT1dOOlJVLUFLSworUlVTU0lBOkRBR0VTVEFOO1RMWUFSQVRJTlNLSVk6VU5LTk9XTjpSVS1UTE4KK1JVU1NJQTpEQUdFU1RBTjtDSEFST0RJTlNLSVk6VU5LTk9XTjpSVS1DQU4KK1JVU1NJQTpEQUdFU1RBTjtERVJCRU5UU0tJWTpVTktOT1dOOlJVLURSVAorUlVTU0lBOkRBR0VTVEFOO0xBS1NLSVk6VU5LTk9XTjpSVS1MS0kKK1JVU1NJQTpEQUdFU1RBTjtLQVlUQUdTS0lZOlVOS05PV046UlUtS1lHCitSVVNTSUE6REFHRVNUQU47REFLSEFEQVlFVlNLSVk6VU5LTk9XTjpSVS1ES1kKK1JVU1NJQTpEQUdFU1RBTjtLVUxJTlNLSVk6VU5LTk9XTjpSVS1LSUsKK1JVU1NJQTpEQUdFU1RBTjtERVJCRU5UOlVOS05PV046UlUtRFJOCitSVVNTSUE6REFHRVNUQU47REFHRVNUQU5TS0lZRSBPR05JOlVOS05PV046UlUtREdLCitSVVNTSUE6REFHRVNUQU47VEFCQVNBUkFOU0tJWTpVTktOT1dOOlJVLVRCTgorUlVTU0lBOkRBR0VTVEFOO0FHVUxTS0lZOlVOS05PV046UlUtQUdLCitSVVNTSUE6REFHRVNUQU47UlVUVUxTS0lZOlVOS05PV046UlUtUlRTCitSVVNTSUE6REFHRVNUQU47TUFHQVJBTUtFTlRTS0lZOlVOS05PV046UlUtTUdUCitSVVNTSUE6REFHRVNUQU47S0hJVlNLSVk6VU5LTk9XTjpSVS1LSVkKK1JVU1NJQTpEQUdFU1RBTjtTVUxFWU1BTi1TVEFMU0tJWTpVTktOT1dOOlJVLVNMTAorUlVTU0lBOkRBR0VTVEFOO0tVUkFLSFNLSVk6VU5LTk9XTjpSVS1LS0gKK1JVU1NJQTpEQUdFU1RBTjtBS0hUWU5TS0lZOlVOS05PV046UlUtQUtJCitSVVNTSUE6U1ZFUkRMT1ZTS0HvQSBPQkxBU1Q7SVZERUw6VU5LTk9XTjpSVS1JVkwKK1JVU1NJQTpQRVJNU0tB70EgT0JMQVNUIFLpU0lEVUVMO0tSQVNOT1ZJU0hFUlNLSVk6VU5LTk9XTjpSVS1LU0gKK1JVU1NJQTpQRVJNU0tB70EgT0JMQVNUIFLpU0lEVUVMO0NIRVJEWU5TS0lZOlVOS05PV046UlUtQ0VOCitSVVNTSUE6S09NSS1QRVJNSUFUU0tJIE5BVElPTkFMO0dBWU5TS0lZOlVOS05PV046UlUtR1lTCitSVVNTSUE6U1ZFUkRMT1ZTS0HvQSBPQkxBU1Q7U0VWRVJPVVJBTFNLOlVOS05PV046UlUtU0VSCitSVVNTSUE6U1ZFUkRMT1ZTS0HvQSBPQkxBU1Q7R0FSSU5TS0lZOlVOS05PV046UlUtR1IzCitSVVNTSUE6S09NSS1QRVJNSUFUU0tJIE5BVElPTkFMO0tPU0lOU0tJWTpVTktOT1dOOlJVLUtTOQorUlVTU0lBOlBFUk1TS0HvQSBPQkxBU1QgUulTSURVRUw7U09MSUtBTVNLSVk6VU5LTk9XTjpSVS1TTE0KK1JVU1NJQTpTVkVSRExPVlNLQe9BIE9CTEFTVDtLQVJQSU5TSzpVTktOT1dOOlJVLUtQUworUlVTU0lBOlNWRVJETE9WU0tB70EgT0JMQVNUO1NFUk9WU0tJWTpVTktOT1dOOlJVLVNSNAorUlVTU0lBOktPTUktUEVSTUlBVFNLSSBOQVRJT05BTDtLT0NIRVZTS0lZOlVOS05PV046UlUtS0NJCitSVVNTSUE6U1ZFUkRMT1ZTS0HvQSBPQkxBU1Q7S1JBU05PVFVSSU5TSzpVTktOT1dOOlJVLUtONQorUlVTU0lBOlBFUk1TS0HvQSBPQkxBU1QgUulTSURVRUw7QUxFS1NBTkRST1ZTSzpVTktOT1dOOlJVLUFMRAorUlVTU0lBOlBFUk1TS0HvQSBPQkxBU1QgUulTSURVRUw7VVNPTFNLSVk6VU5LTk9XTjpSVS1VT1MKK1JVU1NJQTpLT01JLVBFUk1JQVRTS0kgTkFUSU9OQUw7WVVSTElOU0tJWTpVTktOT1dOOlJVLVlSMgorUlVTU0lBOlNWRVJETE9WU0tB70EgT0JMQVNUO1NFUk9WOlVOS05PV046UlUtU0UgCitSVVNTSUE6U1ZFUkRMT1ZTS0HvQSBPQkxBU1Q7Tk9WT0xZQUxJTlNLSVk6VU5LTk9XTjpSVS1OT0wKK1JVU1NJQTpQRVJNU0tB70EgT0JMQVNUIFLpU0lEVUVMO1NPTElLQU1TSzpVTktOT1dOOlJVLVNMNAorUlVTU0lBOlBFUk1TS0HvQSBPQkxBU1QgUulTSURVRUw7QkVSRVpOSUtJOlVOS05PV046UlUtQkVOCitSVVNTSUE6S09NSS1QRVJNSUFUU0tJIE5BVElPTkFMO0tVRFlNS0FSU0tJWTpVTktOT1dOOlJVLUtEUgorUlVTU0lBOlNWRVJETE9WU0tB70EgT0JMQVNUO1RBQk9SSU5TS0lZOlVOS05PV046UlUtVEJLCitSVVNTSUE6UEVSTVNLQe9BIE9CTEFTVCBS6VNJRFVFTDtLSVpFTDpVTktOT1dOOlJVLUtJTAorUlVTU0lBOlBFUk1TS0HvQSBPQkxBU1QgUulTSURVRUw7R09STk9aQVZPRFNLSVk6VU5LTk9XTjpSVS1HUk8KK1JVU1NJQTpLT01JLVBFUk1JQVRTS0kgTkFUSU9OQUw7WVVTVklOU0tJWTpVTktOT1dOOlJVLVlTSworUlVTU0lBOktPTUktUEVSTUlBVFNLSSBOQVRJT05BTDtLVURZTUtBUjpVTktOT1dOOlJVLUtETQorUlVTU0lBOlNWRVJETE9WU0tB70EgT0JMQVNUO0FMQVBBWUVWU0tJWTpVTktOT1dOOlJVLUFMNworUlVTU0lBOlNWRVJETE9WU0tB70EgT0JMQVNUO1ZFUktIT1RVUlNLSVk6VU5LTk9XTjpSVS1WUjMKK1JVU1NJQTpQRVJNU0tB70EgT0JMQVNUIFLpU0lEVUVMO0RPQlJZQU5TS0lZOlVOS05PV046UlUtREIgCitSVVNTSUE6UEVSTVNLQe9BIE9CTEFTVCBS6VNJRFVFTDtHUkVNWUFDSElOU0s6VU5LTk9XTjpSVS1HUkMKK1JVU1NJQTpTVkVSRExPVlNLQe9BIE9CTEFTVDtOSVpITllBWUEgVFVSQTpVTktOT1dOOlJVLU5aQQorUlVTU0lBOlBFUk1TS0HvQSBPQkxBU1QgUulTSURVRUw7R1VCQUtIQTpVTktOT1dOOlJVLUdCSworUlVTU0lBOlBFUk1TS0HvQSBPQkxBU1QgUulTSURVRUw7SUxZSU5TS0lZOlVOS05PV046UlUtSUxJCitSVVNTSUE6U1ZFUkRMT1ZTS0HvQSBPQkxBU1Q7S0FDSEtBTkFSOlVOS05PV046UlUtS0NOCitSVVNTSUE6UEVSTVNLQe9BIE9CTEFTVCBS6VNJRFVFTDtLQVJBR0FZU0tJWTpVTktOT1dOOlJVLUtHWQorUlVTU0lBOlNWRVJETE9WU0tB70EgT0JMQVNUO1RVUklOU0tJWTpVTktOT1dOOlJVLVRJUworUlVTU0lBOlBFUk1TS0HvQSBPQkxBU1QgUulTSURVRUw7Q0hVU09WU0tPWTpVTktOT1dOOlJVLUNVSworUlVTU0lBOlBFUk1TS0HvQSBPQkxBU1QgUulTSURVRUw7U0lWSU5TS0lZOlVOS05PV046UlUtU0lLCitSVVNTSUE6U1ZFUkRMT1ZTS0HvQSBPQkxBU1Q7VEFWRElOU0tJWTpVTktOT1dOOlJVLVRWTgorUlVTU0lBOlNWRVJETE9WU0tB70EgT0JMQVNUO0tVU0hWQTpVTktOT1dOOlJVLUtVSAorUlVTU0lBOlNWRVJETE9WU0tB70EgT0JMQVNUO0tSQVNOT1VSQUxTSzpVTktOT1dOOlJVLUtTTAorUlVTU0lBOk9VRE1PVVJUSUE7R0xBWk9WU0tJWTpVTktOT1dOOlJVLUdMSQorUlVTU0lBOk9VRE1PVVJUSUE7QkFMRVpJTlNLSVk6VU5LTk9XTjpSVS1CRVMKK1JVU1NJQTpTVkVSRExPVlNLQe9BIE9CTEFTVDtWRVJLSE5FU0FMRElOU0tJWTpVTktOT1dOOlJVLVZSNAorUlVTU0lBOk9VRE1PVVJUSUE7WUFSU0tJWTpVTktOT1dOOlJVLVlSMworUlVTU0lBOk9VRE1PVVJUSUE7S0VaU0tJWTpVTktOT1dOOlJVLUtaMQorUlVTU0lBOlBFUk1TS0HvQSBPQkxBU1QgUulTSURVRUw7TllUVkVOU0tJWTpVTktOT1dOOlJVLU5ZUworUlVTU0lBOlBFUk1TS0HvQSBPQkxBU1QgUulTSURVRUw7S1JBU05PS0FNU0s6VU5LTk9XTjpSVS1LTjYKK1JVU1NJQTpQRVJNU0tB70EgT0JMQVNUIFLpU0lEVUVMO0NIVVNPVk9ZOlVOS05PV046UlUtQ1VPCitSVVNTSUE6UEVSTVNLQe9BIE9CTEFTVCBS6VNJRFVFTDtWRVJFU0NIQUdJTlNLSVk6VU5LTk9XTjpSVS1WUkcKK1JVU1NJQTpQRVJNU0tB70EgT0JMQVNUIFLpU0lEVUVMO0xZU1ZFTlNLSVk6VU5LTk9XTjpSVS1MWVkKK1JVU1NJQTpTVkVSRExPVlNLQe9BIE9CTEFTVDtQUklHT1JPRE5ZSTpVTktOT1dOOlJVLVBJWQorUlVTU0lBOlBFUk1TS0HvQSBPQkxBU1QgUulTSURVRUw7UEVSTTpVTktOT1dOOlJVLVBFTQorUlVTU0lBOlBFUk1TS0HvQSBPQkxBU1QgUulTSURVRUw7UEVSTVNLSVk6VU5LTk9XTjpSVS1QTVMKK1JVU1NJQTpQRVJNU0tB70EgT0JMQVNUIFLpU0lEVUVMO0xZU1ZBOlVOS05PV046UlUtTFlBCitSVVNTSUE6U1ZFUkRMT1ZTS0HvQSBPQkxBU1Q7TklaSE5JQVlBIFNBTERBOlVOS05PV046UlUtTlogCitSVVNTSUE6T1VETU9VUlRJQTtZVUtBTUVOU0tJWTpVTktOT1dOOlJVLVlLTgorUlVTU0lBOk9VRE1PVVJUSUE7R0xBWk9WOlVOS05PV046UlUtR0xaCitSVVNTSUE6UEVSTVNLQe9BIE9CTEFTVCBS6VNJRFVFTDtPQ0hFUlNLSVk6VU5LTk9XTjpSVS1PQ1MKK1JVU1NJQTpTVkVSRExPVlNLQe9BIE9CTEFTVDtWRVJLSE5JQVlBIFNBTERBOlVOS05PV046UlUtVlJBCitSVVNTSUE6U1ZFUkRMT1ZTS0HvQSBPQkxBU1Q7SVJCSVRTS0lZOlVOS05PV046UlUtSVJZCitSVVNTSUE6U1ZFUkRMT1ZTS0HvQSBPQkxBU1Q7VEFWREE6VU5LTk9XTjpSVS1UQUQKK1JVU1NJQTpTVkVSRExPVlNLQe9BIE9CTEFTVDtOSVpITklZIFRBR0lMOlVOS05PV046UlUtTloxCitSVVNTSUE6UEVSTVNLQe9BIE9CTEFTVCBS6VNJRFVFTDtLVU5HVVJTS0lZOlVOS05PV046UlUtS043CitSVVNTSUE6U1ZFUkRMT1ZTS0HvQSBPQkxBU1Q7QUxBUEFZRVZTSzpVTktOT1dOOlJVLUFMOAorUlVTU0lBOlNWRVJETE9WU0tB70EgT0JMQVNUO1NMT0JPRE8tVFVSSU5TS0lZOlVOS05PV046UlUtU0w1CitSVVNTSUE6UEVSTVNLQe9BIE9CTEFTVCBS6VNJRFVFTDtPS0hBTlNLSVk6VU5LTk9XTjpSVS1PSzQKK1JVU1NJQTpQRVJNU0tB70EgT0JMQVNUIFLpU0lEVUVMO0JFUllPWk9WU0tJWTpVTktOT1dOOlJVLUJZWQorUlVTU0lBOlBFUk1TS0HvQSBPQkxBU1QgUulTSURVRUw7Qk9MU0hFU09TTk9WU0tJWTpVTktOT1dOOlJVLUJTUworUlVTU0lBOk9VRE1PVVJUSUE7S1JBU05PR09SU0tJWTpVTktOT1dOOlJVLUtOOAorUlVTU0lBOlNWRVJETE9WU0tB70EgT0JMQVNUO0JBWUtBTE9WU0tJWTpVTktOT1dOOlJVLUJZMQorUlVTU0lBOk9VRE1PVVJUSUE7REVCRVNTS0lZOlVOS05PV046UlUtREIxCitSVVNTSUE6U1ZFUkRMT1ZTS0HvQSBPQkxBU1Q7TkVWWUFOU0tJWTpVTktOT1dOOlJVLU5ZSQorUlVTU0lBOk9VRE1PVVJUSUE7SUdSSU5TS0lZOlVOS05PV046UlUtSUdTCitSVVNTSUE6U1ZFUkRMT1ZTS0HvQSBPQkxBU1Q7U0hBTElOU0tJWTpVTktOT1dOOlJVLVNBMQorUlVTU0lBOlNWRVJETE9WU0tB70EgT0JMQVNUO1JFWkhFVlNLSVk6VU5LTk9XTjpSVS1SWlkKK1JVU1NJQTpTVkVSRExPVlNLQe9BIE9CTEFTVDtLSVJPVkdSQUQ6VU5LTk9XTjpSVS1LT0cKK1JVU1NJQTpTVkVSRExPVlNLQe9BIE9CTEFTVDtBUlRZRU1PVlNLSVk6VU5LTk9XTjpSVS1BUjIKK1JVU1NJQTpTVkVSRExPVlNLQe9BIE9CTEFTVDtJUkJJVDpVTktOT1dOOlJVLUlSIAorUlVTU0lBOlNWRVJETE9WU0tB70EgT0JMQVNUO05FVllBTlNLOlVOS05PV046UlUtTlkgCitSVVNTSUE6UEVSTVNLQe9BIE9CTEFTVCBS6VNJRFVFTDtPU0lOU0tZOlVOS05PV046UlUtT1NZCitSVVNTSUE6UEVSTVNLQe9BIE9CTEFTVCBS6VNJRFVFTDtDSEFTVElOU0tJWTpVTktOT1dOOlJVLUNBUworUlVTU0lBOk9VRE1PVVJUSUE7U0VMVElOU0tJWTpVTktOT1dOOlJVLVNMNgorUlVTU0lBOlBFUk1TS0HvQSBPQkxBU1QgUulTSURVRUw7S0lTSEVSVFNLSVk6VU5LTk9XTjpSVS1LU1QKK1JVU1NJQTpPVURNT1VSVElBO1NIQVJLQU5TS0lZOlVOS05PV046UlUtU0EyCitSVVNTSUE6T1VETU9VUlRJQTtTWVVNU0lOU0tJWTpVTktOT1dOOlJVLVNZMQorUlVTU0lBOlBFUk1TS0HvQSBPQkxBU1QgUulTSURVRUw7S1VOR1VSOlVOS05PV046UlUtS1VHCitSVVNTSUE6U1ZFUkRMT1ZTS0HvQSBPQkxBU1Q7UkVaU0g6VU5LTk9XTjpSVS1SRVMKK1JVU1NJQTpTVkVSRExPVlNLQe9BIE9CTEFTVDtUVUdVTFlNU0tJWTpVTktOT1dOOlJVLVRHSworUlVTU0lBOlNWRVJETE9WU0tB70EgT0JMQVNUO0FSVFlPTU9WU0tJWTpVTktOT1dOOlJVLUFSMworUlVTU0lBOk9VRE1PVVJUSUE7WUFLU0hVUi1CT0RZSU5TS0lZOlVOS05PV046UlUtWUtECitSVVNTSUE6U1ZFUkRMT1ZTS0HvQSBPQkxBU1Q7UEVSVk9VUkFMU0s6VU5LTk9XTjpSVS1QVkwKK1JVU1NJQTpTVkVSRExPVlNLQe9BIE9CTEFTVDtWRVJLSE5ZQVkgUFlTSE1BOlVOS05PV046UlUtVlJQCitSVVNTSUE6U1ZFUkRMT1ZTS0HvQSBPQkxBU1Q7VEFMSVRTS0lZOlVOS05PV046UlUtVExJCitSVVNTSUE6U1ZFUkRMT1ZTS0HvQSBPQkxBU1Q7UFlTSE1JTlNLSVk6VU5LTk9XTjpSVS1QWU4KK1JVU1NJQTpPVURNT1VSVElBO1VWSU5TS0lZOlVOS05PV046UlUtVVZTCitSVVNTSUE6UEVSTVNLQe9BIE9CTEFTVCBS6VNJRFVFTDtTVUtTVU5TS0lZOlVOS05PV046UlUtU0tJCitSVVNTSUE6T1VETU9VUlRJQTtWT1RLSU5TS0lZOlVOS05PV046UlUtVlROCitSVVNTSUE6U1ZFUkRMT1ZTS0HvQSBPQkxBU1Q7QVNCRVNUOlVOS05PV046UlUtQVNUCitSVVNTSUE6U1ZFUkRMT1ZTS0HvQSBPQkxBU1Q7S0FNWVNITE9WU0tJWTpVTktOT1dOOlJVLUtNNgorUlVTU0lBOlNWRVJETE9WU0tB70EgT0JMQVNUO0JFUkVaT1ZTS0lZOlVOS05PV046UlUtQkVWCitSVVNTSUE6UEVSTVNLQe9BIE9CTEFTVCBS6VNJRFVFTDtPUkRJTlNLWTpVTktOT1dOOlJVLU9SWQorUlVTU0lBOlNWRVJETE9WU0tB70EgT0JMQVNUO1NVS0hPTE9aSFNLSVk6VU5LTk9XTjpSVS1TS0gKK1JVU1NJQTpQRVJNU0tB70EgT0JMQVNUIFLpU0lEVUVMO0JBUkRZTVNLSVk6VU5LTk9XTjpSVS1CRE0KK1JVU1NJQTpQRVJNU0tB70EgT0JMQVNUIFLpU0lEVUVMO1lFTE9WU0tJWTpVTktOT1dOOlJVLVlMWQorUlVTU0lBOlNWRVJETE9WU0tB70EgT0JMQVNUO05JWkhORVNFUkdJTlNLSVk6VU5LTk9XTjpSVS1OWjIKK1JVU1NJQTpTVkVSRExPVlNLQe9BIE9CTEFTVDtBQ0hJVFNLSVk6VU5LTk9XTjpSVS1BQ0sKK1JVU1NJQTpQRVJNU0tB70EgT0JMQVNUIFLpU0lEVUVMO1VJTlNLSVk6VU5LTk9XTjpSVS1VTkkKK1JVU1NJQTpPVURNT1VSVElBO1pBVllBTE9WU0tJWTpVTktOT1dOOlJVLVpWSworUlVTU0lBOk9VRE1PVVJUSUE7Vk9US0lOU0s6VU5LTk9XTjpSVS1WVFMKK1JVU1NJQTpTVkVSRExPVlNLQe9BIE9CTEFTVDtZRUtBVEVSSU5CVVJHOlVOS05PV046UlUtWUtCCitSVVNTSUE6T1VETU9VUlRJQTtWQVZPWkhTS0lZOlVOS05PV046UlUtVlZICitSVVNTSUE6T1VETU9VUlRJQTtJWkhFVlNLOlVOS05PV046UlUtSVogCitSVVNTSUE6UEVSTVNLQe9BIE9CTEFTVCBS6VNJRFVFTDtDSEFZS09WU0tJWTpVTktOT1dOOlJVLUNBVgorUlVTU0lBOlNWRVJETE9WU0tB70EgT0JMQVNUO0JFTE9ZQVJTS0lZOlVOS05PV046UlUtQk9TCitSVVNTSUE6U1ZFUkRMT1ZTS0HvQSBPQkxBU1Q7U1VLSE9ZIExPRzpVTktOT1dOOlJVLVNLWQorUlVTU0lBOlNWRVJETE9WU0tB70EgT0JMQVNUO0tSQVNOT1VGSU1TS0lZOlVOS05PV046UlUtS1JGCitSVVNTSUE6U1ZFUkRMT1ZTS0HvQSBPQkxBU1Q7Qk9HREFOT1ZJQ0hTS0lZOlVOS05PV046UlUtQkdDCitSVVNTSUE6U1ZFUkRMT1ZTS0HvQSBPQkxBU1Q7S0FNWVNITE9WOlVOS05PV046UlUtS01PCitSVVNTSUE6UEVSTVNLQe9BIE9CTEFTVCBS6VNJRFVFTDtPS1RZQUJSU0tJWTpVTktOT1dOOlJVLU9LNQorUlVTU0lBOlNWRVJETE9WU0tB70EgT0JMQVNUO1pBUkVDSE5ZOlVOS05PV046UlUtWlJDCitSVVNTSUE6U1ZFUkRMT1ZTS0HvQSBPQkxBU1Q7UkVWREE6VU5LTk9XTjpSVS1SRUQKK1JVU1NJQTpTVkVSRExPVlNLQe9BIE9CTEFTVDtCT0dEQU5PVklDSDpVTktOT1dOOlJVLUJHSAorUlVTU0lBOlBFUk1TS0HvQSBPQkxBU1QgUulTSURVRUw7S1VZRURJTlNLSVk6VU5LTk9XTjpSVS1LWTQKK1JVU1NJQTpQRVJNU0tB70EgT0JMQVNUIFLpU0lEVUVMO0NIRVJOVVNISU5TS0lZOlVOS05PV046UlUtQ0VICitSVVNTSUE6S09VUkdBTlNLQe9BIE9CTEFTVDtTSEFUUk9WU0tJWTpVTktOT1dOOlJVLVNBMworUlVTU0lBOk9VRE1PVVJUSUE7S0laTkVSU0tJWTpVTktOT1dOOlJVLUtaMgorUlVTU0lBOlBFUk1TS0HvQSBPQkxBU1QgUulTSURVRUw7Q0hBWUtPVlNLWTpVTktOT1dOOlJVLUNBSworUlVTU0lBOk9VRE1PVVJUSUE7TUFMT1BVUkdJTlNLSVk6VU5LTk9XTjpSVS1NTEcKK1JVU1NJQTpTVkVSRExPVlNLQe9BIE9CTEFTVDtTWVNFUlRTS0lZOlVOS05PV046UlUtU1lUCitSVVNTSUE6U1ZFUkRMT1ZTS0HvQSBPQkxBU1Q7QVJUSU5TS0lZOlVOS05PV046UlUtQVI0CitSVVNTSUE6T1VETU9VUlRJQTtNT1pIR0lOU0tJWTpVTktOT1dOOlJVLU1aMQorUlVTU0lBOk9VRE1PVVJUSUE7U0FSQVBVTFNLSVk6VU5LTk9XTjpSVS1TUjUKK1JVU1NJQTpTVkVSRExPVlNLQe9BIE9CTEFTVDtQT0xFVlNLT1k6VU5LTk9XTjpSVS1QTE8KK1JVU1NJQTpTVkVSRExPVlNLQe9BIE9CTEFTVDtLQU1FTlNLSVk6VU5LTk9XTjpSVS1LTTcKK1JVU1NJQTpLT1VSR0FOU0tB70EgT0JMQVNUO0RBTE1BVE9WU0tJWTpVTktOT1dOOlJVLURMVgorUlVTU0lBOktPVVJHQU5TS0HvQSBPQkxBU1Q7S0FUQVlTS0lZOlVOS05PV046UlUtS1RLCitSVVNTSUE6U1ZFUkRMT1ZTS0HvQSBPQkxBU1Q7S0FNRU5TSy1VUkFMU0tJWTpVTktOT1dOOlJVLUtNVQorUlVTU0lBOk9VRE1PVVJUSUE7U0FSQVBVTDpVTktOT1dOOlJVLVNSVQorUlVTU0lBOktPVVJHQU5TS0HvQSBPQkxBU1Q7U0hBRFJJTlNLSVk6VU5LTk9XTjpSVS1TQTQKK1JVU1NJQTpCQUNIS0lSSUE7WUFOQVVMU0tJWTpVTktOT1dOOlJVLVlOTAorUlVTU0lBOk9VRE1PVVJUSUE7S0FNQkFSU0tJWTpVTktOT1dOOlJVLUtNUgorUlVTU0lBOk9VRE1PVVJUSUE7S0lZQVNPVlNLSVk6VU5LTk9XTjpSVS1LWTUKK1JVU1NJQTpPVURNT1VSVElBO01PR1pTSEE6VU5LTk9XTjpSVS1NR0EKK1JVU1NJQTpCQUNIS0lSSUE7VEFUWVNITElOU0tJWTpVTktOT1dOOlJVLVRUSQorUlVTU0lBOkJBQ0hLSVJJQTtBU0tJTlNLSVk6VU5LTk9XTjpSVS1BU0sKK1JVU1NJQTpPVURNT1VSVElBO0FMTkFTSFNLSVk6VU5LTk9XTjpSVS1BTDkKK1JVU1NJQTpUQ0hFTElBQklOU0tB70EgT0JMQVNUO0tBU0xJTlNLSVk6VU5LTk9XTjpSVS1LSTEKK1JVU1NJQTpUQ0hFTElBQklOU0tB70EgT0JMQVNUO05ZQVpFUEVUUk9WU0tTS0lZOlVOS05PV046UlUtTllWCitSVVNTSUE6QkFDSEtJUklBO1lBTkFVTDpVTktOT1dOOlJVLVlBVQorUlVTU0lBOktPVVJHQU5TS0HvQSBPQkxBU1Q7QkVMT1pFUlNLSVk6VU5LTk9XTjpSVS1CT0sKK1JVU1NJQTpUQ0hFTElBQklOU0tB70EgT0JMQVNUO0tVTkFTSEFLU0tJWTpVTktOT1dOOlJVLUtOOQorUlVTU0lBOkJBQ0hLSVJJQTtLUkFTTk9LQU1TS0lZOlVOS05PV046UlUtS09NCitSVVNTSUE6T1VETU9VUlRJQTtHUkFLSE9WU0tJWTpVTktOT1dOOlJVLUdSNAorUlVTU0lBOk9VRE1PVVJUSUE7S0FSQUtVTElOU0tJWTpVTktOT1dOOlJVLUtLUworUlVTU0lBOlRDSEVMSUFCSU5TS0HvQSBPQkxBU1Q7VkVSS0hOSVkgVUZBTEVZOlVOS05PV046UlUtVlJGCitSVVNTSUE6QkFDSEtJUklBO0JBTFRBQ0hFVlNLSVk6VU5LTk9XTjpSVS1CVEkKK1JVU1NJQTpLT1VSR0FOU0tB70EgT0JMQVNUO0tBUkdBUE9MU0tJWTpVTktOT1dOOlJVLUtHTAorUlVTU0lBOkJBQ0hLSVJJQTtCRUxPS0FUQVlTS0lZOlVOS05PV046UlUtQk9ZCitSVVNTSUE6S09VUkdBTlNLQe9BIE9CTEFTVDtTSEFEUklOU0s6VU5LTk9XTjpSVS1TQTUKK1JVU1NJQTpCQUNIS0lSSUE7S0FMVEFTSU5TS0lZOlVOS05PV046UlUtS1RJCitSVVNTSUE6QkFDSEtJUklBO0tBUkFJREVMU0tJWTpVTktOT1dOOlJVLUtJMgorUlVTU0lBOkJBQ0hLSVJJQTtNRUNIRVRMSU5TS0lZOlVOS05PV046UlUtTUNTCitSVVNTSUE6QkFDSEtJUklBO0RVVkFOU0tJWTpVTktOT1dOOlJVLURWUworUlVTU0lBOkJBQ0hLSVJJQTtORUZURUtBTVNLOlVOS05PV046UlUtTkZLCitSVVNTSUE6QkFDSEtJUklBO0JVUkFZRVZTS0lZOlVOS05PV046UlUtQkFTCitSVVNTSUE6S09VUkdBTlNLQe9BIE9CTEFTVDtWQVJHQVNISU5TS0lZOlVOS05PV046UlUtVlI1CitSVVNTSUE6S09VUkdBTlNLQe9BIE9CTEFTVDtNT0tST1VTT1ZTS0lZOlVOS05PV046UlUtTUsgCitSVVNTSUE6VENIRUxJQUJJTlNLQe9BIE9CTEFTVDtLUkFTTk9BUk1FWVNLSVk6VU5LTk9XTjpSVS1LU0UKK1JVU1NJQTpUQ0hFTElBQklOU0tB70EgT0JMQVNUO0tBU0xJOlVOS05PV046UlUtSzEKK1JVU1NJQTpUQ0hFTElBQklOU0tB70EgT0JMQVNUO0tZU0hUWU06VU5LTk9XTjpSVS1LWTYKK1JVU1NJQTpLT1VSR0FOU0tB70EgT0JMQVNUO01JU0hLSU5TS0lZOlVOS05PV046UlUtTVNJCitSVVNTSUE6QkFDSEtJUklBO01JU0hLSU5TS0lZOlVOS05PV046UlUtTVNZCitSVVNTSUE6S09VUkdBTlNLQe9BIE9CTEFTVDtTQ0hVQ0hBTlNLSVk6VU5LTk9XTjpSVS1TQ1kKK1JVU1NJQTpLT1VSR0FOU0tB70EgT0JMQVNUO1NIVU1JS0hJTlNLSVk6VU5LTk9XTjpSVS1TVU4KK1JVU1NJQTpCQUNIS0lSSUE7SUxJU0hFVlNLSVk6VU5LTk9XTjpSVS1JTFYKK1JVU1NJQTpLT1VSR0FOU0tB70EgT0JMQVNUO0tFVE9WU0tJWTpVTktOT1dOOlJVLUtUWQorUlVTU0lBOkJBQ0hLSVJJQTtEWVVSVFlVTElOU0tJWTpVTktOT1dOOlJVLURZTAorUlVTU0lBOlRDSEVMSUFCSU5TS0HvQSBPQkxBU1Q7QVJHQVlBU0hTS0lZOlVOS05PV046UlUtQVI1CitSVVNTSUE6S09VUkdBTlNLQe9BIE9CTEFTVDtDSEFTVE9PWkVSU0tJWTpVTktOT1dOOlJVLUNIWgorUlVTU0lBOkJBQ0hLSVJJQTtLSUdJTlNLSVk6VU5LTk9XTjpSVS1LR1MKK1JVU1NJQTpUQ0hFTElBQklOU0tB70EgT0JMQVNUO0tBUkFCQVNIOlVOS05PV046UlUtS0FCCitSVVNTSUE6S09VUkdBTlNLQe9BIE9CTEFTVDtZVVJHQU1ZU0hTS0lZOlVOS05PV046UlUtWVJICitSVVNTSUE6VENIRUxJQUJJTlNLQe9BIE9CTEFTVDtTT1NOT1ZTS0lZOlVOS05PV046UlUtU1MxCitSVVNTSUE6QkFDSEtJUklBO05VUklNQU5PVlNLSVk6VU5LTk9XTjpSVS1OUlYKK1JVU1NJQTpCQUNIS0lSSUE7QklSU0tJWTpVTktOT1dOOlJVLUJTSQorUlVTU0lBOktPVVJHQU5TS0HvQSBPQkxBU1Q7TEVCWUFaSFlFVlNLSVk6VU5LTk9XTjpSVS1MQlkKK1JVU1NJQTpUQ0hFTElBQklOU0tB70EgT0JMQVNUO0tVU0lOU0tJWTpVTktOT1dOOlJVLUtJMworUlVTU0lBOkJBQ0hLSVJJQTtTQUxBVkFUU0tJWTpVTktOT1dOOlJVLVNMNworUlVTU0lBOkJBQ0hLSVJJQTtCTEFHT1ZFU0hDSEVOU0tJWTpVTktOT1dOOlJVLUJBQworUlVTU0lBOktPVVJHQU5TS0HvQSBPQkxBU1Q7TUFLVVNISU5TS0lZOlVOS05PV046UlUtTUtOCitSVVNTSUE6QkFDSEtJUklBO0RZVVJUVUxJOlVOS05PV046UlUtRFlUCitSVVNTSUE6S09VUkdBTlNLQe9BIE9CTEFTVDtLVVJHQU46VU5LTk9XTjpSVS1LVUEKK1JVU1NJQTpUQ0hFTElBQklOU0tB70EgT0JMQVNUO01JQVNTOlVOS05PV046UlUtTUlTCitSVVNTSUE6VENIRUxJQUJJTlNLQe9BIE9CTEFTVDtaTEFUT1VTVDpVTktOT1dOOlJVLVpMVQorUlVTU0lBOkJBQ0hLSVJJQTtCSVJTSzpVTktOT1dOOlJVLUJJUworUlVTU0lBOktPVVJHQU5TS0HvQSBPQkxBU1Q7UEVUVUtIT1ZTS0lZOlVOS05PV046UlUtUFQyCitSVVNTSUE6QkFDSEtJUklBO0JBS0FMSU5TS0lZOlVOS05PV046UlUtQktZCitSVVNTSUE6QkFDSEtJUklBO0NIRUtNQUdVU0hFVlNLSVk6VU5LTk9XTjpSVS1DRUUKK1JVU1NJQTpUQ0hFTElBQklOU0tB70EgT0JMQVNUO0NIRUxZQUJJTlNLOlVOS05PV046UlUtQ0hCCitSVVNTSUE6VENIRUxJQUJJTlNLQe9BIE9CTEFTVDtTQVRLSU5TS0lZOlVOS05PV046UlUtU1QzCitSVVNTSUE6VENIRUxJQUJJTlNLQe9BIE9CTEFTVDtBU0hZTlNLSVk6VU5LTk9XTjpSVS1BU0kKK1JVU1NJQTpCQUNIS0lSSUE7S1VTSE5BUkVOS09WU0tJWTpVTktOT1dOOlJVLUtFTgorUlVTU0lBOlRDSEVMSUFCSU5TS0HvQSBPQkxBU1Q7S09QRVlTSzpVTktOT1dOOlJVLUtQWQorUlVTU0lBOkJBQ0hLSVJJQTtJR0xJTlNLSVk6VU5LTk9XTjpSVS1JR0sKK1JVU1NJQTpLT1VSR0FOU0tB70EgT0JMQVNUO1BSSVRPQk9MTllJOlVOS05PV046UlUtUElMCitSVVNTSUE6VENIRUxJQUJJTlNLQe9BIE9CTEFTVDtDSEVCQVJLVUxTS0lZOlVOS05PV046UlUtQ0VMCitSVVNTSUE6S09VUkdBTlNLQe9BIE9CTEFTVDtTQUZBS1VMRVZTS0lZOlVOS05PV046UlUtU0ZTCitSVVNTSUE6VENIRUxJQUJJTlNLQe9BIE9CTEFTVDtLQVRBWUVWLUlWQU5PVlNLSVk6VU5LTk9XTjpSVS1LVEEKK1JVU1NJQTpLT1VSR0FOU0tB70EgT0JMQVNUO0tVUlRBTVlTSFNLSVk6VU5LTk9XTjpSVS1LVEgKK1JVU1NJQTpLT1VSR0FOU0tB70EgT0JMQVNUO1BPTE9WSU5TS0lZOlVOS05PV046UlUtUEwxCitSVVNTSUE6S09VUkdBTlNLQe9BIE9CTEFTVDtBTE1FTkVWU0tJWTpVTktOT1dOOlJVLUFNVgorUlVTU0lBOlRDSEVMSUFCSU5TS0HvQSBPQkxBU1Q7WUVUS1VMU0tJWTpVTktOT1dOOlJVLVlUTAorUlVTU0lBOkJBQ0hLSVJJQTtCTEFHT1ZFU0hDSEVOU0s6VU5LTk9XTjpSVS1CQUUKK1JVU1NJQTpUQ0hFTElBQklOU0tB70EgT0JMQVNUO1NBVEtBOlVOS05PV046UlUtU0E2CitSVVNTSUE6QkFDSEtJUklBO1NIQVJBTlNLSVk6VU5LTk9XTjpSVS1TQTcKK1JVU1NJQTpUQ0hFTElBQklOU0tB70EgT0JMQVNUO0FTSEE6VU5LTk9XTjpSVS1BU0gKK1JVU1NJQTpCQUNIS0lSSUE7VUZJTVNLSVk6VU5LTk9XTjpSVS1VRlMKK1JVU1NJQTpUQ0hFTElBQklOU0tB70EgT0JMQVNUO0NIRUJBUktVTCc6VU5LTk9XTjpSVS1DSFUKK1JVU1NJQTpCQUNIS0lSSUE7QkxBR09WQVJTS0lZOlVOS05PV046UlUtQkFSCitSVVNTSUE6VENIRUxJQUJJTlNLQe9BIE9CTEFTVDtLT1JLSU5POlVOS05PV046UlUtS0tPCitSVVNTSUE6VENIRUxJQUJJTlNLQe9BIE9CTEFTVDtVU1QtS0FUQVlFVjpVTktOT1dOOlJVLVVTVgorUlVTU0lBOkJBQ0hLSVJJQTtVQ0hBTFk6VU5LTk9XTjpSVS1VQ0wKK1JVU1NJQTpCQUNIS0lSSUE7QlVaRFlBS1NLSVk6VU5LTk9XTjpSVS1CWkkKK1JVU1NJQTpCQUNIS0lSSUE7VUZBOlVOS05PV046UlUtVUZBCitSVVNTSUE6QkFDSEtJUklBO0NISVNITUlOU0tJWTpVTktOT1dOOlJVLUNJTgorUlVTU0lBOkJBQ0hLSVJJQTtBUktIQU5HRUxTS0lZOlVOS05PV046UlUtQVJMCitSVVNTSUE6VENIRUxJQUJJTlNLQe9BIE9CTEFTVDtZRU1BTlpIRUxJTlNLOlVOS05PV046UlUtWU1MCitSVVNTSUE6S09VUkdBTlNLQe9BIE9CTEFTVDtUU0VMSU5OWUk6VU5LTk9XTjpSVS1UUzEKK1JVU1NJQTpCQUNIS0lSSUE7VFVZTUFaSU5TS0lZOlVOS05PV046UlUtVFkgCitSVVNTSUE6VENIRUxJQUJJTlNLQe9BIE9CTEFTVDtVVkVMU0tJWTpVTktOT1dOOlJVLVVWSworUlVTU0lBOlRDSEVMSUFCSU5TS0HvQSBPQkxBU1Q7S0FUQVlFVi1JVkFOT1ZTSzpVTktOT1dOOlJVLUtUTworUlVTU0lBOkJBQ0hLSVJJQTtCRUxPUkVUU0tJWTpVTktOT1dOOlJVLUJPSQorUlVTU0lBOktPVVJHQU5TS0HvQSBPQkxBU1Q7WlZFUklOT0dPTE9WU0tZOlVOS05PV046UlUtWlZMCitSVVNTSUE6VENIRUxJQUJJTlNLQe9BIE9CTEFTVDtPS1RZQUJSU0tJWTpVTktOT1dOOlJVLU9LNgorUlVTU0lBOlRDSEVMSUFCSU5TS0HvQSBPQkxBU1Q7VVlTS0lZOlVOS05PV046UlUtVVlLCitSVVNTSUE6QkFDSEtJUklBO0tBUk1BU0tBTElOU0tJWTpVTktOT1dOOlJVLUtNOAorUlVTU0lBOkJBQ0hLSVJJQTtUVVlNQVpZOlVOS05PV046UlUtVFlaCitSVVNTSUE6VENIRUxJQUJJTlNLQe9BIE9CTEFTVDtQTEFTVDpVTktOT1dOOlJVLVBMMgorUlVTU0lBOkJBQ0hLSVJJQTtPS1RZQUJSU0tJWTpVTktOT1dOOlJVLU9LNworUlVTU0lBOlRDSEVMSUFCSU5TS0HvQSBPQkxBU1Q7WVVaSE5PLVVSQUxTSzpVTktOT1dOOlJVLVlaVQorUlVTU0lBOlRDSEVMSUFCSU5TS0HvQSBPQkxBU1Q7VFJPSVRTS0lZOlVOS05PV046UlUtVE9TCitSVVNTSUE6QkFDSEtJUklBO0JFTEVCRVlFVlNLSVk6VU5LTk9XTjpSVS1CRUsKK1JVU1NJQTpCQUNIS0lSSUE7REFWTEVLQU5PVlNLSVk6VU5LTk9XTjpSVS1EVk4KK1JVU1NJQTpPUkVOQk9VUkdTS0HvQSBPQkxBU1Q7U0VWRVJOWUk6VU5LTk9XTjpSVS1TRU4KK1JVU1NJQTpCQUNIS0lSSUE7R0FGVVJJWVNLSVk6VU5LTk9XTjpSVS1HRlkKK1JVU1NJQTpCQUNIS0lSSUE7WUVSTUVLRVlFVlNLSVk6VU5LTk9XTjpSVS1ZUjQKK1JVU1NJQTpCQUNIS0lSSUE7QVVSR0FaSU5TS0lZOlVOS05PV046UlUtQVI2CitSVVNTSUE6QkFDSEtJUklBO0FMU0hFWUVWU0tJWTpVTktOT1dOOlJVLUFTVgorUlVTU0lBOkJBQ0hLSVJJQTtEQVZMRUtBTk9WTzpVTktOT1dOOlJVLURWTworUlVTU0lBOlRDSEVMSUFCSU5TS0HvQSBPQkxBU1Q7VkVSS0hORVVSQUxTS0lZOlVOS05PV046UlUtVlI2CitSVVNTSUE6VENIRUxJQUJJTlNLQe9BIE9CTEFTVDtUUk9JVFNLOlVOS05PV046UlUtVE9UCitSVVNTSUE6QkFDSEtJUklBO0JFTEVCRVk6VU5LTk9XTjpSVS1CTEIKK1JVU1NJQTpPUkVOQk9VUkdTS0HvQSBPQkxBU1Q7QUJEVUxJTlNLSVk6VU5LTk9XTjpSVS1BQk4KK1JVU1NJQTpCQUNIS0lSSUE7QkVMT1JFVFNLOlVOS05PV046UlUtQk8gCitSVVNTSUE6T1JFTkJPVVJHU0tB70EgT0JMQVNUO0JVR1VSVVNMQU5TS0lZOlVOS05PV046UlUtQkdBCitSVVNTSUE6QkFDSEtJUklBO0FCWkVMSUxPVlNLSVk6VU5LTk9XTjpSVS1BQlYKK1JVU1NJQTpCQUNIS0lSSUE7QklaSEJVTFlBS1NLSVk6VU5LTk9XTjpSVS1CWlkKK1JVU1NJQTpCQUNIS0lSSUE7U1RFUkxJVEFNQUtTS0lZOlVOS05PV046UlUtU1RNCitSVVNTSUE6VENIRUxJQUJJTlNLQe9BIE9CTEFTVDtOQUdBWUJBS1NLSVk6VU5LTk9XTjpSVS1ORyAKK1JVU1NJQTpUQ0hFTElBQklOU0tB70EgT0JMQVNUO0NIRVNNRU5TS0lZOlVOS05PV046UlUtQ0VJCitSVVNTSUE6QkFDSEtJUklBO01JWUFLSU5TS0lZOlVOS05PV046UlUtTVlZCitSVVNTSUE6QkFDSEtJUklBO0lTSElNQkFZU0tZOlVOS05PV046UlUtSVNZCitSVVNTSUE6T1JFTkJPVVJHU0tB70EgT0JMQVNUO0FTRUtFWUVWU0tJWTpVTktOT1dOOlJVLUFTWQorUlVTU0lBOlRDSEVMSUFCSU5TS0HvQSBPQkxBU1Q7QUdBUE9WU0tJWTpVTktOT1dOOlJVLUFHVgorUlVTU0lBOk9SRU5CT1VSR1NLQe9BIE9CTEFTVDtCVUdVUlVTTEFOOlVOS05PV046UlUtQkcxCitSVVNTSUE6QkFDSEtJUklBO1NURVJMSVRBTUFLOlVOS05PV046UlUtU1Q0CitSVVNTSUE6QkFDSEtJUklBO1NURVJMSUJBU0hFVlNLSVk6VU5LTk9XTjpSVS1TVEgKK1JVU1NJQTpUQ0hFTElBQklOU0tB70EgT0JMQVNUO1ZBUk5FTlNLSVk6VU5LTk9XTjpSVS1WUjcKK1JVU1NJQTpPUkVOQk9VUkdTS0HvQSBPQkxBU1Q7QUJEVUxJTk86VU5LTk9XTjpSVS1BQkwKK1JVU1NJQTpPUkVOQk9VUkdTS0HvQSBPQkxBU1Q7TUFUVkVZRVZTS0lZOlVOS05PV046UlUtTVRWCitSVVNTSUE6QkFDSEtJUklBO0JVUlpZQU5TS0lZOlVOS05PV046UlUtQlpOCitSVVNTSUE6QkFDSEtJUklBO0lTSElNQkFZOlVOS05PV046UlUtSVNNCitSVVNTSUE6VENIRUxJQUJJTlNLQe9BIE9CTEFTVDtNQUdOSVRPR09SU0s6VU5LTk9XTjpSVS1NR08KK1JVU1NJQTpUQ0hFTElBQklOU0tB70EgT0JMQVNUO0tBUlRBTElOU0tJWTpVTktOT1dOOlJVLUtUIAorUlVTU0lBOk9SRU5CT1VSR1NLQe9BIE9CTEFTVDtQT05PTUFSWU9WU0tJWTpVTktOT1dOOlJVLVBOWQorUlVTU0lBOkJBQ0hLSVJJQTtNRUxFVVpTS0lZOlVOS05PV046UlUtTUxaCitSVVNTSUE6QkFDSEtJUklBO0ZZT0RPUk9WU0tJWTpVTktOT1dOOlJVLUZZVgorUlVTU0lBOkJBQ0hLSVJJQTtTQUxBVkFUOlVOS05PV046UlUtU0w4CitSVVNTSUE6T1JFTkJPVVJHU0tB70EgT0JMQVNUO0JVWlVMVUtTS0lZOlVOS05PV046UlUtQlogCitSVVNTSUE6QkFDSEtJUklBO0JBWU1BS1NLSVk6VU5LTk9XTjpSVS1CWTIKK1JVU1NJQTpPUkVOQk9VUkdTS0HvQSBPQkxBU1Q7U0hBUkxZS1NLSVk6VU5LTk9XTjpSVS1TQTgKK1JVU1NJQTpPUkVOQk9VUkdTS0HvQSBPQkxBU1Q7R1JBQ0hFVlNLSVk6VU5LTk9XTjpSVS1HUjUKK1JVU1NJQTpUQ0hFTElBQklOU0tB70EgT0JMQVNUO0tJWklMU0tJWTpVTktOT1dOOlJVLUtaMworUlVTU0lBOk9SRU5CT1VSR1NLQe9BIE9CTEFTVDtLUkFTTk9HVkFSREVZU0tJWTpVTktOT1dOOlJVLUtORAorUlVTU0lBOlRDSEVMSUFCSU5TS0HvQSBPQkxBU1Q7S0FSVEFMWTpVTktOT1dOOlJVLUtUTAorUlVTU0lBOkJBQ0hLSVJJQTtLVUdBUkNISU5TS0lZOlVOS05PV046UlUtS0dLCitSVVNTSUE6QkFDSEtJUklBO1pJTEFJUlNLSVk6VU5LTk9XTjpSVS1aTFIKK1JVU1NJQTpCQUNIS0lSSUE7TUVMRVVaOlVOS05PV046UlUtTUVVCitSVVNTSUE6QkFDSEtJUklBO0tVTUVSVEFVU0tJWTpVTktOT1dOOlJVLUtNOQorUlVTU0lBOk9SRU5CT1VSR1NLQe9BIE9CTEFTVDtBTEVLU0FORFJPVlNLSVk6VU5LTk9XTjpSVS1BRVIKK1JVU1NJQTpPUkVOQk9VUkdTS0HvQSBPQkxBU1Q7S1VSTUFOQVlFVlNLSVk6VU5LTk9XTjpSVS1LTUUKK1JVU1NJQTpUQ0hFTElBQklOU0tB70EgT0JMQVNUO0JSRURJTlNLSVk6VU5LTk9XTjpSVS1CRUkKK1JVU1NJQTpPUkVOQk9VUkdTS0HvQSBPQkxBU1Q7QlVaVUxVSzpVTktOT1dOOlJVLUJaTAorUlVTU0lBOkJBQ0hLSVJJQTtLVU1FUlRBWTpVTktOT1dOOlJVLUtNVAorUlVTU0lBOkJBQ0hLSVJJQTtTSUJBWTpVTktOT1dOOlJVLVNJWQorUlVTU0lBOk9SRU5CT1VSR1NLQe9BIE9CTEFTVDtTT1JPQ0hJTlNLSVk6VU5LTk9XTjpSVS1TUjYKK1JVU1NJQTpPUkVOQk9VUkdTS0HvQSBPQkxBU1Q7T0tUWUFCUlNLSVk6VU5LTk9XTjpSVS1PSzgKK1JVU1NJQTpPUkVOQk9VUkdTS0HvQSBPQkxBU1Q7Tk9WT1NFUkdJWUVWU0tJWTpVTktOT1dOOlJVLU5PWQorUlVTU0lBOkJBQ0hLSVJJQTtCQVlNQUs6VU5LTk9XTjpSVS1CQU0KK1JVU1NJQTpPUkVOQk9VUkdTS0HvQSBPQkxBU1Q7VE9UU0tJWTpVTktOT1dOOlJVLVRUWQorUlVTU0lBOk9SRU5CT1VSR1NLQe9BIE9CTEFTVDtUWVVMR0FOU0tJWTpVTktOT1dOOlJVLVRZMQorUlVTU0lBOkJBQ0hLSVJJQTtaSUFOQ0hVUklOU0tJWTpVTktOT1dOOlJVLVpBUgorUlVTU0lBOk9SRU5CT1VSR1NLQe9BIE9CTEFTVDtLVkFSS0VOU0tJWTpVTktOT1dOOlJVLUtWIAorUlVTU0lBOkJBQ0hLSVJJQTtLSEFZQlVMTElOU0tJWTpVTktOT1dOOlJVLUtZTAorUlVTU0lBOk9SRU5CT1VSR1NLQe9BIE9CTEFTVDtQRVJFVk9MT1RTS0lZOlVOS05PV046UlUtUEVUCitSVVNTSUE6T1JFTkJPVVJHU0tB70EgT0JMQVNUO1BFUlZPTUFZU0tJWTpVTktOT1dOOlJVLVBWIAorUlVTU0lBOk9SRU5CT1VSR1NLQe9BIE9CTEFTVDtTQUtNQVJTS0lZOlVOS05PV046UlUtU0tSCitSVVNTSUE6T1JFTkJPVVJHU0tB70EgT0JMQVNUO1RBU0hMSU5TS0lZOlVOS05PV046UlUtVFMyCitSVVNTSUE6T1JFTkJPVVJHU0tB70EgT0JMQVNUO1NBUkFLVEFTSFNLSVk6VU5LTk9XTjpSVS1TUjcKK1JVU1NJQTpPUkVOQk9VUkdTS0HvQSBPQkxBU1Q7T1JFTkJVUkdTS0lZOlVOS05PV046UlUtT1JSCitSVVNTSUE6T1JFTkJPVVJHU0tB70EgT0JMQVNUO0FEQU1PVlNLSVk6VU5LTk9XTjpSVS1BRFYKK1JVU1NJQTpPUkVOQk9VUkdTS0HvQSBPQkxBU1Q7T1JFTkJVUkc6VU5LTk9XTjpSVS1PUkIKK1JVU1NJQTpPUkVOQk9VUkdTS0HvQSBPQkxBU1Q7S1VWQU5EWUtTS0lZOlVOS05PV046UlUtS1YxCitSVVNTSUE6T1JFTkJPVVJHU0tB70EgT0JMQVNUO0dBWVNLSVk6VU5LTk9XTjpSVS1HWUsKK1JVU1NJQTpPUkVOQk9VUkdTS0HvQSBPQkxBU1Q7Tk9WT09SU0tJWTpVTktOT1dOOlJVLU5PIAorUlVTU0lBOk9SRU5CT1VSR1NLQe9BIE9CTEFTVDtJTEVLU0tJWTpVTktOT1dOOlJVLUlMIAorUlVTU0lBOk9SRU5CT1VSR1NLQe9BIE9CTEFTVDtCRUxZQUVWU0tJWTpVTktOT1dOOlJVLUJZMworUlVTU0lBOk9SRU5CT1VSR1NLQe9BIE9CTEFTVDtLVVZBTkRZSzpVTktOT1dOOlJVLUtWRAorUlVTU0lBOk9SRU5CT1VSR1NLQe9BIE9CTEFTVDtTVkVUTElOU0tJWTpVTktOT1dOOlJVLVNFSworUlVTU0lBOk9SRU5CT1VSR1NLQe9BIE9CTEFTVDtHQVk6VU5LTk9XTjpSVS1HQVkKK1JVU1NJQTpPUkVOQk9VUkdTS0HvQSBPQkxBU1Q7TUVETk9HT1JTSzpVTktOT1dOOlJVLU1ETworUlVTU0lBOk9SRU5CT1VSR1NLQe9BIE9CTEFTVDtTT0wtSUxFVFNLSVk6VU5LTk9XTjpSVS1TTDkKK1JVU1NJQTpPUkVOQk9VUkdTS0HvQSBPQkxBU1Q7WUFTTkVOU0tJWTpVTktOT1dOOlJVLVlTSQorUlVTU0lBOk9SRU5CT1VSR1NLQe9BIE9CTEFTVDtBS0JVTEFLU0tJWTpVTktOT1dOOlJVLUFLWQorUlVTU0lBOk9SRU5CT1VSR1NLQe9BIE9CTEFTVDtPUlNLOlVOS05PV046UlUtT1IgCitSVVNTSUE6T1JFTkJPVVJHU0tB70EgT0JMQVNUO05PVk9UUk9JVFNLOlVOS05PV046UlUtTk9UCitSVVNTSUE6T1JFTkJPVVJHU0tB70EgT0JMQVNUO0RPTUJBUk9WU0tJWTpVTktOT1dOOlJVLURNIAorUlVTU0lBOk9SRU5CT1VSR1NLQe9BIE9CTEFTVDtZQVNOWTpVTktOT1dOOlJVLVlBTgorUlVTU0lBOklBTUFMTy1ORU5FVFNLSSBOQVRJT05BTDtZQU1BTFNLSVk6VU5LTk9XTjpSVS1ZTVMKK1JVU1NJQTpJQU1BTE8tTkVORVRTS0kgTkFUSU9OQUw7VEFaT1ZTS0lZOlVOS05PV046UlUtVFpTCitSVVNTSUE6SUFNQUxPLU5FTkVUU0tJIE5BVElPTkFMO1BSSVVSQUxTS0lZOlVOS05PV046UlUtUElLCitSVVNTSUE6SUFNQUxPLU5FTkVUU0tJIE5BVElPTkFMO1BVUk9WU0tJWTpVTktOT1dOOlJVLVBPSworUlVTU0lBOklBTUFMTy1ORU5FVFNLSSBOQVRJT05BTDtOQURZTVNLSVk6VU5LTk9XTjpSVS1ORFMKK1JVU1NJQTpJQU1BTE8tTkVORVRTS0kgTkFUSU9OQUw7S1JBTk9TRUxLVVBTS0lZOlVOS05PV046UlUtS0FQCitSVVNTSUE6SUFNQUxPLU5FTkVUU0tJIE5BVElPTkFMO1NIVVJZU0hLQVJTS0lZOlVOS05PV046UlUtU1VLCitSVVNTSUE6SUFNQUxPLU5FTkVUU0tJIE5BVElPTkFMO0xBQllUTkFOR0k6VU5LTk9XTjpSVS1MQkEKK1JVU1NJQTpJQU1BTE8tTkVORVRTS0kgTkFUSU9OQUw7U0FMRUtIQVJEOlVOS05PV046UlUtU0VICitSVVNTSUE6SUFNQUxPLU5FTkVUU0tJIE5BVElPTkFMO05PVllJIFVSRU5HT1k6VU5LTk9XTjpSVS1OVkcKK1JVU1NJQTpLSEFOVFktTUFOU0lTS0kgTkFUSU9OQUw7QkVSRVpPVlNLSVk6VU5LTk9XTjpSVS1CRVkKK1JVU1NJQTpJQU1BTE8tTkVORVRTS0kgTkFUSU9OQUw7TkFEWU06VU5LTk9XTjpSVS1OQVkKK1JVU1NJQTpLSEFOVFktTUFOU0lTS0kgTkFUSU9OQUw7QkVMT1lBUlNLSVk6VU5LTk9XTjpSVS1CTzEKK1JVU1NJQTpJQU1BTE8tTkVORVRTS0kgTkFUSU9OQUw7TVVSQVZMRU5LTzpVTktOT1dOOlJVLU1STAorUlVTU0lBOktIQU5UWS1NQU5TSVNLSSBOQVRJT05BTDtCRUxPWUFSU0tZOlVOS05PV046UlUtQk8yCitSVVNTSUE6S0hBTlRZLU1BTlNJU0tJIE5BVElPTkFMO09LVFlBQlJTS0lZOlVOS05PV046UlUtT0s5CitSVVNTSUE6S0hBTlRZLU1BTlNJU0tJIE5BVElPTkFMO1NVUkdVVFNLSVk6VU5LTk9XTjpSVS1TUlQKK1JVU1NJQTpJQU1BTE8tTkVORVRTS0kgTkFUSU9OQUw7Tk9ZQUJSU0s6VU5LTk9XTjpSVS1OWUIKK1JVU1NJQTpLSEFOVFktTUFOU0lTS0kgTkFUSU9OQUw7S0hBTlRZLU1BTlNJWVNLSVk6VU5LTk9XTjpSVS1LVDEKK1JVU1NJQTpLSEFOVFktTUFOU0lTS0kgTkFUSU9OQUw7TklaSE5FVkFSVE9WU0tJWTpVTktOT1dOOlJVLU5aTworUlVTU0lBOktIQU5UWS1NQU5TSVNLSSBOQVRJT05BTDtTT1ZFVFNLSVk6VU5LTk9XTjpSVS1TRUkKK1JVU1NJQTpLSEFOVFktTUFOU0lTS0kgTkFUSU9OQUw7TllBR0FOOlVOS05PV046UlUtTllHCitSVVNTSUE6S0hBTlRZLU1BTlNJU0tJIE5BVElPTkFMO0tPR0FMWU06VU5LTk9XTjpSVS1LR00KK1JVU1NJQTpLSEFOVFktTUFOU0lTS0kgTkFUSU9OQUw7UkFEVVpITllJOlVOS05PV046UlUtUkRICitSVVNTSUE6S0hBTlRZLU1BTlNJU0tJIE5BVElPTkFMO1BPS0FDSFk6VU5LTk9XTjpSVS1QS0MKK1JVU1NJQTpLSEFOVFktTUFOU0lTS0kgTkFUSU9OQUw7U1VSR1VUOlVOS05PV046UlUtU1VHCitSVVNTSUE6S0hBTlRZLU1BTlNJU0tJIE5BVElPTkFMO0xBTkdFUEFTOlVOS05PV046UlUtTE5QCitSVVNTSUE6S0hBTlRZLU1BTlNJU0tJIE5BVElPTkFMO0tPTkRJTlNLSVk6VU5LTk9XTjpSVS1LRE4KK1JVU1NJQTpLSEFOVFktTUFOU0lTS0kgTkFUSU9OQUw7TkVGVEVZVUdBTlNLSVk6VU5LTk9XTjpSVS1ORkcKK1JVU1NJQTpLSEFOVFktTUFOU0lTS0kgTkFUSU9OQUw7TkVGVEVVR0FOU0s6VU5LTk9XTjpSVS1ORkEKK1JVU1NJQTpLSEFOVFktTUFOU0lTS0kgTkFUSU9OQUw7S0hBTlRZLU1BTlNZSVNLOlVOS05PV046UlUtS1QyCitSVVNTSUE6VE9NU0tB70EgT0JMQVNUO0tBUkdBU09LU0tJWTpVTktOT1dOOlJVLUtHSQorUlVTU0lBOktIQU5UWS1NQU5TSVNLSSBOQVRJT05BTDtNRUdJT046VU5LTk9XTjpSVS1NRU8KK1JVU1NJQTpLSEFOVFktTUFOU0lTS0kgTkFUSU9OQUw7TklaU0hOVkFSVE9WU0s6VU5LTk9XTjpSVS1OWjMKK1JVU1NJQTpLSEFOVFktTUFOU0lTS0kgTkFUSU9OQUw7UFlULVlBS0g6VU5LTk9XTjpSVS1QWVkKK1JVU1NJQTpUT01TS0HvQSBPQkxBU1Q7U1RSRVpIRVZPSjpVTktOT1dOOlJVLVNURQorUlVTU0lBOktIQU5UWS1NQU5TSVNLSSBOQVRJT05BTDtVUkFZOlVOS05PV046UlUtVVIxCitSVVNTSUE6VElPVU1FTlNLQe9BIE9CTC4gUulTSURVRTtVVkFUU0tJWTpVTktOT1dOOlJVLVVWSQorUlVTU0lBOlRPTVNLQe9BIE9CTEFTVDtWRVJLSE5FS0VUU0tJWTpVTktOT1dOOlJVLVZSOAorUlVTU0lBOlRPTVNLQe9BIE9CTEFTVDtQQVJBQkVMU0tJWTpVTktOT1dOOlJVLVBBTAorUlVTU0lBOlRPTVNLQe9BIE9CTEFTVDtLT0xQQVNIRVZTS0lZOlVOS05PV046UlUtS1BWCitSVVNTSUE6VElPVU1FTlNLQe9BIE9CTC4gUulTSURVRTtUT0JPTFNLSVk6VU5LTk9XTjpSVS1UQkkKK1JVU1NJQTpUSU9VTUVOU0tB70EgT0JMLiBS6VNJRFVFO1ZBR0FZU0tJWTpVTktOT1dOOlJVLVZHUworUlVTU0lBOk9NU0tB70EgT0JMQVNUO1RBUlNLSVk6VU5LTk9XTjpSVS1UUzMKK1JVU1NJQTpPTVNLQe9BIE9CTEFTVDtVU1QtSVNISU1TS0lZOlVOS05PV046UlUtVVRNCitSVVNTSUE6VE9NU0tB70EgT0JMQVNUO1BFUlZPTUFZU0tJWTpVTktOT1dOOlJVLVBWMQorUlVTU0lBOlRPTVNLQe9BIE9CTEFTVDtURUdVTERFVFNLSVk6VU5LTk9XTjpSVS1UR1QKK1JVU1NJQTpUT01TS0HvQSBPQkxBU1Q7S09MUEFTSEVWTzpVTktOT1dOOlJVLUtMSAorUlVTU0lBOlRJT1VNRU5TS0HvQSBPQkwuIFLpU0lEVUU7VE9CT0xTSzpVTktOT1dOOlJVLVRCTAorUlVTU0lBOk9NU0tB70EgT0JMQVNUO1RFVlJJWlNLSVk6VU5LTk9XTjpSVS1UVloKK1JVU1NJQTpUSU9VTUVOU0tB70EgT0JMLiBS6VNJRFVFO05JWkhORVRBVkRJTlNLSVk6VU5LTk9XTjpSVS1OWjQKK1JVU1NJQTpUSU9VTUVOU0tB70EgT0JMLiBS6VNJRFVFO1lBUktPVlNLSVk6VU5LTk9XTjpSVS1ZUjUKK1JVU1NJQTpUT01TS0HvQSBPQkxBU1Q7TU9MQ0hBTk9WU0tJWTpVTktOT1dOOlJVLU1MMgorUlVTU0lBOlRPTVNLQe9BIE9CTEFTVDtDSEFJTlNLSVk6VU5LTk9XTjpSVS1DQUkKK1JVU1NJQTpUT01TS0HvQSBPQkxBU1Q7QVNJTk9WU0tJWTpVTktOT1dOOlJVLUFTIAorUlVTU0lBOlRPTVNLQe9BIE9CTEFTVDtCQUtDSEFSU0tJWTpVTktOT1dOOlJVLUJLUgorUlVTU0lBOk9NU0tB70EgT0JMQVNUO1pOQU1FTlNLSVk6VU5LTk9XTjpSVS1aTksKK1JVU1NJQTpUT01TS0HvQSBPQkxBU1Q7S1JJVk9TSEVJTlNLSVk6VU5LTk9XTjpSVS1LSTQKK1JVU1NJQTpPTVNLQe9BIE9CTEFTVDtTRURFTE5JS09WU0tJWTpVTktOT1dOOlJVLVNESworUlVTU0lBOlRJT1VNRU5TS0HvQSBPQkwuIFLpU0lEVUU7VFlVTUVOU0tJWTpVTktOT1dOOlJVLVRZMgorUlVTU0lBOlRPTVNLQe9BIE9CTEFTVDtUT01TS0lZOlVOS05PV046UlUtVE0yCitSVVNTSUE6VElPVU1FTlNLQe9BIE9CTC4gUulTSURVRTtWSUtVTE9WU0tJWTpVTktOT1dOOlJVLVZLVgorUlVTU0lBOk9NU0tB70EgT0JMQVNUO0JPTFNIRVVLT1ZTS0lZOlVOS05PV046UlUtQlNPCitSVVNTSUE6VE9NU0tB70EgT0JMQVNUO1pZUllBTlNLSVk6VU5LTk9XTjpSVS1aWU4KK1JVU1NJQTpUSU9VTUVOU0tB70EgT0JMLiBS6VNJRFVFO0FST01BU0hFVlNLSVk6VU5LTk9XTjpSVS1BUjcKK1JVU1NJQTpOT1ZPU0lCSVJTS0HvQSBPQkxBU1Q7S1lTSFRPVlNLSVk6VU5LTk9XTjpSVS1LWTcKK1JVU1NJQTpUSU9VTUVOU0tB70EgT0JMLiBS6VNJRFVFO1lVUkdJTlNLSVk6VU5LTk9XTjpSVS1ZUjYKK1JVU1NJQTpUT01TS0HvQSBPQkxBU1Q7U0hFR0FSU0tJWTpVTktOT1dOOlJVLVNFWQorUlVTU0lBOlRPTVNLQe9BIE9CTEFTVDtBU0lOTzpVTktOT1dOOlJVLUFTTgorUlVTU0lBOlRJT1VNRU5TS0HvQSBPQkwuIFLpU0lEVUU7VFlVTUVOOlVOS05PV046UlUtVFlNCitSVVNTSUE6Tk9WT1NJQklSU0tB70EgT0JMQVNUO1NFVkVSTllJOlVOS05PV046UlUtU0UxCitSVVNTSUE6VElPVU1FTlNLQe9BIE9CTC4gUulTSURVRTtZQUxVVE9ST1ZTS0lZOlVOS05PV046UlUtWUwgCitSVVNTSUE6VElPVU1FTlNLQe9BIE9CTC4gUulTSURVRTtTT1JPS0lOU0tJWTpVTktOT1dOOlJVLVNSOAorUlVTU0lBOlRJT1VNRU5TS0HvQSBPQkwuIFLpU0lEVUU7WkFWT0RPVUtPVlNLSVk6VU5LTk9XTjpSVS1aVkkKK1JVU1NJQTpPTVNLQe9BIE9CTEFTVDtUQVJBOlVOS05PV046UlUtVEFSCitSVVNTSUE6S0VNRVJPVlNLQe9BIE9CTEFTVDtNQVJJSU5TS0lZOlVOS05PV046UlUtTVI1CitSVVNTSUE6VElPVU1FTlNLQe9BIE9CTC4gUulTSURVRTtHT0xZU0hNQU5PVlNLSVk6VU5LTk9XTjpSVS1HTE4KK1JVU1NJQTpUSU9VTUVOU0tB70EgT0JMLiBS6VNJRFVFO0lTRVRTS0lZOlVOS05PV046UlUtSVNTCitSVVNTSUE6T01TS0HvQSBPQkxBU1Q7S09MT1NPVlNLSVk6VU5LTk9XTjpSVS1LTzIKK1JVU1NJQTpUT01TS0HvQSBPQkxBU1Q7VE9NU0s6VU5LTk9XTjpSVS1UT0sKK1JVU1NJQTpUSU9VTUVOU0tB70EgT0JMLiBS6VNJRFVFO09NVVRJTlNLSVk6VU5LTk9XTjpSVS1PTUsKK1JVU1NJQTpPTVNLQe9BIE9CTEFTVDtNVVJPTVRTRVZTS0lZOlVOS05PV046UlUtTVI2CitSVVNTSUE6T01TS0HvQSBPQkxBU1Q7S1JVVElOU0tJWTpVTktOT1dOOlJVLUtVSQorUlVTU0lBOlRJT1VNRU5TS0HvQSBPQkwuIFLpU0lEVUU7QUJBVFNLSVk6VU5LTk9XTjpSVS1BQlkKK1JVU1NJQTpPTVNLQe9BIE9CTEFTVDtCT0xTSEVSRUNIRU5TS0lZOlVOS05PV046UlUtQlNDCitSVVNTSUE6VE9NU0tB70EgT0JMQVNUO0tPWkhFVk5JS09WU0tJWTpVTktOT1dOOlJVLUtaTworUlVTU0lBOlRJT1VNRU5TS0HvQSBPQkwuIFLpU0lEVUU7WUFMVVRPUk9WU0s6VU5LTk9XTjpSVS1ZTFIKK1JVU1NJQTpLRU1FUk9WU0tB70EgT0JMQVNUO1lBWVNLSVk6VU5LTk9XTjpSVS1ZWUkKK1JVU1NJQTpUSU9VTUVOU0tB70EgT0JMLiBS6VNJRFVFO0lTSElNU0tJWTpVTktOT1dOOlJVLUlTSworUlVTU0lBOktFTUVST1ZTS0HvQSBPQkxBU1Q7SVpITU9SU0tJWTpVTktOT1dOOlJVLUlaUgorUlVTU0lBOk5PVk9TSUJJUlNLQe9BIE9CTEFTVDtVQklOU0tJWTpVTktOT1dOOlJVLVVCUworUlVTU0lBOk5PVk9TSUJJUlNLQe9BIE9CTEFTVDtLT0xZVkFOU0tJWTpVTktOT1dOOlJVLUtZOAorUlVTU0lBOk9NU0tB70EgT0JMQVNUO1RZVUtBTElOU0tJWTpVTktOT1dOOlJVLVRZMworUlVTU0lBOktFTUVST1ZTS0HvQSBPQkxBU1Q7VFlBWkhJTlNLSVk6VU5LTk9XTjpSVS1UWTQKK1JVU1NJQTpUSU9VTUVOU0tB70EgT0JMLiBS6VNJRFVFO1VQT1JPVlNLSVk6VU5LTk9XTjpSVS1VUFYKK1JVU1NJQTpUSU9VTUVOU0tB70EgT0JMLiBS6VNJRFVFO1pBVk9ET1VLT1ZTSzpVTktOT1dOOlJVLVpWIAorUlVTU0lBOk5PVk9TSUJJUlNLQe9BIE9CTEFTVDtWRU5HRVJPVlNLSVk6VU5LTk9XTjpSVS1WTlYKK1JVU1NJQTpUSU9VTUVOU0tB70EgT0JMLiBS6VNJRFVFO0FSTUlaT05TS0lZOlVOS05PV046UlUtQVI4CitSVVNTSUE6Tk9WT1NJQklSU0tB70EgT0JMQVNUO0tVWUJZU0hFVlNLSVk6VU5LTk9XTjpSVS1LWTkKK1JVU1NJQTpLRU1FUk9WU0tB70EgT0JMQVNUO01BUklJTlNLOlVOS05PV046UlUtTVI3CitSVVNTSUE6S0VNRVJPVlNLQe9BIE9CTEFTVDtZQVNIS0lOU0tJWTpVTktOT1dOOlJVLVlTWQorUlVTU0lBOk5PVk9TSUJJUlNLQe9BIE9CTEFTVDtVU1QtVEFSS1NLSVk6VU5LTk9XTjpSVS1VVFIKK1JVU1NJQTpLRU1FUk9WU0tB70EgT0JMQVNUO1lVUkdJTlNLSVk6VU5LTk9XTjpSVS1ZUjcKK1JVU1NJQTpLRU1FUk9WU0tB70EgT0JMQVNUO0NIRUJVTElOU0tJWTpVTktOT1dOOlJVLUNFWQorUlVTU0lBOlRJT1VNRU5TS0HvQSBPQkwuIFLpU0lEVUU7SVNISU06VU5LTk9XTjpSVS1JUyAKK1JVU1NJQTpLRU1FUk9WU0tB70EgT0JMQVNUO0FOWkhFUk8tU1VEWkhFTlNLOlVOS05PV046UlUtQU5ECitSVVNTSUE6S0VNRVJPVlNLQe9BIE9CTEFTVDtUQVlHQTpVTktOT1dOOlJVLVRBRworUlVTU0lBOk5PVk9TSUJJUlNLQe9BIE9CTEFTVDtCT0xPVE5JTlNLSVk6VU5LTk9XTjpSVS1CTzMKK1JVU1NJQTpUSU9VTUVOU0tB70EgT0JMLiBS6VNJRFVFO0JFUkRZVVpIU0tJWTpVTktOT1dOOlJVLUJSWgorUlVTU0lBOk5PVk9TSUJJUlNLQe9BIE9CTEFTVDtDSFVMWU1TS0lZOlVOS05PV046UlUtQ1VNCitSVVNTSUE6T01TS0HvQSBPQkxBU1Q7TklaSE5FT01TS0lZOlVOS05PV046UlUtTlpNCitSVVNTSUE6S0VNRVJPVlNLQe9BIE9CTEFTVDtUSVNVTFNLSVk6VU5LTk9XTjpSVS1UUzQKK1JVU1NJQTpPTVNLQe9BIE9CTEFTVDtTQVJHQVRTS0lZOlVOS05PV046UlUtU1I5CitSVVNTSUE6VElPVU1FTlNLQe9BIE9CTC4gUulTSURVRTtTTEFES09WU0tJWTpVTktOT1dOOlJVLVNBOQorUlVTU0lBOktFTUVST1ZTS0HvQSBPQkxBU1Q7S0VNRVJPVlNLSVk6VU5LTk9XTjpSVS1LRUkKK1JVU1NJQTpPTVNLQe9BIE9CTEFTVDtUVUtBTElOU0s6VU5LTk9XTjpSVS1US1MKK1JVU1NJQTpUSU9VTUVOU0tB70EgT0JMLiBS6VNJRFVFO0tBWkFOU0tJWTpVTktOT1dOOlJVLUtaNAorUlVTU0lBOktFTUVST1ZTS0HvQSBPQkxBU1Q7QkVSRVpPVlNLSVk6VU5LTk9XTjpSVS1CRSAKK1JVU1NJQTpPTVNLQe9BIE9CTEFTVDtHT1JLT1ZTS0lZOlVOS05PV046UlUtR1I2CitSVVNTSUE6S0VNRVJPVlNLQe9BIE9CTEFTVDtZVVJHQTpVTktOT1dOOlJVLVlVRworUlVTU0lBOk5PVk9TSUJJUlNLQe9BIE9CTEFTVDtLQVJHQVRTS0lZOlVOS05PV046UlUtS0cgCitSVVNTSUE6S0VNRVJPVlNLQe9BIE9CTEFTVDtUT1BLSU5TS0lZOlVOS05PV046UlUtVFBOCitSVVNTSUE6Tk9WT1NJQklSU0tB70EgT0JMQVNUO01PU0hLT1ZTS0lZOlVOS05PV046UlUtTVMgCitSVVNTSUE6Tk9WT1NJQklSU0tB70EgT0JMQVNUO0NIQU5PVlNLSVk6VU5LTk9XTjpSVS1DQVkKK1JVU1NJQTpOT1ZPU0lCSVJTS0HvQSBPQkxBU1Q7VEFUQVJTS0lZOlVOS05PV046UlUtVFQgCitSVVNTSUE6T01TS0HvQSBPQkxBU1Q7TFlVQklOU0tJWTpVTktOT1dOOlJVLUxZIAorUlVTU0lBOk5PVk9TSUJJUlNLQe9BIE9CTEFTVDtLT0NIRU5FVlNLSVk6VU5LTk9XTjpSVS1LQyAKK1JVU1NJQTpPTVNLQe9BIE9CTEFTVDtOQVpZVkFZRVZTSzpVTktOT1dOOlJVLU5aRQorUlVTU0lBOk5PVk9TSUJJUlNLQe9BIE9CTEFTVDtUT0dVQ0hJTlNLSVk6VU5LTk9XTjpSVS1UR0kKK1JVU1NJQTpOT1ZPU0lCSVJTS0HvQSBPQkxBU1Q7Tk9WT1NJQklSU0tJWTpVTktOT1dOOlJVLU5PMQorUlVTU0lBOk5PVk9TSUJJUlNLQe9BIE9CTEFTVDtLVVlCSVNIRVY6VU5LTk9XTjpSVS1LWUgKK1JVU1NJQTpPTVNLQe9BIE9CTEFTVDtPTVNLSVk6VU5LTk9XTjpSVS1PTUkKK1JVU1NJQTpOT1ZPU0lCSVJTS0HvQSBPQkxBU1Q7QkFSQUJJTlNLSVk6VU5LTk9XTjpSVS1CQU4KK1JVU1NJQTpLRU1FUk9WU0tB70EgT0JMQVNUO0tSQVBJVklOU0tJWTpVTktOT1dOOlJVLUtQSworUlVTU0lBOktFTUVST1ZTS0HvQSBPQkxBU1Q7S0VNRVJPVk86VU5LTk9XTjpSVS1LRVIKK1JVU1NJQTpOT1ZPU0lCSVJTS0HvQSBPQkxBU1Q7QkFSQUJJTlNLOlVOS05PV046UlUtQkEgCitSVVNTSUE6T01TS0HvQSBPQkxBU1Q7S0FMQUNISU5TS0lZOlVOS05PV046UlUtS0MxCitSVVNTSUE6T01TS0HvQSBPQkxBU1Q7SVNJTEtVTFNLSVk6VU5LTk9XTjpSVS1JU0wKK1JVU1NJQTpLRU1FUk9WU0tB70EgT0JMQVNUO1RPUEtJOlVOS05PV046UlUtVE9JCitSVVNTSUE6Tk9WT1NJQklSU0tB70EgT0JMQVNUO1RBVEFSU0s6VU5LTk9XTjpSVS1UVFIKK1JVU1NJQTpPTVNLQe9BIE9CTEFTVDtNT1NLQUxFTlNLSVk6VU5LTk9XTjpSVS1NUzEKK1JVU1NJQTpPTVNLQe9BIE9CTEFTVDtLT1JNSUxPVlNLSVk6VU5LTk9XTjpSVS1LSTUKK1JVU1NJQTpOT1ZPU0lCSVJTS0HvQSBPQkxBU1Q7Tk9WT1NJQklSU0s6VU5LTk9XTjpSVS1OT0IKK1JVU1NJQTpLRU1FUk9WU0tB70EgT0JMQVNUO1BST01ZU0hMRU5OT1ZTS0lZOlVOS05PV046UlUtUE9OCitSVVNTSUE6T01TS0HvQSBPQkxBU1Q7TUFSWUFOT1ZTS0lZOlVOS05PV046UlUtTVI4CitSVVNTSUE6T01TS0HvQSBPQkxBU1Q7T01TSzpVTktOT1dOOlJVLU9NIAorUlVTU0lBOk5PVk9TSUJJUlNLQe9BIE9CTEFTVDtDSElTVE9PWllPUk5ZSTpVTktOT1dOOlJVLUNJWgorUlVTU0lBOk9NU0tB70EgT0JMQVNUO0tBTEFDSElOU0s6VU5LTk9XTjpSVS1LQ0gKK1JVU1NJQTpOT1ZPU0lCSVJTS0HvQSBPQkxBU1Q7WkRWSU5TS0lZOlVOS05PV046UlUtWkRLCitSVVNTSUE6T01TS0HvQSBPQkxBU1Q7T0tPTkVTSE5JS09WU0tJWTpVTktOT1dOOlJVLU9LTworUlVTU0lBOk5PVk9TSUJJUlNLQe9BIE9CTEFTVDtJU0tJVElNU0tJWTpVTktOT1dOOlJVLUlTSQorUlVTU0lBOk5PVk9TSUJJUlNLQe9BIE9CTEFTVDtPQjpVTktOT1dOOlJVLU9TQgorUlVTU0lBOktFTUVST1ZTS0HvQSBPQkxBU1Q7TEVOSU5TSy1LVVpORVRTS0lZOlVOS05PV046UlUtTE5aCitSVVNTSUE6T01TS0HvQSBPQkxBU1Q7SVNJTCdLVUwnOlVOS05PV046UlUtSVNVCitSVVNTSUE6Tk9WT1NJQklSU0tB70EgT0JMQVNUO0tVUElOU0tJWTpVTktOT1dOOlJVLUtQSQorUlVTU0lBOk5PVk9TSUJJUlNLQe9BIE9CTEFTVDtET1ZPTEVOU0tJWTpVTktOT1dOOlJVLURWSworUlVTU0lBOktFTUVST1ZTS0HvQSBPQkxBU1Q7TUVaSERVUkVDSEVOU0tJWTpVTktOT1dOOlJVLU1aSAorUlVTU0lBOk9NU0tB70EgT0JMQVNUO1RBVlJJQ0hFU0tJWTpVTktOT1dOOlJVLVRWSAorUlVTU0lBOk5PVk9TSUJJUlNLQe9BIE9CTEFTVDtNQVNMWUFOSU5TS0lZOlVOS05PV046UlUtTVMyCitSVVNTSUE6Tk9WT1NJQklSU0tB70EgT0JMQVNUO0JFUkRTSzpVTktOT1dOOlJVLUJFRAorUlVTU0lBOk9NU0tB70EgT0JMQVNUO0FaT1ZTS1kgTkVNRVRTS1kgTkFUSU9OQUw6VU5LTk9XTjpSVS1BWksKK1JVU1NJQTpOT1ZPU0lCSVJTS0HvQSBPQkxBU1Q7T1JEWU5TS0lZOlVOS05PV046UlUtT1JJCitSVVNTSUE6T01TS0HvQSBPQkxBU1Q7U0hFUkJBS1VMU0tJWTpVTktOT1dOOlJVLVNFTAorUlVTU0lBOk5PVk9TSUJJUlNLQe9BIE9CTEFTVDtJU0tJVElNOlVOS05PV046UlUtSVNUCitSVVNTSUE6T01TS0HvQSBPQkxBU1Q7Q0hFUkxBS1NLSVk6VU5LTk9XTjpSVS1DRSAKK1JVU1NJQTpPTVNLQe9BIE9CTEFTVDtQT0xUQVZTS0lZOlVOS05PV046UlUtUExWCitSVVNTSUE6S0VNRVJPVlNLQe9BIE9CTEFTVDtCRUxPVlNLSVk6VU5LTk9XTjpSVS1CTzQKK1JVU1NJQTpLRU1FUk9WU0tB70EgT0JMQVNUO0dVUllFVlNLSVk6VU5LTk9XTjpSVS1HUjcKK1JVU1NJQTpLRU1FUk9WU0tB70EgT0JMQVNUO0xFTklOU0stS1VaTkVUU0tJWTpVTktOT1dOOlJVLUxOTgorUlVTU0lBOk5PVk9TSUJJUlNLQe9BIE9CTEFTVDtLT0NIS09WU0tJWTpVTktOT1dOOlJVLUtDMgorUlVTU0lBOk9NU0tB70EgT0JMQVNUO09ERVNTS0lZOlVOS05PV046UlUtT0RJCitSVVNTSUE6Tk9WT1NJQklSU0tB70EgT0JMQVNUO0NIRVJFUEFOT1ZTS0lZOlVOS05PV046UlUtQ0VPCitSVVNTSUE6Tk9WT1NJQklSU0tB70EgT0JMQVNUO1NVWlVOU0tJWTpVTktOT1dOOlJVLVNaSworUlVTU0lBOk9NU0tB70EgT0JMQVNUO1BBVkxPR1JBRFNLSVk6VU5LTk9XTjpSVS1QVkQKK1JVU1NJQTpBTFRB71NLSSBLUkHvIFLpU0lEVUVMO1pBTEVTT1ZTS0lZOlVOS05PV046UlUtWkxTCitSVVNTSUE6S0VNRVJPVlNLQe9BIE9CTEFTVDtCRUxPVk86VU5LTk9XTjpSVS1CRU8KK1JVU1NJQTpOT1ZPU0lCSVJTS0HvQSBPQkxBU1Q7S1JBU05PWkVSU0tJWTpVTktOT1dOOlJVLUtPMworUlVTU0lBOktFTUVST1ZTS0HvQSBPQkxBU1Q7UFJPS09QWUVWU0tJWTpVTktOT1dOOlJVLVBPVgorUlVTU0lBOk9NU0tB70EgT0JMQVNUO05PVk9WQVJTSEFWU0tJWTpVTktOT1dOOlJVLU5PSAorUlVTU0lBOk5PVk9TSUJJUlNLQe9BIE9CTEFTVDtCQUdBTlNLSVk6VU5LTk9XTjpSVS1CRzIKK1JVU1NJQTpBTFRB71NLSSBLUkHvIFLpU0lEVUVMO0tSVVRJS0hJTktTSVk6VU5LTk9XTjpSVS1LVVkKK1JVU1NJQTpOT1ZPU0lCSVJTS0HvQSBPQkxBU1Q7S0FSQVNVS1NLSVk6VU5LTk9XTjpSVS1LVSAKK1JVU1NJQTpLRU1FUk9WU0tB70EgT0JMQVNUO0dVUllFVlNLOlVOS05PV046UlUtR1I4CitSVVNTSUE6QUxUQe9TS0kgS1JB7yBS6VNJRFVFTDtaQVJJTlNLSVk6VU5LTk9XTjpSVS1aUksKK1JVU1NJQTpLRU1FUk9WU0tB70EgT0JMQVNUO05PVk9LVVpORVRTS0lZOlVOS05PV046UlUtTk9FCitSVVNTSUE6QUxUQe9TS0kgS1JB7yBS6VNJRFVFTDtUQUxNRU5TS0lZOlVOS05PV046UlUtVExZCitSVVNTSUE6QUxUQe9TS0kgS1JB7yBS6VNJRFVFTDtQQU5LUlVTSFlLSElOU0tJWTpVTktOT1dOOlJVLVBOIAorUlVTU0lBOkFMVEHvU0tJIEtSQe8gUulTSURVRUw7S0FNRU5TS0lZOlVOS05PV046UlUtS0VZCitSVVNTSUE6T01TS0HvQSBPQkxBU1Q7UlVTU0tPLVBPTFlBTlNLSVk6VU5LTk9XTjpSVS1SU1kKK1JVU1NJQTpLRU1FUk9WU0tB70EgT0JMQVNUO0tJU0lMRVZTSzpVTktOT1dOOlJVLUtJNgorUlVTU0lBOkFMVEHvU0tJIEtSQe8gUulTSURVRUw7UEVSVk9NQVlTS0lZOlVOS05PV046UlUtUFYyCitSVVNTSUE6S0VNRVJPVlNLQe9BIE9CTEFTVDtQUk9LT1BZRVZTSzpVTktOT1dOOlJVLVBPWQorUlVTU0lBOkFMVEHvU0tJIEtSQe8gUulTSURVRUw7S1lUTUFOT1ZTS0lZOlVOS05PV046UlUtS1QzCitSVVNTSUE6QUxUQe9TS0kgS1JB7yBS6VNJRFVFTDtLSEFCQVJTS0lZOlVOS05PV046UlUtS0JSCitSVVNTSUE6QUxUQe9TS0kgS1JB7yBS6VNJRFVFTDtLQU1FTictTkEtT0JJOlVOS05PV046UlUtS01BCitSVVNTSUE6S0VNRVJPVlNLQe9BIE9CTEFTVDtNRVpTSERVUkVDSEVOU0s6VU5LTk9XTjpSVS1NWkUKK1JVU1NJQTpBTFRB71NLSSBLUkHvIFLpU0lEVUVMO1NIRUxBQk9MSUtISU5TS0lZOlVOS05PV046UlUtU0UyCitSVVNTSUE6S0VNRVJPVlNLQe9BIE9CTEFTVDtOT1ZPS1VaTkVUU0s6VU5LTk9XTjpSVS1OVloKK1JVU1NJQTpBTFRB71NLSSBLUkHvIFLpU0lEVUVMO1RPR1VMU0tJWTpVTktOT1dOOlJVLVRHWQorUlVTU0lBOktFTUVST1ZTS0HvQSBPQkxBU1Q7TVlTS0k6VU5LTk9XTjpSVS1NWSAKK1JVU1NJQTpBTFRB71NLSSBLUkHvIFLpU0lEVUVMO0JVUkxJTlNLSVk6VU5LTk9XTjpSVS1CSUsKK1JVU1NJQTpLRU1FUk9WU0tB70EgT0JMQVNUO09TSU5OSUtJOlVOS05PV046UlUtT1NOCitSVVNTSUE6QUxUQe9TS0kgS1JB7yBS6VNJRFVFTDtQQVZMT1ZTS0lZOlVOS05PV046UlUtUFYzCitSVVNTSUE6QUxUQe9TS0kgS1JB7yBS6VNJRFVFTDtCQVlFVlNLSVk6VU5LTk9XTjpSVS1CWTQKK1JVU1NJQTpBTFRB71NLSSBLUkHvIFLpU0lEVUVMO0tPU0lLSElOU0tJWTpVTktOT1dOOlJVLUtJNworUlVTU0lBOkFMVEHvU0tJIEtSQe8gUulTSURVRUw7VFlVTUVOVFNFVlNLSVk6VU5LTk9XTjpSVS1UWUUKK1JVU1NJQTpLRU1FUk9WU0tB70EgT0JMQVNUO1RBU0hUQUdPTFNLSVk6VU5LTk9XTjpSVS1UUzUKK1JVU1NJQTpBTFRB71NLSSBLUkHvIFLpU0lEVUVMO1lFTFRTT1ZTS0lZOlVOS05PV046UlUtWUwxCitSVVNTSUE6QUxUQe9TS0kgS1JB7yBS6VNJRFVFTDtCQVJOQVVMOlVOS05PV046UlUtQlJVCitSVVNTSUE6QUxUQe9TS0kgS1JB7yBS6VNJRFVFTDtTVVlFVFNLSVk6VU5LTk9XTjpSVS1TWTIKK1JVU1NJQTpBTFRB71NLSSBLUkHvIFLpU0lEVUVMO05PVk9BTFRBWVNLOlVOS05PV046UlUtTk9BCitSVVNTSUE6QUxUQe9TS0kgS1JB7yBS6VNJRFVFTDtSRUJSSUtISU5TS0lZOlVOS05PV046UlUtUkJOCitSVVNTSUE6QUxUQe9TS0kgS1JB7yBS6VNJRFVFTDtUU0VMSU5OSVk6VU5LTk9XTjpSVS1UUzYKK1JVU1NJQTpBTFRB71NLSSBLUkHvIFLpU0lEVUVMO0tBTE1BTlNLSVk6VU5LTk9XTjpSVS1LMgorUlVTU0lBOkFMVEHvU0tJIEtSQe8gUulTSURVRUw7U0xBVkdPUk9EU0tJWTpVTktOT1dOOlJVLVNBRAorUlVTU0lBOkFMVEHvU0tJIEtSQe8gUulTSURVRUw7VFJPSVRTS0lZOlVOS05PV046UlUtVE9ZCitSVVNTSUE6QUxUQe9TS0kgS1JB7yBS6VNJRFVFTDtCTEFHT1ZFU0NIRU5TS0lZOlVOS05PV046UlUtQkExCitSVVNTSUE6QUxUQe9TS0kgS1JB7yBS6VNJRFVFTDtaQVZZQUxPVlNLSVk6VU5LTk9XTjpSVS1aVlkKK1JVU1NJQTpBTFRB71NLSSBLUkHvIFLpU0lEVUVMO1NMQVZHT1JPRDpVTktOT1dOOlJVLVNWTworUlVTU0lBOkFMVEHvU0tJIEtSQe8gUulTSURVRUw7U09MVE9OU0tJWTpVTktOT1dOOlJVLVNUNQorUlVTU0lBOkFMVEHvU0tJIEtSQe8gUulTSURVRUw7VE9QQ0hJS0hJTlNLSVk6VU5LTk9XTjpSVS1UUEgKK1JVU1NJQTpBTFRB71NLSSBLUkHvIFLpU0lEVUVMO1RBQlVOU0tJWTpVTktOT1dOOlJVLVRCWQorUlVTU0lBOkFMVEHvU0tJIEtSQe8gUulTSURVRUw7TUFNT05UT1ZTS0lZOlVOS05PV046UlUtTU1WCitSVVNTSUE6QUxUQe9TS0kgS1JB7yBS6VNJRFVFTDtaT05BTE5ZSTpVTktOT1dOOlJVLVpOTAorUlVTU0lBOkFMVEHvU0tJIEtSQe8gUulTSURVRUw7QklZU0tJWTpVTktOT1dOOlJVLUJZNQorUlVTU0lBOkFMVEHvU0tJIEtSQe8gUulTSURVRUw7Uk9ESU5TS0lZOlVOS05PV046UlUtUkRLCitSVVNTSUE6QUxUQe9TS0kgS1JB7yBS6VNJRFVFTDtST01BTk9WU0tJWTpVTktOT1dOOlJVLVJNIAorUlVTU0lBOktFTUVST1ZTS0HvQSBPQkxBU1Q7VEFTSFRBR09MOlVOS05PV046UlUtVFNPCitSVVNTSUE6QUxUQe9TS0kgS1JB7yBS6VNJRFVFTDtLVUxVTkRJTlNLSVk6VU5LTk9XTjpSVS1LVTEKK1JVU1NJQTpBTFRB71NLSSBLUkHvIFLpU0lEVUVMO0FMRVlTS0lZOlVOS05PV046UlUtQUVTCitSVVNTSUE6UkVTUE9VQkxJS0EgQUxUQe87VFVST0NIQUtTS0lZOlVOS05PV046UlUtVE8gCitSVVNTSUE6QUxUQe9TS0kgS1JB7yBS6VNJRFVFTDtVU1QtUFJJU1RBTlNLSVk6VU5LTk9XTjpSVS1VVEEKK1JVU1NJQTpBTFRB71NLSSBLUkHvIFLpU0lEVUVMO1NISVBVTk9WU0tJWTpVTktOT1dOOlJVLVNJSQorUlVTU0lBOkFMVEHvU0tJIEtSQe8gUulTSURVRUw7S1JBU05PR09SU0tJWTpVTktOT1dOOlJVLUtPNAorUlVTU0lBOkFMVEHvU0tJIEtSQe8gUulTSURVRUw7QllTVFJPSVNUT0tTS0lZOlVOS05PV046UlUtQllPCitSVVNTSUE6QUxUQe9TS0kgS1JB7yBS6VNJRFVFTDtLTFlVQ0hFVlNLSVk6VU5LTk9XTjpSVS1LVVYKK1JVU1NJQTpBTFRB71NLSSBLUkHvIFLpU0lEVUVMO0JJWVNLOlVOS05PV046UlUtQkkgCitSVVNTSUE6QUxUQe9TS0kgS1JB7yBS6VNJRFVFTDtBTEVZU0s6VU5LTk9XTjpSVS1BRVkKK1JVU1NJQTpBTFRB71NLSSBLUkHvIFLpU0lEVUVMO1NNT0xFTlNLSVk6VU5LTk9XTjpSVS1TTUkKK1JVU1NJQTpBTFRB71NLSSBLUkHvIFLpU0lEVUVMO1NPVkVUU0tJWTpVTktOT1dOOlJVLVNFMworUlVTU0lBOkFMVEHvU0tJIEtSQe8gUulTSURVRUw7Tk9WSUNISUtISU5TS0lZOlVOS05PV046UlUtTklICitSVVNTSUE6QUxUQe9TS0kgS1JB7yBS6VNJRFVFTDtQRVRST1BBVkxPVlNLSVk6VU5LTk9XTjpSVS1QVE8KK1JVU1NJQTpBTFRB71NLSSBLUkHvIFLpU0lEVUVMO1ZPTENISUtISU5TS0lZOlVOS05PV046UlUtVkNICitSVVNTSUE6QUxUQe9TS0kgS1JB7yBS6VNJRFVFTDtVU1QtS0FMTUFOU0tJWTpVTktOT1dOOlJVLVVUUworUlVTU0lBOkFMVEHvU0tJIEtSQe8gUulTSURVRUw7UE9TUEVMSUtISU5TS0lZOlVOS05PV046UlUtUFMyCitSVVNTSUE6QUxUQe9TS0kgS1JB7yBS6VNJRFVFTDtNSUtIQVlMT1ZTS0lZOlVOS05PV046UlUtTUsxCitSVVNTSUE6QUxUQe9TS0kgS1JB7yBS6VNJRFVFTDtBTFRBWVNLSVk6VU5LTk9XTjpSVS1BVEsKK1JVU1NJQTpSRVNQT1VCTElLQSBBTFRB7ztDSE9ZU0tJWTpVTktOT1dOOlJVLUNPUworUlVTU0lBOkFMVEHvU0tJIEtSQe8gUulTSURVRUw7WUVHT1JZRVZTS0lZOlVOS05PV046UlUtWUdTCitSVVNTSUE6UkVTUE9VQkxJS0EgQUxUQe87TUFZTUlOU0tJWTpVTktOT1dOOlJVLU1ZMQorUlVTU0lBOkFMVEHvU0tJIEtSQe8gUulTSURVRUw7QkVMT0tVUklLSEE6VU5LTk9XTjpSVS1CT0EKK1JVU1NJQTpBTFRB71NLSSBLUkHvIFLpU0lEVUVMO1NPTE9ORVNIRU5TS0lZOlVOS05PV046UlUtU0xFCitSVVNTSUE6QUxUQe9TS0kgS1JB7yBS6VNJRFVFTDtSVUJUU09WU0tJWTpVTktOT1dOOlJVLVJCVgorUlVTU0lBOlJFU1BPVUJMSUtBIEFMVEHvO0dPUk5PLUFMVEFZU0s6VU5LTk9XTjpSVS1HUkEKK1JVU1NJQTpBTFRB71NLSSBLUkHvIFLpU0lEVUVMO0tSQVNOT1NIRUtPVlNLSVk6VU5LTk9XTjpSVS1LT08KK1JVU1NJQTpBTFRB71NLSSBLUkHvIFLpU0lEVUVMO0NIQVJZU0hTS0lZOlVOS05PV046UlUtQ0FICitSVVNTSUE6QUxUQe9TS0kgS1JB7yBS6VNJRFVFTDtVR0xPVlNLSVk6VU5LTk9XTjpSVS1VR0kKK1JVU1NJQTpBTFRB71NLSSBLUkHvIFLpU0lEVUVMO0tVUllJTlNLSVk6VU5LTk9XTjpSVS1LSTgKK1JVU1NJQTpSRVNQT1VCTElLQSBBTFRB7ztTSEVCQUxJTlNLSVk6VU5LTk9XTjpSVS1TRTQKK1JVU1NJQTpSRVNQT1VCTElLQSBBTFRB7ztDSEVNQUxTS1k6VU5LTk9XTjpSVS1DRTEKK1JVU1NJQTpBTFRB71NLSSBLUkHvIFLpU0lEVUVMO1pNRUlOT0dPUlNLSVk6VU5LTk9XTjpSVS1aTVIKK1JVU1NJQTpSRVNQT1VCTElLQSBBTFRB7ztVTEFHQU5TS0lZOlVOS05PV046UlUtVUxOCitSVVNTSUE6QUxUQe9TS0kgS1JB7yBS6VNJRFVFTDtSVUJUWk9WU0s6VU5LTk9XTjpSVS1SQlMKK1JVU1NJQTpSRVNQT1VCTElLQSBBTFRB7ztVU1QtS0FOU0tJWTpVTktOT1dOOlJVLVVUSworUlVTU0lBOkFMVEHvU0tJIEtSQe8gUulTSURVRUw7TE9LVEVWU0tJWTpVTktOT1dOOlJVLUxLWQorUlVTU0lBOlJFU1BPVUJMSUtBIEFMVEHvO09OR1VEQVlTS0lZOlVOS05PV046UlUtT05ZCitSVVNTSUE6QUxUQe9TS0kgS1JB7yBS6VNJRFVFTDtaTUVJTk9HT1JTSzpVTktOT1dOOlJVLVpNRworUlVTU0lBOkFMVEHvU0tJIEtSQe8gUulTSURVRUw7VFJFVElZQUtPVlNLSVk6VU5LTk9XTjpSVS1UUk8KK1JVU1NJQTpSRVNQT1VCTElLQSBBTFRB7ztVU1QtS09LU0lOU0tJWTpVTktOT1dOOlJVLVVUSQorUlVTU0lBOlJFU1BPVUJMSUtBIEFMVEHvO0tPU0gtQUdBQ0hTS0lZOlVOS05PV046UlUtS1NDCitSVVNTSUE6VEFUQVJTVEFOO0JBTFRBU0lOU0tJWTpVTktOT1dOOlJVLUJUIAorUlVTU0lBOlRBVEFSU1RBTjtBR1JZWlNLSVk6VU5LTk9XTjpSVS1BR0kKK1JVU1NJQTpUQVRBUlNUQU47QVJTS0lZOlVOS05PV046UlUtQVI5CitSVVNTSUE6VEFUQVJTVEFOO1ZZU09LT0dPUlNLSVk6VU5LTk9XTjpSVS1WWTMKK1JVU1NJQTpUQVRBUlNUQU47QVROSU5TS0lZOlVOS05PV046UlUtQVRJCitSVVNTSUE6VEFUQVJTVEFOO0tVS01PUlNLSVk6VU5LTk9XTjpSVS1LS0sKK1JVU1NJQTpUQVRBUlNUQU47U0FCSU5TS0lZOlVOS05PV046UlUtU0JLCitSVVNTSUE6VEFUQVJTVEFOO01BTUFEWVNIU0tJWTpVTktOT1dOOlJVLU1NUworUlVTU0lBOlRBVEFSU1RBTjtaRUxFTk9ET0xTS0lZOlVOS05PV046UlUtWkxMCitSVVNTSUE6VEFUQVJTVEFOO01FTkRFTEVZRVZTS0lZOlVOS05PV046UlUtTU4gCitSVVNTSUE6VEFUQVJTVEFOO1BFU1RSRUNISU5TS0lZOlVOS05PV046UlUtUFMzCitSVVNTSUE6VEFUQVJTVEFOO1lFTEFCVVpIU0tJWTpVTktOT1dOOlJVLVlMWgorUlVTU0lBOlRBVEFSU1RBTjtLQVpBTjpVTktOT1dOOlJVLUtaNQorUlVTU0lBOlRBVEFSU1RBTjtBS1RBTllTSFNLSVk6VU5LTk9XTjpSVS1BSyAKK1JVU1NJQTpUQVRBUlNUQU47VFVZTEFDSElOU0tJWTpVTktOT1dOOlJVLVRZNQorUlVTU0lBOlRBVEFSU1RBTjtUVUtBWUVWU0tJWTpVTktOT1dOOlJVLVRLWQorUlVTU0lBOlRBVEFSU1RBTjtNRU5aRUxJTlNLSVk6VU5LTk9XTjpSVS1NTjEKK1JVU1NJQTpUQVRBUlNUQU47WkVMRU5PRE9MJ1NLOlVOS05PV046UlUtWkxECitSVVNTSUE6VEFUQVJTVEFOO1JZQk5PLVNMT0JPRFNLSVk6VU5LTk9XTjpSVS1SWUIKK1JVU1NJQTpUQVRBUlNUQU47RUxBQlVHQTpVTktOT1dOOlJVLUVMRworUlVTU0lBOlRBVEFSU1RBTjtWRVJLSE5FVVNMT05TS0lZOlVOS05PV046UlUtVlI5CitSVVNTSUE6VEFUQVJTVEFOO0xBSVNIRVZTS0lZOlVOS05PV046UlUtTElWCitSVVNTSUE6VEFUQVJTVEFOO05BQkVSRVpITklZRSBDSEVMTlk6VU5LTk9XTjpSVS1OQlkKK1JVU1NJQTpUQVRBUlNUQU47TklaSE5FS0FNU0tJWTpVTktOT1dOOlJVLU5aNQorUlVTU0lBOlRBVEFSU1RBTjtOSVpTSE5FS0FNU0s6VU5LTk9XTjpSVS1OWjYKK1JVU1NJQTpUQVRBUlNUQU47U0FSTUFOT1ZTS0lZOlVOS05PV046UlUtU01ZCitSVVNTSUE6VEFUQVJTVEFOO1pBSU5TS0lZOlVOS05PV046UlUtWklTCitSVVNTSUE6VEFUQVJTVEFOO0tBTVNLTy1VU1RZSU5TS0lZOlVOS05PV046UlUtS0tUCitSVVNTSUE6VEFUQVJTVEFOO01VU0xZVU1PVlNLSVk6VU5LTk9XTjpSVS1NUzMKK1JVU1NJQTpUQVRBUlNUQU47Q0hJU1RPUE9MU0tJWTpVTktOT1dOOlJVLUNJTAorUlVTU0lBOlRBVEFSU1RBTjtDSElTVE9QT0wnOlVOS05PV046UlUtQ0hQCitSVVNTSUE6VEFUQVJTVEFOO0FMRUtTRVlFVlNLSVk6VU5LTk9XTjpSVS1BRVYKK1JVU1NJQTpUQVRBUlNUQU47Tk9WT1NIRVNITUlOU0tJWTpVTktOT1dOOlJVLU5PTQorUlVTU0lBOlRBVEFSU1RBTjtaQUlOU0s6VU5LTk9XTjpSVS1aQU4KK1JVU1NJQTpUQVRBUlNUQU47QlVJTlNLSVk6VU5LTk9XTjpSVS1CSUkKK1JVU1NJQTpUQVRBUlNUQU47QUxNRVRZRVZTS0lZOlVOS05PV046UlUtQU1JCitSVVNTSUE6VEFUQVJTVEFOO0tVWUJZU0hFVlNLSVk6VU5LTk9XTjpSVS1LQlYKK1JVU1NJQTpUQVRBUlNUQU47VEVUWVVTSFNLSVk6VU5LTk9XTjpSVS1UVEgKK1JVU1NJQTpUQVRBUlNUQU47QVpOQUtBWUVWU0tJWTpVTktOT1dOOlJVLUFaSQorUlVTU0lBOlRBVEFSU1RBTjtBS1NVQkFZRVZTS0lZOlVOS05PV046UlUtQUtWCitSVVNTSUE6VEFUQVJTVEFOO0FMS0VZRVZTS0lZOlVOS05PV046UlUtQUsxCitSVVNTSUE6VEFUQVJTVEFOO0NIRVJFTVNIQU5TS0lZOlVOS05PV046UlUtQ0VBCitSVVNTSUE6VEFUQVJTVEFOO0FMTUVUWUVWU0s6VU5LTk9XTjpSVS1BTVkKK1JVU1NJQTpUQVRBUlNUQU47T0tUWUFCUlNLSVk6VU5LTk9XTjpSVS1PVFIKK1JVU1NJQTpUQVRBUlNUQU47QVpOQUtBRVZPOlVOS05PV046UlUtQVpFCitSVVNTSUE6VEFUQVJTVEFOO0RST1pIQU5PVlNLSVk6VU5LTk9XTjpSVS1EUlYKK1JVU1NJQTpPVUxJQU5PVlNLQe9BIE9CTEFTVDtTVEFST01BWU5TS0lZOlVOS05PV046UlUtU1Q2CitSVVNTSUE6VEFUQVJTVEFOO0xFTklOT0dPUlNLSVk6VU5LTk9XTjpSVS1MTlIKK1JVU1NJQTpUQVRBUlNUQU47WVVUQVpJTlNLSVk6VU5LTk9XTjpSVS1ZVE4KK1JVU1NJQTpUQVRBUlNUQU47QlVHVUxNSU5TS0lZOlVOS05PV046UlUtQkczCitSVVNTSUE6T1VMSUFOT1ZTS0HvQSBPQkxBU1Q7U1VSU0tJWTpVTktOT1dOOlJVLVNTMgorUlVTU0lBOk9VTElBTk9WU0tB70EgT0JMQVNUO1RTWUxOSU5TS0lZOlVOS05PV046UlUtVFM3CitSVVNTSUE6T1VMSUFOT1ZTS0HvQSBPQkxBU1Q7VUxZQU5PVlNLSVk6VU5LTk9XTjpSVS1VTEkKK1JVU1NJQTpUQVRBUlNUQU47TEVOSU5JR09SU0s6VU5LTk9XTjpSVS1MTkcKK1JVU1NJQTpTQU1BUlNLQe9BIChLT1XvQllDSEVWU0tBO0NIRUxOTy1WRVJTSElOU0tJWTpVTktOT1dOOlJVLUNFUgorUlVTU0lBOlNBTUFSU0tB70EgKEtPVe9CWUNIRVZTS0E7U0hFTlRBTElOU0tJWTpVTktOT1dOOlJVLVNFNQorUlVTU0lBOk9VTElBTk9WU0tB70EgT0JMQVNUO01FTEVLRVNTS0lZOlVOS05PV046UlUtTUwzCitSVVNTSUE6T1VMSUFOT1ZTS0HvQSBPQkxBU1Q7TUFZTlNLSVk6VU5LTk9XTjpSVS1NWTIKK1JVU1NJQTpUQVRBUlNUQU47QlVHVUwnTUE6VU5LTk9XTjpSVS1CR00KK1JVU1NJQTpTQU1BUlNLQe9BIChLT1XvQllDSEVWU0tBO0tMWUFWTElOU0tJWTpVTktOT1dOOlJVLUtWMgorUlVTU0lBOk9VTElBTk9WU0tB70EgT0JMQVNUO05PVk9NQUxZS0xJTlNLSVk6VU5LTk9XTjpSVS1OTzIKK1JVU1NJQTpTQU1BUlNLQe9BIChLT1XvQllDSEVWU0tBO0tPU0hLSU5TS0lZOlVOS05PV046UlUtS0tJCitSVVNTSUE6T1VMSUFOT1ZTS0HvQSBPQkxBU1Q7Q0hFUkRBS0xJTlNLSVk6VU5LTk9XTjpSVS1DRTIKK1JVU1NJQTpUQVRBUlNUQU47QkFWTElOU0tJWTpVTktOT1dOOlJVLUJWTgorUlVTU0lBOk9VTElBTk9WU0tB70EgT0JMQVNUO0tBUlNVTlNLSVk6VU5LTk9XTjpSVS1LVTIKK1JVU1NJQTpPVUxJQU5PVlNLQe9BIE9CTEFTVDtVTFlBTk9WU0s6VU5LTk9XTjpSVS1VTCAKK1JVU1NJQTpTQU1BUlNLQe9BIChLT1XvQllDSEVWU0tBO1NFUkdJWUVWU0tJWTpVTktOT1dOOlJVLVNHVgorUlVTU0lBOk9VTElBTk9WU0tB70EgT0JMQVNUO0lOWkVOU0tJWTpVTktOT1dOOlJVLUlOSworUlVTU0lBOk9VTElBTk9WU0tB70EgT0JMQVNUO0RJTUlUUk9WR1JBRDpVTktOT1dOOlJVLURNRworUlVTU0lBOlNBTUFSU0tB70EgKEtPVe9CWUNIRVZTS0E7S0FNWVNITEVOU0tZOlVOS05PV046UlUtS1lFCitSVVNTSUE6U0FNQVJTS0HvQSAoS09V70JZQ0hFVlNLQTtJU0FLTElOU0tJWTpVTktOT1dOOlJVLUlTMQorUlVTU0lBOk9VTElBTk9WU0tB70EgT0JMQVNUO1ZFU0hLQVlNU0tJWTpVTktOT1dOOlJVLVZTWQorUlVTU0lBOk9VTElBTk9WU0tB70EgT0JMQVNUO1NFTkdJTEVZRVZTS0lZOlVOS05PV046UlUtU05ZCitSVVNTSUE6T1VMSUFOT1ZTS0HvQSBPQkxBU1Q7VEVSRU5HVUxTS0lZOlVOS05PV046UlUtVFJMCitSVVNTSUE6U0FNQVJTS0HvQSAoS09V70JZQ0hFVlNLQTtFTEtIT1ZTS1k6VU5LTk9XTjpSVS1FTEsKK1JVU1NJQTpPVUxJQU5PVlNLQe9BIE9CTEFTVDtLVVpPVkFUT1ZTS0lZOlVOS05PV046UlUtS1o2CitSVVNTSUE6UEVOWkVOU0tB70EgT0JMQVNUO05JS09MU0tJWTpVTktOT1dOOlJVLU5LMQorUlVTU0lBOlNBTUFSU0tB70EgKEtPVe9CWUNIRVZTS0E7UE9LSFZJU1RORVZPOlVOS05PV046UlUtUEtUCitSVVNTSUE6UEVOWkVOU0tB70EgT0JMQVNUO0JFRE5PREVNWUFOT1ZTS0lZOlVOS05PV046UlUtQkRTCitSVVNTSUE6UEVOWkVOU0tB70EgT0JMQVNUO05BUk9WQ0hBVFNLSVk6VU5LTk9XTjpSVS1OUlkKK1JVU1NJQTpQRU5aRU5TS0HvQSBPQkxBU1Q7SVNTSU5TS0lZOlVOS05PV046UlUtSVMyCitSVVNTSUE6UEVOWkVOU0tB70EgT0JMQVNUO0xVTklOTzpVTktOT1dOOlJVLUxVTgorUlVTU0lBOlNBTUFSU0tB70EgKEtPVe9CWUNIRVZTS0E7U1RBVlJPUE9MU0tJWTpVTktOT1dOOlJVLVNUNworUlVTU0lBOk9VTElBTk9WU0tB70EgT0JMQVNUO0JBWkFSTk9TWVpHQU5TS0lZOlVOS05PV046UlUtQlpaCitSVVNTSUE6U0FNQVJTS0HvQSAoS09V70JZQ0hFVlNLQTtLUkFTTk9ZQVJTS0lZOlVOS05PV046UlUtS081CitSVVNTSUE6T1VMSUFOT1ZTS0HvQSBPQkxBU1Q7QkFSWVNIU0tJWTpVTktOT1dOOlJVLUJZSAorUlVTU0lBOlBFTlpFTlNLQe9BIE9CTEFTVDtaRU1FVENISU5TS0lZOlVOS05PV046UlUtWk1OCitSVVNTSUE6UEVOWkVOU0tB70EgT0JMQVNUO1ZBRElOU0tJWTpVTktOT1dOOlJVLVZEIAorUlVTU0lBOlBFTlpFTlNLQe9BIE9CTEFTVDtOSVpITkVMT01PVlNLSVk6VU5LTk9XTjpSVS1OWjcKK1JVU1NJQTpTQU1BUlNLQe9BIChLT1XvQllDSEVWU0tBO1NISUdPTlNLSVk6VU5LTk9XTjpSVS1TSU4KK1JVU1NJQTpQRU5aRU5TS0HvQSBPQkxBU1Q7TU9LU0hBTlNLSVk6VU5LTk9XTjpSVS1NSzIKK1JVU1NJQTpTQU1BUlNLQe9BIChLT1XvQllDSEVWU0tBO0tJTkVMLUNIRVJLQVNTS0lZOlVOS05PV046UlUtS0VBCitSVVNTSUE6T1VMSUFOT1ZTS0HvQSBPQkxBU1Q7QkFSWVNIOlVOS05PV046UlUtQkEyCitSVVNTSUE6U0FNQVJTS0HvQSAoS09V70JZQ0hFVlNLQTtWT0xaSFNLSVk6VU5LTk9XTjpSVS1WWlMKK1JVU1NJQTpQRU5aRU5TS0HvQSBPQkxBU1Q7U09TTk9WT0JPUlNLSVk6VU5LTk9XTjpSVS1TU08KK1JVU1NJQTpQRU5aRU5TS0HvQSBPQkxBU1Q7QkVTU09OT1ZTS0lZOlVOS05PV046UlUtQlNWCitSVVNTSUE6UEVOWkVOU0tB70EgT0JMQVNUO0dPUk9ESVNDSEVOU0tJWTpVTktOT1dOOlJVLUdSOQorUlVTU0lBOlNBTUFSU0tB70EgKEtPVe9CWUNIRVZTS0E7VE9MWUFUVEk6VU5LTk9XTjpSVS1UTFQKK1JVU1NJQTpQRU5aRU5TS0HvQSBPQkxBU1Q7QkFTSE1BS09WU0tJWTpVTktOT1dOOlJVLUJTWQorUlVTU0lBOlBFTlpFTlNLQe9BIE9CTEFTVDtQQUNIRUxNU0tJWTpVTktOT1dOOlJVLVBDTQorUlVTU0lBOlNBTUFSU0tB70EgKEtPVe9CWUNIRVZTS0E7U1laUkFOU0tJWTpVTktOT1dOOlJVLVNZMworUlVTU0lBOlNBTUFSU0tB70EgKEtPVe9CWUNIRVZTS0E7S0lORUxTS0lZOlVOS05PV046UlUtS0UgCitSVVNTSUE6U0FNQVJTS0HvQSAoS09V70JZQ0hFVlNLQTtaSElHVUxZT1ZTS0lZOlVOS05PV046UlUtWkgzCitSVVNTSUE6UEVOWkVOU0tB70EgT0JMQVNUO0tVWk5FVFNLSVk6VU5LTk9XTjpSVS1LWjcKK1JVU1NJQTpQRU5aRU5TS0HvQSBPQkxBU1Q7S0FNRU5TS0lZOlVOS05PV046UlUtS0UxCitSVVNTSUE6U0FNQVJTS0HvQSAoS09V70JZQ0hFVlNLQTtPVFJBRE5ZSTpVTktOT1dOOlJVLU9URAorUlVTU0lBOk9VTElBTk9WU0tB70EgT0JMQVNUO05PVk9TUEFTU0tJWTpVTktOT1dOOlJVLU5PMworUlVTU0lBOk9VTElBTk9WU0tB70EgT0JMQVNUO05JS09MQVlFVlNLSVk6VU5LTk9XTjpSVS1OSzIKK1JVU1NJQTpTQU1BUlNLQe9BIChLT1XvQllDSEVWU0tBO0JPUlNLSVk6VU5LTk9XTjpSVS1CUyAKK1JVU1NJQTpTQU1BUlNLQe9BIChLT1XvQllDSEVWU0tBO1NBTUFSQTpVTktOT1dOOlJVLVNNQQorUlVTU0lBOlBFTlpFTlNLQe9BIE9CTEFTVDtQRU5aQTpVTktOT1dOOlJVLVBFWgorUlVTU0lBOlBFTlpFTlNLQe9BIE9CTEFTVDtQRU5aRU5TS0lZOlVOS05PV046UlUtUE4xCitSVVNTSUE6U0FNQVJTS0HvQSAoS09V70JZQ0hFVlNLQTtCT0dBVE9WU0tJWTpVTktOT1dOOlJVLUJHNAorUlVTU0lBOlNBTUFSU0tB70EgKEtPVe9CWUNIRVZTS0E7S0lORUw6VU5LTk9XTjpSVS1LSTkKK1JVU1NJQTpQRU5aRU5TS0HvQSBPQkxBU1Q7QkVMSU5TS0lZOlVOS05PV046UlUtQklZCitSVVNTSUE6UEVOWkVOU0tB70EgT0JMQVNUO0tBTUVOS0E6VU5LTk9XTjpSVS1LRTIKK1JVU1NJQTpTQU1BUlNLQe9BIChLT1XvQllDSEVWU0tBO09LVFlBQlJTSzpVTktOT1dOOlJVLU9LQgorUlVTU0lBOlNBTUFSU0tB70EgKEtPVe9CWUNIRVZTS0E7UFJJVk9MWkhTS0lZOlVOS05PV046UlUtUElaCitSVVNTSUE6U0FNQVJTS0HvQSAoS09V70JZQ0hFVlNLQTtCRVpFTkNIVUtTS0lZOlVOS05PV046UlUtQloxCitSVVNTSUE6U0FNQVJTS0HvQSAoS09V70JZQ0hFVlNLQTtTWVpSQU46VU5LTk9XTjpSVS1TWVIKK1JVU1NJQTpQRU5aRU5TS0HvQSBPQkxBU1Q7S1VaTkVUU0s6VU5LTk9XTjpSVS1LWjgKK1JVU1NJQTpTQU1BUlNLQe9BIChLT1XvQllDSEVWU0tBO05PVk9LVVlCWVNIRVZTSzpVTktOT1dOOlJVLU5PVgorUlVTU0lBOlBFTlpFTlNLQe9BIE9CTEFTVDtTSEVNWVNIRVlTS0lZOlVOS05PV046UlUtU0U2CitSVVNTSUE6T1VMSUFOT1ZTS0HvQSBPQkxBU1Q7UkFESVNDSEVWU0tJWTpVTktOT1dOOlJVLVJESQorUlVTU0lBOlBFTlpFTlNLQe9BIE9CTEFTVDtLQU1FU0hLSVJTS0lZOlVOS05PV046UlUtS0UzCitSVVNTSUE6U0FNQVJTS0HvQSAoS09V70JZQ0hFVlNLQTtORUZURUdPUlNLSVk6VU5LTk9XTjpSVS1ORlIKK1JVU1NJQTpTQU1BUlNLQe9BIChLT1XvQllDSEVWU0tBO0NIQVBBWUVWU0s6VU5LTk9XTjpSVS1DQUUKK1JVU1NJQTpQRU5aRU5TS0HvQSBPQkxBU1Q7TkVWRVJLSU5TS0lZOlVOS05PV046UlUtTkVOCitSVVNTSUE6T1VMSUFOT1ZTS0HvQSBPQkxBU1Q7U1RBUk9LVUxBVEtJTlNLSVk6VU5LTk9XTjpSVS1TVDgKK1JVU1NJQTpTQU1BUlNLQe9BIChLT1XvQllDSEVWU0tBO0tSQVNOT0FSTUVZU0tJWTpVTktOT1dOOlJVLUtPRQorUlVTU0lBOlBFTlpFTlNLQe9BIE9CTEFTVDtLT0xZU0hMRVlTS0lZOlVOS05PV046UlUtSzMKK1JVU1NJQTpQRU5aRU5TS0HvQSBPQkxBU1Q7S09ORE9MU0tJWTpVTktOT1dOOlJVLUtOTAorUlVTU0lBOlNBTUFSU0tB70EgKEtPVe9CWUNIRVZTS0E7QUxFS1NFWUVWU0tJWTpVTktOT1dOOlJVLUFFSworUlVTU0lBOlNBTUFSU0tB70EgKEtPVe9CWUNIRVZTS0E7S0hWT1JPU1RZQU5TS0lZOlVOS05PV046UlUtS0hBCitSVVNTSUE6T1VMSUFOT1ZTS0HvQSBPQkxBU1Q7UEFWTE9WU0tJWTpVTktOT1dOOlJVLVBWNAorUlVTU0lBOlBFTlpFTlNLQe9BIE9CTEFTVDtTRVJET0JTS0lZOlVOS05PV046UlUtU1JCCitSVVNTSUE6UEVOWkVOU0tB70EgT0JMQVNUO1RBTUFMSU5TS0lZOlVOS05PV046UlUtVE0zCitSVVNTSUE6UEVOWkVOU0tB70EgT0JMQVNUO0xPUEFUSU5POlVOS05PV046UlUtTFBJCitSVVNTSUE6U0FSQVRPVlNLQe9BIE9CTEFTVDtLSFZBTFlOU0tJWTpVTktOT1dOOlJVLUtWMworUlVTU0lBOlBFTlpFTlNLQe9BIE9CTEFTVDtCRUtPVlNLSVk6VU5LTk9XTjpSVS1CSyAKK1JVU1NJQTpTQVJBVE9WU0tB70EgT0JMQVNUO0RVS0hPVk5JVFNLSVk6VU5LTk9XTjpSVS1ES1QKK1JVU1NJQTpTQU1BUlNLQe9BIChLT1XvQllDSEVWU0tBO0JPTFNIRUdMVVNISVRTS0lZOlVOS05PV046UlUtQlNICitSVVNTSUE6U0FSQVRPVlNLQe9BIE9CTEFTVDtCQUxUQVlTS0lZOlVOS05PV046UlUtQlQxCitSVVNTSUE6U0FNQVJTS0HvQSAoS09V70JZQ0hFVlNLQTtQRVNUUkFWU0tJWTpVTktOT1dOOlJVLVBTNAorUlVTU0lBOlBFTlpFTlNLQe9BIE9CTEFTVDtNQUxPU0VSRE9CSU5TS0lZOlVOS05PV046UlUtTUw0CitSVVNTSUE6U0FSQVRPVlNLQe9BIE9CTEFTVDtCQVpBUk5PLUtBUkFCVUxBS1NLSVk6VU5LTk9XTjpSVS1CWkIKK1JVU1NJQTpTQVJBVE9WU0tB70EgT0JMQVNUO1ZPTFNLSVk6VU5LTk9XTjpSVS1WUyAKK1JVU1NJQTpTQVJBVE9WU0tB70EgT0JMQVNUO1lFS0FURVJJTk9WU0tJWTpVTktOT1dOOlJVLVlLTworUlVTU0lBOlNBUkFUT1ZTS0HvQSBPQkxBU1Q7SVZBTlRFWUVWU0tJWTpVTktOT1dOOlJVLUlWSQorUlVTU0lBOlNBUkFUT1ZTS0HvQSBPQkxBU1Q7S0hWQUxZTlNLOlVOS05PV046UlUtS1Y0CitSVVNTSUE6U0FSQVRPVlNLQe9BIE9CTEFTVDtQRVRST1ZTS0lZOlVOS05PV046UlUtUFQzCitSVVNTSUE6UEVOWkVOU0tB70EgT0JMQVNUO1NFUkRPQlNLOlVOS05PV046UlUtU0RCCitSVVNTSUE6U0FSQVRPVlNLQe9BIE9CTEFTVDtSVElTQ0hFVlNLSVk6VU5LTk9XTjpSVS1SVFYKK1JVU1NJQTpTQVJBVE9WU0tB70EgT0JMQVNUO05PVk9CVVJBU1NLSVk6VU5LTk9XTjpSVS1OTzQKK1JVU1NJQTpTQVJBVE9WU0tB70EgT0JMQVNUO1BVR0FDSFlPVlNLSVk6VU5LTk9XTjpSVS1QR1YKK1JVU1NJQTpTQU1BUlNLQe9BIChLT1XvQllDSEVWU0tBO0JPTFNIRUNIRVJOSUdPVlNLSVk6VU5LTk9XTjpSVS1CU04KK1JVU1NJQTpTQVJBVE9WU0tB70EgT0JMQVNUO1BFVFJPVlNLOlVOS05PV046UlUtUFQ0CitSVVNTSUE6U0FSQVRPVlNLQe9BIE9CTEFTVDtUVVJLT1ZTS0lZOlVOS05PV046UlUtVEsgCitSVVNTSUE6U0FSQVRPVlNLQe9BIE9CTEFTVDtSVElTSENIRVZPOlVOS05PV046UlUtUlRDCitSVVNTSUE6U0FSQVRPVlNLQe9BIE9CTEFTVDtBVEtBUlNLSVk6VU5LTk9XTjpSVS1BVFkKK1JVU1NJQTpTQVJBVE9WU0tB70EgT0JMQVNUO0JBTEFLT1ZTS0lZOlVOS05PV046UlUtQkEzCitSVVNTSUE6U0FSQVRPVlNLQe9BIE9CTEFTVDtQRVJFTFlVQlNLSVk6VU5LTk9XTjpSVS1QUkIKK1JVU1NJQTpTQVJBVE9WU0tB70EgT0JMQVNUO0FSS0FEQUtTS0lZOlVOS05PV046UlUtQUsyCitSVVNTSUE6U0FSQVRPVlNLQe9BIE9CTEFTVDtWT1NLUkVTRU5TS0lZOlVOS05PV046UlUtVlMxCitSVVNTSUE6U0FSQVRPVlNLQe9BIE9CTEFTVDtWT0xTSzpVTktOT1dOOlJVLVZPUworUlVTU0lBOlNBUkFUT1ZTS0HvQSBPQkxBU1Q7QkFMQUtPVk86VU5LTk9XTjpSVS1CQU8KK1JVU1NJQTpTQVJBVE9WU0tB70EgT0JMQVNUO1RBVElTQ0hFVlNLSVk6VU5LTk9XTjpSVS1UVDEKK1JVU1NJQTpTQVJBVE9WU0tB70EgT0JMQVNUO1BVR0FDSEVWOlVOS05PV046UlUtUEdICitSVVNTSUE6U0FSQVRPVlNLQe9BIE9CTEFTVDtST01BTk9WU0tJWTpVTktOT1dOOlJVLVJNMQorUlVTU0lBOlNBUkFUT1ZTS0HvQSBPQkxBU1Q7TUFSS1NPVlNLSVk6VU5LTk9XTjpSVS1NUjkKK1JVU1NJQTpTQVJBVE9WU0tB70EgT0JMQVNUO0tSQVNOT1BBUlRJWkFOU0tJWTpVTktOT1dOOlJVLUtTWgorUlVTU0lBOlNBUkFUT1ZTS0HvQSBPQkxBU1Q7QVRLQVJTSzpVTktOT1dOOlJVLUFUUgorUlVTU0lBOlNBUkFUT1ZTS0HvQSBPQkxBU1Q7U0FSQVRPVlNLSVk6VU5LTk9XTjpSVS1TVDkKK1JVU1NJQTpTQVJBVE9WU0tB70EgT0JMQVNUO0JBTEFTSE9WU0tJWTpVTktOT1dOOlJVLUJBNAorUlVTU0lBOlNBUkFUT1ZTS0HvQSBPQkxBU1Q7WUVSU0hPVlNLSVk6VU5LTk9XTjpSVS1ZUjgKK1JVU1NJQTpTQVJBVE9WU0tB70EgT0JMQVNUO0tBTElOSU5TS0lZOlVOS05PV046UlUtSzQKK1JVU1NJQTpTQVJBVE9WU0tB70EgT0JMQVNUO01BUlg6VU5LTk9XTjpSVS1NQVIKK1JVU1NJQTpTQVJBVE9WU0tB70EgT0JMQVNUO09aSU5TS0lZOlVOS05PV046UlUtT1pLCitSVVNTSUE6U0FSQVRPVlNLQe9BIE9CTEFTVDtMWVNPR09SU0tJWTpVTktOT1dOOlJVLUxZMQorUlVTU0lBOlNBUkFUT1ZTS0HvQSBPQkxBU1Q7U0FSQVRPVjpVTktOT1dOOlJVLVNBVAorUlVTU0lBOlNBUkFUT1ZTS0HvQSBPQkxBU1Q7RU5HRUxTS0lZOlVOS05PV046UlUtRU5TCitSVVNTSUE6U0FSQVRPVlNLQe9BIE9CTEFTVDtERVJHQUNIWU9WU0tJWTpVTktOT1dOOlJVLURSWQorUlVTU0lBOlNBUkFUT1ZTS0HvQSBPQkxBU1Q7QkFMQVNIT1Y6VU5LTk9XTjpSVS1CQTUKK1JVU1NJQTpTQVJBVE9WU0tB70EgT0JMQVNUO0ZFRE9ST1ZTS0lZOlVOS05PV046UlUtRkRWCitSVVNTSUE6U0FSQVRPVlNLQe9BIE9CTEFTVDtTT1ZFVFNLSVk6VU5LTk9XTjpSVS1TRTcKK1JVU1NJQTpTQVJBVE9WU0tB70EgT0JMQVNUO0VOR0VMUzpVTktOT1dOOlJVLUVOTAorUlVTU0lBOlNBUkFUT1ZTS0HvQSBPQkxBU1Q7U0FNT1lMT1ZTS0lZOlVOS05PV046UlUtU00gCitSVVNTSUE6U0FSQVRPVlNLQe9BIE9CTEFTVDtLUkFTTk9BUk1FWVNLSVk6VU5LTk9XTjpSVS1LTzYKK1JVU1NJQTpWT0xHT0dSQURTS0HvQSBPQkxBU1Q7Tk9WT05JS09MQVlFVlNLSVk6VU5LTk9XTjpSVS1OTzUKK1JVU1NJQTpTQVJBVE9WU0tB70EgT0JMQVNUO0tSQVNOT0tVVFNLSVk6VU5LTk9XTjpSVS1LTlQKK1JVU1NJQTpWT0xHT0dSQURTS0HvQSBPQkxBU1Q7WUVMQU5TS0lZOlVOS05PV046UlUtWUwyCitSVVNTSUE6Vk9MR09HUkFEU0tB70EgT0JMQVNUO1VSWVVQSU5TS0lZOlVOS05PV046UlUtVVIyCitSVVNTSUE6U0FSQVRPVlNLQe9BIE9CTEFTVDtST1ZFTlNLSVk6VU5LTk9XTjpSVS1SVksKK1JVU1NJQTpWT0xHT0dSQURTS0HvQSBPQkxBU1Q7WkhJUk5PVlNLSVk6VU5LTk9XTjpSVS1aSDQKK1JVU1NJQTpWT0xHT0dSQURTS0HvQSBPQkxBU1Q7S0lLVklEWkVOU0tJWTpVTktOT1dOOlJVLUtLWQorUlVTU0lBOlZPTEdPR1JBRFNLQe9BIE9CTEFTVDtSVUROWUFOU0tJWTpVTktOT1dOOlJVLVJEWQorUlVTU0lBOlNBUkFUT1ZTS0HvQSBPQkxBU1Q7S1JBU05PQVJNRVlTSzpVTktOT1dOOlJVLUtPNworUlVTU0lBOlNBUkFUT1ZTS0HvQSBPQkxBU1Q7UElURVJTS0lZOlVOS05PV046UlUtUFQ1CitSVVNTSUE6U0FSQVRPVlNLQe9BIE9CTEFTVDtOT1ZPVVpFTlNLSVk6VU5LTk9XTjpSVS1OTzYKK1JVU1NJQTpWT0xHT0dSQURTS0HvQSBPQkxBU1Q7Tk9WT0FOTklOU0tJWTpVTktOT1dOOlJVLU5PNworUlVTU0lBOlZPTEdPR1JBRFNLQe9BIE9CTEFTVDtVUlVQSU5TSzpVTktOT1dOOlJVLVVSMworUlVTU0lBOlZPTEdPR1JBRFNLQe9BIE9CTEFTVDtEQU5JTE9WU0tJWTpVTktOT1dOOlJVLUROIAorUlVTU0lBOlZPTEdPR1JBRFNLQe9BIE9CTEFTVDtTVEFST1BPTFRBVlNLSVk6VU5LTk9XTjpSVS1TUkEKK1JVU1NJQTpWT0xHT0dSQURTS0HvQSBPQkxBU1Q7S0FNWVNISU5TS0lZOlVOS05PV046UlUtSzUKK1JVU1NJQTpWT0xHT0dSQURTS0HvQSBPQkxBU1Q7S09UT1ZTS0lZOlVOS05PV046UlUtS1Q0CitSVVNTSUE6Vk9MR09HUkFEU0tB70EgT0JMQVNUO05FS0hBWUVWU0tJWTpVTktOT1dOOlJVLU5LMworUlVTU0lBOlZPTEdPR1JBRFNLQe9BIE9CTEFTVDtNSUtIQVlMT1ZTS0lZOlVOS05PV046UlUtTUszCitSVVNTSUE6U0FSQVRPVlNLQe9BIE9CTEFTVDtBTEVLU0FORFJPVi1HQVlTS0lZOlVOS05PV046UlUtQUxHCitSVVNTSUE6Vk9MR09HUkFEU0tB70EgT0JMQVNUO0FMRUtTRVlFVlNLSVk6VU5LTk9XTjpSVS1BRUkKK1JVU1NJQTpWT0xHT0dSQURTS0HvQSBPQkxBU1Q7UEFMTEFTT1ZTS0lZOlVOS05PV046UlUtUEwzCitSVVNTSUE6Vk9MR09HUkFEU0tB70EgT0JMQVNUO05JS09MQVlFVlNLSVk6VU5LTk9XTjpSVS1OSzQKK1JVU1NJQTpWT0xHT0dSQURTS0HvQSBPQkxBU1Q7RlJPTE9WU0tJWTpVTktOT1dOOlJVLUZSSQorUlVTU0lBOlZPTEdPR1JBRFNLQe9BIE9CTEFTVDtPTEtIT1ZTS0lZOlVOS05PV046UlUtT0xWCitSVVNTSUE6Vk9MR09HUkFEU0tB70EgT0JMQVNUO0tBTVlTSElOOlVOS05PV046UlUtSzYKK1JVU1NJQTpWT0xHT0dSQURTS0HvQSBPQkxBU1Q7TUlLSEFJTE9WS0E6VU5LTk9XTjpSVS1NS0wKK1JVU1NJQTpWT0xHT0dSQURTS0HvQSBPQkxBU1Q7UE9EVEVMS09WU0tJWTpVTktOT1dOOlJVLVBESworUlVTU0lBOlZPTEdPR1JBRFNLQe9BIE9CTEFTVDtCWUtPVlNLSVk6VU5LTk9XTjpSVS1CWTYKK1JVU1NJQTpWT0xHT0dSQURTS0HvQSBPQkxBU1Q7U0VSQUZJTU9WSUNIU0tJWTpVTktOT1dOOlJVLVNSQworUlVTU0lBOlZPTEdPR1JBRFNLQe9BIE9CTEFTVDtGUk9MT1ZPOlVOS05PV046UlUtRlJPCitSVVNTSUE6Vk9MR09HUkFEU0tB70EgT0JMQVNUO0RVQk9WU0tJWTpVTktOT1dOOlJVLURCMgorUlVTU0lBOlZPTEdPR1JBRFNLQe9BIE9CTEFTVDtJTE9WTElOU0tJWTpVTktOT1dOOlJVLUlMMQorUlVTU0lBOlZPTEdPR1JBRFNLQe9BIE9CTEFTVDtLTEVUU0tJWTpVTktOT1dOOlJVLUtFNAorUlVTU0lBOlZPTEdPR1JBRFNLQe9BIE9CTEFTVDtMRU5JTlNLSVk6VU5LTk9XTjpSVS1MTjMKK1JVU1NJQTpWT0xHT0dSQURTS0HvQSBPQkxBU1Q7S0FMQUNIRVZTS0lZOlVOS05PV046UlUtS0MzCitSVVNTSUE6Vk9MR09HUkFEU0tB70EgT0JMQVNUO0dPUk9ESVNDSEVOU0tJWTpVTktOT1dOOlJVLUdPSAorUlVTU0lBOlZPTEdPR1JBRFNLQe9BIE9CTEFTVDtTUkVETkVBS0hUVUJJTlNLSVk6VU5LTk9XTjpSVS1TRVQKK1JVU1NJQTpWT0xHT0dSQURTS0HvQSBPQkxBU1Q7U1VST1ZJS0lOU0tJWTpVTktOT1dOOlJVLVNPTgorUlVTU0lBOlZPTEdPR1JBRFNLQe9BIE9CTEFTVDtWT0xHT0dSQUQ6VU5LTk9XTjpSVS1WR0cKK1JVU1NJQTpWT0xHT0dSQURTS0HvQSBPQkxBU1Q7Vk9MWkhTS0lZOlVOS05PV046UlUtVlpLCitSVVNTSUE6QVNUUkFLSEFOU0tB70EgT0JMQVNUO0FLSFRVQklOU0tJWTpVTktOT1dOOlJVLUFLMworUlVTU0lBOlZPTEdPR1JBRFNLQe9BIE9CTEFTVDtTVkVUTE9ZQVJTS0lZOlVOS05PV046UlUtU0U4CitSVVNTSUE6QVNUUkFLSEFOU0tB70EgT0JMQVNUO0NIWU9STk9ZQVJTS0lZOlVOS05PV046UlUtQ1lZCitSVVNTSUE6Vk9MR09HUkFEU0tB70EgT0JMQVNUO0NIRVJOWVNIS09WU0tJWTpVTktOT1dOOlJVLUNFMworUlVTU0lBOktBTE1ZS0lBO01BTE9ERVJCRVRPVlNLSVk6VU5LTk9XTjpSVS1NTFQKK1JVU1NJQTpWT0xHT0dSQURTS0HvQSBPQkxBU1Q7T0tUWUFCUlNLSVk6VU5LTk9XTjpSVS1PVFMKK1JVU1NJQTpBU1RSQUtIQU5TS0HvQSBPQkxBU1Q7QUtIVFVCSU5TSzpVTktOT1dOOlJVLUFLQgorUlVTU0lBOktBTE1ZS0lBO09LVFlBQlJTS0lZOlVOS05PV046UlUtT1RLCitSVVNTSUE6Vk9MR09HUkFEU0tB70EgT0JMQVNUO0tPVEVMTklLT1ZTS0lZOlVOS05PV046UlUtS1Q1CitSVVNTSUE6QVNUUkFLSEFOU0tB70EgT0JMQVNUO1lFTk9UQVlFVlNLSVk6VU5LTk9XTjpSVS1ZTlMKK1JVU1NJQTpLQUxNWUtJQTtTQVJQSU5TS0lZOlVOS05PV046UlUtU1BOCitSVVNTSUE6QVNUUkFLSEFOU0tB70EgT0JMQVNUO0tIQVJBQkFMSU5TS0lZOlVOS05PV046UlUtS0JMCitSVVNTSUE6S0FMTVlLSUE7WVVTVElOU0tJWTpVTktOT1dOOlJVLVlTIAorUlVTU0lBOktBTE1ZS0lBO0tFVENIRU5FUk9WU0tJWTpVTktOT1dOOlJVLUtUUgorUlVTU0lBOkFTVFJBS0hBTlNLQe9BIE9CTEFTVDtLUkFTTk9ZQVJTS0lZOlVOS05PV046UlUtS084CitSVVNTSUE6S0FMTVlLSUE7WUFTSEtVTFNLSVk6VU5LTk9XTjpSVS1ZU0wKK1JVU1NJQTpLQUxNWUtJQTtUU0VMSU5OWUk6VU5LTk9XTjpSVS1UUzgKK1JVU1NJQTpBU1RSQUtIQU5TS0HvQSBPQkxBU1Q7TkFSSU1BTk9WU0tJWTpVTktOT1dOOlJVLU5SIAorUlVTU0lBOktBTE1ZS0lBO1lBU0hBTFRJTlNLSVk6VU5LTk9XTjpSVS1ZUzEKK1JVU1NJQTpBU1RSQUtIQU5TS0HvQSBPQkxBU1Q7Vk9MT0RBUlNLSVk6VU5LTk9XTjpSVS1WT1IKK1JVU1NJQTpBU1RSQUtIQU5TS0HvQSBPQkxBU1Q7UFJJVk9MWkhTS0lZOlVOS05PV046UlUtUElICitSVVNTSUE6S0FMTVlLSUE7UFJJWVVUSU5TS0lZOlVOS05PV046UlUtUElJCitSVVNTSUE6QVNUUkFLSEFOU0tB70EgT0JMQVNUO0FTVFJBS0hBTjpVTktOT1dOOlJVLUFTQQorUlVTU0lBOktBTE1ZS0lBO0VMSVNUQTpVTktOT1dOOlJVLUVMQQorUlVTU0lBOktBTE1ZS0lBO0NIRVJOT1pFTUVMU0tJWTpVTktOT1dOOlJVLUNFNAorUlVTU0lBOktBTE1ZS0lBO0dPUk9ET1ZJS09WU0tJWTpVTktOT1dOOlJVLUdPSworUlVTU0lBOkFTVFJBS0hBTlNLQe9BIE9CTEFTVDtJS1JZQU5JTlNLSVk6VU5LTk9XTjpSVS1JS04KK1JVU1NJQTpLQUxNWUtJQTtJS0ktQlVSVUxTS0lZOlVOS05PV046UlUtSUtMCitSVVNTSUE6QVNUUkFLSEFOU0tB70EgT0JMQVNUO0tBTVlaWUFLU0tJWTpVTktOT1dOOlJVLUtaOQorUlVTU0lBOkFTVFJBS0hBTlNLQe9BIE9CTEFTVDtMSU1BTlNLSVk6VU5LTk9XTjpSVS1MTVMKK1JVU1NJQTpLQUxNWUtJQTtLQVNQSVlTS0lZOlVOS05PV046UlUtS1AgCitSVVNTSUE6S0FMSU5JTkdSQURTS0HvQSBPQkxBU1Q7R1ZBUkRFWVNLSVk6VU5LTk9XTjpSVS1HVlMKK1JVU1NJQTpLQUxJTklOR1JBRFNLQe9BIE9CTEFTVDtHVVJZRVZTS0lZOlVOS05PV046UlUtR1lWCitSVVNTSUE6S0FMSU5JTkdSQURTS0HvQSBPQkxBU1Q7S0FMSU5JTkdSQUQ6VU5LTk9XTjpSVS1LR0QKK1JVU1NJQTpLQUxJTklOR1JBRFNLQe9BIE9CTEFTVDtORVNURVJPVlNLSVk6VU5LTk9XTjpSVS1OU1YKK1JVU1NJQTpLQUxJTklOR1JBRFNLQe9BIE9CTEFTVDtDSEVSTllBS0hPVlNLOlVOS05PV046UlUtQ0U1CitSVVNTSUE6S0FMSU5JTkdSQURTS0HvQSBPQkxBU1Q7R1VTRVY6VU5LTk9XTjpSVS1HVSAKK1JVU1NJQTpLQUxJTklOR1JBRFNLQe9BIE9CTEFTVDtQUkFWRElOU0tJWTpVTktOT1dOOlJVLVBBTgorUlVTU0lBOktBTElOSU5HUkFEU0tB70EgT0JMQVNUO09aRVJTS0lZOlVOS05PV046UlUtT1pJCitSVVNTSUE6S0FMSU5JTkdSQURTS0HvQSBPQkxBU1Q7U0xBVlNLSVk6VU5LTk9XTjpSVS1TMQorUlVTU0lBOktBTElOSU5HUkFEU0tB70EgT0JMQVNUO1pFTEVOT0dSQURTS0lZOlVOS05PV046UlUtWkxBCitSVVNTSUE6S0FMSU5JTkdSQURTS0HvQSBPQkxBU1Q7U09WRVRTSzpVTktOT1dOOlJVLVNWVAorUlVTU0lBOktBTElOSU5HUkFEU0tB70EgT0JMQVNUO05FTUFOU0tJWTpVTktOT1dOOlJVLU5NUworUlVTU0lBOktBTElOSU5HUkFEU0tB70EgT0JMQVNUO0tSQVpOT1pOQU1FTlNLSVk6VU5LTk9XTjpSVS1LWkUKK1JVU1NJQTpLQUxJTklOR1JBRFNLQe9BIE9CTEFTVDtORU1BTjpVTktOT1dOOlJVLU5FIAorUlVTU0lBOktBTElOSU5HUkFEU0tB70EgT0JMQVNUO1BPTEVTU0tJWTpVTktOT1dOOlJVLVBMNAorUlVTU0lBOktBTElOSU5HUkFEU0tB70EgT0JMQVNUO1NWRVRMT0dPUlNLOlVOS05PV046UlUtU0VHCitSVVNTSUE6S0FMSU5JTkdSQURTS0HvQSBPQkxBU1Q7Q0hFUk5ZQUtIT1ZTS0lZOlVOS05PV046UlUtQ0U2CitSVVNTSUE6S0FMSU5JTkdSQURTS0HvQSBPQkxBU1Q7R1VTRVZTS0lZOlVOS05PV046UlUtR1NLCitSVVNTSUE6S0FMSU5JTkdSQURTS0HvQSBPQkxBU1Q7U1ZFVExZSTpVTktOT1dOOlJVLVNFOQorUlVTU0lBOktBTElOSU5HUkFEU0tB70EgT0JMQVNUO0JBTFRJWVNLOlVOS05PV046UlUtQlQyCitSVVNTSUE6S0FMSU5JTkdSQURTS0HvQSBPQkxBU1Q7QkFHUkFUSU9OT1ZTS0lZOlVOS05PV046UlUtQkdPCitTQU4gTUFSSU5POlNBTiBNQVJJTk86VU5LTk9XTjpTTS1NCitTTE9WRU5JQTpTTE9WRU5JSkE6VU5LTk9XTjpTSS0wMQorU1dFREVOOk5PUlJCT1RURU46VU5LTk9XTjpTRS1CRAorU1dFREVOOlaEU1RFUkJPVFRFTjpVTktOT1dOOlNFLUFDCitTV0VERU46SoRNVExBTkQ6VU5LTk9XTjpTRS1aCitTV0VERU46VoRTVEVSTk9SUkxBTkQ6VU5LTk9XTjpTRS1ZCitTV0VERU46R4RWTEVCT1JHOlVOS05PV046U0UtWAorU1dFREVOOktPUFBBUkJFUkc6VU5LTk9XTjpTRS1LUAorU1dFREVOOlaEUk1MQU5EOlVOS05PV046U0UtUworU1dFREVOOlVQUFNBTEE6VU5LTk9XTjpTRS1DCitTV0VERU46ViBTVE1BTkxBTkQ6VU5LTk9XTjpTRS1VCitTV0VERU46U1RPQ0tIT0xNOlVOS05PV046U0UtQUIKK1NXRURFTjpPUkVCUk86VU5LTk9XTjpTRS1UCitTV0VERU46U5RSTUxBTkQ6VU5LTk9XTjpTRS1ECitTV0VERU46WkxWU0JPUkc6VU5LTk9XTjpTRS1MCitTV0VERU46QpRIVVM6VU5LTk9XTjpTRS1CSAorU1dFREVOOlNLQVJBQk9SRzpVTktOT1dOOlNFLVNLCitTV0VERU46T1NURVJHlFRMQU5EOlVOS05PV046U0UtU1QKK1NXRURFTjpHT1RMQU5EOlVOS05PV046U0UtSQorU1dFREVOOkqUTkuUUElORzpVTktOT1dOOlNFLUYKK1NXRURFTjpLQUxNQVI6VU5LTk9XTjpTRS1ICitTV0VERU46SEFMTEFORDpVTktOT1dOOlNFLU4KK1NXRURFTjpLUk9OT0JFUkc6VU5LTk9XTjpTRS1HCitTV0VERU46S1JJU1RJQU5TVEFEOlVOS05PV046U0UtUkkKK1NXRURFTjpCTEVLSU5HRTpVTktOT1dOOlNFLUsKK1NXRURFTjpNQUxNlEhVUzpVTktOT1dOOlNFLU1PCitVTklURUQgS0lOR0RPTTpEVU1GUklFUy1HQUxMTzpVTktOT1dOOkdCLURHWQorVU5JVEVEIEtJTkdET006Tk9SVEhFUk4gSVJFTEFORDpVTktOT1dOOkdCLU5JUgorVU5JVEVEIEtJTkdET006Q0xFVkVMQU5EOlVOS05PV046R0ItQ0xWCitVTklURUQgS0lOR0RPTTpVTklURUQgS0lOR0RPTTpVTktOT1dOOkdCLVVLCitVTklURUQgS0lOR0RPTTpIVU1CRVJTSURFOlVOS05PV046R0ItSFVNCitVTklURUQgS0lOR0RPTTpXRVNUIFlPUktTSElSRTpVTktOT1dOOkdCLVdZTworVU5JVEVEIEtJTkdET006TUVSU0VZU0lERTpVTktOT1dOOkdCLU1FUgorVU5JVEVEIEtJTkdET006R1JFQVRFUiBNQU5DSEVTVEVSOlVOS05PV046R0ItTUFOCitVTklURUQgS0lOR0RPTTpTT1VUSCBZT1JLU0hJUkU6VU5LTk9XTjpHQi1TWU8KK1VOSVRFRCBLSU5HRE9NOkNMV1lEOlVOS05PV046R0ItQ0xXCitVTklURUQgS0lOR0RPTTpFQVNUIEFOR0xJQTpVTktOT1dOOkdCLUVBRworVU5JVEVEIEtJTkdET006SEVSRUZPUkQ6VU5LTk9XTjpHQi1IRUYKK1VOSVRFRCBLSU5HRE9NOldFU1QgTUlETEFORFM6VU5LTk9XTjpHQi1XTUQKK1VOSVRFRCBLSU5HRE9NOkJFUktTOlVOS05PV046R0ItQkVSCitVTklURUQgS0lOR0RPTTpBVk9OOlVOS05PV046R0ItQVZPCitVTklURUQgS0lOR0RPTTpHV0VOVDpVTktOT1dOOkdCLUdXVAorVU5JVEVEIEtJTkdET006R1JFQVRFUiBMT05ET046VU5LTk9XTjpHQi1MTkQKK1VOSVRFRCBLSU5HRE9NOkdSQU1QSUFOOlVOS05PV046R0ItR1JBCitVTklURUQgS0lOR0RPTTpCT1JELUNFTlRSLUZJRkUtTE9USElBTi1UQVk6VU5LTk9XTjpHQi1CQ0YKK1VOSVRFRCBLSU5HRE9NOkhJR0hMQU5EUzpVTktOT1dOOkdCLUhHTAorVU5JVEVEIEtJTkdET006V0VTVCBNSURMQU5EUyAoQ09VTlRZKTpVTktOT1dOOkdCLVdNSQorQk9TTklBIEFORCBIRVJaRUdPVklOQTpCT1NOQSBJIEhFUkNFR09WSU5BOlVOS05PV046QkEtQklICitZVUdPU0xBVklBOlZvanZvZGluYTpVTktOT1dOOllVLVZPSgorWVVHT1NMQVZJQTpTcmJpamE6VU5LTk9XTjpZVS1TUkIKK1lVR09TTEFWSUE6Q3JuYSBHb3JhOlVOS05PV046WVUtQ0dPCitZVUdPU0xBVklBOktvc292bzpVTktOT1dOOllVLUtPUworWVVHT1NMQVZJQTpNYWtlZG9uaWphOlVOS05PV046WVUtTUtECitBemVyYmFpamFuOkF6ZXJiYXlkemhhbiBUZXJyaXRvcjpVTktOT1dOOkFaLUFURQorQXplcmJhaWphbjpOYWdvcm5vLUthcmFiYWtoOlVOS05PV046QVotTktBCitBemVyYmFpamFuOk5ha2hpY2hldmFuOlVOS05PV046QVotTkFLCitLYXpha2hzdGFuOkFrdHl1Ymluc2s6VU5LTk9XOktaLUFLVAorS2F6YWtoc3RhbjpBbG1hLUF0YTpVTktOT1dOOktaLUFMTQorS2F6YWtoc3RhbjpBcmFsIFNlYTpVTktOT1dOOktaLUFSUworS2F6YWtoc3RhbjpDaGlta2VudDpVTktOT1dOOktaLUNISQorS2F6YWtoc3RhbjpEemhhbWJ1bDpVTktOT1dOOktaLURaQQorS2F6YWtoc3RhbjpEemhlemthemdhbjpVTktOT1dOOktaLURaRQorS2F6YWtoc3RhbjpFYXN0IEthemFraHN0YW46VU5LTk9XTjpLWi1FQUsKK0themFraHN0YW46R3VyeWV2OlVOS05PV046S1otR1VSCitLYXpha2hzdGFuOkthcmFnYW5kYTpVTktOT1dOOktaLUtBUgorS2F6YWtoc3RhbjpLb2NoZXRhdjpVTktOT1dOOktaLUtPQworS2F6YWtoc3RhbjpLdXN0YW5heTpVTktOT1dOOktaLUtVUworS2F6YWtoc3RhbjpLenlsLU9yZGE6VU5LTk9XTjpLWi1LWk8KK0themFraHN0YW46Tm9ydGggS2F6YWtoc3RhbjpVTktOT1dOOktaLU5PSworS2F6YWtoc3RhbjpQYXZsb2RhcjpVTktOT1dOOktaLVBBVgorS2F6YWtoc3RhbjpTZW1pcGFsYXRpbnNrOlVOS05PV046S1otU0VNCitLYXpha2hzdGFuOlRhbGR5IEt1cmdhbjpVTktOT1dOOktaLVRBSworS2F6YWtoc3RhbjpUc2VsaW5vZ3JhZDpVTktOT1dOOktaLVRTRQorS2F6YWtoc3RhbjpVcmFsc2s6VU5LTk9XTjpLWi1VUkEKK0t5cmd5enN0YW46SXNzeWstS3VsOlVOS05PV046S0ctSVNLCitLeXJneXpzdGFuOktpcmdoaXppc3RhbiBUZXJyaXRvcmllczpVTktOT1dOOktHLUtJVAorTUs6TUFLRURPTklKQTpVTktOT1dOOk1LLU0KK01BQ0VET05JQTpNQUtFRE9OSUpBOlVOS05PV046TUstTQorTU9MRE9WSUE6TU9MREFWSUE6VU5LTk9XTjpNRC1NCitQYWtpc3RhbjpGLkMuVC46VU5LTk9XTjpQSy1GQworVGFqaWtpc3RhbjpMZW5pbmFiYWQ6VU5LTk9XTjpUSi1MRQorVGFqaWtpc3RhbjpUYWR6aGlraXN0YW4gVGVycml0b3JpZXM6VU5LTk9XTjpUSi1UQQorVHVya2V5OksuIE1hcmFzOlVOS05PV046VFItS01BCitUdXJrbWVuaXN0YW46Q2hhcmR6aG91OlVOS05PV046VE0tQ0hBCitUdXJrbWVuaXN0YW46VGFzaGF1ejpVTktOT1dOOlRNLVRBUworVHVya21lbmlzdGFuOlR1cmttZW5pc3RhbiBUZXJyaXRvcmllczpVTktOT1dOOlRNLVRUCitVemJla2lzdGFuOkFyYWwgU2VhOlVOS05PV046VVotQVMKK0FsZ2VyaWE6QWRyYXI6QWRyYXIxOkRaLTAKK0FsZ2VyaWE6QWluIERhZmxhOkFpbiBEZWZsYTpEWi00NAorQWxnZXJpYTpBaW4gVGFtb3VjaGVudDpBaW4gdGVtb3VjaGVudDpEWi00NgorQWxnZXJpYTpCb3JqYm91YXJpcmVqOkJvcmRqIEJvdSBBcnJlcmlkajpEWi0zNAorQWxnZXJpYTpHaGFyZGFTYTpHaGFyZGFpYTpEWi00NworQWxnZXJpYTpNZWRpYTpNZWRlYTpEWi0yNgorQWxnZXJpYTpNb3N0YWdoYW5lbTpNb3N0YWdhbmVtOkRaLTI3CitBbGdlcmlhOlRhbWFucmFzc2V0OlRhbWFuZ2hhc3NldDpEWi1UQU0KK0FsZ2VyaWE6VGVuZG91ZjpUaW5kb3VmOkRaLTM3CitBbmdvbGE6TWFsYW5qZTpNYWxhbmdlOkFPLU1BTAorQW5nb2xhOlVpZ2U6VWdlOkFPLVVJRworQW5nb2xhOkh1aWxhOkh1bGE6QU8tSFVJCitCdXJ1bmRpOk11cmFtdml5YTpNdXJhbXZ5YTpCSS1NVQorQ2FwZSBWZXJkZTpGb2dvOlVOS05PV046Q1YtRk8KK0NhcGUgVmVyZGU6U2FudG8gQW50YW86VU5LTk9XTjpDVi1TT04KK0NhcGUgVmVyZGU6U2FvIE5pY29sYXU6U28gTmljb2xhdTpDVi1TTgorQ2FwZSBWZXJkZTpTYW8gVmljZW50ZTpTbyBWaWNlbnRlOkNWLVNWCitDZW50cmFsIEFmcmljYW4gUmVwdWJsaWM6U2FuZ2hhMTpTYW5naGEtTWJhZXJlOkNGLVNBCitDaGFkOkxha2U6TGFjOlRELUxDCitDaGFkOkxvZ29uZSBPY2NpZGVuOkxvZ29uZS1PY2NpZGVudGFsOlRELUxPCitDaGFkOkxvZ29uZSBPcmllbnRhOkxvZ29uZS1PcmllbnRhbDpURC1MUgorQ29tb3JvczpHcmFuZCBDb21vcmU6R3JhbmRlIENvbW9yZTpLTS1HCitDb21vcm9zOklsZSBkZSBNYXlvdHRlIChGci4pOlVOS05PV046S00tSUxNCitDb21vcm9zOk13YWxpOk1vaGVsaTpLTS1NCitDb21vcm9zOk56d2FuaTpVTktOT1dOOktNLU5aCitFZ3lwdDpGcm9udGllciBHb3Zlcm5hdGVzOlVOS05PV046RUctRlJHCitFZ3lwdDpMb3dlciBFZ3lwdDpVTktOT1dOOkVHLUxPRQorRWd5cHQ6VXBwZXIgRWd5cHQ6VU5LTk9XTjpFRy1VUEUKK0VneXB0OlVyYmFuIEdvdmVybmF0ZXM6VU5LTk9XTjpFRy1VUkcKK0VxdWF0b3JpYWwgR3VpbmVhOktpZW50ZW06S2llLU50ZW06R1EtS04KK0VxdWF0b3JpYWwgR3VpbmVhOldlbGVuemFzOldlbGUtTnphczpHUS1XTgorRXJpdHJlYTpBa2VsZSBHdXpheTpVTktOT1dOOkVSLUFLRworRXJpdHJlYTpBa29yZGF0OlVOS05PV046RVItQUsKK0VyaXRyZWE6QXNzZWI6VU5LTk9XTjpFUi1BUworRXJpdHJlYTpHYXNoICYgU2V0aXQ6VU5LTk9XTjpFUi1HQVMKK0VyaXRyZWE6SGFtYXNzaWVuOlVOS05PV046RVItSEEKK0VyaXRyZWE6S2VyZW46VU5LTk9XTjpFUi1LRQorRXJpdHJlYTpLZXkgQmFoaXI6RGVidXdhYmkgS2V5aWggQmFocmk6RVItREsKK0VyaXRyZWE6U2FoZWw6VU5LTk9XTjpFUi1TQQorRXJpdHJlYTpTZXJheWU6VU5LTk9XTjpFUi1TRQorR2Fib246V291bGV1LU50ZW06V29sZXUtTnRlbTpHQS05CitHaGFuYTpXZXN0ZXJuMjpXZXN0ZXJuOkdILVdQCitJdm9yeSBDb2FzdDpNYW46VU5LTk9XTjpDSS1NTgorSXZvcnkgQ29hc3Q6U2FuLVBlZHJvOlVOS05PV046Q0ktU1AKK0l2b3J5IENvYXN0OkFiZW5nb3Vyb3U6VU5LTk9XTjpDSS1BQkUKK0l2b3J5IENvYXN0OkFiaWRqYW46VU5LTk9XTjpDSS1BQkkKK0l2b3J5IENvYXN0OkFib2lzc286VU5LTk9XTjpDSS1BQk8KK0l2b3J5IENvYXN0OkFkem9wZTpVTktOT1dOOkNJLUFECitJdm9yeSBDb2FzdDpBZ2JvdmlsbGU6VU5LTk9XTjpDSS1BR0IKK0l2b3J5IENvYXN0OkFnbmliaWxla3JvOlVOS05PV046Q0ktQUdOCitJdm9yeSBDb2FzdDpCYW5nb2xvOlVOS05PV046Q0ktQkFOCitJdm9yeSBDb2FzdDpCZW91bWk6VU5LTk9XTjpDSS1CRU8KK0l2b3J5IENvYXN0OkJpYW5rb3VtYTpVTktOT1dOOkNJLUJJQQorSXZvcnkgQ29hc3Q6Qm9uZG91a291OlVOS05PV046Q0ktQk9ECitJdm9yeSBDb2FzdDpCb25nb3Vhbm91OlVOS05PV046Q0ktQk9HCitJdm9yeSBDb2FzdDpCb3VhZmxlOlVOS05PV046Q0ktQk9GCitJdm9yeSBDb2FzdDpCb3Vha2U6VU5LTk9XTjpDSS1CT0sKK0l2b3J5IENvYXN0OkJvdW5hOlVOS05PV046Q0ktQk9VCitJdm9yeSBDb2FzdDpCb3VuZGlhbGk6VU5LTk9XTjpDSS1CT04KK0l2b3J5IENvYXN0OkRhYmFrYWxhOlVOS05PV046Q0ktREFLCitJdm9yeSBDb2FzdDpEYWxvYTpVTktOT1dOOkNJLURBTAorSXZvcnkgQ29hc3Q6RGFuYW5lOlVOS05PV046Q0ktREFOCitJdm9yeSBDb2FzdDpEYW91a3JvOlVOS05PV046Q0ktREFPCitJdm9yeSBDb2FzdDpEaW1ib2tybzpVTktOT1dOOkNJLURJTQorSXZvcnkgQ29hc3Q6RGl2bzpVTktOT1dOOkNJLURJVgorSXZvcnkgQ29hc3Q6RHVla291ZTpVTktOT1dOOkNJLURVRQorSXZvcnkgQ29hc3Q6RmVya2Vzc2Vkb3Vnb3U6VU5LTk9XTjpDSS1GRVIKK0l2b3J5IENvYXN0OkdhZ25vYTpVTktOT1dOOkNJLUdBRworSXZvcnkgQ29hc3Q6R3JhbmQtTGFob3U6VU5LTk9XTjpDSS1MQUgKK0l2b3J5IENvYXN0Okd1aWdsbzpVTktOT1dOOkNJLUdVSQorSXZvcnkgQ29hc3Q6SXNzaWE6VU5LTk9XTjpDSS1JU1MKK0l2b3J5IENvYXN0OkthdGlvbGE6VU5LTk9XTjpDSS1LQVQKK0l2b3J5IENvYXN0OktvcmhvZ286VU5LTk9XTjpDSS1LT1IKK0l2b3J5IENvYXN0Okxha290YTpVTktOT1dOOkNJLUxBSworSXZvcnkgQ29hc3Q6TSdiYWhpYWtybzpVTktOT1dOOkNJLU1CQQorSXZvcnkgQ29hc3Q6TWFua29ubzpVTktOT1dOOkNJLU1BTgorSXZvcnkgQ29hc3Q6T2RpZW5uZTpVTktOT1dOOkNJLU9ESQorSXZvcnkgQ29hc3Q6T3VtZTpVTktOT1dOOkNJLU9VCitJdm9yeSBDb2FzdDpTYWthc3NvdTpVTktOT1dOOkNJLVNBSworSXZvcnkgQ29hc3Q6U2Fzc2FuZHJhOlVOS05PV046Q0ktU0FTCitJdm9yeSBDb2FzdDpTZWd1ZWxhOlVOS05PV046Q0ktU0VHCitJdm9yeSBDb2FzdDpTaW5mcmE6VU5LTk9XTjpDSS1TSU4KK0l2b3J5IENvYXN0OlNvdWJyZTpVTktOT1dOOkNJLVNPUgorSXZvcnkgQ29hc3Q6VGFib3U6VU5LTk9XTjpDSS1UQUIKK0l2b3J5IENvYXN0OlRhbmRhOlVOS05PV046Q0ktVEFOCitJdm9yeSBDb2FzdDpUZW5ncmVsYTpVTktOT1dOOkNJLVRFTgorSXZvcnkgQ29hc3Q6VGlhc3NhbGU6VU5LTk9XTjpDSS1USUEKK0l2b3J5IENvYXN0OlRvdWJhOlVOS05PV046Q0ktVE9CCitJdm9yeSBDb2FzdDpUb3Vtb2RpOlVOS05PV046Q0ktVE9NCitJdm9yeSBDb2FzdDpWYXZvdWE6VU5LTk9XTjpDSS1WQVYKK0l2b3J5IENvYXN0OllhbW91c3NvdWtybzpVTktOT1dOOkNJLVlBTQorSXZvcnkgQ29hc3Q6WnVlbm91bGE6VU5LTk9XTjpDSS1aVUUKK0xlc290aG86TW9oYWxlJ1MgSG9lazpNb2hhbGVzIEhvZWs6TFMtRgorTGVzb3RobzpRdWFjaGEnUyBOZWs6UXVhY2hhcyBOZWs6TFMtSAorTGliZXJpYTpCb21pIFRlcnIuOkJvbWk6TFItQk0KK0xpYmVyaWE6S3J1IENvYXN0IFRlcnIuOkdyYW5kIEtydTpMUi1HSworTGliZXJpYTpNYXJzaGFsbCBUZXJyLjpVTktOT1dOOkxSLU1SCitMaWJlcmlhOlJpdmVyY2VzcyBUZXJyLjpSaXZlcmNlc3M6TFItUkkKK0xpYmVyaWE6U2Fzc3Rvd24gVGVyci46VU5LTk9XTjpMUi1TQQorTGlieWE6QWpkYWJpeWEgKEFnZWRhYmlhKTpVTktOT1dOOkxZLUFESgorTGlieWE6QWwgQXppeml5YWg6VU5LTk9XTjpMWS1BWlkKK0xpYnlhOkFsIEZhdGFoOlVOS05PV046TFktRlRICitMaWJ5YTpBbCBKYWJhbCBBbCBBa2hkYXI6QWwgSmFiYWwgQWwgQWtoYXI6TFktSkEKK0xpYnlhOkFsIEtob21zOlVOS05PV046TFktS0hPCitMaWJ5YTpBc2ggU2hhdGk6VU5LTk9XTjpMWS1BU0gKK0xpYnlhOkF3YmFyaSAoVWJhcmkpOlVOS05PV046TFktQVdCCitMaWJ5YTpBeiBaYXdpYSAoQXp6YXdpeWEpOkF6IFp3aXlhaDpMWS1aQQorTGlieWE6QmFuZ2hhemk6QmFuZ2h6OkxZLUJBCitMaWJ5YTpHaGFkYW1pczpVTktOT1dOOkxZLUdIQQorTGlieWE6R2hhcnlhbjpVTktOT1dOOkxZLUdSWQorTGlieWE6TWlzdXJhdGE6VU5LTk9XTjpMWS1NSVMKK0xpYnlhOk51cWF0IEFsIEtoYW1zOlVOS05PV046TFktTlVHCitMaWJ5YTpTYWJoYTpVTktOT1dOOkxZLVNBQgorTGlieWE6U2F3ZmFqamluIChTb2Z1bGplZW4pOlVOS05PV046TFktU0FXCitMaWJ5YTpTdXJ0IChTaXJ0ZSk6VU5LTk9XTjpMWS1TVVIKK0xpYnlhOlRhcmh1bmFoOlVOS05PV046TFktVEFSCitMaWJ5YTpUcmlwb2xpIChUYXJhYnVsdXMpOlVOS05PV046TFktVFJJCitMaWJ5YTpUdWJydXEgKFRvYnJ1ayk6VU5LTk9XTjpMWS1UVUIKK0xpYnlhOllhZnJhbiAoWWVmcmVuKTpVTktOT1dOOkxZLVlBRgorTGlieWE6WmVsZWl0aW4gKFpsaXRlbik6VU5LTk9XTjpMWS1aRUwKK01hZGFnYXNjYXI6VG9saWFyeTpUb2xpYXJhOk1HLVUKK01hdXJpdGl1czpNYXVyaXRpdXM6VU5LTk9XTjpNVVMtTQorTW9yb2NjbzpDZW50cmUgTm9yZDpVTktOT1dOOk1BLUNFTgorTW9yb2NjbzpDZW50cmUgU3VkOlVOS05PV046TUEtQ0VTCitNb3JvY2NvOk9yaWVudGFsOlVOS05PV046TUEtT1IKK01vcm9jY286VGVuc2lmdDpVTktOT1dOOk1BLVRFCitNb3JvY2NvOk5PUkQgT1VFU1Q6VU5LTk9XTjpNQS1OCitNb3JvY2NvOkNFTlRSRTpVTktOT1dOOk1BLUMKK01vcm9jY286U1VEOlVOS05PV046TUEtUworTW96YW1iaXF1ZTpOYXNzYTpOaWFzc2E6TVotQQorTmFtaWJpYTpCZXRoYW5pZW46VU5LTk9XTjpOQS1CRVQKK05hbWliaWE6Qm9lc21hbmxhbmQ6VU5LTk9XTjpOQS1CTworTmFtaWJpYTpEYW1hcmFsYW5kOlVOS05PV046TkEtREEKK05hbWliaWE6R29iYWJpczpVTktOT1dOOk5BLUdPCitOYW1pYmlhOkdyb290Zm9udGVpbjpVTktOT1dOOk5BLUdSCitOYW1pYmlhOkhlcmVyb2xhbmQgRWFzdDpVTktOT1dOOk5BLUhFQQorTmFtaWJpYTpIZXJlcm9sYW5kIFdlc3Q6VU5LTk9XTjpOQS1IRVcKK05hbWliaWE6S2Fva29sYW5kOlVOS05PV046TkEtS0FLCitOYW1pYmlhOkthcmFzYnVyZzpVTktOT1dOOk5BLUtBUworTmFtaWJpYTpLYXJpYmliOlVOS05PV046TkEtS0lCCitOYW1pYmlhOkthdmFuZ286VU5LTk9XTjpOQS1LQVYKK05hbWliaWE6S2VldG1hbnNob29wOlVOS05PV046TkEtS0UKK05hbWliaWE6THVkZXJpdHo6VU5LTk9XTjpOQS1MVQorTmFtaWJpYTpNYWx0YWhvaGU6VU5LTk9XTjpOQS1NTFQKK05hbWliaWE6TWFyaWVudGFsOlVOS05PV046TkEtTVJJCitOYW1pYmlhOk5hbWFsYW5kOlVOS05PV046TkEtTkFMCitOYW1pYmlhOk9rYWhhbmRqYTpVTktOT1dOOk5BLU9LRAorTmFtaWJpYTpPbWFydXJ1OlVOS05PV046TkEtT01VCitOYW1pYmlhOk90aml3YXJvbmdvOlVOS05PV046TkEtT1RJCitOYW1pYmlhOk91dGpvOlVOS05PV046TkEtT1VUCitOYW1pYmlhOk93YW1ibzpVTktOT1dOOk5BLU9XQQorTmFtaWJpYTpSZWhvYm90aDpVTktOT1dOOk5BLVJCSAorTmFtaWJpYTpTd2Frb3BtdW5kOlVOS05PV046TkEtU1dLCitOYW1pYmlhOlRzdW1lYjpVTktOT1dOOk5BLVRTQgorTmFtaWJpYTpXaW5kaG9lazpVTktOT1dOOk5BLVdJSAorTmlnZXI6VGlsbGFiZXJ5OlRpbGxhYmVyaTpORS02CitOaWdlcmlhOkFkYW13YXJhOlVOS05PV046TkctQVdNCitOaWdlcmlhOkFrd2FsYm9tOlVOS05PV046TkctQUtXCitOaWdlcmlhOkZDVDpVTktOT1dOOk5HLUZDVAorUndhbmRhOktpYnVuZ3U6S2lidW5nbzpSVy1KCitSd2FuZGE6S2lnYWxpOktpZ2FsaS1SdXJhbDpSVy1LCitTYW8gVG9tZSBhbmQgUHJpbmNpcGU6UHJpbmNpcGU6UHJuY2lwZTpTVC1QCitTYW8gVG9tZSBhbmQgUHJpbmNpcGU6U2FvIFRvbWU6U28gVG9tZTpTVC1TCitTZW5lZ2FsOkRhZ2FuYTpVTktOT1dOOlNOLURBRworU2VuZWdhbDpCYWtlbDpVTktOT1dOOlNOLUJBSworU2VuZWdhbDpCYW1iZXk6VU5LTk9XTjpTTi1CQlkKK1NlbmVnYWw6Qmlnbm9uYTpVTktOT1dOOlNOLUJHTworU2VuZWdhbDpGb3VuZGlvdWduZTpVTktOT1dOOlNOLUZESQorU2VuZWdhbDpHb3NzYXM6VU5LTk9XTjpTTi1HUworU2VuZWdhbDpLYWZmcmluZTpVTktOT1dOOlNOLUtBRgorU2VuZWdhbDpLZWJlbWVyOlVOS05PV046U04tS0VNCitTZW5lZ2FsOktlZG91Z291OlVOS05PV046U04tS0VVCitTZW5lZ2FsOkxpbmd1ZXJlOlVOS05PV046U04tTEdFCitTZW5lZ2FsOk1iYWNrZTpVTktOT1dOOlNOLU1CSworU2VuZWdhbDpNYm91cjpVTktOT1dOOlNOLU1CVQorU2VuZWdhbDpOaW9yby1EdS1SaXA6VU5LTk9XTjpTTi1ORFIKK1NlbmVnYWw6T3Vzc291eWU6VU5LTk9XTjpTTi1PVVkKK1NlbmVnYWw6UGlraW5lOlVOS05PV046U04tUEtFCitTZW5lZ2FsOlBvZG9yOlVOS05PV046U04tUERSCitTZW5lZ2FsOlJ1ZmlzcXVlLUJhcmdueTpVTktOT1dOOlNOLVJVUQorU2VuZWdhbDpTZWRoaW91OlVOS05PV046U04tU0RICitTZW5lZ2FsOlRpdmFvdWFuZTpVTktOT1dOOlNOLVRWTworU2VuZWdhbDpWZWxpbmdhcmE6VU5LTk9XTjpTTi1WR1IKK1NleWNoZWxsZXM6TWFoZSBJc2xhbmQ6VU5LTk9XTjpTQy1NCitTZXljaGVsbGVzOlByYXNsaW4gSXNsYW5kOlVOS05PV046U0MtUAorU29tYWxpYTpHYWRvOkdlZG86U08tR0UKK1NvbWFsaWE6SGlpcmFuOkhpaXJhYW46U08tSEkKK1NvbWFsaWE6Si4gRGhleGU6SnViYmFkYSBEaGV4ZTpTTy1KRAorU29tYWxpYTpKLiBIb29zZTpKdWJiYWRhIEhvb3NlOlNPLUpICitTb21hbGlhOlNoLiBEaGV4ZTpTaGFiZWVsbGFoYSBEaGV4ZTpTTy1TRAorU29tYWxpYTpTaC4gSG9vc2U6U2hhYmVlbGxhaGEgSG9vc2U6U08tU0gKK1NvbWFsaWE6VG9nLURoZWVyOlRvZ2RoZWVyOlNPLVRPCitTb21hbGlhOlcuIEdhbGJlZWQ6V29xb295aSBHYWxiZWVkOlNPLVdPCitTb3V0aCBBZnJpY2E6TmF0YWw6VU5LTk9XTjpaQS1OQVQKK1NvdXRoIEFmcmljYTpPcmFuZ2U6VU5LTk9XTjpaQS1PUgorU291dGggQWZyaWNhOk9yYW5nZSBGcmVlIFN0YXRlOlVOS05PV046WkEtT0ZTCitTb3V0aCBBZnJpY2E6UFdWOlVOS05PV046WkEtUFdNCitTdWRhbjpCYWhyIGVsIEdoYXphbDpVTktOT1dOOlNELUJFRworU3VkYW46RGFyZnVyOlVOS05PV046U0QtREFGCitTdWRhbjpFcXVhdG9yaWE6VU5LTk9XTjpTRC1FUQorU3VkYW46S2hhcnRvdW06VU5LTk9XTjpTRC1LSEEKK1N1ZGFuOktvcmR1ZmFuOlVOS05PV046U0QtS09SCitTdWRhbjpVcHBlciBOaWxlOlVOS05PV046U0QtVVBOCitUYW56YW5pYSBVbml0ZWQgUmVwdWJsaWM6TC4gVmljdG9yaWE6VU5LTk9XTjpUWi1WSQorVHVuaXNpYTpSZWdpb24gMTpVTktOT1dOOlROLVIxCitUdW5pc2lhOlJlZ2lvbiAyOlVOS05PV046VE4tUjIKK1R1bmlzaWE6UmVnaW9uIDM6VU5LTk9XTjpUTi1SMworVHVuaXNpYTpSZWdpb24gNDpVTktOT1dOOlROLVI0CitUdW5pc2lhOlJlZ2lvbiA1OlVOS05PV046VE4tUjUKK1R1bmlzaWE6UmVnaW9uIDY6VU5LTk9XTjpUTi1SNgorVHVuaXNpYTpSZWdpb24gNzpVTktOT1dOOlROLVI3CitVZ2FuZGE6TGFrZSBWaWN0b3JpYTpVTktOT1dOOlVHLVYKK1phbWJpYTpDZW50cmFsMzpVTktOT1dOOlpNLUMzCitaYW1iaWE6RWFzdGVybjQ6VU5LTk9XTjpaTS1FNAorWmFtYmlhOk5vcnRoZXJuNDpVTktOT1dOOlpNLU40CitaYW1iaWE6U291dGhlcm4zOlVOS05PV046Wk0tUzMKK1phbWJpYTpXZXN0ZXJuNDpVTktOT1dOOlpNLVc0CitCYWhyYWluOkJhaHJhaW46VU5LTk9XTjpCSC1CCitJcmFxOkFsLUFuYmFyOkFsIEFuYnI6SVEtQU4KK0lyYXE6QWwtQmFzcmFoOkFsIEJhcmFoOklRLUJBCitJcmFxOkFsLU11dGhhbm5pYTpBbCBNdXRoYW5uYTpJUS1NVQorSXJhcTpBbC1RYWRpc2l5YWg6QWwgUWRpc3lhaDpJUS1RQQorSXJhcTpBcmJpbDpBcmJsOklRLUFSCitJcmFxOkF0LVRhbWltOkF0IFRhbW06SVEtVFMKK0lyYXE6QmFiaWw6QmJpbDpJUS1CQgorSXJhcTpCYWdoZGFkOkJhZ2hkZDpJUS1CRworSXJhcTpEaGktUWFyOkRoIFFyOklRLURRCitJcmFxOkRpaG9rOkRhaGs6SVEtREEKK0lyYXE6RGl5YWxhOkRpeWxhOklRLURJCitJcmFxOklSUS9TQVUgTmV1dHJhbCBab25lOlVOS05PV046SVEtTkVVCitJcmFxOkthcmJhbGE6S2FyYmFsOklRLUtBCitJcmFxOk1pc2FuOk1heXNuOklRLU1BCitJcmFxOk5laW5ldmE6Tm5hd2E6SVEtTkkKK0lyYXE6U2FsYWh1ZGRpbjphbGFkIERuOklRLVNECitJcmFxOlN1bGF5bWFuaXlhaDpBcyBTdWxheW1ueWFoOklRLVNVCitJcmFxOldhc2l0OldzaTpJUS1XQQorSXJhbjpCYWtodGFyYW46VU5LTk9XTjpJUi1CS1QKK0lyYW46QnVzaGVocjpCc2hlaHI6SVItMDYKK0lyYW46Q2hhaGFybWFoYWwgYW5kIEJha2h0aWFyOkNoYWhyIE1haGxsIHZhIEJha2h0cjpJUi0wOAorSXJhbjpFYXN0IEF6YXJiYXllamFuOlVOS05PV046SVItRUFaCitJcmFuOkVzZmFoYW46RWZhaG46SVItMDQKK0lyYW46RmFyczpGcnM6SVItNAorSXJhbjpHaWxhbjpHbG46SVItOQorSXJhbjpIYW1hZGFuOkhhbWFkbjpJUi0yNAorSXJhbjpIb3Jhc2FuOlVOS05PV046SVItSFNBCitJcmFuOkhvcm1vemdhbjpIb3Jtb3pnbjpJUi0yMworSXJhbjpJbGFtOmxtOklSLTA1CitJcmFuOktlcm1hbjpLZXJtbjpJUi01CitJcmFuOktodXplc3RhbjpLaHplc3RuOklSLTAKK0lyYW46S29oZ2lsdXllaCAmIEJveWVyIEFobWFkOktvaGtseWVoIHZhIEJ5ZXIgQWhtYWQ6SVItOAorSXJhbjpLb3JkZXN0YW46S29yZGVzdG46SVItNgorSXJhbjpMb3Jlc3RhbjpVTktOT1dOOklSLUxSUworSXJhbjpNYXJrYXppOlVOS05PV046SVItTUtaCitJcmFuOk1hemFuZGFyYW46VU5LTk9XTjpJUi1NWkQKK0lyYW46U2VtbmFuOlVOS05PV046SVItU0VNCitJcmFuOlNpc3RhbiBhbmQgQmFsdWNoZXN0YW46VU5LTk9XTjpJUi1TQkwKK0lyYW46VGVocmFuOlVOS05PV046SVItVEhSCitJcmFuOldlc3QgQXphcmJheWVqYW46VU5LTk9XTjpJUi1XQUoKK0lyYW46WmFuamFuOlVOS05PV046SVItWgorSm9yZGFuOkFtbWFuOm1tbjpKTy1BTQorSm9yZGFuOkthcmFrOkFsIEthcmFrOkpPLUtBCitKb3JkYW46TWEtYW46TWFuOkpPLU1OCitKb3JkYW46TWFmcmFxOkFsIE1hZnJhcTpKTy1NQQorSm9yZGFuOlNhbHQgKEJhbHFhKTpBbCBCYWxxOkpPLUJBCitKb3JkYW46VGFmaWxhOkEgYWZsYWg6Sk8tQVQKK0pvcmRhbjpaYXJxYTpBeiBaYXJxOkpPLUFaCitLdXdhaXQ6S3V3YWl0OlVOS05PV046S1ctSworTGViYW5vbjpMZWJhbm9uOlVOS05PV046TEItTAorT21hbjpBIERha2hsaXlhOkFkIERha2hpbGl5YWg6T00tREEKK09tYW46QSBTaGFycWl5YTpBc2ggU2hhcnF5YWg6T00tU0gKK09tYW46QWwgQmF0bmFoOkFsIEJhaW5haDpPTS1CQQorT21hbjpBbCBEaGFoaXJhOlVOS05PV046T00tREhBCitPbWFuOkFsIFd1c3RhOlVOS05PV046T00tV1UKK09tYW46RGhvZmFyOlVOS05PV046T0gtREhGCitPbWFuOk11c2NhdDpNYXNxYTpPTS1NQQorUWF0YXI6UWF0YXI6VU5LTk9XTjpRQS1RCitTeXJpYTpBbGVwcG8gKEhhbGFiKTphbGFiOlNZLUhMCitTeXJpYTpBcyBTdXdheWRhOkFzIFN1d2F5ZDpTWS1TVQorU3lyaWE6RGFyYTpEYXI6U1ktRFIKK1N5cmlhOkhhbWFoOmFtaDpTWS1ITQorU3lyaWE6SGFzYWthIChBbCBIYWtzYSk6QWwgYXNha2FoOlNZLUhBCitTeXJpYTpIb21zIChIaW1zKTppbTpTWS1ISQorU3lyaWE6S3VuZWl0cmEgKEVsIFF1bmF5dGlyYWg6QWwgUXVuYXlpcmFoOlNZLVFVCitTeXJpYTpMYXR0YWtpYSAoQWwgTGFkaGlxaXlhaDpBbCBMYWRoaXFpeWFoOlNZLUxBCitTeXJpYTpUYXJ0dXM6YXJzOlNZLVRBCitVbml0ZWRBcmFiRW1pcmF0ZXM6Ok5ldXRyYWwgWm9uZTpVTktOT1dOOkFFLU5FVQorWWVtZW46Rm9ybWVyIE5vcnRoIFllbWVuOlVOS05PV046WUUtTgorWWVtZW46Rm9ybWVyIFNvdXRoIFllbWVuOlVOS05PV046WUUtUworTWV4aWNvOkJhamEgQ2FsaWZvcm5pYSBOb3J0ZTpCYWphIENhbGlmb3JuaWE6IE1YLUJDTgorTWV4aWNvOlF1ZXJldGFybyBkZSBBcnRlYWdhOlF1ZXJldGFybzpNWC1RVUUKK01leGljbzpNaWNob2FjYW4gZGUgT2NhbXBvOk1pY2hvYWNhbjpNWC1NSUMKK01leGljbzpZdWNhdGFuOll1Y2F0bjpNWC1ZVUMKK01leGljbzpDb2FodWlsYSBEZSBaYXJhZ296YTpDb2hhdWlsYTpNWC1DT0EKK01leGljbzpTYW4gTHVpcyBQb3Rvc2k6U2FuIEx1aXMgUG90b3M6TVgtU0xQCitNZXhpY286TnVldm8gTGVvbjpOdWV2byBMZW46TVgtTkxFCitNZXhpY286VmVyYWNydXotTGxhdmU6VmVyYWNydXo6TVgtVkVSCitBUkdFTlRJTkE6QlVFTk9TIEFJUkVTIEQuRi46Q2FwaXRhbCBmZWRlcmFsOkFSLUMKK0FSR0VOVElOQTpDT1JET0JBOkNyZG9iYTpBUi1YCitBUkdFTlRJTkE6RU5UUkUgUklPUzpFbnRyZSBSb3M6QVItRQorQVJHRU5USU5BOlJJTyBORUdSTzpSbyBOZWdybzpBUi1SCitBUkdFTlRJTkE6VFVDVU1BTjpUdWN1bW46QVItVAorQk9MSVZJQTpCRU5JOkVsIEJlbmk6Qk8tQgorQk9MSVZJQTpQT1RPU0k6UG90b3M6Qk8tUAorQlJBU0lMOkNhcGFuZW1hOlVOS05PV046QlItQ0FQCitCUkFTSUw6TUFSQU5IQU8vUElBVUk6VU5LTk9XTjpCUi1NUAorQlJBU0lMOlBvcnRvIFhhdmllcjpVTktOT1dOOkJSLVBSWAorQ0hJTEU6QUlTRU46QWlzZW4gZGVsIEdlbmVyYWwgQ2FybG9zIEliZXogZGVsIENhbXBvOkNMLUFJCitDSElMRTpBTlRBUlRJQ0EgQ0hJTEVOQTpVTktOT1dOOkNMLUFOVAorQ0hJTEU6QVJBVUNPOlVOS05PV046Q0wtQVJDCitDSElMRTpBUklDQTpVTktOT1dOOkNMLUFSSQorQ0hJTEU6QklPQklPOmJvLWJvOkNMLUJJCitDSElMRTpDQUNIQVBPQUw6VU5LTk9XTjpDTC1DSFAKK0NISUxFOkNBUElUQU4gUFJBVDpVTktOT1dOOkNMLUNQVAorQ0hJTEU6Q0FSREVOQUwgQ0FSTzpVTktOT1dOOkNMLUNBUgorQ0hJTEU6Q0FVUVVFTkVTOlVOS05PV046Q0wtQ0FVCitDSElMRTpDQVVUSU46VU5LTk9XTjpDTC1DVE4KK0NISUxFOkNIQUNBQlVDTzpVTktOT1dOOkNMLUNCVQorQ0hJTEU6Q0hBTkFSQUw6VU5LTk9XTjpDTC1DSE4KK0NISUxFOkNISUxPRTpVTktOT1dOOkNMLUNMRQorQ0hJTEU6Q0hPQVBBOlVOS05PV046Q0wtQ1BBCitDSElMRTpDT0lIQUlRVUU6VU5LTk9XTjpDTC1DSFEKK0NISUxFOkNPTENIQUdVQTpVTktOT1dOOkNMLUNIRworQ0hJTEU6Q09QSUFQTzpVTktOT1dOOkNMLUNPUAorQ0hJTEU6Q1VSSUNPOlVOS05PV046Q0wtQ1VSCitDSElMRTpFTCBMT0E6VU5LTk9XTjpDTC1FTAorQ0hJTEU6RUxRVUk6VU5LTk9XTjpDTC1FTFEKK0NISUxFOkdFTkVSQUwgQ0FSUkVSQTpVTktOT1dOOkNMLUdDUgorQ0hJTEU6SFVBU0NPOlVOS05PV046Q0wtSFVBCitDSElMRTpJUVVJUVVFOlVOS05PV046Q0wtSVFJCitDSElMRTpMSU1BUkk6VU5LTk9XTjpDTC1MSU0KK0NISUxFOkxJTkFSRVM6VU5LTk9XTjpDTC1MSU4KK0NISUxFOkxMQU5RVUlIVUU6VU5LTk9XTjpDTC1MTEEKK0NISUxFOkxPUyBBTkRFUzpVTktOT1dOOkNMLUFORAorQ0hJTEU6TUFJUE86VU5LTk9XTjpDTC1NSVAKK0NISUxFOk1BTExFQ086VU5LTk9XTjpDTC1NTEwKK0NISUxFOk1FTElQSUxMQTpVTktOT1dOOkNMLU1JTAorQ0hJTEU6TlVCTEU6VU5LTk9XTjpDTC1OVUIKK0NISUxFOk9TT1JOTzpVTktOT1dOOkNMLU9TUgorQ0hJTEU6UEFMRU5BOlVOS05PV046Q0wtUEFMCitDSElMRTpQQVJJTkFDT1RBOlVOS05PV046Q0wtUEFOCitDSElMRTpQRVRPUkNBOlVOS05PV046Q0wtUEVUCitDSElMRTpRVUlMTE9UQTpVTktOT1dOOkNMLVFVSQorQ0hJTEU6U0FOIEFOVE9OSU86VU5LTk9XTjpDTC1TQVQKK0NISUxFOlNBTiBGRUxJUEUgREUgQUNPTkNBR1VBOlVOS05PV046Q0wtQUNPCitDSElMRTpUQUxBR0FOVEU6VU5LTk9XTjpDTC1UQUwKK0NISUxFOlRBTENBOlVOS05PV046Q0wtVENBCitDSElMRTpUT0NPUElMTEE6VU5LTk9XTjpDTC1UT0MKK0NISUxFOlVMVElNQSBFU1BFUkFOWkE6VU5LTk9XTjpDTC1FU1AKK0NISUxFOlZBTERJVklBOlVOS05PV046Q0wtVkRJCitDSElMRTpWQUxQQVJBSVNPOlVOS05PV046Q0wtVkFMCitDSElMRTpDT05DRVBDSU9OOlVOS05PV046Q0wtQ09OCitDSElMRTpDT1JESUxMRVJBOlVOS05PV046Q0wtQ09SCitDSElMRTpTQU5USUFHTzpVTktOT1dOOkNMLVNHTworQ0hJTEU6VElFUlJBIERFTCBGVUVHTzpVTktOT1dOOkNMLVRGCitDT0xPTUJJQTpBdGxhbnRpY286QXRsYW50Y286Q08tQVRMCitDT0xPTUJJQTpCb2xpdmFyOkJvbHZhcjpDTy1CT0wKK0NPTE9NQklBOkJveWFjYTpCb3lhYzpDTy1CT1kKK0NPTE9NQklBOkJ1ZW5hdmVudHVyYTpVTktOT1dOOkNPLUJVRQorQ09MT01CSUE6Q2FxdWV0YTpDYXF1ZXQ6Q08tQ0FRCitDT0xPTUJJQTpDaG9jbzpDaG9jOkNPLUNITworQ09MT01CSUE6Q29yZG9iYTpDcmRvYmE6Q08tQ09SCitDT0xPTUJJQTpHdWFqaXJhOkxhIEd1YWppcmE6Q08tTEFHCitDT0xPTUJJQTpHdWFuaWE6R3VhaW5hOkNPLUdVQQorQ09MT01CSUE6TmFyaW5vOk5hcmlvOkNPLU5BUgorQ09MT01CSUE6UXVpbmRpbzpRdWluZG86Q08tUVVJCitDT0xPTUJJQTpTYW4gQW5kcmVzIHkgUHJvdmlkZW5jaWE6U2FuIEFuZHJlcywgUHJvdmlkZW5jaWEgeSBTYW50YSBDYXRhbGluYTpDTy1TQVAKK0VDVUFET1I6Qk9MSVZBUjpCb2x2YXI6RUMtQgorRUNVQURPUjpDQU5BUjpDYWFyOkVDLUYKK0VDVUFET1I6TE9TIFJJT1M6TG9zIFJvczpFQy1SCitFQ1VBRE9SOk1BTkFCSTpNYW5hYjpFQy1NCitFQ1VBRE9SOlNVQ1VNQklPUzpTdWN1bWJvczpFQy1VCitFQ1VBRE9SOlpvbmEgTm8gRGVsaW10ZGE6VU5LTk9XTjpFQy1aTkQKK0dVWUFOQTpCQVJJTUEvV0FJTkk6VU5LTk9XTjpHWS1CQVcKK1BBUkFHVUFZOkNBQUdVQVpVOlVOS05PV046UFktQ0FaCitVUlVHVUFZOlBBWVNBTkRVOlBheXNhbmQ6VVktUEEKK1VSVUdVQVk6UklPIE5FR1JPOlJvIE5lZ3JvOlVZLVJOCitVUlVHVUFZOlRBQ1VBUkVNQk86VGFjdWFyZW1iOlVZLVRBCitWRU5FWlVFTEE6QU5aT0FURUdVSTpBbnpvdGVndWk6VkUtQgorVkVORVpVRUxBOkJPTElWQVI6Qm9sdmFyOlZFLUYKK1ZFTkVaVUVMQTpGQUxDT046RmFsY246VkUtSQorVkVORVpVRUxBOkdVQVJJQ086R3VyaWNvOlZFLUoKK1ZFTkVaVUVMQTpUQUNISVJBOlRjaGlyYTpWRS1TCitCYW5nbGFkZXNoOkJhcmlzYWwgRGl2OkJhcmlzYWwgemlsYTpCRC0wNgorQmFuZ2xhZGVzaDpDaGl0dGFnb25nIERpdjpDaGl0dGFuZ29uZyB6aWxhOkJELTAKK0JhbmdsYWRlc2g6RGhha2EgRGl2OkRoYWthIHppbGE6QkQtMworQmFuZ2xhZGVzaDpLaHVsbmEgRGl2OktodWxuYSB6aWxhOkJELTI3CitCYW5nbGFkZXNoOlJhanNoYWhpIERpdjpSYWpzaGFuaSB6aWxhOkJELTU0CitCcnVuZWk6TXVhcmEvU2VyaWEvVHV0b25nOlR1dG9uZzpCTi1UVQorQmh1dGFuOkNoaXJhbmc6VU5LTk9XTjpCVC1DTkcKK0JodXRhbjpDaHVraGE6Q2hodWtoYTpCVC0yCitCaHV0YW46RGFnYTpVTktOT1dOOkJULURBCitCaHV0YW46R2F5bGVncGh1ZyAoU2FyYmhhbmcpOlNhcnBhbmc6QlQtMzYKK0JodXRhbjpIYWE6SGE6QlQtMworQmh1dGFuOkxodW50c2hpOkxodWVudHNlOkJULTQ0CitCaHV0YW46TW9uZ2FyOk1vbmdnYXI6QlQtNDIKK0JodXRhbjpQZW1hIEdhdHNoZWw6UGVtYWdhdHNoZWw6QlQtNDMKK0JodXRhbjpTYW1jaGk6U2FtdHNlOkJULTQKK0JodXRhbjpTYW1kcnVwIEpvbmdraGFyOlNhbWRydXAgSm9uZ2toYTpCVC00NQorQmh1dGFuOlNoZW5nYW5nOlpoZW1nYW5nOkJULTM3CitCaHV0YW46VGFzaGlnYW5nOlRzaXJhbmc6QlQtMzgKK0JodXRhbjpUb25nc2E6VHJvbmdzYTpCVC0zMgorQmh1dGFuOldhbmdkaXBob2RyYW5nOldhbmdkdWUgUGhvZHJhbmc6QlQtMjQKK0NhbWJvZGlhOkJhbnRlYXkgTWVhbmNoZXk6VU5LTk9XTjpLSC1CRUEKK0NhbWJvZGlhOkJhdHRhbWJhbmc6VU5LTk9XTjpLSC1CVEcKK0NhbWJvZGlhOkthbXBvbmcgQ2hhbTpVTktOT1dOOktILUtQQworQ2FtYm9kaWE6S2FtcG9uZyBTcGV1OlVOS05PV046S0gtS01TCitDYW1ib2RpYTpLYW1wb25nIFRob206VU5LTk9XTjpLSC1LVEgKK0NhbWJvZGlhOkthbmRhbDpVTktOT1dOOktILUtBTgorQ2FtYm9kaWE6S29oIEtvbmc6VU5LTk9XTjpLSC1LT0gKK0NhbWJvZGlhOktyYXRpZTpVTktOT1dOOktILUtSRQorQ2FtYm9kaWE6TW9uZHVsIEtpcmk6VU5LTk9XTjpLSC1NT0sKK0NhbWJvZGlhOlByZXkgVmVuZzpVTktOT1dOOktILVBWRworQ2FtYm9kaWE6UHVyc2F0OlVOS05PV046S0gtUFVSCitDYW1ib2RpYTpSYXRhbmEgS2lyaTpVTktOT1dOOktILVJBSworQ2FtYm9kaWE6U2llbSBSZWFwOlVOS05PV046S0gtU0VSCitDYW1ib2RpYTpTdHVuZyBUcmVuZzpVTktOT1dOOktILVNUUgorQ2FtYm9kaWE6U3ZheSBSaWVuZzpVTktOT1dOOktILVNWWQorQ2FtYm9kaWE6VGFrZW86VU5LTk9XTjpLSC1US0UKK0NhbWJvZGlhOlRvbmxlIFNhcDpVTktOT1dOOktILVRPTAorQ2hpbmE6SG9uZ2tvbmcgSXNsYW5kOlVOS05PV046Q04tSEsKK0NoaW5hOkphbW11IGFuZCBLYXNobWlyOlVOS05PV046Q04tSksKK0NoaW5hOktvd2xvb24gYW5kIE5ldyBLb3dsb29uOlVOS05PV046Q04tS09XCitDaGluYTpNYXJpbmU6VU5LTk9XTjpDTi1NQVIKK0NoaW5hOk5laSBNb25nb2wgWml6aGlxdTpOZWkgTW9uZ29sOkNOLTc1CitDaGluYTpOZXcgVGVycml0b3JpZXM6VU5LTk9XTjpDTi1OVAorQ2hpbmE6WGluamlhbmcgVXlndXI6WGluamlhbmc6Q04tNjUKK0NoaW5hOlhpemFuZyBaaXpoaXF1IChUaWJldCk6WGl6YW5nOkNOLTU0CitJbmRpYTpBbmRhbWFuICYgTmljb2JhcjpVTktOT1dOOklOLU5JQworSW5kb25lc2lhOkQuSSBZb2d5YWthcnRhOlVOS05PV046SUQtWU9HCitJbmRvbmVzaWE6RGtpIEpha2FydGE6VU5LTk9XTjpJRC1KQUsKK0luZG9uZXNpYTpJcmlhbiBKYXlhOlVOS05PV046SUQtSUpBCitJbmRvbmVzaWE6VGltb3IgVGltdXI6VU5LTk9XTjpJRDAtVElNCitKYXBhbjpDaHVidTpVTktOT1dOOkpQLUNIQgorSmFwYW46Q2h1Z29rdTpVTktOT1dOOkpQLUNIRworSmFwYW46SG9rdXJpa3U6VU5LTk9XTjpKUC1IUkkKK0phcGFuOkthbnRvOlVOS05PV046SlAtS05UCitKYXBhbjpLaW5raTpVTktOT1dOOkpQLUtJTgorSmFwYW46S3l1c2h1OlVOS05PV046SlAtS1lVCitKYXBhbjpSeXVraXUtSXNsYW5kczpVTktOT1dOOkpQLVJZVQorSmFwYW46U2hpa29rdTpVTktOT1dOOkpQLVNLTworSmFwYW46VG9ob2t1OlVOS05PV046SlAtVE9ICitKYXBhbjpUb2thaTpVTktOT1dOOkpQLVRBSQorTGFvczpBdHRvcHU6QXR0YXB1OkxBLUFUCitMYW9zOkJvbGlraGFtc2FpOkJvbGlraGFteGFpOkxBLUJMCitMYW9zOkNoYW1wYXNzYWNrOkNoYW1wYXNhazpMQS1DSAorTGFvczpIb3VhcGhhbmg6SG91YXBoYW46TEEtSE8KK0xhb3M6S2hhbW1vdWFuZTpLaGFtbW91YW46TEEtS0sKK0xhb3M6THVhbmcgUHJhYmFuZzpMb3VhbmdwaGFiYW5nOkxBLUxQCitMYW9zOk5hbXRoYTpMb3VhbmcgTmFtdGhhOkxBLUxNCitMYW9zOk91ZG9teGF5Ok91ZG9teGFpOkxBLU9VCitMYW9zOlBob25nc2FseTpQaG9uZ3NhbGk6TEEtUEgKK0xhb3M6U2FyYXZhbmU6VU5LTk9XTjpMQS1TUgorTGFvczpTYXlhYm91cmk6WGFpZ25hYm91bGk6TEEtWEEKK0xhb3M6U2Vrb25nOlhFS09ORzpMQS1YRQorTGFvczpWaWVudGlhbmUgKE11bmljLik6VmllbnRpYW5lOkxBLVZJCitMYW9zOlZpZW50aWFuZSAyOlVOS05PV046TEEtVkkyCitMYW9zOlhpYW5na2hvdWFuZzpYaWFuZ2hob2FuZzpMQS1YSQorTWFjYXU6TWFjYXU6VU5LTk9XTjpNTy1NCitOZXBhbDpGYXIgV2VzdDpVTktOT1dOOk5QLUZBVworTmVwYWw6TWlkd2VzdDpVTktOT1dOOk5QLU1JRAorTmVwYWw6V2VzdDpVTktOT1dOOk5QLVcKK05lcGFsOkNlbnRyYWw6VU5LTk9XTjpOUC1DCitOZXBhbDpFYXN0OlVOS05PV046TlAtRQorTm9ydGggS29yZWE6Q2hhbmdhbmc6VU5LTk9XTjpLUC1DSEcKK05vcnRoIEtvcmVhOkthZXNvbmc6VU5LTk9XTjpLUC1LU08KK05vcnRoIEtvcmVhOkthbmd3b246VU5LTk9XTjpLUC1LR1cKK05vcnRoIEtvcmVhOk5hbXBvOlVOS05PV046S1AtTkFQCitOb3J0aCBLb3JlYTpOb3J0aCBIYW1neW9uZzpVTktOT1dOOktQLUhHWQorTm9ydGggS29yZWE6Tm9ydGggSHdhbmdoYWU6VU5LTk9XTjpLUC1IV0EKK05vcnRoIEtvcmVhOk5vcnRoIFB5b25nYW46VU5LTk9XTjpLUC1OUFkKK05vcnRoIEtvcmVhOlB5b25neWFuZzpVTktOT1dOOktQLVBZCitOb3J0aCBLb3JlYTpTb3V0aCBIYW1neW9uZzpVTktOT1dOOktQLVNITworTm9ydGggS29yZWE6U291dGggSHdhbmdoYWU6VU5LTk9XTjpLUC1TSEEKK05vcnRoIEtvcmVhOlNvdXRoIFB5b25nYW46VU5LTk9XTjpLUC1TUFkKK05vcnRoIEtvcmVhOllhbmdnYW5nOlVOS05PV046S1AtWUdOCitQaGlsaXBwaW5lczpDQVI6VU5LTk9XTjpQSC1DQVIKK1BoaWxpcHBpbmVzOk5DUjpVTktOT1dOOlBILU5DUgorUGhpbGlwcGluZXM6UmVnaW9uIDE6VU5LTk9XTjpQSC0xCitQaGlsaXBwaW5lczpSZWdpb24gMTA6VU5LTk9XTjpQSC0xMAorUGhpbGlwcGluZXM6UmVnaW9uIDExOlVOS05PV046UEgtMTEKK1BoaWxpcHBpbmVzOlJlZ2lvbiAxMjpVTktOT1dOOlBILTEyCitQaGlsaXBwaW5lczpSZWdpb24gMjpVTktOT1dOOlBILTIKK1BoaWxpcHBpbmVzOlJlZ2lvbiAzOlVOS05PV046UEgtMworUGhpbGlwcGluZXM6UmVnaW9uIDQ6VU5LTk9XTjpQSC00CitQaGlsaXBwaW5lczpSZWdpb24gNTpVTktOT1dOOlBILTUKK1BoaWxpcHBpbmVzOlJlZ2lvbiA2OlVOS05PV046UEgtNgorUGhpbGlwcGluZXM6UmVnaW9uIDc6VU5LTk9XTjpQSC03CitQaGlsaXBwaW5lczpSZWdpb24gODpVTktOT1dOOlBILTgKK1BoaWxpcHBpbmVzOlJlZ2lvbiA5OlVOS05PV046UEgtOQorU2luZ2Fwb3JlOlNpbmdhcG9yZTpVTktOT1dOOlNHLVMKK1NhdWRpIEFyYWJpYTpJUlEvU0FVIE5FVVRSQUwgWk9ORTpVTktOT1dOOlNBLU5FVQorU2F1ZGkgQXJhYmlhOlF1cmF5IFlhdDpVTktOT1dOOlNBLVFBWQorU291dGggS29yZWE6Q2hlanUtRG86SmVqdWRvOktSLTQ5CitTb3V0aCBLb3JlYTpDaG9sbGFidWstRG86SmVvbnJhYnVnZG86S1ItNDUKK1NvdXRoIEtvcmVhOkNob2xsYW5hbS1EbzpKZW9ucmFuYW1kbzpLUi00NgorU291dGggS29yZWE6Q2h1bmdjaG9uZ2J1ay1EbzpDaHVuZ2NoZW9uZ2J1Z2RvOktSLTQzCitTb3V0aCBLb3JlYTpDaHVuZ2Nob25nbmFtLURvOkNodW5nY2hlb25nbmFtZG86S1ItNDQKK1NvdXRoIEtvcmVhOkluY2hvbjpJbmNoZW9uIEd3YW5neW9nc2k6S1ItMjgKK1NvdXRoIEtvcmVhOkthbmctV29uLURvOkdhbmd3ZW9uZG86S1ItNDIKK1NvdXRoIEtvcmVhOkt3YW5nanU6R3dhbmdqdSBHd2FuZ3llb2dzaTpLUi0yOQorU291dGggS29yZWE6S3lvbmdnaS1EbzpHeWVvbmdnaWRvOktSLTQKK1NvdXRoIEtvcmVhOkt5b25nc2FuZ2J1ay1EbzpHeWVvbmdzYW5nYnVnZG86S1ItNDcKK1NvdXRoIEtvcmVhOkt5b25nc2FuZ25hbS1EbzpHeWVvbmdzYW5nbmFtZG86S1ItNDgKK1NvdXRoIEtvcmVhOlB1c2FuOkJ1c2FuIEd3YW5neWVvZ3NpOktSLTI2CitTb3V0aCBLb3JlYTpTZW91bDpTZW91bCBUZXVnYnllb2xzaTpLUi0wCitTb3V0aCBLb3JlYTpUYWVndTpEYWVndSBHd2FuZ3llb2dzaTpLUi0yNworU291dGggS29yZWE6VGFlam9uOkRhZWpvbiBHd2FuZ3llb2dzaTpLUi0zMAorVGhhaWxhbmQ6QmFuZ2tvazpLcnVuZyBUaGVwIE1haGEgTmFraG9uOlRILTAKK1RoYWlsYW5kOk5vcnRoZWFzdGVybjpVTktOT1dOOlRILU5FCitUaGFpbGFuZDpDZW50cmFsOlVOS05PV046VEgtQworVGhhaWxhbmQ6Tm9ydGhlcm46VU5LTk9XTjpUSC1OCitUaGFpbGFuZDpTb3V0aGVybjpVTktOT1dOOlRILVMKK1ZpZXRuYW06QmFjIFRoYWk6VU5LTk9XTjpWTi1CVEgKK1ZpZXRuYW06SGEgQmFjOlVOS05PV046Vk4tSEJDCitWaWV0bmFtOkhhIE5vaTpIYSBOb2k6Vk4tNjQKK1ZpZXRuYW06SGFpIEh1bmc6SGFpIER1b25nOlZOLTYKK1ZpZXRuYW06SGFpIFBob25nOkhhaSBQaG9uZzpWTi02MgorVmlldG5hbTpIbyBDaGkgTWluaCBDaXR5OkhvIENoaSBNaW5oOlZOLTY2IAkKK1ZpZXRuYW06TWluaCBIYWk6VU5LTk9XTjpWTi1NSEkKK1ZpZXRuYW06TmFtIEhhOkhhIE5hbTpWTi02MworVmlldG5hbTpRdWFuZyBOYW0tRGEgTmFuZzpRdWFuZyBOYW06Vk4tMjcKK1ZpZXRuYW06U29uZyBCZTpVTktOT1dOOlZOLVNCRQorVmlldG5hbTpWaW5oIFBodTpWaW5oIFBodWM6Vk4tNzAKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvSVNPRklYL1VTQV9GSVBTLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvSVNPRklYL1VTQV9GSVBTLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYTI2MTViCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9JU09GSVgvVVNBX0ZJUFMudHh0CkBAIC0wLDAgKzEsMzI3NSBAQAorIyBPZmZpY2lhbCBkZXNjcmlwdG9ycyBmb3IgY291bnRpZXMgaW4gdGhlIFVTQS4KKyMgVGhlc2UgZGVzY3JpcHRvcnMgdXNlIEZJUFMgY29kZXMgKGZpdmUgZGlnaXRzKS4KKyMgTGV2ZWwgMiAoYWRtaW4gMiA9IGUuZy4sIGNvdW50eSkjCisjIHVuZGVyIEFkbWluIExldmVsWzFdIElEWzAyXSA9IEFsYXNrYSAKK1VTLUFLLTAyMDEzOkFsZXV0aWFucyBFYXN0IEJvcm91Z2ggCitVUy1BSy0wMjAxNjpBbGV1dGlhbnMgV2VzdCAKK1VTLUFLLTAyMDIwOkFuY2hvcmFnZSBNdW5pY2lwYWxpdHkgCitVUy1BSy0wMjA1MDpCZXRoZWwgCitVUy1BSy0wMjA2MDpCcmlzdG9sIEJheSBCb3JvdWdoIAorVVMtQUstMDIwNjg6RGVuYWxpIEJvcm91Z2ggCitVUy1BSy0wMjA3MDpEaWxsaW5naGFtIAorVVMtQUstMDIwOTA6RmFpcmJhbmtzIE5vcnRoIFN0YXIgQm9yb3VnaCAKK1VTLUFLLTAyMTAwOkhhaW5lcyBCb3JvdWdoIAorVVMtQUstMDIxMTA6SnVuZWF1IEJvcm91Z2ggCitVUy1BSy0wMjEyMjpLZW5haSBQZW5pbnN1bGEgQm9yb3VnaCAKK1VTLUFLLTAyMTMwOktldGNoaWthbiBHYXRld2F5IEJvcm91Z2ggCitVUy1BSy0wMjE1MDpLb2RpYWsgSXNsYW5kIEJvcm91Z2ggCitVUy1BSy0wMjE2NDpMYWtlIGFuZCBQZW5pbnN1bGEgQm9yb3VnaCAKK1VTLUFLLTAyMTcwOk1hdGFudXNrYS1TdXNpdG5hIEJvcm91Z2ggCitVUy1BSy0wMjE4MDpOb21lIAorVVMtQUstMDIxODU6Tm9ydGggU2xvcGUgQm9yb3VnaCAKK1VTLUFLLTAyMTg4Ok5vcnRod2VzdCBBcmN0aWMgQm9yb3VnaCAKK1VTLUFLLTAyMjAxOlByaW5jZSBvZiBXYWxlcy1PdXRlciBLZXRjaGlrYW4gCitVUy1BSy0wMjIyMDpTaXRrYSBCb3JvdWdoIAorVVMtQUstMDIyMzI6U2thZ3dheS1Ib29uYWgtQW5nb29uIAorVVMtQUstMDIyNDA6U291dGhlYXN0IEZhaXJiYW5rcyAKK1VTLUFLLTAyMjYxOlZhbGRlei1Db3Jkb3ZhIAorVVMtQUstMDIyNzA6V2FkZSBIYW1wdG9uIAorVVMtQUstMDIyODA6V3JhbmdlbGwtUGV0ZXJzYnVyZyAKK1VTLUFLLTAyMjgyOllha3V0YXQgQm9yb3VnaAorVVMtQUstMDIyOTA6WXVrb24tS295dWt1ayAKKyMgdW5kZXIgQWRtaW4gTGV2ZWxbMV0gSURbMDFdOkFsYWJhbWEgCitVUy1BTC0wMTAwMTpBdXRhdWdhIENvdW50eSAKK1VTLUFMLTAxMDAzOkJhbGR3aW4gQ291bnR5IAorVVMtQUwtMDEwMDU6QmFyYm91ciBDb3VudHkgCitVUy1BTC0wMTAwNzpCaWJiIENvdW50eSAKK1VTLUFMLTAxMDA5OkJsb3VudCBDb3VudHkgCitVUy1BTC0wMTAxMTpCdWxsb2NrIENvdW50eSAKK1VTLUFMLTAxMDEzOkJ1dGxlciBDb3VudHkgCitVUy1BTC0wMTAxNTpDYWxob3VuIENvdW50eSAKK1VTLUFMLTAxMDE3OkNoYW1iZXJzIENvdW50eSAKK1VTLUFMLTAxMDE5OkNoZXJva2VlIENvdW50eSAKK1VTLUFMLTAxMDIxOkNoaWx0b24gQ291bnR5IAorVVMtQUwtMDEwMjM6Q2hvY3RhdyBDb3VudHkgCitVUy1BTC0wMTAyNTpDbGFya2UgQ291bnR5IAorVVMtQUwtMDEwMjc6Q2xheSBDb3VudHkgCitVUy1BTC0wMTAyOTpDbGVidXJuZSBDb3VudHkgCitVUy1BTC0wMTAzMTpDb2ZmZWUgQ291bnR5IAorVVMtQUwtMDEwMzM6Q29sYmVydCBDb3VudHkgCitVUy1BTC0wMTAzNTpDb25lY3VoIENvdW50eSAKK1VTLUFMLTAxMDM3OkNvb3NhIENvdW50eSAKK1VTLUFMLTAxMDM5OkNvdmluZ3RvbiBDb3VudHkgCitVUy1BTC0wMTA0MTpDcmVuc2hhdyBDb3VudHkgCitVUy1BTC0wMTA0MzpDdWxsbWFuIENvdW50eSAKK1VTLUFMLTAxMDQ1OkRhbGUgQ291bnR5IAorVVMtQUwtMDEwNDc6RGFsbGFzIENvdW50eSAKK1VTLUFMLTAxMDQ5OkRlS2FsYiBDb3VudHkgCitVUy1BTC0wMTA1MTpFbG1vcmUgQ291bnR5IAorVVMtQUwtMDEwNTM6RXNjYW1iaWEgQ291bnR5IAorVVMtQUwtMDEwNTU6RXRvd2FoIENvdW50eSAKK1VTLUFMLTAxMDU3OkZheWV0dGUgQ291bnR5IAorVVMtQUwtMDEwNTk6RnJhbmtsaW4gQ291bnR5IAorVVMtQUwtMDEwNjE6R2VuZXZhIENvdW50eSAKK1VTLUFMLTAxMDYzOkdyZWVuZSBDb3VudHkgCitVUy1BTC0wMTA2NTpIYWxlIENvdW50eSAKK1VTLUFMLTAxMDY3OkhlbnJ5IENvdW50eSAKK1VTLUFMLTAxMDY5OkhvdXN0b24gQ291bnR5IAorVVMtQUwtMDEwNzE6SmFja3NvbiBDb3VudHkgCitVUy1BTC0wMTA3MzpKZWZmZXJzb24gQ291bnR5IAorVVMtQUwtMDEwNzU6TGFtYXIgQ291bnR5IAorVVMtQUwtMDEwNzc6TGF1ZGVyZGFsZSBDb3VudHkgCitVUy1BTC0wMTA3OTpMYXdyZW5jZSBDb3VudHkgCitVUy1BTC0wMTA4MTpMZWUgQ291bnR5IAorVVMtQUwtMDEwODM6TGltZXN0b25lIENvdW50eSAKK1VTLUFMLTAxMDg1Okxvd25kZXMgQ291bnR5IAorVVMtQUwtMDEwODc6TWFjb24gQ291bnR5IAorVVMtQUwtMDEwODk6TWFkaXNvbiBDb3VudHkgCitVUy1BTC0wMTA5MTpNYXJlbmdvIENvdW50eSAKK1VTLUFMLTAxMDkzOk1hcmlvbiBDb3VudHkgCitVUy1BTC0wMTA5NTpNYXJzaGFsbCBDb3VudHkgCitVUy1BTC0wMTA5NzpNb2JpbGUgQ291bnR5IAorVVMtQUwtMDEwOTk6TW9ucm9lIENvdW50eSAKK1VTLUFMLTAxMTAxOk1vbnRnb21lcnkgQ291bnR5IAorVVMtQUwtMDExMDM6TW9yZ2FuIENvdW50eSAKK1VTLUFMLTAxMTA1OlBlcnJ5IENvdW50eSAKK1VTLUFMLTAxMTA3OlBpY2tlbnMgQ291bnR5IAorVVMtQUwtMDExMDk6UGlrZSBDb3VudHkgCitVUy1BTC0wMTExMTpSYW5kb2xwaCBDb3VudHkgCitVUy1BTC0wMTExMzpSdXNzZWxsIENvdW50eSAKK1VTLUFMLTAxMTE1OlN0LiBDbGFpciBDb3VudHkgCitVUy1BTC0wMTExNzpTaGVsYnkgQ291bnR5IAorVVMtQUwtMDExMTk6U3VtdGVyIENvdW50eSAKK1VTLUFMLTAxMTIxOlRhbGxhZGVnYSBDb3VudHkgCitVUy1BTC0wMTEyMzpUYWxsYXBvb3NhIENvdW50eSAKK1VTLUFMLTAxMTI1OlR1c2NhbG9vc2EgQ291bnR5IAorVVMtQUwtMDExMjc6V2Fsa2VyIENvdW50eSAKK1VTLUFMLTAxMTI5Oldhc2hpbmd0b24gQ291bnR5IAorVVMtQUwtMDExMzE6V2lsY294IENvdW50eSAKK1VTLUFMLTAxMTMzOldpbnN0b24gQ291bnR5IAorIyB1bmRlciBBZG1pbiBMZXZlbFsxXSBJRFswNV06QXJrYW5zYXMgCitVUy1BUi0wNTAwMTpBcmthbnNhcyBDb3VudHkgCitVUy1BUi0wNTAwMzpBc2hsZXkgQ291bnR5IAorVVMtQVItMDUwMDU6QmF4dGVyIENvdW50eSAKK1VTLUFSLTA1MDA3OkJlbnRvbiBDb3VudHkgCitVUy1BUi0wNTAwOTpCb29uZSBDb3VudHkgCitVUy1BUi0wNTAxMTpCcmFkbGV5IENvdW50eSAKK1VTLUFSLTA1MDEzOkNhbGhvdW4gQ291bnR5IAorVVMtQVItMDUwMTU6Q2Fycm9sbCBDb3VudHkgCitVUy1BUi0wNTAxNzpDaGljb3QgQ291bnR5IAorVVMtQVItMDUwMTk6Q2xhcmsgQ291bnR5IAorVVMtQVItMDUwMjE6Q2xheSBDb3VudHkgCitVUy1BUi0wNTAyMzpDbGVidXJuZSBDb3VudHkgCitVUy1BUi0wNTAyNTpDbGV2ZWxhbmQgQ291bnR5IAorVVMtQVItMDUwMjc6Q29sdW1iaWEgQ291bnR5IAorVVMtQVItMDUwMjk6Q29ud2F5IENvdW50eSAKK1VTLUFSLTA1MDMxOkNyYWlnaGVhZCBDb3VudHkgCitVUy1BUi0wNTAzMzpDcmF3Zm9yZCBDb3VudHkgCitVUy1BUi0wNTAzNTpDcml0dGVuZGVuIENvdW50eSAKK1VTLUFSLTA1MDM3OkNyb3NzIENvdW50eSAKK1VTLUFSLTA1MDM5OkRhbGxhcyBDb3VudHkgCitVUy1BUi0wNTA0MTpEZXNoYSBDb3VudHkgCitVUy1BUi0wNTA0MzpEcmV3IENvdW50eSAKK1VTLUFSLTA1MDQ1OkZhdWxrbmVyIENvdW50eSAKK1VTLUFSLTA1MDQ3OkZyYW5rbGluIENvdW50eSAKK1VTLUFSLTA1MDQ5OkZ1bHRvbiBDb3VudHkgCitVUy1BUi0wNTA1MTpHYXJsYW5kIENvdW50eSAKK1VTLUFSLTA1MDUzOkdyYW50IENvdW50eSAKK1VTLUFSLTA1MDU1OkdyZWVuZSBDb3VudHkgCitVUy1BUi0wNTA1NzpIZW1wc3RlYWQgQ291bnR5IAorVVMtQVItMDUwNTk6SG90IFNwcmluZyBDb3VudHkgCitVUy1BUi0wNTA2MTpIb3dhcmQgQ291bnR5IAorVVMtQVItMDUwNjM6SW5kZXBlbmRlbmNlIENvdW50eSAKK1VTLUFSLTA1MDY1Okl6YXJkIENvdW50eSAKK1VTLUFSLTA1MDY3OkphY2tzb24gQ291bnR5IAorVVMtQVItMDUwNjk6SmVmZmVyc29uIENvdW50eSAKK1VTLUFSLTA1MDcxOkpvaG5zb24gQ291bnR5IAorVVMtQVItMDUwNzM6TGFmYXlldHRlIENvdW50eSAKK1VTLUFSLTA1MDc1Okxhd3JlbmNlIENvdW50eSAKK1VTLUFSLTA1MDc3OkxlZSBDb3VudHkgCitVUy1BUi0wNTA3OTpMaW5jb2xuIENvdW50eSAKK1VTLUFSLTA1MDgxOkxpdHRsZSBSaXZlciBDb3VudHkgCitVUy1BUi0wNTA4MzpMb2dhbiBDb3VudHkgCitVUy1BUi0wNTA4NTpMb25va2UgQ291bnR5IAorVVMtQVItMDUwODc6TWFkaXNvbiBDb3VudHkgCitVUy1BUi0wNTA4OTpNYXJpb24gQ291bnR5IAorVVMtQVItMDUwOTE6TWlsbGVyIENvdW50eSAKK1VTLUFSLTA1MDkzOk1pc3Npc3NpcHBpIENvdW50eSAKK1VTLUFSLTA1MDk1Ok1vbnJvZSBDb3VudHkgCitVUy1BUi0wNTA5NzpNb250Z29tZXJ5IENvdW50eSAKK1VTLUFSLTA1MDk5Ok5ldmFkYSBDb3VudHkgCitVUy1BUi0wNTEwMTpOZXd0b24gQ291bnR5IAorVVMtQVItMDUxMDM6T3VhY2hpdGEgQ291bnR5IAorVVMtQVItMDUxMDU6UGVycnkgQ291bnR5IAorVVMtQVItMDUxMDc6UGhpbGxpcHMgQ291bnR5IAorVVMtQVItMDUxMDk6UGlrZSBDb3VudHkgCitVUy1BUi0wNTExMTpQb2luc2V0dCBDb3VudHkgCitVUy1BUi0wNTExMzpQb2xrIENvdW50eSAKK1VTLUFSLTA1MTE1OlBvcGUgQ291bnR5IAorVVMtQVItMDUxMTc6UHJhaXJpZSBDb3VudHkgCitVUy1BUi0wNTExOTpQdWxhc2tpIENvdW50eSAKK1VTLUFSLTA1MTIxOlJhbmRvbHBoIENvdW50eSAKK1VTLUFSLTA1MTIzOlN0LiBGcmFuY2lzIENvdW50eSAKK1VTLUFSLTA1MTI1OlNhbGluZSBDb3VudHkgCitVUy1BUi0wNTEyNzpTY290dCBDb3VudHkgCitVUy1BUi0wNTEyOTpTZWFyY3kgQ291bnR5IAorVVMtQVItMDUxMzE6U2ViYXN0aWFuIENvdW50eSAKK1VTLUFSLTA1MTMzOlNldmllciBDb3VudHkgCitVUy1BUi0wNTEzNTpTaGFycCBDb3VudHkgCitVUy1BUi0wNTEzNzpTdG9uZSBDb3VudHkgCitVUy1BUi0wNTEzOTpVbmlvbiBDb3VudHkgCitVUy1BUi0wNTE0MTpWYW4gQnVyZW4gQ291bnR5IAorVVMtQVItMDUxNDM6V2FzaGluZ3RvbiBDb3VudHkgCitVUy1BUi0wNTE0NTpXaGl0ZSBDb3VudHkgCitVUy1BUi0wNTE0NzpXb29kcnVmZiBDb3VudHkgCitVUy1BUi0wNTE0OTpZZWxsIENvdW50eSAKKyMgdW5kZXIgQWRtaW4gTGV2ZWxbMV0gSURbMDRdOkFyaXpvbmEgCitVUy1BWi0wNDAwMTpBcGFjaGUgQ291bnR5IAorVVMtQVotMDQwMDM6Q29jaGlzZSBDb3VudHkgCitVUy1BWi0wNDAwNTpDb2NvbmlubyBDb3VudHkgCitVUy1BWi0wNDAwNzpHaWxhIENvdW50eSAKK1VTLUFaLTA0MDA5OkdyYWhhbSBDb3VudHkgCitVUy1BWi0wNDAxMTpHcmVlbmxlZSBDb3VudHkgCitVUy1BWi0wNDAxMjpMYSBQYXogQ291bnR5IAorVVMtQVotMDQwMTM6TWFyaWNvcGEgQ291bnR5IAorVVMtQVotMDQwMTU6TW9oYXZlIENvdW50eSAKK1VTLUFaLTA0MDE3Ok5hdmFqbyBDb3VudHkgCitVUy1BWi0wNDAxOTpQaW1hIENvdW50eSAKK1VTLUFaLTA0MDIxOlBpbmFsIENvdW50eSAKK1VTLUFaLTA0MDIzOlNhbnRhIENydXogQ291bnR5IAorVVMtQVotMDQwMjU6WWF2YXBhaSBDb3VudHkgCitVUy1BWi0wNDAyNzpZdW1hIENvdW50eSAKKyMgdW5kZXIgQWRtaW4gTGV2ZWxbMV0gSURbMDZdOkNhbGlmb3JuaWEgCitVUy1DQS0wNjAwMTpBbGFtZWRhIENvdW50eSAKK1VTLUNBLTA2MDAzOkFscGluZSBDb3VudHkgCitVUy1DQS0wNjAwNTpBbWFkb3IgQ291bnR5IAorVVMtQ0EtMDYwMDc6QnV0dGUgQ291bnR5IAorVVMtQ0EtMDYwMDk6Q2FsYXZlcmFzIENvdW50eSAKK1VTLUNBLTA2MDExOkNvbHVzYSBDb3VudHkgCitVUy1DQS0wNjAxMzpDb250cmEgQ29zdGEgQ291bnR5IAorVVMtQ0EtMDYwMTU6RGVsIE5vcnRlIENvdW50eSAKK1VTLUNBLTA2MDE3OkVsIERvcmFkbyBDb3VudHkgCitVUy1DQS0wNjAxOTpGcmVzbm8gQ291bnR5IAorVVMtQ0EtMDYwMjE6R2xlbm4gQ291bnR5IAorVVMtQ0EtMDYwMjM6SHVtYm9sZHQgQ291bnR5IAorVVMtQ0EtMDYwMjU6SW1wZXJpYWwgQ291bnR5IAorVVMtQ0EtMDYwMjc6SW55byBDb3VudHkgCitVUy1DQS0wNjAyOTpLZXJuIENvdW50eSAKK1VTLUNBLTA2MDMxOktpbmdzIENvdW50eSAKK1VTLUNBLTA2MDMzOkxha2UgQ291bnR5IAorVVMtQ0EtMDYwMzU6TGFzc2VuIENvdW50eSAKK1VTLUNBLTA2MDM3OkxvcyBBbmdlbGVzIENvdW50eSAKK1VTLUNBLTA2MDM5Ok1hZGVyYSBDb3VudHkgCitVUy1DQS0wNjA0MTpNYXJpbiBDb3VudHkgCitVUy1DQS0wNjA0MzpNYXJpcG9zYSBDb3VudHkgCitVUy1DQS0wNjA0NTpNZW5kb2Npbm8gQ291bnR5IAorVVMtQ0EtMDYwNDc6TWVyY2VkIENvdW50eSAKK1VTLUNBLTA2MDQ5Ok1vZG9jIENvdW50eSAKK1VTLUNBLTA2MDUxOk1vbm8gQ291bnR5IAorVVMtQ0EtMDYwNTM6TW9udGVyZXkgQ291bnR5IAorVVMtQ0EtMDYwNTU6TmFwYSBDb3VudHkgCitVUy1DQS0wNjA1NzpOZXZhZGEgQ291bnR5IAorVVMtQ0EtMDYwNTk6T3JhbmdlIENvdW50eSAKK1VTLUNBLTA2MDYxOlBsYWNlciBDb3VudHkgCitVUy1DQS0wNjA2MzpQbHVtYXMgQ291bnR5IAorVVMtQ0EtMDYwNjU6Uml2ZXJzaWRlIENvdW50eSAKK1VTLUNBLTA2MDY3OlNhY3JhbWVudG8gQ291bnR5IAorVVMtQ0EtMDYwNjk6U2FuIEJlbml0byBDb3VudHkgCitVUy1DQS0wNjA3MTpTYW4gQmVybmFyZGlubyBDb3VudHkgCitVUy1DQS0wNjA3MzpTYW4gRGllZ28gQ291bnR5IAorVVMtQ0EtMDYwNzU6U2FuIEZyYW5jaXNjbyBDb3VudHkgCitVUy1DQS0wNjA3NzpTYW4gSm9hcXVpbiBDb3VudHkgCitVUy1DQS0wNjA3OTpTYW4gTHVpcyBPYmlzcG8gQ291bnR5IAorVVMtQ0EtMDYwODE6U2FuIE1hdGVvIENvdW50eSAKK1VTLUNBLTA2MDgzOlNhbnRhIEJhcmJhcmEgQ291bnR5IAorVVMtQ0EtMDYwODU6U2FudGEgQ2xhcmEgQ291bnR5IAorVVMtQ0EtMDYwODc6U2FudGEgQ3J1eiBDb3VudHkgCitVUy1DQS0wNjA4OTpTaGFzdGEgQ291bnR5IAorVVMtQ0EtMDYwOTE6U2llcnJhIENvdW50eSAKK1VTLUNBLTA2MDkzOlNpc2tpeW91IENvdW50eSAKK1VTLUNBLTA2MDk1OlNvbGFubyBDb3VudHkgCitVUy1DQS0wNjA5NzpTb25vbWEgQ291bnR5IAorVVMtQ0EtMDYwOTk6U3RhbmlzbGF1cyBDb3VudHkgCitVUy1DQS0wNjEwMTpTdXR0ZXIgQ291bnR5IAorVVMtQ0EtMDYxMDM6VGVoYW1hIENvdW50eSAKK1VTLUNBLTA2MTA1OlRyaW5pdHkgQ291bnR5IAorVVMtQ0EtMDYxMDc6VHVsYXJlIENvdW50eSAKK1VTLUNBLTA2MTA5OlR1b2x1bW5lIENvdW50eSAKK1VTLUNBLTA2MTExOlZlbnR1cmEgQ291bnR5IAorVVMtQ0EtMDYxMTM6WW9sbyBDb3VudHkgCitVUy1DQS0wNjExNTpZdWJhIENvdW50eSAKKyMgdW5kZXIgQWRtaW4gTGV2ZWxbMV0gSURbMDhdOkNvbG9yYWRvIAorVVMtQ08tMDgwMDE6QWRhbXMgQ291bnR5IAorVVMtQ08tMDgwMDM6QWxhbW9zYSBDb3VudHkgCitVUy1DTy0wODAwNTpBcmFwYWhvZSBDb3VudHkgCitVUy1DTy0wODAwNzpBcmNodWxldGEgQ291bnR5IAorVVMtQ08tMDgwMDk6QmFjYSBDb3VudHkgCitVUy1DTy0wODAxMTpCZW50IENvdW50eSAKK1VTLUNPLTA4MDEzOkJvdWxkZXIgQ291bnR5IAorVVMtQ08tMDgwMTU6Q2hhZmZlZSBDb3VudHkgCitVUy1DTy0wODAxNzpDaGV5ZW5uZSBDb3VudHkgCitVUy1DTy0wODAxOTpDbGVhciBDcmVlayBDb3VudHkgCitVUy1DTy0wODAyMTpDb25lam9zIENvdW50eSAKK1VTLUNPLTA4MDIzOkNvc3RpbGxhIENvdW50eSAKK1VTLUNPLTA4MDI1OkNyb3dsZXkgQ291bnR5IAorVVMtQ08tMDgwMjc6Q3VzdGVyIENvdW50eSAKK1VTLUNPLTA4MDI5OkRlbHRhIENvdW50eSAKK1VTLUNPLTA4MDMxOkRlbnZlciBDb3VudHkgCitVUy1DTy0wODAzMzpEb2xvcmVzIENvdW50eSAKK1VTLUNPLTA4MDM1OkRvdWdsYXMgQ291bnR5IAorVVMtQ08tMDgwMzc6RWFnbGUgQ291bnR5IAorVVMtQ08tMDgwMzk6RWxiZXJ0IENvdW50eSAKK1VTLUNPLTA4MDQxOkVsIFBhc28gQ291bnR5IAorVVMtQ08tMDgwNDM6RnJlbW9udCBDb3VudHkgCitVUy1DTy0wODA0NTpHYXJmaWVsZCBDb3VudHkgCitVUy1DTy0wODA0NzpHaWxwaW4gQ291bnR5IAorVVMtQ08tMDgwNDk6R3JhbmQgQ291bnR5IAorVVMtQ08tMDgwNTE6R3Vubmlzb24gQ291bnR5IAorVVMtQ08tMDgwNTM6SGluc2RhbGUgQ291bnR5IAorVVMtQ08tMDgwNTU6SHVlcmZhbm8gQ291bnR5IAorVVMtQ08tMDgwNTc6SmFja3NvbiBDb3VudHkgCitVUy1DTy0wODA1OTpKZWZmZXJzb24gQ291bnR5IAorVVMtQ08tMDgwNjE6S2lvd2EgQ291bnR5IAorVVMtQ08tMDgwNjM6S2l0IENhcnNvbiBDb3VudHkgCitVUy1DTy0wODA2NTpMYWtlIENvdW50eSAKK1VTLUNPLTA4MDY3OkxhIFBsYXRhIENvdW50eSAKK1VTLUNPLTA4MDY5OkxhcmltZXIgQ291bnR5IAorVVMtQ08tMDgwNzE6TGFzIEFuaW1hcyBDb3VudHkgCitVUy1DTy0wODA3MzpMaW5jb2xuIENvdW50eSAKK1VTLUNPLTA4MDc1OkxvZ2FuIENvdW50eSAKK1VTLUNPLTA4MDc3Ok1lc2EgQ291bnR5IAorVVMtQ08tMDgwNzk6TWluZXJhbCBDb3VudHkgCitVUy1DTy0wODA4MTpNb2ZmYXQgQ291bnR5IAorVVMtQ08tMDgwODM6TW9udGV6dW1hIENvdW50eSAKK1VTLUNPLTA4MDg1Ok1vbnRyb3NlIENvdW50eSAKK1VTLUNPLTA4MDg3Ok1vcmdhbiBDb3VudHkgCitVUy1DTy0wODA4OTpPdGVybyBDb3VudHkgCitVUy1DTy0wODA5MTpPdXJheSBDb3VudHkgCitVUy1DTy0wODA5MzpQYXJrIENvdW50eSAKK1VTLUNPLTA4MDk1OlBoaWxsaXBzIENvdW50eSAKK1VTLUNPLTA4MDk3OlBpdGtpbiBDb3VudHkgCitVUy1DTy0wODA5OTpQcm93ZXJzIENvdW50eSAKK1VTLUNPLTA4MTAxOlB1ZWJsbyBDb3VudHkgCitVUy1DTy0wODEwMzpSaW8gQmxhbmNvIENvdW50eSAKK1VTLUNPLTA4MTA1OlJpbyBHcmFuZGUgQ291bnR5IAorVVMtQ08tMDgxMDc6Um91dHQgQ291bnR5IAorVVMtQ08tMDgxMDk6U2FndWFjaGUgQ291bnR5IAorVVMtQ08tMDgxMTE6U2FuIEp1YW4gQ291bnR5IAorVVMtQ08tMDgxMTM6U2FuIE1pZ3VlbCBDb3VudHkgCitVUy1DTy0wODExNTpTZWRnd2ljayBDb3VudHkgCitVUy1DTy0wODExNzpTdW1taXQgQ291bnR5IAorVVMtQ08tMDgxMTk6VGVsbGVyIENvdW50eSAKK1VTLUNPLTA4MTIxOldhc2hpbmd0b24gQ291bnR5IAorVVMtQ08tMDgxMjM6V2VsZCBDb3VudHkgCitVUy1DTy0wODEyNTpZdW1hIENvdW50eSAKKyMgdW5kZXIgQWRtaW4gTGV2ZWxbMV0gSURbMDldOkNvbm5lY3RpY3V0IAorVVMtQ1QtMDkwMDE6RmFpcmZpZWxkIENvdW50eSAKK1VTLUNULTA5MDAzOkhhcnRmb3JkIENvdW50eSAKK1VTLUNULTA5MDA1OkxpdGNoZmllbGQgQ291bnR5IAorVVMtQ1QtMDkwMDc6TWlkZGxlc2V4IENvdW50eSAKK1VTLUNULTA5MDA5Ok5ldyBIYXZlbiBDb3VudHkgCitVUy1DVC0wOTAxMTpOZXcgTG9uZG9uIENvdW50eSAKK1VTLUNULTA5MDEzOlRvbGxhbmQgQ291bnR5IAorVVMtQ1QtMDkwMTU6V2luZGhhbSBDb3VudHkgCisjIHVuZGVyIEFkbWluIExldmVsWzFdIElEWzExXTpEaXN0cmljdCBvZiBDb2x1bWJpYSAKK1VTLURDLTExMDAxOkRpc3RyaWN0IG9mIENvbHVtYmlhIAorIyB1bmRlciBBZG1pbiBMZXZlbFsxXSBJRFsxMF06RGVsYXdhcmUgCitVUy1ERS0xMDAwMTpLZW50IENvdW50eSAKK1VTLURFLTEwMDAzOk5ldyBDYXN0bGUgQ291bnR5IAorVVMtREUtMTAwMDU6U3Vzc2V4IENvdW50eSAKKyMgdW5kZXIgQWRtaW4gTGV2ZWxbMV0gSURbMTJdOkZsb3JpZGEgCitVUy1GTC0xMjAwMTpBbGFjaHVhIENvdW50eSAKK1VTLUZMLTEyMDAzOkJha2VyIENvdW50eSAKK1VTLUZMLTEyMDA1OkJheSBDb3VudHkgCitVUy1GTC0xMjAwNzpCcmFkZm9yZCBDb3VudHkgCitVUy1GTC0xMjAwOTpCcmV2YXJkIENvdW50eSAKK1VTLUZMLTEyMDExOkJyb3dhcmQgQ291bnR5IAorVVMtRkwtMTIwMTM6Q2FsaG91biBDb3VudHkgCitVUy1GTC0xMjAxNTpDaGFybG90dGUgQ291bnR5IAorVVMtRkwtMTIwMTc6Q2l0cnVzIENvdW50eSAKK1VTLUZMLTEyMDE5OkNsYXkgQ291bnR5IAorVVMtRkwtMTIwMjE6Q29sbGllciBDb3VudHkgCitVUy1GTC0xMjAyMzpDb2x1bWJpYSBDb3VudHkgCitVUy1GTC0xMjAyNzpEZVNvdG8gQ291bnR5IAorVVMtRkwtMTIwMjk6RGl4aWUgQ291bnR5IAorVVMtRkwtMTIwMzE6RHV2YWwgQ291bnR5IAorVVMtRkwtMTIwMzM6RXNjYW1iaWEgQ291bnR5IAorVVMtRkwtMTIwMzU6RmxhZ2xlciBDb3VudHkgCitVUy1GTC0xMjAzNzpGcmFua2xpbiBDb3VudHkgCitVUy1GTC0xMjAzOTpHYWRzZGVuIENvdW50eSAKK1VTLUZMLTEyMDQxOkdpbGNocmlzdCBDb3VudHkgCitVUy1GTC0xMjA0MzpHbGFkZXMgQ291bnR5IAorVVMtRkwtMTIwNDU6R3VsZiBDb3VudHkgCitVUy1GTC0xMjA0NzpIYW1pbHRvbiBDb3VudHkgCitVUy1GTC0xMjA0OTpIYXJkZWUgQ291bnR5IAorVVMtRkwtMTIwNTE6SGVuZHJ5IENvdW50eSAKK1VTLUZMLTEyMDUzOkhlcm5hbmRvIENvdW50eSAKK1VTLUZMLTEyMDU1OkhpZ2hsYW5kcyBDb3VudHkgCitVUy1GTC0xMjA1NzpIaWxsc0Jvcm91Z2ggQ291bnR5CitVUy1GTC0xMjA1OTpIb2xtZXMgQ291bnR5IAorVVMtRkwtMTIwNjE6SW5kaWFuIFJpdmVyIENvdW50eSAKK1VTLUZMLTEyMDYzOkphY2tzb24gQ291bnR5IAorVVMtRkwtMTIwNjU6SmVmZmVyc29uIENvdW50eSAKK1VTLUZMLTEyMDY3OkxhZmF5ZXR0ZSBDb3VudHkgCitVUy1GTC0xMjA2OTpMYWtlIENvdW50eSAKK1VTLUZMLTEyMDcxOkxlZSBDb3VudHkgCitVUy1GTC0xMjA3MzpMZW9uIENvdW50eSAKK1VTLUZMLTEyMDc1OkxldnkgQ291bnR5IAorVVMtRkwtMTIwNzc6TGliZXJ0eSBDb3VudHkgCitVUy1GTC0xMjA3OTpNYWRpc29uIENvdW50eSAKK1VTLUZMLTEyMDgxOk1hbmF0ZWUgQ291bnR5IAorVVMtRkwtMTIwODM6TWFyaW9uIENvdW50eSAKK1VTLUZMLTEyMDg1Ok1hcnRpbiBDb3VudHkgCitVUy1GTC0xMjA4NjpNaWFtaS1EYWRlIENvdW50eSAKK1VTLUZMLTEyMDg3Ok1vbnJvZSBDb3VudHkgCitVUy1GTC0xMjA4OTpOYXNzYXUgQ291bnR5IAorVVMtRkwtMTIwOTE6T2thbG9vc2EgQ291bnR5IAorVVMtRkwtMTIwOTM6T2tlZWNob2JlZSBDb3VudHkgCitVUy1GTC0xMjA5NTpPcmFuZ2UgQ291bnR5IAorVVMtRkwtMTIwOTc6T3NjZW9sYSBDb3VudHkgCitVUy1GTC0xMjA5OTpQYWxtIEJlYWNoIENvdW50eSAKK1VTLUZMLTEyMTAxOlBhc2NvIENvdW50eSAKK1VTLUZMLTEyMTAzOlBpbmVsbGFzIENvdW50eSAKK1VTLUZMLTEyMTA1OlBvbGsgQ291bnR5IAorVVMtRkwtMTIxMDc6UHV0bmFtIENvdW50eSAKK1VTLUZMLTEyMTA5OlN0LiBKb2hucyBDb3VudHkgCitVUy1GTC0xMjExMTpTdC4gTHVjaWUgQ291bnR5IAorVVMtRkwtMTIxMTM6U2FudGEgUm9zYSBDb3VudHkgCitVUy1GTC0xMjExNTpTYXJhc290YSBDb3VudHkgCitVUy1GTC0xMjExNzpTZW1pbm9sZSBDb3VudHkgCitVUy1GTC0xMjExOTpTdW10ZXIgQ291bnR5IAorVVMtRkwtMTIxMjE6U3V3YW5uZWUgQ291bnR5IAorVVMtRkwtMTIxMjM6VGF5bG9yIENvdW50eSAKK1VTLUZMLTEyMTI1OlVuaW9uIENvdW50eSAKK1VTLUZMLTEyMTI3OlZvbHVzaWEgQ291bnR5IAorVVMtRkwtMTIxMjk6V2FrdWxsYSBDb3VudHkgCitVUy1GTC0xMjEzMTpXYWx0b24gQ291bnR5IAorVVMtRkwtMTIxMzM6V2FzaGluZ3RvbiBDb3VudHkgCisjIHVuZGVyIEFkbWluIExldmVsWzFdIElEWzEzXTpHZW9yZ2lhIAorVVMtR0EtMTMwMDE6QXBwbGluZyBDb3VudHkgCitVUy1HQS0xMzAwMzpBdGtpbnNvbiBDb3VudHkgCitVUy1HQS0xMzAwNTpCYWNvbiBDb3VudHkgCitVUy1HQS0xMzAwNzpCYWtlciBDb3VudHkgCitVUy1HQS0xMzAwOTpCYWxkd2luIENvdW50eSAKK1VTLUdBLTEzMDExOkJhbmtzIENvdW50eSAKK1VTLUdBLTEzMDEzOkJhcnJvdyBDb3VudHkgCitVUy1HQS0xMzAxNTpCYXJ0b3cgQ291bnR5IAorVVMtR0EtMTMwMTc6QmVuIEhpbGwgQ291bnR5IAorVVMtR0EtMTMwMTk6QmVycmllbiBDb3VudHkgCitVUy1HQS0xMzAyMTpCaWJiIENvdW50eSAKK1VTLUdBLTEzMDIzOkJsZWNrbGV5IENvdW50eSAKK1VTLUdBLTEzMDI1OkJyYW50bGV5IENvdW50eSAKK1VTLUdBLTEzMDI3OkJyb29rcyBDb3VudHkgCitVUy1HQS0xMzAyOTpCcnlhbiBDb3VudHkgCitVUy1HQS0xMzAzMTpCdWxsb2NoIENvdW50eSAKK1VTLUdBLTEzMDMzOkJ1cmtlIENvdW50eSAKK1VTLUdBLTEzMDM1OkJ1dHRzIENvdW50eSAKK1VTLUdBLTEzMDM3OkNhbGhvdW4gQ291bnR5IAorVVMtR0EtMTMwMzk6Q2FtZGVuIENvdW50eSAKK1VTLUdBLTEzMDQzOkNhbmRsZXIgQ291bnR5IAorVVMtR0EtMTMwNDU6Q2Fycm9sbCBDb3VudHkgCitVUy1HQS0xMzA0NzpDYXRvb3NhIENvdW50eSAKK1VTLUdBLTEzMDQ5OkNoYXJsdG9uIENvdW50eSAKK1VTLUdBLTEzMDUxOkNoYXRoYW0gQ291bnR5IAorVVMtR0EtMTMwNTM6Q2hhdHRhaG9vY2hlZSBDb3VudHkgCitVUy1HQS0xMzA1NTpDaGF0dG9vZ2EgQ291bnR5IAorVVMtR0EtMTMwNTc6Q2hlcm9rZWUgQ291bnR5IAorVVMtR0EtMTMwNTk6Q2xhcmtlIENvdW50eSAKK1VTLUdBLTEzMDYxOkNsYXkgQ291bnR5IAorVVMtR0EtMTMwNjM6Q2xheXRvbiBDb3VudHkgCitVUy1HQS0xMzA2NTpDbGluY2ggQ291bnR5IAorVVMtR0EtMTMwNjc6Q29iYiBDb3VudHkgCitVUy1HQS0xMzA2OTpDb2ZmZWUgQ291bnR5IAorVVMtR0EtMTMwNzE6Q29scXVpdHQgQ291bnR5IAorVVMtR0EtMTMwNzM6Q29sdW1iaWEgQ291bnR5IAorVVMtR0EtMTMwNzU6Q29vayBDb3VudHkgCitVUy1HQS0xMzA3NzpDb3dldGEgQ291bnR5IAorVVMtR0EtMTMwNzk6Q3Jhd2ZvcmQgQ291bnR5IAorVVMtR0EtMTMwODE6Q3Jpc3AgQ291bnR5IAorVVMtR0EtMTMwODM6RGFkZSBDb3VudHkgCitVUy1HQS0xMzA4NTpEYXdzb24gQ291bnR5IAorVVMtR0EtMTMwODc6RGVjYXR1ciBDb3VudHkgCitVUy1HQS0xMzA4OTpEZUthbGIgQ291bnR5IAorVVMtR0EtMTMwOTE6RG9kZ2UgQ291bnR5IAorVVMtR0EtMTMwOTM6RG9vbHkgQ291bnR5IAorVVMtR0EtMTMwOTU6RG91Z2hlcnR5IENvdW50eSAKK1VTLUdBLTEzMDk3OkRvdWdsYXMgQ291bnR5IAorVVMtR0EtMTMwOTk6RWFybHkgQ291bnR5IAorVVMtR0EtMTMxMDE6RWNob2xzIENvdW50eSAKK1VTLUdBLTEzMTAzOkVmZmluZ2hhbSBDb3VudHkgCitVUy1HQS0xMzEwNTpFbGJlcnQgQ291bnR5IAorVVMtR0EtMTMxMDc6RW1hbnVlbCBDb3VudHkgCitVUy1HQS0xMzEwOTpFdmFucyBDb3VudHkgCitVUy1HQS0xMzExMTpGYW5uaW4gQ291bnR5IAorVVMtR0EtMTMxMTM6RmF5ZXR0ZSBDb3VudHkgCitVUy1HQS0xMzExNTpGbG95ZCBDb3VudHkgCitVUy1HQS0xMzExNzpGb3JzeXRoIENvdW50eSAKK1VTLUdBLTEzMTE5OkZyYW5rbGluIENvdW50eSAKK1VTLUdBLTEzMTIxOkZ1bHRvbiBDb3VudHkgCitVUy1HQS0xMzEyMzpHaWxtZXIgQ291bnR5IAorVVMtR0EtMTMxMjU6R2xhc2NvY2sgQ291bnR5IAorVVMtR0EtMTMxMjc6R2x5bm4gQ291bnR5IAorVVMtR0EtMTMxMjk6R29yZG9uIENvdW50eSAKK1VTLUdBLTEzMTMxOkdyYWR5IENvdW50eSAKK1VTLUdBLTEzMTMzOkdyZWVuZSBDb3VudHkgCitVUy1HQS0xMzEzNTpHd2lubmV0dCBDb3VudHkgCitVUy1HQS0xMzEzNzpIYWJlcnNoYW0gQ291bnR5IAorVVMtR0EtMTMxMzk6SGFsbCBDb3VudHkgCitVUy1HQS0xMzE0MTpIYW5jb2NrIENvdW50eSAKK1VTLUdBLTEzMTQzOkhhcmFsc29uIENvdW50eSAKK1VTLUdBLTEzMTQ1OkhhcnJpcyBDb3VudHkgCitVUy1HQS0xMzE0NzpIYXJ0IENvdW50eSAKK1VTLUdBLTEzMTQ5OkhlYXJkIENvdW50eSAKK1VTLUdBLTEzMTUxOkhlbnJ5IENvdW50eSAKK1VTLUdBLTEzMTUzOkhvdXN0b24gQ291bnR5IAorVVMtR0EtMTMxNTU6SXJ3aW4gQ291bnR5IAorVVMtR0EtMTMxNTc6SmFja3NvbiBDb3VudHkgCitVUy1HQS0xMzE1OTpKYXNwZXIgQ291bnR5IAorVVMtR0EtMTMxNjE6SmVmZiBEYXZpcyBDb3VudHkgCitVUy1HQS0xMzE2MzpKZWZmZXJzb24gQ291bnR5IAorVVMtR0EtMTMxNjU6SmVua2lucyBDb3VudHkgCitVUy1HQS0xMzE2NzpKb2huc29uIENvdW50eSAKK1VTLUdBLTEzMTY5OkpvbmVzIENvdW50eSAKK1VTLUdBLTEzMTcxOkxhbWFyIENvdW50eSAKK1VTLUdBLTEzMTczOkxhbmllciBDb3VudHkgCitVUy1HQS0xMzE3NTpMYXVyZW5zIENvdW50eSAKK1VTLUdBLTEzMTc3OkxlZSBDb3VudHkgCitVUy1HQS0xMzE3OTpMaWJlcnR5IENvdW50eSAKK1VTLUdBLTEzMTgxOkxpbmNvbG4gQ291bnR5IAorVVMtR0EtMTMxODM6TG9uZyBDb3VudHkgCitVUy1HQS0xMzE4NTpMb3duZGVzIENvdW50eSAKK1VTLUdBLTEzMTg3Okx1bXBraW4gQ291bnR5IAorVVMtR0EtMTMxODk6TWNEdWZmaWUgQ291bnR5IAorVVMtR0EtMTMxOTE6TWNJbnRvc2ggQ291bnR5IAorVVMtR0EtMTMxOTM6TWFjb24gQ291bnR5IAorVVMtR0EtMTMxOTU6TWFkaXNvbiBDb3VudHkgCitVUy1HQS0xMzE5NzpNYXJpb24gQ291bnR5IAorVVMtR0EtMTMxOTk6TWVyaXdldGhlciBDb3VudHkgCitVUy1HQS0xMzIwMTpNaWxsZXIgQ291bnR5IAorVVMtR0EtMTMyMDU6TWl0Y2hlbGwgQ291bnR5IAorVVMtR0EtMTMyMDc6TW9ucm9lIENvdW50eSAKK1VTLUdBLTEzMjA5Ok1vbnRnb21lcnkgQ291bnR5IAorVVMtR0EtMTMyMTE6TW9yZ2FuIENvdW50eSAKK1VTLUdBLTEzMjEzOk11cnJheSBDb3VudHkgCitVUy1HQS0xMzIxNTpNdXNjb2dlZSBDb3VudHkgCitVUy1HQS0xMzIxNzpOZXd0b24gQ291bnR5IAorVVMtR0EtMTMyMTk6T2NvbmVlIENvdW50eSAKK1VTLUdBLTEzMjIxOk9nbGV0aG9ycGUgQ291bnR5IAorVVMtR0EtMTMyMjM6UGF1bGRpbmcgQ291bnR5IAorVVMtR0EtMTMyMjU6UGVhY2ggQ291bnR5IAorVVMtR0EtMTMyMjc6UGlja2VucyBDb3VudHkgCitVUy1HQS0xMzIyOTpQaWVyY2UgQ291bnR5IAorVVMtR0EtMTMyMzE6UGlrZSBDb3VudHkgCitVUy1HQS0xMzIzMzpQb2xrIENvdW50eSAKK1VTLUdBLTEzMjM1OlB1bGFza2kgQ291bnR5IAorVVMtR0EtMTMyMzc6UHV0bmFtIENvdW50eSAKK1VTLUdBLTEzMjM5OlF1aXRtYW4gQ291bnR5IAorVVMtR0EtMTMyNDE6UmFidW4gQ291bnR5IAorVVMtR0EtMTMyNDM6UmFuZG9scGggQ291bnR5IAorVVMtR0EtMTMyNDU6UmljaG1vbmQgQ291bnR5IAorVVMtR0EtMTMyNDc6Um9ja2RhbGUgQ291bnR5IAorVVMtR0EtMTMyNDk6U2NobGV5IENvdW50eSAKK1VTLUdBLTEzMjUxOlNjcmV2ZW4gQ291bnR5IAorVVMtR0EtMTMyNTM6U2VtaW5vbGUgQ291bnR5IAorVVMtR0EtMTMyNTU6U3BhbGRpbmcgQ291bnR5IAorVVMtR0EtMTMyNTc6U3RlcGhlbnMgQ291bnR5IAorVVMtR0EtMTMyNTk6U3Rld2FydCBDb3VudHkgCitVUy1HQS0xMzI2MTpTdW10ZXIgQ291bnR5IAorVVMtR0EtMTMyNjM6VGFsYm90IENvdW50eSAKK1VTLUdBLTEzMjY1OlRhbGlhZmVycm8gQ291bnR5IAorVVMtR0EtMTMyNjc6VGF0dG5hbGwgQ291bnR5IAorVVMtR0EtMTMyNjk6VGF5bG9yIENvdW50eSAKK1VTLUdBLTEzMjcxOlRlbGZhaXIgQ291bnR5IAorVVMtR0EtMTMyNzM6VGVycmVsbCBDb3VudHkgCitVUy1HQS0xMzI3NTpUaG9tYXMgQ291bnR5IAorVVMtR0EtMTMyNzc6VGlmdCBDb3VudHkgCitVUy1HQS0xMzI3OTpUb29tYnMgQ291bnR5IAorVVMtR0EtMTMyODE6VG93bnMgQ291bnR5IAorVVMtR0EtMTMyODM6VHJldXRsZW4gQ291bnR5IAorVVMtR0EtMTMyODU6VHJvdXAgQ291bnR5IAorVVMtR0EtMTMyODc6VHVybmVyIENvdW50eSAKK1VTLUdBLTEzMjg5OlR3aWdncyBDb3VudHkgCitVUy1HQS0xMzI5MTpVbmlvbiBDb3VudHkgCitVUy1HQS0xMzI5MzpVcHNvbiBDb3VudHkgCitVUy1HQS0xMzI5NTpXYWxrZXIgQ291bnR5IAorVVMtR0EtMTMyOTc6V2FsdG9uIENvdW50eSAKK1VTLUdBLTEzMjk5OldhcmUgQ291bnR5IAorVVMtR0EtMTMzMDE6V2FycmVuIENvdW50eSAKK1VTLUdBLTEzMzAzOldhc2hpbmd0b24gQ291bnR5IAorVVMtR0EtMTMzMDU6V2F5bmUgQ291bnR5IAorVVMtR0EtMTMzMDc6V2Vic3RlciBDb3VudHkgCitVUy1HQS0xMzMwOTpXaGVlbGVyIENvdW50eSAKK1VTLUdBLTEzMzExOldoaXRlIENvdW50eSAKK1VTLUdBLTEzMzEzOldoaXRmaWVsZCBDb3VudHkgCitVUy1HQS0xMzMxNTpXaWxjb3ggQ291bnR5IAorVVMtR0EtMTMzMTc6V2lsa2VzIENvdW50eSAKK1VTLUdBLTEzMzE5OldpbGtpbnNvbiBDb3VudHkgCitVUy1HQS0xMzMyMTpXb3J0aCBDb3VudHkgCisjIHVuZGVyIEFkbWluIExldmVsWzFdIElEWzE1XTpIYXdhaWkgCitVUy1ISS0xNTAwMTpIYXdhaWkgQ291bnR5IAorVVMtSEktMTUwMDM6SG9ub2x1bHUgQ291bnR5IAorVVMtSEktMTUwMDU6S2FsYXdhbyBDb3VudHkgCitVUy1ISS0xNTAwNzpLYXVhaSBDb3VudHkgCitVUy1ISS0xNTAwOTpNYXVpIENvdW50eSAKKyMgdW5kZXIgQWRtaW4gTGV2ZWxbMV0gSURbMTldOklvd2EgCitVUy1JQS0xOTAwMTpBZGFpciBDb3VudHkgCitVUy1JQS0xOTAwMzpBZGFtcyBDb3VudHkgCitVUy1JQS0xOTAwNTpBbGxhbWFrZWUgQ291bnR5IAorVVMtSUEtMTkwMDc6QXBwYW5vb3NlIENvdW50eSAKK1VTLUlBLTE5MDA5OkF1ZHVib24gQ291bnR5IAorVVMtSUEtMTkwMTE6QmVudG9uIENvdW50eSAKK1VTLUlBLTE5MDEzOkJsYWNrIEhhd2sgQ291bnR5IAorVVMtSUEtMTkwMTU6Qm9vbmUgQ291bnR5IAorVVMtSUEtMTkwMTc6QnJlbWVyIENvdW50eSAKK1VTLUlBLTE5MDE5OkJ1Y2hhbmFuIENvdW50eSAKK1VTLUlBLTE5MDIxOkJ1ZW5hIFZpc3RhIENvdW50eSAKK1VTLUlBLTE5MDIzOkJ1dGxlciBDb3VudHkgCitVUy1JQS0xOTAyNTpDYWxob3VuIENvdW50eSAKK1VTLUlBLTE5MDI3OkNhcnJvbGwgQ291bnR5IAorVVMtSUEtMTkwMjk6Q2FzcyBDb3VudHkgCitVUy1JQS0xOTAzMTpDZWRhciBDb3VudHkgCitVUy1JQS0xOTAzMzpDZXJybyBHb3JkbyBDb3VudHkgCitVUy1JQS0xOTAzNTpDaGVyb2tlZSBDb3VudHkgCitVUy1JQS0xOTAzNzpDaGlja2FzYXcgQ291bnR5IAorVVMtSUEtMTkwMzk6Q2xhcmtlIENvdW50eSAKK1VTLUlBLTE5MDQxOkNsYXkgQ291bnR5IAorVVMtSUEtMTkwNDM6Q2xheXRvbiBDb3VudHkgCitVUy1JQS0xOTA0NTpDbGludG9uIENvdW50eSAKK1VTLUlBLTE5MDQ3OkNyYXdmb3JkIENvdW50eSAKK1VTLUlBLTE5MDQ5OkRhbGxhcyBDb3VudHkgCitVUy1JQS0xOTA1MTpEYXZpcyBDb3VudHkgCitVUy1JQS0xOTA1MzpEZWNhdHVyIENvdW50eSAKK1VTLUlBLTE5MDU1OkRlbGF3YXJlIENvdW50eSAKK1VTLUlBLTE5MDU3OkRlcyBNb2luZXMgQ291bnR5IAorVVMtSUEtMTkwNTk6RGlja2luc29uIENvdW50eSAKK1VTLUlBLTE5MDYxOkR1YnVxdWUgQ291bnR5IAorVVMtSUEtMTkwNjM6RW1tZXQgQ291bnR5IAorVVMtSUEtMTkwNjU6RmF5ZXR0ZSBDb3VudHkgCitVUy1JQS0xOTA2NzpGbG95ZCBDb3VudHkgCitVUy1JQS0xOTA2OTpGcmFua2xpbiBDb3VudHkgCitVUy1JQS0xOTA3MTpGcmVtb250IENvdW50eSAKK1VTLUlBLTE5MDczOkdyZWVuZSBDb3VudHkgCitVUy1JQS0xOTA3NTpHcnVuZHkgQ291bnR5IAorVVMtSUEtMTkwNzc6R3V0aHJpZSBDb3VudHkgCitVUy1JQS0xOTA3OTpIYW1pbHRvbiBDb3VudHkgCitVUy1JQS0xOTA4MTpIYW5jb2NrIENvdW50eSAKK1VTLUlBLTE5MDgzOkhhcmRpbiBDb3VudHkgCitVUy1JQS0xOTA4NTpIYXJyaXNvbiBDb3VudHkgCitVUy1JQS0xOTA4NzpIZW5yeSBDb3VudHkgCitVUy1JQS0xOTA4OTpIb3dhcmQgQ291bnR5IAorVVMtSUEtMTkwOTE6SHVtYm9sZHQgQ291bnR5IAorVVMtSUEtMTkwOTM6SWRhIENvdW50eSAKK1VTLUlBLTE5MDk1Oklvd2EgQ291bnR5IAorVVMtSUEtMTkwOTc6SmFja3NvbiBDb3VudHkgCitVUy1JQS0xOTA5OTpKYXNwZXIgQ291bnR5IAorVVMtSUEtMTkxMDE6SmVmZmVyc29uIENvdW50eSAKK1VTLUlBLTE5MTAzOkpvaG5zb24gQ291bnR5IAorVVMtSUEtMTkxMDU6Sm9uZXMgQ291bnR5IAorVVMtSUEtMTkxMDc6S2Vva3VrIENvdW50eSAKK1VTLUlBLTE5MTA5Oktvc3N1dGggQ291bnR5IAorVVMtSUEtMTkxMTE6TGVlIENvdW50eSAKK1VTLUlBLTE5MTEzOkxpbm4gQ291bnR5IAorVVMtSUEtMTkxMTU6TG91aXNhIENvdW50eSAKK1VTLUlBLTE5MTE3Okx1Y2FzIENvdW50eSAKK1VTLUlBLTE5MTE5Okx5b24gQ291bnR5IAorVVMtSUEtMTkxMjE6TWFkaXNvbiBDb3VudHkgCitVUy1JQS0xOTEyMzpNYWhhc2thIENvdW50eSAKK1VTLUlBLTE5MTI1Ok1hcmlvbiBDb3VudHkgCitVUy1JQS0xOTEyNzpNYXJzaGFsbCBDb3VudHkgCitVUy1JQS0xOTEyOTpNaWxscyBDb3VudHkgCitVUy1JQS0xOTEzMTpNaXRjaGVsbCBDb3VudHkgCitVUy1JQS0xOTEzMzpNb25vbmEgQ291bnR5IAorVVMtSUEtMTkxMzU6TW9ucm9lIENvdW50eSAKK1VTLUlBLTE5MTM3Ok1vbnRnb21lcnkgQ291bnR5IAorVVMtSUEtMTkxMzk6TXVzY2F0aW5lIENvdW50eSAKK1VTLUlBLTE5MTQxOk8nQnJpZW4gQ291bnR5IAorVVMtSUEtMTkxNDM6T3NjZW9sYSBDb3VudHkgCitVUy1JQS0xOTE0NTpQYWdlIENvdW50eSAKK1VTLUlBLTE5MTQ3OlBhbG8gQWx0byBDb3VudHkgCitVUy1JQS0xOTE0OTpQbHltb3V0aCBDb3VudHkgCitVUy1JQS0xOTE1MTpQb2NhaG9udGFzIENvdW50eSAKK1VTLUlBLTE5MTUzOlBvbGsgQ291bnR5IAorVVMtSUEtMTkxNTU6UG90dGF3YXR0YW1pZSBDb3VudHkgCitVUy1JQS0xOTE1NzpQb3dlc2hpZWsgQ291bnR5IAorVVMtSUEtMTkxNTk6UmluZ2dvbGQgQ291bnR5IAorVVMtSUEtMTkxNjE6U2FjIENvdW50eSAKK1VTLUlBLTE5MTYzOlNjb3R0IENvdW50eSAKK1VTLUlBLTE5MTY1OlNoZWxieSBDb3VudHkgCitVUy1JQS0xOTE2NzpTaW91eCBDb3VudHkgCitVUy1JQS0xOTE2OTpTdG9yeSBDb3VudHkgCitVUy1JQS0xOTE3MTpUYW1hIENvdW50eSAKK1VTLUlBLTE5MTczOlRheWxvciBDb3VudHkgCitVUy1JQS0xOTE3NTpVbmlvbiBDb3VudHkgCitVUy1JQS0xOTE3NzpWYW4gQnVyZW4gQ291bnR5IAorVVMtSUEtMTkxNzk6V2FwZWxsbyBDb3VudHkgCitVUy1JQS0xOTE4MTpXYXJyZW4gQ291bnR5IAorVVMtSUEtMTkxODM6V2FzaGluZ3RvbiBDb3VudHkgCitVUy1JQS0xOTE4NTpXYXluZSBDb3VudHkgCitVUy1JQS0xOTE4NzpXZWJzdGVyIENvdW50eSAKK1VTLUlBLTE5MTg5Oldpbm5lYmFnbyBDb3VudHkgCitVUy1JQS0xOTE5MTpXaW5uZXNoaWVrIENvdW50eSAKK1VTLUlBLTE5MTkzOldvb2RidXJ5IENvdW50eSAKK1VTLUlBLTE5MTk1OldvcnRoIENvdW50eSAKK1VTLUlBLTE5MTk3OldyaWdodCBDb3VudHkgCisjIHVuZGVyIEFkbWluIExldmVsWzFdIElEWzE2XTpJZGFobyAKK1VTLUlELTE2MDAxOkFkYSBDb3VudHkgCitVUy1JRC0xNjAwMzpBZGFtcyBDb3VudHkgCitVUy1JRC0xNjAwNTpCYW5ub2NrIENvdW50eSAKK1VTLUlELTE2MDA3OkJlYXIgTGFrZSBDb3VudHkgCitVUy1JRC0xNjAwOTpCZW5ld2FoIENvdW50eSAKK1VTLUlELTE2MDExOkJpbmdoYW0gQ291bnR5IAorVVMtSUQtMTYwMTM6QmxhaW5lIENvdW50eSAKK1VTLUlELTE2MDE1OkJvaXNlIENvdW50eSAKK1VTLUlELTE2MDE3OkJvbm5lciBDb3VudHkgCitVUy1JRC0xNjAxOTpCb25uZXZpbGxlIENvdW50eSAKK1VTLUlELTE2MDIxOkJvdW5kYXJ5IENvdW50eSAKK1VTLUlELTE2MDIzOkJ1dHRlIENvdW50eSAKK1VTLUlELTE2MDI1OkNhbWFzIENvdW50eSAKK1VTLUlELTE2MDI3OkNhbnlvbiBDb3VudHkgCitVUy1JRC0xNjAyOTpDYXJpYm91IENvdW50eSAKK1VTLUlELTE2MDMxOkNhc3NpYSBDb3VudHkgCitVUy1JRC0xNjAzMzpDbGFyayBDb3VudHkgCitVUy1JRC0xNjAzNTpDbGVhcndhdGVyIENvdW50eSAKK1VTLUlELTE2MDM3OkN1c3RlciBDb3VudHkgCitVUy1JRC0xNjAzOTpFbG1vcmUgQ291bnR5IAorVVMtSUQtMTYwNDE6RnJhbmtsaW4gQ291bnR5IAorVVMtSUQtMTYwNDM6RnJlbW9udCBDb3VudHkgCitVUy1JRC0xNjA0NTpHZW0gQ291bnR5IAorVVMtSUQtMTYwNDc6R29vZGluZyBDb3VudHkgCitVUy1JRC0xNjA0OTpJZGFobyBDb3VudHkgCitVUy1JRC0xNjA1MTpKZWZmZXJzb24gQ291bnR5IAorVVMtSUQtMTYwNTM6SmVyb21lIENvdW50eSAKK1VTLUlELTE2MDU1Oktvb3RlbmFpIENvdW50eSAKK1VTLUlELTE2MDU3OkxhdGFoIENvdW50eSAKK1VTLUlELTE2MDU5OkxlbWhpIENvdW50eSAKK1VTLUlELTE2MDYxOkxld2lzIENvdW50eSAKK1VTLUlELTE2MDYzOkxpbmNvbG4gQ291bnR5IAorVVMtSUQtMTYwNjU6TWFkaXNvbiBDb3VudHkgCitVUy1JRC0xNjA2NzpNaW5pZG9rYSBDb3VudHkgCitVUy1JRC0xNjA2OTpOZXogUGVyY2UgQ291bnR5IAorVVMtSUQtMTYwNzE6T25laWRhIENvdW50eSAKK1VTLUlELTE2MDczOk93eWhlZSBDb3VudHkgCitVUy1JRC0xNjA3NTpQYXlldHRlIENvdW50eSAKK1VTLUlELTE2MDc3OlBvd2VyIENvdW50eSAKK1VTLUlELTE2MDc5OlNob3Nob25lIENvdW50eSAKK1VTLUlELTE2MDgxOlRldG9uIENvdW50eSAKK1VTLUlELTE2MDgzOlR3aW4gRmFsbHMgQ291bnR5IAorVVMtSUQtMTYwODU6VmFsbGV5IENvdW50eSAKK1VTLUlELTE2MDg3Oldhc2hpbmd0b24gQ291bnR5IAorIyB1bmRlciBBZG1pbiBMZXZlbFsxXSBJRFsxN106SWxsaW5vaXMgCitVUy1JTC0xNzAwMTpBZGFtcyBDb3VudHkgCitVUy1JTC0xNzAwMzpBbGV4YW5kZXIgQ291bnR5IAorVVMtSUwtMTcwMDU6Qm9uZCBDb3VudHkgCitVUy1JTC0xNzAwNzpCb29uZSBDb3VudHkgCitVUy1JTC0xNzAwOTpCcm93biBDb3VudHkgCitVUy1JTC0xNzAxMTpCdXJlYXUgQ291bnR5IAorVVMtSUwtMTcwMTM6Q2FsaG91biBDb3VudHkgCitVUy1JTC0xNzAxNTpDYXJyb2xsIENvdW50eSAKK1VTLUlMLTE3MDE3OkNhc3MgQ291bnR5IAorVVMtSUwtMTcwMTk6Q2hhbXBhaWduIENvdW50eSAKK1VTLUlMLTE3MDIxOkNocmlzdGlhbiBDb3VudHkgCitVUy1JTC0xNzAyMzpDbGFyayBDb3VudHkgCitVUy1JTC0xNzAyNTpDbGF5IENvdW50eSAKK1VTLUlMLTE3MDI3OkNsaW50b24gQ291bnR5IAorVVMtSUwtMTcwMjk6Q29sZXMgQ291bnR5IAorVVMtSUwtMTcwMzE6Q29vayBDb3VudHkgCitVUy1JTC0xNzAzMzpDcmF3Zm9yZCBDb3VudHkgCitVUy1JTC0xNzAzNTpDdW1iZXJsYW5kIENvdW50eSAKK1VTLUlMLTE3MDM3OkRlS2FsYiBDb3VudHkgCitVUy1JTC0xNzAzOTpEZSBXaXR0IENvdW50eSAKK1VTLUlMLTE3MDQxOkRvdWdsYXMgQ291bnR5IAorVVMtSUwtMTcwNDM6RHVQYWdlIENvdW50eSAKK1VTLUlMLTE3MDQ1OkVkZ2FyIENvdW50eSAKK1VTLUlMLTE3MDQ3OkVkd2FyZHMgQ291bnR5IAorVVMtSUwtMTcwNDk6RWZmaW5naGFtIENvdW50eSAKK1VTLUlMLTE3MDUxOkZheWV0dGUgQ291bnR5IAorVVMtSUwtMTcwNTM6Rm9yZCBDb3VudHkgCitVUy1JTC0xNzA1NTpGcmFua2xpbiBDb3VudHkgCitVUy1JTC0xNzA1NzpGdWx0b24gQ291bnR5IAorVVMtSUwtMTcwNTk6R2FsbGF0aW4gQ291bnR5IAorVVMtSUwtMTcwNjE6R3JlZW5lIENvdW50eSAKK1VTLUlMLTE3MDYzOkdydW5keSBDb3VudHkgCitVUy1JTC0xNzA2NTpIYW1pbHRvbiBDb3VudHkgCitVUy1JTC0xNzA2NzpIYW5jb2NrIENvdW50eSAKK1VTLUlMLTE3MDY5OkhhcmRpbiBDb3VudHkgCitVUy1JTC0xNzA3MTpIZW5kZXJzb24gQ291bnR5IAorVVMtSUwtMTcwNzM6SGVucnkgQ291bnR5IAorVVMtSUwtMTcwNzU6SXJvcXVvaXMgQ291bnR5IAorVVMtSUwtMTcwNzc6SmFja3NvbiBDb3VudHkgCitVUy1JTC0xNzA3OTpKYXNwZXIgQ291bnR5IAorVVMtSUwtMTcwODE6SmVmZmVyc29uIENvdW50eSAKK1VTLUlMLTE3MDgzOkplcnNleSBDb3VudHkgCitVUy1JTC0xNzA4NTpKbyBEYXZpZXNzIENvdW50eSAKK1VTLUlMLTE3MDg3OkpvaG5zb24gQ291bnR5IAorVVMtSUwtMTcwODk6S2FuZSBDb3VudHkgCitVUy1JTC0xNzA5MTpLYW5rYWtlZSBDb3VudHkgCitVUy1JTC0xNzA5MzpLZW5kYWxsIENvdW50eSAKK1VTLUlMLTE3MDk1Oktub3ggQ291bnR5IAorVVMtSUwtMTcwOTc6TGFrZSBDb3VudHkgCitVUy1JTC0xNzA5OTpMYSBTYWxsZSBDb3VudHkgCitVUy1JTC0xNzEwMTpMYXdyZW5jZSBDb3VudHkgCitVUy1JTC0xNzEwMzpMZWUgQ291bnR5IAorVVMtSUwtMTcxMDU6TGl2aW5nc3RvbiBDb3VudHkgCitVUy1JTC0xNzEwNzpMb2dhbiBDb3VudHkgCitVUy1JTC0xNzEwOTpNY0Rvbm91Z2ggQ291bnR5IAorVVMtSUwtMTcxMTE6TWNIZW5yeSBDb3VudHkgCitVUy1JTC0xNzExMzpNY0xlYW4gQ291bnR5IAorVVMtSUwtMTcxMTU6TWFjb24gQ291bnR5IAorVVMtSUwtMTcxMTc6TWFjb3VwaW4gQ291bnR5IAorVVMtSUwtMTcxMTk6TWFkaXNvbiBDb3VudHkgCitVUy1JTC0xNzEyMTpNYXJpb24gQ291bnR5IAorVVMtSUwtMTcxMjM6TWFyc2hhbGwgQ291bnR5IAorVVMtSUwtMTcxMjU6TWFzb24gQ291bnR5IAorVVMtSUwtMTcxMjc6TWFzc2FjIENvdW50eSAKK1VTLUlMLTE3MTI5Ok1lbmFyZCBDb3VudHkgCitVUy1JTC0xNzEzMTpNZXJjZXIgQ291bnR5IAorVVMtSUwtMTcxMzM6TW9ucm9lIENvdW50eSAKK1VTLUlMLTE3MTM1Ok1vbnRnb21lcnkgQ291bnR5IAorVVMtSUwtMTcxMzc6TW9yZ2FuIENvdW50eSAKK1VTLUlMLTE3MTM5Ok1vdWx0cmllIENvdW50eSAKK1VTLUlMLTE3MTQxOk9nbGUgQ291bnR5IAorVVMtSUwtMTcxNDM6UGVvcmlhIENvdW50eSAKK1VTLUlMLTE3MTQ1OlBlcnJ5IENvdW50eSAKK1VTLUlMLTE3MTQ3OlBpYXR0IENvdW50eSAKK1VTLUlMLTE3MTQ5OlBpa2UgQ291bnR5IAorVVMtSUwtMTcxNTE6UG9wZSBDb3VudHkgCitVUy1JTC0xNzE1MzpQdWxhc2tpIENvdW50eSAKK1VTLUlMLTE3MTU1OlB1dG5hbSBDb3VudHkgCitVUy1JTC0xNzE1NzpSYW5kb2xwaCBDb3VudHkgCitVUy1JTC0xNzE1OTpSaWNobGFuZCBDb3VudHkgCitVUy1JTC0xNzE2MTpSb2NrIElzbGFuZCBDb3VudHkgCitVUy1JTC0xNzE2MzpTdC4gQ2xhaXIgQ291bnR5IAorVVMtSUwtMTcxNjU6U2FsaW5lIENvdW50eSAKK1VTLUlMLTE3MTY3OlNhbmdhbW9uIENvdW50eSAKK1VTLUlMLTE3MTY5OlNjaHV5bGVyIENvdW50eSAKK1VTLUlMLTE3MTcxOlNjb3R0IENvdW50eSAKK1VTLUlMLTE3MTczOlNoZWxieSBDb3VudHkgCitVUy1JTC0xNzE3NTpTdGFyayBDb3VudHkgCitVUy1JTC0xNzE3NzpTdGVwaGVuc29uIENvdW50eSAKK1VTLUlMLTE3MTc5OlRhemV3ZWxsIENvdW50eSAKK1VTLUlMLTE3MTgxOlVuaW9uIENvdW50eSAKK1VTLUlMLTE3MTgzOlZlcm1pbGlvbiBDb3VudHkgCitVUy1JTC0xNzE4NTpXYWJhc2ggQ291bnR5IAorVVMtSUwtMTcxODc6V2FycmVuIENvdW50eSAKK1VTLUlMLTE3MTg5Oldhc2hpbmd0b24gQ291bnR5IAorVVMtSUwtMTcxOTE6V2F5bmUgQ291bnR5IAorVVMtSUwtMTcxOTM6V2hpdGUgQ291bnR5IAorVVMtSUwtMTcxOTU6V2hpdGVzaWRlIENvdW50eSAKK1VTLUlMLTE3MTk3OldpbGwgQ291bnR5IAorVVMtSUwtMTcxOTk6V2lsbGlhbXNvbiBDb3VudHkgCitVUy1JTC0xNzIwMTpXaW5uZWJhZ28gQ291bnR5IAorVVMtSUwtMTcyMDM6V29vZGZvcmQgQ291bnR5IAorIyB1bmRlciBBZG1pbiBMZXZlbFsxXSBJRFsxOF06SW5kaWFuYSAKK1VTLUlOLTE4MDAxOkFkYW1zIENvdW50eSAKK1VTLUlOLTE4MDAzOkFsbGVuIENvdW50eSAKK1VTLUlOLTE4MDA1OkJhcnRob2xvbWV3IENvdW50eSAKK1VTLUlOLTE4MDA3OkJlbnRvbiBDb3VudHkgCitVUy1JTi0xODAwOTpCbGFja2ZvcmQgQ291bnR5IAorVVMtSU4tMTgwMTE6Qm9vbmUgQ291bnR5IAorVVMtSU4tMTgwMTM6QnJvd24gQ291bnR5IAorVVMtSU4tMTgwMTU6Q2Fycm9sbCBDb3VudHkgCitVUy1JTi0xODAxNzpDYXNzIENvdW50eSAKK1VTLUlOLTE4MDE5OkNsYXJrIENvdW50eSAKK1VTLUlOLTE4MDIxOkNsYXkgQ291bnR5IAorVVMtSU4tMTgwMjM6Q2xpbnRvbiBDb3VudHkgCitVUy1JTi0xODAyNTpDcmF3Zm9yZCBDb3VudHkgCitVUy1JTi0xODAyNzpEYXZpZXNzIENvdW50eSAKK1VTLUlOLTE4MDI5OkRlYXJib3JuIENvdW50eSAKK1VTLUlOLTE4MDMxOkRlY2F0dXIgQ291bnR5IAorVVMtSU4tMTgwMzM6RGVLYWxiIENvdW50eSAKK1VTLUlOLTE4MDM1OkRlbGF3YXJlIENvdW50eSAKK1VTLUlOLTE4MDM3OkR1Ym9pcyBDb3VudHkgCitVUy1JTi0xODAzOTpFbGtoYXJ0IENvdW50eSAKK1VTLUlOLTE4MDQxOkZheWV0dGUgQ291bnR5IAorVVMtSU4tMTgwNDM6RmxveWQgQ291bnR5IAorVVMtSU4tMTgwNDU6Rm91bnRhaW4gQ291bnR5IAorVVMtSU4tMTgwNDc6RnJhbmtsaW4gQ291bnR5IAorVVMtSU4tMTgwNDk6RnVsdG9uIENvdW50eSAKK1VTLUlOLTE4MDUxOkdpYnNvbiBDb3VudHkgCitVUy1JTi0xODA1MzpHcmFudCBDb3VudHkgCitVUy1JTi0xODA1NTpHcmVlbmUgQ291bnR5IAorVVMtSU4tMTgwNTc6SGFtaWx0b24gQ291bnR5IAorVVMtSU4tMTgwNTk6SGFuY29jayBDb3VudHkgCitVUy1JTi0xODA2MTpIYXJyaXNvbiBDb3VudHkgCitVUy1JTi0xODA2MzpIZW5kcmlja3MgQ291bnR5IAorVVMtSU4tMTgwNjU6SGVucnkgQ291bnR5IAorVVMtSU4tMTgwNjc6SG93YXJkIENvdW50eSAKK1VTLUlOLTE4MDY5Okh1bnRpbmd0b24gQ291bnR5IAorVVMtSU4tMTgwNzE6SmFja3NvbiBDb3VudHkgCitVUy1JTi0xODA3MzpKYXNwZXIgQ291bnR5IAorVVMtSU4tMTgwNzU6SmF5IENvdW50eSAKK1VTLUlOLTE4MDc3OkplZmZlcnNvbiBDb3VudHkgCitVUy1JTi0xODA3OTpKZW5uaW5ncyBDb3VudHkgCitVUy1JTi0xODA4MTpKb2huc29uIENvdW50eSAKK1VTLUlOLTE4MDgzOktub3ggQ291bnR5IAorVVMtSU4tMTgwODU6S29zY2l1c2tvIENvdW50eSAKK1VTLUlOLTE4MDg3OkxhZ3JhbmdlIENvdW50eSAKK1VTLUlOLTE4MDg5Okxha2UgQ291bnR5IAorVVMtSU4tMTgwOTE6TGFQb3J0ZSBDb3VudHkgCitVUy1JTi0xODA5MzpMYXdyZW5jZSBDb3VudHkgCitVUy1JTi0xODA5NTpNYWRpc29uIENvdW50eSAKK1VTLUlOLTE4MDk3Ok1hcmlvbiBDb3VudHkgCitVUy1JTi0xODA5OTpNYXJzaGFsbCBDb3VudHkgCitVUy1JTi0xODEwMTpNYXJ0aW4gQ291bnR5IAorVVMtSU4tMTgxMDM6TWlhbWkgQ291bnR5IAorVVMtSU4tMTgxMDU6TW9ucm9lIENvdW50eSAKK1VTLUlOLTE4MTA3Ok1vbnRnb21lcnkgQ291bnR5IAorVVMtSU4tMTgxMDk6TW9yZ2FuIENvdW50eSAKK1VTLUlOLTE4MTExOk5ld3RvbiBDb3VudHkgCitVUy1JTi0xODExMzpOb2JsZSBDb3VudHkgCitVUy1JTi0xODExNTpPaGlvIENvdW50eSAKK1VTLUlOLTE4MTE3Ok9yYW5nZSBDb3VudHkgCitVUy1JTi0xODExOTpPd2VuIENvdW50eSAKK1VTLUlOLTE4MTIxOlBhcmtlIENvdW50eSAKK1VTLUlOLTE4MTIzOlBlcnJ5IENvdW50eSAKK1VTLUlOLTE4MTI1OlBpa2UgQ291bnR5IAorVVMtSU4tMTgxMjc6UG9ydGVyIENvdW50eSAKK1VTLUlOLTE4MTI5OlBvc2V5IENvdW50eSAKK1VTLUlOLTE4MTMxOlB1bGFza2kgQ291bnR5IAorVVMtSU4tMTgxMzM6UHV0bmFtIENvdW50eSAKK1VTLUlOLTE4MTM1OlJhbmRvbHBoIENvdW50eSAKK1VTLUlOLTE4MTM3OlJpcGxleSBDb3VudHkgCitVUy1JTi0xODEzOTpSdXNoIENvdW50eSAKK1VTLUlOLTE4MTQxOlN0LiBKb3NlcGggQ291bnR5IAorVVMtSU4tMTgxNDM6U2NvdHQgQ291bnR5IAorVVMtSU4tMTgxNDU6U2hlbGJ5IENvdW50eSAKK1VTLUlOLTE4MTQ3OlNwZW5jZXIgQ291bnR5IAorVVMtSU4tMTgxNDk6U3RhcmtlIENvdW50eSAKK1VTLUlOLTE4MTUxOlN0ZXViZW4gQ291bnR5IAorVVMtSU4tMTgxNTM6U3VsbGl2YW4gQ291bnR5IAorVVMtSU4tMTgxNTU6U3dpdHplcmxhbmQgQ291bnR5IAorVVMtSU4tMTgxNTc6VGlwcGVjYW5vZSBDb3VudHkgCitVUy1JTi0xODE1OTpUaXB0b24gQ291bnR5IAorVVMtSU4tMTgxNjE6VW5pb24gQ291bnR5IAorVVMtSU4tMTgxNjM6VmFuZGVyYnVyZ2ggQ291bnR5IAorVVMtSU4tMTgxNjU6VmVybWlsbGlvbiBDb3VudHkgCitVUy1JTi0xODE2NzpWaWdvIENvdW50eSAKK1VTLUlOLTE4MTY5OldhYmFzaCBDb3VudHkgCitVUy1JTi0xODE3MTpXYXJyZW4gQ291bnR5IAorVVMtSU4tMTgxNzM6V2FycmljayBDb3VudHkgCitVUy1JTi0xODE3NTpXYXNoaW5ndG9uIENvdW50eSAKK1VTLUlOLTE4MTc3OldheW5lIENvdW50eSAKK1VTLUlOLTE4MTc5OldlbGxzIENvdW50eSAKK1VTLUlOLTE4MTgxOldoaXRlIENvdW50eSAKK1VTLUlOLTE4MTgzOldoaXRsZXkgQ291bnR5IAorIyB1bmRlciBBZG1pbiBMZXZlbFsxXSBJRFsyMF06S2Fuc2FzIAorVVMtS1MtMjAwMDE6QWxsZW4gQ291bnR5IAorVVMtS1MtMjAwMDM6QW5kZXJzb24gQ291bnR5IAorVVMtS1MtMjAwMDU6QXRjaGlzb24gQ291bnR5IAorVVMtS1MtMjAwMDc6QmFyYmVyIENvdW50eSAKK1VTLUtTLTIwMDA5OkJhcnRvbiBDb3VudHkgCitVUy1LUy0yMDAxMTpCb3VyYm9uIENvdW50eSAKK1VTLUtTLTIwMDEzOkJyb3duIENvdW50eSAKK1VTLUtTLTIwMDE1OkJ1dGxlciBDb3VudHkgCitVUy1LUy0yMDAxNzpDaGFzZSBDb3VudHkgCitVUy1LUy0yMDAxOTpDaGF1dGF1cXVhIENvdW50eSAKK1VTLUtTLTIwMDIxOkNoZXJva2VlIENvdW50eSAKK1VTLUtTLTIwMDIzOkNoZXllbm5lIENvdW50eSAKK1VTLUtTLTIwMDI1OkNsYXJrIENvdW50eSAKK1VTLUtTLTIwMDI3OkNsYXkgQ291bnR5IAorVVMtS1MtMjAwMjk6Q2xvdWQgQ291bnR5IAorVVMtS1MtMjAwMzE6Q29mZmV5IENvdW50eSAKK1VTLUtTLTIwMDMzOkNvbWFuY2hlIENvdW50eSAKK1VTLUtTLTIwMDM1OkNvd2xleSBDb3VudHkgCitVUy1LUy0yMDAzNzpDcmF3Zm9yZCBDb3VudHkgCitVUy1LUy0yMDAzOTpEZWNhdHVyIENvdW50eSAKK1VTLUtTLTIwMDQxOkRpY2tpbnNvbiBDb3VudHkgCitVUy1LUy0yMDA0MzpEb25pcGhhbiBDb3VudHkgCitVUy1LUy0yMDA0NTpEb3VnbGFzIENvdW50eSAKK1VTLUtTLTIwMDQ3OkVkd2FyZHMgQ291bnR5IAorVVMtS1MtMjAwNDk6RWxrIENvdW50eSAKK1VTLUtTLTIwMDUxOkVsbGlzIENvdW50eSAKK1VTLUtTLTIwMDUzOkVsbHN3b3J0aCBDb3VudHkgCitVUy1LUy0yMDA1NTpGaW5uZXkgQ291bnR5IAorVVMtS1MtMjAwNTc6Rm9yZCBDb3VudHkgCitVUy1LUy0yMDA1OTpGcmFua2xpbiBDb3VudHkgCitVUy1LUy0yMDA2MTpHZWFyeSBDb3VudHkgCitVUy1LUy0yMDA2MzpHb3ZlIENvdW50eSAKK1VTLUtTLTIwMDY1OkdyYWhhbSBDb3VudHkgCitVUy1LUy0yMDA2NzpHcmFudCBDb3VudHkgCitVUy1LUy0yMDA2OTpHcmF5IENvdW50eSAKK1VTLUtTLTIwMDcxOkdyZWVsZXkgQ291bnR5IAorVVMtS1MtMjAwNzM6R3JlZW53b29kIENvdW50eSAKK1VTLUtTLTIwMDc1OkhhbWlsdG9uIENvdW50eSAKK1VTLUtTLTIwMDc3OkhhcnBlciBDb3VudHkgCitVUy1LUy0yMDA3OTpIYXJ2ZXkgQ291bnR5IAorVVMtS1MtMjAwODE6SGFza2VsbCBDb3VudHkgCitVUy1LUy0yMDA4MzpIb2RnZW1hbiBDb3VudHkgCitVUy1LUy0yMDA4NTpKYWNrc29uIENvdW50eSAKK1VTLUtTLTIwMDg3OkplZmZlcnNvbiBDb3VudHkgCitVUy1LUy0yMDA4OTpKZXdlbGwgQ291bnR5IAorVVMtS1MtMjAwOTE6Sm9obnNvbiBDb3VudHkgCitVUy1LUy0yMDA5MzpLZWFybnkgQ291bnR5IAorVVMtS1MtMjAwOTU6S2luZ21hbiBDb3VudHkgCitVUy1LUy0yMDA5NzpLaW93YSBDb3VudHkgCitVUy1LUy0yMDA5OTpMYWJldHRlIENvdW50eSAKK1VTLUtTLTIwMTAxOkxhbmUgQ291bnR5IAorVVMtS1MtMjAxMDM6TGVhdmVud29ydGggQ291bnR5IAorVVMtS1MtMjAxMDU6TGluY29sbiBDb3VudHkgCitVUy1LUy0yMDEwNzpMaW5uIENvdW50eSAKK1VTLUtTLTIwMTA5OkxvZ2FuIENvdW50eSAKK1VTLUtTLTIwMTExOkx5b24gQ291bnR5IAorVVMtS1MtMjAxMTM6TWNQaGVyc29uIENvdW50eSAKK1VTLUtTLTIwMTE1Ok1hcmlvbiBDb3VudHkgCitVUy1LUy0yMDExNzpNYXJzaGFsbCBDb3VudHkgCitVUy1LUy0yMDExOTpNZWFkZSBDb3VudHkgCitVUy1LUy0yMDEyMTpNaWFtaSBDb3VudHkgCitVUy1LUy0yMDEyMzpNaXRjaGVsbCBDb3VudHkgCitVUy1LUy0yMDEyNTpNb250Z29tZXJ5IENvdW50eSAKK1VTLUtTLTIwMTI3Ok1vcnJpcyBDb3VudHkgCitVUy1LUy0yMDEyOTpNb3J0b24gQ291bnR5IAorVVMtS1MtMjAxMzE6TmVtYWhhIENvdW50eSAKK1VTLUtTLTIwMTMzOk5lb3NobyBDb3VudHkgCitVUy1LUy0yMDEzNTpOZXNzIENvdW50eSAKK1VTLUtTLTIwMTM3Ok5vcnRvbiBDb3VudHkgCitVUy1LUy0yMDEzOTpPc2FnZSBDb3VudHkgCitVUy1LUy0yMDE0MTpPc2Jvcm5lIENvdW50eSAKK1VTLUtTLTIwMTQzOk90dGF3YSBDb3VudHkgCitVUy1LUy0yMDE0NTpQYXduZWUgQ291bnR5IAorVVMtS1MtMjAxNDc6UGhpbGxpcHMgQ291bnR5IAorVVMtS1MtMjAxNDk6UG90dGF3YXRvbWllIENvdW50eSAKK1VTLUtTLTIwMTUxOlByYXR0IENvdW50eSAKK1VTLUtTLTIwMTUzOlJhd2xpbnMgQ291bnR5IAorVVMtS1MtMjAxNTU6UmVubyBDb3VudHkgCitVUy1LUy0yMDE1NzpSZXB1YmxpYyBDb3VudHkgCitVUy1LUy0yMDE1OTpSaWNlIENvdW50eSAKK1VTLUtTLTIwMTYxOlJpbGV5IENvdW50eSAKK1VTLUtTLTIwMTYzOlJvb2tzIENvdW50eSAKK1VTLUtTLTIwMTY1OlJ1c2ggQ291bnR5IAorVVMtS1MtMjAxNjc6UnVzc2VsbCBDb3VudHkgCitVUy1LUy0yMDE2OTpTYWxpbmUgQ291bnR5IAorVVMtS1MtMjAxNzE6U2NvdHQgQ291bnR5IAorVVMtS1MtMjAxNzM6U2VkZ3dpY2sgQ291bnR5IAorVVMtS1MtMjAxNzU6U2V3YXJkIENvdW50eSAKK1VTLUtTLTIwMTc3OlNoYXduZWUgQ291bnR5IAorVVMtS1MtMjAxNzk6U2hlcmlkYW4gQ291bnR5IAorVVMtS1MtMjAxODE6U2hlcm1hbiBDb3VudHkgCitVUy1LUy0yMDE4MzpTbWl0aCBDb3VudHkgCitVUy1LUy0yMDE4NTpTdGFmZm9yZCBDb3VudHkgCitVUy1LUy0yMDE4NzpTdGFudG9uIENvdW50eSAKK1VTLUtTLTIwMTg5OlN0ZXZlbnMgQ291bnR5IAorVVMtS1MtMjAxOTE6U3VtbmVyIENvdW50eSAKK1VTLUtTLTIwMTkzOlRob21hcyBDb3VudHkgCitVUy1LUy0yMDE5NTpUcmVnbyBDb3VudHkgCitVUy1LUy0yMDE5NzpXYWJhdW5zZWUgQ291bnR5IAorVVMtS1MtMjAxOTk6V2FsbGFjZSBDb3VudHkgCitVUy1LUy0yMDIwMTpXYXNoaW5ndG9uIENvdW50eSAKK1VTLUtTLTIwMjAzOldpY2hpdGEgQ291bnR5IAorVVMtS1MtMjAyMDU6V2lsc29uIENvdW50eSAKK1VTLUtTLTIwMjA3Oldvb2Rzb24gQ291bnR5IAorVVMtS1MtMjAyMDk6V3lhbmRvdHRlIENvdW50eSAKKyMgdW5kZXIgQWRtaW4gTGV2ZWxbMV0gSURbMjFdOktlbnR1Y2t5IAorVVMtS1ktMjEwMDE6QWRhaXIgQ291bnR5IAorVVMtS1ktMjEwMDM6QWxsZW4gQ291bnR5IAorVVMtS1ktMjEwMDU6QW5kZXJzb24gQ291bnR5IAorVVMtS1ktMjEwMDc6QmFsbGFyZCBDb3VudHkgCitVUy1LWS0yMTAwOTpCYXJyZW4gQ291bnR5IAorVVMtS1ktMjEwMTE6QmF0aCBDb3VudHkgCitVUy1LWS0yMTAxMzpCZWxsIENvdW50eSAKK1VTLUtZLTIxMDE1OkJvb25lIENvdW50eSAKK1VTLUtZLTIxMDE3OkJvdXJib24gQ291bnR5IAorVVMtS1ktMjEwMTk6Qm95ZCBDb3VudHkgCitVUy1LWS0yMTAyMTpCb3lsZSBDb3VudHkgCitVUy1LWS0yMTAyMzpCcmFja2VuIENvdW50eSAKK1VTLUtZLTIxMDI1OkJyZWF0aGl0dCBDb3VudHkgCitVUy1LWS0yMTAyNzpCcmVja2lucmlkZ2UgQ291bnR5IAorVVMtS1ktMjEwMjk6QnVsbGl0dCBDb3VudHkgCitVUy1LWS0yMTAzMTpCdXRsZXIgQ291bnR5IAorVVMtS1ktMjEwMzM6Q2FsZHdlbGwgQ291bnR5IAorVVMtS1ktMjEwMzU6Q2FsbG93YXkgQ291bnR5IAorVVMtS1ktMjEwMzc6Q2FtcGJlbGwgQ291bnR5IAorVVMtS1ktMjEwMzk6Q2FybGlzbGUgQ291bnR5IAorVVMtS1ktMjEwNDE6Q2Fycm9sbCBDb3VudHkgCitVUy1LWS0yMTA0MzpDYXJ0ZXIgQ291bnR5IAorVVMtS1ktMjEwNDU6Q2FzZXkgQ291bnR5IAorVVMtS1ktMjEwNDc6Q2hyaXN0aWFuIENvdW50eSAKK1VTLUtZLTIxMDQ5OkNsYXJrIENvdW50eSAKK1VTLUtZLTIxMDUxOkNsYXkgQ291bnR5IAorVVMtS1ktMjEwNTM6Q2xpbnRvbiBDb3VudHkgCitVUy1LWS0yMTA1NTpDcml0dGVuZGVuIENvdW50eSAKK1VTLUtZLTIxMDU3OkN1bWJlcmxhbmQgQ291bnR5IAorVVMtS1ktMjEwNTk6RGF2aWVzcyBDb3VudHkgCitVUy1LWS0yMTA2MTpFZG1vbnNvbiBDb3VudHkgCitVUy1LWS0yMTA2MzpFbGxpb3R0IENvdW50eSAKK1VTLUtZLTIxMDY1OkVzdGlsbCBDb3VudHkgCitVUy1LWS0yMTA2NzpGYXlldHRlIENvdW50eSAKK1VTLUtZLTIxMDY5OkZsZW1pbmcgQ291bnR5IAorVVMtS1ktMjEwNzE6RmxveWQgQ291bnR5IAorVVMtS1ktMjEwNzM6RnJhbmtsaW4gQ291bnR5IAorVVMtS1ktMjEwNzU6RnVsdG9uIENvdW50eSAKK1VTLUtZLTIxMDc3OkdhbGxhdGluIENvdW50eSAKK1VTLUtZLTIxMDc5OkdhcnJhcmQgQ291bnR5IAorVVMtS1ktMjEwODE6R3JhbnQgQ291bnR5IAorVVMtS1ktMjEwODM6R3JhdmVzIENvdW50eSAKK1VTLUtZLTIxMDg1OkdyYXlzb24gQ291bnR5IAorVVMtS1ktMjEwODc6R3JlZW4gQ291bnR5IAorVVMtS1ktMjEwODk6R3JlZW51cCBDb3VudHkgCitVUy1LWS0yMTA5MTpIYW5jb2NrIENvdW50eSAKK1VTLUtZLTIxMDkzOkhhcmRpbiBDb3VudHkgCitVUy1LWS0yMTA5NTpIYXJsYW4gQ291bnR5IAorVVMtS1ktMjEwOTc6SGFycmlzb24gQ291bnR5IAorVVMtS1ktMjEwOTk6SGFydCBDb3VudHkgCitVUy1LWS0yMTEwMTpIZW5kZXJzb24gQ291bnR5IAorVVMtS1ktMjExMDM6SGVucnkgQ291bnR5IAorVVMtS1ktMjExMDU6SGlja21hbiBDb3VudHkgCitVUy1LWS0yMTEwNzpIb3BraW5zIENvdW50eSAKK1VTLUtZLTIxMTA5OkphY2tzb24gQ291bnR5IAorVVMtS1ktMjExMTE6SmVmZmVyc29uIENvdW50eSAKK1VTLUtZLTIxMTEzOkplc3NhbWluZSBDb3VudHkgCitVUy1LWS0yMTExNTpKb2huc29uIENvdW50eSAKK1VTLUtZLTIxMTE3OktlbnRvbiBDb3VudHkgCitVUy1LWS0yMTExOTpLbm90dCBDb3VudHkgCitVUy1LWS0yMTEyMTpLbm94IENvdW50eSAKK1VTLUtZLTIxMTIzOkxhcnVlIENvdW50eSAKK1VTLUtZLTIxMTI1OkxhdXJlbCBDb3VudHkgCitVUy1LWS0yMTEyNzpMYXdyZW5jZSBDb3VudHkgCitVUy1LWS0yMTEyOTpMZWUgQ291bnR5IAorVVMtS1ktMjExMzE6TGVzbGllIENvdW50eSAKK1VTLUtZLTIxMTMzOkxldGNoZXIgQ291bnR5IAorVVMtS1ktMjExMzU6TGV3aXMgQ291bnR5IAorVVMtS1ktMjExMzc6TGluY29sbiBDb3VudHkgCitVUy1LWS0yMTEzOTpMaXZpbmdzdG9uIENvdW50eSAKK1VTLUtZLTIxMTQxOkxvZ2FuIENvdW50eSAKK1VTLUtZLTIxMTQzOkx5b24gQ291bnR5IAorVVMtS1ktMjExNDU6TWNDcmFja2VuIENvdW50eSAKK1VTLUtZLTIxMTQ3Ok1jQ3JlYXJ5IENvdW50eSAKK1VTLUtZLTIxMTQ5Ok1jTGVhbiBDb3VudHkgCitVUy1LWS0yMTE1MTpNYWRpc29uIENvdW50eSAKK1VTLUtZLTIxMTUzOk1hZ29mZmluIENvdW50eSAKK1VTLUtZLTIxMTU1Ok1hcmlvbiBDb3VudHkgCitVUy1LWS0yMTE1NzpNYXJzaGFsbCBDb3VudHkgCitVUy1LWS0yMTE1OTpNYXJ0aW4gQ291bnR5IAorVVMtS1ktMjExNjE6TWFzb24gQ291bnR5IAorVVMtS1ktMjExNjM6TWVhZGUgQ291bnR5IAorVVMtS1ktMjExNjU6TWVuaWZlZSBDb3VudHkgCitVUy1LWS0yMTE2NzpNZXJjZXIgQ291bnR5IAorVVMtS1ktMjExNjk6TWV0Y2FsZmUgQ291bnR5IAorVVMtS1ktMjExNzE6TW9ucm9lIENvdW50eSAKK1VTLUtZLTIxMTczOk1vbnRnb21lcnkgQ291bnR5IAorVVMtS1ktMjExNzU6TW9yZ2FuIENvdW50eSAKK1VTLUtZLTIxMTc3Ok11aGxlbmJlcmcgQ291bnR5IAorVVMtS1ktMjExNzk6TmVsc29uIENvdW50eSAKK1VTLUtZLTIxMTgxOk5pY2hvbGFzIENvdW50eSAKK1VTLUtZLTIxMTgzOk9oaW8gQ291bnR5IAorVVMtS1ktMjExODU6T2xkaGFtIENvdW50eSAKK1VTLUtZLTIxMTg3Ok93ZW4gQ291bnR5IAorVVMtS1ktMjExODk6T3dzbGV5IENvdW50eSAKK1VTLUtZLTIxMTkxOlBlbmRsZXRvbiBDb3VudHkgCitVUy1LWS0yMTE5MzpQZXJyeSBDb3VudHkgCitVUy1LWS0yMTE5NTpQaWtlIENvdW50eSAKK1VTLUtZLTIxMTk3OlBvd2VsbCBDb3VudHkgCitVUy1LWS0yMTE5OTpQdWxhc2tpIENvdW50eSAKK1VTLUtZLTIxMjAxOlJvYmVydHNvbiBDb3VudHkgCitVUy1LWS0yMTIwMzpSb2NrY2FzdGxlIENvdW50eSAKK1VTLUtZLTIxMjA1OlJvd2FuIENvdW50eSAKK1VTLUtZLTIxMjA3OlJ1c3NlbGwgQ291bnR5IAorVVMtS1ktMjEyMDk6U2NvdHQgQ291bnR5IAorVVMtS1ktMjEyMTE6U2hlbGJ5IENvdW50eSAKK1VTLUtZLTIxMjEzOlNpbXBzb24gQ291bnR5IAorVVMtS1ktMjEyMTU6U3BlbmNlciBDb3VudHkgCitVUy1LWS0yMTIxNzpUYXlsb3IgQ291bnR5IAorVVMtS1ktMjEyMTk6VG9kZCBDb3VudHkgCitVUy1LWS0yMTIyMTpUcmlnZyBDb3VudHkgCitVUy1LWS0yMTIyMzpUcmltYmxlIENvdW50eSAKK1VTLUtZLTIxMjI1OlVuaW9uIENvdW50eSAKK1VTLUtZLTIxMjI3OldhcnJlbiBDb3VudHkgCitVUy1LWS0yMTIyOTpXYXNoaW5ndG9uIENvdW50eSAKK1VTLUtZLTIxMjMxOldheW5lIENvdW50eSAKK1VTLUtZLTIxMjMzOldlYnN0ZXIgQ291bnR5IAorVVMtS1ktMjEyMzU6V2hpdGxleSBDb3VudHkgCitVUy1LWS0yMTIzNzpXb2xmZSBDb3VudHkgCitVUy1LWS0yMTIzOTpXb29kZm9yZCBDb3VudHkgCisjIHVuZGVyIEFkbWluIExldmVsWzFdIElEWzIyXTpMb3Vpc2lhbmEgCitVUy1MQS0yMjAwMTpBY2FkaWEgUGFyaXNoIAorVVMtTEEtMjIwMDM6QWxsZW4gUGFyaXNoIAorVVMtTEEtMjIwMDU6QXNjZW5zaW9uIFBhcmlzaCAKK1VTLUxBLTIyMDA3OkFzc3VtcHRpb24gUGFyaXNoIAorVVMtTEEtMjIwMDk6QXZveWVsbGVzIFBhcmlzaCAKK1VTLUxBLTIyMDExOkJlYXVyZWdhcmQgUGFyaXNoIAorVVMtTEEtMjIwMTM6QmllbnZpbGxlIFBhcmlzaCAKK1VTLUxBLTIyMDE1OkJvc3NpZXIgUGFyaXNoIAorVVMtTEEtMjIwMTc6Q2FkZG8gUGFyaXNoIAorVVMtTEEtMjIwMTk6Q2FsY2FzaWV1IFBhcmlzaCAKK1VTLUxBLTIyMDIxOkNhbGR3ZWxsIFBhcmlzaCAKK1VTLUxBLTIyMDIzOkNhbWVyb24gUGFyaXNoIAorVVMtTEEtMjIwMjU6Q2F0YWhvdWxhIFBhcmlzaCAKK1VTLUxBLTIyMDI3OkNsYWlib3JuZSBQYXJpc2ggCitVUy1MQS0yMjAyOTpDb25jb3JkaWEgUGFyaXNoIAorVVMtTEEtMjIwMzE6RGUgU290byBQYXJpc2ggCitVUy1MQS0yMjAzMzpFYXN0IEJhdG9uIFJvdWdlIFBhcmlzaCAKK1VTLUxBLTIyMDM1OkVhc3QgQ2Fycm9sbCBQYXJpc2ggCitVUy1MQS0yMjAzNzpFYXN0IEZlbGljaWFuYSBQYXJpc2ggCitVUy1MQS0yMjAzOTpFdmFuZ2VsaW5lIFBhcmlzaCAKK1VTLUxBLTIyMDQxOkZyYW5rbGluIFBhcmlzaCAKK1VTLUxBLTIyMDQzOkdyYW50IFBhcmlzaCAKK1VTLUxBLTIyMDQ1OkliZXJpYSBQYXJpc2ggCitVUy1MQS0yMjA0NzpJYmVydmlsbGUgUGFyaXNoIAorVVMtTEEtMjIwNDk6SmFja3NvbiBQYXJpc2ggCitVUy1MQS0yMjA1MTpKZWZmZXJzb24gUGFyaXNoIAorVVMtTEEtMjIwNTM6SmVmZmVyc29uIERhdmlzIFBhcmlzaCAKK1VTLUxBLTIyMDU1OkxhZmF5ZXR0ZSBQYXJpc2ggCitVUy1MQS0yMjA1NzpMYWZvdXJjaGUgUGFyaXNoIAorVVMtTEEtMjIwNTk6TGEgU2FsbGUgUGFyaXNoIAorVVMtTEEtMjIwNjE6TGluY29sbiBQYXJpc2ggCitVUy1MQS0yMjA2MzpMaXZpbmdzdG9uIFBhcmlzaCAKK1VTLUxBLTIyMDY1Ok1hZGlzb24gUGFyaXNoIAorVVMtTEEtMjIwNjc6TW9yZWhvdXNlIFBhcmlzaCAKK1VTLUxBLTIyMDY5Ok5hdGNoaXRvY2hlcyBQYXJpc2ggCitVUy1MQS0yMjA3MTpPcmxlYW5zIFBhcmlzaCAKK1VTLUxBLTIyMDczOk91YWNoaXRhIFBhcmlzaCAKK1VTLUxBLTIyMDc1OlBsYXF1ZW1pbmVzIFBhcmlzaCAKK1VTLUxBLTIyMDc3OlBvaW50ZSBDb3VwZWUgUGFyaXNoIAorVVMtTEEtMjIwNzk6UmFwaWRlcyBQYXJpc2ggCitVUy1MQS0yMjA4MTpSZWQgUml2ZXIgUGFyaXNoIAorVVMtTEEtMjIwODM6UmljaGxhbmQgUGFyaXNoIAorVVMtTEEtMjIwODU6U2FiaW5lIFBhcmlzaCAKK1VTLUxBLTIyMDg3OlN0LiBCZXJuYXJkIFBhcmlzaCAKK1VTLUxBLTIyMDg5OlN0LiBDaGFybGVzIFBhcmlzaCAKK1VTLUxBLTIyMDkxOlN0LiBIZWxlbmEgUGFyaXNoIAorVVMtTEEtMjIwOTM6U3QuIEphbWVzIFBhcmlzaCAKK1VTLUxBLTIyMDk1OlN0LiBKb2huIHRoZSBCYXB0aXN0IFBhcmlzaCAKK1VTLUxBLTIyMDk3OlN0LiBMYW5kcnkgUGFyaXNoIAorVVMtTEEtMjIwOTk6U3QuIE1hcnRpbiBQYXJpc2ggCitVUy1MQS0yMjEwMTpTdC4gTWFyeSBQYXJpc2ggCitVUy1MQS0yMjEwMzpTdC4gVGFtbWFueSBQYXJpc2ggCitVUy1MQS0yMjEwNTpUYW5naXBhaG9hIFBhcmlzaCAKK1VTLUxBLTIyMTA3OlRlbnNhcyBQYXJpc2ggCitVUy1MQS0yMjEwOTpUZXJyZWJvbm5lIFBhcmlzaCAKK1VTLUxBLTIyMTExOlVuaW9uIFBhcmlzaCAKK1VTLUxBLTIyMTEzOlZlcm1pbGlvbiBQYXJpc2ggCitVUy1MQS0yMjExNTpWZXJub24gUGFyaXNoIAorVVMtTEEtMjIxMTc6V2FzaGluZ3RvbiBQYXJpc2ggCitVUy1MQS0yMjExOTpXZWJzdGVyIFBhcmlzaCAKK1VTLUxBLTIyMTIxOldlc3QgQmF0b24gUm91Z2UgUGFyaXNoIAorVVMtTEEtMjIxMjM6V2VzdCBDYXJyb2xsIFBhcmlzaCAKK1VTLUxBLTIyMTI1Oldlc3QgRmVsaWNpYW5hIFBhcmlzaCAKK1VTLUxBLTIyMTI3Oldpbm4gUGFyaXNoIAorIyB1bmRlciBBZG1pbiBMZXZlbFsxXSBJRFsyNV06TWFzc2FjaHVzZXR0cyAKK1VTLU1BLTI1MDAxOkJhcm5zdGFibGUgQ291bnR5IAorVVMtTUEtMjUwMDM6QmVya3NoaXJlIENvdW50eSAKK1VTLU1BLTI1MDA1OkJyaXN0b2wgQ291bnR5IAorVVMtTUEtMjUwMDc6RHVrZXMgQ291bnR5IAorVVMtTUEtMjUwMDk6RXNzZXggQ291bnR5IAorVVMtTUEtMjUwMTE6RnJhbmtsaW4gQ291bnR5IAorVVMtTUEtMjUwMTM6SGFtcGRlbiBDb3VudHkgCitVUy1NQS0yNTAxNTpIYW1wc2hpcmUgQ291bnR5IAorVVMtTUEtMjUwMTc6TWlkZGxlc2V4IENvdW50eSAKK1VTLU1BLTI1MDE5Ok5hbnR1Y2tldCBDb3VudHkgCitVUy1NQS0yNTAyMTpOb3Jmb2xrIENvdW50eSAKK1VTLU1BLTI1MDIzOlBseW1vdXRoIENvdW50eSAKK1VTLU1BLTI1MDI1OlN1ZmZvbGsgQ291bnR5IAorVVMtTUEtMjUwMjc6V29yY2VzdGVyIENvdW50eSAKKyMgdW5kZXIgQWRtaW4gTGV2ZWxbMV0gSURbMjRdOk1hcnlsYW5kIAorVVMtTUQtMjQwMDE6QWxsZWdhbnkgQ291bnR5IAorVVMtTUQtMjQwMDM6QW5uZSBBcnVuZGVsIENvdW50eSAKK1VTLU1ELTI0MDA1OkJhbHRpbW9yZSBDb3VudHkgCitVUy1NRC0yNDAwOTpDYWx2ZXJ0IENvdW50eSAKK1VTLU1ELTI0MDExOkNhcm9saW5lIENvdW50eSAKK1VTLU1ELTI0MDEzOkNhcnJvbGwgQ291bnR5IAorVVMtTUQtMjQwMTU6Q2VjaWwgQ291bnR5IAorVVMtTUQtMjQwMTc6Q2hhcmxlcyBDb3VudHkgCitVUy1NRC0yNDAxOTpEb3JjaGVzdGVyIENvdW50eSAKK1VTLU1ELTI0MDIxOkZyZWRlcmljayBDb3VudHkgCitVUy1NRC0yNDAyMzpHYXJyZXR0IENvdW50eSAKK1VTLU1ELTI0MDI1OkhhcmZvcmQgQ291bnR5IAorVVMtTUQtMjQwMjc6SG93YXJkIENvdW50eSAKK1VTLU1ELTI0MDI5OktlbnQgQ291bnR5IAorVVMtTUQtMjQwMzE6TW9udGdvbWVyeSBDb3VudHkgCitVUy1NRC0yNDAzMzpQcmluY2UgR2VvcmdlJ3MgQ291bnR5IAorVVMtTUQtMjQwMzU6UXVlZW4gQW5uZSdzIENvdW50eSAKK1VTLU1ELTI0MDM3OlN0LiBNYXJ5J3MgQ291bnR5IAorVVMtTUQtMjQwMzk6U29tZXJzZXQgQ291bnR5IAorVVMtTUQtMjQwNDE6VGFsYm90IENvdW50eSAKK1VTLU1ELTI0MDQzOldhc2hpbmd0b24gQ291bnR5IAorVVMtTUQtMjQwNDU6V2ljb21pY28gQ291bnR5IAorVVMtTUQtMjQwNDc6V29yY2VzdGVyIENvdW50eSAKK1VTLU1ELTI0NTEwOkJhbHRpbW9yZSBjaXR5IAorIyB1bmRlciBBZG1pbiBMZXZlbFsxXSBJRFsyM106TWFpbmUgCitVUy1NRS0yMzAwMTpBbmRyb3Njb2dnaW4gQ291bnR5IAorVVMtTUUtMjMwMDM6QXJvb3N0b29rIENvdW50eSAKK1VTLU1FLTIzMDA1OkN1bWJlcmxhbmQgQ291bnR5IAorVVMtTUUtMjMwMDc6RnJhbmtsaW4gQ291bnR5IAorVVMtTUUtMjMwMDk6SGFuY29jayBDb3VudHkgCitVUy1NRS0yMzAxMTpLZW5uZWJlYyBDb3VudHkgCitVUy1NRS0yMzAxMzpLbm94IENvdW50eSAKK1VTLU1FLTIzMDE1OkxpbmNvbG4gQ291bnR5IAorVVMtTUUtMjMwMTc6T3hmb3JkIENvdW50eSAKK1VTLU1FLTIzMDE5OlBlbm9ic2NvdCBDb3VudHkgCitVUy1NRS0yMzAyMTpQaXNjYXRhcXVpcyBDb3VudHkgCitVUy1NRS0yMzAyMzpTYWdhZGFob2MgQ291bnR5IAorVVMtTUUtMjMwMjU6U29tZXJzZXQgQ291bnR5IAorVVMtTUUtMjMwMjc6V2FsZG8gQ291bnR5IAorVVMtTUUtMjMwMjk6V2FzaGluZ3RvbiBDb3VudHkgCitVUy1NRS0yMzAzMTpZb3JrIENvdW50eSAKKyMgdW5kZXIgQWRtaW4gTGV2ZWxbMV0gSURbMjZdOk1pY2hpZ2FuIAorVVMtTUktMjYwMDE6QWxjb25hIENvdW50eSAKK1VTLU1JLTI2MDAzOkFsZ2VyIENvdW50eSAKK1VTLU1JLTI2MDA1OkFsbGVnYW4gQ291bnR5IAorVVMtTUktMjYwMDc6QWxwZW5hIENvdW50eSAKK1VTLU1JLTI2MDA5OkFudHJpbSBDb3VudHkgCitVUy1NSS0yNjAxMTpBcmVuYWMgQ291bnR5IAorVVMtTUktMjYwMTM6QmFyYWdhIENvdW50eSAKK1VTLU1JLTI2MDE1OkJhcnJ5IENvdW50eSAKK1VTLU1JLTI2MDE3OkJheSBDb3VudHkgCitVUy1NSS0yNjAxOTpCZW56aWUgQ291bnR5IAorVVMtTUktMjYwMjE6QmVycmllbiBDb3VudHkgCitVUy1NSS0yNjAyMzpCcmFuY2ggQ291bnR5IAorVVMtTUktMjYwMjU6Q2FsaG91biBDb3VudHkgCitVUy1NSS0yNjAyNzpDYXNzIENvdW50eSAKK1VTLU1JLTI2MDI5OkNoYXJsZXZvaXggQ291bnR5IAorVVMtTUktMjYwMzE6Q2hlYm95Z2FuIENvdW50eSAKK1VTLU1JLTI2MDMzOkNoaXBwZXdhIENvdW50eSAKK1VTLU1JLTI2MDM1OkNsYXJlIENvdW50eSAKK1VTLU1JLTI2MDM3OkNsaW50b24gQ291bnR5IAorVVMtTUktMjYwMzk6Q3Jhd2ZvcmQgQ291bnR5IAorVVMtTUktMjYwNDE6RGVsdGEgQ291bnR5IAorVVMtTUktMjYwNDM6RGlja2luc29uIENvdW50eSAKK1VTLU1JLTI2MDQ1OkVhdG9uIENvdW50eSAKK1VTLU1JLTI2MDQ3OkVtbWV0IENvdW50eSAKK1VTLU1JLTI2MDQ5OkdlbmVzZWUgQ291bnR5IAorVVMtTUktMjYwNTE6R2xhZHdpbiBDb3VudHkgCitVUy1NSS0yNjA1MzpHb2dlYmljIENvdW50eSAKK1VTLU1JLTI2MDU1OkdyYW5kIFRyYXZlcnNlIENvdW50eSAKK1VTLU1JLTI2MDU3OkdyYXRpb3QgQ291bnR5IAorVVMtTUktMjYwNTk6SGlsbHNkYWxlIENvdW50eSAKK1VTLU1JLTI2MDYxOkhvdWdodG9uIENvdW50eSAKK1VTLU1JLTI2MDYzOkh1cm9uIENvdW50eSAKK1VTLU1JLTI2MDY1OkluZ2hhbSBDb3VudHkgCitVUy1NSS0yNjA2NzpJb25pYSBDb3VudHkgCitVUy1NSS0yNjA2OTpJb3NjbyBDb3VudHkgCitVUy1NSS0yNjA3MTpJcm9uIENvdW50eSAKK1VTLU1JLTI2MDczOklzYWJlbGxhIENvdW50eSAKK1VTLU1JLTI2MDc1OkphY2tzb24gQ291bnR5IAorVVMtTUktMjYwNzc6S2FsYW1hem9vIENvdW50eSAKK1VTLU1JLTI2MDc5OkthbGthc2thIENvdW50eSAKK1VTLU1JLTI2MDgxOktlbnQgQ291bnR5IAorVVMtTUktMjYwODM6S2V3ZWVuYXcgQ291bnR5IAorVVMtTUktMjYwODU6TGFrZSBDb3VudHkgCitVUy1NSS0yNjA4NzpMYXBlZXIgQ291bnR5IAorVVMtTUktMjYwODk6TGVlbGFuYXUgQ291bnR5IAorVVMtTUktMjYwOTE6TGVuYXdlZSBDb3VudHkgCitVUy1NSS0yNjA5MzpMaXZpbmdzdG9uIENvdW50eSAKK1VTLU1JLTI2MDk1Okx1Y2UgQ291bnR5IAorVVMtTUktMjYwOTc6TWFja2luYWMgQ291bnR5IAorVVMtTUktMjYwOTk6TWFjb21iIENvdW50eSAKK1VTLU1JLTI2MTAxOk1hbmlzdGVlIENvdW50eSAKK1VTLU1JLTI2MTAzOk1hcnF1ZXR0ZSBDb3VudHkgCitVUy1NSS0yNjEwNTpNYXNvbiBDb3VudHkgCitVUy1NSS0yNjEwNzpNZWNvc3RhIENvdW50eSAKK1VTLU1JLTI2MTA5Ok1lbm9taW5lZSBDb3VudHkgCitVUy1NSS0yNjExMTpNaWRsYW5kIENvdW50eSAKK1VTLU1JLTI2MTEzOk1pc3NhdWtlZSBDb3VudHkgCitVUy1NSS0yNjExNTpNb25yb2UgQ291bnR5IAorVVMtTUktMjYxMTc6TW9udGNhbG0gQ291bnR5IAorVVMtTUktMjYxMTk6TW9udG1vcmVuY3kgQ291bnR5IAorVVMtTUktMjYxMjE6TXVza2Vnb24gQ291bnR5IAorVVMtTUktMjYxMjM6TmV3YXlnbyBDb3VudHkgCitVUy1NSS0yNjEyNTpPYWtsYW5kIENvdW50eSAKK1VTLU1JLTI2MTI3Ok9jZWFuYSBDb3VudHkgCitVUy1NSS0yNjEyOTpPZ2VtYXcgQ291bnR5IAorVVMtTUktMjYxMzE6T250b25hZ29uIENvdW50eSAKK1VTLU1JLTI2MTMzOk9zY2VvbGEgQ291bnR5IAorVVMtTUktMjYxMzU6T3Njb2RhIENvdW50eSAKK1VTLU1JLTI2MTM3Ok90c2VnbyBDb3VudHkgCitVUy1NSS0yNjEzOTpPdHRhd2EgQ291bnR5IAorVVMtTUktMjYxNDE6UHJlc3F1ZSBJc2xlIENvdW50eSAKK1VTLU1JLTI2MTQzOlJvc2NvbW1vbiBDb3VudHkgCitVUy1NSS0yNjE0NTpTYWdpbmF3IENvdW50eSAKK1VTLU1JLTI2MTQ3OlN0LiBDbGFpciBDb3VudHkgCitVUy1NSS0yNjE0OTpTdC4gSm9zZXBoIENvdW50eSAKK1VTLU1JLTI2MTUxOlNhbmlsYWMgQ291bnR5IAorVVMtTUktMjYxNTM6U2Nob29sY3JhZnQgQ291bnR5IAorVVMtTUktMjYxNTU6U2hpYXdhc3NlZSBDb3VudHkgCitVUy1NSS0yNjE1NzpUdXNjb2xhIENvdW50eSAKK1VTLU1JLTI2MTU5OlZhbiBCdXJlbiBDb3VudHkgCitVUy1NSS0yNjE2MTpXYXNodGVuYXcgQ291bnR5IAorVVMtTUktMjYxNjM6V2F5bmUgQ291bnR5IAorVVMtTUktMjYxNjU6V2V4Zm9yZCBDb3VudHkgCisjIHVuZGVyIEFkbWluIExldmVsWzFdIElEWzI3XTpNaW5uZXNvdGEgCitVUy1NTi0yNzAwMTpBaXRraW4gQ291bnR5IAorVVMtTU4tMjcwMDM6QW5va2EgQ291bnR5IAorVVMtTU4tMjcwMDU6QmVja2VyIENvdW50eSAKK1VTLU1OLTI3MDA3OkJlbHRyYW1pIENvdW50eSAKK1VTLU1OLTI3MDA5OkJlbnRvbiBDb3VudHkgCitVUy1NTi0yNzAxMTpCaWcgU3RvbmUgQ291bnR5IAorVVMtTU4tMjcwMTM6Qmx1ZSBFYXJ0aCBDb3VudHkgCitVUy1NTi0yNzAxNTpCcm93biBDb3VudHkgCitVUy1NTi0yNzAxNzpDYXJsdG9uIENvdW50eSAKK1VTLU1OLTI3MDE5OkNhcnZlciBDb3VudHkgCitVUy1NTi0yNzAyMTpDYXNzIENvdW50eSAKK1VTLU1OLTI3MDIzOkNoaXBwZXdhIENvdW50eSAKK1VTLU1OLTI3MDI1OkNoaXNhZ28gQ291bnR5IAorVVMtTU4tMjcwMjc6Q2xheSBDb3VudHkgCitVUy1NTi0yNzAyOTpDbGVhcndhdGVyIENvdW50eSAKK1VTLU1OLTI3MDMxOkNvb2sgQ291bnR5IAorVVMtTU4tMjcwMzM6Q290dG9ud29vZCBDb3VudHkgCitVUy1NTi0yNzAzNTpDcm93IFdpbmcgQ291bnR5IAorVVMtTU4tMjcwMzc6RGFrb3RhIENvdW50eSAKK1VTLU1OLTI3MDM5OkRvZGdlIENvdW50eSAKK1VTLU1OLTI3MDQxOkRvdWdsYXMgQ291bnR5IAorVVMtTU4tMjcwNDM6RmFyaWJhdWx0IENvdW50eSAKK1VTLU1OLTI3MDQ1OkZpbGxtb3JlIENvdW50eSAKK1VTLU1OLTI3MDQ3OkZyZWVib3JuIENvdW50eSAKK1VTLU1OLTI3MDQ5Okdvb2RodWUgQ291bnR5IAorVVMtTU4tMjcwNTE6R3JhbnQgQ291bnR5IAorVVMtTU4tMjcwNTM6SGVubmVwaW4gQ291bnR5IAorVVMtTU4tMjcwNTU6SG91c3RvbiBDb3VudHkgCitVUy1NTi0yNzA1NzpIdWJiYXJkIENvdW50eSAKK1VTLU1OLTI3MDU5OklzYW50aSBDb3VudHkgCitVUy1NTi0yNzA2MTpJdGFzY2EgQ291bnR5IAorVVMtTU4tMjcwNjM6SmFja3NvbiBDb3VudHkgCitVUy1NTi0yNzA2NTpLYW5hYmVjIENvdW50eSAKK1VTLU1OLTI3MDY3OkthbmRpeW9oaSBDb3VudHkgCitVUy1NTi0yNzA2OTpLaXR0c29uIENvdW50eSAKK1VTLU1OLTI3MDcxOktvb2NoaWNoaW5nIENvdW50eSAKK1VTLU1OLTI3MDczOkxhYyBxdWkgUGFybGUgQ291bnR5IAorVVMtTU4tMjcwNzU6TGFrZSBDb3VudHkgCitVUy1NTi0yNzA3NzpMYWtlIG9mIHRoZSBXb29kcyBDb3VudHkgCitVUy1NTi0yNzA3OTpMZSBTdWV1ciBDb3VudHkgCitVUy1NTi0yNzA4MTpMaW5jb2xuIENvdW50eSAKK1VTLU1OLTI3MDgzOkx5b24gQ291bnR5IAorVVMtTU4tMjcwODU6TWNMZW9kIENvdW50eSAKK1VTLU1OLTI3MDg3Ok1haG5vbWVuIENvdW50eSAKK1VTLU1OLTI3MDg5Ok1hcnNoYWxsIENvdW50eSAKK1VTLU1OLTI3MDkxOk1hcnRpbiBDb3VudHkgCitVUy1NTi0yNzA5MzpNZWVrZXIgQ291bnR5IAorVVMtTU4tMjcwOTU6TWlsbGUgTGFjcyBDb3VudHkgCitVUy1NTi0yNzA5NzpNb3JyaXNvbiBDb3VudHkgCitVUy1NTi0yNzA5OTpNb3dlciBDb3VudHkgCitVUy1NTi0yNzEwMTpNdXJyYXkgQ291bnR5IAorVVMtTU4tMjcxMDM6Tmljb2xsZXQgQ291bnR5IAorVVMtTU4tMjcxMDU6Tm9ibGVzIENvdW50eSAKK1VTLU1OLTI3MTA3Ok5vcm1hbiBDb3VudHkgCitVUy1NTi0yNzEwOTpPbG1zdGVkIENvdW50eSAKK1VTLU1OLTI3MTExOk90dGVyIFRhaWwgQ291bnR5IAorVVMtTU4tMjcxMTM6UGVubmluZ3RvbiBDb3VudHkgCitVUy1NTi0yNzExNTpQaW5lIENvdW50eSAKK1VTLU1OLTI3MTE3OlBpcGVzdG9uZSBDb3VudHkgCitVUy1NTi0yNzExOTpQb2xrIENvdW50eSAKK1VTLU1OLTI3MTIxOlBvcGUgQ291bnR5IAorVVMtTU4tMjcxMjM6UmFtc2V5IENvdW50eSAKK1VTLU1OLTI3MTI1OlJlZCBMYWtlIENvdW50eSAKK1VTLU1OLTI3MTI3OlJlZHdvb2QgQ291bnR5IAorVVMtTU4tMjcxMjk6UmVudmlsbGUgQ291bnR5IAorVVMtTU4tMjcxMzE6UmljZSBDb3VudHkgCitVUy1NTi0yNzEzMzpSb2NrIENvdW50eSAKK1VTLU1OLTI3MTM1OlJvc2VhdSBDb3VudHkgCitVUy1NTi0yNzEzNzpTdC4gTG91aXMgQ291bnR5IAorVVMtTU4tMjcxMzk6U2NvdHQgQ291bnR5IAorVVMtTU4tMjcxNDE6U2hlcmJ1cm5lIENvdW50eSAKK1VTLU1OLTI3MTQzOlNpYmxleSBDb3VudHkgCitVUy1NTi0yNzE0NTpTdGVhcm5zIENvdW50eSAKK1VTLU1OLTI3MTQ3OlN0ZWVsZSBDb3VudHkgCitVUy1NTi0yNzE0OTpTdGV2ZW5zIENvdW50eSAKK1VTLU1OLTI3MTUxOlN3aWZ0IENvdW50eSAKK1VTLU1OLTI3MTUzOlRvZGQgQ291bnR5IAorVVMtTU4tMjcxNTU6VHJhdmVyc2UgQ291bnR5IAorVVMtTU4tMjcxNTc6V2FiYXNoYSBDb3VudHkgCitVUy1NTi0yNzE1OTpXYWRlbmEgQ291bnR5IAorVVMtTU4tMjcxNjE6V2FzZWNhIENvdW50eSAKK1VTLU1OLTI3MTYzOldhc2hpbmd0b24gQ291bnR5IAorVVMtTU4tMjcxNjU6V2F0b253YW4gQ291bnR5IAorVVMtTU4tMjcxNjc6V2lsa2luIENvdW50eSAKK1VTLU1OLTI3MTY5Oldpbm9uYSBDb3VudHkgCitVUy1NTi0yNzE3MTpXcmlnaHQgQ291bnR5IAorVVMtTU4tMjcxNzM6WWVsbG93IE1lZGljaW5lIENvdW50eSAKKyMgdW5kZXIgQWRtaW4gTGV2ZWxbMV0gSURbMjldOk1pc3NvdXJpIAorVVMtTU8tMjkwMDE6QWRhaXIgQ291bnR5IAorVVMtTU8tMjkwMDM6QW5kcmV3IENvdW50eSAKK1VTLU1PLTI5MDA1OkF0Y2hpc29uIENvdW50eSAKK1VTLU1PLTI5MDA3OkF1ZHJhaW4gQ291bnR5IAorVVMtTU8tMjkwMDk6QmFycnkgQ291bnR5IAorVVMtTU8tMjkwMTE6QmFydG9uIENvdW50eSAKK1VTLU1PLTI5MDEzOkJhdGVzIENvdW50eSAKK1VTLU1PLTI5MDE1OkJlbnRvbiBDb3VudHkgCitVUy1NTy0yOTAxNzpCb2xsaW5nZXIgQ291bnR5IAorVVMtTU8tMjkwMTk6Qm9vbmUgQ291bnR5IAorVVMtTU8tMjkwMjE6QnVjaGFuYW4gQ291bnR5IAorVVMtTU8tMjkwMjM6QnV0bGVyIENvdW50eSAKK1VTLU1PLTI5MDI1OkNhbGR3ZWxsIENvdW50eSAKK1VTLU1PLTI5MDI3OkNhbGxhd2F5IENvdW50eSAKK1VTLU1PLTI5MDI5OkNhbWRlbiBDb3VudHkgCitVUy1NTy0yOTAzMTpDYXBlIEdpcmFyZGVhdSBDb3VudHkgCitVUy1NTy0yOTAzMzpDYXJyb2xsIENvdW50eSAKK1VTLU1PLTI5MDM1OkNhcnRlciBDb3VudHkgCitVUy1NTy0yOTAzNzpDYXNzIENvdW50eSAKK1VTLU1PLTI5MDM5OkNlZGFyIENvdW50eSAKK1VTLU1PLTI5MDQxOkNoYXJpdG9uIENvdW50eSAKK1VTLU1PLTI5MDQzOkNocmlzdGlhbiBDb3VudHkgCitVUy1NTy0yOTA0NTpDbGFyayBDb3VudHkgCitVUy1NTy0yOTA0NzpDbGF5IENvdW50eSAKK1VTLU1PLTI5MDQ5OkNsaW50b24gQ291bnR5IAorVVMtTU8tMjkwNTE6Q29sZSBDb3VudHkgCitVUy1NTy0yOTA1MzpDb29wZXIgQ291bnR5IAorVVMtTU8tMjkwNTU6Q3Jhd2ZvcmQgQ291bnR5IAorVVMtTU8tMjkwNTc6RGFkZSBDb3VudHkgCitVUy1NTy0yOTA1OTpEYWxsYXMgQ291bnR5IAorVVMtTU8tMjkwNjE6RGF2aWVzcyBDb3VudHkgCitVUy1NTy0yOTA2MzpEZUthbGIgQ291bnR5IAorVVMtTU8tMjkwNjU6RGVudCBDb3VudHkgCitVUy1NTy0yOTA2NzpEb3VnbGFzIENvdW50eSAKK1VTLU1PLTI5MDY5OkR1bmtsaW4gQ291bnR5IAorVVMtTU8tMjkwNzE6RnJhbmtsaW4gQ291bnR5IAorVVMtTU8tMjkwNzM6R2FzY29uYWRlIENvdW50eSAKK1VTLU1PLTI5MDc1OkdlbnRyeSBDb3VudHkgCitVUy1NTy0yOTA3NzpHcmVlbmUgQ291bnR5IAorVVMtTU8tMjkwNzk6R3J1bmR5IENvdW50eSAKK1VTLU1PLTI5MDgxOkhhcnJpc29uIENvdW50eSAKK1VTLU1PLTI5MDgzOkhlbnJ5IENvdW50eSAKK1VTLU1PLTI5MDg1OkhpY2tvcnkgQ291bnR5IAorVVMtTU8tMjkwODc6SG9sdCBDb3VudHkgCitVUy1NTy0yOTA4OTpIb3dhcmQgQ291bnR5IAorVVMtTU8tMjkwOTE6SG93ZWxsIENvdW50eSAKK1VTLU1PLTI5MDkzOklyb24gQ291bnR5IAorVVMtTU8tMjkwOTU6SmFja3NvbiBDb3VudHkgCitVUy1NTy0yOTA5NzpKYXNwZXIgQ291bnR5IAorVVMtTU8tMjkwOTk6SmVmZmVyc29uIENvdW50eSAKK1VTLU1PLTI5MTAxOkpvaG5zb24gQ291bnR5IAorVVMtTU8tMjkxMDM6S25veCBDb3VudHkgCitVUy1NTy0yOTEwNTpMYWNsZWRlIENvdW50eSAKK1VTLU1PLTI5MTA3OkxhZmF5ZXR0ZSBDb3VudHkgCitVUy1NTy0yOTEwOTpMYXdyZW5jZSBDb3VudHkgCitVUy1NTy0yOTExMTpMZXdpcyBDb3VudHkgCitVUy1NTy0yOTExMzpMaW5jb2xuIENvdW50eSAKK1VTLU1PLTI5MTE1Okxpbm4gQ291bnR5IAorVVMtTU8tMjkxMTc6TGl2aW5nc3RvbiBDb3VudHkgCitVUy1NTy0yOTExOTpNY0RvbmFsZCBDb3VudHkgCitVUy1NTy0yOTEyMTpNYWNvbiBDb3VudHkgCitVUy1NTy0yOTEyMzpNYWRpc29uIENvdW50eSAKK1VTLU1PLTI5MTI1Ok1hcmllcyBDb3VudHkgCitVUy1NTy0yOTEyNzpNYXJpb24gQ291bnR5IAorVVMtTU8tMjkxMjk6TWVyY2VyIENvdW50eSAKK1VTLU1PLTI5MTMxOk1pbGxlciBDb3VudHkgCitVUy1NTy0yOTEzMzpNaXNzaXNzaXBwaSBDb3VudHkgCitVUy1NTy0yOTEzNTpNb25pdGVhdSBDb3VudHkgCitVUy1NTy0yOTEzNzpNb25yb2UgQ291bnR5IAorVVMtTU8tMjkxMzk6TW9udGdvbWVyeSBDb3VudHkgCitVUy1NTy0yOTE0MTpNb3JnYW4gQ291bnR5IAorVVMtTU8tMjkxNDM6TmV3IE1hZHJpZCBDb3VudHkgCitVUy1NTy0yOTE0NTpOZXd0b24gQ291bnR5IAorVVMtTU8tMjkxNDc6Tm9kYXdheSBDb3VudHkgCitVUy1NTy0yOTE0OTpPcmVnb24gQ291bnR5IAorVVMtTU8tMjkxNTE6T3NhZ2UgQ291bnR5IAorVVMtTU8tMjkxNTM6T3phcmsgQ291bnR5IAorVVMtTU8tMjkxNTU6UGVtaXNjb3QgQ291bnR5IAorVVMtTU8tMjkxNTc6UGVycnkgQ291bnR5IAorVVMtTU8tMjkxNTk6UGV0dGlzIENvdW50eSAKK1VTLU1PLTI5MTYxOlBoZWxwcyBDb3VudHkgCitVUy1NTy0yOTE2MzpQaWtlIENvdW50eSAKK1VTLU1PLTI5MTY1OlBsYXR0ZSBDb3VudHkgCitVUy1NTy0yOTE2NzpQb2xrIENvdW50eSAKK1VTLU1PLTI5MTY5OlB1bGFza2kgQ291bnR5IAorVVMtTU8tMjkxNzE6UHV0bmFtIENvdW50eSAKK1VTLU1PLTI5MTczOlJhbGxzIENvdW50eSAKK1VTLU1PLTI5MTc1OlJhbmRvbHBoIENvdW50eSAKK1VTLU1PLTI5MTc3OlJheSBDb3VudHkgCitVUy1NTy0yOTE3OTpSZXlub2xkcyBDb3VudHkgCitVUy1NTy0yOTE4MTpSaXBsZXkgQ291bnR5IAorVVMtTU8tMjkxODM6U3QuIENoYXJsZXMgQ291bnR5IAorVVMtTU8tMjkxODU6U3QuIENsYWlyIENvdW50eSAKK1VTLU1PLTI5MTg2OlN0ZS4gR2VuZXZpZXZlIENvdW50eSAKK1VTLU1PLTI5MTg3OlN0LiBGcmFuY29pcyBDb3VudHkgCitVUy1NTy0yOTE4OTpTdC4gTG91aXMgQ291bnR5IAorVVMtTU8tMjkxOTU6U2FsaW5lIENvdW50eSAKK1VTLU1PLTI5MTk3OlNjaHV5bGVyIENvdW50eSAKK1VTLU1PLTI5MTk5OlNjb3RsYW5kIENvdW50eSAKK1VTLU1PLTI5MjAxOlNjb3R0IENvdW50eSAKK1VTLU1PLTI5MjAzOlNoYW5ub24gQ291bnR5IAorVVMtTU8tMjkyMDU6U2hlbGJ5IENvdW50eSAKK1VTLU1PLTI5MjA3OlN0b2RkYXJkIENvdW50eSAKK1VTLU1PLTI5MjA5OlN0b25lIENvdW50eSAKK1VTLU1PLTI5MjExOlN1bGxpdmFuIENvdW50eSAKK1VTLU1PLTI5MjEzOlRhbmV5IENvdW50eSAKK1VTLU1PLTI5MjE1OlRleGFzIENvdW50eSAKK1VTLU1PLTI5MjE3OlZlcm5vbiBDb3VudHkgCitVUy1NTy0yOTIxOTpXYXJyZW4gQ291bnR5IAorVVMtTU8tMjkyMjE6V2FzaGluZ3RvbiBDb3VudHkgCitVUy1NTy0yOTIyMzpXYXluZSBDb3VudHkgCitVUy1NTy0yOTIyNTpXZWJzdGVyIENvdW50eSAKK1VTLU1PLTI5MjI3OldvcnRoIENvdW50eSAKK1VTLU1PLTI5MjI5OldyaWdodCBDb3VudHkgCitVUy1NTy0yOTUxMDpTdC4gTG91aXMgY2l0eSAKKyMgdW5kZXIgQWRtaW4gTGV2ZWxbMV0gSURbMjhdOk1pc3Npc3NpcHBpIAorVVMtTVMtMjgwMDE6QWRhbXMgQ291bnR5IAorVVMtTVMtMjgwMDM6QWxjb3JuIENvdW50eSAKK1VTLU1TLTI4MDA1OkFtaXRlIENvdW50eSAKK1VTLU1TLTI4MDA3OkF0dGFsYSBDb3VudHkgCitVUy1NUy0yODAwOTpCZW50b24gQ291bnR5IAorVVMtTVMtMjgwMTE6Qm9saXZhciBDb3VudHkgCitVUy1NUy0yODAxMzpDYWxob3VuIENvdW50eSAKK1VTLU1TLTI4MDE1OkNhcnJvbGwgQ291bnR5IAorVVMtTVMtMjgwMTc6Q2hpY2thc2F3IENvdW50eSAKK1VTLU1TLTI4MDE5OkNob2N0YXcgQ291bnR5IAorVVMtTVMtMjgwMjE6Q2xhaWJvcm5lIENvdW50eSAKK1VTLU1TLTI4MDIzOkNsYXJrZSBDb3VudHkgCitVUy1NUy0yODAyNTpDbGF5IENvdW50eSAKK1VTLU1TLTI4MDI3OkNvYWhvbWEgQ291bnR5IAorVVMtTVMtMjgwMjk6Q29waWFoIENvdW50eSAKK1VTLU1TLTI4MDMxOkNvdmluZ3RvbiBDb3VudHkgCitVUy1NUy0yODAzMzpEZVNvdG8gQ291bnR5IAorVVMtTVMtMjgwMzU6Rm9ycmVzdCBDb3VudHkgCitVUy1NUy0yODAzNzpGcmFua2xpbiBDb3VudHkgCitVUy1NUy0yODAzOTpHZW9yZ2UgQ291bnR5IAorVVMtTVMtMjgwNDE6R3JlZW5lIENvdW50eSAKK1VTLU1TLTI4MDQzOkdyZW5hZGEgQ291bnR5IAorVVMtTVMtMjgwNDU6SGFuY29jayBDb3VudHkgCitVUy1NUy0yODA0NzpIYXJyaXNvbiBDb3VudHkgCitVUy1NUy0yODA0OTpIaW5kcyBDb3VudHkgCitVUy1NUy0yODA1MTpIb2xtZXMgQ291bnR5IAorVVMtTVMtMjgwNTM6SHVtcGhyZXlzIENvdW50eSAKK1VTLU1TLTI4MDU1Oklzc2FxdWVuYSBDb3VudHkgCitVUy1NUy0yODA1NzpJdGF3YW1iYSBDb3VudHkgCitVUy1NUy0yODA1OTpKYWNrc29uIENvdW50eSAKK1VTLU1TLTI4MDYxOkphc3BlciBDb3VudHkgCitVUy1NUy0yODA2MzpKZWZmZXJzb24gQ291bnR5IAorVVMtTVMtMjgwNjU6SmVmZmVyc29uIERhdmlzIENvdW50eSAKK1VTLU1TLTI4MDY3OkpvbmVzIENvdW50eSAKK1VTLU1TLTI4MDY5OktlbXBlciBDb3VudHkgCitVUy1NUy0yODA3MTpMYWZheWV0dGUgQ291bnR5IAorVVMtTVMtMjgwNzM6TGFtYXIgQ291bnR5IAorVVMtTVMtMjgwNzU6TGF1ZGVyZGFsZSBDb3VudHkgCitVUy1NUy0yODA3NzpMYXdyZW5jZSBDb3VudHkgCitVUy1NUy0yODA3OTpMZWFrZSBDb3VudHkgCitVUy1NUy0yODA4MTpMZWUgQ291bnR5IAorVVMtTVMtMjgwODM6TGVmbG9yZSBDb3VudHkgCitVUy1NUy0yODA4NTpMaW5jb2xuIENvdW50eSAKK1VTLU1TLTI4MDg3Okxvd25kZXMgQ291bnR5IAorVVMtTVMtMjgwODk6TWFkaXNvbiBDb3VudHkgCitVUy1NUy0yODA5MTpNYXJpb24gQ291bnR5IAorVVMtTVMtMjgwOTM6TWFyc2hhbGwgQ291bnR5IAorVVMtTVMtMjgwOTU6TW9ucm9lIENvdW50eSAKK1VTLU1TLTI4MDk3Ok1vbnRnb21lcnkgQ291bnR5IAorVVMtTVMtMjgwOTk6TmVzaG9iYSBDb3VudHkgCitVUy1NUy0yODEwMTpOZXd0b24gQ291bnR5IAorVVMtTVMtMjgxMDM6Tm94dWJlZSBDb3VudHkgCitVUy1NUy0yODEwNTpPa3RpYmJlaGEgQ291bnR5IAorVVMtTVMtMjgxMDc6UGFub2xhIENvdW50eSAKK1VTLU1TLTI4MTA5OlBlYXJsIFJpdmVyIENvdW50eSAKK1VTLU1TLTI4MTExOlBlcnJ5IENvdW50eSAKK1VTLU1TLTI4MTEzOlBpa2UgQ291bnR5IAorVVMtTVMtMjgxMTU6UG9udG90b2MgQ291bnR5IAorVVMtTVMtMjgxMTc6UHJlbnRpc3MgQ291bnR5IAorVVMtTVMtMjgxMTk6UXVpdG1hbiBDb3VudHkgCitVUy1NUy0yODEyMTpSYW5raW4gQ291bnR5IAorVVMtTVMtMjgxMjM6U2NvdHQgQ291bnR5IAorVVMtTVMtMjgxMjU6U2hhcmtleSBDb3VudHkgCitVUy1NUy0yODEyNzpTaW1wc29uIENvdW50eSAKK1VTLU1TLTI4MTI5OlNtaXRoIENvdW50eSAKK1VTLU1TLTI4MTMxOlN0b25lIENvdW50eSAKK1VTLU1TLTI4MTMzOlN1bmZsb3dlciBDb3VudHkgCitVUy1NUy0yODEzNTpUYWxsYWhhdGNoaWUgQ291bnR5IAorVVMtTVMtMjgxMzc6VGF0ZSBDb3VudHkgCitVUy1NUy0yODEzOTpUaXBwYWggQ291bnR5IAorVVMtTVMtMjgxNDE6VGlzaG9taW5nbyBDb3VudHkgCitVUy1NUy0yODE0MzpUdW5pY2EgQ291bnR5IAorVVMtTVMtMjgxNDU6VW5pb24gQ291bnR5IAorVVMtTVMtMjgxNDc6V2FsdGhhbGwgQ291bnR5IAorVVMtTVMtMjgxNDk6V2FycmVuIENvdW50eSAKK1VTLU1TLTI4MTUxOldhc2hpbmd0b24gQ291bnR5IAorVVMtTVMtMjgxNTM6V2F5bmUgQ291bnR5IAorVVMtTVMtMjgxNTU6V2Vic3RlciBDb3VudHkgCitVUy1NUy0yODE1NzpXaWxraW5zb24gQ291bnR5IAorVVMtTVMtMjgxNTk6V2luc3RvbiBDb3VudHkgCitVUy1NUy0yODE2MTpZYWxvYnVzaGEgQ291bnR5IAorVVMtTVMtMjgxNjM6WWF6b28gQ291bnR5IAorIyB1bmRlciBBZG1pbiBMZXZlbFsxXSBJRFszMF06TW9udGFuYSAKK1VTLU1ULTMwMDAxOkJlYXZlcmhlYWQgQ291bnR5IAorVVMtTVQtMzAwMDM6QmlnIEhvcm4gQ291bnR5IAorVVMtTVQtMzAwMDU6QmxhaW5lIENvdW50eSAKK1VTLU1ULTMwMDA3OkJyb2Fkd2F0ZXIgQ291bnR5IAorVVMtTVQtMzAwMDk6Q2FyYm9uIENvdW50eSAKK1VTLU1ULTMwMDExOkNhcnRlciBDb3VudHkgCitVUy1NVC0zMDAxMzpDYXNjYWRlIENvdW50eSAKK1VTLU1ULTMwMDE1OkNob3V0ZWF1IENvdW50eSAKK1VTLU1ULTMwMDE3OkN1c3RlciBDb3VudHkgCitVUy1NVC0zMDAxOTpEYW5pZWxzIENvdW50eSAKK1VTLU1ULTMwMDIxOkRhd3NvbiBDb3VudHkgCitVUy1NVC0zMDAyMzpEZWVyIExvZGdlIENvdW50eSAKK1VTLU1ULTMwMDI1OkZhbGxvbiBDb3VudHkgCitVUy1NVC0zMDAyNzpGZXJndXMgQ291bnR5IAorVVMtTVQtMzAwMjk6RmxhdGhlYWQgQ291bnR5IAorVVMtTVQtMzAwMzE6R2FsbGF0aW4gQ291bnR5IAorVVMtTVQtMzAwMzM6R2FyZmllbGQgQ291bnR5IAorVVMtTVQtMzAwMzU6R2xhY2llciBDb3VudHkgCitVUy1NVC0zMDAzNzpHb2xkZW4gVmFsbGV5IENvdW50eSAKK1VTLU1ULTMwMDM5OkdyYW5pdGUgQ291bnR5IAorVVMtTVQtMzAwNDE6SGlsbCBDb3VudHkgCitVUy1NVC0zMDA0MzpKZWZmZXJzb24gQ291bnR5IAorVVMtTVQtMzAwNDU6SnVkaXRoIEJhc2luIENvdW50eSAKK1VTLU1ULTMwMDQ3Okxha2UgQ291bnR5IAorVVMtTVQtMzAwNDk6TGV3aXMgYW5kIENsYXJrIENvdW50eSAKK1VTLU1ULTMwMDUxOkxpYmVydHkgQ291bnR5IAorVVMtTVQtMzAwNTM6TGluY29sbiBDb3VudHkgCitVUy1NVC0zMDA1NTpNY0NvbmUgQ291bnR5IAorVVMtTVQtMzAwNTc6TWFkaXNvbiBDb3VudHkgCitVUy1NVC0zMDA1OTpNZWFnaGVyIENvdW50eSAKK1VTLU1ULTMwMDYxOk1pbmVyYWwgQ291bnR5IAorVVMtTVQtMzAwNjM6TWlzc291bGEgQ291bnR5IAorVVMtTVQtMzAwNjU6TXVzc2Vsc2hlbGwgQ291bnR5IAorVVMtTVQtMzAwNjc6UGFyayBDb3VudHkgCitVUy1NVC0zMDA2OTpQZXRyb2xldW0gQ291bnR5IAorVVMtTVQtMzAwNzE6UGhpbGxpcHMgQ291bnR5IAorVVMtTVQtMzAwNzM6UG9uZGVyYSBDb3VudHkgCitVUy1NVC0zMDA3NTpQb3dkZXIgUml2ZXIgQ291bnR5IAorVVMtTVQtMzAwNzc6UG93ZWxsIENvdW50eSAKK1VTLU1ULTMwMDc5OlByYWlyaWUgQ291bnR5IAorVVMtTVQtMzAwODE6UmF2YWxsaSBDb3VudHkgCitVUy1NVC0zMDA4MzpSaWNobGFuZCBDb3VudHkgCitVUy1NVC0zMDA4NTpSb29zZXZlbHQgQ291bnR5IAorVVMtTVQtMzAwODc6Um9zZWJ1ZCBDb3VudHkgCitVUy1NVC0zMDA4OTpTYW5kZXJzIENvdW50eSAKK1VTLU1ULTMwMDkxOlNoZXJpZGFuIENvdW50eSAKK1VTLU1ULTMwMDkzOlNpbHZlciBCb3cgQ291bnR5IAorVVMtTVQtMzAwOTU6U3RpbGx3YXRlciBDb3VudHkgCitVUy1NVC0zMDA5NzpTd2VldCBHcmFzcyBDb3VudHkgCitVUy1NVC0zMDA5OTpUZXRvbiBDb3VudHkgCitVUy1NVC0zMDEwMTpUb29sZSBDb3VudHkgCitVUy1NVC0zMDEwMzpUcmVhc3VyZSBDb3VudHkgCitVUy1NVC0zMDEwNTpWYWxsZXkgQ291bnR5IAorVVMtTVQtMzAxMDc6V2hlYXRsYW5kIENvdW50eSAKK1VTLU1ULTMwMTA5OldpYmF1eCBDb3VudHkgCitVUy1NVC0zMDExMTpZZWxsb3dzdG9uZSBDb3VudHkgCisjIHVuZGVyIEFkbWluIExldmVsWzFdIElEWzM3XTpOb3J0aCBDYXJvbGluYSAKK1VTLU5DLTM3MDAxOkFsYW1hbmNlIENvdW50eSAKK1VTLU5DLTM3MDAzOkFsZXhhbmRlciBDb3VudHkgCitVUy1OQy0zNzAwNTpBbGxlZ2hhbnkgQ291bnR5IAorVVMtTkMtMzcwMDc6QW5zb24gQ291bnR5IAorVVMtTkMtMzcwMDk6QXNoZSBDb3VudHkgCitVUy1OQy0zNzAxMTpBdmVyeSBDb3VudHkgCitVUy1OQy0zNzAxMzpCZWF1Zm9ydCBDb3VudHkgCitVUy1OQy0zNzAxNTpCZXJ0aWUgQ291bnR5IAorVVMtTkMtMzcwMTc6QmxhZGVuIENvdW50eSAKK1VTLU5DLTM3MDE5OkJydW5zd2ljayBDb3VudHkgCitVUy1OQy0zNzAyMTpCdW5jb21iZSBDb3VudHkgCitVUy1OQy0zNzAyMzpCdXJrZSBDb3VudHkgCitVUy1OQy0zNzAyNTpDYWJhcnJ1cyBDb3VudHkgCitVUy1OQy0zNzAyNzpDYWxkd2VsbCBDb3VudHkgCitVUy1OQy0zNzAyOTpDYW1kZW4gQ291bnR5IAorVVMtTkMtMzcwMzE6Q2FydGVyZXQgQ291bnR5IAorVVMtTkMtMzcwMzM6Q2Fzd2VsbCBDb3VudHkgCitVUy1OQy0zNzAzNTpDYXRhd2JhIENvdW50eSAKK1VTLU5DLTM3MDM3OkNoYXRoYW0gQ291bnR5IAorVVMtTkMtMzcwMzk6Q2hlcm9rZWUgQ291bnR5IAorVVMtTkMtMzcwNDE6Q2hvd2FuIENvdW50eSAKK1VTLU5DLTM3MDQzOkNsYXkgQ291bnR5IAorVVMtTkMtMzcwNDU6Q2xldmVsYW5kIENvdW50eSAKK1VTLU5DLTM3MDQ3OkNvbHVtYnVzIENvdW50eSAKK1VTLU5DLTM3MDQ5OkNyYXZlbiBDb3VudHkgCitVUy1OQy0zNzA1MTpDdW1iZXJsYW5kIENvdW50eSAKK1VTLU5DLTM3MDUzOkN1cnJpdHVjayBDb3VudHkgCitVUy1OQy0zNzA1NTpEYXJlIENvdW50eSAKK1VTLU5DLTM3MDU3OkRhdmlkc29uIENvdW50eSAKK1VTLU5DLTM3MDU5OkRhdmllIENvdW50eSAKK1VTLU5DLTM3MDYxOkR1cGxpbiBDb3VudHkgCitVUy1OQy0zNzA2MzpEdXJoYW0gQ291bnR5IAorVVMtTkMtMzcwNjU6RWRnZWNvbWJlIENvdW50eSAKK1VTLU5DLTM3MDY3OkZvcnN5dGggQ291bnR5IAorVVMtTkMtMzcwNjk6RnJhbmtsaW4gQ291bnR5IAorVVMtTkMtMzcwNzE6R2FzdG9uIENvdW50eSAKK1VTLU5DLTM3MDczOkdhdGVzIENvdW50eSAKK1VTLU5DLTM3MDc1OkdyYWhhbSBDb3VudHkgCitVUy1OQy0zNzA3NzpHcmFudmlsbGUgQ291bnR5IAorVVMtTkMtMzcwNzk6R3JlZW5lIENvdW50eSAKK1VTLU5DLTM3MDgxOkd1aWxmb3JkIENvdW50eSAKK1VTLU5DLTM3MDgzOkhhbGlmYXggQ291bnR5IAorVVMtTkMtMzcwODU6SGFybmV0dCBDb3VudHkgCitVUy1OQy0zNzA4NzpIYXl3b29kIENvdW50eSAKK1VTLU5DLTM3MDg5OkhlbmRlcnNvbiBDb3VudHkgCitVUy1OQy0zNzA5MTpIZXJ0Zm9yZCBDb3VudHkgCitVUy1OQy0zNzA5MzpIb2tlIENvdW50eSAKK1VTLU5DLTM3MDk1Okh5ZGUgQ291bnR5IAorVVMtTkMtMzcwOTc6SXJlZGVsbCBDb3VudHkgCitVUy1OQy0zNzA5OTpKYWNrc29uIENvdW50eSAKK1VTLU5DLTM3MTAxOkpvaG5zdG9uIENvdW50eSAKK1VTLU5DLTM3MTAzOkpvbmVzIENvdW50eSAKK1VTLU5DLTM3MTA1OkxlZSBDb3VudHkgCitVUy1OQy0zNzEwNzpMZW5vaXIgQ291bnR5IAorVVMtTkMtMzcxMDk6TGluY29sbiBDb3VudHkgCitVUy1OQy0zNzExMTpNY0Rvd2VsbCBDb3VudHkgCitVUy1OQy0zNzExMzpNYWNvbiBDb3VudHkgCitVUy1OQy0zNzExNTpNYWRpc29uIENvdW50eSAKK1VTLU5DLTM3MTE3Ok1hcnRpbiBDb3VudHkgCitVUy1OQy0zNzExOTpNZWNrbGVuYnVyZyBDb3VudHkgCitVUy1OQy0zNzEyMTpNaXRjaGVsbCBDb3VudHkgCitVUy1OQy0zNzEyMzpNb250Z29tZXJ5IENvdW50eSAKK1VTLU5DLTM3MTI1Ok1vb3JlIENvdW50eSAKK1VTLU5DLTM3MTI3Ok5hc2ggQ291bnR5IAorVVMtTkMtMzcxMjk6TmV3IEhhbm92ZXIgQ291bnR5IAorVVMtTkMtMzcxMzE6Tm9ydGhhbXB0b24gQ291bnR5IAorVVMtTkMtMzcxMzM6T25zbG93IENvdW50eSAKK1VTLU5DLTM3MTM1Ok9yYW5nZSBDb3VudHkgCitVUy1OQy0zNzEzNzpQYW1saWNvIENvdW50eSAKK1VTLU5DLTM3MTM5OlBhc3F1b3RhbmsgQ291bnR5IAorVVMtTkMtMzcxNDE6UGVuZGVyIENvdW50eSAKK1VTLU5DLTM3MTQzOlBlcnF1aW1hbnMgQ291bnR5IAorVVMtTkMtMzcxNDU6UGVyc29uIENvdW50eSAKK1VTLU5DLTM3MTQ3OlBpdHQgQ291bnR5IAorVVMtTkMtMzcxNDk6UG9sayBDb3VudHkgCitVUy1OQy0zNzE1MTpSYW5kb2xwaCBDb3VudHkgCitVUy1OQy0zNzE1MzpSaWNobW9uZCBDb3VudHkgCitVUy1OQy0zNzE1NTpSb2Jlc29uIENvdW50eSAKK1VTLU5DLTM3MTU3OlJvY2tpbmdoYW0gQ291bnR5IAorVVMtTkMtMzcxNTk6Um93YW4gQ291bnR5IAorVVMtTkMtMzcxNjE6UnV0aGVyZm9yZCBDb3VudHkgCitVUy1OQy0zNzE2MzpTYW1wc29uIENvdW50eSAKK1VTLU5DLTM3MTY1OlNjb3RsYW5kIENvdW50eSAKK1VTLU5DLTM3MTY3OlN0YW5seSBDb3VudHkgCitVUy1OQy0zNzE2OTpTdG9rZXMgQ291bnR5IAorVVMtTkMtMzcxNzE6U3VycnkgQ291bnR5IAorVVMtTkMtMzcxNzM6U3dhaW4gQ291bnR5IAorVVMtTkMtMzcxNzU6VHJhbnN5bHZhbmlhIENvdW50eSAKK1VTLU5DLTM3MTc3OlR5cnJlbGwgQ291bnR5IAorVVMtTkMtMzcxNzk6VW5pb24gQ291bnR5IAorVVMtTkMtMzcxODE6VmFuY2UgQ291bnR5IAorVVMtTkMtMzcxODM6V2FrZSBDb3VudHkgCitVUy1OQy0zNzE4NTpXYXJyZW4gQ291bnR5IAorVVMtTkMtMzcxODc6V2FzaGluZ3RvbiBDb3VudHkgCitVUy1OQy0zNzE4OTpXYXRhdWdhIENvdW50eSAKK1VTLU5DLTM3MTkxOldheW5lIENvdW50eSAKK1VTLU5DLTM3MTkzOldpbGtlcyBDb3VudHkgCitVUy1OQy0zNzE5NTpXaWxzb24gQ291bnR5IAorVVMtTkMtMzcxOTc6WWFka2luIENvdW50eSAKK1VTLU5DLTM3MTk5OllhbmNleSBDb3VudHkgCisjIHVuZGVyIEFkbWluIExldmVsWzFdIElEWzM4XTpOb3J0aCBEYWtvdGEgCitVUy1ORC0zODAwMTpBZGFtcyBDb3VudHkgCitVUy1ORC0zODAwMzpCYXJuZXMgQ291bnR5IAorVVMtTkQtMzgwMDU6QmVuc29uIENvdW50eSAKK1VTLU5ELTM4MDA3OkJpbGxpbmdzIENvdW50eSAKK1VTLU5ELTM4MDA5OkJvdHRpbmVhdSBDb3VudHkgCitVUy1ORC0zODAxMTpCb3dtYW4gQ291bnR5IAorVVMtTkQtMzgwMTM6QnVya2UgQ291bnR5IAorVVMtTkQtMzgwMTU6QnVybGVpZ2ggQ291bnR5IAorVVMtTkQtMzgwMTc6Q2FzcyBDb3VudHkgCitVUy1ORC0zODAxOTpDYXZhbGllciBDb3VudHkgCitVUy1ORC0zODAyMTpEaWNrZXkgQ291bnR5IAorVVMtTkQtMzgwMjM6RGl2aWRlIENvdW50eSAKK1VTLU5ELTM4MDI1OkR1bm4gQ291bnR5IAorVVMtTkQtMzgwMjc6RWRkeSBDb3VudHkgCitVUy1ORC0zODAyOTpFbW1vbnMgQ291bnR5IAorVVMtTkQtMzgwMzE6Rm9zdGVyIENvdW50eSAKK1VTLU5ELTM4MDMzOkdvbGRlbiBWYWxsZXkgQ291bnR5IAorVVMtTkQtMzgwMzU6R3JhbmQgRm9ya3MgQ291bnR5IAorVVMtTkQtMzgwMzc6R3JhbnQgQ291bnR5IAorVVMtTkQtMzgwMzk6R3JpZ2dzIENvdW50eSAKK1VTLU5ELTM4MDQxOkhldHRpbmdlciBDb3VudHkgCitVUy1ORC0zODA0MzpLaWRkZXIgQ291bnR5IAorVVMtTkQtMzgwNDU6TGFNb3VyZSBDb3VudHkgCitVUy1ORC0zODA0NzpMb2dhbiBDb3VudHkgCitVUy1ORC0zODA0OTpNY0hlbnJ5IENvdW50eSAKK1VTLU5ELTM4MDUxOk1jSW50b3NoIENvdW50eSAKK1VTLU5ELTM4MDUzOk1jS2VuemllIENvdW50eSAKK1VTLU5ELTM4MDU1Ok1jTGVhbiBDb3VudHkgCitVUy1ORC0zODA1NzpNZXJjZXIgQ291bnR5IAorVVMtTkQtMzgwNTk6TW9ydG9uIENvdW50eSAKK1VTLU5ELTM4MDYxOk1vdW50cmFpbCBDb3VudHkgCitVUy1ORC0zODA2MzpOZWxzb24gQ291bnR5IAorVVMtTkQtMzgwNjU6T2xpdmVyIENvdW50eSAKK1VTLU5ELTM4MDY3OlBlbWJpbmEgQ291bnR5IAorVVMtTkQtMzgwNjk6UGllcmNlIENvdW50eSAKK1VTLU5ELTM4MDcxOlJhbXNleSBDb3VudHkgCitVUy1ORC0zODA3MzpSYW5zb20gQ291bnR5IAorVVMtTkQtMzgwNzU6UmVudmlsbGUgQ291bnR5IAorVVMtTkQtMzgwNzc6UmljaGxhbmQgQ291bnR5IAorVVMtTkQtMzgwNzk6Um9sZXR0ZSBDb3VudHkgCitVUy1ORC0zODA4MTpTYXJnZW50IENvdW50eSAKK1VTLU5ELTM4MDgzOlNoZXJpZGFuIENvdW50eSAKK1VTLU5ELTM4MDg1OlNpb3V4IENvdW50eSAKK1VTLU5ELTM4MDg3OlNsb3BlIENvdW50eSAKK1VTLU5ELTM4MDg5OlN0YXJrIENvdW50eSAKK1VTLU5ELTM4MDkxOlN0ZWVsZSBDb3VudHkgCitVUy1ORC0zODA5MzpTdHV0c21hbiBDb3VudHkgCitVUy1ORC0zODA5NTpUb3duZXIgQ291bnR5IAorVVMtTkQtMzgwOTc6VHJhaWxsIENvdW50eSAKK1VTLU5ELTM4MDk5OldhbHNoIENvdW50eSAKK1VTLU5ELTM4MTAxOldhcmQgQ291bnR5IAorVVMtTkQtMzgxMDM6V2VsbHMgQ291bnR5IAorVVMtTkQtMzgxMDU6V2lsbGlhbXMgQ291bnR5IAorIyB1bmRlciBBZG1pbiBMZXZlbFsxXSBJRFszMV06TmVicmFza2EgCitVUy1ORS0zMTAwMTpBZGFtcyBDb3VudHkgCitVUy1ORS0zMTAwMzpBbnRlbG9wZSBDb3VudHkgCitVUy1ORS0zMTAwNTpBcnRodXIgQ291bnR5IAorVVMtTkUtMzEwMDc6QmFubmVyIENvdW50eSAKK1VTLU5FLTMxMDA5OkJsYWluZSBDb3VudHkgCitVUy1ORS0zMTAxMTpCb29uZSBDb3VudHkgCitVUy1ORS0zMTAxMzpCb3ggQnV0dGUgQ291bnR5IAorVVMtTkUtMzEwMTU6Qm95ZCBDb3VudHkgCitVUy1ORS0zMTAxNzpCcm93biBDb3VudHkgCitVUy1ORS0zMTAxOTpCdWZmYWxvIENvdW50eSAKK1VTLU5FLTMxMDIxOkJ1cnQgQ291bnR5IAorVVMtTkUtMzEwMjM6QnV0bGVyIENvdW50eSAKK1VTLU5FLTMxMDI1OkNhc3MgQ291bnR5IAorVVMtTkUtMzEwMjc6Q2VkYXIgQ291bnR5IAorVVMtTkUtMzEwMjk6Q2hhc2UgQ291bnR5IAorVVMtTkUtMzEwMzE6Q2hlcnJ5IENvdW50eSAKK1VTLU5FLTMxMDMzOkNoZXllbm5lIENvdW50eSAKK1VTLU5FLTMxMDM1OkNsYXkgQ291bnR5IAorVVMtTkUtMzEwMzc6Q29sZmF4IENvdW50eSAKK1VTLU5FLTMxMDM5OkN1bWluZyBDb3VudHkgCitVUy1ORS0zMTA0MTpDdXN0ZXIgQ291bnR5IAorVVMtTkUtMzEwNDM6RGFrb3RhIENvdW50eSAKK1VTLU5FLTMxMDQ1OkRhd2VzIENvdW50eSAKK1VTLU5FLTMxMDQ3OkRhd3NvbiBDb3VudHkgCitVUy1ORS0zMTA0OTpEZXVlbCBDb3VudHkgCitVUy1ORS0zMTA1MTpEaXhvbiBDb3VudHkgCitVUy1ORS0zMTA1MzpEb2RnZSBDb3VudHkgCitVUy1ORS0zMTA1NTpEb3VnbGFzIENvdW50eSAKK1VTLU5FLTMxMDU3OkR1bmR5IENvdW50eSAKK1VTLU5FLTMxMDU5OkZpbGxtb3JlIENvdW50eSAKK1VTLU5FLTMxMDYxOkZyYW5rbGluIENvdW50eSAKK1VTLU5FLTMxMDYzOkZyb250aWVyIENvdW50eSAKK1VTLU5FLTMxMDY1OkZ1cm5hcyBDb3VudHkgCitVUy1ORS0zMTA2NzpHYWdlIENvdW50eSAKK1VTLU5FLTMxMDY5OkdhcmRlbiBDb3VudHkgCitVUy1ORS0zMTA3MTpHYXJmaWVsZCBDb3VudHkgCitVUy1ORS0zMTA3MzpHb3NwZXIgQ291bnR5IAorVVMtTkUtMzEwNzU6R3JhbnQgQ291bnR5IAorVVMtTkUtMzEwNzc6R3JlZWxleSBDb3VudHkgCitVUy1ORS0zMTA3OTpIYWxsIENvdW50eSAKK1VTLU5FLTMxMDgxOkhhbWlsdG9uIENvdW50eSAKK1VTLU5FLTMxMDgzOkhhcmxhbiBDb3VudHkgCitVUy1ORS0zMTA4NTpIYXllcyBDb3VudHkgCitVUy1ORS0zMTA4NzpIaXRjaGNvY2sgQ291bnR5IAorVVMtTkUtMzEwODk6SG9sdCBDb3VudHkgCitVUy1ORS0zMTA5MTpIb29rZXIgQ291bnR5IAorVVMtTkUtMzEwOTM6SG93YXJkIENvdW50eSAKK1VTLU5FLTMxMDk1OkplZmZlcnNvbiBDb3VudHkgCitVUy1ORS0zMTA5NzpKb2huc29uIENvdW50eSAKK1VTLU5FLTMxMDk5OktlYXJuZXkgQ291bnR5IAorVVMtTkUtMzExMDE6S2VpdGggQ291bnR5IAorVVMtTkUtMzExMDM6S2V5YSBQYWhhIENvdW50eSAKK1VTLU5FLTMxMTA1OktpbWJhbGwgQ291bnR5IAorVVMtTkUtMzExMDc6S25veCBDb3VudHkgCitVUy1ORS0zMTEwOTpMYW5jYXN0ZXIgQ291bnR5IAorVVMtTkUtMzExMTE6TGluY29sbiBDb3VudHkgCitVUy1ORS0zMTExMzpMb2dhbiBDb3VudHkgCitVUy1ORS0zMTExNTpMb3VwIENvdW50eSAKK1VTLU5FLTMxMTE3Ok1jUGhlcnNvbiBDb3VudHkgCitVUy1ORS0zMTExOTpNYWRpc29uIENvdW50eSAKK1VTLU5FLTMxMTIxOk1lcnJpY2sgQ291bnR5IAorVVMtTkUtMzExMjM6TW9ycmlsbCBDb3VudHkgCitVUy1ORS0zMTEyNTpOYW5jZSBDb3VudHkgCitVUy1ORS0zMTEyNzpOZW1haGEgQ291bnR5IAorVVMtTkUtMzExMjk6TnVja29sbHMgQ291bnR5IAorVVMtTkUtMzExMzE6T3RvZSBDb3VudHkgCitVUy1ORS0zMTEzMzpQYXduZWUgQ291bnR5IAorVVMtTkUtMzExMzU6UGVya2lucyBDb3VudHkgCitVUy1ORS0zMTEzNzpQaGVscHMgQ291bnR5IAorVVMtTkUtMzExMzk6UGllcmNlIENvdW50eSAKK1VTLU5FLTMxMTQxOlBsYXR0ZSBDb3VudHkgCitVUy1ORS0zMTE0MzpQb2xrIENvdW50eSAKK1VTLU5FLTMxMTQ1OlJlZCBXaWxsb3cgQ291bnR5IAorVVMtTkUtMzExNDc6UmljaGFyZHNvbiBDb3VudHkgCitVUy1ORS0zMTE0OTpSb2NrIENvdW50eSAKK1VTLU5FLTMxMTUxOlNhbGluZSBDb3VudHkgCitVUy1ORS0zMTE1MzpTYXJweSBDb3VudHkgCitVUy1ORS0zMTE1NTpTYXVuZGVycyBDb3VudHkgCitVUy1ORS0zMTE1NzpTY290dHMgQmx1ZmYgQ291bnR5IAorVVMtTkUtMzExNTk6U2V3YXJkIENvdW50eSAKK1VTLU5FLTMxMTYxOlNoZXJpZGFuIENvdW50eSAKK1VTLU5FLTMxMTYzOlNoZXJtYW4gQ291bnR5IAorVVMtTkUtMzExNjU6U2lvdXggQ291bnR5IAorVVMtTkUtMzExNjc6U3RhbnRvbiBDb3VudHkgCitVUy1ORS0zMTE2OTpUaGF5ZXIgQ291bnR5IAorVVMtTkUtMzExNzE6VGhvbWFzIENvdW50eSAKK1VTLU5FLTMxMTczOlRodXJzdG9uIENvdW50eSAKK1VTLU5FLTMxMTc1OlZhbGxleSBDb3VudHkgCitVUy1ORS0zMTE3NzpXYXNoaW5ndG9uIENvdW50eSAKK1VTLU5FLTMxMTc5OldheW5lIENvdW50eSAKK1VTLU5FLTMxMTgxOldlYnN0ZXIgQ291bnR5IAorVVMtTkUtMzExODM6V2hlZWxlciBDb3VudHkgCitVUy1ORS0zMTE4NTpZb3JrIENvdW50eSAKKyMgdW5kZXIgQWRtaW4gTGV2ZWxbMV0gSURbMzNdOk5ldyBIYW1wc2hpcmUgCitVUy1OSC0zMzAwMTpCZWxrbmFwIENvdW50eSAKK1VTLU5ILTMzMDAzOkNhcnJvbGwgQ291bnR5IAorVVMtTkgtMzMwMDU6Q2hlc2hpcmUgQ291bnR5IAorVVMtTkgtMzMwMDc6Q29vcyBDb3VudHkgCitVUy1OSC0zMzAwOTpHcmFmdG9uIENvdW50eSAKK1VTLU5ILTMzMDExOkhpbGxzQm9yb3VnaCBDb3VudHkKK1VTLU5ILTMzMDEzOk1lcnJpbWFjayBDb3VudHkgCitVUy1OSC0zMzAxNTpSb2NraW5naGFtIENvdW50eSAKK1VTLU5ILTMzMDE3OlN0cmFmZm9yZCBDb3VudHkgCitVUy1OSC0zMzAxOTpTdWxsaXZhbiBDb3VudHkgCisjIHVuZGVyIEFkbWluIExldmVsWzFdIElEWzM0XTpOZXcgSmVyc2V5IAorVVMtTkotMzQwMDE6QXRsYW50aWMgQ291bnR5IAorVVMtTkotMzQwMDM6QmVyZ2VuIENvdW50eSAKK1VTLU5KLTM0MDA1OkJ1cmxpbmd0b24gQ291bnR5IAorVVMtTkotMzQwMDc6Q2FtZGVuIENvdW50eSAKK1VTLU5KLTM0MDA5OkNhcGUgTWF5IENvdW50eSAKK1VTLU5KLTM0MDExOkN1bWJlcmxhbmQgQ291bnR5IAorVVMtTkotMzQwMTM6RXNzZXggQ291bnR5IAorVVMtTkotMzQwMTU6R2xvdWNlc3RlciBDb3VudHkgCitVUy1OSi0zNDAxNzpIdWRzb24gQ291bnR5IAorVVMtTkotMzQwMTk6SHVudGVyZG9uIENvdW50eSAKK1VTLU5KLTM0MDIxOk1lcmNlciBDb3VudHkgCitVUy1OSi0zNDAyMzpNaWRkbGVzZXggQ291bnR5IAorVVMtTkotMzQwMjU6TW9ubW91dGggQ291bnR5IAorVVMtTkotMzQwMjc6TW9ycmlzIENvdW50eSAKK1VTLU5KLTM0MDI5Ok9jZWFuIENvdW50eSAKK1VTLU5KLTM0MDMxOlBhc3NhaWMgQ291bnR5IAorVVMtTkotMzQwMzM6U2FsZW0gQ291bnR5IAorVVMtTkotMzQwMzU6U29tZXJzZXQgQ291bnR5IAorVVMtTkotMzQwMzc6U3Vzc2V4IENvdW50eSAKK1VTLU5KLTM0MDM5OlVuaW9uIENvdW50eSAKK1VTLU5KLTM0MDQxOldhcnJlbiBDb3VudHkgCisjIHVuZGVyIEFkbWluIExldmVsWzFdIElEWzM1XTpOZXcgTWV4aWNvIAorVVMtTk0tMzUwMDE6QmVybmFsaWxsbyBDb3VudHkgCitVUy1OTS0zNTAwMzpDYXRyb24gQ291bnR5IAorVVMtTk0tMzUwMDU6Q2hhdmVzIENvdW50eSAKK1VTLU5NLTM1MDA2OkNpYm9sYSBDb3VudHkgCitVUy1OTS0zNTAwNzpDb2xmYXggQ291bnR5IAorVVMtTk0tMzUwMDk6Q3VycnkgQ291bnR5IAorVVMtTk0tMzUwMTE6RGUgQmFjYSBDb3VudHkgCitVUy1OTS0zNTAxMzpEb25hIEFuYSBDb3VudHkgCitVUy1OTS0zNTAxNTpFZGR5IENvdW50eSAKK1VTLU5NLTM1MDE3OkdyYW50IENvdW50eSAKK1VTLU5NLTM1MDE5Okd1YWRhbHVwZSBDb3VudHkgCitVUy1OTS0zNTAyMTpIYXJkaW5nIENvdW50eSAKK1VTLU5NLTM1MDIzOkhpZGFsZ28gQ291bnR5IAorVVMtTk0tMzUwMjU6TGVhIENvdW50eSAKK1VTLU5NLTM1MDI3OkxpbmNvbG4gQ291bnR5IAorVVMtTk0tMzUwMjg6TG9zIEFsYW1vcyBDb3VudHkgCitVUy1OTS0zNTAyOTpMdW5hIENvdW50eSAKK1VTLU5NLTM1MDMxOk1jS2lubGV5IENvdW50eSAKK1VTLU5NLTM1MDMzOk1vcmEgQ291bnR5IAorVVMtTk0tMzUwMzU6T3Rlcm8gQ291bnR5IAorVVMtTk0tMzUwMzc6UXVheSBDb3VudHkgCitVUy1OTS0zNTAzOTpSaW8gQXJyaWJhIENvdW50eSAKK1VTLU5NLTM1MDQxOlJvb3NldmVsdCBDb3VudHkgCitVUy1OTS0zNTA0MzpTYW5kb3ZhbCBDb3VudHkgCitVUy1OTS0zNTA0NTpTYW4gSnVhbiBDb3VudHkgCitVUy1OTS0zNTA0NzpTYW4gTWlndWVsIENvdW50eSAKK1VTLU5NLTM1MDQ5OlNhbnRhIEZlIENvdW50eSAKK1VTLU5NLTM1MDUxOlNpZXJyYSBDb3VudHkgCitVUy1OTS0zNTA1MzpTb2NvcnJvIENvdW50eSAKK1VTLU5NLTM1MDU1OlRhb3MgQ291bnR5IAorVVMtTk0tMzUwNTc6VG9ycmFuY2UgQ291bnR5IAorVVMtTk0tMzUwNTk6VW5pb24gQ291bnR5IAorVVMtTk0tMzUwNjE6VmFsZW5jaWEgQ291bnR5IAorIyB1bmRlciBBZG1pbiBMZXZlbFsxXSBJRFszMl06TmV2YWRhIAorVVMtTlYtMzIwMDE6Q2h1cmNoaWxsIENvdW50eSAKK1VTLU5WLTMyMDAzOkNsYXJrIENvdW50eSAKK1VTLU5WLTMyMDA1OkRvdWdsYXMgQ291bnR5IAorVVMtTlYtMzIwMDc6RWxrbyBDb3VudHkgCitVUy1OVi0zMjAwOTpFc21lcmFsZGEgQ291bnR5IAorVVMtTlYtMzIwMTE6RXVyZWthIENvdW50eSAKK1VTLU5WLTMyMDEzOkh1bWJvbGR0IENvdW50eSAKK1VTLU5WLTMyMDE1OkxhbmRlciBDb3VudHkgCitVUy1OVi0zMjAxNzpMaW5jb2xuIENvdW50eSAKK1VTLU5WLTMyMDE5Okx5b24gQ291bnR5IAorVVMtTlYtMzIwMjE6TWluZXJhbCBDb3VudHkgCitVUy1OVi0zMjAyMzpOeWUgQ291bnR5IAorVVMtTlYtMzIwMjc6UGVyc2hpbmcgQ291bnR5IAorVVMtTlYtMzIwMjk6U3RvcmV5IENvdW50eSAKK1VTLU5WLTMyMDMxOldhc2hvZSBDb3VudHkgCitVUy1OVi0zMjAzMzpXaGl0ZSBQaW5lIENvdW50eSAKK1VTLU5WLTMyNTEwOkNhcnNvbiBDaXR5IAorIyB1bmRlciBBZG1pbiBMZXZlbFsxXSBJRFszNl06TmV3IFlvcmsgCitVUy1OWS0zNjAwMTpBbGJhbnkgQ291bnR5IAorVVMtTlktMzYwMDM6QWxsZWdhbnkgQ291bnR5IAorVVMtTlktMzYwMDU6QnJvbnggQ291bnR5IAorVVMtTlktMzYwMDc6QnJvb21lIENvdW50eSAKK1VTLU5ZLTM2MDA5OkNhdHRhcmF1Z3VzIENvdW50eSAKK1VTLU5ZLTM2MDExOkNheXVnYSBDb3VudHkgCitVUy1OWS0zNjAxMzpDaGF1dGF1cXVhIENvdW50eSAKK1VTLU5ZLTM2MDE1OkNoZW11bmcgQ291bnR5IAorVVMtTlktMzYwMTc6Q2hlbmFuZ28gQ291bnR5IAorVVMtTlktMzYwMTk6Q2xpbnRvbiBDb3VudHkgCitVUy1OWS0zNjAyMTpDb2x1bWJpYSBDb3VudHkgCitVUy1OWS0zNjAyMzpDb3J0bGFuZCBDb3VudHkgCitVUy1OWS0zNjAyNTpEZWxhd2FyZSBDb3VudHkgCitVUy1OWS0zNjAyNzpEdXRjaGVzcyBDb3VudHkgCitVUy1OWS0zNjAyOTpFcmllIENvdW50eSAKK1VTLU5ZLTM2MDMxOkVzc2V4IENvdW50eSAKK1VTLU5ZLTM2MDMzOkZyYW5rbGluIENvdW50eSAKK1VTLU5ZLTM2MDM1OkZ1bHRvbiBDb3VudHkgCitVUy1OWS0zNjAzNzpHZW5lc2VlIENvdW50eSAKK1VTLU5ZLTM2MDM5OkdyZWVuZSBDb3VudHkgCitVUy1OWS0zNjA0MTpIYW1pbHRvbiBDb3VudHkgCitVUy1OWS0zNjA0MzpIZXJraW1lciBDb3VudHkgCitVUy1OWS0zNjA0NTpKZWZmZXJzb24gQ291bnR5IAorVVMtTlktMzYwNDc6S2luZ3MgQ291bnR5IAorVVMtTlktMzYwNDk6TGV3aXMgQ291bnR5IAorVVMtTlktMzYwNTE6TGl2aW5nc3RvbiBDb3VudHkgCitVUy1OWS0zNjA1MzpNYWRpc29uIENvdW50eSAKK1VTLU5ZLTM2MDU1Ok1vbnJvZSBDb3VudHkgCitVUy1OWS0zNjA1NzpNb250Z29tZXJ5IENvdW50eSAKK1VTLU5ZLTM2MDU5Ok5hc3NhdSBDb3VudHkgCitVUy1OWS0zNjA2MTpOZXcgWW9yayBDb3VudHkgCitVUy1OWS0zNjA2MzpOaWFnYXJhIENvdW50eSAKK1VTLU5ZLTM2MDY1Ok9uZWlkYSBDb3VudHkgCitVUy1OWS0zNjA2NzpPbm9uZGFnYSBDb3VudHkgCitVUy1OWS0zNjA2OTpPbnRhcmlvIENvdW50eSAKK1VTLU5ZLTM2MDcxOk9yYW5nZSBDb3VudHkgCitVUy1OWS0zNjA3MzpPcmxlYW5zIENvdW50eSAKK1VTLU5ZLTM2MDc1Ok9zd2VnbyBDb3VudHkgCitVUy1OWS0zNjA3NzpPdHNlZ28gQ291bnR5IAorVVMtTlktMzYwNzk6UHV0bmFtIENvdW50eSAKK1VTLU5ZLTM2MDgxOlF1ZWVucyBDb3VudHkgCitVUy1OWS0zNjA4MzpSZW5zc2VsYWVyIENvdW50eSAKK1VTLU5ZLTM2MDg1OlJpY2htb25kIENvdW50eSAKK1VTLU5ZLTM2MDg3OlJvY2tsYW5kIENvdW50eSAKK1VTLU5ZLTM2MDg5OlN0LiBMYXdyZW5jZSBDb3VudHkgCitVUy1OWS0zNjA5MTpTYXJhdG9nYSBDb3VudHkgCitVUy1OWS0zNjA5MzpTY2hlbmVjdGFkeSBDb3VudHkgCitVUy1OWS0zNjA5NTpTY2hvaGFyaWUgQ291bnR5IAorVVMtTlktMzYwOTc6U2NodXlsZXIgQ291bnR5IAorVVMtTlktMzYwOTk6U2VuZWNhIENvdW50eSAKK1VTLU5ZLTM2MTAxOlN0ZXViZW4gQ291bnR5IAorVVMtTlktMzYxMDM6U3VmZm9sayBDb3VudHkgCitVUy1OWS0zNjEwNTpTdWxsaXZhbiBDb3VudHkgCitVUy1OWS0zNjEwNzpUaW9nYSBDb3VudHkgCitVUy1OWS0zNjEwOTpUb21wa2lucyBDb3VudHkgCitVUy1OWS0zNjExMTpVbHN0ZXIgQ291bnR5IAorVVMtTlktMzYxMTM6V2FycmVuIENvdW50eSAKK1VTLU5ZLTM2MTE1Oldhc2hpbmd0b24gQ291bnR5IAorVVMtTlktMzYxMTc6V2F5bmUgQ291bnR5IAorVVMtTlktMzYxMTk6V2VzdGNoZXN0ZXIgQ291bnR5IAorVVMtTlktMzYxMjE6V3lvbWluZyBDb3VudHkgCitVUy1OWS0zNjEyMzpZYXRlcyBDb3VudHkgCisjIHVuZGVyIEFkbWluIExldmVsWzFdIElEWzM5XTpPaGlvIAorVVMtT0gtMzkwMDE6QWRhbXMgQ291bnR5IAorVVMtT0gtMzkwMDM6QWxsZW4gQ291bnR5IAorVVMtT0gtMzkwMDU6QXNobGFuZCBDb3VudHkgCitVUy1PSC0zOTAwNzpBc2h0YWJ1bGEgQ291bnR5IAorVVMtT0gtMzkwMDk6QXRoZW5zIENvdW50eSAKK1VTLU9ILTM5MDExOkF1Z2xhaXplIENvdW50eSAKK1VTLU9ILTM5MDEzOkJlbG1vbnQgQ291bnR5IAorVVMtT0gtMzkwMTU6QnJvd24gQ291bnR5IAorVVMtT0gtMzkwMTc6QnV0bGVyIENvdW50eSAKK1VTLU9ILTM5MDE5OkNhcnJvbGwgQ291bnR5IAorVVMtT0gtMzkwMjE6Q2hhbXBhaWduIENvdW50eSAKK1VTLU9ILTM5MDIzOkNsYXJrIENvdW50eSAKK1VTLU9ILTM5MDI1OkNsZXJtb250IENvdW50eSAKK1VTLU9ILTM5MDI3OkNsaW50b24gQ291bnR5IAorVVMtT0gtMzkwMjk6Q29sdW1iaWFuYSBDb3VudHkgCitVUy1PSC0zOTAzMTpDb3Nob2N0b24gQ291bnR5IAorVVMtT0gtMzkwMzM6Q3Jhd2ZvcmQgQ291bnR5IAorVVMtT0gtMzkwMzU6Q3V5YWhvZ2EgQ291bnR5IAorVVMtT0gtMzkwMzc6RGFya2UgQ291bnR5IAorVVMtT0gtMzkwMzk6RGVmaWFuY2UgQ291bnR5IAorVVMtT0gtMzkwNDE6RGVsYXdhcmUgQ291bnR5IAorVVMtT0gtMzkwNDM6RXJpZSBDb3VudHkgCitVUy1PSC0zOTA0NTpGYWlyZmllbGQgQ291bnR5IAorVVMtT0gtMzkwNDc6RmF5ZXR0ZSBDb3VudHkgCitVUy1PSC0zOTA0OTpGcmFua2xpbiBDb3VudHkgCitVUy1PSC0zOTA1MTpGdWx0b24gQ291bnR5IAorVVMtT0gtMzkwNTM6R2FsbGlhIENvdW50eSAKK1VTLU9ILTM5MDU1OkdlYXVnYSBDb3VudHkgCitVUy1PSC0zOTA1NzpHcmVlbmUgQ291bnR5IAorVVMtT0gtMzkwNTk6R3Vlcm5zZXkgQ291bnR5IAorVVMtT0gtMzkwNjE6SGFtaWx0b24gQ291bnR5IAorVVMtT0gtMzkwNjM6SGFuY29jayBDb3VudHkgCitVUy1PSC0zOTA2NTpIYXJkaW4gQ291bnR5IAorVVMtT0gtMzkwNjc6SGFycmlzb24gQ291bnR5IAorVVMtT0gtMzkwNjk6SGVucnkgQ291bnR5IAorVVMtT0gtMzkwNzE6SGlnaGxhbmQgQ291bnR5IAorVVMtT0gtMzkwNzM6SG9ja2luZyBDb3VudHkgCitVUy1PSC0zOTA3NTpIb2xtZXMgQ291bnR5IAorVVMtT0gtMzkwNzc6SHVyb24gQ291bnR5IAorVVMtT0gtMzkwNzk6SmFja3NvbiBDb3VudHkgCitVUy1PSC0zOTA4MTpKZWZmZXJzb24gQ291bnR5IAorVVMtT0gtMzkwODM6S25veCBDb3VudHkgCitVUy1PSC0zOTA4NTpMYWtlIENvdW50eSAKK1VTLU9ILTM5MDg3Okxhd3JlbmNlIENvdW50eSAKK1VTLU9ILTM5MDg5OkxpY2tpbmcgQ291bnR5IAorVVMtT0gtMzkwOTE6TG9nYW4gQ291bnR5IAorVVMtT0gtMzkwOTM6TG9yYWluIENvdW50eSAKK1VTLU9ILTM5MDk1Okx1Y2FzIENvdW50eSAKK1VTLU9ILTM5MDk3Ok1hZGlzb24gQ291bnR5IAorVVMtT0gtMzkwOTk6TWFob25pbmcgQ291bnR5IAorVVMtT0gtMzkxMDE6TWFyaW9uIENvdW50eSAKK1VTLU9ILTM5MTAzOk1lZGluYSBDb3VudHkgCitVUy1PSC0zOTEwNTpNZWlncyBDb3VudHkgCitVUy1PSC0zOTEwNzpNZXJjZXIgQ291bnR5IAorVVMtT0gtMzkxMDk6TWlhbWkgQ291bnR5IAorVVMtT0gtMzkxMTE6TW9ucm9lIENvdW50eSAKK1VTLU9ILTM5MTEzOk1vbnRnb21lcnkgQ291bnR5IAorVVMtT0gtMzkxMTU6TW9yZ2FuIENvdW50eSAKK1VTLU9ILTM5MTE3Ok1vcnJvdyBDb3VudHkgCitVUy1PSC0zOTExOTpNdXNraW5ndW0gQ291bnR5IAorVVMtT0gtMzkxMjE6Tm9ibGUgQ291bnR5IAorVVMtT0gtMzkxMjM6T3R0YXdhIENvdW50eSAKK1VTLU9ILTM5MTI1OlBhdWxkaW5nIENvdW50eSAKK1VTLU9ILTM5MTI3OlBlcnJ5IENvdW50eSAKK1VTLU9ILTM5MTI5OlBpY2thd2F5IENvdW50eSAKK1VTLU9ILTM5MTMxOlBpa2UgQ291bnR5IAorVVMtT0gtMzkxMzM6UG9ydGFnZSBDb3VudHkgCitVUy1PSC0zOTEzNTpQcmVibGUgQ291bnR5IAorVVMtT0gtMzkxMzc6UHV0bmFtIENvdW50eSAKK1VTLU9ILTM5MTM5OlJpY2hsYW5kIENvdW50eSAKK1VTLU9ILTM5MTQxOlJvc3MgQ291bnR5IAorVVMtT0gtMzkxNDM6U2FuZHVza3kgQ291bnR5IAorVVMtT0gtMzkxNDU6U2Npb3RvIENvdW50eSAKK1VTLU9ILTM5MTQ3OlNlbmVjYSBDb3VudHkgCitVUy1PSC0zOTE0OTpTaGVsYnkgQ291bnR5IAorVVMtT0gtMzkxNTE6U3RhcmsgQ291bnR5IAorVVMtT0gtMzkxNTM6U3VtbWl0IENvdW50eSAKK1VTLU9ILTM5MTU1OlRydW1idWxsIENvdW50eSAKK1VTLU9ILTM5MTU3OlR1c2NhcmF3YXMgQ291bnR5IAorVVMtT0gtMzkxNTk6VW5pb24gQ291bnR5IAorVVMtT0gtMzkxNjE6VmFuIFdlcnQgQ291bnR5IAorVVMtT0gtMzkxNjM6VmludG9uIENvdW50eSAKK1VTLU9ILTM5MTY1OldhcnJlbiBDb3VudHkgCitVUy1PSC0zOTE2NzpXYXNoaW5ndG9uIENvdW50eSAKK1VTLU9ILTM5MTY5OldheW5lIENvdW50eSAKK1VTLU9ILTM5MTcxOldpbGxpYW1zIENvdW50eSAKK1VTLU9ILTM5MTczOldvb2QgQ291bnR5IAorVVMtT0gtMzkxNzU6V3lhbmRvdCBDb3VudHkgCisjIHVuZGVyIEFkbWluIExldmVsWzFdIElEWzQwXTpPa2xhaG9tYSAKK1VTLU9LLTQwMDAxOkFkYWlyIENvdW50eSAKK1VTLU9LLTQwMDAzOkFsZmFsZmEgQ291bnR5IAorVVMtT0stNDAwMDU6QXRva2EgQ291bnR5IAorVVMtT0stNDAwMDc6QmVhdmVyIENvdW50eSAKK1VTLU9LLTQwMDA5OkJlY2toYW0gQ291bnR5IAorVVMtT0stNDAwMTE6QmxhaW5lIENvdW50eSAKK1VTLU9LLTQwMDEzOkJyeWFuIENvdW50eSAKK1VTLU9LLTQwMDE1OkNhZGRvIENvdW50eSAKK1VTLU9LLTQwMDE3OkNhbmFkaWFuIENvdW50eSAKK1VTLU9LLTQwMDE5OkNhcnRlciBDb3VudHkgCitVUy1PSy00MDAyMTpDaGVyb2tlZSBDb3VudHkgCitVUy1PSy00MDAyMzpDaG9jdGF3IENvdW50eSAKK1VTLU9LLTQwMDI1OkNpbWFycm9uIENvdW50eSAKK1VTLU9LLTQwMDI3OkNsZXZlbGFuZCBDb3VudHkgCitVUy1PSy00MDAyOTpDb2FsIENvdW50eSAKK1VTLU9LLTQwMDMxOkNvbWFuY2hlIENvdW50eSAKK1VTLU9LLTQwMDMzOkNvdHRvbiBDb3VudHkgCitVUy1PSy00MDAzNTpDcmFpZyBDb3VudHkgCitVUy1PSy00MDAzNzpDcmVlayBDb3VudHkgCitVUy1PSy00MDAzOTpDdXN0ZXIgQ291bnR5IAorVVMtT0stNDAwNDE6RGVsYXdhcmUgQ291bnR5IAorVVMtT0stNDAwNDM6RGV3ZXkgQ291bnR5IAorVVMtT0stNDAwNDU6RWxsaXMgQ291bnR5IAorVVMtT0stNDAwNDc6R2FyZmllbGQgQ291bnR5IAorVVMtT0stNDAwNDk6R2FydmluIENvdW50eSAKK1VTLU9LLTQwMDUxOkdyYWR5IENvdW50eSAKK1VTLU9LLTQwMDUzOkdyYW50IENvdW50eSAKK1VTLU9LLTQwMDU1OkdyZWVyIENvdW50eSAKK1VTLU9LLTQwMDU3Okhhcm1vbiBDb3VudHkgCitVUy1PSy00MDA1OTpIYXJwZXIgQ291bnR5IAorVVMtT0stNDAwNjE6SGFza2VsbCBDb3VudHkgCitVUy1PSy00MDA2MzpIdWdoZXMgQ291bnR5IAorVVMtT0stNDAwNjU6SmFja3NvbiBDb3VudHkgCitVUy1PSy00MDA2NzpKZWZmZXJzb24gQ291bnR5IAorVVMtT0stNDAwNjk6Sm9obnN0b24gQ291bnR5IAorVVMtT0stNDAwNzE6S2F5IENvdW50eSAKK1VTLU9LLTQwMDczOktpbmdmaXNoZXIgQ291bnR5IAorVVMtT0stNDAwNzU6S2lvd2EgQ291bnR5IAorVVMtT0stNDAwNzc6TGF0aW1lciBDb3VudHkgCitVUy1PSy00MDA3OTpMZSBGbG9yZSBDb3VudHkgCitVUy1PSy00MDA4MTpMaW5jb2xuIENvdW50eSAKK1VTLU9LLTQwMDgzOkxvZ2FuIENvdW50eSAKK1VTLU9LLTQwMDg1OkxvdmUgQ291bnR5IAorVVMtT0stNDAwODc6TWNDbGFpbiBDb3VudHkgCitVUy1PSy00MDA4OTpNY0N1cnRhaW4gQ291bnR5IAorVVMtT0stNDAwOTE6TWNJbnRvc2ggQ291bnR5IAorVVMtT0stNDAwOTM6TWFqb3IgQ291bnR5IAorVVMtT0stNDAwOTU6TWFyc2hhbGwgQ291bnR5IAorVVMtT0stNDAwOTc6TWF5ZXMgQ291bnR5IAorVVMtT0stNDAwOTk6TXVycmF5IENvdW50eSAKK1VTLU9LLTQwMTAxOk11c2tvZ2VlIENvdW50eSAKK1VTLU9LLTQwMTAzOk5vYmxlIENvdW50eSAKK1VTLU9LLTQwMTA1Ok5vd2F0YSBDb3VudHkgCitVUy1PSy00MDEwNzpPa2Z1c2tlZSBDb3VudHkgCitVUy1PSy00MDEwOTpPa2xhaG9tYSBDb3VudHkgCitVUy1PSy00MDExMTpPa211bGdlZSBDb3VudHkgCitVUy1PSy00MDExMzpPc2FnZSBDb3VudHkgCitVUy1PSy00MDExNTpPdHRhd2EgQ291bnR5IAorVVMtT0stNDAxMTc6UGF3bmVlIENvdW50eSAKK1VTLU9LLTQwMTE5OlBheW5lIENvdW50eSAKK1VTLU9LLTQwMTIxOlBpdHRzYnVyZyBDb3VudHkgCitVUy1PSy00MDEyMzpQb250b3RvYyBDb3VudHkgCitVUy1PSy00MDEyNTpQb3R0YXdhdG9taWUgQ291bnR5IAorVVMtT0stNDAxMjc6UHVzaG1hdGFoYSBDb3VudHkgCitVUy1PSy00MDEyOTpSb2dlciBNaWxscyBDb3VudHkgCitVUy1PSy00MDEzMTpSb2dlcnMgQ291bnR5IAorVVMtT0stNDAxMzM6U2VtaW5vbGUgQ291bnR5IAorVVMtT0stNDAxMzU6U2VxdW95YWggQ291bnR5IAorVVMtT0stNDAxMzc6U3RlcGhlbnMgQ291bnR5IAorVVMtT0stNDAxMzk6VGV4YXMgQ291bnR5IAorVVMtT0stNDAxNDE6VGlsbG1hbiBDb3VudHkgCitVUy1PSy00MDE0MzpUdWxzYSBDb3VudHkgCitVUy1PSy00MDE0NTpXYWdvbmVyIENvdW50eSAKK1VTLU9LLTQwMTQ3Oldhc2hpbmd0b24gQ291bnR5IAorVVMtT0stNDAxNDk6V2FzaGl0YSBDb3VudHkgCitVUy1PSy00MDE1MTpXb29kcyBDb3VudHkgCitVUy1PSy00MDE1MzpXb29kd2FyZCBDb3VudHkgCisjIHVuZGVyIEFkbWluIExldmVsWzFdIElEWzQxXTpPcmVnb24gCitVUy1PUi00MTAwMTpCYWtlciBDb3VudHkgCitVUy1PUi00MTAwMzpCZW50b24gQ291bnR5IAorVVMtT1ItNDEwMDU6Q2xhY2thbWFzIENvdW50eSAKK1VTLU9SLTQxMDA3OkNsYXRzb3AgQ291bnR5IAorVVMtT1ItNDEwMDk6Q29sdW1iaWEgQ291bnR5IAorVVMtT1ItNDEwMTE6Q29vcyBDb3VudHkgCitVUy1PUi00MTAxMzpDcm9vayBDb3VudHkgCitVUy1PUi00MTAxNTpDdXJyeSBDb3VudHkgCitVUy1PUi00MTAxNzpEZXNjaHV0ZXMgQ291bnR5IAorVVMtT1ItNDEwMTk6RG91Z2xhcyBDb3VudHkgCitVUy1PUi00MTAyMTpHaWxsaWFtIENvdW50eSAKK1VTLU9SLTQxMDIzOkdyYW50IENvdW50eSAKK1VTLU9SLTQxMDI1Okhhcm5leSBDb3VudHkgCitVUy1PUi00MTAyNzpIb29kIFJpdmVyIENvdW50eSAKK1VTLU9SLTQxMDI5OkphY2tzb24gQ291bnR5IAorVVMtT1ItNDEwMzE6SmVmZmVyc29uIENvdW50eSAKK1VTLU9SLTQxMDMzOkpvc2VwaGluZSBDb3VudHkgCitVUy1PUi00MTAzNTpLbGFtYXRoIENvdW50eSAKK1VTLU9SLTQxMDM3Okxha2UgQ291bnR5IAorVVMtT1ItNDEwMzk6TGFuZSBDb3VudHkgCitVUy1PUi00MTA0MTpMaW5jb2xuIENvdW50eSAKK1VTLU9SLTQxMDQzOkxpbm4gQ291bnR5IAorVVMtT1ItNDEwNDU6TWFsaGV1ciBDb3VudHkgCitVUy1PUi00MTA0NzpNYXJpb24gQ291bnR5IAorVVMtT1ItNDEwNDk6TW9ycm93IENvdW50eSAKK1VTLU9SLTQxMDUxOk11bHRub21haCBDb3VudHkgCitVUy1PUi00MTA1MzpQb2xrIENvdW50eSAKK1VTLU9SLTQxMDU1OlNoZXJtYW4gQ291bnR5IAorVVMtT1ItNDEwNTc6VGlsbGFtb29rIENvdW50eSAKK1VTLU9SLTQxMDU5OlVtYXRpbGxhIENvdW50eSAKK1VTLU9SLTQxMDYxOlVuaW9uIENvdW50eSAKK1VTLU9SLTQxMDYzOldhbGxvd2EgQ291bnR5IAorVVMtT1ItNDEwNjU6V2FzY28gQ291bnR5IAorVVMtT1ItNDEwNjc6V2FzaGluZ3RvbiBDb3VudHkgCitVUy1PUi00MTA2OTpXaGVlbGVyIENvdW50eSAKK1VTLU9SLTQxMDcxOllhbWhpbGwgQ291bnR5IAorIyB1bmRlciBBZG1pbiBMZXZlbFsxXSBJRFs0Ml06UGVubnN5bHZhbmlhIAorVVMtUEEtNDIwMDE6QWRhbXMgQ291bnR5IAorVVMtUEEtNDIwMDM6QWxsZWdoZW55IENvdW50eSAKK1VTLVBBLTQyMDA1OkFybXN0cm9uZyBDb3VudHkgCitVUy1QQS00MjAwNzpCZWF2ZXIgQ291bnR5IAorVVMtUEEtNDIwMDk6QmVkZm9yZCBDb3VudHkgCitVUy1QQS00MjAxMTpCZXJrcyBDb3VudHkgCitVUy1QQS00MjAxMzpCbGFpciBDb3VudHkgCitVUy1QQS00MjAxNTpCcmFkZm9yZCBDb3VudHkgCitVUy1QQS00MjAxNzpCdWNrcyBDb3VudHkgCitVUy1QQS00MjAxOTpCdXRsZXIgQ291bnR5IAorVVMtUEEtNDIwMjE6Q2FtYnJpYSBDb3VudHkgCitVUy1QQS00MjAyMzpDYW1lcm9uIENvdW50eSAKK1VTLVBBLTQyMDI1OkNhcmJvbiBDb3VudHkgCitVUy1QQS00MjAyNzpDZW50cmUgQ291bnR5IAorVVMtUEEtNDIwMjk6Q2hlc3RlciBDb3VudHkgCitVUy1QQS00MjAzMTpDbGFyaW9uIENvdW50eSAKK1VTLVBBLTQyMDMzOkNsZWFyZmllbGQgQ291bnR5IAorVVMtUEEtNDIwMzU6Q2xpbnRvbiBDb3VudHkgCitVUy1QQS00MjAzNzpDb2x1bWJpYSBDb3VudHkgCitVUy1QQS00MjAzOTpDcmF3Zm9yZCBDb3VudHkgCitVUy1QQS00MjA0MTpDdW1iZXJsYW5kIENvdW50eSAKK1VTLVBBLTQyMDQzOkRhdXBoaW4gQ291bnR5IAorVVMtUEEtNDIwNDU6RGVsYXdhcmUgQ291bnR5IAorVVMtUEEtNDIwNDc6RWxrIENvdW50eSAKK1VTLVBBLTQyMDQ5OkVyaWUgQ291bnR5IAorVVMtUEEtNDIwNTE6RmF5ZXR0ZSBDb3VudHkgCitVUy1QQS00MjA1MzpGb3Jlc3QgQ291bnR5IAorVVMtUEEtNDIwNTU6RnJhbmtsaW4gQ291bnR5IAorVVMtUEEtNDIwNTc6RnVsdG9uIENvdW50eSAKK1VTLVBBLTQyMDU5OkdyZWVuZSBDb3VudHkgCitVUy1QQS00MjA2MTpIdW50aW5nZG9uIENvdW50eSAKK1VTLVBBLTQyMDYzOkluZGlhbmEgQ291bnR5IAorVVMtUEEtNDIwNjU6SmVmZmVyc29uIENvdW50eSAKK1VTLVBBLTQyMDY3Okp1bmlhdGEgQ291bnR5IAorVVMtUEEtNDIwNjk6TGFja2F3YW5uYSBDb3VudHkgCitVUy1QQS00MjA3MTpMYW5jYXN0ZXIgQ291bnR5IAorVVMtUEEtNDIwNzM6TGF3cmVuY2UgQ291bnR5IAorVVMtUEEtNDIwNzU6TGViYW5vbiBDb3VudHkgCitVUy1QQS00MjA3NzpMZWhpZ2ggQ291bnR5IAorVVMtUEEtNDIwNzk6THV6ZXJuZSBDb3VudHkgCitVUy1QQS00MjA4MTpMeWNvbWluZyBDb3VudHkgCitVUy1QQS00MjA4MzpNY0tlYW4gQ291bnR5IAorVVMtUEEtNDIwODU6TWVyY2VyIENvdW50eSAKK1VTLVBBLTQyMDg3Ok1pZmZsaW4gQ291bnR5IAorVVMtUEEtNDIwODk6TW9ucm9lIENvdW50eSAKK1VTLVBBLTQyMDkxOk1vbnRnb21lcnkgQ291bnR5IAorVVMtUEEtNDIwOTM6TW9udG91ciBDb3VudHkgCitVUy1QQS00MjA5NTpOb3J0aGFtcHRvbiBDb3VudHkgCitVUy1QQS00MjA5NzpOb3J0aHVtYmVybGFuZCBDb3VudHkgCitVUy1QQS00MjA5OTpQZXJyeSBDb3VudHkgCitVUy1QQS00MjEwMTpQaGlsYWRlbHBoaWEgQ291bnR5IAorVVMtUEEtNDIxMDM6UGlrZSBDb3VudHkgCitVUy1QQS00MjEwNTpQb3R0ZXIgQ291bnR5IAorVVMtUEEtNDIxMDc6U2NodXlsa2lsbCBDb3VudHkgCitVUy1QQS00MjEwOTpTbnlkZXIgQ291bnR5IAorVVMtUEEtNDIxMTE6U29tZXJzZXQgQ291bnR5IAorVVMtUEEtNDIxMTM6U3VsbGl2YW4gQ291bnR5IAorVVMtUEEtNDIxMTU6U3VzcXVlaGFubmEgQ291bnR5IAorVVMtUEEtNDIxMTc6VGlvZ2EgQ291bnR5IAorVVMtUEEtNDIxMTk6VW5pb24gQ291bnR5IAorVVMtUEEtNDIxMjE6VmVuYW5nbyBDb3VudHkgCitVUy1QQS00MjEyMzpXYXJyZW4gQ291bnR5IAorVVMtUEEtNDIxMjU6V2FzaGluZ3RvbiBDb3VudHkgCitVUy1QQS00MjEyNzpXYXluZSBDb3VudHkgCitVUy1QQS00MjEyOTpXZXN0bW9yZWxhbmQgQ291bnR5IAorVVMtUEEtNDIxMzE6V3lvbWluZyBDb3VudHkgCitVUy1QQS00MjEzMzpZb3JrIENvdW50eSAKKyMgdW5kZXIgQWRtaW4gTGV2ZWxbMV0gSURbVVMtUFJdOlB1ZXJ0byBSaWNvCitVUy1QUi03MjAwMTpBZGp1bnRhcyAKK1VTLVBSLTcyMDAzOkFndWFkYSAKK1VTLVBSLTcyMDA1OkFndWFkaWxsYSAKK1VTLVBSLTcyMDA3OkFndWFzIEJ1ZW5hcyAKK1VTLVBSLTcyMDA5OkFpYm9uaXRvIAorVVMtUFItNzIwMTE6QfFhc2NvIAorVVMtUFItNzIwMTM6QXJlY2libyAKK1VTLVBSLTcyMDE1OkFycm95byAKK1VTLVBSLTcyMDE3OkJhcmNlbG9uZXRhIAorVVMtUFItNzIwMTk6QmFycmFucXVpdGFzIAorVVMtUFItNzIwMjE6QmF5YW3zbiAKK1VTLVBSLTcyMDIzOkNhYm8gUm9qbyAKK1VTLVBSLTcyMDI1OkNhZ3VhcyAKK1VTLVBSLTcyMDI3OkNhbXV5IAorVVMtUFItNzIwMjk6Q2Fu83ZhbmFzIAorVVMtUFItNzIwMzE6Q2Fyb2xpbmEgCitVUy1QUi03MjAzMzpDYXRh8W8gCitVUy1QUi03MjAzNTpDYXlleSAKK1VTLVBSLTcyMDM3OkNlaWJhIAorVVMtUFItNzIwMzk6Q2lhbGVzIAorVVMtUFItNzIwNDE6Q2lkcmEgCitVUy1QUi03MjA0MzpDb2FtbyAKK1VTLVBSLTcyMDQ1OkNvbWVy7W8gCitVUy1QUi03MjA0NzpDb3JvemFsIAorVVMtUFItNzIwNDk6Q3VsZWJyYSAKK1VTLVBSLTcyMDUxOkRvcmFkbyAKK1VTLVBSLTcyMDUzOkZhamFyZG8gCitVUy1QUi03MjA1NDpGbG9yaWRhIAorVVMtUFItNzIwNTU6R3XhbmljYSAKK1VTLVBSLTcyMDU3Okd1YXlhbWEgCitVUy1QUi03MjA1OTpHdWF5YW5pbGxhIAorVVMtUFItNzIwNjE6R3VheW5hYm8gCitVUy1QUi03MjA2MzpHdXJhYm8gCitVUy1QUi03MjA2NTpIYXRpbGxvIAorVVMtUFItNzIwNjc6SG9ybWlndWVyb3MgCitVUy1QUi03MjA2OTpIdW1hY2FvIAorVVMtUFItNzIwNzE6SXNhYmVsYSAKK1VTLVBSLTcyMDczOkpheXV5YSAKK1VTLVBSLTcyMDc1Okp1YW5hIETtYXogCitVUy1QUi03MjA3NzpKdW5jb3MgCitVUy1QUi03MjA3OTpMYWphcyAKK1VTLVBSLTcyMDgxOkxhcmVzIAorVVMtUFItNzIwODM6TGFzIE1hcu1hcyAKK1VTLVBSLTcyMDg1OkxhcyBQaWVkcmFzIAorVVMtUFItNzIwODc6TG/temEgCitVUy1QUi03MjA4OTpMdXF1aWxsbyAKK1VTLVBSLTcyMDkxOk1hbmF07SAKK1VTLVBSLTcyMDkzOk1hcmljYW8gCitVUy1QUi03MjA5NTpNYXVuYWJvIAorVVMtUFItNzIwOTc6TWF5YWf8ZXogCitVUy1QUi03MjA5OTpNb2NhIAorVVMtUFItNzIxMDE6TW9yb3ZpcyAKK1VTLVBSLTcyMTAzOk5hZ3VhYm8gCitVUy1QUi03MjEwNTpOYXJhbmppdG8gCitVUy1QUi03MjEwNzpPcm9jb3ZpcyAKK1VTLVBSLTcyMTA5OlBhdGlsbGFzIAorVVMtUFItNzIxMTE6UGXxdWVsYXMgCitVUy1QUi03MjExMzpQb25jZSAKK1VTLVBSLTcyMTE1OlF1ZWJyYWRpbGxhcyAKK1VTLVBSLTcyMTE3OlJpbmPzbiAKK1VTLVBSLTcyMTE5OlLtbyBHcmFuZGUgCitVUy1QUi03MjEyMTpTYWJhbmEgR3JhbmRlIAorVVMtUFItNzIxMjM6U2FsaW5hcyAKK1VTLVBSLTcyMTI1OlNhbiBHZXJt4W4gCitVUy1QUi03MjEyNzpTYW4gSnVhbiAKK1VTLVBSLTcyMTI5OlNhbiBMb3JlbnpvIAorVVMtUFItNzIxMzE6U2FuIFNlYmFzdGnhbiAKK1VTLVBSLTcyMTMzOlNhbnRhIElzYWJlbCAKK1VTLVBSLTcyMTM1OlRvYSBBbHRhIAorVVMtUFItNzIxMzc6VG9hIEJhamEgCitVUy1QUi03MjEzOTpUcnVqaWxsbyBBbHRvIAorVVMtUFItNzIxNDE6VXR1YWRvIAorVVMtUFItNzIxNDM6VmVnYSBBbHRhIAorVVMtUFItNzIxNDU6VmVnYSBCYWphIAorVVMtUFItNzIxNDc6VmllcXVlcyAKK1VTLVBSLTcyMTQ5OlZpbGxhbGJhIAorVVMtUFItNzIxNTE6WWFidWNvYSAKK1VTLVBSLTcyMTUzOllhdWNvIAorIyB1bmRlciBBZG1pbiBMZXZlbFsxXSBJRFs0NF06UmhvZGUgSXNsYW5kIAorVVMtUkktNDQwMDE6QnJpc3RvbCBDb3VudHkgCitVUy1SSS00NDAwMzpLZW50IENvdW50eSAKK1VTLVJJLTQ0MDA1Ok5ld3BvcnQgQ291bnR5IAorVVMtUkktNDQwMDc6UHJvdmlkZW5jZSBDb3VudHkgCitVUy1SSS00NDAwOTpXYXNoaW5ndG9uIENvdW50eSAKKyMgdW5kZXIgQWRtaW4gTGV2ZWxbMV0gSURbNDVdOlNvdXRoIENhcm9saW5hIAorVVMtU0MtNDUwMDE6QWJiZXZpbGxlIENvdW50eSAKK1VTLVNDLTQ1MDAzOkFpa2VuIENvdW50eSAKK1VTLVNDLTQ1MDA1OkFsbGVuZGFsZSBDb3VudHkgCitVUy1TQy00NTAwNzpBbmRlcnNvbiBDb3VudHkgCitVUy1TQy00NTAwOTpCYW1iZXJnIENvdW50eSAKK1VTLVNDLTQ1MDExOkJhcm53ZWxsIENvdW50eSAKK1VTLVNDLTQ1MDEzOkJlYXVmb3J0IENvdW50eSAKK1VTLVNDLTQ1MDE1OkJlcmtlbGV5IENvdW50eSAKK1VTLVNDLTQ1MDE3OkNhbGhvdW4gQ291bnR5IAorVVMtU0MtNDUwMTk6Q2hhcmxlc3RvbiBDb3VudHkgCitVUy1TQy00NTAyMTpDaGVyb2tlZSBDb3VudHkgCitVUy1TQy00NTAyMzpDaGVzdGVyIENvdW50eSAKK1VTLVNDLTQ1MDI1OkNoZXN0ZXJmaWVsZCBDb3VudHkgCitVUy1TQy00NTAyNzpDbGFyZW5kb24gQ291bnR5IAorVVMtU0MtNDUwMjk6Q29sbGV0b24gQ291bnR5IAorVVMtU0MtNDUwMzE6RGFybGluZ3RvbiBDb3VudHkgCitVUy1TQy00NTAzMzpEaWxsb24gQ291bnR5IAorVVMtU0MtNDUwMzU6RG9yY2hlc3RlciBDb3VudHkgCitVUy1TQy00NTAzNzpFZGdlZmllbGQgQ291bnR5IAorVVMtU0MtNDUwMzk6RmFpcmZpZWxkIENvdW50eSAKK1VTLVNDLTQ1MDQxOkZsb3JlbmNlIENvdW50eSAKK1VTLVNDLTQ1MDQzOkdlb3JnZXRvd24gQ291bnR5IAorVVMtU0MtNDUwNDU6R3JlZW52aWxsZSBDb3VudHkgCitVUy1TQy00NTA0NzpHcmVlbndvb2QgQ291bnR5IAorVVMtU0MtNDUwNDk6SGFtcHRvbiBDb3VudHkgCitVUy1TQy00NTA1MTpIb3JyeSBDb3VudHkgCitVUy1TQy00NTA1MzpKYXNwZXIgQ291bnR5IAorVVMtU0MtNDUwNTU6S2Vyc2hhdyBDb3VudHkgCitVUy1TQy00NTA1NzpMYW5jYXN0ZXIgQ291bnR5IAorVVMtU0MtNDUwNTk6TGF1cmVucyBDb3VudHkgCitVUy1TQy00NTA2MTpMZWUgQ291bnR5IAorVVMtU0MtNDUwNjM6TGV4aW5ndG9uIENvdW50eSAKK1VTLVNDLTQ1MDY1Ok1jQ29ybWljayBDb3VudHkgCitVUy1TQy00NTA2NzpNYXJpb24gQ291bnR5IAorVVMtU0MtNDUwNjk6TWFybGJvcm8gQ291bnR5IAorVVMtU0MtNDUwNzE6TmV3YmVycnkgQ291bnR5IAorVVMtU0MtNDUwNzM6T2NvbmVlIENvdW50eSAKK1VTLVNDLTQ1MDc1Ok9yYW5nZWJ1cmcgQ291bnR5IAorVVMtU0MtNDUwNzc6UGlja2VucyBDb3VudHkgCitVUy1TQy00NTA3OTpSaWNobGFuZCBDb3VudHkgCitVUy1TQy00NTA4MTpTYWx1ZGEgQ291bnR5IAorVVMtU0MtNDUwODM6U3BhcnRhbmJ1cmcgQ291bnR5IAorVVMtU0MtNDUwODU6U3VtdGVyIENvdW50eSAKK1VTLVNDLTQ1MDg3OlVuaW9uIENvdW50eSAKK1VTLVNDLTQ1MDg5OldpbGxpYW1zYnVyZyBDb3VudHkgCitVUy1TQy00NTA5MTpZb3JrIENvdW50eSAKKyMgdW5kZXIgQWRtaW4gTGV2ZWxbMV0gSURbNDZdOlNvdXRoIERha290YSAKK1VTLVNELTQ2MDAzOkF1cm9yYSBDb3VudHkgCitVUy1TRC00NjAwNTpCZWFkbGUgQ291bnR5IAorVVMtU0QtNDYwMDc6QmVubmV0dCBDb3VudHkgCitVUy1TRC00NjAwOTpCb24gSG9tbWUgQ291bnR5IAorVVMtU0QtNDYwMTE6QnJvb2tpbmdzIENvdW50eSAKK1VTLVNELTQ2MDEzOkJyb3duIENvdW50eSAKK1VTLVNELTQ2MDE1OkJydWxlIENvdW50eSAKK1VTLVNELTQ2MDE3OkJ1ZmZhbG8gQ291bnR5IAorVVMtU0QtNDYwMTk6QnV0dGUgQ291bnR5IAorVVMtU0QtNDYwMjE6Q2FtcGJlbGwgQ291bnR5IAorVVMtU0QtNDYwMjM6Q2hhcmxlcyBNaXggQ291bnR5IAorVVMtU0QtNDYwMjU6Q2xhcmsgQ291bnR5IAorVVMtU0QtNDYwMjc6Q2xheSBDb3VudHkgCitVUy1TRC00NjAyOTpDb2Rpbmd0b24gQ291bnR5IAorVVMtU0QtNDYwMzE6Q29yc29uIENvdW50eSAKK1VTLVNELTQ2MDMzOkN1c3RlciBDb3VudHkgCitVUy1TRC00NjAzNTpEYXZpc29uIENvdW50eSAKK1VTLVNELTQ2MDM3OkRheSBDb3VudHkgCitVUy1TRC00NjAzOTpEZXVlbCBDb3VudHkgCitVUy1TRC00NjA0MTpEZXdleSBDb3VudHkgCitVUy1TRC00NjA0MzpEb3VnbGFzIENvdW50eSAKK1VTLVNELTQ2MDQ1OkVkbXVuZHMgQ291bnR5IAorVVMtU0QtNDYwNDc6RmFsbCBSaXZlciBDb3VudHkgCitVUy1TRC00NjA0OTpGYXVsayBDb3VudHkgCitVUy1TRC00NjA1MTpHcmFudCBDb3VudHkgCitVUy1TRC00NjA1MzpHcmVnb3J5IENvdW50eSAKK1VTLVNELTQ2MDU1OkhhYWtvbiBDb3VudHkgCitVUy1TRC00NjA1NzpIYW1saW4gQ291bnR5IAorVVMtU0QtNDYwNTk6SGFuZCBDb3VudHkgCitVUy1TRC00NjA2MTpIYW5zb24gQ291bnR5IAorVVMtU0QtNDYwNjM6SGFyZGluZyBDb3VudHkgCitVUy1TRC00NjA2NTpIdWdoZXMgQ291bnR5IAorVVMtU0QtNDYwNjc6SHV0Y2hpbnNvbiBDb3VudHkgCitVUy1TRC00NjA2OTpIeWRlIENvdW50eSAKK1VTLVNELTQ2MDcxOkphY2tzb24gQ291bnR5IAorVVMtU0QtNDYwNzM6SmVyYXVsZCBDb3VudHkgCitVUy1TRC00NjA3NTpKb25lcyBDb3VudHkgCitVUy1TRC00NjA3NzpLaW5nc2J1cnkgQ291bnR5IAorVVMtU0QtNDYwNzk6TGFrZSBDb3VudHkgCitVUy1TRC00NjA4MTpMYXdyZW5jZSBDb3VudHkgCitVUy1TRC00NjA4MzpMaW5jb2xuIENvdW50eSAKK1VTLVNELTQ2MDg1Okx5bWFuIENvdW50eSAKK1VTLVNELTQ2MDg3Ok1jQ29vayBDb3VudHkgCitVUy1TRC00NjA4OTpNY1BoZXJzb24gQ291bnR5IAorVVMtU0QtNDYwOTE6TWFyc2hhbGwgQ291bnR5IAorVVMtU0QtNDYwOTM6TWVhZGUgQ291bnR5IAorVVMtU0QtNDYwOTU6TWVsbGV0dGUgQ291bnR5IAorVVMtU0QtNDYwOTc6TWluZXIgQ291bnR5IAorVVMtU0QtNDYwOTk6TWlubmVoYWhhIENvdW50eSAKK1VTLVNELTQ2MTAxOk1vb2R5IENvdW50eSAKK1VTLVNELTQ2MTAzOlBlbm5pbmd0b24gQ291bnR5IAorVVMtU0QtNDYxMDU6UGVya2lucyBDb3VudHkgCitVUy1TRC00NjEwNzpQb3R0ZXIgQ291bnR5IAorVVMtU0QtNDYxMDk6Um9iZXJ0cyBDb3VudHkgCitVUy1TRC00NjExMTpTYW5ib3JuIENvdW50eSAKK1VTLVNELTQ2MTEzOlNoYW5ub24gQ291bnR5IAorVVMtU0QtNDYxMTU6U3BpbmsgQ291bnR5IAorVVMtU0QtNDYxMTc6U3RhbmxleSBDb3VudHkgCitVUy1TRC00NjExOTpTdWxseSBDb3VudHkgCitVUy1TRC00NjEyMTpUb2RkIENvdW50eSAKK1VTLVNELTQ2MTIzOlRyaXBwIENvdW50eSAKK1VTLVNELTQ2MTI1OlR1cm5lciBDb3VudHkgCitVUy1TRC00NjEyNzpVbmlvbiBDb3VudHkgCitVUy1TRC00NjEyOTpXYWx3b3J0aCBDb3VudHkgCitVUy1TRC00NjEzNTpZYW5rdG9uIENvdW50eSAKK1VTLVNELTQ2MTM3OlppZWJhY2ggQ291bnR5IAorIyB1bmRlciBBZG1pbiBMZXZlbFsxXSBJRFs0N106VGVubmVzc2VlIAorVVMtVE4tNDcwMDE6QW5kZXJzb24gQ291bnR5IAorVVMtVE4tNDcwMDM6QmVkZm9yZCBDb3VudHkgCitVUy1UTi00NzAwNTpCZW50b24gQ291bnR5IAorVVMtVE4tNDcwMDc6QmxlZHNvZSBDb3VudHkgCitVUy1UTi00NzAwOTpCbG91bnQgQ291bnR5IAorVVMtVE4tNDcwMTE6QnJhZGxleSBDb3VudHkgCitVUy1UTi00NzAxMzpDYW1wYmVsbCBDb3VudHkgCitVUy1UTi00NzAxNTpDYW5ub24gQ291bnR5IAorVVMtVE4tNDcwMTc6Q2Fycm9sbCBDb3VudHkgCitVUy1UTi00NzAxOTpDYXJ0ZXIgQ291bnR5IAorVVMtVE4tNDcwMjE6Q2hlYXRoYW0gQ291bnR5IAorVVMtVE4tNDcwMjM6Q2hlc3RlciBDb3VudHkgCitVUy1UTi00NzAyNTpDbGFpYm9ybmUgQ291bnR5IAorVVMtVE4tNDcwMjc6Q2xheSBDb3VudHkgCitVUy1UTi00NzAyOTpDb2NrZSBDb3VudHkgCitVUy1UTi00NzAzMTpDb2ZmZWUgQ291bnR5IAorVVMtVE4tNDcwMzM6Q3JvY2tldHQgQ291bnR5IAorVVMtVE4tNDcwMzU6Q3VtYmVybGFuZCBDb3VudHkgCitVUy1UTi00NzAzNzpEYXZpZHNvbiBDb3VudHkgCitVUy1UTi00NzAzOTpEZWNhdHVyIENvdW50eSAKK1VTLVROLTQ3MDQxOkRlS2FsYiBDb3VudHkgCitVUy1UTi00NzA0MzpEaWNrc29uIENvdW50eSAKK1VTLVROLTQ3MDQ1OkR5ZXIgQ291bnR5IAorVVMtVE4tNDcwNDc6RmF5ZXR0ZSBDb3VudHkgCitVUy1UTi00NzA0OTpGZW50cmVzcyBDb3VudHkgCitVUy1UTi00NzA1MTpGcmFua2xpbiBDb3VudHkgCitVUy1UTi00NzA1MzpHaWJzb24gQ291bnR5IAorVVMtVE4tNDcwNTU6R2lsZXMgQ291bnR5IAorVVMtVE4tNDcwNTc6R3JhaW5nZXIgQ291bnR5IAorVVMtVE4tNDcwNTk6R3JlZW5lIENvdW50eSAKK1VTLVROLTQ3MDYxOkdydW5keSBDb3VudHkgCitVUy1UTi00NzA2MzpIYW1ibGVuIENvdW50eSAKK1VTLVROLTQ3MDY1OkhhbWlsdG9uIENvdW50eSAKK1VTLVROLTQ3MDY3OkhhbmNvY2sgQ291bnR5IAorVVMtVE4tNDcwNjk6SGFyZGVtYW4gQ291bnR5IAorVVMtVE4tNDcwNzE6SGFyZGluIENvdW50eSAKK1VTLVROLTQ3MDczOkhhd2tpbnMgQ291bnR5IAorVVMtVE4tNDcwNzU6SGF5d29vZCBDb3VudHkgCitVUy1UTi00NzA3NzpIZW5kZXJzb24gQ291bnR5IAorVVMtVE4tNDcwNzk6SGVucnkgQ291bnR5IAorVVMtVE4tNDcwODE6SGlja21hbiBDb3VudHkgCitVUy1UTi00NzA4MzpIb3VzdG9uIENvdW50eSAKK1VTLVROLTQ3MDg1Okh1bXBocmV5cyBDb3VudHkgCitVUy1UTi00NzA4NzpKYWNrc29uIENvdW50eSAKK1VTLVROLTQ3MDg5OkplZmZlcnNvbiBDb3VudHkgCitVUy1UTi00NzA5MTpKb2huc29uIENvdW50eSAKK1VTLVROLTQ3MDkzOktub3ggQ291bnR5IAorVVMtVE4tNDcwOTU6TGFrZSBDb3VudHkgCitVUy1UTi00NzA5NzpMYXVkZXJkYWxlIENvdW50eSAKK1VTLVROLTQ3MDk5Okxhd3JlbmNlIENvdW50eSAKK1VTLVROLTQ3MTAxOkxld2lzIENvdW50eSAKK1VTLVROLTQ3MTAzOkxpbmNvbG4gQ291bnR5IAorVVMtVE4tNDcxMDU6TG91ZG9uIENvdW50eSAKK1VTLVROLTQ3MTA3Ok1jTWlubiBDb3VudHkgCitVUy1UTi00NzEwOTpNY05haXJ5IENvdW50eSAKK1VTLVROLTQ3MTExOk1hY29uIENvdW50eSAKK1VTLVROLTQ3MTEzOk1hZGlzb24gQ291bnR5IAorVVMtVE4tNDcxMTU6TWFyaW9uIENvdW50eSAKK1VTLVROLTQ3MTE3Ok1hcnNoYWxsIENvdW50eSAKK1VTLVROLTQ3MTE5Ok1hdXJ5IENvdW50eSAKK1VTLVROLTQ3MTIxOk1laWdzIENvdW50eSAKK1VTLVROLTQ3MTIzOk1vbnJvZSBDb3VudHkgCitVUy1UTi00NzEyNTpNb250Z29tZXJ5IENvdW50eSAKK1VTLVROLTQ3MTI3Ok1vb3JlIENvdW50eSAKK1VTLVROLTQ3MTI5Ok1vcmdhbiBDb3VudHkgCitVUy1UTi00NzEzMTpPYmlvbiBDb3VudHkgCitVUy1UTi00NzEzMzpPdmVydG9uIENvdW50eSAKK1VTLVROLTQ3MTM1OlBlcnJ5IENvdW50eSAKK1VTLVROLTQ3MTM3OlBpY2tldHQgQ291bnR5IAorVVMtVE4tNDcxMzk6UG9sayBDb3VudHkgCitVUy1UTi00NzE0MTpQdXRuYW0gQ291bnR5IAorVVMtVE4tNDcxNDM6UmhlYSBDb3VudHkgCitVUy1UTi00NzE0NTpSb2FuZSBDb3VudHkgCitVUy1UTi00NzE0NzpSb2JlcnRzb24gQ291bnR5IAorVVMtVE4tNDcxNDk6UnV0aGVyZm9yZCBDb3VudHkgCitVUy1UTi00NzE1MTpTY290dCBDb3VudHkgCitVUy1UTi00NzE1MzpTZXF1YXRjaGllIENvdW50eSAKK1VTLVROLTQ3MTU1OlNldmllciBDb3VudHkgCitVUy1UTi00NzE1NzpTaGVsYnkgQ291bnR5IAorVVMtVE4tNDcxNTk6U21pdGggQ291bnR5IAorVVMtVE4tNDcxNjE6U3Rld2FydCBDb3VudHkgCitVUy1UTi00NzE2MzpTdWxsaXZhbiBDb3VudHkgCitVUy1UTi00NzE2NTpTdW1uZXIgQ291bnR5IAorVVMtVE4tNDcxNjc6VGlwdG9uIENvdW50eSAKK1VTLVROLTQ3MTY5OlRyb3VzZGFsZSBDb3VudHkgCitVUy1UTi00NzE3MTpVbmljb2kgQ291bnR5IAorVVMtVE4tNDcxNzM6VW5pb24gQ291bnR5IAorVVMtVE4tNDcxNzU6VmFuIEJ1cmVuIENvdW50eSAKK1VTLVROLTQ3MTc3OldhcnJlbiBDb3VudHkgCitVUy1UTi00NzE3OTpXYXNoaW5ndG9uIENvdW50eSAKK1VTLVROLTQ3MTgxOldheW5lIENvdW50eSAKK1VTLVROLTQ3MTgzOldlYWtsZXkgQ291bnR5IAorVVMtVE4tNDcxODU6V2hpdGUgQ291bnR5IAorVVMtVE4tNDcxODc6V2lsbGlhbXNvbiBDb3VudHkgCitVUy1UTi00NzE4OTpXaWxzb24gQ291bnR5IAorIyB1bmRlciBBZG1pbiBMZXZlbFsxXSBJRFs0OF06VGV4YXMgCitVUy1UWC00ODAwMTpBbmRlcnNvbiBDb3VudHkgCitVUy1UWC00ODAwMzpBbmRyZXdzIENvdW50eSAKK1VTLVRYLTQ4MDA1OkFuZ2VsaW5hIENvdW50eSAKK1VTLVRYLTQ4MDA3OkFyYW5zYXMgQ291bnR5IAorVVMtVFgtNDgwMDk6QXJjaGVyIENvdW50eSAKK1VTLVRYLTQ4MDExOkFybXN0cm9uZyBDb3VudHkgCitVUy1UWC00ODAxMzpBdGFzY29zYSBDb3VudHkgCitVUy1UWC00ODAxNTpBdXN0aW4gQ291bnR5IAorVVMtVFgtNDgwMTc6QmFpbGV5IENvdW50eSAKK1VTLVRYLTQ4MDE5OkJhbmRlcmEgQ291bnR5IAorVVMtVFgtNDgwMjE6QmFzdHJvcCBDb3VudHkgCitVUy1UWC00ODAyMzpCYXlsb3IgQ291bnR5IAorVVMtVFgtNDgwMjU6QmVlIENvdW50eSAKK1VTLVRYLTQ4MDI3OkJlbGwgQ291bnR5IAorVVMtVFgtNDgwMjk6QmV4YXIgQ291bnR5IAorVVMtVFgtNDgwMzE6QmxhbmNvIENvdW50eSAKK1VTLVRYLTQ4MDMzOkJvcmRlbiBDb3VudHkgCitVUy1UWC00ODAzNTpCb3NxdWUgQ291bnR5IAorVVMtVFgtNDgwMzc6Qm93aWUgQ291bnR5IAorVVMtVFgtNDgwMzk6QnJhem9yaWEgQ291bnR5IAorVVMtVFgtNDgwNDE6QnJhem9zIENvdW50eSAKK1VTLVRYLTQ4MDQzOkJyZXdzdGVyIENvdW50eSAKK1VTLVRYLTQ4MDQ1OkJyaXNjb2UgQ291bnR5IAorVVMtVFgtNDgwNDc6QnJvb2tzIENvdW50eSAKK1VTLVRYLTQ4MDQ5OkJyb3duIENvdW50eSAKK1VTLVRYLTQ4MDUxOkJ1cmxlc29uIENvdW50eSAKK1VTLVRYLTQ4MDUzOkJ1cm5ldCBDb3VudHkgCitVUy1UWC00ODA1NTpDYWxkd2VsbCBDb3VudHkgCitVUy1UWC00ODA1NzpDYWxob3VuIENvdW50eSAKK1VTLVRYLTQ4MDU5OkNhbGxhaGFuIENvdW50eSAKK1VTLVRYLTQ4MDYxOkNhbWVyb24gQ291bnR5IAorVVMtVFgtNDgwNjM6Q2FtcCBDb3VudHkgCitVUy1UWC00ODA2NTpDYXJzb24gQ291bnR5IAorVVMtVFgtNDgwNjc6Q2FzcyBDb3VudHkgCitVUy1UWC00ODA2OTpDYXN0cm8gQ291bnR5IAorVVMtVFgtNDgwNzE6Q2hhbWJlcnMgQ291bnR5IAorVVMtVFgtNDgwNzM6Q2hlcm9rZWUgQ291bnR5IAorVVMtVFgtNDgwNzU6Q2hpbGRyZXNzIENvdW50eSAKK1VTLVRYLTQ4MDc3OkNsYXkgQ291bnR5IAorVVMtVFgtNDgwNzk6Q29jaHJhbiBDb3VudHkgCitVUy1UWC00ODA4MTpDb2tlIENvdW50eSAKK1VTLVRYLTQ4MDgzOkNvbGVtYW4gQ291bnR5IAorVVMtVFgtNDgwODU6Q29sbGluIENvdW50eSAKK1VTLVRYLTQ4MDg3OkNvbGxpbmdzd29ydGggQ291bnR5IAorVVMtVFgtNDgwODk6Q29sb3JhZG8gQ291bnR5IAorVVMtVFgtNDgwOTE6Q29tYWwgQ291bnR5IAorVVMtVFgtNDgwOTM6Q29tYW5jaGUgQ291bnR5IAorVVMtVFgtNDgwOTU6Q29uY2hvIENvdW50eSAKK1VTLVRYLTQ4MDk3OkNvb2tlIENvdW50eSAKK1VTLVRYLTQ4MDk5OkNvcnllbGwgQ291bnR5IAorVVMtVFgtNDgxMDE6Q290dGxlIENvdW50eSAKK1VTLVRYLTQ4MTAzOkNyYW5lIENvdW50eSAKK1VTLVRYLTQ4MTA1OkNyb2NrZXR0IENvdW50eSAKK1VTLVRYLTQ4MTA3OkNyb3NieSBDb3VudHkgCitVUy1UWC00ODEwOTpDdWxiZXJzb24gQ291bnR5IAorVVMtVFgtNDgxMTE6RGFsbGFtIENvdW50eSAKK1VTLVRYLTQ4MTEzOkRhbGxhcyBDb3VudHkgCitVUy1UWC00ODExNTpEYXdzb24gQ291bnR5IAorVVMtVFgtNDgxMTc6RGVhZiBTbWl0aCBDb3VudHkgCitVUy1UWC00ODExOTpEZWx0YSBDb3VudHkgCitVUy1UWC00ODEyMTpEZW50b24gQ291bnR5IAorVVMtVFgtNDgxMjM6RGVXaXR0IENvdW50eSAKK1VTLVRYLTQ4MTI1OkRpY2tlbnMgQ291bnR5IAorVVMtVFgtNDgxMjc6RGltbWl0IENvdW50eSAKK1VTLVRYLTQ4MTI5OkRvbmxleSBDb3VudHkgCitVUy1UWC00ODEzMTpEdXZhbCBDb3VudHkgCitVUy1UWC00ODEzMzpFYXN0bGFuZCBDb3VudHkgCitVUy1UWC00ODEzNTpFY3RvciBDb3VudHkgCitVUy1UWC00ODEzNzpFZHdhcmRzIENvdW50eSAKK1VTLVRYLTQ4MTM5OkVsbGlzIENvdW50eSAKK1VTLVRYLTQ4MTQxOkVsIFBhc28gQ291bnR5IAorVVMtVFgtNDgxNDM6RXJhdGggQ291bnR5IAorVVMtVFgtNDgxNDU6RmFsbHMgQ291bnR5IAorVVMtVFgtNDgxNDc6RmFubmluIENvdW50eSAKK1VTLVRYLTQ4MTQ5OkZheWV0dGUgQ291bnR5IAorVVMtVFgtNDgxNTE6RmlzaGVyIENvdW50eSAKK1VTLVRYLTQ4MTUzOkZsb3lkIENvdW50eSAKK1VTLVRYLTQ4MTU1OkZvYXJkIENvdW50eSAKK1VTLVRYLTQ4MTU3OkZvcnQgQmVuZCBDb3VudHkgCitVUy1UWC00ODE1OTpGcmFua2xpbiBDb3VudHkgCitVUy1UWC00ODE2MTpGcmVlc3RvbmUgQ291bnR5IAorVVMtVFgtNDgxNjM6RnJpbyBDb3VudHkgCitVUy1UWC00ODE2NTpHYWluZXMgQ291bnR5IAorVVMtVFgtNDgxNjc6R2FsdmVzdG9uIENvdW50eSAKK1VTLVRYLTQ4MTY5OkdhcnphIENvdW50eSAKK1VTLVRYLTQ4MTcxOkdpbGxlc3BpZSBDb3VudHkgCitVUy1UWC00ODE3MzpHbGFzc2NvY2sgQ291bnR5IAorVVMtVFgtNDgxNzU6R29saWFkIENvdW50eSAKK1VTLVRYLTQ4MTc3OkdvbnphbGVzIENvdW50eSAKK1VTLVRYLTQ4MTc5OkdyYXkgQ291bnR5IAorVVMtVFgtNDgxODE6R3JheXNvbiBDb3VudHkgCitVUy1UWC00ODE4MzpHcmVnZyBDb3VudHkgCitVUy1UWC00ODE4NTpHcmltZXMgQ291bnR5IAorVVMtVFgtNDgxODc6R3VhZGFsdXBlIENvdW50eSAKK1VTLVRYLTQ4MTg5OkhhbGUgQ291bnR5IAorVVMtVFgtNDgxOTE6SGFsbCBDb3VudHkgCitVUy1UWC00ODE5MzpIYW1pbHRvbiBDb3VudHkgCitVUy1UWC00ODE5NTpIYW5zZm9yZCBDb3VudHkgCitVUy1UWC00ODE5NzpIYXJkZW1hbiBDb3VudHkgCitVUy1UWC00ODE5OTpIYXJkaW4gQ291bnR5IAorVVMtVFgtNDgyMDE6SGFycmlzIENvdW50eSAKK1VTLVRYLTQ4MjAzOkhhcnJpc29uIENvdW50eSAKK1VTLVRYLTQ4MjA1OkhhcnRsZXkgQ291bnR5IAorVVMtVFgtNDgyMDc6SGFza2VsbCBDb3VudHkgCitVUy1UWC00ODIwOTpIYXlzIENvdW50eSAKK1VTLVRYLTQ4MjExOkhlbXBoaWxsIENvdW50eSAKK1VTLVRYLTQ4MjEzOkhlbmRlcnNvbiBDb3VudHkgCitVUy1UWC00ODIxNTpIaWRhbGdvIENvdW50eSAKK1VTLVRYLTQ4MjE3OkhpbGwgQ291bnR5IAorVVMtVFgtNDgyMTk6SG9ja2xleSBDb3VudHkgCitVUy1UWC00ODIyMTpIb29kIENvdW50eSAKK1VTLVRYLTQ4MjIzOkhvcGtpbnMgQ291bnR5IAorVVMtVFgtNDgyMjU6SG91c3RvbiBDb3VudHkgCitVUy1UWC00ODIyNzpIb3dhcmQgQ291bnR5IAorVVMtVFgtNDgyMjk6SHVkc3BldGggQ291bnR5IAorVVMtVFgtNDgyMzE6SHVudCBDb3VudHkgCitVUy1UWC00ODIzMzpIdXRjaGluc29uIENvdW50eSAKK1VTLVRYLTQ4MjM1OklyaW9uIENvdW50eSAKK1VTLVRYLTQ4MjM3OkphY2sgQ291bnR5IAorVVMtVFgtNDgyMzk6SmFja3NvbiBDb3VudHkgCitVUy1UWC00ODI0MTpKYXNwZXIgQ291bnR5IAorVVMtVFgtNDgyNDM6SmVmZiBEYXZpcyBDb3VudHkgCitVUy1UWC00ODI0NTpKZWZmZXJzb24gQ291bnR5IAorVVMtVFgtNDgyNDc6SmltIEhvZ2cgQ291bnR5IAorVVMtVFgtNDgyNDk6SmltIFdlbGxzIENvdW50eSAKK1VTLVRYLTQ4MjUxOkpvaG5zb24gQ291bnR5IAorVVMtVFgtNDgyNTM6Sm9uZXMgQ291bnR5IAorVVMtVFgtNDgyNTU6S2FybmVzIENvdW50eSAKK1VTLVRYLTQ4MjU3OkthdWZtYW4gQ291bnR5IAorVVMtVFgtNDgyNTk6S2VuZGFsbCBDb3VudHkgCitVUy1UWC00ODI2MTpLZW5lZHkgQ291bnR5IAorVVMtVFgtNDgyNjM6S2VudCBDb3VudHkgCitVUy1UWC00ODI2NTpLZXJyIENvdW50eSAKK1VTLVRYLTQ4MjY3OktpbWJsZSBDb3VudHkgCitVUy1UWC00ODI2OTpLaW5nIENvdW50eSAKK1VTLVRYLTQ4MjcxOktpbm5leSBDb3VudHkgCitVUy1UWC00ODI3MzpLbGViZXJnIENvdW50eSAKK1VTLVRYLTQ4Mjc1Oktub3ggQ291bnR5IAorVVMtVFgtNDgyNzc6TGFtYXIgQ291bnR5IAorVVMtVFgtNDgyNzk6TGFtYiBDb3VudHkgCitVUy1UWC00ODI4MTpMYW1wYXNhcyBDb3VudHkgCitVUy1UWC00ODI4MzpMYSBTYWxsZSBDb3VudHkgCitVUy1UWC00ODI4NTpMYXZhY2EgQ291bnR5IAorVVMtVFgtNDgyODc6TGVlIENvdW50eSAKK1VTLVRYLTQ4Mjg5Okxlb24gQ291bnR5IAorVVMtVFgtNDgyOTE6TGliZXJ0eSBDb3VudHkgCitVUy1UWC00ODI5MzpMaW1lc3RvbmUgQ291bnR5IAorVVMtVFgtNDgyOTU6TGlwc2NvbWIgQ291bnR5IAorVVMtVFgtNDgyOTc6TGl2ZSBPYWsgQ291bnR5IAorVVMtVFgtNDgyOTk6TGxhbm8gQ291bnR5IAorVVMtVFgtNDgzMDE6TG92aW5nIENvdW50eSAKK1VTLVRYLTQ4MzAzOkx1YmJvY2sgQ291bnR5IAorVVMtVFgtNDgzMDU6THlubiBDb3VudHkgCitVUy1UWC00ODMwNzpNY0N1bGxvY2ggQ291bnR5IAorVVMtVFgtNDgzMDk6TWNMZW5uYW4gQ291bnR5IAorVVMtVFgtNDgzMTE6TWNNdWxsZW4gQ291bnR5IAorVVMtVFgtNDgzMTM6TWFkaXNvbiBDb3VudHkgCitVUy1UWC00ODMxNTpNYXJpb24gQ291bnR5IAorVVMtVFgtNDgzMTc6TWFydGluIENvdW50eSAKK1VTLVRYLTQ4MzE5Ok1hc29uIENvdW50eSAKK1VTLVRYLTQ4MzIxOk1hdGFnb3JkYSBDb3VudHkgCitVUy1UWC00ODMyMzpNYXZlcmljayBDb3VudHkgCitVUy1UWC00ODMyNTpNZWRpbmEgQ291bnR5IAorVVMtVFgtNDgzMjc6TWVuYXJkIENvdW50eSAKK1VTLVRYLTQ4MzI5Ok1pZGxhbmQgQ291bnR5IAorVVMtVFgtNDgzMzE6TWlsYW0gQ291bnR5IAorVVMtVFgtNDgzMzM6TWlsbHMgQ291bnR5IAorVVMtVFgtNDgzMzU6TWl0Y2hlbGwgQ291bnR5IAorVVMtVFgtNDgzMzc6TW9udGFndWUgQ291bnR5IAorVVMtVFgtNDgzMzk6TW9udGdvbWVyeSBDb3VudHkgCitVUy1UWC00ODM0MTpNb29yZSBDb3VudHkgCitVUy1UWC00ODM0MzpNb3JyaXMgQ291bnR5IAorVVMtVFgtNDgzNDU6TW90bGV5IENvdW50eSAKK1VTLVRYLTQ4MzQ3Ok5hY29nZG9jaGVzIENvdW50eSAKK1VTLVRYLTQ4MzQ5Ok5hdmFycm8gQ291bnR5IAorVVMtVFgtNDgzNTE6TmV3dG9uIENvdW50eSAKK1VTLVRYLTQ4MzUzOk5vbGFuIENvdW50eSAKK1VTLVRYLTQ4MzU1Ok51ZWNlcyBDb3VudHkgCitVUy1UWC00ODM1NzpPY2hpbHRyZWUgQ291bnR5IAorVVMtVFgtNDgzNTk6T2xkaGFtIENvdW50eSAKK1VTLVRYLTQ4MzYxOk9yYW5nZSBDb3VudHkgCitVUy1UWC00ODM2MzpQYWxvIFBpbnRvIENvdW50eSAKK1VTLVRYLTQ4MzY1OlBhbm9sYSBDb3VudHkgCitVUy1UWC00ODM2NzpQYXJrZXIgQ291bnR5IAorVVMtVFgtNDgzNjk6UGFybWVyIENvdW50eSAKK1VTLVRYLTQ4MzcxOlBlY29zIENvdW50eSAKK1VTLVRYLTQ4MzczOlBvbGsgQ291bnR5IAorVVMtVFgtNDgzNzU6UG90dGVyIENvdW50eSAKK1VTLVRYLTQ4Mzc3OlByZXNpZGlvIENvdW50eSAKK1VTLVRYLTQ4Mzc5OlJhaW5zIENvdW50eSAKK1VTLVRYLTQ4MzgxOlJhbmRhbGwgQ291bnR5IAorVVMtVFgtNDgzODM6UmVhZ2FuIENvdW50eSAKK1VTLVRYLTQ4Mzg1OlJlYWwgQ291bnR5IAorVVMtVFgtNDgzODc6UmVkIFJpdmVyIENvdW50eSAKK1VTLVRYLTQ4Mzg5OlJlZXZlcyBDb3VudHkgCitVUy1UWC00ODM5MTpSZWZ1Z2lvIENvdW50eSAKK1VTLVRYLTQ4MzkzOlJvYmVydHMgQ291bnR5IAorVVMtVFgtNDgzOTU6Um9iZXJ0c29uIENvdW50eSAKK1VTLVRYLTQ4Mzk3OlJvY2t3YWxsIENvdW50eSAKK1VTLVRYLTQ4Mzk5OlJ1bm5lbHMgQ291bnR5IAorVVMtVFgtNDg0MDE6UnVzayBDb3VudHkgCitVUy1UWC00ODQwMzpTYWJpbmUgQ291bnR5IAorVVMtVFgtNDg0MDU6U2FuIEF1Z3VzdGluZSBDb3VudHkgCitVUy1UWC00ODQwNzpTYW4gSmFjaW50byBDb3VudHkgCitVUy1UWC00ODQwOTpTYW4gUGF0cmljaW8gQ291bnR5IAorVVMtVFgtNDg0MTE6U2FuIFNhYmEgQ291bnR5IAorVVMtVFgtNDg0MTM6U2NobGVpY2hlciBDb3VudHkgCitVUy1UWC00ODQxNTpTY3VycnkgQ291bnR5IAorVVMtVFgtNDg0MTc6U2hhY2tlbGZvcmQgQ291bnR5IAorVVMtVFgtNDg0MTk6U2hlbGJ5IENvdW50eSAKK1VTLVRYLTQ4NDIxOlNoZXJtYW4gQ291bnR5IAorVVMtVFgtNDg0MjM6U21pdGggQ291bnR5IAorVVMtVFgtNDg0MjU6U29tZXJ2ZWxsIENvdW50eSAKK1VTLVRYLTQ4NDI3OlN0YXJyIENvdW50eSAKK1VTLVRYLTQ4NDI5OlN0ZXBoZW5zIENvdW50eSAKK1VTLVRYLTQ4NDMxOlN0ZXJsaW5nIENvdW50eSAKK1VTLVRYLTQ4NDMzOlN0b25ld2FsbCBDb3VudHkgCitVUy1UWC00ODQzNTpTdXR0b24gQ291bnR5IAorVVMtVFgtNDg0Mzc6U3dpc2hlciBDb3VudHkgCitVUy1UWC00ODQzOTpUYXJyYW50IENvdW50eSAKK1VTLVRYLTQ4NDQxOlRheWxvciBDb3VudHkgCitVUy1UWC00ODQ0MzpUZXJyZWxsIENvdW50eSAKK1VTLVRYLTQ4NDQ1OlRlcnJ5IENvdW50eSAKK1VTLVRYLTQ4NDQ3OlRocm9ja21vcnRvbiBDb3VudHkgCitVUy1UWC00ODQ0OTpUaXR1cyBDb3VudHkgCitVUy1UWC00ODQ1MTpUb20gR3JlZW4gQ291bnR5IAorVVMtVFgtNDg0NTM6VHJhdmlzIENvdW50eSAKK1VTLVRYLTQ4NDU1OlRyaW5pdHkgQ291bnR5IAorVVMtVFgtNDg0NTc6VHlsZXIgQ291bnR5IAorVVMtVFgtNDg0NTk6VXBzaHVyIENvdW50eSAKK1VTLVRYLTQ4NDYxOlVwdG9uIENvdW50eSAKK1VTLVRYLTQ4NDYzOlV2YWxkZSBDb3VudHkgCitVUy1UWC00ODQ2NTpWYWwgVmVyZGUgQ291bnR5IAorVVMtVFgtNDg0Njc6VmFuIFphbmR0IENvdW50eSAKK1VTLVRYLTQ4NDY5OlZpY3RvcmlhIENvdW50eSAKK1VTLVRYLTQ4NDcxOldhbGtlciBDb3VudHkgCitVUy1UWC00ODQ3MzpXYWxsZXIgQ291bnR5IAorVVMtVFgtNDg0NzU6V2FyZCBDb3VudHkgCitVUy1UWC00ODQ3NzpXYXNoaW5ndG9uIENvdW50eSAKK1VTLVRYLTQ4NDc5OldlYmIgQ291bnR5IAorVVMtVFgtNDg0ODE6V2hhcnRvbiBDb3VudHkgCitVUy1UWC00ODQ4MzpXaGVlbGVyIENvdW50eSAKK1VTLVRYLTQ4NDg1OldpY2hpdGEgQ291bnR5IAorVVMtVFgtNDg0ODc6V2lsYmFyZ2VyIENvdW50eSAKK1VTLVRYLTQ4NDg5OldpbGxhY3kgQ291bnR5IAorVVMtVFgtNDg0OTE6V2lsbGlhbXNvbiBDb3VudHkgCitVUy1UWC00ODQ5MzpXaWxzb24gQ291bnR5IAorVVMtVFgtNDg0OTU6V2lua2xlciBDb3VudHkgCitVUy1UWC00ODQ5NzpXaXNlIENvdW50eSAKK1VTLVRYLTQ4NDk5Oldvb2QgQ291bnR5IAorVVMtVFgtNDg1MDE6WW9ha3VtIENvdW50eSAKK1VTLVRYLTQ4NTAzOllvdW5nIENvdW50eSAKK1VTLVRYLTQ4NTA1OlphcGF0YSBDb3VudHkgCitVUy1UWC00ODUwNzpaYXZhbGEgQ291bnR5IAorIyB1bmRlciBBZG1pbiBMZXZlbFsxXSBJRFs0OV06VXRhaCAKK1VTLVVULTQ5MDAxOkJlYXZlciBDb3VudHkgCitVUy1VVC00OTAwMzpCb3ggRWxkZXIgQ291bnR5IAorVVMtVVQtNDkwMDU6Q2FjaGUgQ291bnR5IAorVVMtVVQtNDkwMDc6Q2FyYm9uIENvdW50eSAKK1VTLVVULTQ5MDA5OkRhZ2dldHQgQ291bnR5IAorVVMtVVQtNDkwMTE6RGF2aXMgQ291bnR5IAorVVMtVVQtNDkwMTM6RHVjaGVzbmUgQ291bnR5IAorVVMtVVQtNDkwMTU6RW1lcnkgQ291bnR5IAorVVMtVVQtNDkwMTc6R2FyZmllbGQgQ291bnR5IAorVVMtVVQtNDkwMTk6R3JhbmQgQ291bnR5IAorVVMtVVQtNDkwMjE6SXJvbiBDb3VudHkgCitVUy1VVC00OTAyMzpKdWFiIENvdW50eSAKK1VTLVVULTQ5MDI1OkthbmUgQ291bnR5IAorVVMtVVQtNDkwMjc6TWlsbGFyZCBDb3VudHkgCitVUy1VVC00OTAyOTpNb3JnYW4gQ291bnR5IAorVVMtVVQtNDkwMzE6UGl1dGUgQ291bnR5IAorVVMtVVQtNDkwMzM6UmljaCBDb3VudHkgCitVUy1VVC00OTAzNTpTYWx0IExha2UgQ291bnR5IAorVVMtVVQtNDkwMzc6U2FuIEp1YW4gQ291bnR5IAorVVMtVVQtNDkwMzk6U2FucGV0ZSBDb3VudHkgCitVUy1VVC00OTA0MTpTZXZpZXIgQ291bnR5IAorVVMtVVQtNDkwNDM6U3VtbWl0IENvdW50eSAKK1VTLVVULTQ5MDQ1OlRvb2VsZSBDb3VudHkgCitVUy1VVC00OTA0NzpVaW50YWggQ291bnR5IAorVVMtVVQtNDkwNDk6VXRhaCBDb3VudHkgCitVUy1VVC00OTA1MTpXYXNhdGNoIENvdW50eSAKK1VTLVVULTQ5MDUzOldhc2hpbmd0b24gQ291bnR5IAorVVMtVVQtNDkwNTU6V2F5bmUgQ291bnR5IAorVVMtVVQtNDkwNTc6V2ViZXIgQ291bnR5IAorIyB1bmRlciBBZG1pbiBMZXZlbFsxXSBJRFs1MV06VmlyZ2luaWEgCitVUy1WQS01MTAwMTpBY2NvbWFjayBDb3VudHkgCitVUy1WQS01MTAwMzpBbGJlbWFybGUgQ291bnR5IAorVVMtVkEtNTEwMDU6QWxsZWdoYW55IENvdW50eSAKK1VTLVZBLTUxMDA3OkFtZWxpYSBDb3VudHkgCitVUy1WQS01MTAwOTpBbWhlcnN0IENvdW50eSAKK1VTLVZBLTUxMDExOkFwcG9tYXR0b3ggQ291bnR5IAorVVMtVkEtNTEwMTM6QXJsaW5ndG9uIENvdW50eSAKK1VTLVZBLTUxMDE1OkF1Z3VzdGEgQ291bnR5IAorVVMtVkEtNTEwMTc6QmF0aCBDb3VudHkgCitVUy1WQS01MTAxOTpCZWRmb3JkIENvdW50eSAKK1VTLVZBLTUxMDIxOkJsYW5kIENvdW50eSAKK1VTLVZBLTUxMDIzOkJvdGV0b3VydCBDb3VudHkgCitVUy1WQS01MTAyNTpCcnVuc3dpY2sgQ291bnR5IAorVVMtVkEtNTEwMjc6QnVjaGFuYW4gQ291bnR5IAorVVMtVkEtNTEwMjk6QnVja2luZ2hhbSBDb3VudHkgCitVUy1WQS01MTAzMTpDYW1wYmVsbCBDb3VudHkgCitVUy1WQS01MTAzMzpDYXJvbGluZSBDb3VudHkgCitVUy1WQS01MTAzNTpDYXJyb2xsIENvdW50eSAKK1VTLVZBLTUxMDM2OkNoYXJsZXMgQ2l0eSBDb3VudHkgCitVUy1WQS01MTAzNzpDaGFybG90dGUgQ291bnR5IAorVVMtVkEtNTEwNDE6Q2hlc3RlcmZpZWxkIENvdW50eSAKK1VTLVZBLTUxMDQzOkNsYXJrZSBDb3VudHkgCitVUy1WQS01MTA0NTpDcmFpZyBDb3VudHkgCitVUy1WQS01MTA0NzpDdWxwZXBlciBDb3VudHkgCitVUy1WQS01MTA0OTpDdW1iZXJsYW5kIENvdW50eSAKK1VTLVZBLTUxMDUxOkRpY2tlbnNvbiBDb3VudHkgCitVUy1WQS01MTA1MzpEaW53aWRkaWUgQ291bnR5IAorVVMtVkEtNTEwNTc6RXNzZXggQ291bnR5IAorVVMtVkEtNTEwNTk6RmFpcmZheCBDb3VudHkgCitVUy1WQS01MTA2MTpGYXVxdWllciBDb3VudHkgCitVUy1WQS01MTA2MzpGbG95ZCBDb3VudHkgCitVUy1WQS01MTA2NTpGbHV2YW5uYSBDb3VudHkgCitVUy1WQS01MTA2NzpGcmFua2xpbiBDb3VudHkgCitVUy1WQS01MTA2OTpGcmVkZXJpY2sgQ291bnR5IAorVVMtVkEtNTEwNzE6R2lsZXMgQ291bnR5IAorVVMtVkEtNTEwNzM6R2xvdWNlc3RlciBDb3VudHkgCitVUy1WQS01MTA3NTpHb29jaGxhbmQgQ291bnR5IAorVVMtVkEtNTEwNzc6R3JheXNvbiBDb3VudHkgCitVUy1WQS01MTA3OTpHcmVlbmUgQ291bnR5IAorVVMtVkEtNTEwODE6R3JlZW5zdmlsbGUgQ291bnR5IAorVVMtVkEtNTEwODM6SGFsaWZheCBDb3VudHkgCitVUy1WQS01MTA4NTpIYW5vdmVyIENvdW50eSAKK1VTLVZBLTUxMDg3OkhlbnJpY28gQ291bnR5IAorVVMtVkEtNTEwODk6SGVucnkgQ291bnR5IAorVVMtVkEtNTEwOTE6SGlnaGxhbmQgQ291bnR5IAorVVMtVkEtNTEwOTM6SXNsZSBvZiBXaWdodCBDb3VudHkgCitVUy1WQS01MTA5NTpKYW1lcyBDaXR5IENvdW50eSAKK1VTLVZBLTUxMDk3OktpbmcgYW5kIFF1ZWVuIENvdW50eSAKK1VTLVZBLTUxMDk5OktpbmcgR2VvcmdlIENvdW50eSAKK1VTLVZBLTUxMTAxOktpbmcgV2lsbGlhbSBDb3VudHkgCitVUy1WQS01MTEwMzpMYW5jYXN0ZXIgQ291bnR5IAorVVMtVkEtNTExMDU6TGVlIENvdW50eSAKK1VTLVZBLTUxMTA3OkxvdWRvdW4gQ291bnR5IAorVVMtVkEtNTExMDk6TG91aXNhIENvdW50eSAKK1VTLVZBLTUxMTExOkx1bmVuYnVyZyBDb3VudHkgCitVUy1WQS01MTExMzpNYWRpc29uIENvdW50eSAKK1VTLVZBLTUxMTE1Ok1hdGhld3MgQ291bnR5IAorVVMtVkEtNTExMTc6TWVja2xlbmJ1cmcgQ291bnR5IAorVVMtVkEtNTExMTk6TWlkZGxlc2V4IENvdW50eSAKK1VTLVZBLTUxMTIxOk1vbnRnb21lcnkgQ291bnR5IAorVVMtVkEtNTExMjU6TmVsc29uIENvdW50eSAKK1VTLVZBLTUxMTI3Ok5ldyBLZW50IENvdW50eSAKK1VTLVZBLTUxMTMxOk5vcnRoYW1wdG9uIENvdW50eSAKK1VTLVZBLTUxMTMzOk5vcnRodW1iZXJsYW5kIENvdW50eSAKK1VTLVZBLTUxMTM1Ok5vdHRvd2F5IENvdW50eSAKK1VTLVZBLTUxMTM3Ok9yYW5nZSBDb3VudHkgCitVUy1WQS01MTEzOTpQYWdlIENvdW50eSAKK1VTLVZBLTUxMTQxOlBhdHJpY2sgQ291bnR5IAorVVMtVkEtNTExNDM6UGl0dHN5bHZhbmlhIENvdW50eSAKK1VTLVZBLTUxMTQ1OlBvd2hhdGFuIENvdW50eSAKK1VTLVZBLTUxMTQ3OlByaW5jZSBFZHdhcmQgQ291bnR5IAorVVMtVkEtNTExNDk6UHJpbmNlIEdlb3JnZSBDb3VudHkgCitVUy1WQS01MTE1MzpQcmluY2UgV2lsbGlhbSBDb3VudHkgCitVUy1WQS01MTE1NTpQdWxhc2tpIENvdW50eSAKK1VTLVZBLTUxMTU3OlJhcHBhaGFubm9jayBDb3VudHkgCitVUy1WQS01MTE1OTpSaWNobW9uZCBDb3VudHkgCitVUy1WQS01MTE2MTpSb2Fub2tlIENvdW50eSAKK1VTLVZBLTUxMTYzOlJvY2ticmlkZ2UgQ291bnR5IAorVVMtVkEtNTExNjU6Um9ja2luZ2hhbSBDb3VudHkgCitVUy1WQS01MTE2NzpSdXNzZWxsIENvdW50eSAKK1VTLVZBLTUxMTY5OlNjb3R0IENvdW50eSAKK1VTLVZBLTUxMTcxOlNoZW5hbmRvYWggQ291bnR5IAorVVMtVkEtNTExNzM6U215dGggQ291bnR5IAorVVMtVkEtNTExNzU6U291dGhhbXB0b24gQ291bnR5IAorVVMtVkEtNTExNzc6U3BvdHN5bHZhbmlhIENvdW50eSAKK1VTLVZBLTUxMTc5OlN0YWZmb3JkIENvdW50eSAKK1VTLVZBLTUxMTgxOlN1cnJ5IENvdW50eSAKK1VTLVZBLTUxMTgzOlN1c3NleCBDb3VudHkgCitVUy1WQS01MTE4NTpUYXpld2VsbCBDb3VudHkgCitVUy1WQS01MTE4NzpXYXJyZW4gQ291bnR5IAorVVMtVkEtNTExOTE6V2FzaGluZ3RvbiBDb3VudHkgCitVUy1WQS01MTE5MzpXZXN0bW9yZWxhbmQgQ291bnR5IAorVVMtVkEtNTExOTU6V2lzZSBDb3VudHkgCitVUy1WQS01MTE5NzpXeXRoZSBDb3VudHkgCitVUy1WQS01MTE5OTpZb3JrIENvdW50eSAKK1VTLVZBLTUxNTEwOkFsZXhhbmRyaWEgY2l0eSAKK1VTLVZBLTUxNTE1OkJlZGZvcmQgY2l0eSAKK1VTLVZBLTUxNTIwOkJyaXN0b2wgY2l0eSAKK1VTLVZBLTUxNTMwOkJ1ZW5hIFZpc3RhIGNpdHkgCitVUy1WQS01MTU0MDpDaGFybG90dGVzdmlsbGUgY2l0eSAKK1VTLVZBLTUxNTUwOkNoZXNhcGVha2UgY2l0eSAKK1VTLVZBLTUxNTYwOkNsaWZ0b24gRm9yZ2UgY2l0eSAKK1VTLVZBLTUxNTcwOkNvbG9uaWFsIEhlaWdodHMgY2l0eSAKK1VTLVZBLTUxNTgwOkNvdmluZ3RvbiBjaXR5IAorVVMtVkEtNTE1OTA6RGFudmlsbGUgY2l0eSAKK1VTLVZBLTUxNTk1OkVtcG9yaWEgY2l0eSAKK1VTLVZBLTUxNjAwOkZhaXJmYXggY2l0eSAKK1VTLVZBLTUxNjEwOkZhbGxzIENodXJjaCBjaXR5IAorVVMtVkEtNTE2MjA6RnJhbmtsaW4gY2l0eSAKK1VTLVZBLTUxNjMwOkZyZWRlcmlja3NidXJnIGNpdHkgCitVUy1WQS01MTY0MDpHYWxheCBjaXR5IAorVVMtVkEtNTE2NTA6SGFtcHRvbiBjaXR5IAorVVMtVkEtNTE2NjA6SGFycmlzb25idXJnIGNpdHkgCitVUy1WQS01MTY3MDpIb3Bld2VsbCBjaXR5IAorVVMtVkEtNTE2Nzg6TGV4aW5ndG9uIGNpdHkgCitVUy1WQS01MTY4MDpMeW5jaGJ1cmcgY2l0eSAKK1VTLVZBLTUxNjgzOk1hbmFzc2FzIGNpdHkgCitVUy1WQS01MTY4NTpNYW5hc3NhcyBQYXJrIGNpdHkgCitVUy1WQS01MTY5MDpNYXJ0aW5zdmlsbGUgY2l0eSAKK1VTLVZBLTUxNzAwOk5ld3BvcnQgTmV3cyBjaXR5IAorVVMtVkEtNTE3MTA6Tm9yZm9sayBjaXR5IAorVVMtVkEtNTE3MjA6Tm9ydG9uIGNpdHkgCitVUy1WQS01MTczMDpQZXRlcnNidXJnIGNpdHkgCitVUy1WQS01MTczNTpQb3F1b3NvbiBjaXR5IAorVVMtVkEtNTE3NDA6UG9ydHNtb3V0aCBjaXR5IAorVVMtVkEtNTE3NTA6UmFkZm9yZCBjaXR5IAorVVMtVkEtNTE3NjA6UmljaG1vbmQgY2l0eSAKK1VTLVZBLTUxNzcwOlJvYW5va2UgY2l0eSAKK1VTLVZBLTUxNzc1OlNhbGVtIGNpdHkgCitVUy1WQS01MTc4MDpTb3V0aCBCb3N0b24gQ2l0eSAKK1VTLVZBLTUxNzkwOlN0YXVudG9uIGNpdHkgCitVUy1WQS01MTgwMDpTdWZmb2xrIGNpdHkgCitVUy1WQS01MTgxMDpWaXJnaW5pYSBCZWFjaCBjaXR5IAorVVMtVkEtNTE4MjA6V2F5bmVzYm9ybyBjaXR5IAorVVMtVkEtNTE4MzA6V2lsbGlhbXNidXJnIGNpdHkgCitVUy1WQS01MTg0MDpXaW5jaGVzdGVyIGNpdHkgCisjIHVuZGVyIEFkbWluIExldmVsWzFdIElEWzUwXTpWZXJtb250IAorVVMtVlQtNTAwMDE6QWRkaXNvbiBDb3VudHkgCitVUy1WVC01MDAwMzpCZW5uaW5ndG9uIENvdW50eSAKK1VTLVZULTUwMDA1OkNhbGVkb25pYSBDb3VudHkgCitVUy1WVC01MDAwNzpDaGl0dGVuZGVuIENvdW50eSAKK1VTLVZULTUwMDA5OkVzc2V4IENvdW50eSAKK1VTLVZULTUwMDExOkZyYW5rbGluIENvdW50eSAKK1VTLVZULTUwMDEzOkdyYW5kIElzbGUgQ291bnR5IAorVVMtVlQtNTAwMTU6TGFtb2lsbGUgQ291bnR5IAorVVMtVlQtNTAwMTc6T3JhbmdlIENvdW50eSAKK1VTLVZULTUwMDE5Ok9ybGVhbnMgQ291bnR5IAorVVMtVlQtNTAwMjE6UnV0bGFuZCBDb3VudHkgCitVUy1WVC01MDAyMzpXYXNoaW5ndG9uIENvdW50eSAKK1VTLVZULTUwMDI1OldpbmRoYW0gQ291bnR5IAorVVMtVlQtNTAwMjc6V2luZHNvciBDb3VudHkgCisjIHVuZGVyIEFkbWluIExldmVsWzFdIElEWzUzXTpXYXNoaW5ndG9uIAorVVMtV0EtNTMwMDE6QWRhbXMgQ291bnR5IAorVVMtV0EtNTMwMDM6QXNvdGluIENvdW50eSAKK1VTLVdBLTUzMDA1OkJlbnRvbiBDb3VudHkgCitVUy1XQS01MzAwNzpDaGVsYW4gQ291bnR5IAorVVMtV0EtNTMwMDk6Q2xhbGxhbSBDb3VudHkgCitVUy1XQS01MzAxMTpDbGFyayBDb3VudHkgCitVUy1XQS01MzAxMzpDb2x1bWJpYSBDb3VudHkgCitVUy1XQS01MzAxNTpDb3dsaXR6IENvdW50eSAKK1VTLVdBLTUzMDE3OkRvdWdsYXMgQ291bnR5IAorVVMtV0EtNTMwMTk6RmVycnkgQ291bnR5IAorVVMtV0EtNTMwMjE6RnJhbmtsaW4gQ291bnR5IAorVVMtV0EtNTMwMjM6R2FyZmllbGQgQ291bnR5IAorVVMtV0EtNTMwMjU6R3JhbnQgQ291bnR5IAorVVMtV0EtNTMwMjc6R3JheXMgSGFyYm9yIENvdW50eSAKK1VTLVdBLTUzMDI5OklzbGFuZCBDb3VudHkgCitVUy1XQS01MzAzMTpKZWZmZXJzb24gQ291bnR5IAorVVMtV0EtNTMwMzM6S2luZyBDb3VudHkgCitVUy1XQS01MzAzNTpLaXRzYXAgQ291bnR5IAorVVMtV0EtNTMwMzc6S2l0dGl0YXMgQ291bnR5IAorVVMtV0EtNTMwMzk6S2xpY2tpdGF0IENvdW50eSAKK1VTLVdBLTUzMDQxOkxld2lzIENvdW50eSAKK1VTLVdBLTUzMDQzOkxpbmNvbG4gQ291bnR5IAorVVMtV0EtNTMwNDU6TWFzb24gQ291bnR5IAorVVMtV0EtNTMwNDc6T2thbm9nYW4gQ291bnR5IAorVVMtV0EtNTMwNDk6UGFjaWZpYyBDb3VudHkgCitVUy1XQS01MzA1MTpQZW5kIE9yZWlsbGUgQ291bnR5IAorVVMtV0EtNTMwNTM6UGllcmNlIENvdW50eSAKK1VTLVdBLTUzMDU1OlNhbiBKdWFuIENvdW50eSAKK1VTLVdBLTUzMDU3OlNrYWdpdCBDb3VudHkgCitVUy1XQS01MzA1OTpTa2FtYW5pYSBDb3VudHkgCitVUy1XQS01MzA2MTpTbm9ob21pc2ggQ291bnR5IAorVVMtV0EtNTMwNjM6U3Bva2FuZSBDb3VudHkgCitVUy1XQS01MzA2NTpTdGV2ZW5zIENvdW50eSAKK1VTLVdBLTUzMDY3OlRodXJzdG9uIENvdW50eSAKK1VTLVdBLTUzMDY5OldhaGtpYWt1bSBDb3VudHkgCitVUy1XQS01MzA3MTpXYWxsYSBXYWxsYSBDb3VudHkgCitVUy1XQS01MzA3MzpXaGF0Y29tIENvdW50eSAKK1VTLVdBLTUzMDc1OldoaXRtYW4gQ291bnR5IAorVVMtV0EtNTMwNzc6WWFraW1hIENvdW50eSAKKyMgdW5kZXIgQWRtaW4gTGV2ZWxbMV0gSURbNTVdOldpc2NvbnNpbiAKK1VTLVdJLTU1MDAxOkFkYW1zIENvdW50eSAKK1VTLVdJLTU1MDAzOkFzaGxhbmQgQ291bnR5IAorVVMtV0ktNTUwMDU6QmFycm9uIENvdW50eSAKK1VTLVdJLTU1MDA3OkJheWZpZWxkIENvdW50eSAKK1VTLVdJLTU1MDA5OkJyb3duIENvdW50eSAKK1VTLVdJLTU1MDExOkJ1ZmZhbG8gQ291bnR5IAorVVMtV0ktNTUwMTM6QnVybmV0dCBDb3VudHkgCitVUy1XSS01NTAxNTpDYWx1bWV0IENvdW50eSAKK1VTLVdJLTU1MDE3OkNoaXBwZXdhIENvdW50eSAKK1VTLVdJLTU1MDE5OkNsYXJrIENvdW50eSAKK1VTLVdJLTU1MDIxOkNvbHVtYmlhIENvdW50eSAKK1VTLVdJLTU1MDIzOkNyYXdmb3JkIENvdW50eSAKK1VTLVdJLTU1MDI1OkRhbmUgQ291bnR5IAorVVMtV0ktNTUwMjc6RG9kZ2UgQ291bnR5IAorVVMtV0ktNTUwMjk6RG9vciBDb3VudHkgCitVUy1XSS01NTAzMTpEb3VnbGFzIENvdW50eSAKK1VTLVdJLTU1MDMzOkR1bm4gQ291bnR5IAorVVMtV0ktNTUwMzU6RWF1IENsYWlyZSBDb3VudHkgCitVUy1XSS01NTAzNzpGbG9yZW5jZSBDb3VudHkgCitVUy1XSS01NTAzOTpGb25kIGR1IExhYyBDb3VudHkgCitVUy1XSS01NTA0MTpGb3Jlc3QgQ291bnR5IAorVVMtV0ktNTUwNDM6R3JhbnQgQ291bnR5IAorVVMtV0ktNTUwNDU6R3JlZW4gQ291bnR5IAorVVMtV0ktNTUwNDc6R3JlZW4gTGFrZSBDb3VudHkgCitVUy1XSS01NTA0OTpJb3dhIENvdW50eSAKK1VTLVdJLTU1MDUxOklyb24gQ291bnR5IAorVVMtV0ktNTUwNTM6SmFja3NvbiBDb3VudHkgCitVUy1XSS01NTA1NTpKZWZmZXJzb24gQ291bnR5IAorVVMtV0ktNTUwNTc6SnVuZWF1IENvdW50eSAKK1VTLVdJLTU1MDU5Oktlbm9zaGEgQ291bnR5IAorVVMtV0ktNTUwNjE6S2V3YXVuZWUgQ291bnR5IAorVVMtV0ktNTUwNjM6TGEgQ3Jvc3NlIENvdW50eSAKK1VTLVdJLTU1MDY1OkxhZmF5ZXR0ZSBDb3VudHkgCitVUy1XSS01NTA2NzpMYW5nbGFkZSBDb3VudHkgCitVUy1XSS01NTA2OTpMaW5jb2xuIENvdW50eSAKK1VTLVdJLTU1MDcxOk1hbml0b3dvYyBDb3VudHkgCitVUy1XSS01NTA3MzpNYXJhdGhvbiBDb3VudHkgCitVUy1XSS01NTA3NTpNYXJpbmV0dGUgQ291bnR5IAorVVMtV0ktNTUwNzc6TWFycXVldHRlIENvdW50eSAKK1VTLVdJLTU1MDc4Ok1lbm9taW5lZSBDb3VudHkgCitVUy1XSS01NTA3OTpNaWx3YXVrZWUgQ291bnR5IAorVVMtV0ktNTUwODE6TW9ucm9lIENvdW50eSAKK1VTLVdJLTU1MDgzOk9jb250byBDb3VudHkgCitVUy1XSS01NTA4NTpPbmVpZGEgQ291bnR5IAorVVMtV0ktNTUwODc6T3V0YWdhbWllIENvdW50eSAKK1VTLVdJLTU1MDg5Ok96YXVrZWUgQ291bnR5IAorVVMtV0ktNTUwOTE6UGVwaW4gQ291bnR5IAorVVMtV0ktNTUwOTM6UGllcmNlIENvdW50eSAKK1VTLVdJLTU1MDk1OlBvbGsgQ291bnR5IAorVVMtV0ktNTUwOTc6UG9ydGFnZSBDb3VudHkgCitVUy1XSS01NTA5OTpQcmljZSBDb3VudHkgCitVUy1XSS01NTEwMTpSYWNpbmUgQ291bnR5IAorVVMtV0ktNTUxMDM6UmljaGxhbmQgQ291bnR5IAorVVMtV0ktNTUxMDU6Um9jayBDb3VudHkgCitVUy1XSS01NTEwNzpSdXNrIENvdW50eSAKK1VTLVdJLTU1MTA5OlN0LiBDcm9peCBDb3VudHkgCitVUy1XSS01NTExMTpTYXVrIENvdW50eSAKK1VTLVdJLTU1MTEzOlNhd3llciBDb3VudHkgCitVUy1XSS01NTExNTpTaGF3YW5vIENvdW50eSAKK1VTLVdJLTU1MTE3OlNoZWJveWdhbiBDb3VudHkgCitVUy1XSS01NTExOTpUYXlsb3IgQ291bnR5IAorVVMtV0ktNTUxMjE6VHJlbXBlYWxlYXUgQ291bnR5IAorVVMtV0ktNTUxMjM6VmVybm9uIENvdW50eSAKK1VTLVdJLTU1MTI1OlZpbGFzIENvdW50eSAKK1VTLVdJLTU1MTI3OldhbHdvcnRoIENvdW50eSAKK1VTLVdJLTU1MTI5Oldhc2hidXJuIENvdW50eSAKK1VTLVdJLTU1MTMxOldhc2hpbmd0b24gQ291bnR5IAorVVMtV0ktNTUxMzM6V2F1a2VzaGEgQ291bnR5IAorVVMtV0ktNTUxMzU6V2F1cGFjYSBDb3VudHkgCitVUy1XSS01NTEzNzpXYXVzaGFyYSBDb3VudHkgCitVUy1XSS01NTEzOTpXaW5uZWJhZ28gQ291bnR5IAorVVMtV0ktNTUxNDE6V29vZCBDb3VudHkgCisjIHVuZGVyIEFkbWluIExldmVsWzFdIElEWzU0XTpXZXN0IFZpcmdpbmlhIAorVVMtV1YtNTQwMDE6QmFyYm91ciBDb3VudHkgCitVUy1XVi01NDAwMzpCZXJrZWxleSBDb3VudHkgCitVUy1XVi01NDAwNTpCb29uZSBDb3VudHkgCitVUy1XVi01NDAwNzpCcmF4dG9uIENvdW50eSAKK1VTLVdWLTU0MDA5OkJyb29rZSBDb3VudHkgCitVUy1XVi01NDAxMTpDYWJlbGwgQ291bnR5IAorVVMtV1YtNTQwMTM6Q2FsaG91biBDb3VudHkgCitVUy1XVi01NDAxNTpDbGF5IENvdW50eSAKK1VTLVdWLTU0MDE3OkRvZGRyaWRnZSBDb3VudHkgCitVUy1XVi01NDAxOTpGYXlldHRlIENvdW50eSAKK1VTLVdWLTU0MDIxOkdpbG1lciBDb3VudHkgCitVUy1XVi01NDAyMzpHcmFudCBDb3VudHkgCitVUy1XVi01NDAyNTpHcmVlbmJyaWVyIENvdW50eSAKK1VTLVdWLTU0MDI3OkhhbXBzaGlyZSBDb3VudHkgCitVUy1XVi01NDAyOTpIYW5jb2NrIENvdW50eSAKK1VTLVdWLTU0MDMxOkhhcmR5IENvdW50eSAKK1VTLVdWLTU0MDMzOkhhcnJpc29uIENvdW50eSAKK1VTLVdWLTU0MDM1OkphY2tzb24gQ291bnR5IAorVVMtV1YtNTQwMzc6SmVmZmVyc29uIENvdW50eSAKK1VTLVdWLTU0MDM5OkthbmF3aGEgQ291bnR5IAorVVMtV1YtNTQwNDE6TGV3aXMgQ291bnR5IAorVVMtV1YtNTQwNDM6TGluY29sbiBDb3VudHkgCitVUy1XVi01NDA0NTpMb2dhbiBDb3VudHkgCitVUy1XVi01NDA0NzpNY0Rvd2VsbCBDb3VudHkgCitVUy1XVi01NDA0OTpNYXJpb24gQ291bnR5IAorVVMtV1YtNTQwNTE6TWFyc2hhbGwgQ291bnR5IAorVVMtV1YtNTQwNTM6TWFzb24gQ291bnR5IAorVVMtV1YtNTQwNTU6TWVyY2VyIENvdW50eSAKK1VTLVdWLTU0MDU3Ok1pbmVyYWwgQ291bnR5IAorVVMtV1YtNTQwNTk6TWluZ28gQ291bnR5IAorVVMtV1YtNTQwNjE6TW9ub25nYWxpYSBDb3VudHkgCitVUy1XVi01NDA2MzpNb25yb2UgQ291bnR5IAorVVMtV1YtNTQwNjU6TW9yZ2FuIENvdW50eSAKK1VTLVdWLTU0MDY3Ok5pY2hvbGFzIENvdW50eSAKK1VTLVdWLTU0MDY5Ok9oaW8gQ291bnR5IAorVVMtV1YtNTQwNzE6UGVuZGxldG9uIENvdW50eSAKK1VTLVdWLTU0MDczOlBsZWFzYW50cyBDb3VudHkgCitVUy1XVi01NDA3NTpQb2NhaG9udGFzIENvdW50eSAKK1VTLVdWLTU0MDc3OlByZXN0b24gQ291bnR5IAorVVMtV1YtNTQwNzk6UHV0bmFtIENvdW50eSAKK1VTLVdWLTU0MDgxOlJhbGVpZ2ggQ291bnR5IAorVVMtV1YtNTQwODM6UmFuZG9scGggQ291bnR5IAorVVMtV1YtNTQwODU6Uml0Y2hpZSBDb3VudHkgCitVUy1XVi01NDA4NzpSb2FuZSBDb3VudHkgCitVUy1XVi01NDA4OTpTdW1tZXJzIENvdW50eSAKK1VTLVdWLTU0MDkxOlRheWxvciBDb3VudHkgCitVUy1XVi01NDA5MzpUdWNrZXIgQ291bnR5IAorVVMtV1YtNTQwOTU6VHlsZXIgQ291bnR5IAorVVMtV1YtNTQwOTc6VXBzaHVyIENvdW50eSAKK1VTLVdWLTU0MDk5OldheW5lIENvdW50eSAKK1VTLVdWLTU0MTAxOldlYnN0ZXIgQ291bnR5IAorVVMtV1YtNTQxMDM6V2V0emVsIENvdW50eSAKK1VTLVdWLTU0MTA1OldpcnQgQ291bnR5IAorVVMtV1YtNTQxMDc6V29vZCBDb3VudHkgCitVUy1XVi01NDEwOTpXeW9taW5nIENvdW50eSAKKyMgdW5kZXIgQWRtaW4gTGV2ZWxbMV0gSURbNTZdOld5b21pbmcgCitVUy1XWS01NjAwMTpBbGJhbnkgQ291bnR5IAorVVMtV1ktNTYwMDM6QmlnIEhvcm4gQ291bnR5IAorVVMtV1ktNTYwMDU6Q2FtcGJlbGwgQ291bnR5IAorVVMtV1ktNTYwMDc6Q2FyYm9uIENvdW50eSAKK1VTLVdZLTU2MDA5OkNvbnZlcnNlIENvdW50eSAKK1VTLVdZLTU2MDExOkNyb29rIENvdW50eSAKK1VTLVdZLTU2MDEzOkZyZW1vbnQgQ291bnR5IAorVVMtV1ktNTYwMTU6R29zaGVuIENvdW50eSAKK1VTLVdZLTU2MDE3OkhvdCBTcHJpbmdzIENvdW50eSAKK1VTLVdZLTU2MDE5OkpvaG5zb24gQ291bnR5IAorVVMtV1ktNTYwMjE6TGFyYW1pZSBDb3VudHkgCitVUy1XWS01NjAyMzpMaW5jb2xuIENvdW50eSAKK1VTLVdZLTU2MDI1Ok5hdHJvbmEgQ291bnR5IAorVVMtV1ktNTYwMjc6TmlvYnJhcmEgQ291bnR5IAorVVMtV1ktNTYwMjk6UGFyayBDb3VudHkgCitVUy1XWS01NjAzMTpQbGF0dGUgQ291bnR5IAorVVMtV1ktNTYwMzM6U2hlcmlkYW4gQ291bnR5IAorVVMtV1ktNTYwMzU6U3VibGV0dGUgQ291bnR5IAorVVMtV1ktNTYwMzc6U3dlZXR3YXRlciBDb3VudHkgCitVUy1XWS01NjAzOTpUZXRvbiBDb3VudHkgCitVUy1XWS01NjA0MTpVaW50YSBDb3VudHkgCitVUy1XWS01NjA0MzpXYXNoYWtpZSBDb3VudHkgCitVUy1XWS01NjA0NTpXZXN0b24gQ291bnR5CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL1VTQV9MMV9EYXRhL1VTQV9MMS50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL1VTQV9MMV9EYXRhL1VTQV9MMS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjNhNzY5NAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvVVNBX0wxX0RhdGEvVVNBX0wxLnR4dApAQCAtMCwwICsxLDU3IEBACitVUwk6CVVTQQk6CVVTLUFMCToJQWxhYmFtYQk6CTEKK1VTCToJVVNBCToJVVMtQUsJOglBbGFza2EJOgkyCitVUwk6CVVTQQk6CVVTLUFaCToJQXJpem9uYQk6CTQKK1VTCToJVVNBCToJVVMtQVIJOglBcmthbnNhcwk6CTUKK1VTCToJVVNBCToJVVMtQ0EJOglDYWxpZm9ybmlhCToJNgorVVMJOglVU0EJOglVUy1DTwk6CUNvbG9yYWRvCToJOAorVVMJOglVU0EJOglVUy1DVAk6CUNvbm5lY3RpY3V0CToJOQorVVMJOglVU0EJOglVUy1ERQk6CURlbGF3YXJlCToJMTAKK1VTCToJVVNBCToJVVMtRkwJOglGbG9yaWRhCToJMTIKK1VTCToJVVNBCToJVVMtR0EJOglHZW9yZ2lhCToJMTMKK1VTCToJVVNBCToJVVMtSEkJOglIYXdhaWkJOgkxNQorVVMJOglVU0EJOglVUy1JRAk6CUlkYWhvCToJMTYKK1VTCToJVVNBCToJVVMtSUwJOglJbGxpbm9pcwk6CTE3CitVUwk6CVVTQQk6CVVTLUlOCToJSW5kaWFuYQk6CTE4CitVUwk6CVVTQQk6CVVTLUlBCToJSW93YQk6CTE5CitVUwk6CVVTQQk6CVVTLUtTCToJS2Fuc2FzCToJMjAKK1VTCToJVVNBCToJVVMtS1kJOglLZW50dWNreQk6CTIxCitVUwk6CVVTQQk6CVVTLUxBCToJTG91aXNpYW5hCToJMjIKK1VTCToJVVNBCToJVVMtTUUJOglNYWluZQk6CTIzCitVUwk6CVVTQQk6CVVTLU1ECToJTWFyeWxhbmQJOgkyNAorVVMJOglVU0EJOglVUy1NQQk6CU1hc3NhY2h1c2V0dHMJOgkyNQorVVMJOglVU0EJOglVUy1NSQk6CU1pY2hpZ2FuCToJMjYKK1VTCToJVVNBCToJVVMtTU4JOglNaW5uZXNvdGEJOgkyNworVVMJOglVU0EJOglVUy1NUwk6CU1pc3Npc3NpcHBpCToJMjgKK1VTCToJVVNBCToJVVMtTU8JOglNaXNzb3VyaQk6CTI5CitVUwk6CVVTQQk6CVVTLU1UCToJTW9udGFuYQk6CTMwCitVUwk6CVVTQQk6CVVTLU5FCToJTmVicmFza2EJOgkzMQorVVMJOglVU0EJOglVUy1OVgk6CU5ldmFkYQk6CTMyCitVUwk6CVVTQQk6CVVTLU5ICToJTmV3IEhhbXBzaGlyZQk6CTMzCitVUwk6CVVTQQk6CVVTLU5KCToJTmV3IEplcnNleQk6CTM0CitVUwk6CVVTQQk6CVVTLU5NCToJTmV3IE1leGljbwk6CTM1CitVUwk6CVVTQQk6CVVTLU5ZCToJTmV3IFlvcmsJOgkzNgorVVMJOglVU0EJOglVUy1OQwk6CU5vcnRoIENhcm9saW5hCToJMzcKK1VTCToJVVNBCToJVVMtTkQJOglOb3J0aCBEYWtvdGEJOgkzOAorVVMJOglVU0EJOglVUy1PSAk6CU9oaW8JOgkzOQorVVMJOglVU0EJOglVUy1PSwk6CU9rbGFob21hCToJNDAKK1VTCToJVVNBCToJVVMtT1IJOglPcmVnb24JOgk0MQorVVMJOglVU0EJOglVUy1QQQk6CVBlbm5zeWx2YW5pYQk6CTQyCitVUwk6CVVTQQk6CVVTLVJJCToJUmhvZGUgSXNsYW5kCToJNDQKK1VTCToJVVNBCToJVVMtU0MJOglTb3V0aCBDYXJvbGluYQk6CTQ1CitVUwk6CVVTQQk6CVVTLVNECToJU291dGggRGFrb3RhCToJNDYKK1VTCToJVVNBCToJVVMtVE4JOglUZW5uZXNzZWUJOgk0NworVVMJOglVU0EJOglVUy1UWAk6CVRleGFzCToJNDgKK1VTCToJVVNBCToJVVMtVVQJOglVdGFoCToJNDkKK1VTCToJVVNBCToJVVMtVlQJOglWZXJtb250CToJNTAKK1VTCToJVVNBCToJVVMtVkEJOglWaXJnaW5pYQk6CTUxCitVUwk6CVVTQQk6CVVTLVdBCToJV2FzaGluZ3Rvbgk6CTUzCitVUwk6CVVTQQk6CVVTLVdWCToJV2VzdCBWaXJnaW5pYQk6CTU0CitVUwk6CVVTQQk6CVVTLVdJCToJV2lzY29uc2luCToJNTUKK1VTCToJVVNBCToJVVMtV1kJOglXeW9taW5nCToJNTYKK1VTCToJVVNBCToJVVMtREMJOglEaXN0cmljdCBvZiBDb2x1bWJpYQk6CTExCitVUwk6CVVTQQk6CVVTLUFTCToJQW1lcmljYW4gU2Ftb2EJOgk1NworVVMJOglVU0EJOglVUy1HVQk6CUd1YW0JOgk1OAorVVMJOglVU0EJOglVUy1NUAk6CU5vcnRoZXJuIE1hcmlhbmEgSXNsYW5kcwk6CTU5CitVUwk6CVVTQQk6CVVTLVBSCToJUHVlcnRvIFJpY28JOgk3MgorVVMJOglVU0EJOglVUy1VTQk6CVVuaXRlZCBTdGF0ZXMgTWlub3IgT3V0bHlpbmcgSXNsYW5kcwk6CTYxCitVUwk6CVVTQQk6CVVTLVZJCToJVmlyZ2luIElzbGFuZHMJOgk2MgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9BRkcvQUZHX0FETUlOMV9MRVgudHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L0FGRy9BRkdfQURNSU4xX0xFWC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODVmZDNmOQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9BRkcvQUZHX0FETUlOMV9MRVgudHh0CkBAIC0wLDAgKzEsMzQgQEAKKzE6QUYtQkRTOkFGOkJBREFLSFNIQU4KKzI6QUYtQkRHOkFGOkJBREdISVMKKzM6QUYtQkdMOkFGOkJBR0hMQU4gW0JBR0hJQU5dCis0OkFGLUJBTDpBRjpCQUxLSAorNTpBRi1CQU06QUY6QkFNSUFOCis2OkFGLURBWTpBRjpEWUtPTkQKKzc6QUYtRlJBOkFGOkZBUkFICis4OkFGLUZZQjpBRjpGQVJZQUIKKzk6QUYtR0hBOkFGOkdIQVpOSSBbR0hBWk5dCisxMDpBRi1HSE86QUY6R0hPV1IKKzExOkFGLUhFTDpBRjpIRUxNQU5ECisxMjpBRi1IRVI6QUY6SEVSQVQKKzEzOkFGLUpPVzpBRjpKT1daSkFOCisxNDpBRi1LQUI6QUY6S0FCVUwgW0tBQk9MXQorMTU6QUYtS0FOOkFGOktBTkRBSEFSCisxNjpBRi1LQVA6QUY6S0FQSVNBCisxNzpBRi1LSE86QUY6S0hPV1NUCisxODpBRi1LTlI6QUY6S09OQVIgW0tVTkFSXQorMTk6QUYtS0RaOkFGOktPTkRPWiBbS1VORFVaXSBbS09ORFVaXQorMjA6QUYtTEFHOkFGOkxBR0hNQU4KKzIxOkFGLUxPVzpBRjpMT1dHQVIKKzIyOkFGLU5BTjpBRjpOQU5HUkFIQVIgW05BTkdBUkhBUl0gW05BTkdBUkhBXQorMjM6QUYtTklNOkFGOk5JTVJVWgorMjQ6QUYtTlVSOkFGOk5SRVNUTgorMjU6QUYtT1JVOkFGOk9SVVpHQU4gW1VSVVpHQU5dCisyNjpBRi1QSUE6QUY6UEFLVElBCisyNzpBRi1QS0E6QUY6UEFLVElLQQorMjg6QUYtUEFOOkFGOlBBTkpTSFIKKzI5OkFGLVBBUjpBRjpQQVJXQU4gW1BBUlZBTl0KKzMwOkFGLVNBTTpBRjpTQU1BTkdBTgorMzE6QUYtU0FSOkFGOlNBUiBFIFBPTAorMzI6QUYtVEFLOkFGOlRBS0hBUgorMzM6QUYtV0FSOkFGOldBUkRBSyBbV0FSREFHXSBbVkFSREFLXQorMzQ6QUYtWkFCOkFGOlpBQk9MIFtaQUJVTF0KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9BRkcvQUZHX0FETUlOMl9MRVgudHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L0FGRy9BRkdfQURNSU4yX0xFWC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjQxZGYxNgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9BRkcvQUZHX0FETUlOMl9MRVgudHh0CkBAIC0wLDAgKzEsMjggQEAKKzE6QUY6QUZHOkFGR0hBTklTVEFOOlZhcmRhazpBRkcuTDIuMjgKKzE6QUY6QUZHOkFGR0hBTklTVEFOOlNhbWFuZ2FuOkFGRy5MMi45CisxOkFGOkFGRzpBRkdIQU5JU1RBTjpQYXJ2YW46QUZHLkwyLjQKKzE6QUY6QUZHOkFGR0hBTklTVEFOOkJhbGtoOkFGRy5MMi4xNworMTpBRjpBRkc6QUZHSEFOSVNUQU46S2FwaXNhOkFGRy5MMi4xOAorMTpBRjpBRkc6QUZHSEFOSVNUQU46TGFnaG1hbjpBRkcuTDIuMjUKKzE6QUY6QUZHOkFGR0hBTklTVEFOOkthbmRhaGFyOkFGRy5MMi4yNAorMTpBRjpBRkc6QUZHSEFOSVNUQU46VGFraGFyOkFGRy5MMi4xMgorMTpBRjpBRkc6QUZHSEFOSVNUQU46S29uZHV6OkFGRy5MMi4yNgorMTpBRjpBRkc6QUZHSEFOSVNUQU46WmFib2w6QUZHLkwyLjEKKzE6QUY6QUZHOkFGR0hBTklTVEFOOkZhcnlhYjpBRkcuTDIuMjAKKzE6QUY6QUZHOkFGR0hBTklTVEFOOkpvd3pqYW46QUZHLkwyLjE1CisxOkFGOkFGRzpBRkdIQU5JU1RBTjpHaGF6bjpBRkcuTDIuNQorMTpBRjpBRkc6QUZHSEFOSVNUQU46SGVyYXQ6QUZHLkwyLjIKKzE6QUY6QUZHOkFGR0hBTklTVEFOOkZhcmFoOkFGRy5MMi4yMworMTpBRjpBRkc6QUZHSEFOSVNUQU46TmFuZ2FyaGE6QUZHLkwyLjE0CisxOkFGOkFGRzpBRkdIQU5JU1RBTjpHaG93cjpBRkcuTDIuMworMTpBRjpBRkc6QUZHSEFOSVNUQU46S2FidWw6QUZHLkwyLjE2CisxOkFGOkFGRzpBRkdIQU5JU1RBTjpMb3dnYXI6QUZHLkwyLjExCisxOkFGOkFGRzpBRkdIQU5JU1RBTjpOaW1ydXo6QUZHLkwyLjE5CisxOkFGOkFGRzpBRkdIQU5JU1RBTjpCYWdoaWFuOkFGRy5MMi42CisxOkFGOkFGRzpBRkdIQU5JU1RBTjpQYWt0aWE6QUZHLkwyLjgKKzE6QUY6QUZHOkFGR0hBTklTVEFOOk9ydXpnYW46QUZHLkwyLjIyCisxOkFGOkFGRzpBRkdIQU5JU1RBTjpIZWxtYW5kOkFGRy5MMi4yNworMTpBRjpBRkc6QUZHSEFOSVNUQU46QmFtaWFuOkFGRy5MMi43CisxOkFGOkFGRzpBRkdIQU5JU1RBTjpLb25hcjpBRkcuTDIuMTMKKzE6QUY6QUZHOkFGR0hBTklTVEFOOkJhZGdoaXM6QUZHLkwyLjIxCisxOkFGOkFGRzpBRkdIQU5JU1RBTjpCYWRha2hzaGFuOkFGRy5MMi4xMApkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L0FHTy9BR09fQURNSU4xX0xFWC50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvQUdPL0FHT19BRE1JTjFfTEVYLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YTQxZmQ3Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L0FHTy9BR09fQURNSU4xX0xFWC50eHQKQEAgLTAsMCArMSwxOCBAQAorMTpBTy1CR086QU86QkVOR08KKzI6QU8tQkdVOkFPOkJFTkdVRUxBCiszOkFPLUJJRTpBTzpCSUUKKzQ6QU8tQ0FCOkFPOkNBQklOREEKKzU6QU8tQ0NVOkFPOkNVQU5ETyBDVUJBTkdPCis2OkFPLUNOTzpBTzpDVUFOWkEgTk9SVEUKKzc6QU8tQ1VTOkFPOkNVQU5aQSBTVUwKKzg6QU8tQ05OOkFPOkNVTkVORQorOTpBTy1IVUE6QU86SFVBTUJPCisxMDpBTy1IVUk6QU86SFVJTEEKKzExOkFPLUxVQTpBTzpMVUFOREEKKzEyOkFPLUxOTzpBTzpMVU5EQSBOT1JURQorMTM6QU8tTFNVOkFPOkxVTkRBIFNVTAorMTQ6QU8tTUFMOkFPOk1BTEFOSkUKKzE1OkFPLU1PWDpBTzpNT1hJQ08KKzE2OkFPLU5BTTpBTzpOQU1JQkUKKzE3OkFPLVVJRzpBTzpVSUdFCisxODpBTy1aQUk6QU86WkFJUkUKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9BR08vQUdPX0FETUlOMl9MRVgudHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L0FHTy9BR09fQURNSU4yX0xFWC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjViODM2NgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9BR08vQUdPX0FETUlOMl9MRVgudHh0CkBAIC0wLDAgKzEsMzQgQEAKKzE6QU86QUdPOkFOR09MQTpIdWFtYm86QUdPLkwyLjMxCisxOkFPOkFHTzpBTkdPTEE6Q3VhbnphIE5vcnRlOkFHTy5MMi4xMgorMTpBTzpBR086QU5HT0xBOk1hbGFuamU6QUdPLkwyLjMwCisxOkFPOkFHTzpBTkdPTEE6Q3VhbnphIFN1bDpBR08uTDIuMTMKKzE6QU86QUdPOkFOR09MQTpCaWU6QUdPLkwyLjIKKzE6QU86QUdPOkFOR09MQTpDdW5lbmU6QUdPLkwyLjEKKzE6QU86QUdPOkFOR09MQTpCZW5nbzpBR08uTDIuMzMKKzE6QU86QUdPOkFOR09MQTpOYW1pYmU6QUdPLkwyLjQKKzI6QU86QUdPOkFOR09MQTpOYW1pYmU6QUdPLkwyLjUKKzE6QU86QUdPOkFOR09MQTpMdW5kYSBOb3J0ZTpBR08uTDIuMTUKKzE6QU86QUdPOkFOR09MQTpVaWdlOkFHTy5MMi4zNAorMTpBTzpBR086QU5HT0xBOlphaXJlOkFHTy5MMi4xNgorMjpBTzpBR086QU5HT0xBOlphaXJlOkFHTy5MMi4xNworMzpBTzpBR086QU5HT0xBOlphaXJlOkFHTy5MMi4xOAorNDpBTzpBR086QU5HT0xBOlphaXJlOkFHTy5MMi4xOQorNTpBTzpBR086QU5HT0xBOlphaXJlOkFHTy5MMi4yMAorNjpBTzpBR086QU5HT0xBOlphaXJlOkFHTy5MMi4yMQorNzpBTzpBR086QU5HT0xBOlphaXJlOkFHTy5MMi4yMgorODpBTzpBR086QU5HT0xBOlphaXJlOkFHTy5MMi4yMworOTpBTzpBR086QU5HT0xBOlphaXJlOkFHTy5MMi4yNAorMTA6QU86QUdPOkFOR09MQTpaYWlyZTpBR08uTDIuMjUKKzExOkFPOkFHTzpBTkdPTEE6WmFpcmU6QUdPLkwyLjI2CisxMjpBTzpBR086QU5HT0xBOlphaXJlOkFHTy5MMi4yNworMTpBTzpBR086QU5HT0xBOkx1YW5kYTpBR08uTDIuMTAKKzI6QU86QUdPOkFOR09MQTpMdWFuZGE6QUdPLkwyLjYKKzM6QU86QUdPOkFOR09MQTpMdWFuZGE6QUdPLkwyLjcKKzQ6QU86QUdPOkFOR09MQTpMdWFuZGE6QUdPLkwyLjgKKzU6QU86QUdPOkFOR09MQTpMdWFuZGE6QUdPLkwyLjkKKzE6QU86QUdPOkFOR09MQTpIdWlsYTpBR08uTDIuMTQKKzE6QU86QUdPOkFOR09MQTpMdW5kYSBTdWw6QUdPLkwyLjI4CisxOkFPOkFHTzpBTkdPTEE6QmVuZ3VlbGE6QUdPLkwyLjMKKzE6QU86QUdPOkFOR09MQTpDdWFuZG8gQ3ViYW5nbzpBR08uTDIuMjkKKzE6QU86QUdPOkFOR09MQTpNb3hpY286QUdPLkwyLjExCisxOkFPOkFHTzpBTkdPTEE6Q2FiaW5kYTpBR08uTDIuMzIKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9BTEIvQUxCX0FETUlOMV9MRVgudHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L0FMQi9BTEJfQURNSU4xX0xFWC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2UyZDUyMAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9BTEIvQUxCX0FETUlOMV9MRVgudHh0CkBAIC0wLDAgKzEsMzYgQEAKKzE6QUwtQlI6QUw6QkVSQVQKKzI6QUwtQlU6QUw6QlVMUUlaRQorMzpBTC1ETDpBTDpERUxWSU5FCis0OkFMLURWOkFMOkRFVk9MTAorNTpBTC1ESTpBTDpESUJFUgorNjpBTC1EUjpBTDpEVVJSRVMKKzc6QUwtRUw6QUw6RUxCQVNBTgorODpBTC1GUjpBTDpGSUVSCis5OkFMLUdKOkFMOkdKSVJPS0FTVEVSCisxMDpBTC1HUjpBTDpHUkFNU0gKKzExOkFMLUhBOkFMOkhBUworMTI6QUwtS0E6QUw6S0FWQUpFCisxMzpBTC1FUjpBTDpLT0xPTkpFCisxNDpBTC1LTzpBTDpLT1JDRQorMTU6QUwtS1I6QUw6S1JVSkUKKzE2OkFMLUtDOkFMOktVQ09WRQorMTc6QUwtS1U6QUw6S1VLRVMKKzE4OkFMLUtCOkFMOktVUkJJTgorMTk6QUwtTEU6QUw6TEVaSEUKKzIwOkFMLUxCOkFMOkxJQlJBWkhECisyMTpBTC1MVTpBTDpMVVNITkpFCisyMjpBTC1NTTpBTDpNQUxFU0kgRSBNQURIRQorMjM6QUwtTUs6QUw6TUFMTEFLQVNURVIKKzI0OkFMLU1UOkFMOk1BVAorMjU6QUwtTVI6QUw6TUlSRElURQorMjY6QUwtUFE6QUw6UEVRSU4KKzI3OkFMLVBSOkFMOlBFUk1FVAorMjg6QUwtUEc6QUw6UE9HUkFERUMKKzI5OkFMLVBVOkFMOlBVS0UKKzMwOkFMLVNSOkFMOlNBUkFOREUKKzMxOkFMLVNIOkFMOlNIUUlQiVJJQQorMzI6QUwtU0s6QUw6U0tSQVBBUgorMzM6QUwtVEU6QUw6VEVQRUxFTkUKKzM0OkFMLVRSOkFMOlRJUkFORQorMzU6QUwtVFA6QUw6VFJPUE9KRQorMzY6QUwtVkw6QUw6VkxPUkUKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9BTEIvQUxCX0FETUlOMl9MRVgudHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L0FMQi9BTEJfQURNSU4yX0xFWC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTY5ZGUyOQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9BTEIvQUxCX0FETUlOMl9MRVgudHh0CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvQU5EL0FORF9BRE1JTjFfTEVYLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9BTkQvQU5EX0FETUlOMV9MRVgudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg1Yjg2N2YKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvQU5EL0FORF9BRE1JTjFfTEVYLnR4dApAQCAtMCwwICsxIEBACisxOkFELTAxOkFEOkFORE9SUkEKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9BTkQvQU5EX0FETUlOMl9MRVgudHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L0FORC9BTkRfQURNSU4yX0xFWC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTY5ZGUyOQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9BTkQvQU5EX0FETUlOMl9MRVgudHh0CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvQVJFL0FSRV9BRE1JTjFfTEVYLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9BUkUvQVJFX0FETUlOMV9MRVgudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmExNTdhZjEKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvQVJFL0FSRV9BRE1JTjFfTEVYLnR4dApAQCAtMCwwICsxLDggQEAKKzE6QUUtQVo6QUU6QUJVIERIQUJJCisyOkFFLUFKOkFFOkFKTUFOCiszOkFFLUZVOkFFOkFMIEZVSkFZUkFICis0OkFFLURVOkFFOkRVQkFJCis1OkFFLU5FVTpBRTpORVVUUkFMIFpPTkUKKzY6QUUtUks6QUU6UkFTIEFMIEtIQVlNQUgKKzc6QUUtU0g6QUU6U0hBUklRQUgKKzg6QUUtVVE6QUU6VU1NIEFMIFFBWVdBWU4KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9BUkUvQVJFX0FETUlOMl9MRVgudHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L0FSRS9BUkVfQURNSU4yX0xFWC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGY5MjE0ZgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9BUkUvQVJFX0FETUlOMl9MRVgudHh0CkBAIC0wLDAgKzEsODUgQEAKKzE6QUU6QVJFOlVOSVRFREFSQUJFTUlSQVRFUzpOZXV0cmFsIFpvbmU6QVJFLkwyLjY0CisyOkFFOkFSRTpVTklURURBUkFCRU1JUkFURVM6TmV1dHJhbCBab25lOkFSRS5MMi42NQorMTpBRTpBUkU6VU5JVEVEQVJBQkVNSVJBVEVTOlNoYXJpcWFoOkFSRS5MMi42NgorMjpBRTpBUkU6VU5JVEVEQVJBQkVNSVJBVEVTOlNoYXJpcWFoOkFSRS5MMi42NworMTpBRTpBUkU6VU5JVEVEQVJBQkVNSVJBVEVTOkR1YmFpOkFSRS5MMi44MQorMjpBRTpBUkU6VU5JVEVEQVJBQkVNSVJBVEVTOkR1YmFpOkFSRS5MMi44MgorMTpBRTpBUkU6VU5JVEVEQVJBQkVNSVJBVEVTOlJhcyBBbCBLaGF5bWFoOkFSRS5MMi43NgorMjpBRTpBUkU6VU5JVEVEQVJBQkVNSVJBVEVTOlJhcyBBbCBLaGF5bWFoOkFSRS5MMi43NworMzpBRTpBUkU6VU5JVEVEQVJBQkVNSVJBVEVTOlJhcyBBbCBLaGF5bWFoOkFSRS5MMi43OAorNDpBRTpBUkU6VU5JVEVEQVJBQkVNSVJBVEVTOlJhcyBBbCBLaGF5bWFoOkFSRS5MMi43OQorNTpBRTpBUkU6VU5JVEVEQVJBQkVNSVJBVEVTOlJhcyBBbCBLaGF5bWFoOkFSRS5MMi44MAorMTpBRTpBUkU6VU5JVEVEQVJBQkVNSVJBVEVTOlVtbSBBbCBRYXl3YXluOkFSRS5MMi42OAorMjpBRTpBUkU6VU5JVEVEQVJBQkVNSVJBVEVTOlVtbSBBbCBRYXl3YXluOkFSRS5MMi42OQorMzpBRTpBUkU6VU5JVEVEQVJBQkVNSVJBVEVTOlVtbSBBbCBRYXl3YXluOkFSRS5MMi43MAorNDpBRTpBUkU6VU5JVEVEQVJBQkVNSVJBVEVTOlVtbSBBbCBRYXl3YXluOkFSRS5MMi43MQorNTpBRTpBUkU6VU5JVEVEQVJBQkVNSVJBVEVTOlVtbSBBbCBRYXl3YXluOkFSRS5MMi43MgorNjpBRTpBUkU6VU5JVEVEQVJBQkVNSVJBVEVTOlVtbSBBbCBRYXl3YXluOkFSRS5MMi43MworNzpBRTpBUkU6VU5JVEVEQVJBQkVNSVJBVEVTOlVtbSBBbCBRYXl3YXluOkFSRS5MMi43NAorODpBRTpBUkU6VU5JVEVEQVJBQkVNSVJBVEVTOlVtbSBBbCBRYXl3YXluOkFSRS5MMi43NQorMTpBRTpBUkU6VU5JVEVEQVJBQkVNSVJBVEVTOkFqbWFuOkFSRS5MMi44MworMjpBRTpBUkU6VU5JVEVEQVJBQkVNSVJBVEVTOkFqbWFuOkFSRS5MMi44NAorMzpBRTpBUkU6VU5JVEVEQVJBQkVNSVJBVEVTOkFqbWFuOkFSRS5MMi44NQorMTpBRTpBUkU6VU5JVEVEQVJBQkVNSVJBVEVTOkFsIEZ1amF5cmFoOkFSRS5MMi4xCisyOkFFOkFSRTpVTklURURBUkFCRU1JUkFURVM6QWwgRnVqYXlyYWg6QVJFLkwyLjIKKzE6QUU6QVJFOlVOSVRFREFSQUJFTUlSQVRFUzpBYnUgRGhhYmk6QVJFLkwyLjEwCisyOkFFOkFSRTpVTklURURBUkFCRU1JUkFURVM6QWJ1IERoYWJpOkFSRS5MMi4xMQorMzpBRTpBUkU6VU5JVEVEQVJBQkVNSVJBVEVTOkFidSBEaGFiaTpBUkUuTDIuMTIKKzQ6QUU6QVJFOlVOSVRFREFSQUJFTUlSQVRFUzpBYnUgRGhhYmk6QVJFLkwyLjEzCis1OkFFOkFSRTpVTklURURBUkFCRU1JUkFURVM6QWJ1IERoYWJpOkFSRS5MMi4xNAorNjpBRTpBUkU6VU5JVEVEQVJBQkVNSVJBVEVTOkFidSBEaGFiaTpBUkUuTDIuMTUKKzc6QUU6QVJFOlVOSVRFREFSQUJFTUlSQVRFUzpBYnUgRGhhYmk6QVJFLkwyLjE2Cis4OkFFOkFSRTpVTklURURBUkFCRU1JUkFURVM6QWJ1IERoYWJpOkFSRS5MMi4xNworOTpBRTpBUkU6VU5JVEVEQVJBQkVNSVJBVEVTOkFidSBEaGFiaTpBUkUuTDIuMTgKKzEwOkFFOkFSRTpVTklURURBUkFCRU1JUkFURVM6QWJ1IERoYWJpOkFSRS5MMi4xOQorMTE6QUU6QVJFOlVOSVRFREFSQUJFTUlSQVRFUzpBYnUgRGhhYmk6QVJFLkwyLjIwCisxMjpBRTpBUkU6VU5JVEVEQVJBQkVNSVJBVEVTOkFidSBEaGFiaTpBUkUuTDIuMjEKKzEzOkFFOkFSRTpVTklURURBUkFCRU1JUkFURVM6QWJ1IERoYWJpOkFSRS5MMi4yMgorMTQ6QUU6QVJFOlVOSVRFREFSQUJFTUlSQVRFUzpBYnUgRGhhYmk6QVJFLkwyLjIzCisxNTpBRTpBUkU6VU5JVEVEQVJBQkVNSVJBVEVTOkFidSBEaGFiaTpBUkUuTDIuMjQKKzE2OkFFOkFSRTpVTklURURBUkFCRU1JUkFURVM6QWJ1IERoYWJpOkFSRS5MMi4yNQorMTc6QUU6QVJFOlVOSVRFREFSQUJFTUlSQVRFUzpBYnUgRGhhYmk6QVJFLkwyLjI2CisxODpBRTpBUkU6VU5JVEVEQVJBQkVNSVJBVEVTOkFidSBEaGFiaTpBUkUuTDIuMjcKKzE5OkFFOkFSRTpVTklURURBUkFCRU1JUkFURVM6QWJ1IERoYWJpOkFSRS5MMi4yOAorMjA6QUU6QVJFOlVOSVRFREFSQUJFTUlSQVRFUzpBYnUgRGhhYmk6QVJFLkwyLjI5CisyMTpBRTpBUkU6VU5JVEVEQVJBQkVNSVJBVEVTOkFidSBEaGFiaTpBUkUuTDIuMworMjI6QUU6QVJFOlVOSVRFREFSQUJFTUlSQVRFUzpBYnUgRGhhYmk6QVJFLkwyLjMwCisyMzpBRTpBUkU6VU5JVEVEQVJBQkVNSVJBVEVTOkFidSBEaGFiaTpBUkUuTDIuMzEKKzI0OkFFOkFSRTpVTklURURBUkFCRU1JUkFURVM6QWJ1IERoYWJpOkFSRS5MMi4zMgorMjU6QUU6QVJFOlVOSVRFREFSQUJFTUlSQVRFUzpBYnUgRGhhYmk6QVJFLkwyLjMzCisyNjpBRTpBUkU6VU5JVEVEQVJBQkVNSVJBVEVTOkFidSBEaGFiaTpBUkUuTDIuMzQKKzI3OkFFOkFSRTpVTklURURBUkFCRU1JUkFURVM6QWJ1IERoYWJpOkFSRS5MMi4zNQorMjg6QUU6QVJFOlVOSVRFREFSQUJFTUlSQVRFUzpBYnUgRGhhYmk6QVJFLkwyLjM2CisyOTpBRTpBUkU6VU5JVEVEQVJBQkVNSVJBVEVTOkFidSBEaGFiaTpBUkUuTDIuMzcKKzMwOkFFOkFSRTpVTklURURBUkFCRU1JUkFURVM6QWJ1IERoYWJpOkFSRS5MMi4zOAorMzE6QUU6QVJFOlVOSVRFREFSQUJFTUlSQVRFUzpBYnUgRGhhYmk6QVJFLkwyLjM5CiszMjpBRTpBUkU6VU5JVEVEQVJBQkVNSVJBVEVTOkFidSBEaGFiaTpBUkUuTDIuNAorMzM6QUU6QVJFOlVOSVRFREFSQUJFTUlSQVRFUzpBYnUgRGhhYmk6QVJFLkwyLjQwCiszNDpBRTpBUkU6VU5JVEVEQVJBQkVNSVJBVEVTOkFidSBEaGFiaTpBUkUuTDIuNDEKKzM1OkFFOkFSRTpVTklURURBUkFCRU1JUkFURVM6QWJ1IERoYWJpOkFSRS5MMi40MgorMzY6QUU6QVJFOlVOSVRFREFSQUJFTUlSQVRFUzpBYnUgRGhhYmk6QVJFLkwyLjQzCiszNzpBRTpBUkU6VU5JVEVEQVJBQkVNSVJBVEVTOkFidSBEaGFiaTpBUkUuTDIuNDQKKzM4OkFFOkFSRTpVTklURURBUkFCRU1JUkFURVM6QWJ1IERoYWJpOkFSRS5MMi40NQorMzk6QUU6QVJFOlVOSVRFREFSQUJFTUlSQVRFUzpBYnUgRGhhYmk6QVJFLkwyLjQ2Cis0MDpBRTpBUkU6VU5JVEVEQVJBQkVNSVJBVEVTOkFidSBEaGFiaTpBUkUuTDIuNDcKKzQxOkFFOkFSRTpVTklURURBUkFCRU1JUkFURVM6QWJ1IERoYWJpOkFSRS5MMi40OAorNDI6QUU6QVJFOlVOSVRFREFSQUJFTUlSQVRFUzpBYnUgRGhhYmk6QVJFLkwyLjQ5Cis0MzpBRTpBUkU6VU5JVEVEQVJBQkVNSVJBVEVTOkFidSBEaGFiaTpBUkUuTDIuNQorNDQ6QUU6QVJFOlVOSVRFREFSQUJFTUlSQVRFUzpBYnUgRGhhYmk6QVJFLkwyLjUwCis0NTpBRTpBUkU6VU5JVEVEQVJBQkVNSVJBVEVTOkFidSBEaGFiaTpBUkUuTDIuNTEKKzQ2OkFFOkFSRTpVTklURURBUkFCRU1JUkFURVM6QWJ1IERoYWJpOkFSRS5MMi41MgorNDc6QUU6QVJFOlVOSVRFREFSQUJFTUlSQVRFUzpBYnUgRGhhYmk6QVJFLkwyLjUzCis0ODpBRTpBUkU6VU5JVEVEQVJBQkVNSVJBVEVTOkFidSBEaGFiaTpBUkUuTDIuNTQKKzQ5OkFFOkFSRTpVTklURURBUkFCRU1JUkFURVM6QWJ1IERoYWJpOkFSRS5MMi41NQorNTA6QUU6QVJFOlVOSVRFREFSQUJFTUlSQVRFUzpBYnUgRGhhYmk6QVJFLkwyLjU2Cis1MTpBRTpBUkU6VU5JVEVEQVJBQkVNSVJBVEVTOkFidSBEaGFiaTpBUkUuTDIuNTcKKzUyOkFFOkFSRTpVTklURURBUkFCRU1JUkFURVM6QWJ1IERoYWJpOkFSRS5MMi41OAorNTM6QUU6QVJFOlVOSVRFREFSQUJFTUlSQVRFUzpBYnUgRGhhYmk6QVJFLkwyLjU5Cis1NDpBRTpBUkU6VU5JVEVEQVJBQkVNSVJBVEVTOkFidSBEaGFiaTpBUkUuTDIuNgorNTU6QUU6QVJFOlVOSVRFREFSQUJFTUlSQVRFUzpBYnUgRGhhYmk6QVJFLkwyLjYwCis1NjpBRTpBUkU6VU5JVEVEQVJBQkVNSVJBVEVTOkFidSBEaGFiaTpBUkUuTDIuNjEKKzU3OkFFOkFSRTpVTklURURBUkFCRU1JUkFURVM6QWJ1IERoYWJpOkFSRS5MMi42MgorNTg6QUU6QVJFOlVOSVRFREFSQUJFTUlSQVRFUzpBYnUgRGhhYmk6QVJFLkwyLjYzCis1OTpBRTpBUkU6VU5JVEVEQVJBQkVNSVJBVEVTOkFidSBEaGFiaTpBUkUuTDIuNworNjA6QUU6QVJFOlVOSVRFREFSQUJFTUlSQVRFUzpBYnUgRGhhYmk6QVJFLkwyLjgKKzYxOkFFOkFSRTpVTklURURBUkFCRU1JUkFURVM6QWJ1IERoYWJpOkFSRS5MMi45CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvQVJHL0FSR19BRE1JTjFfTEVYLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9BUkcvQVJHX0FETUlOMV9MRVgudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVjODE0ZDkKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvQVJHL0FSR19BRE1JTjFfTEVYLnR4dApAQCAtMCwwICsxLDI0IEBACisxOkFSLUI6QVI6QlVFTk9TIEFJUkVTCisyOkFSLUM6QVI6QlVFTk9TIEFJUkVTIEQuRi4KKzM6QVItSzpBUjpDQVRBTUFSQ0EKKzQ6QVItSDpBUjpDSEFDTworNTpBUi1VOkFSOkNIVUJVVAorNjpBUi1YOkFSOkNPUkRPQkEKKzc6QVItVzpBUjpDT1JSSUVOVEVTCis4OkFSLUU6QVI6RU5UUkUgUklPUworOTpBUi1QOkFSOkZPUk1PU0EKKzEwOkFSLVk6QVI6SlVKVVkKKzExOkFSLUw6QVI6TEEgUEFNUEEKKzEyOkFSLUY6QVI6TEEgUklPSkEKKzEzOkFSLU06QVI6TUVORE9aQQorMTQ6QVItTjpBUjpNSVNJT05FUworMTU6QVItUTpBUjpORVVRVUVOCisxNjpBUi1SOkFSOlJJTyBORUdSTworMTc6QVItQTpBUjpTQUxUQQorMTg6QVItSjpBUjpTQU4gSlVBTgorMTk6QVItRDpBUjpTQU4gTFVJUworMjA6QVItWjpBUjpTQU5UQSBDUlVaCisyMTpBUi1TOkFSOlNBTlRBIEZFCisyMjpBUi1HOkFSOlNBTlRJQUdPIERFTCBFU1RFUk8KKzIzOkFSLVY6QVI6VElFUlJBIERFTCBGVUVHTworMjQ6QVItVDpBUjpUVUNVTUFOCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvQVJHL0FSR19BRE1JTjJfTEVYLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9BUkcvQVJHX0FETUlOMl9MRVgudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBkYTg4NDYKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvQVJHL0FSR19BRE1JTjJfTEVYLnR4dApAQCAtMCwwICsxLDUxOSBAQAorMTpBUjpBUkc6QVJHRU5USU5BOlRJRVJSQSBERUwgRlVFR086UmlvIEdyYW5kZQorMjpBUjpBUkc6QVJHRU5USU5BOlRJRVJSQSBERUwgRlVFR086VXNodWFpYQorMzpBUjpBUkc6QVJHRU5USU5BOlRJRVJSQSBERUwgRlVFR086VXNodWFpYSAoSXMuKQorMTpBUjpBUkc6QVJHRU5USU5BOkNBVEFNQVJDQTpBbWJhdG8KKzI6QVI6QVJHOkFSR0VOVElOQTpDQVRBTUFSQ0E6QW5jYXN0aQorMzpBUjpBUkc6QVJHRU5USU5BOkNBVEFNQVJDQTpBbmRhbGdhbGEKKzQ6QVI6QVJHOkFSR0VOVElOQTpDQVRBTUFSQ0E6QW50b2ZhZ2FzdGEgZGUgbGEgU2llcnJhCis1OkFSOkFSRzpBUkdFTlRJTkE6Q0FUQU1BUkNBOkJlbGVuCis2OkFSOkFSRzpBUkdFTlRJTkE6Q0FUQU1BUkNBOkNhcGF5YW4KKzc6QVI6QVJHOkFSR0VOVElOQTpDQVRBTUFSQ0E6Q2FwaXRhbAorODpBUjpBUkc6QVJHRU5USU5BOkNBVEFNQVJDQTpFbCBBbHRvCis5OkFSOkFSRzpBUkdFTlRJTkE6Q0FUQU1BUkNBOkZyYXkgTWFtZXJ0byBFc3F1aXUKKzEwOkFSOkFSRzpBUkdFTlRJTkE6Q0FUQU1BUkNBOkxhIFBhegorMTE6QVI6QVJHOkFSR0VOVElOQTpDQVRBTUFSQ0E6UGFjbGluCisxMjpBUjpBUkc6QVJHRU5USU5BOkNBVEFNQVJDQTpQb21hbgorMTM6QVI6QVJHOkFSR0VOVElOQTpDQVRBTUFSQ0E6U2FudGEgTWFyaWEKKzE0OkFSOkFSRzpBUkdFTlRJTkE6Q0FUQU1BUkNBOlNhbnRhIFJvc2EKKzE1OkFSOkFSRzpBUkdFTlRJTkE6Q0FUQU1BUkNBOlRpbm9nYXN0YQorMTY6QVI6QVJHOkFSR0VOVElOQTpDQVRBTUFSQ0E6VmFsbGUgVmllam8KKzE6QVI6QVJHOkFSR0VOVElOQTpTQU5USUFHTyBERUwgRVNURVJPOkFndWlycmUKKzI6QVI6QVJHOkFSR0VOVElOQTpTQU5USUFHTyBERUwgRVNURVJPOkFsYmVyZGkKKzM6QVI6QVJHOkFSR0VOVElOQTpTQU5USUFHTyBERUwgRVNURVJPOkF0YW1pc3F1aQorNDpBUjpBUkc6QVJHRU5USU5BOlNBTlRJQUdPIERFTCBFU1RFUk86QXZlbGxhbmVkYQorNTpBUjpBUkc6QVJHRU5USU5BOlNBTlRJQUdPIERFTCBFU1RFUk86QmFuZGEKKzY6QVI6QVJHOkFSR0VOVElOQTpTQU5USUFHTyBERUwgRVNURVJPOkJlbGdyYW5vCis3OkFSOkFSRzpBUkdFTlRJTkE6U0FOVElBR08gREVMIEVTVEVSTzpDYXBpdGFsCis4OkFSOkFSRzpBUkdFTlRJTkE6U0FOVElBR08gREVMIEVTVEVSTzpDaG95YQorOTpBUjpBUkc6QVJHRU5USU5BOlNBTlRJQUdPIERFTCBFU1RFUk86Q29wbworMTA6QVI6QVJHOkFSR0VOVElOQTpTQU5USUFHTyBERUwgRVNURVJPOkZpZ3Vlcm9hCisxMTpBUjpBUkc6QVJHRU5USU5BOlNBTlRJQUdPIERFTCBFU1RFUk86R2VuZXJhbCBUYWJvYWRhCisxMjpBUjpBUkc6QVJHRU5USU5BOlNBTlRJQUdPIERFTCBFU1RFUk86R3Vhc2F5YW4KKzEzOkFSOkFSRzpBUkdFTlRJTkE6U0FOVElBR08gREVMIEVTVEVSTzpKaW1uZXoKKzE0OkFSOkFSRzpBUkdFTlRJTkE6U0FOVElBR08gREVMIEVTVEVSTzpKdWFuIEYuIEliYXJyYQorMTU6QVI6QVJHOkFSR0VOVElOQTpTQU5USUFHTyBERUwgRVNURVJPOkxvcmV0bworMTY6QVI6QVJHOkFSR0VOVElOQTpTQU5USUFHTyBERUwgRVNURVJPOk1pdHJlCisxNzpBUjpBUkc6QVJHRU5USU5BOlNBTlRJQUdPIERFTCBFU1RFUk86TW9yZW5vCisxODpBUjpBUkc6QVJHRU5USU5BOlNBTlRJQUdPIERFTCBFU1RFUk86T2pvIGRlIEFndWEKKzE5OkFSOkFSRzpBUkdFTlRJTkE6U0FOVElBR08gREVMIEVTVEVSTzpQZWxsZWdyaW5pCisyMDpBUjpBUkc6QVJHRU5USU5BOlNBTlRJQUdPIERFTCBFU1RFUk86UXVlYnJhY2hvcworMjE6QVI6QVJHOkFSR0VOVElOQTpTQU5USUFHTyBERUwgRVNURVJPOlJpbyBIb25kbworMjI6QVI6QVJHOkFSR0VOVElOQTpTQU5USUFHTyBERUwgRVNURVJPOlJpdmFkYXZpYQorMjM6QVI6QVJHOkFSR0VOVElOQTpTQU5USUFHTyBERUwgRVNURVJPOlJvYmxlcworMjQ6QVI6QVJHOkFSR0VOVElOQTpTQU5USUFHTyBERUwgRVNURVJPOlNhbGF2aW5hCisyNTpBUjpBUkc6QVJHRU5USU5BOlNBTlRJQUdPIERFTCBFU1RFUk86U2FuIE1hcnRpbgorMjY6QVI6QVJHOkFSR0VOVElOQTpTQU5USUFHTyBERUwgRVNURVJPOlNhcm1pZW50bworMjc6QVI6QVJHOkFSR0VOVElOQTpTQU5USUFHTyBERUwgRVNURVJPOlNpbGlwaWNhCisxOkFSOkFSRzpBUkdFTlRJTkE6U0FMVEE6QW50YQorMjpBUjpBUkc6QVJHRU5USU5BOlNBTFRBOkNhY2hpCiszOkFSOkFSRzpBUkdFTlRJTkE6U0FMVEE6Q2FmYXlhdGUKKzQ6QVI6QVJHOkFSR0VOVElOQTpTQUxUQTpDYWxkZXJhCis1OkFSOkFSRzpBUkdFTlRJTkE6U0FMVEE6Q2FuZGVsYXJpYQorNjpBUjpBUkc6QVJHRU5USU5BOlNBTFRBOkNhcGl0YWwKKzc6QVI6QVJHOkFSR0VOVElOQTpTQUxUQTpDZXJyaWxsb3MKKzg6QVI6QVJHOkFSR0VOVElOQTpTQUxUQTpDaGljb2FuYQorOTpBUjpBUkc6QVJHRU5USU5BOlNBTFRBOkdlbmVyYWwgSm9zZSBkZSBTYW4gTWFydGkKKzEwOkFSOkFSRzpBUkdFTlRJTkE6U0FMVEE6R3JhbC4gTWFydGluIE0uIEd1ZW1lcworMTE6QVI6QVJHOkFSR0VOVElOQTpTQUxUQTpHdWFjaGlwYXMKKzEyOkFSOkFSRzpBUkdFTlRJTkE6U0FMVEE6SXJ1eWEKKzEzOkFSOkFSRzpBUkdFTlRJTkE6U0FMVEE6TGEgVmluYQorMTQ6QVI6QVJHOkFSR0VOVElOQTpTQUxUQTpMb3MgQW5kZXMKKzE1OkFSOkFSRzpBUkdFTlRJTkE6U0FMVEE6TWV0YW4KKzE2OkFSOkFSRzpBUkdFTlRJTkE6U0FMVEE6TW9saW5vcworMTc6QVI6QVJHOkFSR0VOVElOQTpTQUxUQTpPcmFuCisxODpBUjpBUkc6QVJHRU5USU5BOlNBTFRBOlBvbWEKKzE5OkFSOkFSRzpBUkdFTlRJTkE6U0FMVEE6Uml2YWRhdmlhCisyMDpBUjpBUkc6QVJHRU5USU5BOlNBTFRBOlJvc2FyaW8gZGUgTGVybWEKKzIxOkFSOkFSRzpBUkdFTlRJTkE6U0FMVEE6Um9zYXJpbyBkZSBsYSBGcm9udGVyYQorMjI6QVI6QVJHOkFSR0VOVElOQTpTQUxUQTpTYW4gQ2FybG9zCisyMzpBUjpBUkc6QVJHRU5USU5BOlNBTFRBOlNhbnRhIFZpY3RvcmlhCisxOkFSOkFSRzpBUkdFTlRJTkE6Q0hVQlVUOkJpZWRtYQorMjpBUjpBUkc6QVJHRU5USU5BOkNIVUJVVDpCaWVkbWEgKElzLikKKzM6QVI6QVJHOkFSR0VOVElOQTpDSFVCVVQ6Q3VzaGFtZW4KKzQ6QVI6QVJHOkFSR0VOVElOQTpDSFVCVVQ6RXNjYWxhbnRlCis1OkFSOkFSRzpBUkdFTlRJTkE6Q0hVQlVUOkVzY2FsYW50ZSAoSXMuKQorNjpBUjpBUkc6QVJHRU5USU5BOkNIVUJVVDpGbG9yZW50aW5vIEFtZWdoaW5vCis3OkFSOkFSRzpBUkdFTlRJTkE6Q0hVQlVUOkZsb3JlbnRpbm8gQW1lZ2hpbm8gKElzLikKKzg6QVI6QVJHOkFSR0VOVElOQTpDSFVCVVQ6RnV0YWxldWZ1Cis5OkFSOkFSRzpBUkdFTlRJTkE6Q0hVQlVUOkdhaW1hbgorMTA6QVI6QVJHOkFSR0VOVElOQTpDSFVCVVQ6R2FzdHJlCisxMTpBUjpBUkc6QVJHRU5USU5BOkNIVUJVVDpMYW5ndWluZW8KKzEyOkFSOkFSRzpBUkdFTlRJTkE6Q0hVQlVUOk1hcnRpbmVzCisxMzpBUjpBUkc6QVJHRU5USU5BOkNIVUJVVDpQYXNvIGRlIEluZGlvcworMTQ6QVI6QVJHOkFSR0VOVElOQTpDSFVCVVQ6UmF3c29uCisxNTpBUjpBUkc6QVJHRU5USU5BOkNIVUJVVDpSaW8gU2VuZ3VlcnIKKzE2OkFSOkFSRzpBUkdFTlRJTkE6Q0hVQlVUOlNhcm1pZW50bworMTc6QVI6QVJHOkFSR0VOVElOQTpDSFVCVVQ6VGVodWVsY2hlcworMTg6QVI6QVJHOkFSR0VOVElOQTpDSFVCVVQ6VGVsc2VuCisxOkFSOkFSRzpBUkdFTlRJTkE6U0FOVEEgQ1JVWjpDb3JwZW4gQWlrZQorMjpBUjpBUkc6QVJHRU5USU5BOlNBTlRBIENSVVo6RGVzZWFkbworMzpBUjpBUkc6QVJHRU5USU5BOlNBTlRBIENSVVo6RGVzZWFkbyAoSXMuKQorNDpBUjpBUkc6QVJHRU5USU5BOlNBTlRBIENSVVo6R2VyIEFpa2UKKzU6QVI6QVJHOkFSR0VOVElOQTpTQU5UQSBDUlVaOkdlciBBaWtlIChJcy4pCis2OkFSOkFSRzpBUkdFTlRJTkE6U0FOVEEgQ1JVWjpMYWdvIEFyZ2VudGlubworNzpBUjpBUkc6QVJHRU5USU5BOlNBTlRBIENSVVo6TGFnbyBCdWVub3MgQWlyZXMKKzg6QVI6QVJHOkFSR0VOVElOQTpTQU5UQSBDUlVaOk1hZ2FsbGFuZXMKKzk6QVI6QVJHOkFSR0VOVElOQTpTQU5UQSBDUlVaOk1hZ2FsbGFuZXMgKElzLikKKzEwOkFSOkFSRzpBUkdFTlRJTkE6U0FOVEEgQ1JVWjpSaW8gQ2hpY28KKzE6QVI6QVJHOkFSR0VOVElOQTpUVUNVTUFOOkFsYmVyZGkKKzI6QVI6QVJHOkFSR0VOVElOQTpUVUNVTUFOOkJ1cnJ1eWFjdQorMzpBUjpBUkc6QVJHRU5USU5BOlRVQ1VNQU46Q2FwaXRhbAorNDpBUjpBUkc6QVJHRU5USU5BOlRVQ1VNQU46Q2hpY2xpZ2FzdGEKKzU6QVI6QVJHOkFSR0VOVElOQTpUVUNVTUFOOkNydXogQWx0YQorNjpBUjpBUkc6QVJHRU5USU5BOlRVQ1VNQU46RmFtYWlsbGEKKzc6QVI6QVJHOkFSR0VOVElOQTpUVUNVTUFOOkdyYW5lcm9zCis4OkFSOkFSRzpBUkdFTlRJTkE6VFVDVU1BTjpMYSBDb2NoYQorOTpBUjpBUkc6QVJHRU5USU5BOlRVQ1VNQU46TGVhbGVzCisxMDpBUjpBUkc6QVJHRU5USU5BOlRVQ1VNQU46THVsZXMKKzExOkFSOkFSRzpBUkdFTlRJTkE6VFVDVU1BTjpNb250ZXJvcworMTI6QVI6QVJHOkFSR0VOVElOQTpUVUNVTUFOOlJpbyBDaGljbworMTM6QVI6QVJHOkFSR0VOVElOQTpUVUNVTUFOOlNpbW9jYQorMTQ6QVI6QVJHOkFSR0VOVElOQTpUVUNVTUFOOlRhZmkgVmllam8KKzE1OkFSOkFSRzpBUkdFTlRJTkE6VFVDVU1BTjpUYWZpIGRlbCBWYWxsZQorMTY6QVI6QVJHOkFSR0VOVElOQTpUVUNVTUFOOlRyYW5jYXMKKzE3OkFSOkFSRzpBUkdFTlRJTkE6VFVDVU1BTjpZZXJiYSBCdWVuYQorMTpBUjpBUkc6QVJHRU5USU5BOlJJTyBORUdSTzoyNSBkZSBNYXlvCisyOkFSOkFSRzpBUkdFTlRJTkE6UklPIE5FR1JPOjkgZGUgSnVsaW8KKzM6QVI6QVJHOkFSR0VOVElOQTpSSU8gTkVHUk86QWRvbGZvIEFsc2luYQorNDpBUjpBUkc6QVJHRU5USU5BOlJJTyBORUdSTzpBdmVsbGFuZWRhCis1OkFSOkFSRzpBUkdFTlRJTkE6UklPIE5FR1JPOkJhcmlvY2hlCis2OkFSOkFSRzpBUkdFTlRJTkE6UklPIE5FR1JPOkNvbmVzYQorNzpBUjpBUkc6QVJHRU5USU5BOlJJTyBORUdSTzpFbCBDdXkKKzg6QVI6QVJHOkFSR0VOVElOQTpSSU8gTkVHUk86R2VuZXJhbCBSb2NhCis5OkFSOkFSRzpBUkdFTlRJTkE6UklPIE5FR1JPOk5vcnF1aW5jbworMTA6QVI6QVJHOkFSR0VOVElOQTpSSU8gTkVHUk86UGljaGkgTWFodWlkYQorMTE6QVI6QVJHOkFSR0VOVElOQTpSSU8gTkVHUk86UGlsY2FuaXlldQorMTI6QVI6QVJHOkFSR0VOVElOQTpSSU8gTkVHUk86U2FuIEFudG9uaW8KKzEzOkFSOkFSRzpBUkdFTlRJTkE6UklPIE5FR1JPOlZhbGNoZXRhCisxOkFSOkFSRzpBUkdFTlRJTkE6RU5UUkUgUklPUzpDb2xvbgorMjpBUjpBUkc6QVJHRU5USU5BOkVOVFJFIFJJT1M6Q29uY29yZGlhCiszOkFSOkFSRzpBUkdFTlRJTkE6RU5UUkUgUklPUzpEaWFtYW50ZQorNDpBUjpBUkc6QVJHRU5USU5BOkVOVFJFIFJJT1M6RmVkZXJhY2lvbgorNTpBUjpBUkc6QVJHRU5USU5BOkVOVFJFIFJJT1M6RmVkZXJhbAorNjpBUjpBUkc6QVJHRU5USU5BOkVOVFJFIFJJT1M6RmVsaWNpYW5vCis3OkFSOkFSRzpBUkdFTlRJTkE6RU5UUkUgUklPUzpHdWFsZWd1YXkKKzg6QVI6QVJHOkFSR0VOVElOQTpFTlRSRSBSSU9TOkd1YWxlZ3VheWNodQorOTpBUjpBUkc6QVJHRU5USU5BOkVOVFJFIFJJT1M6SXNsYQorMTA6QVI6QVJHOkFSR0VOVElOQTpFTlRSRSBSSU9TOklzbGFzIGRlbCBJYmljdXkKKzExOkFSOkFSRzpBUkdFTlRJTkE6RU5UUkUgUklPUzpMYSBQYXoKKzEyOkFSOkFSRzpBUkdFTlRJTkE6RU5UUkUgUklPUzpOb2dveWEKKzEzOkFSOkFSRzpBUkdFTlRJTkE6RU5UUkUgUklPUzpQYXJhbmEKKzE0OkFSOkFSRzpBUkdFTlRJTkE6RU5UUkUgUklPUzpUYWxhCisxNTpBUjpBUkc6QVJHRU5USU5BOkVOVFJFIFJJT1M6VXJ1Z3VheQorMTY6QVI6QVJHOkFSR0VOVElOQTpFTlRSRSBSSU9TOlZpY3RvcmlhCisxNzpBUjpBUkc6QVJHRU5USU5BOkVOVFJFIFJJT1M6VmlsbGFndWF5CisxOkFSOkFSRzpBUkdFTlRJTkE6TkVVUVVFTjpBbHVtaW5lCisyOkFSOkFSRzpBUkdFTlRJTkE6TkVVUVVFTjpBbmVsbworMzpBUjpBUkc6QVJHRU5USU5BOk5FVVFVRU46Q2F0YW4gTGlsCis0OkFSOkFSRzpBUkdFTlRJTkE6TkVVUVVFTjpDaG9zIE1hbGFsCis1OkFSOkFSRzpBUkdFTlRJTkE6TkVVUVVFTjpDb2xsb24gQ3VyYQorNjpBUjpBUkc6QVJHRU5USU5BOk5FVVFVRU46Q29uZmx1ZW5jaWEKKzc6QVI6QVJHOkFSR0VOVElOQTpORVVRVUVOOkh1aWxpY2hlcworODpBUjpBUkc6QVJHRU5USU5BOk5FVVFVRU46TGFjYXIKKzk6QVI6QVJHOkFSR0VOVElOQTpORVVRVUVOOkxvbmNvcHVlCisxMDpBUjpBUkc6QVJHRU5USU5BOk5FVVFVRU46TG9zIExhZ29zCisxMTpBUjpBUkc6QVJHRU5USU5BOk5FVVFVRU46TWluYXMKKzEyOkFSOkFSRzpBUkdFTlRJTkE6TkVVUVVFTjpOcm9xdWluCisxMzpBUjpBUkc6QVJHRU5USU5BOk5FVVFVRU46UGVodWVuY2hlcworMTQ6QVI6QVJHOkFSR0VOVElOQTpORVVRVUVOOlBpY3VuIExldWZ1CisxNTpBUjpBUkc6QVJHRU5USU5BOk5FVVFVRU46UGljdW5jaGVzCisxNjpBUjpBUkc6QVJHRU5USU5BOk5FVVFVRU46WmFwYWxhCisxOkFSOkFSRzpBUkdFTlRJTkE6U0FOIEpVQU46MjUgRGUgTWF5bworMjpBUjpBUkc6QVJHRU5USU5BOlNBTiBKVUFOOkFsYmFyZG9uCiszOkFSOkFSRzpBUkdFTlRJTkE6U0FOIEpVQU46QW5nYWNvCis0OkFSOkFSRzpBUkdFTlRJTkE6U0FOIEpVQU46Q2FsaW5nYXN0YQorNTpBUjpBUkc6QVJHRU5USU5BOlNBTiBKVUFOOkNhcGl0YWwKKzY6QVI6QVJHOkFSR0VOVElOQTpTQU4gSlVBTjpDYXVjZXRlCis3OkFSOkFSRzpBUkdFTlRJTkE6U0FOIEpVQU46Q2hpbWJhcworODpBUjpBUkc6QVJHRU5USU5BOlNBTiBKVUFOOklnbGVzaWEKKzk6QVI6QVJHOkFSR0VOVElOQTpTQU4gSlVBTjpKYWNoYWwKKzEwOkFSOkFSRzpBUkdFTlRJTkE6U0FOIEpVQU46UG9jaXRvCisxMTpBUjpBUkc6QVJHRU5USU5BOlNBTiBKVUFOOlJhd3NvbgorMTI6QVI6QVJHOkFSR0VOVElOQTpTQU4gSlVBTjpSaXZhZGF2aWEKKzEzOkFSOkFSRzpBUkdFTlRJTkE6U0FOIEpVQU46U2FuIE1hcnRpbgorMTQ6QVI6QVJHOkFSR0VOVElOQTpTQU4gSlVBTjpTYW50YSBMdWNpYQorMTU6QVI6QVJHOkFSR0VOVElOQTpTQU4gSlVBTjpTYXJtaWVudG8KKzE2OkFSOkFSRzpBUkdFTlRJTkE6U0FOIEpVQU46VWxsdW4KKzE3OkFSOkFSRzpBUkdFTlRJTkE6U0FOIEpVQU46VmFsbGUgRmVydGlsCisxODpBUjpBUkc6QVJHRU5USU5BOlNBTiBKVUFOOlpvbmRhCisxOkFSOkFSRzpBUkdFTlRJTkE6Q09SUklFTlRFUzpCZWxsYSBWaXN0YQorMjpBUjpBUkc6QVJHRU5USU5BOkNPUlJJRU5URVM6QmVyb24gZGUgQXN0cmFkYQorMzpBUjpBUkc6QVJHRU5USU5BOkNPUlJJRU5URVM6Q2FwaXRhbAorNDpBUjpBUkc6QVJHRU5USU5BOkNPUlJJRU5URVM6Q29uY2VwY2lvbgorNTpBUjpBUkc6QVJHRU5USU5BOkNPUlJJRU5URVM6Q3VydXp1IEN1YXRpYQorNjpBUjpBUkc6QVJHRU5USU5BOkNPUlJJRU5URVM6RW1wZWRyYWRvCis3OkFSOkFSRzpBUkdFTlRJTkE6Q09SUklFTlRFUzpFc3F1aW5hCis4OkFSOkFSRzpBUkdFTlRJTkE6Q09SUklFTlRFUzpHYW5lcmFsIFBhegorOTpBUjpBUkc6QVJHRU5USU5BOkNPUlJJRU5URVM6R2VuZXJhbCBBbHZlYXIKKzEwOkFSOkFSRzpBUkdFTlRJTkE6Q09SUklFTlRFUzpHb3lhCisxMTpBUjpBUkc6QVJHRU5USU5BOkNPUlJJRU5URVM6SXRhdGkKKzEyOkFSOkFSRzpBUkdFTlRJTkE6Q09SUklFTlRFUzpJdHV6YWluZ28KKzEzOkFSOkFSRzpBUkdFTlRJTkE6Q09SUklFTlRFUzpMYXZhbGxlCisxNDpBUjpBUkc6QVJHRU5USU5BOkNPUlJJRU5URVM6TWJ1cnVjdXkKKzE1OkFSOkFSRzpBUkdFTlRJTkE6Q09SUklFTlRFUzpNZXJjZWRlcworMTY6QVI6QVJHOkFSR0VOVElOQTpDT1JSSUVOVEVTOk1vbnRlIENhc2Vyb3MKKzE3OkFSOkFSRzpBUkdFTlRJTkE6Q09SUklFTlRFUzpQYXNvIGRlIGxvcyBMaWJyZXMKKzE4OkFSOkFSRzpBUkdFTlRJTkE6Q09SUklFTlRFUzpTYWxhZGFzCisxOTpBUjpBUkc6QVJHRU5USU5BOkNPUlJJRU5URVM6U2FuIENvc21lCisyMDpBUjpBUkc6QVJHRU5USU5BOkNPUlJJRU5URVM6U2FuIEx1aXMgZGVsIFBhbG1hcgorMjE6QVI6QVJHOkFSR0VOVElOQTpDT1JSSUVOVEVTOlNhbiBNYXJ0aW4KKzIyOkFSOkFSRzpBUkdFTlRJTkE6Q09SUklFTlRFUzpTYW4gTWlndWVsCisyMzpBUjpBUkc6QVJHRU5USU5BOkNPUlJJRU5URVM6U2FuIFJvcXVlCisyNDpBUjpBUkc6QVJHRU5USU5BOkNPUlJJRU5URVM6U2FudG8gVG9tZQorMjU6QVI6QVJHOkFSR0VOVElOQTpDT1JSSUVOVEVTOlNhdWNlCisxOkFSOkFSRzpBUkdFTlRJTkE6Q0hBQ086MTIgZGUgT2N0dWJyZQorMjpBUjpBUkc6QVJHRU5USU5BOkNIQUNPOjFyby4gZGUgTWF5bworMzpBUjpBUkc6QVJHRU5USU5BOkNIQUNPOjI1IGRlIE1heW8KKzQ6QVI6QVJHOkFSR0VOVElOQTpDSEFDTzo5IGRlIEp1bGlvCis1OkFSOkFSRzpBUkdFTlRJTkE6Q0hBQ086QWxtaXJhbnRlIEJyb3duCis2OkFSOkFSRzpBUkdFTlRJTkE6Q0hBQ086QmVybWVqbworNzpBUjpBUkc6QVJHRU5USU5BOkNIQUNPOkNoYWNhYnVjbworODpBUjpBUkc6QVJHRU5USU5BOkNIQUNPOkNvbWFuZGFudGUgRmVybmFuZGV6Cis5OkFSOkFSRzpBUkdFTlRJTkE6Q0hBQ086RnJheSBKdXN0byBTYW50YSBNYXJpYSBkZQorMTA6QVI6QVJHOkFSR0VOVElOQTpDSEFDTzpHZW5lcmFsIEJlbGdyYW5vCisxMTpBUjpBUkc6QVJHRU5USU5BOkNIQUNPOkdlbmVyYWwgRG9ub3ZhbgorMTI6QVI6QVJHOkFSR0VOVElOQTpDSEFDTzpHZW5lcmFsIEd1ZW1lcworMTM6QVI6QVJHOkFSR0VOVElOQTpDSEFDTzpJbmRlcGVuZGVuY2lhCisxNDpBUjpBUkc6QVJHRU5USU5BOkNIQUNPOkxpYmVydGFkCisxNTpBUjpBUkc6QVJHRU5USU5BOkNIQUNPOkxpYmVydGFkb3IgR2VuZXJhbCBTYW4gTWEKKzE2OkFSOkFSRzpBUkdFTlRJTkE6Q0hBQ086TWFpcHUKKzE3OkFSOkFSRzpBUkdFTlRJTkE6Q0hBQ086TWF5b3IgTHVpcyBKLiBGb250YQorMTg6QVI6QVJHOkFSR0VOVElOQTpDSEFDTzpPLiBIaWdnaW5zCisxOTpBUjpBUkc6QVJHRU5USU5BOkNIQUNPOlByZXNpZGVudGUgZGUgbGEgUGxhemEKKzIwOkFSOkFSRzpBUkdFTlRJTkE6Q0hBQ086UXVpdGlsaXBpCisyMTpBUjpBUkc6QVJHRU5USU5BOkNIQUNPOlNhbiBGZXJuYW5kbworMjI6QVI6QVJHOkFSR0VOVElOQTpDSEFDTzpTYW4gTG9yZW56bworMjM6QVI6QVJHOkFSR0VOVElOQTpDSEFDTzpTYXJnZW50byBDYWJyYWwKKzI0OkFSOkFSRzpBUkdFTlRJTkE6Q0hBQ086VGFwZW5hZworMTpBUjpBUkc6QVJHRU5USU5BOkNPUkRPQkE6Q2FsYW11Y2hpdGEKKzI6QVI6QVJHOkFSR0VOVElOQTpDT1JET0JBOkNhcGl0YWwKKzM6QVI6QVJHOkFSR0VOVElOQTpDT1JET0JBOkNvbG9uCis0OkFSOkFSRzpBUkdFTlRJTkE6Q09SRE9CQTpDcnV6IGRlbCBFamUKKzU6QVI6QVJHOkFSR0VOVElOQTpDT1JET0JBOkdlbmVyYWwgUm9jYQorNjpBUjpBUkc6QVJHRU5USU5BOkNPUkRPQkE6R2VuZXJhbCBTYW4gTWFydGluCis3OkFSOkFSRzpBUkdFTlRJTkE6Q09SRE9CQTpJc2NoaWxpbgorODpBUjpBUkc6QVJHRU5USU5BOkNPUkRPQkE6SnVhcmV6IENlbG1hbgorOTpBUjpBUkc6QVJHRU5USU5BOkNPUkRPQkE6TWFyY29zIEp1YXJlegorMTA6QVI6QVJHOkFSR0VOVElOQTpDT1JET0JBOk1pbmFzCisxMTpBUjpBUkc6QVJHRU5USU5BOkNPUkRPQkE6UG9jaG8KKzEyOkFSOkFSRzpBUkdFTlRJTkE6Q09SRE9CQTpQcmVzaWRlbnRlIFJvcXVlIFMgZW56IFBlCisxMzpBUjpBUkc6QVJHRU5USU5BOkNPUkRPQkE6UHVuaWxsYQorMTQ6QVI6QVJHOkFSR0VOVElOQTpDT1JET0JBOlJpbyBDdWFydG8KKzE1OkFSOkFSRzpBUkdFTlRJTkE6Q09SRE9CQTpSaW8gUHJpbWVybworMTY6QVI6QVJHOkFSR0VOVElOQTpDT1JET0JBOlJpbyBTZWNvCisxNzpBUjpBUkc6QVJHRU5USU5BOkNPUkRPQkE6UmlvIFNlZ3VuZG8KKzE4OkFSOkFSRzpBUkdFTlRJTkE6Q09SRE9CQTpTYW4gQWxiZXJ0bworMTk6QVI6QVJHOkFSR0VOVElOQTpDT1JET0JBOlNhbiBKYXZpZXIKKzIwOkFSOkFSRzpBUkdFTlRJTkE6Q09SRE9CQTpTYW4gSnVzdG8KKzIxOkFSOkFSRzpBUkdFTlRJTkE6Q09SRE9CQTpTYW50YSBNYXJpYQorMjI6QVI6QVJHOkFSR0VOVElOQTpDT1JET0JBOlNvYnJlbW9udGUKKzIzOkFSOkFSRzpBUkdFTlRJTkE6Q09SRE9CQTpUZXJjZXJvIEFycmliYQorMjQ6QVI6QVJHOkFSR0VOVElOQTpDT1JET0JBOlRvdG9yYWwKKzI1OkFSOkFSRzpBUkdFTlRJTkE6Q09SRE9CQTpUdWx1bWJhCisyNjpBUjpBUkc6QVJHRU5USU5BOkNPUkRPQkE6VW5pb24KKzE6QVI6QVJHOkFSR0VOVElOQTpGT1JNT1NBOkJlcm1lam8KKzI6QVI6QVJHOkFSR0VOVElOQTpGT1JNT1NBOkZvcm1vc2EKKzM6QVI6QVJHOkFSR0VOVElOQTpGT1JNT1NBOkxhaXNoaQorNDpBUjpBUkc6QVJHRU5USU5BOkZPUk1PU0E6TWF0YWNvcworNTpBUjpBUkc6QVJHRU5USU5BOkZPUk1PU0E6UGF0aW5vCis2OkFSOkFSRzpBUkdFTlRJTkE6Rk9STU9TQTpQaWxhZ2FzCis3OkFSOkFSRzpBUkdFTlRJTkE6Rk9STU9TQTpQaWxjb21heW8KKzg6QVI6QVJHOkFSR0VOVElOQTpGT1JNT1NBOlBpcmFuZQorOTpBUjpBUkc6QVJHRU5USU5BOkZPUk1PU0E6UmFtb24gTGlzdGEKKzE6QVI6QVJHOkFSR0VOVElOQTpKVUpVWTpDYXBpdGFsCisyOkFSOkFSRzpBUkdFTlRJTkE6SlVKVVk6Q29jaGlub2NhCiszOkFSOkFSRzpBUkdFTlRJTkE6SlVKVVk6RWwgQ2FybWVuCis0OkFSOkFSRzpBUkdFTlRJTkE6SlVKVVk6SHVtYWh1YWNhCis1OkFSOkFSRzpBUkdFTlRJTkE6SlVKVVk6TGVkZXNtYQorNjpBUjpBUkc6QVJHRU5USU5BOkpVSlVZOlBhbHBhbGEKKzc6QVI6QVJHOkFSR0VOVElOQTpKVUpVWTpSaW5jb25hZGEKKzg6QVI6QVJHOkFSR0VOVElOQTpKVUpVWTpTYW4gQW50b25pbworOTpBUjpBUkc6QVJHRU5USU5BOkpVSlVZOlNhbiBQZWRybworMTA6QVI6QVJHOkFSR0VOVElOQTpKVUpVWTpTYW50YSBCYXJiYXJhCisxMTpBUjpBUkc6QVJHRU5USU5BOkpVSlVZOlNhbnRhIENhdGFsaW5hCisxMjpBUjpBUkc6QVJHRU5USU5BOkpVSlVZOlN1c3F1ZXMKKzEzOkFSOkFSRzpBUkdFTlRJTkE6SlVKVVk6VElMQ0FSQQorMTQ6QVI6QVJHOkFSR0VOVElOQTpKVUpVWTpUdW1iYXlhCisxNTpBUjpBUkc6QVJHRU5USU5BOkpVSlVZOlZhbGxlIEdyYW5kZQorMTY6QVI6QVJHOkFSR0VOVElOQTpKVUpVWTpZYXZpCisxOkFSOkFSRzpBUkdFTlRJTkE6QlVFTk9TIEFJUkVTIEQuRi46Q2FwaXRhbCBGZWRlcmFsCisxOkFSOkFSRzpBUkdFTlRJTkE6QlVFTk9TIEFJUkVTOjI1IGRlIE1heW8KKzI6QVI6QVJHOkFSR0VOVElOQTpCVUVOT1MgQUlSRVM6OSBkZSBKdWxpbworMzpBUjpBUkc6QVJHRU5USU5BOkJVRU5PUyBBSVJFUzpBUkcuTDIuMQorNDpBUjpBUkc6QVJHRU5USU5BOkJVRU5PUyBBSVJFUzpBUkcuTDIuMgorNTpBUjpBUkc6QVJHRU5USU5BOkJVRU5PUyBBSVJFUzpBUkcuTDIuMworNjpBUjpBUkc6QVJHRU5USU5BOkJVRU5PUyBBSVJFUzpBUkcuTDIuNAorNzpBUjpBUkc6QVJHRU5USU5BOkJVRU5PUyBBSVJFUzpBUkcuTDIuNQorODpBUjpBUkc6QVJHRU5USU5BOkJVRU5PUyBBSVJFUzpBUkcuTDIuNgorOTpBUjpBUkc6QVJHRU5USU5BOkJVRU5PUyBBSVJFUzpBUkcuTDIuNworMTA6QVI6QVJHOkFSR0VOVElOQTpCVUVOT1MgQUlSRVM6QVJHLkwyLjgKKzExOkFSOkFSRzpBUkdFTlRJTkE6QlVFTk9TIEFJUkVTOkFkb2xmbyBBbHNpbmEKKzEyOkFSOkFSRzpBUkdFTlRJTkE6QlVFTk9TIEFJUkVTOkFkb2xmbyBHb256YWxlcyBDaGF2ZXMKKzEzOkFSOkFSRzpBUkdFTlRJTkE6QlVFTk9TIEFJUkVTOkFsYmVydGkKKzE0OkFSOkFSRzpBUkdFTlRJTkE6QlVFTk9TIEFJUkVTOkFsbWlyYW50ZSBCcm93bgorMTU6QVI6QVJHOkFSR0VOVElOQTpCVUVOT1MgQUlSRVM6QW1lZ2hpbm8KKzE2OkFSOkFSRzpBUkdFTlRJTkE6QlVFTk9TIEFJUkVTOkF2ZWxsYW5lZGEKKzE3OkFSOkFSRzpBUkdFTlRJTkE6QlVFTk9TIEFJUkVTOkF5YWN1Y2hvCisxODpBUjpBUkc6QVJHRU5USU5BOkJVRU5PUyBBSVJFUzpBenVsCisxOTpBUjpBUkc6QVJHRU5USU5BOkJVRU5PUyBBSVJFUzpCYWhpYSBCbGFuY2EKKzIwOkFSOkFSRzpBUkdFTlRJTkE6QlVFTk9TIEFJUkVTOkJhbGNhcmNlCisyMTpBUjpBUkc6QVJHRU5USU5BOkJVRU5PUyBBSVJFUzpCYXJhZGVybworMjI6QVI6QVJHOkFSR0VOVElOQTpCVUVOT1MgQUlSRVM6QmFydG9sb21lIE1pdHJlCisyMzpBUjpBUkc6QVJHRU5USU5BOkJVRU5PUyBBSVJFUzpCZW5pdG8gSnVhcmV6CisyNDpBUjpBUkc6QVJHRU5USU5BOkJVRU5PUyBBSVJFUzpCZXJhemF0ZWd1aQorMjU6QVI6QVJHOkFSR0VOVElOQTpCVUVOT1MgQUlSRVM6QmVyaXNzbworMjY6QVI6QVJHOkFSR0VOVElOQTpCVUVOT1MgQUlSRVM6Qm9saXZhcgorMjc6QVI6QVJHOkFSR0VOVElOQTpCVUVOT1MgQUlSRVM6QnJhZ2FkbworMjg6QVI6QVJHOkFSR0VOVElOQTpCVUVOT1MgQUlSRVM6QnJhbmRzZW4KKzI5OkFSOkFSRzpBUkdFTlRJTkE6QlVFTk9TIEFJUkVTOkNhbXBhbmEKKzMwOkFSOkFSRzpBUkdFTlRJTkE6QlVFTk9TIEFJUkVTOkNhbnVlbGFzCiszMTpBUjpBUkc6QVJHRU5USU5BOkJVRU5PUyBBSVJFUzpDYXBpdGFuIFNhcm1pZW50bworMzI6QVI6QVJHOkFSR0VOVElOQTpCVUVOT1MgQUlSRVM6Q2FybG9zIENhc2FyZXMKKzMzOkFSOkFSRzpBUkdFTlRJTkE6QlVFTk9TIEFJUkVTOkNhcmxvcyBUZWplZG9yCiszNDpBUjpBUkc6QVJHRU5USU5BOkJVRU5PUyBBSVJFUzpDYXJtZW4gZGUgQXJlY28KKzM1OkFSOkFSRzpBUkdFTlRJTkE6QlVFTk9TIEFJUkVTOkNhc3RlbGxpCiszNjpBUjpBUkc6QVJHRU5USU5BOkJVRU5PUyBBSVJFUzpDaGFjYWJ1Y28KKzM3OkFSOkFSRzpBUkdFTlRJTkE6QlVFTk9TIEFJUkVTOkNoYXNjb211cworMzg6QVI6QVJHOkFSR0VOVElOQTpCVUVOT1MgQUlSRVM6Q2hpdmlsY295CiszOTpBUjpBUkc6QVJHRU5USU5BOkJVRU5PUyBBSVJFUzpDb2xvbgorNDA6QVI6QVJHOkFSR0VOVElOQTpCVUVOT1MgQUlSRVM6Q29yb25lbCBEb3JyZWdvCis0MTpBUjpBUkc6QVJHRU5USU5BOkJVRU5PUyBBSVJFUzpDb3JvbmVsIFByaW5nbGVzCis0MjpBUjpBUkc6QVJHRU5USU5BOkJVRU5PUyBBSVJFUzpDb3JvbmVsIFN1YXJlegorNDM6QVI6QVJHOkFSR0VOVElOQTpCVUVOT1MgQUlSRVM6Q29yb25lbCBkZSBNYXJpYW5hIExlb25hcgorNDQ6QVI6QVJHOkFSR0VOVElOQTpCVUVOT1MgQUlSRVM6RGFpcmVhdXgKKzQ1OkFSOkFSRzpBUkdFTlRJTkE6QlVFTk9TIEFJUkVTOkRvbG9yZXMKKzQ2OkFSOkFSRzpBUkdFTlRJTkE6QlVFTk9TIEFJUkVTOkVuc2VuYWRhCis0NzpBUjpBUkc6QVJHRU5USU5BOkJVRU5PUyBBSVJFUzpFc2NvYmFyCis0ODpBUjpBUkc6QVJHRU5USU5BOkJVRU5PUyBBSVJFUzpFc3RlYmFuIEVjaGV2ZXJyaWEKKzQ5OkFSOkFSRzpBUkdFTlRJTkE6QlVFTk9TIEFJUkVTOkV4YWx0YWNpb24gZGUgbGEgQ3J1egorNTA6QVI6QVJHOkFSR0VOVElOQTpCVUVOT1MgQUlSRVM6RmxvcmVuY2lvIFZhcmVsYQorNTE6QVI6QVJHOkFSR0VOVElOQTpCVUVOT1MgQUlSRVM6R2VuZXJhbCBBbHZhcmFkbworNTI6QVI6QVJHOkFSR0VOVElOQTpCVUVOT1MgQUlSRVM6R2VuZXJhbCBBbHZlYXIKKzUzOkFSOkFSRzpBUkdFTlRJTkE6QlVFTk9TIEFJUkVTOkdlbmVyYWwgQXJlbmFsZXMKKzU0OkFSOkFSRzpBUkdFTlRJTkE6QlVFTk9TIEFJUkVTOkdlbmVyYWwgQmVsZ3Jhbm8KKzU1OkFSOkFSRzpBUkdFTlRJTkE6QlVFTk9TIEFJUkVTOkdlbmVyYWwgR3VpZG8KKzU2OkFSOkFSRzpBUkdFTlRJTkE6QlVFTk9TIEFJUkVTOkdlbmVyYWwgSnVhbiBNYWRhcmlhZ2EKKzU3OkFSOkFSRzpBUkdFTlRJTkE6QlVFTk9TIEFJUkVTOkdlbmVyYWwgTGEgTWFkcmlkCis1ODpBUjpBUkc6QVJHRU5USU5BOkJVRU5PUyBBSVJFUzpHZW5lcmFsIExhcyBIZXJhcworNTk6QVI6QVJHOkFSR0VOVElOQTpCVUVOT1MgQUlSRVM6R2VuZXJhbCBMYXZhbGxlCis2MDpBUjpBUkc6QVJHRU5USU5BOkJVRU5PUyBBSVJFUzpHZW5lcmFsIFBhegorNjE6QVI6QVJHOkFSR0VOVElOQTpCVUVOT1MgQUlSRVM6R2VuZXJhbCBQaW50bworNjI6QVI6QVJHOkFSR0VOVElOQTpCVUVOT1MgQUlSRVM6R2VuZXJhbCBQdWV5cnJlZG9uCis2MzpBUjpBUkc6QVJHRU5USU5BOkJVRU5PUyBBSVJFUzpHZW5lcmFsIFJvZHJpZ3VlegorNjQ6QVI6QVJHOkFSR0VOVElOQTpCVUVOT1MgQUlSRVM6R2VuZXJhbCBTYW4gTWFydGluCis2NTpBUjpBUkc6QVJHRU5USU5BOkJVRU5PUyBBSVJFUzpHZW5lcmFsIFNhcm1pZW50bworNjY6QVI6QVJHOkFSR0VOVElOQTpCVUVOT1MgQUlSRVM6R2VuZXJhbCBWaWFtb250ZQorNjc6QVI6QVJHOkFSR0VOVElOQTpCVUVOT1MgQUlSRVM6R2VuZXJhbCBWaWxsZWdhcworNjg6QVI6QVJHOkFSR0VOVElOQTpCVUVOT1MgQUlSRVM6R3VhbWluCis2OTpBUjpBUkc6QVJHRU5USU5BOkJVRU5PUyBBSVJFUzpIaXBvbGl0byBZcmlnb3llbgorNzA6QVI6QVJHOkFSR0VOVElOQTpCVUVOT1MgQUlSRVM6SnVuaW4KKzcxOkFSOkFSRzpBUkdFTlRJTkE6QlVFTk9TIEFJUkVTOkxhIENvc3RhCis3MjpBUjpBUkc6QVJHRU5USU5BOkJVRU5PUyBBSVJFUzpMYSBNYXRhbnphCis3MzpBUjpBUkc6QVJHRU5USU5BOkJVRU5PUyBBSVJFUzpMYSBQbGF0YQorNzQ6QVI6QVJHOkFSR0VOVElOQTpCVUVOT1MgQUlSRVM6TGFudXMKKzc1OkFSOkFSRzpBUkdFTlRJTkE6QlVFTk9TIEFJUkVTOkxhcHJpZGEKKzc2OkFSOkFSRzpBUkdFTlRJTkE6QlVFTk9TIEFJUkVTOkxhcyBGbG9yZXMKKzc3OkFSOkFSRzpBUkdFTlRJTkE6QlVFTk9TIEFJUkVTOkxlb25hcmRvIE4uIEFsZW0KKzc4OkFSOkFSRzpBUkdFTlRJTkE6QlVFTk9TIEFJUkVTOkxpbmNvbG4KKzc5OkFSOkFSRzpBUkdFTlRJTkE6QlVFTk9TIEFJUkVTOkxvYmVyaWEKKzgwOkFSOkFSRzpBUkdFTlRJTkE6QlVFTk9TIEFJUkVTOkxvYm9zCis4MTpBUjpBUkc6QVJHRU5USU5BOkJVRU5PUyBBSVJFUzpMb21hcyBkZSBaYW1vcmEKKzgyOkFSOkFSRzpBUkdFTlRJTkE6QlVFTk9TIEFJUkVTOkx1amFuCis4MzpBUjpBUkc6QVJHRU5USU5BOkJVRU5PUyBBSVJFUzpNYWdkYWxlbmEKKzg0OkFSOkFSRzpBUkdFTlRJTkE6QlVFTk9TIEFJUkVTOk1haXB1Cis4NTpBUjpBUkc6QVJHRU5USU5BOkJVRU5PUyBBSVJFUzpNYXIgQ2hpcXVpdGEKKzg2OkFSOkFSRzpBUkdFTlRJTkE6QlVFTk9TIEFJUkVTOk1hcmNvcyBQYXoKKzg3OkFSOkFSRzpBUkdFTlRJTkE6QlVFTk9TIEFJUkVTOk1lcmNlZGVzCis4ODpBUjpBUkc6QVJHRU5USU5BOkJVRU5PUyBBSVJFUzpNZXJsbworODk6QVI6QVJHOkFSR0VOVElOQTpCVUVOT1MgQUlSRVM6TW9udGUKKzkwOkFSOkFSRzpBUkdFTlRJTkE6QlVFTk9TIEFJUkVTOk1vbnRlIEhlcm1vc28KKzkxOkFSOkFSRzpBUkdFTlRJTkE6QlVFTk9TIEFJUkVTOk1vcmVubworOTI6QVI6QVJHOkFSR0VOVElOQTpCVUVOT1MgQUlSRVM6TW9yb24KKzkzOkFSOkFSRzpBUkdFTlRJTkE6QlVFTk9TIEFJUkVTOk5hdmFycm8KKzk0OkFSOkFSRzpBUkdFTlRJTkE6QlVFTk9TIEFJUkVTOk5lY29jaGVhCis5NTpBUjpBUkc6QVJHRU5USU5BOkJVRU5PUyBBSVJFUzpPbGF2YXJyaWEKKzk2OkFSOkFSRzpBUkdFTlRJTkE6QlVFTk9TIEFJUkVTOlBhdGFnb25lcworOTc6QVI6QVJHOkFSR0VOVElOQTpCVUVOT1MgQUlSRVM6UGF0YWdvbmVzIChJcy4pCis5ODpBUjpBUkc6QVJHRU5USU5BOkJVRU5PUyBBSVJFUzpQZWh1YWpvCis5OTpBUjpBUkc6QVJHRU5USU5BOkJVRU5PUyBBSVJFUzpQZWxsZWdyaW5pCisxMDA6QVI6QVJHOkFSR0VOVElOQTpCVUVOT1MgQUlSRVM6UGVyZ2FtaW5vCisxMDE6QVI6QVJHOkFSR0VOVElOQTpCVUVOT1MgQUlSRVM6UGlsYQorMTAyOkFSOkFSRzpBUkdFTlRJTkE6QlVFTk9TIEFJUkVTOlBpbGFyCisxMDM6QVI6QVJHOkFSR0VOVElOQTpCVUVOT1MgQUlSRVM6UGluYW1hcgorMTA0OkFSOkFSRzpBUkdFTlRJTkE6QlVFTk9TIEFJUkVTOlB1YW4KKzEwNTpBUjpBUkc6QVJHRU5USU5BOkJVRU5PUyBBSVJFUzpRdWlsbWVzCisxMDY6QVI6QVJHOkFSR0VOVElOQTpCVUVOT1MgQUlSRVM6UmFtYWxsbworMTA3OkFSOkFSRzpBUkdFTlRJTkE6QlVFTk9TIEFJUkVTOlJhdWNoCisxMDg6QVI6QVJHOkFSR0VOVElOQTpCVUVOT1MgQUlSRVM6Uml2YWRhdmlhCisxMDk6QVI6QVJHOkFSR0VOVElOQTpCVUVOT1MgQUlSRVM6Um9qYXMKKzExMDpBUjpBUkc6QVJHRU5USU5BOkJVRU5PUyBBSVJFUzpSb3F1ZSBQZXJlegorMTExOkFSOkFSRzpBUkdFTlRJTkE6QlVFTk9TIEFJUkVTOlNhYXZlZHJhCisxMTI6QVI6QVJHOkFSR0VOVElOQTpCVUVOT1MgQUlSRVM6U2FsYWRpbGxvCisxMTM6QVI6QVJHOkFSR0VOVElOQTpCVUVOT1MgQUlSRVM6U2FsbGlxdWVsbG8KKzExNDpBUjpBUkc6QVJHRU5USU5BOkJVRU5PUyBBSVJFUzpTYWx0bworMTE1OkFSOkFSRzpBUkdFTlRJTkE6QlVFTk9TIEFJUkVTOlNhbiBBbmRyZXMgZGUgR2lsZXMKKzExNjpBUjpBUkc6QVJHRU5USU5BOkJVRU5PUyBBSVJFUzpTYW4gQW50b25pbyBkZSBBcmVjbworMTE3OkFSOkFSRzpBUkdFTlRJTkE6QlVFTk9TIEFJUkVTOlNhbiBDYXlldGFubworMTE4OkFSOkFSRzpBUkdFTlRJTkE6QlVFTk9TIEFJUkVTOlNhbiBGZXJuYW5kbworMTE5OkFSOkFSRzpBUkdFTlRJTkE6QlVFTk9TIEFJUkVTOlNhbiBJc2lkcm8KKzEyMDpBUjpBUkc6QVJHRU5USU5BOkJVRU5PUyBBSVJFUzpTYW4gTmljb2xhcworMTIxOkFSOkFSRzpBUkdFTlRJTkE6QlVFTk9TIEFJUkVTOlNhbiBQZWRybworMTIyOkFSOkFSRzpBUkdFTlRJTkE6QlVFTk9TIEFJUkVTOlNhbiBWaWNlbnRlCisxMjM6QVI6QVJHOkFSR0VOVElOQTpCVUVOT1MgQUlSRVM6U3VpcGFjaGEKKzEyNDpBUjpBUkc6QVJHRU5USU5BOkJVRU5PUyBBSVJFUzpUYW5kaWwKKzEyNTpBUjpBUkc6QVJHRU5USU5BOkJVRU5PUyBBSVJFUzpUYXBscXVlbgorMTI2OkFSOkFSRzpBUkdFTlRJTkE6QlVFTk9TIEFJUkVTOlRpZ3JlCisxMjc6QVI6QVJHOkFSR0VOVElOQTpCVUVOT1MgQUlSRVM6VG9yZGlsbG8KKzEyODpBUjpBUkc6QVJHRU5USU5BOkJVRU5PUyBBSVJFUzpUb3JucXVpc3QKKzEyOTpBUjpBUkc6QVJHRU5USU5BOkJVRU5PUyBBSVJFUzpUcmVucXVlIExhdXF1ZW4KKzEzMDpBUjpBUkc6QVJHRU5USU5BOkJVRU5PUyBBSVJFUzpUcmVzIEFycm95b3MKKzEzMTpBUjpBUkc6QVJHRU5USU5BOkJVRU5PUyBBSVJFUzpUcmVzIExvbWFzCisxMzI6QVI6QVJHOkFSR0VOVElOQTpCVUVOT1MgQUlSRVM6VHJlcyBkZSBGZWJyZXJvCisxMzM6QVI6QVJHOkFSR0VOVElOQTpCVUVOT1MgQUlSRVM6VmljZW50ZSBMb3BlegorMTM0OkFSOkFSRzpBUkdFTlRJTkE6QlVFTk9TIEFJUkVTOlZpbGxhIEdlc2VsbAorMTM1OkFSOkFSRzpBUkdFTlRJTkE6QlVFTk9TIEFJUkVTOlZpbGxhcmlubworMTM2OkFSOkFSRzpBUkdFTlRJTkE6QlVFTk9TIEFJUkVTOlZpbGxhcmlubyAoSXMuKQorMTM3OkFSOkFSRzpBUkdFTlRJTkE6QlVFTk9TIEFJUkVTOlphcmF0ZQorMTpBUjpBUkc6QVJHRU5USU5BOkxBIFJJT0pBOkFyYXVjbworMjpBUjpBUkc6QVJHRU5USU5BOkxBIFJJT0pBOkNhcGl0YWwKKzM6QVI6QVJHOkFSR0VOVElOQTpMQSBSSU9KQTpDYXN0cm8gQmFycm9zCis0OkFSOkFSRzpBUkdFTlRJTkE6TEEgUklPSkE6Q2hpbGVjaXRvCis1OkFSOkFSRzpBUkdFTlRJTkE6TEEgUklPSkE6RmFtYXRpbmEKKzY6QVI6QVJHOkFSR0VOVElOQTpMQSBSSU9KQTpHZW5lcmFsIEFuZ2VsIFYuIFBlc2Fsb3phCis3OkFSOkFSRzpBUkdFTlRJTkE6TEEgUklPSkE6R2VuZXJhbCBCZWxncmFubworODpBUjpBUkc6QVJHRU5USU5BOkxBIFJJT0pBOkdlbmVyYWwgSnVhbiBGLiBRdWlyb2dhCis5OkFSOkFSRzpBUkdFTlRJTkE6TEEgUklPSkE6R2VuZXJhbCBMYW1hZHJpZAorMTA6QVI6QVJHOkFSR0VOVElOQTpMQSBSSU9KQTpHZW5lcmFsIExhdmFsbGUKKzExOkFSOkFSRzpBUkdFTlRJTkE6TEEgUklPSkE6R2VuZXJhbCBPY2FtcG8KKzEyOkFSOkFSRzpBUkdFTlRJTkE6TEEgUklPSkE6R2VuZXJhbCBTYW4gTWFydGluCisxMzpBUjpBUkc6QVJHRU5USU5BOkxBIFJJT0pBOkdlbmVyYWwgU2FybWllbnRvCisxNDpBUjpBUkc6QVJHRU5USU5BOkxBIFJJT0pBOkdvYmVybmFkb3IgR29yZGlsbG8KKzE1OkFSOkFSRzpBUkdFTlRJTkE6TEEgUklPSkE6SW5kZXBlbmRlbmNpYQorMTY6QVI6QVJHOkFSR0VOVElOQTpMQSBSSU9KQTpSb3NhcmlvIFZlcmEgUGVuYWxvemEKKzE3OkFSOkFSRzpBUkdFTlRJTkE6TEEgUklPSkE6U2FuIEJsYXMgZGUgbG9zIFNhdWNlcworMTg6QVI6QVJHOkFSR0VOVElOQTpMQSBSSU9KQTpTYW5hZ2FzdGEKKzE6QVI6QVJHOkFSR0VOVElOQTpNRU5ET1pBOkNhcGl0YWwKKzI6QVI6QVJHOkFSR0VOVElOQTpNRU5ET1pBOkdlbmVyYWwgQWx2ZWFyCiszOkFSOkFSRzpBUkdFTlRJTkE6TUVORE9aQTpHb2RveSBDcnV6Cis0OkFSOkFSRzpBUkdFTlRJTkE6TUVORE9aQTpHdWF5bWFsbGVuCis1OkFSOkFSRzpBUkdFTlRJTkE6TUVORE9aQTpKdW5pbgorNjpBUjpBUkc6QVJHRU5USU5BOk1FTkRPWkE6TGEgUGF6Cis3OkFSOkFSRzpBUkdFTlRJTkE6TUVORE9aQTpMYXMgSGVyYXMKKzg6QVI6QVJHOkFSR0VOVElOQTpNRU5ET1pBOkxhdmFsbGUKKzk6QVI6QVJHOkFSR0VOVElOQTpNRU5ET1pBOkx1amFuCisxMDpBUjpBUkc6QVJHRU5USU5BOk1FTkRPWkE6TWFpcHUKKzExOkFSOkFSRzpBUkdFTlRJTkE6TUVORE9aQTpNYWxhcmdlCisxMjpBUjpBUkc6QVJHRU5USU5BOk1FTkRPWkE6Uml2YWRhdmlhCisxMzpBUjpBUkc6QVJHRU5USU5BOk1FTkRPWkE6U2FuIENhcmxvcworMTQ6QVI6QVJHOkFSR0VOVElOQTpNRU5ET1pBOlNhbiBNYXJ0aW4KKzE1OkFSOkFSRzpBUkdFTlRJTkE6TUVORE9aQTpTYW4gUmFmYWVsCisxNjpBUjpBUkc6QVJHRU5USU5BOk1FTkRPWkE6U2F0YSBSb3NhCisxNzpBUjpBUkc6QVJHRU5USU5BOk1FTkRPWkE6VHVudXlhbgorMTg6QVI6QVJHOkFSR0VOVElOQTpNRU5ET1pBOlR1cHVuZ2F0bworMTpBUjpBUkc6QVJHRU5USU5BOlNBTlRBIEZFOjkgZGUgSnVsaW8KKzI6QVI6QVJHOkFSR0VOVElOQTpTQU5UQSBGRTpCZWxncmFubworMzpBUjpBUkc6QVJHRU5USU5BOlNBTlRBIEZFOkNhc2Vyb3MKKzQ6QVI6QVJHOkFSR0VOVElOQTpTQU5UQSBGRTpDYXN0ZWxsYW5vcworNTpBUjpBUkc6QVJHRU5USU5BOlNBTlRBIEZFOkNvbnN0aXR1Y2lvbgorNjpBUjpBUkc6QVJHRU5USU5BOlNBTlRBIEZFOkdhcmF5Cis3OkFSOkFSRzpBUkdFTlRJTkE6U0FOVEEgRkU6R2VuZXJhbCBMb3BlegorODpBUjpBUkc6QVJHRU5USU5BOlNBTlRBIEZFOkdlbmVyYWwgT2JsaWdhZG8KKzk6QVI6QVJHOkFSR0VOVElOQTpTQU5UQSBGRTpJcmlvbmRvCisxMDpBUjpBUkc6QVJHRU5USU5BOlNBTlRBIEZFOkxhIENhcGl0YWwKKzExOkFSOkFSRzpBUkdFTlRJTkE6U0FOVEEgRkU6TGFzIENvbG9uaWFzCisxMjpBUjpBUkc6QVJHRU5USU5BOlNBTlRBIEZFOlJvc2FyaW8KKzEzOkFSOkFSRzpBUkdFTlRJTkE6U0FOVEEgRkU6U2FuIENyaXN0b2JhbAorMTQ6QVI6QVJHOkFSR0VOVElOQTpTQU5UQSBGRTpTYW4gSmF2aWVyCisxNTpBUjpBUkc6QVJHRU5USU5BOlNBTlRBIEZFOlNhbiBKZXJvbmltbworMTY6QVI6QVJHOkFSR0VOVElOQTpTQU5UQSBGRTpTYW4gSnVzdG8KKzE3OkFSOkFSRzpBUkdFTlRJTkE6U0FOVEEgRkU6U2FuIExvcmVuem8KKzE4OkFSOkFSRzpBUkdFTlRJTkE6U0FOVEEgRkU6U2FuIE1hcnRpbgorMTk6QVI6QVJHOkFSR0VOVElOQTpTQU5UQSBGRTpWZXJhCisxOkFSOkFSRzpBUkdFTlRJTkE6TEEgUEFNUEE6QXRyZXVjbworMjpBUjpBUkc6QVJHRU5USU5BOkxBIFBBTVBBOkNhbGV1IENhbGV1CiszOkFSOkFSRzpBUkdFTlRJTkE6TEEgUEFNUEE6Q2FwaXRhbAorNDpBUjpBUkc6QVJHRU5USU5BOkxBIFBBTVBBOkNhdHJpbG8KKzU6QVI6QVJHOkFSR0VOVElOQTpMQSBQQU1QQTpDaGFsaWxlbworNjpBUjpBUkc6QVJHRU5USU5BOkxBIFBBTVBBOkNoYXBhbGV1ZnUKKzc6QVI6QVJHOkFSR0VOVElOQTpMQSBQQU1QQTpDaGljYWwgQ28KKzg6QVI6QVJHOkFSR0VOVElOQTpMQSBQQU1QQTpDb25oZWxsbworOTpBUjpBUkc6QVJHRU5USU5BOkxBIFBBTVBBOkN1cmEgQ28KKzEwOkFSOkFSRzpBUkdFTlRJTkE6TEEgUEFNUEE6R3VhdHJhY2hlCisxMTpBUjpBUkc6QVJHRU5USU5BOkxBIFBBTVBBOkh1Y2FsCisxMjpBUjpBUkc6QVJHRU5USU5BOkxBIFBBTVBBOkxpaHVlbCBDYWxlbAorMTM6QVI6QVJHOkFSR0VOVElOQTpMQSBQQU1QQTpMaW1heSBNYWh1aWRhCisxNDpBUjpBUkc6QVJHRU5USU5BOkxBIFBBTVBBOkxvdmVudHVlCisxNTpBUjpBUkc6QVJHRU5USU5BOkxBIFBBTVBBOk1hcmFjbworMTY6QVI6QVJHOkFSR0VOVElOQTpMQSBQQU1QQTpQdWxlbgorMTc6QVI6QVJHOkFSR0VOVElOQTpMQSBQQU1QQTpRdWVtdSBRdWVtdQorMTg6QVI6QVJHOkFSR0VOVElOQTpMQSBQQU1QQTpSYWxpY28KKzE5OkFSOkFSRzpBUkdFTlRJTkE6TEEgUEFNUEE6UmFuY3VsCisyMDpBUjpBUkc6QVJHRU5USU5BOkxBIFBBTVBBOlRvYXkKKzIxOkFSOkFSRzpBUkdFTlRJTkE6TEEgUEFNUEE6VHJlbmVsCisyMjpBUjpBUkc6QVJHRU5USU5BOkxBIFBBTVBBOlVsdHJhY2FuCisxOkFSOkFSRzpBUkdFTlRJTkE6U0FOIExVSVM6QXlhY3VjaG8KKzI6QVI6QVJHOkFSR0VOVElOQTpTQU4gTFVJUzpCZWxncmFubworMzpBUjpBUkc6QVJHRU5USU5BOlNBTiBMVUlTOkNoYWNhYnVjbworNDpBUjpBUkc6QVJHRU5USU5BOlNBTiBMVUlTOkNvcm9uZWwgUHJpbmdsZXMKKzU6QVI6QVJHOkFSR0VOVElOQTpTQU4gTFVJUzpHZW5lcmFsIFBlZGVybmVyYQorNjpBUjpBUkc6QVJHRU5USU5BOlNBTiBMVUlTOkdvYmVybmFkb3IgRHVwdXkKKzc6QVI6QVJHOkFSR0VOVElOQTpTQU4gTFVJUzpKdW5pbgorODpBUjpBUkc6QVJHRU5USU5BOlNBTiBMVUlTOkxhIENhcGl0YWwKKzk6QVI6QVJHOkFSR0VOVElOQTpTQU4gTFVJUzpMaWJlcnRhZG9yIEdlbmVyYWwgU2FuIE1hCisxOkFSOkFSRzpBUkdFTlRJTkE6TUlTSU9ORVM6MjUgZGUgTWF5bworMjpBUjpBUkc6QVJHRU5USU5BOk1JU0lPTkVTOkFwb3N0b2xlcworMzpBUjpBUkc6QVJHRU5USU5BOk1JU0lPTkVTOkNhaW5ndWFzCis0OkFSOkFSRzpBUkdFTlRJTkE6TUlTSU9ORVM6Q2FuZGVsYXJpYQorNTpBUjpBUkc6QVJHRU5USU5BOk1JU0lPTkVTOkNhcGl0YWwKKzY6QVI6QVJHOkFSR0VOVElOQTpNSVNJT05FUzpDb25jZXBjaW9uCis3OkFSOkFSRzpBUkdFTlRJTkE6TUlTSU9ORVM6RWxkb3JhZG8KKzg6QVI6QVJHOkFSR0VOVElOQTpNSVNJT05FUzpHZW5lcmFsIE1hbnVlbCBCZWxncmFubworOTpBUjpBUkc6QVJHRU5USU5BOk1JU0lPTkVTOkd1YXJhbmkKKzEwOkFSOkFSRzpBUkdFTlRJTkE6TUlTSU9ORVM6SWd1YXp1CisxMTpBUjpBUkc6QVJHRU5USU5BOk1JU0lPTkVTOkxlYW5kcm8gTi4gQWxlbQorMTI6QVI6QVJHOkFSR0VOVElOQTpNSVNJT05FUzpMaWJlcnRhZG9yIEdlbmVyYWwgU2FuIE1hCisxMzpBUjpBUkc6QVJHRU5USU5BOk1JU0lPTkVTOk1vbnRlY2FybG8KKzE0OkFSOkFSRzpBUkdFTlRJTkE6TUlTSU9ORVM6T2JlcmEKKzE1OkFSOkFSRzpBUkdFTlRJTkE6TUlTSU9ORVM6U2FuIElnbmFjaW8KKzE2OkFSOkFSRzpBUkdFTlRJTkE6TUlTSU9ORVM6U2FuIEphdmllcgorMTc6QVI6QVJHOkFSR0VOVElOQTpNSVNJT05FUzpTYW4gUGVkcm8KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9BUk0vQVJNX0FETUlOMV9MRVgudHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L0FSTS9BUk1fQURNSU4xX0xFWC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDAyOTE2MwotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9BUk0vQVJNX0FETUlOMV9MRVgudHh0CkBAIC0wLDAgKzEsMTEgQEAKKzE6QU0tQUc6QU06QVJBR0FDT1ROCisyOkFNLUFSOkFNOkFSQVJBVAorMzpBTS1BVjpBTTpBUk1BVklSCis0OkFNLUVSOkFNOkVSRVZBTiBbWUVSRVZBTl0gW0FSTUVOSUEgWCBZRVJFVkFOXQorNTpBTS1HUjpBTTpHRUFSS1VOSUsKKzY6QU0tU0g6QU06SVJBSworNzpBTS1LVDpBTTpLT1RBWUsKKzg6QU0tTE86QU06TE9ZCis5OkFNLVNVOkFNOlNZVU5JSworMTA6QU0tVFY6QU06VEFWVQorMTE6QU0tVkQ6QU06VkFZT0MgSk9SCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvQVJNL0FSTV9BRE1JTjJfTEVYLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9BUk0vQVJNX0FETUlOMl9MRVgudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg0NWViYmYKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvQVJNL0FSTV9BRE1JTjJfTEVYLnR4dApAQCAtMCwwICsxIEBACisxOkFNOkFSTTpBUk1FTklBOkFybWVuaWEgeCBZZXJldmFuOkFSTS5MMi4xCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvQVVUL0FVVF9BRE1JTjFfTEVYLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9BVVQvQVVUX0FETUlOMV9MRVgudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg2ZTJlNGUKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvQVVUL0FVVF9BRE1JTjFfTEVYLnR4dApAQCAtMCwwICsxLDkgQEAKKzE6QVQtMTA6QVQ6QlVSR0VOTEFORAorMjpBVC0yOkFUOkuEUk5URU4KKzM6QVQtMzpBVDpOSUVERVKUU1RFUlJFSUNICis0OkFULTQ6QVQ6T0JFUpRTVEVSUkVJQ0gKKzU6QVQtNTpBVDpTQUxaQlVSRworNjpBVC02OkFUOlNURUlFUk1BUksKKzc6QVQtNzpBVDpUSVJPTAorODpBVC04OkFUOlZPUkFMQkVSRworOTpBVC05OkFUOldJRU4KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9BVVQvQVVUX0FETUlOMl9MRVgudHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L0FVVC9BVVRfQURNSU4yX0xFWC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTY5ZGUyOQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9BVVQvQVVUX0FETUlOMl9MRVgudHh0CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvQVpFL0FaRV9BRE1JTjFfTEVYLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9BWkUvQVpFX0FETUlOMV9MRVgudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEyYzM1N2IKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvQVpFL0FaRV9BRE1JTjFfTEVYLnR4dApAQCAtMCwwICsxLDc5IEBACisxOkFaLUFCUzpBWjpBQkVST04KKzI6QVotQUdDOkFaOkFDQUJESQorMzpBWi1BR1M6QVo6QURBCis0OkFaLUFHTTpBWjpBREFNCis1OkFaLVNBSDpBWjpBSEJVWgorNjpBWi1TTUk6QVo6QU1BWAorNzpBWi1BR0E6QVo6QVNUQUZBCis4OkFaLUFTVDpBWjpBU1RBUkEKKzk6QVotQUdVOkFaOkFTVQorMTA6QVotQVRFOkFaOkFaRVJCQVlEWkhBTiBURVJSSVRPUgorMTE6QVotQkFCOkFaOkJBQksKKzEyOkFaLUJBOkFaOkJBSworMTM6QVotQkFMOkFaOkJBTEFLTgorMTQ6QVotQkVZOkFaOkJFWUxRQU4KKzE1OkFaLUJJTDpBWjpCSUxTVVZBUgorMTY6QVotQkFSOkFaOkJSRAorMTc6QVotQ0FCOkFaOkNCUkFZTAorMTg6QVotQ0FMOkFaOkNMSUxBQkFCCisxOTpBWi1DVUw6QVo6Q1VMRkEKKzIwOkFaLURBUzpBWjpEQUtTTgorMjE6QVotREFWOkFaOkRWQ0kKKzIyOkFaLUZVWjpBWjpG3FpVTEkKKzIzOkFaLUdBRDpBWjpHREJZCisyNDpBWi1HQTpBWjpHTkMKKzI1OkFaLUdPUjpBWjpHT1JBTkJPWQorMjY6QVotR09ZOkFaOkdZQ0FZCisyNzpBWi1IQUM6QVo6SEFDUUFCVUwKKzI4OkFaLVNBOkFaOktJCisyOTpBWi1TQTpBWjpLSQorMzA6QVotS0FMOkFaOktMQkNSCiszMTpBWi1LVVI6QVo6S9xSRE1JUgorMzI6QVotTEFDOkFaOkxBQ04KKzMzOkFaLUxFUjpBWjpMRVJJSworMzQ6QVotQUI6QVo6TEkgQkFZUkFNTAorMzU6QVotTEE6QVo6TE5LUkFOCiszNjpBWi1MQTpBWjpMTktSQU4KKzM3OkFaLU1BUzpBWjpNQVNBTEwKKzM4OkFaLUlNSTpBWjpNSUxJCiszOTpBWi1NSTpBWjpNSU5HQ0VWSVIKKzQwOkFaLVNLUjpBWjpNS0lSCis0MTpBWi1OQTpBWjpOQUZUQUxBTgorNDI6QVotTktBOkFaOk5BR09STk8gS0FSQUJBS0gKKzQzOkFaLU5BSzpBWjpOQUtISUNIRVZBTgorNDQ6QVotTkVGOkFaOk5FRlRDQUxBCis0NTpBWi1PUkQ6QVo6T1JEVUJBRAorNDY6QVotT0dVOkFaOk9VWgorNDc6QVotUUFYOkFaOlFBWAorNDg6QVotUUFaOkFaOlFBWkFYCis0OTpBWi1RQUI6QVo6UUJMCis1MDpBWi1RT0I6QVo6UU9CVVNUQU4KKzUxOkFaLVFCQTpBWjpRVUJBCis1MjpBWi1RQkk6QVo6UVVCQURMCis1MzpBWi1RVVM6QVo6UVVTQVIKKzU0OkFaLVNBUjpBWjpSVVIKKzU1OkFaLVNBVDpBWjpTQUFUTAorNTY6QVotU0FCOkFaOlNBQklSQUJBRAorNTc6QVotU0FMOkFaOlNBTFlBTgorNTg6QVotU01YOkFaOlNBTVVYCis1OTpBWi1TQUQ6QVo6U0RSSworNjA6QVotU0lZOkFaOlNJWVpOCis2MTpBWi1JU006QVo6U01BWUxMCis2MjpBWi1TTTpBWjpTVU1RQVlUCis2MzpBWi1UT1Y6QVo6VE9WVVoKKzY0OkFaLVRBUjpBWjpUUlRSCis2NTpBWi1TUzpBWjpVQQorNjY6QVotU1M6QVo6VUEKKzY3OkFaLVVDQTpBWjpVQ0FSCis2ODpBWi1YQUM6QVo6WEFDTUFaCis2OTpBWi1YQTpBWjpYQU5LTkRJCis3MDpBWi1YQU46QVo6WEFOTEFSCis3MTpBWi1YQ0k6QVo6WE9DQUwKKzcyOkFaLVhWRDpBWjpYT0NBVk5ECis3MzpBWi1YSVo6QVo6WFoKKzc0OkFaLVlBUjpBWjpZQVJETUwKKzc1OkFaLVlFOkFaOllFVkxBWAorNzY6QVotWUU6QVo6WUVWTEFYCis3NzpBWi1aQVE6QVo6WkFRQVRBTEEKKzc4OkFaLVpBTjpBWjpaTkdJTEFOCis3OTpBWi1aQVI6QVo6WlJEQUIKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9BWkUvQVpFX0FETUlOMl9MRVgudHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L0FaRS9BWkVfQURNSU4yX0xFWC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmU2MmY5OQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9BWkUvQVpFX0FETUlOMl9MRVgudHh0CkBAIC0wLDAgKzEsMTcgQEAKKzE6QVo6QVpFOkFaRVJCQUlKQU46QXplcmJheWR6aGFuIFRlcnJpdG9yOkFaRS5MMi4xMAorMjpBWjpBWkU6QVpFUkJBSUpBTjpBemVyYmF5ZHpoYW4gVGVycml0b3I6QVpFLkwyLjExCiszOkFaOkFaRTpBWkVSQkFJSkFOOkF6ZXJiYXlkemhhbiBUZXJyaXRvcjpBWkUuTDIuMTIKKzQ6QVo6QVpFOkFaRVJCQUlKQU46QXplcmJheWR6aGFuIFRlcnJpdG9yOkFaRS5MMi4xMworNTpBWjpBWkU6QVpFUkJBSUpBTjpBemVyYmF5ZHpoYW4gVGVycml0b3I6QVpFLkwyLjE0Cis2OkFaOkFaRTpBWkVSQkFJSkFOOkF6ZXJiYXlkemhhbiBUZXJyaXRvcjpBWkUuTDIuMTUKKzc6QVo6QVpFOkFaRVJCQUlKQU46QXplcmJheWR6aGFuIFRlcnJpdG9yOkFaRS5MMi4xNgorODpBWjpBWkU6QVpFUkJBSUpBTjpBemVyYmF5ZHpoYW4gVGVycml0b3I6QVpFLkwyLjIKKzk6QVo6QVpFOkFaRVJCQUlKQU46QXplcmJheWR6aGFuIFRlcnJpdG9yOkFaRS5MMi4zCisxMDpBWjpBWkU6QVpFUkJBSUpBTjpBemVyYmF5ZHpoYW4gVGVycml0b3I6QVpFLkwyLjQKKzExOkFaOkFaRTpBWkVSQkFJSkFOOkF6ZXJiYXlkemhhbiBUZXJyaXRvcjpBWkUuTDIuNQorMTI6QVo6QVpFOkFaRVJCQUlKQU46QXplcmJheWR6aGFuIFRlcnJpdG9yOkFaRS5MMi42CisxMzpBWjpBWkU6QVpFUkJBSUpBTjpBemVyYmF5ZHpoYW4gVGVycml0b3I6QVpFLkwyLjcKKzE0OkFaOkFaRTpBWkVSQkFJSkFOOkF6ZXJiYXlkemhhbiBUZXJyaXRvcjpBWkUuTDIuOAorMTU6QVo6QVpFOkFaRVJCQUlKQU46QXplcmJheWR6aGFuIFRlcnJpdG9yOkFaRS5MMi45CisxOkFaOkFaRTpBWkVSQkFJSkFOOk5ha2hpY2hldmFuOkFaRS5MMi4xNworMTpBWjpBWkU6QVpFUkJBSUpBTjpOYWdvcm5vLUthcmFiYWtoOkFaRS5MMi4xCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvQkRJL0JESV9BRE1JTjFfTEVYLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9CREkvQkRJX0FETUlOMV9MRVgudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk2MjA0ZTQKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvQkRJL0JESV9BRE1JTjFfTEVYLnR4dApAQCAtMCwwICsxLDE2IEBACisxOkJJLUJCOkJJOkJVQkFOWkEKKzI6QkktQko6Qkk6QlVKVU1CVVJBCiszOkJJLUJSOkJJOkJVUlVSSQorNDpCSS1DQTpCSTpDQU5LVVpPCis1OkJJLUNJOkJJOkNJQklUT0tFCis2OkJJLUdJOkJJOkdJVEVHQQorNzpCSS1LUjpCSTpLQVJVWkkKKzg6QkktS1k6Qkk6S0FZQU5aQQorOTpCSS1LSTpCSTpLSVJVTkRPCisxMDpCSS1NQTpCSTpNQUtBTUJBCisxMTpCSS1NVTpCSTpNVVJBTVZJWUEKKzEyOkJJLU1ZOkJJOk1VWUlOR0EKKzEzOkJJLU1XOkJJOk1XQVJPCisxNDpCSS1ORzpCSTpOR09aSQorMTU6QkktUlQ6Qkk6UlVUQU5BCisxNjpCSS1SWTpCSTpSVVlJR0kKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9CREkvQkRJX0FETUlOMl9MRVgudHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L0JESS9CRElfQURNSU4yX0xFWC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWFiZTU4ZgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9CREkvQkRJX0FETUlOMl9MRVgudHh0CkBAIC0wLDAgKzEsMTE0IEBACisxOkJJOkJESTpCVVJVTkRJOkNpYml0b2tlOkJ1Z2FuZGEKKzI6Qkk6QkRJOkJVUlVOREk6Q2liaXRva2U6QnVraW5hbnZhbmEKKzM6Qkk6QkRJOkJVUlVOREk6Q2liaXRva2U6TWFiYXkKKzQ6Qkk6QkRJOkJVUlVOREk6Q2liaXRva2U6TXVnaW5hCis1OkJJOkJESTpCVVJVTkRJOkNpYml0b2tlOk11cndpCis2OkJJOkJESTpCVVJVTkRJOkNpYml0b2tlOlJ1Z29tYm8KKzE6Qkk6QkRJOkJVUlVOREk6TXVyYW12aXlhOkJpc29ybworMjpCSTpCREk6QlVSVU5ESTpNdXJhbXZpeWE6QnVrZXllCiszOkJJOkJESTpCVVJVTkRJOk11cmFtdml5YTpHaXNvemkKKzQ6Qkk6QkRJOkJVUlVOREk6TXVyYW12aXlhOktheW9rd2UKKzU6Qkk6QkRJOkJVUlVOREk6TXVyYW12aXlhOktpZ2FuZGEKKzY6Qkk6QkRJOkJVUlVOREk6TXVyYW12aXlhOk1idXllCis3OkJJOkJESTpCVVJVTkRJOk11cmFtdml5YTpNdXJhbXZpeWEKKzg6Qkk6QkRJOkJVUlVOREk6TXVyYW12aXlhOk5kYXZhCis5OkJJOkJESTpCVVJVTkRJOk11cmFtdml5YTpOeWFiaWdpbmEKKzEwOkJJOkJESTpCVVJVTkRJOk11cmFtdml5YTpSdXNha2EKKzExOkJJOkJESTpCVVJVTkRJOk11cmFtdml5YTpSdXRlZ2FtYQorMTpCSTpCREk6QlVSVU5ESTpLYXlhbnphOkJ1dGFnYW56d2FsCisyOkJJOkJESTpCVVJVTkRJOktheWFuemE6R2Fob21ibworMzpCSTpCREk6QlVSVU5ESTpLYXlhbnphOkdhdGFyYQorNDpCSTpCREk6QlVSVU5ESTpLYXlhbnphOkthYmFyb3JlCis1OkJJOkJESTpCVVJVTkRJOktheWFuemE6S2F5YW56YQorNjpCSTpCREk6QlVSVU5ESTpLYXlhbnphOk1hdG9uZ28KKzc6Qkk6QkRJOkJVUlVOREk6S2F5YW56YTpNdWhhbmdhCis4OkJJOkJESTpCVVJVTkRJOktheWFuemE6TXVydXRhCis5OkJJOkJESTpCVVJVTkRJOktheWFuemE6UmFuZ28KKzE6Qkk6QkRJOkJVUlVOREk6Q2Fua3V6bzpDYW5rdXpvCisyOkJJOkJESTpCVVJVTkRJOkNhbmt1em86Q2VuZGFqdXJ1CiszOkJJOkJESTpCVVJVTkRJOkNhbmt1em86R2lzYWdhcmEKKzQ6Qkk6QkRJOkJVUlVOREk6Q2Fua3V6bzpLaWdhbWJhCis1OkJJOkJESTpCVVJVTkRJOkNhbmt1em86TXVzaGloYQorMTpCSTpCREk6QlVSVU5ESTpLYXJ1emk6QnVnZW55dXppCisyOkJJOkJESTpCVVJVTkRJOkthcnV6aTpCdWhpZ2EKKzM6Qkk6QkRJOkJVUlVOREk6S2FydXppOkdpaG9nYXppCis0OkJJOkJESTpCVVJVTkRJOkthcnV6aTpHaXRhcmFtdWthCis1OkJJOkJESTpCVVJVTkRJOkthcnV6aTpNdXR1bWJhCis2OkJJOkJESTpCVVJVTkRJOkthcnV6aTpOeWFiaWtlcmUKKzc6Qkk6QkRJOkJVUlVOREk6S2FydXppOlNob21ibworMTpCSTpCREk6QlVSVU5ESTpNYWthbWJhOktheW9nb3JvCisyOkJJOkJESTpCVVJVTkRJOk1ha2FtYmE6S2liYWdvCiszOkJJOkJESTpCVVJVTkRJOk1ha2FtYmE6TWFiYW5kYQorNDpCSTpCREk6QlVSVU5ESTpNYWthbWJhOk1ha2FtYmEKKzU6Qkk6QkRJOkJVUlVOREk6TWFrYW1iYTpOeWFuemEgTGFjCis2OkJJOkJESTpCVVJVTkRJOk1ha2FtYmE6VnVnaXpvCisxOkJJOkJESTpCVVJVTkRJOk5nb3ppOkJ1c2lnYQorMjpCSTpCREk6QlVSVU5ESTpOZ296aTpHYXNoaWthbndhCiszOkJJOkJESTpCVVJVTkRJOk5nb3ppOktpcmVtYmEKKzQ6Qkk6QkRJOkJVUlVOREk6Tmdvemk6TWFyYW5nYXJhCis1OkJJOkJESTpCVVJVTkRJOk5nb3ppOk13dW1iYQorNjpCSTpCREk6QlVSVU5ESTpOZ296aTpOZ296aQorNzpCSTpCREk6QlVSVU5ESTpOZ296aTpOdmFtdXJlbnphCis4OkJJOkJESTpCVVJVTkRJOk5nb3ppOlJ1aG9yb3JvCis5OkJJOkJESTpCVVJVTkRJOk5nb3ppOlRhbmdhcmEKKzE6Qkk6QkRJOkJVUlVOREk6QnVydXJpOkJ1cmFtYmkKKzI6Qkk6QkRJOkJVUlVOREk6QnVydXJpOkJ1cnVyaQorMzpCSTpCREk6QlVSVU5ESTpCdXJ1cmk6QnV5ZW5nZXJvCis0OkJJOkJESTpCVVJVTkRJOkJ1cnVyaTpNYXRhbmEKKzU6Qkk6QkRJOkJVUlVOREk6QnVydXJpOk11Z2FtYmEKKzY6Qkk6QkRJOkJVUlVOREk6QnVydXJpOlJ1bW9uZ2UKKzc6Qkk6QkRJOkJVUlVOREk6QnVydXJpOlJ1dG92dQorODpCSTpCREk6QlVSVU5ESTpCdXJ1cmk6U29uZ2EKKzk6Qkk6QkRJOkJVUlVOREk6QnVydXJpOlZ5YW5kYQorMTpCSTpCREk6QlVSVU5ESTpNdXlpbmdhOkJ1aGludnV6YQorMjpCSTpCREk6QlVSVU5ESTpNdXlpbmdhOkJ1dGloaW5kYQorMzpCSTpCREk6QlVSVU5ESTpNdXlpbmdhOkdhc2hvaG8KKzQ6Qkk6QkRJOkJVUlVOREk6TXV5aW5nYTpHYXNvcndlCis1OkJJOkJESTpCVVJVTkRJOk11eWluZ2E6R2l0ZXJhbnlpCis2OkJJOkJESTpCVVJVTkRJOk11eWluZ2E6TXV5aW5nYQorNzpCSTpCREk6QlVSVU5ESTpNdXlpbmdhOk13YWtpcm8KKzE6Qkk6QkRJOkJVUlVOREk6R2l0ZWdhOkJ1Z2VuZGFuYQorMjpCSTpCREk6QlVSVU5ESTpHaXRlZ2E6QnVraXJhc2F6aQorMzpCSTpCREk6QlVSVU5ESTpHaXRlZ2E6QnVyYXphCis0OkJJOkJESTpCVVJVTkRJOkdpdGVnYTpHaWhldGEKKzU6Qkk6QkRJOkJVUlVOREk6R2l0ZWdhOkdpc2h1YmkKKzY6Qkk6QkRJOkJVUlVOREk6R2l0ZWdhOkdpdGVnYQorNzpCSTpCREk6QlVSVU5ESTpHaXRlZ2E6SXRhYmEKKzg6Qkk6QkRJOkJVUlVOREk6R2l0ZWdhOk1ha2VidWtvCis5OkJJOkJESTpCVVJVTkRJOkdpdGVnYTpNdXRhaG8KKzEwOkJJOkJESTpCVVJVTkRJOkdpdGVnYTpSeWFuc29ybworMTpCSTpCREk6QlVSVU5ESTpCdWp1bWJ1cmE6SXNhbGUtTXVnYXJ1cm8KKzI6Qkk6QkRJOkJVUlVOREk6QnVqdW1idXJhOkthYmV6aQorMzpCSTpCREk6QlVSVU5ESTpCdWp1bWJ1cmE6S2FueW9zaGEKKzQ6Qkk6QkRJOkJVUlVOREk6QnVqdW1idXJhOk11YmltYmkKKzU6Qkk6QkRJOkJVUlVOREk6QnVqdW1idXJhOk11Z29uZ29tYW5nYQorNjpCSTpCREk6QlVSVU5ESTpCdWp1bWJ1cmE6TXVodXRhCis3OkJJOkJESTpCVVJVTkRJOkJ1anVtYnVyYTpNdWtpa2UKKzg6Qkk6QkRJOkJVUlVOREk6QnVqdW1idXJhOk11dGFtYnUKKzk6Qkk6QkRJOkJVUlVOREk6QnVqdW1idXJhOk11dGltYnV6aQorMTA6Qkk6QkRJOkJVUlVOREk6QnVqdW1idXJhOk55YWJpZ2luYSAoQnVqKQorMTpCSTpCREk6QlVSVU5ESTpLaXJ1bmRvOkJ1Z2FiaXJhCisyOkJJOkJESTpCVVJVTkRJOktpcnVuZG86QnVzb25pCiszOkJJOkJESTpCVVJVTkRJOktpcnVuZG86QndhbWJhcmFuZ3dlCis0OkJJOkJESTpCVVJVTkRJOktpcnVuZG86R2l0b2JlCis1OkJJOkJESTpCVVJVTkRJOktpcnVuZG86S2lydW5kbworNjpCSTpCREk6QlVSVU5ESTpLaXJ1bmRvOk50ZWdhCis3OkJJOkJESTpCVVJVTkRJOktpcnVuZG86VnVtYmktQnVrdWJhCisxOkJJOkJESTpCVVJVTkRJOlJ1eWlnaTpCdXRhZ2FuendhMgorMjpCSTpCREk6QlVSVU5ESTpSdXlpZ2k6QnV0ZXppCiszOkJJOkJESTpCVVJVTkRJOlJ1eWlnaTpCd2VydQorNDpCSTpCREk6QlVSVU5ESTpSdXlpZ2k6R2lzdXJ1Cis1OkJJOkJESTpCVVJVTkRJOlJ1eWlnaTpLaW55aW55YQorNjpCSTpCREk6QlVSVU5ESTpSdXlpZ2k6TnlhYml0c2luZGEKKzc6Qkk6QkRJOkJVUlVOREk6UnV5aWdpOlJ1eWlnaQorMTpCSTpCREk6QlVSVU5ESTpSdXRhbmE6QnVrZW1iYQorMjpCSTpCREk6QlVSVU5ESTpSdXRhbmE6R2loYXJvCiszOkJJOkJESTpCVVJVTkRJOlJ1dGFuYTpHaXRhbmdhCis0OkJJOkJESTpCVVJVTkRJOlJ1dGFuYTpNcGluZ2EtS2F5b3ZlCis1OkJJOkJESTpCVVJVTkRJOlJ1dGFuYTpNdXNvbmdhdGkKKzY6Qkk6QkRJOkJVUlVOREk6UnV0YW5hOlJ1dGFuYQorMTpCSTpCREk6QlVSVU5ESTpCdWJhbnphOkJ1YmFuemEKKzI6Qkk6QkRJOkJVUlVOREk6QnViYW56YTpHaWhhbmdhCiszOkJJOkJESTpCVVJVTkRJOkJ1YmFuemE6TXBhbmRhCis0OkJJOkJESTpCVVJVTkRJOkJ1YmFuemE6TXVzaWdhdGkKKzU6Qkk6QkRJOkJVUlVOREk6QnViYW56YTpSdWdhemkKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9CRUwvQkVMX0FETUlOMV9MRVgudHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L0JFTC9CRUxfQURNSU4xX0xFWC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjU4NjgwZAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9CRUwvQkVMX0FETUlOMV9MRVgudHh0CkBAIC0wLDAgKzEsMTIgQEAKKzE6QkUtVkFOOkJFOkFOVFdFUlBFTgorMjpCRS1XQlI6QkU6QlJBQkFOVCBXQUxMT04KKzM6QkUtQlJYOkJFOkJSVVhFTExFUyBCUlVTU0VMCis0OkJFLVdIVDpCRTpIQUlOQVVUCis1OkJFLVdMRzpCRTpMSUVHRQorNjpCRS1WTEk6QkU6TElNQlVSRworNzpCRS1XTFg6QkU6TFVYRU1CT1VSRworODpCRS1XTkE6QkU6TkFNVVIKKzk6QkUtTlZMOkJFOk5JVkVMTEVTCisxMDpCRS1WT1Y6QkU6T09TVCBWTEFBTkRFUkVOCisxMTpCRS1WQlI6QkU6VkxBQU1TIEJSQUJBTlQKKzEyOkJFLVZXVjpCRTpXRVNUIFZMQUFOREVSRU4KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9CRUwvQkVMX0FETUlOMl9MRVgudHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L0JFTC9CRUxfQURNSU4yX0xFWC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTY5ZGUyOQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9CRUwvQkVMX0FETUlOMl9MRVgudHh0CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvQkVOL0JFTl9BRE1JTjFfTEVYLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9CRU4vQkVOX0FETUlOMV9MRVgudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQxZTcxODgKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvQkVOL0JFTl9BRE1JTjFfTEVYLnR4dApAQCAtMCwwICsxLDEyIEBACisxOkJKLUFMOkJKOkFMSUJPUkkKKzI6QkotQUs6Qko6QVRBS09SQQorMzpCSi1BUTpCSjpBVExBTlRJUVVFCis0OkJKLUJPOkJKOkJPUkdPVQorNTpCSi1DTzpCSjpDT0xMSU5FUworNjpCSi1ETzpCSjpET05HQQorNzpCSi1LTzpCSjpLT1VGRk8KKzg6QkotTEk6Qko6TElUVE9SQUwKKzk6QkotTU86Qko6TU9OTworMTA6QkotT1U6Qko6T1VFTUUKKzExOkJKLVBMOkJKOlBMQVRFQVUKKzEyOkJKLVpPOkJKOlpPVQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L0JFTi9CRU5fQURNSU4yX0xFWC50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvQkVOL0JFTl9BRE1JTjJfTEVYLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMTMyMGMyCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L0JFTi9CRU5fQURNSU4yX0xFWC50eHQKQEAgLTAsMCArMSw3NyBAQAorMTpCSjpCRU46QkVOSU46TW9ubzpBcGxhaG91ZQorMjpCSjpCRU46QkVOSU46TW9ubzpBdGhpZW1lCiszOkJKOkJFTjpCRU5JTjpNb25vOkJvcGEKKzQ6Qko6QkVOOkJFTklOOk1vbm86Q29tZQorNTpCSjpCRU46QkVOSU46TW9ubzpEamFrb3RvbWUKKzY6Qko6QkVOOkJFTklOOk1vbm86RG9nYm8tVG90YQorNzpCSjpCRU46QkVOSU46TW9ubzpHcmFuZC1Qb3BvCis4OkJKOkJFTjpCRU5JTjpNb25vOkhvdWV5b2diZQorOTpCSjpCRU46QkVOSU46TW9ubzpLbG91ZWthbm1lCisxMDpCSjpCRU46QkVOSU46TW9ubzpMYWxvCisxMTpCSjpCRU46QkVOSU46TW9ubzpUb3Zpa2xpbgorMTpCSjpCRU46QkVOSU46QXRsYW50aXF1ZTpBYm9tZXktQ2FsYXZpCisyOkJKOkJFTjpCRU5JTjpBdGxhbnRpcXVlOkFsbGFkYQorMzpCSjpCRU46QkVOSU46QXRsYW50aXF1ZTpDb3Rvbm91Cis0OkJKOkJFTjpCRU5JTjpBdGxhbnRpcXVlOktwb21hc3NlCis1OkJKOkJFTjpCRU5JTjpBdGxhbnRpcXVlOk91aWRhaAorNjpCSjpCRU46QkVOSU46QXRsYW50aXF1ZTpTby1BdmEKKzc6Qko6QkVOOkJFTklOOkF0bGFudGlxdWU6VG9mZm8KKzg6Qko6QkVOOkJFTklOOkF0bGFudGlxdWU6VG9yaS1Cb3NzaXRvCis5OkJKOkJFTjpCRU5JTjpBdGxhbnRpcXVlOlplCisxOkJKOkJFTjpCRU5JTjpPdWVtZTpBZGphcnJhCisyOkJKOkJFTjpCRU5JTjpPdWVtZTpBZGpvaG91bgorMzpCSjpCRU46QkVOSU46T3VlbWU6QWd1ZWd1ZQorNDpCSjpCRU46QkVOSU46T3VlbWU6QWtwcm8tTWlzc2VyZXRlCis1OkJKOkJFTjpCRU5JTjpPdWVtZTpBdnJhbmtvdQorNjpCSjpCRU46QkVOSU46T3VlbWU6Qm9ub3UKKzc6Qko6QkVOOkJFTklOOk91ZW1lOkRhbmdibworODpCSjpCRU46QkVOSU46T3VlbWU6SWZhbmduaQorOTpCSjpCRU46QkVOSU46T3VlbWU6SWtwaW5sZSAoQWRqYS1PdWVyZSkKKzEwOkJKOkJFTjpCRU5JTjpPdWVtZTpLZXRvdQorMTE6Qko6QkVOOkJFTklOOk91ZW1lOlBvYmUKKzEyOkJKOkJFTjpCRU5JTjpPdWVtZTpQb3J0byBOb3ZvCisxMzpCSjpCRU46QkVOSU46T3VlbWU6U2FrZXRlCisxNDpCSjpCRU46QkVOSU46T3VlbWU6U2VtZS1LcG9kamkKKzE6Qko6QkVOOkJFTklOOkJvcmdvdTpCYW5pa29hcmEKKzI6Qko6QkVOOkJFTklOOkJvcmdvdTpCZW1iZXJla2UKKzM6Qko6QkVOOkJFTklOOkJvcmdvdTpHb2dvdW5vdQorNDpCSjpCRU46QkVOSU46Qm9yZ291OkthbGFsZQorNTpCSjpCRU46QkVOSU46Qm9yZ291OkthbmRpCis2OkJKOkJFTjpCRU5JTjpCb3Jnb3U6S2FyaW1hbWEKKzc6Qko6QkVOOkJFTklOOkJvcmdvdTpNYWxhbnZpbGxlCis4OkJKOkJFTjpCRU5JTjpCb3Jnb3U6TmRhbGkKKzk6Qko6QkVOOkJFTklOOkJvcmdvdTpOaWtraQorMTA6Qko6QkVOOkJFTklOOkJvcmdvdTpQYXJha291CisxMTpCSjpCRU46QkVOSU46Qm9yZ291OlBlcmVyZQorMTI6Qko6QkVOOkJFTklOOkJvcmdvdTpTZWdiYW5hCisxMzpCSjpCRU46QkVOSU46Qm9yZ291OlNpbmVuZGUKKzE0OkJKOkJFTjpCRU5JTjpCb3Jnb3U6VGNoYW91cm91CisxOkJKOkJFTjpCRU5JTjpab3U6QWJvbWV5CisyOkJKOkJFTjpCRU5JTjpab3U6QWdiYW5nbml6b3VuCiszOkJKOkJFTjpCRU5JTjpab3U6QmFudGUKKzQ6Qko6QkVOOkJFTklOOlpvdTpCb2hpY29uCis1OkJKOkJFTjpCRU5JTjpab3U6Q292ZQorNjpCSjpCRU46QkVOSU46Wm91OkRhc3NhCis3OkJKOkJFTjpCRU5JTjpab3U6RGppZGphCis4OkJKOkJFTjpCRU5JTjpab3U6R2xhem91ZQorOTpCSjpCRU46QkVOSU46Wm91Ok91ZXNzZQorMTA6Qko6QkVOOkJFTklOOlpvdTpPdWluaGkKKzExOkJKOkJFTjpCRU5JTjpab3U6U2F2YWxvdQorMTI6Qko6QkVOOkJFTklOOlpvdTpTYXZlCisxMzpCSjpCRU46QkVOSU46Wm91OlphIEtwb3RhCisxNDpCSjpCRU46QkVOSU46Wm91OlphbmduYW5hZG8KKzE1OkJKOkJFTjpCRU5JTjpab3U6Wm9nYm9kb21lCisxOkJKOkJFTjpCRU5JTjpBdGFrb3JhOkJhc3NpbGEKKzI6Qko6QkVOOkJFTklOOkF0YWtvcmE6Qm91a291bWJlCiszOkJKOkJFTjpCRU5JTjpBdGFrb3JhOkNvYmxpCis0OkJKOkJFTjpCRU5JTjpBdGFrb3JhOkNvcGFyZ28KKzU6Qko6QkVOOkJFTklOOkF0YWtvcmE6RGpvdWdvdSBSdXJhbAorNjpCSjpCRU46QkVOSU46QXRha29yYTpEam91Z291IFVyYmFuCis3OkJKOkJFTjpCRU5JTjpBdGFrb3JhOktlcm91Cis4OkJKOkJFTjpCRU5JTjpBdGFrb3JhOktvdWFuZGUKKzk6Qko6QkVOOkJFTklOOkF0YWtvcmE6TWF0ZXJpCisxMDpCSjpCRU46QkVOSU46QXRha29yYTpOYXRpbmdvdQorMTE6Qko6QkVOOkJFTklOOkF0YWtvcmE6T3Vha2UKKzEyOkJKOkJFTjpCRU5JTjpBdGFrb3JhOlBlaG9ua28KKzEzOkJKOkJFTjpCRU5JTjpBdGFrb3JhOlRhbmd1aWV0YQorMTQ6Qko6QkVOOkJFTklOOkF0YWtvcmE6VGNob3Vrb3V0b3VuYQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L0JGQS9CRkFfQURNSU4xX0xFWC50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvQkZBL0JGQV9BRE1JTjFfTEVYLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NGQwYWE5Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L0JGQS9CRkFfQURNSU4xX0xFWC50eHQKQEAgLTAsMCArMSw0NSBAQAorMTpCRi1CQUw6QkY6QkFMRQorMjpCRi1CQU06QkY6QkFNCiszOkJGLUJBTjpCRjpCQU5XQQorNDpCRi1CQVo6QkY6QkFaRUdBCis1OkJGLUJHUjpCRjpCT1VHT1VSSUJBCis2OkJGLUJMRzpCRjpCT1VMR09VCis3OkJGLUJMSzpCRjpCT1VMS0lFTURFCis4OkJGLUNPTTpCRjpDT01PRQorOTpCRi1HQU46QkY6R0FOWk9VUkdPVQorMTA6QkYtR05BOkJGOkdOQUdOQQorMTE6QkYtR09VOkJGOkdPVVJNQQorMTI6QkYtSE9VOkJGOkhPVUVUCisxMzpCRi1JT0I6QkY6SU9CQQorMTQ6QkYtS0FEOkJGOktBRElPR08KKzE1OkJGLUtFTjpCRjpLRU5FRE9VR09VCisxNjpCRi1LTUQ6QkY6S09NT05ESkFSSQorMTc6QkYtS01QOkJGOktPTVBJRU5HQQorMTg6QkYtS09TOkJGOktPU1NJCisxOTpCRi1LT1A6QkY6S09VTFBFTE9HTworMjA6QkYtS09UOkJGOktPVVJJVEVOR0EKKzIxOkJGLUtPVzpCRjpLT1VSV0VPR08KKzIyOkJGLUxFUjpCRjpMRVJBQkEKKzIzOkJGLUxPUjpCRjpMT1JPVU0KKzI0OkJGLU1PVTpCRjpNT1VIT1VOIFtNT1UgSE9VTl0KKzI1OkJGLU5BTzpCRjpOQUhPVVJJCisyNjpCRi1OQU06QkY6TkFNRU5URU5HQQorMjc6QkYtTkFZOkJGOk5BWUFMQQorMjg6QkYtTk9VOkJGOk5PVU1CSUVMCisyOTpCRi1PVUI6QkY6T1VCUklURU5HQQorMzA6QkYtT1VEOkJGOk9VREFMQU4KKzMxOkJGLVBBUzpCRjpQQVNTT1JFCiszMjpCRi1QT046QkY6UE9OSQorMzM6QkYtU05HOkJGOlNBTkdVSUUKKzM0OkJGLVNNVDpCRjpTQU5NQVRFTkdBCiszNTpCRi1TRU46QkY6U0VOTworMzY6QkYtU0lTOkJGOlNJU1NJTEkKKzM3OkJGLVNPTTpCRjpTT1VNCiszODpCRi1TT1I6QkY6U09VUk9VCiszOTpCRi1UQVA6QkY6VEFQT0EKKzQwOkJGLVRVSTpCRjpUVUkKKzQxOkJGLVlBRzpCRjpZQUdIQQorNDI6QkYtWUFUOkJGOllBVEVOR0EKKzQzOkJGLVpJUjpCRjpaSVJPCis0NDpCRi1aT046QkY6Wk9ORE9NQQorNDU6QkYtWk9VOkJGOlpPVU5EV0VPR08KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9CRkEvQkZBX0FETUlOMl9MRVgudHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L0JGQS9CRkFfQURNSU4yX0xFWC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDA4MDM3NQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9CRkEvQkZBX0FETUlOMl9MRVgudHh0CkBAIC0wLDAgKzEsMzAxIEBACisxOkJGOkJGQTpCVVJLSU5BOk1vdSBIb3VuOkJhZ2Fzc2kKKzI6QkY6QkZBOkJVUktJTkE6TW91IEhvdW46QmFuYQorMzpCRjpCRkE6QlVSS0lOQTpNb3UgSG91bjpCb25kb2t1aQorNDpCRjpCRkE6QlVSS0lOQTpNb3UgSG91bjpCb3JvbW8KKzU6QkY6QkZBOkJVUktJTkE6TW91IEhvdW46RGVkb3Vnb3UKKzY6QkY6QkZBOkJVUktJTkE6TW91IEhvdW46S29uYQorNzpCRjpCRkE6QlVSS0lOQTpNb3UgSG91bjpPdWFya295ZQorODpCRjpCRkE6QlVSS0lOQTpNb3UgSG91bjpPdXJ5Cis5OkJGOkJGQTpCVVJLSU5BOk1vdSBIb3VuOlBhCisxMDpCRjpCRkE6QlVSS0lOQTpNb3UgSG91bjpQb3VyYQorMTE6QkY6QkZBOkJVUktJTkE6TW91IEhvdW46U2FmYW5lCisxMjpCRjpCRkE6QlVSS0lOQTpNb3UgSG91bjpUY2hlcmliYQorMTM6QkY6QkZBOkJVUktJTkE6TW91IEhvdW46WWFobworMTpCRjpCRkE6QlVSS0lOQTpPdWRhbGFuOkRlb3UKKzI6QkY6QkZBOkJVUktJTkE6T3VkYWxhbjpHb3JvbS1Hb3JvbQorMzpCRjpCRkE6QlVSS0lOQTpPdWRhbGFuOk1hcmtveWUKKzQ6QkY6QkZBOkJVUktJTkE6T3VkYWxhbjpPdXJzaQorNTpCRjpCRkE6QlVSS0lOQTpPdWRhbGFuOlRpbi1Ba29mCisxOkJGOkJGQTpCVVJLSU5BOktlbmVkb3Vnb3U6RGppZ291ZXJhCisyOkJGOkJGQTpCVVJLSU5BOktlbmVkb3Vnb3U6S29sb2tvCiszOkJGOkJGQTpCVVJLSU5BOktlbmVkb3Vnb3U6S291cm91bWEKKzQ6QkY6QkZBOkJVUktJTkE6S2VuZWRvdWdvdTpNb3JvbGFiYQorNTpCRjpCRkE6QlVSS0lOQTpLZW5lZG91Z291Ok4nZG9yb2xhCis2OkJGOkJGQTpCVVJLSU5BOktlbmVkb3Vnb3U6T3JvZGFyYQorNzpCRjpCRkE6QlVSS0lOQTpLZW5lZG91Z291Ok91ZWxlbmkKKzg6QkY6QkZBOkJVUktJTkE6S2VuZWRvdWdvdTpTYW1vZ2hvaGlyaQorOTpCRjpCRkE6QlVSS0lOQTpLZW5lZG91Z291OlNhbW9yb2dvdWFuCisxMDpCRjpCRkE6QlVSS0lOQTpLZW5lZG91Z291OlNpbmRvdQorMTpCRjpCRkE6QlVSS0lOQTpTYW5ndWllOkRhc3NhCisyOkJGOkJGQTpCVVJLSU5BOlNhbmd1aWU6RGlkeXIKKzM6QkY6QkZBOkJVUktJTkE6U2FuZ3VpZTpHb2R5cgorNDpCRjpCRkE6QlVSS0lOQTpTYW5ndWllOktoeW9uCis1OkJGOkJGQTpCVVJLSU5BOlNhbmd1aWU6S29yZGllCis2OkJGOkJGQTpCVVJLSU5BOlNhbmd1aWU6UG91bmkKKzc6QkY6QkZBOkJVUktJTkE6U2FuZ3VpZTpSZW8KKzg6QkY6QkZBOkJVUktJTkE6U2FuZ3VpZTpUZW5hZG8KKzk6QkY6QkZBOkJVUktJTkE6U2FuZ3VpZTpaYXdhcmEKKzE6QkY6QkZBOkJVUktJTkE6VGFwb2E6Qm90b3UKKzI6QkY6QkZBOkJVUktJTkE6VGFwb2E6RGlhcGFnYQorMzpCRjpCRkE6QlVSS0lOQTpUYXBvYTpLYW50Y2hhcmkKKzQ6QkY6QkZBOkJVUktJTkE6VGFwb2E6TG9nb2JvdQorNTpCRjpCRkE6QlVSS0lOQTpUYXBvYTpOYW1vdW5vdQorNjpCRjpCRkE6QlVSS0lOQTpUYXBvYTpQYXJ0aWFnYQorNzpCRjpCRkE6QlVSS0lOQTpUYXBvYTpUYW1iYWdhCis4OkJGOkJGQTpCVVJLSU5BOlRhcG9hOlRhbnNhcmdhCisxOkJGOkJGQTpCVVJLSU5BOkhvdWV0OkJhZGVtYQorMjpCRjpCRkE6QlVSS0lOQTpIb3VldDpCYW1hCiszOkJGOkJGQTpCVVJLSU5BOkhvdWV0OkJla3V5Cis0OkJGOkJGQTpCVVJLSU5BOkhvdWV0OkJlcmViYQorNTpCRjpCRkE6QlVSS0lOQTpIb3VldDpCb2JvLURpb3VsYXNzbworNjpCRjpCRkE6QlVSS0lOQTpIb3VldDpGbworNzpCRjpCRkE6QlVSS0lOQTpIb3VldDpIb3VuZGUKKzg6QkY6QkZBOkJVUktJTkE6SG91ZXQ6S2FyYW5rYXNzby1WaWd1ZQorOTpCRjpCRkE6QlVSS0lOQTpIb3VldDpLb3VtYmlhCisxMDpCRjpCRkE6QlVSS0lOQTpIb3VldDpLb3VyaWdub24KKzExOkJGOkJGQTpCVVJLSU5BOkhvdWV0OkxlbmEKKzEyOkJGOkJGQTpCVVJLSU5BOkhvdWV0OlBlbmkKKzEzOkJGOkJGQTpCVVJLSU5BOkhvdWV0OlNhdGlyaQorMTQ6QkY6QkZBOkJVUktJTkE6SG91ZXQ6VG91c3NpYW5hCisxOkJGOkJGQTpCVVJLSU5BOkduYWduYTpCaWxhbmdhCisyOkJGOkJGQTpCVVJLSU5BOkduYWduYTpCb2dhbmRlCiszOkJGOkJGQTpCVVJLSU5BOkduYWduYTpLb2FsbGEKKzQ6QkY6QkZBOkJVUktJTkE6R25hZ25hOkxpcHRvdWdvdQorNTpCRjpCRkE6QlVSS0lOQTpHbmFnbmE6TWFubmkKKzY6QkY6QkZBOkJVUktJTkE6R25hZ25hOlBpZWxhCis3OkJGOkJGQTpCVVJLSU5BOkduYWduYTpUaGlvbgorMTpCRjpCRkE6QlVSS0lOQTpCYXplZ2E6RG91bG91Z291CisyOkJGOkJGQTpCVVJLSU5BOkJhemVnYTpJcGVsY2UKKzM6QkY6QkZBOkJVUktJTkE6QmF6ZWdhOktheWFvCis0OkJGOkJGQTpCVVJLSU5BOkJhemVnYTpLb21iaXNzaXJpCis1OkJGOkJGQTpCVVJLSU5BOkJhemVnYTpLb21zaWxnYQorNjpCRjpCRkE6QlVSS0lOQTpCYXplZ2E6S29ua2ktSXBhbGEKKzc6QkY6QkZBOkJVUktJTkE6QmF6ZWdhOktvdWJyaQorODpCRjpCRkE6QlVSS0lOQTpCYXplZ2E6U2Fwb25lCis5OkJGOkJGQTpCVVJLSU5BOkJhemVnYTpUYW5naGluLURhc3NvdXJpCisxMDpCRjpCRkE6QlVSS0lOQTpCYXplZ2E6VG9lY2UKKzE6QkY6QkZBOkJVUktJTkE6QmFtOkJvdXJ6YW5nYQorMjpCRjpCRkE6QlVSS0lOQTpCYW06R3VpYmFyZQorMzpCRjpCRkE6QlVSS0lOQTpCYW06S29uZ291c3NpCis0OkJGOkJGQTpCVVJLSU5BOkJhbTpSb2xsbworNTpCRjpCRkE6QlVSS0lOQTpCYW06U2FiY2UKKzY6QkY6QkZBOkJVUktJTkE6QmFtOlRpa2FyZQorMTpCRjpCRkE6QlVSS0lOQTpQb25pOkJhdGllCisyOkJGOkJGQTpCVVJLSU5BOlBvbmk6Qm91cm91bS1Cb3Vyb3VtCiszOkJGOkJGQTpCVVJLSU5BOlBvbmk6RGppZ291ZQorNDpCRjpCRkE6QlVSS0lOQTpQb25pOkdhb3VhCis1OkJGOkJGQTpCVVJLSU5BOlBvbmk6R2JvbWJsb3JhCis2OkJGOkJGQTpCVVJLSU5BOlBvbmk6S2FtcHRpCis3OkJGOkJGQTpCVVJLSU5BOlBvbmk6S3B1ZXJlCis4OkJGOkJGQTpCVVJLSU5BOlBvbmk6TGVnbW9pbgorOTpCRjpCRkE6QlVSS0lOQTpQb25pOk1hbGJhCisxMDpCRjpCRkE6QlVSS0lOQTpQb25pOk1pZGViZG8KKzExOkJGOkJGQTpCVVJLSU5BOlBvbmk6TmFrbworMTI6QkY6QkZBOkJVUktJTkE6UG9uaTpQZXJpZ2JhbgorMTpCRjpCRkE6QlVSS0lOQTpTZW5vOkJhbmkKKzI6QkY6QkZBOkJVUktJTkE6U2VubzpEb3JpCiszOkJGOkJGQTpCVVJLSU5BOlNlbm86RmFsYWdvdW50b3UKKzQ6QkY6QkZBOkJVUktJTkE6U2VubzpHb3JnYWRqaQorNTpCRjpCRkE6QlVSS0lOQTpTZW5vOlNhbXBlbGdhCis2OkJGOkJGQTpCVVJLSU5BOlNlbm86U2ViYmEKKzc6QkY6QkZBOkJVUktJTkE6U2VubzpTZXl0ZW5nYQorMTpCRjpCRkE6QlVSS0lOQTpDb21vZTpCYW5mb3JhCisyOkJGOkJGQTpCVVJLSU5BOkNvbW9lOkJlcmVnYWRvdWdvdQorMzpCRjpCRkE6QlVSS0lOQTpDb21vZTpEYWtvcm8KKzQ6QkY6QkZBOkJVUktJTkE6Q29tb2U6RG91bmEKKzU6QkY6QkZBOkJVUktJTkE6Q29tb2U6S2Fua2FsYWJhCis2OkJGOkJGQTpCVVJLSU5BOkNvbW9lOkxvcm9wZW5pCis3OkJGOkJGQTpCVVJLSU5BOkNvbW9lOkxvdW1hbmEKKzg6QkY6QkZBOkJVUktJTkE6Q29tb2U6TWFuZ29kYXJhCis5OkJGOkJGQTpCVVJLSU5BOkNvbW9lOk1vdXNzb2RvdWdvdQorMTA6QkY6QkZBOkJVUktJTkE6Q29tb2U6TmlhbmdvbG9rbworMTE6QkY6QkZBOkJVUktJTkE6Q29tb2U6Tmlhbmtvcm9kb3Vnb3UKKzEyOkJGOkJGQTpCVVJLSU5BOkNvbW9lOk91bworMTM6QkY6QkZBOkJVUktJTkE6Q29tb2U6U2lkZXJhZG91Z291CisxNDpCRjpCRkE6QlVSS0lOQTpDb21vZTpTaW5kb3UKKzE1OkJGOkJGQTpCVVJLSU5BOkNvbW9lOlNvdWJha2FuaWVkb3Vnb3UKKzE2OkJGOkJGQTpCVVJLSU5BOkNvbW9lOlRpZWZvcmEKKzE3OkJGOkJGQTpCVVJLSU5BOkNvbW9lOldvbG9ua290bworMTpCRjpCRkE6QlVSS0lOQTpZYXRlbmdhOkJhbmgKKzI6QkY6QkZBOkJVUktJTkE6WWF0ZW5nYTpCYXNzaQorMzpCRjpCRkE6QlVSS0lOQTpZYXRlbmdhOkJvdXNzb3UKKzQ6QkY6QkZBOkJVUktJTkE6WWF0ZW5nYTpHb3VyY3kKKzU6QkY6QkZBOkJVUktJTkE6WWF0ZW5nYTpLYWluCis2OkJGOkJGQTpCVVJLSU5BOllhdGVuZ2E6S2Fsc2FrYQorNzpCRjpCRkE6QlVSS0lOQTpZYXRlbmdhOktvdW1icmkKKzg6QkY6QkZBOkJVUktJTkE6WWF0ZW5nYTpOYW1pc3NpZ3VpbWEKKzk6QkY6QkZBOkJVUktJTkE6WWF0ZW5nYTpPdWFoaWdvdXlhCisxMDpCRjpCRkE6QlVSS0lOQTpZYXRlbmdhOk91aW5kaWd1aQorMTE6QkY6QkZBOkJVUktJTkE6WWF0ZW5nYTpPdWxhCisxMjpCRjpCRkE6QlVSS0lOQTpZYXRlbmdhOlJhbWJvCisxMzpCRjpCRkE6QlVSS0lOQTpZYXRlbmdhOlNlZ3VlbmVnYQorMTQ6QkY6QkZBOkJVUktJTkE6WWF0ZW5nYTpTb2xsZQorMTU6QkY6QkZBOkJVUktJTkE6WWF0ZW5nYTpUYW5nYXllCisxNjpCRjpCRkE6QlVSS0lOQTpZYXRlbmdhOlRoaW91CisxNzpCRjpCRkE6QlVSS0lOQTpZYXRlbmdhOlRpdGFvCisxODpCRjpCRkE6QlVSS0lOQTpZYXRlbmdhOlRvdWdvCisxOTpCRjpCRkE6QlVSS0lOQTpZYXRlbmdhOlpvZ29yZQorMTpCRjpCRkE6QlVSS0lOQTpQYXNzb3JlOkFyYm9sbGUKKzI6QkY6QkZBOkJVUktJTkE6UGFzc29yZTpCYWdhcmUKKzM6QkY6QkZBOkJVUktJTkE6UGFzc29yZTpCb2tpbgorNDpCRjpCRkE6QlVSS0lOQTpQYXNzb3JlOkdvbXBvbnNvbQorNTpCRjpCRkE6QlVSS0lOQTpQYXNzb3JlOktpcnNpCis2OkJGOkJGQTpCVVJLSU5BOlBhc3NvcmU6TGEtVG9kaW4KKzc6QkY6QkZBOkJVUktJTkE6UGFzc29yZTpQaWxpbXBpa291Cis4OkJGOkJGQTpCVVJLSU5BOlBhc3NvcmU6U2FtYmEKKzk6QkY6QkZBOkJVUktJTkE6UGFzc29yZTpZYWtvCisxOkJGOkJGQTpCVVJLSU5BOkthZGlvZ286S2FkaW9nbworMTpCRjpCRkE6QlVSS0lOQTpCb3Vsa2llbWRlOkJpbmdvCisyOkJGOkJGQTpCVVJLSU5BOkJvdWxraWVtZGU6SW1hc2dobworMzpCRjpCRkE6QlVSS0lOQTpCb3Vsa2llbWRlOktpbmRpCis0OkJGOkJGQTpCVVJLSU5BOkJvdWxraWVtZGU6S29rb2xvZ2hvCis1OkJGOkJGQTpCVVJLSU5BOkJvdWxraWVtZGU6S291ZG91Z291Cis2OkJGOkJGQTpCVVJLSU5BOkJvdWxraWVtZGU6TmFub3JvCis3OkJGOkJGQTpCVVJLSU5BOkJvdWxraWVtZGU6UGVsbGEKKzg6QkY6QkZBOkJVUktJTkE6Qm91bGtpZW1kZTpQb2EKKzk6QkY6QkZBOkJVUktJTkE6Qm91bGtpZW1kZTpSYW1vbmdvCisxMDpCRjpCRkE6QlVSS0lOQTpCb3Vsa2llbWRlOlNhYm91CisxMTpCRjpCRkE6QlVSS0lOQTpCb3Vsa2llbWRlOlNpZ2xlCisxMjpCRjpCRkE6QlVSS0lOQTpCb3Vsa2llbWRlOlNvdXJnb3UKKzEzOkJGOkJGQTpCVVJLSU5BOkJvdWxraWVtZGU6VGh5b3UKKzE6QkY6QkZBOkJVUktJTkE6R2Fuem91cmdvdTpCb3VkcnkKKzI6QkY6QkZBOkJVUktJTkE6R2Fuem91cmdvdTpLb2dobworMzpCRjpCRkE6QlVSS0lOQTpHYW56b3VyZ291Ok1lZ3VldAorNDpCRjpCRkE6QlVSS0lOQTpHYW56b3VyZ291Ok1vZ3RlZG8KKzU6QkY6QkZBOkJVUktJTkE6R2Fuem91cmdvdTpaYW0KKzY6QkY6QkZBOkJVUktJTkE6R2Fuem91cmdvdTpab3JnaG8KKzc6QkY6QkZBOkJVUktJTkE6R2Fuem91cmdvdTpab3VuZ291CisxOkJGOkJGQTpCVVJLSU5BOlNpc3NpbGk6QmllaGEKKzI6QkY6QkZBOkJVUktJTkE6U2lzc2lsaTpCb3Vnbm91bm91CiszOkJGOkJGQTpCVVJLSU5BOlNpc3NpbGk6Qm91cmEKKzQ6QkY6QkZBOkJVUktJTkE6U2lzc2lsaTpDYXNzb3UKKzU6QkY6QkZBOkJVUktJTkE6U2lzc2lsaTpGYXJhCis2OkJGOkJGQTpCVVJLSU5BOlNpc3NpbGk6TGVvCis3OkJGOkJGQTpCVVJLSU5BOlNpc3NpbGk6TmViaWVsaWFuYXlvdQorODpCRjpCRkE6QlVSS0lOQTpTaXNzaWxpOk5pYWJvdXJpCis5OkJGOkJGQTpCVVJLSU5BOlNpc3NpbGk6TmllZ28KKzEwOkJGOkJGQTpCVVJLSU5BOlNpc3NpbGk6T3Vlc3NhCisxMTpCRjpCRkE6QlVSS0lOQTpTaXNzaWxpOlNhcG91eQorMTI6QkY6QkZBOkJVUktJTkE6U2lzc2lsaTpTaWxseQorMTM6QkY6QkZBOkJVUktJTkE6U2lzc2lsaTpUbworMTpCRjpCRkE6QlVSS0lOQTpab3VuZHdlb2dvOkJlcmUKKzI6QkY6QkZBOkJVUktJTkE6Wm91bmR3ZW9nbzpCaW5kZQorMzpCRjpCRkE6QlVSS0lOQTpab3VuZHdlb2dvOkdvZ28KKzQ6QkY6QkZBOkJVUktJTkE6Wm91bmR3ZW9nbzpHb21ib3Vzc291Z291Cis1OkJGOkJGQTpCVVJLSU5BOlpvdW5kd2VvZ286R3VpYmEKKzY6QkY6QkZBOkJVUktJTkE6Wm91bmR3ZW9nbzpNYW5nYQorNzpCRjpCRkE6QlVSS0lOQTpab3VuZHdlb2dvOk5vYmVyZQorMTpCRjpCRkE6QlVSS0lOQTpCb3Vnb3VyaWJhOkRhbm8KKzI6QkY6QkZBOkJVUktJTkE6Qm91Z291cmliYTpEaWVib3Vnb3UKKzM6QkY6QkZBOkJVUktJTkE6Qm91Z291cmliYTpEaXNzaW4KKzQ6QkY6QkZBOkJVUktJTkE6Qm91Z291cmliYTpEb2xvCis1OkJGOkJGQTpCVVJLSU5BOkJvdWdvdXJpYmE6Rm91bnphbgorNjpCRjpCRkE6QlVSS0lOQTpCb3Vnb3VyaWJhOkd1ZWd1ZXJlCis3OkJGOkJGQTpCVVJLSU5BOkJvdWdvdXJpYmE6S29wZXIKKzg6QkY6QkZBOkJVUktJTkE6Qm91Z291cmliYTpLb3RpCis5OkJGOkJGQTpCVVJLSU5BOkJvdWdvdXJpYmE6T3Jvbmt1YQorMTA6QkY6QkZBOkJVUktJTkE6Qm91Z291cmliYTpUaWFua291cmEKKzExOkJGOkJGQTpCVVJLSU5BOkJvdWdvdXJpYmE6WmFtYm8KKzE6QkY6QkZBOkJVUktJTkE6S291cml0ZW5nYTpBbmRlbXRlbmdhCisyOkJGOkJGQTpCVVJLSU5BOktvdXJpdGVuZ2E6QmFza291cmUKKzM6QkY6QkZBOkJVUktJTkE6S291cml0ZW5nYTpEaWFsZ2F5ZQorNDpCRjpCRkE6QlVSS0lOQTpLb3VyaXRlbmdhOkdvdW5naGluCis1OkJGOkJGQTpCVVJLSU5BOktvdXJpdGVuZ2E6S291cGVsYQorNjpCRjpCRkE6QlVSS0lOQTpLb3VyaXRlbmdhOlBvdXl0ZW5nYQorNzpCRjpCRkE6QlVSS0lOQTpLb3VyaXRlbmdhOlRlbnNvYnRlbmdhCis4OkJGOkJGQTpCVVJLSU5BOktvdXJpdGVuZ2E6WWFyZ28KKzE6QkY6QkZBOkJVUktJTkE6Qm91bGdvdTpCYW5lCisyOkJGOkJGQTpCVVJLSU5BOkJvdWxnb3U6QmVndWVkbworMzpCRjpCRkE6QlVSS0lOQTpCb3VsZ291OkJpdHRvdQorNDpCRjpCRkE6QlVSS0lOQTpCb3VsZ291OkRvdXJ0ZW5nYQorNTpCRjpCRkE6QlVSS0lOQTpCb3VsZ291OkdhcmFuZ28KKzY6QkY6QkZBOkJVUktJTkE6Qm91bGdvdTpLb210b2VnYQorNzpCRjpCRkE6QlVSS0lOQTpCb3VsZ291OkxhbGdheWUKKzg6QkY6QkZBOkJVUktJTkE6Qm91bGdvdTpOaWFnaG8KKzk6QkY6QkZBOkJVUktJTkE6Qm91bGdvdTpPdWFyZ2F5ZQorMTA6QkY6QkZBOkJVUktJTkE6Qm91bGdvdTpTYW5naGEKKzExOkJGOkJGQTpCVVJLSU5BOkJvdWxnb3U6VGVua29kb2dvCisxMjpCRjpCRkE6QlVSS0lOQTpCb3VsZ291OllhcmdhdGVuZ2EKKzEzOkJGOkJGQTpCVVJLSU5BOkJvdWxnb3U6WmFicmUKKzE6QkY6QkZBOkJVUktJTkE6U291cm91OkRpCisyOkJGOkJGQTpCVVJLSU5BOlNvdXJvdTpHYXNzYW4KKzM6QkY6QkZBOkJVUktJTkE6U291cm91OkdvbWJvcm8KKzQ6QkY6QkZBOkJVUktJTkE6U291cm91Okdvc3NpbmEKKzU6QkY6QkZBOkJVUktJTkE6U291cm91Okthc3NvdW0KKzY6QkY6QkZBOkJVUktJTkE6U291cm91OktpZW1iYXJhCis3OkJGOkJGQTpCVVJLSU5BOlNvdXJvdTpLb3VnbnkKKzg6QkY6QkZBOkJVUktJTkE6U291cm91OkxhbmZpZXJhCis5OkJGOkJGQTpCVVJLSU5BOlNvdXJvdTpMYW5rb3VlCisxMDpCRjpCRkE6QlVSS0lOQTpTb3Vyb3U6VG9lbmkKKzExOkJGOkJGQTpCVVJLSU5BOlNvdXJvdTpUb21hCisxMjpCRjpCRkE6QlVSS0lOQTpTb3Vyb3U6VG91Z2FuCisxMzpCRjpCRkE6QlVSS0lOQTpTb3Vyb3U6WWFiYQorMTQ6QkY6QkZBOkJVUktJTkE6U291cm91OlllCisxOkJGOkJGQTpCVVJLSU5BOk5hbWVudGVuZ2E6Qm91bHNhCisyOkJGOkJGQTpCVVJLSU5BOk5hbWVudGVuZ2E6Qm91cm91bQorMzpCRjpCRkE6QlVSS0lOQTpOYW1lbnRlbmdhOkRhcmdvCis0OkJGOkJGQTpCVVJLSU5BOk5hbWVudGVuZ2E6S2FuZG8KKzU6QkY6QkZBOkJVUktJTkE6TmFtZW50ZW5nYTpUb3Vnb3VyaQorNjpCRjpCRkE6QlVSS0lOQTpOYW1lbnRlbmdhOllhbGdvCis3OkJGOkJGQTpCVVJLSU5BOk5hbWVudGVuZ2E6WmVndWVkZWd1aW4KKzE6QkY6QkZBOkJVUktJTkE6U2FubWF0ZW5nYTpCYXJzYWxvZ2hvCisyOkJGOkJGQTpCVVJLSU5BOlNhbm1hdGVuZ2E6Qm91c3NvdW1hCiszOkJGOkJGQTpCVVJLSU5BOlNhbm1hdGVuZ2E6RGFibG8KKzQ6QkY6QkZBOkJVUktJTkE6U2FubWF0ZW5nYTpLYXlhCis1OkJGOkJGQTpCVVJLSU5BOlNhbm1hdGVuZ2E6S29yc2ltb3JvCis2OkJGOkJGQTpCVVJLSU5BOlNhbm1hdGVuZ2E6TWFuZQorNzpCRjpCRkE6QlVSS0lOQTpTYW5tYXRlbmdhOk5hbWlzc2lndWltYQorODpCRjpCRkE6QlVSS0lOQTpTYW5tYXRlbmdhOlBlbnNhCis5OkJGOkJGQTpCVVJLSU5BOlNhbm1hdGVuZ2E6UGliYW9yZQorMTA6QkY6QkZBOkJVUktJTkE6U2FubWF0ZW5nYTpQaXNzaWxhCisxMTpCRjpCRkE6QlVSS0lOQTpTYW5tYXRlbmdhOlppZ2EKKzE6QkY6QkZBOkJVUktJTkE6S29zc2k6QmFsYXZlCisyOkJGOkJGQTpCVVJLSU5BOktvc3NpOkJhcmFuaQorMzpCRjpCRkE6QlVSS0lOQTpLb3NzaTpCb21ib3Jva3VpCis0OkJGOkJGQTpCVVJLSU5BOktvc3NpOkRqaWJhc3NvCis1OkJGOkJGQTpCVVJLSU5BOktvc3NpOkRva3VpCis2OkJGOkJGQTpCVVJLSU5BOktvc3NpOkRvdW1iYWxhCis3OkJGOkJGQTpCVVJLSU5BOktvc3NpOktvbWJvcmkKKzg6QkY6QkZBOkJVUktJTkE6S29zc2k6S291a2EKKzk6QkY6QkZBOkJVUktJTkE6S29zc2k6TWFkb3ViYQorMTA6QkY6QkZBOkJVUktJTkE6S29zc2k6Tm91bmEKKzExOkJGOkJGQTpCVVJLSU5BOktvc3NpOlNhbWkKKzEyOkJGOkJGQTpCVVJLSU5BOktvc3NpOlNhbmFiYQorMTM6QkY6QkZBOkJVUktJTkE6S29zc2k6U29sZW56bworMTQ6QkY6QkZBOkJVUktJTkE6S29zc2k6VGFuc2lsYQorMTpCRjpCRkE6QlVSS0lOQTpPdWJyaXRlbmdhOkFic291eWEKKzI6QkY6QkZBOkJVUktJTkE6T3Vicml0ZW5nYTpCb3Vzc2UKKzM6QkY6QkZBOkJVUktJTkE6T3Vicml0ZW5nYTpEYXBlbGdvCis0OkJGOkJGQTpCVVJLSU5BOk91YnJpdGVuZ2E6TGF5ZQorNTpCRjpCRkE6QlVSS0lOQTpPdWJyaXRlbmdhOkxvdW1iaWxhCis2OkJGOkJGQTpCVVJLSU5BOk91YnJpdGVuZ2E6TmlvdQorNzpCRjpCRkE6QlVSS0lOQTpPdWJyaXRlbmdhOlBhYnJlCis4OkJGOkJGQTpCVVJLSU5BOk91YnJpdGVuZ2E6U2FhYmEKKzk6QkY6QkZBOkJVUktJTkE6T3Vicml0ZW5nYTpTb3VyZ291YmlsYQorMTA6QkY6QkZBOkJVUktJTkE6T3Vicml0ZW5nYTpUb2VnaGluCisxMTpCRjpCRkE6QlVSS0lOQTpPdWJyaXRlbmdhOlppbmlhcmUKKzEyOkJGOkJGQTpCVVJLSU5BOk91YnJpdGVuZ2E6Wml0ZW5nYQorMTpCRjpCRkE6QlVSS0lOQTpOYWhvdXJpOkduaWFybworMjpCRjpCRkE6QlVSS0lOQTpOYWhvdXJpOlBvCiszOkJGOkJGQTpCVVJLSU5BOk5haG91cmk6VGllYmVsZQorNDpCRjpCRkE6QlVSS0lOQTpOYWhvdXJpOlplY2NvCis1OkJGOkJGQTpCVVJLSU5BOk5haG91cmk6WmlvdQorMTpCRjpCRkE6QlVSS0lOQTpTb3VtOkFyaWJpbmRhCisyOkJGOkJGQTpCVVJLSU5BOlNvdW06QmFyYWJvdWxlCiszOkJGOkJGQTpCVVJLSU5BOlNvdW06RGlndWVsCis0OkJGOkJGQTpCVVJLSU5BOlNvdW06RGppYm8KKzU6QkY6QkZBOkJVUktJTkE6U291bTpLb3V0b3Vnb3UKKzY6QkY6QkZBOkJVUktJTkE6U291bTpOYXNzYW1mb3UKKzc6QkY6QkZBOkJVUktJTkE6U291bTpQb2JlLU1lbmdhbworODpCRjpCRkE6QlVSS0lOQTpTb3VtOlRvbmdvbWF5ZWwKKzE6QkY6QkZBOkJVUktJTkE6R291cm1hOkNvbWluLVlhbmdhCisyOkJGOkJGQTpCVVJLSU5BOkdvdXJtYTpEaWFibworMzpCRjpCRkE6QlVSS0lOQTpHb3VybWE6RGlhcGFuZ291Cis0OkJGOkJGQTpCVVJLSU5BOkdvdXJtYTpGYWRhIE4nZ291cm1hCis1OkJGOkJGQTpCVVJLSU5BOkdvdXJtYTpHYXllcmkKKzY6QkY6QkZBOkJVUktJTkE6R291cm1hOk1hdGlhY29hbGkKKzc6QkY6QkZBOkJVUktJTkE6R291cm1hOlBhbWEKKzg6QkY6QkZBOkJVUktJTkE6R291cm1hOlNvdWRvdWd1aQorOTpCRjpCRkE6QlVSS0lOQTpHb3VybWE6VGliZ2EKKzEwOkJGOkJGQTpCVVJLSU5BOkdvdXJtYTpZYW1iYQorMTE6QkY6QkZBOkJVUktJTkE6R291cm1hOllvbmRlCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvQkdEL0JHRF9BRE1JTjFfTEVYLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9CR0QvQkdEX0FETUlOMV9MRVgudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhmZDYwZGYKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvQkdEL0JHRF9BRE1JTjFfTEVYLnR4dApAQCAtMCwwICsxLDU4IEBACisxOkJELTA1OkJEOkJBR0VSSEFUIFpJTEEKKzI6QkQtMDI6QkQ6QkFSR1VOQSBaSUxBCiszOkJELTA2OkJEOkJBUklTQUwgRElWCis0OkJELTA3OkJEOkJIT0xBIFpJTEEKKzU6QkQtMDM6QkQ6Qk9HUkEgWklMQQorNjpCRC0wNDpCRDpCUkFITUFOQkFSSUEgWklMQQorNzpCRC0wOTpCRDpDSEFORFBVUiBaSUxBCis4OkJELTA6QkQ6Q0hJVFRBR09ORyBESVYKKzk6QkQtMjpCRDpDSFVBREFOR0EgWklMQQorMTA6QkQtMDg6QkQ6Q09NSUxMQSBaSUxBCisxMTpCRC0xMDpCRDpDT1hTIEJBWkFSIFpJTEEKKzEyOkJELTM6QkQ6REhBS0EgRElWCisxMzpCRC00OkJEOkRJTkFKUFVSIFpJTEEKKzE0OkJELTU6QkQ6RkFSSURQVVIgWklMQQorMTU6QkQtNjpCRDpGRU5JIFpJTEEKKzE2OkJELTk6QkQ6R0FJQkFOREhBIFpJTEEKKzE3OkJELTg6QkQ6R0FaSVBVUiBaSUxBCisxODpCRC03OkJEOkdPUEFMR0FOSiBaSUxBCisxOTpCRC0yMDpCRDpIQUJJR0FOSiBaSUxBCisyMDpCRC0yNDpCRDpKQUlQVVJIQVQgWklMQQorMjE6QkQtMjI6QkQ6SkVTU09SRSBaSUxBCisyMjpCRC0yNTpCRDpKSEFMQUtBVEkgWklMQQorMjM6QkQtMjM6QkQ6SkhFTkFJREFIIFpJTEEKKzI0OkJELTI5OkJEOktIQUdSQUNIQVJJIFpJTEEKKzI1OkJELTI3OkJEOktIVUxOQSBESVYKKzI2OkJELTI2OkJEOktJU0hPUkVHQU5KIFpJTEEKKzI3OkJELTI4OkJEOktVUklHUkFNIFpJTEEKKzI4OkJELTMwOkJEOktVU0hUSUEgWklMQQorMjk6QkQtMzI6QkQ6TEFMTU9OSVJIQVQgWklMQQorMzA6QkQtMzY6QkQ6TUFEQVJJUFVSIFpJTEEKKzMxOkJELTM3OkJEOk1BR1VSQSBaSUxBCiszMjpCRC0zMzpCRDpNQU5JS0dBTkogWklMQQorMzM6QkQtMzk6QkQ6TUVIRVJQVVIgWklMQQorMzQ6QkQtMzg6QkQ6TU9VTFZJQkFaQVIgWklMQQorMzU6QkQtMzU6QkQ6TVVOU0hJR0FOSiBaSUxBCiszNjpCRC0zNDpCRDpNWU1FTlNJTkdIIFpJTEEKKzM3OkJELTQ4OkJEOk5BT0dBT04gWklMQQorMzg6QkQtNDM6QkQ6TkFSQUlMIFpJTEEKKzM5OkJELTQwOkJEOk5BUkFZQU5HQU5KIFpJTEEKKzQwOkJELTQyOkJEOk5BUlNJTkdESSBaSUxBCis0MTpCRC00NDpCRDpOQVRPUkUgWklMQQorNDI6QkQtNDU6QkQ6TkFXQUJHQU5KIFpJTEEKKzQzOkJELTQ2OkJEOk5JTFBIQU1BUkkgWklMQQorNDQ6QkQtNDc6QkQ6Tk9BS0hBTEkgWklMQQorNDU6QkQtNDk6QkQ6UEFCTkEgWklMQQorNDY6QkQtNTI6QkQ6UEFOQ0hBR0FSSCBaSUxBCis0NzpCRC01MDpCRDpQSVJPSlBVUiBaSUxBCis0ODpCRC01MzpCRDpSQUpCQVJJIFpJTEEKKzQ5OkJELTU0OkJEOlJBSlNIQUhJIERJVgorNTA6QkQtNTY6QkQ6UkFOR0FNQVRJIFpJTEEKKzUxOkJELTU1OkJEOlJBTkdQVVIgWklMQQorNTI6QkQtNTg6QkQ6U0FUS0hJUkEgWklMQQorNTM6QkQtNjI6QkQ6U0hBUklBVFBVUiBaSUxBCis1NDpCRC01NzpCRDpTSEVSUFVSIFpJTEEKKzU1OkJELTU5OkJEOlNJUkFKR0FOSiBaSUxBCis1NjpCRC02MDpCRDpTWUxIRVQgWklMQQorNTc6QkQtNjM6QkQ6VEFOR0FJTCBaSUxBCis1ODpCRC02NDpCRDpUSEFLVVJHQU9OIFpJTEEKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9CR0QvQkdEX0FETUlOMl9MRVgudHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L0JHRC9CR0RfQURNSU4yX0xFWC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTdmNDIyOAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9CR0QvQkdEX0FETUlOMl9MRVgudHh0CkBAIC0wLDAgKzEsNjQgQEAKKzE6QkQ6QkdEOkJBTkdMQURFU0g6RGhha2EgRGl2OkRoYWthIFppbGEKKzI6QkQ6QkdEOkJBTkdMQURFU0g6RGhha2EgRGl2OkZhcmlkcHVyIFpsCiszOkJEOkJHRDpCQU5HTEFERVNIOkRoYWthIERpdjpHYXppcHVyIFpsCis0OkJEOkJHRDpCQU5HTEFERVNIOkRoYWthIERpdjpHb3BhbGdhbmogWmwKKzU6QkQ6QkdEOkJBTkdMQURFU0g6RGhha2EgRGl2OkphbWFscHVyIFpsCis2OkJEOkJHRDpCQU5HTEFERVNIOkRoYWthIERpdjpLaXNob3JlZ2FuaiBabAorNzpCRDpCR0Q6QkFOR0xBREVTSDpEaGFrYSBEaXY6TWFkYXJpcHVyIFpsCis4OkJEOkJHRDpCQU5HTEFERVNIOkRoYWthIERpdjpNYW5pa2dhbmogWmwKKzk6QkQ6QkdEOkJBTkdMQURFU0g6RGhha2EgRGl2Ok11bnNoaWdhbmogWmwKKzEwOkJEOkJHRDpCQU5HTEFERVNIOkRoYWthIERpdjpNeW1lbnNpbmdoIFpsCisxMTpCRDpCR0Q6QkFOR0xBREVTSDpEaGFrYSBEaXY6TmFyYXlhbmdhbmogWmwKKzEyOkJEOkJHRDpCQU5HTEFERVNIOkRoYWthIERpdjpOYXJzaW5nZGkgWmwKKzEzOkJEOkJHRDpCQU5HTEFERVNIOkRoYWthIERpdjpOZXRyb2tvbmEgWmwKKzE0OkJEOkJHRDpCQU5HTEFERVNIOkRoYWthIERpdjpSYWpiYXJpIFpsCisxNTpCRDpCR0Q6QkFOR0xBREVTSDpEaGFrYSBEaXY6U2hhcmlhdHB1ciBabAorMTY6QkQ6QkdEOkJBTkdMQURFU0g6RGhha2EgRGl2OlNoZXJwdXIgWmwKKzE3OkJEOkJHRDpCQU5HTEFERVNIOkRoYWthIERpdjpUYW5nYWlsIFpsCisxOkJEOkJHRDpCQU5HTEFERVNIOkNoaXR0YWdvbmcgRGl2OkJhbmRhcmJhbiBabAorMjpCRDpCR0Q6QkFOR0xBREVTSDpDaGl0dGFnb25nIERpdjpCcmFobWFuYmFyaWEgWmwKKzM6QkQ6QkdEOkJBTkdMQURFU0g6Q2hpdHRhZ29uZyBEaXY6Q2hhbmRwdXIgWmwKKzQ6QkQ6QkdEOkJBTkdMQURFU0g6Q2hpdHRhZ29uZyBEaXY6Q2hpdHRhZ29uZyBabAorNTpCRDpCR0Q6QkFOR0xBREVTSDpDaGl0dGFnb25nIERpdjpDb21pbGxhIFpsCis2OkJEOkJHRDpCQU5HTEFERVNIOkNoaXR0YWdvbmcgRGl2OkNveCBCYXphciBabAorNzpCRDpCR0Q6QkFOR0xBREVTSDpDaGl0dGFnb25nIERpdjpGZW5pIFpsCis4OkJEOkJHRDpCQU5HTEFERVNIOkNoaXR0YWdvbmcgRGl2OkhhYmlnYW5qIFpsCis5OkJEOkJHRDpCQU5HTEFERVNIOkNoaXR0YWdvbmcgRGl2OktoYWdyYWNoaGFyaSBabAorMTA6QkQ6QkdEOkJBTkdMQURFU0g6Q2hpdHRhZ29uZyBEaXY6TGFrc2htaXB1ciBabAorMTE6QkQ6QkdEOkJBTkdMQURFU0g6Q2hpdHRhZ29uZyBEaXY6TWF1bHZpYmF6YXIgWmwKKzEyOkJEOkJHRDpCQU5HTEFERVNIOkNoaXR0YWdvbmcgRGl2Ok5vYWtoYWxpIFpsCisxMzpCRDpCR0Q6QkFOR0xBREVTSDpDaGl0dGFnb25nIERpdjpSYW5nYW1hdGkgWmwKKzE0OkJEOkJHRDpCQU5HTEFERVNIOkNoaXR0YWdvbmcgRGl2OlN1bmFtZ2FuaiBabAorMTU6QkQ6QkdEOkJBTkdMQURFU0g6Q2hpdHRhZ29uZyBEaXY6U3lsaGV0IFpsCisxOkJEOkJHRDpCQU5HTEFERVNIOlJhanNoYWhpIERpdjpCb2dyYSBabAorMjpCRDpCR0Q6QkFOR0xBREVTSDpSYWpzaGFoaSBEaXY6RGluYWpwdXIgWmwKKzM6QkQ6QkdEOkJBTkdMQURFU0g6UmFqc2hhaGkgRGl2OkdhaWJhbmRoYSBabAorNDpCRDpCR0Q6QkFOR0xBREVTSDpSYWpzaGFoaSBEaXY6Sm95cHVyaGF0IFpsCis1OkJEOkJHRDpCQU5HTEFERVNIOlJhanNoYWhpIERpdjpLdXJpZ3JhbSBabAorNjpCRDpCR0Q6QkFOR0xBREVTSDpSYWpzaGFoaSBEaXY6TGFsbW9uaXJoYXQgWmwKKzc6QkQ6QkdEOkJBTkdMQURFU0g6UmFqc2hhaGkgRGl2Ok5hb2dhb24gWmwKKzg6QkQ6QkdEOkJBTkdMQURFU0g6UmFqc2hhaGkgRGl2Ok5hdG9yZSBabAorOTpCRDpCR0Q6QkFOR0xBREVTSDpSYWpzaGFoaSBEaXY6TmF3YWJnYW5qIFpsCisxMDpCRDpCR0Q6QkFOR0xBREVTSDpSYWpzaGFoaSBEaXY6TmlscGhhbWFyaSBabAorMTE6QkQ6QkdEOkJBTkdMQURFU0g6UmFqc2hhaGkgRGl2OlBhYm5hIFpsCisxMjpCRDpCR0Q6QkFOR0xBREVTSDpSYWpzaGFoaSBEaXY6UGFuY2hhZ2FyaCBabAorMTM6QkQ6QkdEOkJBTkdMQURFU0g6UmFqc2hhaGkgRGl2OlJhanNoYWhpIFpsCisxNDpCRDpCR0Q6QkFOR0xBREVTSDpSYWpzaGFoaSBEaXY6UmFuZ3B1ciBabAorMTU6QkQ6QkdEOkJBTkdMQURFU0g6UmFqc2hhaGkgRGl2OlNpcmFqZ2FuaiBabAorMTY6QkQ6QkdEOkJBTkdMQURFU0g6UmFqc2hhaGkgRGl2OlRoYWt1cmdhb24gWmwKKzE6QkQ6QkdEOkJBTkdMQURFU0g6QmFyaXNhbCBEaXY6QmFyZ3VuYSBabAorMjpCRDpCR0Q6QkFOR0xBREVTSDpCYXJpc2FsIERpdjpCYXJpc2FsIFpsCiszOkJEOkJHRDpCQU5HTEFERVNIOkJhcmlzYWwgRGl2OkJob2xhIFpsCis0OkJEOkJHRDpCQU5HTEFERVNIOkJhcmlzYWwgRGl2OkpoYWxha2F0aSBabAorNTpCRDpCR0Q6QkFOR0xBREVTSDpCYXJpc2FsIERpdjpQYXR1YWtoYWxpIFpsCis2OkJEOkJHRDpCQU5HTEFERVNIOkJhcmlzYWwgRGl2OlBpcm9qcHVyIFpsCisxOkJEOkJHRDpCQU5HTEFERVNIOktodWxuYSBEaXY6QmFnZXJoYXQgWmwKKzI6QkQ6QkdEOkJBTkdMQURFU0g6S2h1bG5hIERpdjpDaHVhZGFuZ2EgWmwKKzM6QkQ6QkdEOkJBTkdMQURFU0g6S2h1bG5hIERpdjpKZXNzb3JlIFpsCis0OkJEOkJHRDpCQU5HTEFERVNIOktodWxuYSBEaXY6SmhlbmFpZGFoYSBabAorNTpCRDpCR0Q6QkFOR0xBREVTSDpLaHVsbmEgRGl2OktodWxuYSBabAorNjpCRDpCR0Q6QkFOR0xBREVTSDpLaHVsbmEgRGl2Okt1c2h0aWEgWmwKKzc6QkQ6QkdEOkJBTkdMQURFU0g6S2h1bG5hIERpdjpNYWd1cmEgWmwKKzg6QkQ6QkdEOkJBTkdMQURFU0g6S2h1bG5hIERpdjpNZWhlcnB1ciBabAorOTpCRDpCR0Q6QkFOR0xBREVTSDpLaHVsbmEgRGl2Ok5hcmFpbCBabAorMTA6QkQ6QkdEOkJBTkdMQURFU0g6S2h1bG5hIERpdjpTYXRraGlyYSBabApkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L0JHUi9CR1JfQURNSU4xX0xFWC50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvQkdSL0JHUl9BRE1JTjFfTEVYLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lM2IyMGM5Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L0JHUi9CR1JfQURNSU4xX0xFWC50eHQKQEAgLTAsMCArMSwyOCBAQAorMTpCRy0wOkJHOkJMQUdPRVZHUkFECisyOkJHLTAyOkJHOkJVUkdBUworMzpCRy0wODpCRzpET0JSSUUKKzQ6QkctMDc6Qkc6R0FCUk9WTworNTpCRy0yMjpCRzpHUkFEIFNPRklKQSAoTVVOLikKKzY6QkctMjY6Qkc6SEFTS09WTworNzpCRy0yODpCRzpKQU1CT0wKKzg6QkctMDk6Qkc6S1JEQUxJCis5OkJHLTI5OkJHOkxPVkVDCisxMDpCRy06Qkc6TE9WRUUKKzExOkJHLTIxOkJHOk1JSEFKTE9WR1JBRAorMTI6QkctMjpCRzpNT05UQU5BCisxMzpCRy0zOkJHOlBBWkFSRElLCisxNDpCRy00OkJHOlBFUk5JSworMTU6QkctNTpCRzpQTEVWRU4KKzE2OkJHLTY6Qkc6UExPVkRJVgorMTc6QkctNzpCRzpSQVpHUkFECisxODpCRy04OkJHOlJVU0UKKzE5OkJHLTk6Qkc6U0lMSVNUUkEKKzIwOkJHLTIwOkJHOlNMSVZFTgorMjE6QkctMjM6Qkc6U09GSUpBICAgQ0lUWQorMjI6QkctMjQ6Qkc6U1RBUkEgWkFHT1JBCisyMzpCRy0yNTpCRzpUUkdPVklURQorMjQ6QkctMjc6Qkc6VU1FTgorMjU6QkctMDM6Qkc6VkFSTkEKKzI2OkJHLTA0OkJHOlZFTElLTyBUUk5PVk8KKzI3OkJHLTA1OkJHOlZJRElOCisyODpCRy0wNjpCRzpWUkFDQQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L0JHUi9CR1JfQURNSU4yX0xFWC50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvQkdSL0JHUl9BRE1JTjJfTEVYLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNjlkZTI5Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L0JHUi9CR1JfQURNSU4yX0xFWC50eHQKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9CSFIvQkhSX0FETUlOMV9MRVgudHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L0JIUi9CSFJfQURNSU4xX0xFWC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTQ5MWIxNAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9CSFIvQkhSX0FETUlOMV9MRVgudHh0CkBAIC0wLDAgKzEsMTIgQEAKKzE6QkgtMDpCSDpBTCBBREQKKzI6QkgtMDM6Qkg6QUwgTUFOTUFICiszOkJILTA3OkJIOkFMIE1JTkFRQUggQUwgV1VTCis0OkJILTA1OkJIOkFMIE1JTkFRQUggQVNIIFNIQU1MWUFICis1OkJILTAyOkJIOkFMIE1VQVJSQVEKKzY6QkgtMDk6Qkg6QVIgUklGCis3OkJILUI6Qkg6QkFIUkFJTgorODpCSC0wNDpCSDpKSUREIEFGCis5OkJILTI6Qkg6TUFETkFUIEFNQUQKKzEwOkJILTA4OkJIOk1BRE5BVCBTCisxMTpCSC0xMDpCSDpNSU5BUUFUIEpVWlVSIEFXUgorMTI6QkgtMDY6Qkg6U0lUUkFICmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvQkhSL0JIUl9BRE1JTjJfTEVYLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9CSFIvQkhSX0FETUlOMl9MRVgudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ1ODE4ZDcKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvQkhSL0JIUl9BRE1JTjJfTEVYLnR4dApAQCAtMCwwICsxLDUgQEAKKzE6Qkg6QkhSOkJBSFJBSU46QmFocmFpbjpCSFIuTDIuMQorMjpCSDpCSFI6QkFIUkFJTjpCYWhyYWluOkJIUi5MMi4yCiszOkJIOkJIUjpCQUhSQUlOOkJhaHJhaW46QkhSLkwyLjMKKzQ6Qkg6QkhSOkJBSFJBSU46QmFocmFpbjpCSFIuTDIuNAorNTpCSDpCSFI6QkFIUkFJTjpCYWhyYWluOkJIUi5MMi41CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvQklIL0JJSF9BRE1JTjFfTEVYLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9CSUgvQklIX0FETUlOMV9MRVgudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJmMGExZTcKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvQklIL0JJSF9BRE1JTjFfTEVYLnR4dApAQCAtMCwwICsxLDIgQEAKKzE6QkEtQklIOkJBOkJPU05BIEkgSEVSQ0VHT1ZJTkEKKzI6QkEtU1JQOkJBOlJFUFVCTElLQSBTUlBTS0EKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9CSUgvQklIX0FETUlOMl9MRVgudHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L0JJSC9CSUhfQURNSU4yX0xFWC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTY5ZGUyOQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9CSUgvQklIX0FETUlOMl9MRVgudHh0CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvQk9ML0JPTF9BRE1JTjFfTEVYLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9CT0wvQk9MX0FETUlOMV9MRVgudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZiYjNjMmMKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvQk9ML0JPTF9BRE1JTjFfTEVYLnR4dApAQCAtMCwwICsxLDkgQEAKKzE6Qk8tQjpCTzpCRU5JCisyOkJPLUg6Qk86Q0hVUVVJU0FDQQorMzpCTy1DOkJPOkNPQ0hBQkFNQkEKKzQ6Qk8tTDpCTzpMQSBQQVoKKzU6Qk8tTzpCTzpPUlVSTworNjpCTy1OOkJPOlBBTkRPCis3OkJPLVA6Qk86UE9UT1NJCis4OkJPLVM6Qk86U0FOVEEgQ1JVWgorOTpCTy1UOkJPOlRBUklKQQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L0JPTC9CT0xfQURNSU4yX0xFWC50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvQk9ML0JPTF9BRE1JTjJfTEVYLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YjIxYjU0Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L0JPTC9CT0xfQURNSU4yX0xFWC50eHQKQEAgLTAsMCArMSwxMDAgQEAKKzE6Qk86Qk9MOkJPTElWSUE6UE9UT1NJOkJJTEJBTworMjpCTzpCT0w6Qk9MSVZJQTpQT1RPU0k6QlVTVElMTE9TCiszOkJPOkJPTDpCT0xJVklBOlBPVE9TSTpDSEFSQ0FTCis0OkJPOkJPTDpCT0xJVklBOlBPVE9TSTpDSEFZQU5UQQorNTpCTzpCT0w6Qk9MSVZJQTpQT1RPU0k6REFOSUVMIENBTVBPUworNjpCTzpCT0w6Qk9MSVZJQTpQT1RPU0k6SUJBTkVaCis3OkJPOkJPTDpCT0xJVklBOlBPVE9TSTpMSU5BUkVTCis4OkJPOkJPTDpCT0xJVklBOlBPVE9TSTpNT0RFU1RPIE9NSVNURQorOTpCTzpCT0w6Qk9MSVZJQTpQT1RPU0k6Tk9SIENISUNIQVMKKzEwOkJPOkJPTDpCT0xJVklBOlBPVE9TSTpOT1IgTElQRVoKKzExOkJPOkJPTDpCT0xJVklBOlBPVE9TSTpRVUlKQVJSTworMTI6Qk86Qk9MOkJPTElWSUE6UE9UT1NJOlNBQVZFRFJBCisxMzpCTzpCT0w6Qk9MSVZJQTpQT1RPU0k6U1VEIENISUNIQVMKKzE0OkJPOkJPTDpCT0xJVklBOlBPVE9TSTpTVUQgTElQRVoKKzE1OkJPOkJPTDpCT0xJVklBOlBPVE9TSTpUT01BUyBGUklBUworMTpCTzpCT0w6Qk9MSVZJQTpDT0NIQUJBTUJBOkFSQU5JCisyOkJPOkJPTDpCT0xJVklBOkNPQ0hBQkFNQkE6QVJDRQorMzpCTzpCT0w6Qk9MSVZJQTpDT0NIQUJBTUJBOkFSUVVFCis0OkJPOkJPTDpCT0xJVklBOkNPQ0hBQkFNQkE6QVlPUEFZQQorNTpCTzpCT0w6Qk9MSVZJQTpDT0NIQUJBTUJBOkNBTVBFUk8KKzY6Qk86Qk9MOkJPTElWSUE6Q09DSEFCQU1CQTpDQVBJTk9UQQorNzpCTzpCT0w6Qk9MSVZJQTpDT0NIQUJBTUJBOkNBUlJBU0NPCis4OkJPOkJPTDpCT0xJVklBOkNPQ0hBQkFNQkE6Q0VSQ0FETworOTpCTzpCT0w6Qk9MSVZJQTpDT0NIQUJBTUJBOkNIQVBBUkUKKzEwOkJPOkJPTDpCT0xJVklBOkNPQ0hBQkFNQkE6Sk9SREFOCisxMTpCTzpCT0w6Qk9MSVZJQTpDT0NIQUJBTUJBOk1JWk9RVUUKKzEyOkJPOkJPTDpCT0xJVklBOkNPQ0hBQkFNQkE6UFVOQVRBCisxMzpCTzpCT0w6Qk9MSVZJQTpDT0NIQUJBTUJBOlFVSUxMQUNPTExPCisxNDpCTzpCT0w6Qk9MSVZJQTpDT0NIQUJBTUJBOlRBUEFDQVJJCisxOkJPOkJPTDpCT0xJVklBOlNBTlRBIENSVVo6QS5TQU5ET1ZBTAorMjpCTzpCT0w6Qk9MSVZJQTpTQU5UQSBDUlVaOkFORFJFUyBJQkFORVoKKzM6Qk86Qk9MOkJPTElWSUE6U0FOVEEgQ1JVWjpDQUJBTExFUk8KKzQ6Qk86Qk9MOkJPTElWSUE6U0FOVEEgQ1JVWjpDSElRVUlUT1MKKzU6Qk86Qk9MOkJPTElWSUE6U0FOVEEgQ1JVWjpDT1JESUxMRVJBCis2OkJPOkJPTDpCT0xJVklBOlNBTlRBIENSVVo6RkxPUklEQQorNzpCTzpCT0w6Qk9MSVZJQTpTQU5UQSBDUlVaOkdVVElFUlJFWgorODpCTzpCT0w6Qk9MSVZJQTpTQU5UQSBDUlVaOklDSElMTworOTpCTzpCT0w6Qk9MSVZJQTpTQU5UQSBDUlVaOk5VRkxPIERFIENIQVZFWgorMTA6Qk86Qk9MOkJPTElWSUE6U0FOVEEgQ1JVWjpTQU5USUVTVEVCQU4KKzExOkJPOkJPTDpCT0xJVklBOlNBTlRBIENSVVo6VkFMTEUgR1JBTkRFCisxMjpCTzpCT0w6Qk9MSVZJQTpTQU5UQSBDUlVaOlZFTEFTQ08KKzEzOkJPOkJPTDpCT0xJVklBOlNBTlRBIENSVVo6V0FSTkVTCisxOkJPOkJPTDpCT0xJVklBOkJFTkk6Q0VSQ0FETworMjpCTzpCT0w6Qk9MSVZJQTpCRU5JOkdSQUwuSi5CQUxMSVZJQQorMzpCTzpCT0w6Qk9MSVZJQTpCRU5JOklURU5FWgorNDpCTzpCT0w6Qk9MSVZJQTpCRU5JOk1BTU9SRQorNTpCTzpCT0w6Qk9MSVZJQTpCRU5JOk1BUkJBTgorNjpCTzpCT0w6Qk9MSVZJQTpCRU5JOk1PWE9TCis3OkJPOkJPTDpCT0xJVklBOkJFTkk6VkFDQSBESUVaCis4OkJPOkJPTDpCT0xJVklBOkJFTkk6WUFDVU1BCisxOkJPOkJPTDpCT0xJVklBOlBBTkRPOkFCVU5BCisyOkJPOkJPTDpCT0xJVklBOlBBTkRPOkdSQUwuRkRDTyBQT01BCiszOkJPOkJPTDpCT0xJVklBOlBBTkRPOk1BRFJFIERFIERJT1MKKzQ6Qk86Qk9MOkJPTElWSUE6UEFORE86TUFOVVJJUEkKKzU6Qk86Qk9MOkJPTElWSUE6UEFORE86TklDT0xBUyBTVUFSRVoKKzE6Qk86Qk9MOkJPTElWSUE6TEEgUEFaOkFST01BCisyOkJPOkJPTDpCT0xJVklBOkxBIFBBWjpDQU1BQ0hPCiszOkJPOkJPTDpCT0xJVklBOkxBIFBBWjpGUkFOWiBUQU1BWU8KKzQ6Qk86Qk9MOkJPTElWSUE6TEEgUEFaOkcuVklMTEFSUk9FTAorNTpCTzpCT0w6Qk9MSVZJQTpMQSBQQVo6SU5HQVZJCis2OkJPOkJPTDpCT0xJVklBOkxBIFBBWjpJTlFVSVNJVkkKKzc6Qk86Qk9MOkJPTElWSUE6TEEgUEFaOklPQVlaQQorODpCTzpCT0w6Qk9MSVZJQTpMQSBQQVo6SVRVUlJBTERFCis5OkJPOkJPTDpCT0xJVklBOkxBIFBBWjpMQVJFQ0FKQQorMTA6Qk86Qk9MOkJPTElWSUE6TEEgUEFaOkxPUyBBTkRFUworMTE6Qk86Qk9MOkJPTElWSUE6TEEgUEFaOk1BTkNPIEtBUEFDCisxMjpCTzpCT0w6Qk9MSVZJQTpMQSBQQVo6TVVORUNBUworMTM6Qk86Qk9MOkJPTElWSUE6TEEgUEFaOk1VUklMTE8KKzE0OkJPOkJPTDpCT0xJVklBOkxBIFBBWjpOT1IgWVVOR0FTCisxNTpCTzpCT0w6Qk9MSVZJQTpMQSBQQVo6T01BU1VZT1MKKzE2OkJPOkJPTDpCT0xJVklBOkxBIFBBWjpQQUNBSkVTCisxNzpCTzpCT0w6Qk9MSVZJQTpMQSBQQVo6U0FBVkVEUkEKKzE4OkJPOkJPTDpCT0xJVklBOkxBIFBBWjpTVUQgWVVOR0FTCisxOkJPOkJPTDpCT0xJVklBOlRBUklKQTpBUkNFCisyOkJPOkJPTDpCT0xJVklBOlRBUklKQTpDRVJDQURPCiszOkJPOkJPTDpCT0xJVklBOlRBUklKQTpHUkFOIENIQUNPCis0OkJPOkJPTDpCT0xJVklBOlRBUklKQTpNRU5ERVoKKzU6Qk86Qk9MOkJPTElWSUE6VEFSSUpBOk9DT05OT1IKKzY6Qk86Qk9MOkJPTElWSUE6VEFSSUpBOlZJTEVTCisxOkJPOkJPTDpCT0xJVklBOkNIVVFVSVNBQ0E6QVpVUkRVWQorMjpCTzpCT0w6Qk9MSVZJQTpDSFVRVUlTQUNBOkIuQk9FVE8KKzM6Qk86Qk9MOkJPTElWSUE6Q0hVUVVJU0FDQTpIRE8uIFNJTEVTCis0OkJPOkJPTDpCT0xJVklBOkNIVVFVSVNBQ0E6TFVJUyBDQUxWTworNTpCTzpCT0w6Qk9MSVZJQTpDSFVRVUlTQUNBOk5PUiBDSU5USQorNjpCTzpCT0w6Qk9MSVZJQTpDSFVRVUlTQUNBOk9ST1BFWkEKKzc6Qk86Qk9MOkJPTElWSUE6Q0hVUVVJU0FDQTpTVUQgQ0lOVEkKKzg6Qk86Qk9MOkJPTElWSUE6Q0hVUVVJU0FDQTpUT01JTkEKKzk6Qk86Qk9MOkJPTElWSUE6Q0hVUVVJU0FDQTpZQU1QQVJBRVoKKzEwOkJPOkJPTDpCT0xJVklBOkNIVVFVSVNBQ0E6WlVEQU5FWgorMTpCTzpCT0w6Qk9MSVZJQTpPUlVSTzpBVEFIVUFMTFBBCisyOkJPOkJPTDpCT0xJVklBOk9SVVJPOkFWQVJPQQorMzpCTzpCT0w6Qk9MSVZJQTpPUlVSTzpDQVJBTkdBUworNDpCTzpCT0w6Qk9MSVZJQTpPUlVSTzpDRVJDQURPCis1OkJPOkJPTDpCT0xJVklBOk9SVVJPOkRBTEVOQ0UKKzY6Qk86Qk9MOkJPTElWSUE6T1JVUk86TC5DQUJSRVJBCis3OkJPOkJPTDpCT0xJVklBOk9SVVJPOkxBR08gUE9PUE8KKzg6Qk86Qk9MOkJPTElWSUE6T1JVUk86TElUT1JBTAorOTpCTzpCT0w6Qk9MSVZJQTpPUlVSTzpQT09QTworMTA6Qk86Qk9MOkJPTElWSUE6T1JVUk86U0FKQU1BCisxMTpCTzpCT0w6Qk9MSVZJQTpPUlVSTzpTQVVDQVJJCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvQlJBL0JSQV9BRE1JTjFfTEVYLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9CUkEvQlJBX0FETUlOMV9MRVgudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkwNTdiZDEKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvQlJBL0JSQV9BRE1JTjFfTEVYLnR4dApAQCAtMCwwICsxLDMwIEBACisxOkJSLUFDOkJSOkFDUkUKKzI6QlItQUw6QlI6QUxBR09BUworMzpCUi1BUDpCUjpBTUFQQQorNDpCUi1BTTpCUjpBTUFaT05BUworNTpCUi1CQTpCUjpCQUhJQQorNjpCUi1DQVA6QlI6Q0FQQU5FTUEKKzc6QlItQ0U6QlI6Q0VBUkEKKzg6QlItREY6QlI6RElTVFJJVE8gRkVERVJBTAorOTpCUi1FUzpCUjpFU1BJUklUVSBTQU5UTworMTA6QlItR086QlI6R09JQVMKKzExOkJSLU1BOkJSOk1BUkFOSEFPCisxMjpCUi1NUDpCUjpNQVJBTkhBTy9QSUFVSQorMTM6QlItTVQ6QlI6TUFUTyBHUk9TU08KKzE0OkJSLU1TOkJSOk1BVE8gR1JPU1NPIERPIFNVTAorMTU6QlItTUc6QlI6TUlOQVMgR0VSQUlTCisxNjpCUi1QQTpCUjpQQVJBCisxNzpCUi1QQjpCUjpQQVJBSUJBCisxODpCUi1QUjpCUjpQQVJBTkEKKzE5OkJSLVBFOkJSOlBFUk5BTUJVQ08KKzIwOkJSLVBJOkJSOlBJQVVJCisyMTpCUi1QUlg6QlI6UE9SVE8gWEFWSUVSCisyMjpCUi1SSjpCUjpSSU8gREUgSkFORUlSTworMjM6QlItUk46QlI6UklPIEdSQU5ERSBETyBOT1JURQorMjQ6QlItUlM6QlI6UklPIEdSQU5ERSBETyBTVUwgW1JJTyBHUkFBTkRFIERPIFNVTF0gW1JJTyBHUk5ERSBETyBTVUxdCisyNTpCUi1STzpCUjpST05ET05JQQorMjY6QlItUlI6QlI6Uk9SQUlNQQorMjc6QlItU0M6QlI6U0FOVEEgQ0FUQVJJTkEKKzI4OkJSLVNQOkJSOlNBTyBQQVVMTworMjk6QlItU0U6QlI6U0VSR0lQRQorMzA6QlItVE86QlI6VE9DQU5USU5TCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvQlJBL0JSQV9BRE1JTjJfTEVYLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9CUkEvQlJBX0FETUlOMl9MRVgudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkxNTllMDEKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvQlJBL0JSQV9BRE1JTjJfTEVYLnR4dApAQCAtMCwwICsxLDM5NTUgQEAKKzE6QlI6QlJBOkJSQVNJTDpST05ET05JQTpBbHRhIEZsb3Jlc3RhCisyOkJSOkJSQTpCUkFTSUw6Uk9ORE9OSUE6QWx2b3JhZGEgIGRvIE8uCiszOkJSOkJSQTpCUkFTSUw6Uk9ORE9OSUE6QXJpcXVlbWVzCis0OkJSOkJSQTpCUkFTSUw6Uk9ORE9OSUE6Qm9tIFByaW5jaXBpbworNTpCUjpCUkE6QlJBU0lMOlJPTkRPTklBOkNhY29hbAorNjpCUjpCUkE6QlJBU0lMOlJPTkRPTklBOkNlcmVqZWlyYXMKKzc6QlI6QlJBOkJSQVNJTDpST05ET05JQTpDb2xvcmFkbyBkbyBPLgorODpCUjpCUkE6QlJBU0lMOlJPTkRPTklBOkNvc3RhIE1hcnF1ZXMKKzk6QlI6QlJBOkJSQVNJTDpST05ET05JQTpHdWFqYXJhLU1pcmltCisxMDpCUjpCUkE6QlJBU0lMOlJPTkRPTklBOkphcnUKKzExOkJSOkJSQTpCUkFTSUw6Uk9ORE9OSUE6TWFjaGFkaW5obworMTI6QlI6QlJBOkJSQVNJTDpST05ET05JQTpOb3ZhIEIuIERvIE9lc3RlCisxMzpCUjpCUkE6QlJBU0lMOlJPTkRPTklBOk91cm8gUHJldG8gZG8KKzE0OkJSOkJSQTpCUkFTSUw6Uk9ORE9OSUE6UGltZW50YSBCdWVubworMTU6QlI6QlJBOkJSQVNJTDpST05ET05JQTpQb3J0byBWZWxobworMTY6QlI6QlJBOkJSQVNJTDpST05ET05JQTpQcmVzLiBNZWRpY2kKKzE3OkJSOkJSQTpCUkFTSUw6Uk9ORE9OSUE6Um9saW0gZGUgTW91cmEKKzE4OkJSOkJSQTpCUkFTSUw6Uk9ORE9OSUE6U2FudGEgTHV6aWEKKzE5OkJSOkJSQTpCUkFTSUw6Uk9ORE9OSUE6VmlsYSBOb3ZhCisxOkJSOkJSQTpCUkFTSUw6QU1BWk9OQVM6QWlyYW8KKzI6QlI6QlJBOkJSQVNJTDpBTUFaT05BUzpBbm9yaQorMzpCUjpCUkE6QlJBU0lMOkFNQVpPTkFTOkF0YWxhaWEgRCdOb3J0ZQorNDpCUjpCUkE6QlJBU0lMOkFNQVpPTkFTOkF1dGF6ZXMKKzU6QlI6QlJBOkJSQVNJTDpBTUFaT05BUzpCUkEuTDIuMgorNjpCUjpCUkE6QlJBU0lMOkFNQVpPTkFTOkJhcmNlbG9zCis3OkJSOkJSQTpCUkFTSUw6QU1BWk9OQVM6QmFycmVpcmluaGEKKzg6QlI6QlJBOkJSQVNJTDpBTUFaT05BUzpCZW5qYW1pbiBDb25zdGFuCis5OkJSOkJSQTpCUkFTSUw6QU1BWk9OQVM6Qm9jYSBEbyBBY3JlCisxMDpCUjpCUkE6QlJBU0lMOkFNQVpPTkFTOkJvcmJhCisxMTpCUjpCUkE6QlJBU0lMOkFNQVpPTkFTOkNhbnV0YW1hCisxMjpCUjpCUkE6QlJBU0lMOkFNQVpPTkFTOkNhcmF1YXJpCisxMzpCUjpCUkE6QlJBU0lMOkFNQVpPTkFTOkNhcmVpcm8KKzE0OkJSOkJSQTpCUkFTSUw6QU1BWk9OQVM6Q29hcmkKKzE1OkJSOkJSQTpCUkFTSUw6QU1BWk9OQVM6Q29kYWphcworMTY6QlI6QlJBOkJSQVNJTDpBTUFaT05BUzpFaXJ1bmVwZQorMTc6QlI6QlJBOkJSQVNJTDpBTUFaT05BUzpFbnZpcmEKKzE4OkJSOkJSQTpCUkFTSUw6QU1BWk9OQVM6Rm9udGUgQm9hCisxOTpCUjpCUkE6QlJBU0lMOkFNQVpPTkFTOkh1bWFpdGEKKzIwOkJSOkJSQTpCUkFTSUw6QU1BWk9OQVM6SWxoYSBHcmFuZGUKKzIxOkJSOkJSQTpCUkFTSUw6QU1BWk9OQVM6SXBpeHVuYQorMjI6QlI6QlJBOkJSQVNJTDpBTUFaT05BUzpJdGFjb2F0aWFyYQorMjM6QlI6QlJBOkJSQVNJTDpBTUFaT05BUzpJdGFwaXJhbmdhCisyNDpCUjpCUkE6QlJBU0lMOkFNQVpPTkFTOkpVUlVBCisyNTpCUjpCUkE6QlJBU0lMOkFNQVpPTkFTOkphcHVyYQorMjY6QlI6QlJBOkJSQVNJTDpBTUFaT05BUzpKdXRhaQorMjc6QlI6QlJBOkJSQVNJTDpBTUFaT05BUzpMYWJyZWEKKzI4OkJSOkJSQTpCUkFTSUw6QU1BWk9OQVM6TWFuYWNhcHVydQorMjk6QlI6QlJBOkJSQVNJTDpBTUFaT05BUzpNYW5hdXMKKzMwOkJSOkJSQTpCUkFTSUw6QU1BWk9OQVM6TWFuaWNvcmUKKzMxOkJSOkJSQTpCUkFTSUw6QU1BWk9OQVM6TWFyYWEKKzMyOkJSOkJSQTpCUkFTSUw6QU1BWk9OQVM6TWF1ZXMKKzMzOkJSOkJSQTpCUkFTSUw6QU1BWk9OQVM6TmhhbXVuZGEKKzM0OkJSOkJSQTpCUkFTSUw6QU1BWk9OQVM6Tm92YSBPbGluZGEgRCdOLgorMzU6QlI6QlJBOkJSQVNJTDpBTUFaT05BUzpOb3ZvIEFyaXB1YW5hCiszNjpCUjpCUkE6QlJBU0lMOkFNQVpPTkFTOlBhcmludGlucworMzc6QlI6QlJBOkJSQVNJTDpBTUFaT05BUzpQYXVpbmkKKzM4OkJSOkJSQTpCUkFTSUw6QU1BWk9OQVM6Uy5BbnRvbmlvIGRvIEljYQorMzk6QlI6QlJBOkJSQVNJTDpBTUFaT05BUzpTLkdhYnJpZWwgRCdDYWMuCis0MDpCUjpCUkE6QlJBU0lMOkFNQVpPTkFTOlMuUGF1bG8gZCdPbGl2ZW4KKzQxOkJSOkJSQTpCUkFTSUw6QU1BWk9OQVM6U2lsdmVzCis0MjpCUjpCUkE6QlJBU0lMOkFNQVpPTkFTOlRhcGF1YQorNDM6QlI6QlJBOkJSQVNJTDpBTUFaT05BUzpUZWZlCis0NDpCUjpCUkE6QlJBU0lMOkFNQVpPTkFTOlVydWNhcmEKKzQ1OkJSOkJSQTpCUkFTSUw6QU1BWk9OQVM6VXJ1Y3VyaXR1YmEKKzQ2OkJSOkJSQTpCUkFTSUw6QU1BWk9OQVM6Wm9uYSBlbiBMaXRpZ2lvCisxOkJSOkJSQTpCUkFTSUw6UG9ydG8gWGF2aWVyOlBvcnRvIEx1Y2VuYQorMTpCUjpCUkE6QlJBU0lMOlBBUkE6QWJhZXRldHViYQorMjpCUjpCUkE6QlJBU0lMOlBBUkE6QWNhcmEKKzM6QlI6QlJBOkJSQVNJTDpQQVJBOkFmdWEKKzQ6QlI6QlJBOkJSQVNJTDpQQVJBOkFsZW5xdWVyCis1OkJSOkJSQTpCUkFTSUw6UEFSQTpBbG1lcmltCis2OkJSOkJSQTpCUkFTSUw6UEFSQTpBbHRhbWlyYQorNzpCUjpCUkE6QlJBU0lMOlBBUkE6QW5hamFzCis4OkJSOkJSQTpCUkFTSUw6UEFSQTpBbmFuaW5kZXVhCis5OkJSOkJSQTpCUkFTSUw6UEFSQTpBdWd1c3RvIENvcnJlYQorMTA6QlI6QlJBOkJSQVNJTDpQQVJBOkF2ZWlybworMTE6QlI6QlJBOkJSQVNJTDpQQVJBOkJhZ3JlCisxMjpCUjpCUkE6QlJBU0lMOlBBUkE6QmFpYW8KKzEzOkJSOkJSQTpCUkFTSUw6UEFSQTpCYXJjYXJlbmEKKzE0OkJSOkJSQTpCUkFTSUw6UEFSQTpCZWxlbQorMTU6QlI6QlJBOkJSQVNJTDpQQVJBOkJlbmV2aWRlcworMTY6QlI6QlJBOkJSQVNJTDpQQVJBOkJvbml0bworMTc6QlI6QlJBOkJSQVNJTDpQQVJBOkJyYWdhbmdhCisxODpCUjpCUkE6QlJBU0lMOlBBUkE6QnJldmVzCisxOTpCUjpCUkE6QlJBU0lMOlBBUkE6QnVqYXJ1CisyMDpCUjpCUkE6QlJBU0lMOlBBUkE6Q2FjaG9laS5EJ0FyYXJpCisyMTpCUjpCUkE6QlJBU0lMOlBBUkE6Q2FtZXRhCisyMjpCUjpCUkE6QlJBU0lMOlBBUkE6Q2FwYW5lbWEKKzIzOkJSOkJSQTpCUkFTSUw6UEFSQTpDYXBpdGFvIFBvY28KKzI0OkJSOkJSQTpCUkFTSUw6UEFSQTpDYXN0YW5oYWwKKzI1OkJSOkJSQTpCUkFTSUw6UEFSQTpDaGF2ZXMKKzI2OkJSOkJSQTpCUkFTSUw6UEFSQTpDb2xhcmVzCisyNzpCUjpCUkE6QlJBU0lMOlBBUkE6Q29uY2VpY2FvIEFyYWd1CisyODpCUjpCUkE6QlJBU0lMOlBBUkE6Q3VydWNhCisyOTpCUjpCUkE6QlJBU0lMOlBBUkE6Q3VydmFsaW5obworMzA6QlI6QlJBOkJSQVNJTDpQQVJBOkZhcm8KKzMxOkJSOkJSQTpCUkFTSUw6UEFSQTpHdXJ1cGEKKzMyOkJSOkJSQTpCUkFTSUw6UEFSQTpJZ2FyYXBlLUFjdQorMzM6QlI6QlJBOkJSQVNJTDpQQVJBOklnYXJhcGUtTWlyaQorMzQ6QlI6QlJBOkJSQVNJTDpQQVJBOkluaGFuZ2FwaQorMzU6QlI6QlJBOkJSQVNJTDpQQVJBOklyaXR1aWEKKzM2OkJSOkJSQTpCUkFTSUw6UEFSQTpJdGFpdHViYQorMzc6QlI6QlJBOkJSQVNJTDpQQVJBOkl0dXBpcmFuZ2EKKzM4OkJSOkJSQTpCUkFTSUw6UEFSQTpKYWN1bmRhCiszOTpCUjpCUkE6QlJBU0lMOlBBUkE6SnVydXRpCis0MDpCUjpCUkE6QlJBU0lMOlBBUkE6TGltb2Vpcm8gZCdBanVydQorNDE6QlI6QlJBOkJSQVNJTDpQQVJBOk1hZ2FsYWhlcyBCYXJhdGEKKzQyOkJSOkJSQTpCUkFTSUw6UEFSQTpNYXJhYmEKKzQzOkJSOkJSQTpCUkFTSUw6UEFSQTpNYXJhY2FuYQorNDQ6QlI6QlJBOkJSQVNJTDpQQVJBOk1hcmFwYW5pbQorNDU6QlI6QlJBOkJSQVNJTDpQQVJBOk1lbGdhY28KKzQ2OkJSOkJSQTpCUkFTSUw6UEFSQTpNb2NhanViYQorNDc6QlI6QlJBOkJSQVNJTDpQQVJBOk1vanUKKzQ4OkJSOkJSQTpCUkFTSUw6UEFSQTpNb250ZSBBbGVncmUKKzQ5OkJSOkJSQTpCUkFTSUw6UEFSQTpNdWFuYQorNTA6QlI6QlJBOkJSQVNJTDpQQVJBOk5vdmEgVGltYm90ZXVhCis1MTpCUjpCUkE6QlJBU0lMOlBBUkE6T2JpZG9zCis1MjpCUjpCUkE6QlJBU0lMOlBBUkE6T2VpcmFzIGQnUGFyYQorNTM6QlI6QlJBOkJSQVNJTDpQQVJBOk9yaXhpbWluYQorNTQ6QlI6QlJBOkJSQVNJTDpQQVJBOk91cmVtCis1NTpCUjpCUkE6QlJBU0lMOlBBUkE6UGFyYWdvbWluYXMKKzU2OkJSOkJSQTpCUkFTSUw6UEFSQTpQZWl4ZSBCb2kKKzU3OkJSOkJSQTpCUkFTSUw6UEFSQTpQb250YSBkZSBQZWRyYXMKKzU4OkJSOkJSQTpCUkFTSUw6UEFSQTpQb3J0ZWwKKzU5OkJSOkJSQTpCUkFTSUw6UEFSQTpQb3J0byBkZSBNb3oKKzYwOkJSOkJSQTpCUkFTSUw6UEFSQTpQcmFpbmhhCis2MTpCUjpCUkE6QlJBU0lMOlBBUkE6UHJpbWF2ZXJhCis2MjpCUjpCUkE6QlJBU0lMOlBBUkE6Uy5BbnRvbmlvIGQnVGF1YQorNjM6QlI6QlJBOkJSQVNJTDpQQVJBOlMuTWlndWVsIEQnR3VhbWEKKzY0OkJSOkJSQTpCUkFTSUw6UEFSQTpTYWxpbm9wb2xpcworNjU6QlI6QlJBOkJSQVNJTDpQQVJBOlNhbHZhdGVycmEKKzY2OkJSOkJSQTpCUkFTSUw6UEFSQTpTYW50YW5hIEFyYWd1YWlhCis2NzpCUjpCUkE6QlJBU0lMOlBBUkE6U2FudGFyZW0KKzY4OkJSOkJSQTpCUkFTSUw6UEFSQTpTYW50YXJlbSBOb3ZvCis2OTpCUjpCUkE6QlJBU0lMOlBBUkE6U2FvIENhZXRhbm8gT2RpdgorNzA6QlI6QlJBOkJSQVNJTDpQQVJBOlNhbyBEb21pbmdvcyBDYXAKKzcxOkJSOkJSQTpCUkFTSUw6UEFSQTpTYW8gRmNvLiBkbyBQYXJhCis3MjpCUjpCUkE6QlJBU0lMOlBBUkE6U2FvIEZlbGl4IEQnWGluLgorNzM6QlI6QlJBOkJSQVNJTDpQQVJBOlNhbyBKb2FvIGQnQXJhZworNzQ6QlI6QlJBOkJSQVNJTDpQQVJBOlNhbyBTZWJhc3RpYW8gZGEKKzc1OkJSOkJSQTpCUkFTSUw6UEFSQTpTZW4uSm9zZSBQb3JmaXJpCis3NjpCUjpCUkE6QlJBU0lMOlBBUkE6U291cmUKKzc3OkJSOkJSQTpCUkFTSUw6UEFSQTpTdGEuQ3J1eiBEJ0FyYXJpCis3ODpCUjpCUkE6QlJBU0lMOlBBUkE6U3RhLklzYWJlbCBQYXJhCis3OTpCUjpCUkE6QlJBU0lMOlBBUkE6U3RhLk1hcmlhIGQnUGFyYQorODA6QlI6QlJBOkJSQVNJTDpQQVJBOlRvbWUtQWN1Cis4MTpCUjpCUkE6QlJBU0lMOlBBUkE6VHVjdXJ1aQorODI6QlI6QlJBOkJSQVNJTDpQQVJBOlZpZ2lhCis4MzpCUjpCUkE6QlJBU0lMOlBBUkE6VmlzZXUKKzE6QlI6QlJBOkJSQVNJTDpQSUFVSTpBZ3JpY29sYW5kaWEKKzI6QlI6QlJBOkJSQVNJTDpQSUFVSTpBZ3VhIEJyYW5jYQorMzpCUjpCUkE6QlJBU0lMOlBJQVVJOkFsdG8gTG9uZ2EKKzQ6QlI6QlJBOkJSQVNJTDpQSUFVSTpBbHRvcworNTpCUjpCUkE6QlJBU0lMOlBJQVVJOkFtYXJhbnRlCis2OkJSOkJSQTpCUkFTSUw6UElBVUk6QW5naWNhbCBkbyBQaWF1aQorNzpCUjpCUkE6QlJBU0lMOlBJQVVJOkFuaXNpbyBBYnJldQorODpCUjpCUkE6QlJBU0lMOlBJQVVJOkFudG9uaW8gQWxtZWlkYQorOTpCUjpCUkE6QlJBU0lMOlBJQVVJOkFyb2F6ZXMKKzEwOkJSOkJSQTpCUkFTSUw6UElBVUk6QXJyYWlhbAorMTE6QlI6QlJBOkJSQVNJTDpQSUFVSTpBdmVsaW5vIExvcGVzCisxMjpCUjpCUkE6QlJBU0lMOlBJQVVJOkJhcnJhcworMTM6QlI6QlJBOkJSQVNJTDpQSUFVSTpCYXJyZWlyYXMgUGlhdWkKKzE0OkJSOkJSQTpCUkFTSUw6UElBVUk6QmFycm8gRHVybworMTU6QlI6QlJBOkJSQVNJTDpQSUFVSTpCYXRhbGhhCisxNjpCUjpCUkE6QlJBU0lMOlBJQVVJOkJlbmVkaXRpbm9zCisxNzpCUjpCUkE6QlJBU0lMOlBJQVVJOkJlcnRvbGluaWEKKzE4OkJSOkJSQTpCUkFTSUw6UElBVUk6Qm9jYWluYQorMTk6QlI6QlJBOkJSQVNJTDpQSUFVSTpCb20gSmVzdXMKKzIwOkJSOkJSQTpCUkFTSUw6UElBVUk6QnVyaXRpIGRvcyBMb3BlcworMjE6QlI6QlJBOkJSQVNJTDpQSUFVSTpDT1JSRU5URVMKKzIyOkJSOkJSQTpCUkFTSUw6UElBVUk6Q2FtcGluYXMgUGlhdWkKKzIzOkJSOkJSQTpCUkFTSUw6UElBVUk6Q2FtcG8gTWFpb3IKKzI0OkJSOkJSQTpCUkFTSUw6UElBVUk6Q2FudG8gZG8gQnVyaXRpCisyNTpCUjpCUkE6QlJBU0lMOlBJQVVJOkNhcGl0YW8gZGUgQ2FtcG8KKzI2OkJSOkJSQTpCUkFTSUw6UElBVUk6Q2FyYWNvbAorMjc6QlI6QlJBOkJSQVNJTDpQSUFVSTpDYXN0ZWxvIGRvIFBpYXVpCisyODpCUjpCUkE6QlJBU0lMOlBJQVVJOkNvY2FsCisyOTpCUjpCUkE6QlJBU0lMOlBJQVVJOkNvbmNlaWNhbyBDYW5pbm8KKzMwOkJSOkJSQTpCUkFTSUw6UElBVUk6Q3Jpc3RhbGFuZGlhIFAuCiszMTpCUjpCUkE6QlJBU0lMOlBJQVVJOkNyaXN0aW5vIENhc3RybworMzI6QlI6QlJBOkJSQVNJTDpQSUFVSTpDdXJpbWF0YQorMzM6QlI6QlJBOkJSQVNJTDpQSUFVSTpEZW1lcnZhbCBMb2JhbworMzQ6QlI6QlJBOkJSQVNJTDpQSUFVSTpEb20gRXhwZWRpdG8gTC4KKzM1OkJSOkJSQTpCUkFTSUw6UElBVUk6RWxlc2JhbyBWZWxvc28KKzM2OkJSOkJSQTpCUkFTSUw6UElBVUk6RWxpc2V1IE1hcnRpbnMKKzM3OkJSOkJSQTpCUkFTSUw6UElBVUk6RXNwZXJhbnRpbmEKKzM4OkJSOkJSQTpCUkFTSUw6UElBVUk6RmxvcmVzIGRvIFBpYXVpCiszOTpCUjpCUkE6QlJBU0lMOlBJQVVJOkZsb3JpYW5vCis0MDpCUjpCUkE6QlJBU0lMOlBJQVVJOkZyYW5jaW5vcG9saXMKKzQxOkJSOkJSQTpCUkFTSUw6UElBVUk6RnJhbmNpc2NvIEFpcmVzCis0MjpCUjpCUkE6QlJBU0lMOlBJQVVJOkZyYW5jaXNjbyBTYW50b3MKKzQzOkJSOkJSQTpCUkFTSUw6UElBVUk6RnJvbnRlaXJhcworNDQ6QlI6QlJBOkJSQVNJTDpQSUFVSTpHaWxidWVzCis0NTpCUjpCUkE6QlJBU0lMOlBJQVVJOkd1YWRhbHVwZQorNDY6QlI6QlJBOkJSQVNJTDpQSUFVSTpIdWdvIE5hcG9sZWFvCis0NzpCUjpCUkE6QlJBU0lMOlBJQVVJOkluaHVtYQorNDg6QlI6QlJBOkJSQVNJTDpQSUFVSTpJcGlyYW5nYSBQaWF1aQorNDk6QlI6QlJBOkJSQVNJTDpQSUFVSTpJc2FpYXMgQ29lbGhvCis1MDpCUjpCUkE6QlJBU0lMOlBJQVVJOkl0YWlub3BvbGlzCis1MTpCUjpCUkE6QlJBU0lMOlBJQVVJOkl0YXVlaXJhCis1MjpCUjpCUkE6QlJBU0lMOlBJQVVJOkphaWNvcworNTM6QlI6QlJBOkJSQVNJTDpQSUFVSTpKZXJ1bWVuaGEKKzU0OkJSOkJSQTpCUkFTSUw6UElBVUk6Sm9hcXVpbSBQaXJlcworNTU6QlI6QlJBOkJSQVNJTDpQSUFVSTpKb3NlIGRlIEZyZWl0YXMKKzU2OkJSOkJSQTpCUkFTSUw6UElBVUk6TGFuZHJpIFNhbGVzCis1NzpCUjpCUkE6QlJBU0lMOlBJQVVJOkx1aXMgQ29ycmVpYQorNTg6QlI6QlJBOkJSQVNJTDpQSUFVSTpMdXppbGFuZGlhCis1OTpCUjpCUkE6QlJBU0lMOlBJQVVJOk1hbm9lbCBFbWlsaW8KKzYwOkJSOkJSQTpCUkFTSUw6UElBVUk6TWFyY29zIFBhcmVudGUKKzYxOkJSOkJSQTpCUkFTSUw6UElBVUk6TWF0aWFzIE9saW1waW8KKzYyOkJSOkJSQTpCUkFTSUw6UElBVUk6TWlndWVsIEFsdmVzCis2MzpCUjpCUkE6QlJBU0lMOlBJQVVJOk1pZ3VlbCBMZWFvCis2NDpCUjpCUkE6QlJBU0lMOlBJQVVJOk1vbnNlbmhvciBHaWwKKzY1OkJSOkJSQTpCUkFTSUw6UElBVUk6TW9uc2VuaG9yIEhpcG9saQorNjY6QlI6QlJBOkJSQVNJTDpQSUFVSTpNb250ZSBBbGVncmUKKzY3OkJSOkJSQTpCUkFTSUw6UElBVUk6TmF6YXJlIGRvIFBpYXVpCis2ODpCUjpCUkE6QlJBU0lMOlBJQVVJOk5vc3NhIFNlbmhvcmEgZGkKKzY5OkJSOkJSQTpCUkFTSUw6UElBVUk6Tm92byBPcmllbnRlIFAuCis3MDpCUjpCUkE6QlJBU0lMOlBJQVVJOk9laXJhcworNzE6QlI6QlJBOkJSQVNJTDpQSUFVSTpPbGhvIEQnQWd1YSBHLgorNzI6QlI6QlJBOkJSQVNJTDpQSUFVSTpQYWRyZSBNYXJjb3MKKzczOkJSOkJSQTpCUkFTSUw6UElBVUk6UGFlcyBMYW5kaW0KKzc0OkJSOkJSQTpCUkFTSUw6UElBVUk6UGFsbWVpcmEgUGlhdWkKKzc1OkJSOkJSQTpCUkFTSUw6UElBVUk6UGFsbWVpcmFpcworNzY6QlI6QlJBOkJSQVNJTDpQSUFVSTpQYXJuYWd1YQorNzc6QlI6QlJBOkJSQVNJTDpQSUFVSTpQYXJuYWliYQorNzg6QlI6QlJBOkJSQVNJTDpQSUFVSTpQYXVsaXN0YW5hCis3OTpCUjpCUkE6QlJBU0lMOlBJQVVJOlBlZHJvIElJCis4MDpCUjpCUkE6QlJBU0lMOlBJQVVJOlBpY29zCis4MTpCUjpCUkE6QlJBU0lMOlBJQVVJOlBpbWVudGVpcmFzCis4MjpCUjpCUkE6QlJBU0lMOlBJQVVJOlBpbyBJWAorODM6QlI6QlJBOkJSQVNJTDpQSUFVSTpQaXJhY3VydWNhCis4NDpCUjpCUkE6QlJBU0lMOlBJQVVJOlBpcmlwaXJpCis4NTpCUjpCUkE6QlJBU0lMOlBJQVVJOlBvcnRvCis4NjpCUjpCUkE6QlJBU0lMOlBJQVVJOlByYXRhIGRvIFBpYXVpCis4NzpCUjpCUkE6QlJBU0lMOlBJQVVJOlJlZGVuY2FvIEd1cmd1ZWkKKzg4OkJSOkJSQTpCUkFTSUw6UElBVUk6UmVnZW5lcmFjYW8KKzg5OkJSOkJSQTpCUkFTSUw6UElBVUk6UmliZWlybyBHb25jYWx2ZQorOTA6QlI6QlJBOkJSQVNJTDpQSUFVSTpSaW8gR3JhbmRlIFBpYXVpCis5MTpCUjpCUkE6QlJBU0lMOlBJQVVJOlMuQW50b25pbyBMaXNib2EKKzkyOkJSOkJSQTpCUkFTSUw6UElBVUk6Uy5GZWxpeCBkbyBQaWF1aQorOTM6QlI6QlJBOkJSQVNJTDpQSUFVSTpTLkpvYW8gUGlhdWkKKzk0OkJSOkJSQTpCUkFTSUw6UElBVUk6Uy5Kb2FvIGRhIFNlcnJhCis5NTpCUjpCUkE6QlJBU0lMOlBJQVVJOlMuSm9zZSBkbyBQZWl4ZQorOTY6QlI6QlJBOkJSQVNJTDpQSUFVSTpTLkpvc2UgZG8gUGlhdWkKKzk3OkJSOkJSQTpCUkFTSUw6UElBVUk6Uy5NaWd1ZWwgVGFwdWlvCis5ODpCUjpCUkE6QlJBU0lMOlBJQVVJOlMuUGVkcm8gUGlhdWkKKzk5OkJSOkJSQTpCUkFTSUw6UElBVUk6Uy5SYWltdW5kbyBOb25hdAorMTAwOkJSOkJSQTpCUkFTSUw6UElBVUk6U2FudGEgTHV6CisxMDE6QlI6QlJBOkJSQVNJTDpQSUFVSTpTYW50byBGaWxvbWVuYQorMTAyOkJSOkJSQTpCUkFTSUw6UElBVUk6U2FvIEZjby5kbyBQaWF1aQorMTAzOkJSOkJSQTpCUkFTSUw6UElBVUk6U2FvIEdvbmNhbG8gUGlhdQorMTA0OkJSOkJSQTpCUkFTSUw6UElBVUk6U2FvIEp1bGlhbworMTA1OkJSOkJSQTpCUkFTSUw6UElBVUk6U2ltb2VzCisxMDY6QlI6QlJBOkJSQVNJTDpQSUFVSTpTaW1wbGljaW8gTWVuZGVzCisxMDc6QlI6QlJBOkJSQVNJTDpQSUFVSTpTb2NvcnJvIFBpYXVpCisxMDg6QlI6QlJBOkJSQVNJTDpQSUFVSTpTdGEuQ3J1eiBQaWF1aQorMTA5OkJSOkJSQTpCUkFTSUw6UElBVUk6U3RvLkluYWNpbyBQaWF1aQorMTEwOkJSOkJSQTpCUkFTSUw6UElBVUk6VGVyZXNpbmEKKzExMTpCUjpCUkE6QlJBU0lMOlBJQVVJOlVuaWFvCisxMTI6QlI6QlJBOkJSQVNJTDpQSUFVSTpVcnVjdWkKKzExMzpCUjpCUkE6QlJBU0lMOlBJQVVJOlZhbGVuY2EgZG8gUGlhdWkKKzExNDpCUjpCUkE6QlJBU0lMOlBJQVVJOlZhcnplYSBHcmFuZGUKKzE6QlI6QlJBOkJSQVNJTDpSSU8gR1JBTkRFIERPIE5PUlRFOkFDQVJJCisyOkJSOkJSQTpCUkFTSUw6UklPIEdSQU5ERSBETyBOT1JURTpBQ1UKKzM6QlI6QlJBOkJSQVNJTDpSSU8gR1JBTkRFIERPIE5PUlRFOkFGT05TTyBCRVpFUlJBCis0OkJSOkJSQTpCUkFTSUw6UklPIEdSQU5ERSBETyBOT1JURTpBR1VBIE5PVkEKKzU6QlI6QlJBOkJSQVNJTDpSSU8gR1JBTkRFIERPIE5PUlRFOkFMRVhBTkRSSUEKKzY6QlI6QlJBOkJSQVNJTDpSSU8gR1JBTkRFIERPIE5PUlRFOkFMVE8gRE8gUk9EUklHVUUKKzc6QlI6QlJBOkJSQVNJTDpSSU8gR1JBTkRFIERPIE5PUlRFOkFOR0lDT1MKKzg6QlI6QlJBOkJSQVNJTDpSSU8gR1JBTkRFIERPIE5PUlRFOkFOVE9OSU8gTUFSVElOUworOTpCUjpCUkE6QlJBU0lMOlJJTyBHUkFOREUgRE8gTk9SVEU6QVBPREkKKzEwOkJSOkJSQTpCUkFTSUw6UklPIEdSQU5ERSBETyBOT1JURTpBUkVJQSBCUkFOQ0EKKzExOkJSOkJSQTpCUkFTSUw6UklPIEdSQU5ERSBETyBOT1JURTpBUkVTCisxMjpCUjpCUkE6QlJBU0lMOlJJTyBHUkFOREUgRE8gTk9SVEU6QVVHVVNUTyBTRVZFUk8KKzEzOkJSOkJSQTpCUkFTSUw6UklPIEdSQU5ERSBETyBOT1JURTpCQUlBIEZPUk1PU0EKKzE0OkJSOkJSQTpCUkFTSUw6UklPIEdSQU5ERSBETyBOT1JURTpCQVJDRUxPTkEKKzE1OkJSOkJSQTpCUkFTSUw6UklPIEdSQU5ERSBETyBOT1JURTpCRU5UTyBGRVJOQU5ERVMKKzE2OkJSOkJSQTpCUkFTSUw6UklPIEdSQU5ERSBETyBOT1JURTpCT00gSkVTVVMKKzE3OkJSOkJSQTpCUkFTSUw6UklPIEdSQU5ERSBETyBOT1JURTpCUkVKSU5ITworMTg6QlI6QlJBOkJSQVNJTDpSSU8gR1JBTkRFIERPIE5PUlRFOkMuSk9BTyBQRVNTT0EKKzE5OkJSOkJSQTpCUkFTSUw6UklPIEdSQU5ERSBETyBOT1JURTpDQUlDQVJBIERPIFIuVkVOCisyMDpCUjpCUkE6QlJBU0lMOlJJTyBHUkFOREUgRE8gTk9SVEU6Q0FJQ08KKzIxOkJSOkJSQTpCUkFTSUw6UklPIEdSQU5ERSBETyBOT1JURTpDQU1QTyBSRURPTkRPCisyMjpCUjpCUkE6QlJBU0lMOlJJTyBHUkFOREUgRE8gTk9SVEU6Q0FOR1VBUkVUQU1BCisyMzpCUjpCUkE6QlJBU0lMOlJJTyBHUkFOREUgRE8gTk9SVEU6Q0FSQVVCQVMKKzI0OkJSOkJSQTpCUkFTSUw6UklPIEdSQU5ERSBETyBOT1JURTpDQVJOQVVCQSBET1MgRC4KKzI1OkJSOkJSQTpCUkFTSUw6UklPIEdSQU5ERSBETyBOT1JURTpDQVJOQVVCQUlTCisyNjpCUjpCUkE6QlJBU0lMOlJJTyBHUkFOREUgRE8gTk9SVEU6Q0VBUkEtTUlSSU0KKzI3OkJSOkJSQTpCUkFTSUw6UklPIEdSQU5ERSBETyBOT1JURTpDRVJSTy1DT1JBCisyODpCUjpCUkE6QlJBU0lMOlJJTyBHUkFOREUgRE8gTk9SVEU6Q09ST05FTCBFWkVRVUlFTAorMjk6QlI6QlJBOkJSQVNJTDpSSU8gR1JBTkRFIERPIE5PUlRFOkNSVVpFVEEKKzMwOkJSOkJSQTpCUkFTSUw6UklPIEdSQU5ERSBETyBOT1JURTpDVVJSQUlTIE5PVk9TCiszMTpCUjpCUkE6QlJBU0lMOlJJTyBHUkFOREUgRE8gTk9SVEU6RE9VVE9SIFNFVkVSSUFOTworMzI6QlI6QlJBOkJSQVNJTDpSSU8gR1JBTkRFIERPIE5PUlRFOkVOQ0FOVE8KKzMzOkJSOkJSQTpCUkFTSUw6UklPIEdSQU5ERSBETyBOT1JURTpFUVVBRE9SCiszNDpCUjpCUkE6QlJBU0lMOlJJTyBHUkFOREUgRE8gTk9SVEU6RVNQSVJJVE8gU0FOVE8KKzM1OkJSOkJSQTpCUkFTSUw6UklPIEdSQU5ERSBETyBOT1JURTpFWFRSRU1PWgorMzY6QlI6QlJBOkJSQVNJTDpSSU8gR1JBTkRFIERPIE5PUlRFOkYuIEdVRVJSQQorMzc6QlI6QlJBOkJSQVNJTDpSSU8gR1JBTkRFIERPIE5PUlRFOkZMT1JBTklBCiszODpCUjpCUkE6QlJBU0lMOlJJTyBHUkFOREUgRE8gTk9SVEU6RlJBTkNJU0NPIERBTlRBUworMzk6QlI6QlJBOkJSQVNJTDpSSU8gR1JBTkRFIERPIE5PUlRFOkZSVVRVT1NPIEdPTUVTCis0MDpCUjpCUkE6QlJBU0lMOlJJTyBHUkFOREUgRE8gTk9SVEU6Ry5ESVgtU0VQVCBST1NBRAorNDE6QlI6QlJBOkJSQVNJTDpSSU8gR1JBTkRFIERPIE5PUlRFOkdBTElOSE9TCis0MjpCUjpCUkE6QlJBU0lMOlJJTyBHUkFOREUgRE8gTk9SVEU6R09JQU5JTkhBCis0MzpCUjpCUkE6QlJBU0lMOlJJTyBHUkFOREUgRE8gTk9SVEU6R1JPU1NPUworNDQ6QlI6QlJBOkJSQVNJTDpSSU8gR1JBTkRFIERPIE5PUlRFOkdVQU1BUkUKKzQ1OkJSOkJSQTpCUkFTSUw6UklPIEdSQU5ERSBETyBOT1JURTpJRUxNTyBNQVJJTkhPCis0NjpCUjpCUkE6QlJBU0lMOlJJTyBHUkFOREUgRE8gTk9SVEU6SVBBTkdVQUNVCis0NzpCUjpCUkE6QlJBU0lMOlJJTyBHUkFOREUgRE8gTk9SVEU6SVBVRUlSQQorNDg6QlI6QlJBOkJSQVNJTDpSSU8gR1JBTkRFIERPIE5PUlRFOklUQVUKKzQ5OkJSOkJSQTpCUkFTSUw6UklPIEdSQU5ERSBETyBOT1JURTpKQUNBTkEKKzUwOkJSOkJSQTpCUkFTSUw6UklPIEdSQU5ERSBETyBOT1JURTpKQU5EQUlSQQorNTE6QlI6QlJBOkJSQVNJTDpSSU8gR1JBTkRFIERPIE5PUlRFOkpBTkRVSVMKKzUyOkJSOkJSQTpCUkFTSUw6UklPIEdSQU5ERSBETyBOT1JURTpKQU5VQVJJTyBDSUNDTworNTM6QlI6QlJBOkJSQVNJTDpSSU8gR1JBTkRFIERPIE5PUlRFOkpBUEkKKzU0OkJSOkJSQTpCUkFTSUw6UklPIEdSQU5ERSBETyBOT1JURTpKQVJESU0gREUgQU5HSUNPCis1NTpCUjpCUkE6QlJBU0lMOlJJTyBHUkFOREUgRE8gTk9SVEU6SkFSRElNIERPIFNFUklETworNTY6QlI6QlJBOkJSQVNJTDpSSU8gR1JBTkRFIERPIE5PUlRFOkpBUkRJTS1QSVJBTkhBUworNTc6QlI6QlJBOkJSQVNJTDpSSU8gR1JBTkRFIERPIE5PUlRFOkpPQU8gQ0FNQVJBCis1ODpCUjpCUkE6QlJBU0lMOlJJTyBHUkFOREUgRE8gTk9SVEU6Sk9BTyBESUFTCis1OTpCUjpCUkE6QlJBU0lMOlJJTyBHUkFOREUgRE8gTk9SVEU6Sk9TRSBEQSBQRU5IQQorNjA6QlI6QlJBOkJSQVNJTDpSSU8gR1JBTkRFIERPIE5PUlRFOkpVQ1VSVVRVCis2MTpCUjpCUkE6QlJBU0lMOlJJTyBHUkFOREUgRE8gTk9SVEU6SlVOQ08KKzYyOkJSOkJSQTpCUkFTSUw6UklPIEdSQU5ERSBETyBOT1JURTpMQUdPQSBEJ0FOVEEKKzYzOkJSOkJSQTpCUkFTSUw6UklPIEdSQU5ERSBETyBOT1JURTpMQUdPQSBERSBQRURSQVMKKzY0OkJSOkJSQTpCUkFTSUw6UklPIEdSQU5ERSBETyBOT1JURTpMQUdPQSBOT1ZBCis2NTpCUjpCUkE6QlJBU0lMOlJJTyBHUkFOREUgRE8gTk9SVEU6TEFHT0EgU0FMR0FEQQorNjY6QlI6QlJBOkJSQVNJTDpSSU8gR1JBTkRFIERPIE5PUlRFOkxBR09BUyBERSBWRUxIT1MKKzY3OkJSOkJSQTpCUkFTSUw6UklPIEdSQU5ERSBETyBOT1JURTpMQUpFUworNjg6QlI6QlJBOkJSQVNJTDpSSU8gR1JBTkRFIERPIE5PUlRFOkxBSkVTIFBJTlRBREFTCis2OTpCUjpCUkE6QlJBU0lMOlJJTyBHUkFOREUgRE8gTk9SVEU6TFVDUkVDSUEKKzcwOkJSOkJSQTpCUkFTSUw6UklPIEdSQU5ERSBETyBOT1JURTpMVUlTIEdPTUVTCis3MTpCUjpCUkE6QlJBU0lMOlJJTyBHUkFOREUgRE8gTk9SVEU6TGFnbworNzI6QlI6QlJBOkJSQVNJTDpSSU8gR1JBTkRFIERPIE5PUlRFOk1BQ0FJQkEKKzczOkJSOkJSQTpCUkFTSUw6UklPIEdSQU5ERSBETyBOT1JURTpNQUNBVQorNzQ6QlI6QlJBOkJSQVNJTDpSSU8gR1JBTkRFIERPIE5PUlRFOk1BUkNFTElOTyBWSUVJUkEKKzc1OkJSOkJSQTpCUkFTSUw6UklPIEdSQU5ERSBETyBOT1JURTpNQVJUSU5TCis3NjpCUjpCUkE6QlJBU0lMOlJJTyBHUkFOREUgRE8gTk9SVEU6TUFYQVJBTkdVQVBFCis3NzpCUjpCUkE6QlJBU0lMOlJJTyBHUkFOREUgRE8gTk9SVEU6TU9OVEFOSEFTCis3ODpCUjpCUkE6QlJBU0lMOlJJTyBHUkFOREUgRE8gTk9SVEU6TU9OVEUgQUxFR1JFCis3OTpCUjpCUkE6QlJBU0lMOlJJTyBHUkFOREUgRE8gTk9SVEU6TU9OVEUtR0FNRUxFSVJBUworODA6QlI6QlJBOkJSQVNJTDpSSU8gR1JBTkRFIERPIE5PUlRFOk1PU1NPUk8KKzgxOkJSOkJSQTpCUkFTSUw6UklPIEdSQU5ERSBETyBOT1JURTpOQVRBTAorODI6QlI6QlJBOkJSQVNJTDpSSU8gR1JBTkRFIERPIE5PUlRFOk5JU0lBIEZMT1JFU1RBCis4MzpCUjpCUkE6QlJBU0lMOlJJTyBHUkFOREUgRE8gTk9SVEU6Tk9WQSBDUlVaCis4NDpCUjpCUkE6QlJBU0lMOlJJTyBHUkFOREUgRE8gTk9SVEU6T0xITyBEIkFHVUEgRE8gQgorODU6QlI6QlJBOkJSQVNJTDpSSU8gR1JBTkRFIERPIE5PUlRFOk9VUk8gQlJBTkNPCis4NjpCUjpCUkE6QlJBU0lMOlJJTyBHUkFOREUgRE8gTk9SVEU6UC4gRC4gRkVSUk9TCis4NzpCUjpCUkE6QlJBU0lMOlJJTyBHUkFOREUgRE8gTk9SVEU6UEFSQU5BCis4ODpCUjpCUkE6QlJBU0lMOlJJTyBHUkFOREUgRE8gTk9SVEU6UEFSQVUKKzg5OkJSOkJSQTpCUkFTSUw6UklPIEdSQU5ERSBETyBOT1JURTpQQVJBWklOSE8KKzkwOkJSOkJSQTpCUkFTSUw6UklPIEdSQU5ERSBETyBOT1JURTpQQVJFTEhBUworOTE6QlI6QlJBOkJSQVNJTDpSSU8gR1JBTkRFIERPIE5PUlRFOlBBUk5BTUlSSU0KKzkyOkJSOkJSQTpCUkFTSUw6UklPIEdSQU5ERSBETyBOT1JURTpQQVNTQSBFIEZJQ0EKKzkzOkJSOkJSQTpCUkFTSUw6UklPIEdSQU5ERSBETyBOT1JURTpQQVNTQUdFTQorOTQ6QlI6QlJBOkJSQVNJTDpSSU8gR1JBTkRFIERPIE5PUlRFOlBBVFUKKzk1OkJSOkJSQTpCUkFTSUw6UklPIEdSQU5ERSBETyBOT1JURTpQRURSQSBHUkFOREUKKzk2OkJSOkJSQTpCUkFTSUw6UklPIEdSQU5ERSBETyBOT1JURTpQRURSQSBQUkVUQQorOTc6QlI6QlJBOkJSQVNJTDpSSU8gR1JBTkRFIERPIE5PUlRFOlBFRFJPIEFWRUxJTk8KKzk4OkJSOkJSQTpCUkFTSUw6UklPIEdSQU5ERSBETyBOT1JURTpQRURSTyBWRUxITworOTk6QlI6QlJBOkJSQVNJTDpSSU8gR1JBTkRFIERPIE5PUlRFOlBFTkRFTkNJQVMKKzEwMDpCUjpCUkE6QlJBU0lMOlJJTyBHUkFOREUgRE8gTk9SVEU6UElMT0VTCisxMDE6QlI6QlJBOkJSQVNJTDpSSU8gR1JBTkRFIERPIE5PUlRFOlBPQ08gQlJBTkNPCisxMDI6QlI6QlJBOkJSQVNJTDpSSU8gR1JBTkRFIERPIE5PUlRFOlBPUlRBTEVHUkUKKzEwMzpCUjpCUkE6QlJBU0lMOlJJTyBHUkFOREUgRE8gTk9SVEU6UFJFUy4gSlVTQ0VMSU5PCisxMDQ6QlI6QlJBOkJSQVNJTDpSSU8gR1JBTkRFIERPIE5PUlRFOlBVUkVaQQorMTA1OkJSOkJSQTpCUkFTSUw6UklPIEdSQU5ERSBETyBOT1JURTpSLiBHT0RFSVJPCisxMDY6QlI6QlJBOkJSQVNJTDpSSU8gR1JBTkRFIERPIE5PUlRFOlJBRkFFTCBGRVJOQU5ERVMKKzEwNzpCUjpCUkE6QlJBU0lMOlJJTyBHUkFOREUgRE8gTk9SVEU6UklBQ0hPIERBIENSVVoKKzEwODpCUjpCUkE6QlJBU0lMOlJJTyBHUkFOREUgRE8gTk9SVEU6UklBQ0hPIFNBTlRBTkEKKzEwOTpCUjpCUkE6QlJBU0lMOlJJTyBHUkFOREUgRE8gTk9SVEU6UklBQ0hVRUxPCisxMTA6QlI6QlJBOkJSQVNJTDpSSU8gR1JBTkRFIERPIE5PUlRFOlJPRE9MRk8gRkVSTkFOREUKKzExMTpCUjpCUkE6QlJBU0lMOlJJTyBHUkFOREUgRE8gTk9SVEU6UlVZIEJBUkJPU0EKKzExMjpCUjpCUkE6QlJBU0lMOlJJTyBHUkFOREUgRE8gTk9SVEU6U0FOVEEgQ1JVWgorMTEzOkJSOkJSQTpCUkFTSUw6UklPIEdSQU5ERSBETyBOT1JURTpTQU5UQU5BCisxMTQ6QlI6QlJBOkJSQVNJTDpSSU8gR1JBTkRFIERPIE5PUlRFOlNBTlRBTkEgRE8gTUFUT1MKKzExNTpCUjpCUkE6QlJBU0lMOlJJTyBHUkFOREUgRE8gTk9SVEU6U0FOVE8gQU5UT05JTworMTE2OkJSOkJSQTpCUkFTSUw6UklPIEdSQU5ERSBETyBOT1JURTpTQU8gQkVOVE8gRE8gTlRFCisxMTc6QlI6QlJBOkJSQVNJTDpSSU8gR1JBTkRFIERPIE5PUlRFOlNBTyBCRU5UTyBUUkFJUkkKKzExODpCUjpCUkE6QlJBU0lMOlJJTyBHUkFOREUgRE8gTk9SVEU6U0FPIEZDTy4gT0VTVEUKKzExOTpCUjpCUkE6QlJBU0lMOlJJTyBHUkFOREUgRE8gTk9SVEU6U0FPIEZFUk5BTkRPCisxMjA6QlI6QlJBOkJSQVNJTDpSSU8gR1JBTkRFIERPIE5PUlRFOlNBTyBHT05DQUxPIERPIEEKKzEyMTpCUjpCUkE6QlJBU0lMOlJJTyBHUkFOREUgRE8gTk9SVEU6U0FPIEouQ0FNUEVTVFJFCisxMjI6QlI6QlJBOkJSQVNJTDpSSU8gR1JBTkRFIERPIE5PUlRFOlNBTyBKT0FPIEQuIFMuCisxMjM6QlI6QlJBOkJSQVNJTDpSSU8gR1JBTkRFIERPIE5PUlRFOlNBTyBKT1NFIERFIE0uCisxMjQ6QlI6QlJBOkJSQVNJTDpSSU8gR1JBTkRFIERPIE5PUlRFOlNBTyBKT1NFIFNFUklETworMTI1OkJSOkJSQTpCUkFTSUw6UklPIEdSQU5ERSBETyBOT1JURTpTQU8gTUlHVUVMCisxMjY6QlI6QlJBOkJSQVNJTDpSSU8gR1JBTkRFIERPIE5PUlRFOlNBTyBQQVVMTyBQT1RFTkcKKzEyNzpCUjpCUkE6QlJBU0lMOlJJTyBHUkFOREUgRE8gTk9SVEU6U0FPIFBFRFJPCisxMjg6QlI6QlJBOkJSQVNJTDpSSU8gR1JBTkRFIERPIE5PUlRFOlNBTyBSQUZBRUwKKzEyOTpCUjpCUkE6QlJBU0lMOlJJTyBHUkFOREUgRE8gTk9SVEU6U0FPIFRPTUUKKzEzMDpCUjpCUkE6QlJBU0lMOlJJTyBHUkFOREUgRE8gTk9SVEU6U0FPIFZJQ0VOVEUKKzEzMTpCUjpCUkE6QlJBU0lMOlJJTyBHUkFOREUgRE8gTk9SVEU6U0VOLiBFTE9JIFNPVVpBCisxMzI6QlI6QlJBOkJSQVNJTDpSSU8gR1JBTkRFIERPIE5PUlRFOlNFTi4gR0VPUkdJTk8gQS4KKzEzMzpCUjpCUkE6QlJBU0lMOlJJTyBHUkFOREUgRE8gTk9SVEU6U0VSUkEgTkVHUkEgRE8gTgorMTM0OkJSOkJSQTpCUkFTSUw6UklPIEdSQU5ERSBETyBOT1JURTpTRVJSQSBTQU8gQkVOVE8KKzEzNTpCUjpCUkE6QlJBU0lMOlJJTyBHUkFOREUgRE8gTk9SVEU6U0VSUklOSEEKKzEzNjpCUjpCUkE6QlJBU0lMOlJJTyBHUkFOREUgRE8gTk9SVEU6U0VWRVJJQU5PIE1FTE8KKzEzNzpCUjpCUkE6QlJBU0lMOlJJTyBHUkFOREUgRE8gTk9SVEU6U0lUSU8gTk9WTworMTM4OkJSOkJSQTpCUkFTSUw6UklPIEdSQU5ERSBETyBOT1JURTpUQUJVTEVJUk8gR1JBTkRFCisxMzk6QlI6QlJBOkJSQVNJTDpSSU8gR1JBTkRFIERPIE5PUlRFOlRBSVBVCisxNDA6QlI6QlJBOkJSQVNJTDpSSU8gR1JBTkRFIERPIE5PUlRFOlRBTkdBUkEKKzE0MTpCUjpCUkE6QlJBU0lMOlJJTyBHUkFOREUgRE8gTk9SVEU6VEVORU5URSBBTkFOSUFTCisxNDI6QlI6QlJBOkJSQVNJTDpSSU8gR1JBTkRFIERPIE5PUlRFOlRJQkFVIERPIFNVTAorMTQzOkJSOkJSQTpCUkFTSUw6UklPIEdSQU5ERSBETyBOT1JURTpUSU1CQVVCQSBET1MgQi4KKzE0NDpCUjpCUkE6QlJBU0lMOlJJTyBHUkFOREUgRE8gTk9SVEU6VE9VUk9TCisxNDU6QlI6QlJBOkJSQVNJTDpSSU8gR1JBTkRFIERPIE5PUlRFOlVNQVJJWkFMCisxNDY6QlI6QlJBOkJSQVNJTDpSSU8gR1JBTkRFIERPIE5PUlRFOlVQQU5FTUEKKzE0NzpCUjpCUkE6QlJBU0lMOlJJTyBHUkFOREUgRE8gTk9SVEU6VkFSWkVBCisxNDg6QlI6QlJBOkJSQVNJTDpSSU8gR1JBTkRFIERPIE5PUlRFOlZJQ09TQQorMTQ5OkJSOkJSQTpCUkFTSUw6UklPIEdSQU5ERSBETyBOT1JURTpWSUxBIEZMT1IKKzE6QlI6QlJBOkJSQVNJTDpHT0lBUzpBQkFESUFOSUEKKzI6QlI6QlJBOkJSQVNJTDpHT0lBUzpBR1VBIExJTVBBCiszOkJSOkJSQTpCUkFTSUw6R09JQVM6QUxFWEFOSUEKKzQ6QlI6QlJBOkJSQVNJTDpHT0lBUzpBTE9BTkRJQQorNTpCUjpCUkE6QlJBU0lMOkdPSUFTOkFMVE8gUEFSQUlTTyBERQorNjpCUjpCUkE6QlJBU0lMOkdPSUFTOkFMVk9SQURBIEROT1JUJworNzpCUjpCUkE6QlJBU0lMOkdPSUFTOkFNT1JJTk9QT0xJUworODpCUjpCUkE6QlJBU0lMOkdPSUFTOkFOQVBPTElTCis5OkJSOkJSQTpCUkFTSUw6R09JQVM6QU5IQU5HVUVSQQorMTA6QlI6QlJBOkJSQVNJTDpHT0lBUzpBTklDVU5TCisxMTpCUjpCUkE6QlJBU0lMOkdPSUFTOkFQQVJFQ0lEQSBEJ0dPSQorMTI6QlI6QlJBOkJSQVNJTDpHT0lBUzpBUE9SRQorMTM6QlI6QlJBOkJSQVNJTDpHT0lBUzpBUkFDVQorMTQ6QlI6QlJBOkJSQVNJTDpHT0lBUzpBUkFHQVJDQVMKKzE1OkJSOkJSQTpCUkFTSUw6R09JQVM6QVJBR09JQU5JQQorMTY6QlI6QlJBOkJSQVNJTDpHT0lBUzpBUlVBTkEKKzE3OkJSOkJSQTpCUkFTSUw6R09JQVM6QVVSSUxBTkRJQQorMTg6QlI6QlJBOkJSQVNJTDpHT0lBUzpBVkVMSU5PUE9MSVMKKzE5OkJSOkJSQTpCUkFTSUw6R09JQVM6QkFMSVpBCisyMDpCUjpCUkE6QlJBU0lMOkdPSUFTOkJBUlJPIEFMVE8KKzIxOkJSOkJSQTpCUkFTSUw6R09JQVM6QkVMQSBWSVNUQSBEYEdPCisyMjpCUjpCUkE6QlJBU0lMOkdPSUFTOkJPTSBKQVJESU0gRCdHTworMjM6QlI6QlJBOkJSQVNJTDpHT0lBUzpCT00gSkVTVVMgRCdHT0kKKzI0OkJSOkJSQTpCUkFTSUw6R09JQVM6QlJBU0FCUkFOVEVTCisyNTpCUjpCUkE6QlJBU0lMOkdPSUFTOkJSQVNJTElBCisyNjpCUjpCUkE6QlJBU0lMOkdPSUFTOkJSSVRBTklBCisyNzpCUjpCUkE6QlJBU0lMOkdPSUFTOkJVUklUSSBBTEVHUkUKKzI4OkJSOkJSQTpCUkFTSUw6R09JQVM6Q0FCRUNFSVJBUworMjk6QlI6QlJBOkJSQVNJTDpHT0lBUzpDQUNIT0VJUkEgQUxUQQorMzA6QlI6QlJBOkJSQVNJTDpHT0lBUzpDQUNIT0VJUkEgRCdHT0kKKzMxOkJSOkJSQTpCUkFTSUw6R09JQVM6Q0FDVQorMzI6QlI6QlJBOkJSQVNJTDpHT0lBUzpDQUlBUE9OSUEKKzMzOkJSOkJSQTpCUkFTSUw6R09JQVM6Q0FMREFTIE5PVkFTCiszNDpCUjpCUkE6QlJBU0lMOkdPSUFTOkNBTVBFU1RSRSBEJ0dPSQorMzU6QlI6QlJBOkJSQVNJTDpHT0lBUzpDQU1QSU5PUlRFCiszNjpCUjpCUkE6QlJBU0lMOkdPSUFTOkNBTVBPIEFMRUdSRSBEJworMzc6QlI6QlJBOkJSQVNJTDpHT0lBUzpDQU1QT1MgQkVMT1MKKzM4OkJSOkJSQTpCUkFTSUw6R09JQVM6Q0FSTU8gRCdSSU8gVkVSCiszOTpCUjpCUkE6QlJBU0lMOkdPSUFTOkNBVEFMQU8KKzQwOkJSOkJSQTpCUkFTSUw6R09JQVM6Q0FUVVJBSQorNDE6QlI6QlJBOkJSQVNJTDpHT0lBUzpDQVZBTENBTlRFCis0MjpCUjpCUkE6QlJBU0lMOkdPSUFTOkNFUkVTCis0MzpCUjpCUkE6QlJBU0lMOkdPSUFTOkNJUklOT1BPTElTCis0NDpCUjpCUkE6QlJBU0lMOkdPSUFTOkNPUlJFR08gRCdPVVJPCis0NTpCUjpCUkE6QlJBU0lMOkdPSUFTOkNPUlVNQkEgREUgR09JQQorNDY6QlI6QlJBOkJSQVNJTDpHT0lBUzpDT1JVTUJBSUJBCis0NzpCUjpCUkE6QlJBU0lMOkdPSUFTOkNSSVNUQUxJTkEKKzQ4OkJSOkJSQTpCUkFTSUw6R09JQVM6Q1JJU1RJQU5PUE9MSVMKKzQ5OkJSOkJSQTpCUkFTSUw6R09JQVM6Q1JJWEFTCis1MDpCUjpCUkE6QlJBU0lMOkdPSUFTOkNST01JTklBCis1MTpCUjpCUkE6QlJBU0lMOkdPSUFTOkNVTUFSSQorNTI6QlI6QlJBOkJSQVNJTDpHT0lBUzpEQU1JQU5PUE9MSVMKKzUzOkJSOkJSQTpCUkFTSUw6R09JQVM6REFNT0xBTkRJQQorNTQ6QlI6QlJBOkJSQVNJTDpHT0lBUzpEQVZJTk9QT0xJUworNTU6QlI6QlJBOkJSQVNJTDpHT0lBUzpESU9SQU1BCis1NjpCUjpCUkE6QlJBU0lMOkdPSUFTOkVERUlBCis1NzpCUjpCUkE6QlJBU0lMOkdPSUFTOkVTVFJFTEEgRE5PUlRFCis1ODpCUjpCUkE6QlJBU0lMOkdPSUFTOkZBWkVOREEgTk9WQQorNTk6QlI6QlJBOkJSQVNJTDpHT0lBUzpGSVJNSU5PUE9MSVMKKzYwOkJSOkJSQTpCUkFTSUw6R09JQVM6RkxPUkVTIERFIEdPSUFTCis2MTpCUjpCUkE6QlJBU0lMOkdPSUFTOkZPUk1PU0EKKzYyOkJSOkJSQTpCUkFTSUw6R09JQVM6Rk9STU9TTworNjM6QlI6QlJBOkJSQVNJTDpHT0lBUzpHT0lBTkFQT0xJUworNjQ6QlI6QlJBOkJSQVNJTDpHT0lBUzpHT0lBTkRJUkEKKzY1OkJSOkJSQTpCUkFTSUw6R09JQVM6R09JQU5FU0lBCis2NjpCUjpCUkE6QlJBU0lMOkdPSUFTOkdPSUFOSUEKKzY3OkJSOkJSQTpCUkFTSUw6R09JQVM6R09JQU5JUkEKKzY4OkJSOkJSQTpCUkFTSUw6R09JQVM6R09JQVMKKzY5OkJSOkJSQTpCUkFTSUw6R09JQVM6R09JQVRVQkEKKzcwOkJSOkJSQTpCUkFTSUw6R09JQVM6R1VBUE8KKzcxOkJSOkJSQTpCUkFTSUw6R09JQVM6R1VBUkFOSSBEJ0dPSUFTCis3MjpCUjpCUkE6QlJBU0lMOkdPSUFTOkhFSVRPUkFJCis3MzpCUjpCUkE6QlJBU0lMOkdPSUFTOkhJRFJPTEFORElBCis3NDpCUjpCUkE6QlJBU0lMOkdPSUFTOkhJRFJPTElOQQorNzU6QlI6QlJBOkJSQVNJTDpHT0lBUzpJQUNJQVJBCis3NjpCUjpCUkE6QlJBU0lMOkdPSUFTOklOSFVNQVMKKzc3OkJSOkJSQTpCUkFTSUw6R09JQVM6SVBBTUVSSQorNzg6QlI6QlJBOkJSQVNJTDpHT0lBUzpJUE9SQQorNzk6QlI6QlJBOkJSQVNJTDpHT0lBUzpJU1JBRUxBTkRJQQorODA6QlI6QlJBOkJSQVNJTDpHT0lBUzpJVEFCRVJBSQorODE6QlI6QlJBOkJSQVNJTDpHT0lBUzpJVEFHVUFSVQorODI6QlI6QlJBOkJSQVNJTDpHT0lBUzpJVEFKQQorODM6QlI6QlJBOkJSQVNJTDpHT0lBUzpJVEFQQUNJCis4NDpCUjpCUkE6QlJBU0lMOkdPSUFTOklUQVBJUkFQVUEKKzg1OkJSOkJSQTpCUkFTSUw6R09JQVM6SVRBUFVSQU5HQQorODY6QlI6QlJBOkJSQVNJTDpHT0lBUzpJVEFSVU1BCis4NzpCUjpCUkE6QlJBU0lMOkdPSUFTOklUQVVDVQorODg6QlI6QlJBOkJSQVNJTDpHT0lBUzpJVFVNQklBUkEKKzg5OkJSOkJSQTpCUkFTSUw6R09JQVM6SVZPTEFORElBCis5MDpCUjpCUkE6QlJBU0lMOkdPSUFTOkpBTkRBSUEKKzkxOkJSOkJSQTpCUkFTSUw6R09JQVM6SkFSQUdVQQorOTI6QlI6QlJBOkJSQVNJTDpHT0lBUzpKQVRBSQorOTM6QlI6QlJBOkJSQVNJTDpHT0lBUzpKQVVQQUNJCis5NDpCUjpCUkE6QlJBU0lMOkdPSUFTOkpPVklBTklBCis5NTpCUjpCUkE6QlJBU0lMOkdPSUFTOkpVQ0FSQQorOTY6QlI6QlJBOkJSQVNJTDpHT0lBUzpMRU9QT0xETyBEJ0JVTEgKKzk3OkJSOkJSQTpCUkFTSUw6R09JQVM6TFVaSUFOSUEKKzk4OkJSOkJSQTpCUkFTSUw6R09JQVM6TUFJUklQT1RBQkEKKzk5OkJSOkJSQTpCUkFTSUw6R09JQVM6TUFNQkFJCisxMDA6QlI6QlJBOkJSQVNJTDpHT0lBUzpNQVJBIFJPU0EKKzEwMTpCUjpCUkE6QlJBU0lMOkdPSUFTOk1BUlpBR0FPCisxMDI6QlI6QlJBOkJSQVNJTDpHT0lBUzpNQVRFSVJBCisxMDM6QlI6QlJBOkJSQVNJTDpHT0lBUzpNQVVSSUxBTkRJQQorMTA0OkJSOkJSQTpCUkFTSUw6R09JQVM6TUlORUlST1MKKzEwNTpCUjpCUkE6QlJBU0lMOkdPSUFTOk1PSVBPUkEKKzEwNjpCUjpCUkE6QlJBU0lMOkdPSUFTOk1PTlRFIEFMRUdSRSBEJworMTA3OkJSOkJSQTpCUkFTSUw6R09JQVM6TU9OVEVTIENMQVJPUyBHCisxMDg6QlI6QlJBOkJSQVNJTDpHT0lBUzpNT1JSSU5IT1MKKzEwOTpCUjpCUkE6QlJBU0lMOkdPSUFTOk1PU1NBTUVERVMKKzExMDpCUjpCUkE6QlJBU0lMOkdPSUFTOk1PWkFSTEFORElBCisxMTE6QlI6QlJBOkJSQVNJTDpHT0lBUzpNVVRVTk9QT0xJUworMTEyOkJSOkJSQTpCUkFTSUw6R09JQVM6TkFaQVJJTworMTEzOkJSOkJSQTpCUkFTSUw6R09JQVM6TkVST1BPTElTCisxMTQ6QlI6QlJBOkJSQVNJTDpHT0lBUzpOSVFVRUxBTkRJQQorMTE1OkJSOkJSQTpCUkFTSUw6R09JQVM6Tk9WQSBBTUVSSUNBCisxMTY6QlI6QlJBOkJSQVNJTDpHT0lBUzpOT1ZBIEFVUk9SQQorMTE3OkJSOkJSQTpCUkFTSUw6R09JQVM6Tk9WQSBST01BCisxMTg6QlI6QlJBOkJSQVNJTDpHT0lBUzpOT1ZBIFZFTkVaQQorMTE5OkJSOkJSQTpCUkFTSUw6R09JQVM6Tk9WTyBCUkFTSUwKKzEyMDpCUjpCUkE6QlJBU0lMOkdPSUFTOk9SSVpPTkEKKzEyMTpCUjpCUkE6QlJBU0lMOkdPSUFTOk9VUk8gVkVSREUgRCdHTworMTIyOkJSOkJSQTpCUkFTSUw6R09JQVM6T1VWSURPUgorMTIzOkJSOkJSQTpCUkFTSUw6R09JQVM6UEFEUkUgQkVSTkFSRE8KKzEyNDpCUjpCUkE6QlJBU0lMOkdPSUFTOlBBTE1FSVJBUyBEJ0dPSQorMTI1OkJSOkJSQTpCUkFTSUw6R09JQVM6UEFMTUVMTworMTI2OkJSOkJSQTpCUkFTSUw6R09JQVM6UEFMTUlOT1BPTElTCisxMjc6QlI6QlJBOkJSQVNJTDpHT0lBUzpQQU5BTUEKKzEyODpCUjpCUkE6QlJBU0lMOkdPSUFTOlBBUkFVTkEKKzEyOTpCUjpCUkE6QlJBU0lMOkdPSUFTOlBFVFJPTElOQSBEJ0dPSQorMTMwOkJSOkJSQTpCUkFTSUw6R09JQVM6UElMQVIgREUgR09JQVMKKzEzMTpCUjpCUkE6QlJBU0lMOkdPSUFTOlBJUkFDQU5KVUJBCisxMzI6QlI6QlJBOkJSQVNJTDpHT0lBUzpQSVJBTkhBUworMTMzOkJSOkJSQTpCUkFTSUw6R09JQVM6UElSRU5PUE9MSVMKKzEzNDpCUjpCUkE6QlJBU0lMOkdPSUFTOlBJUkVTIERPIFJJTworMTM1OkJSOkJSQTpCUkFTSUw6R09JQVM6UExBTkFMVElOQQorMTM2OkJSOkJSQTpCUkFTSUw6R09JQVM6UE9OVEFMSU5BCisxMzc6QlI6QlJBOkJSQVNJTDpHT0lBUzpQT1JBTkdBVFUKKzEzODpCUjpCUkE6QlJBU0lMOkdPSUFTOlBPUlRFTEFORElBCisxMzk6QlI6QlJBOkJSQVNJTDpHT0lBUzpQT1NTRQorMTQwOkJSOkJSQTpCUkFTSUw6R09JQVM6UVVJUklOT1BPTElTCisxNDE6QlI6QlJBOkJSQVNJTDpHT0lBUzpSSUFMTUEKKzE0MjpCUjpCUkE6QlJBU0lMOkdPSUFTOlJJQU5BUE9MSVMKKzE0MzpCUjpCUkE6QlJBU0lMOkdPSUFTOlJJTyBWRVJERQorMTQ0OkJSOkJSQTpCUkFTSUw6R09JQVM6UlVCSUFUQUJBCisxNDU6QlI6QlJBOkJSQVNJTDpHT0lBUzpTLkJBUkJBUkEgRCdHT0kKKzE0NjpCUjpCUkE6QlJBU0lMOkdPSUFTOlMuRkNPLkRFIEdPSUFTCisxNDc6QlI6QlJBOkJSQVNJTDpHT0lBUzpTLkhFTEVOQSBEJ0dPSUEKKzE0ODpCUjpCUkE6QlJBU0lMOkdPSUFTOlMuSk9BTyBEQUxJQU5DCisxNDk6QlI6QlJBOkJSQVNJTDpHT0lBUzpTLkxVSVMgRCdNT05URVMKKzE1MDpCUjpCUkE6QlJBU0lMOkdPSUFTOlMuTUlHVUVMIERBUkFHVQorMTUxOkJSOkJSQTpCUkFTSUw6R09JQVM6Uy5SSVRBIEQnQVJBR1VBCisxNTI6QlI6QlJBOkJSQVNJTDpHT0lBUzpTLlJPU0EgREUgR09JQVMKKzE1MzpCUjpCUkE6QlJBU0lMOkdPSUFTOlMuVEVSRVNBIERHT0lBUworMTU0OkJSOkJSQTpCUkFTSUw6R09JQVM6Uy5URVJFWklOSEEgREcKKzE1NTpCUjpCUkE6QlJBU0lMOkdPSUFTOlNBTkNMRVJMQU5ESUEKKzE1NjpCUjpCUkE6QlJBU0lMOkdPSUFTOlNBTyBET01JTkdPUworMTU3OkJSOkJSQTpCUkFTSUw6R09JQVM6U0FPIFNJTUFPCisxNTg6QlI6QlJBOkJSQVNJTDpHT0lBUzpTRVJSQU5PUE9MSVMKKzE1OTpCUjpCUkE6QlJBU0lMOkdPSUFTOlNJTFZBTklBCisxNjA6QlI6QlJBOkJSQVNJTDpHT0lBUzpTSVRJTyBEJ0FCQURJQQorMTYxOkJSOkJSQTpCUkFTSUw6R09JQVM6U1RBLkNSVVogRCdHT0lBCisxNjI6QlI6QlJBOkJSQVNJTDpHT0lBUzpUQVFVQVJBTCBEJ0dPSUEKKzE2MzpCUjpCUkE6QlJBU0lMOkdPSUFTOlRSRVMgUkFOQ0hPUworMTY0OkJSOkJSQTpCUkFTSUw6R09JQVM6VFJJTkRBREUKKzE2NTpCUjpCUkE6QlJBU0lMOkdPSUFTOlRVUlZBTklBCisxNjY6QlI6QlJBOkJSQVNJTDpHT0lBUzpVUlVBQ1UKKzE2NzpCUjpCUkE6QlJBU0lMOkdPSUFTOlVSVUFOQQorMTY4OkJSOkJSQTpCUkFTSUw6R09JQVM6VVJVVEFJCisxNjk6QlI6QlJBOkJSQVNJTDpHT0lBUzpWQVJKQU8KKzE3MDpCUjpCUkE6QlJBU0lMOkdPSUFTOlZJQU5PUE9MSVMKKzE6QlI6QlJBOkJSQVNJTDpNQVRPIEdST1NTTzpBQ09SSVpBTAorMjpCUjpCUkE6QlJBU0lMOk1BVE8gR1JPU1NPOkFMVE8gQVJBR1VBSUEKKzM6QlI6QlJBOkJSQVNJTDpNQVRPIEdST1NTTzpBTFRPIEdBUkNBUworNDpCUjpCUkE6QlJBU0lMOk1BVE8gR1JPU1NPOkFMVE8gUEFSQUdVQUkKKzU6QlI6QlJBOkJSQVNJTDpNQVRPIEdST1NTTzpBUkFHVUFJTkhBCis2OkJSOkJSQTpCUkFTSUw6TUFUTyBHUk9TU086QVJFTkFQT0xJUworNzpCUjpCUkE6QlJBU0lMOk1BVE8gR1JPU1NPOkFSSVBVQU5BCis4OkJSOkJSQTpCUkFTSUw6TUFUTyBHUk9TU086QkFSQU8gREUgTUVMR0FDCis5OkJSOkJSQTpCUkFTSUw6TUFUTyBHUk9TU086QkFSUkEgRE8gR0FSQ0FTCisxMDpCUjpCUkE6QlJBU0lMOk1BVE8gR1JPU1NPOkJBUlJBIERPUyBCVUdSRQorMTE6QlI6QlJBOkJSQVNJTDpNQVRPIEdST1NTTzpDQUNFUkVTCisxMjpCUjpCUkE6QlJBU0lMOk1BVE8gR1JPU1NPOkNIQVBBREEgRE9TIEcuCisxMzpCUjpCUkE6QlJBU0lMOk1BVE8gR1JPU1NPOkNVSUFCQQorMTQ6QlI6QlJBOkJSQVNJTDpNQVRPIEdST1NTTzpESUFNQU5USU5PCisxNTpCUjpCUkE6QlJBU0lMOk1BVE8gR1JPU1NPOkRPTSBBUVVJTk8KKzE2OkJSOkJSQTpCUkFTSUw6TUFUTyBHUk9TU086R1JBTCBDQVJORUlSTworMTc6QlI6QlJBOkJSQVNJTDpNQVRPIEdST1NTTzpHVUlSQVRJTkdBCisxODpCUjpCUkE6QlJBU0lMOk1BVE8gR1JPU1NPOklUSVFVSVJBCisxOTpCUjpCUkE6QlJBU0lMOk1BVE8gR1JPU1NPOkpBQ0lBUkEKKzIwOkJSOkJSQTpCUkFTSUw6TUFUTyBHUk9TU086TFVDSUFSQQorMjE6QlI6QlJBOkJSQVNJTDpNQVRPIEdST1NTTzpNQVRPIEdST1NTTworMjI6QlI6QlJBOkJSQVNJTDpNQVRPIEdST1NTTzpNSVJBU1NPTCBETyBPLgorMjM6QlI6QlJBOkJSQVNJTDpNQVRPIEdST1NTTzpOLlMuIExJVlJBTUVOVE8KKzI0OkJSOkJSQTpCUkFTSUw6TUFUTyBHUk9TU086Tk9CUkVTCisyNTpCUjpCUkE6QlJBU0lMOk1BVE8gR1JPU1NPOk5PUlRFTEFORElBCisyNjpCUjpCUkE6QlJBU0lMOk1BVE8gR1JPU1NPOlBFRFJBIFBSRVRBCisyNzpCUjpCUkE6QlJBU0lMOk1BVE8gR1JPU1NPOlBPQ09ORQorMjg6QlI6QlJBOkJSQVNJTDpNQVRPIEdST1NTTzpQT05URSBCUkFOQ0EKKzI5OkJSOkJSQTpCUkFTSUw6TUFUTyBHUk9TU086UE9YT1JFTworMzA6QlI6QlJBOkJSQVNJTDpNQVRPIEdST1NTTzpQVE8gRE9TIEdBVUNIT1MKKzMxOkJSOkJSQTpCUkFTSUw6TUFUTyBHUk9TU086Uk9ORE9OT1BPTElTCiszMjpCUjpCUkE6QlJBU0lMOk1BVE8gR1JPU1NPOlJPU0FSSU8gT0VTVEUKKzMzOkJSOkJSQTpCUkFTSUw6TUFUTyBHUk9TU086Uy4gQS5ETyBMRVZFUkdFCiszNDpCUjpCUkE6QlJBU0lMOk1BVE8gR1JPU1NPOlNBTyBGRUxJWCBYSU5HVQorMzU6QlI6QlJBOkJSQVNJTDpNQVRPIEdST1NTTzpUQU5HQVJBIERBIFNFUlIKKzM2OkJSOkJSQTpCUkFTSUw6TUFUTyBHUk9TU086VEVTT1VSTworMzc6QlI6QlJBOkJSQVNJTDpNQVRPIEdST1NTTzpUT1JJWE9SRVUKKzM4OkJSOkJSQTpCUkFTSUw6TUFUTyBHUk9TU086VkFSWkVBIEdSQU5ERQorMTpCUjpCUkE6QlJBU0lMOlJJTyBHUkFOREUgRE8gU1VMOkFndWRvCisyOkJSOkJSQTpCUkFTSUw6UklPIEdSQU5ERSBETyBTVUw6QWp1cmljYWJhCiszOkJSOkJSQTpCUkFTSUw6UklPIEdSQU5ERSBETyBTVUw6QWxlY3JpbQorNDpCUjpCUkE6QlJBU0lMOlJJTyBHUkFOREUgRE8gU1VMOkFsZWdyZXRlCis1OkJSOkJSQTpCUkFTSUw6UklPIEdSQU5ERSBETyBTVUw6QWxwZXN0cmUKKzY6QlI6QlJBOkJSQVNJTDpSSU8gR1JBTkRFIERPIFNVTDpBbHZvcmFkYQorNzpCUjpCUkE6QlJBU0lMOlJJTyBHUkFOREUgRE8gU1VMOkFudGEgR29yZGEKKzg6QlI6QlJBOkJSQVNJTDpSSU8gR1JBTkRFIERPIFNVTDpBbnRvbmlvIFByYWRvCis5OkJSOkJSQTpCUkFTSUw6UklPIEdSQU5ERSBETyBTVUw6QXJhdGliYQorMTA6QlI6QlJBOkJSQVNJTDpSSU8gR1JBTkRFIERPIFNVTDpBcnJvaW8gR3JhbmRlCisxMTpCUjpCUkE6QlJBU0lMOlJJTyBHUkFOREUgRE8gU1VMOkFycm9pbyBkZSBNZWlvCisxMjpCUjpCUkE6QlJBU0lMOlJJTyBHUkFOREUgRE8gU1VMOkFycm9pbyBkb3MgUmF0b3MKKzEzOkJSOkJSQTpCUkFTSUw6UklPIEdSQU5ERSBETyBTVUw6QXJ2b3JlemluaGEKKzE0OkJSOkJSQTpCUkFTSUw6UklPIEdSQU5ERSBETyBTVUw6QXVndXN0byBQZXN0YW5hCisxNTpCUjpCUkE6QlJBU0lMOlJJTyBHUkFOREUgRE8gU1VMOkJhamUKKzE2OkJSOkJSQTpCUkFTSUw6UklPIEdSQU5ERSBETyBTVUw6QmFyYW8gZGUgQ290ZWppcAorMTc6QlI6QlJBOkJSQVNJTDpSSU8gR1JBTkRFIERPIFNVTDpCYXJyYSBkbyBSaWJlaXJhCisxODpCUjpCUkE6QlJBU0lMOlJJTyBHUkFOREUgRE8gU1VMOkJhcnJhY2FvCisxOTpCUjpCUkE6QlJBU0lMOlJJTyBHUkFOREUgRE8gU1VMOkJlbnRvIEdvbmNhbHZlcworMjA6QlI6QlJBOkJSQVNJTDpSSU8gR1JBTkRFIERPIFNVTDpCb2EgVmlzdGEgZG8gQnVyCisyMTpCUjpCUkE6QlJBU0lMOlJJTyBHUkFOREUgRE8gU1VMOkJvY2Fyb2NhCisyMjpCUjpCUkE6QlJBU0lMOlJJTyBHUkFOREUgRE8gU1VMOkJvbSBKZXN1cworMjM6QlI6QlJBOkJSQVNJTDpSSU8gR1JBTkRFIERPIFNVTDpCb20gUmV0aXJvIGRvIFN1CisyNDpCUjpCUkE6QlJBU0lMOlJJTyBHUkFOREUgRE8gU1VMOkJyYWdhCisyNTpCUjpCUkE6QlJBU0lMOlJJTyBHUkFOREUgRE8gU1VMOkJ1dGlhCisyNjpCUjpCUkE6QlJBU0lMOlJJTyBHUkFOREUgRE8gU1VMOkNhY2FwYXZhIGRvIFN1bAorMjc6QlI6QlJBOkJSQVNJTDpSSU8gR1JBTkRFIERPIFNVTDpDYWNlcXVpCisyODpCUjpCUkE6QlJBU0lMOlJJTyBHUkFOREUgRE8gU1VMOkNhY2hvZWlyYSBkbyBTdWwKKzI5OkJSOkJSQTpCUkFTSUw6UklPIEdSQU5ERSBETyBTVUw6Q2FjaG9laXJpbmhhCiszMDpCUjpCUkE6QlJBU0lMOlJJTyBHUkFOREUgRE8gU1VMOkNhY2lxdWUgRG9ibGUKKzMxOkJSOkJSQTpCUkFTSUw6UklPIEdSQU5ERSBETyBTVUw6Q2FpYmF0ZQorMzI6QlI6QlJBOkJSQVNJTDpSSU8gR1JBTkRFIERPIFNVTDpDYW1hcXVhCiszMzpCUjpCUkE6QlJBU0lMOlJJTyBHUkFOREUgRE8gU1VMOkNhbWJhcmEgZG8gU3VsCiszNDpCUjpCUkE6QlJBU0lMOlJJTyBHUkFOREUgRE8gU1VMOkNhbXBpbmFzIGRhcyBNaXMKKzM1OkJSOkJSQTpCUkFTSUw6UklPIEdSQU5ERSBETyBTVUw6Q2FtcGluYXMgZG8gU3VsCiszNjpCUjpCUkE6QlJBU0lMOlJJTyBHUkFOREUgRE8gU1VMOkNhbXBvIEJvbQorMzc6QlI6QlJBOkJSQVNJTDpSSU8gR1JBTkRFIERPIFNVTDpDYW1wbyBOb3ZvCiszODpCUjpCUkE6QlJBU0lMOlJJTyBHUkFOREUgRE8gU1VMOkNhbXBvIFJlYWwKKzM5OkJSOkJSQTpCUkFTSUw6UklPIEdSQU5ERSBETyBTVUw6Q2FuZGVsYXJpYQorNDA6QlI6QlJBOkJSQVNJTDpSSU8gR1JBTkRFIERPIFNVTDpDYW5kaWRvIEdvZG9pCis0MTpCUjpCUkE6QlJBU0lMOlJJTyBHUkFOREUgRE8gU1VMOkNhbmVsYQorNDI6QlI6QlJBOkJSQVNJTDpSSU8gR1JBTkRFIERPIFNVTDpDYW5ndWN1Cis0MzpCUjpCUkE6QlJBU0lMOlJJTyBHUkFOREUgRE8gU1VMOkNhbm9hcworNDQ6QlI6QlJBOkJSQVNJTDpSSU8gR1JBTkRFIERPIFNVTDpDYXJhemluaG8KKzQ1OkJSOkJSQTpCUkFTSUw6UklPIEdSQU5ERSBETyBTVUw6Q2FybG9zIEJhcmJvc2EKKzQ2OkJSOkJSQTpCUkFTSUw6UklPIEdSQU5ERSBETyBTVUw6Q2FzY2EKKzQ3OkJSOkJSQTpCUkFTSUw6UklPIEdSQU5ERSBETyBTVUw6Q2F0dWlwZQorNDg6QlI6QlJBOkJSQVNJTDpSSU8gR1JBTkRFIERPIFNVTDpDYXhpYXMgZG8gU3VsCis0OTpCUjpCUkE6QlJBU0lMOlJJTyBHUkFOREUgRE8gU1VMOkNlcnJvIGxhcmdvCis1MDpCUjpCUkE6QlJBU0lMOlJJTyBHUkFOREUgRE8gU1VMOkNoYXBhZGEKKzUxOkJSOkJSQTpCUkFTSUw6UklPIEdSQU5ERSBETyBTVUw6Q2hpYXBldGEKKzUyOkJSOkJSQTpCUkFTSUw6UklPIEdSQU5ERSBETyBTVUw6Q2lhY2FyYQorNTM6QlI6QlJBOkJSQVNJTDpSSU8gR1JBTkRFIERPIFNVTDpDaXJpYWNvCis1NDpCUjpCUkE6QlJBU0lMOlJJTyBHUkFOREUgRE8gU1VMOkNvbG9yYWRvCis1NTpCUjpCUkE6QlJBU0lMOlJJTyBHUkFOREUgRE8gU1VMOkNvbmRvcgorNTY6QlI6QlJBOkJSQVNJTDpSSU8gR1JBTkRFIERPIFNVTDpDb25zdGFudGluYQorNTc6QlI6QlJBOkJSQVNJTDpSSU8gR1JBTkRFIERPIFNVTDpDb3JvbmVsIEJpY2FjbworNTg6QlI6QlJBOkJSQVNJTDpSSU8gR1JBTkRFIERPIFNVTDpDcmljaXVtYWwKKzU5OkJSOkJSQTpCUkFTSUw6UklPIEdSQU5ERSBETyBTVUw6Q3J1eiBBbHRhCis2MDpCUjpCUkE6QlJBU0lMOlJJTyBHUkFOREUgRE8gU1VMOkNydXplaXJvIGRvIFN1bAorNjE6QlI6QlJBOkJSQVNJTDpSSU8gR1JBTkRFIERPIFNVTDpEYXZpZCBDYW5hYmFycm8KKzYyOkJSOkJSQTpCUkFTSUw6UklPIEdSQU5ERSBETyBTVUw6RG9pcyBJcm1hb3MKKzYzOkJSOkJSQTpCUkFTSUw6UklPIEdSQU5ERSBETyBTVUw6RG9tIEZlbGljaWFubworNjQ6QlI6QlJBOkJSQVNJTDpSSU8gR1JBTkRFIERPIFNVTDpEb20gUGVkcml0bworNjU6QlI6QlJBOkJSQVNJTDpSSU8gR1JBTkRFIERPIFNVTDpEb25hIEZyYW5jaXNjYQorNjY6QlI6QlJBOkJSQVNJTDpSSU8gR1JBTkRFIERPIFNVTDpFbmNhbnRhZG8KKzY3OkJSOkJSQTpCUkFTSUw6UklPIEdSQU5ERSBETyBTVUw6RW5jcnV6aWxoYWRhIGRvCis2ODpCUjpCUkE6QlJBU0lMOlJJTyBHUkFOREUgRE8gU1VMOkVyZXhpbQorNjk6QlI6QlJBOkJSQVNJTDpSSU8gR1JBTkRFIERPIFNVTDpFcnZhbAorNzA6QlI6QlJBOkJSQVNJTDpSSU8gR1JBTkRFIERPIFNVTDpFcnZhbCBHcmFuZGUKKzcxOkJSOkJSQTpCUkFTSUw6UklPIEdSQU5ERSBETyBTVUw6RXJ2YWwgU2VjbworNzI6QlI6QlJBOkJSQVNJTDpSSU8gR1JBTkRFIERPIFNVTDpFc21lcmFsZGEKKzczOkJSOkJSQTpCUkFTSUw6UklPIEdSQU5ERSBETyBTVUw6RXNwdW1vc28KKzc0OkJSOkJSQTpCUkFTSUw6UklPIEdSQU5ERSBETyBTVUw6RXN0YW5jaWEgVmVsaGEKKzc1OkJSOkJSQTpCUkFTSUw6UklPIEdSQU5ERSBETyBTVUw6RXN0ZWlvCis3NjpCUjpCUkE6QlJBU0lMOlJJTyBHUkFOREUgRE8gU1VMOkVzdHJlbGEKKzc3OkJSOkJSQTpCUkFTSUw6UklPIEdSQU5ERSBETyBTVUw6RmFycm91cGlsaGEKKzc4OkJSOkJSQTpCUkFTSUw6UklPIEdSQU5ERSBETyBTVUw6RmF4aW5hbCBkbyBTb3R1cgorNzk6QlI6QlJBOkJSQVNJTDpSSU8gR1JBTkRFIERPIFNVTDpGZWxpegorODA6QlI6QlJBOkJSQVNJTDpSSU8gR1JBTkRFIERPIFNVTDpGbG9yZXMgZGEgQ3VuaGEKKzgxOkJSOkJSQTpCUkFTSUw6UklPIEdSQU5ERSBETyBTVUw6Rm9udG91cmEgWGF2aWVyCis4MjpCUjpCUkE6QlJBU0lMOlJJTyBHUkFOREUgRE8gU1VMOkZvcm1pZ3VlaXJvCis4MzpCUjpCUkE6QlJBU0lMOlJJTyBHUkFOREUgRE8gU1VMOkZyZWRlcmljbyBXZXN0cGgKKzg0OkJSOkJSQTpCUkFTSUw6UklPIEdSQU5ERSBETyBTVUw6R2FyaWJhbGRpCis4NTpCUjpCUkE6QlJBU0lMOlJJTyBHUkFOREUgRE8gU1VMOkdhdXJhbWEKKzg2OkJSOkJSQTpCUkFTSUw6UklPIEdSQU5ERSBETyBTVUw6R2VuZXJhbCBDYW1hcmEKKzg3OkJSOkJSQTpCUkFTSUw6UklPIEdSQU5ERSBETyBTVUw6R2V0dWxpbyBWYXJnYXMKKzg4OkJSOkJSQTpCUkFTSUw6UklPIEdSQU5ERSBETyBTVUw6R3JhbWFkbworODk6QlI6QlJBOkJSQVNJTDpSSU8gR1JBTkRFIERPIFNVTDpHcmF2YXRhaQorOTA6QlI6QlJBOkJSQVNJTDpSSU8gR1JBTkRFIERPIFNVTDpHdWFpYmEKKzkxOkJSOkJSQTpCUkFTSUw6UklPIEdSQU5ERSBETyBTVUw6R3VhcG9yZQorOTI6QlI6QlJBOkJSQVNJTDpSSU8gR1JBTkRFIERPIFNVTDpHdWFyYW5pIGRhcyBNaXNzCis5MzpCUjpCUkE6QlJBU0lMOlJJTyBHUkFOREUgRE8gU1VMOkhvcml6b250aW5hCis5NDpCUjpCUkE6QlJBU0lMOlJJTyBHUkFOREUgRE8gU1VMOkh1bWFpdGEKKzk1OkJSOkJSQTpCUkFTSUw6UklPIEdSQU5ERSBETyBTVUw6SWJpYWNhCis5NjpCUjpCUkE6QlJBU0lMOlJJTyBHUkFOREUgRE8gU1VMOkliaXJhaWFyYXMKKzk3OkJSOkJSQTpCUkFTSUw6UklPIEdSQU5ERSBETyBTVUw6SWdyZWppbmhhCis5ODpCUjpCUkE6QlJBU0lMOlJJTyBHUkFOREUgRE8gU1VMOklqdWkKKzk5OkJSOkJSQTpCUkFTSUw6UklPIEdSQU5ERSBETyBTVUw6SWxvcG9saXMKKzEwMDpCUjpCUkE6QlJBU0lMOlJJTyBHUkFOREUgRE8gU1VMOkluZGVwZW5kZW5jaWEKKzEwMTpCUjpCUkE6QlJBU0lMOlJJTyBHUkFOREUgRE8gU1VMOklyYWkKKzEwMjpCUjpCUkE6QlJBU0lMOlJJTyBHUkFOREUgRE8gU1VMOklzbGEKKzEwMzpCUjpCUkE6QlJBU0lMOlJJTyBHUkFOREUgRE8gU1VMOkl0YXF1aQorMTA0OkJSOkJSQTpCUkFTSUw6UklPIEdSQU5ERSBETyBTVUw6SXRhdGliYSBkbyBzdWwKKzEwNTpCUjpCUkE6QlJBU0lMOlJJTyBHUkFOREUgRE8gU1VMOkl2b3RpCisxMDY6QlI6QlJBOkJSQVNJTDpSSU8gR1JBTkRFIERPIFNVTDpKYWN1dGluZ2EKKzEwNzpCUjpCUkE6QlJBU0lMOlJJTyBHUkFOREUgRE8gU1VMOkphZ3VhcmFvCisxMDg6QlI6QlJBOkJSQVNJTDpSSU8gR1JBTkRFIERPIFNVTDpKYWd1YXJpCisxMDk6QlI6QlJBOkJSQVNJTDpSSU8gR1JBTkRFIERPIFNVTDpKaXJ1YQorMTEwOkJSOkJSQTpCUkFTSUw6UklPIEdSQU5ERSBETyBTVUw6SnVsaW8gZGUgQ2FzdGlsaAorMTExOkJSOkJSQTpCUkFTSUw6UklPIEdSQU5ERSBETyBTVUw6TGEuIGRhIGxhdmFnZW0KKzExMjpCUjpCUkE6QlJBU0lMOlJJTyBHUkFOREUgRE8gU1VMOkxhLiBkbyBwZWl4ZQorMTEzOkJSOkJSQTpCUkFTSUw6UklPIEdSQU5ERSBETyBTVUw6TGEuIGRvcyBiYXJyb3MKKzExNDpCUjpCUkE6QlJBU0lMOlJJTyBHUkFOREUgRE8gU1VMOkxhLiBpdGFwZXZpCisxMTU6QlI6QlJBOkJSQVNJTDpSSU8gR1JBTkRFIERPIFNVTDpMYWdvIG4ubgorMTE2OkJSOkJSQTpCUkFTSUw6UklPIEdSQU5ERSBETyBTVUw6TGFnb2EgVmVybWVsaGEKKzExNzpCUjpCUkE6QlJBU0lMOlJJTyBHUkFOREUgRE8gU1VMOkxhZ29hIG1hbmd1ZWlyYQorMTE4OkJSOkJSQTpCUkFTSUw6UklPIEdSQU5ERSBETyBTVUw6TGFqZWFkbworMTE5OkJSOkJSQTpCUkFTSUw6UklPIEdSQU5ERSBETyBTVUw6TGF2cmFzIGRvIFN1bAorMTIwOkJSOkJSQTpCUkFTSUw6UklPIEdSQU5ERSBETyBTVUw6TGliZXJhdG8gU2FsemFubworMTIxOkJSOkJSQTpCUkFTSUw6UklPIEdSQU5ERSBETyBTVUw6TWFjaGFkaW5obworMTIyOkJSOkJSQTpCUkFTSUw6UklPIEdSQU5ERSBETyBTVUw6TWFyYXUKKzEyMzpCUjpCUkE6QlJBU0lMOlJJTyBHUkFOREUgRE8gU1VMOk1hcmNpb25pbGlvIERpYXMKKzEyNDpCUjpCUkE6QlJBU0lMOlJJTyBHUkFOREUgRE8gU1VMOk1hcmlhbm8gTW9ybworMTI1OkJSOkJSQTpCUkFTSUw6UklPIEdSQU5ERSBETyBTVUw6TWF0YQorMTI2OkJSOkJSQTpCUkFTSUw6UklPIEdSQU5ERSBETyBTVUw6TWF4aW1pbGlhbm8gZGUgQQorMTI3OkJSOkJSQTpCUkFTSUw6UklPIEdSQU5ERSBETyBTVUw6TWlyYWd1YWkKKzEyODpCUjpCUkE6QlJBU0lMOlJJTyBHUkFOREUgRE8gU1VMOk1vbnRlbmVncm8KKzEyOTpCUjpCUkE6QlJBU0lMOlJJTyBHUkFOREUgRE8gU1VMOk1vc3RhcmRhcworMTMwOkJSOkJSQTpCUkFTSUw6UklPIEdSQU5ERSBETyBTVUw6TXVjdW0KKzEzMTpCUjpCUkE6QlJBU0lMOlJJTyBHUkFOREUgRE8gU1VMOk5vbm9haQorMTMyOkJSOkJSQTpCUkFTSUw6UklPIEdSQU5ERSBETyBTVUw6Tm92YSBBcmFjYQorMTMzOkJSOkJSQTpCUkFTSUw6UklPIEdSQU5ERSBETyBTVUw6Tm92YSBCYXNzYW5vCisxMzQ6QlI6QlJBOkJSQVNJTDpSSU8gR1JBTkRFIERPIFNVTDpOb3ZhIEJyZXNjaWEKKzEzNTpCUjpCUkE6QlJBU0lMOlJJTyBHUkFOREUgRE8gU1VMOk5vdmEgUGFsbWEKKzEzNjpCUjpCUkE6QlJBU0lMOlJJTyBHUkFOREUgRE8gU1VMOk5vdmEgUGV0cm9wb2xpcworMTM3OkJSOkJSQTpCUkFTSUw6UklPIEdSQU5ERSBETyBTVUw6Tm92YSBQcmF0YQorMTM4OkJSOkJSQTpCUkFTSUw6UklPIEdSQU5ERSBETyBTVUw6Tm92byBIYW1idXJnbworMTM5OkJSOkJSQTpCUkFTSUw6UklPIEdSQU5ERSBETyBTVUw6T3NvcmlvCisxNDA6QlI6QlJBOkJSQVNJTDpSSU8gR1JBTkRFIERPIFNVTDpQYWltIEZpbGhvCisxNDE6QlI6QlJBOkJSQVNJTDpSSU8gR1JBTkRFIERPIFNVTDpQYWxtZWlyYSBkYXMgTWlzCisxNDI6QlI6QlJBOkJSQVNJTDpSSU8gR1JBTkRFIERPIFNVTDpQYWxtaXRpbmhvcworMTQzOkJSOkJSQTpCUkFTSUw6UklPIEdSQU5ERSBETyBTVUw6UGFuYW1iaQorMTQ0OkJSOkJSQTpCUkFTSUw6UklPIEdSQU5ERSBETyBTVUw6UGFyYWkKKzE0NTpCUjpCUkE6QlJBU0lMOlJJTyBHUkFOREUgRE8gU1VMOlBhc3NvIEZ1bmRvCisxNDY6QlI6QlJBOkJSQVNJTDpSSU8gR1JBTkRFIERPIFNVTDpQZWRybyBPc29yaW8KKzE0NzpCUjpCUkE6QlJBU0lMOlJJTyBHUkFOREUgRE8gU1VMOlBlanVjYXJhCisxNDg6QlI6QlJBOkJSQVNJTDpSSU8gR1JBTkRFIERPIFNVTDpQZWxvdGFzCisxNDk6QlI6QlJBOkJSQVNJTDpSSU8gR1JBTkRFIERPIFNVTDpQaW5oZWlybyBNYWNoYWRvCisxNTA6QlI6QlJBOkJSQVNJTDpSSU8gR1JBTkRFIERPIFNVTDpQaXJhdGluaQorMTUxOkJSOkJSQTpCUkFTSUw6UklPIEdSQU5ERSBETyBTVUw6UGxhbmFsdG8KKzE1MjpCUjpCUkE6QlJBU0lMOlJJTyBHUkFOREUgRE8gU1VMOlBvcnRhbworMTUzOkJSOkJSQTpCUkFTSUw6UklPIEdSQU5ERSBETyBTVUw6UG9ydG8gQWxlZ3JlCisxNTQ6QlI6QlJBOkJSQVNJTDpSSU8gR1JBTkRFIERPIFNVTDpQb3J0byBMdWNlbmEKKzE1NTpCUjpCUkE6QlJBU0lMOlJJTyBHUkFOREUgRE8gU1VMOlB1bnRhIGRlIHRhcGVzCisxNTY6QlI6QlJBOkJSQVNJTDpSSU8gR1JBTkRFIERPIFNVTDpQdXRpbmdhCisxNTc6QlI6QlJBOkJSQVNJTDpSSU8gR1JBTkRFIERPIFNVTDpRdWFyYWkKKzE1ODpCUjpCUkE6QlJBU0lMOlJJTyBHUkFOREUgRE8gU1VMOlJlZGVudG9yYQorMTU5OkJSOkJSQTpCUkFTSUw6UklPIEdSQU5ERSBETyBTVUw6UmVwci4gZGUgcGFzc28gZgorMTYwOkJSOkJSQTpCUkFTSUw6UklPIEdSQU5ERSBETyBTVUw6UmVwci5kYSBFcm5lc3RpbgorMTYxOkJSOkJSQTpCUkFTSUw6UklPIEdSQU5ERSBETyBTVUw6UmVwcmUuUG9zc28gUmVhbAorMTYyOkJSOkJSQTpCUkFTSUw6UklPIEdSQU5ERSBETyBTVUw6UmVzdGluZ2EgU2VjYQorMTYzOkJSOkJSQTpCUkFTSUw6UklPIEdSQU5ERSBETyBTVUw6UmlvIEdyYW5kZQorMTY0OkJSOkJSQTpCUkFTSUw6UklPIEdSQU5ERSBETyBTVUw6UmlvIFBhcmRvCisxNjU6QlI6QlJBOkJSQVNJTDpSSU8gR1JBTkRFIERPIFNVTDpSb2NhIFNhbGVzCisxNjY6QlI6QlJBOkJSQVNJTDpSSU8gR1JBTkRFIERPIFNVTDpSb2RlaW8gQm9uaXRvCisxNjc6QlI6QlJBOkJSQVNJTDpSSU8gR1JBTkRFIERPIFNVTDpSb2xhbnRlCisxNjg6QlI6QlJBOkJSQVNJTDpSSU8gR1JBTkRFIERPIFNVTDpSb25kYSBBbHRhCisxNjk6QlI6QlJBOkJSQVNJTDpSSU8gR1JBTkRFIERPIFNVTDpSb25kaW5oYQorMTcwOkJSOkJSQTpCUkFTSUw6UklPIEdSQU5ERSBETyBTVUw6Um9xdWUgR29uemFsZXMKKzE3MTpCUjpCUkE6QlJBU0lMOlJJTyBHUkFOREUgRE8gU1VMOlJvc2FyaW8gZG8gU3VsCisxNzI6QlI6QlJBOkJSQVNJTDpSSU8gR1JBTkRFIERPIFNVTDpTLlZpY2VudGUgZG8gU3VsCisxNzM6QlI6QlJBOkJSQVNJTDpSSU8gR1JBTkRFIERPIFNVTDpTYWx2YWRvciBkbyBTdWwKKzE3NDpCUjpCUkE6QlJBU0lMOlJJTyBHUkFOREUgRE8gU1VMOlNhbmFuZHV2YQorMTc1OkJSOkJSQTpCUkFTSUw6UklPIEdSQU5ERSBETyBTVUw6U2FudGEgQ3J1eiBkbyBTdQorMTc2OkJSOkJSQTpCUkFTSUw6UklPIEdSQU5ERSBETyBTVUw6U2FudGEgTWFyaWEKKzE3NzpCUjpCUkE6QlJBU0lMOlJJTyBHUkFOREUgRE8gU1VMOlNhbnRhIFJvc2EKKzE3ODpCUjpCUkE6QlJBU0lMOlJJTyBHUkFOREUgRE8gU1VMOlNhbnRhbmEgZGEgQm9hIFYKKzE3OTpCUjpCUkE6QlJBU0lMOlJJTyBHUkFOREUgRE8gU1VMOlNhbnRhbmEgZG8gbGl2cmEKKzE4MDpCUjpCUkE6QlJBU0lMOlJJTyBHUkFOREUgRE8gU1VMOlNhbnRpYWdvCisxODE6QlI6QlJBOkJSQVNJTDpSSU8gR1JBTkRFIERPIFNVTDpTYW50byBBbmdlbG8KKzE4MjpCUjpCUkE6QlJBU0lMOlJJTyBHUkFOREUgRE8gU1VMOlNhbnRvIEFudG9uaW8KKzE4MzpCUjpCUkE6QlJBU0lMOlJJTyBHUkFOREUgRE8gU1VMOlNhbnRvIEF1Z3VzdG8KKzE4NDpCUjpCUkE6QlJBU0lMOlJJTyBHUkFOREUgRE8gU1VMOlNhbnRvIGNyaXN0bworMTg1OkJSOkJSQTpCUkFTSUw6UklPIEdSQU5ERSBETyBTVUw6U2FvIEJvcmphCisxODY6QlI6QlJBOkJSQVNJTDpSSU8gR1JBTkRFIERPIFNVTDpTYW8gRmNvLiBkZSBBc3NpCisxODc6QlI6QlJBOkJSQVNJTDpSSU8gR1JBTkRFIERPIFNVTDpTYW8gRmNvLiBkZSBQYXVsCisxODg6QlI6QlJBOkJSQVNJTDpSSU8gR1JBTkRFIERPIFNVTDpTYW8gR2FicmllbAorMTg5OkJSOkJSQTpCUkFTSUw6UklPIEdSQU5ERSBETyBTVUw6U2FvIEplcm9uaW1vCisxOTA6QlI6QlJBOkJSQVNJTDpSSU8gR1JBTkRFIERPIFNVTDpTYW8gSm9zZSBkbyBOb3J0CisxOTE6QlI6QlJBOkJSQVNJTDpSSU8gR1JBTkRFIERPIFNVTDpTYW8gSm9zZSBkbyBPdXJvCisxOTI6QlI6QlJBOkJSQVNJTDpSSU8gR1JBTkRFIERPIFNVTDpTYW8gTGVvcG9sZG8KKzE5MzpCUjpCUkE6QlJBU0lMOlJJTyBHUkFOREUgRE8gU1VMOlNhbyBMb3VyZW5jbyBkbworMTk0OkJSOkJSQTpCUkFTSUw6UklPIEdSQU5ERSBETyBTVUw6U2FvIEx1aXMgR29uemFnYQorMTk1OkJSOkJSQTpCUkFTSUw6UklPIEdSQU5ERSBETyBTVUw6U2FvIE1hcmNvcworMTk2OkJSOkJSQTpCUkFTSUw6UklPIEdSQU5ERSBETyBTVUw6U2FvIE1hcnRpbmhvCisxOTc6QlI6QlJBOkJSQVNJTDpSSU8gR1JBTkRFIERPIFNVTDpTYW8gTmljb2xhdQorMTk4OkJSOkJSQTpCUkFTSUw6UklPIEdSQU5ERSBETyBTVUw6U2FvIFBhdWxvIGRhcyBNaQorMTk5OkJSOkJSQTpCUkFTSUw6UklPIEdSQU5ERSBETyBTVUw6U2FvIFBlZHJvIGRvIFN1bAorMjAwOkJSOkJSQTpCUkFTSUw6UklPIEdSQU5ERSBETyBTVUw6U2FvIFNlYmFzdGlhbyBkbworMjAxOkJSOkJSQTpCUkFTSUw6UklPIEdSQU5ERSBETyBTVUw6U2FvIFNlcGUKKzIwMjpCUjpCUkE6QlJBU0lMOlJJTyBHUkFOREUgRE8gU1VMOlNhbyBWYWxlbnRpbQorMjAzOkJSOkJSQTpCUkFTSUw6UklPIEdSQU5ERSBETyBTVUw6U2FwaXJhbmdhCisyMDQ6QlI6QlJBOkJSQVNJTDpSSU8gR1JBTkRFIERPIFNVTDpTYXB1Y2FpYSBkbyBTdWwKKzIwNTpCUjpCUkE6QlJBU0lMOlJJTyBHUkFOREUgRE8gU1VMOlNhcmFuZGkKKzIwNjpCUjpCUkE6QlJBU0lMOlJJTyBHUkFOREUgRE8gU1VMOlNlYmVyaQorMjA3OkJSOkJSQTpCUkFTSUw6UklPIEdSQU5ERSBETyBTVUw6U2VsYmFjaAorMjA4OkJSOkJSQTpCUkFTSUw6UklPIEdSQU5ERSBETyBTVUw6U2VyYWZpbmEgQ29ycmVpYQorMjA5OkJSOkJSQTpCUkFTSUw6UklPIEdSQU5ERSBETyBTVUw6U2VydGFvCisyMTA6QlI6QlJBOkJSQVNJTDpSSU8gR1JBTkRFIERPIFNVTDpTZXZlcmlhbm8gZGUgQWxtCisyMTE6QlI6QlJBOkJSQVNJTDpSSU8gR1JBTkRFIERPIFNVTDpTb2JyYWRpbmhvCisyMTI6QlI6QlJBOkJSQVNJTDpSSU8gR1JBTkRFIERPIFNVTDpTb2xlZGFkZQorMjEzOkJSOkJSQTpCUkFTSUw6UklPIEdSQU5ERSBETyBTVUw6U3RhLkJhcmJhcmEgZG8gUworMjE0OkJSOkJSQTpCUkFTSUw6UklPIEdSQU5ERSBETyBTVUw6U3RhLlZpdG9yaWEgZG8gUAorMjE1OkJSOkJSQTpCUkFTSUw6UklPIEdSQU5ERSBETyBTVUw6U3RvLkFudG9uaW8gZGFzCisyMTY6QlI6QlJBOkJSQVNJTDpSSU8gR1JBTkRFIERPIFNVTDpUYXBlamFyYQorMjE3OkJSOkJSQTpCUkFTSUw6UklPIEdSQU5ERSBETyBTVUw6VGFwZXJhCisyMTg6QlI6QlJBOkJSQVNJTDpSSU8gR1JBTkRFIERPIFNVTDpUYXBlcworMjE5OkJSOkJSQTpCUkFTSUw6UklPIEdSQU5ERSBETyBTVUw6VGFxdWFyYQorMjIwOkJSOkJSQTpCUkFTSUw6UklPIEdSQU5ERSBETyBTVUw6VGFxdWFyaQorMjIxOkJSOkJSQTpCUkFTSUw6UklPIEdSQU5ERSBETyBTVUw6VGVuZW50ZSBQb3J0ZWxhCisyMjI6QlI6QlJBOkJSQVNJTDpSSU8gR1JBTkRFIERPIFNVTDpUb3JyZXMKKzIyMzpCUjpCUkE6QlJBU0lMOlJJTyBHUkFOREUgRE8gU1VMOlRyZXMgQ29yb2FzCisyMjQ6QlI6QlJBOkJSQVNJTDpSSU8gR1JBTkRFIERPIFNVTDpUcmVzIGRlIE1haW8KKzIyNTpCUjpCUkE6QlJBU0lMOlJJTyBHUkFOREUgRE8gU1VMOlRyZXMgcGFzc29zCisyMjY6QlI6QlJBOkJSQVNJTDpSSU8gR1JBTkRFIERPIFNVTDpUcml1bmZvCisyMjc6QlI6QlJBOkJSQVNJTDpSSU8gR1JBTkRFIERPIFNVTDpUdWN1bmR1dmEKKzIyODpCUjpCUkE6QlJBU0lMOlJJTyBHUkFOREUgRE8gU1VMOlR1cGFuY2lyZXRhCisyMjk6QlI6QlJBOkJSQVNJTDpSSU8gR1JBTkRFIERPIFNVTDpUdXBhcmVuZGkKKzIzMDpCUjpCUkE6QlJBU0lMOlJJTyBHUkFOREUgRE8gU1VMOlVydWd1YWlhbmEKKzIzMTpCUjpCUkE6QlJBU0lMOlJJTyBHUkFOREUgRE8gU1VMOlZhY2FyaWEKKzIzMjpCUjpCUkE6QlJBU0lMOlJJTyBHUkFOREUgRE8gU1VMOlZlbmFuY2lvIEFpcmVzCisyMzM6QlI6QlJBOkJSQVNJTDpSSU8gR1JBTkRFIERPIFNVTDpWZXJhIENydXoKKzIzNDpCUjpCUkE6QlJBU0lMOlJJTyBHUkFOREUgRE8gU1VMOlZlcmFub3BvbGlzCisyMzU6QlI6QlJBOkJSQVNJTDpSSU8gR1JBTkRFIERPIFNVTDpWaWFkdXRvcworMjM2OkJSOkJSQTpCUkFTSUw6UklPIEdSQU5ERSBETyBTVUw6VmlhbWFvCisyMzc6QlI6QlJBOkJSQVNJTDpSSU8gR1JBTkRFIERPIFNVTDpWaWNlbnRlIER1dHJhCisyMzg6QlI6QlJBOkJSQVNJTDpSSU8gR1JBTkRFIERPIFNVTDpWaWN0b3IgR3JhZWZmCisxOkJSOkJSQTpCUkFTSUw6UklPIERFIEpBTkVJUk86QU5HUkEgRE9TIFJFSVMKKzI6QlI6QlJBOkJSQVNJTDpSSU8gREUgSkFORUlSTzpBUkFSVUFNQQorMzpCUjpCUkE6QlJBU0lMOlJJTyBERSBKQU5FSVJPOkFSQVJVQU5BCis0OkJSOkJSQTpCUkFTSUw6UklPIERFIEpBTkVJUk86QkFSUkEgRE8gUElSQUkKKzU6QlI6QlJBOkJSQVNJTDpSSU8gREUgSkFORUlSTzpCQVJSQSBNQU5TQQorNjpCUjpCUkE6QlJBU0lMOlJJTyBERSBKQU5FSVJPOkJPTSBKQVJESU0KKzc6QlI6QlJBOkJSQVNJTDpSSU8gREUgSkFORUlSTzpDQUJPIEZSSU8KKzg6QlI6QlJBOkJSQVNJTDpSSU8gREUgSkFORUlSTzpDQUNIT0VJUkFTIEQgTUFDCis5OkJSOkJSQTpCUkFTSUw6UklPIERFIEpBTkVJUk86Q0FNQlVDSQorMTA6QlI6QlJBOkJSQVNJTDpSSU8gREUgSkFORUlSTzpDQU1QT1MKKzExOkJSOkJSQTpCUkFTSUw6UklPIERFIEpBTkVJUk86Q0FOVEFHQUxPCisxMjpCUjpCUkE6QlJBU0lMOlJJTyBERSBKQU5FSVJPOkNBUk1PCisxMzpCUjpCUkE6QlJBU0lMOlJJTyBERSBKQU5FSVJPOkNBU0lNSVJPIEQgQUJSRVUKKzE0OkJSOkJSQTpCUkFTSUw6UklPIERFIEpBTkVJUk86Q09OQ0VJQ0FPIE1BQ0FCVQorMTU6QlI6QlJBOkJSQVNJTDpSSU8gREUgSkFORUlSTzpDT1JERUlSTworMTY6QlI6QlJBOkJSQVNJTDpSSU8gREUgSkFORUlSTzpEVUFTIEJBUlJBUworMTc6QlI6QlJBOkJSQVNJTDpSSU8gREUgSkFORUlSTzpEVVFVRSBERSBDQVhJQVMKKzE4OkJSOkJSQTpCUkFTSUw6UklPIERFIEpBTkVJUk86RU5HRU5IRUlSTyBQQVVMTworMTk6QlI6QlJBOkJSQVNJTDpSSU8gREUgSkFORUlSTzpJVEFCT1JBSQorMjA6QlI6QlJBOkJSQVNJTDpSSU8gREUgSkFORUlSTzpJVEFHVUFJCisyMTpCUjpCUkE6QlJBU0lMOlJJTyBERSBKQU5FSVJPOklUQU9DQVJBCisyMjpCUjpCUkE6QlJBU0lMOlJJTyBERSBKQU5FSVJPOklUQVBFUlVOQQorMjM6QlI6QlJBOkJSQVNJTDpSSU8gREUgSkFORUlSTzpMQS4gREUgQVJBUlVBTUEKKzI0OkJSOkJSQTpCUkFTSUw6UklPIERFIEpBTkVJUk86TEEuIERFIElNQk9BQ0lDQQorMjU6QlI6QlJBOkJSQVNJTDpSSU8gREUgSkFORUlSTzpMQS4gREUgSkFDT05FCisyNjpCUjpCUkE6QlJBU0lMOlJJTyBERSBKQU5FSVJPOkxBLiBETyBDQU1QRUxPCisyNzpCUjpCUkE6QlJBU0lMOlJJTyBERSBKQU5FSVJPOkxBLiBWRVJNRUxIQQorMjg6QlI6QlJBOkJSQVNJTDpSSU8gREUgSkFORUlSTzpMQUdPQSBGRUlBCisyOTpCUjpCUkE6QlJBU0lMOlJJTyBERSBKQU5FSVJPOkxBSkUgRE8gTVVSSUFFCiszMDpCUjpCUkE6QlJBU0lMOlJJTyBERSBKQU5FSVJPOk1BQ0FFCiszMTpCUjpCUkE6QlJBU0lMOlJJTyBERSBKQU5FSVJPOk1BR0UKKzMyOkJSOkJSQTpCUkFTSUw6UklPIERFIEpBTkVJUk86TUFOR0FSQVRJQkEKKzMzOkJSOkJSQTpCUkFTSUw6UklPIERFIEpBTkVJUk86TUFSSUNBCiszNDpCUjpCUkE6QlJBU0lMOlJJTyBERSBKQU5FSVJPOk1FTkRFUworMzU6QlI6QlJBOkJSQVNJTDpSSU8gREUgSkFORUlSTzpNSUdVRUwgUEVSRUlSQQorMzY6QlI6QlJBOkJSQVNJTDpSSU8gREUgSkFORUlSTzpNSVJBQ0VNQQorMzc6QlI6QlJBOkJSQVNJTDpSSU8gREUgSkFORUlSTzpOQVRJVklEQURFCiszODpCUjpCUkE6QlJBU0lMOlJJTyBERSBKQU5FSVJPOk5JTE9QT0xJUworMzk6QlI6QlJBOkJSQVNJTDpSSU8gREUgSkFORUlSTzpOSVRFUk9JCis0MDpCUjpCUkE6QlJBU0lMOlJJTyBERSBKQU5FSVJPOk5PVkEgRlJJQlVSR08KKzQxOkJSOkJSQTpCUkFTSUw6UklPIERFIEpBTkVJUk86Tk9WQSBJR1VBQ1UKKzQyOkJSOkJSQTpCUkFTSUw6UklPIERFIEpBTkVJUk86UEFSQUNBTUJJCis0MzpCUjpCUkE6QlJBU0lMOlJJTyBERSBKQU5FSVJPOlBBUkFJQkEgRE8gU1VMCis0NDpCUjpCUkE6QlJBU0lMOlJJTyBERSBKQU5FSVJPOlBBUkFUSQorNDU6QlI6QlJBOkJSQVNJTDpSSU8gREUgSkFORUlSTzpQRVRST1BPTElTCis0NjpCUjpCUkE6QlJBU0lMOlJJTyBERSBKQU5FSVJPOlBJUkFJCis0NzpCUjpCUkE6QlJBU0lMOlJJTyBERSBKQU5FSVJPOlBPUkNJVU5DVUxBCis0ODpCUjpCUkE6QlJBU0lMOlJJTyBERSBKQU5FSVJPOlJFU0VOREUKKzQ5OkJSOkJSQTpCUkFTSUw6UklPIERFIEpBTkVJUk86UkVTRU5ERSAoSGlkcm8uKQorNTA6QlI6QlJBOkJSQVNJTDpSSU8gREUgSkFORUlSTzpSSU8gQk9OSVRPCis1MTpCUjpCUkE6QlJBU0lMOlJJTyBERSBKQU5FSVJPOlJJTyBDTEFSTworNTI6QlI6QlJBOkJSQVNJTDpSSU8gREUgSkFORUlSTzpSSU8gREFTIEZMT1JFUworNTM6QlI6QlJBOkJSQVNJTDpSSU8gREUgSkFORUlSTzpSSU8gREUgSkFORUlSTworNTQ6QlI6QlJBOkJSQVNJTDpSSU8gREUgSkFORUlSTzpTIEpPQU8gREUgTUVSSVRJCis1NTpCUjpCUkE6QlJBU0lMOlJJTyBERSBKQU5FSVJPOlMgTUFSSUEgTUFEQUxFTkEKKzU2OkJSOkJSQTpCUkFTSUw6UklPIERFIEpBTkVJUk86UyBTRUJBU1RJQU8gRCBBTAorNTc6QlI6QlJBOkJSQVNJTDpSSU8gREUgSkFORUlSTzpTQU5UTyBBTlRPTklPIFAuCis1ODpCUjpCUkE6QlJBU0lMOlJJTyBERSBKQU5FSVJPOlNBTyBGSURFTElTCis1OTpCUjpCUkE6QlJBU0lMOlJJTyBERSBKQU5FSVJPOlNBTyBHT05DQUxPCis2MDpCUjpCUkE6QlJBU0lMOlJJTyBERSBKQU5FSVJPOlNBTyBKT0FPIEJBUlJBCis2MTpCUjpCUkE6QlJBU0lMOlJJTyBERSBKQU5FSVJPOlNBTyBQRURSTyBBTERFSUEKKzYyOkJSOkJSQTpCUkFTSUw6UklPIERFIEpBTkVJUk86U0FQVUNBSUEKKzYzOkJSOkJSQTpCUkFTSUw6UklPIERFIEpBTkVJUk86U0FRVUFSRU1BCis2NDpCUjpCUkE6QlJBU0lMOlJJTyBERSBKQU5FSVJPOlNJTFZBIEpBUkRJTQorNjU6QlI6QlJBOkJSQVNJTDpSSU8gREUgSkFORUlSTzpTVU1JRE9VUk8KKzY2OkJSOkJSQTpCUkFTSUw6UklPIERFIEpBTkVJUk86VEVSRVNPUE9MSVMKKzY3OkJSOkJSQTpCUkFTSUw6UklPIERFIEpBTkVJUk86VFJBSkFOTyBEIk1PUkFJUworNjg6QlI6QlJBOkJSQVNJTDpSSU8gREUgSkFORUlSTzpUUkVTIFJJT1MKKzY5OkJSOkJSQTpCUkFTSUw6UklPIERFIEpBTkVJUk86VkFMRU5DSUEKKzcwOkJSOkJSQTpCUkFTSUw6UklPIERFIEpBTkVJUk86VkFTU09VUkFTCis3MTpCUjpCUkE6QlJBU0lMOlJJTyBERSBKQU5FSVJPOlZPTFRBIFJFRE9OREEKKzE6QlI6QlJBOkJSQVNJTDpCQUhJQTpBQkFJUkEKKzI6QlI6QlJBOkJSQVNJTDpCQUhJQTpBQkFSRQorMzpCUjpCUkE6QlJBU0lMOkJBSElBOkFDQUpVVElCQQorNDpCUjpCUkE6QlJBU0lMOkJBSElBOkFHVUEgRlJJQQorNTpCUjpCUkE6QlJBU0lMOkJBSElBOkFHVUEgUVVFTlRFCis2OkJSOkJSQTpCUkFTSUw6QkFISUE6QUlRVUFSQQorNzpCUjpCUkE6QlJBU0lMOkJBSElBOkFMQUdPSU5IQVMKKzg6QlI6QlJBOkJSQVNJTDpCQUhJQTpBTENPQkFDQQorOTpCUjpCUkE6QlJBU0lMOkJBSElBOkFMTUFESU5BCisxMDpCUjpCUkE6QlJBU0lMOkJBSElBOkFNQVJHT1NBCisxMTpCUjpCUkE6QlJBU0lMOkJBSElBOkFNRUxJQSBST0RSSUdVRVoKKzEyOkJSOkJSQTpCUkFTSUw6QkFISUE6QU5BR0UKKzEzOkJSOkJSQTpCUkFTSUw6QkFISUE6QU5EQVJBSQorMTQ6QlI6QlJBOkJSQVNJTDpCQUhJQTpBTkdJQ0FMCisxNTpCUjpCUkE6QlJBU0lMOkJBSElBOkFOR1VFUkEKKzE2OkJSOkJSQTpCUkFTSUw6QkFISUE6QU5UQVMKKzE3OkJSOkJSQTpCUkFTSUw6QkFISUE6QU5UT05JTyBDQVJET1NPCisxODpCUjpCUkE6QlJBU0lMOkJBSElBOkFOVE9OSU8gR09OQ0FMVkUKKzE5OkJSOkJSQTpCUkFTSUw6QkFISUE6QVBPUkEKKzIwOkJSOkJSQTpCUkFTSUw6QkFISUE6QVJBQ0FUVQorMjE6QlI6QlJBOkJSQVNJTDpCQUhJQTpBUkFDSQorMjI6QlI6QlJBOkJSQVNJTDpCQUhJQTpBUkFNQVJJCisyMzpCUjpCUkE6QlJBU0lMOkJBSElBOkFSQVRVSVBFCisyNDpCUjpCUkE6QlJBU0lMOkJBSElBOkFVUkVMSU5PIExFQUwKKzI1OkJSOkJSQTpCUkFTSUw6QkFISUE6QkFJQU5PUE9MSVMKKzI2OkJSOkJSQTpCUkFTSUw6QkFISUE6QkFJWEEgR1JBTkRFCisyNzpCUjpCUkE6QlJBU0lMOkJBSElBOkJBUlJBCisyODpCUjpCUkE6QlJBU0lMOkJBSElBOkJBUlJBIERBIENIT0NBCisyOTpCUjpCUkE6QlJBU0lMOkJBSElBOkJBUlJBIERBIEVTVElWQQorMzA6QlI6QlJBOkJSQVNJTDpCQUhJQTpCQVJSQSBETyBNRU5ERVMKKzMxOkJSOkJSQTpCUkFTSUw6QkFISUE6QkFSUkEgRE8gUk9DSEEKKzMyOkJSOkJSQTpCUkFTSUw6QkFISUE6QkFSUkVJUkFTCiszMzpCUjpCUkE6QlJBU0lMOkJBSElBOkJBUlJPIFBSRVRPCiszNDpCUjpCUkE6QlJBU0lMOkJBSElBOkJFTE1PTlRFCiszNTpCUjpCUkE6QlJBU0lMOkJBSElBOkJFTE8gQ0FNUE8KKzM2OkJSOkJSQTpCUkFTSUw6QkFISUE6QklSSVRJTkdBCiszNzpCUjpCUkE6QlJBU0lMOkJBSElBOkJPQSBOT1ZBCiszODpCUjpCUkE6QlJBU0lMOkJBSElBOkJPQSBWSVNUQSBUVVBJTQorMzk6QlI6QlJBOkJSQVNJTDpCQUhJQTpCT00gSkVTVVMgREEgTC4KKzQwOkJSOkJSQTpCUkFTSUw6QkFISUE6Qk9OSU5BTAorNDE6QlI6QlJBOkJSQVNJTDpCQUhJQTpCT1FVSVJBCis0MjpCUjpCUkE6QlJBU0lMOkJBSElBOkJPVFVQT1JBCis0MzpCUjpCUkE6QlJBU0lMOkJBSElBOkJSRUpPRVMKKzQ0OkJSOkJSQTpCUkFTSUw6QkFISUE6QlJFSk9MQU5ESUEKKzQ1OkJSOkJSQTpCUkFTSUw6QkFISUE6QlJPVEFTIERFIE0uCis0NjpCUjpCUkE6QlJBU0lMOkJBSElBOkJSVU1BRE8KKzQ3OkJSOkJSQTpCUkFTSUw6QkFISUE6QlVFUkFSRU1BCis0ODpCUjpCUkE6QlJBU0lMOkJBSElBOkMuIERPIENPSVRFCis0OTpCUjpCUkE6QlJBU0lMOkJBSElBOkNBQVRJQkEKKzUwOkJSOkJSQTpCUkFTSUw6QkFISUE6Q0FDSE9FSVJBCis1MTpCUjpCUkE6QlJBU0lMOkJBSElBOkNBQ1VMRQorNTI6QlI6QlJBOkJSQVNJTDpCQUhJQTpDQUVNCis1MzpCUjpCUkE6QlJBU0lMOkJBSElBOkNBRVRJVEUKKzU0OkJSOkJSQTpCUkFTSUw6QkFISUE6Q0FGQVJOQVVNCis1NTpCUjpCUkE6QlJBU0lMOkJBSElBOkNBSVJVCis1NjpCUjpCUkE6QlJBU0lMOkJBSElBOkNBTERFSVJBTyBHUkFOREUKKzU3OkJSOkJSQTpCUkFTSUw6QkFISUE6Q0FNQUNBTgorNTg6QlI6QlJBOkJSQVNJTDpCQUhJQTpDQU1BQ0FSSQorNTk6QlI6QlJBOkJSQVNJTDpCQUhJQTpDQU1BTVUKKzYwOkJSOkJSQTpCUkFTSUw6QkFISUE6Q0FNUE8gQUxFR1JFIERFCis2MTpCUjpCUkE6QlJBU0lMOkJBSElBOkNBTVBPIEZPUk1PU08KKzYyOkJSOkJSQTpCUkFTSUw6QkFISUE6Q0FOQVBPTElTCis2MzpCUjpCUkE6QlJBU0lMOkJBSElBOkNBTkFSQU5BCis2NDpCUjpCUkE6QlJBU0lMOkJBSElBOkNBTkFWSUVJUkFTCis2NTpCUjpCUkE6QlJBU0lMOkJBSElBOkNBTkRFQUwKKzY2OkJSOkJSQTpCUkFTSUw6QkFISUE6Q0FOREVJQVMKKzY3OkJSOkJSQTpCUkFTSUw6QkFISUE6Q0FORElCQQorNjg6QlI6QlJBOkJSQVNJTDpCQUhJQTpDQU5ESURPIFNBTEVTCis2OTpCUjpCUkE6QlJBU0lMOkJBSElBOkNBTlNBTkNBTworNzA6QlI6QlJBOkJSQVNJTDpCQUhJQTpDQVJBVkVMQVMKKzcxOkJSOkJSQTpCUkFTSUw6QkFISUE6Q0FSREVBTCBEQSBTSUxWQQorNzI6QlI6QlJBOkJSQVNJTDpCQUhJQTpDQVJJTkhBTkhBCis3MzpCUjpCUkE6QlJBU0lMOkJBSElBOkNBU0EgTk9WQQorNzQ6QlI6QlJBOkJSQVNJTDpCQUhJQTpDQVNUUk8gQUxWRVMKKzc1OkJSOkJSQTpCUkFTSUw6QkFISUE6Q0FUT0xBTkRJQQorNzY6QlI6QlJBOkJSQVNJTDpCQUhJQTpDQVRVCis3NzpCUjpCUkE6QlJBU0lMOkJBSElBOkNFTlRSQUwKKzc4OkJSOkJSQTpCUkFTSUw6QkFISUE6Q0hPUlJPQ0hPCis3OTpCUjpCUkE6QlJBU0lMOkJBSElBOkNJQ0VSTyBEQU5UQVMKKzgwOkJSOkJSQTpCUkFTSUw6QkFISUE6Q0lQTworODE6QlI6QlJBOkJSQVNJTDpCQUhJQTpDT0FSQUNJCis4MjpCUjpCUkE6QlJBU0lMOkJBSElBOkNPQ09TCis4MzpCUjpCUkE6QlJBU0lMOkJBSElBOkNPTkNFSS5EIEpBQ1VJUEUKKzg0OkJSOkJSQTpCUkFTSUw6QkFISUE6Q09OQ0VJQy5EIEFMTUVJRAorODU6QlI6QlJBOkJSQVNJTDpCQUhJQTpDT05DRUlDQS5EIEZFSVJBCis4NjpCUjpCUkE6QlJBU0lMOkJBSElBOkNPTkRFCis4NzpCUjpCUkE6QlJBU0lMOkJBSElBOkNPTkRFVUJBCis4ODpCUjpCUkE6QlJBU0lMOkJBSElBOkNPTlRFTkRBUyBETyBTLgorODk6QlI6QlJBOkJSQVNJTDpCQUhJQTpDT1JBQ0FPIERFIE1BUklBCis5MDpCUjpCUkE6QlJBU0lMOkJBSElBOkNPUkRFSVJPUworOTE6QlI6QlJBOkJSQVNJTDpCQUhJQTpDT1JJQkUKKzkyOkJSOkJSQTpCUkFTSUw6QkFISUE6Q09ST05FTCBKT0FPIFNBCis5MzpCUjpCUkE6QlJBU0lMOkJBSElBOkNPUlJFTlRJTkEKKzk0OkJSOkJSQTpCUkFTSUw6QkFISUE6Q09URUdJUEUKKzk1OkJSOkJSQTpCUkFTSUw6QkFISUE6Q1JBVk9MQU5ESUEKKzk2OkJSOkJSQTpCUkFTSUw6QkFISUE6Q1JJU09QT0xJUworOTc6QlI6QlJBOkJSQVNJTDpCQUhJQTpDUklTVE9QT0xJUworOTg6QlI6QlJBOkJSQVNJTDpCQUhJQTpDUlVaIERBUyBBTE1BUworOTk6QlI6QlJBOkJSQVNJTDpCQUhJQTpDVVJBQ0EKKzEwMDpCUjpCUkE6QlJBU0lMOkJBSElBOkRBUklPIE1FSVJBCisxMDE6QlI6QlJBOkJSQVNJTDpCQUhJQTpET00gQkFTSUxJTworMTAyOkJSOkJSQTpCUkFTSUw6QkFISUE6RE9NIE1BQ0VETyBDT1NUQQorMTAzOkJSOkJSQTpCUkFTSUw6QkFISUE6RUxJU0lPIE1FRFJBRE8KKzEwNDpCUjpCUkE6QlJBU0lMOkJBSElBOkVOQ1JVWklMSEFEQQorMTA1OkJSOkJSQTpCUkFTSUw6QkFISUE6RU5UUkUgUklPUworMTA2OkJSOkJSQTpCUkFTSUw6QkFISUE6RVNQTEFOQURBCisxMDc6QlI6QlJBOkJSQVNJTDpCQUhJQTpFVUNMSURFUyBEIENVTkhBCisxMDg6QlI6QlJBOkJSQVNJTDpCQUhJQTpGRUlSQSBERSBTQU5UQU5BCisxMDk6QlI6QlJBOkJSQVNJTDpCQUhJQTpGSVJNSU5PIEFMVkVTCisxMTA6QlI6QlJBOkJSQVNJTDpCQUhJQTpGTE9SRVNUQSBBWlVMCisxMTE6QlI6QlJBOkJSQVNJTDpCQUhJQTpGT1JNT1NBIERPIFJJTyBQCisxMTI6QlI6QlJBOkJSQVNJTDpCQUhJQTpHQU5EVQorMTEzOkJSOkJSQTpCUkFTSUw6QkFISUE6R0VOVElPIERPIE9VUk8KKzExNDpCUjpCUkE6QlJBU0lMOkJBSElBOkdMT1JJQQorMTE1OkJSOkJSQTpCUkFTSUw6QkFISUE6R09OR09HSQorMTE2OkJSOkJSQTpCUkFTSUw6QkFISUE6R09WRVJOLk1BTkdBQkVJUgorMTE3OkJSOkJSQTpCUkFTSUw6QkFISUE6R1VBUkFUSU5HQQorMTE4OkJSOkJSQTpCUkFTSUw6QkFISUE6R1VOQU1CSQorMTE5OkJSOkJSQTpCUkFTSUw6QkFISUE6SUFDVQorMTIwOkJSOkJSQTpCUkFTSUw6QkFISUE6SUJJQVNTVUNFCisxMjE6QlI6QlJBOkJSQVNJTDpCQUhJQTpJQklDQVJBSQorMTIyOkJSOkJSQTpCUkFTSUw6QkFISUE6SUJJQ09BUkEKKzEyMzpCUjpCUkE6QlJBU0lMOkJBSElBOklCSUNVSQorMTI0OkJSOkJSQTpCUkFTSUw6QkFISUE6SUJJUEVCQQorMTI1OkJSOkJSQTpCUkFTSUw6QkFISUE6SUJJUElUQU5HQQorMTI2OkJSOkJSQTpCUkFTSUw6QkFISUE6SUJJUVVFUkEKKzEyNzpCUjpCUkE6QlJBU0lMOkJBSElBOklCSVJBUElUQU5HQQorMTI4OkJSOkJSQTpCUkFTSUw6QkFISUE6SUJJUkFQVUEKKzEyOTpCUjpCUkE6QlJBU0lMOkJBSElBOklCSVJBVEFJQQorMTMwOkJSOkJSQTpCUkFTSUw6QkFISUE6SUJJVElBUkEKKzEzMTpCUjpCUkE6QlJBU0lMOkJBSElBOklCSVRJVEEKKzEzMjpCUjpCUkE6QlJBU0lMOkJBSElBOklCT1RJUkFNQQorMTMzOkJSOkJSQTpCUkFTSUw6QkFISUE6SUNIVQorMTM0OkJSOkJSQTpCUkFTSUw6QkFISUE6SUdBUE9SQQorMTM1OkJSOkJSQTpCUkFTSUw6QkFISUE6SUdVQUkKKzEzNjpCUjpCUkE6QlJBU0lMOkJBSElBOklMSEVVUworMTM3OkJSOkJSQTpCUkFTSUw6QkFISUE6SU5IQU1CVVBFCisxMzg6QlI6QlJBOkJSQVNJTDpCQUhJQTpJUEVDQUVUQQorMTM5OkJSOkJSQTpCUkFTSUw6QkFISUE6SVBJQVUKKzE0MDpCUjpCUkE6QlJBU0lMOkJBSElBOklQSVJBCisxNDE6QlI6QlJBOkJSQVNJTDpCQUhJQTpJUFVQSUFSQQorMTQyOkJSOkJSQTpCUkFTSUw6QkFISUE6SVJBSlVCQQorMTQzOkJSOkJSQTpCUkFTSUw6QkFISUE6SVJBTUFJQQorMTQ0OkJSOkJSQTpCUkFTSUw6QkFISUE6SVJBUVVBUkEKKzE0NTpCUjpCUkE6QlJBU0lMOkJBSElBOklSQVJBCisxNDY6QlI6QlJBOkJSQVNJTDpCQUhJQTpJUkVDRQorMTQ3OkJSOkJSQTpCUkFTSUw6QkFISUE6SVRBQkVQSQorMTQ4OkJSOkJSQTpCUkFTSUw6QkFISUE6SVRBQkVSQUJBCisxNDk6QlI6QlJBOkJSQVNJTDpCQUhJQTpJVEFCVU5BCisxNTA6QlI6QlJBOkJSQVNJTDpCQUhJQTpJVEFDQVJFCisxNTE6QlI6QlJBOkJSQVNJTDpCQUhJQTpJVEFFVEUKKzE1MjpCUjpCUkE6QlJBU0lMOkJBSElBOklUQUdJCisxNTM6QlI6QlJBOkJSQVNJTDpCQUhJQTpJVEFHSUJBCisxNTQ6QlI6QlJBOkJSQVNJTDpCQUhJQTpJVEFHSU1JUklNCisxNTU6QlI6QlJBOkJSQVNJTDpCQUhJQTpJVEFKVSBETyBDT0xPTklBCisxNTY6QlI6QlJBOkJSQVNJTDpCQUhJQTpJVEFKVUlQRQorMTU3OkJSOkJSQTpCUkFTSUw6QkFISUE6SVRBTUFSQUpVCisxNTg6QlI6QlJBOkJSQVNJTDpCQUhJQTpJVEFNQVJJCisxNTk6QlI6QlJBOkJSQVNJTDpCQUhJQTpJVEFNQkUKKzE2MDpCUjpCUkE6QlJBU0lMOkJBSElBOklUQU5BR1JBCisxNjE6QlI6QlJBOkJSQVNJTDpCQUhJQTpJVEFOSEVNCisxNjI6QlI6QlJBOkJSQVNJTDpCQUhJQTpJVEFQQVJJQ0EKKzE2MzpCUjpCUkE6QlJBU0lMOkJBSElBOklUQVBFCisxNjQ6QlI6QlJBOkJSQVNJTDpCQUhJQTpJVEFQRVRJTkdBCisxNjU6QlI6QlJBOkJSQVNJTDpCQUhJQTpJVEFQSUNVUlUKKzE2NjpCUjpCUkE6QlJBU0lMOkJBSElBOklUQVBJUkFOR0EKKzE2NzpCUjpCUkE6QlJBU0lMOkJBSElBOklUQVFVQVJBCisxNjg6QlI6QlJBOkJSQVNJTDpCQUhJQTpJVEFSQU5USU0KKzE2OTpCUjpCUkE6QlJBU0lMOkJBSElBOklUSVJVQ1UKKzE3MDpCUjpCUkE6QlJBU0lMOkJBSElBOklUSVVCQQorMTcxOkJSOkJSQTpCUkFTSUw6QkFISUE6SVRPUk9STworMTcyOkJSOkJSQTpCUkFTSUw6QkFISUE6SVRVQUNVCisxNzM6QlI6QlJBOkJSQVNJTDpCQUhJQTpJVFVCRVJBCisxNzQ6QlI6QlJBOkJSQVNJTDpCQUhJQTpKQUNBUkFDSQorMTc1OkJSOkJSQTpCUkFTSUw6QkFISUE6SkFDT0JJTkEKKzE3NjpCUjpCUkE6QlJBU0lMOkJBSElBOkpBR1VBUVVBUkEKKzE3NzpCUjpCUkE6QlJBU0lMOkJBSElBOkpBR1VBUkFSSQorMTc4OkJSOkJSQTpCUkFTSUw6QkFISUE6SkFHVUFSSVBFCisxNzk6QlI6QlJBOkJSQVNJTDpCQUhJQTpKQU5EQUlSQQorMTgwOkJSOkJSQTpCUkFTSUw6QkFISUE6SkVRVUlFCisxODE6QlI6QlJBOkJSQVNJTDpCQUhJQTpKRVFVSVJJQ0EKKzE4MjpCUjpCUkE6QlJBU0lMOkJBSElBOkpFUkVNT0FCTworMTgzOkJSOkJSQTpCUkFTSUw6QkFISUE6SklUQVVOQQorMTg0OkJSOkJSQTpCUkFTSUw6QkFISUE6SlVBWkVJUk8KKzE4NTpCUjpCUkE6QlJBU0lMOkJBSElBOkpVU1NBUkEKKzE4NjpCUjpCUkE6QlJBU0lMOkJBSElBOkpVU1NJQVBFCisxODc6QlI6QlJBOkJSQVNJTDpCQUhJQTpMQUZBSUVURSBDT1VUSU5ICisxODg6QlI6QlJBOkJSQVNJTDpCQUhJQTpMQUpFCisxODk6QlI6QlJBOkJSQVNJTDpCQUhJQTpMQUpFREFPCisxOTA6QlI6QlJBOkJSQVNJTDpCQUhJQTpMQUpFRElOSE8KKzE5MTpCUjpCUkE6QlJBU0lMOkJBSElBOkxBTUFSQU8KKzE5MjpCUjpCUkE6QlJBU0lMOkJBSElBOkxBVVJPIERFIEZSRUlUQVMKKzE5MzpCUjpCUkE6QlJBU0lMOkJBSElBOkxFTkNPSVMKKzE5NDpCUjpCUkE6QlJBU0lMOkJBSElBOkxJQ0lOSU8gREUgQS4KKzE5NTpCUjpCUkE6QlJBU0lMOkJBSElBOkxJVlJBTUVOVE8gRE8gQi4KKzE5NjpCUjpCUkE6QlJBU0lMOkJBSElBOk1BQ0FKVUJBCisxOTc6QlI6QlJBOkJSQVNJTDpCQUhJQTpNQUNBUkFOSQorMTk4OkJSOkJSQTpCUkFTSUw6QkFISUE6TUFDQVVCQVMKKzE5OTpCUjpCUkE6QlJBU0lMOkJBSElBOk1BQ1VSVVJFCisyMDA6QlI6QlJBOkJSQVNJTDpCQUhJQTpNQUlRVUlOSVFVRQorMjAxOkJSOkJSQTpCUkFTSUw6QkFISUE6TUFJUkkKKzIwMjpCUjpCUkE6QlJBU0lMOkJBSElBOk1BTEhBREEKKzIwMzpCUjpCUkE6QlJBU0lMOkJBSElBOk1BTEhBREEgREUgUEVELgorMjA0OkJSOkJSQTpCUkFTSUw6QkFISUE6TUFOVUVMIFZJVE9SSU5PCisyMDU6QlI6QlJBOkJSQVNJTDpCQUhJQTpNQVJBQ0FTCisyMDY6QlI6QlJBOkJSQVNJTDpCQUhJQTpNQVJBR09HSVBFCisyMDc6QlI6QlJBOkJSQVNJTDpCQUhJQTpNQVJBVQorMjA4OkJSOkJSQTpCUkFTSUw6QkFISUE6TUFSQ0lPTklMSU8gU09VWgorMjA5OkJSOkJSQTpCUkFTSUw6QkFISUE6TUFTQ09URQorMjEwOkJSOkJSQTpCUkFTSUw6QkFISUE6TUFUQSBERSBTQU8gSk9BTworMjExOkJSOkJSQTpCUkFTSUw6QkFISUE6TUVERUlST1MgTkVUTworMjEyOkJSOkJSQTpCUkFTSUw6QkFISUE6TUlHVUVMIENBTE1PTgorMjEzOkJSOkJSQTpCUkFTSUw6QkFISUE6TUlMQUdSRVMKKzIxNDpCUjpCUkE6QlJBU0lMOkJBSElBOk1JUkFOR0FCQQorMjE1OkJSOkJSQTpCUkFTSUw6QkFISUE6TU9OVEUgU0FOVE8KKzIxNjpCUjpCUkE6QlJBU0lMOkJBSElBOk1PUlBBUkEKKzIxNzpCUjpCUkE6QlJBU0lMOkJBSElBOk1PUlJPIERPIENIQVBFVQorMjE4OkJSOkJSQTpCUkFTSUw6QkFISUE6TU9SVFVHQUJBCisyMTk6QlI6QlJBOkJSQVNJTDpCQUhJQTpNVUNVR0UKKzIyMDpCUjpCUkE6QlJBU0lMOkJBSElBOk1VQ1VSSQorMjIxOkJSOkJSQTpCUkFTSUw6QkFISUE6TVVORE8gTk9WTworMjIyOkJSOkJSQTpCUkFTSUw6QkFISUE6TVVOSVogRkVSUkVJUkEKKzIyMzpCUjpCUkE6QlJBU0lMOkJBSElBOk1VUklUSUJBCisyMjQ6QlI6QlJBOkJSQVNJTDpCQUhJQTpNVVRVSVBFCisyMjU6QlI6QlJBOkJSQVNJTDpCQUhJQTpOQVpBUkUKKzIyNjpCUjpCUkE6QlJBU0lMOkJBSElBOk5JTE8gUEVDQU5IQQorMjI3OkJSOkJSQTpCUkFTSUw6QkFISUE6Tk9WQSBDQU5BQQorMjI4OkJSOkJSQTpCUkFTSUw6QkFISUE6Tk9WQSBJVEFSQU5BCisyMjk6QlI6QlJBOkJSQVNJTDpCQUhJQTpOT1ZBIFNPVVJFCisyMzA6QlI6QlJBOkJSQVNJTDpCQUhJQTpOT1ZBIFZJQ09TQQorMjMxOkJSOkJSQTpCUkFTSUw6QkFISUE6T0xJTkRJTkEKKzIzMjpCUjpCUkE6QlJBU0lMOkJBSElBOk9MSVZFUklBIERPUyBCLgorMjMzOkJSOkJSQTpCUkFTSUw6QkFISUE6T1VSSUNBTkdBUworMjM0OkJSOkJSQTpCUkFTSUw6QkFISUE6UC4gSkFOSU8gUVVBRFJPUworMjM1OkJSOkJSQTpCUkFTSUw6QkFISUE6UEFMTUFTIERFIE0uQS4KKzIzNjpCUjpCUkE6QlJBU0lMOkJBSElBOlBBTE1FSVJBUworMjM3OkJSOkJSQTpCUkFTSUw6QkFISUE6UEFSQU1JUklNCisyMzg6QlI6QlJBOkJSQVNJTDpCQUhJQTpQQVJBVElOR0EKKzIzOTpCUjpCUkE6QlJBU0lMOkJBSElBOlBBUklQSVJBTkdBCisyNDA6QlI6QlJBOkJSQVNJTDpCQUhJQTpQQVUgQlJBU0lMCisyNDE6QlI6QlJBOkJSQVNJTDpCQUhJQTpQQVVMTyBBRk9OU08KKzI0MjpCUjpCUkE6QlJBU0lMOkJBSElBOlBFRFJBTworMjQzOkJSOkJSQTpCUkFTSUw6QkFISUE6UEVEUk8gQUxFWEFORFJFCisyNDQ6QlI6QlJBOkJSQVNJTDpCQUhJQTpQSUFUQQorMjQ1OkJSOkJSQTpCUkFTSUw6QkFISUE6UElMQU8gQVJDQURPCisyNDY6QlI6QlJBOkJSQVNJTDpCQUhJQTpQSU5EQUkKKzI0NzpCUjpCUkE6QlJBU0lMOkJBSElBOlBJTkRPQkFDVQorMjQ4OkJSOkJSQTpCUkFTSUw6QkFISUE6UElSSVBBCisyNDk6QlI6QlJBOkJSQVNJTDpCQUhJQTpQSVJJVElCQQorMjUwOkJSOkJSQTpCUkFTSUw6QkFISUE6UExBTkFMVElOTworMjUxOkJSOkJSQTpCUkFTSUw6QkFISUE6UExBTkFMVE8KKzI1MjpCUjpCUkE6QlJBU0lMOkJBSElBOlBPQ09FUworMjUzOkJSOkJSQTpCUkFTSUw6QkFISUE6UE9KVUNBCisyNTQ6QlI6QlJBOkJSQVNJTDpCQUhJQTpQT1JUTyBTRUdVUk8KKzI1NTpCUjpCUkE6QlJBU0lMOkJBSElBOlBPVElSQUdVQQorMjU2OkJSOkJSQTpCUkFTSUw6QkFISUE6UFJBRE8KKzI1NzpCUjpCUkE6QlJBU0lMOkJBSElBOlBSRVMuIERVVFJBCisyNTg6QlI6QlJBOkJSQVNJTDpCQUhJQTpRVUVJTUFEQVMKKzI1OTpCUjpCUkE6QlJBU0lMOkJBSElBOlFVSUpJTkdVRQorMjYwOkJSOkJSQTpCUkFTSUw6QkFISUE6Ui4gRE8gSkFDVUlQRQorMjYxOkJSOkJSQTpCUkFTSUw6QkFISUE6UkVNQU5TTworMjYyOkJSOkJSQTpCUkFTSUw6QkFISUE6UkVUSVJPTEFORElBCisyNjM6QlI6QlJBOkJSQVNJTDpCQUhJQTpSSUFDSEFPIERBUyBORVZFCisyNjQ6QlI6QlJBOkJSQVNJTDpCQUhJQTpSSUFDSE8gREUgU0FOVC4KKzI2NTpCUjpCUkE6QlJBU0lMOkJBSElBOlJJQkVJUkEgRCBBTVBBUk8KKzI2NjpCUjpCUkE6QlJBU0lMOkJBSElBOlJJQkVJUkEgRCBQT01CQUwKKzI2NzpCUjpCUkE6QlJBU0lMOkJBSElBOlJJTyBERSBDT05UQVMKKzI2ODpCUjpCUkE6QlJBU0lMOkJBSElBOlJJTyBETyBBTlRPTklPCisyNjk6QlI6QlJBOkJSQVNJTDpCQUhJQTpSSU8gRE8gUElSRVMKKzI3MDpCUjpCUkE6QlJBU0lMOkJBSElBOlJJTyBSRUFMCisyNzE6QlI6QlJBOkJSQVNJTDpCQUhJQTpST0RFTEFTCisyNzI6QlI6QlJBOkJSQVNJTDpCQUhJQTpSVVkgQkFSQk9TQQorMjczOkJSOkJSQTpCUkFTSUw6QkFISUE6Uy5GU0NPLkRPIENPTkRFCisyNzQ6QlI6QlJBOkJSQVNJTDpCQUhJQTpTLkdPTkNBTE8gRCBDQU1QCisyNzU6QlI6QlJBOkJSQVNJTDpCQUhJQTpTLk1JR1VFTCBEIE1BVEFTCisyNzY6QlI6QlJBOkJSQVNJTDpCQUhJQTpTLlNFQkFTVC5EIFBBU1NFCisyNzc6QlI6QlJBOkJSQVNJTDpCQUhJQTpTQUxJTkFTIE1BUkdBUklECisyNzg6QlI6QlJBOkJSQVNJTDpCQUhJQTpTQUxWQURPUgorMjc5OkJSOkJSQTpCUkFTSUw6QkFISUE6U0FOVEEgQkFSQkFSQQorMjgwOkJSOkJSQTpCUkFTSUw6QkFISUE6U0FOVEEgQlJJR0lEQQorMjgxOkJSOkJSQTpCUkFTSUw6QkFISUE6U0FOVEEgSU5FUworMjgyOkJSOkJSQTpCUkFTSUw6QkFISUE6U0FOVEEgTUFSSUEgREEgVgorMjgzOkJSOkJSQTpCUkFTSUw6QkFISUE6U0FOVEEgVEVSRVpJTkhBCisyODQ6QlI6QlJBOkJSQVNJTDpCQUhJQTpTQU5UQUxVWgorMjg1OkJSOkJSQTpCUkFTSUw6QkFISUE6U0FOVEFOQQorMjg2OkJSOkJSQTpCUkFTSUw6QkFISUE6U0FOVEFOT1BPTElTCisyODc6QlI6QlJBOkJSQVNJTDpCQUhJQTpTQU5UTyBBTUFSTworMjg4OkJSOkJSQTpCUkFTSUw6QkFISUE6U0FOVE8gRVNURVZBTworMjg5OkJSOkJSQTpCUkFTSUw6QkFISUE6U0FPIERFU0lERVJJTworMjkwOkJSOkJSQTpCUkFTSUw6QkFISUE6U0FPIEZFTElQRQorMjkxOkJSOkJSQTpCUkFTSUw6QkFISUE6U0FPIEZFTElYCisyOTI6QlI6QlJBOkJSQVNJTDpCQUhJQTpTQVBFQUNVCisyOTM6QlI6QlJBOkJSQVNJTDpCQUhJQTpTQVRJUk8gRElBUworMjk0OkJSOkJSQTpCUkFTSUw6QkFISUE6U0FVREUKKzI5NTpCUjpCUkE6QlJBU0lMOkJBSElBOlNFQUJSQQorMjk2OkJSOkJSQTpCUkFTSUw6QkFISUE6U0VCQVNUSUFPIEwuCisyOTc6QlI6QlJBOkJSQVNJTDpCQUhJQTpTRU5IT1IgRE8gQk9ORklNCisyOTg6QlI6QlJBOkJSQVNJTDpCQUhJQTpTRU5UTyBTRQorMjk5OkJSOkJSQTpCUkFTSUw6QkFISUE6U0VSUkEgRE9VUkFEQQorMzAwOkJSOkJSQTpCUkFTSUw6QkFISUE6U0VSUkEgUFJFVEEKKzMwMTpCUjpCUkE6QlJBU0lMOkJBSElBOlNFUlJJTkhBCiszMDI6QlI6QlJBOkJSQVNJTDpCQUhJQTpTRVJST0xBTkRJQQorMzAzOkJSOkJSQTpCUkFTSUw6QkFISUE6U0lNT0VTIEZJTEhPCiszMDQ6QlI6QlJBOkJSQVNJTDpCQUhJQTpTT1VUTyBTT0FSRVMKKzMwNTpCUjpCUkE6QlJBU0lMOkJBSElBOlNUQSBSSVRBIEQgQ0FTU0kKKzMwNjpCUjpCUkE6QlJBU0lMOkJBSElBOlNUQS5DUlVaIENBQlJBTEkKKzMwNzpCUjpCUkE6QlJBU0lMOkJBSElBOlNUQS5DUlVaIERBIFZJVE8KKzMwODpCUjpCUkE6QlJBU0lMOkJBSElBOlNUTy5BTlRPLkQgSkVTVVMKKzMwOTpCUjpCUkE6QlJBU0lMOkJBSElBOlRBQk9DQVMgRE8gQlJFSk8KKzMxMDpCUjpCUkE6QlJBU0lMOkJBSElBOlRBTkhBQ1UKKzMxMTpCUjpCUkE6QlJBU0lMOkJBSElBOlRBTlFVSU5ITworMzEyOkJSOkJSQTpCUkFTSUw6QkFISUE6VEFQRVJPQQorMzEzOkJSOkJSQTpCUkFTSUw6QkFISUE6VEFQSVJBTVVUQQorMzE0OkJSOkJSQTpCUkFTSUw6QkFISUE6VEVPRE9STyBTQU1QQUlPCiszMTU6QlI6QlJBOkJSQVNJTDpCQUhJQTpURU9GSUxBTkRJQQorMzE2OkJSOkJSQTpCUkFTSUw6QkFISUE6VEVPTEFORElBCiszMTc6QlI6QlJBOkJSQVNJTDpCQUhJQTpURVJSQSBOT1ZBCiszMTg6QlI6QlJBOkJSQVNJTDpCQUhJQTpUUkVNRURBTAorMzE5OkJSOkJSQTpCUkFTSUw6QkFISUE6VFVDQU5PCiszMjA6QlI6QlJBOkJSQVNJTDpCQUhJQTpVQVVBCiszMjE6QlI6QlJBOkJSQVNJTDpCQUhJQTpVQkFJUkEKKzMyMjpCUjpCUkE6QlJBU0lMOkJBSElBOlVCQUlUQUJBCiszMjM6QlI6QlJBOkJSQVNJTDpCQUhJQTpVQkFUQQorMzI0OkJSOkJSQTpCUkFTSUw6QkFISUE6VUlCQUkKKzMyNTpCUjpCUkE6QlJBU0lMOkJBSElBOlVOQQorMzI2OkJSOkJSQTpCUkFTSUw6QkFISUE6VVJBTkRJCiszMjc6QlI6QlJBOkJSQVNJTDpCQUhJQTpVUlVDVUNBCiszMjg6QlI6QlJBOkJSQVNJTDpCQUhJQTpVVElOR0EKKzMyOTpCUjpCUkE6QlJBU0lMOkJBSElBOlZBTEVOQ0EKKzMzMDpCUjpCUkE6QlJBU0lMOkJBSElBOlZBTEVOVEUKKzMzMTpCUjpCUkE6QlJBU0lMOkJBSElBOlZBUlpFQSBETyBQT0NPCiszMzI6QlI6QlJBOkJSQVNJTDpCQUhJQTpWRVJBIENSVVoKKzMzMzpCUjpCUkE6QlJBU0lMOkJBSElBOlZJVE9SSUEgRCBDT05RVUkKKzMzNDpCUjpCUkE6QlJBU0lMOkJBSElBOldBR05FUgorMzM1OkJSOkJSQTpCUkFTSUw6QkFISUE6V0VOQ0VTTEFVIEdVSU1BUgorMzM2OkJSOkJSQTpCUkFTSUw6QkFISUE6WElRVUUtWElRVUUKKzE6QlI6QlJBOkJSQVNJTDpFU1BJUklUVSBTQU5UTzpBZm9uc28gQ2xhdWRpbworMjpCUjpCUkE6QlJBU0lMOkVTUElSSVRVIFNBTlRPOkFsZWdyZQorMzpCUjpCUkE6QlJBU0lMOkVTUElSSVRVIFNBTlRPOkFsZnJlZG8gQ2hhdmVzCis0OkJSOkJSQTpCUkFTSUw6RVNQSVJJVFUgU0FOVE86QW5jaGlldGEKKzU6QlI6QlJBOkJSQVNJTDpFU1BJUklUVSBTQU5UTzpBcmFjcnV6Cis2OkJSOkJSQTpCUkFTSUw6RVNQSVJJVFUgU0FOVE86QXR0aWxpbyBWaXZhY3F1YQorNzpCUjpCUkE6QlJBU0lMOkVTUElSSVRVIFNBTlRPOkJhaXhvIEd1YW5kdQorODpCUjpCUkE6QlJBU0lMOkVTUElSSVRVIFNBTlRPOkJhcnJhIERlIFMuIEZyYW4KKzk6QlI6QlJBOkJSQVNJTDpFU1BJUklUVSBTQU5UTzpCb2EgRXNwZXJhbmNhCisxMDpCUjpCUkE6QlJBU0lMOkVTUElSSVRVIFNBTlRPOkJvbSBKZXN1cyBEIk50ZS4KKzExOkJSOkJSQTpCUkFTSUw6RVNQSVJJVFUgU0FOVE86Q2FjaG9laXJvIERlIEl0YQorMTI6QlI6QlJBOkJSQVNJTDpFU1BJUklUVSBTQU5UTzpDYXJpYWNpY2EKKzEzOkJSOkJSQTpCUkFTSUw6RVNQSVJJVFUgU0FOVE86Q2FzdGVsbworMTQ6QlI6QlJBOkJSQVNJTDpFU1BJUklUVSBTQU5UTzpDb2xhdGluYQorMTU6QlI6QlJBOkJSQVNJTDpFU1BJUklUVSBTQU5UTzpDb25jZWljYW8gQmFycmEKKzE2OkJSOkJSQTpCUkFTSUw6RVNQSVJJVFUgU0FOVE86Q29uY2VpY2FvIERvIENhcworMTc6QlI6QlJBOkJSQVNJTDpFU1BJUklUVSBTQU5UTzpEaXZpbm8gRGUgUy4gTG91CisxODpCUjpCUkE6QlJBU0lMOkVTUElSSVRVIFNBTlRPOkRvbWluZ29zIE1hcnRpbnMKKzE5OkJSOkJSQTpCUkFTSUw6RVNQSVJJVFUgU0FOVE86RG9yZXMgRG8gUmlvIFByZQorMjA6QlI6QlJBOkJSQVNJTDpFU1BJUklUVSBTQU5UTzpGdW5kYW8KKzIxOkJSOkJSQTpCUkFTSUw6RVNQSVJJVFUgU0FOVE86R3VhY3VpCisyMjpCUjpCUkE6QlJBU0lMOkVTUElSSVRVIFNBTlRPOkd1YXJhcGFyaQorMjM6QlI6QlJBOkJSQVNJTDpFU1BJUklUVSBTQU5UTzpJYmlyYWd1CisyNDpCUjpCUkE6QlJBU0lMOkVTUElSSVRVIFNBTlRPOkljb25oYQorMjU6QlI6QlJBOkJSQVNJTDpFU1BJUklUVSBTQU5UTzpJdGFndWFjdQorMjY6QlI6QlJBOkJSQVNJTDpFU1BJUklUVSBTQU5UTzpJdGFwZW1pcmltCisyNzpCUjpCUkE6QlJBU0lMOkVTUElSSVRVIFNBTlRPOkl0YXJhbmEKKzI4OkJSOkJSQTpCUkFTSUw6RVNQSVJJVFUgU0FOVE86SXVuYQorMjk6QlI6QlJBOkJSQVNJTDpFU1BJUklUVSBTQU5UTzpKZXJvbmltbyBNb250ZWlyCiszMDpCUjpCUkE6QlJBU0lMOkVTUElSSVRVIFNBTlRPOkxhZ28gSnVwYXJhbmEKKzMxOkJSOkJSQTpCUkFTSUw6RVNQSVJJVFUgU0FOVE86TGFndWluYQorMzI6QlI6QlJBOkJSQVNJTDpFU1BJUklUVSBTQU5UTzpMYWd1bmEKKzMzOkJSOkJSQTpCUkFTSUw6RVNQSVJJVFUgU0FOVE86TGFndW5hIENhcHViYQorMzQ6QlI6QlJBOkJSQVNJTDpFU1BJUklUVSBTQU5UTzpMYWd1bmEgRG8gQm9hIFZpCiszNTpCUjpCUkE6QlJBU0lMOkVTUElSSVRVIFNBTlRPOkxhZ3VuYSBKYWJhZXRlCiszNjpCUjpCUkE6QlJBU0lMOkVTUElSSVRVIFNBTlRPOkxhZ3VuYSBQaWFiaW5oYQorMzc6QlI6QlJBOkJSQVNJTDpFU1BJUklUVSBTQU5UTzpMYWd1bmEgVGFwZXJhCiszODpCUjpCUkE6QlJBU0lMOkVTUElSSVRVIFNBTlRPOkxpbmhhcmVzCiszOTpCUjpCUkE6QlJBU0lMOkVTUElSSVRVIFNBTlRPOk1hbnRlbm9wb2xpcworNDA6QlI6QlJBOkJSQVNJTDpFU1BJUklUVSBTQU5UTzpNaW1vc28gRG8gU3VsCis0MTpCUjpCUkE6QlJBU0lMOkVTUElSSVRVIFNBTlRPOk1vbnRhbmhhCis0MjpCUjpCUkE6QlJBU0lMOkVTUElSSVRVIFNBTlRPOk11Y3VyaWNpCis0MzpCUjpCUkE6QlJBU0lMOkVTUElSSVRVIFNBTlRPOk11bml6IEZyZWlyZQorNDQ6QlI6QlJBOkJSQVNJTDpFU1BJUklUVSBTQU5UTzpNdXF1aQorNDU6QlI6QlJBOkJSQVNJTDpFU1BJUklUVSBTQU5UTzpOb3ZhIFZlbmVjaWEKKzQ2OkJSOkJSQTpCUkFTSUw6RVNQSVJJVFUgU0FOVE86UGFuY2FzCis0NzpCUjpCUkE6QlJBU0lMOkVTUElSSVRVIFNBTlRPOlBpbmhlaXJvcworNDg6QlI6QlJBOkJSQVNJTDpFU1BJUklUVSBTQU5UTzpQaXVtYQorNDk6QlI6QlJBOkJSQVNJTDpFU1BJUklUVSBTQU5UTzpSaW8gTm92byBEbyBTdWwKKzUwOkJSOkJSQTpCUkFTSUw6RVNQSVJJVFUgU0FOVE86Uy4gR2FicmllbCBEYSBQYQorNTE6QlI6QlJBOkJSQVNJTDpFU1BJUklUVSBTQU5UTzpTYW50YSBMZW9wb2xkaW5hCis1MjpCUjpCUkE6QlJBU0lMOkVTUElSSVRVIFNBTlRPOlNhbnRhIFRlcmVzYQorNTM6QlI6QlJBOkJSQVNJTDpFU1BJUklUVSBTQU5UTzpTYW8gTWF0ZXVzCis1NDpCUjpCUkE6QlJBU0lMOkVTUElSSVRVIFNBTlRPOlNlcnJhCis1NTpCUjpCUkE6QlJBU0lMOkVTUElSSVRVIFNBTlRPOlZpYW5hCis1NjpCUjpCUkE6QlJBU0lMOkVTUElSSVRVIFNBTlRPOlZpbGEgVmVsaGEKKzU3OkJSOkJSQTpCUkFTSUw6RVNQSVJJVFUgU0FOVE86Vml0b3JpYQorMTpCUjpCUkE6QlJBU0lMOlRPQ0FOVElOUzpBTE1BUworMjpCUjpCUkE6QlJBU0lMOlRPQ0FOVElOUzpBTFZPUkFEQQorMzpCUjpCUkE6QlJBU0lMOlRPQ0FOVElOUzpBTkFOQVMKKzQ6QlI6QlJBOkJSQVNJTDpUT0NBTlRJTlM6QVJBR1VBQ0VNQQorNTpCUjpCUkE6QlJBU0lMOlRPQ0FOVElOUzpBUkFHVUFDVQorNjpCUjpCUkE6QlJBU0lMOlRPQ0FOVElOUzpBUkFHVUFJTkEKKzc6QlI6QlJBOkJSQVNJTDpUT0NBTlRJTlM6QVJBR1VBVElOUworODpCUjpCUkE6QlJBU0lMOlRPQ0FOVElOUzpBUkFQT0VNQQorOTpCUjpCUkE6QlJBU0lMOlRPQ0FOVElOUzpBUlJBSUFTCisxMDpCUjpCUkE6QlJBU0lMOlRPQ0FOVElOUzpBVVJPUkEgRE8gTk9SVEUKKzExOkJSOkJSQTpCUkFTSUw6VE9DQU5USU5TOkFYSVhBIERFIEdPSUFTCisxMjpCUjpCUkE6QlJBU0lMOlRPQ0FOVElOUzpCQUJBQ1VMQU5ESUEKKzEzOkJSOkJSQTpCUkFTSUw6VE9DQU5USU5TOkJSRUpJTkhPIEQnTkFaQQorMTQ6QlI6QlJBOkJSQVNJTDpUT0NBTlRJTlM6Q09MSU5BUyBERSBHT0lBCisxNTpCUjpCUkE6QlJBU0lMOlRPQ0FOVElOUzpDT05DRUlDQU8gRCdOT1IKKzE2OkJSOkJSQTpCUkFTSUw6VE9DQU5USU5TOkNPVVRPIE1BR0FMSEFFUworMTc6QlI6QlJBOkJSQVNJTDpUT0NBTlRJTlM6Q1JJU1RBTEFORElBCisxODpCUjpCUkE6QlJBU0lMOlRPQ0FOVElOUzpESUFOT1BPTElTCisxOTpCUjpCUkE6QlJBU0lMOlRPQ0FOVElOUzpET0lTIElSTUFPUyBEJ0cKKzIwOkJSOkJSQTpCUkFTSUw6VE9DQU5USU5TOkRVRVJFCisyMTpCUjpCUkE6QlJBU0lMOlRPQ0FOVElOUzpGSUxBREVMRklBCisyMjpCUjpCUkE6QlJBU0lMOlRPQ0FOVElOUzpGT1JNT1NPIEQnQVJBR1UKKzIzOkJSOkJSQTpCUkFTSUw6VE9DQU5USU5TOkdVUlVQSQorMjQ6QlI6QlJBOkJSQVNJTDpUT0NBTlRJTlM6SVRBQ0FKQQorMjU6QlI6QlJBOkJSQVNJTDpUT0NBTlRJTlM6SVRBR1VBVElOUworMjY6QlI6QlJBOkJSQVNJTDpUT0NBTlRJTlM6SVRBUE9SQSBERSBHT0lBCisyNzpCUjpCUkE6QlJBU0lMOlRPQ0FOVElOUzpMSVpBUkRBCisyODpCUjpCUkE6QlJBU0lMOlRPQ0FOVElOUzpNSVJBQ0VNQSBEJ05PUlQKKzI5OkJSOkJSQTpCUkFTSUw6VE9DQU5USU5TOk1JUkFOT1JURQorMzA6QlI6QlJBOkJSQVNJTDpUT0NBTlRJTlM6TU9OVEUgRE8gQ0FSTU8KKzMxOkJSOkJSQTpCUkFTSUw6VE9DQU5USU5TOk5BVElWSURBREUKKzMyOkJSOkJSQTpCUkFTSUw6VE9DQU5USU5TOk5BWkFSRQorMzM6QlI6QlJBOkJSQVNJTDpUT0NBTlRJTlM6Tk9WTyBBQ09SRE8KKzM0OkJSOkJSQTpCUkFTSUw6VE9DQU5USU5TOlAuQUxUQSBEJ0JPTSBKRQorMzU6QlI6QlJBOkJSQVNJTDpUT0NBTlRJTlM6UEFSQUlTTyBEJ05PUlRFCiszNjpCUjpCUkE6QlJBU0lMOlRPQ0FOVElOUzpQQVJBTkEKKzM3OkJSOkJSQTpCUkFTSUw6VE9DQU5USU5TOlBFRFJPIEFGT05TTworMzg6QlI6QlJBOkJSQVNJTDpUT0NBTlRJTlM6UEVJWEUKKzM5OkJSOkJSQTpCUkFTSUw6VE9DQU5USU5TOlBFUVVJWkVJUk8KKzQwOkJSOkJSQTpCUkFTSUw6VE9DQU5USU5TOlBJQUNBCis0MTpCUjpCUkE6QlJBU0lMOlRPQ0FOVElOUzpQSU5ET1JBTUEgRCdHT0kKKzQyOkJSOkJSQTpCUkFTSUw6VE9DQU5USU5TOlBJVU0KKzQzOkJSOkJSQTpCUkFTSUw6VE9DQU5USU5TOlBPTlRFIEFMVEEgRE5PCis0NDpCUjpCUkE6QlJBU0lMOlRPQ0FOVElOUzpQT1JUTyBOQUNJT05BTAorNDU6QlI6QlJBOkJSQVNJTDpUT0NBTlRJTlM6Uy5TRUJBU1QuRCdUT0NBCis0NjpCUjpCUkE6QlJBU0lMOlRPQ0FOVElOUzpTSVRJTyBOT1ZPIEQnR08KKzQ3OkJSOkJSQTpCUkFTSUw6VE9DQU5USU5TOlRBR1VBVElOR1VBCis0ODpCUjpCUkE6QlJBU0lMOlRPQ0FOVElOUzpUT0NBTlRJTklBCis0OTpCUjpCUkE6QlJBU0lMOlRPQ0FOVElOUzpUT0NBTlRJTk9QT0xJUworNTA6QlI6QlJBOkJSQVNJTDpUT0NBTlRJTlM6VFVQSVJBTUEKKzUxOkJSOkJSQTpCUkFTSUw6VE9DQU5USU5TOlRVUElSQU5USU5TCis1MjpCUjpCUkE6QlJBU0lMOlRPQ0FOVElOUzpYQU1CSU9BCisxOkJSOkJSQTpCUkFTSUw6Q0VBUkE6QUJBSUFSQQorMjpCUjpCUkE6QlJBU0lMOkNFQVJBOkFDQVJBUEUKKzM6QlI6QlJBOkJSQVNJTDpDRUFSQTpBQ0FSQVUKKzQ6QlI6QlJBOkJSQVNJTDpDRUFSQTpBQ09QSUFSQQorNTpCUjpCUkE6QlJBU0lMOkNFQVJBOkFJVUFCQQorNjpCUjpCUkE6QlJBU0lMOkNFQVJBOkFMQ0FOVEFSQVMKKzc6QlI6QlJBOkJSQVNJTDpDRUFSQTpBTFRBTkVJUkEKKzg6QlI6QlJBOkJSQVNJTDpDRUFSQTpBTFRPIFNBTlRPCis5OkJSOkJSQTpCUkFTSUw6Q0VBUkE6QU1PTlRBREEKKzEwOkJSOkJSQTpCUkFTSUw6Q0VBUkE6QU5UT05JTkEgRE8gTk9SLgorMTE6QlI6QlJBOkJSQVNJTDpDRUFSQTpBUFVJQVJFUworMTI6QlI6QlJBOkJSQVNJTDpDRUFSQTpBUVVJUkFaCisxMzpCUjpCUkE6QlJBU0lMOkNFQVJBOkFSQUNBVEkKKzE0OkJSOkJSQTpCUkFTSUw6Q0VBUkE6QVJBQ09JQUJBCisxNTpCUjpCUkE6QlJBU0lMOkNFQVJBOkFSQVJBVQorMTY6QlI6QlJBOkJSQVNJTDpDRUFSQTpBUkFSSVBFCisxNzpCUjpCUkE6QlJBU0lMOkNFQVJBOkFSQVRVQkEKKzE4OkJSOkJSQTpCUkFTSUw6Q0VBUkE6QVJORUlST1oKKzE5OkJSOkJSQTpCUkFTSUw6Q0VBUkE6QVNTQVJFCisyMDpCUjpCUkE6QlJBU0lMOkNFQVJBOkFVUk9SQQorMjE6QlI6QlJBOkJSQVNJTDpDRUFSQTpCQUlYSU8KKzIyOkJSOkJSQTpCUkFTSUw6Q0VBUkE6QkFOQUJVSVUKKzIzOkJSOkJSQTpCUkFTSUw6Q0VBUkE6QkFSQkFMSEEKKzI0OkJSOkJSQTpCUkFTSUw6Q0VBUkE6QkFSUkVJUkEKKzI1OkJSOkJSQTpCUkFTSUw6Q0VBUkE6QkFSUk8KKzI2OkJSOkJSQTpCUkFTSUw6Q0VBUkE6QkFUVVJJVEUKKzI3OkJSOkJSQTpCUkFTSUw6Q0VBUkE6QkVCRVJJQkUKKzI4OkJSOkJSQTpCUkFTSUw6Q0VBUkE6QkVMQSBDUlVaCisyOTpCUjpCUkE6QlJBU0lMOkNFQVJBOkJPQSBWSUFHRU0KKzMwOkJSOkJSQTpCUkFTSUw6Q0VBUkE6QlJFSk8gU0FOVE8KKzMxOkJSOkJSQTpCUkFTSUw6Q0VBUkE6Q0FNT0NJTQorMzI6QlI6QlJBOkJSQVNJTDpDRUFSQTpDQU1QT1MgU0FMRVMKKzMzOkJSOkJSQTpCUkFTSUw6Q0VBUkE6Q0FOSU5ERQorMzQ6QlI6QlJBOkJSQVNJTDpDRUFSQTpDQVBJU1RSQU5PCiszNTpCUjpCUkE6QlJBU0lMOkNFQVJBOkNBUklEQURFCiszNjpCUjpCUkE6QlJBU0lMOkNFQVJBOkNBUklSRQorMzc6QlI6QlJBOkJSQVNJTDpDRUFSQTpDQVJJUklBQ1UKKzM4OkJSOkJSQTpCUkFTSUw6Q0VBUkE6Q0FSSVVTCiszOTpCUjpCUkE6QlJBU0lMOkNFQVJBOkNBUk5BVUJBTAorNDA6QlI6QlJBOkJSQVNJTDpDRUFSQTpDQVNDQVZFTAorNDE6QlI6QlJBOkJSQVNJTDpDRUFSQTpDQVRBUklOQQorNDI6QlI6QlJBOkJSQVNJTDpDRUFSQTpDQVVDQUlBCis0MzpCUjpCUkE6QlJBU0lMOkNFQVJBOkNFRFJPCis0NDpCUjpCUkE6QlJBU0lMOkNFQVJBOkNIQVZBTAorNDU6QlI6QlJBOkJSQVNJTDpDRUFSQTpDSE9ST1pJTkhPCis0NjpCUjpCUkE6QlJBU0lMOkNFQVJBOkNPQ09DSQorNDc6QlI6QlJBOkJSQVNJTDpDRUFSQTpDT1JFQVUKKzQ4OkJSOkJSQTpCUkFTSUw6Q0VBUkE6Q1JBVEVVUworNDk6QlI6QlJBOkJSQVNJTDpDRUFSQTpDUkFUTworNTA6QlI6QlJBOkJSQVNJTDpDRUFSQTpFVVpFQklPCis1MTpCUjpCUkE6QlJBU0lMOkNFQVJBOkZBUklBUyBCUklUTworNTI6QlI6QlJBOkJSQVNJTDpDRUFSQTpGT1JRVUlMSEEKKzUzOkJSOkJSQTpCUkFTSUw6Q0VBUkE6Rk9SVEFMRVpBCis1NDpCUjpCUkE6QlJBU0lMOkNFQVJBOkZSRUNIRUlSSU5IQQorNTU6QlI6QlJBOkJSQVNJTDpDRUFSQTpHRU5FUkFMIFNBTVBBSU8KKzU2OkJSOkJSQTpCUkFTSUw6Q0VBUkE6R1JBQ0EKKzU3OkJSOkJSQTpCUkFTSUw6Q0VBUkE6R1JBTkpBCis1ODpCUjpCUkE6QlJBU0lMOkNFQVJBOkdSQU5KRUlSTworNTk6QlI6QlJBOkJSQVNJTDpDRUFSQTpHUk9BSVJBUworNjA6QlI6QlJBOkJSQVNJTDpDRUFSQTpHVUFJVUJBCis2MTpCUjpCUkE6QlJBU0lMOkNFQVJBOkdVQVJBQ0lBQkEgRE8gTi4KKzYyOkJSOkJSQTpCUkFTSUw6Q0VBUkE6R1VBUkFNSVJBTkdBCis2MzpCUjpCUkE6QlJBU0lMOkNFQVJBOkhJRFJPTEFORElBCis2NDpCUjpCUkE6QlJBU0lMOkNFQVJBOkhPUklaT05URQorNjU6QlI6QlJBOkJSQVNJTDpDRUFSQTpJQklBUElOQQorNjY6QlI6QlJBOkJSQVNJTDpDRUFSQTpJQ0FQVUkKKzY3OkJSOkJSQTpCUkFTSUw6Q0VBUkE6SUNPCis2ODpCUjpCUkE6QlJBU0lMOkNFQVJBOklHQVVUVQorNjk6QlI6QlJBOkJSQVNJTDpDRUFSQTpJTkRFUEVOREVOQ0lBCis3MDpCUjpCUkE6QlJBU0lMOkNFQVJBOklQQVVNSVJJTQorNzE6QlI6QlJBOkJSQVNJTDpDRUFSQTpJUFUKKzcyOkJSOkJSQTpCUkFTSUw6Q0VBUkE6SVBVRUlSQVMKKzczOkJSOkJSQTpCUkFTSUw6Q0VBUkE6SVJBQ0VNQQorNzQ6QlI6QlJBOkJSQVNJTDpDRUFSQTpJUkFVQ1VCQQorNzU6QlI6QlJBOkJSQVNJTDpDRUFSQTpJVEFJQ0FCQQorNzY6QlI6QlJBOkJSQVNJTDpDRUFSQTpJVEFQQUdFCis3NzpCUjpCUkE6QlJBU0lMOkNFQVJBOklUQVBJUE9DQQorNzg6QlI6QlJBOkJSQVNJTDpDRUFSQTpJVEFQSVVOQQorNzk6QlI6QlJBOkJSQVNJTDpDRUFSQTpJVEFSRU1BCis4MDpCUjpCUkE6QlJBU0lMOkNFQVJBOklUQVRJUkEKKzgxOkJSOkJSQTpCUkFTSUw6Q0VBUkE6SkFHVUFSRVRBTUEKKzgyOkJSOkJSQTpCUkFTSUw6Q0VBUkE6SkFHVUFSSUJBUkEKKzgzOkJSOkJSQTpCUkFTSUw6Q0VBUkE6SkFHVUFSSUJFCis4NDpCUjpCUkE6QlJBU0lMOkNFQVJBOkpBR1VBUlVBTkEKKzg1OkJSOkJSQTpCUkFTSUw6Q0VBUkE6SkFSRElNCis4NjpCUjpCUkE6QlJBU0lMOkNFQVJBOkpBVEkKKzg3OkJSOkJSQTpCUkFTSUw6Q0VBUkE6SlVBWkVJUk8gRE8gTlRFCis4ODpCUjpCUkE6QlJBU0lMOkNFQVJBOkpVQ0FTCis4OTpCUjpCUkE6QlJBU0lMOkNFQVJBOkxBR08KKzkwOkJSOkJSQTpCUkFTSUw6Q0VBUkE6TEFWQVMgREEgTUFOR0FCRQorOTE6QlI6QlJBOkJSQVNJTDpDRUFSQTpMSU1PRUlSTyBETyBOT1IuCis5MjpCUjpCUkE6QlJBU0lMOkNFQVJBOk1BREFMRU5BCis5MzpCUjpCUkE6QlJBU0lMOkNFQVJBOk1BUkFDQU5BVQorOTQ6QlI6QlJBOkJSQVNJTDpDRUFSQTpNQVJBTkdVQVBFCis5NTpCUjpCUkE6QlJBU0lMOkNFQVJBOk1BUkNPCis5NjpCUjpCUkE6QlJBU0lMOkNFQVJBOk1BUlRJTk9QT0xFCis5NzpCUjpCUkE6QlJBU0lMOkNFQVJBOk1BU1NBUEUKKzk4OkJSOkJSQTpCUkFTSUw6Q0VBUkE6TUVSVU9DQQorOTk6QlI6QlJBOkJSQVNJTDpDRUFSQTpNSUxBR1JFUworMTAwOkJSOkJSQTpCUkFTSUw6Q0VBUkE6TUlMSEEKKzEwMTpCUjpCUkE6QlJBU0lMOkNFQVJBOk1JU1NBTyBWRUxIQQorMTAyOkJSOkJSQTpCUkFTSUw6Q0VBUkE6TU9NQkFDQQorMTAzOkJSOkJSQTpCUkFTSUw6Q0VBUkE6TU9OU0VOSE9SIFRBQk9TQQorMTA0OkJSOkJSQTpCUkFTSUw6Q0VBUkE6TU9SQURBIE5PVkEKKzEwNTpCUjpCUkE6QlJBU0lMOkNFQVJBOk1PUkFVSk8KKzEwNjpCUjpCUkE6QlJBU0lMOkNFQVJBOk1PUlJJTkhPUworMTA3OkJSOkJSQTpCUkFTSUw6Q0VBUkE6TVVDQU1CTworMTA4OkJSOkJSQTpCUkFTSUw6Q0VBUkE6TVVMVU5HVQorMTA5OkJSOkJSQTpCUkFTSUw6Q0VBUkE6Tk9WQSBPTElOREEKKzExMDpCUjpCUkE6QlJBU0lMOkNFQVJBOk5PVkEgUlVTU0FTCisxMTE6QlI6QlJBOkJSQVNJTDpDRUFSQTpOT1ZPIE9SSUVOVEUKKzExMjpCUjpCUkE6QlJBU0lMOkNFQVJBOk9ST1MKKzExMzpCUjpCUkE6QlJBU0lMOkNFQVJBOlBBQ0FKVVMKKzExNDpCUjpCUkE6QlJBU0lMOkNFQVJBOlBBQ0FUVUJBCisxMTU6QlI6QlJBOkJSQVNJTDpDRUFSQTpQQUNPVEkKKzExNjpCUjpCUkE6QlJBU0lMOkNFQVJBOlBBQ1VKQQorMTE3OkJSOkJSQTpCUkFTSUw6Q0VBUkE6UEFMSEFOTworMTE4OkJSOkJSQTpCUkFTSUw6Q0VBUkE6UEFMTUFDSUEKKzExOTpCUjpCUkE6QlJBU0lMOkNFQVJBOlBBUkFDVVJVCisxMjA6QlI6QlJBOkJSQVNJTDpDRUFSQTpQQVJBSVBBQkEKKzEyMTpCUjpCUkE6QlJBU0lMOkNFQVJBOlBBUkFNQlUKKzEyMjpCUjpCUkE6QlJBU0lMOkNFQVJBOlBBUkFNT1RJCisxMjM6QlI6QlJBOkJSQVNJTDpDRUFSQTpQRURSQSBCUkFOQ0EKKzEyNDpCUjpCUkE6QlJBU0lMOkNFQVJBOlBFTkFGT1JURQorMTI1OkJSOkJSQTpCUkFTSUw6Q0VBUkE6UEVSRUlSTworMTI2OkJSOkJSQTpCUkFTSUw6Q0VBUkE6UEVURU5DT1NURQorMTI3OkJSOkJSQTpCUkFTSUw6Q0VBUkE6UElRVUVUIENBUk5FSVJPCisxMjg6QlI6QlJBOkJSQVNJTDpDRUFSQTpQSVJFUyBGRVJSRUlSQQorMTI5OkJSOkJSQTpCUkFTSUw6Q0VBUkE6UE9SQU5HQQorMTMwOkJSOkJSQTpCUkFTSUw6Q0VBUkE6UE9SVEVJUkFTCisxMzE6QlI6QlJBOkJSQVNJTDpDRUFSQTpQT1RFTkdJCisxMzI6QlI6QlJBOkJSQVNJTDpDRUFSQTpQT1RJUkVUQU1BCisxMzM6QlI6QlJBOkJSQVNJTDpDRUFSQTpRVUlURVJJQU5PUE9MRVMKKzEzNDpCUjpCUkE6QlJBU0lMOkNFQVJBOlFVSVhBREEKKzEzNTpCUjpCUkE6QlJBU0lMOkNFQVJBOlFVSVhFTE8KKzEzNjpCUjpCUkE6QlJBU0lMOkNFQVJBOlFVSVhFUkFNT0JJTQorMTM3OkJSOkJSQTpCUkFTSUw6Q0VBUkE6UVVJWEVSRQorMTM4OkJSOkJSQTpCUkFTSUw6Q0VBUkE6UkVERU5DQU8KKzEzOTpCUjpCUkE6QlJBU0lMOkNFQVJBOlJFUklVVFVCQQorMTQwOkJSOkJSQTpCUkFTSUw6Q0VBUkE6UlVTU0FTCisxNDE6QlI6QlJBOkJSQVNJTDpDRUFSQTpTQUJPRUlSTworMTQyOkJSOkJSQTpCUkFTSUw6Q0VBUkE6U0FOVEEgUVVJVEVSSUEKKzE0MzpCUjpCUkE6QlJBU0lMOkNFQVJBOlNBTlRBTkEgRE8gQS4uLi4KKzE0NDpCUjpCUkE6QlJBU0lMOkNFQVJBOlNBTlRBTkEgRE8gQ0FSSVIKKzE0NTpCUjpCUkE6QlJBU0lMOkNFQVJBOlNBTyBCRU5FRElUTworMTQ2OkJSOkJSQTpCUkFTSUw6Q0VBUkE6U0FPIEdPTkNBTE8gRE8gQQorMTQ3OkJSOkJSQTpCUkFTSUw6Q0VBUkE6U0FPIEpPQU8gRE8gSi4KKzE0ODpCUjpCUkE6QlJBU0lMOkNFQVJBOlNBTyBMVUlaIERPIENVUlUKKzE0OTpCUjpCUkE6QlJBU0lMOkNFQVJBOlNFTkFET1IgUE9NUEVVCisxNTA6QlI6QlJBOkJSQVNJTDpDRUFSQTpTRU5BRE9SIFNBCisxNTE6QlI6QlJBOkJSQVNJTDpDRUFSQTpTT0JSQUwKKzE1MjpCUjpCUkE6QlJBU0lMOkNFQVJBOlNPTE9OT1BPTEUKKzE1MzpCUjpCUkE6QlJBU0lMOkNFQVJBOlRBQlVMRUlSTyBETyBOVEUKKzE1NDpCUjpCUkE6QlJBU0lMOkNFQVJBOlRBTUJPUklMCisxNTU6QlI6QlJBOkJSQVNJTDpDRUFSQTpUQVVBCisxNTY6QlI6QlJBOkJSQVNJTDpDRUFSQTpUSUFOR1VBCisxNTc6QlI6QlJBOkJSQVNJTDpDRUFSQTpUUkFJUkkKKzE1ODpCUjpCUkE6QlJBU0lMOkNFQVJBOlRVUlVSVQorMTU5OkJSOkJSQTpCUkFTSUw6Q0VBUkE6VUJBSkFSQQorMTYwOkJSOkJSQTpCUkFTSUw6Q0VBUkE6VU1BUkkKKzE2MTpCUjpCUkE6QlJBU0lMOkNFQVJBOlVNSVJJTQorMTYyOkJSOkJSQTpCUkFTSUw6Q0VBUkE6VVJVQlVSRVRBTUEKKzE2MzpCUjpCUkE6QlJBU0lMOkNFQVJBOlVSVU9DQQorMTY0OkJSOkJSQTpCUkFTSUw6Q0VBUkE6VkFSSk9UQQorMTY1OkJSOkJSQTpCUkFTSUw6Q0VBUkE6VkFSWkVBIEFMRUdSRQorMTY2OkJSOkJSQTpCUkFTSUw6Q0VBUkE6VklDT1NBIERPIENFQVJBCisxOkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOkEuIERPUyBET1VSQURPUworMjpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpBQkFFVEUKKzM6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6QUJSRSBDQU1QTworNDpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpBQ0FJQUNBCis1OkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOkFDVUNFTkEKKzY6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6QUdVQSBCT0EKKzc6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6QUdVQSBDT01QUklEQQorODpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpBR1VBTklMCis5OkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOkFHVUFTIEZPUk1PU0FTCisxMDpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpBR1VBUyBWRVJNRUxIQVMKKzExOkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOkFJTU9SRVMKKzEyOkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOkFJVVJVT0NBCisxMzpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpBTEFHT0EKKzE0OkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOkFMQkVSVElOQQorMTU6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6QUxFTSBQQVJBSUJBCisxNjpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpBTEZFTkFTCisxNzpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpBTE1FTkFSQQorMTg6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6QUxQRVJDQVRBCisxOTpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpBTFBJTk9QT0xJUworMjA6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6QUxURVJPU0EKKzIxOkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOkFMVE8gUklPIERPQ0UKKzIyOkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOkFMVkFSRU5HQQorMjM6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6QUxWSU5PUE9MSVMKKzI0OkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOkFMVk9SQURBIERFIE1JTkEKKzI1OkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOkFNUEFSTyBEQSBTRVJSQQorMjY6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6QU5EUkFEQVMKKzI3OkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOkFORFJFIEZFUk5BTkRFUworMjg6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6QU5EUkVMQU5ESUEKKzI5OkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOkFOVE9OSU8gQ0FSTE9TCiszMDpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpBTlRPTklPIERJQVMKKzMxOkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOkFOVE9OSU8gUFJBRE8gREUKKzMyOkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOkFSQUNBSQorMzM6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6QVJBQ0lUQUJBCiszNDpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpBUkFDVUFJCiszNTpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpBUkFHVUFSSQorMzY6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6QVJBTlRJTkEKKzM3OkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOkFSQVBPTkdBCiszODpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpBUkFQVUEKKzM5OkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOkFSQVVKT1MKKzQwOkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOkFSQVhBCis0MTpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpBUkNFQlVSR08KKzQyOkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOkFSQ09TCis0MzpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpBUkVBRE8KKzQ0OkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOkFSR0lSSVRBCis0NTpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpBUklOT1MKKzQ2OkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOkFTVE9MRk8gRFVUUkEKKzQ3OkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOkFUQUxFSUEKKzQ4OkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOkFVR1VTVE8gREUgTElNQQorNDk6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6QkFFUEVOREkKKzUwOkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOkJBTERJTQorNTE6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6QkFNQlVJCis1MjpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpCQU5ERUlSQQorNTM6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6QkFORElFUkEgRE8gU1VMCis1NDpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpCQVJBTyBEJ01PTlRFIEEKKzU1OkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOkJBUkFPIERFIENPQ0FJUworNTY6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6QkFSQkFDRU5BCis1NzpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpCQVJSQSBMT05HQQorNTg6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6QkFSUkVJUk8gR1JBTkRFCis1OTpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpCQVJST1NPCis2MDpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpCRUxBIFZJU1RBIEQnTUkKKzYxOkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOkJFTE1JUk8gQlJBR0EKKzYyOkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOkJFTE8gSE9SSVpPTlRFCis2MzpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpCRUxPIE9SSUVOVEUKKzY0OkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOkJFTE8gVkFMRQorNjU6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6QkVSSUxPCis2NjpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpCRVJUT1BPTElTCis2NzpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpCRVRJTQorNjg6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6QklBUyBGT1JURVMKKzY5OkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOkJJQ0FTCis3MDpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpCSVFVSU5IQVMKKzcxOkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOkJPQSBFU1BFUkFOQ0EKKzcyOkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOkJPQ0FJTkEgREUgTUlOQQorNzM6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6Qk9DQUlVVkEKKzc0OkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOkJPTSBERVNQQUNITworNzU6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6Qk9NIEpBUkRJTSBEJ01JCis3NjpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpCT00gSkVTVVMgRCdBTVAKKzc3OkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOkJPTSBKRVNVUyBEJ0dBTAorNzg6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6Qk9NIEpFU1VTIERBIFBFTgorNzk6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6Qk9NIFJFUE9VU08KKzgwOkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOkJPTSBTVUNFU1NPCis4MTpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpCT05GSU0KKzgyOkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOkJPTkZJTk9QT0xJUyBECis4MzpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpCT1JEQSBEQSBNQVRBCis4NDpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpCT1RFTEhPUworODU6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6Qk9UVU1JUklNCis4NjpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpCUkFTIFBJUkVTCis4NzpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpCUkFTSUxJQSBERSBNLgorODg6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6QlJBVU5BUworODk6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6QlJBWk9QT0xJUworOTA6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6QlJVTUFESU5ITworOTE6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6QlVFTk8gQlJBTkRBTworOTI6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6QlVFTk9QT0xJUworOTM6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6QlVSSVRJUworOTQ6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6QlVSSVRJWkVJUk8KKzk1OkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOkNBQk8gVkVSREUKKzk2OkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOkNBQ0hPRUlSQSBEJ01JTgorOTc6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6Q0FDSE9FSVJBIERFIE1BQworOTg6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6Q0FDSE9FSVJBIERPVVJBCis5OTpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpDQUVUQU5PUE9MSVMKKzEwMDpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpDQUVURQorMTAxOkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOkNBSUFOQQorMTAyOkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOkNBSlVSSQorMTAzOkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOkNBTERBUworMTA0OkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOkNBTUFDSE8KKzEwNTpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpDQU1BTkRVQ0FJQQorMTA2OkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOkNBTUJVSQorMTA3OkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOkNBTUJVUVVJUkEKKzEwODpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpDQU1QQU5BUklPCisxMDk6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6Q0FNUEFOSEEKKzExMDpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpDQU1QRVNUUkUKKzExMTpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpDQU1QSU5BIFZFUkRFCisxMTI6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6Q0FNUE8gQkVMTworMTEzOkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOkNBTVBPIERPIE1FSU8KKzExNDpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpDQU1QTyBGTE9SSURPCisxMTU6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6Q0FNUE9TIEFMVE9TCisxMTY6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6Q0FNUE9TIEdFUkFJUworMTE3OkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOkNBTkEgVkVSREUKKzExODpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpDQU5BQQorMTE5OkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOkNBTkFQT0xJUworMTIwOkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOkNBTkRFSUFTCisxMjE6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6Q0FQQVJBTworMTIyOkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOkNBUEVMQSBOT1ZBCisxMjM6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6Q0FQRUxJTkhBCisxMjQ6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6Q0FQRVRJTkdBCisxMjU6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6Q0FQSU0gQlJBTkNPCisxMjY6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6Q0FQSU5PUE9MSVMKKzEyNzpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpDQVBJVEFPICBFTkVBUworMTI4OkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOkNBUElUT0xJTworMTI5OkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOkNBUFVUSVJBCisxMzA6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6Q0FSQUkKKzEzMTpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpDQVJBTkFJQkEKKzEzMjpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpDQVJBTkRBSQorMTMzOkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOkNBUkFOR09MQQorMTM0OkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOkNBUkFUSU5HQQorMTM1OkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOkNBUkFWQUxIT1BPTElTCisxMzY6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6Q0FSQk9OSVRBCisxMzc6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6Q0FSRUFDVQorMTM4OkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOkNBUkxPUyBDSEFHQVMKKzEzOTpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpDQVJNRVNJQQorMTQwOkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOkNBUk1PIEQnQ0FDSE9FSQorMTQxOkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOkNBUk1PIERBIE1BVEEKKzE0MjpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpDQVJNTyBERSBNSU5BUworMTQzOkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOkNBUk1PIERPIENBSlVSVQorMTQ0OkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOkNBUk1PIERPIFAuCisxNDU6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6Q0FSTU8gRE8gUklPIEMuCisxNDY6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6Q0FSTU9QT0xJUyBEJ01JCisxNDc6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6Q0FSUkFOQ0FTCisxNDg6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6Q0FSVkFMSE9TCisxNDk6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6Q0FTQSBHUkFOREUKKzE1MDpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpDQVNDQUxITyBSSUNPCisxNTE6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6Q0FTU0lBCisxNTI6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6Q0FTU0lURVJJVEEKKzE1MzpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpDQVRBR1VBU0VTCisxNTQ6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6Q0FUQVMgQUxUQVMgRCdOCisxNTU6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6Q0FYQU1CVQorMTU2OkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOkNFRFJPIERPIEFCQUVURQorMTU3OkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOkNFTlRSQUwgREUgTS4KKzE1ODpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpDRU5UUkFMSU5BCisxNTk6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6Q0hBQ0FSQQorMTYwOkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOkNIQUxFCisxNjE6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6Q0hBUEFEQSBETyBOVEUKKzE2MjpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpDSElBRE9SCisxNjM6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6Q0lQT1RBTkVBCisxNjQ6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6Q0xBUkFWQUwKKzE2NTpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpDTEFSTyBET1MgUE9DT0UKKzE2NjpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpDTEFVRElPCisxNjc6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6Q09JTUJSQQorMTY4OkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOkNPTFVOQQorMTY5OkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOkNPTUVOREFET1IgR09NRQorMTcwOkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOkNPTUVSQ0lOSE8KKzE3MTpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpDT05DLkQnTUFUTyBERU4KKzE3MjpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpDT05DRS5ET1MgT1VST1MKKzE3MzpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpDT05DRUkuRCdJUEFORU0KKzE3NDpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpDT05DRUlDQU8gREEgQS4KKzE3NTpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpDT05DRUlDQU8gREEgUEVECisxNzY6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6Q09OQ0VJQ0FPIERBUyBBCisxNzc6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6Q09OQ0VJQ0FPIERPIFAuCisxNzg6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6Q09OQ0VJQ0FPIFIuVkVSRAorMTc5OkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOkNPTkdPTkhBTAorMTgwOkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOkNPTkdPTkhBUworMTgxOkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOkNPTkdPTkhBUyBEJ05PUgorMTgyOkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOkNPTlFVSVNUQQorMTgzOkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOkNPTlNFTEguTEFGQUlFVAorMTg0OkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOkNPTlNFTEhFSVJPIFBFTgorMTg1OkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOkNPTlNPTEFDQU8KKzE4NjpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpDT05UQUdFTQorMTg3OkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOkNPUVVFSVJBTAorMTg4OkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOkNPUi5YQVZJRVIgQ0hBVgorMTg5OkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOkNPUkRJU0JVUkdPCisxOTA6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6Q09SRElTTEFORElBCisxOTE6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6Q09SSU5UTworMTkyOkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOkNPUk9BQ0kKKzE5MzpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpDT1JPQ0FPIERFIEpFU1UKKzE5NDpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpDT1JPTUFOREVMCisxOTU6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6Q09ST05FTCBGQUJSSUNJCisxOTY6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6Q09ST05FTCBNVVJUQQorMTk3OkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOkNPUk9ORUwgUEFDSEVDTworMTk4OkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOkNPUlJFR08gREFOVEEKKzE5OTpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpDT1JSRUdPIERPIEJPTSBKCisyMDA6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6Q09SUkVHTyBOT1ZPCisyMDE6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6Q09VVE8gREUgTS5ERSBNCisyMDI6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6Q1JJU1RBSVMKKzIwMzpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpDUklTVEFMSUEKKzIwNDpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpDUklTVElBTk8gT1RPTkkKKzIwNTpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpDUklTVElOQQorMjA2OkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOkNSVUNJTEFORElBCisyMDc6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6Q1JVWkVJUk8gREEgRi4KKzIwODpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpDUlVaSUxJQQorMjA5OkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOkNVUlZFTE8KKzIxMDpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpEQVRBUworMjExOkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOkRFTEZJTSBNT1JFSVJBCisyMTI6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6REVMRklOT1BPTElTCisyMTM6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6REVTQ09CRVJUTworMjE0OkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOkRFU1RFLkQnRU5UUkUgUgorMjE1OkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOkRFU1RFUlJPIERPIE1FTAorMjE2OkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOkRJQU1BTlRJTkEKKzIxNzpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpESU9HTyBEJ1ZBU0NPTkMKKzIxODpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpESU9OSVNJTworMjE5OkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOkRJVklORVNJQQorMjIwOkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOkRJVklOTworMjIxOkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOkRJVklOTyBEJ0xBUkFOSgorMjIyOkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOkRJVklOT0xBTkRJQSBECisyMjM6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6RElWSU5PUE9MSVMKKzIyNDpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpESVZJU0EgTk9WQQorMjI1OkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOkRPTSBDQVZBVEkKKzIyNjpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpET00gSk9BUVVJTQorMjI3OkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOkRPTSBTSUxWRVJJTworMjI4OkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOkRPTSBWSUNPU08KKzIyOTpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpET05BIEVVWkVCSUEKKzIzMDpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpET1JFUyBERSBDQU1QT1MKKzIzMTpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpET1JFUyBERSBHLgorMjMyOkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOkRPUkVTIERPIElOREFJQQorMjMzOkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOkRPUkVTIERPIFRVUlZPCisyMzQ6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6RE9SRVNPUE9MSVMKKzIzNTpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpET1VSQURPUVVBUkEKKzIzNjpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpFTE9JIE1FTkRFUworMjM3OkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOkVOR0VOSEVJUk8gQ0FMRAorMjM4OkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOkVOR0VOSEVJUk8gTi4KKzIzOTpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpFTlRSRSBSSU9TIERFIE0KKzI0MDpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpFUlZBTElBCisyNDE6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6RVNNRVJBTERBUworMjQyOkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOkVTUC5TQU5UTyBEJ0RPVQorMjQzOkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOkVTUEVSQSBGRUxJWgorMjQ0OkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOkVTUElOT1NBCisyNDU6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6RVNUSVZBCisyNDY6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6RVNUUkVMQSBEQUxWQQorMjQ3OkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOkVTVFJFTEEgRE8gSS4KKzI0ODpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpFU1RSRUxBIERPIFNVTAorMjQ5OkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOkVVR0VOT1BPTElTCisyNTA6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6RVdCQU5LIEQnQ0FNQVJBCisyNTE6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6RVhUUkVNQQorMjUyOkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOkZBTUEKKzI1MzpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpGQVJJQSBMRU1PUworMjU0OkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOkZFTElDSU8gRE9TIFMuCisyNTU6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6RkVMSVNCRVJUTyBDLgorMjU2OkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOkZFTElTQlVSR08KKzI1NzpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpGRUxJWExBTkRJQQorMjU4OkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOkZFUk5BTkRFUyBUT1VSSQorMjU5OkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOkZFUlJPUworMjYwOkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOkZMT1JFU1RBTAorMjYxOkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOkZPUk1JR0EKKzI2MjpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpGT1JNT1NPCisyNjM6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6Rk9SVEFMRVpBIERFIE0uCisyNjQ6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6Rk9SVFVOQSBEJ01JTkFTCisyNjU6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6RlJBTkNJU0NPIEJBREFSCisyNjY6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6RlJBTkNJU0NPIERVTU9OCisyNjc6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6RlJBTkNJU0NPIFNBCisyNjg6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6RlJFSSBHQVNQQVIKKzI2OTpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpGUkVJIElOT0NFTkNJTworMjcwOkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOkZST05URUlSQQorMjcxOkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOkZSVVRBTAorMjcyOkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOkZVTklMQU5ESUEKKzI3MzpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpHQUxJTEVJQQorMjc0OkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOkdPTkNBTFZFUworMjc1OkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOkdPTlpBR0EKKzI3NjpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpHT1VWRUEKKzI3NzpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpHT1ZFUk5BRE9SIFYuCisyNzg6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6R1JBTyBNT0dPTAorMjc5OkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOkdSVVBJQVJBCisyODA6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6R1VBTkhBRVMKKzI4MTpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpHVUFQRQorMjgyOkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOkdVQVJBQ0lBQkEKKzI4MzpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpHVUFSQU5FU0lBCisyODQ6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6R1VBUkFOSQorMjg1OkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOkdVQVJBUkEKKzI4NjpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpHVUFSREEtTU9SCisyODc6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6R1VBWFVQRQorMjg4OkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOkdVSURPVkFMCisyODk6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6R1VJTUFSQU5JQQorMjkwOkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOkdVSVJJQ0VNQQorMjkxOkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOkdVUklOSEFUQQorMjkyOkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOkhFTElPRE9SQQorMjkzOkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOklBUFUKKzI5NDpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpJQkVSVElPR0EKKzI5NTpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpJQklBCisyOTY6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6SUJJQUkKKzI5NzpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpJQklSQUNJCisyOTg6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6SUJJUklURQorMjk5OkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOklCSVRJVVJBIERFIE1JTkEKKzMwMDpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpJQklUVVJVTkEKKzMwMTpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpJR0FSQVBFCiszMDI6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6SUdBUkFUSU5HQQorMzAzOkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOklHVUFUQU1BCiszMDQ6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6SUpBQ0kKKzMwNTpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpJTElDSU5FQQorMzA2OkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOklOQ09ORklERU5URVMKKzMwNzpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpJTkRJQU5PUE9MSVMKKzMwODpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpJTkdBSQorMzA5OkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOklOSEFQSU0KKzMxMDpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpJTkhBVU1BUworMzExOkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOklOSU1VVEFCQQorMzEyOkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOklQQU5FTUEKKzMxMzpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpJUEFUSU5HQQorMzE0OkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOklQSUFDVQorMzE1OkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOklQVUlVTkEKKzMxNjpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpJUkFJIERFIE1JTkFTCiszMTc6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6SVRBQklSQQorMzE4OkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOklUQUJJUklOSEEgREUgTQorMzE5OkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOklUQUJJUklUTworMzIwOkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOklUQUNBTUJJUkEKKzMyMTpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpJVEFDQVJBTUJJCiszMjI6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6SVRBR1VBUkEKKzMyMzpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpJVEFJUEUKKzMyNDpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpJVEFKVUJBCiszMjU6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6SVRBTUFSQU5ESUJBCiszMjY6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6SVRBTUFSQVRJIEQnTUlOCiszMjc6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6SVRBTUJBQ1VSSQorMzI4OkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOklUQU1CRSBEJ01BVE8gRAorMzI5OkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOklUQU1PR0kKKzMzMDpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpJVEFNT05URQorMzMxOkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOklUQU5IQU5EVQorMzMyOkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOklUQU5IT01JCiszMzM6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6SVRBT0JJTQorMzM0OkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOklUQVBBR0lQRQorMzM1OkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOklUQVBFQ0VSSUNBCiszMzY6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6SVRBUEVWQQorMzM3OkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOklUQVRJQUlVQ1UKKzMzODpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpJVEFVTkEKKzMzOTpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpJVEFWRVJBVkEKKzM0MDpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpJVElOR0EKKzM0MTpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpJVFVFVEEKKzM0MjpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpJVFVJVVRBQkEKKzM0MzpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpJVFVNSVJJTQorMzQ0OkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOklUVVJBTUEKKzM0NTpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpJVFVUSU5HQQorMzQ2OkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOkpBQk9USUNBVFVCQVMKKzM0NzpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpKQUNJTlRPCiszNDg6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6SkFDVUkKKzM0OTpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpKQUNVVElOR0EKKzM1MDpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpKQUdVQVJBQ1UKKzM1MTpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpKQU5BVUJBCiszNTI6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6SkFOVUFSSUEKKzM1MzpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpKQVBBUkFJQkEKKzM1NDpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpKRUNFQUJBCiszNTU6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6SkVRVUVSSQorMzU2OkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOkpFUVVJVEFJCiszNTc6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6SkVRVUlUSUJBCiszNTg6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6SkVRVUlUSU5IT05IQQorMzU5OkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOkpFU1VBTklBCiszNjA6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6Sk9BSU1BCiszNjE6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6Sk9BTkVTSUEKKzM2MjpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpKT0FPIE1PTkxFVkFERQorMzYzOkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOkpPQU8gUElOSEVJUk8KKzM2NDpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpKT0FRVUlNIEZFTElDSU8KKzM2NTpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpKT1JEQU5JQQorMzY2OkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOkpPU0UgREUgTUVMTworMzY3OkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOkpVSVogREUgRk9SQQorMzY4OkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOkpVUkFNRU5UTworMzY5OkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOkpVUlVBSUEKKzM3MDpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpMQURBSU5IQQorMzcxOkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOkxBR0FNQVIKKzM3MjpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpMQUdBTyBET1MgUEFUT1MKKzM3MzpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpMQUdPCiszNzQ6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6TEFHT0EgREEgUFJBVEEKKzM3NTpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpMQUdPQSBET1VSQURBCiszNzY6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6TEFHT0EgRk9STU9TQQorMzc3OkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOkxBR09BIFNBTlRBCiszNzg6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6TEFKSU5IQQorMzc5OkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOkxBTUJBUkkKKzM4MDpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpMQU1JTQorMzgxOkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOkxBUkFOSkFMCiszODI6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6TEFTU0FOQ0UKKzM4MzpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpMQVZSQVMKKzM4NDpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpMRUFORFJPIEZFUlJFSVIKKzM4NTpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpMRU9QT0xESU5BCiszODY6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6TElCRVJEQURFCiszODc6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6TElNQSBEVUFSVEUKKzM4ODpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpMVU1JTkFSSUFTCiszODk6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6TFVaCiszOTA6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6TUFDSEFDQUxJUworMzkxOkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOk1BQ0hBRE8KKzM5MjpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpNQURSRSBEJ0RFVVMgRCcKKzM5MzpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpNQUxBQ0FDSEVUQQorMzk0OkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOk1BTkdBCiszOTU6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6TUFOSFVBQ1UKKzM5NjpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpNQU5IVU1JUklNCiszOTc6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6TUFOVEVOQQorMzk4OkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOk1BUiBERSBFU1BBTkhBCiszOTk6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6TUFSQVZJTEhBUworNDAwOkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOk1BUklBIERBIEZFCis0MDE6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6TUFSSUFOQQorNDAyOkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOk1BUklMQUMKKzQwMzpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpNQVJJUEEgREUgTUlOQVMKKzQwNDpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpNQVJMSUVSSUEKKzQwNTpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpNQVJNRUxPUE9MSVMKKzQwNjpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpNQVJUSU5ITyBDQU1QT1MKKzQwNzpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpNQVRFUkxBTkRJQQorNDA4OkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOk1BVEVVUyBMRU1FCis0MDk6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6TUFUSUFTIEJBUkJPU0EKKzQxMDpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpNQVRJUE8KKzQxMTpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpNQVRPIFZFUkRFCis0MTI6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6TUFUT1pJTkhPUworNDEzOkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOk1FREVJUk9TCis0MTQ6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6TUVESU5BCis0MTU6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6TUVOREVTIFBJTUVOVEVMCis0MTY6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6TUVSQ0VTCis0MTc6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6TUVTUVVJVEEKKzQxODpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpNSU5BUyBOT1ZBUworNDE5OkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOk1JTkRVUkkKKzQyMDpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpNSVJBQkVMQQorNDIxOkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOk1JUkFET1VSTworNDIyOkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOk1JUkFJCis0MjM6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6TU9FREEKKzQyNDpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpNT0VNQQorNDI1OkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOk1PTkpPTE9TCis0MjY6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6TU9OU0VOSE9SIFBBVUxPCis0Mjc6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6TU9OVEFMVkFOSUEKKzQyODpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpNT05URSBBTEVHUkUgRAorNDI5OkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOk1PTlRFIEFaVUwKKzQzMDpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpNT05URSBCRUxPCis0MzE6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6TU9OVEUgQ0FSTUVMTworNDMyOkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOk1PTlRFIFNBTk8gREUgTQorNDMzOkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOk1PTlRFIFNJQU8KKzQzNDpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpNT05URVMgQ0xBUk9TCis0MzU6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6TU9SQURBIE5PVkEgTUlOQQorNDM2OkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOk1PUlJPIERFIEdSQUNBCis0Mzc6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6TU9SUk8gRE8gUElMQVIKKzQzODpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpNVU5IT1oKKzQzOTpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpNVVJJQUUKKzQ0MDpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpNVVRVTQorNDQxOkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOk1VVFVUSU5BCis0NDI6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6TVVaQU1CSU5ITworNDQzOkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOk5BQ0lQIFJBWURBTgorNDQ0OkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOk5BTlVRVUUKKzQ0NTpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpOQVRFUkNJQQorNDQ2OkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOk5BWkFSRU5PCis0NDc6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6TkVQT01VQ0VOTworNDQ4OkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOk5PVkEgRVJBCis0NDk6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6Tk9WQSBMSU1BCis0NTA6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6Tk9WQSBNT0RJQ0EKKzQ1MTpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpOT1ZBIFBPTlRFCis0NTI6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6Tk9WQSBSRVNFTkRFCis0NTM6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6Tk9WQSBTRVJSQU5BCis0NTQ6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6Tk9WTyBDUlVaRUlSTworNDU1OkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOk8uVkVSREVTIEQgTUlOQQorNDU2OkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOk9MQVJJQQorNDU3OkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOk9MSU1QTyBOT1JPTkhBCis0NTg6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6T0xJVkVJUkEKKzQ1OTpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpPTElWRUlSQSBGT1JURVMKKzQ2MDpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpPTkNBIERFIFBJVEFOR1UKKzQ2MTpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpPVVJPIEJSQU5DTworNDYyOkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOk9VUk8gRklOTworNDYzOkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOk9VUk8gUFJFVE8KKzQ2NDpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpQQURSRSBQQVJBSVNPCis0NjU6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6UEFJTkVJUkFTCis0NjY6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6UEFJTlMKKzQ2NzpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpQQUlWQQorNDY4OkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOlBBTE1BCis0Njk6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6UEFNUEEKKzQ3MDpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpQQVBBR0FJT1MKKzQ3MTpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpQQVJBIERFIE1JTkFTCis0NzI6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6UEFSQUNBVFUKKzQ3MzpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpQQVJBR1VBQ1UKKzQ3NDpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpQQVJBSVNPUE9MSVMKKzQ3NTpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpQQVJBT1BFQkEKKzQ3NjpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpQQVNTQSBRVUFUUk8KKzQ3NzpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpQQVNTQSBURU1QTworNDc4OkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOlBBU1NBIFZJTlRFCis0Nzk6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6UEFTU0FCRU0KKzQ4MDpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpQQVNTT1MKKzQ4MTpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpQQVRPUyBERSBNSU5BUworNDgyOkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOlBBVFJPQ0lOSU8KKzQ4MzpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpQQVRST0NJTklPIEQnTVUKKzQ4NDpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpQQVVMQSBDQU5ESURPCis0ODU6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6UEFVTElTVEEKKzQ4NjpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpQQVZBTworNDg3OkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOlBFQ0FOSEEKKzQ4ODpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpQRURSQSBBWlVMCis0ODk6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6UEVEUkEgRE8gQU5UQQorNDkwOkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOlBFRFJBIERPIElOREFJQQorNDkxOkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOlBFRFJBIERPVVJBREEKKzQ5MjpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpQRURSQUxWQQorNDkzOkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOlBFRFJJTk9QT0xJUworNDk0OkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOlBFRFJPIExFT1BPTERPCis0OTU6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6UEVEUk8gVEVJWEVJUkEKKzQ5NjpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpQRVFVRVJJCis0OTc6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6UEVRVUkKKzQ5ODpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpQRVJESUdBTworNDk5OkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOlBFUkRJWkVTCis1MDA6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6UEVSRE9FUworNTAxOkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOlBFU0NBRE9SCis1MDI6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6UElBVQorNTAzOkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOlBJRURBRC5EJ1BPTlRFCis1MDQ6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6UElFREFERSBEJ0dFUkFJCis1MDU6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6UElFREFERSBEJ1JJTyBHCis1MDY6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6UElNRU5UQQorNTA3OkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOlBJUkFDRU1BCis1MDg6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6UElSQUpVQkEKKzUwOTpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpQSVJBTkdBCis1MTA6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6UElSQU5HVUNVCis1MTE6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6UElSQU5HVUlOSE8KKzUxMjpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpQSVJBUEVUSU5HQQorNTEzOkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOlBJUkFQT1JBCis1MTQ6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6UElSQVVCQQorNTE1OkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOlBJVEFOR1VJCis1MTY6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6UElVSQorNTE3OkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOlBMQU5VUkEKKzUxODpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpQT0NPIEZVTkRPCis1MTk6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6UE9DT1MgREUgQ0FMREFTCis1MjA6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6UE9DUkFORQorNTIxOkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOlBPTVBFVQorNTIyOkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOlBPTlRFIE5PVkEKKzUyMzpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpQT1JURUlSSU5IQQorNTI0OkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOlBPUlRPIEZJUk1FCis1MjU6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6UE9URQorNTI2OkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOlBPVVNPIEFMRUdSRQorNTI3OkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOlBPVVNPIEFMVE8KKzUyODpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpQUkFET1MKKzUyOTpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpQUkFUQQorNTMwOkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOlBSQVRBUE9MSVMKKzUzMTpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpQUkFUSU5IQQorNTMyOkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOlBSRVMuQkVSTkFSREVTCis1MzM6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6UFJFU0lEIE9MRUdBUklPCis1MzQ6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6UFJFU0lERU5URSBKLgorNTM1OkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOlBSRVNJREVOVEUgSy4KKzUzNjpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpQUkVTSURFTlRFIFNPQVIKKzUzNzpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpQUlVERU5URSBEJ01PUkEKKzUzODpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpRVUFSVEVMIEdFUkFMCis1Mzk6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6UVVFTFVaSVRBCis1NDA6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6UkFQT1NPUworNTQxOkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOlJBVUwgU09BUkVTCis1NDI6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6UkVDUkVJTworNTQzOkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOlJFU0VOREUgQ09TVEEKKzU0NDpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpSRVNQTEVORE9SCis1NDU6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6UkVTU0FRVUlOSEEKKzU0NjpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpSSUFDSE8gRE9TIE1BQ0EKKzU0NzpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpSSUJFSVJBTyBEJ05FVkUKKzU0ODpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpSSUJFSVJBTyBWRVJNRUwKKzU0OTpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpSSU8gQUNJTUEKKzU1MDpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpSSU8gQ0FTQ0EKKzU1MTpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpSSU8gRE8gUFJBRE8KKzU1MjpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpSSU8gRE9DRQorNTUzOkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOlJJTyBFU1BFUkEKKzU1NDpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpSSU8gTUFOU08KKzU1NTpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpSSU8gTk9WTworNTU2OkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOlJJTyBQQVJBTkFJQkEKKzU1NzpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpSSU8gUEFSRE8gRCdNSU4KKzU1ODpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpSSU8gUElSQUNJQ0FCQQorNTU5OkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOlJJTyBQT01CQQorNTYwOkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOlJJTyBQUkVUTworNTYxOkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOlJJTyBWRVJNRUxITworNTYyOkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOlJJVEFQT0xJUworNTYzOkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOlJPQ0hFRE8gREUgTUlOQQorNTY0OkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOlJPREVJUk8KKzU2NTpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpST01BUklBCis1NjY6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6UlVCRUxJVEEKKzU2NzpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpSVUJJTQorNTY4OkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOlMuQU5ULkQnUklPIEFCQQorNTY5OkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOlMuQU5UT04uRCdBTVBBUgorNTcwOkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOlMuQU5UT04uRCdBVkVOVAorNTcxOkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOlMuQU5UT04uRCdHUkFNQQorNTcyOkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOlMuQkFSQkFSQSBEJ1RVRworNTczOkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOlMuQkVOVE8gQUJBREUKKzU3NDpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpTLkJSQVMgRCdTVUFDVUkKKzU3NTpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpTLkNSVVogRCdFU0NBTFYKKzU3NjpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpTLkRPTUlOR09TIEQnUFIKKzU3NzpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpTLkZDTy5EJ09MSVZFSVIKKzU3ODpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpTLkdPTkMuRCdSSU8gQUIKKzU3OTpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpTLkdPTkMuRE8gU0FQVUMKKzU4MDpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpTLkdPTkNBTE8gRCdQQVIKKzU4MTpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpTLkpPQU8gRCdPUklFTlQKKzU4MjpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpTLkpPQU8gRCdQQVJBSVMKKzU4MzpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpTLkpPQU8gTkVQT01VQ0UKKzU4NDpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpTLkpPU0UgRCdHT0lBQkEKKzU4NTpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpTLkpPU0UgRCdWQVJHSU4KKzU4NjpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpTLkpPU0UgRE8gQUxFR1IKKzU4NzpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpTLkpPU0UgRE8gTUFOVEkKKzU4ODpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpTLk1BUklBIEQnSVRBQkkKKzU4OTpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpTLk1JR1VFTCBETyBBTlQKKzU5MDpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpTLlBFRFJPIEQnRkVSUk8KKzU5MTpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpTLlJJVEEgRCdJQklUSVAKKzU5MjpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpTLlJJVEEgRCdJVFVFVE8KKzU5MzpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpTLlJJVEEgRCdKQUNVVEkKKzU5NDpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpTLlJJVEEgRCdTQVBVQ0EKKzU5NTpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpTLlNFQkFTLkQnQkVMQQorNTk2OkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOlMuU0VCQVMuRCdSSU8gUAorNTk3OkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOlMuU0VCQVNULkQnT0VTVAorNTk4OkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOlMuVE9NRSBEQVMgTEVUUgorNTk5OkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOlMuVklDRU5URSBEJ01JTgorNjAwOkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOlNBQkFSQQorNjAxOkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOlNBQklOT1BPTElTCis2MDI6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6U0FDUkFNRU5UTworNjAzOkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOlNBTElOQVMKKzYwNDpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpTQUxUTyBEQSBESVZJU0EKKzYwNTpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpTQU4gQU5UT05JTyBETworNjA2OkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOlNBTlRBIEJBUkJBUkEKKzYwNzpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpTQU5UQSBKVUxJQU5BCis2MDg6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6U0FOVEEgTFVaSUEKKzYwOTpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpTQU5UQSBNQVJHQVJJREEKKzYxMDpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpTQU5UQSBNQVJJQSBETworNjExOkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOlNBTlRBIFJJVEEgREUgQworNjEyOkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOlNBTlRBIFZJQ1RPUklBCis2MTM6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6U0FOVEFOQSBEJ0NBVEFHCis2MTQ6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6U0FOVEFOQSBEJ0RFU0VSCis2MTU6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6U0FOVEFOQSBEJ0dBUkFNCis2MTY6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6U0FOVEFOQSBEJ0pBQ0FSCis2MTc6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6U0FOVEFOQSBEJ01BTkhVCis2MTg6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6U0FOVEFOQSBEJ01PTlRFCis2MTk6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6U0FOVEFOQSBEJ1BJUkFQCis2MjA6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6U0FOVEFOQSBEJ1JJQUNICis2MjE6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6U0FOVEFOQSBEQSBWLgorNjIyOkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOlNBTlRPIEFOVC5ETyBKLgorNjIzOkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOlNBTlRPIEhJUE9MSVRPCis2MjQ6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6U0FOVE9TIERVTU9OVAorNjI1OkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOlNBTyBGQ08gREUgUy4KKzYyNjpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpTQU8gRlJBTkNJU0NPCis2Mjc6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6U0FPIEZSQU5DSVNDTyBETworNjI4OkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOlNBTyBHRVJBTERPCis2Mjk6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6U0FPIEdFUkFMRE8gREEgUAorNjMwOkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOlNBTyBHT05TQUxPIEFCQUUKKzYzMTpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpTQU8gR09UQVJETworNjMyOkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOlNBTyBKIERBIFBPTlRFCis2MzM6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6U0FPIEouRE8gRElWSU5PCis2MzQ6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6U0FPIEpPQU8gQkFUSVNUQQorNjM1OkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOlNBTyBKT0FPIERBIE1BVEEKKzYzNjpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpTQU8gSk9BTyBERUwgUkUKKzYzNzpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpTQU8gSk9BTyBFLgorNjM4OkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOlNBTyBKT1NFIERPIEouCis2Mzk6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6U0FPIEpPU0UgU0FGSVJBCis2NDA6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6U0FPIExPVVJFTkNPCis2NDE6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6U0FPIFBFRFJPIERBIFUuCis2NDI6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6U0FPIFBFRFJPIERPIFMuCis2NDM6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6U0FPIFIuIERFIE1JTkFTCis2NDQ6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6U0FPIFJPTUFPCis2NDU6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6U0FPIFNFQkFTVElBTyBETworNjQ2OkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOlNBTyBTRUJBU1RJQU8gTQorNjQ3OkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOlNBTyBUSUFHTworNjQ4OkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOlNBTyBUT01BUyBERSBBUVUKKzY0OTpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpTQVBVQ0FJLU1JUklNCis2NTA6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6U0FSRE9BCis2NTE6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6U0VOLiBNT0RFU1RJTk8KKzY1MjpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpTRU4uSk9TRSBCRU5UTworNjUzOkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOlNFTkFET1IgQ09SVEVTCis2NTQ6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6U0VOQURPUiBGSVJNSU5PCis2NTU6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6U0VOSE9SQSBETyBQT1JUCis2NTY6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6U0VSSUNJVEEKKzY1NzpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpTRVJJVElOR0EKKzY1ODpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpTRVJSQSBBWlVMIERFIE0KKzY1OTpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpTRVJSQSBEIEFJTU9SRVMKKzY2MDpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpTRVJSQSBEQSBTQVVEQUQKKzY2MTpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpTRVJSQSBETyBTQUxJVFIKKzY2MjpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpTRVJSQU5JQQorNjYzOkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOlNFUlJBTk9TCis2NjQ6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6U0VSUk8KKzY2NTpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpTRVRFIExBR09BUworNjY2OkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOlNJTFZFSVJBTklBCis2Njc6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6U0lMVklBTk9QT0xJUworNjY4OkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOlNJTUFPIFBFUkVJUkEKKzY2OTpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpTSU1PTkVTSUEKKzY3MDpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpTT0JSQUxJQQorNjcxOkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOlNPTEVEQURFIEQnTUlOQQorNjcyOkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOlNSQS5ERSBPTElWRUlSQQorNjczOkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOlNSQS5ET1MgUkVNRURJTworNjc0OkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOlNUQSBNQVJJQSBELlNVLgorNjc1OkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOlNUQSBST1NBIERBIFNFUlIKKzY3NjpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpTVEEuRUZJR0VOSUEgREUKKzY3NzpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpTVEEuRkUgREUgTUlOQVMKKzY3ODpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpTVE8gQU5UT05JTyBETyBNCis2Nzk6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6VEFCVUxFSVJPCis2ODA6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6VEFJT0JFSVJBUworNjgxOkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOlRBUEFDSUdVQVJBCis2ODI6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6VEFQSVJBCis2ODM6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6VEFQSVJBSQorNjg0OkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOlRBUVVBUkFDVSBNSU5BUworNjg1OkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOlRBUlVNSVJJTQorNjg2OkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOlRFSVhFSVJBUworNjg3OkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOlRFT0ZJTE8gT1RPTkkKKzY4ODpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpUSU1PVEVPCis2ODk6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6VElSQURFTlRFUworNjkwOkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOlRJUk9TCis2OTE6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6VE9DQU5USU5TCis2OTI6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6VE9MRURPCis2OTM6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6VE9NQk9TCis2OTQ6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6VFJFUyBDQVJBQ09FUworNjk1OkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOlRSRVMgUE9OVEFTCis2OTY6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6VFVNSVJJVElOR0EKKzY5NzpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpUVVJNQUxJTkEKKzY5ODpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpUVVJWT0xBTkRJQQorNjk5OkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOlVCQQorNzAwOkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOlVCQUkKKzcwMTpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpVQkVSQUJBCis3MDI6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6VUJFUkxBTkRJQQorNzAzOkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOlVNQlVSQVRJQkEKKzcwNDpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpVTkFJCis3MDU6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6VVJVQ0FOSUEKKzcwNjpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpWQVJHRU0gQk9OSVRBCis3MDc6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6VkFSR0lOSEEKKzcwODpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpWQVJaRUEgREEgUEFMTUEKKzcwOTpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpWQVJaRUxBTkRJQQorNzEwOkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOlZBWkFOVEUKKzcxMTpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpWRVJJU1NJTU8KKzcxMjpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpWRVNQQVNJQU5PCis3MTM6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6VklDT1NBCis3MTQ6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6VklFSVJBUworNzE1OkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOlZJTEEgTUFUSUFTCis3MTY6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6VklSR0VNIERBIExBUEEKKzcxNzpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpWSVJHSU5JQQorNzE4OkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOlZJUkdJTk9QT0xJUworNzE5OkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOlZJUkdPTEFORElBCis3MjA6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6VklTQ09OREUgRCdSLkJSCis3MjE6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6Vk9MVEEgR1JBTkRFCis3MjI6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6V0VOQ0VTTEFVIEJSQVoKKzE6QlI6QlJBOkJSQVNJTDpQQVJBSUJBOkFHVUEgQlJBTkNBCisyOkJSOkJSQTpCUkFTSUw6UEFSQUlCQTpBR1VJQVIKKzM6QlI6QlJBOkJSQVNJTDpQQVJBSUJBOkFMQUdPQSBHUkFOREUKKzQ6QlI6QlJBOkJSQVNJTDpQQVJBSUJBOkFMQUdPQSBOT1ZBCis1OkJSOkJSQTpCUkFTSUw6UEFSQUlCQTpBTEFHT0lOSEEKKzY6QlI6QlJBOkJSQVNJTDpQQVJBSUJBOkFMSEFORFJBCis3OkJSOkJSQTpCUkFTSUw6UEFSQUlCQTpBTlRFTk9SIE5BVkFSUk8KKzg6QlI6QlJBOkJSQVNJTDpQQVJBSUJBOkFSQUNBR0kKKzk6QlI6QlJBOkJSQVNJTDpQQVJBSUJBOkFSQVJBCisxMDpCUjpCUkE6QlJBU0lMOlBBUkFJQkE6QVJBUlVOQQorMTE6QlI6QlJBOkJSQVNJTDpQQVJBSUJBOkFSRUFMCisxMjpCUjpCUkE6QlJBU0lMOlBBUkFJQkE6QVJFSUEKKzEzOkJSOkJSQTpCUkFTSUw6UEFSQUlCQTpBUk9FSVJBUworMTQ6QlI6QlJBOkJSQVNJTDpQQVJBSUJBOkJBSUEgREEgVFJBSUNBTworMTU6QlI6QlJBOkJSQVNJTDpQQVJBSUJBOkJBTkFORUlSQVMKKzE2OkJSOkJSQTpCUkFTSUw6UEFSQUlCQTpCQVJSQSBERSBTLiBST1NBCisxNzpCUjpCUkE6QlJBU0lMOlBBUkFJQkE6QkFSUkEgU0FPIE1JR1VFTAorMTg6QlI6QlJBOkJSQVNJTDpQQVJBSUJBOkJBWUVVWAorMTk6QlI6QlJBOkJSQVNJTDpQQVJBSUJBOkJFTEVNCisyMDpCUjpCUkE6QlJBU0lMOlBBUkFJQkE6QkVMRU0gRE8gQlJFSk8gQworMjE6QlI6QlJBOkJSQVNJTDpQQVJBSUJBOkJPQSBWRU5UVVJBCisyMjpCUjpCUkE6QlJBU0lMOlBBUkFJQkE6Qk9NIEpFU1VTCisyMzpCUjpCUkE6QlJBU0lMOlBBUkFJQkE6Qk9NIFNVQ0VTU08KKzI0OkJSOkJSQTpCUkFTSUw6UEFSQUlCQTpCT05JVE8gREUgU1RBLkZFCisyNTpCUjpCUkE6QlJBU0lMOlBBUkFJQkE6Qk9RVUVJUkFPCisyNjpCUjpCUkE6QlJBU0lMOlBBUkFJQkE6Qk9RVUVJUkFPIENPQ0hPUworMjc6QlI6QlJBOkJSQVNJTDpQQVJBSUJBOkJPUkJPUkVNQQorMjg6QlI6QlJBOkJSQVNJTDpQQVJBSUJBOkJSRUpPIERPIENSVVoKKzI5OkJSOkJSQTpCUkFTSUw6UEFSQUlCQTpCUkVKTyBET1MgU0FOVE9TCiszMDpCUjpCUkE6QlJBU0lMOlBBUkFJQkE6Q0FBUE9SQQorMzE6QlI6QlJBOkJSQVNJTDpQQVJBSUJBOkNBQkFDRUlSQVMKKzMyOkJSOkJSQTpCUkFTSUw6UEFSQUlCQTpDQUJFREVMTworMzM6QlI6QlJBOkJSQVNJTDpQQVJBSUJBOkNBQ0hPRUlSQSBET1MgSS4KKzM0OkJSOkJSQTpCUkFTSUw6UEFSQUlCQTpDQUNJTUJBIEQiREVOVFJPCiszNTpCUjpCUkE6QlJBU0lMOlBBUkFJQkE6Q0FDSU1CQSBERSBBUkVJQQorMzY6QlI6QlJBOkJSQVNJTDpQQVJBSUJBOkNBSUNBUkEKKzM3OkJSOkJSQTpCUkFTSUw6UEFSQUlCQTpDQUpBWkVJUkFTCiszODpCUjpCUkE6QlJBU0lMOlBBUkFJQkE6Q0FMREFTIEJSQU5EQU8KKzM5OkJSOkJSQTpCUkFTSUw6UEFSQUlCQTpDQU1BTEFVCis0MDpCUjpCUkE6QlJBU0lMOlBBUkFJQkE6Q0FNUElOQSBHUkFOREUKKzQxOkJSOkJSQTpCUkFTSUw6UEFSQUlCQTpDQVJSQVBBVEVJUkEKKzQyOkJSOkJSQTpCUkFTSUw6UEFSQUlCQTpDQVRJTkdVRUlSQQorNDM6QlI6QlJBOkJSQVNJTDpQQVJBSUJBOkNBVE9MRSBETyBST0NIQQorNDQ6QlI6QlJBOkJSQVNJTDpQQVJBSUJBOkNPTkNFSUNBTworNDU6QlI6QlJBOkJSQVNJTDpQQVJBSUJBOkNPTkRBRE8KKzQ2OkJSOkJSQTpCUkFTSUw6UEFSQUlCQTpDT05ERQorNDc6QlI6QlJBOkJSQVNJTDpQQVJBSUJBOkNPTkdPCis0ODpCUjpCUkE6QlJBU0lMOlBBUkFJQkE6Q09SRU1BUworNDk6QlI6QlJBOkJSQVNJTDpQQVJBSUJBOkNSVVogRE8gRS4gU0FOVE8KKzUwOkJSOkJSQTpCUkFTSUw6UEFSQUlCQTpDVUJBVEkKKzUxOkJSOkJSQTpCUkFTSUw6UEFSQUlCQTpDVUlURQorNTI6QlI6QlJBOkJSQVNJTDpQQVJBSUJBOkNVSVRFR0kKKzUzOkJSOkJSQTpCUkFTSUw6UEFSQUlCQTpDVVJSQUwgVkVMSE8KKzU0OkJSOkJSQTpCUkFTSUw6UEFSQUlCQTpERVNURVJSTworNTU6QlI6QlJBOkJSQVNJTDpQQVJBSUJBOkRFU1RFUlJPIEQiTUFMVEEKKzU2OkJSOkJSQTpCUkFTSUw6UEFSQUlCQTpESUFNQU5URQorNTc6QlI6QlJBOkJSQVNJTDpQQVJBSUJBOkRPTkEgSU5FUworNTg6QlI6QlJBOkJSQVNJTDpQQVJBSUJBOkRVQVMgRVNUUkFEQVMKKzU5OkJSOkJSQTpCUkFTSUw6UEFSQUlCQTpFTUFTCis2MDpCUjpCUkE6QlJBU0lMOlBBUkFJQkE6RVNQRVJBTkNBCis2MTpCUjpCUkE6QlJBU0lMOlBBUkFJQkE6RkFHVU5ERVMKKzYyOkJSOkJSQTpCUkFTSUw6UEFSQUlCQTpGUkVJIE1BUlRJTkhPCis2MzpCUjpCUkE6QlJBU0lMOlBBUkFJQkE6R1VBUkFCSVJBCis2NDpCUjpCUkE6QlJBU0lMOlBBUkFJQkE6R1VSSU5IRU0KKzY1OkJSOkJSQTpCUkFTSUw6UEFSQUlCQTpHVVJKQU8KKzY2OkJSOkJSQTpCUkFTSUw6UEFSQUlCQTpJQklBUkEKKzY3OkJSOkJSQTpCUkFTSUw6UEFSQUlCQTpJTUFDVUxBREEKKzY4OkJSOkJSQTpCUkFTSUw6UEFSQUlCQTpJTkdBCis2OTpCUjpCUkE6QlJBU0lMOlBBUkFJQkE6SVRBQkFJQU5BCis3MDpCUjpCUkE6QlJBU0lMOlBBUkFJQkE6SVRBUE9SQU5HQQorNzE6QlI6QlJBOkJSQVNJTDpQQVJBSUJBOklUQVBPUk9ST0NBCis3MjpCUjpCUkE6QlJBU0lMOlBBUkFJQkE6SVRBVFVCQQorNzM6QlI6QlJBOkJSQVNJTDpQQVJBSUJBOkpBQ0FSQVUKKzc0OkJSOkJSQTpCUkFTSUw6UEFSQUlCQTpKRVJJQ08KKzc1OkJSOkJSQTpCUkFTSUw6UEFSQUlCQTpKT0FPIFBFU1NPQQorNzY6QlI6QlJBOkJSQVNJTDpQQVJBSUJBOkpVQVJFWiBUQVZPUkEKKzc3OkJSOkJSQTpCUkFTSUw6UEFSQUlCQTpKVUFaRUlSSU5ITworNzg6QlI6QlJBOkJSQVNJTDpQQVJBSUJBOkpVTkNPIERPIFNFUklETworNzk6QlI6QlJBOkJSQVNJTDpQQVJBSUJBOkpVUklQSVJBTkdBCis4MDpCUjpCUkE6QlJBU0lMOlBBUkFJQkE6SlVSVQorODE6QlI6QlJBOkJSQVNJTDpQQVJBSUJBOkxBR09BCis4MjpCUjpCUkE6QlJBU0lMOlBBUkFJQkE6TEFHT0EgREUgREVOVFJPCis4MzpCUjpCUkE6QlJBU0lMOlBBUkFJQkE6TEFHT0EgU0VDQQorODQ6QlI6QlJBOkJSQVNJTDpQQVJBSUJBOkxBU1RSTworODU6QlI6QlJBOkJSQVNJTDpQQVJBSUJBOkxJVlJBTUVOVE8KKzg2OkJSOkJSQTpCUkFTSUw6UEFSQUlCQTpMVUNFTkEKKzg3OkJSOkJSQTpCUkFTSUw6UEFSQUlCQTpNQUNBUkFORFVCQQorODg6QlI6QlJBOkJSQVNJTDpQQVJBSUJBOk1BRSBEIkFHVUEKKzg5OkJSOkJSQTpCUkFTSUw6UEFSQUlCQTpNQUxUQQorOTA6QlI6QlJBOkJSQVNJTDpQQVJBSUJBOk1BTUFOR1VBUEUKKzkxOkJSOkJSQTpCUkFTSUw6UEFSQUlCQTpNQU5BSVJBCis5MjpCUjpCUkE6QlJBU0lMOlBBUkFJQkE6TUFSSQorOTM6QlI6QlJBOkJSQVNJTDpQQVJBSUJBOk1BVEFSQUNBCis5NDpCUjpCUkE6QlJBU0lMOlBBUkFJQkE6TU9OR0VJUk8KKzk1OkJSOkJSQTpCUkFTSUw6UEFSQUlCQTpNT05UQURBUworOTY6QlI6QlJBOkJSQVNJTDpQQVJBSUJBOk1PTlRFIEhPUkVCRQorOTc6QlI6QlJBOkJSQVNJTDpQQVJBSUJBOk1PTlRFSVJPCis5ODpCUjpCUkE6QlJBU0lMOlBBUkFJQkE6TVVMVU5HVQorOTk6QlI6QlJBOkJSQVNJTDpQQVJBSUJBOk5BVFVCQQorMTAwOkJSOkJSQTpCUkFTSUw6UEFSQUlCQTpOQVpBUkVaSU5ITworMTAxOkJSOkJSQTpCUkFTSUw6UEFSQUlCQTpOT1ZBIEZMT1JFU1RBCisxMDI6QlI6QlJBOkJSQVNJTDpQQVJBSUJBOk5PVkEgT0xJTkRBCisxMDM6QlI6QlJBOkJSQVNJTDpQQVJBSUJBOk5PVkEgUEFMTUVJUkEKKzEwNDpCUjpCUkE6QlJBU0lMOlBBUkFJQkE6T0xITyBEJ0FHVUEKKzEwNTpCUjpCUkE6QlJBU0lMOlBBUkFJQkE6T0xJVkVET1MKKzEwNjpCUjpCUkE6QlJBU0lMOlBBUkFJQkE6T1VSTyBWRUxITworMTA3OkJSOkJSQTpCUkFTSUw6UEFSQUlCQTpQQVNTQUdFTQorMTA4OkJSOkJSQTpCUkFTSUw6UEFSQUlCQTpQQVRPUworMTA5OkJSOkJSQTpCUkFTSUw6UEFSQUlCQTpQQVVMSVNUQQorMTEwOkJSOkJSQTpCUkFTSUw6UEFSQUlCQTpQRURSQSBCUkFOQ0EKKzExMTpCUjpCUkE6QlJBU0lMOlBBUkFJQkE6UEVEUkEgTEFWQURSQQorMTEyOkJSOkJSQTpCUkFTSUw6UEFSQUlCQTpQRURSQVMgREUgRlVFR08KKzExMzpCUjpCUkE6QlJBU0lMOlBBUkFJQkE6UElBTkNPCisxMTQ6QlI6QlJBOkJSQVNJTDpQQVJBSUJBOlBJQ1VJCisxMTU6QlI6QlJBOkJSQVNJTDpQQVJBSUJBOlBJTEFSCisxMTY6QlI6QlJBOkJSQVNJTDpQQVJBSUJBOlBJTE9FUworMTE3OkJSOkJSQTpCUkFTSUw6UEFSQUlCQTpQSUxPRVpJTkhPUworMTE4OkJSOkJSQTpCUkFTSUw6UEFSQUlCQTpQSVJQSVJJVFVCQQorMTE5OkJSOkJSQTpCUkFTSUw6UEFSQUlCQTpQSVRJTUJVCisxMjA6QlI6QlJBOkJSQVNJTDpQQVJBSUJBOlBPQ0lOSE9TCisxMjE6QlI6QlJBOkJSQVNJTDpQQVJBSUJBOlBPTUJBTAorMTIyOkJSOkJSQTpCUkFTSUw6UEFSQUlCQTpQUkFUQQorMTIzOkJSOkJSQTpCUkFTSUw6UEFSQUlCQTpQUklOQ0VTQSBJU0FCRUwKKzEyNDpCUjpCUkE6QlJBU0lMOlBBUkFJQkE6UFVYSU5BTkEKKzEyNTpCUjpCUkE6QlJBU0lMOlBBUkFJQkE6UVVFSU1BREFTCisxMjY6QlI6QlJBOkJSQVNJTDpQQVJBSUJBOlFVSVhBQkEKKzEyNzpCUjpCUkE6QlJBU0lMOlBBUkFJQkE6UkVNSUdJTworMTI4OkJSOkJSQTpCUkFTSUw6UEFSQUlCQTpSSUNBSE8gRCJDQVZBTE9TCisxMjk6QlI6QlJBOkJSQVNJTDpQQVJBSUJBOlJJTyBUSU5UTworMTMwOkJSOkJSQTpCUkFTSUw6UEFSQUlCQTpTLiBKLiBETyBCT05GSU0KKzEzMTpCUjpCUkE6QlJBU0lMOlBBUkFJQkE6Uy5KLiBETyBDQVJJUkkKKzEzMjpCUjpCUkE6QlJBU0lMOlBBUkFJQkE6Uy5KLiBETyBTQUJVR0kKKzEzMzpCUjpCUkE6QlJBU0lMOlBBUkFJQkE6Uy5KLkRFIEVTUElOSEFSQQorMTM0OkJSOkJSQTpCUkFTSUw6UEFSQUlCQTpTLkouRE9TIENPUkRFSVJPCisxMzU6QlI6QlJBOkJSQVNJTDpQQVJBSUJBOlMuSi5MQUdPQSBUQVBBREEKKzEzNjpCUjpCUkE6QlJBU0lMOlBBUkFJQkE6U0FMR0FESU5ITworMTM3OkJSOkJSQTpCUkFTSUw6UEFSQUlCQTpTQUxHQURPIFMuRkVMSVgKKzEzODpCUjpCUkE6QlJBU0lMOlBBUkFJQkE6U0FOVEEgQ1JVWgorMTM5OkJSOkJSQTpCUkFTSUw6UEFSQUlCQTpTQU5UQSBIRUxFTkEKKzE0MDpCUjpCUkE6QlJBU0lMOlBBUkFJQkE6U0FOVEEgTFVaSUEKKzE0MTpCUjpCUkE6QlJBU0lMOlBBUkFJQkE6U0FOVEEgUklUQQorMTQyOkJSOkJSQTpCUkFTSUw6UEFSQUlCQTpTQU5UQSBURVJFU0lOSEEKKzE0MzpCUjpCUkE6QlJBU0lMOlBBUkFJQkE6U0FOVEFOQSBERSBNLgorMTQ0OkJSOkJSQTpCUkFTSUw6UEFSQUlCQTpTQU5UQU5BIERPUyBHLgorMTQ1OkJSOkJSQTpCUkFTSUw6UEFSQUlCQTpTQU8gQkVOVE8KKzE0NjpCUjpCUkE6QlJBU0lMOlBBUkFJQkE6U0FPIEouREUgQ0FJQU5BCisxNDc6QlI6QlJBOkJSQVNJTDpQQVJBSUJBOlNBTyBKT0FPIEQiVElHUkUKKzE0ODpCUjpCUkE6QlJBU0lMOlBBUkFJQkE6U0FPIEpPU0UgREUgUC4KKzE0OTpCUjpCUkE6QlJBU0lMOlBBUkFJQkE6U0FPIE1BTUVERQorMTUwOkJSOkJSQTpCUkFTSUw6UEFSQUlCQTpTQU8gTUlHVUVMIFRBSVBVCisxNTE6QlI6QlJBOkJSQVNJTDpQQVJBSUJBOlNBTyBTRUJBU1RJQU8gTFIKKzE1MjpCUjpCUkE6QlJBU0lMOlBBUkFJQkE6U0FPIFNFQkFTVElBTyBVLgorMTUzOkJSOkJSQTpCUkFTSUw6UEFSQUlCQTpTQVBFCisxNTQ6QlI6QlJBOkJSQVNJTDpQQVJBSUJBOlNFUklETworMTU1OkJSOkJSQTpCUkFTSUw6UEFSQUlCQTpTRVJSQSBCUkFOQ0EKKzE1NjpCUjpCUkE6QlJBU0lMOlBBUkFJQkE6U0VSUkEgREEgUkFJWgorMTU3OkJSOkJSQTpCUkFTSUw6UEFSQUlCQTpTRVJSQSBHUkFOREUKKzE1ODpCUjpCUkE6QlJBU0lMOlBBUkFJQkE6U0VSUkEgUkVET05EQQorMTU5OkJSOkJSQTpCUkFTSUw6UEFSQUlCQTpTRVJSQVJJQQorMTYwOkJSOkJSQTpCUkFTSUw6UEFSQUlCQTpTT0xBTkVBCisxNjE6QlI6QlJBOkJSQVNJTDpQQVJBSUJBOlNPTEVEQURFCisxNjI6QlI6QlJBOkJSQVNJTDpQQVJBSUJBOlNPVVpBCisxNjM6QlI6QlJBOkJSQVNJTDpQQVJBSUJBOlNVTUUKKzE2NDpCUjpCUkE6QlJBU0lMOlBBUkFJQkE6VEFDSU1BCisxNjU6QlI6QlJBOkJSQVNJTDpQQVJBSUJBOlRBUEVST0EKKzE2NjpCUjpCUkE6QlJBU0lMOlBBUkFJQkE6VEFWQVJFUworMTY3OkJSOkJSQTpCUkFTSUw6UEFSQUlCQTpURUlYRUlSQQorMTY4OkJSOkJSQTpCUkFTSUw6UEFSQUlCQTpUUklVTkZPCisxNjk6QlI6QlJBOkJSQVNJTDpQQVJBSUJBOlVJUkFVTkEKKzE3MDpCUjpCUkE6QlJBU0lMOlBBUkFJQkE6VU1CVVpFSVJPCisxNzE6QlI6QlJBOkJSQVNJTDpQQVJBSUJBOlZBUlpFQQorMTpCUjpCUkE6QlJBU0lMOlJPUkFJTUE6QlJBLkwyLjEKKzE6QlI6QlJBOkJSQVNJTDpQRVJOQU1CVUNPOkFGT0dBRE9TIERBIEkuCisyOkJSOkJSQTpCUkFTSUw6UEVSTkFNQlVDTzpBRlJBTklPCiszOkJSOkJSQTpCUkFTSUw6UEVSTkFNQlVDTzpBR1JFU1RJTkEKKzQ6QlI6QlJBOkJSQVNJTDpQRVJOQU1CVUNPOkFHVUEgUFJFVEEKKzU6QlI6QlJBOkJSQVNJTDpQRVJOQU1CVUNPOkFHVUFTIEJFTEFTCis2OkJSOkJSQTpCUkFTSUw6UEVSTkFNQlVDTzpBTEFHT0lOSEEKKzc6QlI6QlJBOkJSQVNJTDpQRVJOQU1CVUNPOkFMSUFOQ0EKKzg6QlI6QlJBOkJSQVNJTDpQRVJOQU1CVUNPOkFMVElOSE8KKzk6QlI6QlJBOkJSQVNJTDpQRVJOQU1CVUNPOkFNQVJBSkkKKzEwOkJSOkJSQTpCUkFTSUw6UEVSTkFNQlVDTzpBTkdFTElNCisxMTpCUjpCUkE6QlJBU0lMOlBFUk5BTUJVQ086QVJBUklQSU5BCisxMjpCUjpCUkE6QlJBU0lMOlBFUk5BTUJVQ086QVJDT1ZFUkRFCisxMzpCUjpCUkE6QlJBU0lMOlBFUk5BTUJVQ086QkFSUkEgREUgR1VBQklSQQorMTQ6QlI6QlJBOkJSQVNJTDpQRVJOQU1CVUNPOkJBUlJFSVJPUworMTU6QlI6QlJBOkJSQVNJTDpQRVJOQU1CVUNPOkJFTEVNIERFIE1BUklBCisxNjpCUjpCUkE6QlJBU0lMOlBFUk5BTUJVQ086QkVMRU0gREUgU0FPIEZDTworMTc6QlI6QlJBOkJSQVNJTDpQRVJOQU1CVUNPOkJFTE8gSkFSRElNCisxODpCUjpCUkE6QlJBU0lMOlBFUk5BTUJVQ086QkVUQU5JQQorMTk6QlI6QlJBOkJSQVNJTDpQRVJOQU1CVUNPOkJFWkVSUk9TCisyMDpCUjpCUkE6QlJBU0lMOlBFUk5BTUJVQ086Qk9ET0NPCisyMTpCUjpCUkE6QlJBU0lMOlBFUk5BTUJVQ086Qk9NIENPTlNFTEhPCisyMjpCUjpCUkE6QlJBU0lMOlBFUk5BTUJVQ086Qk9NIEpBUkRJTQorMjM6QlI6QlJBOkJSQVNJTDpQRVJOQU1CVUNPOkJPTklUTworMjQ6QlI6QlJBOkJSQVNJTDpQRVJOQU1CVUNPOkJSQS5MMi4zCisyNTpCUjpCUkE6QlJBU0lMOlBFUk5BTUJVQ086QlJFSkFPCisyNjpCUjpCUkE6QlJBU0lMOlBFUk5BTUJVQ086QlJFSklOSE8KKzI3OkJSOkJSQTpCUkFTSUw6UEVSTkFNQlVDTzpCUkVKTyBEQSBNQURSRSBECisyODpCUjpCUkE6QlJBU0lMOlBFUk5BTUJVQ086QlVFTk9TIEFJUkVTCisyOTpCUjpCUkE6QlJBU0lMOlBFUk5BTUJVQ086QlVJUVVFCiszMDpCUjpCUkE6QlJBU0lMOlBFUk5BTUJVQ086Q0FCTworMzE6QlI6QlJBOkJSQVNJTDpQRVJOQU1CVUNPOkNBQlJPQk8KKzMyOkJSOkJSQTpCUkFTSUw6UEVSTkFNQlVDTzpDQUNIT0VSSU5IQQorMzM6QlI6QlJBOkJSQVNJTDpQRVJOQU1CVUNPOkNBRVRFUworMzQ6QlI6QlJBOkJSQVNJTDpQRVJOQU1CVUNPOkNBTENBRE8KKzM1OkJSOkJSQTpCUkFTSUw6UEVSTkFNQlVDTzpDQUxVTUJJCiszNjpCUjpCUkE6QlJBU0lMOlBFUk5BTUJVQ086Q0FNT0NJTSBTIEZFTElYCiszNzpCUjpCUkE6QlJBU0lMOlBFUk5BTUJVQ086Q0FNVVRBTkdBCiszODpCUjpCUkE6QlJBU0lMOlBFUk5BTUJVQ086Q0FOSE9USU5ITworMzk6QlI6QlJBOkJSQVNJTDpQRVJOQU1CVUNPOkNBUE9FSVJBUworNDA6QlI6QlJBOkJSQVNJTDpQRVJOQU1CVUNPOkNBUk5BSUJBCis0MTpCUjpCUkE6QlJBU0lMOlBFUk5BTUJVQ086Q0FSUElOQQorNDI6QlI6QlJBOkJSQVNJTDpQRVJOQU1CVUNPOkNBUlVBUlUKKzQzOkJSOkJSQTpCUkFTSUw6UEVSTkFNQlVDTzpDQVRFTkRFCis0NDpCUjpCUkE6QlJBU0lMOlBFUk5BTUJVQ086Q0VEUk8KKzQ1OkJSOkJSQTpCUkFTSUw6UEVSTkFNQlVDTzpDSEEgREUgQUxFR1JJQQorNDY6QlI6QlJBOkJSQVNJTDpQRVJOQU1CVUNPOkNIQSBHUkFOREUKKzQ3OkJSOkJSQTpCUkFTSUw6UEVSTkFNQlVDTzpDT05EQURPCis0ODpCUjpCUkE6QlJBU0lMOlBFUk5BTUJVQ086Q09SUkVOVEVTCis0OTpCUjpCUkE6QlJBU0lMOlBFUk5BTUJVQ086Q09SVEVTCis1MDpCUjpCUkE6QlJBU0lMOlBFUk5BTUJVQ086Q1VNQVJVCis1MTpCUjpCUkE6QlJBU0lMOlBFUk5BTUJVQ086Q1VQSVJBCis1MjpCUjpCUkE6QlJBU0lMOlBFUk5BTUJVQ086Q1VTVE9ESUEKKzUzOkJSOkJSQTpCUkFTSUw6UEVSTkFNQlVDTzpFU0NBREEKKzU0OkJSOkJSQTpCUkFTSUw6UEVSTkFNQlVDTzpFWFUKKzU1OkJSOkJSQTpCUkFTSUw6UEVSTkFNQlVDTzpGRUlSQSBOT1ZBCis1NjpCUjpCUkE6QlJBU0lMOlBFUk5BTUJVQ086RkVSUkVJUk9TCis1NzpCUjpCUkE6QlJBU0lMOlBFUk5BTUJVQ086RkxPUkVTCis1ODpCUjpCUkE6QlJBU0lMOlBFUk5BTUJVQ086RkxPUkVTVEEKKzU5OkJSOkJSQTpCUkFTSUw6UEVSTkFNQlVDTzpGUkVJIE1JR1VFTElOSE8KKzYwOkJSOkJSQTpCUkFTSUw6UEVSTkFNQlVDTzpHQU1FTEVJUkEKKzYxOkJSOkJSQTpCUkFTSUw6UEVSTkFNQlVDTzpHQVJBTkhVTlMKKzYyOkJSOkJSQTpCUkFTSUw6UEVSTkFNQlVDTzpHTE9SSUEgRE8gR09JVEEKKzYzOkJSOkJSQTpCUkFTSUw6UEVSTkFNQlVDTzpHT0lBTkEKKzY0OkJSOkJSQTpCUkFTSUw6UEVSTkFNQlVDTzpHUkFOSVRPCis2NTpCUjpCUkE6QlJBU0lMOlBFUk5BTUJVQ086R1JBVkFUQQorNjY6QlI6QlJBOkJSQVNJTDpQRVJOQU1CVUNPOklCSU1JUklNCis2NzpCUjpCUkE6QlJBU0lMOlBFUk5BTUJVQ086SUJJUkFKVUJBCis2ODpCUjpCUkE6QlJBU0lMOlBFUk5BTUJVQ086SUdBUkFDVQorNjk6QlI6QlJBOkJSQVNJTDpQRVJOQU1CVUNPOklHVUFSQUNJCis3MDpCUjpCUkE6QlJBU0lMOlBFUk5BTUJVQ086SU5BSkEKKzcxOkJSOkJSQTpCUkFTSUw6UEVSTkFNQlVDTzpJTkdBWkVJUkEKKzcyOkJSOkJSQTpCUkFTSUw6UEVSTkFNQlVDTzpJUE9KVUNBCis3MzpCUjpCUkE6QlJBU0lMOlBFUk5BTUJVQ086SVBVQkkKKzc0OkJSOkJSQTpCUkFTSUw6UEVSTkFNQlVDTzpJVEFDVVJVQkEKKzc1OkJSOkJSQTpCUkFTSUw6UEVSTkFNQlVDTzpJVEFJQkEKKzc2OkJSOkJSQTpCUkFTSUw6UEVSTkFNQlVDTzpJVEFNQVJBQ0EKKzc3OkJSOkJSQTpCUkFTSUw6UEVSTkFNQlVDTzpJVEFQRVRJTQorNzg6QlI6QlJBOkJSQVNJTDpQRVJOQU1CVUNPOklUQVFVSVRJTkdBCis3OTpCUjpCUkE6QlJBU0lMOlBFUk5BTUJVQ086SkFCT0FUQU8KKzgwOkJSOkJSQTpCUkFTSUw6UEVSTkFNQlVDTzpKQVRBVUJBCis4MTpCUjpCUkE6QlJBU0lMOlBFUk5BTUJVQ086SkFUSQorODI6QlI6QlJBOkJSQVNJTDpQRVJOQU1CVUNPOkpPQU8gQUxGUkVETworODM6QlI6QlJBOkJSQVNJTDpQRVJOQU1CVUNPOkpPQVFVSU0gTkFCVUNPCis4NDpCUjpCUkE6QlJBU0lMOlBFUk5BTUJVQ086SlVQSQorODU6QlI6QlJBOkJSQVNJTDpQRVJOQU1CVUNPOkpVUkVNQQorODY6QlI6QlJBOkJSQVNJTDpQRVJOQU1CVUNPOkxBR08KKzg3OkJSOkJSQTpCUkFTSUw6UEVSTkFNQlVDTzpMQUdPQSBEIEdBVE9TCis4ODpCUjpCUkE6QlJBU0lMOlBFUk5BTUJVQ086TEFHT0EgRCBPVVJPCis4OTpCUjpCUkE6QlJBU0lMOlBFUk5BTUJVQ086TEFHT0EgRE8gSVRBRU5HQQorOTA6QlI6QlJBOkJSQVNJTDpQRVJOQU1CVUNPOkxBSkVETworOTE6QlI6QlJBOkJSQVNJTDpQRVJOQU1CVUNPOkxJTU9FSVJPCis5MjpCUjpCUkE6QlJBU0lMOlBFUk5BTUJVQ086TUFDQVBBUkFOQQorOTM6QlI6QlJBOkJSQVNJTDpQRVJOQU1CVUNPOk1BQ0hBRE9TCis5NDpCUjpCUkE6QlJBU0lMOlBFUk5BTUJVQ086TUFSQUlBTAorOTU6QlI6QlJBOkJSQVNJTDpQRVJOQU1CVUNPOk1JUkFORElCQQorOTY6QlI6QlJBOkJSQVNJTDpQRVJOQU1CVUNPOk1PUkVOTworOTc6QlI6QlJBOkJSQVNJTDpQRVJOQU1CVUNPOk5BWkFSRSBEQSBNQVRBCis5ODpCUjpCUkE6QlJBU0lMOlBFUk5BTUJVQ086T0xJTkRBCis5OTpCUjpCUkE6QlJBU0lMOlBFUk5BTUJVQ086T1JPQk8KKzEwMDpCUjpCUkE6QlJBU0lMOlBFUk5BTUJVQ086T1JPQ08KKzEwMTpCUjpCUkE6QlJBU0lMOlBFUk5BTUJVQ086T1VSSUNVUkkKKzEwMjpCUjpCUkE6QlJBU0lMOlBFUk5BTUJVQ086UEFMTUFSRVMKKzEwMzpCUjpCUkE6QlJBU0lMOlBFUk5BTUJVQ086UEFMTUVJUklOQQorMTA0OkJSOkJSQTpCUkFTSUw6UEVSTkFNQlVDTzpQQU5FTEFTCisxMDU6QlI6QlJBOkJSQVNJTDpQRVJOQU1CVUNPOlBBUkFOQVRBTUEKKzEwNjpCUjpCUkE6QlJBU0lMOlBFUk5BTUJVQ086UEFSTkFNSVJJTQorMTA3OkJSOkJSQTpCUkFTSUw6UEVSTkFNQlVDTzpQQVNTSVJBCisxMDg6QlI6QlJBOkJSQVNJTDpQRVJOQU1CVUNPOlBBVURBTEhPCisxMDk6QlI6QlJBOkJSQVNJTDpQRVJOQU1CVUNPOlBBVUxJU1RBCisxMTA6QlI6QlJBOkJSQVNJTDpQRVJOQU1CVUNPOlBFRFJBCisxMTE6QlI6QlJBOkJSQVNJTDpQRVJOQU1CVUNPOlBFU1FVRUlSQQorMTEyOkJSOkJSQTpCUkFTSUw6UEVSTkFNQlVDTzpQRVRST0xBTkRJQQorMTEzOkJSOkJSQTpCUkFTSUw6UEVSTkFNQlVDTzpQRVRST0xJTkEKKzExNDpCUjpCUkE6QlJBU0lMOlBFUk5BTUJVQ086UE9DQU8KKzExNTpCUjpCUkE6QlJBU0lMOlBFUk5BTUJVQ086UE9NQk9TCisxMTY6QlI6QlJBOkJSQVNJTDpQRVJOQU1CVUNPOlBSSU1BVkVSQQorMTE3OkJSOkJSQTpCUkFTSUw6UEVSTkFNQlVDTzpRVUlQQVBBCisxMTg6QlI6QlJBOkJSQVNJTDpQRVJOQU1CVUNPOlIuUGFqZXUKKzExOTpCUjpCUkE6QlJBU0lMOlBFUk5BTUJVQ086Ui5kYSBCcmlnaWRhCisxMjA6QlI6QlJBOkJSQVNJTDpQRVJOQU1CVUNPOlJFQ0lGRQorMTIxOkJSOkJSQTpCUkFTSUw6UEVSTkFNQlVDTzpSSUFDSE8gREFTIEFMTUFTCisxMjI6QlI6QlJBOkJSQVNJTDpQRVJOQU1CVUNPOlJJQkVJUkFPCisxMjM6QlI6QlJBOkJSQVNJTDpQRVJOQU1CVUNPOlJJTyBGT1JNT1NPCisxMjQ6QlI6QlJBOkJSQVNJTDpQRVJOQU1CVUNPOlJlcHIuUE9DTyBEIkNSVVoKKzEyNTpCUjpCUkE6QlJBU0lMOlBFUk5BTUJVQ086UmVwci5ST1NBUklPCisxMjY6QlI6QlJBOkJSQVNJTDpQRVJOQU1CVUNPOlMgSk9BUVVJTiBEIE1PTlQKKzEyNzpCUjpCUkE6QlJBU0lMOlBFUk5BTUJVQ086Uy4gRE9TIE1PUkVJUkFTCisxMjg6QlI6QlJBOkJSQVNJTDpQRVJOQU1CVUNPOlMuQy5EIkNBUElCQVJJQkUKKzEyOTpCUjpCUkE6QlJBU0lMOlBFUk5BTUJVQ086Uy5NLkRBIEJPQSBWSVNUQQorMTMwOkJSOkJSQTpCUkFTSUw6UEVSTkFNQlVDTzpTLk1BUklBIEQiQ0FNQlVDCisxMzE6QlI6QlJBOkJSQVNJTDpQRVJOQU1CVUNPOlMuVklDRU5URSBGRVJSRVIKKzEzMjpCUjpCUkE6QlJBU0lMOlBFUk5BTUJVQ086U0FJUkUKKzEzMzpCUjpCUkE6QlJBU0lMOlBFUk5BTUJVQ086U0FMR0FESU5ITworMTM0OkJSOkJSQTpCUkFTSUw6UEVSTkFNQlVDTzpTQUxHVUVJUk8KKzEzNTpCUjpCUkE6QlJBU0lMOlBFUk5BTUJVQ086U0FMSURBTworMTM2OkJSOkJSQTpCUkFTSUw6UEVSTkFNQlVDTzpTQUxPQQorMTM3OkJSOkJSQTpCUkFTSUw6UEVSTkFNQlVDTzpTQU5IQVJPCisxMzg6QlI6QlJBOkJSQVNJTDpQRVJOQU1CVUNPOlNBTlRBIFRFUkVaSU5IQQorMTM5OkJSOkJSQTpCUkFTSUw6UEVSTkFNQlVDTzpTQU8gQkVOSVRPIFNVTAorMTQwOkJSOkJSQTpCUkFTSUw6UEVSTkFNQlVDTzpTQU8gQkVOVE8gRE8gVU5BCisxNDE6QlI6QlJBOkJSQVNJTDpQRVJOQU1CVUNPOlNBTyBDQUVUQU5PCisxNDI6QlI6QlJBOkJSQVNJTDpQRVJOQU1CVUNPOlNBTyBKT0FPCisxNDM6QlI6QlJBOkJSQVNJTDpQRVJOQU1CVUNPOlNBTyBKT0FPIEQiRUdJVE8KKzE0NDpCUjpCUkE6QlJBU0lMOlBFUk5BTUJVQ086U0FPIEpPQU8gRE8gQkVMTQorMTQ1OkJSOkJSQTpCUkFTSUw6UEVSTkFNQlVDTzpTQU8gSk9TRSBDT1JPQSBHCisxNDY6QlI6QlJBOkJSQVNJTDpQRVJOQU1CVUNPOlNBTyBMT1VSRU5DTyBNQVQKKzE0NzpCUjpCUkE6QlJBU0lMOlBFUk5BTUJVQ086U0VSUkEgVEFMSEFEQQorMTQ4OkJSOkJSQTpCUkFTSUw6UEVSTkFNQlVDTzpTRVJSSVRBCisxNDk6QlI6QlJBOkJSQVNJTDpQRVJOQU1CVUNPOlNFUlRBTklBCisxNTA6QlI6QlJBOkJSQVNJTDpQRVJOQU1CVUNPOlNJUklOSEFFTQorMTUxOkJSOkJSQTpCUkFTSUw6UEVSTkFNQlVDTzpTVVJVQklNCisxNTI6QlI6QlJBOkJSQVNJTDpQRVJOQU1CVUNPOlRBQklSQQorMTUzOkJSOkJSQTpCUkFTSUw6UEVSTkFNQlVDTzpUQUNBSU1CTworMTU0OkJSOkJSQTpCUkFTSUw6UEVSTkFNQlVDTzpUQUNBUkFUVQorMTU1OkJSOkJSQTpCUkFTSUw6UEVSTkFNQlVDTzpUQU1CRQorMTU2OkJSOkJSQTpCUkFTSUw6UEVSTkFNQlVDTzpUQVFVQVJJVElOR0EgTlRFCisxNTc6QlI6QlJBOkJSQVNJTDpQRVJOQU1CVUNPOlRFUkVaSU5IQQorMTU4OkJSOkJSQTpCUkFTSUw6UEVSTkFNQlVDTzpURVJSQSBOT1ZBCisxNTk6QlI6QlJBOkJSQVNJTDpQRVJOQU1CVUNPOlRJTUJBVUJBCisxNjA6QlI6QlJBOkJSQVNJTDpQRVJOQU1CVUNPOlRPUklUQU1BCisxNjE6QlI6QlJBOkJSQVNJTDpQRVJOQU1CVUNPOlRSQUNVTkhBRU0KKzE2MjpCUjpCUkE6QlJBU0lMOlBFUk5BTUJVQ086VFJJTkRBREUKKzE2MzpCUjpCUkE6QlJBU0lMOlBFUk5BTUJVQ086VFJJVU5GTworMTY0OkJSOkJSQTpCUkFTSUw6UEVSTkFNQlVDTzpUVVBBTkFUSU5HQQorMTY1OkJSOkJSQTpCUkFTSUw6UEVSTkFNQlVDTzpUVVBBUkVUQU1BCisxNjY6QlI6QlJBOkJSQVNJTDpQRVJOQU1CVUNPOlZFTlRVUk9TQQorMTY3OkJSOkJSQTpCUkFTSUw6UEVSTkFNQlVDTzpWRVJERUpBTlRFCisxNjg6QlI6QlJBOkJSQVNJTDpQRVJOQU1CVUNPOlZFUlRFTlRFUworMTY5OkJSOkJSQTpCUkFTSUw6UEVSTkFNQlVDTzpWSUNFTkNJQQorMTcwOkJSOkJSQTpCUkFTSUw6UEVSTkFNQlVDTzpWSVRPUklBIFMuQU5UQU8KKzE6QlI6QlJBOkJSQVNJTDpBTEFHT0FTOkFHVUEgQlJBTkNBCisyOkJSOkJSQTpCUkFTSUw6QUxBR09BUzpBTkFESUEKKzM6QlI6QlJBOkJSQVNJTDpBTEFHT0FTOkFSQVBJUkFDQQorNDpCUjpCUkE6QlJBU0lMOkFMQUdPQVM6QVRBTEFJQQorNTpCUjpCUkE6QlJBU0lMOkFMQUdPQVM6QkFSUkEgRCBTIE1JR1VFTAorNjpCUjpCUkE6QlJBU0lMOkFMQUdPQVM6QkFSUkEgREUgUyBBTlRPTgorNzpCUjpCUkE6QlJBU0lMOkFMQUdPQVM6QkFUQUxIQQorODpCUjpCUkE6QlJBU0lMOkFMQUdPQVM6QkVMRU0KKzk6QlI6QlJBOkJSQVNJTDpBTEFHT0FTOkJFTE8gTU9OVEUKKzEwOkJSOkJSQTpCUkFTSUw6QUxBR09BUzpCT0NBIERFIE1BVEEKKzExOkJSOkJSQTpCUkFTSUw6QUxBR09BUzpCUkFOUVVJTkhBCisxMjpCUjpCUkE6QlJBU0lMOkFMQUdPQVM6Q0FDSU1CSU5IQVMKKzEzOkJSOkJSQTpCUkFTSUw6QUxBR09BUzpDQUpVRUlSTworMTQ6QlI6QlJBOkJSQVNJTDpBTEFHT0FTOkNBTVBPIEFMRUdSRQorMTU6QlI6QlJBOkJSQVNJTDpBTEFHT0FTOkNBTVBPIEdSQU5ERQorMTY6QlI6QlJBOkJSQVNJTDpBTEFHT0FTOkNBTkFQSQorMTc6QlI6QlJBOkJSQVNJTDpBTEFHT0FTOkNBUEVMQQorMTg6QlI6QlJBOkJSQVNJTDpBTEFHT0FTOkNBUk5FSVJPUworMTk6QlI6QlJBOkJSQVNJTDpBTEFHT0FTOkNIQSBQUkVUQQorMjA6QlI6QlJBOkJSQVNJTDpBTEFHT0FTOkNPSVRFIERPIE5PSUEKKzIxOkJSOkJSQTpCUkFTSUw6QUxBR09BUzpDT0xPTklBIExFT1BPTERJCisyMjpCUjpCUkE6QlJBU0lMOkFMQUdPQVM6Q09RVUVJUk8gU0VDTworMjM6QlI6QlJBOkJSQVNJTDpBTEFHT0FTOkNPUlVSSVBFCisyNDpCUjpCUkE6QlJBU0lMOkFMQUdPQVM6REVMTUlSTyBHT1VWRUlBCisyNTpCUjpCUkE6QlJBU0lMOkFMQUdPQVM6RE9JUyBSSUFDSE9TCisyNjpCUjpCUkE6QlJBU0lMOkFMQUdPQVM6RkVJUkEgR1JBTkRFCisyNzpCUjpCUkE6QlJBU0lMOkFMQUdPQVM6RkVMSVogREVTRVJUTworMjg6QlI6QlJBOkJSQVNJTDpBTEFHT0FTOkZMRVhFSVJBUworMjk6QlI6QlJBOkJSQVNJTDpBTEFHT0FTOkdJUkFVIERPIFBPTkNJQU4KKzMwOkJSOkJSQTpCUkFTSUw6QUxBR09BUzpJQkFURUdVQVJBCiszMTpCUjpCUkE6QlJBU0lMOkFMQUdPQVM6SUdBQ0kKKzMyOkJSOkJSQTpCUkFTSUw6QUxBR09BUzpJR1JFSkEgTk9WQQorMzM6QlI6QlJBOkJSQVNJTDpBTEFHT0FTOklOSEFQSQorMzQ6QlI6QlJBOkJSQVNJTDpBTEFHT0FTOkpBQ0FSTyBET1MgSE9NRU4KKzM1OkJSOkJSQTpCUkFTSUw6QUxBR09BUzpKQUNVSVBFCiszNjpCUjpCUkE6QlJBU0lMOkFMQUdPQVM6SkFQQVJBVElOR0EKKzM3OkJSOkJSQTpCUkFTSUw6QUxBR09BUzpKQVJBTUFUQUlBCiszODpCUjpCUkE6QlJBU0lMOkFMQUdPQVM6Sk9BUVVJTSBHT01FUworMzk6QlI6QlJBOkJSQVNJTDpBTEFHT0FTOkpVTkRJQQorNDA6QlI6QlJBOkJSQVNJTDpBTEFHT0FTOkpVTlFVRUlSTworNDE6QlI6QlJBOkJSQVNJTDpBTEFHT0FTOkxBR09BIERBIENBTk9BCis0MjpCUjpCUkE6QlJBU0lMOkFMQUdPQVM6TElNT0VJUk8gRCBBTkFESQorNDM6QlI6QlJBOkJSQVNJTDpBTEFHT0FTOk1BQ0VJTworNDQ6QlI6QlJBOkJSQVNJTDpBTEFHT0FTOk1BSk9SIElTSURPUk8KKzQ1OkJSOkJSQTpCUkFTSUw6QUxBR09BUzpNQVIgVkVSTUVMSE8KKzQ2OkJSOkJSQTpCUkFTSUw6QUxBR09BUzpNQVJBR09HSQorNDc6QlI6QlJBOkJSQVNJTDpBTEFHT0FTOk1BUkFWSUxIQQorNDg6QlI6QlJBOkJSQVNJTDpBTEFHT0FTOk1BUkVDSEFMIERFT0RPUk8KKzQ5OkJSOkJSQTpCUkFTSUw6QUxBR09BUzpNQVJJTUJPTkRPCis1MDpCUjpCUkE6QlJBU0lMOkFMQUdPQVM6TUFUQSBHUkFOREUKKzUxOkJSOkJSQTpCUkFTSUw6QUxBR09BUzpNQVRSSVogRCBDQU1BUkFHCis1MjpCUjpCUkE6QlJBU0lMOkFMQUdPQVM6TUVTU0lBUworNTM6QlI6QlJBOkJSQVNJTDpBTEFHT0FTOk1JUkFET1IgRCBORUdSQU8KKzU0OkJSOkJSQTpCUkFTSUw6QUxBR09BUzpNT05URUlST1BPTElTCis1NTpCUjpCUkE6QlJBU0lMOkFMQUdPQVM6TVVSSUNJCis1NjpCUjpCUkE6QlJBU0lMOkFMQUdPQVM6Tk9WTyBMSU5PCis1NzpCUjpCUkE6QlJBU0lMOkFMQUdPQVM6T0xITyBEIEFHVUEgIEQgRgorNTg6QlI6QlJBOkJSQVNJTDpBTEFHT0FTOk9MSE8gRCdBR1VBIERPIEMKKzU5OkJSOkJSQTpCUkFTSUw6QUxBR09BUzpPTEhPIEQtQUdVQSBHUkFOCis2MDpCUjpCUkE6QlJBU0lMOkFMQUdPQVM6T0xJVkVOQ0EKKzYxOkJSOkJSQTpCUkFTSUw6QUxBR09BUzpPVVJPIEJSQU5DTworNjI6QlI6QlJBOkJSQVNJTDpBTEFHT0FTOlBBTEVTVElOQQorNjM6QlI6QlJBOkJSQVNJTDpBTEFHT0FTOlBBTE1FSVJBIERPUyBJTkQKKzY0OkJSOkJSQTpCUkFTSUw6QUxBR09BUzpQQU8tREUtQUNVQ0FSCis2NTpCUjpCUkE6QlJBU0lMOkFMQUdPQVM6UEFTU08gRCBDQU1BUkFHSQorNjY6QlI6QlJBOkJSQVNJTDpBTEFHT0FTOlBBVUxPIEpBQ0lOVE8KKzY3OkJSOkJSQTpCUkFTSUw6QUxBR09BUzpQRU5FRE8KKzY4OkJSOkJSQTpCUkFTSUw6QUxBR09BUzpQSUFDQUJVQ1UKKzY5OkJSOkJSQTpCUkFTSUw6QUxBR09BUzpQSUxBUgorNzA6QlI6QlJBOkJSQVNJTDpBTEFHT0FTOlBJTkRPQkEKKzcxOkJSOkJSQTpCUkFTSUw6QUxBR09BUzpQSVJBTkhBUworNzI6QlI6QlJBOkJSQVNJTDpBTEFHT0FTOlBPQ08gREFTIFRSSU5DSEUKKzczOkJSOkJSQTpCUkFTSUw6QUxBR09BUzpQT1JUTyBDQUxWTworNzQ6QlI6QlJBOkJSQVNJTDpBTEFHT0FTOlBPUlRPIEQgUEVEUkFTCis3NTpCUjpCUkE6QlJBU0lMOkFMQUdPQVM6UE9SVE8gUkVBTCBETyBDLgorNzY6QlI6QlJBOkJSQVNJTDpBTEFHT0FTOlFVRUJSQU5HVUxPCis3NzpCUjpCUkE6QlJBU0lMOkFMQUdPQVM6UklPIExBUkdPCis3ODpCUjpCUkE6QlJBU0lMOkFMQUdPQVM6Uk9URUlSTworNzk6QlI6QlJBOkJSQVNJTDpBTEFHT0FTOlMgSk9TRSBEQSBUQVBFUkEKKzgwOkJSOkJSQTpCUkFTSUw6QUxBR09BUzpTIExVSVMgRE8gUVVJVFVOCis4MTpCUjpCUkE6QlJBU0lMOkFMQUdPQVM6UyBNSUdVRUwgRCBDQU1QTworODI6QlI6QlJBOkJSQVNJTDpBTEFHT0FTOlMgTUlHVUVMIE1JTEFHUkUKKzgzOkJSOkJSQTpCUkFTSUw6QUxBR09BUzpTQU5UQU5BIEQgTVVOREFVCis4NDpCUjpCUkE6QlJBU0lMOkFMQUdPQVM6U0FOVEFOQSBETyBJUEFORQorODU6QlI6QlJBOkJSQVNJTDpBTEFHT0FTOlNBTyBCUkFTCis4NjpCUjpCUkE6QlJBU0lMOkFMQUdPQVM6U0FPIEpPU0UgREEgTEFKRQorODc6QlI6QlJBOkJSQVNJTDpBTEFHT0FTOlNBTyBTRUJBU1RJQU8KKzg4OkJSOkJSQTpCUkFTSUw6QUxBR09BUzpTQVRVQkEKKzg5OkJSOkJSQTpCUkFTSUw6QUxBR09BUzpTVEEgTFVaSUEgRE8gTlRFCis5MDpCUjpCUkE6QlJBU0lMOkFMQUdPQVM6VEFOUVVFIEQnQVJDQQorOTE6QlI6QlJBOkJSQVNJTDpBTEFHT0FTOlRBUVVBUkFOQQorOTI6QlI6QlJBOkJSQVNJTDpBTEFHT0FTOlRSQUlQVQorOTM6QlI6QlJBOkJSQVNJTDpBTEFHT0FTOlVOSUFPIERPUyBQQUxNQVIKKzk0OkJSOkJSQTpCUkFTSUw6QUxBR09BUzpWSUNPU0EKKzE6QlI6QlJBOkJSQVNJTDpBTUFQQTpBbWFwYQorMjpCUjpCUkE6QlJBU0lMOkFNQVBBOkNhbGNvZW5lCiszOkJSOkJSQTpCUkFTSUw6QU1BUEE6TWFjYXBhCis0OkJSOkJSQTpCUkFTSUw6QU1BUEE6TWF6YWdhbworNTpCUjpCUkE6QlJBU0lMOkFNQVBBOk9pYXBvcXVlCisxOkJSOkJSQTpCUkFTSUw6U0FOVEEgQ0FUQVJJTkE6QUJFTEFSRE8gTFVaCisyOkJSOkJSQTpCUkFTSUw6U0FOVEEgQ0FUQVJJTkE6QUdST0xBTkRJQQorMzpCUjpCUkE6QlJBU0lMOlNBTlRBIENBVEFSSU5BOkFHUk9OT01JQ0EKKzQ6QlI6QlJBOkJSQVNJTDpTQU5UQSBDQVRBUklOQTpBR1VBIERPQ0UKKzU6QlI6QlJBOkJSQVNJTDpTQU5UQSBDQVRBUklOQTpBR1VBUyBETyBDSEFQRUMKKzY6QlI6QlJBOkJSQVNJTDpTQU5UQSBDQVRBUklOQTpBR1VBUyBNT1JOQVMKKzc6QlI6QlJBOkJSQVNJTDpTQU5UQSBDQVRBUklOQTpBTEZSRURPIFdBR05FUgorODpCUjpCUkE6QlJBU0lMOlNBTlRBIENBVEFSSU5BOkFOQ0hJRVRBCis5OkJSOkJSQTpCUkFTSUw6U0FOVEEgQ0FUQVJJTkE6QU5HRUxJTkEKKzEwOkJSOkJSQTpCUkFTSUw6U0FOVEEgQ0FUQVJJTkE6QU5JVEEgR0FSSUJBTERJCisxMTpCUjpCUkE6QlJBU0lMOlNBTlRBIENBVEFSSU5BOkFOSVRBUE9MSVMKKzEyOkJSOkJSQTpCUkFTSUw6U0FOVEEgQ0FUQVJJTkE6QU5UT05JTyBDQVJMT1MKKzEzOkJSOkJSQTpCUkFTSUw6U0FOVEEgQ0FUQVJJTkE6QVJBUVVBUkkKKzE0OkJSOkJSQTpCUkFTSUw6U0FOVEEgQ0FUQVJJTkE6QVJBUkFOR1VBCisxNTpCUjpCUkE6QlJBU0lMOlNBTlRBIENBVEFSSU5BOkFSTUFaRU0KKzE2OkJSOkJSQTpCUkFTSUw6U0FOVEEgQ0FUQVJJTkE6QVJST0lPIFRSSU5UQQorMTc6QlI6QlJBOkJSQVNJTDpTQU5UQSBDQVRBUklOQTpBU0NVUlJBCisxODpCUjpCUkE6QlJBU0lMOlNBTlRBIENBVEFSSU5BOkFUQUxBTlRBCisxOTpCUjpCUkE6QlJBU0lMOlNBTlRBIENBVEFSSU5BOkFVUk9SQQorMjA6QlI6QlJBOkJSQVNJTDpTQU5UQSBDQVRBUklOQTpCLkpBUkRJTSBEJ1NFUlIKKzIxOkJSOkJSQTpCUkFTSUw6U0FOVEEgQ0FUQVJJTkE6QkFMTkVBUi5DQU1CT1JJCisyMjpCUjpCUkE6QlJBU0lMOlNBTlRBIENBVEFSSU5BOkJBUlJBIFZFTEhBCisyMzpCUjpCUkE6QlJBU0lMOlNBTlRBIENBVEFSSU5BOkJFTkVESVRPIE5PVk8KKzI0OkJSOkJSQTpCUkFTSUw6U0FOVEEgQ0FUQVJJTkE6QklHVUFDVQorMjU6QlI6QlJBOkJSQVNJTDpTQU5UQSBDQVRBUklOQTpCTFVNRU5BVQorMjY6QlI6QlJBOkJSQVNJTDpTQU5UQSBDQVRBUklOQTpCT00gUkVUSVJPCisyNzpCUjpCUkE6QlJBU0lMOlNBTlRBIENBVEFSSU5BOkJPVElWRVJBCisyODpCUjpCUkE6QlJBU0lMOlNBTlRBIENBVEFSSU5BOkJSQUNPIERPIE5PUlRFCisyOTpCUjpCUkE6QlJBU0lMOlNBTlRBIENBVEFSSU5BOkJSVVNRVUUKKzMwOkJSOkJSQTpCUkFTSUw6U0FOVEEgQ0FUQVJJTkE6Q0FDQURPUgorMzE6QlI6QlJBOkJSQVNJTDpTQU5UQSBDQVRBUklOQTpDQUlCSQorMzI6QlI6QlJBOkJSQVNJTDpTQU5UQSBDQVRBUklOQTpDQU1CT1JJVQorMzM6QlI6QlJBOkJSQVNJTDpTQU5UQSBDQVRBUklOQTpDQU1QTyBBTEVHUkUKKzM0OkJSOkJSQTpCUkFTSUw6U0FOVEEgQ0FUQVJJTkE6Q0FNUE8gQkVMTyBEJ1NVCiszNTpCUjpCUkE6QlJBU0lMOlNBTlRBIENBVEFSSU5BOkNBTVBPIERPIEVSRQorMzY6QlI6QlJBOkJSQVNJTDpTQU5UQSBDQVRBUklOQTpDQU1QT1MgTk9WT1MKKzM3OkJSOkJSQTpCUkFTSUw6U0FOVEEgQ0FUQVJJTkE6Q0FORUxJTkhBCiszODpCUjpCUkE6QlJBU0lMOlNBTlRBIENBVEFSSU5BOkNBTk9JTkhBUworMzk6QlI6QlJBOkJSQVNJTDpTQU5UQSBDQVRBUklOQTpDQVBJTlpBTAorNDA6QlI6QlJBOkJSQVNJTDpTQU5UQSBDQVRBUklOQTpDQVRBTkRVVkFTCis0MTpCUjpCUkE6QlJBU0lMOlNBTlRBIENBVEFSSU5BOkNBWEFNQlUgRE8gU1VMCis0MjpCUjpCUkE6QlJBU0lMOlNBTlRBIENBVEFSSU5BOkNIQVBFQ08KKzQzOkJSOkJSQTpCUkFTSUw6U0FOVEEgQ0FUQVJJTkE6Q09OQ09SRElBCis0NDpCUjpCUkE6QlJBU0lMOlNBTlRBIENBVEFSSU5BOkNPUk9ORUwgRlJFSVRBUworNDU6QlI6QlJBOkJSQVNJTDpTQU5UQSBDQVRBUklOQTpDT1JVUEEKKzQ2OkJSOkJSQTpCUkFTSUw6U0FOVEEgQ0FUQVJJTkE6Q1JJQ0lVTUEKKzQ3OkJSOkJSQTpCUkFTSUw6U0FOVEEgQ0FUQVJJTkE6Q1VOSEEgUE9SQQorNDg6QlI6QlJBOkJSQVNJTDpTQU5UQSBDQVRBUklOQTpDVVJJVElCQU5PUworNDk6QlI6QlJBOkJSQVNJTDpTQU5UQSBDQVRBUklOQTpERVNDQU5TTworNTA6QlI6QlJBOkJSQVNJTDpTQU5UQSBDQVRBUklOQTpESU9OSVNJTyBDRVJRVUUKKzUxOkJSOkJSQTpCUkFTSUw6U0FOVEEgQ0FUQVJJTkE6RE9OQSBFTU1BCis1MjpCUjpCUkE6QlJBU0lMOlNBTlRBIENBVEFSSU5BOkVSVkFMIFZFTEhPCis1MzpCUjpCUkE6QlJBU0lMOlNBTlRBIENBVEFSSU5BOkZBWElOQUwgRCBHVUVERQorNTQ6QlI6QlJBOkJSQVNJTDpTQU5UQSBDQVRBUklOQTpGTE9SSUFOT1BPTElTCis1NTpCUjpCUkE6QlJBU0lMOlNBTlRBIENBVEFSSU5BOkZSQUlCVVJHTworNTY6QlI6QlJBOkJSQVNJTDpTQU5UQSBDQVRBUklOQTpHQUxWQU8KKzU3OkJSOkJSQTpCUkFTSUw6U0FOVEEgQ0FUQVJJTkE6R0FST1BBQkEKKzU4OkJSOkJSQTpCUkFTSUw6U0FOVEEgQ0FUQVJJTkE6R0FSVVZBCis1OTpCUjpCUkE6QlJBU0lMOlNBTlRBIENBVEFSSU5BOkdBU1BBUgorNjA6QlI6QlJBOkJSQVNJTDpTQU5UQSBDQVRBUklOQTpHT1YuQ0VMU08gUkFNT1MKKzYxOkJSOkJSQTpCUkFTSUw6U0FOVEEgQ0FUQVJJTkE6R1JBTyBQQVJBCis2MjpCUjpCUkE6QlJBU0lMOlNBTlRBIENBVEFSSU5BOkdSQVZBVEFMCis2MzpCUjpCUkE6QlJBU0lMOlNBTlRBIENBVEFSSU5BOkdVQUJJUlVCQQorNjQ6QlI6QlJBOkJSQVNJTDpTQU5UQSBDQVRBUklOQTpHVUFSQUNJQUJBCis2NTpCUjpCUkE6QlJBU0lMOlNBTlRBIENBVEFSSU5BOkdVQVJBTUlSSU0KKzY2OkJSOkJSQTpCUkFTSUw6U0FOVEEgQ0FUQVJJTkE6R1VBUlVKQSBETyBTVUwKKzY3OkJSOkJSQTpCUkFTSUw6U0FOVEEgQ0FUQVJJTkE6SEVSVkFMIEQuT0VTVEUKKzY4OkJSOkJSQTpCUkFTSUw6U0FOVEEgQ0FUQVJJTkE6SUJJQ0FSRQorNjk6QlI6QlJBOkJSQVNJTDpTQU5UQSBDQVRBUklOQTpJQklSQU1BCis3MDpCUjpCUkE6QlJBU0lMOlNBTlRBIENBVEFSSU5BOklDQVJBCis3MTpCUjpCUkE6QlJBU0lMOlNBTlRBIENBVEFSSU5BOklMSE9UQQorNzI6QlI6QlJBOkJSQVNJTDpTQU5UQSBDQVRBUklOQTpJTUFSVUkKKzczOkJSOkJSQTpCUkFTSUw6U0FOVEEgQ0FUQVJJTkE6SU1CSVRVQkEKKzc0OkJSOkJSQTpCUkFTSUw6U0FOVEEgQ0FUQVJJTkE6SU1CVUlBCis3NTpCUjpCUkE6QlJBU0lMOlNBTlRBIENBVEFSSU5BOklOREFJQUwKKzc2OkJSOkJSQTpCUkFTSUw6U0FOVEEgQ0FUQVJJTkE6SVBJUkEKKzc3OkJSOkJSQTpCUkFTSUw6U0FOVEEgQ0FUQVJJTkE6SVBVTUlSSU0KKzc4OkJSOkJSQTpCUkFTSUw6U0FOVEEgQ0FUQVJJTkE6SVJBTkkKKzc5OkJSOkJSQTpCUkFTSUw6U0FOVEEgQ0FUQVJJTkE6SVJJTkVPUE9MSVMKKzgwOkJSOkJSQTpCUkFTSUw6U0FOVEEgQ0FUQVJJTkE6SVRBCis4MTpCUjpCUkE6QlJBU0lMOlNBTlRBIENBVEFSSU5BOklUQUlPUE9MSVMKKzgyOkJSOkJSQTpCUkFTSUw6U0FOVEEgQ0FUQVJJTkE6SVRBSkFJCis4MzpCUjpCUkE6QlJBU0lMOlNBTlRBIENBVEFSSU5BOklUQVBFTUEKKzg0OkJSOkJSQTpCUkFTSUw6U0FOVEEgQ0FUQVJJTkE6SVRVUE9SQU5HQQorODU6QlI6QlJBOkJSQVNJTDpTQU5UQSBDQVRBUklOQTpJdGFwaXJhbmdhCis4NjpCUjpCUkE6QlJBU0lMOlNBTlRBIENBVEFSSU5BOkpBQk9SQQorODc6QlI6QlJBOkJSQVNJTDpTQU5UQSBDQVRBUklOQTpKQUNJTlRPIE1BQ0hBRE8KKzg4OkJSOkJSQTpCUkFTSUw6U0FOVEEgQ0FUQVJJTkE6SkFHVUFSVU5BCis4OTpCUjpCUkE6QlJBU0lMOlNBTlRBIENBVEFSSU5BOkpBUkFHVUEgRE8gU1VMCis5MDpCUjpCUkE6QlJBU0lMOlNBTlRBIENBVEFSSU5BOkpPQUNBQkEKKzkxOkJSOkJSQTpCUkFTSUw6U0FOVEEgQ0FUQVJJTkE6Sk9JTlZJTEUKKzkyOkJSOkJSQTpCUkFTSUw6U0FOVEEgQ0FUQVJJTkE6TEFDRVJET1BPTElTCis5MzpCUjpCUkE6QlJBU0lMOlNBTlRBIENBVEFSSU5BOkxBR1VOQQorOTQ6QlI6QlJBOkJSQVNJTDpTQU5UQSBDQVRBUklOQTpMQUpFUworOTU6QlI6QlJBOkJSQVNJTDpTQU5UQSBDQVRBUklOQTpMQVVSRU5USU5PCis5NjpCUjpCUkE6QlJBU0lMOlNBTlRBIENBVEFSSU5BOkxBVVJPIE1VTExFUgorOTc6QlI6QlJBOkJSQVNJTDpTQU5UQSBDQVRBUklOQTpMRUJPTiBSRUdJUworOTg6QlI6QlJBOkJSQVNJTDpTQU5UQSBDQVRBUklOQTpMRU9CRVJUTyBMRUFMCis5OTpCUjpCUkE6QlJBU0lMOlNBTlRBIENBVEFSSU5BOkxPTlRSQVMKKzEwMDpCUjpCUkE6QlJBU0lMOlNBTlRBIENBVEFSSU5BOkxVSVogQUxWRVMKKzEwMTpCUjpCUkE6QlJBU0lMOlNBTlRBIENBVEFSSU5BOk1BQ0FSQU5EVUJBCisxMDI6QlI6QlJBOkJSQVNJTDpTQU5UQSBDQVRBUklOQTpNQUZSQQorMTAzOkJSOkJSQTpCUkFTSUw6U0FOVEEgQ0FUQVJJTkE6TUFKT1IgR0VSQ0lOTworMTA0OkJSOkJSQTpCUkFTSUw6U0FOVEEgQ0FUQVJJTkE6TUFKT1IgVklFSVJBCisxMDU6QlI6QlJBOkJSQVNJTDpTQU5UQSBDQVRBUklOQTpNQVJBQ0FKQQorMTA2OkJSOkJSQTpCUkFTSUw6U0FOVEEgQ0FUQVJJTkE6TUFSQVZJTEhBCisxMDc6QlI6QlJBOkJSQVNJTDpTQU5UQSBDQVRBUklOQTpNQVRPUyBDT1NUQQorMTA4OkJSOkJSQTpCUkFTSUw6U0FOVEEgQ0FUQVJJTkE6TUVMRUlSTworMTA5OkJSOkJSQTpCUkFTSUw6U0FOVEEgQ0FUQVJJTkE6TU9ERUxPCisxMTA6QlI6QlJBOkJSQVNJTDpTQU5UQSBDQVRBUklOQTpNT05EQUkKKzExMTpCUjpCUkE6QlJBU0lMOlNBTlRBIENBVEFSSU5BOk1PTlRFIENBU1RFTE8KKzExMjpCUjpCUkE6QlJBU0lMOlNBTlRBIENBVEFSSU5BOk1PUlJPIERBIEZVTUFDQQorMTEzOkJSOkJSQTpCUkFTSUw6U0FOVEEgQ0FUQVJJTkE6TkFWRUdBTlRFUworMTE0OkJSOkJSQTpCUkFTSUw6U0FOVEEgQ0FUQVJJTkE6Tk9WQSBFUkVDSElNCisxMTU6QlI6QlJBOkJSQVNJTDpTQU5UQSBDQVRBUklOQTpOT1ZBIFRSRU5UTworMTE2OkJSOkJSQTpCUkFTSUw6U0FOVEEgQ0FUQVJJTkE6Tk9WQSBWRU5FWkEKKzExNzpCUjpCUkE6QlJBU0lMOlNBTlRBIENBVEFSSU5BOk9STEVBRVMKKzExODpCUjpCUkE6QlJBU0lMOlNBTlRBIENBVEFSSU5BOk9VUk8KKzExOTpCUjpCUkE6QlJBU0lMOlNBTlRBIENBVEFSSU5BOlAuQ0FTVEVMTyBCUkFOQworMTIwOkJSOkJSQTpCUkFTSUw6U0FOVEEgQ0FUQVJJTkE6UEFMSE9DQQorMTIxOkJSOkJSQTpCUkFTSUw6U0FOVEEgQ0FUQVJJTkE6UEFMTUEgU09MQQorMTIyOkJSOkJSQTpCUkFTSUw6U0FOVEEgQ0FUQVJJTkE6UEFMTUlUT1MKKzEyMzpCUjpCUkE6QlJBU0lMOlNBTlRBIENBVEFSSU5BOlBBUEFORFVWQQorMTI0OkJSOkJSQTpCUkFTSUw6U0FOVEEgQ0FUQVJJTkE6UEFVTE8gTE9QRVoKKzEyNTpCUjpCUkE6QlJBU0lMOlNBTlRBIENBVEFSSU5BOlBFRFJBUyBHUkFOREVTCisxMjY6QlI6QlJBOkJSQVNJTDpTQU5UQSBDQVRBUklOQTpQRU5IQQorMTI3OkJSOkJSQTpCUkFTSUw6U0FOVEEgQ0FUQVJJTkE6UEVSSVRJQkEKKzEyODpCUjpCUkE6QlJBU0lMOlNBTlRBIENBVEFSSU5BOlBFVFJPTEFORElBCisxMjk6QlI6QlJBOkJSQVNJTDpTQU5UQSBDQVRBUklOQTpQSUNBUlJBUworMTMwOkJSOkJSQTpCUkFTSUw6U0FOVEEgQ0FUQVJJTkE6UElOSEFMWklOSE8KKzEzMTpCUjpCUkE6QlJBU0lMOlNBTlRBIENBVEFSSU5BOlBJTkhFSVJPIFBSRVRPCisxMzI6QlI6QlJBOkJSQVNJTDpTQU5UQSBDQVRBUklOQTpQSVJBVFVCQQorMTMzOkJSOkJSQTpCUkFTSUw6U0FOVEEgQ0FUQVJJTkE6UE9NRVJPREUKKzEzNDpCUjpCUkE6QlJBU0lMOlNBTlRBIENBVEFSSU5BOlBPTlRBIEFMVEEKKzEzNTpCUjpCUkE6QlJBU0lMOlNBTlRBIENBVEFSSU5BOlBPTlRFIFNFUlJBREEKKzEzNjpCUjpCUkE6QlJBU0lMOlNBTlRBIENBVEFSSU5BOlBPUlRPIEJFTE8KKzEzNzpCUjpCUkE6QlJBU0lMOlNBTlRBIENBVEFSSU5BOlBPUlRPIFVOSUFPCisxMzg6QlI6QlJBOkJSQVNJTDpTQU5UQSBDQVRBUklOQTpQT1VTTyBSRURPTkRPCisxMzk6QlI6QlJBOkJSQVNJTDpTQU5UQSBDQVRBUklOQTpQUkVTRFRFLiBHRVRVTElPCisxNDA6QlI6QlJBOkJSQVNJTDpTQU5UQSBDQVRBUklOQTpQUkVTSURFTlRFIE5FUkUKKzE0MTpCUjpCUkE6QlJBU0lMOlNBTlRBIENBVEFSSU5BOlFVSUxPTUJPCisxNDI6QlI6QlJBOkJSQVNJTDpTQU5UQSBDQVRBUklOQTpSQU5DSE8gUVVFSU1BRE8KKzE0MzpCUjpCUkE6QlJBU0lMOlNBTlRBIENBVEFSSU5BOlJJTyBEQVMgQU5UQVMKKzE0NDpCUjpCUkE6QlJBU0lMOlNBTlRBIENBVEFSSU5BOlJJTyBETyBDQU1QTworMTQ1OkJSOkJSQTpCUkFTSUw6U0FOVEEgQ0FUQVJJTkE6UklPIERPIE9FU1RFCisxNDY6QlI6QlJBOkJSQVNJTDpTQU5UQSBDQVRBUklOQTpSSU8gRE8gU1VMCisxNDc6QlI6QlJBOkJSQVNJTDpTQU5UQSBDQVRBUklOQTpSSU8gRE9TIENFRFJPUworMTQ4OkJSOkJSQTpCUkFTSUw6U0FOVEEgQ0FUQVJJTkE6UklPIEZPUlRVTkEKKzE0OTpCUjpCUkE6QlJBU0lMOlNBTlRBIENBVEFSSU5BOlJJTyBORUdSSU5ITworMTUwOkJSOkJSQTpCUkFTSUw6U0FOVEEgQ0FUQVJJTkE6Uk9ERUlPCisxNTE6QlI6QlJBOkJSQVNJTDpTQU5UQSBDQVRBUklOQTpST01FTEFORElBCisxNTI6QlI6QlJBOkJSQVNJTDpTQU5UQSBDQVRBUklOQTpTLkJFTlRPIERPIFNVTAorMTUzOkJSOkJSQTpCUkFTSUw6U0FOVEEgQ0FUQVJJTkE6Uy5KT0FPIEJBVElTVEEKKzE1NDpCUjpCUkE6QlJBU0lMOlNBTlRBIENBVEFSSU5BOlMuSk9TRSBEJ0NFUlJJVAorMTU1OkJSOkJSQTpCUkFTSUw6U0FOVEEgQ0FUQVJJTkE6Uy5KT1NFIERPIENFRFJPCisxNTY6QlI6QlJBOkJSQVNJTDpTQU5UQSBDQVRBUklOQTpTLkxPVVJFTkNPIEQnT0UKKzE1NzpCUjpCUkE6QlJBU0lMOlNBTlRBIENBVEFSSU5BOlMuTUlHVUVMIEQnT0VTVAorMTU4OkJSOkJSQTpCUkFTSUw6U0FOVEEgQ0FUQVJJTkE6U0FMRVRFCisxNTk6QlI6QlJBOkJSQVNJTDpTQU5UQSBDQVRBUklOQTpTQUxUTyBWRUxPU08KKzE2MDpCUjpCUkE6QlJBU0lMOlNBTlRBIENBVEFSSU5BOlNBTlRBIENFQ0lMSUEKKzE2MTpCUjpCUkE6QlJBU0lMOlNBTlRBIENBVEFSSU5BOlNBTyBCT05JRkFDSU8KKzE2MjpCUjpCUkE6QlJBU0lMOlNBTlRBIENBVEFSSU5BOlNBTyBDQVJMT1MKKzE2MzpCUjpCUkE6QlJBU0lMOlNBTlRBIENBVEFSSU5BOlNBTyBET01JTkdPUworMTY0OkJSOkJSQTpCUkFTSUw6U0FOVEEgQ0FUQVJJTkE6U0FPIEZDTy4gRE8gU1VMCisxNjU6QlI6QlJBOkJSQVNJTDpTQU5UQSBDQVRBUklOQTpTQU8gSk9BTyBETyBTVUwKKzE2NjpCUjpCUkE6QlJBU0lMOlNBTlRBIENBVEFSSU5BOlNBTyBKT0FRVUlNCisxNjc6QlI6QlJBOkJSQVNJTDpTQU5UQSBDQVRBUklOQTpTQU8gSk9TRQorMTY4OkJSOkJSQTpCUkFTSUw6U0FOVEEgQ0FUQVJJTkE6U0FPIExVREdFUk8KKzE2OTpCUjpCUkE6QlJBU0lMOlNBTlRBIENBVEFSSU5BOlNBTyBNQVJUSU5ITworMTcwOkJSOkJSQTpCUkFTSUw6U0FOVEEgQ0FUQVJJTkE6U0FVREFERVMKKzE3MTpCUjpCUkE6QlJBU0lMOlNBTlRBIENBVEFSSU5BOlNDSFJPRURFUgorMTcyOkJSOkJSQTpCUkFTSUw6U0FOVEEgQ0FUQVJJTkE6U0VBUkEKKzE3MzpCUjpCUkE6QlJBU0lMOlNBTlRBIENBVEFSSU5BOlNJREVST1BPTElTCisxNzQ6QlI6QlJBOkJSQVNJTDpTQU5UQSBDQVRBUklOQTpTT01CUklPCisxNzU6QlI6QlJBOkJSQVNJTDpTQU5UQSBDQVRBUklOQTpTVEEuUk9TQSBERSBMSU0KKzE3NjpCUjpCUkE6QlJBU0lMOlNBTlRBIENBVEFSSU5BOlNUTy5BTUFSTyBEJ0lNUAorMTc3OkJSOkJSQTpCUkFTSUw6U0FOVEEgQ0FUQVJJTkE6VEFJTworMTc4OkJSOkJSQTpCUkFTSUw6U0FOVEEgQ0FUQVJJTkE6VEFOR0FSQQorMTc5OkJSOkJSQTpCUkFTSUw6U0FOVEEgQ0FUQVJJTkE6VElKVUNBUworMTgwOkJSOkJSQTpCUkFTSUw6U0FOVEEgQ0FUQVJJTkE6VElNQkUgRE8gU1VMCisxODE6QlI6QlJBOkJSQVNJTDpTQU5UQSBDQVRBUklOQTpUSU1CTworMTgyOkJSOkJSQTpCUkFTSUw6U0FOVEEgQ0FUQVJJTkE6VFJFUyBCQVJSQVMKKzE4MzpCUjpCUkE6QlJBU0lMOlNBTlRBIENBVEFSSU5BOlRSRVpFIERFIE1BSU8KKzE4NDpCUjpCUkE6QlJBU0lMOlNBTlRBIENBVEFSSU5BOlRSRVpFIFRJTElBUworMTg1OkJSOkJSQTpCUkFTSUw6U0FOVEEgQ0FUQVJJTkE6VFJPTUJVRE8gQ0VOVFJBCisxODY6QlI6QlJBOkJSQVNJTDpTQU5UQSBDQVRBUklOQTpUVUJBUkFPCisxODc6QlI6QlJBOkJSQVNJTDpTQU5UQSBDQVRBUklOQTpUVVJWTworMTg4OkJSOkJSQTpCUkFTSUw6U0FOVEEgQ0FUQVJJTkE6VVJVQklDSQorMTg5OkJSOkJSQTpCUkFTSUw6U0FOVEEgQ0FUQVJJTkE6VVJVQ0FOR0EKKzE5MDpCUjpCUkE6QlJBU0lMOlNBTlRBIENBVEFSSU5BOlZBUkdFQU8KKzE5MTpCUjpCUkE6QlJBU0lMOlNBTlRBIENBVEFSSU5BOlZJREFMIFJBTU9TCisxOTI6QlI6QlJBOkJSQVNJTDpTQU5UQSBDQVRBUklOQTpWSURFSVJBCisxOTM6QlI6QlJBOkJSQVNJTDpTQU5UQSBDQVRBUklOQTpXSVRNQVJTVU0KKzE5NDpCUjpCUkE6QlJBU0lMOlNBTlRBIENBVEFSSU5BOlhBTlhFUkUKKzE5NTpCUjpCUkE6QlJBU0lMOlNBTlRBIENBVEFSSU5BOlhBVkFOVElOQQorMTk2OkJSOkJSQTpCUkFTSUw6U0FOVEEgQ0FUQVJJTkE6WEFYSU0KKzE6QlI6QlJBOkJSQVNJTDpSSU8gR3JhbmRlIERPIFNVTDpBcnJvaW8gZG8gVGlncmUKKzI6QlI6QlJBOkJSQVNJTDpSSU8gR3JhbmRlIERPIFNVTDpCYXJyb3MgQ2Fzc2FsCisxOkJSOkJSQTpCUkFTSUw6TUFSQU5IQU8vUElBVUk6UkVQLiBCT0EgRVNQRVIuCisxOkJSOkJSQTpCUkFTSUw6Q2FwYW5lbWE6TWVkaWFuZWlyYQorMTpCUjpCUkE6QlJBU0lMOk1BVE8gR1JPU1NPIERPIFNVTDpBLiBDTEFSQQorMjpCUjpCUkE6QlJBU0lMOk1BVE8gR1JPU1NPIERPIFNVTDpBTUFNQkFZCiszOkJSOkJSQTpCUkFTSUw6TUFUTyBHUk9TU08gRE8gU1VMOkFOQVNUQUNJTworNDpCUjpCUkE6QlJBU0lMOk1BVE8gR1JPU1NPIERPIFNVTDpBTkFVUklMQU5ESUEKKzU6QlI6QlJBOkJSQVNJTDpNQVRPIEdST1NTTyBETyBTVUw6QU5HRUxJQ0EKKzY6QlI6QlJBOkJSQVNJTDpNQVRPIEdST1NTTyBETyBTVUw6QU5UT05JTyBKT0FPCis3OkJSOkJSQTpCUkFTSUw6TUFUTyBHUk9TU08gRE8gU1VMOkFQQVJFQ0lEQSBETyBUQUIKKzg6QlI6QlJBOkJSQVNJTDpNQVRPIEdST1NTTyBETyBTVUw6QVFVSURBVUFOQQorOTpCUjpCUkE6QlJBU0lMOk1BVE8gR1JPU1NPIERPIFNVTDpBUkFMIE1PUkVJUkEKKzEwOkJSOkJSQTpCUkFTSUw6TUFUTyBHUk9TU08gRE8gU1VMOkJBTkRFSVJBTlRFUworMTE6QlI6QlJBOkJSQVNJTDpNQVRPIEdST1NTTyBETyBTVUw6QkFUQUdVQVNTVQorMTI6QlI6QlJBOkJSQVNJTDpNQVRPIEdST1NTTyBETyBTVUw6QkFUQUlQT1JBCisxMzpCUjpCUkE6QlJBU0lMOk1BVE8gR1JPU1NPIERPIFNVTDpCRUxBIFZJU1RBCisxNDpCUjpCUkE6QlJBU0lMOk1BVE8gR1JPU1NPIERPIFNVTDpCT05JVE8KKzE1OkJSOkJSQTpCUkFTSUw6TUFUTyBHUk9TU08gRE8gU1VMOkJSQVNJTEFORElBCisxNjpCUjpCUkE6QlJBU0lMOk1BVE8gR1JPU1NPIERPIFNVTDpDQU1BUFVBCisxNzpCUjpCUkE6QlJBU0lMOk1BVE8gR1JPU1NPIERPIFNVTDpDQU1QTyBHUkFOREUKKzE4OkJSOkJSQTpCUkFTSUw6TUFUTyBHUk9TU08gRE8gU1VMOkNBUkFDT0wKKzE5OkJSOkJSQTpCUkFTSUw6TUFUTyBHUk9TU08gRE8gU1VMOkNBUkFQTworMjA6QlI6QlJBOkJSQVNJTDpNQVRPIEdST1NTTyBETyBTVUw6Q0FTU0lMQU5ESUEKKzIxOkJSOkJSQTpCUkFTSUw6TUFUTyBHUk9TU08gRE8gU1VMOkNPUkdVSU5ITworMjI6QlI6QlJBOkJSQVNJTDpNQVRPIEdST1NTTyBETyBTVUw6Q09SVU1CQQorMjM6QlI6QlJBOkJSQVNJTDpNQVRPIEdST1NTTyBETyBTVUw6Q09YSU0KKzI0OkJSOkJSQTpCUkFTSUw6TUFUTyBHUk9TU08gRE8gU1VMOkRFT0RBUE9MSVMKKzI1OkJSOkJSQTpCUkFTSUw6TUFUTyBHUk9TU08gRE8gU1VMOkRPVVJBRE9TCisyNjpCUjpCUkE6QlJBU0lMOk1BVE8gR1JPU1NPIERPIFNVTDpFTCBET1JBRE8KKzI3OkJSOkJSQTpCUkFTSUw6TUFUTyBHUk9TU08gRE8gU1VMOkZBVElNQSBETyBTVUwKKzI4OkJSOkJSQTpCUkFTSUw6TUFUTyBHUk9TU08gRE8gU1VMOkdMT1JJQSBERSBET1VSQUQKKzI5OkJSOkJSQTpCUkFTSUw6TUFUTyBHUk9TU08gRE8gU1VMOkdVSUEgTE9QRVMgREUgTEEKKzMwOkJSOkJSQTpCUkFTSUw6TUFUTyBHUk9TU08gRE8gU1VMOklHVUFURU1JCiszMTpCUjpCUkE6QlJBU0lMOk1BVE8gR1JPU1NPIERPIFNVTDpJTk9DRU5DSUEKKzMyOkJSOkJSQTpCUkFTSUw6TUFUTyBHUk9TU08gRE8gU1VMOklUQVBPUkEKKzMzOkJSOkJSQTpCUkFTSUw6TUFUTyBHUk9TU08gRE8gU1VMOklWSU5IRU1BCiszNDpCUjpCUkE6QlJBU0lMOk1BVE8gR1JPU1NPIERPIFNVTDpKQVJBR1VBUkkKKzM1OkJSOkJSQTpCUkFTSUw6TUFUTyBHUk9TU08gRE8gU1VMOkpBUkRJTQorMzY6QlI6QlJBOkJSQVNJTDpNQVRPIEdST1NTTyBETyBTVUw6SkFURUkKKzM3OkJSOkJSQTpCUkFTSUw6TUFUTyBHUk9TU08gRE8gU1VMOkxBREFSSU8KKzM4OkJSOkJSQTpCUkFTSUw6TUFUTyBHUk9TU08gRE8gU1VMOk1BUkFDQUpVCiszOTpCUjpCUkE6QlJBU0lMOk1BVE8gR1JPU1NPIERPIFNVTDpNSVJBTkRBCis0MDpCUjpCUkE6QlJBU0lMOk1BVE8gR1JPU1NPIERPIFNVTDpNVU5ETyBOT1ZPCis0MTpCUjpCUkE6QlJBU0lMOk1BVE8gR1JPU1NPIERPIFNVTDpOQVZJUkFJCis0MjpCUjpCUkE6QlJBU0lMOk1BVE8gR1JPU1NPIERPIFNVTDpOSU9BUVVFCis0MzpCUjpCUkE6QlJBU0lMOk1BVE8gR1JPU1NPIERPIFNVTDpOT1ZBIEFORFJBRElOQQorNDQ6QlI6QlJBOkJSQVNJTDpNQVRPIEdST1NTTyBETyBTVUw6UC4gTVVSVElOSE8KKzQ1OkJSOkJSQTpCUkFTSUw6TUFUTyBHUk9TU08gRE8gU1VMOlBBUkFOQUlCQQorNDY6QlI6QlJBOkJSQVNJTDpNQVRPIEdST1NTTyBETyBTVUw6UEVEUk8gR09NRVMKKzQ3OkJSOkJSQTpCUkFTSUw6TUFUTyBHUk9TU08gRE8gU1VMOlBPTlRBIFBPUkEKKzQ4OkJSOkJSQTpCUkFTSUw6TUFUTyBHUk9TU08gRE8gU1VMOlIuIEJSSUxIQU5URQorNDk6QlI6QlJBOkJSQVNJTDpNQVRPIEdST1NTTyBETyBTVUw6Ui4gTkVHUk8KKzUwOkJSOkJSQTpCUkFTSUw6TUFUTyBHUk9TU08gRE8gU1VMOlJJQkFTIERPIFIuUEFSRE8KKzUxOkJSOkJSQTpCUkFTSUw6TUFUTyBHUk9TU08gRE8gU1VMOlJJTyBWRVJERSBERSBNLkcKKzUyOkJSOkJSQTpCUkFTSUw6TUFUTyBHUk9TU08gRE8gU1VMOlJPQ0hFRE8KKzUzOkJSOkJSQTpCUkFTSUw6TUFUTyBHUk9TU08gRE8gU1VMOlNJRFJPTEFORElBCis1NDpCUjpCUkE6QlJBU0lMOk1BVE8gR1JPU1NPIERPIFNVTDpURVJFTk9TCis1NTpCUjpCUkE6QlJBU0lMOk1BVE8gR1JPU1NPIERPIFNVTDpUUkVTIExBR09BUworMTpCUjpCUkE6QlJBU0lMOk1BUkFOSEFPOkFmb25zbyBDdW5oYQorMjpCUjpCUkE6QlJBU0lMOk1BUkFOSEFPOkFsY2FudGFyYQorMzpCUjpCUkE6QlJBU0lMOk1BUkFOSEFPOkFsZGVpYXMgQWx0YXMKKzQ6QlI6QlJBOkJSQVNJTDpNQVJBTkhBTzpBbHRhbWlyYSBkbyBNLgorNTpCUjpCUkE6QlJBU0lMOk1BUkFOSEFPOkFsdG8gUGFybmFpYmEKKzY6QlI6QlJBOkJSQVNJTDpNQVJBTkhBTzpBbWFyYW50ZSBEbyBNYQorNzpCUjpCUkE6QlJBU0lMOk1BUkFOSEFPOkFuYWphdHViYQorODpCUjpCUkE6QlJBU0lMOk1BUkFOSEFPOkFuYXB1cm9zCis5OkJSOkJSQTpCUkFTSUw6TUFSQU5IQU86QXJhaW9zZXMKKzEwOkJSOkJSQTpCUkFTSUw6TUFSQU5IQU86QXJhcmkKKzExOkJSOkJSQTpCUkFTSUw6TUFSQU5IQU86QXhpeGEKKzEyOkJSOkJSQTpCUkFTSUw6TUFSQU5IQU86QmFjYWJhbAorMTM6QlI6QlJBOkJSQVNJTDpNQVJBTkhBTzpCYWNhYmluaGEKKzE0OkJSOkJSQTpCUkFTSUw6TUFSQU5IQU86QmFjdXJpCisxNTpCUjpCUkE6QlJBU0lMOk1BUkFOSEFPOkJhbHNhcworMTY6QlI6QlJBOkJSQVNJTDpNQVJBTkhBTzpCYXJhbyBEZSBHLgorMTc6QlI6QlJBOkJSQVNJTDpNQVJBTkhBTzpCYXJyYSBkbyBDb3JkYQorMTg6QlI6QlJBOkJSQVNJTDpNQVJBTkhBTzpCYXJyZWlyaW5oYXMKKzE5OkJSOkJSQTpCUkFTSUw6TUFSQU5IQU86QmVuZWRpdG8gTGVpdGUKKzIwOkJSOkJSQTpCUkFTSUw6TUFSQU5IQU86QmVxdWltYW8KKzIxOkJSOkJSQTpCUkFTSUw6TUFSQU5IQU86Qm9tIEphcmRpbgorMjI6QlI6QlJBOkJSQVNJTDpNQVJBTkhBTzpCcmVqbworMjM6QlI6QlJBOkJSQVNJTDpNQVJBTkhBTzpCdXJpdGkKKzI0OkJSOkJSQTpCUkFTSUw6TUFSQU5IQU86QnVyaXRpIEJyYXZvCisyNTpCUjpCUkE6QlJBU0lMOk1BUkFOSEFPOkNhamFwaW8KKzI2OkJSOkJSQTpCUkFTSUw6TUFSQU5IQU86Q2FqYXJpCisyNzpCUjpCUkE6QlJBU0lMOk1BUkFOSEFPOkNhbmRpZG8gTWVuZGVzCisyODpCUjpCUkE6QlJBU0lMOk1BUkFOSEFPOkNhbnRhbmhlZGUKKzI5OkJSOkJSQTpCUkFTSUw6TUFSQU5IQU86Q2Fyb2xpbmEKKzMwOkJSOkJSQTpCUkFTSUw6TUFSQU5IQU86Q2FydXRhcGVyYQorMzE6QlI6QlJBOkJSQVNJTDpNQVJBTkhBTzpDYXhpYXMKKzMyOkJSOkJSQTpCUkFTSUw6TUFSQU5IQU86Q2VkcmFsCiszMzpCUjpCUkE6QlJBU0lMOk1BUkFOSEFPOkNoYXBhZGluaGEKKzM0OkJSOkJSQTpCUkFTSUw6TUFSQU5IQU86Q29kbworMzU6QlI6QlJBOkJSQVNJTDpNQVJBTkhBTzpDb2VsaG8gTmV0bworMzY6QlI6QlJBOkJSQVNJTDpNQVJBTkhBTzpDb2xpbmFzCiszNzpCUjpCUkE6QlJBU0lMOk1BUkFOSEFPOkNvcm9hdGEKKzM4OkJSOkJSQTpCUkFTSUw6TUFSQU5IQU86Q3VydXJ1cHUKKzM5OkJSOkJSQTpCUkFTSUw6TUFSQU5IQU86RG9tIFBlZHJvCis0MDpCUjpCUkE6QlJBU0lMOk1BUkFOSEFPOkR1cXVlIEJhY2VsYXIKKzQxOkJSOkJSQTpCUkFTSUw6TUFSQU5IQU86RXNwZXJhbnRpbm9wb2xpcworNDI6QlI6QlJBOkJSQVNJTDpNQVJBTkhBTzpGb3J0YWxlemEgRGFzIE4uCis0MzpCUjpCUkE6QlJBU0lMOk1BUkFOSEFPOkZvcnR1bmEKKzQ0OkJSOkJSQTpCUkFTSUw6TUFSQU5IQU86Ry4gRXVnZW5pbyBCLgorNDU6QlI6QlJBOkJSQVNJTDpNQVJBTkhBTzpHb2RvZnJlZG8gVmlhbmEKKzQ2OkJSOkJSQTpCUkFTSUw6TUFSQU5IQU86R29uY2FsdmVzIERpYXMKKzQ3OkJSOkJSQTpCUkFTSUw6TUFSQU5IQU86R292LiBBcmNoZXIKKzQ4OkJSOkJSQTpCUkFTSUw6TUFSQU5IQU86R3JhY2EgQXJhbmhhCis0OTpCUjpCUkE6QlJBU0lMOk1BUkFOSEFPOkdyYWphdQorNTA6QlI6QlJBOkJSQVNJTDpNQVJBTkhBTzpHdWltYXJhZXMKKzUxOkJSOkJSQTpCUkFTSUw6TUFSQU5IQU86SHVtYmVydG8gQ2FtcG9zCis1MjpCUjpCUkE6QlJBU0lMOk1BUkFOSEFPOkljYXR1Cis1MzpCUjpCUkE6QlJBU0lMOk1BUkFOSEFPOklnYXJhcGUgR3JhbmRlCis1NDpCUjpCUkE6QlJBU0lMOk1BUkFOSEFPOkltcGVyYXRyaXoKKzU1OkJSOkJSQTpCUkFTSUw6TUFSQU5IQU86SXBpeHVuYQorNTY6QlI6QlJBOkJSQVNJTDpNQVJBTkhBTzpJdGFwZWN1cnUtTWlyaW0KKzU3OkJSOkJSQTpCUkFTSUw6TUFSQU5IQU86Sm9hbyBMaXNib2EKKzU4OkJSOkJSQTpCUkFTSUw6TUFSQU5IQU86Sm9zZWxhbmRpYQorNTk6QlI6QlJBOkJSQVNJTDpNQVJBTkhBTzpMYWdvIERvIEp1bmNvCis2MDpCUjpCUkE6QlJBU0lMOk1BUkFOSEFPOkxhZ28gVmVyZGUKKzYxOkJSOkJSQTpCUkFTSUw6TUFSQU5IQU86TGFnbyBkYSBQZWRyYQorNjI6QlI6QlJBOkJSQVNJTDpNQVJBTkhBTzpMaW1hIENhbXBvcworNjM6QlI6QlJBOkJSQVNJTDpNQVJBTkhBTzpMb3JldG8KKzY0OkJSOkJSQTpCUkFTSUw6TUFSQU5IQU86THVpcyBEb21pbmdvcworNjU6QlI6QlJBOkJSQVNJTDpNQVJBTkhBTzpNYWdhbGhhZXMgRGUgQS4KKzY2OkJSOkJSQTpCUkFTSUw6TUFSQU5IQU86TWF0YSBSb21hCis2NzpCUjpCUkE6QlJBU0lMOk1BUkFOSEFPOk1hdGluaGEKKzY4OkJSOkJSQTpCUkFTSUw6TUFSQU5IQU86TWF0b2VzCis2OTpCUjpCUkE6QlJBU0lMOk1BUkFOSEFPOk1pcmFkb3IKKzcwOkJSOkJSQTpCUkFTSUw6TUFSQU5IQU86TWlyaW56YWwKKzcxOkJSOkJSQTpCUkFTSUw6TUFSQU5IQU86TW9uY2FvCis3MjpCUjpCUkE6QlJBU0lMOk1BUkFOSEFPOk1vbnRlcyBBbHRvcworNzM6QlI6QlJBOkJSQVNJTDpNQVJBTkhBTzpNb3Jyb3MKKzc0OkJSOkJSQTpCUkFTSUw6TUFSQU5IQU86TmluYSBSb2RyaWd1ZXMKKzc1OkJSOkJSQTpCUkFTSUw6TUFSQU5IQU86Tm92YSBJb3JxdWUKKzc2OkJSOkJSQTpCUkFTSUw6TUFSQU5IQU86T2xobyBEYWd1YSBELiBDLgorNzc6QlI6QlJBOkJSQVNJTDpNQVJBTkhBTzpQYWNvIGRvIEx1bWlhcgorNzg6QlI6QlJBOkJSQVNJTDpNQVJBTkhBTzpQYWxtZWlyYW5kaWEKKzc5OkJSOkJSQTpCUkFTSUw6TUFSQU5IQU86UGFyYWliYW5vCis4MDpCUjpCUkE6QlJBU0lMOk1BUkFOSEFPOlBhcm5hcmFtYQorODE6QlI6QlJBOkJSQVNJTDpNQVJBTkhBTzpQYXNzYWdlbSBGcmFuY2EKKzgyOkJSOkJSQTpCUkFTSUw6TUFSQU5IQU86UGFzdG9zIEJvbnMKKzgzOkJSOkJSQTpCUkFTSUw6TUFSQU5IQU86UGVkcmVpcmFzCis4NDpCUjpCUkE6QlJBU0lMOk1BUkFOSEFPOlBlbmFsdmEKKzg1OkJSOkJSQTpCUkFTSUw6TUFSQU5IQU86UGVyaS1NaXJpbQorODY6QlI6QlJBOkJSQVNJTDpNQVJBTkhBTzpQaW5kYXJlLU1pcmltCis4NzpCUjpCUkE6QlJBU0lMOk1BUkFOSEFPOlBpbmhlaXJvCis4ODpCUjpCUkE6QlJBU0lMOk1BUkFOSEFPOlBpbyBYSUkKKzg5OkJSOkJSQTpCUkFTSUw6TUFSQU5IQU86UGlyYXBlbWFzCis5MDpCUjpCUkE6QlJBU0lMOk1BUkFOSEFPOlBvY2FvIGRlIFBlZHJhcworOTE6QlI6QlJBOkJSQVNJTDpNQVJBTkhBTzpQb3J0byBGcmFuY28KKzkyOkJSOkJSQTpCUkFTSUw6TUFSQU5IQU86UHJlcy4gSnVzY2VsaW5vCis5MzpCUjpCUkE6QlJBU0lMOk1BUkFOSEFPOlByZXMuIFZhcmdhcworOTQ6QlI6QlJBOkJSQVNJTDpNQVJBTkhBTzpQcmVzaWRlbnRlIER1dHJhCis5NTpCUjpCUkE6QlJBU0lMOk1BUkFOSEFPOlByaW1laXJhIENydXoKKzk2OkJSOkJSQTpCUkFTSUw6TUFSQU5IQU86UmlhY2hhbworOTc6QlI6QlJBOkJSQVNJTDpNQVJBTkhBTzpSb3NhcmlvCis5ODpCUjpCUkE6QlJBU0lMOk1BUkFOSEFPOlMuIEJlbmVkaXRvIFIuUAorOTk6QlI6QlJBOkJSQVNJTDpNQVJBTkhBTzpTLiBCZXJuYXJkbworMTAwOkJSOkJSQTpCUkFTSUw6TUFSQU5IQU86Uy4gRG9taW5nbyBEbyBNLgorMTAxOkJSOkJSQTpCUkFTSUw6TUFSQU5IQU86Uy4gRmNvIERvIE1hLgorMTAyOkJSOkJSQTpCUkFTSUw6TUFSQU5IQU86Uy4gRmVsaXggZGUgQgorMTAzOkJSOkJSQTpCUkFTSUw6TUFSQU5IQU86Uy4gSi4gRG9zIFAuCisxMDQ6QlI6QlJBOkJSQVNJTDpNQVJBTkhBTzpTLiBKLiBkZSBSaWJhbWFyCisxMDU6QlI6QlJBOkJSQVNJTDpNQVJBTkhBTzpTLiBMdXppYQorMTA2OkJSOkJSQTpCUkFTSUw6TUFSQU5IQU86Uy4gUmFpbXVuZG8gRC5NCisxMDc6QlI6QlJBOkJSQVNJTDpNQVJBTkhBTzpTLlEuIERvIE1hcmFuaGFvCisxMDg6QlI6QlJBOkJSQVNJTDpNQVJBTkhBTzpTYW1iYWliYQorMTA5OkJSOkJSQTpCUkFTSUw6TUFSQU5IQU86U2FudGEgSGVsZW5hCisxMTA6QlI6QlJBOkJSQVNJTDpNQVJBTkhBTzpTYW50YSBJbmVzCisxMTE6QlI6QlJBOkJSQVNJTDpNQVJBTkhBTzpTYW50YSBSaXRhCisxMTI6QlI6QlJBOkJSQVNJTDpNQVJBTkhBTzpTYW8gQW50b25pbyBMLgorMTEzOkJSOkJSQTpCUkFTSUw6TUFSQU5IQU86U2FvIEJlbnRvCisxMTQ6QlI6QlJBOkJSQVNJTDpNQVJBTkhBTzpTYW8gSm9hbyBCYXRpc3RhCisxMTU6QlI6QlJBOkJSQVNJTDpNQVJBTkhBTzpTYW8gTHVpcworMTE2OkJSOkJSQTpCUkFTSUw6TUFSQU5IQU86U2FvIE1hdGV1cyBkbyBNYQorMTE3OkJSOkJSQTpCUkFTSUw6TUFSQU5IQU86U2FvIFZpY2VudGUgRi4KKzExODpCUjpCUkE6QlJBU0lMOk1BUkFOSEFPOlNpdGlvIE5vdm8KKzExOTpCUjpCUkE6QlJBU0lMOk1BUkFOSEFPOlN1Y3VwaXJhIERvIE50ZQorMTIwOkJSOkJSQTpCUkFTSUw6TUFSQU5IQU86VGFzc28gRnJhZ29zbworMTIxOkJSOkJSQTpCUkFTSUw6TUFSQU5IQU86VGltYmlyYXMKKzEyMjpCUjpCUkE6QlJBU0lMOk1BUkFOSEFPOlRpbW9uCisxMjM6QlI6QlJBOkJSQVNJTDpNQVJBTkhBTzpUdW50dW0KKzEyNDpCUjpCUkE6QlJBU0lMOk1BUkFOSEFPOlR1cmlhY3UKKzEyNTpCUjpCUkE6QlJBU0lMOk1BUkFOSEFPOlR1dG9pYQorMTI2OkJSOkJSQTpCUkFTSUw6TUFSQU5IQU86VXJiYW5vIFNhbnRvcworMTI3OkJSOkJSQTpCUkFTSUw6TUFSQU5IQU86VmFyZ2VtIEdyYW5kZQorMTI4OkJSOkJSQTpCUkFTSUw6TUFSQU5IQU86VmlhbmEKKzEyOTpCUjpCUkE6QlJBU0lMOk1BUkFOSEFPOlZpY3RvcmlhIERvIE0uCisxMzA6QlI6QlJBOkJSQVNJTDpNQVJBTkhBTzpWaWN0b3Jpbm8gRnJlaXJlCisxOkJSOkJSQTpCUkFTSUw6U0FPIFBBVUxPOkFkYW1hbnRpbmEKKzI6QlI6QlJBOkJSQVNJTDpTQU8gUEFVTE86QWRvbGZvCiszOkJSOkJSQTpCUkFTSUw6U0FPIFBBVUxPOkFndWFpCis0OkJSOkJSQTpCUkFTSUw6U0FPIFBBVUxPOkFndWFzIERhIFByYXRhCis1OkJSOkJSQTpCUkFTSUw6U0FPIFBBVUxPOkFndWFzIERlIExpbmRvaWEKKzY6QlI6QlJBOkJSQVNJTDpTQU8gUEFVTE86QWd1YXMgRGUgU2FvIFBlZAorNzpCUjpCUkE6QlJBU0lMOlNBTyBQQVVMTzpBZ3Vkb3MKKzg6QlI6QlJBOkJSQVNJTDpTQU8gUEFVTE86QWxmcmVkbyBNYXJjb25kZQorOTpCUjpCUkE6QlJBU0lMOlNBTyBQQVVMTzpBbHRhaXIKKzEwOkJSOkJSQTpCUkFTSUw6U0FPIFBBVUxPOkFsdGlub3BvbGlzCisxMTpCUjpCUkE6QlJBU0lMOlNBTyBQQVVMTzpBbHRvIEFsZWdyZQorMTI6QlI6QlJBOkJSQVNJTDpTQU8gUEFVTE86QWx2YXJlcyBGbG9yZW5jZQorMTM6QlI6QlJBOkJSQVNJTDpTQU8gUEFVTE86QWx2YXJlcyBNYWNoYWRvCisxNDpCUjpCUkE6QlJBU0lMOlNBTyBQQVVMTzpBbHZhcm8gRGUgQ2FydmFsCisxNTpCUjpCUkE6QlJBU0lMOlNBTyBQQVVMTzpBbHZpbmxhbmRpYQorMTY6QlI6QlJBOkJSQVNJTDpTQU8gUEFVTE86QW1lcmljYW5hCisxNzpCUjpCUkE6QlJBU0lMOlNBTyBQQVVMTzpBbWVyaWNvIEJyYXNpbGllCisxODpCUjpCUkE6QlJBU0lMOlNBTyBQQVVMTzpBbWVyaWNvIERlIENhbXBvCisxOTpCUjpCUkE6QlJBU0lMOlNBTyBQQVVMTzpBbXBhcm8KKzIwOkJSOkJSQTpCUkFTSUw6U0FPIFBBVUxPOkFuYWxhbmRpYQorMjE6QlI6QlJBOkJSQVNJTDpTQU8gUEFVTE86QW5kcmFkaW5hCisyMjpCUjpCUkE6QlJBU0lMOlNBTyBQQVVMTzpBbmdhdHViYQorMjM6QlI6QlJBOkJSQVNJTDpTQU8gUEFVTE86QW5oZW1iaQorMjQ6QlI6QlJBOkJSQVNJTDpTQU8gUEFVTE86QW5odW1hcworMjU6QlI6QlJBOkJSQVNJTDpTQU8gUEFVTE86QXBhcmVjaWRhCisyNjpCUjpCUkE6QlJBU0lMOlNBTyBQQVVMTzpBcGFyZWNpZGEgRCdPZXN0CisyNzpCUjpCUkE6QlJBU0lMOlNBTyBQQVVMTzpBcGlhaQorMjg6QlI6QlJBOkJSQVNJTDpTQU8gUEFVTE86QXF1ZXJhCisyOTpCUjpCUkE6QlJBU0lMOlNBTyBQQVVMTzpBcmFjYXR1YmEKKzMwOkJSOkJSQTpCUkFTSUw6U0FPIFBBVUxPOkFyYWNvaWFiYSBEYSBTZXIKKzMxOkJSOkJSQTpCUkFTSUw6U0FPIFBBVUxPOkFyYW1pbmEKKzMyOkJSOkJSQTpCUkFTSUw6U0FPIFBBVUxPOkFyYW5kdQorMzM6QlI6QlJBOkJSQVNJTDpTQU8gUEFVTE86QXJhcmFxdWFyYQorMzQ6QlI6QlJBOkJSQVNJTDpTQU8gUEFVTE86QXJhcmFzCiszNTpCUjpCUkE6QlJBU0lMOlNBTyBQQVVMTzpBcmVhbHZhCiszNjpCUjpCUkE6QlJBU0lMOlNBTyBQQVVMTzpBcmVpYXMKKzM3OkJSOkJSQTpCUkFTSUw6U0FPIFBBVUxPOkFyZWlvcG9saXMKKzM4OkJSOkJSQTpCUkFTSUw6U0FPIFBBVUxPOkFyaXJhbmhhCiszOTpCUjpCUkE6QlJBU0lMOlNBTyBQQVVMTzpBcnR1ciBOb2d1ZWlyYQorNDA6QlI6QlJBOkJSQVNJTDpTQU8gUEFVTE86QXJ1amEKKzQxOkJSOkJSQTpCUkFTSUw6U0FPIFBBVUxPOkFzc2lzCis0MjpCUjpCUkE6QlJBU0lMOlNBTyBQQVVMTzpBdGliYWlhCis0MzpCUjpCUkE6QlJBU0lMOlNBTyBQQVVMTzpBdXJpZmxhbWEKKzQ0OkJSOkJSQTpCUkFTSUw6U0FPIFBBVUxPOkF2YWkKKzQ1OkJSOkJSQTpCUkFTSUw6U0FPIFBBVUxPOkF2YW5oYW5kYXZhCis0NjpCUjpCUkE6QlJBU0lMOlNBTyBQQVVMTzpBdmFyZQorNDc6QlI6QlJBOkJSQVNJTDpTQU8gUEFVTE86QmFkeSBCYXNzaXQKKzQ4OkJSOkJSQTpCUkFTSUw6U0FPIFBBVUxPOkJhbGJpbm9zCis0OTpCUjpCUkE6QlJBU0lMOlNBTyBQQVVMTzpCYWxzYW1vCis1MDpCUjpCUkE6QlJBU0lMOlNBTyBQQVVMTzpCYW5hbmFsCis1MTpCUjpCUkE6QlJBU0lMOlNBTyBQQVVMTzpCYXJhbyBEZSBBbnRvbmluCis1MjpCUjpCUkE6QlJBU0lMOlNBTyBQQVVMTzpCYXJib3NhCis1MzpCUjpCUkE6QlJBU0lMOlNBTyBQQVVMTzpCYXJpcmkKKzU0OkJSOkJSQTpCUkFTSUw6U0FPIFBBVUxPOkJhcnJhIEJvbml0YQorNTU6QlI6QlJBOkJSQVNJTDpTQU8gUEFVTE86QmFycmEgRG8gVHVydm8KKzU2OkJSOkJSQTpCUkFTSUw6U0FPIFBBVUxPOkJhcnJldG9zCis1NzpCUjpCUkE6QlJBU0lMOlNBTyBQQVVMTzpCYXJyaW5oYQorNTg6QlI6QlJBOkJSQVNJTDpTQU8gUEFVTE86QmFydWVyaQorNTk6QlI6QlJBOkJSQVNJTDpTQU8gUEFVTE86QmFzdG9zCis2MDpCUjpCUkE6QlJBU0lMOlNBTyBQQVVMTzpCYXRhdGFpcworNjE6QlI6QlJBOkJSQVNJTDpTQU8gUEFVTE86QmF1cnUKKzYyOkJSOkJSQTpCUkFTSUw6U0FPIFBBVUxPOkJlYmVkb3VybworNjM6QlI6QlJBOkJSQVNJTDpTQU8gUEFVTE86QmVybi4gRGUgQ2FtcG9zCis2NDpCUjpCUkE6QlJBU0lMOlNBTyBQQVVMTzpCZXJ0byBEZSBBYnJldQorNjU6QlI6QlJBOkJSQVNJTDpTQU8gUEFVTE86QmlsYWMKKzY2OkJSOkJSQTpCUkFTSUw6U0FPIFBBVUxPOkJpcmlndWkKKzY3OkJSOkJSQTpCUkFTSUw6U0FPIFBBVUxPOkJpcml0aWJhIE1pcmltCis2ODpCUjpCUkE6QlJBU0lMOlNBTyBQQVVMTzpCb2EgRXNwZXJhbmNhIERvCis2OTpCUjpCUkE6QlJBU0lMOlNBTyBQQVVMTzpCb2NhaW5hCis3MDpCUjpCUkE6QlJBU0lMOlNBTyBQQVVMTzpCb2ZldGUKKzcxOkJSOkJSQTpCUkFTSUw6U0FPIFBBVUxPOkJvaXR1dmEKKzcyOkJSOkJSQTpCUkFTSUw6U0FPIFBBVUxPOkJvbiBKZXN1cyBEb3MgUGUKKzczOkJSOkJSQTpCUkFTSUw6U0FPIFBBVUxPOkJvcmEKKzc0OkJSOkJSQTpCUkFTSUw6U0FPIFBBVUxPOkJvcmFjZWxhCis3NTpCUjpCUkE6QlJBU0lMOlNBTyBQQVVMTzpCb3Jib3JlbWEKKzc2OkJSOkJSQTpCUkFTSUw6U0FPIFBBVUxPOkJvdHVjYXR1Cis3NzpCUjpCUkE6QlJBU0lMOlNBTyBQQVVMTzpCcmFnYW5jYSBQYXVsaXN0Cis3ODpCUjpCUkE6QlJBU0lMOlNBTyBQQVVMTzpCcmF1bmEKKzc5OkJSOkJSQTpCUkFTSUw6U0FPIFBBVUxPOkJyb2Rvc3F1aQorODA6QlI6QlJBOkJSQVNJTDpTQU8gUEFVTE86QnJvdGFzCis4MTpCUjpCUkE6QlJBU0lMOlNBTyBQQVVMTzpCdXJpCis4MjpCUjpCUkE6QlJBU0lMOlNBTyBQQVVMTzpCdXJpdGFtYQorODM6QlI6QlJBOkJSQVNJTDpTQU8gUEFVTE86QnVyaXRpemFsCis4NDpCUjpCUkE6QlJBU0lMOlNBTyBQQVVMTzpDYWJyYWxpYSBQYXVsaXN0Cis4NTpCUjpCUkE6QlJBU0lMOlNBTyBQQVVMTzpDYWJyZXV2YQorODY6QlI6QlJBOkJSQVNJTDpTQU8gUEFVTE86Q2FjYXBhdmEKKzg3OkJSOkJSQTpCUkFTSUw6U0FPIFBBVUxPOkNhY2hvZWlyYSBQYXVsaXMKKzg4OkJSOkJSQTpCUkFTSUw6U0FPIFBBVUxPOkNhZmVsYW5kaWEKKzg5OkJSOkJSQTpCUkFTSUw6U0FPIFBBVUxPOkNhaWFidQorOTA6QlI6QlJBOkJSQVNJTDpTQU8gUEFVTE86Q2FpZWlyYXMKKzkxOkJSOkJSQTpCUkFTSUw6U0FPIFBBVUxPOkNhaXVhCis5MjpCUjpCUkE6QlJBU0lMOlNBTyBQQVVMTzpDYWphbWFyCis5MzpCUjpCUkE6QlJBU0lMOlNBTyBQQVVMTzpDYWpvYmkKKzk0OkJSOkJSQTpCUkFTSUw6U0FPIFBBVUxPOkNhanVydQorOTU6QlI6QlJBOkJSQVNJTDpTQU8gUEFVTE86Q2FtcGluYXMKKzk2OkJSOkJSQTpCUkFTSUw6U0FPIFBBVUxPOkNhbXBvIERvIEpvcmRhbworOTc6QlI6QlJBOkJSQVNJTDpTQU8gUEFVTE86Q2FtcG8gTGltcG8KKzk4OkJSOkJSQTpCUkFTSUw6U0FPIFBBVUxPOkNhbXBvcyBOb3ZvcyBQYXUKKzk5OkJSOkJSQTpCUkFTSUw6U0FPIFBBVUxPOkNhbmFuZWlhCisxMDA6QlI6QlJBOkJSQVNJTDpTQU8gUEFVTE86Q2FuZGlkbyBNb3RhCisxMDE6QlI6QlJBOkJSQVNJTDpTQU8gUEFVTE86Q2FuZGlkbyBSb2RyaWd1ZQorMTAyOkJSOkJSQTpCUkFTSUw6U0FPIFBBVUxPOkNhcGFvIEJvbml0bworMTAzOkJSOkJSQTpCUkFTSUw6U0FPIFBBVUxPOkNhcGVsYSBEbyBBbHRvCisxMDQ6QlI6QlJBOkJSQVNJTDpTQU8gUEFVTE86Q2FwaXZhcmkKKzEwNTpCUjpCUkE6QlJBU0lMOlNBTyBQQVVMTzpDYXJhZ3VhdGF0dWJhCisxMDY6QlI6QlJBOkJSQVNJTDpTQU8gUEFVTE86Q2FyYXBpY3VpYmEKKzEwNzpCUjpCUkE6QlJBU0lMOlNBTyBQQVVMTzpDYXJkb3NvCisxMDg6QlI6QlJBOkJSQVNJTDpTQU8gUEFVTE86Q2FzYSBCcmFuY2EKKzEwOTpCUjpCUkE6QlJBU0lMOlNBTyBQQVVMTzpDYXNzaWEgRG9zIENvcXVlCisxMTA6QlI6QlJBOkJSQVNJTDpTQU8gUEFVTE86Q2FzdGlsaG8KKzExMTpCUjpCUkE6QlJBU0lMOlNBTyBQQVVMTzpDYXRhbmR1dmEKKzExMjpCUjpCUkE6QlJBU0lMOlNBTyBQQVVMTzpDYXRpbmd1YQorMTEzOkJSOkJSQTpCUkFTSUw6U0FPIFBBVUxPOkNlZHJhbAorMTE0OkJSOkJSQTpCUkFTSUw6U0FPIFBBVUxPOkNlcnF1ZWlyYSBDZXNhcgorMTE1OkJSOkJSQTpCUkFTSUw6U0FPIFBBVUxPOkNlcnF1aWxobworMTE2OkJSOkJSQTpCUkFTSUw6U0FPIFBBVUxPOkNlc2FyaW8gTGFuZ2UKKzExNzpCUjpCUkE6QlJBU0lMOlNBTyBQQVVMTzpDaGFycXVlYWRhCisxMTg6QlI6QlJBOkJSQVNJTDpTQU8gUEFVTE86Q2hhdmFudGVzCisxMTk6QlI6QlJBOkJSQVNJTDpTQU8gUEFVTE86Q2xlbWVudGluYQorMTIwOkJSOkJSQTpCUkFTSUw6U0FPIFBBVUxPOkNvbGluYQorMTIxOkJSOkJSQTpCUkFTSUw6U0FPIFBBVUxPOkNvbG9tYmlhCisxMjI6QlI6QlJBOkJSQVNJTDpTQU8gUEFVTE86Q29uY2hhbAorMTIzOkJSOkJSQTpCUkFTSUw6U0FPIFBBVUxPOkNvbmNoYXMKKzEyNDpCUjpCUkE6QlJBU0lMOlNBTyBQQVVMTzpDb3JkZWlyb3BvbGlzCisxMjU6QlI6QlJBOkJSQVNJTDpTQU8gUEFVTE86Q29yb2Fkb3MKKzEyNjpCUjpCUkE6QlJBU0lMOlNBTyBQQVVMTzpDb3JvbmVsIE1hY2VkbworMTI3OkJSOkJSQTpCUkFTSUw6U0FPIFBBVUxPOkNvcnVtYmF0YWkKKzEyODpCUjpCUkE6QlJBU0lMOlNBTyBQQVVMTzpDb3Ntb3BvbGlzCisxMjk6QlI6QlJBOkJSQVNJTDpTQU8gUEFVTE86Q29zbW9yYW1hCisxMzA6QlI6QlJBOkJSQVNJTDpTQU8gUEFVTE86Q290aWEKKzEzMTpCUjpCUkE6QlJBU0lMOlNBTyBQQVVMTzpDcmF2aW5ob3MKKzEzMjpCUjpCUkE6QlJBU0lMOlNBTyBQQVVMTzpDcmlzdGFpcyBQYXVsLgorMTMzOkJSOkJSQTpCUkFTSUw6U0FPIFBBVUxPOkNydXphbGlhCisxMzQ6QlI6QlJBOkJSQVNJTDpTQU8gUEFVTE86Q3J1emVpcm8KKzEzNTpCUjpCUkE6QlJBU0lMOlNBTyBQQVVMTzpDdWJhdGFvCisxMzY6QlI6QlJBOkJSQVNJTDpTQU8gUEFVTE86Q3VuaGEKKzEzNzpCUjpCUkE6QlJBU0lMOlNBTyBQQVVMTzpEZXNjYWx2YWRvCisxMzg6QlI6QlJBOkJSQVNJTDpTQU8gUEFVTE86RGlhZGVtYQorMTM5OkJSOkJSQTpCUkFTSUw6U0FPIFBBVUxPOkRpb3MgQ29ycmVnb3MKKzE0MDpCUjpCUkE6QlJBU0lMOlNBTyBQQVVMTzpEaXZpbm9sYW5kaWEKKzE0MTpCUjpCUkE6QlJBU0lMOlNBTyBQQVVMTzpEb2JyYWRhCisxNDI6QlI6QlJBOkJSQVNJTDpTQU8gUEFVTE86RG91cmFkbworMTQzOkJSOkJSQTpCUkFTSUw6U0FPIFBBVUxPOkRyYWNlbmEKKzE0NDpCUjpCUkE6QlJBU0lMOlNBTyBQQVVMTzpEdWFydGluYQorMTQ1OkJSOkJSQTpCUkFTSUw6U0FPIFBBVUxPOkR1bGNpbm9wb2xpcworMTQ2OkJSOkJSQTpCUkFTSUw6U0FPIFBBVUxPOkR1bW9udAorMTQ3OkJSOkJSQTpCUkFTSUw6U0FPIFBBVUxPOkVjaGFwb3JhCisxNDg6QlI6QlJBOkJSQVNJTDpTQU8gUEFVTE86RWwgRG9yYWRvCisxNDk6QlI6QlJBOkJSQVNJTDpTQU8gUEFVTE86RWxpYXMgRmF1c3RvCisxNTA6QlI6QlJBOkJSQVNJTDpTQU8gUEFVTE86RW1idQorMTUxOkJSOkJSQTpCUkFTSUw6U0FPIFBBVUxPOkVtYnUgR3VhY3UKKzE1MjpCUjpCUkE6QlJBU0lMOlNBTyBQQVVMTzpFc3RyZWxhIEQnT2VzdGUKKzE1MzpCUjpCUkE6QlJBU0lMOlNBTyBQQVVMTzpFc3RyZWxhIGRvIG5vcnRlCisxNTQ6QlI6QlJBOkJSQVNJTDpTQU8gUEFVTE86RmFydHVyYQorMTU1OkJSOkJSQTpCUkFTSUw6U0FPIFBBVUxPOkZlcm5hbmRvIFByZXN0ZXMKKzE1NjpCUjpCUkE6QlJBU0lMOlNBTyBQQVVMTzpGZXJuYW5kb3BvbGlzCisxNTc6QlI6QlJBOkJSQVNJTDpTQU8gUEFVTE86RmVycmF6IGRlIFZhc2NvbgorMTU4OkJSOkJSQTpCUkFTSUw6U0FPIFBBVUxPOkZsb3JhIFJpY2EKKzE1OTpCUjpCUkE6QlJBU0lMOlNBTyBQQVVMTzpGbG9yZWFsCisxNjA6QlI6QlJBOkJSQVNJTDpTQU8gUEFVTE86RmxvcmlkYSBQYXVsaXN0YQorMTYxOkJSOkJSQTpCUkFTSUw6U0FPIFBBVUxPOkZyYW5jYQorMTYyOkJSOkJSQTpCUkFTSUw6U0FPIFBBVUxPOkZyYW5jaXNjbyBNb3JhdG8KKzE2MzpCUjpCUkE6QlJBU0lMOlNBTyBQQVVMTzpGcmFuY28gRGEgUm9jaGEKKzE2NDpCUjpCUkE6QlJBU0lMOlNBTyBQQVVMTzpHYWxhaQorMTY1OkJSOkJSQTpCUkFTSUw6U0FPIFBBVUxPOkdhcmNhCisxNjY6QlI6QlJBOkJSQVNJTDpTQU8gUEFVTE86R2FzdGFvIFZpZGlnYWwKKzE2NzpCUjpCUkE6QlJBU0lMOlNBTyBQQVVMTzpHZW5lcmFsIFNhbGdhZG8KKzE2ODpCUjpCUkE6QlJBU0lMOlNBTyBQQVVMTzpHZXR1bGluYQorMTY5OkJSOkJSQTpCUkFTSUw6U0FPIFBBVUxPOkdsaWNlcmlvCisxNzA6QlI6QlJBOkJSQVNJTDpTQU8gUEFVTE86R3VhaWNhcmEKKzE3MTpCUjpCUkE6QlJBU0lMOlNBTyBQQVVMTzpHdWFpbWJlCisxNzI6QlI6QlJBOkJSQVNJTDpTQU8gUEFVTE86R3VhaXJhCisxNzM6QlI6QlJBOkJSQVNJTDpTQU8gUEFVTE86R3VhcGlhcmEKKzE3NDpCUjpCUkE6QlJBU0lMOlNBTyBQQVVMTzpHdWFyYQorMTc1OkJSOkJSQTpCUkFTSUw6U0FPIFBBVUxPOkd1YXJhY2FpCisxNzY6QlI6QlJBOkJSQVNJTDpTQU8gUEFVTE86R3VhcmFjaQorMTc3OkJSOkJSQTpCUkFTSUw6U0FPIFBBVUxPOkd1YXJhbmkgZCJPZXN0ZQorMTc4OkJSOkJSQTpCUkFTSUw6U0FPIFBBVUxPOkd1YXJhbnRhCisxNzk6QlI6QlJBOkJSQVNJTDpTQU8gUEFVTE86R3VhcmFudGluZ3VldGEKKzE4MDpCUjpCUkE6QlJBU0lMOlNBTyBQQVVMTzpHdWFyYXJhcGVzCisxODE6QlI6QlJBOkJSQVNJTDpTQU8gUEFVTE86R3VhcmFyZW1hCisxODI6QlI6QlJBOkJSQVNJTDpTQU8gUEFVTE86R3VhcmVpCisxODM6QlI6QlJBOkJSQVNJTDpTQU8gUEFVTE86R3VhcmliYQorMTg0OkJSOkJSQTpCUkFTSUw6U0FPIFBBVUxPOkd1YXJ1amEKKzE4NTpCUjpCUkE6QlJBU0lMOlNBTyBQQVVMTzpHdWFydWxob3MKKzE4NjpCUjpCUkE6QlJBU0lMOlNBTyBQQVVMTzpHdXpvbGFuZGlhCisxODc6QlI6QlJBOkJSQVNJTDpTQU8gUEFVTE86SGVyY3VsYW5kaWEKKzE4ODpCUjpCUkE6QlJBU0lMOlNBTyBQQVVMTzpJYWNhbmdhCisxODk6QlI6QlJBOkJSQVNJTDpTQU8gUEFVTE86SWFjcmkKKzE5MDpCUjpCUkE6QlJBU0lMOlNBTyBQQVVMTzpJYmF0ZQorMTkxOkJSOkJSQTpCUkFTSUw6U0FPIFBBVUxPOkliaXJhCisxOTI6QlI6QlJBOkJSQVNJTDpTQU8gUEFVTE86SWJpcmFyZW1hCisxOTM6QlI6QlJBOkJSQVNJTDpTQU8gUEFVTE86SWJpdGluZ2EKKzE5NDpCUjpCUkE6QlJBU0lMOlNBTyBQQVVMTzpJYnVpbmEKKzE5NTpCUjpCUkE6QlJBU0lMOlNBTyBQQVVMTzpJY2VtCisxOTY6QlI6QlJBOkJSQVNJTDpTQU8gUEFVTE86SWVwZQorMTk3OkJSOkJSQTpCUkFTSUw6U0FPIFBBVUxPOklnYXJhY2EgRG8gVGlldGUKKzE5ODpCUjpCUkE6QlJBU0lMOlNBTyBQQVVMTzpJZ2FyYXBhdmEKKzE5OTpCUjpCUkE6QlJBU0lMOlNBTyBQQVVMTzpJZ2FyYXRhCisyMDA6QlI6QlJBOkJSQVNJTDpTQU8gUEFVTE86SWd1YXBlCisyMDE6QlI6QlJBOkJSQVNJTDpTQU8gUEFVTE86SWxoYWJlbGEKKzIwMjpCUjpCUkE6QlJBU0lMOlNBTyBQQVVMTzpJbmRhaWF0dWJhCisyMDM6QlI6QlJBOkJSQVNJTDpTQU8gUEFVTE86SW5kaWFuYQorMjA0OkJSOkJSQTpCUkFTSUw6U0FPIFBBVUxPOkluZGlhcG9yYQorMjA1OkJSOkJSQTpCUkFTSUw6U0FPIFBBVUxPOkludWJpYSBQYXVsaXN0YQorMjA2OkJSOkJSQTpCUkFTSUw6U0FPIFBBVUxPOklwYXVjdQorMjA3OkJSOkJSQTpCUkFTSUw6U0FPIFBBVUxPOklwZXJvCisyMDg6QlI6QlJBOkJSQVNJTDpTQU8gUEFVTE86SXBldW5hCisyMDk6QlI6QlJBOkJSQVNJTDpTQU8gUEFVTE86SXBvcmFuZ2EKKzIxMDpCUjpCUkE6QlJBU0lMOlNBTyBQQVVMTzpJcHVhCisyMTE6QlI6QlJBOkJSQVNJTDpTQU8gUEFVTE86SXJhY2VtYXBvbGlzCisyMTI6QlI6QlJBOkJSQVNJTDpTQU8gUEFVTE86SXJhcHVhCisyMTM6QlI6QlJBOkJSQVNJTDpTQU8gUEFVTE86SXJhcHVydQorMjE0OkJSOkJSQTpCUkFTSUw6U0FPIFBBVUxPOkl0YWJlcmEKKzIxNTpCUjpCUkE6QlJBU0lMOlNBTyBQQVVMTzpJdGFpCisyMTY6QlI6QlJBOkJSQVNJTDpTQU8gUEFVTE86SXRham9iaQorMjE3OkJSOkJSQTpCUkFTSUw6U0FPIFBBVUxPOkl0YWp1CisyMTg6QlI6QlJBOkJSQVNJTDpTQU8gUEFVTE86SXRhbmhhZW0KKzIxOTpCUjpCUkE6QlJBU0lMOlNBTyBQQVVMTzpJdGFwZWNlcmljYSBEYSBTCisyMjA6QlI6QlJBOkJSQVNJTDpTQU8gUEFVTE86SXRhcGV0aW5pbmdhCisyMjE6QlI6QlJBOkJSQVNJTDpTQU8gUEFVTE86SXRhcGV2YQorMjIyOkJSOkJSQTpCUkFTSUw6U0FPIFBBVUxPOkl0YXBldmkKKzIyMzpCUjpCUkE6QlJBU0lMOlNBTyBQQVVMTzpJdGFwb2xpcworMjI0OkJSOkJSQTpCUkFTSUw6U0FPIFBBVUxPOkl0YXBvcmFuZ2EKKzIyNTpCUjpCUkE6QlJBU0lMOlNBTyBQQVVMTzpJdGFwdWkKKzIyNjpCUjpCUkE6QlJBU0lMOlNBTyBQQVVMTzpJdGFwdXJhCisyMjc6QlI6QlJBOkJSQVNJTDpTQU8gUEFVTE86SXRhcXVhcXVlY2V0dWJhCisyMjg6QlI6QlJBOkJSQVNJTDpTQU8gUEFVTE86SXRhcmFyZQorMjI5OkJSOkJSQTpCUkFTSUw6U0FPIFBBVUxPOkl0YXJpcmkKKzIzMDpCUjpCUkE6QlJBU0lMOlNBTyBQQVVMTzpJdGF0aWJhCisyMzE6QlI6QlJBOkJSQVNJTDpTQU8gUEFVTE86SXRhdGluZ2EKKzIzMjpCUjpCUkE6QlJBU0lMOlNBTyBQQVVMTzpJdGlyYXBpbmEKKzIzMzpCUjpCUkE6QlJBU0lMOlNBTyBQQVVMTzpJdGlyYXB1YQorMjM0OkJSOkJSQTpCUkFTSUw6U0FPIFBBVUxPOkl0b2JpCisyMzU6QlI6QlJBOkJSQVNJTDpTQU8gUEFVTE86SXR1CisyMzY6QlI6QlJBOkJSQVNJTDpTQU8gUEFVTE86SXR1cGV2YQorMjM3OkJSOkJSQTpCUkFTSUw6U0FPIFBBVUxPOkl0dXZlcmF2YQorMjM4OkJSOkJSQTpCUkFTSUw6U0FPIFBBVUxPOkphYm9yYW5kaQorMjM5OkJSOkJSQTpCUkFTSUw6U0FPIFBBVUxPOkphYnV0aWNhYmFsCisyNDA6QlI6QlJBOkJSQVNJTDpTQU8gUEFVTE86SmFjYXJlaQorMjQxOkJSOkJSQTpCUkFTSUw6U0FPIFBBVUxPOkphY2kKKzI0MjpCUjpCUkE6QlJBU0lMOlNBTyBQQVVMTzpKYWN1cGlyYW5nYQorMjQzOkJSOkJSQTpCUkFTSUw6U0FPIFBBVUxPOkphZ3Vhcml1bmEKKzI0NDpCUjpCUkE6QlJBU0lMOlNBTyBQQVVMTzpKYWxlcworMjQ1OkJSOkJSQTpCUkFTSUw6U0FPIFBBVUxPOkphbWJlaXJvCisyNDY6QlI6QlJBOkJSQVNJTDpTQU8gUEFVTE86SmFuZGlyYQorMjQ3OkJSOkJSQTpCUkFTSUw6U0FPIFBBVUxPOkphcmFndWEKKzI0ODpCUjpCUkE6QlJBU0lMOlNBTyBQQVVMTzpKYXJkaW5vcG9saXMKKzI0OTpCUjpCUkE6QlJBU0lMOlNBTyBQQVVMTzpKYXJpbnUKKzI1MDpCUjpCUkE6QlJBU0lMOlNBTyBQQVVMTzpKYXUKKzI1MTpCUjpCUkE6QlJBU0lMOlNBTyBQQVVMTzpKZXJpcXVhcmEKKzI1MjpCUjpCUkE6QlJBU0lMOlNBTyBQQVVMTzpKb2Fub3BvbGlzCisyNTM6QlI6QlJBOkJSQVNJTDpTQU8gUEFVTE86Sm9hbyBSYW1hbGhvCisyNTQ6QlI6QlJBOkJSQVNJTDpTQU8gUEFVTE86Sm9zZSBCb25pZmFjaW8KKzI1NTpCUjpCUkE6QlJBU0lMOlNBTyBQQVVMTzpKdWxpbyBNZXNxdWl0YQorMjU2OkJSOkJSQTpCUkFTSUw6U0FPIFBBVUxPOkp1bmRpYWkKKzI1NzpCUjpCUkE6QlJBU0lMOlNBTyBQQVVMTzpKdW5xdWVpcm9wb2xpcworMjU4OkJSOkJSQTpCUkFTSUw6U0FPIFBBVUxPOkp1cXVpYQorMjU5OkJSOkJSQTpCUkFTSUw6U0FPIFBBVUxPOkp1cXVpdGliYQorMjYwOkJSOkJSQTpCUkFTSUw6U0FPIFBBVUxPOkxhZ29pbmhhCisyNjE6QlI6QlJBOkJSQVNJTDpTQU8gUEFVTE86TGFyYW5qYWwgUGF1bGlzdAorMjYyOkJSOkJSQTpCUkFTSUw6U0FPIFBBVUxPOkxhdmluaWEKKzI2MzpCUjpCUkE6QlJBU0lMOlNBTyBQQVVMTzpMYXZyaW5oYXMKKzI2NDpCUjpCUkE6QlJBU0lMOlNBTyBQQVVMTzpMZW1lCisyNjU6QlI6QlJBOkJSQVNJTDpTQU8gUEFVTE86TGVuY29pcyBQYXVsaXN0YQorMjY2OkJSOkJSQTpCUkFTSUw6U0FPIFBBVUxPOkxpbWVpcmEKKzI2NzpCUjpCUkE6QlJBU0lMOlNBTyBQQVVMTzpMaW5kb2lhCisyNjg6QlI6QlJBOkJSQVNJTDpTQU8gUEFVTE86TGlucworMjY5OkJSOkJSQTpCUkFTSUw6U0FPIFBBVUxPOkxvcmVuYQorMjcwOkJSOkJSQTpCUkFTSUw6U0FPIFBBVUxPOkxvdXZlaXJhCisyNzE6QlI6QlJBOkJSQVNJTDpTQU8gUEFVTE86THVjZWxpYQorMjcyOkJSOkJSQTpCUkFTSUw6U0FPIFBBVUxPOkx1Y2lhbm9wb2xpcworMjczOkJSOkJSQTpCUkFTSUw6U0FPIFBBVUxPOkx1aXMgQW50b25pbworMjc0OkJSOkJSQTpCUkFTSUw6U0FPIFBBVUxPOkx1aXNpYW5pYQorMjc1OkJSOkJSQTpCUkFTSUw6U0FPIFBBVUxPOkx1cGVyY2lvCisyNzY6QlI6QlJBOkJSQVNJTDpTQU8gUEFVTE86THV0ZWNpYQorMjc3OkJSOkJSQTpCUkFTSUw6U0FPIFBBVUxPOk1hY2F0dWJhCisyNzg6QlI6QlJBOkJSQVNJTDpTQU8gUEFVTE86TWFjYXViYWwKKzI3OTpCUjpCUkE6QlJBU0lMOlNBTyBQQVVMTzpNYWNlZG9uaWEKKzI4MDpCUjpCUkE6QlJBU0lMOlNBTyBQQVVMTzpNYWdkYQorMjgxOkJSOkJSQTpCUkFTSUw6U0FPIFBBVUxPOk1haXJpbnF1ZQorMjgyOkJSOkJSQTpCUkFTSUw6U0FPIFBBVUxPOk1haXJpcG9yYQorMjgzOkJSOkJSQTpCUkFTSUw6U0FPIFBBVUxPOk1hbmR1cmkKKzI4NDpCUjpCUkE6QlJBU0lMOlNBTyBQQVVMTzpNYXJhYmEgUGF1bGlzdGEKKzI4NTpCUjpCUkE6QlJBU0lMOlNBTyBQQVVMTzpNYXJhY2FpCisyODY6QlI6QlJBOkJSQVNJTDpTQU8gUEFVTE86TWFyaWFwb2xpcworMjg3OkJSOkJSQTpCUkFTSUw6U0FPIFBBVUxPOk1hcmlsaWEKKzI4ODpCUjpCUkE6QlJBU0lMOlNBTyBQQVVMTzpNYXJpbm9wb2xpcworMjg5OkJSOkJSQTpCUkFTSUw6U0FPIFBBVUxPOk1hcnRpbm9wb2xpcworMjkwOkJSOkJSQTpCUkFTSUw6U0FPIFBBVUxPOk1hdGFvCisyOTE6QlI6QlJBOkJSQVNJTDpTQU8gUEFVTE86TWF1YQorMjkyOkJSOkJSQTpCUkFTSUw6U0FPIFBBVUxPOk1lbmRvbmNhCisyOTM6QlI6QlJBOkJSQVNJTDpTQU8gUEFVTE86TWVyaWRpYW5vCisyOTQ6QlI6QlJBOkJSQVNJTDpTQU8gUEFVTE86TWlndWVsb3BvbGlzCisyOTU6QlI6QlJBOkJSQVNJTDpTQU8gUEFVTE86TWluZWlyb3MgZG8gVGlldAorMjk2OkJSOkJSQTpCUkFTSUw6U0FPIFBBVUxPOk1pcmEgRXN0cmVsYQorMjk3OkJSOkJSQTpCUkFTSUw6U0FPIFBBVUxPOk1pcmFjYXR1CisyOTg6QlI6QlJBOkJSQVNJTDpTQU8gUEFVTE86TWlyYW5kb3BvbGlzCisyOTk6QlI6QlJBOkJSQVNJTDpTQU8gUEFVTE86TWlyYW50ZSBEbyBQYXJhbgorMzAwOkJSOkJSQTpCUkFTSUw6U0FPIFBBVUxPOk1pcmFzc29sCiszMDE6QlI6QlJBOkJSQVNJTDpTQU8gUEFVTE86TWlyYXNzb2xhbmRpYQorMzAyOkJSOkJSQTpCUkFTSUw6U0FPIFBBVUxPOk1vY29jYQorMzAzOkJSOkJSQTpCUkFTSUw6U0FPIFBBVUxPOk1vZ2kgRGFzIENydXplcworMzA0OkJSOkJSQTpCUkFTSUw6U0FPIFBBVUxPOk1vZ2kgR3VhY3UKKzMwNTpCUjpCUkE6QlJBU0lMOlNBTyBQQVVMTzpNb2dpIE1pcmltCiszMDY6QlI6QlJBOkJSQVNJTDpTQU8gUEFVTE86TW9tYnVjYQorMzA3OkJSOkJSQTpCUkFTSUw6U0FPIFBBVUxPOk1vbmNvZXMKKzMwODpCUjpCUkE6QlJBU0lMOlNBTyBQQVVMTzpNb25nYWd1YQorMzA5OkJSOkJSQTpCUkFTSUw6U0FPIFBBVUxPOk1vbnRlIEFsdG8KKzMxMDpCUjpCUkE6QlJBU0lMOlNBTyBQQVVMTzpNb250ZSBBcHJheml2ZWwKKzMxMTpCUjpCUkE6QlJBU0lMOlNBTyBQQVVMTzpNb250ZSBBenVsIFBhdWxpCiszMTI6QlI6QlJBOkJSQVNJTDpTQU8gUEFVTE86TW9udGUgQ2FzdGVsbworMzEzOkJSOkJSQTpCUkFTSUw6U0FPIFBBVUxPOk1vbnRlaXJvCiszMTQ6QlI6QlJBOkJSQVNJTDpTQU8gUEFVTE86TW9udGVpcm8gTG9iYXRvCiszMTU6QlI6QlJBOkJSQVNJTDpTQU8gUEFVTE86TW9ycm8gQWd1ZG8KKzMxNjpCUjpCUkE6QlJBU0lMOlNBTyBQQVVMTzpNb3J1bmdhYmEKKzMxNzpCUjpCUkE6QlJBU0lMOlNBTyBQQVVMTzpNdGUgQWxlZ3JlIERvIFN1CiszMTg6QlI6QlJBOkJSQVNJTDpTQU8gUEFVTE86TXVydXRpbmdhIERvIFN1bAorMzE5OkJSOkJSQTpCUkFTSUw6U0FPIFBBVUxPOk5hcmFuZGliYQorMzIwOkJSOkJSQTpCUkFTSUw6U0FPIFBBVUxPOk5hdGl2aWRhZGUgRGEgU2UKKzMyMTpCUjpCUkE6QlJBU0lMOlNBTyBQQVVMTzpOYXphcmUgUGF1bGlzdGEKKzMyMjpCUjpCUkE6QlJBU0lMOlNBTyBQQVVMTzpOZXZlcyBQYXVsaXN0YQorMzIzOkJSOkJSQTpCUkFTSUw6U0FPIFBBVUxPOk5oYW5kZWFyYQorMzI0OkJSOkJSQTpCUkFTSUw6U0FPIFBBVUxPOk5pcG9hCiszMjU6QlI6QlJBOkJSQVNJTDpTQU8gUEFVTE86Tm92YSBBbGlhbmNhCiszMjY6QlI6QlJBOkJSQVNJTDpTQU8gUEFVTE86Tm92YSBFdXJvcGEKKzMyNzpCUjpCUkE6QlJBU0lMOlNBTyBQQVVMTzpOb3ZhIEdyYW5hZGEKKzMyODpCUjpCUkE6QlJBU0lMOlNBTyBQQVVMTzpOb3ZhIEd1YXRhcG9yYW5nCiszMjk6QlI6QlJBOkJSQVNJTDpTQU8gUEFVTE86Tm92YSBJbmRlcGVuZGVuYworMzMwOkJSOkJSQTpCUkFTSUw6U0FPIFBBVUxPOk5vdmEgTHV6aXRhbmlhCiszMzE6QlI6QlJBOkJSQVNJTDpTQU8gUEFVTE86Tm92YSBPZGVzc2EKKzMzMjpCUjpCUkE6QlJBU0lMOlNBTyBQQVVMTzpOb3ZvIEhvcml6b250ZQorMzMzOkJSOkJSQTpCUkFTSUw6U0FPIFBBVUxPOk51cG9yYW5nYQorMzM0OkJSOkJSQTpCUkFTSUw6U0FPIFBBVUxPOk9jYXVjdQorMzM1OkJSOkJSQTpCUkFTSUw6U0FPIFBBVUxPOk9sZW8KKzMzNjpCUjpCUkE6QlJBU0lMOlNBTyBQQVVMTzpPbGltcGlhCiszMzc6QlI6QlJBOkJSQVNJTDpTQU8gUEFVTE86T25kYSBWZXJkZQorMzM4OkJSOkJSQTpCUkFTSUw6U0FPIFBBVUxPOk9yaWVudGUKKzMzOTpCUjpCUkE6QlJBU0lMOlNBTyBQQVVMTzpPcmluZGl1dmEKKzM0MDpCUjpCUkE6QlJBU0lMOlNBTyBQQVVMTzpPcmxhbmRpYQorMzQxOkJSOkJSQTpCUkFTSUw6U0FPIFBBVUxPOk9zYXNjbworMzQyOkJSOkJSQTpCUkFTSUw6U0FPIFBBVUxPOk9zY2FyIEJyZXNzYW5lCiszNDM6QlI6QlJBOkJSQVNJTDpTQU8gUEFVTE86T3N2YWxkbyBDcnV6CiszNDQ6QlI6QlJBOkJSQVNJTDpTQU8gUEFVTE86T3VyaW5ob3MKKzM0NTpCUjpCUkE6QlJBU0lMOlNBTyBQQVVMTzpQYWNhZW1idQorMzQ2OkJSOkJSQTpCUkFTSUw6U0FPIFBBVUxPOlBhbGVzdGluYQorMzQ3OkJSOkJSQTpCUkFTSUw6U0FPIFBBVUxPOlBhbG1hcmVzIFBhdWxpc3QKKzM0ODpCUjpCUkE6QlJBU0lMOlNBTyBQQVVMTzpQYWxtZWlyYSBEJ09lc3RlCiszNDk6QlI6QlJBOkJSQVNJTDpTQU8gUEFVTE86UGFsbWl0YWwKKzM1MDpCUjpCUkE6QlJBU0lMOlNBTyBQQVVMTzpQYW5vcmFtYQorMzUxOkJSOkJSQTpCUkFTSUw6U0FPIFBBVUxPOlBhcmFndWFjdSBQYXVsaXMKKzM1MjpCUjpCUkE6QlJBU0lMOlNBTyBQQVVMTzpQYXJhaWJ1bmEKKzM1MzpCUjpCUkE6QlJBU0lMOlNBTyBQQVVMTzpQYXJhaXNvCiszNTQ6QlI6QlJBOkJSQVNJTDpTQU8gUEFVTE86UGFyYW5hcGFyZW1hCiszNTU6QlI6QlJBOkJSQVNJTDpTQU8gUEFVTE86UGFyYW5hcHVhCiszNTY6QlI6QlJBOkJSQVNJTDpTQU8gUEFVTE86UGFyYXB1YQorMzU3OkJSOkJSQTpCUkFTSUw6U0FPIFBBVUxPOlBhcmRpbmhvCiszNTg6QlI6QlJBOkJSQVNJTDpTQU8gUEFVTE86UGFyZWxoZWlyb3MKKzM1OTpCUjpCUkE6QlJBU0lMOlNBTyBQQVVMTzpQYXJpcXVlcmEtYWN1CiszNjA6QlI6QlJBOkJSQVNJTDpTQU8gUEFVTE86UGF0cm9jaW5pbyBQYXVsaQorMzYxOkJSOkJSQTpCUkFTSUw6U0FPIFBBVUxPOlBhdWxpY2VpYQorMzYyOkJSOkJSQTpCUkFTSUw6U0FPIFBBVUxPOlBhdWxpbmlhCiszNjM6QlI6QlJBOkJSQVNJTDpTQU8gUEFVTE86UGF1bG8gRGUgRmFyaWEKKzM2NDpCUjpCUkE6QlJBU0lMOlNBTyBQQVVMTzpQZWRlcm5laXJhcworMzY1OkJSOkJSQTpCUkFTSUw6U0FPIFBBVUxPOlBlZHJhIEJlbGEKKzM2NjpCUjpCUkE6QlJBU0lMOlNBTyBQQVVMTzpQZWRyYW5vcG9saXMKKzM2NzpCUjpCUkE6QlJBU0lMOlNBTyBQQVVMTzpQZWRyZWd1bGhvCiszNjg6QlI6QlJBOkJSQVNJTDpTQU8gUEFVTE86UGVkcmVpcmEKKzM2OTpCUjpCUkE6QlJBU0lMOlNBTyBQQVVMTzpQZWRybyBEZSBUb2xlZG8KKzM3MDpCUjpCUkE6QlJBU0lMOlNBTyBQQVVMTzpQZW5hcG9saXMKKzM3MTpCUjpCUkE6QlJBU0lMOlNBTyBQQVVMTzpQZXJlaXJhIEJhcnJldG8KKzM3MjpCUjpCUkE6QlJBU0lMOlNBTyBQQVVMTzpQZXJlaXJhcworMzczOkJSOkJSQTpCUkFTSUw6U0FPIFBBVUxPOlBlcnVpYmUKKzM3NDpCUjpCUkE6QlJBU0lMOlNBTyBQQVVMTzpQaWFjYXR1CiszNzU6QlI6QlJBOkJSQVNJTDpTQU8gUEFVTE86UGllZGFkZQorMzc2OkJSOkJSQTpCUkFTSUw6U0FPIFBBVUxPOlBpbGFyIERvIFN1bAorMzc3OkJSOkJSQTpCUkFTSUw6U0FPIFBBVUxPOlBpbmRhbW9uaGFuZ2FiYQorMzc4OkJSOkJSQTpCUkFTSUw6U0FPIFBBVUxPOlBpbmRvcmFtYQorMzc5OkJSOkJSQTpCUkFTSUw6U0FPIFBBVUxPOlBpbmhhbAorMzgwOkJSOkJSQTpCUkFTSUw6U0FPIFBBVUxPOlBpbmhhbHppbmhvCiszODE6QlI6QlJBOkJSQVNJTDpTQU8gUEFVTE86UGlxdWVyb2JpCiszODI6QlI6QlJBOkJSQVNJTDpTQU8gUEFVTE86UGlxdWV0ZQorMzgzOkJSOkJSQTpCUkFTSUw6U0FPIFBBVUxPOlBpcmFjYWlhCiszODQ6QlI6QlJBOkJSQVNJTDpTQU8gUEFVTE86UGlyYWNpY2FiYQorMzg1OkJSOkJSQTpCUkFTSUw6U0FPIFBBVUxPOlBpcmFjdW51bmdhCiszODY6QlI6QlJBOkJSQVNJTDpTQU8gUEFVTE86UGlyYWp1CiszODc6QlI6QlJBOkJSQVNJTDpTQU8gUEFVTE86UGlyYWp1aQorMzg4OkJSOkJSQTpCUkFTSUw6U0FPIFBBVUxPOlBpcmFuZ2kKKzM4OTpCUjpCUkE6QlJBU0lMOlNBTyBQQVVMTzpQaXJhcG9yYSBEbyBCb20KKzM5MDpCUjpCUkE6QlJBU0lMOlNBTyBQQVVMTzpQaXJhcG96aW5obworMzkxOkJSOkJSQTpCUkFTSUw6U0FPIFBBVUxPOlBpcmF0aW5pbmdhCiszOTI6QlI6QlJBOkJSQVNJTDpTQU8gUEFVTE86UGl0YW5ndWVpcmFzCiszOTM6QlI6QlJBOkJSQVNJTDpTQU8gUEFVTE86UGxhbmFsdG8KKzM5NDpCUjpCUkE6QlJBU0lMOlNBTyBQQVVMTzpQbGF0aW5hCiszOTU6QlI6QlJBOkJSQVNJTDpTQU8gUEFVTE86UG9hCiszOTY6QlI6QlJBOkJSQVNJTDpTQU8gUEFVTE86UG9sb25pCiszOTc6QlI6QlJBOkJSQVNJTDpTQU8gUEFVTE86UG9tcGVpYQorMzk4OkJSOkJSQTpCUkFTSUw6U0FPIFBBVUxPOlBvbmdhaQorMzk5OkJSOkJSQTpCUkFTSUw6U0FPIFBBVUxPOlBvbnRhbAorNDAwOkJSOkJSQTpCUkFTSUw6U0FPIFBBVUxPOlBvbnRlcyBHZXN0cmFsCis0MDE6QlI6QlJBOkJSQVNJTDpTQU8gUEFVTE86UG9wdWxpbmEKKzQwMjpCUjpCUkE6QlJBU0lMOlNBTyBQQVVMTzpQb3JhbmdhYmEKKzQwMzpCUjpCUkE6QlJBU0lMOlNBTyBQQVVMTzpQb3J0byBGZWxpegorNDA0OkJSOkJSQTpCUkFTSUw6U0FPIFBBVUxPOlBvcnRvIEZlcnJlaXJhCis0MDU6QlI6QlJBOkJSQVNJTDpTQU8gUEFVTE86UG90aXJlbmRhYmEKKzQwNjpCUjpCUkE6QlJBU0lMOlNBTyBQQVVMTzpQcmFkb3BvbGlzCis0MDc6QlI6QlJBOkJSQVNJTDpTQU8gUEFVTE86UHJhaWEgR3JhbmRlCis0MDg6QlI6QlJBOkJSQVNJTDpTQU8gUEFVTE86UHJlcyBCZXJuYXJkZXMKKzQwOTpCUjpCUkE6QlJBU0lMOlNBTyBQQVVMTzpQcmVzIEVwaXRhY2lvCis0MTA6QlI6QlJBOkJSQVNJTDpTQU8gUEFVTE86UHJlcyBQcnVkZW50ZQorNDExOkJSOkJSQTpCUkFTSUw6U0FPIFBBVUxPOlByZXMgVmVuY2VzbGF1Cis0MTI6QlI6QlJBOkJSQVNJTDpTQU8gUEFVTE86UHJlc2lkZW50ZSBBbHZlcworNDEzOkJSOkJSQTpCUkFTSUw6U0FPIFBBVUxPOlByb21pc3NhbworNDE0OkJSOkJSQTpCUkFTSUw6U0FPIFBBVUxPOlF1YXRhCis0MTU6QlI6QlJBOkJSQVNJTDpTQU8gUEFVTE86UXVlaXJvegorNDE2OkJSOkJSQTpCUkFTSUw6U0FPIFBBVUxPOlF1ZWx1egorNDE3OkJSOkJSQTpCUkFTSUw6U0FPIFBBVUxPOlF1aXRhbmEKKzQxODpCUjpCUkE6QlJBU0lMOlNBTyBQQVVMTzpSYWZhcmQKKzQxOTpCUjpCUkE6QlJBU0lMOlNBTyBQQVVMTzpSYW5jaGFyaWEKKzQyMDpCUjpCUkE6QlJBU0lMOlNBTyBQQVVMTzpSZWJlaXJhbyBWZXJtZWxoCis0MjE6QlI6QlJBOkJSQVNJTDpTQU8gUEFVTE86UmVkZW5jYW8gRGEgU2VycgorNDIyOkJSOkJSQTpCUkFTSUw6U0FPIFBBVUxPOlJlZ2VudGUgRmVpam8KKzQyMzpCUjpCUkE6QlJBU0lMOlNBTyBQQVVMTzpSZWdpbm9wb2xpcworNDI0OkJSOkJSQTpCUkFTSUw6U0FPIFBBVUxPOlJlZ2lzdHJvCis0MjU6QlI6QlJBOkJSQVNJTDpTQU8gUEFVTE86UmVzdGluZ2EKKzQyNjpCUjpCUkE6QlJBU0lMOlNBTyBQQVVMTzpSaWJlaXJhCis0Mjc6QlI6QlJBOkJSQVNJTDpTQU8gUEFVTE86UmliZWlyYW8gQm9uaXRvCis0Mjg6QlI6QlJBOkJSQVNJTDpTQU8gUEFVTE86UmliZWlyYW8gRG8gU3VsCis0Mjk6QlI6QlJBOkJSQVNJTDpTQU8gUEFVTE86UmliZWlyYW8gUHJldG8KKzQzMDpCUjpCUkE6QlJBU0lMOlNBTyBQQVVMTzpSaWJlaXJhbyBicmFuY28KKzQzMTpCUjpCUkE6QlJBU0lMOlNBTyBQQVVMTzpSaWJlcmFvIENvcnJlbnRlCis0MzI6QlI6QlJBOkJSQVNJTDpTQU8gUEFVTE86UmlmYWluYQorNDMzOkJSOkJSQTpCUkFTSUw6U0FPIFBBVUxPOlJpbmNhbworNDM0OkJSOkJSQTpCUkFTSUw6U0FPIFBBVUxPOlJpbm9wb2xpcworNDM1OkJSOkJSQTpCUkFTSUw6U0FPIFBBVUxPOlJpbyBDbGFybworNDM2OkJSOkJSQTpCUkFTSUw6U0FPIFBBVUxPOlJpbyBEYXMgUGVkcmFzCis0Mzc6QlI6QlJBOkJSQVNJTDpTQU8gUEFVTE86UmlvIEdyYW5kZSBEYSBTZQorNDM4OkJSOkJSQTpCUkFTSUw6U0FPIFBBVUxPOlJpb2xhbmRpYQorNDM5OkJSOkJSQTpCUkFTSUw6U0FPIFBBVUxPOlJvYmVpcmFvIFBpcmVzCis0NDA6QlI6QlJBOkJSQVNJTDpTQU8gUEFVTE86Um9zZWlyYQorNDQxOkJSOkJSQTpCUkFTSUw6U0FPIFBBVUxPOlJ1YmlhY2VhCis0NDI6QlI6QlJBOkJSQVNJTDpTQU8gUEFVTE86Uy4gSm9hbyBEYSBCb2EgVgorNDQzOkJSOkJSQTpCUkFTSUw6U0FPIFBBVUxPOlNhYmlubworNDQ0OkJSOkJSQTpCUkFTSUw6U0FPIFBBVUxPOlNhZ3JlcworNDQ1OkJSOkJSQTpCUkFTSUw6U0FPIFBBVUxPOlNhbGVzCis0NDY6QlI6QlJBOkJSQVNJTDpTQU8gUEFVTE86U2FsZXMgT2xpdmVpcmEKKzQ0NzpCUjpCUkE6QlJBU0lMOlNBTyBQQVVMTzpTYWxlc29wb2xpcworNDQ4OkJSOkJSQTpCUkFTSUw6U0FPIFBBVUxPOlNhbG1vdXJhbworNDQ5OkJSOkJSQTpCUkFTSUw6U0FPIFBBVUxPOlNhbHRvCis0NTA6QlI6QlJBOkJSQVNJTDpTQU8gUEFVTE86U2FsdG8gRG8gUGlyYXBvcgorNDUxOkJSOkJSQTpCUkFTSUw6U0FPIFBBVUxPOlNhbHRvIEdyYW5kZQorNDUyOkJSOkJSQTpCUkFTSUw6U0FPIFBBVUxPOlNhbiBQZWRybworNDUzOkJSOkJSQTpCUkFTSUw6U0FPIFBBVUxPOlNhbmRvdmFsaW5hCis0NTQ6QlI6QlJBOkJSQVNJTDpTQU8gUEFVTE86U2FudGEgQWRlbGlhCis0NTU6QlI6QlJBOkJSQVNJTDpTQU8gUEFVTE86U2FudGEgQWxiZXJ0aW5hCis0NTY6QlI6QlJBOkJSQVNJTDpTQU8gUEFVTE86U2FudGEgQmFyYmFyYSBEbworNDU3OkJSOkJSQTpCUkFTSUw6U0FPIFBBVUxPOlNhbnRhIEJhcmJhcmEgZCIKKzQ1ODpCUjpCUkE6QlJBU0lMOlNBTyBQQVVMTzpTYW50YSBCcmFuY2EKKzQ1OTpCUjpCUkE6QlJBU0lMOlNBTyBQQVVMTzpTYW50YSBDcnV6IERhcyBQCis0NjA6QlI6QlJBOkJSQVNJTDpTQU8gUEFVTE86U2FudGEgQ3J1eiBEbyBSaQorNDYxOkJSOkJSQTpCUkFTSUw6U0FPIFBBVUxPOlNhbnRhIEVybmVzdGluYQorNDYyOkJSOkJSQTpCUkFTSUw6U0FPIFBBVUxPOlNhbnRhIEZlIERvIFN1bAorNDYzOkJSOkJSQTpCUkFTSUw6U0FPIFBBVUxPOlNhbnRhIEdlcnRydWRlcworNDY0OkJSOkJSQTpCUkFTSUw6U0FPIFBBVUxPOlNhbnRhIElzYWJlbAorNDY1OkJSOkJSQTpCUkFTSUw6U0FPIFBBVUxPOlNhbnRhIEx1Y2lhCis0NjY6QlI6QlJBOkJSQVNJTDpTQU8gUEFVTE86U2FudGEgTWVyY2VkZXMKKzQ2NzpCUjpCUkE6QlJBU0lMOlNBTyBQQVVMTzpTYW50YSBSb3NhIERlIFZpCis0Njg6QlI6QlJBOkJSQVNJTDpTQU8gUEFVTE86U2FudGFuYSBEYSBQb250ZQorNDY5OkJSOkJSQTpCUkFTSUw6U0FPIFBBVUxPOlNhbnRhbmEgRGUgUGFybmEKKzQ3MDpCUjpCUkE6QlJBU0lMOlNBTyBQQVVMTzpTYW50byBBbmFzdGFjaW8KKzQ3MTpCUjpCUkE6QlJBU0lMOlNBTyBQQVVMTzpTYW50byBBbmRyZQorNDcyOkJSOkJSQTpCUkFTSUw6U0FPIFBBVUxPOlNhbnRvIEFudG9uaW8gRG8KKzQ3MzpCUjpCUkE6QlJBU0lMOlNBTyBQQVVMTzpTYW50b3BvbGlzIERvIEFnCis0NzQ6QlI6QlJBOkJSQVNJTDpTQU8gUEFVTE86U2FudG9zCis0NzU6QlI6QlJBOkJSQVNJTDpTQU8gUEFVTE86U2FvIEJlbnRvIERvIFNhcAorNDc2OkJSOkJSQTpCUkFTSUw6U0FPIFBBVUxPOlNhbyBCZXJuYXJkbyBkbworNDc3OkJSOkJSQTpCUkFTSUw6U0FPIFBBVUxPOlNhbyBDYWV0YW5vIGRvIFMKKzQ3ODpCUjpCUkE6QlJBU0lMOlNBTyBQQVVMTzpTYW8gQ2FybG9zCis0Nzk6QlI6QlJBOkJSQVNJTDpTQU8gUEFVTE86U2FvIEZyYW5jaXNjbworNDgwOkJSOkJSQTpCUkFTSUw6U0FPIFBBVUxPOlNhbyBKb2FvIERhcyBEdWEKKzQ4MTpCUjpCUkE6QlJBU0lMOlNBTyBQQVVMTzpTYW8gSm9hbyBEbyBQYXUKKzQ4MjpCUjpCUkE6QlJBU0lMOlNBTyBQQVVMTzpTYW8gSm9hcXVpbSBkYSBCCis0ODM6QlI6QlJBOkJSQVNJTDpTQU8gUEFVTE86U2FvIEpvc2UgRGEgQmVsYQorNDg0OkJSOkJSQTpCUkFTSUw6U0FPIFBBVUxPOlNhbyBKb3NlIERvIEJhcnIKKzQ4NTpCUjpCUkE6QlJBU0lMOlNBTyBQQVVMTzpTYW8gSm9zZSBkbyBSaW8KKzQ4NjpCUjpCUkE6QlJBU0lMOlNBTyBQQVVMTzpTYW8gSm9zZSBkb3MgQ2FtCis0ODc6QlI6QlJBOkJSQVNJTDpTQU8gUEFVTE86U2FvIEx1aXMgRG8gUGFyYQorNDg4OkJSOkJSQTpCUkFTSUw6U0FPIFBBVUxPOlNhbyBNYW51ZWwKKzQ4OTpCUjpCUkE6QlJBU0lMOlNBTyBQQVVMTzpTYW8gTWlndWVsIEFyY2FuCis0OTA6QlI6QlJBOkJSQVNJTDpTQU8gUEFVTE86U2FvIFBhdWxvCis0OTE6QlI6QlJBOkJSQVNJTDpTQU8gUEFVTE86U2FvIFBlZHJvIERvIFR1cgorNDkyOkJSOkJSQTpCUkFTSUw6U0FPIFBBVUxPOlNhbyBTZWJhc3RpYW8KKzQ5MzpCUjpCUkE6QlJBU0lMOlNBTyBQQVVMTzpTYW8gU2ViYXN0aWFvIERhCis0OTQ6QlI6QlJBOkJSQVNJTDpTQU8gUEFVTE86U2FvIFNpbWFvCis0OTU6QlI6QlJBOkJSQVNJTDpTQU8gUEFVTE86U2FvIHJvcXVlCis0OTY6QlI6QlJBOkJSQVNJTDpTQU8gUEFVTE86U2FvIHZpY2VudGUKKzQ5NzpCUjpCUkE6QlJBU0lMOlNBTyBQQVVMTzpTYXJhcHVpCis0OTg6QlI6QlJBOkJSQVNJTDpTQU8gUEFVTE86U2FydXRhaWEKKzQ5OTpCUjpCUkE6QlJBU0lMOlNBTyBQQVVMTzpTYXQuIENsYXJhIEQnT2VzCis1MDA6QlI6QlJBOkJSQVNJTDpTQU8gUEFVTE86U2ViYXN0aWFub3BvbGlzCis1MDE6QlI6QlJBOkJSQVNJTDpTQU8gUEFVTE86U2VycmEgQXp1bAorNTAyOkJSOkJSQTpCUkFTSUw6U0FPIFBBVUxPOlNlcnJhIE5lZ3JhCis1MDM6QlI6QlJBOkJSQVNJTDpTQU8gUEFVTE86U2VycmFuYQorNTA0OkJSOkJSQTpCUkFTSUw6U0FPIFBBVUxPOlNlcnRhb3ppbmhvCis1MDU6QlI6QlJBOkJSQVNJTDpTQU8gUEFVTE86U2V0ZSBCYXJyYXMKKzUwNjpCUjpCUkE6QlJBU0lMOlNBTyBQQVVMTzpTZXZlcmluaWEKKzUwNzpCUjpCUkE6QlJBU0lMOlNBTyBQQVVMTzpTaWx2ZWlyYXMKKzUwODpCUjpCUkE6QlJBU0lMOlNBTyBQQVVMTzpTb2NvcnJvCis1MDk6QlI6QlJBOkJSQVNJTDpTQU8gUEFVTE86U29yb2NhYmEKKzUxMDpCUjpCUkE6QlJBU0lMOlNBTyBQQVVMTzpTdGEuIENydXogRGEgQ29uCis1MTE6QlI6QlJBOkJSQVNJTDpTQU8gUEFVTE86U3RhLiBNYXJpYSBkYSBTZQorNTEyOkJSOkJSQTpCUkFTSUw6U0FPIFBBVUxPOlN0YS4gUml0YSBEbyBPZXMKKzUxMzpCUjpCUkE6QlJBU0lMOlNBTyBQQVVMTzpTdGEuUml0YSBkbyBQYXNzCis1MTQ6QlI6QlJBOkJSQVNJTDpTQU8gUEFVTE86U3RvIEV4cGVkaXRvCis1MTU6QlI6QlJBOkJSQVNJTDpTQU8gUEFVTE86U3RvLiBBbnRvbmlvIERlCis1MTY6QlI6QlJBOkJSQVNJTDpTQU8gUEFVTE86U3RvLiBBbnRvbmlvIERvCis1MTc6QlI6QlJBOkJSQVNJTDpTQU8gUEFVTE86U3RvLkFudG9uaW8gZGEgQQorNTE4OkJSOkJSQTpCUkFTSUw6U0FPIFBBVUxPOlN1ZCBNZW5udWNjaQorNTE5OkJSOkJSQTpCUkFTSUw6U0FPIFBBVUxPOlN1cmFtZQorNTIwOkJSOkJSQTpCUkFTSUw6U0FPIFBBVUxPOlN1emFubworNTIxOkJSOkJSQTpCUkFTSUw6U0FPIFBBVUxPOlRhYmFwdWEKKzUyMjpCUjpCUkE6QlJBU0lMOlNBTyBQQVVMTzpUYWJhdGluZ2EKKzUyMzpCUjpCUkE6QlJBU0lMOlNBTyBQQVVMTzpUYWJvYW8gRGEgU2VycmEKKzUyNDpCUjpCUkE6QlJBU0lMOlNBTyBQQVVMTzpUYWNpYmEKKzUyNTpCUjpCUkE6QlJBU0lMOlNBTyBQQVVMTzpUYWd1YWkKKzUyNjpCUjpCUkE6QlJBU0lMOlNBTyBQQVVMTzpUYWlhY3UKKzUyNzpCUjpCUkE6QlJBU0lMOlNBTyBQQVVMTzpUYWl1dmEKKzUyODpCUjpCUkE6QlJBU0lMOlNBTyBQQVVMTzpUYW1iYXUKKzUyOTpCUjpCUkE6QlJBU0lMOlNBTyBQQVVMTzpUYW5hYmkKKzUzMDpCUjpCUkE6QlJBU0lMOlNBTyBQQVVMTzpUYXBpcmFpCis1MzE6QlI6QlJBOkJSQVNJTDpTQU8gUEFVTE86VGFwaXJhdGliYQorNTMyOkJSOkJSQTpCUkFTSUw6U0FPIFBBVUxPOlRhcXVhcml0aW5nYQorNTMzOkJSOkJSQTpCUkFTSUw6U0FPIFBBVUxPOlRhcXVhcml0dWJhCis1MzQ6QlI6QlJBOkJSQVNJTDpTQU8gUEFVTE86VGFyYWJhaQorNTM1OkJSOkJSQTpCUkFTSUw6U0FPIFBBVUxPOlRhdHVpCis1MzY6QlI6QlJBOkJSQVNJTDpTQU8gUEFVTE86VGF1YmF0ZQorNTM3OkJSOkJSQTpCUkFTSUw6U0FPIFBBVUxPOlRlanVwYQorNTM4OkJSOkJSQTpCUkFTSUw6U0FPIFBBVUxPOlRlb2Rvcm8gU2FtcGFpbworNTM5OkJSOkJSQTpCUkFTSUw6U0FPIFBBVUxPOlRlcnJhIFJveGEKKzU0MDpCUjpCUkE6QlJBU0lMOlNBTyBQQVVMTzpUaWV0ZQorNTQxOkJSOkJSQTpCUkFTSUw6U0FPIFBBVUxPOlRpbWJ1cmkKKzU0MjpCUjpCUkE6QlJBU0lMOlNBTyBQQVVMTzpUb3JyaW5oYQorNTQzOkJSOkJSQTpCUkFTSUw6U0FPIFBBVUxPOlRyZW1lbWJlCis1NDQ6QlI6QlJBOkJSQVNJTDpTQU8gUEFVTE86VHJlcyBGcm9udGVpcmFzCis1NDU6QlI6QlJBOkJSQVNJTDpTQU8gUEFVTE86VHVwYQorNTQ2OkJSOkJSQTpCUkFTSUw6U0FPIFBBVUxPOlR1cGkgUGF1bGlzdGEKKzU0NzpCUjpCUkE6QlJBU0lMOlNBTyBQQVVMTzpUdXJpdWJhCis1NDg6QlI6QlJBOkJSQVNJTDpTQU8gUEFVTE86VHVybWFsaW5hCis1NDk6QlI6QlJBOkJSQVNJTDpTQU8gUEFVTE86VWJhdHViYQorNTUwOkJSOkJSQTpCUkFTSUw6U0FPIFBBVUxPOlViaXJhamFyYQorNTUxOkJSOkJSQTpCUkFTSUw6U0FPIFBBVUxPOlVjaG9hCis1NTI6QlI6QlJBOkJSQVNJTDpTQU8gUEFVTE86VW5pYW8gUGF1bGlzdGEKKzU1MzpCUjpCUkE6QlJBU0lMOlNBTyBQQVVMTzpVcmFuaWEKKzU1NDpCUjpCUkE6QlJBU0lMOlNBTyBQQVVMTzpVcnUKKzU1NTpCUjpCUkE6QlJBU0lMOlNBTyBQQVVMTzpVcnVwZXMKKzU1NjpCUjpCUkE6QlJBU0lMOlNBTyBQQVVMTzpWYWxlbnRpbSBHZW50aWwKKzU1NzpCUjpCUkE6QlJBU0lMOlNBTyBQQVVMTzpWYWxpbmhvcworNTU4OkJSOkJSQTpCUkFTSUw6U0FPIFBBVUxPOlZhbHBhcmFpc28KKzU1OTpCUjpCUkE6QlJBU0lMOlNBTyBQQVVMTzpWYXJnZW0gR3JhbmRlIERvCis1NjA6QlI6QlJBOkJSQVNJTDpTQU8gUEFVTE86VmFyemVhIFBhdWxpc3RhCis1NjE6QlI6QlJBOkJSQVNJTDpTQU8gUEFVTE86VmVyYSBDcnV6Cis1NjI6QlI6QlJBOkJSQVNJTDpTQU8gUEFVTE86VmVyZGUKKzU2MzpCUjpCUkE6QlJBU0lMOlNBTyBQQVVMTzpWaW5oZWRvCis1NjQ6QlI6QlJBOkJSQVNJTDpTQU8gUEFVTE86VmlyYWRvdXJvCis1NjU6QlI6QlJBOkJSQVNJTDpTQU8gUEFVTE86VmlzdGEgYWxlZ3JlIGRvCis1NjY6QlI6QlJBOkJSQVNJTDpTQU8gUEFVTE86Vm90dXBvcmFuZ2EKKzE6QlI6QlJBOkJSQVNJTDpQQVJBTkE6QWJhdGlhCisyOkJSOkJSQTpCUkFTSUw6UEFSQU5BOkFkcmlhbm9wb2xpcworMzpCUjpCUkE6QlJBU0lMOlBBUkFOQTpBZ3Vkb3MgZG8gU3VsCis0OkJSOkJSQTpCUkFTSUw6UEFSQU5BOkFsbSBUYW1hbmRhcmUKKzU6QlI6QlJBOkJSQVNJTDpQQVJBTkE6QWx0byBQYXJhbmEKKzY6QlI6QlJBOkJSQVNJTDpQQVJBTkE6QWx0byBQaXF1aXJpCis3OkJSOkJSQTpCUkFTSUw6UEFSQU5BOkFsdG9uaWEKKzg6QlI6QlJBOkJSQVNJTDpQQVJBTkE6QWx2b3JhZGEgZG8gU3VsCis5OkJSOkJSQTpCUkFTSUw6UEFSQU5BOkFtYXBvcmEKKzEwOkJSOkJSQTpCUkFTSUw6UEFSQU5BOkFtcGVyZQorMTE6QlI6QlJBOkJSQVNJTDpQQVJBTkE6QW5kaXJhCisxMjpCUjpCUkE6QlJBU0lMOlBBUkFOQTpBbnRvbmluYQorMTM6QlI6QlJBOkJSQVNJTDpQQVJBTkE6QW50b25pbyBPbGludG8KKzE0OkJSOkJSQTpCUkFTSUw6UEFSQU5BOkFwdWNhcmFuYQorMTU6QlI6QlJBOkJSQVNJTDpQQVJBTkE6QXJhcG9uZ2FzCisxNjpCUjpCUkE6QlJBU0lMOlBBUkFOQTpBcmFwb3RpCisxNzpCUjpCUkE6QlJBU0lMOlBBUkFOQTpBcmFydW5hCisxODpCUjpCUkE6QlJBU0lMOlBBUkFOQTpBcmF1Y2FyaWEKKzE5OkJSOkJSQTpCUkFTSUw6UEFSQU5BOkFzc2FpCisyMDpCUjpCUkE6QlJBU0lMOlBBUkFOQTpBc3NpcyBDaGF0ZWF1YnJpCisyMTpCUjpCUkE6QlJBU0lMOlBBUkFOQTpBc3RvcmdhCisyMjpCUjpCUkE6QlJBU0lMOlBBUkFOQTpBdGFsYWlhCisyMzpCUjpCUkE6QlJBU0lMOlBBUkFOQTpCYWxzYSBOb3ZhCisyNDpCUjpCUkE6QlJBU0lMOlBBUkFOQTpCYW5kZWlyYW50ZXMKKzI1OkJSOkJSQTpCUkFTSUw6UEFSQU5BOkJhcmJvc2EgRmVycmF6CisyNjpCUjpCUkE6QlJBU0lMOlBBUkFOQTpCYXJyYSBkbyBKYWNhcmUKKzI3OkJSOkJSQTpCUkFTSUw6UEFSQU5BOkJhcnJhY2FvCisyODpCUjpCUkE6QlJBU0lMOlBBUkFOQTpCZWxhICBWaXN0YSBkbyBQCisyOTpCUjpCUkE6QlJBU0lMOlBBUkFOQTpCaXR1cnVuYQorMzA6QlI6QlJBOkJSQVNJTDpQQVJBTkE6Qm9hIEVzcGVyYW5jYQorMzE6QlI6QlJBOkJSQVNJTDpQQVJBTkE6Qm9jYWl1dmEgZG8gU3VsCiszMjpCUjpCUkE6QlJBU0lMOlBBUkFOQTpCb20gU3VjZXNzbworMzM6QlI6QlJBOkJSQVNJTDpQQVJBTkE6Qm9ycmF6b3BvbGlzCiszNDpCUjpCUkE6QlJBU0lMOlBBUkFOQTpDYWZlYXJhCiszNTpCUjpCUkE6QlJBU0lMOlBBUkFOQTpDYWxpZm9ybmlhCiszNjpCUjpCUkE6QlJBU0lMOlBBUkFOQTpDYW1iYXJhCiszNzpCUjpCUkE6QlJBU0lMOlBBUkFOQTpDYW1iZQorMzg6QlI6QlJBOkJSQVNJTDpQQVJBTkE6Q2FtYmlyYQorMzk6QlI6QlJBOkJSQVNJTDpQQVJBTkE6Q2FtcGluYSBHcmFuZGUgZAorNDA6QlI6QlJBOkJSQVNJTDpQQVJBTkE6Q2FtcGluYSBkYSBsYWdvYQorNDE6QlI6QlJBOkJSQVNJTDpQQVJBTkE6Q2FtcG8KKzQyOkJSOkJSQTpCUkFTSUw6UEFSQU5BOkNhbXBvIE1vdXJhbworNDM6QlI6QlJBOkJSQVNJTDpQQVJBTkE6Q2FtcG8gZG8gVGVuZW50ZQorNDQ6QlI6QlJBOkJSQVNJTDpQQVJBTkE6Q2FuZGlkbyBkZSBBYnJldQorNDU6QlI6QlJBOkJSQVNJTDpQQVJBTkE6Q2FwLiBMZW9uaWRhcyBNYQorNDY6QlI6QlJBOkJSQVNJTDpQQVJBTkE6Q2FybG9wb2xpcworNDc6QlI6QlJBOkJSQVNJTDpQQVJBTkE6Q2FzY2F2ZWwKKzQ4OkJSOkJSQTpCUkFTSUw6UEFSQU5BOkNhc3RybworNDk6QlI6QlJBOkJSQVNJTDpQQVJBTkE6Q2F0YW5kdXZhcworNTA6QlI6QlJBOkJSQVNJTDpQQVJBTkE6Q2VudGVuYXJpbyBkbyBTdQorNTE6QlI6QlJBOkJSQVNJTDpQQVJBTkE6Q2Vycm8gQXp1bAorNTI6QlI6QlJBOkJSQVNJTDpQQVJBTkE6Q2V1ICBBenVsCis1MzpCUjpCUkE6QlJBU0lMOlBBUkFOQTpDaG9waW56aW5obworNTQ6QlI6QlJBOkJSQVNJTDpQQVJBTkE6Q2lhbm9ydGUKKzU1OkJSOkJSQTpCUkFTSUw6UEFSQU5BOkNpZGFkZSBHYXVjaGEKKzU2OkJSOkJSQTpCUkFTSUw6UEFSQU5BOkNsZXZlbGFuZGlhCis1NzpCUjpCUkE6QlJBU0lMOlBBUkFOQTpDb2xvbWJvCis1ODpCUjpCUkE6QlJBU0lMOlBBUkFOQTpDb2xvcmFkbworNTk6QlI6QlJBOkJSQVNJTDpQQVJBTkE6Q29uZ29uaGluaGFzCis2MDpCUjpCUkE6QlJBU0lMOlBBUkFOQTpDb25zLiBNYXlyaW5jaworNjE6QlI6QlJBOkJSQVNJTDpQQVJBTkE6Q29udGVuZGEKKzYyOkJSOkJSQTpCUkFTSUw6UEFSQU5BOkNvcmJlbGlhCis2MzpCUjpCUkE6QlJBU0lMOlBBUkFOQTpDb3JuZWxpbyBQcm9jb3BpCis2NDpCUjpCUkE6QlJBU0lMOlBBUkFOQTpDb3JvbmVsIFZpdmlkYQorNjU6QlI6QlJBOkJSQVNJTDpQQVJBTkE6Q3J1eiBNYWNoYWRvCis2NjpCUjpCUkE6QlJBU0lMOlBBUkFOQTpDcnV6ZWlybyBkIE9lc3RlCis2NzpCUjpCUkE6QlJBU0lMOlBBUkFOQTpDcnV6ZWlybyBkbyBTdWwKKzY4OkJSOkJSQTpCUkFTSUw6UEFSQU5BOkN1cml0aWJhCis2OTpCUjpCUkE6QlJBU0lMOlBBUkFOQTpDdXJpdXZhCis3MDpCUjpCUkE6QlJBU0lMOlBBUkFOQTpEaWFtYW50ZSBkbyBOb3J0Cis3MTpCUjpCUkE6QlJBU0lMOlBBUkFOQTpEb2lzIFZpemluaG9zCis3MjpCUjpCUkE6QlJBU0lMOlBBUkFOQTpEb3V0b3IgQ2FtYXJnbworNzM6QlI6QlJBOkJSQVNJTDpQQVJBTkE6RW5lYXMgTWFycXVlcworNzQ6QlI6QlJBOkJSQVNJTDpQQVJBTkE6RW5nLiBCZWx0cmFvCis3NTpCUjpCUkE6QlJBU0lMOlBBUkFOQTpGYXhpbmFsCis3NjpCUjpCUkE6QlJBU0lMOlBBUkFOQTpGZW5peAorNzc6QlI6QlJBOkJSQVNJTDpQQVJBTkE6RmxvcmFpCis3ODpCUjpCUkE6QlJBU0lMOlBBUkFOQTpGbG9yZXN0YQorNzk6QlI6QlJBOkJSQVNJTDpQQVJBTkE6RmxvcmVzdG9wb2xpcworODA6QlI6QlJBOkJSQVNJTDpQQVJBTkE6RmxvcmlkYQorODE6QlI6QlJBOkJSQVNJTDpQQVJBTkE6Rm9ybW9zYQorODI6QlI6QlJBOkJSQVNJTDpQQVJBTkE6Rm96IGRvIElndWFjdQorODM6QlI6QlJBOkJSQVNJTDpQQVJBTkE6RnJhbmNpc2NvIEFsdmVzCis4NDpCUjpCUkE6QlJBU0lMOlBBUkFOQTpGcmFuY2lzY28gQmVsdHJhCis4NTpCUjpCUkE6QlJBU0lMOlBBUkFOQTpHZW5lcmFsIENhcm5laXJvCis4NjpCUjpCUkE6QlJBU0lMOlBBUkFOQTpHb2lvLUVyZQorODc6QlI6QlJBOkJSQVNJTDpQQVJBTkE6R3JhbmRlcyBSaW9zCis4ODpCUjpCUkE6QlJBU0lMOlBBUkFOQTpHdWFpcmEKKzg5OkJSOkJSQTpCUkFTSUw6UEFSQU5BOkd1YWlyYWNhCis5MDpCUjpCUkE6QlJBU0lMOlBBUkFOQTpHdWFwaXJhbWEKKzkxOkJSOkJSQTpCUkFTSUw6UEFSQU5BOkd1YXBvcmVtYQorOTI6QlI6QlJBOkJSQVNJTDpQQVJBTkE6R3VhcmFjaQorOTM6QlI6QlJBOkJSQVNJTDpQQVJBTkE6R3VhcmFuaWFjdQorOTQ6QlI6QlJBOkJSQVNJTDpQQVJBTkE6R3VhcmFwdWF2YQorOTU6QlI6QlJBOkJSQVNJTDpQQVJBTkE6R3VhcmFxdWVjYWJhCis5NjpCUjpCUkE6QlJBU0lMOlBBUkFOQTpHdWFyYXR1YmEKKzk3OkJSOkJSQTpCUkFTSUw6UEFSQU5BOkliYWl0aQorOTg6QlI6QlJBOkJSQVNJTDpQQVJBTkE6SWJpcG9yYQorOTk6QlI6QlJBOkJSQVNJTDpQQVJBTkE6SWNhcmFpbWEKKzEwMDpCUjpCUkE6QlJBU0lMOlBBUkFOQTpJZ3VhcmFjdQorMTAxOkJSOkJSQTpCUkFTSUw6UEFSQU5BOkltYml0dXZhCisxMDI6QlI6QlJBOkJSQVNJTDpQQVJBTkE6SW5hY2lvIE1hcnRpbnMKKzEwMzpCUjpCUkE6QlJBU0lMOlBBUkFOQTpJbmFqYQorMTA0OkJSOkJSQTpCUkFTSUw6UEFSQU5BOkluZGlhbm9wb2xpcworMTA1OkJSOkJSQTpCUkFTSUw6UEFSQU5BOklwaXJhbmdhCisxMDY6QlI6QlJBOkJSQVNJTDpQQVJBTkE6SXBvcmEKKzEwNzpCUjpCUkE6QlJBU0lMOlBBUkFOQTpJcmF0aQorMTA4OkJSOkJSQTpCUkFTSUw6UEFSQU5BOklyZXRhbWEKKzEwOTpCUjpCUkE6QlJBU0lMOlBBUkFOQTpJdGFndWFqZQorMTEwOkJSOkJSQTpCUkFTSUw6UEFSQU5BOkl0YW1iYXJhY2EKKzExMTpCUjpCUkE6QlJBU0lMOlBBUkFOQTpJdGFtYmUKKzExMjpCUjpCUkE6QlJBU0lMOlBBUkFOQTpJdGFwZWphcmEgZCcgT2VzCisxMTM6QlI6QlJBOkJSQVNJTDpQQVJBTkE6SXRhdW5hIGRvIFN1bAorMTE0OkJSOkJSQTpCUkFTSUw6UEFSQU5BOkl2YWkKKzExNTpCUjpCUkE6QlJBU0lMOlBBUkFOQTpJdmFpcG9yYQorMTE2OkJSOkJSQTpCUkFTSUw6UEFSQU5BOkl2YXR1dmEKKzExNzpCUjpCUkE6QlJBU0lMOlBBUkFOQTpKYWJ1dGkKKzExODpCUjpCUkE6QlJBU0lMOlBBUkFOQTpKYWNhcmV6aW5obworMTE5OkJSOkJSQTpCUkFTSUw6UEFSQU5BOkphZ3VhcGl0YQorMTIwOkJSOkJSQTpCUkFTSUw6UEFSQU5BOkphZ3VhcmFpdmEKKzEyMTpCUjpCUkE6QlJBU0lMOlBBUkFOQTpKYW5kYWlhIGRvIFN1bAorMTIyOkJSOkJSQTpCUkFTSUw6UEFSQU5BOkphbmlvcG9saXMKKzEyMzpCUjpCUkE6QlJBU0lMOlBBUkFOQTpKYXBpcmEKKzEyNDpCUjpCUkE6QlJBU0lMOlBBUkFOQTpKYXB1cmEKKzEyNTpCUjpCUkE6QlJBU0lMOlBBUkFOQTpKYXJkaW0gQWxlZ3JlCisxMjY6QlI6QlJBOkJSQVNJTDpQQVJBTkE6SmFyZGltIE9saW5kYQorMTI3OkJSOkJSQTpCUkFTSUw6UEFSQU5BOkphdGF6aW5obworMTI4OkJSOkJSQTpCUkFTSUw6UEFSQU5BOkpvYXF1aW0gVGF2b3JhCisxMjk6QlI6QlJBOkJSQVNJTDpQQVJBTkE6SnVjYXJhCisxMzA6QlI6QlJBOkJSQVNJTDpQQVJBTkE6SnVuZGlhaSBkbyBTdWwKKzEzMTpCUjpCUkE6QlJBU0lMOlBBUkFOQTpLYWxvcmUKKzEzMjpCUjpCUkE6QlJBU0lMOlBBUkFOQTpMYXBhCisxMzM6QlI6QlJBOkJSQVNJTDpQQVJBTkE6TGFyYW5qZWlyYXMgZG8gUworMTM0OkJSOkJSQTpCUkFTSUw6UEFSQU5BOkxlb3BvbGlzCisxMzU6QlI6QlJBOkJSQVNJTDpQQVJBTkE6TG9hbmRhCisxMzY6QlI6QlJBOkJSQVNJTDpQQVJBTkE6TG9iYXRvCisxMzc6QlI6QlJBOkJSQVNJTDpQQVJBTkE6TG9uZHJpbmEKKzEzODpCUjpCUkE6QlJBU0lMOlBBUkFOQTpMdXBpb25vcG9saXMKKzEzOTpCUjpCUkE6QlJBU0lMOlBBUkFOQTpNYWwuIENhbmRpZG8gUm9uCisxNDA6QlI6QlJBOkJSQVNJTDpQQVJBTkE6TWFsbGV0CisxNDE6QlI6QlJBOkJSQVNJTDpQQVJBTkE6TWFtYm9yZQorMTQyOkJSOkJSQTpCUkFTSUw6UEFSQU5BOk1hbmRhZ3VhY3UKKzE0MzpCUjpCUkE6QlJBU0lMOlBBUkFOQTpNYW5kYWd1YXJpCisxNDQ6QlI6QlJBOkJSQVNJTDpQQVJBTkE6TWFuZGlyaXR1YmEKKzE0NTpCUjpCUkE6QlJBU0lMOlBBUkFOQTpNYW5ndWVpcmluaGEKKzE0NjpCUjpCUkE6QlJBU0lMOlBBUkFOQTpNYW51ZWwgUmliYXMKKzE0NzpCUjpCUkE6QlJBU0lMOlBBUkFOQTpNYXJpYSBIZWxlbmEKKzE0ODpCUjpCUkE6QlJBU0lMOlBBUkFOQTpNYXJpYWx2YQorMTQ5OkJSOkJSQTpCUkFTSUw6UEFSQU5BOk1hcmlsYW5kaWEgZG8gU3UKKzE1MDpCUjpCUkE6QlJBU0lMOlBBUkFOQTpNYXJpbGVuYQorMTUxOkJSOkJSQTpCUkFTSUw6UEFSQU5BOk1hcmlsdXoKKzE1MjpCUjpCUkE6QlJBU0lMOlBBUkFOQTpNYXJpbmdhCisxNTM6QlI6QlJBOkJSQVNJTDpQQVJBTkE6TWFyaW9wb2xpcworMTU0OkJSOkJSQTpCUkFTSUw6UEFSQU5BOk1hcm1lbGVpcm8KKzE1NTpCUjpCUkE6QlJBU0lMOlBBUkFOQTpNYXJ1bWJpCisxNTY6QlI6QlJBOkJSQVNJTDpQQVJBTkE6TWF0ZWxhbmRpYQorMTU3OkJSOkJSQTpCUkFTSUw6UEFSQU5BOk1hdGluaG9zCisxNTg6QlI6QlJBOkJSQVNJTDpQQVJBTkE6TWVkaWFuZWlyYQorMTU5OkJSOkJSQTpCUkFTSUw6UEFSQU5BOk1pcmFkb3IKKzE2MDpCUjpCUkE6QlJBU0lMOlBBUkFOQTpNaXJhc2VsdmEKKzE2MTpCUjpCUkE6QlJBU0lMOlBBUkFOQTpNb3JlaXJhIFNhbGVzCisxNjI6QlI6QlJBOkJSQVNJTDpQQVJBTkE6TW9ycmV0ZXMKKzE2MzpCUjpCUkE6QlJBU0lMOlBBUkFOQTpNdW5ob3ogZGUgTWVsbworMTY0OkJSOkJSQTpCUkFTSUw6UEFSQU5BOk5vc3NhIFNlbmhvcmEgZGEKKzE2NTpCUjpCUkE6QlJBU0lMOlBBUkFOQTpOb3ZhICBMb25kcmluYQorMTY2OkJSOkJSQTpCUkFTSUw6UEFSQU5BOk5vdmEgQWxpYW5jYSBkbworMTY3OkJSOkJSQTpCUkFTSUw6UEFSQU5BOk5vdmEgQW1lcmljYSBkYQorMTY4OkJSOkJSQTpCUkFTSUw6UEFSQU5BOk5vdmEgQXVyb3JhCisxNjk6QlI6QlJBOkJSQVNJTDpQQVJBTkE6Tm92YSBDYW50dQorMTcwOkJSOkJSQTpCUkFTSUw6UEFSQU5BOk5vdmEgRXNwZXJhbmNhCisxNzE6QlI6QlJBOkJSQVNJTDpQQVJBTkE6Tm92YSBGYXRpbWEKKzE3MjpCUjpCUkE6QlJBU0lMOlBBUkFOQTpOb3ZhIE9saW1waWEKKzE3MzpCUjpCUkE6QlJBU0lMOlBBUkFOQTpPcnRpZ3VlaXJhCisxNzQ6QlI6QlJBOkJSQVNJTDpQQVJBTkE6T3VyaXpvbmEKKzE3NTpCUjpCUkE6QlJBU0lMOlBBUkFOQTpQYWluY2FuZHUKKzE3NjpCUjpCUkE6QlJBU0lMOlBBUkFOQTpQYWxtYXMKKzE3NzpCUjpCUkE6QlJBU0lMOlBBUkFOQTpQYWxtZWlyYQorMTc4OkJSOkJSQTpCUkFTSUw6UEFSQU5BOlBhbG1pdGFsCisxNzk6QlI6QlJBOkJSQVNJTDpQQVJBTkE6UGFsb3RpbmEKKzE4MDpCUjpCUkE6QlJBU0lMOlBBUkFOQTpQYXJhaXNvICBkbyBOb3J0CisxODE6QlI6QlJBOkJSQVNJTDpQQVJBTkE6UGFyYW5hY2l0eQorMTgyOkJSOkJSQTpCUkFTSUw6UEFSQU5BOlBhcmFuYWd1YQorMTgzOkJSOkJSQTpCUkFTSUw6UEFSQU5BOlBhcmFuYXBvZW1hCisxODQ6QlI6QlJBOkJSQVNJTDpQQVJBTkE6UGFyYW5hdmFpCisxODU6QlI6QlJBOkJSQVNJTDpQQVJBTkE6UGF0byBCcmFuY28KKzE4NjpCUjpCUkE6QlJBU0lMOlBBUkFOQTpQYXVsYSBGcmVpdGFzCisxODc6QlI6QlJBOkJSQVNJTDpQQVJBTkE6UGF1bG8gRnJvbnRpbgorMTg4OkJSOkJSQTpCUkFTSUw6UEFSQU5BOlBlYWJpcnUKKzE4OTpCUjpCUkE6QlJBU0lMOlBBUkFOQTpQZXJvbGEKKzE5MDpCUjpCUkE6QlJBU0lMOlBBUkFOQTpQZXJvbGEgIGQnIE9lc3RlCisxOTE6QlI6QlJBOkJSQVNJTDpQQVJBTkE6UGllbgorMTkyOkJSOkJSQTpCUkFTSUw6UEFSQU5BOlBpbmhhbGFvCisxOTM6QlI6QlJBOkJSQVNJTDpQQVJBTkE6UGluaGFvCisxOTQ6QlI6QlJBOkJSQVNJTDpQQVJBTkE6UGlyYWkgZG8gU3VsCisxOTU6QlI6QlJBOkJSQVNJTDpQQVJBTkE6UGlyYXF1YXJhCisxOTY6QlI6QlJBOkJSQVNJTDpQQVJBTkE6UGl0YW5nYQorMTk3OkJSOkJSQTpCUkFTSUw6UEFSQU5BOlBsYW5hbHRpbmEgZG8gUGEKKzE5ODpCUjpCUkE6QlJBU0lMOlBBUkFOQTpQbGFuYWx0bworMTk5OkJSOkJSQTpCUkFTSUw6UEFSQU5BOlBvbnRhIEdyb3NzYQorMjAwOkJSOkJSQTpCUkFTSUw6UEFSQU5BOlBvcmVjYXR1CisyMDE6QlI6QlJBOkJSQVNJTDpQQVJBTkE6UG9ydG8gIEFtYXpvbmFzCisyMDI6QlI6QlJBOkJSQVNJTDpQQVJBTkE6UG9ydG8gVml0b3JpYQorMjAzOkJSOkJSQTpCUkFTSUw6UEFSQU5BOlByZXMuIEMuIEJyYW5jbworMjA0OkJSOkJSQTpCUkFTSUw6UEFSQU5BOlByaW1laXJvIERlIE1haW8KKzIwNTpCUjpCUkE6QlJBU0lMOlBBUkFOQTpQcnVkZW50b3BvbGlzCisyMDY6QlI6QlJBOkJSQVNJTDpQQVJBTkE6UHRvLiBSaWNvCisyMDc6QlI6QlJBOkJSQVNJTDpQQVJBTkE6UXVhdGlndWEKKzIwODpCUjpCUkE6QlJBU0lMOlBBUkFOQTpRdWF0cm8gQmFycmFzCisyMDk6QlI6QlJBOkJSQVNJTDpQQVJBTkE6UXVlZGFzIGRvIElndWFjdQorMjEwOkJSOkJSQTpCUkFTSUw6UEFSQU5BOlF1ZXJlbmNpYSBkbyBOb3IKKzIxMTpCUjpCUkE6QlJBU0lMOlBBUkFOQTpRdWludGEgZG8gU29sCisyMTI6QlI6QlJBOkJSQVNJTDpQQVJBTkE6UXVpdGFuZGluaGEKKzIxMzpCUjpCUkE6QlJBU0lMOlBBUkFOQTpSSU8gUEFSQU5BUEFORU1BCisyMTQ6QlI6QlJBOkJSQVNJTDpQQVJBTkE6UmFuY2hvIEFsZWdyZQorMjE1OkJSOkJSQTpCUkFTSUw6UEFSQU5BOlJlYWxlemEKKzIxNjpCUjpCUkE6QlJBU0lMOlBBUkFOQTpSZWJvdWNhcworMjE3OkJSOkJSQTpCUkFTSUw6UEFSQU5BOlJlbmFzY2VuY2EKKzIxODpCUjpCUkE6QlJBU0lMOlBBUkFOQTpSZXNlcnZhCisyMTk6QlI6QlJBOkJSQVNJTDpQQVJBTkE6UmliZWlyYW8gQ2xhcm8KKzIyMDpCUjpCUkE6QlJBU0lMOlBBUkFOQTpSaWJlcmFvIGRvIFBpbmhhCisyMjE6QlI6QlJBOkJSQVNJTDpQQVJBTkE6UmlvIEF6dWwKKzIyMjpCUjpCUkE6QlJBU0lMOlBBUkFOQTpSaW8gQm9tCisyMjM6QlI6QlJBOkJSQVNJTDpQQVJBTkE6UmlvIEJyYW5jbyBkbyBTdQorMjI0OkJSOkJSQTpCUkFTSUw6UEFSQU5BOlJpbyBOZWdybworMjI1OkJSOkJSQTpCUkFTSUw6UEFSQU5BOlJvbGFuZGlhCisyMjY6QlI6QlJBOkJSQVNJTDpQQVJBTkE6Um9uY2Fkb3IKKzIyNzpCUjpCUkE6QlJBU0lMOlBBUkFOQTpSb25kb24KKzIyODpCUjpCUkE6QlJBU0lMOlBBUkFOQTpTLiBBbnRvbmlvIGRlIFN1CisyMjk6QlI6QlJBOkJSQVNJTDpQQVJBTkE6Uy4gSXNhYmVsIGQnIE9lcworMjMwOkJSOkJSQTpCUkFTSUw6UEFSQU5BOlMuIElzYWJlbCBkbyBBdmEKKzIzMTpCUjpCUkE6QlJBU0lMOlBBUkFOQTpTLiBKb3JnZSBkIE9lc3RlCisyMzI6QlI6QlJBOkJSQVNJTDpQQVJBTkE6Uy4gSm9zZSBkb3MgUGluaAorMjMzOkJSOkJSQTpCUkFTSUw6UEFSQU5BOlMuIFNlYmFzdGlhbyBkYQorMjM0OkJSOkJSQTpCUkFTSUw6UEFSQU5BOlMuQ3J1eiBkZSBNb250ZQorMjM1OkJSOkJSQTpCUkFTSUw6UEFSQU5BOlNhYmF1ZGlhCisyMzY6QlI6QlJBOkJSQVNJTDpQQVJBTkE6U2FsZ2FkbyBGaWxobworMjM3OkJSOkJSQTpCUkFTSUw6UEFSQU5BOlNhbHRvIGRlIEl0YXJhcmUKKzIzODpCUjpCUkE6QlJBU0lMOlBBUkFOQTpTYWx0byBkbyBMb25kcmEKKzIzOTpCUjpCUkE6QlJBU0lMOlBBUkFOQTpTYW4gUGVkcm8gZG8gSXZhCisyNDA6QlI6QlJBOkJSQVNJTDpQQVJBTkE6U2FuZ2VzCisyNDE6QlI6QlJBOkJSQVNJTDpQQVJBTkE6U2FudGEgQW1lbGlhCisyNDI6QlI6QlJBOkJSQVNJTDpQQVJBTkE6U2FudGEgRmUKKzI0MzpCUjpCUkE6QlJBU0lMOlBBUkFOQTpTYW50YSBIZWxlbmEKKzI0NDpCUjpCUkE6QlJBU0lMOlBBUkFOQTpTYW50YSBJbmVzCisyNDU6QlI6QlJBOkJSQVNJTDpQQVJBTkE6U2FudGEgTWFyaWFuYQorMjQ2OkJSOkJSQTpCUkFTSUw6UEFSQU5BOlNhbnRhbmEgZG8gSXRhcmEKKzI0NzpCUjpCUkE6QlJBU0lMOlBBUkFOQTpTYW50byBJbmFjaW8KKzI0ODpCUjpCUkE6QlJBU0lMOlBBUkFOQTpTYW8gQ2FybG9zIGRvIEl2CisyNDk6QlI6QlJBOkJSQVNJTDpQQVJBTkE6U2FvIEplcm9uaW1vIGRhCisyNTA6QlI6QlJBOkJSQVNJTDpQQVJBTkE6U2FvIEpvYW8KKzI1MTpCUjpCUkE6QlJBU0lMOlBBUkFOQTpTYW8gSm9hbyBkbyBDYWl1CisyNTI6QlI6QlJBOkJSQVNJTDpQQVJBTkE6U2FvIEpvYW8gZG8gSXZhaQorMjUzOkJSOkJSQTpCUkFTSUw6UEFSQU5BOlNhbyBKb2FvIGRvIFRyaXUKKzI1NDpCUjpCUkE6QlJBU0lMOlBBUkFOQTpTYW8gSm9yZ2UKKzI1NTpCUjpCUkE6QlJBU0lMOlBBUkFOQTpTYW8gSm9zZSBCb2EgVmlzCisyNTY6QlI6QlJBOkJSQVNJTDpQQVJBTkE6U2FvIE1hdGV1cyBkbyBTdQorMjU3OkJSOkJSQTpCUkFTSUw6UEFSQU5BOlNhbyBNaWd1ZWwgZG8gSWd1YWN1CisyNTg6QlI6QlJBOkJSQVNJTDpQQVJBTkE6U2FvIFBlZHJvIGRvIFBhcgorMjU5OkJSOkJSQTpCUkFTSUw6UEFSQU5BOlNhbyBUb21lCisyNjA6QlI6QlJBOkJSQVNJTDpQQVJBTkE6U2Fwb3BlbWEKKzI2MTpCUjpCUkE6QlJBU0lMOlBBUkFOQTpTZXJ0YW5lamEKKzI2MjpCUjpCUkE6QlJBU0lMOlBBUkFOQTpTZXJ0YW5vcG9saXMKKzI2MzpCUjpCUkE6QlJBU0lMOlBBUkFOQTpTaXF1ZWlyYSBDYW1wb3MKKzI2NDpCUjpCUkE6QlJBU0lMOlBBUkFOQTpTdGEuQ2VjaWxpYSBkbyBQCisyNjU6QlI6QlJBOkJSQVNJTDpQQVJBTkE6U3RvLkFudG9uaW8gZGEgUAorMjY2OkJSOkJSQTpCUkFTSUw6UEFSQU5BOlN0by5BbnRvbmlvIGRvIEMKKzI2NzpCUjpCUkE6QlJBU0lMOlBBUkFOQTpTdG8uQW50b25pbyBkbyBQCisyNjg6QlI6QlJBOkJSQVNJTDpQQVJBTkE6VGFtYm9hcmEKKzI2OTpCUjpCUkE6QlJBU0lMOlBBUkFOQTpUYXBlamFyYQorMjcwOkJSOkJSQTpCUkFTSUw6UEFSQU5BOlRhcGlyYQorMjcxOkJSOkJSQTpCUkFTSUw6UEFSQU5BOlRlbGVtYWNvIEJvcmJhCisyNzI6QlI6QlJBOkJSQVNJTDpQQVJBTkE6VGVycmEgQm9hCisyNzM6QlI6QlJBOkJSQVNJTDpQQVJBTkE6VGVycmEgUmljYQorMjc0OkJSOkJSQTpCUkFTSUw6UEFSQU5BOlRlcnJhIFJveGEKKzI3NTpCUjpCUkE6QlJBU0lMOlBBUkFOQTpUZXhlaXJhIFNvYXJlcworMjc2OkJSOkJSQTpCUkFTSUw6UEFSQU5BOlRpYmFqaQorMjc3OkJSOkJSQTpCUkFTSUw6UEFSQU5BOlRpanVjYXMgZG8gU3VsCisyNzg6QlI6QlJBOkJSQVNJTDpQQVJBTkE6VG9sZWRvCisyNzk6QlI6QlJBOkJSQVNJTDpQQVJBTkE6VG9tYXppbmEKKzI4MDpCUjpCUkE6QlJBU0lMOlBBUkFOQTpUdW5laXJhcyBkIE9lc3RlCisyODE6QlI6QlJBOkJSQVNJTDpQQVJBTkE6VWJpcmF0YQorMjgyOkJSOkJSQTpCUkFTSUw6UEFSQU5BOlVtdWFyYW1hCisyODM6QlI6QlJBOkJSQVNJTDpQQVJBTkE6VW5pYW8gZGEgVml0b3JpYQorMjg0OkJSOkJSQTpCUkFTSUw6UEFSQU5BOlVuaWZsb3IKKzI4NTpCUjpCUkE6QlJBU0lMOlBBUkFOQTpVcmFpCisyODY6QlI6QlJBOkJSQVNJTDpQQVJBTkE6VmVuY2VzbGF1IEJyYXMKKzI4NzpCUjpCUkE6QlJBU0lMOlBBUkFOQTpWZXJlCisyODg6QlI6QlJBOkJSQVNJTDpQQVJBTkE6Vml0b3Jpbm8KKzI4OTpCUjpCUkE6QlJBU0lMOlBBUkFOQTpYYW1icmUKKzE6QlI6QlJBOkJSQVNJTDpBQ1JFOkFTU0lTIEJSQVNJTAorMjpCUjpCUkE6QlJBU0lMOkFDUkU6QlJBU0lMRUlBCiszOkJSOkJSQTpCUkFTSUw6QUNSRTpDUlVaRUlSTyBETyBTVUwKKzQ6QlI6QlJBOkJSQVNJTDpBQ1JFOkZFSUpPCis1OkJSOkJSQTpCUkFTSUw6QUNSRTpNQU5DSU8gTElNQQorNjpCUjpCUkE6QlJBU0lMOkFDUkU6TUFOVUVMIFVSQkFOTworNzpCUjpCUkE6QlJBU0lMOkFDUkU6UExBQ0lETyBERSBDLgorODpCUjpCUkE6QlJBU0lMOkFDUkU6UklPIEJSQU5DTworOTpCUjpCUkE6QlJBU0lMOkFDUkU6U0VOQSBNQURVUkVJUkEKKzEwOkJSOkJSQTpCUkFTSUw6QUNSRTpTRU5BRE9SIEdVSU9NQVJECisxMTpCUjpCUkE6QlJBU0lMOkFDUkU6VEFSQVVBQ0EKKzEyOkJSOkJSQTpCUkFTSUw6QUNSRTpYQVBVUkkKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9CUk4vQlJOX0FETUlOMV9MRVgudHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L0JSTi9CUk5fQURNSU4xX0xFWC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGYxNGQ1ZQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9CUk4vQlJOX0FETUlOMV9MRVgudHh0CkBAIC0wLDAgKzEsNCBAQAorMTpCTi1CRTpCTjpCRUxBSVQKKzI6Qk4tQk06Qk46QlJVTkVJIE1VQVJBCiszOkJOLVRVOkJOOk1VQVJBL1NFUklBL1RVVE9ORworNDpCTi1URTpCTjpURU1CVVJPTkcKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9CUk4vQlJOX0FETUlOMl9MRVgudHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L0JSTi9CUk5fQURNSU4yX0xFWC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGJiYTBhYgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9CUk4vQlJOX0FETUlOMl9MRVgudHh0CkBAIC0wLDAgKzEsMiBAQAorMTpCTjpCUk46QlJVTkVJOk11YXJhL1NlcmlhL1R1dG9uZzpCUk4uTDIuMQorMTpCTjpCUk46QlJVTkVJOlRlbWJ1cm9uZzpCUk4uTDIuMgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L0JUTi9CVE5fQURNSU4xX0xFWC50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvQlROL0JUTl9BRE1JTjFfTEVYLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNmEyYjJkCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L0JUTi9CVE5fQURNSU4xX0xFWC50eHQKQEAgLTAsMCArMSwyMiBAQAorMTpCVC0zMzpCVDpCVU1USEFORworMjpCVC1DTkc6QlQ6Q0hJUkFORworMzpCVC0yOkJUOkNIVUtIQQorNDpCVC1EQTpCVDpEQUdBCis1OkJULTIyOkJUOkRBR0FOQQorNjpCVC1HQTpCVDpHQVNBCis3OkJULTM2OkJUOkdBWUxFR1BIVUcgKFNBUkJIQU5HKQorODpCVC0zOkJUOkhBQQorOTpCVC00NDpCVDpMSFVOVFNISQorMTA6QlQtNDI6QlQ6TU9OR0FSCisxMTpCVC0zNDpCVDpQQVJPCisxMjpCVC00MzpCVDpQRU1BIEdBVFNIRUwKKzEzOkJULTIzOkJUOlBVTkFLSEEKKzE0OkJULTQ6QlQ6U0FNQ0hJCisxNTpCVC00NTpCVDpTQU1EUlVQIEpPTkdLSEFSCisxNjpCVC0zNzpCVDpTSEVOR0FORworMTc6QlQtMzg6QlQ6VEFTSElHQU5HCisxODpCVC01OkJUOlRISU1QSFUKKzE5OkJULTMyOkJUOlRPTkdTQQorMjA6QlQtVFk6QlQ6VFJBU0hJIFlBTkdUU0UKKzIxOkJULTM1OkJUOlRSQVNISUdBTkcKKzIyOkJULTI0OkJUOldBTkdESVBIT0RSQU5HCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvQlROL0JUTl9BRE1JTjJfTEVYLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9CVE4vQlROX0FETUlOMl9MRVgudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI3MTViNjYKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvQlROL0JUTl9BRE1JTjJfTEVYLnR4dApAQCAtMCwwICsxLDE5IEBACisxOkJUOkJUTjpCSFVUQU46QnVtdGhhbmc6QlROLkwyLjEwCisxOkJUOkJUTjpCSFVUQU46TGh1bnRzaGk6QlROLkwyLjEzCisxOkJUOkJUTjpCSFVUQU46U2FtZHJ1cCBKb25na2hhcjpCVE4uTDIuOQorMTpCVDpCVE46QkhVVEFOOkNoaXJhbmc6QlROLkwyLjEyCisxOkJUOkJUTjpCSFVUQU46TW9uZ2FyOkJUTi5MMi43CisxOkJUOkJUTjpCSFVUQU46U2hlbmdhbmc6QlROLkwyLjIKKzE6QlQ6QlROOkJIVVRBTjpDaHVraGE6QlROLkwyLjE3CisxOkJUOkJUTjpCSFVUQU46VGhpbXBodTpCVE4uTDIuNAorMTpCVDpCVE46QkhVVEFOOlRvbmdzYTpCVE4uTDIuMTEKKzE6QlQ6QlROOkJIVVRBTjpIYWE6QlROLkwyLjUKKzE6QlQ6QlROOkJIVVRBTjpUYXNoaWdhbmc6QlROLkwyLjgKKzE6QlQ6QlROOkJIVVRBTjpQdW5ha2hhOkJUTi5MMi4xOQorMTpCVDpCVE46QkhVVEFOOkdheWxlZ3BodWcgKFNhcmJoYW5nKTpCVE4uTDIuMTgKKzE6QlQ6QlROOkJIVVRBTjpQZW1hIEdhdHNoZWw6QlROLkwyLjE2CisxOkJUOkJUTjpCSFVUQU46UGFybzpCVE4uTDIuMQorMTpCVDpCVE46QkhVVEFOOldhbmdkaXBob2RyYW5nOkJUTi5MMi4xNQorMTpCVDpCVE46QkhVVEFOOkRhZ2E6QlROLkwyLjYKKzE6QlQ6QlROOkJIVVRBTjpHYXNhOkJUTi5MMi4zCisxOkJUOkJUTjpCSFVUQU46U2FtY2hpOkJUTi5MMi4xNApkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L0NBRi9DQUZfQURNSU4xX0xFWC50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvQ0FGL0NBRl9BRE1JTjFfTEVYLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYTA5YjhhCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L0NBRi9DQUZfQURNSU4xX0xFWC50eHQKQEAgLTAsMCArMSwxOCBAQAorMTpDRi1CQjpDRjpCQU1JTkdVSSBCQU5HT1JBTiBbQkFNSU5HVUkgQkFOR09SQV0KKzI6Q0YtQkdGOkNGOkJBTkdVSQorMzpDRi1CSzpDRjpCQVNTRSBLT1RUTworNDpDRi1ITTpDRjpIQVVUIE1CT01PVQorNTpDRi1ISzpDRjpIQVVURSBLT1RUTworNjpDRi1LRzpDRjpLRU1PCis3OkNGLUxCOkNGOkxPQkFZRQorODpDRi1IUzpDRjpNQU1CRVJFIEtBREVJCis5OkNGLU1COkNGOk1CT01PVQorMTA6Q0YtS0I6Q0Y6TkFOQSBHUkVCSVpJIFtOQU5BIEdSSUJJTkdVSV0KKzExOkNGLU5NOkNGOk5BTkEgTUFNQkVSRQorMTI6Q0YtTVA6Q0Y6T01CRUxMQSBNUE9LTworMTM6Q0YtVUs6Q0Y6T1VBS0EKKzE0OkNGLUFDOkNGOk9VSEFNCisxNTpDRi1PUDpDRjpPVUhBTSBQRU5ERQorMTY6Q0YtU0U6Q0Y6U0FOR0hBMQorMTc6Q0YtU0U6Q0Y6U0FOR0hBMQorMTg6Q0YtVks6Q0Y6VkFLQUdBCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvQ0FGL0NBRl9BRE1JTjJfTEVYLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9DQUYvQ0FGX0FETUlOMl9MRVgudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNmYTVjMjEKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvQ0FGL0NBRl9BRE1JTjJfTEVYLnR4dApAQCAtMCwwICsxLDUxIEBACisxOkNGOkNBRjpDRU5UUkFMIEFGUklDQU4gUkVQVUJMSUM6T21iZWxsYS1NcG9rbzpCaW1ibworMjpDRjpDQUY6Q0VOVFJBTCBBRlJJQ0FOIFJFUFVCTElDOk9tYmVsbGEtTXBva286Qm9hbGkKKzM6Q0Y6Q0FGOkNFTlRSQUwgQUZSSUNBTiBSRVBVQkxJQzpPbWJlbGxhLU1wb2tvOkRhbWFyYQorNDpDRjpDQUY6Q0VOVFJBTCBBRlJJQ0FOIFJFUFVCTElDOk9tYmVsbGEtTXBva286WWFsb2tlLUJvc3NlbWJlbGUKKzE6Q0Y6Q0FGOkNFTlRSQUwgQUZSSUNBTiBSRVBVQkxJQzpLZW1vOkRla29hCisyOkNGOkNBRjpDRU5UUkFMIEFGUklDQU4gUkVQVUJMSUM6S2VtbzpTaWJ1dAorMTpDRjpDQUY6Q0VOVFJBTCBBRlJJQ0FOIFJFUFVCTElDOk91YWthOkJha2FsYQorMjpDRjpDQUY6Q0VOVFJBTCBBRlJJQ0FOIFJFUFVCTElDOk91YWthOkJhbWJhcmkKKzM6Q0Y6Q0FGOkNFTlRSQUwgQUZSSUNBTiBSRVBVQkxJQzpPdWFrYTpHcmltYXJpCis0OkNGOkNBRjpDRU5UUkFMIEFGUklDQU4gUkVQVUJMSUM6T3Vha2E6SXBweQorNTpDRjpDQUY6Q0VOVFJBTCBBRlJJQ0FOIFJFUFVCTElDOk91YWthOktvdWFuZ28KKzE6Q0Y6Q0FGOkNFTlRSQUwgQUZSSUNBTiBSRVBVQkxJQzpPdWhhbTpCYXRhbmdhZm8KKzI6Q0Y6Q0FGOkNFTlRSQUwgQUZSSUNBTiBSRVBVQkxJQzpPdWhhbTpCb3NzYW5nb2EKKzM6Q0Y6Q0FGOkNFTlRSQUwgQUZSSUNBTiBSRVBVQkxJQzpPdWhhbTpCb3VjYQorNDpDRjpDQUY6Q0VOVFJBTCBBRlJJQ0FOIFJFUFVCTElDOk91aGFtOkthYm8KKzU6Q0Y6Q0FGOkNFTlRSQUwgQUZSSUNBTiBSRVBVQkxJQzpPdWhhbTpNYXJrb3VuZGEKKzE6Q0Y6Q0FGOkNFTlRSQUwgQUZSSUNBTiBSRVBVQkxJQzpIYXV0LU1ib21vdTpEamVtYWgKKzI6Q0Y6Q0FGOkNFTlRSQUwgQUZSSUNBTiBSRVBVQkxJQzpIYXV0LU1ib21vdTpPYm8KKzM6Q0Y6Q0FGOkNFTlRSQUwgQUZSSUNBTiBSRVBVQkxJQzpIYXV0LU1ib21vdTpaZW1pbworMTpDRjpDQUY6Q0VOVFJBTCBBRlJJQ0FOIFJFUFVCTElDOk1ib21vdTpCYWtvdW1hCisyOkNGOkNBRjpDRU5UUkFMIEFGUklDQU4gUkVQVUJMSUM6TWJvbW91OkJhbmdhc3NvdQorMzpDRjpDQUY6Q0VOVFJBTCBBRlJJQ0FOIFJFUFVCTElDOk1ib21vdTpHYW1iby1PdWFuZ28KKzQ6Q0Y6Q0FGOkNFTlRSQUwgQUZSSUNBTiBSRVBVQkxJQzpNYm9tb3U6UmFmYWkKKzE6Q0Y6Q0FGOkNFTlRSQUwgQUZSSUNBTiBSRVBVQkxJQzpOYW5hLUdyaWJpbmd1aTpLYWdhLUJhbmRvcm8KKzI6Q0Y6Q0FGOkNFTlRSQUwgQUZSSUNBTiBSRVBVQkxJQzpOYW5hLUdyaWJpbmd1aTpNYnJlcworMTpDRjpDQUY6Q0VOVFJBTCBBRlJJQ0FOIFJFUFVCTElDOkJhbmd1aTpCYW5ndWkKKzE6Q0Y6Q0FGOkNFTlRSQUwgQUZSSUNBTiBSRVBVQkxJQzpIYXV0ZS1Lb3R0bzpCcmlhCisyOkNGOkNBRjpDRU5UUkFMIEFGUklDQU4gUkVQVUJMSUM6SGF1dGUtS290dG86T3VhZGRhCiszOkNGOkNBRjpDRU5UUkFMIEFGUklDQU4gUkVQVUJMSUM6SGF1dGUtS290dG86WWFsaW5nYQorMTpDRjpDQUY6Q0VOVFJBTCBBRlJJQ0FOIFJFUFVCTElDOk91aGFtLVBlbmRlOkJvY2FyYW5nYQorMjpDRjpDQUY6Q0VOVFJBTCBBRlJJQ0FOIFJFUFVCTElDOk91aGFtLVBlbmRlOkJvem91bQorMzpDRjpDQUY6Q0VOVFJBTCBBRlJJQ0FOIFJFUFVCTElDOk91aGFtLVBlbmRlOlBhb3VhCisxOkNGOkNBRjpDRU5UUkFMIEFGUklDQU4gUkVQVUJMSUM6U2FuZ2hhOkJhbWJpbworMjpDRjpDQUY6Q0VOVFJBTCBBRlJJQ0FOIFJFUFVCTElDOlNhbmdoYTpOb2xhCisxOkNGOkNBRjpDRU5UUkFMIEFGUklDQU4gUkVQVUJMSUM6QmFtaW5ndWktQmFuZ29yYTpCYW1pbmd1aQorMjpDRjpDQUY6Q0VOVFJBTCBBRlJJQ0FOIFJFUFVCTElDOkJhbWluZ3VpLUJhbmdvcmE6TmRlbGUKKzE6Q0Y6Q0FGOkNFTlRSQUwgQUZSSUNBTiBSRVBVQkxJQzpMb2JheWU6Qm9kYQorMjpDRjpDQUY6Q0VOVFJBTCBBRlJJQ0FOIFJFUFVCTElDOkxvYmF5ZTpNYmFraQorMzpDRjpDQUY6Q0VOVFJBTCBBRlJJQ0FOIFJFUFVCTElDOkxvYmF5ZTpNb25nb3VtYmEKKzE6Q0Y6Q0FGOkNFTlRSQUwgQUZSSUNBTiBSRVBVQkxJQzpWYWthZ2E6QmlyYW8KKzI6Q0Y6Q0FGOkNFTlRSQUwgQUZSSUNBTiBSRVBVQkxJQzpWYWthZ2E6T3VhbmRqYS1EamFsbGUKKzE6Q0Y6Q0FGOkNFTlRSQUwgQUZSSUNBTiBSRVBVQkxJQzpCYXNzZS1Lb3R0bzpBbGluZGFvCisyOkNGOkNBRjpDRU5UUkFMIEFGUklDQU4gUkVQVUJMSUM6QmFzc2UtS290dG86S2VtYmUKKzM6Q0Y6Q0FGOkNFTlRSQUwgQUZSSUNBTiBSRVBVQkxJQzpCYXNzZS1Lb3R0bzpNaW5nYWxhCis0OkNGOkNBRjpDRU5UUkFMIEFGUklDQU4gUkVQVUJMSUM6QmFzc2UtS290dG86TW9iYXllCisxOkNGOkNBRjpDRU5UUkFMIEFGUklDQU4gUkVQVUJMSUM6TWFtYmVyZS1LYWRlaTpCZXJiZXJhdGkKKzI6Q0Y6Q0FGOkNFTlRSQUwgQUZSSUNBTiBSRVBVQkxJQzpNYW1iZXJlLUthZGVpOkNhcm5vdAorMzpDRjpDQUY6Q0VOVFJBTCBBRlJJQ0FOIFJFUFVCTElDOk1hbWJlcmUtS2FkZWk6R2FtYm91bGEKKzE6Q0Y6Q0FGOkNFTlRSQUwgQUZSSUNBTiBSRVBVQkxJQzpOYW5hLU1hbWJlcmU6QmFib3VhCisyOkNGOkNBRjpDRU5UUkFMIEFGUklDQU4gUkVQVUJMSUM6TmFuYS1NYW1iZXJlOkJhb3JvCiszOkNGOkNBRjpDRU5UUkFMIEFGUklDQU4gUkVQVUJMSUM6TmFuYS1NYW1iZXJlOkJvdWFyCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvQ0FOL0NBTl9BRE1JTjFfTEVYLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9DQU4vQ0FOX0FETUlOMV9MRVgudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFjNDNjMDUKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvQ0FOL0NBTl9BRE1JTjFfTEVYLnR4dApAQCAtMCwwICsxLDEzIEBACisxOkNBLUFCOkNBOkFMQkVSVEEKKzI6Q0EtQkM6Q0E6QlJJVElTSCBDT0xVTUJJQQorMzpDQS1NQjpDQTpNQU5JVE9CQQorNDpDQS1OQjpDQTpORVcgQlJVTlNXSUNLCis1OkNBLU5MOkNBOk5FV0ZPVU5ETEFORCBBTkQgTEFCUkFET1IKKzY6Q0EtTlQ6Q0E6Tk9SVEhXRVNUIFRFUlJJVE9SSUVTCis3OkNBLU5TOkNBOk5PVkEgU0NPVElBCis4OkNBLU5VOkNBOk5VTkFWVVQKKzk6Q0EtT046Q0E6T05UQVJJTworMTA6Q0EtUEU6Q0E6UFJJTkNFIEVEV0FSRCBJU0xBTkQKKzExOkNBLVFDOkNBOlFVRUJFQworMTI6Q0EtU0s6Q0E6U0FTS0FUQ0hFV0FOCisxMzpDQS1ZVDpDQTpZVUtPTiBURVJSSVRPUlkKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9DSEUvQ0hFX0FETUlOMV9MRVgudHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L0NIRS9DSEVfQURNSU4xX0xFWC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDQ1MTBlMAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9DSEUvQ0hFX0FETUlOMV9MRVgudHh0CkBAIC0wLDAgKzEsMjcgQEAKKzE6Q0gtQUc6Q0g6QUFSR0FVCisyOkNILUFSOkNIOkFQUEVOWkVMTCBBVVNTRVJSSE9ERU4KKzM6Q0gtQUk6Q0g6QVBQRU5aRUxMIElOTkVSUkhPREVOCis0OkNILUJMOkNIOkJBU0VMIExBTkRTQ0hBRlQKKzU6Q0gtQlM6Q0g6QkFTRUwgU1RBRFQKKzY6Q0gtQkU6Q0g6QkVSTi9CRVJORQorNzpDSC1GUjpDSDpGUklCT1VSRy9GUkVJQlVSRworODpDSC1HRTpDSDpHRU5FVkUKKzk6Q0gtR046Q0g6R0VOilZFCisxMDpDSC1HTDpDSDpHTEFSVVMKKzExOkNILUdSOkNIOkdSQVVCP05ERU4vR1JJR0lPTkkvR1JJU0NIVU4KKzEyOkNILUpVOkNIOkpVUkEKKzEzOkNILUxVOkNIOkxVWkVSTgorMTQ6Q0gtTlc6Q0g6TUlEV0FMREVOCisxNTpDSC1ORTpDSDpORVVDSEFURUwKKzE2OkNILU9XOkNIOk9CV0FMREVOCisxNzpDSC1TRzpDSDpTQU5LVCBHQUxMRU4KKzE4OkNILVNIOkNIOlNDSEFGRkhBVVNFTgorMTk6Q0gtU1o6Q0g6U0NIV1laCisyMDpDSC1TTzpDSDpTT0xPVEhVUk4KKzIxOkNILVRHOkNIOlRIVVJHQVUKKzIyOkNILVRJOkNIOlRJQ0lOTworMjM6Q0gtVVI6Q0g6VVJJCisyNDpDSC1WUzpDSDpWQUxBSVMvV0FMTElTCisyNTpDSC1WRDpDSDpWQVVECisyNjpDSC1aRzpDSDpaVUcKKzI3OkNILVpIOkNIOlpVUklDSApkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L0NIRS9DSEVfQURNSU4yX0xFWC50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvQ0hFL0NIRV9BRE1JTjJfTEVYLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNjlkZTI5Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L0NIRS9DSEVfQURNSU4yX0xFWC50eHQKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9DSEwvQ0hMX0FETUlOMV9MRVgudHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L0NITC9DSExfQURNSU4xX0xFWC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzdjYzkwNwotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9DSEwvQ0hMX0FETUlOMV9MRVgudHh0CkBAIC0wLDAgKzEsNTkgQEAKKzE6Q0wtQUk6Q0w6QUlTRU4KKzI6Q0wtQU5UOkNMOkFOVEFSVElDQSBDSElMRU5BCiszOkNMLUFOOkNMOkFOVE9GQUdBU1RBCis0OkNMLUFSOkNMOkFSQVVDQU5BCis1OkNMLUFSQzpDTDpBUkFVQ08KKzY6Q0wtQVJJOkNMOkFSSUNBCis3OkNMLUFUOkNMOkFUQUNBTUEKKzg6Q0wtQkk6Q0w6QklPQklPCis5OkNMLUNIUDpDTDpDQUNIQVBPQUwKKzEwOkNMLUNQVDpDTDpDQVBJVEFOIFBSQVQKKzExOkNMLUNBUjpDTDpDQVJERU5BTCBDQVJPCisxMjpDTC1DQVU6Q0w6Q0FVUVVFTkVTCisxMzpDTC1DVE46Q0w6Q0FVVElOCisxNDpDTC1DQlU6Q0w6Q0hBQ0FCVUNPCisxNTpDTC1DSE46Q0w6Q0hBTkFSQUwKKzE2OkNMLUNMRTpDTDpDSElMT0UKKzE3OkNMLUNQQTpDTDpDSE9BUEEKKzE4OkNMLUNIUTpDTDpDT0lIQUlRVUUKKzE5OkNMLUNIRzpDTDpDT0xDSEFHVUEKKzIwOkNMLUNPTjpDTDpDT05DRVBDSU9OCisyMTpDTC1DT1A6Q0w6Q09QSUFQTworMjI6Q0wtQ086Q0w6Q09RVUlNQk8KKzIzOkNMLUNPUjpDTDpDT1JESUxMRVJBCisyNDpDTC1DVVI6Q0w6Q1VSSUNPCisyNTpDTC1FTDpDTDpFTCBMT0EKKzI2OkNMLUVMUTpDTDpFTFFVSQorMjc6Q0wtR0NSOkNMOkdFTkVSQUwgQ0FSUkVSQQorMjg6Q0wtSFVBOkNMOkhVQVNDTworMjk6Q0wtSVFJOkNMOklRVUlRVUUKKzMwOkNMLUxJOkNMOkxJQkVSVEFET1IgR0VORVJBTCBCRVJOQVJETyBPSElHR0lOUworMzE6Q0wtTElNOkNMOkxJTUFSSQorMzI6Q0wtTElOOkNMOkxJTkFSRVMKKzMzOkNMLUxMQTpDTDpMTEFOUVVJSFVFCiszNDpDTC1BTkQ6Q0w6TE9TIEFOREVTCiszNTpDTC1MTDpDTDpMT1MgTEFHT1MKKzM2OkNMLU1BOkNMOk1BR0FMTEFORVMKKzM3OkNMLU1JUDpDTDpNQUlQTworMzg6Q0wtTUxMOkNMOk1BTExFQ08KKzM5OkNMLU1MOkNMOk1BVUxFCis0MDpDTC1NSUw6Q0w6TUVMSVBJTExBCis0MTpDTC1OVUI6Q0w6TlVCTEUKKzQyOkNMLU9TUjpDTDpPU09STk8KKzQzOkNMLVBBTDpDTDpQQUxFTkEKKzQ0OkNMLVBBTjpDTDpQQVJJTkFDT1RBCis0NTpDTC1QRVQ6Q0w6UEVUT1JDQQorNDY6Q0wtUVVJOkNMOlFVSUxMT1RBCis0NzpDTC1STTpDTDpSRUdJTiBNRVRST1BPTElUQU5BIERFIFNBTlRJQUdPCis0ODpDTC1TQVQ6Q0w6U0FOIEFOVE9OSU8KKzQ5OkNMLUFDTzpDTDpTQU4gRkVMSVBFIERFIEFDT05DQUdVQQorNTA6Q0wtU0dPOkNMOlNBTlRJQUdPCis1MTpDTC1UQUw6Q0w6VEFMQUdBTlRFCis1MjpDTC1UQ0E6Q0w6VEFMQ0EKKzUzOkNMLVRBOkNMOlRBUkFQQUMKKzU0OkNMLVRGOkNMOlRJRVJSQSBERUwgRlVFR08KKzU1OkNMLVRPQzpDTDpUT0NPUElMTEEKKzU2OkNMLUVTUDpDTDpVTFRJTUEgRVNQRVJBTlpBCis1NzpDTC1WREk6Q0w6VkFMRElWSUEKKzU4OkNMLVZBTDpDTDpWQUxQQVJBSVNPCis1OTpDTC1WUzpDTDpWQUxQQVJBU08KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9DSEwvQ0hMX0FETUlOMl9MRVgudHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L0NITC9DSExfQURNSU4yX0xFWC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjY2ODI1MQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9DSEwvQ0hMX0FETUlOMl9MRVgudHh0CkBAIC0wLDAgKzEsMzI0IEBACisxOkNMOkNITDpDSElMRTpWQUxESVZJQTpDb3JyYWwKKzI6Q0w6Q0hMOkNISUxFOlZBTERJVklBOkZ1dHJvbm8KKzM6Q0w6Q0hMOkNISUxFOlZBTERJVklBOkxhZ28gUmFuY28KKzQ6Q0w6Q0hMOkNISUxFOlZBTERJVklBOkxhbmNvCis1OkNMOkNITDpDSElMRTpWQUxESVZJQTpMb3MgTGFnb3MKKzY6Q0w6Q0hMOkNISUxFOlZBTERJVklBOk1hZmlsCis3OkNMOkNITDpDSElMRTpWQUxESVZJQTpNYXJpcXVpbmEKKzg6Q0w6Q0hMOkNISUxFOlZBTERJVklBOlBhaWxsYWNvCis5OkNMOkNITDpDSElMRTpWQUxESVZJQTpQYW5ndWlwdWxsaQorMTA6Q0w6Q0hMOkNISUxFOlZBTERJVklBOlJpbyBCdWVubworMTE6Q0w6Q0hMOkNISUxFOlZBTERJVklBOlZhbGRpdmlhCisxMjpDTDpDSEw6Q0hJTEU6VkFMRElWSUE6VmFsZGl2aWEgKElzLikKKzE6Q0w6Q0hMOkNISUxFOk5VQkxFOkJ1bG5lcworMjpDTDpDSEw6Q0hJTEU6TlVCTEU6Q2hpbGxhbgorMzpDTDpDSEw6Q0hJTEU6TlVCTEU6Q29icXVlY3VyYQorNDpDTDpDSEw6Q0hJTEU6TlVCTEU6Q29lbGVtdQorNTpDTDpDSEw6Q0hJTEU6TlVCTEU6Q29paHVlY28KKzY6Q0w6Q0hMOkNISUxFOk5VQkxFOkVsIENhcm1lbgorNzpDTDpDSEw6Q0hJTEU6TlVCTEU6TmluaHVlCis4OkNMOkNITDpDSElMRTpOVUJMRTpOaXF1ZW4KKzk6Q0w6Q0hMOkNISUxFOk5VQkxFOlBlbXVjbworMTA6Q0w6Q0hMOkNISUxFOk5VQkxFOlBpbnRvCisxMTpDTDpDSEw6Q0hJTEU6TlVCTEU6UG9ydGV6dWVsbworMTI6Q0w6Q0hMOkNISUxFOk5VQkxFOlF1aWxsb24KKzEzOkNMOkNITDpDSElMRTpOVUJMRTpRdWlyaWh1ZQorMTQ6Q0w6Q0hMOkNISUxFOk5VQkxFOlJhbnF1aWwKKzE1OkNMOkNITDpDSElMRTpOVUJMRTpTYW4gQ2FybG9zCisxNjpDTDpDSEw6Q0hJTEU6TlVCTEU6U2FuIEZhYmlhbgorMTc6Q0w6Q0hMOkNISUxFOk5VQkxFOlNhbiBJZ25hY2lvCisxODpDTDpDSEw6Q0hJTEU6TlVCTEU6U2FuIE5pY29sYXMKKzE5OkNMOkNITDpDSElMRTpOVUJMRTpUcmVodWFjbworMjA6Q0w6Q0hMOkNISUxFOk5VQkxFOll1bmdheQorMTpDTDpDSEw6Q0hJTEU6RUwgTE9BOkNhbGFtYQorMjpDTDpDSEw6Q0hJTEU6RUwgTE9BOk9sbGFndWUKKzM6Q0w6Q0hMOkNISUxFOkVMIExPQTpTYW4gUGVkcm8gZGUgQXRhY2FtYQorMTpDTDpDSEw6Q0hJTEU6QVJBVUNPOkFyYXVjbworMjpDTDpDSEw6Q0hJTEU6QVJBVUNPOkFyYXVjbyAoSXMuKQorMzpDTDpDSEw6Q0hJTEU6QVJBVUNPOkNhbmV0ZQorNDpDTDpDSEw6Q0hJTEU6QVJBVUNPOkNvbnR1bG1vCis1OkNMOkNITDpDSElMRTpBUkFVQ086Q3VyYW5pbGFodWUKKzY6Q0w6Q0hMOkNISUxFOkFSQVVDTzpMZWJ1Cis3OkNMOkNITDpDSElMRTpBUkFVQ086TG9zIEFsYW1vcworODpDTDpDSEw6Q0hJTEU6QVJBVUNPOlRpcnVhCis5OkNMOkNITDpDSElMRTpBUkFVQ086VGlydWEgKElzLikKKzE6Q0w6Q0hMOkNISUxFOlNBTlRJQUdPOlNhbnRpYWdvCisxOkNMOkNITDpDSElMRTpBTlRBUlRJQ0EgQ0hJTEVOQTpOYXZhcmlubyAoSXMuKQorMTpDTDpDSEw6Q0hJTEU6RUxRVUk6QW5kYWNvbGxvCisyOkNMOkNITDpDSElMRTpFTFFVSTpDb3F1aW1ibworMzpDTDpDSEw6Q0hJTEU6RUxRVUk6TGEgSGlndWVyYQorNDpDTDpDSEw6Q0hJTEU6RUxRVUk6TGEgSGlndWVyYSAoSXMuKQorNTpDTDpDSEw6Q0hJTEU6RUxRVUk6TGEgU2VyZW5hCis2OkNMOkNITDpDSElMRTpFTFFVSTpQYWlndWFubworNzpDTDpDSEw6Q0hJTEU6RUxRVUk6VmljdW5hCisxOkNMOkNITDpDSElMRTpHRU5FUkFMIENBUlJFUkE6Q2hpbGUgQ2hpY28KKzI6Q0w6Q0hMOkNISUxFOkdFTkVSQUwgQ0FSUkVSQTpSaW8gSWJhbmV6CisxOkNMOkNITDpDSElMRTpNQUlQTzpCdWluCisyOkNMOkNITDpDSElMRTpNQUlQTzpDYWxlcmEgRGUgVGFuZ28KKzM6Q0w6Q0hMOkNISUxFOk1BSVBPOlBhaW5lCis0OkNMOkNITDpDSElMRTpNQUlQTzpTYW4gQmVybmFyZG8KKzE6Q0w6Q0hMOkNISUxFOkxMQU5RVUlIVUU6Q2FsYnVjbyAoSXMuKQorMjpDTDpDSEw6Q0hJTEU6TExBTlFVSUhVRTpDb2NoYW1vCiszOkNMOkNITDpDSElMRTpMTEFOUVVJSFVFOkNvY2hhbW8gKElzLikKKzQ6Q0w6Q0hMOkNISUxFOkxMQU5RVUlIVUU6RnJlc2lhCis1OkNMOkNITDpDSElMRTpMTEFOUVVJSFVFOkZydXRpbGxhcgorNjpDTDpDSEw6Q0hJTEU6TExBTlFVSUhVRTpJc2xhCis3OkNMOkNITDpDSElMRTpMTEFOUVVJSFVFOkxMYW5xdWlodWUKKzg6Q0w6Q0hMOkNISUxFOkxMQU5RVUlIVUU6TG9zIE11ZXJtb3MKKzk6Q0w6Q0hMOkNISUxFOkxMQU5RVUlIVUU6TWF1bGxpbgorMTA6Q0w6Q0hMOkNISUxFOkxMQU5RVUlIVUU6UHVlcnRvIE1vbnR0CisxMTpDTDpDSEw6Q0hJTEU6TExBTlFVSUhVRTpQdWVydG8gVmFyYXMKKzE6Q0w6Q0hMOkNISUxFOk1FTElQSUxMQTpBbGh1ZQorMjpDTDpDSEw6Q0hJTEU6TUVMSVBJTExBOkN1cmFjYXZpCiszOkNMOkNITDpDSElMRTpNRUxJUElMTEE6TWFyaWEgUGludG8KKzQ6Q0w6Q0hMOkNISUxFOk1FTElQSUxMQTpNZWxpcGlsbGEKKzU6Q0w6Q0hMOkNISUxFOk1FTElQSUxMQTpTYW4gUGVkcm8KKzE6Q0w6Q0hMOkNISUxFOlRJRVJSQSBERUwgRlVFR086UHJpbWF2ZXJhCisyOkNMOkNITDpDSElMRTpUSUVSUkEgREVMIEZVRUdPOlByaW1hdmVyYSAoSXMuKQorMzpDTDpDSEw6Q0hJTEU6VElFUlJBIERFTCBGVUVHTzpUaW1hdWtlbAorNDpDTDpDSEw6Q0hJTEU6VElFUlJBIERFTCBGVUVHTzpUaW1hdWtlbCAoSXMuKQorMTpDTDpDSEw6Q0hJTEU6Q0FDSEFQT0FMOkNvZGVndWEKKzI6Q0w6Q0hMOkNISUxFOkNBQ0hBUE9BTDpDb2luY28KKzM6Q0w6Q0hMOkNISUxFOkNBQ0hBUE9BTDpDb2x0YXVjbworNDpDTDpDSEw6Q0hJTEU6Q0FDSEFQT0FMOkRvbmlodWUKKzU6Q0w6Q0hMOkNISUxFOkNBQ0hBUE9BTDpHcmFuZXJvcworNjpDTDpDSEw6Q0hJTEU6Q0FDSEFQT0FMOkxhcyBDYWJyYXMKKzc6Q0w6Q0hMOkNISUxFOkNBQ0hBUE9BTDpNYWNoYWxpCis4OkNMOkNITDpDSElMRTpDQUNIQVBPQUw6TWFsbG9hCis5OkNMOkNITDpDSElMRTpDQUNIQVBPQUw6TW9zdGF6YWwKKzEwOkNMOkNITDpDSElMRTpDQUNIQVBPQUw6T2xpdmFyCisxMTpDTDpDSEw6Q0hJTEU6Q0FDSEFQT0FMOlBldW1vCisxMjpDTDpDSEw6Q0hJTEU6Q0FDSEFQT0FMOlBpY2hpZGVndWEKKzEzOkNMOkNITDpDSElMRTpDQUNIQVBPQUw6UXVpbnRhIERlIFRpbGNvY28KKzE0OkNMOkNITDpDSElMRTpDQUNIQVBPQUw6UmFuY2FndWEKKzE1OkNMOkNITDpDSElMRTpDQUNIQVBPQUw6UmVuZ28KKzE2OkNMOkNITDpDSElMRTpDQUNIQVBPQUw6UmVxdWluYW8KKzE3OkNMOkNITDpDSElMRTpDQUNIQVBPQUw6U2FuIFZpY2VudGUKKzE6Q0w6Q0hMOkNISUxFOkFOVE9GQUdBU1RBOkFudG9mYWdhc3RhCisyOkNMOkNITDpDSElMRTpBTlRPRkFHQVNUQTpBbnRvZmFnYXN0YSAoSXMuKQorMzpDTDpDSEw6Q0hJTEU6QU5UT0ZBR0FTVEE6TWVqaWxsb25lcworNDpDTDpDSEw6Q0hJTEU6QU5UT0ZBR0FTVEE6U2llcnJhIEdvcmRhCis1OkNMOkNITDpDSElMRTpBTlRPRkFHQVNUQTpUYWx0YWwKKzE6Q0w6Q0hMOkNISUxFOkNPTkNFUENJT046Q29uY2VwY2lvbgorMjpDTDpDSEw6Q0hJTEU6Q09OQ0VQQ0lPTjpDb3JvbmVsCiszOkNMOkNITDpDSElMRTpDT05DRVBDSU9OOkZsb3JpZGEKKzQ6Q0w6Q0hMOkNISUxFOkNPTkNFUENJT046SHVhbHF1aQorNTpDTDpDSEw6Q0hJTEU6Q09OQ0VQQ0lPTjpMb3RhCis2OkNMOkNITDpDSElMRTpDT05DRVBDSU9OOlBlbmNvCis3OkNMOkNITDpDSElMRTpDT05DRVBDSU9OOlNhbnRhIEp1YW5hCis4OkNMOkNITDpDSElMRTpDT05DRVBDSU9OOlRhbGNhaHVhbm8KKzk6Q0w6Q0hMOkNISUxFOkNPTkNFUENJT046VGFsY2FodWFubyAoSXMuKQorMTA6Q0w6Q0hMOkNISUxFOkNPTkNFUENJT046VG9tZQorMTpDTDpDSEw6Q0hJTEU6Q0hJTE9FOkFuY3VkCisyOkNMOkNITDpDSElMRTpDSElMT0U6Q2FzdHJvCiszOkNMOkNITDpDSElMRTpDSElMT0U6Q2FzdHJvIChJcy4pCis0OkNMOkNITDpDSElMRTpDSElMT0U6Q2hvbmNoaQorNTpDTDpDSEw6Q0hJTEU6Q0hJTE9FOkN1cmFjbyBEZSBWZWxlegorNjpDTDpDSEw6Q0hJTEU6Q0hJTE9FOkRhbGNhaHVlCis3OkNMOkNITDpDSElMRTpDSElMT0U6UHVxdWVsZG9uCis4OkNMOkNITDpDSElMRTpDSElMT0U6UXVlaWxlbgorOTpDTDpDSEw6Q0hJTEU6Q0hJTE9FOlF1ZWlsZW4gKElzLikKKzEwOkNMOkNITDpDSElMRTpDSElMT0U6UXVlbGxvbgorMTE6Q0w6Q0hMOkNISUxFOkNISUxPRTpRdWVsbG9uIChJcy4pCisxMjpDTDpDSEw6Q0hJTEU6Q0hJTE9FOlF1ZW1jaGkKKzEzOkNMOkNITDpDSElMRTpDSElMT0U6UXVlbWNoaSAoSXMuKQorMTQ6Q0w6Q0hMOkNISUxFOkNISUxPRTpRdWluY2hhbyAoSXMuKQorMTpDTDpDSEw6Q0hJTEU6UEFMRU5BOkNoYWl0ZW4KKzI6Q0w6Q0hMOkNISUxFOlBBTEVOQTpDaGFpdGVuIChJcy4pCiszOkNMOkNITDpDSElMRTpQQUxFTkE6RnV0YWxldWZ1Cis0OkNMOkNITDpDSElMRTpQQUxFTkE6SHVhbGFpaHVlCis1OkNMOkNITDpDSElMRTpQQUxFTkE6SHVhbGFpaHVlIChJcy4pCis2OkNMOkNITDpDSElMRTpQQUxFTkE6UGFsZW5hCisxOkNMOkNITDpDSElMRTpIVUFTQ086QWx0byBkZWwgQ2FybWVuCisyOkNMOkNITDpDSElMRTpIVUFTQ086RnJlaXJpbmEKKzM6Q0w6Q0hMOkNISUxFOkhVQVNDTzpGcmVpcmluYSAoSXMuKQorNDpDTDpDSEw6Q0hJTEU6SFVBU0NPOkh1YXNjbworNTpDTDpDSEw6Q0hJTEU6SFVBU0NPOkh1YXNjbyAoSXMuKQorNjpDTDpDSEw6Q0hJTEU6SFVBU0NPOlZhbGxlbmFyCisxOkNMOkNITDpDSElMRTpDSE9BUEE6SWxsYXBlbAorMjpDTDpDSEw6Q0hJTEU6Q0hPQVBBOkxvcyBWaWxvcworMzpDTDpDSEw6Q0hJTEU6Q0hPQVBBOkxvcyBWaWxvcyAoSXMuKQorNDpDTDpDSEw6Q0hJTEU6Q0hPQVBBOk1pbmNoYQorNTpDTDpDSEw6Q0hJTEU6Q0hPQVBBOlNhbGFtYW5jYQorMTpDTDpDSEw6Q0hJTEU6UVVJTExPVEE6Q2FsZXJhCisyOkNMOkNITDpDSElMRTpRVUlMTE9UQTpIaWp1ZWxhcworMzpDTDpDSEw6Q0hJTEU6UVVJTExPVEE6TGEgQ3J1egorNDpDTDpDSEw6Q0hJTEU6UVVJTExPVEE6TGltYWNoZQorNTpDTDpDSEw6Q0hJTEU6UVVJTExPVEE6Tm9nYWxlcworNjpDTDpDSEw6Q0hJTEU6UVVJTExPVEE6T2xtdWUKKzc6Q0w6Q0hMOkNISUxFOlFVSUxMT1RBOlF1aWxsb3RhCisxOkNMOkNITDpDSElMRTpUQUxBR0FOVEU6RWwgTW9udGUKKzI6Q0w6Q0hMOkNISUxFOlRBTEFHQU5URTpJc2xhIERlIE1haXBvCiszOkNMOkNITDpDSElMRTpUQUxBR0FOVEU6UGVuYWZsb3IKKzQ6Q0w6Q0hMOkNISUxFOlRBTEFHQU5URTpUYWxhZ2FudGUKKzE6Q0w6Q0hMOkNISUxFOkNPTENIQUdVQTpDaGVwaWNhCisyOkNMOkNITDpDSElMRTpDT0xDSEFHVUE6Q2hpbWJhcm9uZ28KKzM6Q0w6Q0hMOkNISUxFOkNPTENIQUdVQTpMb2xvbAorNDpDTDpDSEw6Q0hJTEU6Q09MQ0hBR1VBOk5hbmNhZ3VhCis1OkNMOkNITDpDSElMRTpDT0xDSEFHVUE6UGFsbWlsbGEKKzY6Q0w6Q0hMOkNISUxFOkNPTENIQUdVQTpQZXJhbGlsbG8KKzc6Q0w6Q0hMOkNISUxFOkNPTENIQUdVQTpQbGFjaWxsYQorODpDTDpDSEw6Q0hJTEU6Q09MQ0hBR1VBOlB1bWFucXVlCis5OkNMOkNITDpDSElMRTpDT0xDSEFHVUE6U2FuIEZlcm5hbmRvCisxMDpDTDpDSEw6Q0hJTEU6Q09MQ0hBR1VBOlNhbnRhIENydXoKKzE6Q0w6Q0hMOkNISUxFOkNBVVFVRU5FUzpDYXVxdWVuZXMKKzI6Q0w6Q0hMOkNISUxFOkNBVVFVRU5FUzpDaGFuY28KKzM6Q0w6Q0hMOkNISUxFOkNBVVFVRU5FUzpQZWxsdWh1ZQorMTpDTDpDSEw6Q0hJTEU6TElOQVJFUzpDb2xidW4KKzI6Q0w6Q0hMOkNISUxFOkxJTkFSRVM6TGluYXJlcworMzpDTDpDSEw6Q0hJTEU6TElOQVJFUzpMb25nYXZpCis0OkNMOkNITDpDSElMRTpMSU5BUkVTOlBhcnJhbAorNTpDTDpDSEw6Q0hJTEU6TElOQVJFUzpSZXRpcm8KKzY6Q0w6Q0hMOkNISUxFOkxJTkFSRVM6U2FuIEphdmllcgorNzpDTDpDSEw6Q0hJTEU6TElOQVJFUzpWaWxsYSBBbGVncmUKKzg6Q0w6Q0hMOkNISUxFOkxJTkFSRVM6WWVyYmFzIGJ1ZW5hcworMTpDTDpDSEw6Q0hJTEU6Q0hBQ0FCVUNPOkNITC5MMi4xCisyOkNMOkNITDpDSElMRTpDSEFDQUJVQ086Q0hMLkwyLjIKKzM6Q0w6Q0hMOkNISUxFOkNIQUNBQlVDTzpDb2xpbmEKKzE6Q0w6Q0hMOkNISUxFOkFJU0VOOkFpc2VuIChJcy4pCisyOkNMOkNITDpDSElMRTpBSVNFTjpDaXNuZXMKKzM6Q0w6Q0hMOkNISUxFOkFJU0VOOkNpc25lcyAoSXMuKQorNDpDTDpDSEw6Q0hJTEU6QUlTRU46R3VhaXRhY2FzCis1OkNMOkNITDpDSElMRTpBSVNFTjpHdWFpdGVjYXMgKElzLikKKzE6Q0w6Q0hMOkNISUxFOkFSSUNBOkFyaWNhCisyOkNMOkNITDpDSElMRTpBUklDQTpDYW1hcm9uZXMKKzE6Q0w6Q0hMOkNISUxFOklRVUlRVUU6Q2FtaW5hCisyOkNMOkNITDpDSElMRTpJUVVJUVVFOkNvbGNoYW5lCiszOkNMOkNITDpDSElMRTpJUVVJUVVFOkh1YXJhCis0OkNMOkNITDpDSElMRTpJUVVJUVVFOklxdWlxdWUKKzU6Q0w6Q0hMOkNISUxFOklRVUlRVUU6UGljYQorNjpDTDpDSEw6Q0hJTEU6SVFVSVFVRTpQb3pvIEFsbW9udGUKKzE6Q0w6Q0hMOkNISUxFOkNBUkRFTkFMIENBUk86TGEgRXN0cmVsbGEKKzI6Q0w6Q0hMOkNISUxFOkNBUkRFTkFMIENBUk86TGl0dWVjaGUKKzM6Q0w6Q0hMOkNISUxFOkNBUkRFTkFMIENBUk86TWFyY2hpaHVlCis0OkNMOkNITDpDSElMRTpDQVJERU5BTCBDQVJPOk5hdmlkYWQKKzU6Q0w6Q0hMOkNISUxFOkNBUkRFTkFMIENBUk86UGFyZWRvbmVzCis2OkNMOkNITDpDSElMRTpDQVJERU5BTCBDQVJPOlBpY2hpbGVtdQorMTpDTDpDSEw6Q0hJTEU6Q09QSUFQTzpDYWxkZXJhCisyOkNMOkNITDpDSElMRTpDT1BJQVBPOkNhbGRlcmEgKElzLikKKzM6Q0w6Q0hMOkNISUxFOkNPUElBUE86Q29waWFwbworNDpDTDpDSEw6Q0hJTEU6Q09QSUFQTzpUaWVycmEgQW1hcmlsbGEKKzE6Q0w6Q0hMOkNISUxFOkxJTUFSSTpDb21iYXJiYWxhCisyOkNMOkNITDpDSElMRTpMSU1BUkk6TW9udGUgUGF0cmlhCiszOkNMOkNITDpDSElMRTpMSU1BUkk6T3ZhbGxlCis0OkNMOkNITDpDSElMRTpMSU1BUkk6UHVuaXRhcXVpCis1OkNMOkNITDpDSElMRTpMSU1BUkk6UmlvIEh1cnRhZG8KKzE6Q0w6Q0hMOkNISUxFOlRBTENBOkNvbnN0aXR1Y2lvbgorMjpDTDpDSEw6Q0hJTEU6VEFMQ0E6Q3VyZXB0bworMzpDTDpDSEw6Q0hJTEU6VEFMQ0E6RW1wZWRyYWRvCis0OkNMOkNITDpDSElMRTpUQUxDQTpNYXVsZQorNTpDTDpDSEw6Q0hJTEU6VEFMQ0E6UGVsYXJjbworNjpDTDpDSEw6Q0hJTEU6VEFMQ0E6UGVuY2FodWUKKzc6Q0w6Q0hMOkNISUxFOlRBTENBOlJpbyBDbGFybworODpDTDpDSEw6Q0hJTEU6VEFMQ0E6U2FuIENsZW1lbnRlCis5OkNMOkNITDpDSElMRTpUQUxDQTpUYWxjYQorMTpDTDpDSEw6Q0hJTEU6Q0FQSVRBTiBQUkFUOkNvY2hyYW5lCisyOkNMOkNITDpDSElMRTpDQVBJVEFOIFBSQVQ6TmF0YWxlcyAoSXMuKQorMzpDTDpDSEw6Q0hJTEU6Q0FQSVRBTiBQUkFUOk8naGlnZ2lucworNDpDTDpDSEw6Q0hJTEU6Q0FQSVRBTiBQUkFUOlRvcnRlbCAoSXMuKQorMTpDTDpDSEw6Q0hJTEU6QklPQklPOkFudHVjbworMjpDTDpDSEw6Q0hJTEU6QklPQklPOkNhYnJlcm8KKzM6Q0w6Q0hMOkNISUxFOkJJT0JJTzpMYWphCis0OkNMOkNITDpDSElMRTpCSU9CSU86TG9zIEFuZ2VsZXMKKzU6Q0w6Q0hMOkNISUxFOkJJT0JJTzpNdWxjaGVuCis2OkNMOkNITDpDSElMRTpCSU9CSU86TmFjaW1pZW50bworNzpDTDpDSEw6Q0hJTEU6QklPQklPOk5lZ3JldGUKKzg6Q0w6Q0hMOkNISUxFOkJJT0JJTzpRdWlsYWdvCis5OkNMOkNITDpDSElMRTpCSU9CSU86UXVpbGxlZ28KKzEwOkNMOkNITDpDSElMRTpCSU9CSU86Um9zZW5kbworMTE6Q0w6Q0hMOkNISUxFOkJJT0JJTzpTYW50YSBCYXJiYXJhCisxMjpDTDpDSEw6Q0hJTEU6QklPQklPOlR1Y2FwZWwKKzEzOkNMOkNITDpDSElMRTpCSU9CSU86WXVtYmVsCisxOkNMOkNITDpDSElMRTpWQUxQQVJBSVNPOkNhc2EgQmxhbmNhCisyOkNMOkNITDpDSElMRTpWQUxQQVJBSVNPOlB1Y2h1bmNhdmkKKzM6Q0w6Q0hMOkNISUxFOlZBTFBBUkFJU086UXVpbHB1ZQorNDpDTDpDSEw6Q0hJTEU6VkFMUEFSQUlTTzpRdWludGVybworNTpDTDpDSEw6Q0hJTEU6VkFMUEFSQUlTTzpWYWxwYXJhaXNvCis2OkNMOkNITDpDSElMRTpWQUxQQVJBSVNPOlZpbGxhIEFsZW1hbmEKKzc6Q0w6Q0hMOkNISUxFOlZBTFBBUkFJU086VmluYSBkZWwgTWFyCisxOkNMOkNITDpDSElMRTpUT0NPUElMTEE6TWFyaWEgRWxlbmEKKzI6Q0w6Q0hMOkNISUxFOlRPQ09QSUxMQTpUb2NvcGlsbGEKKzE6Q0w6Q0hMOkNISUxFOkNIQU5BUkFMOkNoYW5hcmFsCisyOkNMOkNITDpDSElMRTpDSEFOQVJBTDpDaGFuYXJhbCAoSXMuKQorMzpDTDpDSEw6Q0hJTEU6Q0hBTkFSQUw6RGllZ28gZGUgQWxtYWdybworMTpDTDpDSEw6Q0hJTEU6U0FOIEZFTElQRSBERSBBQ09OQ0FHVUE6Q2F0ZW11CisyOkNMOkNITDpDSElMRTpTQU4gRkVMSVBFIERFIEFDT05DQUdVQTpMbGFpbGxheQorMzpDTDpDSEw6Q0hJTEU6U0FOIEZFTElQRSBERSBBQ09OQ0FHVUE6UGFucXVlaHVlCis0OkNMOkNITDpDSElMRTpTQU4gRkVMSVBFIERFIEFDT05DQUdVQTpQdXRhZW5kbworNTpDTDpDSEw6Q0hJTEU6U0FOIEZFTElQRSBERSBBQ09OQ0FHVUE6U2FuIEZlbGlwZQorNjpDTDpDSEw6Q0hJTEU6U0FOIEZFTElQRSBERSBBQ09OQ0FHVUE6U2FudGEgTWFyaWEKKzE6Q0w6Q0hMOkNISUxFOkNPSUhBSVFVRTpDb2loYWlxdWUKKzI6Q0w6Q0hMOkNISUxFOkNPSUhBSVFVRTpMYWdvIFZlcmRlCisxOkNMOkNITDpDSElMRTpQQVJJTkFDT1RBOkdlbmVyYWwgTGFnb3MKKzI6Q0w6Q0hMOkNISUxFOlBBUklOQUNPVEE6UHV0cmUKKzE6Q0w6Q0hMOkNISUxFOlVMVElNQSBFU1BFUkFOWkE6TmF0YWxlcworMjpDTDpDSEw6Q0hJTEU6VUxUSU1BIEVTUEVSQU5aQTpOYXRhbGVzIChJcy4pCiszOkNMOkNITDpDSElMRTpVTFRJTUEgRVNQRVJBTlpBOlRvcnJlcyBEZSBQYWluZQorMTpDTDpDSEw6Q0hJTEU6Q0FVVElOOkNhcmFodWUKKzI6Q0w6Q0hMOkNISUxFOkNBVVRJTjpDdW5jbworMzpDTDpDSEw6Q0hJTEU6Q0FVVElOOkN1cmFycmVodWUKKzQ6Q0w6Q0hMOkNISUxFOkNBVVRJTjpGcmVpcmUKKzU6Q0w6Q0hMOkNISUxFOkNBVVRJTjpHYWx2YXJpbm8KKzY6Q0w6Q0hMOkNISUxFOkNBVVRJTjpHb2xiZWEKKzc6Q0w6Q0hMOkNISUxFOkNBVVRJTjpMYXV0YXJvCis4OkNMOkNITDpDSElMRTpDQVVUSU46TG9uY29jaGUKKzk6Q0w6Q0hMOkNISUxFOkNBVVRJTjpNZWxpcGV1Y28KKzEwOkNMOkNITDpDSElMRTpDQVVUSU46TnVldmEgSW1wZXJpYWwKKzExOkNMOkNITDpDSElMRTpDQVVUSU46UGVycXVlbmNvCisxMjpDTDpDSEw6Q0hJTEU6Q0FVVElOOlBpdHJ1ZnF1ZW4KKzEzOkNMOkNITDpDSElMRTpDQVVUSU46UHVjb24KKzE0OkNMOkNITDpDSElMRTpDQVVUSU46U2FhdmVkcmEKKzE1OkNMOkNITDpDSElMRTpDQVVUSU46VGVtdWNvCisxNjpDTDpDSEw6Q0hJTEU6Q0FVVElOOlRlb2Rvcm8gU2NobWlkdAorMTc6Q0w6Q0hMOkNISUxFOkNBVVRJTjpUb2x0ZW4KKzE4OkNMOkNITDpDSElMRTpDQVVUSU46VmlsY3VuCisxOTpDTDpDSEw6Q0hJTEU6Q0FVVElOOlZpbGxhcnJpY2EKKzE6Q0w6Q0hMOkNISUxFOk9TT1JOTzpFbnRyZSBMYWdvcworMjpDTDpDSEw6Q0hJTEU6T1NPUk5POk9zb3JubworMzpDTDpDSEw6Q0hJTEU6T1NPUk5POlB1ZXJ0byBPY3RheQorNDpDTDpDSEw6Q0hJTEU6T1NPUk5POlB1cnJhbnF1ZQorNTpDTDpDSEw6Q0hJTEU6T1NPUk5POlJpbyBOZWdybworNjpDTDpDSEw6Q0hJTEU6T1NPUk5POlNhbiBKdWFuIERlIExhIENvc3RhCis3OkNMOkNITDpDSElMRTpPU09STk86U2FuIHBhYmxvCisxOkNMOkNITDpDSElMRTpMT1MgQU5ERVM6Q2FsbGUgTGFyZ2EKKzI6Q0w6Q0hMOkNISUxFOkxPUyBBTkRFUzpMb3MgQW5kZXMKKzM6Q0w6Q0hMOkNISUxFOkxPUyBBTkRFUzpSaW5jb25hZGEKKzQ6Q0w6Q0hMOkNISUxFOkxPUyBBTkRFUzpTYW4gRXN0ZWJhbgorMTpDTDpDSEw6Q0hJTEU6TUFHQUxMQU5FUzpDSEwuTDIuMworMjpDTDpDSEw6Q0hJTEU6TUFHQUxMQU5FUzpQdW50YSBBcmVuYXMgKElzLikKKzM6Q0w6Q0hMOkNISUxFOk1BR0FMTEFORVM6UmlvIFZlcmRlCis0OkNMOkNITDpDSElMRTpNQUdBTExBTkVTOlJpbyBWZXJkZSAoSXMuKQorMTpDTDpDSEw6Q0hJTEU6Q09SRElMTEVSQTpQaXJxdWUKKzI6Q0w6Q0hMOkNISUxFOkNPUkRJTExFUkE6UHVlbnRlIEFsdG8KKzM6Q0w6Q0hMOkNISUxFOkNPUkRJTExFUkE6c2FuIGpvZGUgZGUgTWFpcG8KKzE6Q0w6Q0hMOkNISUxFOkNVUklDTzpDdXJpY28KKzI6Q0w6Q0hMOkNISUxFOkNVUklDTzpIdWFsYW5lCiszOkNMOkNITDpDSElMRTpDVVJJQ086TGljYW50ZW4KKzQ6Q0w6Q0hMOkNISUxFOkNVUklDTzpNb2xpbmEKKzU6Q0w6Q0hMOkNISUxFOkNVUklDTzpSYXVjbworNjpDTDpDSEw6Q0hJTEU6Q1VSSUNPOlJvbWVyYWwKKzc6Q0w6Q0hMOkNISUxFOkNVUklDTzpTYWdyYWRhIEZhbWlsaWEKKzg6Q0w6Q0hMOkNISUxFOkNVUklDTzpUZW5vCis5OkNMOkNITDpDSElMRTpDVVJJQ086VmljaHVxdWVuCisxOkNMOkNITDpDSElMRTpQRVRPUkNBOkNhYmlsZG8KKzI6Q0w6Q0hMOkNISUxFOlBFVE9SQ0E6TGEgTGlndWEKKzM6Q0w6Q0hMOkNISUxFOlBFVE9SQ0E6UGFwdWRvCis0OkNMOkNITDpDSElMRTpQRVRPUkNBOlBldG9yY2EKKzU6Q0w6Q0hMOkNISUxFOlBFVE9SQ0E6WmFwYWxsYXIKKzE6Q0w6Q0hMOkNISUxFOk1BTExFQ086QW5nb2wKKzI6Q0w6Q0hMOkNISUxFOk1BTExFQ086Q29sbGlwdWxsaQorMzpDTDpDSEw6Q0hJTEU6TUFMTEVDTzpDdXJhY2F1dGluCis0OkNMOkNITDpDSElMRTpNQUxMRUNPOkVyY2lsbGEKKzU6Q0w6Q0hMOkNISUxFOk1BTExFQ086TG9ucXVpbWF5Cis2OkNMOkNITDpDSElMRTpNQUxMRUNPOkxvcyBTYXVjZXMKKzc6Q0w6Q0hMOkNISUxFOk1BTExFQ086THVtYWNvCis4OkNMOkNITDpDSElMRTpNQUxMRUNPOlB1cmVuCis5OkNMOkNITDpDSElMRTpNQUxMRUNPOlJlbmFpY28KKzEwOkNMOkNITDpDSElMRTpNQUxMRUNPOlRyYWlndWVuCisxMTpDTDpDSEw6Q0hJTEU6TUFMTEVDTzpWaWN0b3JpYQorMTpDTDpDSEw6Q0hJTEU6U0FOIEFOVE9OSU86QWxnYXJyb2JvCisyOkNMOkNITDpDSElMRTpTQU4gQU5UT05JTzpDYXJ0YWdlbmEKKzM6Q0w6Q0hMOkNISUxFOlNBTiBBTlRPTklPOkVsIFF1aXNjbworNDpDTDpDSEw6Q0hJTEU6U0FOIEFOVE9OSU86RWwgVGFibworNTpDTDpDSEw6Q0hJTEU6U0FOIEFOVE9OSU86U2FuIEFudG9uaW8KKzY6Q0w6Q0hMOkNISUxFOlNBTiBBTlRPTklPOlNhbnRvICBEb21pbmdvCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvQ0hOL0NITl9BRE1JTjFfTEVYLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9DSE4vQ0hOX0FETUlOMV9MRVgudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVjZDI0NjUKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvQ0hOL0NITl9BRE1JTjFfTEVYLnR4dApAQCAtMCwwICsxLDM5IEBACisxOkNOLTM0OkNOOkFOSFVJCisyOkNOLTkyOkNOOkFPTUVOIChaSCkKKzM6Q04tMDpDTjpCRUlKSU5HCis0OkNOLTUwOkNOOkNIT05HUUlORworNTpDTi0zNTpDTjpGVUpJQU4KKzY6Q04tNjI6Q046R0FOU1UKKzc6Q04tNDQ6Q046R1VBTkdET05HCis4OkNOLTQ1OkNOOkdVQU5HWEkKKzk6Q04tNTI6Q046R1VJWkhPVQorMTA6Q04tNDY6Q046SEFJTkFOCisxMTpDTi03MzpDTjpIRUJFSQorMTI6Q04tMjM6Q046SEVJTE9OR0pJQU5HCisxMzpDTi00OkNOOkhFTkFOCisxNDpDTi1ISzpDTjpIT05HS09ORyBJU0xBTkQKKzE1OkNOLTQyOkNOOkhVQkVJCisxNjpDTi00MzpDTjpIVU5BTgorMTc6Q04tSks6Q046SkFNTVUgQU5EIEtBU0hNSVIKKzE4OkNOLTMyOkNOOkpJQU5HU1UKKzE5OkNOLTM2OkNOOkpJQU5HWEkKKzIwOkNOLTIyOkNOOkpJTElOCisyMTpDTi1LT1c6Q046S09XTE9PTiBBTkQgTkVXIEtPV0xPT04KKzIyOkNOLTcyOkNOOkxJQU9OSU5HCisyMzpDTi1NQVI6Q046TUFSSU5FCisyNDpDTi03NTpDTjpORUkgTU9OR09MIFpJWkhJUVUKKzI1OkNOLU5UOkNOOk5FVyBURVJSSVRPUklFUworMjY6Q04tNjQ6Q046TklOR1hJQQorMjc6Q04tNjM6Q046UUlOR0hBSQorMjg6Q04tNjpDTjpTSEFBTlhJCisyOTpDTi0zNzpDTjpTSEFORE9ORworMzA6Q04tMzpDTjpTSEFOR0hBSQorMzE6Q04tNzQ6Q046U0hBTlhJCiszMjpDTi01OkNOOlNJQ0hVQU4KKzMzOkNOLTc6Q046VEFJV0FOCiszNDpDTi0yOkNOOlRJQU5KSU4KKzM1OkNOLTk6Q046WElBTkdHQU5HIChaSCkKKzM2OkNOLTY1OkNOOlhJTkpJQU5HIFVZR1VSCiszNzpDTi01NDpDTjpYSVpBTkcgWklaSElRVSAoVElCRVQpCiszODpDTi01MzpDTjpZVU5OQU4KKzM5OkNOLTMzOkNOOlpIRUpJQU5HCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvQ0hOL0NITl9BRE1JTjJfTEVYLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9DSE4vQ0hOX0FETUlOMl9MRVgudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk4MmE2NGUKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvQ0hOL0NITl9BRE1JTjJfTEVYLnR4dApAQCAtMCwwICsxLDI0MTQgQEAKKzE6Q046Q0hOOkNISU5BOll1bm5hbjpBbm5pbmcKKzI6Q046Q0hOOkNISU5BOll1bm5hbjpCYW9zaGFuCiszOkNOOkNITjpDSElOQTpZdW5uYW46QmlqaWFuZworNDpDTjpDSE46Q0hJTkE6WXVubmFuOkJpbmNodWFuCis1OkNOOkNITjpDSElOQTpZdW5uYW46Q2FuZ3l1YW4KKzY6Q046Q0hOOkNISU5BOll1bm5hbjpDaGFuZ25pbmcKKzc6Q046Q0hOOkNISU5BOll1bm5hbjpDaGVuZ2ppYW5nCis4OkNOOkNITjpDSElOQTpZdW5uYW46Q2hlbmdvbmcKKzk6Q046Q0hOOkNISU5BOll1bm5hbjpDaHV4aW9uZworMTA6Q046Q0hOOkNISU5BOll1bm5hbjpEYWd1YW4KKzExOkNOOkNITjpDSElOQTpZdW5uYW46RGFsaQorMTI6Q046Q0hOOkNISU5BOll1bm5hbjpEYXlhbworMTM6Q046Q0hOOkNISU5BOll1bm5hbjpEZXFlbgorMTQ6Q046Q0hOOkNISU5BOll1bm5hbjpEb25nY2h1biBTaGkKKzE1OkNOOkNITjpDSElOQTpZdW5uYW46RXJ5dWFuCisxNjpDTjpDSE46Q0hJTkE6WXVubmFuOkVzaGFuCisxNzpDTjpDSE46Q0hJTkE6WXVubmFuOkZlbmdxaW5nCisxODpDTjpDSE46Q0hJTkE6WXVubmFuOkZ1Z29uZworMTk6Q046Q0hOOkNISU5BOll1bm5hbjpGdW1pbmcKKzIwOkNOOkNITjpDSElOQTpZdW5uYW46RnVuaW5nCisyMTpDTjpDSE46Q0hJTkE6WXVubmFuOkZ1eXVhbgorMjI6Q046Q0hOOkNISU5BOll1bm5hbjpHZWppdSBTaGkKKzIzOkNOOkNITjpDSElOQTpZdW5uYW46R2VuZ21hCisyNDpDTjpDSE46Q0hJTkE6WXVubmFuOkdvbmdzaGFuCisyNTpDTjpDSE46Q0hJTkE6WXVubmFuOkd1YW5nbmFuCisyNjpDTjpDSE46Q0hJTkE6WXVubmFuOkhla291CisyNzpDTjpDSE46Q0hJTkE6WXVubmFuOkhlcWluZworMjg6Q046Q0hOOkNISU5BOll1bm5hbjpIb25naGUKKzI5OkNOOkNITjpDSElOQTpZdW5uYW46SHVhbmluZworMzA6Q046Q0hOOkNISU5BOll1bm5hbjpIdWFwaW5nCiszMTpDTjpDSE46Q0hJTkE6WXVubmFuOkh1aXplCiszMjpDTjpDSE46Q0hJTkE6WXVubmFuOkppYW5jaHVhbgorMzM6Q046Q0hOOkNISU5BOll1bm5hbjpKaWFuZ2NoZW5nCiszNDpDTjpDSE46Q0hJTkE6WXVubmFuOkppYW5nY2h1YW4KKzM1OkNOOkNITjpDSElOQTpZdW5uYW46SmlhbnNodWkKKzM2OkNOOkNITjpDSElOQTpZdW5uYW46SmluZ2RvbmcKKzM3OkNOOkNITjpDSElOQTpZdW5uYW46SmluZ2d1CiszODpDTjpDSE46Q0hJTkE6WXVubmFuOkppbmdob25nCiszOTpDTjpDSE46Q0hJTkE6WXVubmFuOkppbm5pbmcKKzQwOkNOOkNITjpDSElOQTpZdW5uYW46SmlucGluZworNDE6Q046Q0hOOkNISU5BOll1bm5hbjpLYWl5dWFuIFNoaQorNDI6Q046Q0hOOkNISU5BOll1bm5hbjpLdWVubWluZyBTaGlxdQorNDM6Q046Q0hOOkNISU5BOll1bm5hbjpMYW5jYW5nCis0NDpDTjpDSE46Q0hJTkE6WXVubmFuOkxhbnBpbmcKKzQ1OkNOOkNITjpDSElOQTpZdW5uYW46TGlhbmdoZQorNDY6Q046Q0hOOkNISU5BOll1bm5hbjpMaWppYW5nCis0NzpDTjpDSE46Q0hJTkE6WXVubmFuOkxpbmNhbmcKKzQ4OkNOOkNITjpDSElOQTpZdW5uYW46TG9uZ2NodWFuCis0OTpDTjpDSE46Q0hJTkE6WXVubmFuOkxvbmdsaW5nCis1MDpDTjpDSE46Q0hJTkE6WXVubmFuOkx1Y2h1bgorNTE6Q046Q0hOOkNISU5BOll1bm5hbjpMdWRpYW4KKzUyOkNOOkNITjpDSElOQTpZdW5uYW46THVmZW5nCis1MzpDTjpDSE46Q0hJTkE6WXVubmFuOkx1bGlhbmcKKzU0OkNOOkNITjpDSElOQTpZdW5uYW46THVuYW4KKzU1OkNOOkNITjpDSElOQTpZdW5uYW46THVvcGluZworNTY6Q046Q0hOOkNISU5BOll1bm5hbjpMdXF1YW4KKzU3OkNOOkNITjpDSElOQTpZdW5uYW46THVzaHVpCis1ODpDTjpDSE46Q0hJTkE6WXVubmFuOkx1eGkKKzU5OkNOOkNITjpDSElOQTpZdW5uYW46TWFndWFuCis2MDpDTjpDSE46Q0hJTkE6WXVubmFuOk1hbGlwbworNjE6Q046Q0hOOkNISU5BOll1bm5hbjpNYWxvbmcKKzYyOkNOOkNITjpDSElOQTpZdW5uYW46TWVuZ2hhaQorNjM6Q046Q0hOOkNISU5BOll1bm5hbjpNZW5nbGEKKzY0OkNOOkNITjpDSElOQTpZdW5uYW46TWVuZ2xpYW4KKzY1OkNOOkNITjpDSElOQTpZdW5uYW46TWVuZ3ppCis2NjpDTjpDSE46Q0hJTkE6WXVubmFuOk1pZHUKKzY3OkNOOkNITjpDSElOQTpZdW5uYW46TWlsZQorNjg6Q046Q0hOOkNISU5BOll1bm5hbjpNb2ppYW5nCis2OTpDTjpDSE46Q0hJTkE6WXVubmFuOk1vdWRpbmcKKzcwOkNOOkNITjpDSElOQTpZdW5uYW46TmFuaHVhCis3MTpDTjpDSE46Q0hJTkE6WXVubmFuOk5hbmppYW4KKzcyOkNOOkNITjpDSElOQTpZdW5uYW46TmluZ2xhbmcKKzczOkNOOkNITjpDSElOQTpZdW5uYW46UGluZ2JpYW4KKzc0OkNOOkNITjpDSElOQTpZdW5uYW46UHVlcgorNzU6Q046Q0hOOkNISU5BOll1bm5hbjpRaWFvamlhCis3NjpDTjpDSE46Q0hJTkE6WXVubmFuOlFpdWJlaQorNzc6Q046Q0hOOkNISU5BOll1bm5hbjpRdWppbmcKKzc4OkNOOkNITjpDSElOQTpZdW5uYW46UnVpbGkKKzc5OkNOOkNITjpDSElOQTpZdW5uYW46U2hpZGlhbgorODA6Q046Q0hOOkNISU5BOll1bm5hbjpTaGlwaW5nCis4MTpDTjpDSE46Q0hJTkE6WXVubmFuOlNoaXpvbmcKKzgyOkNOOkNITjpDSElOQTpZdW5uYW46U2h1YW5nYmFpCis4MzpDTjpDSE46Q0hJTkE6WXVubmFuOlNodWFuZ2ppYW5nCis4NDpDTjpDSE46Q0hJTkE6WXVubmFuOlNodWlmdQorODU6Q046Q0hOOkNISU5BOll1bm5hbjpTaW1hbworODY6Q046Q0hOOkNISU5BOll1bm5hbjpTb25nbWluZworODc6Q046Q0hOOkNISU5BOll1bm5hbjpTdWlqaWFuZworODg6Q046Q0hOOkNISU5BOll1bm5hbjpUZW5nY2hvbmcKKzg5OkNOOkNITjpDSElOQTpZdW5uYW46VG9uZ2hhaQorOTA6Q046Q0hOOkNISU5BOll1bm5hbjpXYW5kaW5nemhlbgorOTE6Q046Q0hOOkNISU5BOll1bm5hbjpXZWlzaGFuCis5MjpDTjpDSE46Q0hJTkE6WXVubmFuOldlaXhpCis5MzpDTjpDSE46Q0hJTkE6WXVubmFuOldlaXhpbgorOTQ6Q046Q0hOOkNISU5BOll1bm5hbjpXdWRpbmcKKzk1OkNOOkNITjpDSElOQTpZdW5uYW46V3VlbnNoYW4KKzk2OkNOOkNITjpDSElOQTpZdW5uYW46WGlhZ3VhbiBTaGkKKzk3OkNOOkNITjpDSElOQTpZdW5uYW46WGlhbmd5dW4KKzk4OkNOOkNITjpDSElOQTpZdW5uYW46WGljaG91Cis5OTpDTjpDSE46Q0hJTkE6WXVubmFuOlhpbWVuZworMTAwOkNOOkNITjpDSElOQTpZdW5uYW46WGlucGluZworMTAxOkNOOkNITjpDSElOQTpZdW5uYW46WHVhbndlaQorMTAyOkNOOkNITjpDSElOQTpZdW5uYW46WHVuZGlhbgorMTAzOkNOOkNITjpDSElOQTpZdW5uYW46WWFuZ2JpCisxMDQ6Q046Q0hOOkNISU5BOll1bm5hbjpZYW5qaW4KKzEwNTpDTjpDSE46Q0hJTkE6WXVubmFuOllhbnNoYW4KKzEwNjpDTjpDSE46Q0hJTkE6WXVubmFuOllhb2FuCisxMDc6Q046Q0hOOkNISU5BOll1bm5hbjpZaWxpYW5nCisxMDg6Q046Q0hOOkNISU5BOll1bm5hbjpZaW1lbgorMTA5OkNOOkNITjpDSElOQTpZdW5uYW46WWluZ2ppYW5nCisxMTA6Q046Q0hOOkNISU5BOll1bm5hbjpZb25nZGUKKzExMTpDTjpDSE46Q0hJTkE6WXVubmFuOllvbmdwaW5nCisxMTI6Q046Q0hOOkNISU5BOll1bm5hbjpZb25ncmVuCisxMTM6Q046Q0hOOkNISU5BOll1bm5hbjpZb25nc2hhbgorMTE0OkNOOkNITjpDSElOQTpZdW5uYW46WW9uZ3NoZW5nCisxMTU6Q046Q0hOOkNISU5BOll1bm5hbjpZdWFuamlhbmcKKzExNjpDTjpDSE46Q0hJTkE6WXVubmFuOll1YW5tb3UKKzExNzpDTjpDSE46Q0hJTkE6WXVubmFuOll1YW55YW5nCisxMTg6Q046Q0hOOkNISU5BOll1bm5hbjpZdW4gWGlhbgorMTE5OkNOOkNITjpDSElOQTpZdW5uYW46WXVubG9uZworMTIwOkNOOkNITjpDSElOQTpZdW5uYW46WXV4aQorMTIxOkNOOkNITjpDSElOQTpZdW5uYW46WmhhbnlpCisxMjI6Q046Q0hOOkNISU5BOll1bm5hbjpaaGFvdG9uZworMTIzOkNOOkNITjpDSElOQTpZdW5uYW46Wmhhb3RvbmcgU2hpCisxMjQ6Q046Q0hOOkNISU5BOll1bm5hbjpaaGVua2FuZworMTI1OkNOOkNITjpDSElOQTpZdW5uYW46Wmhlbnhpb25nCisxMjY6Q046Q0hOOkNISU5BOll1bm5hbjpaaGVueXVhbgorMTI3OkNOOkNITjpDSElOQTpZdW5uYW46WmhvbmdkaWFuCisxOkNOOkNITjpDSElOQTpHdWl6aG91OkFubG9uZworMjpDTjpDSE46Q0hJTkE6R3VpemhvdTpBbnNodW4KKzM6Q046Q0hOOkNISU5BOkd1aXpob3U6QW5zaHVuIFNoaQorNDpDTjpDSE46Q0hJTkE6R3VpemhvdTpCaWppZQorNTpDTjpDSE46Q0hJTkE6R3VpemhvdTpDZWhlbmcKKzY6Q046Q0hOOkNISU5BOkd1aXpob3U6Q2VuZ29uZworNzpDTjpDSE46Q0hJTkE6R3VpemhvdTpDaGFuZ3NodW4KKzg6Q046Q0hOOkNISU5BOkd1aXpob3U6Q2hpc2h1aQorOTpDTjpDSE46Q0hJTkE6R3VpemhvdTpDb25namlhbmcKKzEwOkNOOkNITjpDSElOQTpHdWl6aG91OkRhZmFuZworMTE6Q046Q0hOOkNISU5BOkd1aXpob3U6RGFuemhhaQorMTI6Q046Q0hOOkNISU5BOkd1aXpob3U6RGFvemhlbgorMTM6Q046Q0hOOkNISU5BOkd1aXpob3U6RGVqaWFuZworMTQ6Q046Q0hOOkNISU5BOkd1aXpob3U6RHVzaGFuCisxNTpDTjpDSE46Q0hJTkE6R3VpemhvdTpEdXl1bgorMTY6Q046Q0hOOkNISU5BOkd1aXpob3U6RmVuZ2dhbmcKKzE3OkNOOkNITjpDSElOQTpHdWl6aG91OkZ1cXVhbgorMTg6Q046Q0hOOkNISU5BOkd1aXpob3U6R3VhbmxpbmcKKzE5OkNOOkNITjpDSElOQTpHdWl6aG91Okd1aWRpbmcKKzIwOkNOOkNITjpDSElOQTpHdWl6aG91Okd1aXlhbmcgU2hpCisyMTpDTjpDSE46Q0hJTkE6R3VpemhvdTpIZXpoYW5nCisyMjpDTjpDSE46Q0hJTkE6R3VpemhvdTpIdWFuZ3BpbmcKKzIzOkNOOkNITjpDSElOQTpHdWl6aG91Okh1aXNodWkKKzI0OkNOOkNITjpDSElOQTpHdWl6aG91OkppYW5na291CisyNTpDTjpDSE46Q0hJTkE6R3VpemhvdTpKaWFuaGUKKzI2OkNOOkNITjpDSElOQTpHdWl6aG91OkppbnBpbmcKKzI3OkNOOkNITjpDSElOQTpHdWl6aG91OkppbnNoYQorMjg6Q046Q0hOOkNISU5BOkd1aXpob3U6S2FpbGkKKzI5OkNOOkNITjpDSElOQTpHdWl6aG91OkthaXlhbmcKKzMwOkNOOkNITjpDSElOQTpHdWl6aG91OkxlaXNoYW4KKzMxOkNOOkNITjpDSElOQTpHdWl6aG91OkxpYm8KKzMyOkNOOkNITjpDSElOQTpHdWl6aG91OkxpcGluZworMzM6Q046Q0hOOkNISU5BOkd1aXpob3U6TG9uZ2xpCiszNDpDTjpDSE46Q0hJTkE6R3VpemhvdTpMdW9kaWFuCiszNTpDTjpDSE46Q0hJTkE6R3VpemhvdTpMdXpoaQorMzY6Q046Q0hOOkNISU5BOkd1aXpob3U6TWFqaWFuZworMzc6Q046Q0hOOkNISU5BOkd1aXpob3U6TWVpdGFuCiszODpDTjpDSE46Q0hJTkE6R3VpemhvdTpOYXlvbmcKKzM5OkNOOkNITjpDSElOQTpHdWl6aG91OlBhbnhpYW4KKzQwOkNOOkNITjpDSElOQTpHdWl6aG91OlBpbmdiYQorNDE6Q046Q0hOOkNISU5BOkd1aXpob3U6UGluZ3RhbmcKKzQyOkNOOkNITjpDSElOQTpHdWl6aG91OlB1IEFuCis0MzpDTjpDSE46Q0hJTkE6R3VpemhvdTpQdWRpbmcKKzQ0OkNOOkNITjpDSElOQTpHdWl6aG91OlFpYW54aQorNDU6Q046Q0hOOkNISU5BOkd1aXpob3U6UWluZ2xvbmcKKzQ2OkNOOkNITjpDSElOQTpHdWl6aG91OlFpbmd6aGVuCis0NzpDTjpDSE46Q0hJTkE6R3VpemhvdTpSZW5odWFpCis0ODpDTjpDSE46Q0hJTkE6R3VpemhvdTpSb25namlhbmcKKzQ5OkNOOkNITjpDSElOQTpHdWl6aG91OlNhbmR1Cis1MDpDTjpDSE46Q0hJTkE6R3VpemhvdTpTYW5zdWkKKzUxOkNOOkNITjpDSElOQTpHdWl6aG91OlNoaWJpbmcKKzUyOkNOOkNITjpDSElOQTpHdWl6aG91OlNoaXFpYW4KKzUzOkNOOkNITjpDSElOQTpHdWl6aG91OlNodWljaGVuZworNTQ6Q046Q0hOOkNISU5BOkd1aXpob3U6U2luYW4KKzU1OkNOOkNITjpDSElOQTpHdWl6aG91OlNvbmd0YW8KKzU2OkNOOkNITjpDSElOQTpHdWl6aG91OlN1aXlhbmcKKzU3OkNOOkNITjpDSElOQTpHdWl6aG91OlRhaWppYW5nCis1ODpDTjpDSE46Q0hJTkE6R3VpemhvdTpUaWFuemh1Cis1OTpDTjpDSE46Q0hJTkE6R3VpemhvdTpUb25ncmVuCis2MDpDTjpDSE46Q0hJTkE6R3VpemhvdTpUb25nemkKKzYxOkNOOkNITjpDSElOQTpHdWl6aG91OldhbmdtbworNjI6Q046Q0hOOkNISU5BOkd1aXpob3U6V2Fuc2hhbgorNjM6Q046Q0hOOkNISU5BOkd1aXpob3U6V2VpbmluZworNjQ6Q046Q0hOOkNISU5BOkd1aXpob3U6V2VuZyBBbgorNjU6Q046Q0hOOkNISU5BOkd1aXpob3U6V3VjaHVhbgorNjY6Q046Q0hOOkNISU5BOkd1aXpob3U6WGlmZW5nCis2NzpDTjpDSE46Q0hJTkE6R3VpemhvdTpYaW5ncmVuCis2ODpDTjpDSE46Q0hJTkE6R3VpemhvdTpYaW5neWkKKzY5OkNOOkNITjpDSElOQTpHdWl6aG91Olhpc2h1aQorNzA6Q046Q0hOOkNISU5BOkd1aXpob3U6WGl1d2VuCis3MTpDTjpDSE46Q0hJTkE6R3VpemhvdTpZYW5oZQorNzI6Q046Q0hOOkNISU5BOkd1aXpob3U6WWluamlhbmcKKzczOkNOOkNITjpDSElOQTpHdWl6aG91Oll1cGluZworNzQ6Q046Q0hOOkNISU5BOkd1aXpob3U6WXVxaW5nCis3NTpDTjpDSE46Q0hJTkE6R3VpemhvdTpaaGVuZmVuZworNzY6Q046Q0hOOkNISU5BOkd1aXpob3U6WmhlbmcgQW4KKzc3OkNOOkNITjpDSElOQTpHdWl6aG91OlpoZW5uaW5nCis3ODpDTjpDSE46Q0hJTkE6R3VpemhvdTpaaGVueXVhbgorNzk6Q046Q0hOOkNISU5BOkd1aXpob3U6WmhpamluCis4MDpDTjpDSE46Q0hJTkE6R3VpemhvdTpaaXl1bgorODE6Q046Q0hOOkNISU5BOkd1aXpob3U6WnVueWkKKzgyOkNOOkNITjpDSElOQTpHdWl6aG91Olp1bnlpIFNoaQorMTpDTjpDSE46Q0hJTkE6U2hhbnhpOkFuemUKKzI6Q046Q0hOOkNISU5BOlNoYW54aTpCYW9kZQorMzpDTjpDSE46Q0hJTkE6U2hhbnhpOkNoYW5nemhpCis0OkNOOkNITjpDSElOQTpTaGFueGk6Q2hhbmd6aGkgU2hpCis1OkNOOkNITjpDSElOQTpTaGFueGk6RGFpIFhpYW4KKzY6Q046Q0hOOkNISU5BOlNoYW54aTpEYW5pbmcKKzc6Q046Q0hOOkNISU5BOlNoYW54aTpEYXRvbmcKKzg6Q046Q0hOOkNISU5BOlNoYW54aTpEYXRvbmcgU2hpCis5OkNOOkNITjpDSElOQTpTaGFueGk6RGluZ3hpYW5nCisxMDpDTjpDSE46Q0hJTkE6U2hhbnhpOkZhbmdzaGFuCisxMTpDTjpDSE46Q0hJTkE6U2hhbnhpOkZhbnNoaQorMTI6Q046Q0hOOkNISU5BOlNoYW54aTpGZW54aQorMTM6Q046Q0hOOkNISU5BOlNoYW54aTpGZW55YW5nCisxNDpDTjpDSE46Q0hJTkE6U2hhbnhpOkZ1c2hhbgorMTU6Q046Q0hOOkNISU5BOlNoYW54aTpHYW9waW5nCisxNjpDTjpDSE46Q0hJTkE6U2hhbnhpOkd1IFhpYW4KKzE3OkNOOkNITjpDSElOQTpTaGFueGk6R3VhbmdsaW5nCisxODpDTjpDSE46Q0hJTkE6U2hhbnhpOkhlamluCisxOTpDTjpDSE46Q0hJTkE6U2hhbnhpOkhlcXUKKzIwOkNOOkNITjpDSElOQTpTaGFueGk6SGVzaHVuCisyMTpDTjpDSE46Q0hJTkE6U2hhbnhpOkhvbmd0b25nCisyMjpDTjpDSE46Q0hJTkE6U2hhbnhpOkhvdW1hIFNoaQorMjM6Q046Q0hOOkNISU5BOlNoYW54aTpIdWFpcmVuCisyNDpDTjpDSE46Q0hJTkE6U2hhbnhpOkh1Z3VhbgorMjU6Q046Q0hOOkNISU5BOlNoYW54aTpIdW55dWFuCisyNjpDTjpDSE46Q0hJTkE6U2hhbnhpOkh1byBYaWFuCisyNzpDTjpDSE46Q0hJTkE6U2hhbnhpOkppIFhpYW4KKzI4OkNOOkNITjpDSElOQTpTaGFueGk6SmlhbmcgWGlhbgorMjk6Q046Q0hOOkNISU5BOlNoYW54aTpKaWFvY2hlbmcKKzMwOkNOOkNITjpDSElOQTpTaGFueGk6Smlhb2tvdQorMzE6Q046Q0hOOkNISU5BOlNoYW54aTpKaWV4bHUKKzMyOkNOOkNITjpDSElOQTpTaGFueGk6SmluZ2NoZW5nCiszMzpDTjpDSE46Q0hJTkE6U2hhbnhpOkppbmdsZQorMzQ6Q046Q0hOOkNISU5BOlNoYW54aTpKaW5zaGFuCiszNTpDTjpDSE46Q0hJTkE6U2hhbnhpOktlbGFuCiszNjpDTjpDSE46Q0hJTkE6U2hhbnhpOkxhbiBYaWFuCiszNzpDTjpDSE46Q0hJTkE6U2hhbnhpOkxpY2hlbmcKKzM4OkNOOkNITjpDSElOQTpTaGFueGk6TGluIFhpYW4KKzM5OkNOOkNITjpDSElOQTpTaGFueGk6TGluZmVuCis0MDpDTjpDSE46Q0hJTkE6U2hhbnhpOkxpbmZlbiBTaGkKKzQxOkNOOkNITjpDSElOQTpTaGFueGk6TGluZ2NodWFuCis0MjpDTjpDSE46Q0hJTkE6U2hhbnhpOkxpbmdxaXUKKzQzOkNOOkNITjpDSElOQTpTaGFueGk6TGluZ3NoaQorNDQ6Q046Q0hOOkNISU5BOlNoYW54aTpMaW55aQorNDU6Q046Q0hOOkNISU5BOlNoYW54aTpMaXNoaQorNDY6Q046Q0hOOkNISU5BOlNoYW54aTpMaXVsaW4KKzQ3OkNOOkNITjpDSElOQTpTaGFueGk6TG91ZmFuCis0ODpDTjpDSE46Q0hJTkE6U2hhbnhpOkx1Y2hlbmcKKzQ5OkNOOkNITjpDSElOQTpTaGFueGk6TmluZ3d1Cis1MDpDTjpDSE46Q0hJTkE6U2hhbnhpOlBpYW5ndWFuCis1MTpDTjpDSE46Q0hJTkE6U2hhbnhpOlBpbmdkaW5nCis1MjpDTjpDSE46Q0hJTkE6U2hhbnhpOlBpbmdsdQorNTM6Q046Q0hOOkNISU5BOlNoYW54aTpQaW5nc2h1bgorNTQ6Q046Q0hOOkNISU5BOlNoYW54aTpQaW5neWFvCis1NTpDTjpDSE46Q0hJTkE6U2hhbnhpOlB1IFhpYW4KKzU2OkNOOkNITjpDSElOQTpTaGFueGk6UWkgWGlhbgorNTc6Q046Q0hOOkNISU5BOlNoYW54aTpRaW4gWGlhbgorNTg6Q046Q0hOOkNISU5BOlNoYW54aTpRaW5neHUKKzU5OkNOOkNITjpDSElOQTpTaGFueGk6UWluc2h1aQorNjA6Q046Q0hOOkNISU5BOlNoYW54aTpRaW55dWFuCis2MTpDTjpDSE46Q0hJTkE6U2hhbnhpOlF1d28KKzYyOkNOOkNITjpDSElOQTpTaGFueGk6UnVpY2hlbmcKKzYzOkNOOkNITjpDSElOQTpTaGFueGk6U2hhbnlpbgorNjQ6Q046Q0hOOkNISU5BOlNoYW54aTpTaGVuY2hpCis2NTpDTjpDSE46Q0hJTkE6U2hhbnhpOlNoaWxvdQorNjY6Q046Q0hOOkNISU5BOlNoYW54aTpTaG91eWFuZworNjc6Q046Q0hOOkNISU5BOlNoYW54aTpTaHVvIFhpYW4KKzY4OkNOOkNITjpDSElOQTpTaGFueGk6VGFpZ3UKKzY5OkNOOkNITjpDSElOQTpTaGFueGk6VGFpeXVhbiBTaGlxdQorNzA6Q046Q0hOOkNISU5BOlNoYW54aTpUaWFuemhlbgorNzE6Q046Q0hOOkNISU5BOlNoYW54aTpUdW5saXUKKzcyOkNOOkNITjpDSElOQTpTaGFueGk6V2Fucm9uZworNzM6Q046Q0hOOkNISU5BOlNoYW54aTpXZW5zaHVpCis3NDpDTjpDSE46Q0hJTkE6U2hhbnhpOldlbnhpCis3NTpDTjpDSE46Q0hJTkE6U2hhbnhpOld1dGFpCis3NjpDTjpDSE46Q0hJTkE6U2hhbnhpOld1eGlhbmcKKzc3OkNOOkNITjpDSElOQTpTaGFueGk6V3V6aGFpCis3ODpDTjpDSE46Q0hJTkE6U2hhbnhpOlhpIFhpYW4KKzc5OkNOOkNITjpDSElOQTpTaGFueGk6WGlhIFhpYW4KKzgwOkNOOkNITjpDSElOQTpTaGFueGk6WGlhbmdmZW4KKzgxOkNOOkNITjpDSElOQTpTaGFueGk6WGlhbmduaW5nCis4MjpDTjpDSE46Q0hJTkE6U2hhbnhpOlhpYW5neXVhbgorODM6Q046Q0hOOkNISU5BOlNoYW54aTpYaWFveWkKKzg0OkNOOkNITjpDSElOQTpTaGFueGk6WGluIFhpYW4KKzg1OkNOOkNITjpDSElOQTpTaGFueGk6WGluZyBYaWFuCis4NjpDTjpDSE46Q0hJTkE6U2hhbnhpOlhpbmppYW5nCis4NzpDTjpDSE46Q0hJTkE6U2hhbnhpOlhpeWFuZworODg6Q046Q0hOOkNISU5BOlNoYW54aTpZYW5nY2hlbmcKKzg5OkNOOkNITjpDSElOQTpTaGFueGk6WWFuZ2dhbworOTA6Q046Q0hOOkNISU5BOlNoYW54aTpZYW5ncXUKKzkxOkNOOkNITjpDSElOQTpTaGFueGk6WWFuZ3F1YW4gU2hpCis5MjpDTjpDSE46Q0hJTkE6U2hhbnhpOllpY2hlbmcKKzkzOkNOOkNITjpDSElOQTpTaGFueGk6WWluZyBYaWFuCis5NDpDTjpDSE46Q0hJTkE6U2hhbnhpOllvbmdoZQorOTU6Q046Q0hOOkNISU5BOlNoYW54aTpZb25namkKKzk2OkNOOkNITjpDSElOQTpTaGFueGk6WW91eXUKKzk3OkNOOkNITjpDSElOQTpTaGFueGk6WXUgWGlhbgorOTg6Q046Q0hOOkNISU5BOlNoYW54aTpZdWFucGluZworOTk6Q046Q0hOOkNISU5BOlNoYW54aTpZdWFucXUKKzEwMDpDTjpDSE46Q0hJTkE6U2hhbnhpOll1Y2kKKzEwMTpDTjpDSE46Q0hJTkE6U2hhbnhpOll1Y2kgU2hpCisxMDI6Q046Q0hOOkNISU5BOlNoYW54aTpZdW5jaGVuZworMTAzOkNOOkNITjpDSElOQTpTaGFueGk6WXVzaGUKKzEwNDpDTjpDSE46Q0hJTkE6U2hhbnhpOlpoYW5nemhpCisxMDU6Q046Q0hOOkNISU5BOlNoYW54aTpaaG9uZ3lhbmcKKzEwNjpDTjpDSE46Q0hJTkE6U2hhbnhpOlp1b3F1YW4KKzEwNzpDTjpDSE46Q0hJTkE6U2hhbnhpOlp1b3l1bgorMTpDTjpDSE46Q0hJTkE6UWluZ2hhaTpCYWltYQorMjpDTjpDSE46Q0hJTkE6UWluZ2hhaTpDaGluZHUKKzM6Q046Q0hOOkNISU5BOlFpbmdoYWk6RGFxYWlkYW0KKzQ6Q046Q0hOOkNISU5BOlFpbmdoYWk6RGFybGFnCis1OkNOOkNITjpDSElOQTpRaW5naGFpOkRhdG9uZworNjpDTjpDSE46Q0hJTkE6UWluZ2hhaTpEdWxhbgorNzpDTjpDSE46Q0hJTkE6UWluZ2hhaTpHYWRlCis4OkNOOkNITjpDSElOQTpRaW5naGFpOkdhbmdjYQorOTpDTjpDSE46Q0hJTkE6UWluZ2hhaTpHb2xtdWQgU2hpCisxMDpDTjpDSE46Q0hJTkE6UWluZ2hhaTpHb25naGUKKzExOkNOOkNITjpDSElOQTpRaW5naGFpOkd1aWRlCisxMjpDTjpDSE46Q0hJTkE6UWluZ2hhaTpHdWluYW4KKzEzOkNOOkNITjpDSElOQTpRaW5naGFpOkhhaXlhbgorMTQ6Q046Q0hOOkNISU5BOlFpbmdoYWk6SGVuYW4KKzE1OkNOOkNITjpDSElOQTpRaW5naGFpOkh1YWxvbmcKKzE2OkNOOkNITjpDSElOQTpRaW5naGFpOkh1YW5neXVhbgorMTc6Q046Q0hOOkNISU5BOlFpbmdoYWk6SHVhbmd6aG9uZworMTg6Q046Q0hOOkNISU5BOlFpbmdoYWk6SHV6aHUKKzE5OkNOOkNITjpDSElOQTpRaW5naGFpOkphaW5jYQorMjA6Q046Q0hOOkNISU5BOlFpbmdoYWk6SmlnemhpCisyMTpDTjpDSE46Q0hJTkE6UWluZ2hhaTpMZWR1CisyMjpDTjpDSE46Q0hJTkE6UWluZ2hhaTpMZW5naHUKKzIzOkNOOkNITjpDSElOQTpRaW5naGFpOk1hZG9pCisyNDpDTjpDSE46Q0hJTkE6UWluZ2hhaTpNYW5nbmFpCisyNTpDTjpDSE46Q0hJTkE6UWluZ2hhaTpNYXFlbgorMjY6Q046Q0hOOkNISU5BOlFpbmdoYWk6TWVueXVhbgorMjc6Q046Q0hOOkNISU5BOlFpbmdoYWk6TWluaGUKKzI4OkNOOkNITjpDSElOQTpRaW5naGFpOk5hbmdxZW4KKzI5OkNOOkNITjpDSElOQTpRaW5naGFpOlBpbmcgQW4KKzMwOkNOOkNITjpDSElOQTpRaW5naGFpOlFpbGlhbgorMzE6Q046Q0hOOkNISU5BOlFpbmdoYWk6UXVtYXJsZWIKKzMyOkNOOkNITjpDSElOQTpRaW5naGFpOlRpYW5qdW4KKzMzOkNOOkNITjpDSElOQTpRaW5naGFpOlRvbmdkZQorMzQ6Q046Q0hOOkNISU5BOlFpbmdoYWk6VG9uZ3JlbgorMzU6Q046Q0hOOkNISU5BOlFpbmdoYWk6VWxhbgorMzY6Q046Q0hOOkNISU5BOlFpbmdoYWk6WGluZ2hhbgorMzc6Q046Q0hOOkNISU5BOlFpbmdoYWk6WGluaW5nIFNoaXF1CiszODpDTjpDSE46Q0hJTkE6UWluZ2hhaTpYdW5odWEKKzM5OkNOOkNITjpDSElOQTpRaW5naGFpOll1c2h1Cis0MDpDTjpDSE46Q0hJTkE6UWluZ2hhaTpaYWRvaQorNDE6Q046Q0hOOkNISU5BOlFpbmdoYWk6WmVrb2cKKzQyOkNOOkNITjpDSElOQTpRaW5naGFpOlpoaWRvdAorMTpDTjpDSE46Q0hJTkE6Q2hvbmdxaW5nOkJhIFhpYW4KKzI6Q046Q0hOOkNISU5BOkNob25ncWluZzpCaXNoYW4KKzM6Q046Q0hOOkNISU5BOkNob25ncWluZzpDaGFuZ3Nob3UKKzQ6Q046Q0hOOkNISU5BOkNob25ncWluZzpDaGVuZ2tvdQorNTpDTjpDSE46Q0hJTkE6Q2hvbmdxaW5nOkNob25ncWluZyBTaGlxdQorNjpDTjpDSE46Q0hJTkE6Q2hvbmdxaW5nOkRhenUKKzc6Q046Q0hOOkNISU5BOkNob25ncWluZzpEaWFuamlhbmcKKzg6Q046Q0hOOkNISU5BOkNob25ncWluZzpGZW5nZHUKKzk6Q046Q0hOOkNISU5BOkNob25ncWluZzpGZW5namllCisxMDpDTjpDSE46Q0hJTkE6Q2hvbmdxaW5nOkZ1bGluZworMTE6Q046Q0hOOkNISU5BOkNob25ncWluZzpIZWNodWFuCisxMjpDTjpDSE46Q0hJTkE6Q2hvbmdxaW5nOkppYW5nYmVpCisxMzpDTjpDSE46Q0hJTkE6Q2hvbmdxaW5nOkppYW5namluCisxNDpDTjpDSE46Q0hJTkE6Q2hvbmdxaW5nOkthaSBYaWFuCisxNTpDTjpDSE46Q0hJTkE6Q2hvbmdxaW5nOkxpYW5ncGluZworMTY6Q046Q0hOOkNISU5BOkNob25ncWluZzpOYW5jaHVhbgorMTc6Q046Q0hOOkNISU5BOkNob25ncWluZzpQZW5nc2h1aQorMTg6Q046Q0hOOkNISU5BOkNob25ncWluZzpRaWFuamlhbmcKKzE5OkNOOkNITjpDSElOQTpDaG9uZ3Fpbmc6UWlqaWFuZworMjA6Q046Q0hOOkNISU5BOkNob25ncWluZzpSb25nY2hhbmcKKzIxOkNOOkNITjpDSElOQTpDaG9uZ3Fpbmc6U2hpemh1CisyMjpDTjpDSE46Q0hJTkE6Q2hvbmdxaW5nOlRvbmdsaWFuZworMjM6Q046Q0hOOkNISU5BOkNob25ncWluZzpUb25nbmFuCisyNDpDTjpDSE46Q0hJTkE6Q2hvbmdxaW5nOldhbiBYaWFuCisyNTpDTjpDSE46Q0hJTkE6Q2hvbmdxaW5nOldhbnhpYW4gU2hpCisyNjpDTjpDSE46Q0hJTkE6Q2hvbmdxaW5nOld1bG9uZworMjc6Q046Q0hOOkNISU5BOkNob25ncWluZzpXdXNoYW4KKzI4OkNOOkNITjpDSElOQTpDaG9uZ3Fpbmc6V3V4aQorMjk6Q046Q0hOOkNISU5BOkNob25ncWluZzpYaXVzaGFuCiszMDpDTjpDSE46Q0hJTkE6Q2hvbmdxaW5nOllvbmdjaHVhbgorMzE6Q046Q0hOOkNISU5BOkNob25ncWluZzpZb3V5YW5nCiszMjpDTjpDSE46Q0hJTkE6Q2hvbmdxaW5nOll1bnlhbmcKKzMzOkNOOkNITjpDSElOQTpDaG9uZ3Fpbmc6WmhvbmcgWGlhbgorMTpDTjpDSE46Q0hJTkE6SmFtbXUgYW5kIEthc2htaXI6TGFkYWtoIChMZWgpCisxOkNOOkNITjpDSElOQTpIZW5hbjpBbnlhbmcKKzI6Q046Q0hOOkNISU5BOkhlbmFuOkFueWFuZyBTaGkKKzM6Q046Q0hOOkNISU5BOkhlbmFuOkJhb2ZlbmcKKzQ6Q046Q0hOOkNISU5BOkhlbmFuOkJpeWFuZworNTpDTjpDSE46Q0hJTkE6SGVuYW46Qm9haQorNjpDTjpDSE46Q0hJTkE6SGVuYW46Q2hhbmdnZQorNzpDTjpDSE46Q0hJTkE6SGVuYW46Q2hhbmd5dWFuCis4OkNOOkNITjpDSElOQTpIZW5hbjpEYW5jaGVuZworOTpDTjpDSE46Q0hJTkE6SGVuYW46RGVuZyBYaWFuCisxMDpDTjpDSE46Q0hJTkE6SGVuYW46RGVuZ2ZlbmcKKzExOkNOOkNITjpDSElOQTpIZW5hbjpGYW5nY2hlbmcKKzEyOkNOOkNITjpDSElOQTpIZW5hbjpGYW54aWFuCisxMzpDTjpDSE46Q0hJTkE6SGVuYW46RmVuZ3FpdQorMTQ6Q046Q0hOOkNISU5BOkhlbmFuOkZ1Z291CisxNTpDTjpDSE46Q0hJTkE6SGVuYW46R29uZyBYaWFuCisxNjpDTjpDSE46Q0hJTkE6SGVuYW46R3VhbmdzaGFuCisxNzpDTjpDSE46Q0hJTkE6SGVuYW46R3VzaGkKKzE4OkNOOkNITjpDSElOQTpIZW5hbjpIZWJpIFNoaQorMTk6Q046Q0hOOkNISU5BOkhlbmFuOkhvdWppYQorMjA6Q046Q0hOOkNISU5BOkhlbmFuOkh1YSBYaWFuCisyMTpDTjpDSE46Q0hJTkE6SGVuYW46SHVhaWJpbgorMjI6Q046Q0hOOkNISU5BOkhlbmFuOkh1YWl5YW5nCisyMzpDTjpDSE46Q0hJTkE6SGVuYW46SHVhbmdjaHVhbgorMjQ6Q046Q0hOOkNISU5BOkhlbmFuOkh1aSBYaWFuCisyNTpDTjpDSE46Q0hJTkE6SGVuYW46SmkgWGlhbgorMjY6Q046Q0hOOkNISU5BOkhlbmFuOkppYSBYaWFuCisyNzpDTjpDSE46Q0hJTkE6SGVuYW46Smlhb3p1bworMjg6Q046Q0hOOkNISU5BOkhlbmFuOkppeXVhbgorMjk6Q046Q0hOOkNISU5BOkhlbmFuOkthaWZlbmcKKzMwOkNOOkNITjpDSElOQTpIZW5hbjpLYWlmZW5nIFNoaQorMzE6Q046Q0hOOkNISU5BOkhlbmFuOkxhbmthbworMzI6Q046Q0hOOkNISU5BOkhlbmFuOkxpbiBYaWFuCiszMzpDTjpDSE46Q0hJTkE6SGVuYW46TGluZ2JhbworMzQ6Q046Q0hOOkNISU5BOkhlbmFuOkxpbnJ1CiszNTpDTjpDSE46Q0hJTkE6SGVuYW46TGlueWluZworMzY6Q046Q0hOOkNISU5BOkhlbmFuOkx1YW5jaHVhbgorMzc6Q046Q0hOOkNISU5BOkhlbmFuOkx1b2hlIFNoaQorMzg6Q046Q0hOOkNISU5BOkhlbmFuOkx1b25pbmcKKzM5OkNOOkNITjpDSElOQTpIZW5hbjpMdW9zaGFuCis0MDpDTjpDSE46Q0hJTkE6SGVuYW46THVveWFuZyBTaGkKKzQxOkNOOkNITjpDSElOQTpIZW5hbjpMdXNoYW4KKzQyOkNOOkNITjpDSElOQTpIZW5hbjpMdXNoaQorNDM6Q046Q0hOOkNISU5BOkhlbmFuOkx1eWkKKzQ0OkNOOkNITjpDSElOQTpIZW5hbjpNZW5nIFhpYW4KKzQ1OkNOOkNITjpDSElOQTpIZW5hbjpNZW5qaW4KKzQ2OkNOOkNITjpDSElOQTpIZW5hbjpNaSBYaWFuCis0NzpDTjpDSE46Q0hJTkE6SGVuYW46TWlhbmNoaQorNDg6Q046Q0hOOkNISU5BOkhlbmFuOk1pbmdxdWFuCis0OTpDTjpDSE46Q0hJTkE6SGVuYW46TmFubGUKKzUwOkNOOkNITjpDSElOQTpIZW5hbjpOYW55YW5nCis1MTpDTjpDSE46Q0hJTkE6SGVuYW46TmFueWFuZyBTaGkKKzUyOkNOOkNITjpDSElOQTpIZW5hbjpOYW56aGFvCis1MzpDTjpDSE46Q0hJTkE6SGVuYW46TmVpaHVhbmcKKzU0OkNOOkNITjpDSElOQTpIZW5hbjpOZWl4aWFuZworNTU6Q046Q0hOOkNISU5BOkhlbmFuOk5pbmdsaW5nCis1NjpDTjpDSE46Q0hJTkE6SGVuYW46UGluZ2RpbmdzaGFuIFNoaQorNTc6Q046Q0hOOkNISU5BOkhlbmFuOlBpbmd5dQorNTg6Q046Q0hOOkNISU5BOkhlbmFuOlB1eWFuZworNTk6Q046Q0hOOkNISU5BOkhlbmFuOlFpIFhpYW4KKzYwOkNOOkNITjpDSElOQTpIZW5hbjpRaW5nZmVuZworNjE6Q046Q0hOOkNISU5BOkhlbmFuOlFpbnlhbmcKKzYyOkNOOkNITjpDSElOQTpIZW5hbjpRdWVzaGFuCis2MzpDTjpDSE46Q0hJTkE6SGVuYW46UnVuYW4KKzY0OkNOOkNITjpDSElOQTpIZW5hbjpSdXlhbmcKKzY1OkNOOkNITjpDSElOQTpIZW5hbjpTYW5tZW54aWEgU2hpCis2NjpDTjpDSE46Q0hJTkE6SGVuYW46U2hhbiBYaWFuCis2NzpDTjpDSE46Q0hJTkE6SGVuYW46U2hhbmdjYWkKKzY4OkNOOkNITjpDSElOQTpIZW5hbjpTaGFuZ2NoZW5nCis2OTpDTjpDSE46Q0hJTkE6SGVuYW46U2hhbmdxaXUKKzcwOkNOOkNITjpDSElOQTpIZW5hbjpTaGFuZ3FpdSBTaGkKKzcxOkNOOkNITjpDSElOQTpIZW5hbjpTaGFuZ3NodWkKKzcyOkNOOkNITjpDSElOQTpIZW5hbjpTaGVucWl1Cis3MzpDTjpDSE46Q0hJTkE6SGVuYW46U2hlcWkKKzc0OkNOOkNITjpDSElOQTpIZW5hbjpTb25nIFhpYW4KKzc1OkNOOkNITjpDSElOQTpIZW5hbjpTdWkgWGlhbgorNzY6Q046Q0hOOkNISU5BOkhlbmFuOlN1aXBpbmcKKzc3OkNOOkNITjpDSElOQTpIZW5hbjpUYWlrYW5nCis3ODpDTjpDSE46Q0hJTkE6SGVuYW46VGFpcWlhbgorNzk6Q046Q0hOOkNISU5BOkhlbmFuOlRhbmdoZQorODA6Q046Q0hOOkNISU5BOkhlbmFuOlRhbmd5aW4KKzgxOkNOOkNITjpDSElOQTpIZW5hbjpUb25nYmFpCis4MjpDTjpDSE46Q0hJTkE6SGVuYW46VG9uZ3h1Cis4MzpDTjpDSE46Q0hJTkE6SGVuYW46V2Vpc2hpCis4NDpDTjpDSE46Q0hJTkE6SGVuYW46V2VuIFhpYW4KKzg1OkNOOkNITjpDSElOQTpIZW5hbjpXdXlhbmcKKzg2OkNOOkNITjpDSElOQTpIZW5hbjpXdXpoaQorODc6Q046Q0hOOkNISU5BOkhlbmFuOlhpIFhpYW4KKzg4OkNOOkNITjpDSElOQTpIZW5hbjpYaWFuZ2NoZW5nCis4OTpDTjpDSE46Q0hJTkE6SGVuYW46WGlheWkKKzkwOkNOOkNITjpDSElOQTpIZW5hbjpYaWNodWFuCis5MTpDTjpDSE46Q0hJTkE6SGVuYW46WGlodWEKKzkyOkNOOkNITjpDSElOQTpIZW5hbjpYaW4gQW4KKzkzOkNOOkNITjpDSElOQTpIZW5hbjpYaW5jYWkKKzk0OkNOOkNITjpDSElOQTpIZW5hbjpYaW5neWFuZworOTU6Q046Q0hOOkNISU5BOkhlbmFuOlhpbnhpYW4KKzk2OkNOOkNITjpDSElOQTpIZW5hbjpYaW54aWFuZworOTc6Q046Q0hOOkNISU5BOkhlbmFuOlhpbnhpYW5nIFNoaQorOTg6Q046Q0hOOkNISU5BOkhlbmFuOlhpbnlhbmcKKzk5OkNOOkNITjpDSElOQTpIZW5hbjpYaW55YW5nIFNoaQorMTAwOkNOOkNITjpDSElOQTpIZW5hbjpYaW55ZQorMTAxOkNOOkNITjpDSElOQTpIZW5hbjpYaW56aGVuZworMTAyOkNOOkNITjpDSElOQTpIZW5hbjpYaXBpbmcKKzEwMzpDTjpDSE46Q0hJTkE6SGVuYW46WGl1d3UKKzEwNDpDTjpDSE46Q0hJTkE6SGVuYW46WGl4aWEKKzEwNTpDTjpDSE46Q0hJTkE6SGVuYW46WHVjaGFuZworMTA2OkNOOkNITjpDSElOQTpIZW5hbjpYdWNoYW5nIFNoaQorMTA3OkNOOkNITjpDSElOQTpIZW5hbjpYdW4gWGlhbgorMTA4OkNOOkNITjpDSElOQTpIZW5hbjpZYW5jaGVuZworMTA5OkNOOkNITjpDSElOQTpIZW5hbjpZYW5qaW4KKzExMDpDTjpDSE46Q0hJTkE6SGVuYW46WWFubGluZworMTExOkNOOkNITjpDSElOQTpIZW5hbjpZYW5zaGkKKzExMjpDTjpDSE46Q0hJTkE6SGVuYW46WWljaHVhbgorMTEzOkNOOkNITjpDSElOQTpIZW5hbjpZaWUgWGlhbgorMTE0OkNOOkNITjpDSElOQTpIZW5hbjpZaW1hIFNoaQorMTE1OkNOOkNITjpDSElOQTpIZW5hbjpZaXlhbmcKKzExNjpDTjpDSE46Q0hJTkE6SGVuYW46WW9uZ2NoZW5nCisxMTc6Q046Q0hOOkNISU5BOkhlbmFuOll1IFhpYW4KKzExODpDTjpDSE46Q0hJTkE6SGVuYW46WXVhbnlhbmcKKzExOTpDTjpDSE46Q0hJTkE6SGVuYW46WXVjaGVuZworMTIwOkNOOkNITjpDSElOQTpIZW5hbjpaaGVjaGVuZworMTIxOkNOOkNITjpDSElOQTpIZW5hbjpaaGVuZ3lhbmcKKzEyMjpDTjpDSE46Q0hJTkE6SGVuYW46Wmhlbmd6aG91IFNoaXF1CisxMjM6Q046Q0hOOkNISU5BOkhlbmFuOlpoZW5waW5nCisxMjQ6Q046Q0hOOkNISU5BOkhlbmFuOlpob25nbW91CisxMjU6Q046Q0hOOkNISU5BOkhlbmFuOlpob3Vrb3UgU2hpCisxMjY6Q046Q0hOOkNISU5BOkhlbmFuOlpodW1hZGlhbiBTaGkKKzE6Q046Q0hOOkNISU5BOk5ldyBUZXJyaXRvcmllczpDSE4uTDIuMTgKKzI6Q046Q0hOOkNISU5BOk5ldyBUZXJyaXRvcmllczpDSE4uTDIuMTkKKzM6Q046Q0hOOkNISU5BOk5ldyBUZXJyaXRvcmllczpDSE4uTDIuMjAKKzQ6Q046Q0hOOkNISU5BOk5ldyBUZXJyaXRvcmllczpDSE4uTDIuMjEKKzU6Q046Q0hOOkNISU5BOk5ldyBUZXJyaXRvcmllczpDSE4uTDIuMjIKKzY6Q046Q0hOOkNISU5BOk5ldyBUZXJyaXRvcmllczpDSE4uTDIuMjMKKzc6Q046Q0hOOkNISU5BOk5ldyBUZXJyaXRvcmllczpDSE4uTDIuMjQKKzg6Q046Q0hOOkNISU5BOk5ldyBUZXJyaXRvcmllczpDSE4uTDIuMjUKKzk6Q046Q0hOOkNISU5BOk5ldyBUZXJyaXRvcmllczpDSE4uTDIuMjYKKzEwOkNOOkNITjpDSElOQTpOZXcgVGVycml0b3JpZXM6Q0hOLkwyLjI3CisxMTpDTjpDSE46Q0hJTkE6TmV3IFRlcnJpdG9yaWVzOkNITi5MMi4yOAorMTI6Q046Q0hOOkNISU5BOk5ldyBUZXJyaXRvcmllczpDSE4uTDIuMjkKKzEzOkNOOkNITjpDSElOQTpOZXcgVGVycml0b3JpZXM6Q0hOLkwyLjMwCisxNDpDTjpDSE46Q0hJTkE6TmV3IFRlcnJpdG9yaWVzOkNITi5MMi4zMQorMTU6Q046Q0hOOkNISU5BOk5ldyBUZXJyaXRvcmllczpDSE4uTDIuMzIKKzE6Q046Q0hOOkNISU5BOlNoYW5naGFpOkJhb3NoYW4KKzI6Q046Q0hOOkNISU5BOlNoYW5naGFpOkNob25nbWluZworMzpDTjpDSE46Q0hJTkE6U2hhbmdoYWk6Q2h1YW5zaGEKKzQ6Q046Q0hOOkNISU5BOlNoYW5naGFpOkZlbmd4aWFuCis1OkNOOkNITjpDSElOQTpTaGFuZ2hhaTpKaWFkaW5nCis2OkNOOkNITjpDSElOQTpTaGFuZ2hhaTpKaW5zaGFuCis3OkNOOkNITjpDSElOQTpTaGFuZ2hhaTpOYW5odWkKKzg6Q046Q0hOOkNISU5BOlNoYW5naGFpOlFpbmdwdQorOTpDTjpDSE46Q0hJTkE6U2hhbmdoYWk6U2hhbmdoYWkKKzEwOkNOOkNITjpDSElOQTpTaGFuZ2hhaTpTaGFuZ2hhaSBTaGlxdQorMTE6Q046Q0hOOkNISU5BOlNoYW5naGFpOlNvbmdqaWFuZworMTpDTjpDSE46Q0hJTkE6TWFyaW5lOkNITi5MMi4xMAorMjpDTjpDSE46Q0hJTkE6TWFyaW5lOkNITi5MMi4xMQorMzpDTjpDSE46Q0hJTkE6TWFyaW5lOkNITi5MMi4xMgorNDpDTjpDSE46Q0hJTkE6TWFyaW5lOkNITi5MMi4xMworNTpDTjpDSE46Q0hJTkE6TWFyaW5lOkNITi5MMi4xNAorNjpDTjpDSE46Q0hJTkE6TWFyaW5lOkNITi5MMi4xNQorNzpDTjpDSE46Q0hJTkE6TWFyaW5lOkNITi5MMi4xNgorODpDTjpDSE46Q0hJTkE6TWFyaW5lOkNITi5MMi4xNworOTpDTjpDSE46Q0hJTkE6TWFyaW5lOkNITi5MMi41CisxMDpDTjpDSE46Q0hJTkE6TWFyaW5lOkNITi5MMi42CisxMTpDTjpDSE46Q0hJTkE6TWFyaW5lOkNITi5MMi43CisxMjpDTjpDSE46Q0hJTkE6TWFyaW5lOkNITi5MMi44CisxMzpDTjpDSE46Q0hJTkE6TWFyaW5lOkNITi5MMi45CisxOkNOOkNITjpDSElOQTpIb25na29uZyBJc2xhbmQ6Q0hOLkwyLjEKKzI6Q046Q0hOOkNISU5BOkhvbmdrb25nIElzbGFuZDpDSE4uTDIuMgorMTpDTjpDSE46Q0hJTkE6TmVpIE1vbmdvbCBaaXpoaXF1OkFiYWcgUWkKKzI6Q046Q0hOOkNISU5BOk5laSBNb25nb2wgWml6aGlxdTpBYmFnbmFyIFFpCiszOkNOOkNITjpDSElOQTpOZWkgTW9uZ29sIFppemhpcXU6QWx4YSBZb3VxaQorNDpDTjpDSE46Q0hJTkE6TmVpIE1vbmdvbCBaaXpoaXF1OkFseGEgWnVvcWkKKzU6Q046Q0hOOkNISU5BOk5laSBNb25nb2wgWml6aGlxdTpBb2hhbiBRaQorNjpDTjpDSE46Q0hJTkE6TmVpIE1vbmdvbCBaaXpoaXF1OkFyIEhvcnFpbiBRaQorNzpDTjpDSE46Q0hJTkE6TmVpIE1vbmdvbCBaaXpoaXF1OkFydW4gUWkKKzg6Q046Q0hOOkNISU5BOk5laSBNb25nb2wgWml6aGlxdTpCYWlyaW4gWnVvcWkKKzk6Q046Q0hOOkNISU5BOk5laSBNb25nb2wgWml6aGlxdTpCYWxyaW4gWW91cWkKKzEwOkNOOkNITjpDSElOQTpOZWkgTW9uZ29sIFppemhpcXU6QmFvdG91IFNoaXF1CisxMTpDTjpDSE46Q0hJTkE6TmVpIE1vbmdvbCBaaXpoaXF1OkJ1dGhhIFFpCisxMjpDTjpDSE46Q0hJTkE6TmVpIE1vbmdvbCBaaXpoaXF1OkNoZW5iYXJhZyBRaQorMTM6Q046Q0hOOkNISU5BOk5laSBNb25nb2wgWml6aGlxdTpDaGlmZW5nCisxNDpDTjpDSE46Q0hJTkE6TmVpIE1vbmdvbCBaaXpoaXF1OkNoaWZlbmcgU2hpCisxNTpDTjpDSE46Q0hJTkE6TmVpIE1vbmdvbCBaaXpoaXF1OkRhbGFkIFFpCisxNjpDTjpDSE46Q0hJTkE6TmVpIE1vbmdvbCBaaXpoaXF1OkRhcmhhbiBNdW1pbmdnYW4gTGlhCisxNzpDTjpDSE46Q0hJTkE6TmVpIE1vbmdvbCBaaXpoaXF1OkRlbmdrb3UKKzE4OkNOOkNITjpDSElOQTpOZWkgTW9uZ29sIFppemhpcXU6RG9uZyBVamltcWluIFFpCisxOTpDTjpDSE46Q0hJTkE6TmVpIE1vbmdvbCBaaXpoaXF1OkRvbmdzaGVuZworMjA6Q046Q0hOOkNISU5BOk5laSBNb25nb2wgWml6aGlxdTpEdW9sdW4KKzIxOkNOOkNITjpDSElOQTpOZWkgTW9uZ29sIFppemhpcXU6RWppbiBRaQorMjI6Q046Q0hOOkNISU5BOk5laSBNb25nb2wgWml6aGlxdTpFamluaG9ybyBRaQorMjM6Q046Q0hOOkNISU5BOk5laSBNb25nb2wgWml6aGlxdTpFcmVuaG90IFNoaQorMjQ6Q046Q0hOOkNISU5BOk5laSBNb25nb2wgWml6aGlxdTpFcmd1biBZb3VxaQorMjU6Q046Q0hOOkNISU5BOk5laSBNb25nb2wgWml6aGlxdTpFcmd1biBadW9xaQorMjY6Q046Q0hOOkNISU5BOk5laSBNb25nb2wgWml6aGlxdTpFd2Vua2l6dSBaaXpoaXFpCisyNzpDTjpDSE46Q0hJTkE6TmVpIE1vbmdvbCBaaXpoaXF1OkZlbmd6aGVuCisyODpDTjpDSE46Q0hJTkE6TmVpIE1vbmdvbCBaaXpoaXF1Okd1eWFuZworMjk6Q046Q0hOOkNISU5BOk5laSBNb25nb2wgWml6aGlxdTpIYWdpbiBIb3VxaQorMzA6Q046Q0hOOkNISU5BOk5laSBNb25nb2wgWml6aGlxdTpIYWlsYXIgU2hpCiszMTpDTjpDSE46Q0hJTkE6TmVpIE1vbmdvbCBaaXpoaXF1OkhhbmdnaW4gUWkKKzMyOkNOOkNITjpDSElOQTpOZWkgTW9uZ29sIFppemhpcXU6SGFycWluIFFpCiszMzpDTjpDSE46Q0hJTkE6TmVpIE1vbmdvbCBaaXpoaXF1OkhleGlndGVuIFFpCiszNDpDTjpDSE46Q0hJTkE6TmVpIE1vbmdvbCBaaXpoaXF1OkhvaGhvdCBTaGlxdQorMzU6Q046Q0hOOkNISU5BOk5laSBNb25nb2wgWml6aGlxdTpIb3JpbmdlcgorMzY6Q046Q0hOOkNISU5BOk5laSBNb25nb2wgWml6aGlxdTpIb3JxaW4gWW91eWlxaWFucWkKKzM3OkNOOkNITjpDSElOQTpOZWkgTW9uZ29sIFppemhpcXU6SG9ycWluIFlvdXlpemhvbmdxaQorMzg6Q046Q0hOOkNISU5BOk5laSBNb25nb2wgWml6aGlxdTpIb3JxaW4gWnVveWlob3VxaQorMzk6Q046Q0hOOkNISU5BOk5laSBNb25nb2wgWml6aGlxdTpIb3JxaW4gWnVveWl6aG9uZ3FpCis0MDpDTjpDSE46Q0hJTkE6TmVpIE1vbmdvbCBaaXpoaXF1Okh1YWRlCis0MTpDTjpDSE46Q0hJTkE6TmVpIE1vbmdvbCBaaXpoaXF1Okh1cmUgUWkKKzQyOkNOOkNITjpDSElOQTpOZWkgTW9uZ29sIFppemhpcXU6SmFsYWlkIFFpCis0MzpDTjpDSE46Q0hJTkE6TmVpIE1vbmdvbCBaaXpoaXF1OkphcnVkIFFpCis0NDpDTjpDSE46Q0hJTkE6TmVpIE1vbmdvbCBaaXpoaXF1OkppbmluZyBTaGkKKzQ1OkNOOkNITjpDSElOQTpOZWkgTW9uZ29sIFppemhpcXU6SnVuZ2FyIFFpCis0NjpDTjpDSE46Q0hJTkE6TmVpIE1vbmdvbCBaaXpoaXF1OkthaWx1Cis0NzpDTjpDSE46Q0hJTkE6TmVpIE1vbmdvbCBaaXpoaXF1OkxpYW5nY2hlbmcKKzQ4OkNOOkNITjpDSElOQTpOZWkgTW9uZ29sIFppemhpcXU6TGluaGUKKzQ5OkNOOkNITjpDSElOQTpOZWkgTW9uZ29sIFppemhpcXU6TGlueGkKKzUwOkNOOkNITjpDSElOQTpOZWkgTW9uZ29sIFppemhpcXU6TWFuemhvdWxpIFNoaQorNTE6Q046Q0hOOkNISU5BOk5laSBNb25nb2wgWml6aGlxdTpNb3JpbmRhd2EgRGF1ciBBYgorNTI6Q046Q0hOOkNISU5BOk5laSBNb25nb2wgWml6aGlxdTpOYWltYW4gUWkKKzUzOkNOOkNITjpDSElOQTpOZWkgTW9uZ29sIFppemhpcXU6TmluZ2NoZW5nCis1NDpDTjpDSE46Q0hJTkE6TmVpIE1vbmdvbCBaaXpoaXF1Ok9uZ25pdWQgUWkKKzU1OkNOOkNITjpDSElOQTpOZWkgTW9uZ29sIFppemhpcXU6T3JvcWVuIFppemhpcWkKKzU2OkNOOkNITjpDSElOQTpOZWkgTW9uZ29sIFppemhpcXU6T3RvZyBRaQorNTc6Q046Q0hOOkNISU5BOk5laSBNb25nb2wgWml6aGlxdTpPdG9nIFFpYW5xaQorNTg6Q046Q0hOOkNISU5BOk5laSBNb25nb2wgWml6aGlxdTpRYWhhciBZb3V5aSBIb3VxaQorNTk6Q046Q0hOOkNISU5BOk5laSBNb25nb2wgWml6aGlxdTpRYWhhciBZb3V5aSBRaWFucWkKKzYwOkNOOkNITjpDSElOQTpOZWkgTW9uZ29sIFppemhpcXU6UWFoYXIgWW91eWkgWmhvbmdxaQorNjE6Q046Q0hOOkNISU5BOk5laSBNb25nb2wgWml6aGlxdTpRaW5nc2h1aWhlCis2MjpDTjpDSE46Q0hJTkE6TmVpIE1vbmdvbCBaaXpoaXF1OlNoYW5nZHUKKzYzOkNOOkNITjpDSElOQTpOZWkgTW9uZ29sIFppemhpcXU6U2l6aXdhbmcgUWkKKzY0OkNOOkNITjpDSElOQTpOZWkgTW9uZ29sIFppemhpcXU6U29uaWQgWW91cWkKKzY1OkNOOkNITjpDSElOQTpOZWkgTW9uZ29sIFppemhpcXU6U29uaWQgWnVvcWkKKzY2OkNOOkNITjpDSElOQTpOZWkgTW9uZ29sIFppemhpcXU6VGFpYnVzIFFpCis2NzpDTjpDSE46Q0hJTkE6TmVpIE1vbmdvbCBaaXpoaXF1OlRvZ3RvaAorNjg6Q046Q0hOOkNISU5BOk5laSBNb25nb2wgWml6aGlxdTpUb25nbGlhbworNjk6Q046Q0hOOkNISU5BOk5laSBNb25nb2wgWml6aGlxdTpUb25nbGlhbyBTaGkKKzcwOkNOOkNITjpDSElOQTpOZWkgTW9uZ29sIFppemhpcXU6VHVtZCBZb3VxaQorNzE6Q046Q0hOOkNISU5BOk5laSBNb25nb2wgWml6aGlxdTpUdW1kIFpvdXFpCis3MjpDTjpDSE46Q0hJTkE6TmVpIE1vbmdvbCBaaXpoaXF1OlR1cXVhbgorNzM6Q046Q0hOOkNISU5BOk5laSBNb25nb2wgWml6aGlxdTpVbGFuaG90IFNoaQorNzQ6Q046Q0hOOkNISU5BOk5laSBNb25nb2wgWml6aGlxdTpVcmFkIEhvdXFpCis3NTpDTjpDSE46Q0hJTkE6TmVpIE1vbmdvbCBaaXpoaXF1OlVyYWQgUWlhbnFpCis3NjpDTjpDSE46Q0hJTkE6TmVpIE1vbmdvbCBaaXpoaXF1OlVyYWQgWmhvbmdxaQorNzc6Q046Q0hOOkNISU5BOk5laSBNb25nb2wgWml6aGlxdTpVeGluIFFpCis3ODpDTjpDSE46Q0hJTkE6TmVpIE1vbmdvbCBaaXpoaXF1Old1Y2h1YW4KKzc5OkNOOkNITjpDSElOQTpOZWkgTW9uZ29sIFppemhpcXU6V3VoYWkgU2hpCis4MDpDTjpDSE46Q0hJTkE6TmVpIE1vbmdvbCBaaXpoaXF1Old1eXVhbgorODE6Q046Q0hOOkNISU5BOk5laSBNb25nb2wgWml6aGlxdTpYaSBVamltcWluIFFpCis4MjpDTjpDSE46Q0hJTkE6TmVpIE1vbmdvbCBaaXpoaXF1OlhpYW5naHVhbmcgUWkKKzgzOkNOOkNITjpDSElOQTpOZWkgTW9uZ29sIFppemhpcXU6WGluYmFyYWcgWW91cWkKKzg0OkNOOkNITjpDSElOQTpOZWkgTW9uZ29sIFppemhpcXU6WGluYmFyYWcgWnVvcWkKKzg1OkNOOkNITjpDSElOQTpOZWkgTW9uZ29sIFppemhpcXU6WGluZ2hlCis4NjpDTjpDSE46Q0hJTkE6TmVpIE1vbmdvbCBaaXpoaXF1Olh1Z3VpdCBRaQorODc6Q046Q0hOOkNISU5BOk5laSBNb25nb2wgWml6aGlxdTpaaGFuZ2xhbiBRaQorODg6Q046Q0hOOkNISU5BOk5laSBNb25nb2wgWml6aGlxdTpaaGVuZ3hpYW5iYWkgUWkKKzg5OkNOOkNITjpDSElOQTpOZWkgTW9uZ29sIFppemhpcXU6WmhvdXppCisxOkNOOkNITjpDSElOQTpYaXphbmcgWml6aGlxdSAoVGliZXQpOkFtZG8KKzI6Q046Q0hOOkNISU5BOlhpemFuZyBaaXpoaXF1IChUaWJldCk6QmFpbmFuZworMzpDTjpDSE46Q0hJTkE6WGl6YW5nIFppemhpcXUgKFRpYmV0KTpCYW5iYXIKKzQ6Q046Q0hOOkNISU5BOlhpemFuZyBaaXpoaXF1IChUaWJldCk6QmFxZW4KKzU6Q046Q0hOOkNISU5BOlhpemFuZyBaaXpoaXF1IChUaWJldCk6QmF4b2kKKzY6Q046Q0hOOkNISU5BOlhpemFuZyBaaXpoaXF1IChUaWJldCk6QmlydQorNzpDTjpDSE46Q0hJTkE6WGl6YW5nIFppemhpcXUgKFRpYmV0KTpCb21pCis4OkNOOkNITjpDSElOQTpYaXphbmcgWml6aGlxdSAoVGliZXQpOkJ1cmFuZworOTpDTjpDSE46Q0hJTkE6WGl6YW5nIFppemhpcXUgKFRpYmV0KTpDb21haQorMTA6Q046Q0hOOkNISU5BOlhpemFuZyBaaXpoaXF1IChUaWJldCk6Q29uYQorMTE6Q046Q0hOOkNISU5BOlhpemFuZyBaaXpoaXF1IChUaWJldCk6Q29xZW4KKzEyOkNOOkNITjpDSElOQTpYaXphbmcgWml6aGlxdSAoVGliZXQpOkRhZ3plCisxMzpDTjpDSE46Q0hJTkE6WGl6YW5nIFppemhpcXUgKFRpYmV0KTpEYW14dW5nCisxNDpDTjpDSE46Q0hJTkE6WGl6YW5nIFppemhpcXUgKFRpYmV0KTpEZW5ncWVuCisxNTpDTjpDSE46Q0hJTkE6WGl6YW5nIFppemhpcXUgKFRpYmV0KTpEaW5nZ3llCisxNjpDTjpDSE46Q0hJTkE6WGl6YW5nIFppemhpcXUgKFRpYmV0KTpEb2lsdW5nZGVxZW4KKzE3OkNOOkNITjpDSElOQTpYaXphbmcgWml6aGlxdSAoVGliZXQpOkdhbWJhCisxODpDTjpDSE46Q0hJTkE6WGl6YW5nIFppemhpcXUgKFRpYmV0KTpHYXIKKzE5OkNOOkNITjpDSElOQTpYaXphbmcgWml6aGlxdSAoVGliZXQpOkdlIEd5YWkKKzIwOkNOOkNITjpDSElOQTpYaXphbmcgWml6aGlxdSAoVGliZXQpOkdlcnplCisyMTpDTjpDSE46Q0hJTkE6WGl6YW5nIFppemhpcXUgKFRpYmV0KTpHb25nYm9neWFtZGEKKzIyOkNOOkNITjpDSElOQTpYaXphbmcgWml6aGlxdSAoVGliZXQpOkdvbmdnYXIKKzIzOkNOOkNITjpDSElOQTpYaXphbmcgWml6aGlxdSAoVGliZXQpOkdvbmpvCisyNDpDTjpDSE46Q0hJTkE6WGl6YW5nIFppemhpcXUgKFRpYmV0KTpHeWFjYQorMjU6Q046Q0hOOkNISU5BOlhpemFuZyBaaXpoaXF1IChUaWJldCk6R3lhbmd6ZQorMjY6Q046Q0hOOkNISU5BOlhpemFuZyBaaXpoaXF1IChUaWJldCk6R3lpcm9uZworMjc6Q046Q0hOOkNISU5BOlhpemFuZyBaaXpoaXF1IChUaWJldCk6Sm9tZGEKKzI4OkNOOkNITjpDSElOQTpYaXphbmcgWml6aGlxdSAoVGliZXQpOkthbmdtYXIKKzI5OkNOOkNITjpDSElOQTpYaXphbmcgWml6aGlxdSAoVGliZXQpOkxoYXJpCiszMDpDTjpDSE46Q0hJTkE6WGl6YW5nIFppemhpcXUgKFRpYmV0KTpMaGFzYSBTaGlxdQorMzE6Q046Q0hOOkNISU5BOlhpemFuZyBaaXpoaXF1IChUaWJldCk6TGhhemUKKzMyOkNOOkNITjpDSElOQTpYaXphbmcgWml6aGlxdSAoVGliZXQpOkxob3JvbmcKKzMzOkNOOkNITjpDSElOQTpYaXphbmcgWml6aGlxdSAoVGliZXQpOkxob3poYWcKKzM0OkNOOkNITjpDSElOQTpYaXphbmcgWml6aGlxdSAoVGliZXQpOkxodW56ZQorMzU6Q046Q0hOOkNISU5BOlhpemFuZyBaaXpoaXF1IChUaWJldCk6TGh1bnpodWIKKzM2OkNOOkNITjpDSElOQTpYaXphbmcgWml6aGlxdSAoVGliZXQpOk1haW5saW5nCiszNzpDTjpDSE46Q0hJTkE6WGl6YW5nIFppemhpcXUgKFRpYmV0KTpNYWl6aG9rdW5nZ2FyCiszODpDTjpDSE46Q0hJTkE6WGl6YW5nIFppemhpcXUgKFRpYmV0KTpNYXJrYW0KKzM5OkNOOkNITjpDSElOQTpYaXphbmcgWml6aGlxdSAoVGliZXQpOk1lZG9nCis0MDpDTjpDSE46Q0hJTkE6WGl6YW5nIFppemhpcXUgKFRpYmV0KTpOYWdxdQorNDE6Q046Q0hOOkNISU5BOlhpemFuZyBaaXpoaXF1IChUaWJldCk6TmFncnplCis0MjpDTjpDSE46Q0hJTkE6WGl6YW5nIFppemhpcXUgKFRpYmV0KTpOYW1saW5nCis0MzpDTjpDSE46Q0hJTkE6WGl6YW5nIFppemhpcXUgKFRpYmV0KTpOYW5nIFhpYW4KKzQ0OkNOOkNITjpDSElOQTpYaXphbmcgWml6aGlxdSAoVGliZXQpOk5lZG9uZworNDU6Q046Q0hOOkNISU5BOlhpemFuZyBaaXpoaXF1IChUaWJldCk6TmdhbXJpbmcKKzQ2OkNOOkNITjpDSElOQTpYaXphbmcgWml6aGlxdSAoVGliZXQpOk55YWlucm9uZworNDc6Q046Q0hOOkNISU5BOlhpemFuZyBaaXpoaXF1IChUaWJldCk6TnlhbGFtCis0ODpDTjpDSE46Q0hJTkE6WGl6YW5nIFppemhpcXUgKFRpYmV0KTpOeWVtbworNDk6Q046Q0hOOkNISU5BOlhpemFuZyBaaXpoaXF1IChUaWJldCk6TnlpbmdjaGkKKzUwOkNOOkNITjpDSElOQTpYaXphbmcgWml6aGlxdSAoVGliZXQpOlFhbWRvCis1MTpDTjpDSE46Q0hJTkE6WGl6YW5nIFppemhpcXUgKFRpYmV0KTpRb25nZ3lhaQorNTI6Q046Q0hOOkNISU5BOlhpemFuZyBaaXpoaXF1IChUaWJldCk6UXVzdW0KKzUzOkNOOkNITjpDSElOQTpYaXphbmcgWml6aGlxdSAoVGliZXQpOlF1eHUKKzU0OkNOOkNITjpDSElOQTpYaXphbmcgWml6aGlxdSAoVGliZXQpOlJhaW5nb2luCis1NTpDTjpDSE46Q0hJTkE6WGl6YW5nIFppemhpcXUgKFRpYmV0KTpSaW5idW5nCis1NjpDTjpDSE46Q0hJTkE6WGl6YW5nIFppemhpcXUgKFRpYmV0KTpSaXdvcWUKKzU3OkNOOkNITjpDSElOQTpYaXphbmcgWml6aGlxdSAoVGliZXQpOlJ1dG9nCis1ODpDTjpDSE46Q0hJTkE6WGl6YW5nIFppemhpcXUgKFRpYmV0KTpTYWdhCis1OTpDTjpDSE46Q0hJTkE6WGl6YW5nIFppemhpcXUgKFRpYmV0KTpTYWd5YQorNjA6Q046Q0hOOkNISU5BOlhpemFuZyBaaXpoaXF1IChUaWJldCk6U2FuZ3JpCis2MTpDTjpDSE46Q0hJTkE6WGl6YW5nIFppemhpcXUgKFRpYmV0KTpTb2cgWGlhbgorNjI6Q046Q0hOOkNISU5BOlhpemFuZyBaaXpoaXF1IChUaWJldCk6VGluZ3JpCis2MzpDTjpDSE46Q0hJTkE6WGl6YW5nIFppemhpcXUgKFRpYmV0KTpYYWluemEKKzY0OkNOOkNITjpDSElOQTpYaXphbmcgWml6aGlxdSAoVGliZXQpOlhhaXRvbmdtb2luCis2NTpDTjpDSE46Q0hJTkE6WGl6YW5nIFppemhpcXUgKFRpYmV0KTpYaWdhemUKKzY2OkNOOkNITjpDSElOQTpYaXphbmcgWml6aGlxdSAoVGliZXQpOllhZG9uZworNjc6Q046Q0hOOkNISU5BOlhpemFuZyBaaXpoaXF1IChUaWJldCk6WmFuZGEKKzY4OkNOOkNITjpDSElOQTpYaXphbmcgWml6aGlxdSAoVGliZXQpOlpheXUKKzY5OkNOOkNITjpDSElOQTpYaXphbmcgWml6aGlxdSAoVGliZXQpOlpoYWcgWWFiCis3MDpDTjpDSE46Q0hJTkE6WGl6YW5nIFppemhpcXUgKFRpYmV0KTpaaGFuYW5nCis3MTpDTjpDSE46Q0hJTkE6WGl6YW5nIFppemhpcXUgKFRpYmV0KTpaaG9uZ2JhCis3MjpDTjpDSE46Q0hJTkE6WGl6YW5nIFppemhpcXUgKFRpYmV0KTpab2dhbmcKKzE6Q046Q0hOOkNISU5BOkppbGluOkFudHUKKzI6Q046Q0hOOkNISU5BOkppbGluOkJhaWNoZW5nIFNoaQorMzpDTjpDSE46Q0hJTkE6SmlsaW46Q2hhbmdiYWkKKzQ6Q046Q0hOOkNISU5BOkppbGluOkNoYW5nY2h1biBTaGlxdQorNTpDTjpDSE46Q0hJTkE6SmlsaW46Q2hhbmdsaW5nCis2OkNOOkNITjpDSElOQTpKaWxpbjpEYSBBbgorNzpDTjpDSE46Q0hJTkE6SmlsaW46RGVodWkKKzg6Q046Q0hOOkNISU5BOkppbGluOkRvbmdmZW5nCis5OkNOOkNITjpDSElOQTpKaWxpbjpEdW5odWEKKzEwOkNOOkNITjpDSElOQTpKaWxpbjpGdXNvbmcKKzExOkNOOkNITjpDSElOQTpKaWxpbjpGdXl1CisxMjpDTjpDSE46Q0hJTkE6SmlsaW46SGFpbG9uZworMTM6Q046Q0hOOkNISU5BOkppbGluOkhlbG9uZworMTQ6Q046Q0hOOkNISU5BOkppbGluOkh1YWRpYW4KKzE1OkNOOkNITjpDSElOQTpKaWxpbjpIdWFpZGUKKzE2OkNOOkNITjpDSElOQTpKaWxpbjpIdWluYW4KKzE3OkNOOkNITjpDSElOQTpKaWxpbjpIdW5jaHVuCisxODpDTjpDSE46Q0hJTkE6SmlsaW46SHVuamlhbmcgU2hpCisxOTpDTjpDSE46Q0hJTkE6SmlsaW46SmkgQW4KKzIwOkNOOkNITjpDSElOQTpKaWxpbjpKaWFvaGUKKzIxOkNOOkNITjpDSElOQTpKaWxpbjpKaWxpbiBTaGlxdQorMjI6Q046Q0hOOkNISU5BOkppbGluOkppbmd5dQorMjM6Q046Q0hOOkNISU5BOkppbGluOkppdXRhaQorMjQ6Q046Q0hOOkNISU5BOkppbGluOkxpYW95dWFuIFNoaQorMjU6Q046Q0hOOkNISU5BOkppbGluOkxpc2h1CisyNjpDTjpDSE46Q0hJTkE6SmlsaW46TGl1aGUKKzI3OkNOOkNITjpDSElOQTpKaWxpbjpOb25nIEFuCisyODpDTjpDSE46Q0hJTkE6SmlsaW46UGFuc2hpCisyOTpDTjpDSE46Q0hJTkE6SmlsaW46UWlhbiBBbgorMzA6Q046Q0hOOkNISU5BOkppbGluOlFpYW5nb3Jsb3MKKzMxOkNOOkNITjpDSElOQTpKaWxpbjpTaHVhbmdsaWFvCiszMjpDTjpDSE46Q0hJTkE6SmlsaW46U2h1YW5neWFuZworMzM6Q046Q0hOOkNISU5BOkppbGluOlNodWxhbgorMzQ6Q046Q0hOOkNISU5BOkppbGluOlNpcGluZyBTaGkKKzM1OkNOOkNITjpDSElOQTpKaWxpbjpUYW9hbgorMzY6Q046Q0hOOkNISU5BOkppbGluOlRvbmdodWEKKzM3OkNOOkNITjpDSElOQTpKaWxpbjpUb25naHVhIFNoaQorMzg6Q046Q0hOOkNISU5BOkppbGluOlRvbmd5dQorMzk6Q046Q0hOOkNISU5BOkppbGluOlR1bWVuIFNoaQorNDA6Q046Q0hOOkNISU5BOkppbGluOldhbmdxaW5nCis0MTpDTjpDSE46Q0hJTkE6SmlsaW46WWFuamkKKzQyOkNOOkNITjpDSElOQTpKaWxpbjpZaWFuamkgU2hpCis0MzpDTjpDSE46Q0hJTkE6SmlsaW46WWl0b25nCis0NDpDTjpDSE46Q0hJTkE6SmlsaW46WW9uZ2ppCis0NTpDTjpDSE46Q0hJTkE6SmlsaW46WXVzaHUKKzQ2OkNOOkNITjpDSElOQTpKaWxpbjpaaGVubGFpCisxOkNOOkNITjpDSElOQTpBbmh1aTpBbnFpbmcgU2hpCisyOkNOOkNITjpDSElOQTpBbmh1aTpCZW5nYnUgU2hpCiszOkNOOkNITjpDSElOQTpBbmh1aTpCb3hpYW4KKzQ6Q046Q0hOOkNISU5BOkFuaHVpOkNoYW5nZmVuZworNTpDTjpDSE46Q0hJTkE6QW5odWk6Q2hhbyBYaWFuCis2OkNOOkNITjpDSElOQTpBbmh1aTpDaHV4aWFuCis3OkNOOkNITjpDSElOQTpBbmh1aTpEYW5nc2hhbgorODpDTjpDSE46Q0hJTkE6QW5odWk6RGFuZ3R1Cis5OkNOOkNITjpDSElOQTpBbmh1aTpEaW5neXVhbgorMTA6Q046Q0hOOkNISU5BOkFuaHVpOkRvbmd6aGkKKzExOkNOOkNITjpDSElOQTpBbmh1aTpGYW5jaGFuZworMTI6Q046Q0hOOkNISU5BOkFuaHVpOkZlaWRvbmcKKzEzOkNOOkNITjpDSElOQTpBbmh1aTpGZWl4aQorMTQ6Q046Q0hOOkNISU5BOkFuaHVpOkZlbmd0YWkKKzE1OkNOOkNITjpDSElOQTpBbmh1aTpGZW5neWFuZworMTY6Q046Q0hOOkNISU5BOkFuaHVpOkZ1bmFuCisxNzpDTjpDSE46Q0hJTkE6QW5odWk6RnV5YW5nCisxODpDTjpDSE46Q0hJTkE6QW5odWk6RnV5YW5nIFNoaQorMTk6Q046Q0hOOkNISU5BOkFuaHVpOkd1YW5nZGUKKzIwOkNOOkNITjpDSElOQTpBbmh1aTpHdWljaGkKKzIxOkNOOkNITjpDSElOQTpBbmh1aTpHdW95YW5nCisyMjpDTjpDSE46Q0hJTkE6QW5odWk6R3V6aGVuCisyMzpDTjpDSE46Q0hJTkE6QW5odWk6SGFuc2hhbgorMjQ6Q046Q0hOOkNISU5BOkFuaHVpOkhlIFhpYW4KKzI1OkNOOkNITjpDSElOQTpBbmh1aTpIZWZlaSBTaGlxdQorMjY6Q046Q0hOOkNISU5BOkFuaHVpOkh1YWliZWkgU2hpcXUKKzI3OkNOOkNITjpDSElOQTpBbmh1aTpIdWFpbmFuIFNoaXF1CisyODpDTjpDSE46Q0hJTkE6QW5odWk6SHVhaW5pbmcKKzI5OkNOOkNITjpDSElOQTpBbmh1aTpIdWFpeXVhbgorMzA6Q046Q0hOOkNISU5BOkFuaHVpOkh1b3FpdQorMzE6Q046Q0hOOkNISU5BOkFuaHVpOkh1b3NoYW4KKzMyOkNOOkNITjpDSElOQTpBbmh1aTpKaWFzaGFuCiszMzpDTjpDSE46Q0hJTkE6QW5odWk6Smllc2hvdQorMzQ6Q046Q0hOOkNISU5BOkFuaHVpOkppbmcgWGlhbgorMzU6Q046Q0hOOkNISU5BOkFuaHVpOkppbmdkZQorMzY6Q046Q0hOOkNISU5BOkFuaHVpOkppbnpoYWkKKzM3OkNOOkNITjpDSElOQTpBbmh1aTpKaXhpCiszODpDTjpDSE46Q0hJTkE6QW5odWk6TGFpYW4KKzM5OkNOOkNITjpDSElOQTpBbmh1aTpMYW5neGkKKzQwOkNOOkNITjpDSElOQTpBbmh1aTpMaW5nYmkKKzQxOkNOOkNITjpDSElOQTpBbmh1aTpMaW5xdWFuCis0MjpDTjpDSE46Q0hJTkE6QW5odWk6TGl4aW4KKzQzOkNOOkNITjpDSElOQTpBbmh1aTpMdSBBbgorNDQ6Q046Q0hOOkNISU5BOkFuaHVpOkx1IEFuIFNoaQorNDU6Q046Q0hOOkNISU5BOkFuaHVpOkx1amlhbmcKKzQ2OkNOOkNITjpDSElOQTpBbmh1aTpNYWFuc2hhbiBTaGkKKzQ3OkNOOkNITjpDSElOQTpBbmh1aTpNZW5nY2hlbmcKKzQ4OkNOOkNITjpDSElOQTpBbmh1aTpOYW5saW5nCis0OTpDTjpDSE46Q0hJTkE6QW5odWk6TmluZ2d1bworNTA6Q046Q0hOOkNISU5BOkFuaHVpOlFpYW5zaGFuCis1MTpDTjpDSE46Q0hJTkE6QW5odWk6UWltZW4KKzUyOkNOOkNITjpDSElOQTpBbmh1aTpRaW5neWFuZworNTM6Q046Q0hOOkNISU5BOkFuaHVpOlF1YXVqaWFvCis1NDpDTjpDSE46Q0hJTkE6QW5odWk6U2hleGlhbgorNTU6Q046Q0hOOkNISU5BOkFuaHVpOlNoaXRhaQorNTY6Q046Q0hOOkNISU5BOkFuaHVpOlNob3V4aWFuCis1NzpDTjpDSE46Q0hJTkE6QW5odWk6U2h1Y2hlbmcKKzU4OkNOOkNITjpDSElOQTpBbmh1aTpTaXhpYW4KKzU5OkNOOkNITjpDSElOQTpBbmh1aTpTdWNob3UgU2hpCis2MDpDTjpDSE46Q0hJTkE6QW5odWk6U3VpeGkKKzYxOkNOOkNITjpDSElOQTpBbmh1aTpTdXNvbmcKKzYyOkNOOkNITjpDSElOQTpBbmh1aTpTdXhpYW4KKzYzOkNOOkNITjpDSElOQTpBbmh1aTpUYWloZQorNjQ6Q046Q0hOOkNISU5BOkFuaHVpOlRhaWh1Cis2NTpDTjpDSE46Q0hJTkE6QW5odWk6VGFpcGluZworNjY6Q046Q0hOOkNISU5BOkFuaHVpOlRpYW5jaGFuZworNjc6Q046Q0hOOkNISU5BOkFuaHVpOlRvbmdjaGVuZworNjg6Q046Q0hOOkNISU5BOkFuaHVpOlRvbmdsaW5nCis2OTpDTjpDSE46Q0hJTkE6QW5odWk6VG9uZ2xpbmcgU2hpcXUKKzcwOkNOOkNITjpDSElOQTpBbmh1aTpUdW54aSBTaGkKKzcxOkNOOkNITjpDSElOQTpBbmh1aTpXYW5namlhbmcKKzcyOkNOOkNITjpDSElOQTpBbmh1aTpXdWhlCis3MzpDTjpDSE46Q0hJTkE6QW5odWk6V3VodQorNzQ6Q046Q0hOOkNISU5BOkFuaHVpOld1aHUgU2hpcXUKKzc1OkNOOkNITjpDSElOQTpBbmh1aTpXdXdlaQorNzY6Q046Q0hOOkNISU5BOkFuaHVpOlhpYW94aWFuCis3NzpDTjpDSE46Q0hJTkE6QW5odWk6WGl1bmluZworNzg6Q046Q0hOOkNISU5BOkFuaHVpOlh1YW5jaGVuZworNzk6Q046Q0hOOkNISU5BOkFuaHVpOllpbmdzaGFuZworODA6Q046Q0hOOkNISU5BOkFuaHVpOllpeGlhbgorODE6Q046Q0hOOkNISU5BOkFuaHVpOll1ZXhpCis4MjpDTjpDSE46Q0hJTkE6QW5odWk6Wm9uZ3lhbmcKKzE6Q046Q0hOOkNISU5BOlRhaXdhbjpHYW94aW9uZworMjpDTjpDSE46Q0hJTkE6VGFpd2FuOkdhb3hpb25nIFNoaQorMzpDTjpDSE46Q0hJTkE6VGFpd2FuOkh1YWxpYQorNDpDTjpDSE46Q0hJTkE6VGFpd2FuOkppYXlpCis1OkNOOkNITjpDSElOQTpUYWl3YW46Smlsb25nIFNoaQorNjpDTjpDSE46Q0hJTkE6VGFpd2FuOk1pYW9saQorNzpDTjpDSE46Q0hJTkE6VGFpd2FuOk5hbnRvdQorODpDTjpDSE46Q0hJTkE6VGFpd2FuOlBlbmdodQorOTpDTjpDSE46Q0hJTkE6VGFpd2FuOlBpbmdkb25nCisxMDpDTjpDSE46Q0hJTkE6VGFpd2FuOlJhb3BpbmcKKzExOkNOOkNITjpDSElOQTpUYWl3YW46VGFpYmVpCisxMjpDTjpDSE46Q0hJTkE6VGFpd2FuOlRhaWJlaSBTaGkKKzEzOkNOOkNITjpDSElOQTpUYWl3YW46VGFpZG9uZworMTQ6Q046Q0hOOkNISU5BOlRhaXdhbjpUYWluYW4KKzE1OkNOOkNITjpDSElOQTpUYWl3YW46VGFpbmFuIFNoaQorMTY6Q046Q0hOOkNISU5BOlRhaXdhbjpUYWl6aG9uZworMTc6Q046Q0hOOkNISU5BOlRhaXdhbjpUYWl6aG9uZyBTaGkKKzE4OkNOOkNITjpDSElOQTpUYWl3YW46VGFveXVhbgorMTk6Q046Q0hOOkNISU5BOlRhaXdhbjpYaW56aHUKKzIwOkNOOkNITjpDSElOQTpUYWl3YW46WWlsYW4KKzIxOkNOOkNITjpDSElOQTpUYWl3YW46WXVubGluCisyMjpDTjpDSE46Q0hJTkE6VGFpd2FuOlpoYW5naHVhCisxOkNOOkNITjpDSElOQTpTaWNodWFuOkFiYQorMjpDTjpDSE46Q0hJTkE6U2ljaHVhbjpBbiBYaWFuCiszOkNOOkNITjpDSElOQTpTaWNodWFuOkFueXVlCis0OkNOOkNITjpDSElOQTpTaWNodWFuOkJhaXNoYQorNTpDTjpDSE46Q0hJTkE6U2ljaHVhbjpCYWl5dQorNjpDTjpDSE46Q0hJTkE6U2ljaHVhbjpCYW94aW5nCis3OkNOOkNITjpDSElOQTpTaWNodWFuOkJhdGFuZworODpDTjpDSE46Q0hJTkE6U2ljaHVhbjpCYXpob25nCis5OkNOOkNITjpDSElOQTpTaWNodWFuOkJlaWNodWFuCisxMDpDTjpDSE46Q0hJTkE6U2ljaHVhbjpCdXR1bworMTE6Q046Q0hOOkNISU5BOlNpY2h1YW46Q2FuZ3hpCisxMjpDTjpDSE46Q0hJTkE6U2ljaHVhbjpDaGFuZ25pbmcKKzEzOkNOOkNITjpDSElOQTpTaWNodWFuOkNoZW5nZHUgU2hpcXUKKzE0OkNOOkNITjpDSElOQTpTaWNodWFuOkNob25ncWluZworMTU6Q046Q0hOOkNISU5BOlNpY2h1YW46RGEgWGlhbgorMTY6Q046Q0hOOkNISU5BOlNpY2h1YW46RGFuYmEKKzE3OkNOOkNITjpDSElOQTpTaWNodWFuOkRhbmxlbmcKKzE4OkNOOkNITjpDSElOQTpTaWNodWFuOkRhb2NoZW5nCisxOTpDTjpDSE46Q0hJTkE6U2ljaHVhbjpEYXd1CisyMDpDTjpDSE46Q0hJTkE6U2ljaHVhbjpEYXhpYW4gU2hpCisyMTpDTjpDSE46Q0hJTkE6U2ljaHVhbjpEYXlpCisyMjpDTjpDSE46Q0hJTkE6U2ljaHVhbjpEYXpodQorMjM6Q046Q0hOOkNISU5BOlNpY2h1YW46RGVjaGFuZworMjQ6Q046Q0hOOkNISU5BOlNpY2h1YW46RGVnZQorMjU6Q046Q0hOOkNISU5BOlNpY2h1YW46RGVyb25nCisyNjpDTjpDSE46Q0hJTkE6U2ljaHVhbjpEZXlhbmcKKzI3OkNOOkNITjpDSElOQTpTaWNodWFuOkR1a291IFNoaXF1CisyODpDTjpDSE46Q0hJTkE6U2ljaHVhbjpFYmlhbgorMjk6Q046Q0hOOkNISU5BOlNpY2h1YW46RW1laQorMzA6Q046Q0hOOkNISU5BOlNpY2h1YW46RnVzaHVuCiszMTpDTjpDSE46Q0hJTkE6U2ljaHVhbjpHYW5sdW8KKzMyOkNOOkNITjpDSElOQTpTaWNodWFuOkdhbyBYaWFuCiszMzpDTjpDSE46Q0hJTkE6U2ljaHVhbjpHYXJ6ZQorMzQ6Q046Q0hOOkNISU5BOlNpY2h1YW46R3VhbiBYaWFuCiszNTpDTjpDSE46Q0hJTkE6U2ljaHVhbjpHdWFuZyBBbgorMzY6Q046Q0hOOkNISU5BOlNpY2h1YW46R3VhbmdoYW4KKzM3OkNOOkNITjpDSElOQTpTaWNodWFuOkd1YW5neXVhbgorMzg6Q046Q0hOOkNISU5BOlNpY2h1YW46R3VsaW4KKzM5OkNOOkNITjpDSElOQTpTaWNodWFuOkhhbnl1YW4KKzQwOkNOOkNITjpDSElOQTpTaWNodWFuOkhlaXNodWkKKzQxOkNOOkNITjpDSElOQTpTaWNodWFuOkhlamlhbmcKKzQyOkNOOkNITjpDSElOQTpTaWNodWFuOkhvbmd5YQorNDM6Q046Q0hOOkNISU5BOlNpY2h1YW46SG9uZ3l1YW4KKzQ0OkNOOkNITjpDSElOQTpTaWNodWFuOkh1YXl1bgorNDU6Q046Q0hOOkNISU5BOlNpY2h1YW46SHVpZG9uZworNDY6Q046Q0hOOkNISU5BOlNpY2h1YW46SHVpbGkKKzQ3OkNOOkNITjpDSElOQTpTaWNodWFuOkppYWppYW5nCis0ODpDTjpDSE46Q0hJTkE6U2ljaHVhbjpKaWFuZyBBbgorNDk6Q046Q0hOOkNISU5BOlNpY2h1YW46SmlhbmdlCis1MDpDTjpDSE46Q0hJTkE6U2ljaHVhbjpKaWFuZ3lvdQorNTE6Q046Q0hOOkNISU5BOlNpY2h1YW46SmlhbnlhbmcKKzUyOkNOOkNITjpDSElOQTpTaWNodWFuOkppbmNodWFuCis1MzpDTjpDSE46Q0hJTkE6U2ljaHVhbjpKaW50YW5nCis1NDpDTjpDSE46Q0hJTkE6U2ljaHVhbjpKaW55YW4KKzU1OkNOOkNITjpDSElOQTpTaWNodWFuOkppbnlhbmcKKzU2OkNOOkNITjpDSElOQTpTaWNodWFuOkppdWxvbmcKKzU3OkNOOkNITjpDSElOQTpTaWNodWFuOkp1bmxpYW4KKzU4OkNOOkNITjpDSElOQTpTaWNodWFuOkthaWppYW5nCis1OTpDTjpDSE46Q0hJTkE6U2ljaHVhbjpLYW5nZGluZworNjA6Q046Q0hOOkNISU5BOlNpY2h1YW46TGFuZ3pob25nCis2MTpDTjpDSE46Q0hJTkE6U2ljaHVhbjpMZWlibworNjI6Q046Q0hOOkNISU5BOlNpY2h1YW46TGVzaGFuIFNoaQorNjM6Q046Q0hOOkNISU5BOlNpY2h1YW46TGV6aGkKKzY0OkNOOkNITjpDSElOQTpTaWNodWFuOkxpIFhpYW4KKzY1OkNOOkNITjpDSElOQTpTaWNodWFuOkxpbnNodWkKKzY2OkNOOkNITjpDSElOQTpTaWNodWFuOkxpdGFuZworNjc6Q046Q0hOOkNISU5BOlNpY2h1YW46TG9uZ2NoYW5nCis2ODpDTjpDSE46Q0hJTkE6U2ljaHVhbjpMdSBYaWFuCis2OTpDTjpDSE46Q0hJTkE6U2ljaHVhbjpMdWRpbmcKKzcwOkNOOkNITjpDSElOQTpTaWNodWFuOkx1aHVvCis3MTpDTjpDSE46Q0hJTkE6U2ljaHVhbjpMdXNoYW4KKzcyOkNOOkNITjpDSElOQTpTaWNodWFuOkx1emhvdSBTaGkKKzczOkNOOkNITjpDSElOQTpTaWNodWFuOk1hYmlhbgorNzQ6Q046Q0hOOkNISU5BOlNpY2h1YW46TWFvd2VuCis3NTpDTjpDSE46Q0hJTkE6U2ljaHVhbjpNYXJrYW0KKzc2OkNOOkNITjpDSElOQTpTaWNodWFuOk1laWd1Cis3NzpDTjpDSE46Q0hJTkE6U2ljaHVhbjpNZWlzaGFuCis3ODpDTjpDSE46Q0hJTkE6U2ljaHVhbjpNaWFubmluZworNzk6Q046Q0hOOkNISU5BOlNpY2h1YW46TWlhbnlhbmcgU2hpCis4MDpDTjpDSE46Q0hJTkE6U2ljaHVhbjpNaWFuemh1Cis4MTpDTjpDSE46Q0hJTkE6U2ljaHVhbjpNaW5nc2hhbgorODI6Q046Q0hOOkNISU5BOlNpY2h1YW46TWl5aQorODM6Q046Q0hOOkNISU5BOlNpY2h1YW46TXVjaHVhbgorODQ6Q046Q0hOOkNISU5BOlNpY2h1YW46TXVsaQorODU6Q046Q0hOOkNISU5BOlNpY2h1YW46TmFuYnUKKzg2OkNOOkNITjpDSElOQTpTaWNodWFuOk5hbmNob25nCis4NzpDTjpDSE46Q0hJTkE6U2ljaHVhbjpOYW5jaG9uZyBTaGkKKzg4OkNOOkNITjpDSElOQTpTaWNodWFuOk5hbmppYW5nCis4OTpDTjpDSE46Q0hJTkE6U2ljaHVhbjpOYW5waW5nCis5MDpDTjpDSE46Q0hJTkE6U2ljaHVhbjpOYW54aQorOTE6Q046Q0hOOkNISU5BOlNpY2h1YW46TmF4aQorOTI6Q046Q0hOOkNISU5BOlNpY2h1YW46TmVpamlhbmcKKzkzOkNOOkNITjpDSElOQTpTaWNodWFuOk5pbmduYW4KKzk0OkNOOkNITjpDSElOQTpTaWNodWFuOlBlbmcgQW4KKzk1OkNOOkNITjpDSElOQTpTaWNodWFuOlBlbmcgWGlhbgorOTY6Q046Q0hOOkNISU5BOlNpY2h1YW46UGVuZ3NoYW4KKzk3OkNOOkNITjpDSElOQTpTaWNodWFuOlBlbmd4aQorOTg6Q046Q0hOOkNISU5BOlNpY2h1YW46UGkgWGlhbgorOTk6Q046Q0hOOkNISU5BOlNpY2h1YW46UGluZ2NoYW5nCisxMDA6Q046Q0hOOkNISU5BOlNpY2h1YW46UGluZ3NoYW4KKzEwMTpDTjpDSE46Q0hJTkE6U2ljaHVhbjpQaW5nd3UKKzEwMjpDTjpDSE46Q0hJTkE6U2ljaHVhbjpQdWdlCisxMDM6Q046Q0hOOkNISU5BOlNpY2h1YW46UHVqaWFuZworMTA0OkNOOkNITjpDSElOQTpTaWNodWFuOlFpYW53ZWkKKzEwNTpDTjpDSE46Q0hJTkE6U2ljaHVhbjpRaW5nY2h1YW4KKzEwNjpDTjpDSE46Q0hJTkE6U2ljaHVhbjpRaW5nc2hlbgorMTA3OkNOOkNITjpDSElOQTpTaWNodWFuOlFpb25nbGFpCisxMDg6Q046Q0hOOkNISU5BOlNpY2h1YW46UXUgWGlhbgorMTA5OkNOOkNITjpDSElOQTpTaWNodWFuOlJlbnNob3UKKzExMDpDTjpDSE46Q0hJTkE6U2ljaHVhbjpSb25nIFhpYW4KKzExMTpDTjpDSE46Q0hJTkE6U2ljaHVhbjpTYW50YWkKKzExMjpDTjpDSE46Q0hJTkE6U2ljaHVhbjpTZXJ0YXIKKzExMzpDTjpDSE46Q0hJTkE6U2ljaHVhbjpTZXJ4dQorMTE0OkNOOkNITjpDSElOQTpTaWNodWFuOlNoZWhvbmcKKzExNTpDTjpDSE46Q0hJTkE6U2ljaHVhbjpTaGlmYW5nCisxMTY6Q046Q0hOOkNISU5BOlNpY2h1YW46U2hpbWlhbgorMTE3OkNOOkNITjpDSElOQTpTaWNodWFuOlNodWFuZ2xpdQorMTE4OkNOOkNITjpDSElOQTpTaWNodWFuOlNvbmdwYW4KKzExOTpDTjpDSE46Q0hJTkE6U2ljaHVhbjpTdWluaW5nCisxMjA6Q046Q0hOOkNISU5BOlNpY2h1YW46VGlhbnF1YW4KKzEyMTpDTjpDSE46Q0hJTkE6U2ljaHVhbjpUb25namlhbmcKKzEyMjpDTjpDSE46Q0hJTkE6U2ljaHVhbjpXYW5nY2FuZworMTIzOkNOOkNITjpDSElOQTpTaWNodWFuOldhbnl1YW4KKzEyNDpDTjpDSE46Q0hJTkE6U2ljaHVhbjpXZWl5dWFuCisxMjU6Q046Q0hOOkNISU5BOlNpY2h1YW46V2VuY2h1YW4KKzEyNjpDTjpDSE46Q0hJTkE6U2ljaHVhbjpXZW5qaWFuZworMTI3OkNOOkNITjpDSElOQTpTaWNodWFuOld1c2hlbmcKKzEyODpDTjpDSE46Q0hJTkE6U2ljaHVhbjpYaWFuZ2NoZW5nCisxMjk6Q046Q0hOOkNISU5BOlNpY2h1YW46WGlhb2ppbgorMTMwOkNOOkNITjpDSElOQTpTaWNodWFuOlhpY2hhbmcKKzEzMTpDTjpDSE46Q0hJTkE6U2ljaHVhbjpYaWNoYW5nIFNoaQorMTMyOkNOOkNITjpDSElOQTpTaWNodWFuOlhpY2hvbmcKKzEzMzpDTjpDSE46Q0hJTkE6U2ljaHVhbjpYaWRlCisxMzQ6Q046Q0hOOkNISU5BOlNpY2h1YW46WGluZHUKKzEzNTpDTjpDSE46Q0hJTkE6U2ljaHVhbjpYaW5nd2VuCisxMzY6Q046Q0hOOkNISU5BOlNpY2h1YW46WGluamluCisxMzc6Q046Q0hOOkNISU5BOlNpY2h1YW46WGlubG9uZworMTM4OkNOOkNITjpDSElOQTpTaWNodWFuOlh1YW5oYW4KKzEzOTpDTjpDSE46Q0hJTkE6U2ljaHVhbjpYdXlvbmcKKzE0MDpDTjpDSE46Q0hJTkE6U2ljaHVhbjpZYSBBbgorMTQxOkNOOkNITjpDSElOQTpTaWNodWFuOllhamlhbmcKKzE0MjpDTjpDSE46Q0hJTkE6U2ljaHVhbjpZYW5iaWFuCisxNDM6Q046Q0hOOkNISU5BOlNpY2h1YW46WWFudGluZworMTQ0OkNOOkNITjpDSElOQTpTaWNodWFuOllhbnl1YW4KKzE0NTpDTjpDSE46Q0hJTkE6U2ljaHVhbjpZaWJpbgorMTQ2OkNOOkNITjpDSElOQTpTaWNodWFuOllpYmluIFNoaQorMTQ3OkNOOkNITjpDSElOQTpTaWNodWFuOllpbG9uZworMTQ4OkNOOkNITjpDSElOQTpTaWNodWFuOllpbmdqaW5nCisxNDk6Q046Q0hOOkNISU5BOlNpY2h1YW46WWluZ3NoYW4KKzE1MDpDTjpDSE46Q0hJTkE6U2ljaHVhbjpZdWVjaGkKKzE1MTpDTjpDSE46Q0hJTkE6U2ljaHVhbjpZdWV4aQorMTUyOkNOOkNITjpDSElOQTpTaWNodWFuOlphbXRhbmcKKzE1MzpDTjpDSE46Q0hJTkE6U2ljaHVhbjpaaGFvanVlCisxNTQ6Q046Q0hOOkNISU5BOlNpY2h1YW46WmhvbmdqaWFuZworMTU1OkNOOkNITjpDSElOQTpTaWNodWFuOlppZ29uZyBTaGlxdQorMTU2OkNOOkNITjpDSElOQTpTaWNodWFuOlppdG9uZworMTU3OkNOOkNITjpDSElOQTpTaWNodWFuOlppeWFuZworMTU4OkNOOkNITjpDSElOQTpTaWNodWFuOlppemhvbmcKKzE1OTpDTjpDSE46Q0hJTkE6U2ljaHVhbjpab2lnZQorMTpDTjpDSE46Q0hJTkE6S293bG9vbiBhbmQgTmV3IEtvd2xvb246Q0hOLkwyLjMKKzI6Q046Q0hOOkNISU5BOktvd2xvb24gYW5kIE5ldyBLb3dsb29uOkNITi5MMi40CisxOkNOOkNITjpDSElOQTpIZWJlaTpBbmNpCisyOkNOOkNITjpDSElOQTpIZWJlaTpBbmdvdQorMzpDTjpDSE46Q0hJTkE6SGViZWk6QW5waW5nCis0OkNOOkNITjpDSElOQTpIZWJlaTpBbnhpbgorNTpDTjpDSE46Q0hJTkE6SGViZWk6QmEgWGlhbgorNjpDTjpDSE46Q0hJTkE6SGViZWk6QmFpeGlhbmcKKzc6Q046Q0hOOkNISU5BOkhlYmVpOkJhb2RpbmcgU2hpCis4OkNOOkNITjpDSElOQTpIZWJlaTpCb3llCis5OkNOOkNITjpDSElOQTpIZWJlaTpDYW5nIFhpYW4KKzEwOkNOOkNITjpDSElOQTpIZWJlaTpDYW5nemhvdQorMTE6Q046Q0hOOkNISU5BOkhlYmVpOkNoYW5nbGkKKzEyOkNOOkNITjpDSElOQTpIZWJlaTpDaGVuZyBBbgorMTM6Q046Q0hOOkNISU5BOkhlYmVpOkNoZW5nZGUKKzE0OkNOOkNITjpDSElOQTpIZWJlaTpDaGVuZ2RlIFNoaQorMTU6Q046Q0hOOkNISU5BOkhlYmVpOkNoaWNoZW5nCisxNjpDTjpDSE46Q0hJTkE6SGViZWk6Q2hvbmdsaQorMTc6Q046Q0hOOkNISU5BOkhlYmVpOkNpIFhpYW4KKzE4OkNOOkNITjpDSElOQTpIZWJlaTpEYWNoYW5nIEh1aSBBYworMTk6Q046Q0hOOkNISU5BOkhlYmVpOkRhY2hlbmcKKzIwOkNOOkNITjpDSElOQTpIZWJlaTpEYW1pbmcKKzIxOkNOOkNITjpDSElOQTpIZWJlaTpEaW5nIFhpYW4KKzIyOkNOOkNITjpDSElOQTpIZWJlaTpEaW5neGluZworMjM6Q046Q0hOOkNISU5BOkhlYmVpOkRvbmdndWFuZworMjQ6Q046Q0hOOkNISU5BOkhlYmVpOkZlaXhpYW5nCisyNTpDTjpDSE46Q0hJTkE6SGViZWk6RmVuZ25hbgorMjY6Q046Q0hOOkNISU5BOkhlYmVpOkZlbmduaW5nCisyNzpDTjpDSE46Q0hJTkE6SGViZWk6RmVuZ3J1bgorMjg6Q046Q0hOOkNISU5BOkhlYmVpOkZ1Y2hlbmcKKzI5OkNOOkNITjpDSElOQTpIZWJlaTpGdW5pbmcKKzMwOkNOOkNITjpDSElOQTpIZWJlaTpGdXBpbmcKKzMxOkNOOkNITjpDSElOQTpIZWJlaTpHYW9jaGVuZworMzI6Q046Q0hOOkNISU5BOkhlYmVpOkdhb3lhbmcKKzMzOkNOOkNITjpDSElOQTpIZWJlaTpHYW95aQorMzQ6Q046Q0hOOkNISU5BOkhlYmVpOkd1IEFuCiszNTpDTjpDSE46Q0hJTkE6SGViZWk6R3VhbmdwaW5nCiszNjpDTjpDSE46Q0hJTkE6SGViZWk6R3VhbnRhbworMzc6Q046Q0hOOkNISU5BOkhlYmVpOkd1YW56b25nCiszODpDTjpDSE46Q0hJTkE6SGViZWk6R3VjaGVuZworMzk6Q046Q0hOOkNISU5BOkhlYmVpOkd1eXVhbgorNDA6Q046Q0hOOkNISU5BOkhlYmVpOkhhaXhpbmcKKzQxOkNOOkNITjpDSElOQTpIZWJlaTpIYW5kYW4KKzQyOkNOOkNITjpDSElOQTpIZWJlaTpIYW5kYW4gU2hpCis0MzpDTjpDSE46Q0hJTkE6SGViZWk6SGVqaWFuCis0NDpDTjpDSE46Q0hJTkE6SGViZWk6SGVuZ3NodWkKKzQ1OkNOOkNITjpDSElOQTpIZWJlaTpIZW5nc2h1aSBTaGkKKzQ2OkNOOkNITjpDSElOQTpIZWJlaTpIdWFpYW4KKzQ3OkNOOkNITjpDSElOQTpIZWJlaTpIdWFpbGFpCis0ODpDTjpDSE46Q0hJTkE6SGViZWk6SHVhbmdodWEKKzQ5OkNOOkNITjpDSElOQTpIZWJlaTpIdWVsdQorNTA6Q046Q0hOOkNISU5BOkhlYmVpOkppIFhpYW4KKzUxOkNOOkNITjpDSElOQTpIZWJlaTpKaWFvaGUKKzUyOkNOOkNITjpDSElOQTpIZWJlaTpKaW5nIFhpYW4KKzUzOkNOOkNITjpDSElOQTpIZWJlaTpKaW5neGluZworNTQ6Q046Q0hOOkNISU5BOkhlYmVpOkppemUKKzU1OkNOOkNITjpDSElOQTpIZWJlaTpKdWx1Cis1NjpDTjpDSE46Q0hJTkE6SGViZWk6S2FuZ2JhbworNTc6Q046Q0hOOkNISU5BOkhlYmVpOkt1YW5jaGVuZworNTg6Q046Q0hOOkNISU5BOkhlYmVpOkxhaXNodWkKKzU5OkNOOkNITjpDSElOQTpIZWJlaTpMYWl5dWFuCis2MDpDTjpDSE46Q0hJTkE6SGViZWk6TGV0aW5nCis2MTpDTjpDSE46Q0hJTkE6SGViZWk6TGkgWGlhbgorNjI6Q046Q0hOOkNISU5BOkhlYmVpOkxpbmNoZW5nCis2MzpDTjpDSE46Q0hJTkE6SGViZWk6TGluZ3Nob3UKKzY0OkNOOkNITjpDSElOQTpIZWJlaTpMaW54aQorNjU6Q046Q0hOOkNISU5BOkhlYmVpOkxpbnpoYW5nCis2NjpDTjpDSE46Q0hJTkE6SGViZWk6TG9uZ2ZhbmcgU2hpCis2NzpDTjpDSE46Q0hJTkE6SGViZWk6TG9uZ2h1YQorNjg6Q046Q0hOOkNISU5BOkhlYmVpOkxvbmd5YW8KKzY5OkNOOkNITjpDSElOQTpIZWJlaTpMdWFuIFhpYW4KKzcwOkNOOkNITjpDSElOQTpIZWJlaTpMdWFuY2hlbmcKKzcxOkNOOkNITjpDSElOQTpIZWJlaTpMdWFubmFuCis3MjpDTjpDSE46Q0hJTkE6SGViZWk6THVhbnBpbmcKKzczOkNOOkNITjpDSElOQTpIZWJlaTpMdWxvbmcgWGlhbgorNzQ6Q046Q0hOOkNISU5BOkhlYmVpOk1hbmNoZW5nCis3NTpDTjpDSE46Q0hJTkE6SGViZWk6TWVuZ2N1biBIdWkgQWMKKzc2OkNOOkNITjpDSElOQTpIZWJlaTpOYW5nb25nCis3NzpDTjpDSE46Q0hJTkE6SGViZWk6TmFuaGUKKzc4OkNOOkNITjpDSElOQTpIZWJlaTpOYW5waQorNzk6Q046Q0hOOkNISU5BOkhlYmVpOk5laXFpdQorODA6Q046Q0hOOkNISU5BOkhlYmVpOk5pbmdqaW4KKzgxOkNOOkNITjpDSElOQTpIZWJlaTpQaW5ncXVhbgorODI6Q046Q0hOOkNISU5BOkhlYmVpOlBpbmdzaGFuCis4MzpDTjpDSE46Q0hJTkE6SGViZWk6UGluZ3hpYW5nCis4NDpDTjpDSE46Q0hJTkE6SGViZWk6UWlhbiBBbgorODU6Q046Q0hOOkNISU5BOkhlYmVpOlFpYW54aQorODY6Q046Q0hOOkNISU5BOkhlYmVpOlFpbmcgWGlhbgorODc6Q046Q0hOOkNISU5BOkhlYmVpOlFpbmcgWXVhbgorODg6Q046Q0hOOkNISU5BOkhlYmVpOlFpbmdoZQorODk6Q046Q0hOOkNISU5BOkhlYmVpOlFpbmdsb25nCis5MDpDTjpDSE46Q0hJTkE6SGViZWk6UWluaHVhbmdkYW8gU2hpCis5MTpDTjpDSE46Q0hJTkE6SGViZWk6UWl1IFhpYW4KKzkyOkNOOkNITjpDSElOQTpIZWJlaTpRdXlhbmcKKzkzOkNOOkNITjpDSElOQTpIZWJlaTpRdXpob3UKKzk0OkNOOkNITjpDSElOQTpIZWJlaTpSYW95YW5nCis5NTpDTjpDSE46Q0hJTkE6SGViZWk6UmVuIFhpYW4KKzk2OkNOOkNITjpDSElOQTpIZWJlaTpSZW5xaXUKKzk3OkNOOkNITjpDSElOQTpIZWJlaTpSb25nY2hlbmcKKzk4OkNOOkNITjpDSElOQTpIZWJlaTpTYW5oZQorOTk6Q046Q0hOOkNISU5BOkhlYmVpOlNoYWhlCisxMDA6Q046Q0hOOkNISU5BOkhlYmVpOlNoYW5neWkKKzEwMTpDTjpDSE46Q0hJTkE6SGViZWk6U2hlIFhpYW4KKzEwMjpDTjpDSE46Q0hJTkE6SGViZWk6U2hlbiBYaWFuCisxMDM6Q046Q0hOOkNISU5BOkhlYmVpOlNoZW56ZQorMTA0OkNOOkNITjpDSElOQTpIZWJlaTpTaGlqaWF6aHVhbmcgU2hpCisxMDU6Q046Q0hOOkNISU5BOkhlYmVpOlNodWx1CisxMDY6Q046Q0hOOkNISU5BOkhlYmVpOlN1bmluZworMTA3OkNOOkNITjpDSElOQTpIZWJlaTpUYW5nIFhpYW4KKzEwODpDTjpDSE46Q0hJTkE6SGViZWk6VGFuZ3NoYW4gU2hpCisxMDk6Q046Q0hOOkNISU5BOkhlYmVpOldhbiBYaWFuCisxMTA6Q046Q0hOOkNISU5BOkhlYmVpOldhbmdkdQorMTExOkNOOkNITjpDSElOQTpIZWJlaTpXYW5xdWFuCisxMTI6Q046Q0hOOkNISU5BOkhlYmVpOldlaSBYaWFuCisxMTM6Q046Q0hOOkNISU5BOkhlYmVpOldlaWNoYW5nCisxMTQ6Q046Q0hOOkNISU5BOkhlYmVpOldlbiBBbgorMTE1OkNOOkNITjpDSElOQTpIZWJlaTpXdSBBbgorMTE2OkNOOkNITjpDSElOQTpIZWJlaTpXdWppCisxMTc6Q046Q0hOOkNISU5BOkhlYmVpOld1cWlhbmcKKzExODpDTjpDSE46Q0hJTkE6SGViZWk6V3VxaWFvCisxMTk6Q046Q0hOOkNISU5BOkhlYmVpOld1eWkKKzEyMDpDTjpDSE46Q0hJTkE6SGViZWk6WGlhbiBYaWFuCisxMjE6Q046Q0hOOkNISU5BOkhlYmVpOlhpYW5naGUKKzEyMjpDTjpDSE46Q0hJTkE6SGViZWk6WGluY2hlbmcKKzEyMzpDTjpDSE46Q0hJTkE6SGViZWk6WGluZ2xvbmcKKzEyNDpDTjpDSE46Q0hJTkE6SGViZWk6WGluZ3RhaQorMTI1OkNOOkNITjpDSElOQTpIZWJlaTpYaW5ndGFpIFNoaQorMTI2OkNOOkNITjpDSElOQTpIZWJlaTpYaW5ndGFuZworMTI3OkNOOkNITjpDSElOQTpIZWJlaTpYaW5oZQorMTI4OkNOOkNITjpDSElOQTpIZWJlaTpYaW5sZQorMTI5OkNOOkNITjpDSElOQTpIZWJlaTpYaW9uZyBYaWFuCisxMzA6Q046Q0hOOkNISU5BOkhlYmVpOlh1YW5odWEKKzEzMTpDTjpDSE46Q0hJTkE6SGViZWk6WHVzaHVpCisxMzI6Q046Q0hOOkNISU5BOkhlYmVpOllhbmd5dWFuCisxMzM6Q046Q0hOOkNISU5BOkhlYmVpOllhbnNoYW4KKzEzNDpDTjpDSE46Q0hJTkE6SGViZWk6WWkgWGlhbgorMTM1OkNOOkNITjpDSElOQTpIZWJlaTpZb25nbmlhbgorMTM2OkNOOkNITjpDSElOQTpIZWJlaTpZb25ncWluZworMTM3OkNOOkNITjpDSElOQTpIZWJlaTpZdSBYaWFuCisxMzg6Q046Q0hOOkNISU5BOkhlYmVpOll1YW5zaGkKKzEzOTpDTjpDSE46Q0hJTkE6SGViZWk6WXV0aWFuCisxNDA6Q046Q0hOOkNISU5BOkhlYmVpOlphbmh1YW5nCisxNDE6Q046Q0hOOkNISU5BOkhlYmVpOlphb3FpYW5nCisxNDI6Q046Q0hOOkNISU5BOkhlYmVpOlpoYW5nYmVpCisxNDM6Q046Q0hOOkNISU5BOkhlYmVpOlpoYW5namlha291IFNoaQorMTQ0OkNOOkNITjpDSElOQTpIZWJlaTpaaGFvIFhpYW4KKzE0NTpDTjpDSE46Q0hJTkE6SGViZWk6WmhlbmdkaW5nCisxNDY6Q046Q0hOOkNISU5BOkhlYmVpOlpodW8gWGlhbgorMTQ3OkNOOkNITjpDSElOQTpIZWJlaTpaaHVvbHUKKzE0ODpDTjpDSE46Q0hJTkE6SGViZWk6WnVuaHVhCisxOkNOOkNITjpDSElOQTpGdWppYW46QW54aQorMjpDTjpDSE46Q0hJTkE6RnVqaWFuOkNoYW5nbGUKKzM6Q046Q0hOOkNISU5BOkZ1amlhbjpDaGFuZ3RhaQorNDpDTjpDSE46Q0hJTkE6RnVqaWFuOkNoYW5ndGluZworNTpDTjpDSE46Q0hJTkE6RnVqaWFuOkNob25nYW4KKzY6Q046Q0hOOkNISU5BOkZ1amlhbjpEYXRpYW4KKzc6Q046Q0hOOkNISU5BOkZ1amlhbjpEZWh1YQorODpDTjpDSE46Q0hJTkE6RnVqaWFuOkRvbmdzaGFuCis5OkNOOkNITjpDSElOQTpGdWppYW46RnVhbgorMTA6Q046Q0hOOkNISU5BOkZ1amlhbjpGdWRpbmcKKzExOkNOOkNITjpDSElOQTpGdWppYW46RnVxaW5nCisxMjpDTjpDSE46Q0hJTkE6RnVqaWFuOkZ1emhvdSBTaGlxdQorMTM6Q046Q0hOOkNISU5BOkZ1amlhbjpHdWFuZ3plCisxNDpDTjpDSE46Q0hJTkE6RnVqaWFuOkd1dGlhbgorMTU6Q046Q0hOOkNISU5BOkZ1amlhbjpIdWFhbgorMTY6Q046Q0hOOkNISU5BOkZ1amlhbjpIdWlhbgorMTc6Q046Q0hOOkNISU5BOkZ1amlhbjpKaWFuZ2xlCisxODpDTjpDSE46Q0hJTkE6RnVqaWFuOkppYW5neWFuZworMTk6Q046Q0hOOkNISU5BOkZ1amlhbjpKaWFubmluZworMjA6Q046Q0hOOkNISU5BOkZ1amlhbjpKaWFub3UKKzIxOkNOOkNITjpDSElOQTpGdWppYW46SmluamlhbmcKKzIyOkNOOkNITjpDSElOQTpGdWppYW46SmlubWVuCisyMzpDTjpDSE46Q0hJTkE6RnVqaWFuOkxpYW5jaGVuZworMjQ6Q046Q0hOOkNISU5BOkZ1amlhbjpMaWFuamlhbmcKKzI1OkNOOkNITjpDSElOQTpGdWppYW46TG9uZ2hhaQorMjY6Q046Q0hOOkNISU5BOkZ1amlhbjpMb25neWFuIFNoaQorMjc6Q046Q0hOOkNISU5BOkZ1amlhbjpMdW95dWFuCisyODpDTjpDSE46Q0hJTkE6RnVqaWFuOk1pbmdxaW5nCisyOTpDTjpDSE46Q0hJTkE6RnVqaWFuOk1pbmd4aQorMzA6Q046Q0hOOkNISU5BOkZ1amlhbjpNaW5ob3UKKzMxOkNOOkNITjpDSElOQTpGdWppYW46TmFuYW4KKzMyOkNOOkNITjpDSElOQTpGdWppYW46TmFuamluZworMzM6Q046Q0hOOkNISU5BOkZ1amlhbjpOYW5waW5nIFNoaQorMzQ6Q046Q0hOOkNISU5BOkZ1amlhbjpOaW5nZGUKKzM1OkNOOkNITjpDSElOQTpGdWppYW46TmluZ2h1YQorMzY6Q046Q0hOOkNISU5BOkZ1amlhbjpQaW5naGUKKzM3OkNOOkNITjpDSElOQTpGdWppYW46UGluZ25hbgorMzg6Q046Q0hOOkNISU5BOkZ1amlhbjpQaW5ndGFuCiszOTpDTjpDSE46Q0hJTkE6RnVqaWFuOlB1Y2hlbmcKKzQwOkNOOkNITjpDSElOQTpGdWppYW46UHV0aWFuCis0MTpDTjpDSE46Q0hJTkE6RnVqaWFuOlFpbmdsaXUKKzQyOkNOOkNITjpDSElOQTpGdWppYW46UXVhbnpob3UgU2hpCis0MzpDTjpDSE46Q0hJTkE6RnVqaWFuOlNoYSBYaWFuCis0NDpDTjpDSE46Q0hJTkE6RnVqaWFuOlNoYW5naGFuZworNDU6Q046Q0hOOkNISU5BOkZ1amlhbjpTaGFubWluZyBTaGkKKzQ2OkNOOkNITjpDSElOQTpGdWppYW46U2hhb3d1Cis0NzpDTjpDSE46Q0hJTkE6RnVqaWFuOlNob3VuaW5nCis0ODpDTjpDSE46Q0hJTkE6RnVqaWFuOlNodW5jaGFuZworNDk6Q046Q0hOOkNISU5BOkZ1amlhbjpTb25neGkKKzUwOkNOOkNITjpDSElOQTpGdWppYW46VGFpbmluZworNTE6Q046Q0hOOkNISU5BOkZ1amlhbjpUb25nYW4KKzUyOkNOOkNITjpDSElOQTpGdWppYW46V3VwaW5nCis1MzpDTjpDSE46Q0hJTkE6RnVqaWFuOlhpYW1lbiBTaGlxdQorNTQ6Q046Q0hOOkNISU5BOkZ1amlhbjpYaWFueW91Cis1NTpDTjpDSE46Q0hJTkE6RnVqaWFuOlhpYXB1Cis1NjpDTjpDSE46Q0hJTkE6RnVqaWFuOllvbmdhbgorNTc6Q046Q0hOOkNISU5BOkZ1amlhbjpZb25nY2h1bgorNTg6Q046Q0hOOkNISU5BOkZ1amlhbjpZb25nZGluZworNTk6Q046Q0hOOkNISU5BOkZ1amlhbjpZb25ndGFpCis2MDpDTjpDSE46Q0hJTkE6RnVqaWFuOllvdXhpCis2MTpDTjpDSE46Q0hJTkE6RnVqaWFuOll1bnhpYW8KKzYyOkNOOkNITjpDSElOQTpGdWppYW46WmhhbmdwaW5nCis2MzpDTjpDSE46Q0hJTkE6RnVqaWFuOlpoYW5ncHUKKzY0OkNOOkNITjpDSElOQTpGdWppYW46Wmhhbmd6aG91IFNoaQorNjU6Q046Q0hOOkNISU5BOkZ1amlhbjpaaGFvYW4KKzY2OkNOOkNITjpDSElOQTpGdWppYW46WmhlbmdoZQorNjc6Q046Q0hOOkNISU5BOkZ1amlhbjpaaGVyb25nCis2ODpDTjpDSE46Q0hJTkE6RnVqaWFuOlpob3VuaW5nCisxOkNOOkNITjpDSElOQTpKaWFuZ3N1OkJhb3lpbmcKKzI6Q046Q0hOOkNISU5BOkppYW5nc3U6QmluaGFpCiszOkNOOkNITjpDSElOQTpKaWFuZ3N1OkNoYW5nc2h1Cis0OkNOOkNITjpDSElOQTpKaWFuZ3N1OkNoYW5nemhvdSBTaGkKKzU6Q046Q0hOOkNISU5BOkppYW5nc3U6RGFpZmVuZworNjpDTjpDSE46Q0hJTkE6SmlhbmdzdTpEYW50dQorNzpDTjpDSE46Q0hJTkE6SmlhbmdzdTpEYW55YW5nCis4OkNOOkNITjpDSElOQTpKaWFuZ3N1OkRvbmdoYWkKKzk6Q046Q0hOOkNISU5BOkppYW5nc3U6RG9uZ3RhaQorMTA6Q046Q0hOOkNISU5BOkppYW5nc3U6RmVuZ3hpYW4KKzExOkNOOkNITjpDSElOQTpKaWFuZ3N1OkZ1bmluZworMTI6Q046Q0hOOkNISU5BOkppYW5nc3U6R2FueXUKKzEzOkNOOkNITjpDSElOQTpKaWFuZ3N1Okdhb2NodW4KKzE0OkNOOkNITjpDSElOQTpKaWFuZ3N1Okdhb3lpdQorMTU6Q046Q0hOOkNISU5BOkppYW5nc3U6R3Vhbm5hbgorMTY6Q046Q0hOOkNISU5BOkppYW5nc3U6R3Vhbnl1bgorMTc6Q046Q0hOOkNISU5BOkppYW5nc3U6SGFpYW4KKzE4OkNOOkNITjpDSElOQTpKaWFuZ3N1OkhhaW1lbgorMTk6Q046Q0hOOkNISU5BOkppYW5nc3U6SGFuamlhbmcKKzIwOkNOOkNITjpDSElOQTpKaWFuZ3N1Okhvbmd6ZQorMjE6Q046Q0hOOkNISU5BOkppYW5nc3U6SHVhaWFuCisyMjpDTjpDSE46Q0hJTkE6SmlhbmdzdTpIdWFpeWluCisyMzpDTjpDSE46Q0hJTkE6SmlhbmdzdTpKaWFuZ2R1CisyNDpDTjpDSE46Q0hJTkE6SmlhbmdzdTpKaWFuZ25pbmcKKzI1OkNOOkNITjpDSElOQTpKaWFuZ3N1OkppYW5ncHUKKzI2OkNOOkNITjpDSElOQTpKaWFuZ3N1OkppYW5neWluCisyNzpDTjpDSE46Q0hJTkE6SmlhbmdzdTpKaWFuaHUKKzI4OkNOOkNITjpDSElOQTpKaWFuZ3N1OkppbmdqaWFuZworMjk6Q046Q0hOOkNISU5BOkppYW5nc3U6SmluaHUKKzMwOkNOOkNITjpDSElOQTpKaWFuZ3N1OkppbnRhbgorMzE6Q046Q0hOOkNISU5BOkppYW5nc3U6SnVyb25nCiszMjpDTjpDSE46Q0hJTkE6SmlhbmdzdTpLdW5zaGFuCiszMzpDTjpDSE46Q0hJTkE6SmlhbmdzdTpMaWFuc2h1aQorMzQ6Q046Q0hOOkNISU5BOkppYW5nc3U6TGlhbnl1bmdhbmcgU2hpCiszNTpDTjpDSE46Q0hJTkE6SmlhbmdzdTpMaXNodWkKKzM2OkNOOkNITjpDSElOQTpKaWFuZ3N1OkxpeWFuZworMzc6Q046Q0hOOkNISU5BOkppYW5nc3U6THVoZQorMzg6Q046Q0hOOkNISU5BOkppYW5nc3U6TmFuamluZyBTaGlxdQorMzk6Q046Q0hOOkNISU5BOkppYW5nc3U6TmFudG9uZworNDA6Q046Q0hOOkNISU5BOkppYW5nc3U6TmFudG9uZyBTaGkKKzQxOkNOOkNITjpDSElOQTpKaWFuZ3N1OlBlaXhpYW4KKzQyOkNOOkNITjpDSElOQTpKaWFuZ3N1OlFpZG9uZworNDM6Q046Q0hOOkNISU5BOkppYW5nc3U6UWluZ2ppYW5nIFNoaQorNDQ6Q046Q0hOOkNISU5BOkppYW5nc3U6UnVkb25nCis0NTpDTjpDSE46Q0hJTkE6SmlhbmdzdTpSdWdhbworNDY6Q046Q0hOOkNISU5BOkppYW5nc3U6U2hhemhvdQorNDc6Q046Q0hOOkNISU5BOkppYW5nc3U6U2hleWFuZworNDg6Q046Q0hOOkNISU5BOkppYW5nc3U6U2h1eWFuZworNDk6Q046Q0hOOkNISU5BOkppYW5nc3U6U2lob25nCis1MDpDTjpDSE46Q0hJTkE6SmlhbmdzdTpTaXlhbmcKKzUxOkNOOkNITjpDSElOQTpKaWFuZ3N1OlN1aW5pbmcKKzUyOkNOOkNITjpDSElOQTpKaWFuZ3N1OlN1cWlhbgorNTM6Q046Q0hOOkNISU5BOkppYW5nc3U6U3V6aG91IFNoaQorNTQ6Q046Q0hOOkNISU5BOkppYW5nc3U6VGFpY2FuZworNTU6Q046Q0hOOkNISU5BOkppYW5nc3U6VGFpeGlhbgorNTY6Q046Q0hOOkNISU5BOkppYW5nc3U6VGFpeGluZworNTc6Q046Q0hOOkNISU5BOkppYW5nc3U6VGFpemhvdSBTaGkKKzU4OkNOOkNITjpDSElOQTpKaWFuZ3N1OlRvbmdzaGFuCis1OTpDTjpDSE46Q0hJTkE6SmlhbmdzdTpXdWppYW5nCis2MDpDTjpDSE46Q0hJTkE6SmlhbmdzdTpXdWppbgorNjE6Q046Q0hOOkNISU5BOkppYW5nc3U6V3V4aQorNjI6Q046Q0hOOkNISU5BOkppYW5nc3U6V3V4aSBTaGkKKzYzOkNOOkNITjpDSElOQTpKaWFuZ3N1Old1eGlhbgorNjQ6Q046Q0hOOkNISU5BOkppYW5nc3U6WGlhbmdzaHVpCis2NTpDTjpDSE46Q0hJTkE6SmlhbmdzdTpYaW5naHVhCis2NjpDTjpDSE46Q0hJTkE6SmlhbmdzdTpYaW55aQorNjc6Q046Q0hOOkNISU5BOkppYW5nc3U6WHV5aQorNjg6Q046Q0hOOkNISU5BOkppYW5nc3U6WHV6aG91IFNoaQorNjk6Q046Q0hOOkNISU5BOkppYW5nc3U6WWFuZ3pob25nCis3MDpDTjpDSE46Q0hJTkE6SmlhbmdzdTpZYW5nemhvdSBTaGkKKzcxOkNOOkNITjpDSElOQTpKaWFuZ3N1OllpYW5jaGVuZworNzI6Q046Q0hOOkNISU5BOkppYW5nc3U6WWl4aW5nCis3MzpDTjpDSE46Q0hJTkE6SmlhbmdzdTpZaXpoZW5nCis3NDpDTjpDSE46Q0hJTkE6SmlhbmdzdTpaaGVuamlhbmcgU2hpCisxOkNOOkNITjpDSElOQTpIdW5hbjpBbmh1YQorMjpDTjpDSE46Q0hJTkE6SHVuYW46QW5yZW4KKzM6Q046Q0hOOkNISU5BOkh1bmFuOkFueGlhbmcKKzQ6Q046Q0hOOkNISU5BOkh1bmFuOkJhb2ppbmcKKzU6Q046Q0hOOkNISU5BOkh1bmFuOkNoYWxpbmcKKzY6Q046Q0hOOkNISU5BOkh1bmFuOkNoYW5nZGUKKzc6Q046Q0hOOkNISU5BOkh1bmFuOkNoYW5nZGUgU2hpCis4OkNOOkNITjpDSElOQTpIdW5hbjpDaGFuZ25pbmcKKzk6Q046Q0hOOkNISU5BOkh1bmFuOkNoYW5nc2hhCisxMDpDTjpDSE46Q0hJTkE6SHVuYW46Q2hhbmdzaGEgU2hpcXUKKzExOkNOOkNITjpDSElOQTpIdW5hbjpDaGVuIFhpYW4KKzEyOkNOOkNITjpDSElOQTpIdW5hbjpDaGVuZ2J1CisxMzpDTjpDSE46Q0hJTkE6SHVuYW46Q2hlbnhpCisxNDpDTjpDSE46Q0hJTkE6SHVuYW46Q2hlbnpob3UgU2hpCisxNTpDTjpDSE46Q0hJTkE6SHVuYW46Q2lsaQorMTY6Q046Q0hOOkNISU5BOkh1bmFuOkRhbyBYaWFuCisxNzpDTjpDSE46Q0hJTkE6SHVuYW46RGF5b25nCisxODpDTjpDSE46Q0hJTkE6SHVuYW46RG9uZyBBbgorMTk6Q046Q0hOOkNISU5BOkh1bmFuOkRvbmdrb3UKKzIwOkNOOkNITjpDSElOQTpIdW5hbjpGZW5naHVhbmcKKzIxOkNOOkNITjpDSElOQTpIdW5hbjpHdWlkb25nCisyMjpDTjpDSE46Q0hJTkE6SHVuYW46R3VpeWFuZworMjM6Q046Q0hOOkNISU5BOkh1bmFuOkd1emhhbmcKKzI0OkNOOkNITjpDSElOQTpIdW5hbjpIYW5zaG91CisyNTpDTjpDSE46Q0hJTkE6SHVuYW46SGVuZ2RvbmcKKzI2OkNOOkNITjpDSElOQTpIdW5hbjpIZW5nbmFuCisyNzpDTjpDSE46Q0hJTkE6SHVuYW46SGVuZ3NoYW4KKzI4OkNOOkNITjpDSElOQTpIdW5hbjpIZW5neWFuZworMjk6Q046Q0hOOkNISU5BOkh1bmFuOkhlbmd5YW5nIFNoaQorMzA6Q046Q0hOOkNISU5BOkh1bmFuOkhvbmdqaWFuZyBTaGkKKzMxOkNOOkNITjpDSElOQTpIdW5hbjpIdWFpaHVhCiszMjpDTjpDSE46Q0hJTkE6SHVuYW46SHVhaWh1YSBTaGkKKzMzOkNOOkNITjpDSElOQTpIdW5hbjpIdWFyb25nCiszNDpDTjpDSE46Q0hJTkE6SHVuYW46SHVheXVhbgorMzU6Q046Q0hOOkNISU5BOkh1bmFuOkh1aXRvbmcKKzM2OkNOOkNITjpDSElOQTpIdW5hbjpKaWFoZQorMzc6Q046Q0hOOkNISU5BOkh1bmFuOkppYW5naHVhCiszODpDTjpDSE46Q0hJTkE6SHVuYW46Smlhbmd5b25nCiszOTpDTjpDSE46Q0hJTkE6SHVuYW46SmluZyBYaWFuCis0MDpDTjpDSE46Q0hJTkE6SHVuYW46Smluc2hpIFNoaQorNDE6Q046Q0hOOkNISU5BOkh1bmFuOkppc2hvdQorNDI6Q046Q0hOOkNISU5BOkh1bmFuOkxhaXlhbmcKKzQzOkNOOkNITjpDSElOQTpIdW5hbjpMYW5zaGFuCis0NDpDTjpDSE46Q0hJTkE6SHVuYW46TGVuZ3NodWlqYW5nIFNoaQorNDU6Q046Q0hOOkNISU5BOkh1bmFuOkxpIFhpYW4KKzQ2OkNOOkNITjpDSElOQTpIdW5hbjpMaWFueXVhbgorNDc6Q046Q0hOOkNISU5BOkh1bmFuOkxpbGluZworNDg6Q046Q0hOOkNISU5BOkh1bmFuOkxpbmcgWGlhbgorNDk6Q046Q0hOOkNISU5BOkh1bmFuOkxpbmdsaW5nCis1MDpDTjpDSE46Q0hJTkE6SHVuYW46TGlubGkKKzUxOkNOOkNITjpDSElOQTpIdW5hbjpMaW53dQorNTI6Q046Q0hOOkNISU5BOkh1bmFuOkxpbnhpYW5nCis1MzpDTjpDSE46Q0hJTkE6SHVuYW46TGl1eWFuZworNTQ6Q046Q0hOOkNISU5BOkh1bmFuOkxvbmdodWkKKzU1OkNOOkNITjpDSElOQTpIdW5hbjpMb25nc2hhbgorNTY6Q046Q0hOOkNISU5BOkh1bmFuOkxvdWRpIFNoaQorNTc6Q046Q0hOOkNISU5BOkh1bmFuOkx1eGkKKzU4OkNOOkNITjpDSElOQTpIdW5hbjpNYXlhbmcKKzU5OkNOOkNITjpDSElOQTpIdW5hbjpNaWx1bworNjA6Q046Q0hOOkNISU5BOkh1bmFuOk5hbiBYaWFuCis2MTpDTjpDSE46Q0hJTkE6SHVuYW46TmluZ3hpYW5nCis2MjpDTjpDSE46Q0hJTkE6SHVuYW46TmluZ3l1YW4KKzYzOkNOOkNITjpDSElOQTpIdW5hbjpQaW5namlhbmcKKzY0OkNOOkNITjpDSElOQTpIdW5hbjpRaWFueWFuZworNjU6Q046Q0hOOkNISU5BOkh1bmFuOlFpZG9uZworNjY6Q046Q0hOOkNISU5BOkh1bmFuOlFpeWFuZworNjc6Q046Q0hOOkNISU5BOkh1bmFuOlJ1Y2hlbmcKKzY4OkNOOkNITjpDSElOQTpIdW5hbjpTYW5nemhpCis2OTpDTjpDSE46Q0hJTkE6SHVuYW46U2hhb2RvbmcKKzcwOkNOOkNITjpDSElOQTpIdW5hbjpTaGFveWFuZworNzE6Q046Q0hOOkNISU5BOkh1bmFuOlNoYW95YW5nIFNoaQorNzI6Q046Q0hOOkNISU5BOkh1bmFuOlNoaW1lbgorNzM6Q046Q0hOOkNISU5BOkh1bmFuOlNodWFuZ2ZlbmcKKzc0OkNOOkNITjpDSElOQTpIdW5hbjpTaHVhbmdwYWkKKzc1OkNOOkNITjpDSElOQTpIdW5hbjpTdWluaW5nCis3NjpDTjpDSE46Q0hJTkE6SHVuYW46VGFvamlhbmcKKzc3OkNOOkNITjpDSElOQTpIdW5hbjpUYW95dWFuCis3ODpDTjpDSE46Q0hJTkE6SHVuYW46VG9uZ2RhbworNzk6Q046Q0hOOkNISU5BOkh1bmFuOldhbmdjaGVuZworODA6Q046Q0hOOkNISU5BOkh1bmFuOld1Z2FuZworODE6Q046Q0hOOkNISU5BOkh1bmFuOlhpYW5ndGFuCis4MjpDTjpDSE46Q0hJTkE6SHVuYW46WGlhbmd0YW4gU2hpCis4MzpDTjpDSE46Q0hJTkE6SHVuYW46WGlhbmd4aWFuZworODQ6Q046Q0hOOkNISU5BOkh1bmFuOlhpYW5neWluCis4NTpDTjpDSE46Q0hJTkE6SHVuYW46WGluaHVhCis4NjpDTjpDSE46Q0hJTkE6SHVuYW46WGluaHVhbmcKKzg3OkNOOkNITjpDSElOQTpIdW5hbjpYaW5uaW5nCis4ODpDTjpDSE46Q0hJTkE6SHVuYW46WGluc2hhbworODk6Q046Q0hOOkNISU5BOkh1bmFuOlhpbnRpYW4KKzkwOkNOOkNITjpDSElOQTpIdW5hbjpYdXB1Cis5MTpDTjpDSE46Q0hJTkE6SHVuYW46WWl5YW5nCis5MjpDTjpDSE46Q0hJTkE6SHVuYW46WWl5YW5nIFNoaQorOTM6Q046Q0hOOkNISU5BOkh1bmFuOllpemhhbmcKKzk0OkNOOkNITjpDSElOQTpIdW5hbjpZb25nc2h1bgorOTU6Q046Q0hOOkNISU5BOkh1bmFuOllvbmd4aW5nCis5NjpDTjpDSE46Q0hJTkE6SHVuYW46WW9uZ3pob3UgU2hpCis5NzpDTjpDSE46Q0hJTkE6SHVuYW46WW91IFhpYW4KKzk4OkNOOkNITjpDSElOQTpIdW5hbjpZdWFuamlhbmcKKzk5OkNOOkNITjpDSElOQTpIdW5hbjpZdWFubGluZworMTAwOkNOOkNITjpDSElOQTpIdW5hbjpZdWV5YW5nIFNoaQorMTAxOkNOOkNITjpDSElOQTpIdW5hbjpaaGlqaWFuZworMTAyOkNOOkNITjpDSElOQTpIdW5hbjpaaHV6aG91CisxMDM6Q046Q0hOOkNISU5BOkh1bmFuOlpodXpob3UgU2hpcXUKKzEwNDpDTjpDSE46Q0hJTkE6SHVuYW46Wml4aW5nCisxOkNOOkNITjpDSElOQTpHdWFuZ2Rvbmc6QmFvIEFuCisyOkNOOkNITjpDSElOQTpHdWFuZ2Rvbmc6Qm9sb3UKKzM6Q046Q0hOOkNISU5BOkd1YW5nZG9uZzpDaGFvYW4KKzQ6Q046Q0hOOkNISU5BOkd1YW5nZG9uZzpDaGFveWFuZworNTpDTjpDSE46Q0hJTkE6R3Vhbmdkb25nOkNoYW96aG91IFNoaQorNjpDTjpDSE46Q0hJTkE6R3Vhbmdkb25nOkNoZW5oYWkKKzc6Q046Q0hOOkNISU5BOkd1YW5nZG9uZzpDb25naHVhCis4OkNOOkNITjpDSElOQTpHdWFuZ2Rvbmc6RGFidQorOTpDTjpDSE46Q0hJTkE6R3Vhbmdkb25nOkRlcWluZworMTA6Q046Q0hOOkNISU5BOkd1YW5nZG9uZzpEaWFuYmFpCisxMTpDTjpDSE46Q0hJTkE6R3Vhbmdkb25nOkRvbmdndWFuCisxMjpDTjpDSE46Q0hJTkE6R3Vhbmdkb25nOkRvdW1hbgorMTM6Q046Q0hOOkNISU5BOkd1YW5nZG9uZzpFbnBpbmcKKzE0OkNOOkNITjpDSElOQTpHdWFuZ2Rvbmc6RmVuZ2thaQorMTU6Q046Q0hOOkNISU5BOkd1YW5nZG9uZzpGZW5nc2h1bgorMTY6Q046Q0hOOkNISU5BOkd1YW5nZG9uZzpGb2dhbmcKKzE3OkNOOkNITjpDSElOQTpHdWFuZ2Rvbmc6Rm9zaGFuIFNoaQorMTg6Q046Q0hOOkNISU5BOkd1YW5nZG9uZzpHYW9taW5nCisxOTpDTjpDSE46Q0hJTkE6R3Vhbmdkb25nOkdhb3lhbworMjA6Q046Q0hOOkNISU5BOkd1YW5nZG9uZzpHYW96aG91CisyMTpDTjpDSE46Q0hJTkE6R3Vhbmdkb25nOkd1YW5nbmluZworMjI6Q046Q0hOOkNISU5BOkd1YW5nZG9uZzpHdWFuZ3pob3UgU2hpcXUKKzIzOkNOOkNITjpDSElOQTpHdWFuZ2Rvbmc6SGFpZmVuZworMjQ6Q046Q0hOOkNISU5BOkd1YW5nZG9uZzpIYWlrYW5nCisyNTpDTjpDSE46Q0hJTkE6R3Vhbmdkb25nOkhlcGluZworMjY6Q046Q0hOOkNISU5BOkd1YW5nZG9uZzpIZXNoYW4KKzI3OkNOOkNITjpDSElOQTpHdWFuZ2Rvbmc6SGV5dWFuCisyODpDTjpDSE46Q0hJTkE6R3Vhbmdkb25nOkh1YWlqaQorMjk6Q046Q0hOOkNISU5BOkd1YW5nZG9uZzpIdWF4aWFuCiszMDpDTjpDSE46Q0hJTkE6R3Vhbmdkb25nOkh1YXpob3UKKzMxOkNOOkNITjpDSElOQTpHdWFuZ2Rvbmc6SHVpZG9uZworMzI6Q046Q0hOOkNISU5BOkd1YW5nZG9uZzpIdWlsYWkKKzMzOkNOOkNITjpDSElOQTpHdWFuZ2Rvbmc6SHVpeWFuZworMzQ6Q046Q0hOOkNISU5BOkd1YW5nZG9uZzpIdWl6aG91IFNoaQorMzU6Q046Q0hOOkNISU5BOkd1YW5nZG9uZzpKaWFuZ21lbiBTaGkKKzM2OkNOOkNITjpDSElOQTpHdWFuZ2Rvbmc6Smlhb2xpbmcKKzM3OkNOOkNITjpDSElOQTpHdWFuZ2Rvbmc6SmlleGkKKzM4OkNOOkNITjpDSElOQTpHdWFuZ2Rvbmc6SmlleWFuZworMzk6Q046Q0hOOkNISU5BOkd1YW5nZG9uZzpLYWlwaW5nCis0MDpDTjpDSE46Q0hJTkE6R3Vhbmdkb25nOkxlY2hhbmcKKzQxOkNOOkNITjpDSElOQTpHdWFuZ2Rvbmc6TGlhbmppYW5nCis0MjpDTjpDSE46Q0hJTkE6R3Vhbmdkb25nOkxpYW5uYW4KKzQzOkNOOkNITjpDSElOQTpHdWFuZ2Rvbmc6TGlhbnBpbmcKKzQ0OkNOOkNITjpDSElOQTpHdWFuZ2Rvbmc6TGlhbnNoYW4KKzQ1OkNOOkNITjpDSElOQTpHdWFuZ2Rvbmc6TGlhbnhpYW4KKzQ2OkNOOkNITjpDSElOQTpHdWFuZ2Rvbmc6TG9uZ2NodWFuCis0NzpDTjpDSE46Q0hJTkE6R3Vhbmdkb25nOkxvbmdtZW4KKzQ4OkNOOkNITjpDSElOQTpHdWFuZ2Rvbmc6THVmZW5nCis0OTpDTjpDSE46Q0hJTkE6R3Vhbmdkb25nOkx1b2RpbmcKKzUwOkNOOkNITjpDSElOQTpHdWFuZ2Rvbmc6TWFvbWluZworNTE6Q046Q0hOOkNISU5BOkd1YW5nZG9uZzpNZWkgWGlhbgorNTI6Q046Q0hOOkNISU5BOkd1YW5nZG9uZzpNZWl6aG91IFNoaQorNTM6Q046Q0hOOkNISU5BOkd1YW5nZG9uZzpOYW5hbworNTQ6Q046Q0hOOkNISU5BOkd1YW5nZG9uZzpOYW5oYWkKKzU1OkNOOkNITjpDSElOQTpHdWFuZ2Rvbmc6TmFueGlvbmcKKzU2OkNOOkNITjpDSElOQTpHdWFuZ2Rvbmc6UGFueXUKKzU3OkNOOkNITjpDSElOQTpHdWFuZ2Rvbmc6UGluZ3l1YW4KKzU4OkNOOkNITjpDSElOQTpHdWFuZ2Rvbmc6UHVuaW5nCis1OTpDTjpDSE46Q0hJTkE6R3Vhbmdkb25nOlFpbmd5dWFuCis2MDpDTjpDSE46Q0hJTkE6R3Vhbmdkb25nOlF1amlhbmcKKzYxOkNOOkNITjpDSElOQTpHdWFuZ2Rvbmc6UmFvcGluZworNjI6Q046Q0hOOkNISU5BOkd1YW5nZG9uZzpSZW5odWEKKzYzOkNOOkNITjpDSElOQTpHdWFuZ2Rvbmc6UnV5dWFuCis2NDpDTjpDSE46Q0hJTkE6R3Vhbmdkb25nOlNhbnNodWkKKzY1OkNOOkNITjpDSElOQTpHdWFuZ2Rvbmc6U2hhbnRvdSBTaGkKKzY2OkNOOkNITjpDSElOQTpHdWFuZ2Rvbmc6U2hhb2d1YW4gU2hpcXUKKzY3OkNOOkNITjpDSElOQTpHdWFuZ2Rvbmc6U2hlbnpoZW4gU2hpcXUKKzY4OkNOOkNITjpDSElOQTpHdWFuZ2Rvbmc6U2hpeGluZworNjk6Q046Q0hOOkNISU5BOkd1YW5nZG9uZzpTaHVuZGUKKzcwOkNOOkNITjpDSElOQTpHdWFuZ2Rvbmc6U2lodWkKKzcxOkNOOkNITjpDSElOQTpHdWFuZ2Rvbmc6U3VpeGkKKzcyOkNOOkNITjpDSElOQTpHdWFuZ2Rvbmc6VGFpc2hhbgorNzM6Q046Q0hOOkNISU5BOkd1YW5nZG9uZzpXZW5neXVhbgorNzQ6Q046Q0hOOkNISU5BOkd1YW5nZG9uZzpXdWNodWFuCis3NTpDTjpDSE46Q0hJTkE6R3Vhbmdkb25nOld1aHVhCis3NjpDTjpDSE46Q0hJTkE6R3Vhbmdkb25nOlhpbmZlbmcKKzc3OkNOOkNITjpDSElOQTpHdWFuZ2Rvbmc6WGluZ25pbmcKKzc4OkNOOkNITjpDSElOQTpHdWFuZ2Rvbmc6WGluaHVpCis3OTpDTjpDSE46Q0hJTkE6R3Vhbmdkb25nOlhpbnhpbmcKKzgwOkNOOkNITjpDSElOQTpHdWFuZ2Rvbmc6WGlueWkKKzgxOkNOOkNITjpDSElOQTpHdWFuZ2Rvbmc6WHV3ZW4KKzgyOkNOOkNITjpDSElOQTpHdWFuZ2Rvbmc6WWFuZ2NodW4KKzgzOkNOOkNITjpDSElOQTpHdWFuZ2Rvbmc6WWFuZ2ppYW5nCis4NDpDTjpDSE46Q0hJTkE6R3Vhbmdkb25nOllhbmdzaGFuCis4NTpDTjpDSE46Q0hJTkE6R3Vhbmdkb25nOllpbmdkZQorODY6Q046Q0hOOkNISU5BOkd1YW5nZG9uZzpZdW5hbgorODc6Q046Q0hOOkNISU5BOkd1YW5nZG9uZzpZdW5mdQorODg6Q046Q0hOOkNISU5BOkd1YW5nZG9uZzpaZW5nY2hlbmcKKzg5OkNOOkNITjpDSElOQTpHdWFuZ2Rvbmc6WmhhbmppYW5nIFNoaQorOTA6Q046Q0hOOkNISU5BOkd1YW5nZG9uZzpaaGFvcWluZyBTaGkKKzkxOkNOOkNITjpDSElOQTpHdWFuZ2Rvbmc6WmhvbmdzaGFuCis5MjpDTjpDSE46Q0hJTkE6R3Vhbmdkb25nOlpodWhhaSBTaGkKKzkzOkNOOkNITjpDSElOQTpHdWFuZ2Rvbmc6WmlqaW4KKzE6Q046Q0hOOkNISU5BOlNoYW5kb25nOkFucWl1CisyOkNOOkNITjpDSElOQTpTaGFuZG9uZzpCaW54aWFuCiszOkNOOkNITjpDSElOQTpTaGFuZG9uZzpCb3hpbmcKKzQ6Q046Q0hOOkNISU5BOlNoYW5kb25nOkNhbmdzaGFuCis1OkNOOkNITjpDSElOQTpTaGFuZG9uZzpDYW94aWFuCis2OkNOOkNITjpDSElOQTpTaGFuZG9uZzpDaGFuZ2xlCis3OkNOOkNITjpDSElOQTpTaGFuZG9uZzpDaGFuZ3FpbmcKKzg6Q046Q0hOOkNISU5BOlNoYW5kb25nOkNoYW5neWkKKzk6Q046Q0hOOkNISU5BOlNoYW5kb25nOkNoZW5nd3UKKzEwOkNOOkNITjpDSElOQTpTaGFuZG9uZzpDaGlwaW5nCisxMTpDTjpDSE46Q0hJTkE6U2hhbmRvbmc6RGV6aG91IFNoaQorMTI6Q046Q0hOOkNISU5BOlNoYW5kb25nOkRpbmd0YW8KKzEzOkNOOkNITjpDSElOQTpTaGFuZG9uZzpEb25nIEUKKzE0OkNOOkNITjpDSElOQTpTaGFuZG9uZzpEb25nbWluZworMTU6Q046Q0hOOkNISU5BOlNoYW5kb25nOkRvbmdwaW5nCisxNjpDTjpDSE46Q0hJTkE6U2hhbmRvbmc6RmVpY2hlbmcKKzE3OkNOOkNITjpDSElOQTpTaGFuZG9uZzpGZWl4aWFuCisxODpDTjpDSE46Q0hJTkE6U2hhbmRvbmc6RnVzaGFuCisxOTpDTjpDSE46Q0hJTkE6U2hhbmRvbmc6R2FvbWkKKzIwOkNOOkNITjpDSElOQTpTaGFuZG9uZzpHYW9xaW5nCisyMTpDTjpDSE46Q0hJTkE6U2hhbmRvbmc6R2FvdGFuZworMjI6Q046Q0hOOkNISU5BOlNoYW5kb25nOkd1YW5ncmFvCisyMzpDTjpDSE46Q0hJTkE6U2hhbmRvbmc6R3VhbnhpYW4KKzI0OkNOOkNITjpDSElOQTpTaGFuZG9uZzpIYWl5YW5nCisyNTpDTjpDSE46Q0hJTkE6U2hhbmRvbmc6SGV6ZQorMjY6Q046Q0hOOkNISU5BOlNoYW5kb25nOkh1YW5nIFhpYW4KKzI3OkNOOkNITjpDSElOQTpTaGFuZG9uZzpIdWFudGFpCisyODpDTjpDSE46Q0hJTkE6U2hhbmRvbmc6SHVpbWluCisyOTpDTjpDSE46Q0hJTkE6U2hhbmRvbmc6Smlhb25hbgorMzA6Q046Q0hOOkNISU5BOlNoYW5kb25nOkppYW94aWFuCiszMTpDTjpDSE46Q0hJTkE6U2hhbmRvbmc6SmlheGlhbmcKKzMyOkNOOkNITjpDSElOQTpTaGFuZG9uZzpKaW1vCiszMzpDTjpDSE46Q0hJTkE6U2hhbmRvbmc6SmluYW4gU2hpcXUKKzM0OkNOOkNITjpDSElOQTpTaGFuZG9uZzpKaW5pbmcKKzM1OkNOOkNITjpDSElOQTpTaGFuZG9uZzpKaW5pbmcgU2hpCiszNjpDTjpDSE46Q0hJTkE6U2hhbmRvbmc6SmlueGlhbmcKKzM3OkNOOkNITjpDSElOQTpTaGFuZG9uZzpKaXlhbmcKKzM4OkNOOkNITjpDSElOQTpTaGFuZG9uZzpKdWFuY2hlbmcKKzM5OkNOOkNITjpDSElOQTpTaGFuZG9uZzpKdW5hbgorNDA6Q046Q0hOOkNISU5BOlNoYW5kb25nOkp1eGlhbgorNDE6Q046Q0hOOkNISU5BOlNoYW5kb25nOkp1eWUKKzQyOkNOOkNITjpDSElOQTpTaGFuZG9uZzpLZW5saQorNDM6Q046Q0hOOkNISU5BOlNoYW5kb25nOkxhaXd1Cis0NDpDTjpDSE46Q0hJTkE6U2hhbmRvbmc6TGFpeGkKKzQ1OkNOOkNITjpDSElOQTpTaGFuZG9uZzpMYWl5YW5nCis0NjpDTjpDSE46Q0hJTkE6U2hhbmRvbmc6TGFvc2hhbgorNDc6Q046Q0hOOkNISU5BOlNoYW5kb25nOkxlbGluZworNDg6Q046Q0hOOkNISU5BOlNoYW5kb25nOkxpYW5nc2hhbgorNDk6Q046Q0hOOkNISU5BOlNoYW5kb25nOkxpYW9jaGVuZworNTA6Q046Q0hOOkNISU5BOlNoYW5kb25nOkxpY2hlbmcKKzUxOkNOOkNITjpDSElOQTpTaGFuZG9uZzpMaWppbgorNTI6Q046Q0hOOkNISU5BOlNoYW5kb25nOkxpbmcgWGlhbgorNTM6Q046Q0hOOkNISU5BOlNoYW5kb25nOkxpbnFpbmcKKzU0OkNOOkNITjpDSElOQTpTaGFuZG9uZzpMaW5xdQorNTU6Q046Q0hOOkNISU5BOlNoYW5kb25nOkxpbnNodQorNTY6Q046Q0hOOkNISU5BOlNoYW5kb25nOkxpbnlpCis1NzpDTjpDSE46Q0hJTkE6U2hhbmRvbmc6TWVuZ3lpbgorNTg6Q046Q0hOOkNISU5BOlNoYW5kb25nOk1vdXBpbmcKKzU5OkNOOkNITjpDSElOQTpTaGFuZG9uZzpOaW5namluCis2MDpDTjpDSE46Q0hJTkE6U2hhbmRvbmc6TmluZ3lhbmcKKzYxOkNOOkNITjpDSElOQTpTaGFuZG9uZzpQZW5nbGFpCis2MjpDTjpDSE46Q0hJTkE6U2hhbmRvbmc6UGluZ2R1Cis2MzpDTjpDSE46Q0hJTkE6U2hhbmRvbmc6UGluZ3lpCis2NDpDTjpDSE46Q0hJTkE6U2hhbmRvbmc6UGluZ3lpbgorNjU6Q046Q0hOOkNISU5BOlNoYW5kb25nOlBpbmd5dWFuCis2NjpDTjpDSE46Q0hJTkE6U2hhbmRvbmc6UWloZQorNjc6Q046Q0hOOkNISU5BOlNoYW5kb25nOlFpbmdkYW8gU2hpcXUKKzY4OkNOOkNITjpDSElOQTpTaGFuZG9uZzpRaW5neXVuCis2OTpDTjpDSE46Q0hJTkE6U2hhbmRvbmc6UWl4aWEKKzcwOkNOOkNITjpDSElOQTpTaGFuZG9uZzpRdWZ1Cis3MTpDTjpDSE46Q0hJTkE6U2hhbmRvbmc6Uml6aGFvCis3MjpDTjpDSE46Q0hJTkE6U2hhbmRvbmc6Um9uZ2NoZW5nCis3MzpDTjpDSE46Q0hJTkE6U2hhbmRvbmc6UnVzaGFuCis3NDpDTjpDSE46Q0hJTkE6U2hhbmRvbmc6U2hhbmdoZQorNzU6Q046Q0hOOkNISU5BOlNoYW5kb25nOlNoYW54aWFuCis3NjpDTjpDSE46Q0hJTkE6U2hhbmRvbmc6U2hlbnhpYW4KKzc3OkNOOkNITjpDSElOQTpTaGFuZG9uZzpTaG91Z3VhbmcKKzc4OkNOOkNITjpDSElOQTpTaGFuZG9uZzpTaXNodWkKKzc5OkNOOkNITjpDSElOQTpTaGFuZG9uZzpUYWkgQW4gU2hpCis4MDpDTjpDSE46Q0hJTkE6U2hhbmRvbmc6VGFuY2hlbmcKKzgxOkNOOkNITjpDSElOQTpTaGFuZG9uZzpUZW5nIFhpYW4KKzgyOkNOOkNITjpDSElOQTpTaGFuZG9uZzpXZWlmYW5nIFNoaQorODM6Q046Q0hOOkNISU5BOlNoYW5kb25nOldlaWhhaSBTaGkKKzg0OkNOOkNITjpDSElOQTpTaGFuZG9uZzpXZWlzaGFuCis4NTpDTjpDSE46Q0hJTkE6U2hhbmRvbmc6V2VpeGlhbgorODY6Q046Q0hOOkNISU5BOlNoYW5kb25nOldlbmRlbmcKKzg3OkNOOkNITjpDSElOQTpTaGFuZG9uZzpXZW5zaGFuZworODg6Q046Q0hOOkNISU5BOlNoYW5kb25nOld1Y2hlbmcKKzg5OkNOOkNITjpDSElOQTpTaGFuZG9uZzpXdWRpCis5MDpDTjpDSE46Q0hJTkE6U2hhbmRvbmc6V3VsaWFuCis5MTpDTjpDSE46Q0hJTkE6U2hhbmRvbmc6WGlhamluCis5MjpDTjpDSE46Q0hJTkE6U2hhbmRvbmc6WGludGFpCis5MzpDTjpDSE46Q0hJTkE6U2hhbmRvbmc6WGlud2VuCis5NDpDTjpDSE46Q0hJTkE6U2hhbmRvbmc6WWFuZ2d1Cis5NTpDTjpDSE46Q0hJTkE6U2hhbmRvbmc6WWFuZ3hpbgorOTY6Q046Q0hOOkNISU5BOlNoYW5kb25nOllhbnRhaSBTaGkKKzk3OkNOOkNITjpDSElOQTpTaGFuZG9uZzpZYW56aG91Cis5ODpDTjpDSE46Q0hJTkE6U2hhbmRvbmc6WWV4aWFuCis5OTpDTjpDSE46Q0hJTkE6U2hhbmRvbmc6WWlkdQorMTAwOkNOOkNITjpDSElOQTpTaGFuZG9uZzpZaW5hbgorMTAxOkNOOkNITjpDSElOQTpTaGFuZG9uZzpZaXNodWkKKzEwMjpDTjpDSE46Q0hJTkE6U2hhbmRvbmc6WWl5dWFuCisxMDM6Q046Q0hOOkNISU5BOlNoYW5kb25nOll1Y2hlbmcKKzEwNDpDTjpDSE46Q0hJTkE6U2hhbmRvbmc6WXVuY2hlbmcKKzEwNTpDTjpDSE46Q0hJTkE6U2hhbmRvbmc6WXV0YWkKKzEwNjpDTjpDSE46Q0hJTkE6U2hhbmRvbmc6WmhhbmdxaXUKKzEwNzpDTjpDSE46Q0hJTkE6U2hhbmRvbmc6Wmhhbmh1YQorMTA4OkNOOkNITjpDSElOQTpTaGFuZG9uZzpaaGFveXVhbgorMTA5OkNOOkNITjpDSElOQTpTaGFuZG9uZzpaaGFvemh1YW5nIFNoaXF1CisxMTA6Q046Q0hOOkNISU5BOlNoYW5kb25nOlpodWNoZW5nCisxMTE6Q046Q0hOOkNISU5BOlNoYW5kb25nOlppYm8gU2hpCisxMTI6Q046Q0hOOkNISU5BOlNoYW5kb25nOlpvdXBpbmcKKzExMzpDTjpDSE46Q0hJTkE6U2hhbmRvbmc6Wm91eGlhbgorMTpDTjpDSE46Q0hJTkE6VGlhbmppbjpCYW9kaQorMjpDTjpDSE46Q0hJTkE6VGlhbmppbjpIYW5ndQorMzpDTjpDSE46Q0hJTkE6VGlhbmppbjpKaSBYaWFuCis0OkNOOkNITjpDSElOQTpUaWFuamluOkppbmdoYWkKKzU6Q046Q0hOOkNISU5BOlRpYW5qaW46TmluZ2hlCis2OkNOOkNITjpDSElOQTpUaWFuamluOlRhbmdndQorNzpDTjpDSE46Q0hJTkE6VGlhbmppbjpUaWFuamluIFNoaXF1Cis4OkNOOkNITjpDSElOQTpUaWFuamluOld1cWluZworMTpDTjpDSE46Q0hJTkE6TGlhb25pbmc6QW5zaGFuIFNoaXF1CisyOkNOOkNITjpDSElOQTpMaWFvbmluZzpCZWlwaWFvCiszOkNOOkNITjpDSElOQTpMaWFvbmluZzpCZWl6aGVuCis0OkNOOkNITjpDSElOQTpMaWFvbmluZzpCZW54aQorNTpDTjpDSE46Q0hJTkE6TGlhb25pbmc6QmVueGkgU2hpcXUKKzY6Q046Q0hOOkNISU5BOkxpYW9uaW5nOkNoYW5ndHUKKzc6Q046Q0hOOkNISU5BOkxpYW9uaW5nOkNoYW95YW5nCis4OkNOOkNITjpDSElOQTpMaWFvbmluZzpDaGFveWFuZyBTaGkKKzk6Q046Q0hOOkNISU5BOkxpYW9uaW5nOkRhbGlhbiBTaGlxdQorMTA6Q046Q0hOOkNISU5BOkxpYW9uaW5nOkRhbmRvbmcgU2hpcXUKKzExOkNOOkNITjpDSElOQTpMaWFvbmluZzpEYXdhCisxMjpDTjpDSE46Q0hJTkE6TGlhb25pbmc6RGVuZ3RhCisxMzpDTjpDSE46Q0hJTkE6TGlhb25pbmc6RG9uZ2dvdQorMTQ6Q046Q0hOOkNISU5BOkxpYW9uaW5nOkZha3UKKzE1OkNOOkNITjpDSElOQTpMaWFvbmluZzpGZW5nY2hlbmcKKzE2OkNOOkNITjpDSElOQTpMaWFvbmluZzpGdSBYaWFuCisxNzpDTjpDSE46Q0hJTkE6TGlhb25pbmc6RnVzaHVuCisxODpDTjpDSE46Q0hJTkE6TGlhb25pbmc6RnVzaHVuIFNoaXF1CisxOTpDTjpDSE46Q0hJTkE6TGlhb25pbmc6RnV4aW4gTW9uZ29saWFuIEFjCisyMDpDTjpDSE46Q0hJTkE6TGlhb25pbmc6RnV4aW4gU2hpcXUKKzIxOkNOOkNITjpDSElOQTpMaWFvbmluZzpHYWkgWGlhbgorMjI6Q046Q0hOOkNISU5BOkxpYW9uaW5nOkhhaWNoZW5nCisyMzpDTjpDSE46Q0hJTkE6TGlhb25pbmc6SGFycWluCisyNDpDTjpDSE46Q0hJTkE6TGlhb25pbmc6SGVpc2hhbgorMjU6Q046Q0hOOkNISU5BOkxpYW9uaW5nOkh1YW5yZW4KKzI2OkNOOkNITjpDSElOQTpMaWFvbmluZzpKaWFuY2hhbmcKKzI3OkNOOkNITjpDSElOQTpMaWFvbmluZzpKaWFucGluZworMjg6Q046Q0hOOkNISU5BOkxpYW9uaW5nOkppbiBYaWFuCisyOTpDTjpDSE46Q0hJTkE6TGlhb25pbmc6SmlueGkKKzMwOkNOOkNITjpDSElOQTpMaWFvbmluZzpKaW56aG91IFNoaXF1CiszMTpDTjpDSE46Q0hJTkE6TGlhb25pbmc6S2FpeXVhbgorMzI6Q046Q0hOOkNISU5BOkxpYW9uaW5nOkthbmdwaW5nCiszMzpDTjpDSE46Q0hJTkE6TGlhb25pbmc6S3VhbmRpYW4KKzM0OkNOOkNITjpDSElOQTpMaWFvbmluZzpMaWFveWFuZworMzU6Q046Q0hOOkNISU5BOkxpYW9uaW5nOkxpYW95YW5nIFNoaXF1CiszNjpDTjpDSE46Q0hJTkE6TGlhb25pbmc6TGlhb3pob25nCiszNzpDTjpDSE46Q0hJTkE6TGlhb25pbmc6TGluZ3l1YW4KKzM4OkNOOkNITjpDSElOQTpMaWFvbmluZzpQYW5zaGFuCiszOTpDTjpDSE46Q0hJTkE6TGlhb25pbmc6UWluZ3l1YW4KKzQwOkNOOkNITjpDSElOQTpMaWFvbmluZzpTaGVueWFuZyBTaGlxdQorNDE6Q046Q0hOOkNISU5BOkxpYW9uaW5nOlN1aXpob25nCis0MjpDTjpDSE46Q0hJTkE6TGlhb25pbmc6VGFpYW4KKzQzOkNOOkNITjpDSElOQTpMaWFvbmluZzpUaWVmYSBTaGkKKzQ0OkNOOkNITjpDSElOQTpMaWFvbmluZzpUaWVsaW5nCis0NTpDTjpDSE46Q0hJTkE6TGlhb25pbmc6VGllbGluZyBTaGkKKzQ2OkNOOkNITjpDSElOQTpMaWFvbmluZzpYaWZlbmcKKzQ3OkNOOkNITjpDSElOQTpMaWFvbmluZzpYaW5iaW4KKzQ4OkNOOkNITjpDSElOQTpMaWFvbmluZzpYaW5nY2hlbmcKKzQ5OkNOOkNITjpDSElOQTpMaWFvbmluZzpYaW5qaW4KKzUwOkNOOkNITjpDSElOQTpMaWFvbmluZzpYaW5taW4KKzUxOkNOOkNITjpDSElOQTpMaWFvbmluZzpYaXV5YW4KKzUyOkNOOkNITjpDSElOQTpMaWFvbmluZzpZaSBYaWFuCis1MzpDTjpDSE46Q0hJTkE6TGlhb25pbmc6WWluZ2tvdQorNTQ6Q046Q0hOOkNISU5BOkxpYW9uaW5nOllpbmdrb3UgU2hpcXUKKzU1OkNOOkNITjpDSElOQTpMaWFvbmluZzpaaGFuZ3d1Cis1NjpDTjpDSE46Q0hJTkE6TGlhb25pbmc6Wmh1YW5naGUKKzE6Q046Q0hOOkNISU5BOkh1YmVpOkFubHUKKzI6Q046Q0hOOkNISU5BOkh1YmVpOkJhZG9uZworMzpDTjpDSE46Q0hJTkE6SHViZWk6QmFva2FuZworNDpDTjpDSE46Q0hJTkE6SHViZWk6Q2hhbmd5YW5nCis1OkNOOkNITjpDSElOQTpIdWJlaTpDaG9uZ3lhbmcKKzY6Q046Q0hOOkNISU5BOkh1YmVpOkRhbmd5YW5nCis3OkNOOkNITjpDSElOQTpIdWJlaTpEYXd1Cis4OkNOOkNITjpDSElOQTpIdWJlaTpEYXllCis5OkNOOkNITjpDSElOQTpIdWJlaTpFY2hlbmcKKzEwOkNOOkNITjpDSElOQTpIdWJlaTpFY2hlbmcgU2hpCisxMTpDTjpDSE46Q0hJTkE6SHViZWk6RW5zaGkKKzEyOkNOOkNITjpDSElOQTpIdWJlaTpFbnNoaSBTaGkKKzEzOkNOOkNITjpDSElOQTpIdWJlaTpGYW5neGlhbgorMTQ6Q046Q0hOOkNISU5BOkh1YmVpOkdvbmcgQW4KKzE1OkNOOkNITjpDSElOQTpIdWJlaTpHdWFuZ2h1YQorMTY6Q046Q0hOOkNISU5BOkh1YmVpOkd1YW5namkKKzE3OkNOOkNITjpDSElOQTpIdWJlaTpHdWNoZW5nCisxODpDTjpDSE46Q0hJTkE6SHViZWk6SGFuY2h1YW4KKzE5OkNOOkNITjpDSElOQTpIdWJlaTpIYW55YW5nCisyMDpDTjpDSE46Q0hJTkE6SHViZWk6SGVmZW5nCisyMTpDTjpDSE46Q0hJTkE6SHViZWk6SG9uZyBBbgorMjI6Q046Q0hOOkNISU5BOkh1YmVpOkhvbmdodQorMjM6Q046Q0hOOkNISU5BOkh1YmVpOkh1YW5nZ2FuZworMjQ6Q046Q0hOOkNISU5BOkh1YmVpOkh1YW5nbWVpCisyNTpDTjpDSE46Q0hJTkE6SHViZWk6SHVhbmdwaQorMjY6Q046Q0hOOkNISU5BOkh1YmVpOkh1YW5nc2hpIFNoaXF1CisyNzpDTjpDSE46Q0hJTkE6SHViZWk6SmlhbmdsaW5nCisyODpDTjpDSE46Q0hJTkE6SHViZWk6SmlhbmxpCisyOTpDTjpDSE46Q0hJTkE6SHViZWk6SmlhbnNoaQorMzA6Q046Q0hOOkNISU5BOkh1YmVpOkppYXl1CiszMTpDTjpDSE46Q0hJTkE6SHViZWk6SmluZ21lbgorMzI6Q046Q0hOOkNISU5BOkh1YmVpOkppbmdtZW4gU2hpCiszMzpDTjpDSE46Q0hJTkE6SHViZWk6SmluZ3NoYW4KKzM0OkNOOkNITjpDSElOQTpIdWJlaTpKdW54aWFuCiszNTpDTjpDSE46Q0hJTkE6SHViZWk6TGFpZmVuZworMzY6Q046Q0hOOkNISU5BOkh1YmVpOkxhb2hla291CiszNzpDTjpDSE46Q0hJTkE6SHViZWk6TGljaHVhbgorMzg6Q046Q0hOOkNISU5BOkh1YmVpOkx1b3RpYW4KKzM5OkNOOkNITjpDSElOQTpIdWJlaTpNYWNoZW5nCis0MDpDTjpDSE46Q0hJTkE6SHViZWk6TWlhbnlhbmcKKzQxOkNOOkNITjpDSElOQTpIdWJlaTpOYW56aGFuZworNDI6Q046Q0hOOkNISU5BOkh1YmVpOlB1cWkKKzQzOkNOOkNITjpDSElOQTpIdWJlaTpRaWFuamlhbmcKKzQ0OkNOOkNITjpDSElOQTpIdWJlaTpRaWNodW4KKzQ1OkNOOkNITjpDSElOQTpIdWJlaTpTaGFzaGkgU2hpCis0NjpDTjpDSE46Q0hJTkE6SHViZWk6U2hlbm5vbmdqaWEKKzQ3OkNOOkNITjpDSElOQTpIdWJlaTpTaGlzaG91Cis0ODpDTjpDSE46Q0hJTkE6SHViZWk6U2hpeWFuIFNoaQorNDk6Q046Q0hOOkNISU5BOkh1YmVpOlNvbmd6aQorNTA6Q046Q0hOOkNISU5BOkh1YmVpOlN1aSBYaWFuCis1MTpDTjpDSE46Q0hJTkE6SHViZWk6U3VpemhvdSBTaGkKKzUyOkNOOkNITjpDSElOQTpIdWJlaTpUaWFubWVuCis1MzpDTjpDSE46Q0hJTkE6SHViZWk6VG9uZ2NoZW5nCis1NDpDTjpDSE46Q0hJTkE6SHViZWk6VG9uZ3NoYW4KKzU1OkNOOkNITjpDSElOQTpIdWJlaTpXdWNoYW5nCis1NjpDTjpDSE46Q0hJTkE6SHViZWk6V3VmZW5nCis1NzpDTjpDSE46Q0hJTkE6SHViZWk6V3VoYW4gU2hpcXUKKzU4OkNOOkNITjpDSElOQTpIdWJlaTpYaWFuZmVuZworNTk6Q046Q0hOOkNISU5BOkh1YmVpOlhpYW5nZmFuIFNoaQorNjA6Q046Q0hOOkNISU5BOkh1YmVpOlhpYW5neWFuZworNjE6Q046Q0hOOkNISU5BOkh1YmVpOlhpYW5uaW5nCis2MjpDTjpDSE46Q0hJTkE6SHViZWk6WGlhb2dhbgorNjM6Q046Q0hOOkNISU5BOkh1YmVpOlhpbmdzaGFuCis2NDpDTjpDSE46Q0hJTkE6SHViZWk6WGluemhvdQorNjU6Q046Q0hOOkNISU5BOkh1YmVpOlhpc2h1aQorNjY6Q046Q0hOOkNISU5BOkh1YmVpOlh1YW4gRW4KKzY3OkNOOkNITjpDSElOQTpIdWJlaTpZYW5neGluCis2ODpDTjpDSE46Q0hJTkE6SHViZWk6WWljaGFuZworNjk6Q046Q0hOOkNISU5BOkh1YmVpOllpY2hhbmcgU2hpCis3MDpDTjpDSE46Q0hJTkE6SHViZWk6WWljaGVuZworNzE6Q046Q0hOOkNISU5BOkh1YmVpOllpZHUKKzcyOkNOOkNITjpDSElOQTpIdWJlaTpZaW5nY2hlbmcKKzczOkNOOkNITjpDSElOQTpIdWJlaTpZaW5nc2hhbgorNzQ6Q046Q0hOOkNISU5BOkh1YmVpOll1YW4gQW4KKzc1OkNOOkNITjpDSElOQTpIdWJlaTpZdW4gWGlhbgorNzY6Q046Q0hOOkNISU5BOkh1YmVpOll1bm1lbmcKKzc3OkNOOkNITjpDSElOQTpIdWJlaTpZdW54aQorNzg6Q046Q0hOOkNISU5BOkh1YmVpOlphb3lhbmcKKzc5OkNOOkNITjpDSElOQTpIdWJlaTpaaGlqaWFuZworODA6Q046Q0hOOkNISU5BOkh1YmVpOlpob25neGlhbmcKKzgxOkNOOkNITjpDSElOQTpIdWJlaTpaaHVzaGFuCis4MjpDTjpDSE46Q0hJTkE6SHViZWk6Wmh1eGkKKzgzOkNOOkNITjpDSElOQTpIdWJlaTpaaWd1aQorMTpDTjpDSE46Q0hJTkE6QmVpamluZzpCZWlqaW5nIFNoaXF1CisyOkNOOkNITjpDSElOQTpCZWlqaW5nOkNoYW5ncGluZworMzpDTjpDSE46Q0hJTkE6QmVpamluZzpEYXhpbmcKKzQ6Q046Q0hOOkNISU5BOkJlaWppbmc6RmFuZ3NoYW4KKzU6Q046Q0hOOkNISU5BOkJlaWppbmc6SHVhaXJvdQorNjpDTjpDSE46Q0hJTkE6QmVpamluZzpNZW50b3Vnb3UgUXUKKzc6Q046Q0hOOkNISU5BOkJlaWppbmc6TWl5dW4KKzg6Q046Q0hOOkNISU5BOkJlaWppbmc6UGluZ2d1Cis5OkNOOkNITjpDSElOQTpCZWlqaW5nOlNodW55aQorMTA6Q046Q0hOOkNISU5BOkJlaWppbmc6VG9uZyBYaWFuCisxMTpDTjpDSE46Q0hJTkE6QmVpamluZzpZYW5xaW5nCisxMjpDTjpDSE46Q0hJTkE6QmVpamluZzpZYW5zaGFuIFF1CisxOkNOOkNITjpDSElOQTpIYWluYW46QmFpc2hhCisyOkNOOkNITjpDSElOQTpIYWluYW46QmFvdGluZworMzpDTjpDSE46Q0hJTkE6SGFpbmFuOkNoYW5namlhbmcKKzQ6Q046Q0hOOkNISU5BOkhhaW5hbjpDaGVuZ21haQorNTpDTjpDSE46Q0hJTkE6SGFpbmFuOkRhbiBYaWFuCis2OkNOOkNITjpDSElOQTpIYWluYW46RGluZyBBbgorNzpDTjpDSE46Q0hJTkE6SGFpbmFuOkRvbmdmYW5nCis4OkNOOkNITjpDSElOQTpIYWluYW46SGFpa291c2hpCis5OkNOOkNITjpDSElOQTpIYWluYW46TGVkb25nCisxMDpDTjpDSE46Q0hJTkE6SGFpbmFuOkxpbmdhbworMTE6Q046Q0hOOkNISU5BOkhhaW5hbjpMaW5nc2h1aQorMTI6Q046Q0hOOkNISU5BOkhhaW5hbjpRaW9uZ2hhaQorMTM6Q046Q0hOOkNISU5BOkhhaW5hbjpRaW9uZ3NoYW4KKzE0OkNOOkNITjpDSElOQTpIYWluYW46UWlvbmd6aG9uZworMTU6Q046Q0hOOkNISU5BOkhhaW5hbjpUdW5jaGFuZworMTY6Q046Q0hOOkNISU5BOkhhaW5hbjpXYW5uaW5nCisxNzpDTjpDSE46Q0hJTkE6SGFpbmFuOldlbmNoYW5nCisxODpDTjpDSE46Q0hJTkE6SGFpbmFuOllhIFhpYW4KKzE6Q046Q0hOOkNISU5BOk5pbmd4aWE6R3V5dWFuCisyOkNOOkNITjpDSElOQTpOaW5neGlhOkhhaXl1YW4KKzM6Q046Q0hOOkNISU5BOk5pbmd4aWE6SGVsYW4KKzQ6Q046Q0hOOkNISU5BOk5pbmd4aWE6SmluZ3l1YW4KKzU6Q046Q0hOOkNISU5BOk5pbmd4aWE6TGluZ3d1Cis2OkNOOkNITjpDSElOQTpOaW5neGlhOkxvbmdkZQorNzpDTjpDSE46Q0hJTkE6TmluZ3hpYTpQaW5nbHVvCis4OkNOOkNITjpDSElOQTpOaW5neGlhOlFpbmd0b25neGlhCis5OkNOOkNITjpDSElOQTpOaW5neGlhOlNoaXp1aXNoYW4gU2hpcXUKKzEwOkNOOkNITjpDSElOQTpOaW5neGlhOlRhb2xlCisxMTpDTjpDSE46Q0hJTkE6TmluZ3hpYTpUb25neGluCisxMjpDTjpDSE46Q0hJTkE6TmluZ3hpYTpXdXpob25nCisxMzpDTjpDSE46Q0hJTkE6TmluZ3hpYTpYaWppCisxNDpDTjpDSE46Q0hJTkE6TmluZ3hpYTpZYW5jaGkKKzE1OkNOOkNITjpDSElOQTpOaW5neGlhOllpbmNodWFuIFNoaXF1CisxNjpDTjpDSE46Q0hJTkE6TmluZ3hpYTpZb25nbmluZworMTc6Q046Q0hOOkNISU5BOk5pbmd4aWE6WmhvbmduaW5nCisxODpDTjpDSE46Q0hJTkE6TmluZ3hpYTpaaG9uZ3dlaQorMTpDTjpDSE46Q0hJTkE6R3Vhbmd4aTpCYW1hCisyOkNOOkNITjpDSElOQTpHdWFuZ3hpOkJlaWhhaSBTaGkKKzM6Q046Q0hOOkNISU5BOkd1YW5neGk6QmVpbGl1Cis0OkNOOkNITjpDSElOQTpHdWFuZ3hpOkJpbnlhbmcKKzU6Q046Q0hOOkNISU5BOkd1YW5neGk6Qm9iYWkKKzY6Q046Q0hOOkNISU5BOkd1YW5neGk6Qm9zZQorNzpDTjpDSE46Q0hJTkE6R3Vhbmd4aTpDYW5nd3UKKzg6Q046Q0hOOkNISU5BOkd1YW5neGk6Q2VueGkKKzk6Q046Q0hOOkNISU5BOkd1YW5neGk6Q2hvbmd6dW8KKzEwOkNOOkNITjpDSElOQTpHdWFuZ3hpOkRheGluCisxMTpDTjpDSE46Q0hJTkE6R3Vhbmd4aTpEZWJhbworMTI6Q046Q0hOOkNISU5BOkd1YW5neGk6RG9uZ2xhbgorMTM6Q046Q0hOOkNISU5BOkd1YW5neGk6RHUgQW4KKzE0OkNOOkNITjpDSElOQTpHdWFuZ3hpOkZhbmdjaGVuZworMTU6Q046Q0hOOkNISU5BOkd1YW5neGk6RmVuZ3NoYW4KKzE2OkNOOkNITjpDSElOQTpHdWFuZ3hpOkZ1Y2h1YW4KKzE3OkNOOkNITjpDSElOQTpHdWFuZ3hpOkZ1c3VpCisxODpDTjpDSE46Q0hJTkE6R3Vhbmd4aTpHb25nY2hlbmcKKzE5OkNOOkNITjpDSElOQTpHdWFuZ3hpOkd1YW55YW5nCisyMDpDTjpDSE46Q0hJTkE6R3Vhbmd4aTpHdWkgWGlhbgorMjE6Q046Q0hOOkNISU5BOkd1YW5neGk6R3VpbGluIFNoaXF1CisyMjpDTjpDSE46Q0hJTkE6R3Vhbmd4aTpHdWlwaW5nCisyMzpDTjpDSE46Q0hJTkE6R3Vhbmd4aTpIZSBYaWFuCisyNDpDTjpDSE46Q0hJTkE6R3Vhbmd4aTpIZWNoaQorMjU6Q046Q0hOOkNISU5BOkd1YW5neGk6SGVuZyBYaWFuCisyNjpDTjpDSE46Q0hJTkE6R3Vhbmd4aTpIZXB1CisyNzpDTjpDSE46Q0hJTkE6R3Vhbmd4aTpIZXNoYW4gU2hpCisyODpDTjpDSE46Q0hJTkE6R3Vhbmd4aTpIdWFuamlhbmcKKzI5OkNOOkNITjpDSElOQTpHdWFuZ3hpOkppbmd4aQorMzA6Q046Q0hOOkNISU5BOkd1YW5neGk6SmlueGl1CiszMTpDTjpDSE46Q0hJTkE6R3Vhbmd4aTpMYWliaW4KKzMyOkNOOkNITjpDSElOQTpHdWFuZ3hpOkxleWUKKzMzOkNOOkNITjpDSElOQTpHdWFuZ3hpOkxpbmdjaHVhbgorMzQ6Q046Q0hOOkNISU5BOkd1YW5neGk6TGluZ3NoYW4KKzM1OkNOOkNITjpDSElOQTpHdWFuZ3hpOkxpbmd1aQorMzY6Q046Q0hOOkNISU5BOkd1YW5neGk6TGluZ3l1bgorMzc6Q046Q0hOOkNISU5BOkd1YW5neGk6TGlwdQorMzg6Q046Q0hOOkNISU5BOkd1YW5neGk6TGl1Y2hlbmcKKzM5OkNOOkNITjpDSElOQTpHdWFuZ3hpOkxpdWppYW5nCis0MDpDTjpDSE46Q0hJTkE6R3Vhbmd4aTpMaXV6aG91IFNoaQorNDE6Q046Q0hOOkNISU5BOkd1YW5neGk6TG9uZyBBbgorNDI6Q046Q0hOOkNISU5BOkd1YW5neGk6TG9uZ2xpbgorNDM6Q046Q0hOOkNISU5BOkd1YW5neGk6TG9uZ3NoZW5nCis0NDpDTjpDSE46Q0hJTkE6R3Vhbmd4aTpMb25nemhvdQorNDU6Q046Q0hOOkNISU5BOkd1YW5neGk6THVjaHVhbgorNDY6Q046Q0hOOkNISU5BOkd1YW5neGk6THVvY2hlbmcKKzQ3OkNOOkNITjpDSElOQTpHdWFuZ3hpOkx1emhhaQorNDg6Q046Q0hOOkNISU5BOkd1YW5neGk6TWFzaGFuCis0OTpDTjpDSE46Q0hJTkE6R3Vhbmd4aTpNZW5nc2hhbgorNTA6Q046Q0hOOkNISU5BOkd1YW5neGk6TmFuZGFuCis1MTpDTjpDSE46Q0hJTkE6R3Vhbmd4aTpOYW5uaW5nCis1MjpDTjpDSE46Q0hJTkE6R3Vhbmd4aTpOYXBvCis1MzpDTjpDSE46Q0hJTkE6R3Vhbmd4aTpOaW5nbWluZworNTQ6Q046Q0hOOkNISU5BOkd1YW5neGk6UGluZ2d1bworNTU6Q046Q0hOOkNISU5BOkd1YW5neGk6UGluZ2xlCis1NjpDTjpDSE46Q0hJTkE6R3Vhbmd4aTpQaW5nbmFuCis1NzpDTjpDSE46Q0hJTkE6R3Vhbmd4aTpQaW5neGlhbmcgU2hpCis1ODpDTjpDSE46Q0hJTkE6R3Vhbmd4aTpQdWJlaQorNTk6Q046Q0hOOkNISU5BOkd1YW5neGk6UWluemhvdQorNjA6Q046Q0hOOkNISU5BOkd1YW5neGk6UXVhbnpob3UKKzYxOkNOOkNITjpDSElOQTpHdWFuZ3hpOlJvbmcgQW4KKzYyOkNOOkNITjpDSElOQTpHdWFuZ3hpOlJvbmcgWGlhbgorNjM6Q046Q0hOOkNISU5BOkd1YW5neGk6Um9uZ3NodWkKKzY0OkNOOkNITjpDSElOQTpHdWFuZ3hpOlNhbmppYW5nCis2NTpDTjpDSE46Q0hJTkE6R3Vhbmd4aTpTaGFuZ2xpbgorNjY6Q046Q0hOOkNISU5BOkd1YW5neGk6U2hhbmdzaQorNjc6Q046Q0hOOkNISU5BOkd1YW5neGk6VGVuZyBYaWFuCis2ODpDTjpDSE46Q0hJTkE6R3Vhbmd4aTpUaWFuIEUKKzY5OkNOOkNITjpDSElOQTpHdWFuZ3hpOlRpYW5kZW5nCis3MDpDTjpDSE46Q0hJTkE6R3Vhbmd4aTpUaWFuZG9uZworNzE6Q046Q0hOOkNISU5BOkd1YW5neGk6VGlhbmxpbgorNzI6Q046Q0hOOkNISU5BOkd1YW5neGk6VGlhbnlhbmcKKzczOkNOOkNITjpDSElOQTpHdWFuZ3hpOld1bWluZworNzQ6Q046Q0hOOkNISU5BOkd1YW5neGk6V3V4dWFuCis3NTpDTjpDSE46Q0hJTkE6R3Vhbmd4aTpXdXpob3UgU2hpCis3NjpDTjpDSE46Q0hJTkE6R3Vhbmd4aTpYaWFuZ3pob3UKKzc3OkNOOkNITjpDSElOQTpHdWFuZ3hpOlhpbGluCis3ODpDTjpDSE46Q0hJTkE6R3Vhbmd4aTpYaW5jaGVuZworNzk6Q046Q0hOOkNISU5BOkd1YW5neGk6WGluZyBBbgorODA6Q046Q0hOOkNISU5BOkd1YW5neGk6WWFuZ3Nob3UKKzgxOkNOOkNITjpDSElOQTpHdWFuZ3hpOllpc2hhbgorODI6Q046Q0hOOkNISU5BOkd1YW5neGk6WW9uZ2Z1Cis4MzpDTjpDSE46Q0hJTkE6R3Vhbmd4aTpZb25nbmluZworODQ6Q046Q0hOOkNISU5BOkd1YW5neGk6WXVsaW4KKzg1OkNOOkNITjpDSElOQTpHdWFuZ3hpOlpoYW9waW5nCis4NjpDTjpDSE46Q0hJTkE6R3Vhbmd4aTpaaG9uZ3NoYW4KKzg3OkNOOkNITjpDSElOQTpHdWFuZ3hpOlppeXVhbgorMTpDTjpDSE46Q0hJTkE6U2hhYW54aTpBbmthbmcKKzI6Q046Q0hOOkNISU5BOlNoYWFueGk6QW5zYWkKKzM6Q046Q0hOOkNISU5BOlNoYWFueGk6QmFpaGUKKzQ6Q046Q0hOOkNISU5BOlNoYWFueGk6QmFpc2h1aQorNTpDTjpDSE46Q0hJTkE6U2hhYW54aTpCYW9qaQorNjpDTjpDSE46Q0hJTkE6U2hhYW54aTpCYW9qaSBTaGlxdQorNzpDTjpDSE46Q0hJTkE6U2hhYW54aTpCaW4gWGlhbgorODpDTjpDSE46Q0hJTkE6U2hhYW54aTpDaGFuZyBBbgorOTpDTjpDSE46Q0hJTkE6U2hhYW54aTpDaGFuZ3d1CisxMDpDTjpDSE46Q0hJTkE6U2hhYW54aTpDaGVuZ2NoZW5nCisxMTpDTjpDSE46Q0hJTkE6U2hhYW54aTpDaGVuZ2d1CisxMjpDTjpDSE46Q0hJTkE6U2hhYW54aTpDaHVuaHVhCisxMzpDTjpDSE46Q0hJTkE6U2hhYW54aTpEYWxpCisxNDpDTjpDSE46Q0hJTkE6U2hhYW54aTpEYW5mZW5nCisxNTpDTjpDSE46Q0hJTkE6U2hhYW54aTpEaW5nYmlhbgorMTY6Q046Q0hOOkNISU5BOlNoYWFueGk6RmVuZyBYaWFuCisxNzpDTjpDSE46Q0hJTkE6U2hhYW54aTpGZW5neGlhbmcKKzE4OkNOOkNITjpDSElOQTpTaGFhbnhpOkZvcGluZworMTk6Q046Q0hOOkNISU5BOlNoYWFueGk6RnUgWGlhbgorMjA6Q046Q0hOOkNISU5BOlNoYWFueGk6RnVmZW5nCisyMTpDTjpDSE46Q0hJTkE6U2hhYW54aTpGdWd1CisyMjpDTjpDSE46Q0hJTkE6U2hhYW54aTpGdXBpbmcKKzIzOkNOOkNITjpDSElOQTpTaGFhbnhpOkdhbnF1YW4KKzI0OkNOOkNITjpDSElOQTpTaGFhbnhpOkdhb2xpbmcKKzI1OkNOOkNITjpDSElOQTpTaGFhbnhpOkhhbmNoZW5nCisyNjpDTjpDSE46Q0hJTkE6U2hhYW54aTpIYW55aW4KKzI3OkNOOkNITjpDSElOQTpTaGFhbnhpOkhhbnpob25nIFNoaQorMjg6Q046Q0hOOkNISU5BOlNoYWFueGk6SGVuZ3NoYW4KKzI5OkNOOkNITjpDSElOQTpTaGFhbnhpOkhleWFuZworMzA6Q046Q0hOOkNISU5BOlNoYWFueGk6SHUgWGlhbgorMzE6Q046Q0hOOkNISU5BOlNoYWFueGk6SHVhIFhpYW4KKzMyOkNOOkNITjpDSElOQTpTaGFhbnhpOkh1YW5nbGluZworMzM6Q046Q0hOOkNISU5BOlNoYWFueGk6SHVhbmdsb25nCiszNDpDTjpDSE46Q0hJTkE6U2hhYW54aTpIdWF5aW4KKzM1OkNOOkNITjpDSElOQTpTaGFhbnhpOkppYSBYaWFuCiszNjpDTjpDSE46Q0hJTkE6U2hhYW54aTpKaW5nYmlhbgorMzc6Q046Q0hOOkNISU5BOlNoYWFueGk6SmluZ3lhbmcKKzM4OkNOOkNITjpDSElOQTpTaGFhbnhpOkxhbmdhbworMzk6Q046Q0hOOkNISU5BOlNoYWFueGk6TGFudGlhbgorNDA6Q046Q0hOOkNISU5BOlNoYWFueGk6TGludG9uZworNDE6Q046Q0hOOkNISU5BOlNoYWFueGk6TGlueW91Cis0MjpDTjpDSE46Q0hJTkE6U2hhYW54aTpMaXF1YW4KKzQzOkNOOkNITjpDSElOQTpTaGFhbnhpOkxpdWJhCis0NDpDTjpDSE46Q0hJTkE6U2hhYW54aTpMb25nIFhpYW4KKzQ1OkNOOkNITjpDSElOQTpTaGFhbnhpOkx1ZXlhbmcKKzQ2OkNOOkNITjpDSElOQTpTaGFhbnhpOkx1b2NodWFuCis0NzpDTjpDSE46Q0hJTkE6U2hhYW54aTpMdW9uYW4KKzQ4OkNOOkNITjpDSElOQTpTaGFhbnhpOk1laSBYaWFuCis0OTpDTjpDSE46Q0hJTkE6U2hhYW54aTpNaWFuIFhpYW4KKzUwOkNOOkNITjpDSElOQTpTaGFhbnhpOk1pemhpCis1MTpDTjpDSE46Q0hJTkE6U2hhYW54aTpOYW56aGVuZworNTI6Q046Q0hOOkNISU5BOlNoYWFueGk6TmluZ3FpYW5nCis1MzpDTjpDSE46Q0hJTkE6U2hhYW54aTpOaW5nc2hhbgorNTQ6Q046Q0hOOkNISU5BOlNoYWFueGk6UGluZ2xpCis1NTpDTjpDSE46Q0hJTkE6U2hhYW54aTpQdWNoZW5nCis1NjpDTjpDSE46Q0hJTkE6U2hhYW54aTpRaWFuIFhpYW4KKzU3OkNOOkNITjpDSElOQTpTaGFhbnhpOlFpYW55YW5nCis1ODpDTjpDSE46Q0hJTkE6U2hhYW54aTpRaW5namlhbgorNTk6Q046Q0hOOkNISU5BOlNoYWFueGk6UWlzaGFuCis2MDpDTjpDSE46Q0hJTkE6U2hhYW54aTpTYW55dWFuCis2MTpDTjpDSE46Q0hJTkE6U2hhYW54aTpTaGFuZyBYaWFuCis2MjpDTjpDSE46Q0hJTkE6U2hhYW54aTpTaGFuZ25hbgorNjM6Q046Q0hOOkNISU5BOlNoYWFueGk6U2hhbnlhbmcKKzY0OkNOOkNITjpDSElOQTpTaGFhbnhpOlNoZW5tdQorNjU6Q046Q0hOOkNISU5BOlNoYWFueGk6U2hpcWlhbgorNjY6Q046Q0hOOkNISU5BOlNoYWFueGk6U3VpZGUKKzY3OkNOOkNITjpDSElOQTpTaGFhbnhpOlRhaWJhaQorNjg6Q046Q0hOOkNISU5BOlNoYWFueGk6VG9uZ2NodWFuIFNoaXF1Cis2OTpDTjpDSE46Q0hJTkE6U2hhYW54aTpUb25nZ3VhbgorNzA6Q046Q0hOOkNISU5BOlNoYWFueGk6V2VpbmFuCis3MTpDTjpDSE46Q0hJTkE6U2hhYW54aTpXdWJ1Cis3MjpDTjpDSE46Q0hJTkE6U2hhYW54aTpXdWdvbmcKKzczOkNOOkNITjpDSElOQTpTaGFhbnhpOld1cWkKKzc0OkNOOkNITjpDSElOQTpTaGFhbnhpOlhpIEFuIFNoaXF1Cis3NTpDTjpDSE46Q0hJTkE6U2hhYW54aTpYaWFueWFuZyBTaGkKKzc2OkNOOkNITjpDSElOQTpTaGFhbnhpOlhpbmdwaW5nCis3NzpDTjpDSE46Q0hJTkE6U2hhYW54aTpYaXhpYW5nCis3ODpDTjpDSE46Q0hJTkE6U2hhYW54aTpYdW55YW5nCis3OTpDTjpDSE46Q0hJTkE6U2hhYW54aTpYdW55aQorODA6Q046Q0hOOkNISU5BOlNoYWFueGk6WWFuIEFuIFNoaQorODE6Q046Q0hOOkNISU5BOlNoYWFueGk6WWFuY2hhbmcKKzgyOkNOOkNITjpDSElOQTpTaGFhbnhpOllhbmNodWFuCis4MzpDTjpDSE46Q0hJTkE6U2hhYW54aTpZYW5nIFhpYW4KKzg0OkNOOkNITjpDSElOQTpTaGFhbnhpOllhbyBYaWFuCis4NTpDTjpDSE46Q0hJTkE6U2hhYW54aTpZaWNodWFuCis4NjpDTjpDSE46Q0hJTkE6U2hhYW54aTpZaWp1bgorODc6Q046Q0hOOkNISU5BOlNoYWFueGk6WW9uZ3Nob3UKKzg4OkNOOkNITjpDSElOQTpTaGFhbnhpOll1bGluCis4OTpDTjpDSE46Q0hJTkE6U2hhYW54aTpaaGFzaHVpCis5MDpDTjpDSE46Q0hJTkE6U2hhYW54aTpaaGVuIEFuCis5MTpDTjpDSE46Q0hJTkE6U2hhYW54aTpaaGVuZ2JhCis5MjpDTjpDSE46Q0hJTkE6U2hhYW54aTpaaGVucGluZworOTM6Q046Q0hOOkNISU5BOlNoYWFueGk6WmhpZGFuCis5NDpDTjpDSE46Q0hJTkE6U2hhYW54aTpaaG91emhpCis5NTpDTjpDSE46Q0hJTkE6U2hhYW54aTpaaWNoYW5nCis5NjpDTjpDSE46Q0hJTkE6U2hhYW54aTpaaXlhbmcKKzk3OkNOOkNITjpDSElOQTpTaGFhbnhpOlppemhvdQorMTpDTjpDSE46Q0hJTkE6SGVpbG9uZ2ppYW5nOkFjaGVuZworMjpDTjpDSE46Q0hJTkE6SGVpbG9uZ2ppYW5nOkFpaHVpCiszOkNOOkNITjpDSElOQTpIZWlsb25namlhbmc6QW5kYQorNDpDTjpDSE46Q0hJTkE6SGVpbG9uZ2ppYW5nOkJhaXF1YW4KKzU6Q046Q0hOOkNISU5BOkhlaWxvbmdqaWFuZzpCYW9xaW5nCis2OkNOOkNITjpDSElOQTpIZWlsb25namlhbmc6QmF5YW4KKzc6Q046Q0hOOkNISU5BOkhlaWxvbmdqaWFuZzpCZWlhbgorODpDTjpDSE46Q0hJTkE6SGVpbG9uZ2ppYW5nOkJpbiBYaWFuCis5OkNOOkNITjpDSElOQTpIZWlsb25namlhbmc6Qm9saQorMTA6Q046Q0hOOkNISU5BOkhlaWxvbmdqaWFuZzpEYXFpbmEgU2hpCisxMTpDTjpDSE46Q0hJTkE6SGVpbG9uZ2ppYW5nOkRlZHUKKzEyOkNOOkNITjpDSElOQTpIZWlsb25namlhbmc6RG9uZ25pbmcKKzEzOkNOOkNITjpDSElOQTpIZWlsb25namlhbmc6RG9yYm9kCisxNDpDTjpDSE46Q0hJTkE6SGVpbG9uZ2ppYW5nOkZhbmd6aGVuZworMTU6Q046Q0hOOkNISU5BOkhlaWxvbmdqaWFuZzpGdWppbgorMTY6Q046Q0hOOkNISU5BOkhlaWxvbmdqaWFuZzpGdXl1CisxNzpDTjpDSE46Q0hJTkE6SGVpbG9uZ2ppYW5nOkZ1eXVhbgorMTg6Q046Q0hOOkNISU5BOkhlaWxvbmdqaWFuZzpHYW5uYW4KKzE5OkNOOkNITjpDSElOQTpIZWlsb25namlhbmc6SGFpbGluCisyMDpDTjpDSE46Q0hJTkE6SGVpbG9uZ2ppYW5nOkhhaWx1bgorMjE6Q046Q0hOOkNISU5BOkhlaWxvbmdqaWFuZzpIYXJiaW4gU2hpCisyMjpDTjpDSE46Q0hJTkE6SGVpbG9uZ2ppYW5nOkhlZ2FuZyBTaGkKKzIzOkNOOkNITjpDSElOQTpIZWlsb25namlhbmc6SGVpaGUgU2hpCisyNDpDTjpDSE46Q0hJTkE6SGVpbG9uZ2ppYW5nOkh1YSBOYW4KKzI1OkNOOkNITjpDSElOQTpIZWlsb25namlhbmc6SHVhY2h1YW4KKzI2OkNOOkNITjpDSElOQTpIZWlsb25namlhbmc6SHVsYW4KKzI3OkNOOkNITjpDSElOQTpIZWlsb25namlhbmc6SHVsaW4KKzI4OkNOOkNITjpDSElOQTpIZWlsb25namlhbmc6SHVtYQorMjk6Q046Q0hOOkNISU5BOkhlaWxvbmdqaWFuZzpKaWFtdXNpIFNoaQorMzA6Q046Q0hOOkNISU5BOkhlaWxvbmdqaWFuZzpKaWF5aW4KKzMxOkNOOkNITjpDSElOQTpIZWlsb25namlhbmc6Smlkb25nCiszMjpDTjpDSE46Q0hJTkE6SGVpbG9uZ2ppYW5nOkppeGkgU2hpCiszMzpDTjpDSE46Q0hJTkE6SGVpbG9uZ2ppYW5nOkppeGlhbgorMzQ6Q046Q0hOOkNISU5BOkhlaWxvbmdqaWFuZzpLZWRvbmcKKzM1OkNOOkNITjpDSElOQTpIZWlsb25namlhbmc6S2VzaGFuCiszNjpDTjpDSE46Q0hJTkE6SGVpbG9uZ2ppYW5nOkxhbnhpCiszNzpDTjpDSE46Q0hJTkE6SGVpbG9uZ2ppYW5nOkxpbmRpYW4KKzM4OkNOOkNITjpDSElOQTpIZWlsb25namlhbmc6TGlua291CiszOTpDTjpDSE46Q0hJTkE6SGVpbG9uZ2ppYW5nOkxvbmdqaWFuZworNDA6Q046Q0hOOkNISU5BOkhlaWxvbmdqaWFuZzpMdW9iZWkKKzQxOkNOOkNITjpDSElOQTpIZWlsb25namlhbmc6TWluZ3NodWkKKzQyOkNOOkNITjpDSElOQTpIZWlsb25namlhbmc6TWlzaGFuCis0MzpDTjpDSE46Q0hJTkE6SGVpbG9uZ2ppYW5nOk1vaGUKKzQ0OkNOOkNITjpDSElOQTpIZWlsb25namlhbmc6TXVkYW5qaWFuZyBTaGkKKzQ1OkNOOkNITjpDSElOQTpIZWlsb25namlhbmc6TXVsYW4KKzQ2OkNOOkNITjpDSElOQTpIZWlsb25namlhbmc6TXVsaW5nCis0NzpDTjpDSE46Q0hJTkE6SGVpbG9uZ2ppYW5nOk5laGUKKzQ4OkNOOkNITjpDSElOQTpIZWlsb25namlhbmc6TmVuamlhbmcKKzQ5OkNOOkNITjpDSElOQTpIZWlsb25namlhbmc6TmluZyBBbgorNTA6Q046Q0hOOkNISU5BOkhlaWxvbmdqaWFuZzpRaW5nIEFuCis1MTpDTjpDSE46Q0hJTkE6SGVpbG9uZ2ppYW5nOlFpbmdnYW5nCis1MjpDTjpDSE46Q0hJTkE6SGVpbG9uZ2ppYW5nOlFpcWloYXIgU2hpCis1MzpDTjpDSE46Q0hJTkE6SGVpbG9uZ2ppYW5nOlFpdGFpaGUgU2hpCis1NDpDTjpDSE46Q0hJTkE6SGVpbG9uZ2ppYW5nOlJhb2hlCis1NTpDTjpDSE46Q0hJTkE6SGVpbG9uZ2ppYW5nOlNoYW5nemhpCis1NjpDTjpDSE46Q0hJTkE6SGVpbG9uZ2ppYW5nOlNodWFuZ2NoZW5nCis1NzpDTjpDSE46Q0hJTkE6SGVpbG9uZ2ppYW5nOlNodWFuZ3lhc2hhbiBTaGkKKzU4OkNOOkNITjpDSElOQTpIZWlsb25namlhbmc6U3VpYmluCis1OTpDTjpDSE46Q0hJTkE6SGVpbG9uZ2ppYW5nOlN1aWZlbmhlIFNoaQorNjA6Q046Q0hOOkNISU5BOkhlaWxvbmdqaWFuZzpTdWlodWEKKzYxOkNOOkNITjpDSElOQTpIZWlsb25namlhbmc6U3VpbGVuZworNjI6Q046Q0hOOkNISU5BOkhlaWxvbmdqaWFuZzpTdW53dQorNjM6Q046Q0hOOkNISU5BOkhlaWxvbmdqaWFuZzpUYWhlCis2NDpDTjpDSE46Q0hJTkE6SGVpbG9uZ2ppYW5nOlRhaWxhaQorNjU6Q046Q0hOOkNISU5BOkhlaWxvbmdqaWFuZzpUYW5neXVhbgorNjY6Q046Q0hOOkNISU5BOkhlaWxvbmdqaWFuZzpUaWVsaQorNjc6Q046Q0hOOkNISU5BOkhlaWxvbmdqaWFuZzpUb25naGUKKzY4OkNOOkNITjpDSElOQTpIZWlsb25namlhbmc6VG9uZ2ppYW5nCis2OTpDTjpDSE46Q0hJTkE6SGVpbG9uZ2ppYW5nOldhbmdrdWkKKzcwOkNOOkNITjpDSElOQTpIZWlsb25namlhbmc6V3VjaGFuZworNzE6Q046Q0hOOkNISU5BOkhlaWxvbmdqaWFuZzpYdW5rZQorNzI6Q046Q0hOOkNISU5BOkhlaWxvbmdqaWFuZzpZYW5zaG91Cis3MzpDTjpDSE46Q0hJTkE6SGVpbG9uZ2ppYW5nOllpIEFuCis3NDpDTjpDSE46Q0hJTkE6SGVpbG9uZ2ppYW5nOllpY2h1biBTaGlxdQorNzU6Q046Q0hOOkNISU5BOkhlaWxvbmdqaWFuZzpZaWxhbgorNzY6Q046Q0hOOkNISU5BOkhlaWxvbmdqaWFuZzpaaGFvZG9uZworNzc6Q046Q0hOOkNISU5BOkhlaWxvbmdqaWFuZzpaaGFveXVhbgorNzg6Q046Q0hOOkNISU5BOkhlaWxvbmdqaWFuZzpaaGFvemhvdQorMTpDTjpDSE46Q0hJTkE6Wmhlamlhbmc6QW5qaQorMjpDTjpDSE46Q0hJTkE6Wmhlamlhbmc6Q2FuZ25hbgorMzpDTjpDSE46Q0hJTkE6Wmhlamlhbmc6Q2hhbmdzaGFuCis0OkNOOkNITjpDSElOQTpaaGVqaWFuZzpDaGFuZ3hpbmcKKzU6Q046Q0hOOkNISU5BOlpoZWppYW5nOkNodW5hbgorNjpDTjpDSE46Q0hJTkE6Wmhlamlhbmc6Q2l4aQorNzpDTjpDSE46Q0hJTkE6Wmhlamlhbmc6RGVxaW5nCis4OkNOOkNITjpDSElOQTpaaGVqaWFuZzpEaW5naGFpCis5OkNOOkNITjpDSElOQTpaaGVqaWFuZzpEb25neWFuZworMTA6Q046Q0hOOkNISU5BOlpoZWppYW5nOkZlbmdodWEKKzExOkNOOkNITjpDSElOQTpaaGVqaWFuZzpGdXlhbmcKKzEyOkNOOkNITjpDSElOQTpaaGVqaWFuZzpIYWluaW5nCisxMzpDTjpDSE46Q0hJTkE6Wmhlamlhbmc6SGFpeWFuCisxNDpDTjpDSE46Q0hJTkE6Wmhlamlhbmc6SGFuZ3pob3UgU2hpcXUKKzE1OkNOOkNITjpDSElOQTpaaGVqaWFuZzpIdWFuZ3lhbgorMTY6Q046Q0hOOkNISU5BOlpoZWppYW5nOkh1emhvdQorMTc6Q046Q0hOOkNISU5BOlpoZWppYW5nOkppYW5kZQorMTg6Q046Q0hOOkNISU5BOlpoZWppYW5nOkppYW5nc2hhbgorMTk6Q046Q0hOOkNISU5BOlpoZWppYW5nOkppYW9qaWFuZyBTaGkKKzIwOkNOOkNITjpDSElOQTpaaGVqaWFuZzpKaWFzaGFuCisyMTpDTjpDSE46Q0hJTkE6Wmhlamlhbmc6SmlheGluZworMjI6Q046Q0hOOkNISU5BOlpoZWppYW5nOkppbmh1YSBTaGkKKzIzOkNOOkNITjpDSElOQTpaaGVqaWFuZzpKaXl1bgorMjQ6Q046Q0hOOkNISU5BOlpoZWppYW5nOkthaWh1YQorMjU6Q046Q0hOOkNISU5BOlpoZWppYW5nOkxhbnhpCisyNjpDTjpDSE46Q0hJTkE6Wmhlamlhbmc6TGVxaW5nCisyNzpDTjpDSE46Q0hJTkE6Wmhlamlhbmc6TGluYW4KKzI4OkNOOkNITjpDSElOQTpaaGVqaWFuZzpMaW5oYWkKKzI5OkNOOkNITjpDSElOQTpaaGVqaWFuZzpMaXNodWkKKzMwOkNOOkNITjpDSElOQTpaaGVqaWFuZzpMb25ncXVhbgorMzE6Q046Q0hOOkNISU5BOlpoZWppYW5nOk5pbmdibyBTaGlxdQorMzI6Q046Q0hOOkNISU5BOlpoZWppYW5nOk5pbmdoYWkKKzMzOkNOOkNITjpDSElOQTpaaGVqaWFuZzpQaW5naHUKKzM0OkNOOkNITjpDSElOQTpaaGVqaWFuZzpQaW5neWFuZworMzU6Q046Q0hOOkNISU5BOlpoZWppYW5nOlB1amlhbmcKKzM2OkNOOkNITjpDSElOQTpaaGVqaWFuZzpQdXR1bworMzc6Q046Q0hOOkNISU5BOlpoZWppYW5nOlFpbmd0aWFuCiszODpDTjpDSE46Q0hJTkE6Wmhlamlhbmc6UWluZ3l1YW4KKzM5OkNOOkNITjpDSElOQTpaaGVqaWFuZzpRdWhhaQorNDA6Q046Q0hOOkNISU5BOlpoZWppYW5nOlF1emhvdSBTaGkKKzQxOkNOOkNITjpDSElOQTpaaGVqaWFuZzpSdWlhbgorNDI6Q046Q0hOOkNISU5BOlpoZWppYW5nOlNhbm1lbgorNDM6Q046Q0hOOkNISU5BOlpoZWppYW5nOlNoYW5neXUKKzQ0OkNOOkNITjpDSElOQTpaaGVqaWFuZzpTaGFveGluZyBTaGkKKzQ1OkNOOkNITjpDSElOQTpaaGVqaWFuZzpTaGVuZyBYaWFuCis0NjpDTjpDSE46Q0hJTkE6Wmhlamlhbmc6U2h1aWNoYW5nCis0NzpDTjpDSE46Q0hJTkE6Wmhlamlhbmc6U29uZ3lhbmcKKzQ4OkNOOkNITjpDSElOQTpaaGVqaWFuZzpUYWlzaHVuCis0OTpDTjpDSE46Q0hJTkE6Wmhlamlhbmc6VGlhbnRhaQorNTA6Q046Q0hOOkNISU5BOlpoZWppYW5nOlRvbmdsdQorNTE6Q046Q0hOOkNISU5BOlpoZWppYW5nOlRvbmd4aWFuZworNTI6Q046Q0hOOkNISU5BOlpoZWppYW5nOldlbmNoZW5nCis1MzpDTjpDSE46Q0hJTkE6Wmhlamlhbmc6V2VubGluZworNTQ6Q046Q0hOOkNISU5BOlpoZWppYW5nOldlbnpob3UgU2hpcXUKKzU1OkNOOkNITjpDSElOQTpaaGVqaWFuZzpXdXlpCis1NjpDTjpDSE46Q0hJTkE6Wmhlamlhbmc6WGlhbmdzaGFuCis1NzpDTjpDSE46Q0hJTkE6Wmhlamlhbmc6WGlhbmp1Cis1ODpDTjpDSE46Q0hJTkE6Wmhlamlhbmc6WGlhb3NoYW4KKzU5OkNOOkNITjpDSElOQTpaaGVqaWFuZzpYaW5jaGFuZworNjA6Q046Q0hOOkNISU5BOlpoZWppYW5nOllpbiBYaWFuCis2MTpDTjpDSE46Q0hJTkE6Wmhlamlhbmc6WWl3dQorNjI6Q046Q0hOOkNISU5BOlpoZWppYW5nOllvbmdqaWEKKzYzOkNOOkNITjpDSElOQTpaaGVqaWFuZzpZb25na2FuZworNjQ6Q046Q0hOOkNISU5BOlpoZWppYW5nOll1aGFuZworNjU6Q046Q0hOOkNISU5BOlpoZWppYW5nOll1aHVhbgorNjY6Q046Q0hOOkNISU5BOlpoZWppYW5nOll1bmhlCis2NzpDTjpDSE46Q0hJTkE6Wmhlamlhbmc6WXV5YW8KKzY4OkNOOkNITjpDSElOQTpaaGVqaWFuZzpaaGVuaGFpCis2OTpDTjpDSE46Q0hJTkE6Wmhlamlhbmc6Wmh1amkKKzE6Q046Q0hOOkNISU5BOlhpbmppYW5nIFV5Z3VyOkFrcWkKKzI6Q046Q0hOOkNISU5BOlhpbmppYW5nIFV5Z3VyOkFrc3UKKzM6Q046Q0hOOkNISU5BOlhpbmppYW5nIFV5Z3VyOkFrdG8KKzQ6Q046Q0hOOkNISU5BOlhpbmppYW5nIFV5Z3VyOkFsdGF5Cis1OkNOOkNITjpDSElOQTpYaW5qaWFuZyBVeWd1cjpBcnR1eAorNjpDTjpDSE46Q0hJTkE6WGluamlhbmcgVXlndXI6QXdhdAorNzpDTjpDSE46Q0hJTkE6WGluamlhbmcgVXlndXI6QmFjaHUKKzg6Q046Q0hOOkNISU5BOlhpbmppYW5nIFV5Z3VyOkJhaWNoZW5nCis5OkNOOkNITjpDSElOQTpYaW5qaWFuZyBVeWd1cjpCYXJrb2wKKzEwOkNOOkNITjpDSElOQTpYaW5qaWFuZyBVeWd1cjpCb2h1CisxMTpDTjpDSE46Q0hJTkE6WGluamlhbmcgVXlndXI6Qm9sZQorMTI6Q046Q0hOOkNISU5BOlhpbmppYW5nIFV5Z3VyOkJ1cnFpbgorMTM6Q046Q0hOOkNISU5BOlhpbmppYW5nIFV5Z3VyOkNoYW5namkKKzE0OkNOOkNITjpDSElOQTpYaW5qaWFuZyBVeWd1cjpFbWluCisxNTpDTjpDSE46Q0hJTkE6WGluamlhbmcgVXlndXI6RnVoYWkKKzE2OkNOOkNITjpDSElOQTpYaW5qaWFuZyBVeWd1cjpGdWthbmcKKzE3OkNOOkNITjpDSElOQTpYaW5qaWFuZyBVeWd1cjpGdXl1bgorMTg6Q046Q0hOOkNISU5BOlhpbmppYW5nIFV5Z3VyOkdvbmdsaXUKKzE5OkNOOkNITjpDSElOQTpYaW5qaWFuZyBVeWd1cjpIYWJhaGUKKzIwOkNOOkNITjpDSElOQTpYaW5qaWFuZyBVeWd1cjpIYW1pCisyMTpDTjpDSE46Q0hJTkE6WGluamlhbmcgVXlndXI6SGFtaSBTaGkKKzIyOkNOOkNITjpDSElOQTpYaW5qaWFuZyBVeWd1cjpIZWppbmcKKzIzOkNOOkNITjpDSElOQTpYaW5qaWFuZyBVeWd1cjpIb2Jva3NhcgorMjQ6Q046Q0hOOkNISU5BOlhpbmppYW5nIFV5Z3VyOkhvdGFuCisyNTpDTjpDSE46Q0hJTkE6WGluamlhbmcgVXlndXI6SG94dWQKKzI2OkNOOkNITjpDSElOQTpYaW5qaWFuZyBVeWd1cjpIdW9jaGVuZworMjc6Q046Q0hOOkNISU5BOlhpbmppYW5nIFV5Z3VyOkh1dHViaQorMjg6Q046Q0hOOkNISU5BOlhpbmppYW5nIFV5Z3VyOkplbWluYXkKKzI5OkNOOkNITjpDSElOQTpYaW5qaWFuZyBVeWd1cjpKaWFzaGkKKzMwOkNOOkNITjpDSElOQTpYaW5qaWFuZyBVeWd1cjpKaW1zYXIKKzMxOkNOOkNITjpDSElOQTpYaW5qaWFuZyBVeWd1cjpKaW5naGUKKzMyOkNOOkNITjpDSElOQTpYaW5qaWFuZyBVeWd1cjpLYWxwaW4KKzMzOkNOOkNITjpDSElOQTpYaW5qaWFuZyBVeWd1cjpLYXJhbWF5IFNoaQorMzQ6Q046Q0hOOkNISU5BOlhpbmppYW5nIFV5Z3VyOkthc2hpIFNoaQorMzU6Q046Q0hOOkNISU5BOlhpbmppYW5nIFV5Z3VyOktvcmxhCiszNjpDTjpDSE46Q0hJTkE6WGluamlhbmcgVXlndXI6S29ybGEgU2hpCiszNzpDTjpDSE46Q0hJTkE6WGluamlhbmcgVXlndXI6S3VxYQorMzg6Q046Q0hOOkNISU5BOlhpbmppYW5nIFV5Z3VyOkt1eXR1biBTaGkKKzM5OkNOOkNITjpDSElOQTpYaW5qaWFuZyBVeWd1cjpMb3AKKzQwOkNOOkNITjpDSElOQTpYaW5qaWFuZyBVeWd1cjpMdW50YWkKKzQxOkNOOkNITjpDSElOQTpYaW5qaWFuZyBVeWd1cjpNYW5hcworNDI6Q046Q0hOOkNISU5BOlhpbmppYW5nIFV5Z3VyOk1hcmtpdAorNDM6Q046Q0hOOkNISU5BOlhpbmppYW5nIFV5Z3VyOk1pbmZlbmcKKzQ0OkNOOkNITjpDSElOQTpYaW5qaWFuZyBVeWd1cjpNaXF1YW4KKzQ1OkNOOkNITjpDSElOQTpYaW5qaWFuZyBVeWd1cjpNb3JpCis0NjpDTjpDSE46Q0hJTkE6WGluamlhbmcgVXlndXI6TW95dQorNDc6Q046Q0hOOkNISU5BOlhpbmppYW5nIFV5Z3VyOk5pbGthCis0ODpDTjpDSE46Q0hJTkE6WGluamlhbmcgVXlndXI6UGlzaGFuCis0OTpDTjpDSE46Q0hJTkE6WGluamlhbmcgVXlndXI6UWFwcWFpCis1MDpDTjpDSE46Q0hJTkE6WGluamlhbmcgVXlndXI6UWllbW8KKzUxOkNOOkNITjpDSElOQTpYaW5qaWFuZyBVeWd1cjpRaW5naGUKKzUyOkNOOkNITjpDSElOQTpYaW5qaWFuZyBVeWd1cjpRaXJhCis1MzpDTjpDSE46Q0hJTkE6WGluamlhbmcgVXlndXI6UWl0YWkKKzU0OkNOOkNITjpDSElOQTpYaW5qaWFuZyBVeWd1cjpSdW9xaWFuZworNTU6Q046Q0hOOkNISU5BOlhpbmppYW5nIFV5Z3VyOlNoYWNoZQorNTY6Q046Q0hOOkNISU5BOlhpbmppYW5nIFV5Z3VyOlNoYW5zaGFuCis1NzpDTjpDSE46Q0hJTkE6WGluamlhbmcgVXlndXI6U2hhd2FuCis1ODpDTjpDSE46Q0hJTkE6WGluamlhbmcgVXlndXI6U2hpaGV6aSBTaGkKKzU5OkNOOkNITjpDSElOQTpYaW5qaWFuZyBVeWd1cjpTaHVmdQorNjA6Q046Q0hOOkNISU5BOlhpbmppYW5nIFV5Z3VyOlNodWxlCis2MTpDTjpDSE46Q0hJTkE6WGluamlhbmcgVXlndXI6VGFjaGVuZworNjI6Q046Q0hOOkNISU5BOlhpbmppYW5nIFV5Z3VyOlRheGtvcmdhbgorNjM6Q046Q0hOOkNISU5BOlhpbmppYW5nIFV5Z3VyOlRla2VzCis2NDpDTjpDSE46Q0hJTkE6WGluamlhbmcgVXlndXI6VG9rc3VuCis2NTpDTjpDSE46Q0hJTkE6WGluamlhbmcgVXlndXI6VG9saQorNjY6Q046Q0hOOkNISU5BOlhpbmppYW5nIFV5Z3VyOlR1cnBhbgorNjc6Q046Q0hOOkNISU5BOlhpbmppYW5nIFV5Z3VyOlVydW1xaQorNjg6Q046Q0hOOkNISU5BOlhpbmppYW5nIFV5Z3VyOlVydW1xaSBTaGlxdQorNjk6Q046Q0hOOkNISU5BOlhpbmppYW5nIFV5Z3VyOlVzdQorNzA6Q046Q0hOOkNISU5BOlhpbmppYW5nIFV5Z3VyOldlbnF1YW4KKzcxOkNOOkNITjpDSElOQTpYaW5qaWFuZyBVeWd1cjpXZW5zdQorNzI6Q046Q0hOOkNISU5BOlhpbmppYW5nIFV5Z3VyOld1cWlhCis3MzpDTjpDSE46Q0hJTkE6WGluamlhbmcgVXlndXI6V3VzaGkKKzc0OkNOOkNITjpDSElOQTpYaW5qaWFuZyBVeWd1cjpYYXlhcgorNzU6Q046Q0hOOkNISU5BOlhpbmppYW5nIFV5Z3VyOlhpbmhlCis3NjpDTjpDSE46Q0hJTkE6WGluamlhbmcgVXlndXI6WGlueXVhbgorNzc6Q046Q0hOOkNISU5BOlhpbmppYW5nIFV5Z3VyOllhbnFpCis3ODpDTjpDSE46Q0hJTkE6WGluamlhbmcgVXlndXI6WWVjaGVuZworNzk6Q046Q0hOOkNISU5BOlhpbmppYW5nIFV5Z3VyOlllbmdpc2FyCis4MDpDTjpDSE46Q0hJTkE6WGluamlhbmcgVXlndXI6WWluaW5nCis4MTpDTjpDSE46Q0hJTkE6WGluamlhbmcgVXlndXI6WWluaW5nIFNoaQorODI6Q046Q0hOOkNISU5BOlhpbmppYW5nIFV5Z3VyOllpd3UKKzgzOkNOOkNITjpDSElOQTpYaW5qaWFuZyBVeWd1cjpZb3B1cmdhCis4NDpDTjpDSE46Q0hJTkE6WGluamlhbmcgVXlndXI6WXVsaQorODU6Q046Q0hOOkNISU5BOlhpbmppYW5nIFV5Z3VyOll1bWluCis4NjpDTjpDSE46Q0hJTkE6WGluamlhbmcgVXlndXI6WXV0aWFuCis4NzpDTjpDSE46Q0hJTkE6WGluamlhbmcgVXlndXI6WmVwdQorODg6Q046Q0hOOkNISU5BOlhpbmppYW5nIFV5Z3VyOlpoYW9zdQorMTpDTjpDSE46Q0hJTkE6Smlhbmd4aTpBbmZ1CisyOkNOOkNITjpDSElOQTpKaWFuZ3hpOkFueWkKKzM6Q046Q0hOOkNISU5BOkppYW5neGk6QW55dWFuCis0OkNOOkNITjpDSElOQTpKaWFuZ3hpOkJveWFuZworNTpDTjpDSE46Q0hJTkE6Smlhbmd4aTpDaG9uZ3JlbgorNjpDTjpDSE46Q0hJTkE6Smlhbmd4aTpDaG9uZ3lpCis3OkNOOkNITjpDSElOQTpKaWFuZ3hpOkRheXUKKzg6Q046Q0hOOkNISU5BOkppYW5neGk6RGUgQW4KKzk6Q046Q0hOOkNISU5BOkppYW5neGk6RGV4aW5nCisxMDpDTjpDSE46Q0hJTkE6Smlhbmd4aTpEaW5nbmFuCisxMTpDTjpDSE46Q0hJTkE6Smlhbmd4aTpEb25neGlhbmcKKzEyOkNOOkNITjpDSElOQTpKaWFuZ3hpOkR1Y2hhbmcKKzEzOkNOOkNITjpDSElOQTpKaWFuZ3hpOkZlbmNoZW5nCisxNDpDTjpDSE46Q0hJTkE6Smlhbmd4aTpGZW5neGluCisxNTpDTjpDSE46Q0hJTkE6Smlhbmd4aTpGZW5neWkKKzE2OkNOOkNITjpDSElOQTpKaWFuZ3hpOkZ1emhvdSBTaGkKKzE3OkNOOkNITjpDSElOQTpKaWFuZ3hpOkdhbiBYaWFuCisxODpDTjpDSE46Q0hJTkE6Smlhbmd4aTpHYW56aG91IFNoaQorMTk6Q046Q0hOOkNISU5BOkppYW5neGk6R2FvYW4KKzIwOkNOOkNITjpDSElOQTpKaWFuZ3hpOkd1YW5nY2hhbmcKKzIxOkNOOkNITjpDSElOQTpKaWFuZ3hpOkd1YW5nZmVuCisyMjpDTjpDSE46Q0hJTkE6Smlhbmd4aTpHdWl4aQorMjM6Q046Q0hOOkNISU5BOkppYW5neGk6SGVuZ2ZlbmcKKzI0OkNOOkNITjpDSElOQTpKaWFuZ3hpOkh1aWNoYW5nCisyNTpDTjpDSE46Q0hJTkE6Smlhbmd4aTpIdWtvdQorMjY6Q046Q0hOOkNISU5BOkppYW5neGk6SmkgQW4KKzI3OkNOOkNITjpDSElOQTpKaWFuZ3hpOkppIEFuIFNoaQorMjg6Q046Q0hOOkNISU5BOkppYW5neGk6SmluZyBBbgorMjk6Q046Q0hOOkNISU5BOkppYW5neGk6SmluZ2RlemhlbiBTaGkKKzMwOkNOOkNITjpDSElOQTpKaWFuZ3hpOkppbmdnYW5nc2hhbgorMzE6Q046Q0hOOkNISU5BOkppYW5neGk6SmlueGkKKzMyOkNOOkNITjpDSElOQTpKaWFuZ3hpOkppbnhpYW4KKzMzOkNOOkNITjpDSElOQTpKaWFuZ3hpOkppc2h1aQorMzQ6Q046Q0hOOkNISU5BOkppYW5neGk6Sml1amlhbmcKKzM1OkNOOkNITjpDSElOQTpKaWFuZ3hpOkppdWppYW5nIFNoaQorMzY6Q046Q0hOOkNISU5BOkppYW5neGk6TGVhbgorMzc6Q046Q0hOOkNISU5BOkppYW5neGk6TGVwaW5nCiszODpDTjpDSE46Q0hJTkE6Smlhbmd4aTpMaWFuaHVhCiszOTpDTjpDSE46Q0hJTkE6Smlhbmd4aTpMaWNodWFuCis0MDpDTjpDSE46Q0hJTkE6Smlhbmd4aTpMaW5jaHVhbgorNDE6Q046Q0hOOkNISU5BOkppYW5neGk6TG9uZ25hbgorNDI6Q046Q0hOOkNISU5BOkppYW5neGk6TmFuY2hhbmcKKzQzOkNOOkNITjpDSElOQTpKaWFuZ3hpOk5hbmNoYW5nIFNoaXF1Cis0NDpDTjpDSE46Q0hJTkE6Smlhbmd4aTpOYW5jaGVuZworNDU6Q046Q0hOOkNISU5BOkppYW5neGk6TmFuZmVuZworNDY6Q046Q0hOOkNISU5BOkppYW5neGk6TmFua2FuZworNDc6Q046Q0hOOkNISU5BOkppYW5neGk6TmluZ2R1Cis0ODpDTjpDSE46Q0hJTkE6Smlhbmd4aTpOaW5nZ2FuZworNDk6Q046Q0hOOkNISU5BOkppYW5neGk6UGVuZ3plCis1MDpDTjpDSE46Q0hJTkE6Smlhbmd4aTpQaW5neGlhbmcgU2hpCis1MTpDTjpDSE46Q0hJTkE6Smlhbmd4aTpRaWFuc2hhbgorNTI6Q046Q0hOOkNISU5BOkppYW5neGk6UWluZ2ppYW5nCis1MzpDTjpDSE46Q0hJTkE6Smlhbmd4aTpRdWFubmFuCis1NDpDTjpDSE46Q0hJTkE6Smlhbmd4aTpSdWljaGFuZworNTU6Q046Q0hOOkNISU5BOkppYW5neGk6UnVpamluCis1NjpDTjpDSE46Q0hJTkE6Smlhbmd4aTpTaGFuZ2dhbworNTc6Q046Q0hOOkNISU5BOkppYW5neGk6U2hhbmdyYW8KKzU4OkNOOkNITjpDSElOQTpKaWFuZ3hpOlNoYW5ncmFvIFNoaQorNTk6Q046Q0hOOkNISU5BOkppYW5neGk6U2hhbmd5b3UKKzYwOkNOOkNITjpDSElOQTpKaWFuZ3hpOlNoaWNoZW5nCis2MTpDTjpDSE46Q0hJTkE6Smlhbmd4aTpTdWljaHVhbgorNjI6Q046Q0hOOkNISU5BOkppYW5neGk6VGFpaGUKKzYzOkNOOkNITjpDSElOQTpKaWFuZ3hpOlRvbmdndQorNjQ6Q046Q0hOOkNISU5BOkppYW5neGk6V2FuIEFuCis2NTpDTjpDSE46Q0hJTkE6Smlhbmd4aTpXYW5uaWFuCis2NjpDTjpDSE46Q0hJTkE6Smlhbmd4aTpXYW56YWkKKzY3OkNOOkNITjpDSElOQTpKaWFuZ3hpOld1bmluZworNjg6Q046Q0hOOkNISU5BOkppYW5neGk6V3V5dWFuCis2OTpDTjpDSE46Q0hJTkE6Smlhbmd4aTpYaWFqaWFuZworNzA6Q046Q0hOOkNISU5BOkppYW5neGk6WGluZmVuZworNzE6Q046Q0hOOkNISU5BOkppYW5neGk6WGluZ2FuCis3MjpDTjpDSE46Q0hJTkE6Smlhbmd4aTpYaW5nZ3VvCis3MzpDTjpDSE46Q0hJTkE6Smlhbmd4aTpYaW5nemkKKzc0OkNOOkNITjpDSElOQTpKaWFuZ3hpOlhpbmppYW4KKzc1OkNOOkNITjpDSElOQTpKaWFuZ3hpOlhpbnl1Cis3NjpDTjpDSE46Q0hJTkE6Smlhbmd4aTpYaXVzaHVpCis3NzpDTjpDSE46Q0hJTkE6Smlhbmd4aTpYdW53dQorNzg6Q046Q0hOOkNISU5BOkppYW5neGk6WWljaHVuCis3OTpDTjpDSE46Q0hJTkE6Smlhbmd4aTpZaWNodW4gU2hpCis4MDpDTjpDSE46Q0hJTkE6Smlhbmd4aTpZaWZlbmcKKzgxOkNOOkNITjpDSElOQTpKaWFuZ3hpOllpaHVhbmcKKzgyOkNOOkNITjpDSElOQTpKaWFuZ3hpOllpbmd0YW4gU2hpCis4MzpDTjpDSE46Q0hJTkE6Smlhbmd4aTpZaXlhbmcKKzg0OkNOOkNITjpDSElOQTpKaWFuZ3hpOllvbmdmZW5nCis4NTpDTjpDSE46Q0hJTkE6Smlhbmd4aTpZb25neGluCis4NjpDTjpDSE46Q0hJTkE6Smlhbmd4aTpZb25neGl1Cis4NzpDTjpDSE46Q0hJTkE6Smlhbmd4aTpZdWR1Cis4ODpDTjpDSE46Q0hJTkE6Smlhbmd4aTpZdWdhbgorODk6Q046Q0hOOkNISU5BOkppYW5neGk6WXVqaWFuZworOTA6Q046Q0hOOkNISU5BOkppYW5neGk6WXVzaGFuCis5MTpDTjpDSE46Q0hJTkE6Smlhbmd4aTpaaXhpCisxOkNOOkNITjpDSElOQTpHYW5zdTpBa3NheQorMjpDTjpDSE46Q0hJTkE6R2Fuc3U6QW54aQorMzpDTjpDSE46Q0hJTkE6R2Fuc3U6Q2hlbmcgWGlhbgorNDpDTjpDSE46Q0hJTkE6R2Fuc3U6Q2hvbmd4aW4KKzU6Q046Q0hOOkNISU5BOkdhbnN1OkRhbmdjaGFuZworNjpDTjpDSE46Q0hJTkE6R2Fuc3U6RGluZ3hpCis3OkNOOkNITjpDSElOQTpHYW5zdTpEb29neGlhbmcKKzg6Q046Q0hOOkNISU5BOkdhbnN1OkR1bmh1YW5nCis5OkNOOkNITjpDSElOQTpHYW5zdTpHYW5ndQorMTA6Q046Q0hOOkNISU5BOkdhbnN1Okdhb2xhbgorMTE6Q046Q0hOOkNISU5BOkdhbnN1Okdhb3RhaQorMTI6Q046Q0hOOkNISU5BOkdhbnN1Okd1YW5naGUKKzEzOkNOOkNITjpDSElOQTpHYW5zdTpHdWxhbmcKKzE0OkNOOkNITjpDSElOQTpHYW5zdTpIZXNodWkKKzE1OkNOOkNITjpDSElOQTpHYW5zdTpIZXpoZW5nCisxNjpDTjpDSE46Q0hJTkE6R2Fuc3U6SHVhY2hpCisxNzpDTjpDSE46Q0hJTkE6R2Fuc3U6SHVhbiBYaWFuCisxODpDTjpDSE46Q0hJTkE6R2Fuc3U6SHVhdGluZworMTk6Q046Q0hOOkNISU5BOkdhbnN1Okh1aSBYaWFuCisyMDpDTjpDSE46Q0hJTkE6R2Fuc3U6SHVpbmluZworMjE6Q046Q0hOOkNISU5BOkdhbnN1OkppYXl1Z3VhbiBTaGkKKzIyOkNOOkNITjpDSElOQTpHYW5zdTpKaW5jaGFuZyBTaGlxdQorMjM6Q046Q0hOOkNISU5BOkdhbnN1OkppbmdjaHVhbgorMjQ6Q046Q0hOOkNISU5BOkdhbnN1OkppbmduaW5nCisyNTpDTjpDSE46Q0hJTkE6R2Fuc3U6SmluZ3RhaQorMjY6Q046Q0hOOkNISU5BOkdhbnN1Okppbmd5dWFuCisyNzpDTjpDSE46Q0hJTkE6R2Fuc3U6SmludGEKKzI4OkNOOkNITjpDSElOQTpHYW5zdTpKaXNoaXNoYW4KKzI5OkNOOkNITjpDSElOQTpHYW5zdTpKaXVxdWFuCiszMDpDTjpDSE46Q0hJTkE6R2Fuc3U6Sm9uZQorMzE6Q046Q0hOOkNISU5BOkdhbnN1OkthbmcgWGlhbgorMzI6Q046Q0hOOkNISU5BOkdhbnN1OkthbmdsZQorMzM6Q046Q0hOOkNISU5BOkdhbnN1Okxhbnpob3UgU2hpcXUKKzM0OkNOOkNITjpDSElOQTpHYW5zdTpMaSBYaWFuCiszNTpDTjpDSE46Q0hJTkE6R2Fuc3U6TGlhbmdkYW5nCiszNjpDTjpDSE46Q0hJTkE6R2Fuc3U6TGluZ3RhaQorMzc6Q046Q0hOOkNISU5BOkdhbnN1Okxpbmd0YW8KKzM4OkNOOkNITjpDSElOQTpHYW5zdTpMaW50YW4KKzM5OkNOOkNITjpDSElOQTpHYW5zdTpMaW54aWEKKzQwOkNOOkNITjpDSElOQTpHYW5zdTpMaW56ZQorNDE6Q046Q0hOOkNISU5BOkdhbnN1Okxvbmd4aQorNDI6Q046Q0hOOkNISU5BOkdhbnN1Okx1cXUKKzQzOkNOOkNITjpDSElOQTpHYW5zdTpNYXF1Cis0NDpDTjpDSE46Q0hJTkE6R2Fuc3U6TWluIFhpYW4KKzQ1OkNOOkNITjpDSElOQTpHYW5zdTpNaW5sZQorNDY6Q046Q0hOOkNISU5BOkdhbnN1Ok1pbnFpbgorNDc6Q046Q0hOOkNISU5BOkdhbnN1Ok5pbmcgWGlhbgorNDg6Q046Q0hOOkNISU5BOkdhbnN1OlBpbmdsaWFuZworNDk6Q046Q0hOOkNISU5BOkdhbnN1OlFpbiBBbgorNTA6Q046Q0hOOkNISU5BOkdhbnN1OlFpbmdzaHVpCis1MTpDTjpDSE46Q0hJTkE6R2Fuc3U6UWluZ3lhbmcKKzUyOkNOOkNITjpDSElOQTpHYW5zdTpTaGFuZGFuCis1MzpDTjpDSE46Q0hJTkE6R2Fuc3U6U3ViZWkKKzU0OkNOOkNITjpDSElOQTpHYW5zdTpTdW5hbgorNTU6Q046Q0hOOkNISU5BOkdhbnN1OlRld28KKzU2OkNOOkNITjpDSElOQTpHYW5zdTpUaWFuc2h1aQorNTc6Q046Q0hOOkNISU5BOkdhbnN1OlRpYW5zaHVpIFNoaQorNTg6Q046Q0hOOkNISU5BOkdhbnN1OlRpYW56aHUKKzU5OkNOOkNITjpDSElOQTpHYW5zdTpUb25nd2VpCis2MDpDTjpDSE46Q0hJTkE6R2Fuc3U6V2VpeXVhbgorNjE6Q046Q0hOOkNISU5BOkdhbnN1OldlbiBYaWFuCis2MjpDTjpDSE46Q0hJTkE6R2Fuc3U6V3VkdQorNjM6Q046Q0hOOkNISU5BOkdhbnN1Old1c2hhbgorNjQ6Q046Q0hOOkNISU5BOkdhbnN1Old1d2VpCis2NTpDTjpDSE46Q0hJTkE6R2Fuc3U6WGlhaGUKKzY2OkNOOkNITjpDSElOQTpHYW5zdTpYaWhlCis2NzpDTjpDSE46Q0hJTkE6R2Fuc3U6WW9uZ2NoYW5nCis2ODpDTjpDSE46Q0hJTkE6R2Fuc3U6WW9uZ2RlbmcKKzY5OkNOOkNITjpDSElOQTpHYW5zdTpZb25namluYQorNzA6Q046Q0hOOkNISU5BOkdhbnN1Oll1bWVuIFNoaQorNzE6Q046Q0hOOkNISU5BOkdhbnN1Oll1emhvbmcKKzcyOkNOOkNITjpDSElOQTpHYW5zdTpaaGFuZyBYaWFuCis3MzpDTjpDSE46Q0hJTkE6R2Fuc3U6WmhhbmdqaWFjaHVhbgorNzQ6Q046Q0hOOkNISU5BOkdhbnN1OlpoYW5neWUKKzc1OkNOOkNITjpDSElOQTpHYW5zdTpaaGVuZ25pbmcKKzc2OkNOOkNITjpDSElOQTpHYW5zdTpaaGVueXVhbgorNzc6Q046Q0hOOkNISU5BOkdhbnN1OlpodWFuZ2xhbmcKKzc4OkNOOkNITjpDSElOQTpHYW5zdTpaaHVncXUKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9DSVYvQ0lWX0FETUlOMV9MRVgudHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L0NJVi9DSVZfQURNSU4xX0xFWC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTkwMGVlZQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9DSVYvQ0lWX0FETUlOMV9MRVgudHh0CkBAIC0wLDAgKzEsNjUgQEAKKzE6Q0ktMDY6Q0k6OCBNT05UQUdORVMKKzI6Q0ktQUJFOkNJOkFCRU5HT1VST1UKKzM6Q0ktQUJJOkNJOkFCSURKQU4KKzQ6Q0ktQUJPOkNJOkFCT0lTU08KKzU6Q0ktQUQ6Q0k6QURaT1BFCis2OkNJLUFHQjpDSTpBR0JPVklMTEUKKzc6Q0ktNjpDSTpBR05FQkkKKzg6Q0ktQUdOOkNJOkFHTklCSUxFS1JPCis5OkNJLUJBTjpDSTpCQU5HT0xPCisxMDpDSS0wOTpDSTpCQVMgU0FTU0FORFJBCisxMTpDSS1CRU86Q0k6QkVPVU1JCisxMjpDSS1CSUE6Q0k6QklBTktPVU1BCisxMzpDSS1CT0Q6Q0k6Qk9ORE9VS09VCisxNDpDSS1CT0c6Q0k6Qk9OR09VQU5PVQorMTU6Q0ktQk9GOkNJOkJPVUFGTEUKKzE2OkNJLUJPSzpDSTpCT1VBS0UKKzE3OkNJLUJPVTpDSTpCT1VOQQorMTg6Q0ktQk9OOkNJOkJPVU5ESUFMSQorMTk6Q0ktREFLOkNJOkRBQkFLQUxBCisyMDpDSS1EQUw6Q0k6REFMT0EKKzIxOkNJLURBTjpDSTpEQU5BTkUKKzIyOkNJLURBTzpDSTpEQU9VS1JPCisyMzpDSS0wOkNJOkRFTkdVRUxFCisyNDpDSS1ESU06Q0k6RElNQk9LUk8KKzI1OkNJLURJVjpDSTpESVZPCisyNjpDSS1EVUU6Q0k6RFVFS09VRQorMjc6Q0ktRkVSOkNJOkZFUktFU1NFRE9VR09VCisyODpDSS1HQUc6Q0k6R0FHTk9BCisyOTpDSS1MQUg6Q0k6R1JBTkQgTEFIT1UKKzMwOkNJLUdVSTpDSTpHVUlHTE8KKzMxOkNJLTAyOkNJOkhBVVQgU0FTU0FORFJBCiszMjpDSS1JU1M6Q0k6SVNTSUEKKzMzOkNJLUtBVDpDSTpLQVRJT0xBCiszNDpDSS1LT1I6Q0k6S09SSE9HTworMzU6Q0ktMDc6Q0k6TEFDUworMzY6Q0ktTEFLOkNJOkxBS09UQQorMzc6Q0ktTUJBOkNJOk0nQkFISUFLUk8KKzM4OkNJLU1OOkNJOk1BTgorMzk6Q0ktTUFOOkNJOk1BTktPTk8KKzQwOkNJLTI6Q0k6TUFSQUhPVUUKKzQxOkNJLTA1OkNJOk1PWUVOIENPTU9FCis0MjpDSS0xMDpDSTpOWkkgQ09NT0UKKzQzOkNJLU9ESTpDSTpPRElFTk5FCis0NDpDSS1PVTpDSTpPVU1FCis0NTpDSS1TQUs6Q0k6U0FLQVNTT1UKKzQ2OkNJLVNQOkNJOlNBTiBQRURSTworNDc6Q0ktU0FTOkNJOlNBU1NBTkRSQQorNDg6Q0ktMDM6Q0k6U0FWQU5FUworNDk6Q0ktU0VHOkNJOlNFR1VFTEEKKzUwOkNJLVNJTjpDSTpTSU5GUkEKKzUxOkNJLVNPUjpDSTpTT1VCUkUKKzUyOkNJLTU6Q0k6U1VEIEJBTkRBTUEKKzUzOkNJLTM6Q0k6U1VEIENPTU9FCis1NDpDSS1UQUI6Q0k6VEFCT1UKKzU1OkNJLVRBTjpDSTpUQU5EQQorNTY6Q0ktVEVOOkNJOlRFTkdSRUxBCis1NzpDSS1USUE6Q0k6VElBU1NBTEUKKzU4OkNJLVRPQjpDSTpUT1VCQQorNTk6Q0ktVE9NOkNJOlRPVU1PREkKKzYwOkNJLTA0OkNJOlZBTExFRSBEVSBCQU5EQU1BCis2MTpDSS1WQVY6Q0k6VkFWT1VBCis2MjpDSS00OkNJOldPUk9ET1VHT1UKKzYzOkNJLVlBTTpDSTpZQU1PVVNTT1VLUk8KKzY0OkNJLTA4OkNJOlpBTlpBTgorNjU6Q0ktWlVFOkNJOlpVRU5PVUxBCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvQ0lWL0NJVl9BRE1JTjJfTEVYLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9DSVYvQ0lWX0FETUlOMl9MRVgudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNhM2VjYjcKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvQ0lWL0NJVl9BRE1JTjJfTEVYLnR4dApAQCAtMCwwICsxLDE4NSBAQAorMTpDSTpDSVY6SVZPUlkgQ09BU1Q6VG91YmE6Qm9va28KKzI6Q0k6Q0lWOklWT1JZIENPQVNUOlRvdWJhOkJvcm90b3UKKzM6Q0k6Q0lWOklWT1JZIENPQVNUOlRvdWJhOkd1aW50ZWd1ZWxhCis0OkNJOkNJVjpJVk9SWSBDT0FTVDpUb3ViYTpLb29uYW4KKzU6Q0k6Q0lWOklWT1JZIENPQVNUOlRvdWJhOktvcm8KKzY6Q0k6Q0lWOklWT1JZIENPQVNUOlRvdWJhOk91YW5pbm91Cis3OkNJOkNJVjpJVk9SWSBDT0FTVDpUb3ViYTpUb3ViYQorMTpDSTpDSVY6SVZPUlkgQ09BU1Q6U2VndWVsYTpEamlicm9zc28KKzI6Q0k6Q0lWOklWT1JZIENPQVNUOlNlZ3VlbGE6RHVhbGxhCiszOkNJOkNJVjpJVk9SWSBDT0FTVDpTZWd1ZWxhOkthbmkKKzQ6Q0k6Q0lWOklWT1JZIENPQVNUOlNlZ3VlbGE6TWFzc2FsYQorNTpDSTpDSVY6SVZPUlkgQ09BU1Q6U2VndWVsYTpNb3JvbmRvCis2OkNJOkNJVjpJVk9SWSBDT0FTVDpTZWd1ZWxhOlNlZ3VlbGEKKzc6Q0k6Q0lWOklWT1JZIENPQVNUOlNlZ3VlbGE6U2lmaWUKKzg6Q0k6Q0lWOklWT1JZIENPQVNUOlNlZ3VlbGE6V29yb2ZsYQorMTpDSTpDSVY6SVZPUlkgQ09BU1Q6S29yaG9nbzpEaWtvZG91Z291CisyOkNJOkNJVjpJVk9SWSBDT0FTVDpLb3Job2dvOkd1aWVtYmUKKzM6Q0k6Q0lWOklWT1JZIENPQVNUOktvcmhvZ286S2FyYWtvcm8KKzQ6Q0k6Q0lWOklWT1JZIENPQVNUOktvcmhvZ286S29tYm9yb2RvdWdvdQorNTpDSTpDSVY6SVZPUlkgQ09BU1Q6S29yaG9nbzpLb3Job2dvCis2OkNJOkNJVjpJVk9SWSBDT0FTVDpLb3Job2dvOk0nYmVuZ3VlCis3OkNJOkNJVjpJVk9SWSBDT0FTVDpLb3Job2dvOk5hcGllb2xlZG91Z291Cis4OkNJOkNJVjpJVk9SWSBDT0FTVDpLb3Job2dvOk5pb2ZvaW4KKzk6Q0k6Q0lWOklWT1JZIENPQVNUOktvcmhvZ286U2luZW1hdGlhbGkKKzEwOkNJOkNJVjpJVk9SWSBDT0FTVDpLb3Job2dvOlNpcmFzc28KKzExOkNJOkNJVjpJVk9SWSBDT0FTVDpLb3Job2dvOlRpb3JvbmlhcmFkb3Vnb3UKKzE6Q0k6Q0lWOklWT1JZIENPQVNUOkthdGlvbGE6RnJvbmFuCisyOkNJOkNJVjpJVk9SWSBDT0FTVDpLYXRpb2xhOkthdGlvbGEKKzM6Q0k6Q0lWOklWT1JZIENPQVNUOkthdGlvbGE6Tmlha2FybWFkb3Vnb3UKKzQ6Q0k6Q0lWOklWT1JZIENPQVNUOkthdGlvbGE6VGFmaWVyZQorNTpDSTpDSVY6SVZPUlkgQ09BU1Q6S2F0aW9sYTpUb3J0aXlhCisxOkNJOkNJVjpJVk9SWSBDT0FTVDpUaWFzc2FsZTpUYWFibworMjpDSTpDSVY6SVZPUlkgQ09BU1Q6VGlhc3NhbGU6VGlhc3NhbGUKKzE6Q0k6Q0lWOklWT1JZIENPQVNUOkJvdW5hOkJvdW5hCisyOkNJOkNJVjpJVk9SWSBDT0FTVDpCb3VuYTpEcm9wbworMzpDSTpDSVY6SVZPUlkgQ09BU1Q6Qm91bmE6TmFzc2lhbgorNDpDSTpDSVY6SVZPUlkgQ09BU1Q6Qm91bmE6VGVoaW5pCisxOkNJOkNJVjpJVk9SWSBDT0FTVDpTYW4tUGVkcm86R3JhbmQtQmVyZWJ5CisyOkNJOkNJVjpJVk9SWSBDT0FTVDpTYW4tUGVkcm86U2FuLVBlZHJvCisxOkNJOkNJVjpJVk9SWSBDT0FTVDpCb3VuZGlhbGk6Qm91bmRpYWxpCisyOkNJOkNJVjpJVk9SWSBDT0FTVDpCb3VuZGlhbGk6R2JvbgorMzpDSTpDSVY6SVZPUlkgQ09BU1Q6Qm91bmRpYWxpOkthc3NlcmUKKzQ6Q0k6Q0lWOklWT1JZIENPQVNUOkJvdW5kaWFsaTpLb2xpYQorNTpDSTpDSVY6SVZPUlkgQ09BU1Q6Qm91bmRpYWxpOktvdXRvCisxOkNJOkNJVjpJVk9SWSBDT0FTVDpGZXJrZXNzZWRvdWdvdTpEaWF3YWxhCisyOkNJOkNJVjpJVk9SWSBDT0FTVDpGZXJrZXNzZWRvdWdvdTpGZXJrZXNzZWRvdWdvdQorMzpDSTpDSVY6SVZPUlkgQ09BU1Q6RmVya2Vzc2Vkb3Vnb3U6S29uZworNDpDSTpDSVY6SVZPUlkgQ09BU1Q6RmVya2Vzc2Vkb3Vnb3U6S291bWJhbGEKKzU6Q0k6Q0lWOklWT1JZIENPQVNUOkZlcmtlc3NlZG91Z291Ok5pZWxsZQorNjpDSTpDSVY6SVZPUlkgQ09BU1Q6RmVya2Vzc2Vkb3Vnb3U6T3VhbmdvbG9kb3Vnb3UKKzE6Q0k6Q0lWOklWT1JZIENPQVNUOlNhc3NhbmRyYTpHdWV5bworMjpDSTpDSVY6SVZPUlkgQ09BU1Q6U2Fzc2FuZHJhOlNhc3NhbmRyYQorMTpDSTpDSVY6SVZPUlkgQ09BU1Q6R2Fnbm9hOkdhZ25vYQorMjpDSTpDSVY6SVZPUlkgQ09BU1Q6R2Fnbm9hOkd1aWJlcm91YQorMzpDSTpDSVY6SVZPUlkgQ09BU1Q6R2Fnbm9hOk91cmFnYWhpbworMTpDSTpDSVY6SVZPUlkgQ09BU1Q6Qm91YWZsZTpCb25vbgorMjpDSTpDSVY6SVZPUlkgQ09BU1Q6Qm91YWZsZTpCb3VhZmxlCisxOkNJOkNJVjpJVk9SWSBDT0FTVDpEYWxvYTpCZWRpYWxhCisyOkNJOkNJVjpJVk9SWSBDT0FTVDpEYWxvYTpEYWxvYQorMzpDSTpDSVY6SVZPUlkgQ09BU1Q6RGFsb2E6R2JvZ3VoZQorNDpDSTpDSVY6SVZPUlkgQ09BU1Q6RGFsb2E6Wm91a291Z2JldQorMTpDSTpDSVY6SVZPUlkgQ09BU1Q6VGFuZGE6QXNzdWVmcnkKKzI6Q0k6Q0lWOklWT1JZIENPQVNUOlRhbmRhOktvdWFzc2ktRGF0ZWtybworMzpDSTpDSVY6SVZPUlkgQ09BU1Q6VGFuZGE6S291bi1GYW8KKzQ6Q0k6Q0lWOklWT1JZIENPQVNUOlRhbmRhOlRhbmRhCis1OkNJOkNJVjpJVk9SWSBDT0FTVDpUYW5kYTpUcmFuc3VhCisxOkNJOkNJVjpJVk9SWSBDT0FTVDpWYXZvdWE6VmF2b3VhCisxOkNJOkNJVjpJVk9SWSBDT0FTVDpBZ2JvdmlsbGU6QWdib3ZpbGxlCisyOkNJOkNJVjpJVk9SWSBDT0FTVDpBZ2JvdmlsbGU6QXphZ3VpZQorMzpDSTpDSVY6SVZPUlkgQ09BU1Q6QWdib3ZpbGxlOlJ1YmlubworMTpDSTpDSVY6SVZPUlkgQ09BU1Q6WnVlbm91bGE6R29oaXRhZmxhCisyOkNJOkNJVjpJVk9SWSBDT0FTVDpadWVub3VsYTpadWVub3VsYQorMTpDSTpDSVY6SVZPUlkgQ09BU1Q6R3VpZ2xvOkJsb2xlcXVpbgorMjpDSTpDSVY6SVZPUlkgQ09BU1Q6R3VpZ2xvOkd1aWdsbworMzpDSTpDSVY6SVZPUlkgQ09BU1Q6R3VpZ2xvOlRhaGkKKzQ6Q0k6Q0lWOklWT1JZIENPQVNUOkd1aWdsbzpUb3VsZXBsZXUKKzE6Q0k6Q0lWOklWT1JZIENPQVNUOkFkem9wZTpBZHpvcGUKKzI6Q0k6Q0lWOklWT1JZIENPQVNUOkFkem9wZTpBZmZlcnkKKzM6Q0k6Q0lWOklWT1JZIENPQVNUOkFkem9wZTpBZ291Cis0OkNJOkNJVjpJVk9SWSBDT0FTVDpBZHpvcGU6QWtvdXBlCis1OkNJOkNJVjpJVk9SWSBDT0FTVDpBZHpvcGU6WWFrYXNzZS1BdHRvYnJvdQorMTpDSTpDSVY6SVZPUlkgQ09BU1Q6RGltYm9rcm86Qm9jYW5kYQorMjpDSTpDSVY6SVZPUlkgQ09BU1Q6RGltYm9rcm86RGltYm9rcm8KKzM6Q0k6Q0lWOklWT1JZIENPQVNUOkRpbWJva3JvOktvdWFzc2lrcm8KKzE6Q0k6Q0lWOklWT1JZIENPQVNUOk91bWU6RGllZ29uZWZsYQorMjpDSTpDSVY6SVZPUlkgQ09BU1Q6T3VtZTpPdW1lCisxOkNJOkNJVjpJVk9SWSBDT0FTVDpBYmlkamFuOkFiaWRqYW4tVmlsbGUKKzI6Q0k6Q0lWOklWT1JZIENPQVNUOkFiaWRqYW46QWxlcGUKKzM6Q0k6Q0lWOklWT1JZIENPQVNUOkFiaWRqYW46QW55YW1hCis0OkNJOkNJVjpJVk9SWSBDT0FTVDpBYmlkamFuOkJpbmdlcnZpbGxlCis1OkNJOkNJVjpJVk9SWSBDT0FTVDpBYmlkamFuOkJvbm91YQorNjpDSTpDSVY6SVZPUlkgQ09BU1Q6QWJpZGphbjpEYWJvdQorNzpDSTpDSVY6SVZPUlkgQ09BU1Q6QWJpZGphbjpHcmFuZC1CYXNzYW0KKzg6Q0k6Q0lWOklWT1JZIENPQVNUOkFiaWRqYW46SmFjcXVldmlsbGUKKzk6Q0k6Q0lWOklWT1JZIENPQVNUOkFiaWRqYW46U2lrZW5zaQorMTA6Q0k6Q0lWOklWT1JZIENPQVNUOkFiaWRqYW46U29uZ29uCisxOkNJOkNJVjpJVk9SWSBDT0FTVDpCZW91bWk6QmVvdW1pCisyOkNJOkNJVjpJVk9SWSBDT0FTVDpCZW91bWk6Qm9kb2tybworMTpDSTpDSVY6SVZPUlkgQ09BU1Q6QmlhbmtvdW1hOkJpYW5rb3VtYQorMjpDSTpDSVY6SVZPUlkgQ09BU1Q6QmlhbmtvdW1hOkdib25uZQorMzpDSTpDSVY6SVZPUlkgQ09BU1Q6QmlhbmtvdW1hOlNpcGlsb3UKKzE6Q0k6Q0lWOklWT1JZIENPQVNUOklzc2lhOklzc2lhCisyOkNJOkNJVjpJVk9SWSBDT0FTVDpJc3NpYTpTYWlvdWEKKzE6Q0k6Q0lWOklWT1JZIENPQVNUOkJvbmdvdWFub3U6QXJyYWgKKzI6Q0k6Q0lWOklWT1JZIENPQVNUOkJvbmdvdWFub3U6Qm9uZ291YW5vdQorMzpDSTpDSVY6SVZPUlkgQ09BU1Q6Qm9uZ291YW5vdTpNJ2JhdHRvCis0OkNJOkNJVjpJVk9SWSBDT0FTVDpCb25nb3Vhbm91OlRpZW1lbGVrcm8KKzE6Q0k6Q0lWOklWT1JZIENPQVNUOk1hbjpGYWNvYmx5CisyOkNJOkNJVjpJVk9SWSBDT0FTVDpNYW46S291aWJseQorMzpDSTpDSVY6SVZPUlkgQ09BU1Q6TWFuOkxvZ291YWxlCis0OkNJOkNJVjpJVk9SWSBDT0FTVDpNYW46TWFuCis1OkNJOkNJVjpJVk9SWSBDT0FTVDpNYW46U2FuZ291aW5lCisxOkNJOkNJVjpJVk9SWSBDT0FTVDpUb3Vtb2RpOktva291bWJvCisyOkNJOkNJVjpJVk9SWSBDT0FTVDpUb3Vtb2RpOlRvdW1vZGkKKzE6Q0k6Q0lWOklWT1JZIENPQVNUOkdyYW5kLUxhaG91OkdyYW5kLUxhaG91CisxOkNJOkNJVjpJVk9SWSBDT0FTVDpZYW1vdXNzb3Vrcm86RGlkaWV2aQorMjpDSTpDSVY6SVZPUlkgQ09BU1Q6WWFtb3Vzc291a3JvOlRpZS1OJ2RpZWtybworMzpDSTpDSVY6SVZPUlkgQ09BU1Q6WWFtb3Vzc291a3JvOlRpZWJpc3NvdQorNDpDSTpDSVY6SVZPUlkgQ09BU1Q6WWFtb3Vzc291a3JvOllhbW91c3NvdWtybworMTpDSTpDSVY6SVZPUlkgQ09BU1Q6QWJlbmdvdXJvdTpBYmVuZ291cm91CisyOkNJOkNJVjpJVk9SWSBDT0FTVDpBYmVuZ291cm91OkJldHRpZQorMzpDSTpDSVY6SVZPUlkgQ09BU1Q6QWJlbmdvdXJvdTpOaWFibGUKKzE6Q0k6Q0lWOklWT1JZIENPQVNUOkRhbmFuZTpCaW4tSG91eWUKKzI6Q0k6Q0lWOklWT1JZIENPQVNUOkRhbmFuZTpEYW5hbmUKKzM6Q0k6Q0lWOklWT1JZIENPQVNUOkRhbmFuZTpab3Vhbi1Ib3VuaWVuCisxOkNJOkNJVjpJVk9SWSBDT0FTVDpCb3Vha2U6Qm90cm8KKzI6Q0k6Q0lWOklWT1JZIENPQVNUOkJvdWFrZTpCb3Vha2UKKzM6Q0k6Q0lWOklWT1JZIENPQVNUOkJvdWFrZTpCcm9ibworNDpDSTpDSVY6SVZPUlkgQ09BU1Q6Qm91YWtlOkRpYWJvCis1OkNJOkNJVjpJVk9SWSBDT0FTVDpCb3Vha2U6RGplYm9ub3VhCisxOkNJOkNJVjpJVk9SWSBDT0FTVDpEaXZvOkRpdm8KKzI6Q0k6Q0lWOklWT1JZIENPQVNUOkRpdm86RnJlc2NvCiszOkNJOkNJVjpJVk9SWSBDT0FTVDpEaXZvOkd1aXRyeQorNDpDSTpDSVY6SVZPUlkgQ09BU1Q6RGl2bzpIaXJlCisxOkNJOkNJVjpJVk9SWSBDT0FTVDpBYm9pc3NvOkFib2lzc28KKzI6Q0k6Q0lWOklWT1JZIENPQVNUOkFib2lzc286QWRpYWtlCiszOkNJOkNJVjpJVk9SWSBDT0FTVDpBYm9pc3NvOkF5YW1lCis0OkNJOkNJVjpJVk9SWSBDT0FTVDpBYm9pc3NvOk1hZmVyZQorNTpDSTpDSVY6SVZPUlkgQ09BU1Q6QWJvaXNzbzpUaWFwb3VtCisxOkNJOkNJVjpJVk9SWSBDT0FTVDpNJ2JhaGlha3JvOk0nYmFoaWFrcm8KKzI6Q0k6Q0lWOklWT1JZIENPQVNUOk0nYmFoaWFrcm86UHJpa3JvCisxOkNJOkNJVjpJVk9SWSBDT0FTVDpPZGllbm5lOkJha28KKzI6Q0k6Q0lWOklWT1JZIENPQVNUOk9kaWVubmU6RGlvdWxhdGllZG91Z291CiszOkNJOkNJVjpJVk9SWSBDT0FTVDpPZGllbm5lOkdvdWxpYQorNDpDSTpDSVY6SVZPUlkgQ09BU1Q6T2RpZW5uZTpLYW5pYXNzbworNTpDSTpDSVY6SVZPUlkgQ09BU1Q6T2RpZW5uZTpNYWRpbmFuaQorNjpDSTpDSVY6SVZPUlkgQ09BU1Q6T2RpZW5uZTpNaW5pZ25hbgorNzpDSTpDSVY6SVZPUlkgQ09BU1Q6T2RpZW5uZTpPZGllbm5lCis4OkNJOkNJVjpJVk9SWSBDT0FTVDpPZGllbm5lOlNhbWF0aWd1aWxhCis5OkNJOkNJVjpJVk9SWSBDT0FTVDpPZGllbm5lOlNlZ3VlbG9uCisxMDpDSTpDSVY6SVZPUlkgQ09BU1Q6T2RpZW5uZTpTZXlkb3Vnb3UKKzExOkNJOkNJVjpJVk9SWSBDT0FTVDpPZGllbm5lOlRpZW1lCisxMjpDSTpDSVY6SVZPUlkgQ09BU1Q6T2RpZW5uZTpUaWVua28KKzE6Q0k6Q0lWOklWT1JZIENPQVNUOk1hbmtvbm86RGlhbnJhCisyOkNJOkNJVjpJVk9SWSBDT0FTVDpNYW5rb25vOktvbmdhc3NvCiszOkNJOkNJVjpJVk9SWSBDT0FTVDpNYW5rb25vOktvdW5haGlyaQorNDpDSTpDSVY6SVZPUlkgQ09BU1Q6TWFua29ubzpNYW5rb25vCis1OkNJOkNJVjpJVk9SWSBDT0FTVDpNYW5rb25vOlNhcmhhbGEKKzY6Q0k6Q0lWOklWT1JZIENPQVNUOk1hbmtvbm86VGllbmluZ2JvdWUKKzE6Q0k6Q0lWOklWT1JZIENPQVNUOkFnbmliaWxla3JvOkFnbmliaWxla3JvCisxOkNJOkNJVjpJVk9SWSBDT0FTVDpUZW5ncmVsYTpLYW5ha29ubworMjpDSTpDSVY6SVZPUlkgQ09BU1Q6VGVuZ3JlbGE6VGVuZ3JlbGEKKzE6Q0k6Q0lWOklWT1JZIENPQVNUOkJvbmRvdWtvdTpCb25kb3Vrb3UKKzI6Q0k6Q0lWOklWT1JZIENPQVNUOkJvbmRvdWtvdTpTYW5kZWd1ZQorMTpDSTpDSVY6SVZPUlkgQ09BU1Q6RGFiYWthbGE6QmFzc2F3YQorMjpDSTpDSVY6SVZPUlkgQ09BU1Q6RGFiYWthbGE6Qm9uaWVyZWRvdWdvdQorMzpDSTpDSVY6SVZPUlkgQ09BU1Q6RGFiYWthbGE6RGFiYWthbGEKKzQ6Q0k6Q0lWOklWT1JZIENPQVNUOkRhYmFrYWxhOkZvdW1ib2xvCis1OkNJOkNJVjpJVk9SWSBDT0FTVDpEYWJha2FsYTpTYW50YW1hLVNva29ybworNjpDSTpDSVY6SVZPUlkgQ09BU1Q6RGFiYWthbGE6U2F0YW1hLVNva291cmEKKzE6Q0k6Q0lWOklWT1JZIENPQVNUOkxha290YTpMYWtvdGEKKzI6Q0k6Q0lWOklWT1JZIENPQVNUOkxha290YTpaaWtpc3NvCisxOkNJOkNJVjpJVk9SWSBDT0FTVDpTb3VicmU6QnV5bworMjpDSTpDSVY6SVZPUlkgQ09BU1Q6U291YnJlOkdyYW5kLVphdHRyeQorMzpDSTpDSVY6SVZPUlkgQ09BU1Q6U291YnJlOk1lYWd1aSAoR25hbWFuZ3VpKQorNDpDSTpDSVY6SVZPUlkgQ09BU1Q6U291YnJlOlNvdWJyZQorMTpDSTpDSVY6SVZPUlkgQ09BU1Q6RGFvdWtybzpEYW91a3JvCisyOkNJOkNJVjpJVk9SWSBDT0FTVDpEYW91a3JvOkV0dHJva3JvCiszOkNJOkNJVjpJVk9SWSBDT0FTVDpEYW91a3JvOk91ZWxsZQorMTpDSTpDSVY6SVZPUlkgQ09BU1Q6QmFuZ29sbzpCYW5nb2xvCisxOkNJOkNJVjpJVk9SWSBDT0FTVDpUYWJvdTpHcmFibworMjpDSTpDSVY6SVZPUlkgQ09BU1Q6VGFib3U6VGFib3UKKzE6Q0k6Q0lWOklWT1JZIENPQVNUOlNpbmZyYTpTaW5mcmEKKzE6Q0k6Q0lWOklWT1JZIENPQVNUOkR1ZWtvdWU6RHVla291ZQorMTpDSTpDSVY6SVZPUlkgQ09BU1Q6U2FrYXNzb3U6U2FrYXNzb3UKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9DT0cvQ09HX0FETUlOMV9MRVgudHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L0NPRy9DT0dfQURNSU4xX0xFWC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjFkZGY5YgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9DT0cvQ09HX0FETUlOMV9MRVgudHh0CkBAIC0wLDAgKzEsMTEgQEAKKzE6Q0ctMTA6Q0c6Qk9VRU5aQQorMjpDRy1CWlY6Q0c6QlJBWlpBVklMTEUKKzM6Q0ctODpDRzpDVVZFVFRFCis0OkNHLTU6Q0c6Q1VWRVRURSBPVUVTVAorNTpDRy0xNDpDRzpLT1VJTE9VCis2OkNHLTI6Q0c6TEVLT1VNT1UKKzc6Q0ctNzpDRzpMSUtPVUFMQQorODpDRy05OkNHOk5JQVJJCis5OkNHLTQ6Q0c6UExBVEVBVVggW1BMQVRFQVVYMV0KKzEwOkNHLTEyOkNHOlBPT0wKKzExOkNHLTM6Q0c6U0FOR0hBCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvQ09HL0NPR19BRE1JTjJfTEVYLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9DT0cvQ09HX0FETUlOMl9MRVgudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM0YmRhYWQKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvQ09HL0NPR19BRE1JTjJfTEVYLnR4dApAQCAtMCwwICsxLDQ2IEBACisxOkNHOkNPRzpDT05HTzpQbGF0ZWF1eDpBYmFsYQorMjpDRzpDT0c6Q09OR086UGxhdGVhdXg6RGphbWJhbGEKKzM6Q0c6Q09HOkNPTkdPOlBsYXRlYXV4OkdhbWJvbWEKKzQ6Q0c6Q09HOkNPTkdPOlBsYXRlYXV4Okxla2FuYQorMTpDRzpDT0c6Q09OR086UG9vbDpCb2tvCisyOkNHOkNPRzpDT05HTzpQb29sOktpbmRhbWJhCiszOkNHOkNPRzpDT05HTzpQb29sOktpbmthbGEKKzQ6Q0c6Q09HOkNPTkdPOlBvb2w6TWF5YW1hCis1OkNHOkNPRzpDT05HTzpQb29sOk1pbmRvdWxpCis2OkNHOkNPRzpDT05HTzpQb29sOk5nYWJlCis3OkNHOkNPRzpDT05HTzpQb29sOk5nYW1hYmEgKEJyYXp6YXZpbGxlKQorMTpDRzpDT0c6Q09OR086Qm91ZW56YTpCb2tvLVNvbmdobworMjpDRzpDT0c6Q09OR086Qm91ZW56YTpMb3VkaW1hCiszOkNHOkNPRzpDT05HTzpCb3VlbnphOk1hZGluZ291Cis0OkNHOkNPRzpDT05HTzpCb3VlbnphOk1mb3VhdGkKKzU6Q0c6Q09HOkNPTkdPOkJvdWVuemE6TW91eW9uZHppCis2OkNHOkNPRzpDT05HTzpCb3VlbnphOk5rYXlpIERpc3RyaWN0CisxOkNHOkNPRzpDT05HTzpMZWtvdW1vdTpCYW1iYW1hCisyOkNHOkNPRzpDT05HTzpMZWtvdW1vdTpLb21vbm8KKzM6Q0c6Q09HOkNPTkdPOkxla291bW91OlNpYml0aQorNDpDRzpDT0c6Q09OR086TGVrb3Vtb3U6WmFuYWdhCisxOkNHOkNPRzpDT05HTzpMaWtvdWFsYTpEb25nb3UKKzI6Q0c6Q09HOkNPTkdPOkxpa291YWxhOkVwZW5hCiszOkNHOkNPRzpDT05HTzpMaWtvdWFsYTpJbXBmb25kbworMTpDRzpDT0c6Q09OR086U2FuZ2hhOk91ZXNzbworMjpDRzpDT0c6Q09OR086U2FuZ2hhOlNlbWJlCiszOkNHOkNPRzpDT05HTzpTYW5naGE6U291YW5rZQorMTpDRzpDT0c6Q09OR086Q3V2ZXR0ZTpCb3VuZGppCisyOkNHOkNPRzpDT05HTzpDdXZldHRlOkV3bworMzpDRzpDT0c6Q09OR086Q3V2ZXR0ZTpLZWxsZQorNDpDRzpDT0c6Q09OR086Q3V2ZXR0ZTpMb3VrZWxhCis1OkNHOkNPRzpDT05HTzpDdXZldHRlOk1ha291YQorNjpDRzpDT0c6Q09OR086Q3V2ZXR0ZTpNYm9tbworNzpDRzpDT0c6Q09OR086Q3V2ZXR0ZTpNb3NzYWthCis4OkNHOkNPRzpDT05HTzpDdXZldHRlOk9rb3lvCis5OkNHOkNPRzpDT05HTzpDdXZldHRlOk93YW5kbworMTpDRzpDT0c6Q09OR086Tmlhcmk6RGl2ZW5pZQorMjpDRzpDT0c6Q09OR086Tmlhcmk6S2liYW5nb3UKKzM6Q0c6Q09HOkNPTkdPOk5pYXJpOktpbW9uZ28KKzQ6Q0c6Q09HOkNPTkdPOk5pYXJpOkxvdXZha291IChMb3Vib21vKQorNTpDRzpDT0c6Q09OR086Tmlhcmk6TWF5b2tvCis2OkNHOkNPRzpDT05HTzpOaWFyaTpNb3NzZW5kam8KKzE6Q0c6Q09HOkNPTkdPOktvdWlsb3U6S2FrYW1vZWthCisyOkNHOkNPRzpDT05HTzpLb3VpbG91OkxvYW5kamlsaSAoUG9pbnRlIE5vaXJlKQorMzpDRzpDT0c6Q09OR086S291aWxvdTpNYWRpbmdvLUtheWVzCis0OkNHOkNPRzpDT05HTzpLb3VpbG91Ok12b3V0aQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L0NPTC9DT0xfQURNSU4xX0xFWC50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvQ09ML0NPTF9BRE1JTjFfTEVYLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YjNjYmM1Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L0NPTC9DT0xfQURNSU4xX0xFWC50eHQKQEAgLTAsMCArMSwzNCBAQAorMTpDTy1BTUE6Q086QU1BWk9OQVMKKzI6Q08tQU5UOkNPOkFOVElPUVVJQQorMzpDTy1BUkE6Q086QVJBVUNBCis0OkNPLUFUTDpDTzpBVExBTlRJQ08KKzU6Q08tQk9MOkNPOkJPTElWQVIKKzY6Q08tQk9ZOkNPOkJPWUFDQQorNzpDTy1CVUU6Q086QlVFTkFWRU5UVVJBCis4OkNPLUNBTDpDTzpDQUxEQVMKKzk6Q08tQ0FROkNPOkNBUVVFVEEKKzEwOkNPLUNBUzpDTzpDQVNBTkFSRQorMTE6Q08tQ0FVOkNPOkNBVUNBCisxMjpDTy1DRVM6Q086Q0VTQVIKKzEzOkNPLUNITzpDTzpDSE9DTworMTQ6Q08tQ09SOkNPOkNPUkRPQkEKKzE1OkNPLUNVTjpDTzpDVU5ESU5BTUFSQ0EKKzE2OkNPLURDOkNPOkRJU1RSSVRPIENBUElUQUwgREUgQk9HT1QKKzE3OkNPLUxBRzpDTzpHVUFKSVJBCisxODpDTy1HVUE6Q086R1VBTklBCisxOTpDTy1HVVY6Q086R1VBVklBUkUKKzIwOkNPLUhVSTpDTzpIVUlMQQorMjE6Q08tTUFHOkNPOk1BR0RBTEVOQQorMjI6Q08tTUVUOkNPOk1FVEEKKzIzOkNPLU5BUjpDTzpOQVJJTk8KKzI0OkNPLU5TQTpDTzpOT1JURSBERSBTQU5UQU5ERVIKKzI1OkNPLVBVVDpDTzpQVVRVTUFZTworMjY6Q08tUVVJOkNPOlFVSU5ESU8KKzI3OkNPLVJJUzpDTzpSSVNBUkFMREEKKzI4OkNPLVNBUDpDTzpTQU4gQU5EUkVTIFkgUFJPVklERU5DSUEKKzI5OkNPLVNBTjpDTzpTQU5UQU5ERVIKKzMwOkNPLVNVQzpDTzpTVUNSRQorMzE6Q08tVE9MOkNPOlRPTElNQQorMzI6Q08tVkFDOkNPOlZBTExFIERFTCBDQVVDQQorMzM6Q08tVkFVOkNPOlZBVVBFUworMzQ6Q08tVklEOkNPOlZJQ0hBREEKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9DT0wvQ09MX0FETUlOMl9MRVgudHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L0NPTC9DT0xfQURNSU4yX0xFWC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDc4ZTY5ZgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9DT0wvQ09MX0FETUlOMl9MRVgudHh0CkBAIC0wLDAgKzEsMTA4NCBAQAorMTpDTzpDT0w6Q09MT01CSUE6VmF1cGVzOkNBUlVSVQorMjpDTzpDT0w6Q09MT01CSUE6VmF1cGVzOk1JVFUKKzM6Q086Q09MOkNPTE9NQklBOlZhdXBlczpQQUNPQQorNDpDTzpDT0w6Q09MT01CSUE6VmF1cGVzOlBBUFVOQUhVQQorNTpDTzpDT0w6Q09MT01CSUE6VmF1cGVzOlRBUkFJUkEKKzY6Q086Q09MOkNPTE9NQklBOlZhdXBlczpZQVZBUkFURQorMTpDTzpDT0w6Q09MT01CSUE6VG9saW1hOkFMUFVKQVJSQQorMjpDTzpDT0w6Q09MT01CSUE6VG9saW1hOkFMVkFSQURPCiszOkNPOkNPTDpDT0xPTUJJQTpUb2xpbWE6QU1CQUxFTUEKKzQ6Q086Q09MOkNPTE9NQklBOlRvbGltYTpBTlpPQVRFR1VJCis1OkNPOkNPTDpDT0xPTUJJQTpUb2xpbWE6QVJNRVJPIChHVUFZQUJBTCkKKzY6Q086Q09MOkNPTE9NQklBOlRvbGltYTpBVEFDTworNzpDTzpDT0w6Q09MT01CSUE6VG9saW1hOkNBSkFNQVJDQQorODpDTzpDT0w6Q09MT01CSUE6VG9saW1hOkNBUk1FTiBERSBBUElDQUxBCis5OkNPOkNPTDpDT0xPTUJJQTpUb2xpbWE6Q0FTQUJJQU5DQQorMTA6Q086Q09MOkNPTE9NQklBOlRvbGltYTpDSEFQQVJSQUwKKzExOkNPOkNPTDpDT0xPTUJJQTpUb2xpbWE6Q09FTExPCisxMjpDTzpDT0w6Q09MT01CSUE6VG9saW1hOkNPWUFJTUEKKzEzOkNPOkNPTDpDT0xPTUJJQTpUb2xpbWE6Q1VOREFZCisxNDpDTzpDT0w6Q09MT01CSUE6VG9saW1hOkRPTE9SRVMKKzE1OkNPOkNPTDpDT0xPTUJJQTpUb2xpbWE6RVNQSU5BTAorMTY6Q086Q09MOkNPTE9NQklBOlRvbGltYTpGQUxBTgorMTc6Q086Q09MOkNPTE9NQklBOlRvbGltYTpGTEFOREVTCisxODpDTzpDT0w6Q09MT01CSUE6VG9saW1hOkZSRVNOTworMTk6Q086Q09MOkNPTE9NQklBOlRvbGltYTpHVUFNTworMjA6Q086Q09MOkNPTE9NQklBOlRvbGltYTpIRVJWRU8KKzIxOkNPOkNPTDpDT0xPTUJJQTpUb2xpbWE6SE9OREEKKzIyOkNPOkNPTDpDT0xPTUJJQTpUb2xpbWE6SUJBR1VFCisyMzpDTzpDT0w6Q09MT01CSUE6VG9saW1hOklDT05PTlpPCisyNDpDTzpDT0w6Q09MT01CSUE6VG9saW1hOkxFUklEQQorMjU6Q086Q09MOkNPTE9NQklBOlRvbGltYTpMSUJBTk8KKzI2OkNPOkNPTDpDT0xPTUJJQTpUb2xpbWE6TUFSSVFVSVRBCisyNzpDTzpDT0w6Q09MT01CSUE6VG9saW1hOk1FTEdBUgorMjg6Q086Q09MOkNPTE9NQklBOlRvbGltYTpNVVJJTExPCisyOTpDTzpDT0w6Q09MT01CSUE6VG9saW1hOk5BVEFHQUlNQQorMzA6Q086Q09MOkNPTE9NQklBOlRvbGltYTpPUlRFR0EKKzMxOkNPOkNPTDpDT0xPTUJJQTpUb2xpbWE6UElFRFJBUworMzI6Q086Q09MOkNPTE9NQklBOlRvbGltYTpQTEFOQURBUworMzM6Q086Q09MOkNPTE9NQklBOlRvbGltYTpQUkFETworMzQ6Q086Q09MOkNPTE9NQklBOlRvbGltYTpQVVJJRklDQUNJT04KKzM1OkNPOkNPTDpDT0xPTUJJQTpUb2xpbWE6UklPQkxBTkNPCiszNjpDTzpDT0w6Q09MT01CSUE6VG9saW1hOlJPTkNFU1ZBTExFUworMzc6Q086Q09MOkNPTE9NQklBOlRvbGltYTpST1ZJUkEKKzM4OkNPOkNPTDpDT0xPTUJJQTpUb2xpbWE6U0FMREE/QQorMzk6Q086Q09MOkNPTE9NQklBOlRvbGltYTpTQU4gQU5UT05JTworNDA6Q086Q09MOkNPTE9NQklBOlRvbGltYTpTQU4gTFVJUworNDE6Q086Q09MOkNPTE9NQklBOlRvbGltYTpTQU5UQSBJU0FCRUwKKzQyOkNPOkNPTDpDT0xPTUJJQTpUb2xpbWE6U1VBUkVaCis0MzpDTzpDT0w6Q09MT01CSUE6VG9saW1hOlZBTExFIERFIFNBTiBKVUFOCis0NDpDTzpDT0w6Q09MT01CSUE6VG9saW1hOlZFTkFESUxMTworNDU6Q086Q09MOkNPTE9NQklBOlRvbGltYTpWSUxMQSBIRVJNT1NBCis0NjpDTzpDT0w6Q09MT01CSUE6VG9saW1hOlZJTExBUlJJQ0EKKzE6Q086Q09MOkNPTE9NQklBOkNhc2FuYXJlOkFHVUFaVUwKKzI6Q086Q09MOkNPTE9NQklBOkNhc2FuYXJlOkNIQU1FWkEKKzM6Q086Q09MOkNPTE9NQklBOkNhc2FuYXJlOkhBVE8gQ09ST1pBTAorNDpDTzpDT0w6Q09MT01CSUE6Q2FzYW5hcmU6TEEgU0FMSU5BCis1OkNPOkNPTDpDT0xPTUJJQTpDYXNhbmFyZTpNQU5JCis2OkNPOkNPTDpDT0xPTUJJQTpDYXNhbmFyZTpNT05URVJSRVkKKzc6Q086Q09MOkNPTE9NQklBOkNhc2FuYXJlOk5VTkNISUEKKzg6Q086Q09MOkNPTE9NQklBOkNhc2FuYXJlOk9ST0NVRQorOTpDTzpDT0w6Q09MT01CSUE6Q2FzYW5hcmU6UEFaIERFIEFSSVBPUk8KKzEwOkNPOkNPTDpDT0xPTUJJQTpDYXNhbmFyZTpQT1JFCisxMTpDTzpDT0w6Q09MT01CSUE6Q2FzYW5hcmU6UkVDRVRPUgorMTI6Q086Q09MOkNPTE9NQklBOkNhc2FuYXJlOlNBQkFOQUxBUkdBCisxMzpDTzpDT0w6Q09MT01CSUE6Q2FzYW5hcmU6U0FDQU1BCisxNDpDTzpDT0w6Q09MT01CSUE6Q2FzYW5hcmU6U0FOIExVSVMgREUgUEFMRU5RVUUKKzE1OkNPOkNPTDpDT0xPTUJJQTpDYXNhbmFyZTpUQU1BUkEKKzE2OkNPOkNPTDpDT0xPTUJJQTpDYXNhbmFyZTpUQVVSQU1FTkEKKzE3OkNPOkNPTDpDT0xPTUJJQTpDYXNhbmFyZTpUUklOSURBRAorMTg6Q086Q09MOkNPTE9NQklBOkNhc2FuYXJlOlZJTExBTlVFVkEKKzE5OkNPOkNPTDpDT0xPTUJJQTpDYXNhbmFyZTpZT1BBTAorMTpDTzpDT0w6Q09MT01CSUE6Q3VuZGluYW1hcmNhOkFHVUEgREUgRElPUworMjpDTzpDT0w6Q09MT01CSUE6Q3VuZGluYW1hcmNhOkFMQkFOCiszOkNPOkNPTDpDT0xPTUJJQTpDdW5kaW5hbWFyY2E6QU5BUE9JTUEKKzQ6Q086Q09MOkNPTE9NQklBOkN1bmRpbmFtYXJjYTpBTk9MQUlNQQorNTpDTzpDT0w6Q09MT01CSUE6Q3VuZGluYW1hcmNhOkFQVUxPIChSQUZBRUwgUkVZRVMpCis2OkNPOkNPTDpDT0xPTUJJQTpDdW5kaW5hbWFyY2E6QVJCRUxBRVoKKzc6Q086Q09MOkNPTE9NQklBOkN1bmRpbmFtYXJjYTpCRUxUUkFOCis4OkNPOkNPTDpDT0xPTUJJQTpDdW5kaW5hbWFyY2E6QklUVUlNQQorOTpDTzpDT0w6Q09MT01CSUE6Q3VuZGluYW1hcmNhOkJPSkFDQQorMTA6Q086Q09MOkNPTE9NQklBOkN1bmRpbmFtYXJjYTpDQUJSRVJBCisxMTpDTzpDT0w6Q09MT01CSUE6Q3VuZGluYW1hcmNhOkNBQ0hJUEFZCisxMjpDTzpDT0w6Q09MT01CSUE6Q3VuZGluYW1hcmNhOkNBSklDQQorMTM6Q086Q09MOkNPTE9NQklBOkN1bmRpbmFtYXJjYTpDQVBBUlJBUEkKKzE0OkNPOkNPTDpDT0xPTUJJQTpDdW5kaW5hbWFyY2E6Q0FRVUVaQQorMTU6Q086Q09MOkNPTE9NQklBOkN1bmRpbmFtYXJjYTpDQVJNRU4gREUgQ0FSVVBBCisxNjpDTzpDT0w6Q09MT01CSUE6Q3VuZGluYW1hcmNhOkNIQUdVQU5JCisxNzpDTzpDT0w6Q09MT01CSUE6Q3VuZGluYW1hcmNhOkNISUEKKzE4OkNPOkNPTDpDT0xPTUJJQTpDdW5kaW5hbWFyY2E6Q0hJUEFRVUUKKzE5OkNPOkNPTDpDT0xPTUJJQTpDdW5kaW5hbWFyY2E6Q0hPQUNISQorMjA6Q086Q09MOkNPTE9NQklBOkN1bmRpbmFtYXJjYTpDSE9DT05UQQorMjE6Q086Q09MOkNPTE9NQklBOkN1bmRpbmFtYXJjYTpDT0dVQQorMjI6Q086Q09MOkNPTE9NQklBOkN1bmRpbmFtYXJjYTpDT1RBCisyMzpDTzpDT0w6Q09MT01CSUE6Q3VuZGluYW1hcmNhOkNVQ1VOVUJBCisyNDpDTzpDT0w6Q09MT01CSUE6Q3VuZGluYW1hcmNhOkVMIENPTEVHSU8KKzI1OkNPOkNPTDpDT0xPTUJJQTpDdW5kaW5hbWFyY2E6RUwgUEU/T04KKzI2OkNPOkNPTDpDT0xPTUJJQTpDdW5kaW5hbWFyY2E6RkFDQVRBVElWQQorMjc6Q086Q09MOkNPTE9NQklBOkN1bmRpbmFtYXJjYTpGT01FUVVFCisyODpDTzpDT0w6Q09MT01CSUE6Q3VuZGluYW1hcmNhOkZPU0NBCisyOTpDTzpDT0w6Q09MT01CSUE6Q3VuZGluYW1hcmNhOkZVTlpBCiszMDpDTzpDT0w6Q09MT01CSUE6Q3VuZGluYW1hcmNhOkZVUVVFTkUKKzMxOkNPOkNPTDpDT0xPTUJJQTpDdW5kaW5hbWFyY2E6RlVTQUdBU1VHQQorMzI6Q086Q09MOkNPTE9NQklBOkN1bmRpbmFtYXJjYTpHQUNIQUxBCiszMzpDTzpDT0w6Q09MT01CSUE6Q3VuZGluYW1hcmNhOkdBQ0hBTkNJUEEKKzM0OkNPOkNPTDpDT0xPTUJJQTpDdW5kaW5hbWFyY2E6R0FDSEVUQQorMzU6Q086Q09MOkNPTE9NQklBOkN1bmRpbmFtYXJjYTpHQU1BCiszNjpDTzpDT0w6Q09MT01CSUE6Q3VuZGluYW1hcmNhOkdJUkFSRE9UCiszNzpDTzpDT0w6Q09MT01CSUE6Q3VuZGluYW1hcmNhOkdVQUNIRVRBCiszODpDTzpDT0w6Q09MT01CSUE6Q3VuZGluYW1hcmNhOkdVQURVQVMKKzM5OkNPOkNPTDpDT0xPTUJJQTpDdW5kaW5hbWFyY2E6R1VBU0NBCis0MDpDTzpDT0w6Q09MT01CSUE6Q3VuZGluYW1hcmNhOkdVQVRBUVVJCis0MTpDTzpDT0w6Q09MT01CSUE6Q3VuZGluYW1hcmNhOkdVQVRBVklUQQorNDI6Q086Q09MOkNPTE9NQklBOkN1bmRpbmFtYXJjYTpHVUFZQUJBTCBERSBTSVFVSU1BCis0MzpDTzpDT0w6Q09MT01CSUE6Q3VuZGluYW1hcmNhOkdVQVlBQkVUQUwKKzQ0OkNPOkNPTDpDT0xPTUJJQTpDdW5kaW5hbWFyY2E6R1VUSUVSUkVaCis0NTpDTzpDT0w6Q09MT01CSUE6Q3VuZGluYW1hcmNhOkpFUlVTQUxFTgorNDY6Q086Q09MOkNPTE9NQklBOkN1bmRpbmFtYXJjYTpKVU5JTgorNDc6Q086Q09MOkNPTE9NQklBOkN1bmRpbmFtYXJjYTpMQSBDQUxFUkEKKzQ4OkNPOkNPTDpDT0xPTUJJQTpDdW5kaW5hbWFyY2E6TEEgTUVTQQorNDk6Q086Q09MOkNPTE9NQklBOkN1bmRpbmFtYXJjYTpMQSBQQUxNQQorNTA6Q086Q09MOkNPTE9NQklBOkN1bmRpbmFtYXJjYTpMQSBQRT9BCis1MTpDTzpDT0w6Q09MT01CSUE6Q3VuZGluYW1hcmNhOkxBIFZFR0EKKzUyOkNPOkNPTDpDT0xPTUJJQTpDdW5kaW5hbWFyY2E6TEVOR1VBWkFRVUUKKzUzOkNPOkNPTDpDT0xPTUJJQTpDdW5kaW5hbWFyY2E6TUFDSEVUQQorNTQ6Q086Q09MOkNPTE9NQklBOkN1bmRpbmFtYXJjYTpNQURSSUQKKzU1OkNPOkNPTDpDT0xPTUJJQTpDdW5kaW5hbWFyY2E6TUFOVEEKKzU2OkNPOkNPTDpDT0xPTUJJQTpDdW5kaW5hbWFyY2E6TUVESU5BCis1NzpDTzpDT0w6Q09MT01CSUE6Q3VuZGluYW1hcmNhOk1PU1FVRVJBCis1ODpDTzpDT0w6Q09MT01CSUE6Q3VuZGluYW1hcmNhOk5BUkk/TworNTk6Q086Q09MOkNPTE9NQklBOkN1bmRpbmFtYXJjYTpORU1PQ09OCis2MDpDTzpDT0w6Q09MT01CSUE6Q3VuZGluYW1hcmNhOk5JTE8KKzYxOkNPOkNPTDpDT0xPTUJJQTpDdW5kaW5hbWFyY2E6TklNQUlNQQorNjI6Q086Q09MOkNPTE9NQklBOkN1bmRpbmFtYXJjYTpOT0NBSU1BCis2MzpDTzpDT0w6Q09MT01CSUE6Q3VuZGluYW1hcmNhOlBBQ0hPCis2NDpDTzpDT0w6Q09MT01CSUE6Q3VuZGluYW1hcmNhOlBBSU1FCis2NTpDTzpDT0w6Q09MT01CSUE6Q3VuZGluYW1hcmNhOlBBTkRJCis2NjpDTzpDT0w6Q09MT01CSUE6Q3VuZGluYW1hcmNhOlBBUkFURUJVRU5PCis2NzpDTzpDT0w6Q09MT01CSUE6Q3VuZGluYW1hcmNhOlBBU0NBCis2ODpDTzpDT0w6Q09MT01CSUE6Q3VuZGluYW1hcmNhOlBVRVJUTyBTQUxHQVIKKzY5OkNPOkNPTDpDT0xPTUJJQTpDdW5kaW5hbWFyY2E6UFVMSQorNzA6Q086Q09MOkNPTE9NQklBOkN1bmRpbmFtYXJjYTpRVUVCUkFEQU5FR1JBCis3MTpDTzpDT0w6Q09MT01CSUE6Q3VuZGluYW1hcmNhOlFVRVRBTUUKKzcyOkNPOkNPTDpDT0xPTUJJQTpDdW5kaW5hbWFyY2E6UVVJUElMRQorNzM6Q086Q09MOkNPTE9NQklBOkN1bmRpbmFtYXJjYTpSSUNBVVJURQorNzQ6Q086Q09MOkNPTE9NQklBOkN1bmRpbmFtYXJjYTpTQU4gQU5UT05JTyBERUwgVEVRVUVOREFNCis3NTpDTzpDT0w6Q09MT01CSUE6Q3VuZGluYW1hcmNhOlNBTiBCRVJOQVJETworNzY6Q086Q09MOkNPTE9NQklBOkN1bmRpbmFtYXJjYTpTQU4gQ0FZRVRBTk8KKzc3OkNPOkNPTDpDT0xPTUJJQTpDdW5kaW5hbWFyY2E6U0FOIEZSQU5DSVNDTworNzg6Q086Q09MOkNPTE9NQklBOkN1bmRpbmFtYXJjYTpTQU4gSlVBTiBERSBSSU8gU0VDTworNzk6Q086Q09MOkNPTE9NQklBOkN1bmRpbmFtYXJjYTpTQU5UQUZFIERFIEJPR09UQSBELkMuCis4MDpDTzpDT0w6Q09MT01CSUE6Q3VuZGluYW1hcmNhOlNBU0FJTUEKKzgxOkNPOkNPTDpDT0xPTUJJQTpDdW5kaW5hbWFyY2E6U0VTUVVJTEUKKzgyOkNPOkNPTDpDT0xPTUJJQTpDdW5kaW5hbWFyY2E6U0lCQVRFCis4MzpDTzpDT0w6Q09MT01CSUE6Q3VuZGluYW1hcmNhOlNJTFZBTklBCis4NDpDTzpDT0w6Q09MT01CSUE6Q3VuZGluYW1hcmNhOlNJTUlKQUNBCis4NTpDTzpDT0w6Q09MT01CSUE6Q3VuZGluYW1hcmNhOlNPQUNIQQorODY6Q086Q09MOkNPTE9NQklBOkN1bmRpbmFtYXJjYTpTT1BPCis4NzpDTzpDT0w6Q09MT01CSUE6Q3VuZGluYW1hcmNhOlNVQkFDSE9RVUUKKzg4OkNPOkNPTDpDT0xPTUJJQTpDdW5kaW5hbWFyY2E6U1VFU0NBCis4OTpDTzpDT0w6Q09MT01CSUE6Q3VuZGluYW1hcmNhOlNVUEFUQQorOTA6Q086Q09MOkNPTE9NQklBOkN1bmRpbmFtYXJjYTpTVVNBCis5MTpDTzpDT0w6Q09MT01CSUE6Q3VuZGluYW1hcmNhOlNVVEFUQVVTQQorOTI6Q086Q09MOkNPTE9NQklBOkN1bmRpbmFtYXJjYTpUQUJJTworOTM6Q086Q09MOkNPTE9NQklBOkN1bmRpbmFtYXJjYTpUQVVTQQorOTQ6Q086Q09MOkNPTE9NQklBOkN1bmRpbmFtYXJjYTpURU5BCis5NTpDTzpDT0w6Q09MT01CSUE6Q3VuZGluYW1hcmNhOlRFTkpPCis5NjpDTzpDT0w6Q09MT01CSUE6Q3VuZGluYW1hcmNhOlRJQkFDVVkKKzk3OkNPOkNPTDpDT0xPTUJJQTpDdW5kaW5hbWFyY2E6VElCSVJJVEEKKzk4OkNPOkNPTDpDT0xPTUJJQTpDdW5kaW5hbWFyY2E6VE9DQUlNQQorOTk6Q086Q09MOkNPTE9NQklBOkN1bmRpbmFtYXJjYTpUT0NBTkNJUEEKKzEwMDpDTzpDT0w6Q09MT01CSUE6Q3VuZGluYW1hcmNhOlRPUEFJUEkKKzEwMTpDTzpDT0w6Q09MT01CSUE6Q3VuZGluYW1hcmNhOlVCQUxBCisxMDI6Q086Q09MOkNPTE9NQklBOkN1bmRpbmFtYXJjYTpVQkFRVUUKKzEwMzpDTzpDT0w6Q09MT01CSUE6Q3VuZGluYW1hcmNhOlVCQVRFCisxMDQ6Q086Q09MOkNPTE9NQklBOkN1bmRpbmFtYXJjYTpVTkUKKzEwNTpDTzpDT0w6Q09MT01CSUE6Q3VuZGluYW1hcmNhOlVUSUNBCisxMDY6Q086Q09MOkNPTE9NQklBOkN1bmRpbmFtYXJjYTpWRU5FQ0lBIChPU1BJTkEgUEVSRVopCisxMDc6Q086Q09MOkNPTE9NQklBOkN1bmRpbmFtYXJjYTpWRVJHQVJBCisxMDg6Q086Q09MOkNPTE9NQklBOkN1bmRpbmFtYXJjYTpWSUFOSQorMTA5OkNPOkNPTDpDT0xPTUJJQTpDdW5kaW5hbWFyY2E6VklMTEFHT01FWgorMTEwOkNPOkNPTDpDT0xPTUJJQTpDdW5kaW5hbWFyY2E6VklMTEFQSU5aT04KKzExMTpDTzpDT0w6Q09MT01CSUE6Q3VuZGluYW1hcmNhOlZJTExFVEEKKzExMjpDTzpDT0w6Q09MT01CSUE6Q3VuZGluYW1hcmNhOlZJT1RBCisxMTM6Q086Q09MOkNPTE9NQklBOkN1bmRpbmFtYXJjYTpZQUNPUEkKKzExNDpDTzpDT0w6Q09MT01CSUE6Q3VuZGluYW1hcmNhOlpJUEFDT04KKzExNTpDTzpDT0w6Q09MT01CSUE6Q3VuZGluYW1hcmNhOlpJUEFRVUlSQQorMTpDTzpDT0w6Q09MT01CSUE6Q2FxdWV0YTpBTEJBTklBCisyOkNPOkNPTDpDT0xPTUJJQTpDYXF1ZXRhOkJFTEVOIERFIExPUyBBTkRBUVVJRVMKKzM6Q086Q09MOkNPTE9NQklBOkNhcXVldGE6Q0FSVEFHRU5BIERFTCBDSEFJUkEKKzQ6Q086Q09MOkNPTE9NQklBOkNhcXVldGE6Q1VSSUxMTworNTpDTzpDT0w6Q09MT01CSUE6Q2FxdWV0YTpFTCBET05DRUxMTworNjpDTzpDT0w6Q09MT01CSUE6Q2FxdWV0YTpFTCBQQVVKSUwKKzc6Q086Q09MOkNPTE9NQklBOkNhcXVldGE6RkxPUkVOQ0lBCis4OkNPOkNPTDpDT0xPTUJJQTpDYXF1ZXRhOkxBIE1PTlRBTklUQQorOTpDTzpDT0w6Q09MT01CSUE6Q2FxdWV0YTpNSUxBTgorMTA6Q086Q09MOkNPTE9NQklBOkNhcXVldGE6TU9SRUxJQQorMTE6Q086Q09MOkNPTE9NQklBOkNhcXVldGE6UFVFUlRPIFJJQ08KKzEyOkNPOkNPTDpDT0xPTUJJQTpDYXF1ZXRhOlNBTiBKT1NFIERFIEZSQUdVQQorMTM6Q086Q09MOkNPTE9NQklBOkNhcXVldGE6U0FOIFZJQ0VOVEUgREVMIENBR1VBTgorMTQ6Q086Q09MOkNPTE9NQklBOkNhcXVldGE6U09MQU5PCisxNTpDTzpDT0w6Q09MT01CSUE6Q2FxdWV0YTpWQUxQQVJBSVNPCisxOkNPOkNPTDpDT0xPTUJJQTpDaG9jbzpBQ0FOREkKKzI6Q086Q09MOkNPTE9NQklBOkNob2NvOkFMVE8gQkFVRE8gKFBJRSBERSBQQVRPKQorMzpDTzpDT0w6Q09MT01CSUE6Q2hvY286QkFHQURPCis0OkNPOkNPTDpDT0xPTUJJQTpDaG9jbzpCQUhJQSBTT0xBTk8gKENJVURBRCBNVVRJCis1OkNPOkNPTDpDT0xPTUJJQTpDaG9jbzpCQUhJQSBTT0xBTk8gKElzLikKKzY6Q086Q09MOkNPTE9NQklBOkNob2NvOkJBSk8gQkFVRE8gKElzLikKKzc6Q086Q09MOkNPTE9NQklBOkNob2NvOkJBSk8gQkFVRE8gKFBJWkFSUk8pCis4OkNPOkNPTDpDT0xPTUJJQTpDaG9jbzpCT0pBWUEgKEJFTExBIFZJU1RBKQorOTpDTzpDT0w6Q09MT01CSUE6Q2hvY286Q0FOVE9OIERFIFNBTiBQQUJMTworMTA6Q086Q09MOkNPTE9NQklBOkNob2NvOkNPTkRPVE8KKzExOkNPOkNPTDpDT0xPTUJJQTpDaG9jbzpFTCBDQVJNRU4KKzEyOkNPOkNPTDpDT0xPTUJJQTpDaG9jbzpJU1RNSU5BCisxMzpDTzpDT0w6Q09MT01CSUE6Q2hvY286SlVSQURPCisxNDpDTzpDT0w6Q09MT01CSUE6Q2hvY286SlVSQURPIChJcy4pCisxNTpDTzpDT0w6Q09MT01CSUE6Q2hvY286TElUT1JBTCBERUwgU0FOIEpVQU4KKzE2OkNPOkNPTDpDT0xPTUJJQTpDaG9jbzpMSVRPUkFMIERFTCBTQU4gSlVBTiAoSXMuCisxNzpDTzpDT0w6Q09MT01CSUE6Q2hvY286TExPUk8KKzE4OkNPOkNPTDpDT0xPTUJJQTpDaG9jbzpOT1ZJVEEKKzE5OkNPOkNPTDpDT0xPTUJJQTpDaG9jbzpOVVFVSQorMjA6Q086Q09MOkNPTE9NQklBOkNob2NvOlFVSUJETworMjE6Q086Q09MOkNPTE9NQklBOkNob2NvOlJJT1NVQ0lPCisyMjpDTzpDT0w6Q09MT01CSUE6Q2hvY286U0FOIEpPU0UgREVMIFBBTE1BUgorMjM6Q086Q09MOkNPTE9NQklBOkNob2NvOlNJUEkKKzI0OkNPOkNPTDpDT0xPTUJJQTpDaG9jbzpUQURPCisyNTpDTzpDT0w6Q09MT01CSUE6Q2hvY286VU5HVUlBCisxOkNPOkNPTDpDT0xPTUJJQTpBcmF1Y2E6QVJBVUNBCisyOkNPOkNPTDpDT0xPTUJJQTpBcmF1Y2E6QVJBVVFVSVRBCiszOkNPOkNPTDpDT0xPTUJJQTpBcmF1Y2E6Q1JBVk8gTk9SVEUKKzQ6Q086Q09MOkNPTE9NQklBOkFyYXVjYTpGT1JUVUwKKzU6Q086Q09MOkNPTE9NQklBOkFyYXVjYTpQVUVSVE8gUk9ORE9OCis2OkNPOkNPTDpDT0xPTUJJQTpBcmF1Y2E6U0FSQVZFTkEKKzc6Q086Q09MOkNPTE9NQklBOkFyYXVjYTpUQU1FCisxOkNPOkNPTDpDT0xPTUJJQTpHdWFqaXJhOkJBUlJBTkNBUworMjpDTzpDT0w6Q09MT01CSUE6R3VhamlyYTpFTCBNT0xJTk8KKzM6Q086Q09MOkNPTE9NQklBOkd1YWppcmE6Rk9OU0VDQQorNDpDTzpDT0w6Q09MT01CSUE6R3VhamlyYTpNQUlDQU8KKzU6Q086Q09MOkNPTE9NQklBOkd1YWppcmE6TUFOQVVSRQorNjpDTzpDT0w6Q09MT01CSUE6R3VhamlyYTpSSU9IQUNIQQorNzpDTzpDT0w6Q09MT01CSUE6R3VhamlyYTpTQU4gSlVBTiBERUwgQ0VTQVIKKzg6Q086Q09MOkNPTE9NQklBOkd1YWppcmE6VVJJQklBCis5OkNPOkNPTDpDT0xPTUJJQTpHdWFqaXJhOlVSVU1JVEEKKzEwOkNPOkNPTDpDT0xPTUJJQTpHdWFqaXJhOlZJTExBTlVFVkEKKzE6Q086Q09MOkNPTE9NQklBOkNhdWNhOkFMTUFHVUVSCisyOkNPOkNPTDpDT0xPTUJJQTpDYXVjYTpBUkdFTElBCiszOkNPOkNPTDpDT0xPTUJJQTpDYXVjYTpCQUxCT0EKKzQ6Q086Q09MOkNPTE9NQklBOkNhdWNhOkJPTElWQVIKKzU6Q086Q09MOkNPTE9NQklBOkNhdWNhOkJVRU5PUyBBSVJFUworNjpDTzpDT0w6Q09MT01CSUE6Q2F1Y2E6Q0FKSUJJTworNzpDTzpDT0w6Q09MT01CSUE6Q2F1Y2E6Q0FMRE9OTworODpDTzpDT0w6Q09MT01CSUE6Q2F1Y2E6Q0FMT1RPCis5OkNPOkNPTDpDT0xPTUJJQTpDYXVjYTpDT1JJTlRPCisxMDpDTzpDT0w6Q09MT01CSUE6Q2F1Y2E6RUwgVEFNQk8KKzExOkNPOkNPTDpDT0xPTUJJQTpDYXVjYTpGTE9SRU5DSUEKKzEyOkNPOkNPTDpDT0xPTUJJQTpDYXVjYTpHVUFQSQorMTM6Q086Q09MOkNPTE9NQklBOkNhdWNhOkdVQVBJIChJcy4pCisxNDpDTzpDT0w6Q09MT01CSUE6Q2F1Y2E6SU5aQQorMTU6Q086Q09MOkNPTE9NQklBOkNhdWNhOklzbGEKKzE2OkNPOkNPTDpDT0xPTUJJQTpDYXVjYTpKQU1CQUxPCisxNzpDTzpDT0w6Q09MT01CSUE6Q2F1Y2E6TEEgU0lFUlJBCisxODpDTzpDT0w6Q09MT01CSUE6Q2F1Y2E6TEEgVkVHQQorMTk6Q086Q09MOkNPTE9NQklBOkNhdWNhOkxPUEVaIERFIE1JQ0FZCisyMDpDTzpDT0w6Q09MT01CSUE6Q2F1Y2E6TUVSQ0FERVJFUworMjE6Q086Q09MOkNPTE9NQklBOkNhdWNhOk1JUkFOREEKKzIyOkNPOkNPTDpDT0xPTUJJQTpDYXVjYTpNT1JBTEVTCisyMzpDTzpDT0w6Q09MT01CSUE6Q2F1Y2E6UEFESUxMQQorMjQ6Q086Q09MOkNPTE9NQklBOkNhdWNhOlBBRVoKKzI1OkNPOkNPTDpDT0xPTUJJQTpDYXVjYTpQQVRJQSAoRUwgQk9SRE8pCisyNjpDTzpDT0w6Q09MT01CSUE6Q2F1Y2E6UElFTkRBTU8KKzI3OkNPOkNPTDpDT0xPTUJJQTpDYXVjYTpQT1BBWUFOCisyODpDTzpDT0w6Q09MT01CSUE6Q2F1Y2E6UFVFUlRPIFRFSkFEQQorMjk6Q086Q09MOkNPTE9NQklBOkNhdWNhOlBVUkFDRQorMzA6Q086Q09MOkNPTE9NQklBOkNhdWNhOlJPU0FTCiszMTpDTzpDT0w6Q09MT01CSUE6Q2F1Y2E6U0FOIFNFQkFTVElBTgorMzI6Q086Q09MOkNPTE9NQklBOkNhdWNhOlNBTlRBIFJPU0EKKzMzOkNPOkNPTDpDT0xPTUJJQTpDYXVjYTpTQU5UQU5ERVIgREUgUVVJTElDSEFPCiszNDpDTzpDT0w6Q09MT01CSUE6Q2F1Y2E6U0lMVklBCiszNTpDTzpDT0w6Q09MT01CSUE6Q2F1Y2E6U09UQVJBCiszNjpDTzpDT0w6Q09MT01CSUE6Q2F1Y2E6U1VBUkVaCiszNzpDTzpDT0w6Q09MT01CSUE6Q2F1Y2E6VElNQklPCiszODpDTzpDT0w6Q09MT01CSUE6Q2F1Y2E6VElNQklRVUkKKzM5OkNPOkNPTDpDT0xPTUJJQTpDYXVjYTpUSU1CSVFVSSAoSXMuKQorNDA6Q086Q09MOkNPTE9NQklBOkNhdWNhOlRPUklCSU8KKzQxOkNPOkNPTDpDT0xPTUJJQTpDYXVjYTpUT1RPUk8KKzE6Q086Q09MOkNPTE9NQklBOk5hcmlubzpBTEJBTgorMjpDTzpDT0w6Q09MT01CSUE6TmFyaW5vOkFMREFOQQorMzpDTzpDT0w6Q09MT01CSUE6TmFyaW5vOkFOQ1VZQQorNDpDTzpDT0w6Q09MT01CSUE6TmFyaW5vOkFSQk9MRURBCis1OkNPOkNPTDpDT0xPTUJJQTpOYXJpbm86QkFSQkFDT0FTCis2OkNPOkNPTDpDT0xPTUJJQTpOYXJpbm86QkVMRU4KKzc6Q086Q09MOkNPTE9NQklBOk5hcmlubzpCVUVTQUNPCis4OkNPOkNPTDpDT0xPTUJJQTpOYXJpbm86Q0hBQ0hBR1VJCis5OkNPOkNPTDpDT0xPTUJJQTpOYXJpbm86Q09MT04KKzEwOkNPOkNPTDpDT0xPTUJJQTpOYXJpbm86Q09OU0FDQQorMTE6Q086Q09MOkNPTE9NQklBOk5hcmlubzpDT05UQURFUk8KKzEyOkNPOkNPTDpDT0xPTUJJQTpOYXJpbm86Q09SRE9CQQorMTM6Q086Q09MOkNPTE9NQklBOk5hcmlubzpDVUFTUFVECisxNDpDTzpDT0w6Q09MT01CSUE6TmFyaW5vOkNVTUJBTAorMTU6Q086Q09MOkNPTE9NQklBOk5hcmlubzpDVU1CSVRBUkEKKzE2OkNPOkNPTDpDT0xPTUJJQTpOYXJpbm86RUwgQ0hBUkNPCisxNzpDTzpDT0w6Q09MT01CSUE6TmFyaW5vOkVMIENIQVJDTyAoSXMuKQorMTg6Q086Q09MOkNPTE9NQklBOk5hcmlubzpFTCBST1NBUklPCisxOTpDTzpDT0w6Q09MT01CSUE6TmFyaW5vOkVMIFRBQkxPTgorMjA6Q086Q09MOkNPTE9NQklBOk5hcmlubzpFTCBUQU1CTworMjE6Q086Q09MOkNPTE9NQklBOk5hcmlubzpGUkFOQ0lTQ08gUElaQVJSTworMjI6Q086Q09MOkNPTE9NQklBOk5hcmlubzpGVU5FUworMjM6Q086Q09MOkNPTE9NQklBOk5hcmlubzpHVUFDSFVDQUwKKzI0OkNPOkNPTDpDT0xPTUJJQTpOYXJpbm86R1VBSVRBUklMTEEKKzI1OkNPOkNPTDpDT0xPTUJJQTpOYXJpbm86R1VBTE1BVEFOCisyNjpDTzpDT0w6Q09MT01CSUE6TmFyaW5vOklMRVMKKzI3OkNPOkNPTDpDT0xPTUJJQTpOYXJpbm86SU1VRVMKKzI4OkNPOkNPTDpDT0xPTUJJQTpOYXJpbm86SVBJQUxFUworMjk6Q086Q09MOkNPTE9NQklBOk5hcmlubzpMQSBDUlVaCiszMDpDTzpDT0w6Q09MT01CSUE6TmFyaW5vOkxBIEZMT1JJREEKKzMxOkNPOkNPTDpDT0xPTUJJQTpOYXJpbm86TEEgTExBTkFEQQorMzI6Q086Q09MOkNPTE9NQklBOk5hcmlubzpMQSBUT0xBCiszMzpDTzpDT0w6Q09MT01CSUE6TmFyaW5vOkxBIFVOSU9OCiszNDpDTzpDT0w6Q09MT01CSUE6TmFyaW5vOkxFSVZBCiszNTpDTzpDT0w6Q09MT01CSUE6TmFyaW5vOkxJTkFSRVMKKzM2OkNPOkNPTDpDT0xPTUJJQTpOYXJpbm86TE9TIEFOREVTCiszNzpDTzpDT0w6Q09MT01CSUE6TmFyaW5vOk1BR1VJCiszODpDTzpDT0w6Q09MT01CSUE6TmFyaW5vOk1BTExBTUEKKzM5OkNPOkNPTDpDT0xPTUJJQTpOYXJpbm86TU9TUVVFUkEKKzQwOkNPOkNPTDpDT0xPTUJJQTpOYXJpbm86TU9TUVVFUkEgKElzLikKKzQxOkNPOkNPTDpDT0xPTUJJQTpOYXJpbm86T0xBWUEgSEVSUkVSQQorNDI6Q086Q09MOkNPTE9NQklBOk5hcmlubzpPU1BJTkEKKzQzOkNPOkNPTDpDT0xPTUJJQTpOYXJpbm86UEFTVE8KKzQ0OkNPOkNPTDpDT0xPTUJJQTpOYXJpbm86UE9MSUNBUlBBCis0NTpDTzpDT0w6Q09MT01CSUE6TmFyaW5vOlBPVE9TSQorNDY6Q086Q09MOkNPTE9NQklBOk5hcmlubzpQUk9WSURFTkNJQQorNDc6Q086Q09MOkNPTE9NQklBOk5hcmlubzpQVUVSUkVTCis0ODpDTzpDT0w6Q09MT01CSUE6TmFyaW5vOlBVUElBTEVTCis0OTpDTzpDT0w6Q09MT01CSUE6TmFyaW5vOlJJQ0FVUlRFCis1MDpDTzpDT0w6Q09MT01CSUE6TmFyaW5vOlJPQkVSVE8gUEFZQU4KKzUxOkNPOkNPTDpDT0xPTUJJQTpOYXJpbm86U0FNQU5JRUdPCis1MjpDTzpDT0w6Q09MT01CSUE6TmFyaW5vOlNBTiBCRVJOQVJETworNTM6Q086Q09MOkNPTE9NQklBOk5hcmlubzpTQU4gTE9SRU5aTworNTQ6Q086Q09MOkNPTE9NQklBOk5hcmlubzpTQU4gUEFCTE8KKzU1OkNPOkNPTDpDT0xPTUJJQTpOYXJpbm86U0FOIFBFRFJPIERFIENBUlRBR08KKzU2OkNPOkNPTDpDT0xPTUJJQTpOYXJpbm86U0FORE9OQQorNTc6Q086Q09MOkNPTE9NQklBOk5hcmlubzpTQU5UQSBCQVJCQVJBCis1ODpDTzpDT0w6Q09MT01CSUE6TmFyaW5vOlNBTlRBIENSVVoKKzU5OkNPOkNPTDpDT0xPTUJJQTpOYXJpbm86U0FQVVlFUworNjA6Q086Q09MOkNPTE9NQklBOk5hcmlubzpUQU1JTkFOR08KKzYxOkNPOkNPTDpDT0xPTUJJQTpOYXJpbm86VEFOR1VBCis2MjpDTzpDT0w6Q09MT01CSUE6TmFyaW5vOlRVTUFDTworNjM6Q086Q09MOkNPTE9NQklBOk5hcmlubzpUVU1BQ08gKElzLikKKzY0OkNPOkNPTDpDT0xPTUJJQTpOYXJpbm86VFVRVUVSUkVTCis2NTpDTzpDT0w6Q09MT01CSUE6TmFyaW5vOllBQ1VBTlFVRVIKKzE6Q086Q09MOkNPTE9NQklBOkJ1ZW5hdmVudHVyYTpJc2xhCisxOkNPOkNPTDpDT0xPTUJJQTpHdWFuaWE6QkFSUkFOQ08gTUlOQVMKKzI6Q086Q09MOkNPTE9NQklBOkd1YW5pYTpDQUNBSFVBTAorMzpDTzpDT0w6Q09MT01CSUE6R3VhbmlhOklOSVJJREEKKzQ6Q086Q09MOkNPTE9NQklBOkd1YW5pYTpMQSBHVUFEQUxVUEUKKzU6Q086Q09MOkNPTE9NQklBOkd1YW5pYTpQQU5BIFBBTkEKKzY6Q086Q09MOkNPTE9NQklBOkd1YW5pYTpQVUVSVE8gQ09MT01CSUEKKzc6Q086Q09MOkNPTE9NQklBOkd1YW5pYTpTQU4gRkVMSVBFCisxOkNPOkNPTDpDT0xPTUJJQTpTYW4gQW5kcmVzIHkgUHJvdmlkZW5jaWE6UFJPVklERU5DSUEKKzI6Q086Q09MOkNPTE9NQklBOlNhbiBBbmRyZXMgeSBQcm92aWRlbmNpYTpTQU4gQU5EUkVTCiszOkNPOkNPTDpDT0xPTUJJQTpTYW4gQW5kcmVzIHkgUHJvdmlkZW5jaWE6U0FOVEEgQ0FUQUxJTkEKKzE6Q086Q09MOkNPTE9NQklBOkh1aWxhOkFDRVZFRE8KKzI6Q086Q09MOkNPTE9NQklBOkh1aWxhOkFHUkFETworMzpDTzpDT0w6Q09MT01CSUE6SHVpbGE6QUlQRQorNDpDTzpDT0w6Q09MT01CSUE6SHVpbGE6QUxHRUNJUkFTCis1OkNPOkNPTDpDT0xPTUJJQTpIdWlsYTpBTFRBTUlSQQorNjpDTzpDT0w6Q09MT01CSUE6SHVpbGE6QkFSQVlBCis3OkNPOkNPTDpDT0xPTUJJQTpIdWlsYTpDQU1QTyBBTEVHUkUKKzg6Q086Q09MOkNPTE9NQklBOkh1aWxhOkNPTE9NQklBCis5OkNPOkNPTDpDT0xPTUJJQTpIdWlsYTpFTElBUworMTA6Q086Q09MOkNPTE9NQklBOkh1aWxhOkdBUlpPTgorMTE6Q086Q09MOkNPTE9NQklBOkh1aWxhOkdJR0FOVEUKKzEyOkNPOkNPTDpDT0xPTUJJQTpIdWlsYTpHVUFEQUxVUEUKKzEzOkNPOkNPTDpDT0xPTUJJQTpIdWlsYTpIT0JPCisxNDpDTzpDT0w6Q09MT01CSUE6SHVpbGE6SVFVSVJBCisxNTpDTzpDT0w6Q09MT01CSUE6SHVpbGE6SVNOT1MKKzE2OkNPOkNPTDpDT0xPTUJJQTpIdWlsYTpMQSBBUkdFTlRJTkEKKzE3OkNPOkNPTDpDT0xPTUJJQTpIdWlsYTpMQSBQTEFUQQorMTg6Q086Q09MOkNPTE9NQklBOkh1aWxhOk5BVEFHQQorMTk6Q086Q09MOkNPTE9NQklBOkh1aWxhOk5FSVZBCisyMDpDTzpDT0w6Q09MT01CSUE6SHVpbGE6T1BPUkFQQQorMjE6Q086Q09MOkNPTE9NQklBOkh1aWxhOlBBSUNPTAorMjI6Q086Q09MOkNPTE9NQklBOkh1aWxhOlBBTEVSTU8KKzIzOkNPOkNPTDpDT0xPTUJJQTpIdWlsYTpQQUxFU1RJTkEKKzI0OkNPOkNPTDpDT0xPTUJJQTpIdWlsYTpQSVRBTAorMjU6Q086Q09MOkNPTE9NQklBOkh1aWxhOlBJVEFMSVRPCisyNjpDTzpDT0w6Q09MT01CSUE6SHVpbGE6UklWRVJBCisyNzpDTzpDT0w6Q09MT01CSUE6SHVpbGE6U0FMQURPIEJMQU5DTworMjg6Q086Q09MOkNPTE9NQklBOkh1aWxhOlNBTiBBR1VTVElOCisyOTpDTzpDT0w6Q09MT01CSUE6SHVpbGE6U0FOVEEgTUFSSUEKKzMwOkNPOkNPTDpDT0xPTUJJQTpIdWlsYTpTVUFaQQorMzE6Q086Q09MOkNPTE9NQklBOkh1aWxhOlRBUlFVSQorMzI6Q086Q09MOkNPTE9NQklBOkh1aWxhOlRFTExPCiszMzpDTzpDT0w6Q09MT01CSUE6SHVpbGE6VEVSVUVMCiszNDpDTzpDT0w6Q09MT01CSUE6SHVpbGE6VEVTQUxJQQorMzU6Q086Q09MOkNPTE9NQklBOkh1aWxhOlRJTUFOQQorMzY6Q086Q09MOkNPTE9NQklBOkh1aWxhOlZJTExBIFZJRUpBCiszNzpDTzpDT0w6Q09MT01CSUE6SHVpbGE6WUFHVUFSQQorMTpDTzpDT0w6Q09MT01CSUE6Tm9ydGUgZGUgU2FudGFuZGVyOkFCUkVHTworMjpDTzpDT0w6Q09MT01CSUE6Tm9ydGUgZGUgU2FudGFuZGVyOkFSQk9MRURBUworMzpDTzpDT0w6Q09MT01CSUE6Tm9ydGUgZGUgU2FudGFuZGVyOkJPQ0hBTEVNQQorNDpDTzpDT0w6Q09MT01CSUE6Tm9ydGUgZGUgU2FudGFuZGVyOkJVQ0FSQVNJQ0EKKzU6Q086Q09MOkNPTE9NQklBOk5vcnRlIGRlIFNhbnRhbmRlcjpDQUNISVJBCis2OkNPOkNPTDpDT0xPTUJJQTpOb3J0ZSBkZSBTYW50YW5kZXI6Q0FDT1RBCis3OkNPOkNPTDpDT0xPTUJJQTpOb3J0ZSBkZSBTYW50YW5kZXI6Q0hJTkFDT1RBCis4OkNPOkNPTDpDT0xPTUJJQTpOb3J0ZSBkZSBTYW50YW5kZXI6Q0hJVEFHQQorOTpDTzpDT0w6Q09MT01CSUE6Tm9ydGUgZGUgU2FudGFuZGVyOkNPTlZFTkNJT04KKzEwOkNPOkNPTDpDT0xPTUJJQTpOb3J0ZSBkZSBTYW50YW5kZXI6Q1VDVVRBCisxMTpDTzpDT0w6Q09MT01CSUE6Tm9ydGUgZGUgU2FudGFuZGVyOkNVQ1VUSUxMQQorMTI6Q086Q09MOkNPTE9NQklBOk5vcnRlIGRlIFNhbnRhbmRlcjpEVVJBTklBCisxMzpDTzpDT0w6Q09MT01CSUE6Tm9ydGUgZGUgU2FudGFuZGVyOkVMIENBUk1FTgorMTQ6Q086Q09MOkNPTE9NQklBOk5vcnRlIGRlIFNhbnRhbmRlcjpFTCBUQVJSQQorMTU6Q086Q09MOkNPTE9NQklBOk5vcnRlIGRlIFNhbnRhbmRlcjpFTCBaVUxJQQorMTY6Q086Q09MOkNPTE9NQklBOk5vcnRlIGRlIFNhbnRhbmRlcjpHUkFNQUxPVEUKKzE3OkNPOkNPTDpDT0xPTUJJQTpOb3J0ZSBkZSBTYW50YW5kZXI6SEFDQVJJCisxODpDTzpDT0w6Q09MT01CSUE6Tm9ydGUgZGUgU2FudGFuZGVyOkhFUlJBTgorMTk6Q086Q09MOkNPTE9NQklBOk5vcnRlIGRlIFNhbnRhbmRlcjpMQSBFU1BFUkFOWkEKKzIwOkNPOkNPTDpDT0xPTUJJQTpOb3J0ZSBkZSBTYW50YW5kZXI6TEEgUExBWUEKKzIxOkNPOkNPTDpDT0xPTUJJQTpOb3J0ZSBkZSBTYW50YW5kZXI6TEFCQVRFQ0EKKzIyOkNPOkNPTDpDT0xPTUJJQTpOb3J0ZSBkZSBTYW50YW5kZXI6TE9TIFBBVElPUworMjM6Q086Q09MOkNPTE9NQklBOk5vcnRlIGRlIFNhbnRhbmRlcjpMT1VSREVTCisyNDpDTzpDT0w6Q09MT01CSUE6Tm9ydGUgZGUgU2FudGFuZGVyOk1VVElTQ1VBCisyNTpDTzpDT0w6Q09MT01CSUE6Tm9ydGUgZGUgU2FudGFuZGVyOk9DQT9BCisyNjpDTzpDT0w6Q09MT01CSUE6Tm9ydGUgZGUgU2FudGFuZGVyOlBBTVBMT05BCisyNzpDTzpDT0w6Q09MT01CSUE6Tm9ydGUgZGUgU2FudGFuZGVyOlBBTVBMT05JVEEKKzI4OkNPOkNPTDpDT0xPTUJJQTpOb3J0ZSBkZSBTYW50YW5kZXI6UFVFUlRPIFNBTlRBTkRFUgorMjk6Q086Q09MOkNPTE9NQklBOk5vcnRlIGRlIFNhbnRhbmRlcjpSQUdPTlZBTElBCiszMDpDTzpDT0w6Q09MT01CSUE6Tm9ydGUgZGUgU2FudGFuZGVyOlNBTEFaQVIKKzMxOkNPOkNPTDpDT0xPTUJJQTpOb3J0ZSBkZSBTYW50YW5kZXI6U0FOIENBTElYVE8KKzMyOkNPOkNPTDpDT0xPTUJJQTpOb3J0ZSBkZSBTYW50YW5kZXI6U0FOIENBWUVUQU5PCiszMzpDTzpDT0w6Q09MT01CSUE6Tm9ydGUgZGUgU2FudGFuZGVyOlNBTlRJQUdPCiszNDpDTzpDT0w6Q09MT01CSUE6Tm9ydGUgZGUgU2FudGFuZGVyOlNBUkRJTkFUQQorMzU6Q086Q09MOkNPTE9NQklBOk5vcnRlIGRlIFNhbnRhbmRlcjpTSUxPUworMzY6Q086Q09MOkNPTE9NQklBOk5vcnRlIGRlIFNhbnRhbmRlcjpURU9SQU1BCiszNzpDTzpDT0w6Q09MT01CSUE6Tm9ydGUgZGUgU2FudGFuZGVyOlRJQlUKKzM4OkNPOkNPTDpDT0xPTUJJQTpOb3J0ZSBkZSBTYW50YW5kZXI6VE9MRURPCiszOTpDTzpDT0w6Q09MT01CSUE6Tm9ydGUgZGUgU2FudGFuZGVyOlZJTExBIENBUk8KKzQwOkNPOkNPTDpDT0xPTUJJQTpOb3J0ZSBkZSBTYW50YW5kZXI6VklMTEEgREVMIFJPU0FSSU8KKzE6Q086Q09MOkNPTE9NQklBOlB1dHVtYXlvOkNPTE9OCisyOkNPOkNPTDpDT0xPTUJJQTpQdXR1bWF5bzpNT0NPQQorMzpDTzpDT0w6Q09MT01CSUE6UHV0dW1heW86T1JJVE8KKzQ6Q086Q09MOkNPTE9NQklBOlB1dHVtYXlvOlBVRVJUTyBBU0lTCis1OkNPOkNPTDpDT0xPTUJJQTpQdXR1bWF5bzpQVUVSVE8gQ0FJQ0VETworNjpDTzpDT0w6Q09MT01CSUE6UHV0dW1heW86UFVFUlRPIEdVWk1BTgorNzpDTzpDT0w6Q09MT01CSUE6UHV0dW1heW86UFVFUlRPIExFR1VJWkFNTworODpDTzpDT0w6Q09MT01CSUE6UHV0dW1heW86U0FOIEZSQU5DSVNDTworOTpDTzpDT0w6Q09MT01CSUE6UHV0dW1heW86U0FOVElBR08KKzEwOkNPOkNPTDpDT0xPTUJJQTpQdXR1bWF5bzpTSUJVTkRPWQorMTE6Q086Q09MOkNPTE9NQklBOlB1dHVtYXlvOlZBTExFIERFTCBHVUFNVUVaIChMQSBIT1IKKzEyOkNPOkNPTDpDT0xPTUJJQTpQdXR1bWF5bzpWSUxMQUdBUlpPTgorMTpDTzpDT0w6Q09MT01CSUE6Q29yZG9iYTpBWUFQRUwKKzI6Q086Q09MOkNPTE9NQklBOkNvcmRvYmE6QlVFTkFWSVNUQQorMzpDTzpDT0w6Q09MT01CSUE6Q29yZG9iYTpDQU5BTEVURQorNDpDTzpDT0w6Q09MT01CSUE6Q29yZG9iYTpDRVJFVEUKKzU6Q086Q09MOkNPTE9NQklBOkNvcmRvYmE6Q0hJTUEKKzY6Q086Q09MOkNPTE9NQklBOkNvcmRvYmE6Q0hJTlUKKzc6Q086Q09MOkNPTE9NQklBOkNvcmRvYmE6Q0lFTkFHQSBERSBPUk8KKzg6Q086Q09MOkNPTE9NQklBOkNvcmRvYmE6TE9SSUNBCis5OkNPOkNPTDpDT0xPTUJJQTpDb3Jkb2JhOkxPUyBDT1JET0JBUworMTA6Q086Q09MOkNPTE9NQklBOkNvcmRvYmE6TU8/SVRPUworMTE6Q086Q09MOkNPTE9NQklBOkNvcmRvYmE6TU9NSUwKKzEyOkNPOkNPTDpDT0xPTUJJQTpDb3Jkb2JhOk1PTklUT1MgKElzLikKKzEzOkNPOkNPTDpDT0xPTUJJQTpDb3Jkb2JhOk1PTlRFTElCQU5PCisxNDpDTzpDT0w6Q09MT01CSUE6Q29yZG9iYTpNT05URVJJQQorMTU6Q086Q09MOkNPTE9NQklBOkNvcmRvYmE6UExBTkVUQSBSSUNBCisxNjpDTzpDT0w6Q09MT01CSUE6Q29yZG9iYTpQVUVCTE8gTlVFVk8KKzE3OkNPOkNPTDpDT0xPTUJJQTpDb3Jkb2JhOlBVRVJUTyBFU0NPTkRJRE8KKzE4OkNPOkNPTDpDT0xPTUJJQTpDb3Jkb2JhOlBVRVJUTyBMSUJFUlRBRE9SCisxOTpDTzpDT0w6Q09MT01CSUE6Q29yZG9iYTpQVVJJU0lNQQorMjA6Q086Q09MOkNPTE9NQklBOkNvcmRvYmE6U0FIQUdVTgorMjE6Q086Q09MOkNPTE9NQklBOkNvcmRvYmE6U0FOIEFORFJFUyBERSBTT1RBVkVOVE8KKzIyOkNPOkNPTDpDT0xPTUJJQTpDb3Jkb2JhOlNBTiBBTlRFUk8KKzIzOkNPOkNPTDpDT0xPTUJJQTpDb3Jkb2JhOlNBTiBCRVJOQVJETyBFTCBWSUVOVE8KKzI0OkNPOkNPTDpDT0xPTUJJQTpDb3Jkb2JhOlNBTiBCRVJOQVJETyBFTCBWSUVOVE8gKEkKKzI1OkNPOkNPTDpDT0xPTUJJQTpDb3Jkb2JhOlNBTiBDQVJMT1MKKzI2OkNPOkNPTDpDT0xPTUJJQTpDb3Jkb2JhOlNBTiBQRUxBWU8KKzI3OkNPOkNPTDpDT0xPTUJJQTpDb3Jkb2JhOlRJRVJSQUxUQQorMjg6Q086Q09MOkNPTE9NQklBOkNvcmRvYmE6VkFMRU5DSUEKKzE6Q086Q09MOkNPTE9NQklBOlF1aW5kaW86QVJNRU5JQQorMjpDTzpDT0w6Q09MT01CSUE6UXVpbmRpbzpCVUVOQVZJU1RBCiszOkNPOkNPTDpDT0xPTUJJQTpRdWluZGlvOkNBTEFSQ0EKKzQ6Q086Q09MOkNPTE9NQklBOlF1aW5kaW86Q0lSQ0FTSUEKKzU6Q086Q09MOkNPTE9NQklBOlF1aW5kaW86Q09SRE9CQQorNjpDTzpDT0w6Q09MT01CSUE6UXVpbmRpbzpGSUxBTkRJQQorNzpDTzpDT0w6Q09MT01CSUE6UXVpbmRpbzpHRU5PVkEKKzg6Q086Q09MOkNPTE9NQklBOlF1aW5kaW86TEEgVEVCQUlEQQorOTpDTzpDT0w6Q09MT01CSUE6UXVpbmRpbzpNT05URU5FR1JPCisxMDpDTzpDT0w6Q09MT01CSUE6UXVpbmRpbzpQSUpBTworMTE6Q086Q09MOkNPTE9NQklBOlF1aW5kaW86UVVJTUJBWUEKKzEyOkNPOkNPTDpDT0xPTUJJQTpRdWluZGlvOlNBTEVOVE8KKzE6Q086Q09MOkNPTE9NQklBOkF0bGFudGljbzpCQVJBTk9BCisyOkNPOkNPTDpDT0xPTUJJQTpBdGxhbnRpY286QkFSUkFOUVVJTExBICAoRElTVC5QT1JULgorMzpDTzpDT0w6Q09MT01CSUE6QXRsYW50aWNvOkNBTVBPIERFIExBIENSVVoKKzQ6Q086Q09MOkNPTE9NQklBOkF0bGFudGljbzpDQU5ERUxBUklBCis1OkNPOkNPTDpDT0xPTUJJQTpBdGxhbnRpY286R0FMQVBBCis2OkNPOkNPTDpDT0xPTUJJQTpBdGxhbnRpY286SlVBTiBERSBBQ09TVEEKKzc6Q086Q09MOkNPTE9NQklBOkF0bGFudGljbzpMVVJVQUNPCis4OkNPOkNPTDpDT0xPTUJJQTpBdGxhbnRpY286TUFMQU1CTworOTpDTzpDT0w6Q09MT01CSUE6QXRsYW50aWNvOk1BTkFUSQorMTA6Q086Q09MOkNPTE9NQklBOkF0bGFudGljbzpQQUxNQVIgREUgVkFSRUxBCisxMTpDTzpDT0w6Q09MT01CSUE6QXRsYW50aWNvOlBJT0pPCisxMjpDTzpDT0w6Q09MT01CSUE6QXRsYW50aWNvOlBPTE8gTlVFVk8KKzEzOkNPOkNPTDpDT0xPTUJJQTpBdGxhbnRpY286UE9ORURFUkEKKzE0OkNPOkNPTDpDT0xPTUJJQTpBdGxhbnRpY286UFVFUlRPIENPTE9NQklBCisxNTpDTzpDT0w6Q09MT01CSUE6QXRsYW50aWNvOlJFUEVMT04KKzE2OkNPOkNPTDpDT0xPTUJJQTpBdGxhbnRpY286U0FCQU5BR1JBTkRFCisxNzpDTzpDT0w6Q09MT01CSUE6QXRsYW50aWNvOlNBQkFOQUxBUkdBCisxODpDTzpDT0w6Q09MT01CSUE6QXRsYW50aWNvOlNBTlRBIExVQ0lBCisxOTpDTzpDT0w6Q09MT01CSUE6QXRsYW50aWNvOlNBTlRPIFRPTUFTCisyMDpDTzpDT0w6Q09MT01CSUE6QXRsYW50aWNvOlNPTEVEQUQKKzIxOkNPOkNPTDpDT0xPTUJJQTpBdGxhbnRpY286U1VBTgorMjI6Q086Q09MOkNPTE9NQklBOkF0bGFudGljbzpUVUJBUkEKKzIzOkNPOkNPTDpDT0xPTUJJQTpBdGxhbnRpY286VVNJQUNVUkkKKzE6Q086Q09MOkNPTE9NQklBOk1hZ2RhbGVuYTpBUkFDQVRBQ0EKKzI6Q086Q09MOkNPTE9NQklBOk1hZ2RhbGVuYTpBUklHVUFOSQorMzpDTzpDT0w6Q09MT01CSUE6TWFnZGFsZW5hOkNFUlJPIFNBTiBBTlRPTklPCis0OkNPOkNPTDpDT0xPTUJJQTpNYWdkYWxlbmE6Q0hJVk9MTworNTpDTzpDT0w6Q09MT01CSUE6TWFnZGFsZW5hOkNJRU5BR0EKKzY6Q086Q09MOkNPTE9NQklBOk1hZ2RhbGVuYTpFTCBCQU5DTworNzpDTzpDT0w6Q09MT01CSUE6TWFnZGFsZW5hOkVMIFBJP09OCis4OkNPOkNPTDpDT0xPTUJJQTpNYWdkYWxlbmE6RlVOREFDSU9OCis5OkNPOkNPTDpDT0xPTUJJQTpNYWdkYWxlbmE6R1VBTUFMCisxMDpDTzpDT0w6Q09MT01CSUE6TWFnZGFsZW5hOlBFRFJBWkEKKzExOkNPOkNPTDpDT0xPTUJJQTpNYWdkYWxlbmE6UElWSUpBWQorMTI6Q086Q09MOkNPTE9NQklBOk1hZ2RhbGVuYTpQTEFUTworMTM6Q086Q09MOkNPTE9NQklBOk1hZ2RhbGVuYTpQVUVCTE8gVklFSk8KKzE0OkNPOkNPTDpDT0xPTUJJQTpNYWdkYWxlbmE6UkVNT0xJTk8KKzE1OkNPOkNPTDpDT0xPTUJJQTpNYWdkYWxlbmE6U0FMQU1JTkEKKzE2OkNPOkNPTDpDT0xPTUJJQTpNYWdkYWxlbmE6U0FOIFNFQkFTVElBTiBERSBCVUVOQVZJUworMTc6Q086Q09MOkNPTE9NQklBOk1hZ2RhbGVuYTpTQU4gWkVOT04KKzE4OkNPOkNPTDpDT0xPTUJJQTpNYWdkYWxlbmE6U0FOVEEgQU5BCisxOTpDTzpDT0w6Q09MT01CSUE6TWFnZGFsZW5hOlNBTlRBIE1BUlRBIChESVNULiBFU1AuKQorMjA6Q086Q09MOkNPTE9NQklBOk1hZ2RhbGVuYTpTQU5UQSBNQVJUQSAoRElTVC4gRVNQLikoCisyMTpDTzpDT0w6Q09MT01CSUE6TWFnZGFsZW5hOlRFTkVSSUZFCisxOkNPOkNPTDpDT0xPTUJJQTpBbWF6b25hczpFTCBFTkNBTlRPCisyOkNPOkNPTDpDT0xPTUJJQTpBbWF6b25hczpMQSBDSE9SUkVSQQorMzpDTzpDT0w6Q09MT01CSUE6QW1hem9uYXM6TEEgUEVEUkVSQQorNDpDTzpDT0w6Q09MT01CSUE6QW1hem9uYXM6TEVUSUNJQQorNTpDTzpDT0w6Q09MT01CSUE6QW1hem9uYXM6TUlSSVRJIFBBUkFOQQorNjpDTzpDT0w6Q09MT01CSUE6QW1hem9uYXM6UFVFUlRPIE5BUklOTworNzpDTzpDT0w6Q09MT01CSUE6QW1hem9uYXM6UFVFUlRPIFNBTlRBTkRFUgorODpDTzpDT0w6Q09MT01CSUE6QW1hem9uYXM6VEFSQVBBQ0EKKzE6Q086Q09MOkNPTE9NQklBOlNhbnRhbmRlcjpBR1VBREEKKzI6Q086Q09MOkNPTE9NQklBOlNhbnRhbmRlcjpBTEJBTklBCiszOkNPOkNPTDpDT0xPTUJJQTpTYW50YW5kZXI6QVJBVE9DQQorNDpDTzpDT0w6Q09MT01CSUE6U2FudGFuZGVyOkJBUkJPU0EKKzU6Q086Q09MOkNPTE9NQklBOlNhbnRhbmRlcjpCQVJJQ0hBUkEKKzY6Q086Q09MOkNPTE9NQklBOlNhbnRhbmRlcjpCQVJSQU5DQUJFUk1FSkEKKzc6Q086Q09MOkNPTE9NQklBOlNhbnRhbmRlcjpCRVRVTElBCis4OkNPOkNPTDpDT0xPTUJJQTpTYW50YW5kZXI6Qk9MSVZBUgorOTpDTzpDT0w6Q09MT01CSUE6U2FudGFuZGVyOkJVQ0FSQU1BTkdBCisxMDpDTzpDT0w6Q09MT01CSUE6U2FudGFuZGVyOkNBQlJFUkEKKzExOkNPOkNPTDpDT0xPTUJJQTpTYW50YW5kZXI6Q0FMSUZPUk5JQQorMTI6Q086Q09MOkNPTE9NQklBOlNhbnRhbmRlcjpDQVBJVEFORUpPCisxMzpDTzpDT0w6Q09MT01CSUE6U2FudGFuZGVyOkNBUkNBU0kKKzE0OkNPOkNPTDpDT0xPTUJJQTpTYW50YW5kZXI6Q0VQSVRBCisxNTpDTzpDT0w6Q09MT01CSUE6U2FudGFuZGVyOkNFUlJJVE8KKzE2OkNPOkNPTDpDT0xPTUJJQTpTYW50YW5kZXI6Q0hBUkFMQQorMTc6Q086Q09MOkNPTE9NQklBOlNhbnRhbmRlcjpDSEFSVEEKKzE4OkNPOkNPTDpDT0xPTUJJQTpTYW50YW5kZXI6Q0hJTUEKKzE5OkNPOkNPTDpDT0xPTUJJQTpTYW50YW5kZXI6Q0hJUEFUQQorMjA6Q086Q09MOkNPTE9NQklBOlNhbnRhbmRlcjpDSU1JVEFSUkEKKzIxOkNPOkNPTDpDT0xPTUJJQTpTYW50YW5kZXI6Q09OQ0VQQ0lPTgorMjI6Q086Q09MOkNPTE9NQklBOlNhbnRhbmRlcjpDT05GSU5FUworMjM6Q086Q09MOkNPTE9NQklBOlNhbnRhbmRlcjpDT05UUkFUQUNJT04KKzI0OkNPOkNPTDpDT0xPTUJJQTpTYW50YW5kZXI6Q09ST01PUk8KKzI1OkNPOkNPTDpDT0xPTUJJQTpTYW50YW5kZXI6Q1VSSVRJCisyNjpDTzpDT0w6Q09MT01CSUE6U2FudGFuZGVyOkVMIENBUk1FTgorMjc6Q086Q09MOkNPTE9NQklBOlNhbnRhbmRlcjpFTCBHVUFDQU1BWU8KKzI4OkNPOkNPTDpDT0xPTUJJQTpTYW50YW5kZXI6RUwgUEU/T04KKzI5OkNPOkNPTDpDT0xPTUJJQTpTYW50YW5kZXI6RUwgUExBWU9OCiszMDpDTzpDT0w6Q09MT01CSUE6U2FudGFuZGVyOkVOQ0lOTworMzE6Q086Q09MOkNPTE9NQklBOlNhbnRhbmRlcjpFTkNJU08KKzMyOkNPOkNPTDpDT0xPTUJJQTpTYW50YW5kZXI6RkxPUklBTgorMzM6Q086Q09MOkNPTE9NQklBOlNhbnRhbmRlcjpGTE9SSURBQkxBTkNBCiszNDpDTzpDT0w6Q09MT01CSUE6U2FudGFuZGVyOkdBTEFOCiszNTpDTzpDT0w6Q09MT01CSUE6U2FudGFuZGVyOkdBTUJJVEEKKzM2OkNPOkNPTDpDT0xPTUJJQTpTYW50YW5kZXI6R0lST04KKzM3OkNPOkNPTDpDT0xPTUJJQTpTYW50YW5kZXI6R1VBQ0EKKzM4OkNPOkNPTDpDT0xPTUJJQTpTYW50YW5kZXI6R1VBREFMVVBFCiszOTpDTzpDT0w6Q09MT01CSUE6U2FudGFuZGVyOkdVQVBPVEEKKzQwOkNPOkNPTDpDT0xPTUJJQTpTYW50YW5kZXI6R1VBVkFUQQorNDE6Q086Q09MOkNPTE9NQklBOlNhbnRhbmRlcjpHVUVQU0EKKzQyOkNPOkNPTDpDT0xPTUJJQTpTYW50YW5kZXI6SEFUTworNDM6Q086Q09MOkNPTE9NQklBOlNhbnRhbmRlcjpKRVNVUyBNQVJJQQorNDQ6Q086Q09MOkNPTE9NQklBOlNhbnRhbmRlcjpKT1JEQU4KKzQ1OkNPOkNPTDpDT0xPTUJJQTpTYW50YW5kZXI6TEEgQkVMTEVaQQorNDY6Q086Q09MOkNPTE9NQklBOlNhbnRhbmRlcjpMQSBQQVoKKzQ3OkNPOkNPTDpDT0xPTUJJQTpTYW50YW5kZXI6TEFOREFaVVJJCis0ODpDTzpDT0w6Q09MT01CSUE6U2FudGFuZGVyOkxFQlJJSkEKKzQ5OkNPOkNPTDpDT0xPTUJJQTpTYW50YW5kZXI6TE9TIFNBTlRPUworNTA6Q086Q09MOkNPTE9NQklBOlNhbnRhbmRlcjpNQUNBUkFWSVRBCis1MTpDTzpDT0w6Q09MT01CSUE6U2FudGFuZGVyOk1BTEFHQQorNTI6Q086Q09MOkNPTE9NQklBOlNhbnRhbmRlcjpNQVRBTlpBCis1MzpDTzpDT0w6Q09MT01CSUE6U2FudGFuZGVyOk1PR09URVMKKzU0OkNPOkNPTDpDT0xPTUJJQTpTYW50YW5kZXI6TU9MQUdBVklUQQorNTU6Q086Q09MOkNPTE9NQklBOlNhbnRhbmRlcjpPQ0FNT05URQorNTY6Q086Q09MOkNPTE9NQklBOlNhbnRhbmRlcjpPSUJBCis1NzpDTzpDT0w6Q09MT01CSUE6U2FudGFuZGVyOk9OWkFHQQorNTg6Q086Q09MOkNPTE9NQklBOlNhbnRhbmRlcjpQQUxNQVIKKzU5OkNPOkNPTDpDT0xPTUJJQTpTYW50YW5kZXI6UEFMTUFTIERFTCBTT0NPUlJPCis2MDpDTzpDT0w6Q09MT01CSUE6U2FudGFuZGVyOlBBUkFNTworNjE6Q086Q09MOkNPTE9NQklBOlNhbnRhbmRlcjpQSUVERUNVRVNUQQorNjI6Q086Q09MOkNPTE9NQklBOlNhbnRhbmRlcjpQSU5DSE9URQorNjM6Q086Q09MOkNPTE9NQklBOlNhbnRhbmRlcjpQVUVOVEUgTkFDSU9OQUwKKzY0OkNPOkNPTDpDT0xPTUJJQTpTYW50YW5kZXI6UFVFUlRPIFBBUlJBCis2NTpDTzpDT0w6Q09MT01CSUE6U2FudGFuZGVyOlBVRVJUTyBXSUxDSEVTCis2NjpDTzpDT0w6Q09MT01CSUE6U2FudGFuZGVyOlJJT05FR1JPCis2NzpDTzpDT0w6Q09MT01CSUE6U2FudGFuZGVyOlNBQkFOQSBERSBUT1JSRVMKKzY4OkNPOkNPTDpDT0xPTUJJQTpTYW50YW5kZXI6U0FOIEFORFJFUworNjk6Q086Q09MOkNPTE9NQklBOlNhbnRhbmRlcjpTQU4gQkVOSVRPCis3MDpDTzpDT0w6Q09MT01CSUE6U2FudGFuZGVyOlNBTiBHSUwKKzcxOkNPOkNPTDpDT0xPTUJJQTpTYW50YW5kZXI6U0FOIEpPQVFVSU4KKzcyOkNPOkNPTDpDT0xPTUJJQTpTYW50YW5kZXI6U0FOIEpPU0UgTUlSQU5EQQorNzM6Q086Q09MOkNPTE9NQklBOlNhbnRhbmRlcjpTQU4gTUlHVUVMCis3NDpDTzpDT0w6Q09MT01CSUE6U2FudGFuZGVyOlNBTiBWSUNFTlRFIERFIENIVUNVUkkKKzc1OkNPOkNPTDpDT0xPTUJJQTpTYW50YW5kZXI6U0FOVEEgQkFSQkFSQQorNzY6Q086Q09MOkNPTE9NQklBOlNhbnRhbmRlcjpTQU5UQSBIRUxFTkEgREUgT1BPTgorNzc6Q086Q09MOkNPTE9NQklBOlNhbnRhbmRlcjpTSU1BQ09UQQorNzg6Q086Q09MOkNPTE9NQklBOlNhbnRhbmRlcjpTT0NPUlJPCis3OTpDTzpDT0w6Q09MT01CSUE6U2FudGFuZGVyOlNVQUlUQQorODA6Q086Q09MOkNPTE9NQklBOlNhbnRhbmRlcjpTVUNSRQorODE6Q086Q09MOkNPTE9NQklBOlNhbnRhbmRlcjpTVVJBVEEKKzgyOkNPOkNPTDpDT0xPTUJJQTpTYW50YW5kZXI6VE9OQQorODM6Q086Q09MOkNPTE9NQklBOlNhbnRhbmRlcjpWQUxMRSBERSAgU0FOIEpPU0UKKzg0OkNPOkNPTDpDT0xPTUJJQTpTYW50YW5kZXI6VkVMRVoKKzg1OkNPOkNPTDpDT0xPTUJJQTpTYW50YW5kZXI6VkVUQVMKKzg2OkNPOkNPTDpDT0xPTUJJQTpTYW50YW5kZXI6VklMTEFOVUVWQQorODc6Q086Q09MOkNPTE9NQklBOlNhbnRhbmRlcjpaQVBBVE9DQQorMTpDTzpDT0w6Q09MT01CSUE6VmFsbGUgZGVsIENhdWNhOkFMQ0FMQQorMjpDTzpDT0w6Q09MT01CSUE6VmFsbGUgZGVsIENhdWNhOkFOREFMVUNJQQorMzpDTzpDT0w6Q09MT01CSUE6VmFsbGUgZGVsIENhdWNhOkFOU0VSTUFOVUVWTworNDpDTzpDT0w6Q09MT01CSUE6VmFsbGUgZGVsIENhdWNhOkFSR0VMSUEKKzU6Q086Q09MOkNPTE9NQklBOlZhbGxlIGRlbCBDYXVjYTpCT0xJVkFSCis2OkNPOkNPTDpDT0xPTUJJQTpWYWxsZSBkZWwgQ2F1Y2E6QlVFTkFWRU5UVVJBCis3OkNPOkNPTDpDT0xPTUJJQTpWYWxsZSBkZWwgQ2F1Y2E6QlVFTkFWRU5UVVJBIChJcy4pCis4OkNPOkNPTDpDT0xPTUJJQTpWYWxsZSBkZWwgQ2F1Y2E6QlVHQQorOTpDTzpDT0w6Q09MT01CSUE6VmFsbGUgZGVsIENhdWNhOkJVR0FMQUdSQU5ERQorMTA6Q086Q09MOkNPTE9NQklBOlZhbGxlIGRlbCBDYXVjYTpDQUlDRURPTklBCisxMTpDTzpDT0w6Q09MT01CSUE6VmFsbGUgZGVsIENhdWNhOkNBTEkKKzEyOkNPOkNPTDpDT0xPTUJJQTpWYWxsZSBkZWwgQ2F1Y2E6Q0FMSU1BICAoREFSSUVOKQorMTM6Q086Q09MOkNPTE9NQklBOlZhbGxlIGRlbCBDYXVjYTpDQU5ERUxBUklBCisxNDpDTzpDT0w6Q09MT01CSUE6VmFsbGUgZGVsIENhdWNhOkNBUlRBR08KKzE1OkNPOkNPTDpDT0xPTUJJQTpWYWxsZSBkZWwgQ2F1Y2E6REFHVUEKKzE2OkNPOkNPTDpDT0xPTUJJQTpWYWxsZSBkZWwgQ2F1Y2E6RUwgQUdVSUxBCisxNzpDTzpDT0w6Q09MT01CSUE6VmFsbGUgZGVsIENhdWNhOkVMIENBSVJPCisxODpDTzpDT0w6Q09MT01CSUE6VmFsbGUgZGVsIENhdWNhOkVMIENFUlJJVE8KKzE5OkNPOkNPTDpDT0xPTUJJQTpWYWxsZSBkZWwgQ2F1Y2E6RUwgRE9WSU8KKzIwOkNPOkNPTDpDT0xPTUJJQTpWYWxsZSBkZWwgQ2F1Y2E6RkxPUklEQQorMjE6Q086Q09MOkNPTE9NQklBOlZhbGxlIGRlbCBDYXVjYTpHSU5FQlJBCisyMjpDTzpDT0w6Q09MT01CSUE6VmFsbGUgZGVsIENhdWNhOkdVQUNBUkkKKzIzOkNPOkNPTDpDT0xPTUJJQTpWYWxsZSBkZWwgQ2F1Y2E6SkFNVU5ESQorMjQ6Q086Q09MOkNPTE9NQklBOlZhbGxlIGRlbCBDYXVjYTpMQSBDVU1CUkUKKzI1OkNPOkNPTDpDT0xPTUJJQTpWYWxsZSBkZWwgQ2F1Y2E6TEEgVU5JT04KKzI2OkNPOkNPTDpDT0xPTUJJQTpWYWxsZSBkZWwgQ2F1Y2E6TEEgVklDVE9SSUEKKzI3OkNPOkNPTDpDT0xPTUJJQTpWYWxsZSBkZWwgQ2F1Y2E6T0JBTkRPCisyODpDTzpDT0w6Q09MT01CSUE6VmFsbGUgZGVsIENhdWNhOlBBTE1JUkEKKzI5OkNPOkNPTDpDT0xPTUJJQTpWYWxsZSBkZWwgQ2F1Y2E6UFJBREVSQQorMzA6Q086Q09MOkNPTE9NQklBOlZhbGxlIGRlbCBDYXVjYTpSRVNUUkVQTworMzE6Q086Q09MOkNPTE9NQklBOlZhbGxlIGRlbCBDYXVjYTpSSU9GUklPCiszMjpDTzpDT0w6Q09MT01CSUE6VmFsbGUgZGVsIENhdWNhOlJPTERBTklMTE8KKzMzOkNPOkNPTDpDT0xPTUJJQTpWYWxsZSBkZWwgQ2F1Y2E6U0FOIFBFRFJPCiszNDpDTzpDT0w6Q09MT01CSUE6VmFsbGUgZGVsIENhdWNhOlNFVklMTEEKKzM1OkNPOkNPTDpDT0xPTUJJQTpWYWxsZSBkZWwgQ2F1Y2E6VE9STworMzY6Q086Q09MOkNPTE9NQklBOlZhbGxlIGRlbCBDYXVjYTpUUlVKSUxMTworMzc6Q086Q09MOkNPTE9NQklBOlZhbGxlIGRlbCBDYXVjYTpUVUxVQQorMzg6Q086Q09MOkNPTE9NQklBOlZhbGxlIGRlbCBDYXVjYTpVTExPQQorMzk6Q086Q09MOkNPTE9NQklBOlZhbGxlIGRlbCBDYXVjYTpWRVJTQUxMRVMKKzQwOkNPOkNPTDpDT0xPTUJJQTpWYWxsZSBkZWwgQ2F1Y2E6VklKRVMKKzQxOkNPOkNPTDpDT0xPTUJJQTpWYWxsZSBkZWwgQ2F1Y2E6WU9UT0NPCis0MjpDTzpDT0w6Q09MT01CSUE6VmFsbGUgZGVsIENhdWNhOllVTUJPCis0MzpDTzpDT0w6Q09MT01CSUE6VmFsbGUgZGVsIENhdWNhOlpBUlpBTAorMTpDTzpDT0w6Q09MT01CSUE6VmljaGFkYTpDVU1BUklCTworMjpDTzpDT0w6Q09MT01CSUE6VmljaGFkYTpMQSBQUklNQVZFUkEKKzM6Q086Q09MOkNPTE9NQklBOlZpY2hhZGE6UFVFUlRPIENBUlJFTk8KKzQ6Q086Q09MOkNPTE9NQklBOlZpY2hhZGE6U0FOIEpPU0UgREUgT0NVTkUKKzU6Q086Q09MOkNPTE9NQklBOlZpY2hhZGE6U0FOVEEgUklUQQorNjpDTzpDT0w6Q09MT01CSUE6VmljaGFkYTpTQU5UQSBST1NBTElBCisxOkNPOkNPTDpDT0xPTUJJQTpNZXRhOkFDQUNJQVMKKzI6Q086Q09MOkNPTE9NQklBOk1ldGE6QkFSUkFOQ0EgREUgVVBJQQorMzpDTzpDT0w6Q09MT01CSUE6TWV0YTpDQUJVWUFSTworNDpDTzpDT0w6Q09MT01CSUE6TWV0YTpDQVNUSUxMQSBMQSBOVUVWQQorNTpDTzpDT0w6Q09MT01CSUE6TWV0YTpDVUJBUlJBTAorNjpDTzpDT0w6Q09MT01CSUE6TWV0YTpDVU1BUkFMCis3OkNPOkNPTDpDT0xPTUJJQTpNZXRhOkVMIENBTFZBUklPCis4OkNPOkNPTDpDT0xPTUJJQTpNZXRhOkVMIENBU1RJTExPCis5OkNPOkNPTDpDT0xPTUJJQTpNZXRhOkVMIERPUkFETworMTA6Q086Q09MOkNPTE9NQklBOk1ldGE6RlVFTlRFIERFIE9STworMTE6Q086Q09MOkNPTE9NQklBOk1ldGE6R1JBTkFEQQorMTI6Q086Q09MOkNPTE9NQklBOk1ldGE6R1VBTUFMCisxMzpDTzpDT0w6Q09MT01CSUE6TWV0YTpMQSBNQUNBUkVOQQorMTQ6Q086Q09MOkNPTE9NQklBOk1ldGE6TEEgVVJJQkUKKzE1OkNPOkNPTDpDT0xPTUJJQTpNZXRhOkxFSkFOSUFTCisxNjpDTzpDT0w6Q09MT01CSUE6TWV0YTpNQVBJUklQQU4KKzE3OkNPOkNPTDpDT0xPTUJJQTpNZXRhOk1FU0VUQVMKKzE4OkNPOkNPTDpDT0xPTUJJQTpNZXRhOlBVRVJUTyBDT05DT1JESUEKKzE5OkNPOkNPTDpDT0xPTUJJQTpNZXRhOlBVRVJUTyBHQUlUQU4KKzIwOkNPOkNPTDpDT0xPTUJJQTpNZXRhOlBVRVJUTyBMTEVSQVMKKzIxOkNPOkNPTDpDT0xPTUJJQTpNZXRhOlBVRVJUTyBMT1BFWgorMjI6Q086Q09MOkNPTE9NQklBOk1ldGE6UFVFUlRPIFJJQ08KKzIzOkNPOkNPTDpDT0xPTUJJQTpNZXRhOlJFU1RSRVBPCisyNDpDTzpDT0w6Q09MT01CSUE6TWV0YTpTQU4gQ0FSTE9TIERFIEdVQVJPQQorMjU6Q086Q09MOkNPTE9NQklBOk1ldGE6U0FOIEpVQU4gREUgQVJBTUEKKzI2OkNPOkNPTDpDT0xPTUJJQTpNZXRhOlNBTiBKVUFOSVRPCisyNzpDTzpDT0w6Q09MT01CSUE6TWV0YTpTQU4gTUFSVElOCisyODpDTzpDT0w6Q09MT01CSUE6TWV0YTpWSUxMQVZJQ0VOQ0lPCisyOTpDTzpDT0w6Q09MT01CSUE6TWV0YTpWSVNUQUhFUk1PU0EKKzE6Q086Q09MOkNPTE9NQklBOlJpc2FyYWxkYTpBUElBCisyOkNPOkNPTDpDT0xPTUJJQTpSaXNhcmFsZGE6QkFMQk9BCiszOkNPOkNPTDpDT0xPTUJJQTpSaXNhcmFsZGE6QkVMRU4gREUgVU1CUklBCis0OkNPOkNPTDpDT0xPTUJJQTpSaXNhcmFsZGE6RE9TIFFVRUJSQURBUworNTpDTzpDT0w6Q09MT01CSUE6UmlzYXJhbGRhOkdVQVRJQ0EKKzY6Q086Q09MOkNPTE9NQklBOlJpc2FyYWxkYTpMQSBDRUxJQQorNzpDTzpDT0w6Q09MT01CSUE6UmlzYXJhbGRhOkxBIFZJUkdJTklBCis4OkNPOkNPTDpDT0xPTUJJQTpSaXNhcmFsZGE6TUFSU0VMTEEKKzk6Q086Q09MOkNPTE9NQklBOlJpc2FyYWxkYTpNSVNUUkFUTworMTA6Q086Q09MOkNPTE9NQklBOlJpc2FyYWxkYTpQRVJFSVJBCisxMTpDTzpDT0w6Q09MT01CSUE6UmlzYXJhbGRhOlBVRUJMTyBSSUNPCisxMjpDTzpDT0w6Q09MT01CSUE6UmlzYXJhbGRhOlFVSU5DSElBCisxMzpDTzpDT0w6Q09MT01CSUE6UmlzYXJhbGRhOlNBTlRBIFJPU0EgREUgQ0FCQUwKKzE0OkNPOkNPTDpDT0xPTUJJQTpSaXNhcmFsZGE6U0FOVFVBUklPCisxOkNPOkNPTDpDT0xPTUJJQTpDZXNhcjpBR1VBQ0hJQ0EKKzI6Q086Q09MOkNPTE9NQklBOkNlc2FyOkFHVVNUSU4gQ09EQVpaSQorMzpDTzpDT0w6Q09MT01CSUE6Q2VzYXI6QVNUUkVBCis0OkNPOkNPTDpDT0xPTUJJQTpDZXNhcjpCRUNFUlJJTAorNTpDTzpDT0w6Q09MT01CSUE6Q2VzYXI6Qk9TQ09OSUEKKzY6Q086Q09MOkNPTE9NQklBOkNlc2FyOkNISU1JQ0hBR1VBCis3OkNPOkNPTDpDT0xPTUJJQTpDZXNhcjpDSElSSUdVQU5BCis4OkNPOkNPTDpDT0xPTUJJQTpDZXNhcjpDVVJVTUFOSQorOTpDTzpDT0w6Q09MT01CSUE6Q2VzYXI6RUwgQ09QRVkKKzEwOkNPOkNPTDpDT0xPTUJJQTpDZXNhcjpFTCBQQVNPCisxMTpDTzpDT0w6Q09MT01CSUE6Q2VzYXI6R0FNQVJSQQorMTI6Q086Q09MOkNPTE9NQklBOkNlc2FyOkdPTlpBTEVaCisxMzpDTzpDT0w6Q09MT01CSUE6Q2VzYXI6TEEgR0xPUklBCisxNDpDTzpDT0w6Q09MT01CSUE6Q2VzYXI6TEEgSkFHVUEgREUgSVJJQklDTworMTU6Q086Q09MOkNPTE9NQklBOkNlc2FyOkxBIFBBWgorMTY6Q086Q09MOkNPTE9NQklBOkNlc2FyOk1BTkFVUkUgQkFMQ09OIERFTCBDRVNBUgorMTc6Q086Q09MOkNPTE9NQklBOkNlc2FyOlBBSUxJVEFTCisxODpDTzpDT0w6Q09MT01CSUE6Q2VzYXI6UEVMQVlBCisxOTpDTzpDT0w6Q09MT01CSUE6Q2VzYXI6UklPIERFIE9STworMjA6Q086Q09MOkNPTE9NQklBOkNlc2FyOlNBTiBBTEJFUlRPCisyMTpDTzpDT0w6Q09MT01CSUE6Q2VzYXI6U0FOIERJRUdPCisyMjpDTzpDT0w6Q09MT01CSUE6Q2VzYXI6U0FOIE1BUlRJTgorMjM6Q086Q09MOkNPTE9NQklBOkNlc2FyOlRBTUFMQU1FUVVFCisyNDpDTzpDT0w6Q09MT01CSUE6Q2VzYXI6VkFMTEVEVVBBUgorMTpDTzpDT0w6Q09MT01CSUE6R3VhdmlhcmU6Q0FMQU1BUgorMjpDTzpDT0w6Q09MT01CSUE6R3VhdmlhcmU6RUwgUkVUT1JOTworMzpDTzpDT0w6Q09MT01CSUE6R3VhdmlhcmU6TUlSQUZMT1JFUworNDpDTzpDT0w6Q09MT01CSUE6R3VhdmlhcmU6U0FOIEpPU0UgREVMIEdVQVZJQVJFCisxOkNPOkNPTDpDT0xPTUJJQTpCb3lhY2E6QUxNRUlEQQorMjpDTzpDT0w6Q09MT01CSUE6Qm95YWNhOkFRVUlUQU5JQQorMzpDTzpDT0w6Q09MT01CSUE6Qm95YWNhOkFSQ0FCVUNPCis0OkNPOkNPTDpDT0xPTUJJQTpCb3lhY2E6QkVMRU4KKzU6Q086Q09MOkNPTE9NQklBOkJveWFjYTpCRVJCRU8KKzY6Q086Q09MOkNPTE9NQklBOkJveWFjYTpCRVRFSVRJVkEKKzc6Q086Q09MOkNPTE9NQklBOkJveWFjYTpCT0FWSVRBCis4OkNPOkNPTDpDT0xPTUJJQTpCb3lhY2E6Qk9ZQUNBCis5OkNPOkNPTDpDT0xPTUJJQTpCb3lhY2E6QlJJQ0U/TworMTA6Q086Q09MOkNPTE9NQklBOkJveWFjYTpCVUVOQVZJU1RBCisxMTpDTzpDT0w6Q09MT01CSUE6Qm95YWNhOkJVU0JBTlpBCisxMjpDTzpDT0w6Q09MT01CSUE6Qm95YWNhOkNBTERBUworMTM6Q086Q09MOkNPTE9NQklBOkJveWFjYTpDQU1QT0hFUk1PU08KKzE0OkNPOkNPTDpDT0xPTUJJQTpCb3lhY2E6Q0VSSU5aQQorMTU6Q086Q09MOkNPTE9NQklBOkJveWFjYTpDSElOQVZJVEEKKzE2OkNPOkNPTDpDT0xPTUJJQTpCb3lhY2E6Q0hJUVVJTlFVSVJBCisxNzpDTzpDT0w6Q09MT01CSUE6Qm95YWNhOkNISVFVSVpBCisxODpDTzpDT0w6Q09MT01CSUE6Qm95YWNhOkNISVNDQVMKKzE5OkNPOkNPTDpDT0xPTUJJQTpCb3lhY2E6Q0hJVEEKKzIwOkNPOkNPTDpDT0xPTUJJQTpCb3lhY2E6Q0hJVEFSQVFVRQorMjE6Q086Q09MOkNPTE9NQklBOkJveWFjYTpDSElWQVRBCisyMjpDTzpDT0w6Q09MT01CSUE6Qm95YWNhOkNISVZPUgorMjM6Q086Q09MOkNPTE9NQklBOkJveWFjYTpDSUVORUdBCisyNDpDTzpDT0w6Q09MT01CSUE6Qm95YWNhOkNPTUJJVEEKKzI1OkNPOkNPTDpDT0xPTUJJQTpCb3lhY2E6Q09QRVIKKzI2OkNPOkNPTDpDT0xPTUJJQTpCb3lhY2E6Q09SUkFMRVMKKzI3OkNPOkNPTDpDT0xPTUJJQTpCb3lhY2E6Q09WQVJBQ0hJQQorMjg6Q086Q09MOkNPTE9NQklBOkJveWFjYTpDVUJBUkEKKzI5OkNPOkNPTDpDT0xPTUJJQTpCb3lhY2E6Q1VDQUlUQQorMzA6Q086Q09MOkNPTE9NQklBOkJveWFjYTpDVUlUSVZBCiszMTpDTzpDT0w6Q09MT01CSUE6Qm95YWNhOkRVSVRBTUEKKzMyOkNPOkNPTDpDT0xPTUJJQTpCb3lhY2E6RUwgQ09DVVkKKzMzOkNPOkNPTDpDT0xPTUJJQTpCb3lhY2E6RUwgRVNQSU5PCiszNDpDTzpDT0w6Q09MT01CSUE6Qm95YWNhOkZJUkFWSVRPQkEKKzM1OkNPOkNPTDpDT0xPTUJJQTpCb3lhY2E6RkxPUkVTVEEKKzM2OkNPOkNPTDpDT0xPTUJJQTpCb3lhY2E6R0FDSEFOVElWQQorMzc6Q086Q09MOkNPTE9NQklBOkJveWFjYTpHQU1FWkEKKzM4OkNPOkNPTDpDT0xPTUJJQTpCb3lhY2E6R0FSQUdPQQorMzk6Q086Q09MOkNPTE9NQklBOkJveWFjYTpHVUFDQU1BWUFTCis0MDpDTzpDT0w6Q09MT01CSUE6Qm95YWNhOkdVQVRFUVVFCis0MTpDTzpDT0w6Q09MT01CSUE6Qm95YWNhOkdVQVlBVEEKKzQyOkNPOkNPTDpDT0xPTUJJQTpCb3lhY2E6R1VJQ0FOCis0MzpDTzpDT0w6Q09MT01CSUE6Qm95YWNhOklaQQorNDQ6Q086Q09MOkNPTE9NQklBOkJveWFjYTpKRU5FU0FOTworNDU6Q086Q09MOkNPTE9NQklBOkJveWFjYTpKRVJJQ08KKzQ2OkNPOkNPTDpDT0xPTUJJQTpCb3lhY2E6TEEgQ0FQSUxMQQorNDc6Q086Q09MOkNPTE9NQklBOkJveWFjYTpMQSBVVklUQQorNDg6Q086Q09MOkNPTE9NQklBOkJveWFjYTpMQSBWSUNUT1JJQQorNDk6Q086Q09MOkNPTE9NQklBOkJveWFjYTpMQUJSQU5aQUdSQU5ERQorNTA6Q086Q09MOkNPTE9NQklBOkJveWFjYTpNQUNBTkFMCis1MTpDTzpDT0w6Q09MT01CSUE6Qm95YWNhOk1BUklQSQorNTI6Q086Q09MOkNPTE9NQklBOkJveWFjYTpNSVJBRkxPUkVTCis1MzpDTzpDT0w6Q09MT01CSUE6Qm95YWNhOk1PTkdVQQorNTQ6Q086Q09MOkNPTE9NQklBOkJveWFjYTpNT05HVUkKKzU1OkNPOkNPTDpDT0xPTUJJQTpCb3lhY2E6TU9OSVFVSVJBCis1NjpDTzpDT0w6Q09MT01CSUE6Qm95YWNhOk1PVEFWSVRBCis1NzpDTzpDT0w6Q09MT01CSUE6Qm95YWNhOk1VWk8KKzU4OkNPOkNPTDpDT0xPTUJJQTpCb3lhY2E6Tk9CU0EKKzU5OkNPOkNPTDpDT0xPTUJJQTpCb3lhY2E6TlVFVk8gQ09MT04KKzYwOkNPOkNPTDpDT0xPTUJJQTpCb3lhY2E6T0lDQVRBCis2MTpDTzpDT0w6Q09MT01CSUE6Qm95YWNhOk9UQU5DSEUKKzYyOkNPOkNPTDpDT0xPTUJJQTpCb3lhY2E6UEFDSEFWSVRBCis2MzpDTzpDT0w6Q09MT01CSUE6Qm95YWNhOlBBRVoKKzY0OkNPOkNPTDpDT0xPTUJJQTpCb3lhY2E6UEFJUEEKKzY1OkNPOkNPTDpDT0xPTUJJQTpCb3lhY2E6UEFKQVJJVE8KKzY2OkNPOkNPTDpDT0xPTUJJQTpCb3lhY2E6UEFOUVVFQkEKKzY3OkNPOkNPTDpDT0xPTUJJQTpCb3lhY2E6UEFVTkEKKzY4OkNPOkNPTDpDT0xPTUJJQTpCb3lhY2E6UEFZQQorNjk6Q086Q09MOkNPTE9NQklBOkJveWFjYTpQQVogREUgUklPCis3MDpDTzpDT0w6Q09MT01CSUE6Qm95YWNhOlBFU0NBCis3MTpDTzpDT0w6Q09MT01CSUE6Qm95YWNhOlBJU1ZBCis3MjpDTzpDT0w6Q09MT01CSUE6Qm95YWNhOlBVRVJUTyBCT1lBQ0EKKzczOkNPOkNPTDpDT0xPTUJJQTpCb3lhY2E6UVVJUEFNQQorNzQ6Q086Q09MOkNPTE9NQklBOkJveWFjYTpSQU1JUklRVUkKKzc1OkNPOkNPTDpDT0xPTUJJQTpCb3lhY2E6UkFRVUlSQQorNzY6Q086Q09MOkNPTE9NQklBOkJveWFjYTpST05ET04KKzc3OkNPOkNPTDpDT0xPTUJJQTpCb3lhY2E6U0FCT1lBCis3ODpDTzpDT0w6Q09MT01CSUE6Qm95YWNhOlNBQ0hJQ0EKKzc5OkNPOkNPTDpDT0xPTUJJQTpCb3lhY2E6U0FNQUNBCis4MDpDTzpDT0w6Q09MT01CSUE6Qm95YWNhOlNBTiBFRFVBUkRPCis4MTpDTzpDT0w6Q09MT01CSUE6Qm95YWNhOlNBTiBKT1NFIERFIFBBUkUKKzgyOkNPOkNPTDpDT0xPTUJJQTpCb3lhY2E6U0FOIExVSVMgREUgR0FDRU5PCis4MzpDTzpDT0w6Q09MT01CSUE6Qm95YWNhOlNBTiBNQVRFTworODQ6Q086Q09MOkNPTE9NQklBOkJveWFjYTpTQU4gTUlHVUVMIERFIFNFTUEKKzg1OkNPOkNPTDpDT0xPTUJJQTpCb3lhY2E6U0FOIFBBQkxPIERFIEJPUkJVUgorODY6Q086Q09MOkNPTE9NQklBOkJveWFjYTpTQU5UQSBST1NBIERFIFZJVEVSQk8KKzg3OkNPOkNPTDpDT0xPTUJJQTpCb3lhY2E6U0FOVEEgU09GSUEKKzg4OkNPOkNPTDpDT0xPTUJJQTpCb3lhY2E6U0FOVEFNQVJJQQorODk6Q086Q09MOkNPTE9NQklBOkJveWFjYTpTQU5UQU5BCis5MDpDTzpDT0w6Q09MT01CSUE6Qm95YWNhOlNBVElWQU5PUlRFCis5MTpDTzpDT0w6Q09MT01CSUE6Qm95YWNhOlNBVElWQVNVUgorOTI6Q086Q09MOkNPTE9NQklBOkJveWFjYTpTSUFDSE9RVUUKKzkzOkNPOkNPTDpDT0xPTUJJQTpCb3lhY2E6U09BVEEKKzk0OkNPOkNPTDpDT0xPTUJJQTpCb3lhY2E6U09DSEEKKzk1OkNPOkNPTDpDT0xPTUJJQTpCb3lhY2E6U09DT1RBCis5NjpDTzpDT0w6Q09MT01CSUE6Qm95YWNhOlNPR0FNT1NPCis5NzpDTzpDT0w6Q09MT01CSUE6Qm95YWNhOlNPTU9ORE9DTworOTg6Q086Q09MOkNPTE9NQklBOkJveWFjYTpTT1JBCis5OTpDTzpDT0w6Q09MT01CSUE6Qm95YWNhOlNPUkFDQQorMTAwOkNPOkNPTDpDT0xPTUJJQTpCb3lhY2E6U09UQVFVSVJBCisxMDE6Q086Q09MOkNPTE9NQklBOkJveWFjYTpTVVNBQ09OCisxMDI6Q086Q09MOkNPTE9NQklBOkJveWFjYTpTVVRBTUFSQ0hBTgorMTAzOkNPOkNPTDpDT0xPTUJJQTpCb3lhY2E6U1VUQVRFTlpBCisxMDQ6Q086Q09MOkNPTE9NQklBOkJveWFjYTpUQVNDTworMTA1OkNPOkNPTDpDT0xPTUJJQTpCb3lhY2E6VEVOWkEKKzEwNjpDTzpDT0w6Q09MT01CSUE6Qm95YWNhOlRJQkFCT1NBCisxMDc6Q086Q09MOkNPTE9NQklBOkJveWFjYTpUSUJBTkEKKzEwODpDTzpDT0w6Q09MT01CSUE6Qm95YWNhOlRJTkpBQ0EKKzEwOTpDTzpDT0w6Q09MT01CSUE6Qm95YWNhOlRJUEFDT1FVRQorMTEwOkNPOkNPTDpDT0xPTUJJQTpCb3lhY2E6VE9DQQorMTExOkNPOkNPTDpDT0xPTUJJQTpCb3lhY2E6VE9HVUkKKzExMjpDTzpDT0w6Q09MT01CSUE6Qm95YWNhOlRPUEFHQQorMTEzOkNPOkNPTDpDT0xPTUJJQTpCb3lhY2E6VE9UQQorMTE0OkNPOkNPTDpDT0xPTUJJQTpCb3lhY2E6VFVOSkEKKzExNTpDTzpDT0w6Q09MT01CSUE6Qm95YWNhOlRVTlVOR1VBCisxMTY6Q086Q09MOkNPTE9NQklBOkJveWFjYTpUVVJNRVFVRQorMTE3OkNPOkNPTDpDT0xPTUJJQTpCb3lhY2E6VFVUQQorMTE4OkNPOkNPTDpDT0xPTUJJQTpCb3lhY2E6VFVUQVNBCisxMTk6Q086Q09MOkNPTE9NQklBOkJveWFjYTpVTUJJVEEKKzEyMDpDTzpDT0w6Q09MT01CSUE6Qm95YWNhOlZFTlRBUVVFTUFEQQorMTIxOkNPOkNPTDpDT0xPTUJJQTpCb3lhY2E6VklMTEEgREUgTEVZVkEKKzEyMjpDTzpDT0w6Q09MT01CSUE6Qm95YWNhOlZJUkFDQUNIQQorMTIzOkNPOkNPTDpDT0xPTUJJQTpCb3lhY2E6WkVUQVFVSVJBCisxOkNPOkNPTDpDT0xPTUJJQTpDYWxkYXM6QUdVQURBUworMjpDTzpDT0w6Q09MT01CSUE6Q2FsZGFzOkFOU0VSTUEKKzM6Q086Q09MOkNPTE9NQklBOkNhbGRhczpBUkFOWkFaVQorNDpDTzpDT0w6Q09MT01CSUE6Q2FsZGFzOkJFTEFMQ0FaQVIKKzU6Q086Q09MOkNPTE9NQklBOkNhbGRhczpDSElOQ0hJTkEKKzY6Q086Q09MOkNPTE9NQklBOkNhbGRhczpGSUxBREVMRklBCis3OkNPOkNPTDpDT0xPTUJJQTpDYWxkYXM6TEEgRE9SQURBCis4OkNPOkNPTDpDT0xPTUJJQTpDYWxkYXM6TEEgTUVSQ0VECis5OkNPOkNPTDpDT0xPTUJJQTpDYWxkYXM6TUFOSVpBTEVTCisxMDpDTzpDT0w6Q09MT01CSUE6Q2FsZGFzOk1BTlpBTkFSRVMKKzExOkNPOkNPTDpDT0xPTUJJQTpDYWxkYXM6TUFSTUFUTworMTI6Q086Q09MOkNPTE9NQklBOkNhbGRhczpNQVJRVUVUQUxJQQorMTM6Q086Q09MOkNPTE9NQklBOkNhbGRhczpNQVJVTEFOREEKKzE0OkNPOkNPTDpDT0xPTUJJQTpDYWxkYXM6TkVJUkEKKzE1OkNPOkNPTDpDT0xPTUJJQTpDYWxkYXM6UEFDT1JBCisxNjpDTzpDT0w6Q09MT01CSUE6Q2FsZGFzOlBBTEVTVElOQQorMTc6Q086Q09MOkNPTE9NQklBOkNhbGRhczpQRU5TSUxWQU5JQQorMTg6Q086Q09MOkNPTE9NQklBOkNhbGRhczpSSU9TVUNJTworMTk6Q086Q09MOkNPTE9NQklBOkNhbGRhczpSSVNBUkFMREEKKzIwOkNPOkNPTDpDT0xPTUJJQTpDYWxkYXM6U0FMQU1JTkEKKzIxOkNPOkNPTDpDT0xPTUJJQTpDYWxkYXM6U0FNQU5BCisyMjpDTzpDT0w6Q09MT01CSUE6Q2FsZGFzOlNVUElBCisyMzpDTzpDT0w6Q09MT01CSUE6Q2FsZGFzOlZJQ1RPUklBCisyNDpDTzpDT0w6Q09MT01CSUE6Q2FsZGFzOlZJTExBTUFSSUEKKzI1OkNPOkNPTDpDT0xPTUJJQTpDYWxkYXM6VklURVJCTworMTpDTzpDT0w6Q09MT01CSUE6QW50aW9xdWlhOkFCRUpPUlJBTAorMjpDTzpDT0w6Q09MT01CSUE6QW50aW9xdWlhOkFCUklBUVVJCiszOkNPOkNPTDpDT0xPTUJJQTpBbnRpb3F1aWE6QUxFSkFORFJJQQorNDpDTzpDT0w6Q09MT01CSUE6QW50aW9xdWlhOkFNQUdBCis1OkNPOkNPTDpDT0xPTUJJQTpBbnRpb3F1aWE6QU1BTEZJCis2OkNPOkNPTDpDT0xPTUJJQTpBbnRpb3F1aWE6QU5ERVMKKzc6Q086Q09MOkNPTE9NQklBOkFudGlvcXVpYTpBTkdFTE9QT0xJUworODpDTzpDT0w6Q09MT01CSUE6QW50aW9xdWlhOkFOR09TVFVSQQorOTpDTzpDT0w6Q09MT01CSUE6QW50aW9xdWlhOkFOT1JJCisxMDpDTzpDT0w6Q09MT01CSUE6QW50aW9xdWlhOkFOVElPUVVJQQorMTE6Q086Q09MOkNPTE9NQklBOkFudGlvcXVpYTpBTlpBCisxMjpDTzpDT0w6Q09MT01CSUE6QW50aW9xdWlhOkFQQVJUQURPCisxMzpDTzpDT0w6Q09MT01CSUE6QW50aW9xdWlhOkFSQk9MRVRFUworMTQ6Q086Q09MOkNPTE9NQklBOkFudGlvcXVpYTpBUkdFTElBCisxNTpDTzpDT0w6Q09MT01CSUE6QW50aW9xdWlhOkFSTUVOSUEKKzE2OkNPOkNPTDpDT0xPTUJJQTpBbnRpb3F1aWE6QkFSQk9TQQorMTc6Q086Q09MOkNPTE9NQklBOkFudGlvcXVpYTpCRUxMTworMTg6Q086Q09MOkNPTE9NQklBOkFudGlvcXVpYTpCRUxNSVJBCisxOTpDTzpDT0w6Q09MT01CSUE6QW50aW9xdWlhOkJFVEFOSUEKKzIwOkNPOkNPTDpDT0xPTUJJQTpBbnRpb3F1aWE6QkVUVUxJQQorMjE6Q086Q09MOkNPTE9NQklBOkFudGlvcXVpYTpCT0xJVkFSCisyMjpDTzpDT0w6Q09MT01CSUE6QW50aW9xdWlhOkJSSUNFTk8KKzIzOkNPOkNPTDpDT0xPTUJJQTpBbnRpb3F1aWE6QlVSSVRJQ0EKKzI0OkNPOkNPTDpDT0xPTUJJQTpBbnRpb3F1aWE6Q0FDRVJFUworMjU6Q086Q09MOkNPTE9NQklBOkFudGlvcXVpYTpDQUlDRURPCisyNjpDTzpDT0w6Q09MT01CSUE6QW50aW9xdWlhOkNBTERBUworMjc6Q086Q09MOkNPTE9NQklBOkFudGlvcXVpYTpDQU1QQU1FTlRPCisyODpDTzpDT0w6Q09MT01CSUE6QW50aW9xdWlhOkNBTkFTR09SREFTCisyOTpDTzpDT0w6Q09MT01CSUE6QW50aW9xdWlhOkNBUkFDT0xJCiszMDpDTzpDT0w6Q09MT01CSUE6QW50aW9xdWlhOkNBUkFNQU5UQQorMzE6Q086Q09MOkNPTE9NQklBOkFudGlvcXVpYTpDQVJFUEEKKzMyOkNPOkNPTDpDT0xPTUJJQTpBbnRpb3F1aWE6Q0FSTUVOIERFIFZJQk9SQUwKKzMzOkNPOkNPTDpDT0xPTUJJQTpBbnRpb3F1aWE6Q0FST0xJTkEKKzM0OkNPOkNPTDpDT0xPTUJJQTpBbnRpb3F1aWE6Q0FVQ0FTSUEKKzM1OkNPOkNPTDpDT0xPTUJJQTpBbnRpb3F1aWE6Q0hJR09ST0RPCiszNjpDTzpDT0w6Q09MT01CSUE6QW50aW9xdWlhOkNJU05FUk9TCiszNzpDTzpDT0w6Q09MT01CSUE6QW50aW9xdWlhOkNPQ09STkEKKzM4OkNPOkNPTDpDT0xPTUJJQTpBbnRpb3F1aWE6Q09OQ0VQQ0lPTgorMzk6Q086Q09MOkNPTE9NQklBOkFudGlvcXVpYTpDT05DT1JESUEKKzQwOkNPOkNPTDpDT0xPTUJJQTpBbnRpb3F1aWE6Q09QQUNBQkFOQQorNDE6Q086Q09MOkNPTE9NQklBOkFudGlvcXVpYTpEQUJFSUJBCis0MjpDTzpDT0w6Q09MT01CSUE6QW50aW9xdWlhOkRPTiBNQVRJQVMKKzQzOkNPOkNPTDpDT0xPTUJJQTpBbnRpb3F1aWE6RUJFSklDTworNDQ6Q086Q09MOkNPTE9NQklBOkFudGlvcXVpYTpFTCBCQUdSRQorNDU6Q086Q09MOkNPTE9NQklBOkFudGlvcXVpYTpFTlRSRVJSSU9TCis0NjpDTzpDT0w6Q09MT01CSUE6QW50aW9xdWlhOkVOVklHQURPCis0NzpDTzpDT0w6Q09MT01CSUE6QW50aW9xdWlhOkZSRURPTklBCis0ODpDTzpDT0w6Q09MT01CSUE6QW50aW9xdWlhOkZST05USU5PCis0OTpDTzpDT0w6Q09MT01CSUE6QW50aW9xdWlhOkdJUkFMRE8KKzUwOkNPOkNPTDpDT0xPTUJJQTpBbnRpb3F1aWE6R0lSQVJET1RBCis1MTpDTzpDT0w6Q09MT01CSUE6QW50aW9xdWlhOkdPTUVaIFBMQVRBCis1MjpDTzpDT0w6Q09MT01CSUE6QW50aW9xdWlhOkdSQU5BREEKKzUzOkNPOkNPTDpDT0xPTUJJQTpBbnRpb3F1aWE6R1VBREFMVVBFCis1NDpDTzpDT0w6Q09MT01CSUE6QW50aW9xdWlhOkdVQVJORQorNTU6Q086Q09MOkNPTE9NQklBOkFudGlvcXVpYTpHVUFUQVBFCis1NjpDTzpDT0w6Q09MT01CSUE6QW50aW9xdWlhOkhFTElDT05JQQorNTc6Q086Q09MOkNPTE9NQklBOkFudGlvcXVpYTpISVNQQU5JQQorNTg6Q086Q09MOkNPTE9NQklBOkFudGlvcXVpYTpJVEFHVUkKKzU5OkNPOkNPTDpDT0xPTUJJQTpBbnRpb3F1aWE6SVRVQU5HTworNjA6Q086Q09MOkNPTE9NQklBOkFudGlvcXVpYTpKQVJESU4KKzYxOkNPOkNPTDpDT0xPTUJJQTpBbnRpb3F1aWE6SkVSSUNPCis2MjpDTzpDT0w6Q09MT01CSUE6QW50aW9xdWlhOkxBIENFSkEKKzYzOkNPOkNPTDpDT0xPTUJJQTpBbnRpb3F1aWE6TEEgRVNUUkVMTEEKKzY0OkNPOkNPTDpDT0xPTUJJQTpBbnRpb3F1aWE6TEEgVU5JT04KKzY1OkNPOkNPTDpDT0xPTUJJQTpBbnRpb3F1aWE6TElCT1JJTkEKKzY2OkNPOkNPTDpDT0xPTUJJQTpBbnRpb3F1aWE6TUFDRU8KKzY3OkNPOkNPTDpDT0xPTUJJQTpBbnRpb3F1aWE6TUFSSU5JTExBCis2ODpDTzpDT0w6Q09MT01CSUE6QW50aW9xdWlhOk1FREVMTElOCis2OTpDTzpDT0w6Q09MT01CSUE6QW50aW9xdWlhOk1PTlRFQkVMTE8KKzcwOkNPOkNPTDpDT0xPTUJJQTpBbnRpb3F1aWE6TVVSSU5ETworNzE6Q086Q09MOkNPTE9NQklBOkFudGlvcXVpYTpNVVRBVEEKKzcyOkNPOkNPTDpDT0xPTUJJQTpBbnRpb3F1aWE6TkFSSU5PCis3MzpDTzpDT0w6Q09MT01CSUE6QW50aW9xdWlhOk5FQ0hJCis3NDpDTzpDT0w6Q09MT01CSUE6QW50aW9xdWlhOk5FQ09DTEkKKzc1OkNPOkNPTDpDT0xPTUJJQTpBbnRpb3F1aWE6TkVDT0NMSSAoSXMuKQorNzY6Q086Q09MOkNPTE9NQklBOkFudGlvcXVpYTpPTEFZQQorNzc6Q086Q09MOkNPTE9NQklBOkFudGlvcXVpYTpQRU5PTAorNzg6Q086Q09MOkNPTE9NQklBOkFudGlvcXVpYTpQRVFVRQorNzk6Q086Q09MOkNPTE9NQklBOkFudGlvcXVpYTpQVE8gTkFSRSAoTEEgTUFHRC4pCis4MDpDTzpDT0w6Q09MT01CSUE6QW50aW9xdWlhOlBVRUJMT1JSSUNPCis4MTpDTzpDT0w6Q09MT01CSUE6QW50aW9xdWlhOlBVRVJUTyBCRVJSSU8KKzgyOkNPOkNPTDpDT0xPTUJJQTpBbnRpb3F1aWE6UFVFUlRPIFRSSVVORk8KKzgzOkNPOkNPTDpDT0xPTUJJQTpBbnRpb3F1aWE6UkVNRURJT1MKKzg0OkNPOkNPTDpDT0xPTUJJQTpBbnRpb3F1aWE6UkVUSVJPCis4NTpDTzpDT0w6Q09MT01CSUE6QW50aW9xdWlhOlJJT05FR1JPCis4NjpDTzpDT0w6Q09MT01CSUE6QW50aW9xdWlhOlNBQkFOQUxBUkdBCis4NzpDTzpDT0w6Q09MT01CSUE6QW50aW9xdWlhOlNBQkFORVRBCis4ODpDTzpDT0w6Q09MT01CSUE6QW50aW9xdWlhOlNBTEdBUgorODk6Q086Q09MOkNPTE9NQklBOkFudGlvcXVpYTpTQU4gQU5EUkVTCis5MDpDTzpDT0w6Q09MT01CSUE6QW50aW9xdWlhOlNBTiBDQVJMT1MKKzkxOkNPOkNPTDpDT0xPTUJJQTpBbnRpb3F1aWE6U0FOIEZSQU5DSVNDTworOTI6Q086Q09MOkNPTE9NQklBOkFudGlvcXVpYTpTQU4gSkVST05JTU8KKzkzOkNPOkNPTDpDT0xPTUJJQTpBbnRpb3F1aWE6U0FOIEpPU0UgREUgTEEgTU9OVEFOQQorOTQ6Q086Q09MOkNPTE9NQklBOkFudGlvcXVpYTpTQU4gSlVBTiBERSBVUkFCQQorOTU6Q086Q09MOkNPTE9NQklBOkFudGlvcXVpYTpTQU4gTFVJUworOTY6Q086Q09MOkNPTE9NQklBOkFudGlvcXVpYTpTQU4gUEVEUk8KKzk3OkNPOkNPTDpDT0xPTUJJQTpBbnRpb3F1aWE6U0FOIFBFRFJPIERFIFVSQUJBCis5ODpDTzpDT0w6Q09MT01CSUE6QW50aW9xdWlhOlNBTiBSQUZBRUwKKzk5OkNPOkNPTDpDT0xPTUJJQTpBbnRpb3F1aWE6U0FOIFJPUVVFCisxMDA6Q086Q09MOkNPTE9NQklBOkFudGlvcXVpYTpTQU4gVklDRU5URQorMTAxOkNPOkNPTDpDT0xPTUJJQTpBbnRpb3F1aWE6U0FOVEEgQkFSQkFSQQorMTAyOkNPOkNPTDpDT0xPTUJJQTpBbnRpb3F1aWE6U0FOVEEgUk9TQSBERSBPU09TCisxMDM6Q086Q09MOkNPTE9NQklBOkFudGlvcXVpYTpTQU5UTyBET01JTkdPCisxMDQ6Q086Q09MOkNPTE9NQklBOkFudGlvcXVpYTpTQU5UVUFSSU8KKzEwNTpDTzpDT0w6Q09MT01CSUE6QW50aW9xdWlhOlNFR09WSUEKKzEwNjpDTzpDT0w6Q09MT01CSUE6QW50aW9xdWlhOlNPTlNPTgorMTA3OkNPOkNPTDpDT0xPTUJJQTpBbnRpb3F1aWE6U09QRVRSQU4KKzEwODpDTzpDT0w6Q09MT01CSUE6QW50aW9xdWlhOlRBTUVTSVMKKzEwOTpDTzpDT0w6Q09MT01CSUE6QW50aW9xdWlhOlRBUkFaQQorMTEwOkNPOkNPTDpDT0xPTUJJQTpBbnRpb3F1aWE6VEFSU08KKzExMTpDTzpDT0w6Q09MT01CSUE6QW50aW9xdWlhOlRJVElSSUJJCisxMTI6Q086Q09MOkNPTE9NQklBOkFudGlvcXVpYTpUT0xFRE8KKzExMzpDTzpDT0w6Q09MT01CSUE6QW50aW9xdWlhOlRVUkJPCisxMTQ6Q086Q09MOkNPTE9NQklBOkFudGlvcXVpYTpUVVJCTyAoSXMuKQorMTE1OkNPOkNPTDpDT0xPTUJJQTpBbnRpb3F1aWE6VVJBTUlUQQorMTE2OkNPOkNPTDpDT0xPTUJJQTpBbnRpb3F1aWE6VVJSQU8KKzExNzpDTzpDT0w6Q09MT01CSUE6QW50aW9xdWlhOlZBTERJVklBCisxMTg6Q086Q09MOkNPTE9NQklBOkFudGlvcXVpYTpWQUxQQVJBSVNPCisxMTk6Q086Q09MOkNPTE9NQklBOkFudGlvcXVpYTpWRUdBQ0hJCisxMjA6Q086Q09MOkNPTE9NQklBOkFudGlvcXVpYTpWRU5FQ0lBCisxMjE6Q086Q09MOkNPTE9NQklBOkFudGlvcXVpYTpWSUdJQSBERUwgRlVFUlRFCisxMjI6Q086Q09MOkNPTE9NQklBOkFudGlvcXVpYTpZQUxJCisxMjM6Q086Q09MOkNPTE9NQklBOkFudGlvcXVpYTpZQVJVTUFMCisxMjQ6Q086Q09MOkNPTE9NQklBOkFudGlvcXVpYTpZT0xPTUJPCisxMjU6Q086Q09MOkNPTE9NQklBOkFudGlvcXVpYTpZT05ETworMTI2OkNPOkNPTDpDT0xPTUJJQTpBbnRpb3F1aWE6WkFSQUdPWkEKKzE6Q086Q09MOkNPTE9NQklBOlN1Y3JlOkJVRU5BVklTVEEKKzI6Q086Q09MOkNPTE9NQklBOlN1Y3JlOkNBSU1JVE8KKzM6Q086Q09MOkNPTE9NQklBOlN1Y3JlOkNIQUxBTgorNDpDTzpDT0w6Q09MT01CSUE6U3VjcmU6Q09MT1NPIChSSUNBVVJURSkKKzU6Q086Q09MOkNPTE9NQklBOlN1Y3JlOkNPUk9aQUwKKzY6Q086Q09MOkNPTE9NQklBOlN1Y3JlOkdBTEVSQVMKKzc6Q086Q09MOkNPTE9NQklBOlN1Y3JlOkdVQVJBTkRBCis4OkNPOkNPTDpDT0xPTUJJQTpTdWNyZTpMQSBVTklPTgorOTpDTzpDT0w6Q09MT01CSUE6U3VjcmU6TE9TIFBBTE1JVE9TCisxMDpDTzpDT0w6Q09MT01CSUE6U3VjcmU6TUFKQUdVQUwKKzExOkNPOkNPTDpDT0xPTUJJQTpTdWNyZTpNT1JST0EKKzEyOkNPOkNPTDpDT0xPTUJJQTpTdWNyZTpPVkVKQVMKKzEzOkNPOkNPTDpDT0xPTUJJQTpTdWNyZTpQQUxNSVRPCisxNDpDTzpDT0w6Q09MT01CSUE6U3VjcmU6U0FNUFVFUworMTU6Q086Q09MOkNPTE9NQklBOlN1Y3JlOlNBTiBCRU5JVE8gQUJBRAorMTY6Q086Q09MOkNPTE9NQklBOlN1Y3JlOlNBTiBKVUFOIERFIEJFVFVMSUEKKzE3OkNPOkNPTDpDT0xPTUJJQTpTdWNyZTpTQU4gTUFSQ09TCisxODpDTzpDT0w6Q09MT01CSUE6U3VjcmU6U0FOIE9OT0ZSRQorMTk6Q086Q09MOkNPTE9NQklBOlN1Y3JlOlNBTiBPTk9GUkUgKElzLikKKzIwOkNPOkNPTDpDT0xPTUJJQTpTdWNyZTpTQU4gUEVEUk8KKzIxOkNPOkNPTDpDT0xPTUJJQTpTdWNyZTpTSU5DRQorMjI6Q086Q09MOkNPTE9NQklBOlN1Y3JlOlNJTkNFTEVKTworMjM6Q086Q09MOkNPTE9NQklBOlN1Y3JlOlNVQ1JFCisyNDpDTzpDT0w6Q09MT01CSUE6U3VjcmU6VE9MVQorMjU6Q086Q09MOkNPTE9NQklBOlN1Y3JlOlRPTFVWSUVKTworMTpDTzpDT0w6Q09MT01CSUE6Qm9saXZhcjpBQ0hJCisyOkNPOkNPTDpDT0xPTUJJQTpCb2xpdmFyOkFMVE9TIERFTCBST1NBUklPCiszOkNPOkNPTDpDT0xPTUJJQTpCb2xpdmFyOkFSSk9OQQorNDpDTzpDT0w6Q09MT01CSUE6Qm9saXZhcjpCQVJSQU5DTyBERSBMT0JBCis1OkNPOkNPTDpDT0xPTUJJQTpCb2xpdmFyOkNBTEFNQVIKKzY6Q086Q09MOkNPTE9NQklBOkJvbGl2YXI6Q0FOVEFHQUxMTworNzpDTzpDT0w6Q09MT01CSUE6Qm9saXZhcjpDQVJUQUdFTkEgKERJU1QuIEVTUC4pCis4OkNPOkNPTDpDT0xPTUJJQTpCb2xpdmFyOkNBUlRBR0VOQSAoRElTVC4gRVNQLikgKEkKKzk6Q086Q09MOkNPTE9NQklBOkJvbGl2YXI6Q0lDVUNPCisxMDpDTzpDT0w6Q09MT01CSUE6Qm9saXZhcjpDT1JET0JBCisxMTpDTzpDT0w6Q09MT01CSUE6Qm9saXZhcjpFTCBDQVJNRU4gREUgQk9MSVZBUgorMTI6Q086Q09MOkNPTE9NQklBOkJvbGl2YXI6RUwgR1VBTU8KKzEzOkNPOkNPTDpDT0xPTUJJQTpCb2xpdmFyOkhBVElMTE8gREUgTE9CQQorMTQ6Q086Q09MOkNPTE9NQklBOkJvbGl2YXI6TUFIQVRFUworMTU6Q086Q09MOkNPTE9NQklBOkJvbGl2YXI6TUFSR0FSSVRBCisxNjpDTzpDT0w6Q09MT01CSUE6Qm9saXZhcjpNQVJJQSBMQSBCQUpBCisxNzpDTzpDT0w6Q09MT01CSUE6Qm9saXZhcjpNT01QT1MKKzE4OkNPOkNPTDpDT0xPTUJJQTpCb2xpdmFyOk1PTlRFQ1JJU1RPCisxOTpDTzpDT0w6Q09MT01CSUE6Qm9saXZhcjpNT1JBTEVTCisyMDpDTzpDT0w6Q09MT01CSUE6Qm9saXZhcjpQSU5JTExPUworMjE6Q086Q09MOkNPTE9NQklBOkJvbGl2YXI6UklPIFZJRUpPCisyMjpDTzpDT0w6Q09MT01CSUE6Qm9saXZhcjpTQU4gRVNUQU5JU0xBTworMjM6Q086Q09MOkNPTE9NQklBOkJvbGl2YXI6U0FOIEZFUk5BTkRPCisyNDpDTzpDT0w6Q09MT01CSUE6Qm9saXZhcjpTQU4gSkFDSU5UTworMjU6Q086Q09MOkNPTE9NQklBOkJvbGl2YXI6U0FOIEpVQU4gTkVQT01VQ0VOTworMjY6Q086Q09MOkNPTE9NQklBOkJvbGl2YXI6U0FOIE1BUlRJTiBERSBMT0JBCisyNzpDTzpDT0w6Q09MT01CSUE6Qm9saXZhcjpTQU4gUEFCTE8KKzI4OkNPOkNPTDpDT0xPTUJJQTpCb2xpdmFyOlNBTlRBIENBVEFMSU5BCisyOTpDTzpDT0w6Q09MT01CSUE6Qm9saXZhcjpTQU5UQSBST1NBCiszMDpDTzpDT0w6Q09MT01CSUE6Qm9saXZhcjpTQU5UQSBST1NBIERFTCBTVVIKKzMxOkNPOkNPTDpDT0xPTUJJQTpCb2xpdmFyOlNJTUlUSQorMzI6Q086Q09MOkNPTE9NQklBOkJvbGl2YXI6U09QTEFWSUVOVE8KKzMzOkNPOkNPTDpDT0xPTUJJQTpCb2xpdmFyOlRBTEFJR1VBIE5VRVZPCiszNDpDTzpDT0w6Q09MT01CSUE6Qm9saXZhcjpUVVJCQUNPCiszNTpDTzpDT0w6Q09MT01CSUE6Qm9saXZhcjpUVVJCQU5BCiszNjpDTzpDT0w6Q09MT01CSUE6Qm9saXZhcjpWSUxMQU5VRVZBCiszNzpDTzpDT0w6Q09MT01CSUE6Qm9saXZhcjpaQU1CUkFOTwpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L0NPTS9DT01fQURNSU4xX0xFWC50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvQ09NL0NPTV9BRE1JTjFfTEVYLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YjgwMDM2Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L0NPTS9DT01fQURNSU4xX0xFWC50eHQKQEAgLTAsMCArMSw1IEBACisxOktNLUE6S006QU5KT1VBTgorMjpLTS1HOktNOkdSQU5EIENPTU9SRQorMzpLTS1JTE06S006SUxFIERFIE1BWU9UVEUgKEZSLikKKzQ6S00tTTpLTTpNV0FMSQorNTpLTS1OWjpLTTpOWldBTkkKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9DT00vQ09NX0FETUlOMl9MRVgudHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L0NPTS9DT01fQURNSU4yX0xFWC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDRiMmFiNQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9DT00vQ09NX0FETUlOMl9MRVgudHh0CkBAIC0wLDAgKzEsNCBAQAorMTpLTTpDT006Q09NT1JPUzpNd2FsaTpDT00uTDIuNAorMTpLTTpDT006Q09NT1JPUzpJbGUgZGUgTWF5b3R0ZSAoRnIuKTpDT00uTDIuMworMTpLTTpDT006Q09NT1JPUzpOendhbmk6Q09NLkwyLjIKKzE6S006Q09NOkNPTU9ST1M6R3JhbmQgQ29tb3JlOkNPTS5MMi4xCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvQ1BWL0NQVl9BRE1JTjFfTEVYLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9DUFYvQ1BWX0FETUlOMV9MRVgudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM3ZjVlNGYKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvQ1BWL0NQVl9BRE1JTjFfTEVYLnR4dApAQCAtMCwwICsxLDE5IEBACisxOkNWLUJWOkNWOkJPQSBWSVNUQQorMjpDVi1CUjpDVjpCUkFWQQorMzpDVi1DUzpDVjpDQUxIRVRBIERFIFNPIE1JR1VFTAorNDpDVi1GTzpDVjpGT0dPCis1OkNWLU1BOkNWOk1BSU8KKzY6Q1YtTU86Q1Y6TU9TVEVJUk9TCis3OkNWLVBBOkNWOlBBTAorODpDVi1QTjpDVjpQT1JUTyBOT1ZPCis5OkNWLVBSOkNWOlBSQUlBCisxMDpDVi1SRzpDVjpSSUJFSVJBIEdSQU5ERQorMTE6Q1YtU0w6Q1Y6U0FMCisxMjpDVi1DQTpDVjpTQU5UQSBDQVRBUklOQQorMTM6Q1YtQ1I6Q1Y6U0FOVEEgQ1JVWgorMTQ6Q1YtU09OOkNWOlNBTlRPIEFOVEFPCisxNTpDVi1TTjpDVjpTQU8gTklDT0xBVQorMTY6Q1YtU1Y6Q1Y6U0FPIFZJQ0VOVEUKKzE3OkNWLVNEOkNWOlNPIERPTUlOR09TCisxODpDVi1TRjpDVjpTTyBGSUxJUEUKKzE5OkNWLVRBOkNWOlRBUlJBRkFMCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvQ1BWL0NQVl9BRE1JTjJfTEVYLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9DUFYvQ1BWX0FETUlOMl9MRVgudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZjNWU2MDAKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvQ1BWL0NQVl9BRE1JTjJfTEVYLnR4dApAQCAtMCwwICsxLDkgQEAKKzE6Q1Y6Q1BWOkNBUEUgVkVSREU6U2FsOk5BCisxOkNWOkNQVjpDQVBFIFZFUkRFOlNhbnRpYWdvOk5BCisxOkNWOkNQVjpDQVBFIFZFUkRFOkZvZ286TkEKKzE6Q1Y6Q1BWOkNBUEUgVkVSREU6U2FvIE5pY29sYXU6TkEKKzE6Q1Y6Q1BWOkNBUEUgVkVSREU6Qm9hIFZpc3RhOk5BCisxOkNWOkNQVjpDQVBFIFZFUkRFOlNhbyBWaWNlbnRlOk5BCisxOkNWOkNQVjpDQVBFIFZFUkRFOk1haW86TkEKKzE6Q1Y6Q1BWOkNBUEUgVkVSREU6QnJhdmE6TkEKKzE6Q1Y6Q1BWOkNBUEUgVkVSREU6U2FudG8gQW50YW86TkEKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9DWkUvQ1pFX0FETUlOMV9MRVgudHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L0NaRS9DWkVfQURNSU4xX0xFWC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzIyNWE2OAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9DWkUvQ1pFX0FETUlOMV9MRVgudHh0CkBAIC0wLDAgKzEsMTUgQEAKKzE6Q1MtQlI6Q1M6QlJBVElTTEFWQQorMjpDUy1DRzpDUzpDUk5BIEdPUkEKKzM6Q1MtSkM6Q1M6SklIT0NFU0tZIEtSQUoKKzQ6Q1MtSk06Q1M6SklIT01PUkFWU0tZIEtSQUoKKzU6Q1MtS006Q1M6S09TT1ZPIE1FVE9ISUpBCis2OkNTLVBSOkNTOlBSQUhBCis3OkNTLVNFOkNTOlNFVkVST0NFU0tZIEtSQUoKKzg6Q1MtU1Y6Q1M6U0VWRVJPTU9SQVZTS1kgS1JBSgorOTpDUy1TUjpDUzpTVFJFRE9DRVNLWSBLUkFKCisxMDpDUy1TVDpDUzpTVFJFRE9MU0xPVkVOU0tZIEtSQUoKKzExOkNTLVZPOkNTOlZPSlZPRElOQQorMTI6Q1MtVlk6Q1M6VllDSE9ET0NFU0tZIEtSQUoKKzEzOkNTLVlDOkNTOllDSE9ET1NMT1ZFTlNLSSBLUkFKCisxNDpDUy1aRDpDUzpaQVBBRE9DRVNLWSBLUkFKCisxNTpDUy1aQTpDUzpaQVBBRE9TTE9WRU5TS1kgS1JBSgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L0NaRS9DWkVfQURNSU4yX0xFWC50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvQ1pFL0NaRV9BRE1JTjJfTEVYLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNjlkZTI5Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L0NaRS9DWkVfQURNSU4yX0xFWC50eHQKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9ERVUvREVVX0FETUlOMV9MRVgudHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L0RFVS9ERVVfQURNSU4xX0xFWC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2I2M2EwMgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9ERVUvREVVX0FETUlOMV9MRVgudHh0CkBAIC0wLDAgKzEsNDAgQEAKKzE6REUtQVI6REU6QVJOU0JFUkcKKzI6REUtQlc6REU6QkFERU4gV9xSVFRFTUJFUkcKKzM6REUtQkU6REU6QkVSTElOCis0OkRFLUJCOkRFOkJSQU5ERU5CVVJHCis1OkRFLUJSOkRFOkJSQVVOU0NIV0VJRworNjpERS1IQjpERTpCUkVNRU4KKzc6REUtQ006REU6Q0hFTU5JVFoKKzg6REUtREE6REU6REVTU0FVCis5OkRFLURUOkRFOkRFVE1PTEQKKzEwOkRFLURSOkRFOkRSRVNERU4KKzExOkRFLURVOkRFOkRVRVNTRUxET1JGCisxMjpERS1GUjpERTpGUkVJQlVSRworMTM6REUtR0k6REU6R0lFU1NFTgorMTQ6REUtSEg6REU6SEFNQlVSRworMTU6REUtSEE6REU6SEFOTk9WRVIKKzE2OkRFLUhFOkRFOkhFU1NFTgorMTc6REUtS0E6REU6S0FTU0VMCisxODpERS1LTzpERTpLT0VMTgorMTk6REQtTFA6REU6TEVJUFpJRworMjA6REUtTFU6REU6TFVFTkVCVVJHCisyMTpERS1NQTpERTpNQUdERUJVUkcKKzIyOkRFLU1WOkRFOk1FQ0tMRU5CVVJHIFZPUlBPTU1FUk4KKzIzOkRFLU1UOkRFOk1JVFRFTEZSQU5LRU4KKzI0OkRFLU1VOkRFOk1VRU5TVEVSCisyNTpERS1OSTpERTpOSUVERVJCQVlFUk4KKzI2OkRFLU5XOkRFOk5PUkRSSEVJTiBXRVNURkFMRU4KKzI3OkRFLUJZOkRFOk9CRVJCQVlFUk4KKzI4OkRFLU9COkRFOk9CRVJGUkFOS0VOCisyOTpERS1SSDpERTpSSEVJTkhFU1NFTgorMzA6REUtUlA6REU6UkhFSU5IRVNTRU4gUEZBTFoKKzMxOkRFLVNMOkRFOlNBQVJMQU5ECiszMjpERS1TTjpERTpTQUNIU0VOCiszMzpERS1TSDpERTpTQ0hXQUJFTgorMzQ6REUtU1Q6REU6U1RVVFRHQVJUCiszNTpERS1USDpERTpUSFVSSU5HRU4KKzM2OkRFLVRJOkRFOlRSSUVSCiszNzpERS1UVTpERTpUVUVCSU5HRU4KKzM4OkRFLVVUOkRFOlVOVEVSRlJBTktFTgorMzk6REUtVU46REU6VU5URVJGUkFOS1JFTgorNDA6REUtV0U6REU6V0VTRVIgRU1TCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvREVVL0RFVV9BRE1JTjJfTEVYLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9ERVUvREVVX0FETUlOMl9MRVgudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2OWRlMjkKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvREVVL0RFVV9BRE1JTjJfTEVYLnR4dApkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L0ROSy9ETktfQURNSU4xX0xFWC50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvRE5LL0ROS19BRE1JTjFfTEVYLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YTg4NTNlCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L0ROSy9ETktfQURNSU4xX0xFWC50eHQKQEAgLTAsMCArMSwxOSBAQAorMTpESy0wNDA6REs6Qk9STkhPTE0KKzI6REstNDc6REs6RlJFREVSSUtTQkVSRworMzpESy0wMjA6REs6RlJFREVSSUtTQk9SRworNDpESy0wNDI6REs6RllOCis1OkRLLTAyMjpESzpIT1ZFRFNUQURTUkVHSU9ORU4KKzY6REstMDpESzpLQkVOSEFWTgorNzpESy0wOkRLOktCRU5IQVZOCis4OkRLLTA4MDpESzpOT1JESllMTEFORAorOTpESy0wMjM6REs6T1NUIEZPUiBTVE9SRUJBRUxUCisxMDpESy0wNzA6REs6UkhVUworMTE6REstMDU1OkRLOlJJQkUKKzEyOkRLLTA2NTpESzpSSU5HS0JJTkcKKzEzOkRLLTAyNTpESzpST1NLSUxERQorMTQ6REstMDUwOkRLOlNOREVSSllMTEFORAorMTU6REstMDM1OkRLOlNUT1JTVFJNCisxNjpESy0wNjA6REs6VkVKTEUKKzE3OkRLLTAyMTpESzpWRVNUIEZPUiBTVE9SRUJBRUxUCisxODpESy0wMzA6REs6VkVTVFNKTExBTkQKKzE5OkRLLTA3NjpESzpWSUJPUkcKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9ETksvRE5LX0FETUlOMl9MRVgudHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L0ROSy9ETktfQURNSU4yX0xFWC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTY5ZGUyOQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9ETksvRE5LX0FETUlOMl9MRVgudHh0CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvRFpBL0RaQV9BRE1JTjFfTEVYLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9EWkEvRFpBX0FETUlOMV9MRVgudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjExM2NjNWQKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvRFpBL0RaQV9BRE1JTjFfTEVYLnR4dApAQCAtMCwwICsxLDQ5IEBACisxOkRaLTA6RFo6QURSQVIKKzI6RFotNDQ6RFo6QUlOIERBRkxBCiszOkRaLTQ2OkRaOkFJTiBUQU1PVUNIRU5UCis0OkRaLTY6RFo6QUxHRVIKKzU6RFotMjM6RFo6QU5OQUJBCis2OkRaLTA1OkRaOkJBVE5BCis3OkRaLTA4OkRaOkJFQ0hBUgorODpEWi0wNjpEWjpCRUpBSUEKKzk6RFotMDc6RFo6QklTS1JBCisxMDpEWi0wOTpEWjpCTElEQQorMTE6RFotMzQ6RFo6Qk9SSkJPVUFSSVJFSgorMTI6RFotNTQ6RFo6Qk9VSVJBCisxMzpEWi0zNTpEWjpCT1VNRVJERVMKKzE0OkRaLTAyOkRaOkNITEVGCisxNTpEWi0yNTpEWjpDT05TVEFOVElORQorMTY6RFotNzpEWjpESkVMRkEKKzE3OkRaLTMyOkRaOkVMIEJBWUFESAorMTg6RFotMzk6RFo6RUwgT1VFRAorMTk6RFotMzY6RFo6RUwgVEFSRgorMjA6RFotNDc6RFo6R0hBUkRBU0EKKzIxOkRaLTI0OkRaOkdVRUxNQQorMjI6RFotMzM6RFo6SUxMSVpJCisyMzpEWi04OkRaOkpJSkVMCisyNDpEWi00MDpEWjpLSEVOQ0hFTEEKKzI1OkRaLTAzOkRaOkxBR0hPVUFUCisyNjpEWi0yOTpEWjpNQVNDQVJBCisyNzpEWi0yNjpEWjpNRURJQQorMjg6RFotNDM6RFo6TUlMQQorMjk6RFotMjc6RFo6TU9TVEFHSEFORU0KKzMwOkRaLTI4OkRaOk1TSUxBCiszMTpEWi00NTpEWjpOQUFNQQorMzI6RFotNjM6RFo6T1JBTgorMzM6RFotMzA6RFo6T1VBUkdMQQorMzQ6RFotMDQ6RFo6T1VNIEVMIEJPVUFHSEkKKzM1OkRaLTQ4OkRaOlJFTElaQU5FCiszNjpEWi0yMDpEWjpTQUlEQQorMzc6RFotOTpEWjpTRVRJRgorMzg6RFotMjI6RFo6U0lESSBCRUwgQUJCRVMKKzM5OkRaLTYyOkRaOlNLSUtEQQorNDA6RFotNDpEWjpTT1VLIEFIUkFTCis0MTpEWi0xOkRaOlRBTUFOR0hBU1NFVAorNDI6RFotVEFNOkRaOlRBTUFOUkFTU0VUCis0MzpEWi01MjpEWjpURUJFU1NBCis0NDpEWi0zNzpEWjpURU5ET1VGCis0NTpEWi02NDpEWjpUSUFSRVQKKzQ2OkRaLTQyOkRaOlRJUEFaQQorNDc6RFotMzg6RFo6VElTU0VNU0lMVAorNDg6RFotNTpEWjpUSVpJIE9VWk9VCis0OTpEWi02NTpEWjpUTEVNQ0VOCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvRFpBL0RaQV9BRE1JTjJfTEVYLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9EWkEvRFpBX0FETUlOMl9MRVgudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY0MDdiNzQKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvRFpBL0RaQV9BRE1JTjJfTEVYLnR4dApAQCAtMCwwICsxLDQ4IEBACisxOkRaOkRaQTpBTEdFUklBOlRsZW1jZW46RFpBLkwyLjQ1CisxOkRaOkRaQTpBTEdFUklBOlRpc3NlbXNpbHQ6RFpBLkwyLjQwCisxOkRaOkRaQTpBTEdFUklBOkJlY2hhcjpEWkEuTDIuMzIKKzE6RFo6RFpBOkFMR0VSSUE6SWxsaXppOkRaQS5MMi4yOQorMTpEWjpEWkE6QUxHRVJJQTpHaGFyZGFTYTpEWkEuTDIuMTEKKzE6RFo6RFpBOkFMR0VSSUE6T3VtIEVsIEJvdWFnaGk6RFpBLkwyLjI0CisxOkRaOkRaQTpBTEdFUklBOlRlbmRvdWY6RFpBLkwyLjEwCisxOkRaOkRaQTpBTEdFUklBOk9yYW46RFpBLkwyLjE5CisxOkRaOkRaQTpBTEdFUklBOkFkcmFyOkRaQS5MMi40NAorMTpEWjpEWkE6QUxHRVJJQTpNZWRpYTpEWkEuTDIuNDEKKzE6RFo6RFpBOkFMR0VSSUE6Q2hsZWY6RFpBLkwyLjIyCisxOkRaOkRaQTpBTEdFUklBOlNhaWRhOkRaQS5MMi4zNworMTpEWjpEWkE6QUxHRVJJQTpMYWdob3VhdDpEWkEuTDIuMTcKKzE6RFo6RFpBOkFMR0VSSUE6Qm91aXJhOkRaQS5MMi40OAorMTpEWjpEWkE6QUxHRVJJQTpTaWRpLUJlbC1BYmJlczpEWkEuTDIuOAorMTpEWjpEWkE6QUxHRVJJQTpUaWFyZXQ6RFpBLkwyLjM1CisxOkRaOkRaQTpBTEdFUklBOlNvdWsgQWhyYXM6RFpBLkwyLjIwCisxOkRaOkRaQTpBTEdFUklBOkFubmFiYTpEWkEuTDIuNAorMTpEWjpEWkE6QUxHRVJJQTpSZWxpemFuZTpEWkEuTDIuNgorMTpEWjpEWkE6QUxHRVJJQTpUaXBhemE6RFpBLkwyLjMxCisxOkRaOkRaQTpBTEdFUklBOkJvcmpib3VhcmlyZWo6RFpBLkwyLjE2CisxOkRaOkRaQTpBTEdFUklBOkJpc2tyYTpEWkEuTDIuMQorMTpEWjpEWkE6QUxHRVJJQTpNYXNjYXJhOkRaQS5MMi4zNAorMTpEWjpEWkE6QUxHRVJJQTpDb25zdGFudGluZTpEWkEuTDIuNDcKKzE6RFo6RFpBOkFMR0VSSUE6QmVqYWlhOkRaQS5MMi4zOAorMTpEWjpEWkE6QUxHRVJJQTpFbCBUYXJmOkRaQS5MMi4zMAorMTpEWjpEWkE6QUxHRVJJQTpBbGdlcjpEWkEuTDIuMjcKKzE6RFo6RFpBOkFMR0VSSUE6RWwgQmF5YWRoOkRaQS5MMi4xMworMTpEWjpEWkE6QUxHRVJJQTpUYW1hbnJhc3NldDpEWkEuTDIuMgorMTpEWjpEWkE6QUxHRVJJQTpBaW4gRGFmbGE6RFpBLkwyLjIzCisxOkRaOkRaQTpBTEdFUklBOk1pbGE6RFpBLkwyLjMKKzE6RFo6RFpBOkFMR0VSSUE6TmFhbWE6RFpBLkwyLjI1CisxOkRaOkRaQTpBTEdFUklBOkJhdG5hOkRaQS5MMi4yNgorMTpEWjpEWkE6QUxHRVJJQTpUZWJlc3NhOkRaQS5MMi4xOAorMTpEWjpEWkE6QUxHRVJJQTpKaWplbDpEWkEuTDIuMzMKKzE6RFo6RFpBOkFMR0VSSUE6TW9zdGFnaGFuZW06RFpBLkwyLjUKKzE6RFo6RFpBOkFMR0VSSUE6Qm91bWVyZGVzOkRaQS5MMi4zOQorMTpEWjpEWkE6QUxHRVJJQTpHdWVsbWE6RFpBLkwyLjIxCisxOkRaOkRaQTpBTEdFUklBOlNldGlmOkRaQS5MMi4yOAorMTpEWjpEWkE6QUxHRVJJQTpLaGVuY2hlbGE6RFpBLkwyLjE0CisxOkRaOkRaQTpBTEdFUklBOlRpemktb3V6b3U6RFpBLkwyLjkKKzE6RFo6RFpBOkFMR0VSSUE6RGplbGZhOkRaQS5MMi40MworMTpEWjpEWkE6QUxHRVJJQTpPdWFyZ2xhOkRaQS5MMi4zNgorMTpEWjpEWkE6QUxHRVJJQTpTa2lrZGE6RFpBLkwyLjQ2CisxOkRaOkRaQTpBTEdFUklBOkFpbiBUYW1vdWNoZW50OkRaQS5MMi40MgorMTpEWjpEWkE6QUxHRVJJQTpCbGlkYTpEWkEuTDIuMTUKKzE6RFo6RFpBOkFMR0VSSUE6TXNpbGE6RFpBLkwyLjcKKzE6RFo6RFpBOkFMR0VSSUE6RWwgT3VlZDpEWkEuTDIuMTIKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9FQ1UvRUNVX0FETUlOMV9MRVgudHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L0VDVS9FQ1VfQURNSU4xX0xFWC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjk4OGMxNwotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9FQ1UvRUNVX0FETUlOMV9MRVgudHh0CkBAIC0wLDAgKzEsMjMgQEAKKzE6RUMtQTpFQzpBWlVBWQorMjpFQy1COkVDOkJPTElWQVIKKzM6RUMtRjpFQzpDQU5BUgorNDpFQy1DOkVDOkNBUkNISQorNTpFQy1IOkVDOkNISU1CT1JBWk8KKzY6RUMtWDpFQzpDT1RPUEFYSQorNzpFQy1POkVDOkVMIE9STworODpFQy1FOkVDOkVTTUVSQUxEQVMKKzk6RUMtVzpFQzpHQUxQQUdPUworMTA6RUMtRzpFQzpHVUFZQVMKKzExOkVDLUk6RUM6SU1CQUJVUkEKKzEyOkVDLUw6RUM6TE9KQQorMTM6RUMtUjpFQzpMT1MgUklPUworMTQ6RUMtTTpFQzpNQU5BQkkKKzE1OkVDLVM6RUM6TU9ST05BIFNBTlRJQUdPCisxNjpFQy1OOkVDOk5BUE8KKzE3OkVDLUQ6RUM6T1JFTExBTkEKKzE4OkVDLVk6RUM6UEFTVEFaQQorMTk6RUMtUDpFQzpQSUNISU5DSEEKKzIwOkVDLVU6RUM6U1VDVU1CSU9TCisyMTpFQy1UOkVDOlRVTkdVUkFIVUEKKzIyOkVDLVo6RUM6WkFNT1JBIENISU5DSElQRQorMjM6RUMtWk5EOkVDOlpPTkEgTk8gREVMSU1UREEKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9FQ1UvRUNVX0FETUlOMl9MRVgudHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L0VDVS9FQ1VfQURNSU4yX0xFWC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzBmMzk4MQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9FQ1UvRUNVX0FETUlOMl9MRVgudHh0CkBAIC0wLDAgKzEsMjA1IEBACisxOkVDOkVDVTpFQ1VBRE9SOkJPTElWQVI6Q2FsdW1hCisyOkVDOkVDVTpFQ1VBRE9SOkJPTElWQVI6Q2hpbGxhbmVzCiszOkVDOkVDVTpFQ1VBRE9SOkJPTElWQVI6Q2hpbWJvCis0OkVDOkVDVTpFQ1VBRE9SOkJPTElWQVI6RWNoZWFuZGlhCis1OkVDOkVDVTpFQ1VBRE9SOkJPTElWQVI6R3VhcmFuZGEKKzY6RUM6RUNVOkVDVUFET1I6Qk9MSVZBUjpMYXMgTmF2ZXMKKzc6RUM6RUNVOkVDVUFET1I6Qk9MSVZBUjpTYW4gTWlndWVsCisxOkVDOkVDVTpFQ1VBRE9SOkdVQVlBUzpBbGZyZWRvIEJhcXVlcml6CisyOkVDOkVDVTpFQ1VBRE9SOkdVQVlBUzpCYWxhbworMzpFQzpFQ1U6RUNVQURPUjpHVUFZQVM6QmFsemFyCis0OkVDOkVDVTpFQ1VBRE9SOkdVQVlBUzpDb2xpbWVzCis1OkVDOkVDVTpFQ1VBRE9SOkdVQVlBUzpDb3JvbmVsIE1hcmNlbGluCis2OkVDOkVDVTpFQ1VBRE9SOkdVQVlBUzpEYXVsZQorNzpFQzpFQ1U6RUNVQURPUjpHVUFZQVM6RHVyYW4KKzg6RUM6RUNVOkVDVUFET1I6R1VBWUFTOkVsIEVtcGFsbWUKKzk6RUM6RUNVOkVDVUFET1I6R1VBWUFTOkd1YXlhcXVpbAorMTA6RUM6RUNVOkVDVUFET1I6R1VBWUFTOkxhIExpYmVydGFkCisxMTpFQzpFQ1U6RUNVQURPUjpHVUFZQVM6TG9tYXMgZGUgU2FyZ2VudAorMTI6RUM6RUNVOkVDVUFET1I6R1VBWUFTOk1pbGFncm8KKzEzOkVDOkVDVTpFQ1VBRE9SOkdVQVlBUzpOYXJhbmphbAorMTQ6RUM6RUNVOkVDVUFET1I6R1VBWUFTOk5hcmFuaml0bworMTU6RUM6RUNVOkVDVUFET1I6R1VBWUFTOk5vYm9sCisxNjpFQzpFQ1U6RUNVQURPUjpHVUFZQVM6UGFsZXN0aW5hCisxNzpFQzpFQ1U6RUNVQURPUjpHVUFZQVM6UGVkcm8gQ2FyYm8KKzE4OkVDOkVDVTpFQ1VBRE9SOkdVQVlBUzpQbGF5YXMKKzE5OkVDOkVDVTpFQ1VBRE9SOkdVQVlBUzpTYWxpbmFzCisyMDpFQzpFQ1U6RUNVQURPUjpHVUFZQVM6U2FtYm9yb25kb24KKzIxOkVDOkVDVTpFQ1VBRE9SOkdVQVlBUzpTYW50YSBFbGVuYQorMjI6RUM6RUNVOkVDVUFET1I6R1VBWUFTOlNhbnRhIEx1Y2lhCisyMzpFQzpFQ1U6RUNVQURPUjpHVUFZQVM6U2ltb24gQm9saXZhcgorMjQ6RUM6RUNVOkVDVUFET1I6R1VBWUFTOlVyYmluYSBKYWRvCisyNTpFQzpFQ1U6RUNVQURPUjpHVUFZQVM6WWFndWFjaGkKKzE6RUM6RUNVOkVDVUFET1I6RUwgT1JPOkFyZW5pbGxhcworMjpFQzpFQ1U6RUNVQURPUjpFTCBPUk86QXRhaHVhbHBhCiszOkVDOkVDVTpFQ1VBRE9SOkVMIE9STzpCYWxzYXMKKzQ6RUM6RUNVOkVDVUFET1I6RUwgT1JPOkNoaWxsYQorNTpFQzpFQ1U6RUNVQURPUjpFTCBPUk86RWwgR3VhYm8KKzY6RUM6RUNVOkVDVUFET1I6RUwgT1JPOkh1YXF1aWxsYXMKKzc6RUM6RUNVOkVDVUFET1I6RUwgT1JPOklzbGEgQ29ycmVhCis4OkVDOkVDVTpFQ1VBRE9SOkVMIE9STzpJc2xhIE1hdGFwYWxvCis5OkVDOkVDVTpFQ1VBRE9SOkVMIE9STzpMYXMgTGFqYXMKKzEwOkVDOkVDVTpFQ1VBRE9SOkVMIE9STzpNYWNoYWxhCisxMTpFQzpFQ1U6RUNVQURPUjpFTCBPUk86TWFyY2FiZWxpCisxMjpFQzpFQ1U6RUNVQURPUjpFTCBPUk86UGFzYWplCisxMzpFQzpFQ1U6RUNVQURPUjpFTCBPUk86UGluYXMKKzE0OkVDOkVDVTpFQ1VBRE9SOkVMIE9STzpQb3J0b3ZlbG8KKzE1OkVDOkVDVTpFQ1VBRE9SOkVMIE9STzpTYW50YSBSb3NhCisxNjpFQzpFQ1U6RUNVQURPUjpFTCBPUk86WmFydW1hCisxOkVDOkVDVTpFQ1VBRE9SOk1PUk9OQSBTQU5USUFHTzpHdWFsYXF1aXphCisyOkVDOkVDVTpFQ1VBRE9SOk1PUk9OQSBTQU5USUFHTzpIdWFtYm95YQorMzpFQzpFQ1U6RUNVQURPUjpNT1JPTkEgU0FOVElBR086TW9yb25hCis0OkVDOkVDVTpFQ1VBRE9SOk1PUk9OQSBTQU5USUFHTzpQYWxvcmEKKzU6RUM6RUNVOkVDVUFET1I6TU9ST05BIFNBTlRJQUdPOlNhbiBKdWFuIEJvc2NvCis2OkVDOkVDVTpFQ1VBRE9SOk1PUk9OQSBTQU5USUFHTzpTYW50aWFnbworNzpFQzpFQ1U6RUNVQURPUjpNT1JPTkEgU0FOVElBR086U3VjdWEKKzE6RUM6RUNVOkVDVUFET1I6UEFTVEFaQTpNZXJhCisyOkVDOkVDVTpFQ1VBRE9SOlBBU1RBWkE6UGFzdGF6YQorMzpFQzpFQ1U6RUNVQURPUjpQQVNUQVpBOlNhbnRhIENsYXJhCisxOkVDOkVDVTpFQ1VBRE9SOkFaVUFZOkNob3JkZWxlZworMjpFQzpFQ1U6RUNVQURPUjpBWlVBWTpDdWVuY2EKKzM6RUM6RUNVOkVDVUFET1I6QVpVQVk6RWwgUGFuCis0OkVDOkVDVTpFQ1VBRE9SOkFaVUFZOkdpcm9uCis1OkVDOkVDVTpFQ1VBRE9SOkFaVUFZOkd1YWxhY2VvCis2OkVDOkVDVTpFQ1VBRE9SOkFaVUFZOk5hYm9uCis3OkVDOkVDVTpFQ1VBRE9SOkFaVUFZOk9uYQorODpFQzpFQ1U6RUNVQURPUjpBWlVBWTpQYXV0ZQorOTpFQzpFQ1U6RUNVQURPUjpBWlVBWTpQdWNhcmEKKzEwOkVDOkVDVTpFQ1VBRE9SOkFaVUFZOlNhbiBGZXJuYW5kbworMTE6RUM6RUNVOkVDVUFET1I6QVpVQVk6U2FudGEgSXNhYmVsCisxMjpFQzpFQ1U6RUNVQURPUjpBWlVBWTpTZXZpbGxhIGRlIE9ybworMTM6RUM6RUNVOkVDVUFET1I6QVpVQVk6U2lzc2lnCisxOkVDOkVDVTpFQ1VBRE9SOk5BUE86QWd1YXJpY28KKzI6RUM6RUNVOkVDVUFET1I6TkFQTzpBcmNoaWRvbmEKKzM6RUM6RUNVOkVDVUFET1I6TkFQTzpFbCBDaGFjbworNDpFQzpFQ1U6RUNVQURPUjpOQVBPOkxhIEpveWEgZGUgbG9zIFMKKzU6RUM6RUNVOkVDVUFET1I6TkFQTzpMb3JldG8KKzY6RUM6RUNVOkVDVUFET1I6TkFQTzpPcmVsbGFuYQorNzpFQzpFQ1U6RUNVQURPUjpOQVBPOlF1aWpvcworODpFQzpFQ1U6RUNVQURPUjpOQVBPOlRlbmEKKzE6RUM6RUNVOkVDVUFET1I6TUFOQUJJOjI0IGRlIE1heW8KKzI6RUM6RUNVOkVDVUFET1I6TUFOQUJJOkJvbGl2YXIKKzM6RUM6RUNVOkVDVUFET1I6TUFOQUJJOkNob25lCis0OkVDOkVDVTpFQ1VBRE9SOk1BTkFCSTpFbCBDYXJtZW4KKzU6RUM6RUNVOkVDVUFET1I6TUFOQUJJOkVzdCBkZWwgTWVkaW8KKzY6RUM6RUNVOkVDVUFET1I6TUFOQUJJOkZsYXZpbyBBbGZhcm8KKzc6RUM6RUNVOkVDVUFET1I6TUFOQUJJOkkuIFNhbGFuZ28KKzg6RUM6RUNVOkVDVUFET1I6TUFOQUJJOklzbGEgZGVsIE1lZGlvCis5OkVDOkVDVTpFQ1VBRE9SOk1BTkFCSTpKaXBpamFwYQorMTA6RUM6RUNVOkVDVUFET1I6TUFOQUJJOkp1bmluCisxMTpFQzpFQ1U6RUNVQURPUjpNQU5BQkk6TWFudGEKKzEyOkVDOkVDVTpFQ1VBRE9SOk1BTkFCSTpNb250ZWNyaXN0aQorMTM6RUM6RUNVOkVDVUFET1I6TUFOQUJJOlBhamFuCisxNDpFQzpFQ1U6RUNVQURPUjpNQU5BQkk6UGVkZXJuYWxlcworMTU6RUM6RUNVOkVDVUFET1I6TUFOQUJJOlBpY2hpbmNoYQorMTY6RUM6RUNVOkVDVUFET1I6TUFOQUJJOlBvcnRvdmllam8KKzE3OkVDOkVDVTpFQ1VBRE9SOk1BTkFCSTpSb2NhZnVlcnRlCisxODpFQzpFQ1U6RUNVQURPUjpNQU5BQkk6U2FudGEgQW5hCisxOTpFQzpFQ1U6RUNVQURPUjpNQU5BQkk6U3VjcmUKKzIwOkVDOkVDVTpFQ1VBRE9SOk1BTkFCSTpUb3NhZ3VhCisxOkVDOkVDVTpFQ1VBRE9SOlpBTU9SQSBDSElOQ0hJUEU6Q2hpbmNoaXBlCisyOkVDOkVDVTpFQ1VBRE9SOlpBTU9SQSBDSElOQ0hJUEU6RWwgUGFuZ3VpCiszOkVDOkVDVTpFQ1VBRE9SOlpBTU9SQSBDSElOQ0hJUEU6TmFuZ2FyaXR6YQorNDpFQzpFQ1U6RUNVQURPUjpaQU1PUkEgQ0hJTkNISVBFOllhY3VhbWJpCis1OkVDOkVDVTpFQ1VBRE9SOlpBTU9SQSBDSElOQ0hJUEU6WWFudHphemEKKzY6RUM6RUNVOkVDVUFET1I6WkFNT1JBIENISU5DSElQRTpaYW1vcmEKKzE6RUM6RUNVOkVDVUFET1I6SU1CQUJVUkE6QW50b25pbyBBbnRlCisyOkVDOkVDVTpFQ1VBRE9SOklNQkFCVVJBOkNvdGFjYWNoaQorMzpFQzpFQ1U6RUNVQURPUjpJTUJBQlVSQTpJYmFycmEKKzQ6RUM6RUNVOkVDVUFET1I6SU1CQUJVUkE6T3RhdmFsbworNTpFQzpFQ1U6RUNVQURPUjpJTUJBQlVSQTpQaW1hbXBpcm8KKzY6RUM6RUNVOkVDVUFET1I6SU1CQUJVUkE6U2FuIE1pZ3VlbCBVcmN1cQorMTpFQzpFQ1U6RUNVQURPUjpFU01FUkFMREFTOkF0YWNhbWVzCisyOkVDOkVDVTpFQ1VBRE9SOkVTTUVSQUxEQVM6RWxveSBBbGZhcm8KKzM6RUM6RUNVOkVDVUFET1I6RVNNRVJBTERBUzpFc21lcmFsZGFzCis0OkVDOkVDVTpFQ1VBRE9SOkVTTUVSQUxEQVM6SXMuQ2FuY2hpbWFsZXJvCis1OkVDOkVDVTpFQ1VBRE9SOkVTTUVSQUxEQVM6SXNsYSBFbCBCcnVqbworNjpFQzpFQ1U6RUNVQURPUjpFU01FUkFMREFTOklzbGEgTHVpcyBWYXJnYXMKKzc6RUM6RUNVOkVDVUFET1I6RVNNRVJBTERBUzpJc2xhIFN0YS5Sb3NhCis4OkVDOkVDVTpFQ1VBRE9SOkVTTUVSQUxEQVM6SXNsYSBUYXRhYnJlcm8KKzk6RUM6RUNVOkVDVUFET1I6RVNNRVJBTERBUzpMYSBJc2xhIChNdWlzbmUpCisxMDpFQzpFQ1U6RUNVQURPUjpFU01FUkFMREFTOkxhIElzbGEgKE11bmlzbWUKKzExOkVDOkVDVTpFQ1VBRE9SOkVTTUVSQUxEQVM6TXVpc25lCisxMjpFQzpFQ1U6RUNVQURPUjpFU01FUkFMREFTOlF1aW5pbmRlCisxMzpFQzpFQ1U6RUNVQURPUjpFU01FUkFMREFTOlNhbiBMb3JlbnpvCisxNDpFQzpFQ1U6RUNVQURPUjpFU01FUkFMREFTOlNhbiBMb3JlbnpvIChJcykKKzE6RUM6RUNVOkVDVUFET1I6TE9KQTpDYWx2YXMKKzI6RUM6RUNVOkVDVUFET1I6TE9KQTpDYXRhbWF5bworMzpFQzpFQ1U6RUNVQURPUjpMT0pBOkNlbGljYQorNDpFQzpFQ1U6RUNVQURPUjpMT0pBOkNoYWd1YXJwYW1iYQorNTpFQzpFQ1U6RUNVQURPUjpMT0pBOkVzcGluZG9sYQorNjpFQzpFQ1U6RUNVQURPUjpMT0pBOkdvbnphbmFtYQorNzpFQzpFQ1U6RUNVQURPUjpMT0pBOkxvamEKKzg6RUM6RUNVOkVDVUFET1I6TE9KQTpNYWNhcmEKKzk6RUM6RUNVOkVDVUFET1I6TE9KQTpQYWx0YXMKKzEwOkVDOkVDVTpFQ1VBRE9SOkxPSkE6UGluZGFsCisxMTpFQzpFQ1U6RUNVQURPUjpMT0pBOlB1eWFuZ28KKzEyOkVDOkVDVTpFQ1VBRE9SOkxPSkE6UXVpbGFuZ2EKKzEzOkVDOkVDVTpFQ1VBRE9SOkxPSkE6U2FyYWd1cm8KKzE0OkVDOkVDVTpFQ1VBRE9SOkxPSkE6U296b3JhbmdhCisxNTpFQzpFQ1U6RUNVQURPUjpMT0pBOlphcG90aWxsbworMTpFQzpFQ1U6RUNVQURPUjpDSElNQk9SQVpPOkFsYXVzaQorMjpFQzpFQ1U6RUNVQURPUjpDSElNQk9SQVpPOkNoYW1ibworMzpFQzpFQ1U6RUNVQURPUjpDSElNQk9SQVpPOkNodW5jaGkKKzQ6RUM6RUNVOkVDVUFET1I6Q0hJTUJPUkFaTzpDb2x0YQorNTpFQzpFQ1U6RUNVQURPUjpDSElNQk9SQVpPOkN1bWFuZGEKKzY6RUM6RUNVOkVDVUFET1I6Q0hJTUJPUkFaTzpHdWFtb3RlCis3OkVDOkVDVTpFQ1VBRE9SOkNISU1CT1JBWk86R3Vhbm8KKzg6RUM6RUNVOkVDVUFET1I6Q0hJTUJPUkFaTzpQYWxsYXRhbmdhCis5OkVDOkVDVTpFQ1VBRE9SOkNISU1CT1JBWk86UGVuaXBlCisxMDpFQzpFQ1U6RUNVQURPUjpDSElNQk9SQVpPOlJpb2JhbWJhCisxOkVDOkVDVTpFQ1VBRE9SOkNPVE9QQVhJOkxhIE1hbmEKKzI6RUM6RUNVOkVDVUFET1I6Q09UT1BBWEk6TGF0YWN1bmdhCiszOkVDOkVDVTpFQ1VBRE9SOkNPVE9QQVhJOlBhbmd1YQorNDpFQzpFQ1U6RUNVQURPUjpDT1RPUEFYSTpQdWppbGkKKzU6RUM6RUNVOkVDVUFET1I6Q09UT1BBWEk6U2FsY2VkbworNjpFQzpFQ1U6RUNVQURPUjpDT1RPUEFYSTpTYXF1aXNpbGkKKzc6RUM6RUNVOkVDVUFET1I6Q09UT1BBWEk6U2lnY2hvcworMTpFQzpFQ1U6RUNVQURPUjpDQU5BUjpBem9ndWVzCisyOkVDOkVDVTpFQ1VBRE9SOkNBTkFSOkJpYmxpYW4KKzM6RUM6RUNVOkVDVUFET1I6Q0FOQVI6Q2FuYXIKKzQ6RUM6RUNVOkVDVUFET1I6Q0FOQVI6RGVsZWcKKzU6RUM6RUNVOkVDVUFET1I6Q0FOQVI6RWwgVGFtYm8KKzY6RUM6RUNVOkVDVUFET1I6Q0FOQVI6TGEgVHJvbmNhbAorMTpFQzpFQ1U6RUNVQURPUjpUVU5HVVJBSFVBOkFtYmF0bworMjpFQzpFQ1U6RUNVQURPUjpUVU5HVVJBSFVBOkJhbm9zCiszOkVDOkVDVTpFQ1VBRE9SOlRVTkdVUkFIVUE6Q2V2YWxsb3MKKzQ6RUM6RUNVOkVDVUFET1I6VFVOR1VSQUhVQTpNb2NoYQorNTpFQzpFQ1U6RUNVQURPUjpUVU5HVVJBSFVBOlBhdGF0ZQorNjpFQzpFQ1U6RUNVQURPUjpUVU5HVVJBSFVBOlF1ZXJvCis3OkVDOkVDVTpFQ1VBRE9SOlRVTkdVUkFIVUE6U2FudGlhZ28gUGlsbGFybworODpFQzpFQ1U6RUNVQURPUjpUVU5HVVJBSFVBOlNuIFBlZHJvIFBlbGlsZW8KKzk6RUM6RUNVOkVDVUFET1I6VFVOR1VSQUhVQTpUaXNhbGVvCisxOkVDOkVDVTpFQ1VBRE9SOkNBUkNISTpCb2xpdmFyCisyOkVDOkVDVTpFQ1VBRE9SOkNBUkNISTpFc3Blam8KKzM6RUM6RUNVOkVDVUFET1I6Q0FSQ0hJOk1pcmEKKzQ6RUM6RUNVOkVDVUFET1I6Q0FSQ0hJOk1vbnR1ZmFyCis1OkVDOkVDVTpFQ1VBRE9SOkNBUkNISTpUdWxjYW4KKzE6RUM6RUNVOkVDVUFET1I6UElDSElOQ0hBOkNheWFtYmUKKzI6RUM6RUNVOkVDVUFET1I6UElDSElOQ0hBOk1lamlhCiszOkVDOkVDVTpFQ1VBRE9SOlBJQ0hJTkNIQTpQZWRybyBNb25jYXlvCis0OkVDOkVDVTpFQ1VBRE9SOlBJQ0hJTkNIQTpQZWRybyBWaWNlbnRlIE0uCis1OkVDOkVDVTpFQ1VBRE9SOlBJQ0hJTkNIQTpRdWl0bworNjpFQzpFQ1U6RUNVQURPUjpQSUNISU5DSEE6UnVtaW5haHVpCis3OkVDOkVDVTpFQ1VBRE9SOlBJQ0hJTkNIQTpTYW50byBEb21pbmdvCis4OkVDOkVDVTpFQ1VBRE9SOlBJQ0hJTkNIQTpTbiBNaWd1ZWwgQmFuY29zCisxOkVDOkVDVTpFQ1VBRE9SOlpvbmEgTm8gRGVsaW10ZGE6RWwgUGllZHJlcm8KKzI6RUM6RUNVOkVDVUFET1I6Wm9uYSBObyBEZWxpbXRkYTpMYSBDb25jb3JkaWEKKzM6RUM6RUNVOkVDVUFET1I6Wm9uYSBObyBEZWxpbXRkYTpMYXMgR29sb25kcmluYXMKKzQ6RUM6RUNVOkVDVUFET1I6Wm9uYSBObyBEZWxpbXRkYTpNYW5nYSBkZSBDdXJhCisxOkVDOkVDVTpFQ1VBRE9SOlNVQ1VNQklPUzpDYXNjYWxlcworMjpFQzpFQ1U6RUNVQURPUjpTVUNVTUJJT1M6R29uemFsbyBQaXphcnJvCiszOkVDOkVDVTpFQ1VBRE9SOlNVQ1VNQklPUzpMYWdvIEFncmlvCis0OkVDOkVDVTpFQ1VBRE9SOlNVQ1VNQklPUzpQdXR1bWF5bworNTpFQzpFQ1U6RUNVQURPUjpTVUNVTUJJT1M6U2h1c2h1ZmluZGkKKzY6RUM6RUNVOkVDVUFET1I6U1VDVU1CSU9TOlN1Y3VtYmlvcworMTpFQzpFQ1U6RUNVQURPUjpMT1MgUklPUzpCYWJhCisyOkVDOkVDVTpFQ1VBRE9SOkxPUyBSSU9TOkJhYmFob3lvCiszOkVDOkVDVTpFQ1VBRE9SOkxPUyBSSU9TOkJ1ZW5hIEZlCis0OkVDOkVDVTpFQ1VBRE9SOkxPUyBSSU9TOk1vbnRhbHZvCis1OkVDOkVDVTpFQ1VBRE9SOkxPUyBSSU9TOlBhbGVucXVlCis2OkVDOkVDVTpFQ1VBRE9SOkxPUyBSSU9TOlB1ZWJsb3ZpZWpvCis3OkVDOkVDVTpFQ1VBRE9SOkxPUyBSSU9TOlF1ZXZlZG8KKzg6RUM6RUNVOkVDVUFET1I6TE9TIFJJT1M6VXJkYW5ldGEKKzk6RUM6RUNVOkVDVUFET1I6TE9TIFJJT1M6VmVudGFuYXMKKzEwOkVDOkVDVTpFQ1VBRE9SOkxPUyBSSU9TOlZpbmNlcwpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L0VHWS9FR1lfQURNSU4xX0xFWC50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvRUdZL0VHWV9BRE1JTjFfTEVYLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MTlkNmQ1Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L0VHWS9FR1lfQURNSU4xX0xFWC50eHQKQEAgLTAsMCArMSwzMCBAQAorMTpFRy1ESzpFRzpBRCBEQVFBSExJWUFICisyOkVHLUJBOkVHOkFMIEJBUiBBTCBBTUFSCiszOkVHLUJIOkVHOkFMIEJVQVlSQUgKKzQ6RUctRllNOkVHOkFMIEZBWVlVTQorNTpFRy1HSDpFRzpBTCBHSEFSQklZQUgKKzY6RUctQUxYOkVHOkFMIElTS0FOREFSSVlBSAorNzpFRy1JUzpFRzpBTCBJU01BTFlBSAorODpFRy1HWjpFRzpBTCBKWkFICis5OkVHLU1ORjpFRzpBTCBNSU5GWUFICisxMDpFRy1NTjpFRzpBTCBNSU5ZCisxMTpFRy1LQjpFRzpBTCBRQUxZQllBSAorMTI6RUctQzpFRzpBTCBRSElSQUgKKzEzOkVHLVdBRDpFRzpBTCBXRCBBTCBKQURECisxNDpFRy1TVVo6RUc6QVMgU1VXQVlTCisxNTpFRy1TSFI6RUc6QVNIIFNIQVJRWUFICisxNjpFRy1BU046RUc6QVNXTgorMTc6RUctQVNUOkVHOkFTWQorMTg6RUctQk5TOkVHOkJBTiBTVVdBWUYKKzE5OkVHLVBUUzpFRzpCUiBTQUQKKzIwOkVHLURUOkVHOkRVTVkKKzIxOkVHLUZSRzpFRzpGUk9OVElFUiBHT1ZFUk5BVEVTCisyMjpFRy1KUzpFRzpKQU5CIFNOCisyMzpFRy1LRlM6RUc6S0FGUiBBU0ggU0hBWUtICisyNDpFRy1MT0U6RUc6TE9XRVIgRUdZUFQKKzI1OkVHLU1UOkVHOk1BUgorMjY6RUctS046RUc6UUlOCisyNzpFRy1TSU46RUc6U0hBTUwgU04KKzI4OkVHLVNIRzpFRzpTSEoKKzI5OkVHLVVQRTpFRzpVUFBFUiBFR1lQVAorMzA6RUctVVJHOkVHOlVSQkFOIEdPVkVSTkFURVMKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9FR1kvRUdZX0FETUlOMl9MRVgudHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L0VHWS9FR1lfQURNSU4yX0xFWC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTJkZGUzNwotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9FR1kvRUdZX0FETUlOMl9MRVgudHh0CkBAIC0wLDAgKzEsMjYgQEAKKzE6RUc6RUdZOkVHWVBUOlVyYmFuIEdvdmVybmF0ZXM6QWwgSXNrYW5kYXJpeWFoIChBbGV4LikKKzI6RUc6RUdZOkVHWVBUOlVyYmFuIEdvdmVybmF0ZXM6QWwgUWFoaXJhaCAoQ2Fpcm8pCiszOkVHOkVHWTpFR1lQVDpVcmJhbiBHb3Zlcm5hdGVzOkFzIFN1d2F5cyAoU3VleikKKzQ6RUc6RUdZOkVHWVBUOlVyYmFuIEdvdmVybmF0ZXM6QnVyIFNhaWQgKFBvcnQgU2FpZCkKKzE6RUc6RUdZOkVHWVBUOkxvd2VyIEVneXB0OkFsIEJ1aGF5cmFoIChCZWhlcmEpCisyOkVHOkVHWTpFR1lQVDpMb3dlciBFZ3lwdDpBbCBEYXFhaGxpeWFoIChEYWthaGxpYSkKKzM6RUc6RUdZOkVHWVBUOkxvd2VyIEVneXB0OkFsIEdoYXJiaXlhaCAoR2hhcmJpYSkKKzQ6RUc6RUdZOkVHWVBUOkxvd2VyIEVneXB0OkFsIE1pbnVmaXlhaCAoTWVub3VmaWEpCis1OkVHOkVHWTpFR1lQVDpMb3dlciBFZ3lwdDpBbCBRYWx5dWJpeWFoIChLYWx5b3ViaWEpCis2OkVHOkVHWTpFR1lQVDpMb3dlciBFZ3lwdDpBcyBJc21haWxpeWFoIChJc21haWxpYSkKKzc6RUc6RUdZOkVHWVBUOkxvd2VyIEVneXB0OkFzaCBTaGFycWl5YWggKFNoYXJraWEpCis4OkVHOkVHWTpFR1lQVDpMb3dlciBFZ3lwdDpEdW15YXQgKERhbWlldHRhKQorOTpFRzpFR1k6RUdZUFQ6TG93ZXIgRWd5cHQ6S2Fmci1FbC1TaGVpa2gKKzE6RUc6RUdZOkVHWVBUOkZyb250aWVyIEdvdmVybmF0ZXM6QWwgQmFoci9BbCBBaG1hciAoUmVkU2VhKQorMjpFRzpFR1k6RUdZUFQ6RnJvbnRpZXIgR292ZXJuYXRlczpBbCBXYWRpL0FsIEphZGlkCiszOkVHOkVHWTpFR1lQVDpGcm9udGllciBHb3Zlcm5hdGVzOkphbnViIFNpbmEgKFNvdXRoIFNpbmFpKQorNDpFRzpFR1k6RUdZUFQ6RnJvbnRpZXIgR292ZXJuYXRlczpNYXRydWgKKzU6RUc6RUdZOkVHWVBUOkZyb250aWVyIEdvdmVybmF0ZXM6U2hhbWFsIFNpbmEgKE5vcnRoIFNpbmFpKQorMTpFRzpFR1k6RUdZUFQ6VXBwZXIgRWd5cHQ6QWwgRmF5eXVtIChGYXlvdW0pCisyOkVHOkVHWTpFR1lQVDpVcHBlciBFZ3lwdDpBbCBKaXphaCAoR2l6YSkKKzM6RUc6RUdZOkVHWVBUOlVwcGVyIEVneXB0OkFsIE1pbnlhIChNZW5pYSkKKzQ6RUc6RUdZOkVHWVBUOlVwcGVyIEVneXB0OkFzd2FuCis1OkVHOkVHWTpFR1lQVDpVcHBlciBFZ3lwdDpBc3lpdXQKKzY6RUc6RUdZOkVHWVBUOlVwcGVyIEVneXB0OkJlbmkgU3V3YXlmIChCZW5pLVN1ZWYpCis3OkVHOkVHWTpFR1lQVDpVcHBlciBFZ3lwdDpRaW5hCis4OkVHOkVHWTpFR1lQVDpVcHBlciBFZ3lwdDpTdWhhagpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L0VSSS9FUklfQURNSU4xX0xFWC50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvRVJJL0VSSV9BRE1JTjFfTEVYLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zOTlkMDU4Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L0VSSS9FUklfQURNSU4xX0xFWC50eHQKQEAgLTAsMCArMSwxNCBAQAorMTpFUi1BS0c6RVI6QUtFTEUgR1VaQVkKKzI6RVItQUs6RVI6QUtPUkRBVAorMzpFUi1BTjpFUjpBTlNFQkEKKzQ6RVItQVM6RVI6QVNTRUIKKzU6RVItRFU6RVI6REVCVUIKKzY6RVItR0FTOkVSOkdBU0ggJiBTRVRJVAorNzpFUi1HQjpFUjpHQVNIIEJBUktBCis4OkVSLUhBOkVSOkhBTUFTU0lFTgorOTpFUi1LRTpFUjpLRVJFTgorMTA6RVItREs6RVI6S0VZIEJBSElSCisxMTpFUi1NQTpFUjpNQUFLRUwgW01BRUtFTF0KKzEyOkVSLVNBOkVSOlNBSEVMCisxMzpFUi1TSzpFUjpTRU1FTkFXSSBLRVlJSCBCQUhSSSBbU0VNSUVOIEtFSUggQkFIUkldCisxNDpFUi1TRTpFUjpTRVJBWUUKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9FUkkvRVJJX0FETUlOMl9MRVgudHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L0VSSS9FUklfQURNSU4yX0xFWC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTUzYWI2NgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9FUkkvRVJJX0FETUlOMl9MRVgudHh0CkBAIC0wLDAgKzEsMzggQEAKKzE6RVI6RVJJOkVSSVRSRUE6S2VyZW46RWxhYmVyZWQKKzI6RVI6RVJJOkVSSVRSRUE6S2VyZW46SGFnYXoKKzM6RVI6RVJJOkVSSVRSRUE6S2VyZW46SGFsaGFsCis0OkVSOkVSSTpFUklUUkVBOktlcmVuOk1lbGJhc28KKzE6RVI6RVJJOkVSSVRSRUE6U2VyYXllOkFkaSBLd2FsYQorMjpFUjpFUkk6RVJJVFJFQTpTZXJheWU6QXJlemEKKzM6RVI6RVJJOkVSSVRSRUE6U2VyYXllOkRpYmFyd2EKKzQ6RVI6RVJJOkVSSVRSRUE6U2VyYXllOk1lbmRlZmVyYQorMTpFUjpFUkk6RVJJVFJFQTpHYXNoICYgU2V0aXQ6R29ueWUKKzI6RVI6RVJJOkVSSVRSRUE6R2FzaCAmIFNldGl0Ok9taGFqZXIKKzM6RVI6RVJJOkVSSVRSRUE6R2FzaCAmIFNldGl0OlNoZW1ib2tvCis0OkVSOkVSSTpFUklUUkVBOkdhc2ggJiBTZXRpdDpUZXNlbmV5ZQorMTpFUjpFUkk6RVJJVFJFQTpBa29yZGF0OkFrb3JkYXQKKzI6RVI6RVJJOkVSSVRSRUE6QWtvcmRhdDpLZXJrZSBCZXQKKzM6RVI6RVJJOkVSSVRSRUE6QWtvcmRhdDpLZXJ1Cis0OkVSOkVSSTpFUklUUkVBOkFrb3JkYXQ6TWFuc3VyYQorMTpFUjpFUkk6RVJJVFJFQTpBa2VsZSBHdXpheTpBZGkgS2V5aWgKKzI6RVI6RVJJOkVSSVRSRUE6QWtlbGUgR3V6YXk6RGVrZW1laGFyZQorMzpFUjpFUkk6RVJJVFJFQTpBa2VsZSBHdXpheTpTZWdlbmV5aXRpCis0OkVSOkVSSTpFUklUUkVBOkFrZWxlIEd1emF5OlNlbmFmZQorMTpFUjpFUkk6RVJJVFJFQTpIYW1hc3NpZW46RGVidWJhd2kgQmFocmkKKzI6RVI6RVJJOkVSSVRSRUE6SGFtYXNzaWVuOkRlYnViYXdpIEhhbWFzZW4KKzM6RVI6RVJJOkVSSVRSRUE6SGFtYXNzaWVuOk1pcmFiYXdpIEhhbWFzZW4KKzQ6RVI6RVJJOkVSSVRSRUE6SGFtYXNzaWVuOlNlbWVuYXdpIEJhaHJpCis1OkVSOkVSSTpFUklUUkVBOkhhbWFzc2llbjpTZW1lbmF3aSBIYW1hc2VuCisxOkVSOkVSSTpFUklUUkVBOktleSBCYWhpcjpHaW5kYQorMjpFUjpFUkk6RVJJVFJFQTpLZXkgQmFoaXI6SGFyaWdvCiszOkVSOkVSSTpFUklUUkVBOktleSBCYWhpcjpNaXRzaXdhCis0OkVSOkVSSTpFUklUUkVBOktleSBCYWhpcjpTaGVpYgorNTpFUjpFUkk6RVJJVFJFQTpLZXkgQmFoaXI6V2VraXJvCis2OkVSOkVSSTpFUklUUkVBOktleSBCYWhpcjpadWxhCisxOkVSOkVSSTpFUklUUkVBOkFzc2ViOkJleWlsdWwKKzI6RVI6RVJJOkVSSVRSRUE6QXNzZWI6RWRpCiszOkVSOkVSSTpFUklUUkVBOkFzc2ViOk1lcnNhIEZhdGltYQorNDpFUjpFUkk6RVJJVFJFQTpBc3NlYjpSYWhheWl0YQorNTpFUjpFUkk6RVJJVFJFQTpBc3NlYjpUaXlvCisxOkVSOkVSSTpFUklUUkVBOlNhaGVsOkFmYWJldAorMjpFUjpFUkk6RVJJVFJFQTpTYWhlbDpLYXJvcmEKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9FU1AvRVNQX0FETUlOMV9MRVgudHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L0VTUC9FU1BfQURNSU4xX0xFWC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDE0NWY5NwotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9FU1AvRVNQX0FETUlOMV9MRVgudHh0CkBAIC0wLDAgKzEsNTkgQEAKKzE6RVMtQzpFUzpBIENPUlVBCisyOkVTLUFCOkVTOkFMQkFDRVRFCiszOkVTLUE6RVM6QUxJQ0FOVEUKKzQ6RVMtQUw6RVM6QUxNRVJBCis1OkVTLUFEOkVTOkFOREFMVUNJQQorNjpFUy1BUjpFUzpBUkFHT04KKzc6RVMtTzpFUzpBU1RVUklBUworODpFUy1CQTpFUzpCQURBSk9aCis5OkVTLVBNOkVTOkJBTEVBUkVTCisxMDpFUy1COkVTOkJBUkNFTE9OQQorMTE6RVMtQlU6RVM6QlVSR09TCisxMjpFUy1DTjpFUzpDQU5BUklBUworMTM6RVMtUzpFUzpDQU5UQUJSSUEKKzE0OkVTLUNTOkVTOkNBU1RFTExOCisxNTpFUy1NQTpFUzpDQVNUSUxMQSAgIExBIE1BTkNIQQorMTY6RVMtTEU6RVM6Q0FTVElMTEEgICBMRU9OCisxNzpFUy1DVDpFUzpDQVRBTFVOQQorMTg6RVMtQ0M6RVM6Q0NFUkVTCisxOTpFUy1DQTpFUzpDRElaCisyMDpFUy1DRTpFUzpDRVVUQQorMjE6RVMtQ1I6RVM6Q0lVREFEIFJFQUwKKzIyOkVTLUNPOkVTOkNSRE9CQQorMjM6RVMtQ1U6RVM6Q1VFTkNBCisyNDpFUy1FVDpFUzpFWFRSRU1BRFVSQQorMjU6RVMtR0E6RVM6R0FMSUNJQQorMjY6RVMtR0k6RVM6R0lST05BCisyNzpFUy1HUjpFUzpHUkFOQURBCisyODpFUy1HVTpFUzpHVUFEQUxBSkFSQQorMjk6RVMtU1M6RVM6R1VJUFpDT0EKKzMwOkVTLUg6RVM6SFVFTFZBCiszMTpFUy1IVTpFUzpIVUVTQ0EKKzMyOkVTLUo6RVM6SkFFTgorMzM6RVMtTE86RVM6TEEgUklPSkEKKzM0OkVTLUdDOkVTOkxBUyBQQUxNQVMKKzM1OkVTLVZJOkVTOkxBVkEKKzM2OkVTLUw6RVM6TExFSURBCiszNzpFUy1MVTpFUzpMVUdPCiszODpFUy1NOkVTOk1BRFJJRAorMzk6RVMtTUw6RVM6TUVMSUxMQQorNDA6RVMtTVU6RVM6TVVSQ0lBCis0MTpFUy1OQTpFUzpOQVZBUlJBCis0MjpFUy1PUjpFUzpPVVJFTlNFCis0MzpFUy1WQTpFUzpQQUlTIFZBU0NPCis0NDpFUy1QOkVTOlBBTEVOQ0lBCis0NTpFUy1QTzpFUzpQT05URVZFRFJBCis0NjpFUy1SSTpFUzpSSU9KQQorNDc6RVMtU0E6RVM6U0FMQU1BTkNBCis0ODpFUy1URjpFUzpTQU5UQSBDUlVaIERFIFRFTkVSSUZFCis0OTpFUy1TRzpFUzpTRUdPVklBCis1MDpFUy1TRTpFUzpTRVZJTExBCis1MTpFUy1TTzpFUzpTT1JJQQorNTI6RVMtVDpFUzpUQVJSQUdPTkEKKzUzOkVTLVRFOkVTOlRFUlVFTAorNTQ6RVMtVE86RVM6VE9MRURPCis1NTpFUy1WOkVTOlZBTEVOQ0lBCis1NjpFUy1BVjpFUzpWSUxBCis1NzpFUy1CSTpFUzpWSVpDQVlBCis1ODpFUy1aQTpFUzpaQU1PUkEKKzU5OkVTLVo6RVM6WkFSQUdPWkEKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9FU1AvRVNQX0FETUlOMl9MRVgudHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L0VTUC9FU1BfQURNSU4yX0xFWC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTY5ZGUyOQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9FU1AvRVNQX0FETUlOMl9MRVgudHh0CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvRklOL0ZJTl9BRE1JTjFfTEVYLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9GSU4vRklOX0FETUlOMV9MRVgudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY2ZDExOTkKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvRklOL0ZJTl9BRE1JTjFfTEVYLnR4dApAQCAtMCwwICsxLDE2IEBACisxOkZJLUFMOkZJOkFMQU5EL0FIVkVOQU5NQUEKKzI6RkktRVM6Rkk6RVRFTCBTVU9NRU4gTE5JCiszOkZJLVRBOkZJOkiETUUvVEFWQVNURUhVUworNDpGSS1JUzpGSTpJVCBTVU9NRU4gTE5JCis1OkZJLUtFOkZJOktFU0tJIFNVT01JL01FTExFUlNUQSBGSU5MQU5ECis2OkZJLUtVOkZJOktVT1BJTworNzpGSS1LWTpGSTpLWU1JL0tZTU1FTkUKKzg6RkktTEw6Rkk6TEFQUEkvTEFQUExBTkQKKzk6RkktTFM6Rkk6TE5TSSBTVU9NRU4gTE5JCisxMDpGSS1NSzpGSTpNSUtLRUxJL1NUIE1JQ0hFTAorMTE6RkktVUw6Rkk6T1VMVS9VTEVBQk9SRworMTI6RkktT0w6Rkk6T1VMVU4gTE5JCisxMzpGSS1QTzpGSTpQT0hKT0lTIEtBUkpBTEEvTk9SUkEgS0FSRUxFTgorMTQ6RkktVFU6Rkk6VFVSS1UgUE9SSS9BQk8gQkqUUk5FQk9SRworMTU6RkktVVU6Rkk6VVVERU5NQUEvTllMQU5ECisxNjpGSS1WQTpGSTpWQUFTQS9WQVNBCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvRklOL0ZJTl9BRE1JTjJfTEVYLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9GSU4vRklOX0FETUlOMl9MRVgudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2OWRlMjkKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvRklOL0ZJTl9BRE1JTjJfTEVYLnR4dApkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L0ZSQS9GUkFfQURNSU4xX0xFWC50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvRlJBL0ZSQV9BRE1JTjFfTEVYLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NmZkMWU4Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L0ZSQS9GUkFfQURNSU4xX0xFWC50eHQKQEAgLTAsMCArMSwxMTQgQEAKKzE6RlItMDpGUjpBSU4KKzI6RlItMDI6RlI6QUlTTkUKKzM6RlItMDM6RlI6QUxMSUVSCis0OkZSLTA0OkZSOkFMUEVTIERFIEhBVVRFIFBST1ZFTkNFCis1OkZSLTA2OkZSOkFMUEVTIE1BUklUSU1FUworNjpGUi1BTDpGUjpBTFNBQ0UKKzc6RlItQVE6RlI6QVFVSVRBSU5FCis4OkZSLTA3OkZSOkFSREVDSEUKKzk6RlItMDg6RlI6QVJERU5ORVMKKzEwOkZSLTA5OkZSOkFSSUVHRQorMTE6RlItOkZSOkFVREUKKzEyOkZSLUFVOkZSOkFVVkVSR05FCisxMzpGUi0yOkZSOkFWRVlST04KKzE0OkZSLTY3OkZSOkJBUyBSSElOCisxNTpGUi1CQTpGUjpCQVNTRSBOT1JNQU5ESUUKKzE2OkZSLTM6RlI6Qk9VQ0hFUyBEVSBSSE9ORQorMTc6RlItQk86RlI6Qk9VUkdPR05FCisxODpGUi1CUjpGUjpCUkVUQUdORQorMTk6RlItNDpGUjpDQUxWQURPUworMjA6RlItNTpGUjpDQU5UQUwKKzIxOkZSLUNFOkZSOkNFTlRSRQorMjI6RlItQ0g6RlI6Q0hBTVBBR05FIEFSREVOTkUKKzIzOkZSLTY6RlI6Q0hBUkVOVEUKKzI0OkZSLTc6RlI6Q0hBUkVOVEUgTUFSSVRJTUUKKzI1OkZSLTg6RlI6Q0hFUgorMjY6RlItOTpGUjpDT1JSRVpFCisyNzpGUi0yQTpGUjpDT1JTRSBEVSBTVUQKKzI4OkZSLTIyOkZSOkNPVEVTIERBUk1PUgorMjk6RlItMjM6RlI6Q1JFVVNFCiszMDpGUi03OTpGUjpERVVYIFNFVlJFUworMzE6RlItMjQ6RlI6RE9SRE9HTkUKKzMyOkZSLTI1OkZSOkRPVUJTCiszMzpGUi0yNjpGUjpEUk9NRQorMzQ6RlItMjc6RlI6RVVSRQorMzU6RlItMjg6RlI6RVVSRSBFVCBMT0lSCiszNjpGUi0yOTpGUjpGSU5JU1RFUkUKKzM3OkZSLUNPOkZSOkZSQU5DSEUgQ09NVEUKKzM4OkZSLTMwOkZSOkdBUkQKKzM5OkZSLTMyOkZSOkdFUlMKKzQwOkZSLTMzOkZSOkdJUk9OREUKKzQxOkZSLTY4OkZSOkhBVVQgUkhJTgorNDI6RlItMkI6RlI6SEFVVEUgQ09SU0UKKzQzOkZSLTQzOkZSOkhBVVRFIExPSVJFCis0NDpGUi01MjpGUjpIQVVURSBNQVJORQorNDU6RlItSEE6RlI6SEFVVEUgTk9STUFORElFCis0NjpGUi03MDpGUjpIQVVURSBTQU9ORQorNDc6RlItNzQ6RlI6SEFVVEUgU0FWT0lFCis0ODpGUi04NzpGUjpIQVVURSBWSUVOTkUKKzQ5OkZSLTA1OkZSOkhBVVRFUyBBTFBFUworNTA6RlItNjU6RlI6SEFVVEVTIFBZUkVORUVTCis1MTpGUi05MjpGUjpIQVVUUyBERSBTRUlORQorNTI6RlItMzQ6RlI6SEVSQVVMVAorNTM6RlItSUY6RlI6SUxFIERFIEZSQU5DRQorNTQ6RlItMzU6RlI6SUxMRSBFVCBWSUxBSU5FCis1NTpGUi0zNjpGUjpJTkRSRQorNTY6RlItMzc6RlI6SU5EUkUgRVQgTE9JUkUKKzU3OkZSLTM4OkZSOklTRVJFCis1ODpGUi0zOTpGUjpKVVJBCis1OTpGUi00MDpGUjpMQU5ERVMKKzYwOkZSLUxBOkZSOkxBTkdVRURPQyBST1VTU0lMTE9OCis2MTpGUi1MSTpGUjpMSU1PVVNJTgorNjI6RlItNDI6RlI6TE9JUkUKKzYzOkZSLTQ0OkZSOkxPSVJFIEFUTEFOVElRVUUKKzY0OkZSLTQ1OkZSOkxPSVJFVAorNjU6RlItTE86RlI6TE9SUkFJTkUKKzY2OkZSLTQ2OkZSOkxPVAorNjc6RlItNDc6RlI6TE9UIEVUIEdBUk9OTkUKKzY4OkZSLTQ4OkZSOkxPWkVSRQorNjk6RlItNDk6RlI6TUFJTkUgRVQgTE9JUkUKKzcwOkZSLTUwOkZSOk1BTkNIRQorNzE6RlItNTM6RlI6TUFZRU5ORQorNzI6RlItWVQ6RlI6TUFZT1RURSAoU0VFIEFMU08gU0VQQVJBVEUgRU5UUlkgVU5ERVIgWVQpCis3MzpGUi01NDpGUjpNRVVSVEhFIEVUIE1PU0VMTEUKKzc0OkZSLTU1OkZSOk1FVVNFCis3NTpGUi1NUDpGUjpNSURJIFBZUkVORUVTCis3NjpGUi01NjpGUjpNT1JCSUhBTgorNzc6RlItNTc6RlI6TU9TRUxMRQorNzg6RlItNTg6RlI6TklFVlJFCis3OTpGUi01OTpGUjpOT1JECis4MDpGUi1QQzpGUjpOT1JEICAgUEFTIERFIENBTEFJUworODE6RlItTkM6RlI6Tk9VVkVMTEUgQ0FMRURPTklFIChTRUUgQUxTTyBTRVBBUkFURSBFTlRSWSBVTkRFUiBOQykKKzgyOkZSLTYwOkZSOk9JU0UKKzgzOkZSLTc1OkZSOlBBUklTCis4NDpGUi02MjpGUjpQQVMgREUgQ0FMQUlTCis4NTpGUi1QTDpGUjpQQVlTIERFIExBIExPSVJFCis4NjpGUi1QSTpGUjpQSUNBUkRJRQorODc6RlItUE86RlI6UE9JVE9VIENIQVJFTlRFUworODg6RlItUEY6RlI6UE9MWU5FU0lFIEZSQU5DQUlTRSAoU0VFIEFMU08gU0VQQVJBVEUgRU5UUlkgVU5ERVIgUEYpCis4OTpGUi1QQTpGUjpQUk9WRU5DRSBBTFBFUyBDT1RFIEQnQVpVUgorOTA6RlItNjM6RlI6UFVZIERFIERPTUUKKzkxOkZSLTY0OkZSOlBZUkVORUVTIEFUTEFOVElRVUVTCis5MjpGUi02NjpGUjpQWVJFTkVFUyBPUklFTlRBTEVTCis5MzpGUi02OTpGUjpSSE9ORQorOTQ6RlItUkg6RlI6UkhPTkUgQUxQRVMKKzk1OkZSLVBNOkZSOlNBSU5UIFBJRVJSRSBFVCBNSVFVRUxPTiAoU0VFIEFMU08gU0VQQVJBVEUgRU5UUlkgVU5ERVIgUE0pCis5NjpGUi03MjpGUjpTQVJUSEUKKzk3OkZSLTczOkZSOlNBVk9JRQorOTg6RlItNzc6RlI6U0VJTkUgRVQgTUFSTkUKKzk5OkZSLTc2OkZSOlNFSU5FIE1BUklUSU1FCisxMDA6RlItOTM6RlI6U0VJTkUgU0FJTlQgREVOSVMKKzEwMTpGUi04MDpGUjpTT01NRQorMTAyOkZSLTgyOkZSOlRBUk4gRVQgR0FST05ORQorMTAzOkZSLVRGOkZSOlRFUlJFUyBBVVNUUkFMRVMgRlJBTkNBSVNFUyAoU0VFIEFMU08gU0VQQVJBVEUgRU5UUlkgVU5ERVIgVEYpCisxMDQ6RlItOTA6RlI6VEVSUklUT0lSRSBERSBCRUxGT1JUCisxMDU6RlItOTQ6RlI6VkFMIERFIE1BUk5FCisxMDY6RlItOTU6RlI6VkFMIERPSVNFCisxMDc6RlItODM6RlI6VkFSCisxMDg6RlItODQ6RlI6VkFVQ0xVU0UKKzEwOTpGUi04NTpGUjpWRU5ERUUKKzExMDpGUi04NjpGUjpWSUVOTkUKKzExMTpGUi04ODpGUjpWT1NHRVMKKzExMjpGUi1XRjpGUjpXQUxMSVMgRVQgRlVUVU5BIChTRUUgQUxTTyBTRVBBUkFURSBFTlRSWSBVTkRFUiBXRikKKzExMzpGUi04OTpGUjpZT05ORQorMTE0OkZSLTc4OkZSOllWRUxJTkVTCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvRlJBL0ZSQV9BRE1JTjJfTEVYLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9GUkEvRlJBX0FETUlOMl9MRVgudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2OWRlMjkKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvRlJBL0ZSQV9BRE1JTjJfTEVYLnR4dApkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L0ZSTy9GUk9fQURNSU4xX0xFWC50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvRlJPL0ZST19BRE1JTjFfTEVYLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNjlkZTI5Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L0ZSTy9GUk9fQURNSU4xX0xFWC50eHQKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9GUk8vRlJPX0FETUlOMl9MRVgudHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L0ZSTy9GUk9fQURNSU4yX0xFWC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTY5ZGUyOQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9GUk8vRlJPX0FETUlOMl9MRVgudHh0CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvR0FCL0dBQl9BRE1JTjFfTEVYLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9HQUIvR0FCX0FETUlOMV9MRVgudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVkN2Q1ODAKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvR0FCL0dBQl9BRE1JTjFfTEVYLnR4dApAQCAtMCwwICsxLDkgQEAKKzE6R0EtMTpHQTpFU1RVQUlSRQorMjpHQS0yOkdBOkhBVVQgT0dPT1VFCiszOkdBLTM6R0E6TU9ZRU4gT0dPT1VFCis0OkdBLTQ6R0E6TkdPVU5JRQorNTpHQS01OkdBOk5ZQU5HQQorNjpHQS02OkdBOk9HT09VRSBJVklORE8KKzc6R0EtNzpHQTpPR09PVUUgTE9MTworODpHQS04OkdBOk9HT09VRSBNQVJJVElNRQorOTpHQS05OkdBOldPVUxFVSBOVEVNCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvR0FCL0dBQl9BRE1JTjJfTEVYLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9HQUIvR0FCX0FETUlOMl9MRVgudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUzMzk5NmYKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvR0FCL0dBQl9BRE1JTjJfTEVYLnR4dApAQCAtMCwwICsxLDQ2IEBACisxOkdBOkdBQjpHQUJPTjpXb3VsZXUtTnRlbTpIYXV0LUNvbW8gKE1lZG91bmV1KQorMjpHQTpHQUI6R0FCT046V291bGV1LU50ZW06SGF1dC1OdGVtIChNaW52b3VsKQorMzpHQTpHQUI6R0FCT046V291bGV1LU50ZW06TnRlbSAoQml0YW0pCis0OkdBOkdBQjpHQUJPTjpXb3VsZXUtTnRlbTpPa2FubyAoTWl0emlrKQorNTpHQTpHQUI6R0FCT046V291bGV1LU50ZW06V29sZXUgKE95ZW0pCisxOkdBOkdBQjpHQUJPTjpFc3R1YWlyZTpLb21vIChLYW5nbykKKzI6R0E6R0FCOkdBQk9OOkVzdHVhaXJlOktvbW8tTW9uZGFoIChOdG91bSkKKzM6R0E6R0FCOkdBQk9OOkVzdHVhaXJlOkxpYnJldmlsbGUKKzQ6R0E6R0FCOkdBQk9OOkVzdHVhaXJlOk5veWEgKENvY29iZWFjaCkKKzE6R0E6R0FCOkdBQk9OOkhhdXQtT2dvb3VlOkRqb3VlIChPbmdhKQorMjpHQTpHQUI6R0FCT046SGF1dC1PZ29vdWU6RGpvdW9yaS1hZ25pbGkgKEJvbmdvdmlsbAorMzpHQTpHQUI6R0FCT046SGF1dC1PZ29vdWU6TGVrYWJpLUlld29sbyAoTmdvdW9uaSkKKzQ6R0E6R0FCOkdBQk9OOkhhdXQtT2dvb3VlOkxla29rbyAoQmFrb3VtYmEpCis1OkdBOkdBQjpHQUJPTjpIYXV0LU9nb291ZTpMZWtvbmktTGVrb3JpIChBa2llbmkpCis2OkdBOkdBQjpHQUJPTjpIYXV0LU9nb291ZTpMZW1ib21iaS1MZXlvdSAoTW91YW5kYSkKKzc6R0E6R0FCOkdBQk9OOkhhdXQtT2dvb3VlOk1wYXNzYSAoRnJhbmNldmlsbGUpCis4OkdBOkdBQjpHQUJPTjpIYXV0LU9nb291ZTpPZ291b2UtTGV0aWxpIChCb3VtYW5nbykKKzk6R0E6R0FCOkdBQk9OOkhhdXQtT2dvb3VlOlBsYXRlYXV4IChMZWtvbmkpCisxMDpHQTpHQUI6R0FCT046SGF1dC1PZ29vdWU6U2ViZS1icmlrb2xvIChPa29uZGphKQorMTpHQTpHQUI6R0FCT046T2dvb3VlLUl2aW5kbzpJdmluZG8gKE1ha29rb3UpCisyOkdBOkdBQjpHQUJPTjpPZ29vdWUtSXZpbmRvOkxvcGUgKEJvb3VlKQorMzpHQTpHQUI6R0FCT046T2dvb3VlLUl2aW5kbzpNdm91bmcgKE92ZW5nKQorNDpHQTpHQUI6R0FCT046T2dvb3VlLUl2aW5kbzpaYWRpZSAoTWVrYW1ibykKKzE6R0E6R0FCOkdBQk9OOk5nb3VuaWU6Qm91bWktbG93ZXRzaSAoTWJpZ291KQorMjpHQTpHQUI6R0FCT046TmdvdW5pZTpEb2xhIChOZGVuZGUpCiszOkdBOkdBQjpHQUJPTjpOZ291bmllOkRvdXlhIE9ub3llIChNb3VpbGEpCis0OkdBOkdBQjpHQUJPTjpOZ291bmllOkxvdWV0c2ktQmliYWthIChNYWxpbmdhKQorNTpHQTpHQUI6R0FCT046TmdvdW5pZTpMb3VldHNpLVdhbm8gKExlYmFtYmEpCis2OkdBOkdBQjpHQUJPTjpOZ291bmllOk1vdWdhbGFiYSAoR3VpZXRzb3UpCis3OkdBOkdBQjpHQUJPTjpOZ291bmllOk5kb2xvdSAoTWFuZGppKQorODpHQTpHQUI6R0FCT046TmdvdW5pZTpPZ291bG91IChNaW1vbmdvKQorOTpHQTpHQUI6R0FCT046TmdvdW5pZTpUc2FtYmEgTWFuZ290c2kgKEZvdWcuKQorMTpHQTpHQUI6R0FCT046TnlhbmdhOkJhc3NlIEJhbmlvIChNYXl1bWJhKQorMjpHQTpHQUI6R0FCT046TnlhbmdhOkRvdWlnbnkgKE1vYWJpKQorMzpHQTpHQUI6R0FCT046TnlhbmdhOkRvdXRzaWxhIChNYWJhbmRhKQorNDpHQTpHQUI6R0FCT046TnlhbmdhOkhhdXRlLUJhbmlvIChOZGluZGkpCis1OkdBOkdBQjpHQUJPTjpOeWFuZ2E6TW91Z291dHNpIChUY2hpYmFuZ2EpCisxOkdBOkdBQjpHQUJPTjpPZ29vdWUtTWFyaXRpbWU6QmVuZGplIChQb3J0IEdlbnRpbCkKKzI6R0E6R0FCOkdBQk9OOk9nb291ZS1NYXJpdGltZTpFdGluYm91ZSAoT21ib3VlKQorMzpHQTpHQUI6R0FCT046T2dvb3VlLU1hcml0aW1lOk5kb3Vnb3UgKEdhbWJhKQorMTpHQTpHQUI6R0FCT046T2dvb3VlLUxvbG86TG9sbyBCb3Vlbmd1aWRpIChLb3VsYS4pCisyOkdBOkdBQjpHQUJPTjpPZ29vdWUtTG9sbzpMb21iby1Cb3Vlbmd1aWRpIChQYW5hKQorMzpHQTpHQUI6R0FCT046T2dvb3VlLUxvbG86TW91bG91ZG5vdSAoTGF0b3Vyc3ZpbGxlKQorNDpHQTpHQUI6R0FCT046T2dvb3VlLUxvbG86T2Zmb3VlLU9ub3llIChJYm91bmRqaSkKKzE6R0E6R0FCOkdBQk9OOk1veWVuIE9nb291ZTpBYmFuZ2EtQmlnbmUgKE5kam9sZSkKKzI6R0E6R0FCOkdBQk9OOk1veWVuIE9nb291ZTpPZ29vdWUgZXQgbGFjcyAoTGFtYmFyLikKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9HQlIvR0JSX0FETUlOMV9MRVgudHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L0dCUi9HQlJfQURNSU4xX0xFWC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjg2ZWE1NAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9HQlIvR0JSX0FETUlOMV9MRVgudHh0CkBAIC0wLDAgKzEsMjQ5IEBACisxOkdCLUFCRTpHQjpBQkVSREVFTiBDSVRZCisyOkdCLUFCRDpHQjpBQkVSREVFTlNISVJFCiszOkdCLUFOUzpHQjpBTkdVUworNDpHQi1BTlQ6R0I6QU5UUklNCis1OkdCLUFSRDpHQjpBUkRTCis2OkdCLUFHQjpHQjpBUkdZTEwgQU5EIEJVVEUKKzc6R0ItQVJNOkdCOkFSTUFHSAorODpHQi1BVk86R0I6QVZPTgorOTpHQi1CTEE6R0I6QkFMTFlNRU5BCisxMDpHQi1CTFk6R0I6QkFMTFlNT05FWQorMTE6R0ItQk5COkdCOkJBTkJSSURHRQorMTI6R0ItQkRHOkdCOkJBUktJTkcgQU5EIERBR0VOSEFNCisxMzpHQi1CTkU6R0I6QkFSTkVUCisxNDpHQi1CTlM6R0I6QkFSTlNMRVkKKzE1OkdCLUJBUzpHQjpCQVRIIEFORCBOT1JUSCBFQVNUIFNPTUVSU0VUCisxNjpHQi1CREY6R0I6QkVERk9SRFNISVJFCisxNzpHQi1CRlM6R0I6QkVMRkFTVAorMTg6R0ItQkVSOkdCOkJFUktTCisxOTpHQi1CRVg6R0I6QkVYTEVZCisyMDpHQi1CSVI6R0I6QklSTUlOR0hBTQorMjE6R0ItQkJEOkdCOkJMQUNLQlVSTiBXSVRIIERBUldFTgorMjI6R0ItQlBMOkdCOkJMQUNLUE9PTAorMjM6R0ItQkdXOkdCOkJMQUVOQVUgR1dFTlQKKzI0OkdCLUJPTDpHQjpCT0xUT04KKzI1OkdCLUJDRjpHQjpCT1JEIENFTlRSIEZJRkUgTE9USElBTiBUQVkKKzI2OkdCLUJNSDpHQjpCT1VSTkVNT1VUSAorMjc6R0ItQlJDOkdCOkJSQUNLTkVMTCBGT1JFU1QKKzI4OkdCLUJSRDpHQjpCUkFERk9SRAorMjk6R0ItQkVOOkdCOkJSRU5UCiszMDpHQi1CR0U6R0I6QlJJREdFTkQgW1BFTiBZIEJPTlQgQVIgT0dXUiBHQiBQT0ddCiszMTpHQi1CTkg6R0I6QlJJR0hUT04gQU5EIEhPVkUKKzMyOkdCLUJTVDpHQjpCUklTVE9MLCBDSVRZIE9GCiszMzpHQi1CUlk6R0I6QlJPTUxFWQorMzQ6R0ItQktNOkdCOkJVQ0tJTkdIQU1TSElSRQorMzU6R0ItQlVSOkdCOkJVUlkKKzM2OkdCLUNBWTpHQjpDQUVSUEhJTExZIFtDQUVSRkZJTEkgR0IgQ0FGXQorMzc6R0ItQ0xEOkdCOkNBTERFUkRBTEUKKzM4OkdCLUNBTTpHQjpDQU1CUklER0VTSElSRQorMzk6R0ItQ01EOkdCOkNBTURFTgorNDA6R0ItQ1JGOkdCOkNBUkRJRkYgW0NBRVJEWUREIEdCIENSRF0KKzQxOkdCLUNNTjpHQjpDQVJNQVJUSEVOU0hJUkUgW1NJUiBHQUVSRllSRERJTiBHQiBHRlldCis0MjpHQi1DS0Y6R0I6Q0FSUklDS0ZFUkdVUworNDM6R0ItQ1NSOkdCOkNBU1RMRVJFQUdICis0NDpHQi1DR046R0I6Q0VSRURJR0lPTiBbU0lSIENFUkVESUdJT05dCis0NTpHQi1DSFM6R0I6Q0hFU0hJUkUKKzQ2OkdCLUNMSzpHQjpDTEFDS01BTk5BTlNISVJFCis0NzpHQi1DTFY6R0I6Q0xFVkVMQU5ECis0ODpHQi1DTFc6R0I6Q0xXWUQKKzQ5OkdCLUNMUjpHQjpDT0xFUkFJTkUKKzUwOkdCLUNXWTpHQjpDT05XWQorNTE6R0ItQ0tUOkdCOkNPT0tTVE9XTgorNTI6R0ItQ09OOkdCOkNPUk5XQUxMCis1MzpHQi1DT1Y6R0I6Q09WRU5UUlkKKzU0OkdCLUNHVjpHQjpDUkFJR0FWT04KKzU1OkdCLUNSWTpHQjpDUk9ZRE9OCis1NjpHQi1DTUE6R0I6Q1VNQlJJQQorNTc6R0ItREFMOkdCOkRBUkxJTkdUT04KKzU4OkdCLURFTjpHQjpERU5CSUdIU0hJUkUgW1NJUiBERElOQllDSCBHQiBEREJdCis1OTpHQi1ERVI6R0I6REVSQlkKKzYwOkdCLURCWTpHQjpERVJCWVNISVJFCis2MTpHQi1EUlk6R0I6REVSUlkKKzYyOkdCLURFVjpHQjpERVZPTgorNjM6R0ItRE5DOkdCOkRPTkNBU1RFUgorNjQ6R0ItRE9SOkdCOkRPUlNFVAorNjU6R0ItRE9XOkdCOkRPV04KKzY2OkdCLURVRDpHQjpEVURMRVkKKzY3OkdCLURHWTpHQjpEVU1GUklFUyBHQUxMTworNjg6R0ItRE5EOkdCOkRVTkRFRSBDSVRZCis2OTpHQi1ER046R0I6RFVOR0FOTk9OCis3MDpHQi1EVVI6R0I6RFVSSEFNCis3MTpHQi1FQUw6R0I6RUFMSU5HCis3MjpHQi1FQUc6R0I6RUFTVCBBTkdMSUEKKzczOkdCLUVBWTpHQjpFQVNUIEFZUlNISVJFCis3NDpHQi1FRFU6R0I6RUFTVCBEVU5CQVJUT05TSElSRQorNzU6R0ItRUxOOkdCOkVBU1QgTE9USElBTgorNzY6R0ItRVJXOkdCOkVBU1QgUkVORlJFV1NISVJFCis3NzpHQi1FUlk6R0I6RUFTVCBSSURJTkcgT0YgWU9SS1NISVJFCis3ODpHQi1FU1g6R0I6RUFTVCBTVVNTRVgKKzc5OkdCLUVESDpHQjpFRElOQlVSR0gsIENJVFkgT0YKKzgwOkdCLUVMUzpHQjpFSUxFQU4gU0lBUgorODE6R0ItRU5GOkdCOkVORklFTEQKKzgyOkdCLUVTUzpHQjpFU1NFWAorODM6R0ItRkFMOkdCOkZBTEtJUksKKzg0OkdCLUZFUjpHQjpGRVJNQU5BR0gKKzg1OkdCLUZJRjpHQjpGSUZFCis4NjpHQi1GTE46R0I6RkxJTlRTSElSRSBbU0lSIFkgRkZMSU5UIEdCIEZGTF0KKzg3OkdCLUdBVDpHQjpHQVRFU0hFQUQKKzg4OkdCLUdMRzpHQjpHTEFTR09XIENJVFkKKzg5OkdCLUdMUzpHQjpHTE9VQ0VTVEVSU0hJUkUKKzkwOkdCLUdSQTpHQjpHUkFNUElBTgorOTE6R0ItTE5EOkdCOkdSRUFURVIgTE9ORE9OCis5MjpHQi1NQU46R0I6R1JFQVRFUiBNQU5DSEVTVEVSCis5MzpHQi1HUkU6R0I6R1JFRU5XSUNICis5NDpHQi1HU1k6R0I6R1VFUk5TRVkgW0dVRVJORVNFWV0KKzk1OkdCLUdXVDpHQjpHV0VOVAorOTY6R0ItR1dOOkdCOkdXWU5FREQKKzk3OkdCLUhDSzpHQjpIQUNLTkVZCis5ODpHQi1IQUw6R0I6SEFMVE9OCis5OTpHQi1ITUY6R0I6SEFNTUVSU01JVEggQU5EIEZVTEhBTQorMTAwOkdCLUhBTTpHQjpIQU1QU0hJUkUKKzEwMTpHQi1IUlk6R0I6SEFSSU5HRVkKKzEwMjpHQi1IUlc6R0I6SEFSUk9XCisxMDM6R0ItSFBMOkdCOkhBUlRMRVBPT0wKKzEwNDpHQi1IQVY6R0I6SEFWRVJJTkcKKzEwNTpHQi1IRUY6R0I6SEVSRUZPUkQKKzEwNjpHQi1IUlQ6R0I6SEVSVEZPUkRTSElSRQorMTA3OkdCLUhMRDpHQjpISUdITEFORAorMTA4OkdCLUhHTDpHQjpISUdITEFORFMKKzEwOTpHQi1ISUw6R0I6SElMTElOR0RPTgorMTEwOkdCLUhOUzpHQjpIT1VOU0xPVworMTExOkdCLUhVTTpHQjpIVU1CRVJTSURFCisxMTI6R0ItSVZDOkdCOklOVkVSQ0xZREUKKzExMzpHQi1BR1k6R0I6SVNMRSBPRiBBTkdMRVNFWSBbU0lSIFlOWVMgTU9OIEdCIFlOTV0KKzExNDpHQi1JT1c6R0I6SVNMRSBPRiBXSUdIVAorMTE1OkdCLUlPUzpHQjpJU0xFUyBPRiBTQ0lMTFkKKzExNjpHQi1JU0w6R0I6SVNMSU5HVE9OCisxMTc6R0ItSlNZOkdCOkpFUlNFWQorMTE4OkdCLUtFQzpHQjpLRU5TSU5HVE9OIEFORCBDSEVMU0VBCisxMTk6R0ItS0VOOkdCOktFTlQKKzEyMDpHQi1LSEw6R0I6S0lOR1NUT04gVVBPTiBIVUxMLCBDSVRZIE9GCisxMjE6R0ItS1RUOkdCOktJTkdTVE9OIFVQT04gVEhBTUVTCisxMjI6R0ItS0lSOkdCOktJUktMRUVTCisxMjM6R0ItS1dMOkdCOktOT1dTTEVZCisxMjQ6R0ItTEJIOkdCOkxBTUJFVEgKKzEyNTpHQi1MQU46R0I6TEFOQ0FTSElSRQorMTI2OkdCLUxSTjpHQjpMQVJORQorMTI3OkdCLUxEUzpHQjpMRUVEUworMTI4OkdCLUxDRTpHQjpMRUlDRVNURVIKKzEyOTpHQi1MRUM6R0I6TEVJQ0VTVEVSU0hJUkUKKzEzMDpHQi1MRVc6R0I6TEVXSVNIQU0KKzEzMTpHQi1MTVY6R0I6TElNQVZBRFkKKzEzMjpHQi1MSU46R0I6TElOQ09MTlNISVJFCisxMzM6R0ItTFNCOkdCOkxJU0JVUk4KKzEzNDpHQi1MSVY6R0I6TElWRVJQT09MCisxMzU6R0ItTFVUOkdCOkxVVE9OCisxMzY6R0ItTUZUOkdCOk1BR0hFUkFGRUxUCisxMzc6R0ItTURXOkdCOk1FRFdBWQorMTM4OkdCLU1FUjpHQjpNRVJTRVlTSURFCisxMzk6R0ItTVRZOkdCOk1FUlRIWVIgVFlERklMIFtNRVJUSFlSIFRVREZVTCBHQiBNVFVdCisxNDA6R0ItTVJUOkdCOk1FUlRPTgorMTQxOkdCLU1EQjpHQjpNSURETEVTQlJPVUdICisxNDI6R0ItTUxOOkdCOk1JRExPVEhJQU4KKzE0MzpHQi1NSUs6R0I6TUlMVE9OIEtFWU5FUworMTQ0OkdCLU1PTjpHQjpNT05NT1VUSFNISVJFIFtTSVIgRllOV1kgR0IgRllOXQorMTQ1OkdCLU1SWTpHQjpNT1JBWQorMTQ2OkdCLU1ZTDpHQjpNT1lMRQorMTQ3OkdCLU5UTDpHQjpORUFUSCBQT1JUIFRBTEJPVCBbQ0FTVEVMTCBORUREIFBPUlQgVEFMQk9UIEdCIENUTF0KKzE0ODpHQi1ORVQ6R0I6TkVXQ0FTVExFIFVQT04gVFlORQorMTQ5OkdCLU5XTTpHQjpORVdIQU0KKzE1MDpHQi1OV1A6R0I6TkVXUE9SVCBbQ0FTTkVXWUREIEdCIENOV10KKzE1MTpHQi1OWU06R0I6TkVXUlkgQU5EIE1PVVJORQorMTUyOkdCLU5UQTpHQjpORVdUT1dOQUJCRVkKKzE1MzpHQi1ORks6R0I6Tk9SRk9MSworMTU0OkdCLU5BWTpHQjpOT1JUSCBBWVJTSElSRQorMTU1OkdCLU5ETjpHQjpOT1JUSCBET1dOCisxNTY6R0ItTkVMOkdCOk5PUlRIIEVBU1QgTElOQ09MTlNISVJFCisxNTc6R0ItTkxLOkdCOk5PUlRIIExBTkFSS1NISVJFCisxNTg6R0ItTkxOOkdCOk5PUlRIIExJTkNPTE5TSElSRQorMTU5OkdCLU5TTTpHQjpOT1JUSCBTT01FUlNFVAorMTYwOkdCLU5UWTpHQjpOT1JUSCBUWU5FU0lERQorMTYxOkdCLU5ZSzpHQjpOT1JUSCBZT1JLU0hJUkUKKzE2MjpHQi1OVEg6R0I6Tk9SVEhBTVBUT05TSElSRQorMTYzOkdCLU5JUjpHQjpOT1JUSEVSTiBJUkVMQU5ECisxNjQ6R0ItTkJMOkdCOk5PUlRIVU1CRVJMQU5ECisxNjU6R0ItTkdNOkdCOk5PVFRJTkdIQU0KKzE2NjpHQi1OVFQ6R0I6Tk9UVElOR0hBTVNISVJFCisxNjc6R0ItT0xEOkdCOk9MREhBTQorMTY4OkdCLU9NSDpHQjpPTUFHSAorMTY5OkdCLU9SSzpHQjpPUktORVkgSVNMQU5EUworMTcwOkdCLU9YRjpHQjpPWEZPUkRTSElSRQorMTcxOkdCLVBFTTpHQjpQRU1CUk9LRVNISVJFIFtTSVIgQkVORlJPIEdCIEJORl0KKzE3MjpHQi1QS046R0I6UEVSVEggQU5EIEtJTlJPU1MKKzE3MzpHQi1QVEU6R0I6UEVURVJCT1JPVUdICisxNzQ6R0ItUExZOkdCOlBMWU1PVVRICisxNzU6R0ItUE9MOkdCOlBPT0xFCisxNzY6R0ItUE9SOkdCOlBPUlRTTU9VVEgKKzE3NzpHQi1QT1c6R0I6UE9XWVMKKzE3ODpHQi1SREc6R0I6UkVBRElORworMTc5OkdCLVJEQjpHQjpSRURCUklER0UKKzE4MDpHQi1SQ0M6R0I6UkVEQ0FSIEFORCBDTEVWRUxBTkQKKzE4MTpHQi1SRlc6R0I6UkVORlJFV1NISVJFCisxODI6R0ItUkNUOkdCOlJIT05EREEsIENZTk9OLCBUQUZGIFtSSE9ORERBLCBDWU5PTixUQUZdCisxODM6R0ItUklDOkdCOlJJQ0hNT05EIFVQT04gVEhBTUVTCisxODQ6R0ItUkNIOkdCOlJPQ0hEQUxFCisxODU6R0ItUk9UOkdCOlJPVEhFUkhBTQorMTg2OkdCLVJVVDpHQjpSVVRMQU5ECisxODc6R0ItU0xGOkdCOlNBTEZPUkQKKzE4ODpHQi1TQVc6R0I6U0FORFdFTEwKKzE4OTpHQi1TQ0I6R0I6U0NPVFRJU0ggQk9SREVSUywgVEhFCisxOTA6R0ItU0ZUOkdCOlNFRlRPTgorMTkxOkdCLVNIRjpHQjpTSEVGRklFTEQKKzE5MjpHQi1aRVQ6R0I6U0hFVExBTkQgSVNMQU5EUworMTkzOkdCLVNIUjpHQjpTSFJPUFNISVJFCisxOTQ6R0ItU0xHOkdCOlNMT1VHSAorMTk1OkdCLVNPTDpHQjpTT0xJSFVMTAorMTk2OkdCLVNPTTpHQjpTT01FUlNFVAorMTk3OkdCLVNBWTpHQjpTT1VUSCBBWVJTSElSRQorMTk4OkdCLVNHQzpHQjpTT1VUSCBHTE9VQ0VTVEVSU0hJUkUKKzE5OTpHQi1TTEs6R0I6U09VVEggTEFOQVJLU0hJUkUKKzIwMDpHQi1TVFk6R0I6U09VVEggVFlORVNJREUKKzIwMTpHQi1TWU86R0I6U09VVEggWU9SS1NISVJFCisyMDI6R0ItU1RIOkdCOlNPVVRIQU1QVE9OCisyMDM6R0ItU09TOkdCOlNPVVRIRU5EIE9OIFNFQQorMjA0OkdCLVNXSzpHQjpTT1VUSFdBUksKKzIwNTpHQi1TSE46R0I6U1QuIEhFTEVOUworMjA2OkdCLVNUUzpHQjpTVEFGRk9SRFNISVJFCisyMDc6R0ItU1RHOkdCOlNUSVJMSU5HCisyMDg6R0ItU0tQOkdCOlNUT0NLUE9SVAorMjA5OkdCLVNUVDpHQjpTVE9DS1RPTiBPTiBURUVTCisyMTA6R0ItU1RFOkdCOlNUT0tFIE9OIFRSRU5UCisyMTE6R0ItU1RCOkdCOlNUUkFCQU5FCisyMTI6R0ItU0ZLOkdCOlNVRkZPTEsKKzIxMzpHQi1TTkQ6R0I6U1VOREVSTEFORAorMjE0OkdCLVNSWTpHQjpTVVJSRVkKKzIxNTpHQi1TVE46R0I6U1VUVE9OCisyMTY6R0ItU1dBOkdCOlNXQU5TRUEgW0FCRVJUQVdFIEdCIEFUQV0KKzIxNzpHQi1TV0Q6R0I6U1dJTkRPTgorMjE4OkdCLVRBTTpHQjpUQU1FU0lERQorMjE5OkdCLVRGVzpHQjpURUxGT1JEIEFORCBXUkVLSU4KKzIyMDpHQi1USFI6R0I6VEhVUlJPQ0sKKzIyMTpHQi1UT0I6R0I6VE9SQkFZCisyMjI6R0ItVE9GOkdCOlRPUkZBRU4gW1RPUiBGQUVOXQorMjIzOkdCLVRXSDpHQjpUT1dFUiBIQU1MRVRTCisyMjQ6R0ItVFJGOkdCOlRSQUZGT1JECisyMjU6R0ItVUs6R0I6VU5JVEVEIEtJTkdET00KKzIyNjpHQi1WR0w6R0I6VkFMRSBPRiBHTEFNT1JHQU4sIFRIRSBbQlJPIE1PUkdBTk5XRyBHQiBCTUddCisyMjc6R0ItV0tGOkdCOldBS0VGSUVMRAorMjI4OkdCLVdMTDpHQjpXQUxTQUxMCisyMjk6R0ItV0ZUOkdCOldBTFRIQU0gRk9SRVNUCisyMzA6R0ItV05EOkdCOldBTkRTV09SVEgKKzIzMTpHQi1XUlQ6R0I6V0FSUklOR1RPTgorMjMyOkdCLVdBUjpHQjpXQVJXSUNLU0hJUkUKKzIzMzpHQi1XQks6R0I6V0VTVCBCRVJLU0hJUkUKKzIzNDpHQi1XRFU6R0I6V0VTVCBEVU5CQVJUT05TSElSRQorMjM1OkdCLVdMTjpHQjpXRVNUIExPVEhJQU4KKzIzNjpHQi1XTUQ6R0I6V0VTVCBNSURMQU5EUworMjM3OkdCLVdNSTpHQjpXRVNUIE1JRExBTkRTIChDT1VOVFkpCisyMzg6R0ItV1NYOkdCOldFU1QgU1VTU0VYCisyMzk6R0ItV1lPOkdCOldFU1QgWU9SS1NISVJFCisyNDA6R0ItV1NNOkdCOldFU1RNSU5TVEVSCisyNDE6R0ItV0dOOkdCOldJR0FOCisyNDI6R0ItV0lMOkdCOldJTFRTSElSRQorMjQzOkdCLVdOTTpHQjpXSU5EU09SIEFORCBNQUlERU5IRUFECisyNDQ6R0ItV1JMOkdCOldJUlJBTAorMjQ1OkdCLVdPSzpHQjpXT0tJTkdIQU0KKzI0NjpHQi1XTFY6R0I6V09MVkVSSEFNUFRPTgorMjQ3OkdCLVdPUjpHQjpXT1JDRVNURVJTSElSRQorMjQ4OkdCLVdSWDpHQjpXUkVYSEFNIFtXUkVDU0FNIEdCIFdSQ10KKzI0OTpHQi1ZT1I6R0I6WU9SSwpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L0dCUi9HQlJfQURNSU4yX0xFWC50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvR0JSL0dCUl9BRE1JTjJfTEVYLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNjlkZTI5Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L0dCUi9HQlJfQURNSU4yX0xFWC50eHQKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9HSEEvR0hBX0FETUlOMV9MRVgudHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L0dIQS9HSEFfQURNSU4xX0xFWC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2M2NGJmMgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9HSEEvR0hBX0FETUlOMV9MRVgudHh0CkBAIC0wLDAgKzEsMTAgQEAKKzE6R0gtQUg6R0g6QVNIQU5USQorMjpHSC1CQTpHSDpCUk9ORyBBSEFGTworMzpHSC1DUDpHSDpDRU5UUkFMIFtDRU5UUkFMMV0KKzQ6R0gtRVA6R0g6RUFTVEVSTiBbRUFTVEVSTjNdCis1OkdILUFBOkdIOkdSRUFURVIgQUNDUkEKKzY6R0gtTlA6R0g6Tk9SVEhFUk4KKzc6R0gtVUU6R0g6VVBQRVIgRUFTVAorODpHSC1VVzpHSDpVUFBFUiBXRVNUCis5OkdILVRWOkdIOlZPTFRBCisxMDpHSC1XUDpHSDpXRVNURVJOMgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L0dIQS9HSEFfQURNSU4yX0xFWC50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvR0hBL0dIQV9BRE1JTjJfTEVYLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNTYyODY0Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L0dIQS9HSEFfQURNSU4yX0xFWC50eHQKQEAgLTAsMCArMSwxNDEgQEAKKzE6R0g6R0hBOkdIQU5BOkdyZWF0ZXIgQWNjcmE6QWNjcmEtVGVtYQorMjpHSDpHSEE6R0hBTkE6R3JlYXRlciBBY2NyYTpBZGEKKzM6R0g6R0hBOkdIQU5BOkdyZWF0ZXIgQWNjcmE6RGFuZ2JlCis0OkdIOkdIQTpHSEFOQTpHcmVhdGVyIEFjY3JhOkdhCis1OkdIOkdIQTpHSEFOQTpHcmVhdGVyIEFjY3JhOlNoYWkKKzY6R0g6R0hBOkdIQU5BOkdyZWF0ZXIgQWNjcmE6VGVtYSAoQWNjcmEpCisxOkdIOkdIQTpHSEFOQTpDZW50cmFsOkFidXJhCisyOkdIOkdIQTpHSEFOQTpDZW50cmFsOkFnb25hbWFuCiszOkdIOkdIQTpHSEFOQTpDZW50cmFsOkFqdW1ha28KKzQ6R0g6R0hBOkdIQU5BOkNlbnRyYWw6QW55YW4tQnJlbWFuCis1OkdIOkdIQTpHSEFOQTpDZW50cmFsOkFzZWJ1Cis2OkdIOkdIQTpHSEFOQTpDZW50cmFsOkFzc2luCis3OkdIOkdIQTpHSEFOQTpDZW50cmFsOkF3dXR1LVNlbnlhCis4OkdIOkdIQTpHSEFOQTpDZW50cmFsOkNhcGUgQ29hc3QKKzk6R0g6R0hBOkdIQU5BOkNlbnRyYWw6RGVua3lpcmEKKzEwOkdIOkdIQTpHSEFOQTpDZW50cmFsOkVrdW1maQorMTE6R0g6R0hBOkdIQU5BOkNlbnRyYWw6R29tb2EtQWt5ZW1waW0KKzEyOkdIOkdIQTpHSEFOQTpDZW50cmFsOkdvbW9hLUFzc2luLUFqdW1ha28KKzEzOkdIOkdIQTpHSEFOQTpDZW50cmFsOktvbWVuZGEtRWRpbmEtQWd1YWZvLUFicmUKKzE0OkdIOkdIQTpHSEFOQTpDZW50cmFsOk1mYW50c2ltYW4KKzE1OkdIOkdIQTpHSEFOQTpDZW50cmFsOk55YWFrcm9tLU5rdW0KKzE2OkdIOkdIQTpHSEFOQTpDZW50cmFsOlN3ZWRydQorMTc6R0g6R0hBOkdIQU5BOkNlbnRyYWw6VHdpZm8gRGVua3lpcmEgSGVtYW4KKzE4OkdIOkdIQTpHSEFOQTpDZW50cmFsOldpbm5lYmEKKzE6R0g6R0hBOkdIQU5BOlVwcGVyIEVhc3Q6QmF3a3UKKzI6R0g6R0hBOkdIQU5BOlVwcGVyIEVhc3Q6Qm9sZ2F0YW5nYS1Ub25nbworMzpHSDpHSEE6R0hBTkE6VXBwZXIgRWFzdDpCb25nby1OYWJkYW0KKzQ6R0g6R0hBOkdIQU5BOlVwcGVyIEVhc3Q6Q2hpYW5hLVBhZ2EKKzU6R0g6R0hBOkdIQU5BOlVwcGVyIEVhc3Q6S3VzYW5hYmEtWmViaWxsYQorNjpHSDpHSEE6R0hBTkE6VXBwZXIgRWFzdDpOYXZyb25nbworNzpHSDpHSEE6R0hBTkE6VXBwZXIgRWFzdDpQdXNpZ2EtUHVsaW1ha3VtCis4OkdIOkdIQTpHSEFOQTpVcHBlciBFYXN0OlNhbmRlbWVuCis5OkdIOkdIQTpHSEFOQTpVcHBlciBFYXN0OlRlbXBhbmUtR2FydQorMTpHSDpHSEE6R0hBTkE6VXBwZXIgV2VzdDpMYW1idXNzaWUtTmFuZG9tCisyOkdIOkdIQTpHSEFOQTpVcHBlciBXZXN0Okxhd3JhIEppcmFwYQorMzpHSDpHSEE6R0hBTkE6VXBwZXIgV2VzdDpOYWRhd2xpLUZ1bnNpCis0OkdIOkdIQTpHSEFOQTpVcHBlciBXZXN0OlR1bXUKKzU6R0g6R0hBOkdIQU5BOlVwcGVyIFdlc3Q6V2EKKzE6R0g6R0hBOkdIQU5BOldlc3Rlcm46QWhhbnRhCisyOkdIOkdIQTpHSEFOQTpXZXN0ZXJuOkFtZW5maQorMzpHSDpHSEE6R0hBTkE6V2VzdGVybjpBb3dpbgorNDpHSDpHSEE6R0hBTkE6V2VzdGVybjpBeGltCis1OkdIOkdIQTpHSEFOQTpXZXN0ZXJuOkRvbXBpbQorNjpHSDpHSEE6R0hBTkE6V2VzdGVybjpKb21vcm8KKzc6R0g6R0hBOkdIQU5BOldlc3Rlcm46SnVhYmVzby1CaWEKKzg6R0g6R0hBOkdIQU5BOldlc3Rlcm46UHJlc3RlYQorOTpHSDpHSEE6R0hBTkE6V2VzdGVybjpTZWZ3aS1CaWJpYW5pIEJla3dhaQorMTA6R0g6R0hBOkdIQU5BOldlc3Rlcm46U2Vrb25kaS1UYWtvcmFkaQorMTE6R0g6R0hBOkdIQU5BOldlc3Rlcm46U2hhbWEKKzEyOkdIOkdIQTpHSEFOQTpXZXN0ZXJuOlRhcmt3YS1BYm9zbworMTM6R0g6R0hBOkdIQU5BOldlc3Rlcm46V2lhd3NvCisxOkdIOkdIQTpHSEFOQTpOb3J0aGVybjpCaW1iaWxsYQorMjpHSDpHSEE6R0hBTkE6Tm9ydGhlcm46Qm9sZQorMzpHSDpHSEE6R0hBTkE6Tm9ydGhlcm46RGFtYW5nbworNDpHSDpHSEE6R0hBTkE6Tm9ydGhlcm46R3VzaGllZ3UtQ2hlcmVwb25pCis1OkdIOkdIQTpHSEFOQTpOb3J0aGVybjpOYWxlcmlndQorNjpHSDpHSEE6R0hBTkE6Tm9ydGhlcm46U2Fib2JhLVphYnp1Z3UKKzc6R0g6R0hBOkdIQU5BOk5vcnRoZXJuOlNhbGFnYQorODpHSDpHSEE6R0hBTkE6Tm9ydGhlcm46U2F2ZWx1Z3UKKzk6R0g6R0hBOkdIQU5BOk5vcnRoZXJuOlRhbWFsZQorMTA6R0g6R0hBOkdIQU5BOk5vcnRoZXJuOlRvbG9uCisxMTpHSDpHSEE6R0hBTkE6Tm9ydGhlcm46V2FsZXdhbGUKKzEyOkdIOkdIQTpHSEFOQTpOb3J0aGVybjpZZW5kaQorMTpHSDpHSEE6R0hBTkE6Vm9sdGE6QWRha2x1LUFueWlnYmUKKzI6R0g6R0hBOkdIQU5BOlZvbHRhOkFrYW4gQm93aXJlCiszOkdIOkdIQTpHSEFOQTpWb2x0YTpBa2FuIFdhd2EKKzQ6R0g6R0hBOkdIQU5BOlZvbHRhOkFubG8KKzU6R0g6R0hBOkdIQU5BOlZvbHRhOkF2ZW5vcgorNjpHSDpHSEE6R0hBTkE6Vm9sdGE6Qmlha295ZQorNzpHSDpHSEE6R0hBTkE6Vm9sdGE6QnVlbQorODpHSDpHSEE6R0hBTkE6Vm9sdGE6RGF5aQorOTpHSDpHSEE6R0hBTkE6Vm9sdGE6RHV0YXNvcgorMTA6R0g6R0hBOkdIQU5BOlZvbHRhOkR6b3plCisxMTpHSDpHSEE6R0hBTkE6Vm9sdGE6R2JpCisxMjpHSDpHSEE6R0hBTkE6Vm9sdGE6SG8KKzEzOkdIOkdIQTpHSEFOQTpWb2x0YTpLZXRhCisxNDpHSDpHSEE6R0hBTkE6Vm9sdGE6S2V0ZS1LcmFjaGkKKzE1OkdIOkdIQTpHSEFOQTpWb2x0YTpLcGFuZHUKKzE2OkdIOkdIQTpHSEFOQTpWb2x0YTpTb21lLUFmbGFvCisxNzpHSDpHSEE6R0hBTkE6Vm9sdGE6VG9uZ3UKKzE4OkdIOkdIQTpHSEFOQTpWb2x0YTpZaW5nb3IKKzE6R0g6R0hBOkdIQU5BOkFzaGFudGk6QWRhYWd5YQorMjpHSDpHSEE6R0hBTkE6QXNoYW50aTpBZGFuc2kKKzM6R0g6R0hBOkdIQU5BOkFzaGFudGk6QWdvbmEgQXNoYW50aQorNDpHSDpHSEE6R0hBTkE6QXNoYW50aTpBaGFmby1Bbm8KKzU6R0g6R0hBOkdIQU5BOkFzaGFudGk6QWtyb2tlcnJpIERvbXBvYXNlCis2OkdIOkdIQTpHSEFOQTpBc2hhbnRpOkFtYW5hbW8KKzc6R0g6R0hBOkdIQU5BOkFzaGFudGk6QW1hbnNpZQorODpHSDpHSEE6R0hBTkE6QXNoYW50aTpBc2hhbnRpLUFraW4KKzk6R0g6R0hBOkdIQU5BOkFzaGFudGk6QXR3aW1hLUt3YW53b21hCisxMDpHSDpHSEE6R0hBTkE6QXNoYW50aTpBdHdpbWEtTndhYmlhZ3lhCisxMTpHSDpHSEE6R0hBTkE6QXNoYW50aTpCZWt3YWkKKzEyOkdIOkdIQTpHSEFOQTpBc2hhbnRpOkVqaXN1CisxMzpHSDpHSEE6R0hBTkE6QXNoYW50aTpFanVyYS1TZWtvZHVtYXNpCisxNDpHSDpHSEE6R0hBTkE6QXNoYW50aTpKdWFiZW4KKzE1OkdIOkdIQTpHSEFOQTpBc2hhbnRpOkp1YXNvLUJhbmthbWFuCisxNjpHSDpHSEE6R0hBTkE6QXNoYW50aTpLb25vbmdvLU9kdW1hc2kKKzE3OkdIOkdIQTpHSEFOQTpBc2hhbnRpOkt1bWFzaQorMTg6R0g6R0hBOkdIQU5BOkFzaGFudGk6S3dhYnJlCisxOTpHSDpHSEE6R0hBTkE6QXNoYW50aTpMYWtlLUJvc29tdHdpCisyMDpHSDpHSEE6R0hBTkE6QXNoYW50aTpNYW1wb25nCisyMTpHSDpHSEE6R0hBTkE6QXNoYW50aTpNYW5zbworMjI6R0g6R0hBOkdIQU5BOkFzaGFudGk6TXBvbnVhCisyMzpHSDpHSEE6R0hBTkE6QXNoYW50aTpOc3V0YS1Ld2FtYW5nLUJlcG9zbworMjQ6R0g6R0hBOkdIQU5BOkFzaGFudGk6T2J1YXNpCisyNTpHSDpHSEE6R0hBTkE6QXNoYW50aTpPZG90b2JyaQorMjY6R0g6R0hBOkdIQU5BOkFzaGFudGk6T2ZmaW5zbworMjc6R0g6R0hBOkdIQU5BOkFzaGFudGk6U2VreWVyZQorMjg6R0g6R0hBOkdIQU5BOkFzaGFudGk6VGVwYQorMTpHSDpHSEE6R0hBTkE6RWFzdGVybjpBYmVmaXRpCisyOkdIOkdIQTpHSEFOQTpFYXN0ZXJuOkFiaXJlbQorMzpHSDpHSEE6R0hBTkE6RWFzdGVybjpBYnVha3dhCis0OkdIOkdIQTpHSEFOQTpFYXN0ZXJuOkFmcmFtCis1OkdIOkdIQTpHSEFOQTpFYXN0ZXJuOkFrcm9wb25nCis2OkdIOkdIQTpHSEFOQTpFYXN0ZXJuOkFrd2FtdS1BbnVtLUJvc28KKzc6R0g6R0hBOkdIQU5BOkVhc3Rlcm46QXNhbWFua2VzZQorODpHSDpHSEE6R0hBTkE6RWFzdGVybjpCZWdvcm8KKzk6R0g6R0hBOkdIQU5BOkVhc3Rlcm46QmlyaW0tQW5hZm8KKzEwOkdIOkdIQTpHSEFOQTpFYXN0ZXJuOkthZGUtQWt3YXRpYQorMTE6R0g6R0hBOkdIQU5BOkVhc3Rlcm46S29mb3JpZHVhCisxMjpHSDpHSEE6R0hBTkE6RWFzdGVybjpLd2FiZW4KKzEzOkdIOkdIQTpHSEFOQTpFYXN0ZXJuOk1hbnlhIEtyb2JvCisxNDpHSDpHSEE6R0hBTkE6RWFzdGVybjpOa2F3a2F3CisxNTpHSDpHSEE6R0hBTkE6RWFzdGVybjpOc2F3YW0tQWJ1cmkKKzE2OkdIOkdIQTpHSEFOQTpFYXN0ZXJuOk9kYQorMTc6R0g6R0hBOkdIQU5BOkVhc3Rlcm46U3VodW0KKzE4OkdIOkdIQTpHSEFOQTpFYXN0ZXJuOllpbG8tS3JvYm8tT3N1ZG9rdQorMTpHSDpHSEE6R0hBTkE6QnJvbmcgQWhhZm86QXN1dGlmaQorMjpHSDpHSEE6R0hBTkE6QnJvbmcgQWhhZm86QXRlYnVidQorMzpHSDpHSEE6R0hBTkE6QnJvbmcgQWhhZm86QmVjaGVtCis0OkdIOkdIQTpHSEFOQTpCcm9uZyBBaGFmbzpCZXJla3VtCis1OkdIOkdIQTpHSEFOQTpCcm9uZyBBaGFmbzpEb3JtYWEKKzY6R0g6R0hBOkdIQU5BOkJyb25nIEFoYWZvOkR1YXlhdy1Oa3dhbnRhCis3OkdIOkdIQTpHSEFOQTpCcm9uZyBBaGFmbzpHb2FzbworODpHSDpHSEE6R0hBTkE6QnJvbmcgQWhhZm86SmFtYW4KKzk6R0g6R0hBOkdIQU5BOkJyb25nIEFoYWZvOkt1a3VvbQorMTA6R0g6R0hBOkdIQU5BOkJyb25nIEFoYWZvOkt3YW1lIERhbnNvCisxMTpHSDpHSEE6R0hBTkE6QnJvbmcgQWhhZm86TmtvcmFuemEKKzEyOkdIOkdIQTpHSEFOQTpCcm9uZyBBaGFmbzpTdW55YW5pCisxMzpHSDpHSEE6R0hBTkE6QnJvbmcgQWhhZm86VGVjaGltYW4KKzE0OkdIOkdIQTpHSEFOQTpCcm9uZyBBaGFmbzpXZW5jaGkKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9HSU4vR0lOX0FETUlOMV9MRVgudHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L0dJTi9HSU5fQURNSU4xX0xFWC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGEwNDE0MAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9HSU4vR0lOX0FETUlOMV9MRVgudHh0CkBAIC0wLDAgKzEsMzMgQEAKKzE6R04tQkU6R046QkVZTEEKKzI6R04tQkY6R046Qk9GRkEKKzM6R04tQks6R046Qk9LRQorNDpHTi1DTzpHTjpDT1lBSAorNTpHTi1EQjpHTjpEQUJPTEEKKzY6R04tREw6R046REFMQUJBCis3OkdOLURJOkdOOkRJTkdVSVJBWUUKKzg6R04tRFU6R046RFVCUkVLQQorOTpHTi1GQTpHTjpGQVJBTkFICisxMDpHTi1GTzpHTjpGT1JFQ0FSSUFICisxMTpHTi1GUjpHTjpGUklBCisxMjpHTi1HQTpHTjpHQU9VQUwKKzEzOkdOLUdVOkdOOkdVRUtFRE9VCisxNDpHTi1LQTpHTjpLQU5LQU4KKzE1OkdOLUtFOkdOOktFUk9VQU5FCisxNjpHTi1LRDpHTjpLSU5ESUEKKzE3OkdOLUtTOkdOOktJU1NJRE9VR09VCisxODpHTi1LQjpHTjpLT1VCSUEKKzE5OkdOLUtOOkdOOktPVU5EQVJBCisyMDpHTi1LTzpHTjpLT1VST1VTU0EKKzIxOkdOLUxBOkdOOkxBQkUKKzIyOkdOLUxFOkdOOkxFTE9VTUEKKzIzOkdOLUxPOkdOOkxPTEEKKzI0OkdOLU1DOkdOOk1BQ0VOVEEKKzI1OkdOLU1MOkdOOk1BTEkKKzI2OkdOLU1NOkdOOk1BTU9VCisyNzpHTi1NRDpHTjpNQU5ESUFOQQorMjg6R04tTlo6R046TlpFUkVLT1JFCisyOTpHTi1QSTpHTjpQSVRBCiszMDpHTi1TSTpHTjpTSUdVSVJJCiszMTpHTi1URTpHTjpURUxJTUVMRQorMzI6R04tVE86R046VE9VR1VFCiszMzpHTi1ZTzpHTjpZT01PVQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L0dJTi9HSU5fQURNSU4yX0xFWC50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvR0lOL0dJTl9BRE1JTjJfTEVYLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYmIyNDkwCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L0dJTi9HSU5fQURNSU4yX0xFWC50eHQKQEAgLTAsMCArMSwzMyBAQAorMTpHTjpHSU46R1VJTkVBOktpbmRpYTpCb2ZmYQorMjpHTjpHSU46R1VJTkVBOktpbmRpYTpCb2tlCiszOkdOOkdJTjpHVUlORUE6S2luZGlhOkNveWFoCis0OkdOOkdJTjpHVUlORUE6S2luZGlhOkR1YnJla2EKKzU6R046R0lOOkdVSU5FQTpLaW5kaWE6Rm9yZWNhcmlhaAorNjpHTjpHSU46R1VJTkVBOktpbmRpYTpGcmlhCis3OkdOOkdJTjpHVUlORUE6S2luZGlhOktpbmRpYQorODpHTjpHSU46R1VJTkVBOktpbmRpYTpUZWxpbWVsZQorMTpHTjpHSU46R1VJTkVBOkxhYmU6RGFsYWJhCisyOkdOOkdJTjpHVUlORUE6TGFiZTpHYW91YWwKKzM6R046R0lOOkdVSU5FQTpMYWJlOktvdWJpYQorNDpHTjpHSU46R1VJTkVBOkxhYmU6S291bmRhcmEKKzU6R046R0lOOkdVSU5FQTpMYWJlOkxhYmUKKzY6R046R0lOOkdVSU5FQTpMYWJlOkxlbG91bWEKKzc6R046R0lOOkdVSU5FQTpMYWJlOk1hbGkKKzg6R046R0lOOkdVSU5FQTpMYWJlOk1hbW91Cis5OkdOOkdJTjpHVUlORUE6TGFiZTpQaXRhCisxMDpHTjpHSU46R1VJTkVBOkxhYmU6VG91Z2UKKzE6R046R0lOOkdVSU5FQTpOemVyZWtvcmU6QmV5bGEKKzI6R046R0lOOkdVSU5FQTpOemVyZWtvcmU6R3VlY2tlZG91CiszOkdOOkdJTjpHVUlORUE6TnplcmVrb3JlOktpc3NpZG91Z291Cis0OkdOOkdJTjpHVUlORUE6TnplcmVrb3JlOkxvbGEKKzU6R046R0lOOkdVSU5FQTpOemVyZWtvcmU6TWFjZW50YQorNjpHTjpHSU46R1VJTkVBOk56ZXJla29yZTpOemVyZWtvcmUKKzc6R046R0lOOkdVSU5FQTpOemVyZWtvcmU6WW9tb3UKKzE6R046R0lOOkdVSU5FQTpLYW5rYW46RGFib2xhCisyOkdOOkdJTjpHVUlORUE6S2Fua2FuOkRpbmd1aXJheWUKKzM6R046R0lOOkdVSU5FQTpLYW5rYW46RmFyYW5haAorNDpHTjpHSU46R1VJTkVBOkthbmthbjpLYW5rYW4KKzU6R046R0lOOkdVSU5FQTpLYW5rYW46S2Vyb3VhbmUKKzY6R046R0lOOkdVSU5FQTpLYW5rYW46S291cm91c3NhCis3OkdOOkdJTjpHVUlORUE6S2Fua2FuOk1hbmRpYW5hCis4OkdOOkdJTjpHVUlORUE6S2Fua2FuOlNpZ3VpcmkKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9HTUIvR01CX0FETUlOMV9MRVgudHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L0dNQi9HTUJfQURNSU4xX0xFWC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWU4NmZkMQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9HTUIvR01CX0FETUlOMV9MRVgudHh0CkBAIC0wLDAgKzEsNiBAQAorMTpHTS1COkdNOkJBTkpVTAorMjpHTS1MOkdNOkxPV0VSIFJJVkVSCiszOkdNLU06R006TUFDQ0FSVEhZIElTTEFORAorNDpHTS1OOkdNOk5PUlRIIEJBTksKKzU6R00tVTpHTTpVUFBFUiBSSVZFUgorNjpHTS1XOkdNOldFU1RFUk4gW1dFU1RFUk4xXQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L0dNQi9HTUJfQURNSU4yX0xFWC50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvR01CL0dNQl9BRE1JTjJfTEVYLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mM2I0ZjY1Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L0dNQi9HTUJfQURNSU4yX0xFWC50eHQKQEAgLTAsMCArMSwzNyBAQAorMTpHTTpHTUI6R0FNQklBIFRIRTpCYW5qdWw6QmFuanVsCisyOkdNOkdNQjpHQU1CSUEgVEhFOkJhbmp1bDpLVURDCisxOkdNOkdNQjpHQU1CSUEgVEhFOk5vcnRoIEJhbms6Q2VudHJhbCBCYWRkaWJ1CisyOkdNOkdNQjpHQU1CSUEgVEhFOk5vcnRoIEJhbms6Sm9rYWR1CiszOkdNOkdNQjpHQU1CSUEgVEhFOk5vcnRoIEJhbms6TG93ZXIgQmFkZGlidQorNDpHTTpHTUI6R0FNQklBIFRIRTpOb3J0aCBCYW5rOkxvd2VyIE5pdW1pCis1OkdNOkdNQjpHQU1CSUEgVEhFOk5vcnRoIEJhbms6VXBwZXIgQmFkZGlidQorNjpHTTpHTUI6R0FNQklBIFRIRTpOb3J0aCBCYW5rOlVwcGVyIE5pdW1pCisxOkdNOkdNQjpHQU1CSUEgVEhFOldlc3Rlcm46Rm9uaSBCaW50YW5nLUthcmVuYWkKKzI6R006R01COkdBTUJJQSBUSEU6V2VzdGVybjpGb25pIEJvbmRhbGkKKzM6R006R01COkdBTUJJQSBUSEU6V2VzdGVybjpGb25pIEJyZWZldAorNDpHTTpHTUI6R0FNQklBIFRIRTpXZXN0ZXJuOkZvbmkgSmFycm9sCis1OkdNOkdNQjpHQU1CSUEgVEhFOldlc3Rlcm46Rm9uaSBLYW5zYWxhCis2OkdNOkdNQjpHQU1CSUEgVEhFOldlc3Rlcm46S29tYm8gQ2VudHJhbAorNzpHTTpHTUI6R0FNQklBIFRIRTpXZXN0ZXJuOktvbWJvIEVhc3QKKzg6R006R01COkdBTUJJQSBUSEU6V2VzdGVybjpLb21ibyBOb3J0aC9TdCBNYXJ5Cis5OkdNOkdNQjpHQU1CSUEgVEhFOldlc3Rlcm46S29tYm8gU291dGgKKzE6R006R01COkdBTUJJQSBUSEU6VXBwZXIgUml2ZXI6RnVsbGFkdSBFYXN0CisyOkdNOkdNQjpHQU1CSUEgVEhFOlVwcGVyIFJpdmVyOkthbnRvcmEKKzM6R006R01COkdBTUJJQSBUSEU6VXBwZXIgUml2ZXI6U2FuZHUKKzQ6R006R01COkdBTUJJQSBUSEU6VXBwZXIgUml2ZXI6V3VsaQorMTpHTTpHTUI6R0FNQklBIFRIRTpMb3dlciBSaXZlcjpKYXJyYSBDZW50cmFsCisyOkdNOkdNQjpHQU1CSUEgVEhFOkxvd2VyIFJpdmVyOkphcnJhIEVhc3QKKzM6R006R01COkdBTUJJQSBUSEU6TG93ZXIgUml2ZXI6SmFycmEgV2VzdAorNDpHTTpHTUI6R0FNQklBIFRIRTpMb3dlciBSaXZlcjpLaWFuZyBDZW50cmFsCis1OkdNOkdNQjpHQU1CSUEgVEhFOkxvd2VyIFJpdmVyOktpYW5nIEVhc3QKKzY6R006R01COkdBTUJJQSBUSEU6TG93ZXIgUml2ZXI6S2lhbmcgV2VzdAorMTpHTTpHTUI6R0FNQklBIFRIRTpNYWNjYXJ0aHkgSXNsYW5kOkZ1bGxhZHUgV2VzdAorMjpHTTpHTUI6R0FNQklBIFRIRTpNYWNjYXJ0aHkgSXNsYW5kOkxvd2VyIFNhbG91bQorMzpHTTpHTUI6R0FNQklBIFRIRTpNYWNjYXJ0aHkgSXNsYW5kOk1hY2NhcnRoeSBJc2xhbmQKKzQ6R006R01COkdBTUJJQSBUSEU6TWFjY2FydGh5IElzbGFuZDpOaWFtaW5hIERhbmt1bmt1Cis1OkdNOkdNQjpHQU1CSUEgVEhFOk1hY2NhcnRoeSBJc2xhbmQ6TmlhbWluYSBFYXN0Cis2OkdNOkdNQjpHQU1CSUEgVEhFOk1hY2NhcnRoeSBJc2xhbmQ6TmlhbWluYSBXZXN0Cis3OkdNOkdNQjpHQU1CSUEgVEhFOk1hY2NhcnRoeSBJc2xhbmQ6TmlhbmkKKzg6R006R01COkdBTUJJQSBUSEU6TWFjY2FydGh5IElzbGFuZDpOaWFuaWphCis5OkdNOkdNQjpHQU1CSUEgVEhFOk1hY2NhcnRoeSBJc2xhbmQ6U2FtaQorMTA6R006R01COkdBTUJJQSBUSEU6TWFjY2FydGh5IElzbGFuZDpVcHBlciBTYWxvdW0KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9HTkIvR05CX0FETUlOMV9MRVgudHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L0dOQi9HTkJfQURNSU4xX0xFWC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTc0MTVlOAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9HTkIvR05CX0FETUlOMV9MRVgudHh0CkBAIC0wLDAgKzEsOSBAQAorMTpHVy1CQTpHVzpCQUZBVEEKKzI6R1ctQk06R1c6QklPTUJPCiszOkdXLUJTOkdXOkJJU1NBVQorNDpHVy1CTDpHVzpCT0xBTUEKKzU6R1ctQ0E6R1c6Q0FDSEVVCis2OkdXLUdBOkdXOkdBQlUKKzc6R1ctT0k6R1c6T0lPCis4OkdXLVFVOkdXOlFVSU5BUkEKKzk6R1ctVE86R1c6VE9NQkFMSQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L0dOQi9HTkJfQURNSU4yX0xFWC50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvR05CL0dOQl9BRE1JTjJfTEVYLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMjNjYzIyCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L0dOQi9HTkJfQURNSU4yX0xFWC50eHQKQEAgLTAsMCArMSwzNyBAQAorMTpHVzpHTkI6R1VJTkVBIEJJU1NBVTpCb2xhbWE6Qm9sYW1hCisyOkdXOkdOQjpHVUlORUEgQklTU0FVOkJvbGFtYTpCdWJhcXVlCiszOkdXOkdOQjpHVUlORUEgQklTU0FVOkJvbGFtYTpDYXJhdmVsYSAoVW5vKQorMTpHVzpHTkI6R1VJTkVBIEJJU1NBVTpCaW9tYm86UHJhYmlzCisyOkdXOkdOQjpHVUlORUEgQklTU0FVOkJpb21ibzpRdWluaGFtZWwKKzM6R1c6R05COkdVSU5FQSBCSVNTQVU6QmlvbWJvOlNhZmltCisxOkdXOkdOQjpHVUlORUEgQklTU0FVOkJhZmF0YTpCYWZhdGEKKzI6R1c6R05COkdVSU5FQSBCSVNTQVU6QmFmYXRhOkJhbWJhZGluY2EKKzM6R1c6R05COkdVSU5FQSBCSVNTQVU6QmFmYXRhOkNvbnR1Ym9lbAorNDpHVzpHTkI6R1VJTkVBIEJJU1NBVTpCYWZhdGE6R2Fsb21hcm8KKzU6R1c6R05COkdVSU5FQSBCSVNTQVU6QmFmYXRhOkdhbWFtdW5kbworNjpHVzpHTkI6R1VJTkVBIEJJU1NBVTpCYWZhdGE6WGl0b2xlCisxOkdXOkdOQjpHVUlORUEgQklTU0FVOlRvbWJhbGk6QmVkYW5kYQorMjpHVzpHTkI6R1VJTkVBIEJJU1NBVTpUb21iYWxpOkNhY2luZQorMzpHVzpHTkI6R1VJTkVBIEJJU1NBVTpUb21iYWxpOkNhdGlvCis0OkdXOkdOQjpHVUlORUEgQklTU0FVOlRvbWJhbGk6UXVlYm8KKzE6R1c6R05COkdVSU5FQSBCSVNTQVU6UXVpbmFyYTpCdWJhCisyOkdXOkdOQjpHVUlORUEgQklTU0FVOlF1aW5hcmE6RW1wYWRhCiszOkdXOkdOQjpHVUlORUEgQklTU0FVOlF1aW5hcmE6RnVsYWN1bmRhCis0OkdXOkdOQjpHVUlORUEgQklTU0FVOlF1aW5hcmE6VGl0ZQorMTpHVzpHTkI6R1VJTkVBIEJJU1NBVTpCaXNzYXU6Qmlzc2F1CisxOkdXOkdOQjpHVUlORUEgQklTU0FVOk9pbzpCaXNzb3JhCisyOkdXOkdOQjpHVUlORUEgQklTU0FVOk9pbzpGYXJpbQorMzpHVzpHTkI6R1VJTkVBIEJJU1NBVTpPaW86TWFuc2FiYQorNDpHVzpHTkI6R1VJTkVBIEJJU1NBVTpPaW86TWFuc29hCis1OkdXOkdOQjpHVUlORUEgQklTU0FVOk9pbzpOaGFjcmEKKzE6R1c6R05COkdVSU5FQSBCSVNTQVU6R2FidTpCb2UKKzI6R1c6R05COkdVSU5FQSBCSVNTQVU6R2FidTpHYWJ1CiszOkdXOkdOQjpHVUlORUEgQklTU0FVOkdhYnU6UGljaGUKKzQ6R1c6R05COkdVSU5FQSBCSVNTQVU6R2FidTpQaXJhZGEKKzU6R1c6R05COkdVSU5FQSBCSVNTQVU6R2FidTpTb25hY28KKzE6R1c6R05COkdVSU5FQSBCSVNTQVU6Q2FjaGV1OkJpZ2VuZQorMjpHVzpHTkI6R1VJTkVBIEJJU1NBVTpDYWNoZXU6QnVsYQorMzpHVzpHTkI6R1VJTkVBIEJJU1NBVTpDYWNoZXU6Q2FjaGV1Cis0OkdXOkdOQjpHVUlORUEgQklTU0FVOkNhY2hldTpDYWlvCis1OkdXOkdOQjpHVUlORUEgQklTU0FVOkNhY2hldTpDYW5naHVuZ28KKzY6R1c6R05COkdVSU5FQSBCSVNTQVU6Q2FjaGV1OlNhbyBEb21pbmdvcwpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L0dOUS9HTlFfQURNSU4xX0xFWC50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvR05RL0dOUV9BRE1JTjFfTEVYLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYTk2ZmVmCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L0dOUS9HTlFfQURNSU4xX0xFWC50eHQKQEAgLTAsMCArMSw5IEBACisxOkdRLUFOOkdROkFOTk9CT04KKzI6R1EtQk46R1E6QklPS08gTk9SVEUKKzM6R1EtQlM6R1E6QklPS08gU1VSCis0OkdRLUNTOkdROkNFTlRSTyBTVVIKKzU6R1EtS046R1E6S0lFTlRFTQorNjpHUS1MSTpHUTpMSVRPUkFMCis3OkdRLUM6R1E6UkVHSU9OIENPTlRJTkVOVEFMCis4OkdRLUk6R1E6UkVHSU9OIElOU1VMQVIKKzk6R1EtV046R1E6V0VMRU5aQVMKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9HTlEvR05RX0FETUlOMl9MRVgudHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L0dOUS9HTlFfQURNSU4yX0xFWC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDQyNTBiNQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9HTlEvR05RX0FETUlOMl9MRVgudHh0CkBAIC0wLDAgKzEsOSBAQAorMTpHUTpHTlE6RVFVQVRPUklBTCBHVUlORUE6S2llbnRlbTpHTlEuTDIuNgorMTpHUTpHTlE6RVFVQVRPUklBTCBHVUlORUE6V2VsZW56YXM6R05RLkwyLjUKKzE6R1E6R05ROkVRVUFUT1JJQUwgR1VJTkVBOkJpb2tvIFN1cjpHTlEuTDIuOQorMTpHUTpHTlE6RVFVQVRPUklBTCBHVUlORUE6TGl0b3JhbDpHTlEuTDIuMgorMjpHUTpHTlE6RVFVQVRPUklBTCBHVUlORUE6TGl0b3JhbDpHTlEuTDIuMworMzpHUTpHTlE6RVFVQVRPUklBTCBHVUlORUE6TGl0b3JhbDpHTlEuTDIuNAorMTpHUTpHTlE6RVFVQVRPUklBTCBHVUlORUE6QW5ub2JvbjpHTlEuTDIuNworMTpHUTpHTlE6RVFVQVRPUklBTCBHVUlORUE6Q2VudHJvIFN1cjpHTlEuTDIuOAorMTpHUTpHTlE6RVFVQVRPUklBTCBHVUlORUE6Qmlva28gTm9ydGU6R05RLkwyLjEKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9HUkMvR1JDX0FETUlOMV9MRVgudHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L0dSQy9HUkNfQURNSU4xX0xFWC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmE1ZTU2MQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9HUkMvR1JDX0FETUlOMV9MRVgudHh0CkBAIC0wLDAgKzEsNTcgQEAKKzE6R1ItMzpHUjpBQ0hBSUEKKzI6R1ItNjk6R1I6QUdJTyBPUk9TCiszOkdSLTA6R1I6QUlUT0xJQSBBS0FSTkFOSUEKKzQ6R1ItODA6R1I6QU5BVE9MSUtJIE1BS0VET05JQQorNTpHUi06R1I6QVJHT0xJUworNjpHUi0yOkdSOkFSS0FESUEKKzc6R1ItQTpHUjpBVFRJS0kKKzg6R1ItNjQ6R1I6Q0hBTEtJRElLSQorOTpHUi05NDpHUjpDSEFOSUEKKzEwOkdSLTg1OkdSOkNISU9TCisxMTpHUi04OkdSOkRPREVLQU5JU09TCisxMjpHUi01MjpHUjpEUkFNQQorMTM6R1ItNzE6R1I6RFlUSUtJIEVMTEFEQQorMTQ6R1ItNjA6R1I6RFlUSUtJIE1BS0VET05JQQorMTU6R1ItNzpHUjpFVlJPUworMTY6R1ItMDU6R1I6RVZSWVRBTklBCisxNzpHUi0wNDpHUjpFVlZPSUEKKzE4OkdSLTA3OkdSOkZPS0lTCisxOTpHUi0wNjpHUjpGVEhJT1RJUworMjA6R1ItNTpHUjpHUkVWRU5BCisyMTpHUi00OkdSOklMRUlBCisyMjpHUi01MzpHUjpJTUFUSElBCisyMzpHUi0zMzpHUjpJT0FOTklOQQorMjQ6R1ItNjc6R1I6SU9OSUEgTklTSUEKKzI1OkdSLTYxOkdSOklQRUlST1MKKzI2OkdSLTk6R1I6SVJBS0xFSU9OCisyNzpHUi01NjpHUjpLQVNUT1JJQQorMjg6R1ItNTU6R1I6S0FWQUxMQQorMjk6R1ItMjM6R1I6S0VGQUxMSU5JQQorMzA6R1ItODY6R1I6S0VOVFJJS0kgTUFLRURPTklBCiszMTpHUi0yMjpHUjpLRVJLWVJBCiszMjpHUi01NzpHUjpLSUxLSVMKKzMzOkdSLTU4OkdSOktPWkFOSQorMzQ6R1ItNzY6R1I6S1JJVEkKKzM1OkdSLTgyOkdSOktZS0xBREVTCiszNjpHUi02OkdSOkxBS09OSUEKKzM3OkdSLTQyOkdSOkxBUklTQQorMzg6R1ItOTI6R1I6TEFTSVRISU9OCiszOTpHUi0yNDpHUjpMRUZLQVMKKzQwOkdSLTgzOkdSOkxFU1ZPUworNDE6R1ItNDM6R1I6TUFHTklTSUEKKzQyOkdSLTc1OkdSOk5PVElPIEFJR0FJTworNDM6R1ItNTk6R1I6UEVMTEEKKzQ0OkdSLTc0OkdSOlBFTE9QT05OSVNPUworNDU6R1ItMzQ6R1I6UFJFVkVaQQorNDY6R1ItOTM6R1I6UkVUSFlNTk9OCis0NzpHUi03MzpHUjpST0RPUEkKKzQ4OkdSLTg0OkdSOlNBTU9TCis0OTpHUi02MjpHUjpTRVJSQUkKKzUwOkdSLTcwOkdSOlNURVJFQSBFTExBREEKKzUxOkdSLTMyOkdSOlRIRVNQUk9USUEKKzUyOkdSLTYzOkdSOlRIRVNTQUxJQQorNTM6R1ItNTQ6R1I6VEhFU1NBTE9OSUtJCis1NDpHUi00NDpHUjpUUklLQUxBCis1NTpHUi0wMzpHUjpWT0lPVElBCis1NjpHUi02NTpHUjpWT1JFSU8gQUlHQUlPCis1NzpHUi03MjpHUjpYQU5USEkKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9HUkMvR1JDX0FETUlOMl9MRVgudHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L0dSQy9HUkNfQURNSU4yX0xFWC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTY5ZGUyOQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9HUkMvR1JDX0FETUlOMl9MRVgudHh0CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvR1VZL0dVWV9BRE1JTjFfTEVYLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9HVVkvR1VZX0FETUlOMV9MRVgudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM1NzZhOTIKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvR1VZL0dVWV9BRE1JTjFfTEVYLnR4dApAQCAtMCwwICsxLDExIEBACisxOkdZLUJBOkdZOkJBUklNQSBXQUlOSQorMjpHWS1CQVc6R1k6QkFSSU1BL1dBSU5JCiszOkdZLUNVOkdZOkNVWVVOSS9NQVpBUlVOSQorNDpHWS1ERTpHWTpERU1FUkFSQS9NQUhBSUNBCis1OkdZLUVCOkdZOkVBU1QgQkVSQklDRS9DT1JFTlRZTkUKKzY6R1ktRVM6R1k6RVNTRVFVSUJPIEkuL1dFU1QgRC4KKzc6R1ktTUE6R1k6TUFIQUlDQS9CRVJCSUNFCis4OkdZLVBNOkdZOlBPTUVST09OL1NVUEVOQUFNCis5OkdZLVBUOkdZOlBPVEFSTy9TSVBBUlVOSQorMTA6R1ktVUQ6R1k6VVBQRVIgREVNRVJBUkEvQkVSQklDRQorMTE6R1ktVVQ6R1k6VVBQRVIgVEFLVVRVL1UuRVNTRVFVSUJPCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvR1VZL0dVWV9BRE1JTjJfTEVYLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9HVVkvR1VZX0FETUlOMl9MRVgudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ3MDcyOWMKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvR1VZL0dVWV9BRE1JTjJfTEVYLnR4dApAQCAtMCwwICsxLDI3IEBACisxOkdZOkdVWTpHVVlBTkE6Q1VZVU5JL01BWkFSVU5JOlZJSS0xICBDdXl1bmkKKzI6R1k6R1VZOkdVWUFOQTpDVVlVTkkvTUFaQVJVTkk6VklJLTIgTWF6YXJ1bmkvTC5CLkUuUml2ZQorMTpHWTpHVVk6R1VZQU5BOlBPVEFSTy9TSVBBUlVOSTpWSUlJLTEgSXJlbmcvVXBwZXIgUG90YXJvCisyOkdZOkdVWTpHVVlBTkE6UE9UQVJPL1NJUEFSVU5JOlZJSUktMiBMb3dlciBQb3Rhcm8vTGFkc20KKzE6R1k6R1VZOkdVWUFOQTpCQVJJTUEvV0FJTkk6SS0xICBCYXJpbWEKKzI6R1k6R1VZOkdVWUFOQTpCQVJJTUEvV0FJTkk6SS0yICBXYWluaQorMTpHWTpHVVk6R1VZQU5BOlBPTUVST09OL1NVUEVOQUFNOklJLTEgTW9ydWthL1BvbWVyb29uCisyOkdZOkdVWTpHVVlBTkE6UE9NRVJPT04vU1VQRU5BQU06SUktMiBTb21lcnNldCBBbmQgQmVya3MKKzE6R1k6R1VZOkdVWUFOQTpFQVNUIEJFUkJJQ0UvQ09SRU5UWU5FOlZJLTEgRWFzdCBCZXJiaWNlL1cuQ2FuamUKKzI6R1k6R1VZOkdVWUFOQTpFQVNUIEJFUkJJQ0UvQ09SRU5UWU5FOlZJLTIgIEVhc3QgQ2FuamUvRS5DLkJlcmIKKzM6R1k6R1VZOkdVWUFOQTpFQVNUIEJFUkJJQ0UvQ09SRU5UWU5FOlZJLTMgQmxhY2sgQnVzaCBQb2xkZXIKKzQ6R1k6R1VZOkdVWUFOQTpFQVNUIEJFUkJJQ0UvQ09SRU5UWU5FOlZJLTQgTG93ZXIgQ29yZW50eW5lIFJpdmUKKzU6R1k6R1VZOkdVWUFOQTpFQVNUIEJFUkJJQ0UvQ09SRU5UWU5FOlZJLTUgTGVmdCBCYW5rIFVwcGVyIENhbmoKKzY6R1k6R1VZOkdVWUFOQTpFQVNUIEJFUkJJQ0UvQ09SRU5UWU5FOlZJLTYgVXBwZXIgQ2FuamUvQ29yZW50eW4KKzc6R1k6R1VZOkdVWUFOQTpFQVNUIEJFUkJJQ0UvQ09SRU5UWU5FOlZJLTcgVXBwZXIgQ29yZW50eW5lCisxOkdZOkdVWTpHVVlBTkE6REVNRVJBUkEvTUFIQUlDQTpJVi0xIE1vYmxpc3NhL0xhIFJlY29ubmFpCisyOkdZOkdVWTpHVVlBTkE6REVNRVJBUkEvTUFIQUlDQTpJVi0yIEJ1eHRvbi9NYWhhaWNhCisxOkdZOkdVWTpHVVlBTkE6VVBQRVIgREVNRVJBUkEvQkVSQklDRTpYLTEgUmlnaHQgQmFuayBFc3NlcXVpYm8KKzI6R1k6R1VZOkdVWUFOQTpVUFBFUiBERU1FUkFSQS9CRVJCSUNFOlgtMiBUb3JhbmkvQnVsbGV0d29vZAorMTpHWTpHVVk6R1VZQU5BOlVQUEVSIFRBS1VUVS9VLkVTU0VRVUlCTzpJWC0xIFJ1cHVudW5pIFdlc3QKKzI6R1k6R1VZOkdVWUFOQTpVUFBFUiBUQUtVVFUvVS5FU1NFUVVJQk86SVgtMiBSZXdhKElsbGl3YSkvVS5FCisxOkdZOkdVWTpHVVlBTkE6TUFIQUlDQS9CRVJCSUNFOlYtMSAgTWFoYWljYS9NYWhhaWNvbnkKKzI6R1k6R1VZOkdVWUFOQTpNQUhBSUNBL0JFUkJJQ0U6Vi0yIE1haGFpY29ueS9CZXJiaWNlCisxOkdZOkdVWTpHVVlBTkE6RVNTRVFVSUJPIEkuL1dFU1QgRC46RXNzZXF1aWJvIEkuL0wuQi5FLlJpdmVyCisyOkdZOkdVWTpHVVlBTkE6RVNTRVFVSUJPIEkuL1dFU1QgRC46SUlJLTEgRXNzZXF1aWJvIElzbGFuZHMKKzM6R1k6R1VZOkdVWUFOQTpFU1NFUVVJQk8gSS4vV0VTVCBELjpJSUktMiBCb25hc2lrYS9Cb2VyYXNpcmllCis0OkdZOkdVWTpHVVlBTkE6RVNTRVFVSUJPIEkuL1dFU1QgRC46SUlJLTMgTG93ZXIgV2VzdCBEZW1lcmFyYQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L0hSVi9IUlZfQURNSU4xX0xFWC50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvSFJWL0hSVl9BRE1JTjFfTEVYLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNjM5ZGFmCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L0hSVi9IUlZfQURNSU4xX0xFWC50eHQKQEAgLTAsMCArMSwyMCBAQAorMTpIUi0wNzpIUjpCSkVMT1ZBUlNLTyBCSUxPR09SU0tBIFpVUEFOSUpBCisyOkhSLTk6SFI6RFVCUk9WQUtPIE5FUkVUVkFOU0tBIFpVUEFOSUpBCiszOkhSLTI6SFI6R1JBRCBaQUdSRUIKKzQ6SFItMTE6SFI6SFJWQVRTS0EKKzU6SFItODpIUjpJU1RBUlNLQSBaVVBBTklKQQorNjpIUi0wNDpIUjpLQVJMT1ZBS0EgWlVQQU5JSkEKKzc6SFItMDY6SFI6S09QUklWTklLTyBLUklaRVZBIEtBIFpVUEFOSUpBCis4OkhSLTAyOkhSOktSQVBJTlNLTyBaQUdPUlNLQSBaVVBBTklKQQorOTpIUi0wOTpIUjpMSUtPIFNFTkpTS0EgWlVQQU5JSkEKKzEwOkhSLTIwOkhSOk1FSU1VUlNLQSBaVVBBTklKQQorMTE6SFItNDpIUjpPU0pFS08gQkFSQU5KU0tBIFpVUEFOSUpBCisxMjpIUi06SFI6UE9aRVNLTyBTTEFWT05TS0EgWlVQQU5JSkEKKzEzOkhSLTA4OkhSOlBSSU1PUlNLTyBHT1JBTlNLQSBaVVBBTklKQQorMTQ6SFItNTpIUjpTSUJFTlNLTyBLTklOU0tBIFpVUEFOSUpBCisxNTpIUi0wMzpIUjpTSVNBS08gTU9TTEFWQUtBIFpVUEFOSUpBCisxNjpIUi03OkhSOlNQTElUU0tPIERBTE1BVElOU0tBIFpVUEFOSUpBCisxNzpIUi0wNTpIUjpWQVJBWkRJTlNLQSBaVVBBTklKQQorMTg6SFItMDpIUjpWSVJPVklUSUtPIFBPRFJBVlNLQSBaVVBBTklKQQorMTk6SFItNjpIUjpWVUtPVkFSU0tPIFNSSUpFTVNLQSBaVVBBTklKQQorMjA6SFItMzpIUjpaQURBUlNLQSBaVVBBTklKQQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L0hSVi9IUlZfQURNSU4yX0xFWC50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvSFJWL0hSVl9BRE1JTjJfTEVYLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNjlkZTI5Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L0hSVi9IUlZfQURNSU4yX0xFWC50eHQKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9IVU4vSFVOX0FETUlOMV9MRVgudHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L0hVTi9IVU5fQURNSU4xX0xFWC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjcyMjVlZQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9IVU4vSFVOX0FETUlOMV9MRVgudHh0CkBAIC0wLDAgKzEsNDIgQEAKKzE6SFUtQks6SFU6QkFDUyBLSVNLVU4KKzI6SFUtQkE6SFU6QkFSQU5ZQQorMzpIVS1CQzpIVTpCRUtFU0NTQUJBCis0OkhVLUJaOkhVOkJPUlNPRCBBQkFVSiBaRU1QTEVOCis1OkhVLUJaOkhVOkJPUlNPRCBBQkFVSiBaRU1QTEVOCis2OkhVLUJVOkhVOkJVREFQRVNUCis3OkhVLUNTOkhVOkNTT05HUkFECis4OkhVLURFOkhVOkRFQlJFQ0VOCis5OkhVLURVOkhVOkRVTkFVSlZBUk9TCisxMDpIVS1FRzpIVTpFR0VSCisxMTpIVS1GRTpIVTpGRUpFUgorMTI6SFUtR1k6SFU6R1lSCisxMzpIVS1HUzpIVTpHWVIgTU9TT04gU09QUk9OCisxNDpIVS1TTzpIVTpHWZRSIE1PU09OIFNPUFJPTgorMTU6SFUtSEI6SFU6SEFKRFUgQklIQVIKKzE2OkhVLUhFOkhVOkhFVkVTCisxNzpIVS1IVjpIVTpIT0RNRVpWQVNBUkhFTFkKKzE4OkhVLUpOOkhVOkpBU1ogTkFHWUtVTiBTWk9MTk9LCisxOTpIVS1LVjpIVTpLQVBPU1ZBUgorMjA6SFUtS006SFU6S0VDU0tFTUVUCisyMTpIVS1LRTpIVTpLT01BUk9NIEVTWlRFUkdPTQorMjI6SFUtTUk6SFU6TUlTS09MQworMjM6SFUtTks6SFU6TkFHWUtBTklaU0EKKzI0OkhVLU5POkhVOk5PR1JBRAorMjU6SFUtTlk6SFU6TllJUkVHWUhBWkEKKzI2OkhVLVBTOkhVOlBFQ1MKKzI3OkhVLVBFOkhVOlBFU1QKKzI4OkhVLVNUOkhVOlNBTEdPVEFSSkFOCisyOTpIVS1TTjpIVTpTT1BST04KKzMwOkhVLUJFOkhVOlNaQUJPTENTIFNaQVRBUiBCRVJFRworMzE6SFUtU1o6SFU6U1pBQk9MQ1MgU1pBVE1BUiBCRVJFRworMzI6SFUtU0Q6SFU6U1pFR0VECiszMzpIVS1TRjpIVTpTWkVLRVNGRUhFUlZBUgorMzQ6SFUtU1M6SFU6U1pFS1NaQVJECiszNTpIVS1TSzpIVTpTWk9MTk9LCiszNjpIVS1TSDpIVTpTWk9NQkFUSEVMWQorMzc6SFUtVEI6SFU6VEFUQUJBTllBCiszODpIVS1UTzpIVTpUT0xOQQorMzk6SFUtVkE6SFU6VkFTCis0MDpIVS1WRTpIVTpWRVNaUFJFTQorNDE6SFUtVkU6SFU6VkVTWlBSRU0KKzQyOkhVLVpBOkhVOlpBTEEKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9IVU4vSFVOX0FETUlOMl9MRVgudHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L0hVTi9IVU5fQURNSU4yX0xFWC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTY5ZGUyOQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9IVU4vSFVOX0FETUlOMl9MRVgudHh0CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvSUROL0lETl9BRE1JTjFfTEVYLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9JRE4vSUROX0FETUlOMV9MRVgudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZlYzU2YTQKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvSUROL0lETl9BRE1JTjFfTEVYLnR4dApAQCAtMCwwICsxLDM2IEBACisxOklELUFDOklEOkFDRUgKKzI6SUQtQkE6SUQ6QkFMSQorMzpJRC1CQjpJRDpCQU5HS0EgQkVMSVRVTkcKKzQ6SUQtQlQ6SUQ6QkFOVEVOCis1OklELUJFOklEOkJFTkdLVUxVCis2OklELVlPRzpJRDpELkkgWU9HWUFLQVJUQQorNzpJRC1KQUs6SUQ6REtJIEpBS0FSVEEKKzg6SUQtR086SUQ6R09ST05UQUxPCis5OklELUlKQTpJRDpJUklBTiBKQVlBCisxMDpJRC1KSzpJRDpKQUtBUlRBIFJBWUEKKzExOklELUpBOklEOkpBTUJJCisxMjpJRC1KQjpJRDpKQVdBIEJBUkFUCisxMzpJRC1KVDpJRDpKQVdBIFRFTkdBSAorMTQ6SUQtSkk6SUQ6SkFXQSBUSU1VUgorMTU6SUQtS0I6SUQ6S0FMSU1BTlRBTiBCQVJBVAorMTY6SUQtS1M6SUQ6S0FMSU1BTlRBTiBTRUxBVEFOCisxNzpJRC1LVDpJRDpLQUxJTUFOVEFOIFRFTkdBSAorMTg6SUQtS0k6SUQ6S0FMSU1BTlRBTiBUSU1VUgorMTk6SUQtS1I6SUQ6S0VQVUxBVUFOIFJJQVUKKzIwOklELUxBOklEOkxBTVBVTkcKKzIxOklELU1BOklEOk1BTFVLVQorMjI6SUQtTVU6SUQ6TUFMVUtVIFVUQVJBCisyMzpJRC1OQjpJRDpOVVNBIFRFTkdHQVJBIEJBUkFUCisyNDpJRC1OVDpJRDpOVVNBIFRFTkdHQVJBIFRJTVVSCisyNTpJRC1QQTpJRDpQQVBVQQorMjY6SUQtUkk6SUQ6UklBVQorMjc6SUQtU1I6SUQ6U1VMQVdFU0kgQkFSQVQKKzI4OklELVNOOklEOlNVTEFXRVNJIFNFTEFUQU4KKzI5OklELVNUOklEOlNVTEFXRVNJIFRFTkdBSAorMzA6SUQtU0c6SUQ6U1VMQVdFU0kgVEVOR0dBUkEKKzMxOklELVNBOklEOlNVTEFXRVNJIFVUQVJBCiszMjpJRC1TQjpJRDpTVU1BVEVSQSBCQVJBVAorMzM6SUQtU1M6SUQ6U1VNQVRFUkEgU0VMQVRBTgorMzQ6SUQtU1U6SUQ6U1VNQVRFUkEgVVRBUkEKKzM1OklEMC1USU06SUQ6VElNT1IgVElNVVIKKzM2OklELVlPOklEOllPR1lBS0FSVEEKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9JRE4vSUROX0FETUlOMl9MRVgudHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L0lETi9JRE5fQURNSU4yX0xFWC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTg0YTg4ZAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9JRE4vSUROX0FETUlOMl9MRVgudHh0CkBAIC0wLDAgKzEsMjkzIEBACisxOklEOklETjpJTkRPTkVTSUE6U3VsYXdlc2kgVXRhcmE6Qm9sYWFuZyBNb25nb25kb3cKKzI6SUQ6SUROOklORE9ORVNJQTpTdWxhd2VzaSBVdGFyYTpHb3JvbnRhbG8KKzM6SUQ6SUROOklORE9ORVNJQTpTdWxhd2VzaSBVdGFyYTpLb2R5YSBHb3JvbnRhbG8KKzQ6SUQ6SUROOklORE9ORVNJQTpTdWxhd2VzaSBVdGFyYTpLb2R5YSBNYW5hZG8KKzU6SUQ6SUROOklORE9ORVNJQTpTdWxhd2VzaSBVdGFyYTpNaW5haGFzYQorMTpJRDpJRE46SU5ET05FU0lBOlN1bGF3ZXNpIFRlbmdnYXJhOkJ1dG9uCisyOklEOklETjpJTkRPTkVTSUE6U3VsYXdlc2kgVGVuZ2dhcmE6S2VuZGFyaQorMzpJRDpJRE46SU5ET05FU0lBOlN1bGF3ZXNpIFRlbmdnYXJhOktvbGFrYQorNDpJRDpJRE46SU5ET05FU0lBOlN1bGF3ZXNpIFRlbmdnYXJhOk11bmEKKzE6SUQ6SUROOklORE9ORVNJQTpTdW1hdGVyYSBVdGFyYTpEYWlyaQorMjpJRDpJRE46SU5ET05FU0lBOlN1bWF0ZXJhIFV0YXJhOkRlbGkgU2VyZGFuZworMzpJRDpJRE46SU5ET05FU0lBOlN1bWF0ZXJhIFV0YXJhOkthcm8KKzQ6SUQ6SUROOklORE9ORVNJQTpTdW1hdGVyYSBVdGFyYTpLb2R5YSBCaW5qYWkKKzU6SUQ6SUROOklORE9ORVNJQTpTdW1hdGVyYSBVdGFyYTpLb2R5YSBNZWRhbgorNjpJRDpJRE46SU5ET05FU0lBOlN1bWF0ZXJhIFV0YXJhOktvZHlhIFAuU2lhbnRhcgorNzpJRDpJRE46SU5ET05FU0lBOlN1bWF0ZXJhIFV0YXJhOktvZHlhIFNpYm9sZ2EKKzg6SUQ6SUROOklORE9ORVNJQTpTdW1hdGVyYSBVdGFyYTpLb2R5YSBULkJhbGFpCis5OklEOklETjpJTkRPTkVTSUE6U3VtYXRlcmEgVXRhcmE6TGFidWhhbiBCYXR1CisxMDpJRDpJRE46SU5ET05FU0lBOlN1bWF0ZXJhIFV0YXJhOkxhbmdrYXQKKzExOklEOklETjpJTkRPTkVTSUE6U3VtYXRlcmEgVXRhcmE6TmlhcworMTI6SUQ6SUROOklORE9ORVNJQTpTdW1hdGVyYSBVdGFyYTpTaW1hbHVuZ3VuCisxMzpJRDpJRE46SU5ET05FU0lBOlN1bWF0ZXJhIFV0YXJhOlRhcGFudWxpIFNsdAorMTQ6SUQ6SUROOklORE9ORVNJQTpTdW1hdGVyYSBVdGFyYTpUYXBhbnVsaSBVdGFyYQorMTpJRDpJRE46SU5ET05FU0lBOk1hbHVrdTpIYWxtYWhlcmEgVGVuZ2FoCisyOklEOklETjpJTkRPTkVTSUE6TWFsdWt1OktvZHlhIEFtYm9uCiszOklEOklETjpJTkRPTkVTSUE6TWFsdWt1Ok1hbHVrdSBUZW5nYWgKKzQ6SUQ6SUROOklORE9ORVNJQTpNYWx1a3U6TWFsdWt1IFRlbmdnYXJhCis1OklEOklETjpJTkRPTkVTSUE6TWFsdWt1Ok1hbHVrdSBVdGFyYQorMTpJRDpJRE46SU5ET05FU0lBOlN1bWF0ZXJhIEJhcmF0OkFnYW0KKzI6SUQ6SUROOklORE9ORVNJQTpTdW1hdGVyYSBCYXJhdDpLb2R5YSBCdWtpdHRpbmdnaQorMzpJRDpJRE46SU5ET05FU0lBOlN1bWF0ZXJhIEJhcmF0OktvZHlhIFBhZGFuZworNDpJRDpJRE46SU5ET05FU0lBOlN1bWF0ZXJhIEJhcmF0OktvZHlhIFBhZGFuZ3BhbmphbmcKKzU6SUQ6SUROOklORE9ORVNJQTpTdW1hdGVyYSBCYXJhdDpLb2R5YSBTYXdhaGx1bnRvCis2OklEOklETjpJTkRPTkVTSUE6U3VtYXRlcmEgQmFyYXQ6S29keWEgU29sb2sKKzc6SUQ6SUROOklORE9ORVNJQTpTdW1hdGVyYSBCYXJhdDpMaW1hcHVsdWhrb3RvCis4OklEOklETjpJTkRPTkVTSUE6U3VtYXRlcmEgQmFyYXQ6UGFkYW5nIFBhcmlhbWFuCis5OklEOklETjpJTkRPTkVTSUE6U3VtYXRlcmEgQmFyYXQ6UGFzYW1hbgorMTA6SUQ6SUROOklORE9ORVNJQTpTdW1hdGVyYSBCYXJhdDpQYXlha3VtYnVoCisxMTpJRDpJRE46SU5ET05FU0lBOlN1bWF0ZXJhIEJhcmF0OlBlc2lzaXIgU2VsYXRhbgorMTI6SUQ6SUROOklORE9ORVNJQTpTdW1hdGVyYSBCYXJhdDpTYXdhaGx1bnRvL1NpanVuanVuZworMTM6SUQ6SUROOklORE9ORVNJQTpTdW1hdGVyYSBCYXJhdDpTb2xvaworMTQ6SUQ6SUROOklORE9ORVNJQTpTdW1hdGVyYSBCYXJhdDpUYW5haGRhdGFyCisxOklEOklETjpJTkRPTkVTSUE6SmF3YSBCYXJhdDpCYW5kdW5nCisyOklEOklETjpJTkRPTkVTSUE6SmF3YSBCYXJhdDpCZWthc2kKKzM6SUQ6SUROOklORE9ORVNJQTpKYXdhIEJhcmF0OkJvZ29yCis0OklEOklETjpJTkRPTkVTSUE6SmF3YSBCYXJhdDpDaWFtaXMKKzU6SUQ6SUROOklORE9ORVNJQTpKYXdhIEJhcmF0OkNpYW5qdXIKKzY6SUQ6SUROOklORE9ORVNJQTpKYXdhIEJhcmF0OkNpcmVib24KKzc6SUQ6SUROOklORE9ORVNJQTpKYXdhIEJhcmF0OkdhcnV0Cis4OklEOklETjpJTkRPTkVTSUE6SmF3YSBCYXJhdDpJbmRyYW1heXUKKzk6SUQ6SUROOklORE9ORVNJQTpKYXdhIEJhcmF0OkthcmF3YW5nCisxMDpJRDpJRE46SU5ET05FU0lBOkphd2EgQmFyYXQ6S29keWEgQmFuZHVuZworMTE6SUQ6SUROOklORE9ORVNJQTpKYXdhIEJhcmF0OktvZHlhIEJvZ29yCisxMjpJRDpJRE46SU5ET05FU0lBOkphd2EgQmFyYXQ6S29keWEgQ2lyZWJvbgorMTM6SUQ6SUROOklORE9ORVNJQTpKYXdhIEJhcmF0OktvZHlhIFN1a2FidW1pCisxNDpJRDpJRE46SU5ET05FU0lBOkphd2EgQmFyYXQ6S3VuaW5nYW4KKzE1OklEOklETjpJTkRPTkVTSUE6SmF3YSBCYXJhdDpMZWJhaworMTY6SUQ6SUROOklORE9ORVNJQTpKYXdhIEJhcmF0Ok1hamFsZW5na2EKKzE3OklEOklETjpJTkRPTkVTSUE6SmF3YSBCYXJhdDpQYW5kZWdsYW5nCisxODpJRDpJRE46SU5ET05FU0lBOkphd2EgQmFyYXQ6UHVyd2FrYXJ0YQorMTk6SUQ6SUROOklORE9ORVNJQTpKYXdhIEJhcmF0OlNlcmFuZworMjA6SUQ6SUROOklORE9ORVNJQTpKYXdhIEJhcmF0OlN1YmFuZworMjE6SUQ6SUROOklORE9ORVNJQTpKYXdhIEJhcmF0OlN1a2FidW1pCisyMjpJRDpJRE46SU5ET05FU0lBOkphd2EgQmFyYXQ6U3VtZWRhbmcKKzIzOklEOklETjpJTkRPTkVTSUE6SmF3YSBCYXJhdDpUYW5nZXJhbmcKKzI0OklEOklETjpJTkRPTkVTSUE6SmF3YSBCYXJhdDpUYXNpa21hbGF5YQorMTpJRDpJRE46SU5ET05FU0lBOkQuSSBZb2d5YWthcnRhOkJhbnR1bAorMjpJRDpJRE46SU5ET05FU0lBOkQuSSBZb2d5YWthcnRhOkd1bnVuZyBLaWR1bAorMzpJRDpJRE46SU5ET05FU0lBOkQuSSBZb2d5YWthcnRhOktvZHlhIFlvZ3lha2FydGEKKzQ6SUQ6SUROOklORE9ORVNJQTpELkkgWW9neWFrYXJ0YTpLdWxvbiBQcm9nbworNTpJRDpJRE46SU5ET05FU0lBOkQuSSBZb2d5YWthcnRhOlNsZW1hbgorMTpJRDpJRE46SU5ET05FU0lBOkphd2EgVGltdXI6QmFuZ2thbGFuCisyOklEOklETjpJTkRPTkVTSUE6SmF3YSBUaW11cjpCYW55dXdhbmdpCiszOklEOklETjpJTkRPTkVTSUE6SmF3YSBUaW11cjpCbGl0YXIKKzQ6SUQ6SUROOklORE9ORVNJQTpKYXdhIFRpbXVyOkJvam9uZWdvcm8KKzU6SUQ6SUROOklORE9ORVNJQTpKYXdhIFRpbXVyOkJvbmRvd29zbworNjpJRDpJRE46SU5ET05FU0lBOkphd2EgVGltdXI6R3Jlc2lrCis3OklEOklETjpJTkRPTkVTSUE6SmF3YSBUaW11cjpKZW1iZXIKKzg6SUQ6SUROOklORE9ORVNJQTpKYXdhIFRpbXVyOkpvbWJhbmcKKzk6SUQ6SUROOklORE9ORVNJQTpKYXdhIFRpbXVyOktlZGlyaQorMTA6SUQ6SUROOklORE9ORVNJQTpKYXdhIFRpbXVyOktvZHlhIEJsaXRhcgorMTE6SUQ6SUROOklORE9ORVNJQTpKYXdhIFRpbXVyOktvZHlhIEtlZGlyaQorMTI6SUQ6SUROOklORE9ORVNJQTpKYXdhIFRpbXVyOktvZHlhIE1hZGl1bgorMTM6SUQ6SUROOklORE9ORVNJQTpKYXdhIFRpbXVyOktvZHlhIE1hbGFuZworMTQ6SUQ6SUROOklORE9ORVNJQTpKYXdhIFRpbXVyOktvZHlhIE1vam9rZXJ0bworMTU6SUQ6SUROOklORE9ORVNJQTpKYXdhIFRpbXVyOktvZHlhIFBhc3VydWFuCisxNjpJRDpJRE46SU5ET05FU0lBOkphd2EgVGltdXI6S29keWEgUHJvYm9saW5nZ28KKzE3OklEOklETjpJTkRPTkVTSUE6SmF3YSBUaW11cjpLb2R5YSBTdXJhYmF5YQorMTg6SUQ6SUROOklORE9ORVNJQTpKYXdhIFRpbXVyOkxhbW9uZ2FuCisxOTpJRDpJRE46SU5ET05FU0lBOkphd2EgVGltdXI6THVtYWphbmcKKzIwOklEOklETjpJTkRPTkVTSUE6SmF3YSBUaW11cjpNYWRpdW4KKzIxOklEOklETjpJTkRPTkVTSUE6SmF3YSBUaW11cjpNYWdldGFuCisyMjpJRDpJRE46SU5ET05FU0lBOkphd2EgVGltdXI6TWFsYW5nCisyMzpJRDpJRE46SU5ET05FU0lBOkphd2EgVGltdXI6TW9qb2tlcnRvCisyNDpJRDpJRE46SU5ET05FU0lBOkphd2EgVGltdXI6Tmdhbmp1aworMjU6SUQ6SUROOklORE9ORVNJQTpKYXdhIFRpbXVyOk5nYXdpCisyNjpJRDpJRE46SU5ET05FU0lBOkphd2EgVGltdXI6UGFjaXRhbgorMjc6SUQ6SUROOklORE9ORVNJQTpKYXdhIFRpbXVyOlBhbWVrYXNhbgorMjg6SUQ6SUROOklORE9ORVNJQTpKYXdhIFRpbXVyOlBhc3VydWFuCisyOTpJRDpJRE46SU5ET05FU0lBOkphd2EgVGltdXI6UG9ub3JvZ28KKzMwOklEOklETjpJTkRPTkVTSUE6SmF3YSBUaW11cjpQcm9ib2xpbmdnbworMzE6SUQ6SUROOklORE9ORVNJQTpKYXdhIFRpbXVyOlNhbXBhbmcKKzMyOklEOklETjpJTkRPTkVTSUE6SmF3YSBUaW11cjpTaWRvYXJqbworMzM6SUQ6SUROOklORE9ORVNJQTpKYXdhIFRpbXVyOlNpdHVib25kbworMzQ6SUQ6SUROOklORE9ORVNJQTpKYXdhIFRpbXVyOlN1bWVuZXAKKzM1OklEOklETjpJTkRPTkVTSUE6SmF3YSBUaW11cjpUcmVuZ2dhbGVrCiszNjpJRDpJRE46SU5ET05FU0lBOkphd2EgVGltdXI6VHViYW4KKzM3OklEOklETjpJTkRPTkVTSUE6SmF3YSBUaW11cjpUdWx1bmdhZ3VuZworMTpJRDpJRE46SU5ET05FU0lBOkthbGltYW50YW4gU2VsYXRhbjpCYW5qYXIKKzI6SUQ6SUROOklORE9ORVNJQTpLYWxpbWFudGFuIFNlbGF0YW46QmFyaXRvIEt1YWxhCiszOklEOklETjpJTkRPTkVTSUE6S2FsaW1hbnRhbiBTZWxhdGFuOkh1bHUgU2VpIFNlbGF0YW4KKzQ6SUQ6SUROOklORE9ORVNJQTpLYWxpbWFudGFuIFNlbGF0YW46SHVsdSBTZWkgVGVuZ2FoCis1OklEOklETjpJTkRPTkVTSUE6S2FsaW1hbnRhbiBTZWxhdGFuOkh1bHUgU2VpIFV0YXJhCis2OklEOklETjpJTkRPTkVTSUE6S2FsaW1hbnRhbiBTZWxhdGFuOktvZHlhIEJhbmphcm1hc2luCis3OklEOklETjpJTkRPTkVTSUE6S2FsaW1hbnRhbiBTZWxhdGFuOktvdGEgQmFydQorODpJRDpJRE46SU5ET05FU0lBOkthbGltYW50YW4gU2VsYXRhbjpUYWJhbG9uZworOTpJRDpJRE46SU5ET05FU0lBOkthbGltYW50YW4gU2VsYXRhbjpUYW5haCBMYXV0CisxMDpJRDpJRE46SU5ET05FU0lBOkthbGltYW50YW4gU2VsYXRhbjpUYXBpbgorMTpJRDpJRE46SU5ET05FU0lBOlJpYXU6QmVuZ2thbGlzCisyOklEOklETjpJTkRPTkVTSUE6UmlhdTpJbmRyYWdpcmkgSGlsaXIKKzM6SUQ6SUROOklORE9ORVNJQTpSaWF1OkluZHJhZ2lyaSBIdWx1Cis0OklEOklETjpJTkRPTkVTSUE6UmlhdTpLYW1wYXIKKzU6SUQ6SUROOklORE9ORVNJQTpSaWF1OktvZHlhIFBla2FuYmFydQorNjpJRDpJRE46SU5ET05FU0lBOlJpYXU6UmlhdSBLZXB1bGF1YW4KKzE6SUQ6SUROOklORE9ORVNJQTpTdW1hdGVyYSBTZWxhdGFuOkJhbmdrYQorMjpJRDpJRE46SU5ET05FU0lBOlN1bWF0ZXJhIFNlbGF0YW46QmVsaXR1bmcKKzM6SUQ6SUROOklORE9ORVNJQTpTdW1hdGVyYSBTZWxhdGFuOktvZHlhIFBhbGVtYmFuZworNDpJRDpJRE46SU5ET05FU0lBOlN1bWF0ZXJhIFNlbGF0YW46TGFoYXQKKzU6SUQ6SUROOklORE9ORVNJQTpTdW1hdGVyYSBTZWxhdGFuOk11YXJhIEVuaW1yL0xpb3QKKzY6SUQ6SUROOklORE9ORVNJQTpTdW1hdGVyYSBTZWxhdGFuOk11c2kgQmFueXVhc2luCis3OklEOklETjpJTkRPTkVTSUE6U3VtYXRlcmEgU2VsYXRhbjpNdXNpIFJhd2FzCis4OklEOklETjpJTkRPTkVTSUE6U3VtYXRlcmEgU2VsYXRhbjpPZ2FuIEtlbWVyaW5nIElsaXIKKzk6SUQ6SUROOklORE9ORVNJQTpTdW1hdGVyYSBTZWxhdGFuOk9nYW4gS29tZXJpbmcgVWx1CisxOklEOklETjpJTkRPTkVTSUE6SmFtYmk6QmF0YW5naGFyaQorMjpJRDpJRE46SU5ET05FU0lBOkphbWJpOkJ1bmdhdGVibworMzpJRDpJRE46SU5ET05FU0lBOkphbWJpOktlcmluY2kKKzQ6SUQ6SUROOklORE9ORVNJQTpKYW1iaTpLb2R5YSBKYW1iaQorNTpJRDpJRE46SU5ET05FU0lBOkphbWJpOlNhcmFsYW5ndW4KKzY6SUQ6SUROOklORE9ORVNJQTpKYW1iaTpUYW5qdW5nIEphYnVuZworMTpJRDpJRE46SU5ET05FU0lBOkRraSBKYWthcnRhOkpha2FydGEgQmFyYXQKKzI6SUQ6SUROOklORE9ORVNJQTpEa2kgSmFrYXJ0YTpKYWthcnRhIFB1c2F0CiszOklEOklETjpJTkRPTkVTSUE6RGtpIEpha2FydGE6SmFrYXJ0YSBTZWxhdGFuCis0OklEOklETjpJTkRPTkVTSUE6RGtpIEpha2FydGE6SmFrYXJ0YSBUaW11cgorNTpJRDpJRE46SU5ET05FU0lBOkRraSBKYWthcnRhOkpha2FydGEgVXRhcmEKKzE6SUQ6SUROOklORE9ORVNJQTpTdWxhd2VzaSBTZWxhdGFuOkJhbnRhZW5nCisyOklEOklETjpJTkRPTkVTSUE6U3VsYXdlc2kgU2VsYXRhbjpCYXJydQorMzpJRDpJRE46SU5ET05FU0lBOlN1bGF3ZXNpIFNlbGF0YW46Qm9uZQorNDpJRDpJRE46SU5ET05FU0lBOlN1bGF3ZXNpIFNlbGF0YW46QnVsdWt1bWJhCis1OklEOklETjpJTkRPTkVTSUE6U3VsYXdlc2kgU2VsYXRhbjpFbnJla2FuZworNjpJRDpJRE46SU5ET05FU0lBOlN1bGF3ZXNpIFNlbGF0YW46R293YQorNzpJRDpJRE46SU5ET05FU0lBOlN1bGF3ZXNpIFNlbGF0YW46SmVuZXBvbnRvCis4OklEOklETjpJTkRPTkVTSUE6U3VsYXdlc2kgU2VsYXRhbjpLb2R5YSBQYXJlLVBhcmUKKzk6SUQ6SUROOklORE9ORVNJQTpTdWxhd2VzaSBTZWxhdGFuOktvZHlhIFVqdW5nIFBhbmRhbmcKKzEwOklEOklETjpJTkRPTkVTSUE6U3VsYXdlc2kgU2VsYXRhbjpMdXd1CisxMTpJRDpJRE46SU5ET05FU0lBOlN1bGF3ZXNpIFNlbGF0YW46TWFqZW5lCisxMjpJRDpJRE46SU5ET05FU0lBOlN1bGF3ZXNpIFNlbGF0YW46TWFtdWp1CisxMzpJRDpJRE46SU5ET05FU0lBOlN1bGF3ZXNpIFNlbGF0YW46UGFuZ2tlcAorMTQ6SUQ6SUROOklORE9ORVNJQTpTdWxhd2VzaSBTZWxhdGFuOlBpbnJhbmcKKzE1OklEOklETjpJTkRPTkVTSUE6U3VsYXdlc2kgU2VsYXRhbjpQb2xtYXMKKzE2OklEOklETjpJTkRPTkVTSUE6U3VsYXdlc2kgU2VsYXRhbjpTZWxheWFyCisxNzpJRDpJRE46SU5ET05FU0lBOlN1bGF3ZXNpIFNlbGF0YW46U2lkcmFwCisxODpJRDpJRE46SU5ET05FU0lBOlN1bGF3ZXNpIFNlbGF0YW46U2luamFpCisxOTpJRDpJRE46SU5ET05FU0lBOlN1bGF3ZXNpIFNlbGF0YW46U29wcGVuZworMjA6SUQ6SUROOklORE9ORVNJQTpTdWxhd2VzaSBTZWxhdGFuOlRha2FsYXIKKzIxOklEOklETjpJTkRPTkVTSUE6U3VsYXdlc2kgU2VsYXRhbjpUYW5hdG9yYWphCisyMjpJRDpJRE46SU5ET05FU0lBOlN1bGF3ZXNpIFNlbGF0YW46V2FqbworMTpJRDpJRE46SU5ET05FU0lBOkthbGltYW50YW4gQmFyYXQ6S2FwdWFzIEh1bHUKKzI6SUQ6SUROOklORE9ORVNJQTpLYWxpbWFudGFuIEJhcmF0OktldGFwYW5nCiszOklEOklETjpJTkRPTkVTSUE6S2FsaW1hbnRhbiBCYXJhdDpLb2R5YSBQb250aWFuYWsKKzQ6SUQ6SUROOklORE9ORVNJQTpLYWxpbWFudGFuIEJhcmF0OlBvbnRpYW5haworNTpJRDpJRE46SU5ET05FU0lBOkthbGltYW50YW4gQmFyYXQ6U2FtYmFzCis2OklEOklETjpJTkRPTkVTSUE6S2FsaW1hbnRhbiBCYXJhdDpTYW5nZ2F1Cis3OklEOklETjpJTkRPTkVTSUE6S2FsaW1hbnRhbiBCYXJhdDpTaW50YW5nCisxOklEOklETjpJTkRPTkVTSUE6QmFsaTpCYWR1bmcKKzI6SUQ6SUROOklORE9ORVNJQTpCYWxpOkJhbmdsaQorMzpJRDpJRE46SU5ET05FU0lBOkJhbGk6QnVsZWxlbmcKKzQ6SUQ6SUROOklORE9ORVNJQTpCYWxpOkdpYW55YXIKKzU6SUQ6SUROOklORE9ORVNJQTpCYWxpOkplbWJyYW5hCis2OklEOklETjpJTkRPTkVTSUE6QmFsaTpLYXJhbmdhc2VtCis3OklEOklETjpJTkRPTkVTSUE6QmFsaTpLbHVuZ2t1bmcKKzg6SUQ6SUROOklORE9ORVNJQTpCYWxpOlRhYmFuYW4KKzE6SUQ6SUROOklORE9ORVNJQTpUaW1vciBUaW11cjpBaW5hcm8KKzI6SUQ6SUROOklORE9ORVNJQTpUaW1vciBUaW11cjpBbGllYXUKKzM6SUQ6SUROOklORE9ORVNJQTpUaW1vciBUaW11cjpBbWJlbm8KKzQ6SUQ6SUROOklORE9ORVNJQTpUaW1vciBUaW11cjpCYXVjYXUKKzU6SUQ6SUROOklORE9ORVNJQTpUaW1vciBUaW11cjpCb2JvbmFybworNjpJRDpJRE46SU5ET05FU0lBOlRpbW9yIFRpbXVyOkNvdmFsaW1hCis3OklEOklETjpJTkRPTkVTSUE6VGltb3IgVGltdXI6RGlsbGkKKzg6SUQ6SUROOklORE9ORVNJQTpUaW1vciBUaW11cjpFcm1lcmEKKzk6SUQ6SUROOklORE9ORVNJQTpUaW1vciBUaW11cjpMYXV0ZW0KKzEwOklEOklETjpJTkRPTkVTSUE6VGltb3IgVGltdXI6TGlxdWljYQorMTE6SUQ6SUROOklORE9ORVNJQTpUaW1vciBUaW11cjpNYW5hdHV0bworMTI6SUQ6SUROOklORE9ORVNJQTpUaW1vciBUaW11cjpNYW51ZmFoaQorMTM6SUQ6SUROOklORE9ORVNJQTpUaW1vciBUaW11cjpWaXF1ZXF1ZQorMTpJRDpJRE46SU5ET05FU0lBOkxhbXB1bmc6S29keWEgQmFuZGFybGFtcHVuZworMjpJRDpJRE46SU5ET05FU0lBOkxhbXB1bmc6TGFtcHVuZyBTZWxhdGFuCiszOklEOklETjpJTkRPTkVTSUE6TGFtcHVuZzpMYW1wdW5nIFRlbmdhaAorNDpJRDpJRE46SU5ET05FU0lBOkxhbXB1bmc6TGFtcHVuZyBVdGFyYQorMTpJRDpJRE46SU5ET05FU0lBOlN1bGF3ZXNpIFRlbmdhaDpCYW5nZ2FpCisyOklEOklETjpJTkRPTkVTSUE6U3VsYXdlc2kgVGVuZ2FoOkJ1b2wtVG9saXRvbGkKKzM6SUQ6SUROOklORE9ORVNJQTpTdWxhd2VzaSBUZW5nYWg6RG9uZ2dhbGEKKzQ6SUQ6SUROOklORE9ORVNJQTpTdWxhd2VzaSBUZW5nYWg6UG9zbworMTpJRDpJRE46SU5ET05FU0lBOkFjZWg6QWNlaCBCYXJhdAorMjpJRDpJRE46SU5ET05FU0lBOkFjZWg6QWNlaCBCZXNhcgorMzpJRDpJRE46SU5ET05FU0lBOkFjZWg6QWNlaCBTZWxhdGFuCis0OklEOklETjpJTkRPTkVTSUE6QWNlaDpBY2VoIFRlbmdhaAorNTpJRDpJRE46SU5ET05FU0lBOkFjZWg6QWNlaCBUZW5nZ2FyYQorNjpJRDpJRE46SU5ET05FU0lBOkFjZWg6QWNlaCBUaW11cgorNzpJRDpJRE46SU5ET05FU0lBOkFjZWg6QWNlaCBVdGFyYQorODpJRDpJRE46SU5ET05FU0lBOkFjZWg6S29keWEgQmFuZGEgQWNlaAorOTpJRDpJRE46SU5ET05FU0lBOkFjZWg6S29keWEgU2FiYW5nCisxMDpJRDpJRE46SU5ET05FU0lBOkFjZWg6UGlkaWUKKzE6SUQ6SUROOklORE9ORVNJQTpCZW5na3VsdTpCZW5na3VsdSBTZWxhdGFuCisyOklEOklETjpJTkRPTkVTSUE6QmVuZ2t1bHU6QmVuZ2t1bHUgVXRhcmEKKzM6SUQ6SUROOklORE9ORVNJQTpCZW5na3VsdTpLb2R5YSBOZW5na3VsdQorNDpJRDpJRE46SU5ET05FU0lBOkJlbmdrdWx1OlJlamFuZyBMZWJvbmcKKzE6SUQ6SUROOklORE9ORVNJQTpOdXNhIFRlbmdnYXJhIFRpbXVyOkFsb3IKKzI6SUQ6SUROOklORE9ORVNJQTpOdXNhIFRlbmdnYXJhIFRpbXVyOkJlbHUKKzM6SUQ6SUROOklORE9ORVNJQTpOdXNhIFRlbmdnYXJhIFRpbXVyOkVuZGUKKzQ6SUQ6SUROOklORE9ORVNJQTpOdXNhIFRlbmdnYXJhIFRpbXVyOkZsb3JlcyBUaW11cgorNTpJRDpJRE46SU5ET05FU0lBOk51c2EgVGVuZ2dhcmEgVGltdXI6S3VwYW5nCis2OklEOklETjpJTkRPTkVTSUE6TnVzYSBUZW5nZ2FyYSBUaW11cjpNYW5nZ2FyYWkKKzc6SUQ6SUROOklORE9ORVNJQTpOdXNhIFRlbmdnYXJhIFRpbXVyOk5nYWRhCis4OklEOklETjpJTkRPTkVTSUE6TnVzYSBUZW5nZ2FyYSBUaW11cjpTaWtrYQorOTpJRDpJRE46SU5ET05FU0lBOk51c2EgVGVuZ2dhcmEgVGltdXI6U3VtYmEgQmFyYXQKKzEwOklEOklETjpJTkRPTkVTSUE6TnVzYSBUZW5nZ2FyYSBUaW11cjpTdW1iYSBUaW11cgorMTE6SUQ6SUROOklORE9ORVNJQTpOdXNhIFRlbmdnYXJhIFRpbXVyOlRpbW9yIFRlbmdhaCBTZWxhdGFuCisxMjpJRDpJRE46SU5ET05FU0lBOk51c2EgVGVuZ2dhcmEgVGltdXI6VGltb3IgVGVuZ2FoIFV0YXJhCisxOklEOklETjpJTkRPTkVTSUE6TnVzYSBUZW5nZ2FyYSBCYXJhdDpCaW1hCisyOklEOklETjpJTkRPTkVTSUE6TnVzYSBUZW5nZ2FyYSBCYXJhdDpEb21wdQorMzpJRDpJRE46SU5ET05FU0lBOk51c2EgVGVuZ2dhcmEgQmFyYXQ6TG9tYm9rIEJhcmF0Cis0OklEOklETjpJTkRPTkVTSUE6TnVzYSBUZW5nZ2FyYSBCYXJhdDpMb21ib2sgVGVuZ2FoCis1OklEOklETjpJTkRPTkVTSUE6TnVzYSBUZW5nZ2FyYSBCYXJhdDpMb21ib2sgVGltdXIKKzY6SUQ6SUROOklORE9ORVNJQTpOdXNhIFRlbmdnYXJhIEJhcmF0OlN1bWJhd2EKKzE6SUQ6SUROOklORE9ORVNJQTpLYWxpbWFudGFuIFRlbmdhaDpCYXJpdG8gU2VsYXRhbgorMjpJRDpJRE46SU5ET05FU0lBOkthbGltYW50YW4gVGVuZ2FoOkJhcml0byBUaW11cgorMzpJRDpJRE46SU5ET05FU0lBOkthbGltYW50YW4gVGVuZ2FoOkJhcml0byBVdGFyYQorNDpJRDpJRE46SU5ET05FU0lBOkthbGltYW50YW4gVGVuZ2FoOkd1bnVuZyBNYXMKKzU6SUQ6SUROOklORE9ORVNJQTpLYWxpbWFudGFuIFRlbmdhaDpLYXB1YXMKKzY6SUQ6SUROOklORE9ORVNJQTpLYWxpbWFudGFuIFRlbmdhaDpLYXRpbmdhbgorNzpJRDpJRE46SU5ET05FU0lBOkthbGltYW50YW4gVGVuZ2FoOktvZHlhIFBhbGFuZ2thcmF5YQorODpJRDpJRE46SU5ET05FU0lBOkthbGltYW50YW4gVGVuZ2FoOk11cnVuZyBSYXlhCis5OklEOklETjpJTkRPTkVTSUE6S2FsaW1hbnRhbiBUZW5nYWg6V2FyaW5naW4gQmFyYXQKKzEwOklEOklETjpJTkRPTkVTSUE6S2FsaW1hbnRhbiBUZW5nYWg6V2FyaW5naW4gVGltdXIKKzE6SUQ6SUROOklORE9ORVNJQTpKYXdhIFRlbmdhaDpCYW5qYXIgTmVnYXJhCisyOklEOklETjpJTkRPTkVTSUE6SmF3YSBUZW5nYWg6QmFueXVtYXMKKzM6SUQ6SUROOklORE9ORVNJQTpKYXdhIFRlbmdhaDpCYXRhbmcKKzQ6SUQ6SUROOklORE9ORVNJQTpKYXdhIFRlbmdhaDpCbG9yYQorNTpJRDpJRE46SU5ET05FU0lBOkphd2EgVGVuZ2FoOkJveW9sYWxpCis2OklEOklETjpJTkRPTkVTSUE6SmF3YSBUZW5nYWg6QnJlYmVzCis3OklEOklETjpJTkRPTkVTSUE6SmF3YSBUZW5nYWg6Q2lsYWNhcAorODpJRDpJRE46SU5ET05FU0lBOkphd2EgVGVuZ2FoOkRlbWFrCis5OklEOklETjpJTkRPTkVTSUE6SmF3YSBUZW5nYWg6R3JvYm9uZ2FuCisxMDpJRDpJRE46SU5ET05FU0lBOkphd2EgVGVuZ2FoOkplcGFyYQorMTE6SUQ6SUROOklORE9ORVNJQTpKYXdhIFRlbmdhaDpLYXJhbmdhbnlhcgorMTI6SUQ6SUROOklORE9ORVNJQTpKYXdhIFRlbmdhaDpLZWJ1bWVuCisxMzpJRDpJRE46SU5ET05FU0lBOkphd2EgVGVuZ2FoOktsYXRlbgorMTQ6SUQ6SUROOklORE9ORVNJQTpKYXdhIFRlbmdhaDpLb2R5YSBNYWdlbGFuZworMTU6SUQ6SUROOklORE9ORVNJQTpKYXdhIFRlbmdhaDpLb2R5YSBQZWthbG9uZ2FuCisxNjpJRDpJRE46SU5ET05FU0lBOkphd2EgVGVuZ2FoOktvZHlhIFNhbGF0aWdhCisxNzpJRDpJRE46SU5ET05FU0lBOkphd2EgVGVuZ2FoOktvZHlhIFNlbWFyYW5nCisxODpJRDpJRE46SU5ET05FU0lBOkphd2EgVGVuZ2FoOktvZHlhIFN1cmFrYXJ0YQorMTk6SUQ6SUROOklORE9ORVNJQTpKYXdhIFRlbmdhaDpLb2R5YSBUZWdhbAorMjA6SUQ6SUROOklORE9ORVNJQTpKYXdhIFRlbmdhaDpLdWR1cworMjE6SUQ6SUROOklORE9ORVNJQTpKYXdhIFRlbmdhaDpNYWdlbGFuZworMjI6SUQ6SUROOklORE9ORVNJQTpKYXdhIFRlbmdhaDpQYXRpCisyMzpJRDpJRE46SU5ET05FU0lBOkphd2EgVGVuZ2FoOlBla2Fsb25nYW4KKzI0OklEOklETjpJTkRPTkVTSUE6SmF3YSBUZW5nYWg6UGVtYWxhbmcKKzI1OklEOklETjpJTkRPTkVTSUE6SmF3YSBUZW5nYWg6UHVyYmFsaW5nZ2EKKzI2OklEOklETjpJTkRPTkVTSUE6SmF3YSBUZW5nYWg6UHVyd29yZWRqbworMjc6SUQ6SUROOklORE9ORVNJQTpKYXdhIFRlbmdhaDpSZW1iYW5nCisyODpJRDpJRE46SU5ET05FU0lBOkphd2EgVGVuZ2FoOlNlbWFyYW5nCisyOTpJRDpJRE46SU5ET05FU0lBOkphd2EgVGVuZ2FoOlNyYWdlbgorMzA6SUQ6SUROOklORE9ORVNJQTpKYXdhIFRlbmdhaDpTdWtvaGFyam8KKzMxOklEOklETjpJTkRPTkVTSUE6SmF3YSBUZW5nYWg6VGVnYWwKKzMyOklEOklETjpJTkRPTkVTSUE6SmF3YSBUZW5nYWg6VGVtYW5nZ3VuZworMzM6SUQ6SUROOklORE9ORVNJQTpKYXdhIFRlbmdhaDpXb25vZ2lyaQorMzQ6SUQ6SUROOklORE9ORVNJQTpKYXdhIFRlbmdhaDpXb25vc29ibworMTpJRDpJRE46SU5ET05FU0lBOklyaWFuIEpheWE6RmFrLUZhaworMjpJRDpJRE46SU5ET05FU0lBOklyaWFuIEpheWE6SmF5YXB1cmEKKzM6SUQ6SUROOklORE9ORVNJQTpJcmlhbiBKYXlhOkpheWF3aWpheWEKKzQ6SUQ6SUROOklORE9ORVNJQTpJcmlhbiBKYXlhOk1hbm9rd2FyaQorNTpJRDpJRE46SU5ET05FU0lBOklyaWFuIEpheWE6TWVyYXVrZQorNjpJRDpJRE46SU5ET05FU0lBOklyaWFuIEpheWE6UGFuaWFpCis3OklEOklETjpJTkRPTkVTSUE6SXJpYW4gSmF5YTpTb3JvbmcKKzg6SUQ6SUROOklORE9ORVNJQTpJcmlhbiBKYXlhOlRlbHVrIENlbmRlcndhc2loCis5OklEOklETjpJTkRPTkVTSUE6SXJpYW4gSmF5YTpZYXBlbiBXYXJvcGVuCisxOklEOklETjpJTkRPTkVTSUE6S2FsaW1hbnRhbiBUaW11cjpCZXJhdQorMjpJRDpJRE46SU5ET05FU0lBOkthbGltYW50YW4gVGltdXI6QnVsdW5nYW4KKzM6SUQ6SUROOklORE9ORVNJQTpLYWxpbWFudGFuIFRpbXVyOktvZHlhIEJhbGlrcGFwYW4KKzQ6SUQ6SUROOklORE9ORVNJQTpLYWxpbWFudGFuIFRpbXVyOktvZHlhIFNhbWFyaW5kYQorNTpJRDpJRE46SU5ET05FU0lBOkthbGltYW50YW4gVGltdXI6S3V0YWkKKzY6SUQ6SUROOklORE9ORVNJQTpLYWxpbWFudGFuIFRpbXVyOlBhc2lyCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvSU5EL0lORF9BRE1JTjFfTEVYLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9JTkQvSU5EX0FETUlOMV9MRVgudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ1ZDYwM2UKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvSU5EL0lORF9BRE1JTjFfTEVYLnR4dApAQCAtMCwwICsxLDM2IEBACisxOklOLU5JQzpJTjpBTkRBTUFOICYgTklDT0JBUgorMjpJTi1BTjpJTjpBTkRBTUFOIEFORCBOSUNPQkFSIElTTEFORFMKKzM6SU4tQVA6SU46QU5ESFJBIFBSQURFU0gKKzQ6SU4tQVI6SU46QVJVTkFDSEFMIFBSQURFU0gKKzU6SU4tQVM6SU46QVNTQU0KKzY6SU4tQlI6SU46QklIQVIKKzc6SU4tQ0g6SU46Q0hBTkRJR0FSSAorODpJTi1DVDpJTjpDSEhBVFRBU0dBUkgKKzk6SU4tRE46SU46REFEUkEgQU5EIE5BR0FSIEhBVkVMSQorMTA6SU4tREQ6SU46REFNQU4gQU5EIERJVQorMTE6SU4tREw6SU46REVMSEkKKzEyOklOLUdBOklOOkdPQQorMTM6SU4tR0o6SU46R1VKQVJBVAorMTQ6SU4tSFI6SU46SEFSWUFOQQorMTU6SU4tSFA6SU46SElNQUNIQUwgUFJBREVTSAorMTY6SU4tSks6SU46SkFNTVUgQU5EIEtBU0hNSVIKKzE3OklOLUpIOklOOkpIQVJLSEFORAorMTg6SU4tS0E6SU46S0FSTkFUQUtBCisxOTpJTi1LTDpJTjpLRVJBTEEKKzIwOklOLUxEOklOOkxBS1NIQURXRUVQCisyMTpJTi1NUDpJTjpNQURIWUEgUFJBREVTSAorMjI6SU4tTUg6SU46TUFIQVJBU0hUUkEKKzIzOklOLU1OOklOOk1BTklQVVIKKzI0OklOLU1MOklOOk1FR0hBTEFZQQorMjU6SU4tTVo6SU46TUlaT1JBTQorMjY6SU4tTkw6SU46TkFHQUxBTkQKKzI3OklOLU9SOklOOk9SSVNTQQorMjg6SU4tUFk6SU46UE9ORElDSEVSUlkKKzI5OklOLVBCOklOOlBVTkpBQgorMzA6SU4tUko6SU46UkFKQVNUSEFOCiszMTpJTi1TSzpJTjpTSUtLSU0KKzMyOklOLVROOklOOlRBTUlMIE5BRFUKKzMzOklOLVRSOklOOlRSSVBVUkEKKzM0OklOLVVQOklOOlVUVEFSIFBSQURFU0gKKzM1OklOLVVMOklOOlVUVEFSQU5DSEFMCiszNjpJTi1XQjpJTjpXRVNUIEJFTkdBTApkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L0lORC9JTkRfQURNSU4yX0xFWC50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvSU5EL0lORF9BRE1JTjJfTEVYLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNGMwNGU4Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L0lORC9JTkRfQURNSU4yX0xFWC50eHQKQEAgLTAsMCArMSw0NzAgQEAKKzE6SU46SU5EOklORElBOlNpa2tpbTpFYXN0IERpc3RyaWN0CisyOklOOklORDpJTkRJQTpTaWtraW06Tm9ydGggRGlzdHJpY3QKKzM6SU46SU5EOklORElBOlNpa2tpbTpTb3V0aCBEaXN0cmljdAorNDpJTjpJTkQ6SU5ESUE6U2lra2ltOldlc3QgRGlzdHJpY3QKKzE6SU46SU5EOklORElBOkthcm5hdGFrYTpCYW5nYWxvcmUgUnVyYWwKKzI6SU46SU5EOklORElBOkthcm5hdGFrYTpCYW5nYWxvcmUgVXJiYW4KKzM6SU46SU5EOklORElBOkthcm5hdGFrYTpCZWxnYXVtCis0OklOOklORDpJTkRJQTpLYXJuYXRha2E6QmVsbGFyeQorNTpJTjpJTkQ6SU5ESUE6S2FybmF0YWthOkJpZGFyCis2OklOOklORDpJTkRJQTpLYXJuYXRha2E6QmlqYXB1cgorNzpJTjpJTkQ6SU5ESUE6S2FybmF0YWthOkNoaWttYWdhbHVyCis4OklOOklORDpJTkRJQTpLYXJuYXRha2E6Q2hpdHJhZHVyZ2EKKzk6SU46SU5EOklORElBOkthcm5hdGFrYTpEYWtzaGluIEthbm5hZAorMTA6SU46SU5EOklORElBOkthcm5hdGFrYTpEaGFyd2FkCisxMTpJTjpJTkQ6SU5ESUE6S2FybmF0YWthOkd1bGJhcmdhCisxMjpJTjpJTkQ6SU5ESUE6S2FybmF0YWthOkhhc3NhbgorMTM6SU46SU5EOklORElBOkthcm5hdGFrYTpLb2RhZ3UKKzE0OklOOklORDpJTkRJQTpLYXJuYXRha2E6S29sYXIKKzE1OklOOklORDpJTkRJQTpLYXJuYXRha2E6TWFuZHlhCisxNjpJTjpJTkQ6SU5ESUE6S2FybmF0YWthOk15c29yZQorMTc6SU46SU5EOklORElBOkthcm5hdGFrYTpSYWljaHVyCisxODpJTjpJTkQ6SU5ESUE6S2FybmF0YWthOlNoaW1vZ2EKKzE5OklOOklORDpJTkRJQTpLYXJuYXRha2E6VHVta3VyCisyMDpJTjpJTkQ6SU5ESUE6S2FybmF0YWthOlV0dGFyIEthbm5hZAorMTpJTjpJTkQ6SU5ESUE6TmFnYWxhbmQ6S29oaW1hCisyOklOOklORDpJTkRJQTpOYWdhbGFuZDpNb2tva2NodW5nCiszOklOOklORDpJTkRJQTpOYWdhbGFuZDpNb24KKzQ6SU46SU5EOklORElBOk5hZ2FsYW5kOlBoZWsKKzU6SU46SU5EOklORElBOk5hZ2FsYW5kOlR1ZXNhbmcKKzY6SU46SU5EOklORElBOk5hZ2FsYW5kOldva2hhCis3OklOOklORDpJTkRJQTpOYWdhbGFuZDpadW5oZWJvdG8KKzE6SU46SU5EOklORElBOlB1bmphYjpBbXJpdHNhcgorMjpJTjpJTkQ6SU5ESUE6UHVuamFiOkJhdGhpbmRhCiszOklOOklORDpJTkRJQTpQdW5qYWI6RmFpcmRrb3QKKzQ6SU46SU5EOklORElBOlB1bmphYjpGaXJvenB1cgorNTpJTjpJTkQ6SU5ESUE6UHVuamFiOkd1cmRhc3B1cgorNjpJTjpJTkQ6SU5ESUE6UHVuamFiOkhvc2hpYXJwdXIKKzc6SU46SU5EOklORElBOlB1bmphYjpKYWxhbmRoYXIKKzg6SU46SU5EOklORElBOlB1bmphYjpLYXB1cnRoYWxhCis5OklOOklORDpJTkRJQTpQdW5qYWI6THVkaGlhbmEKKzEwOklOOklORDpJTkRJQTpQdW5qYWI6UGF0aWFsYQorMTE6SU46SU5EOklORElBOlB1bmphYjpSdXBuYWdhcgorMTI6SU46SU5EOklORElBOlB1bmphYjpTYW5ncnVyCisxOklOOklORDpJTkRJQTpEZWxoaTpEZWxoaQorMTpJTjpJTkQ6SU5ESUE6TWFoYXJhc2h0cmE6QWhtYWRuYWdhcgorMjpJTjpJTkQ6SU5ESUE6TWFoYXJhc2h0cmE6QWtvbGEKKzM6SU46SU5EOklORElBOk1haGFyYXNodHJhOkFtcmF2YXRpCis0OklOOklORDpJTkRJQTpNYWhhcmFzaHRyYTpBdXJhbmdhYmFkCis1OklOOklORDpJTkRJQTpNYWhhcmFzaHRyYTpCZWVkCis2OklOOklORDpJTkRJQTpNYWhhcmFzaHRyYTpCaGFuZGFyYQorNzpJTjpJTkQ6SU5ESUE6TWFoYXJhc2h0cmE6QnVsZGFuYQorODpJTjpJTkQ6SU5ESUE6TWFoYXJhc2h0cmE6Q2hhbmRyYXB1cgorOTpJTjpJTkQ6SU5ESUE6TWFoYXJhc2h0cmE6RGh1bGUKKzEwOklOOklORDpJTkRJQTpNYWhhcmFzaHRyYTpHYXJoY2hpcm9saQorMTE6SU46SU5EOklORElBOk1haGFyYXNodHJhOkdyZWF0ZXIgQm9tYmF5CisxMjpJTjpJTkQ6SU5ESUE6TWFoYXJhc2h0cmE6SmFsZ2FvbgorMTM6SU46SU5EOklORElBOk1haGFyYXNodHJhOkphbG5hCisxNDpJTjpJTkQ6SU5ESUE6TWFoYXJhc2h0cmE6S29saGFwdXIKKzE1OklOOklORDpJTkRJQTpNYWhhcmFzaHRyYTpMYXR1cgorMTY6SU46SU5EOklORElBOk1haGFyYXNodHJhOk5hZ3B1cgorMTc6SU46SU5EOklORElBOk1haGFyYXNodHJhOk5hbmRlZAorMTg6SU46SU5EOklORElBOk1haGFyYXNodHJhOk5hc2hpaworMTk6SU46SU5EOklORElBOk1haGFyYXNodHJhOk9zbWFuYWJhZAorMjA6SU46SU5EOklORElBOk1haGFyYXNodHJhOlBhcmJoYW5pCisyMTpJTjpJTkQ6SU5ESUE6TWFoYXJhc2h0cmE6UHVuZQorMjI6SU46SU5EOklORElBOk1haGFyYXNodHJhOlJhaWdhcmggKEFsaWJhZykKKzIzOklOOklORDpJTkRJQTpNYWhhcmFzaHRyYTpSYXRuYWdpcmkKKzI0OklOOklORDpJTkRJQTpNYWhhcmFzaHRyYTpTYW5nbGkKKzI1OklOOklORDpJTkRJQTpNYWhhcmFzaHRyYTpTYXRhcmEKKzI2OklOOklORDpJTkRJQTpNYWhhcmFzaHRyYTpTaW5kaHVkdXJnCisyNzpJTjpJTkQ6SU5ESUE6TWFoYXJhc2h0cmE6U29sYXB1cgorMjg6SU46SU5EOklORElBOk1haGFyYXNodHJhOlRoYW5lCisyOTpJTjpJTkQ6SU5ESUE6TWFoYXJhc2h0cmE6V2FyZGhhCiszMDpJTjpJTkQ6SU5ESUE6TWFoYXJhc2h0cmE6WWF2YXRtYWwKKzE6SU46SU5EOklORElBOkFuZGhyYSBQcmFkZXNoOkFkaWxhYmFkCisyOklOOklORDpJTkRJQTpBbmRocmEgUHJhZGVzaDpBbmFudGFwdXIKKzM6SU46SU5EOklORElBOkFuZGhyYSBQcmFkZXNoOkNoaXR0b29yCis0OklOOklORDpJTkRJQTpBbmRocmEgUHJhZGVzaDpDdWRkYXBhaAorNTpJTjpJTkQ6SU5ESUE6QW5kaHJhIFByYWRlc2g6RWFzdCBHb2RhdmFyaQorNjpJTjpJTkQ6SU5ESUE6QW5kaHJhIFByYWRlc2g6R3VudHVyCis3OklOOklORDpJTkRJQTpBbmRocmEgUHJhZGVzaDpIeWRlcmFiYWQKKzg6SU46SU5EOklORElBOkFuZGhyYSBQcmFkZXNoOkthcmltbmFnYXIKKzk6SU46SU5EOklORElBOkFuZGhyYSBQcmFkZXNoOktoYW1tYW0KKzEwOklOOklORDpJTkRJQTpBbmRocmEgUHJhZGVzaDpLcmlzaG5hCisxMTpJTjpJTkQ6SU5ESUE6QW5kaHJhIFByYWRlc2g6S3Vybm9vbAorMTI6SU46SU5EOklORElBOkFuZGhyYSBQcmFkZXNoOk1haGJ1Ym5hZ2FyCisxMzpJTjpJTkQ6SU5ESUE6QW5kaHJhIFByYWRlc2g6TWVkYWsKKzE0OklOOklORDpJTkRJQTpBbmRocmEgUHJhZGVzaDpOYWxnb25kYQorMTU6SU46SU5EOklORElBOkFuZGhyYSBQcmFkZXNoOk5lbGxvcmUKKzE2OklOOklORDpJTkRJQTpBbmRocmEgUHJhZGVzaDpOaXphbWFiYWQKKzE3OklOOklORDpJTkRJQTpBbmRocmEgUHJhZGVzaDpQcmFrYXNhbQorMTg6SU46SU5EOklORElBOkFuZGhyYSBQcmFkZXNoOlJhbmdhcmVkZGkKKzE5OklOOklORDpJTkRJQTpBbmRocmEgUHJhZGVzaDpTcmlrYWt1bGFtCisyMDpJTjpJTkQ6SU5ESUE6QW5kaHJhIFByYWRlc2g6VmlzaGFraGFwYXRuYW0KKzIxOklOOklORDpJTkRJQTpBbmRocmEgUHJhZGVzaDpWaXppYW5hZ2FyYW0KKzIyOklOOklORDpJTkRJQTpBbmRocmEgUHJhZGVzaDpXYXJhbmdhbAorMjM6SU46SU5EOklORElBOkFuZGhyYSBQcmFkZXNoOldlc3QgR29kYXZhcmkKKzE6SU46SU5EOklORElBOkNoYW5kaWdhcmg6Q2hhbmRpZ2FyaAorMTpJTjpJTkQ6SU5ESUE6R3VqYXJhdDpBaG1hZGFiYWQKKzI6SU46SU5EOklORElBOkd1amFyYXQ6QW1yZWxpCiszOklOOklORDpJTkRJQTpHdWphcmF0OkJhbmFzIEthbnRoYQorNDpJTjpJTkQ6SU5ESUE6R3VqYXJhdDpCaGFydWNoCis1OklOOklORDpJTkRJQTpHdWphcmF0OkJoYXZuYWdhcgorNjpJTjpJTkQ6SU5ESUE6R3VqYXJhdDpHYW5kaGluYWdhcgorNzpJTjpJTkQ6SU5ESUE6R3VqYXJhdDpKYW1uYWdhcgorODpJTjpJTkQ6SU5ESUE6R3VqYXJhdDpKdW5hZ2FkaAorOTpJTjpJTkQ6SU5ESUE6R3VqYXJhdDpLYWNoY2hoIChCaHVqKQorMTA6SU46SU5EOklORElBOkd1amFyYXQ6S2hlZGEKKzExOklOOklORDpJTkRJQTpHdWphcmF0Ok1haGVzYW5hCisxMjpJTjpJTkQ6SU5ESUE6R3VqYXJhdDpQYW5jaG1haGFscyAoR29kaHJhKQorMTM6SU46SU5EOklORElBOkd1amFyYXQ6UmFqa290CisxNDpJTjpJTkQ6SU5ESUE6R3VqYXJhdDpTYWJhcmthbnRoYSAoSGltYXRuYWdhcikKKzE1OklOOklORDpJTkRJQTpHdWphcmF0OlN1cmF0CisxNjpJTjpJTkQ6SU5ESUE6R3VqYXJhdDpTdXJlbmRyYW5hZ2FyCisxNzpJTjpJTkQ6SU5ESUE6R3VqYXJhdDpUaGUgRGFuZ3MgKEFod2EpCisxODpJTjpJTkQ6SU5ESUE6R3VqYXJhdDpWYWRvZGFyYQorMTk6SU46SU5EOklORElBOkd1amFyYXQ6VmFsc2FkCisxOklOOklORDpJTkRJQTpKYW1tdSBhbmQgS2FzaG1pcjpBbmFudG5hZyAoS2FzaG1pciBTb3V0aCkKKzI6SU46SU5EOklORElBOkphbW11IGFuZCBLYXNobWlyOkJhZ2RhbQorMzpJTjpJTkQ6SU5ESUE6SmFtbXUgYW5kIEthc2htaXI6QmFyYW11bGEgKEthc2htaXIgTm9ydGgpCis0OklOOklORDpJTkRJQTpKYW1tdSBhbmQgS2FzaG1pcjpEb2RhCis1OklOOklORDpJTkRJQTpKYW1tdSBhbmQgS2FzaG1pcjpKYW1tdQorNjpJTjpJTkQ6SU5ESUE6SmFtbXUgYW5kIEthc2htaXI6S2FyZ2lsCis3OklOOklORDpJTkRJQTpKYW1tdSBhbmQgS2FzaG1pcjpLYXRodWEKKzg6SU46SU5EOklORElBOkphbW11IGFuZCBLYXNobWlyOkt1cHdhcmEgKE11emFmZmFyYWJhZCkKKzk6SU46SU5EOklORElBOkphbW11IGFuZCBLYXNobWlyOkxhZGFraCAoTGVoKQorMTA6SU46SU5EOklORElBOkphbW11IGFuZCBLYXNobWlyOk1pcnB1cgorMTE6SU46SU5EOklORElBOkphbW11IGFuZCBLYXNobWlyOlB1bHdhbWEKKzEyOklOOklORDpJTkRJQTpKYW1tdSBhbmQgS2FzaG1pcjpQdW5jaAorMTM6SU46SU5EOklORElBOkphbW11IGFuZCBLYXNobWlyOlJhamF1cmkKKzE0OklOOklORDpJTkRJQTpKYW1tdSBhbmQgS2FzaG1pcjpTcmluYWdhcgorMTU6SU46SU5EOklORElBOkphbW11IGFuZCBLYXNobWlyOlVkaGFtcHVyCisxOklOOklORDpJTkRJQTpNYW5pcHVyOkJpc2hudXB1cgorMjpJTjpJTkQ6SU5ESUE6TWFuaXB1cjpDaGFuZGVsCiszOklOOklORDpJTkRJQTpNYW5pcHVyOkNodXJhY2hhbmRwdXIKKzQ6SU46SU5EOklORElBOk1hbmlwdXI6SW1waGFsCis1OklOOklORDpJTkRJQTpNYW5pcHVyOkltcGhhbCAoQ2FjaGFyKSAoeCkKKzY6SU46SU5EOklORElBOk1hbmlwdXI6U2VuYXBhdGkKKzc6SU46SU5EOklORElBOk1hbmlwdXI6VGFtZW5nbG9uZworODpJTjpJTkQ6SU5ESUE6TWFuaXB1cjpUaG91YmFsCis5OklOOklORDpJTkRJQTpNYW5pcHVyOlVraHJ1bAorMTpJTjpJTkQ6SU5ESUE6UG9uZGljaGVycnk6S2FyYWlrYWwKKzI6SU46SU5EOklORElBOlBvbmRpY2hlcnJ5Ok1haGUKKzM6SU46SU5EOklORElBOlBvbmRpY2hlcnJ5OlBvbmRpY2hlcnJ5Cis0OklOOklORDpJTkRJQTpQb25kaWNoZXJyeTpZYW5hbQorMTpJTjpJTkQ6SU5ESUE6TWVnaGFsYXlhOkUuIEdhcm8gSGlsbHMgKFdpbGxpYW1uLikKKzI6SU46SU5EOklORElBOk1lZ2hhbGF5YTpFLiBLaGFzaSBIaWxscyAoU2hpbGxvbmcpCiszOklOOklORDpJTkRJQTpNZWdoYWxheWE6SmFpbnRpYSBIaWxscyAoSm93YWkpCis0OklOOklORDpJTkRJQTpNZWdoYWxheWE6Vy4gR2FybyBIaWxscyAoVHVyYSkKKzU6SU46SU5EOklORElBOk1lZ2hhbGF5YTpXLiBLaGFzaSBIaWxscyAoTm9uZ3N0LikKKzE6SU46SU5EOklORElBOkxha3NoYWR3ZWVwOkxhY2NhZGl2ZSBJc2xhbmRzCisxOklOOklORDpJTkRJQTpEYW1hbiBhbmQgRGl1OkRhbWFuCisyOklOOklORDpJTkRJQTpEYW1hbiBhbmQgRGl1OkRpdQorMTpJTjpJTkQ6SU5ESUE6VGFtaWwgTmFkdTpDaGVuZ2FpYW5uYQorMjpJTjpJTkQ6SU5ESUE6VGFtaWwgTmFkdTpDaGlkYW1iYXJhbmFyCiszOklOOklORDpJTkRJQTpUYW1pbCBOYWR1OkNvaW1iYXRvcmUKKzQ6SU46SU5EOklORElBOlRhbWlsIE5hZHU6RGhhcm1hcHVyaQorNTpJTjpJTkQ6SU5ESUE6VGFtaWwgTmFkdTpLYW1hcmFqYXIKKzY6SU46SU5EOklORElBOlRhbWlsIE5hZHU6S2Fubml5YWt1bWFyaQorNzpJTjpJTkQ6SU5ESUE6VGFtaWwgTmFkdTpNYWRyYXMKKzg6SU46SU5EOklORElBOlRhbWlsIE5hZHU6TWFkdXJhaQorOTpJTjpJTkQ6SU5ESUE6VGFtaWwgTmFkdTpOaWxnaXJpcworMTA6SU46SU5EOklORElBOlRhbWlsIE5hZHU6Tm9ydGggQXJjb3QgKEFtYmVka2FyKQorMTE6SU46SU5EOklORElBOlRhbWlsIE5hZHU6UGFzdW1wb24gTXV0aHVyYW1hbGluZ2FtCisxMjpJTjpJTkQ6SU5ESUE6VGFtaWwgTmFkdTpQZXJpeWFyCisxMzpJTjpJTkQ6SU5ESUE6VGFtaWwgTmFkdTpQdWR1a2tvdHRhaQorMTQ6SU46SU5EOklORElBOlRhbWlsIE5hZHU6UXVhaWRlIE1pbGxldGgKKzE1OklOOklORDpJTkRJQTpUYW1pbCBOYWR1OlJhbWFuYXRoYXB1cmFtCisxNjpJTjpJTkQ6SU5ESUE6VGFtaWwgTmFkdTpTYWxlbQorMTc6SU46SU5EOklORElBOlRhbWlsIE5hZHU6U291dGggQXJjb3QKKzE4OklOOklORDpJTkRJQTpUYW1pbCBOYWR1OlRoYW5qYXZ1cgorMTk6SU46SU5EOklORElBOlRhbWlsIE5hZHU6VGlydWNoY2hpcmFwcGFsbGkKKzIwOklOOklORDpJTkRJQTpUYW1pbCBOYWR1OlRpcnVuZWx2ZWxpIEthdHRhYm9tbWFuCisyMTpJTjpJTkQ6SU5ESUE6VGFtaWwgTmFkdTpUaXJ1dmFubmFtYWxhaSBTYW1idXZhcmF5CisxOklOOklORDpJTkRJQTpSYWphc3RoYW46QWptZXIKKzI6SU46SU5EOklORElBOlJhamFzdGhhbjpBbHdhcgorMzpJTjpJTkQ6SU5ESUE6UmFqYXN0aGFuOkJhbnN3YXJhCis0OklOOklORDpJTkRJQTpSYWphc3RoYW46QmFybWVyCis1OklOOklORDpJTkRJQTpSYWphc3RoYW46QmhhcmF0cHVyCis2OklOOklORDpJTkRJQTpSYWphc3RoYW46QmhpbHdhcmEKKzc6SU46SU5EOklORElBOlJhamFzdGhhbjpCaWthbmVyCis4OklOOklORDpJTkRJQTpSYWphc3RoYW46QnVuZGkKKzk6SU46SU5EOklORElBOlJhamFzdGhhbjpDaGl0dGF1cmdhcmgKKzEwOklOOklORDpJTkRJQTpSYWphc3RoYW46Q2h1cnUKKzExOklOOklORDpJTkRJQTpSYWphc3RoYW46RGF1bHB1cgorMTI6SU46SU5EOklORElBOlJhamFzdGhhbjpEdW5nYXJwdXIKKzEzOklOOklORDpJTkRJQTpSYWphc3RoYW46R2FuZ2FuZ2FyCisxNDpJTjpJTkQ6SU5ESUE6UmFqYXN0aGFuOkphaXB1cgorMTU6SU46SU5EOklORElBOlJhamFzdGhhbjpKYWlzYWxtZXIKKzE2OklOOklORDpJTkRJQTpSYWphc3RoYW46SmFsb3IKKzE3OklOOklORDpJTkRJQTpSYWphc3RoYW46SmhhbGF3YXIKKzE4OklOOklORDpJTkRJQTpSYWphc3RoYW46Smh1bmpodW51bgorMTk6SU46SU5EOklORElBOlJhamFzdGhhbjpKb2RocHVyCisyMDpJTjpJTkQ6SU5ESUE6UmFqYXN0aGFuOktvdGEKKzIxOklOOklORDpJTkRJQTpSYWphc3RoYW46TmFnYXVyCisyMjpJTjpJTkQ6SU5ESUE6UmFqYXN0aGFuOlBhbGkKKzIzOklOOklORDpJTkRJQTpSYWphc3RoYW46U2F3YWkgTWFkaG9wdXIKKzI0OklOOklORDpJTkRJQTpSYWphc3RoYW46U2lrYXIKKzI1OklOOklORDpJTkRJQTpSYWphc3RoYW46U2lyb2hpCisyNjpJTjpJTkQ6SU5ESUE6UmFqYXN0aGFuOlRvbmsKKzI3OklOOklORDpJTkRJQTpSYWphc3RoYW46VWRhaXB1cgorMTpJTjpJTkQ6SU5ESUE6T3Jpc3NhOkJhbGFuZ2lyCisyOklOOklORDpJTkRJQTpPcmlzc2E6QmFsZXNod2FyCiszOklOOklORDpJTkRJQTpPcmlzc2E6Q3V0dGFjaworNDpJTjpJTkQ6SU5ESUE6T3Jpc3NhOkRoZW5rYW5hbAorNTpJTjpJTkQ6SU5ESUE6T3Jpc3NhOkdhbmphbQorNjpJTjpJTkQ6SU5ESUE6T3Jpc3NhOkthbGFoYW5kaQorNzpJTjpJTkQ6SU5ESUE6T3Jpc3NhOktlbmR1amhhcgorODpJTjpJTkQ6SU5ESUE6T3Jpc3NhOktvcmFwdXQKKzk6SU46SU5EOklORElBOk9yaXNzYTpNYXl1cmJoYW5qCisxMDpJTjpJTkQ6SU5ESUE6T3Jpc3NhOlBodWxiYW5pCisxMTpJTjpJTkQ6SU5ESUE6T3Jpc3NhOlB1cmkKKzEyOklOOklORDpJTkRJQTpPcmlzc2E6U2FtYmFscHVyCisxMzpJTjpJTkQ6SU5ESUE6T3Jpc3NhOlN1bmRhcmdhcmgKKzE6SU46SU5EOklORElBOkJpaGFyOkFyYXJpYQorMjpJTjpJTkQ6SU5ESUE6QmloYXI6QXVyYW5nYWJhZAorMzpJTjpJTkQ6SU5ESUE6QmloYXI6QmVndXNhcmFpCis0OklOOklORDpJTkRJQTpCaWhhcjpCaGFnYWxwdXIKKzU6SU46SU5EOklORElBOkJpaGFyOkJob2pwdXIKKzY6SU46SU5EOklORElBOkJpaGFyOkRhcmJoYW5nYQorNzpJTjpJTkQ6SU5ESUE6QmloYXI6RGVvZ2hhcgorODpJTjpJTkQ6SU5ESUE6QmloYXI6RGhhbmJhZAorOTpJTjpJTkQ6SU5ESUE6QmloYXI6RHVta2EgKFNhbnRhbCBQYXJnYW5hKQorMTA6SU46SU5EOklORElBOkJpaGFyOkdheWEKKzExOklOOklORDpJTkRJQTpCaWhhcjpHaXJpZGloCisxMjpJTjpJTkQ6SU5ESUE6QmloYXI6R29kZGEKKzEzOklOOklORDpJTkRJQTpCaWhhcjpHb3BhbGdhbmoKKzE0OklOOklORDpJTkRJQTpCaWhhcjpHdW1sYQorMTU6SU46SU5EOklORElBOkJpaGFyOkhhemFyaWJhZworMTY6SU46SU5EOklORElBOkJpaGFyOkplaGFuYWJhZAorMTc6SU46SU5EOklORElBOkJpaGFyOkthdGloYXIKKzE4OklOOklORDpJTkRJQTpCaWhhcjpLaGFnYXJpYQorMTk6SU46SU5EOklORElBOkJpaGFyOktpc2hhbmdhbmoKKzIwOklOOklORDpJTkRJQTpCaWhhcjpMb2hhcmRhZ2EKKzIxOklOOklORDpJTkRJQTpCaWhhcjpNYWRoZXB1cmEKKzIyOklOOklORDpJTkRJQTpCaWhhcjpNYWRodWJhbmkKKzIzOklOOklORDpJTkRJQTpCaWhhcjpNdW5nZXIKKzI0OklOOklORDpJTkRJQTpCaWhhcjpNdXphZmZhcnB1cgorMjU6SU46SU5EOklORElBOkJpaGFyOk5hbGFuZGEKKzI2OklOOklORDpJTkRJQTpCaWhhcjpOYXdhZGEKKzI3OklOOklORDpJTkRJQTpCaWhhcjpQYWxhbXUgKERhbHRlbmdhbmopCisyODpJTjpJTkQ6SU5ESUE6QmloYXI6UGFzY2hpbSBDaGFtcGFyYW4KKzI5OklOOklORDpJTkRJQTpCaWhhcjpQYXNoY2hpbWkgU2luZ2hiaHVtIChDaC4pCiszMDpJTjpJTkQ6SU5ESUE6QmloYXI6UGF0bmEKKzMxOklOOklORDpJTkRJQTpCaWhhcjpQdXJiaSBDaGFtcGFyYW4KKzMyOklOOklORDpJTkRJQTpCaWhhcjpQdXJiaSBTaW5naGJodW0KKzMzOklOOklORDpJTkRJQTpCaWhhcjpQdXJuaWEKKzM0OklOOklORDpJTkRJQTpCaWhhcjpSYW5jaGkKKzM1OklOOklORDpJTkRJQTpCaWhhcjpSb2h0YXMKKzM2OklOOklORDpJTkRJQTpCaWhhcjpTYWhhcnNhCiszNzpJTjpJTkQ6SU5ESUE6QmloYXI6U2FoaWJnYW5qCiszODpJTjpJTkQ6SU5ESUE6QmloYXI6U2FtYXN0aXB1cgorMzk6SU46SU5EOklORElBOkJpaGFyOlNhcmFuCis0MDpJTjpJTkQ6SU5ESUE6QmloYXI6U2l0YW1hcmhpCis0MTpJTjpJTkQ6SU5ESUE6QmloYXI6U2l3YW4KKzQyOklOOklORDpJTkRJQTpCaWhhcjpWYWlzaGFsaQorMTpJTjpJTkQ6SU5ESUE6TWl6b3JhbTpBaXphd2wKKzI6SU46SU5EOklORElBOk1pem9yYW06Q2hoaW10dWlwdWkKKzM6SU46SU5EOklORElBOk1pem9yYW06THVuZ2xlaQorMTpJTjpJTkQ6SU5ESUE6SGltYWNoYWwgUHJhZGVzaDpCaWxhc3B1cgorMjpJTjpJTkQ6SU5ESUE6SGltYWNoYWwgUHJhZGVzaDpDaGFtYmEKKzM6SU46SU5EOklORElBOkhpbWFjaGFsIFByYWRlc2g6SGFtaXJwdXIKKzQ6SU46SU5EOklORElBOkhpbWFjaGFsIFByYWRlc2g6S2FuZ3JhCis1OklOOklORDpJTkRJQTpIaW1hY2hhbCBQcmFkZXNoOktpbm5hdXIKKzY6SU46SU5EOklORElBOkhpbWFjaGFsIFByYWRlc2g6S3VsbHUKKzc6SU46SU5EOklORElBOkhpbWFjaGFsIFByYWRlc2g6TGFodWwgYW5kIFNwaXRpCis4OklOOklORDpJTkRJQTpIaW1hY2hhbCBQcmFkZXNoOk1hbmRpCis5OklOOklORDpJTkRJQTpIaW1hY2hhbCBQcmFkZXNoOlNoaW1sYQorMTA6SU46SU5EOklORElBOkhpbWFjaGFsIFByYWRlc2g6U2lybWF1ciAoTmFoYW4pCisxMTpJTjpJTkQ6SU5ESUE6SGltYWNoYWwgUHJhZGVzaDpTb2xhbgorMTI6SU46SU5EOklORElBOkhpbWFjaGFsIFByYWRlc2g6VW5hCisxOklOOklORDpJTkRJQTpLZXJhbGE6QWxsZXBwZXkKKzI6SU46SU5EOklORElBOktlcmFsYTpFcm5ha3VsYW0KKzM6SU46SU5EOklORElBOktlcmFsYTpJZHVra2kKKzQ6SU46SU5EOklORElBOktlcmFsYTpLYW5udXIgKENhbm5hbm9yZSkKKzU6SU46SU5EOklORElBOktlcmFsYTpLYXNhcmFnb2QKKzY6SU46SU5EOklORElBOktlcmFsYTpLb2xsYW0gKFF1aWxvbikKKzc6SU46SU5EOklORElBOktlcmFsYTpLb3R0YXlhbQorODpJTjpJTkQ6SU5ESUE6S2VyYWxhOktvemhpa29kZQorOTpJTjpJTkQ6SU5ESUE6S2VyYWxhOk1hbGFwcHVyYW0KKzEwOklOOklORDpJTkRJQTpLZXJhbGE6UGFsYWtrYWQgKFBhbGdoYXQpCisxMTpJTjpJTkQ6SU5ESUE6S2VyYWxhOlBhdGhhbmFtdGhpdHRhCisxMjpJTjpJTkQ6SU5ESUE6S2VyYWxhOlRoaXJ1dmFuYW50aGFwdXJhbSAoVHJpdikKKzEzOklOOklORDpJTkRJQTpLZXJhbGE6VHJpc3N1ciAoVHJpY2h1cikKKzE0OklOOklORDpJTkRJQTpLZXJhbGE6V2F5YW5hZCAoV3luYWQpCisxOklOOklORDpJTkRJQTpBcnVuYWNoYWwgUHJhZGVzaDpDaGFuZ2xhbmcKKzI6SU46SU5EOklORElBOkFydW5hY2hhbCBQcmFkZXNoOkRpYmFuZyBWYWxsZXkgKEFubmkpCiszOklOOklORDpJTkRJQTpBcnVuYWNoYWwgUHJhZGVzaDpFYXN0IEthbWVuZyAoU2VwcGEpCis0OklOOklORDpJTkRJQTpBcnVuYWNoYWwgUHJhZGVzaDpFYXN0IFNpYW5nIChBbG9uZykKKzU6SU46SU5EOklORElBOkFydW5hY2hhbCBQcmFkZXNoOkxvaGl0IChUZWp1KQorNjpJTjpJTkQ6SU5ESUE6QXJ1bmFjaGFsIFByYWRlc2g6TG93ZXIgU3ViYW5zaXJpIChaaXJvKQorNzpJTjpJTkQ6SU5ESUE6QXJ1bmFjaGFsIFByYWRlc2g6VGF3YW5nCis4OklOOklORDpJTkRJQTpBcnVuYWNoYWwgUHJhZGVzaDpUaXJhcAorOTpJTjpJTkQ6SU5ESUE6QXJ1bmFjaGFsIFByYWRlc2g6VXBwZXIgU3ViYW5zaXJpIChEYXAuKQorMTA6SU46SU5EOklORElBOkFydW5hY2hhbCBQcmFkZXNoOldlc3QgS2FtZW5nIChCb21kaWxhKQorMTE6SU46SU5EOklORElBOkFydW5hY2hhbCBQcmFkZXNoOldlc3QgU2lhbmcKKzE6SU46SU5EOklORElBOlRyaXB1cmE6Tm9ydGggVHJpcHVyYQorMjpJTjpJTkQ6SU5ESUE6VHJpcHVyYTpTb3V0aCBUcmlwdXJhCiszOklOOklORDpJTkRJQTpUcmlwdXJhOldlc3QgVHJpcHVyYQorMTpJTjpJTkQ6SU5ESUE6VXR0YXIgUHJhZGVzaDpBZ3JhCisyOklOOklORDpJTkRJQTpVdHRhciBQcmFkZXNoOkFsaWdhcmgKKzM6SU46SU5EOklORElBOlV0dGFyIFByYWRlc2g6QWxsYWhhYmFkCis0OklOOklORDpJTkRJQTpVdHRhciBQcmFkZXNoOkFsbW9yYQorNTpJTjpJTkQ6SU5ESUE6VXR0YXIgUHJhZGVzaDpBemFtZ2FyaAorNjpJTjpJTkQ6SU5ESUE6VXR0YXIgUHJhZGVzaDpCYWhyYWljaAorNzpJTjpJTkQ6SU5ESUE6VXR0YXIgUHJhZGVzaDpCYWxsaWEKKzg6SU46SU5EOklORElBOlV0dGFyIFByYWRlc2g6QmFuZGEKKzk6SU46SU5EOklORElBOlV0dGFyIFByYWRlc2g6QmFyYWJhbmtpCisxMDpJTjpJTkQ6SU5ESUE6VXR0YXIgUHJhZGVzaDpCYXJlaWxseQorMTE6SU46SU5EOklORElBOlV0dGFyIFByYWRlc2g6QmFzdGkKKzEyOklOOklORDpJTkRJQTpVdHRhciBQcmFkZXNoOkJpam5vcgorMTM6SU46SU5EOklORElBOlV0dGFyIFByYWRlc2g6QnVkYXVuCisxNDpJTjpJTkQ6SU5ESUE6VXR0YXIgUHJhZGVzaDpCdWxhbmRzaGFocgorMTU6SU46SU5EOklORElBOlV0dGFyIFByYWRlc2g6Q2hhbW9saQorMTY6SU46SU5EOklORElBOlV0dGFyIFByYWRlc2g6RGVocmEgRHVuCisxNzpJTjpJTkQ6SU5ESUE6VXR0YXIgUHJhZGVzaDpEZW9yaWEKKzE4OklOOklORDpJTkRJQTpVdHRhciBQcmFkZXNoOkV0YWgKKzE5OklOOklORDpJTkRJQTpVdHRhciBQcmFkZXNoOkV0YXdhaAorMjA6SU46SU5EOklORElBOlV0dGFyIFByYWRlc2g6RmFpemFiYWQKKzIxOklOOklORDpJTkRJQTpVdHRhciBQcmFkZXNoOkZhcnJ1a2hhYmFkCisyMjpJTjpJTkQ6SU5ESUE6VXR0YXIgUHJhZGVzaDpGYXRlaHB1cgorMjM6SU46SU5EOklORElBOlV0dGFyIFByYWRlc2g6Rmlyb3phYmFkCisyNDpJTjpJTkQ6SU5ESUE6VXR0YXIgUHJhZGVzaDpHYXJod2FsCisyNTpJTjpJTkQ6SU5ESUE6VXR0YXIgUHJhZGVzaDpHYXppcHVyCisyNjpJTjpJTkQ6SU5ESUE6VXR0YXIgUHJhZGVzaDpHaGF6aWFiYWQKKzI3OklOOklORDpJTkRJQTpVdHRhciBQcmFkZXNoOkdvbmRhCisyODpJTjpJTkQ6SU5ESUE6VXR0YXIgUHJhZGVzaDpHb3Jha2hwdXIKKzI5OklOOklORDpJTkRJQTpVdHRhciBQcmFkZXNoOkhhbWlycHVyCiszMDpJTjpJTkQ6SU5ESUE6VXR0YXIgUHJhZGVzaDpIYXJkb2kKKzMxOklOOklORDpJTkRJQTpVdHRhciBQcmFkZXNoOkhhcmR3YXIKKzMyOklOOklORDpJTkRJQTpVdHRhciBQcmFkZXNoOkphbGF1bgorMzM6SU46SU5EOklORElBOlV0dGFyIFByYWRlc2g6SmF1bnB1cgorMzQ6SU46SU5EOklORElBOlV0dGFyIFByYWRlc2g6SmhhbnNpCiszNTpJTjpJTkQ6SU5ESUE6VXR0YXIgUHJhZGVzaDpLYW5kdXIgTmFnYXIKKzM2OklOOklORDpJTkRJQTpVdHRhciBQcmFkZXNoOkthbnB1ciBEZWhhdAorMzc6SU46SU5EOklORElBOlV0dGFyIFByYWRlc2g6S2hlcmkKKzM4OklOOklORDpJTkRJQTpVdHRhciBQcmFkZXNoOkxhbGl0cHVyCiszOTpJTjpJTkQ6SU5ESUE6VXR0YXIgUHJhZGVzaDpMdWNrbm93Cis0MDpJTjpJTkQ6SU5ESUE6VXR0YXIgUHJhZGVzaDpNYWhhcmFqZ2FuagorNDE6SU46SU5EOklORElBOlV0dGFyIFByYWRlc2g6TWFpagorNDI6SU46SU5EOklORElBOlV0dGFyIFByYWRlc2g6TWFpbnB1cmkKKzQzOklOOklORDpJTkRJQTpVdHRhciBQcmFkZXNoOk1hdGh1cmEKKzQ0OklOOklORDpJTkRJQTpVdHRhciBQcmFkZXNoOk1lZXJ1dAorNDU6SU46SU5EOklORElBOlV0dGFyIFByYWRlc2g6TWlyemFwdXIKKzQ2OklOOklORDpJTkRJQTpVdHRhciBQcmFkZXNoOk1vcmFkYWJhZAorNDc6SU46SU5EOklORElBOlV0dGFyIFByYWRlc2g6TXV6YWZmYXJuYWdhcgorNDg6SU46SU5EOklORElBOlV0dGFyIFByYWRlc2g6TmFpbml0YWwKKzQ5OklOOklORDpJTkRJQTpVdHRhciBQcmFkZXNoOlBhcnRhcGdhcmgKKzUwOklOOklORDpJTkRJQTpVdHRhciBQcmFkZXNoOlBpbGliaGl0Cis1MTpJTjpJTkQ6SU5ESUE6VXR0YXIgUHJhZGVzaDpQaXRob3JhZ2FyaAorNTI6SU46SU5EOklORElBOlV0dGFyIFByYWRlc2g6UmFlIEJhcmVsaQorNTM6SU46SU5EOklORElBOlV0dGFyIFByYWRlc2g6UmFtcHVyCis1NDpJTjpJTkQ6SU5ESUE6VXR0YXIgUHJhZGVzaDpTYWhhcmFucHVyCis1NTpJTjpJTkQ6SU5ESUE6VXR0YXIgUHJhZGVzaDpTaGFoamFoYW5wdXIKKzU2OklOOklORDpJTkRJQTpVdHRhciBQcmFkZXNoOlNpZGRoYXJ0aG5hZ2FyCis1NzpJTjpJTkQ6SU5ESUE6VXR0YXIgUHJhZGVzaDpTaXRhcHVyCis1ODpJTjpJTkQ6SU5ESUE6VXR0YXIgUHJhZGVzaDpTb25iaGFkcmEKKzU5OklOOklORDpJTkRJQTpVdHRhciBQcmFkZXNoOlN1bHRhbnB1cgorNjA6SU46SU5EOklORElBOlV0dGFyIFByYWRlc2g6VGVocmktR2FyaHdhbAorNjE6SU46SU5EOklORElBOlV0dGFyIFByYWRlc2g6VW5uYW8KKzYyOklOOklORDpJTkRJQTpVdHRhciBQcmFkZXNoOlV0dGFya2FzaGkKKzYzOklOOklORDpJTkRJQTpVdHRhciBQcmFkZXNoOlZhcmFuYXNpCisxOklOOklORDpJTkRJQTpBc3NhbTpCYXJwZXRhCisyOklOOklORDpJTkRJQTpBc3NhbTpCb25nYWlnYW9uCiszOklOOklORDpJTkRJQTpBc3NhbTpDYWNoYXIKKzQ6SU46SU5EOklORElBOkFzc2FtOkRhcnJhbmcgKE1hbmdhbGRhaSkKKzU6SU46SU5EOklORElBOkFzc2FtOkRoZW1hamkKKzY6SU46SU5EOklORElBOkFzc2FtOkRodWJyaQorNzpJTjpJTkQ6SU5ESUE6QXNzYW06RGlicnVnYXJoCis4OklOOklORDpJTkRJQTpBc3NhbTpHb2FscGFyYQorOTpJTjpJTkQ6SU5ESUE6QXNzYW06R29sYWdoYXQKKzEwOklOOklORDpJTkRJQTpBc3NhbTpIYWpsYWthbmRpCisxMTpJTjpJTkQ6SU5ESUE6QXNzYW06Sm9yaGF0CisxMjpJTjpJTkQ6SU5ESUE6QXNzYW06S2FtcnVwCisxMzpJTjpJTkQ6SU5ESUE6QXNzYW06S2FyYmkgQW5nbG9uZworMTQ6SU46SU5EOklORElBOkFzc2FtOkthcmJpIEFuZ2xvbmcgKERpcGh1KQorMTU6SU46SU5EOklORElBOkFzc2FtOkthcmltZ2FuagorMTY6SU46SU5EOklORElBOkFzc2FtOktva3JhamhhcgorMTc6SU46SU5EOklORElBOkFzc2FtOkxha2hpbXB1cgorMTg6SU46SU5EOklORElBOkFzc2FtOk1hcmlnYW9uCisxOTpJTjpJTkQ6SU5ESUE6QXNzYW06Ti4gQ2FjaGEgSGlsbHMgKEhhZmxvbmcpCisyMDpJTjpJTkQ6SU5ESUE6QXNzYW06TmFnYW9uCisyMTpJTjpJTkQ6SU5ESUE6QXNzYW06TmFsYmFyaQorMjI6SU46SU5EOklORElBOkFzc2FtOlNpYnNhZ2FyCisyMzpJTjpJTkQ6SU5ESUE6QXNzYW06U29uaXRwdXIgKFRlenB1cikKKzI0OklOOklORDpJTkRJQTpBc3NhbTpUaW5zdWtpYQorMTpJTjpJTkQ6SU5ESUE6TWFkaHlhIFByYWRlc2g6QmFsYWdoYXQKKzI6SU46SU5EOklORElBOk1hZGh5YSBQcmFkZXNoOkJhc3RhciAoSmFnZGFscHVyKQorMzpJTjpJTkQ6SU5ESUE6TWFkaHlhIFByYWRlc2g6QmV0dWwKKzQ6SU46SU5EOklORElBOk1hZGh5YSBQcmFkZXNoOkJoaW5kCis1OklOOklORDpJTkRJQTpNYWRoeWEgUHJhZGVzaDpCaG9wYWwKKzY6SU46SU5EOklORElBOk1hZGh5YSBQcmFkZXNoOkJpbGFzcHVyCis3OklOOklORDpJTkRJQTpNYWRoeWEgUHJhZGVzaDpDaGhhdHJhcHVyCis4OklOOklORDpJTkRJQTpNYWRoeWEgUHJhZGVzaDpDaGhpbmR3YXJhCis5OklOOklORDpJTkRJQTpNYWRoeWEgUHJhZGVzaDpEYW1vaAorMTA6SU46SU5EOklORElBOk1hZGh5YSBQcmFkZXNoOkRhdGlhCisxMTpJTjpJTkQ6SU5ESUE6TWFkaHlhIFByYWRlc2g6RGV3YXMKKzEyOklOOklORDpJTkRJQTpNYWRoeWEgUHJhZGVzaDpEaGFyCisxMzpJTjpJTkQ6SU5ESUE6TWFkaHlhIFByYWRlc2g6RHVyZworMTQ6SU46SU5EOklORElBOk1hZGh5YSBQcmFkZXNoOkVhc3QgTmltYXIgKEtoYW5kd2EpCisxNTpJTjpJTkQ6SU5ESUE6TWFkaHlhIFByYWRlc2g6R3VuYQorMTY6SU46SU5EOklORElBOk1hZGh5YSBQcmFkZXNoOkd3YWxpb3IKKzE3OklOOklORDpJTkRJQTpNYWRoeWEgUHJhZGVzaDpIb3NoYW5nYWJhZAorMTg6SU46SU5EOklORElBOk1hZGh5YSBQcmFkZXNoOkluZG9yZQorMTk6SU46SU5EOklORElBOk1hZGh5YSBQcmFkZXNoOkphYmFscHVyCisyMDpJTjpJTkQ6SU5ESUE6TWFkaHlhIFByYWRlc2g6SmhhYnVhCisyMTpJTjpJTkQ6SU5ESUE6TWFkaHlhIFByYWRlc2g6TWFuZGxhCisyMjpJTjpJTkQ6SU5ESUE6TWFkaHlhIFByYWRlc2g6TWFuZHNhdXIKKzIzOklOOklORDpJTkRJQTpNYWRoeWEgUHJhZGVzaDpNb3JlbmEKKzI0OklOOklORDpJTkRJQTpNYWRoeWEgUHJhZGVzaDpOYXJzaW1oYXB1cgorMjU6SU46SU5EOklORElBOk1hZGh5YSBQcmFkZXNoOlBhbm5hCisyNjpJTjpJTkQ6SU5ESUE6TWFkaHlhIFByYWRlc2g6UmFpZ2FyaAorMjc6SU46SU5EOklORElBOk1hZGh5YSBQcmFkZXNoOlJhaXB1cgorMjg6SU46SU5EOklORElBOk1hZGh5YSBQcmFkZXNoOlJhaXNlbgorMjk6SU46SU5EOklORElBOk1hZGh5YSBQcmFkZXNoOlJhaiBOYW5kZ2FvbgorMzA6SU46SU5EOklORElBOk1hZGh5YSBQcmFkZXNoOlJhamdhcmgKKzMxOklOOklORDpJTkRJQTpNYWRoeWEgUHJhZGVzaDpSYXRsYW0KKzMyOklOOklORDpJTkRJQTpNYWRoeWEgUHJhZGVzaDpSZXdhCiszMzpJTjpJTkQ6SU5ESUE6TWFkaHlhIFByYWRlc2g6U2FnYXIKKzM0OklOOklORDpJTkRJQTpNYWRoeWEgUHJhZGVzaDpTYXRuYQorMzU6SU46SU5EOklORElBOk1hZGh5YSBQcmFkZXNoOlNlaG9yZQorMzY6SU46SU5EOklORElBOk1hZGh5YSBQcmFkZXNoOlNlb25pCiszNzpJTjpJTkQ6SU5ESUE6TWFkaHlhIFByYWRlc2g6U2hhaGRvbAorMzg6SU46SU5EOklORElBOk1hZGh5YSBQcmFkZXNoOlNoYWphcHVyCiszOTpJTjpJTkQ6SU5ESUE6TWFkaHlhIFByYWRlc2g6U2hpdnB1cmkKKzQwOklOOklORDpJTkRJQTpNYWRoeWEgUHJhZGVzaDpTaWRoaQorNDE6SU46SU5EOklORElBOk1hZGh5YSBQcmFkZXNoOlN1cmd1amEgKEFtYmlrYXB1cikKKzQyOklOOklORDpJTkRJQTpNYWRoeWEgUHJhZGVzaDpUaWthbWdhcmgKKzQzOklOOklORDpJTkRJQTpNYWRoeWEgUHJhZGVzaDpVamphaW4KKzQ0OklOOklORDpJTkRJQTpNYWRoeWEgUHJhZGVzaDpWaWRpc2hhCis0NTpJTjpJTkQ6SU5ESUE6TWFkaHlhIFByYWRlc2g6V2VzdCBOaW1hciAoS2hhcmdvbikKKzE6SU46SU5EOklORElBOldlc3QgQmVuZ2FsOkJhbmt1cmEKKzI6SU46SU5EOklORElBOldlc3QgQmVuZ2FsOkJhcmRkaGFtYW4KKzM6SU46SU5EOklORElBOldlc3QgQmVuZ2FsOkJpcmJodW0gKFNpdHVyaSkKKzQ6SU46SU5EOklORElBOldlc3QgQmVuZ2FsOkNhbGN1dHRhCis1OklOOklORDpJTkRJQTpXZXN0IEJlbmdhbDpEYXJqaWxpbmcKKzY6SU46SU5EOklORElBOldlc3QgQmVuZ2FsOkhhb3JhCis3OklOOklORDpJTkRJQTpXZXN0IEJlbmdhbDpIdWdsaSAoQ2h1bmNodXJhKQorODpJTjpJTkQ6SU5ESUE6V2VzdCBCZW5nYWw6SmFscGFpZ3VyaQorOTpJTjpJTkQ6SU5ESUE6V2VzdCBCZW5nYWw6S29jaCBCaWhhcgorMTA6SU46SU5EOklORElBOldlc3QgQmVuZ2FsOk1hbGRhaAorMTE6SU46SU5EOklORElBOldlc3QgQmVuZ2FsOk1lZGluaXB1cgorMTI6SU46SU5EOklORElBOldlc3QgQmVuZ2FsOk11cnNoaWRhYmFkCisxMzpJTjpJTkQ6SU5ESUE6V2VzdCBCZW5nYWw6TmFkaWEgKEtyaXNobmFuYWdhcikKKzE0OklOOklORDpJTkRJQTpXZXN0IEJlbmdhbDpOb3J0aCAyNCBQYW5nYW5hcworMTU6SU46SU5EOklORElBOldlc3QgQmVuZ2FsOlB1cnVsaXlhCisxNjpJTjpJTkQ6SU5ESUE6V2VzdCBCZW5nYWw6U291dGggMjQgUGFuZ2FuYXMKKzE3OklOOklORDpJTkRJQTpXZXN0IEJlbmdhbDpXZXN0IERpbmFqcHVyCisxOklOOklORDpJTkRJQTpEYWRyYSBhbmQgTmFnYXIgSGF2ZWxpOihEYWRyYSkgYW5kIE5hZ2FyIEhhdmVsaQorMjpJTjpJTkQ6SU5ESUE6RGFkcmEgYW5kIE5hZ2FyIEhhdmVsaTpEYWRyYSBhbmQgKE5hZ2FyIEhhdmVsaSkKKzE6SU46SU5EOklORElBOkhhcnlhbmE6QW1iYWxhCisyOklOOklORDpJTkRJQTpIYXJ5YW5hOkJoaXdhbmkKKzM6SU46SU5EOklORElBOkhhcnlhbmE6RmFyaWRhYmFkCis0OklOOklORDpJTkRJQTpIYXJ5YW5hOkd1cmdhb24KKzU6SU46SU5EOklORElBOkhhcnlhbmE6SGlzYXIKKzY6SU46SU5EOklORElBOkhhcnlhbmE6SmluZAorNzpJTjpJTkQ6SU5ESUE6SGFyeWFuYTpLYWl0aGFsCis4OklOOklORDpJTkRJQTpIYXJ5YW5hOkthcm5hbAorOTpJTjpJTkQ6SU5ESUE6SGFyeWFuYTpLdXJ1a3NoZXRyYQorMTA6SU46SU5EOklORElBOkhhcnlhbmE6TWFoZW5kcmFnYXJoCisxMTpJTjpJTkQ6SU5ESUE6SGFyeWFuYTpQYW5pcGF0CisxMjpJTjpJTkQ6SU5ESUE6SGFyeWFuYTpSZXdhcmkKKzEzOklOOklORDpJTkRJQTpIYXJ5YW5hOlJvaHRhaworMTQ6SU46SU5EOklORElBOkhhcnlhbmE6U2lyc2EKKzE1OklOOklORDpJTkRJQTpIYXJ5YW5hOlNvbmlwYXQKKzE2OklOOklORDpJTkRJQTpIYXJ5YW5hOllhbXVuYW5hZ2FyCisxOklOOklORDpJTkRJQTpBbmRhbWFuICYgTmljb2JhcjpBbmRhbWFuIElzbGFuZHMKKzI6SU46SU5EOklORElBOkFuZGFtYW4gJiBOaWNvYmFyOk5pY29iYXIgSXNsYW5kcworMTpJTjpJTkQ6SU5ESUE6R29hOk5vcnRoIEdvYQorMjpJTjpJTkQ6SU5ESUE6R29hOlNvdXRoIEdvYQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L0lSTC9JUkxfQURNSU4xX0xFWC50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvSVJML0lSTF9BRE1JTjFfTEVYLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zN2JiMzBmCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L0lSTC9JUkxfQURNSU4xX0xFWC50eHQKQEAgLTAsMCArMSwyNyBAQAorMTpJRS1DVzpJRTpDQVJMT1cKKzI6SUUtQ046SUU6Q0FWQU4KKzM6SUUtQ0U6SUU6Q0xBUkUKKzQ6SUUtQzpJRTpDT1JLCis1OklFLURMOklFOkRPTkVHQUwKKzY6SUUtRDpJRTpEVUJMSU4KKzc6SUUtRzpJRTpHQUxXQVkKKzg6SUUtSTpJRTpJUkVMQU5ECis5OklFLUtZOklFOktFUlJZCisxMDpJRS1LRTpJRTpLSUxEQVJFCisxMTpJRS1LSzpJRTpLSUxLRU5OWQorMTI6SUUtTFM6SUU6TEFPSVMKKzEzOklFLUxNOklFOkxFSVRSSU0KKzE0OklFLUxLOklFOkxJTUVSSUNLCisxNTpJRS1MRDpJRTpMT05HRk9SRAorMTY6SUUtTEg6SUU6TE9VVEgKKzE3OklFLU1POklFOk1BWU8KKzE4OklFLU1IOklFOk1FQVRICisxOTpJRS1NTjpJRTpNT05BR0hBTgorMjA6SUUtT1k6SUU6T0ZGQUxZCisyMTpJRS1STjpJRTpST1NDT01NT04KKzIyOklFLVNPOklFOlNMSUdPCisyMzpJRS1UQTpJRTpUSVBQRVJBUlkKKzI0OklFLVdEOklFOldBVEVSRk9SRAorMjU6SUUtV0g6SUU6V0VTVE1FQVRICisyNjpJRS1XWDpJRTpXRVhGT1JECisyNzpJRS1XVzpJRTpXSUNLTE9XCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvSVJML0lSTF9BRE1JTjJfTEVYLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9JUkwvSVJMX0FETUlOMl9MRVgudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2OWRlMjkKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvSVJML0lSTF9BRE1JTjJfTEVYLnR4dApkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L0lSTi9JUk5fQURNSU4xX0xFWC50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvSVJOL0lSTl9BRE1JTjFfTEVYLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NmVlYzk2Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L0lSTi9JUk5fQURNSU4xX0xFWC50eHQKQEAgLTAsMCArMSwzOCBAQAorMTpJUi0wMzpJUjpBUkRBQkwKKzI6SVItQktUOklSOkJBS0hUQVJBTgorMzpJUi0wNjpJUjpCVVNIRUhSCis0OklSLTA4OklSOkNIQUhBUk1BSEFMIEFORCBCQUtIVElBUgorNTpJUi1FQVo6SVI6RUFTVCBBWkFSQkFZRUpBTgorNjpJUi0wNDpJUjpFU0ZBSEFOCis3OklSLTQ6SVI6RkFSUworODpJUi05OklSOkdJTEFOCis5OklSLTI3OklSOkdPTEVTVE4KKzEwOklSLTI0OklSOkhBTUFEQU4KKzExOklSLUhTQTpJUjpIT1JBU0FOCisxMjpJUi0yMzpJUjpIT1JNT1pHQU4KKzEzOklSLTA1OklSOklMQU0KKzE0OklSLTU6SVI6S0VSTUFOCisxNTpJUi03OklSOktFUk1OU0hICisxNjpJUi0wOTpJUjpLSE9SU04KKzE3OklSLTA6SVI6S0hVWkVTVEFOCisxODpJUi0xMDpJUjpLSFpFU1ROCisxOTpJUi04OklSOktPSEdJTFVZRUggJiBCT1lFUiBBSE1BRAorMjA6SVItNjpJUjpLT1JERVNUQU4KKzIxOklSLUxSUzpJUjpMT1JFU1RBTgorMjI6SVItMjA6SVI6TE9SRVNUTgorMjM6SVItMjI6SVI6TUFSS0FaCisyNDpJUi1NS1o6SVI6TUFSS0FaSQorMjU6SVItTVpEOklSOk1BWkFOREFSQU4KKzI2OklSLTI6SVI6TVpBTkRBUk4KKzI3OklSLTI4OklSOlFBWlZOCisyODpJUi0yNjpJUjpRT00KKzI5OklSLVNFTTpJUjpTRU1OQU4KKzMwOklSLVNCTDpJUjpTSVNUQU4gQU5EIEJBTFVDSEVTVEFOCiszMTpJUi0zOklSOlNTVE4gVkEgQkFMQ0hFU1ROCiszMjpJUi1USFI6SVI6VEVIUkFOCiszMzpJUi0wNzpJUjpURUhSTgorMzQ6SVItV0FKOklSOldFU1QgQVpBUkJBWUVKQU4KKzM1OklSLTI1OklSOllBWkQKKzM2OklSLVo6SVI6WkFOSkFOCiszNzpJUi0xMTpJUjpaQU5KTgorMzg6SVItMDI6SVI6WkFSQllKTiBFIEdIQVJCCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvSVJOL0lSTl9BRE1JTjJfTEVYLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9JUk4vSVJOX0FETUlOMl9MRVgudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZjZjE4MzUKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvSVJOL0lSTl9BRE1JTjJfTEVYLnR4dApAQCAtMCwwICsxLDEwNSBAQAorMTpJUjpJUk46SVJBTjpDaGFoYXJtYWhhbCBhbmQgQmFraHRpYXI6SVJOLkwyLjMKKzE6SVI6SVJOOklSQU46QmFraHRhcmFuOklSTi5MMi41CisxOklSOklSTjpJUkFOOlNlbW5hbjpJUk4uTDIuMTQKKzE6SVI6SVJOOklSQU46SG9ybW96Z2FuOklSTi5MMi41NAorMjpJUjpJUk46SVJBTjpIb3Jtb3pnYW46SVJOLkwyLjU1CiszOklSOklSTjpJUkFOOkhvcm1vemdhbjpJUk4uTDIuNTYKKzQ6SVI6SVJOOklSQU46SG9ybW96Z2FuOklSTi5MMi41NworNTpJUjpJUk46SVJBTjpIb3Jtb3pnYW46SVJOLkwyLjU4Cis2OklSOklSTjpJUkFOOkhvcm1vemdhbjpJUk4uTDIuNTkKKzc6SVI6SVJOOklSQU46SG9ybW96Z2FuOklSTi5MMi42MAorODpJUjpJUk46SVJBTjpIb3Jtb3pnYW46SVJOLkwyLjYxCis5OklSOklSTjpJUkFOOkhvcm1vemdhbjpJUk4uTDIuNjIKKzEwOklSOklSTjpJUkFOOkhvcm1vemdhbjpJUk4uTDIuNjMKKzExOklSOklSTjpJUkFOOkhvcm1vemdhbjpJUk4uTDIuNjQKKzEyOklSOklSTjpJUkFOOkhvcm1vemdhbjpJUk4uTDIuNjUKKzEzOklSOklSTjpJUkFOOkhvcm1vemdhbjpJUk4uTDIuNjYKKzE0OklSOklSTjpJUkFOOkhvcm1vemdhbjpJUk4uTDIuNjcKKzE1OklSOklSTjpJUkFOOkhvcm1vemdhbjpJUk4uTDIuNjgKKzE2OklSOklSTjpJUkFOOkhvcm1vemdhbjpJUk4uTDIuNjkKKzE3OklSOklSTjpJUkFOOkhvcm1vemdhbjpJUk4uTDIuNzAKKzE4OklSOklSTjpJUkFOOkhvcm1vemdhbjpJUk4uTDIuNzEKKzE5OklSOklSTjpJUkFOOkhvcm1vemdhbjpJUk4uTDIuNzIKKzIwOklSOklSTjpJUkFOOkhvcm1vemdhbjpJUk4uTDIuNzMKKzIxOklSOklSTjpJUkFOOkhvcm1vemdhbjpJUk4uTDIuNzQKKzIyOklSOklSTjpJUkFOOkhvcm1vemdhbjpJUk4uTDIuNzUKKzIzOklSOklSTjpJUkFOOkhvcm1vemdhbjpJUk4uTDIuNzYKKzI0OklSOklSTjpJUkFOOkhvcm1vemdhbjpJUk4uTDIuNzcKKzI1OklSOklSTjpJUkFOOkhvcm1vemdhbjpJUk4uTDIuNzgKKzI2OklSOklSTjpJUkFOOkhvcm1vemdhbjpJUk4uTDIuNzkKKzI3OklSOklSTjpJUkFOOkhvcm1vemdhbjpJUk4uTDIuODAKKzI4OklSOklSTjpJUkFOOkhvcm1vemdhbjpJUk4uTDIuODEKKzI5OklSOklSTjpJUkFOOkhvcm1vemdhbjpJUk4uTDIuODIKKzMwOklSOklSTjpJUkFOOkhvcm1vemdhbjpJUk4uTDIuODMKKzMxOklSOklSTjpJUkFOOkhvcm1vemdhbjpJUk4uTDIuODQKKzMyOklSOklSTjpJUkFOOkhvcm1vemdhbjpJUk4uTDIuODUKKzMzOklSOklSTjpJUkFOOkhvcm1vemdhbjpJUk4uTDIuODYKKzM0OklSOklSTjpJUkFOOkhvcm1vemdhbjpJUk4uTDIuODcKKzM1OklSOklSTjpJUkFOOkhvcm1vemdhbjpJUk4uTDIuODgKKzM2OklSOklSTjpJUkFOOkhvcm1vemdhbjpJUk4uTDIuODkKKzM3OklSOklSTjpJUkFOOkhvcm1vemdhbjpJUk4uTDIuOTAKKzM4OklSOklSTjpJUkFOOkhvcm1vemdhbjpJUk4uTDIuOTEKKzE6SVI6SVJOOklSQU46S29oZ2lsdXllaCAmIEJveWVyIEFobWFkOklSTi5MMi42CisxOklSOklSTjpJUkFOOktlcm1hbjpJUk4uTDIuMTMKKzE6SVI6SVJOOklSQU46R2lsYW46SVJOLkwyLjE3CisxOklSOklSTjpJUkFOOlNpc3RhbiBhbmQgQmFsdWNoZXN0YW46SVJOLkwyLjE1CisyOklSOklSTjpJUkFOOlNpc3RhbiBhbmQgQmFsdWNoZXN0YW46SVJOLkwyLjE2CisxOklSOklSTjpJUkFOOlphbmphbjpJUk4uTDIuMTEKKzE6SVI6SVJOOklSQU46TG9yZXN0YW46SVJOLkwyLjE5CisxOklSOklSTjpJUkFOOldlc3QgQXphcmJheWVqYW46SVJOLkwyLjkKKzE6SVI6SVJOOklSQU46WWF6ZDpJUk4uTDIuMQorMTpJUjpJUk46SVJBTjpFc2ZhaGFuOklSTi5MMi44CisxOklSOklSTjpJUkFOOkJ1c2hlaHI6SVJOLkwyLjEwMAorMjpJUjpJUk46SVJBTjpCdXNoZWhyOklSTi5MMi4xMDEKKzM6SVI6SVJOOklSQU46QnVzaGVocjpJUk4uTDIuMTAyCis0OklSOklSTjpJUkFOOkJ1c2hlaHI6SVJOLkwyLjEwMworNTpJUjpJUk46SVJBTjpCdXNoZWhyOklSTi5MMi4xMDQKKzY6SVI6SVJOOklSQU46QnVzaGVocjpJUk4uTDIuMTA1Cis3OklSOklSTjpJUkFOOkJ1c2hlaHI6SVJOLkwyLjk0Cis4OklSOklSTjpJUkFOOkJ1c2hlaHI6SVJOLkwyLjk1Cis5OklSOklSTjpJUkFOOkJ1c2hlaHI6SVJOLkwyLjk2CisxMDpJUjpJUk46SVJBTjpCdXNoZWhyOklSTi5MMi45NworMTE6SVI6SVJOOklSQU46QnVzaGVocjpJUk4uTDIuOTgKKzEyOklSOklSTjpJUkFOOkJ1c2hlaHI6SVJOLkwyLjk5CisxOklSOklSTjpJUkFOOkhhbWFkYW46SVJOLkwyLjUzCisxOklSOklSTjpJUkFOOk1hemFuZGFyYW46SVJOLkwyLjkyCisyOklSOklSTjpJUkFOOk1hemFuZGFyYW46SVJOLkwyLjkzCisxOklSOklSTjpJUkFOOkZhcnM6SVJOLkwyLjEwCisxOklSOklSTjpJUkFOOk1hcmthemk6SVJOLkwyLjQKKzE6SVI6SVJOOklSQU46SG9yYXNhbjpJUk4uTDIuMgorMTpJUjpJUk46SVJBTjpLb3JkZXN0YW46SVJOLkwyLjIwCisxOklSOklSTjpJUkFOOktodXplc3RhbjpJUk4uTDIuMjEKKzI6SVI6SVJOOklSQU46S2h1emVzdGFuOklSTi5MMi4yMgorMzpJUjpJUk46SVJBTjpLaHV6ZXN0YW46SVJOLkwyLjIzCis0OklSOklSTjpJUkFOOktodXplc3RhbjpJUk4uTDIuMjQKKzU6SVI6SVJOOklSQU46S2h1emVzdGFuOklSTi5MMi4yNQorNjpJUjpJUk46SVJBTjpLaHV6ZXN0YW46SVJOLkwyLjI2Cis3OklSOklSTjpJUkFOOktodXplc3RhbjpJUk4uTDIuMjcKKzg6SVI6SVJOOklSQU46S2h1emVzdGFuOklSTi5MMi4yOAorOTpJUjpJUk46SVJBTjpLaHV6ZXN0YW46SVJOLkwyLjI5CisxMDpJUjpJUk46SVJBTjpLaHV6ZXN0YW46SVJOLkwyLjMwCisxMTpJUjpJUk46SVJBTjpLaHV6ZXN0YW46SVJOLkwyLjMxCisxMjpJUjpJUk46SVJBTjpLaHV6ZXN0YW46SVJOLkwyLjMyCisxMzpJUjpJUk46SVJBTjpLaHV6ZXN0YW46SVJOLkwyLjMzCisxNDpJUjpJUk46SVJBTjpLaHV6ZXN0YW46SVJOLkwyLjM0CisxNTpJUjpJUk46SVJBTjpLaHV6ZXN0YW46SVJOLkwyLjM1CisxNjpJUjpJUk46SVJBTjpLaHV6ZXN0YW46SVJOLkwyLjM2CisxNzpJUjpJUk46SVJBTjpLaHV6ZXN0YW46SVJOLkwyLjM3CisxODpJUjpJUk46SVJBTjpLaHV6ZXN0YW46SVJOLkwyLjM4CisxOTpJUjpJUk46SVJBTjpLaHV6ZXN0YW46SVJOLkwyLjM5CisyMDpJUjpJUk46SVJBTjpLaHV6ZXN0YW46SVJOLkwyLjQwCisyMTpJUjpJUk46SVJBTjpLaHV6ZXN0YW46SVJOLkwyLjQxCisyMjpJUjpJUk46SVJBTjpLaHV6ZXN0YW46SVJOLkwyLjQyCisyMzpJUjpJUk46SVJBTjpLaHV6ZXN0YW46SVJOLkwyLjQzCisyNDpJUjpJUk46SVJBTjpLaHV6ZXN0YW46SVJOLkwyLjQ0CisyNTpJUjpJUk46SVJBTjpLaHV6ZXN0YW46SVJOLkwyLjQ1CisyNjpJUjpJUk46SVJBTjpLaHV6ZXN0YW46SVJOLkwyLjQ2CisyNzpJUjpJUk46SVJBTjpLaHV6ZXN0YW46SVJOLkwyLjQ3CisyODpJUjpJUk46SVJBTjpLaHV6ZXN0YW46SVJOLkwyLjQ4CisyOTpJUjpJUk46SVJBTjpLaHV6ZXN0YW46SVJOLkwyLjQ5CiszMDpJUjpJUk46SVJBTjpLaHV6ZXN0YW46SVJOLkwyLjUwCiszMTpJUjpJUk46SVJBTjpLaHV6ZXN0YW46SVJOLkwyLjUxCiszMjpJUjpJUk46SVJBTjpLaHV6ZXN0YW46SVJOLkwyLjUyCisxOklSOklSTjpJUkFOOklsYW06SVJOLkwyLjcKKzE6SVI6SVJOOklSQU46VGVocmFuOklSTi5MMi4xOAorMTpJUjpJUk46SVJBTjpFYXN0IEF6YXJiYXllamFuOklSTi5MMi4xMgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L0lSUS9JUlFfQURNSU4xX0xFWC50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvSVJRL0lSUV9BRE1JTjFfTEVYLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YzQ1MTkxCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L0lSUS9JUlFfQURNSU4xX0xFWC50eHQKQEAgLTAsMCArMSwxOSBAQAorMTpJUS1BTjpJUTpBTCBBTkJBUgorMjpJUS1CQTpJUTpBTCBCQVNSQUgKKzM6SVEtTVU6SVE6QUwgTVVUSEFOTklBCis0OklRLVFBOklROkFMIFFBRElTSVlBSAorNTpJUS1OQTpJUTpBTiBOQUpBRgorNjpJUS1BUjpJUTpBUkJJTAorNzpJUS1UUzpJUTpBVCBUQU1JTQorODpJUS1CQjpJUTpCQUJJTAorOTpJUS1CRzpJUTpCQUdIREFECisxMDpJUS1EUTpJUTpESEkgUUFSCisxMTpJUS1EQTpJUTpESUhPSworMTI6SVEtREk6SVE6RElZQUxBCisxMzpJUS1ORVU6SVE6SVJRL1NBVSBORVVUUkFMIFpPTkUKKzE0OklRLUtBOklROktBUkJBTEEKKzE1OklRLU1BOklROk1JU0FOCisxNjpJUS1OSTpJUTpORUlORVZBCisxNzpJUS1TRDpJUTpTQUxBSFVERElOCisxODpJUS1TVTpJUTpTVUxBWU1BTklZQUgKKzE5OklRLVdBOklROldBU0lUCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvSVJRL0lSUV9BRE1JTjJfTEVYLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9JUlEvSVJRX0FETUlOMl9MRVgudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVhMDJiYzIKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvSVJRL0lSUV9BRE1JTjJfTEVYLnR4dApAQCAtMCwwICsxLDE5IEBACisxOklROklSUTpJUkFROkF0LVRhbWltOklSUS5MMi4xMQorMTpJUTpJUlE6SVJBUTpEaGktUWFyOklSUS5MMi4xNgorMTpJUTpJUlE6SVJBUTpNaXNhbjpJUlEuTDIuMworMTpJUTpJUlE6SVJBUTpBbC1CYXNyYWg6SVJRLkwyLjUKKzE6SVE6SVJROklSQVE6SVJRL1NBVSBOZXV0cmFsIFpvbmU6SVJRLkwyLjEwCisxOklROklSUTpJUkFROkFyYmlsOklSUS5MMi4xNAorMTpJUTpJUlE6SVJBUTpOZWluZXZhOklSUS5MMi4xOQorMTpJUTpJUlE6SVJBUTpTdWxheW1hbml5YWg6SVJRLkwyLjE3CisxOklROklSUTpJUkFROkRpeWFsYTpJUlEuTDIuMTIKKzE6SVE6SVJROklSQVE6U2FsYWh1ZGRpbjpJUlEuTDIuNgorMTpJUTpJUlE6SVJBUTpCYWJpbDpJUlEuTDIuMTUKKzE6SVE6SVJROklSQVE6RGlob2s6SVJRLkwyLjEzCisxOklROklSUTpJUkFROkFsLVFhZGlzaXlhaDpJUlEuTDIuMgorMTpJUTpJUlE6SVJBUTpCYWdoZGFkOklSUS5MMi40CisxOklROklSUTpJUkFROkFuLU5hamFmOklSUS5MMi4xOAorMTpJUTpJUlE6SVJBUTpLYXJiYWxhOklSUS5MMi43CisxOklROklSUTpJUkFROkFsLU11dGhhbm5pYTpJUlEuTDIuOAorMTpJUTpJUlE6SVJBUTpBbC1BbmJhcjpJUlEuTDIuOQorMTpJUTpJUlE6SVJBUTpXYXNpdDpJUlEuTDIuMQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L0lTTC9JU0xfQURNSU4xX0xFWC50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvSVNML0lTTF9BRE1JTjFfTEVYLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ODhmYjIxCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L0lTTC9JU0xfQURNSU4xX0xFWC50eHQKQEAgLTAsMCArMSwxMCBAQAorMTpJUy03OklTOkFVU1RVUkxBTkQKKzI6SVMtOklTOkhPRlVPQk9SR0FSU1ZBT0kgVVRBTiBSRVlLSkFWSUtVUgorMzpJUy1JOklTOklDRUxBTkQKKzQ6SVMtNjpJUzpOT1JPVVJMQU5EIEVZU1RSQQorNTpJUy01OklTOk5PUk9VUkxBTkQgVkVTVFJBCis2OklTLTA6SVM6UkVZS0pBVklLCis3OklTLTg6SVM6U1VPVVJMQU5ECis4OklTLTI6SVM6U1VPVVJORVMKKzk6SVMtNDpJUzpWRVNURklST0lSCisxMDpJUy0zOklTOlZFU1RVUkxBTkQKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9JU0wvSVNMX0FETUlOMl9MRVgudHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L0lTTC9JU0xfQURNSU4yX0xFWC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTY5ZGUyOQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9JU0wvSVNMX0FETUlOMl9MRVgudHh0CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvSVRBL0lUQV9BRE1JTjFfTEVYLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9JVEEvSVRBX0FETUlOMV9MRVgudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFiMTk0ZGQKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvSVRBL0lUQV9BRE1JTjFfTEVYLnR4dApAQCAtMCwwICsxLDEyNCBAQAorMTpJVC1BQjpJVDpBQlJVWlpJCisyOklULUFHOklUOkFHUklHRU5UTworMzpJVC1BTDpJVDpBTEVTU0FORFJJQQorNDpJVC1BTjpJVDpBTkNPTkEKKzU6SVQtQU86SVQ6QU9TVEEKKzY6SVQtQVI6SVQ6QVJFWlpPCis3OklULUFQOklUOkFTQ09MSSBQSUNFTk8KKzg6SVQtQVQ6SVQ6QVNUSQorOTpJVC1BVjpJVDpBVkVMTElOTworMTA6SVQtQkE6SVQ6QkFSSQorMTE6SVQtQkM6SVQ6QkFTSUxJQ0FUQQorMTI6SVQtQkw6SVQ6QkVMTFVOTworMTM6SVQtQk46SVQ6QkVORVZFTlRPCisxNDpJVC1CRzpJVDpCRVJHQU1PCisxNTpJVC1CSTpJVDpCSUVMTEEKKzE2OklULUJPOklUOkJPTE9HTkEKKzE3OklULUJaOklUOkJPTFpBTk8KKzE4OklULUJTOklUOkJSRVNDSUEKKzE5OklULUJSOklUOkJSSU5ESVNJCisyMDpJVC1DQTpJVDpDQUdMSUFSSQorMjE6SVQtQ0k6SVQ6Q0FMQUJSSUEKKzIyOklULUNMOklUOkNBTFRBTklTU0VUVEEKKzIzOklULUNNOklUOkNBTVBBTklBCisyNDpJVC1DQjpJVDpDQU1QT0JBU1NPCisyNTpJVC1DRTpJVDpDQVNFUlRBCisyNjpJVC1DVDpJVDpDQVRBTklBCisyNzpJVC1DWjpJVDpDQVRBTlpBUk8KKzI4OklULUNIOklUOkNISUVUSQorMjk6SVQtQ086SVQ6Q09NTworMzA6SVQtQ1M6SVQ6Q09TRU5aQQorMzE6SVQtQ1I6SVQ6Q1JFTU9OQQorMzI6SVQtS1I6SVQ6Q1JPVE9ORQorMzM6SVQtQ046SVQ6Q1VORU8KKzM0OklULUVSOklUOkVNSUxJQSBST01BR05BCiszNTpJVC1FTjpJVDpFTk5BCiszNjpJVC1GRTpJVDpGRVJSQVJBCiszNzpJVC1GSTpJVDpGSVJFTlpFCiszODpJVC1GRzpJVDpGT0dHSUEKKzM5OklULUZPOklUOkZPUkzMCis0MDpJVC1HSTpJVDpGUklVTEkgVkVORVpJQQorNDE6SVQtRlY6SVQ6RlJJVUxJIFZFTkVaSUEgR0lVTElBCis0MjpJVC1GUjpJVDpGUk9TSU5PTkUKKzQzOklULUdFOklUOkdFTk9WQQorNDQ6SVQtR086SVQ6R09SSVpJQQorNDU6SVQtR1I6SVQ6R1JPU1NFVE8KKzQ2OklULUlNOklUOklNUEVSSUEKKzQ3OklULUlTOklUOklTRVJOSUEKKzQ4OklULVNQOklUOkxBIFNQRVpJQQorNDk6SVQtQVE6SVQ6TEFRVUlMQQorNTA6SVQtTFQ6SVQ6TEFUSU5BCis1MTpJVC1MQTpJVDpMQVpJTworNTI6SVQtTEU6SVQ6TEVDQ0UKKzUzOklULUxDOklUOkxFQ0NPCis1NDpJVC1MRzpJVDpMSUdVUklBCis1NTpJVC1MSTpJVDpMSVZPUk5PCis1NjpJVC1MTzpJVDpMT0RJCis1NzpJVC1MQjpJVDpMT01CQVJESUEKKzU4OklULUxVOklUOkxVQ0NBCis1OTpJVC1NQzpJVDpNQUNFUkFUQQorNjA6SVQtTU46SVQ6TUFOVE9WQQorNjE6SVQtTUE6SVQ6TUFSQ0hFCis2MjpJVC1NUzpJVDpNQVNTQSBDQVJSQVJBCis2MzpJVC1NVDpJVDpNQVRFUkEKKzY0OklULU1FOklUOk1FU1NJTkEKKzY1OklULU1JOklUOk1JTEFOTworNjY6SVQtTU86SVQ6TU9ERU5BCis2NzpJVC1NTDpJVDpNT0xJU0UKKzY4OklULU5BOklUOk5BUE9MSQorNjk6SVQtTk86SVQ6Tk9WQVJBCis3MDpJVC1OVTpJVDpOVU9STworNzE6SVQtT1I6SVQ6T1JJU1RBTk8KKzcyOklULVBEOklUOlBBRE9WQQorNzM6SVQtUEE6SVQ6UEFMRVJNTworNzQ6SVQtUFI6SVQ6UEFSTUEKKzc1OklULVBWOklUOlBBVklBCis3NjpJVC1QRzpJVDpQRVJVR0lBCis3NzpJVC1QUzpJVDpQRVNBUk8gRSBVUkJJTk8KKzc4OklULVBFOklUOlBFU0NBUkEKKzc5OklULVBDOklUOlBJQUNFTlpBCis4MDpJVC1QTTpJVDpQSUVNT05URQorODE6SVQtUEk6SVQ6UElTQQorODI6SVQtUFQ6SVQ6UElTVE9JQQorODM6SVQtUE46SVQ6UE9SREVOT05FCis4NDpJVC1QWjpJVDpQT1RFTlpBCis4NTpJVC1QTzpJVDpQUkFUTworODY6SVQtUFU6SVQ6UFVHTElBCis4NzpJVC1SRzpJVDpSQUdVU0EKKzg4OklULVJBOklUOlJBVkVOTkEKKzg5OklULVJDOklUOlJFR0dJTyBDQUxBQlJJQQorOTA6SVQtUkU6SVQ6UkVHR0lPIEVNSUxJQQorOTE6SVQtUkk6SVQ6UklFVEkKKzkyOklULVJOOklUOlJJTUlOSQorOTM6SVQtUk06SVQ6Uk9NQQorOTQ6SVQtUk86SVQ6Uk9WSUdPCis5NTpJVC1TQTpJVDpTQUxFUk5PCis5NjpJVC1TRDpJVDpTQVJERUdOQQorOTc6SVQtU1M6SVQ6U0FTU0FSSQorOTg6SVQtU1Y6SVQ6U0FWT05BCis5OTpJVC1TQzpJVDpTSUNJTElBCisxMDA6SVQtU0k6SVQ6U0lFTkEKKzEwMTpJVC1TUjpJVDpTSVJBQ1VTQQorMTAyOklULVNPOklUOlNPTkRSSU8KKzEwMzpJVC1UQTpJVDpUQVJBTlRPCisxMDQ6SVQtVEU6SVQ6VEVSQU1PCisxMDU6SVQtVFI6SVQ6VEVSTkkKKzEwNjpJVC1UTzpJVDpUT1JJTk8KKzEwNzpJVC1UQzpJVDpUT1NDQU5BCisxMDg6SVQtVFA6SVQ6VFJBUEFOSQorMTA5OklULUFEOklUOlRSRU5USU5PIEFMVE8gQURJR0UKKzExMDpJVC1UTjpJVDpUUkVOVE8KKzExMTpJVC1UVjpJVDpUUkVWSVNPCisxMTI6SVQtVFM6SVQ6VFJJRVNURQorMTEzOklULVVEOklUOlVESU5FCisxMTQ6SVQtVU06SVQ6VU1CUklBCisxMTU6SVQtQVM6SVQ6VkFMTEUgRCdBT1NUQQorMTE2OklULVZBOklUOlZBUkVTRQorMTE3OklULVZOOklUOlZFTkVUTworMTE4OklULVZFOklUOlZFTkVaSUEKKzExOTpJVC1WQjpJVDpWRVJCQU5PIENVU0lPIE9TU09MQQorMTIwOklULVZDOklUOlZFUkNFTExJCisxMjE6SVQtVlI6SVQ6VkVST05BCisxMjI6SVQtVlY6SVQ6VklCTyBWQUxFTlRJQQorMTIzOklULVZJOklUOlZJQ0VOWkEKKzEyNDpJVC1WVDpJVDpWSVRFUkJPCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvSVRBL0lUQV9BRE1JTjJfTEVYLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9JVEEvSVRBX0FETUlOMl9MRVgudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2OWRlMjkKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvSVRBL0lUQV9BRE1JTjJfTEVYLnR4dApkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L0pPUi9KT1JfQURNSU4xX0xFWC50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvSk9SL0pPUl9BRE1JTjFfTEVYLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNDcxMjFkCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L0pPUi9KT1JfQURNSU4xX0xFWC50eHQKQEAgLTAsMCArMSwxMiBAQAorMTpKTy1BUTpKTzpBTCBRQUJBCisyOkpPLUFNOkpPOkFNTUFOCiszOkpPLUlSOkpPOklSQklECis0OkpPLUpBOkpPOkpBUkFTSAorNTpKTy1BSjpKTzpKTE4KKzY6Sk8tS0E6Sk86S0FSQUsKKzc6Sk8tTU46Sk86TUEgQU4KKzg6Sk8tTUE6Sk86TUFGUkFRCis5OkpPLU1EOkpPOk1EQUJBCisxMDpKTy1CQTpKTzpTQUxUIChCQUxRQSkKKzExOkpPLUFUOkpPOlRBRklMQQorMTI6Sk8tQVo6Sk86WkFSUUEKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9KT1IvSk9SX0FETUlOMl9MRVgudHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L0pPUi9KT1JfQURNSU4yX0xFWC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODc1N2MyNAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9KT1IvSk9SX0FETUlOMl9MRVgudHh0CkBAIC0wLDAgKzEsOCBAQAorMTpKTzpKT1I6Sk9SREFOOlphcnFhOkpPUi5MMi4yCisxOkpPOkpPUjpKT1JEQU46U2FsdCAoQmFscWEpOkpPUi5MMi40CisxOkpPOkpPUjpKT1JEQU46QW1tYW46Sk9SLkwyLjEKKzE6Sk86Sk9SOkpPUkRBTjpLYXJhazpKT1IuTDIuOAorMTpKTzpKT1I6Sk9SREFOOk1hZnJhcTpKT1IuTDIuMworMTpKTzpKT1I6Sk9SREFOOk1hLWFuOkpPUi5MMi42CisxOkpPOkpPUjpKT1JEQU46SXJiaWQ6Sk9SLkwyLjcKKzE6Sk86Sk9SOkpPUkRBTjpUYWZpbGE6Sk9SLkwyLjUKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9KUE4vSlBOX0FETUlOMV9MRVgudHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L0pQTi9KUE5fQURNSU4xX0xFWC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjcyZWJlYwotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9KUE4vSlBOX0FETUlOMV9MRVgudHh0CkBAIC0wLDAgKzEsNTYgQEAKKzE6SlAtMjM6SlA6QUlUSSBbQUlDSEldCisyOkpQLTA1OkpQOkFLSVRBCiszOkpQLTAyOkpQOkFPTU9SSQorNDpKUC1DSEI6SlA6Q0hVQlUKKzU6SlAtQ0hHOkpQOkNIVUdPS1UKKzY6SlAtMzg6SlA6RUhJTUUKKzc6SlAtMjpKUDpHSUhVIFtHSUZVXQorODpKUC01MTpKUDpHVU5NQQorOTpKUC0zNDpKUDpISVJPU0lNQSBbSElST1NISU1BXQorMTA6SlAtMDpKUDpIT0tLQUlETyBbSE9LS0FJRE9dCisxMTpKUC1IUkk6SlA6SE9LVVJJS1UKKzEyOkpQLTg6SlA6SFVLVUkgW0ZVS1VJXQorMTM6SlAtNDA6SlA6SFVLVU9LQSBbRlVLVU9LQV0KKzE0OkpQLTA3OkpQOkhVS1VTSU1BIFtGVUtVU0hJTUFdCisxNTpKUC0yODpKUDpIWU9HTyBbSFlPR09dCisxNjpKUC0wODpKUDpJQkFSQUtJCisxNzpKUC03OkpQOklTSUtBV0EgW0lTSElLQVdBXQorMTg6SlAtNDQ6SlA6SVRBIFtPSVRBXQorMTk6SlAtMDM6SlA6SVdBVEUKKzIwOkpQLTM3OkpQOktBR0FXQQorMjE6SlAtNDY6SlA6S0FHT1NJTUEgW0tBR09TSElNQV0KKzIyOkpQLTQ6SlA6S0FOQUdBV0EKKzIzOkpQLUtOVDpKUDpLQU5UTworMjQ6SlAtS0lOOkpQOktJTktJCisyNTpKUC0zOTpKUDpLT1RJIFtLT0NISV0KKzI2OkpQLTQzOkpQOktVTUFNT1RPCisyNzpKUC0yNjpKUDpLWU9UTyBbS1lPVE9dCisyODpKUC1LWVU6SlA6S1lVU0hVCisyOTpKUC0yNDpKUDpNSUUKKzMwOkpQLTA0OkpQOk1JWUFHSQorMzE6SlAtNDU6SlA6TUlZQVpBS0kKKzMyOkpQLTIwOkpQOk5BR0FOTworMzM6SlAtNDI6SlA6TkFHQVNBS0kKKzM0OkpQLTI5OkpQOk5BUkEKKzM1OkpQLTU6SlA6TklJR0FUQQorMzY6SlAtMzM6SlA6T0tBWUFNQQorMzc6SlAtNDc6SlA6T0tJTkFXQQorMzg6SlAtUllVOkpQOlJZVUtJVSBJU0xBTkRTCiszOTpKUC01MDpKUDpTQUlUQU1BCis0MDpKUC0yNzpKUDpTQUtBIFtPU0FLQV0KKzQxOkpQLVNLTzpKUDpTSElLT0tVCis0MjpKUC0yNTpKUDpTSUdBIFtTSElHQV0KKzQzOkpQLTMyOkpQOlNJTUFORSBbU0hJTUFORV0KKzQ0OkpQLTIyOkpQOlNJWlVPS0EgW1NISVpVT0tBXQorNDU6SlAtNTI6SlA6VElCQSBbQ0hJQkFdCis0NjpKUC1UT0g6SlA6VE9IT0tVCis0NzpKUC1UQUk6SlA6VE9LQUkKKzQ4OkpQLTM2OkpQOlRPS1VTSU1BIFtUT0tVU0hJTUFdCis0OTpKUC01MzpKUDpUT0tZTyBbVE9LWU9dCis1MDpKUC0wOTpKUDpUT1RJR0kgW1RPQ0hJR0ldCis1MTpKUC0zOkpQOlRPVFRPUkkKKzUyOkpQLTY6SlA6VE9ZQU1BCis1MzpKUC0zMDpKUDpXQUtBWUFNQQorNTQ6SlAtMDY6SlA6WUFNQUdBVEEKKzU1OkpQLTM1OkpQOllBTUFHVVRJIFtZQU1BR1VDSEldCis1NjpKUC05OkpQOllBTUFOQVNJIFtZQU1BTkFTSEldCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvSlBOL0pQTl9BRE1JTjJfTEVYLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9KUE4vSlBOX0FETUlOMl9MRVgudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE1MTFjMjYKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvSlBOL0pQTl9BRE1JTjJfTEVYLnR4dApAQCAtMCwwICsxLDQ3IEBACisxOkpQOkpQTjpKQVBBTjpIb2t1cmlrdTpGdWt1aQorMjpKUDpKUE46SkFQQU46SG9rdXJpa3U6SXNoaWthd2EKKzM6SlA6SlBOOkpBUEFOOkhva3VyaWt1Ok5paWdhdGEKKzQ6SlA6SlBOOkpBUEFOOkhva3VyaWt1OlRveWFtYQorMTpKUDpKUE46SkFQQU46S2lua2k6SHlvZ28KKzI6SlA6SlBOOkpBUEFOOktpbmtpOkt5b3RvCiszOkpQOkpQTjpKQVBBTjpLaW5raTpOYXJhCis0OkpQOkpQTjpKQVBBTjpLaW5raTpPc2FrYQorNTpKUDpKUE46SkFQQU46S2lua2k6U2hpZ2EKKzY6SlA6SlBOOkpBUEFOOktpbmtpOldha2F5YW1hCisxOkpQOkpQTjpKQVBBTjpDaHVnb2t1Okhpcm9zaGltYQorMjpKUDpKUE46SkFQQU46Q2h1Z29rdTpPa2FqYW1hCiszOkpQOkpQTjpKQVBBTjpDaHVnb2t1OlNoaW1hbmUKKzQ6SlA6SlBOOkpBUEFOOkNodWdva3U6VG90dG9yaQorNTpKUDpKUE46SkFQQU46Q2h1Z29rdTpZYW1hZ3VjaGkKKzE6SlA6SlBOOkpBUEFOOkt5dXNodTpGdWt1b2thCisyOkpQOkpQTjpKQVBBTjpLeXVzaHU6S2Fnb3NoaW1hCiszOkpQOkpQTjpKQVBBTjpLeXVzaHU6S3VtYW1vdG8KKzQ6SlA6SlBOOkpBUEFOOkt5dXNodTpNaXlhemFraQorNTpKUDpKUE46SkFQQU46S3l1c2h1Ok5hZ2FzYWtpCis2OkpQOkpQTjpKQVBBTjpLeXVzaHU6T2l0YQorNzpKUDpKUE46SkFQQU46S3l1c2h1OlNhZ2EKKzE6SlA6SlBOOkpBUEFOOkNodWJ1OkdpZnUKKzI6SlA6SlBOOkpBUEFOOkNodWJ1Ok5hZ2FubworMzpKUDpKUE46SkFQQU46Q2h1YnU6WWFtYW5hc2hpCisxOkpQOkpQTjpKQVBBTjpSeXVraXUtSXNsYW5kczpPa2luYXdhCisxOkpQOkpQTjpKQVBBTjpUb2thaTpBaWNoaQorMjpKUDpKUE46SkFQQU46VG9rYWk6TWllCiszOkpQOkpQTjpKQVBBTjpUb2thaTpTaGl6dW9rYQorMTpKUDpKUE46SkFQQU46VG9ob2t1OkFraXRhCisyOkpQOkpQTjpKQVBBTjpUb2hva3U6QW9tb3JpCiszOkpQOkpQTjpKQVBBTjpUb2hva3U6RnVrdXNoaW1hCis0OkpQOkpQTjpKQVBBTjpUb2hva3U6SXdhdGUKKzU6SlA6SlBOOkpBUEFOOlRvaG9rdTpNaXlhZ2kKKzY6SlA6SlBOOkpBUEFOOlRvaG9rdTpZYW1hZ2F0YQorMTpKUDpKUE46SkFQQU46SG9ra2FpZG86SG9ra2FpZG8KKzE6SlA6SlBOOkpBUEFOOkthbnRvOkd1bW1hCisyOkpQOkpQTjpKQVBBTjpLYW50bzpJYmFyYWtpCiszOkpQOkpQTjpKQVBBTjpLYW50bzpLYW5hZ2F3YQorNDpKUDpKUE46SkFQQU46S2FudG86U2FpdGFtYQorNTpKUDpKUE46SkFQQU46S2FudG86VG9jaGlnaQorNjpKUDpKUE46SkFQQU46S2FudG86VG9reW8KKzc6SlA6SlBOOkpBUEFOOkthbnRvOlRzaGliYQorMTpKUDpKUE46SkFQQU46U2hpa29rdTpFaGltZQorMjpKUDpKUE46SkFQQU46U2hpa29rdTpLYWdhd2EKKzM6SlA6SlBOOkpBUEFOOlNoaWtva3U6S29jaGkKKzQ6SlA6SlBOOkpBUEFOOlNoaWtva3U6VG9rdXNoaW1hCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvS0FaL0tBWl9BRE1JTjFfTEVYLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9LQVovS0FaX0FETUlOMV9MRVgudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUwOGI0ZjAKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvS0FaL0tBWl9BRE1JTjFfTEVYLnR4dApAQCAtMCwwICsxLDI5IEBACisxOktaLUFLVDpLWjpBS1RZVUJJTlNLCisyOktaLUFMTTpLWjpBTE1BIEFUQQorMzpLWi1BTEE6S1o6QUxNQVRZCis0OktaLUFLTTpLWjpBUU1PTEEgT0JMWVNZCis1OktaLUFSUzpLWjpBUkFMIFNFQQorNjpLWi1BU1Q6S1o6QVNUQU5BCis3OktaLUFUWTpLWjpBVFlSQVUgT0JMWVNZCis4OktaLVpBUDpLWjpCQVRZUyBRQVpBUVNUQU4gT0JMWVNZCis5OktaLUNISTpLWjpDSElNS0VOVAorMTA6S1otRFpBOktaOkRaSEFNQlVMCisxMTpLWi1EWkU6S1o6RFpIRVpLQVpHQU4KKzEyOktaLUVBSzpLWjpFQVNUIEtBWkFLSFNUQU4KKzEzOktaLUdVUjpLWjpHVVJZRVYKKzE0OktaLUtBUjpLWjpLQVJBR0FOREEKKzE1OktaLUtPQzpLWjpLT0NIRVRBVgorMTY6S1otS1VTOktaOktVU1RBTkFZCisxNzpLWi1LWk86S1o6S1pZTCBPUkRBCisxODpLWi1NQU46S1o6TUFOR0dIWVNUQVUgT0JMWVNZCisxOTpLWi1OT0s6S1o6Tk9SVEggS0FaQUtIU1RBTgorMjA6S1otWVVaOktaOk9OR1TcU1RJSyBRQVpBUVNUQU4gT0JMWVNZCisyMTpLWi1QQVY6S1o6UEFWTE9EQVIKKzIyOktaLUtaWTpLWjpRWVpZTE9SREEgT0JMWVNZCisyMzpLWi1TRU06S1o6U0VNSVBBTEFUSU5TSworMjQ6S1otVk9TOktaOlNIWUdIWVMgUUFaQVFTVEFOIE9CTFlTWQorMjU6S1otU0VWOktaOlNPTFTcU1RJSyBRQVpBUVNUQU4gT0JMWVNZCisyNjpLWi1UQUs6S1o6VEFMRFkgS1VSR0FOCisyNzpLWi1UU0U6S1o6VFNFTElOT0dSQUQKKzI4OktaLVVSQTpLWjpVUkFMU0sKKzI5OktaLVpIQTpLWjpaSEFNQllMIE9CTFlTWQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L0tBWi9LQVpfQURNSU4yX0xFWC50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvS0FaL0tBWl9BRE1JTjJfTEVYLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MGZiNTAwCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L0tBWi9LQVpfQURNSU4yX0xFWC50eHQKQEAgLTAsMCArMSw1NCBAQAorMTpLWjpLQVo6S0FaQUtIU1RBTjpDaGlta2VudDpLQVouTDIuNworMTpLWjpLQVo6S0FaQUtIU1RBTjpUYWxkeSBLdXJnYW46S0FaLkwyLjU0CisxOktaOktBWjpLQVpBS0hTVEFOOlNlbWlwYWxhdGluc2s6S0FaLkwyLjUKKzE6S1o6S0FaOktBWkFLSFNUQU46VXJhbHNrOktBWi5MMi45CisxOktaOktBWjpLQVpBS0hTVEFOOkt6eWwtT3JkYTpLQVouTDIuNTEKKzE6S1o6S0FaOktBWkFLSFNUQU46Tm9ydGggS2F6YWtoc3RhbjpLQVouTDIuMworMTpLWjpLQVo6S0FaQUtIU1RBTjpBcmFsIFNlYTpLQVouTDIuMTEKKzI6S1o6S0FaOktBWkFLSFNUQU46QXJhbCBTZWE6S0FaLkwyLjEyCiszOktaOktBWjpLQVpBS0hTVEFOOkFyYWwgU2VhOktBWi5MMi4xMworNDpLWjpLQVo6S0FaQUtIU1RBTjpBcmFsIFNlYTpLQVouTDIuMTQKKzU6S1o6S0FaOktBWkFLSFNUQU46QXJhbCBTZWE6S0FaLkwyLjE1Cis2OktaOktBWjpLQVpBS0hTVEFOOkFyYWwgU2VhOktBWi5MMi4xNgorNzpLWjpLQVo6S0FaQUtIU1RBTjpBcmFsIFNlYTpLQVouTDIuMTcKKzg6S1o6S0FaOktBWkFLSFNUQU46QXJhbCBTZWE6S0FaLkwyLjE4Cis5OktaOktBWjpLQVpBS0hTVEFOOkFyYWwgU2VhOktBWi5MMi4xOQorMTA6S1o6S0FaOktBWkFLSFNUQU46QXJhbCBTZWE6S0FaLkwyLjIwCisxMTpLWjpLQVo6S0FaQUtIU1RBTjpBcmFsIFNlYTpLQVouTDIuMjEKKzEyOktaOktBWjpLQVpBS0hTVEFOOkFyYWwgU2VhOktBWi5MMi4yMgorMTM6S1o6S0FaOktBWkFLSFNUQU46QXJhbCBTZWE6S0FaLkwyLjIzCisxNDpLWjpLQVo6S0FaQUtIU1RBTjpBcmFsIFNlYTpLQVouTDIuMjQKKzE1OktaOktBWjpLQVpBS0hTVEFOOkFyYWwgU2VhOktBWi5MMi4yNQorMTY6S1o6S0FaOktBWkFLSFNUQU46QXJhbCBTZWE6S0FaLkwyLjI2CisxNzpLWjpLQVo6S0FaQUtIU1RBTjpBcmFsIFNlYTpLQVouTDIuMjcKKzE4OktaOktBWjpLQVpBS0hTVEFOOkFyYWwgU2VhOktBWi5MMi4yOAorMTk6S1o6S0FaOktBWkFLSFNUQU46QXJhbCBTZWE6S0FaLkwyLjI5CisyMDpLWjpLQVo6S0FaQUtIU1RBTjpBcmFsIFNlYTpLQVouTDIuMzAKKzIxOktaOktBWjpLQVpBS0hTVEFOOkFyYWwgU2VhOktBWi5MMi4zMQorMjI6S1o6S0FaOktBWkFLSFNUQU46QXJhbCBTZWE6S0FaLkwyLjMyCisyMzpLWjpLQVo6S0FaQUtIU1RBTjpBcmFsIFNlYTpLQVouTDIuMzMKKzI0OktaOktBWjpLQVpBS0hTVEFOOkFyYWwgU2VhOktBWi5MMi4zNAorMjU6S1o6S0FaOktBWkFLSFNUQU46QXJhbCBTZWE6S0FaLkwyLjM1CisyNjpLWjpLQVo6S0FaQUtIU1RBTjpBcmFsIFNlYTpLQVouTDIuMzYKKzI3OktaOktBWjpLQVpBS0hTVEFOOkFyYWwgU2VhOktBWi5MMi4zNworMjg6S1o6S0FaOktBWkFLSFNUQU46QXJhbCBTZWE6S0FaLkwyLjM4CisyOTpLWjpLQVo6S0FaQUtIU1RBTjpBcmFsIFNlYTpLQVouTDIuMzkKKzMwOktaOktBWjpLQVpBS0hTVEFOOkFyYWwgU2VhOktBWi5MMi40MAorMzE6S1o6S0FaOktBWkFLSFNUQU46QXJhbCBTZWE6S0FaLkwyLjQxCiszMjpLWjpLQVo6S0FaQUtIU1RBTjpBcmFsIFNlYTpLQVouTDIuNDIKKzMzOktaOktBWjpLQVpBS0hTVEFOOkFyYWwgU2VhOktBWi5MMi40MworMzQ6S1o6S0FaOktBWkFLSFNUQU46QXJhbCBTZWE6S0FaLkwyLjQ0CiszNTpLWjpLQVo6S0FaQUtIU1RBTjpBcmFsIFNlYTpLQVouTDIuNDUKKzM2OktaOktBWjpLQVpBS0hTVEFOOkFyYWwgU2VhOktBWi5MMi40NgorMzc6S1o6S0FaOktBWkFLSFNUQU46QXJhbCBTZWE6S0FaLkwyLjQ3CisxOktaOktBWjpLQVpBS0hTVEFOOktvY2hldGF2OktBWi5MMi4xCisxOktaOktBWjpLQVpBS0hTVEFOOlRzZWxpbm9ncmFkOktBWi5MMi40OAorMTpLWjpLQVo6S0FaQUtIU1RBTjpBa3R5dWJpbnNrOktBWi5MMi42CisxOktaOktBWjpLQVpBS0hTVEFOOkVhc3QgS2F6YWtoc3RhbjpLQVouTDIuMTAKKzE6S1o6S0FaOktBWkFLSFNUQU46UGF2bG9kYXI6S0FaLkwyLjQKKzE6S1o6S0FaOktBWkFLSFNUQU46R3VyeWV2OktBWi5MMi40OQorMTpLWjpLQVo6S0FaQUtIU1RBTjpLYXJhZ2FuZGE6S0FaLkwyLjIKKzE6S1o6S0FaOktBWkFLSFNUQU46RHpoYW1idWw6S0FaLkwyLjUyCisxOktaOktBWjpLQVpBS0hTVEFOOkFsbWEtQXRhOktBWi5MMi41MAorMTpLWjpLQVo6S0FaQUtIU1RBTjpEemhlemthemdhbjpLQVouTDIuNTMKKzE6S1o6S0FaOktBWkFLSFNUQU46S3VzdGFuYXk6S0FaLkwyLjgKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9LRU4vS0VOX0FETUlOMV9MRVgudHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L0tFTi9LRU5fQURNSU4xX0xFWC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTMzYzc5NAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9LRU4vS0VOX0FETUlOMV9MRVgudHh0CkBAIC0wLDAgKzEsOCBAQAorMTpLRS0yMDA6S0U6Q0VOVFJBTCBbQ0VOVFJBTDJdCisyOktFLTMwMDpLRTpDT0FTVAorMzpLRS00MDA6S0U6RUFTVEVSTgorNDpLRS0wOktFOk5BSVJPQkkgW05BSVJPQkkgTVVOSUNJUEFMSVRZXQorNTpLRS01MDA6S0U6Tk9SVEggRUFTVEVSTiAgW04uIEVBU1RFUk5dCis2OktFLTYwMDpLRTpOWUFOWkEKKzc6S0UtNzAwOktFOlJJRlQgVkFMTEVZCis4OktFLTkwMDpLRTpXRVNURVJOCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvS0VOL0tFTl9BRE1JTjJfTEVYLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9LRU4vS0VOX0FETUlOMl9MRVgudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQwNDlhOGYKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvS0VOL0tFTl9BRE1JTjJfTEVYLnR4dApAQCAtMCwwICsxLDQ3IEBACisxOktFOktFTjpLRU5ZQTpOQUlST0JJOk5BSVJPQkkKKzE6S0U6S0VOOktFTllBOk5ZQU5aQTpIT01BX0JBWQorMjpLRTpLRU46S0VOWUE6TllBTlpBOktJU0lJCiszOktFOktFTjpLRU5ZQTpOWUFOWkE6S0lTVU1VCis0OktFOktFTjpLRU5ZQTpOWUFOWkE6TUlHT1JJCis1OktFOktFTjpLRU5ZQTpOWUFOWkE6TllBTUlSQQorNjpLRTpLRU46S0VOWUE6TllBTlpBOlNJQVlBCisxOktFOktFTjpLRU5ZQTpOLiBFQVNURVJOOkdBUklTU0EKKzI6S0U6S0VOOktFTllBOk4uIEVBU1RFUk46TUFOREVSQQorMzpLRTpLRU46S0VOWUE6Ti4gRUFTVEVSTjpXQUpJUgorMTpLRTpLRU46S0VOWUE6Q0VOVFJBTDpLSUFNQlUKKzI6S0U6S0VOOktFTllBOkNFTlRSQUw6S0lSSU5ZQUdBCiszOktFOktFTjpLRU5ZQTpDRU5UUkFMOk1VUkFOR0EKKzQ6S0U6S0VOOktFTllBOkNFTlRSQUw6TllBTkRBUlVBCis1OktFOktFTjpLRU5ZQTpDRU5UUkFMOk5ZRVJJCisxOktFOktFTjpLRU5ZQTpXRVNURVJOOkJVTkdPTUEKKzI6S0U6S0VOOktFTllBOldFU1RFUk46QlVTSUEKKzM6S0U6S0VOOktFTllBOldFU1RFUk46S0FLQU1FR0EKKzQ6S0U6S0VOOktFTllBOldFU1RFUk46VklISUdBCisxOktFOktFTjpLRU5ZQTpFQVNURVJOOkVNQlUKKzI6S0U6S0VOOktFTllBOkVBU1RFUk46SVNJT0xPCiszOktFOktFTjpLRU5ZQTpFQVNURVJOOktJVFVJCis0OktFOktFTjpLRU5ZQTpFQVNURVJOOk1BQ0hBS09TCis1OktFOktFTjpLRU5ZQTpFQVNURVJOOk1BS1VFTkkKKzY6S0U6S0VOOktFTllBOkVBU1RFUk46TUFSU0FCSVQKKzc6S0U6S0VOOktFTllBOkVBU1RFUk46TUVSVQorODpLRTpLRU46S0VOWUE6RUFTVEVSTjpOSVRISQorMTpLRTpLRU46S0VOWUE6Q09BU1Q6S0lMSUZJCisyOktFOktFTjpLRU5ZQTpDT0FTVDpLV0FMRQorMzpLRTpLRU46S0VOWUE6Q09BU1Q6TEFNVQorNDpLRTpLRU46S0VOWUE6Q09BU1Q6TU9NQkFTQQorNTpLRTpLRU46S0VOWUE6Q09BU1Q6VEFJVEEgVEFWRVRBCis2OktFOktFTjpLRU5ZQTpDT0FTVDpUQU5BIFJJVkVSCisxOktFOktFTjpLRU5ZQTpSSUZUIFZBTExFWTpCQVJJTkdPCisyOktFOktFTjpLRU5ZQTpSSUZUIFZBTExFWTpCT01FVAorMzpLRTpLRU46S0VOWUE6UklGVCBWQUxMRVk6RS4gTUFSQUtXRVQKKzQ6S0U6S0VOOktFTllBOlJJRlQgVkFMTEVZOktBSklBRE8KKzU6S0U6S0VOOktFTllBOlJJRlQgVkFMTEVZOktFUklDSE8KKzY6S0U6S0VOOktFTllBOlJJRlQgVkFMTEVZOkxBSUtJUElBCis3OktFOktFTjpLRU5ZQTpSSUZUIFZBTExFWTpOQUtVUlUKKzg6S0U6S0VOOktFTllBOlJJRlQgVkFMTEVZOk5BTkRJCis5OktFOktFTjpLRU5ZQTpSSUZUIFZBTExFWTpOQVJPSworMTA6S0U6S0VOOktFTllBOlJJRlQgVkFMTEVZOlNBTUJVUlUKKzExOktFOktFTjpLRU5ZQTpSSUZUIFZBTExFWTpUUkFOUy1OWk9JQQorMTI6S0U6S0VOOktFTllBOlJJRlQgVkFMTEVZOlRVUktBTkEKKzEzOktFOktFTjpLRU5ZQTpSSUZUIFZBTExFWTpVQVNJTiBHSVNIVQorMTQ6S0U6S0VOOktFTllBOlJJRlQgVkFMTEVZOldFU1QgUE9LT1QKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9LR1ovS0daX0FETUlOMV9MRVgudHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L0tHWi9LR1pfQURNSU4xX0xFWC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGI2ZGRiZgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9LR1ovS0daX0FETUlOMV9MRVgudHh0CkBAIC0wLDAgKzEsMTAgQEAKKzE6S0ctQjpLRzpCQVRLRU4KKzI6S0ctR0I6S0c6QklTSEtFSworMzpLRy1DOktHOkNI3AorNDpLRy1JU0s6S0c6SVNTWUsgS1VMCis1OktHLUo6S0c6SkFMQUwgQUJBRAorNjpLRy1LSVQ6S0c6S0lSR0hJWklTVEFOIFRFUlJJVE9SSUVTCis3OktHLU46S0c6TkFSWU4KKzg6S0ctTzpLRzpPU0gKKzk6S0ctVDpLRzpUQUxBUworMTA6S0ctWTpLRzpZU1lLIEtMCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvS0daL0tHWl9BRE1JTjJfTEVYLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9LR1ovS0daX0FETUlOMl9MRVgudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU2YzVkNGUKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvS0daL0tHWl9BRE1JTjJfTEVYLnR4dApAQCAtMCwwICsxLDMgQEAKKzE6S0c6S0daOktZUkdZWlNUQU46S2lyZ2hpemlzdGFuIFRlcnJpdG9yaWVzOktHWi5MMi4zCisxOktHOktHWjpLWVJHWVpTVEFOOklzc3lrLUt1bDpLR1ouTDIuMgorMTpLRzpLR1o6S1lSR1laU1RBTjpPc2g6S0daLkwyLjEKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9LSE0vS0hNX0FETUlOMV9MRVgudHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L0tITS9LSE1fQURNSU4xX0xFWC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmNjNjRmYQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9LSE0vS0hNX0FETUlOMV9MRVgudHh0CkBAIC0wLDAgKzEsMzMgQEAKKzE6S0gtMjpLSDpCQUFUIERBTUJBTkcKKzI6S0gtMTA6S0g6QkFOVEVBWSBNRUFOIENIRVkgW0JBTlRFQVkgTUVBTkNIRVldCiszOktILUJFQTpLSDpCQU5URUFZIE1FQU5DSEVZCis0OktILUJURzpLSDpCQVRUQU1CQU5HCis1OktILTM6S0g6S0FNUE9ORyBDSEFBTQorNjpLSC1LUEM6S0g6S0FNUE9ORyBDSEFNCis3OktILTQ6S0g6S0FNUE9ORyBDSEhOQU5HCis4OktILUtNUzpLSDpLQU1QT05HIFNQRVUKKzk6S0gtNTpLSDpLQU1QT05HIFNQVUVVIFtLQU1QTkcgU1BFXQorMTA6S0gtS1RIOktIOktBTVBPTkcgVEhPTQorMTE6S0gtNjpLSDpLQU1QT05HIFRIVU0gW0tBTVBORyBUSFVNXQorMTI6S0gtNzpLSDpLQU1QT1QgW0tBTVBPVF0KKzEzOktILUtBTjpLSDpLQU5EQUwKKzE0OktILTk6S0g6S0FPSCBLT05HIFtLQU9IIEtOR10KKzE1OktILUtPSDpLSDpLT0ggS09ORworMTY6S0gtMDpLSDpLUkFDSEVIIFtLUkFDSEVIXQorMTc6S0gtS1JFOktIOktSQVRJRQorMTg6S0gtMjM6S0g6S1JPTkcgS0FFQgorMTk6S0gtODpLSDpLUk9ORyBQUkVBSCBTSUhBTk9VSworMjA6S0gtMjQ6S0g6TU9ORE9MIEtJUkkgW01PTkRMIEtJUkldCisyMTpLSC1NT0s6S0g6TU9ORFVMIEtJUkkKKzIyOktILTIyOktIOk9UREFSIE1FQU4gQ0hFWSBbVERBUiBNRUFOQ0hFWV0KKzIzOktILTIwOktIOlBITk9NIFBFTkgKKzI0OktILTIxOktIOlBSRUFIIFZJSEVBUgorMjU6S0gtUFZHOktIOlBSRVkgVkVORworMjY6S0gtUFVSOktIOlBVUlNBVAorMjc6S0gtUkFLOktIOlJBVEFOQSBLSVJJCisyODpLSC1TRVI6S0g6U0lFTSBSRUFQCisyOTpLSC1TVFI6S0g6U1RVTkcgVFJFTkcKKzMwOktILVNWWTpLSDpTVkFZIFJJRU5HCiszMTpLSC0yNTpLSDpUQUFLQUVWIFtUQUtFVl0KKzMyOktILVRLRTpLSDpUQUtFTworMzM6S0gtVE9MOktIOlRPTkxFIFNBUApkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L0tITS9LSE1fQURNSU4yX0xFWC50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvS0hNL0tITV9BRE1JTjJfTEVYLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYjcyYTYwCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L0tITS9LSE1fQURNSU4yX0xFWC50eHQKQEAgLTAsMCArMSwxNjUgQEAKKzE6S0g6S0hNOkNBTUJPRElBOk1vbmR1bCBLaXJpOktvaCBOaGVrCisyOktIOktITTpDQU1CT0RJQTpNb25kdWwgS2lyaTpPIFJlYW5nCiszOktIOktITTpDQU1CT0RJQTpNb25kdWwgS2lyaTpQaWNoIFJvZGEKKzE6S0g6S0hNOkNBTUJPRElBOkthbXBvdDpBbmdrb3IgQ2hleQorMjpLSDpLSE06Q0FNQk9ESUE6S2FtcG90OkJhbnRleSBNZWFzCiszOktIOktITTpDQU1CT0RJQTpLYW1wb3Q6Q2hob3VrCis0OktIOktITTpDQU1CT0RJQTpLYW1wb3Q6Q2h1bWtpcmkKKzU6S0g6S0hNOkNBTUJPRElBOkthbXBvdDpEYW5nIFR1bmcKKzY6S0g6S0hNOkNBTUJPRElBOkthbXBvdDpLYW1wb25nIFRyYWNoCis3OktIOktITTpDQU1CT0RJQTpLYW1wb3Q6S2FtcG90IChEQykKKzg6S0g6S0hNOkNBTUJPRElBOkthbXBvdDpLYW1wb3QgKFBUKQorMTpLSDpLSE06Q0FNQk9ESUE6S2FtcG9uZyBDaGhuYW5nOkJhcmlibworMjpLSDpLSE06Q0FNQk9ESUE6S2FtcG9uZyBDaGhuYW5nOkNodWwgS2lyaQorMzpLSDpLSE06Q0FNQk9ESUE6S2FtcG9uZyBDaGhuYW5nOkthbXBvbmcgQ2hobmFuZyAoUFQpCis0OktIOktITTpDQU1CT0RJQTpLYW1wb25nIENoaG5hbmc6S2FtcG9uZyBMZW5nCis1OktIOktITTpDQU1CT0RJQTpLYW1wb25nIENoaG5hbmc6S2FtcG9uZyBUcmFsYWNoCis2OktIOktITTpDQU1CT0RJQTpLYW1wb25nIENoaG5hbmc6Um9sZWFyIFBoaWVhcgorNzpLSDpLSE06Q0FNQk9ESUE6S2FtcG9uZyBDaGhuYW5nOlNhbWFraSBNZWFuY2hleQorODpLSDpLSE06Q0FNQk9ESUE6S2FtcG9uZyBDaGhuYW5nOlR1ayBQaG9zCisxOktIOktITTpDQU1CT0RJQTpCYW50ZWF5IE1lYW5jaGV5OkJhbnRlYXkgQW1waWwKKzI6S0g6S0hNOkNBTUJPRElBOkJhbnRlYXkgTWVhbmNoZXk6TW9uZ2tvbCBCb3JleQorMzpLSDpLSE06Q0FNQk9ESUE6QmFudGVheSBNZWFuY2hleTpQaG5vbSBTcm9rCis0OktIOktITTpDQU1CT0RJQTpCYW50ZWF5IE1lYW5jaGV5OlByZWFoIE5ldCBQcmVhaAorNTpLSDpLSE06Q0FNQk9ESUE6QmFudGVheSBNZWFuY2hleTpTZXJleSBTb3Bob3JuCis2OktIOktITTpDQU1CT0RJQTpCYW50ZWF5IE1lYW5jaGV5OlNpc29waG9uIChQVCkKKzc6S0g6S0hNOkNBTUJPRElBOkJhbnRlYXkgTWVhbmNoZXk6VGhtYXIgUHVvaworMTpLSDpLSE06Q0FNQk9ESUE6S2FuZGFsOkthbmRhbCBTdHVuZworMjpLSDpLSE06Q0FNQk9ESUE6S2FuZGFsOktlYW4gU3ZleQorMzpLSDpLSE06Q0FNQk9ESUE6S2FuZGFsOktoc2FjaCBLYW5kYWwKKzQ6S0g6S0hNOkNBTUJPRElBOkthbmRhbDpLb2ggVGhvbQorNTpLSDpLSE06Q0FNQk9ESUE6S2FuZGFsOkxldWsgRGVrCis2OktIOktITTpDQU1CT0RJQTpLYW5kYWw6THZlYSBFbQorNzpLSDpLSE06Q0FNQk9ESUE6S2FuZGFsOk11ayBLYW1wb3VsCis4OktIOktITTpDQU1CT0RJQTpLYW5kYWw6UGhub20gUGVuaCAoREMpCis5OktIOktITTpDQU1CT0RJQTpLYW5kYWw6UG9uaGVhIExldQorMTA6S0g6S0hNOkNBTUJPRElBOkthbmRhbDpTYWFuZworMTE6S0g6S0hNOkNBTUJPRElBOkthbmRhbDpUYWttYXUgKFBUKQorMTpLSDpLSE06Q0FNQk9ESUE6UHJlYWggVmloZWFyOkNoZXkgU2VuCisyOktIOktITTpDQU1CT0RJQTpQcmVhaCBWaWhlYXI6Q2hoZXAKKzM6S0g6S0hNOkNBTUJPRElBOlByZWFoIFZpaGVhcjpDaG9tIEtoc2FuCis0OktIOktITTpDQU1CT0RJQTpQcmVhaCBWaWhlYXI6S291bGVuCis1OktIOktITTpDQU1CT0RJQTpQcmVhaCBWaWhlYXI6Um92aWVuZworNjpLSDpLSE06Q0FNQk9ESUE6UHJlYWggVmloZWFyOlNhbmdrdW0gVGhtZXkKKzc6S0g6S0hNOkNBTUJPRElBOlByZWFoIFZpaGVhcjpUYmVuZyBNZWFuY2hleQorMTpLSDpLSE06Q0FNQk9ESUE6UGhub20gUGVuaDpEYW5na29yaworMjpLSDpLSE06Q0FNQk9ESUE6UGhub20gUGVuaDpNZWFuIENoZXkKKzM6S0g6S0hNOkNBTUJPRElBOlBobm9tIFBlbmg6UGhub20gUGVuaCAoUEMpCis0OktIOktITTpDQU1CT0RJQTpQaG5vbSBQZW5oOlJ1c3NleSBLZW8KKzE6S0g6S0hNOkNBTUJPRElBOkthbXBvbmcgU3BldTpCYXNldAorMjpLSDpLSE06Q0FNQk9ESUE6S2FtcG9uZyBTcGV1OkthbXBvbmcgU3BldQorMzpLSDpLSE06Q0FNQk9ESUE6S2FtcG9uZyBTcGV1OktvbmcgUGlzZXkKKzQ6S0g6S0hNOkNBTUJPRElBOkthbXBvbmcgU3BldTpPcmFsCis1OktIOktITTpDQU1CT0RJQTpLYW1wb25nIFNwZXU6T3Vkb25nCis2OktIOktITTpDQU1CT0RJQTpLYW1wb25nIFNwZXU6UGhub20gU3J1b2NoCis3OktIOktITTpDQU1CT0RJQTpLYW1wb25nIFNwZXU6U2Ftcm9uZyBUb25nCis4OktIOktITTpDQU1CT0RJQTpLYW1wb25nIFNwZXU6VGhwb25nCisxOktIOktITTpDQU1CT0RJQTpQcmV5IFZlbmc6QmFyIFBobm9tCisyOktIOktITTpDQU1CT0RJQTpQcmV5IFZlbmc6S2FtY2hheSBNZWFyCiszOktIOktITTpDQU1CT0RJQTpQcmV5IFZlbmc6S2FtcG9uZyBUcmFiZWsKKzQ6S0g6S0hNOkNBTUJPRElBOlByZXkgVmVuZzpLYW5jaCBDaHJlYWNoCis1OktIOktITTpDQU1CT0RJQTpQcmV5IFZlbmc6TWVzYW5nCis2OktIOktITTpDQU1CT0RJQTpQcmV5IFZlbmc6UGVhbSBDaG9yCis3OktIOktITTpDQU1CT0RJQTpQcmV5IFZlbmc6UGVhbSBSbworODpLSDpLSE06Q0FNQk9ESUE6UHJleSBWZW5nOlBlYXJlYW5nCis5OktIOktITTpDQU1CT0RJQTpQcmV5IFZlbmc6UGV5IFZlbmcgKERDKQorMTA6S0g6S0hNOkNBTUJPRElBOlByZXkgVmVuZzpQcmVhaCBTZGVjaAorMTE6S0g6S0hNOkNBTUJPRElBOlByZXkgVmVuZzpQcmV5IFZlbmcgKFBUKQorMTI6S0g6S0hNOkNBTUJPRElBOlByZXkgVmVuZzpTaXRob3IgS2FuZGFsCisxOktIOktITTpDQU1CT0RJQTpTdHVuZyBUcmVuZzpTZXNhbgorMjpLSDpLSE06Q0FNQk9ESUE6U3R1bmcgVHJlbmc6U2llbSBCb2sKKzM6S0g6S0hNOkNBTUJPRElBOlN0dW5nIFRyZW5nOlNpZW0gUGFuZworNDpLSDpLSE06Q0FNQk9ESUE6U3R1bmcgVHJlbmc6U3R1bmcgVHJlbmcgKFBUKQorNTpLSDpLSE06Q0FNQk9ESUE6U3R1bmcgVHJlbmc6VGhhbGEgQmFyaXdhdAorMTpLSDpLSE06Q0FNQk9ESUE6U2llbSBSZWFwOkFuZ2tvciBDaHVtCisyOktIOktITTpDQU1CT0RJQTpTaWVtIFJlYXA6QW5na29yIFRob20KKzM6S0g6S0hNOkNBTUJPRElBOlNpZW0gUmVhcDpCYW50ZXkgU3JleQorNDpLSDpLSE06Q0FNQk9ESUE6U2llbSBSZWFwOkNoaSBLcmVuZworNTpLSDpLSE06Q0FNQk9ESUE6U2llbSBSZWFwOkNob25nIEthbAorNjpLSDpLSE06Q0FNQk9ESUE6U2llbSBSZWFwOktyYWxhbmgKKzc6S0g6S0hNOkNBTUJPRElBOlNpZW0gUmVhcDpQb3VrCis4OktIOktITTpDQU1CT0RJQTpTaWVtIFJlYXA6U2Ftcm91bmcKKzk6S0g6S0hNOkNBTUJPRElBOlNpZW0gUmVhcDpTaWVtIFJlYXAgKERDKQorMTA6S0g6S0hNOkNBTUJPRElBOlNpZW0gUmVhcDpTaWVtIFJlYXAgKFBUKQorMTE6S0g6S0hNOkNBTUJPRElBOlNpZW0gUmVhcDpTb3RyIE5pa3VtCisxMjpLSDpLSE06Q0FNQk9ESUE6U2llbSBSZWFwOlNyZXkgU25vbQorMTM6S0g6S0hNOkNBTUJPRElBOlNpZW0gUmVhcDpTdmV5IExldQorMTQ6S0g6S0hNOkNBTUJPRElBOlNpZW0gUmVhcDpWYXJpbgorMTpLSDpLSE06Q0FNQk9ESUE6VG9ubGUgU2FwOk1pdHRhcGhlYXAKKzI6S0g6S0hNOkNBTUJPRElBOlRvbmxlIFNhcDpQcmV5IE5vdXAKKzM6S0g6S0hNOkNBTUJPRElBOlRvbmxlIFNhcDpTdHVuZyBIYXYKKzE6S0g6S0hNOkNBTUJPRElBOktvaCBLb25nOkJvdHVtIFNha29yCisyOktIOktITTpDQU1CT0RJQTpLb2ggS29uZzpLaXJpIFNha29yCiszOktIOktITTpDQU1CT0RJQTpLb2ggS29uZzpLb2ggS29uZyAoREMpCis0OktIOktITTpDQU1CT0RJQTpLb2ggS29uZzpLb2ggS29uZyAoUFQpCis1OktIOktITTpDQU1CT0RJQTpLb2ggS29uZzpNb25kdWwgU2VtYQorNjpLSDpLSE06Q0FNQk9ESUE6S29oIEtvbmc6U3JlIEFtYmVsCis3OktIOktITTpDQU1CT0RJQTpLb2ggS29uZzpUaG1hciBCYWluZworMTpLSDpLSE06Q0FNQk9ESUE6QmF0dGFtYmFuZzpCYW5vbgorMjpLSDpLSE06Q0FNQk9ESUE6QmF0dGFtYmFuZzpCYXR0YW1iYW5nIChQVCkKKzM6S0g6S0hNOkNBTUJPRElBOkJhdHRhbWJhbmc6QmF0dGFtYm9uZyAoREMpCis0OktIOktITTpDQU1CT0RJQTpCYXR0YW1iYW5nOkJhdmVsCis1OktIOktITTpDQU1CT0RJQTpCYXR0YW1iYW5nOkVrIFBobm9tCis2OktIOktITTpDQU1CT0RJQTpCYXR0YW1iYW5nOk1vbmcgUnVzc2V5Cis3OktIOktITTpDQU1CT0RJQTpCYXR0YW1iYW5nOlJhdHRhbmFrIE1vbmR1bAorODpLSDpLSE06Q0FNQk9ESUE6QmF0dGFtYmFuZzpTYW5na2UKKzE6S0g6S0hNOkNBTUJPRElBOlRha2VvOkFuZ2tvciBCb3JleQorMjpLSDpLSE06Q0FNQk9ESUE6VGFrZW86QmF0aQorMzpLSDpLSE06Q0FNQk9ESUE6VGFrZW86Qm9yZXkgQ2h1bGFzYXIKKzQ6S0g6S0hNOkNBTUJPRElBOlRha2VvOktpcmkgVm9uZworNTpLSDpLSE06Q0FNQk9ESUE6VGFrZW86S29oIEFuZGV0Cis2OktIOktITTpDQU1CT0RJQTpUYWtlbzpQcmV5IEthYmFzCis3OktIOktITTpDQU1CT0RJQTpUYWtlbzpTYW1yb25nCis4OktIOktITTpDQU1CT0RJQTpUYWtlbzpUYWtlbyAoUFQpCis5OktIOktITTpDQU1CT0RJQTpUYWtlbzpUcmFtIEthaworMTA6S0g6S0hNOkNBTUJPRElBOlRha2VvOlRyZWFuZworMTpLSDpLSE06Q0FNQk9ESUE6UHVyc2F0OkJha2FuCisyOktIOktITTpDQU1CT0RJQTpQdXJzYXQ6S2FuZGllbmcKKzM6S0g6S0hNOkNBTUJPRElBOlB1cnNhdDpLcmFrb3IKKzQ6S0g6S0hNOkNBTUJPRElBOlB1cnNhdDpLcmF2YW5oCis1OktIOktITTpDQU1CT0RJQTpQdXJzYXQ6UHVyc2F0IChQVCkKKzE6S0g6S0hNOkNBTUJPRElBOlJhdGFuYSBLaXJpOkFuZG9uZyBNZWFzCisyOktIOktITTpDQU1CT0RJQTpSYXRhbmEgS2lyaTpCYW5sdW5nIChQVCkKKzM6S0g6S0hNOkNBTUJPRElBOlJhdGFuYSBLaXJpOkJhciBLZW8KKzQ6S0g6S0hNOkNBTUJPRElBOlJhdGFuYSBLaXJpOktvbiBNdW0KKzU6S0g6S0hNOkNBTUJPRElBOlJhdGFuYSBLaXJpOkx1bSBQaGF0Cis2OktIOktITTpDQU1CT0RJQTpSYXRhbmEgS2lyaTpPIENodW0KKzc6S0g6S0hNOkNBTUJPRElBOlJhdGFuYSBLaXJpOk8gWWEgRGF2Cis4OktIOktITTpDQU1CT0RJQTpSYXRhbmEgS2lyaTpUYXZlbmcKKzk6S0g6S0hNOkNBTUJPRElBOlJhdGFuYSBLaXJpOlZlbiBTYWkKKzE6S0g6S0hNOkNBTUJPRElBOkthbXBvbmcgQ2hhbTpCYXRoZWF5CisyOktIOktITTpDQU1CT0RJQTpLYW1wb25nIENoYW06Q2hhbWthciBMZXUKKzM6S0g6S0hNOkNBTUJPRElBOkthbXBvbmcgQ2hhbTpDaGVuZyBQcmV5Cis0OktIOktITTpDQU1CT0RJQTpLYW1wb25nIENoYW06RGFtYmUKKzU6S0g6S0hNOkNBTUJPRElBOkthbXBvbmcgQ2hhbTpLYW1wb25nIENoYW0gKFBUKQorNjpLSDpLSE06Q0FNQk9ESUE6S2FtcG9uZyBDaGFtOkthbXBvbmcgU2llbQorNzpLSDpLSE06Q0FNQk9ESUE6S2FtcG9uZyBDaGFtOkthbmcgTWVhcworODpLSDpLSE06Q0FNQk9ESUE6S2FtcG9uZyBDaGFtOktvaCBTb3RpbgorOTpLSDpLSE06Q0FNQk9ESUE6S2FtcG9uZyBDaGFtOktyb2NoIENobWEKKzEwOktIOktITTpDQU1CT0RJQTpLYW1wb25nIENoYW06TWVtb3QKKzExOktIOktITTpDQU1CT0RJQTpLYW1wb25nIENoYW06TyBSZWFuZyBPdgorMTI6S0g6S0hNOkNBTUJPRElBOkthbXBvbmcgQ2hhbTpQb25oZWEgS3JlaworMTM6S0g6S0hNOkNBTUJPRElBOkthbXBvbmcgQ2hhbTpQcmV5IENoaG9yCisxNDpLSDpLSE06Q0FNQk9ESUE6S2FtcG9uZyBDaGFtOlNyZWkgU2FudGhvcgorMTU6S0g6S0hNOkNBTUJPRElBOkthbXBvbmcgQ2hhbTpTdHVuZyBUcmFuZworMTY6S0g6S0hNOkNBTUJPRElBOkthbXBvbmcgQ2hhbTpUYm9uZyBLaG11bQorMTpLSDpLSE06Q0FNQk9ESUE6S3JhdGllOkNobG9uZworMjpLSDpLSE06Q0FNQk9ESUE6S3JhdGllOktyYXRpZQorMzpLSDpLSE06Q0FNQk9ESUE6S3JhdGllOlByZWsgUHJhc2FwCis0OktIOktITTpDQU1CT0RJQTpLcmF0aWU6U2FtYm8KKzU6S0g6S0hNOkNBTUJPRElBOktyYXRpZTpTbm91bAorMTpLSDpLSE06Q0FNQk9ESUE6S2FtcG9uZyBUaG9tOkJhcmF5CisyOktIOktITTpDQU1CT0RJQTpLYW1wb25nIFRob206S2FtcG9uZyBTdmF5CiszOktIOktITTpDQU1CT0RJQTpLYW1wb25nIFRob206S2FtcG9uZyBUaG9tIChQVCkKKzQ6S0g6S0hNOkNBTUJPRElBOkthbXBvbmcgVGhvbTpQcmFzYXQgQmFsYW5nCis1OktIOktITTpDQU1CT0RJQTpLYW1wb25nIFRob206UHJhc2F0IFNhbWJvCis2OktIOktITTpDQU1CT0RJQTpLYW1wb25nIFRob206U2FuZGFuCis3OktIOktITTpDQU1CT0RJQTpLYW1wb25nIFRob206U2FudHVrCis4OktIOktITTpDQU1CT0RJQTpLYW1wb25nIFRob206U3R1bmcKKzE6S0g6S0hNOkNBTUJPRElBOlN2YXkgUmllbmc6Q2hhbiBUcmVhCisyOktIOktITTpDQU1CT0RJQTpTdmF5IFJpZW5nOkthbXBvbmcgUm8KKzM6S0g6S0hNOkNBTUJPRElBOlN2YXkgUmllbmc6UmFtZG91bAorNDpLSDpLSE06Q0FNQk9ESUE6U3ZheSBSaWVuZzpSb21lYXMgSGVrCis1OktIOktITTpDQU1CT0RJQTpTdmF5IFJpZW5nOlN2YXkgUmllbmcgKERDKQorNjpLSDpLSE06Q0FNQk9ESUE6U3ZheSBSaWVuZzpTdmF5IFJpZW5nIChQVCkKKzc6S0g6S0hNOkNBTUJPRElBOlN2YXkgUmllbmc6U3ZheSBUZWFwCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvS09SL0tPUl9BRE1JTjFfTEVYLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9LT1IvS09SX0FETUlOMV9MRVgudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE0Y2ZiOWIKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvS09SL0tPUl9BRE1JTjFfTEVYLnR4dApAQCAtMCwwICsxLDE2IEBACisxOktSLTQ5OktSOkNIRUpVIERPCisyOktSLTQ1OktSOkNIT0xMQUJVSyBETworMzpLUi00NjpLUjpDSE9MTEFOQU0gRE8KKzQ6S1ItNDM6S1I6Q0hVTkdDSE9OR0JVSyBETworNTpLUi00NDpLUjpDSFVOR0NIT05HTkFNIERPCis2OktSLTI4OktSOklOQ0hPTgorNzpLUi00MjpLUjpLQU5HIFdPTiBETworODpLUi0yOTpLUjpLV0FOR0pVCis5OktSLTQ6S1I6S1lPTkdHSSBETworMTA6S1ItNDc6S1I6S1lPTkdTQU5HQlVLIERPCisxMTpLUi00ODpLUjpLWU9OR1NBTkdOQU0gRE8KKzEyOktSLTI2OktSOlBVU0FOCisxMzpLUi0wOktSOlNFT1VMCisxNDpLUi0yNzpLUjpUQUVHVQorMTU6S1ItMzA6S1I6VEFFSk9OCisxNjpLUi0zOktSOlVMU0FOIEdXQU5HWUVPR1NJIFtVTFNBTiBLV0FOR1lLU0hJXQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L0tPUi9LT1JfQURNSU4yX0xFWC50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvS09SL0tPUl9BRE1JTjJfTEVYLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yN2QyZDNkCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L0tPUi9LT1JfQURNSU4yX0xFWC50eHQKQEAgLTAsMCArMSwzMjcgQEAKKzE6S1I6S09SOlNPVVRIIEtPUkVBOkNob2xsYW5hbS1EbzpLT1IuTDIuMTAwCisyOktSOktPUjpTT1VUSCBLT1JFQTpDaG9sbGFuYW0tRG86S09SLkwyLjEwMQorMzpLUjpLT1I6U09VVEggS09SRUE6Q2hvbGxhbmFtLURvOktPUi5MMi4xMDIKKzQ6S1I6S09SOlNPVVRIIEtPUkVBOkNob2xsYW5hbS1EbzpLT1IuTDIuMTAzCis1OktSOktPUjpTT1VUSCBLT1JFQTpDaG9sbGFuYW0tRG86S09SLkwyLjEwNAorNjpLUjpLT1I6U09VVEggS09SRUE6Q2hvbGxhbmFtLURvOktPUi5MMi4xMDUKKzc6S1I6S09SOlNPVVRIIEtPUkVBOkNob2xsYW5hbS1EbzpLT1IuTDIuMTA2Cis4OktSOktPUjpTT1VUSCBLT1JFQTpDaG9sbGFuYW0tRG86S09SLkwyLjEwNworOTpLUjpLT1I6U09VVEggS09SRUE6Q2hvbGxhbmFtLURvOktPUi5MMi4xMDgKKzEwOktSOktPUjpTT1VUSCBLT1JFQTpDaG9sbGFuYW0tRG86S09SLkwyLjEwOQorMTE6S1I6S09SOlNPVVRIIEtPUkVBOkNob2xsYW5hbS1EbzpLT1IuTDIuMTEwCisxMjpLUjpLT1I6U09VVEggS09SRUE6Q2hvbGxhbmFtLURvOktPUi5MMi4xMTEKKzEzOktSOktPUjpTT1VUSCBLT1JFQTpDaG9sbGFuYW0tRG86S09SLkwyLjExMgorMTQ6S1I6S09SOlNPVVRIIEtPUkVBOkNob2xsYW5hbS1EbzpLT1IuTDIuMTEzCisxNTpLUjpLT1I6U09VVEggS09SRUE6Q2hvbGxhbmFtLURvOktPUi5MMi4xMTQKKzE2OktSOktPUjpTT1VUSCBLT1JFQTpDaG9sbGFuYW0tRG86S09SLkwyLjExNQorMTc6S1I6S09SOlNPVVRIIEtPUkVBOkNob2xsYW5hbS1EbzpLT1IuTDIuMTE2CisxODpLUjpLT1I6U09VVEggS09SRUE6Q2hvbGxhbmFtLURvOktPUi5MMi4xMTcKKzE5OktSOktPUjpTT1VUSCBLT1JFQTpDaG9sbGFuYW0tRG86S09SLkwyLjExOAorMjA6S1I6S09SOlNPVVRIIEtPUkVBOkNob2xsYW5hbS1EbzpLT1IuTDIuMTE5CisyMTpLUjpLT1I6U09VVEggS09SRUE6Q2hvbGxhbmFtLURvOktPUi5MMi4xMjAKKzIyOktSOktPUjpTT1VUSCBLT1JFQTpDaG9sbGFuYW0tRG86S09SLkwyLjEyMQorMjM6S1I6S09SOlNPVVRIIEtPUkVBOkNob2xsYW5hbS1EbzpLT1IuTDIuMTIyCisyNDpLUjpLT1I6U09VVEggS09SRUE6Q2hvbGxhbmFtLURvOktPUi5MMi4xMjMKKzI1OktSOktPUjpTT1VUSCBLT1JFQTpDaG9sbGFuYW0tRG86S09SLkwyLjEyNAorMjY6S1I6S09SOlNPVVRIIEtPUkVBOkNob2xsYW5hbS1EbzpLT1IuTDIuMTI1CisyNzpLUjpLT1I6U09VVEggS09SRUE6Q2hvbGxhbmFtLURvOktPUi5MMi4xMjYKKzI4OktSOktPUjpTT1VUSCBLT1JFQTpDaG9sbGFuYW0tRG86S09SLkwyLjEyNworMjk6S1I6S09SOlNPVVRIIEtPUkVBOkNob2xsYW5hbS1EbzpLT1IuTDIuMTI4CiszMDpLUjpLT1I6U09VVEggS09SRUE6Q2hvbGxhbmFtLURvOktPUi5MMi4xMjkKKzMxOktSOktPUjpTT1VUSCBLT1JFQTpDaG9sbGFuYW0tRG86S09SLkwyLjEzMAorMzI6S1I6S09SOlNPVVRIIEtPUkVBOkNob2xsYW5hbS1EbzpLT1IuTDIuMTMxCiszMzpLUjpLT1I6U09VVEggS09SRUE6Q2hvbGxhbmFtLURvOktPUi5MMi4xMzIKKzM0OktSOktPUjpTT1VUSCBLT1JFQTpDaG9sbGFuYW0tRG86S09SLkwyLjEzMworMzU6S1I6S09SOlNPVVRIIEtPUkVBOkNob2xsYW5hbS1EbzpLT1IuTDIuMTM0CiszNjpLUjpLT1I6U09VVEggS09SRUE6Q2hvbGxhbmFtLURvOktPUi5MMi4xMzUKKzM3OktSOktPUjpTT1VUSCBLT1JFQTpDaG9sbGFuYW0tRG86S09SLkwyLjEzNgorMzg6S1I6S09SOlNPVVRIIEtPUkVBOkNob2xsYW5hbS1EbzpLT1IuTDIuMTM3CiszOTpLUjpLT1I6U09VVEggS09SRUE6Q2hvbGxhbmFtLURvOktPUi5MMi4xMzgKKzQwOktSOktPUjpTT1VUSCBLT1JFQTpDaG9sbGFuYW0tRG86S09SLkwyLjEzOQorNDE6S1I6S09SOlNPVVRIIEtPUkVBOkNob2xsYW5hbS1EbzpLT1IuTDIuMTQwCis0MjpLUjpLT1I6U09VVEggS09SRUE6Q2hvbGxhbmFtLURvOktPUi5MMi4xNDEKKzQzOktSOktPUjpTT1VUSCBLT1JFQTpDaG9sbGFuYW0tRG86S09SLkwyLjE0MgorNDQ6S1I6S09SOlNPVVRIIEtPUkVBOkNob2xsYW5hbS1EbzpLT1IuTDIuMTQzCis0NTpLUjpLT1I6U09VVEggS09SRUE6Q2hvbGxhbmFtLURvOktPUi5MMi4xNDQKKzQ2OktSOktPUjpTT1VUSCBLT1JFQTpDaG9sbGFuYW0tRG86S09SLkwyLjE0NQorNDc6S1I6S09SOlNPVVRIIEtPUkVBOkNob2xsYW5hbS1EbzpLT1IuTDIuMTQ2Cis0ODpLUjpLT1I6U09VVEggS09SRUE6Q2hvbGxhbmFtLURvOktPUi5MMi4xNDcKKzQ5OktSOktPUjpTT1VUSCBLT1JFQTpDaG9sbGFuYW0tRG86S09SLkwyLjE0OAorNTA6S1I6S09SOlNPVVRIIEtPUkVBOkNob2xsYW5hbS1EbzpLT1IuTDIuMTQ5Cis1MTpLUjpLT1I6U09VVEggS09SRUE6Q2hvbGxhbmFtLURvOktPUi5MMi4xNTAKKzUyOktSOktPUjpTT1VUSCBLT1JFQTpDaG9sbGFuYW0tRG86S09SLkwyLjE1MQorNTM6S1I6S09SOlNPVVRIIEtPUkVBOkNob2xsYW5hbS1EbzpLT1IuTDIuMTUyCis1NDpLUjpLT1I6U09VVEggS09SRUE6Q2hvbGxhbmFtLURvOktPUi5MMi4xNTMKKzU1OktSOktPUjpTT1VUSCBLT1JFQTpDaG9sbGFuYW0tRG86S09SLkwyLjE1NAorNTY6S1I6S09SOlNPVVRIIEtPUkVBOkNob2xsYW5hbS1EbzpLT1IuTDIuMTU1Cis1NzpLUjpLT1I6U09VVEggS09SRUE6Q2hvbGxhbmFtLURvOktPUi5MMi4xNTYKKzU4OktSOktPUjpTT1VUSCBLT1JFQTpDaG9sbGFuYW0tRG86S09SLkwyLjE1NworNTk6S1I6S09SOlNPVVRIIEtPUkVBOkNob2xsYW5hbS1EbzpLT1IuTDIuMTU4Cis2MDpLUjpLT1I6U09VVEggS09SRUE6Q2hvbGxhbmFtLURvOktPUi5MMi4xNTkKKzYxOktSOktPUjpTT1VUSCBLT1JFQTpDaG9sbGFuYW0tRG86S09SLkwyLjE2MAorNjI6S1I6S09SOlNPVVRIIEtPUkVBOkNob2xsYW5hbS1EbzpLT1IuTDIuMTYxCis2MzpLUjpLT1I6U09VVEggS09SRUE6Q2hvbGxhbmFtLURvOktPUi5MMi4xNjIKKzY0OktSOktPUjpTT1VUSCBLT1JFQTpDaG9sbGFuYW0tRG86S09SLkwyLjE2MworNjU6S1I6S09SOlNPVVRIIEtPUkVBOkNob2xsYW5hbS1EbzpLT1IuTDIuMTY0Cis2NjpLUjpLT1I6U09VVEggS09SRUE6Q2hvbGxhbmFtLURvOktPUi5MMi4xNjUKKzY3OktSOktPUjpTT1VUSCBLT1JFQTpDaG9sbGFuYW0tRG86S09SLkwyLjE2NgorNjg6S1I6S09SOlNPVVRIIEtPUkVBOkNob2xsYW5hbS1EbzpLT1IuTDIuMTY3Cis2OTpLUjpLT1I6U09VVEggS09SRUE6Q2hvbGxhbmFtLURvOktPUi5MMi4xNjgKKzcwOktSOktPUjpTT1VUSCBLT1JFQTpDaG9sbGFuYW0tRG86S09SLkwyLjE2OQorNzE6S1I6S09SOlNPVVRIIEtPUkVBOkNob2xsYW5hbS1EbzpLT1IuTDIuMTcwCis3MjpLUjpLT1I6U09VVEggS09SRUE6Q2hvbGxhbmFtLURvOktPUi5MMi4xNzEKKzczOktSOktPUjpTT1VUSCBLT1JFQTpDaG9sbGFuYW0tRG86S09SLkwyLjE3MgorNzQ6S1I6S09SOlNPVVRIIEtPUkVBOkNob2xsYW5hbS1EbzpLT1IuTDIuMTczCis3NTpLUjpLT1I6U09VVEggS09SRUE6Q2hvbGxhbmFtLURvOktPUi5MMi4xNzQKKzc2OktSOktPUjpTT1VUSCBLT1JFQTpDaG9sbGFuYW0tRG86S09SLkwyLjE3NQorNzc6S1I6S09SOlNPVVRIIEtPUkVBOkNob2xsYW5hbS1EbzpLT1IuTDIuMTc2Cis3ODpLUjpLT1I6U09VVEggS09SRUE6Q2hvbGxhbmFtLURvOktPUi5MMi4xNzcKKzc5OktSOktPUjpTT1VUSCBLT1JFQTpDaG9sbGFuYW0tRG86S09SLkwyLjE3OAorODA6S1I6S09SOlNPVVRIIEtPUkVBOkNob2xsYW5hbS1EbzpLT1IuTDIuMTc5Cis4MTpLUjpLT1I6U09VVEggS09SRUE6Q2hvbGxhbmFtLURvOktPUi5MMi4xODAKKzgyOktSOktPUjpTT1VUSCBLT1JFQTpDaG9sbGFuYW0tRG86S09SLkwyLjE4MQorODM6S1I6S09SOlNPVVRIIEtPUkVBOkNob2xsYW5hbS1EbzpLT1IuTDIuMTgyCis4NDpLUjpLT1I6U09VVEggS09SRUE6Q2hvbGxhbmFtLURvOktPUi5MMi4xODMKKzg1OktSOktPUjpTT1VUSCBLT1JFQTpDaG9sbGFuYW0tRG86S09SLkwyLjE4NAorODY6S1I6S09SOlNPVVRIIEtPUkVBOkNob2xsYW5hbS1EbzpLT1IuTDIuMTg1Cis4NzpLUjpLT1I6U09VVEggS09SRUE6Q2hvbGxhbmFtLURvOktPUi5MMi4xODYKKzg4OktSOktPUjpTT1VUSCBLT1JFQTpDaG9sbGFuYW0tRG86S09SLkwyLjE4NworODk6S1I6S09SOlNPVVRIIEtPUkVBOkNob2xsYW5hbS1EbzpLT1IuTDIuMTg4Cis5MDpLUjpLT1I6U09VVEggS09SRUE6Q2hvbGxhbmFtLURvOktPUi5MMi4xODkKKzkxOktSOktPUjpTT1VUSCBLT1JFQTpDaG9sbGFuYW0tRG86S09SLkwyLjE5MAorOTI6S1I6S09SOlNPVVRIIEtPUkVBOkNob2xsYW5hbS1EbzpLT1IuTDIuMTkxCis5MzpLUjpLT1I6U09VVEggS09SRUE6Q2hvbGxhbmFtLURvOktPUi5MMi4xOTIKKzk0OktSOktPUjpTT1VUSCBLT1JFQTpDaG9sbGFuYW0tRG86S09SLkwyLjE5MworOTU6S1I6S09SOlNPVVRIIEtPUkVBOkNob2xsYW5hbS1EbzpLT1IuTDIuMTk0Cis5NjpLUjpLT1I6U09VVEggS09SRUE6Q2hvbGxhbmFtLURvOktPUi5MMi4xOTUKKzk3OktSOktPUjpTT1VUSCBLT1JFQTpDaG9sbGFuYW0tRG86S09SLkwyLjE5NgorOTg6S1I6S09SOlNPVVRIIEtPUkVBOkNob2xsYW5hbS1EbzpLT1IuTDIuMTk3Cis5OTpLUjpLT1I6U09VVEggS09SRUE6Q2hvbGxhbmFtLURvOktPUi5MMi4xOTgKKzEwMDpLUjpLT1I6U09VVEggS09SRUE6Q2hvbGxhbmFtLURvOktPUi5MMi4xOTkKKzEwMTpLUjpLT1I6U09VVEggS09SRUE6Q2hvbGxhbmFtLURvOktPUi5MMi4yMDAKKzEwMjpLUjpLT1I6U09VVEggS09SRUE6Q2hvbGxhbmFtLURvOktPUi5MMi4yMDEKKzEwMzpLUjpLT1I6U09VVEggS09SRUE6Q2hvbGxhbmFtLURvOktPUi5MMi4yMDIKKzEwNDpLUjpLT1I6U09VVEggS09SRUE6Q2hvbGxhbmFtLURvOktPUi5MMi4yMDMKKzEwNTpLUjpLT1I6U09VVEggS09SRUE6Q2hvbGxhbmFtLURvOktPUi5MMi4yMDQKKzEwNjpLUjpLT1I6U09VVEggS09SRUE6Q2hvbGxhbmFtLURvOktPUi5MMi4yMDUKKzEwNzpLUjpLT1I6U09VVEggS09SRUE6Q2hvbGxhbmFtLURvOktPUi5MMi4yMDYKKzEwODpLUjpLT1I6U09VVEggS09SRUE6Q2hvbGxhbmFtLURvOktPUi5MMi4yMDcKKzEwOTpLUjpLT1I6U09VVEggS09SRUE6Q2hvbGxhbmFtLURvOktPUi5MMi4yMDgKKzExMDpLUjpLT1I6U09VVEggS09SRUE6Q2hvbGxhbmFtLURvOktPUi5MMi4yMDkKKzExMTpLUjpLT1I6U09VVEggS09SRUE6Q2hvbGxhbmFtLURvOktPUi5MMi4yMTAKKzExMjpLUjpLT1I6U09VVEggS09SRUE6Q2hvbGxhbmFtLURvOktPUi5MMi4yMTEKKzExMzpLUjpLT1I6U09VVEggS09SRUE6Q2hvbGxhbmFtLURvOktPUi5MMi4yMTIKKzExNDpLUjpLT1I6U09VVEggS09SRUE6Q2hvbGxhbmFtLURvOktPUi5MMi4yMTMKKzExNTpLUjpLT1I6U09VVEggS09SRUE6Q2hvbGxhbmFtLURvOktPUi5MMi4yMTQKKzExNjpLUjpLT1I6U09VVEggS09SRUE6Q2hvbGxhbmFtLURvOktPUi5MMi4yMTUKKzExNzpLUjpLT1I6U09VVEggS09SRUE6Q2hvbGxhbmFtLURvOktPUi5MMi4yMTYKKzExODpLUjpLT1I6U09VVEggS09SRUE6Q2hvbGxhbmFtLURvOktPUi5MMi4yMTcKKzExOTpLUjpLT1I6U09VVEggS09SRUE6Q2hvbGxhbmFtLURvOktPUi5MMi4yMTgKKzEyMDpLUjpLT1I6U09VVEggS09SRUE6Q2hvbGxhbmFtLURvOktPUi5MMi4yMTkKKzEyMTpLUjpLT1I6U09VVEggS09SRUE6Q2hvbGxhbmFtLURvOktPUi5MMi4yMjAKKzEyMjpLUjpLT1I6U09VVEggS09SRUE6Q2hvbGxhbmFtLURvOktPUi5MMi4yMjEKKzEyMzpLUjpLT1I6U09VVEggS09SRUE6Q2hvbGxhbmFtLURvOktPUi5MMi4yMjIKKzEyNDpLUjpLT1I6U09VVEggS09SRUE6Q2hvbGxhbmFtLURvOktPUi5MMi4yMjMKKzEyNTpLUjpLT1I6U09VVEggS09SRUE6Q2hvbGxhbmFtLURvOktPUi5MMi4yMjQKKzEyNjpLUjpLT1I6U09VVEggS09SRUE6Q2hvbGxhbmFtLURvOktPUi5MMi4yMjUKKzEyNzpLUjpLT1I6U09VVEggS09SRUE6Q2hvbGxhbmFtLURvOktPUi5MMi4yMjYKKzEyODpLUjpLT1I6U09VVEggS09SRUE6Q2hvbGxhbmFtLURvOktPUi5MMi4yMjcKKzEyOTpLUjpLT1I6U09VVEggS09SRUE6Q2hvbGxhbmFtLURvOktPUi5MMi4yMjgKKzEzMDpLUjpLT1I6U09VVEggS09SRUE6Q2hvbGxhbmFtLURvOktPUi5MMi4yMjkKKzEzMTpLUjpLT1I6U09VVEggS09SRUE6Q2hvbGxhbmFtLURvOktPUi5MMi4yMzAKKzEzMjpLUjpLT1I6U09VVEggS09SRUE6Q2hvbGxhbmFtLURvOktPUi5MMi4yMzEKKzEzMzpLUjpLT1I6U09VVEggS09SRUE6Q2hvbGxhbmFtLURvOktPUi5MMi4yMzIKKzEzNDpLUjpLT1I6U09VVEggS09SRUE6Q2hvbGxhbmFtLURvOktPUi5MMi4yMzMKKzEzNTpLUjpLT1I6U09VVEggS09SRUE6Q2hvbGxhbmFtLURvOktPUi5MMi4yMzQKKzEzNjpLUjpLT1I6U09VVEggS09SRUE6Q2hvbGxhbmFtLURvOktPUi5MMi4yMzUKKzEzNzpLUjpLT1I6U09VVEggS09SRUE6Q2hvbGxhbmFtLURvOktPUi5MMi4yMzYKKzEzODpLUjpLT1I6U09VVEggS09SRUE6Q2hvbGxhbmFtLURvOktPUi5MMi4yMzcKKzEzOTpLUjpLT1I6U09VVEggS09SRUE6Q2hvbGxhbmFtLURvOktPUi5MMi4yMzgKKzE0MDpLUjpLT1I6U09VVEggS09SRUE6Q2hvbGxhbmFtLURvOktPUi5MMi4yMzkKKzE0MTpLUjpLT1I6U09VVEggS09SRUE6Q2hvbGxhbmFtLURvOktPUi5MMi4yNDAKKzE0MjpLUjpLT1I6U09VVEggS09SRUE6Q2hvbGxhbmFtLURvOktPUi5MMi4yNDEKKzE0MzpLUjpLT1I6U09VVEggS09SRUE6Q2hvbGxhbmFtLURvOktPUi5MMi4yNDIKKzE0NDpLUjpLT1I6U09VVEggS09SRUE6Q2hvbGxhbmFtLURvOktPUi5MMi4yNDMKKzE0NTpLUjpLT1I6U09VVEggS09SRUE6Q2hvbGxhbmFtLURvOktPUi5MMi4yNDQKKzE0NjpLUjpLT1I6U09VVEggS09SRUE6Q2hvbGxhbmFtLURvOktPUi5MMi4yNDUKKzE0NzpLUjpLT1I6U09VVEggS09SRUE6Q2hvbGxhbmFtLURvOktPUi5MMi4yNDYKKzE0ODpLUjpLT1I6U09VVEggS09SRUE6Q2hvbGxhbmFtLURvOktPUi5MMi4yNDcKKzE0OTpLUjpLT1I6U09VVEggS09SRUE6Q2hvbGxhbmFtLURvOktPUi5MMi4yNDgKKzE1MDpLUjpLT1I6U09VVEggS09SRUE6Q2hvbGxhbmFtLURvOktPUi5MMi4yNDkKKzE1MTpLUjpLT1I6U09VVEggS09SRUE6Q2hvbGxhbmFtLURvOktPUi5MMi4yNTAKKzE1MjpLUjpLT1I6U09VVEggS09SRUE6Q2hvbGxhbmFtLURvOktPUi5MMi4yNTEKKzE1MzpLUjpLT1I6U09VVEggS09SRUE6Q2hvbGxhbmFtLURvOktPUi5MMi4yNTIKKzE1NDpLUjpLT1I6U09VVEggS09SRUE6Q2hvbGxhbmFtLURvOktPUi5MMi4yNTMKKzE1NTpLUjpLT1I6U09VVEggS09SRUE6Q2hvbGxhbmFtLURvOktPUi5MMi4yNTQKKzE1NjpLUjpLT1I6U09VVEggS09SRUE6Q2hvbGxhbmFtLURvOktPUi5MMi4yNTUKKzE1NzpLUjpLT1I6U09VVEggS09SRUE6Q2hvbGxhbmFtLURvOktPUi5MMi4yNTYKKzE1ODpLUjpLT1I6U09VVEggS09SRUE6Q2hvbGxhbmFtLURvOktPUi5MMi4yNTcKKzE1OTpLUjpLT1I6U09VVEggS09SRUE6Q2hvbGxhbmFtLURvOktPUi5MMi4yNTgKKzE2MDpLUjpLT1I6U09VVEggS09SRUE6Q2hvbGxhbmFtLURvOktPUi5MMi4yNTkKKzE2MTpLUjpLT1I6U09VVEggS09SRUE6Q2hvbGxhbmFtLURvOktPUi5MMi4yNjAKKzE2MjpLUjpLT1I6U09VVEggS09SRUE6Q2hvbGxhbmFtLURvOktPUi5MMi4yNjEKKzE2MzpLUjpLT1I6U09VVEggS09SRUE6Q2hvbGxhbmFtLURvOktPUi5MMi4yNjIKKzE2NDpLUjpLT1I6U09VVEggS09SRUE6Q2hvbGxhbmFtLURvOktPUi5MMi4yNjMKKzE2NTpLUjpLT1I6U09VVEggS09SRUE6Q2hvbGxhbmFtLURvOktPUi5MMi4yNjQKKzE2NjpLUjpLT1I6U09VVEggS09SRUE6Q2hvbGxhbmFtLURvOktPUi5MMi4yNjUKKzE2NzpLUjpLT1I6U09VVEggS09SRUE6Q2hvbGxhbmFtLURvOktPUi5MMi4yNjYKKzE2ODpLUjpLT1I6U09VVEggS09SRUE6Q2hvbGxhbmFtLURvOktPUi5MMi4yNjcKKzE2OTpLUjpLT1I6U09VVEggS09SRUE6Q2hvbGxhbmFtLURvOktPUi5MMi4yNjgKKzE3MDpLUjpLT1I6U09VVEggS09SRUE6Q2hvbGxhbmFtLURvOktPUi5MMi4yNjkKKzE3MTpLUjpLT1I6U09VVEggS09SRUE6Q2hvbGxhbmFtLURvOktPUi5MMi4yNzAKKzE3MjpLUjpLT1I6U09VVEggS09SRUE6Q2hvbGxhbmFtLURvOktPUi5MMi4yNzEKKzE3MzpLUjpLT1I6U09VVEggS09SRUE6Q2hvbGxhbmFtLURvOktPUi5MMi4yNzIKKzE3NDpLUjpLT1I6U09VVEggS09SRUE6Q2hvbGxhbmFtLURvOktPUi5MMi4yNzMKKzE3NTpLUjpLT1I6U09VVEggS09SRUE6Q2hvbGxhbmFtLURvOktPUi5MMi4yNzQKKzE3NjpLUjpLT1I6U09VVEggS09SRUE6Q2hvbGxhbmFtLURvOktPUi5MMi4yNzUKKzE3NzpLUjpLT1I6U09VVEggS09SRUE6Q2hvbGxhbmFtLURvOktPUi5MMi4yNzYKKzE3ODpLUjpLT1I6U09VVEggS09SRUE6Q2hvbGxhbmFtLURvOktPUi5MMi4yNzcKKzE3OTpLUjpLT1I6U09VVEggS09SRUE6Q2hvbGxhbmFtLURvOktPUi5MMi4yNzgKKzE4MDpLUjpLT1I6U09VVEggS09SRUE6Q2hvbGxhbmFtLURvOktPUi5MMi4yNzkKKzE4MTpLUjpLT1I6U09VVEggS09SRUE6Q2hvbGxhbmFtLURvOktPUi5MMi4yODAKKzE4MjpLUjpLT1I6U09VVEggS09SRUE6Q2hvbGxhbmFtLURvOktPUi5MMi4yODEKKzE4MzpLUjpLT1I6U09VVEggS09SRUE6Q2hvbGxhbmFtLURvOktPUi5MMi4yODIKKzE4NDpLUjpLT1I6U09VVEggS09SRUE6Q2hvbGxhbmFtLURvOktPUi5MMi4yODMKKzE4NTpLUjpLT1I6U09VVEggS09SRUE6Q2hvbGxhbmFtLURvOktPUi5MMi45OQorMTpLUjpLT1I6U09VVEggS09SRUE6UHVzYW46S09SLkwyLjY0CisyOktSOktPUjpTT1VUSCBLT1JFQTpQdXNhbjpLT1IuTDIuNjUKKzE6S1I6S09SOlNPVVRIIEtPUkVBOkNodW5nY2hvbmdidWstRG86S09SLkwyLjE3CisxOktSOktPUjpTT1VUSCBLT1JFQTpDaG9sbGFidWstRG86S09SLkwyLjIwCisyOktSOktPUjpTT1VUSCBLT1JFQTpDaG9sbGFidWstRG86S09SLkwyLjIxCiszOktSOktPUjpTT1VUSCBLT1JFQTpDaG9sbGFidWstRG86S09SLkwyLjIyCis0OktSOktPUjpTT1VUSCBLT1JFQTpDaG9sbGFidWstRG86S09SLkwyLjIzCis1OktSOktPUjpTT1VUSCBLT1JFQTpDaG9sbGFidWstRG86S09SLkwyLjI0Cis2OktSOktPUjpTT1VUSCBLT1JFQTpDaG9sbGFidWstRG86S09SLkwyLjI1Cis3OktSOktPUjpTT1VUSCBLT1JFQTpDaG9sbGFidWstRG86S09SLkwyLjI2Cis4OktSOktPUjpTT1VUSCBLT1JFQTpDaG9sbGFidWstRG86S09SLkwyLjI3Cis5OktSOktPUjpTT1VUSCBLT1JFQTpDaG9sbGFidWstRG86S09SLkwyLjI4CisxMDpLUjpLT1I6U09VVEggS09SRUE6Q2hvbGxhYnVrLURvOktPUi5MMi4yOQorMTE6S1I6S09SOlNPVVRIIEtPUkVBOkNob2xsYWJ1ay1EbzpLT1IuTDIuMzAKKzEyOktSOktPUjpTT1VUSCBLT1JFQTpDaG9sbGFidWstRG86S09SLkwyLjMxCisxMzpLUjpLT1I6U09VVEggS09SRUE6Q2hvbGxhYnVrLURvOktPUi5MMi4zMgorMTQ6S1I6S09SOlNPVVRIIEtPUkVBOkNob2xsYWJ1ay1EbzpLT1IuTDIuMzMKKzE6S1I6S09SOlNPVVRIIEtPUkVBOkluY2hvbjpLT1IuTDIuMQorMjpLUjpLT1I6U09VVEggS09SRUE6SW5jaG9uOktPUi5MMi4xMAorMzpLUjpLT1I6U09VVEggS09SRUE6SW5jaG9uOktPUi5MMi4yCis0OktSOktPUjpTT1VUSCBLT1JFQTpJbmNob246S09SLkwyLjMKKzU6S1I6S09SOlNPVVRIIEtPUkVBOkluY2hvbjpLT1IuTDIuNAorNjpLUjpLT1I6U09VVEggS09SRUE6SW5jaG9uOktPUi5MMi41Cis3OktSOktPUjpTT1VUSCBLT1JFQTpJbmNob246S09SLkwyLjYKKzg6S1I6S09SOlNPVVRIIEtPUkVBOkluY2hvbjpLT1IuTDIuNworOTpLUjpLT1I6U09VVEggS09SRUE6SW5jaG9uOktPUi5MMi44CisxMDpLUjpLT1I6U09VVEggS09SRUE6SW5jaG9uOktPUi5MMi45CisxOktSOktPUjpTT1VUSCBLT1JFQTpDaGVqdS1EbzpLT1IuTDIuMTEKKzI6S1I6S09SOlNPVVRIIEtPUkVBOkNoZWp1LURvOktPUi5MMi4xMgorMzpLUjpLT1I6U09VVEggS09SRUE6Q2hlanUtRG86S09SLkwyLjEzCis0OktSOktPUjpTT1VUSCBLT1JFQTpDaGVqdS1EbzpLT1IuTDIuMTQKKzE6S1I6S09SOlNPVVRIIEtPUkVBOkt3YW5nanU6S09SLkwyLjY2CisxOktSOktPUjpTT1VUSCBLT1JFQTpUYWVqb246S09SLkwyLjM0CisxOktSOktPUjpTT1VUSCBLT1JFQTpDaHVuZ2Nob25nbmFtLURvOktPUi5MMi4zNgorMjpLUjpLT1I6U09VVEggS09SRUE6Q2h1bmdjaG9uZ25hbS1EbzpLT1IuTDIuMzcKKzM6S1I6S09SOlNPVVRIIEtPUkVBOkNodW5nY2hvbmduYW0tRG86S09SLkwyLjM4Cis0OktSOktPUjpTT1VUSCBLT1JFQTpDaHVuZ2Nob25nbmFtLURvOktPUi5MMi4zOQorNTpLUjpLT1I6U09VVEggS09SRUE6Q2h1bmdjaG9uZ25hbS1EbzpLT1IuTDIuNDAKKzY6S1I6S09SOlNPVVRIIEtPUkVBOkNodW5nY2hvbmduYW0tRG86S09SLkwyLjQxCis3OktSOktPUjpTT1VUSCBLT1JFQTpDaHVuZ2Nob25nbmFtLURvOktPUi5MMi40MgorODpLUjpLT1I6U09VVEggS09SRUE6Q2h1bmdjaG9uZ25hbS1EbzpLT1IuTDIuNDMKKzk6S1I6S09SOlNPVVRIIEtPUkVBOkNodW5nY2hvbmduYW0tRG86S09SLkwyLjQ0CisxMDpLUjpLT1I6U09VVEggS09SRUE6Q2h1bmdjaG9uZ25hbS1EbzpLT1IuTDIuNDUKKzExOktSOktPUjpTT1VUSCBLT1JFQTpDaHVuZ2Nob25nbmFtLURvOktPUi5MMi40NgorMTI6S1I6S09SOlNPVVRIIEtPUkVBOkNodW5nY2hvbmduYW0tRG86S09SLkwyLjQ3CisxMzpLUjpLT1I6U09VVEggS09SRUE6Q2h1bmdjaG9uZ25hbS1EbzpLT1IuTDIuNDgKKzE0OktSOktPUjpTT1VUSCBLT1JFQTpDaHVuZ2Nob25nbmFtLURvOktPUi5MMi40OQorMTU6S1I6S09SOlNPVVRIIEtPUkVBOkNodW5nY2hvbmduYW0tRG86S09SLkwyLjUwCisxNjpLUjpLT1I6U09VVEggS09SRUE6Q2h1bmdjaG9uZ25hbS1EbzpLT1IuTDIuNTEKKzE3OktSOktPUjpTT1VUSCBLT1JFQTpDaHVuZ2Nob25nbmFtLURvOktPUi5MMi41MgorMTg6S1I6S09SOlNPVVRIIEtPUkVBOkNodW5nY2hvbmduYW0tRG86S09SLkwyLjUzCisxOTpLUjpLT1I6U09VVEggS09SRUE6Q2h1bmdjaG9uZ25hbS1EbzpLT1IuTDIuNTQKKzIwOktSOktPUjpTT1VUSCBLT1JFQTpDaHVuZ2Nob25nbmFtLURvOktPUi5MMi41NQorMjE6S1I6S09SOlNPVVRIIEtPUkVBOkNodW5nY2hvbmduYW0tRG86S09SLkwyLjU2CisyMjpLUjpLT1I6U09VVEggS09SRUE6Q2h1bmdjaG9uZ25hbS1EbzpLT1IuTDIuNTcKKzIzOktSOktPUjpTT1VUSCBLT1JFQTpDaHVuZ2Nob25nbmFtLURvOktPUi5MMi41OAorMjQ6S1I6S09SOlNPVVRIIEtPUkVBOkNodW5nY2hvbmduYW0tRG86S09SLkwyLjU5CisyNTpLUjpLT1I6U09VVEggS09SRUE6Q2h1bmdjaG9uZ25hbS1EbzpLT1IuTDIuNjAKKzI2OktSOktPUjpTT1VUSCBLT1JFQTpDaHVuZ2Nob25nbmFtLURvOktPUi5MMi42MQorMjc6S1I6S09SOlNPVVRIIEtPUkVBOkNodW5nY2hvbmduYW0tRG86S09SLkwyLjYyCisyODpLUjpLT1I6U09VVEggS09SRUE6Q2h1bmdjaG9uZ25hbS1EbzpLT1IuTDIuNjMKKzE6S1I6S09SOlNPVVRIIEtPUkVBOkt5b25nZ2ktRG86S09SLkwyLjY3CisyOktSOktPUjpTT1VUSCBLT1JFQTpLeW9uZ2dpLURvOktPUi5MMi42OAorMzpLUjpLT1I6U09VVEggS09SRUE6S3lvbmdnaS1EbzpLT1IuTDIuNjkKKzQ6S1I6S09SOlNPVVRIIEtPUkVBOkt5b25nZ2ktRG86S09SLkwyLjcwCis1OktSOktPUjpTT1VUSCBLT1JFQTpLeW9uZ2dpLURvOktPUi5MMi43MQorNjpLUjpLT1I6U09VVEggS09SRUE6S3lvbmdnaS1EbzpLT1IuTDIuNzIKKzc6S1I6S09SOlNPVVRIIEtPUkVBOkt5b25nZ2ktRG86S09SLkwyLjczCis4OktSOktPUjpTT1VUSCBLT1JFQTpLeW9uZ2dpLURvOktPUi5MMi43NAorOTpLUjpLT1I6U09VVEggS09SRUE6S3lvbmdnaS1EbzpLT1IuTDIuNzUKKzEwOktSOktPUjpTT1VUSCBLT1JFQTpLeW9uZ2dpLURvOktPUi5MMi43NgorMTE6S1I6S09SOlNPVVRIIEtPUkVBOkt5b25nZ2ktRG86S09SLkwyLjc3CisxMjpLUjpLT1I6U09VVEggS09SRUE6S3lvbmdnaS1EbzpLT1IuTDIuNzgKKzEzOktSOktPUjpTT1VUSCBLT1JFQTpLeW9uZ2dpLURvOktPUi5MMi43OQorMTQ6S1I6S09SOlNPVVRIIEtPUkVBOkt5b25nZ2ktRG86S09SLkwyLjgwCisxNTpLUjpLT1I6U09VVEggS09SRUE6S3lvbmdnaS1EbzpLT1IuTDIuODEKKzE2OktSOktPUjpTT1VUSCBLT1JFQTpLeW9uZ2dpLURvOktPUi5MMi44MgorMTc6S1I6S09SOlNPVVRIIEtPUkVBOkt5b25nZ2ktRG86S09SLkwyLjgzCisxODpLUjpLT1I6U09VVEggS09SRUE6S3lvbmdnaS1EbzpLT1IuTDIuODQKKzE5OktSOktPUjpTT1VUSCBLT1JFQTpLeW9uZ2dpLURvOktPUi5MMi44NQorMjA6S1I6S09SOlNPVVRIIEtPUkVBOkt5b25nZ2ktRG86S09SLkwyLjg2CisyMTpLUjpLT1I6U09VVEggS09SRUE6S3lvbmdnaS1EbzpLT1IuTDIuODcKKzIyOktSOktPUjpTT1VUSCBLT1JFQTpLeW9uZ2dpLURvOktPUi5MMi44OAorMjM6S1I6S09SOlNPVVRIIEtPUkVBOkt5b25nZ2ktRG86S09SLkwyLjg5CisyNDpLUjpLT1I6U09VVEggS09SRUE6S3lvbmdnaS1EbzpLT1IuTDIuOTAKKzI1OktSOktPUjpTT1VUSCBLT1JFQTpLeW9uZ2dpLURvOktPUi5MMi45MQorMjY6S1I6S09SOlNPVVRIIEtPUkVBOkt5b25nZ2ktRG86S09SLkwyLjkyCisyNzpLUjpLT1I6U09VVEggS09SRUE6S3lvbmdnaS1EbzpLT1IuTDIuOTMKKzI4OktSOktPUjpTT1VUSCBLT1JFQTpLeW9uZ2dpLURvOktPUi5MMi45NAorMjk6S1I6S09SOlNPVVRIIEtPUkVBOkt5b25nZ2ktRG86S09SLkwyLjk1CiszMDpLUjpLT1I6U09VVEggS09SRUE6S3lvbmdnaS1EbzpLT1IuTDIuOTYKKzMxOktSOktPUjpTT1VUSCBLT1JFQTpLeW9uZ2dpLURvOktPUi5MMi45NworMzI6S1I6S09SOlNPVVRIIEtPUkVBOkt5b25nZ2ktRG86S09SLkwyLjk4CisxOktSOktPUjpTT1VUSCBLT1JFQTpTZW91bDpLT1IuTDIuMTYKKzE6S1I6S09SOlNPVVRIIEtPUkVBOkt5b25nc2FuZ25hbS1EbzpLT1IuTDIuMjg0CisyOktSOktPUjpTT1VUSCBLT1JFQTpLeW9uZ3NhbmduYW0tRG86S09SLkwyLjI4NQorMzpLUjpLT1I6U09VVEggS09SRUE6S3lvbmdzYW5nbmFtLURvOktPUi5MMi4yODYKKzQ6S1I6S09SOlNPVVRIIEtPUkVBOkt5b25nc2FuZ25hbS1EbzpLT1IuTDIuMjg3Cis1OktSOktPUjpTT1VUSCBLT1JFQTpLeW9uZ3NhbmduYW0tRG86S09SLkwyLjI4OAorNjpLUjpLT1I6U09VVEggS09SRUE6S3lvbmdzYW5nbmFtLURvOktPUi5MMi4yODkKKzc6S1I6S09SOlNPVVRIIEtPUkVBOkt5b25nc2FuZ25hbS1EbzpLT1IuTDIuMjkwCis4OktSOktPUjpTT1VUSCBLT1JFQTpLeW9uZ3NhbmduYW0tRG86S09SLkwyLjI5MQorOTpLUjpLT1I6U09VVEggS09SRUE6S3lvbmdzYW5nbmFtLURvOktPUi5MMi4yOTIKKzEwOktSOktPUjpTT1VUSCBLT1JFQTpLeW9uZ3NhbmduYW0tRG86S09SLkwyLjI5MworMTE6S1I6S09SOlNPVVRIIEtPUkVBOkt5b25nc2FuZ25hbS1EbzpLT1IuTDIuMjk0CisxMjpLUjpLT1I6U09VVEggS09SRUE6S3lvbmdzYW5nbmFtLURvOktPUi5MMi4yOTUKKzEzOktSOktPUjpTT1VUSCBLT1JFQTpLeW9uZ3NhbmduYW0tRG86S09SLkwyLjI5NgorMTQ6S1I6S09SOlNPVVRIIEtPUkVBOkt5b25nc2FuZ25hbS1EbzpLT1IuTDIuMjk3CisxNTpLUjpLT1I6U09VVEggS09SRUE6S3lvbmdzYW5nbmFtLURvOktPUi5MMi4yOTgKKzE2OktSOktPUjpTT1VUSCBLT1JFQTpLeW9uZ3NhbmduYW0tRG86S09SLkwyLjI5OQorMTc6S1I6S09SOlNPVVRIIEtPUkVBOkt5b25nc2FuZ25hbS1EbzpLT1IuTDIuMzAwCisxODpLUjpLT1I6U09VVEggS09SRUE6S3lvbmdzYW5nbmFtLURvOktPUi5MMi4zMDEKKzE5OktSOktPUjpTT1VUSCBLT1JFQTpLeW9uZ3NhbmduYW0tRG86S09SLkwyLjMwMgorMjA6S1I6S09SOlNPVVRIIEtPUkVBOkt5b25nc2FuZ25hbS1EbzpLT1IuTDIuMzAzCisyMTpLUjpLT1I6U09VVEggS09SRUE6S3lvbmdzYW5nbmFtLURvOktPUi5MMi4zMDQKKzIyOktSOktPUjpTT1VUSCBLT1JFQTpLeW9uZ3NhbmduYW0tRG86S09SLkwyLjMwNQorMjM6S1I6S09SOlNPVVRIIEtPUkVBOkt5b25nc2FuZ25hbS1EbzpLT1IuTDIuMzA2CisyNDpLUjpLT1I6U09VVEggS09SRUE6S3lvbmdzYW5nbmFtLURvOktPUi5MMi4zMDcKKzI1OktSOktPUjpTT1VUSCBLT1JFQTpLeW9uZ3NhbmduYW0tRG86S09SLkwyLjMwOAorMjY6S1I6S09SOlNPVVRIIEtPUkVBOkt5b25nc2FuZ25hbS1EbzpLT1IuTDIuMzA5CisyNzpLUjpLT1I6U09VVEggS09SRUE6S3lvbmdzYW5nbmFtLURvOktPUi5MMi4zMTAKKzI4OktSOktPUjpTT1VUSCBLT1JFQTpLeW9uZ3NhbmduYW0tRG86S09SLkwyLjMxMQorMjk6S1I6S09SOlNPVVRIIEtPUkVBOkt5b25nc2FuZ25hbS1EbzpLT1IuTDIuMzEyCiszMDpLUjpLT1I6U09VVEggS09SRUE6S3lvbmdzYW5nbmFtLURvOktPUi5MMi4zMTMKKzMxOktSOktPUjpTT1VUSCBLT1JFQTpLeW9uZ3NhbmduYW0tRG86S09SLkwyLjMxNAorMzI6S1I6S09SOlNPVVRIIEtPUkVBOkt5b25nc2FuZ25hbS1EbzpLT1IuTDIuMzE1CiszMzpLUjpLT1I6U09VVEggS09SRUE6S3lvbmdzYW5nbmFtLURvOktPUi5MMi4zMTYKKzM0OktSOktPUjpTT1VUSCBLT1JFQTpLeW9uZ3NhbmduYW0tRG86S09SLkwyLjMxNworMzU6S1I6S09SOlNPVVRIIEtPUkVBOkt5b25nc2FuZ25hbS1EbzpLT1IuTDIuMzE4CiszNjpLUjpLT1I6U09VVEggS09SRUE6S3lvbmdzYW5nbmFtLURvOktPUi5MMi4zMTkKKzM3OktSOktPUjpTT1VUSCBLT1JFQTpLeW9uZ3NhbmduYW0tRG86S09SLkwyLjMyMAorMzg6S1I6S09SOlNPVVRIIEtPUkVBOkt5b25nc2FuZ25hbS1EbzpLT1IuTDIuMzIxCiszOTpLUjpLT1I6U09VVEggS09SRUE6S3lvbmdzYW5nbmFtLURvOktPUi5MMi4zMjIKKzQwOktSOktPUjpTT1VUSCBLT1JFQTpLeW9uZ3NhbmduYW0tRG86S09SLkwyLjMyMworNDE6S1I6S09SOlNPVVRIIEtPUkVBOkt5b25nc2FuZ25hbS1EbzpLT1IuTDIuMzI0Cis0MjpLUjpLT1I6U09VVEggS09SRUE6S3lvbmdzYW5nbmFtLURvOktPUi5MMi4zMjUKKzQzOktSOktPUjpTT1VUSCBLT1JFQTpLeW9uZ3NhbmduYW0tRG86S09SLkwyLjMyNgorNDQ6S1I6S09SOlNPVVRIIEtPUkVBOkt5b25nc2FuZ25hbS1EbzpLT1IuTDIuMzI3CisxOktSOktPUjpTT1VUSCBLT1JFQTpUYWVndTpLT1IuTDIuMTUKKzE6S1I6S09SOlNPVVRIIEtPUkVBOkt5b25nc2FuZ2J1ay1EbzpLT1IuTDIuMTgKKzI6S1I6S09SOlNPVVRIIEtPUkVBOkt5b25nc2FuZ2J1ay1EbzpLT1IuTDIuMTkKKzE6S1I6S09SOlNPVVRIIEtPUkVBOkthbmctV29uLURvOktPUi5MMi4zNQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L0tXVC9LV1RfQURNSU4xX0xFWC50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvS1dUL0tXVF9BRE1JTjFfTEVYLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYjJkODQ1Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L0tXVC9LV1RfQURNSU4xX0xFWC50eHQKQEAgLTAsMCArMSw2IEBACisxOktXLUFIOktXOkFMIEFNQURJCisyOktXLUZBOktXOkFMIEZBUldBTklZQUgKKzM6S1ctSkE6S1c6QUwgSkFIUkFICis0OktXLUtVOktXOkFMIEtVV0FZVAorNTpLVy1IQTpLVzpBV0FMTEkKKzY6S1ctSzpLVzpLVVdBSVQKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9LV1QvS1dUX0FETUlOMl9MRVgudHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L0tXVC9LV1RfQURNSU4yX0xFWC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjE3ODE1OQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9LV1QvS1dUX0FETUlOMl9MRVgudHh0CkBAIC0wLDAgKzEsMTAgQEAKKzE6S1c6S1dUOktVV0FJVDpLdXdhaXQ6S1dULkwyLjEKKzI6S1c6S1dUOktVV0FJVDpLdXdhaXQ6S1dULkwyLjEwCiszOktXOktXVDpLVVdBSVQ6S3V3YWl0OktXVC5MMi4yCis0OktXOktXVDpLVVdBSVQ6S3V3YWl0OktXVC5MMi4zCis1OktXOktXVDpLVVdBSVQ6S3V3YWl0OktXVC5MMi40Cis2OktXOktXVDpLVVdBSVQ6S3V3YWl0OktXVC5MMi41Cis3OktXOktXVDpLVVdBSVQ6S3V3YWl0OktXVC5MMi42Cis4OktXOktXVDpLVVdBSVQ6S3V3YWl0OktXVC5MMi43Cis5OktXOktXVDpLVVdBSVQ6S3V3YWl0OktXVC5MMi44CisxMDpLVzpLV1Q6S1VXQUlUOkt1d2FpdDpLV1QuTDIuOQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L0xBTy9MQU9fQURNSU4xX0xFWC50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvTEFPL0xBT19BRE1JTjFfTEVYLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42OTUzNTMwCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L0xBTy9MQU9fQURNSU4xX0xFWC50eHQKQEAgLTAsMCArMSwyMSBAQAorMTpMQS1BVDpMQTpBVFRPUFUKKzI6TEEtQks6TEE6Qk9LRU8KKzM6TEEtQkw6TEE6Qk9MSUtIQU1TQUkKKzQ6TEEtQ0g6TEE6Q0hBTVBBU1NBQ0sKKzU6TEEtSE86TEE6SE9VQVBIQU5ICis2OkxBLUtIOkxBOktIQU1NT1VBTgorNzpMQS1LSzpMQTpLSEFNTU9VQU5FCis4OkxBLUxQOkxBOkxVQU5HIFBSQUJBTkcKKzk6TEEtTE06TEE6TkFNVEhBCisxMDpMQS1PVTpMQTpPVURPTVhBWQorMTE6TEEtUEg6TEE6UEhPTkdTQUxZCisxMjpMQS1TTDpMQTpTQUxBVkFOIFtTQVJBVkFORV0KKzEzOkxBLVNSOkxBOlNBUkFWQU5FCisxNDpMQS1TVjpMQTpTQVZBTk5BS0hFVAorMTU6TEEtWEE6TEE6U0FZQUJPVVJJCisxNjpMQS1YRTpMQTpTRUtPTkcKKzE3OkxBLVZUOkxBOlZJRU5USUFORQorMTg6TEEtVkk6TEE6VklFTlRJQU5FIChNVU5JQy4pCisxOTpMQS1WSTI6TEE6VklFTlRJQU5FIDIKKzIwOkxBLVhOOkxBOlhBSVNPTUJPVU4KKzIxOkxBLVhJOkxBOlhJQU5HS0hPVUFORwpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L0xBTy9MQU9fQURNSU4yX0xFWC50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvTEFPL0xBT19BRE1JTjJfTEVYLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYjYyZDU0Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L0xBTy9MQU9fQURNSU4yX0xFWC50eHQKQEAgLTAsMCArMSwxMzMgQEAKKzE6TEE6TEFPOkxBT1M6Qm9saWtoYW1zYWk6Qm9yaWtoYW5lCisyOkxBOkxBTzpMQU9TOkJvbGlraGFtc2FpOktoYW1rZXV0CiszOkxBOkxBTzpMQU9TOkJvbGlraGFtc2FpOlBha2thZGluZworNDpMQTpMQU86TEFPUzpCb2xpa2hhbXNhaTpQYWtzYW5lCis1OkxBOkxBTzpMQU9TOkJvbGlraGFtc2FpOlRoYXBoYWJhdAorNjpMQTpMQU86TEFPUzpCb2xpa2hhbXNhaTpWaWVuZ3Rob25nCisxOkxBOkxBTzpMQU9TOkF0dG9wdTpQaG91dm9uZworMjpMQTpMQU86TEFPUzpBdHRvcHU6U2FtYWtraGl4YXkKKzM6TEE6TEFPOkxBT1M6QXR0b3B1OlNhbmFteGF5Cis0OkxBOkxBTzpMQU9TOkF0dG9wdTpTYW54YXkKKzU6TEE6TEFPOkxBT1M6QXR0b3B1OlNheXNldHRoYQorMTpMQTpMQU86TEFPUzpWaWVudGlhbmUgKE11bmljLik6Q2hhbnRoYWJvdXJ5CisyOkxBOkxBTzpMQU9TOlZpZW50aWFuZSAoTXVuaWMuKTpIYXRzYXlwaG9uZworMzpMQTpMQU86TEFPUzpWaWVudGlhbmUgKE11bmljLik6TmF4YXl0aG9uZworNDpMQTpMQU86TEFPUzpWaWVudGlhbmUgKE11bmljLik6UGFrIE5ndW0KKzU6TEE6TEFPOkxBT1M6VmllbnRpYW5lIChNdW5pYy4pOlNhbmd0aG9uZworNjpMQTpMQU86TEFPUzpWaWVudGlhbmUgKE11bmljLik6U2F5c2V0dGhhCis3OkxBOkxBTzpMQU9TOlZpZW50aWFuZSAoTXVuaWMuKTpTaWtob3R0YWJvbmcKKzg6TEE6TEFPOkxBT1M6VmllbnRpYW5lIChNdW5pYy4pOlNpc2F0dGFuYWNrCis5OkxBOkxBTzpMQU9TOlZpZW50aWFuZSAoTXVuaWMuKTpYYXl0aGFueQorMTpMQTpMQU86TEFPUzpOYW10aGE6TG9uZworMjpMQTpMQU86TEFPUzpOYW10aGE6TmEgTGUKKzM6TEE6TEFPOkxBT1M6TmFtdGhhOk5hbXRoYQorNDpMQTpMQU86TEFPUzpOYW10aGE6U2luZworNTpMQTpMQU86TEFPUzpOYW10aGE6VmllbmdwaG91a2hhCisxOkxBOkxBTzpMQU9TOkJva2VvOkhvdWF5IFhheQorMjpMQTpMQU86TEFPUzpCb2tlbzpNZXVuZworMzpMQTpMQU86TEFPUzpCb2tlbzpQYWsgVGhhCis0OkxBOkxBTzpMQU9TOkJva2VvOlBoYSBPdWRvbQorNTpMQTpMQU86TEFPUzpCb2tlbzpUb24gUGhldW5nCisxOkxBOkxBTzpMQU9TOlZpZW50aWFuZSAyOkhvbQorMjpMQTpMQU86TEFPUzpWaWVudGlhbmUgMjpMb25nc2FuZQorMzpMQTpMQU86TEFPUzpWaWVudGlhbmUgMjpQaG91bmUKKzQ6TEE6TEFPOkxBT1M6VmllbnRpYW5lIDI6U2F5c29tYm91bmUKKzU6TEE6TEFPOkxBT1M6VmllbnRpYW5lIDI6VGhhdGhvbWUKKzE6TEE6TEFPOkxBT1M6U2Vrb25nOkRhY2sgQ2hldW5nCisyOkxBOkxBTzpMQU9TOlNla29uZzpLYWxldW0KKzM6TEE6TEFPOkxBT1M6U2Vrb25nOkxhIE1hbQorNDpMQTpMQU86TEFPUzpTZWtvbmc6VGhhIFRlbmcKKzE6TEE6TEFPOkxBT1M6U2F5YWJvdXJpOkJvdGVuCisyOkxBOkxBTzpMQU9TOlNheWFib3VyaTpIb25nc2EKKzM6TEE6TEFPOkxBT1M6U2F5YWJvdXJpOktlbmV0aGFvCis0OkxBOkxBTzpMQU9TOlNheWFib3VyaTpLaG9iCis1OkxBOkxBTzpMQU9TOlNheWFib3VyaTpOZ2V1bmUKKzY6TEE6TEFPOkxBT1M6U2F5YWJvdXJpOlBhayBMYXkKKzc6TEE6TEFPOkxBT1M6U2F5YWJvdXJpOlBoaWVuZworODpMQTpMQU86TEFPUzpTYXlhYm91cmk6U2F5YWJvdXJ5Cis5OkxBOkxBTzpMQU9TOlNheWFib3VyaTpYaWVuZyBIb24KKzE6TEE6TEFPOkxBT1M6WGlhbmdraG91YW5nOktoYW0KKzI6TEE6TEFPOkxBT1M6WGlhbmdraG91YW5nOktob3VuZQorMzpMQTpMQU86TEFPUzpYaWFuZ2tob3Vhbmc6TW9rIE1heQorNDpMQTpMQU86TEFPUzpYaWFuZ2tob3Vhbmc6Tm9uZyBIZXQKKzU6TEE6TEFPOkxBT1M6WGlhbmdraG91YW5nOlBlaworNjpMQTpMQU86TEFPUzpYaWFuZ2tob3Vhbmc6UGhheGF5Cis3OkxBOkxBTzpMQU9TOlhpYW5na2hvdWFuZzpQaG91IEtvdXQKKzE6TEE6TEFPOkxBT1M6THVhbmcgUHJhYmFuZzpDaG9tcGhldAorMjpMQTpMQU86TEFPUzpMdWFuZyBQcmFiYW5nOkx1YW5nIFByYWJhbmcKKzM6TEE6TEFPOkxBT1M6THVhbmcgUHJhYmFuZzpOYW0gQmFrCis0OkxBOkxBTzpMQU9TOkx1YW5nIFByYWJhbmc6TmFuZQorNTpMQTpMQU86TEFPUzpMdWFuZyBQcmFiYW5nOk5nb3kKKzY6TEE6TEFPOkxBT1M6THVhbmcgUHJhYmFuZzpQYWsgT3UKKzc6TEE6TEFPOkxBT1M6THVhbmcgUHJhYmFuZzpQYWsgU2VuZworODpMQTpMQU86TEFPUzpMdWFuZyBQcmFiYW5nOlBob254YXkKKzk6TEE6TEFPOkxBT1M6THVhbmcgUHJhYmFuZzpQaG91a2hvdW5lCisxMDpMQTpMQU86TEFPUzpMdWFuZyBQcmFiYW5nOlZpZW5na2hhbQorMTE6TEE6TEFPOkxBT1M6THVhbmcgUHJhYmFuZzpYaWVuZ25nZXVuCisxOkxBOkxBTzpMQU9TOlBob25nc2FseTpCb3VuIE5ldWEKKzI6TEE6TEFPOkxBT1M6UGhvbmdzYWx5OkJvdW4gVGF5CiszOkxBOkxBTzpMQU9TOlBob25nc2FseTpLaG91YQorNDpMQTpMQU86TEFPUzpQaG9uZ3NhbHk6TWF5Cis1OkxBOkxBTzpMQU9TOlBob25nc2FseTpQaG9uZ3NhbHkKKzY6TEE6TEFPOkxBT1M6UGhvbmdzYWx5OlNhbXBoYW5oCis3OkxBOkxBTzpMQU9TOlBob25nc2FseTpZb3QgT3UKKzE6TEE6TEFPOkxBT1M6U2FyYXZhbmU6S2hvbmdzZWRvbmUKKzI6TEE6TEFPOkxBT1M6U2FyYXZhbmU6TGFraG9uZXBoZW5nCiszOkxBOkxBTzpMQU9TOlNhcmF2YW5lOkxhbyBOZ2FtCis0OkxBOkxBTzpMQU9TOlNhcmF2YW5lOlNhIE1vdWF5Cis1OkxBOkxBTzpMQU9TOlNhcmF2YW5lOlNhcmF2YW5lCis2OkxBOkxBTzpMQU9TOlNhcmF2YW5lOlRhIE95Cis3OkxBOkxBTzpMQU9TOlNhcmF2YW5lOlRvdW1sYW5lCis4OkxBOkxBTzpMQU9TOlNhcmF2YW5lOlZhcHkKKzE6TEE6TEFPOkxBT1M6SG91YXBoYW5oOkhvdWFtZXVhbmcKKzI6TEE6TEFPOkxBT1M6SG91YXBoYW5oOlNhbW5ldWEKKzM6TEE6TEFPOkxBT1M6SG91YXBoYW5oOlNhbXRheQorNDpMQTpMQU86TEFPUzpIb3VhcGhhbmg6Vmllbmd0aG9uZworNTpMQTpMQU86TEFPUzpIb3VhcGhhbmg6Vmllbmd4YXkKKzY6TEE6TEFPOkxBT1M6SG91YXBoYW5oOlhpZW5na2hvCisxOkxBOkxBTzpMQU9TOlZpZW50aWFuZTpLYXN5CisyOkxBOkxBTzpMQU9TOlZpZW50aWFuZTpLZW9vdWRvbQorMzpMQTpMQU86TEFPUzpWaWVudGlhbmU6UGhldWFuZworNDpMQTpMQU86TEFPUzpWaWVudGlhbmU6UGhvbGhvbmcKKzU6TEE6TEFPOkxBT1M6VmllbnRpYW5lOlNhbmFraGFtCis2OkxBOkxBTzpMQU9TOlZpZW50aWFuZTpUaG91bGFraG9tCis3OkxBOkxBTzpMQU9TOlZpZW50aWFuZTpWYW5ndmllbmcKKzE6TEE6TEFPOkxBT1M6S2hhbW1vdWFuZTpCb3VhbGFwaGEKKzI6TEE6TEFPOkxBT1M6S2hhbW1vdWFuZTpIaW5lYm91bmUKKzM6TEE6TEFPOkxBT1M6S2hhbW1vdWFuZTpNYWhheGF5Cis0OkxBOkxBTzpMQU9TOktoYW1tb3VhbmU6TmFrYWkKKzU6TEE6TEFPOkxBT1M6S2hhbW1vdWFuZTpOb25nIEJvaworNjpMQTpMQU86TEFPUzpLaGFtbW91YW5lOlNheWJvdWF0aG9uZworNzpMQTpMQU86TEFPUzpLaGFtbW91YW5lOlNlYmFuZ3BoYXkKKzg6TEE6TEFPOkxBT1M6S2hhbW1vdWFuZTpUaGFraGVrCis5OkxBOkxBTzpMQU9TOktoYW1tb3VhbmU6WW9tbWFsYXRoCisxOkxBOkxBTzpMQU9TOkNoYW1wYXNzYWNrOkJhdGllbmdjaGFsZXVuc291aworMjpMQTpMQU86TEFPUzpDaGFtcGFzc2FjazpDaGFtcGFzc2FjaworMzpMQTpMQU86TEFPUzpDaGFtcGFzc2FjazpLaG9uZworNDpMQTpMQU86TEFPUzpDaGFtcGFzc2FjazpNb3VubGFwYW1vaworNTpMQTpMQU86TEFPUzpDaGFtcGFzc2FjazpQYWsgU2UKKzY6TEE6TEFPOkxBT1M6Q2hhbXBhc3NhY2s6UGFrc29uZworNzpMQTpMQU86TEFPUzpDaGFtcGFzc2FjazpQYXRob3VwaG9uZQorODpMQTpMQU86TEFPUzpDaGFtcGFzc2FjazpQaG9udGhvbmcKKzk6TEE6TEFPOkxBT1M6Q2hhbXBhc3NhY2s6U2FuYXNvbWJvdW5lCisxMDpMQTpMQU86TEFPUzpDaGFtcGFzc2FjazpTb3VraG91bW1hCisxOkxBOkxBTzpMQU9TOlNhdmFubmFraGV0OkFzc2FwaG9uZQorMjpMQTpMQU86TEFPUzpTYXZhbm5ha2hldDpBdHNhcGhhbmd0aG9uZworMzpMQTpMQU86TEFPUzpTYXZhbm5ha2hldDpDaGFtcGhvbmUKKzQ6TEE6TEFPOkxBT1M6U2F2YW5uYWtoZXQ6S2hhbnRoYWJvdXJ5Cis1OkxBOkxBTzpMQU9TOlNhdmFubmFraGV0Ok5vbmcKKzY6TEE6TEFPOkxBT1M6U2F2YW5uYWtoZXQ6T3V0aG91bXBob25lCis3OkxBOkxBTzpMQU9TOlNhdmFubmFraGV0OlBoaW5lCis4OkxBOkxBTzpMQU9TOlNhdmFubmFraGV0OlNlcG9uaAorOTpMQTpMQU86TEFPUzpTYXZhbm5ha2hldDpTb25na2hvbmUKKzEwOkxBOkxBTzpMQU9TOlNhdmFubmFraGV0OlRoYXBhbmd0aG9uZworMTE6TEE6TEFPOkxBT1M6U2F2YW5uYWtoZXQ6VmlyYWJvdXJ5CisxMjpMQTpMQU86TEFPUzpTYXZhbm5ha2hldDpYYXlib3VyeQorMTM6TEE6TEFPOkxBT1M6U2F2YW5uYWtoZXQ6WG9uYm91cnkKKzE6TEE6TEFPOkxBT1M6T3Vkb214YXk6QmVuZworMjpMQTpMQU86TEFPUzpPdWRvbXhheTpIb3VuZQorMzpMQTpMQU86TEFPUzpPdWRvbXhheTpMYQorNDpMQTpMQU86TEFPUzpPdWRvbXhheTpOYSBNbworNTpMQTpMQU86TEFPUzpPdWRvbXhheTpOZ2EKKzY6TEE6TEFPOkxBT1M6T3Vkb214YXk6UGFrIEJlbmcKKzc6TEE6TEFPOkxBT1M6T3Vkb214YXk6WGF5CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvTEJOL0xCTl9BRE1JTjFfTEVYLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9MQk4vTEJOX0FETUlOMV9MRVgudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJhMThjMmEKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvTEJOL0xCTl9BRE1JTjFfTEVYLnR4dApAQCAtMCwwICsxLDcgQEAKKzE6TEItQkE6TEI6QkVJUk9VVAorMjpMQi1CSTpMQjpFTCBCRVFBQQorMzpMQi1KTDpMQjpKQUJBTCBMT1VCTkFORQorNDpMQi1MOkxCOkxFQkFOT04KKzU6TEItQVM6TEI6TE9VQk5BTkUgRUNIIENIRU1BTEkKKzY6TEItSkE6TEI6TE9VQk5BTkUgRUogSk5PVUJJCis3OkxCLU5BOkxCOk5BQkFUSVlFCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvTEJOL0xCTl9BRE1JTjJfTEVYLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9MQk4vTEJOX0FETUlOMl9MRVgudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFlZTRiZjcKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvTEJOL0xCTl9BRE1JTjJfTEVYLnR4dApAQCAtMCwwICsxIEBACisxOkxCOkxCTjpMRUJBTk9OOkxlYmFub246TEJOLkwyLjEKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9MQlIvTEJSX0FETUlOMV9MRVgudHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L0xCUi9MQlJfQURNSU4xX0xFWC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWZhNWIyMAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9MQlIvTEJSX0FETUlOMV9MRVgudHh0CkBAIC0wLDAgKzEsMTUgQEAKKzE6TFItQk06TFI6Qk9NSSBURVJSLgorMjpMUi1CRzpMUjpCT05HCiszOkxSLUdCOkxSOkdSQU5EIEJBU1NBCis0OkxSLUNNOkxSOkdSQU5EIENBUEUgTU9VTlQKKzU6TFItR0c6TFI6R1JBTkQgR0VERUgKKzY6TFItR0s6TFI6S1JVIENPQVNUIFRFUlIuCis3OkxSLUxPOkxSOkxPRkEKKzg6TFItTUc6TFI6TUFSR0lCSQorOTpMUi1NUjpMUjpNQVJTSEFMTCBURVJSLgorMTA6TFItTVk6TFI6TUFSWUxBTkQKKzExOkxSLU1POkxSOk1PTlRTRVJSQURPCisxMjpMUi1OSTpMUjpOSU1CQQorMTM6TFItUkk6TFI6UklWRVJDRVNTIFRFUlIuCisxNDpMUi1TQTpMUjpTQVNTVE9XTiBURVJSLgorMTU6TFItU0k6TFI6U0lOT0UKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9MQlIvTEJSX0FETUlOMl9MRVgudHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L0xCUi9MQlJfQURNSU4yX0xFWC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTBlNWFiZQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9MQlIvTEJSX0FETUlOMl9MRVgudHh0CkBAIC0wLDAgKzEsNTQgQEAKKzE6TFI6TEJSOkxJQkVSSUE6TWFyc2hhbGwgVGVyci46TWFtYmEgS2FiYQorMjpMUjpMQlI6TElCRVJJQTpNYXJzaGFsbCBUZXJyLjpNYXJzaGFsbAorMTpMUjpMQlI6TElCRVJJQTpNb250c2VycmFkbzpDYXJleXNidXJnCisyOkxSOkxCUjpMSUJFUklBOk1vbnRzZXJyYWRvOkZpcmVzdG9uZQorMzpMUjpMQlI6TElCRVJJQTpNb250c2VycmFkbzpLYWthdGEKKzQ6TFI6TEJSOkxJQkVSSUE6TW9udHNlcnJhZG86TW9ucm92aWEKKzU6TFI6TEJSOkxJQkVSSUE6TW9udHNlcnJhZG86U3QuIFBhdWwgUml2ZXIKKzY6TFI6TEJSOkxJQkVSSUE6TW9udHNlcnJhZG86VG9kZWUKKzE6TFI6TEJSOkxJQkVSSUE6TWFyeWxhbmQ6QnVhaAorMjpMUjpMQlI6TElCRVJJQTpNYXJ5bGFuZDpIYXJwZXIKKzM6TFI6TEJSOkxJQkVSSUE6TWFyeWxhbmQ6UGxlYm8KKzE6TFI6TEJSOkxJQkVSSUE6R3JhbmQgQmFzc2E6Tm8uIDEKKzI6TFI6TEJSOkxJQkVSSUE6R3JhbmQgQmFzc2E6Tm8uIDIKKzM6TFI6TEJSOkxJQkVSSUE6R3JhbmQgQmFzc2E6Tm8uIDMKKzQ6TFI6TEJSOkxJQkVSSUE6R3JhbmQgQmFzc2E6Tm8uIDQKKzU6TFI6TEJSOkxJQkVSSUE6R3JhbmQgQmFzc2E6Tm8uIDUgQnVjaGFuYW4KKzE6TFI6TEJSOkxJQkVSSUE6R3JhbmQgR2VkZWg6R2JhcnpvbgorMjpMUjpMQlI6TElCRVJJQTpHcmFuZCBHZWRlaDpHYmVhcG8KKzM6TFI6TEJSOkxJQkVSSUE6R3JhbmQgR2VkZWg6S29ub2JvCis0OkxSOkxCUjpMSUJFUklBOkdyYW5kIEdlZGVoOlRjaGllbgorNTpMUjpMQlI6TElCRVJJQTpHcmFuZCBHZWRlaDpXZWJibworMTpMUjpMQlI6TElCRVJJQTpHcmFuZCBDYXBlIE1vdW50OkdhcndsYQorMjpMUjpMQlI6TElCRVJJQTpHcmFuZCBDYXBlIE1vdW50OlBvcmtwYWEKKzM6TFI6TEJSOkxJQkVSSUE6R3JhbmQgQ2FwZSBNb3VudDpSb2JlcnRzcG9ydAorNDpMUjpMQlI6TElCRVJJQTpHcmFuZCBDYXBlIE1vdW50OlRld29yCisxOkxSOkxCUjpMSUJFUklBOlNpbm9lOkJsb25pIFNpbm9lCisyOkxSOkxCUjpMSUJFUklBOlNpbm9lOkdyZWVudmlsbGUKKzM6TFI6TEJSOkxJQkVSSUE6U2lub2U6SnVhcnpvbiBTaW5vZQorNDpMUjpMQlI6TElCRVJJQTpTaW5vZTpKdWFyem9uIFN1YgorNTpMUjpMQlI6TElCRVJJQTpTaW5vZTpTaW5vZSBSaXZlciBTb2JvCisxOkxSOkxCUjpMSUJFUklBOlNhc3N0b3duIFRlcnIuOkplb2gKKzE6TFI6TEJSOkxJQkVSSUE6Qm9uZzpHYmFybmdhCisyOkxSOkxCUjpMSUJFUklBOkJvbmc6R2liaQorMzpMUjpMQlI6TElCRVJJQTpCb25nOktva295YWgKKzQ6TFI6TEJSOkxJQkVSSUE6Qm9uZzpTYWxhbGEKKzU6TFI6TEJSOkxJQkVSSUE6Qm9uZzpTYW5veWVhCisxOkxSOkxCUjpMSUJFUklBOkJvbWkgVGVyci46S2xheQorMjpMUjpMQlI6TElCRVJJQTpCb21pIFRlcnIuOk1lY2NhCisxOkxSOkxCUjpMSUJFUklBOk5pbWJhOkdiZWhsYXkKKzI6TFI6TEJSOkxJQkVSSUE6TmltYmE6U2FjbGVwZWEKKzM6TFI6TEJSOkxJQkVSSUE6TmltYmE6U2FubmlxdWVsbGllCis0OkxSOkxCUjpMSUJFUklBOk5pbWJhOlRhcHBpdGEKKzU6TFI6TEJSOkxJQkVSSUE6TmltYmE6WWFyd2VpbiBNZW5zb25uLgorNjpMUjpMQlI6TElCRVJJQTpOaW1iYTpab2UgR2VoCisxOkxSOkxCUjpMSUJFUklBOktydSBDb2FzdCBUZXJyLjpMb3dlIEtydSBDb2FzdAorMjpMUjpMQlI6TElCRVJJQTpLcnUgQ29hc3QgVGVyci46VXBwZXIgS3J1IENvYXN0CisxOkxSOkxCUjpMSUJFUklBOkxvZmE6Qm9wb2x1CisyOkxSOkxCUjpMSUJFUklBOkxvZmE6R2Jhcm1hCiszOkxSOkxCUjpMSUJFUklBOkxvZmE6R3VtYQorNDpMUjpMQlI6TElCRVJJQTpMb2ZhOktvbGFodW4KKzU6TFI6TEJSOkxJQkVSSUE6TG9mYTpWb2luamFtYQorNjpMUjpMQlI6TElCRVJJQTpMb2ZhOlpvcnpvcgorMTpMUjpMQlI6TElCRVJJQTpSaXZlcmNlc3MgVGVyci46TW9yd2VoIE5vLiA1QgorMjpMUjpMQlI6TElCRVJJQTpSaXZlcmNlc3MgVGVyci46VGltYm8gTm8uIDVBCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvTEJZL0xCWV9BRE1JTjFfTEVYLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9MQlkvTEJZX0FETUlOMV9MRVgudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJlMjc2YTMKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvTEJZL0xCWV9BRE1JTjFfTEVYLnR4dApAQCAtMCwwICsxLDUyIEBACisxOkxZLVNTOkxZOkFCUlRBSCBVUk1OCisyOkxZLUFESjpMWTpBSkRBQklZQSAoQUdFREFCSUEpCiszOkxZLUFKOkxZOkFKREJJWQorNDpMWS1BWlk6TFk6QUwgQVpJWklZQUgKKzU6TFktQlU6TFk6QUwgQlVOTgorNjpMWS1GVEg6TFk6QUwgRkFUQUgKKzc6TFktSFo6TFk6QUwgSVpNIEFMIEFLSEFSCis4OkxZLUpBOkxZOkFMIEpBQkFMIEFMIEFLSERBUgorOTpMWS1KSTpMWTpBTCBKSUZSQUgKKzEwOkxZLUpVOkxZOkFMIEpVRlJBSAorMTE6TFktS0hPOkxZOkFMIEtIT01TCisxMjpMWS1LRjpMWTpBTCBLVUZSQUgKKzEzOkxZLU1KOkxZOkFMIE1BUkoKKzE0OkxZLU1COkxZOkFMIE1BUlFBQgorMTU6TFktUVQ6TFk6QUwgUUFSTgorMTY6TFktUUI6TFk6QUwgUVVCQkFICisxNzpMWS1XQTpMWTpBTCBXQUgKKzE4OkxZLU5ROkxZOkFOIE5VUUEgQUwgS0hBTVMKKzE5OkxZLVRCOkxZOkFSQlVMVVMKKzIwOkxZLUFTSDpMWTpBU0ggU0hBVEkKKzIxOkxZLVNIOkxZOkFTSCBTSEkKKzIyOkxZLUFXQjpMWTpBV0JBUkkgKFVCQVJJKQorMjM6TFktWkE6TFk6QVogWkFXSUEgKEFaWkFXSVlBKQorMjQ6TFktQlc6TFk6QkFOIFdBTEQKKzI1OkxZLUJBOkxZOkJBTkdIQVpJCisyNjpMWS1EUjpMWTpEQVJOQUgKKzI3OkxZLUdIQTpMWTpHSEFEQU1JUworMjg6TFktR0Q6TFk6R0hBRE1JUworMjk6TFktR1JZOkxZOkdIQVJZQU4KKzMwOkxZLUdSOkxZOkdIQVJZTgorMzE6TFktR1Q6TFk6R0hUCiszMjpMWS1KQjpMWTpKQUdIQkIKKzMzOkxZLU1JOkxZOk1JUlRBSAorMzQ6TFktTUlTOkxZOk1JU1VSQVRBCiszNTpMWS1NWjpMWTpNSVpEQUgKKzM2OkxZLU1ROkxZOk1VUlpVUQorMzc6TFktTkw6TFk6TkxUCiszODpMWS1OVUc6TFk6TlVRQVQgQUwgS0hBTVMKKzM5OkxZLVNCOkxZOlNBQkgKKzQwOkxZLVNBQjpMWTpTQUJIQQorNDE6TFktU0FXOkxZOlNBV0ZBSkpJTiAoU09GVUxKRUVOKQorNDI6TFktU1I6TFk6U1VSVAorNDM6TFktU1VSOkxZOlNVUlQgKFNJUlRFKQorNDQ6TFktVE06TFk6VEFSSE5BSCBNQVNBTExUQUgKKzQ1OkxZLVRBUjpMWTpUQVJIVU5BSAorNDY6TFktVE46TFk6VEpSIFdBIEFOIE5BVyBBUkIKKzQ3OkxZLVRSSTpMWTpUUklQT0xJIChUQVJBQlVMVVMpCis0ODpMWS1UVUI6TFk6VFVCUlVRIChUT0JSVUspCis0OTpMWS1XRDpMWTpXRCBBTCBBWVQKKzUwOkxZLVlBRjpMWTpZQUZSQU4gKFlFRlJFTikKKzUxOkxZLVlKOkxZOllBRlJBTiBKRAorNTI6TFktWkVMOkxZOlpFTEVJVElOIChaTElURU4pCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvTEJZL0xCWV9BRE1JTjJfTEVYLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9MQlkvTEJZX0FETUlOMl9MRVgudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJmNWJhNTYKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvTEJZL0xCWV9BRE1JTjJfTEVYLnR4dApAQCAtMCwwICsxLDI1IEBACisxOkxZOkxCWTpMSUJZQTpNdXJ6dXE6Ti5BCisxOkxZOkxCWTpMSUJZQTpHaGFkYW1pczpOLkEKKzE6TFk6TEJZOkxJQllBOkFsIEZhdGFoOk4uQQorMTpMWTpMQlk6TElCWUE6VGFyaHVuYWg6Ti5BCisxOkxZOkxCWTpMSUJZQTpBd2JhcmkgKFViYXJpKTpOLkEKKzE6TFk6TEJZOkxJQllBOkFsIEF6aXppeWFoOk4uQQorMTpMWTpMQlk6TElCWUE6WWFmcmFuIChZZWZyZW4pOk4uQQorMTpMWTpMQlk6TElCWUE6VHVicnVxIChUb2JydWspOk4uQQorMTpMWTpMQlk6TElCWUE6QXNoIFNoYXRpOk4uQQorMTpMWTpMQlk6TElCWUE6QWwgS3VmcmFoOk4uQQorMTpMWTpMQlk6TElCWUE6QWpkYWJpeWEgKEFnZWRhYmlhKTpOLkEKKzE6TFk6TEJZOkxJQllBOlplbGVpdGluIChabGl0ZW4pOk4uQQorMTpMWTpMQlk6TElCWUE6U2FiaGE6Ti5BCisxOkxZOkxCWTpMSUJZQTpBbCBKdWZyYWg6Ti5BCisxOkxZOkxCWTpMSUJZQTpBbCBLaG9tczpOLkEKKzE6TFk6TEJZOkxJQllBOkF6IFphd2lhIChBenphd2l5YSk6Ti5BCisxOkxZOkxCWTpMSUJZQTpEYXJuYWg6Ti5BCisxOkxZOkxCWTpMSUJZQTpTdXJ0IChTaXJ0ZSk6Ti5BCisxOkxZOkxCWTpMSUJZQTpUcmlwb2xpIChUYXJhYnVsdXMpOk4uQQorMTpMWTpMQlk6TElCWUE6QmFuZ2hhemk6Ti5BCisxOkxZOkxCWTpMSUJZQTpHaGFyeWFuOk4uQQorMTpMWTpMQlk6TElCWUE6TWlzdXJhdGE6Ti5BCisxOkxZOkxCWTpMSUJZQTpTYXdmYWpqaW4gKFNvZnVsamVlbik6Ti5BCisxOkxZOkxCWTpMSUJZQTpOdXFhdCBBbCBLaGFtczpOLkEKKzE6TFk6TEJZOkxJQllBOkFsIEphYmFsIEFsIEFraGRhcjpOLkEKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9MSUUvTElFX0FETUlOMV9MRVgudHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L0xJRS9MSUVfQURNSU4xX0xFWC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjU5YmJlYgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9MSUUvTElFX0FETUlOMV9MRVgudHh0CkBAIC0wLDAgKzEgQEAKKzE6TEktTElFOkxJOkxJQ0hURU5TVEVJTgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L0xJRS9MSUVfQURNSU4yX0xFWC50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvTElFL0xJRV9BRE1JTjJfTEVYLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNjlkZTI5Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L0xJRS9MSUVfQURNSU4yX0xFWC50eHQKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9MU08vTFNPX0FETUlOMV9MRVgudHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L0xTTy9MU09fQURNSU4xX0xFWC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGMwNTU5NgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9MU08vTFNPX0FETUlOMV9MRVgudHh0CkBAIC0wLDAgKzEsMTAgQEAKKzE6TFMtRDpMUzpCRVJFQQorMjpMUy1COkxTOkJVVEhBIEJVVEhFCiszOkxTLUM6TFM6TEVSSUJFCis0OkxTLUU6TFM6TUFGRVRFTkcKKzU6TFMtQTpMUzpNQVNFUlUKKzY6TFMtRjpMUzpNT0hBTEUnUyBIT0VLCis3OkxTLUo6TFM6TU9LSE9UTE9ORworODpMUy1IOkxTOlFVQUNIQSdTIE5FSworOTpMUy1HOkxTOlFVVEhJTkcKKzEwOkxTLUs6TFM6VEhBQkEgVFNFS0EKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9MU08vTFNPX0FETUlOMl9MRVgudHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L0xTTy9MU09fQURNSU4yX0xFWC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzViY2RlMAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9MU08vTFNPX0FETUlOMl9MRVgudHh0CkBAIC0wLDAgKzEsMTEgQEAKKzE6TFM6TFNPOkxFU09USE86TGVyaWJlOkxTTy5MMi41CisxOkxTOkxTTzpMRVNPVEhPOk1hZmV0ZW5nOkxTTy5MMi4xMAorMjpMUzpMU086TEVTT1RITzpNYWZldGVuZzpMU08uTDIuMTEKKzE6TFM6TFNPOkxFU09USE86TW9oYWxlJ1MgSG9lazpMU08uTDIuNgorMTpMUzpMU086TEVTT1RITzpNb2tob3Rsb25nOkxTTy5MMi40CisxOkxTOkxTTzpMRVNPVEhPOkJ1dGhhLUJ1dGhlOkxTTy5MMi43CisxOkxTOkxTTzpMRVNPVEhPOlF1dGhpbmc6TFNPLkwyLjMKKzE6TFM6TFNPOkxFU09USE86VGhhYmEgVHNla2E6TFNPLkwyLjEKKzE6TFM6TFNPOkxFU09USE86QmVyZWE6TFNPLkwyLjkKKzE6TFM6TFNPOkxFU09USE86TWFzZXJ1OkxTTy5MMi4yCisxOkxTOkxTTzpMRVNPVEhPOlF1YWNoYSdTIE5lazpMU08uTDIuOApkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L0xVWC9MVVhfQURNSU4xX0xFWC50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvTFVYL0xVWF9BRE1JTjFfTEVYLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZGVmNWUyCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L0xVWC9MVVhfQURNSU4xX0xFWC50eHQKQEAgLTAsMCArMSBAQAorMTpMVS1MOkxYOkxVWEVNQk9VUkcgKEdSQU5EIERVQ0hFKQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L0xVWC9MVVhfQURNSU4yX0xFWC50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvTFVYL0xVWF9BRE1JTjJfTEVYLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNjlkZTI5Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L0xVWC9MVVhfQURNSU4yX0xFWC50eHQKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9NQUMvTUFDX0FETUlOMV9MRVgudHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L01BQy9NQUNfQURNSU4xX0xFWC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWEzMTg3NgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9NQUMvTUFDX0FETUlOMV9MRVgudHh0CkBAIC0wLDAgKzEgQEAKKzE6TU8tTTpNTzpNQUNBVQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L01BQy9NQUNfQURNSU4yX0xFWC50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvTUFDL01BQ19BRE1JTjJfTEVYLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNDdjYzVlCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L01BQy9NQUNfQURNSU4yX0xFWC50eHQKQEAgLTAsMCArMSwzIEBACisxOk1POk1BQzpNQUNBVTpNYWNhdTpNQUMuTDIuMQorMjpNTzpNQUM6TUFDQVU6TWFjYXU6TUFDLkwyLjIKKzM6TU86TUFDOk1BQ0FVOk1hY2F1Ok1BQy5MMi4zCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvTUFSL01BUl9BRE1JTjFfTEVYLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9NQVIvTUFSX0FETUlOMV9MRVgudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYyMTU4ODcKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvTUFSL01BUl9BRE1JTjFfTEVYLnR4dApAQCAtMCwwICsxLDU4IEBACisxOk1BLUFHRDpNQTpBR0FESVIKKzI6TUEtQkFIOk1BOkFJVCBCQUhBCiszOk1BLU1FTDpNQTpBSVQgTUVMTE9VTAorNDpNQS1IQU86TUE6QUwgSEFPVVoKKzU6TUEtSE9DOk1BOkFMIEhPQ0VJTUEKKzY6TUEtQVNaOk1BOkFTU0EgWkFHCis3Ok1BLUFaSTpNQTpBWklMQUwKKzg6TUEtQkVTOk1BOkJFTiBTTElNQU5FCis5Ok1BLUJFTTpNQTpCRU5JIE1FTExBTAorMTA6TUEtQkVSOk1BOkJFUktBTkUKKzExOk1BLUJPRDpNQTpCT1VKRE9VUgorMTI6TUEtQk9NOk1BOkJPVUxFTUFORQorMTM6TUEtQ0FTOk1BOkNBU0FCTEFOQ0EgW0RBUiBFTCBCRUlEQV0KKzE0Ok1BLUM6TUE6Q0VOVFJFCisxNTpNQS1DRU46TUE6Q0VOVFJFIE5PUkQKKzE2Ok1BLUNFUzpNQTpDRU5UUkUgU1VECisxNzpNQS1DSEU6TUE6Q0hFRkNIQU9VRU5FCisxODpNQS1DSEk6TUE6Q0hJQ0hBT1VBCisxOTpNQS1IQUo6TUE6RUwgSEFKRUIKKzIwOk1BLUpESTpNQTpFTCBKQURJREEKKzIxOk1BLUVSUjpNQTpFUlJBQ0hJRElBCisyMjpNQS1FU006TUE6RVMgU01BUkEKKzIzOk1BLUVTSTpNQTpFU1NBT1VJUkEKKzI0Ok1BLUZFUzpNQTpGRVMKKzI1Ok1BLUZJRzpNQTpGSUdVSUcKKzI2Ok1BLUdVRTpNQTpHVUVMTUlNCisyNzpNQS1JRlI6TUE6SUZSQU5FCisyODpNQS1KUkE6TUE6SkVSQURBCisyOTpNQS1LRVM6TUE6S0VMQUFUIFNSQUdITkEKKzMwOk1BLUtFTjpNQTpLRU5JVFJBCiszMTpNQS1LSEU6TUE6S0hFTUlTU0VUCiszMjpNQS1LSE46TUE6S0hFTklGUkEKKzMzOk1BLUtITzpNQTpLSE9VUklCR0EKKzM0Ok1BLUxBQTpNQTpMQUFZT1VORQorMzU6TUEtTEFSOk1BOkxBUkFDSEUKKzM2Ok1BLU1BUjpNQTpNQVJSQUtFQ0gKKzM3Ok1BLU1FSzpNQTpNRUtORVMKKzM4Ok1BLU5BRDpNQTpOQURPUgorMzk6TUEtTjpNQTpOT1JEIE9VRVNUCis0MDpNQS1PUjpNQTpPUklFTlRBTAorNDE6TUEtT1VBOk1BOk9VQVJaQVpBVEUKKzQyOk1BLU9VRDpNQTpPVUVEIEVEIERBSEFCCis0MzpNQS1PVUo6TUE6T1VKREEKKzQ0Ok1BLVJCQTpNQTpSQUJBVCBTQUxFCis0NTpNQS1TQUY6TUE6U0FGSQorNDY6TUEtU0VGOk1BOlNFRlJPVQorNDc6TUEtU0VUOk1BOlNFVFRBVAorNDg6TUEtU0lLOk1BOlNJREkgS0FDRU0KKzQ5Ok1BLVM6TUE6U1VECis1MDpNQS1UTlQ6TUE6VEFOIFRBTgorNTE6TUEtVE5HOk1BOlRBTkdFUgorNTI6TUEtVEFPOk1BOlRBT1VOQVRFCis1MzpNQS1UQVI6TUE6VEFST1VEQU5OVAorNTQ6TUEtVEFUOk1BOlRBVEEKKzU1Ok1BLVRBWjpNQTpUQVpBCis1NjpNQS1URTpNQTpURU5TSUZUCis1NzpNQS1URVQ6TUE6VEVUT1VBTgorNTg6TUEtVElaOk1BOlRJWk5JVApkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L01BUi9NQVJfQURNSU4yX0xFWC50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvTUFSL01BUl9BRE1JTjJfTEVYLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YzE2MDNkCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L01BUi9NQVJfQURNSU4yX0xFWC50eHQKQEAgLTAsMCArMSw0OSBAQAorMTpNQTpNQVI6TU9ST0NDTzpDZW50cmU6QWluIENob2NrCisyOk1BOk1BUjpNT1JPQ0NPOkNlbnRyZTpBaW4gU2ViYWEvSGF5IE0uCiszOk1BOk1BUjpNT1JPQ0NPOkNlbnRyZTpBbCBGaWRhL0RlcmIgU3VsCis0Ok1BOk1BUjpNT1JPQ0NPOkNlbnRyZTpBemlsYWwKKzU6TUE6TUFSOk1PUk9DQ086Q2VudHJlOkJlbiBTbGltYW5lCis2Ok1BOk1BUjpNT1JPQ0NPOkNlbnRyZTpCZW4tTXNpY2svT3RobWFuCis3Ok1BOk1BUjpNT1JPQ0NPOkNlbnRyZTpCZW5pIE1lbGxhbAorODpNQTpNQVI6TU9ST0NDTzpDZW50cmU6Q2FzYS1BbmZhCis5Ok1BOk1BUjpNT1JPQ0NPOkNlbnRyZTpFbCBKYWRpZGEKKzEwOk1BOk1BUjpNT1JPQ0NPOkNlbnRyZTpLaG91cmliZ2EKKzExOk1BOk1BUjpNT1JPQ0NPOkNlbnRyZTpTZXR0YXQKKzEyOk1BOk1BUjpNT1JPQ0NPOkNlbnRyZTpTaWRpIEJlcm4uL01vaGFtLi1abmF0YQorMTpNQTpNQVI6TU9ST0NDTzpDZW50cmUgU3VkOkVycmFjaGlkaWEKKzI6TUE6TUFSOk1PUk9DQ086Q2VudHJlIFN1ZDpJZnJhbmUKKzM6TUE6TUFSOk1PUk9DQ086Q2VudHJlIFN1ZDpLaGVuaWZyYQorNDpNQTpNQVI6TU9ST0NDTzpDZW50cmUgU3VkOk1la25lcworMTpNQTpNQVI6TU9ST0NDTzpUZW5zaWZ0OkVsIEtlbGFhCisyOk1BOk1BUjpNT1JPQ0NPOlRlbnNpZnQ6RXNzYW91aXJhCiszOk1BOk1BUjpNT1JPQ0NPOlRlbnNpZnQ6TWFycmFrZXNoCis0Ok1BOk1BUjpNT1JPQ0NPOlRlbnNpZnQ6U2FmaQorMTpNQTpNQVI6TU9ST0NDTzpTdWQ6QWdhZGlyCisyOk1BOk1BUjpNT1JPQ0NPOlN1ZDpCb3VqZG91cgorMzpNQTpNQVI6TU9ST0NDTzpTdWQ6RXMtU2VtYXJhCis0Ok1BOk1BUjpNT1JPQ0NPOlN1ZDpHdWVsbWluCis1Ok1BOk1BUjpNT1JPQ0NPOlN1ZDpMYWF5b3VuZQorNjpNQTpNQVI6TU9ST0NDTzpTdWQ6T3VhcnphemF0ZQorNzpNQTpNQVI6TU9ST0NDTzpTdWQ6T3VlZCBFZCBEYWhhYgorODpNQTpNQVI6TU9ST0NDTzpTdWQ6VGFuLVRhbgorOTpNQTpNQVI6TU9ST0NDTzpTdWQ6VGFyb3VkYW50CisxMDpNQTpNQVI6TU9ST0NDTzpTdWQ6VGF0YQorMTE6TUE6TUFSOk1PUk9DQ086U3VkOlRpem5pdAorMTpNQTpNQVI6TU9ST0NDTzpDZW50cmUgTm9yZDpBbCBIb2NlaW1hCisyOk1BOk1BUjpNT1JPQ0NPOkNlbnRyZSBOb3JkOkJvdWxtYW5lCiszOk1BOk1BUjpNT1JPQ0NPOkNlbnRyZSBOb3JkOkZlcworNDpNQTpNQVI6TU9ST0NDTzpDZW50cmUgTm9yZDpUYW91bmF0ZQorNTpNQTpNQVI6TU9ST0NDTzpDZW50cmUgTm9yZDpUYXphCisxOk1BOk1BUjpNT1JPQ0NPOk9yaWVudGFsOkZpZ3VpZworMjpNQTpNQVI6TU9ST0NDTzpPcmllbnRhbDpOYWRvcgorMzpNQTpNQVI6TU9ST0NDTzpPcmllbnRhbDpPdWpkYQorMTpNQTpNQVI6TU9ST0NDTzpOb3JkIE91ZXN0OkNoZWZjaGFvdWVuZQorMjpNQTpNQVI6TU9ST0NDTzpOb3JkIE91ZXN0Oktlbml0cmEKKzM6TUE6TUFSOk1PUk9DQ086Tm9yZCBPdWVzdDpLaGVtaXNzZXQKKzQ6TUE6TUFSOk1PUk9DQ086Tm9yZCBPdWVzdDpMYXJhY2hlCis1Ok1BOk1BUjpNT1JPQ0NPOk5vcmQgT3Vlc3Q6UmFiYXQKKzY6TUE6TUFSOk1PUk9DQ086Tm9yZCBPdWVzdDpTYWxlCis3Ok1BOk1BUjpNT1JPQ0NPOk5vcmQgT3Vlc3Q6U2lkaSBLYWNlbQorODpNQTpNQVI6TU9ST0NDTzpOb3JkIE91ZXN0OlNraGlyYXRlIFRlbWFyYQorOTpNQTpNQVI6TU9ST0NDTzpOb3JkIE91ZXN0OlRhbmdlcgorMTA6TUE6TUFSOk1PUk9DQ086Tm9yZCBPdWVzdDpUZXRvdWFuCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvTURBL01EQV9BRE1JTjFfTEVYLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9NREEvTURBX0FETUlOMV9MRVgudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY0ZmU1NWUKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvTURBL01EQV9BRE1JTjFfTEVYLnR4dApAQCAtMCwwICsxLDE0IEBACisxOk1ELUJBOk1EOkJMSQorMjpNRC1DQTpNRDpDQUhVTAorMzpNRC1DVTpNRDpDSElJTlUKKzQ6TUQtQ1U6TUQ6Q0hJSU5VCis1Ok1ELUVEOk1EOkVESU5FCis2Ok1ELUdBOk1EOkdHVVpJQSwgVU5JVEFURSBURVJJVE9SSUFMIEFVVE9OT00KKzc6TUQtTEE6TUQ6TFBVTkEKKzg6TUQtTTpNRDpNT0xEQVZJQQorOTpNRC1PUjpNRDpPUkhFSQorMTA6TUQtU086TUQ6U09ST0NBCisxMTpNRC1TTjpNRDpTVElOR0EgTklTVFJVTFVJLCBVTklUQVRFQSBURVJJVE9SSUFMIERJTgorMTI6TUQtVEE6TUQ6VEFSQUNMSUEKKzEzOk1ELVRJOk1EOlRJR0hJTkEgW0JFTkRFUl0KKzE0Ok1ELVVOOk1EOlVOR0hFTkkKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9NREEvTURBX0FETUlOMl9MRVgudHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L01EQS9NREFfQURNSU4yX0xFWC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjQxOTlkNgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9NREEvTURBX0FETUlOMl9MRVgudHh0CkBAIC0wLDAgKzEgQEAKKzE6TUQ6TURBOk1PTERPVklBOk1PTERBVklBOk1PTERBVklBCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvTURHL01ER19BRE1JTjFfTEVYLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9NREcvTURHX0FETUlOMV9MRVgudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY3OTUzYTAKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvTURHL01ER19BRE1JTjFfTEVYLnR4dApAQCAtMCwwICsxLDYgQEAKKzE6TUctVDpNRzpBTlRBTkFOQVJJVk8KKzI6TUctRDpNRzpBTlRTSVJBTkFOQQorMzpNRy1GOk1HOkZJQU5BUkFOVFNPQQorNDpNRy1NOk1HOk1BSEFKQU5HQQorNTpNRy1BOk1HOlRPQU1BU0lOQQorNjpNRy1VOk1HOlRPTElBUlkKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9NREcvTURHX0FETUlOMl9MRVgudHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L01ERy9NREdfQURNSU4yX0xFWC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWQzMWY1YQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9NREcvTURHX0FETUlOMl9MRVgudHh0CkBAIC0wLDAgKzEsMTExIEBACisxOk1HOk1ERzpNQURBR0FTQ0FSOlRvYW1hc2luYTpBbWJhdG9uZHJhemFrYQorMjpNRzpNREc6TUFEQUdBU0NBUjpUb2FtYXNpbmE6QW1wYXJhZmFyYXZvbGEKKzM6TUc6TURHOk1BREFHQVNDQVI6VG9hbWFzaW5hOkFuZGlsYW1lbmEKKzQ6TUc6TURHOk1BREFHQVNDQVI6VG9hbWFzaW5hOkFub3NpYmUgQW4tQWxhCis1Ok1HOk1ERzpNQURBR0FTQ0FSOlRvYW1hc2luYTpBbnRhbmFtYmFvLU1hbmFtcG90Cis2Ok1HOk1ERzpNQURBR0FTQ0FSOlRvYW1hc2luYTpGZW5vYXJpdm8tRXN0Cis3Ok1HOk1ERzpNQURBR0FTQ0FSOlRvYW1hc2luYTpNYWhhbm9ybworODpNRzpNREc6TUFEQUdBU0NBUjpUb2FtYXNpbmE6TWFuYW5hcmEtTm9yZAorOTpNRzpNREc6TUFEQUdBU0NBUjpUb2FtYXNpbmE6TWFyb2FudHNldHJhCisxMDpNRzpNREc6TUFEQUdBU0NBUjpUb2FtYXNpbmE6TWFyb2xhbWJvCisxMTpNRzpNREc6TUFEQUdBU0NBUjpUb2FtYXNpbmE6TW9yYW1hbmdhCisxMjpNRzpNREc6TUFEQUdBU0NBUjpUb2FtYXNpbmE6Tm9zeS1Cb3JhaGEgKFN0LiBNYXJpZSkKKzEzOk1HOk1ERzpNQURBR0FTQ0FSOlRvYW1hc2luYTpTb2FuaWVyYW5hLUl2b25nbworMTQ6TUc6TURHOk1BREFHQVNDQVI6VG9hbWFzaW5hOlRvYW1hc2luYSBSdXJhbAorMTU6TUc6TURHOk1BREFHQVNDQVI6VG9hbWFzaW5hOlRvYW1hc2luYSBVcmJhbgorMTY6TUc6TURHOk1BREFHQVNDQVI6VG9hbWFzaW5hOlZhdG9tYW5kcnkKKzE3Ok1HOk1ERzpNQURBR0FTQ0FSOlRvYW1hc2luYTpWYXZhdGVuaW5hCisxODpNRzpNREc6TUFEQUdBU0NBUjpUb2FtYXNpbmE6Vm9oaWJpbmFueSAoQnJpY2thdmlsbGUKKzE6TUc6TURHOk1BREFHQVNDQVI6RmlhbmFyYW50c29hOkFtYmFsYXZhbworMjpNRzpNREc6TUFEQUdBU0NBUjpGaWFuYXJhbnRzb2E6QW1iYXRvZmluYW5kcmFoYW5hCiszOk1HOk1ERzpNQURBR0FTQ0FSOkZpYW5hcmFudHNvYTpBbWJvaGltYWhhc29hCis0Ok1HOk1ERzpNQURBR0FTQ0FSOkZpYW5hcmFudHNvYTpBbWJvc2l0cmEKKzU6TUc6TURHOk1BREFHQVNDQVI6RmlhbmFyYW50c29hOkJlZm90YWthCis2Ok1HOk1ERzpNQURBR0FTQ0FSOkZpYW5hcmFudHNvYTpGYW5kcmlhbmEKKzc6TUc6TURHOk1BREFHQVNDQVI6RmlhbmFyYW50c29hOkZhcmFmYW5nYW5hCis4Ok1HOk1ERzpNQURBR0FTQ0FSOkZpYW5hcmFudHNvYTpGaWFuYXJhbnRzb2EgUnVyYWwKKzk6TUc6TURHOk1BREFHQVNDQVI6RmlhbmFyYW50c29hOkZpYW5hcmFudHNvYSBVcmJhbgorMTA6TUc6TURHOk1BREFHQVNDQVI6RmlhbmFyYW50c29hOklha29yYQorMTE6TUc6TURHOk1BREFHQVNDQVI6RmlhbmFyYW50c29hOklmYW5hZGlhbmEKKzEyOk1HOk1ERzpNQURBR0FTQ0FSOkZpYW5hcmFudHNvYTpJaG9zeQorMTM6TUc6TURHOk1BREFHQVNDQVI6RmlhbmFyYW50c29hOklrYWxhbWF2b255CisxNDpNRzpNREc6TUFEQUdBU0NBUjpGaWFuYXJhbnRzb2E6SWtvbmdvIChGb3J0IENhcm5vdCkKKzE1Ok1HOk1ERzpNQURBR0FTQ0FSOkZpYW5hcmFudHNvYTpJdm9oaWJlCisxNjpNRzpNREc6TUFEQUdBU0NBUjpGaWFuYXJhbnRzb2E6TWFuYWthcmEgU3VkCisxNzpNRzpNREc6TUFEQUdBU0NBUjpGaWFuYXJhbnRzb2E6TWFuYW5kcmlhbmEKKzE4Ok1HOk1ERzpNQURBR0FTQ0FSOkZpYW5hcmFudHNvYTpNYW5hbmphcnkKKzE5Ok1HOk1ERzpNQURBR0FTQ0FSOkZpYW5hcmFudHNvYTpNaWRvbmd5LVN1ZAorMjA6TUc6TURHOk1BREFHQVNDQVI6RmlhbmFyYW50c29hOk5vc3ktVmFyaWthCisyMTpNRzpNREc6TUFEQUdBU0NBUjpGaWFuYXJhbnRzb2E6VmFuZ2FpbmRyYW5vCisyMjpNRzpNREc6TUFEQUdBU0NBUjpGaWFuYXJhbnRzb2E6Vm9oaXBlbm8KKzIzOk1HOk1ERzpNQURBR0FTQ0FSOkZpYW5hcmFudHNvYTpWb25kcm96bworMTpNRzpNREc6TUFEQUdBU0NBUjpBbnRhbmFuYXJpdm86QW1iYXRvbGFtcHkKKzI6TUc6TURHOk1BREFHQVNDQVI6QW50YW5hbmFyaXZvOkFtYm9oaWRyYXRyaW1vCiszOk1HOk1ERzpNQURBR0FTQ0FSOkFudGFuYW5hcml2bzpBbmRyYW1hc2luYQorNDpNRzpNREc6TUFEQUdBU0NBUjpBbnRhbmFuYXJpdm86QW5qb3pvcm9iZQorNTpNRzpNREc6TUFEQUdBU0NBUjpBbnRhbmFuYXJpdm86QW5rYXpvYmUKKzY6TUc6TURHOk1BREFHQVNDQVI6QW50YW5hbmFyaXZvOkFudGFuYW5hcml2by1Ob3JkCis3Ok1HOk1ERzpNQURBR0FTQ0FSOkFudGFuYW5hcml2bzpBbnRhbmFuYXJpdm8tU3VkCis4Ok1HOk1ERzpNQURBR0FTQ0FSOkFudGFuYW5hcml2bzpBbnRhbmFuYXJpdm8tdmlsbGUKKzk6TUc6TURHOk1BREFHQVNDQVI6QW50YW5hbmFyaXZvOkFudGFuaWZvdHN5CisxMDpNRzpNREc6TUFEQUdBU0NBUjpBbnRhbmFuYXJpdm86QW50c2lyYWJlIFJ1cmFsCisxMTpNRzpNREc6TUFEQUdBU0NBUjpBbnRhbmFuYXJpdm86QW50c2lyYWJlIFVyYmFuCisxMjpNRzpNREc6TUFEQUdBU0NBUjpBbnRhbmFuYXJpdm86QXJpdm9uaW1hbW8KKzEzOk1HOk1ERzpNQURBR0FTQ0FSOkFudGFuYW5hcml2bzpCZXRhZm8KKzE0Ok1HOk1ERzpNQURBR0FTQ0FSOkFudGFuYW5hcml2bzpGYXJhdHNpaG8KKzE1Ok1HOk1ERzpNQURBR0FTQ0FSOkFudGFuYW5hcml2bzpGZW5vYXJpdm8tQ2VudHJlCisxNjpNRzpNREc6TUFEQUdBU0NBUjpBbnRhbmFuYXJpdm86TWFuamFrYW5kcmlhbmEKKzE3Ok1HOk1ERzpNQURBR0FTQ0FSOkFudGFuYW5hcml2bzpNaWFyaW5hcml2bworMTg6TUc6TURHOk1BREFHQVNDQVI6QW50YW5hbmFyaXZvOlNvYXZpbmFuZHJpYW5hCisxOTpNRzpNREc6TUFEQUdBU0NBUjpBbnRhbmFuYXJpdm86VHNpcm9hbm9tYW5kaWR5CisxOk1HOk1ERzpNQURBR0FTQ0FSOk1haGFqYW5nYTpBbWJhdG8tQm9pbmEKKzI6TUc6TURHOk1BREFHQVNDQVI6TWFoYWphbmdhOkFtYmF0b21haW50eQorMzpNRzpNREc6TUFEQUdBU0NBUjpNYWhhamFuZ2E6QW5hbGFsYXZhCis0Ok1HOk1ERzpNQURBR0FTQ0FSOk1haGFqYW5nYTpBbnRzYWxvdmEKKzU6TUc6TURHOk1BREFHQVNDQVI6TWFoYWphbmdhOkFudHNvaGloeQorNjpNRzpNREc6TUFEQUdBU0NBUjpNYWhhamFuZ2E6QmVhbGFuYW5hCis3Ok1HOk1ERzpNQURBR0FTQ0FSOk1haGFqYW5nYTpCZWZhbmRyaWFuYS1Ob3JkCis4Ok1HOk1ERzpNQURBR0FTQ0FSOk1haGFqYW5nYTpCZXNhbGFtcHkKKzk6TUc6TURHOk1BREFHQVNDQVI6TWFoYWphbmdhOkJvcml6aW55IChQb3J0LUJlcmcuKQorMTA6TUc6TURHOk1BREFHQVNDQVI6TWFoYWphbmdhOkthbmRyZWhvCisxMTpNRzpNREc6TUFEQUdBU0NBUjpNYWhhamFuZ2E6TWFldmF0YW5hbmEKKzEyOk1HOk1ERzpNQURBR0FTQ0FSOk1haGFqYW5nYTpNYWhhamFuZ2EgUnVyYWwKKzEzOk1HOk1ERzpNQURBR0FTQ0FSOk1haGFqYW5nYTpNYWhhamFuZ2EgVXJiYW4KKzE0Ok1HOk1ERzpNQURBR0FTQ0FSOk1haGFqYW5nYTpNYWludGlyYW5vCisxNTpNRzpNREc6TUFEQUdBU0NBUjpNYWhhamFuZ2E6TWFtcGlrb255CisxNjpNRzpNREc6TUFEQUdBU0NBUjpNYWhhamFuZ2E6TWFuZHJpdHNhcmEKKzE3Ok1HOk1ERzpNQURBR0FTQ0FSOk1haGFqYW5nYTpNYXJvdm9heQorMTg6TUc6TURHOk1BREFHQVNDQVI6TWFoYWphbmdhOk1pdHNpbmpvCisxOTpNRzpNREc6TUFEQUdBU0NBUjpNYWhhamFuZ2E6TW9yYWZlbm9iZQorMjA6TUc6TURHOk1BREFHQVNDQVI6TWFoYWphbmdhOlNvYWxhbGEKKzIxOk1HOk1ERzpNQURBR0FTQ0FSOk1haGFqYW5nYTpUc2FyYXRhbmFuYQorMTpNRzpNREc6TUFEQUdBU0NBUjpUb2xpYXJ5OkFtYm9hc2FyeS1TdWQKKzI6TUc6TURHOk1BREFHQVNDQVI6VG9saWFyeTpBbWJvdm9tYmUtQW5kcm95CiszOk1HOk1ERzpNQURBR0FTQ0FSOlRvbGlhcnk6QW1wYW5paHkKKzQ6TUc6TURHOk1BREFHQVNDQVI6VG9saWFyeTpBbmthem9hYm8tU3VkCis1Ok1HOk1ERzpNQURBR0FTQ0FSOlRvbGlhcnk6QmVraWx5Cis2Ok1HOk1ERzpNQURBR0FTQ0FSOlRvbGlhcnk6QmVsb2hhCis3Ok1HOk1ERzpNQURBR0FTQ0FSOlRvbGlhcnk6QmVsb24taSBUc2lyaWJpaGluYQorODpNRzpNREc6TUFEQUdBU0NBUjpUb2xpYXJ5OkJlbmVuaXRyYQorOTpNRzpNREc6TUFEQUdBU0NBUjpUb2xpYXJ5OkJlcm9yb2hhCisxMDpNRzpNREc6TUFEQUdBU0NBUjpUb2xpYXJ5OkJldGlva3ktU3VkCisxMTpNRzpNREc6TUFEQUdBU0NBUjpUb2xpYXJ5OkJldHJva2EKKzEyOk1HOk1ERzpNQURBR0FTQ0FSOlRvbGlhcnk6TWFoYWJvCisxMzpNRzpNREc6TUFEQUdBU0NBUjpUb2xpYXJ5Ok1hbmphCisxNDpNRzpNREc6TUFEQUdBU0NBUjpUb2xpYXJ5Ok1pYW5kcml2YXpvCisxNTpNRzpNREc6TUFEQUdBU0NBUjpUb2xpYXJ5Ok1vcm9tYmUKKzE2Ok1HOk1ERzpNQURBR0FTQ0FSOlRvbGlhcnk6TW9yb25kYXZhCisxNzpNRzpNREc6TUFEQUdBU0NBUjpUb2xpYXJ5OlNha2FyYWhhCisxODpNRzpNREc6TUFEQUdBU0NBUjpUb2xpYXJ5OlRhb2xhZ25hcm8gKEYtRGF1cGhpbikKKzE5Ok1HOk1ERzpNQURBR0FTQ0FSOlRvbGlhcnk6VG9saWFyeSBSdXJhbAorMjA6TUc6TURHOk1BREFHQVNDQVI6VG9saWFyeTpUb2xpYXJ5IFVyYmFuCisyMTpNRzpNREc6TUFEQUdBU0NBUjpUb2xpYXJ5OlRzaWhvbWJlCisxOk1HOk1ERzpNQURBR0FTQ0FSOkFudHNpcmFuYW5hOkFtYmFuamEKKzI6TUc6TURHOk1BREFHQVNDQVI6QW50c2lyYW5hbmE6QW1iaWxvYmUKKzM6TUc6TURHOk1BREFHQVNDQVI6QW50c2lyYW5hbmE6QW5kYXBhCis0Ok1HOk1ERzpNQURBR0FTQ0FSOkFudHNpcmFuYW5hOkFudGFsYWhhCis1Ok1HOk1ERzpNQURBR0FTQ0FSOkFudHNpcmFuYW5hOkFudHNpcmFuYW5hIFJ1cmFsCis2Ok1HOk1ERzpNQURBR0FTQ0FSOkFudHNpcmFuYW5hOkFudHNpcmFuYW5hIFVyYmFuCis3Ok1HOk1ERzpNQURBR0FTQ0FSOkFudHNpcmFuYW5hOk5vc3ktQmUKKzg6TUc6TURHOk1BREFHQVNDQVI6QW50c2lyYW5hbmE6U2FtYmF2YQorOTpNRzpNREc6TUFEQUdBU0NBUjpBbnRzaXJhbmFuYTpWb2hpbWFyaW5hIChJaGFyYW5hKQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L01FWC9NRVhfQURNSU4xX0xFWC50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvTUVYL01FWF9BRE1JTjFfTEVYLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNzUzNmJkCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L01FWC9NRVhfQURNSU4xX0xFWC50eHQKQEAgLTAsMCArMSwzMiBAQAorMTpNWC1BR1U6TVg6QUdVQVNDQUxJRU5URVMKKzI6TVgtQkNOOk1YOkJBSkEgQ0FMSUZPUk5JQSBOT1JURQorMzpNWC1CQ1M6TVg6QkFKQSBDQUxJRk9STklBIFNVUgorNDpNWC1DQU06TVg6Q0FNUEVDSEUKKzU6TVgtQ0hQOk1YOkNISUFQQVMKKzY6TVgtQ0hIOk1YOkNISUhVQUhVQQorNzpNWC1DT0E6TVg6Q09BSFVJTEEgREUgWkFSQUdPWkEKKzg6TVgtQ09MOk1YOkNPTElNQQorOTpNWC1ESUY6TVg6RElTVFJJVE8gRkVERVJBTAorMTA6TVgtRFVSOk1YOkRVUkFOR08KKzExOk1YLUdVQTpNWDpHVUFOQUpVQVRPCisxMjpNWC1HUk86TVg6R1VFUlJFUk8KKzEzOk1YLUhJRDpNWDpISURBTEdPCisxNDpNWC1KQUw6TVg6SkFMSVNDTworMTU6TVgtTUVYOk1YOk1FWElDTworMTY6TVgtTUlDOk1YOk1JQ0hPQUNBTiBERSBPQ0FNUE8KKzE3Ok1YLU1PUjpNWDpNT1JFTE9TCisxODpNWC1OQVk6TVg6TkFZQVJJVAorMTk6TVgtTkxFOk1YOk5VRVZPIExFT04KKzIwOk1YLU9BWDpNWDpPQVhBQ0EKKzIxOk1YLVBVRTpNWDpQVUVCTEEKKzIyOk1YLVFVRTpNWDpRVUVSRVRBUk8gREUgQVJURUFHQQorMjM6TVgtUk9POk1YOlFVSU5UQU5BIFJPTworMjQ6TVgtU0xQOk1YOlNBTiBMVUlTIFBPVE9TSQorMjU6TVgtU0lOOk1YOlNJTkFMT0EKKzI2Ok1YLVNPTjpNWDpTT05PUkEKKzI3Ok1YLVRBQjpNWDpUQUJBU0NPCisyODpNWC1UQU06TVg6VEFNQVVMSVBBUworMjk6TVgtVExBOk1YOlRMQVhDQUxBCiszMDpNWC1WRVI6TVg6VkVSQUNSVVogTExBVkUKKzMxOk1YLVlVQzpNWDpZVUNBVEFOCiszMjpNWC1aQUM6TVg6WkFDQVRFQ0FTCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvTUVYL01FWF9BRE1JTjJfTEVYLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9NRVgvTUVYX0FETUlOMl9MRVgudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2OWRlMjkKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvTUVYL01FWF9BRE1JTjJfTEVYLnR4dApkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L01LRC9NS0RfQURNSU4xX0xFWC50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvTUtEL01LRF9BRE1JTjFfTEVYLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NWMxMTMyCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L01LRC9NS0RfQURNSU4xX0xFWC50eHQKQEAgLTAsMCArMSBAQAorMTpNSy1NOk1LOk1BS0VET05JSkEKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9NS0QvTUtEX0FETUlOMl9MRVgudHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L01LRC9NS0RfQURNSU4yX0xFWC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTA1MDY5MQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9NS0QvTUtEX0FETUlOMl9MRVgudHh0CkBAIC0wLDAgKzEgQEAKKzE6TUs6TUtEOk1BS0VET05JSkE6TUFLRURPTklKQTpNQUtFRE9OSUpBCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvTU1SL01NUl9BRE1JTjFfTEVYLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9NTVIvTU1SX0FETUlOMV9MRVgudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjllNDc2NzEKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvTU1SL01NUl9BRE1JTjFfTEVYLnR4dApAQCAtMCwwICsxLDE0IEBACisxOk1NLTA3Ok1NOkFZRVlBUldBRFkKKzI6TU0tMDI6TU06QkFHTworMzpNTS00Ok1NOkNISU4KKzQ6TU0tMDg6TU06S0FDSElOCis1Ok1NLTI6TU06S0FZQUgKKzY6TU0tMzpNTTpLQVlJTgorNzpNTS0wMzpNTTpNQUdXQVkKKzg6TU0tMDQ6TU06TUFOREFMQVkKKzk6TU0tNTpNTTpNT04KKzEwOk1NLTY6TU06UkFLSElORQorMTE6TU0tMDpNTTpTQUdBSU5HCisxMjpNTS03Ok1NOlNIQU4KKzEzOk1NLTA1Ok1NOlRBTklOVEhBUllJCisxNDpNTS0wNjpNTTpZQU5HT04KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9NTkcvTU5HX0FETUlOMV9MRVgudHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L01ORy9NTkdfQURNSU4xX0xFWC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmRhMDgxMgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9NTkcvTU5HX0FETUlOMV9MRVgudHh0CkBAIC0wLDAgKzEsMjIgQEAKKzE6TU4tMDczOk1OOkFSSEFOR0FZCisyOk1OLTA3Ok1OOkJBWUFOIE9MR0lZIFtCQVlBTiBMR0lZXQorMzpNTi0wNjk6TU46QkFZQU5IT05HT1IKKzQ6TU4tMDY3Ok1OOkJVTEdBTgorNTpNTi0wMzc6TU46REFSSEFOIFVVTAorNjpNTi0wNjpNTjpET1JOT0QKKzc6TU4tMDYzOk1OOkRPUk5PR09WSSBbRE9STk9HT1ZdCis4Ok1OLTA1OTpNTjpEVU5ER09WSSBbRFVOREdPVl0KKzk6TU4tMDU3Ok1OOkRaQVZIQU4KKzEwOk1OLTA2NDpNTjpHT1YgU9xNQkVSCisxMTpNTi0wNjU6TU46R09WSSBBTFRBWSBbR09WIEFMVEFZXQorMTI6TU4tMDM5Ok1OOkhFTlRJWQorMTM6TU4tMDQzOk1OOkhPVkQKKzE0Ok1OLTA0Ok1OOkhPVlNHT0wgW0hWU0dMXQorMTU6TU4tMDUzOk1OOk9NTk9HT1ZJIFtNTkdPVl0KKzE2Ok1OLTAzNTpNTjpPUkhPTgorMTc6TU4tMDU1Ok1OOk9WT1JIQU5HQVkgW1ZSSEFOR0FZXQorMTg6TU4tMDQ5Ok1OOlNFTEVOR0UKKzE5Ok1OLTA1Ok1OOlNVSEJBQVRBUiBbU9xIQkFBVEFSXQorMjA6TU4tMDQ3Ok1OOlRPViBbVFZdCisyMTpNTi0wMzpNTjpVTEFBTkJBQVRBUgorMjI6TU4tMDQ2Ok1OOlVWUwpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L01ORy9NTkdfQURNSU4yX0xFWC50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvTU5HL01OR19BRE1JTjJfTEVYLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZGJmZGE1Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L01ORy9NTkdfQURNSU4yX0xFWC50eHQKQEAgLTAsMCArMSwxOCBAQAorMTpNTjpNTkc6TU9OR09MSUE6RHphdmhhbjpNTkcuTDIuMworMTpNTjpNTkc6TU9OR09MSUE6SGVudGl5Ok1ORy5MMi42CisxOk1OOk1ORzpNT05HT0xJQTpEdW5kZ292aTpNTkcuTDIuOAorMTpNTjpNTkc6TU9OR09MSUE6VG92Ok1ORy5MMi43CisxOk1OOk1ORzpNT05HT0xJQTpTZWxlbmdlOk1ORy5MMi41CisxOk1OOk1ORzpNT05HT0xJQTpBcmhhbmdheTpNTkcuTDIuMQorMTpNTjpNTkc6TU9OR09MSUE6SG92c2dvbDpNTkcuTDIuMTYKKzE6TU46TU5HOk1PTkdPTElBOkRvcm5vZ292aTpNTkcuTDIuMTAKKzE6TU46TU5HOk1PTkdPTElBOk9tbm9nb3ZpOk1ORy5MMi4xMgorMTpNTjpNTkc6TU9OR09MSUE6QmF5YW5ob25nb3I6TU5HLkwyLjExCisxOk1OOk1ORzpNT05HT0xJQTpVdnM6TU5HLkwyLjE0CisxOk1OOk1ORzpNT05HT0xJQTpHb3ZpLUFsdGF5Ok1ORy5MMi4xNQorMTpNTjpNTkc6TU9OR09MSUE6SG92ZDpNTkcuTDIuMTMKKzE6TU46TU5HOk1PTkdPTElBOkRvcm5vZDpNTkcuTDIuMgorMTpNTjpNTkc6TU9OR09MSUE6QnVsZ2FuOk1ORy5MMi45CisxOk1OOk1ORzpNT05HT0xJQTpTdWhiYWF0YXI6TU5HLkwyLjE4CisxOk1OOk1ORzpNT05HT0xJQTpPdm9yaGFuZ2F5Ok1ORy5MMi40CisxOk1OOk1ORzpNT05HT0xJQTpCYXlhbi1PbGdpeTpNTkcuTDIuMTcKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9NT1ovTU9aX0FETUlOMV9MRVgudHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L01PWi9NT1pfQURNSU4xX0xFWC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjY5YjY0MQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9NT1ovTU9aX0FETUlOMV9MRVgudHh0CkBAIC0wLDAgKzEsMTEgQEAKKzE6TVotUDpNWjpDQUJPIERFTEdBRE8KKzI6TVotRzpNWjpHQVpBCiszOk1aLUk6TVo6SU5IQU1CQU5FCis0Ok1aLUI6TVo6TUFOSUNBCis1Ok1aLU1QTTpNWjpNQVBVVE8KKzY6TVotTVBNOk1aOk1BUFVUTworNzpNWi1OOk1aOk5BTVBVTEEKKzg6TVotQTpNWjpOQVNTQQorOTpNWi1TOk1aOlNPRkFMQQorMTA6TVotVDpNWjpURVRFCisxMTpNWi1ROk1aOlpBTUJFWklBCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvTU9aL01PWl9BRE1JTjJfTEVYLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9NT1ovTU9aX0FETUlOMl9MRVgudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJlZTI2OTIKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvTU9aL01PWl9BRE1JTjJfTEVYLnR4dApAQCAtMCwwICsxLDEyOCBAQAorMTpNWjpNT1o6TU9aQU1CSVFVRTpOYW1wdWxhOkFuZ29jaGUKKzI6TVo6TU9aOk1PWkFNQklRVUU6TmFtcHVsYTpFcmF0aQorMzpNWjpNT1o6TU9aQU1CSVFVRTpOYW1wdWxhOkxhbGF1YQorNDpNWjpNT1o6TU9aQU1CSVFVRTpOYW1wdWxhOk1hbGVtYQorNTpNWjpNT1o6TU9aQU1CSVFVRTpOYW1wdWxhOk1lY29udGEKKzY6TVo6TU9aOk1PWkFNQklRVUU6TmFtcHVsYTpNZWN1YnVyaQorNzpNWjpNT1o6TU9aQU1CSVFVRTpOYW1wdWxhOk1lbWJhCis4Ok1aOk1PWjpNT1pBTUJJUVVFOk5hbXB1bGE6TW9nb3ZvbGFzCis5Ok1aOk1PWjpNT1pBTUJJUVVFOk5hbXB1bGE6TW9tYQorMTA6TVo6TU9aOk1PWkFNQklRVUU6TmFtcHVsYTpNb25hcG8KKzExOk1aOk1PWjpNT1pBTUJJUVVFOk5hbXB1bGE6TW9uZ2luY3VhbAorMTI6TVo6TU9aOk1PWkFNQklRVUU6TmFtcHVsYTpNb3NzdXJpbAorMTM6TVo6TU9aOk1PWkFNQklRVUU6TmFtcHVsYTpNdWVjYXRlCisxNDpNWjpNT1o6TU9aQU1CSVFVRTpOYW1wdWxhOk11cnJ1cHVsYQorMTU6TVo6TU9aOk1PWkFNQklRVUU6TmFtcHVsYTpOYWNhbGEgVmVsaGEKKzE2Ok1aOk1PWjpNT1pBTUJJUVVFOk5hbXB1bGE6TmFtYXBhCisxNzpNWjpNT1o6TU9aQU1CSVFVRTpOYW1wdWxhOk5hbXB1bGEKKzE4Ok1aOk1PWjpNT1pBTUJJUVVFOk5hbXB1bGE6UmliYXVlCisxOk1aOk1PWjpNT1pBTUJJUVVFOk1hbmljYTpCYXJ1ZQorMjpNWjpNT1o6TU9aQU1CSVFVRTpNYW5pY2E6R29uZG9sYQorMzpNWjpNT1o6TU9aQU1CSVFVRTpNYW5pY2E6R3VybworNDpNWjpNT1o6TU9aQU1CSVFVRTpNYW5pY2E6TWFjaGF6ZQorNTpNWjpNT1o6TU9aQU1CSVFVRTpNYW5pY2E6TWFjb3NzYQorNjpNWjpNT1o6TU9aQU1CSVFVRTpNYW5pY2E6TWFuaWNhCis3Ok1aOk1PWjpNT1pBTUJJUVVFOk1hbmljYTpNb3NzdXJpemUKKzg6TVo6TU9aOk1PWkFNQklRVUU6TWFuaWNhOlN1c3N1bmRlbmdhCis5Ok1aOk1PWjpNT1pBTUJJUVVFOk1hbmljYTpUYW1iYXJhCisxOk1aOk1PWjpNT1pBTUJJUVVFOk5hc3NhOkN1YW1iYQorMjpNWjpNT1o6TU9aQU1CSVFVRTpOYXNzYTpMYWdvCiszOk1aOk1PWjpNT1pBTUJJUVVFOk5hc3NhOkxpY2hpbmdhCis0Ok1aOk1PWjpNT1pBTUJJUVVFOk5hc3NhOk1hanVuZQorNTpNWjpNT1o6TU9aQU1CSVFVRTpOYXNzYTpNYW5kaW1iYQorNjpNWjpNT1o6TU9aQU1CSVFVRTpOYXNzYTpNYXJydXBhCis3Ok1aOk1PWjpNT1pBTUJJUVVFOk5hc3NhOk1hdWEKKzg6TVo6TU9aOk1PWkFNQklRVUU6TmFzc2E6TWF2YWdvCis5Ok1aOk1PWjpNT1pBTUJJUVVFOk5hc3NhOk1lY2FuaGVsYXMKKzEwOk1aOk1PWjpNT1pBTUJJUVVFOk5hc3NhOk1lY3VsYQorMTE6TVo6TU9aOk1PWkFNQklRVUU6TmFzc2E6TWV0YXJpY2EKKzEyOk1aOk1PWjpNT1pBTUJJUVVFOk5hc3NhOk11ZW1iZQorMTM6TVo6TU9aOk1PWkFNQklRVUU6TmFzc2E6TidnYXVtYQorMTQ6TVo6TU9aOk1PWkFNQklRVUU6TmFzc2E6TmlwZXBlCisxNTpNWjpNT1o6TU9aQU1CSVFVRTpOYXNzYTpTYW5nYQorMTpNWjpNT1o6TU9aQU1CSVFVRTpDYWJvIERlbGdhZG86QW5jdWFiZQorMjpNWjpNT1o6TU9aQU1CSVFVRTpDYWJvIERlbGdhZG86QmFsYW1hCiszOk1aOk1PWjpNT1pBTUJJUVVFOkNhYm8gRGVsZ2FkbzpDaGl1cmUKKzQ6TVo6TU9aOk1PWkFNQklRVUU6Q2FibyBEZWxnYWRvOk1hY29taWEKKzU6TVo6TU9aOk1PWkFNQklRVUU6Q2FibyBEZWxnYWRvOk1lY3VmaQorNjpNWjpNT1o6TU9aQU1CSVFVRTpDYWJvIERlbGdhZG86TWVsdWNvCis3Ok1aOk1PWjpNT1pBTUJJUVVFOkNhYm8gRGVsZ2FkbzpNb2NpbWJvYSBkYSBQcmFpYQorODpNWjpNT1o6TU9aQU1CSVFVRTpDYWJvIERlbGdhZG86TW9udGVwdWV6Cis5Ok1aOk1PWjpNT1pBTUJJUVVFOkNhYm8gRGVsZ2FkbzpNdWVkYQorMTA6TVo6TU9aOk1PWkFNQklRVUU6Q2FibyBEZWxnYWRvOk11aWR1bWJlCisxMTpNWjpNT1o6TU9aQU1CSVFVRTpDYWJvIERlbGdhZG86TmFtdW5vCisxMjpNWjpNT1o6TU9aQU1CSVFVRTpDYWJvIERlbGdhZG86TmFuZ2FkZQorMTM6TVo6TU9aOk1PWkFNQklRVUU6Q2FibyBEZWxnYWRvOlBhbG1hCisxNDpNWjpNT1o6TU9aQU1CSVFVRTpDYWJvIERlbGdhZG86UGVtYmEKKzE1Ok1aOk1PWjpNT1pBTUJJUVVFOkNhYm8gRGVsZ2FkbzpRdWlzc2FuZ2EKKzE6TVo6TU9aOk1PWkFNQklRVUU6VGV0ZTpBbmdvbmlhCisyOk1aOk1PWjpNT1pBTUJJUVVFOlRldGU6Q2Fob3JhIEJhc3NhCiszOk1aOk1PWjpNT1pBTUJJUVVFOlRldGU6Q2hhbmdhcmEKKzQ6TVo6TU9aOk1PWkFNQklRVUU6VGV0ZTpDaGlmdW5kZQorNTpNWjpNT1o6TU9aQU1CSVFVRTpUZXRlOkNoaXV0YQorNjpNWjpNT1o6TU9aQU1CSVFVRTpUZXRlOk1hY2FuZ2EKKzc6TVo6TU9aOk1PWkFNQklRVUU6VGV0ZTpNYWdvZQorODpNWjpNT1o6TU9aQU1CSVFVRTpUZXRlOk1hcmF2aWEKKzk6TVo6TU9aOk1PWkFNQklRVUU6VGV0ZTpNb2F0aXplCisxMDpNWjpNT1o6TU9aQU1CSVFVRTpUZXRlOk11dGFyYXJhCisxMTpNWjpNT1o6TU9aQU1CSVFVRTpUZXRlOlRzYW5nYW5vCisxMjpNWjpNT1o6TU9aQU1CSVFVRTpUZXRlOlp1bWJ1CisxOk1aOk1PWjpNT1pBTUJJUVVFOkdhemE6QmlsZW5lCisyOk1aOk1PWjpNT1pBTUJJUVVFOkdhemE6Q2hpYnV0bworMzpNWjpNT1o6TU9aQU1CSVFVRTpHYXphOkNoaWN1YWxhY3VhbGEKKzQ6TVo6TU9aOk1PWkFNQklRVUU6R2F6YTpDaGlndWJvCis1Ok1aOk1PWjpNT1pBTUJJUVVFOkdhemE6Q2hva3dlCis2Ok1aOk1PWjpNT1pBTUJJUVVFOkdhemE6R3VpamEKKzc6TVo6TU9aOk1PWkFNQklRVUU6R2F6YTpNYWJhbGFuZQorODpNWjpNT1o6TU9aQU1CSVFVRTpHYXphOk1hbmRsYWthemkKKzk6TVo6TU9aOk1PWkFNQklRVUU6R2F6YTpNYXNzYW5nZW5hCisxMDpNWjpNT1o6TU9aQU1CSVFVRTpHYXphOk1hc3NpbmdpcgorMTE6TVo6TU9aOk1PWkFNQklRVUU6R2F6YTpYYWktWGFpCisxOk1aOk1PWjpNT1pBTUJJUVVFOlphbWJlemlhOkFsdG8gTW9sb2N1ZQorMjpNWjpNT1o6TU9aQU1CSVFVRTpaYW1iZXppYTpDaGluZGUKKzM6TVo6TU9aOk1PWkFNQklRVUU6WmFtYmV6aWE6R2lsZQorNDpNWjpNT1o6TU9aQU1CSVFVRTpaYW1iZXppYTpHdXJ1ZQorNTpNWjpNT1o6TU9aQU1CSVFVRTpaYW1iZXppYTpJbGUKKzY6TVo6TU9aOk1PWkFNQklRVUU6WmFtYmV6aWE6SW5oYXNzdW5nZQorNzpNWjpNT1o6TU9aQU1CSVFVRTpaYW1iZXppYTpMdWdlbGEKKzg6TVo6TU9aOk1PWkFNQklRVUU6WmFtYmV6aWE6TWFnYW5qYSBkYSBDb3N0YQorOTpNWjpNT1o6TU9aQU1CSVFVRTpaYW1iZXppYTpNaWxhbmdlCisxMDpNWjpNT1o6TU9aQU1CSVFVRTpaYW1iZXppYTpNb2N1YmEKKzExOk1aOk1PWjpNT1pBTUJJUVVFOlphbWJlemlhOk1vcGVpYQorMTI6TVo6TU9aOk1PWkFNQklRVUU6WmFtYmV6aWE6TW9ycnVtYmFsYQorMTM6TVo6TU9aOk1PWkFNQklRVUU6WmFtYmV6aWE6TmFtYWN1cnJhCisxNDpNWjpNT1o6TU9aQU1CSVFVRTpaYW1iZXppYTpOYW1hcnJvaQorMTU6TVo6TU9aOk1PWkFNQklRVUU6WmFtYmV6aWE6Tmljb2FkYWxhCisxNjpNWjpNT1o6TU9aQU1CSVFVRTpaYW1iZXppYTpQZWJhbmUKKzE6TVo6TU9aOk1PWkFNQklRVUU6SW5oYW1iYW5lOkZ1bmhhbG91cm8KKzI6TVo6TU9aOk1PWkFNQklRVUU6SW5oYW1iYW5lOkdvdnVybworMzpNWjpNT1o6TU9aQU1CSVFVRTpJbmhhbWJhbmU6SG9tb2luZQorNDpNWjpNT1o6TU9aQU1CSVFVRTpJbmhhbWJhbmU6SW5oYXJyaW1lCis1Ok1aOk1PWjpNT1pBTUJJUVVFOkluaGFtYmFuZTpJbmhhc3Nvcm8KKzY6TVo6TU9aOk1PWkFNQklRVUU6SW5oYW1iYW5lOkphbmdhbW8KKzc6TVo6TU9aOk1PWkFNQklRVUU6SW5oYW1iYW5lOk1hYm90ZQorODpNWjpNT1o6TU9aQU1CSVFVRTpJbmhhbWJhbmU6TWFzc2luZ2EKKzk6TVo6TU9aOk1PWkFNQklRVUU6SW5oYW1iYW5lOk1vcnJ1bWJlbmUKKzEwOk1aOk1PWjpNT1pBTUJJUVVFOkluaGFtYmFuZTpQYW5kYQorMTE6TVo6TU9aOk1PWkFNQklRVUU6SW5oYW1iYW5lOlZpbGFuY3Vsb3MKKzEyOk1aOk1PWjpNT1pBTUJJUVVFOkluaGFtYmFuZTpaYXZhbGEKKzE6TVo6TU9aOk1PWkFNQklRVUU6U29mYWxhOkJ1emkKKzI6TVo6TU9aOk1PWkFNQklRVUU6U29mYWxhOkNhaWEKKzM6TVo6TU9aOk1PWkFNQklRVUU6U29mYWxhOkNoZW1iYQorNDpNWjpNT1o6TU9aQU1CSVFVRTpTb2ZhbGE6Q2hlcmluZ29tYQorNTpNWjpNT1o6TU9aQU1CSVFVRTpTb2ZhbGE6Q2hpYmFiYXZhCis2Ok1aOk1PWjpNT1pBTUJJUVVFOlNvZmFsYTpEb25kbworNzpNWjpNT1o6TU9aQU1CSVFVRTpTb2ZhbGE6R29yb25nb3NhCis4Ok1aOk1PWjpNT1pBTUJJUVVFOlNvZmFsYTpNYWNoYW5nYQorOTpNWjpNT1o6TU9aQU1CSVFVRTpTb2ZhbGE6TWFyaW5ndWUKKzEwOk1aOk1PWjpNT1pBTUJJUVVFOlNvZmFsYTpNYXJyb21ldQorMTE6TVo6TU9aOk1PWkFNQklRVUU6U29mYWxhOk11YW56YQorMTI6TVo6TU9aOk1PWkFNQklRVUU6U29mYWxhOk5oYW1hdGFuZGEKKzE6TVo6TU9aOk1PWkFNQklRVUU6TWFwdXRvOkJvYW5lCisyOk1aOk1PWjpNT1pBTUJJUVVFOk1hcHV0bzpNYWd1ZGUKKzM6TVo6TU9aOk1PWkFNQklRVUU6TWFwdXRvOk1hbmhpY2EKKzQ6TVo6TU9aOk1PWkFNQklRVUU6TWFwdXRvOk1hcHV0bworNTpNWjpNT1o6TU9aQU1CSVFVRTpNYXB1dG86TWFycmFjdWVuZQorNjpNWjpNT1o6TU9aQU1CSVFVRTpNYXB1dG86TWF0dXR1aW5lCis3Ok1aOk1PWjpNT1pBTUJJUVVFOk1hcHV0bzpNb2FtYmEKKzg6TVo6TU9aOk1PWkFNQklRVUU6TWFwdXRvOk5hbWFhY2hhCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvTVVTL01VU19BRE1JTjFfTEVYLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9NVVMvTVVTX0FETUlOMV9MRVgudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEzOTM2YjMKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvTVVTL01VU19BRE1JTjFfTEVYLnR4dApAQCAtMCwwICsxLDE4IEBACisxOk1VLUFHOk1VOkFHQUxFR0EgSVNMQU5EUworMjpNVS1CUjpNVTpCRUFVIEJBU1NJTiBST1NFIEhJTEwKKzM6TVUtQkw6TVU6QkxBQ0sgUklWRVIKKzQ6TVUtQ0M6TVU6Q0FSR0FET1MgQ0FSQUpPUyBTSE9BTFMgW1NBSU5UIEJSQU5ET04gSVNMQU5EU10KKzU6TVUtQ1U6TVU6Q1VSRVBJUEUKKzY6TVUtRkw6TVU6RkxBQ1EKKzc6TVUtR1A6TVU6R1JBTkQgUE9SVAorODpNVVMtTTpNVTpNQVVSSVRJVVMKKzk6TVUtTU86TVU6TU9LQQorMTA6TVUtUEE6TVU6UEFNUExFTU9VU1NFUworMTE6TVUtUFc6TVU6UExBSU5FUyBXSUxIRU1TCisxMjpNVS1QVTpNVTpQT1JUIExPVUlTCisxMzpNVS1QVTpNVTpQT1JUIExPVUlTCisxNDpNVS1RQjpNVTpRVUFUUkUgQk9STkVTCisxNTpNVS1SUjpNVTpSSVZJRVJFIERVIFJFTVBBUlQKKzE2Ok1VLVJPOk1VOlJPRFJJR1VFUyBJU0xBTkQKKzE3Ok1VLVNBOk1VOlNBVkFOTkUKKzE4Ok1VLVZQOk1VOlZBQ09BUyBQSE9FTklYCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvTVVTL01VU19BRE1JTjJfTEVYLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9NVVMvTVVTX0FETUlOMl9MRVgudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM0ODRmY2MKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvTVVTL01VU19BRE1JTjJfTEVYLnR4dApAQCAtMCwwICsxIEBACisxOk1VOk1VUzpNQVVSSVRJVVM6TWF1cml0aXVzOk1VUy5MMi4xCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvTVdJL01XSV9BRE1JTjFfTEVYLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9NV0kvTVdJX0FETUlOMV9MRVgudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRhMzU0MzEKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvTVdJL01XSV9BRE1JTjFfTEVYLnR4dApAQCAtMCwwICsxLDMwIEBACisxOk1XLUJBOk1XOkJBTEFLQQorMjpNVy1CTDpNVzpCTEFOVFlSRQorMzpNVy1DOk1XOkNFTlRSQUwgW0NFTlRSQUw0XQorNDpNVy1DSzpNVzpDSElLV0FXQQorNTpNVy1DUjpNVzpDSElSQURaVUxVCis2Ok1XLUNUOk1XOkNISVRJUEEKKzc6TVctREU6TVc6REVEWkEKKzg6TVctRE86TVc6RE9XQQorOTpNVy1LUjpNVzpLQVJPTkdBCisxMDpNVy1LUzpNVzpLQVNVTkdVCisxMTpNVy1MSzpNVzpMSUtPTUEgSVNMQU5ECisxMjpNVy1MSTpNVzpMSUxPTkdXRQorMTM6TVctTUg6TVc6TUFDSElOR0EKKzE0Ok1XLU1HOk1XOk1BTkdPQ0hJCisxNTpNVy1NQzpNVzpNQ0hJTkpJCisxNjpNVy1NVTpNVzpNVUxBTkpFCisxNzpNVy1NVzpNVzpNV0FOWkEKKzE4Ok1XLU1aOk1XOk1aSU1CQQorMTk6TVctTkI6TVc6TktIQVRBIEJBWQorMjA6TVctTks6TVc6TktIT1RBS09UQQorMjE6TVctTjpNVzpOT1JUSEVSTiBbTk9SVEhFUk4xXQorMjI6TVctTlM6TVc6TlNBTkpFCisyMzpNVy1OVTpNVzpOVENIRVUKKzI0Ok1XLU5JOk1XOk5UQ0hJU0kKKzI1Ok1XLVBIOk1XOlBIQUxPTUJFCisyNjpNVy1SVTpNVzpSVU1QSEkKKzI3Ok1XLVNBOk1XOlNBTElNQQorMjg6TVctUzpNVzpTT1VUSEVSTiBbU09VVEhFUk4yXQorMjk6TVctVEg6TVc6VEhZT0xPCiszMDpNVy1aTzpNVzpaT01CQQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L01XSS9NV0lfQURNSU4yX0xFWC50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvTVdJL01XSV9BRE1JTjJfTEVYLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NjYzNzVmCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L01XSS9NV0lfQURNSU4yX0xFWC50eHQKQEAgLTAsMCArMSwyNCBAQAorMTpNVzpNV0k6TUFMQVdJOlNvdXRoZXJuOkJsYW50eXJlCisyOk1XOk1XSTpNQUxBV0k6U291dGhlcm46Q2hpa3dhd2EKKzM6TVc6TVdJOk1BTEFXSTpTb3V0aGVybjpDaGlyYWR6dWx1Cis0Ok1XOk1XSTpNQUxBV0k6U291dGhlcm46TWFjaGluZ2EKKzU6TVc6TVdJOk1BTEFXSTpTb3V0aGVybjpNYW5nb2NoaQorNjpNVzpNV0k6TUFMQVdJOlNvdXRoZXJuOk11bGFuamUKKzc6TVc6TVdJOk1BTEFXSTpTb3V0aGVybjpNd2FuemEKKzg6TVc6TVdJOk1BTEFXSTpTb3V0aGVybjpOc2FuamUKKzk6TVc6TVdJOk1BTEFXSTpTb3V0aGVybjpUaHlvbG8KKzEwOk1XOk1XSTpNQUxBV0k6U291dGhlcm46Wm9tYmEKKzE6TVc6TVdJOk1BTEFXSTpDZW50cmFsOkRlZHphCisyOk1XOk1XSTpNQUxBV0k6Q2VudHJhbDpEb3dhCiszOk1XOk1XSTpNQUxBV0k6Q2VudHJhbDpLYXN1bmd1Cis0Ok1XOk1XSTpNQUxBV0k6Q2VudHJhbDpMaWxvbmd3ZQorNTpNVzpNV0k6TUFMQVdJOkNlbnRyYWw6TWNoaW5naQorNjpNVzpNV0k6TUFMQVdJOkNlbnRyYWw6Tmtob3Rha290YQorNzpNVzpNV0k6TUFMQVdJOkNlbnRyYWw6TnRjaGV1Cis4Ok1XOk1XSTpNQUxBV0k6Q2VudHJhbDpOdGNoaXNpCis5Ok1XOk1XSTpNQUxBV0k6Q2VudHJhbDpTYWxpbWEKKzE6TVc6TVdJOk1BTEFXSTpOb3J0aGVybjpDaGl0aXBhCisyOk1XOk1XSTpNQUxBV0k6Tm9ydGhlcm46S2Fyb25nYQorMzpNVzpNV0k6TUFMQVdJOk5vcnRoZXJuOk16aW1iYQorNDpNVzpNV0k6TUFMQVdJOk5vcnRoZXJuOk5rYXRhLUJheQorNTpNVzpNV0k6TUFMQVdJOk5vcnRoZXJuOlJ1bXBoaQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L05BTS9OQU1fQURNSU4xX0xFWC50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvTkFNL05BTV9BRE1JTjFfTEVYLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZmQ4MjNjCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L05BTS9OQU1fQURNSU4xX0xFWC50eHQKQEAgLTAsMCArMSwzOCBAQAorMTpOQS1CRVQ6TkE6QkVUSEFOSUVOCisyOk5BLUJPOk5BOkJPRVNNQU5MQU5ECiszOk5BLUNBOk5BOkNBUFJJVkkKKzQ6TkEtREE6TkE6REFNQVJBTEFORAorNTpOQS1FUjpOQTpFUk9OR08KKzY6TkEtR086TkE6R09CQUJJUworNzpOQS1HUjpOQTpHUk9PVEZPTlRFSU4KKzg6TkEtSEE6TkE6SEFSREFQCis5Ok5BLUhFQTpOQTpIRVJFUk9MQU5EIEVBU1QKKzEwOk5BLUhFVzpOQTpIRVJFUk9MQU5EIFdFU1QKKzExOk5BLUtBSzpOQTpLQU9LT0xBTkQKKzEyOk5BLUtBOk5BOktBUkFTCisxMzpOQS1LQVM6TkE6S0FSQVNCVVJHCisxNDpOQS1LSUI6TkE6S0FSSUJJQgorMTU6TkEtS0FWOk5BOktBVkFOR08KKzE2Ok5BLUtFOk5BOktFRVRNQU5TSE9PUAorMTc6TkEtS0g6TkE6S0hPTUFTCisxODpOQS1LVTpOQTpLVU5FTkUKKzE5Ok5BLUxVOk5BOkxVREVSSVRaCisyMDpOQS1NTFQ6TkE6TUFMVEFIT0hFCisyMTpOQS1NUkk6TkE6TUFSSUVOVEFMCisyMjpOQS1OQUw6TkE6TkFNQUxBTkQKKzIzOk5BLU9XOk5BOk9IQU5HV0VOQQorMjQ6TkEtT0tEOk5BOk9LQUhBTkRKQQorMjU6TkEtT0s6TkE6T0tBVkFOR08KKzI2Ok5BLU9IOk5BOk9NQUhFS0UKKzI3Ok5BLU9NVTpOQTpPTUFSVVJVCisyODpOQS1PUzpOQTpPTVVTQVRJCisyOTpOQS1PTjpOQTpPU0hBTkEKKzMwOk5BLU9UOk5BOk9TSElLT1RPCiszMTpOQS1PVEk6TkE6T1RKSVdBUk9OR08KKzMyOk5BLU9EOk5BOk9USk9aT05ESlVQQQorMzM6TkEtT1VUOk5BOk9VVEpPCiszNDpOQS1PV0E6TkE6T1dBTUJPCiszNTpOQS1SQkg6TkE6UkVIT0JPVEgKKzM2Ok5BLVNXSzpOQTpTV0FLT1BNVU5ECiszNzpOQS1UU0I6TkE6VFNVTUVCCiszODpOQS1XSUg6TkE6V0lOREhPRUsKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9OQU0vTkFNX0FETUlOMl9MRVgudHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L05BTS9OQU1fQURNSU4yX0xFWC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWM5OTA4YgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9OQU0vTkFNX0FETUlOMl9MRVgudHh0CkBAIC0wLDAgKzEsMzMgQEAKKzE6TkE6TkFNOk5BTUlCSUE6THVkZXJpdHo6TkFNLkwyLjEwCisyOk5BOk5BTTpOQU1JQklBOkx1ZGVyaXR6Ok5BTS5MMi40CiszOk5BOk5BTTpOQU1JQklBOkx1ZGVyaXR6Ok5BTS5MMi41Cis0Ok5BOk5BTTpOQU1JQklBOkx1ZGVyaXR6Ok5BTS5MMi42Cis1Ok5BOk5BTTpOQU1JQklBOkx1ZGVyaXR6Ok5BTS5MMi43Cis2Ok5BOk5BTTpOQU1JQklBOkx1ZGVyaXR6Ok5BTS5MMi44Cis3Ok5BOk5BTTpOQU1JQklBOkx1ZGVyaXR6Ok5BTS5MMi45CisxOk5BOk5BTTpOQU1JQklBOk1hcmllbnRhbDpOQU0uTDIuMTUKKzE6TkE6TkFNOk5BTUlCSUE6S2VldG1hbnNob29wOk5BTS5MMi4xMworMTpOQTpOQU06TkFNSUJJQTpTd2Frb3BtdW5kOk5BTS5MMi4zMAorMTpOQTpOQU06TkFNSUJJQTpOYW1hbGFuZDpOQU0uTDIuMQorMTpOQTpOQU06TkFNSUJJQTpLYXJpYmliOk5BTS5MMi4yOQorMTpOQTpOQU06TkFNSUJJQTpIZXJlcm9sYW5kIEVhc3Q6TkFNLkwyLjExCisyOk5BOk5BTTpOQU1JQklBOkhlcmVyb2xhbmQgRWFzdDpOQU0uTDIuMTIKKzE6TkE6TkFNOk5BTUlCSUE6S2Fva29sYW5kOk5BTS5MMi4yOAorMTpOQTpOQU06TkFNSUJJQTpHcm9vdGZvbnRlaW46TkFNLkwyLjI0CisxOk5BOk5BTTpOQU1JQklBOkhlcmVyb2xhbmQgV2VzdDpOQU0uTDIuMTkKKzE6TkE6TkFNOk5BTUlCSUE6S2F2YW5nbzpOQU0uTDIuMjYKKzE6TkE6TkFNOk5BTUlCSUE6Qm9lc21hbmxhbmQ6TkFNLkwyLjE4CisxOk5BOk5BTTpOQU1JQklBOkJldGhhbmllbjpOQU0uTDIuMworMTpOQTpOQU06TkFNSUJJQTpPa2FoYW5kamE6TkFNLkwyLjE3CisxOk5BOk5BTTpOQU1JQklBOlRzdW1lYjpOQU0uTDIuMzIKKzE6TkE6TkFNOk5BTUlCSUE6T3V0am86TkFNLkwyLjIyCisxOk5BOk5BTTpOQU1JQklBOk93YW1ibzpOQU0uTDIuMTQKKzE6TkE6TkFNOk5BTUlCSUE6V2luZGhvZWs6TkFNLkwyLjMzCisxOk5BOk5BTTpOQU1JQklBOkdvYmFiaXM6TkFNLkwyLjIzCisxOk5BOk5BTTpOQU1JQklBOkRhbWFyYWxhbmQ6TkFNLkwyLjI3CisxOk5BOk5BTTpOQU1JQklBOlJlaG9ib3RoOk5BTS5MMi4yMAorMTpOQTpOQU06TkFNSUJJQTpDYXByaXZpOk5BTS5MMi4yNQorMTpOQTpOQU06TkFNSUJJQTpPdGppd2Fyb25nbzpOQU0uTDIuMzEKKzE6TkE6TkFNOk5BTUlCSUE6S2FyYXNidXJnOk5BTS5MMi4yMQorMTpOQTpOQU06TkFNSUJJQTpNYWx0YWhvaGU6TkFNLkwyLjIKKzE6TkE6TkFNOk5BTUlCSUE6T21hcnVydTpOQU0uTDIuMTYKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9ORVIvTkVSX0FETUlOMV9MRVgudHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L05FUi9ORVJfQURNSU4xX0xFWC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTU4YTBjYgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9ORVIvTkVSX0FETUlOMV9MRVgudHh0CkBAIC0wLDAgKzEsOCBAQAorMTpORS05Ok5FOkFHQURFWgorMjpORS0yOk5FOkRJRkZBCiszOk5FLTM6TkU6RE9TU08KKzQ6TkUtNDpORTpNQVJBREkKKzU6TkUtODpORTpOSUFNRVkKKzY6TkUtNTpORTpUQUhPVUEKKzc6TkUtNjpORTpUSUxMQUJFUlkKKzg6TkUtNzpORTpaSU5ERVIKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9ORVIvTkVSX0FETUlOMl9MRVgudHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L05FUi9ORVJfQURNSU4yX0xFWC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTUxMjllMwotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9ORVIvTkVSX0FETUlOMl9MRVgudHh0CkBAIC0wLDAgKzEsMzUgQEAKKzE6TkU6TkVSOk5JR0VSOkRpZmZhOkRpZmZhCisyOk5FOk5FUjpOSUdFUjpEaWZmYTpNYWluZS1Tb3JkYQorMzpORTpORVI6TklHRVI6RGlmZmE6Tmd1aWdtaQorMTpORTpORVI6TklHRVI6WmluZGVyOkdvdXJlCisyOk5FOk5FUjpOSUdFUjpaaW5kZXI6TWFnYXJpYQorMzpORTpORVI6TklHRVI6WmluZGVyOk1hdGFtZXllCis0Ok5FOk5FUjpOSUdFUjpaaW5kZXI6TWlycmlhaAorNTpORTpORVI6TklHRVI6WmluZGVyOlRhbm91dAorMTpORTpORVI6TklHRVI6TWFyYWRpOkFndWllCisyOk5FOk5FUjpOSUdFUjpNYXJhZGk6RGFrb3JvCiszOk5FOk5FUjpOSUdFUjpNYXJhZGk6R3VpZGFuLVJvdW1qaQorNDpORTpORVI6TklHRVI6TWFyYWRpOk1hZGFyb3VuZmEKKzU6TkU6TkVSOk5JR0VSOk1hcmFkaTpNYXlhaGkKKzY6TkU6TkVSOk5JR0VSOk1hcmFkaTpUZXNzYW91YQorMTpORTpORVI6TklHRVI6VGFob3VhOkJpcm5pIE5rb25uaQorMjpORTpORVI6TklHRVI6VGFob3VhOkJvdXphCiszOk5FOk5FUjpOSUdFUjpUYWhvdWE6SWxsZWxhCis0Ok5FOk5FUjpOSUdFUjpUYWhvdWE6S2VpdGEKKzU6TkU6TkVSOk5JR0VSOlRhaG91YTpNYWRhb3VhCis2Ok5FOk5FUjpOSUdFUjpUYWhvdWE6VGFob3VhCis3Ok5FOk5FUjpOSUdFUjpUYWhvdWE6VGNoaW4tVGFiYXJhZGVuCisxOk5FOk5FUjpOSUdFUjpUaWxsYWJlcnk6RmVsaW5ndWUKKzI6TkU6TkVSOk5JR0VSOlRpbGxhYmVyeTpLb2xsbworMzpORTpORVI6TklHRVI6VGlsbGFiZXJ5Ok91YWxsYW0KKzQ6TkU6TkVSOk5JR0VSOlRpbGxhYmVyeTpTYXkKKzU6TkU6TkVSOk5JR0VSOlRpbGxhYmVyeTpUZXJhCis2Ok5FOk5FUjpOSUdFUjpUaWxsYWJlcnk6VGlsbGFiZXJpCisxOk5FOk5FUjpOSUdFUjpEb3NzbzpCb2JveWUKKzI6TkU6TkVSOk5JR0VSOkRvc3NvOkRvc3NvIENhbnRvbgorMzpORTpORVI6TklHRVI6RG9zc286RG91dGNoaQorNDpORTpORVI6TklHRVI6RG9zc286R2F5YQorNTpORTpORVI6TklHRVI6RG9zc286TG9nYQorMTpORTpORVI6TklHRVI6QWdhZGV6OkFybGl0CisyOk5FOk5FUjpOSUdFUjpBZ2FkZXo6QmlsbWEKKzM6TkU6TkVSOk5JR0VSOkFnYWRlejpUY2hpcm96ZXJpbmUKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9OR0EvTkdBX0FETUlOMV9MRVgudHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L05HQS9OR0FfQURNSU4xX0xFWC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzMzYzIxNAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9OR0EvTkdBX0FETUlOMV9MRVgudHh0CkBAIC0wLDAgKzEsNDAgQEAKKzE6TkctQUI6Tkc6QUJJQQorMjpORy1GQzpORzpBQlVKQSBDQVBJVEFMIFRFUlJJVE9SWQorMzpORy1BRDpORzpBREFNQVdBCis0Ok5HLUFXTTpORzpBREFNV0FSQQorNTpORy1BSzpORzpBS1dBIElCT00KKzY6TkctQUtXOk5HOkFLV0FMQk9NCis3Ok5HLUFOOk5HOkFOQU1CUkEKKzg6TkctQkE6Tkc6QkFVQ0hJCis5Ok5HLUJZOk5HOkJBWUVMU0EKKzEwOk5HLUJFOk5HOkJFTlVFCisxMTpORy1CTzpORzpCT1JOTworMTI6TkctQ1I6Tkc6Q1JPU1MgUklWRVIKKzEzOk5HLURFOk5HOkRFTFRBCisxNDpORy1FQjpORzpFQk9OWUkKKzE1Ok5HLUVEOk5HOkVETworMTY6TkctRUs6Tkc6RUtJVEkKKzE3Ok5HLUVOOk5HOkVOVUdVCisxODpORy1GQ1Q6Tkc6RkNUCisxOTpORy1HTzpORzpHT01CRQorMjA6TkctSU06Tkc6SU1PCisyMTpORy1KSTpORzpKSUdBV0EKKzIyOk5HLUtEOk5HOktBRFVOQQorMjM6TkctS046Tkc6S0FOTworMjQ6TkctS1Q6Tkc6S0FUU0lOQQorMjU6TkctS0U6Tkc6S0VCQkkKKzI2Ok5HLUtPOk5HOktPR0kKKzI3Ok5HLUtXOk5HOktXQVJBCisyODpORy1MQTpORzpMQUdPUworMjk6TkctTkE6Tkc6TkFTU0FSQVdBCiszMDpORy1OSTpORzpOSUdFUgorMzE6TkctT0c6Tkc6T0dVTgorMzI6TkctT046Tkc6T05ETworMzM6TkctT1M6Tkc6T1NVTgorMzQ6TkctT1k6Tkc6T1lPCiszNTpORy1QTDpORzpQTEFURUFVCiszNjpORy1SSTpORzpSSVZFUlMKKzM3Ok5HLVNPOk5HOlNPS09UTworMzg6TkctVEE6Tkc6VEFSQUJBCiszOTpORy1ZTzpORzpZT0JFCis0MDpORy1aQTpORzpaQU1GQVJBCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvTkdBL05HQV9BRE1JTjJfTEVYLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9OR0EvTkdBX0FETUlOMl9MRVgudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU2M2YzYTAKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvTkdBL05HQV9BRE1JTjJfTEVYLnR4dApAQCAtMCwwICsxLDUzOCBAQAorMTpORzpOR0E6TklHRVJJQTpKaWdhd2E6QmFidXJhCisyOk5HOk5HQTpOSUdFUklBOkppZ2F3YTpCaXJpbml3YQorMzpORzpOR0E6TklHRVJJQTpKaWdhd2E6QmlybmluS3UKKzQ6Tkc6TkdBOk5JR0VSSUE6SmlnYXdhOkR1dHNlCis1Ok5HOk5HQTpOSUdFUklBOkppZ2F3YTpHYXJraQorNjpORzpOR0E6TklHRVJJQTpKaWdhd2E6R3VtZWwKKzc6Tkc6TkdBOk5JR0VSSUE6SmlnYXdhOkd3YXJhbQorODpORzpOR0E6TklHRVJJQTpKaWdhd2E6SGFkZWppYQorOTpORzpOR0E6TklHRVJJQTpKaWdhd2E6SmFodW4KKzEwOk5HOk5HQTpOSUdFUklBOkppZ2F3YTpLYWZpbkhhdQorMTE6Tkc6TkdBOk5JR0VSSUE6SmlnYXdhOkthemF1cmUKKzEyOk5HOk5HQTpOSUdFUklBOkppZ2F3YTpLaXJpS2FzYQorMTM6Tkc6TkdBOk5JR0VSSUE6SmlnYXdhOktpeWF3YQorMTQ6Tkc6TkdBOk5JR0VSSUE6SmlnYXdhOk1hbGFtTWFkCisxNTpORzpOR0E6TklHRVJJQTpKaWdhd2E6UmluZ2ltCisxNjpORzpOR0E6TklHRVJJQTpKaWdhd2E6Um9uaQorMTc6Tkc6TkdBOk5JR0VSSUE6SmlnYXdhOlN1bGUtVGFuCisxOk5HOk5HQTpOSUdFUklBOkNyb3NzIFJpdmVyOkFiaQorMjpORzpOR0E6TklHRVJJQTpDcm9zcyBSaXZlcjpBa2Fta3BhCiszOk5HOk5HQTpOSUdFUklBOkNyb3NzIFJpdmVyOkFrcGFidXlvCis0Ok5HOk5HQTpOSUdFUklBOkNyb3NzIFJpdmVyOkJpYXNlCis1Ok5HOk5HQTpOSUdFUklBOkNyb3NzIFJpdmVyOkJva2kKKzY6Tkc6TkdBOk5JR0VSSUE6Q3Jvc3MgUml2ZXI6Q2FsYWJhcgorNzpORzpOR0E6TklHRVJJQTpDcm9zcyBSaXZlcjpJa29tCis4Ok5HOk5HQTpOSUdFUklBOkNyb3NzIFJpdmVyOk9iYW5saWt1Cis5Ok5HOk5HQTpOSUdFUklBOkNyb3NzIFJpdmVyOk9idWJyYQorMTA6Tkc6TkdBOk5JR0VSSUE6Q3Jvc3MgUml2ZXI6T2J1ZHUKKzExOk5HOk5HQTpOSUdFUklBOkNyb3NzIFJpdmVyOk9kdWtwYW5pCisxMjpORzpOR0E6TklHRVJJQTpDcm9zcyBSaXZlcjpPZ29qYQorMTM6Tkc6TkdBOk5JR0VSSUE6Q3Jvc3MgUml2ZXI6WWFrdXJyCisxNDpORzpOR0E6TklHRVJJQTpDcm9zcyBSaXZlcjpZYWxhIENyb3NzCisxOk5HOk5HQTpOSUdFUklBOkltbzpBYm9oLU1iYQorMjpORzpOR0E6TklHRVJJQTpJbW86QWhpenUtTWIKKzM6Tkc6TkdBOk5JR0VSSUE6SW1vOkVoaW1lLU1iCis0Ok5HOk5HQTpOSUdFUklBOkltbzpFemluaWhpdAorNTpORzpOR0E6TklHRVJJQTpJbW86SWRlYXRvCis2Ok5HOk5HQTpOSUdFUklBOkltbzpJZGVhdG9ObworNzpORzpOR0E6TklHRVJJQTpJbW86SWhpdHRlL1UKKzg6Tkc6TkdBOk5JR0VSSUE6SW1vOklrZWR1cnUKKzk6Tkc6TkdBOk5JR0VSSUE6SW1vOklzaWFsYU1iCisxMDpORzpOR0E6TklHRVJJQTpJbW86SXN1CisxMTpORzpOR0E6TklHRVJJQTpJbW86TWJhaXRvbGkKKzEyOk5HOk5HQTpOSUdFUklBOkltbzpOZ29yLU9rcAorMTM6Tkc6TkdBOk5JR0VSSUE6SW1vOk5rd2VycmUKKzE0Ok5HOk5HQTpOSUdFUklBOkltbzpPYm93bworMTU6Tkc6TkdBOk5JR0VSSUE6SW1vOk9ndXRhCisxNjpORzpOR0E6TklHRVJJQTpJbW86T2hhamkvRWcKKzE3Ok5HOk5HQTpOSUdFUklBOkltbzpPa2lnd2UKKzE4Ok5HOk5HQTpOSUdFUklBOkltbzpPcmx1CisxOTpORzpOR0E6TklHRVJJQTpJbW86T3JzdQorMjA6Tkc6TkdBOk5JR0VSSUE6SW1vOk9ydQorMjE6Tkc6TkdBOk5JR0VSSUE6SW1vOk93ZXJyaQorMTpORzpOR0E6TklHRVJJQTpFZG86QWtva28tRWQKKzI6Tkc6TkdBOk5JR0VSSUE6RWRvOkVzYW5DZW50CiszOk5HOk5HQTpOSUdFUklBOkVkbzpFc2FuTm9ydAorNDpORzpOR0E6TklHRVJJQTpFZG86RXNhblNvdXQKKzU6Tkc6TkdBOk5JR0VSSUE6RWRvOkVzYW5XZXN0Cis2Ok5HOk5HQTpOSUdFUklBOkVkbzpFdHNha29FYQorNzpORzpOR0E6TklHRVJJQTpFZG86RXRzYWtvV2UKKzg6Tkc6TkdBOk5JR0VSSUE6RWRvOk9yZWRvIEVkbworOTpORzpOR0E6TklHRVJJQTpFZG86T3JoaW9ubXcKKzEwOk5HOk5HQTpOSUdFUklBOkVkbzpPdmlhTm9ydAorMTE6Tkc6TkdBOk5JR0VSSUE6RWRvOk92aWFTb3V0aC1XZXN0CisxMjpORzpOR0E6TklHRVJJQTpFZG86T3dhbldlc3QKKzE6Tkc6TkdBOk5JR0VSSUE6UGxhdGVhdTpBa3dhbmdhCisyOk5HOk5HQTpOSUdFUklBOlBsYXRlYXU6QXdlCiszOk5HOk5HQTpOSUdFUklBOlBsYXRlYXU6QmFyaW5raUwKKzQ6Tkc6TkdBOk5JR0VSSUE6UGxhdGVhdTpCYXNzYQorNTpORzpOR0E6TklHRVJJQTpQbGF0ZWF1OkRvbWEKKzY6Tkc6TkdBOk5JR0VSSUE6UGxhdGVhdTpKb3NOb3J0aAorNzpORzpOR0E6TklHRVJJQTpQbGF0ZWF1OkthbmFtCis4Ok5HOk5HQTpOSUdFUklBOlBsYXRlYXU6S2VmZmkKKzk6Tkc6TkdBOk5JR0VSSUE6UGxhdGVhdTpMYWZpYQorMTA6Tkc6TkdBOk5JR0VSSUE6UGxhdGVhdTpMYW5ndGFuZworMTE6Tkc6TkdBOk5JR0VSSUE6UGxhdGVhdTpMYW5ndGFuZyAoQikKKzEyOk5HOk5HQTpOSUdFUklBOlBsYXRlYXU6TWFuZ3UKKzEzOk5HOk5HQTpOSUdFUklBOlBsYXRlYXU6TmFzYXJhd2EKKzE0Ok5HOk5HQTpOSUdFUklBOlBsYXRlYXU6UGFua3NoaW4KKzE1Ok5HOk5HQTpOSUdFUklBOlBsYXRlYXU6UXVhJ2FucGEKKzE2Ok5HOk5HQTpOSUdFUklBOlBsYXRlYXU6U2hlbmRhbQorMTc6Tkc6TkdBOk5JR0VSSUE6UGxhdGVhdTpXYXNlCisxOk5HOk5HQTpOSUdFUklBOk95bzpBZmlqaW8KKzI6Tkc6TkdBOk5JR0VSSUE6T3lvOkFraW55ZWxlCiszOk5HOk5HQTpOSUdFUklBOk95bzpFZ2JlZGEKKzQ6Tkc6TkdBOk5JR0VSSUE6T3lvOkliYWRhbk5vcnRoCis1Ok5HOk5HQTpOSUdFUklBOk95bzpJYmFkYW5Ob3J0aC1FYXN0Cis2Ok5HOk5HQTpOSUdFUklBOk95bzpJYmFkYW5Ob3J0aC1XZXN0Cis3Ok5HOk5HQTpOSUdFUklBOk95bzpJYmFkYW5Tb3V0aC1FYXN0Cis4Ok5HOk5HQTpOSUdFUklBOk95bzpJYmFkYW5Tb3V0aC1XZXN0Cis5Ok5HOk5HQTpOSUdFUklBOk95bzpJYmFyYXBhCisxMDpORzpOR0E6TklHRVJJQTpPeW86SWRvCisxMTpORzpOR0E6TklHRVJJQTpPeW86SWZlZGFwbworMTI6Tkc6TkdBOk5JR0VSSUE6T3lvOklmZWxvanUKKzEzOk5HOk5HQTpOSUdFUklBOk95bzpJcmVwbworMTQ6Tkc6TkdBOk5JR0VSSUE6T3lvOklzZXlpbgorMTU6Tkc6TkdBOk5JR0VSSUE6T3lvOktham9sYQorMTY6Tkc6TkdBOk5JR0VSSUE6T3lvOkxhZ2VsdQorMTc6Tkc6TkdBOk5JR0VSSUE6T3lvOk9nYm9tb3NvCisxODpORzpOR0E6TklHRVJJQTpPeW86T2dvLU9sdXcKKzE5Ok5HOk5HQTpOSUdFUklBOk95bzpPbHV5b2xlCisyMDpORzpOR0E6TklHRVJJQTpPeW86T25hLUFyYQorMjE6Tkc6TkdBOk5JR0VSSUE6T3lvOk9yZWxvcGUKKzIyOk5HOk5HQTpOSUdFUklBOk95bzpPcmlyZQorMjM6Tkc6TkdBOk5JR0VSSUE6T3lvOk95bworMjQ6Tkc6TkdBOk5JR0VSSUE6T3lvOlN1cnVsZXJlCisxOk5HOk5HQTpOSUdFUklBOkRlbHRhOkFuaW9jaGFOCisyOk5HOk5HQTpOSUdFUklBOkRlbHRhOkFuaW9jaGFTCiszOk5HOk5HQTpOSUdFUklBOkRlbHRhOkJvbWFkaQorNDpORzpOR0E6TklHRVJJQTpEZWx0YTpCdXJ1dHUKKzU6Tkc6TkdBOk5JR0VSSUE6RGVsdGE6RXRoaW9wZUUKKzY6Tkc6TkdBOk5JR0VSSUE6RGVsdGE6RXRoaW9wZVcKKzc6Tkc6TkdBOk5JR0VSSUE6RGVsdGE6SWthTm9ydGgKKzg6Tkc6TkdBOk5JR0VSSUE6RGVsdGE6SWthU291dGgKKzk6Tkc6TkdBOk5JR0VSSUE6RGVsdGE6SXNva29Ob3IKKzEwOk5HOk5HQTpOSUdFUklBOkRlbHRhOklzb2tvU291CisxMTpORzpOR0E6TklHRVJJQTpEZWx0YTpOZG9rd2FFYQorMTI6Tkc6TkdBOk5JR0VSSUE6RGVsdGE6TmRva3dhV2UKKzEzOk5HOk5HQTpOSUdFUklBOkRlbHRhOk9rcGUKKzE0Ok5HOk5HQTpOSUdFUklBOkRlbHRhOk9zaGltaWxsCisxNTpORzpOR0E6TklHRVJJQTpEZWx0YTpTYXBlbGUKKzE2Ok5HOk5HQTpOSUdFUklBOkRlbHRhOlVnaGVsaU5vCisxNzpORzpOR0E6TklHRVJJQTpEZWx0YTpVZ2hlbGlTbworMTg6Tkc6TkdBOk5JR0VSSUE6RGVsdGE6V2FycmlOb3J0aAorMTk6Tkc6TkdBOk5JR0VSSUE6RGVsdGE6V2FycmlTb3V0aAorMTpORzpOR0E6TklHRVJJQTpUYXJhYmE6QmFsaQorMjpORzpOR0E6TklHRVJJQTpUYXJhYmE6RG9uZ2EKKzM6Tkc6TkdBOk5JR0VSSUE6VGFyYWJhOkdhc2hha2EKKzQ6Tkc6TkdBOk5JR0VSSUE6VGFyYWJhOkliaQorNTpORzpOR0E6TklHRVJJQTpUYXJhYmE6SmFsaW5nbworNjpORzpOR0E6TklHRVJJQTpUYXJhYmE6S2FyaW0tTGEKKzc6Tkc6TkdBOk5JR0VSSUE6VGFyYWJhOkxhdQorODpORzpOR0E6TklHRVJJQTpUYXJhYmE6U2FyZGF1bmEKKzk6Tkc6TkdBOk5JR0VSSUE6VGFyYWJhOlRha3VtCisxMDpORzpOR0E6TklHRVJJQTpUYXJhYmE6V3VrYXJpCisxMTpORzpOR0E6TklHRVJJQTpUYXJhYmE6WW9ycm8KKzEyOk5HOk5HQTpOSUdFUklBOlRhcmFiYTpaaW5nCisxOk5HOk5HQTpOSUdFUklBOkFkYW13YXJhOkZ1Zm9yZQorMjpORzpOR0E6TklHRVJJQTpBZGFtd2FyYTpHYW55ZQorMzpORzpOR0E6TklHRVJJQTpBZGFtd2FyYTpHb21iaQorNDpORzpOR0E6TklHRVJJQTpBZGFtd2FyYTpHdXl1aworNTpORzpOR0E6TklHRVJJQTpBZGFtd2FyYTpIb25nCis2Ok5HOk5HQTpOSUdFUklBOkFkYW13YXJhOkphZGEKKzc6Tkc6TkdBOk5JR0VSSUE6QWRhbXdhcmE6TWFkYWdhbGkKKzg6Tkc6TkdBOk5JR0VSSUE6QWRhbXdhcmE6TWFpaGEKKzk6Tkc6TkdBOk5JR0VSSUE6QWRhbXdhcmE6TWF5by1CZWwKKzEwOk5HOk5HQTpOSUdFUklBOkFkYW13YXJhOk1pY2hpa2EKKzExOk5HOk5HQTpOSUdFUklBOkFkYW13YXJhOk11YmkKKzEyOk5HOk5HQTpOSUdFUklBOkFkYW13YXJhOk51bWFuCisxMzpORzpOR0E6TklHRVJJQTpBZGFtd2FyYTpTaGVsbGVuZworMTQ6Tkc6TkdBOk5JR0VSSUE6QWRhbXdhcmE6U29uZworMTU6Tkc6TkdBOk5JR0VSSUE6QWRhbXdhcmE6WW9sYQorMTpORzpOR0E6TklHRVJJQTpLYXRzaW5hOkJha29yaQorMjpORzpOR0E6TklHRVJJQTpLYXRzaW5hOkJhdHNhcmkKKzM6Tkc6TkdBOk5JR0VSSUE6S2F0c2luYTpCaW5kYXdhCis0Ok5HOk5HQTpOSUdFUklBOkthdHNpbmE6RGF1cmEKKzU6Tkc6TkdBOk5JR0VSSUE6S2F0c2luYTpEdXRzaW4tTQorNjpORzpOR0E6TklHRVJJQTpLYXRzaW5hOkZhc2thcmkKKzc6Tkc6TkdBOk5JR0VSSUE6S2F0c2luYTpGdW50dWEKKzg6Tkc6TkdBOk5JR0VSSUE6S2F0c2luYTpJbmdhd2EKKzk6Tkc6TkdBOk5JR0VSSUE6S2F0c2luYTpKaWJpYQorMTA6Tkc6TkdBOk5JR0VSSUE6S2F0c2luYTpLYWl0YQorMTE6Tkc6TkdBOk5JR0VSSUE6S2F0c2luYTpLYW5rYXJhCisxMjpORzpOR0E6TklHRVJJQTpLYXRzaW5hOkthbmtpeWEKKzEzOk5HOk5HQTpOSUdFUklBOkthdHNpbmE6S2F0c2luYSAoSykKKzE0Ok5HOk5HQTpOSUdFUklBOkthdHNpbmE6TWFsdW1mYXMKKzE1Ok5HOk5HQTpOSUdFUklBOkthdHNpbmE6TWFuaQorMTY6Tkc6TkdBOk5JR0VSSUE6S2F0c2luYTpNYXNoaQorMTc6Tkc6TkdBOk5JR0VSSUE6S2F0c2luYTpNdXNhd2EKKzE4Ok5HOk5HQTpOSUdFUklBOkthdHNpbmE6UmltaQorMTk6Tkc6TkdBOk5JR0VSSUE6S2F0c2luYTpTYWZhbmEKKzIwOk5HOk5HQTpOSUdFUklBOkthdHNpbmE6WmFuZ28KKzE6Tkc6TkdBOk5JR0VSSUE6RkNUOkFiYWppCisyOk5HOk5HQTpOSUdFUklBOkZDVDpBYnVqYU11bgorMzpORzpOR0E6TklHRVJJQTpGQ1Q6R3dhZ3dhbGEKKzQ6Tkc6TkdBOk5JR0VSSUE6RkNUOkt1amUKKzE6Tkc6TkdBOk5JR0VSSUE6Uml2ZXJzOkFidWEvT2R1CisyOk5HOk5HQTpOSUdFUklBOlJpdmVyczpBaG9hZGEKKzM6Tkc6TkdBOk5JR0VSSUE6Uml2ZXJzOkFrdWt1dG9yCis0Ok5HOk5HQTpOSUdFUklBOlJpdmVyczpBbmRvbmkvTworNTpORzpOR0E6TklHRVJJQTpSaXZlcnM6QXNhcmktVG8KKzY6Tkc6TkdBOk5JR0VSSUE6Uml2ZXJzOkJvbm55Cis3Ok5HOk5HQTpOSUdFUklBOlJpdmVyczpCcmFzcworODpORzpOR0E6TklHRVJJQTpSaXZlcnM6RGVnZW1hCis5Ok5HOk5HQTpOSUdFUklBOlJpdmVyczpFa2VyZW1vcgorMTA6Tkc6TkdBOk5JR0VSSUE6Uml2ZXJzOkVtdW9oYQorMTE6Tkc6TkdBOk5JR0VSSUE6Uml2ZXJzOkV0Y2hlCisxMjpORzpOR0E6TklHRVJJQTpSaXZlcnM6R29rYW5hCisxMzpORzpOR0E6TklHRVJJQTpSaXZlcnM6SWt3ZXJyZQorMTQ6Tkc6TkdBOk5JR0VSSUE6Uml2ZXJzOktoYW5hCisxNTpORzpOR0E6TklHRVJJQTpSaXZlcnM6Tm9ydGhlcm4KKzE2Ok5HOk5HQTpOSUdFUklBOlJpdmVyczpPYmlvL0FrcAorMTc6Tkc6TkdBOk5JR0VSSUE6Uml2ZXJzOk9nYmEvRWdiZQorMTg6Tkc6TkdBOk5JR0VSSUE6Uml2ZXJzOk9rcmlrYQorMTk6Tkc6TkdBOk5JR0VSSUE6Uml2ZXJzOlBvcnRIYXJjb3VydAorMjA6Tkc6TkdBOk5JR0VSSUE6Uml2ZXJzOlNhZ2JhbWEKKzIxOk5HOk5HQTpOSUdFUklBOlJpdmVyczpTb3V0aGVybklqYXcKKzIyOk5HOk5HQTpOSUdFUklBOlJpdmVyczpUYWkvRWtlbQorMTpORzpOR0E6TklHRVJJQTpLYW5vOkFsYmFzdQorMjpORzpOR0E6TklHRVJJQTpLYW5vOkJhZ3dhaQorMzpORzpOR0E6TklHRVJJQTpLYW5vOkJlYmVqaQorNDpORzpOR0E6TklHRVJJQTpLYW5vOkJpY2hpCis1Ok5HOk5HQTpOSUdFUklBOkthbm86QnVua3VyZQorNjpORzpOR0E6TklHRVJJQTpLYW5vOkRhbGEKKzc6Tkc6TkdBOk5JR0VSSUE6S2FubzpEYW1iYXR0YQorODpORzpOR0E6TklHRVJJQTpLYW5vOkRhd2FraW5LCis5Ok5HOk5HQTpOSUdFUklBOkthbm86RGF3YWtpblQKKzEwOk5HOk5HQTpOSUdFUklBOkthbm86R2FiYXNhd2EKKzExOk5HOk5HQTpOSUdFUklBOkthbm86R2F5YQorMTI6Tkc6TkdBOk5JR0VSSUE6S2FubzpHZXphd2EKKzEzOk5HOk5HQTpOSUdFUklBOkthbm86R3dhcnpvCisxNDpORzpOR0E6TklHRVJJQTpLYW5vOkthYm8KKzE1Ok5HOk5HQTpOSUdFUklBOkthbm86S2FubworMTY6Tkc6TkdBOk5JR0VSSUE6S2FubzpLYXJheWUKKzE3Ok5HOk5HQTpOSUdFUklBOkthbm86S3VtYm90c28KKzE4Ok5HOk5HQTpOSUdFUklBOkthbm86S3VyYQorMTk6Tkc6TkdBOk5JR0VSSUE6S2FubzpNaW5qaWJpcgorMjA6Tkc6TkdBOk5JR0VSSUE6S2FubzpOYXNzYXJhdworMjE6Tkc6TkdBOk5JR0VSSUE6S2FubzpSYW5vCisyMjpORzpOR0E6TklHRVJJQTpLYW5vOlJpbWluR2FkCisyMzpORzpOR0E6TklHRVJJQTpLYW5vOlNoYW5vbm8KKzI0Ok5HOk5HQTpOSUdFUklBOkthbm86U3VtYWlsYQorMjU6Tkc6TkdBOk5JR0VSSUE6S2FubzpUYWthaQorMjY6Tkc6TkdBOk5JR0VSSUE6S2FubzpUc2FueWF3YQorMjc6Tkc6TkdBOk5JR0VSSUE6S2FubzpUdWR1bldhZAorMjg6Tkc6TkdBOk5JR0VSSUE6S2FubzpVbmdvZ28KKzI5Ok5HOk5HQTpOSUdFUklBOkthbm86V3VkaWwKKzE6Tkc6TkdBOk5JR0VSSUE6WW9iZTpCYWRlCisyOk5HOk5HQTpOSUdFUklBOllvYmU6RGFtYXR1cnUKKzM6Tkc6TkdBOk5JR0VSSUE6WW9iZTpGaWthCis0Ok5HOk5HQTpOSUdFUklBOllvYmU6RnVuZQorNTpORzpOR0E6TklHRVJJQTpZb2JlOkdlaWRhbQorNjpORzpOR0E6TklHRVJJQTpZb2JlOkd1amJhCis3Ok5HOk5HQTpOSUdFUklBOllvYmU6TmFuZ2VyZQorODpORzpOR0E6TklHRVJJQTpZb2JlOk5ndXJ1Cis5Ok5HOk5HQTpOSUdFUklBOllvYmU6WXVudXNhcmkKKzEwOk5HOk5HQTpOSUdFUklBOllvYmU6WXVzdWZhcmkKKzE6Tkc6TkdBOk5JR0VSSUE6T3N1bjpBdGFrdW1vc2EKKzI6Tkc6TkdBOk5JR0VSSUE6T3N1bjpBeWVkYWFkZQorMzpORzpOR0E6TklHRVJJQTpPc3VuOkF5ZWRpcmUKKzQ6Tkc6TkdBOk5JR0VSSUE6T3N1bjpCb3JpcGUKKzU6Tkc6TkdBOk5JR0VSSUE6T3N1bjpFZGUKKzY6Tkc6TkdBOk5JR0VSSUE6T3N1bjpFZ2JlZG9yZQorNzpORzpOR0E6TklHRVJJQTpPc3VuOkVqaWdibworODpORzpOR0E6TklHRVJJQTpPc3VuOklmZUNlbnRyYWwKKzk6Tkc6TkdBOk5JR0VSSUE6T3N1bjpJZmVOb3J0aAorMTA6Tkc6TkdBOk5JR0VSSUE6T3N1bjpJZmVTb3V0aAorMTE6Tkc6TkdBOk5JR0VSSUE6T3N1bjpJZmVsb2R1bgorMTI6Tkc6TkdBOk5JR0VSSUE6T3N1bjpJbGEKKzEzOk5HOk5HQTpOSUdFUklBOk9zdW46SWxlc2EKKzE0Ok5HOk5HQTpOSUdFUklBOk9zdW46SXJld29sZQorMTU6Tkc6TkdBOk5JR0VSSUE6T3N1bjpJd28KKzE2Ok5HOk5HQTpOSUdFUklBOk9zdW46T2Jva3VuCisxNzpORzpOR0E6TklHRVJJQTpPc3VuOk9kbzB0aW4KKzE4Ok5HOk5HQTpOSUdFUklBOk9zdW46T2xhLU9sdXdhCisxOTpORzpOR0E6TklHRVJJQTpPc3VuOk9sb3J1bmRhCisyMDpORzpOR0E6TklHRVJJQTpPc3VuOk9yaWFkZQorMjE6Tkc6TkdBOk5JR0VSSUE6T3N1bjpPc29nYm8KKzE6Tkc6TkdBOk5JR0VSSUE6T2d1bjpBYmVva3V0YU5vcnRoCisyOk5HOk5HQTpOSUdFUklBOk9ndW46QWRvT2RvL090YQorMzpORzpOR0E6TklHRVJJQTpPZ3VuOkVnYmFkb05vcnRoCis0Ok5HOk5HQTpOSUdFUklBOk9ndW46RWdiYWRvU291dGgKKzU6Tkc6TkdBOk5JR0VSSUE6T2d1bjpJZm8KKzY6Tkc6TkdBOk5JR0VSSUE6T2d1bjpJamVidUVhc3QKKzc6Tkc6TkdBOk5JR0VSSUE6T2d1bjpJamVidU5vcnRoCis4Ok5HOk5HQTpOSUdFUklBOk9ndW46SWplYnVPZGUKKzk6Tkc6TkdBOk5JR0VSSUE6T2d1bjpPYmFmZW1pLU93b2RlCisxMDpORzpOR0E6TklHRVJJQTpPZ3VuOk9kZWRhCisxMTpORzpOR0E6TklHRVJJQTpPZ3VuOk9ndW5XYXRlcnNpZGUKKzEyOk5HOk5HQTpOSUdFUklBOk9ndW46U2hhZ2FtdQorMTpORzpOR0E6TklHRVJJQTpBYmlhOkFiYQorMjpORzpOR0E6TklHRVJJQTpBYmlhOkFmaWtwbworMzpORzpOR0E6TklHRVJJQTpBYmlhOkFmaWtwb1NvCis0Ok5HOk5HQTpOSUdFUklBOkFiaWE6QXJvY2h1a3cKKzU6Tkc6TkdBOk5JR0VSSUE6QWJpYTpCZW5kZQorNjpORzpOR0E6TklHRVJJQTpBYmlhOklrd3Vhbm8KKzc6Tkc6TkdBOk5JR0VSSUE6QWJpYTpJc2lhbGEtTgorODpORzpOR0E6TklHRVJJQTpBYmlhOklzdWlrd3VhCis5Ok5HOk5HQTpOSUdFUklBOkFiaWE6T2Jpb21hLU4KKzEwOk5HOk5HQTpOSUdFUklBOkFiaWE6T2hhZmlhIEFiaWEKKzExOk5HOk5HQTpOSUdFUklBOkFiaWE6T2hhb3phcmEKKzEyOk5HOk5HQTpOSUdFUklBOkFiaWE6T25pY2hhCisxMzpORzpOR0E6TklHRVJJQTpBYmlhOlVrd2EKKzE0Ok5HOk5HQTpOSUdFUklBOkFiaWE6VWt3YUVhc3QKKzE1Ok5HOk5HQTpOSUdFUklBOkFiaWE6VW11YWhpYQorMTpORzpOR0E6TklHRVJJQTpCZW51ZTpBZG8KKzI6Tkc6TkdBOk5JR0VSSUE6QmVudWU6QXBhCiszOk5HOk5HQTpOSUdFUklBOkJlbnVlOkJ1cnVrdQorNDpORzpOR0E6TklHRVJJQTpCZW51ZTpHYm9rbworNTpORzpOR0E6TklHRVJJQTpCZW51ZTpHdW1hCis2Ok5HOk5HQTpOSUdFUklBOkJlbnVlOkd3ZXIKKzc6Tkc6TkdBOk5JR0VSSUE6QmVudWU6R3dlcldlc3QKKzg6Tkc6TkdBOk5JR0VSSUE6QmVudWU6S2F0c2luYSAoQmVudWUpCis5Ok5HOk5HQTpOSUdFUklBOkJlbnVlOktvbnNoaXNoCisxMDpORzpOR0E6TklHRVJJQTpCZW51ZTpLd2FuZGUKKzExOk5HOk5HQTpOSUdFUklBOkJlbnVlOk1ha3VyZGkKKzEyOk5HOk5HQTpOSUdFUklBOkJlbnVlOk9nYmFkaWJvCisxMzpORzpOR0E6TklHRVJJQTpCZW51ZTpPanUKKzE0Ok5HOk5HQTpOSUdFUklBOkJlbnVlOk9rcG9rd3UKKzE1Ok5HOk5HQTpOSUdFUklBOkJlbnVlOk90dXJrcG8KKzE2Ok5HOk5HQTpOSUdFUklBOkJlbnVlOlVrdW0KKzE3Ok5HOk5HQTpOSUdFUklBOkJlbnVlOlVzaG9uZ28KKzE4Ok5HOk5HQTpOSUdFUklBOkJlbnVlOlZhbmRlaWt5CisxOk5HOk5HQTpOSUdFUklBOkFrd2FsYm9tOkFiYWsKKzI6Tkc6TkdBOk5JR0VSSUE6QWt3YWxib206RWtldAorMzpORzpOR0E6TklHRVJJQTpBa3dhbGJvbTpFa3BlLUF0YQorNDpORzpOR0E6TklHRVJJQTpBa3dhbGJvbTpFc3NpZW4tVQorNTpORzpOR0E6TklHRVJJQTpBa3dhbGJvbTpFdGltRWtwbworNjpORzpOR0E6TklHRVJJQTpBa3dhbGJvbTpFdGluYW4KKzc6Tkc6TkdBOk5JR0VSSUE6QWt3YWxib206SWtvbm8KKzg6Tkc6TkdBOk5JR0VSSUE6QWt3YWxib206SWtvdC1BYmEKKzk6Tkc6TkdBOk5JR0VSSUE6QWt3YWxib206SWtvdC1Fa3AKKzEwOk5HOk5HQTpOSUdFUklBOkFrd2FsYm9tOkluaQorMTE6Tkc6TkdBOk5JR0VSSUE6QWt3YWxib206SXR1CisxMjpORzpOR0E6TklHRVJJQTpBa3dhbGJvbTpNYm8KKzEzOk5HOk5HQTpOSUdFUklBOkFrd2FsYm9tOk1rcGF0LUVuCisxNDpORzpOR0E6TklHRVJJQTpBa3dhbGJvbTpOc2l0LUlibworMTU6Tkc6TkdBOk5JR0VSSUE6QWt3YWxib206TnNpdC1VYmkKKzE2Ok5HOk5HQTpOSUdFUklBOkFrd2FsYm9tOk9rb2JvCisxNzpORzpOR0E6TklHRVJJQTpBa3dhbGJvbTpPbm5hCisxODpORzpOR0E6TklHRVJJQTpBa3dhbGJvbTpPcm9uCisxOTpORzpOR0E6TklHRVJJQTpBa3dhbGJvbTpPcnVrLUFuYQorMjA6Tkc6TkdBOk5JR0VSSUE6QWt3YWxib206VWthbmFmdW4KKzIxOk5HOk5HQTpOSUdFUklBOkFrd2FsYm9tOlVxdW9JYmVuCisyMjpORzpOR0E6TklHRVJJQTpBa3dhbGJvbTpVcnVhbgorMjM6Tkc6TkdBOk5JR0VSSUE6QWt3YWxib206VXJ1ZU9mZm8KKzI0Ok5HOk5HQTpOSUdFUklBOkFrd2FsYm9tOlV5bworMTpORzpOR0E6TklHRVJJQTpLd2FyYTpBc2EKKzI6Tkc6TkdBOk5JR0VSSUE6S3dhcmE6QmFydXRlbgorMzpORzpOR0E6TklHRVJJQTpLd2FyYTpFZHUKKzQ6Tkc6TkdBOk5JR0VSSUE6S3dhcmE6SWZlbG9kdW4KKzU6Tkc6TkdBOk5JR0VSSUE6S3dhcmE6SWxvcmluV2UKKzY6Tkc6TkdBOk5JR0VSSUE6S3dhcmE6SXJlcG9kdW4KKzc6Tkc6TkdBOk5JR0VSSUE6S3dhcmE6SXJlcG9kdW4gKEIpCis4Ok5HOk5HQTpOSUdFUklBOkt3YXJhOkthaWFtYQorOTpORzpOR0E6TklHRVJJQTpLd2FyYTpNb3JvCisxMDpORzpOR0E6TklHRVJJQTpLd2FyYTpPZmZhCisxMTpORzpOR0E6TklHRVJJQTpLd2FyYTpPeXVuCisxOk5HOk5HQTpOSUdFUklBOkJhdWNoaTpBa2tvCisyOk5HOk5HQTpOSUdFUklBOkJhdWNoaTpBbGthbGVyaQorMzpORzpOR0E6TklHRVJJQTpCYXVjaGk6QmFsYW5nYQorNDpORzpOR0E6TklHRVJJQTpCYXVjaGk6QmF1Y2hpCis1Ok5HOk5HQTpOSUdFUklBOkJhdWNoaTpCaWxsaXJpCis2Ok5HOk5HQTpOSUdFUklBOkJhdWNoaTpEYXJhem8KKzc6Tkc6TkdBOk5JR0VSSUE6QmF1Y2hpOkRhc3MKKzg6Tkc6TkdBOk5JR0VSSUE6QmF1Y2hpOkR1a2t1Cis5Ok5HOk5HQTpOSUdFUklBOkJhdWNoaTpHYW1hd2EKKzEwOk5HOk5HQTpOSUdFUklBOkJhdWNoaTpHYW1qdXdhCisxMTpORzpOR0E6TklHRVJJQTpCYXVjaGk6R29tYmUKKzEyOk5HOk5HQTpOSUdFUklBOkJhdWNoaTpJdGFzL0dhZAorMTM6Tkc6TkdBOk5JR0VSSUE6QmF1Y2hpOkphbWEnYXJlCisxNDpORzpOR0E6TklHRVJJQTpCYXVjaGk6S2FsdHVuZ28KKzE1Ok5HOk5HQTpOSUdFUklBOkJhdWNoaTpLYXRhZ3VtCisxNjpORzpOR0E6TklHRVJJQTpCYXVjaGk6TWlzYXUKKzE3Ok5HOk5HQTpOSUdFUklBOkJhdWNoaTpOYWZhZGEvQgorMTg6Tkc6TkdBOk5JR0VSSUE6QmF1Y2hpOk5pbmdpCisxOTpORzpOR0E6TklHRVJJQTpCYXVjaGk6U2hpcmEKKzIwOk5HOk5HQTpOSUdFUklBOkJhdWNoaTpUYWZhd2EtQgorMjE6Tkc6TkdBOk5JR0VSSUE6QmF1Y2hpOlRvcm8KKzIyOk5HOk5HQTpOSUdFUklBOkJhdWNoaTpZYW1hbHR1LworMjM6Tkc6TkdBOk5JR0VSSUE6QmF1Y2hpOlpha2kKKzE6Tkc6TkdBOk5JR0VSSUE6T25kbzpBZG8tRWtpdGkKKzI6Tkc6TkdBOk5JR0VSSUE6T25kbzpBa29rb05vcnRoCiszOk5HOk5HQTpOSUdFUklBOk9uZG86QWtva29Ob3J0aFdlc3QKKzQ6Tkc6TkdBOk5JR0VSSUE6T25kbzpBa29rb1NvdQorNTpORzpOR0E6TklHRVJJQTpPbmRvOkFrdXJlCis2Ok5HOk5HQTpOSUdFUklBOk9uZG86RWtpdGlFYXMKKzc6Tkc6TkdBOk5JR0VSSUE6T25kbzpFa2l0aVNvdXRoLVdlc3QKKzg6Tkc6TkdBOk5JR0VSSUE6T25kbzpFa2l0aVdlc3QKKzk6Tkc6TkdBOk5JR0VSSUE6T25kbzpFbXVyZS9Jc2UvT3J1bgorMTA6Tkc6TkdBOk5JR0VSSUE6T25kbzpJZGFucmUKKzExOk5HOk5HQTpOSUdFUklBOk9uZG86SWRvL09zaQorMTI6Tkc6TkdBOk5JR0VSSUE6T25kbzpJZmVkb3JlCisxMzpORzpOR0E6TklHRVJJQTpPbmRvOklqZXJvCisxNDpORzpOR0E6TklHRVJJQTpPbmRvOklrYWxlCisxNTpORzpOR0E6TklHRVJJQTpPbmRvOklrZXJlCisxNjpORzpOR0E6TklHRVJJQTpPbmRvOklrb2xlCisxNzpORzpOR0E6TklHRVJJQTpPbmRvOklsYWplRXNlb2RvCisxODpORzpOR0E6TklHRVJJQTpPbmRvOklsZU9sdWppL09rZWlnYm8KKzE5Ok5HOk5HQTpOSUdFUklBOk9uZG86SXJlbGUKKzIwOk5HOk5HQTpOSUdFUklBOk9uZG86TW9iYQorMjE6Tkc6TkdBOk5JR0VSSUE6T25kbzpPZGlnYm8KKzIyOk5HOk5HQTpOSUdFUklBOk9uZG86T25kbworMjM6Tkc6TkdBOk5JR0VSSUE6T25kbzpPc2UKKzI0Ok5HOk5HQTpOSUdFUklBOk9uZG86T3dvCisyNTpORzpOR0E6TklHRVJJQTpPbmRvOk95ZQorMTpORzpOR0E6TklHRVJJQTpLb2dpOkFkYXZpCisyOk5HOk5HQTpOSUdFUklBOktvZ2k6QWphb2t1dGEKKzM6Tkc6TkdBOk5JR0VSSUE6S29naTpBbmtwYQorNDpORzpOR0E6TklHRVJJQTpLb2dpOkJhc3NhCis1Ok5HOk5HQTpOSUdFUklBOktvZ2k6RGVraW5hCis2Ok5HOk5HQTpOSUdFUklBOktvZ2k6SWRhaAorNzpORzpOR0E6TklHRVJJQTpLb2dpOklqdW11Cis4Ok5HOk5HQTpOSUdFUklBOktvZ2k6S2FiYmEvQnUKKzk6Tkc6TkdBOk5JR0VSSUE6S29naTpLb2dpCisxMDpORzpOR0E6TklHRVJJQTpLb2dpOktvdG9ua2FyCisxMTpORzpOR0E6TklHRVJJQTpLb2dpOk9mdQorMTI6Tkc6TkdBOk5JR0VSSUE6S29naTpPa2VoaQorMTM6Tkc6TkdBOk5JR0VSSUE6S29naTpPa2VuZQorMTQ6Tkc6TkdBOk5JR0VSSUE6S29naTpPbGFtYWJvcgorMTU6Tkc6TkdBOk5JR0VSSUE6S29naTpZYWdiYUVhcworMTY6Tkc6TkdBOk5JR0VSSUE6S29naTpZYWdiYVdlcworMTpORzpOR0E6TklHRVJJQTpFbnVndTpBYmFrYWxpaworMjpORzpOR0E6TklHRVJJQTpFbnVndTpBd2d1CiszOk5HOk5HQTpOSUdFUklBOkVudWd1OkVudWd1U291Cis0Ok5HOk5HQTpOSUdFUklBOkVudWd1OkV6ZWFndQorNTpORzpOR0E6TklHRVJJQTpFbnVndTpFenphCis2Ok5HOk5HQTpOSUdFUklBOkVudWd1OklnYm8tRXRpCis3Ok5HOk5HQTpOSUdFUklBOkVudWd1OklnYm8tRXplCis4Ok5HOk5HQTpOSUdFUklBOkVudWd1Oklrd28KKzk6Tkc6TkdBOk5JR0VSSUE6RW51Z3U6SXNoaWVsdQorMTA6Tkc6TkdBOk5JR0VSSUE6RW51Z3U6SXNpLVV6bworMTE6Tkc6TkdBOk5JR0VSSUE6RW51Z3U6SXp6aQorMTI6Tkc6TkdBOk5JR0VSSUE6RW51Z3U6TmthbnUKKzEzOk5HOk5HQTpOSUdFUklBOkVudWd1Ok5zdWtrYQorMTQ6Tkc6TkdBOk5JR0VSSUE6RW51Z3U6T2hhdWt3dQorMTU6Tkc6TkdBOk5JR0VSSUE6RW51Z3U6T2ppLVJpdmVyCisxNjpORzpOR0E6TklHRVJJQTpFbnVndTpVZGkKKzE3Ok5HOk5HQTpOSUdFUklBOkVudWd1OlV6by1Vd2FuaQorMTpORzpOR0E6TklHRVJJQTpMYWdvczpBZ2VnZQorMjpORzpOR0E6TklHRVJJQTpMYWdvczpCYWRhZ2FyeQorMzpORzpOR0E6TklHRVJJQTpMYWdvczpFcGUKKzQ6Tkc6TkdBOk5JR0VSSUE6TGFnb3M6RXRpLU9zYQorNTpORzpOR0E6TklHRVJJQTpMYWdvczpJYmVqdS9MZWtraQorNjpORzpOR0E6TklHRVJJQTpMYWdvczpJa2VqYQorNzpORzpOR0E6TklHRVJJQTpMYWdvczpJa29yb2R1Cis4Ok5HOk5HQTpOSUdFUklBOkxhZ29zOkxhZ29zSXNsYW5kCis5Ok5HOk5HQTpOSUdFUklBOkxhZ29zOk1haW5sYW5kCisxMDpORzpOR0E6TklHRVJJQTpMYWdvczpNdXNoaW4KKzExOk5HOk5HQTpOSUdFUklBOkxhZ29zOk9qbworMTI6Tkc6TkdBOk5JR0VSSUE6TGFnb3M6U2hvbW9sdQorMTpORzpOR0E6TklHRVJJQTpLYWR1bmE6QmlybmluLUcKKzI6Tkc6TkdBOk5JR0VSSUE6S2FkdW5hOkNoaWt1bgorMzpORzpOR0E6TklHRVJJQTpLYWR1bmE6RG9rYS9LYXcKKzQ6Tkc6TkdBOk5JR0VSSUE6S2FkdW5hOkdpd2EKKzU6Tkc6TkdBOk5JR0VSSUE6S2FkdW5hOklnYWJpCis2Ok5HOk5HQTpOSUdFUklBOkthZHVuYTpJa2FyYQorNzpORzpOR0E6TklHRVJJQTpLYWR1bmE6SmFiYQorODpORzpOR0E6TklHRVJJQTpLYWR1bmE6SmVtYSdhCis5Ok5HOk5HQTpOSUdFUklBOkthZHVuYTpLYWNoaWEKKzEwOk5HOk5HQTpOSUdFUklBOkthZHVuYTpLYXVyYQorMTE6Tkc6TkdBOk5JR0VSSUE6S2FkdW5hOkthdXJ1CisxMjpORzpOR0E6TklHRVJJQTpLYWR1bmE6TGVyZQorMTM6Tkc6TkdBOk5JR0VSSUE6S2FkdW5hOk1ha2FyZmkKKzE0Ok5HOk5HQTpOSUdFUklBOkthZHVuYTpTYWJvbi1HYQorMTU6Tkc6TkdBOk5JR0VSSUE6S2FkdW5hOlNvYmEKKzE2Ok5HOk5HQTpOSUdFUklBOkthZHVuYTpUdWR1bgorMTc6Tkc6TkdBOk5JR0VSSUE6S2FkdW5hOlphbmdvbkthCisxODpORzpOR0E6TklHRVJJQTpLYWR1bmE6WmFyaWEKKzE6Tkc6TkdBOk5JR0VSSUE6Qm9ybm86QXNraXJhL1UKKzI6Tkc6TkdBOk5JR0VSSUE6Qm9ybm86QmFtYQorMzpORzpOR0E6TklHRVJJQTpCb3JubzpCaXUKKzQ6Tkc6TkdBOk5JR0VSSUE6Qm9ybm86RGFtYm9hCis1Ok5HOk5HQTpOSUdFUklBOkJvcm5vOkRpa3dhCis2Ok5HOk5HQTpOSUdFUklBOkJvcm5vOkd3b3phCis3Ok5HOk5HQTpOSUdFUklBOkJvcm5vOkthZ2EKKzg6Tkc6TkdBOk5JR0VSSUE6Qm9ybm86S29uZHVnYQorOTpORzpOR0E6TklHRVJJQTpCb3JubzpLdWthd2EKKzEwOk5HOk5HQTpOSUdFUklBOkJvcm5vOk1haWR1Z3VyCisxMTpORzpOR0E6TklHRVJJQTpCb3JubzpNb2JiYXIKKzEyOk5HOk5HQTpOSUdFUklBOkJvcm5vOk1vbmd1bm8KKzEzOk5HOk5HQTpOSUdFUklBOkJvcm5vOk5nYWxhCisxNDpORzpOR0E6TklHRVJJQTpCb3JubzpTaGFuaQorMTpORzpOR0E6TklHRVJJQTpLZWJiaTpBcmV3YQorMjpORzpOR0E6TklHRVJJQTpLZWJiaTpBcmd1bmd1CiszOk5HOk5HQTpOSUdFUklBOktlYmJpOkJhZ3VkbworNDpORzpOR0E6TklHRVJJQTpLZWJiaTpCaXJuaW5LZQorNTpORzpOR0E6TklHRVJJQTpLZWJiaTpCdW56YQorNjpORzpOR0E6TklHRVJJQTpLZWJiaTpEYW5kaQorNzpORzpOR0E6TklHRVJJQTpLZWJiaTpHd2FuZHUKKzg6Tkc6TkdBOk5JR0VSSUE6S2ViYmk6SmVnYQorOTpORzpOR0E6TklHRVJJQTpLZWJiaTpLb2tvL0JlcworMTA6Tkc6TkdBOk5JR0VSSUE6S2ViYmk6TWFpeWFtYQorMTE6Tkc6TkdBOk5JR0VSSUE6S2ViYmk6Tmdhc2tpCisxMjpORzpOR0E6TklHRVJJQTpLZWJiaTpTYWthYmEKKzEzOk5HOk5HQTpOSUdFUklBOktlYmJpOlN1cnUKKzE0Ok5HOk5HQTpOSUdFUklBOktlYmJpOllhdXJpCisxNTpORzpOR0E6TklHRVJJQTpLZWJiaTpadXJ1CisxOk5HOk5HQTpOSUdFUklBOkFuYW1icmE6QWd1YXRhCisyOk5HOk5HQTpOSUdFUklBOkFuYW1icmE6QW5hbWJyYQorMzpORzpOR0E6TklHRVJJQTpBbmFtYnJhOkFuYW9jaGEKKzQ6Tkc6TkdBOk5JR0VSSUE6QW5hbWJyYTpBd2thTm9ydAorNTpORzpOR0E6TklHRVJJQTpBbmFtYnJhOkF3a2FTb3V0Cis2Ok5HOk5HQTpOSUdFUklBOkFuYW1icmE6SWRlbWlsaQorNzpORzpOR0E6TklHRVJJQTpBbmFtYnJhOkloaWFsYQorODpORzpOR0E6TklHRVJJQTpBbmFtYnJhOk5qaWtva2EKKzk6Tkc6TkdBOk5JR0VSSUE6QW5hbWJyYTpObmV3aU5vcnQKKzEwOk5HOk5HQTpOSUdFUklBOkFuYW1icmE6Tm5ld2lTb3UKKzExOk5HOk5HQTpOSUdFUklBOkFuYW1icmE6T2diYXJ1CisxMjpORzpOR0E6TklHRVJJQTpBbmFtYnJhOk9uaXRzaGFOCisxMzpORzpOR0E6TklHRVJJQTpBbmFtYnJhOk9ydW1iYU5vCisxNDpORzpOR0E6TklHRVJJQTpBbmFtYnJhOk9ydW1iYVNvCisxNTpORzpOR0E6TklHRVJJQTpBbmFtYnJhOk95aQorMTpORzpOR0E6TklHRVJJQTpOaWdlcjpBZ2FpZQorMjpORzpOR0E6TklHRVJJQTpOaWdlcjpBZ3dhcmEKKzM6Tkc6TkdBOk5JR0VSSUE6TmlnZXI6QmlkYQorNDpORzpOR0E6TklHRVJJQTpOaWdlcjpCb3JndQorNTpORzpOR0E6TklHRVJJQTpOaWdlcjpCb3NzbworNjpORzpOR0E6TklHRVJJQTpOaWdlcjpHYmFrbworNzpORzpOR0E6TklHRVJJQTpOaWdlcjpHdXJhcmEKKzg6Tkc6TkdBOk5JR0VSSUE6TmlnZXI6S29udG9ndXIKKzk6Tkc6TkdBOk5JR0VSSUE6TmlnZXI6TGFwYWkKKzEwOk5HOk5HQTpOSUdFUklBOk5pZ2VyOkxhdnVuCisxMTpORzpOR0E6TklHRVJJQTpOaWdlcjpNYWdhbWEKKzEyOk5HOk5HQTpOSUdFUklBOk5pZ2VyOk1va3dhCisxMzpORzpOR0E6TklHRVJJQTpOaWdlcjpQYWlrb3JvCisxNDpORzpOR0E6TklHRVJJQTpOaWdlcjpSYWZpCisxNTpORzpOR0E6TklHRVJJQTpOaWdlcjpSaWphdQorMTY6Tkc6TkdBOk5JR0VSSUE6TmlnZXI6U2hpcm9ybworMTc6Tkc6TkdBOk5JR0VSSUE6TmlnZXI6U3VsZWphCisxODpORzpOR0E6TklHRVJJQTpOaWdlcjpXdXNoaXNoaQorMTpORzpOR0E6TklHRVJJQTpTb2tvdG86QW5rYQorMjpORzpOR0E6TklHRVJJQTpTb2tvdG86QmFrdXJhCiszOk5HOk5HQTpOSUdFUklBOlNva290bzpCaW5qaQorNDpORzpOR0E6TklHRVJJQTpTb2tvdG86Qm9kaW5nYQorNTpORzpOR0E6TklHRVJJQTpTb2tvdG86QnVuZ3VkdQorNjpORzpOR0E6TklHRVJJQTpTb2tvdG86RGFuZ2UtU2gKKzc6Tkc6TkdBOk5JR0VSSUE6U29rb3RvOkdhZGEKKzg6Tkc6TkdBOk5JR0VSSUE6U29rb3RvOkdvcm9ueW8KKzk6Tkc6TkdBOk5JR0VSSUE6U29rb3RvOkd1bW1pCisxMDpORzpOR0E6TklHRVJJQTpTb2tvdG86R3VzYXUKKzExOk5HOk5HQTpOSUdFUklBOlNva290bzpHd2FkYWJhdworMTI6Tkc6TkdBOk5JR0VSSUE6U29rb3RvOklsbGVsYQorMTM6Tkc6TkdBOk5JR0VSSUE6U29rb3RvOklzYQorMTQ6Tkc6TkdBOk5JR0VSSUE6U29rb3RvOkthdXJhLU5hCisxNTpORzpOR0E6TklHRVJJQTpTb2tvdG86S3dhcmUKKzE2Ok5HOk5HQTpOSUdFUklBOlNva290bzpNYXJhZHVuCisxNzpORzpOR0E6TklHRVJJQTpTb2tvdG86UmFiYWgKKzE4Ok5HOk5HQTpOSUdFUklBOlNva290bzpTYWJvbkJpcgorMTk6Tkc6TkdBOk5JR0VSSUE6U29rb3RvOlNpbGFtZQorMjA6Tkc6TkdBOk5JR0VSSUE6U29rb3RvOlNva290bworMjE6Tkc6TkdBOk5JR0VSSUE6U29rb3RvOlRhbGF0YXIKKzIyOk5HOk5HQTpOSUdFUklBOlNva290bzpUYW1iYXdhbAorMjM6Tkc6TkdBOk5JR0VSSUE6U29rb3RvOlRhbmdhemFyCisyNDpORzpOR0E6TklHRVJJQTpTb2tvdG86VHNhZmUKKzI1Ok5HOk5HQTpOSUdFUklBOlNva290bzpXYW1ha2tvCisyNjpORzpOR0E6TklHRVJJQTpTb2tvdG86V3Vybm8KKzI3Ok5HOk5HQTpOSUdFUklBOlNva290bzpZYWJvCisyODpORzpOR0E6TklHRVJJQTpTb2tvdG86WnVybWkKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9OTEQvTkxEX0FETUlOMV9MRVgudHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L05MRC9OTERfQURNSU4xX0xFWC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGM0NWE4ZAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9OTEQvTkxEX0FETUlOMV9MRVgudHh0CkBAIC0wLDAgKzEsMTIgQEAKKzE6TkwtRFI6Tkw6RFJFTlRIRQorMjpOTC1GTDpOTDpGTEVWT0xBTkQKKzM6TkwtRlI6Tkw6RlJJRVNMQU5ECis0Ok5MLUdFOk5MOkdFTERFUkxBTkQKKzU6TkwtR1I6Tkw6R1JPTklOR0VOCis2Ok5MLUxJOk5MOkxJTUJVUkcKKzc6TkwtTkI6Tkw6Tk9PUkQgQlJBQkFOVAorODpOTC1OSDpOTDpOT09SRCBIT0xMQU5ECis5Ok5MLU9WOk5MOk9WRVJJSlNTRUwKKzEwOk5MLVVUOk5MOlVUUkVDSFQKKzExOk5MLVpFOk5MOlpFRUxBTkQKKzEyOk5MLVpIOk5MOlpVSUQgSE9MTEFORApkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L05MRC9OTERfQURNSU4yX0xFWC50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvTkxEL05MRF9BRE1JTjJfTEVYLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNjlkZTI5Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L05MRC9OTERfQURNSU4yX0xFWC50eHQKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9OT1IvTk9SX0FETUlOMV9MRVgudHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L05PUi9OT1JfQURNSU4xX0xFWC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzkzZGRmZQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9OT1IvTk9SX0FETUlOMV9MRVgudHh0CkBAIC0wLDAgKzEsMTkgQEAKKzE6Tk8tMDI6Tk86QUtFUlNIVVMKKzI6Tk8tMDk6Tk86QVVTVCBBR0RFUgorMzpOTy0wNjpOTzpCVVNLRVJVRAorNDpOTy0yMDpOTzpGSU5OTUFSSworNTpOTy0wNDpOTzpIRURNQVJLCis2Ok5PLTI6Tk86SE9SREFMQU5ECis3Ok5PLTIyOk5POkpBTiBNQVlFTiAoQVJDVElDIFJFR0lPTikgKFNFRSBBTFNPIENPVU5UUlkgQ09ERSBTSikKKzg6Tk8tNTpOTzpNT0VSRSBPRyBST01TREFMCis5Ok5PLTc6Tk86Tk9SRCBUUk9FTkRFTEFHCisxMDpOTy04Ok5POk5PUkRMQU5ECisxMTpOTy0wOk5POk9FU1RGT0xECisxMjpOTy0wNTpOTzpPUFBMQU5ECisxMzpOTy0wMzpOTzpPU0xPIE9HIEFLRVJTSFVTCisxNDpOTy0yMTpOTzpST0dBTEFORAorMTU6Tk8tNjpOTzpTT0VSIFRST0VOREVMQUcKKzE2Ok5PLTQ6Tk86U09HTiBPRyBGSk9SREFORQorMTc6Tk8tMDg6Tk86VEVMRU1BUksKKzE4Ok5PLTk6Tk86VFJPTVMKKzE5Ok5PLTA3Ok5POlZFU1RGT0xECmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvTk9SL05PUl9BRE1JTjJfTEVYLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9OT1IvTk9SX0FETUlOMl9MRVgudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2OWRlMjkKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvTk9SL05PUl9BRE1JTjJfTEVYLnR4dApkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L05QTC9OUExfQURNSU4xX0xFWC50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvTlBML05QTF9BRE1JTjFfTEVYLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMDBhNTRlCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L05QTC9OUExfQURNSU4xX0xFWC50eHQKQEAgLTAsMCArMSwxOSBAQAorMTpOUC1CQTpOUDpCQUdNQVRJCisyOk5QLUJIOk5QOkJIRVJJCiszOk5QLUM6TlA6Q0VOVFJBTAorNDpOUC1ESDpOUDpESEFXQUxBR0lSSQorNTpOUC1FOk5QOkVBU1QKKzY6TlAtRkFXOk5QOkZBUiBXRVNUCis3Ok5QLUdBOk5QOkdBTkRBS0kKKzg6TlAtSkE6TlA6SkFOQUtQVVIKKzk6TlAtS0E6TlA6S0FSTkFMSQorMTA6TlAtS086TlA6S09TSSBbS09TSEldCisxMTpOUC1MVTpOUDpMVU1CSU5JCisxMjpOUC1NQTpOUDpNQUhBS0FMSQorMTM6TlAtTUU6TlA6TUVDSEkKKzE0Ok5QLU1JRDpOUDpNSURXRVNUCisxNTpOUC1OQTpOUDpOQVJBWUFOSQorMTY6TlAtUkE6TlA6UkFQVEkKKzE3Ok5QLVNBOk5QOlNBR0FSTUFUSEEKKzE4Ok5QLVNFOk5QOlNFVEkKKzE5Ok5QLVc6TlA6V0VTVApkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L05QTC9OUExfQURNSU4yX0xFWC50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvTlBML05QTF9BRE1JTjJfTEVYLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MmY4YWExCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L05QTC9OUExfQURNSU4yX0xFWC50eHQKQEAgLTAsMCArMSwxNCBAQAorMTpOUDpOUEw6TkVQQUw6Q2VudHJhbDpCYWdtYXRpCisyOk5QOk5QTDpORVBBTDpDZW50cmFsOkphbmFrcHVyCiszOk5QOk5QTDpORVBBTDpDZW50cmFsOk5hcmF5YW5pCisxOk5QOk5QTDpORVBBTDpGYXIgV2VzdDpNYWhha2FsaQorMjpOUDpOUEw6TkVQQUw6RmFyIFdlc3Q6U2V0aQorMTpOUDpOUEw6TkVQQUw6V2VzdDpEaGF3YWxhZ2kKKzI6TlA6TlBMOk5FUEFMOldlc3Q6R2FuZGFraQorMzpOUDpOUEw6TkVQQUw6V2VzdDpMdW1iaW5pCisxOk5QOk5QTDpORVBBTDpNaWR3ZXN0OkJoZXJpCisyOk5QOk5QTDpORVBBTDpNaWR3ZXN0Okthcm5hbGkKKzM6TlA6TlBMOk5FUEFMOk1pZHdlc3Q6UmFwdGkKKzE6TlA6TlBMOk5FUEFMOkVhc3Q6S29zaGkKKzI6TlA6TlBMOk5FUEFMOkVhc3Q6TWVjaGkKKzM6TlA6TlBMOk5FUEFMOkVhc3Q6U2FnYXJtYXRoCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvT01OL09NTl9BRE1JTjFfTEVYLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9PTU4vT01OX0FETUlOMV9MRVgudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVjNWVhMjkKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvT01OL09NTl9BRE1JTjFfTEVYLnR4dApAQCAtMCwwICsxLDEwIEBACisxOk9NLURBOk9NOkEgREFLSExJWUEKKzI6T00tU0g6T006QSBTSEFSUUlZQQorMzpPTS1CQTpPTTpBTCBCQVROQUgKKzQ6T00tREhBOk9NOkFMIERIQUhJUkEKKzU6T00tSkE6T006QUwgSkFOQllBSCBbWlVGUl0KKzY6T00tV1U6T006QUwgV1VTVEEKKzc6T00tWkE6T006QVogWkhJUkFICis4Ok9ILURIRjpPTTpESE9GQVIKKzk6T00tTVU6T006TVVTQU5EQU0KKzEwOk9NLU1BOk9NOk1VU0NBVApkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L09NTi9PTU5fQURNSU4yX0xFWC50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvT01OL09NTl9BRE1JTjJfTEVYLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YjM0ZjZlCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L09NTi9PTU5fQURNSU4yX0xFWC50eHQKQEAgLTAsMCArMSw0OSBAQAorMTpPTTpPTU46T01BTjpBbCBCYXRuYWg6QSBSdXN0YXEKKzI6T006T01OOk9NQU46QWwgQmF0bmFoOkFsIEF3YWJpCiszOk9NOk9NTjpPTUFOOkFsIEJhdG5haDpBbCBLaGFib3VyYWgKKzQ6T006T01OOk9NQU46QWwgQmF0bmFoOkFsIE1hc25hYWgKKzU6T006T01OOk9NQU46QWwgQmF0bmFoOkFzIFN1d2FpcQorNjpPTTpPTU46T01BTjpBbCBCYXRuYWg6QmFya2EKKzc6T006T01OOk9NQU46QWwgQmF0bmFoOkxpd2EKKzg6T006T01OOk9NQU46QWwgQmF0bmFoOk5ha2hhbAorOTpPTTpPTU46T01BTjpBbCBCYXRuYWg6U2FoYW0KKzEwOk9NOk9NTjpPTUFOOkFsIEJhdG5haDpTaGluYXMKKzExOk9NOk9NTjpPTUFOOkFsIEJhdG5haDpTb2hhcgorMTpPTTpPTU46T01BTjpBbCBXdXN0YTpBbCBXdXN0YSAoMSkKKzE6T006T01OOk9NQU46TXVzYW5kYW06QWwgS2hhc2FiCisyOk9NOk9NTjpPTUFOOk11c2FuZGFtOkJ1a2hhCiszOk9NOk9NTjpPTUFOOk11c2FuZGFtOkRpYmEKKzQ6T006T01OOk9NQU46TXVzYW5kYW06TWFkaGEKKzE6T006T01OOk9NQU46TXVzY2F0OkEgU2VlYgorMjpPTTpPTU46T01BTjpNdXNjYXQ6QmF1c2hlcgorMzpPTTpPTU46T01BTjpNdXNjYXQ6TXVzY2F0Cis0Ok9NOk9NTjpPTUFOOk11c2NhdDpNdXR0cmFoCis1Ok9NOk9NTjpPTUFOOk11c2NhdDpRdXJpeWF0CisxOk9NOk9NTjpPTUFOOkFsIERoYWhpcmE6QWwgQnVyYWltaQorMjpPTTpPTU46T01BTjpBbCBEaGFoaXJhOkRoYW5rCiszOk9NOk9NTjpPTUFOOkFsIERoYWhpcmE6SWJyaQorNDpPTTpPTU46T01BTjpBbCBEaGFoaXJhOk1haGRoYQorNTpPTTpPTU46T01BTjpBbCBEaGFoaXJhOllhbnF1bAorMTpPTTpPTU46T01BTjpEaG9mYXI6QWwgSGFsYW5peWF0IElzbC4KKzI6T006T01OOk9NQU46RGhvZmFyOk1hcmJhdAorMzpPTTpPTU46T01BTjpEaG9mYXI6TXVxc2hpbgorNDpPTTpPTU46T01BTjpEaG9mYXI6U2FsYWxhaAorNTpPTTpPTU46T01BTjpEaG9mYXI6U3VkaAorNjpPTTpPTU46T01BTjpEaG9mYXI6VGFxYWgKKzc6T006T01OOk9NQU46RGhvZmFyOlRodW1yYWl0CisxOk9NOk9NTjpPTUFOOkEgRGFraGxpeWE6QWRhbQorMjpPTTpPTU46T01BTjpBIERha2hsaXlhOkFsIEhhbXJhCiszOk9NOk9NTjpPTUFOOkEgRGFraGxpeWE6QmFobGEKKzQ6T006T01OOk9NQU46QSBEYWtobGl5YTpCaWQgQmlkCis1Ok9NOk9NTjpPTUFOOkEgRGFraGxpeWE6SXpraQorNjpPTTpPTU46T01BTjpBIERha2hsaXlhOk1hbmFoCis3Ok9NOk9NTjpPTUFOOkEgRGFraGxpeWE6Tml6d2EgKE5hendhKQorODpPTTpPTU46T01BTjpBIERha2hsaXlhOlNhbWFpbAorMTpPTTpPTU46T01BTjpBIFNoYXJxaXlhOkFsIE11ZGhhaWJpCisyOk9NOk9NTjpPTUFOOkEgU2hhcnFpeWE6QWwgUWFiaWwKKzM6T006T01OOk9NQU46QSBTaGFycWl5YTpBbCBXYWZpCis0Ok9NOk9NTjpPTUFOOkEgU2hhcnFpeWE6QmlkZGl5YQorNTpPTTpPTU46T01BTjpBIFNoYXJxaXlhOklicmEKKzY6T006T01OOk9NQU46QSBTaGFycWl5YTpKYWxhbiBCYW5pCis3Ok9NOk9NTjpPTUFOOkEgU2hhcnFpeWE6TWFzaXJhaAorODpPTTpPTU46T01BTjpBIFNoYXJxaXlhOlN1cgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L1BBSy9QQUtfQURNSU4xX0xFWC50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvUEFLL1BBS19BRE1JTjFfTEVYLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYWZkZmM4Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L1BBSy9QQUtfQURNSU4xX0xFWC50eHQKQEAgLTAsMCArMSw5IEBACisxOlBLLUJBOlBLOkJBTFVDSElTVEFOIFtCQUxVQ0hJU1RBTiAoRU4pXQorMjpQSy1UQTpQSzpGLkEuVC5BLiBbRkVERVJBTExZIEFETUlOSVNURVJFRCBUUklCQUwgQVJFQVNdCiszOlBLLUZDOlBLOkYuQy5ULgorNDpQSy1JUzpQSzpJU0xBTUFCQUQKKzU6UEstSks6UEs6SkFNTVUgQU5EIEtBU0hNSVIgW0FaQUQgS0FTSE1JUl0KKzY6UEstTlc6UEs6Ti5XLkYuUC4gW05PUlRIIFdFU1QgRlJPTlRJRVJdCis3OlBLLU5BOlBLOk5PUlRIRVJOIEFSRUFTCis4OlBLLVBCOlBLOlBVTkpBQgorOTpQSy1TRDpQSzpTSU5EIFtTSU5EIChFTildCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvUEFLL1BBS19BRE1JTjJfTEVYLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9QQUsvUEFLX0FETUlOMl9MRVgudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUwOTgzMTkKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvUEFLL1BBS19BRE1JTjJfTEVYLnR4dApAQCAtMCwwICsxLDgwIEBACisxOlBLOlBBSzpQQUtJU1RBTjpGLkMuVC46SXNsYW1hYmFkCisxOlBLOlBBSzpQQUtJU1RBTjpQdW5qYWI6QXR0b2sKKzI6UEs6UEFLOlBBS0lTVEFOOlB1bmphYjpCYWhhd2FsbmFnYXIKKzM6UEs6UEFLOlBBS0lTVEFOOlB1bmphYjpCYWhhd2FscHVyCis0OlBLOlBBSzpQQUtJU1RBTjpQdW5qYWI6RGVyYSBHaGF6aSBLaGFuCis1OlBLOlBBSzpQQUtJU1RBTjpQdW5qYWI6RmFpc2FsYWJhZAorNjpQSzpQQUs6UEFLSVNUQU46UHVuamFiOkd1amFyYXQKKzc6UEs6UEFLOlBBS0lTVEFOOlB1bmphYjpHdWpyYW53YWxhCis4OlBLOlBBSzpQQUtJU1RBTjpQdW5qYWI6SmhhbmcKKzk6UEs6UEFLOlBBS0lTVEFOOlB1bmphYjpKaGVsdW0KKzEwOlBLOlBBSzpQQUtJU1RBTjpQdW5qYWI6S2FzdXIKKzExOlBLOlBBSzpQQUtJU1RBTjpQdW5qYWI6TGFob3JlCisxMjpQSzpQQUs6UEFLSVNUQU46UHVuamFiOk1haW53YWxpCisxMzpQSzpQQUs6UEFLSVNUQU46UHVuamFiOk11bHRhbgorMTQ6UEs6UEFLOlBBS0lTVEFOOlB1bmphYjpNdXphZmZhcmdhcmgKKzE1OlBLOlBBSzpQQUtJU1RBTjpQdW5qYWI6UmFoaW0gWWFyIEtoYW4KKzE2OlBLOlBBSzpQQUtJU1RBTjpQdW5qYWI6UmF3YWxwaW5kaQorMTc6UEs6UEFLOlBBS0lTVEFOOlB1bmphYjpTYWhpd2FsCisxODpQSzpQQUs6UEFLSVNUQU46UHVuamFiOlNhcmdvZGhhCisxOTpQSzpQQUs6UEFLSVNUQU46UHVuamFiOlNoZWlraHVwdXJhCisyMDpQSzpQQUs6UEFLSVNUQU46UHVuamFiOlNpYWxrb3QKKzIxOlBLOlBBSzpQQUtJU1RBTjpQdW5qYWI6VmVoYXJpCisxOlBLOlBBSzpQQUtJU1RBTjpCYWx1Y2hpc3RhbjpDaGFnYWkKKzI6UEs6UEFLOlBBS0lTVEFOOkJhbHVjaGlzdGFuOkd3YWRhcgorMzpQSzpQQUs6UEFLSVNUQU46QmFsdWNoaXN0YW46S2FjaGhpCis0OlBLOlBBSzpQQUtJU1RBTjpCYWx1Y2hpc3RhbjpLYWxhdAorNTpQSzpQQUs6UEFLSVNUQU46QmFsdWNoaXN0YW46S2hhcmFuCis2OlBLOlBBSzpQQUtJU1RBTjpCYWx1Y2hpc3RhbjpLaHV6ZGFyCis3OlBLOlBBSzpQQUtJU1RBTjpCYWx1Y2hpc3RhbjpLb2hsdQorODpQSzpQQUs6UEFLSVNUQU46QmFsdWNoaXN0YW46TGFzYmVsYQorOTpQSzpQQUs6UEFLSVNUQU46QmFsdWNoaXN0YW46TG9yYWxhaQorMTA6UEs6UEFLOlBBS0lTVEFOOkJhbHVjaGlzdGFuOk5hc2lyYWJhZAorMTE6UEs6UEFLOlBBS0lTVEFOOkJhbHVjaGlzdGFuOlBhbmpndXIKKzEyOlBLOlBBSzpQQUtJU1RBTjpCYWx1Y2hpc3RhbjpQaXNoaW4KKzEzOlBLOlBBSzpQQUtJU1RBTjpCYWx1Y2hpc3RhbjpRdWV0dGEKKzE0OlBLOlBBSzpQQUtJU1RBTjpCYWx1Y2hpc3RhbjpTaWJpCisxNTpQSzpQQUs6UEFLSVNUQU46QmFsdWNoaXN0YW46VHVyYmF0CisxNjpQSzpQQUs6UEFLSVNUQU46QmFsdWNoaXN0YW46WmhvYgorMTpQSzpQQUs6UEFLSVNUQU46SmFtbXUgYW5kIEthc2htaXI6QmFyYW11bGEgKEthc2htaXIgTm9ydGgpCisyOlBLOlBBSzpQQUtJU1RBTjpKYW1tdSBhbmQgS2FzaG1pcjpDaGlsYXMKKzM6UEs6UEFLOlBBS0lTVEFOOkphbW11IGFuZCBLYXNobWlyOkdpbGdpdAorNDpQSzpQQUs6UEFLSVNUQU46SmFtbXUgYW5kIEthc2htaXI6R2lsZ2l0IChUcmliYWwgVGVycml0b3J5KQorNTpQSzpQQUs6UEFLSVNUQU46SmFtbXUgYW5kIEthc2htaXI6S2FyZ2lsCis2OlBLOlBBSzpQQUtJU1RBTjpKYW1tdSBhbmQgS2FzaG1pcjpLdXB3YXJhIChHaWxnaXQgV2F6YXJhdCkKKzc6UEs6UEFLOlBBS0lTVEFOOkphbW11IGFuZCBLYXNobWlyOkt1cHdhcmEgKE11emFmZmFyYWJhZCkKKzg6UEs6UEFLOlBBS0lTVEFOOkphbW11IGFuZCBLYXNobWlyOkxhZGFraCAoTGVoKQorOTpQSzpQQUs6UEFLSVNUQU46SmFtbXUgYW5kIEthc2htaXI6TWlycHVyCisxMDpQSzpQQUs6UEFLSVNUQU46SmFtbXUgYW5kIEthc2htaXI6UHVuY2gKKzE6UEs6UEFLOlBBS0lTVEFOOk4uVy5GLlAuOkFiYm90dGFiYWQKKzI6UEs6UEFLOlBBS0lTVEFOOk4uVy5GLlAuOkJhbm51CiszOlBLOlBBSzpQQUtJU1RBTjpOLlcuRi5QLjpDaGl0cmFsCis0OlBLOlBBSzpQQUtJU1RBTjpOLlcuRi5QLjpEZXJhIElzbWFpbCBLaGFuCis1OlBLOlBBSzpQQUtJU1RBTjpOLlcuRi5QLjpEaXIKKzY6UEs6UEFLOlBBS0lTVEFOOk4uVy5GLlAuOktvaGF0Cis3OlBLOlBBSzpQQUtJU1RBTjpOLlcuRi5QLjpLb2hpc3RhbgorODpQSzpQQUs6UEFLSVNUQU46Ti5XLkYuUC46TWFsYWthbmQgUC5BLgorOTpQSzpQQUs6UEFLSVNUQU46Ti5XLkYuUC46TWFuc2VocmEKKzEwOlBLOlBBSzpQQUtJU1RBTjpOLlcuRi5QLjpNYXJkYW4KKzExOlBLOlBBSzpQQUtJU1RBTjpOLlcuRi5QLjpQZXNoYXdhcgorMTI6UEs6UEFLOlBBS0lTVEFOOk4uVy5GLlAuOlN3YXQKKzE6UEs6UEFLOlBBS0lTVEFOOlNpbmQ6QmFkaW4KKzI6UEs6UEFLOlBBS0lTVEFOOlNpbmQ6RGFkdQorMzpQSzpQQUs6UEFLSVNUQU46U2luZDpIeWRlcmFiYWQKKzQ6UEs6UEFLOlBBS0lTVEFOOlNpbmQ6SmFrb2JhYmFkCis1OlBLOlBBSzpQQUtJU1RBTjpTaW5kOkthcmFjaGkKKzY6UEs6UEFLOlBBS0lTVEFOOlNpbmQ6S2hhaXJwdXIKKzc6UEs6UEFLOlBBS0lTVEFOOlNpbmQ6TGFya2FuYQorODpQSzpQQUs6UEFLSVNUQU46U2luZDpOYXdhYiBTaGFoCis5OlBLOlBBSzpQQUtJU1RBTjpTaW5kOlNhbmdoYXIKKzEwOlBLOlBBSzpQQUtJU1RBTjpTaW5kOlNoaWthcnB1cgorMTE6UEs6UEFLOlBBS0lTVEFOOlNpbmQ6U3Vra3VyCisxMjpQSzpQQUs6UEFLSVNUQU46U2luZDpUaGFycGFya2FyCisxMzpQSzpQQUs6UEFLSVNUQU46U2luZDpUaGF0dGEKKzE6UEs6UEFLOlBBS0lTVEFOOkYuQS5ULkEuOkJhamF1cgorMjpQSzpQQUs6UEFLSVNUQU46Ri5BLlQuQS46S2h5YmVyCiszOlBLOlBBSzpQQUtJU1RBTjpGLkEuVC5BLjpLdXJyYW0KKzQ6UEs6UEFLOlBBS0lTVEFOOkYuQS5ULkEuOk1vaG1hbmQKKzU6UEs6UEFLOlBBS0lTVEFOOkYuQS5ULkEuOk4uIFdhemlyaXN0YW4KKzY6UEs6UEFLOlBBS0lTVEFOOkYuQS5ULkEuOk9yYWt6YWkKKzc6UEs6UEFLOlBBS0lTVEFOOkYuQS5ULkEuOlMuIFdhemlyaXN0YW4KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9QRVIvUEVSX0FETUlOMV9MRVgudHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L1BFUi9QRVJfQURNSU4xX0xFWC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzVhMWY1MAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9QRVIvUEVSX0FETUlOMV9MRVgudHh0CkBAIC0wLDAgKzEsMjUgQEAKKzE6UEUtQU1BOlBFOkFNQVpPTkFTCisyOlBFLUFOQzpQRTpBTkNBU0gKKzM6UEUtQVBVOlBFOkFQVVJJTUFDCis0OlBFLUFSRTpQRTpBUkVRVUlQQQorNTpQRS1BWUE6UEU6QVlBQ1VDSE8KKzY6UEUtQ0FKOlBFOkNBSkFNQVJDQQorNzpQRS1DVVM6UEU6Q1VaQ08gW0NVU0NPXQorODpQRS1DQUw6UEU6RUwgQ0FMTEFPCis5OlBFLUhVVjpQRTpIVUFOQ0FWRUxJQ0EKKzEwOlBFLUhVQzpQRTpIVUFOVUNPCisxMTpQRS1JQ0E6UEU6SUNBCisxMjpQRS1KVU46UEU6SlVOSU4KKzEzOlBFLUxBTDpQRTpMQSBMSUJFUlRBRAorMTQ6UEUtTEFNOlBFOkxBTUJBWUVRVUUKKzE1OlBFLUxJTTpQRTpMSU1BCisxNjpQRS1MT1I6UEU6TE9SRVRPCisxNzpQRS1NREQ6UEU6TUFEUkUgREUgRElPUworMTg6UEUtTU9ROlBFOk1PUVVFR1VBCisxOTpQRS1QQVM6UEU6UEFTQ08KKzIwOlBFLVBJVTpQRTpQSVVSQQorMjE6UEUtUFVOOlBFOlBVTk8KKzIyOlBFLVNBTTpQRTpTQU4gTUFSVElOCisyMzpQRS1UQUM6UEU6VEFDTkEKKzI0OlBFLVRVTTpQRTpUVU1CRVMKKzI1OlBFLVVDQTpQRTpVQ0FZQUxJCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvUEVSL1BFUl9BRE1JTjJfTEVYLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9QRVIvUEVSX0FETUlOMl9MRVgudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU1OTU1YmEKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvUEVSL1BFUl9BRE1JTjJfTEVYLnR4dApAQCAtMCwwICsxLDE3OCBAQAorMTpQRTpQRVI6UEVSVTpKVU5JTjpDaGFuY2hhbWF5bworMjpQRTpQRVI6UEVSVTpKVU5JTjpDb25jZXBjaW9uCiszOlBFOlBFUjpQRVJVOkpVTklOOkh1YW5jYXlvCis0OlBFOlBFUjpQRVJVOkpVTklOOkphdWphCis1OlBFOlBFUjpQRVJVOkpVTklOOkp1bmluCis2OlBFOlBFUjpQRVJVOkpVTklOOlNhdGlwbworNzpQRTpQRVI6UEVSVTpKVU5JTjpUYXJtYQorODpQRTpQRVI6UEVSVTpKVU5JTjpZYXVsaQorMTpQRTpQRVI6UEVSVTpBTUFaT05BUzpCYWd1YQorMjpQRTpQRVI6UEVSVTpBTUFaT05BUzpCYWd1YSBHcmFuZGUKKzM6UEU6UEVSOlBFUlU6QU1BWk9OQVM6Qm9uZ2FyYQorNDpQRTpQRVI6UEVSVTpBTUFaT05BUzpDaGFjaGFwb3lhcworNTpQRTpQRVI6UEVSVTpBTUFaT05BUzpDb25kb3JjYW5xdWkKKzY6UEU6UEVSOlBFUlU6QU1BWk9OQVM6THV5YQorNzpQRTpQRVI6UEVSVTpBTUFaT05BUzpSb2RyaWd1ZXogZGUgTS4KKzE6UEU6UEVSOlBFUlU6Q0FKQU1BUkNBOkNhamFiYW1iYQorMjpQRTpQRVI6UEVSVTpDQUpBTUFSQ0E6Q2FqYW1hcmNhCiszOlBFOlBFUjpQRVJVOkNBSkFNQVJDQTpDZWxlbmRpbgorNDpQRTpQRVI6UEVSVTpDQUpBTUFSQ0E6Q2hvdGEKKzU6UEU6UEVSOlBFUlU6Q0FKQU1BUkNBOkNvbnR1bWF6YQorNjpQRTpQRVI6UEVSVTpDQUpBTUFSQ0E6Q3V0ZXJ2bworNzpQRTpQRVI6UEVSVTpDQUpBTUFSQ0E6SHVhbGdheW9jCis4OlBFOlBFUjpQRVJVOkNBSkFNQVJDQTpKYWVuCis5OlBFOlBFUjpQRVJVOkNBSkFNQVJDQTpTYW4gSWduYWNpbworMTA6UEU6UEVSOlBFUlU6Q0FKQU1BUkNBOlNhbiBNYXJjb3MKKzExOlBFOlBFUjpQRVJVOkNBSkFNQVJDQTpTYW4gTWlndWVsCisxMjpQRTpQRVI6UEVSVTpDQUpBTUFSQ0E6U2FuIFBhYmxvCisxMzpQRTpQRVI6UEVSVTpDQUpBTUFSQ0E6U2FudGEgQ3J1egorMTpQRTpQRVI6UEVSVTpQVU5POkFtYW50YW5pCisyOlBFOlBFUjpQRVJVOlBVTk86QXphbmdhcm8KKzM6UEU6UEVSOlBFUlU6UFVOTzpDYXJhYmF5YQorNDpQRTpQRVI6UEVSVTpQVU5POkNodWN1aXRvCis1OlBFOlBFUjpQRVJVOlBVTk86SHVhbmNhbmUKKzY6UEU6UEVSOlBFUlU6UFVOTzpJc2xhIFNvdG8KKzc6UEU6UEVSOlBFUlU6UFVOTzpJc2xhIFRhcXVpbGUKKzg6UEU6UEVSOlBFUlU6UFVOTzpMYWdvIFRpdGljYWNhCis5OlBFOlBFUjpQRVJVOlBVTk86TGFtcGEKKzEwOlBFOlBFUjpQRVJVOlBVTk86TWVsZ2FyCisxMTpQRTpQRVI6UEVSVTpQVU5POlB1bm8KKzEyOlBFOlBFUjpQRVJVOlBVTk86UHVudGEgQ2hhbGx1dGEKKzEzOlBFOlBFUjpQRVJVOlBVTk86U2FuIFJvbWFuCisxNDpQRTpQRVI6UEVSVTpQVU5POlNhbmRpYQorMTpQRTpQRVI6UEVSVTpQSVVSQTpBeWFiYWNhCisyOlBFOlBFUjpQRVJVOlBJVVJBOkh1YW5jYWJhbWJhCiszOlBFOlBFUjpQRVJVOlBJVVJBOklzbGEKKzQ6UEU6UEVSOlBFUlU6UElVUkE6TW9ycm9wb24KKzU6UEU6UEVSOlBFUlU6UElVUkE6UGFpdGEKKzY6UEU6UEVSOlBFUlU6UElVUkE6UGl1cmEKKzc6UEU6UEVSOlBFUlU6UElVUkE6U3VsbGFuYQorODpQRTpQRVI6UEVSVTpQSVVSQTpUYWxhcmEKKzE6UEU6UEVSOlBFUlU6SFVBTkNBVkVMSUNBOkFjb2JhbWJhCisyOlBFOlBFUjpQRVJVOkhVQU5DQVZFTElDQTpBbmdhcmVzCiszOlBFOlBFUjpQRVJVOkhVQU5DQVZFTElDQTpDYXN0cm92aXJyZXluYQorNDpQRTpQRVI6UEVSVTpIVUFOQ0FWRUxJQ0E6SHVhbmNhdmVsaWNhCis1OlBFOlBFUjpQRVJVOkhVQU5DQVZFTElDQTpUYXlhY2FqYQorMTpQRTpQRVI6UEVSVTpBWUFDVUNITzpDYW5nYWxsbworMjpQRTpQRVI6UEVSVTpBWUFDVUNITzpIdWFtYW5nYQorMzpQRTpQRVI6UEVSVTpBWUFDVUNITzpIdWFudGEKKzQ6UEU6UEVSOlBFUlU6QVlBQ1VDSE86TGFtYXIKKzU6UEU6UEVSOlBFUlU6QVlBQ1VDSE86THVjYW5hcworNjpQRTpQRVI6UEVSVTpBWUFDVUNITzpQYXJhbmljb2NoYXMKKzc6UEU6UEVSOlBFUlU6QVlBQ1VDSE86VmljdG9yIEZhamFyZG8KKzg6UEU6UEVSOlBFUlU6QVlBQ1VDSE86bm4KKzE6UEU6UEVSOlBFUlU6TU9RVUVHVUE6R3JhbC5TYW5jaGV6IENlcgorMjpQRTpQRVI6UEVSVTpNT1FVRUdVQTpJbG8KKzM6UEU6UEVSOlBFUlU6TU9RVUVHVUE6TWFyaXNjYWwgTmlldG8KKzE6UEU6UEVSOlBFUlU6TE9SRVRPOkFsdG8gQW1hem9uYXMKKzI6UEU6UEVSOlBFUlU6TE9SRVRPOkxvcmV0bworMzpQRTpQRVI6UEVSVTpMT1JFVE86TWFyLlIuQ2FzdGlsbGEKKzQ6UEU6UEVSOlBFUlU6TE9SRVRPOk1heW5hcworNTpQRTpQRVI6UEVSVTpMT1JFVE86UmVxdWVuYQorNjpQRTpQRVI6UEVSVTpMT1JFVE86VWNheWFsaQorMTpQRTpQRVI6UEVSVTpQQVNDTzpEYW5pZWwgQ2FycmlvbgorMjpQRTpQRVI6UEVSVTpQQVNDTzpPeGFwYW1wYQorMzpQRTpQRVI6UEVSVTpQQVNDTzpQYXNjbworMTpQRTpQRVI6UEVSVTpMSU1BOkNhamF0YW1ibworMjpQRTpQRVI6UEVSVTpMSU1BOkNhbmV0ZQorMzpQRTpQRVI6UEVSVTpMSU1BOkNhbnRhCis0OlBFOlBFUjpQRVJVOkxJTUE6Q2hhbmNheQorNTpQRTpQRVI6UEVSVTpMSU1BOkh1YXJhbAorNjpQRTpQRVI6UEVSVTpMSU1BOkh1YXJvY2hpcmkKKzc6UEU6UEVSOlBFUlU6TElNQTpJc2xhCis4OlBFOlBFUjpQRVJVOkxJTUE6TGltYQorOTpQRTpQRVI6UEVSVTpMSU1BOllhdXlvcworMTpQRTpQRVI6UEVSVTpUQUNOQTpUYWNuYQorMjpQRTpQRVI6UEVSVTpUQUNOQTpUYXJhdGEKKzE6UEU6UEVSOlBFUlU6U0FOIE1BUlRJTjpCZWxsYXZpc3RhCisyOlBFOlBFUjpQRVJVOlNBTiBNQVJUSU46SHVhbGxhZ3VhCiszOlBFOlBFUjpQRVJVOlNBTiBNQVJUSU46TGFtYXMKKzQ6UEU6UEVSOlBFUlU6U0FOIE1BUlRJTjpNYXJpc2NhbCBDYWNlcmVzCis1OlBFOlBFUjpQRVJVOlNBTiBNQVJUSU46TW95b2JhbWJhCis2OlBFOlBFUjpQRVJVOlNBTiBNQVJUSU46UmlvamEKKzc6UEU6UEVSOlBFUlU6U0FOIE1BUlRJTjpTYW4gTWFydGluCis4OlBFOlBFUjpQRVJVOlNBTiBNQVJUSU46bm4KKzE6UEU6UEVSOlBFUlU6QVJFUVVJUEE6QXJlcXVpcGEKKzI6UEU6UEVSOlBFUlU6QVJFUVVJUEE6Q2FtYW5hCiszOlBFOlBFUjpQRVJVOkFSRVFVSVBBOkNhcmF2ZWxpCis0OlBFOlBFUjpQRVJVOkFSRVFVSVBBOkNhc3RpbGxhCis1OlBFOlBFUjpQRVJVOkFSRVFVSVBBOkNheWxsb21hCis2OlBFOlBFUjpQRVJVOkFSRVFVSVBBOkNvbmRlc3V5b3MKKzc6UEU6UEVSOlBFUlU6QVJFUVVJUEE6SXNsYXkKKzg6UEU6UEVSOlBFUlU6QVJFUVVJUEE6TGEgVW5pb24KKzE6UEU6UEVSOlBFUlU6VFVNQkVTOkNvbnRyYWxtaXJhbnRlIFYKKzI6UEU6UEVSOlBFUlU6VFVNQkVTOlR1bWJlcworMzpQRTpQRVI6UEVSVTpUVU1CRVM6WmFydW1pbGxhCisxOlBFOlBFUjpQRVJVOk1BRFJFIERFIERJT1M6TWFudQorMjpQRTpQRVI6UEVSVTpNQURSRSBERSBESU9TOlRhaHVhbWFudQorMzpQRTpQRVI6UEVSVTpNQURSRSBERSBESU9TOlRhbWJvcGF0YQorMTpQRTpQRVI6UEVSVTpVQ0FZQUxJOkF0YWxheWEKKzI6UEU6UEVSOlBFUlU6VUNBWUFMSTpDb3JvbmVsIFBvcnRpbGxvCiszOlBFOlBFUjpQRVJVOlVDQVlBTEk6UGFkcmUgQWJhZAorNDpQRTpQRVI6UEVSVTpVQ0FZQUxJOlB1cnVzCisxOlBFOlBFUjpQRVJVOkNVWkNPOkFjb21heW8KKzI6UEU6UEVSOlBFUlU6Q1VaQ086QW50YQorMzpQRTpQRVI6UEVSVTpDVVpDTzpDYWxjYQorNDpQRTpQRVI6UEVSVTpDVVpDTzpDYW5hcworNTpQRTpQRVI6UEVSVTpDVVpDTzpDYW5jaGlzCis2OlBFOlBFUjpQRVJVOkNVWkNPOkNodW1iaXZpbGNhcworNzpQRTpQRVI6UEVSVTpDVVpDTzpFc3BpbmFyCis4OlBFOlBFUjpQRVJVOkNVWkNPOkxhIENvbnZlbmNpb24KKzk6UEU6UEVSOlBFUlU6Q1VaQ086UGFydXJvCisxMDpQRTpQRVI6UEVSVTpDVVpDTzpQYXVjYXJ0YW1ibworMTE6UEU6UEVSOlBFUlU6Q1VaQ086UXVpc3BpY2FuY2hpcworMTI6UEU6UEVSOlBFUlU6Q1VaQ086VXJ1YmFtYmEKKzEzOlBFOlBFUjpQRVJVOkNVWkNPOm5uCisxOlBFOlBFUjpQRVJVOkhVQU5VQ086QW1ibworMjpQRTpQRVI6UEVSVTpIVUFOVUNPOkRvcyBkZSBNYXlvCiszOlBFOlBFUjpQRVJVOkhVQU5VQ086SHVhbWFsaWVzCis0OlBFOlBFUjpQRVJVOkhVQU5VQ086SHVhbnVjbworNTpQRTpQRVI6UEVSVTpIVUFOVUNPOkxlb25jaW8gUHJhZG8KKzY6UEU6UEVSOlBFUlU6SFVBTlVDTzpNYXJhbm9uCis3OlBFOlBFUjpQRVJVOkhVQU5VQ086UGFjaGl0ZWEKKzg6UEU6UEVSOlBFUlU6SFVBTlVDTzpubgorMTpQRTpQRVI6UEVSVTpJQ0E6Q2hpbmNoYQorMjpQRTpQRVI6UEVSVTpJQ0E6SWNhCiszOlBFOlBFUjpQRVJVOklDQTpJc2xhCis0OlBFOlBFUjpQRVJVOklDQTpOYXpjYQorNTpQRTpQRVI6UEVSVTpJQ0E6UGFscGEKKzY6UEU6UEVSOlBFUlU6SUNBOlBpc2NvCisxOlBFOlBFUjpQRVJVOkxBIExJQkVSVEFEOkJvbGl2YXIKKzI6UEU6UEVSOlBFUlU6TEEgTElCRVJUQUQ6SXNsYQorMzpQRTpQRVI6UEVSVTpMQSBMSUJFUlRBRDpPdHV6Y28KKzQ6UEU6UEVSOlBFUlU6TEEgTElCRVJUQUQ6UGFjYXNtYXlvCis1OlBFOlBFUjpQRVJVOkxBIExJQkVSVEFEOlBhdGF6Cis2OlBFOlBFUjpQRVJVOkxBIExJQkVSVEFEOlNhbmNoZXogQ2FycmlvbgorNzpQRTpQRVI6UEVSVTpMQSBMSUJFUlRBRDpTYW50LmRlIENodWNvCis4OlBFOlBFUjpQRVJVOkxBIExJQkVSVEFEOlRydWppbGxvCis5OlBFOlBFUjpQRVJVOkxBIExJQkVSVEFEOm5uCisxOlBFOlBFUjpQRVJVOkxBTUJBWUVRVUU6Q2hpY2xheW8KKzI6UEU6UEVSOlBFUlU6TEFNQkFZRVFVRTpGZXJyZW5hdGUKKzM6UEU6UEVSOlBFUlU6TEFNQkFZRVFVRTpJc2xhCis0OlBFOlBFUjpQRVJVOkxBTUJBWUVRVUU6TGFtYmF5ZXF1ZQorMTpQRTpQRVI6UEVSVTpBUFVSSU1BQzpBYmFuY2F5CisyOlBFOlBFUjpQRVJVOkFQVVJJTUFDOkFuZGFodWF5bGFzCiszOlBFOlBFUjpQRVJVOkFQVVJJTUFDOkFudGFiYW1iYQorNDpQRTpQRVI6UEVSVTpBUFVSSU1BQzpBeW1hcmFlcworNTpQRTpQRVI6UEVSVTpBUFVSSU1BQzpDaGluY2hlcm9zCis2OlBFOlBFUjpQRVJVOkFQVVJJTUFDOkNvdGFiYW1iYXMKKzc6UEU6UEVSOlBFUlU6QVBVUklNQUM6R3JhdQorMTpQRTpQRVI6UEVSVTpBTkNBU0g6QWlqYQorMjpQRTpQRVI6UEVSVTpBTkNBU0g6Qm9sb2duZXNpCiszOlBFOlBFUjpQRVJVOkFOQ0FTSDpDYXJodWF6Cis0OlBFOlBFUjpQRVJVOkFOQ0FTSDpDYXNtYQorNTpQRTpQRVI6UEVSVTpBTkNBU0g6Q2hhY2FzCis2OlBFOlBFUjpQRVJVOkFOQ0FTSDpDb3JvbmdvCis3OlBFOlBFUjpQRVJVOkFOQ0FTSDpIdWFyYXoKKzg6UEU6UEVSOlBFUlU6QU5DQVNIOkh1YXJpCis5OlBFOlBFUjpQRVJVOkFOQ0FTSDpIdWF5bGFzCisxMDpQRTpQRVI6UEVSVTpBTkNBU0g6SXNsYQorMTE6UEU6UEVSOlBFUlU6QU5DQVNIOkx1enVyaWFnYQorMTI6UEU6UEVSOlBFUlU6QU5DQVNIOlBhbGxhc2NhCisxMzpQRTpQRVI6UEVSVTpBTkNBU0g6UG9tYWJhbWJhCisxNDpQRTpQRVI6UEVSVTpBTkNBU0g6UmVjdWF5CisxNTpQRTpQRVI6UEVSVTpBTkNBU0g6U2FuIEFudC5SYWltb25kaQorMTY6UEU6UEVSOlBFUlU6QU5DQVNIOlNhbiBMdWlzCisxNzpQRTpQRVI6UEVSVTpBTkNBU0g6U2FudGEKKzE4OlBFOlBFUjpQRVJVOkFOQ0FTSDpTaWh1YXMKKzE5OlBFOlBFUjpQRVJVOkFOQ0FTSDpZdW5jYXkKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9QSEwvUEhMX0FETUlOMV9MRVgudHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L1BITC9QSExfQURNSU4xX0xFWC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTY0ZTJiNwotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9QSEwvUEhMX0FETUlOMV9MRVgudHh0CkBAIC0wLDAgKzEsOTMgQEAKKzE6UEgtQUJSOlBIOkFCUkEKKzI6UEgtQUdOOlBIOkFHVVNBTiBERUwgTk9SVEUKKzM6UEgtQUdTOlBIOkFHVVNBTiBERUwgU1VSCis0OlBILUFLTDpQSDpBS0xBTgorNTpQSC1BTEI6UEg6QUxCQVkKKzY6UEgtQU5UOlBIOkFOVElRVUUKKzc6UEgtQVBBOlBIOkFQQVlBTworODpQSC1BVVI6UEg6QVVST1JBCis5OlBILUJBUzpQSDpCQVNJTEFOCisxMDpQSC1CQU46UEg6QkFUQUFOCisxMTpQSC1CVE46UEg6QkFUQU5FUworMTI6UEgtQlRHOlBIOkJBVEFOR0FTCisxMzpQSC1CRU46UEg6QkVOR1VFVAorMTQ6UEgtQklMOlBIOkJJTElSQU4KKzE1OlBILUJPSDpQSDpCT0hPTAorMTY6UEgtQlVLOlBIOkJVS0lETk9OCisxNzpQSC1CVUw6UEg6QlVMQUNBTgorMTg6UEgtQ0FHOlBIOkNBR0FZQU4KKzE5OlBILUNBTjpQSDpDQU1BUklORVMgTk9SVEUKKzIwOlBILUNBUzpQSDpDQU1BUklORVMgU1VSCisyMTpQSC1DQU06UEg6Q0FNSUdVSU4KKzIyOlBILUNBUDpQSDpDQVBJWgorMjM6UEgtQ0FSOlBIOkNBUgorMjQ6UEgtQ0FUOlBIOkNBVEFORFVBTkVTCisyNTpQSC1DQVY6UEg6Q0FWSVRFCisyNjpQSC1DRUI6UEg6Q0VCVQorMjc6UEgtQ09NOlBIOkNPTVBPU1RFTEEgVkFMTEVZCisyODpQSC1EQVY6UEg6REFWQU8gREVMIE5PUlRFCisyOTpQSC1EQVM6UEg6REFWQU8gREVMIFNVUgorMzA6UEgtREFPOlBIOkRBVkFPIE9SSUVOVEFMCiszMTpQSC1FQVM6UEg6RUFTVEVSTiBTQU1BUgorMzI6UEgtR1VJOlBIOkdVSU1BUkFTCiszMzpQSC1JRlU6UEg6SUZVR0FPCiszNDpQSC1JTE46UEg6SUxPQ09TIE5PUlRFCiszNTpQSC1JTFM6UEg6SUxPQ09TIFNVUgorMzY6UEgtSUxJOlBIOklMT0lMTworMzc6UEgtSVNBOlBIOklTQUJFTEEKKzM4OlBILUtBTDpQSDpLQUxJTkdBCiszOTpQSC1MVU46UEg6TEEgVU5JT04KKzQwOlBILUxBRzpQSDpMQUdVTkEKKzQxOlBILUxBTjpQSDpMQU5BTyBERUwgTk9SVEUKKzQyOlBILUxBUzpQSDpMQU5BTyBERUwgU1VSCis0MzpQSC1MRVk6UEg6TEVZVEUKKzQ0OlBILU1BRzpQSDpNQUdVSU5EQU5BTworNDU6UEgtTUFEOlBIOk1BUklORFVRVUUKKzQ2OlBILU1BUzpQSDpNQVNCQVRFCis0NzpQSC1NREM6UEg6TUlORE9STyBPQ0NJREVOVEFMCis0ODpQSC1NRFI6UEg6TUlORE9STyBPUklFTlRBTAorNDk6UEgtTVNDOlBIOk1JU0FNSVMgT0NDSURFTlRBTAorNTA6UEgtTVNSOlBIOk1JU0FNSVMgT1JJRU5UQUwKKzUxOlBILU1PVTpQSDpNT1VOVEFJTiBQUk9WSU5DRQorNTI6UEgtTkNSOlBIOk5DUgorNTM6UEgtTkVDOlBIOk5FR1JPUyBPQ0NJREVOVEFMCis1NDpQSC1ORVI6UEg6TkVHUk9TIE9SSUVOVEFMCis1NTpQSC1OQ086UEg6Tk9SVEggQ09UQUJBVE8KKzU2OlBILU5TQTpQSDpOT1JUSEVSTiBTQU1BUgorNTc6UEgtTlVFOlBIOk5VRVZBIEVDSUpBCis1ODpQSC1OVVY6UEg6TlVFVkEgVklaQ0FZQQorNTk6UEgtUExXOlBIOlBBTEFXQU4KKzYwOlBILVBBTTpQSDpQQU1QQU5HQQorNjE6UEgtUEFOOlBIOlBBTkdBU0lOQU4KKzYyOlBILVFVRTpQSDpRVUVaT04KKzYzOlBILVFVSTpQSDpRVUlSSU5PCis2NDpQSC0xOlBIOlJFR0lPTiAxCis2NTpQSC0xMDpQSDpSRUdJT04gMTAKKzY2OlBILTExOlBIOlJFR0lPTiAxMQorNjc6UEgtMTI6UEg6UkVHSU9OIDEyCis2ODpQSC0yOlBIOlJFR0lPTiAyCis2OTpQSC0zOlBIOlJFR0lPTiAzCis3MDpQSC00OlBIOlJFR0lPTiA0Cis3MTpQSC01OlBIOlJFR0lPTiA1Cis3MjpQSC02OlBIOlJFR0lPTiA2Cis3MzpQSC03OlBIOlJFR0lPTiA3Cis3NDpQSC04OlBIOlJFR0lPTiA4Cis3NTpQSC05OlBIOlJFR0lPTiA5Cis3NjpQSC1SSVo6UEg6UklaQUwKKzc3OlBILVJPTTpQSDpST01CTE9OCis3ODpQSC1TQVI6UEg6U0FSQU5HQU5JCis3OTpQSC1TSUc6UEg6U0lRVUlKT1IKKzgwOlBILVNPUjpQSDpTT1JTT0dPTgorODE6UEgtU0NPOlBIOlNPVVRIIENPVEFCQVRPCis4MjpQSC1TTEU6UEg6U09VVEhFUk4gTEVZVEUKKzgzOlBILVNVSzpQSDpTVUxUQU4gS1VEQVJBVAorODQ6UEgtU0xVOlBIOlNVTFUKKzg1OlBILVNVTjpQSDpTVVJJR0FPIERFTCBOT1JURQorODY6UEgtU1VSOlBIOlNVUklHQU8gREVMIFNVUgorODc6UEgtVEFSOlBIOlRBUkxBQworODg6UEgtVEFXOlBIOlRBV0kgVEFXSQorODk6UEgtV1NBOlBIOldFU1RFUk4gU0FNQVIKKzkwOlBILVpNQjpQSDpaQU1CQUxFUworOTE6UEgtWkFOOlBIOlpBTUJPQU5HQSBERUwgTk9SVEUKKzkyOlBILVpBUzpQSDpaQU1CT0FOR0EgREVMIFNVUgorOTM6UEgtWlNJOlBIOlpBTUJPQU5HQSBTSUJVR1VFWSBbWkFNQk9BTkdBIFNJQlVHQVldCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvUEhML1BITF9BRE1JTjJfTEVYLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9QSEwvUEhMX0FETUlOMl9MRVgudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkzMTA0YzcKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvUEhML1BITF9BRE1JTjJfTEVYLnR4dApAQCAtMCwwICsxLDc0IEBACisxOlBIOlBITDpQSElMSVBQSU5FUzpSZWdpb24gMzpCYXRhYW4KKzI6UEg6UEhMOlBISUxJUFBJTkVTOlJlZ2lvbiAzOkJ1bGFjYW4KKzM6UEg6UEhMOlBISUxJUFBJTkVTOlJlZ2lvbiAzOk51ZXZhIEVjaWphCis0OlBIOlBITDpQSElMSVBQSU5FUzpSZWdpb24gMzpQYW1wYW5nYQorNTpQSDpQSEw6UEhJTElQUElORVM6UmVnaW9uIDM6VGFybGFjCis2OlBIOlBITDpQSElMSVBQSU5FUzpSZWdpb24gMzpaYW1iYWxlcworMTpQSDpQSEw6UEhJTElQUElORVM6UmVnaW9uIDY6QWtsYW4KKzI6UEg6UEhMOlBISUxJUFBJTkVTOlJlZ2lvbiA2OkFudGlxdWUKKzM6UEg6UEhMOlBISUxJUFBJTkVTOlJlZ2lvbiA2OkNhcGl6Cis0OlBIOlBITDpQSElMSVBQSU5FUzpSZWdpb24gNjpJbG9pbG8KKzU6UEg6UEhMOlBISUxJUFBJTkVTOlJlZ2lvbiA2Ok5lZ3JvcyBPY2NpZGVudGFsCisxOlBIOlBITDpQSElMSVBQSU5FUzpSZWdpb24gMTE6RGF2YW8gRGVsIE5vcnRlCisyOlBIOlBITDpQSElMSVBQSU5FUzpSZWdpb24gMTE6RGF2YW8gRGVsIFN1cgorMzpQSDpQSEw6UEhJTElQUElORVM6UmVnaW9uIDExOkRhdmFvIE9yaWVudGFsCis0OlBIOlBITDpQSElMSVBQSU5FUzpSZWdpb24gMTE6U291dGggQ290YWJhdG8KKzU6UEg6UEhMOlBISUxJUFBJTkVTOlJlZ2lvbiAxMTpTdXJpZ2FvIERlbCBTdXIKKzE6UEg6UEhMOlBISUxJUFBJTkVTOk5DUjpNYW5pbGEKKzE6UEg6UEhMOlBISUxJUFBJTkVTOlJlZ2lvbiAxOklsb2NvcyBOb3J0ZQorMjpQSDpQSEw6UEhJTElQUElORVM6UmVnaW9uIDE6SWxvY29zIFN1cgorMzpQSDpQSEw6UEhJTElQUElORVM6UmVnaW9uIDE6TGEgVW5pb24KKzQ6UEg6UEhMOlBISUxJUFBJTkVTOlJlZ2lvbiAxOlBhbmdhc2luYW4KKzE6UEg6UEhMOlBISUxJUFBJTkVTOkNBUjpBYnJhCisyOlBIOlBITDpQSElMSVBQSU5FUzpDQVI6QmVuZ3VldAorMzpQSDpQSEw6UEhJTElQUElORVM6Q0FSOklmdWdhbworNDpQSDpQSEw6UEhJTElQUElORVM6Q0FSOkthbGluZ2EtQXBheWFvCis1OlBIOlBITDpQSElMSVBQSU5FUzpDQVI6TW91bnRhaW4KKzE6UEg6UEhMOlBISUxJUFBJTkVTOlJlZ2lvbiAxMDpBZ3VzYW4gRGVsIE5vcnRlCisyOlBIOlBITDpQSElMSVBQSU5FUzpSZWdpb24gMTA6QWd1c2FuIERlbCBTdXIKKzM6UEg6UEhMOlBISUxJUFBJTkVTOlJlZ2lvbiAxMDpCdWtpZG5vbgorNDpQSDpQSEw6UEhJTElQUElORVM6UmVnaW9uIDEwOkNhbWlndWluCis1OlBIOlBITDpQSElMSVBQSU5FUzpSZWdpb24gMTA6TWlzYW1pcyBPY2NpZGVudGFsCis2OlBIOlBITDpQSElMSVBQSU5FUzpSZWdpb24gMTA6TWlzYW1pcyBPcmllbnRhbAorNzpQSDpQSEw6UEhJTElQUElORVM6UmVnaW9uIDEwOlN1cmlnYW8gRGVsIE5vcnRlCisxOlBIOlBITDpQSElMSVBQSU5FUzpSZWdpb24gNTpBbGJheQorMjpQSDpQSEw6UEhJTElQUElORVM6UmVnaW9uIDU6Q2FtYXJpbmVzIE5vcnRlCiszOlBIOlBITDpQSElMSVBQSU5FUzpSZWdpb24gNTpDYW1hcmluZXMgU3VyCis0OlBIOlBITDpQSElMSVBQSU5FUzpSZWdpb24gNTpDYXRhbmR1YW5lcworNTpQSDpQSEw6UEhJTElQUElORVM6UmVnaW9uIDU6TWFzYmF0ZQorNjpQSDpQSEw6UEhJTElQUElORVM6UmVnaW9uIDU6U29yc29nb24KKzE6UEg6UEhMOlBISUxJUFBJTkVTOlJlZ2lvbiA4OkVhc3Rlcm4gU2FtYXIKKzI6UEg6UEhMOlBISUxJUFBJTkVTOlJlZ2lvbiA4OkxleXRlCiszOlBIOlBITDpQSElMSVBQSU5FUzpSZWdpb24gODpOb3J0aGVybiBTYW1hcgorNDpQSDpQSEw6UEhJTElQUElORVM6UmVnaW9uIDg6U291dGhlcm4gTGV5dGUKKzU6UEg6UEhMOlBISUxJUFBJTkVTOlJlZ2lvbiA4Oldlc3Rlcm4gU2FtYXIKKzE6UEg6UEhMOlBISUxJUFBJTkVTOlJlZ2lvbiA5OkJhc2lsYW4KKzI6UEg6UEhMOlBISUxJUFBJTkVTOlJlZ2lvbiA5OlN1bHUKKzM6UEg6UEhMOlBISUxJUFBJTkVTOlJlZ2lvbiA5OlRhd2ktVGF3aQorNDpQSDpQSEw6UEhJTElQUElORVM6UmVnaW9uIDk6WmFtYm9hbmdhIERlbCBOb3J0ZQorNTpQSDpQSEw6UEhJTElQUElORVM6UmVnaW9uIDk6WmFtYm9hbmdhIERlbCBTdXIKKzE6UEg6UEhMOlBISUxJUFBJTkVTOlJlZ2lvbiA3OkJvaG9sCisyOlBIOlBITDpQSElMSVBQSU5FUzpSZWdpb24gNzpDZWJ1CiszOlBIOlBITDpQSElMSVBQSU5FUzpSZWdpb24gNzpOZWdyb3MgT3JpZW50YWwKKzQ6UEg6UEhMOlBISUxJUFBJTkVTOlJlZ2lvbiA3OlNpcXVpam9yCisxOlBIOlBITDpQSElMSVBQSU5FUzpSZWdpb24gMjpCYXRhbmVzCisyOlBIOlBITDpQSElMSVBQSU5FUzpSZWdpb24gMjpDYWdheWFuCiszOlBIOlBITDpQSElMSVBQSU5FUzpSZWdpb24gMjpJc2FiZWxhCis0OlBIOlBITDpQSElMSVBQSU5FUzpSZWdpb24gMjpOdWV2YSBWaXpjYXlhCis1OlBIOlBITDpQSElMSVBQSU5FUzpSZWdpb24gMjpRdWlyaW5vCisxOlBIOlBITDpQSElMSVBQSU5FUzpSZWdpb24gMTI6TGFuYW8gRGVsIE5vcnRlCisyOlBIOlBITDpQSElMSVBQSU5FUzpSZWdpb24gMTI6TGFuYW8gRGVsIFN1cgorMzpQSDpQSEw6UEhJTElQUElORVM6UmVnaW9uIDEyOk1hZ3VpbmRhbmFvCis0OlBIOlBITDpQSElMSVBQSU5FUzpSZWdpb24gMTI6Tm9ydGggQ290YWJhdG8KKzU6UEg6UEhMOlBISUxJUFBJTkVTOlJlZ2lvbiAxMjpTdWx0YW4gS3VkYXJhdAorMTpQSDpQSEw6UEhJTElQUElORVM6UmVnaW9uIDQ6QXVyb3JhCisyOlBIOlBITDpQSElMSVBQSU5FUzpSZWdpb24gNDpCYXRhbmdhcworMzpQSDpQSEw6UEhJTElQUElORVM6UmVnaW9uIDQ6Q2F2aXRlCis0OlBIOlBITDpQSElMSVBQSU5FUzpSZWdpb24gNDpMYWd1bmEKKzU6UEg6UEhMOlBISUxJUFBJTkVTOlJlZ2lvbiA0Ok1hcmluZHVxdWUKKzY6UEg6UEhMOlBISUxJUFBJTkVTOlJlZ2lvbiA0Ok9jY2lkZW50YWwgTWluZG9ybworNzpQSDpQSEw6UEhJTElQUElORVM6UmVnaW9uIDQ6T3JpZW50YWwgTWluZG9ybworODpQSDpQSEw6UEhJTElQUElORVM6UmVnaW9uIDQ6UGFsYXdhbgorOTpQSDpQSEw6UEhJTElQUElORVM6UmVnaW9uIDQ6UXVlem9uCisxMDpQSDpQSEw6UEhJTElQUElORVM6UmVnaW9uIDQ6Uml6YWwKKzExOlBIOlBITDpQSElMSVBQSU5FUzpSZWdpb24gNDpSb21ibG9uCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvUE5HL1BOR19BRE1JTjFfTEVYLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9QTkcvUE5HX0FETUlOMV9MRVgudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZkOGNjMjIKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvUE5HL1BOR19BRE1JTjFfTEVYLnR4dApAQCAtMCwwICsxLDIwIEBACisxOlBHLUNQTTpQRzpDRU5UUkFMCisyOlBHLUNQSzpQRzpDSElNQlUKKzM6UEctRUJSOlBHOkVBU1QgTkVXIEJSSVRBSU4KKzQ6UEctRVNXOlBHOkVBU1QgU0VQSUsKKzU6UEctRUhHOlBHOkVBU1RFUk4gSElHSExBTkRTCis2OlBHLUVQVzpQRzpFTkdBCis3OlBHLUdQSzpQRzpHVUxGCis4OlBHLU1QTTpQRzpNQURBTkcKKzk6UEctTVJMOlBHOk1BTlVTCisxMDpQRy1NQkE6UEc6TUlMTkUgQkFZCisxMTpQRy1NUEw6UEc6TU9ST0JFCisxMjpQRy1OQ0Q6UEc6TkFUSU9OQUwgQ0FQSVRBTCBESVNUUklDVCAoUE9SVCBNT1JFU0JZKQorMTM6UEctTklLOlBHOk5FVyBJUkVMQU5ECisxNDpQRy1OU0E6UEc6Tk9SVEggU09MT01PTlMKKzE1OlBHLU5QUDpQRzpOT1JUSEVSTgorMTY6UEctU0FOOlBHOlNBTkRBVU4gW1dFU1QgU0VQSUtdCisxNzpQRy1TSE06UEc6U09VVEhFUk4gSElHSExBTkRTCisxODpQRy1XQks6UEc6V0VTVCBORVcgQlJJVEFJTgorMTk6UEctV1BEOlBHOldFU1RFUk4KKzIwOlBHLVdITTpQRzpXRVNURVJOIEhJR0hMQU5EUwpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L1BORy9QTkdfQURNSU4yX0xFWC50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvUE5HL1BOR19BRE1JTjJfTEVYLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xOTdkNTcwCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L1BORy9QTkdfQURNSU4yX0xFWC50eHQKQEAgLTAsMCArMSw0MDIgQEAKKzE6UEc6UE5HOlBBUFVBIE5FVyBHVUlORUE6Ti5BLjpQTkcuTDIuMQorMjpQRzpQTkc6UEFQVUEgTkVXIEdVSU5FQTpOLkEuOlBORy5MMi4xMAorMzpQRzpQTkc6UEFQVUEgTkVXIEdVSU5FQTpOLkEuOlBORy5MMi4xMDAKKzQ6UEc6UE5HOlBBUFVBIE5FVyBHVUlORUE6Ti5BLjpQTkcuTDIuMTAxCis1OlBHOlBORzpQQVBVQSBORVcgR1VJTkVBOk4uQS46UE5HLkwyLjEwMgorNjpQRzpQTkc6UEFQVUEgTkVXIEdVSU5FQTpOLkEuOlBORy5MMi4xMDMKKzc6UEc6UE5HOlBBUFVBIE5FVyBHVUlORUE6Ti5BLjpQTkcuTDIuMTA0Cis4OlBHOlBORzpQQVBVQSBORVcgR1VJTkVBOk4uQS46UE5HLkwyLjEwNQorOTpQRzpQTkc6UEFQVUEgTkVXIEdVSU5FQTpOLkEuOlBORy5MMi4xMDYKKzEwOlBHOlBORzpQQVBVQSBORVcgR1VJTkVBOk4uQS46UE5HLkwyLjEwNworMTE6UEc6UE5HOlBBUFVBIE5FVyBHVUlORUE6Ti5BLjpQTkcuTDIuMTA4CisxMjpQRzpQTkc6UEFQVUEgTkVXIEdVSU5FQTpOLkEuOlBORy5MMi4xMDkKKzEzOlBHOlBORzpQQVBVQSBORVcgR1VJTkVBOk4uQS46UE5HLkwyLjExCisxNDpQRzpQTkc6UEFQVUEgTkVXIEdVSU5FQTpOLkEuOlBORy5MMi4xMTAKKzE1OlBHOlBORzpQQVBVQSBORVcgR1VJTkVBOk4uQS46UE5HLkwyLjExMQorMTY6UEc6UE5HOlBBUFVBIE5FVyBHVUlORUE6Ti5BLjpQTkcuTDIuMTEyCisxNzpQRzpQTkc6UEFQVUEgTkVXIEdVSU5FQTpOLkEuOlBORy5MMi4xMTMKKzE4OlBHOlBORzpQQVBVQSBORVcgR1VJTkVBOk4uQS46UE5HLkwyLjExNAorMTk6UEc6UE5HOlBBUFVBIE5FVyBHVUlORUE6Ti5BLjpQTkcuTDIuMTE1CisyMDpQRzpQTkc6UEFQVUEgTkVXIEdVSU5FQTpOLkEuOlBORy5MMi4xMTYKKzIxOlBHOlBORzpQQVBVQSBORVcgR1VJTkVBOk4uQS46UE5HLkwyLjExNworMjI6UEc6UE5HOlBBUFVBIE5FVyBHVUlORUE6Ti5BLjpQTkcuTDIuMTE4CisyMzpQRzpQTkc6UEFQVUEgTkVXIEdVSU5FQTpOLkEuOlBORy5MMi4xMTkKKzI0OlBHOlBORzpQQVBVQSBORVcgR1VJTkVBOk4uQS46UE5HLkwyLjEyCisyNTpQRzpQTkc6UEFQVUEgTkVXIEdVSU5FQTpOLkEuOlBORy5MMi4xMjAKKzI2OlBHOlBORzpQQVBVQSBORVcgR1VJTkVBOk4uQS46UE5HLkwyLjEyMQorMjc6UEc6UE5HOlBBUFVBIE5FVyBHVUlORUE6Ti5BLjpQTkcuTDIuMTIyCisyODpQRzpQTkc6UEFQVUEgTkVXIEdVSU5FQTpOLkEuOlBORy5MMi4xMjMKKzI5OlBHOlBORzpQQVBVQSBORVcgR1VJTkVBOk4uQS46UE5HLkwyLjEyNAorMzA6UEc6UE5HOlBBUFVBIE5FVyBHVUlORUE6Ti5BLjpQTkcuTDIuMTI1CiszMTpQRzpQTkc6UEFQVUEgTkVXIEdVSU5FQTpOLkEuOlBORy5MMi4xMjYKKzMyOlBHOlBORzpQQVBVQSBORVcgR1VJTkVBOk4uQS46UE5HLkwyLjEyNworMzM6UEc6UE5HOlBBUFVBIE5FVyBHVUlORUE6Ti5BLjpQTkcuTDIuMTI4CiszNDpQRzpQTkc6UEFQVUEgTkVXIEdVSU5FQTpOLkEuOlBORy5MMi4xMjkKKzM1OlBHOlBORzpQQVBVQSBORVcgR1VJTkVBOk4uQS46UE5HLkwyLjEzCiszNjpQRzpQTkc6UEFQVUEgTkVXIEdVSU5FQTpOLkEuOlBORy5MMi4xMzAKKzM3OlBHOlBORzpQQVBVQSBORVcgR1VJTkVBOk4uQS46UE5HLkwyLjEzMQorMzg6UEc6UE5HOlBBUFVBIE5FVyBHVUlORUE6Ti5BLjpQTkcuTDIuMTMyCiszOTpQRzpQTkc6UEFQVUEgTkVXIEdVSU5FQTpOLkEuOlBORy5MMi4xMzMKKzQwOlBHOlBORzpQQVBVQSBORVcgR1VJTkVBOk4uQS46UE5HLkwyLjEzNAorNDE6UEc6UE5HOlBBUFVBIE5FVyBHVUlORUE6Ti5BLjpQTkcuTDIuMTM1Cis0MjpQRzpQTkc6UEFQVUEgTkVXIEdVSU5FQTpOLkEuOlBORy5MMi4xMzYKKzQzOlBHOlBORzpQQVBVQSBORVcgR1VJTkVBOk4uQS46UE5HLkwyLjEzNworNDQ6UEc6UE5HOlBBUFVBIE5FVyBHVUlORUE6Ti5BLjpQTkcuTDIuMTM4Cis0NTpQRzpQTkc6UEFQVUEgTkVXIEdVSU5FQTpOLkEuOlBORy5MMi4xMzkKKzQ2OlBHOlBORzpQQVBVQSBORVcgR1VJTkVBOk4uQS46UE5HLkwyLjE0Cis0NzpQRzpQTkc6UEFQVUEgTkVXIEdVSU5FQTpOLkEuOlBORy5MMi4xNDAKKzQ4OlBHOlBORzpQQVBVQSBORVcgR1VJTkVBOk4uQS46UE5HLkwyLjE0MQorNDk6UEc6UE5HOlBBUFVBIE5FVyBHVUlORUE6Ti5BLjpQTkcuTDIuMTQyCis1MDpQRzpQTkc6UEFQVUEgTkVXIEdVSU5FQTpOLkEuOlBORy5MMi4xNDMKKzUxOlBHOlBORzpQQVBVQSBORVcgR1VJTkVBOk4uQS46UE5HLkwyLjE0NAorNTI6UEc6UE5HOlBBUFVBIE5FVyBHVUlORUE6Ti5BLjpQTkcuTDIuMTQ1Cis1MzpQRzpQTkc6UEFQVUEgTkVXIEdVSU5FQTpOLkEuOlBORy5MMi4xNDYKKzU0OlBHOlBORzpQQVBVQSBORVcgR1VJTkVBOk4uQS46UE5HLkwyLjE0NworNTU6UEc6UE5HOlBBUFVBIE5FVyBHVUlORUE6Ti5BLjpQTkcuTDIuMTQ4Cis1NjpQRzpQTkc6UEFQVUEgTkVXIEdVSU5FQTpOLkEuOlBORy5MMi4xNDkKKzU3OlBHOlBORzpQQVBVQSBORVcgR1VJTkVBOk4uQS46UE5HLkwyLjE1Cis1ODpQRzpQTkc6UEFQVUEgTkVXIEdVSU5FQTpOLkEuOlBORy5MMi4xNTAKKzU5OlBHOlBORzpQQVBVQSBORVcgR1VJTkVBOk4uQS46UE5HLkwyLjE1MQorNjA6UEc6UE5HOlBBUFVBIE5FVyBHVUlORUE6Ti5BLjpQTkcuTDIuMTUyCis2MTpQRzpQTkc6UEFQVUEgTkVXIEdVSU5FQTpOLkEuOlBORy5MMi4xNTMKKzYyOlBHOlBORzpQQVBVQSBORVcgR1VJTkVBOk4uQS46UE5HLkwyLjE1NAorNjM6UEc6UE5HOlBBUFVBIE5FVyBHVUlORUE6Ti5BLjpQTkcuTDIuMTU1Cis2NDpQRzpQTkc6UEFQVUEgTkVXIEdVSU5FQTpOLkEuOlBORy5MMi4xNTYKKzY1OlBHOlBORzpQQVBVQSBORVcgR1VJTkVBOk4uQS46UE5HLkwyLjE1NworNjY6UEc6UE5HOlBBUFVBIE5FVyBHVUlORUE6Ti5BLjpQTkcuTDIuMTU4Cis2NzpQRzpQTkc6UEFQVUEgTkVXIEdVSU5FQTpOLkEuOlBORy5MMi4xNTkKKzY4OlBHOlBORzpQQVBVQSBORVcgR1VJTkVBOk4uQS46UE5HLkwyLjE2Cis2OTpQRzpQTkc6UEFQVUEgTkVXIEdVSU5FQTpOLkEuOlBORy5MMi4xNjAKKzcwOlBHOlBORzpQQVBVQSBORVcgR1VJTkVBOk4uQS46UE5HLkwyLjE2MQorNzE6UEc6UE5HOlBBUFVBIE5FVyBHVUlORUE6Ti5BLjpQTkcuTDIuMTYyCis3MjpQRzpQTkc6UEFQVUEgTkVXIEdVSU5FQTpOLkEuOlBORy5MMi4xNjMKKzczOlBHOlBORzpQQVBVQSBORVcgR1VJTkVBOk4uQS46UE5HLkwyLjE2NAorNzQ6UEc6UE5HOlBBUFVBIE5FVyBHVUlORUE6Ti5BLjpQTkcuTDIuMTY1Cis3NTpQRzpQTkc6UEFQVUEgTkVXIEdVSU5FQTpOLkEuOlBORy5MMi4xNjYKKzc2OlBHOlBORzpQQVBVQSBORVcgR1VJTkVBOk4uQS46UE5HLkwyLjE2NworNzc6UEc6UE5HOlBBUFVBIE5FVyBHVUlORUE6Ti5BLjpQTkcuTDIuMTY4Cis3ODpQRzpQTkc6UEFQVUEgTkVXIEdVSU5FQTpOLkEuOlBORy5MMi4xNjkKKzc5OlBHOlBORzpQQVBVQSBORVcgR1VJTkVBOk4uQS46UE5HLkwyLjE3Cis4MDpQRzpQTkc6UEFQVUEgTkVXIEdVSU5FQTpOLkEuOlBORy5MMi4xNzAKKzgxOlBHOlBORzpQQVBVQSBORVcgR1VJTkVBOk4uQS46UE5HLkwyLjE3MQorODI6UEc6UE5HOlBBUFVBIE5FVyBHVUlORUE6Ti5BLjpQTkcuTDIuMTcyCis4MzpQRzpQTkc6UEFQVUEgTkVXIEdVSU5FQTpOLkEuOlBORy5MMi4xNzMKKzg0OlBHOlBORzpQQVBVQSBORVcgR1VJTkVBOk4uQS46UE5HLkwyLjE3NAorODU6UEc6UE5HOlBBUFVBIE5FVyBHVUlORUE6Ti5BLjpQTkcuTDIuMTc1Cis4NjpQRzpQTkc6UEFQVUEgTkVXIEdVSU5FQTpOLkEuOlBORy5MMi4xNzYKKzg3OlBHOlBORzpQQVBVQSBORVcgR1VJTkVBOk4uQS46UE5HLkwyLjE3NworODg6UEc6UE5HOlBBUFVBIE5FVyBHVUlORUE6Ti5BLjpQTkcuTDIuMTc4Cis4OTpQRzpQTkc6UEFQVUEgTkVXIEdVSU5FQTpOLkEuOlBORy5MMi4xNzkKKzkwOlBHOlBORzpQQVBVQSBORVcgR1VJTkVBOk4uQS46UE5HLkwyLjE4Cis5MTpQRzpQTkc6UEFQVUEgTkVXIEdVSU5FQTpOLkEuOlBORy5MMi4xODAKKzkyOlBHOlBORzpQQVBVQSBORVcgR1VJTkVBOk4uQS46UE5HLkwyLjE4MQorOTM6UEc6UE5HOlBBUFVBIE5FVyBHVUlORUE6Ti5BLjpQTkcuTDIuMTgyCis5NDpQRzpQTkc6UEFQVUEgTkVXIEdVSU5FQTpOLkEuOlBORy5MMi4xODMKKzk1OlBHOlBORzpQQVBVQSBORVcgR1VJTkVBOk4uQS46UE5HLkwyLjE4NAorOTY6UEc6UE5HOlBBUFVBIE5FVyBHVUlORUE6Ti5BLjpQTkcuTDIuMTg1Cis5NzpQRzpQTkc6UEFQVUEgTkVXIEdVSU5FQTpOLkEuOlBORy5MMi4xODYKKzk4OlBHOlBORzpQQVBVQSBORVcgR1VJTkVBOk4uQS46UE5HLkwyLjE4NworOTk6UEc6UE5HOlBBUFVBIE5FVyBHVUlORUE6Ti5BLjpQTkcuTDIuMTg4CisxMDA6UEc6UE5HOlBBUFVBIE5FVyBHVUlORUE6Ti5BLjpQTkcuTDIuMTg5CisxMDE6UEc6UE5HOlBBUFVBIE5FVyBHVUlORUE6Ti5BLjpQTkcuTDIuMTkKKzEwMjpQRzpQTkc6UEFQVUEgTkVXIEdVSU5FQTpOLkEuOlBORy5MMi4xOTAKKzEwMzpQRzpQTkc6UEFQVUEgTkVXIEdVSU5FQTpOLkEuOlBORy5MMi4xOTEKKzEwNDpQRzpQTkc6UEFQVUEgTkVXIEdVSU5FQTpOLkEuOlBORy5MMi4xOTIKKzEwNTpQRzpQTkc6UEFQVUEgTkVXIEdVSU5FQTpOLkEuOlBORy5MMi4xOTMKKzEwNjpQRzpQTkc6UEFQVUEgTkVXIEdVSU5FQTpOLkEuOlBORy5MMi4xOTQKKzEwNzpQRzpQTkc6UEFQVUEgTkVXIEdVSU5FQTpOLkEuOlBORy5MMi4xOTUKKzEwODpQRzpQTkc6UEFQVUEgTkVXIEdVSU5FQTpOLkEuOlBORy5MMi4xOTYKKzEwOTpQRzpQTkc6UEFQVUEgTkVXIEdVSU5FQTpOLkEuOlBORy5MMi4xOTcKKzExMDpQRzpQTkc6UEFQVUEgTkVXIEdVSU5FQTpOLkEuOlBORy5MMi4xOTgKKzExMTpQRzpQTkc6UEFQVUEgTkVXIEdVSU5FQTpOLkEuOlBORy5MMi4xOTkKKzExMjpQRzpQTkc6UEFQVUEgTkVXIEdVSU5FQTpOLkEuOlBORy5MMi4yCisxMTM6UEc6UE5HOlBBUFVBIE5FVyBHVUlORUE6Ti5BLjpQTkcuTDIuMjAKKzExNDpQRzpQTkc6UEFQVUEgTkVXIEdVSU5FQTpOLkEuOlBORy5MMi4yMDAKKzExNTpQRzpQTkc6UEFQVUEgTkVXIEdVSU5FQTpOLkEuOlBORy5MMi4yMDEKKzExNjpQRzpQTkc6UEFQVUEgTkVXIEdVSU5FQTpOLkEuOlBORy5MMi4yMDIKKzExNzpQRzpQTkc6UEFQVUEgTkVXIEdVSU5FQTpOLkEuOlBORy5MMi4yMDMKKzExODpQRzpQTkc6UEFQVUEgTkVXIEdVSU5FQTpOLkEuOlBORy5MMi4yMDQKKzExOTpQRzpQTkc6UEFQVUEgTkVXIEdVSU5FQTpOLkEuOlBORy5MMi4yMDUKKzEyMDpQRzpQTkc6UEFQVUEgTkVXIEdVSU5FQTpOLkEuOlBORy5MMi4yMDYKKzEyMTpQRzpQTkc6UEFQVUEgTkVXIEdVSU5FQTpOLkEuOlBORy5MMi4yMDcKKzEyMjpQRzpQTkc6UEFQVUEgTkVXIEdVSU5FQTpOLkEuOlBORy5MMi4yMDgKKzEyMzpQRzpQTkc6UEFQVUEgTkVXIEdVSU5FQTpOLkEuOlBORy5MMi4yMDkKKzEyNDpQRzpQTkc6UEFQVUEgTkVXIEdVSU5FQTpOLkEuOlBORy5MMi4yMQorMTI1OlBHOlBORzpQQVBVQSBORVcgR1VJTkVBOk4uQS46UE5HLkwyLjIxMAorMTI2OlBHOlBORzpQQVBVQSBORVcgR1VJTkVBOk4uQS46UE5HLkwyLjIxMQorMTI3OlBHOlBORzpQQVBVQSBORVcgR1VJTkVBOk4uQS46UE5HLkwyLjIxMgorMTI4OlBHOlBORzpQQVBVQSBORVcgR1VJTkVBOk4uQS46UE5HLkwyLjIxMworMTI5OlBHOlBORzpQQVBVQSBORVcgR1VJTkVBOk4uQS46UE5HLkwyLjIxNAorMTMwOlBHOlBORzpQQVBVQSBORVcgR1VJTkVBOk4uQS46UE5HLkwyLjIxNQorMTMxOlBHOlBORzpQQVBVQSBORVcgR1VJTkVBOk4uQS46UE5HLkwyLjIxNgorMTMyOlBHOlBORzpQQVBVQSBORVcgR1VJTkVBOk4uQS46UE5HLkwyLjIxNworMTMzOlBHOlBORzpQQVBVQSBORVcgR1VJTkVBOk4uQS46UE5HLkwyLjIxOAorMTM0OlBHOlBORzpQQVBVQSBORVcgR1VJTkVBOk4uQS46UE5HLkwyLjIxOQorMTM1OlBHOlBORzpQQVBVQSBORVcgR1VJTkVBOk4uQS46UE5HLkwyLjIyCisxMzY6UEc6UE5HOlBBUFVBIE5FVyBHVUlORUE6Ti5BLjpQTkcuTDIuMjIwCisxMzc6UEc6UE5HOlBBUFVBIE5FVyBHVUlORUE6Ti5BLjpQTkcuTDIuMjIxCisxMzg6UEc6UE5HOlBBUFVBIE5FVyBHVUlORUE6Ti5BLjpQTkcuTDIuMjIyCisxMzk6UEc6UE5HOlBBUFVBIE5FVyBHVUlORUE6Ti5BLjpQTkcuTDIuMjIzCisxNDA6UEc6UE5HOlBBUFVBIE5FVyBHVUlORUE6Ti5BLjpQTkcuTDIuMjI0CisxNDE6UEc6UE5HOlBBUFVBIE5FVyBHVUlORUE6Ti5BLjpQTkcuTDIuMjI1CisxNDI6UEc6UE5HOlBBUFVBIE5FVyBHVUlORUE6Ti5BLjpQTkcuTDIuMjI2CisxNDM6UEc6UE5HOlBBUFVBIE5FVyBHVUlORUE6Ti5BLjpQTkcuTDIuMjI3CisxNDQ6UEc6UE5HOlBBUFVBIE5FVyBHVUlORUE6Ti5BLjpQTkcuTDIuMjI4CisxNDU6UEc6UE5HOlBBUFVBIE5FVyBHVUlORUE6Ti5BLjpQTkcuTDIuMjI5CisxNDY6UEc6UE5HOlBBUFVBIE5FVyBHVUlORUE6Ti5BLjpQTkcuTDIuMjMKKzE0NzpQRzpQTkc6UEFQVUEgTkVXIEdVSU5FQTpOLkEuOlBORy5MMi4yMzAKKzE0ODpQRzpQTkc6UEFQVUEgTkVXIEdVSU5FQTpOLkEuOlBORy5MMi4yMzEKKzE0OTpQRzpQTkc6UEFQVUEgTkVXIEdVSU5FQTpOLkEuOlBORy5MMi4yMzIKKzE1MDpQRzpQTkc6UEFQVUEgTkVXIEdVSU5FQTpOLkEuOlBORy5MMi4yMzMKKzE1MTpQRzpQTkc6UEFQVUEgTkVXIEdVSU5FQTpOLkEuOlBORy5MMi4yMzQKKzE1MjpQRzpQTkc6UEFQVUEgTkVXIEdVSU5FQTpOLkEuOlBORy5MMi4yMzUKKzE1MzpQRzpQTkc6UEFQVUEgTkVXIEdVSU5FQTpOLkEuOlBORy5MMi4yMzYKKzE1NDpQRzpQTkc6UEFQVUEgTkVXIEdVSU5FQTpOLkEuOlBORy5MMi4yMzcKKzE1NTpQRzpQTkc6UEFQVUEgTkVXIEdVSU5FQTpOLkEuOlBORy5MMi4yMzgKKzE1NjpQRzpQTkc6UEFQVUEgTkVXIEdVSU5FQTpOLkEuOlBORy5MMi4yMzkKKzE1NzpQRzpQTkc6UEFQVUEgTkVXIEdVSU5FQTpOLkEuOlBORy5MMi4yNAorMTU4OlBHOlBORzpQQVBVQSBORVcgR1VJTkVBOk4uQS46UE5HLkwyLjI0MAorMTU5OlBHOlBORzpQQVBVQSBORVcgR1VJTkVBOk4uQS46UE5HLkwyLjI0MQorMTYwOlBHOlBORzpQQVBVQSBORVcgR1VJTkVBOk4uQS46UE5HLkwyLjI0MgorMTYxOlBHOlBORzpQQVBVQSBORVcgR1VJTkVBOk4uQS46UE5HLkwyLjI0MworMTYyOlBHOlBORzpQQVBVQSBORVcgR1VJTkVBOk4uQS46UE5HLkwyLjI0NAorMTYzOlBHOlBORzpQQVBVQSBORVcgR1VJTkVBOk4uQS46UE5HLkwyLjI0NQorMTY0OlBHOlBORzpQQVBVQSBORVcgR1VJTkVBOk4uQS46UE5HLkwyLjI0NgorMTY1OlBHOlBORzpQQVBVQSBORVcgR1VJTkVBOk4uQS46UE5HLkwyLjI0NworMTY2OlBHOlBORzpQQVBVQSBORVcgR1VJTkVBOk4uQS46UE5HLkwyLjI0OAorMTY3OlBHOlBORzpQQVBVQSBORVcgR1VJTkVBOk4uQS46UE5HLkwyLjI0OQorMTY4OlBHOlBORzpQQVBVQSBORVcgR1VJTkVBOk4uQS46UE5HLkwyLjI1CisxNjk6UEc6UE5HOlBBUFVBIE5FVyBHVUlORUE6Ti5BLjpQTkcuTDIuMjUwCisxNzA6UEc6UE5HOlBBUFVBIE5FVyBHVUlORUE6Ti5BLjpQTkcuTDIuMjUxCisxNzE6UEc6UE5HOlBBUFVBIE5FVyBHVUlORUE6Ti5BLjpQTkcuTDIuMjUyCisxNzI6UEc6UE5HOlBBUFVBIE5FVyBHVUlORUE6Ti5BLjpQTkcuTDIuMjUzCisxNzM6UEc6UE5HOlBBUFVBIE5FVyBHVUlORUE6Ti5BLjpQTkcuTDIuMjU0CisxNzQ6UEc6UE5HOlBBUFVBIE5FVyBHVUlORUE6Ti5BLjpQTkcuTDIuMjU1CisxNzU6UEc6UE5HOlBBUFVBIE5FVyBHVUlORUE6Ti5BLjpQTkcuTDIuMjU2CisxNzY6UEc6UE5HOlBBUFVBIE5FVyBHVUlORUE6Ti5BLjpQTkcuTDIuMjU3CisxNzc6UEc6UE5HOlBBUFVBIE5FVyBHVUlORUE6Ti5BLjpQTkcuTDIuMjU4CisxNzg6UEc6UE5HOlBBUFVBIE5FVyBHVUlORUE6Ti5BLjpQTkcuTDIuMjU5CisxNzk6UEc6UE5HOlBBUFVBIE5FVyBHVUlORUE6Ti5BLjpQTkcuTDIuMjYKKzE4MDpQRzpQTkc6UEFQVUEgTkVXIEdVSU5FQTpOLkEuOlBORy5MMi4yNjAKKzE4MTpQRzpQTkc6UEFQVUEgTkVXIEdVSU5FQTpOLkEuOlBORy5MMi4yNjEKKzE4MjpQRzpQTkc6UEFQVUEgTkVXIEdVSU5FQTpOLkEuOlBORy5MMi4yNjIKKzE4MzpQRzpQTkc6UEFQVUEgTkVXIEdVSU5FQTpOLkEuOlBORy5MMi4yNjMKKzE4NDpQRzpQTkc6UEFQVUEgTkVXIEdVSU5FQTpOLkEuOlBORy5MMi4yNjQKKzE4NTpQRzpQTkc6UEFQVUEgTkVXIEdVSU5FQTpOLkEuOlBORy5MMi4yNjUKKzE4NjpQRzpQTkc6UEFQVUEgTkVXIEdVSU5FQTpOLkEuOlBORy5MMi4yNjYKKzE4NzpQRzpQTkc6UEFQVUEgTkVXIEdVSU5FQTpOLkEuOlBORy5MMi4yNjcKKzE4ODpQRzpQTkc6UEFQVUEgTkVXIEdVSU5FQTpOLkEuOlBORy5MMi4yNjgKKzE4OTpQRzpQTkc6UEFQVUEgTkVXIEdVSU5FQTpOLkEuOlBORy5MMi4yNjkKKzE5MDpQRzpQTkc6UEFQVUEgTkVXIEdVSU5FQTpOLkEuOlBORy5MMi4yNworMTkxOlBHOlBORzpQQVBVQSBORVcgR1VJTkVBOk4uQS46UE5HLkwyLjI3MAorMTkyOlBHOlBORzpQQVBVQSBORVcgR1VJTkVBOk4uQS46UE5HLkwyLjI3MQorMTkzOlBHOlBORzpQQVBVQSBORVcgR1VJTkVBOk4uQS46UE5HLkwyLjI3MgorMTk0OlBHOlBORzpQQVBVQSBORVcgR1VJTkVBOk4uQS46UE5HLkwyLjI3MworMTk1OlBHOlBORzpQQVBVQSBORVcgR1VJTkVBOk4uQS46UE5HLkwyLjI3NAorMTk2OlBHOlBORzpQQVBVQSBORVcgR1VJTkVBOk4uQS46UE5HLkwyLjI3NQorMTk3OlBHOlBORzpQQVBVQSBORVcgR1VJTkVBOk4uQS46UE5HLkwyLjI3NgorMTk4OlBHOlBORzpQQVBVQSBORVcgR1VJTkVBOk4uQS46UE5HLkwyLjI3NworMTk5OlBHOlBORzpQQVBVQSBORVcgR1VJTkVBOk4uQS46UE5HLkwyLjI3OAorMjAwOlBHOlBORzpQQVBVQSBORVcgR1VJTkVBOk4uQS46UE5HLkwyLjI3OQorMjAxOlBHOlBORzpQQVBVQSBORVcgR1VJTkVBOk4uQS46UE5HLkwyLjI4CisyMDI6UEc6UE5HOlBBUFVBIE5FVyBHVUlORUE6Ti5BLjpQTkcuTDIuMjgwCisyMDM6UEc6UE5HOlBBUFVBIE5FVyBHVUlORUE6Ti5BLjpQTkcuTDIuMjgxCisyMDQ6UEc6UE5HOlBBUFVBIE5FVyBHVUlORUE6Ti5BLjpQTkcuTDIuMjgyCisyMDU6UEc6UE5HOlBBUFVBIE5FVyBHVUlORUE6Ti5BLjpQTkcuTDIuMjgzCisyMDY6UEc6UE5HOlBBUFVBIE5FVyBHVUlORUE6Ti5BLjpQTkcuTDIuMjg0CisyMDc6UEc6UE5HOlBBUFVBIE5FVyBHVUlORUE6Ti5BLjpQTkcuTDIuMjg1CisyMDg6UEc6UE5HOlBBUFVBIE5FVyBHVUlORUE6Ti5BLjpQTkcuTDIuMjg2CisyMDk6UEc6UE5HOlBBUFVBIE5FVyBHVUlORUE6Ti5BLjpQTkcuTDIuMjg3CisyMTA6UEc6UE5HOlBBUFVBIE5FVyBHVUlORUE6Ti5BLjpQTkcuTDIuMjg4CisyMTE6UEc6UE5HOlBBUFVBIE5FVyBHVUlORUE6Ti5BLjpQTkcuTDIuMjg5CisyMTI6UEc6UE5HOlBBUFVBIE5FVyBHVUlORUE6Ti5BLjpQTkcuTDIuMjkKKzIxMzpQRzpQTkc6UEFQVUEgTkVXIEdVSU5FQTpOLkEuOlBORy5MMi4yOTAKKzIxNDpQRzpQTkc6UEFQVUEgTkVXIEdVSU5FQTpOLkEuOlBORy5MMi4yOTEKKzIxNTpQRzpQTkc6UEFQVUEgTkVXIEdVSU5FQTpOLkEuOlBORy5MMi4yOTIKKzIxNjpQRzpQTkc6UEFQVUEgTkVXIEdVSU5FQTpOLkEuOlBORy5MMi4yOTMKKzIxNzpQRzpQTkc6UEFQVUEgTkVXIEdVSU5FQTpOLkEuOlBORy5MMi4yOTQKKzIxODpQRzpQTkc6UEFQVUEgTkVXIEdVSU5FQTpOLkEuOlBORy5MMi4yOTUKKzIxOTpQRzpQTkc6UEFQVUEgTkVXIEdVSU5FQTpOLkEuOlBORy5MMi4yOTYKKzIyMDpQRzpQTkc6UEFQVUEgTkVXIEdVSU5FQTpOLkEuOlBORy5MMi4yOTcKKzIyMTpQRzpQTkc6UEFQVUEgTkVXIEdVSU5FQTpOLkEuOlBORy5MMi4yOTgKKzIyMjpQRzpQTkc6UEFQVUEgTkVXIEdVSU5FQTpOLkEuOlBORy5MMi4yOTkKKzIyMzpQRzpQTkc6UEFQVUEgTkVXIEdVSU5FQTpOLkEuOlBORy5MMi4zCisyMjQ6UEc6UE5HOlBBUFVBIE5FVyBHVUlORUE6Ti5BLjpQTkcuTDIuMzAKKzIyNTpQRzpQTkc6UEFQVUEgTkVXIEdVSU5FQTpOLkEuOlBORy5MMi4zMDAKKzIyNjpQRzpQTkc6UEFQVUEgTkVXIEdVSU5FQTpOLkEuOlBORy5MMi4zMDEKKzIyNzpQRzpQTkc6UEFQVUEgTkVXIEdVSU5FQTpOLkEuOlBORy5MMi4zMDIKKzIyODpQRzpQTkc6UEFQVUEgTkVXIEdVSU5FQTpOLkEuOlBORy5MMi4zMDMKKzIyOTpQRzpQTkc6UEFQVUEgTkVXIEdVSU5FQTpOLkEuOlBORy5MMi4zMDQKKzIzMDpQRzpQTkc6UEFQVUEgTkVXIEdVSU5FQTpOLkEuOlBORy5MMi4zMDUKKzIzMTpQRzpQTkc6UEFQVUEgTkVXIEdVSU5FQTpOLkEuOlBORy5MMi4zMDYKKzIzMjpQRzpQTkc6UEFQVUEgTkVXIEdVSU5FQTpOLkEuOlBORy5MMi4zMDcKKzIzMzpQRzpQTkc6UEFQVUEgTkVXIEdVSU5FQTpOLkEuOlBORy5MMi4zMDgKKzIzNDpQRzpQTkc6UEFQVUEgTkVXIEdVSU5FQTpOLkEuOlBORy5MMi4zMDkKKzIzNTpQRzpQTkc6UEFQVUEgTkVXIEdVSU5FQTpOLkEuOlBORy5MMi4zMQorMjM2OlBHOlBORzpQQVBVQSBORVcgR1VJTkVBOk4uQS46UE5HLkwyLjMxMAorMjM3OlBHOlBORzpQQVBVQSBORVcgR1VJTkVBOk4uQS46UE5HLkwyLjMxMQorMjM4OlBHOlBORzpQQVBVQSBORVcgR1VJTkVBOk4uQS46UE5HLkwyLjMxMgorMjM5OlBHOlBORzpQQVBVQSBORVcgR1VJTkVBOk4uQS46UE5HLkwyLjMxMworMjQwOlBHOlBORzpQQVBVQSBORVcgR1VJTkVBOk4uQS46UE5HLkwyLjMxNAorMjQxOlBHOlBORzpQQVBVQSBORVcgR1VJTkVBOk4uQS46UE5HLkwyLjMxNQorMjQyOlBHOlBORzpQQVBVQSBORVcgR1VJTkVBOk4uQS46UE5HLkwyLjMxNgorMjQzOlBHOlBORzpQQVBVQSBORVcgR1VJTkVBOk4uQS46UE5HLkwyLjMxNworMjQ0OlBHOlBORzpQQVBVQSBORVcgR1VJTkVBOk4uQS46UE5HLkwyLjMxOAorMjQ1OlBHOlBORzpQQVBVQSBORVcgR1VJTkVBOk4uQS46UE5HLkwyLjMxOQorMjQ2OlBHOlBORzpQQVBVQSBORVcgR1VJTkVBOk4uQS46UE5HLkwyLjMyCisyNDc6UEc6UE5HOlBBUFVBIE5FVyBHVUlORUE6Ti5BLjpQTkcuTDIuMzIwCisyNDg6UEc6UE5HOlBBUFVBIE5FVyBHVUlORUE6Ti5BLjpQTkcuTDIuMzIxCisyNDk6UEc6UE5HOlBBUFVBIE5FVyBHVUlORUE6Ti5BLjpQTkcuTDIuMzIyCisyNTA6UEc6UE5HOlBBUFVBIE5FVyBHVUlORUE6Ti5BLjpQTkcuTDIuMzIzCisyNTE6UEc6UE5HOlBBUFVBIE5FVyBHVUlORUE6Ti5BLjpQTkcuTDIuMzI0CisyNTI6UEc6UE5HOlBBUFVBIE5FVyBHVUlORUE6Ti5BLjpQTkcuTDIuMzI1CisyNTM6UEc6UE5HOlBBUFVBIE5FVyBHVUlORUE6Ti5BLjpQTkcuTDIuMzI2CisyNTQ6UEc6UE5HOlBBUFVBIE5FVyBHVUlORUE6Ti5BLjpQTkcuTDIuMzI3CisyNTU6UEc6UE5HOlBBUFVBIE5FVyBHVUlORUE6Ti5BLjpQTkcuTDIuMzI4CisyNTY6UEc6UE5HOlBBUFVBIE5FVyBHVUlORUE6Ti5BLjpQTkcuTDIuMzI5CisyNTc6UEc6UE5HOlBBUFVBIE5FVyBHVUlORUE6Ti5BLjpQTkcuTDIuMzMKKzI1ODpQRzpQTkc6UEFQVUEgTkVXIEdVSU5FQTpOLkEuOlBORy5MMi4zMzAKKzI1OTpQRzpQTkc6UEFQVUEgTkVXIEdVSU5FQTpOLkEuOlBORy5MMi4zMzEKKzI2MDpQRzpQTkc6UEFQVUEgTkVXIEdVSU5FQTpOLkEuOlBORy5MMi4zMzIKKzI2MTpQRzpQTkc6UEFQVUEgTkVXIEdVSU5FQTpOLkEuOlBORy5MMi4zMzMKKzI2MjpQRzpQTkc6UEFQVUEgTkVXIEdVSU5FQTpOLkEuOlBORy5MMi4zMzQKKzI2MzpQRzpQTkc6UEFQVUEgTkVXIEdVSU5FQTpOLkEuOlBORy5MMi4zMzUKKzI2NDpQRzpQTkc6UEFQVUEgTkVXIEdVSU5FQTpOLkEuOlBORy5MMi4zMzYKKzI2NTpQRzpQTkc6UEFQVUEgTkVXIEdVSU5FQTpOLkEuOlBORy5MMi4zMzcKKzI2NjpQRzpQTkc6UEFQVUEgTkVXIEdVSU5FQTpOLkEuOlBORy5MMi4zMzgKKzI2NzpQRzpQTkc6UEFQVUEgTkVXIEdVSU5FQTpOLkEuOlBORy5MMi4zMzkKKzI2ODpQRzpQTkc6UEFQVUEgTkVXIEdVSU5FQTpOLkEuOlBORy5MMi4zNAorMjY5OlBHOlBORzpQQVBVQSBORVcgR1VJTkVBOk4uQS46UE5HLkwyLjM0MAorMjcwOlBHOlBORzpQQVBVQSBORVcgR1VJTkVBOk4uQS46UE5HLkwyLjM0MQorMjcxOlBHOlBORzpQQVBVQSBORVcgR1VJTkVBOk4uQS46UE5HLkwyLjM0MgorMjcyOlBHOlBORzpQQVBVQSBORVcgR1VJTkVBOk4uQS46UE5HLkwyLjM0MworMjczOlBHOlBORzpQQVBVQSBORVcgR1VJTkVBOk4uQS46UE5HLkwyLjM0NAorMjc0OlBHOlBORzpQQVBVQSBORVcgR1VJTkVBOk4uQS46UE5HLkwyLjM0NQorMjc1OlBHOlBORzpQQVBVQSBORVcgR1VJTkVBOk4uQS46UE5HLkwyLjM0NgorMjc2OlBHOlBORzpQQVBVQSBORVcgR1VJTkVBOk4uQS46UE5HLkwyLjM0NworMjc3OlBHOlBORzpQQVBVQSBORVcgR1VJTkVBOk4uQS46UE5HLkwyLjM0OAorMjc4OlBHOlBORzpQQVBVQSBORVcgR1VJTkVBOk4uQS46UE5HLkwyLjM0OQorMjc5OlBHOlBORzpQQVBVQSBORVcgR1VJTkVBOk4uQS46UE5HLkwyLjM1CisyODA6UEc6UE5HOlBBUFVBIE5FVyBHVUlORUE6Ti5BLjpQTkcuTDIuMzUwCisyODE6UEc6UE5HOlBBUFVBIE5FVyBHVUlORUE6Ti5BLjpQTkcuTDIuMzUxCisyODI6UEc6UE5HOlBBUFVBIE5FVyBHVUlORUE6Ti5BLjpQTkcuTDIuMzUyCisyODM6UEc6UE5HOlBBUFVBIE5FVyBHVUlORUE6Ti5BLjpQTkcuTDIuMzUzCisyODQ6UEc6UE5HOlBBUFVBIE5FVyBHVUlORUE6Ti5BLjpQTkcuTDIuMzU0CisyODU6UEc6UE5HOlBBUFVBIE5FVyBHVUlORUE6Ti5BLjpQTkcuTDIuMzU1CisyODY6UEc6UE5HOlBBUFVBIE5FVyBHVUlORUE6Ti5BLjpQTkcuTDIuMzU2CisyODc6UEc6UE5HOlBBUFVBIE5FVyBHVUlORUE6Ti5BLjpQTkcuTDIuMzU3CisyODg6UEc6UE5HOlBBUFVBIE5FVyBHVUlORUE6Ti5BLjpQTkcuTDIuMzU4CisyODk6UEc6UE5HOlBBUFVBIE5FVyBHVUlORUE6Ti5BLjpQTkcuTDIuMzU5CisyOTA6UEc6UE5HOlBBUFVBIE5FVyBHVUlORUE6Ti5BLjpQTkcuTDIuMzYKKzI5MTpQRzpQTkc6UEFQVUEgTkVXIEdVSU5FQTpOLkEuOlBORy5MMi4zNjAKKzI5MjpQRzpQTkc6UEFQVUEgTkVXIEdVSU5FQTpOLkEuOlBORy5MMi4zNjEKKzI5MzpQRzpQTkc6UEFQVUEgTkVXIEdVSU5FQTpOLkEuOlBORy5MMi4zNjIKKzI5NDpQRzpQTkc6UEFQVUEgTkVXIEdVSU5FQTpOLkEuOlBORy5MMi4zNjMKKzI5NTpQRzpQTkc6UEFQVUEgTkVXIEdVSU5FQTpOLkEuOlBORy5MMi4zNjQKKzI5NjpQRzpQTkc6UEFQVUEgTkVXIEdVSU5FQTpOLkEuOlBORy5MMi4zNjUKKzI5NzpQRzpQTkc6UEFQVUEgTkVXIEdVSU5FQTpOLkEuOlBORy5MMi4zNjYKKzI5ODpQRzpQTkc6UEFQVUEgTkVXIEdVSU5FQTpOLkEuOlBORy5MMi4zNjcKKzI5OTpQRzpQTkc6UEFQVUEgTkVXIEdVSU5FQTpOLkEuOlBORy5MMi4zNjgKKzMwMDpQRzpQTkc6UEFQVUEgTkVXIEdVSU5FQTpOLkEuOlBORy5MMi4zNjkKKzMwMTpQRzpQTkc6UEFQVUEgTkVXIEdVSU5FQTpOLkEuOlBORy5MMi4zNworMzAyOlBHOlBORzpQQVBVQSBORVcgR1VJTkVBOk4uQS46UE5HLkwyLjM3MAorMzAzOlBHOlBORzpQQVBVQSBORVcgR1VJTkVBOk4uQS46UE5HLkwyLjM3MQorMzA0OlBHOlBORzpQQVBVQSBORVcgR1VJTkVBOk4uQS46UE5HLkwyLjM3MgorMzA1OlBHOlBORzpQQVBVQSBORVcgR1VJTkVBOk4uQS46UE5HLkwyLjM3MworMzA2OlBHOlBORzpQQVBVQSBORVcgR1VJTkVBOk4uQS46UE5HLkwyLjM3NAorMzA3OlBHOlBORzpQQVBVQSBORVcgR1VJTkVBOk4uQS46UE5HLkwyLjM3NQorMzA4OlBHOlBORzpQQVBVQSBORVcgR1VJTkVBOk4uQS46UE5HLkwyLjM3NgorMzA5OlBHOlBORzpQQVBVQSBORVcgR1VJTkVBOk4uQS46UE5HLkwyLjM3NworMzEwOlBHOlBORzpQQVBVQSBORVcgR1VJTkVBOk4uQS46UE5HLkwyLjM3OAorMzExOlBHOlBORzpQQVBVQSBORVcgR1VJTkVBOk4uQS46UE5HLkwyLjM3OQorMzEyOlBHOlBORzpQQVBVQSBORVcgR1VJTkVBOk4uQS46UE5HLkwyLjM4CiszMTM6UEc6UE5HOlBBUFVBIE5FVyBHVUlORUE6Ti5BLjpQTkcuTDIuMzgwCiszMTQ6UEc6UE5HOlBBUFVBIE5FVyBHVUlORUE6Ti5BLjpQTkcuTDIuMzgxCiszMTU6UEc6UE5HOlBBUFVBIE5FVyBHVUlORUE6Ti5BLjpQTkcuTDIuMzgyCiszMTY6UEc6UE5HOlBBUFVBIE5FVyBHVUlORUE6Ti5BLjpQTkcuTDIuMzgzCiszMTc6UEc6UE5HOlBBUFVBIE5FVyBHVUlORUE6Ti5BLjpQTkcuTDIuMzg0CiszMTg6UEc6UE5HOlBBUFVBIE5FVyBHVUlORUE6Ti5BLjpQTkcuTDIuMzg1CiszMTk6UEc6UE5HOlBBUFVBIE5FVyBHVUlORUE6Ti5BLjpQTkcuTDIuMzg2CiszMjA6UEc6UE5HOlBBUFVBIE5FVyBHVUlORUE6Ti5BLjpQTkcuTDIuMzg3CiszMjE6UEc6UE5HOlBBUFVBIE5FVyBHVUlORUE6Ti5BLjpQTkcuTDIuMzg4CiszMjI6UEc6UE5HOlBBUFVBIE5FVyBHVUlORUE6Ti5BLjpQTkcuTDIuMzg5CiszMjM6UEc6UE5HOlBBUFVBIE5FVyBHVUlORUE6Ti5BLjpQTkcuTDIuMzkKKzMyNDpQRzpQTkc6UEFQVUEgTkVXIEdVSU5FQTpOLkEuOlBORy5MMi4zOTAKKzMyNTpQRzpQTkc6UEFQVUEgTkVXIEdVSU5FQTpOLkEuOlBORy5MMi4zOTEKKzMyNjpQRzpQTkc6UEFQVUEgTkVXIEdVSU5FQTpOLkEuOlBORy5MMi4zOTIKKzMyNzpQRzpQTkc6UEFQVUEgTkVXIEdVSU5FQTpOLkEuOlBORy5MMi4zOTMKKzMyODpQRzpQTkc6UEFQVUEgTkVXIEdVSU5FQTpOLkEuOlBORy5MMi4zOTQKKzMyOTpQRzpQTkc6UEFQVUEgTkVXIEdVSU5FQTpOLkEuOlBORy5MMi4zOTUKKzMzMDpQRzpQTkc6UEFQVUEgTkVXIEdVSU5FQTpOLkEuOlBORy5MMi4zOTYKKzMzMTpQRzpQTkc6UEFQVUEgTkVXIEdVSU5FQTpOLkEuOlBORy5MMi4zOTcKKzMzMjpQRzpQTkc6UEFQVUEgTkVXIEdVSU5FQTpOLkEuOlBORy5MMi4zOTgKKzMzMzpQRzpQTkc6UEFQVUEgTkVXIEdVSU5FQTpOLkEuOlBORy5MMi4zOTkKKzMzNDpQRzpQTkc6UEFQVUEgTkVXIEdVSU5FQTpOLkEuOlBORy5MMi40CiszMzU6UEc6UE5HOlBBUFVBIE5FVyBHVUlORUE6Ti5BLjpQTkcuTDIuNDAKKzMzNjpQRzpQTkc6UEFQVUEgTkVXIEdVSU5FQTpOLkEuOlBORy5MMi40MDAKKzMzNzpQRzpQTkc6UEFQVUEgTkVXIEdVSU5FQTpOLkEuOlBORy5MMi40MDEKKzMzODpQRzpQTkc6UEFQVUEgTkVXIEdVSU5FQTpOLkEuOlBORy5MMi40MDIKKzMzOTpQRzpQTkc6UEFQVUEgTkVXIEdVSU5FQTpOLkEuOlBORy5MMi40MQorMzQwOlBHOlBORzpQQVBVQSBORVcgR1VJTkVBOk4uQS46UE5HLkwyLjQyCiszNDE6UEc6UE5HOlBBUFVBIE5FVyBHVUlORUE6Ti5BLjpQTkcuTDIuNDMKKzM0MjpQRzpQTkc6UEFQVUEgTkVXIEdVSU5FQTpOLkEuOlBORy5MMi40NAorMzQzOlBHOlBORzpQQVBVQSBORVcgR1VJTkVBOk4uQS46UE5HLkwyLjQ1CiszNDQ6UEc6UE5HOlBBUFVBIE5FVyBHVUlORUE6Ti5BLjpQTkcuTDIuNDYKKzM0NTpQRzpQTkc6UEFQVUEgTkVXIEdVSU5FQTpOLkEuOlBORy5MMi40NworMzQ2OlBHOlBORzpQQVBVQSBORVcgR1VJTkVBOk4uQS46UE5HLkwyLjQ4CiszNDc6UEc6UE5HOlBBUFVBIE5FVyBHVUlORUE6Ti5BLjpQTkcuTDIuNDkKKzM0ODpQRzpQTkc6UEFQVUEgTkVXIEdVSU5FQTpOLkEuOlBORy5MMi41CiszNDk6UEc6UE5HOlBBUFVBIE5FVyBHVUlORUE6Ti5BLjpQTkcuTDIuNTAKKzM1MDpQRzpQTkc6UEFQVUEgTkVXIEdVSU5FQTpOLkEuOlBORy5MMi41MQorMzUxOlBHOlBORzpQQVBVQSBORVcgR1VJTkVBOk4uQS46UE5HLkwyLjUyCiszNTI6UEc6UE5HOlBBUFVBIE5FVyBHVUlORUE6Ti5BLjpQTkcuTDIuNTMKKzM1MzpQRzpQTkc6UEFQVUEgTkVXIEdVSU5FQTpOLkEuOlBORy5MMi41NAorMzU0OlBHOlBORzpQQVBVQSBORVcgR1VJTkVBOk4uQS46UE5HLkwyLjU1CiszNTU6UEc6UE5HOlBBUFVBIE5FVyBHVUlORUE6Ti5BLjpQTkcuTDIuNTYKKzM1NjpQRzpQTkc6UEFQVUEgTkVXIEdVSU5FQTpOLkEuOlBORy5MMi41NworMzU3OlBHOlBORzpQQVBVQSBORVcgR1VJTkVBOk4uQS46UE5HLkwyLjU4CiszNTg6UEc6UE5HOlBBUFVBIE5FVyBHVUlORUE6Ti5BLjpQTkcuTDIuNTkKKzM1OTpQRzpQTkc6UEFQVUEgTkVXIEdVSU5FQTpOLkEuOlBORy5MMi42CiszNjA6UEc6UE5HOlBBUFVBIE5FVyBHVUlORUE6Ti5BLjpQTkcuTDIuNjAKKzM2MTpQRzpQTkc6UEFQVUEgTkVXIEdVSU5FQTpOLkEuOlBORy5MMi42MQorMzYyOlBHOlBORzpQQVBVQSBORVcgR1VJTkVBOk4uQS46UE5HLkwyLjYyCiszNjM6UEc6UE5HOlBBUFVBIE5FVyBHVUlORUE6Ti5BLjpQTkcuTDIuNjMKKzM2NDpQRzpQTkc6UEFQVUEgTkVXIEdVSU5FQTpOLkEuOlBORy5MMi42NAorMzY1OlBHOlBORzpQQVBVQSBORVcgR1VJTkVBOk4uQS46UE5HLkwyLjY1CiszNjY6UEc6UE5HOlBBUFVBIE5FVyBHVUlORUE6Ti5BLjpQTkcuTDIuNjYKKzM2NzpQRzpQTkc6UEFQVUEgTkVXIEdVSU5FQTpOLkEuOlBORy5MMi42NworMzY4OlBHOlBORzpQQVBVQSBORVcgR1VJTkVBOk4uQS46UE5HLkwyLjY4CiszNjk6UEc6UE5HOlBBUFVBIE5FVyBHVUlORUE6Ti5BLjpQTkcuTDIuNjkKKzM3MDpQRzpQTkc6UEFQVUEgTkVXIEdVSU5FQTpOLkEuOlBORy5MMi43CiszNzE6UEc6UE5HOlBBUFVBIE5FVyBHVUlORUE6Ti5BLjpQTkcuTDIuNzAKKzM3MjpQRzpQTkc6UEFQVUEgTkVXIEdVSU5FQTpOLkEuOlBORy5MMi43MQorMzczOlBHOlBORzpQQVBVQSBORVcgR1VJTkVBOk4uQS46UE5HLkwyLjcyCiszNzQ6UEc6UE5HOlBBUFVBIE5FVyBHVUlORUE6Ti5BLjpQTkcuTDIuNzMKKzM3NTpQRzpQTkc6UEFQVUEgTkVXIEdVSU5FQTpOLkEuOlBORy5MMi43NAorMzc2OlBHOlBORzpQQVBVQSBORVcgR1VJTkVBOk4uQS46UE5HLkwyLjc1CiszNzc6UEc6UE5HOlBBUFVBIE5FVyBHVUlORUE6Ti5BLjpQTkcuTDIuNzYKKzM3ODpQRzpQTkc6UEFQVUEgTkVXIEdVSU5FQTpOLkEuOlBORy5MMi43NworMzc5OlBHOlBORzpQQVBVQSBORVcgR1VJTkVBOk4uQS46UE5HLkwyLjc4CiszODA6UEc6UE5HOlBBUFVBIE5FVyBHVUlORUE6Ti5BLjpQTkcuTDIuNzkKKzM4MTpQRzpQTkc6UEFQVUEgTkVXIEdVSU5FQTpOLkEuOlBORy5MMi44CiszODI6UEc6UE5HOlBBUFVBIE5FVyBHVUlORUE6Ti5BLjpQTkcuTDIuODAKKzM4MzpQRzpQTkc6UEFQVUEgTkVXIEdVSU5FQTpOLkEuOlBORy5MMi44MQorMzg0OlBHOlBORzpQQVBVQSBORVcgR1VJTkVBOk4uQS46UE5HLkwyLjgyCiszODU6UEc6UE5HOlBBUFVBIE5FVyBHVUlORUE6Ti5BLjpQTkcuTDIuODMKKzM4NjpQRzpQTkc6UEFQVUEgTkVXIEdVSU5FQTpOLkEuOlBORy5MMi44NAorMzg3OlBHOlBORzpQQVBVQSBORVcgR1VJTkVBOk4uQS46UE5HLkwyLjg1CiszODg6UEc6UE5HOlBBUFVBIE5FVyBHVUlORUE6Ti5BLjpQTkcuTDIuODYKKzM4OTpQRzpQTkc6UEFQVUEgTkVXIEdVSU5FQTpOLkEuOlBORy5MMi44NworMzkwOlBHOlBORzpQQVBVQSBORVcgR1VJTkVBOk4uQS46UE5HLkwyLjg4CiszOTE6UEc6UE5HOlBBUFVBIE5FVyBHVUlORUE6Ti5BLjpQTkcuTDIuODkKKzM5MjpQRzpQTkc6UEFQVUEgTkVXIEdVSU5FQTpOLkEuOlBORy5MMi45CiszOTM6UEc6UE5HOlBBUFVBIE5FVyBHVUlORUE6Ti5BLjpQTkcuTDIuOTAKKzM5NDpQRzpQTkc6UEFQVUEgTkVXIEdVSU5FQTpOLkEuOlBORy5MMi45MQorMzk1OlBHOlBORzpQQVBVQSBORVcgR1VJTkVBOk4uQS46UE5HLkwyLjkyCiszOTY6UEc6UE5HOlBBUFVBIE5FVyBHVUlORUE6Ti5BLjpQTkcuTDIuOTMKKzM5NzpQRzpQTkc6UEFQVUEgTkVXIEdVSU5FQTpOLkEuOlBORy5MMi45NAorMzk4OlBHOlBORzpQQVBVQSBORVcgR1VJTkVBOk4uQS46UE5HLkwyLjk1CiszOTk6UEc6UE5HOlBBUFVBIE5FVyBHVUlORUE6Ti5BLjpQTkcuTDIuOTYKKzQwMDpQRzpQTkc6UEFQVUEgTkVXIEdVSU5FQTpOLkEuOlBORy5MMi45NworNDAxOlBHOlBORzpQQVBVQSBORVcgR1VJTkVBOk4uQS46UE5HLkwyLjk4Cis0MDI6UEc6UE5HOlBBUFVBIE5FVyBHVUlORUE6Ti5BLjpQTkcuTDIuOTkKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9QT0wvUE9MX0FETUlOMV9MRVgudHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L1BPTC9QT0xfQURNSU4xX0xFWC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWI4Mjc1NgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9QT0wvUE9MX0FETUlOMV9MRVgudHh0CkBAIC0wLDAgKzEsNjAgQEAKKzE6UEwtQlA6UEw6QklBTEEgUE9ETEFTS0EKKzI6UEwtQkk6UEw6QklBTFlTVE9LCiszOlBMLUJCOlBMOkJJRUxTS08gQklBTEEKKzQ6UEwtQlk6UEw6QllER09TWkNaCis1OlBMLUNIOlBMOkNIRUxNCis2OlBMLUNFOlBMOkNJRUNIQU5PVworNzpQTC1DWjpQTDpDWkVTVE9DSE9XQQorODpQTC1EUzpQTDpET0xOT0VMU0tJRQorOTpQTC1FTDpQTDpFTEJMQUcKKzEwOlBMLVNMOlBMOkVMU0tJRQorMTE6UEwtR0Q6UEw6R0RBTlNLCisxMjpQTC1HTzpQTDpHT1JaT1cKKzEzOlBMLUpFOlBMOkpFTEVOSUEgR09SQQorMTQ6UEwtS0E6UEw6S0FMSVNaCisxNTpQTC1LVDpQTDpLQVRPV0lDRQorMTY6UEwtS0w6UEw6S0lFTENFCisxNzpQTC1LTzpQTDpLT1NaQUxJTgorMTg6UEwtS1c6UEw6S1JBS09XCisxOTpQTC1LUjpQTDpLUk9TTk8KKzIwOlBMLUtQOlBMOktVSkFXU0tPIFBPTU9SU0tJRQorMjE6UEwtTEc6UEw6TEVHTklDQQorMjI6UEwtTEU6UEw6TEVTWk5PCisyMzpQTC1MRDpQTDpMT0RaCisyNDpQTC1MTzpQTDpMT01aQQorMjU6UEwtTFU6UEw6TFVCRUxTS0lFCisyNjpQTC1MTDpQTDpMVUJMSU4KKzI3OlBMLUxCOlBMOkxVQlVTS0lFCisyODpQTC1NWjpQTDpNQVpPV0lFQ0tJRQorMjk6UEwtTUE6UEw6TUGzT1BPTFNLSUUKKzMwOlBMLU5TOlBMOk5PV1kgU0FDWgorMzE6UEwtT0w6UEw6T0xTWlRZTgorMzI6UEwtT1A6UEw6T1BPTEUKKzMzOlBMLU9TOlBMOk9TVFJPTEVLQQorMzQ6UEwtUEk6UEw6UElMQQorMzU6UEwtUE86UEw6UElPVFJLT1cKKzM2OlBMLVBLOlBMOlBPREtBUlBBQ0tJRQorMzc6UEwtUEQ6UEw6UE9ETEFTS0lFCiszODpQTC1QTTpQTDpQT01PUlNLSUUKKzM5OlBMLVBaOlBMOlBPWk5BTgorNDA6UEwtUFI6UEw6UFJaRU1ZU0wKKzQxOlBMLVJBOlBMOlJBRE9NCis0MjpQTC1SWjpQTDpSWkVTWk9XCis0MzpQTC1TSTpQTDpTSUVETENFCis0NDpQTC1TUjpQTDpTSUVSQURaCis0NTpQTC1TSzpQTDpTS0lFUk5JRVdJQ0UKKzQ2OlBMLVNQOlBMOlNMVVBTSworNDc6UEwtU1U6UEw6U1VXQUxTS0kKKzQ4OlBMLUNJOlBMOlNaQ1pFQ0lOCis0OTpQTC1UQTpQTDpUQVJOT0JSWkVHCis1MDpQTC1UVzpQTDpUQVJOT1cKKzUxOlBMLVRPOlBMOlRPUlVOCis1MjpQTC1XWTpQTDpXQUxCUlpZQ0gKKzUzOlBMLVdOOlBMOldBUk1JU0tPIE1BWlVSU0tJRQorNTQ6UEwtV0E6UEw6V0FSU1pBV0EKKzU1OlBMLVdQOlBMOldJRUxLT1BPTFNLSUUKKzU2OlBMLVdPOlBMOldMT0NMQVdFSworNTc6UEwtV1I6UEw6V1JPQ0xBVworNTg6UEwtWlA6UEw6WkFDSE9ETklPUE9NT1JTS0lFCis1OTpQTC1aTTpQTDpaQU1PU0MKKzYwOlBMLVpFOlBMOlpJRUxPTkEgR09SQQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L1BPTC9QT0xfQURNSU4yX0xFWC50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvUE9ML1BPTF9BRE1JTjJfTEVYLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNjlkZTI5Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L1BPTC9QT0xfQURNSU4yX0xFWC50eHQKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9QUkkvUFJJX0FETUlOMV9MRVgudHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L1BSSS9QUklfQURNSU4xX0xFWC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmVhYTVkZAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9QUkkvUFJJX0FETUlOMV9MRVgudHh0CkBAIC0wLDAgKzEsNzkgQEAKKzE6UFItNzIwMDE6UFI6QURKVU5UQVMKKzI6UFItNzIwMDM6UFI6QUdVQURBCiszOlBSLTcyMDA1OlBSOkFHVUFESUxMQQorNDpQUi03MjAwNzpQUjpBR1VBUyBCVUVOQVMKKzU6UFItNzIwMDk6UFI6QUlCT05JVE8KKzY6UFItNzIwMTM6UFI6QVJFQ0lCTworNzpQUi03MjAxNTpQUjpBUlJPWU8KKzg6UFItNzIwMTE6UFI6QdFBU0NPCis5OlBSLTcyMDE3OlBSOkJBUkNFTE9ORVRBCisxMDpQUi03MjAxOTpQUjpCQVJSQU5RVUlUQVMKKzExOlBSLTcyMDIxOlBSOkJBWUFN004KKzEyOlBSLTcyMDIzOlBSOkNBQk8gUk9KTworMTM6UFItNzIwMjU6UFI6Q0FHVUFTCisxNDpQUi03MjAyNzpQUjpDQU1VWQorMTU6UFItNzIwMjk6UFI6Q0FO01ZBTkFTCisxNjpQUi03MjAzMTpQUjpDQVJPTElOQQorMTc6UFItNzIwMzM6UFI6Q0FUQdFPCisxODpQUi03MjAzNTpQUjpDQVlFWQorMTk6UFItNzIwMzc6UFI6Q0VJQkEKKzIwOlBSLTcyMDM5OlBSOkNJQUxFUworMjE6UFItNzIwNDE6UFI6Q0lEUkEKKzIyOlBSLTcyMDQzOlBSOkNPQU1PCisyMzpQUi03MjA0NTpQUjpDT01FUs1PCisyNDpQUi03MjA0NzpQUjpDT1JPWkFMCisyNTpQUi03MjA0OTpQUjpDVUxFQlJBCisyNjpQUi03MjA1MTpQUjpET1JBRE8KKzI3OlBSLTcyMDUzOlBSOkZBSkFSRE8KKzI4OlBSLTcyMDU0OlBSOkZMT1JJREEKKzI5OlBSLTcyMDU3OlBSOkdVQVlBTUEKKzMwOlBSLTcyMDU5OlBSOkdVQVlBTklMTEEKKzMxOlBSLTcyMDYxOlBSOkdVQVlOQUJPCiszMjpQUi03MjA2MzpQUjpHVVJBQk8KKzMzOlBSLTcyMDU1OlBSOkdVwU5JQ0EKKzM0OlBSLTcyMDY1OlBSOkhBVElMTE8KKzM1OlBSLTcyMDY3OlBSOkhPUk1JR1VFUk9TCiszNjpQUi03MjA2OTpQUjpIVU1BQ0FPCiszNzpQUi03MjA3MTpQUjpJU0FCRUxBCiszODpQUi03MjA3MzpQUjpKQVlVWUEKKzM5OlBSLTcyMDc1OlBSOkpVQU5BIETNQVoKKzQwOlBSLTcyMDc3OlBSOkpVTkNPUworNDE6UFItNzIwNzk6UFI6TEFKQVMKKzQyOlBSLTcyMDgxOlBSOkxBUkVTCis0MzpQUi03MjA4MzpQUjpMQVMgTUFSzUFTCis0NDpQUi03MjA4NTpQUjpMQVMgUElFRFJBUworNDU6UFItNzIwODc6UFI6TE/NWkEKKzQ2OlBSLTcyMDg5OlBSOkxVUVVJTExPCis0NzpQUi03MjA5MTpQUjpNQU5BVM0KKzQ4OlBSLTcyMDkzOlBSOk1BUklDQU8KKzQ5OlBSLTcyMDk1OlBSOk1BVU5BQk8KKzUwOlBSLTcyMDk3OlBSOk1BWUFH3EVaCis1MTpQUi03MjA5OTpQUjpNT0NBCis1MjpQUi03MjEwMTpQUjpNT1JPVklTCis1MzpQUi03MjEwMzpQUjpOQUdVQUJPCis1NDpQUi03MjEwNTpQUjpOQVJBTkpJVE8KKzU1OlBSLTcyMTA3OlBSOk9ST0NPVklTCis1NjpQUi03MjEwOTpQUjpQQVRJTExBUworNTc6UFItNzIxMTE6UFI6UEXRVUVMQVMKKzU4OlBSLTcyMTEzOlBSOlBPTkNFCis1OTpQUi1UUjpQUjpQVUVSVE8gUklDTworNjA6UFItNzIxMTU6UFI6UVVFQlJBRElMTEFTCis2MTpQUi03MjExNzpQUjpSSU5D004KKzYyOlBSLTcyMTE5OlBSOlLNTyBHUkFOREUKKzYzOlBSLTcyMTIxOlBSOlNBQkFOQSBHUkFOREUKKzY0OlBSLTcyMTIzOlBSOlNBTElOQVMKKzY1OlBSLTcyMTI1OlBSOlNBTiBHRVJNwU4KKzY2OlBSLTcyMTI3OlBSOlNBTiBKVUFOCis2NzpQUi03MjEyOTpQUjpTQU4gTE9SRU5aTworNjg6UFItNzIxMzE6UFI6U0FOIFNFQkFTVEnBTgorNjk6UFItNzIxMzM6UFI6U0FOVEEgSVNBQkVMCis3MDpQUi03MjEzNTpQUjpUT0EgQUxUQQorNzE6UFItNzIxMzc6UFI6VE9BIEJBSkEKKzcyOlBSLTcyMTM5OlBSOlRSVUpJTExPIEFMVE8KKzczOlBSLTcyMTQxOlBSOlVUVUFETworNzQ6UFItNzIxNDM6UFI6VkVHQSBBTFRBCis3NTpQUi03MjE0NTpQUjpWRUdBIEJBSkEKKzc2OlBSLTcyMTQ3OlBSOlZJRVFVRVMKKzc3OlBSLTcyMTQ5OlBSOlZJTExBTEJBCis3ODpQUi03MjE1MTpQUjpZQUJVQ09BCis3OTpQUi03MjE1MzpQUjpZQVVDTwpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L1BSSS9QUklfQURNSU4yX0xFWC50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvUFJJL1BSSV9BRE1JTjJfTEVYLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNjlkZTI5Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L1BSSS9QUklfQURNSU4yX0xFWC50eHQKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9QUksvUFJLX0FETUlOMV9MRVgudHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L1BSSy9QUktfQURNSU4xX0xFWC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2M5NDExZAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9QUksvUFJLX0FETUlOMV9MRVgudHh0CkBAIC0wLDAgKzEsMjUgQEAKKzE6S1AtQ0hBOktQOkNIQUdBTkcgRE8KKzI6S1AtQ0hHOktQOkNIQU5HQU5HCiszOktQLUhBQjpLUDpIQU1HWU9OR0JVSyBETworNDpLUC1IQU46S1A6SEFNR1lPTkdOQU0gRE8KKzU6S1AtSFdCOktQOkhXQU5HSEFFQlVLIERPCis2OktQLUhXTjpLUDpIV0FOR0hBRU5BTSBETworNzpLUC1LU086S1A6S0FFU09ORworODpLUC1LQUU6S1A6S0FFU09ORyBTSQorOTpLUC1LR1c6S1A6S0FOR1dPTgorMTA6S1AtS0FOOktQOktBTkdXT04gRE8KKzExOktQLU5BSjpLUDpOQUpJTiBTT05CT05HIFNJCisxMjpLUC1OQVA6S1A6TkFNUE8KKzEzOktQLU5BTTpLUDpOQU1QTyBTSQorMTQ6S1AtSEdZOktQOk5PUlRIIEhBTUdZT05HCisxNTpLUC1IV0E6S1A6Tk9SVEggSFdBTkdIQUUKKzE2OktQLU5QWTpLUDpOT1JUSCBQWU9OR0FOCisxNzpLUC1QWUI6S1A6UFlPTkdBTkJVSyBETworMTg6S1AtUFlOOktQOlBZT05HQU5OQU0gRE8KKzE5OktQLVBZOktQOlBZT05HWUFORworMjA6S1AtUFlPOktQOlBZT05HWUFORyBTSQorMjE6S1AtU0hPOktQOlNPVVRIIEhBTUdZT05HCisyMjpLUC1TSEE6S1A6U09VVEggSFdBTkdIQUUKKzIzOktQLVNQWTpLUDpTT1VUSCBQWU9OR0FOCisyNDpLUC1ZR046S1A6WUFOR0dBTkcKKzI1OktQLVlBTjpLUDpZQU5HR0FORyBETwpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L1BSSy9QUktfQURNSU4yX0xFWC50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvUFJLL1BSS19BRE1JTjJfTEVYLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lOTI3NGM5Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L1BSSy9QUktfQURNSU4yX0xFWC50eHQKQEAgLTAsMCArMSw3MCBAQAorMTpLUDpQUks6Tk9SVEggS09SRUE6S2FuZ3dvbjpQUksuTDIuNworMjpLUDpQUks6Tk9SVEggS09SRUE6S2FuZ3dvbjpQUksuTDIuOAorMzpLUDpQUks6Tk9SVEggS09SRUE6S2FuZ3dvbjpQUksuTDIuOQorMTpLUDpQUks6Tk9SVEggS09SRUE6U291dGggUHlvbmdhbjpQUksuTDIuMTAKKzE6S1A6UFJLOk5PUlRIIEtPUkVBOkNoYW5nYW5nOlBSSy5MMi4xCisxOktQOlBSSzpOT1JUSCBLT1JFQTpTb3V0aCBId2FuZ2hhZTpQUksuTDIuMTIKKzI6S1A6UFJLOk5PUlRIIEtPUkVBOlNvdXRoIEh3YW5naGFlOlBSSy5MMi4xMworMzpLUDpQUks6Tk9SVEggS09SRUE6U291dGggSHdhbmdoYWU6UFJLLkwyLjE0Cis0OktQOlBSSzpOT1JUSCBLT1JFQTpTb3V0aCBId2FuZ2hhZTpQUksuTDIuMTUKKzU6S1A6UFJLOk5PUlRIIEtPUkVBOlNvdXRoIEh3YW5naGFlOlBSSy5MMi4xNgorNjpLUDpQUks6Tk9SVEggS09SRUE6U291dGggSHdhbmdoYWU6UFJLLkwyLjE3Cis3OktQOlBSSzpOT1JUSCBLT1JFQTpTb3V0aCBId2FuZ2hhZTpQUksuTDIuMTgKKzg6S1A6UFJLOk5PUlRIIEtPUkVBOlNvdXRoIEh3YW5naGFlOlBSSy5MMi4xOQorOTpLUDpQUks6Tk9SVEggS09SRUE6U291dGggSHdhbmdoYWU6UFJLLkwyLjIwCisxMDpLUDpQUks6Tk9SVEggS09SRUE6U291dGggSHdhbmdoYWU6UFJLLkwyLjIxCisxMTpLUDpQUks6Tk9SVEggS09SRUE6U291dGggSHdhbmdoYWU6UFJLLkwyLjIyCisxMjpLUDpQUks6Tk9SVEggS09SRUE6U291dGggSHdhbmdoYWU6UFJLLkwyLjIzCisxMzpLUDpQUks6Tk9SVEggS09SRUE6U291dGggSHdhbmdoYWU6UFJLLkwyLjI0CisxNDpLUDpQUks6Tk9SVEggS09SRUE6U291dGggSHdhbmdoYWU6UFJLLkwyLjI1CisxNTpLUDpQUks6Tk9SVEggS09SRUE6U291dGggSHdhbmdoYWU6UFJLLkwyLjI2CisxNjpLUDpQUks6Tk9SVEggS09SRUE6U291dGggSHdhbmdoYWU6UFJLLkwyLjI3CisxNzpLUDpQUks6Tk9SVEggS09SRUE6U291dGggSHdhbmdoYWU6UFJLLkwyLjI4CisxODpLUDpQUks6Tk9SVEggS09SRUE6U291dGggSHdhbmdoYWU6UFJLLkwyLjI5CisxOTpLUDpQUks6Tk9SVEggS09SRUE6U291dGggSHdhbmdoYWU6UFJLLkwyLjMwCisyMDpLUDpQUks6Tk9SVEggS09SRUE6U291dGggSHdhbmdoYWU6UFJLLkwyLjMxCisyMTpLUDpQUks6Tk9SVEggS09SRUE6U291dGggSHdhbmdoYWU6UFJLLkwyLjMyCisyMjpLUDpQUks6Tk9SVEggS09SRUE6U291dGggSHdhbmdoYWU6UFJLLkwyLjMzCisyMzpLUDpQUks6Tk9SVEggS09SRUE6U291dGggSHdhbmdoYWU6UFJLLkwyLjM0CisyNDpLUDpQUks6Tk9SVEggS09SRUE6U291dGggSHdhbmdoYWU6UFJLLkwyLjM1CisyNTpLUDpQUks6Tk9SVEggS09SRUE6U291dGggSHdhbmdoYWU6UFJLLkwyLjM2CisxOktQOlBSSzpOT1JUSCBLT1JFQTpQeW9uZ3lhbmc6UFJLLkwyLjYKKzE6S1A6UFJLOk5PUlRIIEtPUkVBOlNvdXRoIEhhbWd5b25nOlBSSy5MMi42NgorMjpLUDpQUks6Tk9SVEggS09SRUE6U291dGggSGFtZ3lvbmc6UFJLLkwyLjY3CiszOktQOlBSSzpOT1JUSCBLT1JFQTpTb3V0aCBIYW1neW9uZzpQUksuTDIuNjgKKzQ6S1A6UFJLOk5PUlRIIEtPUkVBOlNvdXRoIEhhbWd5b25nOlBSSy5MMi42OQorMTpLUDpQUks6Tk9SVEggS09SRUE6WWFuZ2dhbmc6UFJLLkwyLjcwCisxOktQOlBSSzpOT1JUSCBLT1JFQTpOYW1wbzpQUksuTDIuMzcKKzE6S1A6UFJLOk5PUlRIIEtPUkVBOkthZXNvbmc6UFJLLkwyLjUKKzE6S1A6UFJLOk5PUlRIIEtPUkVBOk5vcnRoIFB5b25nYW46UFJLLkwyLjM4CisyOktQOlBSSzpOT1JUSCBLT1JFQTpOb3J0aCBQeW9uZ2FuOlBSSy5MMi4zOQorMzpLUDpQUks6Tk9SVEggS09SRUE6Tm9ydGggUHlvbmdhbjpQUksuTDIuNDAKKzQ6S1A6UFJLOk5PUlRIIEtPUkVBOk5vcnRoIFB5b25nYW46UFJLLkwyLjQxCis1OktQOlBSSzpOT1JUSCBLT1JFQTpOb3J0aCBQeW9uZ2FuOlBSSy5MMi40MgorNjpLUDpQUks6Tk9SVEggS09SRUE6Tm9ydGggUHlvbmdhbjpQUksuTDIuNDMKKzc6S1A6UFJLOk5PUlRIIEtPUkVBOk5vcnRoIFB5b25nYW46UFJLLkwyLjQ0Cis4OktQOlBSSzpOT1JUSCBLT1JFQTpOb3J0aCBQeW9uZ2FuOlBSSy5MMi40NQorOTpLUDpQUks6Tk9SVEggS09SRUE6Tm9ydGggUHlvbmdhbjpQUksuTDIuNDYKKzEwOktQOlBSSzpOT1JUSCBLT1JFQTpOb3J0aCBQeW9uZ2FuOlBSSy5MMi40NworMTE6S1A6UFJLOk5PUlRIIEtPUkVBOk5vcnRoIFB5b25nYW46UFJLLkwyLjQ4CisxMjpLUDpQUks6Tk9SVEggS09SRUE6Tm9ydGggUHlvbmdhbjpQUksuTDIuNDkKKzEzOktQOlBSSzpOT1JUSCBLT1JFQTpOb3J0aCBQeW9uZ2FuOlBSSy5MMi41MAorMTQ6S1A6UFJLOk5PUlRIIEtPUkVBOk5vcnRoIFB5b25nYW46UFJLLkwyLjUxCisxNTpLUDpQUks6Tk9SVEggS09SRUE6Tm9ydGggUHlvbmdhbjpQUksuTDIuNTIKKzE2OktQOlBSSzpOT1JUSCBLT1JFQTpOb3J0aCBQeW9uZ2FuOlBSSy5MMi41MworMTc6S1A6UFJLOk5PUlRIIEtPUkVBOk5vcnRoIFB5b25nYW46UFJLLkwyLjU0CisxODpLUDpQUks6Tk9SVEggS09SRUE6Tm9ydGggUHlvbmdhbjpQUksuTDIuNTUKKzE5OktQOlBSSzpOT1JUSCBLT1JFQTpOb3J0aCBQeW9uZ2FuOlBSSy5MMi41NgorMjA6S1A6UFJLOk5PUlRIIEtPUkVBOk5vcnRoIFB5b25nYW46UFJLLkwyLjU3CisyMTpLUDpQUks6Tk9SVEggS09SRUE6Tm9ydGggUHlvbmdhbjpQUksuTDIuNTgKKzIyOktQOlBSSzpOT1JUSCBLT1JFQTpOb3J0aCBQeW9uZ2FuOlBSSy5MMi41OQorMjM6S1A6UFJLOk5PUlRIIEtPUkVBOk5vcnRoIFB5b25nYW46UFJLLkwyLjYwCisyNDpLUDpQUks6Tk9SVEggS09SRUE6Tm9ydGggUHlvbmdhbjpQUksuTDIuNjEKKzI1OktQOlBSSzpOT1JUSCBLT1JFQTpOb3J0aCBQeW9uZ2FuOlBSSy5MMi42MgorMjY6S1A6UFJLOk5PUlRIIEtPUkVBOk5vcnRoIFB5b25nYW46UFJLLkwyLjYzCisyNzpLUDpQUks6Tk9SVEggS09SRUE6Tm9ydGggUHlvbmdhbjpQUksuTDIuNjQKKzI4OktQOlBSSzpOT1JUSCBLT1JFQTpOb3J0aCBQeW9uZ2FuOlBSSy5MMi42NQorMTpLUDpQUks6Tk9SVEggS09SRUE6Tm9ydGggSGFtZ3lvbmc6UFJLLkwyLjIKKzI6S1A6UFJLOk5PUlRIIEtPUkVBOk5vcnRoIEhhbWd5b25nOlBSSy5MMi4zCiszOktQOlBSSzpOT1JUSCBLT1JFQTpOb3J0aCBIYW1neW9uZzpQUksuTDIuNAorMTpLUDpQUks6Tk9SVEggS09SRUE6Tm9ydGggSHdhbmdoYWU6UFJLLkwyLjExCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvUFJUL1BSVF9BRE1JTjFfTEVYLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9QUlQvUFJUX0FETUlOMV9MRVgudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJkMDAxMDIKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvUFJUL1BSVF9BRE1JTjFfTEVYLnR4dApAQCAtMCwwICsxLDI0IEBACisxOlBULTE0OlBUOkFMRU5URUpPCisyOlBULTE1OlBUOkFMR0FSVkUKKzM6UFQtMDpQVDpBVkVJUk8KKzQ6UFQtMDI6UFQ6QkVKQQorNTpQVC0wMzpQVDpCUkFHQQorNjpQVC0wNDpQVDpCUkFHQU5DQQorNzpQVC0wNTpQVDpDQVNURUxPIEJSQU5DTworODpQVC0xMDpQVDpDRU5UUk8KKzk6UFQtMDY6UFQ6Q09JTUJSQQorMTA6UFQtMDg6UFQ6RkFSTworMTE6UFQtMDk6UFQ6R1VBUkRBCisxMjpQVC06UFQ6TElTQk9BCisxMzpQVC0wMTpQVDpMSVNCT0EgRSBWQUxFIERPIFRFSk8KKzE0OlBULTExOlBUOk5PUlRFCisxNTpQVC0yOlBUOlBPUlRBTEVHUkUKKzE2OlBULTM6UFQ6UE9SVE8KKzE3OlBULTMwOlBUOlJFR0lPIEFVVE5PTUEgREEgTUFERUlSQQorMTg6UFQtMjA6UFQ6UkVHSU8gQVVUTk9NQSBET1MgQUNPUkVTCisxOTpQVC00OlBUOlNBTlRBUkVNCisyMDpQVC01OlBUOlNFVEJBTAorMjE6UFQtNjpQVDpWSUFOQSBETyBDQVNURUxPCisyMjpQVC03OlBUOlZJTEEgUkVBTAorMjM6UFQtODpQVDpWSVNFVQorMjQ6UFQtMDc6UFQ6Vk9SQQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L1BSVC9QUlRfQURNSU4yX0xFWC50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvUFJUL1BSVF9BRE1JTjJfTEVYLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNjlkZTI5Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L1BSVC9QUlRfQURNSU4yX0xFWC50eHQKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9QUlkvUFJZX0FETUlOMV9MRVgudHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L1BSWS9QUllfQURNSU4xX0xFWC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGZhYjIwZgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9QUlkvUFJZX0FETUlOMV9MRVgudHh0CkBAIC0wLDAgKzEsMTkgQEAKKzE6UFktNjpQWTpBTFRPIFBBUkFHVUFZCisyOlBZLTA6UFk6QUxUTyBQQVJBTkEKKzM6UFktMzpQWTpBTUFNQkFZCis0OlBZLUFTVTpQWTpBU1VOQ0lPTgorNTpQWS0xOTpQWTpCT1FVRVJPTgorNjpQWS01OlBZOkNBQUdVQVoKKzc6UFktQ0FaOlBZOkNBQUdVQVpVCis4OlBZLTE2OlBZOkNBQVpBUEEKKzk6UFktMTQ6UFk6Q0FOSU5ERVlVCisxMDpQWS0xNzpQWTpDRU5UUkFMCisxMTpQWS0xODpQWTpDT05DRVBDSU9OCisxMjpQWS0xMzpQWTpDT1JESUxMRVJBCisxMzpQWS00OlBZOkdVQUlSQQorMTQ6UFktNzpQWTpJVEFQVUEKKzE1OlBZLTg6UFk6TUlTSU9ORVMKKzE2OlBZLTI6UFk6TkVFTUJVQ1UKKzE3OlBZLTk6UFk6UEFSQUdVQVJJCisxODpQWS0xNTpQWTpQUkVTSURFTlRFIEhBWUVTCisxOTpQWS0xMjpQWTpTQU4gUEVEUk8KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9QUlkvUFJZX0FETUlOMl9MRVgudHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L1BSWS9QUllfQURNSU4yX0xFWC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjc1ZWFmMAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9QUlkvUFJZX0FETUlOMl9MRVgudHh0CkBAIC0wLDAgKzEsMjQ5IEBACisxOlBZOlBSWTpQQVJBR1VBWTpVTktOT1dOOlJJTyBBTFRPIFBBUkFOQQorMTpQWTpQUlk6UEFSQUdVQVk6Qk9RVUVST046R3JhbC4gRXVnZW5pbyBBLiBHYXJheQorMjpQWTpQUlk6UEFSQUdVQVk6Qk9RVUVST046TWNhbC4gRXN0aWdhcnJpYmlhCiszOlBZOlBSWTpQQVJBR1VBWTpCT1FVRVJPTjpQZWRybyBQLiBQZW5hCisxOlBZOlBSWTpQQVJBR1VBWTpORUVNQlVDVTpBbGJlcmRpCisyOlBZOlBSWTpQQVJBR1VBWTpORUVNQlVDVTpDZXJyaXRvCiszOlBZOlBSWTpQQVJBR1VBWTpORUVNQlVDVTpEZXNtb2NoYWRvcworNDpQWTpQUlk6UEFSQUdVQVk6TkVFTUJVQ1U6R3JhbC4gSm9zZSBFLiBEaWF6Cis1OlBZOlBSWTpQQVJBR1VBWTpORUVNQlVDVTpHdWF6dWN1YQorNjpQWTpQUlk6UEFSQUdVQVk6TkVFTUJVQ1U6SHVtYWl0YQorNzpQWTpQUlk6UEFSQUdVQVk6TkVFTUJVQ1U6SHVtYWl0YSAoSXMuKQorODpQWTpQUlk6UEFSQUdVQVk6TkVFTUJVQ1U6SXNsYSAoUmlvIFBhcmFuYSkKKzk6UFk6UFJZOlBBUkFHVUFZOk5FRU1CVUNVOklzbGEgVW1idQorMTA6UFk6UFJZOlBBUkFHVUFZOk5FRU1CVUNVOklzbGEgVW1idSAoSXMuKQorMTE6UFk6UFJZOlBBUkFHVUFZOk5FRU1CVUNVOkxhZ3VuYSBWZXJhCisxMjpQWTpQUlk6UEFSQUdVQVk6TkVFTUJVQ1U6TGF1cmVsZXMKKzEzOlBZOlBSWTpQQVJBR1VBWTpORUVNQlVDVTpNYXlvciBNYXJ0aW5legorMTQ6UFk6UFJZOlBBUkFHVUFZOk5FRU1CVUNVOlBhc28gZGUgUGF0cmlhCisxNTpQWTpQUlk6UEFSQUdVQVk6TkVFTUJVQ1U6UGlsYXIKKzE2OlBZOlBSWTpQQVJBR1VBWTpORUVNQlVDVTpQaWxhciAoSXMuKQorMTc6UFk6UFJZOlBBUkFHVUFZOk5FRU1CVUNVOlJpbyBQYXJhbmEKKzE4OlBZOlBSWTpQQVJBR1VBWTpORUVNQlVDVTpTYW4gSnVhbiBCdGEuIGRlbCBOZWVtYnVjCisxOTpQWTpQUlk6UEFSQUdVQVk6TkVFTUJVQ1U6VGFjdWFyYXMKKzIwOlBZOlBSWTpQQVJBR1VBWTpORUVNQlVDVTpUYWN1YXJhcyAoSXMuKQorMjE6UFk6UFJZOlBBUkFHVUFZOk5FRU1CVUNVOlZpbGxhIEZyYW5jYQorMjI6UFk6UFJZOlBBUkFHVUFZOk5FRU1CVUNVOlZpbGxhIE9saXZhCisyMzpQWTpQUlk6UEFSQUdVQVk6TkVFTUJVQ1U6VmlsbGEgT2xpdmEgKElzLikKKzI0OlBZOlBSWTpQQVJBR1VBWTpORUVNQlVDVTpWaWxsYSBSaWNhIChJcy4pCisyNTpQWTpQUlk6UEFSQUdVQVk6TkVFTUJVQ1U6VmlsbGFsdmluCisxOlBZOlBSWTpQQVJBR1VBWTpTQU4gUEVEUk86MjUgZGUgRGljaWVtYnJlCisyOlBZOlBSWTpQQVJBR1VBWTpTQU4gUEVEUk86QW50ZXF1ZXJhCiszOlBZOlBSWTpQQVJBR1VBWTpTQU4gUEVEUk86QW50ZXF1ZXJhIChJcy4pCis0OlBZOlBSWTpQQVJBR1VBWTpTQU4gUEVEUk86Q2hvcmUKKzU6UFk6UFJZOlBBUkFHVUFZOlNBTiBQRURSTzpFbGl6YXJkbyBBcXVpbm8KKzY6UFk6UFJZOlBBUkFHVUFZOlNBTiBQRURSTzpJc2lkb3JvIFJlc3F1aW4KKzc6UFk6UFJZOlBBUkFHVUFZOlNBTiBQRURSTzpJdGFjdXJ1YmkgZGVsIFJvc2FyaW8KKzg6UFk6UFJZOlBBUkFHVUFZOlNBTiBQRURSTzpMaW1hCis5OlBZOlBSWTpQQVJBR1VBWTpTQU4gUEVEUk86TnVldmEgR2VybWFuaWEKKzEwOlBZOlBSWTpQQVJBR1VBWTpTQU4gUEVEUk86UmlvIFBhcmFndWF5CisxMTpQWTpQUlk6UEFSQUdVQVk6U0FOIFBFRFJPOlMuUGVkcm8gWS4gKElzLikKKzEyOlBZOlBSWTpQQVJBR1VBWTpTQU4gUEVEUk86Uy5QZWRybyBkZSBZY3VhbWFuZHl5dQorMTM6UFk6UFJZOlBBUkFHVUFZOlNBTiBQRURSTzpTYW4gRXN0YW5pc2xhbworMTQ6UFk6UFJZOlBBUkFHVUFZOlNBTiBQRURSTzpTYW4gUGFibG8KKzE1OlBZOlBSWTpQQVJBR1VBWTpTQU4gUEVEUk86VGFjdWF0aQorMTY6UFk6UFJZOlBBUkFHVUFZOlNBTiBQRURSTzpVbmlvbgorMTc6UFk6UFJZOlBBUkFHVUFZOlNBTiBQRURSTzpWaWxsYSBkZWwgUi4gKElzLikKKzE4OlBZOlBSWTpQQVJBR1VBWTpTQU4gUEVEUk86VmlsbGEgZGVsIFJvc2FyaW8KKzE5OlBZOlBSWTpQQVJBR1VBWTpTQU4gUEVEUk86WWF0YWl0eSBkZWwgTm9ydGUKKzE6UFk6UFJZOlBBUkFHVUFZOklUQVBVQTpBbHRvIFZlcmEKKzI6UFk6UFJZOlBBUkFHVUFZOklUQVBVQTpCZWxsYSBWaXN0YQorMzpQWTpQUlk6UEFSQUdVQVk6SVRBUFVBOkNhbWJ5cmV0YQorNDpQWTpQUlk6UEFSQUdVQVk6SVRBUFVBOkNhcGl0YW4gTWV6YQorNTpQWTpQUlk6UEFSQUdVQVk6SVRBUFVBOkNhcGl0YW4gTWlyYW5kYQorNjpQWTpQUlk6UEFSQUdVQVk6SVRBUFVBOkNhcmxvcyBBIExvcGV6Cis3OlBZOlBSWTpQQVJBR1VBWTpJVEFQVUE6Q2FybWVuIGRlbCBQYXJhbmEKKzg6UFk6UFJZOlBBUkFHVUFZOklUQVBVQTpDb3JvbmVsIEJvZ2FkbworOTpQWTpQUlk6UEFSQUdVQVk6SVRBUFVBOkVkZWxpcmEKKzEwOlBZOlBSWTpQQVJBR1VBWTpJVEFQVUE6RW5jYXJuYWNpb24KKzExOlBZOlBSWTpQQVJBR1VBWTpJVEFQVUE6RnJhbQorMTI6UFk6UFJZOlBBUkFHVUFZOklUQVBVQTpHcmFsIEFydGlnYXMKKzEzOlBZOlBSWTpQQVJBR1VBWTpJVEFQVUE6R3JhbC4gRGVsZ2FkbworMTQ6UFk6UFJZOlBBUkFHVUFZOklUQVBVQTpIb2hlbmF1CisxNTpQWTpQUlk6UEFSQUdVQVk6SVRBUFVBOklzbGEKKzE2OlBZOlBSWTpQQVJBR1VBWTpJVEFQVUE6SXNsYSBZYWN5cmV0YQorMTc6UFk6UFJZOlBBUkFHVUFZOklUQVBVQTpKZXN1cworMTg6UFk6UFJZOlBBUkFHVUFZOklUQVBVQTpMYSBQYXoKKzE5OlBZOlBSWTpQQVJBR1VBWTpJVEFQVUE6TGVhbmRybyBPdmllZG8KKzIwOlBZOlBSWTpQQVJBR1VBWTpJVEFQVUE6TWF5b3IgT3Rhbm8KKzIxOlBZOlBSWTpQQVJBR1VBWTpJVEFQVUE6TmF0YWxpbworMjI6UFk6UFJZOlBBUkFHVUFZOklUQVBVQTpOdWV2YSBBbGJvcmFkYQorMjM6UFk6UFJZOlBBUkFHVUFZOklUQVBVQTpPYmxpZ2FkbworMjQ6UFk6UFJZOlBBUkFHVUFZOklUQVBVQTpQaXJhcG8KKzI1OlBZOlBSWTpQQVJBR1VBWTpJVEFQVUE6U2FuIENvc21lIFkgRGFtaWFuCisyNjpQWTpQUlk6UEFSQUdVQVk6SVRBUFVBOlNhbiBKdWFuCisyNzpQWTpQUlk6UEFSQUdVQVk6SVRBUFVBOlNhbiBQZWRybyBkZWwgUGFyYW5hCisyODpQWTpQUlk6UEFSQUdVQVk6SVRBUFVBOlNhbiBSYWZhZWwgZGVsIFBhcmFuYQorMjk6UFk6UFJZOlBBUkFHVUFZOklUQVBVQTpUb21hcyBSb21lcm8gUC4KKzMwOlBZOlBSWTpQQVJBR1VBWTpJVEFQVUE6VHJpbmlkYWQKKzMxOlBZOlBSWTpQQVJBR1VBWTpJVEFQVUE6WWF0eXRheQorMTpQWTpQUlk6UEFSQUdVQVk6R1VBSVJBOkJvcmphCisyOlBZOlBSWTpQQVJBR1VBWTpHVUFJUkE6Q2FwaXRhbiBUcm9jaGUKKzM6UFk6UFJZOlBBUkFHVUFZOkdVQUlSQTpDbmVsIE1hcnRpbmV6Cis0OlBZOlBSWTpQQVJBR1VBWTpHVUFJUkE6Q25lbC4gTWFydGluZXoKKzU6UFk6UFJZOlBBUkFHVUFZOkdVQUlSQTpDb2xvbmlhIEluZGVwZW5kZW5jaWEKKzY6UFk6UFJZOlBBUkFHVUFZOkdVQUlSQTpEci4gQm90dHJlbGwKKzc6UFk6UFJZOlBBUkFHVUFZOkdVQUlSQTpHcmFsIEdhcmF5Cis4OlBZOlBSWTpQQVJBR1VBWTpHVUFJUkE6SXRhcGUKKzk6UFk6UFJZOlBBUkFHVUFZOkdVQUlSQTpJdHVyYmUKKzEwOlBZOlBSWTpQQVJBR1VBWTpHVUFJUkE6Sm9zZSBGYXNzYXJkaQorMTE6UFk6UFJZOlBBUkFHVUFZOkdVQUlSQTpNYm9jYXlhdGkKKzEyOlBZOlBSWTpQQVJBR1VBWTpHVUFJUkE6TmF0YWxpY2lvIFRhbGF2ZXJhCisxMzpQWTpQUlk6UEFSQUdVQVk6R1VBSVJBOk51bWkKKzE0OlBZOlBSWTpQQVJBR1VBWTpHVUFJUkE6U2FuIFNhbHZhZG9yCisxNTpQWTpQUlk6UEFSQUdVQVk6R1VBSVJBOlZpbGxhcmljYQorMTY6UFk6UFJZOlBBUkFHVUFZOkdVQUlSQTpZYXRhaXR5CisxOlBZOlBSWTpQQVJBR1VBWTpDT05DRVBDSU9OOkJlbGVuCisyOlBZOlBSWTpQQVJBR1VBWTpDT05DRVBDSU9OOkNvbmNlcGNpb24KKzM6UFk6UFJZOlBBUkFHVUFZOkNPTkNFUENJT046SG9ycXVldGEKKzQ6UFk6UFJZOlBBUkFHVUFZOkNPTkNFUENJT046TG9yZXRvCis1OlBZOlBSWTpQQVJBR1VBWTpDT05DRVBDSU9OOlNhbiBDYXJsb3MKKzY6UFk6UFJZOlBBUkFHVUFZOkNPTkNFUENJT046U2FuIExhemFybworNzpQWTpQUlk6UEFSQUdVQVk6Q09OQ0VQQ0lPTjpZYnkgWWF1CisxOlBZOlBSWTpQQVJBR1VBWTpDRU5UUkFMOkFyZWd1YQorMjpQWTpQUlk6UEFSQUdVQVk6Q0VOVFJBTDpBc3VuY2lvbgorMzpQWTpQUlk6UEFSQUdVQVk6Q0VOVFJBTDpBc3VuY2lvbiAoSXMuKQorNDpQWTpQUlk6UEFSQUdVQVk6Q0VOVFJBTDpDYXBpYXRhCis1OlBZOlBSWTpQQVJBR1VBWTpDRU5UUkFMOkZkby4gZGUgTGEgTW9yYQorNjpQWTpQUlk6UEFSQUdVQVk6Q0VOVFJBTDpHdWFyYW1iYXJlCis3OlBZOlBSWTpQQVJBR1VBWTpDRU5UUkFMOkl0YQorODpQWTpQUlk6UEFSQUdVQVk6Q0VOVFJBTDpJdGF1Z3VhCis5OlBZOlBSWTpQQVJBR1VBWTpDRU5UUkFMOkouIEEuIFNhbGRpdmFyCisxMDpQWTpQUlk6UEFSQUdVQVk6Q0VOVFJBTDpMYWdvCisxMTpQWTpQUlk6UEFSQUdVQVk6Q0VOVFJBTDpMYWdvIFlwYWNhcmFpCisxMjpQWTpQUlk6UEFSQUdVQVk6Q0VOVFJBTDpMYW1iYXJlCisxMzpQWTpQUlk6UEFSQUdVQVk6Q0VOVFJBTDpMaW1waW8KKzE0OlBZOlBSWTpQQVJBR1VBWTpDRU5UUkFMOkxpbXBpbyAoSXMuKQorMTU6UFk6UFJZOlBBUkFHVUFZOkNFTlRSQUw6THVxdWUKKzE2OlBZOlBSWTpQQVJBR1VBWTpDRU5UUkFMOk0uIFJvcXVlIEFsb25zbworMTc6UFk6UFJZOlBBUkFHVUFZOkNFTlRSQUw6TS5Sb3F1ZSBBbG9uc28gKElzLikKKzE4OlBZOlBSWTpQQVJBR1VBWTpDRU5UUkFMOk5lbWJ5CisxOTpQWTpQUlk6UEFSQUdVQVk6Q0VOVFJBTDpOdWV2YSBJdGFsaWEKKzIwOlBZOlBSWTpQQVJBR1VBWTpDRU5UUkFMOlJpbyBQYXJhZ3VheQorMjE6UFk6UFJZOlBBUkFHVUFZOkNFTlRSQUw6U2FuIEFudG9uaW8KKzIyOlBZOlBSWTpQQVJBR1VBWTpDRU5UUkFMOlNhbiBMb3JlbnpvCisyMzpQWTpQUlk6UEFSQUdVQVk6Q0VOVFJBTDpWaWxsYSBFbGlzYQorMjQ6UFk6UFJZOlBBUkFHVUFZOkNFTlRSQUw6VmlsbGV0YQorMjU6UFk6UFJZOlBBUkFHVUFZOkNFTlRSQUw6WXBhY2FyYWkKKzI2OlBZOlBSWTpQQVJBR1VBWTpDRU5UUkFMOllwYW5lCisxOlBZOlBSWTpQQVJBR1VBWTpQQVJBR1VBUkk6QWNhaGF5CisyOlBZOlBSWTpQQVJBR1VBWTpQQVJBR1VBUkk6Q2FhcHVjdQorMzpQWTpQUlk6UEFSQUdVQVk6UEFSQUdVQVJJOkNhYmFsbGVybworNDpQWTpQUlk6UEFSQUdVQVk6UEFSQUdVQVJJOkNhcmFwZWd1YQorNTpQWTpQUlk6UEFSQUdVQVk6UEFSQUdVQVJJOkVzY29iYXIKKzY6UFk6UFJZOlBBUkFHVUFZOlBBUkFHVUFSSTpMYSBDb2xtZW5hCis3OlBZOlBSWTpQQVJBR1VBWTpQQVJBR1VBUkk6TGFnLlBhcmFuYSBtaQorODpQWTpQUlk6UEFSQUdVQVk6UEFSQUdVQVJJOkxhZ28gWXBvYQorOTpQWTpQUlk6UEFSQUdVQVk6UEFSQUdVQVJJOk1idXlhcGV5CisxMDpQWTpQUlk6UEFSQUdVQVk6UEFSQUdVQVJJOlBhcmFndWFyaQorMTE6UFk6UFJZOlBBUkFHVUFZOlBBUkFHVUFSSTpQaXJheXUKKzEyOlBZOlBSWTpQQVJBR1VBWTpQQVJBR1VBUkk6UXVpaW5keQorMTM6UFk6UFJZOlBBUkFHVUFZOlBBUkFHVUFSSTpRdXlxdXlobworMTQ6UFk6UFJZOlBBUkFHVUFZOlBBUkFHVUFSSTpTYW4gUm9xdWUgR29uemFsZXoKKzE1OlBZOlBSWTpQQVJBR1VBWTpQQVJBR1VBUkk6U2FwdWNhaQorMTY6UFk6UFJZOlBBUkFHVUFZOlBBUkFHVUFSSTpUZWJpY3VhcnltaQorMTc6UFk6UFJZOlBBUkFHVUFZOlBBUkFHVUFSSTpZYWd1YXJvbgorMTg6UFk6UFJZOlBBUkFHVUFZOlBBUkFHVUFSSTpZYnljdWkKKzE5OlBZOlBSWTpQQVJBR1VBWTpQQVJBR1VBUkk6WWJ5dHltaQorMTpQWTpQUlk6UEFSQUdVQVk6Q0FBR1VBWlU6MyBkZSBGZWJyZXJvCisyOlBZOlBSWTpQQVJBR1VBWTpDQUFHVUFaVTpDYWFndWF6dQorMzpQWTpQUlk6UEFSQUdVQVk6Q0FBR1VBWlU6Q2FyYXlhbworNDpQWTpQUlk6UEFSQUdVQVk6Q0FBR1VBWlU6Q2VjaWxpbyBCYWV6Cis1OlBZOlBSWTpQQVJBR1VBWTpDQUFHVUFaVTpDb3JvbmVsIE92aWVkbworNjpQWTpQUlk6UEFSQUdVQVk6Q0FBR1VBWlU6Si5FLiBFc3RpZ2FycmliaWEKKzc6UFk6UFJZOlBBUkFHVUFZOkNBQUdVQVpVOkpvc2UgRC4gT2NhbXBvcworODpQWTpQUlk6UEFSQUdVQVk6Q0FBR1VBWlU6SnVhbiBNLiBGcnV0b3MKKzk6UFk6UFJZOlBBUkFHVUFZOkNBQUdVQVpVOkxhIFBhc3RvcmEKKzEwOlBZOlBSWTpQQVJBR1VBWTpDQUFHVUFaVTpNY2FsLiBGY28uIFNvbGFubyBMb3BlegorMTE6UFk6UFJZOlBBUkFHVUFZOkNBQUdVQVpVOk51ZXZhIExvbmRyZXMKKzEyOlBZOlBSWTpQQVJBR1VBWTpDQUFHVUFaVTpSLkkuIDMgQ29ycmFsZXMKKzEzOlBZOlBSWTpQQVJBR1VBWTpDQUFHVUFaVTpSYXVsICBBLiBPdmllZG8KKzE0OlBZOlBSWTpQQVJBR1VBWTpDQUFHVUFaVTpSZXBhdHJpYWNpb24KKzE1OlBZOlBSWTpQQVJBR1VBWTpDQUFHVUFaVTpSaW8gWWd1YXp1CisxNjpQWTpQUlk6UEFSQUdVQVk6Q0FBR1VBWlU6U2FuIEpvYXF1aW4KKzE3OlBZOlBSWTpQQVJBR1VBWTpDQUFHVUFaVTpTYW4gSm9zZSBkZSBsb3MgQXJyb3lvcworMTg6UFk6UFJZOlBBUkFHVUFZOkNBQUdVQVpVOlNhbnRhIFJvc2EgZGVsIE1idXR1eQorMTk6UFk6UFJZOlBBUkFHVUFZOkNBQUdVQVpVOlNpbW9uIEJvbGl2YXIKKzIwOlBZOlBSWTpQQVJBR1VBWTpDQUFHVUFaVTpZaHUKKzE6UFk6UFJZOlBBUkFHVUFZOlBSRVNJREVOVEUgSEFZRVM6QmVuamFtaW4gQWNldmFsCisyOlBZOlBSWTpQQVJBR1VBWTpQUkVTSURFTlRFIEhBWUVTOlBvem8gQ29sb3JhZG8KKzM6UFk6UFJZOlBBUkFHVUFZOlBSRVNJREVOVEUgSEFZRVM6UHVlcnRvIFBpbmFzY28KKzQ6UFk6UFJZOlBBUkFHVUFZOlBSRVNJREVOVEUgSEFZRVM6VmlsbGEgSGF5ZXMKKzE6UFk6UFJZOlBBUkFHVUFZOkNBQVpBUEE6QWJhaQorMjpQWTpQUlk6UEFSQUdVQVk6Q0FBWkFQQTpCdWVuYSBWaXN0YQorMzpQWTpQUlk6UEFSQUdVQVk6Q0FBWkFQQTpDYWF6YXBhCis0OlBZOlBSWTpQQVJBR1VBWTpDQUFaQVBBOkRyLiBNb2lzZXMgQmVydG9uaQorNTpQWTpQUlk6UEFSQUdVQVk6Q0FBWkFQQTpGdWxnZW5jaW8gWWVncm9zCis2OlBZOlBSWTpQQVJBR1VBWTpDQUFaQVBBOkdyYWwuIEhpZ2luaW8gTW9yaW5pZ28KKzc6UFk6UFJZOlBBUkFHVUFZOkNBQVpBUEE6TWFjaWVsCis4OlBZOlBSWTpQQVJBR1VBWTpDQUFaQVBBOlNhbiBKdWFuIE5lcG9tdWNlbm8KKzk6UFk6UFJZOlBBUkFHVUFZOkNBQVpBUEE6VGF2YWkKKzEwOlBZOlBSWTpQQVJBR1VBWTpDQUFaQVBBOll1dHkKKzE6UFk6UFJZOlBBUkFHVUFZOkFMVE8gUEFSQU5BOkNpdWRhZCAgZGVsIEVzdGUKKzI6UFk6UFJZOlBBUkFHVUFZOkFMVE8gUEFSQU5BOkQuIE0uIElyYWxhCiszOlBZOlBSWTpQQVJBR1VBWTpBTFRPIFBBUkFOQTpIZXJuYW5kYXJpYXMKKzQ6UFk6UFJZOlBBUkFHVUFZOkFMVE8gUEFSQU5BOkl0YWt5cnkKKzU6UFk6UFJZOlBBUkFHVUFZOkFMVE8gUEFSQU5BOkouRS4gT2xlYXJ5Cis2OlBZOlBSWTpQQVJBR1VBWTpBTFRPIFBBUkFOQTpMb3MgQ2VkcmFsZXMKKzc6UFk6UFJZOlBBUkFHVUFZOkFMVE8gUEFSQU5BOk1hbGxvcnF1aW4KKzg6UFk6UFJZOlBBUkFHVUFZOkFMVE8gUEFSQU5BOk1iYXJhY2F5dQorOTpQWTpQUlk6UEFSQUdVQVk6QUxUTyBQQVJBTkE6TWluZ2EgR3VhenUKKzEwOlBZOlBSWTpQQVJBR1VBWTpBTFRPIFBBUkFOQTpNaW5nYSBQb3JhCisxMTpQWTpQUlk6UEFSQUdVQVk6QUxUTyBQQVJBTkE6TmFjdW5kYXkKKzEyOlBZOlBSWTpQQVJBR1VBWTpBTFRPIFBBUkFOQTpOYXJhbmphbAorMTM6UFk6UFJZOlBBUkFHVUFZOkFMVE8gUEFSQU5BOlB0ZS4gRnJhbmNvCisxNDpQWTpQUlk6UEFSQUdVQVk6QUxUTyBQQVJBTkE6UmlvIFlndWF6dQorMTU6UFk6UFJZOlBBUkFHVUFZOkFMVE8gUEFSQU5BOlNhbiBBbGJlcnRvCisxNjpQWTpQUlk6UEFSQUdVQVk6QUxUTyBQQVJBTkE6U2FuIENyaXN0b2JhbAorMTc6UFk6UFJZOlBBUkFHVUFZOkFMVE8gUEFSQU5BOlNhbnRhIFJpdGEKKzE4OlBZOlBSWTpQQVJBR1VBWTpBTFRPIFBBUkFOQTpTYW50YSBSb3NhCisxOTpQWTpQUlk6UEFSQUdVQVk6QUxUTyBQQVJBTkE6WWd1YXp1CisyMDpQWTpQUlk6UEFSQUdVQVk6QUxUTyBQQVJBTkE6WWd1YXp1IChMYWdvKQorMTpQWTpQUlk6UEFSQUdVQVk6QU1BTUJBWTpCZWxsYSBWaXN0YQorMjpQWTpQUlk6UEFSQUdVQVk6QU1BTUJBWTpDYXBpdGFuIEJhZG8KKzM6UFk6UFJZOlBBUkFHVUFZOkFNQU1CQVk6UGVkcm8gSnVhbiBDYWJhbGxlcm8KKzE6UFk6UFJZOlBBUkFHVUFZOkFMVE8gUEFSQUdVQVk6RnVlcnRlIE9MaW1wbworMjpQWTpQUlk6UEFSQUdVQVk6QUxUTyBQQVJBR1VBWTpMYSBWaWN0b3JpYQorMzpQWTpQUlk6UEFSQUdVQVk6QUxUTyBQQVJBR1VBWTpNYXlvciBQYWJsbyBMYSBHZXJlbnphCisxOlBZOlBSWTpQQVJBR1VBWTpDT1JESUxMRVJBOjEgZGUgTWFyem8KKzI6UFk6UFJZOlBBUkFHVUFZOkNPUkRJTExFUkE6QWx0b3MKKzM6UFk6UFJZOlBBUkFHVUFZOkNPUkRJTExFUkE6QXJyb3lvcyB5IEVzdC4oSXMuKQorNDpQWTpQUlk6UEFSQUdVQVk6Q09SRElMTEVSQTpBcnJveW9zIHkgRXN0ZXJvcworNTpQWTpQUlk6UEFSQUdVQVk6Q09SRElMTEVSQTpBdHlyYQorNjpQWTpQUlk6UEFSQUdVQVk6Q09SRElMTEVSQTpDYWFjdXBlCis3OlBZOlBSWTpQQVJBR1VBWTpDT1JESUxMRVJBOkNhcmFndWF0YXkKKzg6UFk6UFJZOlBBUkFHVUFZOkNPUkRJTExFUkE6RW1ib3NjYWRhCis5OlBZOlBSWTpQQVJBR1VBWTpDT1JESUxMRVJBOkVtYm9zY2FkYSAoSXMuKQorMTA6UFk6UFJZOlBBUkFHVUFZOkNPUkRJTExFUkE6RXVzZWJpbyBBeWFsYQorMTE6UFk6UFJZOlBBUkFHVUFZOkNPUkRJTExFUkE6SXNsYSBQdWN1CisxMjpQWTpQUlk6UEFSQUdVQVk6Q09SRElMTEVSQTpJdGFjdXJ1YmkgZGUgbGEgQ29yZGlsbGVyCisxMzpQWTpQUlk6UEFSQUdVQVk6Q09SRElMTEVSQTpKdWFuIGRlIE1lbmEKKzE0OlBZOlBSWTpQQVJBR1VBWTpDT1JESUxMRVJBOkxvbWEgR3JhbmRlCisxNTpQWTpQUlk6UEFSQUdVQVk6Q09SRElMTEVSQTpNYmFjYXlhdHkgZGVsIFloYWd1eQorMTY6UFk6UFJZOlBBUkFHVUFZOkNPUkRJTExFUkE6TnVldmEgQ29sb21iaWEKKzE3OlBZOlBSWTpQQVJBR1VBWTpDT1JESUxMRVJBOlBpcmliZWJ1eQorMTg6UFk6UFJZOlBBUkFHVUFZOkNPUkRJTExFUkE6UmlvIFBhcmFndWF5CisxOTpQWTpQUlk6UEFSQUdVQVk6Q09SRElMTEVSQTpTYW4gQmVybmFyZGlubworMjA6UFk6UFJZOlBBUkFHVUFZOkNPUkRJTExFUkE6U2FuIEpvc2UgT2JyZXJvCisyMTpQWTpQUlk6UEFSQUdVQVk6Q09SRElMTEVSQTpTYW50YSBFbGVuYQorMjI6UFk6UFJZOlBBUkFHVUFZOkNPUkRJTExFUkE6VG9iYXRpCisyMzpQWTpQUlk6UEFSQUdVQVk6Q09SRElMTEVSQTpWYWxlbnp1ZWxhCisxOlBZOlBSWTpQQVJBR1VBWTpDQU5JTkRFWVU6Q29ycHVzIENocmlzdGkKKzI6UFk6UFJZOlBBUkFHVUFZOkNBTklOREVZVTpDdXJ1Z3VhdHkKKzM6UFk6UFJZOlBBUkFHVUFZOkNBTklOREVZVTpGLiBDYWJhbGxlcm8gQWx2YXJlegorNDpQWTpQUlk6UEFSQUdVQVk6Q0FOSU5ERVlVOkl0YW5hcmEKKzU6UFk6UFJZOlBBUkFHVUFZOkNBTklOREVZVTpTYWx0byBkZWwgR3VhaXJhCis2OlBZOlBSWTpQQVJBR1VBWTpDQU5JTkRFWVU6VmlsbGEgSWdhdGltaQorNzpQWTpQUlk6UEFSQUdVQVk6Q0FOSU5ERVlVOllwZWpodQorMTpQWTpQUlk6UEFSQUdVQVk6TUlTSU9ORVM6QXlvbGFzCisyOlBZOlBSWTpQQVJBR1VBWTpNSVNJT05FUzpBeW9sYXMgKElzLikKKzM6UFk6UFJZOlBBUkFHVUFZOk1JU0lPTkVTOklzbGEgQXBpcGUKKzQ6UFk6UFJZOlBBUkFHVUFZOk1JU0lPTkVTOlNhbiBJZ25hY2lvCis1OlBZOlBSWTpQQVJBR1VBWTpNSVNJT05FUzpTYW4gSnVhbiBCYXV0aXN0YQorNjpQWTpQUlk6UEFSQUdVQVk6TUlTSU9ORVM6U2FuIE1pZ3VlbAorNzpQWTpQUlk6UEFSQUdVQVk6TUlTSU9ORVM6U2FuIFBhdHJpY2lvCis4OlBZOlBSWTpQQVJBR1VBWTpNSVNJT05FUzpTYW50YSBNYXJpYQorOTpQWTpQUlk6UEFSQUdVQVk6TUlTSU9ORVM6U2FudGEgUm9zYQorMTA6UFk6UFJZOlBBUkFHVUFZOk1JU0lPTkVTOlNhbnRpYWdvCisxMTpQWTpQUlk6UEFSQUdVQVk6TUlTSU9ORVM6VmlsbGEgRmxvcmlkYQorMTI6UFk6UFJZOlBBUkFHVUFZOk1JU0lPTkVTOllhYmVieXJ5CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvUUFUL1FBVF9BRE1JTjFfTEVYLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9RQVQvUUFUX0FETUlOMV9MRVgudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQyZTVkMTcKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvUUFUL1FBVF9BRE1JTjFfTEVYLnR4dApAQCAtMCwwICsxLDEwIEBACisxOlFBLURBOlFBOkFEIERBV0FICisyOlFBLUdIOlFBOkFMIEdIVVdBWVJJWUFICiszOlFBLUpVOlFBOkFMIEpVTUFZTElZQUgKKzQ6UUEtS0g6UUE6QUwgS0hBV1IKKzU6UUEtV0E6UUE6QUwgV0FLUkFICis2OlFBLVJBOlFBOkFSIFJBWVlBTgorNzpRQS1KQjpRQTpKQVJJWUFOIEFMIEJBTkFICis4OlFBLU1TOlFBOk1BRE5BVCBBU0ggU0hBTUwKKzk6UUEtUTpRQTpRQVRBUgorMTA6UUEtVVM6UUE6VU1NIEFMTApkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L1FBVC9RQVRfQURNSU4yX0xFWC50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvUUFUL1FBVF9BRE1JTjJfTEVYLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mOGQ1Zjk4Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L1FBVC9RQVRfQURNSU4yX0xFWC50eHQKQEAgLTAsMCArMSwxNSBAQAorMTpRQTpRQVQ6UUFUQVI6UWF0YXI6UUFULkwyLjEKKzI6UUE6UUFUOlFBVEFSOlFhdGFyOlFBVC5MMi4xMAorMzpRQTpRQVQ6UUFUQVI6UWF0YXI6UUFULkwyLjExCis0OlFBOlFBVDpRQVRBUjpRYXRhcjpRQVQuTDIuMTIKKzU6UUE6UUFUOlFBVEFSOlFhdGFyOlFBVC5MMi4xMworNjpRQTpRQVQ6UUFUQVI6UWF0YXI6UUFULkwyLjE0Cis3OlFBOlFBVDpRQVRBUjpRYXRhcjpRQVQuTDIuMTUKKzg6UUE6UUFUOlFBVEFSOlFhdGFyOlFBVC5MMi4yCis5OlFBOlFBVDpRQVRBUjpRYXRhcjpRQVQuTDIuMworMTA6UUE6UUFUOlFBVEFSOlFhdGFyOlFBVC5MMi40CisxMTpRQTpRQVQ6UUFUQVI6UWF0YXI6UUFULkwyLjUKKzEyOlFBOlFBVDpRQVRBUjpRYXRhcjpRQVQuTDIuNgorMTM6UUE6UUFUOlFBVEFSOlFhdGFyOlFBVC5MMi43CisxNDpRQTpRQVQ6UUFUQVI6UWF0YXI6UUFULkwyLjgKKzE1OlFBOlFBVDpRQVRBUjpRYXRhcjpRQVQuTDIuOQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L1JPVS9ST1VfQURNSU4xX0xFWC50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvUk9VL1JPVV9BRE1JTjFfTEVYLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNmVkNzIxCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L1JPVS9ST1VfQURNSU4xX0xFWC50eHQKQEAgLTAsMCArMSw0MyBAQAorMTpSTy1BQjpSTzpBTEJBCisyOlJPLUFSOlJPOkFSQUQKKzM6Uk8tQUc6Uk86QVJHRVMKKzQ6Uk8tQkM6Uk86QkFDQVUKKzU6Uk8tQkg6Uk86QklIT1IKKzY6Uk8tQk46Uk86QklTVFJJVEEgTkFTQVVECis3OlJPLUJUOlJPOkJPVE9TQU5JCis4OlJPLUJSOlJPOkJSQUlMQQorOTpSTy1CVjpSTzpCUkFTT1YKKzEwOlJPLUI6Uk86QlVDVVJFU1RJCisxMTpSTy1CWjpSTzpCVVpBVQorMTI6Uk8tQ0E6Uk86Q0FMQVJBU0kKKzEzOlJPLUNTOlJPOkNBUkFTIFNFVkVSSU4KKzE0OlJPLUNMOlJPOkNMUkFJCisxNTpSTy1DSjpSTzpDTFVKCisxNjpSTy1DVDpSTzpDT05TVEFOVEEKKzE3OlJPLUNWOlJPOkNPVkFTTkEKKzE4OlJPLURCOlJPOkRJTUJPVklUQQorMTk6Uk8tREo6Uk86RE9MSgorMjA6Uk8tR0w6Uk86R0FMQVRJCisyMTpSTy1HUjpSTzpHSVVSR0lVCisyMjpSTy1HSjpSTzpHT1JKCisyMzpSTy1IUjpSTzpIQVJHSElUQQorMjQ6Uk8tSEQ6Uk86SFVORURPQVJBCisyNTpSTy1JTDpSTzpJQUxPTUlUQQorMjY6Uk8tSVM6Uk86SUFTSQorMjc6Uk8tSUY6Uk86SUxGT1YKKzI4OlJPLU1NOlJPOk1BUkFNVVJFUworMjk6Uk8tTUg6Uk86TUVIRURJTlRJCiszMDpSTy1NUzpSTzpNVVJFUworMzE6Uk8tTlQ6Uk86TkVBTVQKKzMyOlJPLU9UOlJPOk9MVAorMzM6Uk8tUEg6Uk86UFJBSE9WQQorMzQ6Uk8tU0o6Uk86U0FMQUoKKzM1OlJPLVNNOlJPOlNBVFUgTUFSRQorMzY6Uk8tU0I6Uk86U0lCSVUKKzM3OlJPLVNWOlJPOlNVQ0VBVkEKKzM4OlJPLVRSOlJPOlRFTEVPUk1BTgorMzk6Uk8tVE06Uk86VElNSVMKKzQwOlJPLVRMOlJPOlRVTENFQQorNDE6Uk8tVlM6Uk86VkFTTFVJCis0MjpSTy1WTDpSTzpWSUxDRUEKKzQzOlJPLVZOOlJPOlZSQU5DRUEKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9ST1UvUk9VX0FETUlOMl9MRVgudHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L1JPVS9ST1VfQURNSU4yX0xFWC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTY5ZGUyOQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9ST1UvUk9VX0FETUlOMl9MRVgudHh0CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvUlVTL1JVU19BRE1JTjFfTEVYLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9SVVMvUlVTX0FETUlOMV9MRVgudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU5ZTNiMDAKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvUlVTL1JVU19BRE1JTjFfTEVYLnR4dApAQCAtMCwwICsxLDg5IEBACisxOlJVLUFEOlJVOkFEWUdFWUEsIFJFU1BVQkxJS0EKKzI6UlUtQUdCOlJVOkFHSU5TS0lZIEJVUllBVFNLSVkgQVZUT05PTU5ZWSBPS1JVRworMzpSVS1BTDpSVTpBTFRBWSwgUkVTUFVCTElLQQorNDpSVS1BTFQ6UlU6QUxUQVlTS0lZIEtSQVkKKzU6UlUtQU1VOlJVOkFNVVJTS0FZQSBPQkxBU1QKKzY6UlUtQVJLOlJVOkFSS0hBTkdFTFNLQVlBIE9CTEFTVAorNzpSVS1BU1Q6UlU6QVNUUkFLSEFOU0tBWUEgT0JMQVNUCis4OlJVLUJBOlJVOkJBU0hLT1JUT1NUQU4sIFJFU1BVQkxJS0EKKzk6UlUtQkVMOlJVOkJFTEdPUk9EU0tBWUEgT0JMQVNUCisxMDpSVS1CUlk6UlU6QlJZQU5TS0FZQSBPQkxBU1QKKzExOlJVLUJVOlJVOkJVUllBVElZQSwgUkVTUFVCTElLQQorMTI6UlUtQ0U6UlU6Q0hFQ0hFTlNLQVlBIFJFU1BVQkxJS0EKKzEzOlJVLUNIRTpSVTpDSEVMWUFCSU5TS0FZQSBPQkxBU1QKKzE0OlJVLUNISTpSVTpDSElUSU5TS0FZQSBPQkxBU1QKKzE1OlJVLUNIVTpSVTpDSFVLT1RTS0lZIEFWVE9OT01OWVkgT0tSVUcKKzE2OlJVLUNVOlJVOkNIVVZBU0hTS0FZQSBSRVNQVUJMSUtBCisxNzpSVS1EQTpSVTpEQUdFU1RBTiwgUkVTUFVCTElLQQorMTg6UlUtRVZFOlJVOkVWRU5LSVlTS0lZIEFWVE9OT01OWVkgT0tSVUcKKzE5OlJVLUlOOlJVOklOR1VTSFNLQVlBIFJFU1BVQkxJS0EgW1JFU1BVQkxJS0EgSU5HVVNIRVRJWUFdCisyMDpSVS1JUks6UlU6SVJLVVRTS0FZQSBPQkxBU1QKKzIxOlJVLUlWQTpSVTpJVkFOT1ZTS0FZQSBPQkxBU1QKKzIyOlJVLUtCOlJVOktBQkFSRElOTyBCQUxLQVJTS0FZQSBSRVNQVUJMSUtBCisyMzpSVS1LR0Q6UlU6S0FMSU5JTkdSQUQgT0JMLgorMjQ6UlUtS0w6UlU6S0FMTVlLSVlBLCBSRVNQVUJMSUtBCisyNTpSVS1LTFU6UlU6S0FMVVpIU0tBWUEgT0JMQVNUCisyNjpSVS1LQU06UlU6S0FNQ0hBVFNLQVlBIE9CTEFTVAorMjc6UlUtS0M6UlU6S0FSQUNIQVlFVk8gQ0hFUktFU1NLQVlBIFJFU1BVQkxJS0EKKzI4OlJVLUtSOlJVOktBUkVMSVlBLCBSRVNQVUJMSUtBCisyOTpSVS1LRU06UlU6S0VNRVJPVlNLQVlBIE9CTEFTVAorMzA6UlUtS0hBOlJVOktIQUJBUk9WU0tJWSBLUkFZCiszMTpSVS1LSzpSVTpLSEFLQVNJWUEsIFJFU1BVQkxJS0EKKzMyOlJVLUtITTpSVTpLSEFOVFkgTUFOU0lZU0tJWSBBVlRPTk9NTllZIE9LUlVHIFtZVUdSQV0KKzMzOlJVLUtJUjpSVTpLSVJPVlNLQVlBIE9CTEFTVAorMzQ6UlUtS09QOlJVOktPTUkgUEVSTVlBVFNLSVkgQVZUT05PTU5ZWSBPS1JVRworMzU6UlUtS086UlU6S09NSSwgUkVTUFVCTElLQQorMzY6UlUtS09SOlJVOktPUllBS1NLSVkgQVZUT05PTU5ZWSBPS1JVRworMzc6UlUtS09TOlJVOktPU1RST01TS0FZQSBPQkxBU1QKKzM4OlJVLUtEQTpSVTpLUkFTTk9EQVJTS0lZIEtSQVkKKzM5OlJVLUtZQTpSVTpLUkFTTk9ZQVJTS0lZIEtSQVkKKzQwOlJVLUtHTjpSVTpLVVJHQU5TS0FZQSBPQkxBU1QKKzQxOlJVLUtSUzpSVTpLVVJTS0FZQSBPQkxBU1QKKzQyOlJVLUxFTjpSVTpMRU5JTkdSQURTS0FZQSBPQkxBU1QKKzQzOlJVLUxJUDpSVTpMSVBFVFNLQVlBIE9CTEFTVAorNDQ6UlUtTUFHOlJVOk1BR0FEQU5TS0FZQSBPQkxBU1QKKzQ1OlJVLU1FOlJVOk1BUklZIEVMLCBSRVNQVUJMSUtBCis0NjpSVS1NTzpSVTpNT1JET1ZJWUEsIFJFU1BVQkxJS0EKKzQ3OlJVLU1PUzpSVTpNT1NLT1ZTS0FZQSBPQkxBU1QKKzQ4OlJVLU1PVzpSVTpNT1NLVkEKKzQ5OlJVLU1VUjpSVTpNVVJNQU5TS0FZQSBPQkxBU1QKKzUwOlJVLU5FTjpSVTpORU5FVFNLSVkgQVZUT05PTU5ZWSBPS1JVRworNTE6UlUtTklaOlJVOk5JWkhFR09ST0RTS0FZQSBPQkxBU1QKKzUyOlJVLU5HUjpSVTpOT1ZHT1JPRFNLQVlBIE9CTEFTVAorNTM6UlUtTlZTOlJVOk5PVk9TSUJJUlNLQVlBIE9CTEFTVAorNTQ6UlUtT01TOlJVOk9NU0tBWUEgT0JMQVNUCis1NTpSVS1PUkU6UlU6T1JFTkJVUkdTS0FZQSBPQkxBU1QKKzU2OlJVLU9STDpSVTpPUkxPVlNLQVlBIE9CTEFTVAorNTc6UlUtUE5aOlJVOlBFTlpFTlNLQVlBIE9CTEFTVAorNTg6UlUtUEVSOlJVOlBFUk1TS0FZQSBPQkxBU1QKKzU5OlJVLVBSSTpSVTpQUklNT1JTS0lZIEtSQVkKKzYwOlJVLVBTSzpSVTpQU0tPVlNLQVlBIE9CTEFTVAorNjE6UlUtUk9TOlJVOlJPU1RPVlNLQVlBIE9CTEFTVAorNjI6UlUtUllBOlJVOlJZQVpBTlNLQVlBIE9CTEFTVAorNjM6UlUtU0E6UlU6U0FLSEEsIFJFU1BVQkxJS0EgW1lBS1VUSVlBXQorNjQ6UlUtU0FLOlJVOlNBS0hBTElOU0tBWUEgT0JMQVNUCis2NTpSVS1TQU06UlU6U0FNQVJTS0FZQSBPQkxBU1QKKzY2OlJVLVNQRTpSVTpTQU5LVCBQRVRFUkJVUkcKKzY3OlJVLVNBUjpSVTpTQVJBVE9WU0tBWUEgT0JMQVNUCis2ODpSVS1TRTpSVTpTRVZFUk5BWUEgT1NFVElZQSwgUkVTUFVCTElLQSBbQUxBTklZQV0gW1JFU1BVQkxJS0EgU0VWRVJOQVlBIE9TRVRJWUEgQUxBTklZQV0KKzY5OlJVLVNNTzpSVTpTTU9MRU5TS0FZQSBPQkxBU1QKKzcwOlJVLVNUQTpSVTpTVEFWUk9QT0xTS0lZIEtSQVkKKzcxOlJVLVNWRTpSVTpTVkVSRExPVlNLQVlBIE9CTEFTVAorNzI6UlUtVEFNOlJVOlRBTUJPVlNLQVlBIE9CTEFTVAorNzM6UlUtVEE6UlU6VEFUQVJTVEFOLCBSRVNQVUJMSUtBCis3NDpSVS1UQVk6UlU6VEFZTVlSU0tJWSAoRE9MR0FOTyBORU5FVFNLSVkpIEFWVE9OT01OWVkgT0tSVUcKKzc1OlJVLVRPTTpSVTpUT01TS0FZQSBPQkxBU1QKKzc2OlJVLVRVTDpSVTpUVUxTS0FZQSBPQkxBU1QKKzc3OlJVLVRWRTpSVTpUVkVSU0tBWUEgT0JMQVNUCis3ODpSVS1UWVU6UlU6VFlVTUVOU0tBWUEgT0JMQVNUCis3OTpSVS1UWTpSVTpUWVZBLCBSRVNQVUJMSUtBIFtUVVZBXQorODA6UlUtVUQ6UlU6VURNVVJUU0tBWUEgUkVTUFVCTElLQQorODE6UlUtVUxZOlJVOlVMWUFOT1ZTS0FZQSBPQkxBU1QKKzgyOlJVLVVPQjpSVTpVU1QgT1JEWU5TS0lZIEJVUllBVFNLSVkgQVZUT05PTU5ZWSBPS1JVRworODM6UlUtVkxBOlJVOlZMQURJTUlSU0tBWUEgT0JMQVNUCis4NDpSVS1WR0c6UlU6Vk9MR09HUkFEU0tBWUEgT0JMQVNUCis4NTpSVS1WTEc6UlU6Vk9MT0dPRFNLQVlBIE9CTEFTVAorODY6UlUtVk9SOlJVOlZPUk9ORVpIU0tBWUEgT0JMQVNUCis4NzpSVS1ZQU46UlU6WUFNQUxPIE5FTkVUU0tJWSBBVlRPTk9NTllZIE9LUlVHCis4ODpSVS1ZQVI6UlU6WUFST1NMQVZTS0FZQSBPQkxBU1QKKzg5OlJVLVlFVjpSVTpZRVZSRVlTS0FZQSBBVlRPTk9NTkFZQSBPQkxBU1QKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9SVVMvUlVTX0FETUlOMl9MRVgudHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L1JVUy9SVVNfQURNSU4yX0xFWC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTY5ZGUyOQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9SVVMvUlVTX0FETUlOMl9MRVgudHh0CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvUldBL1JXQV9BRE1JTjFfTEVYLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9SV0EvUldBX0FETUlOMV9MRVgudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRmYTVmMjAKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvUldBL1JXQV9BRE1JTjFfTEVYLnR4dApAQCAtMCwwICsxLDEyIEBACisxOlJXLUM6Ulc6QlVUQVJFCisyOlJXLUk6Ulc6QllVTUJBCiszOlJXLUU6Ulc6Q1lBTkdVR1UKKzQ6UlctRDpSVzpHSUtPTkdPUk8KKzU6UlctRzpSVzpHSVNFTllJCis2OlJXLUI6Ulc6R0lUQVJBTUEKKzc6UlctSjpSVzpLSUJVTkdVCis4OlJXLUY6Ulc6S0lCVVlFCis5OlJXLUs6Ulc6S0lHQUxJCisxMDpSVy1MOlJXOktJR0FMSSBWSUxMRQorMTE6UlctTTpSVzpNVVRBUkEKKzEyOlJXLUg6Ulc6UlVIRU5HRVJJCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvUldBL1JXQV9BRE1JTjJfTEVYLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9SV0EvUldBX0FETUlOMl9MRVgudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNjOWQ4NmYKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvUldBL1JXQV9BRE1JTjJfTEVYLnR4dApAQCAtMCwwICsxLDE0MiBAQAorMTpSVzpSV0E6UldBTkRBOkdpdGFyYW1hOkJ1bGluZ2EKKzI6Ulc6UldBOlJXQU5EQTpHaXRhcmFtYTpLYXllbnppCiszOlJXOlJXQTpSV0FOREE6R2l0YXJhbWE6S2lnb21hCis0OlJXOlJXQTpSV0FOREE6R2l0YXJhbWE6TWFzYW5nbworNTpSVzpSV0E6UldBTkRBOkdpdGFyYW1hOk11YW1iaXJhCis2OlJXOlJXQTpSV0FOREE6R2l0YXJhbWE6TXVnaW5hCis3OlJXOlJXQTpSV0FOREE6R2l0YXJhbWE6TXVraW5naQorODpSVzpSV0E6UldBTkRBOkdpdGFyYW1hOk11cmFtYQorOTpSVzpSV0E6UldBTkRBOkdpdGFyYW1hOk11c2h1YmF0aQorMTA6Ulc6UldBOlJXQU5EQTpHaXRhcmFtYTpOdG9uZ3dlCisxMTpSVzpSV0E6UldBTkRBOkdpdGFyYW1hOk55YWJpa2Vua2UKKzEyOlJXOlJXQTpSV0FOREE6R2l0YXJhbWE6Tnlha2FiYW5kYQorMTM6Ulc6UldBOlJXQU5EQTpHaXRhcmFtYTpOeWFtYWJ1eWUKKzE0OlJXOlJXQTpSV0FOREE6R2l0YXJhbWE6UnVuZGEKKzE1OlJXOlJXQTpSV0FOREE6R2l0YXJhbWE6UnV0b2J3ZQorMTY6Ulc6UldBOlJXQU5EQTpHaXRhcmFtYTpUYWJhCisxNzpSVzpSV0E6UldBTkRBOkdpdGFyYW1hOlRhbWJ3ZQorMTpSVzpSV0E6UldBTkRBOkJ1dGFyZTpHaXNoYW12dQorMjpSVzpSV0E6UldBTkRBOkJ1dGFyZTpIdXllCiszOlJXOlJXQTpSV0FOREE6QnV0YXJlOktpYmF5aQorNDpSVzpSV0E6UldBTkRBOkJ1dGFyZTpLaWdlbWJlCis1OlJXOlJXQTpSV0FOREE6QnV0YXJlOk1hcmFiYQorNjpSVzpSV0E6UldBTkRBOkJ1dGFyZTpNYmF6aQorNzpSVzpSV0E6UldBTkRBOkJ1dGFyZTpNdWdhbnppCis4OlJXOlJXQTpSV0FOREE6QnV0YXJlOk11Z3VzYQorOTpSVzpSV0E6UldBTkRBOkJ1dGFyZTpNdXlhZ2EKKzEwOlJXOlJXQTpSV0FOREE6QnV0YXJlOk11eWlyYQorMTE6Ulc6UldBOlJXQU5EQTpCdXRhcmU6TmRvcmEKKzEyOlJXOlJXQTpSV0FOREE6QnV0YXJlOk5nb21hCisxMzpSVzpSV0E6UldBTkRBOkJ1dGFyZTpOdHlhem8KKzE0OlJXOlJXQTpSV0FOREE6QnV0YXJlOk55YWJpc2luZHUKKzE1OlJXOlJXQTpSV0FOREE6QnV0YXJlOk55YWtpenUKKzE2OlJXOlJXQTpSV0FOREE6QnV0YXJlOk55YXJ1aGVuZ2VyaQorMTc6Ulc6UldBOlJXQU5EQTpCdXRhcmU6UnVoYXNoeWEKKzE4OlJXOlJXQTpSV0FOREE6QnV0YXJlOlJ1bnlpbnlhCisxOTpSVzpSV0E6UldBTkRBOkJ1dGFyZTpSdXNhdGlyYQorMjA6Ulc6UldBOlJXQU5EQTpCdXRhcmU6U2h5YW5kYQorMTpSVzpSV0E6UldBTkRBOkdpa29uZ29ybzpLYXJhbWEKKzI6Ulc6UldBOlJXQU5EQTpHaWtvbmdvcm86S2FyYW1ibworMzpSVzpSV0E6UldBTkRBOkdpa29uZ29ybzpLaW55YW1ha2FyYQorNDpSVzpSV0E6UldBTkRBOkdpa29uZ29ybzpLaXZ1Cis1OlJXOlJXQTpSV0FOREE6R2lrb25nb3JvOk11YnVnYQorNjpSVzpSV0E6UldBTkRBOkdpa29uZ29ybzpNdWRhc29td2EKKzc6Ulc6UldBOlJXQU5EQTpHaWtvbmdvcm86TXVrbworODpSVzpSV0E6UldBTkRBOkdpa29uZ29ybzpNdXNhbmdlCis5OlJXOlJXQTpSV0FOREE6R2lrb25nb3JvOk11c2ViZXlhCisxMDpSVzpSV0E6UldBTkRBOkdpa29uZ29ybzpOc2hpcmkKKzExOlJXOlJXQTpSV0FOREE6R2lrb25nb3JvOk55YW1hZ2FiZQorMTI6Ulc6UldBOlJXQU5EQTpHaWtvbmdvcm86UnVrb25kbworMTM6Ulc6UldBOlJXQU5EQTpHaWtvbmdvcm86Undhbm1pa28KKzE6Ulc6UldBOlJXQU5EQTpLaWJ1eWU6Qndha2lyYQorMjpSVzpSV0E6UldBTkRBOktpYnV5ZTpHaXNoeWl0YQorMzpSVzpSV0E6UldBTkRBOktpYnV5ZTpHaXNvdnUKKzQ6Ulc6UldBOlJXQU5EQTpLaWJ1eWU6R2l0c2kKKzU6Ulc6UldBOlJXQU5EQTpLaWJ1eWU6S2l2dW11Cis2OlJXOlJXQTpSV0FOREE6S2lidXllOk1hYmFuemEKKzc6Ulc6UldBOlJXQU5EQTpLaWJ1eWU6TXdlbmRvCis4OlJXOlJXQTpSV0FOREE6S2lidXllOlJ1dHNpcm8KKzk6Ulc6UldBOlJXQU5EQTpLaWJ1eWU6UndhbWF0YW11CisxOlJXOlJXQTpSV0FOREE6R2lzZW55aTpHYXNla2UKKzI6Ulc6UldBOlJXQU5EQTpHaXNlbnlpOkdpY2l5ZQorMzpSVzpSV0E6UldBTkRBOkdpc2VueWk6S2FuYW1hCis0OlJXOlJXQTpSV0FOREE6R2lzZW55aTpLYXJhZ28KKzU6Ulc6UldBOlJXQU5EQTpHaXNlbnlpOktheW92ZQorNjpSVzpSV0E6UldBTkRBOkdpc2VueWk6S2liaXJpcmEKKzc6Ulc6UldBOlJXQU5EQTpHaXNlbnlpOk11dHVyYQorODpSVzpSV0E6UldBTkRBOkdpc2VueWk6TnlhbXl1bWJhCis5OlJXOlJXQTpSV0FOREE6R2lzZW55aTpSYW1iYQorMTA6Ulc6UldBOlJXQU5EQTpHaXNlbnlpOlJ1YmF2dQorMTE6Ulc6UldBOlJXQU5EQTpHaXNlbnlpOlJ3ZXJlcmUKKzEyOlJXOlJXQTpSV0FOREE6R2lzZW55aTpTYXRpbnN5aQorMTpSVzpSV0E6UldBTkRBOktpYnVuZ3U6QmlyZW5nYQorMjpSVzpSV0E6UldBTkRBOktpYnVuZ3U6S2FiYXJvbmRvCiszOlJXOlJXQTpSV0FOREE6S2lidW5ndTpLYXlvbnphCis0OlJXOlJXQTpSV0FOREE6S2lidW5ndTpLaWdhcmFtYQorNTpSVzpSV0E6UldBTkRBOktpYnVuZ3U6TXVnZXNlcmEKKzY6Ulc6UldBOlJXQU5EQTpLaWJ1bmd1Ok11aGF6aQorNzpSVzpSV0E6UldBTkRBOktpYnVuZ3U6UnVrYXJhCis4OlJXOlJXQTpSV0FOREE6S2lidW5ndTpSdWtpcmEKKzk6Ulc6UldBOlJXQU5EQTpLaWJ1bmd1OlJ1c3VtbworMTA6Ulc6UldBOlJXQU5EQTpLaWJ1bmd1OlJ1dG9uZGUKKzExOlJXOlJXQTpSV0FOREE6S2lidW5ndTpTYWtlCisxOlJXOlJXQTpSV0FOREE6S2lnYWxpOkJpY3VtYmkKKzI6Ulc6UldBOlJXQU5EQTpLaWdhbGk6QnV0YW13YQorMzpSVzpSV0E6UldBTkRBOktpZ2FsaTpHYXNob3JhCis0OlJXOlJXQTpSV0FOREE6S2lnYWxpOkdpa29tZXJvCis1OlJXOlJXQTpSV0FOREE6S2lnYWxpOkdpa29ybworNjpSVzpSV0E6UldBTkRBOktpZ2FsaTpLYW5vbWJlCis3OlJXOlJXQTpSV0FOREE6S2lnYWxpOkthbnplbnplCis4OlJXOlJXQTpSV0FOREE6S2lnYWxpOk1ib2dvCis5OlJXOlJXQTpSV0FOREE6S2lnYWxpOk11Z2FtYmF6aQorMTA6Ulc6UldBOlJXQU5EQTpLaWdhbGk6TXVzYXNhCisxMTpSVzpSV0E6UldBTkRBOktpZ2FsaTpOZ2VuZGEKKzEyOlJXOlJXQTpSV0FOREE6S2lnYWxpOk55YXJ1Z2VuZ2UKKzEzOlJXOlJXQTpSV0FOREE6S2lnYWxpOlJ1YnVuZ28KKzE0OlJXOlJXQTpSV0FOREE6S2lnYWxpOlJ1c2hhc2hpCisxNTpSVzpSV0E6UldBTkRBOktpZ2FsaTpSdXRvbmdvCisxNjpSVzpSV0E6UldBTkRBOktpZ2FsaTpTaHlvcm9uZ2kKKzE3OlJXOlJXQTpSV0FOREE6S2lnYWxpOlRhcmUKKzE6Ulc6UldBOlJXQU5EQTpSdWhlbmdlcmk6QnV0YXJvCisyOlJXOlJXQTpSV0FOREE6UnVoZW5nZXJpOkN5YWJpbmdvCiszOlJXOlJXQTpSV0FOREE6UnVoZW5nZXJpOkN5ZXJ1Cis0OlJXOlJXQTpSV0FOREE6UnVoZW5nZXJpOkdhdG9uZGUKKzU6Ulc6UldBOlJXQU5EQTpSdWhlbmdlcmk6S2lkYWhvCis2OlJXOlJXQTpSV0FOREE6UnVoZW5nZXJpOktpZ29tYmUKKzc6Ulc6UldBOlJXQU5EQTpSdWhlbmdlcmk6S2luaWdpCis4OlJXOlJXQTpSV0FOREE6UnVoZW5nZXJpOk11a2luZ28KKzk6Ulc6UldBOlJXQU5EQTpSdWhlbmdlcmk6TmR1c3UKKzEwOlJXOlJXQTpSV0FOREE6UnVoZW5nZXJpOk5rdWxpCisxMTpSVzpSV0E6UldBTkRBOlJ1aGVuZ2VyaTpOa3VtYmEKKzEyOlJXOlJXQTpSV0FOREE6UnVoZW5nZXJpOk55YWtpbmFtYQorMTM6Ulc6UldBOlJXQU5EQTpSdWhlbmdlcmk6TnlhbXVnYWxpCisxNDpSVzpSV0E6UldBTkRBOlJ1aGVuZ2VyaTpOeWFtdXRlcmEKKzE1OlJXOlJXQTpSV0FOREE6UnVoZW5nZXJpOk55YXJ1dG92dQorMTY6Ulc6UldBOlJXQU5EQTpSdWhlbmdlcmk6UnVob25kbworMTpSVzpSV0E6UldBTkRBOkJ5dW1iYTpCdXlvZ2EKKzI6Ulc6UldBOlJXQU5EQTpCeXVtYmE6Qndpc2lnZQorMzpSVzpSV0E6UldBTkRBOkJ5dW1iYTpDeXVtYmEKKzQ6Ulc6UldBOlJXQU5EQTpCeXVtYmE6Q3l1bmdvCis1OlJXOlJXQTpSV0FOREE6Qnl1bWJhOkdpdGkKKzY6Ulc6UldBOlJXQU5EQTpCeXVtYmE6R2l0dXphCis3OlJXOlJXQTpSV0FOREE6Qnl1bWJhOktpYmFsaQorODpSVzpSV0E6UldBTkRBOkJ5dW1iYTpLaW55YW1pCis5OlJXOlJXQTpSV0FOREE6Qnl1bWJhOktpdnV5ZQorMTA6Ulc6UldBOlJXQU5EQTpCeXVtYmE6S2l5b21iZQorMTE6Ulc6UldBOlJXQU5EQTpCeXVtYmE6TXVodXJhCisxMjpSVzpSV0E6UldBTkRBOkJ5dW1iYTpNdWthcmFuZ2UKKzEzOlJXOlJXQTpSV0FOREE6Qnl1bWJhOk11cmFtYmkKKzE0OlJXOlJXQTpSV0FOREE6Qnl1bWJhOk11dnVtYmEKKzE1OlJXOlJXQTpSV0FOREE6Qnl1bWJhOk5nYXJhbWEKKzE2OlJXOlJXQTpSV0FOREE6Qnl1bWJhOlJ1dGFyZQorMTc6Ulc6UldBOlJXQU5EQTpCeXVtYmE6VHVtYmEKKzE6Ulc6UldBOlJXQU5EQTpDeWFuZ3VndTpCdWdhcmFtYQorMjpSVzpSV0E6UldBTkRBOkN5YW5ndWd1OkN5aW1ib2dvCiszOlJXOlJXQTpSV0FOREE6Q3lhbmd1Z3U6R2FmdW56bworNDpSVzpSV0E6UldBTkRBOkN5YW5ndWd1OkdhdGFyZQorNTpSVzpSV0E6UldBTkRBOkN5YW5ndWd1Okdpc2hvbWEKKzY6Ulc6UldBOlJXQU5EQTpDeWFuZ3VndTpHaXN1bWEKKzc6Ulc6UldBOlJXQU5EQTpDeWFuZ3VndTpLYW1lbWJlCis4OlJXOlJXQTpSV0FOREE6Q3lhbmd1Z3U6S2FyZW5nZXJhCis5OlJXOlJXQTpSV0FOREE6Q3lhbmd1Z3U6S2lyYW1ibworMTA6Ulc6UldBOlJXQU5EQTpDeWFuZ3VndTpOeWFrYWJ1eWUKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9TQVUvU0FVX0FETUlOMV9MRVgudHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L1NBVS9TQVVfQURNSU4xX0xFWC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzZkZjdmMAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9TQVUvU0FVX0FETUlOMV9MRVgudHh0CkBAIC0wLDAgKzEsMTUgQEAKKzE6U0EtNDpTQTpBU0lSCisyOlNBLTEwOlNBOkJBSEEKKzM6U0EtMDQ6U0E6RUFTVEVSTiBQUk9WSU5DRQorNDpTQS0wNjpTQTpIQUlMCis1OlNBLU5FVTpTQTpJUlEvU0FVIE5FVVRSQUwgWk9ORQorNjpTQS0yOlNBOkpBV0YKKzc6U0EtMDk6U0E6SklaQU4KKzg6U0EtMDM6U0E6TUFESU5BSAorOTpTQS0wMjpTQTpNQUtLQUgKKzEwOlNBLTEyOlNBOk5BSlJBTgorMTE6U0EtMDg6U0E6Tk9SVEhFUk4gRlJPTlRJRVIKKzEyOlNBLTA1OlNBOlFVQVNTSU0KKzEzOlNBLVFBWTpTQTpRVVJBWSBZQVQKKzE0OlNBLTA6U0E6UklZQUQKKzE1OlNBLTA3OlNBOlRBQlVLCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvU0FVL1NBVV9BRE1JTjJfTEVYLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9TQVUvU0FVX0FETUlOMl9MRVgudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRlNjJhNDcKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvU0FVL1NBVV9BRE1JTjJfTEVYLnR4dApAQCAtMCwwICsxLDE1IEBACisxOlNBOlNBVTpTQVVESSBBUkFCSUE6Sml6YW46U0FVLkwyLjQKKzE6U0E6U0FVOlNBVURJIEFSQUJJQTpRdXJheSBZYXQ6U0FVLkwyLjkKKzE6U0E6U0FVOlNBVURJIEFSQUJJQTpNYWtrYWg6U0FVLkwyLjE1CisxOlNBOlNBVTpTQVVESSBBUkFCSUE6QXNpcjpTQVUuTDIuMgorMTpTQTpTQVU6U0FVREkgQVJBQklBOlJpeWFkOlNBVS5MMi41CisxOlNBOlNBVTpTQVVESSBBUkFCSUE6SGFpbDpTQVUuTDIuMTQKKzE6U0E6U0FVOlNBVURJIEFSQUJJQTpJUlEvU0FVIE5ldXRyYWwgWm9uZTpTQVUuTDIuMworMTpTQTpTQVU6U0FVREkgQVJBQklBOkVhc3Rlcm4gUHJvdmluY2U6U0FVLkwyLjYKKzE6U0E6U0FVOlNBVURJIEFSQUJJQTpOYWpyYW46U0FVLkwyLjEyCisxOlNBOlNBVTpTQVVESSBBUkFCSUE6VGFidWs6U0FVLkwyLjExCisxOlNBOlNBVTpTQVVESSBBUkFCSUE6SmF3ZjpTQVUuTDIuMTAKKzE6U0E6U0FVOlNBVURJIEFSQUJJQTpNYWRpbmFoOlNBVS5MMi44CisxOlNBOlNBVTpTQVVESSBBUkFCSUE6UXVhc3NpbTpTQVUuTDIuMQorMTpTQTpTQVU6U0FVREkgQVJBQklBOk5vcnRoZXJuIEZyb250aWVyOlNBVS5MMi43CisxOlNBOlNBVTpTQVVESSBBUkFCSUE6QmFoYTpTQVUuTDIuMTMKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9TRE4vU0ROX0FETUlOMV9MRVgudHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L1NETi9TRE5fQURNSU4xX0xFWC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjg1MDMwNAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9TRE4vU0ROX0FETUlOMV9MRVgudHh0CkBAIC0wLDAgKzEsMzMgQEAKKzE6U0QtMjY6U0Q6QUwgQkFSIEFMIEFNQVIKKzI6U0QtODpTRDpBTCBCVUFZUlQKKzM6U0QtMDc6U0Q6QUwgSkFaUkFICis0OlNELTAzOlNEOkFMIEtIQVJNCis1OlNELTA2OlNEOkFMIFFBUklGCis2OlNELTIyOlNEOkFMIFdBREFICis3OlNELTA0OlNEOkFOIE5MCis4OlNELTA4OlNEOkFOIE5MIEFMIEFCWUEKKzk6U0QtMjQ6U0Q6QU4gTkwgQUwgQVpSQVEKKzEwOlNELTA6U0Q6QVNIIFNIQU1MWUFICisxMTpTRC1CRUc6U0Q6QkFIUiBFTCBHSEFaQUwKKzEyOlNELTc6U0Q6QkFSIEFMIEpBQkFMCisxMzpTRC1DOlNEOkNFTlRSQUwKKzE0OlNELURBRjpTRDpEQVJGVVIKKzE1OlNELUU6U0Q6RUFTVEVSTiBbRUFTVEVSTjFdCisxNjpTRC1FUTpTRDpFUVVBVE9SSUEKKzE3OlNELTY6U0Q6R0hBUkIgQUwgSVNUSVdZQUgKKzE4OlNELTQ6U0Q6R0hBUkIgQkFSIEFMIEdIQVpMCisxOTpTRC0yOlNEOkdIQVJCIERSRlIKKzIwOlNELTEwOlNEOkpBTkIgRFJGUgorMjE6U0QtMzpTRDpKQU5CIEtVUkRVRk4KKzIyOlNELTIwOlNEOkpOUUFMCisyMzpTRC0wNTpTRDpLQVNTQUwKKzI0OlNELUtIQTpTRDpLSEFSVE9VTQorMjU6U0QtS09SOlNEOktPUkRVRkFOCisyNjpTRC0yMzpTRDpMIEFOIE5MCisyNzpTRC1OOlNEOk5PUlRIRVJOIFtOT1JUSEVSTjNdCisyODpTRC01OlNEOlNIQU1MIEJBUiBBTCBHSEFaTAorMjk6U0QtMDI6U0Q6U0hBTUwgRFJGUgorMzA6U0QtMDk6U0Q6U0hBTUwgS1VSRFVGTgorMzE6U0QtOTpTRDpTSEFSUSBBTCBJU1RJV1lBSAorMzI6U0QtMjU6U0Q6U0lOTlIKKzMzOlNELVVQTjpTRDpVUFBFUiBOSUxFCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvU0ROL1NETl9BRE1JTjJfTEVYLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9TRE4vU0ROX0FETUlOMl9MRVgudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI2OTVlMTMKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvU0ROL1NETl9BRE1JTjJfTEVYLnR4dApAQCAtMCwwICsxLDE4IEBACisxOlNEOlNETjpTVURBTjpEYXJmdXI6Tm9ydGhlcm4gRGFyZnVyCisyOlNEOlNETjpTVURBTjpEYXJmdXI6U291dGhlcm4gRGFyZnVyCisxOlNEOlNETjpTVURBTjpCYWhyIGVsIEdoYXphbDpCYWhyIGVsIEdoYXphbAorMjpTRDpTRE46U1VEQU46QmFociBlbCBHaGF6YWw6RWwgQnVoZXlyYXQKKzE6U0Q6U0ROOlNVREFOOlVwcGVyIE5pbGU6SnVuZ2xlaQorMjpTRDpTRE46U1VEQU46VXBwZXIgTmlsZTpVcHBlciBOaWxlIChTb2JhdCkKKzE6U0Q6U0ROOlNVREFOOktvcmR1ZmFuOk5vcnRoLiBLb3Jkb2ZhbgorMjpTRDpTRE46U1VEQU46S29yZHVmYW46U291dGguIEtvcmRvZmFuCisxOlNEOlNETjpTVURBTjpDZW50cmFsOkJsdWUgTmlsZQorMjpTRDpTRE46U1VEQU46Q2VudHJhbDpFbCBHYXppcmEKKzM6U0Q6U0ROOlNVREFOOkNlbnRyYWw6V2hpdGUgTmlsZQorMTpTRDpTRE46U1VEQU46S2hhcnRvdW06S2hhcnRvdW0KKzE6U0Q6U0ROOlNVREFOOk5vcnRoZXJuOk5pbGUKKzI6U0Q6U0ROOlNVREFOOk5vcnRoZXJuOk5vcnRoZXJuCisxOlNEOlNETjpTVURBTjpFYXN0ZXJuOkthc3NhbGEKKzI6U0Q6U0ROOlNVREFOOkVhc3Rlcm46UmVkIFNlYQorMTpTRDpTRE46U1VEQU46RXF1YXRvcmlhOkVhc3QuIEVxdWF0b3JpYQorMjpTRDpTRE46U1VEQU46RXF1YXRvcmlhOldlc3QuIEVxdWF0b3JpYQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L1NFTi9TRU5fQURNSU4xX0xFWC50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvU0VOL1NFTl9BRE1JTjFfTEVYLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMWQyNTg1Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L1NFTi9TRU5fQURNSU4xX0xFWC50eHQKQEAgLTAsMCArMSwzMSBAQAorMTpTTi1CQUs6U046QkFLRUwKKzI6U04tQkJZOlNOOkJBTUJFWQorMzpTTi1CR086U046QklHTk9OQQorNDpTTi1EQUc6U046REFHQU5BCis1OlNOLURLOlNOOkRBS0FSCis2OlNOLURCOlNOOkRJT1VSQkVMCis3OlNOLUZLOlNOOkZBVElDSworODpTTi1GREk6U046Rk9VTkRJT1VHTkUKKzk6U04tR1M6U046R09TU0FTCisxMDpTTi1LQUY6U046S0FGRlJJTkUKKzExOlNOLUtMOlNOOktBT0xBQ0sKKzEyOlNOLUtFTTpTTjpLRUJFTUVSCisxMzpTTi1LRVU6U046S0VET1VHT1UKKzE0OlNOLUtEOlNOOktPTERBCisxNTpTTi1MR0U6U046TElOR1VFUkUKKzE2OlNOLUxHOlNOOkxPVUdBCisxNzpTTi1NVDpTTjpNQVRBTQorMTg6U04tTUJLOlNOOk1CQUNLRQorMTk6U04tTUJVOlNOOk1CT1VSCisyMDpTTi1ORFI6U046TklPUk8gRFUgUklQCisyMTpTTi1PVVk6U046T1VTU09VWUUKKzIyOlNOLVBLRTpTTjpQSUtJTkUKKzIzOlNOLVBEUjpTTjpQT0RPUgorMjQ6U04tUlVROlNOOlJVRklTUVVFIEJBUkdOWQorMjU6U04tU0w6U046U0FJTlQgTE9VSVMKKzI2OlNOLVNESDpTTjpTRURISU9VCisyNzpTTi1UQzpTTjpUQU1CQUNPVU5EQQorMjg6U04tVEg6U046VEhJRVMKKzI5OlNOLVRWTzpTTjpUSVZBT1VBTkUKKzMwOlNOLVZHUjpTTjpWRUxJTkdBUkEKKzMxOlNOLVpHOlNOOlpJR1VJTkNIT1IKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9TRU4vU0VOX0FETUlOMl9MRVgudHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L1NFTi9TRU5fQURNSU4yX0xFWC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWZhMTRjMAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9TRU4vU0VOX0FETUlOMl9MRVgudHh0CkBAIC0wLDAgKzEsOTMgQEAKKzE6U046U0VOOlNFTkVHQUw6QmFrZWw6QmFsYQorMjpTTjpTRU46U0VORUdBTDpCYWtlbDpEaWF3YXJhCiszOlNOOlNFTjpTRU5FR0FMOkJha2VsOkdvdWRpcmkKKzQ6U046U0VOOlNFTkVHQUw6QmFrZWw6S2lkaXJhCisxOlNOOlNFTjpTRU5FR0FMOk1ib3VyOkZpc3NlbAorMjpTTjpTRU46U0VORUdBTDpNYm91cjpOZ3Vla29raAorMzpTTjpTRU46U0VORUdBTDpNYm91cjpUaGlhZGlheWUKKzE6U046U0VOOlNFTkVHQUw6VGFtYmFjb3VuZGE6S291bXBlbnRvdW0KKzI6U046U0VOOlNFTkVHQUw6VGFtYmFjb3VuZGE6S291c3NhbmFyCiszOlNOOlNFTjpTRU5FR0FMOlRhbWJhY291bmRhOk1ha2Fjb2xpYmFudGFuZworNDpTTjpTRU46U0VORUdBTDpUYW1iYWNvdW5kYTpNaXNzaXJhaAorMTpTTjpTRU46U0VORUdBTDpQaWtpbmU6UGlraW5lCisxOlNOOlNFTjpTRU5FR0FMOk1hdGFtOkthbmVsCisyOlNOOlNFTjpTRU5FR0FMOk1hdGFtOk91cm9zc29ndWkKKzM6U046U0VOOlNFTkVHQUw6TWF0YW06U2VtbWUKKzQ6U046U0VOOlNFTkVHQUw6TWF0YW06VGhpbG9nbmUKKzE6U046U0VOOlNFTkVHQUw6Tmlvcm8tRHUtUmlwOk1lZGluYSBTYWJha2gKKzI6U046U0VOOlNFTkVHQUw6Tmlvcm8tRHUtUmlwOlBhb3Nrb3RvCiszOlNOOlNFTjpTRU5FR0FMOk5pb3JvLUR1LVJpcDpXYWNrIE5nb3VuYQorMTpTTjpTRU46U0VORUdBTDpUaGllczpOb3R0bworMjpTTjpTRU46U0VORUdBTDpUaGllczpQb3V0CiszOlNOOlNFTjpTRU5FR0FMOlRoaWVzOlRoaWVuYWJhCisxOlNOOlNFTjpTRU5FR0FMOkZvdW5kaW91Z25lOkRqaWxvcgorMjpTTjpTRU46U0VORUdBTDpGb3VuZGlvdWduZTpOaW9kaW9yCiszOlNOOlNFTjpTRU5FR0FMOkZvdW5kaW91Z25lOlRvdWJhY291dGEKKzE6U046U0VOOlNFTkVHQUw6UnVmaXNxdWUtQmFyZ255OlNlYmlrb3RhbmUKKzE6U046U0VOOlNFTkVHQUw6RmF0aWNrOkRpYWtoYW8KKzI6U046U0VOOlNFTkVHQUw6RmF0aWNrOkZpbWVsYQorMzpTTjpTRU46U0VORUdBTDpGYXRpY2s6Tmlha2hhcgorNDpTTjpTRU46U0VORUdBTDpGYXRpY2s6VGF0dGFndWluZQorMTpTTjpTRU46U0VORUdBTDpTZWRoaW91OkJvdW5raWxpbmcKKzI6U046U0VOOlNFTkVHQUw6U2VkaGlvdTpEaWF0dGFjb3VuZGEKKzM6U046U0VOOlNFTkVHQUw6U2VkaGlvdTpEaWVuZGUKKzQ6U046U0VOOlNFTkVHQUw6U2VkaGlvdTpNYXJzYXNzb3VtCis1OlNOOlNFTjpTRU5FR0FMOlNlZGhpb3U6VGFuYWZmCisxOlNOOlNFTjpTRU5FR0FMOkRpb3VyYmVsOk5kaW5keQorMjpTTjpTRU46U0VORUdBTDpEaW91cmJlbDpOZG91bG8KKzE6U046U0VOOlNFTkVHQUw6S29sZGE6RGFibworMjpTTjpTRU46U0VORUdBTDpLb2xkYTpEaW91bGFjb2xvbgorMzpTTjpTRU46U0VORUdBTDpLb2xkYTpNZWRpbmEgWW9ybyBGb3VsYWgKKzE6U046U0VOOlNFTkVHQUw6RGFrYXI6RGFrYXIKKzE6U046U0VOOlNFTkVHQUw6TG91Z2E6S2V1ciBNb21hciBTYXJyCisyOlNOOlNFTjpTRU5FR0FMOkxvdWdhOktva2kKKzM6U046U0VOOlNFTkVHQUw6TG91Z2E6TWJlZGllbmUKKzQ6U046U0VOOlNFTkVHQUw6TG91Z2E6U2FrYWwKKzE6U046U0VOOlNFTkVHQUw6S2Vkb3Vnb3U6QmFuZGFmYXNzaQorMjpTTjpTRU46U0VORUdBTDpLZWRvdWdvdTpGb25nb2xpbWJpCiszOlNOOlNFTjpTRU5FR0FMOktlZG91Z291OlNhbGVtYXRhCis0OlNOOlNFTjpTRU5FR0FMOktlZG91Z291OlNhcmF5YQorMTpTTjpTRU46U0VORUdBTDpLYWZmcmluZTpCaXJrZWxhbmUKKzI6U046U0VOOlNFTkVHQUw6S2FmZnJpbmU6S291bmdoZXVsCiszOlNOOlNFTjpTRU5FR0FMOkthZmZyaW5lOk1hbGVtZSBIb2RhcgorNDpTTjpTRU46U0VORUdBTDpLYWZmcmluZTpOZ2FuZGEKKzE6U046U0VOOlNFTkVHQUw6S2FvbGFjazpHYW5kaWF5ZQorMjpTTjpTRU46U0VORUdBTDpLYW9sYWNrOk5kaWVkaWVuZworMzpTTjpTRU46U0VORUdBTDpLYW9sYWNrOk5kb2ZmYW5lCisxOlNOOlNFTjpTRU5FR0FMOkxpbmd1ZXJlOkJhcmtlZGppCisyOlNOOlNFTjpTRU5FR0FMOkxpbmd1ZXJlOkRhaHJhCiszOlNOOlNFTjpTRU5FR0FMOkxpbmd1ZXJlOkRvZGppCis0OlNOOlNFTjpTRU5FR0FMOkxpbmd1ZXJlOllhbmctWWFuZworMTpTTjpTRU46U0VORUdBTDpWZWxpbmdhcmE6Qm9uY29udG8KKzI6U046U0VOOlNFTkVHQUw6VmVsaW5nYXJhOktvdW5rYW5lCiszOlNOOlNFTjpTRU5FR0FMOlZlbGluZ2FyYTpQYWtvdXIKKzE6U046U0VOOlNFTkVHQUw6S2ViZW1lcjpEYXJvdSBNb3VzdGkKKzI6U046U0VOOlNFTkVHQUw6S2ViZW1lcjpOZGFuZGUKKzM6U046U0VOOlNFTkVHQUw6S2ViZW1lcjpTYWdhdGEKKzE6U046U0VOOlNFTkVHQUw6VGl2YW91YW5lOk1lb3VhbmUKKzI6U046U0VOOlNFTkVHQUw6VGl2YW91YW5lOk1lcmluYSBEYWtoYXIKKzM6U046U0VOOlNFTkVHQUw6VGl2YW91YW5lOk5pYWtoZW5lCis0OlNOOlNFTjpTRU5FR0FMOlRpdmFvdWFuZTpQYW1iYWwKKzE6U046U0VOOlNFTkVHQUw6R29zc2FzOkNvbG9iYW5lCisyOlNOOlNFTjpTRU5FR0FMOkdvc3NhczpLYWhvbmUKKzM6U046U0VOOlNFTkVHQUw6R29zc2FzOk91YWRpb3VyCisxOlNOOlNFTjpTRU5FR0FMOlppZ3VpbmNob3I6TmlhZ3VpcworMjpTTjpTRU46U0VORUdBTDpaaWd1aW5jaG9yOk5pYXNzaWEKKzE6U046U0VOOlNFTkVHQUw6Qmlnbm9uYTpEaW91bG91bG91CisyOlNOOlNFTjpTRU5FR0FMOkJpZ25vbmE6U2luZGlhbgorMzpTTjpTRU46U0VORUdBTDpCaWdub25hOlRlbmRvdWNrCis0OlNOOlNFTjpTRU5FR0FMOkJpZ25vbmE6VGVuZ2hvcmkKKzE6U046U0VOOlNFTkVHQUw6QmFtYmV5OkJhYmEgR2FyYWdlCisyOlNOOlNFTjpTRU5FR0FMOkJhbWJleTpMYW1iYXllCiszOlNOOlNFTjpTRU5FR0FMOkJhbWJleTpOZ295ZQorMTpTTjpTRU46U0VORUdBTDpPdXNzb3V5ZTpDYWJyb3Vzc2UKKzI6U046U0VOOlNFTkVHQUw6T3Vzc291eWU6TG91ZGlhIE91b2xvZgorMTpTTjpTRU46U0VORUdBTDpEYWdhbmE6TWJhbmUKKzI6U046U0VOOlNFTkVHQUw6RGFnYW5hOlJhbworMzpTTjpTRU46U0VORUdBTDpEYWdhbmE6Um9zcy1CZXRoaW8KKzE6U046U0VOOlNFTkVHQUw6TWJhY2tlOkthZWwKKzI6U046U0VOOlNFTkVHQUw6TWJhY2tlOk5kYW1lCisxOlNOOlNFTjpTRU5FR0FMOlBvZG9yOkNhcy1DYXMKKzI6U046U0VOOlNFTkVHQUw6UG9kb3I6TmRpb3VtCiszOlNOOlNFTjpTRU5FR0FMOlBvZG9yOlNhbGRlCis0OlNOOlNFTjpTRU5FR0FMOlBvZG9yOlRoaWxsZSBCb3ViYWNhcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L1NHUC9TR1BfQURNSU4xX0xFWC50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvU0dQL1NHUF9BRE1JTjFfTEVYLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMjAxNmU0Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L1NHUC9TR1BfQURNSU4xX0xFWC50eHQKQEAgLTAsMCArMSBAQAorMTpTRy1TOlNHOlNJTkdBUE9SRQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L1NHUC9TR1BfQURNSU4yX0xFWC50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvU0dQL1NHUF9BRE1JTjJfTEVYLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NGRmNzVjCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L1NHUC9TR1BfQURNSU4yX0xFWC50eHQKQEAgLTAsMCArMSwxMyBAQAorMTpTRzpTR1A6U0lOR0FQT1JFOlNpbmdhcG9yZTpTR1AuTDIuMQorMjpTRzpTR1A6U0lOR0FQT1JFOlNpbmdhcG9yZTpTR1AuTDIuMTAKKzM6U0c6U0dQOlNJTkdBUE9SRTpTaW5nYXBvcmU6U0dQLkwyLjExCis0OlNHOlNHUDpTSU5HQVBPUkU6U2luZ2Fwb3JlOlNHUC5MMi4xMgorNTpTRzpTR1A6U0lOR0FQT1JFOlNpbmdhcG9yZTpTR1AuTDIuMTMKKzY6U0c6U0dQOlNJTkdBUE9SRTpTaW5nYXBvcmU6U0dQLkwyLjIKKzc6U0c6U0dQOlNJTkdBUE9SRTpTaW5nYXBvcmU6U0dQLkwyLjMKKzg6U0c6U0dQOlNJTkdBUE9SRTpTaW5nYXBvcmU6U0dQLkwyLjQKKzk6U0c6U0dQOlNJTkdBUE9SRTpTaW5nYXBvcmU6U0dQLkwyLjUKKzEwOlNHOlNHUDpTSU5HQVBPUkU6U2luZ2Fwb3JlOlNHUC5MMi42CisxMTpTRzpTR1A6U0lOR0FQT1JFOlNpbmdhcG9yZTpTR1AuTDIuNworMTI6U0c6U0dQOlNJTkdBUE9SRTpTaW5nYXBvcmU6U0dQLkwyLjgKKzEzOlNHOlNHUDpTSU5HQVBPUkU6U2luZ2Fwb3JlOlNHUC5MMi45CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvU0xFL1NMRV9BRE1JTjFfTEVYLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9TTEUvU0xFX0FETUlOMV9MRVgudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYyYjdhMGMKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvU0xFL1NMRV9BRE1JTjFfTEVYLnR4dApAQCAtMCwwICsxLDQgQEAKKzE6U0wtRTpTTDpFQVNURVJOIFtFQVNURVJOMl0KKzI6U0wtTjpTTDpOT1JUSEVSTiBbTk9SVEhFUk4yXQorMzpTTC1TOlNMOlNPVVRIRVJOCis0OlNMLVc6U0w6V0VTVEVSTiBBUkVBIChGUkVFVE9XTikgW1dFU1RFUk4zXSBbV0VTVEVSTl0KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9TTEUvU0xFX0FETUlOMl9MRVgudHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L1NMRS9TTEVfQURNSU4yX0xFWC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzc3MTljYgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9TTEUvU0xFX0FETUlOMl9MRVgudHh0CkBAIC0wLDAgKzEsMTQgQEAKKzE6U0w6U0xFOlNJRVJSQSBMRU9ORTpTb3V0aGVybjpCbworMjpTTDpTTEU6U0lFUlJBIExFT05FOlNvdXRoZXJuOkJvbnRoZQorMzpTTDpTTEU6U0lFUlJBIExFT05FOlNvdXRoZXJuOk1veWFtYmEKKzQ6U0w6U0xFOlNJRVJSQSBMRU9ORTpTb3V0aGVybjpQdWplaHVuCisxOlNMOlNMRTpTSUVSUkEgTEVPTkU6RWFzdGVybjI6S2FpbGFodW4KKzI6U0w6U0xFOlNJRVJSQSBMRU9ORTpFYXN0ZXJuMjpLZW5lbWEKKzM6U0w6U0xFOlNJRVJSQSBMRU9ORTpFYXN0ZXJuMjpLb25vCisxOlNMOlNMRTpTSUVSUkEgTEVPTkU6Tm9ydGhlcm4yOkJvbWJhbGkKKzI6U0w6U0xFOlNJRVJSQSBMRU9ORTpOb3J0aGVybjI6S2FtYmlhCiszOlNMOlNMRTpTSUVSUkEgTEVPTkU6Tm9ydGhlcm4yOktvaW5hZHVndQorNDpTTDpTTEU6U0lFUlJBIExFT05FOk5vcnRoZXJuMjpQb3J0IExva28KKzU6U0w6U0xFOlNJRVJSQSBMRU9ORTpOb3J0aGVybjI6VG9ua29saWxpCisxOlNMOlNMRTpTSUVSUkEgTEVPTkU6V2VzdGVybjM6RnJlZXRvd24KKzI6U0w6U0xFOlNJRVJSQSBMRU9ORTpXZXN0ZXJuMzpXZXN0ZXJuIFJ1cmFsCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvU01SL1NNUl9BRE1JTjFfTEVYLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9TTVIvU01SX0FETUlOMV9MRVgudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJkZTVmZTcKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvU01SL1NNUl9BRE1JTjFfTEVYLnR4dApAQCAtMCwwICsxIEBACisxOlNNLU06U006U0FOIE1BUklOTwpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L1NNUi9TTVJfQURNSU4yX0xFWC50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvU01SL1NNUl9BRE1JTjJfTEVYLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNjlkZTI5Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L1NNUi9TTVJfQURNSU4yX0xFWC50eHQKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9TT00vU09NX0FETUlOMV9MRVgudHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L1NPTS9TT01fQURNSU4xX0xFWC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWQ3ZWYxYQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9TT00vU09NX0FETUlOMV9MRVgudHh0CkBAIC0wLDAgKzEsMTggQEAKKzE6U08tQVc6U086QVdEQUwKKzI6U08tQks6U086QkFLT09MCiszOlNPLUJOOlNPOkJBTkFBRElSCis0OlNPLUJSOlNPOkJBUkkKKzU6U08tQlk6U086QkFZCis2OlNPLUdFOlNPOkdBRE8KKzc6U08tR0E6U086R0FMR1VEVVVECis4OlNPLUhJOlNPOkhJSVJBTgorOTpTTy1KRDpTTzpKLiBESEVYRQorMTA6U08tSkg6U086Si4gSE9PU0UKKzExOlNPLU1VOlNPOk1VRFVHCisxMjpTTy1OVTpTTzpOVUdBQUwKKzEzOlNPLVNBOlNPOlNBTkFBRworMTQ6U08tU0Q6U086U0guIERIRVhFCisxNTpTTy1TSDpTTzpTSC4gSE9PU0UKKzE2OlNPLVNPOlNPOlNPT0wKKzE3OlNPLVRPOlNPOlRPRyBESEVFUgorMTg6U08tV086U086Vy4gR0FMQkVFRApkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L1NPTS9TT01fQURNSU4yX0xFWC50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvU09NL1NPTV9BRE1JTjJfTEVYLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMjk0ZTU3Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L1NPTS9TT01fQURNSU4yX0xFWC50eHQKQEAgLTAsMCArMSw3NCBAQAorMTpTTzpTT006U09NQUxJQTpCYXk6QmF5ZGhhYm8KKzI6U086U09NOlNPTUFMSUE6QmF5OkJ1dXIgWGFrYWJhIChCdXIgSGFjYWJhKQorMzpTTzpTT006U09NQUxJQTpCYXk6RGlpbnNvb3IKKzQ6U086U09NOlNPTUFMSUE6QmF5OlFhbnNheCBEaGVlcmUKKzE6U086U09NOlNPTUFMSUE6R2FkbzpCYWFyLURoZWVyZQorMjpTTzpTT006U09NQUxJQTpHYWRvOkJlbGVkIFhhYXdvIChCdWxhLWhhd2EpCiszOlNPOlNPTTpTT01BTElBOkdhZG86Q2VlbCBXYWFxIChFbCBXYWspCis0OlNPOlNPTTpTT01BTElBOkdhZG86RG9sb3cKKzU6U086U09NOlNPTUFMSUE6R2FkbzpHYXJiYWhhYXJheQorNjpTTzpTT006U09NQUxJQTpHYWRvOkx1dWsKKzE6U086U09NOlNPTUFMSUE6U2guIEhvb3NlOkFmZ29veWUgKEFmZ29pKQorMjpTTzpTT006U09NQUxJQTpTaC4gSG9vc2U6QmFyYWF3ZQorMzpTTzpTT006U09NQUxJQTpTaC4gSG9vc2U6S3VudHV3YWFyYXkKKzQ6U086U09NOlNPTUFMSUE6U2guIEhvb3NlOk1hcmthCis1OlNPOlNPTTpTT01BTElBOlNoLiBIb29zZTpRb3J5b29sZXkKKzY6U086U09NOlNPTUFMSUE6U2guIEhvb3NlOlNhYmxhbGUKKzc6U086U09NOlNPTUFMSUE6U2guIEhvb3NlOldhbmxhIFdleW4KKzE6U086U09NOlNPTUFMSUE6R2FsZ3VkdXVkOkNhYWJ1ZHdhYXEKKzI6U086U09NOlNPTUFMSUE6R2FsZ3VkdXVkOkNhZGFhZG8KKzM6U086U09NOlNPTUFMSUE6R2FsZ3VkdXVkOkNlZWwgQnV1ciAoRWwgQnVyKQorNDpTTzpTT006U09NQUxJQTpHYWxndWR1dWQ6Q2VlbCBEaGVlciAoRWwgRGVyZSkKKzU6U086U09NOlNPTUFMSUE6R2FsZ3VkdXVkOkRodXVzYW1hcmVlYgorMTpTTzpTT006U09NQUxJQTpCYXJpOkJhbmRlci1CZXlsYSAoQmVuZGVyYmVsYQorMjpTTzpTT006U09NQUxJQTpCYXJpOkJvc2Fhc28KKzM6U086U09NOlNPTUFMSUE6QmFyaTpDYWxhd2xhIChBbHVsYSkKKzQ6U086U09NOlNPTUFMSUE6QmFyaTpJc2t1c2h1YmFuCis1OlNPOlNPTTpTT01BTElBOkJhcmk6UWFuZGFsYQorNjpTTzpTT006U09NQUxJQTpCYXJpOlFhcmRobworMTpTTzpTT006U09NQUxJQTpOdWdhYWw6QnVydGlubGUKKzI6U086U09NOlNPTUFMSUE6TnVnYWFsOkV5bAorMzpTTzpTT006U09NQUxJQTpOdWdhYWw6R2Fyb293ZQorNDpTTzpTT006U09NQUxJQTpOdWdhYWw6TGFzY2Fhbm9kIChMYXNhbm9kKQorNTpTTzpTT006U09NQUxJQTpOdWdhYWw6VGFsZWV4Cis2OlNPOlNPTTpTT01BTElBOk51Z2FhbDpYdWR1bgorMTpTTzpTT006U09NQUxJQTpTaC4gRGhleGU6QWFkYW4KKzI6U086U09NOlNPTUFMSUE6U2guIERoZXhlOkJhbGNhZAorMzpTTzpTT006U09NQUxJQTpTaC4gRGhleGU6Q2FkYWxlCis0OlNPOlNPTTpTT01BTElBOlNoLiBEaGV4ZTpKYXdoYXIKKzE6U086U09NOlNPTUFMSUE6QmFrb29sOkNlZWwgQmFyZGUgKEVsIEJhcmRlKQorMjpTTzpTT006U09NQUxJQTpCYWtvb2w6UmFiIERodXVyZQorMzpTTzpTT006U09NQUxJQTpCYWtvb2w6VGl5ZWVnbG93Cis0OlNPOlNPTTpTT01BTElBOkJha29vbDpXYWppZAorNTpTTzpTT006U09NQUxJQTpCYWtvb2w6WHVkdXIgKEh1ZHVyKQorMTpTTzpTT006U09NQUxJQTpIaWlyYW46QmVsZWQgV2V5bgorMjpTTzpTT006U09NQUxJQTpIaWlyYW46QnV1bG8gQnVyZG8gKEJ1bGEtQnJpZikKKzM6U086U09NOlNPTUFMSUE6SGlpcmFuOkphbGFsYXFzaQorMTpTTzpTT006U09NQUxJQTpTYW5hYWc6QmFkaGFuCisyOlNPOlNPTTpTT01BTElBOlNhbmFhZzpDZWVsLUFmd2VpbgorMzpTTzpTT006U09NQUxJQTpTYW5hYWc6Q2VlcmlnYWFibyAoRXJpZ2F2bykKKzE6U086U09NOlNPTUFMSUE6QmFuYWFkaXI6TW9nYWRpc2hvCisxOlNPOlNPTTpTT01BTElBOkouIERoZXhlOkJ1J2FhbGUKKzI6U086U09NOlNPTUFMSUE6Si4gRGhleGU6SmlsaWIKKzM6U086U09NOlNPTUFMSUE6Si4gRGhleGU6U2Fha293CisxOlNPOlNPTTpTT01BTElBOk11ZHVnOkdhYWxrYWNheW8KKzI6U086U09NOlNPTUFMSUE6TXVkdWc6R29sZG9nb2IKKzM6U086U09NOlNPTUFMSUE6TXVkdWc6SG9ieW8KKzQ6U086U09NOlNPTUFMSUE6TXVkdWc6SmFyaWliYW4KKzU6U086U09NOlNPTUFMSUE6TXVkdWc6WGFyYXJkaGVlcmUgKEhhcmFyZGVyZSkKKzE6U086U09NOlNPTUFMSUE6VG9nLURoZWVyOkJ1cmFvCisyOlNPOlNPTTpTT01BTElBOlRvZy1EaGVlcjpCdXVob29kbGUKKzM6U086U09NOlNPTUFMSUE6VG9nLURoZWVyOkNheW5hYm8KKzQ6U086U09NOlNPTUFMSUE6VG9nLURoZWVyOk9vZHdleW5lCis1OlNPOlNPTTpTT01BTElBOlRvZy1EaGVlcjpTaGVla2gKKzE6U086U09NOlNPTUFMSUE6Si4gSG9vc2U6QWZtYWRvdworMjpTTzpTT006U09NQUxJQTpKLiBIb29zZTpCYWRoYWFkaGUKKzM6U086U09NOlNPTUFMSUE6Si4gSG9vc2U6SmFtYWFtZQorNDpTTzpTT006U09NQUxJQTpKLiBIb29zZTpLaXNtYWF5bworMTpTTzpTT006U09NQUxJQTpXLiBHYWxiZWVkOkJha2kKKzI6U086U09NOlNPTUFMSUE6Vy4gR2FsYmVlZDpCZXJiZXJhCiszOlNPOlNPTTpTT01BTElBOlcuIEdhbGJlZWQ6Qm9vcmFtYQorNDpTTzpTT006U09NQUxJQTpXLiBHYWxiZWVkOkdhYmlsZXkKKzU6U086U09NOlNPTUFMSUE6Vy4gR2FsYmVlZDpIYXJnZXlzYQorNjpTTzpTT006U09NQUxJQTpXLiBHYWxiZWVkOkx1Z2hheWEKKzc6U086U09NOlNPTUFMSUE6Vy4gR2FsYmVlZDpTYXlsYWMKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9TUkIvU1JCX0FETUlOMV9MRVgudHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L1NSQi9TUkJfQURNSU4xX0xFWC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWM4OTYzYQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9TUkIvU1JCX0FETUlOMV9MRVgudHh0CkBAIC0wLDAgKzEsNSBAQAorMTpZVS1DR086WVU6Q1JOQSBHT1JBCisyOllVLUtPUzpZVTpLT1NPVk8KKzM6WVUtTUtEOllVOk1BS0VET05JSkEKKzQ6WVUtU1JCOllVOlNSQklKQQorNTpZVS1WT0o6WVU6Vk9KVk9ESU5BCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvU1JCL1NSQl9BRE1JTjJfTEVYLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9TUkIvU1JCX0FETUlOMl9MRVgudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2OWRlMjkKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvU1JCL1NSQl9BRE1JTjJfTEVYLnR4dApkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L1NUUC9TVFBfQURNSU4xX0xFWC50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvU1RQL1NUUF9BRE1JTjFfTEVYLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hOWRlZDEyCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L1NUUC9TVFBfQURNSU4xX0xFWC50eHQKQEAgLTAsMCArMSwyIEBACisxOlNULVA6U1Q6UFJJTkNJUEUKKzI6U1QtUzpTVDpTQU8gVE9NRQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L1NUUC9TVFBfQURNSU4yX0xFWC50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvU1RQL1NUUF9BRE1JTjJfTEVYLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZTBiZDY2Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L1NUUC9TVFBfQURNSU4yX0xFWC50eHQKQEAgLTAsMCArMSwyIEBACisxOlNUOlNUUDpTQU8gVE9NRSBBTkQgUFJJTkNJUEU6U2FvIFRvbWU6U1RQLkwyLjEKKzE6U1Q6U1RQOlNBTyBUT01FIEFORCBQUklOQ0lQRTpQcmluY2lwZTpTVFAuTDIuMgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L1NVUi9TVVJfQURNSU4xX0xFWC50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvU1VSL1NVUl9BRE1JTjFfTEVYLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NTRkOTk4Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L1NVUi9TVVJfQURNSU4xX0xFWC50eHQKQEAgLTAsMCArMSwxMCBAQAorMTpTUi1CUjpTUjpCUk9LT1BPTkRPCisyOlNSLUNNOlNSOkNPTU1FV0lKTkUKKzM6U1ItQ1I6U1I6Q09ST05JRQorNDpTUi1NQTpTUjpNQVJPV0lKTkUKKzU6U1ItTkk6U1I6TklDS0VSSUUKKzY6U1ItUFI6U1I6UEFSQQorNzpTUi1QTTpTUjpQQVJBTUFSSUJPCis4OlNSLVNBOlNSOlNBUkFNQUNDQQorOTpTUi1TSTpTUjpTSVBBTElXSU5JCisxMDpTUi1XQTpTUjpXQU5JQ0EKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9TVVIvU1VSX0FETUlOMl9MRVgudHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L1NVUi9TVVJfQURNSU4yX0xFWC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTE2MWI1YQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9TVVIvU1VSX0FETUlOMl9MRVgudHh0CkBAIC0wLDAgKzEsNjMgQEAKKzE6U1I6U1VSOlNVUklOQU1FOlVOS05PV046SXNsYQorMTpTUjpTVVI6U1VSSU5BTUU6UEFSQTpCaWdpIFBvaWthCisyOlNSOlNVUjpTVVJJTkFNRTpQQVJBOkNhcm9saW5hCiszOlNSOlNVUjpTVVJJTkFNRTpQQVJBOk5vb3JkCis0OlNSOlNVUjpTVVJJTkFNRTpQQVJBOk9vc3QKKzU6U1I6U1VSOlNVUklOQU1FOlBBUkE6WnVpZAorMTpTUjpTVVI6U1VSSU5BTUU6V0FOSUNBOkRlIE5pZXV3ZSBHcm9uZAorMjpTUjpTVVI6U1VSSU5BTUU6V0FOSUNBOkRvbWJ1cmcKKzM6U1I6U1VSOlNVUklOQU1FOldBTklDQTpIb3V0dHVpbgorNDpTUjpTVVI6U1VSSU5BTUU6V0FOSUNBOktvZXdhcmFzYW4KKzU6U1I6U1VSOlNVUklOQU1FOldBTklDQTpLd2F0dGEKKzY6U1I6U1VSOlNVUklOQU1FOldBTklDQTpMZWx5ZG9ycAorNzpTUjpTVVI6U1VSSU5BTUU6V0FOSUNBOlNhcmFtYWNjYXBvbGRlcgorMTpTUjpTVVI6U1VSSU5BTUU6TUFST1dJSk5FOkFsYmluYQorMjpTUjpTVVI6U1VSSU5BTUU6TUFST1dJSk5FOkdhbGliaQorMzpTUjpTVVI6U1VSSU5BTUU6TUFST1dJSk5FOk1vZW5nbworNDpTUjpTVVI6U1VSSU5BTUU6TUFST1dJSk5FOk1vZW5nb3RhcG9lCis1OlNSOlNVUjpTVVJJTkFNRTpNQVJPV0lKTkU6UGF0YW1hY2NhCis2OlNSOlNVUjpTVVJJTkFNRTpNQVJPV0lKTkU6V2FuaGF0dGkKKzE6U1I6U1VSOlNVUklOQU1FOkNPTU1FV0lKTkU6QWxrbWFhcgorMjpTUjpTVVI6U1VSSU5BTUU6Q09NTUVXSUpORTpCYWtraQorMzpTUjpTVVI6U1VSSU5BTUU6Q09NTUVXSUpORTpNYXJnYXJldGhhCis0OlNSOlNVUjpTVVJJTkFNRTpDT01NRVdJSk5FOk1lZXJ6b3JnCis1OlNSOlNVUjpTVVJJTkFNRTpDT01NRVdJSk5FOk53LiBBbXN0ZXJkYW0KKzY6U1I6U1VSOlNVUklOQU1FOkNPTU1FV0lKTkU6VGFtYW5yZWRqbworMTpTUjpTVVI6U1VSSU5BTUU6Q09ST05JRTpKb2hhbm5hIE1hcmlhCisyOlNSOlNVUjpTVVJJTkFNRTpDT1JPTklFOlRvdG5lc3MKKzM6U1I6U1VSOlNVUklOQU1FOkNPUk9OSUU6V2VsZ2VsZWdlbgorMTpTUjpTVVI6U1VSSU5BTUU6TklDS0VSSUU6R3Jvb3QgSGVuYXIKKzI6U1I6U1VSOlNVUklOQU1FOk5JQ0tFUklFOk53IC4gTmlja2VyaWUKKzM6U1I6U1VSOlNVUklOQU1FOk5JQ0tFUklFOk9vc3RlbGlqa2UgUG9sZGVycworNDpTUjpTVVI6U1VSSU5BTUU6TklDS0VSSUU6V2FnZW5pbmdlbgorNTpTUjpTVVI6U1VSSU5BTUU6TklDS0VSSUU6V2VzdGVsaWprZSBQb2xkZXJzCisxOlNSOlNVUjpTVVJJTkFNRTpQQVJBTUFSSUJPOkJlZWtodWl6ZW4KKzI6U1I6U1VSOlNVUklOQU1FOlBBUkFNQVJJQk86QmxhdXdncm9uZAorMzpTUjpTVVI6U1VSSU5BTUU6UEFSQU1BUklCTzpDZW50cnVtCis0OlNSOlNVUjpTVVJJTkFNRTpQQVJBTUFSSUJPOkZsb3JhCis1OlNSOlNVUjpTVVJJTkFNRTpQQVJBTUFSSUJPOkxhdG91cgorNjpTUjpTVVI6U1VSSU5BTUU6UEFSQU1BUklCTzpMaXZvcm5vCis3OlNSOlNVUjpTVVJJTkFNRTpQQVJBTUFSSUJPOk11bmRlcgorODpTUjpTVVI6U1VSSU5BTUU6UEFSQU1BUklCTzpQb250YnVpdGVuCis5OlNSOlNVUjpTVVJJTkFNRTpQQVJBTUFSSUJPOlJhaW52aWxsZQorMTA6U1I6U1VSOlNVUklOQU1FOlBBUkFNQVJJQk86VGFtbWVuZ2EKKzExOlNSOlNVUjpTVVJJTkFNRTpQQVJBTUFSSUJPOldlZyBOYWFyIFplZQorMTI6U1I6U1VSOlNVUklOQU1FOlBBUkFNQVJJQk86V2VsZ2VsZWdlbgorMTpTUjpTVVI6U1VSSU5BTUU6QlJPS09QT05ETzpCcm93bnN3ZWcKKzI6U1I6U1VSOlNVUklOQU1FOkJST0tPUE9ORE86Q2VudHJ1bQorMzpTUjpTVVI6U1VSSU5BTUU6QlJPS09QT05ETzpLbGFhc2tyZWVrCis0OlNSOlNVUjpTVVJJTkFNRTpCUk9LT1BPTkRPOkt3YWtvZWdyb24KKzU6U1I6U1VSOlNVUklOQU1FOkJST0tPUE9ORE86TWFyZWNoYWxza3JlZWsKKzY6U1I6U1VSOlNVUklOQU1FOkJST0tPUE9ORE86U2FyYWtyZWVrCisxOlNSOlNVUjpTVVJJTkFNRTpTQVJBTUFDQ0E6Q2FsY3V0dGEKKzI6U1I6U1VSOlNVUklOQU1FOlNBUkFNQUNDQTpHcm9uaW5nZW4KKzM6U1I6U1VSOlNVUklOQU1FOlNBUkFNQUNDQTpKYXJpa2FiYQorNDpTUjpTVVI6U1VSSU5BTUU6U0FSQU1BQ0NBOkthbXBvbmcgQmFyb2UKKzU6U1I6U1VSOlNVUklOQU1FOlNBUkFNQUNDQTpUaWpnZXJrcmVlaworNjpTUjpTVVI6U1VSSU5BTUU6U0FSQU1BQ0NBOldheWFtYm8gV2VnCisxOlNSOlNVUjpTVVJJTkFNRTpTSVBBTElXSU5JOkJvdmVuIFN1cmluYW1lCisyOlNSOlNVUjpTVVJJTkFNRTpTSVBBTElXSU5JOkJ2ZW4gU2FyYW1hY2NhCiszOlNSOlNVUjpTVVJJTkFNRTpTSVBBTElXSU5JOkNvZXJvZW5pCis0OlNSOlNVUjpTVVJJTkFNRTpTSVBBTElXSU5JOkNvcHBlbmFtZQorNTpTUjpTVVI6U1VSSU5BTUU6U0lQQUxJV0lOSTpLYWJhbGVibworNjpTUjpTVVI6U1VSSU5BTUU6U0lQQUxJV0lOSTpUYXBhbmFob255CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvU1ZOL1NWTl9BRE1JTjFfTEVYLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9TVk4vU1ZOX0FETUlOMV9MRVgudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkwZGI5OGEKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvU1ZOL1NWTl9BRE1JTjFfTEVYLnR4dApAQCAtMCwwICsxLDE2NiBAQAorMTpTSS0wMDpTSTpBSkRPVkVJTkEKKzI6U0ktOTA6U0k6QUxFQworMzpTSS0wMzM6U0k6QUxPVkNJCis0OlNJLTAwMjpTSTpCRUxUSU5DSQorNTpTSS00ODpTSTpCRU5FRElLVAorNjpTSS00OTpTSTpCSVNUUklDQSBPQiBTT1RMSQorNzpTSS0wMDM6U0k6QkxFRAorODpTSS01MDpTSTpCTE9LRQorOTpTSS0wMDQ6U0k6Qk9ISU5KCisxMDpTSS0wMDU6U0k6Qk9ST1ZOSUNBCisxMTpTSS0wMDY6U0k6Qk9WRUMKKzEyOlNJLTU6U0k6QlJBU0xPVkVFCisxMzpTSS0wMDc6U0k6QlJEQQorMTQ6U0ktMDA5OlNJOkJSRUlDRQorMTU6U0ktMDA4OlNJOkJSRVpPVklDQQorMTY6U0ktNTI6U0k6Q0FOS09WQQorMTc6U0ktMDpTSTpDRUxKRQorMTg6U0ktMDI6U0k6Q0VSS0xKRSBOQSBHT1JFTkpTS0VNCisxOTpTSS0wMzpTSTpDRVJLTklDQQorMjA6U0ktMDQ6U0k6Q0VSS05PCisyMTpTSS01MzpTSTpDRVJLVkVOSkFLCisyMjpTSS0wODpTSTpERVNUUk5JSworMjM6U0ktMDk6U0k6RElWQUVBCisyNDpTSS01NDpTSTpET0JKRQorMjU6U0ktMDIwOlNJOkRPQlJFUE9MSkUKKzI2OlNJLTU1OlNJOkRPQlJOQQorMjc6U0ktNTY6U0k6RE9CUk9WTklLW0RPQlJPTkFLXQorMjg6U0ktMDIyOlNJOkRPTCBQUkkgTEpVQkxKQU5JCisyOTpTSS01NzpTSTpET0xFTkpTS0UgVE9QTElDRQorMzA6U0ktMDIzOlNJOkRPTUFMRQorMzE6U0ktMDI0OlNJOkRPUk5BVkEKKzMyOlNJLTAyNTpTSTpEUkFWT0dSQUQKKzMzOlNJLTAyNjpTSTpEVVBMRUsKKzM0OlNJLTQ2OlNJOkVMRVpOSUtJCiszNTpTSS04MzpTSTpFTVBFVEVSIFZSVE9KQkEKKzM2OlNJLTk6U0k6RU5USkVSTkVKCiszNzpTSS0yMDpTSTpFTlRKVVIgUFJJIENFTEpVCiszODpTSS0wMjc6U0k6R09SRU5KQSBWQVMgUE9MSkFORQorMzk6U0ktMDI4OlNJOkdPUklOSUNBCis0MDpTSS0wMjk6U0k6R09STkpBIFJBREdPTkEKKzQxOlNJLTAzMDpTSTpHT1JOSkkgR1JBRAorNDI6U0ktNTg6U0k6R1JBRAorNDM6U0ktMDMyOlNJOkdST1NVUExKRQorNDQ6U0ktNTk6U0k6SEFKRElOQQorNDU6U0ktNjpTSTpIT0RPW0hPRE9TXQorNDY6U0ktNjA6U0k6SE9FRSBTTElWTklDQQorNDc6U0ktNjI6U0k6SE9SSlVMCis0ODpTSS0wMzQ6U0k6SFJBU1ROSUsKKzQ5OlNJLTAzNTpTSTpIUlBFTEpFIEtPWklOQQorNTA6U0ktMDM2OlNJOklEUklKQQorNTE6U0ktMDM3OlNJOklHCis1MjpTSS0wMzg6U0k6SUxJUlNLQSBCSVNUUklDQQorNTM6U0ktNDc6U0k6SVJJCis1NDpTSS05MjpTSTpJUk9WTklDQQorNTU6U0ktMDM5OlNJOklWQU5FTkEgR09SSUNBCis1NjpTSS0wNDA6U0k6SVpPTEFbSVNPTEFdCis1NzpTSS02MzpTSTpKRVpFUlNLTworNTg6U0ktMDQyOlNJOkpVUklOQ0kKKzU5OlNJLTA0MzpTSTpLQU1OSUsKKzYwOlNJLTA0NDpTSTpLQU5BTAorNjE6U0ktMDQ1OlNJOktJRFJJRUVWTworNjI6U0ktMDQ2OlNJOktPQkFSSUQKKzYzOlNJLTA0NzpTSTpLT0JJTEpFCis2NDpTSS0wNDg6U0k6S09FRVZKRQorNjU6U0ktMjI6U0k6S09GSkEgTE9LQQorNjY6U0ktMjM6U0k6S09GTEpJQ0EKKzY3OlNJLTA0OTpTSTpLT01FTgorNjg6U0ktNjQ6U0k6S09NRU5EQQorNjk6U0ktMDUwOlNJOktPUEVSW0NBUE9ESVNUUklBXQorNzA6U0ktNjU6U0k6S09TVEVMCis3MTpTSS0wNTI6U0k6S1JBTkoKKzcyOlNJLTA1MzpTSTpLUkFOSlNLQSBHT1JBCis3MzpTSS02NjpTSTpLUklFVkNJCis3NDpTSS0wNTQ6U0k6S1JLTworNzU6U0ktMDU1OlNJOktVTkdPVEEKKzc2OlNJLTA1NjpTSTpLVVpNQQorNzc6U0ktMDU3OlNJOkxBS08KKzc4OlNJLTA1ODpTSTpMRU5BUlQKKzc5OlNJLTA1OTpTSTpMRU5EQVZBW0xFTkRWQV0KKzgwOlNJLTA2MDpTSTpMSVRJSkEKKzgxOlNJLTA2MjpTSTpMSlVCTk8KKzgyOlNJLTA2MzpTSTpMSlVUT01FUgorODM6U0ktMDY0OlNJOkxPR0FURUMKKzg0OlNJLTA2NTpTSTpMT0tBIERPTElOQQorODU6U0ktMDY2OlNJOkxPS0kgUE9UT0sKKzg2OlNJLTY3OlNJOkxPVlJFTkMgTkEgUE9IT1JKVQorODc6U0ktMDY3OlNJOkxVRUUKKzg4OlNJLTA2ODpTSTpMVUtPVklDQQorODk6U0ktMDY5OlNJOk1BSlBFUksKKzkwOlNJLTA3MDpTSTpNQVJJQk9SCis5MTpTSS0yNDpTSTpNQVJKRSBQUkkgSkVMQUgKKzkyOlNJLTY4OlNJOk1BUktPVkNJCis5MzpTSS0yNTpTSTpNQVJUTk8gT0IgUEFLSQorOTQ6U0ktOTQ6U0k6TUFSVE5PIFBSSSBMSVRJSkkKKzk1OlNJLTA3NDpTSTpNRUlDQQorOTY6U0ktMDcyOlNJOk1FTkdFCis5NzpTSS0wNzM6U0k6TUVUTElLQQorOTg6U0ktNjk6U0k6TUlLTEFWIE5BIERSQVZTS0VNIFBPTEpVCis5OTpTSS0wNzU6U0k6TUlSRU4gS09TVEFOSkVWSUNBCisxMDA6U0ktNzA6U0k6TUlSTkEgUEVFCisxMDE6U0ktMDc2OlNJOk1JU0xJTkpBCisxMDI6U0ktMDc3OlNJOk1PUkFWRUUKKzEwMzpTSS0wNzg6U0k6TU9SQVZTS0UgVE9QTElDRQorMTA0OlNJLTA3OTpTSTpNT1pJUkpFCisxMDU6U0ktMDgwOlNJOk1VUlNLQSBTT0JPVEEKKzEwNjpTSS0wODI6U0k6TkFLTE8KKzEwNzpTSS0wODM6U0k6TkFaQVJKRQorMTA4OlNJLTA4NDpTSTpOT1ZBIEdPUklDQQorMTA5OlNJLTA4NTpTSTpOT1ZPIE1FU1RPCisxMTA6U0ktMDg2OlNJOk9EUkFOQ0kKKzExMTpTSS03OlNJOk9QTE9UTklDQQorMTEyOlNJLTA4NzpTSTpPUk1PCisxMTM6U0ktMDg4OlNJOk9TSUxOSUNBCisxMTQ6U0ktMjY6U0k6T1RBTkoKKzExNTpTSS0wODk6U0k6UEVTTklDQQorMTE2OlNJLTA5MDpTSTpQSVJBTltQSVJBTk9dCisxMTc6U0ktMDkyOlNJOlBPREVFVFJURUsKKzExODpTSS03MjpTSTpQT0RMRUhOSUsKKzExOTpTSS0wOTM6U0k6UE9EVkVMS0EKKzEyMDpTSS03MzpTSTpQT0xaRUxBCisxMjE6U0ktMDk0OlNJOlBPU1RPSk5BCisxMjI6U0ktNzQ6U0k6UFJFQk9MRAorMTIzOlNJLTA5NTpTSTpQUkVERFZPUgorMTI0OlNJLTc1OlNJOlBSRVZBTEpFCisxMjU6U0ktMDk2OlNJOlBUVUoKKzEyNjpTSS0wOTc6U0k6UFVDT05DSQorMTI3OlNJLTA5OTpTSTpSQURFRUUKKzEyODpTSS0wOTg6U0k6UkFFRSBGUkFNCisxMjk6U0ktNzY6U0k6UkFaS1JJSkUKKzEzMDpTSS0wNTpTSTpSRU5PVkNJCisxMzE6U0ktNzc6U0k6UklCTklDQSBOQSBQT0hPUkpVCisxMzI6U0ktMDY6U0k6Uk5BIE5BIEtPUk9LRU0KKzEzMzpTSS0wNzpTSTpSTk9NRUxKCisxMzQ6U0ktOlNJOlNFQU5BCisxMzU6U0ktNzg6U0k6U0VMTklDQSBPQiBEUkFWSQorMTM2OlNJLTAxOlNJOlNMT1ZFTklKQQorMTM3OlNJLTI6U0k6U0xPVkVOSiBHUkFERUMKKzEzODpTSS0zOlNJOlNMT1ZFTlNLQSBCSVNUUklDQQorMTM5OlNJLTQ6U0k6U0xPVkVOU0tFIEtPTkpJQ0UKKzE0MDpTSS03OTpTSTpTT0RSQUlDQQorMTQxOlNJLTgwOlNJOlNPTEVBVkEKKzE0MjpTSS04OlNJOlNWRVRBIEFOQQorMTQzOlNJLTgyOlNJOlNWRVRJIEFORFJBIFYgU0xPVkVOU0tJSCBHT1JJQ0FICisxNDQ6U0ktODQ6U0k6VEFCT1IKKzE0NTpTSS0yODpTSTpUT0xNSU4KKzE0NjpTSS0yNzpTSTpUT1JFCisxNDc6U0ktMjk6U0k6VFJCT1ZMSkUKKzE0ODpTSS0zMDpTSTpUUkVCTkpFCisxNDk6U0ktODU6U0k6VFJOT1ZTS0EgVkFTCisxNTA6U0ktODY6U0k6VFJaSU4KKzE1MTpTSS0zMjpTSTpUVVJOSUVFCisxNTI6U0ktOTM6U0k6VUVNQkVSSworMTUzOlNJLTMzOlNJOlZFTEVOSkUKKzE1NDpTSS04NzpTSTpWRUxJS0EgUE9MQU5BCisxNTU6U0ktMzQ6U0k6VkVMSUtFIExBRUUKKzE1NjpTSS04ODpTSTpWRVJFSgorMTU3OlNJLTM1OlNJOlZJREVNCisxNTg6U0ktMzY6U0k6VklQQVZBCisxNTk6U0ktMzc6U0k6VklUQU5KRQorMTYwOlNJLTM4OlNJOlZPRElDRQorMTYxOlNJLTM5OlNJOlZPSk5JSworMTYyOlNJLTg5OlNJOlZSQU5TS08KKzE2MzpTSS00MDpTSTpWUkhOSUtBCisxNjQ6U0ktNDI6U0k6WkFHT1JKRSBPQiBTQVZJCisxNjU6U0ktNDM6U0k6WkFWUkUKKzE2NjpTSS00NDpTSTpaUkVFRQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L1NWTi9TVk5fQURNSU4yX0xFWC50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvU1ZOL1NWTl9BRE1JTjJfTEVYLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNjlkZTI5Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L1NWTi9TVk5fQURNSU4yX0xFWC50eHQKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9TV0UvU1dFX0FETUlOMV9MRVgudHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L1NXRS9TV0VfQURNSU4xX0xFWC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmI5NDU4YgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9TV0UvU1dFX0FETUlOMV9MRVgudHh0CkBAIC0wLDAgKzEsMjggQEAKKzE6U0UtSzpTRTpCTEVLSU5HRQorMjpTRS1CSDpTRTpClEhVUworMzpTRS1XOlNFOkRBTEFSTkFTIExOIFtTRSAyMF0KKzQ6U0UtSTpTRTpHT1RMQU5ECis1OlNFLVg6U0U6R4RWTEVCT1JHCis2OlNFLU46U0U6SEFMTEFORAorNzpTRS1GOlNFOkqUTkuUUElORworODpTRS1aOlNFOkqETVRMQU5ECis5OlNFLUg6U0U6S0FMTUFSCisxMDpTRS1LUDpTRTpLT1BQQVJCRVJHCisxMTpTRS1SSTpTRTpLUklTVElBTlNUQUQKKzEyOlNFLUc6U0U6S1JPTk9CRVJHCisxMzpTRS1NTzpTRTpNQUxNlEhVUworMTQ6U0UtQkQ6U0U6Tk9SUkJPVFRFTgorMTU6U0UtVDpTRTpPUkVCUk8KKzE2OlNFLVNUOlNFOk9TVEVSR5RUTEFORAorMTc6U0UtU0s6U0U6U0tBUkFCT1JHCisxODpTRS1NOlNFOlNLTkUgTE4gW1NFIDJdCisxOTpTRS1FOlNFOlNURVJHVExBTkRTIExOIFtTRSAwNV0KKzIwOlNFLUFCOlNFOlNUT0NLSE9MTQorMjE6U0UtRDpTRTpTlFJNTEFORAorMjI6U0UtQzpTRTpVUFBTQUxBCisyMzpTRS1VOlNFOlYgU1RNQU5MQU5ECisyNDpTRS1POlNFOlZTVFJBIEdUQUxBTkRTIExOIFtTRSA0XQorMjU6U0UtUzpTRTpWhFJNTEFORAorMjY6U0UtQUM6U0U6VoRTVEVSQk9UVEVOCisyNzpTRS1ZOlNFOlaEU1RFUk5PUlJMQU5ECisyODpTRS1MOlNFOlpMVlNCT1JHCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvU1dFL1NXRV9BRE1JTjJfTEVYLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9TV0UvU1dFX0FETUlOMl9MRVgudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2OWRlMjkKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvU1dFL1NXRV9BRE1JTjJfTEVYLnR4dApkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L1NZQy9TWUNfQURNSU4xX0xFWC50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvU1lDL1NZQ19BRE1JTjFfTEVYLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNWRlNzgxCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L1NZQy9TWUNfQURNSU4xX0xFWC50eHQKQEAgLTAsMCArMSwyIEBACisxOlNDLU06U0M6TUFIRSBJU0xBTkQKKzI6U0MtUDpTQzpQUkFTTElOIElTTEFORApkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L1NZQy9TWUNfQURNSU4yX0xFWC50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvU1lDL1NZQ19BRE1JTjJfTEVYLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZGY1ODRjCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L1NZQy9TWUNfQURNSU4yX0xFWC50eHQKQEAgLTAsMCArMSwyIEBACisxOlNDOlNZQzpTRVlDSEVMTEVTOk1haGUgSXNsYW5kOlNZQy5MMi4yCisxOlNDOlNZQzpTRVlDSEVMTEVTOlByYXNsaW4gSXNsYW5kOlNZQy5MMi4xCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvU1lSL1NZUl9BRE1JTjFfTEVYLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9TWVIvU1lSX0FETUlOMV9MRVgudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI4NWM4MmMKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvU1lSL1NZUl9BRE1JTjFfTEVYLnR4dApAQCAtMCwwICsxLDE0IEBACisxOlNZLUhMOlNZOkFMRVBQTyAoSEFMQUIpCisyOlNZLVJBOlNZOkFSIFJBUVFBSAorMzpTWS1TVTpTWTpBUyBTVVdBWURBCis0OlNZLURSOlNZOkRBUkEKKzU6U1ktRFk6U1k6REFZUiBBWiBaQVdSCis2OlNZLURJOlNZOkRJTUFTSFEKKzc6U1ktSE06U1k6SEFNQUgKKzg6U1ktSEE6U1k6SEFTQUtBIChBTCBIQUtTQSkKKzk6U1ktSEk6U1k6SE9NUyAoSElNUykKKzEwOlNZLUlEOlNZOklETElCCisxMTpTWS1RVTpTWTpLVU5FSVRSQSAoRUwgUVVOQVlUSVJBSAorMTI6U1ktTEE6U1k6TEFUVEFLSUEgKEFMIExBREhJUUlZQUgKKzEzOlNZLVJEOlNZOlJGIERJTUFTSFEKKzE0OlNZLVRBOlNZOlRBUlRVUwpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L1NZUi9TWVJfQURNSU4yX0xFWC50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvU1lSL1NZUl9BRE1JTjJfTEVYLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNjhmMjk3Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L1NZUi9TWVJfQURNSU4yX0xFWC50eHQKQEAgLTAsMCArMSwxMyBAQAorMTpTWTpTWVI6U1lSSUE6SGFzYWthIChBbCBIYWtzYSk6U1lSLkwyLjgKKzE6U1k6U1lSOlNZUklBOkRpbWFzaHE6U1lSLkwyLjEKKzE6U1k6U1lSOlNZUklBOkFyIFJhcXFhaDpTWVIuTDIuMgorMTpTWTpTWVI6U1lSSUE6TGF0dGFraWEgKEFsIExhZGhpcWl5YWg6U1lSLkwyLjQKKzE6U1k6U1lSOlNZUklBOkFzIFN1d2F5ZGE6U1lSLkwyLjEwCisxOlNZOlNZUjpTWVJJQTpUYXJ0dXM6U1lSLkwyLjEzCisxOlNZOlNZUjpTWVJJQTpBbGVwcG8gKEhhbGFiKTpTWVIuTDIuOQorMTpTWTpTWVI6U1lSSUE6S3VuZWl0cmEgKEVsIFF1bmF5dGlyYWg6U1lSLkwyLjMKKzE6U1k6U1lSOlNZUklBOkhvbXMgKEhpbXMpOlNZUi5MMi43CisxOlNZOlNZUjpTWVJJQTpIYW1haDpTWVIuTDIuMTEKKzE6U1k6U1lSOlNZUklBOklkbGliOlNZUi5MMi41CisxOlNZOlNZUjpTWVJJQTpEYXJhOlNZUi5MMi4xMgorMTpTWTpTWVI6U1lSSUE6RGF5ciBBeiBaYXdyOlNZUi5MMi42CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvVENEL1RDRF9BRE1JTjFfTEVYLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9UQ0QvVENEX0FETUlOMV9MRVgudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ4NzU1MzEKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvVENEL1RDRF9BRE1JTjFfTEVYLnR4dApAQCAtMCwwICsxLDE0IEBACisxOlRELUJBOlREOkJBVEhBCisyOlRELUJJOlREOkJJTFRJTkUKKzM6VEQtQkVUOlREOkJPUktPVSBFTk5FREkgVElCRVNUSQorNDpURC1DQjpURDpDSEFSSSBCQUdVSVJNSQorNTpURC1HUjpURDpHVUVSQQorNjpURC1LQTpURDpLQU5FTQorNzpURC1MQzpURDpMQUtFCis4OlRELUxPOlREOkxPR09ORSBPQ0NJREVOCis5OlRELUxSOlREOkxPR09ORSBPUklFTlRBCisxMDpURC1NSzpURDpNQVlPIEtFQkJJCisxMTpURC1NQzpURDpNT1lFTiBDSEFSSQorMTI6VEQtT0Q6VEQ6T1VBRERBSQorMTM6VEQtU0E6VEQ6U0FMQU1BVAorMTQ6VEQtVEE6VEQ6VEFOREpJTEUKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9UQ0QvVENEX0FETUlOMl9MRVgudHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L1RDRC9UQ0RfQURNSU4yX0xFWC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDEwNWQzMwotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9UQ0QvVENEX0FETUlOMl9MRVgudHh0CkBAIC0wLDAgKzEsMTQgQEAKKzE6VEQ6VENEOkNIQUQ6TGFrZTpCb2wKKzE6VEQ6VENEOkNIQUQ6Q2hhcmktQmFndWlybWk6TWFzc2Frb3J5CisxOlREOlRDRDpDSEFEOk1veWVuLUNoYXJpOkt5YWJlCisxOlREOlRDRDpDSEFEOkthbmVtOk5va291CisxOlREOlRDRDpDSEFEOkJhdGhhOkRqZWRhYQorMTpURDpUQ0Q6Q0hBRDpNYXlvLUtlYmJpOkJvbmdvcgorMTpURDpUQ0Q6Q0hBRDpMb2dvbmUgT3JpZW50YTpEb2JhCisxOlREOlRDRDpDSEFEOlNhbGFtYXQ6QWJvdSBEZWlhCisxOlREOlRDRDpDSEFEOkJvcmtvdS1Fbm5lZGktVGliZXN0aTpUaWJlc3RpCisxOlREOlRDRDpDSEFEOkxvZ29uZSBPY2NpZGVuOkJlbm95ZQorMTpURDpUQ0Q6Q0hBRDpUYW5kamlsZTpMYWkKKzE6VEQ6VENEOkNIQUQ6T3VhZGRhaTpBYmVjaGUKKzE6VEQ6VENEOkNIQUQ6R3VlcmE6TWFuZ2FsbWUKKzE6VEQ6VENEOkNIQUQ6QmlsdGluZTpJcmliYQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L1RHTy9UR09fQURNSU4xX0xFWC50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvVEdPL1RHT19BRE1JTjFfTEVYLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xODM5MWIzCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L1RHTy9UR09fQURNSU4xX0xFWC50eHQKQEAgLTAsMCArMSw1IEBACisxOlRHLUM6VEc6Q0VOVFJFIFtDRU5UUkUxXQorMjpURy1LOlRHOktBUkEKKzM6VEctTTpURzpNQVJJVElNRQorNDpURy1QOlRHOlBMQVRFQVVYCis1OlRHLVM6VEc6U0FWQU5ORVMgW1NBVkFORVNdCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvVEdPL1RHT19BRE1JTjJfTEVYLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9UR08vVEdPX0FETUlOMl9MRVgudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIzN2QzMTQKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvVEdPL1RHT19BRE1JTjJfTEVYLnR4dApAQCAtMCwwICsxLDIxIEBACisxOlRHOlRHTzpUT0dPOkNlbnRyZTpTb3RvdWJvdWEKKzI6VEc6VEdPOlRPR086Q2VudHJlOlRjaGFtYmEgKE55YWxhKQorMzpURzpUR086VE9HTzpDZW50cmU6VGNoYXVkam8KKzE6VEc6VEdPOlRPR086S2FyYTpBc3NvbGkKKzI6VEc6VEdPOlRPR086S2FyYTpCYXNzYXIKKzM6VEc6VEdPOlRPR086S2FyYTpCaW1haAorNDpURzpUR086VE9HTzpLYXJhOkRvdWZlbGdvdQorNTpURzpUR086VE9HTzpLYXJhOktlcmFuCis2OlRHOlRHTzpUT0dPOkthcmE6S296YWgKKzE6VEc6VEdPOlRPR086TWFyaXRpbWU6R29sZmUgKGluY2wgTG9tZSkKKzI6VEc6VEdPOlRPR086TWFyaXRpbWU6TGFjcworMzpURzpUR086VE9HTzpNYXJpdGltZTpWbworNDpURzpUR086VE9HTzpNYXJpdGltZTpZb3RvCis1OlRHOlRHTzpUT0dPOk1hcml0aW1lOlppbworMTpURzpUR086VE9HTzpTYXZhbmVzOk90aQorMjpURzpUR086VE9HTzpTYXZhbmVzOlRvbmUKKzE6VEc6VEdPOlRPR086UGxhdGVhdXg6QW1vdQorMjpURzpUR086VE9HTzpQbGF0ZWF1eDpIYWhvCiszOlRHOlRHTzpUT0dPOlBsYXRlYXV4Oktsb3RvCis0OlRHOlRHTzpUT0dPOlBsYXRlYXV4Ok9nb3UKKzU6VEc6VEdPOlRPR086UGxhdGVhdXg6V2F3YQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L1RIQS9USEFfQURNSU4xX0xFWC50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvVEhBL1RIQV9BRE1JTjFfTEVYLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZDU2ZWFjCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L1RIQS9USEFfQURNSU4xX0xFWC50eHQKQEAgLTAsMCArMSw3MyBAQAorMTpUSC0zNzpUSDpBTU5BVCBDSEFST0VOCisyOlRILTU6VEg6QU5HIFRIT05HCiszOlRILTA6VEg6QkFOR0tPSworNDpUSC0zOlRIOkJVUkkgUkFNCis1OlRILUM6VEg6Q0VOVFJBTAorNjpUSC0yNDpUSDpDSEFDSE9FTkdTQU8KKzc6VEgtODpUSDpDSEFJIE5BVAorODpUSC0zNjpUSDpDSEFJWUFQSFVNCis5OlRILTIyOlRIOkNIQU5USEFCVVJJCisxMDpUSC01MDpUSDpDSElBTkcgTUFJCisxMTpUSC01NzpUSDpDSElBTkcgUkFJCisxMjpUSC0yMDpUSDpDSE9OIEJVUkkKKzEzOlRILTg2OlRIOkNIVU1QSE9OCisxNDpUSC00NjpUSDpLQUxBU0lOCisxNTpUSC02MjpUSDpLQU1QSEFFTkcgUEhFVAorMTY6VEgtNzpUSDpLQU5DSEFOQUJVUkkKKzE3OlRILTQwOlRIOktIT04gS0FFTgorMTg6VEgtNTI6VEg6TEFNUEFORworMTk6VEgtNDI6VEg6TE9FSQorMjA6VEgtNjpUSDpMT1AgQlVSSQorMjE6VEgtNTg6VEg6TUFFIEhPTkcgU09OCisyMjpUSC00NDpUSDpNQUhBIFNBUkFLSEFNCisyMzpUSC00OTpUSDpNVUtEQUhBTgorMjQ6VEgtMjY6VEg6TkFLSE9OIE5BWU9LCisyNTpUSC03MzpUSDpOQUtIT04gUEFUSE9NCisyNjpUSC00ODpUSDpOQUtIT04gUEhBTk9NCisyNzpUSC0zMDpUSDpOQUtIT04gUkFUQ0hBU0lNQQorMjg6VEgtNjA6VEg6TkFLSE9OIFNBV0FOCisyOTpUSC04MDpUSDpOQUtIT04gU0kgVEhBTU1BUkFUCiszMDpUSC01NTpUSDpOQU4KKzMxOlRILTk2OlRIOk5BUkFUSElXQVQKKzMyOlRILTM5OlRIOk5PTkcgQlVBIExBTSBQSFUKKzMzOlRILTQzOlRIOk5PTkcgS0hBSQorMzQ6VEgtMjpUSDpOT05USEFCVVJJCiszNTpUSC1ORTpUSDpOT1JUSEVBU1RFUk4KKzM2OlRILU46VEg6Tk9SVEhFUk4KKzM3OlRILTk0OlRIOlBBVFRBTkkKKzM4OlRILTgyOlRIOlBIQU5HTkdBCiszOTpUSC05MzpUSDpQSEFUVEhBTFVORworNDA6VEgtNTY6VEg6UEhBWUFPCis0MTpUSC02NzpUSDpQSEVUQ0hBQlVOCis0MjpUSC03NjpUSDpQSEVUQ0hBQlVSSQorNDM6VEgtNjY6VEg6UEhJQ0hJVAorNDQ6VEgtNjU6VEg6UEhJVFNBTlVMT0sKKzQ1OlRILTQ6VEg6UEhSQSBOQUtIT04gU0kgQVlVVFRIQVlBCis0NjpUSC01NDpUSDpQSFJBRQorNDc6VEgtODM6VEg6UEhVS0VUCis0ODpUSC0yNTpUSDpQUkFDSElOIEJVUkkKKzQ5OlRILTc3OlRIOlBSQUNIVUFQIEtISVJJIEtIQU4KKzUwOlRILTg1OlRIOlJBTk9ORworNTE6VEgtNzA6VEg6UkFUQ0hBQlVSSQorNTI6VEgtNDU6VEg6Uk9JIEVUCis1MzpUSC0yNzpUSDpTQSBLQUVPCis1NDpUSC00NzpUSDpTQUtPTiBOQUtIT04KKzU1OlRILTgxOlRIOlNBTVVUIFBSQUtBTgorNTY6VEgtNzQ6VEg6U0FNVVQgU0FLSE9OCis1NzpUSC03NTpUSDpTQU1VVCBTT05HS0hSQU0KKzU4OlRILTc5OlRIOlNBUkFCVVJJCis1OTpUSC05OlRIOlNBVFVOCis2MDpUSC0zMzpUSDpTSSBTQSBLRVQKKzYxOlRILTkwOlRIOlNPTkdLSExBCis2MjpUSC1TOlRIOlNPVVRIRVJOCis2MzpUSC02NDpUSDpTVUtIT1RIQUkKKzY0OlRILTcyOlRIOlNVUEhBTiBCVVJJCis2NTpUSC04NDpUSDpTVVJBVCBUSEFOSQorNjY6VEgtMzI6VEg6U1VSSU4KKzY3OlRILTYzOlRIOlRBSworNjg6VEgtOTI6VEg6VFJBTkcKKzY5OlRILTIzOlRIOlRSQVQKKzcwOlRILTM0OlRIOlVCT04gUkFUQ0hBVEhBTkkKKzcxOlRILTUzOlRIOlVUVEFSQURJVAorNzI6VEgtOTU6VEg6WUFMQQorNzM6VEgtMzU6VEg6WUFTT1RIT04KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9USEEvVEhBX0FETUlOMl9MRVgudHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L1RIQS9USEFfQURNSU4yX0xFWC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWFiNjlhNwotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9USEEvVEhBX0FETUlOMl9MRVgudHh0CkBAIC0wLDAgKzEsNzIgQEAKKzE6VEg6VEhBOlRIQUlMQU5EOlNvdXRoZXJuOkNodW1waG9uCisyOlRIOlRIQTpUSEFJTEFORDpTb3V0aGVybjpLcmFiaQorMzpUSDpUSEE6VEhBSUxBTkQ6U291dGhlcm46TmFraG9uIFRoYW1tYXJhdAorNDpUSDpUSEE6VEhBSUxBTkQ6U291dGhlcm46TmFyYXRoaXdhdAorNTpUSDpUSEE6VEhBSUxBTkQ6U291dGhlcm46UGF0dGFuaQorNjpUSDpUSEE6VEhBSUxBTkQ6U291dGhlcm46UGhhbmduZ2EKKzc6VEg6VEhBOlRIQUlMQU5EOlNvdXRoZXJuOlBoYXR0aGFsdW5nCis4OlRIOlRIQTpUSEFJTEFORDpTb3V0aGVybjpQaHVrZXQKKzk6VEg6VEhBOlRIQUlMQU5EOlNvdXRoZXJuOlJhbm9uZworMTA6VEg6VEhBOlRIQUlMQU5EOlNvdXRoZXJuOlNhdHVuCisxMTpUSDpUSEE6VEhBSUxBTkQ6U291dGhlcm46U29uZ2tobGEKKzEyOlRIOlRIQTpUSEFJTEFORDpTb3V0aGVybjpTdXJhdCBUaGFuaQorMTM6VEg6VEhBOlRIQUlMQU5EOlNvdXRoZXJuOlRyYW5nCisxNDpUSDpUSEE6VEhBSUxBTkQ6U291dGhlcm46WWFsYQorMTpUSDpUSEE6VEhBSUxBTkQ6Tm9ydGhlYXN0ZXJuOkJ1cmkgUnVtCisyOlRIOlRIQTpUSEFJTEFORDpOb3J0aGVhc3Rlcm46Q2hhaXlhcGh1bQorMzpUSDpUSEE6VEhBSUxBTkQ6Tm9ydGhlYXN0ZXJuOkthbGFzaW4KKzQ6VEg6VEhBOlRIQUlMQU5EOk5vcnRoZWFzdGVybjpLaG9uIEthZW4KKzU6VEg6VEhBOlRIQUlMQU5EOk5vcnRoZWFzdGVybjpMb2VpCis2OlRIOlRIQTpUSEFJTEFORDpOb3J0aGVhc3Rlcm46TWFoYSBTYXJha2hhbQorNzpUSDpUSEE6VEhBSUxBTkQ6Tm9ydGhlYXN0ZXJuOk5ha2hvbiBQaGFub20gJiBNdWtkYWhhbgorODpUSDpUSEE6VEhBSUxBTkQ6Tm9ydGhlYXN0ZXJuOk5ha2hvbiBSYXRjaGFzaW1hCis5OlRIOlRIQTpUSEFJTEFORDpOb3J0aGVhc3Rlcm46Tm9uZyBLaGFpCisxMDpUSDpUSEE6VEhBSUxBTkQ6Tm9ydGhlYXN0ZXJuOlJvaSBFdAorMTE6VEg6VEhBOlRIQUlMQU5EOk5vcnRoZWFzdGVybjpTYWtvbiBOYWtob24KKzEyOlRIOlRIQTpUSEFJTEFORDpOb3J0aGVhc3Rlcm46U2lzYWtldAorMTM6VEg6VEhBOlRIQUlMQU5EOk5vcnRoZWFzdGVybjpTdXJpbgorMTQ6VEg6VEhBOlRIQUlMQU5EOk5vcnRoZWFzdGVybjpVYm9uIFJhdGNoYXRoYW5pCisxNTpUSDpUSEE6VEhBSUxBTkQ6Tm9ydGhlYXN0ZXJuOlVkb24gVGhhbmkKKzE2OlRIOlRIQTpUSEFJTEFORDpOb3J0aGVhc3Rlcm46WWFzb3Rob24KKzE6VEg6VEhBOlRIQUlMQU5EOkNlbnRyYWw6QW5nIFRob25nCisyOlRIOlRIQTpUSEFJTEFORDpDZW50cmFsOkNoYWNob2VuZ3NhbworMzpUSDpUSEE6VEhBSUxBTkQ6Q2VudHJhbDpDaGFpbmF0Cis0OlRIOlRIQTpUSEFJTEFORDpDZW50cmFsOkNoYW50aGFidXJpCis1OlRIOlRIQTpUSEFJTEFORDpDZW50cmFsOkNob24gQnVyaQorNjpUSDpUSEE6VEhBSUxBTkQ6Q2VudHJhbDpLYW5jaGFuYWJ1cmkKKzc6VEg6VEhBOlRIQUlMQU5EOkNlbnRyYWw6TG9wIEJ1cmkKKzg6VEg6VEhBOlRIQUlMQU5EOkNlbnRyYWw6TmFraG9uIFBhdGhvbQorOTpUSDpUSEE6VEhBSUxBTkQ6Q2VudHJhbDpOYWtvbiBOYXlvaworMTA6VEg6VEhBOlRIQUlMQU5EOkNlbnRyYWw6Tm9udGhhYnVyaQorMTE6VEg6VEhBOlRIQUlMQU5EOkNlbnRyYWw6UGF0aHVtIFRoYW5pCisxMjpUSDpUSEE6VEhBSUxBTkQ6Q2VudHJhbDpQaGV0Y2hhIEJ1cmkKKzEzOlRIOlRIQTpUSEFJTEFORDpDZW50cmFsOlBocmFuYWtob24gU2kgQXl1dHRoYXlhCisxNDpUSDpUSEE6VEhBSUxBTkQ6Q2VudHJhbDpQcmFjaGluIEJ1cmkKKzE1OlRIOlRIQTpUSEFJTEFORDpDZW50cmFsOlByYWNodWFwIEtoaXJpIEtoYW4KKzE2OlRIOlRIQTpUSEFJTEFORDpDZW50cmFsOlJhdGNoYWJ1cmkKKzE3OlRIOlRIQTpUSEFJTEFORDpDZW50cmFsOlJheW9uZworMTg6VEg6VEhBOlRIQUlMQU5EOkNlbnRyYWw6U2FtdXQgUHJha2FuCisxOTpUSDpUSEE6VEhBSUxBTkQ6Q2VudHJhbDpTYW11dCBTYWtob24KKzIwOlRIOlRIQTpUSEFJTEFORDpDZW50cmFsOlNhbXV0IFNvbmdraHJhbQorMjE6VEg6VEhBOlRIQUlMQU5EOkNlbnRyYWw6U2FyYSBCdXJpCisyMjpUSDpUSEE6VEhBSUxBTkQ6Q2VudHJhbDpTaW5nIEJ1cmkKKzIzOlRIOlRIQTpUSEFJTEFORDpDZW50cmFsOlN1cGhhbiBCdXJpCisyNDpUSDpUSEE6VEhBSUxBTkQ6Q2VudHJhbDpUcmF0CisxOlRIOlRIQTpUSEFJTEFORDpOb3J0aGVybjpDaGlhbmcgTWFpCisyOlRIOlRIQTpUSEFJTEFORDpOb3J0aGVybjpDaGlhbmcgUmFpCiszOlRIOlRIQTpUSEFJTEFORDpOb3J0aGVybjpLYW1waGFlbmcgUGhldAorNDpUSDpUSEE6VEhBSUxBTkQ6Tm9ydGhlcm46TGFtcGFuZworNTpUSDpUSEE6VEhBSUxBTkQ6Tm9ydGhlcm46TGFtcGh1bgorNjpUSDpUSEE6VEhBSUxBTkQ6Tm9ydGhlcm46TWFlIEhvbmcgU29uCis3OlRIOlRIQTpUSEFJTEFORDpOb3J0aGVybjpOYWtob24gU2F3YW4KKzg6VEg6VEhBOlRIQUlMQU5EOk5vcnRoZXJuOk5hbgorOTpUSDpUSEE6VEhBSUxBTkQ6Tm9ydGhlcm46UGhheWFvCisxMDpUSDpUSEE6VEhBSUxBTkQ6Tm9ydGhlcm46UGhldGNoYWJ1bgorMTE6VEg6VEhBOlRIQUlMQU5EOk5vcnRoZXJuOlBoaWNoaXQKKzEyOlRIOlRIQTpUSEFJTEFORDpOb3J0aGVybjpQaGl0c2FudWxvaworMTM6VEg6VEhBOlRIQUlMQU5EOk5vcnRoZXJuOlBocmFlCisxNDpUSDpUSEE6VEhBSUxBTkQ6Tm9ydGhlcm46U3VraG90aGFpCisxNTpUSDpUSEE6VEhBSUxBTkQ6Tm9ydGhlcm46VGFrCisxNjpUSDpUSEE6VEhBSUxBTkQ6Tm9ydGhlcm46VXRoYWkgVGhhbmkKKzE3OlRIOlRIQTpUSEFJTEFORDpOb3J0aGVybjpVdHRhcmFkaXQKKzE6VEg6VEhBOlRIQUlMQU5EOkJhbmdrb2s6S3J1bmcgTWFoYW5ha2hvbiAoQmFuZ2suKQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L1RKSy9USktfQURNSU4xX0xFWC50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvVEpLL1RKS19BRE1JTjFfTEVYLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNjNlYmM1Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L1RKSy9USktfQURNSU4xX0xFWC50eHQKQEAgLTAsMCArMSw1IEBACisxOlRKLUdCOlRKOkdPUk5PIEJBREFLSFNIQU4KKzI6VEotS1Q6VEo6S0hBVExPTgorMzpUSi1MRTpUSjpMRU5JTkFCQUQKKzQ6VEotU1U6VEo6U1VHSEQKKzU6VEotVEE6VEo6VEFEWkhJS0lTVEFOIFRFUlJJVE9SSUVTCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvVEpLL1RKS19BRE1JTjJfTEVYLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9USksvVEpLX0FETUlOMl9MRVgudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU4Y2VkZDgKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvVEpLL1RKS19BRE1JTjJfTEVYLnR4dApAQCAtMCwwICsxLDQgQEAKKzE6VEo6VEpLOlRBSklLSVNUQU46S2hhdGxvbjpUSksuTDIuMQorMTpUSjpUSks6VEFKSUtJU1RBTjpHb3Juby1CYWRha2hzaGFuOlRKSy5MMi4yCisxOlRKOlRKSzpUQUpJS0lTVEFOOlRhZHpoaWtpc3RhbiBUZXJyaXRvcmllczpUSksuTDIuNAorMTpUSjpUSks6VEFKSUtJU1RBTjpMZW5pbmFiYWQ6VEpLLkwyLjMKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9US00vVEtNX0FETUlOMV9MRVgudHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L1RLTS9US01fQURNSU4xX0xFWC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzhiMTgzMAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9US00vVEtNX0FETUlOMV9MRVgudHh0CkBAIC0wLDAgKzEsOCBAQAorMTpUTS1BOlRNOkFIQUwKKzI6VE0tQjpUTTpCQUxLQU4KKzM6VE0tQ0hBOlRNOkNIQVJEWkhPVQorNDpUTS1EOlRNOkRBT0dVWgorNTpUTS1MOlRNOkxFQkFQCis2OlRNLU06VE06TUFSWQorNzpUTS1UQVM6VE06VEFTSEFVWgorODpUTS1UVDpUTTpUVVJLTUVOSVNUQU4gVEVSUklUT1JJRVMKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9US00vVEtNX0FETUlOMl9MRVgudHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L1RLTS9US01fQURNSU4yX0xFWC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmFkNzM5YwotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9US00vVEtNX0FETUlOMl9MRVgudHh0CkBAIC0wLDAgKzEsMTMgQEAKKzE6VE06VEtNOlRVUktNRU5JU1RBTjpUYXNoYXV6OlRLTS5MMi4xMQorMTpUTTpUS006VFVSS01FTklTVEFOOkNoYXJkemhvdTpUS00uTDIuMTIKKzE6VE06VEtNOlRVUktNRU5JU1RBTjpNYXJ5OlRLTS5MMi4xMworMTpUTTpUS006VFVSS01FTklTVEFOOlR1cmttZW5pc3RhbiBUZXJyaXRvcmllczpUS00uTDIuMQorMjpUTTpUS006VFVSS01FTklTVEFOOlR1cmttZW5pc3RhbiBUZXJyaXRvcmllczpUS00uTDIuMTAKKzM6VE06VEtNOlRVUktNRU5JU1RBTjpUdXJrbWVuaXN0YW4gVGVycml0b3JpZXM6VEtNLkwyLjIKKzQ6VE06VEtNOlRVUktNRU5JU1RBTjpUdXJrbWVuaXN0YW4gVGVycml0b3JpZXM6VEtNLkwyLjMKKzU6VE06VEtNOlRVUktNRU5JU1RBTjpUdXJrbWVuaXN0YW4gVGVycml0b3JpZXM6VEtNLkwyLjQKKzY6VE06VEtNOlRVUktNRU5JU1RBTjpUdXJrbWVuaXN0YW4gVGVycml0b3JpZXM6VEtNLkwyLjUKKzc6VE06VEtNOlRVUktNRU5JU1RBTjpUdXJrbWVuaXN0YW4gVGVycml0b3JpZXM6VEtNLkwyLjYKKzg6VE06VEtNOlRVUktNRU5JU1RBTjpUdXJrbWVuaXN0YW4gVGVycml0b3JpZXM6VEtNLkwyLjcKKzk6VE06VEtNOlRVUktNRU5JU1RBTjpUdXJrbWVuaXN0YW4gVGVycml0b3JpZXM6VEtNLkwyLjgKKzEwOlRNOlRLTTpUVVJLTUVOSVNUQU46VHVya21lbmlzdGFuIFRlcnJpdG9yaWVzOlRLTS5MMi45CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvVFVOL1RVTl9BRE1JTjFfTEVYLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9UVU4vVFVOX0FETUlOMV9MRVgudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg4NGFlOTMKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvVFVOL1RVTl9BRE1JTjFfTEVYLnR4dApAQCAtMCwwICsxLDI4IEBACisxOlROLTM6VE46QkVKQQorMjpUTi0yMzpUTjpCSVpFUlRFCiszOlROLTg6VE46R0FCRVMKKzQ6VE4tNzpUTjpHQUZTQQorNTpUTi0zMjpUTjpKRU5ET1VCQQorNjpUTi00OlROOktBSVJPVUFOCis3OlROLTQyOlROOktBU1NFUklORQorODpUTi03MzpUTjpLRUJJTEkKKzk6VE4tMjpUTjpMQVJJQU5BCisxMDpUTi0zMzpUTjpMRSBLRUYKKzExOlROLTUzOlROOk1BSERJQQorMTI6VE4tODI6VE46TUVERU5JTkUKKzEzOlROLTUyOlROOk1PTkFTVElSCisxNDpUTi1SMTpUTjpSRUdJT04gMQorMTU6VE4tUjI6VE46UkVHSU9OIDIKKzE2OlROLVIzOlROOlJFR0lPTiAzCisxNzpUTi1SNDpUTjpSRUdJT04gNAorMTg6VE4tUjU6VE46UkVHSU9OIDUKKzE5OlROLVI2OlROOlJFR0lPTiA2CisyMDpUTi1SNzpUTjpSRUdJT04gNworMjE6VE4tNjpUTjpTRkFYCisyMjpUTi00MzpUTjpTSURJIEJPVVpJRAorMjM6VE4tMzQ6VE46U0lMSUFOQQorMjQ6VE4tNTpUTjpTT1VTU0UKKzI1OlROLTgzOlROOlRBVEFPVUlORQorMjY6VE4tNzI6VE46VE9aRVVSCisyNzpUTi0xMDpUTjpUVU5JUworMjg6VE4tMjI6VE46WkFHSE9VQU4KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9UVU4vVFVOX0FETUlOMl9MRVgudHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L1RVTi9UVU5fQURNSU4yX0xFWC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzg2MzU0OQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9UVU4vVFVOX0FETUlOMl9MRVgudHh0CkBAIC0wLDAgKzEsMjMgQEAKKzE6VE46VFVOOlRVTklTSUE6UmVnaW9uIDM6QWwtS2FmCisyOlROOlRVTjpUVU5JU0lBOlJlZ2lvbiAzOkJlamEKKzM6VE46VFVOOlRVTklTSUE6UmVnaW9uIDM6RHNjaHVuZHViYQorNDpUTjpUVU46VFVOSVNJQTpSZWdpb24gMzpTaWxpYW5hCisxOlROOlRVTjpUVU5JU0lBOlJlZ2lvbiA2OkdhZnNhCisyOlROOlRVTjpUVU5JU0lBOlJlZ2lvbiA2OktlYmlsaQorMzpUTjpUVU46VFVOSVNJQTpSZWdpb24gNjpUb3pldXIKKzE6VE46VFVOOlRVTklTSUE6UmVnaW9uIDE6QXJpYW5hCisyOlROOlRVTjpUVU5JU0lBOlJlZ2lvbiAxOkJlbiBBcm91cyAoVHVuaXMgU3VkKQorMzpUTjpUVU46VFVOSVNJQTpSZWdpb24gMTpUdW5pcworMTpUTjpUVU46VFVOSVNJQTpSZWdpb24gNTpNYWhkaWEKKzI6VE46VFVOOlRVTklTSUE6UmVnaW9uIDU6TW9uYXN0aXIKKzM6VE46VFVOOlRVTklTSUE6UmVnaW9uIDU6U2ZheAorNDpUTjpUVU46VFVOSVNJQTpSZWdpb24gNTpTdXNhCisxOlROOlRVTjpUVU5JU0lBOlJlZ2lvbiA3OkdhYmVzCisyOlROOlRVTjpUVU5JU0lBOlJlZ2lvbiA3Ok1lZGVuaW5lCiszOlROOlRVTjpUVU5JU0lBOlJlZ2lvbiA3OlRhdGFvdWluZQorMTpUTjpUVU46VFVOSVNJQTpSZWdpb24gMjpCaXplcnRlCisyOlROOlRVTjpUVU5JU0lBOlJlZ2lvbiAyOk5hYnVsCiszOlROOlRVTjpUVU5JU0lBOlJlZ2lvbiAyOlNhZ2h1YW4KKzE6VE46VFVOOlRVTklTSUE6UmVnaW9uIDQ6S2Fpcm91d2FuCisyOlROOlRVTjpUVU5JU0lBOlJlZ2lvbiA0Okthc3NlcmluZQorMzpUTjpUVU46VFVOSVNJQTpSZWdpb24gNDpTaWRpIEJ1IFNhaWQKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9UVVIvVFVSX0FETUlOMV9MRVgudHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L1RVUi9UVVJfQURNSU4xX0xFWC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTdjMWZhOAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9UVVIvVFVSX0FETUlOMV9MRVgudHh0CkBAIC0wLDAgKzEsODEgQEAKKzE6VFItMDpUUjpBREFOQQorMjpUUi0wMjpUUjpBRElZQU1BTgorMzpUUi0wMzpUUjpBRllPTgorNDpUUi0wNDpUUjpBR1JJCis1OlRSLTY4OlRSOkFLU0FSQVkKKzY6VFItMDU6VFI6QU1BU1lBCis3OlRSLTA2OlRSOkFOS0FSQQorODpUUi0wNzpUUjpBTlRBTFlBCis5OlRSLTc1OlRSOkFSREFIQU4KKzEwOlRSLTA4OlRSOkFSVFZJTgorMTE6VFItMDk6VFI6QVlESU4KKzEyOlRSLTEwOlRSOkJBTElLRVNJUgorMTM6VFItNzQ6VFI6QkFSVE4KKzE0OlRSLTcyOlRSOkJBVE1BTgorMTU6VFItNjk6VFI6QkFZQlVSVAorMTY6VFItODc6VFI6QklMRUNJSworMTc6VFItMjpUUjpCSU5HT0wKKzE4OlRSLTgzOlRSOkJJVExJUworMTk6VFItNDpUUjpCT0xVCisyMDpUUi04NTpUUjpCVVJEVVIKKzIxOlRSLTkwOlRSOkJVUlNBCisyMjpUUi03OlRSOkNBTkFLS0FMRQorMjM6VFItODpUUjpDQU5LSVJJCisyNDpUUi05OlRSOkNPUlVNCisyNTpUUi0yMDpUUjpERU5JWkxJCisyNjpUUi04MjpUUjpESVlBUkJBS0lSCisyNzpUUi0yMjpUUjpFRElSTkUKKzI4OlRSLTIzOlRSOkVMQVpJRworMjk6VFItMjQ6VFI6RVJaSU5DQU4KKzMwOlRSLTI1OlRSOkVSWlVSVU0KKzMxOlRSLTI2OlRSOkVTS0lTRUhJUgorMzI6VFItMjc6VFI6R0FaSUFOVEVQCiszMzpUUi0yODpUUjpHSVJFU1VOCiszNDpUUi0yOTpUUjpHVU1VU0hBTkUKKzM1OlRSLTMwOlRSOkhBS0tBUkkKKzM2OlRSLTM6VFI6SEFUQVkKKzM3OlRSLTMzOlRSOklDRUwKKzM4OlRSLTc2OlRSOklEUgorMzk6VFItMzI6VFI6SVNQQVJUQQorNDA6VFItMzQ6VFI6SVNUQU5CVUwKKzQxOlRSLTM1OlRSOklaTUlSCis0MjpUUi1LTUE6VFI6Sy4gTUFSQVMKKzQzOlRSLTQ2OlRSOktBSFJBTUFOTUFSQQorNDQ6VFItNzg6VFI6S0FSQULcSworNDU6VFItNzA6VFI6S0FSQU1BTgorNDY6VFItMzY6VFI6S0FSUworNDc6VFItMzc6VFI6S0FTVEFNT05VCis0ODpUUi0zODpUUjpLQVlTRVJJCis0OTpUUi03OTpUUjpLSUxJUworNTA6VFItODg6VFI6S0lOS0tBTEUKKzUxOlRSLTM5OlRSOktJUktMQVJFTEkKKzUyOlRSLTQwOlRSOktJUlNFSElSCis1MzpUUi04NDpUUjpLT0NBRUxJCis1NDpUUi00MjpUUjpLT05ZQQorNTU6VFItNDM6VFI6S1VUQUhZQQorNTY6VFItNDQ6VFI6TUFMQVRZQQorNTc6VFItNDU6VFI6TUFOSVNBCis1ODpUUi00NzpUUjpNQVJESU4KKzU5OlRSLTQ4OlRSOk1VR0xBCis2MDpUUi00OTpUUjpNVVMKKzYxOlRSLTUwOlRSOk5FVlNFSElSCis2MjpUUi01OlRSOk5JR0RFCis2MzpUUi01MjpUUjpPUkRVCis2NDpUUi04MDpUUjpPU01BTklZRQorNjU6VFItNTM6VFI6UklaRQorNjY6VFItNTQ6VFI6U0FLQVJZQQorNjc6VFItNTU6VFI6U0FNU1VOCis2ODpUUi02MzpUUjpTQU5MSVVSRkEKKzY5OlRSLTU2OlRSOlNJSVJUCis3MDpUUi01NzpUUjpTSU5PUAorNzE6VFItNzM6VFI6U0lSTkFLCis3MjpUUi01ODpUUjpTSVZBUworNzM6VFItNTk6VFI6VEVLSVJEQUcKKzc0OlRSLTYwOlRSOlRPS0FUCis3NTpUUi02OlRSOlRSQUJaT04KKzc2OlRSLTYyOlRSOlRVTkNFTEkKKzc3OlRSLTY0OlRSOlVTQUsKKzc4OlRSLTY1OlRSOlZBTgorNzk6VFItNzc6VFI6WUFMT1ZBCis4MDpUUi02NjpUUjpZT1pHQVQKKzgxOlRSLTY3OlRSOlpJTkdVTERBSwpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L1RVUi9UVVJfQURNSU4yX0xFWC50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvVFVSL1RVUl9BRE1JTjJfTEVYLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wM2E0MTgxCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L1RVUi9UVVJfQURNSU4yX0xFWC50eHQKQEAgLTAsMCArMSwxMzYgQEAKKzE6VFI6VFVSOlRVUktFWTpJem1pcjpUVVIuTDIuMTAKKzI6VFI6VFVSOlRVUktFWTpJem1pcjpUVVIuTDIuMTEKKzM6VFI6VFVSOlRVUktFWTpJem1pcjpUVVIuTDIuMTIKKzQ6VFI6VFVSOlRVUktFWTpJem1pcjpUVVIuTDIuMworNTpUUjpUVVI6VFVSS0VZOkl6bWlyOlRVUi5MMi40Cis2OlRSOlRVUjpUVVJLRVk6SXptaXI6VFVSLkwyLjUKKzc6VFI6VFVSOlRVUktFWTpJem1pcjpUVVIuTDIuNgorODpUUjpUVVI6VFVSS0VZOkl6bWlyOlRVUi5MMi43Cis5OlRSOlRVUjpUVVJLRVk6SXptaXI6VFVSLkwyLjgKKzEwOlRSOlRVUjpUVVJLRVk6SXptaXI6VFVSLkwyLjkKKzE6VFI6VFVSOlRVUktFWTpTYW5saXVyZmE6VFVSLkwyLjU2CisxOlRSOlRVUjpUVVJLRVk6RXJ6dXJ1bTpUVVIuTDIuMzUKKzE6VFI6VFVSOlRVUktFWTpLYXJzOlRVUi5MMi4yOQorMTpUUjpUVVI6VFVSS0VZOkdpcmVzdW46VFVSLkwyLjIzCisxOlRSOlRVUjpUVVJLRVk6SXN0YW5idWw6VFVSLkwyLjY5CisyOlRSOlRVUjpUVVJLRVk6SXN0YW5idWw6VFVSLkwyLjcwCiszOlRSOlRVUjpUVVJLRVk6SXN0YW5idWw6VFVSLkwyLjcxCis0OlRSOlRVUjpUVVJLRVk6SXN0YW5idWw6VFVSLkwyLjcyCis1OlRSOlRVUjpUVVJLRVk6SXN0YW5idWw6VFVSLkwyLjczCis2OlRSOlRVUjpUVVJLRVk6SXN0YW5idWw6VFVSLkwyLjc0Cis3OlRSOlRVUjpUVVJLRVk6SXN0YW5idWw6VFVSLkwyLjc1Cis4OlRSOlRVUjpUVVJLRVk6SXN0YW5idWw6VFVSLkwyLjc2Cis5OlRSOlRVUjpUVVJLRVk6SXN0YW5idWw6VFVSLkwyLjc3CisxOlRSOlRVUjpUVVJLRVk6QWdyaTpUVVIuTDIuNjYKKzE6VFI6VFVSOlRVUktFWTpCYXRtYW46VFVSLkwyLjQ5CisxOlRSOlRVUjpUVVJLRVk6S29ueWE6VFVSLkwyLjEwMQorMTpUUjpUVVI6VFVSS0VZOllvemdhdDpUVVIuTDIuNTcKKzE6VFI6VFVSOlRVUktFWTpOZXZzZWhpcjpUVVIuTDIuMTI5CisxOlRSOlRVUjpUVVJLRVk6RXNraXNlaGlyOlRVUi5MMi4xMTYKKzE6VFI6VFVSOlRVUktFWTpDb3J1bTpUVVIuTDIuMzEKKzE6VFI6VFVSOlRVUktFWTpPcmR1OlRVUi5MMi4xMTUKKzE6VFI6VFVSOlRVUktFWTpUZWtpcmRhZzpUVVIuTDIuMTAwCisxOlRSOlRVUjpUVVJLRVk6VHVuY2VsaTpUVVIuTDIuMTIzCisxOlRSOlRVUjpUVVJLRVk6Q2Fua2lyaTpUVVIuTDIuNTIKKzE6VFI6VFVSOlRVUktFWTpLYXN0YW1vbnU6VFVSLkwyLjEyOAorMTpUUjpUVVI6VFVSS0VZOktheXNlcmk6VFVSLkwyLjY4CisxOlRSOlRVUjpUVVJLRVk6VmFuOlRVUi5MMi4yMQorMTpUUjpUVVI6VFVSS0VZOkVyemluY2FuOlRVUi5MMi4xNAorMTpUUjpUVVI6VFVSS0VZOkJpbGVjaWs6VFVSLkwyLjU4CisxOlRSOlRVUjpUVVJLRVk6TWFsYXR5YTpUVVIuTDIuMTMzCisxOlRSOlRVUjpUVVJLRVk6S29jYWVsaTpUVVIuTDIuMTE3CisxOlRSOlRVUjpUVVJLRVk6Q2FuYWtrYWxlOlRVUi5MMi4xNQorMjpUUjpUVVI6VFVSS0VZOkNhbmFra2FsZTpUVVIuTDIuMTYKKzM6VFI6VFVSOlRVUktFWTpDYW5ha2thbGU6VFVSLkwyLjE3Cis0OlRSOlRVUjpUVVJLRVk6Q2FuYWtrYWxlOlRVUi5MMi4xOAorNTpUUjpUVVI6VFVSS0VZOkNhbmFra2FsZTpUVVIuTDIuMTkKKzY6VFI6VFVSOlRVUktFWTpDYW5ha2thbGU6VFVSLkwyLjIwCisxOlRSOlRVUjpUVVJLRVk6QXlkaW46VFVSLkwyLjYxCisyOlRSOlRVUjpUVVJLRVk6QXlkaW46VFVSLkwyLjYyCiszOlRSOlRVUjpUVVJLRVk6QXlkaW46VFVSLkwyLjYzCisxOlRSOlRVUjpUVVJLRVk6S2FyYW1hbjpUVVIuTDIuMTM1CisxOlRSOlRVUjpUVVJLRVk6WmluZ3VsZGFrOlRVUi5MMi4yNQorMTpUUjpUVVI6VFVSS0VZOkJ1cmR1cjpUVVIuTDIuMjIKKzE6VFI6VFVSOlRVUktFWTpUcmFiem9uOlRVUi5MMi4xMzAKKzE6VFI6VFVSOlRVUktFWTpTaXJuYWs6VFVSLkwyLjUxCisxOlRSOlRVUjpUVVJLRVk6TWFuaXNhOlRVUi5MMi4xMjYKKzE6VFI6VFVSOlRVUktFWTpCaXRsaXM6VFVSLkwyLjEyMAorMTpUUjpUVVI6VFVSS0VZOktpcnNlaGlyOlRVUi5MMi4yNAorMTpUUjpUVVI6VFVSS0VZOkRpeWFyYmFraXI6VFVSLkwyLjUwCisxOlRSOlRVUjpUVVJLRVk6VXNhazpUVVIuTDIuNjAKKzE6VFI6VFVSOlRVUktFWTpBa3NhcmF5OlRVUi5MMi4xMjIKKzE6VFI6VFVSOlRVUktFWTpBbnRhbHlhOlRVUi5MMi4xMDYKKzI6VFI6VFVSOlRVUktFWTpBbnRhbHlhOlRVUi5MMi4xMDcKKzM6VFI6VFVSOlRVUktFWTpBbnRhbHlhOlRVUi5MMi4xMDgKKzQ6VFI6VFVSOlRVUktFWTpBbnRhbHlhOlRVUi5MMi4xMDkKKzU6VFI6VFVSOlRVUktFWTpBbnRhbHlhOlRVUi5MMi4xMTAKKzY6VFI6VFVSOlRVUktFWTpBbnRhbHlhOlRVUi5MMi4xMTEKKzc6VFI6VFVSOlRVUktFWTpBbnRhbHlhOlRVUi5MMi4xMTIKKzg6VFI6VFVSOlRVUktFWTpBbnRhbHlhOlRVUi5MMi4xMTMKKzk6VFI6VFVSOlRVUktFWTpBbnRhbHlhOlRVUi5MMi4xMTQKKzE6VFI6VFVSOlRVUktFWTpTaW5vcDpUVVIuTDIuMTM0CisxOlRSOlRVUjpUVVJLRVk6S2lya2xhcmVsaTpUVVIuTDIuMjcKKzE6VFI6VFVSOlRVUktFWTpTYWthcnlhOlRVUi5MMi4xMDQKKzE6VFI6VFVSOlRVUktFWTpNdWdsYTpUVVIuTDIuNzgKKzI6VFI6VFVSOlRVUktFWTpNdWdsYTpUVVIuTDIuNzkKKzM6VFI6VFVSOlRVUktFWTpNdWdsYTpUVVIuTDIuODAKKzQ6VFI6VFVSOlRVUktFWTpNdWdsYTpUVVIuTDIuODEKKzU6VFI6VFVSOlRVUktFWTpNdWdsYTpUVVIuTDIuODIKKzY6VFI6VFVSOlRVUktFWTpNdWdsYTpUVVIuTDIuODMKKzc6VFI6VFVSOlRVUktFWTpNdWdsYTpUVVIuTDIuODQKKzg6VFI6VFVSOlRVUktFWTpNdWdsYTpUVVIuTDIuODUKKzk6VFI6VFVSOlRVUktFWTpNdWdsYTpUVVIuTDIuODYKKzEwOlRSOlRVUjpUVVJLRVk6TXVnbGE6VFVSLkwyLjg3CisxMTpUUjpUVVI6VFVSS0VZOk11Z2xhOlRVUi5MMi44OAorMTI6VFI6VFVSOlRVUktFWTpNdWdsYTpUVVIuTDIuODkKKzEzOlRSOlRVUjpUVVJLRVk6TXVnbGE6VFVSLkwyLjkwCisxNDpUUjpUVVI6VFVSS0VZOk11Z2xhOlRVUi5MMi45MQorMTU6VFI6VFVSOlRVUktFWTpNdWdsYTpUVVIuTDIuOTIKKzE2OlRSOlRVUjpUVVJLRVk6TXVnbGE6VFVSLkwyLjkzCisxNzpUUjpUVVI6VFVSS0VZOk11Z2xhOlRVUi5MMi45NAorMTg6VFI6VFVSOlRVUktFWTpNdWdsYTpUVVIuTDIuOTUKKzE6VFI6VFVSOlRVUktFWTpNdXM6VFVSLkwyLjY0CisxOlRSOlRVUjpUVVJLRVk6Uml6ZTpUVVIuTDIuOTcKKzE6VFI6VFVSOlRVUktFWTpUb2thdDpUVVIuTDIuOTgKKzE6VFI6VFVSOlRVUktFWTpBbmthcmE6VFVSLkwyLjY1CisxOlRSOlRVUjpUVVJLRVk6Sy4gTWFyYXM6VFVSLkwyLjU5CisxOlRSOlRVUjpUVVJLRVk6QmF5YnVydDpUVVIuTDIuMzQKKzE6VFI6VFVSOlRVUktFWTpFbGF6aWc6VFVSLkwyLjU0CisxOlRSOlRVUjpUVVJLRVk6QWRhbmE6VFVSLkwyLjU1CisxOlRSOlRVUjpUVVJLRVk6S3V0YWh5YTpUVVIuTDIuNjcKKzE6VFI6VFVSOlRVUktFWTpCb2x1OlRVUi5MMi4yCisxOlRSOlRVUjpUVVJLRVk6RWRpcm5lOlRVUi5MMi4xMjEKKzE6VFI6VFVSOlRVUktFWTpLaW5ra2FsZTpUVVIuTDIuMTI1CisxOlRSOlRVUjpUVVJLRVk6SGFra2FyaTpUVVIuTDIuNTMKKzE6VFI6VFVSOlRVUktFWTpIYXRheTpUVVIuTDIuOTYKKzE6VFI6VFVSOlRVUktFWTpCaW5nb2w6VFVSLkwyLjEyNworMTpUUjpUVVI6VFVSS0VZOk1hcmRpbjpUVVIuTDIuMTM2CisxOlRSOlRVUjpUVVJLRVk6U2Ftc3VuOlRVUi5MMi45OQorMTpUUjpUVVI6VFVSS0VZOkFkaXlhbWFuOlRVUi5MMi4zMAorMTpUUjpUVVI6VFVSS0VZOk5pZ2RlOlRVUi5MMi4xMzEKKzE6VFI6VFVSOlRVUktFWTpHdW11c2hhbmU6VFVSLkwyLjExOAorMTpUUjpUVVI6VFVSS0VZOkdhemlhbnRlcDpUVVIuTDIuMTI0CisxOlRSOlRVUjpUVVJLRVk6SXNwYXJ0YTpUVVIuTDIuMjgKKzE6VFI6VFVSOlRVUktFWTpCdXJzYTpUVVIuTDIuMTAyCisyOlRSOlRVUjpUVVJLRVk6QnVyc2E6VFVSLkwyLjEwMworMTpUUjpUVVI6VFVSS0VZOkFtYXN5YTpUVVIuTDIuMQorMTpUUjpUVVI6VFVSS0VZOkFydHZpbjpUVVIuTDIuMTMKKzE6VFI6VFVSOlRVUktFWTpTaXZhczpUVVIuTDIuMjYKKzE6VFI6VFVSOlRVUktFWTpEZW5pemxpOlRVUi5MMi4xMTkKKzE6VFI6VFVSOlRVUktFWTpBZnlvbjpUVVIuTDIuMTMyCisxOlRSOlRVUjpUVVJLRVk6U2lpcnQ6VFVSLkwyLjEwNQorMTpUUjpUVVI6VFVSS0VZOkljZWw6VFVSLkwyLjMyCisyOlRSOlRVUjpUVVJLRVk6SWNlbDpUVVIuTDIuMzMKKzE6VFI6VFVSOlRVUktFWTpCYWxpa2VzaXI6VFVSLkwyLjM2CisyOlRSOlRVUjpUVVJLRVk6QmFsaWtlc2lyOlRVUi5MMi4zNworMzpUUjpUVVI6VFVSS0VZOkJhbGlrZXNpcjpUVVIuTDIuMzgKKzQ6VFI6VFVSOlRVUktFWTpCYWxpa2VzaXI6VFVSLkwyLjM5Cis1OlRSOlRVUjpUVVJLRVk6QmFsaWtlc2lyOlRVUi5MMi40MAorNjpUUjpUVVI6VFVSS0VZOkJhbGlrZXNpcjpUVVIuTDIuNDEKKzc6VFI6VFVSOlRVUktFWTpCYWxpa2VzaXI6VFVSLkwyLjQyCis4OlRSOlRVUjpUVVJLRVk6QmFsaWtlc2lyOlRVUi5MMi40MworOTpUUjpUVVI6VFVSS0VZOkJhbGlrZXNpcjpUVVIuTDIuNDQKKzEwOlRSOlRVUjpUVVJLRVk6QmFsaWtlc2lyOlRVUi5MMi40NQorMTE6VFI6VFVSOlRVUktFWTpCYWxpa2VzaXI6VFVSLkwyLjQ2CisxMjpUUjpUVVI6VFVSS0VZOkJhbGlrZXNpcjpUVVIuTDIuNDcKKzEzOlRSOlRVUjpUVVJLRVk6QmFsaWtlc2lyOlRVUi5MMi40OApkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L1RaQS9UWkFfQURNSU4xX0xFWC50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvVFpBL1RaQV9BRE1JTjFfTEVYLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMGFjOTNkCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L1RaQS9UWkFfQURNSU4xX0xFWC50eHQKQEAgLTAsMCArMSwyNiBAQAorMTpUWi0wOlRaOkFSVVNIQQorMjpUWi0wMjpUWjpEQVIgRVMgU0FMQUFNCiszOlRaLTAzOlRaOkRPRE9NQQorNDpUWi0wNDpUWjpJUklOR0EKKzU6VFotMDU6VFo6S0FHRVJBCis2OlRaLTA2OlRaOktBU0tBWklOSSBQRU1CQQorNzpUWi0wNzpUWjpLQVNLQVpJTkkgVU5HVUpBCis4OlRaLTA4OlRaOktJR09NQQorOTpUWi0wOTpUWjpLSUxJTUFOSkFSTworMTA6VFotMTA6VFo6S1VTSU5JIFBFTUJBCisxMTpUWi0xMTpUWjpLVVNJTkkgVU5HVUpBCisxMjpUWi0yOlRaOkxJTkRJCisxMzpUWi0yNjpUWjpNQU5ZQVJBCisxNDpUWi0zOlRaOk1BUkEKKzE1OlRaLTQ6VFo6TUJFWUEKKzE2OlRaLTU6VFo6TUpJTkkgTUFHSEFSSUJJCisxNzpUWi02OlRaOk1PUk9HT1JPCisxODpUWi03OlRaOk1UV0FSQQorMTk6VFotODpUWjpNV0FOWkEKKzIwOlRaLTk6VFo6UFdBTkkKKzIxOlRaLTIwOlRaOlJVS1dBCisyMjpUWi0xMjpUWjpSVVZVTUEKKzIzOlRaLTIyOlRaOlNISU5ZQU5HQQorMjQ6VFotMjM6VFo6U0lOR0lEQQorMjU6VFotMjQ6VFo6VEFCT1JBCisyNjpUWi0yNTpUWjpUQU5HQQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L1RaQS9UWkFfQURNSU4yX0xFWC50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvVFpBL1RaQV9BRE1JTjJfTEVYLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZDE0MThkCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L1RaQS9UWkFfQURNSU4yX0xFWC50eHQKQEAgLTAsMCArMSw5NyBAQAorMTpUWjpUWkE6VEFOWkFOSUEgVU5JVEVEIFJFUFVCTElDOkt1c2luaSBVbmd1amE6WmFuc2liYXIgQ2VudHJhbAorMjpUWjpUWkE6VEFOWkFOSUEgVU5JVEVEIFJFUFVCTElDOkt1c2luaSBVbmd1amE6WmFuc2liYXIgU291dGgKKzE6VFo6VFpBOlRBTlpBTklBIFVOSVRFRCBSRVBVQkxJQzpEb2RvbWE6RG9kb21hCisyOlRaOlRaQTpUQU5aQU5JQSBVTklURUQgUkVQVUJMSUM6RG9kb21hOktvbmRvYQorMzpUWjpUWkE6VEFOWkFOSUEgVU5JVEVEIFJFUFVCTElDOkRvZG9tYTpNcHdhcHdhCisxOlRaOlRaQTpUQU5aQU5JQSBVTklURUQgUkVQVUJMSUM6U2hpbnlhbmdhOkJhcmlhZGkKKzI6VFo6VFpBOlRBTlpBTklBIFVOSVRFRCBSRVBVQkxJQzpTaGlueWFuZ2E6S2FoYW1hCiszOlRaOlRaQTpUQU5aQU5JQSBVTklURUQgUkVQVUJMSUM6U2hpbnlhbmdhOk1hc3dhCis0OlRaOlRaQTpUQU5aQU5JQSBVTklURUQgUkVQVUJMSUM6U2hpbnlhbmdhOk1lYXR1Cis1OlRaOlRaQTpUQU5aQU5JQSBVTklURUQgUkVQVUJMSUM6U2hpbnlhbmdhOlNoaW55YW5nYQorMTpUWjpUWkE6VEFOWkFOSUEgVU5JVEVEIFJFUFVCTElDOkt1c2luaS1QZW1iYTpDaGFrZWNoYWtlCisyOlRaOlRaQTpUQU5aQU5JQSBVTklURUQgUkVQVUJMSUM6S3VzaW5pLVBlbWJhOk1rb2FuaQorMTpUWjpUWkE6VEFOWkFOSUEgVU5JVEVEIFJFUFVCTElDOkxpbmRpOktpbHdhCisyOlRaOlRaQTpUQU5aQU5JQSBVTklURUQgUkVQVUJMSUM6TGluZGk6TGluZGkKKzM6VFo6VFpBOlRBTlpBTklBIFVOSVRFRCBSRVBVQkxJQzpMaW5kaTpMaXdhbGUKKzQ6VFo6VFpBOlRBTlpBTklBIFVOSVRFRCBSRVBVQkxJQzpMaW5kaTpOYWNoaW5nd2VhCisxOlRaOlRaQTpUQU5aQU5JQSBVTklURUQgUkVQVUJMSUM6S2lsaW1hbmphcm86SGFpCisyOlRaOlRaQTpUQU5aQU5JQSBVTklURUQgUkVQVUJMSUM6S2lsaW1hbmphcm86TW9zaGkKKzM6VFo6VFpBOlRBTlpBTklBIFVOSVRFRCBSRVBVQkxJQzpLaWxpbWFuamFybzpNd2FuZ2EKKzQ6VFo6VFpBOlRBTlpBTklBIFVOSVRFRCBSRVBVQkxJQzpLaWxpbWFuamFybzpSb21ibworNTpUWjpUWkE6VEFOWkFOSUEgVU5JVEVEIFJFUFVCTElDOktpbGltYW5qYXJvOlNhbWUKKzE6VFo6VFpBOlRBTlpBTklBIFVOSVRFRCBSRVBVQkxJQzpNdHdhcmE6TWFzYXNpCisyOlRaOlRaQTpUQU5aQU5JQSBVTklURUQgUkVQVUJMSUM6TXR3YXJhOk10d2FyYQorMzpUWjpUWkE6VEFOWkFOSUEgVU5JVEVEIFJFUFVCTElDOk10d2FyYTpOZXdhbGEKKzE6VFo6VFpBOlRBTlpBTklBIFVOSVRFRCBSRVBVQkxJQzpEYXItRXMtU2FsYWFtOkRhci1Fcy1TYWxhYW0KKzE6VFo6VFpBOlRBTlpBTklBIFVOSVRFRCBSRVBVQkxJQzpJcmluZ2E6SXJpbmdhCisyOlRaOlRaQTpUQU5aQU5JQSBVTklURUQgUkVQVUJMSUM6SXJpbmdhOkx1ZGV3YQorMzpUWjpUWkE6VEFOWkFOSUEgVU5JVEVEIFJFUFVCTElDOklyaW5nYTpNYWtldGUKKzQ6VFo6VFpBOlRBTlpBTklBIFVOSVRFRCBSRVBVQkxJQzpJcmluZ2E6TXVmaW5kaQorNTpUWjpUWkE6VEFOWkFOSUEgVU5JVEVEIFJFUFVCTElDOklyaW5nYTpOam9tYmUKKzE6VFo6VFpBOlRBTlpBTklBIFVOSVRFRCBSRVBVQkxJQzpNYXJhOkJ1bmRhCisyOlRaOlRaQTpUQU5aQU5JQSBVTklURUQgUkVQVUJMSUM6TWFyYTpNdXNvbWEKKzM6VFo6VFpBOlRBTlpBTklBIFVOSVRFRCBSRVBVQkxJQzpNYXJhOlNlcmVuZ2V0aQorNDpUWjpUWkE6VEFOWkFOSUEgVU5JVEVEIFJFUFVCTElDOk1hcmE6VGFyaW1lCisxOlRaOlRaQTpUQU5aQU5JQSBVTklURUQgUkVQVUJMSUM6VGFib3JhOklndW5nYQorMjpUWjpUWkE6VEFOWkFOSUEgVU5JVEVEIFJFUFVCTElDOlRhYm9yYTpOemVnYQorMzpUWjpUWkE6VEFOWkFOSUEgVU5JVEVEIFJFUFVCTElDOlRhYm9yYTpUYWJvcmEKKzQ6VFo6VFpBOlRBTlpBTklBIFVOSVRFRCBSRVBVQkxJQzpUYWJvcmE6VXJhbWJvCisxOlRaOlRaQTpUQU5aQU5JQSBVTklURUQgUkVQVUJMSUM6UnVrd2E6TXBhbmRhCisyOlRaOlRaQTpUQU5aQU5JQSBVTklURUQgUkVQVUJMSUM6UnVrd2E6Tmthc2kKKzM6VFo6VFpBOlRBTlpBTklBIFVOSVRFRCBSRVBVQkxJQzpSdWt3YTpTdW1iYXdhbmdhCisxOlRaOlRaQTpUQU5aQU5JQSBVTklURUQgUkVQVUJMSUM6S2FnZXJhOkJpaGFyYW11bG8KKzI6VFo6VFpBOlRBTlpBTklBIFVOSVRFRCBSRVBVQkxJQzpLYWdlcmE6QnVrb2JhCiszOlRaOlRaQTpUQU5aQU5JQSBVTklURUQgUkVQVUJMSUM6S2FnZXJhOkthcmFnd2UKKzQ6VFo6VFpBOlRBTlpBTklBIFVOSVRFRCBSRVBVQkxJQzpLYWdlcmE6TXVsZWJhCis1OlRaOlRaQTpUQU5aQU5JQSBVTklURUQgUkVQVUJMSUM6S2FnZXJhOk5nYXJhCisxOlRaOlRaQTpUQU5aQU5JQSBVTklURUQgUkVQVUJMSUM6QXJ1c2hhOkFydW1lcnUKKzI6VFo6VFpBOlRBTlpBTklBIFVOSVRFRCBSRVBVQkxJQzpBcnVzaGE6QXJ1c2hhCiszOlRaOlRaQTpUQU5aQU5JQSBVTklURUQgUkVQVUJMSUM6QXJ1c2hhOkJhYmF0aQorNDpUWjpUWkE6VEFOWkFOSUEgVU5JVEVEIFJFUFVCTElDOkFydXNoYTpIYW5hbmcKKzU6VFo6VFpBOlRBTlpBTklBIFVOSVRFRCBSRVBVQkxJQzpBcnVzaGE6S2l0ZXRvCis2OlRaOlRaQTpUQU5aQU5JQSBVTklURUQgUkVQVUJMSUM6QXJ1c2hhOk1idWx1Cis3OlRaOlRaQTpUQU5aQU5JQSBVTklURUQgUkVQVUJMSUM6QXJ1c2hhOk1vbmR1bGkKKzg6VFo6VFpBOlRBTlpBTklBIFVOSVRFRCBSRVBVQkxJQzpBcnVzaGE6Tmdvcm9uZ29ybworMTpUWjpUWkE6VEFOWkFOSUEgVU5JVEVEIFJFUFVCTElDOk1iZXlhOkNodW55YQorMjpUWjpUWkE6VEFOWkFOSUEgVU5JVEVEIFJFUFVCTElDOk1iZXlhOklsZWplCiszOlRaOlRaQTpUQU5aQU5JQSBVTklURUQgUkVQVUJMSUM6TWJleWE6S3llbGEKKzQ6VFo6VFpBOlRBTlpBTklBIFVOSVRFRCBSRVBVQkxJQzpNYmV5YTpNYmV5YQorNTpUWjpUWkE6VEFOWkFOSUEgVU5JVEVEIFJFUFVCTElDOk1iZXlhOk1ib3ppCis2OlRaOlRaQTpUQU5aQU5JQSBVTklURUQgUkVQVUJMSUM6TWJleWE6UnVuZ3dlCisxOlRaOlRaQTpUQU5aQU5JQSBVTklURUQgUkVQVUJMSUM6TC4gVmljdG9yaWE6TC4gVmljdG9yaWEKKzE6VFo6VFpBOlRBTlpBTklBIFVOSVRFRCBSRVBVQkxJQzpSdXZ1bWE6TWJpbmdhCisyOlRaOlRaQTpUQU5aQU5JQSBVTklURUQgUkVQVUJMSUM6UnV2dW1hOlNvbmdlYQorMzpUWjpUWkE6VEFOWkFOSUEgVU5JVEVEIFJFUFVCTElDOlJ1dnVtYTpUdW5kdXJ1CisxOlRaOlRaQTpUQU5aQU5JQSBVTklURUQgUkVQVUJMSUM6S2Fza2F6aW5pLVVuZ3VqYTpaYW5zaWJhciBOb3J0aAorMjpUWjpUWkE6VEFOWkFOSUEgVU5JVEVEIFJFUFVCTElDOkthc2themluaS1Vbmd1amE6WmFuc2liYXIgTm9ydGgtQ2VudHJhbAorMTpUWjpUWkE6VEFOWkFOSUEgVU5JVEVEIFJFUFVCTElDOktpZ29tYTpLYXN1bHUKKzI6VFo6VFpBOlRBTlpBTklBIFVOSVRFRCBSRVBVQkxJQzpLaWdvbWE6S2lib25kbworMzpUWjpUWkE6VEFOWkFOSUEgVU5JVEVEIFJFUFVCTElDOktpZ29tYTpLaWdvbWEKKzE6VFo6VFpBOlRBTlpBTklBIFVOSVRFRCBSRVBVQkxJQzpNd2FuemE6R2VpdGEKKzI6VFo6VFpBOlRBTlpBTklBIFVOSVRFRCBSRVBVQkxJQzpNd2FuemE6S3dpbWJhCiszOlRaOlRaQTpUQU5aQU5JQSBVTklURUQgUkVQVUJMSUM6TXdhbnphOk1hZ3UKKzQ6VFo6VFpBOlRBTlpBTklBIFVOSVRFRCBSRVBVQkxJQzpNd2FuemE6TXdhbnphCis1OlRaOlRaQTpUQU5aQU5JQSBVTklURUQgUkVQVUJMSUM6TXdhbnphOlNlbmdlcmVtYQorNjpUWjpUWkE6VEFOWkFOSUEgVU5JVEVEIFJFUFVCTElDOk13YW56YTpVa2VyZXdlCisxOlRaOlRaQTpUQU5aQU5JQSBVTklURUQgUkVQVUJMSUM6U2luZ2lkYTpJcmFtYmEKKzI6VFo6VFpBOlRBTlpBTklBIFVOSVRFRCBSRVBVQkxJQzpTaW5naWRhOk1hbnlvbmkKKzM6VFo6VFpBOlRBTlpBTklBIFVOSVRFRCBSRVBVQkxJQzpTaW5naWRhOlNpbmdpZGEKKzE6VFo6VFpBOlRBTlpBTklBIFVOSVRFRCBSRVBVQkxJQzpLYXNrYXppbmktUGVtYmE6TWljaGV3ZW5pLVBlbWJhCisyOlRaOlRaQTpUQU5aQU5JQSBVTklURUQgUkVQVUJMSUM6S2Fza2F6aW5pLVBlbWJhOldldGUtUGVtYmEKKzE6VFo6VFpBOlRBTlpBTklBIFVOSVRFRCBSRVBVQkxJQzpNb3JvZ29ybzpLaWxvbWJlcm8KKzI6VFo6VFpBOlRBTlpBTklBIFVOSVRFRCBSRVBVQkxJQzpNb3JvZ29ybzpLaWxvc2EKKzM6VFo6VFpBOlRBTlpBTklBIFVOSVRFRCBSRVBVQkxJQzpNb3JvZ29ybzpNb3JvZ29ybworNDpUWjpUWkE6VEFOWkFOSUEgVU5JVEVEIFJFUFVCTElDOk1vcm9nb3JvOlVsYW5nYQorMTpUWjpUWkE6VEFOWkFOSUEgVU5JVEVEIFJFUFVCTElDOlRhbmdhOkhhbmRlbmkKKzI6VFo6VFpBOlRBTlpBTklBIFVOSVRFRCBSRVBVQkxJQzpUYW5nYTpLb3JvZ3dlCiszOlRaOlRaQTpUQU5aQU5JQSBVTklURUQgUkVQVUJMSUM6VGFuZ2E6THVzaG90bworNDpUWjpUWkE6VEFOWkFOSUEgVU5JVEVEIFJFUFVCTElDOlRhbmdhOk11aGV6YQorNTpUWjpUWkE6VEFOWkFOSUEgVU5JVEVEIFJFUFVCTElDOlRhbmdhOlBhbmdhbmkKKzY6VFo6VFpBOlRBTlpBTklBIFVOSVRFRCBSRVBVQkxJQzpUYW5nYTpUYW5nYQorMTpUWjpUWkE6VEFOWkFOSUEgVU5JVEVEIFJFUFVCTElDOlB3YW5pOkJhZ2Ftb3lvCisyOlRaOlRaQTpUQU5aQU5JQSBVTklURUQgUkVQVUJMSUM6UHdhbmk6S2liYWhhCiszOlRaOlRaQTpUQU5aQU5JQSBVTklURUQgUkVQVUJMSUM6UHdhbmk6S2lzYXJhd2UKKzQ6VFo6VFpBOlRBTlpBTklBIFVOSVRFRCBSRVBVQkxJQzpQd2FuaTpNYWZpYQorNTpUWjpUWkE6VEFOWkFOSUEgVU5JVEVEIFJFUFVCTElDOlB3YW5pOlJ1ZmlqaQorMTpUWjpUWkE6VEFOWkFOSUEgVU5JVEVEIFJFUFVCTElDOk1qaW5pLU1hZ2hhcmliaTpaYW5zaWJhciBUb3duCisyOlRaOlRaQTpUQU5aQU5JQSBVTklURUQgUkVQVUJMSUM6TWppbmktTWFnaGFyaWJpOlphbnNpYmFyIFdlc3QKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9VR0EvVUdBX0FETUlOMV9MRVgudHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L1VHQS9VR0FfQURNSU4xX0xFWC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTU1NTE4YgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9VR0EvVUdBX0FETUlOMV9MRVgudHh0CkBAIC0wLDAgKzEsNTYgQEAKKzE6VUctMzA6VUc6QURKVU1BTkkKKzI6VUctMzAyOlVHOkFQQUMKKzM6VUctMzAzOlVHOkFSVUEKKzQ6VUctMjE6VUc6QlVHSVJJCis1OlVHLTQwOlVHOkJVTkRJQlVHWU8KKzY6VUctNDAyOlVHOkJVU0hFTllJCis3OlVHLTIwMjpVRzpCVVNJQQorODpVRy0zMDQ6VUc6R1VMVQorOTpVRy00MDM6VUc6SE9JTUEKKzEwOlVHLTIwMzpVRzpJR0FOR0EKKzExOlVHLTIwNDpVRzpKSU5KQQorMTI6VUctNDA0OlVHOktBQkFMRQorMTM6VUctNDA1OlVHOktBQkFST0xFCisxNDpVRy0yMzpVRzpLQUJFUkFNQUlETworMTU6VUctMDpVRzpLQUxBTkdBTEEKKzE2OlVHLTAyOlVHOktBTVBBTEEKKzE3OlVHLTIwNTpVRzpLQU1VTEkKKzE4OlVHLTQzOlVHOktBTVdFTkdFCisxOTpVRy00NDpVRzpLQU5VTkdVCisyMDpVRy0yMDY6VUc6S0FQQ0hPUldBCisyMTpVRy00MDY6VUc6S0FTRVNFCisyMjpVRy0yMDc6VUc6S0FUQUtXSQorMjM6VUctMjpVRzpLQVlVTkdBCisyNDpVRy00MDc6VUc6S0lCQUFMRQorMjU6VUctMDM6VUc6S0lCT0dBCisyNjpVRy00MDg6VUc6S0lTT1JPCisyNzpVRy0zMDU6VUc6S0lUR1VNCisyODpVRy0zMDY6VUc6S09USURPCisyOTpVRy0yMDg6VUc6S1VNSQorMzA6VUctNDU6VUc6S1lFTkpPSk8KKzMxOlVHLVY6VUc6TEFLRSBWSUNUT1JJQQorMzI6VUctMzA3OlVHOkxJUkEKKzMzOlVHLTA0OlVHOkxVV0VSTworMzQ6VUctMDU6VUc6TUFTQUtBCiszNTpVRy00MDk6VUc6TUFTSU5ESQorMzY6VUctMjQ6VUc6TUFZVUdFCiszNzpVRy0yMDk6VUc6TUJBTEUKKzM4OlVHLTQxOlVHOk1CQVJBUkEKKzM5OlVHLTMwODpVRzpNT1JPVE8KKzQwOlVHLTMwOTpVRzpNT1lPCis0MTpVRy0wNjpVRzpNUElHSQorNDI6VUctMDc6VUc6TVVCRU5ERQorNDM6VUctMDg6VUc6TVVLT05PCis0NDpVRy0zOlVHOk5BS0FQSVJJUElSSVQKKzQ1OlVHLTA5OlVHOk5BS0FTT05HT0xBCis0NjpVRy0zMTpVRzpORUJCSQorNDc6VUctNDpVRzpOVFVOR0FNTworNDg6VUctMzI6VUc6UEFERVIKKzQ5OlVHLTIwOlVHOlBBTExJU0EKKzUwOlVHLTEwOlVHOlJBS0FJCis1MTpVRy00MjpVRzpSVUtVTkdJUkkKKzUyOlVHLTExOlVHOlNFTUJBQlVMRQorNTM6VUctMjU6VUc6U0lST05LTworNTQ6VUctNTI6VUc6U09ST1RJCis1NTpVRy0yMjpVRzpUT1JPUk8KKzU2OlVHLTMzOlVHOllVTUJFCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvVUdBL1VHQV9BRE1JTjJfTEVYLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9VR0EvVUdBX0FETUlOMl9MRVgudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJlODVkNzQKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvVUdBL1VHQV9BRE1JTjJfTEVYLnR4dApAQCAtMCwwICsxLDE4NSBAQAorMTpVRzpVR0E6VUdBTkRBOlJ1a3VuZ2lyaTpLaW5raWl6aQorMjpVRzpVR0E6VUdBTkRBOlJ1a3VuZ2lyaTpSdWJhYm8KKzM6VUc6VUdBOlVHQU5EQTpSdWt1bmdpcmk6UnVqdW1idXJhCisxOlVHOlVHQTpVR0FOREE6QXJ1YTpBcmluZ2EKKzI6VUc6VUdBOlVHQU5EQTpBcnVhOkFydWEgTXVuaWNpcGFsaXR5CiszOlVHOlVHQTpVR0FOREE6QXJ1YTpBeWl2dQorNDpVRzpVR0E6VUdBTkRBOkFydWE6S29ib2tvCis1OlVHOlVHQTpVR0FOREE6QXJ1YTpNYWRpLU9rb2xsbworNjpVRzpVR0E6VUdBTkRBOkFydWE6TWFyYWNoYQorNzpVRzpVR0E6VUdBTkRBOkFydWE6VGVyZWdvCis4OlVHOlVHQTpVR0FOREE6QXJ1YTpWdXJyYQorMTpVRzpVR0E6VUdBTkRBOlNvcm90aTpBbXVyaWEKKzI6VUc6VUdBOlVHQU5EQTpTb3JvdGk6S2FiZXJhbWFpZG8KKzM6VUc6VUdBOlVHQU5EQTpTb3JvdGk6S2FsYWtpCis0OlVHOlVHQTpVR0FOREE6U29yb3RpOkthcGVsZWJ5b25nCis1OlVHOlVHQTpVR0FOREE6U29yb3RpOkthc2lsbworNjpVRzpVR0E6VUdBTkRBOlNvcm90aTpTZXJlcmUKKzc6VUc6VUdBOlVHQU5EQTpTb3JvdGk6U29yb3RpCis4OlVHOlVHQTpVR0FOREE6U29yb3RpOlNvcm90aSBNdW5pY2lwYWxpdHkKKzk6VUc6VUdBOlVHQU5EQTpTb3JvdGk6VXN1aworMTpVRzpVR0E6VUdBTkRBOlJha2FpOkthYnVsYQorMjpVRzpVR0E6VUdBTkRBOlJha2FpOktha3V1dG8KKzM6VUc6VUdBOlVHQU5EQTpSYWthaTpLb29raQorNDpVRzpVR0E6VUdBTkRBOlJha2FpOkt5b3RlcmEKKzE6VUc6VUdBOlVHQU5EQTpNb3JvdG86Qm9rb3JhCisyOlVHOlVHQTpVR0FOREE6TW9yb3RvOkthZGFtIChDaGVrd2lpKQorMzpVRzpVR0E6VUdBTkRBOk1vcm90bzpNYXRoZW5pa28KKzQ6VUc6VUdBOlVHQU5EQTpNb3JvdG86TW9yb3RvIE11bmljaXBhbGl0eQorNTpVRzpVR0E6VUdBTkRBOk1vcm90bzpQaWFuCis2OlVHOlVHQTpVR0FOREE6TW9yb3RvOlVwZQorMTpVRzpVR0E6VUdBTkRBOk1iYWxlOkJ1YnVsbworMjpVRzpVR0E6VUdBTkRBOk1iYWxlOkJ1ZGFkaXJpCiszOlVHOlVHQTpVR0FOREE6TWJhbGU6QnVsYW1idWxpCis0OlVHOlVHQTpVR0FOREE6TWJhbGU6QnVuZ29raG8KKzU6VUc6VUdBOlVHQU5EQTpNYmFsZTpNYWppeWEKKzY6VUc6VUdBOlVHQU5EQTpNYmFsZTpNYmFsZSBNdW5pY2lwYWxpdHkKKzE6VUc6VUdBOlVHQU5EQTpCdW5kaWJ1Z3lvOkJ3YW1iYQorMjpVRzpVR0E6VUdBTkRBOkJ1bmRpYnVneW86TnRvcm9rbworMTpVRzpVR0E6VUdBTkRBOk11YmVuZGU6QnVzdWpqdQorMjpVRzpVR0E6VUdBTkRBOk11YmVuZGU6QnV3ZWt1bGEKKzM6VUc6VUdBOlVHQU5EQTpNdWJlbmRlOkthc3NhbmRhCis0OlVHOlVHQTpVR0FOREE6TXViZW5kZTpNaXR5YW5hCisxOlVHOlVHQTpVR0FOREE6TGFrZSBWaWN0b3JpYTpVR0EuTDIuMQorMjpVRzpVR0E6VUdBTkRBOkxha2UgVmljdG9yaWE6VUdBLkwyLjEwCiszOlVHOlVHQTpVR0FOREE6TGFrZSBWaWN0b3JpYTpVR0EuTDIuMTEKKzQ6VUc6VUdBOlVHQU5EQTpMYWtlIFZpY3RvcmlhOlVHQS5MMi4xMgorNTpVRzpVR0E6VUdBTkRBOkxha2UgVmljdG9yaWE6VUdBLkwyLjEzCis2OlVHOlVHQTpVR0FOREE6TGFrZSBWaWN0b3JpYTpVR0EuTDIuMTQKKzc6VUc6VUdBOlVHQU5EQTpMYWtlIFZpY3RvcmlhOlVHQS5MMi4xNQorODpVRzpVR0E6VUdBTkRBOkxha2UgVmljdG9yaWE6VUdBLkwyLjE2Cis5OlVHOlVHQTpVR0FOREE6TGFrZSBWaWN0b3JpYTpVR0EuTDIuMTcKKzEwOlVHOlVHQTpVR0FOREE6TGFrZSBWaWN0b3JpYTpVR0EuTDIuMTgKKzExOlVHOlVHQTpVR0FOREE6TGFrZSBWaWN0b3JpYTpVR0EuTDIuMTkKKzEyOlVHOlVHQTpVR0FOREE6TGFrZSBWaWN0b3JpYTpVR0EuTDIuMgorMTM6VUc6VUdBOlVHQU5EQTpMYWtlIFZpY3RvcmlhOlVHQS5MMi4yMAorMTQ6VUc6VUdBOlVHQU5EQTpMYWtlIFZpY3RvcmlhOlVHQS5MMi4yMQorMTU6VUc6VUdBOlVHQU5EQTpMYWtlIFZpY3RvcmlhOlVHQS5MMi4yMgorMTY6VUc6VUdBOlVHQU5EQTpMYWtlIFZpY3RvcmlhOlVHQS5MMi4zCisxNzpVRzpVR0E6VUdBTkRBOkxha2UgVmljdG9yaWE6VUdBLkwyLjQKKzE4OlVHOlVHQTpVR0FOREE6TGFrZSBWaWN0b3JpYTpVR0EuTDIuNQorMTk6VUc6VUdBOlVHQU5EQTpMYWtlIFZpY3RvcmlhOlVHQS5MMi42CisyMDpVRzpVR0E6VUdBTkRBOkxha2UgVmljdG9yaWE6VUdBLkwyLjcKKzIxOlVHOlVHQTpVR0FOREE6TGFrZSBWaWN0b3JpYTpVR0EuTDIuOAorMjI6VUc6VUdBOlVHQU5EQTpMYWtlIFZpY3RvcmlhOlVHQS5MMi45CisxOlVHOlVHQTpVR0FOREE6S2FzZXNlOkJ1a29uam8KKzI6VUc6VUdBOlVHQU5EQTpLYXNlc2U6QnVzb25nb3JhCisxOlVHOlVHQTpVR0FOREE6UGFsbGlzYTpCdWRha2EKKzI6VUc6VUdBOlVHQU5EQTpQYWxsaXNhOkJ1dGVibworMzpVRzpVR0E6VUdBTkRBOlBhbGxpc2E6S2lidWt1Cis0OlVHOlVHQTpVR0FOREE6UGFsbGlzYTpQYWxsaXNhCisxOlVHOlVHQTpVR0FOREE6TWFzaW5kaTpCdWplbmplCisyOlVHOlVHQTpVR0FOREE6TWFzaW5kaTpCdWxpaXNhCiszOlVHOlVHQTpVR0FOREE6TWFzaW5kaTpCdXJ1bGkKKzQ6VUc6VUdBOlVHQU5EQTpNYXNpbmRpOktpYmFuZGEKKzE6VUc6VUdBOlVHQU5EQTpLYW1wYWxhOkthbXBhbGEgQ2l0eSBDb3VuY2lsCisxOlVHOlVHQTpVR0FOREE6S2FiYXJvbGU6QnVueWFuZ2FidQorMjpVRzpVR0E6VUdBTkRBOkthYmFyb2xlOkJ1cmFoeWEKKzM6VUc6VUdBOlVHQU5EQTpLYWJhcm9sZTpGb3J0IFBvcnRhbCBNdW5pY2lwYWxpdHkKKzQ6VUc6VUdBOlVHQU5EQTpLYWJhcm9sZTpLaWJhbGUKKzU6VUc6VUdBOlVHQU5EQTpLYWJhcm9sZTpLaXRhZ3dlbmRhCis2OlVHOlVHQTpVR0FOREE6S2FiYXJvbGU6S3lha2EKKzc6VUc6VUdBOlVHQU5EQTpLYWJhcm9sZTpNd2VuZ2UKKzE6VUc6VUdBOlVHQU5EQTpHdWx1OkFzd2EKKzI6VUc6VUdBOlVHQU5EQTpHdWx1Okd1bHUgTXVuaWNpcGFsaXR5CiszOlVHOlVHQTpVR0FOREE6R3VsdTpLaWxhaworNDpVRzpVR0E6VUdBTkRBOkd1bHU6TndveWEKKzU6VUc6VUdBOlVHQU5EQTpHdWx1Ok9tb3JvCisxOlVHOlVHQTpVR0FOREE6TWFzYWthOkJ1a29tYW5zaW1iaQorMjpVRzpVR0E6VUdBTkRBOk1hc2FrYTpCdWtvdG8KKzM6VUc6VUdBOlVHQU5EQTpNYXNha2E6S2FsdW5ndQorNDpVRzpVR0E6VUdBTkRBOk1hc2FrYTpMd2VtaXlhZ2EKKzU6VUc6VUdBOlVHQU5EQTpNYXNha2E6TWFzYWthIE11bmljaXBhbGl0eQorNjpVRzpVR0E6VUdBTkRBOk1hc2FrYTpNYXdvZ29sYQorMTpVRzpVR0E6VUdBTkRBOkx1d2VybzpCdXJ1bGkKKzI6VUc6VUdBOlVHQU5EQTpMdXdlcm86S2F0aWthbXUKKzM6VUc6VUdBOlVHQU5EQTpMdXdlcm86TmFrYXNla2UKKzQ6VUc6VUdBOlVHQU5EQTpMdXdlcm86V2FidXNhbmEgKEJhbXVuYW5pa2EpCisxOlVHOlVHQTpVR0FOREE6S2FsYW5nYWxhOkJ1anVtYmEKKzI6VUc6VUdBOlVHQU5EQTpLYWxhbmdhbGE6S3lhbXVzd2EKKzE6VUc6VUdBOlVHQU5EQTpNcGlnaTpCdXNpcm8KKzI6VUc6VUdBOlVHQU5EQTpNcGlnaTpCdXRhbWJhbGEKKzM6VUc6VUdBOlVHQU5EQTpNcGlnaTpFbnRlYmJlIE11bmljaXBhbGl0eQorNDpVRzpVR0E6VUdBTkRBOk1waWdpOkdvbWJhCis1OlVHOlVHQTpVR0FOREE6TXBpZ2k6S3lhZG9uZG8KKzY6VUc6VUdBOlVHQU5EQTpNcGlnaTpNYXdva290YQorMTpVRzpVR0E6VUdBTkRBOkppbmphOkJ1dGVtYmUKKzI6VUc6VUdBOlVHQU5EQTpKaW5qYTpKaW5qYSBNdW5pY2lwYWxpdHkKKzM6VUc6VUdBOlVHQU5EQTpKaW5qYTpLYWdvbWEKKzE6VUc6VUdBOlVHQU5EQTpLaWJvZ2E6S2lib2dhCisxOlVHOlVHQTpVR0FOREE6S2FiYWxlOkthYmFsZSBNdW5pY2lwYWxpdHkKKzI6VUc6VUdBOlVHQU5EQTpLYWJhbGU6TmRvcndhCiszOlVHOlVHQTpVR0FOREE6S2FiYWxlOlJ1YmFuZGEKKzQ6VUc6VUdBOlVHQU5EQTpLYWJhbGU6UnVraWdhCisxOlVHOlVHQTpVR0FOREE6QXBhYzpLb2xlCisyOlVHOlVHQTpVR0FOREE6QXBhYzpLd2FuaWEKKzM6VUc6VUdBOlVHQU5EQTpBcGFjOk1hcnV6aQorNDpVRzpVR0E6VUdBTkRBOkFwYWM6T3lhbQorMTpVRzpVR0E6VUdBTkRBOk5lYmJpOkpvbmFtCisyOlVHOlVHQTpVR0FOREE6TmViYmk6T2tvcm8KKzM6VUc6VUdBOlVHQU5EQTpOZWJiaTpQYWR5ZXJlCisxOlVHOlVHQTpVR0FOREE6TWJhcmFyYTpCdWthbmdhCisyOlVHOlVHQTpVR0FOREE6TWJhcmFyYTpJYmFuZGEKKzM6VUc6VUdBOlVHQU5EQTpNYmFyYXJhOklzaW5naXJvCis0OlVHOlVHQTpVR0FOREE6TWJhcmFyYTpLYXNoYXJpCis1OlVHOlVHQTpVR0FOREE6TWJhcmFyYTpLYXpvCis2OlVHOlVHQTpVR0FOREE6TWJhcmFyYTpNYmFyYXJhIE11bmljaXBhbGl0eQorNzpVRzpVR0E6VUdBTkRBOk1iYXJhcmE6TnlhYnVzaG96aQorODpVRzpVR0E6VUdBTkRBOk1iYXJhcmE6UnVoYWFtYQorOTpVRzpVR0E6VUdBTkRBOk1iYXJhcmE6UndhbXBhcmEKKzE6VUc6VUdBOlVHQU5EQTpLaWJhYWxlOkJ1Z2FuZ2FpemkKKzI6VUc6VUdBOlVHQU5EQTpLaWJhYWxlOkJ1eWFnYQorMzpVRzpVR0E6VUdBTkRBOktpYmFhbGU6QnV5YW5qYQorMTpVRzpVR0E6VUdBTkRBOktpc29ybzpCdWZ1bWJpcmEKKzE6VUc6VUdBOlVHQU5EQTpIb2ltYTpCdWdhaHlhCisyOlVHOlVHQTpVR0FOREE6SG9pbWE6QnVoYWd1emkKKzE6VUc6VUdBOlVHQU5EQTpLdW1pOkJ1a2VkZWEKKzI6VUc6VUdBOlVHQU5EQTpLdW1pOkt1bWkKKzM6VUc6VUdBOlVHQU5EQTpLdW1pOk5nb3JhCisxOlVHOlVHQTpVR0FOREE6SWdhbmdhOkJ1Z3dlcmkKKzI6VUc6VUdBOlVHQU5EQTpJZ2FuZ2E6QnVrb29saQorMzpVRzpVR0E6VUdBTkRBOklnYW5nYTpCdW55YQorNDpVRzpVR0E6VUdBTkRBOklnYW5nYTpCdXNpa2kKKzU6VUc6VUdBOlVHQU5EQTpJZ2FuZ2E6S2lndWx1Cis2OlVHOlVHQTpVR0FOREE6SWdhbmdhOkx1dWthCisxOlVHOlVHQTpVR0FOREE6QnVzaGVueWk6QnVod2VqdQorMjpVRzpVR0E6VUdBTkRBOkJ1c2hlbnlpOkJ1bnlhcnVndXJ1CiszOlVHOlVHQTpVR0FOREE6QnVzaGVueWk6SWdhcmEKKzQ6VUc6VUdBOlVHQU5EQTpCdXNoZW55aTpLYWphcmEKKzU6VUc6VUdBOlVHQU5EQTpCdXNoZW55aTpSdWhpbmRhCis2OlVHOlVHQTpVR0FOREE6QnVzaGVueWk6UnVzaGVueWkKKzc6VUc6VUdBOlVHQU5EQTpCdXNoZW55aTpTaGVlbWEKKzE6VUc6VUdBOlVHQU5EQTpLYW11bGk6QnVkaW9wZQorMjpVRzpVR0E6VUdBTkRBOkthbXVsaTpCdWdhYnVsYQorMzpVRzpVR0E6VUdBTkRBOkthbXVsaTpCdWxhbW9naQorNDpVRzpVR0E6VUdBTkRBOkthbXVsaTpCdXphYXlhCisxOlVHOlVHQTpVR0FOREE6S290aWRvOkRvZG90aAorMjpVRzpVR0E6VUdBTkRBOktvdGlkbzpKaWUKKzM6VUc6VUdBOlVHQU5EQTpLb3RpZG86TGFid29yCisxOlVHOlVHQTpVR0FOREE6VG9yb3JvOkJ1bnlvbGUKKzI6VUc6VUdBOlVHQU5EQTpUb3Jvcm86S2lzb2tvIChXZXN0IEJ1ZGFtYSkKKzM6VUc6VUdBOlVHQU5EQTpUb3Jvcm86U2FtaWEtQnVnd2UKKzQ6VUc6VUdBOlVHQU5EQTpUb3Jvcm86VG9yb3JvCis1OlVHOlVHQTpVR0FOREE6VG9yb3JvOlRvcm9ybyBNdW5pY2lwYWxpdHkKKzE6VUc6VUdBOlVHQU5EQTpNb3lvOkVhc3QgTW95bworMjpVRzpVR0E6VUdBTkRBOk1veW86T2JvbmdpCiszOlVHOlVHQTpVR0FOREE6TW95bzpXZXN0IE1veW8KKzE6VUc6VUdBOlVHQU5EQTpMaXJhOkRva29sbworMjpVRzpVR0E6VUdBTkRBOkxpcmE6RXJ1dGUKKzM6VUc6VUdBOlVHQU5EQTpMaXJhOktpb2dhCis0OlVHOlVHQTpVR0FOREE6TGlyYTpMaXJhIE11bmljaXBhbGl0eQorNTpVRzpVR0E6VUdBTkRBOkxpcmE6TW9yb3RvCis2OlVHOlVHQTpVR0FOREE6TGlyYTpPdHVrZQorMTpVRzpVR0E6VUdBTkRBOktpdGd1bTpBZ2FnbworMjpVRzpVR0E6VUdBTkRBOktpdGd1bTpBcnV1CiszOlVHOlVHQTpVR0FOREE6S2l0Z3VtOkNodWEKKzQ6VUc6VUdBOlVHQU5EQTpLaXRndW06TGFtd28KKzE6VUc6VUdBOlVHQU5EQTpLYXBjaG9yd2E6S29uZ2FzaXMKKzI6VUc6VUdBOlVHQU5EQTpLYXBjaG9yd2E6S3dlZW4KKzM6VUc6VUdBOlVHQU5EQTpLYXBjaG9yd2E6VGluZ2V5CisxOlVHOlVHQTpVR0FOREE6TXVrb25vOkJiYWFsZQorMjpVRzpVR0E6VUdBTkRBOk11a29ubzpCdXZ1bWEgSXNsYW5kcworMzpVRzpVR0E6VUdBTkRBOk11a29ubzpCdXlpa3dlCis0OlVHOlVHQTpVR0FOREE6TXVrb25vOk11a29ubworNTpVRzpVR0E6VUdBTkRBOk11a29ubzpOYWtpZnVtYQorNjpVRzpVR0E6VUdBTkRBOk11a29ubzpOdGVuamVydQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L1VSWS9VUllfQURNSU4xX0xFWC50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvVVJZL1VSWV9BRE1JTjFfTEVYLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMmNkMWQ2Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L1VSWS9VUllfQURNSU4xX0xFWC50eHQKQEAgLTAsMCArMSwxOSBAQAorMTpVWS1BUjpVWTpBUlRJR0FTCisyOlVZLUNBOlVZOkNBTkVMT05FUworMzpVWS1DTDpVWTpDRVJSTyBMQVJHTworNDpVWS1DTzpVWTpDT0xPTklBCis1OlVZLURVOlVZOkRVUkFaTk8KKzY6VVktRlM6VVk6RkxPUkVTCis3OlVZLUZEOlVZOkZMT1JJREEKKzg6VVktTEE6VVk6TEFWQUxMRUpBCis5OlVZLU1BOlVZOk1BTERPTkFETworMTA6VVktTU86VVk6TU9OVEVWSURFTworMTE6VVktUEE6VVk6UEFZU0FORFUKKzEyOlVZLVJOOlVZOlJJTyBORUdSTworMTM6VVktUlY6VVk6UklWRVJBCisxNDpVWS1STzpVWTpST0NIQQorMTU6VVktU0E6VVk6U0FMVE8KKzE2OlVZLVNKOlVZOlNBTiBKT1NFCisxNzpVWS1TTzpVWTpTT1JJQU5PCisxODpVWS1UQTpVWTpUQUNVQVJFTUJPCisxOTpVWS1UVDpVWTpUUkVJTlRBIFkgVFJFUwpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L1VSWS9VUllfQURNSU4yX0xFWC50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvVVJZL1VSWV9BRE1JTjJfTEVYLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZGRmZGMwCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L1VSWS9VUllfQURNSU4yX0xFWC50eHQKQEAgLTAsMCArMSwzNiBAQAorMTpVWTpVUlk6VVJVR1VBWTpGTE9SRVM6VVJZLkwyLjQKKzE6VVk6VVJZOlVSVUdVQVk6QVJUSUdBUzpVUlkuTDIuMTIKKzE6VVk6VVJZOlVSVUdVQVk6Q09MT05JQTpJc2xhCisyOlVZOlVSWTpVUlVHVUFZOkNPTE9OSUE6VVJZLkwyLjE2CisxOlVZOlVSWTpVUlVHVUFZOk1PTlRFVklERU86VVJZLkwyLjE3CisxOlVZOlVSWTpVUlVHVUFZOlJPQ0hBOlVSWS5MMi4xMworMjpVWTpVUlk6VVJVR1VBWTpST0NIQTpVUlkuTDIuMTQKKzE6VVk6VVJZOlVSVUdVQVk6UEFZU0FORFU6VVJZLkwyLjI1CisyOlVZOlVSWTpVUlVHVUFZOlBBWVNBTkRVOlVSWS5MMi4yNgorMTpVWTpVUlk6VVJVR1VBWTpSSU8gTkVHUk86UmlvIE5lZ3JvCisyOlVZOlVSWTpVUlVHVUFZOlJJTyBORUdSTzpVUlkuTDIuMTAKKzM6VVk6VVJZOlVSVUdVQVk6UklPIE5FR1JPOlVSWS5MMi43Cis0OlVZOlVSWTpVUlVHVUFZOlJJTyBORUdSTzpVUlkuTDIuOAorNTpVWTpVUlk6VVJVR1VBWTpSSU8gTkVHUk86VVJZLkwyLjkKKzE6VVk6VVJZOlVSVUdVQVk6VEFDVUFSRU1CTzpVUlkuTDIuMgorMTpVWTpVUlk6VVJVR1VBWTpSSVZFUkE6VVJZLkwyLjI4CisxOlVZOlVSWTpVUlVHVUFZOkNBTkVMT05FUzpSaW8gU2FudGEKKzI6VVk6VVJZOlVSVUdVQVk6Q0FORUxPTkVTOlVSWS5MMi4xOQorMTpVWTpVUlk6VVJVR1VBWTpUUkVJTlRBIFkgVFJFUzpMYWcuIEd1YWNoYQorMjpVWTpVUlk6VVJVR1VBWTpUUkVJTlRBIFkgVFJFUzpMYWdvCiszOlVZOlVSWTpVUlVHVUFZOlRSRUlOVEEgWSBUUkVTOkxhZ3VuYQorNDpVWTpVUlk6VVJVR1VBWTpUUkVJTlRBIFkgVFJFUzpVUlkuTDIuMjAKKzU6VVk6VVJZOlVSVUdVQVk6VFJFSU5UQSBZIFRSRVM6VVJZLkwyLjIxCis2OlVZOlVSWTpVUlVHVUFZOlRSRUlOVEEgWSBUUkVTOlVSWS5MMi4yMgorNzpVWTpVUlk6VVJVR1VBWTpUUkVJTlRBIFkgVFJFUzpVUlkuTDIuMjMKKzg6VVk6VVJZOlVSVUdVQVk6VFJFSU5UQSBZIFRSRVM6VVJZLkwyLjI0CisxOlVZOlVSWTpVUlVHVUFZOkZMT1JJREE6VVJZLkwyLjUKKzE6VVk6VVJZOlVSVUdVQVk6TEFWQUxMRUpBOkxhZ28KKzI6VVk6VVJZOlVSVUdVQVk6TEFWQUxMRUpBOlVSWS5MMi4xCisxOlVZOlVSWTpVUlVHVUFZOk1BTERPTkFETzpJc2xhCisyOlVZOlVSWTpVUlVHVUFZOk1BTERPTkFETzpVUlkuTDIuMTgKKzE6VVk6VVJZOlVSVUdVQVk6U0FMVE86VVJZLkwyLjMKKzE6VVk6VVJZOlVSVUdVQVk6U0FOIEpPU0U6VVJZLkwyLjYKKzE6VVk6VVJZOlVSVUdVQVk6Q0VSUk8gTEFSR086VVJZLkwyLjE1CisxOlVZOlVSWTpVUlVHVUFZOlNPUklBTk86VVJZLkwyLjI3CisxOlVZOlVSWTpVUlVHVUFZOkRVUkFaTk86VVJZLkwyLjExCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvVVNBL1VTQV9BRE1JTjFfTEVYLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9VU0EvVVNBX0FETUlOMV9MRVgudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMyNjgyOTgKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvVVNBL1VTQV9BRE1JTjFfTEVYLnR4dApAQCAtMCwwICsxLDU2IEBACisxOlVTLUFMOlVTOkFMQUJBTUEKKzI6VVMtQUs6VVM6QUxBU0tBCiszOlVTLUFaOlVTOkFSSVpPTkEKKzQ6VVMtQVI6VVM6QVJLQU5TQVMKKzU6VVMtRFVNTVkxOlVTOkFSTAorNjpVUy1DQTpVUzpDQUxJRk9STklBCis3OlVTLURVTU1ZMjpVUzpDQU0KKzg6VVMtQ086VVM6Q09MT1JBRE8KKzk6VVMtQ1Q6VVM6Q09OTkVDVElDVVQKKzEwOlVTLURFOlVTOkRFTEFXQVJFCisxMTpVUy1EQzpVUzpESVNUUklDVCBPRiBDT0xVTUJJQQorMTI6VVMtRkw6VVM6RkxPUklEQQorMTM6VVMtR0E6VVM6R0VPUkdJQQorMTQ6VVMtRFVNTVkzOlVTOkdFUAorMTU6VVMtSEk6VVM6SEFXQUlJCisxNjpVUy1JRDpVUzpJREFITworMTc6VVMtSUw6VVM6SUxMSU5PSVMKKzE4OlVTLUlOOlVTOklORElBTkEKKzE5OlVTLUlBOlVTOklPV0EKKzIwOlVTLUtTOlVTOktBTlNBUworMjE6VVMtS1k6VVM6S0VOVFVDS1kKKzIyOlVTLUxBOlVTOkxPVUlTSUFOQQorMjM6VVMtTUU6VVM6TUFJTkUKKzI0OlVTLU1EOlVTOk1BUllMQU5ECisyNTpVUy1NQTpVUzpNQVNTQUNIVVNFVFRTCisyNjpVUy1NSTpVUzpNSUNISUdBTgorMjc6VVMtTU46VVM6TUlOTkVTT1RBCisyODpVUy1NUzpVUzpNSVNTSVNTSVBQSQorMjk6VVMtTU86VVM6TUlTU09VUkkKKzMwOlVTLU1UOlVTOk1PTlRBTkEKKzMxOlVTLU5FOlVTOk5FQlJBU0tBCiszMjpVUy1OVjpVUzpORVZBREEKKzMzOlVTLU5IOlVTOk5FVyBIQU1QU0hJUkUKKzM0OlVTLU5KOlVTOk5FVyBKRVJTRVkKKzM1OlVTLU5NOlVTOk5FVyBNRVhJQ08KKzM2OlVTLU5ZOlVTOk5FVyBZT1JLCiszNzpVUy1OQzpVUzpOT1JUSCBDQVJPTElOQQorMzg6VVMtTkQ6VVM6Tk9SVEggREFLT1RBCiszOTpVUy1PSDpVUzpPSElPCis0MDpVUy1PSzpVUzpPS0xBSE9NQQorNDE6VVMtT1I6VVM6T1JFR09OCis0MjpVUy1QQTpVUzpQRU5OU1lMVkFOSUEKKzQzOlVTLVBSOlVTOlBVRVJUTyBSSUNPCis0NDpVUy1SSTpVUzpSSE9ERSBJU0xBTkQKKzQ1OlVTLVNDOlVTOlNPVVRIIENBUk9MSU5BCis0NjpVUy1TRDpVUzpTT1VUSCBEQUtPVEEKKzQ3OlVTLVROOlVTOlRFTk5FU1NFRQorNDg6VVMtVFg6VVM6VEVYQVMKKzQ5OlVTLVVUOlVTOlVUQUgKKzUwOlVTLVZUOlVTOlZFUk1PTlQKKzUxOlVTLVZBOlVTOlZJUkdJTklBCis1MjpVUy1EVU1NWTQ6VVM6VklTCis1MzpVUy1XQTpVUzpXQVNISU5HVE9OCis1NDpVUy1XVjpVUzpXRVNUIFZJUkdJTklBCis1NTpVUy1XSTpVUzpXSVNDT05TSU4KKzU2OlVTLVdZOlVTOldZT01JTkcKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9VU0EvVVNBX0FETUlOMl9MRVgudHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L1VTQS9VU0FfQURNSU4yX0xFWC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2ZhMjgzMwotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9VU0EvVVNBX0FETUlOMl9MRVgudHh0CkBAIC0wLDAgKzEsMzE0MSBAQAorMTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpXWU9NSU5HOkFsYmFueSBDb3VudHkKKzI6VVM6VVNBOlVOSVRFRCBTVEFURVM6V1lPTUlORzpCaWcgSG9ybiBDb3VudHkKKzM6VVM6VVNBOlVOSVRFRCBTVEFURVM6V1lPTUlORzpDYW1wYmVsbCBDb3VudHkKKzQ6VVM6VVNBOlVOSVRFRCBTVEFURVM6V1lPTUlORzpDYXJib24gQ291bnR5Cis1OlVTOlVTQTpVTklURUQgU1RBVEVTOldZT01JTkc6Q29udmVyc2UgQ291bnR5Cis2OlVTOlVTQTpVTklURUQgU1RBVEVTOldZT01JTkc6Q3Jvb2sgQ291bnR5Cis3OlVTOlVTQTpVTklURUQgU1RBVEVTOldZT01JTkc6RnJlbW9udCBDb3VudHkKKzg6VVM6VVNBOlVOSVRFRCBTVEFURVM6V1lPTUlORzpHb3NoZW4gQ291bnR5Cis5OlVTOlVTQTpVTklURUQgU1RBVEVTOldZT01JTkc6SG90IFNwcmluZ3MgQ291bnR5CisxMDpVUzpVU0E6VU5JVEVEIFNUQVRFUzpXWU9NSU5HOkpvaG5zb24gQ291bnR5CisxMTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpXWU9NSU5HOkxhcmFtaWUgQ291bnR5CisxMjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpXWU9NSU5HOkxpbmNvbG4gQ291bnR5CisxMzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpXWU9NSU5HOk5hdHJvbmEgQ291bnR5CisxNDpVUzpVU0E6VU5JVEVEIFNUQVRFUzpXWU9NSU5HOk5pb2JyYXJhIENvdW50eQorMTU6VVM6VVNBOlVOSVRFRCBTVEFURVM6V1lPTUlORzpQYXJrIENvdW50eQorMTY6VVM6VVNBOlVOSVRFRCBTVEFURVM6V1lPTUlORzpQbGF0dGUgQ291bnR5CisxNzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpXWU9NSU5HOlNoZXJpZGFuIENvdW50eQorMTg6VVM6VVNBOlVOSVRFRCBTVEFURVM6V1lPTUlORzpTdWJsZXR0ZSBDb3VudHkKKzE5OlVTOlVTQTpVTklURUQgU1RBVEVTOldZT01JTkc6U3dlZXR3YXRlciBDb3VudHkKKzIwOlVTOlVTQTpVTklURUQgU1RBVEVTOldZT01JTkc6VGV0b24gQ291bnR5CisyMTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpXWU9NSU5HOlVpbnRhIENvdW50eQorMjI6VVM6VVNBOlVOSVRFRCBTVEFURVM6V1lPTUlORzpXYXNoYWtpZSBDb3VudHkKKzIzOlVTOlVTQTpVTklURUQgU1RBVEVTOldZT01JTkc6V2VzdG9uIENvdW50eQorMTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpHRU9SR0lBOkFwcGxpbmcgQ291bnR5CisyOlVTOlVTQTpVTklURUQgU1RBVEVTOkdFT1JHSUE6QXRraW5zb24gQ291bnR5CiszOlVTOlVTQTpVTklURUQgU1RBVEVTOkdFT1JHSUE6QmFjb24gQ291bnR5Cis0OlVTOlVTQTpVTklURUQgU1RBVEVTOkdFT1JHSUE6QmFrZXIgQ291bnR5Cis1OlVTOlVTQTpVTklURUQgU1RBVEVTOkdFT1JHSUE6QmFsZHdpbiBDb3VudHkKKzY6VVM6VVNBOlVOSVRFRCBTVEFURVM6R0VPUkdJQTpCYW5rcyBDb3VudHkKKzc6VVM6VVNBOlVOSVRFRCBTVEFURVM6R0VPUkdJQTpCYXJyb3cgQ291bnR5Cis4OlVTOlVTQTpVTklURUQgU1RBVEVTOkdFT1JHSUE6QmFydG93IENvdW50eQorOTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpHRU9SR0lBOkJlbiBIaWxsIENvdW50eQorMTA6VVM6VVNBOlVOSVRFRCBTVEFURVM6R0VPUkdJQTpCZXJyaWVuIENvdW50eQorMTE6VVM6VVNBOlVOSVRFRCBTVEFURVM6R0VPUkdJQTpCaWJiIENvdW50eQorMTI6VVM6VVNBOlVOSVRFRCBTVEFURVM6R0VPUkdJQTpCbGVja2xleSBDb3VudHkKKzEzOlVTOlVTQTpVTklURUQgU1RBVEVTOkdFT1JHSUE6QnJhbnRsZXkgQ291bnR5CisxNDpVUzpVU0E6VU5JVEVEIFNUQVRFUzpHRU9SR0lBOkJyb29rcyBDb3VudHkKKzE1OlVTOlVTQTpVTklURUQgU1RBVEVTOkdFT1JHSUE6QnJ5YW4gQ291bnR5CisxNjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpHRU9SR0lBOkJ1bGxvY2ggQ291bnR5CisxNzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpHRU9SR0lBOkJ1cmtlIENvdW50eQorMTg6VVM6VVNBOlVOSVRFRCBTVEFURVM6R0VPUkdJQTpCdXR0cyBDb3VudHkKKzE5OlVTOlVTQTpVTklURUQgU1RBVEVTOkdFT1JHSUE6Q2FsaG91biBDb3VudHkKKzIwOlVTOlVTQTpVTklURUQgU1RBVEVTOkdFT1JHSUE6Q2FtZGVuIENvdW50eQorMjE6VVM6VVNBOlVOSVRFRCBTVEFURVM6R0VPUkdJQTpDYW5kbGVyIENvdW50eQorMjI6VVM6VVNBOlVOSVRFRCBTVEFURVM6R0VPUkdJQTpDYXJyb2xsIENvdW50eQorMjM6VVM6VVNBOlVOSVRFRCBTVEFURVM6R0VPUkdJQTpDYXRvb3NhIENvdW50eQorMjQ6VVM6VVNBOlVOSVRFRCBTVEFURVM6R0VPUkdJQTpDaGFybHRvbiBDb3VudHkKKzI1OlVTOlVTQTpVTklURUQgU1RBVEVTOkdFT1JHSUE6Q2hhdGhhbSBDb3VudHkKKzI2OlVTOlVTQTpVTklURUQgU1RBVEVTOkdFT1JHSUE6Q2hhdHRhaG9vY2hlZSBDb3VudHkKKzI3OlVTOlVTQTpVTklURUQgU1RBVEVTOkdFT1JHSUE6Q2hhdHRvb2dhIENvdW50eQorMjg6VVM6VVNBOlVOSVRFRCBTVEFURVM6R0VPUkdJQTpDaGVyb2tlZSBDb3VudHkKKzI5OlVTOlVTQTpVTklURUQgU1RBVEVTOkdFT1JHSUE6Q2xhcmtlIENvdW50eQorMzA6VVM6VVNBOlVOSVRFRCBTVEFURVM6R0VPUkdJQTpDbGF5IENvdW50eQorMzE6VVM6VVNBOlVOSVRFRCBTVEFURVM6R0VPUkdJQTpDbGF5dG9uIENvdW50eQorMzI6VVM6VVNBOlVOSVRFRCBTVEFURVM6R0VPUkdJQTpDbGluY2ggQ291bnR5CiszMzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpHRU9SR0lBOkNvYmIgQ291bnR5CiszNDpVUzpVU0E6VU5JVEVEIFNUQVRFUzpHRU9SR0lBOkNvZmZlZSBDb3VudHkKKzM1OlVTOlVTQTpVTklURUQgU1RBVEVTOkdFT1JHSUE6Q29scXVpdHQgQ291bnR5CiszNjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpHRU9SR0lBOkNvbHVtYmlhIENvdW50eQorMzc6VVM6VVNBOlVOSVRFRCBTVEFURVM6R0VPUkdJQTpDb29rIENvdW50eQorMzg6VVM6VVNBOlVOSVRFRCBTVEFURVM6R0VPUkdJQTpDb3dldGEgQ291bnR5CiszOTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpHRU9SR0lBOkNyYXdmb3JkIENvdW50eQorNDA6VVM6VVNBOlVOSVRFRCBTVEFURVM6R0VPUkdJQTpDcmlzcCBDb3VudHkKKzQxOlVTOlVTQTpVTklURUQgU1RBVEVTOkdFT1JHSUE6RGFkZSBDb3VudHkKKzQyOlVTOlVTQTpVTklURUQgU1RBVEVTOkdFT1JHSUE6RGF3c29uIENvdW50eQorNDM6VVM6VVNBOlVOSVRFRCBTVEFURVM6R0VPUkdJQTpEZUthbGIgQ291bnR5Cis0NDpVUzpVU0E6VU5JVEVEIFNUQVRFUzpHRU9SR0lBOkRlY2F0dXIgQ291bnR5Cis0NTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpHRU9SR0lBOkRvZGdlIENvdW50eQorNDY6VVM6VVNBOlVOSVRFRCBTVEFURVM6R0VPUkdJQTpEb29seSBDb3VudHkKKzQ3OlVTOlVTQTpVTklURUQgU1RBVEVTOkdFT1JHSUE6RG91Z2hlcnR5IENvdW50eQorNDg6VVM6VVNBOlVOSVRFRCBTVEFURVM6R0VPUkdJQTpEb3VnbGFzIENvdW50eQorNDk6VVM6VVNBOlVOSVRFRCBTVEFURVM6R0VPUkdJQTpFYXJseSBDb3VudHkKKzUwOlVTOlVTQTpVTklURUQgU1RBVEVTOkdFT1JHSUE6RWNob2xzIENvdW50eQorNTE6VVM6VVNBOlVOSVRFRCBTVEFURVM6R0VPUkdJQTpFZmZpbmdoYW0gQ291bnR5Cis1MjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpHRU9SR0lBOkVsYmVydCBDb3VudHkKKzUzOlVTOlVTQTpVTklURUQgU1RBVEVTOkdFT1JHSUE6RW1hbnVlbCBDb3VudHkKKzU0OlVTOlVTQTpVTklURUQgU1RBVEVTOkdFT1JHSUE6RXZhbnMgQ291bnR5Cis1NTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpHRU9SR0lBOkZhbm5pbiBDb3VudHkKKzU2OlVTOlVTQTpVTklURUQgU1RBVEVTOkdFT1JHSUE6RmF5ZXR0ZSBDb3VudHkKKzU3OlVTOlVTQTpVTklURUQgU1RBVEVTOkdFT1JHSUE6RmxveWQgQ291bnR5Cis1ODpVUzpVU0E6VU5JVEVEIFNUQVRFUzpHRU9SR0lBOkZvcnN5dGggQ291bnR5Cis1OTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpHRU9SR0lBOkZyYW5rbGluIENvdW50eQorNjA6VVM6VVNBOlVOSVRFRCBTVEFURVM6R0VPUkdJQTpGdWx0b24gQ291bnR5Cis2MTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpHRU9SR0lBOkdpbG1lciBDb3VudHkKKzYyOlVTOlVTQTpVTklURUQgU1RBVEVTOkdFT1JHSUE6R2xhc2NvY2sgQ291bnR5Cis2MzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpHRU9SR0lBOkdseW5uIENvdW50eQorNjQ6VVM6VVNBOlVOSVRFRCBTVEFURVM6R0VPUkdJQTpHb3Jkb24gQ291bnR5Cis2NTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpHRU9SR0lBOkdyYWR5IENvdW50eQorNjY6VVM6VVNBOlVOSVRFRCBTVEFURVM6R0VPUkdJQTpHcmVlbmUgQ291bnR5Cis2NzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpHRU9SR0lBOkd3aW5uZXR0IENvdW50eQorNjg6VVM6VVNBOlVOSVRFRCBTVEFURVM6R0VPUkdJQTpIYWJlcnNoYW0gQ291bnR5Cis2OTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpHRU9SR0lBOkhhbGwgQ291bnR5Cis3MDpVUzpVU0E6VU5JVEVEIFNUQVRFUzpHRU9SR0lBOkhhbmNvY2sgQ291bnR5Cis3MTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpHRU9SR0lBOkhhcmFsc29uIENvdW50eQorNzI6VVM6VVNBOlVOSVRFRCBTVEFURVM6R0VPUkdJQTpIYXJyaXMgQ291bnR5Cis3MzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpHRU9SR0lBOkhhcnQgQ291bnR5Cis3NDpVUzpVU0E6VU5JVEVEIFNUQVRFUzpHRU9SR0lBOkhlYXJkIENvdW50eQorNzU6VVM6VVNBOlVOSVRFRCBTVEFURVM6R0VPUkdJQTpIZW5yeSBDb3VudHkKKzc2OlVTOlVTQTpVTklURUQgU1RBVEVTOkdFT1JHSUE6SG91c3RvbiBDb3VudHkKKzc3OlVTOlVTQTpVTklURUQgU1RBVEVTOkdFT1JHSUE6SXJ3aW4gQ291bnR5Cis3ODpVUzpVU0E6VU5JVEVEIFNUQVRFUzpHRU9SR0lBOkphY2tzb24gQ291bnR5Cis3OTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpHRU9SR0lBOkphc3BlciBDb3VudHkKKzgwOlVTOlVTQTpVTklURUQgU1RBVEVTOkdFT1JHSUE6SmVmZiBEYXZpcyBDb3VudHkKKzgxOlVTOlVTQTpVTklURUQgU1RBVEVTOkdFT1JHSUE6SmVmZmVyc29uIENvdW50eQorODI6VVM6VVNBOlVOSVRFRCBTVEFURVM6R0VPUkdJQTpKZW5raW5zIENvdW50eQorODM6VVM6VVNBOlVOSVRFRCBTVEFURVM6R0VPUkdJQTpKb2huc29uIENvdW50eQorODQ6VVM6VVNBOlVOSVRFRCBTVEFURVM6R0VPUkdJQTpKb25lcyBDb3VudHkKKzg1OlVTOlVTQTpVTklURUQgU1RBVEVTOkdFT1JHSUE6TGFtYXIgQ291bnR5Cis4NjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpHRU9SR0lBOkxhbmllciBDb3VudHkKKzg3OlVTOlVTQTpVTklURUQgU1RBVEVTOkdFT1JHSUE6TGF1cmVucyBDb3VudHkKKzg4OlVTOlVTQTpVTklURUQgU1RBVEVTOkdFT1JHSUE6TGVlIENvdW50eQorODk6VVM6VVNBOlVOSVRFRCBTVEFURVM6R0VPUkdJQTpMaWJlcnR5IENvdW50eQorOTA6VVM6VVNBOlVOSVRFRCBTVEFURVM6R0VPUkdJQTpMaW5jb2xuIENvdW50eQorOTE6VVM6VVNBOlVOSVRFRCBTVEFURVM6R0VPUkdJQTpMb25nIENvdW50eQorOTI6VVM6VVNBOlVOSVRFRCBTVEFURVM6R0VPUkdJQTpMb3duZGVzIENvdW50eQorOTM6VVM6VVNBOlVOSVRFRCBTVEFURVM6R0VPUkdJQTpMdW1wa2luIENvdW50eQorOTQ6VVM6VVNBOlVOSVRFRCBTVEFURVM6R0VPUkdJQTpNYWNvbiBDb3VudHkKKzk1OlVTOlVTQTpVTklURUQgU1RBVEVTOkdFT1JHSUE6TWFkaXNvbiBDb3VudHkKKzk2OlVTOlVTQTpVTklURUQgU1RBVEVTOkdFT1JHSUE6TWFyaW9uIENvdW50eQorOTc6VVM6VVNBOlVOSVRFRCBTVEFURVM6R0VPUkdJQTpNY0R1ZmZpZSBDb3VudHkKKzk4OlVTOlVTQTpVTklURUQgU1RBVEVTOkdFT1JHSUE6TWNJbnRvc2ggQ291bnR5Cis5OTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpHRU9SR0lBOk1lcml3ZXRoZXIgQ291bnR5CisxMDA6VVM6VVNBOlVOSVRFRCBTVEFURVM6R0VPUkdJQTpNaWxsZXIgQ291bnR5CisxMDE6VVM6VVNBOlVOSVRFRCBTVEFURVM6R0VPUkdJQTpNaXRjaGVsbCBDb3VudHkKKzEwMjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpHRU9SR0lBOk1vbnJvZSBDb3VudHkKKzEwMzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpHRU9SR0lBOk1vbnRnb21lcnkgQ291bnR5CisxMDQ6VVM6VVNBOlVOSVRFRCBTVEFURVM6R0VPUkdJQTpNb3JnYW4gQ291bnR5CisxMDU6VVM6VVNBOlVOSVRFRCBTVEFURVM6R0VPUkdJQTpNdXJyYXkgQ291bnR5CisxMDY6VVM6VVNBOlVOSVRFRCBTVEFURVM6R0VPUkdJQTpNdXNjb2dlZSBDb3VudHkKKzEwNzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpHRU9SR0lBOk5ld3RvbiBDb3VudHkKKzEwODpVUzpVU0E6VU5JVEVEIFNUQVRFUzpHRU9SR0lBOk9jb25lZSBDb3VudHkKKzEwOTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpHRU9SR0lBOk9nbGV0aG9ycGUgQ291bnR5CisxMTA6VVM6VVNBOlVOSVRFRCBTVEFURVM6R0VPUkdJQTpQYXVsZGluZyBDb3VudHkKKzExMTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpHRU9SR0lBOlBlYWNoIENvdW50eQorMTEyOlVTOlVTQTpVTklURUQgU1RBVEVTOkdFT1JHSUE6UGlja2VucyBDb3VudHkKKzExMzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpHRU9SR0lBOlBpZXJjZSBDb3VudHkKKzExNDpVUzpVU0E6VU5JVEVEIFNUQVRFUzpHRU9SR0lBOlBpa2UgQ291bnR5CisxMTU6VVM6VVNBOlVOSVRFRCBTVEFURVM6R0VPUkdJQTpQb2xrIENvdW50eQorMTE2OlVTOlVTQTpVTklURUQgU1RBVEVTOkdFT1JHSUE6UHVsYXNraSBDb3VudHkKKzExNzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpHRU9SR0lBOlB1dG5hbSBDb3VudHkKKzExODpVUzpVU0E6VU5JVEVEIFNUQVRFUzpHRU9SR0lBOlF1aXRtYW4gQ291bnR5CisxMTk6VVM6VVNBOlVOSVRFRCBTVEFURVM6R0VPUkdJQTpSYWJ1biBDb3VudHkKKzEyMDpVUzpVU0E6VU5JVEVEIFNUQVRFUzpHRU9SR0lBOlJhbmRvbHBoIENvdW50eQorMTIxOlVTOlVTQTpVTklURUQgU1RBVEVTOkdFT1JHSUE6UmljaG1vbmQgQ291bnR5CisxMjI6VVM6VVNBOlVOSVRFRCBTVEFURVM6R0VPUkdJQTpSb2NrZGFsZSBDb3VudHkKKzEyMzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpHRU9SR0lBOlNjaGxleSBDb3VudHkKKzEyNDpVUzpVU0E6VU5JVEVEIFNUQVRFUzpHRU9SR0lBOlNjcmV2ZW4gQ291bnR5CisxMjU6VVM6VVNBOlVOSVRFRCBTVEFURVM6R0VPUkdJQTpTZW1pbm9sZSBDb3VudHkKKzEyNjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpHRU9SR0lBOlNwYWxkaW5nIENvdW50eQorMTI3OlVTOlVTQTpVTklURUQgU1RBVEVTOkdFT1JHSUE6U3RlcGhlbnMgQ291bnR5CisxMjg6VVM6VVNBOlVOSVRFRCBTVEFURVM6R0VPUkdJQTpTdGV3YXJ0IENvdW50eQorMTI5OlVTOlVTQTpVTklURUQgU1RBVEVTOkdFT1JHSUE6U3VtdGVyIENvdW50eQorMTMwOlVTOlVTQTpVTklURUQgU1RBVEVTOkdFT1JHSUE6VGFsYm90IENvdW50eQorMTMxOlVTOlVTQTpVTklURUQgU1RBVEVTOkdFT1JHSUE6VGFsaWFmZXJybyBDb3VudHkKKzEzMjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpHRU9SR0lBOlRhdHRuYWxsIENvdW50eQorMTMzOlVTOlVTQTpVTklURUQgU1RBVEVTOkdFT1JHSUE6VGF5bG9yIENvdW50eQorMTM0OlVTOlVTQTpVTklURUQgU1RBVEVTOkdFT1JHSUE6VGVsZmFpciBDb3VudHkKKzEzNTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpHRU9SR0lBOlRlcnJlbGwgQ291bnR5CisxMzY6VVM6VVNBOlVOSVRFRCBTVEFURVM6R0VPUkdJQTpUaG9tYXMgQ291bnR5CisxMzc6VVM6VVNBOlVOSVRFRCBTVEFURVM6R0VPUkdJQTpUaWZ0IENvdW50eQorMTM4OlVTOlVTQTpVTklURUQgU1RBVEVTOkdFT1JHSUE6VG9vbWJzIENvdW50eQorMTM5OlVTOlVTQTpVTklURUQgU1RBVEVTOkdFT1JHSUE6VG93bnMgQ291bnR5CisxNDA6VVM6VVNBOlVOSVRFRCBTVEFURVM6R0VPUkdJQTpUcmV1dGxlbiBDb3VudHkKKzE0MTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpHRU9SR0lBOlRyb3VwIENvdW50eQorMTQyOlVTOlVTQTpVTklURUQgU1RBVEVTOkdFT1JHSUE6VHVybmVyIENvdW50eQorMTQzOlVTOlVTQTpVTklURUQgU1RBVEVTOkdFT1JHSUE6VHdpZ2dzIENvdW50eQorMTQ0OlVTOlVTQTpVTklURUQgU1RBVEVTOkdFT1JHSUE6VW5pb24gQ291bnR5CisxNDU6VVM6VVNBOlVOSVRFRCBTVEFURVM6R0VPUkdJQTpVcHNvbiBDb3VudHkKKzE0NjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpHRU9SR0lBOldhbGtlciBDb3VudHkKKzE0NzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpHRU9SR0lBOldhbHRvbiBDb3VudHkKKzE0ODpVUzpVU0E6VU5JVEVEIFNUQVRFUzpHRU9SR0lBOldhcmUgQ291bnR5CisxNDk6VVM6VVNBOlVOSVRFRCBTVEFURVM6R0VPUkdJQTpXYXJyZW4gQ291bnR5CisxNTA6VVM6VVNBOlVOSVRFRCBTVEFURVM6R0VPUkdJQTpXYXNoaW5ndG9uIENvdW50eQorMTUxOlVTOlVTQTpVTklURUQgU1RBVEVTOkdFT1JHSUE6V2F5bmUgQ291bnR5CisxNTI6VVM6VVNBOlVOSVRFRCBTVEFURVM6R0VPUkdJQTpXZWJzdGVyIENvdW50eQorMTUzOlVTOlVTQTpVTklURUQgU1RBVEVTOkdFT1JHSUE6V2hlZWxlciBDb3VudHkKKzE1NDpVUzpVU0E6VU5JVEVEIFNUQVRFUzpHRU9SR0lBOldoaXRlIENvdW50eQorMTU1OlVTOlVTQTpVTklURUQgU1RBVEVTOkdFT1JHSUE6V2hpdGZpZWxkIENvdW50eQorMTU2OlVTOlVTQTpVTklURUQgU1RBVEVTOkdFT1JHSUE6V2lsY294IENvdW50eQorMTU3OlVTOlVTQTpVTklURUQgU1RBVEVTOkdFT1JHSUE6V2lsa2VzIENvdW50eQorMTU4OlVTOlVTQTpVTklURUQgU1RBVEVTOkdFT1JHSUE6V2lsa2luc29uIENvdW50eQorMTU5OlVTOlVTQTpVTklURUQgU1RBVEVTOkdFT1JHSUE6V29ydGggQ291bnR5CisxOlVTOlVTQTpVTklURUQgU1RBVEVTOkNPTE9SQURPOkFkYW1zIENvdW50eQorMjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpDT0xPUkFETzpBbGFtb3NhIENvdW50eQorMzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpDT0xPUkFETzpBcmFwYWhvZSBDb3VudHkKKzQ6VVM6VVNBOlVOSVRFRCBTVEFURVM6Q09MT1JBRE86QXJjaHVsZXRhIENvdW50eQorNTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpDT0xPUkFETzpCYWNhIENvdW50eQorNjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpDT0xPUkFETzpCZW50IENvdW50eQorNzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpDT0xPUkFETzpCb3VsZGVyIENvdW50eQorODpVUzpVU0E6VU5JVEVEIFNUQVRFUzpDT0xPUkFETzpDaGFmZmVlIENvdW50eQorOTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpDT0xPUkFETzpDaGV5ZW5uZSBDb3VudHkKKzEwOlVTOlVTQTpVTklURUQgU1RBVEVTOkNPTE9SQURPOkNsZWFyIENyZWVrIENvdW50eQorMTE6VVM6VVNBOlVOSVRFRCBTVEFURVM6Q09MT1JBRE86Q29uZWpvcyBDb3VudHkKKzEyOlVTOlVTQTpVTklURUQgU1RBVEVTOkNPTE9SQURPOkNvc3RpbGxhIENvdW50eQorMTM6VVM6VVNBOlVOSVRFRCBTVEFURVM6Q09MT1JBRE86Q3Jvd2xleSBDb3VudHkKKzE0OlVTOlVTQTpVTklURUQgU1RBVEVTOkNPTE9SQURPOkN1c3RlciBDb3VudHkKKzE1OlVTOlVTQTpVTklURUQgU1RBVEVTOkNPTE9SQURPOkRlbHRhIENvdW50eQorMTY6VVM6VVNBOlVOSVRFRCBTVEFURVM6Q09MT1JBRE86RGVudmVyIENvdW50eQorMTc6VVM6VVNBOlVOSVRFRCBTVEFURVM6Q09MT1JBRE86RG9sb3JlcyBDb3VudHkKKzE4OlVTOlVTQTpVTklURUQgU1RBVEVTOkNPTE9SQURPOkRvdWdsYXMgQ291bnR5CisxOTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpDT0xPUkFETzpFYWdsZSBDb3VudHkKKzIwOlVTOlVTQTpVTklURUQgU1RBVEVTOkNPTE9SQURPOkVsIFBhc28gQ291bnR5CisyMTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpDT0xPUkFETzpFbGJlcnQgQ291bnR5CisyMjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpDT0xPUkFETzpGcmVtb250IENvdW50eQorMjM6VVM6VVNBOlVOSVRFRCBTVEFURVM6Q09MT1JBRE86R2FyZmllbGQgQ291bnR5CisyNDpVUzpVU0E6VU5JVEVEIFNUQVRFUzpDT0xPUkFETzpHaWxwaW4gQ291bnR5CisyNTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpDT0xPUkFETzpHcmFuZCBDb3VudHkKKzI2OlVTOlVTQTpVTklURUQgU1RBVEVTOkNPTE9SQURPOkd1bm5pc29uIENvdW50eQorMjc6VVM6VVNBOlVOSVRFRCBTVEFURVM6Q09MT1JBRE86SGluc2RhbGUgQ291bnR5CisyODpVUzpVU0E6VU5JVEVEIFNUQVRFUzpDT0xPUkFETzpIdWVyZmFubyBDb3VudHkKKzI5OlVTOlVTQTpVTklURUQgU1RBVEVTOkNPTE9SQURPOkphY2tzb24gQ291bnR5CiszMDpVUzpVU0E6VU5JVEVEIFNUQVRFUzpDT0xPUkFETzpKZWZmZXJzb24gQ291bnR5CiszMTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpDT0xPUkFETzpLaW93YSBDb3VudHkKKzMyOlVTOlVTQTpVTklURUQgU1RBVEVTOkNPTE9SQURPOktpdCBDYXJzb24gQ291bnR5CiszMzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpDT0xPUkFETzpMYSBQbGF0YSBDb3VudHkKKzM0OlVTOlVTQTpVTklURUQgU1RBVEVTOkNPTE9SQURPOkxha2UgQ291bnR5CiszNTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpDT0xPUkFETzpMYXJpbWVyIENvdW50eQorMzY6VVM6VVNBOlVOSVRFRCBTVEFURVM6Q09MT1JBRE86TGFzIEFuaW1hcyBDb3VudHkKKzM3OlVTOlVTQTpVTklURUQgU1RBVEVTOkNPTE9SQURPOkxpbmNvbG4gQ291bnR5CiszODpVUzpVU0E6VU5JVEVEIFNUQVRFUzpDT0xPUkFETzpMb2dhbiBDb3VudHkKKzM5OlVTOlVTQTpVTklURUQgU1RBVEVTOkNPTE9SQURPOk1lc2EgQ291bnR5Cis0MDpVUzpVU0E6VU5JVEVEIFNUQVRFUzpDT0xPUkFETzpNaW5lcmFsIENvdW50eQorNDE6VVM6VVNBOlVOSVRFRCBTVEFURVM6Q09MT1JBRE86TW9mZmF0IENvdW50eQorNDI6VVM6VVNBOlVOSVRFRCBTVEFURVM6Q09MT1JBRE86TW9udGV6dW1hIENvdW50eQorNDM6VVM6VVNBOlVOSVRFRCBTVEFURVM6Q09MT1JBRE86TW9udHJvc2UgQ291bnR5Cis0NDpVUzpVU0E6VU5JVEVEIFNUQVRFUzpDT0xPUkFETzpNb3JnYW4gQ291bnR5Cis0NTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpDT0xPUkFETzpPdGVybyBDb3VudHkKKzQ2OlVTOlVTQTpVTklURUQgU1RBVEVTOkNPTE9SQURPOk91cmF5IENvdW50eQorNDc6VVM6VVNBOlVOSVRFRCBTVEFURVM6Q09MT1JBRE86UGFyayBDb3VudHkKKzQ4OlVTOlVTQTpVTklURUQgU1RBVEVTOkNPTE9SQURPOlBoaWxsaXBzIENvdW50eQorNDk6VVM6VVNBOlVOSVRFRCBTVEFURVM6Q09MT1JBRE86UGl0a2luIENvdW50eQorNTA6VVM6VVNBOlVOSVRFRCBTVEFURVM6Q09MT1JBRE86UHJvd2VycyBDb3VudHkKKzUxOlVTOlVTQTpVTklURUQgU1RBVEVTOkNPTE9SQURPOlB1ZWJsbyBDb3VudHkKKzUyOlVTOlVTQTpVTklURUQgU1RBVEVTOkNPTE9SQURPOlJpbyBCbGFuY28gQ291bnR5Cis1MzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpDT0xPUkFETzpSaW8gR3JhbmRlIENvdW50eQorNTQ6VVM6VVNBOlVOSVRFRCBTVEFURVM6Q09MT1JBRE86Um91dHQgQ291bnR5Cis1NTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpDT0xPUkFETzpTYWd1YWNoZSBDb3VudHkKKzU2OlVTOlVTQTpVTklURUQgU1RBVEVTOkNPTE9SQURPOlNhbiBKdWFuIENvdW50eQorNTc6VVM6VVNBOlVOSVRFRCBTVEFURVM6Q09MT1JBRE86U2FuIE1pZ3VlbCBDb3VudHkKKzU4OlVTOlVTQTpVTklURUQgU1RBVEVTOkNPTE9SQURPOlNlZGd3aWNrIENvdW50eQorNTk6VVM6VVNBOlVOSVRFRCBTVEFURVM6Q09MT1JBRE86U3VtbWl0IENvdW50eQorNjA6VVM6VVNBOlVOSVRFRCBTVEFURVM6Q09MT1JBRE86VGVsbGVyIENvdW50eQorNjE6VVM6VVNBOlVOSVRFRCBTVEFURVM6Q09MT1JBRE86V2FzaGluZ3RvbiBDb3VudHkKKzYyOlVTOlVTQTpVTklURUQgU1RBVEVTOkNPTE9SQURPOldlbGQgQ291bnR5Cis2MzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpDT0xPUkFETzpZdW1hIENvdW50eQorMTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpORUJSQVNLQTpBZGFtcyBDb3VudHkKKzI6VVM6VVNBOlVOSVRFRCBTVEFURVM6TkVCUkFTS0E6QW50ZWxvcGUgQ291bnR5CiszOlVTOlVTQTpVTklURUQgU1RBVEVTOk5FQlJBU0tBOkFydGh1ciBDb3VudHkKKzQ6VVM6VVNBOlVOSVRFRCBTVEFURVM6TkVCUkFTS0E6QmFubmVyIENvdW50eQorNTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpORUJSQVNLQTpCbGFpbmUgQ291bnR5Cis2OlVTOlVTQTpVTklURUQgU1RBVEVTOk5FQlJBU0tBOkJvb25lIENvdW50eQorNzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpORUJSQVNLQTpCb3ggQnV0dGUgQ291bnR5Cis4OlVTOlVTQTpVTklURUQgU1RBVEVTOk5FQlJBU0tBOkJveWQgQ291bnR5Cis5OlVTOlVTQTpVTklURUQgU1RBVEVTOk5FQlJBU0tBOkJyb3duIENvdW50eQorMTA6VVM6VVNBOlVOSVRFRCBTVEFURVM6TkVCUkFTS0E6QnVmZmFsbyBDb3VudHkKKzExOlVTOlVTQTpVTklURUQgU1RBVEVTOk5FQlJBU0tBOkJ1cnQgQ291bnR5CisxMjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpORUJSQVNLQTpCdXRsZXIgQ291bnR5CisxMzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpORUJSQVNLQTpDYXNzIENvdW50eQorMTQ6VVM6VVNBOlVOSVRFRCBTVEFURVM6TkVCUkFTS0E6Q2VkYXIgQ291bnR5CisxNTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpORUJSQVNLQTpDaGFzZSBDb3VudHkKKzE2OlVTOlVTQTpVTklURUQgU1RBVEVTOk5FQlJBU0tBOkNoZXJyeSBDb3VudHkKKzE3OlVTOlVTQTpVTklURUQgU1RBVEVTOk5FQlJBU0tBOkNoZXllbm5lIENvdW50eQorMTg6VVM6VVNBOlVOSVRFRCBTVEFURVM6TkVCUkFTS0E6Q2xheSBDb3VudHkKKzE5OlVTOlVTQTpVTklURUQgU1RBVEVTOk5FQlJBU0tBOkNvbGZheCBDb3VudHkKKzIwOlVTOlVTQTpVTklURUQgU1RBVEVTOk5FQlJBU0tBOkN1bWluZyBDb3VudHkKKzIxOlVTOlVTQTpVTklURUQgU1RBVEVTOk5FQlJBU0tBOkN1c3RlciBDb3VudHkKKzIyOlVTOlVTQTpVTklURUQgU1RBVEVTOk5FQlJBU0tBOkRha290YSBDb3VudHkKKzIzOlVTOlVTQTpVTklURUQgU1RBVEVTOk5FQlJBU0tBOkRhd2VzIENvdW50eQorMjQ6VVM6VVNBOlVOSVRFRCBTVEFURVM6TkVCUkFTS0E6RGF3c29uIENvdW50eQorMjU6VVM6VVNBOlVOSVRFRCBTVEFURVM6TkVCUkFTS0E6RGV1ZWwgQ291bnR5CisyNjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpORUJSQVNLQTpEaXhvbiBDb3VudHkKKzI3OlVTOlVTQTpVTklURUQgU1RBVEVTOk5FQlJBU0tBOkRvZGdlIENvdW50eQorMjg6VVM6VVNBOlVOSVRFRCBTVEFURVM6TkVCUkFTS0E6RG91Z2xhcyBDb3VudHkKKzI5OlVTOlVTQTpVTklURUQgU1RBVEVTOk5FQlJBU0tBOkR1bmR5IENvdW50eQorMzA6VVM6VVNBOlVOSVRFRCBTVEFURVM6TkVCUkFTS0E6RmlsbG1vcmUgQ291bnR5CiszMTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpORUJSQVNLQTpGcmFua2xpbiBDb3VudHkKKzMyOlVTOlVTQTpVTklURUQgU1RBVEVTOk5FQlJBU0tBOkZyb250aWVyIENvdW50eQorMzM6VVM6VVNBOlVOSVRFRCBTVEFURVM6TkVCUkFTS0E6RnVybmFzIENvdW50eQorMzQ6VVM6VVNBOlVOSVRFRCBTVEFURVM6TkVCUkFTS0E6R2FnZSBDb3VudHkKKzM1OlVTOlVTQTpVTklURUQgU1RBVEVTOk5FQlJBU0tBOkdhcmRlbiBDb3VudHkKKzM2OlVTOlVTQTpVTklURUQgU1RBVEVTOk5FQlJBU0tBOkdhcmZpZWxkIENvdW50eQorMzc6VVM6VVNBOlVOSVRFRCBTVEFURVM6TkVCUkFTS0E6R29zcGVyIENvdW50eQorMzg6VVM6VVNBOlVOSVRFRCBTVEFURVM6TkVCUkFTS0E6R3JhbnQgQ291bnR5CiszOTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpORUJSQVNLQTpHcmVlbGV5IENvdW50eQorNDA6VVM6VVNBOlVOSVRFRCBTVEFURVM6TkVCUkFTS0E6SGFsbCBDb3VudHkKKzQxOlVTOlVTQTpVTklURUQgU1RBVEVTOk5FQlJBU0tBOkhhbWlsdG9uIENvdW50eQorNDI6VVM6VVNBOlVOSVRFRCBTVEFURVM6TkVCUkFTS0E6SGFybGFuIENvdW50eQorNDM6VVM6VVNBOlVOSVRFRCBTVEFURVM6TkVCUkFTS0E6SGF5ZXMgQ291bnR5Cis0NDpVUzpVU0E6VU5JVEVEIFNUQVRFUzpORUJSQVNLQTpIaXRjaGNvY2sgQ291bnR5Cis0NTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpORUJSQVNLQTpIb2x0IENvdW50eQorNDY6VVM6VVNBOlVOSVRFRCBTVEFURVM6TkVCUkFTS0E6SG9va2VyIENvdW50eQorNDc6VVM6VVNBOlVOSVRFRCBTVEFURVM6TkVCUkFTS0E6SG93YXJkIENvdW50eQorNDg6VVM6VVNBOlVOSVRFRCBTVEFURVM6TkVCUkFTS0E6SmVmZmVyc29uIENvdW50eQorNDk6VVM6VVNBOlVOSVRFRCBTVEFURVM6TkVCUkFTS0E6Sm9obnNvbiBDb3VudHkKKzUwOlVTOlVTQTpVTklURUQgU1RBVEVTOk5FQlJBU0tBOktlYXJuZXkgQ291bnR5Cis1MTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpORUJSQVNLQTpLZWl0aCBDb3VudHkKKzUyOlVTOlVTQTpVTklURUQgU1RBVEVTOk5FQlJBU0tBOktleWEgUGFoYSBDb3VudHkKKzUzOlVTOlVTQTpVTklURUQgU1RBVEVTOk5FQlJBU0tBOktpbWJhbGwgQ291bnR5Cis1NDpVUzpVU0E6VU5JVEVEIFNUQVRFUzpORUJSQVNLQTpLbm94IENvdW50eQorNTU6VVM6VVNBOlVOSVRFRCBTVEFURVM6TkVCUkFTS0E6TGFuY2FzdGVyIENvdW50eQorNTY6VVM6VVNBOlVOSVRFRCBTVEFURVM6TkVCUkFTS0E6TGluY29sbiBDb3VudHkKKzU3OlVTOlVTQTpVTklURUQgU1RBVEVTOk5FQlJBU0tBOkxvZ2FuIENvdW50eQorNTg6VVM6VVNBOlVOSVRFRCBTVEFURVM6TkVCUkFTS0E6TG91cCBDb3VudHkKKzU5OlVTOlVTQTpVTklURUQgU1RBVEVTOk5FQlJBU0tBOk1hZGlzb24gQ291bnR5Cis2MDpVUzpVU0E6VU5JVEVEIFNUQVRFUzpORUJSQVNLQTpNY1BoZXJzb24gQ291bnR5Cis2MTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpORUJSQVNLQTpNZXJyaWNrIENvdW50eQorNjI6VVM6VVNBOlVOSVRFRCBTVEFURVM6TkVCUkFTS0E6TW9ycmlsbCBDb3VudHkKKzYzOlVTOlVTQTpVTklURUQgU1RBVEVTOk5FQlJBU0tBOk5hbmNlIENvdW50eQorNjQ6VVM6VVNBOlVOSVRFRCBTVEFURVM6TkVCUkFTS0E6TmVtYWhhIENvdW50eQorNjU6VVM6VVNBOlVOSVRFRCBTVEFURVM6TkVCUkFTS0E6TnVja29sbHMgQ291bnR5Cis2NjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpORUJSQVNLQTpPdG9lIENvdW50eQorNjc6VVM6VVNBOlVOSVRFRCBTVEFURVM6TkVCUkFTS0E6UGF3bmVlIENvdW50eQorNjg6VVM6VVNBOlVOSVRFRCBTVEFURVM6TkVCUkFTS0E6UGVya2lucyBDb3VudHkKKzY5OlVTOlVTQTpVTklURUQgU1RBVEVTOk5FQlJBU0tBOlBoZWxwcyBDb3VudHkKKzcwOlVTOlVTQTpVTklURUQgU1RBVEVTOk5FQlJBU0tBOlBpZXJjZSBDb3VudHkKKzcxOlVTOlVTQTpVTklURUQgU1RBVEVTOk5FQlJBU0tBOlBsYXR0ZSBDb3VudHkKKzcyOlVTOlVTQTpVTklURUQgU1RBVEVTOk5FQlJBU0tBOlBvbGsgQ291bnR5Cis3MzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpORUJSQVNLQTpSZWQgV2lsbG93IENvdW50eQorNzQ6VVM6VVNBOlVOSVRFRCBTVEFURVM6TkVCUkFTS0E6UmljaGFyZHNvbiBDb3VudHkKKzc1OlVTOlVTQTpVTklURUQgU1RBVEVTOk5FQlJBU0tBOlJvY2sgQ291bnR5Cis3NjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpORUJSQVNLQTpTYWxpbmUgQ291bnR5Cis3NzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpORUJSQVNLQTpTYXJweSBDb3VudHkKKzc4OlVTOlVTQTpVTklURUQgU1RBVEVTOk5FQlJBU0tBOlNhdW5kZXJzIENvdW50eQorNzk6VVM6VVNBOlVOSVRFRCBTVEFURVM6TkVCUkFTS0E6U2NvdHRzIEJsdWZmIENvdW50eQorODA6VVM6VVNBOlVOSVRFRCBTVEFURVM6TkVCUkFTS0E6U2V3YXJkIENvdW50eQorODE6VVM6VVNBOlVOSVRFRCBTVEFURVM6TkVCUkFTS0E6U2hlcmlkYW4gQ291bnR5Cis4MjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpORUJSQVNLQTpTaGVybWFuIENvdW50eQorODM6VVM6VVNBOlVOSVRFRCBTVEFURVM6TkVCUkFTS0E6U2lvdXggQ291bnR5Cis4NDpVUzpVU0E6VU5JVEVEIFNUQVRFUzpORUJSQVNLQTpTdGFudG9uIENvdW50eQorODU6VVM6VVNBOlVOSVRFRCBTVEFURVM6TkVCUkFTS0E6VGhheWVyIENvdW50eQorODY6VVM6VVNBOlVOSVRFRCBTVEFURVM6TkVCUkFTS0E6VGhvbWFzIENvdW50eQorODc6VVM6VVNBOlVOSVRFRCBTVEFURVM6TkVCUkFTS0E6VGh1cnN0b24gQ291bnR5Cis4ODpVUzpVU0E6VU5JVEVEIFNUQVRFUzpORUJSQVNLQTpWYWxsZXkgQ291bnR5Cis4OTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpORUJSQVNLQTpXYXNoaW5ndG9uIENvdW50eQorOTA6VVM6VVNBOlVOSVRFRCBTVEFURVM6TkVCUkFTS0E6V2F5bmUgQ291bnR5Cis5MTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpORUJSQVNLQTpXZWJzdGVyIENvdW50eQorOTI6VVM6VVNBOlVOSVRFRCBTVEFURVM6TkVCUkFTS0E6V2hlZWxlciBDb3VudHkKKzkzOlVTOlVTQTpVTklURUQgU1RBVEVTOk5FQlJBU0tBOllvcmsgQ291bnR5CisxOlVTOlVTQTpVTklURUQgU1RBVEVTOlNPVVRIIENBUk9MSU5BOkFiYmV2aWxsZSBDb3VudHkKKzI6VVM6VVNBOlVOSVRFRCBTVEFURVM6U09VVEggQ0FST0xJTkE6QWlrZW4gQ291bnR5CiszOlVTOlVTQTpVTklURUQgU1RBVEVTOlNPVVRIIENBUk9MSU5BOkFsbGVuZGFsZSBDb3VudHkKKzQ6VVM6VVNBOlVOSVRFRCBTVEFURVM6U09VVEggQ0FST0xJTkE6QW5kZXJzb24gQ291bnR5Cis1OlVTOlVTQTpVTklURUQgU1RBVEVTOlNPVVRIIENBUk9MSU5BOkJhbWJlcmcgQ291bnR5Cis2OlVTOlVTQTpVTklURUQgU1RBVEVTOlNPVVRIIENBUk9MSU5BOkJhcm53ZWxsIENvdW50eQorNzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpTT1VUSCBDQVJPTElOQTpCZWF1Zm9ydCBDb3VudHkKKzg6VVM6VVNBOlVOSVRFRCBTVEFURVM6U09VVEggQ0FST0xJTkE6QmVya2VsZXkgQ291bnR5Cis5OlVTOlVTQTpVTklURUQgU1RBVEVTOlNPVVRIIENBUk9MSU5BOkNhbGhvdW4gQ291bnR5CisxMDpVUzpVU0E6VU5JVEVEIFNUQVRFUzpTT1VUSCBDQVJPTElOQTpDaGFybGVzdG9uIENvdW50eQorMTE6VVM6VVNBOlVOSVRFRCBTVEFURVM6U09VVEggQ0FST0xJTkE6Q2hlcm9rZWUgQ291bnR5CisxMjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpTT1VUSCBDQVJPTElOQTpDaGVzdGVyIENvdW50eQorMTM6VVM6VVNBOlVOSVRFRCBTVEFURVM6U09VVEggQ0FST0xJTkE6Q2hlc3RlcmZpZWxkIENvdW50eQorMTQ6VVM6VVNBOlVOSVRFRCBTVEFURVM6U09VVEggQ0FST0xJTkE6Q2xhcmVuZG9uIENvdW50eQorMTU6VVM6VVNBOlVOSVRFRCBTVEFURVM6U09VVEggQ0FST0xJTkE6Q29sbGV0b24gQ291bnR5CisxNjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpTT1VUSCBDQVJPTElOQTpEYXJsaW5ndG9uIENvdW50eQorMTc6VVM6VVNBOlVOSVRFRCBTVEFURVM6U09VVEggQ0FST0xJTkE6RGlsbG9uIENvdW50eQorMTg6VVM6VVNBOlVOSVRFRCBTVEFURVM6U09VVEggQ0FST0xJTkE6RG9yY2hlc3RlciBDb3VudHkKKzE5OlVTOlVTQTpVTklURUQgU1RBVEVTOlNPVVRIIENBUk9MSU5BOkVkZ2VmaWVsZCBDb3VudHkKKzIwOlVTOlVTQTpVTklURUQgU1RBVEVTOlNPVVRIIENBUk9MSU5BOkZhaXJmaWVsZCBDb3VudHkKKzIxOlVTOlVTQTpVTklURUQgU1RBVEVTOlNPVVRIIENBUk9MSU5BOkZsb3JlbmNlIENvdW50eQorMjI6VVM6VVNBOlVOSVRFRCBTVEFURVM6U09VVEggQ0FST0xJTkE6R2VvcmdldG93biBDb3VudHkKKzIzOlVTOlVTQTpVTklURUQgU1RBVEVTOlNPVVRIIENBUk9MSU5BOkdyZWVudmlsbGUgQ291bnR5CisyNDpVUzpVU0E6VU5JVEVEIFNUQVRFUzpTT1VUSCBDQVJPTElOQTpHcmVlbndvb2QgQ291bnR5CisyNTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpTT1VUSCBDQVJPTElOQTpIYW1wdG9uIENvdW50eQorMjY6VVM6VVNBOlVOSVRFRCBTVEFURVM6U09VVEggQ0FST0xJTkE6SG9ycnkgQ291bnR5CisyNzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpTT1VUSCBDQVJPTElOQTpKYXNwZXIgQ291bnR5CisyODpVUzpVU0E6VU5JVEVEIFNUQVRFUzpTT1VUSCBDQVJPTElOQTpLZXJzaGF3IENvdW50eQorMjk6VVM6VVNBOlVOSVRFRCBTVEFURVM6U09VVEggQ0FST0xJTkE6TGFuY2FzdGVyIENvdW50eQorMzA6VVM6VVNBOlVOSVRFRCBTVEFURVM6U09VVEggQ0FST0xJTkE6TGF1cmVucyBDb3VudHkKKzMxOlVTOlVTQTpVTklURUQgU1RBVEVTOlNPVVRIIENBUk9MSU5BOkxlZSBDb3VudHkKKzMyOlVTOlVTQTpVTklURUQgU1RBVEVTOlNPVVRIIENBUk9MSU5BOkxleGluZ3RvbiBDb3VudHkKKzMzOlVTOlVTQTpVTklURUQgU1RBVEVTOlNPVVRIIENBUk9MSU5BOk1hcmlvbiBDb3VudHkKKzM0OlVTOlVTQTpVTklURUQgU1RBVEVTOlNPVVRIIENBUk9MSU5BOk1hcmxib3JvIENvdW50eQorMzU6VVM6VVNBOlVOSVRFRCBTVEFURVM6U09VVEggQ0FST0xJTkE6TWNDb3JtaWNrIENvdW50eQorMzY6VVM6VVNBOlVOSVRFRCBTVEFURVM6U09VVEggQ0FST0xJTkE6TmV3YmVycnkgQ291bnR5CiszNzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpTT1VUSCBDQVJPTElOQTpPY29uZWUgQ291bnR5CiszODpVUzpVU0E6VU5JVEVEIFNUQVRFUzpTT1VUSCBDQVJPTElOQTpPcmFuZ2VidXJnIENvdW50eQorMzk6VVM6VVNBOlVOSVRFRCBTVEFURVM6U09VVEggQ0FST0xJTkE6UGlja2VucyBDb3VudHkKKzQwOlVTOlVTQTpVTklURUQgU1RBVEVTOlNPVVRIIENBUk9MSU5BOlJpY2hsYW5kIENvdW50eQorNDE6VVM6VVNBOlVOSVRFRCBTVEFURVM6U09VVEggQ0FST0xJTkE6U2FsdWRhIENvdW50eQorNDI6VVM6VVNBOlVOSVRFRCBTVEFURVM6U09VVEggQ0FST0xJTkE6U3BhcnRhbmJ1cmcgQ291bnR5Cis0MzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpTT1VUSCBDQVJPTElOQTpTdW10ZXIgQ291bnR5Cis0NDpVUzpVU0E6VU5JVEVEIFNUQVRFUzpTT1VUSCBDQVJPTElOQTpVbmlvbiBDb3VudHkKKzQ1OlVTOlVTQTpVTklURUQgU1RBVEVTOlNPVVRIIENBUk9MSU5BOldpbGxpYW1zYnVyZyBDb3VudHkKKzQ2OlVTOlVTQTpVTklURUQgU1RBVEVTOlNPVVRIIENBUk9MSU5BOllvcmsgQ291bnR5CisxOlVTOlVTQTpVTklURUQgU1RBVEVTOkFMQVNLQTpBbGV1dGlhbnMgRWFzdCBCb3JvdWdoCisyOlVTOlVTQTpVTklURUQgU1RBVEVTOkFMQVNLQTpBbGV1dGlhbnMgV2VzdAorMzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpBTEFTS0E6QW5jaG9yYWdlIE11bmljaXBhbGl0eQorNDpVUzpVU0E6VU5JVEVEIFNUQVRFUzpBTEFTS0E6QmV0aGVsCis1OlVTOlVTQTpVTklURUQgU1RBVEVTOkFMQVNLQTpCcmlzdG9sIEJheSBCb3JvdWdoCis2OlVTOlVTQTpVTklURUQgU1RBVEVTOkFMQVNLQTpEZW5hbGkgQm9yb3VnaAorNzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpBTEFTS0E6RGlsbGluZ2hhbQorODpVUzpVU0E6VU5JVEVEIFNUQVRFUzpBTEFTS0E6RmFpcmJhbmtzIE5vcnRoIFN0YXIgQm9yb3VnaAorOTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpBTEFTS0E6SGFpbmVzIEJvcm91Z2gKKzEwOlVTOlVTQTpVTklURUQgU1RBVEVTOkFMQVNLQTpKdW5lYXUgQm9yb3VnaAorMTE6VVM6VVNBOlVOSVRFRCBTVEFURVM6QUxBU0tBOktlbmFpIFBlbmluc3VsYSBCb3JvdWdoCisxMjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpBTEFTS0E6S2V0Y2hpa2FuIEdhdGV3YXkgQm9yb3VnaAorMTM6VVM6VVNBOlVOSVRFRCBTVEFURVM6QUxBU0tBOktvZGlhayBJc2xhbmQgQm9yb3VnaAorMTQ6VVM6VVNBOlVOSVRFRCBTVEFURVM6QUxBU0tBOkxha2UgYW5kIFBlbmluc3VsYSBCb3JvdWdoCisxNTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpBTEFTS0E6TWF0YW51c2thLVN1c2l0bmEgQm9yb3VnaAorMTY6VVM6VVNBOlVOSVRFRCBTVEFURVM6QUxBU0tBOk5vbWUKKzE3OlVTOlVTQTpVTklURUQgU1RBVEVTOkFMQVNLQTpOb3J0aCBTbG9wZSBCb3JvdWdoCisxODpVUzpVU0E6VU5JVEVEIFNUQVRFUzpBTEFTS0E6Tm9ydGh3ZXN0IEFyY3RpYyBCb3JvdWdoCisxOTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpBTEFTS0E6UHJpbmNlIG9mIFdhbGVzLU91dGVyIEtldGNoaWthbgorMjA6VVM6VVNBOlVOSVRFRCBTVEFURVM6QUxBU0tBOlNpdGthIEJvcm91Z2gKKzIxOlVTOlVTQTpVTklURUQgU1RBVEVTOkFMQVNLQTpTa2Fnd2F5LUhvb25haC1Bbmdvb24KKzIyOlVTOlVTQTpVTklURUQgU1RBVEVTOkFMQVNLQTpTb3V0aGVhc3QgRmFpcmJhbmtzCisyMzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpBTEFTS0E6VmFsZGV6LUNvcmRvdmEKKzI0OlVTOlVTQTpVTklURUQgU1RBVEVTOkFMQVNLQTpXYWRlIEhhbXB0b24KKzI1OlVTOlVTQTpVTklURUQgU1RBVEVTOkFMQVNLQTpXcmFuZ2VsbC1QZXRlcnNidXJnCisyNjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpBTEFTS0E6WWFrdXRhdCBCb3JvdWdoCisyNzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpBTEFTS0E6WXVrb24tS295dWt1aworMTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpQRU5OU1lMVkFOSUE6QWRhbXMgQ291bnR5CisyOlVTOlVTQTpVTklURUQgU1RBVEVTOlBFTk5TWUxWQU5JQTpBbGxlZ2hlbnkgQ291bnR5CiszOlVTOlVTQTpVTklURUQgU1RBVEVTOlBFTk5TWUxWQU5JQTpBcm1zdHJvbmcgQ291bnR5Cis0OlVTOlVTQTpVTklURUQgU1RBVEVTOlBFTk5TWUxWQU5JQTpCZWF2ZXIgQ291bnR5Cis1OlVTOlVTQTpVTklURUQgU1RBVEVTOlBFTk5TWUxWQU5JQTpCZWRmb3JkIENvdW50eQorNjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpQRU5OU1lMVkFOSUE6QmVya3MgQ291bnR5Cis3OlVTOlVTQTpVTklURUQgU1RBVEVTOlBFTk5TWUxWQU5JQTpCbGFpciBDb3VudHkKKzg6VVM6VVNBOlVOSVRFRCBTVEFURVM6UEVOTlNZTFZBTklBOkJyYWRmb3JkIENvdW50eQorOTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpQRU5OU1lMVkFOSUE6QnVja3MgQ291bnR5CisxMDpVUzpVU0E6VU5JVEVEIFNUQVRFUzpQRU5OU1lMVkFOSUE6QnV0bGVyIENvdW50eQorMTE6VVM6VVNBOlVOSVRFRCBTVEFURVM6UEVOTlNZTFZBTklBOkNhbWJyaWEgQ291bnR5CisxMjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpQRU5OU1lMVkFOSUE6Q2FtZXJvbiBDb3VudHkKKzEzOlVTOlVTQTpVTklURUQgU1RBVEVTOlBFTk5TWUxWQU5JQTpDYXJib24gQ291bnR5CisxNDpVUzpVU0E6VU5JVEVEIFNUQVRFUzpQRU5OU1lMVkFOSUE6Q2VudHJlIENvdW50eQorMTU6VVM6VVNBOlVOSVRFRCBTVEFURVM6UEVOTlNZTFZBTklBOkNoZXN0ZXIgQ291bnR5CisxNjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpQRU5OU1lMVkFOSUE6Q2xhcmlvbiBDb3VudHkKKzE3OlVTOlVTQTpVTklURUQgU1RBVEVTOlBFTk5TWUxWQU5JQTpDbGVhcmZpZWxkIENvdW50eQorMTg6VVM6VVNBOlVOSVRFRCBTVEFURVM6UEVOTlNZTFZBTklBOkNsaW50b24gQ291bnR5CisxOTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpQRU5OU1lMVkFOSUE6Q29sdW1iaWEgQ291bnR5CisyMDpVUzpVU0E6VU5JVEVEIFNUQVRFUzpQRU5OU1lMVkFOSUE6Q3Jhd2ZvcmQgQ291bnR5CisyMTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpQRU5OU1lMVkFOSUE6Q3VtYmVybGFuZCBDb3VudHkKKzIyOlVTOlVTQTpVTklURUQgU1RBVEVTOlBFTk5TWUxWQU5JQTpEYXVwaGluIENvdW50eQorMjM6VVM6VVNBOlVOSVRFRCBTVEFURVM6UEVOTlNZTFZBTklBOkRlbGF3YXJlIENvdW50eQorMjQ6VVM6VVNBOlVOSVRFRCBTVEFURVM6UEVOTlNZTFZBTklBOkVsayBDb3VudHkKKzI1OlVTOlVTQTpVTklURUQgU1RBVEVTOlBFTk5TWUxWQU5JQTpFcmllIENvdW50eQorMjY6VVM6VVNBOlVOSVRFRCBTVEFURVM6UEVOTlNZTFZBTklBOkZheWV0dGUgQ291bnR5CisyNzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpQRU5OU1lMVkFOSUE6Rm9yZXN0IENvdW50eQorMjg6VVM6VVNBOlVOSVRFRCBTVEFURVM6UEVOTlNZTFZBTklBOkZyYW5rbGluIENvdW50eQorMjk6VVM6VVNBOlVOSVRFRCBTVEFURVM6UEVOTlNZTFZBTklBOkZ1bHRvbiBDb3VudHkKKzMwOlVTOlVTQTpVTklURUQgU1RBVEVTOlBFTk5TWUxWQU5JQTpHcmVlbmUgQ291bnR5CiszMTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpQRU5OU1lMVkFOSUE6SHVudGluZ2RvbiBDb3VudHkKKzMyOlVTOlVTQTpVTklURUQgU1RBVEVTOlBFTk5TWUxWQU5JQTpJbmRpYW5hIENvdW50eQorMzM6VVM6VVNBOlVOSVRFRCBTVEFURVM6UEVOTlNZTFZBTklBOkplZmZlcnNvbiBDb3VudHkKKzM0OlVTOlVTQTpVTklURUQgU1RBVEVTOlBFTk5TWUxWQU5JQTpKdW5pYXRhIENvdW50eQorMzU6VVM6VVNBOlVOSVRFRCBTVEFURVM6UEVOTlNZTFZBTklBOkxhY2thd2FubmEgQ291bnR5CiszNjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpQRU5OU1lMVkFOSUE6TGFuY2FzdGVyIENvdW50eQorMzc6VVM6VVNBOlVOSVRFRCBTVEFURVM6UEVOTlNZTFZBTklBOkxhd3JlbmNlIENvdW50eQorMzg6VVM6VVNBOlVOSVRFRCBTVEFURVM6UEVOTlNZTFZBTklBOkxlYmFub24gQ291bnR5CiszOTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpQRU5OU1lMVkFOSUE6TGVoaWdoIENvdW50eQorNDA6VVM6VVNBOlVOSVRFRCBTVEFURVM6UEVOTlNZTFZBTklBOkx1emVybmUgQ291bnR5Cis0MTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpQRU5OU1lMVkFOSUE6THljb21pbmcgQ291bnR5Cis0MjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpQRU5OU1lMVkFOSUE6TWNLZWFuIENvdW50eQorNDM6VVM6VVNBOlVOSVRFRCBTVEFURVM6UEVOTlNZTFZBTklBOk1lcmNlciBDb3VudHkKKzQ0OlVTOlVTQTpVTklURUQgU1RBVEVTOlBFTk5TWUxWQU5JQTpNaWZmbGluIENvdW50eQorNDU6VVM6VVNBOlVOSVRFRCBTVEFURVM6UEVOTlNZTFZBTklBOk1vbnJvZSBDb3VudHkKKzQ2OlVTOlVTQTpVTklURUQgU1RBVEVTOlBFTk5TWUxWQU5JQTpNb250Z29tZXJ5IENvdW50eQorNDc6VVM6VVNBOlVOSVRFRCBTVEFURVM6UEVOTlNZTFZBTklBOk1vbnRvdXIgQ291bnR5Cis0ODpVUzpVU0E6VU5JVEVEIFNUQVRFUzpQRU5OU1lMVkFOSUE6Tm9ydGhhbXB0b24gQ291bnR5Cis0OTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpQRU5OU1lMVkFOSUE6Tm9ydGh1bWJlcmxhbmQgQ291bnR5Cis1MDpVUzpVU0E6VU5JVEVEIFNUQVRFUzpQRU5OU1lMVkFOSUE6UGVycnkgQ291bnR5Cis1MTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpQRU5OU1lMVkFOSUE6UGhpbGFkZWxwaGlhIENvdW50eQorNTI6VVM6VVNBOlVOSVRFRCBTVEFURVM6UEVOTlNZTFZBTklBOlBpa2UgQ291bnR5Cis1MzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpQRU5OU1lMVkFOSUE6UG90dGVyIENvdW50eQorNTQ6VVM6VVNBOlVOSVRFRCBTVEFURVM6UEVOTlNZTFZBTklBOlNjaHV5bGtpbGwgQ291bnR5Cis1NTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpQRU5OU1lMVkFOSUE6U255ZGVyIENvdW50eQorNTY6VVM6VVNBOlVOSVRFRCBTVEFURVM6UEVOTlNZTFZBTklBOlNvbWVyc2V0IENvdW50eQorNTc6VVM6VVNBOlVOSVRFRCBTVEFURVM6UEVOTlNZTFZBTklBOlN1bGxpdmFuIENvdW50eQorNTg6VVM6VVNBOlVOSVRFRCBTVEFURVM6UEVOTlNZTFZBTklBOlN1c3F1ZWhhbm5hIENvdW50eQorNTk6VVM6VVNBOlVOSVRFRCBTVEFURVM6UEVOTlNZTFZBTklBOlRpb2dhIENvdW50eQorNjA6VVM6VVNBOlVOSVRFRCBTVEFURVM6UEVOTlNZTFZBTklBOlVuaW9uIENvdW50eQorNjE6VVM6VVNBOlVOSVRFRCBTVEFURVM6UEVOTlNZTFZBTklBOlZlbmFuZ28gQ291bnR5Cis2MjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpQRU5OU1lMVkFOSUE6V2FycmVuIENvdW50eQorNjM6VVM6VVNBOlVOSVRFRCBTVEFURVM6UEVOTlNZTFZBTklBOldhc2hpbmd0b24gQ291bnR5Cis2NDpVUzpVU0E6VU5JVEVEIFNUQVRFUzpQRU5OU1lMVkFOSUE6V2F5bmUgQ291bnR5Cis2NTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpQRU5OU1lMVkFOSUE6V2VzdG1vcmVsYW5kIENvdW50eQorNjY6VVM6VVNBOlVOSVRFRCBTVEFURVM6UEVOTlNZTFZBTklBOld5b21pbmcgQ291bnR5Cis2NzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpQRU5OU1lMVkFOSUE6WW9yayBDb3VudHkKKzE6VVM6VVNBOlVOSVRFRCBTVEFURVM6VklSR0lOSUE6QWNjb21hY2sgQ291bnR5CisyOlVTOlVTQTpVTklURUQgU1RBVEVTOlZJUkdJTklBOkFsYmVtYXJsZSBDb3VudHkKKzM6VVM6VVNBOlVOSVRFRCBTVEFURVM6VklSR0lOSUE6QWxleGFuZHJpYSBjaXR5Cis0OlVTOlVTQTpVTklURUQgU1RBVEVTOlZJUkdJTklBOkFsbGVnaGFueSBDb3VudHkKKzU6VVM6VVNBOlVOSVRFRCBTVEFURVM6VklSR0lOSUE6QW1lbGlhIENvdW50eQorNjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpWSVJHSU5JQTpBbWhlcnN0IENvdW50eQorNzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpWSVJHSU5JQTpBcHBvbWF0dG94IENvdW50eQorODpVUzpVU0E6VU5JVEVEIFNUQVRFUzpWSVJHSU5JQTpBcmxpbmd0b24gQ291bnR5Cis5OlVTOlVTQTpVTklURUQgU1RBVEVTOlZJUkdJTklBOkF1Z3VzdGEgQ291bnR5CisxMDpVUzpVU0E6VU5JVEVEIFNUQVRFUzpWSVJHSU5JQTpCYXRoIENvdW50eQorMTE6VVM6VVNBOlVOSVRFRCBTVEFURVM6VklSR0lOSUE6QmVkZm9yZCBDb3VudHkKKzEyOlVTOlVTQTpVTklURUQgU1RBVEVTOlZJUkdJTklBOkJlZGZvcmQgY2l0eQorMTM6VVM6VVNBOlVOSVRFRCBTVEFURVM6VklSR0lOSUE6QmxhbmQgQ291bnR5CisxNDpVUzpVU0E6VU5JVEVEIFNUQVRFUzpWSVJHSU5JQTpCb3RldG91cnQgQ291bnR5CisxNTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpWSVJHSU5JQTpCcmlzdG9sIGNpdHkKKzE2OlVTOlVTQTpVTklURUQgU1RBVEVTOlZJUkdJTklBOkJydW5zd2ljayBDb3VudHkKKzE3OlVTOlVTQTpVTklURUQgU1RBVEVTOlZJUkdJTklBOkJ1Y2hhbmFuIENvdW50eQorMTg6VVM6VVNBOlVOSVRFRCBTVEFURVM6VklSR0lOSUE6QnVja2luZ2hhbSBDb3VudHkKKzE5OlVTOlVTQTpVTklURUQgU1RBVEVTOlZJUkdJTklBOkJ1ZW5hIFZpc3RhIGNpdHkKKzIwOlVTOlVTQTpVTklURUQgU1RBVEVTOlZJUkdJTklBOkNhbXBiZWxsIENvdW50eQorMjE6VVM6VVNBOlVOSVRFRCBTVEFURVM6VklSR0lOSUE6Q2Fyb2xpbmUgQ291bnR5CisyMjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpWSVJHSU5JQTpDYXJyb2xsIENvdW50eQorMjM6VVM6VVNBOlVOSVRFRCBTVEFURVM6VklSR0lOSUE6Q2hhcmxlcyBDaXR5IENvdW50eQorMjQ6VVM6VVNBOlVOSVRFRCBTVEFURVM6VklSR0lOSUE6Q2hhcmxvdHRlIENvdW50eQorMjU6VVM6VVNBOlVOSVRFRCBTVEFURVM6VklSR0lOSUE6Q2hhcmxvdHRlc3ZpbGxlIGNpdHkKKzI2OlVTOlVTQTpVTklURUQgU1RBVEVTOlZJUkdJTklBOkNoZXNhcGVha2UgY2l0eQorMjc6VVM6VVNBOlVOSVRFRCBTVEFURVM6VklSR0lOSUE6Q2hlc3RlcmZpZWxkIENvdW50eQorMjg6VVM6VVNBOlVOSVRFRCBTVEFURVM6VklSR0lOSUE6Q2xhcmtlIENvdW50eQorMjk6VVM6VVNBOlVOSVRFRCBTVEFURVM6VklSR0lOSUE6Q2xpZnRvbiBGb3JnZSBjaXR5CiszMDpVUzpVU0E6VU5JVEVEIFNUQVRFUzpWSVJHSU5JQTpDb2xvbmlhbCBIZWlnaHRzIGNpdHkKKzMxOlVTOlVTQTpVTklURUQgU1RBVEVTOlZJUkdJTklBOkNvdmluZ3RvbiBjaXR5CiszMjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpWSVJHSU5JQTpDcmFpZyBDb3VudHkKKzMzOlVTOlVTQTpVTklURUQgU1RBVEVTOlZJUkdJTklBOkN1bHBlcGVyIENvdW50eQorMzQ6VVM6VVNBOlVOSVRFRCBTVEFURVM6VklSR0lOSUE6Q3VtYmVybGFuZCBDb3VudHkKKzM1OlVTOlVTQTpVTklURUQgU1RBVEVTOlZJUkdJTklBOkRhbnZpbGxlIGNpdHkKKzM2OlVTOlVTQTpVTklURUQgU1RBVEVTOlZJUkdJTklBOkRpY2tlbnNvbiBDb3VudHkKKzM3OlVTOlVTQTpVTklURUQgU1RBVEVTOlZJUkdJTklBOkRpbndpZGRpZSBDb3VudHkKKzM4OlVTOlVTQTpVTklURUQgU1RBVEVTOlZJUkdJTklBOkVtcG9yaWEgY2l0eQorMzk6VVM6VVNBOlVOSVRFRCBTVEFURVM6VklSR0lOSUE6RXNzZXggQ291bnR5Cis0MDpVUzpVU0E6VU5JVEVEIFNUQVRFUzpWSVJHSU5JQTpGYWlyZmF4IENvdW50eQorNDE6VVM6VVNBOlVOSVRFRCBTVEFURVM6VklSR0lOSUE6RmFpcmZheCBjaXR5Cis0MjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpWSVJHSU5JQTpGYWxscyBDaHVyY2ggY2l0eQorNDM6VVM6VVNBOlVOSVRFRCBTVEFURVM6VklSR0lOSUE6RmF1cXVpZXIgQ291bnR5Cis0NDpVUzpVU0E6VU5JVEVEIFNUQVRFUzpWSVJHSU5JQTpGbG95ZCBDb3VudHkKKzQ1OlVTOlVTQTpVTklURUQgU1RBVEVTOlZJUkdJTklBOkZsdXZhbm5hIENvdW50eQorNDY6VVM6VVNBOlVOSVRFRCBTVEFURVM6VklSR0lOSUE6RnJhbmtsaW4gQ291bnR5Cis0NzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpWSVJHSU5JQTpGcmFua2xpbiBjaXR5Cis0ODpVUzpVU0E6VU5JVEVEIFNUQVRFUzpWSVJHSU5JQTpGcmVkZXJpY2sgQ291bnR5Cis0OTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpWSVJHSU5JQTpGcmVkZXJpY2tzYnVyZyBjaXR5Cis1MDpVUzpVU0E6VU5JVEVEIFNUQVRFUzpWSVJHSU5JQTpHYWxheCBjaXR5Cis1MTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpWSVJHSU5JQTpHaWxlcyBDb3VudHkKKzUyOlVTOlVTQTpVTklURUQgU1RBVEVTOlZJUkdJTklBOkdsb3VjZXN0ZXIgQ291bnR5Cis1MzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpWSVJHSU5JQTpHb29jaGxhbmQgQ291bnR5Cis1NDpVUzpVU0E6VU5JVEVEIFNUQVRFUzpWSVJHSU5JQTpHcmF5c29uIENvdW50eQorNTU6VVM6VVNBOlVOSVRFRCBTVEFURVM6VklSR0lOSUE6R3JlZW5lIENvdW50eQorNTY6VVM6VVNBOlVOSVRFRCBTVEFURVM6VklSR0lOSUE6R3JlZW5zdmlsbGUgQ291bnR5Cis1NzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpWSVJHSU5JQTpIYWxpZmF4IENvdW50eQorNTg6VVM6VVNBOlVOSVRFRCBTVEFURVM6VklSR0lOSUE6SGFtcHRvbiBjaXR5Cis1OTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpWSVJHSU5JQTpIYW5vdmVyIENvdW50eQorNjA6VVM6VVNBOlVOSVRFRCBTVEFURVM6VklSR0lOSUE6SGFycmlzb25idXJnIGNpdHkKKzYxOlVTOlVTQTpVTklURUQgU1RBVEVTOlZJUkdJTklBOkhlbnJpY28gQ291bnR5Cis2MjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpWSVJHSU5JQTpIZW5yeSBDb3VudHkKKzYzOlVTOlVTQTpVTklURUQgU1RBVEVTOlZJUkdJTklBOkhpZ2hsYW5kIENvdW50eQorNjQ6VVM6VVNBOlVOSVRFRCBTVEFURVM6VklSR0lOSUE6SG9wZXdlbGwgY2l0eQorNjU6VVM6VVNBOlVOSVRFRCBTVEFURVM6VklSR0lOSUE6SXNsZSBvZiBXaWdodCBDb3VudHkKKzY2OlVTOlVTQTpVTklURUQgU1RBVEVTOlZJUkdJTklBOkphbWVzIENpdHkgQ291bnR5Cis2NzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpWSVJHSU5JQTpLaW5nIEdlb3JnZSBDb3VudHkKKzY4OlVTOlVTQTpVTklURUQgU1RBVEVTOlZJUkdJTklBOktpbmcgV2lsbGlhbSBDb3VudHkKKzY5OlVTOlVTQTpVTklURUQgU1RBVEVTOlZJUkdJTklBOktpbmcgYW5kIFF1ZWVuIENvdW50eQorNzA6VVM6VVNBOlVOSVRFRCBTVEFURVM6VklSR0lOSUE6TGFuY2FzdGVyIENvdW50eQorNzE6VVM6VVNBOlVOSVRFRCBTVEFURVM6VklSR0lOSUE6TGVlIENvdW50eQorNzI6VVM6VVNBOlVOSVRFRCBTVEFURVM6VklSR0lOSUE6TGV4aW5ndG9uIGNpdHkKKzczOlVTOlVTQTpVTklURUQgU1RBVEVTOlZJUkdJTklBOkxvdWRvdW4gQ291bnR5Cis3NDpVUzpVU0E6VU5JVEVEIFNUQVRFUzpWSVJHSU5JQTpMb3Vpc2EgQ291bnR5Cis3NTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpWSVJHSU5JQTpMdW5lbmJ1cmcgQ291bnR5Cis3NjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpWSVJHSU5JQTpMeW5jaGJ1cmcgY2l0eQorNzc6VVM6VVNBOlVOSVRFRCBTVEFURVM6VklSR0lOSUE6TWFkaXNvbiBDb3VudHkKKzc4OlVTOlVTQTpVTklURUQgU1RBVEVTOlZJUkdJTklBOk1hbmFzc2FzIFBhcmsgY2l0eQorNzk6VVM6VVNBOlVOSVRFRCBTVEFURVM6VklSR0lOSUE6TWFuYXNzYXMgY2l0eQorODA6VVM6VVNBOlVOSVRFRCBTVEFURVM6VklSR0lOSUE6TWFydGluc3ZpbGxlIGNpdHkKKzgxOlVTOlVTQTpVTklURUQgU1RBVEVTOlZJUkdJTklBOk1hdGhld3MgQ291bnR5Cis4MjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpWSVJHSU5JQTpNZWNrbGVuYnVyZyBDb3VudHkKKzgzOlVTOlVTQTpVTklURUQgU1RBVEVTOlZJUkdJTklBOk1pZGRsZXNleCBDb3VudHkKKzg0OlVTOlVTQTpVTklURUQgU1RBVEVTOlZJUkdJTklBOk1vbnRnb21lcnkgQ291bnR5Cis4NTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpWSVJHSU5JQTpOZWxzb24gQ291bnR5Cis4NjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpWSVJHSU5JQTpOZXcgS2VudCBDb3VudHkKKzg3OlVTOlVTQTpVTklURUQgU1RBVEVTOlZJUkdJTklBOk5ld3BvcnQgTmV3cyBjaXR5Cis4ODpVUzpVU0E6VU5JVEVEIFNUQVRFUzpWSVJHSU5JQTpOb3Jmb2xrIGNpdHkKKzg5OlVTOlVTQTpVTklURUQgU1RBVEVTOlZJUkdJTklBOk5vcnRoYW1wdG9uIENvdW50eQorOTA6VVM6VVNBOlVOSVRFRCBTVEFURVM6VklSR0lOSUE6Tm9ydGh1bWJlcmxhbmQgQ291bnR5Cis5MTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpWSVJHSU5JQTpOb3J0b24gY2l0eQorOTI6VVM6VVNBOlVOSVRFRCBTVEFURVM6VklSR0lOSUE6Tm90dG93YXkgQ291bnR5Cis5MzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpWSVJHSU5JQTpPcmFuZ2UgQ291bnR5Cis5NDpVUzpVU0E6VU5JVEVEIFNUQVRFUzpWSVJHSU5JQTpQYWdlIENvdW50eQorOTU6VVM6VVNBOlVOSVRFRCBTVEFURVM6VklSR0lOSUE6UGF0cmljayBDb3VudHkKKzk2OlVTOlVTQTpVTklURUQgU1RBVEVTOlZJUkdJTklBOlBldGVyc2J1cmcgY2l0eQorOTc6VVM6VVNBOlVOSVRFRCBTVEFURVM6VklSR0lOSUE6UGl0dHN5bHZhbmlhIENvdW50eQorOTg6VVM6VVNBOlVOSVRFRCBTVEFURVM6VklSR0lOSUE6UG9xdW9zb24gY2l0eQorOTk6VVM6VVNBOlVOSVRFRCBTVEFURVM6VklSR0lOSUE6UG9ydHNtb3V0aCBjaXR5CisxMDA6VVM6VVNBOlVOSVRFRCBTVEFURVM6VklSR0lOSUE6UG93aGF0YW4gQ291bnR5CisxMDE6VVM6VVNBOlVOSVRFRCBTVEFURVM6VklSR0lOSUE6UHJpbmNlIEVkd2FyZCBDb3VudHkKKzEwMjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpWSVJHSU5JQTpQcmluY2UgR2VvcmdlIENvdW50eQorMTAzOlVTOlVTQTpVTklURUQgU1RBVEVTOlZJUkdJTklBOlByaW5jZSBXaWxsaWFtIENvdW50eQorMTA0OlVTOlVTQTpVTklURUQgU1RBVEVTOlZJUkdJTklBOlB1bGFza2kgQ291bnR5CisxMDU6VVM6VVNBOlVOSVRFRCBTVEFURVM6VklSR0lOSUE6UmFkZm9yZCBjaXR5CisxMDY6VVM6VVNBOlVOSVRFRCBTVEFURVM6VklSR0lOSUE6UmFwcGFoYW5ub2NrIENvdW50eQorMTA3OlVTOlVTQTpVTklURUQgU1RBVEVTOlZJUkdJTklBOlJpY2htb25kIENvdW50eQorMTA4OlVTOlVTQTpVTklURUQgU1RBVEVTOlZJUkdJTklBOlJpY2htb25kIGNpdHkKKzEwOTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpWSVJHSU5JQTpSb2Fub2tlIENvdW50eQorMTEwOlVTOlVTQTpVTklURUQgU1RBVEVTOlZJUkdJTklBOlJvYW5va2UgY2l0eQorMTExOlVTOlVTQTpVTklURUQgU1RBVEVTOlZJUkdJTklBOlJvY2ticmlkZ2UgQ291bnR5CisxMTI6VVM6VVNBOlVOSVRFRCBTVEFURVM6VklSR0lOSUE6Um9ja2luZ2hhbSBDb3VudHkKKzExMzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpWSVJHSU5JQTpSdXNzZWxsIENvdW50eQorMTE0OlVTOlVTQTpVTklURUQgU1RBVEVTOlZJUkdJTklBOlNhbGVtIGNpdHkKKzExNTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpWSVJHSU5JQTpTY290dCBDb3VudHkKKzExNjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpWSVJHSU5JQTpTaGVuYW5kb2FoIENvdW50eQorMTE3OlVTOlVTQTpVTklURUQgU1RBVEVTOlZJUkdJTklBOlNteXRoIENvdW50eQorMTE4OlVTOlVTQTpVTklURUQgU1RBVEVTOlZJUkdJTklBOlNvdXRoYW1wdG9uIENvdW50eQorMTE5OlVTOlVTQTpVTklURUQgU1RBVEVTOlZJUkdJTklBOlNwb3RzeWx2YW5pYSBDb3VudHkKKzEyMDpVUzpVU0E6VU5JVEVEIFNUQVRFUzpWSVJHSU5JQTpTdGFmZm9yZCBDb3VudHkKKzEyMTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpWSVJHSU5JQTpTdGF1bnRvbiBjaXR5CisxMjI6VVM6VVNBOlVOSVRFRCBTVEFURVM6VklSR0lOSUE6U3VmZm9sayBjaXR5CisxMjM6VVM6VVNBOlVOSVRFRCBTVEFURVM6VklSR0lOSUE6U3VycnkgQ291bnR5CisxMjQ6VVM6VVNBOlVOSVRFRCBTVEFURVM6VklSR0lOSUE6U3Vzc2V4IENvdW50eQorMTI1OlVTOlVTQTpVTklURUQgU1RBVEVTOlZJUkdJTklBOlRhemV3ZWxsIENvdW50eQorMTI2OlVTOlVTQTpVTklURUQgU1RBVEVTOlZJUkdJTklBOlZpcmdpbmlhIEJlYWNoIGNpdHkKKzEyNzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpWSVJHSU5JQTpXYXJyZW4gQ291bnR5CisxMjg6VVM6VVNBOlVOSVRFRCBTVEFURVM6VklSR0lOSUE6V2FzaGluZ3RvbiBDb3VudHkKKzEyOTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpWSVJHSU5JQTpXYXluZXNib3JvIGNpdHkKKzEzMDpVUzpVU0E6VU5JVEVEIFNUQVRFUzpWSVJHSU5JQTpXZXN0bW9yZWxhbmQgQ291bnR5CisxMzE6VVM6VVNBOlVOSVRFRCBTVEFURVM6VklSR0lOSUE6V2lsbGlhbXNidXJnIGNpdHkKKzEzMjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpWSVJHSU5JQTpXaW5jaGVzdGVyIGNpdHkKKzEzMzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpWSVJHSU5JQTpXaXNlIENvdW50eQorMTM0OlVTOlVTQTpVTklURUQgU1RBVEVTOlZJUkdJTklBOld5dGhlIENvdW50eQorMTM1OlVTOlVTQTpVTklURUQgU1RBVEVTOlZJUkdJTklBOllvcmsgQ291bnR5CisxOlVTOlVTQTpVTklURUQgU1RBVEVTOktFTlRVQ0tZOkFkYWlyIENvdW50eQorMjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpLRU5UVUNLWTpBbGxlbiBDb3VudHkKKzM6VVM6VVNBOlVOSVRFRCBTVEFURVM6S0VOVFVDS1k6QW5kZXJzb24gQ291bnR5Cis0OlVTOlVTQTpVTklURUQgU1RBVEVTOktFTlRVQ0tZOkJhbGxhcmQgQ291bnR5Cis1OlVTOlVTQTpVTklURUQgU1RBVEVTOktFTlRVQ0tZOkJhcnJlbiBDb3VudHkKKzY6VVM6VVNBOlVOSVRFRCBTVEFURVM6S0VOVFVDS1k6QmF0aCBDb3VudHkKKzc6VVM6VVNBOlVOSVRFRCBTVEFURVM6S0VOVFVDS1k6QmVsbCBDb3VudHkKKzg6VVM6VVNBOlVOSVRFRCBTVEFURVM6S0VOVFVDS1k6Qm9vbmUgQ291bnR5Cis5OlVTOlVTQTpVTklURUQgU1RBVEVTOktFTlRVQ0tZOkJvdXJib24gQ291bnR5CisxMDpVUzpVU0E6VU5JVEVEIFNUQVRFUzpLRU5UVUNLWTpCb3lkIENvdW50eQorMTE6VVM6VVNBOlVOSVRFRCBTVEFURVM6S0VOVFVDS1k6Qm95bGUgQ291bnR5CisxMjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpLRU5UVUNLWTpCcmFja2VuIENvdW50eQorMTM6VVM6VVNBOlVOSVRFRCBTVEFURVM6S0VOVFVDS1k6QnJlYXRoaXR0IENvdW50eQorMTQ6VVM6VVNBOlVOSVRFRCBTVEFURVM6S0VOVFVDS1k6QnJlY2tpbnJpZGdlIENvdW50eQorMTU6VVM6VVNBOlVOSVRFRCBTVEFURVM6S0VOVFVDS1k6QnVsbGl0dCBDb3VudHkKKzE2OlVTOlVTQTpVTklURUQgU1RBVEVTOktFTlRVQ0tZOkJ1dGxlciBDb3VudHkKKzE3OlVTOlVTQTpVTklURUQgU1RBVEVTOktFTlRVQ0tZOkNhbGR3ZWxsIENvdW50eQorMTg6VVM6VVNBOlVOSVRFRCBTVEFURVM6S0VOVFVDS1k6Q2FsbG93YXkgQ291bnR5CisxOTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpLRU5UVUNLWTpDYW1wYmVsbCBDb3VudHkKKzIwOlVTOlVTQTpVTklURUQgU1RBVEVTOktFTlRVQ0tZOkNhcmxpc2xlIENvdW50eQorMjE6VVM6VVNBOlVOSVRFRCBTVEFURVM6S0VOVFVDS1k6Q2Fycm9sbCBDb3VudHkKKzIyOlVTOlVTQTpVTklURUQgU1RBVEVTOktFTlRVQ0tZOkNhcnRlciBDb3VudHkKKzIzOlVTOlVTQTpVTklURUQgU1RBVEVTOktFTlRVQ0tZOkNhc2V5IENvdW50eQorMjQ6VVM6VVNBOlVOSVRFRCBTVEFURVM6S0VOVFVDS1k6Q2hyaXN0aWFuIENvdW50eQorMjU6VVM6VVNBOlVOSVRFRCBTVEFURVM6S0VOVFVDS1k6Q2xhcmsgQ291bnR5CisyNjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpLRU5UVUNLWTpDbGF5IENvdW50eQorMjc6VVM6VVNBOlVOSVRFRCBTVEFURVM6S0VOVFVDS1k6Q2xpbnRvbiBDb3VudHkKKzI4OlVTOlVTQTpVTklURUQgU1RBVEVTOktFTlRVQ0tZOkNyaXR0ZW5kZW4gQ291bnR5CisyOTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpLRU5UVUNLWTpDdW1iZXJsYW5kIENvdW50eQorMzA6VVM6VVNBOlVOSVRFRCBTVEFURVM6S0VOVFVDS1k6RGF2aWVzcyBDb3VudHkKKzMxOlVTOlVTQTpVTklURUQgU1RBVEVTOktFTlRVQ0tZOkVkbW9uc29uIENvdW50eQorMzI6VVM6VVNBOlVOSVRFRCBTVEFURVM6S0VOVFVDS1k6RWxsaW90dCBDb3VudHkKKzMzOlVTOlVTQTpVTklURUQgU1RBVEVTOktFTlRVQ0tZOkVzdGlsbCBDb3VudHkKKzM0OlVTOlVTQTpVTklURUQgU1RBVEVTOktFTlRVQ0tZOkZheWV0dGUgQ291bnR5CiszNTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpLRU5UVUNLWTpGbGVtaW5nIENvdW50eQorMzY6VVM6VVNBOlVOSVRFRCBTVEFURVM6S0VOVFVDS1k6RmxveWQgQ291bnR5CiszNzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpLRU5UVUNLWTpGcmFua2xpbiBDb3VudHkKKzM4OlVTOlVTQTpVTklURUQgU1RBVEVTOktFTlRVQ0tZOkZ1bHRvbiBDb3VudHkKKzM5OlVTOlVTQTpVTklURUQgU1RBVEVTOktFTlRVQ0tZOkdhbGxhdGluIENvdW50eQorNDA6VVM6VVNBOlVOSVRFRCBTVEFURVM6S0VOVFVDS1k6R2FycmFyZCBDb3VudHkKKzQxOlVTOlVTQTpVTklURUQgU1RBVEVTOktFTlRVQ0tZOkdyYW50IENvdW50eQorNDI6VVM6VVNBOlVOSVRFRCBTVEFURVM6S0VOVFVDS1k6R3JhdmVzIENvdW50eQorNDM6VVM6VVNBOlVOSVRFRCBTVEFURVM6S0VOVFVDS1k6R3JheXNvbiBDb3VudHkKKzQ0OlVTOlVTQTpVTklURUQgU1RBVEVTOktFTlRVQ0tZOkdyZWVuIENvdW50eQorNDU6VVM6VVNBOlVOSVRFRCBTVEFURVM6S0VOVFVDS1k6R3JlZW51cCBDb3VudHkKKzQ2OlVTOlVTQTpVTklURUQgU1RBVEVTOktFTlRVQ0tZOkhhbmNvY2sgQ291bnR5Cis0NzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpLRU5UVUNLWTpIYXJkaW4gQ291bnR5Cis0ODpVUzpVU0E6VU5JVEVEIFNUQVRFUzpLRU5UVUNLWTpIYXJsYW4gQ291bnR5Cis0OTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpLRU5UVUNLWTpIYXJyaXNvbiBDb3VudHkKKzUwOlVTOlVTQTpVTklURUQgU1RBVEVTOktFTlRVQ0tZOkhhcnQgQ291bnR5Cis1MTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpLRU5UVUNLWTpIZW5kZXJzb24gQ291bnR5Cis1MjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpLRU5UVUNLWTpIZW5yeSBDb3VudHkKKzUzOlVTOlVTQTpVTklURUQgU1RBVEVTOktFTlRVQ0tZOkhpY2ttYW4gQ291bnR5Cis1NDpVUzpVU0E6VU5JVEVEIFNUQVRFUzpLRU5UVUNLWTpIb3BraW5zIENvdW50eQorNTU6VVM6VVNBOlVOSVRFRCBTVEFURVM6S0VOVFVDS1k6SmFja3NvbiBDb3VudHkKKzU2OlVTOlVTQTpVTklURUQgU1RBVEVTOktFTlRVQ0tZOkplZmZlcnNvbiBDb3VudHkKKzU3OlVTOlVTQTpVTklURUQgU1RBVEVTOktFTlRVQ0tZOkplc3NhbWluZSBDb3VudHkKKzU4OlVTOlVTQTpVTklURUQgU1RBVEVTOktFTlRVQ0tZOkpvaG5zb24gQ291bnR5Cis1OTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpLRU5UVUNLWTpLZW50b24gQ291bnR5Cis2MDpVUzpVU0E6VU5JVEVEIFNUQVRFUzpLRU5UVUNLWTpLbm90dCBDb3VudHkKKzYxOlVTOlVTQTpVTklURUQgU1RBVEVTOktFTlRVQ0tZOktub3ggQ291bnR5Cis2MjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpLRU5UVUNLWTpMYXJ1ZSBDb3VudHkKKzYzOlVTOlVTQTpVTklURUQgU1RBVEVTOktFTlRVQ0tZOkxhdXJlbCBDb3VudHkKKzY0OlVTOlVTQTpVTklURUQgU1RBVEVTOktFTlRVQ0tZOkxhd3JlbmNlIENvdW50eQorNjU6VVM6VVNBOlVOSVRFRCBTVEFURVM6S0VOVFVDS1k6TGVlIENvdW50eQorNjY6VVM6VVNBOlVOSVRFRCBTVEFURVM6S0VOVFVDS1k6TGVzbGllIENvdW50eQorNjc6VVM6VVNBOlVOSVRFRCBTVEFURVM6S0VOVFVDS1k6TGV0Y2hlciBDb3VudHkKKzY4OlVTOlVTQTpVTklURUQgU1RBVEVTOktFTlRVQ0tZOkxld2lzIENvdW50eQorNjk6VVM6VVNBOlVOSVRFRCBTVEFURVM6S0VOVFVDS1k6TGluY29sbiBDb3VudHkKKzcwOlVTOlVTQTpVTklURUQgU1RBVEVTOktFTlRVQ0tZOkxpdmluZ3N0b24gQ291bnR5Cis3MTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpLRU5UVUNLWTpMb2dhbiBDb3VudHkKKzcyOlVTOlVTQTpVTklURUQgU1RBVEVTOktFTlRVQ0tZOkx5b24gQ291bnR5Cis3MzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpLRU5UVUNLWTpNYWRpc29uIENvdW50eQorNzQ6VVM6VVNBOlVOSVRFRCBTVEFURVM6S0VOVFVDS1k6TWFnb2ZmaW4gQ291bnR5Cis3NTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpLRU5UVUNLWTpNYXJpb24gQ291bnR5Cis3NjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpLRU5UVUNLWTpNYXJzaGFsbCBDb3VudHkKKzc3OlVTOlVTQTpVTklURUQgU1RBVEVTOktFTlRVQ0tZOk1hcnRpbiBDb3VudHkKKzc4OlVTOlVTQTpVTklURUQgU1RBVEVTOktFTlRVQ0tZOk1hc29uIENvdW50eQorNzk6VVM6VVNBOlVOSVRFRCBTVEFURVM6S0VOVFVDS1k6TWNDcmFja2VuIENvdW50eQorODA6VVM6VVNBOlVOSVRFRCBTVEFURVM6S0VOVFVDS1k6TWNDcmVhcnkgQ291bnR5Cis4MTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpLRU5UVUNLWTpNY0xlYW4gQ291bnR5Cis4MjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpLRU5UVUNLWTpNZWFkZSBDb3VudHkKKzgzOlVTOlVTQTpVTklURUQgU1RBVEVTOktFTlRVQ0tZOk1lbmlmZWUgQ291bnR5Cis4NDpVUzpVU0E6VU5JVEVEIFNUQVRFUzpLRU5UVUNLWTpNZXJjZXIgQ291bnR5Cis4NTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpLRU5UVUNLWTpNZXRjYWxmZSBDb3VudHkKKzg2OlVTOlVTQTpVTklURUQgU1RBVEVTOktFTlRVQ0tZOk1vbnJvZSBDb3VudHkKKzg3OlVTOlVTQTpVTklURUQgU1RBVEVTOktFTlRVQ0tZOk1vbnRnb21lcnkgQ291bnR5Cis4ODpVUzpVU0E6VU5JVEVEIFNUQVRFUzpLRU5UVUNLWTpNb3JnYW4gQ291bnR5Cis4OTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpLRU5UVUNLWTpNdWhsZW5iZXJnIENvdW50eQorOTA6VVM6VVNBOlVOSVRFRCBTVEFURVM6S0VOVFVDS1k6TmVsc29uIENvdW50eQorOTE6VVM6VVNBOlVOSVRFRCBTVEFURVM6S0VOVFVDS1k6TmljaG9sYXMgQ291bnR5Cis5MjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpLRU5UVUNLWTpPaGlvIENvdW50eQorOTM6VVM6VVNBOlVOSVRFRCBTVEFURVM6S0VOVFVDS1k6T2xkaGFtIENvdW50eQorOTQ6VVM6VVNBOlVOSVRFRCBTVEFURVM6S0VOVFVDS1k6T3dlbiBDb3VudHkKKzk1OlVTOlVTQTpVTklURUQgU1RBVEVTOktFTlRVQ0tZOk93c2xleSBDb3VudHkKKzk2OlVTOlVTQTpVTklURUQgU1RBVEVTOktFTlRVQ0tZOlBlbmRsZXRvbiBDb3VudHkKKzk3OlVTOlVTQTpVTklURUQgU1RBVEVTOktFTlRVQ0tZOlBlcnJ5IENvdW50eQorOTg6VVM6VVNBOlVOSVRFRCBTVEFURVM6S0VOVFVDS1k6UGlrZSBDb3VudHkKKzk5OlVTOlVTQTpVTklURUQgU1RBVEVTOktFTlRVQ0tZOlBvd2VsbCBDb3VudHkKKzEwMDpVUzpVU0E6VU5JVEVEIFNUQVRFUzpLRU5UVUNLWTpQdWxhc2tpIENvdW50eQorMTAxOlVTOlVTQTpVTklURUQgU1RBVEVTOktFTlRVQ0tZOlJvYmVydHNvbiBDb3VudHkKKzEwMjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpLRU5UVUNLWTpSb2NrY2FzdGxlIENvdW50eQorMTAzOlVTOlVTQTpVTklURUQgU1RBVEVTOktFTlRVQ0tZOlJvd2FuIENvdW50eQorMTA0OlVTOlVTQTpVTklURUQgU1RBVEVTOktFTlRVQ0tZOlJ1c3NlbGwgQ291bnR5CisxMDU6VVM6VVNBOlVOSVRFRCBTVEFURVM6S0VOVFVDS1k6U2NvdHQgQ291bnR5CisxMDY6VVM6VVNBOlVOSVRFRCBTVEFURVM6S0VOVFVDS1k6U2hlbGJ5IENvdW50eQorMTA3OlVTOlVTQTpVTklURUQgU1RBVEVTOktFTlRVQ0tZOlNpbXBzb24gQ291bnR5CisxMDg6VVM6VVNBOlVOSVRFRCBTVEFURVM6S0VOVFVDS1k6U3BlbmNlciBDb3VudHkKKzEwOTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpLRU5UVUNLWTpUYXlsb3IgQ291bnR5CisxMTA6VVM6VVNBOlVOSVRFRCBTVEFURVM6S0VOVFVDS1k6VG9kZCBDb3VudHkKKzExMTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpLRU5UVUNLWTpUcmlnZyBDb3VudHkKKzExMjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpLRU5UVUNLWTpUcmltYmxlIENvdW50eQorMTEzOlVTOlVTQTpVTklURUQgU1RBVEVTOktFTlRVQ0tZOlVuaW9uIENvdW50eQorMTE0OlVTOlVTQTpVTklURUQgU1RBVEVTOktFTlRVQ0tZOldhcnJlbiBDb3VudHkKKzExNTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpLRU5UVUNLWTpXYXNoaW5ndG9uIENvdW50eQorMTE2OlVTOlVTQTpVTklURUQgU1RBVEVTOktFTlRVQ0tZOldheW5lIENvdW50eQorMTE3OlVTOlVTQTpVTklURUQgU1RBVEVTOktFTlRVQ0tZOldlYnN0ZXIgQ291bnR5CisxMTg6VVM6VVNBOlVOSVRFRCBTVEFURVM6S0VOVFVDS1k6V2hpdGxleSBDb3VudHkKKzExOTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpLRU5UVUNLWTpXb2xmZSBDb3VudHkKKzEyMDpVUzpVU0E6VU5JVEVEIFNUQVRFUzpLRU5UVUNLWTpXb29kZm9yZCBDb3VudHkKKzE6VVM6VVNBOlVOSVRFRCBTVEFURVM6TkVXIEpFUlNFWTpBdGxhbnRpYyBDb3VudHkKKzI6VVM6VVNBOlVOSVRFRCBTVEFURVM6TkVXIEpFUlNFWTpCZXJnZW4gQ291bnR5CiszOlVTOlVTQTpVTklURUQgU1RBVEVTOk5FVyBKRVJTRVk6QnVybGluZ3RvbiBDb3VudHkKKzQ6VVM6VVNBOlVOSVRFRCBTVEFURVM6TkVXIEpFUlNFWTpDYW1kZW4gQ291bnR5Cis1OlVTOlVTQTpVTklURUQgU1RBVEVTOk5FVyBKRVJTRVk6Q2FwZSBNYXkgQ291bnR5Cis2OlVTOlVTQTpVTklURUQgU1RBVEVTOk5FVyBKRVJTRVk6Q3VtYmVybGFuZCBDb3VudHkKKzc6VVM6VVNBOlVOSVRFRCBTVEFURVM6TkVXIEpFUlNFWTpFc3NleCBDb3VudHkKKzg6VVM6VVNBOlVOSVRFRCBTVEFURVM6TkVXIEpFUlNFWTpHbG91Y2VzdGVyIENvdW50eQorOTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpORVcgSkVSU0VZOkh1ZHNvbiBDb3VudHkKKzEwOlVTOlVTQTpVTklURUQgU1RBVEVTOk5FVyBKRVJTRVk6SHVudGVyZG9uIENvdW50eQorMTE6VVM6VVNBOlVOSVRFRCBTVEFURVM6TkVXIEpFUlNFWTpNZXJjZXIgQ291bnR5CisxMjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpORVcgSkVSU0VZOk1pZGRsZXNleCBDb3VudHkKKzEzOlVTOlVTQTpVTklURUQgU1RBVEVTOk5FVyBKRVJTRVk6TW9ubW91dGggQ291bnR5CisxNDpVUzpVU0E6VU5JVEVEIFNUQVRFUzpORVcgSkVSU0VZOk1vcnJpcyBDb3VudHkKKzE1OlVTOlVTQTpVTklURUQgU1RBVEVTOk5FVyBKRVJTRVk6T2NlYW4gQ291bnR5CisxNjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpORVcgSkVSU0VZOlBhc3NhaWMgQ291bnR5CisxNzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpORVcgSkVSU0VZOlNhbGVtIENvdW50eQorMTg6VVM6VVNBOlVOSVRFRCBTVEFURVM6TkVXIEpFUlNFWTpTb21lcnNldCBDb3VudHkKKzE5OlVTOlVTQTpVTklURUQgU1RBVEVTOk5FVyBKRVJTRVk6U3Vzc2V4IENvdW50eQorMjA6VVM6VVNBOlVOSVRFRCBTVEFURVM6TkVXIEpFUlNFWTpVbmlvbiBDb3VudHkKKzIxOlVTOlVTQTpVTklURUQgU1RBVEVTOk5FVyBKRVJTRVk6V2FycmVuIENvdW50eQorMTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpJREFITzpBZGEgQ291bnR5CisyOlVTOlVTQTpVTklURUQgU1RBVEVTOklEQUhPOkFkYW1zIENvdW50eQorMzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpJREFITzpCYW5ub2NrIENvdW50eQorNDpVUzpVU0E6VU5JVEVEIFNUQVRFUzpJREFITzpCZWFyIExha2UgQ291bnR5Cis1OlVTOlVTQTpVTklURUQgU1RBVEVTOklEQUhPOkJlbmV3YWggQ291bnR5Cis2OlVTOlVTQTpVTklURUQgU1RBVEVTOklEQUhPOkJpbmdoYW0gQ291bnR5Cis3OlVTOlVTQTpVTklURUQgU1RBVEVTOklEQUhPOkJsYWluZSBDb3VudHkKKzg6VVM6VVNBOlVOSVRFRCBTVEFURVM6SURBSE86Qm9pc2UgQ291bnR5Cis5OlVTOlVTQTpVTklURUQgU1RBVEVTOklEQUhPOkJvbm5lciBDb3VudHkKKzEwOlVTOlVTQTpVTklURUQgU1RBVEVTOklEQUhPOkJvbm5ldmlsbGUgQ291bnR5CisxMTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpJREFITzpCb3VuZGFyeSBDb3VudHkKKzEyOlVTOlVTQTpVTklURUQgU1RBVEVTOklEQUhPOkJ1dHRlIENvdW50eQorMTM6VVM6VVNBOlVOSVRFRCBTVEFURVM6SURBSE86Q2FtYXMgQ291bnR5CisxNDpVUzpVU0E6VU5JVEVEIFNUQVRFUzpJREFITzpDYW55b24gQ291bnR5CisxNTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpJREFITzpDYXJpYm91IENvdW50eQorMTY6VVM6VVNBOlVOSVRFRCBTVEFURVM6SURBSE86Q2Fzc2lhIENvdW50eQorMTc6VVM6VVNBOlVOSVRFRCBTVEFURVM6SURBSE86Q2xhcmsgQ291bnR5CisxODpVUzpVU0E6VU5JVEVEIFNUQVRFUzpJREFITzpDbGVhcndhdGVyIENvdW50eQorMTk6VVM6VVNBOlVOSVRFRCBTVEFURVM6SURBSE86Q3VzdGVyIENvdW50eQorMjA6VVM6VVNBOlVOSVRFRCBTVEFURVM6SURBSE86RWxtb3JlIENvdW50eQorMjE6VVM6VVNBOlVOSVRFRCBTVEFURVM6SURBSE86RnJhbmtsaW4gQ291bnR5CisyMjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpJREFITzpGcmVtb250IENvdW50eQorMjM6VVM6VVNBOlVOSVRFRCBTVEFURVM6SURBSE86R2VtIENvdW50eQorMjQ6VVM6VVNBOlVOSVRFRCBTVEFURVM6SURBSE86R29vZGluZyBDb3VudHkKKzI1OlVTOlVTQTpVTklURUQgU1RBVEVTOklEQUhPOklkYWhvIENvdW50eQorMjY6VVM6VVNBOlVOSVRFRCBTVEFURVM6SURBSE86SmVmZmVyc29uIENvdW50eQorMjc6VVM6VVNBOlVOSVRFRCBTVEFURVM6SURBSE86SmVyb21lIENvdW50eQorMjg6VVM6VVNBOlVOSVRFRCBTVEFURVM6SURBSE86S29vdGVuYWkgQ291bnR5CisyOTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpJREFITzpMYXRhaCBDb3VudHkKKzMwOlVTOlVTQTpVTklURUQgU1RBVEVTOklEQUhPOkxlbWhpIENvdW50eQorMzE6VVM6VVNBOlVOSVRFRCBTVEFURVM6SURBSE86TGV3aXMgQ291bnR5CiszMjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpJREFITzpMaW5jb2xuIENvdW50eQorMzM6VVM6VVNBOlVOSVRFRCBTVEFURVM6SURBSE86TWFkaXNvbiBDb3VudHkKKzM0OlVTOlVTQTpVTklURUQgU1RBVEVTOklEQUhPOk1pbmlkb2thIENvdW50eQorMzU6VVM6VVNBOlVOSVRFRCBTVEFURVM6SURBSE86TmV6IFBlcmNlIENvdW50eQorMzY6VVM6VVNBOlVOSVRFRCBTVEFURVM6SURBSE86T25laWRhIENvdW50eQorMzc6VVM6VVNBOlVOSVRFRCBTVEFURVM6SURBSE86T3d5aGVlIENvdW50eQorMzg6VVM6VVNBOlVOSVRFRCBTVEFURVM6SURBSE86UGF5ZXR0ZSBDb3VudHkKKzM5OlVTOlVTQTpVTklURUQgU1RBVEVTOklEQUhPOlBvd2VyIENvdW50eQorNDA6VVM6VVNBOlVOSVRFRCBTVEFURVM6SURBSE86U2hvc2hvbmUgQ291bnR5Cis0MTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpJREFITzpUZXRvbiBDb3VudHkKKzQyOlVTOlVTQTpVTklURUQgU1RBVEVTOklEQUhPOlR3aW4gRmFsbHMgQ291bnR5Cis0MzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpJREFITzpWYWxsZXkgQ291bnR5Cis0NDpVUzpVU0E6VU5JVEVEIFNUQVRFUzpJREFITzpXYXNoaW5ndG9uIENvdW50eQorMTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpDQUxJRk9STklBOkFsYW1lZGEgQ291bnR5CisyOlVTOlVTQTpVTklURUQgU1RBVEVTOkNBTElGT1JOSUE6QWxwaW5lIENvdW50eQorMzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpDQUxJRk9STklBOkFtYWRvciBDb3VudHkKKzQ6VVM6VVNBOlVOSVRFRCBTVEFURVM6Q0FMSUZPUk5JQTpCdXR0ZSBDb3VudHkKKzU6VVM6VVNBOlVOSVRFRCBTVEFURVM6Q0FMSUZPUk5JQTpDYWxhdmVyYXMgQ291bnR5Cis2OlVTOlVTQTpVTklURUQgU1RBVEVTOkNBTElGT1JOSUE6Q29sdXNhIENvdW50eQorNzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpDQUxJRk9STklBOkNvbnRyYSBDb3N0YSBDb3VudHkKKzg6VVM6VVNBOlVOSVRFRCBTVEFURVM6Q0FMSUZPUk5JQTpEZWwgTm9ydGUgQ291bnR5Cis5OlVTOlVTQTpVTklURUQgU1RBVEVTOkNBTElGT1JOSUE6RWwgRG9yYWRvIENvdW50eQorMTA6VVM6VVNBOlVOSVRFRCBTVEFURVM6Q0FMSUZPUk5JQTpGcmVzbm8gQ291bnR5CisxMTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpDQUxJRk9STklBOkdsZW5uIENvdW50eQorMTI6VVM6VVNBOlVOSVRFRCBTVEFURVM6Q0FMSUZPUk5JQTpIdW1ib2xkdCBDb3VudHkKKzEzOlVTOlVTQTpVTklURUQgU1RBVEVTOkNBTElGT1JOSUE6SW1wZXJpYWwgQ291bnR5CisxNDpVUzpVU0E6VU5JVEVEIFNUQVRFUzpDQUxJRk9STklBOklueW8gQ291bnR5CisxNTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpDQUxJRk9STklBOktlcm4gQ291bnR5CisxNjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpDQUxJRk9STklBOktpbmdzIENvdW50eQorMTc6VVM6VVNBOlVOSVRFRCBTVEFURVM6Q0FMSUZPUk5JQTpMYWtlIENvdW50eQorMTg6VVM6VVNBOlVOSVRFRCBTVEFURVM6Q0FMSUZPUk5JQTpMYXNzZW4gQ291bnR5CisxOTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpDQUxJRk9STklBOkxvcyBBbmdlbGVzIENvdW50eQorMjA6VVM6VVNBOlVOSVRFRCBTVEFURVM6Q0FMSUZPUk5JQTpNYWRlcmEgQ291bnR5CisyMTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpDQUxJRk9STklBOk1hcmluIENvdW50eQorMjI6VVM6VVNBOlVOSVRFRCBTVEFURVM6Q0FMSUZPUk5JQTpNYXJpcG9zYSBDb3VudHkKKzIzOlVTOlVTQTpVTklURUQgU1RBVEVTOkNBTElGT1JOSUE6TWVuZG9jaW5vIENvdW50eQorMjQ6VVM6VVNBOlVOSVRFRCBTVEFURVM6Q0FMSUZPUk5JQTpNZXJjZWQgQ291bnR5CisyNTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpDQUxJRk9STklBOk1vZG9jIENvdW50eQorMjY6VVM6VVNBOlVOSVRFRCBTVEFURVM6Q0FMSUZPUk5JQTpNb25vIENvdW50eQorMjc6VVM6VVNBOlVOSVRFRCBTVEFURVM6Q0FMSUZPUk5JQTpNb250ZXJleSBDb3VudHkKKzI4OlVTOlVTQTpVTklURUQgU1RBVEVTOkNBTElGT1JOSUE6TmFwYSBDb3VudHkKKzI5OlVTOlVTQTpVTklURUQgU1RBVEVTOkNBTElGT1JOSUE6TmV2YWRhIENvdW50eQorMzA6VVM6VVNBOlVOSVRFRCBTVEFURVM6Q0FMSUZPUk5JQTpPcmFuZ2UgQ291bnR5CiszMTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpDQUxJRk9STklBOlBsYWNlciBDb3VudHkKKzMyOlVTOlVTQTpVTklURUQgU1RBVEVTOkNBTElGT1JOSUE6UGx1bWFzIENvdW50eQorMzM6VVM6VVNBOlVOSVRFRCBTVEFURVM6Q0FMSUZPUk5JQTpSaXZlcnNpZGUgQ291bnR5CiszNDpVUzpVU0E6VU5JVEVEIFNUQVRFUzpDQUxJRk9STklBOlNhY3JhbWVudG8gQ291bnR5CiszNTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpDQUxJRk9STklBOlNhbiBCZW5pdG8gQ291bnR5CiszNjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpDQUxJRk9STklBOlNhbiBCZXJuYXJkaW5vIENvdW50eQorMzc6VVM6VVNBOlVOSVRFRCBTVEFURVM6Q0FMSUZPUk5JQTpTYW4gRGllZ28gQ291bnR5CiszODpVUzpVU0E6VU5JVEVEIFNUQVRFUzpDQUxJRk9STklBOlNhbiBGcmFuY2lzY28gQ291bnR5CiszOTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpDQUxJRk9STklBOlNhbiBKb2FxdWluIENvdW50eQorNDA6VVM6VVNBOlVOSVRFRCBTVEFURVM6Q0FMSUZPUk5JQTpTYW4gTHVpcyBPYmlzcG8gQ291bnR5Cis0MTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpDQUxJRk9STklBOlNhbiBNYXRlbyBDb3VudHkKKzQyOlVTOlVTQTpVTklURUQgU1RBVEVTOkNBTElGT1JOSUE6U2FudGEgQmFyYmFyYSBDb3VudHkKKzQzOlVTOlVTQTpVTklURUQgU1RBVEVTOkNBTElGT1JOSUE6U2FudGEgQ2xhcmEgQ291bnR5Cis0NDpVUzpVU0E6VU5JVEVEIFNUQVRFUzpDQUxJRk9STklBOlNhbnRhIENydXogQ291bnR5Cis0NTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpDQUxJRk9STklBOlNoYXN0YSBDb3VudHkKKzQ2OlVTOlVTQTpVTklURUQgU1RBVEVTOkNBTElGT1JOSUE6U2llcnJhIENvdW50eQorNDc6VVM6VVNBOlVOSVRFRCBTVEFURVM6Q0FMSUZPUk5JQTpTaXNraXlvdSBDb3VudHkKKzQ4OlVTOlVTQTpVTklURUQgU1RBVEVTOkNBTElGT1JOSUE6U29sYW5vIENvdW50eQorNDk6VVM6VVNBOlVOSVRFRCBTVEFURVM6Q0FMSUZPUk5JQTpTb25vbWEgQ291bnR5Cis1MDpVUzpVU0E6VU5JVEVEIFNUQVRFUzpDQUxJRk9STklBOlN0YW5pc2xhdXMgQ291bnR5Cis1MTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpDQUxJRk9STklBOlN1dHRlciBDb3VudHkKKzUyOlVTOlVTQTpVTklURUQgU1RBVEVTOkNBTElGT1JOSUE6VGVoYW1hIENvdW50eQorNTM6VVM6VVNBOlVOSVRFRCBTVEFURVM6Q0FMSUZPUk5JQTpUcmluaXR5IENvdW50eQorNTQ6VVM6VVNBOlVOSVRFRCBTVEFURVM6Q0FMSUZPUk5JQTpUdWxhcmUgQ291bnR5Cis1NTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpDQUxJRk9STklBOlR1b2x1bW5lIENvdW50eQorNTY6VVM6VVNBOlVOSVRFRCBTVEFURVM6Q0FMSUZPUk5JQTpWZW50dXJhIENvdW50eQorNTc6VVM6VVNBOlVOSVRFRCBTVEFURVM6Q0FMSUZPUk5JQTpZb2xvIENvdW50eQorNTg6VVM6VVNBOlVOSVRFRCBTVEFURVM6Q0FMSUZPUk5JQTpZdWJhIENvdW50eQorMTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpPS0xBSE9NQTpBZGFpciBDb3VudHkKKzI6VVM6VVNBOlVOSVRFRCBTVEFURVM6T0tMQUhPTUE6QWxmYWxmYSBDb3VudHkKKzM6VVM6VVNBOlVOSVRFRCBTVEFURVM6T0tMQUhPTUE6QXRva2EgQ291bnR5Cis0OlVTOlVTQTpVTklURUQgU1RBVEVTOk9LTEFIT01BOkJlYXZlciBDb3VudHkKKzU6VVM6VVNBOlVOSVRFRCBTVEFURVM6T0tMQUhPTUE6QmVja2hhbSBDb3VudHkKKzY6VVM6VVNBOlVOSVRFRCBTVEFURVM6T0tMQUhPTUE6QmxhaW5lIENvdW50eQorNzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpPS0xBSE9NQTpCcnlhbiBDb3VudHkKKzg6VVM6VVNBOlVOSVRFRCBTVEFURVM6T0tMQUhPTUE6Q2FkZG8gQ291bnR5Cis5OlVTOlVTQTpVTklURUQgU1RBVEVTOk9LTEFIT01BOkNhbmFkaWFuIENvdW50eQorMTA6VVM6VVNBOlVOSVRFRCBTVEFURVM6T0tMQUhPTUE6Q2FydGVyIENvdW50eQorMTE6VVM6VVNBOlVOSVRFRCBTVEFURVM6T0tMQUhPTUE6Q2hlcm9rZWUgQ291bnR5CisxMjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpPS0xBSE9NQTpDaG9jdGF3IENvdW50eQorMTM6VVM6VVNBOlVOSVRFRCBTVEFURVM6T0tMQUhPTUE6Q2ltYXJyb24gQ291bnR5CisxNDpVUzpVU0E6VU5JVEVEIFNUQVRFUzpPS0xBSE9NQTpDbGV2ZWxhbmQgQ291bnR5CisxNTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpPS0xBSE9NQTpDb2FsIENvdW50eQorMTY6VVM6VVNBOlVOSVRFRCBTVEFURVM6T0tMQUhPTUE6Q29tYW5jaGUgQ291bnR5CisxNzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpPS0xBSE9NQTpDb3R0b24gQ291bnR5CisxODpVUzpVU0E6VU5JVEVEIFNUQVRFUzpPS0xBSE9NQTpDcmFpZyBDb3VudHkKKzE5OlVTOlVTQTpVTklURUQgU1RBVEVTOk9LTEFIT01BOkNyZWVrIENvdW50eQorMjA6VVM6VVNBOlVOSVRFRCBTVEFURVM6T0tMQUhPTUE6Q3VzdGVyIENvdW50eQorMjE6VVM6VVNBOlVOSVRFRCBTVEFURVM6T0tMQUhPTUE6RGVsYXdhcmUgQ291bnR5CisyMjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpPS0xBSE9NQTpEZXdleSBDb3VudHkKKzIzOlVTOlVTQTpVTklURUQgU1RBVEVTOk9LTEFIT01BOkVsbGlzIENvdW50eQorMjQ6VVM6VVNBOlVOSVRFRCBTVEFURVM6T0tMQUhPTUE6R2FyZmllbGQgQ291bnR5CisyNTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpPS0xBSE9NQTpHYXJ2aW4gQ291bnR5CisyNjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpPS0xBSE9NQTpHcmFkeSBDb3VudHkKKzI3OlVTOlVTQTpVTklURUQgU1RBVEVTOk9LTEFIT01BOkdyYW50IENvdW50eQorMjg6VVM6VVNBOlVOSVRFRCBTVEFURVM6T0tMQUhPTUE6R3JlZXIgQ291bnR5CisyOTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpPS0xBSE9NQTpIYXJtb24gQ291bnR5CiszMDpVUzpVU0E6VU5JVEVEIFNUQVRFUzpPS0xBSE9NQTpIYXJwZXIgQ291bnR5CiszMTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpPS0xBSE9NQTpIYXNrZWxsIENvdW50eQorMzI6VVM6VVNBOlVOSVRFRCBTVEFURVM6T0tMQUhPTUE6SHVnaGVzIENvdW50eQorMzM6VVM6VVNBOlVOSVRFRCBTVEFURVM6T0tMQUhPTUE6SmFja3NvbiBDb3VudHkKKzM0OlVTOlVTQTpVTklURUQgU1RBVEVTOk9LTEFIT01BOkplZmZlcnNvbiBDb3VudHkKKzM1OlVTOlVTQTpVTklURUQgU1RBVEVTOk9LTEFIT01BOkpvaG5zdG9uIENvdW50eQorMzY6VVM6VVNBOlVOSVRFRCBTVEFURVM6T0tMQUhPTUE6S2F5IENvdW50eQorMzc6VVM6VVNBOlVOSVRFRCBTVEFURVM6T0tMQUhPTUE6S2luZ2Zpc2hlciBDb3VudHkKKzM4OlVTOlVTQTpVTklURUQgU1RBVEVTOk9LTEFIT01BOktpb3dhIENvdW50eQorMzk6VVM6VVNBOlVOSVRFRCBTVEFURVM6T0tMQUhPTUE6TGF0aW1lciBDb3VudHkKKzQwOlVTOlVTQTpVTklURUQgU1RBVEVTOk9LTEFIT01BOkxlIEZsb3JlIENvdW50eQorNDE6VVM6VVNBOlVOSVRFRCBTVEFURVM6T0tMQUhPTUE6TGluY29sbiBDb3VudHkKKzQyOlVTOlVTQTpVTklURUQgU1RBVEVTOk9LTEFIT01BOkxvZ2FuIENvdW50eQorNDM6VVM6VVNBOlVOSVRFRCBTVEFURVM6T0tMQUhPTUE6TG92ZSBDb3VudHkKKzQ0OlVTOlVTQTpVTklURUQgU1RBVEVTOk9LTEFIT01BOk1ham9yIENvdW50eQorNDU6VVM6VVNBOlVOSVRFRCBTVEFURVM6T0tMQUhPTUE6TWFyc2hhbGwgQ291bnR5Cis0NjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpPS0xBSE9NQTpNYXllcyBDb3VudHkKKzQ3OlVTOlVTQTpVTklURUQgU1RBVEVTOk9LTEFIT01BOk1jQ2xhaW4gQ291bnR5Cis0ODpVUzpVU0E6VU5JVEVEIFNUQVRFUzpPS0xBSE9NQTpNY0N1cnRhaW4gQ291bnR5Cis0OTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpPS0xBSE9NQTpNY0ludG9zaCBDb3VudHkKKzUwOlVTOlVTQTpVTklURUQgU1RBVEVTOk9LTEFIT01BOk11cnJheSBDb3VudHkKKzUxOlVTOlVTQTpVTklURUQgU1RBVEVTOk9LTEFIT01BOk11c2tvZ2VlIENvdW50eQorNTI6VVM6VVNBOlVOSVRFRCBTVEFURVM6T0tMQUhPTUE6Tm9ibGUgQ291bnR5Cis1MzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpPS0xBSE9NQTpOb3dhdGEgQ291bnR5Cis1NDpVUzpVU0E6VU5JVEVEIFNUQVRFUzpPS0xBSE9NQTpPa2Z1c2tlZSBDb3VudHkKKzU1OlVTOlVTQTpVTklURUQgU1RBVEVTOk9LTEFIT01BOk9rbGFob21hIENvdW50eQorNTY6VVM6VVNBOlVOSVRFRCBTVEFURVM6T0tMQUhPTUE6T2ttdWxnZWUgQ291bnR5Cis1NzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpPS0xBSE9NQTpPc2FnZSBDb3VudHkKKzU4OlVTOlVTQTpVTklURUQgU1RBVEVTOk9LTEFIT01BOk90dGF3YSBDb3VudHkKKzU5OlVTOlVTQTpVTklURUQgU1RBVEVTOk9LTEFIT01BOlBhd25lZSBDb3VudHkKKzYwOlVTOlVTQTpVTklURUQgU1RBVEVTOk9LTEFIT01BOlBheW5lIENvdW50eQorNjE6VVM6VVNBOlVOSVRFRCBTVEFURVM6T0tMQUhPTUE6UGl0dHNidXJnIENvdW50eQorNjI6VVM6VVNBOlVOSVRFRCBTVEFURVM6T0tMQUhPTUE6UG9udG90b2MgQ291bnR5Cis2MzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpPS0xBSE9NQTpQb3R0YXdhdG9taWUgQ291bnR5Cis2NDpVUzpVU0E6VU5JVEVEIFNUQVRFUzpPS0xBSE9NQTpQdXNobWF0YWhhIENvdW50eQorNjU6VVM6VVNBOlVOSVRFRCBTVEFURVM6T0tMQUhPTUE6Um9nZXIgTWlsbHMgQ291bnR5Cis2NjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpPS0xBSE9NQTpSb2dlcnMgQ291bnR5Cis2NzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpPS0xBSE9NQTpTZW1pbm9sZSBDb3VudHkKKzY4OlVTOlVTQTpVTklURUQgU1RBVEVTOk9LTEFIT01BOlNlcXVveWFoIENvdW50eQorNjk6VVM6VVNBOlVOSVRFRCBTVEFURVM6T0tMQUhPTUE6U3RlcGhlbnMgQ291bnR5Cis3MDpVUzpVU0E6VU5JVEVEIFNUQVRFUzpPS0xBSE9NQTpUZXhhcyBDb3VudHkKKzcxOlVTOlVTQTpVTklURUQgU1RBVEVTOk9LTEFIT01BOlRpbGxtYW4gQ291bnR5Cis3MjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpPS0xBSE9NQTpUdWxzYSBDb3VudHkKKzczOlVTOlVTQTpVTklURUQgU1RBVEVTOk9LTEFIT01BOldhZ29uZXIgQ291bnR5Cis3NDpVUzpVU0E6VU5JVEVEIFNUQVRFUzpPS0xBSE9NQTpXYXNoaW5ndG9uIENvdW50eQorNzU6VVM6VVNBOlVOSVRFRCBTVEFURVM6T0tMQUhPTUE6V2FzaGl0YSBDb3VudHkKKzc2OlVTOlVTQTpVTklURUQgU1RBVEVTOk9LTEFIT01BOldvb2RzIENvdW50eQorNzc6VVM6VVNBOlVOSVRFRCBTVEFURVM6T0tMQUhPTUE6V29vZHdhcmQgQ291bnR5CisxOlVTOlVTQTpVTklURUQgU1RBVEVTOktBTlNBUzpBbGxlbiBDb3VudHkKKzI6VVM6VVNBOlVOSVRFRCBTVEFURVM6S0FOU0FTOkFuZGVyc29uIENvdW50eQorMzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpLQU5TQVM6QXRjaGlzb24gQ291bnR5Cis0OlVTOlVTQTpVTklURUQgU1RBVEVTOktBTlNBUzpCYXJiZXIgQ291bnR5Cis1OlVTOlVTQTpVTklURUQgU1RBVEVTOktBTlNBUzpCYXJ0b24gQ291bnR5Cis2OlVTOlVTQTpVTklURUQgU1RBVEVTOktBTlNBUzpCb3VyYm9uIENvdW50eQorNzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpLQU5TQVM6QnJvd24gQ291bnR5Cis4OlVTOlVTQTpVTklURUQgU1RBVEVTOktBTlNBUzpCdXRsZXIgQ291bnR5Cis5OlVTOlVTQTpVTklURUQgU1RBVEVTOktBTlNBUzpDaGFzZSBDb3VudHkKKzEwOlVTOlVTQTpVTklURUQgU1RBVEVTOktBTlNBUzpDaGF1dGF1cXVhIENvdW50eQorMTE6VVM6VVNBOlVOSVRFRCBTVEFURVM6S0FOU0FTOkNoZXJva2VlIENvdW50eQorMTI6VVM6VVNBOlVOSVRFRCBTVEFURVM6S0FOU0FTOkNoZXllbm5lIENvdW50eQorMTM6VVM6VVNBOlVOSVRFRCBTVEFURVM6S0FOU0FTOkNsYXJrIENvdW50eQorMTQ6VVM6VVNBOlVOSVRFRCBTVEFURVM6S0FOU0FTOkNsYXkgQ291bnR5CisxNTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpLQU5TQVM6Q2xvdWQgQ291bnR5CisxNjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpLQU5TQVM6Q29mZmV5IENvdW50eQorMTc6VVM6VVNBOlVOSVRFRCBTVEFURVM6S0FOU0FTOkNvbWFuY2hlIENvdW50eQorMTg6VVM6VVNBOlVOSVRFRCBTVEFURVM6S0FOU0FTOkNvd2xleSBDb3VudHkKKzE5OlVTOlVTQTpVTklURUQgU1RBVEVTOktBTlNBUzpDcmF3Zm9yZCBDb3VudHkKKzIwOlVTOlVTQTpVTklURUQgU1RBVEVTOktBTlNBUzpEZWNhdHVyIENvdW50eQorMjE6VVM6VVNBOlVOSVRFRCBTVEFURVM6S0FOU0FTOkRpY2tpbnNvbiBDb3VudHkKKzIyOlVTOlVTQTpVTklURUQgU1RBVEVTOktBTlNBUzpEb25pcGhhbiBDb3VudHkKKzIzOlVTOlVTQTpVTklURUQgU1RBVEVTOktBTlNBUzpEb3VnbGFzIENvdW50eQorMjQ6VVM6VVNBOlVOSVRFRCBTVEFURVM6S0FOU0FTOkVkd2FyZHMgQ291bnR5CisyNTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpLQU5TQVM6RWxrIENvdW50eQorMjY6VVM6VVNBOlVOSVRFRCBTVEFURVM6S0FOU0FTOkVsbGlzIENvdW50eQorMjc6VVM6VVNBOlVOSVRFRCBTVEFURVM6S0FOU0FTOkVsbHN3b3J0aCBDb3VudHkKKzI4OlVTOlVTQTpVTklURUQgU1RBVEVTOktBTlNBUzpGaW5uZXkgQ291bnR5CisyOTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpLQU5TQVM6Rm9yZCBDb3VudHkKKzMwOlVTOlVTQTpVTklURUQgU1RBVEVTOktBTlNBUzpGcmFua2xpbiBDb3VudHkKKzMxOlVTOlVTQTpVTklURUQgU1RBVEVTOktBTlNBUzpHZWFyeSBDb3VudHkKKzMyOlVTOlVTQTpVTklURUQgU1RBVEVTOktBTlNBUzpHb3ZlIENvdW50eQorMzM6VVM6VVNBOlVOSVRFRCBTVEFURVM6S0FOU0FTOkdyYWhhbSBDb3VudHkKKzM0OlVTOlVTQTpVTklURUQgU1RBVEVTOktBTlNBUzpHcmFudCBDb3VudHkKKzM1OlVTOlVTQTpVTklURUQgU1RBVEVTOktBTlNBUzpHcmF5IENvdW50eQorMzY6VVM6VVNBOlVOSVRFRCBTVEFURVM6S0FOU0FTOkdyZWVsZXkgQ291bnR5CiszNzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpLQU5TQVM6R3JlZW53b29kIENvdW50eQorMzg6VVM6VVNBOlVOSVRFRCBTVEFURVM6S0FOU0FTOkhhbWlsdG9uIENvdW50eQorMzk6VVM6VVNBOlVOSVRFRCBTVEFURVM6S0FOU0FTOkhhcnBlciBDb3VudHkKKzQwOlVTOlVTQTpVTklURUQgU1RBVEVTOktBTlNBUzpIYXJ2ZXkgQ291bnR5Cis0MTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpLQU5TQVM6SGFza2VsbCBDb3VudHkKKzQyOlVTOlVTQTpVTklURUQgU1RBVEVTOktBTlNBUzpIb2RnZW1hbiBDb3VudHkKKzQzOlVTOlVTQTpVTklURUQgU1RBVEVTOktBTlNBUzpKYWNrc29uIENvdW50eQorNDQ6VVM6VVNBOlVOSVRFRCBTVEFURVM6S0FOU0FTOkplZmZlcnNvbiBDb3VudHkKKzQ1OlVTOlVTQTpVTklURUQgU1RBVEVTOktBTlNBUzpKZXdlbGwgQ291bnR5Cis0NjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpLQU5TQVM6Sm9obnNvbiBDb3VudHkKKzQ3OlVTOlVTQTpVTklURUQgU1RBVEVTOktBTlNBUzpLZWFybnkgQ291bnR5Cis0ODpVUzpVU0E6VU5JVEVEIFNUQVRFUzpLQU5TQVM6S2luZ21hbiBDb3VudHkKKzQ5OlVTOlVTQTpVTklURUQgU1RBVEVTOktBTlNBUzpLaW93YSBDb3VudHkKKzUwOlVTOlVTQTpVTklURUQgU1RBVEVTOktBTlNBUzpMYWJldHRlIENvdW50eQorNTE6VVM6VVNBOlVOSVRFRCBTVEFURVM6S0FOU0FTOkxhbmUgQ291bnR5Cis1MjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpLQU5TQVM6TGVhdmVud29ydGggQ291bnR5Cis1MzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpLQU5TQVM6TGluY29sbiBDb3VudHkKKzU0OlVTOlVTQTpVTklURUQgU1RBVEVTOktBTlNBUzpMaW5uIENvdW50eQorNTU6VVM6VVNBOlVOSVRFRCBTVEFURVM6S0FOU0FTOkxvZ2FuIENvdW50eQorNTY6VVM6VVNBOlVOSVRFRCBTVEFURVM6S0FOU0FTOkx5b24gQ291bnR5Cis1NzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpLQU5TQVM6TWFyaW9uIENvdW50eQorNTg6VVM6VVNBOlVOSVRFRCBTVEFURVM6S0FOU0FTOk1hcnNoYWxsIENvdW50eQorNTk6VVM6VVNBOlVOSVRFRCBTVEFURVM6S0FOU0FTOk1jUGhlcnNvbiBDb3VudHkKKzYwOlVTOlVTQTpVTklURUQgU1RBVEVTOktBTlNBUzpNZWFkZSBDb3VudHkKKzYxOlVTOlVTQTpVTklURUQgU1RBVEVTOktBTlNBUzpNaWFtaSBDb3VudHkKKzYyOlVTOlVTQTpVTklURUQgU1RBVEVTOktBTlNBUzpNaXRjaGVsbCBDb3VudHkKKzYzOlVTOlVTQTpVTklURUQgU1RBVEVTOktBTlNBUzpNb250Z29tZXJ5IENvdW50eQorNjQ6VVM6VVNBOlVOSVRFRCBTVEFURVM6S0FOU0FTOk1vcnJpcyBDb3VudHkKKzY1OlVTOlVTQTpVTklURUQgU1RBVEVTOktBTlNBUzpNb3J0b24gQ291bnR5Cis2NjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpLQU5TQVM6TmVtYWhhIENvdW50eQorNjc6VVM6VVNBOlVOSVRFRCBTVEFURVM6S0FOU0FTOk5lb3NobyBDb3VudHkKKzY4OlVTOlVTQTpVTklURUQgU1RBVEVTOktBTlNBUzpOZXNzIENvdW50eQorNjk6VVM6VVNBOlVOSVRFRCBTVEFURVM6S0FOU0FTOk5vcnRvbiBDb3VudHkKKzcwOlVTOlVTQTpVTklURUQgU1RBVEVTOktBTlNBUzpPc2FnZSBDb3VudHkKKzcxOlVTOlVTQTpVTklURUQgU1RBVEVTOktBTlNBUzpPc2Jvcm5lIENvdW50eQorNzI6VVM6VVNBOlVOSVRFRCBTVEFURVM6S0FOU0FTOk90dGF3YSBDb3VudHkKKzczOlVTOlVTQTpVTklURUQgU1RBVEVTOktBTlNBUzpQYXduZWUgQ291bnR5Cis3NDpVUzpVU0E6VU5JVEVEIFNUQVRFUzpLQU5TQVM6UGhpbGxpcHMgQ291bnR5Cis3NTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpLQU5TQVM6UG90dGF3YXRvbWllIENvdW50eQorNzY6VVM6VVNBOlVOSVRFRCBTVEFURVM6S0FOU0FTOlByYXR0IENvdW50eQorNzc6VVM6VVNBOlVOSVRFRCBTVEFURVM6S0FOU0FTOlJhd2xpbnMgQ291bnR5Cis3ODpVUzpVU0E6VU5JVEVEIFNUQVRFUzpLQU5TQVM6UmVubyBDb3VudHkKKzc5OlVTOlVTQTpVTklURUQgU1RBVEVTOktBTlNBUzpSZXB1YmxpYyBDb3VudHkKKzgwOlVTOlVTQTpVTklURUQgU1RBVEVTOktBTlNBUzpSaWNlIENvdW50eQorODE6VVM6VVNBOlVOSVRFRCBTVEFURVM6S0FOU0FTOlJpbGV5IENvdW50eQorODI6VVM6VVNBOlVOSVRFRCBTVEFURVM6S0FOU0FTOlJvb2tzIENvdW50eQorODM6VVM6VVNBOlVOSVRFRCBTVEFURVM6S0FOU0FTOlJ1c2ggQ291bnR5Cis4NDpVUzpVU0E6VU5JVEVEIFNUQVRFUzpLQU5TQVM6UnVzc2VsbCBDb3VudHkKKzg1OlVTOlVTQTpVTklURUQgU1RBVEVTOktBTlNBUzpTYWxpbmUgQ291bnR5Cis4NjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpLQU5TQVM6U2NvdHQgQ291bnR5Cis4NzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpLQU5TQVM6U2VkZ3dpY2sgQ291bnR5Cis4ODpVUzpVU0E6VU5JVEVEIFNUQVRFUzpLQU5TQVM6U2V3YXJkIENvdW50eQorODk6VVM6VVNBOlVOSVRFRCBTVEFURVM6S0FOU0FTOlNoYXduZWUgQ291bnR5Cis5MDpVUzpVU0E6VU5JVEVEIFNUQVRFUzpLQU5TQVM6U2hlcmlkYW4gQ291bnR5Cis5MTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpLQU5TQVM6U2hlcm1hbiBDb3VudHkKKzkyOlVTOlVTQTpVTklURUQgU1RBVEVTOktBTlNBUzpTbWl0aCBDb3VudHkKKzkzOlVTOlVTQTpVTklURUQgU1RBVEVTOktBTlNBUzpTdGFmZm9yZCBDb3VudHkKKzk0OlVTOlVTQTpVTklURUQgU1RBVEVTOktBTlNBUzpTdGFudG9uIENvdW50eQorOTU6VVM6VVNBOlVOSVRFRCBTVEFURVM6S0FOU0FTOlN0ZXZlbnMgQ291bnR5Cis5NjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpLQU5TQVM6U3VtbmVyIENvdW50eQorOTc6VVM6VVNBOlVOSVRFRCBTVEFURVM6S0FOU0FTOlRob21hcyBDb3VudHkKKzk4OlVTOlVTQTpVTklURUQgU1RBVEVTOktBTlNBUzpUcmVnbyBDb3VudHkKKzk5OlVTOlVTQTpVTklURUQgU1RBVEVTOktBTlNBUzpXYWJhdW5zZWUgQ291bnR5CisxMDA6VVM6VVNBOlVOSVRFRCBTVEFURVM6S0FOU0FTOldhbGxhY2UgQ291bnR5CisxMDE6VVM6VVNBOlVOSVRFRCBTVEFURVM6S0FOU0FTOldhc2hpbmd0b24gQ291bnR5CisxMDI6VVM6VVNBOlVOSVRFRCBTVEFURVM6S0FOU0FTOldpY2hpdGEgQ291bnR5CisxMDM6VVM6VVNBOlVOSVRFRCBTVEFURVM6S0FOU0FTOldpbHNvbiBDb3VudHkKKzEwNDpVUzpVU0E6VU5JVEVEIFNUQVRFUzpLQU5TQVM6V29vZHNvbiBDb3VudHkKKzEwNTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpLQU5TQVM6V3lhbmRvdHRlIENvdW50eQorMTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpORVcgTUVYSUNPOkJlcm5hbGlsbG8gQ291bnR5CisyOlVTOlVTQTpVTklURUQgU1RBVEVTOk5FVyBNRVhJQ086Q2F0cm9uIENvdW50eQorMzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpORVcgTUVYSUNPOkNoYXZlcyBDb3VudHkKKzQ6VVM6VVNBOlVOSVRFRCBTVEFURVM6TkVXIE1FWElDTzpDaWJvbGEgQ291bnR5Cis1OlVTOlVTQTpVTklURUQgU1RBVEVTOk5FVyBNRVhJQ086Q29sZmF4IENvdW50eQorNjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpORVcgTUVYSUNPOkN1cnJ5IENvdW50eQorNzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpORVcgTUVYSUNPOkRlIEJhY2EgQ291bnR5Cis4OlVTOlVTQTpVTklURUQgU1RBVEVTOk5FVyBNRVhJQ086RG9uYSBBbmEgQ291bnR5Cis5OlVTOlVTQTpVTklURUQgU1RBVEVTOk5FVyBNRVhJQ086RWRkeSBDb3VudHkKKzEwOlVTOlVTQTpVTklURUQgU1RBVEVTOk5FVyBNRVhJQ086R3JhbnQgQ291bnR5CisxMTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpORVcgTUVYSUNPOkd1YWRhbHVwZSBDb3VudHkKKzEyOlVTOlVTQTpVTklURUQgU1RBVEVTOk5FVyBNRVhJQ086SGFyZGluZyBDb3VudHkKKzEzOlVTOlVTQTpVTklURUQgU1RBVEVTOk5FVyBNRVhJQ086SGlkYWxnbyBDb3VudHkKKzE0OlVTOlVTQTpVTklURUQgU1RBVEVTOk5FVyBNRVhJQ086TGVhIENvdW50eQorMTU6VVM6VVNBOlVOSVRFRCBTVEFURVM6TkVXIE1FWElDTzpMaW5jb2xuIENvdW50eQorMTY6VVM6VVNBOlVOSVRFRCBTVEFURVM6TkVXIE1FWElDTzpMb3MgQWxhbW9zIENvdW50eQorMTc6VVM6VVNBOlVOSVRFRCBTVEFURVM6TkVXIE1FWElDTzpMdW5hIENvdW50eQorMTg6VVM6VVNBOlVOSVRFRCBTVEFURVM6TkVXIE1FWElDTzpNY0tpbmxleSBDb3VudHkKKzE5OlVTOlVTQTpVTklURUQgU1RBVEVTOk5FVyBNRVhJQ086TW9yYSBDb3VudHkKKzIwOlVTOlVTQTpVTklURUQgU1RBVEVTOk5FVyBNRVhJQ086T3Rlcm8gQ291bnR5CisyMTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpORVcgTUVYSUNPOlF1YXkgQ291bnR5CisyMjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpORVcgTUVYSUNPOlJpbyBBcnJpYmEgQ291bnR5CisyMzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpORVcgTUVYSUNPOlJvb3NldmVsdCBDb3VudHkKKzI0OlVTOlVTQTpVTklURUQgU1RBVEVTOk5FVyBNRVhJQ086U2FuIEp1YW4gQ291bnR5CisyNTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpORVcgTUVYSUNPOlNhbiBNaWd1ZWwgQ291bnR5CisyNjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpORVcgTUVYSUNPOlNhbmRvdmFsIENvdW50eQorMjc6VVM6VVNBOlVOSVRFRCBTVEFURVM6TkVXIE1FWElDTzpTYW50YSBGZSBDb3VudHkKKzI4OlVTOlVTQTpVTklURUQgU1RBVEVTOk5FVyBNRVhJQ086U2llcnJhIENvdW50eQorMjk6VVM6VVNBOlVOSVRFRCBTVEFURVM6TkVXIE1FWElDTzpTb2NvcnJvIENvdW50eQorMzA6VVM6VVNBOlVOSVRFRCBTVEFURVM6TkVXIE1FWElDTzpUYW9zIENvdW50eQorMzE6VVM6VVNBOlVOSVRFRCBTVEFURVM6TkVXIE1FWElDTzpUb3JyYW5jZSBDb3VudHkKKzMyOlVTOlVTQTpVTklURUQgU1RBVEVTOk5FVyBNRVhJQ086VW5pb24gQ291bnR5CiszMzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpORVcgTUVYSUNPOlZhbGVuY2lhIENvdW50eQorMTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpNQVJZTEFORDpBbGxlZ2FueSBDb3VudHkKKzI6VVM6VVNBOlVOSVRFRCBTVEFURVM6TUFSWUxBTkQ6QW5uZSBBcnVuZGVsIENvdW50eQorMzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpNQVJZTEFORDpCYWx0aW1vcmUgQ291bnR5Cis0OlVTOlVTQTpVTklURUQgU1RBVEVTOk1BUllMQU5EOkJhbHRpbW9yZSBjaXR5Cis1OlVTOlVTQTpVTklURUQgU1RBVEVTOk1BUllMQU5EOkNhbHZlcnQgQ291bnR5Cis2OlVTOlVTQTpVTklURUQgU1RBVEVTOk1BUllMQU5EOkNhcm9saW5lIENvdW50eQorNzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpNQVJZTEFORDpDYXJyb2xsIENvdW50eQorODpVUzpVU0E6VU5JVEVEIFNUQVRFUzpNQVJZTEFORDpDZWNpbCBDb3VudHkKKzk6VVM6VVNBOlVOSVRFRCBTVEFURVM6TUFSWUxBTkQ6Q2hhcmxlcyBDb3VudHkKKzEwOlVTOlVTQTpVTklURUQgU1RBVEVTOk1BUllMQU5EOkRvcmNoZXN0ZXIgQ291bnR5CisxMTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpNQVJZTEFORDpGcmVkZXJpY2sgQ291bnR5CisxMjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpNQVJZTEFORDpHYXJyZXR0IENvdW50eQorMTM6VVM6VVNBOlVOSVRFRCBTVEFURVM6TUFSWUxBTkQ6SGFyZm9yZCBDb3VudHkKKzE0OlVTOlVTQTpVTklURUQgU1RBVEVTOk1BUllMQU5EOkhvd2FyZCBDb3VudHkKKzE1OlVTOlVTQTpVTklURUQgU1RBVEVTOk1BUllMQU5EOktlbnQgQ291bnR5CisxNjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpNQVJZTEFORDpNb250Z29tZXJ5IENvdW50eQorMTc6VVM6VVNBOlVOSVRFRCBTVEFURVM6TUFSWUxBTkQ6UHJpbmNlIEdlb3JnZSdzIENvdW50eQorMTg6VVM6VVNBOlVOSVRFRCBTVEFURVM6TUFSWUxBTkQ6UXVlZW4gQW5uZSdzIENvdW50eQorMTk6VVM6VVNBOlVOSVRFRCBTVEFURVM6TUFSWUxBTkQ6U29tZXJzZXQgQ291bnR5CisyMDpVUzpVU0E6VU5JVEVEIFNUQVRFUzpNQVJZTEFORDpTdC4gTWFyeSdzIENvdW50eQorMjE6VVM6VVNBOlVOSVRFRCBTVEFURVM6TUFSWUxBTkQ6VGFsYm90IENvdW50eQorMjI6VVM6VVNBOlVOSVRFRCBTVEFURVM6TUFSWUxBTkQ6V2FzaGluZ3RvbiBDb3VudHkKKzIzOlVTOlVTQTpVTklURUQgU1RBVEVTOk1BUllMQU5EOldpY29taWNvIENvdW50eQorMjQ6VVM6VVNBOlVOSVRFRCBTVEFURVM6TUFSWUxBTkQ6V29yY2VzdGVyIENvdW50eQorMTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpOT1JUSCBDQVJPTElOQTpBbGFtYW5jZSBDb3VudHkKKzI6VVM6VVNBOlVOSVRFRCBTVEFURVM6Tk9SVEggQ0FST0xJTkE6QWxleGFuZGVyIENvdW50eQorMzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpOT1JUSCBDQVJPTElOQTpBbGxlZ2hhbnkgQ291bnR5Cis0OlVTOlVTQTpVTklURUQgU1RBVEVTOk5PUlRIIENBUk9MSU5BOkFuc29uIENvdW50eQorNTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpOT1JUSCBDQVJPTElOQTpBc2hlIENvdW50eQorNjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpOT1JUSCBDQVJPTElOQTpBdmVyeSBDb3VudHkKKzc6VVM6VVNBOlVOSVRFRCBTVEFURVM6Tk9SVEggQ0FST0xJTkE6QmVhdWZvcnQgQ291bnR5Cis4OlVTOlVTQTpVTklURUQgU1RBVEVTOk5PUlRIIENBUk9MSU5BOkJlcnRpZSBDb3VudHkKKzk6VVM6VVNBOlVOSVRFRCBTVEFURVM6Tk9SVEggQ0FST0xJTkE6QmxhZGVuIENvdW50eQorMTA6VVM6VVNBOlVOSVRFRCBTVEFURVM6Tk9SVEggQ0FST0xJTkE6QnJ1bnN3aWNrIENvdW50eQorMTE6VVM6VVNBOlVOSVRFRCBTVEFURVM6Tk9SVEggQ0FST0xJTkE6QnVuY29tYmUgQ291bnR5CisxMjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpOT1JUSCBDQVJPTElOQTpCdXJrZSBDb3VudHkKKzEzOlVTOlVTQTpVTklURUQgU1RBVEVTOk5PUlRIIENBUk9MSU5BOkNhYmFycnVzIENvdW50eQorMTQ6VVM6VVNBOlVOSVRFRCBTVEFURVM6Tk9SVEggQ0FST0xJTkE6Q2FsZHdlbGwgQ291bnR5CisxNTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpOT1JUSCBDQVJPTElOQTpDYW1kZW4gQ291bnR5CisxNjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpOT1JUSCBDQVJPTElOQTpDYXJ0ZXJldCBDb3VudHkKKzE3OlVTOlVTQTpVTklURUQgU1RBVEVTOk5PUlRIIENBUk9MSU5BOkNhc3dlbGwgQ291bnR5CisxODpVUzpVU0E6VU5JVEVEIFNUQVRFUzpOT1JUSCBDQVJPTElOQTpDYXRhd2JhIENvdW50eQorMTk6VVM6VVNBOlVOSVRFRCBTVEFURVM6Tk9SVEggQ0FST0xJTkE6Q2hhdGhhbSBDb3VudHkKKzIwOlVTOlVTQTpVTklURUQgU1RBVEVTOk5PUlRIIENBUk9MSU5BOkNoZXJva2VlIENvdW50eQorMjE6VVM6VVNBOlVOSVRFRCBTVEFURVM6Tk9SVEggQ0FST0xJTkE6Q2hvd2FuIENvdW50eQorMjI6VVM6VVNBOlVOSVRFRCBTVEFURVM6Tk9SVEggQ0FST0xJTkE6Q2xheSBDb3VudHkKKzIzOlVTOlVTQTpVTklURUQgU1RBVEVTOk5PUlRIIENBUk9MSU5BOkNsZXZlbGFuZCBDb3VudHkKKzI0OlVTOlVTQTpVTklURUQgU1RBVEVTOk5PUlRIIENBUk9MSU5BOkNvbHVtYnVzIENvdW50eQorMjU6VVM6VVNBOlVOSVRFRCBTVEFURVM6Tk9SVEggQ0FST0xJTkE6Q3JhdmVuIENvdW50eQorMjY6VVM6VVNBOlVOSVRFRCBTVEFURVM6Tk9SVEggQ0FST0xJTkE6Q3VtYmVybGFuZCBDb3VudHkKKzI3OlVTOlVTQTpVTklURUQgU1RBVEVTOk5PUlRIIENBUk9MSU5BOkN1cnJpdHVjayBDb3VudHkKKzI4OlVTOlVTQTpVTklURUQgU1RBVEVTOk5PUlRIIENBUk9MSU5BOkRhcmUgQ291bnR5CisyOTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpOT1JUSCBDQVJPTElOQTpEYXZpZHNvbiBDb3VudHkKKzMwOlVTOlVTQTpVTklURUQgU1RBVEVTOk5PUlRIIENBUk9MSU5BOkRhdmllIENvdW50eQorMzE6VVM6VVNBOlVOSVRFRCBTVEFURVM6Tk9SVEggQ0FST0xJTkE6RHVwbGluIENvdW50eQorMzI6VVM6VVNBOlVOSVRFRCBTVEFURVM6Tk9SVEggQ0FST0xJTkE6RHVyaGFtIENvdW50eQorMzM6VVM6VVNBOlVOSVRFRCBTVEFURVM6Tk9SVEggQ0FST0xJTkE6RWRnZWNvbWJlIENvdW50eQorMzQ6VVM6VVNBOlVOSVRFRCBTVEFURVM6Tk9SVEggQ0FST0xJTkE6Rm9yc3l0aCBDb3VudHkKKzM1OlVTOlVTQTpVTklURUQgU1RBVEVTOk5PUlRIIENBUk9MSU5BOkZyYW5rbGluIENvdW50eQorMzY6VVM6VVNBOlVOSVRFRCBTVEFURVM6Tk9SVEggQ0FST0xJTkE6R2FzdG9uIENvdW50eQorMzc6VVM6VVNBOlVOSVRFRCBTVEFURVM6Tk9SVEggQ0FST0xJTkE6R2F0ZXMgQ291bnR5CiszODpVUzpVU0E6VU5JVEVEIFNUQVRFUzpOT1JUSCBDQVJPTElOQTpHcmFoYW0gQ291bnR5CiszOTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpOT1JUSCBDQVJPTElOQTpHcmFudmlsbGUgQ291bnR5Cis0MDpVUzpVU0E6VU5JVEVEIFNUQVRFUzpOT1JUSCBDQVJPTElOQTpHcmVlbmUgQ291bnR5Cis0MTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpOT1JUSCBDQVJPTElOQTpHdWlsZm9yZCBDb3VudHkKKzQyOlVTOlVTQTpVTklURUQgU1RBVEVTOk5PUlRIIENBUk9MSU5BOkhhbGlmYXggQ291bnR5Cis0MzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpOT1JUSCBDQVJPTElOQTpIYXJuZXR0IENvdW50eQorNDQ6VVM6VVNBOlVOSVRFRCBTVEFURVM6Tk9SVEggQ0FST0xJTkE6SGF5d29vZCBDb3VudHkKKzQ1OlVTOlVTQTpVTklURUQgU1RBVEVTOk5PUlRIIENBUk9MSU5BOkhlbmRlcnNvbiBDb3VudHkKKzQ2OlVTOlVTQTpVTklURUQgU1RBVEVTOk5PUlRIIENBUk9MSU5BOkhlcnRmb3JkIENvdW50eQorNDc6VVM6VVNBOlVOSVRFRCBTVEFURVM6Tk9SVEggQ0FST0xJTkE6SG9rZSBDb3VudHkKKzQ4OlVTOlVTQTpVTklURUQgU1RBVEVTOk5PUlRIIENBUk9MSU5BOkh5ZGUgQ291bnR5Cis0OTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpOT1JUSCBDQVJPTElOQTpJcmVkZWxsIENvdW50eQorNTA6VVM6VVNBOlVOSVRFRCBTVEFURVM6Tk9SVEggQ0FST0xJTkE6SmFja3NvbiBDb3VudHkKKzUxOlVTOlVTQTpVTklURUQgU1RBVEVTOk5PUlRIIENBUk9MSU5BOkpvaG5zdG9uIENvdW50eQorNTI6VVM6VVNBOlVOSVRFRCBTVEFURVM6Tk9SVEggQ0FST0xJTkE6Sm9uZXMgQ291bnR5Cis1MzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpOT1JUSCBDQVJPTElOQTpMZWUgQ291bnR5Cis1NDpVUzpVU0E6VU5JVEVEIFNUQVRFUzpOT1JUSCBDQVJPTElOQTpMZW5vaXIgQ291bnR5Cis1NTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpOT1JUSCBDQVJPTElOQTpMaW5jb2xuIENvdW50eQorNTY6VVM6VVNBOlVOSVRFRCBTVEFURVM6Tk9SVEggQ0FST0xJTkE6TWFjb24gQ291bnR5Cis1NzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpOT1JUSCBDQVJPTElOQTpNYWRpc29uIENvdW50eQorNTg6VVM6VVNBOlVOSVRFRCBTVEFURVM6Tk9SVEggQ0FST0xJTkE6TWFydGluIENvdW50eQorNTk6VVM6VVNBOlVOSVRFRCBTVEFURVM6Tk9SVEggQ0FST0xJTkE6TWNEb3dlbGwgQ291bnR5Cis2MDpVUzpVU0E6VU5JVEVEIFNUQVRFUzpOT1JUSCBDQVJPTElOQTpNZWNrbGVuYnVyZyBDb3VudHkKKzYxOlVTOlVTQTpVTklURUQgU1RBVEVTOk5PUlRIIENBUk9MSU5BOk1pdGNoZWxsIENvdW50eQorNjI6VVM6VVNBOlVOSVRFRCBTVEFURVM6Tk9SVEggQ0FST0xJTkE6TW9udGdvbWVyeSBDb3VudHkKKzYzOlVTOlVTQTpVTklURUQgU1RBVEVTOk5PUlRIIENBUk9MSU5BOk1vb3JlIENvdW50eQorNjQ6VVM6VVNBOlVOSVRFRCBTVEFURVM6Tk9SVEggQ0FST0xJTkE6TmFzaCBDb3VudHkKKzY1OlVTOlVTQTpVTklURUQgU1RBVEVTOk5PUlRIIENBUk9MSU5BOk5ldyBIYW5vdmVyIENvdW50eQorNjY6VVM6VVNBOlVOSVRFRCBTVEFURVM6Tk9SVEggQ0FST0xJTkE6Tm9ydGhhbXB0b24gQ291bnR5Cis2NzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpOT1JUSCBDQVJPTElOQTpPbnNsb3cgQ291bnR5Cis2ODpVUzpVU0E6VU5JVEVEIFNUQVRFUzpOT1JUSCBDQVJPTElOQTpPcmFuZ2UgQ291bnR5Cis2OTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpOT1JUSCBDQVJPTElOQTpQYW1saWNvIENvdW50eQorNzA6VVM6VVNBOlVOSVRFRCBTVEFURVM6Tk9SVEggQ0FST0xJTkE6UGFzcXVvdGFuayBDb3VudHkKKzcxOlVTOlVTQTpVTklURUQgU1RBVEVTOk5PUlRIIENBUk9MSU5BOlBlbmRlciBDb3VudHkKKzcyOlVTOlVTQTpVTklURUQgU1RBVEVTOk5PUlRIIENBUk9MSU5BOlBlcnF1aW1hbnMgQ291bnR5Cis3MzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpOT1JUSCBDQVJPTElOQTpQZXJzb24gQ291bnR5Cis3NDpVUzpVU0E6VU5JVEVEIFNUQVRFUzpOT1JUSCBDQVJPTElOQTpQaXR0IENvdW50eQorNzU6VVM6VVNBOlVOSVRFRCBTVEFURVM6Tk9SVEggQ0FST0xJTkE6UG9sayBDb3VudHkKKzc2OlVTOlVTQTpVTklURUQgU1RBVEVTOk5PUlRIIENBUk9MSU5BOlJhbmRvbHBoIENvdW50eQorNzc6VVM6VVNBOlVOSVRFRCBTVEFURVM6Tk9SVEggQ0FST0xJTkE6UmljaG1vbmQgQ291bnR5Cis3ODpVUzpVU0E6VU5JVEVEIFNUQVRFUzpOT1JUSCBDQVJPTElOQTpSb2Jlc29uIENvdW50eQorNzk6VVM6VVNBOlVOSVRFRCBTVEFURVM6Tk9SVEggQ0FST0xJTkE6Um9ja2luZ2hhbSBDb3VudHkKKzgwOlVTOlVTQTpVTklURUQgU1RBVEVTOk5PUlRIIENBUk9MSU5BOlJvd2FuIENvdW50eQorODE6VVM6VVNBOlVOSVRFRCBTVEFURVM6Tk9SVEggQ0FST0xJTkE6UnV0aGVyZm9yZCBDb3VudHkKKzgyOlVTOlVTQTpVTklURUQgU1RBVEVTOk5PUlRIIENBUk9MSU5BOlNhbXBzb24gQ291bnR5Cis4MzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpOT1JUSCBDQVJPTElOQTpTY290bGFuZCBDb3VudHkKKzg0OlVTOlVTQTpVTklURUQgU1RBVEVTOk5PUlRIIENBUk9MSU5BOlN0YW5seSBDb3VudHkKKzg1OlVTOlVTQTpVTklURUQgU1RBVEVTOk5PUlRIIENBUk9MSU5BOlN0b2tlcyBDb3VudHkKKzg2OlVTOlVTQTpVTklURUQgU1RBVEVTOk5PUlRIIENBUk9MSU5BOlN1cnJ5IENvdW50eQorODc6VVM6VVNBOlVOSVRFRCBTVEFURVM6Tk9SVEggQ0FST0xJTkE6U3dhaW4gQ291bnR5Cis4ODpVUzpVU0E6VU5JVEVEIFNUQVRFUzpOT1JUSCBDQVJPTElOQTpUcmFuc3lsdmFuaWEgQ291bnR5Cis4OTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpOT1JUSCBDQVJPTElOQTpUeXJyZWxsIENvdW50eQorOTA6VVM6VVNBOlVOSVRFRCBTVEFURVM6Tk9SVEggQ0FST0xJTkE6VW5pb24gQ291bnR5Cis5MTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpOT1JUSCBDQVJPTElOQTpWYW5jZSBDb3VudHkKKzkyOlVTOlVTQTpVTklURUQgU1RBVEVTOk5PUlRIIENBUk9MSU5BOldha2UgQ291bnR5Cis5MzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpOT1JUSCBDQVJPTElOQTpXYXJyZW4gQ291bnR5Cis5NDpVUzpVU0E6VU5JVEVEIFNUQVRFUzpOT1JUSCBDQVJPTElOQTpXYXNoaW5ndG9uIENvdW50eQorOTU6VVM6VVNBOlVOSVRFRCBTVEFURVM6Tk9SVEggQ0FST0xJTkE6V2F0YXVnYSBDb3VudHkKKzk2OlVTOlVTQTpVTklURUQgU1RBVEVTOk5PUlRIIENBUk9MSU5BOldheW5lIENvdW50eQorOTc6VVM6VVNBOlVOSVRFRCBTVEFURVM6Tk9SVEggQ0FST0xJTkE6V2lsa2VzIENvdW50eQorOTg6VVM6VVNBOlVOSVRFRCBTVEFURVM6Tk9SVEggQ0FST0xJTkE6V2lsc29uIENvdW50eQorOTk6VVM6VVNBOlVOSVRFRCBTVEFURVM6Tk9SVEggQ0FST0xJTkE6WWFka2luIENvdW50eQorMTAwOlVTOlVTQTpVTklURUQgU1RBVEVTOk5PUlRIIENBUk9MSU5BOllhbmNleSBDb3VudHkKKzE6VVM6VVNBOlVOSVRFRCBTVEFURVM6TkVXIFlPUks6QWxiYW55IENvdW50eQorMjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpORVcgWU9SSzpBbGxlZ2FueSBDb3VudHkKKzM6VVM6VVNBOlVOSVRFRCBTVEFURVM6TkVXIFlPUks6QnJvbnggQ291bnR5Cis0OlVTOlVTQTpVTklURUQgU1RBVEVTOk5FVyBZT1JLOkJyb29tZSBDb3VudHkKKzU6VVM6VVNBOlVOSVRFRCBTVEFURVM6TkVXIFlPUks6Q2F0dGFyYXVndXMgQ291bnR5Cis2OlVTOlVTQTpVTklURUQgU1RBVEVTOk5FVyBZT1JLOkNheXVnYSBDb3VudHkKKzc6VVM6VVNBOlVOSVRFRCBTVEFURVM6TkVXIFlPUks6Q2hhdXRhdXF1YSBDb3VudHkKKzg6VVM6VVNBOlVOSVRFRCBTVEFURVM6TkVXIFlPUks6Q2hlbXVuZyBDb3VudHkKKzk6VVM6VVNBOlVOSVRFRCBTVEFURVM6TkVXIFlPUks6Q2hlbmFuZ28gQ291bnR5CisxMDpVUzpVU0E6VU5JVEVEIFNUQVRFUzpORVcgWU9SSzpDbGludG9uIENvdW50eQorMTE6VVM6VVNBOlVOSVRFRCBTVEFURVM6TkVXIFlPUks6Q29sdW1iaWEgQ291bnR5CisxMjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpORVcgWU9SSzpDb3J0bGFuZCBDb3VudHkKKzEzOlVTOlVTQTpVTklURUQgU1RBVEVTOk5FVyBZT1JLOkRlbGF3YXJlIENvdW50eQorMTQ6VVM6VVNBOlVOSVRFRCBTVEFURVM6TkVXIFlPUks6RHV0Y2hlc3MgQ291bnR5CisxNTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpORVcgWU9SSzpFcmllIENvdW50eQorMTY6VVM6VVNBOlVOSVRFRCBTVEFURVM6TkVXIFlPUks6RXNzZXggQ291bnR5CisxNzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpORVcgWU9SSzpGcmFua2xpbiBDb3VudHkKKzE4OlVTOlVTQTpVTklURUQgU1RBVEVTOk5FVyBZT1JLOkZ1bHRvbiBDb3VudHkKKzE5OlVTOlVTQTpVTklURUQgU1RBVEVTOk5FVyBZT1JLOkdlbmVzZWUgQ291bnR5CisyMDpVUzpVU0E6VU5JVEVEIFNUQVRFUzpORVcgWU9SSzpHcmVlbmUgQ291bnR5CisyMTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpORVcgWU9SSzpIYW1pbHRvbiBDb3VudHkKKzIyOlVTOlVTQTpVTklURUQgU1RBVEVTOk5FVyBZT1JLOkhlcmtpbWVyIENvdW50eQorMjM6VVM6VVNBOlVOSVRFRCBTVEFURVM6TkVXIFlPUks6SmVmZmVyc29uIENvdW50eQorMjQ6VVM6VVNBOlVOSVRFRCBTVEFURVM6TkVXIFlPUks6S2luZ3MgQ291bnR5CisyNTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpORVcgWU9SSzpMZXdpcyBDb3VudHkKKzI2OlVTOlVTQTpVTklURUQgU1RBVEVTOk5FVyBZT1JLOkxpdmluZ3N0b24gQ291bnR5CisyNzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpORVcgWU9SSzpNYWRpc29uIENvdW50eQorMjg6VVM6VVNBOlVOSVRFRCBTVEFURVM6TkVXIFlPUks6TW9ucm9lIENvdW50eQorMjk6VVM6VVNBOlVOSVRFRCBTVEFURVM6TkVXIFlPUks6TW9udGdvbWVyeSBDb3VudHkKKzMwOlVTOlVTQTpVTklURUQgU1RBVEVTOk5FVyBZT1JLOk5hc3NhdSBDb3VudHkKKzMxOlVTOlVTQTpVTklURUQgU1RBVEVTOk5FVyBZT1JLOk5ldyBZb3JrIENvdW50eQorMzI6VVM6VVNBOlVOSVRFRCBTVEFURVM6TkVXIFlPUks6TmlhZ2FyYSBDb3VudHkKKzMzOlVTOlVTQTpVTklURUQgU1RBVEVTOk5FVyBZT1JLOk9uZWlkYSBDb3VudHkKKzM0OlVTOlVTQTpVTklURUQgU1RBVEVTOk5FVyBZT1JLOk9ub25kYWdhIENvdW50eQorMzU6VVM6VVNBOlVOSVRFRCBTVEFURVM6TkVXIFlPUks6T250YXJpbyBDb3VudHkKKzM2OlVTOlVTQTpVTklURUQgU1RBVEVTOk5FVyBZT1JLOk9yYW5nZSBDb3VudHkKKzM3OlVTOlVTQTpVTklURUQgU1RBVEVTOk5FVyBZT1JLOk9ybGVhbnMgQ291bnR5CiszODpVUzpVU0E6VU5JVEVEIFNUQVRFUzpORVcgWU9SSzpPc3dlZ28gQ291bnR5CiszOTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpORVcgWU9SSzpPdHNlZ28gQ291bnR5Cis0MDpVUzpVU0E6VU5JVEVEIFNUQVRFUzpORVcgWU9SSzpQdXRuYW0gQ291bnR5Cis0MTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpORVcgWU9SSzpRdWVlbnMgQ291bnR5Cis0MjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpORVcgWU9SSzpSZW5zc2VsYWVyIENvdW50eQorNDM6VVM6VVNBOlVOSVRFRCBTVEFURVM6TkVXIFlPUks6UmljaG1vbmQgQ291bnR5Cis0NDpVUzpVU0E6VU5JVEVEIFNUQVRFUzpORVcgWU9SSzpSb2NrbGFuZCBDb3VudHkKKzQ1OlVTOlVTQTpVTklURUQgU1RBVEVTOk5FVyBZT1JLOlNhcmF0b2dhIENvdW50eQorNDY6VVM6VVNBOlVOSVRFRCBTVEFURVM6TkVXIFlPUks6U2NoZW5lY3RhZHkgQ291bnR5Cis0NzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpORVcgWU9SSzpTY2hvaGFyaWUgQ291bnR5Cis0ODpVUzpVU0E6VU5JVEVEIFNUQVRFUzpORVcgWU9SSzpTY2h1eWxlciBDb3VudHkKKzQ5OlVTOlVTQTpVTklURUQgU1RBVEVTOk5FVyBZT1JLOlNlbmVjYSBDb3VudHkKKzUwOlVTOlVTQTpVTklURUQgU1RBVEVTOk5FVyBZT1JLOlN0LiBMYXdyZW5jZSBDb3VudHkKKzUxOlVTOlVTQTpVTklURUQgU1RBVEVTOk5FVyBZT1JLOlN0ZXViZW4gQ291bnR5Cis1MjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpORVcgWU9SSzpTdWZmb2xrIENvdW50eQorNTM6VVM6VVNBOlVOSVRFRCBTVEFURVM6TkVXIFlPUks6U3VsbGl2YW4gQ291bnR5Cis1NDpVUzpVU0E6VU5JVEVEIFNUQVRFUzpORVcgWU9SSzpUaW9nYSBDb3VudHkKKzU1OlVTOlVTQTpVTklURUQgU1RBVEVTOk5FVyBZT1JLOlRvbXBraW5zIENvdW50eQorNTY6VVM6VVNBOlVOSVRFRCBTVEFURVM6TkVXIFlPUks6VWxzdGVyIENvdW50eQorNTc6VVM6VVNBOlVOSVRFRCBTVEFURVM6TkVXIFlPUks6V2FycmVuIENvdW50eQorNTg6VVM6VVNBOlVOSVRFRCBTVEFURVM6TkVXIFlPUks6V2FzaGluZ3RvbiBDb3VudHkKKzU5OlVTOlVTQTpVTklURUQgU1RBVEVTOk5FVyBZT1JLOldheW5lIENvdW50eQorNjA6VVM6VVNBOlVOSVRFRCBTVEFURVM6TkVXIFlPUks6V2VzdGNoZXN0ZXIgQ291bnR5Cis2MTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpORVcgWU9SSzpXeW9taW5nIENvdW50eQorNjI6VVM6VVNBOlVOSVRFRCBTVEFURVM6TkVXIFlPUks6WWF0ZXMgQ291bnR5CisxOlVTOlVTQTpVTklURUQgU1RBVEVTOlNPVVRIIERBS09UQTpBdXJvcmEgQ291bnR5CisyOlVTOlVTQTpVTklURUQgU1RBVEVTOlNPVVRIIERBS09UQTpCZWFkbGUgQ291bnR5CiszOlVTOlVTQTpVTklURUQgU1RBVEVTOlNPVVRIIERBS09UQTpCZW5uZXR0IENvdW50eQorNDpVUzpVU0E6VU5JVEVEIFNUQVRFUzpTT1VUSCBEQUtPVEE6Qm9uIEhvbW1lIENvdW50eQorNTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpTT1VUSCBEQUtPVEE6QnJvb2tpbmdzIENvdW50eQorNjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpTT1VUSCBEQUtPVEE6QnJvd24gQ291bnR5Cis3OlVTOlVTQTpVTklURUQgU1RBVEVTOlNPVVRIIERBS09UQTpCcnVsZSBDb3VudHkKKzg6VVM6VVNBOlVOSVRFRCBTVEFURVM6U09VVEggREFLT1RBOkJ1ZmZhbG8gQ291bnR5Cis5OlVTOlVTQTpVTklURUQgU1RBVEVTOlNPVVRIIERBS09UQTpCdXR0ZSBDb3VudHkKKzEwOlVTOlVTQTpVTklURUQgU1RBVEVTOlNPVVRIIERBS09UQTpDYW1wYmVsbCBDb3VudHkKKzExOlVTOlVTQTpVTklURUQgU1RBVEVTOlNPVVRIIERBS09UQTpDaGFybGVzIE1peCBDb3VudHkKKzEyOlVTOlVTQTpVTklURUQgU1RBVEVTOlNPVVRIIERBS09UQTpDbGFyayBDb3VudHkKKzEzOlVTOlVTQTpVTklURUQgU1RBVEVTOlNPVVRIIERBS09UQTpDbGF5IENvdW50eQorMTQ6VVM6VVNBOlVOSVRFRCBTVEFURVM6U09VVEggREFLT1RBOkNvZGluZ3RvbiBDb3VudHkKKzE1OlVTOlVTQTpVTklURUQgU1RBVEVTOlNPVVRIIERBS09UQTpDb3Jzb24gQ291bnR5CisxNjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpTT1VUSCBEQUtPVEE6Q3VzdGVyIENvdW50eQorMTc6VVM6VVNBOlVOSVRFRCBTVEFURVM6U09VVEggREFLT1RBOkRhdmlzb24gQ291bnR5CisxODpVUzpVU0E6VU5JVEVEIFNUQVRFUzpTT1VUSCBEQUtPVEE6RGF5IENvdW50eQorMTk6VVM6VVNBOlVOSVRFRCBTVEFURVM6U09VVEggREFLT1RBOkRldWVsIENvdW50eQorMjA6VVM6VVNBOlVOSVRFRCBTVEFURVM6U09VVEggREFLT1RBOkRld2V5IENvdW50eQorMjE6VVM6VVNBOlVOSVRFRCBTVEFURVM6U09VVEggREFLT1RBOkRvdWdsYXMgQ291bnR5CisyMjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpTT1VUSCBEQUtPVEE6RWRtdW5kcyBDb3VudHkKKzIzOlVTOlVTQTpVTklURUQgU1RBVEVTOlNPVVRIIERBS09UQTpGYWxsIFJpdmVyIENvdW50eQorMjQ6VVM6VVNBOlVOSVRFRCBTVEFURVM6U09VVEggREFLT1RBOkZhdWxrIENvdW50eQorMjU6VVM6VVNBOlVOSVRFRCBTVEFURVM6U09VVEggREFLT1RBOkdyYW50IENvdW50eQorMjY6VVM6VVNBOlVOSVRFRCBTVEFURVM6U09VVEggREFLT1RBOkdyZWdvcnkgQ291bnR5CisyNzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpTT1VUSCBEQUtPVEE6SGFha29uIENvdW50eQorMjg6VVM6VVNBOlVOSVRFRCBTVEFURVM6U09VVEggREFLT1RBOkhhbWxpbiBDb3VudHkKKzI5OlVTOlVTQTpVTklURUQgU1RBVEVTOlNPVVRIIERBS09UQTpIYW5kIENvdW50eQorMzA6VVM6VVNBOlVOSVRFRCBTVEFURVM6U09VVEggREFLT1RBOkhhbnNvbiBDb3VudHkKKzMxOlVTOlVTQTpVTklURUQgU1RBVEVTOlNPVVRIIERBS09UQTpIYXJkaW5nIENvdW50eQorMzI6VVM6VVNBOlVOSVRFRCBTVEFURVM6U09VVEggREFLT1RBOkh1Z2hlcyBDb3VudHkKKzMzOlVTOlVTQTpVTklURUQgU1RBVEVTOlNPVVRIIERBS09UQTpIdXRjaGluc29uIENvdW50eQorMzQ6VVM6VVNBOlVOSVRFRCBTVEFURVM6U09VVEggREFLT1RBOkh5ZGUgQ291bnR5CiszNTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpTT1VUSCBEQUtPVEE6SmFja3NvbiBDb3VudHkKKzM2OlVTOlVTQTpVTklURUQgU1RBVEVTOlNPVVRIIERBS09UQTpKZXJhdWxkIENvdW50eQorMzc6VVM6VVNBOlVOSVRFRCBTVEFURVM6U09VVEggREFLT1RBOkpvbmVzIENvdW50eQorMzg6VVM6VVNBOlVOSVRFRCBTVEFURVM6U09VVEggREFLT1RBOktpbmdzYnVyeSBDb3VudHkKKzM5OlVTOlVTQTpVTklURUQgU1RBVEVTOlNPVVRIIERBS09UQTpMYWtlIENvdW50eQorNDA6VVM6VVNBOlVOSVRFRCBTVEFURVM6U09VVEggREFLT1RBOkxhd3JlbmNlIENvdW50eQorNDE6VVM6VVNBOlVOSVRFRCBTVEFURVM6U09VVEggREFLT1RBOkxpbmNvbG4gQ291bnR5Cis0MjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpTT1VUSCBEQUtPVEE6THltYW4gQ291bnR5Cis0MzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpTT1VUSCBEQUtPVEE6TWFyc2hhbGwgQ291bnR5Cis0NDpVUzpVU0E6VU5JVEVEIFNUQVRFUzpTT1VUSCBEQUtPVEE6TWNDb29rIENvdW50eQorNDU6VVM6VVNBOlVOSVRFRCBTVEFURVM6U09VVEggREFLT1RBOk1jUGhlcnNvbiBDb3VudHkKKzQ2OlVTOlVTQTpVTklURUQgU1RBVEVTOlNPVVRIIERBS09UQTpNZWFkZSBDb3VudHkKKzQ3OlVTOlVTQTpVTklURUQgU1RBVEVTOlNPVVRIIERBS09UQTpNZWxsZXR0ZSBDb3VudHkKKzQ4OlVTOlVTQTpVTklURUQgU1RBVEVTOlNPVVRIIERBS09UQTpNaW5lciBDb3VudHkKKzQ5OlVTOlVTQTpVTklURUQgU1RBVEVTOlNPVVRIIERBS09UQTpNaW5uZWhhaGEgQ291bnR5Cis1MDpVUzpVU0E6VU5JVEVEIFNUQVRFUzpTT1VUSCBEQUtPVEE6TW9vZHkgQ291bnR5Cis1MTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpTT1VUSCBEQUtPVEE6UGVubmluZ3RvbiBDb3VudHkKKzUyOlVTOlVTQTpVTklURUQgU1RBVEVTOlNPVVRIIERBS09UQTpQZXJraW5zIENvdW50eQorNTM6VVM6VVNBOlVOSVRFRCBTVEFURVM6U09VVEggREFLT1RBOlBvdHRlciBDb3VudHkKKzU0OlVTOlVTQTpVTklURUQgU1RBVEVTOlNPVVRIIERBS09UQTpSb2JlcnRzIENvdW50eQorNTU6VVM6VVNBOlVOSVRFRCBTVEFURVM6U09VVEggREFLT1RBOlNhbmJvcm4gQ291bnR5Cis1NjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpTT1VUSCBEQUtPVEE6U2hhbm5vbiBDb3VudHkKKzU3OlVTOlVTQTpVTklURUQgU1RBVEVTOlNPVVRIIERBS09UQTpTcGluayBDb3VudHkKKzU4OlVTOlVTQTpVTklURUQgU1RBVEVTOlNPVVRIIERBS09UQTpTdGFubGV5IENvdW50eQorNTk6VVM6VVNBOlVOSVRFRCBTVEFURVM6U09VVEggREFLT1RBOlN1bGx5IENvdW50eQorNjA6VVM6VVNBOlVOSVRFRCBTVEFURVM6U09VVEggREFLT1RBOlRvZGQgQ291bnR5Cis2MTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpTT1VUSCBEQUtPVEE6VHJpcHAgQ291bnR5Cis2MjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpTT1VUSCBEQUtPVEE6VHVybmVyIENvdW50eQorNjM6VVM6VVNBOlVOSVRFRCBTVEFURVM6U09VVEggREFLT1RBOlVuaW9uIENvdW50eQorNjQ6VVM6VVNBOlVOSVRFRCBTVEFURVM6U09VVEggREFLT1RBOldhbHdvcnRoIENvdW50eQorNjU6VVM6VVNBOlVOSVRFRCBTVEFURVM6U09VVEggREFLT1RBOllhbmt0b24gQ291bnR5Cis2NjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpTT1VUSCBEQUtPVEE6WmllYmFjaCBDb3VudHkKKzE6VVM6VVNBOlVOSVRFRCBTVEFURVM6V0VTVCBWSVJHSU5JQTpCYXJib3VyIENvdW50eQorMjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpXRVNUIFZJUkdJTklBOkJlcmtlbGV5IENvdW50eQorMzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpXRVNUIFZJUkdJTklBOkJvb25lIENvdW50eQorNDpVUzpVU0E6VU5JVEVEIFNUQVRFUzpXRVNUIFZJUkdJTklBOkJyYXh0b24gQ291bnR5Cis1OlVTOlVTQTpVTklURUQgU1RBVEVTOldFU1QgVklSR0lOSUE6QnJvb2tlIENvdW50eQorNjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpXRVNUIFZJUkdJTklBOkNhYmVsbCBDb3VudHkKKzc6VVM6VVNBOlVOSVRFRCBTVEFURVM6V0VTVCBWSVJHSU5JQTpDYWxob3VuIENvdW50eQorODpVUzpVU0E6VU5JVEVEIFNUQVRFUzpXRVNUIFZJUkdJTklBOkNsYXkgQ291bnR5Cis5OlVTOlVTQTpVTklURUQgU1RBVEVTOldFU1QgVklSR0lOSUE6RG9kZHJpZGdlIENvdW50eQorMTA6VVM6VVNBOlVOSVRFRCBTVEFURVM6V0VTVCBWSVJHSU5JQTpGYXlldHRlIENvdW50eQorMTE6VVM6VVNBOlVOSVRFRCBTVEFURVM6V0VTVCBWSVJHSU5JQTpHaWxtZXIgQ291bnR5CisxMjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpXRVNUIFZJUkdJTklBOkdyYW50IENvdW50eQorMTM6VVM6VVNBOlVOSVRFRCBTVEFURVM6V0VTVCBWSVJHSU5JQTpHcmVlbmJyaWVyIENvdW50eQorMTQ6VVM6VVNBOlVOSVRFRCBTVEFURVM6V0VTVCBWSVJHSU5JQTpIYW1wc2hpcmUgQ291bnR5CisxNTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpXRVNUIFZJUkdJTklBOkhhbmNvY2sgQ291bnR5CisxNjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpXRVNUIFZJUkdJTklBOkhhcmR5IENvdW50eQorMTc6VVM6VVNBOlVOSVRFRCBTVEFURVM6V0VTVCBWSVJHSU5JQTpIYXJyaXNvbiBDb3VudHkKKzE4OlVTOlVTQTpVTklURUQgU1RBVEVTOldFU1QgVklSR0lOSUE6SmFja3NvbiBDb3VudHkKKzE5OlVTOlVTQTpVTklURUQgU1RBVEVTOldFU1QgVklSR0lOSUE6SmVmZmVyc29uIENvdW50eQorMjA6VVM6VVNBOlVOSVRFRCBTVEFURVM6V0VTVCBWSVJHSU5JQTpLYW5hd2hhIENvdW50eQorMjE6VVM6VVNBOlVOSVRFRCBTVEFURVM6V0VTVCBWSVJHSU5JQTpMZXdpcyBDb3VudHkKKzIyOlVTOlVTQTpVTklURUQgU1RBVEVTOldFU1QgVklSR0lOSUE6TGluY29sbiBDb3VudHkKKzIzOlVTOlVTQTpVTklURUQgU1RBVEVTOldFU1QgVklSR0lOSUE6TG9nYW4gQ291bnR5CisyNDpVUzpVU0E6VU5JVEVEIFNUQVRFUzpXRVNUIFZJUkdJTklBOk1hcmlvbiBDb3VudHkKKzI1OlVTOlVTQTpVTklURUQgU1RBVEVTOldFU1QgVklSR0lOSUE6TWFyc2hhbGwgQ291bnR5CisyNjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpXRVNUIFZJUkdJTklBOk1hc29uIENvdW50eQorMjc6VVM6VVNBOlVOSVRFRCBTVEFURVM6V0VTVCBWSVJHSU5JQTpNY0Rvd2VsbCBDb3VudHkKKzI4OlVTOlVTQTpVTklURUQgU1RBVEVTOldFU1QgVklSR0lOSUE6TWVyY2VyIENvdW50eQorMjk6VVM6VVNBOlVOSVRFRCBTVEFURVM6V0VTVCBWSVJHSU5JQTpNaW5lcmFsIENvdW50eQorMzA6VVM6VVNBOlVOSVRFRCBTVEFURVM6V0VTVCBWSVJHSU5JQTpNaW5nbyBDb3VudHkKKzMxOlVTOlVTQTpVTklURUQgU1RBVEVTOldFU1QgVklSR0lOSUE6TW9ub25nYWxpYSBDb3VudHkKKzMyOlVTOlVTQTpVTklURUQgU1RBVEVTOldFU1QgVklSR0lOSUE6TW9ucm9lIENvdW50eQorMzM6VVM6VVNBOlVOSVRFRCBTVEFURVM6V0VTVCBWSVJHSU5JQTpNb3JnYW4gQ291bnR5CiszNDpVUzpVU0E6VU5JVEVEIFNUQVRFUzpXRVNUIFZJUkdJTklBOk5pY2hvbGFzIENvdW50eQorMzU6VVM6VVNBOlVOSVRFRCBTVEFURVM6V0VTVCBWSVJHSU5JQTpPaGlvIENvdW50eQorMzY6VVM6VVNBOlVOSVRFRCBTVEFURVM6V0VTVCBWSVJHSU5JQTpQZW5kbGV0b24gQ291bnR5CiszNzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpXRVNUIFZJUkdJTklBOlBsZWFzYW50cyBDb3VudHkKKzM4OlVTOlVTQTpVTklURUQgU1RBVEVTOldFU1QgVklSR0lOSUE6UG9jYWhvbnRhcyBDb3VudHkKKzM5OlVTOlVTQTpVTklURUQgU1RBVEVTOldFU1QgVklSR0lOSUE6UHJlc3RvbiBDb3VudHkKKzQwOlVTOlVTQTpVTklURUQgU1RBVEVTOldFU1QgVklSR0lOSUE6UHV0bmFtIENvdW50eQorNDE6VVM6VVNBOlVOSVRFRCBTVEFURVM6V0VTVCBWSVJHSU5JQTpSYWxlaWdoIENvdW50eQorNDI6VVM6VVNBOlVOSVRFRCBTVEFURVM6V0VTVCBWSVJHSU5JQTpSYW5kb2xwaCBDb3VudHkKKzQzOlVTOlVTQTpVTklURUQgU1RBVEVTOldFU1QgVklSR0lOSUE6Uml0Y2hpZSBDb3VudHkKKzQ0OlVTOlVTQTpVTklURUQgU1RBVEVTOldFU1QgVklSR0lOSUE6Um9hbmUgQ291bnR5Cis0NTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpXRVNUIFZJUkdJTklBOlN1bW1lcnMgQ291bnR5Cis0NjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpXRVNUIFZJUkdJTklBOlRheWxvciBDb3VudHkKKzQ3OlVTOlVTQTpVTklURUQgU1RBVEVTOldFU1QgVklSR0lOSUE6VHVja2VyIENvdW50eQorNDg6VVM6VVNBOlVOSVRFRCBTVEFURVM6V0VTVCBWSVJHSU5JQTpUeWxlciBDb3VudHkKKzQ5OlVTOlVTQTpVTklURUQgU1RBVEVTOldFU1QgVklSR0lOSUE6VXBzaHVyIENvdW50eQorNTA6VVM6VVNBOlVOSVRFRCBTVEFURVM6V0VTVCBWSVJHSU5JQTpXYXluZSBDb3VudHkKKzUxOlVTOlVTQTpVTklURUQgU1RBVEVTOldFU1QgVklSR0lOSUE6V2Vic3RlciBDb3VudHkKKzUyOlVTOlVTQTpVTklURUQgU1RBVEVTOldFU1QgVklSR0lOSUE6V2V0emVsIENvdW50eQorNTM6VVM6VVNBOlVOSVRFRCBTVEFURVM6V0VTVCBWSVJHSU5JQTpXaXJ0IENvdW50eQorNTQ6VVM6VVNBOlVOSVRFRCBTVEFURVM6V0VTVCBWSVJHSU5JQTpXb29kIENvdW50eQorNTU6VVM6VVNBOlVOSVRFRCBTVEFURVM6V0VTVCBWSVJHSU5JQTpXeW9taW5nIENvdW50eQorMTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpMT1VJU0lBTkE6QWNhZGlhIFBhcmlzaAorMjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpMT1VJU0lBTkE6QWxsZW4gUGFyaXNoCiszOlVTOlVTQTpVTklURUQgU1RBVEVTOkxPVUlTSUFOQTpBc2NlbnNpb24gUGFyaXNoCis0OlVTOlVTQTpVTklURUQgU1RBVEVTOkxPVUlTSUFOQTpBc3N1bXB0aW9uIFBhcmlzaAorNTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpMT1VJU0lBTkE6QXZveWVsbGVzIFBhcmlzaAorNjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpMT1VJU0lBTkE6QmVhdXJlZ2FyZCBQYXJpc2gKKzc6VVM6VVNBOlVOSVRFRCBTVEFURVM6TE9VSVNJQU5BOkJpZW52aWxsZSBQYXJpc2gKKzg6VVM6VVNBOlVOSVRFRCBTVEFURVM6TE9VSVNJQU5BOkJvc3NpZXIgUGFyaXNoCis5OlVTOlVTQTpVTklURUQgU1RBVEVTOkxPVUlTSUFOQTpDYWRkbyBQYXJpc2gKKzEwOlVTOlVTQTpVTklURUQgU1RBVEVTOkxPVUlTSUFOQTpDYWxjYXNpZXUgUGFyaXNoCisxMTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpMT1VJU0lBTkE6Q2FsZHdlbGwgUGFyaXNoCisxMjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpMT1VJU0lBTkE6Q2FtZXJvbiBQYXJpc2gKKzEzOlVTOlVTQTpVTklURUQgU1RBVEVTOkxPVUlTSUFOQTpDYXRhaG91bGEgUGFyaXNoCisxNDpVUzpVU0E6VU5JVEVEIFNUQVRFUzpMT1VJU0lBTkE6Q2xhaWJvcm5lIFBhcmlzaAorMTU6VVM6VVNBOlVOSVRFRCBTVEFURVM6TE9VSVNJQU5BOkNvbmNvcmRpYSBQYXJpc2gKKzE2OlVTOlVTQTpVTklURUQgU1RBVEVTOkxPVUlTSUFOQTpEZSBTb3RvIFBhcmlzaAorMTc6VVM6VVNBOlVOSVRFRCBTVEFURVM6TE9VSVNJQU5BOkVhc3QgQmF0b24gUm91Z2UgUGFyaXNoCisxODpVUzpVU0E6VU5JVEVEIFNUQVRFUzpMT1VJU0lBTkE6RWFzdCBDYXJyb2xsIFBhcmlzaAorMTk6VVM6VVNBOlVOSVRFRCBTVEFURVM6TE9VSVNJQU5BOkVhc3QgRmVsaWNpYW5hIFBhcmlzaAorMjA6VVM6VVNBOlVOSVRFRCBTVEFURVM6TE9VSVNJQU5BOkV2YW5nZWxpbmUgUGFyaXNoCisyMTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpMT1VJU0lBTkE6RnJhbmtsaW4gUGFyaXNoCisyMjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpMT1VJU0lBTkE6R3JhbnQgUGFyaXNoCisyMzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpMT1VJU0lBTkE6SWJlcmlhIFBhcmlzaAorMjQ6VVM6VVNBOlVOSVRFRCBTVEFURVM6TE9VSVNJQU5BOkliZXJ2aWxsZSBQYXJpc2gKKzI1OlVTOlVTQTpVTklURUQgU1RBVEVTOkxPVUlTSUFOQTpKYWNrc29uIFBhcmlzaAorMjY6VVM6VVNBOlVOSVRFRCBTVEFURVM6TE9VSVNJQU5BOkplZmZlcnNvbiBEYXZpcyBQYXJpc2gKKzI3OlVTOlVTQTpVTklURUQgU1RBVEVTOkxPVUlTSUFOQTpKZWZmZXJzb24gUGFyaXNoCisyODpVUzpVU0E6VU5JVEVEIFNUQVRFUzpMT1VJU0lBTkE6TGEgU2FsbGUgUGFyaXNoCisyOTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpMT1VJU0lBTkE6TGFmYXlldHRlIFBhcmlzaAorMzA6VVM6VVNBOlVOSVRFRCBTVEFURVM6TE9VSVNJQU5BOkxhZm91cmNoZSBQYXJpc2gKKzMxOlVTOlVTQTpVTklURUQgU1RBVEVTOkxPVUlTSUFOQTpMaW5jb2xuIFBhcmlzaAorMzI6VVM6VVNBOlVOSVRFRCBTVEFURVM6TE9VSVNJQU5BOkxpdmluZ3N0b24gUGFyaXNoCiszMzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpMT1VJU0lBTkE6TWFkaXNvbiBQYXJpc2gKKzM0OlVTOlVTQTpVTklURUQgU1RBVEVTOkxPVUlTSUFOQTpNb3JlaG91c2UgUGFyaXNoCiszNTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpMT1VJU0lBTkE6TmF0Y2hpdG9jaGVzIFBhcmlzaAorMzY6VVM6VVNBOlVOSVRFRCBTVEFURVM6TE9VSVNJQU5BOk9ybGVhbnMgUGFyaXNoCiszNzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpMT1VJU0lBTkE6T3VhY2hpdGEgUGFyaXNoCiszODpVUzpVU0E6VU5JVEVEIFNUQVRFUzpMT1VJU0lBTkE6UGxhcXVlbWluZXMgUGFyaXNoCiszOTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpMT1VJU0lBTkE6UG9pbnRlIENvdXBlZSBQYXJpc2gKKzQwOlVTOlVTQTpVTklURUQgU1RBVEVTOkxPVUlTSUFOQTpSYXBpZGVzIFBhcmlzaAorNDE6VVM6VVNBOlVOSVRFRCBTVEFURVM6TE9VSVNJQU5BOlJlZCBSaXZlciBQYXJpc2gKKzQyOlVTOlVTQTpVTklURUQgU1RBVEVTOkxPVUlTSUFOQTpSaWNobGFuZCBQYXJpc2gKKzQzOlVTOlVTQTpVTklURUQgU1RBVEVTOkxPVUlTSUFOQTpTYWJpbmUgUGFyaXNoCis0NDpVUzpVU0E6VU5JVEVEIFNUQVRFUzpMT1VJU0lBTkE6U3QuIEJlcm5hcmQgUGFyaXNoCis0NTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpMT1VJU0lBTkE6U3QuIENoYXJsZXMgUGFyaXNoCis0NjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpMT1VJU0lBTkE6U3QuIEhlbGVuYSBQYXJpc2gKKzQ3OlVTOlVTQTpVTklURUQgU1RBVEVTOkxPVUlTSUFOQTpTdC4gSmFtZXMgUGFyaXNoCis0ODpVUzpVU0E6VU5JVEVEIFNUQVRFUzpMT1VJU0lBTkE6U3QuIEpvaG4gdGhlIEJhcHRpc3QgUGFyaXNoCis0OTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpMT1VJU0lBTkE6U3QuIExhbmRyeSBQYXJpc2gKKzUwOlVTOlVTQTpVTklURUQgU1RBVEVTOkxPVUlTSUFOQTpTdC4gTWFydGluIFBhcmlzaAorNTE6VVM6VVNBOlVOSVRFRCBTVEFURVM6TE9VSVNJQU5BOlN0LiBNYXJ5IFBhcmlzaAorNTI6VVM6VVNBOlVOSVRFRCBTVEFURVM6TE9VSVNJQU5BOlN0LiBUYW1tYW55IFBhcmlzaAorNTM6VVM6VVNBOlVOSVRFRCBTVEFURVM6TE9VSVNJQU5BOlRhbmdpcGFob2EgUGFyaXNoCis1NDpVUzpVU0E6VU5JVEVEIFNUQVRFUzpMT1VJU0lBTkE6VGVuc2FzIFBhcmlzaAorNTU6VVM6VVNBOlVOSVRFRCBTVEFURVM6TE9VSVNJQU5BOlRlcnJlYm9ubmUgUGFyaXNoCis1NjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpMT1VJU0lBTkE6VW5pb24gUGFyaXNoCis1NzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpMT1VJU0lBTkE6VmVybWlsaW9uIFBhcmlzaAorNTg6VVM6VVNBOlVOSVRFRCBTVEFURVM6TE9VSVNJQU5BOlZlcm5vbiBQYXJpc2gKKzU5OlVTOlVTQTpVTklURUQgU1RBVEVTOkxPVUlTSUFOQTpXYXNoaW5ndG9uIFBhcmlzaAorNjA6VVM6VVNBOlVOSVRFRCBTVEFURVM6TE9VSVNJQU5BOldlYnN0ZXIgUGFyaXNoCis2MTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpMT1VJU0lBTkE6V2VzdCBCYXRvbiBSb3VnZSBQYXJpc2gKKzYyOlVTOlVTQTpVTklURUQgU1RBVEVTOkxPVUlTSUFOQTpXZXN0IENhcnJvbGwgUGFyaXNoCis2MzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpMT1VJU0lBTkE6V2VzdCBGZWxpY2lhbmEgUGFyaXNoCis2NDpVUzpVU0E6VU5JVEVEIFNUQVRFUzpMT1VJU0lBTkE6V2lubiBQYXJpc2gKKzE6VVM6VVNBOlVOSVRFRCBTVEFURVM6VEVOTkVTU0VFOkFuZGVyc29uIENvdW50eQorMjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpURU5ORVNTRUU6QmVkZm9yZCBDb3VudHkKKzM6VVM6VVNBOlVOSVRFRCBTVEFURVM6VEVOTkVTU0VFOkJlbnRvbiBDb3VudHkKKzQ6VVM6VVNBOlVOSVRFRCBTVEFURVM6VEVOTkVTU0VFOkJsZWRzb2UgQ291bnR5Cis1OlVTOlVTQTpVTklURUQgU1RBVEVTOlRFTk5FU1NFRTpCbG91bnQgQ291bnR5Cis2OlVTOlVTQTpVTklURUQgU1RBVEVTOlRFTk5FU1NFRTpCcmFkbGV5IENvdW50eQorNzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpURU5ORVNTRUU6Q2FtcGJlbGwgQ291bnR5Cis4OlVTOlVTQTpVTklURUQgU1RBVEVTOlRFTk5FU1NFRTpDYW5ub24gQ291bnR5Cis5OlVTOlVTQTpVTklURUQgU1RBVEVTOlRFTk5FU1NFRTpDYXJyb2xsIENvdW50eQorMTA6VVM6VVNBOlVOSVRFRCBTVEFURVM6VEVOTkVTU0VFOkNhcnRlciBDb3VudHkKKzExOlVTOlVTQTpVTklURUQgU1RBVEVTOlRFTk5FU1NFRTpDaGVhdGhhbSBDb3VudHkKKzEyOlVTOlVTQTpVTklURUQgU1RBVEVTOlRFTk5FU1NFRTpDaGVzdGVyIENvdW50eQorMTM6VVM6VVNBOlVOSVRFRCBTVEFURVM6VEVOTkVTU0VFOkNsYWlib3JuZSBDb3VudHkKKzE0OlVTOlVTQTpVTklURUQgU1RBVEVTOlRFTk5FU1NFRTpDbGF5IENvdW50eQorMTU6VVM6VVNBOlVOSVRFRCBTVEFURVM6VEVOTkVTU0VFOkNvY2tlIENvdW50eQorMTY6VVM6VVNBOlVOSVRFRCBTVEFURVM6VEVOTkVTU0VFOkNvZmZlZSBDb3VudHkKKzE3OlVTOlVTQTpVTklURUQgU1RBVEVTOlRFTk5FU1NFRTpDcm9ja2V0dCBDb3VudHkKKzE4OlVTOlVTQTpVTklURUQgU1RBVEVTOlRFTk5FU1NFRTpDdW1iZXJsYW5kIENvdW50eQorMTk6VVM6VVNBOlVOSVRFRCBTVEFURVM6VEVOTkVTU0VFOkRhdmlkc29uIENvdW50eQorMjA6VVM6VVNBOlVOSVRFRCBTVEFURVM6VEVOTkVTU0VFOkRlS2FsYiBDb3VudHkKKzIxOlVTOlVTQTpVTklURUQgU1RBVEVTOlRFTk5FU1NFRTpEZWNhdHVyIENvdW50eQorMjI6VVM6VVNBOlVOSVRFRCBTVEFURVM6VEVOTkVTU0VFOkRpY2tzb24gQ291bnR5CisyMzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpURU5ORVNTRUU6RHllciBDb3VudHkKKzI0OlVTOlVTQTpVTklURUQgU1RBVEVTOlRFTk5FU1NFRTpGYXlldHRlIENvdW50eQorMjU6VVM6VVNBOlVOSVRFRCBTVEFURVM6VEVOTkVTU0VFOkZlbnRyZXNzIENvdW50eQorMjY6VVM6VVNBOlVOSVRFRCBTVEFURVM6VEVOTkVTU0VFOkZyYW5rbGluIENvdW50eQorMjc6VVM6VVNBOlVOSVRFRCBTVEFURVM6VEVOTkVTU0VFOkdpYnNvbiBDb3VudHkKKzI4OlVTOlVTQTpVTklURUQgU1RBVEVTOlRFTk5FU1NFRTpHaWxlcyBDb3VudHkKKzI5OlVTOlVTQTpVTklURUQgU1RBVEVTOlRFTk5FU1NFRTpHcmFpbmdlciBDb3VudHkKKzMwOlVTOlVTQTpVTklURUQgU1RBVEVTOlRFTk5FU1NFRTpHcmVlbmUgQ291bnR5CiszMTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpURU5ORVNTRUU6R3J1bmR5IENvdW50eQorMzI6VVM6VVNBOlVOSVRFRCBTVEFURVM6VEVOTkVTU0VFOkhhbWJsZW4gQ291bnR5CiszMzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpURU5ORVNTRUU6SGFtaWx0b24gQ291bnR5CiszNDpVUzpVU0E6VU5JVEVEIFNUQVRFUzpURU5ORVNTRUU6SGFuY29jayBDb3VudHkKKzM1OlVTOlVTQTpVTklURUQgU1RBVEVTOlRFTk5FU1NFRTpIYXJkZW1hbiBDb3VudHkKKzM2OlVTOlVTQTpVTklURUQgU1RBVEVTOlRFTk5FU1NFRTpIYXJkaW4gQ291bnR5CiszNzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpURU5ORVNTRUU6SGF3a2lucyBDb3VudHkKKzM4OlVTOlVTQTpVTklURUQgU1RBVEVTOlRFTk5FU1NFRTpIYXl3b29kIENvdW50eQorMzk6VVM6VVNBOlVOSVRFRCBTVEFURVM6VEVOTkVTU0VFOkhlbmRlcnNvbiBDb3VudHkKKzQwOlVTOlVTQTpVTklURUQgU1RBVEVTOlRFTk5FU1NFRTpIZW5yeSBDb3VudHkKKzQxOlVTOlVTQTpVTklURUQgU1RBVEVTOlRFTk5FU1NFRTpIaWNrbWFuIENvdW50eQorNDI6VVM6VVNBOlVOSVRFRCBTVEFURVM6VEVOTkVTU0VFOkhvdXN0b24gQ291bnR5Cis0MzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpURU5ORVNTRUU6SHVtcGhyZXlzIENvdW50eQorNDQ6VVM6VVNBOlVOSVRFRCBTVEFURVM6VEVOTkVTU0VFOkphY2tzb24gQ291bnR5Cis0NTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpURU5ORVNTRUU6SmVmZmVyc29uIENvdW50eQorNDY6VVM6VVNBOlVOSVRFRCBTVEFURVM6VEVOTkVTU0VFOkpvaG5zb24gQ291bnR5Cis0NzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpURU5ORVNTRUU6S25veCBDb3VudHkKKzQ4OlVTOlVTQTpVTklURUQgU1RBVEVTOlRFTk5FU1NFRTpMYWtlIENvdW50eQorNDk6VVM6VVNBOlVOSVRFRCBTVEFURVM6VEVOTkVTU0VFOkxhdWRlcmRhbGUgQ291bnR5Cis1MDpVUzpVU0E6VU5JVEVEIFNUQVRFUzpURU5ORVNTRUU6TGF3cmVuY2UgQ291bnR5Cis1MTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpURU5ORVNTRUU6TGV3aXMgQ291bnR5Cis1MjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpURU5ORVNTRUU6TGluY29sbiBDb3VudHkKKzUzOlVTOlVTQTpVTklURUQgU1RBVEVTOlRFTk5FU1NFRTpMb3Vkb24gQ291bnR5Cis1NDpVUzpVU0E6VU5JVEVEIFNUQVRFUzpURU5ORVNTRUU6TWFjb24gQ291bnR5Cis1NTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpURU5ORVNTRUU6TWFkaXNvbiBDb3VudHkKKzU2OlVTOlVTQTpVTklURUQgU1RBVEVTOlRFTk5FU1NFRTpNYXJpb24gQ291bnR5Cis1NzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpURU5ORVNTRUU6TWFyc2hhbGwgQ291bnR5Cis1ODpVUzpVU0E6VU5JVEVEIFNUQVRFUzpURU5ORVNTRUU6TWF1cnkgQ291bnR5Cis1OTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpURU5ORVNTRUU6TWNNaW5uIENvdW50eQorNjA6VVM6VVNBOlVOSVRFRCBTVEFURVM6VEVOTkVTU0VFOk1jTmFpcnkgQ291bnR5Cis2MTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpURU5ORVNTRUU6TWVpZ3MgQ291bnR5Cis2MjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpURU5ORVNTRUU6TW9ucm9lIENvdW50eQorNjM6VVM6VVNBOlVOSVRFRCBTVEFURVM6VEVOTkVTU0VFOk1vbnRnb21lcnkgQ291bnR5Cis2NDpVUzpVU0E6VU5JVEVEIFNUQVRFUzpURU5ORVNTRUU6TW9vcmUgQ291bnR5Cis2NTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpURU5ORVNTRUU6TW9yZ2FuIENvdW50eQorNjY6VVM6VVNBOlVOSVRFRCBTVEFURVM6VEVOTkVTU0VFOk9iaW9uIENvdW50eQorNjc6VVM6VVNBOlVOSVRFRCBTVEFURVM6VEVOTkVTU0VFOk92ZXJ0b24gQ291bnR5Cis2ODpVUzpVU0E6VU5JVEVEIFNUQVRFUzpURU5ORVNTRUU6UGVycnkgQ291bnR5Cis2OTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpURU5ORVNTRUU6UGlja2V0dCBDb3VudHkKKzcwOlVTOlVTQTpVTklURUQgU1RBVEVTOlRFTk5FU1NFRTpQb2xrIENvdW50eQorNzE6VVM6VVNBOlVOSVRFRCBTVEFURVM6VEVOTkVTU0VFOlB1dG5hbSBDb3VudHkKKzcyOlVTOlVTQTpVTklURUQgU1RBVEVTOlRFTk5FU1NFRTpSaGVhIENvdW50eQorNzM6VVM6VVNBOlVOSVRFRCBTVEFURVM6VEVOTkVTU0VFOlJvYW5lIENvdW50eQorNzQ6VVM6VVNBOlVOSVRFRCBTVEFURVM6VEVOTkVTU0VFOlJvYmVydHNvbiBDb3VudHkKKzc1OlVTOlVTQTpVTklURUQgU1RBVEVTOlRFTk5FU1NFRTpSdXRoZXJmb3JkIENvdW50eQorNzY6VVM6VVNBOlVOSVRFRCBTVEFURVM6VEVOTkVTU0VFOlNjb3R0IENvdW50eQorNzc6VVM6VVNBOlVOSVRFRCBTVEFURVM6VEVOTkVTU0VFOlNlcXVhdGNoaWUgQ291bnR5Cis3ODpVUzpVU0E6VU5JVEVEIFNUQVRFUzpURU5ORVNTRUU6U2V2aWVyIENvdW50eQorNzk6VVM6VVNBOlVOSVRFRCBTVEFURVM6VEVOTkVTU0VFOlNoZWxieSBDb3VudHkKKzgwOlVTOlVTQTpVTklURUQgU1RBVEVTOlRFTk5FU1NFRTpTbWl0aCBDb3VudHkKKzgxOlVTOlVTQTpVTklURUQgU1RBVEVTOlRFTk5FU1NFRTpTdGV3YXJ0IENvdW50eQorODI6VVM6VVNBOlVOSVRFRCBTVEFURVM6VEVOTkVTU0VFOlN1bGxpdmFuIENvdW50eQorODM6VVM6VVNBOlVOSVRFRCBTVEFURVM6VEVOTkVTU0VFOlN1bW5lciBDb3VudHkKKzg0OlVTOlVTQTpVTklURUQgU1RBVEVTOlRFTk5FU1NFRTpUaXB0b24gQ291bnR5Cis4NTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpURU5ORVNTRUU6VHJvdXNkYWxlIENvdW50eQorODY6VVM6VVNBOlVOSVRFRCBTVEFURVM6VEVOTkVTU0VFOlVuaWNvaSBDb3VudHkKKzg3OlVTOlVTQTpVTklURUQgU1RBVEVTOlRFTk5FU1NFRTpVbmlvbiBDb3VudHkKKzg4OlVTOlVTQTpVTklURUQgU1RBVEVTOlRFTk5FU1NFRTpWYW4gQnVyZW4gQ291bnR5Cis4OTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpURU5ORVNTRUU6V2FycmVuIENvdW50eQorOTA6VVM6VVNBOlVOSVRFRCBTVEFURVM6VEVOTkVTU0VFOldhc2hpbmd0b24gQ291bnR5Cis5MTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpURU5ORVNTRUU6V2F5bmUgQ291bnR5Cis5MjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpURU5ORVNTRUU6V2Vha2xleSBDb3VudHkKKzkzOlVTOlVTQTpVTklURUQgU1RBVEVTOlRFTk5FU1NFRTpXaGl0ZSBDb3VudHkKKzk0OlVTOlVTQTpVTklURUQgU1RBVEVTOlRFTk5FU1NFRTpXaWxsaWFtc29uIENvdW50eQorOTU6VVM6VVNBOlVOSVRFRCBTVEFURVM6VEVOTkVTU0VFOldpbHNvbiBDb3VudHkKKzE6VVM6VVNBOlVOSVRFRCBTVEFURVM6VEVYQVM6QW5kZXJzb24gQ291bnR5CisyOlVTOlVTQTpVTklURUQgU1RBVEVTOlRFWEFTOkFuZHJld3MgQ291bnR5CiszOlVTOlVTQTpVTklURUQgU1RBVEVTOlRFWEFTOkFuZ2VsaW5hIENvdW50eQorNDpVUzpVU0E6VU5JVEVEIFNUQVRFUzpURVhBUzpBcmFuc2FzIENvdW50eQorNTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpURVhBUzpBcmNoZXIgQ291bnR5Cis2OlVTOlVTQTpVTklURUQgU1RBVEVTOlRFWEFTOkFybXN0cm9uZyBDb3VudHkKKzc6VVM6VVNBOlVOSVRFRCBTVEFURVM6VEVYQVM6QXRhc2Nvc2EgQ291bnR5Cis4OlVTOlVTQTpVTklURUQgU1RBVEVTOlRFWEFTOkF1c3RpbiBDb3VudHkKKzk6VVM6VVNBOlVOSVRFRCBTVEFURVM6VEVYQVM6QmFpbGV5IENvdW50eQorMTA6VVM6VVNBOlVOSVRFRCBTVEFURVM6VEVYQVM6QmFuZGVyYSBDb3VudHkKKzExOlVTOlVTQTpVTklURUQgU1RBVEVTOlRFWEFTOkJhc3Ryb3AgQ291bnR5CisxMjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpURVhBUzpCYXlsb3IgQ291bnR5CisxMzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpURVhBUzpCZWUgQ291bnR5CisxNDpVUzpVU0E6VU5JVEVEIFNUQVRFUzpURVhBUzpCZWxsIENvdW50eQorMTU6VVM6VVNBOlVOSVRFRCBTVEFURVM6VEVYQVM6QmV4YXIgQ291bnR5CisxNjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpURVhBUzpCbGFuY28gQ291bnR5CisxNzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpURVhBUzpCb3JkZW4gQ291bnR5CisxODpVUzpVU0E6VU5JVEVEIFNUQVRFUzpURVhBUzpCb3NxdWUgQ291bnR5CisxOTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpURVhBUzpCb3dpZSBDb3VudHkKKzIwOlVTOlVTQTpVTklURUQgU1RBVEVTOlRFWEFTOkJyYXpvcmlhIENvdW50eQorMjE6VVM6VVNBOlVOSVRFRCBTVEFURVM6VEVYQVM6QnJhem9zIENvdW50eQorMjI6VVM6VVNBOlVOSVRFRCBTVEFURVM6VEVYQVM6QnJld3N0ZXIgQ291bnR5CisyMzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpURVhBUzpCcmlzY29lIENvdW50eQorMjQ6VVM6VVNBOlVOSVRFRCBTVEFURVM6VEVYQVM6QnJvb2tzIENvdW50eQorMjU6VVM6VVNBOlVOSVRFRCBTVEFURVM6VEVYQVM6QnJvd24gQ291bnR5CisyNjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpURVhBUzpCdXJsZXNvbiBDb3VudHkKKzI3OlVTOlVTQTpVTklURUQgU1RBVEVTOlRFWEFTOkJ1cm5ldCBDb3VudHkKKzI4OlVTOlVTQTpVTklURUQgU1RBVEVTOlRFWEFTOkNhbGR3ZWxsIENvdW50eQorMjk6VVM6VVNBOlVOSVRFRCBTVEFURVM6VEVYQVM6Q2FsaG91biBDb3VudHkKKzMwOlVTOlVTQTpVTklURUQgU1RBVEVTOlRFWEFTOkNhbGxhaGFuIENvdW50eQorMzE6VVM6VVNBOlVOSVRFRCBTVEFURVM6VEVYQVM6Q2FtZXJvbiBDb3VudHkKKzMyOlVTOlVTQTpVTklURUQgU1RBVEVTOlRFWEFTOkNhbXAgQ291bnR5CiszMzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpURVhBUzpDYXJzb24gQ291bnR5CiszNDpVUzpVU0E6VU5JVEVEIFNUQVRFUzpURVhBUzpDYXNzIENvdW50eQorMzU6VVM6VVNBOlVOSVRFRCBTVEFURVM6VEVYQVM6Q2FzdHJvIENvdW50eQorMzY6VVM6VVNBOlVOSVRFRCBTVEFURVM6VEVYQVM6Q2hhbWJlcnMgQ291bnR5CiszNzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpURVhBUzpDaGVyb2tlZSBDb3VudHkKKzM4OlVTOlVTQTpVTklURUQgU1RBVEVTOlRFWEFTOkNoaWxkcmVzcyBDb3VudHkKKzM5OlVTOlVTQTpVTklURUQgU1RBVEVTOlRFWEFTOkNsYXkgQ291bnR5Cis0MDpVUzpVU0E6VU5JVEVEIFNUQVRFUzpURVhBUzpDb2NocmFuIENvdW50eQorNDE6VVM6VVNBOlVOSVRFRCBTVEFURVM6VEVYQVM6Q29rZSBDb3VudHkKKzQyOlVTOlVTQTpVTklURUQgU1RBVEVTOlRFWEFTOkNvbGVtYW4gQ291bnR5Cis0MzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpURVhBUzpDb2xsaW4gQ291bnR5Cis0NDpVUzpVU0E6VU5JVEVEIFNUQVRFUzpURVhBUzpDb2xsaW5nc3dvcnRoIENvdW50eQorNDU6VVM6VVNBOlVOSVRFRCBTVEFURVM6VEVYQVM6Q29sb3JhZG8gQ291bnR5Cis0NjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpURVhBUzpDb21hbCBDb3VudHkKKzQ3OlVTOlVTQTpVTklURUQgU1RBVEVTOlRFWEFTOkNvbWFuY2hlIENvdW50eQorNDg6VVM6VVNBOlVOSVRFRCBTVEFURVM6VEVYQVM6Q29uY2hvIENvdW50eQorNDk6VVM6VVNBOlVOSVRFRCBTVEFURVM6VEVYQVM6Q29va2UgQ291bnR5Cis1MDpVUzpVU0E6VU5JVEVEIFNUQVRFUzpURVhBUzpDb3J5ZWxsIENvdW50eQorNTE6VVM6VVNBOlVOSVRFRCBTVEFURVM6VEVYQVM6Q290dGxlIENvdW50eQorNTI6VVM6VVNBOlVOSVRFRCBTVEFURVM6VEVYQVM6Q3JhbmUgQ291bnR5Cis1MzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpURVhBUzpDcm9ja2V0dCBDb3VudHkKKzU0OlVTOlVTQTpVTklURUQgU1RBVEVTOlRFWEFTOkNyb3NieSBDb3VudHkKKzU1OlVTOlVTQTpVTklURUQgU1RBVEVTOlRFWEFTOkN1bGJlcnNvbiBDb3VudHkKKzU2OlVTOlVTQTpVTklURUQgU1RBVEVTOlRFWEFTOkRhbGxhbSBDb3VudHkKKzU3OlVTOlVTQTpVTklURUQgU1RBVEVTOlRFWEFTOkRhbGxhcyBDb3VudHkKKzU4OlVTOlVTQTpVTklURUQgU1RBVEVTOlRFWEFTOkRhd3NvbiBDb3VudHkKKzU5OlVTOlVTQTpVTklURUQgU1RBVEVTOlRFWEFTOkRlV2l0dCBDb3VudHkKKzYwOlVTOlVTQTpVTklURUQgU1RBVEVTOlRFWEFTOkRlYWYgU21pdGggQ291bnR5Cis2MTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpURVhBUzpEZWx0YSBDb3VudHkKKzYyOlVTOlVTQTpVTklURUQgU1RBVEVTOlRFWEFTOkRlbnRvbiBDb3VudHkKKzYzOlVTOlVTQTpVTklURUQgU1RBVEVTOlRFWEFTOkRpY2tlbnMgQ291bnR5Cis2NDpVUzpVU0E6VU5JVEVEIFNUQVRFUzpURVhBUzpEaW1taXQgQ291bnR5Cis2NTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpURVhBUzpEb25sZXkgQ291bnR5Cis2NjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpURVhBUzpEdXZhbCBDb3VudHkKKzY3OlVTOlVTQTpVTklURUQgU1RBVEVTOlRFWEFTOkVhc3RsYW5kIENvdW50eQorNjg6VVM6VVNBOlVOSVRFRCBTVEFURVM6VEVYQVM6RWN0b3IgQ291bnR5Cis2OTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpURVhBUzpFZHdhcmRzIENvdW50eQorNzA6VVM6VVNBOlVOSVRFRCBTVEFURVM6VEVYQVM6RWwgUGFzbyBDb3VudHkKKzcxOlVTOlVTQTpVTklURUQgU1RBVEVTOlRFWEFTOkVsbGlzIENvdW50eQorNzI6VVM6VVNBOlVOSVRFRCBTVEFURVM6VEVYQVM6RXJhdGggQ291bnR5Cis3MzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpURVhBUzpGYWxscyBDb3VudHkKKzc0OlVTOlVTQTpVTklURUQgU1RBVEVTOlRFWEFTOkZhbm5pbiBDb3VudHkKKzc1OlVTOlVTQTpVTklURUQgU1RBVEVTOlRFWEFTOkZheWV0dGUgQ291bnR5Cis3NjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpURVhBUzpGaXNoZXIgQ291bnR5Cis3NzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpURVhBUzpGbG95ZCBDb3VudHkKKzc4OlVTOlVTQTpVTklURUQgU1RBVEVTOlRFWEFTOkZvYXJkIENvdW50eQorNzk6VVM6VVNBOlVOSVRFRCBTVEFURVM6VEVYQVM6Rm9ydCBCZW5kIENvdW50eQorODA6VVM6VVNBOlVOSVRFRCBTVEFURVM6VEVYQVM6RnJhbmtsaW4gQ291bnR5Cis4MTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpURVhBUzpGcmVlc3RvbmUgQ291bnR5Cis4MjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpURVhBUzpGcmlvIENvdW50eQorODM6VVM6VVNBOlVOSVRFRCBTVEFURVM6VEVYQVM6R2FpbmVzIENvdW50eQorODQ6VVM6VVNBOlVOSVRFRCBTVEFURVM6VEVYQVM6R2FsdmVzdG9uIENvdW50eQorODU6VVM6VVNBOlVOSVRFRCBTVEFURVM6VEVYQVM6R2FyemEgQ291bnR5Cis4NjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpURVhBUzpHaWxsZXNwaWUgQ291bnR5Cis4NzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpURVhBUzpHbGFzc2NvY2sgQ291bnR5Cis4ODpVUzpVU0E6VU5JVEVEIFNUQVRFUzpURVhBUzpHb2xpYWQgQ291bnR5Cis4OTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpURVhBUzpHb256YWxlcyBDb3VudHkKKzkwOlVTOlVTQTpVTklURUQgU1RBVEVTOlRFWEFTOkdyYXkgQ291bnR5Cis5MTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpURVhBUzpHcmF5c29uIENvdW50eQorOTI6VVM6VVNBOlVOSVRFRCBTVEFURVM6VEVYQVM6R3JlZ2cgQ291bnR5Cis5MzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpURVhBUzpHcmltZXMgQ291bnR5Cis5NDpVUzpVU0E6VU5JVEVEIFNUQVRFUzpURVhBUzpHdWFkYWx1cGUgQ291bnR5Cis5NTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpURVhBUzpIYWxlIENvdW50eQorOTY6VVM6VVNBOlVOSVRFRCBTVEFURVM6VEVYQVM6SGFsbCBDb3VudHkKKzk3OlVTOlVTQTpVTklURUQgU1RBVEVTOlRFWEFTOkhhbWlsdG9uIENvdW50eQorOTg6VVM6VVNBOlVOSVRFRCBTVEFURVM6VEVYQVM6SGFuc2ZvcmQgQ291bnR5Cis5OTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpURVhBUzpIYXJkZW1hbiBDb3VudHkKKzEwMDpVUzpVU0E6VU5JVEVEIFNUQVRFUzpURVhBUzpIYXJkaW4gQ291bnR5CisxMDE6VVM6VVNBOlVOSVRFRCBTVEFURVM6VEVYQVM6SGFycmlzIENvdW50eQorMTAyOlVTOlVTQTpVTklURUQgU1RBVEVTOlRFWEFTOkhhcnJpc29uIENvdW50eQorMTAzOlVTOlVTQTpVTklURUQgU1RBVEVTOlRFWEFTOkhhcnRsZXkgQ291bnR5CisxMDQ6VVM6VVNBOlVOSVRFRCBTVEFURVM6VEVYQVM6SGFza2VsbCBDb3VudHkKKzEwNTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpURVhBUzpIYXlzIENvdW50eQorMTA2OlVTOlVTQTpVTklURUQgU1RBVEVTOlRFWEFTOkhlbXBoaWxsIENvdW50eQorMTA3OlVTOlVTQTpVTklURUQgU1RBVEVTOlRFWEFTOkhlbmRlcnNvbiBDb3VudHkKKzEwODpVUzpVU0E6VU5JVEVEIFNUQVRFUzpURVhBUzpIaWRhbGdvIENvdW50eQorMTA5OlVTOlVTQTpVTklURUQgU1RBVEVTOlRFWEFTOkhpbGwgQ291bnR5CisxMTA6VVM6VVNBOlVOSVRFRCBTVEFURVM6VEVYQVM6SG9ja2xleSBDb3VudHkKKzExMTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpURVhBUzpIb29kIENvdW50eQorMTEyOlVTOlVTQTpVTklURUQgU1RBVEVTOlRFWEFTOkhvcGtpbnMgQ291bnR5CisxMTM6VVM6VVNBOlVOSVRFRCBTVEFURVM6VEVYQVM6SG91c3RvbiBDb3VudHkKKzExNDpVUzpVU0E6VU5JVEVEIFNUQVRFUzpURVhBUzpIb3dhcmQgQ291bnR5CisxMTU6VVM6VVNBOlVOSVRFRCBTVEFURVM6VEVYQVM6SHVkc3BldGggQ291bnR5CisxMTY6VVM6VVNBOlVOSVRFRCBTVEFURVM6VEVYQVM6SHVudCBDb3VudHkKKzExNzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpURVhBUzpIdXRjaGluc29uIENvdW50eQorMTE4OlVTOlVTQTpVTklURUQgU1RBVEVTOlRFWEFTOklyaW9uIENvdW50eQorMTE5OlVTOlVTQTpVTklURUQgU1RBVEVTOlRFWEFTOkphY2sgQ291bnR5CisxMjA6VVM6VVNBOlVOSVRFRCBTVEFURVM6VEVYQVM6SmFja3NvbiBDb3VudHkKKzEyMTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpURVhBUzpKYXNwZXIgQ291bnR5CisxMjI6VVM6VVNBOlVOSVRFRCBTVEFURVM6VEVYQVM6SmVmZiBEYXZpcyBDb3VudHkKKzEyMzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpURVhBUzpKZWZmZXJzb24gQ291bnR5CisxMjQ6VVM6VVNBOlVOSVRFRCBTVEFURVM6VEVYQVM6SmltIEhvZ2cgQ291bnR5CisxMjU6VVM6VVNBOlVOSVRFRCBTVEFURVM6VEVYQVM6SmltIFdlbGxzIENvdW50eQorMTI2OlVTOlVTQTpVTklURUQgU1RBVEVTOlRFWEFTOkpvaG5zb24gQ291bnR5CisxMjc6VVM6VVNBOlVOSVRFRCBTVEFURVM6VEVYQVM6Sm9uZXMgQ291bnR5CisxMjg6VVM6VVNBOlVOSVRFRCBTVEFURVM6VEVYQVM6S2FybmVzIENvdW50eQorMTI5OlVTOlVTQTpVTklURUQgU1RBVEVTOlRFWEFTOkthdWZtYW4gQ291bnR5CisxMzA6VVM6VVNBOlVOSVRFRCBTVEFURVM6VEVYQVM6S2VuZGFsbCBDb3VudHkKKzEzMTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpURVhBUzpLZW5lZHkgQ291bnR5CisxMzI6VVM6VVNBOlVOSVRFRCBTVEFURVM6VEVYQVM6S2VudCBDb3VudHkKKzEzMzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpURVhBUzpLZXJyIENvdW50eQorMTM0OlVTOlVTQTpVTklURUQgU1RBVEVTOlRFWEFTOktpbWJsZSBDb3VudHkKKzEzNTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpURVhBUzpLaW5nIENvdW50eQorMTM2OlVTOlVTQTpVTklURUQgU1RBVEVTOlRFWEFTOktpbm5leSBDb3VudHkKKzEzNzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpURVhBUzpLbGViZXJnIENvdW50eQorMTM4OlVTOlVTQTpVTklURUQgU1RBVEVTOlRFWEFTOktub3ggQ291bnR5CisxMzk6VVM6VVNBOlVOSVRFRCBTVEFURVM6VEVYQVM6TGEgU2FsbGUgQ291bnR5CisxNDA6VVM6VVNBOlVOSVRFRCBTVEFURVM6VEVYQVM6TGFtYXIgQ291bnR5CisxNDE6VVM6VVNBOlVOSVRFRCBTVEFURVM6VEVYQVM6TGFtYiBDb3VudHkKKzE0MjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpURVhBUzpMYW1wYXNhcyBDb3VudHkKKzE0MzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpURVhBUzpMYXZhY2EgQ291bnR5CisxNDQ6VVM6VVNBOlVOSVRFRCBTVEFURVM6VEVYQVM6TGVlIENvdW50eQorMTQ1OlVTOlVTQTpVTklURUQgU1RBVEVTOlRFWEFTOkxlb24gQ291bnR5CisxNDY6VVM6VVNBOlVOSVRFRCBTVEFURVM6VEVYQVM6TGliZXJ0eSBDb3VudHkKKzE0NzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpURVhBUzpMaW1lc3RvbmUgQ291bnR5CisxNDg6VVM6VVNBOlVOSVRFRCBTVEFURVM6VEVYQVM6TGlwc2NvbWIgQ291bnR5CisxNDk6VVM6VVNBOlVOSVRFRCBTVEFURVM6VEVYQVM6TGl2ZSBPYWsgQ291bnR5CisxNTA6VVM6VVNBOlVOSVRFRCBTVEFURVM6VEVYQVM6TGxhbm8gQ291bnR5CisxNTE6VVM6VVNBOlVOSVRFRCBTVEFURVM6VEVYQVM6TG92aW5nIENvdW50eQorMTUyOlVTOlVTQTpVTklURUQgU1RBVEVTOlRFWEFTOkx1YmJvY2sgQ291bnR5CisxNTM6VVM6VVNBOlVOSVRFRCBTVEFURVM6VEVYQVM6THlubiBDb3VudHkKKzE1NDpVUzpVU0E6VU5JVEVEIFNUQVRFUzpURVhBUzpNYWRpc29uIENvdW50eQorMTU1OlVTOlVTQTpVTklURUQgU1RBVEVTOlRFWEFTOk1hcmlvbiBDb3VudHkKKzE1NjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpURVhBUzpNYXJ0aW4gQ291bnR5CisxNTc6VVM6VVNBOlVOSVRFRCBTVEFURVM6VEVYQVM6TWFzb24gQ291bnR5CisxNTg6VVM6VVNBOlVOSVRFRCBTVEFURVM6VEVYQVM6TWF0YWdvcmRhIENvdW50eQorMTU5OlVTOlVTQTpVTklURUQgU1RBVEVTOlRFWEFTOk1hdmVyaWNrIENvdW50eQorMTYwOlVTOlVTQTpVTklURUQgU1RBVEVTOlRFWEFTOk1jQ3VsbG9jaCBDb3VudHkKKzE2MTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpURVhBUzpNY0xlbm5hbiBDb3VudHkKKzE2MjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpURVhBUzpNY011bGxlbiBDb3VudHkKKzE2MzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpURVhBUzpNZWRpbmEgQ291bnR5CisxNjQ6VVM6VVNBOlVOSVRFRCBTVEFURVM6VEVYQVM6TWVuYXJkIENvdW50eQorMTY1OlVTOlVTQTpVTklURUQgU1RBVEVTOlRFWEFTOk1pZGxhbmQgQ291bnR5CisxNjY6VVM6VVNBOlVOSVRFRCBTVEFURVM6VEVYQVM6TWlsYW0gQ291bnR5CisxNjc6VVM6VVNBOlVOSVRFRCBTVEFURVM6VEVYQVM6TWlsbHMgQ291bnR5CisxNjg6VVM6VVNBOlVOSVRFRCBTVEFURVM6VEVYQVM6TWl0Y2hlbGwgQ291bnR5CisxNjk6VVM6VVNBOlVOSVRFRCBTVEFURVM6VEVYQVM6TW9udGFndWUgQ291bnR5CisxNzA6VVM6VVNBOlVOSVRFRCBTVEFURVM6VEVYQVM6TW9udGdvbWVyeSBDb3VudHkKKzE3MTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpURVhBUzpNb29yZSBDb3VudHkKKzE3MjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpURVhBUzpNb3JyaXMgQ291bnR5CisxNzM6VVM6VVNBOlVOSVRFRCBTVEFURVM6VEVYQVM6TW90bGV5IENvdW50eQorMTc0OlVTOlVTQTpVTklURUQgU1RBVEVTOlRFWEFTOk5hY29nZG9jaGVzIENvdW50eQorMTc1OlVTOlVTQTpVTklURUQgU1RBVEVTOlRFWEFTOk5hdmFycm8gQ291bnR5CisxNzY6VVM6VVNBOlVOSVRFRCBTVEFURVM6VEVYQVM6TmV3dG9uIENvdW50eQorMTc3OlVTOlVTQTpVTklURUQgU1RBVEVTOlRFWEFTOk5vbGFuIENvdW50eQorMTc4OlVTOlVTQTpVTklURUQgU1RBVEVTOlRFWEFTOk51ZWNlcyBDb3VudHkKKzE3OTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpURVhBUzpPY2hpbHRyZWUgQ291bnR5CisxODA6VVM6VVNBOlVOSVRFRCBTVEFURVM6VEVYQVM6T2xkaGFtIENvdW50eQorMTgxOlVTOlVTQTpVTklURUQgU1RBVEVTOlRFWEFTOk9yYW5nZSBDb3VudHkKKzE4MjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpURVhBUzpQYWxvIFBpbnRvIENvdW50eQorMTgzOlVTOlVTQTpVTklURUQgU1RBVEVTOlRFWEFTOlBhbm9sYSBDb3VudHkKKzE4NDpVUzpVU0E6VU5JVEVEIFNUQVRFUzpURVhBUzpQYXJrZXIgQ291bnR5CisxODU6VVM6VVNBOlVOSVRFRCBTVEFURVM6VEVYQVM6UGFybWVyIENvdW50eQorMTg2OlVTOlVTQTpVTklURUQgU1RBVEVTOlRFWEFTOlBlY29zIENvdW50eQorMTg3OlVTOlVTQTpVTklURUQgU1RBVEVTOlRFWEFTOlBvbGsgQ291bnR5CisxODg6VVM6VVNBOlVOSVRFRCBTVEFURVM6VEVYQVM6UG90dGVyIENvdW50eQorMTg5OlVTOlVTQTpVTklURUQgU1RBVEVTOlRFWEFTOlByZXNpZGlvIENvdW50eQorMTkwOlVTOlVTQTpVTklURUQgU1RBVEVTOlRFWEFTOlJhaW5zIENvdW50eQorMTkxOlVTOlVTQTpVTklURUQgU1RBVEVTOlRFWEFTOlJhbmRhbGwgQ291bnR5CisxOTI6VVM6VVNBOlVOSVRFRCBTVEFURVM6VEVYQVM6UmVhZ2FuIENvdW50eQorMTkzOlVTOlVTQTpVTklURUQgU1RBVEVTOlRFWEFTOlJlYWwgQ291bnR5CisxOTQ6VVM6VVNBOlVOSVRFRCBTVEFURVM6VEVYQVM6UmVkIFJpdmVyIENvdW50eQorMTk1OlVTOlVTQTpVTklURUQgU1RBVEVTOlRFWEFTOlJlZXZlcyBDb3VudHkKKzE5NjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpURVhBUzpSZWZ1Z2lvIENvdW50eQorMTk3OlVTOlVTQTpVTklURUQgU1RBVEVTOlRFWEFTOlJvYmVydHMgQ291bnR5CisxOTg6VVM6VVNBOlVOSVRFRCBTVEFURVM6VEVYQVM6Um9iZXJ0c29uIENvdW50eQorMTk5OlVTOlVTQTpVTklURUQgU1RBVEVTOlRFWEFTOlJvY2t3YWxsIENvdW50eQorMjAwOlVTOlVTQTpVTklURUQgU1RBVEVTOlRFWEFTOlJ1bm5lbHMgQ291bnR5CisyMDE6VVM6VVNBOlVOSVRFRCBTVEFURVM6VEVYQVM6UnVzayBDb3VudHkKKzIwMjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpURVhBUzpTYWJpbmUgQ291bnR5CisyMDM6VVM6VVNBOlVOSVRFRCBTVEFURVM6VEVYQVM6U2FuIEF1Z3VzdGluZSBDb3VudHkKKzIwNDpVUzpVU0E6VU5JVEVEIFNUQVRFUzpURVhBUzpTYW4gSmFjaW50byBDb3VudHkKKzIwNTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpURVhBUzpTYW4gUGF0cmljaW8gQ291bnR5CisyMDY6VVM6VVNBOlVOSVRFRCBTVEFURVM6VEVYQVM6U2FuIFNhYmEgQ291bnR5CisyMDc6VVM6VVNBOlVOSVRFRCBTVEFURVM6VEVYQVM6U2NobGVpY2hlciBDb3VudHkKKzIwODpVUzpVU0E6VU5JVEVEIFNUQVRFUzpURVhBUzpTY3VycnkgQ291bnR5CisyMDk6VVM6VVNBOlVOSVRFRCBTVEFURVM6VEVYQVM6U2hhY2tlbGZvcmQgQ291bnR5CisyMTA6VVM6VVNBOlVOSVRFRCBTVEFURVM6VEVYQVM6U2hlbGJ5IENvdW50eQorMjExOlVTOlVTQTpVTklURUQgU1RBVEVTOlRFWEFTOlNoZXJtYW4gQ291bnR5CisyMTI6VVM6VVNBOlVOSVRFRCBTVEFURVM6VEVYQVM6U21pdGggQ291bnR5CisyMTM6VVM6VVNBOlVOSVRFRCBTVEFURVM6VEVYQVM6U29tZXJ2ZWxsIENvdW50eQorMjE0OlVTOlVTQTpVTklURUQgU1RBVEVTOlRFWEFTOlN0YXJyIENvdW50eQorMjE1OlVTOlVTQTpVTklURUQgU1RBVEVTOlRFWEFTOlN0ZXBoZW5zIENvdW50eQorMjE2OlVTOlVTQTpVTklURUQgU1RBVEVTOlRFWEFTOlN0ZXJsaW5nIENvdW50eQorMjE3OlVTOlVTQTpVTklURUQgU1RBVEVTOlRFWEFTOlN0b25ld2FsbCBDb3VudHkKKzIxODpVUzpVU0E6VU5JVEVEIFNUQVRFUzpURVhBUzpTdXR0b24gQ291bnR5CisyMTk6VVM6VVNBOlVOSVRFRCBTVEFURVM6VEVYQVM6U3dpc2hlciBDb3VudHkKKzIyMDpVUzpVU0E6VU5JVEVEIFNUQVRFUzpURVhBUzpUYXJyYW50IENvdW50eQorMjIxOlVTOlVTQTpVTklURUQgU1RBVEVTOlRFWEFTOlRheWxvciBDb3VudHkKKzIyMjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpURVhBUzpUZXJyZWxsIENvdW50eQorMjIzOlVTOlVTQTpVTklURUQgU1RBVEVTOlRFWEFTOlRlcnJ5IENvdW50eQorMjI0OlVTOlVTQTpVTklURUQgU1RBVEVTOlRFWEFTOlRocm9ja21vcnRvbiBDb3VudHkKKzIyNTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpURVhBUzpUaXR1cyBDb3VudHkKKzIyNjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpURVhBUzpUb20gR3JlZW4gQ291bnR5CisyMjc6VVM6VVNBOlVOSVRFRCBTVEFURVM6VEVYQVM6VHJhdmlzIENvdW50eQorMjI4OlVTOlVTQTpVTklURUQgU1RBVEVTOlRFWEFTOlRyaW5pdHkgQ291bnR5CisyMjk6VVM6VVNBOlVOSVRFRCBTVEFURVM6VEVYQVM6VHlsZXIgQ291bnR5CisyMzA6VVM6VVNBOlVOSVRFRCBTVEFURVM6VEVYQVM6VXBzaHVyIENvdW50eQorMjMxOlVTOlVTQTpVTklURUQgU1RBVEVTOlRFWEFTOlVwdG9uIENvdW50eQorMjMyOlVTOlVTQTpVTklURUQgU1RBVEVTOlRFWEFTOlV2YWxkZSBDb3VudHkKKzIzMzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpURVhBUzpWYWwgVmVyZGUgQ291bnR5CisyMzQ6VVM6VVNBOlVOSVRFRCBTVEFURVM6VEVYQVM6VmFuIFphbmR0IENvdW50eQorMjM1OlVTOlVTQTpVTklURUQgU1RBVEVTOlRFWEFTOlZpY3RvcmlhIENvdW50eQorMjM2OlVTOlVTQTpVTklURUQgU1RBVEVTOlRFWEFTOldhbGtlciBDb3VudHkKKzIzNzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpURVhBUzpXYWxsZXIgQ291bnR5CisyMzg6VVM6VVNBOlVOSVRFRCBTVEFURVM6VEVYQVM6V2FyZCBDb3VudHkKKzIzOTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpURVhBUzpXYXNoaW5ndG9uIENvdW50eQorMjQwOlVTOlVTQTpVTklURUQgU1RBVEVTOlRFWEFTOldlYmIgQ291bnR5CisyNDE6VVM6VVNBOlVOSVRFRCBTVEFURVM6VEVYQVM6V2hhcnRvbiBDb3VudHkKKzI0MjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpURVhBUzpXaGVlbGVyIENvdW50eQorMjQzOlVTOlVTQTpVTklURUQgU1RBVEVTOlRFWEFTOldpY2hpdGEgQ291bnR5CisyNDQ6VVM6VVNBOlVOSVRFRCBTVEFURVM6VEVYQVM6V2lsYmFyZ2VyIENvdW50eQorMjQ1OlVTOlVTQTpVTklURUQgU1RBVEVTOlRFWEFTOldpbGxhY3kgQ291bnR5CisyNDY6VVM6VVNBOlVOSVRFRCBTVEFURVM6VEVYQVM6V2lsbGlhbXNvbiBDb3VudHkKKzI0NzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpURVhBUzpXaWxzb24gQ291bnR5CisyNDg6VVM6VVNBOlVOSVRFRCBTVEFURVM6VEVYQVM6V2lua2xlciBDb3VudHkKKzI0OTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpURVhBUzpXaXNlIENvdW50eQorMjUwOlVTOlVTQTpVTklURUQgU1RBVEVTOlRFWEFTOldvb2QgQ291bnR5CisyNTE6VVM6VVNBOlVOSVRFRCBTVEFURVM6VEVYQVM6WW9ha3VtIENvdW50eQorMjUyOlVTOlVTQTpVTklURUQgU1RBVEVTOlRFWEFTOllvdW5nIENvdW50eQorMjUzOlVTOlVTQTpVTklURUQgU1RBVEVTOlRFWEFTOlphcGF0YSBDb3VudHkKKzI1NDpVUzpVU0E6VU5JVEVEIFNUQVRFUzpURVhBUzpaYXZhbGEgQ291bnR5CisxOlVTOlVTQTpVTklURUQgU1RBVEVTOkFMQUJBTUE6QXV0YXVnYSBDb3VudHkKKzI6VVM6VVNBOlVOSVRFRCBTVEFURVM6QUxBQkFNQTpCYWxkd2luIENvdW50eQorMzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpBTEFCQU1BOkJhcmJvdXIgQ291bnR5Cis0OlVTOlVTQTpVTklURUQgU1RBVEVTOkFMQUJBTUE6QmliYiBDb3VudHkKKzU6VVM6VVNBOlVOSVRFRCBTVEFURVM6QUxBQkFNQTpCbG91bnQgQ291bnR5Cis2OlVTOlVTQTpVTklURUQgU1RBVEVTOkFMQUJBTUE6QnVsbG9jayBDb3VudHkKKzc6VVM6VVNBOlVOSVRFRCBTVEFURVM6QUxBQkFNQTpCdXRsZXIgQ291bnR5Cis4OlVTOlVTQTpVTklURUQgU1RBVEVTOkFMQUJBTUE6Q2FsaG91biBDb3VudHkKKzk6VVM6VVNBOlVOSVRFRCBTVEFURVM6QUxBQkFNQTpDaGFtYmVycyBDb3VudHkKKzEwOlVTOlVTQTpVTklURUQgU1RBVEVTOkFMQUJBTUE6Q2hlcm9rZWUgQ291bnR5CisxMTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpBTEFCQU1BOkNoaWx0b24gQ291bnR5CisxMjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpBTEFCQU1BOkNob2N0YXcgQ291bnR5CisxMzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpBTEFCQU1BOkNsYXJrZSBDb3VudHkKKzE0OlVTOlVTQTpVTklURUQgU1RBVEVTOkFMQUJBTUE6Q2xheSBDb3VudHkKKzE1OlVTOlVTQTpVTklURUQgU1RBVEVTOkFMQUJBTUE6Q2xlYnVybmUgQ291bnR5CisxNjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpBTEFCQU1BOkNvZmZlZSBDb3VudHkKKzE3OlVTOlVTQTpVTklURUQgU1RBVEVTOkFMQUJBTUE6Q29sYmVydCBDb3VudHkKKzE4OlVTOlVTQTpVTklURUQgU1RBVEVTOkFMQUJBTUE6Q29uZWN1aCBDb3VudHkKKzE5OlVTOlVTQTpVTklURUQgU1RBVEVTOkFMQUJBTUE6Q29vc2EgQ291bnR5CisyMDpVUzpVU0E6VU5JVEVEIFNUQVRFUzpBTEFCQU1BOkNvdmluZ3RvbiBDb3VudHkKKzIxOlVTOlVTQTpVTklURUQgU1RBVEVTOkFMQUJBTUE6Q3JlbnNoYXcgQ291bnR5CisyMjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpBTEFCQU1BOkN1bGxtYW4gQ291bnR5CisyMzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpBTEFCQU1BOkRhbGUgQ291bnR5CisyNDpVUzpVU0E6VU5JVEVEIFNUQVRFUzpBTEFCQU1BOkRhbGxhcyBDb3VudHkKKzI1OlVTOlVTQTpVTklURUQgU1RBVEVTOkFMQUJBTUE6RGVLYWxiIENvdW50eQorMjY6VVM6VVNBOlVOSVRFRCBTVEFURVM6QUxBQkFNQTpFbG1vcmUgQ291bnR5CisyNzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpBTEFCQU1BOkVzY2FtYmlhIENvdW50eQorMjg6VVM6VVNBOlVOSVRFRCBTVEFURVM6QUxBQkFNQTpFdG93YWggQ291bnR5CisyOTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpBTEFCQU1BOkZheWV0dGUgQ291bnR5CiszMDpVUzpVU0E6VU5JVEVEIFNUQVRFUzpBTEFCQU1BOkZyYW5rbGluIENvdW50eQorMzE6VVM6VVNBOlVOSVRFRCBTVEFURVM6QUxBQkFNQTpHZW5ldmEgQ291bnR5CiszMjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpBTEFCQU1BOkdyZWVuZSBDb3VudHkKKzMzOlVTOlVTQTpVTklURUQgU1RBVEVTOkFMQUJBTUE6SGFsZSBDb3VudHkKKzM0OlVTOlVTQTpVTklURUQgU1RBVEVTOkFMQUJBTUE6SGVucnkgQ291bnR5CiszNTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpBTEFCQU1BOkhvdXN0b24gQ291bnR5CiszNjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpBTEFCQU1BOkphY2tzb24gQ291bnR5CiszNzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpBTEFCQU1BOkplZmZlcnNvbiBDb3VudHkKKzM4OlVTOlVTQTpVTklURUQgU1RBVEVTOkFMQUJBTUE6TGFtYXIgQ291bnR5CiszOTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpBTEFCQU1BOkxhdWRlcmRhbGUgQ291bnR5Cis0MDpVUzpVU0E6VU5JVEVEIFNUQVRFUzpBTEFCQU1BOkxhd3JlbmNlIENvdW50eQorNDE6VVM6VVNBOlVOSVRFRCBTVEFURVM6QUxBQkFNQTpMZWUgQ291bnR5Cis0MjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpBTEFCQU1BOkxpbWVzdG9uZSBDb3VudHkKKzQzOlVTOlVTQTpVTklURUQgU1RBVEVTOkFMQUJBTUE6TG93bmRlcyBDb3VudHkKKzQ0OlVTOlVTQTpVTklURUQgU1RBVEVTOkFMQUJBTUE6TWFjb24gQ291bnR5Cis0NTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpBTEFCQU1BOk1hZGlzb24gQ291bnR5Cis0NjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpBTEFCQU1BOk1hcmVuZ28gQ291bnR5Cis0NzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpBTEFCQU1BOk1hcmlvbiBDb3VudHkKKzQ4OlVTOlVTQTpVTklURUQgU1RBVEVTOkFMQUJBTUE6TWFyc2hhbGwgQ291bnR5Cis0OTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpBTEFCQU1BOk1vYmlsZSBDb3VudHkKKzUwOlVTOlVTQTpVTklURUQgU1RBVEVTOkFMQUJBTUE6TW9ucm9lIENvdW50eQorNTE6VVM6VVNBOlVOSVRFRCBTVEFURVM6QUxBQkFNQTpNb250Z29tZXJ5IENvdW50eQorNTI6VVM6VVNBOlVOSVRFRCBTVEFURVM6QUxBQkFNQTpNb3JnYW4gQ291bnR5Cis1MzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpBTEFCQU1BOlBlcnJ5IENvdW50eQorNTQ6VVM6VVNBOlVOSVRFRCBTVEFURVM6QUxBQkFNQTpQaWNrZW5zIENvdW50eQorNTU6VVM6VVNBOlVOSVRFRCBTVEFURVM6QUxBQkFNQTpQaWtlIENvdW50eQorNTY6VVM6VVNBOlVOSVRFRCBTVEFURVM6QUxBQkFNQTpSYW5kb2xwaCBDb3VudHkKKzU3OlVTOlVTQTpVTklURUQgU1RBVEVTOkFMQUJBTUE6UnVzc2VsbCBDb3VudHkKKzU4OlVTOlVTQTpVTklURUQgU1RBVEVTOkFMQUJBTUE6U2hlbGJ5IENvdW50eQorNTk6VVM6VVNBOlVOSVRFRCBTVEFURVM6QUxBQkFNQTpTdC4gQ2xhaXIgQ291bnR5Cis2MDpVUzpVU0E6VU5JVEVEIFNUQVRFUzpBTEFCQU1BOlN1bXRlciBDb3VudHkKKzYxOlVTOlVTQTpVTklURUQgU1RBVEVTOkFMQUJBTUE6VGFsbGFkZWdhIENvdW50eQorNjI6VVM6VVNBOlVOSVRFRCBTVEFURVM6QUxBQkFNQTpUYWxsYXBvb3NhIENvdW50eQorNjM6VVM6VVNBOlVOSVRFRCBTVEFURVM6QUxBQkFNQTpUdXNjYWxvb3NhIENvdW50eQorNjQ6VVM6VVNBOlVOSVRFRCBTVEFURVM6QUxBQkFNQTpXYWxrZXIgQ291bnR5Cis2NTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpBTEFCQU1BOldhc2hpbmd0b24gQ291bnR5Cis2NjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpBTEFCQU1BOldpbGNveCBDb3VudHkKKzY3OlVTOlVTQTpVTklURUQgU1RBVEVTOkFMQUJBTUE6V2luc3RvbiBDb3VudHkKKzE6VVM6VVNBOlVOSVRFRCBTVEFURVM6Q09OTkVDVElDVVQ6RmFpcmZpZWxkIENvdW50eQorMjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpDT05ORUNUSUNVVDpIYXJ0Zm9yZCBDb3VudHkKKzM6VVM6VVNBOlVOSVRFRCBTVEFURVM6Q09OTkVDVElDVVQ6TGl0Y2hmaWVsZCBDb3VudHkKKzQ6VVM6VVNBOlVOSVRFRCBTVEFURVM6Q09OTkVDVElDVVQ6TWlkZGxlc2V4IENvdW50eQorNTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpDT05ORUNUSUNVVDpOZXcgSGF2ZW4gQ291bnR5Cis2OlVTOlVTQTpVTklURUQgU1RBVEVTOkNPTk5FQ1RJQ1VUOk5ldyBMb25kb24gQ291bnR5Cis3OlVTOlVTQTpVTklURUQgU1RBVEVTOkNPTk5FQ1RJQ1VUOlRvbGxhbmQgQ291bnR5Cis4OlVTOlVTQTpVTklURUQgU1RBVEVTOkNPTk5FQ1RJQ1VUOldpbmRoYW0gQ291bnR5CisxOlVTOlVTQTpVTklURUQgU1RBVEVTOk1PTlRBTkE6QmVhdmVyaGVhZCBDb3VudHkKKzI6VVM6VVNBOlVOSVRFRCBTVEFURVM6TU9OVEFOQTpCaWcgSG9ybiBDb3VudHkKKzM6VVM6VVNBOlVOSVRFRCBTVEFURVM6TU9OVEFOQTpCbGFpbmUgQ291bnR5Cis0OlVTOlVTQTpVTklURUQgU1RBVEVTOk1PTlRBTkE6QnJvYWR3YXRlciBDb3VudHkKKzU6VVM6VVNBOlVOSVRFRCBTVEFURVM6TU9OVEFOQTpDYXJib24gQ291bnR5Cis2OlVTOlVTQTpVTklURUQgU1RBVEVTOk1PTlRBTkE6Q2FydGVyIENvdW50eQorNzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpNT05UQU5BOkNhc2NhZGUgQ291bnR5Cis4OlVTOlVTQTpVTklURUQgU1RBVEVTOk1PTlRBTkE6Q2hvdXRlYXUgQ291bnR5Cis5OlVTOlVTQTpVTklURUQgU1RBVEVTOk1PTlRBTkE6Q3VzdGVyIENvdW50eQorMTA6VVM6VVNBOlVOSVRFRCBTVEFURVM6TU9OVEFOQTpEYW5pZWxzIENvdW50eQorMTE6VVM6VVNBOlVOSVRFRCBTVEFURVM6TU9OVEFOQTpEYXdzb24gQ291bnR5CisxMjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpNT05UQU5BOkRlZXIgTG9kZ2UgQ291bnR5CisxMzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpNT05UQU5BOkZhbGxvbiBDb3VudHkKKzE0OlVTOlVTQTpVTklURUQgU1RBVEVTOk1PTlRBTkE6RmVyZ3VzIENvdW50eQorMTU6VVM6VVNBOlVOSVRFRCBTVEFURVM6TU9OVEFOQTpGbGF0aGVhZCBDb3VudHkKKzE2OlVTOlVTQTpVTklURUQgU1RBVEVTOk1PTlRBTkE6R2FsbGF0aW4gQ291bnR5CisxNzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpNT05UQU5BOkdhcmZpZWxkIENvdW50eQorMTg6VVM6VVNBOlVOSVRFRCBTVEFURVM6TU9OVEFOQTpHbGFjaWVyIENvdW50eQorMTk6VVM6VVNBOlVOSVRFRCBTVEFURVM6TU9OVEFOQTpHb2xkZW4gVmFsbGV5IENvdW50eQorMjA6VVM6VVNBOlVOSVRFRCBTVEFURVM6TU9OVEFOQTpHcmFuaXRlIENvdW50eQorMjE6VVM6VVNBOlVOSVRFRCBTVEFURVM6TU9OVEFOQTpIaWxsIENvdW50eQorMjI6VVM6VVNBOlVOSVRFRCBTVEFURVM6TU9OVEFOQTpKZWZmZXJzb24gQ291bnR5CisyMzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpNT05UQU5BOkp1ZGl0aCBCYXNpbiBDb3VudHkKKzI0OlVTOlVTQTpVTklURUQgU1RBVEVTOk1PTlRBTkE6TGFrZSBDb3VudHkKKzI1OlVTOlVTQTpVTklURUQgU1RBVEVTOk1PTlRBTkE6TGV3aXMgYW5kIENsYXJrIENvdW50eQorMjY6VVM6VVNBOlVOSVRFRCBTVEFURVM6TU9OVEFOQTpMaWJlcnR5IENvdW50eQorMjc6VVM6VVNBOlVOSVRFRCBTVEFURVM6TU9OVEFOQTpMaW5jb2xuIENvdW50eQorMjg6VVM6VVNBOlVOSVRFRCBTVEFURVM6TU9OVEFOQTpNYWRpc29uIENvdW50eQorMjk6VVM6VVNBOlVOSVRFRCBTVEFURVM6TU9OVEFOQTpNY0NvbmUgQ291bnR5CiszMDpVUzpVU0E6VU5JVEVEIFNUQVRFUzpNT05UQU5BOk1lYWdoZXIgQ291bnR5CiszMTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpNT05UQU5BOk1pbmVyYWwgQ291bnR5CiszMjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpNT05UQU5BOk1pc3NvdWxhIENvdW50eQorMzM6VVM6VVNBOlVOSVRFRCBTVEFURVM6TU9OVEFOQTpNdXNzZWxzaGVsbCBDb3VudHkKKzM0OlVTOlVTQTpVTklURUQgU1RBVEVTOk1PTlRBTkE6UGFyayBDb3VudHkKKzM1OlVTOlVTQTpVTklURUQgU1RBVEVTOk1PTlRBTkE6UGV0cm9sZXVtIENvdW50eQorMzY6VVM6VVNBOlVOSVRFRCBTVEFURVM6TU9OVEFOQTpQaGlsbGlwcyBDb3VudHkKKzM3OlVTOlVTQTpVTklURUQgU1RBVEVTOk1PTlRBTkE6UG9uZGVyYSBDb3VudHkKKzM4OlVTOlVTQTpVTklURUQgU1RBVEVTOk1PTlRBTkE6UG93ZGVyIFJpdmVyIENvdW50eQorMzk6VVM6VVNBOlVOSVRFRCBTVEFURVM6TU9OVEFOQTpQb3dlbGwgQ291bnR5Cis0MDpVUzpVU0E6VU5JVEVEIFNUQVRFUzpNT05UQU5BOlByYWlyaWUgQ291bnR5Cis0MTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpNT05UQU5BOlJhdmFsbGkgQ291bnR5Cis0MjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpNT05UQU5BOlJpY2hsYW5kIENvdW50eQorNDM6VVM6VVNBOlVOSVRFRCBTVEFURVM6TU9OVEFOQTpSb29zZXZlbHQgQ291bnR5Cis0NDpVUzpVU0E6VU5JVEVEIFNUQVRFUzpNT05UQU5BOlJvc2VidWQgQ291bnR5Cis0NTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpNT05UQU5BOlNhbmRlcnMgQ291bnR5Cis0NjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpNT05UQU5BOlNoZXJpZGFuIENvdW50eQorNDc6VVM6VVNBOlVOSVRFRCBTVEFURVM6TU9OVEFOQTpTaWx2ZXIgQm93IENvdW50eQorNDg6VVM6VVNBOlVOSVRFRCBTVEFURVM6TU9OVEFOQTpTdGlsbHdhdGVyIENvdW50eQorNDk6VVM6VVNBOlVOSVRFRCBTVEFURVM6TU9OVEFOQTpTd2VldCBHcmFzcyBDb3VudHkKKzUwOlVTOlVTQTpVTklURUQgU1RBVEVTOk1PTlRBTkE6VGV0b24gQ291bnR5Cis1MTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpNT05UQU5BOlRvb2xlIENvdW50eQorNTI6VVM6VVNBOlVOSVRFRCBTVEFURVM6TU9OVEFOQTpUcmVhc3VyZSBDb3VudHkKKzUzOlVTOlVTQTpVTklURUQgU1RBVEVTOk1PTlRBTkE6VmFsbGV5IENvdW50eQorNTQ6VVM6VVNBOlVOSVRFRCBTVEFURVM6TU9OVEFOQTpXaGVhdGxhbmQgQ291bnR5Cis1NTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpNT05UQU5BOldpYmF1eCBDb3VudHkKKzU2OlVTOlVTQTpVTklURUQgU1RBVEVTOk1PTlRBTkE6WWVsbG93c3RvbmUgQ291bnR5CisxOlVTOlVTQTpVTklURUQgU1RBVEVTOk1BSU5FOkFuZHJvc2NvZ2dpbiBDb3VudHkKKzI6VVM6VVNBOlVOSVRFRCBTVEFURVM6TUFJTkU6QXJvb3N0b29rIENvdW50eQorMzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpNQUlORTpDdW1iZXJsYW5kIENvdW50eQorNDpVUzpVU0E6VU5JVEVEIFNUQVRFUzpNQUlORTpGcmFua2xpbiBDb3VudHkKKzU6VVM6VVNBOlVOSVRFRCBTVEFURVM6TUFJTkU6SGFuY29jayBDb3VudHkKKzY6VVM6VVNBOlVOSVRFRCBTVEFURVM6TUFJTkU6S2VubmViZWMgQ291bnR5Cis3OlVTOlVTQTpVTklURUQgU1RBVEVTOk1BSU5FOktub3ggQ291bnR5Cis4OlVTOlVTQTpVTklURUQgU1RBVEVTOk1BSU5FOkxpbmNvbG4gQ291bnR5Cis5OlVTOlVTQTpVTklURUQgU1RBVEVTOk1BSU5FOk94Zm9yZCBDb3VudHkKKzEwOlVTOlVTQTpVTklURUQgU1RBVEVTOk1BSU5FOlBlbm9ic2NvdCBDb3VudHkKKzExOlVTOlVTQTpVTklURUQgU1RBVEVTOk1BSU5FOlBpc2NhdGFxdWlzIENvdW50eQorMTI6VVM6VVNBOlVOSVRFRCBTVEFURVM6TUFJTkU6U2FnYWRhaG9jIENvdW50eQorMTM6VVM6VVNBOlVOSVRFRCBTVEFURVM6TUFJTkU6U29tZXJzZXQgQ291bnR5CisxNDpVUzpVU0E6VU5JVEVEIFNUQVRFUzpNQUlORTpXYWxkbyBDb3VudHkKKzE1OlVTOlVTQTpVTklURUQgU1RBVEVTOk1BSU5FOldhc2hpbmd0b24gQ291bnR5CisxNjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpNQUlORTpZb3JrIENvdW50eQorMTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpGTE9SSURBOkFsYWNodWEgQ291bnR5CisyOlVTOlVTQTpVTklURUQgU1RBVEVTOkZMT1JJREE6QmFrZXIgQ291bnR5CiszOlVTOlVTQTpVTklURUQgU1RBVEVTOkZMT1JJREE6QmF5IENvdW50eQorNDpVUzpVU0E6VU5JVEVEIFNUQVRFUzpGTE9SSURBOkJyYWRmb3JkIENvdW50eQorNTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpGTE9SSURBOkJyZXZhcmQgQ291bnR5Cis2OlVTOlVTQTpVTklURUQgU1RBVEVTOkZMT1JJREE6QnJvd2FyZCBDb3VudHkKKzc6VVM6VVNBOlVOSVRFRCBTVEFURVM6RkxPUklEQTpDYWxob3VuIENvdW50eQorODpVUzpVU0E6VU5JVEVEIFNUQVRFUzpGTE9SSURBOkNoYXJsb3R0ZSBDb3VudHkKKzk6VVM6VVNBOlVOSVRFRCBTVEFURVM6RkxPUklEQTpDaXRydXMgQ291bnR5CisxMDpVUzpVU0E6VU5JVEVEIFNUQVRFUzpGTE9SSURBOkNsYXkgQ291bnR5CisxMTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpGTE9SSURBOkNvbGxpZXIgQ291bnR5CisxMjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpGTE9SSURBOkNvbHVtYmlhIENvdW50eQorMTM6VVM6VVNBOlVOSVRFRCBTVEFURVM6RkxPUklEQTpEZVNvdG8gQ291bnR5CisxNDpVUzpVU0E6VU5JVEVEIFNUQVRFUzpGTE9SSURBOkRpeGllIENvdW50eQorMTU6VVM6VVNBOlVOSVRFRCBTVEFURVM6RkxPUklEQTpEdXZhbCBDb3VudHkKKzE2OlVTOlVTQTpVTklURUQgU1RBVEVTOkZMT1JJREE6RXNjYW1iaWEgQ291bnR5CisxNzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpGTE9SSURBOkZsYWdsZXIgQ291bnR5CisxODpVUzpVU0E6VU5JVEVEIFNUQVRFUzpGTE9SSURBOkZyYW5rbGluIENvdW50eQorMTk6VVM6VVNBOlVOSVRFRCBTVEFURVM6RkxPUklEQTpHYWRzZGVuIENvdW50eQorMjA6VVM6VVNBOlVOSVRFRCBTVEFURVM6RkxPUklEQTpHaWxjaHJpc3QgQ291bnR5CisyMTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpGTE9SSURBOkdsYWRlcyBDb3VudHkKKzIyOlVTOlVTQTpVTklURUQgU1RBVEVTOkZMT1JJREE6R3VsZiBDb3VudHkKKzIzOlVTOlVTQTpVTklURUQgU1RBVEVTOkZMT1JJREE6SGFtaWx0b24gQ291bnR5CisyNDpVUzpVU0E6VU5JVEVEIFNUQVRFUzpGTE9SSURBOkhhcmRlZSBDb3VudHkKKzI1OlVTOlVTQTpVTklURUQgU1RBVEVTOkZMT1JJREE6SGVuZHJ5IENvdW50eQorMjY6VVM6VVNBOlVOSVRFRCBTVEFURVM6RkxPUklEQTpIZXJuYW5kbyBDb3VudHkKKzI3OlVTOlVTQTpVTklURUQgU1RBVEVTOkZMT1JJREE6SGlnaGxhbmRzIENvdW50eQorMjg6VVM6VVNBOlVOSVRFRCBTVEFURVM6RkxPUklEQTpIaWxsc2Jvcm91Z2ggQ291bnR5CisyOTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpGTE9SSURBOkhvbG1lcyBDb3VudHkKKzMwOlVTOlVTQTpVTklURUQgU1RBVEVTOkZMT1JJREE6SW5kaWFuIFJpdmVyIENvdW50eQorMzE6VVM6VVNBOlVOSVRFRCBTVEFURVM6RkxPUklEQTpKYWNrc29uIENvdW50eQorMzI6VVM6VVNBOlVOSVRFRCBTVEFURVM6RkxPUklEQTpKZWZmZXJzb24gQ291bnR5CiszMzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpGTE9SSURBOkxhZmF5ZXR0ZSBDb3VudHkKKzM0OlVTOlVTQTpVTklURUQgU1RBVEVTOkZMT1JJREE6TGFrZSBDb3VudHkKKzM1OlVTOlVTQTpVTklURUQgU1RBVEVTOkZMT1JJREE6TGVlIENvdW50eQorMzY6VVM6VVNBOlVOSVRFRCBTVEFURVM6RkxPUklEQTpMZW9uIENvdW50eQorMzc6VVM6VVNBOlVOSVRFRCBTVEFURVM6RkxPUklEQTpMZXZ5IENvdW50eQorMzg6VVM6VVNBOlVOSVRFRCBTVEFURVM6RkxPUklEQTpMaWJlcnR5IENvdW50eQorMzk6VVM6VVNBOlVOSVRFRCBTVEFURVM6RkxPUklEQTpNYWRpc29uIENvdW50eQorNDA6VVM6VVNBOlVOSVRFRCBTVEFURVM6RkxPUklEQTpNYW5hdGVlIENvdW50eQorNDE6VVM6VVNBOlVOSVRFRCBTVEFURVM6RkxPUklEQTpNYXJpb24gQ291bnR5Cis0MjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpGTE9SSURBOk1hcnRpbiBDb3VudHkKKzQzOlVTOlVTQTpVTklURUQgU1RBVEVTOkZMT1JJREE6TWlhbWktRGFkZSBDb3VudHkKKzQ0OlVTOlVTQTpVTklURUQgU1RBVEVTOkZMT1JJREE6TW9ucm9lIENvdW50eQorNDU6VVM6VVNBOlVOSVRFRCBTVEFURVM6RkxPUklEQTpOYXNzYXUgQ291bnR5Cis0NjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpGTE9SSURBOk9rYWxvb3NhIENvdW50eQorNDc6VVM6VVNBOlVOSVRFRCBTVEFURVM6RkxPUklEQTpPa2VlY2hvYmVlIENvdW50eQorNDg6VVM6VVNBOlVOSVRFRCBTVEFURVM6RkxPUklEQTpPcmFuZ2UgQ291bnR5Cis0OTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpGTE9SSURBOk9zY2VvbGEgQ291bnR5Cis1MDpVUzpVU0E6VU5JVEVEIFNUQVRFUzpGTE9SSURBOlBhbG0gQmVhY2ggQ291bnR5Cis1MTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpGTE9SSURBOlBhc2NvIENvdW50eQorNTI6VVM6VVNBOlVOSVRFRCBTVEFURVM6RkxPUklEQTpQaW5lbGxhcyBDb3VudHkKKzUzOlVTOlVTQTpVTklURUQgU1RBVEVTOkZMT1JJREE6UG9sayBDb3VudHkKKzU0OlVTOlVTQTpVTklURUQgU1RBVEVTOkZMT1JJREE6UHV0bmFtIENvdW50eQorNTU6VVM6VVNBOlVOSVRFRCBTVEFURVM6RkxPUklEQTpTYW50YSBSb3NhIENvdW50eQorNTY6VVM6VVNBOlVOSVRFRCBTVEFURVM6RkxPUklEQTpTYXJhc290YSBDb3VudHkKKzU3OlVTOlVTQTpVTklURUQgU1RBVEVTOkZMT1JJREE6U2VtaW5vbGUgQ291bnR5Cis1ODpVUzpVU0E6VU5JVEVEIFNUQVRFUzpGTE9SSURBOlN0LiBKb2hucyBDb3VudHkKKzU5OlVTOlVTQTpVTklURUQgU1RBVEVTOkZMT1JJREE6U3QuIEx1Y2llIENvdW50eQorNjA6VVM6VVNBOlVOSVRFRCBTVEFURVM6RkxPUklEQTpTdW10ZXIgQ291bnR5Cis2MTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpGTE9SSURBOlN1d2FubmVlIENvdW50eQorNjI6VVM6VVNBOlVOSVRFRCBTVEFURVM6RkxPUklEQTpUYXlsb3IgQ291bnR5Cis2MzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpGTE9SSURBOlVuaW9uIENvdW50eQorNjQ6VVM6VVNBOlVOSVRFRCBTVEFURVM6RkxPUklEQTpWb2x1c2lhIENvdW50eQorNjU6VVM6VVNBOlVOSVRFRCBTVEFURVM6RkxPUklEQTpXYWt1bGxhIENvdW50eQorNjY6VVM6VVNBOlVOSVRFRCBTVEFURVM6RkxPUklEQTpXYWx0b24gQ291bnR5Cis2NzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpGTE9SSURBOldhc2hpbmd0b24gQ291bnR5CisxOlVTOlVTQTpVTklURUQgU1RBVEVTOlVUQUg6QmVhdmVyIENvdW50eQorMjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpVVEFIOkJveCBFbGRlciBDb3VudHkKKzM6VVM6VVNBOlVOSVRFRCBTVEFURVM6VVRBSDpDYWNoZSBDb3VudHkKKzQ6VVM6VVNBOlVOSVRFRCBTVEFURVM6VVRBSDpDYXJib24gQ291bnR5Cis1OlVTOlVTQTpVTklURUQgU1RBVEVTOlVUQUg6RGFnZ2V0dCBDb3VudHkKKzY6VVM6VVNBOlVOSVRFRCBTVEFURVM6VVRBSDpEYXZpcyBDb3VudHkKKzc6VVM6VVNBOlVOSVRFRCBTVEFURVM6VVRBSDpEdWNoZXNuZSBDb3VudHkKKzg6VVM6VVNBOlVOSVRFRCBTVEFURVM6VVRBSDpFbWVyeSBDb3VudHkKKzk6VVM6VVNBOlVOSVRFRCBTVEFURVM6VVRBSDpHYXJmaWVsZCBDb3VudHkKKzEwOlVTOlVTQTpVTklURUQgU1RBVEVTOlVUQUg6R3JhbmQgQ291bnR5CisxMTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpVVEFIOklyb24gQ291bnR5CisxMjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpVVEFIOkp1YWIgQ291bnR5CisxMzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpVVEFIOkthbmUgQ291bnR5CisxNDpVUzpVU0E6VU5JVEVEIFNUQVRFUzpVVEFIOk1pbGxhcmQgQ291bnR5CisxNTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpVVEFIOk1vcmdhbiBDb3VudHkKKzE2OlVTOlVTQTpVTklURUQgU1RBVEVTOlVUQUg6UGl1dGUgQ291bnR5CisxNzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpVVEFIOlJpY2ggQ291bnR5CisxODpVUzpVU0E6VU5JVEVEIFNUQVRFUzpVVEFIOlNhbHQgTGFrZSBDb3VudHkKKzE5OlVTOlVTQTpVTklURUQgU1RBVEVTOlVUQUg6U2FuIEp1YW4gQ291bnR5CisyMDpVUzpVU0E6VU5JVEVEIFNUQVRFUzpVVEFIOlNhbnBldGUgQ291bnR5CisyMTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpVVEFIOlNldmllciBDb3VudHkKKzIyOlVTOlVTQTpVTklURUQgU1RBVEVTOlVUQUg6U3VtbWl0IENvdW50eQorMjM6VVM6VVNBOlVOSVRFRCBTVEFURVM6VVRBSDpUb29lbGUgQ291bnR5CisyNDpVUzpVU0E6VU5JVEVEIFNUQVRFUzpVVEFIOlVpbnRhaCBDb3VudHkKKzI1OlVTOlVTQTpVTklURUQgU1RBVEVTOlVUQUg6VXRhaCBDb3VudHkKKzI2OlVTOlVTQTpVTklURUQgU1RBVEVTOlVUQUg6V2FzYXRjaCBDb3VudHkKKzI3OlVTOlVTQTpVTklURUQgU1RBVEVTOlVUQUg6V2FzaGluZ3RvbiBDb3VudHkKKzI4OlVTOlVTQTpVTklURUQgU1RBVEVTOlVUQUg6V2F5bmUgQ291bnR5CisyOTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpVVEFIOldlYmVyIENvdW50eQorMTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpORVcgSEFNUFNISVJFOkJlbGtuYXAgQ291bnR5CisyOlVTOlVTQTpVTklURUQgU1RBVEVTOk5FVyBIQU1QU0hJUkU6Q2Fycm9sbCBDb3VudHkKKzM6VVM6VVNBOlVOSVRFRCBTVEFURVM6TkVXIEhBTVBTSElSRTpDaGVzaGlyZSBDb3VudHkKKzQ6VVM6VVNBOlVOSVRFRCBTVEFURVM6TkVXIEhBTVBTSElSRTpDb29zIENvdW50eQorNTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpORVcgSEFNUFNISVJFOkdyYWZ0b24gQ291bnR5Cis2OlVTOlVTQTpVTklURUQgU1RBVEVTOk5FVyBIQU1QU0hJUkU6SGlsbHNib3JvdWdoIENvdW50eQorNzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpORVcgSEFNUFNISVJFOk1lcnJpbWFjayBDb3VudHkKKzg6VVM6VVNBOlVOSVRFRCBTVEFURVM6TkVXIEhBTVBTSElSRTpSb2NraW5naGFtIENvdW50eQorOTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpORVcgSEFNUFNISVJFOlN0cmFmZm9yZCBDb3VudHkKKzEwOlVTOlVTQTpVTklURUQgU1RBVEVTOk5FVyBIQU1QU0hJUkU6U3VsbGl2YW4gQ291bnR5CisxOlVTOlVTQTpVTklURUQgU1RBVEVTOklPV0E6QWRhaXIgQ291bnR5CisyOlVTOlVTQTpVTklURUQgU1RBVEVTOklPV0E6QWRhbXMgQ291bnR5CiszOlVTOlVTQTpVTklURUQgU1RBVEVTOklPV0E6QWxsYW1ha2VlIENvdW50eQorNDpVUzpVU0E6VU5JVEVEIFNUQVRFUzpJT1dBOkFwcGFub29zZSBDb3VudHkKKzU6VVM6VVNBOlVOSVRFRCBTVEFURVM6SU9XQTpBdWR1Ym9uIENvdW50eQorNjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpJT1dBOkJlbnRvbiBDb3VudHkKKzc6VVM6VVNBOlVOSVRFRCBTVEFURVM6SU9XQTpCbGFjayBIYXdrIENvdW50eQorODpVUzpVU0E6VU5JVEVEIFNUQVRFUzpJT1dBOkJvb25lIENvdW50eQorOTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpJT1dBOkJyZW1lciBDb3VudHkKKzEwOlVTOlVTQTpVTklURUQgU1RBVEVTOklPV0E6QnVjaGFuYW4gQ291bnR5CisxMTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpJT1dBOkJ1ZW5hIFZpc3RhIENvdW50eQorMTI6VVM6VVNBOlVOSVRFRCBTVEFURVM6SU9XQTpCdXRsZXIgQ291bnR5CisxMzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpJT1dBOkNhbGhvdW4gQ291bnR5CisxNDpVUzpVU0E6VU5JVEVEIFNUQVRFUzpJT1dBOkNhcnJvbGwgQ291bnR5CisxNTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpJT1dBOkNhc3MgQ291bnR5CisxNjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpJT1dBOkNlZGFyIENvdW50eQorMTc6VVM6VVNBOlVOSVRFRCBTVEFURVM6SU9XQTpDZXJybyBHb3JkbyBDb3VudHkKKzE4OlVTOlVTQTpVTklURUQgU1RBVEVTOklPV0E6Q2hlcm9rZWUgQ291bnR5CisxOTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpJT1dBOkNoaWNrYXNhdyBDb3VudHkKKzIwOlVTOlVTQTpVTklURUQgU1RBVEVTOklPV0E6Q2xhcmtlIENvdW50eQorMjE6VVM6VVNBOlVOSVRFRCBTVEFURVM6SU9XQTpDbGF5IENvdW50eQorMjI6VVM6VVNBOlVOSVRFRCBTVEFURVM6SU9XQTpDbGF5dG9uIENvdW50eQorMjM6VVM6VVNBOlVOSVRFRCBTVEFURVM6SU9XQTpDbGludG9uIENvdW50eQorMjQ6VVM6VVNBOlVOSVRFRCBTVEFURVM6SU9XQTpDcmF3Zm9yZCBDb3VudHkKKzI1OlVTOlVTQTpVTklURUQgU1RBVEVTOklPV0E6RGFsbGFzIENvdW50eQorMjY6VVM6VVNBOlVOSVRFRCBTVEFURVM6SU9XQTpEYXZpcyBDb3VudHkKKzI3OlVTOlVTQTpVTklURUQgU1RBVEVTOklPV0E6RGVjYXR1ciBDb3VudHkKKzI4OlVTOlVTQTpVTklURUQgU1RBVEVTOklPV0E6RGVsYXdhcmUgQ291bnR5CisyOTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpJT1dBOkRlcyBNb2luZXMgQ291bnR5CiszMDpVUzpVU0E6VU5JVEVEIFNUQVRFUzpJT1dBOkRpY2tpbnNvbiBDb3VudHkKKzMxOlVTOlVTQTpVTklURUQgU1RBVEVTOklPV0E6RHVidXF1ZSBDb3VudHkKKzMyOlVTOlVTQTpVTklURUQgU1RBVEVTOklPV0E6RW1tZXQgQ291bnR5CiszMzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpJT1dBOkZheWV0dGUgQ291bnR5CiszNDpVUzpVU0E6VU5JVEVEIFNUQVRFUzpJT1dBOkZsb3lkIENvdW50eQorMzU6VVM6VVNBOlVOSVRFRCBTVEFURVM6SU9XQTpGcmFua2xpbiBDb3VudHkKKzM2OlVTOlVTQTpVTklURUQgU1RBVEVTOklPV0E6RnJlbW9udCBDb3VudHkKKzM3OlVTOlVTQTpVTklURUQgU1RBVEVTOklPV0E6R3JlZW5lIENvdW50eQorMzg6VVM6VVNBOlVOSVRFRCBTVEFURVM6SU9XQTpHcnVuZHkgQ291bnR5CiszOTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpJT1dBOkd1dGhyaWUgQ291bnR5Cis0MDpVUzpVU0E6VU5JVEVEIFNUQVRFUzpJT1dBOkhhbWlsdG9uIENvdW50eQorNDE6VVM6VVNBOlVOSVRFRCBTVEFURVM6SU9XQTpIYW5jb2NrIENvdW50eQorNDI6VVM6VVNBOlVOSVRFRCBTVEFURVM6SU9XQTpIYXJkaW4gQ291bnR5Cis0MzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpJT1dBOkhhcnJpc29uIENvdW50eQorNDQ6VVM6VVNBOlVOSVRFRCBTVEFURVM6SU9XQTpIZW5yeSBDb3VudHkKKzQ1OlVTOlVTQTpVTklURUQgU1RBVEVTOklPV0E6SG93YXJkIENvdW50eQorNDY6VVM6VVNBOlVOSVRFRCBTVEFURVM6SU9XQTpIdW1ib2xkdCBDb3VudHkKKzQ3OlVTOlVTQTpVTklURUQgU1RBVEVTOklPV0E6SWRhIENvdW50eQorNDg6VVM6VVNBOlVOSVRFRCBTVEFURVM6SU9XQTpJb3dhIENvdW50eQorNDk6VVM6VVNBOlVOSVRFRCBTVEFURVM6SU9XQTpKYWNrc29uIENvdW50eQorNTA6VVM6VVNBOlVOSVRFRCBTVEFURVM6SU9XQTpKYXNwZXIgQ291bnR5Cis1MTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpJT1dBOkplZmZlcnNvbiBDb3VudHkKKzUyOlVTOlVTQTpVTklURUQgU1RBVEVTOklPV0E6Sm9obnNvbiBDb3VudHkKKzUzOlVTOlVTQTpVTklURUQgU1RBVEVTOklPV0E6Sm9uZXMgQ291bnR5Cis1NDpVUzpVU0E6VU5JVEVEIFNUQVRFUzpJT1dBOktlb2t1ayBDb3VudHkKKzU1OlVTOlVTQTpVTklURUQgU1RBVEVTOklPV0E6S29zc3V0aCBDb3VudHkKKzU2OlVTOlVTQTpVTklURUQgU1RBVEVTOklPV0E6TGVlIENvdW50eQorNTc6VVM6VVNBOlVOSVRFRCBTVEFURVM6SU9XQTpMaW5uIENvdW50eQorNTg6VVM6VVNBOlVOSVRFRCBTVEFURVM6SU9XQTpMb3Vpc2EgQ291bnR5Cis1OTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpJT1dBOkx1Y2FzIENvdW50eQorNjA6VVM6VVNBOlVOSVRFRCBTVEFURVM6SU9XQTpMeW9uIENvdW50eQorNjE6VVM6VVNBOlVOSVRFRCBTVEFURVM6SU9XQTpNYWRpc29uIENvdW50eQorNjI6VVM6VVNBOlVOSVRFRCBTVEFURVM6SU9XQTpNYWhhc2thIENvdW50eQorNjM6VVM6VVNBOlVOSVRFRCBTVEFURVM6SU9XQTpNYXJpb24gQ291bnR5Cis2NDpVUzpVU0E6VU5JVEVEIFNUQVRFUzpJT1dBOk1hcnNoYWxsIENvdW50eQorNjU6VVM6VVNBOlVOSVRFRCBTVEFURVM6SU9XQTpNaWxscyBDb3VudHkKKzY2OlVTOlVTQTpVTklURUQgU1RBVEVTOklPV0E6TWl0Y2hlbGwgQ291bnR5Cis2NzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpJT1dBOk1vbm9uYSBDb3VudHkKKzY4OlVTOlVTQTpVTklURUQgU1RBVEVTOklPV0E6TW9ucm9lIENvdW50eQorNjk6VVM6VVNBOlVOSVRFRCBTVEFURVM6SU9XQTpNb250Z29tZXJ5IENvdW50eQorNzA6VVM6VVNBOlVOSVRFRCBTVEFURVM6SU9XQTpNdXNjYXRpbmUgQ291bnR5Cis3MTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpJT1dBOk8nQnJpZW4gQ291bnR5Cis3MjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpJT1dBOk9zY2VvbGEgQ291bnR5Cis3MzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpJT1dBOlBhZ2UgQ291bnR5Cis3NDpVUzpVU0E6VU5JVEVEIFNUQVRFUzpJT1dBOlBhbG8gQWx0byBDb3VudHkKKzc1OlVTOlVTQTpVTklURUQgU1RBVEVTOklPV0E6UGx5bW91dGggQ291bnR5Cis3NjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpJT1dBOlBvY2Fob250YXMgQ291bnR5Cis3NzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpJT1dBOlBvbGsgQ291bnR5Cis3ODpVUzpVU0E6VU5JVEVEIFNUQVRFUzpJT1dBOlBvdHRhd2F0dGFtaWUgQ291bnR5Cis3OTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpJT1dBOlBvd2VzaGllayBDb3VudHkKKzgwOlVTOlVTQTpVTklURUQgU1RBVEVTOklPV0E6UmluZ2dvbGQgQ291bnR5Cis4MTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpJT1dBOlNhYyBDb3VudHkKKzgyOlVTOlVTQTpVTklURUQgU1RBVEVTOklPV0E6U2NvdHQgQ291bnR5Cis4MzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpJT1dBOlNoZWxieSBDb3VudHkKKzg0OlVTOlVTQTpVTklURUQgU1RBVEVTOklPV0E6U2lvdXggQ291bnR5Cis4NTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpJT1dBOlN0b3J5IENvdW50eQorODY6VVM6VVNBOlVOSVRFRCBTVEFURVM6SU9XQTpUYW1hIENvdW50eQorODc6VVM6VVNBOlVOSVRFRCBTVEFURVM6SU9XQTpUYXlsb3IgQ291bnR5Cis4ODpVUzpVU0E6VU5JVEVEIFNUQVRFUzpJT1dBOlVuaW9uIENvdW50eQorODk6VVM6VVNBOlVOSVRFRCBTVEFURVM6SU9XQTpWYW4gQnVyZW4gQ291bnR5Cis5MDpVUzpVU0E6VU5JVEVEIFNUQVRFUzpJT1dBOldhcGVsbG8gQ291bnR5Cis5MTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpJT1dBOldhcnJlbiBDb3VudHkKKzkyOlVTOlVTQTpVTklURUQgU1RBVEVTOklPV0E6V2FzaGluZ3RvbiBDb3VudHkKKzkzOlVTOlVTQTpVTklURUQgU1RBVEVTOklPV0E6V2F5bmUgQ291bnR5Cis5NDpVUzpVU0E6VU5JVEVEIFNUQVRFUzpJT1dBOldlYnN0ZXIgQ291bnR5Cis5NTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpJT1dBOldpbm5lYmFnbyBDb3VudHkKKzk2OlVTOlVTQTpVTklURUQgU1RBVEVTOklPV0E6V2lubmVzaGllayBDb3VudHkKKzk3OlVTOlVTQTpVTklURUQgU1RBVEVTOklPV0E6V29vZGJ1cnkgQ291bnR5Cis5ODpVUzpVU0E6VU5JVEVEIFNUQVRFUzpJT1dBOldvcnRoIENvdW50eQorOTk6VVM6VVNBOlVOSVRFRCBTVEFURVM6SU9XQTpXcmlnaHQgQ291bnR5CisxOlVTOlVTQTpVTklURUQgU1RBVEVTOklMTElOT0lTOkFkYW1zIENvdW50eQorMjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpJTExJTk9JUzpBbGV4YW5kZXIgQ291bnR5CiszOlVTOlVTQTpVTklURUQgU1RBVEVTOklMTElOT0lTOkJvbmQgQ291bnR5Cis0OlVTOlVTQTpVTklURUQgU1RBVEVTOklMTElOT0lTOkJvb25lIENvdW50eQorNTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpJTExJTk9JUzpCcm93biBDb3VudHkKKzY6VVM6VVNBOlVOSVRFRCBTVEFURVM6SUxMSU5PSVM6QnVyZWF1IENvdW50eQorNzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpJTExJTk9JUzpDYWxob3VuIENvdW50eQorODpVUzpVU0E6VU5JVEVEIFNUQVRFUzpJTExJTk9JUzpDYXJyb2xsIENvdW50eQorOTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpJTExJTk9JUzpDYXNzIENvdW50eQorMTA6VVM6VVNBOlVOSVRFRCBTVEFURVM6SUxMSU5PSVM6Q2hhbXBhaWduIENvdW50eQorMTE6VVM6VVNBOlVOSVRFRCBTVEFURVM6SUxMSU5PSVM6Q2hyaXN0aWFuIENvdW50eQorMTI6VVM6VVNBOlVOSVRFRCBTVEFURVM6SUxMSU5PSVM6Q2xhcmsgQ291bnR5CisxMzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpJTExJTk9JUzpDbGF5IENvdW50eQorMTQ6VVM6VVNBOlVOSVRFRCBTVEFURVM6SUxMSU5PSVM6Q2xpbnRvbiBDb3VudHkKKzE1OlVTOlVTQTpVTklURUQgU1RBVEVTOklMTElOT0lTOkNvbGVzIENvdW50eQorMTY6VVM6VVNBOlVOSVRFRCBTVEFURVM6SUxMSU5PSVM6Q29vayBDb3VudHkKKzE3OlVTOlVTQTpVTklURUQgU1RBVEVTOklMTElOT0lTOkNyYXdmb3JkIENvdW50eQorMTg6VVM6VVNBOlVOSVRFRCBTVEFURVM6SUxMSU5PSVM6Q3VtYmVybGFuZCBDb3VudHkKKzE5OlVTOlVTQTpVTklURUQgU1RBVEVTOklMTElOT0lTOkRlIFdpdHQgQ291bnR5CisyMDpVUzpVU0E6VU5JVEVEIFNUQVRFUzpJTExJTk9JUzpEZUthbGIgQ291bnR5CisyMTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpJTExJTk9JUzpEb3VnbGFzIENvdW50eQorMjI6VVM6VVNBOlVOSVRFRCBTVEFURVM6SUxMSU5PSVM6RHVQYWdlIENvdW50eQorMjM6VVM6VVNBOlVOSVRFRCBTVEFURVM6SUxMSU5PSVM6RWRnYXIgQ291bnR5CisyNDpVUzpVU0E6VU5JVEVEIFNUQVRFUzpJTExJTk9JUzpFZHdhcmRzIENvdW50eQorMjU6VVM6VVNBOlVOSVRFRCBTVEFURVM6SUxMSU5PSVM6RWZmaW5naGFtIENvdW50eQorMjY6VVM6VVNBOlVOSVRFRCBTVEFURVM6SUxMSU5PSVM6RmF5ZXR0ZSBDb3VudHkKKzI3OlVTOlVTQTpVTklURUQgU1RBVEVTOklMTElOT0lTOkZvcmQgQ291bnR5CisyODpVUzpVU0E6VU5JVEVEIFNUQVRFUzpJTExJTk9JUzpGcmFua2xpbiBDb3VudHkKKzI5OlVTOlVTQTpVTklURUQgU1RBVEVTOklMTElOT0lTOkZ1bHRvbiBDb3VudHkKKzMwOlVTOlVTQTpVTklURUQgU1RBVEVTOklMTElOT0lTOkdhbGxhdGluIENvdW50eQorMzE6VVM6VVNBOlVOSVRFRCBTVEFURVM6SUxMSU5PSVM6R3JlZW5lIENvdW50eQorMzI6VVM6VVNBOlVOSVRFRCBTVEFURVM6SUxMSU5PSVM6R3J1bmR5IENvdW50eQorMzM6VVM6VVNBOlVOSVRFRCBTVEFURVM6SUxMSU5PSVM6SGFtaWx0b24gQ291bnR5CiszNDpVUzpVU0E6VU5JVEVEIFNUQVRFUzpJTExJTk9JUzpIYW5jb2NrIENvdW50eQorMzU6VVM6VVNBOlVOSVRFRCBTVEFURVM6SUxMSU5PSVM6SGFyZGluIENvdW50eQorMzY6VVM6VVNBOlVOSVRFRCBTVEFURVM6SUxMSU5PSVM6SGVuZGVyc29uIENvdW50eQorMzc6VVM6VVNBOlVOSVRFRCBTVEFURVM6SUxMSU5PSVM6SGVucnkgQ291bnR5CiszODpVUzpVU0E6VU5JVEVEIFNUQVRFUzpJTExJTk9JUzpJcm9xdW9pcyBDb3VudHkKKzM5OlVTOlVTQTpVTklURUQgU1RBVEVTOklMTElOT0lTOkphY2tzb24gQ291bnR5Cis0MDpVUzpVU0E6VU5JVEVEIFNUQVRFUzpJTExJTk9JUzpKYXNwZXIgQ291bnR5Cis0MTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpJTExJTk9JUzpKZWZmZXJzb24gQ291bnR5Cis0MjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpJTExJTk9JUzpKZXJzZXkgQ291bnR5Cis0MzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpJTExJTk9JUzpKbyBEYXZpZXNzIENvdW50eQorNDQ6VVM6VVNBOlVOSVRFRCBTVEFURVM6SUxMSU5PSVM6Sm9obnNvbiBDb3VudHkKKzQ1OlVTOlVTQTpVTklURUQgU1RBVEVTOklMTElOT0lTOkthbmUgQ291bnR5Cis0NjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpJTExJTk9JUzpLYW5rYWtlZSBDb3VudHkKKzQ3OlVTOlVTQTpVTklURUQgU1RBVEVTOklMTElOT0lTOktlbmRhbGwgQ291bnR5Cis0ODpVUzpVU0E6VU5JVEVEIFNUQVRFUzpJTExJTk9JUzpLbm94IENvdW50eQorNDk6VVM6VVNBOlVOSVRFRCBTVEFURVM6SUxMSU5PSVM6TGEgU2FsbGUgQ291bnR5Cis1MDpVUzpVU0E6VU5JVEVEIFNUQVRFUzpJTExJTk9JUzpMYWtlIENvdW50eQorNTE6VVM6VVNBOlVOSVRFRCBTVEFURVM6SUxMSU5PSVM6TGF3cmVuY2UgQ291bnR5Cis1MjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpJTExJTk9JUzpMZWUgQ291bnR5Cis1MzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpJTExJTk9JUzpMaXZpbmdzdG9uIENvdW50eQorNTQ6VVM6VVNBOlVOSVRFRCBTVEFURVM6SUxMSU5PSVM6TG9nYW4gQ291bnR5Cis1NTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpJTExJTk9JUzpNYWNvbiBDb3VudHkKKzU2OlVTOlVTQTpVTklURUQgU1RBVEVTOklMTElOT0lTOk1hY291cGluIENvdW50eQorNTc6VVM6VVNBOlVOSVRFRCBTVEFURVM6SUxMSU5PSVM6TWFkaXNvbiBDb3VudHkKKzU4OlVTOlVTQTpVTklURUQgU1RBVEVTOklMTElOT0lTOk1hcmlvbiBDb3VudHkKKzU5OlVTOlVTQTpVTklURUQgU1RBVEVTOklMTElOT0lTOk1hcnNoYWxsIENvdW50eQorNjA6VVM6VVNBOlVOSVRFRCBTVEFURVM6SUxMSU5PSVM6TWFzb24gQ291bnR5Cis2MTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpJTExJTk9JUzpNYXNzYWMgQ291bnR5Cis2MjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpJTExJTk9JUzpNY0Rvbm91Z2ggQ291bnR5Cis2MzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpJTExJTk9JUzpNY0hlbnJ5IENvdW50eQorNjQ6VVM6VVNBOlVOSVRFRCBTVEFURVM6SUxMSU5PSVM6TWNMZWFuIENvdW50eQorNjU6VVM6VVNBOlVOSVRFRCBTVEFURVM6SUxMSU5PSVM6TWVuYXJkIENvdW50eQorNjY6VVM6VVNBOlVOSVRFRCBTVEFURVM6SUxMSU5PSVM6TWVyY2VyIENvdW50eQorNjc6VVM6VVNBOlVOSVRFRCBTVEFURVM6SUxMSU5PSVM6TW9ucm9lIENvdW50eQorNjg6VVM6VVNBOlVOSVRFRCBTVEFURVM6SUxMSU5PSVM6TW9udGdvbWVyeSBDb3VudHkKKzY5OlVTOlVTQTpVTklURUQgU1RBVEVTOklMTElOT0lTOk1vcmdhbiBDb3VudHkKKzcwOlVTOlVTQTpVTklURUQgU1RBVEVTOklMTElOT0lTOk1vdWx0cmllIENvdW50eQorNzE6VVM6VVNBOlVOSVRFRCBTVEFURVM6SUxMSU5PSVM6T2dsZSBDb3VudHkKKzcyOlVTOlVTQTpVTklURUQgU1RBVEVTOklMTElOT0lTOlBlb3JpYSBDb3VudHkKKzczOlVTOlVTQTpVTklURUQgU1RBVEVTOklMTElOT0lTOlBlcnJ5IENvdW50eQorNzQ6VVM6VVNBOlVOSVRFRCBTVEFURVM6SUxMSU5PSVM6UGlhdHQgQ291bnR5Cis3NTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpJTExJTk9JUzpQaWtlIENvdW50eQorNzY6VVM6VVNBOlVOSVRFRCBTVEFURVM6SUxMSU5PSVM6UG9wZSBDb3VudHkKKzc3OlVTOlVTQTpVTklURUQgU1RBVEVTOklMTElOT0lTOlB1bGFza2kgQ291bnR5Cis3ODpVUzpVU0E6VU5JVEVEIFNUQVRFUzpJTExJTk9JUzpQdXRuYW0gQ291bnR5Cis3OTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpJTExJTk9JUzpSYW5kb2xwaCBDb3VudHkKKzgwOlVTOlVTQTpVTklURUQgU1RBVEVTOklMTElOT0lTOlJpY2hsYW5kIENvdW50eQorODE6VVM6VVNBOlVOSVRFRCBTVEFURVM6SUxMSU5PSVM6Um9jayBJc2xhbmQgQ291bnR5Cis4MjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpJTExJTk9JUzpTYWxpbmUgQ291bnR5Cis4MzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpJTExJTk9JUzpTYW5nYW1vbiBDb3VudHkKKzg0OlVTOlVTQTpVTklURUQgU1RBVEVTOklMTElOT0lTOlNjaHV5bGVyIENvdW50eQorODU6VVM6VVNBOlVOSVRFRCBTVEFURVM6SUxMSU5PSVM6U2NvdHQgQ291bnR5Cis4NjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpJTExJTk9JUzpTaGVsYnkgQ291bnR5Cis4NzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpJTExJTk9JUzpTdC4gQ2xhaXIgQ291bnR5Cis4ODpVUzpVU0E6VU5JVEVEIFNUQVRFUzpJTExJTk9JUzpTdGFyayBDb3VudHkKKzg5OlVTOlVTQTpVTklURUQgU1RBVEVTOklMTElOT0lTOlN0ZXBoZW5zb24gQ291bnR5Cis5MDpVUzpVU0E6VU5JVEVEIFNUQVRFUzpJTExJTk9JUzpUYXpld2VsbCBDb3VudHkKKzkxOlVTOlVTQTpVTklURUQgU1RBVEVTOklMTElOT0lTOlVuaW9uIENvdW50eQorOTI6VVM6VVNBOlVOSVRFRCBTVEFURVM6SUxMSU5PSVM6VmVybWlsaW9uIENvdW50eQorOTM6VVM6VVNBOlVOSVRFRCBTVEFURVM6SUxMSU5PSVM6V2FiYXNoIENvdW50eQorOTQ6VVM6VVNBOlVOSVRFRCBTVEFURVM6SUxMSU5PSVM6V2FycmVuIENvdW50eQorOTU6VVM6VVNBOlVOSVRFRCBTVEFURVM6SUxMSU5PSVM6V2FzaGluZ3RvbiBDb3VudHkKKzk2OlVTOlVTQTpVTklURUQgU1RBVEVTOklMTElOT0lTOldheW5lIENvdW50eQorOTc6VVM6VVNBOlVOSVRFRCBTVEFURVM6SUxMSU5PSVM6V2hpdGUgQ291bnR5Cis5ODpVUzpVU0E6VU5JVEVEIFNUQVRFUzpJTExJTk9JUzpXaGl0ZXNpZGUgQ291bnR5Cis5OTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpJTExJTk9JUzpXaWxsIENvdW50eQorMTAwOlVTOlVTQTpVTklURUQgU1RBVEVTOklMTElOT0lTOldpbGxpYW1zb24gQ291bnR5CisxMDE6VVM6VVNBOlVOSVRFRCBTVEFURVM6SUxMSU5PSVM6V2lubmViYWdvIENvdW50eQorMTAyOlVTOlVTQTpVTklURUQgU1RBVEVTOklMTElOT0lTOldvb2Rmb3JkIENvdW50eQorMTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpOT1JUSCBEQUtPVEE6QWRhbXMgQ291bnR5CisyOlVTOlVTQTpVTklURUQgU1RBVEVTOk5PUlRIIERBS09UQTpCYXJuZXMgQ291bnR5CiszOlVTOlVTQTpVTklURUQgU1RBVEVTOk5PUlRIIERBS09UQTpCZW5zb24gQ291bnR5Cis0OlVTOlVTQTpVTklURUQgU1RBVEVTOk5PUlRIIERBS09UQTpCaWxsaW5ncyBDb3VudHkKKzU6VVM6VVNBOlVOSVRFRCBTVEFURVM6Tk9SVEggREFLT1RBOkJvdHRpbmVhdSBDb3VudHkKKzY6VVM6VVNBOlVOSVRFRCBTVEFURVM6Tk9SVEggREFLT1RBOkJvd21hbiBDb3VudHkKKzc6VVM6VVNBOlVOSVRFRCBTVEFURVM6Tk9SVEggREFLT1RBOkJ1cmtlIENvdW50eQorODpVUzpVU0E6VU5JVEVEIFNUQVRFUzpOT1JUSCBEQUtPVEE6QnVybGVpZ2ggQ291bnR5Cis5OlVTOlVTQTpVTklURUQgU1RBVEVTOk5PUlRIIERBS09UQTpDYXNzIENvdW50eQorMTA6VVM6VVNBOlVOSVRFRCBTVEFURVM6Tk9SVEggREFLT1RBOkNhdmFsaWVyIENvdW50eQorMTE6VVM6VVNBOlVOSVRFRCBTVEFURVM6Tk9SVEggREFLT1RBOkRpY2tleSBDb3VudHkKKzEyOlVTOlVTQTpVTklURUQgU1RBVEVTOk5PUlRIIERBS09UQTpEaXZpZGUgQ291bnR5CisxMzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpOT1JUSCBEQUtPVEE6RHVubiBDb3VudHkKKzE0OlVTOlVTQTpVTklURUQgU1RBVEVTOk5PUlRIIERBS09UQTpFZGR5IENvdW50eQorMTU6VVM6VVNBOlVOSVRFRCBTVEFURVM6Tk9SVEggREFLT1RBOkVtbW9ucyBDb3VudHkKKzE2OlVTOlVTQTpVTklURUQgU1RBVEVTOk5PUlRIIERBS09UQTpGb3N0ZXIgQ291bnR5CisxNzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpOT1JUSCBEQUtPVEE6R29sZGVuIFZhbGxleSBDb3VudHkKKzE4OlVTOlVTQTpVTklURUQgU1RBVEVTOk5PUlRIIERBS09UQTpHcmFuZCBGb3JrcyBDb3VudHkKKzE5OlVTOlVTQTpVTklURUQgU1RBVEVTOk5PUlRIIERBS09UQTpHcmFudCBDb3VudHkKKzIwOlVTOlVTQTpVTklURUQgU1RBVEVTOk5PUlRIIERBS09UQTpHcmlnZ3MgQ291bnR5CisyMTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpOT1JUSCBEQUtPVEE6SGV0dGluZ2VyIENvdW50eQorMjI6VVM6VVNBOlVOSVRFRCBTVEFURVM6Tk9SVEggREFLT1RBOktpZGRlciBDb3VudHkKKzIzOlVTOlVTQTpVTklURUQgU1RBVEVTOk5PUlRIIERBS09UQTpMYU1vdXJlIENvdW50eQorMjQ6VVM6VVNBOlVOSVRFRCBTVEFURVM6Tk9SVEggREFLT1RBOkxvZ2FuIENvdW50eQorMjU6VVM6VVNBOlVOSVRFRCBTVEFURVM6Tk9SVEggREFLT1RBOk1jSGVucnkgQ291bnR5CisyNjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpOT1JUSCBEQUtPVEE6TWNJbnRvc2ggQ291bnR5CisyNzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpOT1JUSCBEQUtPVEE6TWNLZW56aWUgQ291bnR5CisyODpVUzpVU0E6VU5JVEVEIFNUQVRFUzpOT1JUSCBEQUtPVEE6TWNMZWFuIENvdW50eQorMjk6VVM6VVNBOlVOSVRFRCBTVEFURVM6Tk9SVEggREFLT1RBOk1lcmNlciBDb3VudHkKKzMwOlVTOlVTQTpVTklURUQgU1RBVEVTOk5PUlRIIERBS09UQTpNb3J0b24gQ291bnR5CiszMTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpOT1JUSCBEQUtPVEE6TW91bnRyYWlsIENvdW50eQorMzI6VVM6VVNBOlVOSVRFRCBTVEFURVM6Tk9SVEggREFLT1RBOk5lbHNvbiBDb3VudHkKKzMzOlVTOlVTQTpVTklURUQgU1RBVEVTOk5PUlRIIERBS09UQTpPbGl2ZXIgQ291bnR5CiszNDpVUzpVU0E6VU5JVEVEIFNUQVRFUzpOT1JUSCBEQUtPVEE6UGVtYmluYSBDb3VudHkKKzM1OlVTOlVTQTpVTklURUQgU1RBVEVTOk5PUlRIIERBS09UQTpQaWVyY2UgQ291bnR5CiszNjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpOT1JUSCBEQUtPVEE6UmFtc2V5IENvdW50eQorMzc6VVM6VVNBOlVOSVRFRCBTVEFURVM6Tk9SVEggREFLT1RBOlJhbnNvbSBDb3VudHkKKzM4OlVTOlVTQTpVTklURUQgU1RBVEVTOk5PUlRIIERBS09UQTpSZW52aWxsZSBDb3VudHkKKzM5OlVTOlVTQTpVTklURUQgU1RBVEVTOk5PUlRIIERBS09UQTpSaWNobGFuZCBDb3VudHkKKzQwOlVTOlVTQTpVTklURUQgU1RBVEVTOk5PUlRIIERBS09UQTpSb2xldHRlIENvdW50eQorNDE6VVM6VVNBOlVOSVRFRCBTVEFURVM6Tk9SVEggREFLT1RBOlNhcmdlbnQgQ291bnR5Cis0MjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpOT1JUSCBEQUtPVEE6U2hlcmlkYW4gQ291bnR5Cis0MzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpOT1JUSCBEQUtPVEE6U2lvdXggQ291bnR5Cis0NDpVUzpVU0E6VU5JVEVEIFNUQVRFUzpOT1JUSCBEQUtPVEE6U2xvcGUgQ291bnR5Cis0NTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpOT1JUSCBEQUtPVEE6U3RhcmsgQ291bnR5Cis0NjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpOT1JUSCBEQUtPVEE6U3RlZWxlIENvdW50eQorNDc6VVM6VVNBOlVOSVRFRCBTVEFURVM6Tk9SVEggREFLT1RBOlN0dXRzbWFuIENvdW50eQorNDg6VVM6VVNBOlVOSVRFRCBTVEFURVM6Tk9SVEggREFLT1RBOlRvd25lciBDb3VudHkKKzQ5OlVTOlVTQTpVTklURUQgU1RBVEVTOk5PUlRIIERBS09UQTpUcmFpbGwgQ291bnR5Cis1MDpVUzpVU0E6VU5JVEVEIFNUQVRFUzpOT1JUSCBEQUtPVEE6V2Fsc2ggQ291bnR5Cis1MTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpOT1JUSCBEQUtPVEE6V2FyZCBDb3VudHkKKzUyOlVTOlVTQTpVTklURUQgU1RBVEVTOk5PUlRIIERBS09UQTpXZWxscyBDb3VudHkKKzUzOlVTOlVTQTpVTklURUQgU1RBVEVTOk5PUlRIIERBS09UQTpXaWxsaWFtcyBDb3VudHkKKzE6VVM6VVNBOlVOSVRFRCBTVEFURVM6TUlTU09VUkk6QWRhaXIgQ291bnR5CisyOlVTOlVTQTpVTklURUQgU1RBVEVTOk1JU1NPVVJJOkFuZHJldyBDb3VudHkKKzM6VVM6VVNBOlVOSVRFRCBTVEFURVM6TUlTU09VUkk6QXRjaGlzb24gQ291bnR5Cis0OlVTOlVTQTpVTklURUQgU1RBVEVTOk1JU1NPVVJJOkF1ZHJhaW4gQ291bnR5Cis1OlVTOlVTQTpVTklURUQgU1RBVEVTOk1JU1NPVVJJOkJhcnJ5IENvdW50eQorNjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpNSVNTT1VSSTpCYXJ0b24gQ291bnR5Cis3OlVTOlVTQTpVTklURUQgU1RBVEVTOk1JU1NPVVJJOkJhdGVzIENvdW50eQorODpVUzpVU0E6VU5JVEVEIFNUQVRFUzpNSVNTT1VSSTpCZW50b24gQ291bnR5Cis5OlVTOlVTQTpVTklURUQgU1RBVEVTOk1JU1NPVVJJOkJvbGxpbmdlciBDb3VudHkKKzEwOlVTOlVTQTpVTklURUQgU1RBVEVTOk1JU1NPVVJJOkJvb25lIENvdW50eQorMTE6VVM6VVNBOlVOSVRFRCBTVEFURVM6TUlTU09VUkk6QnVjaGFuYW4gQ291bnR5CisxMjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpNSVNTT1VSSTpCdXRsZXIgQ291bnR5CisxMzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpNSVNTT1VSSTpDYWxkd2VsbCBDb3VudHkKKzE0OlVTOlVTQTpVTklURUQgU1RBVEVTOk1JU1NPVVJJOkNhbGxhd2F5IENvdW50eQorMTU6VVM6VVNBOlVOSVRFRCBTVEFURVM6TUlTU09VUkk6Q2FtZGVuIENvdW50eQorMTY6VVM6VVNBOlVOSVRFRCBTVEFURVM6TUlTU09VUkk6Q2FwZSBHaXJhcmRlYXUgQ291bnR5CisxNzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpNSVNTT1VSSTpDYXJyb2xsIENvdW50eQorMTg6VVM6VVNBOlVOSVRFRCBTVEFURVM6TUlTU09VUkk6Q2FydGVyIENvdW50eQorMTk6VVM6VVNBOlVOSVRFRCBTVEFURVM6TUlTU09VUkk6Q2FzcyBDb3VudHkKKzIwOlVTOlVTQTpVTklURUQgU1RBVEVTOk1JU1NPVVJJOkNlZGFyIENvdW50eQorMjE6VVM6VVNBOlVOSVRFRCBTVEFURVM6TUlTU09VUkk6Q2hhcml0b24gQ291bnR5CisyMjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpNSVNTT1VSSTpDaHJpc3RpYW4gQ291bnR5CisyMzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpNSVNTT1VSSTpDbGFyayBDb3VudHkKKzI0OlVTOlVTQTpVTklURUQgU1RBVEVTOk1JU1NPVVJJOkNsYXkgQ291bnR5CisyNTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpNSVNTT1VSSTpDbGludG9uIENvdW50eQorMjY6VVM6VVNBOlVOSVRFRCBTVEFURVM6TUlTU09VUkk6Q29sZSBDb3VudHkKKzI3OlVTOlVTQTpVTklURUQgU1RBVEVTOk1JU1NPVVJJOkNvb3BlciBDb3VudHkKKzI4OlVTOlVTQTpVTklURUQgU1RBVEVTOk1JU1NPVVJJOkNyYXdmb3JkIENvdW50eQorMjk6VVM6VVNBOlVOSVRFRCBTVEFURVM6TUlTU09VUkk6RGFkZSBDb3VudHkKKzMwOlVTOlVTQTpVTklURUQgU1RBVEVTOk1JU1NPVVJJOkRhbGxhcyBDb3VudHkKKzMxOlVTOlVTQTpVTklURUQgU1RBVEVTOk1JU1NPVVJJOkRhdmllc3MgQ291bnR5CiszMjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpNSVNTT1VSSTpEZUthbGIgQ291bnR5CiszMzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpNSVNTT1VSSTpEZW50IENvdW50eQorMzQ6VVM6VVNBOlVOSVRFRCBTVEFURVM6TUlTU09VUkk6RG91Z2xhcyBDb3VudHkKKzM1OlVTOlVTQTpVTklURUQgU1RBVEVTOk1JU1NPVVJJOkR1bmtsaW4gQ291bnR5CiszNjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpNSVNTT1VSSTpGcmFua2xpbiBDb3VudHkKKzM3OlVTOlVTQTpVTklURUQgU1RBVEVTOk1JU1NPVVJJOkdhc2NvbmFkZSBDb3VudHkKKzM4OlVTOlVTQTpVTklURUQgU1RBVEVTOk1JU1NPVVJJOkdlbnRyeSBDb3VudHkKKzM5OlVTOlVTQTpVTklURUQgU1RBVEVTOk1JU1NPVVJJOkdyZWVuZSBDb3VudHkKKzQwOlVTOlVTQTpVTklURUQgU1RBVEVTOk1JU1NPVVJJOkdydW5keSBDb3VudHkKKzQxOlVTOlVTQTpVTklURUQgU1RBVEVTOk1JU1NPVVJJOkhhcnJpc29uIENvdW50eQorNDI6VVM6VVNBOlVOSVRFRCBTVEFURVM6TUlTU09VUkk6SGVucnkgQ291bnR5Cis0MzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpNSVNTT1VSSTpIaWNrb3J5IENvdW50eQorNDQ6VVM6VVNBOlVOSVRFRCBTVEFURVM6TUlTU09VUkk6SG9sdCBDb3VudHkKKzQ1OlVTOlVTQTpVTklURUQgU1RBVEVTOk1JU1NPVVJJOkhvd2FyZCBDb3VudHkKKzQ2OlVTOlVTQTpVTklURUQgU1RBVEVTOk1JU1NPVVJJOkhvd2VsbCBDb3VudHkKKzQ3OlVTOlVTQTpVTklURUQgU1RBVEVTOk1JU1NPVVJJOklyb24gQ291bnR5Cis0ODpVUzpVU0E6VU5JVEVEIFNUQVRFUzpNSVNTT1VSSTpKYWNrc29uIENvdW50eQorNDk6VVM6VVNBOlVOSVRFRCBTVEFURVM6TUlTU09VUkk6SmFzcGVyIENvdW50eQorNTA6VVM6VVNBOlVOSVRFRCBTVEFURVM6TUlTU09VUkk6SmVmZmVyc29uIENvdW50eQorNTE6VVM6VVNBOlVOSVRFRCBTVEFURVM6TUlTU09VUkk6Sm9obnNvbiBDb3VudHkKKzUyOlVTOlVTQTpVTklURUQgU1RBVEVTOk1JU1NPVVJJOktub3ggQ291bnR5Cis1MzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpNSVNTT1VSSTpMYWNsZWRlIENvdW50eQorNTQ6VVM6VVNBOlVOSVRFRCBTVEFURVM6TUlTU09VUkk6TGFmYXlldHRlIENvdW50eQorNTU6VVM6VVNBOlVOSVRFRCBTVEFURVM6TUlTU09VUkk6TGF3cmVuY2UgQ291bnR5Cis1NjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpNSVNTT1VSSTpMZXdpcyBDb3VudHkKKzU3OlVTOlVTQTpVTklURUQgU1RBVEVTOk1JU1NPVVJJOkxpbmNvbG4gQ291bnR5Cis1ODpVUzpVU0E6VU5JVEVEIFNUQVRFUzpNSVNTT1VSSTpMaW5uIENvdW50eQorNTk6VVM6VVNBOlVOSVRFRCBTVEFURVM6TUlTU09VUkk6TGl2aW5nc3RvbiBDb3VudHkKKzYwOlVTOlVTQTpVTklURUQgU1RBVEVTOk1JU1NPVVJJOk1hY29uIENvdW50eQorNjE6VVM6VVNBOlVOSVRFRCBTVEFURVM6TUlTU09VUkk6TWFkaXNvbiBDb3VudHkKKzYyOlVTOlVTQTpVTklURUQgU1RBVEVTOk1JU1NPVVJJOk1hcmllcyBDb3VudHkKKzYzOlVTOlVTQTpVTklURUQgU1RBVEVTOk1JU1NPVVJJOk1hcmlvbiBDb3VudHkKKzY0OlVTOlVTQTpVTklURUQgU1RBVEVTOk1JU1NPVVJJOk1jRG9uYWxkIENvdW50eQorNjU6VVM6VVNBOlVOSVRFRCBTVEFURVM6TUlTU09VUkk6TWVyY2VyIENvdW50eQorNjY6VVM6VVNBOlVOSVRFRCBTVEFURVM6TUlTU09VUkk6TWlsbGVyIENvdW50eQorNjc6VVM6VVNBOlVOSVRFRCBTVEFURVM6TUlTU09VUkk6TWlzc2lzc2lwcGkgQ291bnR5Cis2ODpVUzpVU0E6VU5JVEVEIFNUQVRFUzpNSVNTT1VSSTpNb25pdGVhdSBDb3VudHkKKzY5OlVTOlVTQTpVTklURUQgU1RBVEVTOk1JU1NPVVJJOk1vbnJvZSBDb3VudHkKKzcwOlVTOlVTQTpVTklURUQgU1RBVEVTOk1JU1NPVVJJOk1vbnRnb21lcnkgQ291bnR5Cis3MTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpNSVNTT1VSSTpNb3JnYW4gQ291bnR5Cis3MjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpNSVNTT1VSSTpOZXcgTWFkcmlkIENvdW50eQorNzM6VVM6VVNBOlVOSVRFRCBTVEFURVM6TUlTU09VUkk6TmV3dG9uIENvdW50eQorNzQ6VVM6VVNBOlVOSVRFRCBTVEFURVM6TUlTU09VUkk6Tm9kYXdheSBDb3VudHkKKzc1OlVTOlVTQTpVTklURUQgU1RBVEVTOk1JU1NPVVJJOk9yZWdvbiBDb3VudHkKKzc2OlVTOlVTQTpVTklURUQgU1RBVEVTOk1JU1NPVVJJOk9zYWdlIENvdW50eQorNzc6VVM6VVNBOlVOSVRFRCBTVEFURVM6TUlTU09VUkk6T3phcmsgQ291bnR5Cis3ODpVUzpVU0E6VU5JVEVEIFNUQVRFUzpNSVNTT1VSSTpQZW1pc2NvdCBDb3VudHkKKzc5OlVTOlVTQTpVTklURUQgU1RBVEVTOk1JU1NPVVJJOlBlcnJ5IENvdW50eQorODA6VVM6VVNBOlVOSVRFRCBTVEFURVM6TUlTU09VUkk6UGV0dGlzIENvdW50eQorODE6VVM6VVNBOlVOSVRFRCBTVEFURVM6TUlTU09VUkk6UGhlbHBzIENvdW50eQorODI6VVM6VVNBOlVOSVRFRCBTVEFURVM6TUlTU09VUkk6UGlrZSBDb3VudHkKKzgzOlVTOlVTQTpVTklURUQgU1RBVEVTOk1JU1NPVVJJOlBsYXR0ZSBDb3VudHkKKzg0OlVTOlVTQTpVTklURUQgU1RBVEVTOk1JU1NPVVJJOlBvbGsgQ291bnR5Cis4NTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpNSVNTT1VSSTpQdWxhc2tpIENvdW50eQorODY6VVM6VVNBOlVOSVRFRCBTVEFURVM6TUlTU09VUkk6UHV0bmFtIENvdW50eQorODc6VVM6VVNBOlVOSVRFRCBTVEFURVM6TUlTU09VUkk6UmFsbHMgQ291bnR5Cis4ODpVUzpVU0E6VU5JVEVEIFNUQVRFUzpNSVNTT1VSSTpSYW5kb2xwaCBDb3VudHkKKzg5OlVTOlVTQTpVTklURUQgU1RBVEVTOk1JU1NPVVJJOlJheSBDb3VudHkKKzkwOlVTOlVTQTpVTklURUQgU1RBVEVTOk1JU1NPVVJJOlJleW5vbGRzIENvdW50eQorOTE6VVM6VVNBOlVOSVRFRCBTVEFURVM6TUlTU09VUkk6UmlwbGV5IENvdW50eQorOTI6VVM6VVNBOlVOSVRFRCBTVEFURVM6TUlTU09VUkk6U2FsaW5lIENvdW50eQorOTM6VVM6VVNBOlVOSVRFRCBTVEFURVM6TUlTU09VUkk6U2NodXlsZXIgQ291bnR5Cis5NDpVUzpVU0E6VU5JVEVEIFNUQVRFUzpNSVNTT1VSSTpTY290bGFuZCBDb3VudHkKKzk1OlVTOlVTQTpVTklURUQgU1RBVEVTOk1JU1NPVVJJOlNjb3R0IENvdW50eQorOTY6VVM6VVNBOlVOSVRFRCBTVEFURVM6TUlTU09VUkk6U2hhbm5vbiBDb3VudHkKKzk3OlVTOlVTQTpVTklURUQgU1RBVEVTOk1JU1NPVVJJOlNoZWxieSBDb3VudHkKKzk4OlVTOlVTQTpVTklURUQgU1RBVEVTOk1JU1NPVVJJOlN0LiBDaGFybGVzIENvdW50eQorOTk6VVM6VVNBOlVOSVRFRCBTVEFURVM6TUlTU09VUkk6U3QuIENsYWlyIENvdW50eQorMTAwOlVTOlVTQTpVTklURUQgU1RBVEVTOk1JU1NPVVJJOlN0LiBGcmFuY29pcyBDb3VudHkKKzEwMTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpNSVNTT1VSSTpTdC4gTG91aXMgQ291bnR5CisxMDI6VVM6VVNBOlVOSVRFRCBTVEFURVM6TUlTU09VUkk6U3QuIExvdWlzIGNpdHkKKzEwMzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpNSVNTT1VSSTpTdGUuIEdlbmV2aWV2ZSBDb3VudHkKKzEwNDpVUzpVU0E6VU5JVEVEIFNUQVRFUzpNSVNTT1VSSTpTdG9kZGFyZCBDb3VudHkKKzEwNTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpNSVNTT1VSSTpTdG9uZSBDb3VudHkKKzEwNjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpNSVNTT1VSSTpTdWxsaXZhbiBDb3VudHkKKzEwNzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpNSVNTT1VSSTpUYW5leSBDb3VudHkKKzEwODpVUzpVU0E6VU5JVEVEIFNUQVRFUzpNSVNTT1VSSTpUZXhhcyBDb3VudHkKKzEwOTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpNSVNTT1VSSTpWZXJub24gQ291bnR5CisxMTA6VVM6VVNBOlVOSVRFRCBTVEFURVM6TUlTU09VUkk6V2FycmVuIENvdW50eQorMTExOlVTOlVTQTpVTklURUQgU1RBVEVTOk1JU1NPVVJJOldhc2hpbmd0b24gQ291bnR5CisxMTI6VVM6VVNBOlVOSVRFRCBTVEFURVM6TUlTU09VUkk6V2F5bmUgQ291bnR5CisxMTM6VVM6VVNBOlVOSVRFRCBTVEFURVM6TUlTU09VUkk6V2Vic3RlciBDb3VudHkKKzExNDpVUzpVU0E6VU5JVEVEIFNUQVRFUzpNSVNTT1VSSTpXb3J0aCBDb3VudHkKKzExNTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpNSVNTT1VSSTpXcmlnaHQgQ291bnR5CisxOlVTOlVTQTpVTklURUQgU1RBVEVTOklORElBTkE6QWRhbXMgQ291bnR5CisyOlVTOlVTQTpVTklURUQgU1RBVEVTOklORElBTkE6QWxsZW4gQ291bnR5CiszOlVTOlVTQTpVTklURUQgU1RBVEVTOklORElBTkE6QmFydGhvbG9tZXcgQ291bnR5Cis0OlVTOlVTQTpVTklURUQgU1RBVEVTOklORElBTkE6QmVudG9uIENvdW50eQorNTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpJTkRJQU5BOkJsYWNrZm9yZCBDb3VudHkKKzY6VVM6VVNBOlVOSVRFRCBTVEFURVM6SU5ESUFOQTpCb29uZSBDb3VudHkKKzc6VVM6VVNBOlVOSVRFRCBTVEFURVM6SU5ESUFOQTpCcm93biBDb3VudHkKKzg6VVM6VVNBOlVOSVRFRCBTVEFURVM6SU5ESUFOQTpDYXJyb2xsIENvdW50eQorOTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpJTkRJQU5BOkNhc3MgQ291bnR5CisxMDpVUzpVU0E6VU5JVEVEIFNUQVRFUzpJTkRJQU5BOkNsYXJrIENvdW50eQorMTE6VVM6VVNBOlVOSVRFRCBTVEFURVM6SU5ESUFOQTpDbGF5IENvdW50eQorMTI6VVM6VVNBOlVOSVRFRCBTVEFURVM6SU5ESUFOQTpDbGludG9uIENvdW50eQorMTM6VVM6VVNBOlVOSVRFRCBTVEFURVM6SU5ESUFOQTpDcmF3Zm9yZCBDb3VudHkKKzE0OlVTOlVTQTpVTklURUQgU1RBVEVTOklORElBTkE6RGF2aWVzcyBDb3VudHkKKzE1OlVTOlVTQTpVTklURUQgU1RBVEVTOklORElBTkE6RGVLYWxiIENvdW50eQorMTY6VVM6VVNBOlVOSVRFRCBTVEFURVM6SU5ESUFOQTpEZWFyYm9ybiBDb3VudHkKKzE3OlVTOlVTQTpVTklURUQgU1RBVEVTOklORElBTkE6RGVjYXR1ciBDb3VudHkKKzE4OlVTOlVTQTpVTklURUQgU1RBVEVTOklORElBTkE6RGVsYXdhcmUgQ291bnR5CisxOTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpJTkRJQU5BOkR1Ym9pcyBDb3VudHkKKzIwOlVTOlVTQTpVTklURUQgU1RBVEVTOklORElBTkE6RWxraGFydCBDb3VudHkKKzIxOlVTOlVTQTpVTklURUQgU1RBVEVTOklORElBTkE6RmF5ZXR0ZSBDb3VudHkKKzIyOlVTOlVTQTpVTklURUQgU1RBVEVTOklORElBTkE6RmxveWQgQ291bnR5CisyMzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpJTkRJQU5BOkZvdW50YWluIENvdW50eQorMjQ6VVM6VVNBOlVOSVRFRCBTVEFURVM6SU5ESUFOQTpGcmFua2xpbiBDb3VudHkKKzI1OlVTOlVTQTpVTklURUQgU1RBVEVTOklORElBTkE6RnVsdG9uIENvdW50eQorMjY6VVM6VVNBOlVOSVRFRCBTVEFURVM6SU5ESUFOQTpHaWJzb24gQ291bnR5CisyNzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpJTkRJQU5BOkdyYW50IENvdW50eQorMjg6VVM6VVNBOlVOSVRFRCBTVEFURVM6SU5ESUFOQTpHcmVlbmUgQ291bnR5CisyOTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpJTkRJQU5BOkhhbWlsdG9uIENvdW50eQorMzA6VVM6VVNBOlVOSVRFRCBTVEFURVM6SU5ESUFOQTpIYW5jb2NrIENvdW50eQorMzE6VVM6VVNBOlVOSVRFRCBTVEFURVM6SU5ESUFOQTpIYXJyaXNvbiBDb3VudHkKKzMyOlVTOlVTQTpVTklURUQgU1RBVEVTOklORElBTkE6SGVuZHJpY2tzIENvdW50eQorMzM6VVM6VVNBOlVOSVRFRCBTVEFURVM6SU5ESUFOQTpIZW5yeSBDb3VudHkKKzM0OlVTOlVTQTpVTklURUQgU1RBVEVTOklORElBTkE6SG93YXJkIENvdW50eQorMzU6VVM6VVNBOlVOSVRFRCBTVEFURVM6SU5ESUFOQTpIdW50aW5ndG9uIENvdW50eQorMzY6VVM6VVNBOlVOSVRFRCBTVEFURVM6SU5ESUFOQTpKYWNrc29uIENvdW50eQorMzc6VVM6VVNBOlVOSVRFRCBTVEFURVM6SU5ESUFOQTpKYXNwZXIgQ291bnR5CiszODpVUzpVU0E6VU5JVEVEIFNUQVRFUzpJTkRJQU5BOkpheSBDb3VudHkKKzM5OlVTOlVTQTpVTklURUQgU1RBVEVTOklORElBTkE6SmVmZmVyc29uIENvdW50eQorNDA6VVM6VVNBOlVOSVRFRCBTVEFURVM6SU5ESUFOQTpKZW5uaW5ncyBDb3VudHkKKzQxOlVTOlVTQTpVTklURUQgU1RBVEVTOklORElBTkE6Sm9obnNvbiBDb3VudHkKKzQyOlVTOlVTQTpVTklURUQgU1RBVEVTOklORElBTkE6S25veCBDb3VudHkKKzQzOlVTOlVTQTpVTklURUQgU1RBVEVTOklORElBTkE6S29zY2l1c2tvIENvdW50eQorNDQ6VVM6VVNBOlVOSVRFRCBTVEFURVM6SU5ESUFOQTpMYUdyYW5nZSBDb3VudHkKKzQ1OlVTOlVTQTpVTklURUQgU1RBVEVTOklORElBTkE6TGFQb3J0ZSBDb3VudHkKKzQ2OlVTOlVTQTpVTklURUQgU1RBVEVTOklORElBTkE6TGFrZSBDb3VudHkKKzQ3OlVTOlVTQTpVTklURUQgU1RBVEVTOklORElBTkE6TGF3cmVuY2UgQ291bnR5Cis0ODpVUzpVU0E6VU5JVEVEIFNUQVRFUzpJTkRJQU5BOk1hZGlzb24gQ291bnR5Cis0OTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpJTkRJQU5BOk1hcmlvbiBDb3VudHkKKzUwOlVTOlVTQTpVTklURUQgU1RBVEVTOklORElBTkE6TWFyc2hhbGwgQ291bnR5Cis1MTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpJTkRJQU5BOk1hcnRpbiBDb3VudHkKKzUyOlVTOlVTQTpVTklURUQgU1RBVEVTOklORElBTkE6TWlhbWkgQ291bnR5Cis1MzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpJTkRJQU5BOk1vbnJvZSBDb3VudHkKKzU0OlVTOlVTQTpVTklURUQgU1RBVEVTOklORElBTkE6TW9udGdvbWVyeSBDb3VudHkKKzU1OlVTOlVTQTpVTklURUQgU1RBVEVTOklORElBTkE6TW9yZ2FuIENvdW50eQorNTY6VVM6VVNBOlVOSVRFRCBTVEFURVM6SU5ESUFOQTpOZXd0b24gQ291bnR5Cis1NzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpJTkRJQU5BOk5vYmxlIENvdW50eQorNTg6VVM6VVNBOlVOSVRFRCBTVEFURVM6SU5ESUFOQTpPaGlvIENvdW50eQorNTk6VVM6VVNBOlVOSVRFRCBTVEFURVM6SU5ESUFOQTpPcmFuZ2UgQ291bnR5Cis2MDpVUzpVU0E6VU5JVEVEIFNUQVRFUzpJTkRJQU5BOk93ZW4gQ291bnR5Cis2MTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpJTkRJQU5BOlBhcmtlIENvdW50eQorNjI6VVM6VVNBOlVOSVRFRCBTVEFURVM6SU5ESUFOQTpQZXJyeSBDb3VudHkKKzYzOlVTOlVTQTpVTklURUQgU1RBVEVTOklORElBTkE6UGlrZSBDb3VudHkKKzY0OlVTOlVTQTpVTklURUQgU1RBVEVTOklORElBTkE6UG9ydGVyIENvdW50eQorNjU6VVM6VVNBOlVOSVRFRCBTVEFURVM6SU5ESUFOQTpQb3NleSBDb3VudHkKKzY2OlVTOlVTQTpVTklURUQgU1RBVEVTOklORElBTkE6UHVsYXNraSBDb3VudHkKKzY3OlVTOlVTQTpVTklURUQgU1RBVEVTOklORElBTkE6UHV0bmFtIENvdW50eQorNjg6VVM6VVNBOlVOSVRFRCBTVEFURVM6SU5ESUFOQTpSYW5kb2xwaCBDb3VudHkKKzY5OlVTOlVTQTpVTklURUQgU1RBVEVTOklORElBTkE6UmlwbGV5IENvdW50eQorNzA6VVM6VVNBOlVOSVRFRCBTVEFURVM6SU5ESUFOQTpSdXNoIENvdW50eQorNzE6VVM6VVNBOlVOSVRFRCBTVEFURVM6SU5ESUFOQTpTY290dCBDb3VudHkKKzcyOlVTOlVTQTpVTklURUQgU1RBVEVTOklORElBTkE6U2hlbGJ5IENvdW50eQorNzM6VVM6VVNBOlVOSVRFRCBTVEFURVM6SU5ESUFOQTpTcGVuY2VyIENvdW50eQorNzQ6VVM6VVNBOlVOSVRFRCBTVEFURVM6SU5ESUFOQTpTdC4gSm9zZXBoIENvdW50eQorNzU6VVM6VVNBOlVOSVRFRCBTVEFURVM6SU5ESUFOQTpTdGFya2UgQ291bnR5Cis3NjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpJTkRJQU5BOlN0ZXViZW4gQ291bnR5Cis3NzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpJTkRJQU5BOlN1bGxpdmFuIENvdW50eQorNzg6VVM6VVNBOlVOSVRFRCBTVEFURVM6SU5ESUFOQTpTd2l0emVybGFuZCBDb3VudHkKKzc5OlVTOlVTQTpVTklURUQgU1RBVEVTOklORElBTkE6VGlwcGVjYW5vZSBDb3VudHkKKzgwOlVTOlVTQTpVTklURUQgU1RBVEVTOklORElBTkE6VGlwdG9uIENvdW50eQorODE6VVM6VVNBOlVOSVRFRCBTVEFURVM6SU5ESUFOQTpVbmlvbiBDb3VudHkKKzgyOlVTOlVTQTpVTklURUQgU1RBVEVTOklORElBTkE6VmFuZGVyYnVyZ2ggQ291bnR5Cis4MzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpJTkRJQU5BOlZlcm1pbGxpb24gQ291bnR5Cis4NDpVUzpVU0E6VU5JVEVEIFNUQVRFUzpJTkRJQU5BOlZpZ28gQ291bnR5Cis4NTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpJTkRJQU5BOldhYmFzaCBDb3VudHkKKzg2OlVTOlVTQTpVTklURUQgU1RBVEVTOklORElBTkE6V2FycmVuIENvdW50eQorODc6VVM6VVNBOlVOSVRFRCBTVEFURVM6SU5ESUFOQTpXYXJyaWNrIENvdW50eQorODg6VVM6VVNBOlVOSVRFRCBTVEFURVM6SU5ESUFOQTpXYXNoaW5ndG9uIENvdW50eQorODk6VVM6VVNBOlVOSVRFRCBTVEFURVM6SU5ESUFOQTpXYXluZSBDb3VudHkKKzkwOlVTOlVTQTpVTklURUQgU1RBVEVTOklORElBTkE6V2VsbHMgQ291bnR5Cis5MTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpJTkRJQU5BOldoaXRlIENvdW50eQorOTI6VVM6VVNBOlVOSVRFRCBTVEFURVM6SU5ESUFOQTpXaGl0bGV5IENvdW50eQorMTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpXQVNISU5HVE9OOkFkYW1zIENvdW50eQorMjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpXQVNISU5HVE9OOkFzb3RpbiBDb3VudHkKKzM6VVM6VVNBOlVOSVRFRCBTVEFURVM6V0FTSElOR1RPTjpCZW50b24gQ291bnR5Cis0OlVTOlVTQTpVTklURUQgU1RBVEVTOldBU0hJTkdUT046Q2hlbGFuIENvdW50eQorNTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpXQVNISU5HVE9OOkNsYWxsYW0gQ291bnR5Cis2OlVTOlVTQTpVTklURUQgU1RBVEVTOldBU0hJTkdUT046Q2xhcmsgQ291bnR5Cis3OlVTOlVTQTpVTklURUQgU1RBVEVTOldBU0hJTkdUT046Q29sdW1iaWEgQ291bnR5Cis4OlVTOlVTQTpVTklURUQgU1RBVEVTOldBU0hJTkdUT046Q293bGl0eiBDb3VudHkKKzk6VVM6VVNBOlVOSVRFRCBTVEFURVM6V0FTSElOR1RPTjpEb3VnbGFzIENvdW50eQorMTA6VVM6VVNBOlVOSVRFRCBTVEFURVM6V0FTSElOR1RPTjpGZXJyeSBDb3VudHkKKzExOlVTOlVTQTpVTklURUQgU1RBVEVTOldBU0hJTkdUT046RnJhbmtsaW4gQ291bnR5CisxMjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpXQVNISU5HVE9OOkdhcmZpZWxkIENvdW50eQorMTM6VVM6VVNBOlVOSVRFRCBTVEFURVM6V0FTSElOR1RPTjpHcmFudCBDb3VudHkKKzE0OlVTOlVTQTpVTklURUQgU1RBVEVTOldBU0hJTkdUT046R3JheXMgSGFyYm9yIENvdW50eQorMTU6VVM6VVNBOlVOSVRFRCBTVEFURVM6V0FTSElOR1RPTjpJc2xhbmQgQ291bnR5CisxNjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpXQVNISU5HVE9OOkplZmZlcnNvbiBDb3VudHkKKzE3OlVTOlVTQTpVTklURUQgU1RBVEVTOldBU0hJTkdUT046S2luZyBDb3VudHkKKzE4OlVTOlVTQTpVTklURUQgU1RBVEVTOldBU0hJTkdUT046S2l0c2FwIENvdW50eQorMTk6VVM6VVNBOlVOSVRFRCBTVEFURVM6V0FTSElOR1RPTjpLaXR0aXRhcyBDb3VudHkKKzIwOlVTOlVTQTpVTklURUQgU1RBVEVTOldBU0hJTkdUT046S2xpY2tpdGF0IENvdW50eQorMjE6VVM6VVNBOlVOSVRFRCBTVEFURVM6V0FTSElOR1RPTjpMZXdpcyBDb3VudHkKKzIyOlVTOlVTQTpVTklURUQgU1RBVEVTOldBU0hJTkdUT046TGluY29sbiBDb3VudHkKKzIzOlVTOlVTQTpVTklURUQgU1RBVEVTOldBU0hJTkdUT046TWFzb24gQ291bnR5CisyNDpVUzpVU0E6VU5JVEVEIFNUQVRFUzpXQVNISU5HVE9OOk9rYW5vZ2FuIENvdW50eQorMjU6VVM6VVNBOlVOSVRFRCBTVEFURVM6V0FTSElOR1RPTjpQYWNpZmljIENvdW50eQorMjY6VVM6VVNBOlVOSVRFRCBTVEFURVM6V0FTSElOR1RPTjpQZW5kIE9yZWlsbGUgQ291bnR5CisyNzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpXQVNISU5HVE9OOlBpZXJjZSBDb3VudHkKKzI4OlVTOlVTQTpVTklURUQgU1RBVEVTOldBU0hJTkdUT046U2FuIEp1YW4gQ291bnR5CisyOTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpXQVNISU5HVE9OOlNrYWdpdCBDb3VudHkKKzMwOlVTOlVTQTpVTklURUQgU1RBVEVTOldBU0hJTkdUT046U2thbWFuaWEgQ291bnR5CiszMTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpXQVNISU5HVE9OOlNub2hvbWlzaCBDb3VudHkKKzMyOlVTOlVTQTpVTklURUQgU1RBVEVTOldBU0hJTkdUT046U3Bva2FuZSBDb3VudHkKKzMzOlVTOlVTQTpVTklURUQgU1RBVEVTOldBU0hJTkdUT046U3RldmVucyBDb3VudHkKKzM0OlVTOlVTQTpVTklURUQgU1RBVEVTOldBU0hJTkdUT046VGh1cnN0b24gQ291bnR5CiszNTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpXQVNISU5HVE9OOldhaGtpYWt1bSBDb3VudHkKKzM2OlVTOlVTQTpVTklURUQgU1RBVEVTOldBU0hJTkdUT046V2FsbGEgV2FsbGEgQ291bnR5CiszNzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpXQVNISU5HVE9OOldoYXRjb20gQ291bnR5CiszODpVUzpVU0E6VU5JVEVEIFNUQVRFUzpXQVNISU5HVE9OOldoaXRtYW4gQ291bnR5CiszOTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpXQVNISU5HVE9OOllha2ltYSBDb3VudHkKKzE6VVM6VVNBOlVOSVRFRCBTVEFURVM6QVJLQU5TQVM6QXJrYW5zYXMgQ291bnR5CisyOlVTOlVTQTpVTklURUQgU1RBVEVTOkFSS0FOU0FTOkFzaGxleSBDb3VudHkKKzM6VVM6VVNBOlVOSVRFRCBTVEFURVM6QVJLQU5TQVM6QmF4dGVyIENvdW50eQorNDpVUzpVU0E6VU5JVEVEIFNUQVRFUzpBUktBTlNBUzpCZW50b24gQ291bnR5Cis1OlVTOlVTQTpVTklURUQgU1RBVEVTOkFSS0FOU0FTOkJvb25lIENvdW50eQorNjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpBUktBTlNBUzpCcmFkbGV5IENvdW50eQorNzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpBUktBTlNBUzpDYWxob3VuIENvdW50eQorODpVUzpVU0E6VU5JVEVEIFNUQVRFUzpBUktBTlNBUzpDYXJyb2xsIENvdW50eQorOTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpBUktBTlNBUzpDaGljb3QgQ291bnR5CisxMDpVUzpVU0E6VU5JVEVEIFNUQVRFUzpBUktBTlNBUzpDbGFyayBDb3VudHkKKzExOlVTOlVTQTpVTklURUQgU1RBVEVTOkFSS0FOU0FTOkNsYXkgQ291bnR5CisxMjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpBUktBTlNBUzpDbGVidXJuZSBDb3VudHkKKzEzOlVTOlVTQTpVTklURUQgU1RBVEVTOkFSS0FOU0FTOkNsZXZlbGFuZCBDb3VudHkKKzE0OlVTOlVTQTpVTklURUQgU1RBVEVTOkFSS0FOU0FTOkNvbHVtYmlhIENvdW50eQorMTU6VVM6VVNBOlVOSVRFRCBTVEFURVM6QVJLQU5TQVM6Q29ud2F5IENvdW50eQorMTY6VVM6VVNBOlVOSVRFRCBTVEFURVM6QVJLQU5TQVM6Q3JhaWdoZWFkIENvdW50eQorMTc6VVM6VVNBOlVOSVRFRCBTVEFURVM6QVJLQU5TQVM6Q3Jhd2ZvcmQgQ291bnR5CisxODpVUzpVU0E6VU5JVEVEIFNUQVRFUzpBUktBTlNBUzpDcml0dGVuZGVuIENvdW50eQorMTk6VVM6VVNBOlVOSVRFRCBTVEFURVM6QVJLQU5TQVM6Q3Jvc3MgQ291bnR5CisyMDpVUzpVU0E6VU5JVEVEIFNUQVRFUzpBUktBTlNBUzpEYWxsYXMgQ291bnR5CisyMTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpBUktBTlNBUzpEZXNoYSBDb3VudHkKKzIyOlVTOlVTQTpVTklURUQgU1RBVEVTOkFSS0FOU0FTOkRyZXcgQ291bnR5CisyMzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpBUktBTlNBUzpGYXVsa25lciBDb3VudHkKKzI0OlVTOlVTQTpVTklURUQgU1RBVEVTOkFSS0FOU0FTOkZyYW5rbGluIENvdW50eQorMjU6VVM6VVNBOlVOSVRFRCBTVEFURVM6QVJLQU5TQVM6RnVsdG9uIENvdW50eQorMjY6VVM6VVNBOlVOSVRFRCBTVEFURVM6QVJLQU5TQVM6R2FybGFuZCBDb3VudHkKKzI3OlVTOlVTQTpVTklURUQgU1RBVEVTOkFSS0FOU0FTOkdyYW50IENvdW50eQorMjg6VVM6VVNBOlVOSVRFRCBTVEFURVM6QVJLQU5TQVM6R3JlZW5lIENvdW50eQorMjk6VVM6VVNBOlVOSVRFRCBTVEFURVM6QVJLQU5TQVM6SGVtcHN0ZWFkIENvdW50eQorMzA6VVM6VVNBOlVOSVRFRCBTVEFURVM6QVJLQU5TQVM6SG90IFNwcmluZyBDb3VudHkKKzMxOlVTOlVTQTpVTklURUQgU1RBVEVTOkFSS0FOU0FTOkhvd2FyZCBDb3VudHkKKzMyOlVTOlVTQTpVTklURUQgU1RBVEVTOkFSS0FOU0FTOkluZGVwZW5kZW5jZSBDb3VudHkKKzMzOlVTOlVTQTpVTklURUQgU1RBVEVTOkFSS0FOU0FTOkl6YXJkIENvdW50eQorMzQ6VVM6VVNBOlVOSVRFRCBTVEFURVM6QVJLQU5TQVM6SmFja3NvbiBDb3VudHkKKzM1OlVTOlVTQTpVTklURUQgU1RBVEVTOkFSS0FOU0FTOkplZmZlcnNvbiBDb3VudHkKKzM2OlVTOlVTQTpVTklURUQgU1RBVEVTOkFSS0FOU0FTOkpvaG5zb24gQ291bnR5CiszNzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpBUktBTlNBUzpMYWZheWV0dGUgQ291bnR5CiszODpVUzpVU0E6VU5JVEVEIFNUQVRFUzpBUktBTlNBUzpMYXdyZW5jZSBDb3VudHkKKzM5OlVTOlVTQTpVTklURUQgU1RBVEVTOkFSS0FOU0FTOkxlZSBDb3VudHkKKzQwOlVTOlVTQTpVTklURUQgU1RBVEVTOkFSS0FOU0FTOkxpbmNvbG4gQ291bnR5Cis0MTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpBUktBTlNBUzpMaXR0bGUgUml2ZXIgQ291bnR5Cis0MjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpBUktBTlNBUzpMb2dhbiBDb3VudHkKKzQzOlVTOlVTQTpVTklURUQgU1RBVEVTOkFSS0FOU0FTOkxvbm9rZSBDb3VudHkKKzQ0OlVTOlVTQTpVTklURUQgU1RBVEVTOkFSS0FOU0FTOk1hZGlzb24gQ291bnR5Cis0NTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpBUktBTlNBUzpNYXJpb24gQ291bnR5Cis0NjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpBUktBTlNBUzpNaWxsZXIgQ291bnR5Cis0NzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpBUktBTlNBUzpNaXNzaXNzaXBwaSBDb3VudHkKKzQ4OlVTOlVTQTpVTklURUQgU1RBVEVTOkFSS0FOU0FTOk1vbnJvZSBDb3VudHkKKzQ5OlVTOlVTQTpVTklURUQgU1RBVEVTOkFSS0FOU0FTOk1vbnRnb21lcnkgQ291bnR5Cis1MDpVUzpVU0E6VU5JVEVEIFNUQVRFUzpBUktBTlNBUzpOZXZhZGEgQ291bnR5Cis1MTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpBUktBTlNBUzpOZXd0b24gQ291bnR5Cis1MjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpBUktBTlNBUzpPdWFjaGl0YSBDb3VudHkKKzUzOlVTOlVTQTpVTklURUQgU1RBVEVTOkFSS0FOU0FTOlBlcnJ5IENvdW50eQorNTQ6VVM6VVNBOlVOSVRFRCBTVEFURVM6QVJLQU5TQVM6UGhpbGxpcHMgQ291bnR5Cis1NTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpBUktBTlNBUzpQaWtlIENvdW50eQorNTY6VVM6VVNBOlVOSVRFRCBTVEFURVM6QVJLQU5TQVM6UG9pbnNldHQgQ291bnR5Cis1NzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpBUktBTlNBUzpQb2xrIENvdW50eQorNTg6VVM6VVNBOlVOSVRFRCBTVEFURVM6QVJLQU5TQVM6UG9wZSBDb3VudHkKKzU5OlVTOlVTQTpVTklURUQgU1RBVEVTOkFSS0FOU0FTOlByYWlyaWUgQ291bnR5Cis2MDpVUzpVU0E6VU5JVEVEIFNUQVRFUzpBUktBTlNBUzpQdWxhc2tpIENvdW50eQorNjE6VVM6VVNBOlVOSVRFRCBTVEFURVM6QVJLQU5TQVM6UmFuZG9scGggQ291bnR5Cis2MjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpBUktBTlNBUzpTYWxpbmUgQ291bnR5Cis2MzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpBUktBTlNBUzpTY290dCBDb3VudHkKKzY0OlVTOlVTQTpVTklURUQgU1RBVEVTOkFSS0FOU0FTOlNlYXJjeSBDb3VudHkKKzY1OlVTOlVTQTpVTklURUQgU1RBVEVTOkFSS0FOU0FTOlNlYmFzdGlhbiBDb3VudHkKKzY2OlVTOlVTQTpVTklURUQgU1RBVEVTOkFSS0FOU0FTOlNldmllciBDb3VudHkKKzY3OlVTOlVTQTpVTklURUQgU1RBVEVTOkFSS0FOU0FTOlNoYXJwIENvdW50eQorNjg6VVM6VVNBOlVOSVRFRCBTVEFURVM6QVJLQU5TQVM6U3QuIEZyYW5jaXMgQ291bnR5Cis2OTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpBUktBTlNBUzpTdG9uZSBDb3VudHkKKzcwOlVTOlVTQTpVTklURUQgU1RBVEVTOkFSS0FOU0FTOlVuaW9uIENvdW50eQorNzE6VVM6VVNBOlVOSVRFRCBTVEFURVM6QVJLQU5TQVM6VmFuIEJ1cmVuIENvdW50eQorNzI6VVM6VVNBOlVOSVRFRCBTVEFURVM6QVJLQU5TQVM6V2FzaGluZ3RvbiBDb3VudHkKKzczOlVTOlVTQTpVTklURUQgU1RBVEVTOkFSS0FOU0FTOldoaXRlIENvdW50eQorNzQ6VVM6VVNBOlVOSVRFRCBTVEFURVM6QVJLQU5TQVM6V29vZHJ1ZmYgQ291bnR5Cis3NTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpBUktBTlNBUzpZZWxsIENvdW50eQorMTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpERUxBV0FSRTpLZW50IENvdW50eQorMjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpERUxBV0FSRTpOZXcgQ2FzdGxlIENvdW50eQorMzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpERUxBV0FSRTpTdXNzZXggQ291bnR5CisxOlVTOlVTQTpVTklURUQgU1RBVEVTOlJIT0RFIElTTEFORDpCcmlzdG9sIENvdW50eQorMjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpSSE9ERSBJU0xBTkQ6S2VudCBDb3VudHkKKzM6VVM6VVNBOlVOSVRFRCBTVEFURVM6UkhPREUgSVNMQU5EOk5ld3BvcnQgQ291bnR5Cis0OlVTOlVTQTpVTklURUQgU1RBVEVTOlJIT0RFIElTTEFORDpQcm92aWRlbmNlIENvdW50eQorNTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpSSE9ERSBJU0xBTkQ6V2FzaGluZ3RvbiBDb3VudHkKKzE6VVM6VVNBOlVOSVRFRCBTVEFURVM6TUFTU0FDSFVTRVRUUzpCYXJuc3RhYmxlIENvdW50eQorMjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpNQVNTQUNIVVNFVFRTOkJlcmtzaGlyZSBDb3VudHkKKzM6VVM6VVNBOlVOSVRFRCBTVEFURVM6TUFTU0FDSFVTRVRUUzpCcmlzdG9sIENvdW50eQorNDpVUzpVU0E6VU5JVEVEIFNUQVRFUzpNQVNTQUNIVVNFVFRTOkR1a2VzIENvdW50eQorNTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpNQVNTQUNIVVNFVFRTOkVzc2V4IENvdW50eQorNjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpNQVNTQUNIVVNFVFRTOkZyYW5rbGluIENvdW50eQorNzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpNQVNTQUNIVVNFVFRTOkhhbXBkZW4gQ291bnR5Cis4OlVTOlVTQTpVTklURUQgU1RBVEVTOk1BU1NBQ0hVU0VUVFM6SGFtcHNoaXJlIENvdW50eQorOTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpNQVNTQUNIVVNFVFRTOk1pZGRsZXNleCBDb3VudHkKKzEwOlVTOlVTQTpVTklURUQgU1RBVEVTOk1BU1NBQ0hVU0VUVFM6TmFudHVja2V0IENvdW50eQorMTE6VVM6VVNBOlVOSVRFRCBTVEFURVM6TUFTU0FDSFVTRVRUUzpOb3Jmb2xrIENvdW50eQorMTI6VVM6VVNBOlVOSVRFRCBTVEFURVM6TUFTU0FDSFVTRVRUUzpQbHltb3V0aCBDb3VudHkKKzEzOlVTOlVTQTpVTklURUQgU1RBVEVTOk1BU1NBQ0hVU0VUVFM6U3VmZm9sayBDb3VudHkKKzE0OlVTOlVTQTpVTklURUQgU1RBVEVTOk1BU1NBQ0hVU0VUVFM6V29yY2VzdGVyIENvdW50eQorMTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpPUkVHT046QmFrZXIgQ291bnR5CisyOlVTOlVTQTpVTklURUQgU1RBVEVTOk9SRUdPTjpCZW50b24gQ291bnR5CiszOlVTOlVTQTpVTklURUQgU1RBVEVTOk9SRUdPTjpDbGFja2FtYXMgQ291bnR5Cis0OlVTOlVTQTpVTklURUQgU1RBVEVTOk9SRUdPTjpDbGF0c29wIENvdW50eQorNTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpPUkVHT046Q29sdW1iaWEgQ291bnR5Cis2OlVTOlVTQTpVTklURUQgU1RBVEVTOk9SRUdPTjpDb29zIENvdW50eQorNzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpPUkVHT046Q3Jvb2sgQ291bnR5Cis4OlVTOlVTQTpVTklURUQgU1RBVEVTOk9SRUdPTjpDdXJyeSBDb3VudHkKKzk6VVM6VVNBOlVOSVRFRCBTVEFURVM6T1JFR09OOkRlc2NodXRlcyBDb3VudHkKKzEwOlVTOlVTQTpVTklURUQgU1RBVEVTOk9SRUdPTjpEb3VnbGFzIENvdW50eQorMTE6VVM6VVNBOlVOSVRFRCBTVEFURVM6T1JFR09OOkdpbGxpYW0gQ291bnR5CisxMjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpPUkVHT046R3JhbnQgQ291bnR5CisxMzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpPUkVHT046SGFybmV5IENvdW50eQorMTQ6VVM6VVNBOlVOSVRFRCBTVEFURVM6T1JFR09OOkhvb2QgUml2ZXIgQ291bnR5CisxNTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpPUkVHT046SmFja3NvbiBDb3VudHkKKzE2OlVTOlVTQTpVTklURUQgU1RBVEVTOk9SRUdPTjpKZWZmZXJzb24gQ291bnR5CisxNzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpPUkVHT046Sm9zZXBoaW5lIENvdW50eQorMTg6VVM6VVNBOlVOSVRFRCBTVEFURVM6T1JFR09OOktsYW1hdGggQ291bnR5CisxOTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpPUkVHT046TGFrZSBDb3VudHkKKzIwOlVTOlVTQTpVTklURUQgU1RBVEVTOk9SRUdPTjpMYW5lIENvdW50eQorMjE6VVM6VVNBOlVOSVRFRCBTVEFURVM6T1JFR09OOkxpbmNvbG4gQ291bnR5CisyMjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpPUkVHT046TGlubiBDb3VudHkKKzIzOlVTOlVTQTpVTklURUQgU1RBVEVTOk9SRUdPTjpNYWxoZXVyIENvdW50eQorMjQ6VVM6VVNBOlVOSVRFRCBTVEFURVM6T1JFR09OOk1hcmlvbiBDb3VudHkKKzI1OlVTOlVTQTpVTklURUQgU1RBVEVTOk9SRUdPTjpNb3Jyb3cgQ291bnR5CisyNjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpPUkVHT046TXVsdG5vbWFoIENvdW50eQorMjc6VVM6VVNBOlVOSVRFRCBTVEFURVM6T1JFR09OOlBvbGsgQ291bnR5CisyODpVUzpVU0E6VU5JVEVEIFNUQVRFUzpPUkVHT046U2hlcm1hbiBDb3VudHkKKzI5OlVTOlVTQTpVTklURUQgU1RBVEVTOk9SRUdPTjpUaWxsYW1vb2sgQ291bnR5CiszMDpVUzpVU0E6VU5JVEVEIFNUQVRFUzpPUkVHT046VW1hdGlsbGEgQ291bnR5CiszMTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpPUkVHT046VW5pb24gQ291bnR5CiszMjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpPUkVHT046V2FsbG93YSBDb3VudHkKKzMzOlVTOlVTQTpVTklURUQgU1RBVEVTOk9SRUdPTjpXYXNjbyBDb3VudHkKKzM0OlVTOlVTQTpVTklURUQgU1RBVEVTOk9SRUdPTjpXYXNoaW5ndG9uIENvdW50eQorMzU6VVM6VVNBOlVOSVRFRCBTVEFURVM6T1JFR09OOldoZWVsZXIgQ291bnR5CiszNjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpPUkVHT046WWFtaGlsbCBDb3VudHkKKzE6VVM6VVNBOlVOSVRFRCBTVEFURVM6QVJJWk9OQTpBcGFjaGUgQ291bnR5CisyOlVTOlVTQTpVTklURUQgU1RBVEVTOkFSSVpPTkE6Q29jaGlzZSBDb3VudHkKKzM6VVM6VVNBOlVOSVRFRCBTVEFURVM6QVJJWk9OQTpDb2NvbmlubyBDb3VudHkKKzQ6VVM6VVNBOlVOSVRFRCBTVEFURVM6QVJJWk9OQTpHaWxhIENvdW50eQorNTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpBUklaT05BOkdyYWhhbSBDb3VudHkKKzY6VVM6VVNBOlVOSVRFRCBTVEFURVM6QVJJWk9OQTpHcmVlbmxlZSBDb3VudHkKKzc6VVM6VVNBOlVOSVRFRCBTVEFURVM6QVJJWk9OQTpMYSBQYXogQ291bnR5Cis4OlVTOlVTQTpVTklURUQgU1RBVEVTOkFSSVpPTkE6TWFyaWNvcGEgQ291bnR5Cis5OlVTOlVTQTpVTklURUQgU1RBVEVTOkFSSVpPTkE6TW9oYXZlIENvdW50eQorMTA6VVM6VVNBOlVOSVRFRCBTVEFURVM6QVJJWk9OQTpOYXZham8gQ291bnR5CisxMTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpBUklaT05BOlBpbWEgQ291bnR5CisxMjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpBUklaT05BOlBpbmFsIENvdW50eQorMTM6VVM6VVNBOlVOSVRFRCBTVEFURVM6QVJJWk9OQTpTYW50YSBDcnV6IENvdW50eQorMTQ6VVM6VVNBOlVOSVRFRCBTVEFURVM6QVJJWk9OQTpZYXZhcGFpIENvdW50eQorMTU6VVM6VVNBOlVOSVRFRCBTVEFURVM6QVJJWk9OQTpZdW1hIENvdW50eQorMTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpIQVdBSUk6SGF3YWlpIENvdW50eQorMjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpIQVdBSUk6SG9ub2x1bHUgQ291bnR5CiszOlVTOlVTQTpVTklURUQgU1RBVEVTOkhBV0FJSTpLYWxhd2FvIENvdW50eQorNDpVUzpVU0E6VU5JVEVEIFNUQVRFUzpIQVdBSUk6S2F1YWkgQ291bnR5Cis1OlVTOlVTQTpVTklURUQgU1RBVEVTOkhBV0FJSTpNYXVpIENvdW50eQorMTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpWRVJNT05UOkFkZGlzb24gQ291bnR5CisyOlVTOlVTQTpVTklURUQgU1RBVEVTOlZFUk1PTlQ6QmVubmluZ3RvbiBDb3VudHkKKzM6VVM6VVNBOlVOSVRFRCBTVEFURVM6VkVSTU9OVDpDYWxlZG9uaWEgQ291bnR5Cis0OlVTOlVTQTpVTklURUQgU1RBVEVTOlZFUk1PTlQ6Q2hpdHRlbmRlbiBDb3VudHkKKzU6VVM6VVNBOlVOSVRFRCBTVEFURVM6VkVSTU9OVDpFc3NleCBDb3VudHkKKzY6VVM6VVNBOlVOSVRFRCBTVEFURVM6VkVSTU9OVDpGcmFua2xpbiBDb3VudHkKKzc6VVM6VVNBOlVOSVRFRCBTVEFURVM6VkVSTU9OVDpHcmFuZCBJc2xlIENvdW50eQorODpVUzpVU0E6VU5JVEVEIFNUQVRFUzpWRVJNT05UOkxhbW9pbGxlIENvdW50eQorOTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpWRVJNT05UOk9yYW5nZSBDb3VudHkKKzEwOlVTOlVTQTpVTklURUQgU1RBVEVTOlZFUk1PTlQ6T3JsZWFucyBDb3VudHkKKzExOlVTOlVTQTpVTklURUQgU1RBVEVTOlZFUk1PTlQ6UnV0bGFuZCBDb3VudHkKKzEyOlVTOlVTQTpVTklURUQgU1RBVEVTOlZFUk1PTlQ6V2FzaGluZ3RvbiBDb3VudHkKKzEzOlVTOlVTQTpVTklURUQgU1RBVEVTOlZFUk1PTlQ6V2luZGhhbSBDb3VudHkKKzE0OlVTOlVTQTpVTklURUQgU1RBVEVTOlZFUk1PTlQ6V2luZHNvciBDb3VudHkKKzE6VVM6VVNBOlVOSVRFRCBTVEFURVM6T0hJTzpBZGFtcyBDb3VudHkKKzI6VVM6VVNBOlVOSVRFRCBTVEFURVM6T0hJTzpBbGxlbiBDb3VudHkKKzM6VVM6VVNBOlVOSVRFRCBTVEFURVM6T0hJTzpBc2hsYW5kIENvdW50eQorNDpVUzpVU0E6VU5JVEVEIFNUQVRFUzpPSElPOkFzaHRhYnVsYSBDb3VudHkKKzU6VVM6VVNBOlVOSVRFRCBTVEFURVM6T0hJTzpBdGhlbnMgQ291bnR5Cis2OlVTOlVTQTpVTklURUQgU1RBVEVTOk9ISU86QXVnbGFpemUgQ291bnR5Cis3OlVTOlVTQTpVTklURUQgU1RBVEVTOk9ISU86QmVsbW9udCBDb3VudHkKKzg6VVM6VVNBOlVOSVRFRCBTVEFURVM6T0hJTzpCcm93biBDb3VudHkKKzk6VVM6VVNBOlVOSVRFRCBTVEFURVM6T0hJTzpCdXRsZXIgQ291bnR5CisxMDpVUzpVU0E6VU5JVEVEIFNUQVRFUzpPSElPOkNhcnJvbGwgQ291bnR5CisxMTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpPSElPOkNoYW1wYWlnbiBDb3VudHkKKzEyOlVTOlVTQTpVTklURUQgU1RBVEVTOk9ISU86Q2xhcmsgQ291bnR5CisxMzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpPSElPOkNsZXJtb250IENvdW50eQorMTQ6VVM6VVNBOlVOSVRFRCBTVEFURVM6T0hJTzpDbGludG9uIENvdW50eQorMTU6VVM6VVNBOlVOSVRFRCBTVEFURVM6T0hJTzpDb2x1bWJpYW5hIENvdW50eQorMTY6VVM6VVNBOlVOSVRFRCBTVEFURVM6T0hJTzpDb3Nob2N0b24gQ291bnR5CisxNzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpPSElPOkNyYXdmb3JkIENvdW50eQorMTg6VVM6VVNBOlVOSVRFRCBTVEFURVM6T0hJTzpDdXlhaG9nYSBDb3VudHkKKzE5OlVTOlVTQTpVTklURUQgU1RBVEVTOk9ISU86RGFya2UgQ291bnR5CisyMDpVUzpVU0E6VU5JVEVEIFNUQVRFUzpPSElPOkRlZmlhbmNlIENvdW50eQorMjE6VVM6VVNBOlVOSVRFRCBTVEFURVM6T0hJTzpEZWxhd2FyZSBDb3VudHkKKzIyOlVTOlVTQTpVTklURUQgU1RBVEVTOk9ISU86RXJpZSBDb3VudHkKKzIzOlVTOlVTQTpVTklURUQgU1RBVEVTOk9ISU86RmFpcmZpZWxkIENvdW50eQorMjQ6VVM6VVNBOlVOSVRFRCBTVEFURVM6T0hJTzpGYXlldHRlIENvdW50eQorMjU6VVM6VVNBOlVOSVRFRCBTVEFURVM6T0hJTzpGcmFua2xpbiBDb3VudHkKKzI2OlVTOlVTQTpVTklURUQgU1RBVEVTOk9ISU86RnVsdG9uIENvdW50eQorMjc6VVM6VVNBOlVOSVRFRCBTVEFURVM6T0hJTzpHYWxsaWEgQ291bnR5CisyODpVUzpVU0E6VU5JVEVEIFNUQVRFUzpPSElPOkdlYXVnYSBDb3VudHkKKzI5OlVTOlVTQTpVTklURUQgU1RBVEVTOk9ISU86R3JlZW5lIENvdW50eQorMzA6VVM6VVNBOlVOSVRFRCBTVEFURVM6T0hJTzpHdWVybnNleSBDb3VudHkKKzMxOlVTOlVTQTpVTklURUQgU1RBVEVTOk9ISU86SGFtaWx0b24gQ291bnR5CiszMjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpPSElPOkhhbmNvY2sgQ291bnR5CiszMzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpPSElPOkhhcmRpbiBDb3VudHkKKzM0OlVTOlVTQTpVTklURUQgU1RBVEVTOk9ISU86SGFycmlzb24gQ291bnR5CiszNTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpPSElPOkhlbnJ5IENvdW50eQorMzY6VVM6VVNBOlVOSVRFRCBTVEFURVM6T0hJTzpIaWdobGFuZCBDb3VudHkKKzM3OlVTOlVTQTpVTklURUQgU1RBVEVTOk9ISU86SG9ja2luZyBDb3VudHkKKzM4OlVTOlVTQTpVTklURUQgU1RBVEVTOk9ISU86SG9sbWVzIENvdW50eQorMzk6VVM6VVNBOlVOSVRFRCBTVEFURVM6T0hJTzpIdXJvbiBDb3VudHkKKzQwOlVTOlVTQTpVTklURUQgU1RBVEVTOk9ISU86SmFja3NvbiBDb3VudHkKKzQxOlVTOlVTQTpVTklURUQgU1RBVEVTOk9ISU86SmVmZmVyc29uIENvdW50eQorNDI6VVM6VVNBOlVOSVRFRCBTVEFURVM6T0hJTzpLbm94IENvdW50eQorNDM6VVM6VVNBOlVOSVRFRCBTVEFURVM6T0hJTzpMYWtlIENvdW50eQorNDQ6VVM6VVNBOlVOSVRFRCBTVEFURVM6T0hJTzpMYXdyZW5jZSBDb3VudHkKKzQ1OlVTOlVTQTpVTklURUQgU1RBVEVTOk9ISU86TGlja2luZyBDb3VudHkKKzQ2OlVTOlVTQTpVTklURUQgU1RBVEVTOk9ISU86TG9nYW4gQ291bnR5Cis0NzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpPSElPOkxvcmFpbiBDb3VudHkKKzQ4OlVTOlVTQTpVTklURUQgU1RBVEVTOk9ISU86THVjYXMgQ291bnR5Cis0OTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpPSElPOk1hZGlzb24gQ291bnR5Cis1MDpVUzpVU0E6VU5JVEVEIFNUQVRFUzpPSElPOk1haG9uaW5nIENvdW50eQorNTE6VVM6VVNBOlVOSVRFRCBTVEFURVM6T0hJTzpNYXJpb24gQ291bnR5Cis1MjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpPSElPOk1lZGluYSBDb3VudHkKKzUzOlVTOlVTQTpVTklURUQgU1RBVEVTOk9ISU86TWVpZ3MgQ291bnR5Cis1NDpVUzpVU0E6VU5JVEVEIFNUQVRFUzpPSElPOk1lcmNlciBDb3VudHkKKzU1OlVTOlVTQTpVTklURUQgU1RBVEVTOk9ISU86TWlhbWkgQ291bnR5Cis1NjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpPSElPOk1vbnJvZSBDb3VudHkKKzU3OlVTOlVTQTpVTklURUQgU1RBVEVTOk9ISU86TW9udGdvbWVyeSBDb3VudHkKKzU4OlVTOlVTQTpVTklURUQgU1RBVEVTOk9ISU86TW9yZ2FuIENvdW50eQorNTk6VVM6VVNBOlVOSVRFRCBTVEFURVM6T0hJTzpNb3Jyb3cgQ291bnR5Cis2MDpVUzpVU0E6VU5JVEVEIFNUQVRFUzpPSElPOk11c2tpbmd1bSBDb3VudHkKKzYxOlVTOlVTQTpVTklURUQgU1RBVEVTOk9ISU86Tm9ibGUgQ291bnR5Cis2MjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpPSElPOk90dGF3YSBDb3VudHkKKzYzOlVTOlVTQTpVTklURUQgU1RBVEVTOk9ISU86UGF1bGRpbmcgQ291bnR5Cis2NDpVUzpVU0E6VU5JVEVEIFNUQVRFUzpPSElPOlBlcnJ5IENvdW50eQorNjU6VVM6VVNBOlVOSVRFRCBTVEFURVM6T0hJTzpQaWNrYXdheSBDb3VudHkKKzY2OlVTOlVTQTpVTklURUQgU1RBVEVTOk9ISU86UGlrZSBDb3VudHkKKzY3OlVTOlVTQTpVTklURUQgU1RBVEVTOk9ISU86UG9ydGFnZSBDb3VudHkKKzY4OlVTOlVTQTpVTklURUQgU1RBVEVTOk9ISU86UHJlYmxlIENvdW50eQorNjk6VVM6VVNBOlVOSVRFRCBTVEFURVM6T0hJTzpQdXRuYW0gQ291bnR5Cis3MDpVUzpVU0E6VU5JVEVEIFNUQVRFUzpPSElPOlJpY2hsYW5kIENvdW50eQorNzE6VVM6VVNBOlVOSVRFRCBTVEFURVM6T0hJTzpSb3NzIENvdW50eQorNzI6VVM6VVNBOlVOSVRFRCBTVEFURVM6T0hJTzpTYW5kdXNreSBDb3VudHkKKzczOlVTOlVTQTpVTklURUQgU1RBVEVTOk9ISU86U2Npb3RvIENvdW50eQorNzQ6VVM6VVNBOlVOSVRFRCBTVEFURVM6T0hJTzpTZW5lY2EgQ291bnR5Cis3NTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpPSElPOlNoZWxieSBDb3VudHkKKzc2OlVTOlVTQTpVTklURUQgU1RBVEVTOk9ISU86U3RhcmsgQ291bnR5Cis3NzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpPSElPOlN1bW1pdCBDb3VudHkKKzc4OlVTOlVTQTpVTklURUQgU1RBVEVTOk9ISU86VHJ1bWJ1bGwgQ291bnR5Cis3OTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpPSElPOlR1c2NhcmF3YXMgQ291bnR5Cis4MDpVUzpVU0E6VU5JVEVEIFNUQVRFUzpPSElPOlVuaW9uIENvdW50eQorODE6VVM6VVNBOlVOSVRFRCBTVEFURVM6T0hJTzpWYW4gV2VydCBDb3VudHkKKzgyOlVTOlVTQTpVTklURUQgU1RBVEVTOk9ISU86VmludG9uIENvdW50eQorODM6VVM6VVNBOlVOSVRFRCBTVEFURVM6T0hJTzpXYXJyZW4gQ291bnR5Cis4NDpVUzpVU0E6VU5JVEVEIFNUQVRFUzpPSElPOldhc2hpbmd0b24gQ291bnR5Cis4NTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpPSElPOldheW5lIENvdW50eQorODY6VVM6VVNBOlVOSVRFRCBTVEFURVM6T0hJTzpXaWxsaWFtcyBDb3VudHkKKzg3OlVTOlVTQTpVTklURUQgU1RBVEVTOk9ISU86V29vZCBDb3VudHkKKzg4OlVTOlVTQTpVTklURUQgU1RBVEVTOk9ISU86V3lhbmRvdCBDb3VudHkKKzE6VVM6VVNBOlVOSVRFRCBTVEFURVM6TUlTU0lTU0lQUEk6QWRhbXMgQ291bnR5CisyOlVTOlVTQTpVTklURUQgU1RBVEVTOk1JU1NJU1NJUFBJOkFsY29ybiBDb3VudHkKKzM6VVM6VVNBOlVOSVRFRCBTVEFURVM6TUlTU0lTU0lQUEk6QW1pdGUgQ291bnR5Cis0OlVTOlVTQTpVTklURUQgU1RBVEVTOk1JU1NJU1NJUFBJOkF0dGFsYSBDb3VudHkKKzU6VVM6VVNBOlVOSVRFRCBTVEFURVM6TUlTU0lTU0lQUEk6QmVudG9uIENvdW50eQorNjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpNSVNTSVNTSVBQSTpCb2xpdmFyIENvdW50eQorNzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpNSVNTSVNTSVBQSTpDYWxob3VuIENvdW50eQorODpVUzpVU0E6VU5JVEVEIFNUQVRFUzpNSVNTSVNTSVBQSTpDYXJyb2xsIENvdW50eQorOTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpNSVNTSVNTSVBQSTpDaGlja2FzYXcgQ291bnR5CisxMDpVUzpVU0E6VU5JVEVEIFNUQVRFUzpNSVNTSVNTSVBQSTpDaG9jdGF3IENvdW50eQorMTE6VVM6VVNBOlVOSVRFRCBTVEFURVM6TUlTU0lTU0lQUEk6Q2xhaWJvcm5lIENvdW50eQorMTI6VVM6VVNBOlVOSVRFRCBTVEFURVM6TUlTU0lTU0lQUEk6Q2xhcmtlIENvdW50eQorMTM6VVM6VVNBOlVOSVRFRCBTVEFURVM6TUlTU0lTU0lQUEk6Q2xheSBDb3VudHkKKzE0OlVTOlVTQTpVTklURUQgU1RBVEVTOk1JU1NJU1NJUFBJOkNvYWhvbWEgQ291bnR5CisxNTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpNSVNTSVNTSVBQSTpDb3BpYWggQ291bnR5CisxNjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpNSVNTSVNTSVBQSTpDb3Zpbmd0b24gQ291bnR5CisxNzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpNSVNTSVNTSVBQSTpEZVNvdG8gQ291bnR5CisxODpVUzpVU0E6VU5JVEVEIFNUQVRFUzpNSVNTSVNTSVBQSTpGb3JyZXN0IENvdW50eQorMTk6VVM6VVNBOlVOSVRFRCBTVEFURVM6TUlTU0lTU0lQUEk6RnJhbmtsaW4gQ291bnR5CisyMDpVUzpVU0E6VU5JVEVEIFNUQVRFUzpNSVNTSVNTSVBQSTpHZW9yZ2UgQ291bnR5CisyMTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpNSVNTSVNTSVBQSTpHcmVlbmUgQ291bnR5CisyMjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpNSVNTSVNTSVBQSTpHcmVuYWRhIENvdW50eQorMjM6VVM6VVNBOlVOSVRFRCBTVEFURVM6TUlTU0lTU0lQUEk6SGFuY29jayBDb3VudHkKKzI0OlVTOlVTQTpVTklURUQgU1RBVEVTOk1JU1NJU1NJUFBJOkhhcnJpc29uIENvdW50eQorMjU6VVM6VVNBOlVOSVRFRCBTVEFURVM6TUlTU0lTU0lQUEk6SGluZHMgQ291bnR5CisyNjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpNSVNTSVNTSVBQSTpIb2xtZXMgQ291bnR5CisyNzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpNSVNTSVNTSVBQSTpIdW1waHJleXMgQ291bnR5CisyODpVUzpVU0E6VU5JVEVEIFNUQVRFUzpNSVNTSVNTSVBQSTpJc3NhcXVlbmEgQ291bnR5CisyOTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpNSVNTSVNTSVBQSTpJdGF3YW1iYSBDb3VudHkKKzMwOlVTOlVTQTpVTklURUQgU1RBVEVTOk1JU1NJU1NJUFBJOkphY2tzb24gQ291bnR5CiszMTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpNSVNTSVNTSVBQSTpKYXNwZXIgQ291bnR5CiszMjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpNSVNTSVNTSVBQSTpKZWZmZXJzb24gQ291bnR5CiszMzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpNSVNTSVNTSVBQSTpKZWZmZXJzb24gRGF2aXMgQ291bnR5CiszNDpVUzpVU0E6VU5JVEVEIFNUQVRFUzpNSVNTSVNTSVBQSTpKb25lcyBDb3VudHkKKzM1OlVTOlVTQTpVTklURUQgU1RBVEVTOk1JU1NJU1NJUFBJOktlbXBlciBDb3VudHkKKzM2OlVTOlVTQTpVTklURUQgU1RBVEVTOk1JU1NJU1NJUFBJOkxhZmF5ZXR0ZSBDb3VudHkKKzM3OlVTOlVTQTpVTklURUQgU1RBVEVTOk1JU1NJU1NJUFBJOkxhbWFyIENvdW50eQorMzg6VVM6VVNBOlVOSVRFRCBTVEFURVM6TUlTU0lTU0lQUEk6TGF1ZGVyZGFsZSBDb3VudHkKKzM5OlVTOlVTQTpVTklURUQgU1RBVEVTOk1JU1NJU1NJUFBJOkxhd3JlbmNlIENvdW50eQorNDA6VVM6VVNBOlVOSVRFRCBTVEFURVM6TUlTU0lTU0lQUEk6TGVha2UgQ291bnR5Cis0MTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpNSVNTSVNTSVBQSTpMZWUgQ291bnR5Cis0MjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpNSVNTSVNTSVBQSTpMZWZsb3JlIENvdW50eQorNDM6VVM6VVNBOlVOSVRFRCBTVEFURVM6TUlTU0lTU0lQUEk6TGluY29sbiBDb3VudHkKKzQ0OlVTOlVTQTpVTklURUQgU1RBVEVTOk1JU1NJU1NJUFBJOkxvd25kZXMgQ291bnR5Cis0NTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpNSVNTSVNTSVBQSTpNYWRpc29uIENvdW50eQorNDY6VVM6VVNBOlVOSVRFRCBTVEFURVM6TUlTU0lTU0lQUEk6TWFyaW9uIENvdW50eQorNDc6VVM6VVNBOlVOSVRFRCBTVEFURVM6TUlTU0lTU0lQUEk6TWFyc2hhbGwgQ291bnR5Cis0ODpVUzpVU0E6VU5JVEVEIFNUQVRFUzpNSVNTSVNTSVBQSTpNb25yb2UgQ291bnR5Cis0OTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpNSVNTSVNTSVBQSTpNb250Z29tZXJ5IENvdW50eQorNTA6VVM6VVNBOlVOSVRFRCBTVEFURVM6TUlTU0lTU0lQUEk6TmVzaG9iYSBDb3VudHkKKzUxOlVTOlVTQTpVTklURUQgU1RBVEVTOk1JU1NJU1NJUFBJOk5ld3RvbiBDb3VudHkKKzUyOlVTOlVTQTpVTklURUQgU1RBVEVTOk1JU1NJU1NJUFBJOk5veHViZWUgQ291bnR5Cis1MzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpNSVNTSVNTSVBQSTpPa3RpYmJlaGEgQ291bnR5Cis1NDpVUzpVU0E6VU5JVEVEIFNUQVRFUzpNSVNTSVNTSVBQSTpQYW5vbGEgQ291bnR5Cis1NTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpNSVNTSVNTSVBQSTpQZWFybCBSaXZlciBDb3VudHkKKzU2OlVTOlVTQTpVTklURUQgU1RBVEVTOk1JU1NJU1NJUFBJOlBlcnJ5IENvdW50eQorNTc6VVM6VVNBOlVOSVRFRCBTVEFURVM6TUlTU0lTU0lQUEk6UGlrZSBDb3VudHkKKzU4OlVTOlVTQTpVTklURUQgU1RBVEVTOk1JU1NJU1NJUFBJOlBvbnRvdG9jIENvdW50eQorNTk6VVM6VVNBOlVOSVRFRCBTVEFURVM6TUlTU0lTU0lQUEk6UHJlbnRpc3MgQ291bnR5Cis2MDpVUzpVU0E6VU5JVEVEIFNUQVRFUzpNSVNTSVNTSVBQSTpRdWl0bWFuIENvdW50eQorNjE6VVM6VVNBOlVOSVRFRCBTVEFURVM6TUlTU0lTU0lQUEk6UmFua2luIENvdW50eQorNjI6VVM6VVNBOlVOSVRFRCBTVEFURVM6TUlTU0lTU0lQUEk6U2NvdHQgQ291bnR5Cis2MzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpNSVNTSVNTSVBQSTpTaGFya2V5IENvdW50eQorNjQ6VVM6VVNBOlVOSVRFRCBTVEFURVM6TUlTU0lTU0lQUEk6U2ltcHNvbiBDb3VudHkKKzY1OlVTOlVTQTpVTklURUQgU1RBVEVTOk1JU1NJU1NJUFBJOlNtaXRoIENvdW50eQorNjY6VVM6VVNBOlVOSVRFRCBTVEFURVM6TUlTU0lTU0lQUEk6U3RvbmUgQ291bnR5Cis2NzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpNSVNTSVNTSVBQSTpTdW5mbG93ZXIgQ291bnR5Cis2ODpVUzpVU0E6VU5JVEVEIFNUQVRFUzpNSVNTSVNTSVBQSTpUYWxsYWhhdGNoaWUgQ291bnR5Cis2OTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpNSVNTSVNTSVBQSTpUYXRlIENvdW50eQorNzA6VVM6VVNBOlVOSVRFRCBTVEFURVM6TUlTU0lTU0lQUEk6VGlwcGFoIENvdW50eQorNzE6VVM6VVNBOlVOSVRFRCBTVEFURVM6TUlTU0lTU0lQUEk6VGlzaG9taW5nbyBDb3VudHkKKzcyOlVTOlVTQTpVTklURUQgU1RBVEVTOk1JU1NJU1NJUFBJOlR1bmljYSBDb3VudHkKKzczOlVTOlVTQTpVTklURUQgU1RBVEVTOk1JU1NJU1NJUFBJOlVuaW9uIENvdW50eQorNzQ6VVM6VVNBOlVOSVRFRCBTVEFURVM6TUlTU0lTU0lQUEk6V2FsdGhhbGwgQ291bnR5Cis3NTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpNSVNTSVNTSVBQSTpXYXJyZW4gQ291bnR5Cis3NjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpNSVNTSVNTSVBQSTpXYXNoaW5ndG9uIENvdW50eQorNzc6VVM6VVNBOlVOSVRFRCBTVEFURVM6TUlTU0lTU0lQUEk6V2F5bmUgQ291bnR5Cis3ODpVUzpVU0E6VU5JVEVEIFNUQVRFUzpNSVNTSVNTSVBQSTpXZWJzdGVyIENvdW50eQorNzk6VVM6VVNBOlVOSVRFRCBTVEFURVM6TUlTU0lTU0lQUEk6V2lsa2luc29uIENvdW50eQorODA6VVM6VVNBOlVOSVRFRCBTVEFURVM6TUlTU0lTU0lQUEk6V2luc3RvbiBDb3VudHkKKzgxOlVTOlVTQTpVTklURUQgU1RBVEVTOk1JU1NJU1NJUFBJOllhbG9idXNoYSBDb3VudHkKKzgyOlVTOlVTQTpVTklURUQgU1RBVEVTOk1JU1NJU1NJUFBJOllhem9vIENvdW50eQorMTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpESVNUUklDVCBPRiBDT0xVTUJJQTpEaXN0cmljdCBvZiBDb2x1bWJpYQorMTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpNSUNISUdBTjpBbGNvbmEgQ291bnR5CisyOlVTOlVTQTpVTklURUQgU1RBVEVTOk1JQ0hJR0FOOkFsZ2VyIENvdW50eQorMzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpNSUNISUdBTjpBbGxlZ2FuIENvdW50eQorNDpVUzpVU0E6VU5JVEVEIFNUQVRFUzpNSUNISUdBTjpBbHBlbmEgQ291bnR5Cis1OlVTOlVTQTpVTklURUQgU1RBVEVTOk1JQ0hJR0FOOkFudHJpbSBDb3VudHkKKzY6VVM6VVNBOlVOSVRFRCBTVEFURVM6TUlDSElHQU46QXJlbmFjIENvdW50eQorNzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpNSUNISUdBTjpCYXJhZ2EgQ291bnR5Cis4OlVTOlVTQTpVTklURUQgU1RBVEVTOk1JQ0hJR0FOOkJhcnJ5IENvdW50eQorOTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpNSUNISUdBTjpCYXkgQ291bnR5CisxMDpVUzpVU0E6VU5JVEVEIFNUQVRFUzpNSUNISUdBTjpCZW56aWUgQ291bnR5CisxMTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpNSUNISUdBTjpCZXJyaWVuIENvdW50eQorMTI6VVM6VVNBOlVOSVRFRCBTVEFURVM6TUlDSElHQU46QnJhbmNoIENvdW50eQorMTM6VVM6VVNBOlVOSVRFRCBTVEFURVM6TUlDSElHQU46Q2FsaG91biBDb3VudHkKKzE0OlVTOlVTQTpVTklURUQgU1RBVEVTOk1JQ0hJR0FOOkNhc3MgQ291bnR5CisxNTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpNSUNISUdBTjpDaGFybGV2b2l4IENvdW50eQorMTY6VVM6VVNBOlVOSVRFRCBTVEFURVM6TUlDSElHQU46Q2hlYm95Z2FuIENvdW50eQorMTc6VVM6VVNBOlVOSVRFRCBTVEFURVM6TUlDSElHQU46Q2hpcHBld2EgQ291bnR5CisxODpVUzpVU0E6VU5JVEVEIFNUQVRFUzpNSUNISUdBTjpDbGFyZSBDb3VudHkKKzE5OlVTOlVTQTpVTklURUQgU1RBVEVTOk1JQ0hJR0FOOkNsaW50b24gQ291bnR5CisyMDpVUzpVU0E6VU5JVEVEIFNUQVRFUzpNSUNISUdBTjpDcmF3Zm9yZCBDb3VudHkKKzIxOlVTOlVTQTpVTklURUQgU1RBVEVTOk1JQ0hJR0FOOkRlbHRhIENvdW50eQorMjI6VVM6VVNBOlVOSVRFRCBTVEFURVM6TUlDSElHQU46RGlja2luc29uIENvdW50eQorMjM6VVM6VVNBOlVOSVRFRCBTVEFURVM6TUlDSElHQU46RWF0b24gQ291bnR5CisyNDpVUzpVU0E6VU5JVEVEIFNUQVRFUzpNSUNISUdBTjpFbW1ldCBDb3VudHkKKzI1OlVTOlVTQTpVTklURUQgU1RBVEVTOk1JQ0hJR0FOOkdlbmVzZWUgQ291bnR5CisyNjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpNSUNISUdBTjpHbGFkd2luIENvdW50eQorMjc6VVM6VVNBOlVOSVRFRCBTVEFURVM6TUlDSElHQU46R29nZWJpYyBDb3VudHkKKzI4OlVTOlVTQTpVTklURUQgU1RBVEVTOk1JQ0hJR0FOOkdyYW5kIFRyYXZlcnNlIENvdW50eQorMjk6VVM6VVNBOlVOSVRFRCBTVEFURVM6TUlDSElHQU46R3JhdGlvdCBDb3VudHkKKzMwOlVTOlVTQTpVTklURUQgU1RBVEVTOk1JQ0hJR0FOOkhpbGxzZGFsZSBDb3VudHkKKzMxOlVTOlVTQTpVTklURUQgU1RBVEVTOk1JQ0hJR0FOOkhvdWdodG9uIENvdW50eQorMzI6VVM6VVNBOlVOSVRFRCBTVEFURVM6TUlDSElHQU46SHVyb24gQ291bnR5CiszMzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpNSUNISUdBTjpJbmdoYW0gQ291bnR5CiszNDpVUzpVU0E6VU5JVEVEIFNUQVRFUzpNSUNISUdBTjpJb25pYSBDb3VudHkKKzM1OlVTOlVTQTpVTklURUQgU1RBVEVTOk1JQ0hJR0FOOklvc2NvIENvdW50eQorMzY6VVM6VVNBOlVOSVRFRCBTVEFURVM6TUlDSElHQU46SXJvbiBDb3VudHkKKzM3OlVTOlVTQTpVTklURUQgU1RBVEVTOk1JQ0hJR0FOOklzYWJlbGxhIENvdW50eQorMzg6VVM6VVNBOlVOSVRFRCBTVEFURVM6TUlDSElHQU46SmFja3NvbiBDb3VudHkKKzM5OlVTOlVTQTpVTklURUQgU1RBVEVTOk1JQ0hJR0FOOkthbGFtYXpvbyBDb3VudHkKKzQwOlVTOlVTQTpVTklURUQgU1RBVEVTOk1JQ0hJR0FOOkthbGthc2thIENvdW50eQorNDE6VVM6VVNBOlVOSVRFRCBTVEFURVM6TUlDSElHQU46S2VudCBDb3VudHkKKzQyOlVTOlVTQTpVTklURUQgU1RBVEVTOk1JQ0hJR0FOOktld2VlbmF3IENvdW50eQorNDM6VVM6VVNBOlVOSVRFRCBTVEFURVM6TUlDSElHQU46TGFrZSBDb3VudHkKKzQ0OlVTOlVTQTpVTklURUQgU1RBVEVTOk1JQ0hJR0FOOkxhcGVlciBDb3VudHkKKzQ1OlVTOlVTQTpVTklURUQgU1RBVEVTOk1JQ0hJR0FOOkxlZWxhbmF1IENvdW50eQorNDY6VVM6VVNBOlVOSVRFRCBTVEFURVM6TUlDSElHQU46TGVuYXdlZSBDb3VudHkKKzQ3OlVTOlVTQTpVTklURUQgU1RBVEVTOk1JQ0hJR0FOOkxpdmluZ3N0b24gQ291bnR5Cis0ODpVUzpVU0E6VU5JVEVEIFNUQVRFUzpNSUNISUdBTjpMdWNlIENvdW50eQorNDk6VVM6VVNBOlVOSVRFRCBTVEFURVM6TUlDSElHQU46TWFja2luYWMgQ291bnR5Cis1MDpVUzpVU0E6VU5JVEVEIFNUQVRFUzpNSUNISUdBTjpNYWNvbWIgQ291bnR5Cis1MTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpNSUNISUdBTjpNYW5pc3RlZSBDb3VudHkKKzUyOlVTOlVTQTpVTklURUQgU1RBVEVTOk1JQ0hJR0FOOk1hcnF1ZXR0ZSBDb3VudHkKKzUzOlVTOlVTQTpVTklURUQgU1RBVEVTOk1JQ0hJR0FOOk1hc29uIENvdW50eQorNTQ6VVM6VVNBOlVOSVRFRCBTVEFURVM6TUlDSElHQU46TWVjb3N0YSBDb3VudHkKKzU1OlVTOlVTQTpVTklURUQgU1RBVEVTOk1JQ0hJR0FOOk1lbm9taW5lZSBDb3VudHkKKzU2OlVTOlVTQTpVTklURUQgU1RBVEVTOk1JQ0hJR0FOOk1pZGxhbmQgQ291bnR5Cis1NzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpNSUNISUdBTjpNaXNzYXVrZWUgQ291bnR5Cis1ODpVUzpVU0E6VU5JVEVEIFNUQVRFUzpNSUNISUdBTjpNb25yb2UgQ291bnR5Cis1OTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpNSUNISUdBTjpNb250Y2FsbSBDb3VudHkKKzYwOlVTOlVTQTpVTklURUQgU1RBVEVTOk1JQ0hJR0FOOk1vbnRtb3JlbmN5IENvdW50eQorNjE6VVM6VVNBOlVOSVRFRCBTVEFURVM6TUlDSElHQU46TXVza2Vnb24gQ291bnR5Cis2MjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpNSUNISUdBTjpOZXdheWdvIENvdW50eQorNjM6VVM6VVNBOlVOSVRFRCBTVEFURVM6TUlDSElHQU46T2FrbGFuZCBDb3VudHkKKzY0OlVTOlVTQTpVTklURUQgU1RBVEVTOk1JQ0hJR0FOOk9jZWFuYSBDb3VudHkKKzY1OlVTOlVTQTpVTklURUQgU1RBVEVTOk1JQ0hJR0FOOk9nZW1hdyBDb3VudHkKKzY2OlVTOlVTQTpVTklURUQgU1RBVEVTOk1JQ0hJR0FOOk9udG9uYWdvbiBDb3VudHkKKzY3OlVTOlVTQTpVTklURUQgU1RBVEVTOk1JQ0hJR0FOOk9zY2VvbGEgQ291bnR5Cis2ODpVUzpVU0E6VU5JVEVEIFNUQVRFUzpNSUNISUdBTjpPc2NvZGEgQ291bnR5Cis2OTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpNSUNISUdBTjpPdHNlZ28gQ291bnR5Cis3MDpVUzpVU0E6VU5JVEVEIFNUQVRFUzpNSUNISUdBTjpPdHRhd2EgQ291bnR5Cis3MTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpNSUNISUdBTjpQcmVzcXVlIElzbGUgQ291bnR5Cis3MjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpNSUNISUdBTjpSb3Njb21tb24gQ291bnR5Cis3MzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpNSUNISUdBTjpTYWdpbmF3IENvdW50eQorNzQ6VVM6VVNBOlVOSVRFRCBTVEFURVM6TUlDSElHQU46U2FuaWxhYyBDb3VudHkKKzc1OlVTOlVTQTpVTklURUQgU1RBVEVTOk1JQ0hJR0FOOlNjaG9vbGNyYWZ0IENvdW50eQorNzY6VVM6VVNBOlVOSVRFRCBTVEFURVM6TUlDSElHQU46U2hpYXdhc3NlZSBDb3VudHkKKzc3OlVTOlVTQTpVTklURUQgU1RBVEVTOk1JQ0hJR0FOOlN0LiBDbGFpciBDb3VudHkKKzc4OlVTOlVTQTpVTklURUQgU1RBVEVTOk1JQ0hJR0FOOlN0LiBKb3NlcGggQ291bnR5Cis3OTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpNSUNISUdBTjpUdXNjb2xhIENvdW50eQorODA6VVM6VVNBOlVOSVRFRCBTVEFURVM6TUlDSElHQU46VmFuIEJ1cmVuIENvdW50eQorODE6VVM6VVNBOlVOSVRFRCBTVEFURVM6TUlDSElHQU46V2FzaHRlbmF3IENvdW50eQorODI6VVM6VVNBOlVOSVRFRCBTVEFURVM6TUlDSElHQU46V2F5bmUgQ291bnR5Cis4MzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpNSUNISUdBTjpXZXhmb3JkIENvdW50eQorMTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpNSU5ORVNPVEE6QWl0a2luIENvdW50eQorMjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpNSU5ORVNPVEE6QW5va2EgQ291bnR5CiszOlVTOlVTQTpVTklURUQgU1RBVEVTOk1JTk5FU09UQTpCZWNrZXIgQ291bnR5Cis0OlVTOlVTQTpVTklURUQgU1RBVEVTOk1JTk5FU09UQTpCZWx0cmFtaSBDb3VudHkKKzU6VVM6VVNBOlVOSVRFRCBTVEFURVM6TUlOTkVTT1RBOkJlbnRvbiBDb3VudHkKKzY6VVM6VVNBOlVOSVRFRCBTVEFURVM6TUlOTkVTT1RBOkJpZyBTdG9uZSBDb3VudHkKKzc6VVM6VVNBOlVOSVRFRCBTVEFURVM6TUlOTkVTT1RBOkJsdWUgRWFydGggQ291bnR5Cis4OlVTOlVTQTpVTklURUQgU1RBVEVTOk1JTk5FU09UQTpCcm93biBDb3VudHkKKzk6VVM6VVNBOlVOSVRFRCBTVEFURVM6TUlOTkVTT1RBOkNhcmx0b24gQ291bnR5CisxMDpVUzpVU0E6VU5JVEVEIFNUQVRFUzpNSU5ORVNPVEE6Q2FydmVyIENvdW50eQorMTE6VVM6VVNBOlVOSVRFRCBTVEFURVM6TUlOTkVTT1RBOkNhc3MgQ291bnR5CisxMjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpNSU5ORVNPVEE6Q2hpcHBld2EgQ291bnR5CisxMzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpNSU5ORVNPVEE6Q2hpc2FnbyBDb3VudHkKKzE0OlVTOlVTQTpVTklURUQgU1RBVEVTOk1JTk5FU09UQTpDbGF5IENvdW50eQorMTU6VVM6VVNBOlVOSVRFRCBTVEFURVM6TUlOTkVTT1RBOkNsZWFyd2F0ZXIgQ291bnR5CisxNjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpNSU5ORVNPVEE6Q29vayBDb3VudHkKKzE3OlVTOlVTQTpVTklURUQgU1RBVEVTOk1JTk5FU09UQTpDb3R0b253b29kIENvdW50eQorMTg6VVM6VVNBOlVOSVRFRCBTVEFURVM6TUlOTkVTT1RBOkNyb3cgV2luZyBDb3VudHkKKzE5OlVTOlVTQTpVTklURUQgU1RBVEVTOk1JTk5FU09UQTpEYWtvdGEgQ291bnR5CisyMDpVUzpVU0E6VU5JVEVEIFNUQVRFUzpNSU5ORVNPVEE6RG9kZ2UgQ291bnR5CisyMTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpNSU5ORVNPVEE6RG91Z2xhcyBDb3VudHkKKzIyOlVTOlVTQTpVTklURUQgU1RBVEVTOk1JTk5FU09UQTpGYXJpYmF1bHQgQ291bnR5CisyMzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpNSU5ORVNPVEE6RmlsbG1vcmUgQ291bnR5CisyNDpVUzpVU0E6VU5JVEVEIFNUQVRFUzpNSU5ORVNPVEE6RnJlZWJvcm4gQ291bnR5CisyNTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpNSU5ORVNPVEE6R29vZGh1ZSBDb3VudHkKKzI2OlVTOlVTQTpVTklURUQgU1RBVEVTOk1JTk5FU09UQTpHcmFudCBDb3VudHkKKzI3OlVTOlVTQTpVTklURUQgU1RBVEVTOk1JTk5FU09UQTpIZW5uZXBpbiBDb3VudHkKKzI4OlVTOlVTQTpVTklURUQgU1RBVEVTOk1JTk5FU09UQTpIb3VzdG9uIENvdW50eQorMjk6VVM6VVNBOlVOSVRFRCBTVEFURVM6TUlOTkVTT1RBOkh1YmJhcmQgQ291bnR5CiszMDpVUzpVU0E6VU5JVEVEIFNUQVRFUzpNSU5ORVNPVEE6SXNhbnRpIENvdW50eQorMzE6VVM6VVNBOlVOSVRFRCBTVEFURVM6TUlOTkVTT1RBOkl0YXNjYSBDb3VudHkKKzMyOlVTOlVTQTpVTklURUQgU1RBVEVTOk1JTk5FU09UQTpKYWNrc29uIENvdW50eQorMzM6VVM6VVNBOlVOSVRFRCBTVEFURVM6TUlOTkVTT1RBOkthbmFiZWMgQ291bnR5CiszNDpVUzpVU0E6VU5JVEVEIFNUQVRFUzpNSU5ORVNPVEE6S2FuZGl5b2hpIENvdW50eQorMzU6VVM6VVNBOlVOSVRFRCBTVEFURVM6TUlOTkVTT1RBOktpdHRzb24gQ291bnR5CiszNjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpNSU5ORVNPVEE6S29vY2hpY2hpbmcgQ291bnR5CiszNzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpNSU5ORVNPVEE6TGFjIHF1aSBQYXJsZSBDb3VudHkKKzM4OlVTOlVTQTpVTklURUQgU1RBVEVTOk1JTk5FU09UQTpMYWtlIENvdW50eQorMzk6VVM6VVNBOlVOSVRFRCBTVEFURVM6TUlOTkVTT1RBOkxha2Ugb2YgdGhlIFdvb2RzIENvdW50eQorNDA6VVM6VVNBOlVOSVRFRCBTVEFURVM6TUlOTkVTT1RBOkxlIFN1ZXVyIENvdW50eQorNDE6VVM6VVNBOlVOSVRFRCBTVEFURVM6TUlOTkVTT1RBOkxpbmNvbG4gQ291bnR5Cis0MjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpNSU5ORVNPVEE6THlvbiBDb3VudHkKKzQzOlVTOlVTQTpVTklURUQgU1RBVEVTOk1JTk5FU09UQTpNYWhub21lbiBDb3VudHkKKzQ0OlVTOlVTQTpVTklURUQgU1RBVEVTOk1JTk5FU09UQTpNYXJzaGFsbCBDb3VudHkKKzQ1OlVTOlVTQTpVTklURUQgU1RBVEVTOk1JTk5FU09UQTpNYXJ0aW4gQ291bnR5Cis0NjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpNSU5ORVNPVEE6TWNMZW9kIENvdW50eQorNDc6VVM6VVNBOlVOSVRFRCBTVEFURVM6TUlOTkVTT1RBOk1lZWtlciBDb3VudHkKKzQ4OlVTOlVTQTpVTklURUQgU1RBVEVTOk1JTk5FU09UQTpNaWxsZSBMYWNzIENvdW50eQorNDk6VVM6VVNBOlVOSVRFRCBTVEFURVM6TUlOTkVTT1RBOk1vcnJpc29uIENvdW50eQorNTA6VVM6VVNBOlVOSVRFRCBTVEFURVM6TUlOTkVTT1RBOk1vd2VyIENvdW50eQorNTE6VVM6VVNBOlVOSVRFRCBTVEFURVM6TUlOTkVTT1RBOk11cnJheSBDb3VudHkKKzUyOlVTOlVTQTpVTklURUQgU1RBVEVTOk1JTk5FU09UQTpOaWNvbGxldCBDb3VudHkKKzUzOlVTOlVTQTpVTklURUQgU1RBVEVTOk1JTk5FU09UQTpOb2JsZXMgQ291bnR5Cis1NDpVUzpVU0E6VU5JVEVEIFNUQVRFUzpNSU5ORVNPVEE6Tm9ybWFuIENvdW50eQorNTU6VVM6VVNBOlVOSVRFRCBTVEFURVM6TUlOTkVTT1RBOk9sbXN0ZWQgQ291bnR5Cis1NjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpNSU5ORVNPVEE6T3R0ZXIgVGFpbCBDb3VudHkKKzU3OlVTOlVTQTpVTklURUQgU1RBVEVTOk1JTk5FU09UQTpQZW5uaW5ndG9uIENvdW50eQorNTg6VVM6VVNBOlVOSVRFRCBTVEFURVM6TUlOTkVTT1RBOlBpbmUgQ291bnR5Cis1OTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpNSU5ORVNPVEE6UGlwZXN0b25lIENvdW50eQorNjA6VVM6VVNBOlVOSVRFRCBTVEFURVM6TUlOTkVTT1RBOlBvbGsgQ291bnR5Cis2MTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpNSU5ORVNPVEE6UG9wZSBDb3VudHkKKzYyOlVTOlVTQTpVTklURUQgU1RBVEVTOk1JTk5FU09UQTpSYW1zZXkgQ291bnR5Cis2MzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpNSU5ORVNPVEE6UmVkIExha2UgQ291bnR5Cis2NDpVUzpVU0E6VU5JVEVEIFNUQVRFUzpNSU5ORVNPVEE6UmVkd29vZCBDb3VudHkKKzY1OlVTOlVTQTpVTklURUQgU1RBVEVTOk1JTk5FU09UQTpSZW52aWxsZSBDb3VudHkKKzY2OlVTOlVTQTpVTklURUQgU1RBVEVTOk1JTk5FU09UQTpSaWNlIENvdW50eQorNjc6VVM6VVNBOlVOSVRFRCBTVEFURVM6TUlOTkVTT1RBOlJvY2sgQ291bnR5Cis2ODpVUzpVU0E6VU5JVEVEIFNUQVRFUzpNSU5ORVNPVEE6Um9zZWF1IENvdW50eQorNjk6VVM6VVNBOlVOSVRFRCBTVEFURVM6TUlOTkVTT1RBOlNjb3R0IENvdW50eQorNzA6VVM6VVNBOlVOSVRFRCBTVEFURVM6TUlOTkVTT1RBOlNoZXJidXJuZSBDb3VudHkKKzcxOlVTOlVTQTpVTklURUQgU1RBVEVTOk1JTk5FU09UQTpTaWJsZXkgQ291bnR5Cis3MjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpNSU5ORVNPVEE6U3QuIExvdWlzIENvdW50eQorNzM6VVM6VVNBOlVOSVRFRCBTVEFURVM6TUlOTkVTT1RBOlN0ZWFybnMgQ291bnR5Cis3NDpVUzpVU0E6VU5JVEVEIFNUQVRFUzpNSU5ORVNPVEE6U3RlZWxlIENvdW50eQorNzU6VVM6VVNBOlVOSVRFRCBTVEFURVM6TUlOTkVTT1RBOlN0ZXZlbnMgQ291bnR5Cis3NjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpNSU5ORVNPVEE6U3dpZnQgQ291bnR5Cis3NzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpNSU5ORVNPVEE6VG9kZCBDb3VudHkKKzc4OlVTOlVTQTpVTklURUQgU1RBVEVTOk1JTk5FU09UQTpUcmF2ZXJzZSBDb3VudHkKKzc5OlVTOlVTQTpVTklURUQgU1RBVEVTOk1JTk5FU09UQTpXYWJhc2hhIENvdW50eQorODA6VVM6VVNBOlVOSVRFRCBTVEFURVM6TUlOTkVTT1RBOldhZGVuYSBDb3VudHkKKzgxOlVTOlVTQTpVTklURUQgU1RBVEVTOk1JTk5FU09UQTpXYXNlY2EgQ291bnR5Cis4MjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpNSU5ORVNPVEE6V2FzaGluZ3RvbiBDb3VudHkKKzgzOlVTOlVTQTpVTklURUQgU1RBVEVTOk1JTk5FU09UQTpXYXRvbndhbiBDb3VudHkKKzg0OlVTOlVTQTpVTklURUQgU1RBVEVTOk1JTk5FU09UQTpXaWxraW4gQ291bnR5Cis4NTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpNSU5ORVNPVEE6V2lub25hIENvdW50eQorODY6VVM6VVNBOlVOSVRFRCBTVEFURVM6TUlOTkVTT1RBOldyaWdodCBDb3VudHkKKzg3OlVTOlVTQTpVTklURUQgU1RBVEVTOk1JTk5FU09UQTpZZWxsb3cgTWVkaWNpbmUgQ291bnR5CisxOlVTOlVTQTpVTklURUQgU1RBVEVTOk5FVkFEQTpDYXJzb24gQ2l0eQorMjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpORVZBREE6Q2h1cmNoaWxsIENvdW50eQorMzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpORVZBREE6Q2xhcmsgQ291bnR5Cis0OlVTOlVTQTpVTklURUQgU1RBVEVTOk5FVkFEQTpEb3VnbGFzIENvdW50eQorNTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpORVZBREE6RWxrbyBDb3VudHkKKzY6VVM6VVNBOlVOSVRFRCBTVEFURVM6TkVWQURBOkVzbWVyYWxkYSBDb3VudHkKKzc6VVM6VVNBOlVOSVRFRCBTVEFURVM6TkVWQURBOkV1cmVrYSBDb3VudHkKKzg6VVM6VVNBOlVOSVRFRCBTVEFURVM6TkVWQURBOkh1bWJvbGR0IENvdW50eQorOTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpORVZBREE6TGFuZGVyIENvdW50eQorMTA6VVM6VVNBOlVOSVRFRCBTVEFURVM6TkVWQURBOkxpbmNvbG4gQ291bnR5CisxMTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpORVZBREE6THlvbiBDb3VudHkKKzEyOlVTOlVTQTpVTklURUQgU1RBVEVTOk5FVkFEQTpNaW5lcmFsIENvdW50eQorMTM6VVM6VVNBOlVOSVRFRCBTVEFURVM6TkVWQURBOk55ZSBDb3VudHkKKzE0OlVTOlVTQTpVTklURUQgU1RBVEVTOk5FVkFEQTpQZXJzaGluZyBDb3VudHkKKzE1OlVTOlVTQTpVTklURUQgU1RBVEVTOk5FVkFEQTpTdG9yZXkgQ291bnR5CisxNjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpORVZBREE6V2FzaG9lIENvdW50eQorMTc6VVM6VVNBOlVOSVRFRCBTVEFURVM6TkVWQURBOldoaXRlIFBpbmUgQ291bnR5CisxOlVTOlVTQTpVTklURUQgU1RBVEVTOldJU0NPTlNJTjpBZGFtcyBDb3VudHkKKzI6VVM6VVNBOlVOSVRFRCBTVEFURVM6V0lTQ09OU0lOOkFzaGxhbmQgQ291bnR5CiszOlVTOlVTQTpVTklURUQgU1RBVEVTOldJU0NPTlNJTjpCYXJyb24gQ291bnR5Cis0OlVTOlVTQTpVTklURUQgU1RBVEVTOldJU0NPTlNJTjpCYXlmaWVsZCBDb3VudHkKKzU6VVM6VVNBOlVOSVRFRCBTVEFURVM6V0lTQ09OU0lOOkJyb3duIENvdW50eQorNjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpXSVNDT05TSU46QnVmZmFsbyBDb3VudHkKKzc6VVM6VVNBOlVOSVRFRCBTVEFURVM6V0lTQ09OU0lOOkJ1cm5ldHQgQ291bnR5Cis4OlVTOlVTQTpVTklURUQgU1RBVEVTOldJU0NPTlNJTjpDYWx1bWV0IENvdW50eQorOTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpXSVNDT05TSU46Q2hpcHBld2EgQ291bnR5CisxMDpVUzpVU0E6VU5JVEVEIFNUQVRFUzpXSVNDT05TSU46Q2xhcmsgQ291bnR5CisxMTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpXSVNDT05TSU46Q29sdW1iaWEgQ291bnR5CisxMjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpXSVNDT05TSU46Q3Jhd2ZvcmQgQ291bnR5CisxMzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpXSVNDT05TSU46RGFuZSBDb3VudHkKKzE0OlVTOlVTQTpVTklURUQgU1RBVEVTOldJU0NPTlNJTjpEb2RnZSBDb3VudHkKKzE1OlVTOlVTQTpVTklURUQgU1RBVEVTOldJU0NPTlNJTjpEb29yIENvdW50eQorMTY6VVM6VVNBOlVOSVRFRCBTVEFURVM6V0lTQ09OU0lOOkRvdWdsYXMgQ291bnR5CisxNzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpXSVNDT05TSU46RHVubiBDb3VudHkKKzE4OlVTOlVTQTpVTklURUQgU1RBVEVTOldJU0NPTlNJTjpFYXUgQ2xhaXJlIENvdW50eQorMTk6VVM6VVNBOlVOSVRFRCBTVEFURVM6V0lTQ09OU0lOOkZsb3JlbmNlIENvdW50eQorMjA6VVM6VVNBOlVOSVRFRCBTVEFURVM6V0lTQ09OU0lOOkZvbmQgZHUgTGFjIENvdW50eQorMjE6VVM6VVNBOlVOSVRFRCBTVEFURVM6V0lTQ09OU0lOOkZvcmVzdCBDb3VudHkKKzIyOlVTOlVTQTpVTklURUQgU1RBVEVTOldJU0NPTlNJTjpHcmFudCBDb3VudHkKKzIzOlVTOlVTQTpVTklURUQgU1RBVEVTOldJU0NPTlNJTjpHcmVlbiBDb3VudHkKKzI0OlVTOlVTQTpVTklURUQgU1RBVEVTOldJU0NPTlNJTjpHcmVlbiBMYWtlIENvdW50eQorMjU6VVM6VVNBOlVOSVRFRCBTVEFURVM6V0lTQ09OU0lOOklvd2EgQ291bnR5CisyNjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpXSVNDT05TSU46SXJvbiBDb3VudHkKKzI3OlVTOlVTQTpVTklURUQgU1RBVEVTOldJU0NPTlNJTjpKYWNrc29uIENvdW50eQorMjg6VVM6VVNBOlVOSVRFRCBTVEFURVM6V0lTQ09OU0lOOkplZmZlcnNvbiBDb3VudHkKKzI5OlVTOlVTQTpVTklURUQgU1RBVEVTOldJU0NPTlNJTjpKdW5lYXUgQ291bnR5CiszMDpVUzpVU0E6VU5JVEVEIFNUQVRFUzpXSVNDT05TSU46S2Vub3NoYSBDb3VudHkKKzMxOlVTOlVTQTpVTklURUQgU1RBVEVTOldJU0NPTlNJTjpLZXdhdW5lZSBDb3VudHkKKzMyOlVTOlVTQTpVTklURUQgU1RBVEVTOldJU0NPTlNJTjpMYSBDcm9zc2UgQ291bnR5CiszMzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpXSVNDT05TSU46TGFmYXlldHRlIENvdW50eQorMzQ6VVM6VVNBOlVOSVRFRCBTVEFURVM6V0lTQ09OU0lOOkxhbmdsYWRlIENvdW50eQorMzU6VVM6VVNBOlVOSVRFRCBTVEFURVM6V0lTQ09OU0lOOkxpbmNvbG4gQ291bnR5CiszNjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpXSVNDT05TSU46TWFuaXRvd29jIENvdW50eQorMzc6VVM6VVNBOlVOSVRFRCBTVEFURVM6V0lTQ09OU0lOOk1hcmF0aG9uIENvdW50eQorMzg6VVM6VVNBOlVOSVRFRCBTVEFURVM6V0lTQ09OU0lOOk1hcmluZXR0ZSBDb3VudHkKKzM5OlVTOlVTQTpVTklURUQgU1RBVEVTOldJU0NPTlNJTjpNYXJxdWV0dGUgQ291bnR5Cis0MDpVUzpVU0E6VU5JVEVEIFNUQVRFUzpXSVNDT05TSU46TWVub21pbmVlIENvdW50eQorNDE6VVM6VVNBOlVOSVRFRCBTVEFURVM6V0lTQ09OU0lOOk1pbHdhdWtlZSBDb3VudHkKKzQyOlVTOlVTQTpVTklURUQgU1RBVEVTOldJU0NPTlNJTjpNb25yb2UgQ291bnR5Cis0MzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpXSVNDT05TSU46T2NvbnRvIENvdW50eQorNDQ6VVM6VVNBOlVOSVRFRCBTVEFURVM6V0lTQ09OU0lOOk9uZWlkYSBDb3VudHkKKzQ1OlVTOlVTQTpVTklURUQgU1RBVEVTOldJU0NPTlNJTjpPdXRhZ2FtaWUgQ291bnR5Cis0NjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpXSVNDT05TSU46T3phdWtlZSBDb3VudHkKKzQ3OlVTOlVTQTpVTklURUQgU1RBVEVTOldJU0NPTlNJTjpQZXBpbiBDb3VudHkKKzQ4OlVTOlVTQTpVTklURUQgU1RBVEVTOldJU0NPTlNJTjpQaWVyY2UgQ291bnR5Cis0OTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpXSVNDT05TSU46UG9sayBDb3VudHkKKzUwOlVTOlVTQTpVTklURUQgU1RBVEVTOldJU0NPTlNJTjpQb3J0YWdlIENvdW50eQorNTE6VVM6VVNBOlVOSVRFRCBTVEFURVM6V0lTQ09OU0lOOlByaWNlIENvdW50eQorNTI6VVM6VVNBOlVOSVRFRCBTVEFURVM6V0lTQ09OU0lOOlJhY2luZSBDb3VudHkKKzUzOlVTOlVTQTpVTklURUQgU1RBVEVTOldJU0NPTlNJTjpSaWNobGFuZCBDb3VudHkKKzU0OlVTOlVTQTpVTklURUQgU1RBVEVTOldJU0NPTlNJTjpSb2NrIENvdW50eQorNTU6VVM6VVNBOlVOSVRFRCBTVEFURVM6V0lTQ09OU0lOOlJ1c2sgQ291bnR5Cis1NjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpXSVNDT05TSU46U2F1ayBDb3VudHkKKzU3OlVTOlVTQTpVTklURUQgU1RBVEVTOldJU0NPTlNJTjpTYXd5ZXIgQ291bnR5Cis1ODpVUzpVU0E6VU5JVEVEIFNUQVRFUzpXSVNDT05TSU46U2hhd2FubyBDb3VudHkKKzU5OlVTOlVTQTpVTklURUQgU1RBVEVTOldJU0NPTlNJTjpTaGVib3lnYW4gQ291bnR5Cis2MDpVUzpVU0E6VU5JVEVEIFNUQVRFUzpXSVNDT05TSU46U3QuIENyb2l4IENvdW50eQorNjE6VVM6VVNBOlVOSVRFRCBTVEFURVM6V0lTQ09OU0lOOlRheWxvciBDb3VudHkKKzYyOlVTOlVTQTpVTklURUQgU1RBVEVTOldJU0NPTlNJTjpUcmVtcGVhbGVhdSBDb3VudHkKKzYzOlVTOlVTQTpVTklURUQgU1RBVEVTOldJU0NPTlNJTjpWZXJub24gQ291bnR5Cis2NDpVUzpVU0E6VU5JVEVEIFNUQVRFUzpXSVNDT05TSU46VmlsYXMgQ291bnR5Cis2NTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpXSVNDT05TSU46V2Fsd29ydGggQ291bnR5Cis2NjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpXSVNDT05TSU46V2FzaGJ1cm4gQ291bnR5Cis2NzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpXSVNDT05TSU46V2FzaGluZ3RvbiBDb3VudHkKKzY4OlVTOlVTQTpVTklURUQgU1RBVEVTOldJU0NPTlNJTjpXYXVrZXNoYSBDb3VudHkKKzY5OlVTOlVTQTpVTklURUQgU1RBVEVTOldJU0NPTlNJTjpXYXVwYWNhIENvdW50eQorNzA6VVM6VVNBOlVOSVRFRCBTVEFURVM6V0lTQ09OU0lOOldhdXNoYXJhIENvdW50eQorNzE6VVM6VVNBOlVOSVRFRCBTVEFURVM6V0lTQ09OU0lOOldpbm5lYmFnbyBDb3VudHkKKzcyOlVTOlVTQTpVTklURUQgU1RBVEVTOldJU0NPTlNJTjpXb29kIENvdW50eQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L1VaQi9VWkJfQURNSU4xX0xFWC50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvVVpCL1VaQl9BRE1JTjFfTEVYLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42N2E0ODBjCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L1VaQi9VWkJfQURNSU4xX0xFWC50eHQKQEAgLTAsMCArMSwxNSBAQAorMTpVWi1BTjpVWjpBTkRJWkhBTgorMjpVWi1BUzpVWjpBUkFMIFNFQQorMzpVWi1CVTpVWjpCVUtIQVJBCis0OlVaLUZBOlVaOkZFUkdBTkEKKzU6VVotSkk6VVo6SklaWkFYCis2OlVaLVFSOlVaOktBUkFLQUxQQUsgW1FPUkFRQUxQT0eRSVNUT04gUkVTUFVCTElLQVNJXQorNzpVWi1RQTpVWjpLQVNIS0FEQVJZQSBbUUFTSFFBREFSWU9dCis4OlVaLVhPOlVaOktIT1JFWk0gW1hPUkFaTV0KKzk6VVotTkc6VVo6TkFNQU5HQU4KKzEwOlVaLU5XOlVaOk5BVk9JWQorMTE6VVotU0E6VVo6U0FNQVJLQU5EIFtTQU1BUlFBTkRdCisxMjpVWi1TVTpVWjpTVVJLSEFOREFSWUEgW1NVUlhPTkRBUllPXQorMTM6VVotU0k6VVo6U1lSREFSWUEgW1NJUkRBUllPXQorMTQ6VVotVE86VVo6VEFTSEtFTlQgT0JMQVNUIFtUT1NIS0VOVF0KKzE1OlVaLVRLOlVaOlRPU0hLRU5UCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvVVpCL1VaQl9BRE1JTjJfTEVYLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9VWkIvVVpCX0FETUlOMl9MRVgudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRhMjMwNmMKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvVVpCL1VaQl9BRE1JTjJfTEVYLnR4dApAQCAtMCwwICsxLDQ4IEBACisxOlVaOlVaQjpVWkJFS0lTVEFOOlNhbWFya2FuZDpVWkIuTDIuNAorMTpVWjpVWkI6VVpCRUtJU1RBTjpLYXJha2FscGFrOlVaQi5MMi41CisxOlVaOlVaQjpVWkJFS0lTVEFOOlN1cmtoYW5kYXJ5YTpVWkIuTDIuMworMTpVWjpVWkI6VVpCRUtJU1RBTjpBcmFsIFNlYTpVWkIuTDIuMTAKKzI6VVo6VVpCOlVaQkVLSVNUQU46QXJhbCBTZWE6VVpCLkwyLjExCiszOlVaOlVaQjpVWkJFS0lTVEFOOkFyYWwgU2VhOlVaQi5MMi4xMgorNDpVWjpVWkI6VVpCRUtJU1RBTjpBcmFsIFNlYTpVWkIuTDIuMTMKKzU6VVo6VVpCOlVaQkVLSVNUQU46QXJhbCBTZWE6VVpCLkwyLjE0Cis2OlVaOlVaQjpVWkJFS0lTVEFOOkFyYWwgU2VhOlVaQi5MMi4xNQorNzpVWjpVWkI6VVpCRUtJU1RBTjpBcmFsIFNlYTpVWkIuTDIuMTYKKzg6VVo6VVpCOlVaQkVLSVNUQU46QXJhbCBTZWE6VVpCLkwyLjE3Cis5OlVaOlVaQjpVWkJFS0lTVEFOOkFyYWwgU2VhOlVaQi5MMi4xOAorMTA6VVo6VVpCOlVaQkVLSVNUQU46QXJhbCBTZWE6VVpCLkwyLjE5CisxMTpVWjpVWkI6VVpCRUtJU1RBTjpBcmFsIFNlYTpVWkIuTDIuMjAKKzEyOlVaOlVaQjpVWkJFS0lTVEFOOkFyYWwgU2VhOlVaQi5MMi4yMQorMTM6VVo6VVpCOlVaQkVLSVNUQU46QXJhbCBTZWE6VVpCLkwyLjIyCisxNDpVWjpVWkI6VVpCRUtJU1RBTjpBcmFsIFNlYTpVWkIuTDIuMjMKKzE1OlVaOlVaQjpVWkJFS0lTVEFOOkFyYWwgU2VhOlVaQi5MMi4yNAorMTY6VVo6VVpCOlVaQkVLSVNUQU46QXJhbCBTZWE6VVpCLkwyLjI1CisxNzpVWjpVWkI6VVpCRUtJU1RBTjpBcmFsIFNlYTpVWkIuTDIuMjYKKzE4OlVaOlVaQjpVWkJFS0lTVEFOOkFyYWwgU2VhOlVaQi5MMi4yNworMTk6VVo6VVpCOlVaQkVLSVNUQU46QXJhbCBTZWE6VVpCLkwyLjI4CisyMDpVWjpVWkI6VVpCRUtJU1RBTjpBcmFsIFNlYTpVWkIuTDIuMjkKKzIxOlVaOlVaQjpVWkJFS0lTVEFOOkFyYWwgU2VhOlVaQi5MMi4zMAorMjI6VVo6VVpCOlVaQkVLSVNUQU46QXJhbCBTZWE6VVpCLkwyLjMxCisyMzpVWjpVWkI6VVpCRUtJU1RBTjpBcmFsIFNlYTpVWkIuTDIuMzIKKzI0OlVaOlVaQjpVWkJFS0lTVEFOOkFyYWwgU2VhOlVaQi5MMi4zMworMjU6VVo6VVpCOlVaQkVLSVNUQU46QXJhbCBTZWE6VVpCLkwyLjM0CisyNjpVWjpVWkI6VVpCRUtJU1RBTjpBcmFsIFNlYTpVWkIuTDIuMzUKKzI3OlVaOlVaQjpVWkJFS0lTVEFOOkFyYWwgU2VhOlVaQi5MMi4zNgorMjg6VVo6VVpCOlVaQkVLSVNUQU46QXJhbCBTZWE6VVpCLkwyLjM3CisyOTpVWjpVWkI6VVpCRUtJU1RBTjpBcmFsIFNlYTpVWkIuTDIuMzgKKzMwOlVaOlVaQjpVWkJFS0lTVEFOOkFyYWwgU2VhOlVaQi5MMi4zOQorMzE6VVo6VVpCOlVaQkVLSVNUQU46QXJhbCBTZWE6VVpCLkwyLjQwCiszMjpVWjpVWkI6VVpCRUtJU1RBTjpBcmFsIFNlYTpVWkIuTDIuNDEKKzMzOlVaOlVaQjpVWkJFS0lTVEFOOkFyYWwgU2VhOlVaQi5MMi40MgorMzQ6VVo6VVpCOlVaQkVLSVNUQU46QXJhbCBTZWE6VVpCLkwyLjQzCiszNTpVWjpVWkI6VVpCRUtJU1RBTjpBcmFsIFNlYTpVWkIuTDIuNworMzY6VVo6VVpCOlVaQkVLSVNUQU46QXJhbCBTZWE6VVpCLkwyLjgKKzM3OlVaOlVaQjpVWkJFS0lTVEFOOkFyYWwgU2VhOlVaQi5MMi45CisxOlVaOlVaQjpVWkJFS0lTVEFOOkFuZGl6aGFuOlVaQi5MMi40NAorMTpVWjpVWkI6VVpCRUtJU1RBTjpGZXJnYW5hOlVaQi5MMi4xCisxOlVaOlVaQjpVWkJFS0lTVEFOOlRhc2hrZW50IE9ibGFzdDpVWkIuTDIuNDUKKzE6VVo6VVpCOlVaQkVLSVNUQU46QnVraGFyYTpVWkIuTDIuNDgKKzE6VVo6VVpCOlVaQkVLSVNUQU46S2FzaGthZGFyeWE6VVpCLkwyLjIKKzE6VVo6VVpCOlVaQkVLSVNUQU46S2hvcmV6bTpVWkIuTDIuNDcKKzE6VVo6VVpCOlVaQkVLSVNUQU46TmFtYW5nYW46VVpCLkwyLjYKKzE6VVo6VVpCOlVaQkVLSVNUQU46U3lyZGFyeWE6VVpCLkwyLjQ2CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvVkVOL1ZFTl9BRE1JTjFfTEVYLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9WRU4vVkVOX0FETUlOMV9MRVgudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY1MjM2Y2IKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvVkVOL1ZFTl9BRE1JTjFfTEVYLnR4dApAQCAtMCwwICsxLDI1IEBACisxOlZFLVo6VkU6QU1BWk9OQVMKKzI6VkUtQjpWRTpBTlpPQVRFR1VJCiszOlZFLUM6VkU6QVBVUkUKKzQ6VkUtRDpWRTpBUkFHVUEKKzU6VkUtRTpWRTpCQVJJTkFTCis2OlZFLUY6VkU6Qk9MSVZBUgorNzpWRS1HOlZFOkNBUkFCT0JPCis4OlZFLUg6VkU6Q09KRURFUworOTpWRS1ZOlZFOkRFTFRBIEFNQUNVUk8KKzEwOlZFLVc6VkU6REVQRU5ERU5DSUFTIEZFREVSQUxFUworMTE6VkUtQTpWRTpESVNUUklUTyBGRURFUkFMCisxMjpWRS1JOlZFOkZBTENPTgorMTM6VkUtSjpWRTpHVUFSSUNPCisxNDpWRS1LOlZFOkxBUkEKKzE1OlZFLUw6VkU6TUVSSURBCisxNjpWRS1NOlZFOk1JUkFOREEKKzE3OlZFLU46VkU6TU9OQUdBUworMTg6VkUtTzpWRTpOVUVWQSBFU1BBUlRBCisxOTpWRS1QOlZFOlBPUlRVR1VFU0EKKzIwOlZFLVI6VkU6U1VDUkUKKzIxOlZFLVM6VkU6VEFDSElSQQorMjI6VkUtVDpWRTpUUlVKSUxMTworMjM6VkUtWDpWRTpWQVJHQVMKKzI0OlZFLVU6VkU6WUFSQUNVWQorMjU6VkUtVjpWRTpaVUxJQQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L1ZFTi9WRU5fQURNSU4yX0xFWC50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvVkVOL1ZFTl9BRE1JTjJfTEVYLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jOTE0ODcwCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L1ZFTi9WRU5fQURNSU4yX0xFWC50eHQKQEAgLTAsMCArMSwzMDEgQEAKKzE6VkU6VkVOOlZFTkVaVUVMQTpVTktOT1dOOklzbGEKKzI6VkU6VkVOOlZFTkVaVUVMQTpVTktOT1dOOklzbGEgTGEgVG9ydHVnYQorMzpWRTpWRU46VkVORVpVRUxBOlVOS05PV046UmlvIE9yaW5vY28KKzE6VkU6VkVOOlZFTkVaVUVMQTpCT0xJVkFSOkNhcm9uaQorMjpWRTpWRU46VkVORVpVRUxBOkJPTElWQVI6Q2VkZW5vCiszOlZFOlZFTjpWRU5FWlVFTEE6Qk9MSVZBUjpFbCBDYWxsYW8KKzQ6VkU6VkVOOlZFTkVaVUVMQTpCT0xJVkFSOkdyYW4gU2FiYW5hCis1OlZFOlZFTjpWRU5FWlVFTEE6Qk9MSVZBUjpIZXJlcworNjpWRTpWRU46VkVORVpVRUxBOkJPTElWQVI6UGlhcgorNzpWRTpWRU46VkVORVpVRUxBOkJPTElWQVI6UmF1bCBMZW9uaQorODpWRTpWRU46VkVORVpVRUxBOkJPTElWQVI6Um9zY2lvCis5OlZFOlZFTjpWRU5FWlVFTEE6Qk9MSVZBUjpTaWZvbnRlcworMTA6VkU6VkVOOlZFTkVaVUVMQTpCT0xJVkFSOlN1Y3JlCisxOlZFOlZFTjpWRU5FWlVFTEE6TEFSQTpBbmRyZXMgRWxveSBCbGFuY28KKzI6VkU6VkVOOlZFTkVaVUVMQTpMQVJBOkNyZXNwbworMzpWRTpWRU46VkVORVpVRUxBOkxBUkE6SXJpYmFycmVuCis0OlZFOlZFTjpWRU5FWlVFTEE6TEFSQTpKaW1lbmV6Cis1OlZFOlZFTjpWRU5FWlVFTEE6TEFSQTpNb3JhbgorNjpWRTpWRU46VkVORVpVRUxBOkxBUkE6UGFsYXZlY2lubworNzpWRTpWRU46VkVORVpVRUxBOkxBUkE6U2ltb24gUGxhbmFzCis4OlZFOlZFTjpWRU5FWlVFTEE6TEFSQTpUb3JyZXMKKzk6VkU6VkVOOlZFTkVaVUVMQTpMQVJBOlVyZGFuZXRhCisxOlZFOlZFTjpWRU5FWlVFTEE6QU1BWk9OQVM6RC4gQXRhYmFwbworMjpWRTpWRU46VkVORVpVRUxBOkFNQVpPTkFTOkQuIEF0dXJlcworMzpWRTpWRU46VkVORVpVRUxBOkFNQVpPTkFTOkQuIENhc2lxdWlhcmUKKzQ6VkU6VkVOOlZFTkVaVUVMQTpBTUFaT05BUzpELiBSaW8gTmVncm8KKzE6VkU6VkVOOlZFTkVaVUVMQTpOVUVWQSBFU1BBUlRBOkFudG9saW4gZGVsIENhbWkKKzI6VkU6VkVOOlZFTkVaVUVMQTpOVUVWQSBFU1BBUlRBOkFyaXNtZW5kaQorMzpWRTpWRU46VkVORVpVRUxBOk5VRVZBIEVTUEFSVEE6RGlhegorNDpWRTpWRU46VkVORVpVRUxBOk5VRVZBIEVTUEFSVEE6R2FyY2lhCis1OlZFOlZFTjpWRU5FWlVFTEE6TlVFVkEgRVNQQVJUQTpHb21legorNjpWRTpWRU46VkVORVpVRUxBOk5VRVZBIEVTUEFSVEE6SXNsYSBEZSBDb2NoZQorNzpWRTpWRU46VkVORVpVRUxBOk5VRVZBIEVTUEFSVEE6SXNsYSBEZSBDdWJhZ3VhCis4OlZFOlZFTjpWRU5FWlVFTEE6TlVFVkEgRVNQQVJUQTpNYW5laXJvCis5OlZFOlZFTjpWRU5FWlVFTEE6TlVFVkEgRVNQQVJUQTpNYXJjYW5vCisxMDpWRTpWRU46VkVORVpVRUxBOk5VRVZBIEVTUEFSVEE6TWFyaW5vCisxMTpWRTpWRU46VkVORVpVRUxBOk5VRVZBIEVTUEFSVEE6UGVuaW5zdWxhIGRlIE1hY2FuYW8KKzE6VkU6VkVOOlZFTkVaVUVMQTpBUkFHVUE6Qm9saXZhcgorMjpWRTpWRU46VkVORVpVRUxBOkFSQUdVQTpDYW1hdGFndWEKKzM6VkU6VkVOOlZFTkVaVUVMQTpBUkFHVUE6R2lyYXJkb3QKKzQ6VkU6VkVOOlZFTkVaVUVMQTpBUkFHVUE6Sm9zZSBBbmdlbCBMYW1hcworNTpWRTpWRU46VkVORVpVRUxBOkFSQUdVQTpKb3NlIEZlbGl4IFJpYmFzCis2OlZFOlZFTjpWRU5FWlVFTEE6QVJBR1VBOkxpYmVydGFkb3IKKzc6VkU6VkVOOlZFTkVaVUVMQTpBUkFHVUE6TWFyaW8gQnJpY2VubyBJcmFnb3JyeQorODpWRTpWRU46VkVORVpVRUxBOkFSQUdVQTpTYW4gQ2FzaW1pcm8KKzk6VkU6VkVOOlZFTkVaVUVMQTpBUkFHVUE6U2FuIFNlYmFzdGlhbgorMTA6VkU6VkVOOlZFTkVaVUVMQTpBUkFHVUE6U2FudGlhZ28gTWFyaW5vCisxMTpWRTpWRU46VkVORVpVRUxBOkFSQUdVQTpTYW50b3MgTWljaGVsZW5hCisxMjpWRTpWRU46VkVORVpVRUxBOkFSQUdVQTpTdWNyZQorMTM6VkU6VkVOOlZFTkVaVUVMQTpBUkFHVUE6VG92YXIKKzE0OlZFOlZFTjpWRU5FWlVFTEE6QVJBR1VBOlVyZGFuZXRhCisxNTpWRTpWRU46VkVORVpVRUxBOkFSQUdVQTpaYW1vcmEKKzE6VkU6VkVOOlZFTkVaVUVMQTpQT1JUVUdVRVNBOkFndWEgQmxhbmNhCisyOlZFOlZFTjpWRU5FWlVFTEE6UE9SVFVHVUVTQTpBcmF1cmUKKzM6VkU6VkVOOlZFTkVaVUVMQTpQT1JUVUdVRVNBOkVzdGVsbGVyCis0OlZFOlZFTjpWRU5FWlVFTEE6UE9SVFVHVUVTQTpHdWFuYXJlCis1OlZFOlZFTjpWRU5FWlVFTEE6UE9SVFVHVUVTQTpHdWFuYXJpdG8KKzY6VkU6VkVOOlZFTkVaVUVMQTpQT1JUVUdVRVNBOk1vbnNlbm9yIEpvc2UgVmljZW50ZSBkZQorNzpWRTpWRU46VkVORVpVRUxBOlBPUlRVR1VFU0E6T3NwaW5vCis4OlZFOlZFTjpWRU5FWlVFTEE6UE9SVFVHVUVTQTpQYWV6Cis5OlZFOlZFTjpWRU5FWlVFTEE6UE9SVFVHVUVTQTpQYXBlbG9uCisxMDpWRTpWRU46VkVORVpVRUxBOlBPUlRVR1VFU0E6U2FuIEdlbmFybyBkZSBCb2Nvbm9pdG8KKzExOlZFOlZFTjpWRU5FWlVFTEE6UE9SVFVHVUVTQTpTYW4gUmFmYWVsIGRlIE9ub3RvCisxMjpWRTpWRU46VkVORVpVRUxBOlBPUlRVR1VFU0E6U2FudGEgUm9zYWxpYQorMTM6VkU6VkVOOlZFTkVaVUVMQTpQT1JUVUdVRVNBOlN1Y3JlCisxNDpWRTpWRU46VkVORVpVRUxBOlBPUlRVR1VFU0E6VHVyZW4KKzE6VkU6VkVOOlZFTkVaVUVMQTpTVUNSRTpBbmRyZXMgRWxveSBCbGFuY28KKzI6VkU6VkVOOlZFTkVaVUVMQTpTVUNSRTpBbmRyZXMgTWF0YQorMzpWRTpWRU46VkVORVpVRUxBOlNVQ1JFOkFyaXNtZW5kaQorNDpWRTpWRU46VkVORVpVRUxBOlNVQ1JFOkJlbml0ZXoKKzU6VkU6VkVOOlZFTkVaVUVMQTpTVUNSRTpCZXJtdWRlegorNjpWRTpWRU46VkVORVpVRUxBOlNVQ1JFOkJvbGl2YXIKKzc6VkU6VkVOOlZFTkVaVUVMQTpTVUNSRTpDYWppZ2FsCis4OlZFOlZFTjpWRU5FWlVFTEE6U1VDUkU6Q3J1eiBTYWxtZXJvbiBBY29zdGEKKzk6VkU6VkVOOlZFTkVaVUVMQTpTVUNSRTpJc2xhCisxMDpWRTpWRU46VkVORVpVRUxBOlNVQ1JFOkxpYmVydGFkb3IKKzExOlZFOlZFTjpWRU5FWlVFTEE6U1VDUkU6TWFyaW5vCisxMjpWRTpWRU46VkVORVpVRUxBOlNVQ1JFOk1lamlhCisxMzpWRTpWRU46VkVORVpVRUxBOlNVQ1JFOk1vbnRlcworMTQ6VkU6VkVOOlZFTkVaVUVMQTpTVUNSRTpSaWJlcm8KKzE1OlZFOlZFTjpWRU5FWlVFTEE6U1VDUkU6U3VjcmUKKzE2OlZFOlZFTjpWRU5FWlVFTEE6U1VDUkU6VmFsZGV6CisxOlZFOlZFTjpWRU5FWlVFTEE6TU9OQUdBUzpBY29zdGEKKzI6VkU6VkVOOlZFTkVaVUVMQTpNT05BR0FTOkJvbGl2YXIKKzM6VkU6VkVOOlZFTkVaVUVMQTpNT05BR0FTOkNhcmlwZQorNDpWRTpWRU46VkVORVpVRUxBOk1PTkFHQVM6Q2VkZW5vCis1OlZFOlZFTjpWRU5FWlVFTEE6TU9OQUdBUzpFemVxdWllbCBaYW1vcmEKKzY6VkU6VkVOOlZFTkVaVUVMQTpNT05BR0FTOkxpYmVydGFkb3IKKzc6VkU6VkVOOlZFTkVaVUVMQTpNT05BR0FTOk1hdHVyaW4KKzg6VkU6VkVOOlZFTkVaVUVMQTpNT05BR0FTOlBpYXIKKzk6VkU6VkVOOlZFTkVaVUVMQTpNT05BR0FTOlB1bmNlcmVzCisxMDpWRTpWRU46VkVORVpVRUxBOk1PTkFHQVM6U290aWxsbworMTpWRTpWRU46VkVORVpVRUxBOlpVTElBOkFsbWlyYW50ZSBQYWRpbGxhCisyOlZFOlZFTjpWRU5FWlVFTEE6WlVMSUE6QmFyYWx0CiszOlZFOlZFTjpWRU5FWlVFTEE6WlVMSUE6Q2FiaW1hcworNDpWRTpWRU46VkVORVpVRUxBOlpVTElBOkNhdGF0dW1ibworNTpWRTpWRU46VkVORVpVRUxBOlpVTElBOkNvbG9uCis2OlZFOlZFTjpWRU5FWlVFTEE6WlVMSUE6SXNsYQorNzpWRTpWRU46VkVORVpVRUxBOlpVTElBOkplc3VzIEVucmlxdWUgTG96YWRhCis4OlZFOlZFTjpWRU5FWlVFTEE6WlVMSUE6TGEgQ2FuYWRhIGRlIFVyZGFuZXRhCis5OlZFOlZFTjpWRU5FWlVFTEE6WlVMSUE6TGFndW5pbGxhcworMTA6VkU6VkVOOlZFTkVaVUVMQTpaVUxJQTpNYWNoaXF1ZXMgZGUgUGVyaWphCisxMTpWRTpWRU46VkVORVpVRUxBOlpVTElBOk1hcmEKKzEyOlZFOlZFTjpWRU5FWlVFTEE6WlVMSUE6TWFyYWNhaWJvCisxMzpWRTpWRU46VkVORVpVRUxBOlpVTElBOk1pcmFuZGEKKzE0OlZFOlZFTjpWRU5FWlVFTEE6WlVMSUE6UGFlegorMTU6VkU6VkVOOlZFTkVaVUVMQTpaVUxJQTpSb3NhcmlvIGRlIFBlcmlqYQorMTY6VkU6VkVOOlZFTkVaVUVMQTpaVUxJQTpTYW50YSBSaXRhCisxNzpWRTpWRU46VkVORVpVRUxBOlpVTElBOlN1Y3JlCisxODpWRTpWRU46VkVORVpVRUxBOlpVTElBOlZhbG1vcmUgUm9kcmlndWV6CisxOlZFOlZFTjpWRU5FWlVFTEE6WUFSQUNVWTpBdXRvbm9tbyBCb2xpdmFyCisyOlZFOlZFTjpWRU5FWlVFTEE6WUFSQUNVWTpBdXRvbm9tbyBCcnV6dWFsCiszOlZFOlZFTjpWRU5FWlVFTEE6WUFSQUNVWTpBdXRvbm9tbyBKb3NlIEFudG9uaW8gUGFlCis0OlZFOlZFTjpWRU5FWlVFTEE6WUFSQUNVWTpBdXRvbm9tbyBOaXJndWEKKzU6VkU6VkVOOlZFTkVaVUVMQTpZQVJBQ1VZOkF1dG9ub21vIFBlbmEKKzY6VkU6VkVOOlZFTkVaVUVMQTpZQVJBQ1VZOkF1dG9ub21vIFNhbiBGZWxpcGUKKzc6VkU6VkVOOlZFTkVaVUVMQTpZQVJBQ1VZOkF1dG9ub21vIFN1Y3JlCis4OlZFOlZFTjpWRU5FWlVFTEE6WUFSQUNVWTpBdXRvbm9tbyBVcmFjaGlxdWUKKzE6VkU6VkVOOlZFTkVaVUVMQTpUQUNISVJBOkFuZHJlcyBCZWxsbworMjpWRTpWRU46VkVORVpVRUxBOlRBQ0hJUkE6QXlhY3VjaG8KKzM6VkU6VkVOOlZFTkVaVUVMQTpUQUNISVJBOkJvbGl2YXIKKzQ6VkU6VkVOOlZFTkVaVUVMQTpUQUNISVJBOkNhcmRlbmFzCis1OlZFOlZFTjpWRU5FWlVFTEE6VEFDSElSQTpDb3Jkb2JhCis2OlZFOlZFTjpWRU5FWlVFTEE6VEFDSElSQTpGZXJuYW5kZXogRmVvCis3OlZFOlZFTjpWRU5FWlVFTEE6VEFDSElSQTpHYXJjaWEgZGUgSGV2aWEKKzg6VkU6VkVOOlZFTkVaVUVMQTpUQUNISVJBOkd1YXNpbW9zCis5OlZFOlZFTjpWRU5FWlVFTEE6VEFDSElSQTpJbmRlcGVuZGVuY2lhCisxMDpWRTpWRU46VkVORVpVRUxBOlRBQ0hJUkE6SmF1cmVndWkKKzExOlZFOlZFTjpWRU5FWlVFTEE6VEFDSElSQTpKdW5pbgorMTI6VkU6VkVOOlZFTkVaVUVMQTpUQUNISVJBOkxpYmVydGFkCisxMzpWRTpWRU46VkVORVpVRUxBOlRBQ0hJUkE6TGliZXJ0YWRvcgorMTQ6VkU6VkVOOlZFTkVaVUVMQTpUQUNISVJBOkxvYmF0ZXJhCisxNTpWRTpWRU46VkVORVpVRUxBOlRBQ0hJUkE6TWljaGVsZW5hCisxNjpWRTpWRU46VkVORVpVRUxBOlRBQ0hJUkE6UGFuYW1lcmljYW5vCisxNzpWRTpWRU46VkVORVpVRUxBOlRBQ0hJUkE6UGVkcm8gTWFyaWEgVXJlbmEKKzE4OlZFOlZFTjpWRU5FWlVFTEE6VEFDSElSQTpTYW11ZWwgRGFyaW8gTWFsZG9uYWRvCisxOTpWRTpWRU46VkVORVpVRUxBOlRBQ0hJUkE6U2FuIENyaXN0b2JhbAorMjA6VkU6VkVOOlZFTkVaVUVMQTpUQUNISVJBOlNlYm9ydWNvCisyMTpWRTpWRU46VkVORVpVRUxBOlRBQ0hJUkE6U3VjcmUKKzIyOlZFOlZFTjpWRU5FWlVFTEE6VEFDSElSQTpVcmliYW50ZQorMTpWRTpWRU46VkVORVpVRUxBOkNPSkVERVM6QW56b2F0ZWd1aQorMjpWRTpWRU46VkVORVpVRUxBOkNPSkVERVM6RmFsY29uCiszOlZFOlZFTjpWRU5FWlVFTEE6Q09KRURFUzpHaXJhcmRvdAorNDpWRTpWRU46VkVORVpVRUxBOkNPSkVERVM6UGFvIGRlIFNhbiBKdWFuIEJhdXRpc3RhCis1OlZFOlZFTjpWRU5FWlVFTEE6Q09KRURFUzpSaWNhdXJ0ZQorNjpWRTpWRU46VkVORVpVRUxBOkNPSkVERVM6U2FuIENhcmxvcworNzpWRTpWRU46VkVORVpVRUxBOkNPSkVERVM6VGluYWNvCisxOlZFOlZFTjpWRU5FWlVFTEE6RElTVFJJVE8gRkVERVJBTDpDYXJhY2FzCisyOlZFOlZFTjpWRU5FWlVFTEE6RElTVFJJVE8gRkVERVJBTDpWYXJnYXMKKzE6VkU6VkVOOlZFTkVaVUVMQTpGQUxDT046QWNvc3RhCisyOlZFOlZFTjpWRU5FWlVFTEE6RkFMQ09OOkJvbGl2YXIKKzM6VkU6VkVOOlZFTkVaVUVMQTpGQUxDT046QnVjaGl2YWNvYQorNDpWRTpWRU46VkVORVpVRUxBOkZBTENPTjpDYWNpcXVlIE1hbmF1cmUKKzU6VkU6VkVOOlZFTkVaVUVMQTpGQUxDT046Q2FyaXJ1YmFuYQorNjpWRTpWRU46VkVORVpVRUxBOkZBTENPTjpDb2xpbmEKKzc6VkU6VkVOOlZFTkVaVUVMQTpGQUxDT046RGFiYWp1cm8KKzg6VkU6VkVOOlZFTkVaVUVMQTpGQUxDT046RGVtb2NyYWNpYQorOTpWRTpWRU46VkVORVpVRUxBOkZBTENPTjpGYWxjb24KKzEwOlZFOlZFTjpWRU5FWlVFTEE6RkFMQ09OOkZlZGVyYWNpb24KKzExOlZFOlZFTjpWRU5FWlVFTEE6RkFMQ09OOklzbGEKKzEyOlZFOlZFTjpWRU5FWlVFTEE6RkFMQ09OOkphY3VyYQorMTM6VkU6VkVOOlZFTkVaVUVMQTpGQUxDT046TG9zIFRhbnF1ZXMKKzE0OlZFOlZFTjpWRU5FWlVFTEE6RkFMQ09OOk1hdXJvYQorMTU6VkU6VkVOOlZFTkVaVUVMQTpGQUxDT046TWlyYW5kYQorMTY6VkU6VkVOOlZFTkVaVUVMQTpGQUxDT046TW9uc2Vub3IgSXR1cnJpemEKKzE3OlZFOlZFTjpWRU5FWlVFTEE6RkFMQ09OOlBhbG1hIFNvbGEKKzE4OlZFOlZFTjpWRU5FWlVFTEE6RkFMQ09OOlBldGl0CisxOTpWRTpWRU46VkVORVpVRUxBOkZBTENPTjpQaXJpdHUKKzIwOlZFOlZFTjpWRU5FWlVFTEE6RkFMQ09OOlNhbiBGcmFuY2lzY28KKzIxOlZFOlZFTjpWRU5FWlVFTEE6RkFMQ09OOlNpbHZhCisyMjpWRTpWRU46VkVORVpVRUxBOkZBTENPTjpVbmlvbgorMjM6VkU6VkVOOlZFTkVaVUVMQTpGQUxDT046WmFtb3JhCisxOlZFOlZFTjpWRU5FWlVFTEE6TUVSSURBOkFsYmVydG8gQWRyaWFuaQorMjpWRTpWRU46VkVORVpVRUxBOk1FUklEQTpBbmRyZXMgQmVsbG8KKzM6VkU6VkVOOlZFTkVaVUVMQTpNRVJJREE6QW50b25pbyBQaW50byBTYWxpbmFzCis0OlZFOlZFTjpWRU5FWlVFTEE6TUVSSURBOkFyaWNhZ3VhCis1OlZFOlZFTjpWRU5FWlVFTEE6TUVSSURBOkFyem9iaXNwbyBDaGFjb24KKzY6VkU6VkVOOlZFTkVaVUVMQTpNRVJJREE6Q2FtcG8gRWxpYXMKKzc6VkU6VkVOOlZFTkVaVUVMQTpNRVJJREE6Q2FyYWNjaW9sbyBQYXJyYSBPbG1lZG8KKzg6VkU6VkVOOlZFTkVaVUVMQTpNRVJJREE6Q2FyZGVuYWwgUXVpbnRlcm8KKzk6VkU6VkVOOlZFTkVaVUVMQTpNRVJJREE6R3VhcmFxdWUKKzEwOlZFOlZFTjpWRU5FWlVFTEE6TUVSSURBOkp1bGlvIENlc2FyIFNhbGFzCisxMTpWRTpWRU46VkVORVpVRUxBOk1FUklEQTpKdXN0byBCcmljZW5vCisxMjpWRTpWRU46VkVORVpVRUxBOk1FUklEQTpMaWJlcnRhZG9yCisxMzpWRTpWRU46VkVORVpVRUxBOk1FUklEQTpNaXJhbmRhCisxNDpWRTpWRU46VkVORVpVRUxBOk1FUklEQTpPYmlzcG8gUmFtb3MgZGUgTG9yYQorMTU6VkU6VkVOOlZFTkVaVUVMQTpNRVJJREE6UGFkcmUgTm9ndWVyYQorMTY6VkU6VkVOOlZFTkVaVUVMQTpNRVJJREE6UHVlYmxvIExsYW5vCisxNzpWRTpWRU46VkVORVpVRUxBOk1FUklEQTpSYW5nZWwKKzE4OlZFOlZFTjpWRU5FWlVFTEE6TUVSSURBOlJpdmFzIERhdmlsYQorMTk6VkU6VkVOOlZFTkVaVUVMQTpNRVJJREE6U2FudG9zIE1hcnF1aW5hCisyMDpWRTpWRU46VkVORVpVRUxBOk1FUklEQTpTdWNyZQorMjE6VkU6VkVOOlZFTkVaVUVMQTpNRVJJREE6VG92YXIKKzIyOlZFOlZFTjpWRU5FWlVFTEE6TUVSSURBOlR1bGlvIEZlYnJlcyBDb3JkZXJvCisyMzpWRTpWRU46VkVORVpVRUxBOk1FUklEQTpaZWEKKzE6VkU6VkVOOlZFTkVaVUVMQTpERUxUQSBBTUFDVVJPOkQuIEFudG9uaW8gRGlhegorMjpWRTpWRU46VkVORVpVRUxBOkRFTFRBIEFNQUNVUk86RC4gUGVkZXJuYWxlcworMzpWRTpWRU46VkVORVpVRUxBOkRFTFRBIEFNQUNVUk86SXNsYQorNDpWRTpWRU46VkVORVpVRUxBOkRFTFRBIEFNQUNVUk86VHVjdXBpdGEKKzE6VkU6VkVOOlZFTkVaVUVMQTpUUlVKSUxMTzpCb2Nvbm8KKzI6VkU6VkVOOlZFTkVaVUVMQTpUUlVKSUxMTzpDYW5kZWxhcmlhCiszOlZFOlZFTjpWRU5FWlVFTEE6VFJVSklMTE86Q2FyYWNoZQorNDpWRTpWRU46VkVORVpVRUxBOlRSVUpJTExPOkVzY3VxdWUKKzU6VkU6VkVOOlZFTkVaVUVMQTpUUlVKSUxMTzpNaXJhbmRhCis2OlZFOlZFTjpWRU5FWlVFTEE6VFJVSklMTE86TW9udGUgQ2FybWVsbworNzpWRTpWRU46VkVORVpVRUxBOlRSVUpJTExPOk1vdGF0YW4KKzg6VkU6VkVOOlZFTkVaVUVMQTpUUlVKSUxMTzpQYW1wYW4KKzk6VkU6VkVOOlZFTkVaVUVMQTpUUlVKSUxMTzpSYWZhZWwgUmFuZ2VsCisxMDpWRTpWRU46VkVORVpVRUxBOlRSVUpJTExPOlNhbiBSYWZhZWwgZGUgQ2FydmFqYWwKKzExOlZFOlZFTjpWRU5FWlVFTEE6VFJVSklMTE86U3VjcmUKKzEyOlZFOlZFTjpWRU5FWlVFTEE6VFJVSklMTE86VHJ1amlsbG8KKzEzOlZFOlZFTjpWRU5FWlVFTEE6VFJVSklMTE86VXJkYW5ldGEKKzE0OlZFOlZFTjpWRU5FWlVFTEE6VFJVSklMTE86VmFsZXJhCisxOlZFOlZFTjpWRU5FWlVFTEE6QVBVUkU6QXV0b25vbW8gQWNoYWd1YXMKKzI6VkU6VkVOOlZFTkVaVUVMQTpBUFVSRTpBdXRvbm9tbyBCaXJ1YWNhCiszOlZFOlZFTjpWRU5FWlVFTEE6QVBVUkU6QXV0b25vbW8gTXVub3oKKzQ6VkU6VkVOOlZFTkVaVUVMQTpBUFVSRTpBdXRvbm9tbyBQYWV6Cis1OlZFOlZFTjpWRU5FWlVFTEE6QVBVUkU6QXV0b25vbW8gUGVkcm8gQ2FtZWpvCis2OlZFOlZFTjpWRU5FWlVFTEE6QVBVUkU6QXV0b25vbW8gUm9tdWxvIEdhbGxlZ29zCis3OlZFOlZFTjpWRU5FWlVFTEE6QVBVUkU6QXV0b25vbW8gU2FuIEZlcm5hbmRvCisxOlZFOlZFTjpWRU5FWlVFTEE6TUlSQU5EQTpBY2V2ZWRvCisyOlZFOlZFTjpWRU5FWlVFTEE6TUlSQU5EQTpBbmRyZXMgQmVsbG8KKzM6VkU6VkVOOlZFTkVaVUVMQTpNSVJBTkRBOkJhcnV0YQorNDpWRTpWRU46VkVORVpVRUxBOk1JUkFOREE6QnJpb24KKzU6VkU6VkVOOlZFTkVaVUVMQTpNSVJBTkRBOkJ1cm96Cis2OlZFOlZFTjpWRU5FWlVFTEE6TUlSQU5EQTpDYXJyaXphbAorNzpWRTpWRU46VkVORVpVRUxBOk1JUkFOREE6Q2hhY2FvCis4OlZFOlZFTjpWRU5FWlVFTEE6TUlSQU5EQTpDcmlzdG9iYWwgUm9qYXMKKzk6VkU6VkVOOlZFTkVaVUVMQTpNSVJBTkRBOkVsIEhhdGlsbG8KKzEwOlZFOlZFTjpWRU5FWlVFTEE6TUlSQU5EQTpHdWFpY2FpcHVybworMTE6VkU6VkVOOlZFTkVaVUVMQTpNSVJBTkRBOkluZGVwZW5kZW5jaWEKKzEyOlZFOlZFTjpWRU5FWlVFTEE6TUlSQU5EQTpJc2xhCisxMzpWRTpWRU46VkVORVpVRUxBOk1JUkFOREE6TGFuZGVyCisxNDpWRTpWRU46VkVORVpVRUxBOk1JUkFOREE6TG9zIFNhbGlhcworMTU6VkU6VkVOOlZFTkVaVUVMQTpNSVJBTkRBOlBhZXoKKzE2OlZFOlZFTjpWRU5FWlVFTEE6TUlSQU5EQTpQYXogQ2FzdGlsbG8KKzE3OlZFOlZFTjpWRU5FWlVFTEE6TUlSQU5EQTpQZWRybyBHdWFsCisxODpWRTpWRU46VkVORVpVRUxBOk1JUkFOREE6UGxhemEKKzE5OlZFOlZFTjpWRU5FWlVFTEE6TUlSQU5EQTpTaW1vbiBCb2xpdmFyCisyMDpWRTpWRU46VkVORVpVRUxBOk1JUkFOREE6U3VjcmUKKzIxOlZFOlZFTjpWRU5FWlVFTEE6TUlSQU5EQTpVcmRhbmV0YQorMjI6VkU6VkVOOlZFTkVaVUVMQTpNSVJBTkRBOlphbW9yYQorMTpWRTpWRU46VkVORVpVRUxBOkdVQVJJQ086Q2FtYWd1YW4KKzI6VkU6VkVOOlZFTkVaVUVMQTpHVUFSSUNPOkNoYWd1YXJhbWFzCiszOlZFOlZFTjpWRU5FWlVFTEE6R1VBUklDTzpFbCBTb2NvcnJvCis0OlZFOlZFTjpWRU5FWlVFTEE6R1VBUklDTzpHdWFjaGFyYW1hcworNTpWRTpWRU46VkVORVpVRUxBOkdVQVJJQ086SW5mYW50ZQorNjpWRTpWRU46VkVORVpVRUxBOkdVQVJJQ086TGFzIE1lcmNlZGVzCis3OlZFOlZFTjpWRU5FWlVFTEE6R1VBUklDTzpNZWxsYWRvCis4OlZFOlZFTjpWRU5FWlVFTEE6R1VBUklDTzpNaXJhbmRhCis5OlZFOlZFTjpWRU5FWlVFTEE6R1VBUklDTzpNb25hZ2FzCisxMDpWRTpWRU46VkVORVpVRUxBOkdVQVJJQ086T3J0aXoKKzExOlZFOlZFTjpWRU5FWlVFTEE6R1VBUklDTzpSaWJhcworMTI6VkU6VkVOOlZFTkVaVUVMQTpHVUFSSUNPOlJvc2NpbworMTM6VkU6VkVOOlZFTkVaVUVMQTpHVUFSSUNPOlNhbiBKb3NlIGRlIEd1YXJpYmUKKzE0OlZFOlZFTjpWRU5FWlVFTEE6R1VBUklDTzpTYW50YSBNYXJpYSBkZSBJcGlyZQorMTU6VkU6VkVOOlZFTkVaVUVMQTpHVUFSSUNPOlphcmF6YQorMTpWRTpWRU46VkVORVpVRUxBOkFOWk9BVEVHVUk6QW5hY28KKzI6VkU6VkVOOlZFTkVaVUVMQTpBTlpPQVRFR1VJOkFyYWd1YQorMzpWRTpWRU46VkVORVpVRUxBOkFOWk9BVEVHVUk6Qm9saXZhcgorNDpWRTpWRU46VkVORVpVRUxBOkFOWk9BVEVHVUk6QnJ1enVhbAorNTpWRTpWRU46VkVORVpVRUxBOkFOWk9BVEVHVUk6Q2FqaWdhbAorNjpWRTpWRU46VkVORVpVRUxBOkFOWk9BVEVHVUk6Q2FydmFqYWwKKzc6VkU6VkVOOlZFTkVaVUVMQTpBTlpPQVRFR1VJOkZyZWl0ZXMKKzg6VkU6VkVOOlZFTkVaVUVMQTpBTlpPQVRFR1VJOkd1YW5pcGEKKzk6VkU6VkVOOlZFTkVaVUVMQTpBTlpPQVRFR1VJOkd1YW50YQorMTA6VkU6VkVOOlZFTkVaVUVMQTpBTlpPQVRFR1VJOkkuIERlIEFkZW50cm8KKzExOlZFOlZFTjpWRU5FWlVFTEE6QU5aT0FURUdVSTpJLiBkZSBBZnVlcmEKKzEyOlZFOlZFTjpWRU5FWlVFTEE6QU5aT0FURUdVSTpJbmRlcGVuZGVuY2lhCisxMzpWRTpWRU46VkVORVpVRUxBOkFOWk9BVEVHVUk6SXNsYQorMTQ6VkU6VkVOOlZFTkVaVUVMQTpBTlpPQVRFR1VJOkxpYmVydGFkCisxNTpWRTpWRU46VkVORVpVRUxBOkFOWk9BVEVHVUk6TGljLiBEaWVnbyBCYXV0aXN0YSBVcmJhbgorMTY6VkU6VkVOOlZFTkVaVUVMQTpBTlpPQVRFR1VJOk1pcmFuZGEKKzE3OlZFOlZFTjpWRU5FWlVFTEE6QU5aT0FURUdVSTpNb25hZ2FzCisxODpWRTpWRU46VkVORVpVRUxBOkFOWk9BVEVHVUk6UGVuYWx2ZXIKKzE5OlZFOlZFTjpWRU5FWlVFTEE6QU5aT0FURUdVSTpQaXJpdHUKKzIwOlZFOlZFTjpWRU5FWlVFTEE6QU5aT0FURUdVSTpTaW1vbiBSb2RyaWd1ZXoKKzIxOlZFOlZFTjpWRU5FWlVFTEE6QU5aT0FURUdVSTpTb3RpbGxvCisxOlZFOlZFTjpWRU5FWlVFTEE6QkFSSU5BUzpBbGJlcnRvIEFydmVsbyBUb3JyZWFsYmEKKzI6VkU6VkVOOlZFTkVaVUVMQTpCQVJJTkFTOkFudG9uaW8gSm9zZSBkZSBTdWNyZQorMzpWRTpWRU46VkVORVpVRUxBOkJBUklOQVM6QXJpc21lbmRpCis0OlZFOlZFTjpWRU5FWlVFTEE6QkFSSU5BUzpCYXJpbmFzCis1OlZFOlZFTjpWRU5FWlVFTEE6QkFSSU5BUzpCb2xpdmFyCis2OlZFOlZFTjpWRU5FWlVFTEE6QkFSSU5BUzpDcnV6IFBhcmVkZXMKKzc6VkU6VkVOOlZFTkVaVUVMQTpCQVJJTkFTOkV6ZXF1aWVsIFphbW9yYQorODpWRTpWRU46VkVORVpVRUxBOkJBUklOQVM6T2Jpc3BvcworOTpWRTpWRU46VkVORVpVRUxBOkJBUklOQVM6UGVkcmF6YQorMTA6VkU6VkVOOlZFTkVaVUVMQTpCQVJJTkFTOlJvamFzCisxMTpWRTpWRU46VkVORVpVRUxBOkJBUklOQVM6U29zYQorMTpWRTpWRU46VkVORVpVRUxBOkNBUkFCT0JPOkJlanVtYQorMjpWRTpWRU46VkVORVpVRUxBOkNBUkFCT0JPOkNhcmxvcyBBcmV2YWxvCiszOlZFOlZFTjpWRU5FWlVFTEE6Q0FSQUJPQk86RGllZ28gSWJhcnJhCis0OlZFOlZFTjpWRU5FWlVFTEE6Q0FSQUJPQk86R3VhY2FyYQorNTpWRTpWRU46VkVORVpVRUxBOkNBUkFCT0JPOklzbGEKKzY6VkU6VkVOOlZFTkVaVUVMQTpDQVJBQk9CTzpKdWFuIEpvc2UgTW9yYQorNzpWRTpWRU46VkVORVpVRUxBOkNBUkFCT0JPOkxhZ28gZGUgVmFsZW5jaWEKKzg6VkU6VkVOOlZFTkVaVUVMQTpDQVJBQk9CTzpNaXJhbmRhCis5OlZFOlZFTjpWRU5FWlVFTEE6Q0FSQUJPQk86TW9udGFsYmFuCisxMDpWRTpWRU46VkVORVpVRUxBOkNBUkFCT0JPOlB1ZXJ0byBDYWJlbGxvCisxMTpWRTpWRU46VkVORVpVRUxBOkNBUkFCT0JPOlNhbiBKb2FxdWluCisxMjpWRTpWRU46VkVORVpVRUxBOkNBUkFCT0JPOlZhbGVuY2lhCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvVk5NL1ZOTV9BRE1JTjFfTEVYLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9WTk0vVk5NX0FETUlOMV9MRVgudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUxYTI0OTMKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvVk5NL1ZOTV9BRE1JTjFfTEVYLnR4dApAQCAtMCwwICsxLDY4IEBACisxOlZOLTQ0OlZOOkFOIEdJQU5HCisyOlZOLTQzOlZOOkJBIFJJQSAgIFZVTkcgVEFVCiszOlZOLTUzOlZOOkJBQyBDQU4KKzQ6Vk4tNTQ6Vk46QkFDIEdJQU5HCis1OlZOLTU1OlZOOkJBQyBMSUVVCis2OlZOLTU2OlZOOkJBQyBOSU5ICis3OlZOLUJUSDpWTjpCQUMgVEhBSQorODpWTi01MDpWTjpCRU4gVFJFCis5OlZOLTM6Vk46QklOSCBESU5ICisxMDpWTi01NzpWTjpCSU5IIERVT05HCisxMTpWTi01ODpWTjpCSU5IIFBIVU9DCisxMjpWTi00MDpWTjpCSU5IIFRIVUFOCisxMzpWTi01OTpWTjpDQSBNQVUKKzE0OlZOLTQ4OlZOOkNBTiBUSE8KKzE1OlZOLTA0OlZOOkNBTyBCQU5HCisxNjpWTi02MDpWTjpEQSBOQU5HLCBUSEFOSCBQSE8KKzE3OlZOLTMzOlZOOkRBQyBMQUMKKzE4OlZOLTcyOlZOOkRBSyBOT05HCisxOTpWTi03OlZOOkRJRU4gQklFTgorMjA6Vk4tMzk6Vk46RE9ORyBOQUkKKzIxOlZOLTQ1OlZOOkRPTkcgVEhBUAorMjI6Vk4tMzA6Vk46R0lBIExBSQorMjM6Vk4tSEJDOlZOOkhBIEJBQworMjQ6Vk4tMDM6Vk46SEEgR0lBTkcKKzI1OlZOLTY0OlZOOkhBIE5PSQorMjY6Vk4tNjU6Vk46SEEgVEFZCisyNzpWTi0yMzpWTjpIQSBUSU5ICisyODpWTi02OlZOOkhBSSBIVU5HCisyOTpWTi02MjpWTjpIQUkgUEhPTkcKKzMwOlZOLTczOlZOOkhBVSBHSUFORworMzE6Vk4tNjY6Vk46SE8gQ0hJIE1JTkggQ0lUWQorMzI6Vk4tNDpWTjpIT0EgQklOSAorMzM6Vk4tNjc6Vk46SFVORyBZRU4KKzM0OlZOLTM0OlZOOktIQU5IIEhPQQorMzU6Vk4tNDc6Vk46S0lFTiBHSUFORworMzY6Vk4tMjg6Vk46S09OIFRVTQorMzc6Vk4tMDpWTjpMQUkgQ0hBVQorMzg6Vk4tMzU6Vk46TEFNIERPTkcKKzM5OlZOLTA5OlZOOkxBTkcgU09OCis0MDpWTi0wMjpWTjpMQU8gQ0FJCis0MTpWTi00MTpWTjpMT05HIEFOCis0MjpWTi1NSEk6Vk46TUlOSCBIQUkKKzQzOlZOLTc0OlZOOk5BTSBESU5ICis0NDpWTi02MzpWTjpOQU0gSEEKKzQ1OlZOLTIyOlZOOk5HSEUgQU4KKzQ2OlZOLTg6Vk46TklOSCBCSU5ICis0NzpWTi0zNjpWTjpOSU5IIFRIVUFOCis0ODpWTi02ODpWTjpQSFUgVEhPCis0OTpWTi0zMjpWTjpQSFUgWUVOCis1MDpWTi0yNDpWTjpRVUFORyBCSU5ICis1MTpWTi0yNzpWTjpRVUFORyBOQU0gREEgTkFORworNTI6Vk4tMjk6Vk46UVVBTkcgTkdBSQorNTM6Vk4tMzE6Vk46UVVBTkcgTklOSAorNTQ6Vk4tMjU6Vk46UVVBTkcgVFJJCis1NTpWTi01MjpWTjpTT0MgVFJBTkcKKzU2OlZOLTA1OlZOOlNPTiBMQQorNTc6Vk4tU0JFOlZOOlNPTkcgQkUKKzU4OlZOLTM3OlZOOlRBWSBOSU5ICis1OTpWTi0yMDpWTjpUSEFJIEJJTkgKKzYwOlZOLTY5OlZOOlRIQUkgTkdVWUVOCis2MTpWTi0yOlZOOlRIQU5IIEhPQQorNjI6Vk4tMjY6Vk46VEhVQSBUSElFTiBIVUUKKzYzOlZOLTQ2OlZOOlRJRU4gR0lBTkcKKzY0OlZOLTUxOlZOOlRSQSBWSU5ICis2NTpWTi0wNzpWTjpUVVlFTiBRVUFORworNjY6Vk4tNDk6Vk46VklOSCBMT05HCis2NzpWTi03MDpWTjpWSU5IIFBIVQorNjg6Vk4tMDY6Vk46WUVOIEJBSQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L1ZOTS9WTk1fQURNSU4yX0xFWC50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvVk5NL1ZOTV9BRE1JTjJfTEVYLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNmFmYzFjCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L1ZOTS9WTk1fQURNSU4yX0xFWC50eHQKQEAgLTAsMCArMSw1MTkgQEAKKzE6Vk46Vk5NOlZJRVROQU06SGEgVGF5OkJhIFZpCisyOlZOOlZOTTpWSUVUTkFNOkhhIFRheTpDaHVvbmcgTWkKKzM6Vk46Vk5NOlZJRVROQU06SGEgVGF5OkRhbiBQaHVvbmcKKzQ6Vk46Vk5NOlZJRVROQU06SGEgVGF5OkhhIERvbmcKKzU6Vk46Vk5NOlZJRVROQU06SGEgVGF5OkhvYWkgRHVjCis2OlZOOlZOTTpWSUVUTkFNOkhhIFRheTpNeSBEdWMKKzc6Vk46Vk5NOlZJRVROQU06SGEgVGF5OlBodSBYdXllbgorODpWTjpWTk06VklFVE5BTTpIYSBUYXk6UGh1YyBUaG8KKzk6Vk46Vk5NOlZJRVROQU06SGEgVGF5OlF1b2MgT2FpCisxMDpWTjpWTk06VklFVE5BTTpIYSBUYXk6U29uIFRheQorMTE6Vk46Vk5NOlZJRVROQU06SGEgVGF5OlRoYWNoIFRoYXQKKzEyOlZOOlZOTTpWSUVUTkFNOkhhIFRheTpUaGFuaCBPYWkKKzEzOlZOOlZOTTpWSUVUTkFNOkhhIFRheTpUaHVvbmcgVGluCisxNDpWTjpWTk06VklFVE5BTTpIYSBUYXk6VW5nIEhvYQorMTpWTjpWTk06VklFVE5BTTpOYW0gSGE6QmluaCBMdWMKKzI6Vk46Vk5NOlZJRVROQU06TmFtIEhhOkR1eSBUaWVuCiszOlZOOlZOTTpWSUVUTkFNOk5hbSBIYTpIYSBOYW0KKzQ6Vk46Vk5NOlZJRVROQU06TmFtIEhhOkhhaSBIYXUKKzU6Vk46Vk5NOlZJRVROQU06TmFtIEhhOktpbSBCYW5nCis2OlZOOlZOTTpWSUVUTkFNOk5hbSBIYTpMeSBOaGFuCis3OlZOOlZOTTpWSUVUTkFNOk5hbSBIYTpOYW0gRGluaCBUb3duCis4OlZOOlZOTTpWSUVUTkFNOk5hbSBIYTpOYW0gTmluaAorOTpWTjpWTk06VklFVE5BTTpOYW0gSGE6TmdoaWEgSHVuZworMTA6Vk46Vk5NOlZJRVROQU06TmFtIEhhOlRoYW5oIExpZW0KKzExOlZOOlZOTTpWSUVUTkFNOk5hbSBIYTpWdSBCYW4KKzEyOlZOOlZOTTpWSUVUTkFNOk5hbSBIYTpYdWFuIFRodXkKKzEzOlZOOlZOTTpWSUVUTkFNOk5hbSBIYTpZIFllbgorMTpWTjpWTk06VklFVE5BTTpOaW5oIFRodWFuOkJlbiBDYXUKKzI6Vk46Vk5NOlZJRVROQU06TmluaCBUaHVhbjpDaGF1IFRoYW5oCiszOlZOOlZOTTpWSUVUTkFNOk5pbmggVGh1YW46RHVvbmcgTWluaCBDaGF1Cis0OlZOOlZOTTpWSUVUTkFNOk5pbmggVGh1YW46R28gRGF1Cis1OlZOOlZOTTpWSUVUTkFNOk5pbmggVGh1YW46SG9hIFRoYW5oCis2OlZOOlZOTTpWSUVUTkFNOk5pbmggVGh1YW46TmluaCBIYWkKKzc6Vk46Vk5NOlZJRVROQU06TmluaCBUaHVhbjpOaW5oIFBodW9jCis4OlZOOlZOTTpWSUVUTkFNOk5pbmggVGh1YW46TmluaCBTb24KKzk6Vk46Vk5NOlZJRVROQU06TmluaCBUaHVhbjpQaGFuIFJhbmctVGhhcCBDCisxMDpWTjpWTk06VklFVE5BTTpOaW5oIFRodWFuOlRhbiBCaWVuCisxMTpWTjpWTk06VklFVE5BTTpOaW5oIFRodWFuOlRhbiBDaGF1CisxMjpWTjpWTk06VklFVE5BTTpOaW5oIFRodWFuOlRyYW5nIEJhbmcKKzEzOlZOOlZOTTpWSUVUTkFNOk5pbmggVGh1YW46VHguVGF5IE5pbmgKKzE6Vk46Vk5NOlZJRVROQU06VGh1YSBUaGllbi1IdWU6QSBMdW9pCisyOlZOOlZOTTpWSUVUTkFNOlRodWEgVGhpZW4tSHVlOkh1ZSBUb3duCiszOlZOOlZOTTpWSUVUTkFNOlRodWEgVGhpZW4tSHVlOkh1b25nIFRodXkKKzQ6Vk46Vk5NOlZJRVROQU06VGh1YSBUaGllbi1IdWU6SHVvbmcgVHJhCis1OlZOOlZOTTpWSUVUTkFNOlRodWEgVGhpZW4tSHVlOk5hbSBEb25nCis2OlZOOlZOTTpWSUVUTkFNOlRodWEgVGhpZW4tSHVlOlBob25nIERpZW4KKzc6Vk46Vk5NOlZJRVROQU06VGh1YSBUaGllbi1IdWU6UGh1IExvYworODpWTjpWTk06VklFVE5BTTpUaHVhIFRoaWVuLUh1ZTpQaHUgVmFuZworOTpWTjpWTk06VklFVE5BTTpUaHVhIFRoaWVuLUh1ZTpRdWFuZyBEaWVuCisxOlZOOlZOTTpWSUVUTkFNOkxhaSBDaGF1OkRpZW4gQmllbgorMjpWTjpWTk06VklFVE5BTTpMYWkgQ2hhdTpNdW9uZyBMYXkKKzM6Vk46Vk5NOlZJRVROQU06TGFpIENoYXU6TXVvbmcgVGUKKzQ6Vk46Vk5NOlZJRVROQU06TGFpIENoYXU6UGhvbmcgVGhvCis1OlZOOlZOTTpWSUVUTkFNOkxhaSBDaGF1OlNpbiBIbworNjpWTjpWTk06VklFVE5BTTpMYWkgQ2hhdTpUdWEgQ2h1YQorNzpWTjpWTk06VklFVE5BTTpMYWkgQ2hhdTpUdWFuIEdpYW8KKzg6Vk46Vk5NOlZJRVROQU06TGFpIENoYXU6VHguTGFpIENoYXUKKzE6Vk46Vk5NOlZJRVROQU06UXVhbmcgTmFtLURhIE5hbmc6RGEgTmFuZyBUb3duCisyOlZOOlZOTTpWSUVUTkFNOlF1YW5nIE5hbS1EYSBOYW5nOkRhaSBMb2MKKzM6Vk46Vk5NOlZJRVROQU06UXVhbmcgTmFtLURhIE5hbmc6RGllbiBCYW4KKzQ6Vk46Vk5NOlZJRVROQU06UXVhbmcgTmFtLURhIE5hbmc6RHV5IFh1eWVuCis1OlZOOlZOTTpWSUVUTkFNOlF1YW5nIE5hbS1EYSBOYW5nOkdpYW5nCis2OlZOOlZOTTpWSUVUTkFNOlF1YW5nIE5hbS1EYSBOYW5nOkhpZW4KKzc6Vk46Vk5NOlZJRVROQU06UXVhbmcgTmFtLURhIE5hbmc6SGllcCBEdWMKKzg6Vk46Vk5NOlZJRVROQU06UXVhbmcgTmFtLURhIE5hbmc6SG9hIFZhbmcKKzk6Vk46Vk5NOlZJRVROQU06UXVhbmcgTmFtLURhIE5hbmc6SG9pIEFuCisxMDpWTjpWTk06VklFVE5BTTpRdWFuZyBOYW0tRGEgTmFuZzpOdWkgVGhhbmgKKzExOlZOOlZOTTpWSUVUTkFNOlF1YW5nIE5hbS1EYSBOYW5nOlBodW9jIFNvbgorMTI6Vk46Vk5NOlZJRVROQU06UXVhbmcgTmFtLURhIE5hbmc6UXVlIFNvbgorMTM6Vk46Vk5NOlZJRVROQU06UXVhbmcgTmFtLURhIE5hbmc6VGFtIEt5CisxNDpWTjpWTk06VklFVE5BTTpRdWFuZyBOYW0tRGEgTmFuZzpUaGFuZyBCaW5oCisxNTpWTjpWTk06VklFVE5BTTpRdWFuZyBOYW0tRGEgTmFuZzpUaWVuIFBodW9jCisxNjpWTjpWTk06VklFVE5BTTpRdWFuZyBOYW0tRGEgTmFuZzpUcmEgTXkKKzE6Vk46Vk5NOlZJRVROQU06UGh1IFllbjpEb25nIFh1YW4KKzI6Vk46Vk5NOlZJRVROQU06UGh1IFllbjpTb24gSG9hCiszOlZOOlZOTTpWSUVUTkFNOlBodSBZZW46U29uZyBDYXUKKzQ6Vk46Vk5NOlZJRVROQU06UGh1IFllbjpTb25nIEhpbmgKKzU6Vk46Vk5NOlZJRVROQU06UGh1IFllbjpUdXkgQW4KKzY6Vk46Vk5NOlZJRVROQU06UGh1IFllbjpUdXkgSG9hCis3OlZOOlZOTTpWSUVUTkFNOlBodSBZZW46VHV5IEhvYSBUb3duCisxOlZOOlZOTTpWSUVUTkFNOkJhIFJpYSAtIFZ1bmcgVGF1OkNoYXUgVGhhbmgKKzI6Vk46Vk5NOlZJRVROQU06QmEgUmlhIC0gVnVuZyBUYXU6Q29uIERhbworMzpWTjpWTk06VklFVE5BTTpCYSBSaWEgLSBWdW5nIFRhdTpMb25nIERhdAorNDpWTjpWTk06VklFVE5BTTpCYSBSaWEgLSBWdW5nIFRhdTpWdW5nIFRhdQorNTpWTjpWTk06VklFVE5BTTpCYSBSaWEgLSBWdW5nIFRhdTpYdXllbiBNb2MKKzE6Vk46Vk5NOlZJRVROQU06SGEgVGluaDpDYW0gWHV5ZW4KKzI6Vk46Vk5NOlZJRVROQU06SGEgVGluaDpDYW4gTG9jCiszOlZOOlZOTTpWSUVUTkFNOkhhIFRpbmg6RHVjIFRobworNDpWTjpWTk06VklFVE5BTTpIYSBUaW5oOkh1b25nIEtoZQorNTpWTjpWTk06VklFVE5BTTpIYSBUaW5oOkh1b25nIFNvbgorNjpWTjpWTk06VklFVE5BTTpIYSBUaW5oOkt5IEFuaAorNzpWTjpWTk06VklFVE5BTTpIYSBUaW5oOk5naGkgWHVhbgorODpWTjpWTk06VklFVE5BTTpIYSBUaW5oOlRoYWNoIEhhCis5OlZOOlZOTTpWSUVUTkFNOkhhIFRpbmg6VHguSGEgVGluaAorMTpWTjpWTk06VklFVE5BTTpWaW5oIExvbmc6QmluaCBNaW5oCisyOlZOOlZOTTpWSUVUTkFNOlZpbmggTG9uZzpMb25nIEhvCiszOlZOOlZOTTpWSUVUTkFNOlZpbmggTG9uZzpUYW0gQmluaAorNDpWTjpWTk06VklFVE5BTTpWaW5oIExvbmc6VHJhIE9uCis1OlZOOlZOTTpWSUVUTkFNOlZpbmggTG9uZzpWaW5oIExvbmcKKzY6Vk46Vk5NOlZJRVROQU06VmluaCBMb25nOlZ1bmcgTGllbQorMTpWTjpWTk06VklFVE5BTTpUaGFuaCBIb2E6QmEgVGh1b2MKKzI6Vk46Vk5NOlZJRVROQU06VGhhbmggSG9hOkJpbSBTb24KKzM6Vk46Vk5NOlZJRVROQU06VGhhbmggSG9hOkNhbSBUaHV5Cis0OlZOOlZOTTpWSUVUTkFNOlRoYW5oIEhvYTpEb25nIFNvbgorNTpWTjpWTk06VklFVE5BTTpUaGFuaCBIb2E6SGEgVHJ1bmcKKzY6Vk46Vk5NOlZJRVROQU06VGhhbmggSG9hOkhhdSBMb2MKKzc6Vk46Vk5NOlZJRVROQU06VGhhbmggSG9hOkhvYW5nIEhvYQorODpWTjpWTk06VklFVE5BTTpUaGFuaCBIb2E6TGFuZyBDaGFuaAorOTpWTjpWTk06VklFVE5BTTpUaGFuaCBIb2E6TmdhIFNvbgorMTA6Vk46Vk5NOlZJRVROQU06VGhhbmggSG9hOk5nb2MgTGFjCisxMTpWTjpWTk06VklFVE5BTTpUaGFuaCBIb2E6Tmh1IFh1YW4KKzEyOlZOOlZOTTpWSUVUTkFNOlRoYW5oIEhvYTpOb25nIENvbmcKKzEzOlZOOlZOTTpWSUVUTkFNOlRoYW5oIEhvYTpRdWFuIEhvYQorMTQ6Vk46Vk5NOlZJRVROQU06VGhhbmggSG9hOlF1YW5nIFh1b25nCisxNTpWTjpWTk06VklFVE5BTTpUaGFuaCBIb2E6U2FtIFNvbgorMTY6Vk46Vk5NOlZJRVROQU06VGhhbmggSG9hOlRoYWNoIFRoYW5oCisxNzpWTjpWTk06VklFVE5BTTpUaGFuaCBIb2E6VGhpZXUgWWVuCisxODpWTjpWTk06VklFVE5BTTpUaGFuaCBIb2E6VGhvIFh1YW4KKzE5OlZOOlZOTTpWSUVUTkFNOlRoYW5oIEhvYTpUaHVvbmcgWHVhbgorMjA6Vk46Vk5NOlZJRVROQU06VGhhbmggSG9hOlRpbmggR2lhCisyMTpWTjpWTk06VklFVE5BTTpUaGFuaCBIb2E6VHJpZXUgU29uCisyMjpWTjpWTk06VklFVE5BTTpUaGFuaCBIb2E6VHguVGhhbmggSG9hCisyMzpWTjpWTk06VklFVE5BTTpUaGFuaCBIb2E6VmluaCBMb2MKKzE6Vk46Vk5NOlZJRVROQU06U29uZyBCZTpCZW4gQ2F0CisyOlZOOlZOTTpWSUVUTkFNOlNvbmcgQmU6QmluaCBMb25nCiszOlZOOlZOTTpWSUVUTkFNOlNvbmcgQmU6QnUgRGFuZworNDpWTjpWTk06VklFVE5BTTpTb25nIEJlOkRvbmcgUGh1Cis1OlZOOlZOTTpWSUVUTkFNOlNvbmcgQmU6TG9jIE5pbmgKKzY6Vk46Vk5NOlZJRVROQU06U29uZyBCZTpQaHVvYyBMb25nCis3OlZOOlZOTTpWSUVUTkFNOlNvbmcgQmU6VGFuIFV5ZW4KKzg6Vk46Vk5NOlZJRVROQU06U29uZyBCZTpUaHUgRGF1IE1vdAorOTpWTjpWTk06VklFVE5BTTpTb25nIEJlOlRodWFuIEFuCisxOlZOOlZOTTpWSUVUTkFNOkJpbmggVGh1YW46QmFjIEJpbmgKKzI6Vk46Vk5NOlZJRVROQU06QmluaCBUaHVhbjpEdWMgTGluaAorMzpWTjpWTk06VklFVE5BTTpCaW5oIFRodWFuOkhhbSBUYW4KKzQ6Vk46Vk5NOlZJRVROQU06QmluaCBUaHVhbjpIYW0gVGh1YW4gQmFjCis1OlZOOlZOTTpWSUVUTkFNOkJpbmggVGh1YW46SGFtIFRodWFuIE5hbQorNjpWTjpWTk06VklFVE5BTTpCaW5oIFRodWFuOlBoYW4gVGhpZXQKKzc6Vk46Vk5NOlZJRVROQU06QmluaCBUaHVhbjpUYW5oIExpbmgKKzg6Vk46Vk5NOlZJRVROQU06QmluaCBUaHVhbjpUdXkgUGhvbmcKKzE6Vk46Vk5NOlZJRVROQU06UXVhbmcgVHJpOkJlbiBIYWkKKzI6Vk46Vk5NOlZJRVROQU06UXVhbmcgVHJpOkRvbmcgSGEKKzM6Vk46Vk5NOlZJRVROQU06UXVhbmcgVHJpOkh1b25nIEhvYQorNDpWTjpWTk06VklFVE5BTTpRdWFuZyBUcmk6VHJpZXUgSGFpCisxOlZOOlZOTTpWSUVUTkFNOlNvbiBMYTpCYWMgWWVuCisyOlZOOlZOTTpWSUVUTkFNOlNvbiBMYTpNYWkgU29uCiszOlZOOlZOTTpWSUVUTkFNOlNvbiBMYTpNb2MgQ2hhdQorNDpWTjpWTk06VklFVE5BTTpTb24gTGE6TXVvbmcgTGEKKzU6Vk46Vk5NOlZJRVROQU06U29uIExhOlBodSBZZW4KKzY6Vk46Vk5NOlZJRVROQU06U29uIExhOlF1eW5oIE5oYWkKKzc6Vk46Vk5NOlZJRVROQU06U29uIExhOlNvbmcgTWEKKzg6Vk46Vk5NOlZJRVROQU06U29uIExhOlRodWFuIENoYXUKKzk6Vk46Vk5NOlZJRVROQU06U29uIExhOlR4LlNvbiBMYQorMTA6Vk46Vk5NOlZJRVROQU06U29uIExhOlllbiBDaGF1CisxOlZOOlZOTTpWSUVUTkFNOkNhbiBUaG86Q2FuIFRobyBUb3duCisyOlZOOlZOTTpWSUVUTkFNOkNhbiBUaG86Q2hhdSBUaGFuaAorMzpWTjpWTk06VklFVE5BTTpDYW4gVGhvOkxvbmcgTXkKKzQ6Vk46Vk5NOlZJRVROQU06Q2FuIFRobzpPIE1vbgorNTpWTjpWTk06VklFVE5BTTpDYW4gVGhvOlBodW5nIEhpZXAKKzY6Vk46Vk5NOlZJRVROQU06Q2FuIFRobzpUaG90IE5vdAorNzpWTjpWTk06VklFVE5BTTpDYW4gVGhvOlZpIFRoYW5oCisxOlZOOlZOTTpWSUVUTkFNOktoYW5oIEhvYTpDYW0gUmFuaAorMjpWTjpWTk06VklFVE5BTTpLaGFuaCBIb2E6RGllbiBLaGFuaAorMzpWTjpWTk06VklFVE5BTTpLaGFuaCBIb2E6S2hhbmggU29uCis0OlZOOlZOTTpWSUVUTkFNOktoYW5oIEhvYTpLaGFuaCBWaW5oCis1OlZOOlZOTTpWSUVUTkFNOktoYW5oIEhvYTpOaGEgVHJhbmcgVG93bgorNjpWTjpWTk06VklFVE5BTTpLaGFuaCBIb2E6TmluaCBIb2EKKzc6Vk46Vk5NOlZJRVROQU06S2hhbmggSG9hOlZhbiBOaW5oCisxOlZOOlZOTTpWSUVUTkFNOkxhbSBEb25nOkJhbyBMb2MKKzI6Vk46Vk5NOlZJRVROQU06TGFtIERvbmc6Q2F0IFRpZW4KKzM6Vk46Vk5NOlZJRVROQU06TGFtIERvbmc6RGEgTGF0IFRvd24KKzQ6Vk46Vk5NOlZJRVROQU06TGFtIERvbmc6RGEgVGVoCis1OlZOOlZOTTpWSUVUTkFNOkxhbSBEb25nOkRhayBVb2FpCis2OlZOOlZOTTpWSUVUTkFNOkxhbSBEb25nOkRpIExpbmgKKzc6Vk46Vk5NOlZJRVROQU06TGFtIERvbmc6RG9uIER1b25nCis4OlZOOlZOTTpWSUVUTkFNOkxhbSBEb25nOkR1YyBUcm9uZworOTpWTjpWTk06VklFVE5BTTpMYW0gRG9uZzpMYWMgRHVvbmcKKzEwOlZOOlZOTTpWSUVUTkFNOkxhbSBEb25nOkxhbSBIYQorMTpWTjpWTk06VklFVE5BTTpCYWMgVGhhaTpCYWNoIFRob25nCisyOlZOOlZOTTpWSUVUTkFNOkJhYyBUaGFpOkNobyBEb24KKzM6Vk46Vk5NOlZJRVROQU06QmFjIFRoYWk6RGFpIFR1Cis0OlZOOlZOTTpWSUVUTkFNOkJhYyBUaGFpOkRpbmggSG9hCis1OlZOOlZOTTpWSUVUTkFNOkJhYyBUaGFpOkRvbmcgSGkKKzY6Vk46Vk5NOlZJRVROQU06QmFjIFRoYWk6TmEgUmkKKzc6Vk46Vk5NOlZJRVROQU06QmFjIFRoYWk6UGhvIFllbgorODpWTjpWTk06VklFVE5BTTpCYWMgVGhhaTpQaHUgQmluaAorOTpWTjpWTk06VklFVE5BTTpCYWMgVGhhaTpQaHUgTHVvbmcKKzEwOlZOOlZOTTpWSUVUTkFNOkJhYyBUaGFpOlNvbmcgQ29uZworMTE6Vk46Vk5NOlZJRVROQU06QmFjIFRoYWk6VGhhaSBOZ3V5ZW4KKzEyOlZOOlZOTTpWSUVUTkFNOkJhYyBUaGFpOlZvIE5oYWkKKzE6Vk46Vk5NOlZJRVROQU06QmluaCBEaW5oOkFuIExhbworMjpWTjpWTk06VklFVE5BTTpCaW5oIERpbmg6QW4gTmhvbgorMzpWTjpWTk06VklFVE5BTTpCaW5oIERpbmg6SG9haSBBbgorNDpWTjpWTk06VklFVE5BTTpCaW5oIERpbmg6SG9haSBOaG9uCis1OlZOOlZOTTpWSUVUTkFNOkJpbmggRGluaDpQaHUgQ2F0Cis2OlZOOlZOTTpWSUVUTkFNOkJpbmggRGluaDpQaHUgTXkKKzc6Vk46Vk5NOlZJRVROQU06QmluaCBEaW5oOlF1eSBOaG9uIFRvd24KKzg6Vk46Vk5NOlZJRVROQU06QmluaCBEaW5oOlRheSBTb24KKzk6Vk46Vk5NOlZJRVROQU06QmluaCBEaW5oOlR1eSBQaHVvYworMTA6Vk46Vk5NOlZJRVROQU06QmluaCBEaW5oOlZhbiBDYW5oCisxMTpWTjpWTk06VklFVE5BTTpCaW5oIERpbmg6VmluaCBUaGFuaAorMTpWTjpWTk06VklFVE5BTTpTb2MgVHJhbmc6S2UgU2FjaAorMjpWTjpWTk06VklFVE5BTTpTb2MgVHJhbmc6TG9uZyBQaHUKKzM6Vk46Vk5NOlZJRVROQU06U29jIFRyYW5nOk15IFR1Cis0OlZOOlZOTTpWSUVUTkFNOlNvYyBUcmFuZzpNeSBYdXllbgorNTpWTjpWTk06VklFVE5BTTpTb2MgVHJhbmc6U29jIFRyYW5nCis2OlZOOlZOTTpWSUVUTkFNOlNvYyBUcmFuZzpUaGFuaCBUcmkKKzc6Vk46Vk5NOlZJRVROQU06U29jIFRyYW5nOlZpbmggQ2hhdQorMTpWTjpWTk06VklFVE5BTTpIYWkgUGhvbmc6QW4gSGFpCisyOlZOOlZOTTpWSUVUTkFNOkhhaSBQaG9uZzpBbiBMYW8KKzM6Vk46Vk5NOlZJRVROQU06SGFpIFBob25nOkNhdCBIYWkKKzQ6Vk46Vk5NOlZJRVROQU06SGFpIFBob25nOkRvIFNvbgorNTpWTjpWTk06VklFVE5BTTpIYWkgUGhvbmc6SW5uZXIgQ2l0eQorNjpWTjpWTk06VklFVE5BTTpIYWkgUGhvbmc6S2llbiBBbgorNzpWTjpWTk06VklFVE5BTTpIYWkgUGhvbmc6S2llbiBUaHV5Cis4OlZOOlZOTTpWSUVUTkFNOkhhaSBQaG9uZzpUaHV5IE5ndXllbgorOTpWTjpWTk06VklFVE5BTTpIYWkgUGhvbmc6VGllbiBMYW5nCisxMDpWTjpWTk06VklFVE5BTTpIYWkgUGhvbmc6VmluaCBCYW8KKzE6Vk46Vk5NOlZJRVROQU06QW4gR2lhbmc6Q2hhdSBEb2MKKzI6Vk46Vk5NOlZJRVROQU06QW4gR2lhbmc6Q2hhdSBQaHUKKzM6Vk46Vk5NOlZJRVROQU06QW4gR2lhbmc6Q2hhdSBUaGFuaAorNDpWTjpWTk06VklFVE5BTTpBbiBHaWFuZzpDaG8gTW9pCis1OlZOOlZOTTpWSUVUTkFNOkFuIEdpYW5nOkxvbmcgWHV5ZW4KKzY6Vk46Vk5NOlZJRVROQU06QW4gR2lhbmc6UGh1IENoYXUKKzc6Vk46Vk5NOlZJRVROQU06QW4gR2lhbmc6UGh1IFRhbgorODpWTjpWTk06VklFVE5BTTpBbiBHaWFuZzpUaG9haSBTb24KKzk6Vk46Vk5NOlZJRVROQU06QW4gR2lhbmc6VGluaCBCaWVuCisxMDpWTjpWTk06VklFVE5BTTpBbiBHaWFuZzpUcmkgVG9uCisxOlZOOlZOTTpWSUVUTkFNOkRvbmcgVGhhcDpDYW8gTGFuaAorMjpWTjpWTk06VklFVE5BTTpEb25nIFRoYXA6Q2hhdSBUaGFuaAorMzpWTjpWTk06VklFVE5BTTpEb25nIFRoYXA6SG9uZyBOZ3UKKzQ6Vk46Vk5NOlZJRVROQU06RG9uZyBUaGFwOlNhIERlYworNTpWTjpWTk06VklFVE5BTTpEb25nIFRoYXA6VGFtIE5vbmcKKzY6Vk46Vk5NOlZJRVROQU06RG9uZyBUaGFwOlRoYW5oIEJpbmgKKzc6Vk46Vk5NOlZJRVROQU06RG9uZyBUaGFwOlRoYW5oIEh1bmcKKzg6Vk46Vk5NOlZJRVROQU06RG9uZyBUaGFwOlRoYXAgTXVvaQorOTpWTjpWTk06VklFVE5BTTpEb25nIFRoYXA6VHguQ2FvIExhbmgKKzE6Vk46Vk5NOlZJRVROQU06TmdoZSBBbjpBbmggU29uCisyOlZOOlZOTTpWSUVUTkFNOk5naGUgQW46Q29uIEN1b25nCiszOlZOOlZOTTpWSUVUTkFNOk5naGUgQW46RGllbiBDaGF1Cis0OlZOOlZOTTpWSUVUTkFNOk5naGUgQW46RG8gTHVvbmcKKzU6Vk46Vk5NOlZJRVROQU06TmdoZSBBbjpIdW5nIE5ndXllbgorNjpWTjpWTk06VklFVE5BTTpOZ2hlIEFuOkt5IFNvbgorNzpWTjpWTk06VklFVE5BTTpOZ2hlIEFuOk5hbSBEYW4KKzg6Vk46Vk5NOlZJRVROQU06TmdoZSBBbjpOZ2hpIExvYworOTpWTjpWTk06VklFVE5BTTpOZ2hlIEFuOk5naGlhIERhbgorMTA6Vk46Vk5NOlZJRVROQU06TmdoZSBBbjpRdWUgUGhvbmcKKzExOlZOOlZOTTpWSUVUTkFNOk5naGUgQW46UXV5IENoYXUKKzEyOlZOOlZOTTpWSUVUTkFNOk5naGUgQW46UXV5IEhvcAorMTM6Vk46Vk5NOlZJRVROQU06TmdoZSBBbjpRdXluaCBMdXUKKzE0OlZOOlZOTTpWSUVUTkFNOk5naGUgQW46VGFuIEt5CisxNTpWTjpWTk06VklFVE5BTTpOZ2hlIEFuOlRoYW5oIENodW9uZworMTY6Vk46Vk5NOlZJRVROQU06TmdoZSBBbjpUdW9uZyBEdW9uZworMTc6Vk46Vk5NOlZJRVROQU06TmdoZSBBbjpWaW5oIFRvd24KKzE4OlZOOlZOTTpWSUVUTkFNOk5naGUgQW46WWVuIFRoYW5oCisxOlZOOlZOTTpWSUVUTkFNOkNhbyBCYW5nOkJhIEJlCisyOlZOOlZOTTpWSUVUTkFNOkNhbyBCYW5nOkJhbyBMYWMKKzM6Vk46Vk5NOlZJRVROQU06Q2FvIEJhbmc6SGEgTGFuZworNDpWTjpWTk06VklFVE5BTTpDYW8gQmFuZzpIYSBRdWFuZworNTpWTjpWTk06VklFVE5BTTpDYW8gQmFuZzpIb2EgQW4KKzY6Vk46Vk5NOlZJRVROQU06Q2FvIEJhbmc6TmdhbiBTb24KKzc6Vk46Vk5NOlZJRVROQU06Q2FvIEJhbmc6Tmd1eWVuIEJpbmgKKzg6Vk46Vk5NOlZJRVROQU06Q2FvIEJhbmc6UXVhbmcgSG9hCis5OlZOOlZOTTpWSUVUTkFNOkNhbyBCYW5nOlRoYWNoIEFuCisxMDpWTjpWTk06VklFVE5BTTpDYW8gQmFuZzpUaG9uZyBOb25nCisxMTpWTjpWTk06VklFVE5BTTpDYW8gQmFuZzpUcmEgTGluaAorMTI6Vk46Vk5NOlZJRVROQU06Q2FvIEJhbmc6VHJ1bmcgS2hhbmgKKzEzOlZOOlZOTTpWSUVUTkFNOkNhbyBCYW5nOlR4LkNhbyBCYW5nCisxOlZOOlZOTTpWSUVUTkFNOk1pbmggSGFpOkJhYyBMaWV1CisyOlZOOlZOTTpWSUVUTkFNOk1pbmggSGFpOkNhIE1hdQorMzpWTjpWTk06VklFVE5BTTpNaW5oIEhhaTpDYWkgTnVvYworNDpWTjpWTk06VklFVE5BTTpNaW5oIEhhaTpEYW0gRG9pCis1OlZOOlZOTTpWSUVUTkFNOk1pbmggSGFpOkdpYSBSYWkKKzY6Vk46Vk5NOlZJRVROQU06TWluaCBIYWk6SG9uZyBEYW4KKzc6Vk46Vk5NOlZJRVROQU06TWluaCBIYWk6TmdvYyBIaWVuCis4OlZOOlZOTTpWSUVUTkFNOk1pbmggSGFpOlRob2kgQmluaAorOTpWTjpWTk06VklFVE5BTTpNaW5oIEhhaTpUcmFuIFZhbiBUaG9pCisxMDpWTjpWTk06VklFVE5BTTpNaW5oIEhhaTpVIE1pbmgKKzExOlZOOlZOTTpWSUVUTkFNOk1pbmggSGFpOlZpbmggTG9pCisxOlZOOlZOTTpWSUVUTkFNOlllbiBCYWk6THVjIFllbgorMjpWTjpWTk06VklFVE5BTTpZZW4gQmFpOk11IENhbmcgQ2hhaQorMzpWTjpWTk06VklFVE5BTTpZZW4gQmFpOlRyYW0gVGF1Cis0OlZOOlZOTTpWSUVUTkFNOlllbiBCYWk6VHJhbiBZZW4KKzU6Vk46Vk5NOlZJRVROQU06WWVuIEJhaTpUeC5ZZW4gQmFpCis2OlZOOlZOTTpWSUVUTkFNOlllbiBCYWk6VmFuIENoYW4KKzc6Vk46Vk5NOlZJRVROQU06WWVuIEJhaTpWYW4gWWVuCis4OlZOOlZOTTpWSUVUTkFNOlllbiBCYWk6WWVuIEJpbmgKKzE6Vk46Vk5NOlZJRVROQU06VGllbiBHaWFuZzpDYWkgQmUKKzI6Vk46Vk5NOlZJRVROQU06VGllbiBHaWFuZzpDYWkgTGF5CiszOlZOOlZOTTpWSUVUTkFNOlRpZW4gR2lhbmc6Q2hhdSBUaGFuaAorNDpWTjpWTk06VklFVE5BTTpUaWVuIEdpYW5nOkNobyBHYW8KKzU6Vk46Vk5NOlZJRVROQU06VGllbiBHaWFuZzpHbyBDb25nCis2OlZOOlZOTTpWSUVUTkFNOlRpZW4gR2lhbmc6R28gQ29uZyBEb25nCis3OlZOOlZOTTpWSUVUTkFNOlRpZW4gR2lhbmc6R28gQ29uZyBUYXkKKzg6Vk46Vk5NOlZJRVROQU06VGllbiBHaWFuZzpNeSBUaG8gVG93bgorMTpWTjpWTk06VklFVE5BTTpMYW5nIFNvbjpCYWMgU29uCisyOlZOOlZOTTpWSUVUTkFNOkxhbmcgU29uOkJpbmggR2lhCiszOlZOOlZOTTpWSUVUTkFNOkxhbmcgU29uOkNhbyBMb2MKKzQ6Vk46Vk5NOlZJRVROQU06TGFuZyBTb246Q2hpIExhbmcKKzU6Vk46Vk5NOlZJRVROQU06TGFuZyBTb246RGluaCBMYXAKKzY6Vk46Vk5NOlZJRVROQU06TGFuZyBTb246SHV1IEx1bmcKKzc6Vk46Vk5NOlZJRVROQU06TGFuZyBTb246TG9jIEJpbmgKKzg6Vk46Vk5NOlZJRVROQU06TGFuZyBTb246VHJhbmcgRGluaAorOTpWTjpWTk06VklFVE5BTTpMYW5nIFNvbjpUeC5MYW5nIFNvbgorMTA6Vk46Vk5NOlZJRVROQU06TGFuZyBTb246VmFuIExhbmcKKzExOlZOOlZOTTpWSUVUTkFNOkxhbmcgU29uOlZhbiBRdWFuCisxOlZOOlZOTTpWSUVUTkFNOlF1YW5nIE5nYWk6QmEgVG8KKzI6Vk46Vk5NOlZJRVROQU06UXVhbmcgTmdhaTpCaW5oIFNvbgorMzpWTjpWTk06VklFVE5BTTpRdWFuZyBOZ2FpOkR1YyBQaG8KKzQ6Vk46Vk5NOlZJRVROQU06UXVhbmcgTmdhaTpNaW5oIExvbmcKKzU6Vk46Vk5NOlZJRVROQU06UXVhbmcgTmdhaTpNbyBEdWMKKzY6Vk46Vk5NOlZJRVROQU06UXVhbmcgTmdhaTpOZ2hpYSBIYW5oCis3OlZOOlZOTTpWSUVUTkFNOlF1YW5nIE5nYWk6U29uIEhhCis4OlZOOlZOTTpWSUVUTkFNOlF1YW5nIE5nYWk6U29uIFRpbmgKKzk6Vk46Vk5NOlZJRVROQU06UXVhbmcgTmdhaTpUcmEgQm9uZworMTA6Vk46Vk5NOlZJRVROQU06UXVhbmcgTmdhaTpUdSBOZ2hpYQorMTE6Vk46Vk5NOlZJRVROQU06UXVhbmcgTmdhaTpUeC5RdWFuZyBOZ2FpCisxOlZOOlZOTTpWSUVUTkFNOkhhIE5vaTpEb25nIEFuaAorMjpWTjpWTk06VklFVE5BTTpIYSBOb2k6R2lhIExhbQorMzpWTjpWTk06VklFVE5BTTpIYSBOb2k6SW5uZXIgQ2l0eQorNDpWTjpWTk06VklFVE5BTTpIYSBOb2k6U29jIFNvbgorNTpWTjpWTk06VklFVE5BTTpIYSBOb2k6VGhhbmggVHJpCis2OlZOOlZOTTpWSUVUTkFNOkhhIE5vaTpUdSBMaWVtCisxOlZOOlZOTTpWSUVUTkFNOkhhIEdpYW5nOkJhYyBNZQorMjpWTjpWTk06VklFVE5BTTpIYSBHaWFuZzpCYWMgUXVhbmcKKzM6Vk46Vk5NOlZJRVROQU06SGEgR2lhbmc6RG9uZyBWYW4KKzQ6Vk46Vk5NOlZJRVROQU06SGEgR2lhbmc6SG9hbmcgU3UgUGhpCis1OlZOOlZOTTpWSUVUTkFNOkhhIEdpYW5nOk1lbyBWYWMKKzY6Vk46Vk5NOlZJRVROQU06SGEgR2lhbmc6UXVhbiBCYQorNzpWTjpWTk06VklFVE5BTTpIYSBHaWFuZzpUeC5IYSBHaWFuZworODpWTjpWTk06VklFVE5BTTpIYSBHaWFuZzpWaSBYdXllbgorOTpWTjpWTk06VklFVE5BTTpIYSBHaWFuZzpYaW4gTWFuCisxMDpWTjpWTk06VklFVE5BTTpIYSBHaWFuZzpZZW4gTWluaAorMTpWTjpWTk06VklFVE5BTTpHaWEgTGFpOkEgWXVuIFBhCisyOlZOOlZOTTpWSUVUTkFNOkdpYSBMYWk6QW4gS2hlCiszOlZOOlZOTTpWSUVUTkFNOkdpYSBMYWk6Q2h1IFBhCis0OlZOOlZOTTpWSUVUTkFNOkdpYSBMYWk6Q2h1IFByb25nCis1OlZOOlZOTTpWSUVUTkFNOkdpYSBMYWk6Q2h1IFNyZQorNjpWTjpWTk06VklFVE5BTTpHaWEgTGFpOktiYW5nCis3OlZOOlZOTTpWSUVUTkFNOkdpYSBMYWk6S29uIENocm8KKzg6Vk46Vk5NOlZJRVROQU06R2lhIExhaTpLcm9uZ3BhCis5OlZOOlZOTTpWSUVUTkFNOkdpYSBMYWk6TWFuZyBZYW5nCisxMDpWTjpWTk06VklFVE5BTTpHaWEgTGFpOlBsYXlrdQorMTpWTjpWTk06VklFVE5BTTpEb25nIE5haTpCaWVuIEhvYSBUb3duCisyOlZOOlZOTTpWSUVUTkFNOkRvbmcgTmFpOkxvbmcgVGhhbmgKKzM6Vk46Vk5NOlZJRVROQU06RG9uZyBOYWk6VGFuIFBodQorNDpWTjpWTk06VklFVE5BTTpEb25nIE5haTpUaG9uZyBOaGF0Cis1OlZOOlZOTTpWSUVUTkFNOkRvbmcgTmFpOlZpbmggQW4KKzY6Vk46Vk5NOlZJRVROQU06RG9uZyBOYWk6WHVhbiBMb2MKKzE6Vk46Vk5NOlZJRVROQU06VHV5ZW4gUXVhbmc6Q2hpZW0gSG9hCisyOlZOOlZOTTpWSUVUTkFNOlR1eWVuIFF1YW5nOkhhbSBZZW4KKzM6Vk46Vk5NOlZJRVROQU06VHV5ZW4gUXVhbmc6TmEgSGFuZworNDpWTjpWTk06VklFVE5BTTpUdXllbiBRdWFuZzpTb24gRHVvbmcKKzU6Vk46Vk5NOlZJRVROQU06VHV5ZW4gUXVhbmc6VHguVHV5ZW4gUXVhbmcKKzY6Vk46Vk5NOlZJRVROQU06VHV5ZW4gUXVhbmc6WWVuIFNvbgorMTpWTjpWTk06VklFVE5BTTpMYW8gQ2FpOkJhYyBIYQorMjpWTjpWTk06VklFVE5BTTpMYW8gQ2FpOkJhbyBUaGFuZworMzpWTjpWTk06VklFVE5BTTpMYW8gQ2FpOkJhbyBZZW4KKzQ6Vk46Vk5NOlZJRVROQU06TGFvIENhaTpCYXQgWGF0Cis1OlZOOlZOTTpWSUVUTkFNOkxhbyBDYWk6TXVvbmcgS2h1b25nCis2OlZOOlZOTTpWSUVUTkFNOkxhbyBDYWk6U2EgUGEKKzc6Vk46Vk5NOlZJRVROQU06TGFvIENhaTpUaGFuIFV5ZW4KKzg6Vk46Vk5NOlZJRVROQU06TGFvIENhaTpUeC5MYW8gQ2FpCis5OlZOOlZOTTpWSUVUTkFNOkxhbyBDYWk6VmFuIEJhbgorMTpWTjpWTk06VklFVE5BTTpOaW5oIEJpbmg6R2lhIFZpZW4KKzI6Vk46Vk5NOlZJRVROQU06TmluaCBCaW5oOkhvYSBMdQorMzpWTjpWTk06VklFVE5BTTpOaW5oIEJpbmg6SG9hbmcgTG9uZworNDpWTjpWTk06VklFVE5BTTpOaW5oIEJpbmg6S2ltIFNvbgorNTpWTjpWTk06VklFVE5BTTpOaW5oIEJpbmg6TmluaCBCaW5oCis2OlZOOlZOTTpWSUVUTkFNOk5pbmggQmluaDpUYW0gRGllcAorMTpWTjpWTk06VklFVE5BTTpMb25nIEFuOkJlbiBMdWMKKzI6Vk46Vk5NOlZJRVROQU06TG9uZyBBbjpDYW4gRHVvYworMzpWTjpWTk06VklFVE5BTTpMb25nIEFuOkNhbiBHaXVvYworNDpWTjpWTk06VklFVE5BTTpMb25nIEFuOkNoYXUgVGhhbmgKKzU6Vk46Vk5NOlZJRVROQU06TG9uZyBBbjpEdWMgSG9hCis2OlZOOlZOTTpWSUVUTkFNOkxvbmcgQW46RHVjIEh1ZQorNzpWTjpWTk06VklFVE5BTTpMb25nIEFuOk1vYyBIb2EKKzg6Vk46Vk5NOlZJRVROQU06TG9uZyBBbjpUYW4gQW4KKzk6Vk46Vk5NOlZJRVROQU06TG9uZyBBbjpUYW4gVGhhbmgKKzEwOlZOOlZOTTpWSUVUTkFNOkxvbmcgQW46VGFuIFRydQorMTE6Vk46Vk5NOlZJRVROQU06TG9uZyBBbjpUaGFuaCBIb2EKKzEyOlZOOlZOTTpWSUVUTkFNOkxvbmcgQW46VGh1IFRodWEKKzEzOlZOOlZOTTpWSUVUTkFNOkxvbmcgQW46VmluaCBIdW5nCisxOlZOOlZOTTpWSUVUTkFNOlRyYSBWaW5oOkNhbmcgTG9uZworMjpWTjpWTk06VklFVE5BTTpUcmEgVmluaDpDYXUgS2UKKzM6Vk46Vk5NOlZJRVROQU06VHJhIFZpbmg6Q2F1IE5nYW5nCis0OlZOOlZOTTpWSUVUTkFNOlRyYSBWaW5oOkNoYXUgVGhhbmgKKzU6Vk46Vk5NOlZJRVROQU06VHJhIFZpbmg6RHV5ZW4gSGFpCis2OlZOOlZOTTpWSUVUTkFNOlRyYSBWaW5oOlRpZXUgQ2FuCis3OlZOOlZOTTpWSUVUTkFNOlRyYSBWaW5oOlRyYSBDdQorODpWTjpWTk06VklFVE5BTTpUcmEgVmluaDpUcmEgVmluaAorMTpWTjpWTk06VklFVE5BTTpIYWkgSHVuZzpDYW0gQmluaAorMjpWTjpWTk06VklFVE5BTTpIYWkgSHVuZzpDaGF1IEdpYW5nCiszOlZOOlZOTTpWSUVUTkFNOkhhaSBIdW5nOkNoaSBMaW5oCis0OlZOOlZOTTpWSUVUTkFNOkhhaSBIdW5nOkhhaSBEdW9uZworNTpWTjpWTk06VklFVE5BTTpIYWkgSHVuZzpIdW5nIFllbgorNjpWTjpWTk06VklFVE5BTTpIYWkgSHVuZzpLaW0gTW9uCis3OlZOOlZOTTpWSUVUTkFNOkhhaSBIdW5nOktpbSBUaGkKKzg6Vk46Vk5NOlZJRVROQU06SGFpIEh1bmc6TXkgVmFuCis5OlZOOlZOTTpWSUVUTkFNOkhhaSBIdW5nOk5hbSBUaGFuaAorMTA6Vk46Vk5NOlZJRVROQU06SGFpIEh1bmc6TmluaCBUaGFuaAorMTE6Vk46Vk5NOlZJRVROQU06SGFpIEh1bmc6UGh1IFRpZW4KKzEyOlZOOlZOTTpWSUVUTkFNOkhhaSBIdW5nOlR1IExvYworMTpWTjpWTk06VklFVE5BTTpRdWFuZyBCaW5oOkJvIFRyYWNoCisyOlZOOlZOTTpWSUVUTkFNOlF1YW5nIEJpbmg6RG9uZyBIb2kKKzM6Vk46Vk5NOlZJRVROQU06UXVhbmcgQmluaDpMZSBUaHV5Cis0OlZOOlZOTTpWSUVUTkFNOlF1YW5nIEJpbmg6TWluaCBIb2EKKzU6Vk46Vk5NOlZJRVROQU06UXVhbmcgQmluaDpRdWFuZyBOaW5oCis2OlZOOlZOTTpWSUVUTkFNOlF1YW5nIEJpbmg6UXVhbmcgVHJhY2gKKzc6Vk46Vk5NOlZJRVROQU06UXVhbmcgQmluaDpUdXllbiBIb2EKKzE6Vk46Vk5NOlZJRVROQU06S2llbiBHaWFuZzpBbiBCaWVuCisyOlZOOlZOTTpWSUVUTkFNOktpZW4gR2lhbmc6QW4gTWluaAorMzpWTjpWTk06VklFVE5BTTpLaWVuIEdpYW5nOkNoYXUgVGhhbmgKKzQ6Vk46Vk5NOlZJRVROQU06S2llbiBHaWFuZzpHaW9uZyBSaWVuZworNTpWTjpWTk06VklFVE5BTTpLaWVuIEdpYW5nOkdvIFF1YW8KKzY6Vk46Vk5NOlZJRVROQU06S2llbiBHaWFuZzpIYSBUaWVuCis3OlZOOlZOTTpWSUVUTkFNOktpZW4gR2lhbmc6SG9uIERhdAorODpWTjpWTk06VklFVE5BTTpLaWVuIEdpYW5nOktpZW4gSGFpCis5OlZOOlZOTTpWSUVUTkFNOktpZW4gR2lhbmc6UGh1IFF1b2MKKzEwOlZOOlZOTTpWSUVUTkFNOktpZW4gR2lhbmc6UmFjaCBHaWEKKzExOlZOOlZOTTpWSUVUTkFNOktpZW4gR2lhbmc6VGFuIEhpZXAKKzEyOlZOOlZOTTpWSUVUTkFNOktpZW4gR2lhbmc6VmluaCBUaHVhbgorMTpWTjpWTk06VklFVE5BTTpCZW4gVHJlOkJhIFRyaQorMjpWTjpWTk06VklFVE5BTTpCZW4gVHJlOkJpbmggRGFpCiszOlZOOlZOTTpWSUVUTkFNOkJlbiBUcmU6Q2hhdSBUaGFuaAorNDpWTjpWTk06VklFVE5BTTpCZW4gVHJlOkNobyBMYWNoCis1OlZOOlZOTTpWSUVUTkFNOkJlbiBUcmU6R2lvbmcgVHJvbQorNjpWTjpWTk06VklFVE5BTTpCZW4gVHJlOk1vIENheQorNzpWTjpWTk06VklFVE5BTTpCZW4gVHJlOlRoYW5oIFBodQorODpWTjpWTk06VklFVE5BTTpCZW4gVHJlOlR4LkJlbiBUcmUKKzE6Vk46Vk5NOlZJRVROQU06VmluaCBQaHU6RG9hbiBIdW5nCisyOlZOOlZOTTpWSUVUTkFNOlZpbmggUGh1OkxhcCBUaGFjaAorMzpWTjpWTk06VklFVE5BTTpWaW5oIFBodTpNZSBMaW5oCis0OlZOOlZOTTpWSUVUTkFNOlZpbmggUGh1OlBob25nIENoYXUKKzU6Vk46Vk5NOlZJRVROQU06VmluaCBQaHU6UGh1IFRobworNjpWTjpWTk06VklFVE5BTTpWaW5oIFBodTpTb25nIFRoYW8KKzc6Vk46Vk5NOlZJRVROQU06VmluaCBQaHU6VGFtIERhbworODpWTjpWTk06VklFVE5BTTpWaW5oIFBodTpUYW0gVGhhbmgKKzk6Vk46Vk5NOlZJRVROQU06VmluaCBQaHU6VGhhbmggSG9hCisxMDpWTjpWTk06VklFVE5BTTpWaW5oIFBodTpUaGFuaCBTb24KKzExOlZOOlZOTTpWSUVUTkFNOlZpbmggUGh1OlZpZXQgVHJpCisxMjpWTjpWTk06VklFVE5BTTpWaW5oIFBodTpWaW5oIExhYworMTM6Vk46Vk5NOlZJRVROQU06VmluaCBQaHU6VmluaCBZZW4KKzE0OlZOOlZOTTpWSUVUTkFNOlZpbmggUGh1OlllbiBMYXAKKzE6Vk46Vk5NOlZJRVROQU06SG8gQ2hpIE1pbmggQ2l0eTpCaW5oIENoYW5oCisyOlZOOlZOTTpWSUVUTkFNOkhvIENoaSBNaW5oIENpdHk6Q3UgQ2hpCiszOlZOOlZOTTpWSUVUTkFNOkhvIENoaSBNaW5oIENpdHk6RHV5ZW4gSGFpCis0OlZOOlZOTTpWSUVUTkFNOkhvIENoaSBNaW5oIENpdHk6SG9jIE1vbgorNTpWTjpWTk06VklFVE5BTTpIbyBDaGkgTWluaCBDaXR5OklubmVyIENpdHkKKzY6Vk46Vk5NOlZJRVROQU06SG8gQ2hpIE1pbmggQ2l0eTpOaGEgQmUKKzc6Vk46Vk5NOlZJRVROQU06SG8gQ2hpIE1pbmggQ2l0eTpUaHUgRHVjCisxOlZOOlZOTTpWSUVUTkFNOktvbiBUdW06RGFjIEdsYXkKKzI6Vk46Vk5NOlZJRVROQU06S29uIFR1bTpEYWMgVG8KKzM6Vk46Vk5NOlZJRVROQU06S29uIFR1bTpLb24gVHVtCis0OlZOOlZOTTpWSUVUTkFNOktvbiBUdW06S29ucGxvbmcKKzU6Vk46Vk5NOlZJRVROQU06S29uIFR1bTpTYSBUaGF5CisxOlZOOlZOTTpWSUVUTkFNOlRoYWkgQmluaDpEb25nIEh1bmcKKzI6Vk46Vk5NOlZJRVROQU06VGhhaSBCaW5oOkh1bmcgSGEKKzM6Vk46Vk5NOlZJRVROQU06VGhhaSBCaW5oOktpZW4gWHVvbmcKKzQ6Vk46Vk5NOlZJRVROQU06VGhhaSBCaW5oOlF1eW5oIFBodQorNTpWTjpWTk06VklFVE5BTTpUaGFpIEJpbmg6VGhhaSBUaHV5Cis2OlZOOlZOTTpWSUVUTkFNOlRoYWkgQmluaDpUaWVuIEhhaQorNzpWTjpWTk06VklFVE5BTTpUaGFpIEJpbmg6VHguVGhhaSBCaW5oCis4OlZOOlZOTTpWSUVUTkFNOlRoYWkgQmluaDpWdSBUaHUKKzE6Vk46Vk5NOlZJRVROQU06UXVhbmcgTmluaDpCYSBDaGUKKzI6Vk46Vk5NOlZJRVROQU06UXVhbmcgTmluaDpCaW5oIExpZXUKKzM6Vk46Vk5NOlZJRVROQU06UXVhbmcgTmluaDpDYW0gUGhhCis0OlZOOlZOTTpWSUVUTkFNOlF1YW5nIE5pbmg6Q2FtIFBoYSBUb3duCis1OlZOOlZOTTpWSUVUTkFNOlF1YW5nIE5pbmg6RG9uZyBUcmlldQorNjpWTjpWTk06VklFVE5BTTpRdWFuZyBOaW5oOkhhaSBOaW5oCis3OlZOOlZOTTpWSUVUTkFNOlF1YW5nIE5pbmg6SG9hbmggQm8KKzg6Vk46Vk5NOlZJRVROQU06UXVhbmcgTmluaDpIb24gR2FpCis5OlZOOlZOTTpWSUVUTkFNOlF1YW5nIE5pbmg6UXVhbmcgSGEKKzEwOlZOOlZOTTpWSUVUTkFNOlF1YW5nIE5pbmg6VGllbiBZZW4KKzExOlZOOlZOTTpWSUVUTkFNOlF1YW5nIE5pbmg6VW9uZyBCaQorMTI6Vk46Vk5NOlZJRVROQU06UXVhbmcgTmluaDpZZW4gSHVuZworMTpWTjpWTk06VklFVE5BTTpIYSBCYWM6QmFjIEdpYW5nCisyOlZOOlZOTTpWSUVUTkFNOkhhIEJhYzpCYWMgTmluaAorMzpWTjpWTk06VklFVE5BTTpIYSBCYWM6R2lhIEx1b25nCis0OlZOOlZOTTpWSUVUTkFNOkhhIEJhYzpIaWVwIEhvYQorNTpWTjpWTk06VklFVE5BTTpIYSBCYWM6TGFuZyBHaWFuZworNjpWTjpWTk06VklFVE5BTTpIYSBCYWM6THVjIE5hbQorNzpWTjpWTk06VklFVE5BTTpIYSBCYWM6THVjIE5nYW4KKzg6Vk46Vk5NOlZJRVROQU06SGEgQmFjOlF1ZSBWbworOTpWTjpWTk06VklFVE5BTTpIYSBCYWM6U29uIERvbmcKKzEwOlZOOlZOTTpWSUVUTkFNOkhhIEJhYzpUYW4gWWVuCisxMTpWTjpWTk06VklFVE5BTTpIYSBCYWM6VGh1YW4gVGhhbmgKKzEyOlZOOlZOTTpWSUVUTkFNOkhhIEJhYzpUaWVuIFNvbgorMTM6Vk46Vk5NOlZJRVROQU06SGEgQmFjOlZpZXQgWWVuCisxNDpWTjpWTk06VklFVE5BTTpIYSBCYWM6WWVuIER1bmcKKzE1OlZOOlZOTTpWSUVUTkFNOkhhIEJhYzpZZW4gUGhvbmcKKzE2OlZOOlZOTTpWSUVUTkFNOkhhIEJhYzpZZW4gVGhlCisxOlZOOlZOTTpWSUVUTkFNOkhvYSBCaW5oOkRhIEJhYworMjpWTjpWTk06VklFVE5BTTpIb2EgQmluaDpLaW0gQm9pCiszOlZOOlZOTTpWSUVUTkFNOkhvYSBCaW5oOkt5IFNvbgorNDpWTjpWTk06VklFVE5BTTpIb2EgQmluaDpMYWMgU29uCis1OlZOOlZOTTpWSUVUTkFNOkhvYSBCaW5oOkxhYyBUaHV5Cis2OlZOOlZOTTpWSUVUTkFNOkhvYSBCaW5oOkx1b25nIFNvbgorNzpWTjpWTk06VklFVE5BTTpIb2EgQmluaDpNYWkgQ2hhdQorODpWTjpWTk06VklFVE5BTTpIb2EgQmluaDpUYW4gTGFjCis5OlZOOlZOTTpWSUVUTkFNOkhvYSBCaW5oOlR4LkhvYSBCaW5oCisxMDpWTjpWTk06VklFVE5BTTpIb2EgQmluaDpZZW4gVGh1eQorMTpWTjpWTk06VklFVE5BTTpEYWMgTGFjOkJ1b24gTWEgVGh1YXQKKzI6Vk46Vk5NOlZJRVROQU06RGFjIExhYzpDaHUgR2l1dAorMzpWTjpWTk06VklFVE5BTTpEYWMgTGFjOkNodW1nYXIKKzQ6Vk46Vk5NOlZJRVROQU06RGFjIExhYzpEYWMgTWluCis1OlZOOlZOTTpWSUVUTkFNOkRhYyBMYWM6RGFrIE5vbmcKKzY6Vk46Vk5NOlZJRVROQU06RGFjIExhYzpEYWsgUmxhcAorNzpWTjpWTk06VklFVE5BTTpEYWMgTGFjOkVha2FyCis4OlZOOlZOTTpWSUVUTkFNOkRhYyBMYWM6S3JvbmdhbmEKKzk6Vk46Vk5NOlZJRVROQU06RGFjIExhYzpLcm9uZ2JvbmcKKzEwOlZOOlZOTTpWSUVUTkFNOkRhYyBMYWM6S3JvbmdidWMKKzExOlZOOlZOTTpWSUVUTkFNOkRhYyBMYWM6S3JvbmduYW5nCisxMjpWTjpWTk06VklFVE5BTTpEYWMgTGFjOktyb25nbm8KKzEzOlZOOlZOTTpWSUVUTkFNOkRhYyBMYWM6S3JvbmdwYWNoCisxNDpWTjpWTk06VklFVE5BTTpEYWMgTGFjOkxhYworMTU6Vk46Vk5NOlZJRVROQU06RGFjIExhYzpNJ0RyYWsKKzE2OlZOOlZOTTpWSUVUTkFNOkRhYyBMYWM6WWEgSGxlbworMTc6Vk46Vk5NOlZJRVROQU06RGFjIExhYzpZYSBTdXAKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9ZRU0vWUVNX0FETUlOMV9MRVgudHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L1lFTS9ZRU1fQURNSU4xX0xFWC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTcxYjlmYwotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9ZRU0vWUVNX0FETUlOMV9MRVgudHh0CkBAIC0wLDAgKzEsMjEgQEAKKzE6WUUtQUI6WUU6QUJZQU4KKzI6WUUtREE6WUU6QUQgRExJCiszOllFLUFEOllFOkFEQU4KKzQ6WUUtSEo6WUU6QUpKQUgKKzU6WUUtQkE6WUU6QUwgQkFZQQorNjpZRS1KQTpZRTpBTCBKQVdGCis3OllFLU1SOllFOkFMIE1BSFJBSAorODpZRS1NVzpZRTpBTCBNQVdJVAorOTpZRS1IVTpZRTpBTCBVREFZREFICisxMDpZRS1BTTpZRTpBTVJOCisxMTpZRS1TTjpZRTpBTgorMTI6WUUtSEQ6WUU6QVJBTUFXVAorMTM6WUUtU0Q6WUU6REFICisxNDpZRS1ESDpZRTpESEFNQVIKKzE1OllFLU46WUU6Rk9STUVSIE5PUlRIIFlFTUVOCisxNjpZRS1TOllFOkZPUk1FUiBTT1VUSCBZRU1FTgorMTc6WUUtSUI6WUU6SUJCCisxODpZRS1MQTpZRTpMQUlKCisxOTpZRS1NQTpZRTpNQVJJQgorMjA6WUUtU0g6WUU6U0hBQldBSAorMjE6WUUtVEE6WUU6VElaWgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L1lFTS9ZRU1fQURNSU4yX0xFWC50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvWUVNL1lFTV9BRE1JTjJfTEVYLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZGYyZjNmCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L1lFTS9ZRU1fQURNSU4yX0xFWC50eHQKQEAgLTAsMCArMSw4IEBACisxOllFOllFTTpZRU1FTjpGb3JtZXIgTm9ydGggWWVtZW46Tm9ydGggWWVtZW4gKDEpCisxOllFOllFTTpZRU1FTjpGb3JtZXIgU291dGggWWVtZW46QWJ5YW4KKzI6WUU6WUVNOllFTUVOOkZvcm1lciBTb3V0aCBZZW1lbjpBZGFuCiszOllFOllFTTpZRU1FTjpGb3JtZXIgU291dGggWWVtZW46QWwgTWFocmFoCis0OllFOllFTTpZRU1FTjpGb3JtZXIgU291dGggWWVtZW46SGFkcmFtYXd0Cis1OllFOllFTTpZRU1FTjpGb3JtZXIgU291dGggWWVtZW46TGFoaWoKKzY6WUU6WUVNOllFTUVOOkZvcm1lciBTb3V0aCBZZW1lbjpTaGFid2FoCis3OllFOllFTTpZRU1FTjpGb3JtZXIgU291dGggWWVtZW46U29jb3RyYQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L1pBRi9aQUZfQURNSU4xX0xFWC50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvWkFGL1pBRl9BRE1JTjFfTEVYLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYWFlMzQ4Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L1pBRi9aQUZfQURNSU4xX0xFWC50eHQKQEAgLTAsMCArMSwxMyBAQAorMTpaQS1FQzpaQTpFQVNURVJOIENBUEUgW0VBU1RFUk4gVFZMXQorMjpaQS1GUzpaQTpGUkVFIFNUQVRFCiszOlpBLUdUOlpBOkdBVVRFTkcKKzQ6WkEtTkw6WkE6S1dBWlVMVSBOQVRBTAorNTpaQS1MUDpaQTpMSU1QT1BPCis2OlpBLU1QOlpBOk1QVU1BTEFOR0EKKzc6WkEtTkFUOlpBOk5BVEFMCis4OlpBLU5XOlpBOk5PUlRIIFdFU1QKKzk6WkEtTkM6WkE6Tk9SVEhFUk4gQ0FQRSBbTk9SVEhFUk4gVFZMXQorMTA6WkEtT1I6WkE6T1JBTkdFCisxMTpaQS1PRlM6WkE6T1JBTkdFIEZSRUUgU1RBVEUKKzEyOlpBLVBXTTpaQTpQV1YKKzEzOlpBLVdDOlpBOldFU1RFUk4gQ0FQRQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L1pBRi9aQUZfQURNSU4yX0xFWC50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvWkFGL1pBRl9BRE1JTjJfTEVYLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zOGFmNzVhCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L1pBRi9aQUZfQURNSU4yX0xFWC50eHQKQEAgLTAsMCArMSwzNzQgQEAKKzE6WkE6WkFGOlNPVVRIIEFGUklDQTpFYXN0ZXJuIFRWTDpBbWVyc2ZvcnQKKzI6WkE6WkFGOlNPVVRIIEFGUklDQTpFYXN0ZXJuIFRWTDpCYWxmb3VyCiszOlpBOlpBRjpTT1VUSCBBRlJJQ0E6RWFzdGVybiBUVkw6QmFyYmVydG9uCis0OlpBOlpBRjpTT1VUSCBBRlJJQ0E6RWFzdGVybiBUVkw6QmVsZmFzdAorNTpaQTpaQUY6U09VVEggQUZSSUNBOkVhc3Rlcm4gVFZMOkJldGhhbAorNjpaQTpaQUY6U09VVEggQUZSSUNBOkVhc3Rlcm4gVFZMOkNhcm9saW5hCis3OlpBOlpBRjpTT1VUSCBBRlJJQ0E6RWFzdGVybiBUVkw6RGVsbWFzCis4OlpBOlpBRjpTT1VUSCBBRlJJQ0E6RWFzdGVybiBUVkw6RWVyc3RlaG9laworOTpaQTpaQUY6U09VVEggQUZSSUNBOkVhc3Rlcm4gVFZMOkVybWVsbworMTA6WkE6WkFGOlNPVVRIIEFGUklDQTpFYXN0ZXJuIFRWTDpHcm9ibGVyc2RhbAorMTE6WkE6WkFGOlNPVVRIIEFGUklDQTpFYXN0ZXJuIFRWTDpIb2V2ZWxkcmlmCisxMjpaQTpaQUY6U09VVEggQUZSSUNBOkVhc3Rlcm4gVFZMOkx5ZGVuYnVyZworMTM6WkE6WkFGOlNPVVRIIEFGUklDQTpFYXN0ZXJuIFRWTDpNZHV0amFuYQorMTQ6WkE6WkFGOlNPVVRIIEFGUklDQTpFYXN0ZXJuIFRWTDpNaWRkZWxzYnVyZworMTU6WkE6WkFGOlNPVVRIIEFGUklDQTpFYXN0ZXJuIFRWTDpNb3V0c2UKKzE2OlpBOlpBRjpTT1VUSCBBRlJJQ0E6RWFzdGVybiBUVkw6TmVsc3BydWl0CisxNzpaQTpaQUY6U09VVEggQUZSSUNBOkVhc3Rlcm4gVFZMOlBpZXQgUmV0aWVmCisxODpaQTpaQUY6U09VVEggQUZSSUNBOkVhc3Rlcm4gVFZMOlN0YW5kZXJ0b24KKzE5OlpBOlpBRjpTT1VUSCBBRlJJQ0E6RWFzdGVybiBUVkw6Vm9sa3NydXN0CisyMDpaQTpaQUY6U09VVEggQUZSSUNBOkVhc3Rlcm4gVFZMOldha2tlcnN0cm9vbQorMjE6WkE6WkFGOlNPVVRIIEFGUklDQTpFYXN0ZXJuIFRWTDpXYXRlcnZhbCBCb3ZlbgorMjI6WkE6WkFGOlNPVVRIIEFGUklDQTpFYXN0ZXJuIFRWTDpXaXRiYW5rCisyMzpaQTpaQUY6U09VVEggQUZSSUNBOkVhc3Rlcm4gVFZMOldpdHJpdmVyCisyNDpaQTpaQUY6U09VVEggQUZSSUNBOkVhc3Rlcm4gVFZMOlpBRi5MMi43OAorMjU6WkE6WkFGOlNPVVRIIEFGUklDQTpFYXN0ZXJuIFRWTDpaQUYuTDIuNzkKKzI2OlpBOlpBRjpTT1VUSCBBRlJJQ0E6RWFzdGVybiBUVkw6WkFGLkwyLjgwCisyNzpaQTpaQUY6U09VVEggQUZSSUNBOkVhc3Rlcm4gVFZMOlpBRi5MMi44MQorMjg6WkE6WkFGOlNPVVRIIEFGUklDQTpFYXN0ZXJuIFRWTDpaQUYuTDIuODIKKzI5OlpBOlpBRjpTT1VUSCBBRlJJQ0E6RWFzdGVybiBUVkw6WkFGLkwyLjgzCiszMDpaQTpaQUY6U09VVEggQUZSSUNBOkVhc3Rlcm4gVFZMOlpBRi5MMi44NAorMzE6WkE6WkFGOlNPVVRIIEFGUklDQTpFYXN0ZXJuIFRWTDpaQUYuTDIuODUKKzMyOlpBOlpBRjpTT1VUSCBBRlJJQ0E6RWFzdGVybiBUVkw6WkFGLkwyLjg2CisxOlpBOlpBRjpTT1VUSCBBRlJJQ0E6Tm9ydGhlcm4gQ2FwZTpCYXJrbHkgV2VzdAorMjpaQTpaQUY6U09VVEggQUZSSUNBOk5vcnRoZXJuIENhcGU6QnJpdHN0b3duCiszOlpBOlpBRjpTT1VUSCBBRlJJQ0E6Tm9ydGhlcm4gQ2FwZTpDYWx2aW5pYQorNDpaQTpaQUY6U09VVEggQUZSSUNBOk5vcnRoZXJuIENhcGU6Q2FybmFydm9uCis1OlpBOlpBRjpTT1VUSCBBRlJJQ0E6Tm9ydGhlcm4gQ2FwZTpDb2xlc2JlcmcKKzY6WkE6WkFGOlNPVVRIIEFGUklDQTpOb3J0aGVybiBDYXBlOkRlIEFhcgorNzpaQTpaQUY6U09VVEggQUZSSUNBOk5vcnRoZXJuIENhcGU6RnJhc2VyYnVyZworODpaQTpaQUY6U09VVEggQUZSSUNBOk5vcnRoZXJuIENhcGU6R29yZG9uaWEKKzk6WkE6WkFGOlNPVVRIIEFGUklDQTpOb3J0aGVybiBDYXBlOkhhbm92ZXIKKzEwOlpBOlpBRjpTT1VUSCBBRlJJQ0E6Tm9ydGhlcm4gQ2FwZTpIYXJ0c3dhdGVyCisxMTpaQTpaQUY6U09VVEggQUZSSUNBOk5vcnRoZXJuIENhcGU6SGF5CisxMjpaQTpaQUY6U09VVEggQUZSSUNBOk5vcnRoZXJuIENhcGU6SGVyYmVydAorMTM6WkE6WkFGOlNPVVRIIEFGUklDQTpOb3J0aGVybiBDYXBlOkhvcGV0b3duCisxNDpaQTpaQUY6U09VVEggQUZSSUNBOk5vcnRoZXJuIENhcGU6S2VuaGFyZHQKKzE1OlpBOlpBRjpTT1VUSCBBRlJJQ0E6Tm9ydGhlcm4gQ2FwZTpLaW1iZXJsZXkKKzE2OlpBOlpBRjpTT1VUSCBBRlJJQ0E6Tm9ydGhlcm4gQ2FwZTpLdXJ1bWFuCisxNzpaQTpaQUY6U09VVEggQUZSSUNBOk5vcnRoZXJuIENhcGU6TmFtYWt3YWxhbmQKKzE4OlpBOlpBRjpTT1VUSCBBRlJJQ0E6Tm9ydGhlcm4gQ2FwZTpOb3Vwb29ydAorMTk6WkE6WkFGOlNPVVRIIEFGUklDQTpOb3J0aGVybiBDYXBlOlBoaWxpcHN0b3duCisyMDpaQTpaQUY6U09VVEggQUZSSUNBOk5vcnRoZXJuIENhcGU6UG9zdG1hc2J1cmcKKzIxOlpBOlpBRjpTT1VUSCBBRlJJQ0E6Tm9ydGhlcm4gQ2FwZTpQcmllc2thCisyMjpaQTpaQUY6U09VVEggQUZSSUNBOk5vcnRoZXJuIENhcGU6UmljaG1vbmQKKzIzOlpBOlpBRjpTT1VUSCBBRlJJQ0E6Tm9ydGhlcm4gQ2FwZTpTdXRoZXJsYW5kCisyNDpaQTpaQUY6U09VVEggQUZSSUNBOk5vcnRoZXJuIENhcGU6VmljdG9yaWEgV2VzdAorMjU6WkE6WkFGOlNPVVRIIEFGUklDQTpOb3J0aGVybiBDYXBlOldhbHZpcyBCYXkKKzI2OlpBOlpBRjpTT1VUSCBBRlJJQ0E6Tm9ydGhlcm4gQ2FwZTpXYXJyZW50b24KKzI3OlpBOlpBRjpTT1VUSCBBRlJJQ0E6Tm9ydGhlcm4gQ2FwZTpXaWxsaXN0b24KKzE6WkE6WkFGOlNPVVRIIEFGUklDQTpOYXRhbDpBbGZyZWQKKzI6WkE6WkFGOlNPVVRIIEFGUklDQTpOYXRhbDpCYWJhbmFuZ28KKzM6WkE6WkFGOlNPVVRIIEFGUklDQTpOYXRhbDpCZXJndmlsbGUKKzQ6WkE6WkFGOlNPVVRIIEFGUklDQTpOYXRhbDpDYW1wZXIgRG93bgorNTpaQTpaQUY6U09VVEggQUZSSUNBOk5hdGFsOkRhbm5oYXVzZXIKKzY6WkE6WkFGOlNPVVRIIEFGUklDQTpOYXRhbDpEdW5kZWUKKzc6WkE6WkFGOlNPVVRIIEFGUklDQTpOYXRhbDpEdXJiYW4vQ2hhdHMuCis4OlpBOlpBRjpTT1VUSCBBRlJJQ0E6TmF0YWw6RW1idW1idWx1Cis5OlpBOlpBRjpTT1VUSCBBRlJJQ0E6TmF0YWw6RXNob3dlCisxMDpaQTpaQUY6U09VVEggQUZSSUNBOk5hdGFsOkVzdGNvdXJ0CisxMTpaQTpaQUY6U09VVEggQUZSSUNBOk5hdGFsOkV6aW5nb2x3ZW5pCisxMjpaQTpaQUY6U09VVEggQUZSSUNBOk5hdGFsOkdsZW5jb2UKKzEzOlpBOlpBRjpTT1VUSCBBRlJJQ0E6TmF0YWw6SGxhYmlzYQorMTQ6WkE6WkFGOlNPVVRIIEFGUklDQTpOYXRhbDpJbmFuZGEKKzE1OlpBOlpBRjpTT1VUSCBBRlJJQ0E6TmF0YWw6SW5nd2F2dW1hCisxNjpaQTpaQUY6U09VVEggQUZSSUNBOk5hdGFsOkl4b3BvCisxNzpaQTpaQUY6U09VVEggQUZSSUNBOk5hdGFsOktsaXByaXZlcgorMTg6WkE6WkFGOlNPVVRIIEFGUklDQTpOYXRhbDpLcmFuc2tvcAorMTk6WkE6WkFGOlNPVVRIIEFGUklDQTpOYXRhbDpMaW9uIFJpdmVyCisyMDpaQTpaQUY6U09VVEggQUZSSUNBOk5hdGFsOkxvd2VyIFR1Z3VsYQorMjE6WkE6WkFGOlNPVVRIIEFGUklDQTpOYXRhbDpMb3dlciBVbWZvbG96aQorMjI6WkE6WkFGOlNPVVRIIEFGUklDQTpOYXRhbDpNYWhsYWJhdGluaQorMjM6WkE6WkFGOlNPVVRIIEFGUklDQTpOYXRhbDpNYXB1bXVsbworMjQ6WkE6WkFGOlNPVVRIIEFGUklDQTpOYXRhbDpNb29pcml2aWVyCisyNTpaQTpaQUY6U09VVEggQUZSSUNBOk5hdGFsOk1vdW50IEN1cnJpZQorMjY6WkE6WkFGOlNPVVRIIEFGUklDQTpOYXRhbDpNcGVuZGxlCisyNzpaQTpaQUY6U09VVEggQUZSSUNBOk5hdGFsOk1zaW5nYQorMjg6WkE6WkFGOlNPVVRIIEFGUklDQTpOYXRhbDpNdG9uamFuZW5pCisyOTpaQTpaQUY6U09VVEggQUZSSUNBOk5hdGFsOk10dW56aW5pCiszMDpaQTpaQUY6U09VVEggQUZSSUNBOk5hdGFsOk5kd2Vkd2UKKzMxOlpBOlpBRjpTT1VUSCBBRlJJQ0E6TmF0YWw6TmV3IEhhbm92ZXIKKzMyOlpBOlpBRjpTT1VUSCBBRlJJQ0E6TmF0YWw6TmV3Y2FzdGxlCiszMzpaQTpaQUY6U09VVEggQUZSSUNBOk5hdGFsOk5nb3RzaGUKKzM0OlpBOlpBRjpTT1VUSCBBRlJJQ0E6TmF0YWw6TmthbmRhbGEKKzM1OlpBOlpBRjpTT1VUSCBBRlJJQ0E6TmF0YWw6Tm9uZ29tYQorMzY6WkE6WkFGOlNPVVRIIEFGUklDQTpOYXRhbDpOcXV0dQorMzc6WkE6WkFGOlNPVVRIIEFGUklDQTpOYXRhbDpQYXVscGlldGVyc2J1cmcKKzM4OlpBOlpBRjpTT1VUSCBBRlJJQ0E6TmF0YWw6UGlldGVybWFyaXR6YnVyZworMzk6WkE6WkFGOlNPVVRIIEFGUklDQTpOYXRhbDpQaW5ldG93bgorNDA6WkE6WkFGOlNPVVRIIEFGUklDQTpOYXRhbDpQb2xlbGEKKzQxOlpBOlpBRjpTT1VUSCBBRlJJQ0E6TmF0YWw6UG9ydCBTaGVwc3RvbmUKKzQyOlpBOlpBRjpTT1VUSCBBRlJJQ0E6TmF0YWw6UmljaG1vbmQKKzQzOlpBOlpBRjpTT1VUSCBBRlJJQ0E6TmF0YWw6VWJvbWJvCis0NDpaQTpaQUY6U09VVEggQUZSSUNBOk5hdGFsOlVtdm90aQorNDU6WkE6WkFGOlNPVVRIIEFGUklDQTpOYXRhbDpVbXppbnRvCis0NjpaQTpaQUY6U09VVEggQUZSSUNBOk5hdGFsOlVuZGVyYmVyZworNDc6WkE6WkFGOlNPVVRIIEFGUklDQTpOYXRhbDpVdHJlY2h0Cis0ODpaQTpaQUY6U09VVEggQUZSSUNBOk5hdGFsOlZyeWhlaWQKKzQ5OlpBOlpBRjpTT1VUSCBBRlJJQ0E6TmF0YWw6VnVsYW0uL0VtenVtYmUKKzUwOlpBOlpBRjpTT1VUSCBBRlJJQ0E6TmF0YWw6V2VlbmVuCis1MTpaQTpaQUY6U09VVEggQUZSSUNBOk5hdGFsOlpBRi5MMi4zMAorNTI6WkE6WkFGOlNPVVRIIEFGUklDQTpOYXRhbDpaQUYuTDIuMzEKKzUzOlpBOlpBRjpTT1VUSCBBRlJJQ0E6TmF0YWw6WkFGLkwyLjMyCis1NDpaQTpaQUY6U09VVEggQUZSSUNBOk5hdGFsOlpBRi5MMi4zMworNTU6WkE6WkFGOlNPVVRIIEFGUklDQTpOYXRhbDpaQUYuTDIuMzQKKzU2OlpBOlpBRjpTT1VUSCBBRlJJQ0E6TmF0YWw6WkFGLkwyLjM1Cis1NzpaQTpaQUY6U09VVEggQUZSSUNBOk5hdGFsOlpBRi5MMi4zNgorNTg6WkE6WkFGOlNPVVRIIEFGUklDQTpOYXRhbDpaQUYuTDIuMzcKKzU5OlpBOlpBRjpTT1VUSCBBRlJJQ0E6TmF0YWw6WkFGLkwyLjM4Cis2MDpaQTpaQUY6U09VVEggQUZSSUNBOk5hdGFsOlpBRi5MMi4zOQorNjE6WkE6WkFGOlNPVVRIIEFGUklDQTpOYXRhbDpaQUYuTDIuNDAKKzYyOlpBOlpBRjpTT1VUSCBBRlJJQ0E6TmF0YWw6WkFGLkwyLjQxCis2MzpaQTpaQUY6U09VVEggQUZSSUNBOk5hdGFsOlpBRi5MMi40MgorNjQ6WkE6WkFGOlNPVVRIIEFGUklDQTpOYXRhbDpaQUYuTDIuNDMKKzY1OlpBOlpBRjpTT1VUSCBBRlJJQ0E6TmF0YWw6WkFGLkwyLjQ0Cis2NjpaQTpaQUY6U09VVEggQUZSSUNBOk5hdGFsOlpBRi5MMi40NQorNjc6WkE6WkFGOlNPVVRIIEFGUklDQTpOYXRhbDpaQUYuTDIuNDYKKzY4OlpBOlpBRjpTT1VUSCBBRlJJQ0E6TmF0YWw6WkFGLkwyLjQ3Cis2OTpaQTpaQUY6U09VVEggQUZSSUNBOk5hdGFsOlpBRi5MMi40OAorNzA6WkE6WkFGOlNPVVRIIEFGUklDQTpOYXRhbDpaQUYuTDIuNDkKKzcxOlpBOlpBRjpTT1VUSCBBRlJJQ0E6TmF0YWw6WkFGLkwyLjUwCis3MjpaQTpaQUY6U09VVEggQUZSSUNBOk5hdGFsOlpBRi5MMi41MQorNzM6WkE6WkFGOlNPVVRIIEFGUklDQTpOYXRhbDpaQUYuTDIuNTIKKzc0OlpBOlpBRjpTT1VUSCBBRlJJQ0E6TmF0YWw6WkFGLkwyLjUzCis3NTpaQTpaQUY6U09VVEggQUZSSUNBOk5hdGFsOlpBRi5MMi41NAorNzY6WkE6WkFGOlNPVVRIIEFGUklDQTpOYXRhbDpaQUYuTDIuNTUKKzc3OlpBOlpBRjpTT1VUSCBBRlJJQ0E6TmF0YWw6WkFGLkwyLjU2Cis3ODpaQTpaQUY6U09VVEggQUZSSUNBOk5hdGFsOlpBRi5MMi41NworNzk6WkE6WkFGOlNPVVRIIEFGUklDQTpOYXRhbDpaQUYuTDIuNTgKKzgwOlpBOlpBRjpTT1VUSCBBRlJJQ0E6TmF0YWw6WkFGLkwyLjU5Cis4MTpaQTpaQUY6U09VVEggQUZSSUNBOk5hdGFsOlpBRi5MMi42MAorODI6WkE6WkFGOlNPVVRIIEFGUklDQTpOYXRhbDpaQUYuTDIuNjEKKzgzOlpBOlpBRjpTT1VUSCBBRlJJQ0E6TmF0YWw6WkFGLkwyLjYyCis4NDpaQTpaQUY6U09VVEggQUZSSUNBOk5hdGFsOlpBRi5MMi42MworODU6WkE6WkFGOlNPVVRIIEFGUklDQTpOYXRhbDpaQUYuTDIuNjQKKzg2OlpBOlpBRjpTT1VUSCBBRlJJQ0E6TmF0YWw6WkFGLkwyLjY1Cis4NzpaQTpaQUY6U09VVEggQUZSSUNBOk5hdGFsOlpBRi5MMi42NgorODg6WkE6WkFGOlNPVVRIIEFGUklDQTpOYXRhbDpaQUYuTDIuNjcKKzg5OlpBOlpBRjpTT1VUSCBBRlJJQ0E6TmF0YWw6WkFGLkwyLjY4Cis5MDpaQTpaQUY6U09VVEggQUZSSUNBOk5hdGFsOlpBRi5MMi42OQorOTE6WkE6WkFGOlNPVVRIIEFGUklDQTpOYXRhbDpaQUYuTDIuNzAKKzkyOlpBOlpBRjpTT1VUSCBBRlJJQ0E6TmF0YWw6WkFGLkwyLjcxCis5MzpaQTpaQUY6U09VVEggQUZSSUNBOk5hdGFsOlpBRi5MMi43MgorOTQ6WkE6WkFGOlNPVVRIIEFGUklDQTpOYXRhbDpaQUYuTDIuNzMKKzk1OlpBOlpBRjpTT1VUSCBBRlJJQ0E6TmF0YWw6WkFGLkwyLjc0Cis5NjpaQTpaQUY6U09VVEggQUZSSUNBOk5hdGFsOlpBRi5MMi43NQorOTc6WkE6WkFGOlNPVVRIIEFGUklDQTpOYXRhbDpaQUYuTDIuNzYKKzE6WkE6WkFGOlNPVVRIIEFGUklDQTpOb3J0aCBXZXN0OkJyaXRzCisyOlpBOlpBRjpTT1VUSCBBRlJJQ0E6Tm9ydGggV2VzdDpDb2xpZ255CiszOlpBOlpBRjpTT1VUSCBBRlJJQ0E6Tm9ydGggV2VzdDpEZWxhcmV5dmlsbGUKKzQ6WkE6WkFGOlNPVVRIIEFGUklDQTpOb3J0aCBXZXN0OktsZXJrc2RvcnAKKzU6WkE6WkFGOlNPVVRIIEFGUklDQTpOb3J0aCBXZXN0Oktvc3RlcgorNjpaQTpaQUY6U09VVEggQUZSSUNBOk5vcnRoIFdlc3Q6TGljaHRlbmJ1cmcKKzc6WkE6WkFGOlNPVVRIIEFGUklDQTpOb3J0aCBXZXN0Ok1hcmljbworODpaQTpaQUY6U09VVEggQUZSSUNBOk5vcnRoIFdlc3Q6UG90Y2hlZnN0cm9vbQorOTpaQTpaQUY6U09VVEggQUZSSUNBOk5vcnRoIFdlc3Q6UnVzdGVuYnVyZworMTA6WkE6WkFGOlNPVVRIIEFGUklDQTpOb3J0aCBXZXN0OlNjaHdlaXplciBSLgorMTE6WkE6WkFGOlNPVVRIIEFGUklDQTpOb3J0aCBXZXN0OlN3YXJ0cnVnZ2VuCisxMjpaQTpaQUY6U09VVEggQUZSSUNBOk5vcnRoIFdlc3Q6VmVudGVyc2RvcnAKKzEzOlpBOlpBRjpTT1VUSCBBRlJJQ0E6Tm9ydGggV2VzdDpWcnlidXJnCisxNDpaQTpaQUY6U09VVEggQUZSSUNBOk5vcnRoIFdlc3Q6VnJ5YnVyZyAxL01hZmVraW5nIDEKKzE1OlpBOlpBRjpTT1VUSCBBRlJJQ0E6Tm9ydGggV2VzdDpXb2xtYXJhbnNzdGFkCisxNjpaQTpaQUY6U09VVEggQUZSSUNBOk5vcnRoIFdlc3Q6WkFGLkwyLjEKKzE3OlpBOlpBRjpTT1VUSCBBRlJJQ0E6Tm9ydGggV2VzdDpaQUYuTDIuMgorMTg6WkE6WkFGOlNPVVRIIEFGUklDQTpOb3J0aCBXZXN0OlpBRi5MMi4zCisxOTpaQTpaQUY6U09VVEggQUZSSUNBOk5vcnRoIFdlc3Q6WkFGLkwyLjQKKzIwOlpBOlpBRjpTT1VUSCBBRlJJQ0E6Tm9ydGggV2VzdDpaQUYuTDIuNQorMjE6WkE6WkFGOlNPVVRIIEFGUklDQTpOb3J0aCBXZXN0OlpBRi5MMi42CisxOlpBOlpBRjpTT1VUSCBBRlJJQ0E6Tm9ydGhlcm4gVFZMOkJvY2h1bQorMjpaQTpaQUY6U09VVEggQUZSSUNBOk5vcnRoZXJuIFRWTDpCb2xvYmVkdQorMzpaQTpaQUY6U09VVEggQUZSSUNBOk5vcnRoZXJuIFRWTDpHaXlhbmkKKzQ6WkE6WkFGOlNPVVRIIEFGUklDQTpOb3J0aGVybiBUVkw6TGV0YWJhCis1OlpBOlpBRjpTT1VUSCBBRlJJQ0E6Tm9ydGhlcm4gVFZMOk1hbGFtdWVsZQorNjpaQTpaQUY6U09VVEggQUZSSUNBOk5vcnRoZXJuIFRWTDpNZXNzaW5hCis3OlpBOlpBRjpTT1VUSCBBRlJJQ0E6Tm9ydGhlcm4gVFZMOk1va2Vyb25nCis4OlpBOlpBRjpTT1VUSCBBRlJJQ0E6Tm9ydGhlcm4gVFZMOk5hcGh1bm8KKzk6WkE6WkFGOlNPVVRIIEFGUklDQTpOb3J0aGVybiBUVkw6TmVibworMTA6WkE6WkFGOlNPVVRIIEFGUklDQTpOb3J0aGVybiBUVkw6UGlldGVyc2J1cmcKKzExOlpBOlpBRjpTT1VUSCBBRlJJQ0E6Tm9ydGhlcm4gVFZMOlBpbGdyaW0ncyBSZXN0CisxMjpaQTpaQUY6U09VVEggQUZSSUNBOk5vcnRoZXJuIFRWTDpQb3RnaWV0ZXJzcnVzCisxMzpaQTpaQUY6U09VVEggQUZSSUNBOk5vcnRoZXJuIFRWTDpSaXRhdmkKKzE0OlpBOlpBRjpTT1VUSCBBRlJJQ0E6Tm9ydGhlcm4gVFZMOlNla2dvc2VzZQorMTU6WkE6WkFGOlNPVVRIIEFGUklDQTpOb3J0aGVybiBUVkw6U2VraHVraHVuZWxhbmQKKzE2OlpBOlpBRjpTT1VUSCBBRlJJQ0E6Tm9ydGhlcm4gVFZMOlNlc2hlZ28KKzE3OlpBOlpBRjpTT1VUSCBBRlJJQ0E6Tm9ydGhlcm4gVFZMOlNvdXRwYW5zYmVyZworMTg6WkE6WkFGOlNPVVRIIEFGUklDQTpOb3J0aGVybiBUVkw6VGhhYmFtb29wbworMTk6WkE6WkFGOlNPVVRIIEFGUklDQTpOb3J0aGVybiBUVkw6VGhhYmF6aW1iaQorMjA6WkE6WkFGOlNPVVRIIEFGUklDQTpOb3J0aGVybiBUVkw6V2FybWJhZAorMjE6WkE6WkFGOlNPVVRIIEFGUklDQTpOb3J0aGVybiBUVkw6V2F0ZXJiZXJnCisyMjpaQTpaQUY6U09VVEggQUZSSUNBOk5vcnRoZXJuIFRWTDpaQUYuTDIuMTAKKzIzOlpBOlpBRjpTT1VUSCBBRlJJQ0E6Tm9ydGhlcm4gVFZMOlpBRi5MMi4xMQorMjQ6WkE6WkFGOlNPVVRIIEFGUklDQTpOb3J0aGVybiBUVkw6WkFGLkwyLjEyCisyNTpaQTpaQUY6U09VVEggQUZSSUNBOk5vcnRoZXJuIFRWTDpaQUYuTDIuMTMKKzI2OlpBOlpBRjpTT1VUSCBBRlJJQ0E6Tm9ydGhlcm4gVFZMOlpBRi5MMi4xNAorMjc6WkE6WkFGOlNPVVRIIEFGUklDQTpOb3J0aGVybiBUVkw6WkFGLkwyLjE1CisyODpaQTpaQUY6U09VVEggQUZSSUNBOk5vcnRoZXJuIFRWTDpaQUYuTDIuMTYKKzI5OlpBOlpBRjpTT1VUSCBBRlJJQ0E6Tm9ydGhlcm4gVFZMOlpBRi5MMi4xNworMzA6WkE6WkFGOlNPVVRIIEFGUklDQTpOb3J0aGVybiBUVkw6WkFGLkwyLjE4CiszMTpaQTpaQUY6U09VVEggQUZSSUNBOk5vcnRoZXJuIFRWTDpaQUYuTDIuMTkKKzMyOlpBOlpBRjpTT1VUSCBBRlJJQ0E6Tm9ydGhlcm4gVFZMOlpBRi5MMi4yMAorMzM6WkE6WkFGOlNPVVRIIEFGUklDQTpOb3J0aGVybiBUVkw6WkFGLkwyLjIxCiszNDpaQTpaQUY6U09VVEggQUZSSUNBOk5vcnRoZXJuIFRWTDpaQUYuTDIuMjIKKzM1OlpBOlpBRjpTT1VUSCBBRlJJQ0E6Tm9ydGhlcm4gVFZMOlpBRi5MMi4yMworMzY6WkE6WkFGOlNPVVRIIEFGUklDQTpOb3J0aGVybiBUVkw6WkFGLkwyLjI0CiszNzpaQTpaQUY6U09VVEggQUZSSUNBOk5vcnRoZXJuIFRWTDpaQUYuTDIuMjUKKzM4OlpBOlpBRjpTT1VUSCBBRlJJQ0E6Tm9ydGhlcm4gVFZMOlpBRi5MMi4yNgorMzk6WkE6WkFGOlNPVVRIIEFGUklDQTpOb3J0aGVybiBUVkw6WkFGLkwyLjI3Cis0MDpaQTpaQUY6U09VVEggQUZSSUNBOk5vcnRoZXJuIFRWTDpaQUYuTDIuNworNDE6WkE6WkFGOlNPVVRIIEFGUklDQTpOb3J0aGVybiBUVkw6WkFGLkwyLjgKKzQyOlpBOlpBRjpTT1VUSCBBRlJJQ0E6Tm9ydGhlcm4gVFZMOlpBRi5MMi45CisxOlpBOlpBRjpTT1VUSCBBRlJJQ0E6RWFzdGVybiBDYXBlOkFiZXJkZWVuCisyOlpBOlpBRjpTT1VUSCBBRlJJQ0E6RWFzdGVybiBDYXBlOkFkZWxhaWRlCiszOlpBOlpBRjpTT1VUSCBBRlJJQ0E6RWFzdGVybiBDYXBlOkFsYmFueQorNDpaQTpaQUY6U09VVEggQUZSSUNBOkVhc3Rlcm4gQ2FwZTpBbGJlcnQKKzU6WkE6WkFGOlNPVVRIIEFGUklDQTpFYXN0ZXJuIENhcGU6QWxleGFuZHJpYQorNjpaQTpaQUY6U09VVEggQUZSSUNBOkVhc3Rlcm4gQ2FwZTpBbGl3YWwgTm9ydGgKKzc6WkE6WkFGOlNPVVRIIEFGUklDQTpFYXN0ZXJuIENhcGU6QmFya2x5IEVhc3QKKzg6WkE6WkFGOlNPVVRIIEFGUklDQTpFYXN0ZXJuIENhcGU6QmF0aHVyc3QKKzk6WkE6WkFGOlNPVVRIIEFGUklDQTpFYXN0ZXJuIENhcGU6QmVkZm9yZAorMTA6WkE6WkFGOlNPVVRIIEFGUklDQTpFYXN0ZXJuIENhcGU6Q2hhdGNhcnQKKzExOlpBOlpBRjpTT1VUSCBBRlJJQ0E6RWFzdGVybiBDYXBlOkNyYWRvY2sKKzEyOlpBOlpBRjpTT1VUSCBBRlJJQ0E6RWFzdGVybiBDYXBlOkVhc3QgTG9uZG9uCisxMzpaQTpaQUY6U09VVEggQUZSSUNBOkVhc3Rlcm4gQ2FwZTpFbGxpb3QKKzE0OlpBOlpBRjpTT1VUSCBBRlJJQ0E6RWFzdGVybiBDYXBlOkZvcnQgQmVhdWZvcnQKKzE1OlpBOlpBRjpTT1VUSCBBRlJJQ0E6RWFzdGVybiBDYXBlOkdyYWFmZi1SZWluZXQKKzE2OlpBOlpBRjpTT1VUSCBBRlJJQ0E6RWFzdGVybiBDYXBlOkhhbmtleQorMTc6WkE6WkFGOlNPVVRIIEFGUklDQTpFYXN0ZXJuIENhcGU6SG9mbWV5cgorMTg6WkE6WkFGOlNPVVRIIEFGUklDQTpFYXN0ZXJuIENhcGU6SHVtYW5zZG9ycAorMTk6WkE6WkFGOlNPVVRIIEFGUklDQTpFYXN0ZXJuIENhcGU6SW5kd2UKKzIwOlpBOlpBRjpTT1VUSCBBRlJJQ0E6RWFzdGVybiBDYXBlOkphbnNlbnZpbGxlCisyMTpaQTpaQUY6U09VVEggQUZSSUNBOkVhc3Rlcm4gQ2FwZTpKb3ViZXJ0aW5hCisyMjpaQTpaQUY6U09VVEggQUZSSUNBOkVhc3Rlcm4gQ2FwZTpLaW5nIFdpbGxpYW0gVG93bgorMjM6WkE6WkFGOlNPVVRIIEFGUklDQTpFYXN0ZXJuIENhcGU6S2lya3dvb2QKKzI0OlpBOlpBRjpTT1VUSCBBRlJJQ0E6RWFzdGVybiBDYXBlOktvbWdhCisyNTpaQTpaQUY6U09VVEggQUZSSUNBOkVhc3Rlcm4gQ2FwZTpMYWR5IEdyZXkKKzI2OlpBOlpBRjpTT1VUSCBBRlJJQ0E6RWFzdGVybiBDYXBlOk1hY2xlYXIKKzI3OlpBOlpBRjpTT1VUSCBBRlJJQ0E6RWFzdGVybiBDYXBlOk1kYW50c2FuZQorMjg6WkE6WkFGOlNPVVRIIEFGUklDQTpFYXN0ZXJuIENhcGU6TWRhbnRzYW5lIDQKKzI5OlpBOlpBRjpTT1VUSCBBRlJJQ0E6RWFzdGVybiBDYXBlOk1pZGRsZWJ1cmcKKzMwOlpBOlpBRjpTT1VUSCBBRlJJQ0E6RWFzdGVybiBDYXBlOk1vbHRlbm8KKzMxOlpBOlpBRjpTT1VUSCBBRlJJQ0E6RWFzdGVybiBDYXBlOk1vdW50IEN1cnJpZQorMzI6WkE6WkFGOlNPVVRIIEFGUklDQTpFYXN0ZXJuIENhcGU6UGVhcnN0b24KKzMzOlpBOlpBRjpTT1VUSCBBRlJJQ0E6RWFzdGVybiBDYXBlOlBvcnQgRWxpc2FiZXRoCiszNDpaQTpaQUY6U09VVEggQUZSSUNBOkVhc3Rlcm4gQ2FwZTpRdWVlbnN0b3duCiszNTpaQTpaQUY6U09VVEggQUZSSUNBOkVhc3Rlcm4gQ2FwZTpTb21lcnNldCBFYXN0CiszNjpaQTpaQUY6U09VVEggQUZSSUNBOkVhc3Rlcm4gQ2FwZTpTdGVya3N0cm9vbQorMzc6WkE6WkFGOlNPVVRIIEFGUklDQTpFYXN0ZXJuIENhcGU6U3RleWxlcnZpbGxlCiszODpaQTpaQUY6U09VVEggQUZSSUNBOkVhc3Rlcm4gQ2FwZTpTdGV5bnNidXJnCiszOTpaQTpaQUY6U09VVEggQUZSSUNBOkVhc3Rlcm4gQ2FwZTpTdG9jaGVuc3Ryb20KKzQwOlpBOlpBRjpTT1VUSCBBRlJJQ0E6RWFzdGVybiBDYXBlOlN1dHRlcmhlaW0KKzQxOlpBOlpBRjpTT1VUSCBBRlJJQ0E6RWFzdGVybiBDYXBlOlRhcmthc3RhZAorNDI6WkE6WkFGOlNPVVRIIEFGUklDQTpFYXN0ZXJuIENhcGU6VWl0ZW5oYWdlCis0MzpaQTpaQUY6U09VVEggQUZSSUNBOkVhc3Rlcm4gQ2FwZTpWZXRlcnN0YWQKKzQ0OlpBOlpBRjpTT1VUSCBBRlJJQ0E6RWFzdGVybiBDYXBlOlZpY3RvcmlhIEVhc3QKKzQ1OlpBOlpBRjpTT1VUSCBBRlJJQ0E6RWFzdGVybiBDYXBlOldpbGxvd21vcmUKKzQ2OlpBOlpBRjpTT1VUSCBBRlJJQ0E6RWFzdGVybiBDYXBlOldvZGVob3VzZQorNDc6WkE6WkFGOlNPVVRIIEFGUklDQTpFYXN0ZXJuIENhcGU6WkFGLkwyLjI4Cis0ODpaQTpaQUY6U09VVEggQUZSSUNBOkVhc3Rlcm4gQ2FwZTpaQUYuTDIuMjkKKzE6WkE6WkFGOlNPVVRIIEFGUklDQTpQV1Y6QWxiZXJ0b24KKzI6WkE6WkFGOlNPVVRIIEFGUklDQTpQV1Y6QmVub25pCiszOlpBOlpBRjpTT1VUSCBBRlJJQ0E6UFdWOkJva3NidXJnCis0OlpBOlpBRjpTT1VUSCBBRlJJQ0E6UFdWOkJyYWtwYW4KKzU6WkE6WkFGOlNPVVRIIEFGUklDQTpQV1Y6QnJvbmtob3JzdHNwcnVpdAorNjpaQTpaQUY6U09VVEggQUZSSUNBOlBXVjpDdWxsaW5hbgorNzpaQTpaQUY6U09VVEggQUZSSUNBOlBXVjpHZXJtaXN0b24KKzg6WkE6WkFGOlNPVVRIIEFGUklDQTpQV1Y6SGVpZGVsYmVyZworOTpaQTpaQUY6U09VVEggQUZSSUNBOlBXVjpKb2hhbm5lc2J1cmcKKzEwOlpBOlpBRjpTT1VUSCBBRlJJQ0E6UFdWOktlbXB0b24gUGFyaworMTE6WkE6WkFGOlNPVVRIIEFGUklDQTpQV1Y6S3J1Z2Vyc2RvcnAKKzEyOlpBOlpBRjpTT1VUSCBBRlJJQ0E6UFdWOk5pZ2VsCisxMzpaQTpaQUY6U09VVEggQUZSSUNBOlBXVjpPYmVyaG9semVyCisxNDpaQTpaQUY6U09VVEggQUZSSUNBOlBXVjpQcmV0b3JpYQorMTU6WkE6WkFGOlNPVVRIIEFGUklDQTpQV1Y6UmFuZGJ1cmcKKzE2OlpBOlpBRjpTT1VUSCBBRlJJQ0E6UFdWOlJhbmRmb250ZWluCisxNzpaQTpaQUY6U09VVEggQUZSSUNBOlBXVjpSb29kZSBQb3J0CisxODpaQTpaQUY6U09VVEggQUZSSUNBOlBXVjpTcHJpbmdzCisxOTpaQTpaQUY6U09VVEggQUZSSUNBOlBXVjpWYW5kZXJiaWpsIFAuCisyMDpaQTpaQUY6U09VVEggQUZSSUNBOlBXVjpWZXJlZW5pZ2luZworMjE6WkE6WkFGOlNPVVRIIEFGUklDQTpQV1Y6V2VzdG9uYXJpYQorMjI6WkE6WkFGOlNPVVRIIEFGUklDQTpQV1Y6V29uZGVyYm9vbQorMTpaQTpaQUY6U09VVEggQUZSSUNBOk9yYW5nZTpXaXR6aWVzaG9layAoUWFxd2EpCisxOlpBOlpBRjpTT1VUSCBBRlJJQ0E6T3JhbmdlIEZyZWUgU3RhdGU6QmV0aGxlaGVtCisyOlpBOlpBRjpTT1VUSCBBRlJJQ0E6T3JhbmdlIEZyZWUgU3RhdGU6QmV0aHVsaWUKKzM6WkE6WkFGOlNPVVRIIEFGUklDQTpPcmFuZ2UgRnJlZSBTdGF0ZTpCbG9lbWZvbnRlaW4vQm90cworNDpaQTpaQUY6U09VVEggQUZSSUNBOk9yYW5nZSBGcmVlIFN0YXRlOkJvL0phay9Lb2YvRmF1Cis1OlpBOlpBRjpTT1VUSCBBRlJJQ0E6T3JhbmdlIEZyZWUgU3RhdGU6Qm90aGF2aWxsZQorNjpaQTpaQUY6U09VVEggQUZSSUNBOk9yYW5nZSBGcmVlIFN0YXRlOkJyYW5kZm9ydAorNzpaQTpaQUY6U09VVEggQUZSSUNBOk9yYW5nZSBGcmVlIFN0YXRlOkJ1bGZvbnRlaW4KKzg6WkE6WkFGOlNPVVRIIEFGUklDQTpPcmFuZ2UgRnJlZSBTdGF0ZTpDbG9jb2xhbgorOTpaQTpaQUY6U09VVEggQUZSSUNBOk9yYW5nZSBGcmVlIFN0YXRlOkRld3RzIERvb3JwCisxMDpaQTpaQUY6U09VVEggQUZSSUNBOk9yYW5nZSBGcmVlIFN0YXRlOkVkZW5idXJnCisxMTpaQTpaQUY6U09VVEggQUZSSUNBOk9yYW5nZSBGcmVlIFN0YXRlOkV4Y2Vsc2lvcgorMTI6WkE6WkFGOlNPVVRIIEFGUklDQTpPcmFuZ2UgRnJlZSBTdGF0ZTpGaWNrc2J1cmcKKzEzOlpBOlpBRjpTT1VUSCBBRlJJQ0E6T3JhbmdlIEZyZWUgU3RhdGU6Rm91cmllc2J1cmcKKzE0OlpBOlpBRjpTT1VUSCBBRlJJQ0E6T3JhbmdlIEZyZWUgU3RhdGU6RnJhbmtmb3J0CisxNTpaQTpaQUY6U09VVEggQUZSSUNBOk9yYW5nZSBGcmVlIFN0YXRlOkhhcnJpc21pdGgKKzE2OlpBOlpBRjpTT1VUSCBBRlJJQ0E6T3JhbmdlIEZyZWUgU3RhdGU6SGVpbGJyb24KKzE3OlpBOlpBRjpTT1VUSCBBRlJJQ0E6T3JhbmdlIEZyZWUgU3RhdGU6SGVubmVubWFuCisxODpaQTpaQUY6U09VVEggQUZSSUNBOk9yYW5nZSBGcmVlIFN0YXRlOkhvb3BzdGFkCisxOTpaQTpaQUY6U09VVEggQUZSSUNBOk9yYW5nZSBGcmVlIFN0YXRlOkphZ2Vyc2ZvbnRlaW4KKzIwOlpBOlpBRjpTT1VUSCBBRlJJQ0E6T3JhbmdlIEZyZWUgU3RhdGU6S29wcGllcworMjE6WkE6WkFGOlNPVVRIIEFGUklDQTpPcmFuZ2UgRnJlZSBTdGF0ZTpLcm9vbnN0YWQKKzIyOlpBOlpBRjpTT1VUSCBBRlJJQ0E6T3JhbmdlIEZyZWUgU3RhdGU6TGFkeWJyYW5kCisyMzpaQTpaQUY6U09VVEggQUZSSUNBOk9yYW5nZSBGcmVlIFN0YXRlOkxpbmRsZXkKKzI0OlpBOlpBRjpTT1VUSCBBRlJJQ0E6T3JhbmdlIEZyZWUgU3RhdGU6TWFycXVhcmQKKzI1OlpBOlpBRjpTT1VUSCBBRlJJQ0E6T3JhbmdlIEZyZWUgU3RhdGU6T2RlbmRhYWxzcnVzCisyNjpaQTpaQUY6U09VVEggQUZSSUNBOk9yYW5nZSBGcmVlIFN0YXRlOlBhcnlzCisyNzpaQTpaQUY6U09VVEggQUZSSUNBOk9yYW5nZSBGcmVlIFN0YXRlOlBldHJ1c2J1cmcKKzI4OlpBOlpBRjpTT1VUSCBBRlJJQ0E6T3JhbmdlIEZyZWUgU3RhdGU6UGhpbGlwcG9saXMKKzI5OlpBOlpBRjpTT1VUSCBBRlJJQ0E6T3JhbmdlIEZyZWUgU3RhdGU6UmVkZGVzc2J1cmcKKzMwOlpBOlpBRjpTT1VUSCBBRlJJQ0E6T3JhbmdlIEZyZWUgU3RhdGU6UmVpdHoKKzMxOlpBOlpBRjpTT1VUSCBBRlJJQ0E6T3JhbmdlIEZyZWUgU3RhdGU6Um91eHZpbGxlCiszMjpaQTpaQUY6U09VVEggQUZSSUNBOk9yYW5nZSBGcmVlIFN0YXRlOlNhc29sc2J1cmcKKzMzOlpBOlpBRjpTT1VUSCBBRlJJQ0E6T3JhbmdlIEZyZWUgU3RhdGU6U2VuZWthbAorMzQ6WkE6WkFGOlNPVVRIIEFGUklDQTpPcmFuZ2UgRnJlZSBTdGF0ZTpTbWl0aGZpZWxkCiszNTpaQTpaQUY6U09VVEggQUZSSUNBOk9yYW5nZSBGcmVlIFN0YXRlOlRoZXVuaXNzZW4KKzM2OlpBOlpBRjpTT1VUSCBBRlJJQ0E6T3JhbmdlIEZyZWUgU3RhdGU6VHJvbXBzYnVyZworMzc6WkE6WkFGOlNPVVRIIEFGUklDQTpPcmFuZ2UgRnJlZSBTdGF0ZTpWZW50ZXJzYnVyZworMzg6WkE6WkFGOlNPVVRIIEFGUklDQTpPcmFuZ2UgRnJlZSBTdGF0ZTpWaWxqb2Vuc2tyb29uCiszOTpaQTpaQUY6U09VVEggQUZSSUNBOk9yYW5nZSBGcmVlIFN0YXRlOlZyZWRlCis0MDpaQTpaQUY6U09VVEggQUZSSUNBOk9yYW5nZSBGcmVlIFN0YXRlOlZyZWRlZm9ydAorNDE6WkE6WkFGOlNPVVRIIEFGUklDQTpPcmFuZ2UgRnJlZSBTdGF0ZTpXZXBlbmVyCis0MjpaQTpaQUY6U09VVEggQUZSSUNBOk9yYW5nZSBGcmVlIFN0YXRlOldlc3NlbHMgQnJvbgorNDM6WkE6WkFGOlNPVVRIIEFGUklDQTpPcmFuZ2UgRnJlZSBTdGF0ZTpXaW5idXJnCis0NDpaQTpaQUY6U09VVEggQUZSSUNBOk9yYW5nZSBGcmVlIFN0YXRlOlpBRi5MMi43NworNDU6WkE6WkFGOlNPVVRIIEFGUklDQTpPcmFuZ2UgRnJlZSBTdGF0ZTpaYXN0cm9uCisxOlpBOlpBRjpTT1VUSCBBRlJJQ0E6V2VzdGVybiBDYXBlOkJlYXVmb3J0IFdlc3QKKzI6WkE6WkFGOlNPVVRIIEFGUklDQTpXZXN0ZXJuIENhcGU6QmVsbGV2aWxsZQorMzpaQTpaQUY6U09VVEggQUZSSUNBOldlc3Rlcm4gQ2FwZTpCcmVkYXNkb3JwCis0OlpBOlpBRjpTT1VUSCBBRlJJQ0E6V2VzdGVybiBDYXBlOkNhbGVkb24KKzU6WkE6WkFGOlNPVVRIIEFGUklDQTpXZXN0ZXJuIENhcGU6Q2FsaXR6ZG9ycAorNjpaQTpaQUY6U09VVEggQUZSSUNBOldlc3Rlcm4gQ2FwZTpDYXBlCis3OlpBOlpBRjpTT1VUSCBBRlJJQ0E6V2VzdGVybiBDYXBlOkNlcmVzCis4OlpBOlpBRjpTT1VUSCBBRlJJQ0E6V2VzdGVybiBDYXBlOkNsYW53aWxsaWFuCis5OlpBOlpBRjpTT1VUSCBBRlJJQ0E6V2VzdGVybiBDYXBlOkdlb3JnZQorMTA6WkE6WkFGOlNPVVRIIEFGUklDQTpXZXN0ZXJuIENhcGU6R29vZHdvb2QKKzExOlpBOlpBRjpTT1VUSCBBRlJJQ0E6V2VzdGVybiBDYXBlOkhlaWRlbGJlcmcKKzEyOlpBOlpBRjpTT1VUSCBBRlJJQ0E6V2VzdGVybiBDYXBlOkhlcm1hbnVzCisxMzpaQTpaQUY6U09VVEggQUZSSUNBOldlc3Rlcm4gQ2FwZTpIb3BlZmllbGQKKzE0OlpBOlpBRjpTT1VUSCBBRlJJQ0E6V2VzdGVybiBDYXBlOktueXNuYQorMTU6WkE6WkFGOlNPVVRIIEFGUklDQTpXZXN0ZXJuIENhcGU6S3VpbHNyaXZlcgorMTY6WkE6WkFGOlNPVVRIIEFGUklDQTpXZXN0ZXJuIENhcGU6TGFkaXNtaXRoCisxNzpaQTpaQUY6U09VVEggQUZSSUNBOldlc3Rlcm4gQ2FwZTpMYWluZ3NidXJnCisxODpaQTpaQUY6U09VVEggQUZSSUNBOldlc3Rlcm4gQ2FwZTpNYWxtZXNidXJ5CisxOTpaQTpaQUY6U09VVEggQUZSSUNBOldlc3Rlcm4gQ2FwZTpNb250YWd1CisyMDpaQTpaQUY6U09VVEggQUZSSUNBOldlc3Rlcm4gQ2FwZTpNb3NzZWwgQmFhaQorMjE6WkE6WkFGOlNPVVRIIEFGUklDQTpXZXN0ZXJuIENhcGU6TXVycmF5c2J1cmcKKzIyOlpBOlpBRjpTT1VUSCBBRlJJQ0E6V2VzdGVybiBDYXBlOk91ZHRzaG9vcm4KKzIzOlpBOlpBRjpTT1VUSCBBRlJJQ0E6V2VzdGVybiBDYXBlOlBhYXJsCisyNDpaQTpaQUY6U09VVEggQUZSSUNBOldlc3Rlcm4gQ2FwZTpQaWtldGJlcmcKKzI1OlpBOlpBRjpTT1VUSCBBRlJJQ0E6V2VzdGVybiBDYXBlOlByaW5jZSBBbGJlcnQKKzI2OlpBOlpBRjpTT1VUSCBBRlJJQ0E6V2VzdGVybiBDYXBlOlJpdmVyc2RhbGUKKzI3OlpBOlpBRjpTT1VUSCBBRlJJQ0E6V2VzdGVybiBDYXBlOlJvYmVydHNvbgorMjg6WkE6WkFGOlNPVVRIIEFGUklDQTpXZXN0ZXJuIENhcGU6U2ltb25zdG93bgorMjk6WkE6WkFGOlNPVVRIIEFGUklDQTpXZXN0ZXJuIENhcGU6U3RlbGxlbmJvc2NoCiszMDpaQTpaQUY6U09VVEggQUZSSUNBOldlc3Rlcm4gQ2FwZTpTdHJhbmQKKzMxOlpBOlpBRjpTT1VUSCBBRlJJQ0E6V2VzdGVybiBDYXBlOlN3ZWxsZW5kYW0KKzMyOlpBOlpBRjpTT1VUSCBBRlJJQ0E6V2VzdGVybiBDYXBlOlR1bGJhZ2gKKzMzOlpBOlpBRjpTT1VUSCBBRlJJQ0E6V2VzdGVybiBDYXBlOlVuaW9uZGFsZQorMzQ6WkE6WkFGOlNPVVRIIEFGUklDQTpXZXN0ZXJuIENhcGU6VmFuaHluc2RvcnAKKzM1OlpBOlpBRjpTT1VUSCBBRlJJQ0E6V2VzdGVybiBDYXBlOlZyZWRlbmJ1cmcKKzM2OlpBOlpBRjpTT1VUSCBBRlJJQ0E6V2VzdGVybiBDYXBlOlZyZWRlbmRhbAorMzc6WkE6WkFGOlNPVVRIIEFGUklDQTpXZXN0ZXJuIENhcGU6V2VsbGluZ3RvbgorMzg6WkE6WkFGOlNPVVRIIEFGUklDQTpXZXN0ZXJuIENhcGU6V2luYmVyZworMzk6WkE6WkFGOlNPVVRIIEFGUklDQTpXZXN0ZXJuIENhcGU6V29yY2VzdGVyCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvWk1CL1pNQl9BRE1JTjFfTEVYLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9aTUIvWk1CX0FETUlOMV9MRVgudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJiNTAxMGYKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvWk1CL1pNQl9BRE1JTjFfTEVYLnR4dApAQCAtMCwwICsxLDE0IEBACisxOlpNLTAyOlpNOkNFTlRSQUwKKzI6Wk0tQzM6Wk06Q0VOVFJBTDMKKzM6Wk0tMDg6Wk06Q09QUEVSQkVMVAorNDpaTS0wMzpaTTpFQVNURVJOCis1OlpNLUU0OlpNOkVBU1RFUk40Cis2OlpNLTA0OlpNOkxVQVBVTEEKKzc6Wk0tMDk6Wk06TFVTQUtBCis4OlpNLTA2OlpNOk5PUlRIIFdFU1RFUk4KKzk6Wk0tMDU6Wk06Tk9SVEhFUk4KKzEwOlpNLU40OlpNOk5PUlRIRVJONAorMTE6Wk0tMDc6Wk06U09VVEhFUk4KKzEyOlpNLVMzOlpNOlNPVVRIRVJOMworMTM6Wk0tMDpaTTpXRVNURVJOCisxNDpaTS1XNDpaTTpXRVNURVJONApkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L1pNQi9aTUJfQURNSU4yX0xFWC50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvWk1CL1pNQl9BRE1JTjJfTEVYLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NzAwMjViCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L1pNQi9aTUJfQURNSU4yX0xFWC50eHQKQEAgLTAsMCArMSw1NyBAQAorMTpaTTpaTUI6WkFNQklBOlNvdXRoZXJuOkNob21hCisyOlpNOlpNQjpaQU1CSUE6U291dGhlcm46R3dlbWJlCiszOlpNOlpNQjpaQU1CSUE6U291dGhlcm46S2Fsb21vCis0OlpNOlpNQjpaQU1CSUE6U291dGhlcm46TGl2aW5nc3RvbmUKKzU6Wk06Wk1COlpBTUJJQTpTb3V0aGVybjpNYXphYnVrYQorNjpaTTpaTUI6WkFNQklBOlNvdXRoZXJuOk1vbnplCis3OlpNOlpNQjpaQU1CSUE6U291dGhlcm46TmFtd2FsYQorODpaTTpaTUI6WkFNQklBOlNvdXRoZXJuOlNpYXZvbmdhCis5OlpNOlpNQjpaQU1CSUE6U291dGhlcm46U2luYXpvbmd3ZQorMTpaTTpaTUI6WkFNQklBOkNvcHBlcmJlbHQ6Q2hpbGlsYm9tYndlCisyOlpNOlpNQjpaQU1CSUE6Q29wcGVyYmVsdDpDaGluZ29sYQorMzpaTTpaTUI6WkFNQklBOkNvcHBlcmJlbHQ6S2FsdWxpc2hpCis0OlpNOlpNQjpaQU1CSUE6Q29wcGVyYmVsdDpLaXR3ZQorNTpaTTpaTUI6WkFNQklBOkNvcHBlcmJlbHQ6THVhbnNoeWEKKzY6Wk06Wk1COlpBTUJJQTpDb3BwZXJiZWx0Ok11ZnVsaXJhCis3OlpNOlpNQjpaQU1CSUE6Q29wcGVyYmVsdDpOZG9sYSBSdXJhbAorODpaTTpaTUI6WkFNQklBOkNvcHBlcmJlbHQ6TmRvbGEgVXJiYW4KKzE6Wk06Wk1COlpBTUJJQTpMdWFwdWxhOkthd2FtYndhCisyOlpNOlpNQjpaQU1CSUE6THVhcHVsYTpNYW5zYQorMzpaTTpaTUI6WkFNQklBOkx1YXB1bGE6TXdlbnNlCis0OlpNOlpNQjpaQU1CSUE6THVhcHVsYTpOY2hlbGVuZ2UKKzU6Wk06Wk1COlpBTUJJQTpMdWFwdWxhOlNhbWZpeWEKKzE6Wk06Wk1COlpBTUJJQTpMdXNha2E6THVhbmd3YQorMjpaTTpaTUI6WkFNQklBOkx1c2FrYTpMdXNha2EgUnVyYWwKKzM6Wk06Wk1COlpBTUJJQTpMdXNha2E6THVzYWthIFVyYmFuCisxOlpNOlpNQjpaQU1CSUE6Q2VudHJhbDpLYWJ3ZSBSdXJhbAorMjpaTTpaTUI6WkFNQklBOkNlbnRyYWw6S2Fid2UgVXJiYW4KKzM6Wk06Wk1COlpBTUJJQTpDZW50cmFsOk1rdXNoaQorNDpaTTpaTUI6WkFNQklBOkNlbnRyYWw6TXVtYndhCis1OlpNOlpNQjpaQU1CSUE6Q2VudHJhbDpTZXJlbmplCisxOlpNOlpNQjpaQU1CSUE6V2VzdGVybjpLYWxhYm8KKzI6Wk06Wk1COlpBTUJJQTpXZXN0ZXJuOkthb21hCiszOlpNOlpNQjpaQU1CSUE6V2VzdGVybjpMdWt1bHUKKzQ6Wk06Wk1COlpBTUJJQTpXZXN0ZXJuOk1vbmd1Cis1OlpNOlpNQjpaQU1CSUE6V2VzdGVybjpTZW5hbmdhCis2OlpNOlpNQjpaQU1CSUE6V2VzdGVybjpTZXNoZWtlCisxOlpNOlpNQjpaQU1CSUE6Tm9ydGggV2VzdGVybjpLYWJvbXBvCisyOlpNOlpNQjpaQU1CSUE6Tm9ydGggV2VzdGVybjpLYXNlbXBhCiszOlpNOlpNQjpaQU1CSUE6Tm9ydGggV2VzdGVybjpNdWZ1bWJ3ZQorNDpaTTpaTUI6WkFNQklBOk5vcnRoIFdlc3Rlcm46TXdpbmlsdW5nYQorNTpaTTpaTUI6WkFNQklBOk5vcnRoIFdlc3Rlcm46U29sd2V6aQorNjpaTTpaTUI6WkFNQklBOk5vcnRoIFdlc3Rlcm46WmFtYmV6aQorMTpaTTpaTUI6WkFNQklBOk5vcnRoZXJuOkNoaWx1YmkKKzI6Wk06Wk1COlpBTUJJQTpOb3J0aGVybjpDaGluc2FsaQorMzpaTTpaTUI6WkFNQklBOk5vcnRoZXJuOklzb2thCis0OlpNOlpNQjpaQU1CSUE6Tm9ydGhlcm46S2FwdXRhCis1OlpNOlpNQjpaQU1CSUE6Tm9ydGhlcm46S2FzYW1hCis2OlpNOlpNQjpaQU1CSUE6Tm9ydGhlcm46THV3aW5ndQorNzpaTTpaTUI6WkFNQklBOk5vcnRoZXJuOk1iYWxhCis4OlpNOlpNQjpaQU1CSUE6Tm9ydGhlcm46TXBpa2EKKzk6Wk06Wk1COlpBTUJJQTpOb3J0aGVybjpNcG9yb2tvc28KKzE6Wk06Wk1COlpBTUJJQTpFYXN0ZXJuOkNoYWRpemEKKzI6Wk06Wk1COlpBTUJJQTpFYXN0ZXJuOkNoYW1hCiszOlpNOlpNQjpaQU1CSUE6RWFzdGVybjpDaGlwYXRhCis0OlpNOlpNQjpaQU1CSUE6RWFzdGVybjpLYXRldGUKKzU6Wk06Wk1COlpBTUJJQTpFYXN0ZXJuOkx1bmRhemkKKzY6Wk06Wk1COlpBTUJJQTpFYXN0ZXJuOlBldGF1a2UKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvdGFyZ2V0cy9BZnJpY2FuQ291bnRyaWVzLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvdGFyZ2V0cy9BZnJpY2FuQ291bnRyaWVzLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYTUxYjE1Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy90YXJnZXRzL0FmcmljYW5Db3VudHJpZXMudHh0CkBAIC0wLDAgKzEsNDcgQEAKK0M6XGRpdmFcQWZyaWNhXEFsZ2VyaWFcQWxnZXJpYS50eHQKK0M6XGRpdmFcQWZyaWNhXEFuZ29sYVxBbmdvbGEudHh0CitDOlxkaXZhXEFmcmljYVxCZW5pblxCZW5pbi50eHQKK0M6XGRpdmFcQWZyaWNhXEJ1cmtpbmFGYXNvXEJ1cmtpbmFGYXNvLnR4dAkKK0M6XGRpdmFcQWZyaWNhXEJ1cnVuZGlcQnVydW5kaS50eHQJCitDOlxkaXZhXEFmcmljYVxDYXBlVmVyZGVcQ2FwZVZlcmRlLnR4dAkKK0M6XGRpdmFcQWZyaWNhXENlbnRyYWxBZnJpY2FuUmVwdWJsaWNcQ2VudHJhbAorQzpcZGl2YVxBZnJpY2FcQ2hhZFxDaGFkLnR4dAorQzpcZGl2YVxBZnJpY2FcQ29tb3Jvc1xDb21vcm9zLnR4dAorQzpcZGl2YVxBZnJpY2FcQ29uZ29cQ29uZ28udHh0CitDOlxkaXZhXEFmcmljYVxFZ3lwdFxFZ3lwdC50eHQKK0M6XGRpdmFcQWZyaWNhXEVxdWF0b3JpYWxHdWluZWFcRXF1YXRvcmlhbEd1aW5lYS50eHQKK0M6XGRpdmFcQWZyaWNhXEVyaXRyZWFcRXJpdHJlYS50eHQKK0M6XGRpdmFcQWZyaWNhXEdhYm9uXEdhYm9uLnR4dAorQzpcZGl2YVxBZnJpY2FcR2FtYmlhXEdhbWJpYS50eHQKK0M6XGRpdmFcQWZyaWNhXEdoYW5hXEdoYW5hLnR4dAorI0M6XGRpdmFcQWZyaWNhXEdsb3Jpb3NvSXNsYW5kc1xHbG9yaW9zb0lzbGFuZHMudHh0CitDOlxkaXZhXEFmcmljYVxHdWluZWFcR3VpbmVhLnR4dAorQzpcZGl2YVxBZnJpY2FcR3VpbmVhQmlzc2F1XEd1aW5lYUJpc3NhdS50eHQKK0M6XGRpdmFcQWZyaWNhXEl2b3J5Q29hc3RcSXZvcnlDb2FzdC50eHQKK0M6XGRpdmFcQWZyaWNhXEtlbnlhXEtlbnlhLnR4dAorQzpcZGl2YVxBZnJpY2FcTGVzb3Rob1xMZXNvdGhvLnR4dAorQzpcZGl2YVxBZnJpY2FcTGliZXJpYVxMaWJlcmlhLnR4dAorQzpcZGl2YVxBZnJpY2FcTGlieWFcTGlieWEudHh0CitDOlxkaXZhXEFmcmljYVxNYWRhZ2FzY2FyXE1hZGFnYXNjYXIudHh0CitDOlxkaXZhXEFmcmljYVxNYWxhd2lcTWFsYXdpLnR4dAorQzpcZGl2YVxBZnJpY2FcTWF1cml0aXVzXE1hdXJpdGl1cy50eHQKK0M6XGRpdmFcQWZyaWNhXE1vcm9jY29cTW9yb2Njby50eHQKK0M6XGRpdmFcQWZyaWNhXE1vemFtYmlxdWVcTW96YW1iaXF1ZS50eHQKK0M6XGRpdmFcQWZyaWNhXE5hbWliaWFcTmFtaWJpYS50eHQKK0M6XGRpdmFcQWZyaWNhXE5pZ2VyXE5pZ2VyLnR4dAorQzpcZGl2YVxBZnJpY2FcTmlnZXJpYVxOaWdlcmlhLnR4dAorQzpcZGl2YVxBZnJpY2FcUGFwdWFOZXdHdWluZWFcUGFwdWFOZXdHdWluZWEudHh0CitDOlxkaXZhXEFmcmljYVxSd2FuZGFcUndhbmRhLnR4dAorQzpcZGl2YVxBZnJpY2FcU2FvVG9tZVByaW5jaXBlXFNhb1RvbWVQcmluY2lwZS50eHQKK0M6XGRpdmFcQWZyaWNhXFNlbmVnYWxcU2VuZWdhbC50eHQKK0M6XGRpdmFcQWZyaWNhXFNleWNoZWxsZXNcU2V5Y2hlbGxlcy50eHQKK0M6XGRpdmFcQWZyaWNhXFNpZXJyYUxlb25lXFNpZXJyYUxlb25lLnR4dAorQzpcZGl2YVxBZnJpY2FcU29tYWxpYVxTb21hbGlhLnR4dAorQzpcZGl2YVxBZnJpY2FcU291dGhBZnJpY2FcU291dGhBZnJpY2EudHh0CitDOlxkaXZhXEFmcmljYVxTdWRhblxTdWRhbi50eHQKK0M6XGRpdmFcQWZyaWNhXFRhbnphbmlhXFRhbnphbmlhLnR4dAorQzpcZGl2YVxBZnJpY2FcVG9nb1xUb2dvLnR4dAorQzpcZGl2YVxBZnJpY2FcVHVuaXNpYVxUdW5pc2lhLnR4dAorQzpcZGl2YVxBZnJpY2FcVWdhbmRhXFVnYW5kYS50eHQKK0M6XGRpdmFcQWZyaWNhXFphaXJlXFphaXJlLnR4dAorQzpcZGl2YVxBZnJpY2FcWmFtYmlhXFphbWJpYS50eHQKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvdGFyZ2V0cy9Db3VudHJpZXMudHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy90YXJnZXRzL0NvdW50cmllcy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmQ5YmJjZQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvdGFyZ2V0cy9Db3VudHJpZXMudHh0CkBAIC0wLDAgKzEsMTYwIEBACisjTUlTU0lORyBDT1VOVFJJRVMKKyNDOlxzaGFwZUZpbGVzXGNhbmFkYVxDYW5hZGFTb3J0ZWQudHh0CisjQzpcc2hhcGVGaWxlc1xBdXN0cmFsaWFcQXVzdHJhbGlhU29ydGVkLnR4dAorI0M6XHNoYXBlRmlsZXNcWmFpcmVcWmFpcmVTb3J0ZWQudHh0CisjQzpcc2hhcGVGaWxlc1xaaW1iYWJ3ZVxaaW1iYWJ3ZVNvcnRlZC50eHQKKyNDOlxzaGFwZUZpbGVzXEJlbGFydXNcQmVsYXJ1c1NvcnRlZC50eHQKKyNDOlxzaGFwZUZpbGVzXEJlbGl6ZVxCZWxpemVTb3J0ZWQudHh0CisjQzpcc2hhcGVGaWxlc1xCb3Rzd2FuYVxCb3Rzd2FuYVNvcnRlZC50eHQKKyNDOlxzaGFwZUZpbGVzXENhbWVyb29uXENhbWVyb29uU29ydGVkLnR4dAorI0M6XHNoYXBlRmlsZXNcQ29zdGFSaWNhXENvc3RhUmljYVNvcnRlZC50eHQKKyNDOlxzaGFwZUZpbGVzXEVsU2FsdmFkb3JcRWxTYWx2YWRvclNvcnRlZC50eHQKKyNDOlxzaGFwZUZpbGVzXEVzdG9uaWFcRXN0b25pYVNvcnRlZC50eHQKKyNDOlxzaGFwZUZpbGVzXEV0aGlvcGlhXEV0aGlvcGlhU29ydGVkLnR4dAorI0M6XHNoYXBlRmlsZXNcR3VhdGVtYWxhXEd1YXRlbWFsYVNvcnRlZC50eHQKKyNDOlxzaGFwZUZpbGVzXEhvbmR1cmFzXEhvbmR1cmFzU29ydGVkLnR4dAorI0M6XHNoYXBlRmlsZXNcTGF0dmlhXExhdHZpYVNvcnRlZC50eHQKKyNDOlxzaGFwZUZpbGVzXExpdGh1YW5pYVxMaXRodWFuaWFTb3J0ZWQudHh0CisjQzpcc2hhcGVGaWxlc1xNYWxpXE1hbGlTb3J0ZWQudHh0CisjQzpcc2hhcGVGaWxlc1xNYXVyaXRhbmlhXE1hdXJpdGFuaWFTb3J0ZWQudHh0CisjQzpcc2hhcGVGaWxlc1xOaWNhcmFndWFcTmljYXJhZ3VhU29ydGVkLnR4dAorI0M6XHNoYXBlRmlsZXNcUGFuYW1hXFBhbmFtYVNvcnRlZC50eHQKK0M6XGRpdmFcRXVyb3BlXEFMQkFOSUFcQUxCQU5JQS50eHQKK0M6XGRpdmFcRXVyb3BlXEFORE9SUkFcQU5ET1JSQS50eHQKK0M6XGRpdmFcRXVyb3BlXEFVU1RSSUFcQVVTVFJJQS50eHQKK0M6XGRpdmFcRXVyb3BlXEJFTEdJVU1cQkVMR0lVTS50eHQKK0M6XGRpdmFcRXVyb3BlXEJVTEdBUklBXEJVTEdBUklBLnR4dAorQzpcZGl2YVxFdXJvcGVcQk9TTklBIEFORCBIRVJaRUdPVk5JQVxCT1NOSUEgQU5EIEhFUlpFR09WSU5BLnR4dAorQzpcZGl2YVxFdXJvcGVcU1dJVFpFUkxBTkRcU1dJVFpFUkxBTkQudHh0CitDOlxkaXZhXEV1cm9wZVxDWkVDSCBSRVBVQkxJQ1xDWkVDSCBSRVBVQkxJQy50eHQKK0M6XGRpdmFcRXVyb3BlXEdFUk1BTllcR0VSTUFOWS50eHQKK0M6XGRpdmFcRXVyb3BlXERFTk1BUktcREVOTUFSSy50eHQKK0M6XGRpdmFcRXVyb3BlXFNQQUlOXFNQQUlOLnR4dAorQzpcZGl2YVxFdXJvcGVcRklOTEFORFxGSU5MQU5ELnR4dAorQzpcZGl2YVxFdXJvcGVcRlJBTkNFXEZSQU5DRS50eHQKK0M6XGRpdmFcRXVyb3BlXEZBUk9FIElTTEFORFNcRkFST0UgSVNMQU5EUy50eHQKK0M6XGRpdmFcRXVyb3BlXEdSRUFUIEJSSVRBSU5cR1JFQVQgQlJJVEFJTi50eHQKK0M6XGRpdmFcRXVyb3BlXEdSRUVDRVxHUkVFQ0UudHh0CitDOlxkaXZhXEV1cm9wZVxDUk9BVElBXENST0FUSUEudHh0CitDOlxkaXZhXEV1cm9wZVxIVU5HQVJZXEhVTkdBUlkudHh0CitDOlxkaXZhXEV1cm9wZVxJUkVMQU5EXElSRUxBTkQudHh0CitDOlxkaXZhXEV1cm9wZVxJQ0VMQU5EXElDRUxBTkQudHh0CitDOlxkaXZhXEV1cm9wZVxJVEFMWVxJVEFMWS50eHQKK0M6XGRpdmFcRXVyb3BlXExJRUNIU1RFTlNURUlOXExJRUNIU1RFTlNURUlOLnR4dAorQzpcZGl2YVxFdXJvcGVcTFVYRU1CT1VSR1xMVVhFTUJPVVJHLnR4dAorQzpcZGl2YVxFdXJvcGVcTkVUSEVSTEFORFNcTkVUSEVSTEFORFMudHh0CitDOlxkaXZhXEV1cm9wZVxOT1JXQVlcTk9SV0FZLnR4dAorQzpcZGl2YVxFdXJvcGVcUE9MQU5EXFBPTEFORC50eHQKK0M6XGRpdmFcRXVyb3BlXFBPUlRVR0FMXFBPUlRVR0FMLnR4dAorQzpcZGl2YVxFdXJvcGVcUk9NQU5JQVxST01BTklBLnR4dAorQzpcZGl2YVxFdXJvcGVcUlVTU0lBXFJVU1NJQS50eHQKK0M6XGRpdmFcRXVyb3BlXFNBTiBNQVJJTk9cU0FOIE1BUklOTy50eHQKK0M6XGRpdmFcRXVyb3BlXFlVR1xZVUdPU0xBVklBLnR4dAorQzpcZGl2YVxFdXJvcGVcU0xPVkVOSUFcU0xPVkVOSUEudHh0CitDOlxkaXZhXEV1cm9wZVxTV0VERU5cU1dFREVOLnR4dAorQzpcZGl2YVxFdXJvcGVcVU5JVEVEIEtJTkdET01cVU5JVEVEIEtJTkdET00udHh0CitDOlxkaXZhXEFmcmljYVxBbGdlcmlhXEFsZ2VyaWEudHh0CitDOlxkaXZhXEFmcmljYVxBbmdvbGFcQW5nb2xhLnR4dAorQzpcZGl2YVxBZnJpY2FcQmVuaW5cQmVuaW4udHh0CitDOlxkaXZhXEFmcmljYVxCdXJraW5hRmFzb1xCdXJraW5hRmFzby50eHQJCitDOlxkaXZhXEFmcmljYVxCdXJ1bmRpXEJ1cnVuZGkudHh0CQorQzpcZGl2YVxBZnJpY2FcQ2FwZVZlcmRlXENhcGVWZXJkZS50eHQJCitDOlxkaXZhXEFmcmljYVxDZW50cmFsQWZyaWNhblJlcHVibGljXENlbnRyYWwgQWZyaWNhbiBSZXB1YmxpYy50eHQKK0M6XGRpdmFcQWZyaWNhXENoYWRcQ2hhZC50eHQKK0M6XGRpdmFcQWZyaWNhXENvbW9yb3NcQ29tb3Jvcy50eHQKK0M6XGRpdmFcQWZyaWNhXENvbmdvXENvbmdvLnR4dAorQzpcZGl2YVxBZnJpY2FcRWd5cHRcRWd5cHQudHh0CitDOlxkaXZhXEFmcmljYVxFcXVhdG9yaWFsR3VpbmVhXEVxdWF0b3JpYWxHdWluZWEudHh0CitDOlxkaXZhXEFmcmljYVxFcml0cmVhXEVyaXRyZWEudHh0CitDOlxkaXZhXEFmcmljYVxHYWJvblxHYWJvbi50eHQKK0M6XGRpdmFcQWZyaWNhXEdhbWJpYVxHYW1iaWEudHh0CitDOlxkaXZhXEFmcmljYVxHaGFuYVxHaGFuYS50eHQKK0M6XGRpdmFcQWZyaWNhXEd1aW5lYVxHdWluZWEudHh0CitDOlxkaXZhXEFmcmljYVxHdWluZWFCaXNzYXVcR3VpbmVhQmlzc2F1LnR4dAorQzpcZGl2YVxBZnJpY2FcSXZvcnlDb2FzdFxJdm9yeUNvYXN0LnR4dAorQzpcZGl2YVxBZnJpY2FcS2VueWFcS2VueWEudHh0CitDOlxkaXZhXEFmcmljYVxMZXNvdGhvXExlc290aG8udHh0CitDOlxkaXZhXEFmcmljYVxMaWJlcmlhXExpYmVyaWEudHh0CitDOlxkaXZhXEFmcmljYVxMaWJ5YVxMaWJ5YS50eHQKK0M6XGRpdmFcQWZyaWNhXE1hZGFnYXNjYXJcTWFkYWdhc2Nhci50eHQKK0M6XGRpdmFcQWZyaWNhXE1hbGF3aVxNYWxhd2kudHh0CitDOlxkaXZhXEFmcmljYVxNYXVyaXRpdXNcTWF1cml0aXVzLnR4dAorQzpcZGl2YVxBZnJpY2FcTW9yb2Njb1xNb3JvY2NvLnR4dAorQzpcZGl2YVxBZnJpY2FcTW96YW1iaXF1ZVxNb3phbWJpcXVlLnR4dAorQzpcZGl2YVxBZnJpY2FcTmFtaWJpYVxOYW1pYmlhLnR4dAorQzpcZGl2YVxBZnJpY2FcTmlnZXJcTmlnZXIudHh0CitDOlxkaXZhXEFmcmljYVxOaWdlcmlhXE5pZ2VyaWEudHh0CitDOlxkaXZhXEFmcmljYVxQYXB1YU5ld0d1aW5lYVxQYXB1YU5ld0d1aW5lYS50eHQKK0M6XGRpdmFcQWZyaWNhXFJ3YW5kYVxSd2FuZGEudHh0CitDOlxkaXZhXEFmcmljYVxTYW9Ub21lUHJpbmNpcGVcU2FvVG9tZVByaW5jaXBlLnR4dAorQzpcZGl2YVxBZnJpY2FcU2VuZWdhbFxTZW5lZ2FsLnR4dAorQzpcZGl2YVxBZnJpY2FcU2V5Y2hlbGxlc1xTZXljaGVsbGVzLnR4dAorQzpcZGl2YVxBZnJpY2FcU2llcnJhTGVvbmVcU2llcnJhTGVvbmUudHh0CitDOlxkaXZhXEFmcmljYVxTb21hbGlhXFNvbWFsaWEudHh0CitDOlxkaXZhXEFmcmljYVxTb3V0aEFmcmljYVxTb3V0aEFmcmljYS50eHQKK0M6XGRpdmFcQWZyaWNhXFN1ZGFuXFN1ZGFuLnR4dAorQzpcZGl2YVxBZnJpY2FcVGFuemFuaWFcVGFuemFuaWEudHh0CitDOlxkaXZhXEFmcmljYVxUb2dvXFRvZ28udHh0CitDOlxkaXZhXEFmcmljYVxUdW5pc2lhXFR1bmlzaWEudHh0CitDOlxkaXZhXEFmcmljYVxVZ2FuZGFcVWdhbmRhLnR4dAorQzpcZGl2YVxBZnJpY2FcWmFtYmlhXFphbWJpYS50eHQKK0M6XGRpdmFcTWlkRWFzdFxCYWhyYWluXEJhaHJhaW4udHh0CitDOlxkaXZhXE1pZEVhc3RcSXJha1xJcmFrLnR4dAorQzpcZGl2YVxNaWRFYXN0XElyYW5cSXJhbi50eHQKK0M6XGRpdmFcTWlkRWFzdFxKb3JkYW5cSm9yZGFuLnR4dAorQzpcZGl2YVxNaWRFYXN0XEt1d2FpdFxLdXdhaXQudHh0CitDOlxkaXZhXE1pZEVhc3RcTGViYW5vblxMZWJhbm9uLnR4dAorQzpcZGl2YVxNaWRFYXN0XE9tYW5cT21hbi50eHQKK0M6XGRpdmFcTWlkRWFzdFxRYXRhclxRYXRhci50eHQKK0M6XGRpdmFcTWlkRWFzdFxTYXVkaUFyYWJpYVxTYXVkaUFyYWJpYS50eHQKK0M6XGRpdmFcTWlkRWFzdFxTeXJpYVxTeXJpYS50eHQKK0M6XGRpdmFcTWlkRWFzdFxVbml0ZWRBcmFiRW1pcmF0ZXNcVW5pdGVkQXJhYkVtaXJhdGVzLnR4dAorQzpcZGl2YVxNaWRFYXN0XFllbWVuXFllbWVuLnR4dAorQzpcZGl2YVxSZXN0T2ZBc2lhXEFmZ2hhbmlzdGFuXEFmZ2hhbmlzdGFuLnR4dAorQzpcZGl2YVxSZXN0T2ZBc2lhXEFybWVuaWFcQXJtZW5pYS50eHQKK0M6XGRpdmFcUmVzdE9mQXNpYVxBemVyYmFpamFuXEF6ZXJiYWlqYW4udHh0CitDOlxkaXZhXFJlc3RPZkFzaWFcS2F6YWtoc3RhblxLYXpha2hzdGFuLnR4dAorQzpcZGl2YVxSZXN0T2ZBc2lhXEt5cmd5enN0YW5cS3lyZ3l6c3Rhbi50eHQKK0M6XGRpdmFcUmVzdE9mQXNpYVxNb25nb2xpYVxNb25nb2xpYS50eHQKK0M6XGRpdmFcUmVzdE9mQXNpYVxQYWtpc3RhblxQYWtpc3Rhbi50eHQKK0M6XGRpdmFcUmVzdE9mQXNpYVxUYWppa2lzdGFuXFRhamlraXN0YW4udHh0CitDOlxkaXZhXFJlc3RPZkFzaWFcVHVya2V5XFR1cmtleS50eHQKK0M6XGRpdmFcUmVzdE9mQXNpYVxUdXJrbWVuaXN0YW5cVHVya21lbmlzdGFuLnR4dAorQzpcZGl2YVxSZXN0T2ZBc2lhXFV6YmVraXN0YW5cVXpiZWtpc3Rhbi50eHQKK0M6XGRpdmFcTm9ydGhBbWVyaWNhXE1leGljb1xNZXhpY28udHh0CitDOlxkaXZhXE5vcnRoQW1lcmljYVxVU0FcVVNBX0dST1VQRUQudHh0CitDOlxkaXZhXE5vcnRoQW1lcmljYVxQdWVydG9SaWNvXFB1ZXJ0b1JpY28udHh0CitDOlxkaXZhXFNvdXRoQW1lcmljYVxBcmdlbnRpbmFcQXJnZW50aW5hLnR4dAorQzpcZGl2YVxTb3V0aEFtZXJpY2FcQm9saXZpYVxCb2xpdmlhLnR4dAorQzpcZGl2YVxTb3V0aEFtZXJpY2FcQnJhemlsXEJyYXppbC50eHQKK0M6XGRpdmFcU291dGhBbWVyaWNhXENoaWxlXENoaWxlLnR4dAorQzpcZGl2YVxTb3V0aEFtZXJpY2FcQ29sb21iaWFcQ29sb21iaWEudHh0CitDOlxkaXZhXFNvdXRoQW1lcmljYVxFY3VhZG9yXEVjdWFkb3IudHh0CitDOlxkaXZhXFNvdXRoQW1lcmljYVxHdXlhbmFcR3V5YW5hLnR4dAorQzpcZGl2YVxTb3V0aEFtZXJpY2FcUGFyYWd1YXlcUGFyYWd1YXkudHh0CitDOlxkaXZhXFNvdXRoQW1lcmljYVxQZXJ1XFBlcnUudHh0CitDOlxkaXZhXFNvdXRoQW1lcmljYVxTdXJpbmFtZVxTdXJpbmFtZS50eHQKK0M6XGRpdmFcU291dGhBbWVyaWNhXFVydWd1YXlcVXJ1Z3VheS50eHQKK0M6XGRpdmFcU291dGhBbWVyaWNhXFZlbmV6dWVsYVxWZW5lenVlbGEudHh0CitDOlxkaXZhXFNvdXRoQXNpYVxCYW5nbGFkZXNoXEJhbmdsYWRlc2gudHh0CitDOlxkaXZhXFNvdXRoQXNpYVxCaHV0YW5cQmh1dGFuLnR4dAorQzpcZGl2YVxTb3V0aEFzaWFcQnJ1bmVpXEJydW5laS50eHQKK0M6XGRpdmFcU291dGhBc2lhXENhbWJvZGlhXENhbWJvZGlhLnR4dAorQzpcZGl2YVxTb3V0aEFzaWFcQ2hpbmFcQ2hpbmEudHh0CitDOlxkaXZhXFNvdXRoQXNpYVxJbmRpYVxJbmRpYS50eHQKK0M6XGRpdmFcU291dGhBc2lhXEluZG9uZXNpYVxJbmRvbmVzaWEudHh0CitDOlxkaXZhXFNvdXRoQXNpYVxKYXBhblxKYXBhbi50eHQKK0M6XGRpdmFcU291dGhBc2lhXExhb3NcTGFvcy50eHQKK0M6XGRpdmFcU291dGhBc2lhXE1hY2F1XE1hY2F1LnR4dAorQzpcZGl2YVxTb3V0aEFzaWFcTmVwYWxcTmVwYWwudHh0CitDOlxkaXZhXFNvdXRoQXNpYVxOb3J0aEtvcmVhXE5vcnRoS29yZWEudHh0CitDOlxkaXZhXFNvdXRoQXNpYVxQaGlsaXBwaW5lc1xQaGlsaXBwaW5lcy50eHQKK0M6XGRpdmFcU291dGhBc2lhXFNpbmdhcG9yZVxTaW5nYXBvcmUudHh0CitDOlxkaXZhXFNvdXRoQXNpYVxTb3V0aEtvcmVhXFNvdXRoS29yZWEudHh0CitDOlxkaXZhXFNvdXRoQXNpYVxUaGFpbGFuZFxUaGFpbGFuZC50eHQKK0M6XGRpdmFcU291dGhBc2lhXFZpZXRuYW1cVmlldG5hbS50eHQKKworCisKKworCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3RhcmdldHMvQ291bnRyaWVzTGlnaHQudHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy90YXJnZXRzL0NvdW50cmllc0xpZ2h0LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YmE2ZjI3Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy90YXJnZXRzL0NvdW50cmllc0xpZ2h0LnR4dApAQCAtMCwwICsxLDE4NCBAQAorI01JU1NJTkcgQ09VTlRSSUVTCisjQzpcc2hhcGVGaWxlc1xjYW5hZGFcQ2FuYWRhU29ydGVkLnR4dAorI0M6XHNoYXBlRmlsZXNcQXVzdHJhbGlhXEF1c3RyYWxpYVNvcnRlZC50eHQKKyNDOlxzaGFwZUZpbGVzXFphaXJlXFphaXJlU29ydGVkLnR4dAorI0M6XHNoYXBlRmlsZXNcWmltYmFid2VcWmltYmFid2VTb3J0ZWQudHh0CisjQzpcc2hhcGVGaWxlc1xCZWxhcnVzXEJlbGFydXNTb3J0ZWQudHh0CisjQzpcc2hhcGVGaWxlc1xCZWxpemVcQmVsaXplU29ydGVkLnR4dAorI0M6XHNoYXBlRmlsZXNcQm90c3dhbmFcQm90c3dhbmFTb3J0ZWQudHh0CisjQzpcc2hhcGVGaWxlc1xDYW1lcm9vblxDYW1lcm9vblNvcnRlZC50eHQKKyNDOlxzaGFwZUZpbGVzXENvc3RhUmljYVxDb3N0YVJpY2FTb3J0ZWQudHh0CisjQzpcc2hhcGVGaWxlc1xFbFNhbHZhZG9yXEVsU2FsdmFkb3JTb3J0ZWQudHh0CisjQzpcc2hhcGVGaWxlc1xFc3RvbmlhXEVzdG9uaWFTb3J0ZWQudHh0CisjQzpcc2hhcGVGaWxlc1xFdGhpb3BpYVxFdGhpb3BpYVNvcnRlZC50eHQKKyNDOlxzaGFwZUZpbGVzXEd1YXRlbWFsYVxHdWF0ZW1hbGFTb3J0ZWQudHh0CisjQzpcc2hhcGVGaWxlc1xIb25kdXJhc1xIb25kdXJhc1NvcnRlZC50eHQKKyNDOlxzaGFwZUZpbGVzXExhdHZpYVxMYXR2aWFTb3J0ZWQudHh0CisjQzpcc2hhcGVGaWxlc1xMaXRodWFuaWFcTGl0aHVhbmlhU29ydGVkLnR4dAorI0M6XHNoYXBlRmlsZXNcTWFsaVxNYWxpU29ydGVkLnR4dAorI0M6XHNoYXBlRmlsZXNcTWF1cml0YW5pYVxNYXVyaXRhbmlhU29ydGVkLnR4dAorI0M6XHNoYXBlRmlsZXNcTmljYXJhZ3VhXE5pY2FyYWd1YVNvcnRlZC50eHQKKyNDOlxzaGFwZUZpbGVzXFBhbmFtYVxQYW5hbWFTb3J0ZWQudHh0CisjIEVVUk9QRQorQzpcZGl2YVxFdXJvcGVcQUxCQU5JQVxBTEJBTklBLnR4dAorQzpcZGl2YVxFdXJvcGVcQU5ET1JSQVxBTkRPUlJBLnR4dAorI0M6XGRpdmFcRXVyb3BlXEFVU1RSSUFcQVVTVFJJQS50eHQKKyNDOlxkaXZhXEV1cm9wZVxCRUxHSVVNXEJFTEdJVU0udHh0CisjQzpcZGl2YVxFdXJvcGVcQlVMR0FSSUFcQlVMR0FSSUEudHh0CisjQzpcZGl2YVxFdXJvcGVcQk9TTklBIEFORCBIRVJaRUdPVklOQVxCT1NOSUEgQU5EIEhFUlpFR09WSU5BLnR4dAorI0M6XGRpdmFcRXVyb3BlXFNXSVRaRVJMQU5EXFNXSVRaRVJMQU5ELnR4dAorI0M6XGRpdmFcRXVyb3BlXENaRUNIIFJFUFVCTElDXENaRUNIIFJFUFVCTElDLnR4dAorI0M6XGRpdmFcRXVyb3BlXEdFUk1BTllcR0VSTUFOWS50eHQKKyNDOlxkaXZhXEV1cm9wZVxERU5NQVJLXERFTk1BUksudHh0CisjQzpcZGl2YVxFdXJvcGVcU1BBSU5cU1BBSU4udHh0CisjQzpcZGl2YVxFdXJvcGVcRklOTEFORFxGSU5MQU5ELnR4dAorI0M6XGRpdmFcRXVyb3BlXEZSQU5DRVxGUkFOQ0UudHh0CisjI0M6XGRpdmFcRXVyb3BlXEZBUk9FIElTTEFORFNcRkFST0UgSVNMQU5EUy50eHQKKyMjQzpcZGl2YVxFdXJvcGVcR1JFQVQgQlJJVEFJTlxHUkVBVCBCUklUQUlOLnR4dAorI0M6XGRpdmFcRXVyb3BlXEdSRUVDRVxHUkVFQ0UudHh0CisjQzpcZGl2YVxFdXJvcGVcQ1JPQVRJQVxDUk9BVElBLnR4dAorI0M6XGRpdmFcRXVyb3BlXEhVTkdBUllcSFVOR0FSWS50eHQKKyNDOlxkaXZhXEV1cm9wZVxJUkVMQU5EXElSRUxBTkQudHh0CisjQzpcZGl2YVxFdXJvcGVcSUNFTEFORFxJQ0VMQU5ELnR4dAorI0M6XGRpdmFcRXVyb3BlXElUQUxZXElUQUxZLnR4dAorI0M6XGRpdmFcRXVyb3BlXExJRUNIU1RFTlNURUlOXExJRUNIU1RFTlNURUlOLnR4dAorI0M6XGRpdmFcRXVyb3BlXExVWEVNQk9VUkdcTFVYRU1CT1VSRy50eHQKKyNDOlxkaXZhXEV1cm9wZVxORVRIRVJMQU5EU1xORVRIRVJMQU5EUy50eHQKKyNDOlxkaXZhXEV1cm9wZVxOT1JXQVlcTk9SV0FZLnR4dAorI0M6XGRpdmFcRXVyb3BlXFBPTEFORFxQT0xBTkQudHh0CisjQzpcZGl2YVxFdXJvcGVcUE9SVFVHQUxcUE9SVFVHQUwudHh0CisjQzpcZGl2YVxFdXJvcGVcUk9NQU5JQVxST01BTklBLnR4dAorI0M6XGRpdmFcZ3JvdXBlZFxSVVNcUlVTX0dST1VQRUQudHh0CisjQzpcZGl2YVxFdXJvcGVcU0FOIE1BUklOT1xTQU4gTUFSSU5PLnR4dAorI0M6XGRpdmFcRXVyb3BlXFlVR09TTEFWSUFcWVVHT1NMQVZJQS50eHQKKyNDOlxkaXZhXEV1cm9wZVxTTE9WRU5JQVxTTE9WRU5JQS50eHQKKyNDOlxkaXZhXEV1cm9wZVxTV0VERU5cU1dFREVOLnR4dAorI0M6XGRpdmFcRXVyb3BlXFVOSVRFRCBLSU5HRE9NXFVOSVRFRCBLSU5HRE9NLnR4dAorIyNDOlxkaXZhXFJlc3RPZkFzaWFcQWZnaGFuaXN0YW5cQWZnaGFuaXN0YW4udHh0CisjI0M6XGRpdmFcUmVzdE9mQXNpYVxBcm1lbmlhXEFybWVuaWEudHh0CisjI0M6XGRpdmFcQWZyaWNhXEFsZ2VyaWFcQWxnZXJpYS50eHQKKyMjQzpcZGl2YVxBZnJpY2FcQW5nb2xhXEFuZ29sYS50eHQKKyMjQzpcZGl2YVxBZnJpY2FcVWdhbmRhXFVnYW5kYS50eHQKKyMjQzpcZGl2YVxNaWRFYXN0XElyYWtcSXJhay50eHQKKyMjQzpcZGl2YVxNaWRFYXN0XElyYW5cSXJhbi50eHQKKyNDOlxkaXZhXE5vcnRoQW1lcmljYVxNZXhpY29cTWV4aWNvLnR4dAorIyNDOlxkaXZhXFNvdXRoQW1lcmljYVxCcmF6aWxcQnJhemlsLnR4dAorIyNDOlxkaXZhXFNvdXRoQW1lcmljYVxBcmdlbnRpbmFcQXJnZW50aW5hLnR4dAorIyNDOlxkaXZhXFNvdXRoQW1lcmljYVxCb2xpdmlhXEJvbGl2aWEudHh0CisjI0M6XGRpdmFcU291dGhBbWVyaWNhXFVydWd1YXlcVXJ1Z3VheS50eHQKKyMjQzpcZGl2YVxTb3V0aEFtZXJpY2FcVmVuZXp1ZWxhXFZlbmV6dWVsYS50eHQKKyMjQzpcZGl2YVxTb3V0aEFzaWFcSmFwYW5cSmFwYW4udHh0CisjI0M6XGRpdmFcU291dGhBc2lhXExhb3NcTGFvcy50eHQKKyMjQzpcZGl2YVxTb3V0aEFzaWFcVmlldG5hbVxWaWV0bmFtLnR4dAorIyBBTEwgT0YgQUZSSUNBCisjI0M6XGRpdmFcQWZyaWNhXEFsZ2VyaWFcQWxnZXJpYS50eHQKKyMjQzpcZGl2YVxBZnJpY2FcQW5nb2xhXEFuZ29sYS50eHQKKyMjQzpcZGl2YVxBZnJpY2FcQmVuaW5cQmVuaW4udHh0CisjI0M6XGRpdmFcQWZyaWNhXEJ1cmtpbmFGYXNvXEJ1cmtpbmFGYXNvLnR4dAkKKyMjQzpcZGl2YVxBZnJpY2FcQnVydW5kaVxCdXJ1bmRpLnR4dAkKKyMjQzpcZGl2YVxBZnJpY2FcQ2FwZVZlcmRlXENhcGVWZXJkZS50eHQJCisjI0M6XGRpdmFcQWZyaWNhXENlbnRyYWxBZnJpY2FuUmVwdWJsaWNcQ2VudHJhbAorIyNDOlxkaXZhXEFmcmljYVxDaGFkXENoYWQudHh0CisjI0M6XGRpdmFcQWZyaWNhXENvbW9yb3NcQ29tb3Jvcy50eHQKKyMjQzpcZGl2YVxBZnJpY2FcQ29uZ29cQ29uZ28udHh0CisjI0M6XGRpdmFcQWZyaWNhXEVneXB0XEVneXB0LnR4dAorIyNDOlxkaXZhXEFmcmljYVxFcXVhdG9yaWFsR3VpbmVhXEVxdWF0b3JpYWxHdWluZWEudHh0CisjI0M6XGRpdmFcQWZyaWNhXEVyaXRyZWFcRXJpdHJlYS50eHQKKyMjQzpcZGl2YVxBZnJpY2FcR2Fib25cR2Fib24udHh0CisjI0M6XGRpdmFcQWZyaWNhXEdhbWJpYVxHYW1iaWEudHh0CisjI0M6XGRpdmFcQWZyaWNhXEdoYW5hXEdoYW5hLnR4dAorIyMjQzpcZGl2YVxBZnJpY2FcR2xvcmlvc29Jc2xhbmRzXEdsb3Jpb3NvSXNsYW5kcy50eHQKKyMjQzpcZGl2YVxBZnJpY2FcR3VpbmVhXEd1aW5lYS50eHQKKyMjQzpcZGl2YVxBZnJpY2FcR3VpbmVhQmlzc2F1XEd1aW5lYUJpc3NhdS50eHQKKyMjQzpcZGl2YVxBZnJpY2FcSXZvcnlDb2FzdFxJdm9yeUNvYXN0LnR4dAorIyNDOlxkaXZhXEFmcmljYVxLZW55YVxLZW55YS50eHQKKyMjQzpcZGl2YVxBZnJpY2FcTGVzb3Rob1xMZXNvdGhvLnR4dAorIyNDOlxkaXZhXEFmcmljYVxMaWJlcmlhXExpYmVyaWEudHh0CisjI0M6XGRpdmFcQWZyaWNhXExpYnlhXExpYnlhLnR4dAorIyNDOlxkaXZhXEFmcmljYVxNYWRhZ2FzY2FyXE1hZGFnYXNjYXIudHh0CisjI0M6XGRpdmFcQWZyaWNhXE1hbGF3aVxNYWxhd2kudHh0CisjQzpcZGl2YVxBZnJpY2FcTWFsaVxNYWxpLnR4dAorIyNDOlxkaXZhXEFmcmljYVxNYXVyaXRpdXNcTWF1cml0aXVzLnR4dAorIyNDOlxkaXZhXEFmcmljYVxNb3JvY2NvXE1vcm9jY28udHh0CisjI0M6XGRpdmFcQWZyaWNhXE1vemFtYmlxdWVcTW96YW1iaXF1ZS50eHQKKyMjQzpcZGl2YVxBZnJpY2FcTmFtaWJpYVxOYW1pYmlhLnR4dAorIyNDOlxkaXZhXEFmcmljYVxOaWdlclxOaWdlci50eHQKKyMjQzpcZGl2YVxBZnJpY2FcTmlnZXJpYVxOaWdlcmlhLnR4dAorIyNDOlxkaXZhXEFmcmljYVxQYXB1YU5ld0d1aW5lYVxQYXB1YU5ld0d1aW5lYS50eHQKKyMjQzpcZGl2YVxBZnJpY2FcUndhbmRhXFJ3YW5kYS50eHQKKyMjQzpcZGl2YVxBZnJpY2FcU2FvVG9tZVByaW5jaXBlXFNhb1RvbWVQcmluY2lwZS50eHQKKyMjQzpcZGl2YVxBZnJpY2FcU2VuZWdhbFxTZW5lZ2FsLnR4dAorIyNDOlxkaXZhXEFmcmljYVxTZXljaGVsbGVzXFNleWNoZWxsZXMudHh0CisjI0M6XGRpdmFcQWZyaWNhXFNpZXJyYUxlb25lXFNpZXJyYUxlb25lLnR4dAorIyNDOlxkaXZhXEFmcmljYVxTb21hbGlhXFNvbWFsaWEudHh0CisjI0M6XGRpdmFcQWZyaWNhXFNvdXRoQWZyaWNhXFNvdXRoQWZyaWNhLnR4dAorIyNDOlxkaXZhXEFmcmljYVxTdWRhblxTdWRhbi50eHQKKyMjQzpcZGl2YVxBZnJpY2FcVGFuemFuaWFcVGFuemFuaWEudHh0CisjI0M6XGRpdmFcQWZyaWNhXFRvZ29cVG9nby50eHQKKyMjQzpcZGl2YVxBZnJpY2FcVHVuaXNpYVxUdW5pc2lhLnR4dAorIyNDOlxkaXZhXEFmcmljYVxVZ2FuZGFcVWdhbmRhLnR4dAorIyMjQzpcZGl2YVxBZnJpY2FcWmFpcmVcWmFpcmUudHh0CisjI0M6XGRpdmFcQWZyaWNhXFphbWJpYVxaYW1iaWEudHh0CisjIFJFU1QgT0YgQVNJQQorIyNDOlxkaXZhXFJlc3RPZkFzaWFcQWZnaGFuaXN0YW5cQWZnaGFuaXN0YW4udHh0CisjI0M6XGRpdmFcUmVzdE9mQXNpYVxBcm1lbmlhXEFybWVuaWEudHh0CisjI0M6XGRpdmFcUmVzdE9mQXNpYVxBemVyYmFpamFuXEF6ZXJiYWlqYW4udHh0CisjI0M6XGRpdmFcUmVzdE9mQXNpYVxLYXpha2hzdGFuXEthemFraHN0YW4udHh0CisjI0M6XGRpdmFcUmVzdE9mQXNpYVxLeXJneXpzdGFuXEt5cmd5enN0YW4udHh0CisjIyNDOlxkaXZhXFJlc3RPZkFzaWFcTWFjZWRvbmlhXE1hY2Vkb25pYS50eHQKKyMjQzpcZGl2YVxSZXN0T2ZBc2lhXE1vbGRvdmFcTW9sZG92YS50eHQKKyMjQzpcZGl2YVxSZXN0T2ZBc2lhXE1vbmdvbGlhXE1vbmdvbGlhLnR4dAorI0M6XGRpdmFcUmVzdE9mQXNpYVxQYWtpc3RhblxQYWtpc3Rhbi50eHQKKyMjQzpcZGl2YVxSZXN0T2ZBc2lhXFRhamlraXN0YW5cVGFqaWtpc3Rhbi50eHQKKyMjQzpcZGl2YVxSZXN0T2ZBc2lhXFR1cmtleVxUdXJrZXkudHh0CisjI0M6XGRpdmFcUmVzdE9mQXNpYVxUdXJrbWVuaXN0YW5cVHVya21lbmlzdGFuLnR4dAorIyNDOlxkaXZhXFJlc3RPZkFzaWFcVXpiZWtpc3RhblxVemJla2lzdGFuLnR4dAorIyBNSUQgRUFTVCBSRUdJT04KKyMjQzpcZGl2YVxNaWRFYXN0XEJhaHJhaW5cQmFocmFpbi50eHQKKyMjQzpcZGl2YVxNaWRFYXN0XElyYWtcSXJhay50eHQKKyMjQzpcZGl2YVxNaWRFYXN0XElyYW5cSXJhbi50eHQKKyMjQzpcZGl2YVxNaWRFYXN0XEpvcmRhblxKb3JkYW4udHh0CisjI0M6XGRpdmFcTWlkRWFzdFxLdXdhaXRcS3V3YWl0LnR4dAorIyNDOlxkaXZhXE1pZEVhc3RcTGViYW5vblxMZWJhbm9uLnR4dAorIyNDOlxkaXZhXE1pZEVhc3RcT21hblxPbWFuLnR4dAorIyNDOlxkaXZhXE1pZEVhc3RcUWF0YXJcUWF0YXIudHh0CisjI0M6XGRpdmFcTWlkRWFzdFxTYXVkaUFyYWJpYVxTYXVkaUFyYWJpYS50eHQKKyMjQzpcZGl2YVxNaWRFYXN0XFN5cmlhXFN5cmlhLnR4dAorIyNDOlxkaXZhXE1pZEVhc3RcVW5pdGVkQXJhYkVtaXJhdGVzXFVuaXRlZEFyYWJFbWlyYXRlcy50eHQKKyMjQzpcZGl2YVxNaWRFYXN0XFllbWVuXFllbWVuLnR4dAorIyBOT1JUSCBBTkQgU09VVEggQU1FUklDQQorI0M6XGRpdmFcTm9ydGhBbWVyaWNhXE1leGljb1xNZXhpY28udHh0CisjI0M6XGRpdmFcTm9ydGhBbWVyaWNhXFVTQVxVU0EudHh0CisjQzpcZGl2YVxOb3J0aEFtZXJpY2FcUHVlcnRvUmljb1xQdWVydG9SaWNvLnR4dAorIyNDOlxkaXZhXFNvdXRoQW1lcmljYVxBcmdlbnRpbmFcQXJnZW50aW5hLnR4dAorIyNDOlxkaXZhXFNvdXRoQW1lcmljYVxCb2xpdmlhXEJvbGl2aWEudHh0CisjI0M6XGRpdmFcU291dGhBbWVyaWNhXEJyYXppbFxCcmF6aWwudHh0CisjI0M6XGRpdmFcU291dGhBbWVyaWNhXENoaWxlXENoaWxlLnR4dAorIyNDOlxkaXZhXFNvdXRoQW1lcmljYVxDb2xvbWJpYVxDb2xvbWJpYS50eHQKKyMjQzpcZGl2YVxTb3V0aEFtZXJpY2FcRWN1YWRvclxFY3VhZG9yLnR4dAorIyMjQzpcZGl2YVxTb3V0aEFtZXJpY2FcRmF1bGtsYW5kSXNsYW5kc1xGYXVsa2xhbmRJc2xhbmRzLnR4dAorIyNDOlxkaXZhXFNvdXRoQW1lcmljYVxHdXlhbmFcR3V5YW5hLnR4dAorIyNDOlxkaXZhXFNvdXRoQW1lcmljYVxQYXJhZ3VheVxQYXJhZ3VheS50eHQKKyMjQzpcZGl2YVxTb3V0aEFtZXJpY2FcUGVydVxQZXJ1LnR4dAorIyNDOlxkaXZhXFNvdXRoQW1lcmljYVxTdXJpbmFtZVxTdXJpbmFtZS50eHQKKyMjQzpcZGl2YVxTb3V0aEFtZXJpY2FcVXJ1Z3VheVxVcnVndWF5LnR4dAorIyNDOlxkaXZhXFNvdXRoQW1lcmljYVxWZW5lenVlbGFcVmVuZXp1ZWxhLnR4dAorIyBTT1VUSCBBU0lBCisjI0M6XGRpdmFcU291dGhBc2lhXEJhbmdsYWRlc2hcQmFuZ2xhZGVzaC50eHQKKyMjQzpcZGl2YVxTb3V0aEFzaWFcQmh1dGFuXEJodXRhbi50eHQKKyMjQzpcZGl2YVxTb3V0aEFzaWFcQnJ1bmVpXEJydW5laS50eHQKKyMjQzpcZGl2YVxTb3V0aEFzaWFcQ2FtYm9kaWFcQ2FtYm9kaWEudHh0CisjI0M6XGRpdmFcU291dGhBc2lhXENoaW5hXENoaW5hLnR4dAorIyNDOlxkaXZhXFNvdXRoQXNpYVxJbmRpYVxJbmRpYS50eHQKKyMjQzpcZGl2YVxTb3V0aEFzaWFcSW5kb25lc2lhXEluZG9uZXNpYS50eHQKKyMjQzpcZGl2YVxTb3V0aEFzaWFcSmFwYW5cSmFwYW4udHh0CisjI0M6XGRpdmFcU291dGhBc2lhXExhb3NcTGFvcy50eHQKKyMjQzpcZGl2YVxTb3V0aEFzaWFcTWFjYXVcTWFjYXUudHh0CisjIyNDOlxkaXZhXFNvdXRoQXNpYVxNeWFubWFyXE15YW5tYXIudHh0CisjI0M6XGRpdmFcU291dGhBc2lhXE5lcGFsXE5lcGFsLnR4dAorIyNDOlxkaXZhXFNvdXRoQXNpYVxOb3J0aEtvcmVhXE5vcnRoS29yZWEudHh0CisjI0M6XGRpdmFcU291dGhBc2lhXFBoaWxpcHBpbmVzXFBoaWxpcHBpbmVzLnR4dAorIyNDOlxkaXZhXFNvdXRoQXNpYVxTaW5nYXBvcmVcU2luZ2Fwb3JlLnR4dAorIyNDOlxkaXZhXFNvdXRoQXNpYVxTb3V0aEtvcmVhXFNvdXRoS29yZWEudHh0CisjI0M6XGRpdmFcU291dGhBc2lhXFRoYWlsYW5kXFRoYWlsYW5kLnR4dAorIyNDOlxkaXZhXFNvdXRoQXNpYVxWaWV0bmFtXFZpZXRuYW0udHh0CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3RhcmdldHMvRXVyb3BlQ291bnRyaWVzLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvdGFyZ2V0cy9FdXJvcGVDb3VudHJpZXMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmViZDVlMDYKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3RhcmdldHMvRXVyb3BlQ291bnRyaWVzLnR4dApAQCAtMCwwICsxLDQyIEBACisjVU5DT01NRU5UIFRIRSBORVhUIFNJTkdMRSBMSU5FIE9OTFkgQkVGT1JFIFJVTiBFdXJvcGVEYXRhQ2xlYW5lciA6CisjQzpcRXVyb3BlRGF0YTIwMDdcRXVyb3BlVU5cVU5kYXRhU2hwXEV1cm9wZS50eHQKKyNVTkNPTU1FTlQgVEhFIE5FWFQgU0lOR0xFIExJTkUgT05MWSBCRUZPUkUgUlVOIEV1cm9wZURhdGFGb3JtYXR0ZXIgOgorI0M6XEV1cm9wZURhdGEyMDA3XEV1cm9wZVVOXFVOZGF0YVNocFxFdXJvcGVTb3J0ZWQyLnR4dAorI1VOQ09NTUVOVCBUSEUgTkVYVCBTSU5HTEUgTElORSBPTkxZIEJFRk9SRSBSVU4gUnVzc2lhRGF0YUNsZWFuZXIgOgorI0M6XEV1cm9wZURhdGEyMDA3XFJ1c3NpYVxSdXNzaWEudHh0CisjVU5DT01NRU5UIFRIRSBORVhUIFNJTkdMRSBMSU5FIE9OTFkgQkVGT1JFIFJVTiBSdXNzaWFEYXRhQ29udmVydGVyIEFORCBSdXNzaWFEYXRhRXh0cmFjdG9yIDoKK0M6XEV1cm9wZURhdGEyMDA3XFJ1c3NpYVxSdXNzaWFTb3J0ZWQudHh0CisjVU5DT01NRU5UIEFMTCBUSEUgRk9MTE9XSU5HIExJTkVTIEJFRk9SRSBSVU5OSU5HIEV1cm9wZURhdGFFeHRyYWN0b3IsIENPTU1FTlQgT1RIRVJXSVNFIDoKKyMjQzpcc3RlbUlJXG9yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eVxkYXRhTWlncmF0aW9uXG91dHB1dFxBTEJcQUxCLnR4dAorI0M6XHN0ZW1JSVxvcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHlcZGF0YU1pZ3JhdGlvblxvdXRwdXRcQU5EXEFORC50eHQKKyNDOlxzdGVtSUlcb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5XGRhdGFNaWdyYXRpb25cb3V0cHV0XEFVVFxBVVQudHh0CisjQzpcc3RlbUlJXG9yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eVxkYXRhTWlncmF0aW9uXG91dHB1dFxCRUxcQkVMLnR4dAorI0M6XHN0ZW1JSVxvcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHlcZGF0YU1pZ3JhdGlvblxvdXRwdXRcQkdSXEJHUi50eHQKKyNDOlxzdGVtSUlcb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5XGRhdGFNaWdyYXRpb25cb3V0cHV0XEJJSFxCSUgudHh0CisjQzpcc3RlbUlJXG9yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eVxkYXRhTWlncmF0aW9uXG91dHB1dFxDSEVcQ0hFLnR4dAorI0M6XHN0ZW1JSVxvcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHlcZGF0YU1pZ3JhdGlvblxvdXRwdXRcQ1pFXENaRS50eHQKKyNDOlxzdGVtSUlcb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5XGRhdGFNaWdyYXRpb25cb3V0cHV0XERFVVxERVUudHh0CisjQzpcc3RlbUlJXG9yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eVxkYXRhTWlncmF0aW9uXG91dHB1dFxETktcRE5LLnR4dAorI0M6XHN0ZW1JSVxvcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHlcZGF0YU1pZ3JhdGlvblxvdXRwdXRcRVNQXEVTUC50eHQKKyNDOlxzdGVtSUlcb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5XGRhdGFNaWdyYXRpb25cb3V0cHV0XEZJTlxGSU4udHh0CisjQzpcc3RlbUlJXG9yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eVxkYXRhTWlncmF0aW9uXG91dHB1dFxGUkFcRlJBLnR4dAorI0M6XHN0ZW1JSVxvcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHlcZGF0YU1pZ3JhdGlvblxvdXRwdXRcRlJPXEZSTy50eHQKKyNDOlxzdGVtSUlcb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5XGRhdGFNaWdyYXRpb25cb3V0cHV0XEdCUlxHQlIudHh0CisjQzpcc3RlbUlJXG9yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eVxkYXRhTWlncmF0aW9uXG91dHB1dFxHUkNcR1JDLnR4dAorI0M6XHN0ZW1JSVxvcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHlcZGF0YU1pZ3JhdGlvblxvdXRwdXRcSFJWXEhSVi50eHQKKyNDOlxzdGVtSUlcb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5XGRhdGFNaWdyYXRpb25cb3V0cHV0XEhVTlxIVU4udHh0CisjQzpcc3RlbUlJXG9yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eVxkYXRhTWlncmF0aW9uXG91dHB1dFxJUkxcSVJMLnR4dAorI0M6XHN0ZW1JSVxvcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHlcZGF0YU1pZ3JhdGlvblxvdXRwdXRcSVNMXElTTC50eHQKKyNDOlxzdGVtSUlcb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5XGRhdGFNaWdyYXRpb25cb3V0cHV0XElUQVxJVEEudHh0CisjQzpcc3RlbUlJXG9yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eVxkYXRhTWlncmF0aW9uXG91dHB1dFxMSUVcTElFLnR4dAorI0M6XHN0ZW1JSVxvcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHlcZGF0YU1pZ3JhdGlvblxvdXRwdXRcTFVYXExVWC50eHQKKyNDOlxzdGVtSUlcb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5XGRhdGFNaWdyYXRpb25cb3V0cHV0XE5MRFxOTEQudHh0CisjQzpcc3RlbUlJXG9yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eVxkYXRhTWlncmF0aW9uXG91dHB1dFxOT1JcTk9SLnR4dAorI0M6XHN0ZW1JSVxvcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHlcZGF0YU1pZ3JhdGlvblxvdXRwdXRcUE9MXFBPTC50eHQKKyNDOlxzdGVtSUlcb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5XGRhdGFNaWdyYXRpb25cb3V0cHV0XFBSVFxQUlQudHh0CisjQzpcc3RlbUlJXG9yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eVxkYXRhTWlncmF0aW9uXG91dHB1dFxST1VcUk9VLnR4dAorI0M6XHN0ZW1JSVxvcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHlcZGF0YU1pZ3JhdGlvblxvdXRwdXRcUlVTXFJVUy50eHQKKyNDOlxzdGVtSUlcb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5XGRhdGFNaWdyYXRpb25cb3V0cHV0XFNNUlxTTVIudHh0CisjQzpcc3RlbUlJXG9yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eVxkYXRhTWlncmF0aW9uXG91dHB1dFxTUkJcU1JCLnR4dAorI0M6XHN0ZW1JSVxvcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHlcZGF0YU1pZ3JhdGlvblxvdXRwdXRcU1ZOXFNWTi50eHQKKyNDOlxzdGVtSUlcb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5XGRhdGFNaWdyYXRpb25cb3V0cHV0XFNXRVxTV0UudHh0ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy90YXJnZXRzL0V1cm9wZU5hbWVzLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvdGFyZ2V0cy9FdXJvcGVOYW1lcy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGE1NDNhMwotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvdGFyZ2V0cy9FdXJvcGVOYW1lcy50eHQKQEAgLTAsMCArMSwyNTU3IEBACisyCToJRmlubm1hcmsKKzMJOglGaW5ubWFyaworNAk6CUZpbm5tYXJrCis1CToJRmlubm1hcmsKKzYJOglGaW5ubWFyaworNwk6CUZpbm5tYXJrCis4CToJRmlubm1hcmsKKzkJOglMYXBwaS9MYXBwbGFuZAorMTAJOglGaW5ubWFyaworMTEJOglUcm9tcworMTIJOglUcm9tcworMTMJOglUcm9tcworMTQJOglUcm9tcworMTUJOglUcm9tcworMTYJOglUcm9tcworMTcJOglUcm9tcworMTgJOglUcm9tcworMTkJOglUcm9tcworMjAJOglUcm9tcworMjEJOglUcm9tcworMjIJOglUcm9tcworMjMJOglUcm9tcworMjQJOglOb3JkbGFuZAorMjUJOglOb3JyYm90dGVuCisyNgk6CUlzbGFuZAorMjcJOglUcm9tcworMjgJOglOb3JkbGFuZAorMjkJOglOb3JkbGFuZAorMzAJOglUcm9tcworMzEJOglOb3JkbGFuZAorMzIJOglOb3JkbGFuZAorMzMJOglUcm9tcworMzQJOglOb3JkbGFuZAorMzUJOglOb3JkbGFuZAorMzYJOglOb3JkbGFuZAorMzcJOglOb3JkbGFuZAorMzgJOglJc2xhbmQKKzM5CToJTm9yZGxhbmQKKzQwCToJT3VsdS9VbGVhYm9yZworNDEJOglOb3JkbGFuZAorNDIJOglOb3JkbGFuZAorNDMJOglOb3JkbGFuZAorNDQJOglOb3JkbGFuZAorNDUJOglMYXBwaS9MYXBwbGFuZAorNDYJOglOb3JkbGFuZAorNDcJOglWhHN0ZXJib3R0ZW4KKzQ4CToJTm9ycmJvdHRlbgorNDkJOglOb3JkbGFuZAorNTAJOglOb3JkbGFuZAorNTEJOglOb3JyYm90dGVuCis1Mgk6CU5vcnJib3R0ZW4KKzUzCToJTm9yZGxhbmQKKzU0CToJTm9yZGxhbmQKKzU1CToJTm9ycmJvdHRlbgorNTYJOglJc2xhbmQKKzU3CToJTm9yZGxhbmQKKzU4CToJTm9ycmJvdHRlbgorNTkJOglOb3JyYm90dGVuCis2MAk6CUlzbGFuZAorNjEJOglOb3JyYm90dGVuCis2Mgk6CU5vcnJib3R0ZW4KKzYzCToJTm9ycmJvdHRlbgorNjQJOglOb3JyYm90dGVuCis2NQk6CU5vcnJib3R0ZW4KKzY2CToJT3VsdS9VbGVhYm9yZworNjcJOglOb3JyYm90dGVuCis2OAk6CU5vcmRsYW5kCis2OQk6CU5vcnJib3R0ZW4KKzcwCToJTm9yZGxhbmQKKzcxCToJTm9yZC1Ucm9lbmRlbGFnCis3Mgk6CUqEbXRsYW5kCis3Mwk6CVBvaGpvaXMtS2FyamFsYS9Ob3JyYS1LYXJlbGVuCis3NAk6CU5vcmRsYW5kCis3NQk6CUt1b3BpbworNzYJOglWYWFzYS9WYXNhCis3Nwk6CVNvZXItVHJvZW5kZWxhZworNzgJOglLZXNraS1TdW9taS9NZWxsZXJzdGEtRmlubGFuZAorNzkJOglWhHN0ZXJib3R0ZW4KKzgwCToJVoRzdGVybm9ycmxhbmQKKzgxCToJTWlra2VsaS9TdCBNaWNoZWwKKzgyCToJU29lci1Ucm9lbmRlbGFnCis4Mwk6CVNvZXItVHJvZW5kZWxhZworODQJOglTb2VyLVRyb2VuZGVsYWcKKzg1CToJU29lci1Ucm9lbmRlbGFnCis4Ngk6CVNvZXItVHJvZW5kZWxhZworODcJOglWhHN0ZXJub3JybGFuZAorODgJOglTb2VyLVRyb2VuZGVsYWcKKzg5CToJU29lci1Ucm9lbmRlbGFnCis5MAk6CU1vZXJlIG9nIFJvbXNkYWwKKzkxCToJTW9lcmUgb2cgUm9tc2RhbAorOTIJOglNb2VyZSBvZyBSb21zZGFsCis5Mwk6CUt5bWkvS3ltbWVuZQorOTQJOglNb2VyZSBvZyBSb21zZGFsCis5NQk6CVNvZXItVHJvZW5kZWxhZworOTYJOglIhG1lL1RhdmFzdGVodXMKKzk3CToJTW9lcmUgb2cgUm9tc2RhbAorOTgJOglNb2VyZSBvZyBSb21zZGFsCis5OQk6CVaEc3Rlcm5vcnJsYW5kCisxMDAJOglWhHN0ZXJub3JybGFuZAorMTAxCToJVoRzdGVybm9ycmxhbmQKKzEwMgk6CVaEc3Rlcm5vcnJsYW5kCisxMDMJOglUdXJrdS1Qb3JpL0Fiby1CapRybmVib3JnCisxMDQJOglNb2VyZSBvZyBSb21zZGFsCisxMDUJOglNb2VyZSBvZyBSb21zZGFsCisxMDYJOglNb2VyZSBvZyBSb21zZGFsCisxMDcJOglNb2VyZSBvZyBSb21zZGFsCisxMDgJOglNb2VyZSBvZyBSb21zZGFsCisxMDkJOglWhHN0ZXJub3JybGFuZAorMTEwCToJSGVkbWFyaworMTExCToJTW9lcmUgb2cgUm9tc2RhbAorMTEyCToJTW9lcmUgb2cgUm9tc2RhbAorMTEzCToJTW9lcmUgb2cgUm9tc2RhbAorMTE0CToJTW9lcmUgb2cgUm9tc2RhbAorMTE1CToJTW9lcmUgb2cgUm9tc2RhbAorMTE2CToJVmFhc2EvVmFzYQorMTE3CToJVmFhc2EvVmFzYQorMTE4CToJR4R2bGVib3JnCisxMTkJOglNb2VyZSBvZyBSb21zZGFsCisxMjAJOglNb2VyZSBvZyBSb21zZGFsCisxMjEJOglNb2VyZSBvZyBSb21zZGFsCisxMjIJOglWYWFzYS9WYXNhCisxMjMJOglWYWFzYS9WYXNhCisxMjQJOglNb2VyZSBvZyBSb21zZGFsCisxMjUJOglPcHBsYW5kCisxMjYJOglUdXJrdS1Qb3JpL0Fiby1CapRybmVib3JnCisxMjcJOglLb3BwYXJiZXJnCisxMjgJOglNb2VyZSBvZyBSb21zZGFsCisxMjkJOglUdXJrdS1Qb3JpL0Fiby1CapRybmVib3JnCisxMzAJOglNb2VyZSBvZyBSb21zZGFsCisxMzEJOglUdXJrdS1Qb3JpL0Fiby1CapRybmVib3JnCisxMzIJOglTb2duIG9nIEZqb3JkYW5lCisxMzMJOglUdXJrdS1Qb3JpL0Fiby1CapRybmVib3JnCisxMzQJOglUdXJrdS1Qb3JpL0Fiby1CapRybmVib3JnCisxMzUJOglUdXJrdS1Qb3JpL0Fiby1CapRybmVib3JnCisxMzYJOglUdXJrdS1Qb3JpL0Fiby1CapRybmVib3JnCisxMzcJOglUdXJrdS1Qb3JpL0Fiby1CapRybmVib3JnCisxMzgJOglUdXJrdS1Qb3JpL0Fiby1CapRybmVib3JnCisxMzkJOglUdXJrdS1Qb3JpL0Fiby1CapRybmVib3JnCisxNDAJOglUdXJrdS1Qb3JpL0Fiby1CapRybmVib3JnCisxNDEJOglUdXJrdS1Qb3JpL0Fiby1CapRybmVib3JnCisxNDIJOglUdXJrdS1Qb3JpL0Fiby1CapRybmVib3JnCisxNDMJOglUdXJrdS1Qb3JpL0Fiby1CapRybmVib3JnCisxNDQJOglUdXJrdS1Qb3JpL0Fiby1CapRybmVib3JnCisxNDUJOglUdXJrdS1Qb3JpL0Fiby1CapRybmVib3JnCisxNDYJOglTb2duIG9nIEZqb3JkYW5lCisxNDcJOglUdXJrdS1Qb3JpL0Fiby1CapRybmVib3JnCisxNDgJOglUdXJrdS1Qb3JpL0Fiby1CapRybmVib3JnCisxNDkJOglUdXJrdS1Qb3JpL0Fiby1CapRybmVib3JnCisxNTAJOglUdXJrdS1Qb3JpL0Fiby1CapRybmVib3JnCisxNTEJOglUdXJrdS1Qb3JpL0Fiby1CapRybmVib3JnCisxNTIJOglUdXJrdS1Qb3JpL0Fiby1CapRybmVib3JnCisxNTMJOglUdXJrdS1Qb3JpL0Fiby1CapRybmVib3JnCisxNTQJOglUdXJrdS1Qb3JpL0Fiby1CapRybmVib3JnCisxNTUJOglUdXJrdS1Qb3JpL0Fiby1CapRybmVib3JnCisxNTYJOglUdXJrdS1Qb3JpL0Fiby1CapRybmVib3JnCisxNTcJOglUdXJrdS1Qb3JpL0Fiby1CapRybmVib3JnCisxNTgJOglUdXJrdS1Qb3JpL0Fiby1CapRybmVib3JnCisxNTkJOglTb2duIG9nIEZqb3JkYW5lCisxNjAJOglTb2duIG9nIEZqb3JkYW5lCisxNjEJOglUdXJrdS1Qb3JpL0Fiby1CapRybmVib3JnCisxNjIJOglUdXJrdS1Qb3JpL0Fiby1CapRybmVib3JnCisxNjMJOglTb2duIG9nIEZqb3JkYW5lCisxNjQJOglTb2duIG9nIEZqb3JkYW5lCisxNjUJOglTb2duIG9nIEZqb3JkYW5lCisxNjYJOglTb2duIG9nIEZqb3JkYW5lCisxNjcJOglVdWRlbm1hYS9OeWxhbmQKKzE2OAk6CVNvZ24gb2cgRmpvcmRhbmUKKzE2OQk6CVNvZ24gb2cgRmpvcmRhbmUKKzE3MAk6CVNvZ24gb2cgRmpvcmRhbmUKKzE3MQk6CVR1cmt1LVBvcmkvQWJvLUJqlHJuZWJvcmcKKzE3Mgk6CVNvZ24gb2cgRmpvcmRhbmUKKzE3Mwk6CVR1cmt1LVBvcmkvQWJvLUJqlHJuZWJvcmcKKzE3NAk6CVR1cmt1LVBvcmkvQWJvLUJqlHJuZWJvcmcKKzE3NQk6CVR1cmt1LVBvcmkvQWJvLUJqlHJuZWJvcmcKKzE3Ngk6CVR1cmt1LVBvcmkvQWJvLUJqlHJuZWJvcmcKKzE3Nwk6CVR1cmt1LVBvcmkvQWJvLUJqlHJuZWJvcmcKKzE3OAk6CVR1cmt1LVBvcmkvQWJvLUJqlHJuZWJvcmcKKzE3OQk6CVR1cmt1LVBvcmkvQWJvLUJqlHJuZWJvcmcKKzE4MAk6CVR1cmt1LVBvcmkvQWJvLUJqlHJuZWJvcmcKKzE4MQk6CVR1cmt1LVBvcmkvQWJvLUJqlHJuZWJvcmcKKzE4Mgk6CVR1cmt1LVBvcmkvQWJvLUJqlHJuZWJvcmcKKzE4Mwk6CVNvZ24gb2cgRmpvcmRhbmUKKzE4NAk6CVR1cmt1LVBvcmkvQWJvLUJqlHJuZWJvcmcKKzE4NQk6CUt5bWkvS3ltbWVuZQorMTg2CToJS3ltaS9LeW1tZW5lCisxODcJOglUdXJrdS1Qb3JpL0Fiby1CapRybmVib3JnCisxODgJOglLeW1pL0t5bW1lbmUKKzE4OQk6CUt5bWkvS3ltbWVuZQorMTkwCToJS3ltaS9LeW1tZW5lCisxOTEJOglTb2duIG9nIEZqb3JkYW5lCisxOTIJOglLeW1pL0t5bW1lbmUKKzE5Mwk6CUt5bWkvS3ltbWVuZQorMTk0CToJS3ltaS9LeW1tZW5lCisxOTUJOglLeW1pL0t5bW1lbmUKKzE5Ngk6CUt5bWkvS3ltbWVuZQorMTk3CToJS3ltaS9LeW1tZW5lCisxOTgJOglLeW1pL0t5bW1lbmUKKzE5OQk6CUt5bWkvS3ltbWVuZQorMjAwCToJS3ltaS9LeW1tZW5lCisyMDEJOglLeW1pL0t5bW1lbmUKKzIwMgk6CUt5bWkvS3ltbWVuZQorMjAzCToJU29nbiBvZyBGam9yZGFuZQorMjA0CToJS3ltaS9LeW1tZW5lCisyMDUJOglLeW1pL0t5bW1lbmUKKzIwNgk6CUt5bWkvS3ltbWVuZQorMjA3CToJS3ltaS9LeW1tZW5lCisyMDgJOglLeW1pL0t5bW1lbmUKKzIwOQk6CUt5bWkvS3ltbWVuZQorMjEwCToJS3ltaS9LeW1tZW5lCisyMTEJOglLeW1pL0t5bW1lbmUKKzIxMgk6CUt5bWkvS3ltbWVuZQorMjEzCToJS3ltaS9LeW1tZW5lCisyMTQJOglLeW1pL0t5bW1lbmUKKzIxNQk6CUt5bWkvS3ltbWVuZQorMjE2CToJU29nbiBvZyBGam9yZGFuZQorMjE3CToJS3ltaS9LeW1tZW5lCisyMTgJOglLeW1pL0t5bW1lbmUKKzIxOQk6CUt5bWkvS3ltbWVuZQorMjIwCToJS3ltaS9LeW1tZW5lCisyMjEJOglLeW1pL0t5bW1lbmUKKzIyMgk6CUt5bWkvS3ltbWVuZQorMjIzCToJS3ltaS9LeW1tZW5lCisyMjQJOglLeW1pL0t5bW1lbmUKKzIyNQk6CUt5bWkvS3ltbWVuZQorMjI2CToJS3ltaS9LeW1tZW5lCisyMjcJOglLeW1pL0t5bW1lbmUKKzIyOAk6CUt5bWkvS3ltbWVuZQorMjI5CToJS3ltaS9LeW1tZW5lCisyMzAJOglLeW1pL0t5bW1lbmUKKzIzMQk6CUt5bWkvS3ltbWVuZQorMjMyCToJS3ltaS9LeW1tZW5lCisyMzMJOglLeW1pL0t5bW1lbmUKKzIzNAk6CUt5bWkvS3ltbWVuZQorMjM1CToJS3ltaS9LeW1tZW5lCisyMzYJOglLeW1pL0t5bW1lbmUKKzIzNwk6CUt5bWkvS3ltbWVuZQorMjM4CToJVHVya3UtUG9yaS9BYm8tQmqUcm5lYm9yZworMjM5CToJS3ltaS9LeW1tZW5lCisyNDAJOglLeW1pL0t5bW1lbmUKKzI0MQk6CUt5bWkvS3ltbWVuZQorMjQyCToJS3ltaS9LeW1tZW5lCisyNDMJOglLeW1pL0t5bW1lbmUKKzI0NAk6CUt5bWkvS3ltbWVuZQorMjQ1CToJVHVya3UtUG9yaS9BYm8tQmqUcm5lYm9yZworMjQ2CToJVXVkZW5tYWEvTnlsYW5kCisyNDcJOglLeW1pL0t5bW1lbmUKKzI0OAk6CVR1cmt1LVBvcmkvQWJvLUJqlHJuZWJvcmcKKzI0OQk6CVNvZ24gb2cgRmpvcmRhbmUKKzI1MAk6CUt5bWkvS3ltbWVuZQorMjUxCToJVXVkZW5tYWEvTnlsYW5kCisyNTIJOglVdWRlbm1hYS9OeWxhbmQKKzI1Mwk6CUt5bWkvS3ltbWVuZQorMjU0CToJS3ltaS9LeW1tZW5lCisyNTUJOglUdXJrdS1Qb3JpL0Fiby1CapRybmVib3JnCisyNTYJOglTb2duIG9nIEZqb3JkYW5lCisyNTcJOglLeW1pL0t5bW1lbmUKKzI1OAk6CUt5bWkvS3ltbWVuZQorMjU5CToJVXVkZW5tYWEvTnlsYW5kCisyNjAJOglLeW1pL0t5bW1lbmUKKzI2MQk6CUt5bWkvS3ltbWVuZQorMjYyCToJVXVkZW5tYWEvTnlsYW5kCisyNjMJOglUdXJrdS1Qb3JpL0Fiby1CapRybmVib3JnCisyNjQJOglVdWRlbm1hYS9OeWxhbmQKKzI2NQk6CUt5bWkvS3ltbWVuZQorMjY2CToJS3ltaS9LeW1tZW5lCisyNjcJOglHhHZsZWJvcmcKKzI2OAk6CVNvZ24gb2cgRmpvcmRhbmUKKzI2OQk6CVR1cmt1LVBvcmkvQWJvLUJqlHJuZWJvcmcKKzI3MAk6CVV1ZGVubWFhL055bGFuZAorMjcxCToJVXVkZW5tYWEvTnlsYW5kCisyNzIJOglLeW1pL0t5bW1lbmUKKzI3Mwk6CUt5bWkvS3ltbWVuZQorMjc0CToJVXVkZW5tYWEvTnlsYW5kCisyNzUJOglLeW1pL0t5bW1lbmUKKzI3Ngk6CVV1ZGVubWFhL055bGFuZAorMjc3CToJU29nbiBvZyBGam9yZGFuZQorMjc4CToJVXVkZW5tYWEvTnlsYW5kCisyNzkJOglLeW1pL0t5bW1lbmUKKzI4MAk6CVV1ZGVubWFhL055bGFuZAorMjgxCToJVXVkZW5tYWEvTnlsYW5kCisyODIJOglUdXJrdS1Qb3JpL0Fiby1CapRybmVib3JnCisyODMJOglVdWRlbm1hYS9OeWxhbmQKKzI4NAk6CVV1ZGVubWFhL055bGFuZAorMjg1CToJS3ltaS9LeW1tZW5lCisyODYJOglUdXJrdS1Qb3JpL0Fiby1CapRybmVib3JnCisyODcJOglVdWRlbm1hYS9OeWxhbmQKKzI4OAk6CVR1cmt1LVBvcmkvQWJvLUJqlHJuZWJvcmcKKzI4OQk6CUt5bWkvS3ltbWVuZQorMjkwCToJVXVkZW5tYWEvTnlsYW5kCisyOTEJOglVdWRlbm1hYS9OeWxhbmQKKzI5Mgk6CVV1ZGVubWFhL055bGFuZAorMjkzCToJVHVya3UtUG9yaS9BYm8tQmqUcm5lYm9yZworMjk0CToJVXVkZW5tYWEvTnlsYW5kCisyOTUJOglLeW1pL0t5bW1lbmUKKzI5Ngk6CVV1ZGVubWFhL055bGFuZAorMjk3CToJVXVkZW5tYWEvTnlsYW5kCisyOTgJOglVdWRlbm1hYS9OeWxhbmQKKzI5OQk6CVV1ZGVubWFhL055bGFuZAorMzAwCToJVXVkZW5tYWEvTnlsYW5kCiszMDEJOglUdXJrdS1Qb3JpL0Fiby1CapRybmVib3JnCiszMDIJOglVdWRlbm1hYS9OeWxhbmQKKzMwMwk6CVV1ZGVubWFhL055bGFuZAorMzA0CToJVHVya3UtUG9yaS9BYm8tQmqUcm5lYm9yZworMzA1CToJVHVya3UtUG9yaS9BYm8tQmqUcm5lYm9yZworMzA2CToJVXVkZW5tYWEvTnlsYW5kCiszMDcJOglUdXJrdS1Qb3JpL0Fiby1CapRybmVib3JnCiszMDgJOglUdXJrdS1Qb3JpL0Fiby1CapRybmVib3JnCiszMDkJOglVdWRlbm1hYS9OeWxhbmQKKzMxMAk6CVNvZ24gb2cgRmpvcmRhbmUKKzMxMQk6CUeEdmxlYm9yZworMzEyCToJVHVya3UtUG9yaS9BYm8tQmqUcm5lYm9yZworMzEzCToJVXVkZW5tYWEvTnlsYW5kCiszMTQJOglTb2duIG9nIEZqb3JkYW5lCiszMTUJOglHhHZsZWJvcmcKKzMxNgk6CVV1ZGVubWFhL055bGFuZAorMzE3CToJVXVkZW5tYWEvTnlsYW5kCiszMTgJOglVdWRlbm1hYS9OeWxhbmQKKzMxOQk6CVR1cmt1LVBvcmkvQWJvLUJqlHJuZWJvcmcKKzMyMAk6CVR1cmt1LVBvcmkvQWJvLUJqlHJuZWJvcmcKKzMyMQk6CVR1cmt1LVBvcmkvQWJvLUJqlHJuZWJvcmcKKzMyMgk6CVV1ZGVubWFhL055bGFuZAorMzIzCToJU29nbiBvZyBGam9yZGFuZQorMzI0CToJVXVkZW5tYWEvTnlsYW5kCiszMjUJOglUdXJrdS1Qb3JpL0Fiby1CapRybmVib3JnCiszMjYJOglVdWRlbm1hYS9OeWxhbmQKKzMyNwk6CVV1ZGVubWFhL055bGFuZAorMzI4CToJVXVkZW5tYWEvTnlsYW5kCiszMjkJOglVdWRlbm1hYS9OeWxhbmQKKzMzMAk6CVV1ZGVubWFhL055bGFuZAorMzMxCToJVXVkZW5tYWEvTnlsYW5kCiszMzIJOglVdWRlbm1hYS9OeWxhbmQKKzMzMwk6CVV1ZGVubWFhL055bGFuZAorMzM0CToJVXVkZW5tYWEvTnlsYW5kCiszMzUJOglUdXJrdS1Qb3JpL0Fiby1CapRybmVib3JnCiszMzYJOglISUdITEFORFMKKzMzNwk6CVV1ZGVubWFhL055bGFuZAorMzM4CToJVXVkZW5tYWEvTnlsYW5kCiszMzkJOglVdWRlbm1hYS9OeWxhbmQKKzM0MAk6CUeEdmxlYm9yZworMzQxCToJVXVkZW5tYWEvTnlsYW5kCiszNDIJOglVdWRlbm1hYS9OeWxhbmQKKzM0Mwk6CVNvZ24gb2cgRmpvcmRhbmUKKzM0NAk6CVV1ZGVubWFhL055bGFuZAorMzQ1CToJSElHSExBTkRTCiszNDYJOglVdWRlbm1hYS9OeWxhbmQKKzM0Nwk6CVV1ZGVubWFhL055bGFuZAorMzQ4CToJVXVkZW5tYWEvTnlsYW5kCiszNDkJOglVdWRlbm1hYS9OeWxhbmQKKzM1MAk6CVV1ZGVubWFhL055bGFuZAorMzUxCToJVXVkZW5tYWEvTnlsYW5kCiszNTIJOglTb2duIG9nIEZqb3JkYW5lCiszNTMJOglVdWRlbm1hYS9OeWxhbmQKKzM1NAk6CVV1ZGVubWFhL055bGFuZAorMzU1CToJVXVkZW5tYWEvTnlsYW5kCiszNTYJOglVdWRlbm1hYS9OeWxhbmQKKzM1Nwk6CVV1ZGVubWFhL055bGFuZAorMzU4CToJVXVkZW5tYWEvTnlsYW5kCiszNTkJOglUdXJrdS1Qb3JpL0Fiby1CapRybmVib3JnCiszNjAJOglVdWRlbm1hYS9OeWxhbmQKKzM2MQk6CVV1ZGVubWFhL055bGFuZAorMzYyCToJVXVkZW5tYWEvTnlsYW5kCiszNjMJOglVdWRlbm1hYS9OeWxhbmQKKzM2NAk6CVV1ZGVubWFhL055bGFuZAorMzY1CToJVXVkZW5tYWEvTnlsYW5kCiszNjYJOglVdWRlbm1hYS9OeWxhbmQKKzM2Nwk6CVR1cmt1LVBvcmkvQWJvLUJqlHJuZWJvcmcKKzM2OAk6CVV1ZGVubWFhL055bGFuZAorMzY5CToJVXVkZW5tYWEvTnlsYW5kCiszNzAJOglUdXJrdS1Qb3JpL0Fiby1CapRybmVib3JnCiszNzEJOglUdXJrdS1Qb3JpL0Fiby1CapRybmVib3JnCiszNzIJOglWhHJtbGFuZAorMzczCToJVXVkZW5tYWEvTnlsYW5kCiszNzQJOglVdWRlbm1hYS9OeWxhbmQKKzM3NQk6CVV1ZGVubWFhL055bGFuZAorMzc2CToJVXVkZW5tYWEvTnlsYW5kCiszNzcJOglTb2duIG9nIEZqb3JkYW5lCiszNzgJOglVdWRlbm1hYS9OeWxhbmQKKzM3OQk6CUJ1c2tlcnVkCiszODAJOglUdXJrdS1Qb3JpL0Fiby1CapRybmVib3JnCiszODEJOglVdWRlbm1hYS9OeWxhbmQKKzM4Mgk6CVR1cmt1LVBvcmkvQWJvLUJqlHJuZWJvcmcKKzM4Mwk6CVV1ZGVubWFhL055bGFuZAorMzg0CToJSElHSExBTkRTCiszODUJOglVdWRlbm1hYS9OeWxhbmQKKzM4Ngk6CVV1ZGVubWFhL055bGFuZAorMzg3CToJSElHSExBTkRTCiszODgJOglTb2duIG9nIEZqb3JkYW5lCiszODkJOglUdXJrdS1Qb3JpL0Fiby1CapRybmVib3JnCiszOTAJOglBbGFuZC9BaHZlbmFubWFhCiszOTEJOglVdWRlbm1hYS9OeWxhbmQKKzM5Mgk6CVV1ZGVubWFhL055bGFuZAorMzkzCToJVXVkZW5tYWEvTnlsYW5kCiszOTQJOglUdXJrdS1Qb3JpL0Fiby1CapRybmVib3JnCiszOTUJOglVdWRlbm1hYS9OeWxhbmQKKzM5Ngk6CVR1cmt1LVBvcmkvQWJvLUJqlHJuZWJvcmcKKzM5Nwk6CVR1cmt1LVBvcmkvQWJvLUJqlHJuZWJvcmcKKzM5OAk6CUhvcmRhbGFuZAorMzk5CToJVXVkZW5tYWEvTnlsYW5kCis0MDAJOglBbGFuZC9BaHZlbmFubWFhCis0MDEJOglUdXJrdS1Qb3JpL0Fiby1CapRybmVib3JnCis0MDIJOglUdXJrdS1Qb3JpL0Fiby1CapRybmVib3JnCis0MDMJOglBbGFuZC9BaHZlbmFubWFhCis0MDQJOglVdWRlbm1hYS9OeWxhbmQKKzQwNQk6CVV1ZGVubWFhL055bGFuZAorNDA2CToJVHVya3UtUG9yaS9BYm8tQmqUcm5lYm9yZworNDA3CToJVHVya3UtUG9yaS9BYm8tQmqUcm5lYm9yZworNDA4CToJVXVkZW5tYWEvTnlsYW5kCis0MDkJOglBbGFuZC9BaHZlbmFubWFhCis0MTAJOglISUdITEFORFMKKzQxMQk6CVV1ZGVubWFhL055bGFuZAorNDEyCToJVHVya3UtUG9yaS9BYm8tQmqUcm5lYm9yZworNDEzCToJQWxhbmQvQWh2ZW5hbm1hYQorNDE0CToJVHVya3UtUG9yaS9BYm8tQmqUcm5lYm9yZworNDE1CToJVHVya3UtUG9yaS9BYm8tQmqUcm5lYm9yZworNDE2CToJVHVya3UtUG9yaS9BYm8tQmqUcm5lYm9yZworNDE3CToJSElHSExBTkRTCis0MTgJOglUdXJrdS1Qb3JpL0Fiby1CapRybmVib3JnCis0MTkJOglUdXJrdS1Qb3JpL0Fiby1CapRybmVib3JnCis0MjAJOglUdXJrdS1Qb3JpL0Fiby1CapRybmVib3JnCis0MjEJOglUdXJrdS1Qb3JpL0Fiby1CapRybmVib3JnCis0MjIJOglVdWRlbm1hYS9OeWxhbmQKKzQyMwk6CUhvcmRhbGFuZAorNDI0CToJSElHSExBTkRTCis0MjUJOglVdWRlbm1hYS9OeWxhbmQKKzQyNgk6CUFsYW5kL0FodmVuYW5tYWEKKzQyNwk6CVR1cmt1LVBvcmkvQWJvLUJqlHJuZWJvcmcKKzQyOAk6CVV1ZGVubWFhL055bGFuZAorNDI5CToJVXVkZW5tYWEvTnlsYW5kCis0MzAJOglBbGFuZC9BaHZlbmFubWFhCis0MzEJOglUdXJrdS1Qb3JpL0Fiby1CapRybmVib3JnCis0MzIJOglUdXJrdS1Qb3JpL0Fiby1CapRybmVib3JnCis0MzMJOglVdWRlbm1hYS9OeWxhbmQKKzQzNAk6CVR1cmt1LVBvcmkvQWJvLUJqlHJuZWJvcmcKKzQzNQk6CVR1cmt1LVBvcmkvQWJvLUJqlHJuZWJvcmcKKzQzNgk6CVR1cmt1LVBvcmkvQWJvLUJqlHJuZWJvcmcKKzQzNwk6CVR1cmt1LVBvcmkvQWJvLUJqlHJuZWJvcmcKKzQzOAk6CVR1cmt1LVBvcmkvQWJvLUJqlHJuZWJvcmcKKzQzOQk6CVV1ZGVubWFhL055bGFuZAorNDQwCToJVHVya3UtUG9yaS9BYm8tQmqUcm5lYm9yZworNDQxCToJSElHSExBTkRTCis0NDIJOglVdWRlbm1hYS9OeWxhbmQKKzQ0Mwk6CUFsYW5kL0FodmVuYW5tYWEKKzQ0NAk6CVR1cmt1LVBvcmkvQWJvLUJqlHJuZWJvcmcKKzQ0NQk6CUhJR0hMQU5EUworNDQ2CToJVHVya3UtUG9yaS9BYm8tQmqUcm5lYm9yZworNDQ3CToJVXVkZW5tYWEvTnlsYW5kCis0NDgJOglISUdITEFORFMKKzQ0OQk6CUFsYW5kL0FodmVuYW5tYWEKKzQ1MAk6CVV1ZGVubWFhL055bGFuZAorNDUxCToJVHVya3UtUG9yaS9BYm8tQmqUcm5lYm9yZworNDUyCToJQWxhbmQvQWh2ZW5hbm1hYQorNDUzCToJVXVkZW5tYWEvTnlsYW5kCis0NTQJOglUdXJrdS1Qb3JpL0Fiby1CapRybmVib3JnCis0NTUJOglVdWRlbm1hYS9OeWxhbmQKKzQ1Ngk6CVR1cmt1LVBvcmkvQWJvLUJqlHJuZWJvcmcKKzQ1Nwk6CVR1cmt1LVBvcmkvQWJvLUJqlHJuZWJvcmcKKzQ1OAk6CVR1cmt1LVBvcmkvQWJvLUJqlHJuZWJvcmcKKzQ1OQk6CVR1cmt1LVBvcmkvQWJvLUJqlHJuZWJvcmcKKzQ2MAk6CVR1cmt1LVBvcmkvQWJvLUJqlHJuZWJvcmcKKzQ2MQk6CVR1cmt1LVBvcmkvQWJvLUJqlHJuZWJvcmcKKzQ2Mgk6CVV1ZGVubWFhL055bGFuZAorNDYzCToJVHVya3UtUG9yaS9BYm8tQmqUcm5lYm9yZworNDY0CToJVXBwc2FsYQorNDY1CToJQWxhbmQvQWh2ZW5hbm1hYQorNDY2CToJQWxhbmQvQWh2ZW5hbm1hYQorNDY3CToJVHVya3UtUG9yaS9BYm8tQmqUcm5lYm9yZworNDY4CToJVHVya3UtUG9yaS9BYm8tQmqUcm5lYm9yZworNDY5CToJVHVya3UtUG9yaS9BYm8tQmqUcm5lYm9yZworNDcwCToJVHVya3UtUG9yaS9BYm8tQmqUcm5lYm9yZworNDcxCToJVHVya3UtUG9yaS9BYm8tQmqUcm5lYm9yZworNDcyCToJVHVya3UtUG9yaS9BYm8tQmqUcm5lYm9yZworNDczCToJVHVya3UtUG9yaS9BYm8tQmqUcm5lYm9yZworNDc0CToJQWxhbmQvQWh2ZW5hbm1hYQorNDc1CToJVHVya3UtUG9yaS9BYm8tQmqUcm5lYm9yZworNDc2CToJQWxhbmQvQWh2ZW5hbm1hYQorNDc3CToJVHVya3UtUG9yaS9BYm8tQmqUcm5lYm9yZworNDc4CToJVHVya3UtUG9yaS9BYm8tQmqUcm5lYm9yZworNDc5CToJVHVya3UtUG9yaS9BYm8tQmqUcm5lYm9yZworNDgwCToJVXVkZW5tYWEvTnlsYW5kCis0ODEJOglBbGFuZC9BaHZlbmFubWFhCis0ODIJOglBbGFuZC9BaHZlbmFubWFhCis0ODMJOglBbGFuZC9BaHZlbmFubWFhCis0ODQJOglBbGFuZC9BaHZlbmFubWFhCis0ODUJOglUdXJrdS1Qb3JpL0Fiby1CapRybmVib3JnCis0ODYJOglBbGFuZC9BaHZlbmFubWFhCis0ODcJOglUdXJrdS1Qb3JpL0Fiby1CapRybmVib3JnCis0ODgJOglBbGFuZC9BaHZlbmFubWFhCis0ODkJOglBbGFuZC9BaHZlbmFubWFhCis0OTAJOglUdXJrdS1Qb3JpL0Fiby1CapRybmVib3JnCis0OTEJOglBbGFuZC9BaHZlbmFubWFhCis0OTIJOglUdXJrdS1Qb3JpL0Fiby1CapRybmVib3JnCis0OTMJOglUdXJrdS1Qb3JpL0Fiby1CapRybmVib3JnCis0OTQJOglUdXJrdS1Qb3JpL0Fiby1CapRybmVib3JnCis0OTUJOglUdXJrdS1Qb3JpL0Fiby1CapRybmVib3JnCis0OTYJOglUdXJrdS1Qb3JpL0Fiby1CapRybmVib3JnCis0OTcJOglBbGFuZC9BaHZlbmFubWFhCis0OTgJOglVdWRlbm1hYS9OeWxhbmQKKzQ5OQk6CVR1cmt1LVBvcmkvQWJvLUJqlHJuZWJvcmcKKzUwMAk6CUFsYW5kL0FodmVuYW5tYWEKKzUwMQk6CVR1cmt1LVBvcmkvQWJvLUJqlHJuZWJvcmcKKzUwMgk6CUhJR0hMQU5EUworNTAzCToJQWxhbmQvQWh2ZW5hbm1hYQorNTA0CToJVHVya3UtUG9yaS9BYm8tQmqUcm5lYm9yZworNTA1CToJVHVya3UtUG9yaS9BYm8tQmqUcm5lYm9yZworNTA2CToJSElHSExBTkRTCis1MDcJOglUdXJrdS1Qb3JpL0Fiby1CapRybmVib3JnCis1MDgJOglBbGFuZC9BaHZlbmFubWFhCis1MDkJOglBbGFuZC9BaHZlbmFubWFhCis1MTAJOglBbGFuZC9BaHZlbmFubWFhCis1MTEJOglUdXJrdS1Qb3JpL0Fiby1CapRybmVib3JnCis1MTIJOglUdXJrdS1Qb3JpL0Fiby1CapRybmVib3JnCis1MTMJOglUdXJrdS1Qb3JpL0Fiby1CapRybmVib3JnCis1MTQJOglVdWRlbm1hYS9OeWxhbmQKKzUxNQk6CUFsYW5kL0FodmVuYW5tYWEKKzUxNgk6CUFsYW5kL0FodmVuYW5tYWEKKzUxNwk6CVR1cmt1LVBvcmkvQWJvLUJqlHJuZWJvcmcKKzUxOAk6CVR1cmt1LVBvcmkvQWJvLUJqlHJuZWJvcmcKKzUxOQk6CVR1cmt1LVBvcmkvQWJvLUJqlHJuZWJvcmcKKzUyMAk6CUFsYW5kL0FodmVuYW5tYWEKKzUyMQk6CUFsYW5kL0FodmVuYW5tYWEKKzUyMgk6CVR1cmt1LVBvcmkvQWJvLUJqlHJuZWJvcmcKKzUyMwk6CUFsYW5kL0FodmVuYW5tYWEKKzUyNAk6CUFsYW5kL0FodmVuYW5tYWEKKzUyNQk6CUFsYW5kL0FodmVuYW5tYWEKKzUyNgk6CUFsYW5kL0FodmVuYW5tYWEKKzUyNwk6CVVwcHNhbGEKKzUyOAk6CUFsYW5kL0FodmVuYW5tYWEKKzUyOQk6CVR1cmt1LVBvcmkvQWJvLUJqlHJuZWJvcmcKKzUzMAk6CUhJR0hMQU5EUworNTMxCToJVHVya3UtUG9yaS9BYm8tQmqUcm5lYm9yZworNTMyCToJQWxhbmQvQWh2ZW5hbm1hYQorNTMzCToJVHVya3UtUG9yaS9BYm8tQmqUcm5lYm9yZworNTM0CToJVHVya3UtUG9yaS9BYm8tQmqUcm5lYm9yZworNTM1CToJVHVya3UtUG9yaS9BYm8tQmqUcm5lYm9yZworNTM2CToJQWxhbmQvQWh2ZW5hbm1hYQorNTM3CToJVHVya3UtUG9yaS9BYm8tQmqUcm5lYm9yZworNTM4CToJVHVya3UtUG9yaS9BYm8tQmqUcm5lYm9yZworNTM5CToJVXVkZW5tYWEvTnlsYW5kCis1NDAJOglUdXJrdS1Qb3JpL0Fiby1CapRybmVib3JnCis1NDEJOglUdXJrdS1Qb3JpL0Fiby1CapRybmVib3JnCis1NDIJOglUdXJrdS1Qb3JpL0Fiby1CapRybmVib3JnCis1NDMJOglUdXJrdS1Qb3JpL0Fiby1CapRybmVib3JnCis1NDQJOglBbGFuZC9BaHZlbmFubWFhCis1NDUJOglBbGFuZC9BaHZlbmFubWFhCis1NDYJOglVdWRlbm1hYS9OeWxhbmQKKzU0Nwk6CUFsYW5kL0FodmVuYW5tYWEKKzU0OAk6CUFsYW5kL0FodmVuYW5tYWEKKzU0OQk6CUFsYW5kL0FodmVuYW5tYWEKKzU1MAk6CVR1cmt1LVBvcmkvQWJvLUJqlHJuZWJvcmcKKzU1MQk6CUFsYW5kL0FodmVuYW5tYWEKKzU1Mgk6CUFsYW5kL0FodmVuYW5tYWEKKzU1Mwk6CUFsYW5kL0FodmVuYW5tYWEKKzU1NAk6CVR1cmt1LVBvcmkvQWJvLUJqlHJuZWJvcmcKKzU1NQk6CVV1ZGVubWFhL055bGFuZAorNTU2CToJVXVkZW5tYWEvTnlsYW5kCis1NTcJOglUdXJrdS1Qb3JpL0Fiby1CapRybmVib3JnCis1NTgJOglUdXJrdS1Qb3JpL0Fiby1CapRybmVib3JnCis1NTkJOglUdXJrdS1Qb3JpL0Fiby1CapRybmVib3JnCis1NjAJOglVcHBzYWxhCis1NjEJOglBbGFuZC9BaHZlbmFubWFhCis1NjIJOglUdXJrdS1Qb3JpL0Fiby1CapRybmVib3JnCis1NjMJOglUdXJrdS1Qb3JpL0Fiby1CapRybmVib3JnCis1NjQJOglBbGFuZC9BaHZlbmFubWFhCis1NjUJOglBbGFuZC9BaHZlbmFubWFhCis1NjYJOglBbGFuZC9BaHZlbmFubWFhCis1NjcJOglBbGFuZC9BaHZlbmFubWFhCis1NjgJOglBbGFuZC9BaHZlbmFubWFhCis1NjkJOglISUdITEFORFMKKzU3MAk6CUFsYW5kL0FodmVuYW5tYWEKKzU3MQk6CVR1cmt1LVBvcmkvQWJvLUJqlHJuZWJvcmcKKzU3Mgk6CVR1cmt1LVBvcmkvQWJvLUJqlHJuZWJvcmcKKzU3Mwk6CUFsYW5kL0FodmVuYW5tYWEKKzU3NAk6CVR1cmt1LVBvcmkvQWJvLUJqlHJuZWJvcmcKKzU3NQk6CUFsYW5kL0FodmVuYW5tYWEKKzU3Ngk6CVR1cmt1LVBvcmkvQWJvLUJqlHJuZWJvcmcKKzU3Nwk6CVV1ZGVubWFhL055bGFuZAorNTc4CToJVHVya3UtUG9yaS9BYm8tQmqUcm5lYm9yZworNTc5CToJVHVya3UtUG9yaS9BYm8tQmqUcm5lYm9yZworNTgwCToJVHVya3UtUG9yaS9BYm8tQmqUcm5lYm9yZworNTgxCToJQWxhbmQvQWh2ZW5hbm1hYQorNTgyCToJQWxhbmQvQWh2ZW5hbm1hYQorNTgzCToJQWxhbmQvQWh2ZW5hbm1hYQorNTg0CToJVHVya3UtUG9yaS9BYm8tQmqUcm5lYm9yZworNTg1CToJQWxhbmQvQWh2ZW5hbm1hYQorNTg2CToJQWxhbmQvQWh2ZW5hbm1hYQorNTg3CToJVHVya3UtUG9yaS9BYm8tQmqUcm5lYm9yZworNTg4CToJQWxhbmQvQWh2ZW5hbm1hYQorNTg5CToJVHVya3UtUG9yaS9BYm8tQmqUcm5lYm9yZworNTkwCToJQWxhbmQvQWh2ZW5hbm1hYQorNTkxCToJVXVkZW5tYWEvTnlsYW5kCis1OTIJOglVdWRlbm1hYS9OeWxhbmQKKzU5Mwk6CUFsYW5kL0FodmVuYW5tYWEKKzU5NAk6CVR1cmt1LVBvcmkvQWJvLUJqlHJuZWJvcmcKKzU5NQk6CVR1cmt1LVBvcmkvQWJvLUJqlHJuZWJvcmcKKzU5Ngk6CUFsYW5kL0FodmVuYW5tYWEKKzU5Nwk6CUFsYW5kL0FodmVuYW5tYWEKKzU5OAk6CUFsYW5kL0FodmVuYW5tYWEKKzU5OQk6CVR1cmt1LVBvcmkvQWJvLUJqlHJuZWJvcmcKKzYwMAk6CVR1cmt1LVBvcmkvQWJvLUJqlHJuZWJvcmcKKzYwMQk6CUFsYW5kL0FodmVuYW5tYWEKKzYwMgk6CVV1ZGVubWFhL055bGFuZAorNjAzCToJQWxhbmQvQWh2ZW5hbm1hYQorNjA0CToJVHVya3UtUG9yaS9BYm8tQmqUcm5lYm9yZworNjA1CToJVHVya3UtUG9yaS9BYm8tQmqUcm5lYm9yZworNjA2CToJQWxhbmQvQWh2ZW5hbm1hYQorNjA3CToJVXVkZW5tYWEvTnlsYW5kCis2MDgJOglBbGFuZC9BaHZlbmFubWFhCis2MDkJOglISUdITEFORFMKKzYxMAk6CVV1ZGVubWFhL055bGFuZAorNjExCToJVHVya3UtUG9yaS9BYm8tQmqUcm5lYm9yZworNjEyCToJVHVya3UtUG9yaS9BYm8tQmqUcm5lYm9yZworNjEzCToJQWxhbmQvQWh2ZW5hbm1hYQorNjE0CToJVHVya3UtUG9yaS9BYm8tQmqUcm5lYm9yZworNjE1CToJQWxhbmQvQWh2ZW5hbm1hYQorNjE2CToJVHVya3UtUG9yaS9BYm8tQmqUcm5lYm9yZworNjE3CToJVHVya3UtUG9yaS9BYm8tQmqUcm5lYm9yZworNjE4CToJVXVkZW5tYWEvTnlsYW5kCis2MTkJOglBbGFuZC9BaHZlbmFubWFhCis2MjAJOglVdWRlbm1hYS9OeWxhbmQKKzYyMQk6CVV1ZGVubWFhL055bGFuZAorNjIyCToJVHVya3UtUG9yaS9BYm8tQmqUcm5lYm9yZworNjIzCToJVHVya3UtUG9yaS9BYm8tQmqUcm5lYm9yZworNjI0CToJVXVkZW5tYWEvTnlsYW5kCis2MjUJOglUdXJrdS1Qb3JpL0Fiby1CapRybmVib3JnCis2MjYJOglVdWRlbm1hYS9OeWxhbmQKKzYyNwk6CVV1ZGVubWFhL055bGFuZAorNjI4CToJVHVya3UtUG9yaS9BYm8tQmqUcm5lYm9yZworNjI5CToJVXVkZW5tYWEvTnlsYW5kCis2MzAJOglUdXJrdS1Qb3JpL0Fiby1CapRybmVib3JnCis2MzEJOglVdWRlbm1hYS9OeWxhbmQKKzYzMgk6CVR1cmt1LVBvcmkvQWJvLUJqlHJuZWJvcmcKKzYzMwk6CVV1ZGVubWFhL055bGFuZAorNjM0CToJQWxhbmQvQWh2ZW5hbm1hYQorNjM1CToJVHVya3UtUG9yaS9BYm8tQmqUcm5lYm9yZworNjM2CToJVHVya3UtUG9yaS9BYm8tQmqUcm5lYm9yZworNjM3CToJQWxhbmQvQWh2ZW5hbm1hYQorNjM4CToJVHVya3UtUG9yaS9BYm8tQmqUcm5lYm9yZworNjM5CToJQWxhbmQvQWh2ZW5hbm1hYQorNjQwCToJVXVkZW5tYWEvTnlsYW5kCis2NDEJOglBbGFuZC9BaHZlbmFubWFhCis2NDIJOglUdXJrdS1Qb3JpL0Fiby1CapRybmVib3JnCis2NDMJOglUdXJrdS1Qb3JpL0Fiby1CapRybmVib3JnCis2NDQJOglUdXJrdS1Qb3JpL0Fiby1CapRybmVib3JnCis2NDUJOglUdXJrdS1Qb3JpL0Fiby1CapRybmVib3JnCis2NDYJOglISUdITEFORFMKKzY0Nwk6CVR1cmt1LVBvcmkvQWJvLUJqlHJuZWJvcmcKKzY0OAk6CVV1ZGVubWFhL055bGFuZAorNjQ5CToJVHVya3UtUG9yaS9BYm8tQmqUcm5lYm9yZworNjUwCToJVXVkZW5tYWEvTnlsYW5kCis2NTEJOglVdWRlbm1hYS9OeWxhbmQKKzY1Mgk6CUFsYW5kL0FodmVuYW5tYWEKKzY1Mwk6CVV1ZGVubWFhL055bGFuZAorNjU0CToJVHVya3UtUG9yaS9BYm8tQmqUcm5lYm9yZworNjU1CToJQWxhbmQvQWh2ZW5hbm1hYQorNjU2CToJVXVkZW5tYWEvTnlsYW5kCis2NTcJOglBbGFuZC9BaHZlbmFubWFhCis2NTgJOglUdXJrdS1Qb3JpL0Fiby1CapRybmVib3JnCis2NTkJOglISUdITEFORFMKKzY2MAk6CVR1cmt1LVBvcmkvQWJvLUJqlHJuZWJvcmcKKzY2MQk6CVR1cmt1LVBvcmkvQWJvLUJqlHJuZWJvcmcKKzY2Mgk6CUFsYW5kL0FodmVuYW5tYWEKKzY2Mwk6CVR1cmt1LVBvcmkvQWJvLUJqlHJuZWJvcmcKKzY2NAk6CVR1cmt1LVBvcmkvQWJvLUJqlHJuZWJvcmcKKzY2NQk6CUFsYW5kL0FodmVuYW5tYWEKKzY2Ngk6CVV1ZGVubWFhL055bGFuZAorNjY3CToJVHVya3UtUG9yaS9BYm8tQmqUcm5lYm9yZworNjY4CToJSG9yZGFsYW5kCis2NjkJOglUdXJrdS1Qb3JpL0Fiby1CapRybmVib3JnCis2NzAJOglUdXJrdS1Qb3JpL0Fiby1CapRybmVib3JnCis2NzEJOglVdWRlbm1hYS9OeWxhbmQKKzY3Mgk6CUFsYW5kL0FodmVuYW5tYWEKKzY3Mwk6CVR1cmt1LVBvcmkvQWJvLUJqlHJuZWJvcmcKKzY3NAk6CVR1cmt1LVBvcmkvQWJvLUJqlHJuZWJvcmcKKzY3NQk6CUhJR0hMQU5EUworNjc2CToJVXVkZW5tYWEvTnlsYW5kCis2NzcJOglVdWRlbm1hYS9OeWxhbmQKKzY3OAk6CUFsYW5kL0FodmVuYW5tYWEKKzY3OQk6CUFsYW5kL0FodmVuYW5tYWEKKzY4MAk6CVR1cmt1LVBvcmkvQWJvLUJqlHJuZWJvcmcKKzY4MQk6CUFsYW5kL0FodmVuYW5tYWEKKzY4Mgk6CUFsYW5kL0FodmVuYW5tYWEKKzY4Mwk6CVV1ZGVubWFhL055bGFuZAorNjg0CToJVHVya3UtUG9yaS9BYm8tQmqUcm5lYm9yZworNjg1CToJVHVya3UtUG9yaS9BYm8tQmqUcm5lYm9yZworNjg2CToJSElHSExBTkRTCis2ODcJOglUdXJrdS1Qb3JpL0Fiby1CapRybmVib3JnCis2ODgJOglBbGFuZC9BaHZlbmFubWFhCis2ODkJOglVdWRlbm1hYS9OeWxhbmQKKzY5MAk6CUFsYW5kL0FodmVuYW5tYWEKKzY5MQk6CUFsYW5kL0FodmVuYW5tYWEKKzY5Mgk6CUFsYW5kL0FodmVuYW5tYWEKKzY5Mwk6CVR1cmt1LVBvcmkvQWJvLUJqlHJuZWJvcmcKKzY5NAk6CVR1cmt1LVBvcmkvQWJvLUJqlHJuZWJvcmcKKzY5NQk6CUFsYW5kL0FodmVuYW5tYWEKKzY5Ngk6CVR1cmt1LVBvcmkvQWJvLUJqlHJuZWJvcmcKKzY5Nwk6CVR1cmt1LVBvcmkvQWJvLUJqlHJuZWJvcmcKKzY5OAk6CVR1cmt1LVBvcmkvQWJvLUJqlHJuZWJvcmcKKzY5OQk6CUFsYW5kL0FodmVuYW5tYWEKKzcwMAk6CUhJR0hMQU5EUworNzAxCToJVXVkZW5tYWEvTnlsYW5kCis3MDIJOglBbGFuZC9BaHZlbmFubWFhCis3MDMJOglUdXJrdS1Qb3JpL0Fiby1CapRybmVib3JnCis3MDQJOglVdWRlbm1hYS9OeWxhbmQKKzcwNQk6CVR1cmt1LVBvcmkvQWJvLUJqlHJuZWJvcmcKKzcwNgk6CVR1cmt1LVBvcmkvQWJvLUJqlHJuZWJvcmcKKzcwNwk6CUFsYW5kL0FodmVuYW5tYWEKKzcwOAk6CVR1cmt1LVBvcmkvQWJvLUJqlHJuZWJvcmcKKzcwOQk6CUhJR0hMQU5EUworNzEwCToJVHVya3UtUG9yaS9BYm8tQmqUcm5lYm9yZworNzExCToJVHVya3UtUG9yaS9BYm8tQmqUcm5lYm9yZworNzEyCToJQWxhbmQvQWh2ZW5hbm1hYQorNzEzCToJVHVya3UtUG9yaS9BYm8tQmqUcm5lYm9yZworNzE0CToJQWxhbmQvQWh2ZW5hbm1hYQorNzE1CToJSElHSExBTkRTCis3MTYJOglUdXJrdS1Qb3JpL0Fiby1CapRybmVib3JnCis3MTcJOglUdXJrdS1Qb3JpL0Fiby1CapRybmVib3JnCis3MTgJOglISUdITEFORFMKKzcxOQk6CUFsYW5kL0FodmVuYW5tYWEKKzcyMAk6CUFsYW5kL0FodmVuYW5tYWEKKzcyMQk6CUFsYW5kL0FodmVuYW5tYWEKKzcyMgk6CUhJR0hMQU5EUworNzIzCToJQWxhbmQvQWh2ZW5hbm1hYQorNzI0CToJVXVkZW5tYWEvTnlsYW5kCis3MjUJOglUdXJrdS1Qb3JpL0Fiby1CapRybmVib3JnCis3MjYJOglBbGFuZC9BaHZlbmFubWFhCis3MjcJOglVdWRlbm1hYS9OeWxhbmQKKzcyOAk6CVV1ZGVubWFhL055bGFuZAorNzI5CToJQWxhbmQvQWh2ZW5hbm1hYQorNzMwCToJQWxhbmQvQWh2ZW5hbm1hYQorNzMxCToJVXVkZW5tYWEvTnlsYW5kCis3MzIJOglVdWRlbm1hYS9OeWxhbmQKKzczMwk6CVR1cmt1LVBvcmkvQWJvLUJqlHJuZWJvcmcKKzczNAk6CVV1ZGVubWFhL055bGFuZAorNzM1CToJVHVya3UtUG9yaS9BYm8tQmqUcm5lYm9yZworNzM2CToJVXVkZW5tYWEvTnlsYW5kCis3MzcJOglVdWRlbm1hYS9OeWxhbmQKKzczOAk6CVV1ZGVubWFhL055bGFuZAorNzM5CToJVHVya3UtUG9yaS9BYm8tQmqUcm5lYm9yZworNzQwCToJVXVkZW5tYWEvTnlsYW5kCis3NDEJOglUdXJrdS1Qb3JpL0Fiby1CapRybmVib3JnCis3NDIJOglBbGFuZC9BaHZlbmFubWFhCis3NDMJOglUdXJrdS1Qb3JpL0Fiby1CapRybmVib3JnCis3NDQJOglVdWRlbm1hYS9OeWxhbmQKKzc0NQk6CUFsYW5kL0FodmVuYW5tYWEKKzc0Ngk6CVV1ZGVubWFhL055bGFuZAorNzQ3CToJVXVkZW5tYWEvTnlsYW5kCis3NDgJOglBbGFuZC9BaHZlbmFubWFhCis3NDkJOglUdXJrdS1Qb3JpL0Fiby1CapRybmVib3JnCis3NTAJOglUdXJrdS1Qb3JpL0Fiby1CapRybmVib3JnCis3NTEJOglVdWRlbm1hYS9OeWxhbmQKKzc1Mgk6CVR1cmt1LVBvcmkvQWJvLUJqlHJuZWJvcmcKKzc1Mwk6CVV1ZGVubWFhL055bGFuZAorNzU0CToJVHVya3UtUG9yaS9BYm8tQmqUcm5lYm9yZworNzU1CToJQWxhbmQvQWh2ZW5hbm1hYQorNzU2CToJVXVkZW5tYWEvTnlsYW5kCis3NTcJOglUdXJrdS1Qb3JpL0Fiby1CapRybmVib3JnCis3NTgJOglUdXJrdS1Qb3JpL0Fiby1CapRybmVib3JnCis3NTkJOglUdXJrdS1Qb3JpL0Fiby1CapRybmVib3JnCis3NjAJOglVdWRlbm1hYS9OeWxhbmQKKzc2MQk6CUFsYW5kL0FodmVuYW5tYWEKKzc2Mgk6CVR1cmt1LVBvcmkvQWJvLUJqlHJuZWJvcmcKKzc2Mwk6CUFsYW5kL0FodmVuYW5tYWEKKzc2NAk6CVV1ZGVubWFhL055bGFuZAorNzY1CToJVHVya3UtUG9yaS9BYm8tQmqUcm5lYm9yZworNzY2CToJVXVkZW5tYWEvTnlsYW5kCis3NjcJOglUdXJrdS1Qb3JpL0Fiby1CapRybmVib3JnCis3NjgJOglVdWRlbm1hYS9OeWxhbmQKKzc2OQk6CUFsYW5kL0FodmVuYW5tYWEKKzc3MAk6CVR1cmt1LVBvcmkvQWJvLUJqlHJuZWJvcmcKKzc3MQk6CVR1cmt1LVBvcmkvQWJvLUJqlHJuZWJvcmcKKzc3Mgk6CVV1ZGVubWFhL055bGFuZAorNzczCToJQWxhbmQvQWh2ZW5hbm1hYQorNzc0CToJVHVya3UtUG9yaS9BYm8tQmqUcm5lYm9yZworNzc1CToJQWxhbmQvQWh2ZW5hbm1hYQorNzc2CToJVXVkZW5tYWEvTnlsYW5kCis3NzcJOglUdXJrdS1Qb3JpL0Fiby1CapRybmVib3JnCis3NzgJOglVdWRlbm1hYS9OeWxhbmQKKzc3OQk6CVV1ZGVubWFhL055bGFuZAorNzgwCToJQWxhbmQvQWh2ZW5hbm1hYQorNzgxCToJVXVkZW5tYWEvTnlsYW5kCis3ODIJOglBbGFuZC9BaHZlbmFubWFhCis3ODMJOglUdXJrdS1Qb3JpL0Fiby1CapRybmVib3JnCis3ODQJOglBbGFuZC9BaHZlbmFubWFhCis3ODUJOglVdWRlbm1hYS9OeWxhbmQKKzc4Ngk6CVR1cmt1LVBvcmkvQWJvLUJqlHJuZWJvcmcKKzc4Nwk6CVR1cmt1LVBvcmkvQWJvLUJqlHJuZWJvcmcKKzc4OAk6CVV1ZGVubWFhL055bGFuZAorNzg5CToJVXVkZW5tYWEvTnlsYW5kCis3OTAJOglVdWRlbm1hYS9OeWxhbmQKKzc5MQk6CVR1cmt1LVBvcmkvQWJvLUJqlHJuZWJvcmcKKzc5Mgk6CVR1cmt1LVBvcmkvQWJvLUJqlHJuZWJvcmcKKzc5Mwk6CVV1ZGVubWFhL055bGFuZAorNzk0CToJVHVya3UtUG9yaS9BYm8tQmqUcm5lYm9yZworNzk1CToJQWxhbmQvQWh2ZW5hbm1hYQorNzk2CToJVXVkZW5tYWEvTnlsYW5kCis3OTcJOglBbGFuZC9BaHZlbmFubWFhCis3OTgJOglUdXJrdS1Qb3JpL0Fiby1CapRybmVib3JnCis3OTkJOglVdWRlbm1hYS9OeWxhbmQKKzgwMAk6CUFsYW5kL0FodmVuYW5tYWEKKzgwMQk6CVV1ZGVubWFhL055bGFuZAorODAyCToJQWxhbmQvQWh2ZW5hbm1hYQorODAzCToJVHVya3UtUG9yaS9BYm8tQmqUcm5lYm9yZworODA0CToJVXVkZW5tYWEvTnlsYW5kCis4MDUJOglVdWRlbm1hYS9OeWxhbmQKKzgwNgk6CUFsYW5kL0FodmVuYW5tYWEKKzgwNwk6CUFsYW5kL0FodmVuYW5tYWEKKzgwOAk6CVR1cmt1LVBvcmkvQWJvLUJqlHJuZWJvcmcKKzgwOQk6CVR1cmt1LVBvcmkvQWJvLUJqlHJuZWJvcmcKKzgxMAk6CVV1ZGVubWFhL055bGFuZAorODExCToJVXVkZW5tYWEvTnlsYW5kCis4MTIJOglBbGFuZC9BaHZlbmFubWFhCis4MTMJOglUdXJrdS1Qb3JpL0Fiby1CapRybmVib3JnCis4MTQJOglBbGFuZC9BaHZlbmFubWFhCis4MTUJOglUdXJrdS1Qb3JpL0Fiby1CapRybmVib3JnCis4MTYJOglPc2xvIG9nIEFrZXJzaHVzCis4MTcJOglUdXJrdS1Qb3JpL0Fiby1CapRybmVib3JnCis4MTgJOglVdWRlbm1hYS9OeWxhbmQKKzgxOQk6CVV1ZGVubWFhL055bGFuZAorODIwCToJVXVkZW5tYWEvTnlsYW5kCis4MjEJOglUdXJrdS1Qb3JpL0Fiby1CapRybmVib3JnCis4MjIJOglVdWRlbm1hYS9OeWxhbmQKKzgyMwk6CVR1cmt1LVBvcmkvQWJvLUJqlHJuZWJvcmcKKzgyNAk6CVR1cmt1LVBvcmkvQWJvLUJqlHJuZWJvcmcKKzgyNQk6CUFsYW5kL0FodmVuYW5tYWEKKzgyNgk6CVV1ZGVubWFhL055bGFuZAorODI3CToJVHVya3UtUG9yaS9BYm8tQmqUcm5lYm9yZworODI4CToJVHVya3UtUG9yaS9BYm8tQmqUcm5lYm9yZworODI5CToJVXVkZW5tYWEvTnlsYW5kCis4MzAJOglUdXJrdS1Qb3JpL0Fiby1CapRybmVib3JnCis4MzEJOglVdWRlbm1hYS9OeWxhbmQKKzgzMgk6CUFsYW5kL0FodmVuYW5tYWEKKzgzMwk6CVR1cmt1LVBvcmkvQWJvLUJqlHJuZWJvcmcKKzgzNAk6CVR1cmt1LVBvcmkvQWJvLUJqlHJuZWJvcmcKKzgzNQk6CVR1cmt1LVBvcmkvQWJvLUJqlHJuZWJvcmcKKzgzNgk6CVR1cmt1LVBvcmkvQWJvLUJqlHJuZWJvcmcKKzgzNwk6CVR1cmt1LVBvcmkvQWJvLUJqlHJuZWJvcmcKKzgzOAk6CVR1cmt1LVBvcmkvQWJvLUJqlHJuZWJvcmcKKzgzOQk6CVV1ZGVubWFhL055bGFuZAorODQwCToJVHVya3UtUG9yaS9BYm8tQmqUcm5lYm9yZworODQxCToJVXVkZW5tYWEvTnlsYW5kCis4NDIJOglVdWRlbm1hYS9OeWxhbmQKKzg0Mwk6CVV1ZGVubWFhL055bGFuZAorODQ0CToJVHVya3UtUG9yaS9BYm8tQmqUcm5lYm9yZworODQ1CToJVXVkZW5tYWEvTnlsYW5kCis4NDYJOglISUdITEFORFMKKzg0Nwk6CVV1ZGVubWFhL055bGFuZAorODQ4CToJVXVkZW5tYWEvTnlsYW5kCis4NDkJOglBbGFuZC9BaHZlbmFubWFhCis4NTAJOglUdXJrdS1Qb3JpL0Fiby1CapRybmVib3JnCis4NTEJOglUdXJrdS1Qb3JpL0Fiby1CapRybmVib3JnCis4NTIJOglBbGFuZC9BaHZlbmFubWFhCis4NTMJOglUdXJrdS1Qb3JpL0Fiby1CapRybmVib3JnCis4NTQJOglVdWRlbm1hYS9OeWxhbmQKKzg1NQk6CVR1cmt1LVBvcmkvQWJvLUJqlHJuZWJvcmcKKzg1Ngk6CUFsYW5kL0FodmVuYW5tYWEKKzg1Nwk6CVR1cmt1LVBvcmkvQWJvLUJqlHJuZWJvcmcKKzg1OAk6CVV1ZGVubWFhL055bGFuZAorODU5CToJVHVya3UtUG9yaS9BYm8tQmqUcm5lYm9yZworODYwCToJVXVkZW5tYWEvTnlsYW5kCis4NjEJOglVdWRlbm1hYS9OeWxhbmQKKzg2Mgk6CUFsYW5kL0FodmVuYW5tYWEKKzg2Mwk6CVR1cmt1LVBvcmkvQWJvLUJqlHJuZWJvcmcKKzg2NAk6CVR1cmt1LVBvcmkvQWJvLUJqlHJuZWJvcmcKKzg2NQk6CUFsYW5kL0FodmVuYW5tYWEKKzg2Ngk6CVV1ZGVubWFhL055bGFuZAorODY3CToJQWxhbmQvQWh2ZW5hbm1hYQorODY4CToJVHVya3UtUG9yaS9BYm8tQmqUcm5lYm9yZworODY5CToJQWxhbmQvQWh2ZW5hbm1hYQorODcwCToJVXVkZW5tYWEvTnlsYW5kCis4NzEJOglBbGFuZC9BaHZlbmFubWFhCis4NzIJOglUdXJrdS1Qb3JpL0Fiby1CapRybmVib3JnCis4NzMJOglVdWRlbm1hYS9OeWxhbmQKKzg3NAk6CVV1ZGVubWFhL055bGFuZAorODc1CToJVXVkZW5tYWEvTnlsYW5kCis4NzYJOglTdG9ja2hvbG0KKzg3Nwk6CVR1cmt1LVBvcmkvQWJvLUJqlHJuZWJvcmcKKzg3OAk6CUFsYW5kL0FodmVuYW5tYWEKKzg3OQk6CVV1ZGVubWFhL055bGFuZAorODgwCToJQWxhbmQvQWh2ZW5hbm1hYQorODgxCToJQWxhbmQvQWh2ZW5hbm1hYQorODgyCToJVXVkZW5tYWEvTnlsYW5kCis4ODMJOglVdWRlbm1hYS9OeWxhbmQKKzg4NAk6CVR1cmt1LVBvcmkvQWJvLUJqlHJuZWJvcmcKKzg4NQk6CVV1ZGVubWFhL055bGFuZAorODg2CToJVXVkZW5tYWEvTnlsYW5kCis4ODcJOglBbGFuZC9BaHZlbmFubWFhCis4ODgJOglBbGFuZC9BaHZlbmFubWFhCis4ODkJOglBbGFuZC9BaHZlbmFubWFhCis4OTAJOglBbGFuZC9BaHZlbmFubWFhCis4OTEJOglBbGFuZC9BaHZlbmFubWFhCis4OTIJOglUdXJrdS1Qb3JpL0Fiby1CapRybmVib3JnCis4OTMJOglBbGFuZC9BaHZlbmFubWFhCis4OTQJOglUdXJrdS1Qb3JpL0Fiby1CapRybmVib3JnCis4OTUJOglUdXJrdS1Qb3JpL0Fiby1CapRybmVib3JnCis4OTYJOglBbGFuZC9BaHZlbmFubWFhCis4OTcJOglVdWRlbm1hYS9OeWxhbmQKKzg5OAk6CVV1ZGVubWFhL055bGFuZAorODk5CToJVHVya3UtUG9yaS9BYm8tQmqUcm5lYm9yZworOTAwCToJQWxhbmQvQWh2ZW5hbm1hYQorOTAxCToJQWxhbmQvQWh2ZW5hbm1hYQorOTAyCToJVHVya3UtUG9yaS9BYm8tQmqUcm5lYm9yZworOTAzCToJVHVya3UtUG9yaS9BYm8tQmqUcm5lYm9yZworOTA0CToJVHVya3UtUG9yaS9BYm8tQmqUcm5lYm9yZworOTA1CToJSElHSExBTkRTCis5MDYJOglBbGFuZC9BaHZlbmFubWFhCis5MDcJOglUdXJrdS1Qb3JpL0Fiby1CapRybmVib3JnCis5MDgJOglUdXJrdS1Qb3JpL0Fiby1CapRybmVib3JnCis5MDkJOglUdXJrdS1Qb3JpL0Fiby1CapRybmVib3JnCis5MTAJOglBbGFuZC9BaHZlbmFubWFhCis5MTEJOglBbGFuZC9BaHZlbmFubWFhCis5MTIJOglBbGFuZC9BaHZlbmFubWFhCis5MTMJOglBbGFuZC9BaHZlbmFubWFhCis5MTQJOglUdXJrdS1Qb3JpL0Fiby1CapRybmVib3JnCis5MTUJOglVdWRlbm1hYS9OeWxhbmQKKzkxNgk6CUFsYW5kL0FodmVuYW5tYWEKKzkxNwk6CUFsYW5kL0FodmVuYW5tYWEKKzkxOAk6CUFsYW5kL0FodmVuYW5tYWEKKzkxOQk6CVYgc3RtYW5sYW5kCis5MjAJOglUdXJrdS1Qb3JpL0Fiby1CapRybmVib3JnCis5MjEJOglUdXJrdS1Qb3JpL0Fiby1CapRybmVib3JnCis5MjIJOglBbGFuZC9BaHZlbmFubWFhCis5MjMJOglBbGFuZC9BaHZlbmFubWFhCis5MjQJOglBbGFuZC9BaHZlbmFubWFhCis5MjUJOglISUdITEFORFMKKzkyNgk6CUFsYW5kL0FodmVuYW5tYWEKKzkyNwk6CVR1cmt1LVBvcmkvQWJvLUJqlHJuZWJvcmcKKzkyOAk6CVV1ZGVubWFhL055bGFuZAorOTI5CToJQWxhbmQvQWh2ZW5hbm1hYQorOTMwCToJVHVya3UtUG9yaS9BYm8tQmqUcm5lYm9yZworOTMxCToJVXVkZW5tYWEvTnlsYW5kCis5MzIJOglUdXJrdS1Qb3JpL0Fiby1CapRybmVib3JnCis5MzMJOglBbGFuZC9BaHZlbmFubWFhCis5MzQJOglUdXJrdS1Qb3JpL0Fiby1CapRybmVib3JnCis5MzUJOglUdXJrdS1Qb3JpL0Fiby1CapRybmVib3JnCis5MzYJOglUdXJrdS1Qb3JpL0Fiby1CapRybmVib3JnCis5MzcJOglBbGFuZC9BaHZlbmFubWFhCis5MzgJOglUdXJrdS1Qb3JpL0Fiby1CapRybmVib3JnCis5MzkJOglBbGFuZC9BaHZlbmFubWFhCis5NDAJOglUdXJrdS1Qb3JpL0Fiby1CapRybmVib3JnCis5NDEJOglUdXJrdS1Qb3JpL0Fiby1CapRybmVib3JnCis5NDIJOglUdXJrdS1Qb3JpL0Fiby1CapRybmVib3JnCis5NDMJOglISUdITEFORFMKKzk0NAk6CUhJR0hMQU5EUworOTQ1CToJU3RvY2tob2xtCis5NDYJOglUdXJrdS1Qb3JpL0Fiby1CapRybmVib3JnCis5NDcJOglUdXJrdS1Qb3JpL0Fiby1CapRybmVib3JnCis5NDgJOglUdXJrdS1Qb3JpL0Fiby1CapRybmVib3JnCis5NDkJOglUdXJrdS1Qb3JpL0Fiby1CapRybmVib3JnCis5NTAJOglISUdITEFORFMKKzk1MQk6CVR1cmt1LVBvcmkvQWJvLUJqlHJuZWJvcmcKKzk1Mgk6CVR1cmt1LVBvcmkvQWJvLUJqlHJuZWJvcmcKKzk1Mwk6CUFsYW5kL0FodmVuYW5tYWEKKzk1NAk6CVR1cmt1LVBvcmkvQWJvLUJqlHJuZWJvcmcKKzk1NQk6CVR1cmt1LVBvcmkvQWJvLUJqlHJuZWJvcmcKKzk1Ngk6CUFsYW5kL0FodmVuYW5tYWEKKzk1Nwk6CVR1cmt1LVBvcmkvQWJvLUJqlHJuZWJvcmcKKzk1OAk6CVR1cmt1LVBvcmkvQWJvLUJqlHJuZWJvcmcKKzk1OQk6CVR1cmt1LVBvcmkvQWJvLUJqlHJuZWJvcmcKKzk2MAk6CVR1cmt1LVBvcmkvQWJvLUJqlHJuZWJvcmcKKzk2MQk6CVR1cmt1LVBvcmkvQWJvLUJqlHJuZWJvcmcKKzk2Mgk6CVR1cmt1LVBvcmkvQWJvLUJqlHJuZWJvcmcKKzk2Mwk6CVR1cmt1LVBvcmkvQWJvLUJqlHJuZWJvcmcKKzk2NAk6CVR1cmt1LVBvcmkvQWJvLUJqlHJuZWJvcmcKKzk2NQk6CVR1cmt1LVBvcmkvQWJvLUJqlHJuZWJvcmcKKzk2Ngk6CUFsYW5kL0FodmVuYW5tYWEKKzk2Nwk6CUFsYW5kL0FodmVuYW5tYWEKKzk2OAk6CUFsYW5kL0FodmVuYW5tYWEKKzk2OQk6CUFsYW5kL0FodmVuYW5tYWEKKzk3MAk6CUFsYW5kL0FodmVuYW5tYWEKKzk3MQk6CVR1cmt1LVBvcmkvQWJvLUJqlHJuZWJvcmcKKzk3Mgk6CVR1cmt1LVBvcmkvQWJvLUJqlHJuZWJvcmcKKzk3Mwk6CUFsYW5kL0FodmVuYW5tYWEKKzk3NAk6CUFsYW5kL0FodmVuYW5tYWEKKzk3NQk6CUFsYW5kL0FodmVuYW5tYWEKKzk3Ngk6CVR1cmt1LVBvcmkvQWJvLUJqlHJuZWJvcmcKKzk3Nwk6CUFsYW5kL0FodmVuYW5tYWEKKzk3OAk6CVR1cmt1LVBvcmkvQWJvLUJqlHJuZWJvcmcKKzk3OQk6CVR1cmt1LVBvcmkvQWJvLUJqlHJuZWJvcmcKKzk4MAk6CUFsYW5kL0FodmVuYW5tYWEKKzk4MQk6CUFsYW5kL0FodmVuYW5tYWEKKzk4Mgk6CVR1cmt1LVBvcmkvQWJvLUJqlHJuZWJvcmcKKzk4Mwk6CUFsYW5kL0FodmVuYW5tYWEKKzk4NAk6CVR1cmt1LVBvcmkvQWJvLUJqlHJuZWJvcmcKKzk4NQk6CVR1cmt1LVBvcmkvQWJvLUJqlHJuZWJvcmcKKzk4Ngk6CUFsYW5kL0FodmVuYW5tYWEKKzk4Nwk6CVV1ZGVubWFhL055bGFuZAorOTg4CToJQWxhbmQvQWh2ZW5hbm1hYQorOTg5CToJQWxhbmQvQWh2ZW5hbm1hYQorOTkwCToJVHVya3UtUG9yaS9BYm8tQmqUcm5lYm9yZworOTkxCToJQWxhbmQvQWh2ZW5hbm1hYQorOTkyCToJVHVya3UtUG9yaS9BYm8tQmqUcm5lYm9yZworOTkzCToJQWxhbmQvQWh2ZW5hbm1hYQorOTk0CToJVHVya3UtUG9yaS9BYm8tQmqUcm5lYm9yZworOTk1CToJVHVya3UtUG9yaS9BYm8tQmqUcm5lYm9yZworOTk2CToJVHVya3UtUG9yaS9BYm8tQmqUcm5lYm9yZworOTk3CToJQWxhbmQvQWh2ZW5hbm1hYQorOTk4CToJQWxhbmQvQWh2ZW5hbm1hYQorOTk5CToJQWxhbmQvQWh2ZW5hbm1hYQorMTAwMAk6CUFsYW5kL0FodmVuYW5tYWEKKzEwMDEJOglBbGFuZC9BaHZlbmFubWFhCisxMDAyCToJQWxhbmQvQWh2ZW5hbm1hYQorMTAwMwk6CUFsYW5kL0FodmVuYW5tYWEKKzEwMDQJOglBbGFuZC9BaHZlbmFubWFhCisxMDA1CToJQWxhbmQvQWh2ZW5hbm1hYQorMTAwNgk6CUFsYW5kL0FodmVuYW5tYWEKKzEwMDcJOglBbGFuZC9BaHZlbmFubWFhCisxMDA4CToJQWxhbmQvQWh2ZW5hbm1hYQorMTAwOQk6CUFsYW5kL0FodmVuYW5tYWEKKzEwMTAJOglBbGFuZC9BaHZlbmFubWFhCisxMDExCToJSElHSExBTkRTCisxMDEyCToJQWxhbmQvQWh2ZW5hbm1hYQorMTAxMwk6CVR1cmt1LVBvcmkvQWJvLUJqlHJuZWJvcmcKKzEwMTQJOglBbGFuZC9BaHZlbmFubWFhCisxMDE1CToJQWxhbmQvQWh2ZW5hbm1hYQorMTAxNgk6CUFsYW5kL0FodmVuYW5tYWEKKzEwMTcJOglBbGFuZC9BaHZlbmFubWFhCisxMDE4CToJQWxhbmQvQWh2ZW5hbm1hYQorMTAxOQk6CVR1cmt1LVBvcmkvQWJvLUJqlHJuZWJvcmcKKzEwMjAJOglUdXJrdS1Qb3JpL0Fiby1CapRybmVib3JnCisxMDIxCToJT3JlYnJvCisxMDIyCToJVGVsZW1hcmsKKzEwMjMJOglPZXN0Zm9sZAorMTAyNAk6CVN0b2NraG9sbQorMTAyNQk6CUhJR0hMQU5EUworMTAyNgk6CVN0b2NraG9sbQorMTAyNwk6CUhJR0hMQU5EUworMTAyOAk6CUhJR0hMQU5EUworMTAyOQk6CVJvZ2FsYW5kCisxMDMwCToJSElHSExBTkRTCisxMDMxCToJU3RvY2tob2xtCisxMDMyCToJT2VzdGZvbGQKKzEwMzMJOglTdG9ja2hvbG0KKzEwMzQJOglTdG9ja2hvbG0KKzEwMzUJOglISUdITEFORFMKKzEwMzYJOglTdG9ja2hvbG0KKzEwMzcJOglTdG9ja2hvbG0KKzEwMzgJOglISUdITEFORFMKKzEwMzkJOglTdG9ja2hvbG0KKzEwNDAJOglTlHJtbGFuZAorMTA0MQk6CUhJR0hMQU5EUworMTA0Mgk6CUhJR0hMQU5EUworMTA0Mwk6CVN0b2NraG9sbQorMTA0NAk6CVZlc3Rmb2xkCisxMDQ1CToJQXVzdC1BZ2RlcgorMTA0Ngk6CVN0b2NraG9sbQorMTA0Nwk6CUhJR0hMQU5EUworMTA0OAk6CUhJR0hMQU5EUworMTA0OQk6CUhJR0hMQU5EUworMTA1MAk6CVN0b2NraG9sbQorMTA1MQk6CUhJR0hMQU5EUworMTA1Mgk6CUhJR0hMQU5EUworMTA1Mwk6CVN0b2NraG9sbQorMTA1NAk6CUhJR0hMQU5EUworMTA1NQk6CUhJR0hMQU5EUworMTA1Ngk6CVN0b2NraG9sbQorMTA1Nwk6CVN0b2NraG9sbQorMTA1OAk6CVVOS05PV04KKzEwNTkJOglISUdITEFORFMKKzEwNjAJOglISUdITEFORFMKKzEwNjEJOglTdG9ja2hvbG0KKzEwNjIJOglISUdITEFORFMKKzEwNjMJOglISUdITEFORFMKKzEwNjQJOglISUdITEFORFMKKzEwNjUJOglISUdITEFORFMKKzEwNjYJOglISUdITEFORFMKKzEwNjcJOglISUdITEFORFMKKzEwNjgJOglISUdITEFORFMKKzEwNjkJOglISUdITEFORFMKKzEwNzAJOglTdG9ja2hvbG0KKzEwNzEJOglISUdITEFORFMKKzEwNzIJOglISUdITEFORFMKKzEwNzMJOglabHZzYm9yZworMTA3NAk6CVN0b2NraG9sbQorMTA3NQk6CUhJR0hMQU5EUworMTA3Ngk6CVN0b2NraG9sbQorMTA3Nwk6CUhJR0hMQU5EUworMTA3OAk6CUhJR0hMQU5EUworMTA3OQk6CVZlc3QtQWdkZXIKKzEwODAJOglISUdITEFORFMKKzEwODEJOglISUdITEFORFMKKzEwODIJOglISUdITEFORFMKKzEwODMJOglISUdITEFORFMKKzEwODQJOglISUdITEFORFMKKzEwODUJOglISUdITEFORFMKKzEwODYJOglTdG9ja2hvbG0KKzEwODcJOglISUdITEFORFMKKzEwODgJOglISUdITEFORFMKKzEwODkJOglISUdITEFORFMKKzEwOTAJOglPc3RlcmeUdGxhbmQKKzEwOTEJOglISUdITEFORFMKKzEwOTIJOglISUdITEFORFMKKzEwOTMJOglISUdITEFORFMKKzEwOTQJOglISUdITEFORFMKKzEwOTUJOglTdG9ja2hvbG0KKzEwOTYJOglISUdITEFORFMKKzEwOTcJOglTa2FyYWJvcmcKKzEwOTgJOglISUdITEFORFMKKzEwOTkJOglTdG9ja2hvbG0KKzExMDAJOglClGh1cworMTEwMQk6CUhJR0hMQU5EUworMTEwMgk6CUhJR0hMQU5EUworMTEwMwk6CUhJR0hMQU5EUworMTEwNAk6CUhJR0hMQU5EUworMTEwNQk6CUhJR0hMQU5EUworMTEwNgk6CUhJR0hMQU5EUworMTEwNwk6CUhJR0hMQU5EUworMTEwOAk6CUhJR0hMQU5EUworMTEwOQk6CUhJR0hMQU5EUworMTExMAk6CUhJR0hMQU5EUworMTExMQk6CVOUcm1sYW5kCisxMTEyCToJSElHSExBTkRTCisxMTEzCToJSElHSExBTkRTCisxMTE0CToJSElHSExBTkRTCisxMTE1CToJSElHSExBTkRTCisxMTE2CToJSElHSExBTkRTCisxMTE3CToJSElHSExBTkRTCisxMTE4CToJSElHSExBTkRTCisxMTE5CToJSElHSExBTkRTCisxMTIwCToJSElHSExBTkRTCisxMTIxCToJSElHSExBTkRTCisxMTIyCToJSElHSExBTkRTCisxMTIzCToJSElHSExBTkRTCisxMTI0CToJVU5LTk9XTgorMTEyNQk6CVOUcm1sYW5kCisxMTI2CToJU2thcmFib3JnCisxMTI3CToJU2thcmFib3JnCisxMTI4CToJQpRodXMKKzExMjkJOglClGh1cworMTEzMAk6CUhJR0hMQU5EUworMTEzMQk6CUhJR0hMQU5EUworMTEzMgk6CUKUaHVzCisxMTMzCToJSElHSExBTkRTCisxMTM0CToJSElHSExBTkRTCisxMTM1CToJSElHSExBTkRTCisxMTM2CToJSElHSExBTkRTCisxMTM3CToJSElHSExBTkRTCisxMTM4CToJSElHSExBTkRTCisxMTM5CToJQpRodXMKKzExNDAJOglClGh1cworMTE0MQk6CUhJR0hMQU5EUworMTE0Mgk6CUhJR0hMQU5EUworMTE0Mwk6CVRlbGVtYXJrCisxMTQ0CToJSElHSExBTkRTCisxMTQ1CToJSElHSExBTkRTCisxMTQ2CToJSElHSExBTkRTCisxMTQ3CToJSElHSExBTkRTCisxMTQ4CToJSElHSExBTkRTCisxMTQ5CToJSElHSExBTkRTCisxMTUwCToJSElHSExBTkRTCisxMTUxCToJSElHSExBTkRTCisxMTUyCToJR290bGFuZAorMTE1Mwk6CUhJR0hMQU5EUworMTE1NAk6CUhJR0hMQU5EUworMTE1NQk6CUhJR0hMQU5EUworMTE1Ngk6CUhJR0hMQU5EUworMTE1Nwk6CUhJR0hMQU5EUworMTE1OAk6CUhJR0hMQU5EUworMTE1OQk6CUhJR0hMQU5EUworMTE2MAk6CUhJR0hMQU5EUworMTE2MQk6CUhJR0hMQU5EUworMTE2Mgk6CUhJR0hMQU5EUworMTE2Mwk6CUhJR0hMQU5EUworMTE2NAk6CUhJR0hMQU5EUworMTE2NQk6CUhJR0hMQU5EUworMTE2Ngk6CUhJR0hMQU5EUworMTE2Nwk6CUhJR0hMQU5EUworMTE2OAk6CUhJR0hMQU5EUworMTE2OQk6CUhJR0hMQU5EUworMTE3MAk6CUhJR0hMQU5EUworMTE3MQk6CUhJR0hMQU5EUworMTE3Mgk6CUhJR0hMQU5EUworMTE3Mwk6CUhJR0hMQU5EUworMTE3NAk6CUhJR0hMQU5EUworMTE3NQk6CUhJR0hMQU5EUworMTE3Ngk6CUhJR0hMQU5EUworMTE3Nwk6CUhJR0hMQU5EUworMTE3OAk6CUF1c3QtQWdkZXIKKzExNzkJOglISUdITEFORFMKKzExODAJOglISUdITEFORFMKKzExODEJOglISUdITEFORFMKKzExODIJOglISUdITEFORFMKKzExODMJOglISUdITEFORFMKKzExODQJOglISUdITEFORFMKKzExODUJOglISUdITEFORFMKKzExODYJOglISUdITEFORFMKKzExODcJOglISUdITEFORFMKKzExODgJOglISUdITEFORFMKKzExODkJOglBdXN0LUFnZGVyCisxMTkwCToJQXVzdC1BZ2RlcgorMTE5MQk6CUhJR0hMQU5EUworMTE5Mgk6CUhJR0hMQU5EUworMTE5Mwk6CUhJR0hMQU5EUworMTE5NAk6CUhJR0hMQU5EUworMTE5NQk6CUhJR0hMQU5EUworMTE5Ngk6CUhJR0hMQU5EUworMTE5Nwk6CUhJR0hMQU5EUworMTE5OAk6CUhJR0hMQU5EUworMTE5OQk6CUhJR0hMQU5EUworMTIwMAk6CUhJR0hMQU5EUworMTIwMQk6CUhJR0hMQU5EUworMTIwMgk6CVJvZ2FsYW5kCisxMjAzCToJSElHSExBTkRTCisxMjA0CToJSElHSExBTkRTCisxMjA1CToJSElHSExBTkRTCisxMjA2CToJSElHSExBTkRTCisxMjA3CToJSElHSExBTkRTCisxMjA4CToJSElHSExBTkRTCisxMjA5CToJSElHSExBTkRTCisxMjEwCToJSElHSExBTkRTCisxMjExCToJSElHSExBTkRTCisxMjEyCToJSElHSExBTkRTCisxMjEzCToJSElHSExBTkRTCisxMjE0CToJSElHSExBTkRTCisxMjE1CToJR290bGFuZAorMTIxNgk6CUhJR0hMQU5EUworMTIxNwk6CUhJR0hMQU5EUworMTIxOAk6CUhJR0hMQU5EUworMTIxOQk6CUhJR0hMQU5EUworMTIyMAk6CUhJR0hMQU5EUworMTIyMQk6CUhJR0hMQU5EUworMTIyMgk6CUhJR0hMQU5EUworMTIyMwk6CUKUaHVzCisxMjI0CToJS2FsbWFyCisxMjI1CToJSElHSExBTkRTCisxMjI2CToJSElHSExBTkRTCisxMjI3CToJSElHSExBTkRTCisxMjI4CToJSElHSExBTkRTCisxMjI5CToJSElHSExBTkRTCisxMjMwCToJSElHSExBTkRTCisxMjMxCToJQpRodXMKKzEyMzIJOglHb3RsYW5kCisxMjMzCToJR1JBTVBJQU4KKzEyMzQJOglBdXN0LUFnZGVyCisxMjM1CToJSpRua5RwaW5nCisxMjM2CToJVmVzdC1BZ2RlcgorMTIzNwk6CVZlc3QtQWdkZXIKKzEyMzgJOglISUdITEFORFMKKzEyMzkJOglISUdITEFORFMKKzEyNDAJOglISUdITEFORFMKKzEyNDEJOglISUdITEFORFMKKzEyNDIJOglClGh1cworMTI0Mwk6CUhJR0hMQU5EUworMTI0NAk6CUhJR0hMQU5EUworMTI0NQk6CUhJR0hMQU5EUworMTI0Ngk6CUhJR0hMQU5EUworMTI0Nwk6CUhJR0hMQU5EUworMTI0OAk6CUhJR0hMQU5EUworMTI0OQk6CUhJR0hMQU5EUworMTI1MAk6CUhJR0hMQU5EUworMTI1MQk6CUhJR0hMQU5EUworMTI1Mgk6CUhJR0hMQU5EUworMTI1Mwk6CUhJR0hMQU5EUworMTI1NAk6CUhJR0hMQU5EUworMTI1NQk6CVZlc3QtQWdkZXIKKzEyNTYJOglISUdITEFORFMKKzEyNTcJOglISUdITEFORFMKKzEyNTgJOglISUdITEFORFMKKzEyNTkJOglISUdITEFORFMKKzEyNjAJOglISUdITEFORFMKKzEyNjEJOglISUdITEFORFMKKzEyNjIJOglISUdITEFORFMKKzEyNjMJOglWZXN0LUFnZGVyCisxMjY0CToJSElHSExBTkRTCisxMjY1CToJSElHSExBTkRTCisxMjY2CToJVmVzdC1BZ2RlcgorMTI2Nwk6CUhJR0hMQU5EUworMTI2OAk6CUhJR0hMQU5EUworMTI2OQk6CUhJR0hMQU5EUworMTI3MAk6CUhJR0hMQU5EUworMTI3MQk6CUhJR0hMQU5EUworMTI3Mgk6CUhJR0hMQU5EUworMTI3Mwk6CUhJR0hMQU5EUworMTI3NAk6CUhJR0hMQU5EUworMTI3NQk6CUhJR0hMQU5EUworMTI3Ngk6CUhJR0hMQU5EUworMTI3Nwk6CUhJR0hMQU5EUworMTI3OAk6CUhJR0hMQU5EUworMTI3OQk6CUhJR0hMQU5EUworMTI4MAk6CUhJR0hMQU5EUworMTI4MQk6CUKUaHVzCisxMjgyCToJQpRodXMKKzEyODMJOglISUdITEFORFMKKzEyODQJOglISUdITEFORFMKKzEyODUJOglISUdITEFORFMKKzEyODYJOglISUdITEFORFMKKzEyODcJOglClGh1cworMTI4OAk6CUhJR0hMQU5EUworMTI4OQk6CUhJR0hMQU5EUworMTI5MAk6CUhJR0hMQU5EUworMTI5MQk6CUhJR0hMQU5EUworMTI5Mgk6CUhJR0hMQU5EUworMTI5Mwk6CUhJR0hMQU5EUworMTI5NAk6CUhJR0hMQU5EUworMTI5NQk6CVZFU1QgRk9SIFNUT1JFQkFFTFQKKzEyOTYJOglISUdITEFORFMKKzEyOTcJOglISUdITEFORFMKKzEyOTgJOglClGh1cworMTI5OQk6CUKUaHVzCisxMzAwCToJSElHSExBTkRTCisxMzAxCToJSElHSExBTkRTCisxMzAyCToJSElHSExBTkRTCisxMzAzCToJSElHSExBTkRTCisxMzA0CToJSElHSExBTkRTCisxMzA1CToJSElHSExBTkRTCisxMzA2CToJSGFsbGFuZAorMTMwNwk6CUtyb25vYmVyZworMTMwOAk6CUhJR0hMQU5EUworMTMwOQk6CUhJR0hMQU5EUworMTMxMAk6CUhJR0hMQU5EUworMTMxMQk6CUhJR0hMQU5EUworMTMxMgk6CUJPUkQtQ0VOVFItRklGRS1MT1RISUFOLVRBWQorMTMxMwk6CVZFU1QgRk9SIFNUT1JFQkFFTFQKKzEzMTQJOglISUdITEFORFMKKzEzMTUJOglISUdITEFORFMKKzEzMTYJOglWRVNUIEZPUiBTVE9SRUJBRUxUCisxMzE3CToJSElHSExBTkRTCisxMzE4CToJSElHSExBTkRTCisxMzE5CToJSElHSExBTkRTCisxMzIwCToJSElHSExBTkRTCisxMzIxCToJSElHSExBTkRTCisxMzIyCToJVkVTVCBGT1IgU1RPUkVCQUVMVAorMTMyMwk6CUhJR0hMQU5EUworMTMyNAk6CUhJR0hMQU5EUworMTMyNQk6CUhJR0hMQU5EUworMTMyNgk6CUhJR0hMQU5EUworMTMyNwk6CURVTUZSSUVTLUdBTExPCisxMzI4CToJVkVTVCBGT1IgU1RPUkVCQUVMVAorMTMyOQk6CUhJR0hMQU5EUworMTMzMAk6CUtyb25vYmVyZworMTMzMQk6CUhJR0hMQU5EUworMTMzMgk6CUhJR0hMQU5EUworMTMzMwk6CUhJR0hMQU5EUworMTMzNAk6CVZFU1QgRk9SIFNUT1JFQkFFTFQKKzEzMzUJOglISUdITEFORFMKKzEzMzYJOglEVU1GUklFUy1HQUxMTworMTMzNwk6CUhJR0hMQU5EUworMTMzOAk6CUhJR0hMQU5EUworMTMzOQk6CUhJR0hMQU5EUworMTM0MAk6CVZFU1QgRk9SIFNUT1JFQkFFTFQKKzEzNDEJOglISUdITEFORFMKKzEzNDIJOglEVU1GUklFUy1HQUxMTworMTM0Mwk6CVZFU1QgRk9SIFNUT1JFQkFFTFQKKzEzNDQJOglWRVNUIEZPUiBTVE9SRUJBRUxUCisxMzQ1CToJVkVTVCBGT1IgU1RPUkVCQUVMVAorMTM0Ngk6CVZFU1QgRk9SIFNUT1JFQkFFTFQKKzEzNDcJOglWRVNUIEZPUiBTVE9SRUJBRUxUCisxMzQ4CToJVkVTVCBGT1IgU1RPUkVCQUVMVAorMTM0OQk6CVZFU1QgRk9SIFNUT1JFQkFFTFQKKzEzNTAJOglISUdITEFORFMKKzEzNTEJOglWRVNUIEZPUiBTVE9SRUJBRUxUCisxMzUyCToJVkVTVCBGT1IgU1RPUkVCQUVMVAorMTM1Mwk6CVZFU1QgRk9SIFNUT1JFQkFFTFQKKzEzNTQJOglEVU1GUklFUy1HQUxMTworMTM1NQk6CUhJR0hMQU5EUworMTM1Ngk6CUhJR0hMQU5EUworMTM1Nwk6CUhJR0hMQU5EUworMTM1OAk6CUhJR0hMQU5EUworMTM1OQk6CUhJR0hMQU5EUworMTM2MAk6CURVTUZSSUVTLUdBTExPCisxMzYxCToJVkVTVCBGT1IgU1RPUkVCQUVMVAorMTM2Mgk6CVZFU1QgRk9SIFNUT1JFQkFFTFQKKzEzNjMJOglWRVNUIEZPUiBTVE9SRUJBRUxUCisxMzY0CToJRFVNRlJJRVMtR0FMTE8KKzEzNjUJOglWRVNUIEZPUiBTVE9SRUJBRUxUCisxMzY2CToJRFVNRlJJRVMtR0FMTE8KKzEzNjcJOglWRVNUIEZPUiBTVE9SRUJBRUxUCisxMzY4CToJVkVTVCBGT1IgU1RPUkVCQUVMVAorMTM2OQk6CVZFU1QgRk9SIFNUT1JFQkFFTFQKKzEzNzAJOglWRVNUIEZPUiBTVE9SRUJBRUxUCisxMzcxCToJVkVTVCBGT1IgU1RPUkVCQUVMVAorMTM3Mgk6CVZFU1QgRk9SIFNUT1JFQkFFTFQKKzEzNzMJOglWRVNUIEZPUiBTVE9SRUJBRUxUCisxMzc0CToJRFVNRlJJRVMtR0FMTE8KKzEzNzUJOglEVU1GUklFUy1HQUxMTworMTM3Ngk6CVZFU1QgRk9SIFNUT1JFQkFFTFQKKzEzNzcJOglWRVNUIEZPUiBTVE9SRUJBRUxUCisxMzc4CToJVkVTVCBGT1IgU1RPUkVCQUVMVAorMTM3OQk6CURVTUZSSUVTLUdBTExPCisxMzgwCToJVkVTVCBGT1IgU1RPUkVCQUVMVAorMTM4MQk6CURVTUZSSUVTLUdBTExPCisxMzgyCToJVkVTVCBGT1IgU1RPUkVCQUVMVAorMTM4Mwk6CURVTUZSSUVTLUdBTExPCisxMzg0CToJRFVNRlJJRVMtR0FMTE8KKzEzODUJOglWRVNUIEZPUiBTVE9SRUJBRUxUCisxMzg2CToJVkVTVCBGT1IgU1RPUkVCQUVMVAorMTM4Nwk6CURVTUZSSUVTLUdBTExPCisxMzg4CToJQmxla2luZ2UKKzEzODkJOglLcmlzdGlhbnN0YWQKKzEzOTAJOglWRVNUIEZPUiBTVE9SRUJBRUxUCisxMzkxCToJRFVNRlJJRVMtR0FMTE8KKzEzOTIJOglEVU1GUklFUy1HQUxMTworMTM5Mwk6CURVTUZSSUVTLUdBTExPCisxMzk0CToJRFVNRlJJRVMtR0FMTE8KKzEzOTUJOglJUkVMQU5ECisxMzk2CToJSVJFTEFORAorMTM5Nwk6CUlSRUxBTkQKKzEzOTgJOglJUkVMQU5ECisxMzk5CToJTWFsbZRodXMKKzE0MDAJOglCbGVraW5nZQorMTQwMQk6CUJsZWtpbmdlCisxNDAyCToJSVJFTEFORAorMTQwMwk6CUJsZWtpbmdlCisxNDA0CToJSVJFTEFORAorMTQwNQk6CUlSRUxBTkQKKzE0MDYJOglCbGVraW5nZQorMTQwNwk6CUlSRUxBTkQKKzE0MDgJOglCbGVraW5nZQorMTQwOQk6CUJsZWtpbmdlCisxNDEwCToJQmxla2luZ2UKKzE0MTEJOglEVU1GUklFUy1HQUxMTworMTQxMgk6CU5PUlRIVU1CRVJMQU5ECisxNDEzCToJSVJFTEFORAorMTQxNAk6CUlSRUxBTkQKKzE0MTUJOglJUkVMQU5ECisxNDE2CToJSVJFTEFORAorMTQxNwk6CUJsZWtpbmdlCisxNDE4CToJSVJFTEFORAorMTQxOQk6CUlSRUxBTkQKKzE0MjAJOglJUkVMQU5ECisxNDIxCToJQmxla2luZ2UKKzE0MjIJOglJUkVMQU5ECisxNDIzCToJSVJFTEFORAorMTQyNAk6CUlSRUxBTkQKKzE0MjUJOglJUkVMQU5ECisxNDI2CToJTk9SVEhFUk4gSVJFTEFORAorMTQyNwk6CUlSRUxBTkQKKzE0MjgJOglIT1ZFRFNUQURTUkVHSU9ORU4KKzE0MjkJOglOT1JUSEVSTiBJUkVMQU5ECisxNDMwCToJSVJFTEFORAorMTQzMQk6CU5PUlRIRVJOIElSRUxBTkQKKzE0MzIJOglWRVNUIEZPUiBTVE9SRUJBRUxUCisxNDMzCToJSVJFTEFORAorMTQzNAk6CU5PUlRIRVJOIElSRUxBTkQKKzE0MzUJOglJUkVMQU5ECisxNDM2CToJSVJFTEFORAorMTQzNwk6CUlSRUxBTkQKKzE0MzgJOglJUkVMQU5ECisxNDM5CToJSVJFTEFORAorMTQ0MAk6CUlSRUxBTkQKKzE0NDEJOglJUkVMQU5ECisxNDQyCToJT1NUIEZPUiBTVE9SRUJBRUxUCisxNDQzCToJSVJFTEFORAorMTQ0NAk6CVZFU1QgRk9SIFNUT1JFQkFFTFQKKzE0NDUJOglWRVNUIEZPUiBTVE9SRUJBRUxUCisxNDQ2CToJVkVTVCBGT1IgU1RPUkVCQUVMVAorMTQ0Nwk6CVZFU1QgRk9SIFNUT1JFQkFFTFQKKzE0NDgJOglWRVNUIEZPUiBTVE9SRUJBRUxUCisxNDQ5CToJVkVTVCBGT1IgU1RPUkVCQUVMVAorMTQ1MAk6CVZFU1QgRk9SIFNUT1JFQkFFTFQKKzE0NTEJOglWRVNUIEZPUiBTVE9SRUJBRUxUCisxNDUyCToJVkVTVCBGT1IgU1RPUkVCQUVMVAorMTQ1Mwk6CVZFU1QgRk9SIFNUT1JFQkFFTFQKKzE0NTQJOglWRVNUIEZPUiBTVE9SRUJBRUxUCisxNDU1CToJSVJFTEFORAorMTQ1Ngk6CVZFU1QgRk9SIFNUT1JFQkFFTFQKKzE0NTcJOglWRVNUIEZPUiBTVE9SRUJBRUxUCisxNDU4CToJVkVTVCBGT1IgU1RPUkVCQUVMVAorMTQ1OQk6CUlSRUxBTkQKKzE0NjAJOglIT1ZFRFNUQURTUkVHSU9ORU4KKzE0NjEJOglJUkVMQU5ECisxNDYyCToJSVJFTEFORAorMTQ2Mwk6CUhPVkVEU1RBRFNSRUdJT05FTgorMTQ2NAk6CUhPVkVEU1RBRFNSRUdJT05FTgorMTQ2NQk6CUhPVkVEU1RBRFNSRUdJT05FTgorMTQ2Ngk6CUNVTUJSSUEKKzE0NjcJOglJUkVMQU5ECisxNDY4CToJSVJFTEFORAorMTQ2OQk6CU5PUlRIRVJOIElSRUxBTkQKKzE0OTEJOglJUkVMQU5ECisxNTAxCToJSVJFTEFORAorMTUwNQk6CVZFU1QgRk9SIFNUT1JFQkFFTFQKKzE1MTYJOglJUkVMQU5ECisxNTI4CToJSVJFTEFORAorMTUzMwk6CUlSRUxBTkQKKzE1MzQJOglJUkVMQU5ECisxNTM1CToJSVJFTEFORAorMTUzNwk6CUlSRUxBTkQKKzE1MzgJOglJUkVMQU5ECisxNTQwCToJSE9WRURTVEFEU1JFR0lPTkVOCisxNTQyCToJSE9WRURTVEFEU1JFR0lPTkVOCisxNTQ0CToJVkVTVCBGT1IgU1RPUkVCQUVMVAorMTU0OAk6CU5PUlRIRVJOIElSRUxBTkQKKzE1NDkJOglJUkVMQU5ECisxNTUwCToJSVJFTEFORAorMTU1MQk6CU5PUlRIRVJOIElSRUxBTkQKKzE1NTQJOglJUkVMQU5ECisxNTU2CToJSVJFTEFORAorMTU1OAk6CVZFU1QgRk9SIFNUT1JFQkFFTFQKKzE1NTkJOglJUkVMQU5ECisxNTYwCToJT1NUIEZPUiBTVE9SRUJBRUxUCisxNTY4CToJTk9SVEhFUk4gSVJFTEFORAorMTU2OQk6CUlSRUxBTkQKKzE1NzAJOglOT1JUSEVSTiBJUkVMQU5ECisxNTcxCToJT1NUIEZPUiBTVE9SRUJBRUxUCisxNTcyCToJVkVTVCBGT1IgU1RPUkVCQUVMVAorMTU3Mwk6CU9TVCBGT1IgU1RPUkVCQUVMVAorMTU3OQk6CUlSRUxBTkQKKzE1ODAJOglWRVNUIEZPUiBTVE9SRUJBRUxUCisxNTg2CToJSVJFTEFORAorMTU4OQk6CU9TVCBGT1IgU1RPUkVCQUVMVAorMTU5Mwk6CUlSRUxBTkQKKzE1OTQJOglJUkVMQU5ECisxNTk1CToJSVJFTEFORAorMTU5Ngk6CUlSRUxBTkQKKzE1OTcJOglOT1JUSEVSTiBJUkVMQU5ECisxNTk4CToJVkVTVCBGT1IgU1RPUkVCQUVMVAorMTU5OQk6CUNMRVZFTEFORAorMTYwMAk6CU5PUlRIRVJOIElSRUxBTkQKKzE2MDEJOglJUkVMQU5ECisxNjAyCToJTk9SVEhFUk4gSVJFTEFORAorMTYwMwk6CVZFU1QgRk9SIFNUT1JFQkFFTFQKKzE2MDQJOglJUkVMQU5ECisxNjA1CToJTk9SVEhFUk4gSVJFTEFORAorMTYwNgk6CVZFU1QgRk9SIFNUT1JFQkFFTFQKKzE2MDcJOglOT1JUSEVSTiBJUkVMQU5ECisxNjA4CToJVkVTVCBGT1IgU1RPUkVCQUVMVAorMTYwOQk6CU5PUlRIRVJOIElSRUxBTkQKKzE2MTAJOglOT1JUSEVSTiBJUkVMQU5ECisxNjExCToJTk9SVEhFUk4gSVJFTEFORAorMTYxMgk6CU5PUlRIRVJOIElSRUxBTkQKKzE2MTMJOglWRVNUIEZPUiBTVE9SRUJBRUxUCisxNjE0CToJTk9SVEhFUk4gSVJFTEFORAorMTYxNQk6CVZFU1QgRk9SIFNUT1JFQkFFTFQKKzE2MTYJOglOT1JUSEVSTiBJUkVMQU5ECisxNjE3CToJTk9SVEhFUk4gSVJFTEFORAorMTYxOAk6CU5PUlRIRVJOIElSRUxBTkQKKzE2MTkJOglWRVNUIEZPUiBTVE9SRUJBRUxUCisxNjIwCToJTk9SVEhFUk4gSVJFTEFORAorMTYyMQk6CUlSRUxBTkQKKzE2MjIJOglOT1JUSEVSTiBJUkVMQU5ECisxNjIzCToJT1NUIEZPUiBTVE9SRUJBRUxUCisxNjI0CToJVkVTVCBGT1IgU1RPUkVCQUVMVAorMTYyNQk6CVZFU1QgRk9SIFNUT1JFQkFFTFQKKzE2MjYJOglJUkVMQU5ECisxNjI3CToJTk9SVEhFUk4gSVJFTEFORAorMTYyOAk6CUlSRUxBTkQKKzE2MjkJOglJUkVMQU5ECisxNjMwCToJSVJFTEFORAorMTYzMQk6CU9TVCBGT1IgU1RPUkVCQUVMVAorMTYzMgk6CU9TVCBGT1IgU1RPUkVCQUVMVAorMTYzMwk6CUlSRUxBTkQKKzE2MzQJOglPU1QgRk9SIFNUT1JFQkFFTFQKKzE2MzUJOglJUkVMQU5ECisxNjM2CToJTk9SVEhFUk4gSVJFTEFORAorMTYzNwk6CUlSRUxBTkQKKzE2MzgJOglJUkVMQU5ECisxNjM5CToJTk9SVEhFUk4gSVJFTEFORAorMTY0MAk6CUlSRUxBTkQKKzE2NDEJOglOT1JUSEVSTiBJUkVMQU5ECisxNjQyCToJT1NUIEZPUiBTVE9SRUJBRUxUCisxNjQzCToJTk9SVEhFUk4gSVJFTEFORAorMTY0NAk6CUlSRUxBTkQKKzE2NDUJOglJUkVMQU5ECisxNjQ2CToJSVJFTEFORAorMTY0Nwk6CUlSRUxBTkQKKzE2NDgJOglPU1QgRk9SIFNUT1JFQkFFTFQKKzE2NDkJOglJUkVMQU5ECisxNjUwCToJSVJFTEFORAorMTY1MQk6CVZFU1QgRk9SIFNUT1JFQkFFTFQKKzE2NTIJOglJUkVMQU5ECisxNjUzCToJR2RhbnNrCisxNjU0CToJVkVTVCBGT1IgU1RPUkVCQUVMVAorMTY1NQk6CU9TVCBGT1IgU1RPUkVCQUVMVAorMTY1Ngk6CUlSRUxBTkQKKzE2NTcJOglJUkVMQU5ECisxNjU4CToJSVJFTEFORAorMTY1OQk6CVN1d2Fsc2tpCisxNjYwCToJVkVTVCBGT1IgU1RPUkVCQUVMVAorMTY2MQk6CUlSRUxBTkQKKzE2NjIJOglWRVNUIEZPUiBTVE9SRUJBRUxUCisxNjYzCToJSVJFTEFORAorMTY2NAk6CVZFU1QgRk9SIFNUT1JFQkFFTFQKKzE2NjUJOglJUkVMQU5ECisxNjY2CToJVkVTVCBGT1IgU1RPUkVCQUVMVAorMTY2Nwk6CVZFU1QgRk9SIFNUT1JFQkFFTFQKKzE2NjgJOglPU1QgRk9SIFNUT1JFQkFFTFQKKzE2NjkJOglOT1JUSEVSTiBJUkVMQU5ECisxNjcwCToJVU5JVEVEIEtJTkdET00KKzE2NzEJOglPU1QgRk9SIFNUT1JFQkFFTFQKKzE2NzIJOglPU1QgRk9SIFNUT1JFQkFFTFQKKzE2NzMJOglLYWxpbmluZ3JhZCBvYmwuCisxNjc0CToJVkVTVCBGT1IgU1RPUkVCQUVMVAorMTY3NQk6CUlSRUxBTkQKKzE2NzYJOglWRVNUIEZPUiBTVE9SRUJBRUxUCisxNjc3CToJSVJFTEFORAorMTY3OAk6CU9TVCBGT1IgU1RPUkVCQUVMVAorMTY3OQk6CVZFU1QgRk9SIFNUT1JFQkFFTFQKKzE2ODAJOglTbHVwc2sKKzE2ODEJOglWRVNUIEZPUiBTVE9SRUJBRUxUCisxNjgyCToJSVJFTEFORAorMTY4Mwk6CVZFU1QgRk9SIFNUT1JFQkFFTFQKKzE2ODQJOglPU1QgRk9SIFNUT1JFQkFFTFQKKzE2ODUJOglTQ0hMRVNXSUctSE9MU1RFSU4KKzE2ODYJOglWRVNUIEZPUiBTVE9SRUJBRUxUCisxNjg3CToJSVJFTEFORAorMTY4OAk6CUlSRUxBTkQKKzE2ODkJOglWRVNUIEZPUiBTVE9SRUJBRUxUCisxNjkwCToJSVJFTEFORAorMTY5MQk6CUlSRUxBTkQKKzE2OTIJOglJUkVMQU5ECisxNjkzCToJVkVTVCBGT1IgU1RPUkVCQUVMVAorMTY5NAk6CU9TVCBGT1IgU1RPUkVCQUVMVAorMTY5NQk6CUlSRUxBTkQKKzE2OTYJOglJUkVMQU5ECisxNjk3CToJT1NUIEZPUiBTVE9SRUJBRUxUCisxNjk4CToJT1NUIEZPUiBTVE9SRUJBRUxUCisxNjk5CToJT1NUIEZPUiBTVE9SRUJBRUxUCisxNzAwCToJVkVTVCBGT1IgU1RPUkVCQUVMVAorMTcwMQk6CU9TVCBGT1IgU1RPUkVCQUVMVAorMTcwMgk6CVZFU1QgRk9SIFNUT1JFQkFFTFQKKzE3MDMJOglOT1JUSCBZT1JLU0hJUkUKKzE3MDQJOglJUkVMQU5ECisxNzA1CToJT1NUIEZPUiBTVE9SRUJBRUxUCisxNzA2CToJSVJFTEFORAorMTcwNwk6CVZFU1QgRk9SIFNUT1JFQkFFTFQKKzE3MDgJOglWRVNUIEZPUiBTVE9SRUJBRUxUCisxNzA5CToJSVJFTEFORAorMTcxMAk6CU9TVCBGT1IgU1RPUkVCQUVMVAorMTcxMQk6CVZFU1QgRk9SIFNUT1JFQkFFTFQKKzE3MTIJOglJUkVMQU5ECisxNzEzCToJVkVTVCBGT1IgU1RPUkVCQUVMVAorMTcxNAk6CUlSRUxBTkQKKzE3MTUJOglPU1QgRk9SIFNUT1JFQkFFTFQKKzE3MTYJOglPU1QgRk9SIFNUT1JFQkFFTFQKKzE3MTcJOglPbHN6dHluCisxNzE4CToJVkVTVCBGT1IgU1RPUkVCQUVMVAorMTcxOQk6CVZFU1QgRk9SIFNUT1JFQkFFTFQKKzE3MjAJOglWRVNUIEZPUiBTVE9SRUJBRUxUCisxNzIxCToJVkVTVCBGT1IgU1RPUkVCQUVMVAorMTcyMgk6CVZFU1QgRk9SIFNUT1JFQkFFTFQKKzE3MjMJOglPU1QgRk9SIFNUT1JFQkFFTFQKKzE3MjQJOglFbGJsYWcKKzE3MjUJOglVTktOT1dOCisxNzI2CToJVkVTVCBGT1IgU1RPUkVCQUVMVAorMTcyNwk6CUlSRUxBTkQKKzE3MjgJOglJUkVMQU5ECisxNzI5CToJT1NUIEZPUiBTVE9SRUJBRUxUCisxNzMwCToJT1NUIEZPUiBTVE9SRUJBRUxUCisxNzMxCToJT1NUIEZPUiBTVE9SRUJBRUxUCisxNzMyCToJT1NUIEZPUiBTVE9SRUJBRUxUCisxNzMzCToJVkVTVCBGT1IgU1RPUkVCQUVMVAorMTczNAk6CUlSRUxBTkQKKzE3MzUJOglPU1QgRk9SIFNUT1JFQkFFTFQKKzE3MzYJOglPU1QgRk9SIFNUT1JFQkFFTFQKKzE3MzcJOglPU1QgRk9SIFNUT1JFQkFFTFQKKzE3MzgJOglVTklURUQgS0lOR0RPTQorMTczOQk6CUlSRUxBTkQKKzE3NDAJOglJUkVMQU5ECisxNzQxCToJSVJFTEFORAorMTc0Mgk6CU1FQ0tMRU5CVVJHLVZPUlBPTU1FUk4KKzE3NDMJOglJUkVMQU5ECisxNzQ0CToJQ0hFTU5JVFoKKzE3NDUJOglMQU5DQVNISVJFCisxNzQ2CToJSVJFTEFORAorMTc0Nwk6CUlSRUxBTkQKKzE3NDgJOglJUkVMQU5ECisxNzQ5CToJS29zemFsaW4KKzE3NTAJOglJUkVMQU5ECisxNzUxCToJSVJFTEFORAorMTc1Mgk6CUlSRUxBTkQKKzE3NTMJOglJUkVMQU5ECisxNzU0CToJQ0hFTU5JVFoKKzE3NTUJOglJUkVMQU5ECisxNzU2CToJSVJFTEFORAorMTc1Nwk6CUlSRUxBTkQKKzE3NTgJOglJUkVMQU5ECisxNzU5CToJSVJFTEFORAorMTc2MAk6CUlSRUxBTkQKKzE3NjEJOglPU1QgRk9SIFNUT1JFQkFFTFQKKzE3NjIJOglJUkVMQU5ECisxNzYzCToJT1NUIEZPUiBTVE9SRUJBRUxUCisxNzY0CToJT1NUIEZPUiBTVE9SRUJBRUxUCisxNzY1CToJT1NUIEZPUiBTVE9SRUJBRUxUCisxNzY2CToJTUVDS0xFTkJVUkctVk9SUE9NTUVSTgorMTc2Nwk6CUlSRUxBTkQKKzE3NjgJOglJUkVMQU5ECisxNzY5CToJSVJFTEFORAorMTc3MAk6CUlSRUxBTkQKKzE3NzEJOglJUkVMQU5ECisxNzcyCToJSVJFTEFORAorMTc3Mwk6CUlSRUxBTkQKKzE3NzQJOglPU1QgRk9SIFNUT1JFQkFFTFQKKzE3NzUJOglJUkVMQU5ECisxNzc2CToJSVJFTEFORAorMTc3Nwk6CUlSRUxBTkQKKzE3NzgJOglJUkVMQU5ECisxNzc5CToJSVJFTEFORAorMTc4MAk6CUlSRUxBTkQKKzE3ODEJOglJUkVMQU5ECisxNzgyCToJTUVDS0xFTkJVUkctVk9SUE9NTUVSTgorMTc4Mwk6CUNIRU1OSVRaCisxNzg0CToJTUVDS0xFTkJVUkctVk9SUE9NTUVSTgorMTc4NQk6CUJpYWx5c3RvaworMTc4Ngk6CUlSRUxBTkQKKzE3ODcJOglJUkVMQU5ECisxNzg4CToJQ0hFTU5JVFoKKzE3ODkJOglJUkVMQU5ECisxNzkwCToJTUVDS0xFTkJVUkctVk9SUE9NTUVSTgorMTc5MQk6CU1FQ0tMRU5CVVJHLVZPUlBPTU1FUk4KKzE3OTIJOglIVU1CRVJTSURFCisxNzkzCToJTG9temEKKzE3OTQJOglJUkVMQU5ECisxNzk1CToJSVJFTEFORAorMTc5Ngk6CU1FQ0tMRU5CVVJHLVZPUlBPTU1FUk4KKzE3OTcJOglJUkVMQU5ECisxNzk4CToJSVJFTEFORAorMTc5OQk6CU1FQ0tMRU5CVVJHLVZPUlBPTU1FUk4KKzE4MDAJOglJUkVMQU5ECisxODAxCToJSVJFTEFORAorMTgwMgk6CUlSRUxBTkQKKzE4MDMJOglJUkVMQU5ECisxODA0CToJSVJFTEFORAorMTgwNQk6CUlSRUxBTkQKKzE4MDYJOglNRUNLTEVOQlVSRy1WT1JQT01NRVJOCisxODA3CToJSVJFTEFORAorMTgwOAk6CVdFU1QgWU9SS1NISVJFCisxODA5CToJTUVDS0xFTkJVUkctVk9SUE9NTUVSTgorMTgxMAk6CU1FQ0tMRU5CVVJHLVZPUlBPTU1FUk4KKzE4MTEJOglJUkVMQU5ECisxODEyCToJQnlkZ29zemN6CisxODEzCToJSVJFTEFORAorMTgxNAk6CVN6Y3plY2luCisxODE1CToJSVJFTEFORAorMTgxNgk6CU1FQ0tMRU5CVVJHLVZPUlBPTU1FUk4KKzE4MTcJOglNRVJTRVlTSURFCisxODE4CToJV0VTRVItRU1TCisxODE5CToJSVJFTEFORAorMTgyMAk6CUlSRUxBTkQKKzE4MjEJOglPc3Ryb2xla2EKKzE4MjIJOglHUkVBVEVSIE1BTkNIRVNURVIKKzE4MjMJOglTemN6ZWNpbgorMTgyNAk6CUNMV1lECisxODI1CToJTUVDS0xFTkJVUkctVk9SUE9NTUVSTgorMTgyNgk6CUNMV1lECisxODI3CToJU09VVEggWU9SS1NISVJFCisxODI4CToJSVJFTEFORAorMTgyOQk6CU1FQ0tMRU5CVVJHLVZPUlBPTU1FUk4KKzE4MzAJOglJUkVMQU5ECisxODMxCToJSVJFTEFORAorMTgzMgk6CU1FUlNFWVNJREUKKzE4MzMJOglJUkVMQU5ECisxODM0CToJVG9ydW4KKzE4MzUJOglERVJCWVNISVJFCisxODM2CToJSVJFTEFORAorMTgzNwk6CUlSRUxBTkQKKzE4MzgJOglDSEVTSElSRQorMTgzOQk6CUNMV1lECisxODQwCToJSVJFTEFORAorMTg0MQk6CUlSRUxBTkQKKzE4NDIJOglJUkVMQU5ECisxODQzCToJSVJFTEFORAorMTg0NAk6CUlSRUxBTkQKKzE4NDUJOglTemN6ZWNpbgorMTg0Ngk6CUlSRUxBTkQKKzE4NDcJOglJUkVMQU5ECisxODQ4CToJTElOQ09MTlNISVJFCisxODQ5CToJSVJFTEFORAorMTg1MAk6CUlSRUxBTkQKKzE4NTEJOglXRVNFUi1FTVMKKzE4NTIJOglJUkVMQU5ECisxODUzCToJQ2llY2hhbm93CisxODU0CToJSVJFTEFORAorMTg1NQk6CVBpbGEKKzE4NTYJOglNRVJTRVlTSURFCisxODU3CToJTFVFTkVCVVJHCisxODU4CToJV0VTRVItRU1TCisxODU5CToJSVJFTEFORAorMTg2MAk6CUlSRUxBTkQKKzE4NjEJOglXRVNFUi1FTVMKKzE4NjIJOglJUkVMQU5ECisxODYzCToJV0VTRVItRU1TCisxODY0CToJSEFNQlVSRworMTg2NQk6CVdFU0VSLUVNUworMTg2Ngk6CVdFU0VSLUVNUworMTg2Nwk6CVdFU0VSLUVNUworMTg2OAk6CVdFU0VSLUVNUworMTg2OQk6CVNIUk9QU0hJUkUKKzE4NzAJOglXRVNFUi1FTVMKKzE4NzEJOglJUkVMQU5ECisxODcyCToJV0VTRVItRU1TCisxODczCToJSVJFTEFORAorMTg3NAk6CUlSRUxBTkQKKzE4NzUJOglXRVNFUi1FTVMKKzE4NzYJOglJUkVMQU5ECisxODc3CToJV0VTRVItRU1TCisxODc4CToJSVJFTEFORAorMTg3OQk6CUlSRUxBTkQKKzE4ODAJOglXbG9jbGF3ZWsKKzE4ODEJOglHUk9OSU5HRU4KKzE4ODIJOglHUk9OSU5HRU4KKzE4ODMJOglHUk9OSU5HRU4KKzE4ODQJOglGUklFU0xBTkQKKzE4ODUJOglCUkFOREVOQlVSRworMTg4Ngk6CUNMV1lECisxODg3CToJR29yem93CisxODg4CToJRlJJRVNMQU5ECisxODg5CToJRlJJRVNMQU5ECisxODkwCToJRlJJRVNMQU5ECisxODkxCToJR1JPTklOR0VOCisxODkyCToJSVJFTEFORAorMTg5Mwk6CUZSSUVTTEFORAorMTg5NAk6CUlSRUxBTkQKKzE4OTUJOglQbG9jaworMTg5Ngk6CVNpZWRsY2UKKzE4OTcJOglGUklFU0xBTkQKKzE4OTgJOglGUklFU0xBTkQKKzE4OTkJOglJUkVMQU5ECisxOTAwCToJTEVJQ0VTVEVSU0hJUkUKKzE5MDEJOglJUkVMQU5ECisxOTAyCToJSVJFTEFORAorMTkwMwk6CUlSRUxBTkQKKzE5MDQJOglJUkVMQU5ECisxOTA1CToJSVJFTEFORAorMTkwNgk6CUlSRUxBTkQKKzE5MDcJOglJUkVMQU5ECisxOTA4CToJRUFTVCBBTkdMSUEKKzE5MDkJOglJUkVMQU5ECisxOTEwCToJTk9PUkQtSE9MTEFORAorMTkxMQk6CUlSRUxBTkQKKzE5MTIJOglJUkVMQU5ECisxOTEzCToJSVJFTEFORAorMTkxNAk6CUJSRU1FTgorMTkxNQk6CURSRU5USEUKKzE5MTYJOglJUkVMQU5ECisxOTE3CToJQmlhbGEgUG9kbGFza2EKKzE5MTgJOglXYXJzemF3YQorMTkxOQk6CVdFU1QgTUlETEFORFMgKENPVU5UWSkKKzE5MjAJOglVTktOT1dOCisxOTIxCToJSEVSRUZPUkQKKzE5MjIJOglJUkVMQU5ECisxOTIzCToJRlJJRVNMQU5ECisxOTI0CToJSVJFTEFORAorMTkyNQk6CUlSRUxBTkQKKzE5MjYJOglJUkVMQU5ECisxOTI3CToJSVJFTEFORAorMTkyOAk6CUlSRUxBTkQKKzE5MjkJOglJUkVMQU5ECisxOTMwCToJSVJFTEFORAorMTkzMQk6CVBvem5hbgorMTkzMgk6CUlSRUxBTkQKKzE5MzMJOglNQUdERUJVUkcKKzE5MzQJOglJUkVMQU5ECisxOTM1CToJTk9PUkQtSE9MTEFORAorMTkzNgk6CUhBTk5PVkVSCisxOTM3CToJSVJFTEFORAorMTkzOAk6CUlSRUxBTkQKKzE5MzkJOglJUkVMQU5ECisxOTQwCToJSVJFTEFORAorMTk0MQk6CUlSRUxBTkQKKzE5NDIJOglJUkVMQU5ECisxOTQzCToJSVJFTEFORAorMTk0NAk6CVNraWVybmlld2ljZQorMTk0NQk6CUlSRUxBTkQKKzE5NDYJOglLb25pbgorMTk0Nwk6CUlSRUxBTkQKKzE5NDgJOglJUkVMQU5ECisxOTQ5CToJT1ZFUklKU1NFTAorMTk1MAk6CUlSRUxBTkQKKzE5NTEJOglGTEVWT0xBTkQKKzE5NTIJOglJUkVMQU5ECisxOTUzCToJSVJFTEFORAorMTk1NAk6CUlSRUxBTkQKKzE5NTUJOglJUkVMQU5ECisxOTU2CToJSVJFTEFORAorMTk1Nwk6CUJSQVVOU0NIV0VJRworMTk1OAk6CUlSRUxBTkQKKzE5NTkJOglCRVJMSU4KKzE5NjAJOglGTEVWT0xBTkQKKzE5NjEJOglCRURGT1JEU0hJUkUKKzE5NjIJOglCRVJLUworMTk2Mwk6CUFWT04KKzE5NjQJOglHV0VOVAorMTk2NQk6CUdFTERFUkxBTkQKKzE5NjYJOglSYWRvbQorMTk2Nwk6CVppZWxvbmEgR29yYQorMTk2OAk6CUx1YmxpbgorMTk2OQk6CURFVE1PTEQKKzE5NzAJOglDaGVsbQorMTk3MQk6CUxvZHoKKzE5NzIJOglNVUVOU1RFUgorMTk3Mwk6CUthbGlzegorMTk3NAk6CVNpZXJhZHoKKzE5NzUJOglaVUlELUhPTExBTkQKKzE5NzYJOglMZXN6bm8KKzE5NzcJOglFU1NFWAorMTk3OAk6CVVUUkVDSFQKKzE5NzkJOglQaW90cmtvdworMTk4MAk6CURFU1NBVQorMTk4MQk6CUVTU0VYCisxOTgyCToJRVNTRVgKKzE5ODMJOglFU1NFWAorMTk4NAk6CUVTU0VYCisxOTg1CToJRVNTRVgKKzE5ODYJOglFU1NFWAorMTk4Nwk6CVpVSUQtSE9MTEFORAorMTk4OAk6CUdSRUFURVIgTE9ORE9OCisxOTg5CToJVU5LTk9XTgorMTk5MAk6CUVTU0VYCisxOTkxCToJRVNTRVgKKzE5OTIJOglFU1NFWAorMTk5Mwk6CUxlZ25pY2EKKzE5OTQJOglXcm9jbGF3CisxOTk1CToJRFVFU1NFTERPUkYKKzE5OTYJOglaVUlELUhPTExBTkQKKzE5OTcJOglIQUxMRQorMTk5OAk6CURPUlNFVAorMTk5OQk6CUNPUk5XQUxMCisyMDAxCToJTk9PUkQtQlJBQkFOVAorMjAwMgk6CVphbW9zYworMjAwNAk6CVNVUlJFWQorMjAwNQk6CVpVSUQtSE9MTEFORAorMjAwNgk6CUxJTUJVUkcKKzIwMDcJOglIQU1QU0hJUkUKKzIwMDgJOglaRUVMQU5ECisyMDA5CToJS2llbGNlCisyMDEwCToJS0VOVAorMjAxMQk6CUFSTlNCRVJHCisyMDEyCToJVGFybm9icnplZworMjAxMwk6CUxFSVBaSUcKKzIwMTQJOglEUkVTREVOCisyMDE1CToJS0VOVAorMjAxNgk6CUplbGVuaWEgR29yYQorMjAxNwk6CUtFTlQKKzIwMTgJOglLRU5UCisyMDE5CToJS0VOVAorMjAyMAk6CVRIVVJJTkdFTgorMjAyMQk6CUtBU1NFTAorMjAyMgk6CVVOS05PV04KKzIwMjMJOglDemVzdG9jaG93YQorMjAyNAk6CUFOVFdFUlBFTgorMjAyNQk6CVVOS05PV04KKzIwMjYJOglaRUVMQU5ECisyMDI3CToJQU5UV0VSUEVOCisyMDI4CToJV0VTVC1WTEFBTkRFUkVOCisyMDI5CToJT3BvbGUKKzIwMzAJOglXRVNULVZMQUFOREVSRU4KKzIwMzEJOglEUkVTREVOCisyMDMyCToJT09TVC1WTEFBTkRFUkVOCisyMDMzCToJTElNQlVSRworMjAzNAk6CU5PUkQgLSBQQVMtREUtQ0FMQUlTCisyMDM1CToJV2FsYnJ6eWNoCisyMDM2CToJS09FTE4KKzIwMzcJOglQcnplbXlzbAorMjAzOAk6CUhBTVBTSElSRQorMjAzOQk6CUhBTVBTSElSRQorMjA0MAk6CVNldmVyb2Nlc2t5IGtyYWoKKzIwNDEJOglDSEVNTklUWgorMjA0Mgk6CVJ6ZXN6b3cKKzIwNDMJOglVTktOT1dOCisyMDQ0CToJS2F0b3dpY2UKKzIwNDUJOglCUlVYRUxMRVMtQlJVU1NFTAorMjA0Ngk6CUdJRVNTRU4KKzIwNDcJOglWeWNob2RvY2Vza3kga3JhagorMjA0OAk6CUNPUk5XQUxMCisyMDQ5CToJQ09STldBTEwKKzIwNTAJOglIQUlOQVVUCisyMDUxCToJQ09STldBTEwKKzIwNTIJOglUYXJub3cKKzIwNTMJOglLT0JMRU5aCisyMDU0CToJQ09STldBTEwKKzIwNTUJOglDT1JOV0FMTAorMjA1Ngk6CUhBSU5BVVQKKzIwNTcJOglDT1JOV0FMTAorMjA1OAk6CUNPUk5XQUxMCisyMDU5CToJS3Jha293CisyMDYwCToJTklWRUxMRVMKKzIwNjEJOglMSUVHRQorMjA2Mgk6CUxJTUJVUkcKKzIwNjMJOglTdHJlZG9jZXNreSBrcmFqCisyMDY0CToJTkFNVVIKKzIwNjUJOglTZXZlcm9tb3JhdnNreSBrcmFqCisyMDY2CToJUElDQVJESUUKKzIwNjcJOglCaWVsc2tvLUJpYWxhCisyMDY4CToJVU5URVJGUkFOS0VOCisyMDY5CToJS3Jvc25vCisyMDcwCToJT0JFUkZSQU5LRU4KKzIwNzEJOglaYXBhZG9jZXNreSBrcmFqCisyMDcyCToJREFSTVNUQURUCisyMDczCToJTFVYRU1CT1VSRworMjA3NAk6CVRSSUVSCisyMDc1CToJTm93eSBTYWN6CisyMDc2CToJSEFVVEUtTk9STUFORElFCisyMDc3CToJUHJhaGEKKzIwNzgJOglVTklURUQgS0lOR0RPTQorMjA3OQk6CUNIQU1QQUdORS1BUkRFTk5FCisyMDgwCToJQkFTU0UtTk9STUFORElFCisyMDgxCToJTFVYRU1CT1VSRyAoR1JBTkQtRFVDSEUpCisyMDgyCToJWWNob2Rvc2xvdmVuc2tpIGtyYWoKKzIwODMJOglPQkVSUEZBTFoKKzIwODQJOglSSEVJTkhFU1NFTi1QRkFMWgorMjA4NQk6CVN0cmVkb2xzbG92ZW5za3kga3JhagorMjA4Ngk6CVVOSVRFRCBLSU5HRE9NCisyMDg3CToJSmlob21vcmF2c2t5IGtyYWoKKzIwODgJOglVTklURUQgS0lOR0RPTQorMjA4OQk6CU1JVFRFTEZSQU5LRU4KKzIwOTAJOglKaWhvY2Vza3kga3JhagorMjA5MQk6CVNUVVRUR0FSVAorMjA5Mgk6CUxPUlJBSU5FCisyMDkzCToJS0FSTFNSVUhFCisyMDk0CToJU0FBUkxBTkQKKzIwOTUJOglCb3Rvc2FuaQorMjA5Ngk6CUJSRVRBR05FCisyMDk3CToJSUxFIERFIEZSQU5DRQorMjA5OAk6CUJSRVRBR05FCisyMDk5CToJQlJFVEFHTkUKKzIxMDAJOglaYXBhZG9zbG92ZW5za3kga3JhagorMjEwMQk6CUJBU1NFLU5PUk1BTkRJRQorMjEwMgk6CUJSRVRBR05FCisyMTAzCToJTklFREVSQkFZRVJOCisyMTA0CToJQm9yc29kLUFiYXVqLVplbXBsZW4KKzIxMDUJOglTdWNlYXZhCisyMTA2CToJQ0VOVFJFCisyMTA3CToJU3phYm9sY3MtU3phdGFyLUJlcmVnCisyMTA4CToJTmllZGVylHN0ZXJyZWljaAorMjEwOQk6CU9CRVJCQVlFUk4KKzIxMTAJOglBTFNBQ0UKKzIxMTEJOglJYXNpCisyMTEyCToJU0NIV0FCRU4KKzIxMTMJOglNYXJhbXVyZXMKKzIxMTQJOglTYXR1IE1hcmUKKzIxMTUJOglQQVlTIERFIExBIExPSVJFCisyMTE2CToJT2JlcpRzdGVycmVpY2gKKzIxMTcJOglCaXN0cml0YS1OYXNhdWQKKzIxMTgJOglOb2dyYWQKKzIxMTkJOglGUkVJQlVSRworMjEyMAk6CUhldmVzCisyMTIxCToJVFVFQklOR0VOCisyMTIyCToJTmVhbXQKKzIxMjMJOglIYWpkdS1CaWhhcgorMjEyNAk6CVdpZW4KKzIxMjUJOglCT1VSR09HTkUKKzIxMjYJOglCcmF0aXNsYXZhCisyMTI3CToJVmFzbHVpCisyMTI4CToJUGVzdAorMjEyOQk6CUJ1cmdlbmxhbmQKKzIxMzAJOglDbHVqCisyMTMxCToJQmlob3IKKzIxMzIJOglIYXJnaGl0YQorMjEzMwk6CUJSRVRBR05FCisyMTM0CToJU2FsYWoKKzIxMzUJOglHeZRyLU1vc29uLVNvcHJvbgorMjEzNgk6CUphc3otTmFneWt1bi1Tem9sbm9rCisyMTM3CToJTXVyZXMKKzIxMzgJOglCYWNhdQorMjEzOQk6CUtvbWFyb20tRXN6dGVyZ29tCisyMTQwCToJU2FsemJ1cmcKKzIxNDEJOglGUkFOQ0hFLUNPTVRFCisyMTQyCToJRmVqZXIKKzIxNDMJOglCUkVUQUdORQorMjE0NAk6CUJSRVRBR05FCisyMTQ1CToJU3RlaWVybWFyaworMjE0Ngk6CUZlamVyCisyMTQ3CToJQlJFVEFHTkUKKzIxNDgJOglCZWtlcworMjE0OQk6CVZlc3pwcmVtCisyMTUwCToJVU5LTk9XTgorMjE1MQk6CVNjaGFmZmhhdXNlbgorMjE1Mgk6CVRpcm9sCisyMTUzCToJR2FsYXRpCisyMTU0CToJVmFzCisyMTU1CToJVGh1cmdhdQorMjE1Ngk6CVNjaGFmZmhhdXNlbgorMjE1Nwk6CVRodXJnYXUKKzIxNTgJOgladXJpY2gKKzIxNTkJOglWcmFuY2VhCisyMTYwCToJQWFyZ2F1CisyMTYxCToJQmFjcy1LaXNrdW4KKzIxNjIJOglCYXNlbC1TdGFkdAorMjE2Mwk6CVp1cmljaAorMjE2NAk6CVZvcmFsYmVyZworMjE2NQk6CUJhc2VsLUxhbmRzY2hhZnQKKzIxNjYJOglDb3Zhc25hCisyMTY3CToJU2Fua3QgR2FsbGVuCisyMTY4CToJQmVybi9CZXJuZQorMjE2OQk6CVBPSVRPVS1DSEFSRU5URVMKKzIxNzAJOglCYXNlbC1TdGFkdAorMjE3MQk6CVNvbG90aHVybgorMjE3Mgk6CVNhbmt0IEdhbGxlbgorMjE3Mwk6CUFwcGVuemVsbCBBdXNzZXJyaG9kZW4KKzIxNzQJOglBbGJhCisyMTc1CToJQmFzZWwtU3RhZHQKKzIxNzYJOglBcHBlbnplbGwgSW5uZXJyaG9kZW4KKzIxNzcJOglBcHBlbnplbGwgSW5uZXJyaG9kZW4KKzIxNzgJOglBcmFkCisyMTc5CToJQ3NvbmdyYWQKKzIxODAJOglBcHBlbnplbGwgSW5uZXJyaG9kZW4KKzIxODEJOglVTktOT1dOCisyMTgyCToJQnJhc292CisyMTgzCToJU2liaXUKKzIxODQJOglaYWxhCisyMTg1CToJU29tb2d5CisyMTg2CToJVHVsY2VhCisyMTg3CToJTHV6ZXJuCisyMTg4CToJVG9sbmEKKzIxODkJOglMaWNodGVuc3RlaW4KKzIxOTAJOgladWcKKzIxOTEJOglTY2h3eXoKKzIxOTIJOglUaXJvbAorMjE5Mwk6CUJ1emF1CisyMTk0CToJS4RybnRlbgorMjE5NQk6CU5ldWNoYXRlbAorMjE5Ngk6CUh1bmVkb2FyYQorMjE5Nwk6CVVOS05PV04KKzIxOTgJOglHbGFydXMKKzIxOTkJOglVTktOT1dOCisyMjAwCToJVU5LTk9XTgorMjIwMQk6CVRSRU5USU5PLUFMVE8gQURJR0UKKzIyMDIJOglTbG92ZW5pamEKKzIyMDMJOglVTktOT1dOCisyMjA0CToJU2Nod3l6CisyMjA1CToJR3JhdWKBbmRlbi9HcmlnaW9uaS9HcmlzY2h1bgorMjIwNgk6CUJyYWlsYQorMjIwNwk6CVVOS05PV04KKzIyMDgJOglGcmlib3VyZy9GcmVpYnVyZworMjIwOQk6CU1pZHdhbGRlbgorMjIxMAk6CVNjaHd5egorMjIxMQk6CU5ldWNoYXRlbAorMjIxMgk6CVVyaQorMjIxMwk6CU9id2FsZGVuCisyMjE0CToJVU5LTk9XTgorMjIxNQk6CUFVVkVSR05FCisyMjE2CToJVmF1ZAorMjIxNwk6CUZyaWJvdXJnL0ZyZWlidXJnCisyMjE4CToJTmV1Y2hhdGVsCisyMjE5CToJTmV1Y2hhdGVsCisyMjIwCToJT2J3YWxkZW4KKzIyMjEJOglQcmFob3ZhCisyMjIyCToJQmFyYW55YQorMjIyMwk6CUZyaWJvdXJnL0ZyZWlidXJnCisyMjI0CToJSHJ2YXRza2EKKzIyMjUJOglUaW1pcworMjIyNgk6CUZyaWJvdXJnL0ZyZWlidXJnCisyMjI3CToJQXJnZXMKKzIyMjgJOglVTktOT1dOCisyMjI5CToJVU5LTk9XTgorMjIzMAk6CVBPSVRPVS1DSEFSRU5URVMKKzIyMzEJOglWRU5FVE8KKzIyMzIJOglWb2p2b2RpbmEKKzIyMzMJOglGUklVTEktVkVORVpJQSBHSVVMSUEKKzIyMzQJOglMSU1PVVNJTgorMjIzNQk6CVZpbGNlYQorMjIzNgk6CVZhbGFpcy9XYWxsaXMKKzIyMzcJOglEaW1ib3ZpdGEKKzIyMzgJOglMT01CQVJESUEKKzIyMzkJOglUaWNpbm8KKzIyNDAJOglSSE9ORS1BTFBFUworMjI0MQk6CVVOS05PV04KKzIyNDIJOglDYWxhcmFzaQorMjI0Mwk6CUNhbGFyYXNpCisyMjQ0CToJUElFTU9OVEUKKzIyNDUJOglDYXJhcy1TZXZlcmluCisyMjQ2CToJSWFsb21pdGEKKzIyNDcJOglWYXVkCisyMjQ4CToJVmF1ZAorMjI0OQk6CUdlbop2ZQorMjI1MAk6CUdvcmoKKzIyNTEJOglCdWN1cmVzdGkKKzIyNTIJOglDb25zdGFudGEKKzIyNTMJOglBUVVJVEFJTkUKKzIyNTQJOglWQUxMRSBEJ0FPU1RBCisyMjU1CToJT2x0CisyMjU2CToJTWVoZWRpbnRpCisyMjU3CToJRlJJVUxJLVZFTkVaSUEgR0lVTElBCisyMjU4CToJR2l1cmdpdQorMjI1OQk6CUZSSVVMSS1WRU5FWklBIEdJVUxJQQorMjI2MAk6CUZSSVVMSS1WRU5FWklBIEdJVUxJQQorMjI2MQk6CVRlbGVvcm1hbgorMjI2Mgk6CURvbGoKKzIyNjMJOglSYXpncmFkCisyMjY0CToJVmFybmEKKzIyNjUJOglTcmJpamEKKzIyNjYJOglCb3NuYSBpIEhlcmNlZ292aW5hCisyMjY3CToJR2l1cmdpdQorMjI2OAk6CUhydmF0c2thCisyMjY5CToJVkVORVRPCisyMjcwCToJSHJ2YXRza2EKKzIyNzEJOglWRU5FVE8KKzIyNzIJOglSYXpncmFkCisyMjczCToJSHJ2YXRza2EKKzIyNzQJOglNSURJLVBZUkVORUVTCisyMjc1CToJVmFybmEKKzIyNzYJOglQUk9WRU5DRS1BTFBFUy1DT1RFIEQnQVpVUgorMjI3Nwk6CVZFTkVUTworMjI3OAk6CVZhcm5hCisyMjc5CToJRU1JTElBLVJPTUFHTkEKKzIyODAJOglIcnZhdHNrYQorMjI4MQk6CUxBTkdVRURPQy1ST1VTU0lMTE9OCisyMjgyCToJSHJ2YXRza2EKKzIyODMJOglNaWhhamxvdmdyYWQKKzIyODQJOglWRU5FVE8KKzIyODUJOglHQUxJQ0lBCisyMjg2CToJVkVORVRPCisyMjg3CToJSHJ2YXRza2EKKzIyODgJOglIcnZhdHNrYQorMjI4OQk6CUhydmF0c2thCisyMjkwCToJVkVORVRPCisyMjkxCToJSHJ2YXRza2EKKzIyOTIJOglIcnZhdHNrYQorMjI5Mwk6CVJhemdyYWQKKzIyOTQJOglIcnZhdHNrYQorMjI5NQk6CUxvdmVjCisyMjk2CToJTG92ZWMKKzIyOTcJOglIcnZhdHNrYQorMjI5OAk6CUhydmF0c2thCisyMjk5CToJTWloYWpsb3ZncmFkCisyMzAwCToJSHJ2YXRza2EKKzIzMDEJOglNaWhhamxvdmdyYWQKKzIzMDIJOglBU1RVUklBUworMjMwMwk6CUhydmF0c2thCisyMzA0CToJTElHVVJJQQorMjMwNQk6CUhydmF0c2thCisyMzA2CToJSHJ2YXRza2EKKzIzMDcJOglIcnZhdHNrYQorMjMwOAk6CUhydmF0c2thCisyMzA5CToJSHJ2YXRza2EKKzIzMTAJOglIcnZhdHNrYQorMjMxMQk6CUhydmF0c2thCisyMzEyCToJSHJ2YXRza2EKKzIzMTMJOglMb3ZlYworMjMxNAk6CUJ1cmdhcworMjMxNQk6CVBST1ZFTkNFLUFMUEVTLUNPVEUgRCdBWlVSCisyMzE2CToJSHJ2YXRza2EKKzIzMTcJOglIcnZhdHNrYQorMjMxOAk6CVRPU0NBTkEKKzIzMTkJOglIcnZhdHNrYQorMjMyMAk6CUhydmF0c2thCisyMzIxCToJQnVyZ2FzCisyMzIyCToJSHJ2YXRza2EKKzIzMjMJOglMb3ZlYworMjMyNAk6CUhydmF0c2thCisyMzI1CToJSHJ2YXRza2EKKzIzMjYJOglIcnZhdHNrYQorMjMyNwk6CUhydmF0c2thCisyMzI4CToJSHJ2YXRza2EKKzIzMjkJOglIcnZhdHNrYQorMjMzMAk6CUNBTlRBQlJJQQorMjMzMQk6CUhydmF0c2thCisyMzMyCToJSHJ2YXRza2EKKzIzMzMJOglCdXJnYXMKKzIzMzQJOglDQVNUSUxMQSAtIExFT04KKzIzMzUJOglIcnZhdHNrYQorMjMzNgk6CUdyYWQgU29maWphIChtdW4uKQorMjMzNwk6CUhydmF0c2thCisyMzM4CToJUEFJUyBWQVNDTworMjMzOQk6CUhhc2tvdm8KKzIzNDAJOglIcnZhdHNrYQorMjM0MQk6CVNhbiBNYXJpbm8KKzIzNDIJOglIcnZhdHNrYQorMjM0Mwk6CUhydmF0c2thCisyMzQ0CToJSHJ2YXRza2EKKzIzNDUJOglNQVJDSEUKKzIzNDYJOglIcnZhdHNrYQorMjM0Nwk6CUhydmF0c2thCisyMzQ4CToJQ3JuYSBHb3JhCisyMzQ5CToJSHJ2YXRza2EKKzIzNTAJOglDQU5UQUJSSUEKKzIzNTEJOglIcnZhdHNrYQorMjM1Mgk6CUhydmF0c2thCisyMzUzCToJUGxvdmRpdgorMjM1NAk6CUhydmF0c2thCisyMzU1CToJSHJ2YXRza2EKKzIzNTYJOglIcnZhdHNrYQorMjM1Nwk6CUhydmF0c2thCisyMzU4CToJSHJ2YXRza2EKKzIzNTkJOglIcnZhdHNrYQorMjM2MAk6CUtvc292bworMjM2MQk6CUhydmF0c2thCisyMzYyCToJSHJ2YXRza2EKKzIzNjMJOglIcnZhdHNrYQorMjM2NAk6CVNvZmlqYSAtIGNpdHkKKzIzNjUJOglOQVZBUlJBCisyMzY2CToJR3JhZCBTb2ZpamEgKG11bi4pCisyMzY3CToJSHJ2YXRza2EKKzIzNjgJOglNSURJLVBZUkVORUVTCisyMzY5CToJUGxvdmRpdgorMjM3MAk6CU1JREktUFlSRU5FRVMKKzIzNzEJOglIcnZhdHNrYQorMjM3Mgk6CUhydmF0c2thCisyMzczCToJVIFya2l5ZQorMjM3NAk6CVVNQlJJQQorMjM3NQk6CUhydmF0c2thCisyMzc2CToJSHJ2YXRza2EKKzIzNzcJOglOT1JURQorMjM3OAk6CUhydmF0c2thCisyMzc5CToJSGFza292bworMjM4MAk6CUdyYWQgU29maWphIChtdW4uKQorMjM4MQk6CUhydmF0c2thCisyMzgyCToJQ0FTVElMTEEgLSBMRU9OCisyMzgzCToJSHJ2YXRza2EKKzIzODQJOglIcnZhdHNrYQorMjM4NQk6CUFSQUdPTgorMjM4Ngk6CUhydmF0c2thCisyMzg3CToJSHJ2YXRza2EKKzIzODgJOglSSU9KQQorMjM4OQk6CUhydmF0c2thCisyMzkwCToJSHJ2YXRza2EKKzIzOTEJOglIcnZhdHNrYQorMjM5Mgk6CUhydmF0c2thCisyMzkzCToJSHJ2YXRza2EKKzIzOTQJOglHcmFkIFNvZmlqYSAobXVuLikKKzIzOTUJOglTaHFpcIlyaWEKKzIzOTYJOglDQVRBTFVOQQorMjM5Nwk6CU1ha2Vkb25pamEKKzIzOTgJOglIYXNrb3ZvCisyMzk5CToJSHJ2YXRza2EKKzI0MDAJOglBTkFUT0xJS0kgTUFLRURPTklBCisyNDAxCToJSHJ2YXRza2EKKzI0MDIJOglIcnZhdHNrYQorMjQwMwk6CVBsb3ZkaXYKKzI0MDQJOglUT1NDQU5BCisyNDA1CToJSHJ2YXRza2EKKzI0MDYJOglIcnZhdHNrYQorMjQwNwk6CUhydmF0c2thCisyNDA4CToJSHJ2YXRza2EKKzI0MDkJOglQUk9WRU5DRS1BTFBFUy1DT1RFIEQnQVpVUgorMjQxMAk6CUhydmF0c2thCisyNDExCToJSHJ2YXRza2EKKzI0MTIJOglIcnZhdHNrYQorMjQxMwk6CUhydmF0c2thCisyNDE0CToJSHJ2YXRza2EKKzI0MTUJOglQUk9WRU5DRS1BTFBFUy1DT1RFIEQnQVpVUgorMjQxNgk6CUhydmF0c2thCisyNDE3CToJSHJ2YXRza2EKKzI0MTgJOglQUk9WRU5DRS1BTFBFUy1DT1RFIEQnQVpVUgorMjQxOQk6CVBST1ZFTkNFLUFMUEVTLUNPVEUgRCdBWlVSCisyNDIwCToJSHJ2YXRza2EKKzI0MjEJOglDT1JTRQorMjQyMgk6CUFCUlVaWkkKKzI0MjMJOglBbmRvcnJhCisyNDI0CToJVE9TQ0FOQQorMjQyNQk6CUxBWklPCisyNDI2CToJVE9TQ0FOQQorMjQyNwk6CUNFTlRSTworMjQyOAk6CVRPU0NBTkEKKzI0MjkJOglLRU5UUklLSSBNQUtFRE9OSUEKKzI0MzAJOglDcm5hIEdvcmEKKzI0MzEJOglQVUdMSUEKKzI0MzIJOglQVUdMSUEKKzI0MzMJOglQVUdMSUEKKzI0MzQJOglQVUdMSUEKKzI0MzUJOglUT1NDQU5BCisyNDM2CToJTU9MSVNFCisyNDM3CToJUFVHTElBCisyNDM4CToJQ0FTVElMTEEgLSBMQSBNQU5DSEEKKzI0MzkJOglBTkFUT0xJS0kgTUFLRURPTklBCisyNDQwCToJTUFEUklECisyNDQxCToJQU5BVE9MSUtJIE1BS0VET05JQQorMjQ0Mgk6CURZVElLSSBNQUtFRE9OSUEKKzI0NDMJOglDQU1QQU5JQQorMjQ0NAk6CVSBcmtpeWUKKzI0NDUJOglFWFRSRU1BRFVSQQorMjQ0Ngk6CUJBU0lMSUNBVEEKKzI0NDcJOglWT1JFSU8gQUlHQUlPCisyNDQ4CToJTElTQk9BIEUgVkFMRSBETyBURUpPCisyNDQ5CToJU0FSREVHTkEKKzI0NTAJOglDT01VTklEQUQgVkFMRU5DSUFOQQorMjQ1MQk6CUxBWklPCisyNDUyCToJVEhFU1NBTElBCisyNDUzCToJSVBFSVJPUworMjQ1NAk6CUxBWklPCisyNDU1CToJTEFaSU8KKzI0NTYJOglBTEVOVEVKTworMjQ1Nwk6CUNBTVBBTklBCisyNDU4CToJQ0FNUEFOSUEKKzI0NTkJOglDQU1QQU5JQQorMjQ2MAk6CVZPUkVJTyBBSUdBSU8KKzI0NjEJOglWT1JFSU8gQUlHQUlPCisyNDYyCToJQ09NVU5JREFEIFZBTEVOQ0lBTkEKKzI0NjMJOglDQU1QQU5JQQorMjQ2NAk6CVRIRVNTQUxJQQorMjQ2NQk6CVRIRVNTQUxJQQorMjQ2Ngk6CVRIRVNTQUxJQQorMjQ2Nwk6CUlPTklBIE5JU0lBCisyNDY4CToJQ0FMQUJSSUEKKzI0NjkJOglJT05JQSBOSVNJQQorMjQ3MAk6CUlPTklBIE5JU0lBCisyNDcxCToJVEhFU1NBTElBCisyNDcyCToJVEhFU1NBTElBCisyNDczCToJVEhFU1NBTElBCisyNDc0CToJQkFMRUFSRVMKKzI0NzUJOglUSEVTU0FMSUEKKzI0NzYJOglUSEVTU0FMSUEKKzI0NzcJOglWT1JFSU8gQUlHQUlPCisyNDc4CToJQkFMRUFSRVMKKzI0NzkJOglTVEVSRUEgRUxMQURBCisyNDgwCToJQkFMRUFSRVMKKzI0ODEJOglTVEVSRUEgRUxMQURBCisyNDgyCToJVk9SRUlPIEFJR0FJTworMjQ4Mwk6CVZPUkVJTyBBSUdBSU8KKzI0ODQJOglWT1JFSU8gQUlHQUlPCisyNDg1CToJVk9SRUlPIEFJR0FJTworMjQ4Ngk6CVZPUkVJTyBBSUdBSU8KKzI0ODcJOglWT1JFSU8gQUlHQUlPCisyNDg4CToJQkFMRUFSRVMKKzI0ODkJOglEWVRJS0kgRUxMQURBCisyNDkwCToJSU9OSUEgTklTSUEKKzI0OTEJOglCQUxFQVJFUworMjQ5Mgk6CUlPTklBIE5JU0lBCisyNDkzCToJQU5EQUxVQ0lBCisyNDk0CToJQkFMRUFSRVMKKzI0OTUJOglJT05JQSBOSVNJQQorMjQ5Ngk6CUFUVElLSQorMjQ5Nwk6CUJBTEVBUkVTCisyNDk4CToJVk9SRUlPIEFJR0FJTworMjQ5OQk6CUJBTEVBUkVTCisyNTAwCToJSU9OSUEgTklTSUEKKzI1MDEJOglCQUxFQVJFUworMjUwMgk6CUlPTklBIE5JU0lBCisyNTAzCToJSU9OSUEgTklTSUEKKzI1MDQJOglCQUxFQVJFUworMjUwNQk6CUJBTEVBUkVTCisyNTA2CToJQkFMRUFSRVMKKzI1MDcJOglNVVJDSUEKKzI1MDgJOglJT05JQSBOSVNJQQorMjUwOQk6CU5PVElPIEFJR0FJTworMjUxMAk6CUlPTklBIE5JU0lBCisyNTExCToJVk9SRUlPIEFJR0FJTworMjUxMgk6CVZPUkVJTyBBSUdBSU8KKzI1MTMJOglJT05JQSBOSVNJQQorMjUxNAk6CUJBTEVBUkVTCisyNTE1CToJQkFMRUFSRVMKKzI1MTYJOglEWVRJS0kgRUxMQURBCisyNTE3CToJRFlUSUtJIEVMTEFEQQorMjUxOAk6CUlPTklBIE5JU0lBCisyNTE5CToJVk9SRUlPIEFJR0FJTworMjUyMAk6CUJBTEVBUkVTCisyNTIxCToJQkFMRUFSRVMKKzI1MjIJOglCQUxFQVJFUworMjUyMwk6CUJBTEVBUkVTCisyNTI0CToJTk9USU8gQUlHQUlPCisyNTI1CToJQkFMRUFSRVMKKzI1MjYJOglQRUxPUE9OTklTT1MKKzI1MjcJOglEWVRJS0kgRUxMQURBCisyNTI4CToJUEVMT1BPTk5JU09TCisyNTI5CToJQVRUSUtJCisyNTMwCToJRFlUSUtJIEVMTEFEQQorMjUzMQk6CUFMR0FSVkUKKzI1MzIJOglTSUNJTElBCisyNTMzCToJTk9USU8gQUlHQUlPCisyNTM0CToJTk9USU8gQUlHQUlPCisyNTM1CToJTk9USU8gQUlHQUlPCisyNTM2CToJTk9USU8gQUlHQUlPCisyNTM3CToJTk9USU8gQUlHQUlPCisyNTM4CToJTk9USU8gQUlHQUlPCisyNTM5CToJTk9USU8gQUlHQUlPCisyNTQwCToJU0lDSUxJQQorMjU0MQk6CU5PVElPIEFJR0FJTworMjU0Mgk6CVBFTE9QT05OSVNPUworMjU0Mwk6CVNJQ0lMSUEKKzI1NDQJOglOT1RJTyBBSUdBSU8KKzI1NDUJOglOT1RJTyBBSUdBSU8KKzI1NDYJOglTSUNJTElBCisyNTQ3CToJU0lDSUxJQQorMjU0OAk6CU5PVElPIEFJR0FJTworMjU0OQk6CVBFTE9QT05OSVNPUworMjU1MAk6CU5PVElPIEFJR0FJTworMjU1MQk6CVNJQ0lMSUEKKzI1NTIJOglTSUNJTElBCisyNTUzCToJTk9USU8gQUlHQUlPCisyNTU0CToJTk9USU8gQUlHQUlPCisyNTU2CToJU0lDSUxJQQorMjU1Nwk6CU5PVElPIEFJR0FJTworMjU1OAk6CU5PVElPIEFJR0FJTworMjU1OQk6CUlPTklBIE5JU0lBCisyNTYwCToJUEVMT1BPTk5JU09TCisyNTYxCToJQVRUSUtJCisyNTYyCToJTk9USU8gQUlHQUlPCisyNTYzCToJTk9USU8gQUlHQUlPCisyNTY0CToJTk9USU8gQUlHQUlPCisyNTY1CToJTk9USU8gQUlHQUlPCisyNTY2CToJQU5EQUxVQ0lBCisyNTY3CToJU0lDSUxJQQorMjU2OAk6CUFMR0FSVkUKKzI1NjkJOglOT1RJTyBBSUdBSU8KKzI1NzAJOglOT1RJTyBBSUdBSU8KKzI1NzEJOglBTEdBUlZFCisyNTcyCToJUEVMT1BPTk5JU09TCisyNTczCToJQUxHQVJWRQorMjU3NAk6CU5PVElPIEFJR0FJTworMjU3NQk6CUFMR0FSVkUKKzI1NzYJOglOT1RJTyBBSUdBSU8KKzI1NzcJOglQRUxPUE9OTklTT1MKKzI1NzgJOglOT1RJTyBBSUdBSU8KKzI1NzkJOglOT1RJTyBBSUdBSU8KKzI1ODAJOglOT1RJTyBBSUdBSU8KKzI1ODEJOglOT1RJTyBBSUdBSU8KKzI1ODIJOglOT1RJTyBBSUdBSU8KKzI1ODMJOglOT1RJTyBBSUdBSU8KKzI1ODQJOglOT1RJTyBBSUdBSU8KKzI1ODUJOglOT1RJTyBBSUdBSU8KKzI1ODYJOglQRUxPUE9OTklTT1MKKzI1ODcJOglOT1RJTyBBSUdBSU8KKzI1ODgJOglOT1RJTyBBSUdBSU8KKzI1ODkJOglOT1RJTyBBSUdBSU8KKzI1OTAJOglOT1RJTyBBSUdBSU8KKzI1OTEJOglOT1RJTyBBSUdBSU8KKzI1OTIJOglQRUxPUE9OTklTT1MKKzI1OTMJOglOT1RJTyBBSUdBSU8KKzI1OTQJOglOT1RJTyBBSUdBSU8KKzI1OTUJOglOT1RJTyBBSUdBSU8KKzI1OTYJOglTSUNJTElBCisyNTk3CToJTk9USU8gQUlHQUlPCisyNTk4CToJTk9USU8gQUlHQUlPCisyNTk5CToJTk9USU8gQUlHQUlPCisyNjAwCToJU0lDSUxJQQorMjYwMQk6CU5PVElPIEFJR0FJTworMjYwMgk6CVNJQ0lMSUEKKzI2MDMJOglOT1RJTyBBSUdBSU8KKzI2MDQJOglOT1RJTyBBSUdBSU8KKzI2MDUJOglOT1RJTyBBSUdBSU8KKzI2MDYJOglOT1RJTyBBSUdBSU8KKzI2MDcJOglOT1RJTyBBSUdBSU8KKzI2MDgJOglOT1RJTyBBSUdBSU8KKzI2MDkJOglQRUxPUE9OTklTT1MKKzI2MTAJOglOT1RJTyBBSUdBSU8KKzI2MTEJOglOT1RJTyBBSUdBSU8KKzI2MTIJOglOT1RJTyBBSUdBSU8KKzI2MTMJOglQRUxPUE9OTklTT1MKKzI2MTQJOglQRUxPUE9OTklTT1MKKzI2MTUJOglQRUxPUE9OTklTT1MKKzI2MTYJOglOT1RJTyBBSUdBSU8KKzI2MTcJOglOT1RJTyBBSUdBSU8KKzI2MTgJOglBVFRJS0kKKzI2MTkJOglOT1RJTyBBSUdBSU8KKzI2MjAJOglLUklUSQorMjYyMQk6CVNJQ0lMSUEKKzI2MjIJOglLUklUSQorMjYyMwk6CUtSSVRJCisyNjI0CToJS1JJVEkKKzI2MjUJOglLUklUSQorMjYyNgk6CUtSSVRJCisyNjI3CToJQ0FOQVJJQVMKKzI2MjgJOglDQU5BUklBUworMjYyOQk6CUNBTkFSSUFTCisyNjMwCToJQ0FOQVJJQVMKKzI2MzEJOglDQU5BUklBUworMjYzMgk6CUNBTkFSSUFTCisyNjMzCToJQ0FOQVJJQVMKKzI2MzQJOglDQU5BUklBUworMjYzNQk6CUNBTkFSSUFTCisyNjM2CToJQ0FOQVJJQVMKKzI2MzcJOglDQU5BUklBUworMjYzOAk6CVVOS05PV04KKzI2MzkJOglVTktOT1dOCis1MjgwCToJVU5LTk9XTgorNTI4MQk6CVVOS05PV04KKzUyODIJOglVTktOT1dOCis1MjgzCToJVU5LTk9XTgorNTI4NAk6CVVOS05PV04KKzUyODUJOglVTktOT1dOCis1Mjg2CToJVU5LTk9XTgorNTI4Nwk6CVVOS05PV04KKzUyODgJOglVTktOT1dOCis1Mjg5CToJVU5LTk9XTgorNTI5MAk6CVVOS05PV04KK0VPSQk6CVVOS05PV04KK0VPUwk6CVVOS05PV04KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvdGFyZ2V0cy9NaWRFYXN0Q291bnRyaWVzLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvdGFyZ2V0cy9NaWRFYXN0Q291bnRyaWVzLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYTY3YjA0Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy90YXJnZXRzL01pZEVhc3RDb3VudHJpZXMudHh0CkBAIC0wLDAgKzEsMTIgQEAKK0M6XGRpdmFcTWlkRWFzdFxCYWhyYWluXEJhaHJhaW4udHh0CitDOlxkaXZhXE1pZEVhc3RcSXJha1xJcmFrLnR4dAorQzpcZGl2YVxNaWRFYXN0XElyYW5cSXJhbi50eHQKK0M6XGRpdmFcTWlkRWFzdFxKb3JkYW5cSm9yZGFuLnR4dAorQzpcZGl2YVxNaWRFYXN0XEt1d2FpdFxLdXdhaXQudHh0CitDOlxkaXZhXE1pZEVhc3RcTGViYW5vblxMZWJhbm9uLnR4dAorQzpcZGl2YVxNaWRFYXN0XE9tYW5cT21hbi50eHQKK0M6XGRpdmFcTWlkRWFzdFxRYXRhclxRYXRhci50eHQKK0M6XGRpdmFcTWlkRWFzdFxTYXVkaUFyYWJpYS50eHQKK0M6XGRpdmFcTWlkRWFzdFxTeXJpYVxTeXJpYS50eHQKK0M6XGRpdmFcTWlkRWFzdFxVbml0ZWRBcmFiRW1pcmF0ZXNcVW5pdGVkQXJhYkVtaXJhdGVzLnR4dAorQzpcZGl2YVxNaWRFYXN0XFllbWVuXFllbWVuLnR4dApkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy90YXJnZXRzL05vcnRoQW1lcmljYW5Db3VudHJpZXMudHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy90YXJnZXRzL05vcnRoQW1lcmljYW5Db3VudHJpZXMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU0NTQyNDQKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3RhcmdldHMvTm9ydGhBbWVyaWNhbkNvdW50cmllcy50eHQKQEAgLTAsMCArMSwyIEBACitDOlxkaXZhXE5vcnRoQW1lcmljYVxVU0FcVVNBLnR4dAorQzpcZGl2YVxOb3J0aEFtZXJpY2FcTWV4aWNvXE1leGljby50eHQKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3RhcmdldHMvUkVBRE1FLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvdGFyZ2V0cy9SRUFETUUudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNhMWQyNWEKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3RhcmdldHMvUkVBRE1FLnR4dApAQCAtMCwwICsxLDMgQEAKKworCitUaGUgZmlsZXMgaW4gdGhpcyBmb2xkZXIgYXJlIHVzZWQgYnkgUHJvcGVydGllc0dlbmVyYXRvcnRvIGdlbmVyYXRlIHRoZSBwcm9wZXJ0aWVzIGZpbGVzIChuYW1lcyxhcmVhLCBhbmQgcG9wdWxhdGlvbikgZm9yIGVhY2ggY291bnRyeS4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3RhcmdldHMvUmVzdE9mQXNpYUNvdW50cmllcy50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3RhcmdldHMvUmVzdE9mQXNpYUNvdW50cmllcy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWEyYzI3MgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvdGFyZ2V0cy9SZXN0T2ZBc2lhQ291bnRyaWVzLnR4dApAQCAtMCwwICsxLDEzIEBACitDOlxkaXZhXFJlc3RPZkFzaWFcQWZnaGFuaXN0YW5cQWZnaGFuaXN0YW4udHh0CitDOlxkaXZhXFJlc3RPZkFzaWFcQXJtZW5pYVxBcm1lbmlhLnR4dAorQzpcZGl2YVxSZXN0T2ZBc2lhXEF6ZXJiYWlqYW5cQXplcmJhaWphbi50eHQKK0M6XGRpdmFcUmVzdE9mQXNpYVxLYXpha2hzdGFuXEthemFraHN0YW4udHh0CitDOlxkaXZhXFJlc3RPZkFzaWFcS3lyZ3l6c3RhblxLeXJneXpzdGFuLnR4dAorQzpcZGl2YVxSZXN0T2ZBc2lhXE1hY2Vkb25pYVxNYWNlZG9uaWEudHh0CitDOlxkaXZhXFJlc3RPZkFzaWFcTW9sZG92YVxNb2xkb3ZhLnR4dAorQzpcZGl2YVxSZXN0T2ZBc2lhXE1vbmdvbGlhXE1vbmdvbGlhLnR4dAorQzpcZGl2YVxSZXN0T2ZBc2lhXFBha2lzdGFuXFBha2lzdGFuLnR4dAorQzpcZGl2YVxSZXN0T2ZBc2lhXFRhamlraXN0YW5cVGFqaWtpc3Rhbi50eHQKK0M6XGRpdmFcUmVzdE9mQXNpYVxUdXJrZXlcVHVya2V5LnR4dAorQzpcZGl2YVxSZXN0T2ZBc2lhXFR1cmttZW5pc3RhblxUdXJrbWVuaXN0YW4udHh0CitDOlxkaXZhXFJlc3RPZkFzaWFcVXpiZWtpc3RhblxVemJla2lzdGFuLnR4dApkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy90YXJnZXRzL1NvdXRoQW1lcmljYW5Db3VudHJpZXMudHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy90YXJnZXRzL1NvdXRoQW1lcmljYW5Db3VudHJpZXMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFkYWE0YWQKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3RhcmdldHMvU291dGhBbWVyaWNhbkNvdW50cmllcy50eHQKQEAgLTAsMCArMSwxMyBAQAorQzpcZGl2YVxTb3V0aEFtZXJpY2FcQXJnZW50aW5hXEFyZ2VudGluYS50eHQKK0M6XGRpdmFcU291dGhBbWVyaWNhXEJvbGl2aWFcQm9saXZpYS50eHQKK0M6XGRpdmFcU291dGhBbWVyaWNhXEJyYXppbFxCcmF6aWwudHh0CitDOlxkaXZhXFNvdXRoQW1lcmljYVxDaGlsZVxDaGlsZS50eHQKK0M6XGRpdmFcU291dGhBbWVyaWNhXENvbG9tYmlhXENvbG9tYmlhLnR4dAorQzpcZGl2YVxTb3V0aEFtZXJpY2FcRWN1YWRvclxFY3VhZG9yLnR4dAorQzpcZGl2YVxTb3V0aEFtZXJpY2FcRmF1bGtsYW5kSXNsYW5kc1xGYXVsa2xhbmRJc2xhbmRzLnR4dAorQzpcZGl2YVxTb3V0aEFtZXJpY2FcR3V5YW5hXEd1eWFuYS50eHQKK0M6XGRpdmFcU291dGhBbWVyaWNhXFBhcmFndWF5XFBhcmFndWF5LnR4dAorQzpcZGl2YVxTb3V0aEFtZXJpY2FcUGVydVxQZXJ1LnR4dAorQzpcZGl2YVxTb3V0aEFtZXJpY2FcU3VyaW5hbWVcU3VyaW5hbWUudHh0CitDOlxkaXZhXFNvdXRoQW1lcmljYVxVcnVndWF5XFVydWd1YXkudHh0CitDOlxkaXZhXFNvdXRoQW1lcmljYVxWZW5lenVlbGFcVmVuZXp1ZWxhLnR4dApkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy90YXJnZXRzL1NvdXRoQXNpYW5Db3VudHJpZXMudHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy90YXJnZXRzL1NvdXRoQXNpYW5Db3VudHJpZXMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY0MzE3ZTMKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3RhcmdldHMvU291dGhBc2lhbkNvdW50cmllcy50eHQKQEAgLTAsMCArMSwxOCBAQAorQzpcZGl2YVxTb3V0aEFzaWFcQmFuZ2xhZGVzaFxCYW5nbGFkZXNoLnR4dAorQzpcZGl2YVxTb3V0aEFzaWFcQmh1dGFuXEJodXRhbi50eHQKK0M6XGRpdmFcU291dGhBc2lhXEJydW5laVxCcnVuZWkudHh0CitDOlxkaXZhXFNvdXRoQXNpYVxDYW1ib2RpYVxDYW1ib2RpYS50eHQKK0M6XGRpdmFcU291dGhBc2lhXENoaW5hXENoaW5hLnR4dAorQzpcZGl2YVxTb3V0aEFzaWFcSW5kaWFcSW5kaWEudHh0CitDOlxkaXZhXFNvdXRoQXNpYVxJbmRvbmVzaWFcSW5kb25lc2lhLnR4dAorQzpcZGl2YVxTb3V0aEFzaWFcSmFwYW5cSmFwYW4udHh0CitDOlxkaXZhXFNvdXRoQXNpYVxMYW9zXExhb3MudHh0CitDOlxkaXZhXFNvdXRoQXNpYVxNYWNhdVxNYWNhdS50eHQKK0M6XGRpdmFcU291dGhBc2lhXE15YW5tYXJcTXlhbm1hci50eHQKK0M6XGRpdmFcU291dGhBc2lhXE5lcGFsXE5lcGFsLnR4dAorQzpcZGl2YVxTb3V0aEFzaWFcTm9ydGhLb3JlYVxOb3J0aEtvcmVhLnR4dAorQzpcZGl2YVxTb3V0aEFzaWFcUGhpbGlwcGluZXNcUGhpbGlwcGluZXMudHh0CitDOlxkaXZhXFNvdXRoQXNpYVxTaW5nYXBvcmVcU2luZ2Fwb3JlLnR4dAorQzpcZGl2YVxTb3V0aEFzaWFcU291dGhLb3JlYVxTb3V0aEtvcmVhLnR4dAorQzpcZGl2YVxTb3V0aEFzaWFcVGhhaWxhbmRcVGhhaWxhbmQudHh0CitDOlxkaXZhXFNvdXRoQXNpYVxWaWV0bmFtXFZpZXRuYW0udHh0CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3RhcmdldHMvY291bnRyeV9uYW1lcy50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3RhcmdldHMvY291bnRyeV9uYW1lcy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDgzNGNjNQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvdGFyZ2V0cy9jb3VudHJ5X25hbWVzLnR4dApAQCAtMCwwICsxLDE2MyBAQAorQ2FuYWRhCitBdXN0cmFsaWEKK1phaXJlCitaaW1iYWJ3ZQorQmVsYXJ1cworQmVsaXplCitCb3Rzd2FuYQorQ2FtZXJvb24KK0Nvc3RhIFJpY2EKK0VsIFNhbHZhZG9yCitFc3RvbmlhCitFdGhpb3BpYQorR3VhdGVtYWxhCitIb25kdXJhcworTGF0dmlhCitNYWxpCitNYXVyaXRhbmlhCitOaWNhcmFndWEKK1BhbmFtYQorTWFsaQorUGFwdWEgTmV3IEd1aW5lYQorR3VpbmVhIEJpc3NhdQorTWFjZWRvbmlhCitNb2xkb3ZpYQorQWxiYW5pYQorQW5kb3JyYQorQXVzdHJpYQorQmVsZ2l1bQorQm9zbmlhIGFuZCBIZXJ6ZWdvdmluYQorQnVsZ2FyaWEKK0Nyb2F0aWEKK0N6ZWNoIFJlcHVibGljCitEZW5tYXJrCitGYXJvZSBJc2xhbmRzCitGaW5sYW5kCitGcmFuY2UKK0dlcm1hbnkKK0dyZWVjZQorSHVuZ2FyeQorSXJlbGFuZAorU3BhaW4KK1N3aXR6ZXJsYW5kCitVbml0ZWQgS2luZ2RvbQorSWNlbGFuZAorSXRhbHkKK0xpZWNodGVuc3RlaW4KK0x1eGVtYm91cmcKK05ldGhlcmxhbmRzCitOb3J3YXkKK1BvbGFuZAorUG9ydHVnYWwKK1JvbWFuaWEKK1J1c3NpYQorU2FuIE1hcmlubworU2xvdmVuaWEKK1N3ZWRlbgorVW5pdGVkIEtpbmdkb20KK1l1Z29zbGF2aWEKK0FsZ2VyaWEKK0FuZ29sYQorQXJtZW5pYQorQmVuaW4KK0J1cmtpbmFGYXNvCitCdXJ1bmRpCitCcnVuZWkKK0NhcGUgVmVyZGUKK0NlbnRyYWwgQWZyaWNhbiBSZXB1YmxpYworQ2hhZAorQ29uZ28KK0NvbW9yb3MKK0VneXB0CitFcXVhdG9yaWFsIEd1aW5lYQorRXJpdHJlYQorR2Fib24KK0dhbWJpYQorR2hhbmEKK0d1aW5lYQorR3VpbmVhIEJpc3NhdQorSXZvcnkgQ29hc3QKK0tlbnlhCitMZXNvdGhvCitMaWJlcmlhCitMaWJ5YQorTWFkYWdhc2NhcgorTWFsYXdpCitNYXVyaXRpdXMKK01vcm9jY28KK01vemFtYmlxdWUKK05hbWliaWEKK05pZ2VyCitOaWdlcmlhCitQYXB1YSBOZXcgR3VpbmVhCitQdWVydG8gUmljbworUndhbmRhCitTYW8gVG9tZSBhbmQgUHJpbmNpcGUKK1NlbmVnYWwKK1NleWNoZWxsZXMKK1NpZXJyYSBMZW9uZQorU2luZ2Fwb3JlCitTb3V0aCBBZnJpY2EKK1NvbWFsaWEKK1N1ZGFuCitUYW56YW5pYQorVG9nbworVHVuaXNpYQorVWdhbmRhCitaYW1iaWEKK0JhaHJhaW4KK0lyYXEKK0lyYW4KK0pvcmRhbgorS3V3YWl0CitMZWJhbm9uCitPbWFuCitRYXRhcgorU2F1ZGkgQXJhYmlhCitTeXJpYQorVW5pdGVkIEFyYWIgRW1pcmF0ZXMKKyNVbml0ZWRBcmFiRW1pcmF0ZXMKK1llbWVuCitNZXhpY28KK0FmZ2hhbmlzdGFuCitBemVyYmFpamFuCitLYXpha2hzdGFuCitLeXJneXpzdGFuCitNYWNlZG9uaWEKK01vbGRvdmlhCitNb25nb2xpYQorUGFraXN0YW4KK1RhamlraXN0YW4KK1R1cmtleQorVHVya21lbmlzdGFuCitVemJla2lzdGFuCitBcmdlbnRpbmEKK0JvbGl2aWEKK0JyYXNpbAorQ2hpbGUKK0NvbG9tYmlhCitFY3VhZG9yCitHdXlhbmEKK1BhcmFndWF5CitQZXJ1CitTdXJpbmFtZQorVXJ1Z3VheQorVmVuZXp1ZWxhCitCYW5nbGFkZXNoCitCaHV0YW4KK0JydW5laQorQ2FtYm9kaWEKK0NoaW5hCitJbmRpYQorSW5kb25lc2lhCitKYXBhbgorTGFvcworTWFjYXUKK015YW5tYXIKK05lcGFsCitOb3J0aCBLb3JlYQorUGhpbGlwcGluZXMKK1NvdXRoIEtvcmVhCitUaGFpbGFuZAorVmlldG5hbQorVW5pdGVkIFN0YXRlcwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvdGFyZ2V0cy9mb3JtYXRMaXN0LnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvdGFyZ2V0cy9mb3JtYXRMaXN0LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYTc4NzAwCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy90YXJnZXRzL2Zvcm1hdExpc3QudHh0CkBAIC0wLDAgKzEgQEAKK0M6XGRpdmFcTm9ydGhBbWVyaWNhXFVTQVxPcmlnaW5hbFxVU0FfQ2Vuc3VzLnR4dApkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy90YXJnZXRzL2dyb3VwZWREYXRhRmlsZXMudHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy90YXJnZXRzL2dyb3VwZWREYXRhRmlsZXMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ2MmU3NzEKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3RhcmdldHMvZ3JvdXBlZERhdGFGaWxlcy50eHQKQEAgLTAsMCArMSwxNDkgQEAKKyMjIEVVUk9QRQorI0M6XGRpdmFcZ3JvdXBlZFxBTEJcQUxCX0dST1VQRUQudHh0CisjQzpcZGl2YVxncm91cGVkXEFORFxBTkRfR1JPVVBFRC50eHQKKyNDOlxkaXZhXGdyb3VwZWRcQVVUXEFVVF9HUk9VUEVELnR4dAorI0M6XGRpdmFcZ3JvdXBlZFxCRUxcQkVMX0dST1VQRUQudHh0CisjQzpcZGl2YVxncm91cGVkXEJJSFxCSUhfR1JPVVBFRC50eHQKKyNDOlxkaXZhXGdyb3VwZWRcQkdSXEJHUl9HUk9VUEVELnR4dAorQzpcZGl2YVxncm91cGVkXENIRVxDSEVfR1JPVVBFRC50eHQKKyNDOlxkaXZhXGdyb3VwZWRcQ1pFXENaRV9HUk9VUEVELnR4dAorI0M6XGRpdmFcZ3JvdXBlZFxERVVcREVVX0dST1VQRUQudHh0CisjQzpcZGl2YVxncm91cGVkXEROS1xETktfR1JPVVBFRC50eHQKKyNDOlxkaXZhXGdyb3VwZWRcRVNQXEVTUF9HUk9VUEVELnR4dAorI0M6XGRpdmFcZ3JvdXBlZFxGSU5cRklOX0dST1VQRUQudHh0CisjQzpcZGl2YVxncm91cGVkXEZSQVxGUkFfR1JPVVBFRC50eHQKKyMjQzpcZGl2YVxncm91cGVkXEZBUk9FIElTTEFORFNcRkFST0UgSVNMQU5EUy50eHQKKyNDOlxkaXZhXGdyb3VwZWRcR0JSXEdCUl9HUk9VUEVELnR4dAorI0M6XGRpdmFcZ3JvdXBlZFxHUkNcR1JDX0dST1VQRUQudHh0CisjQzpcZGl2YVxncm91cGVkXEhSVlxIUlZfR1JPVVBFRC50eHQKKyNDOlxkaXZhXGdyb3VwZWRcSFVOXEhVTl9HUk9VUEVELnR4dAorI0M6XGRpdmFcZ3JvdXBlZFxJUkxcSVJMX0dST1VQRUQudHh0CisjQzpcZGl2YVxncm91cGVkXElTTFxJU0xfR1JPVVBFRC50eHQKKyNDOlxkaXZhXGdyb3VwZWRcSVRBXElUQV9HUk9VUEVELnR4dAorI0M6XGRpdmFcRXVyb3BlXExJRUNIVEVOU1RFSU5cTElFQ0hURU5TVEVJTi50eHQKKyNDOlxkaXZhXGdyb3VwZWRcTFVYXExVWF9HUk9VUEVELnR4dAorI0M6XGRpdmFcZ3JvdXBlZFxOTERcTkxEX0dST1VQRUQudHh0CisjQzpcZGl2YVxncm91cGVkXE5PUlxOT1JfR1JPVVBFRC50eHQKKyNDOlxkaXZhXGdyb3VwZWRcUE9MXFBPTF9HUk9VUEVELnR4dAorI0M6XGRpdmFcZ3JvdXBlZFxQUlRcUFJUX0dST1VQRUQudHh0CisjQzpcZGl2YVxncm91cGVkXFJPVVxST1VfR1JPVVBFRC50eHQKKyNDOlxkaXZhXGdyb3VwZWRcUlVTXFJVU19HUk9VUEVELnR4dAorI0M6XGRpdmFcZ3JvdXBlZFxTTVJcU01SX0dST1VQRUQudHh0CisjQzpcZGl2YVxncm91cGVkXFNSQlxTUkJfR1JPVVBFRC50eHQKKyNDOlxkaXZhXGdyb3VwZWRcU1ZOXFNWTl9HUk9VUEVELnR4dAorI0M6XGRpdmFcZ3JvdXBlZFxTV0VcU1dFX0dST1VQRUQudHh0CisjIyBBRlJJQ0EKKyNDOlxkaXZhXGdyb3VwZWRcRFpBXERaQV9HUk9VUEVELnR4dAorI0M6XGRpdmFcZ3JvdXBlZFxBR09cQUdPX0dST1VQRUQudHh0CisjQzpcZGl2YVxncm91cGVkXEJFTlxCRU5fR1JPVVBFRC50eHQKKyNDOlxkaXZhXGdyb3VwZWRcQkZBXEJGQV9HUk9VUEVELnR4dAkKKyNDOlxkaXZhXGdyb3VwZWRcQkRJXEJESV9HUk9VUEVELnR4dAkKKyNDOlxkaXZhXGdyb3VwZWRcQ1BWXENQVl9HUk9VUEVELnR4dAkKKyNDOlxkaXZhXGdyb3VwZWRcQ0FGXENBRl9HUk9VUEVELnR4dAorI0M6XGRpdmFcZ3JvdXBlZFxUQ0RcVENEX0dST1VQRUQudHh0CisjQzpcZGl2YVxncm91cGVkXENPTVxDT01fR1JPVVBFRC50eHQKKyNDOlxkaXZhXGdyb3VwZWRcQ09HXENPR19HUk9VUEVELnR4dAorI0M6XGRpdmFcZ3JvdXBlZFxFR1lcRUdZX0dST1VQRUQudHh0CisjQzpcZGl2YVxncm91cGVkXEdOUVxHTlFfR1JPVVBFRC50eHQKKyNDOlxkaXZhXGdyb3VwZWRcRVJJXEVSSV9HUk9VUEVELnR4dAorI0M6XGRpdmFcZ3JvdXBlZFxHQUJcR0FCX0dST1VQRUQudHh0CisjQzpcZGl2YVxncm91cGVkXEdNQlxHTUJfR1JPVVBFRC50eHQKKyNDOlxkaXZhXGdyb3VwZWRcR05CXEdOQl9HUk9VUEVELnR4dAorI0M6XGRpdmFcZ3JvdXBlZFxHSEFcR0hBX0dST1VQRUQudHh0CisjQzpcZGl2YVxncm91cGVkXEdIQVxHSEFfR1JPVVBFRC50eHQKKyNDOlxkaXZhXGdyb3VwZWRcR0lOXEdJTl9HUk9VUEVELnR4dAorI0M6XGRpdmFcZ3JvdXBlZFxDSVZcQ0lWX0dST1VQRUQudHh0CisjQzpcZGl2YVxncm91cGVkXEtFTlxLRU5fR1JPVVBFRC50eHQKKyNDOlxkaXZhXGdyb3VwZWRcTFNPXExTT19HUk9VUEVELnR4dAorI0M6XGRpdmFcZ3JvdXBlZFxMQlJcTEJSX0dST1VQRUQudHh0CisjQzpcZGl2YVxncm91cGVkXExCWVxMQllfR1JPVVBFRC50eHQKKyNDOlxkaXZhXGdyb3VwZWRcTURHXE1ER19HUk9VUEVELnR4dAorI0M6XGRpdmFcZ3JvdXBlZFxNV0lcTVdJX0dST1VQRUQudHh0CisjQzpcZGl2YVxncm91cGVkXE1VU1xNVVNfR1JPVVBFRC50eHQKKyNDOlxkaXZhXGdyb3VwZWRcTUFSXE1BUl9HUk9VUEVELnR4dAorI0M6XGRpdmFcZ3JvdXBlZFxNT1pcTU9aX0dST1VQRUQudHh0CisjQzpcZGl2YVxncm91cGVkXE5BTVxOQU1fR1JPVVBFRC50eHQKKyNDOlxkaXZhXGdyb3VwZWRcTkVSXE5FUl9HUk9VUEVELnR4dAorI0M6XGRpdmFcZ3JvdXBlZFxOR0FcTkdBX0dST1VQRUQudHh0CisjQzpcZGl2YVxncm91cGVkXFBOR1xQTkdfR1JPVVBFRC50eHQKKyNDOlxkaXZhXGdyb3VwZWRcUldBXFJXQV9HUk9VUEVELnR4dAorI0M6XGRpdmFcZ3JvdXBlZFxTVFBcU1RQX0dST1VQRUQudHh0CisjQzpcZGl2YVxncm91cGVkXFNFTlxTRU5fR1JPVVBFRC50eHQKKyNDOlxkaXZhXGdyb3VwZWRcU1lDXFNZQ19HUk9VUEVELnR4dAorI0M6XGRpdmFcZ3JvdXBlZFxTTEVcU0xFX0dST1VQRUQudHh0CisjQzpcZGl2YVxncm91cGVkXFNPTVxTT01fR1JPVVBFRC50eHQKKyNDOlxkaXZhXGdyb3VwZWRcWkFGXFpBRl9HUk9VUEVELnR4dAorI0M6XGRpdmFcZ3JvdXBlZFxTRE5cU0ROX0dST1VQRUQudHh0CisjQzpcZGl2YVxncm91cGVkXFRaQVxUWkFfR1JPVVBFRC50eHQKKyNDOlxkaXZhXGdyb3VwZWRcVEdPXFRHT19HUk9VUEVELnR4dAorI0M6XGRpdmFcZ3JvdXBlZFxUVU5cVFVOX0dST1VQRUQudHh0CisjQzpcZGl2YVxncm91cGVkXFVHQVxVR0FfR1JPVVBFRC50eHQKKyNDOlxkaXZhXGdyb3VwZWRcWk1CXFpNQl9HUk9VUEVELnR4dAorIyMgTUlEIEVBU1QKKyMjQzpcZGl2YVxncm91cGVkXEJIUlxCSFJfR1JPVVBFRC50eHQKKyMjQzpcZGl2YVxncm91cGVkXElSUVxJUlFfR1JPVVBFRC50eHQKKyMjQzpcZGl2YVxncm91cGVkXElSTlxJUk5fR1JPVVBFRC50eHQKKyMjQzpcZGl2YVxncm91cGVkXEpPUlxKT1JfR1JPVVBFRC50eHQKKyMjQzpcZGl2YVxncm91cGVkXEtXVFxLV1RfR1JPVVBFRC50eHQKKyMjQzpcZGl2YVxncm91cGVkXExCTlxMQk5fR1JPVVBFRC50eHQKKyMjQzpcZGl2YVxncm91cGVkXE9NTlxPTU5fR1JPVVBFRC50eHQKKyMjQzpcZGl2YVxncm91cGVkXFFBVFxRQVRfR1JPVVBFRC50eHQKKyMjQzpcZGl2YVxncm91cGVkXFNBVVxTQVVfR1JPVVBFRC50eHQKKyMjQzpcZGl2YVxncm91cGVkXFNZUlxTWVJfR1JPVVBFRC50eHQKKyMjQzpcZGl2YVxncm91cGVkXEFSRVxBUkVfR1JPVVBFRC50eHQKKyMjQzpcZGl2YVxncm91cGVkXFlFTVxZRU1fR1JPVVBFRC50eHQKKyMjIEFTSUEKKyMjQzpcZGl2YVxncm91cGVkXEFGR1xBRkdfR1JPVVBFRC50eHQKKyMjQzpcZGl2YVxncm91cGVkXEFSTVxBUk1fR1JPVVBFRC50eHQKKyMjQzpcZGl2YVxncm91cGVkXEFaRVxBWkVfR1JPVVBFRC50eHQKKyMjQzpcZGl2YVxncm91cGVkXEtBWlxLQVpfR1JPVVBFRC50eHQKKyMjQzpcZGl2YVxncm91cGVkXEtHWlxLR1pfR1JPVVBFRC50eHQKKyMjQzpcZGl2YVxncm91cGVkXE1OR1xNTkdfR1JPVVBFRC50eHQKKyNDOlxkaXZhXGdyb3VwZWRcUEFLXFBBS19HUk9VUEVELnR4dAorIyNDOlxkaXZhXGdyb3VwZWRcVEpLXFRKS19HUk9VUEVELnR4dAorIyNDOlxkaXZhXGdyb3VwZWRcVFVSXFRVUl9HUk9VUEVELnR4dAorIyNDOlxkaXZhXGdyb3VwZWRcVEtNXFRLTV9HUk9VUEVELnR4dAorIyNDOlxkaXZhXGdyb3VwZWRcVVpCXFVaQl9HUk9VUEVELnR4dAorIyNDOlxkaXZhXFJlc3RPZkFzaWFcTU9MRE9WQVxNb2xkb3ZhLnR4dAorIyNDOlxkaXZhXFJlc3RPZkFzaWFcTUFDRURPTklBXE1hY2Vkb25pYS50eHQKKyMjIEFNRVJJQ0EKKyNDOlxkaXZhXGdyb3VwZWRcTUVYXE1FWF9HUk9VUEVELnR4dAorI0M6XGRpdmFcZ3JvdXBlZFxVU0FcVVNBX0dST1VQRUQudHh0CitDOlxkaXZhXGdyb3VwZWRcQ0FOXENBTl9HUk9VUEVELnR4dAorI0M6XGRpdmFcZ3JvdXBlZFxQUklcUFJJX0dST1VQRUQudHh0CisjQzpcZGl2YVxncm91cGVkXEFSR1xBUkdfR1JPVVBFRC50eHQKKyNDOlxkaXZhXGdyb3VwZWRcQk9MXEJPTF9HUk9VUEVELnR4dAorI0M6XGRpdmFcZ3JvdXBlZFxCUkFcQlJBX0dST1VQRUQudHh0CisjQzpcZGl2YVxncm91cGVkXENITFxDSExfR1JPVVBFRC50eHQKKyNDOlxkaXZhXGdyb3VwZWRcQ09MXENPTF9HUk9VUEVELnR4dAorI0M6XGRpdmFcZ3JvdXBlZFxFQ1VcRUNVX0dST1VQRUQudHh0CisjQzpcZGl2YVxncm91cGVkXEdVWVxHVVlfR1JPVVBFRC50eHQKKyNDOlxkaXZhXGdyb3VwZWRcUFJZXFBSWV9HUk9VUEVELnR4dAorI0M6XGRpdmFcZ3JvdXBlZFxQRVJcUEVSX0dST1VQRUQudHh0CisjQzpcZGl2YVxncm91cGVkXFNVUlxTVVJfR1JPVVBFRC50eHQKKyNDOlxkaXZhXGdyb3VwZWRcVVJZXFVSWV9HUk9VUEVELnR4dAorI0M6XGRpdmFcZ3JvdXBlZFxWRU5cVkVOX0dST1VQRUQudHh0CisjIyBTT1VUSCBFQVNUIEFTSUEKKyMjQzpcZGl2YVxncm91cGVkXEJHRFxCR0RfR1JPVVBFRC50eHQKKyMjQzpcZGl2YVxncm91cGVkXEJUTlxCVE5fR1JPVVBFRC50eHQKKyMjQzpcZGl2YVxncm91cGVkXEJSTlxCUk5fR1JPVVBFRC50eHQKKyMjQzpcZGl2YVxncm91cGVkXEtITVxLSE1fR1JPVVBFRC50eHQKKyNDOlxkaXZhXGdyb3VwZWRcQ0hOXENITl9HUk9VUEVELnR4dAorIyNDOlxkaXZhXGdyb3VwZWRcSU5EXElORF9HUk9VUEVELnR4dAorIyNDOlxkaXZhXGdyb3VwZWRcSUROXElETl9HUk9VUEVELnR4dAorIyNDOlxkaXZhXGdyb3VwZWRcSlBOXEpQTl9HUk9VUEVELnR4dAorIyNDOlxkaXZhXGdyb3VwZWRcTEFPXExBT19HUk9VUEVELnR4dAorIyNDOlxkaXZhXGdyb3VwZWRcTUFDXE1BQ19HUk9VUEVELnR4dAorIyNDOlxkaXZhXGdyb3VwZWRcTXlhbm1hclxNeWFubWFyLnR4dAorIyNDOlxkaXZhXGdyb3VwZWRcTlBMXE5QTF9HUk9VUEVELnR4dAorIyNDOlxkaXZhXGdyb3VwZWRcUFJLXFBSS19HUk9VUEVELnR4dAorIyNDOlxkaXZhXGdyb3VwZWRcUEhMXFBITF9HUk9VUEVELnR4dAorIyNDOlxkaXZhXGdyb3VwZWRcU0dQXFNHUF9HUk9VUEVELnR4dAorIyNDOlxkaXZhXGdyb3VwZWRcS09SXEtPUl9HUk9VUEVELnR4dAorIyNDOlxkaXZhXGdyb3VwZWRcVEhBXFRIQV9HUk9VUEVELnR4dAorIyNDOlxkaXZhXGdyb3VwZWRcVk5NXFZOTV9HUk9VUEVELnR4dAorCisKKworCisKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvdGFyZ2V0cy9yZWR1Y2VMaXN0LnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvdGFyZ2V0cy9yZWR1Y2VMaXN0LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYmM4ZTgxCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy90YXJnZXRzL3JlZHVjZUxpc3QudHh0CkBAIC0wLDAgKzEsMTYwIEBACisjIExpc3Qgb2YgY291bnRyaWVzIHRvIHdoaWNoIHdlIHdhbnQgdG8gYXBwbHkgcmVkdWN0aW9uIChkb3duIHNhbXBsaW5nKQorIyBVc2UgYWxwaGEgMyBjb2RlIHRvIGlkZW50aWZ5IGEgY291bnRyeS4KKyMgSmFtaWVzIG5ldyAoIDIwIGNvdW50cmllcyApIDoKKyMKKyNDQU4KKyNBVVMKKyNaQVIKKyNaV0UKKyNCTFIKKyNCTFoKKyNCV0EKKyNDTVIKKyNDUkkKKyNTTFYKKyNFU1QKKyNFVEgKKyNHVE0KKyNIRE4KKyNMVkEKKyNMVFUKKyNNTEkKKyNNUlQKKyNOSUMKKyNQQU4KKyMKK0FMQgorQU5ECisjQVVUCisjQkVMCisjQklICisjQkdSCisjSFJWCisjQ0hFCisjQ1pFCisjRE5LCisjRklOCisjRlJBCisjREVVCisjR1JDCisjR0JSCisjSFVOCisjSVNMCisjSVJMCisjSVRBCisjTElFCisjTFVYCisjTkxECisjTk9SCisjUE9MCisjUFJUCisjUk9VCisjUlVTCisjU01SCisjU1ZOCisjRVNQCisjU1dFCisjU1JCCisjRFpBCisjQUdPCisjQVJNCisjQkVOCisjQkZBCisjQkRJCisjQlJOCisjQ1BWCisjQ0FGCisjVENECisjQ09HCisjQ09NCisjRUdZCisjR05RCisjRVJJCisjR0FCCisjR01CCisjR05CCisjR0hBCisjQ0lWCisjS0VOCisjTFNPCisjTEJSCisjTEJZCisjTURHCisjTVdJCisjTVVTCisjTUFSCisjTU9aCisjTkFNCisjTkVSCisjTkdBCisjUE5HCisjUFJJCisjUldBCisjU1RQCisjU0VOCisjU1lDCisjU0xFCisjU0dQCisjWkFGCisjU09NCisjU0ROCisjVFpBCisjVEdPCisjVFVOCisjVUdBCisjWk1CCisjQkhSCisjSVJRCisjSVJOCisjSk9SCisjS1dUCisjTEJOCisjT01OCisjUUFUCisjU0FVCisjU1lSCisjQVJFCisjWUVNCisjTUVYCisjQUZHCisjQVpFCisjS0FaCisjS0daCisjTURBCisjTUtECisjTU5HCisjUEFLCisjVEpLCisjVFVSCisjVEtNCisjVVpCCisjQVJHCisjQk9MCisjQlJBCisjQ0hMCisjQ09MCisjRUNVCisjR0lOCisjR1VZCisjUFJZCisjUEVSCisjU1VSCisjVVJZCisjVkVOCisjQkdECisjQlROCisjQlJOCisjS0hNCisjQ0hOCisjSU5ECisjSUROCisjSlBOCisjTEFPCisjTUFDCisjTlBMCisjUFJLCisjUEhMCisjS09SCisjVEhBCisjVk5NCisjVVNBClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy91cmxzLy50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3VybHMvLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMTZmYzY1Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy91cmxzLy50eHQKQEAgLTAsMCArMSwyIEBACitVTklURUROQVRJT05TKmh0dHA6Ly93d3cuZ3JpZC51bmVwLmNoL2RhdGEvZGF0YS5waHA/Y2F0ZWdvcnk9aHVtYW5fcmVsYXRlZAorSVNPMzE2Nl8xKmh0dHBzOi8vd3d3LmNpYS5nb3YvbGlicmFyeS9wdWJsaWNhdGlvbnMvdGhlLXdvcmxkLWZhY3Rib29rLwpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy91cmxzL0FmZ2hhbmlzdGFuLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvdXJscy9BZmdoYW5pc3Rhbi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGVkYTBiZQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvdXJscy9BZmdoYW5pc3Rhbi50eHQKQEAgLTAsMCArMSw3IEBACisjCitDSVRZUE9QKmh0dHA6Ly93d3cuY3NvLmdvdi5hZi8KK0RJVkEqaHR0cDovL3d3dy5jaXBvdGF0by5vcmcvRElWQS9kYXRhL0RhdGFTZXJ2ZXIuYXNwP0FSRUE9QUZHJlRIRU1FPV9hZG0KKyMKK0NJQSpodHRwczovL3d3dy5jaWEuZ292L2NpYS9wdWJsaWNhdGlvbnMvZmFjdGJvb2svZ2Vvcy9hZi5odG1sCitJU08zMTY2XzEqaHR0cHM6Ly93d3cuY2lhLmdvdi9saWJyYXJ5L3B1YmxpY2F0aW9ucy90aGUtd29ybGQtZmFjdGJvb2svCitJU08zMTY2XzIqaHR0cHM6Ly93d3cuY2lhLmdvdi9saWJyYXJ5L3B1YmxpY2F0aW9ucy90aGUtd29ybGQtZmFjdGJvb2svCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3VybHMvQWxiYW5pYS50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3VybHMvQWxiYW5pYS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTE2ZmM2NQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvdXJscy9BbGJhbmlhLnR4dApAQCAtMCwwICsxLDIgQEAKK1VOSVRFRE5BVElPTlMqaHR0cDovL3d3dy5ncmlkLnVuZXAuY2gvZGF0YS9kYXRhLnBocD9jYXRlZ29yeT1odW1hbl9yZWxhdGVkCitJU08zMTY2XzEqaHR0cHM6Ly93d3cuY2lhLmdvdi9saWJyYXJ5L3B1YmxpY2F0aW9ucy90aGUtd29ybGQtZmFjdGJvb2svCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3VybHMvQWxnZXJpYS50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3VybHMvQWxnZXJpYS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWEzOWNlMQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvdXJscy9BbGdlcmlhLnR4dApAQCAtMCwwICsxLDggQEAKKyMKK0NJVFlQT1AqaHR0cDovL3d3dy5jaXR5cG9wdWxhdGlvbi5kZS9BbGdlcmlhLmh0bWwKK1BPUCpodHRwOi8vd3d3Lm9ucy5kei9FbmdsaXNoL2luZGV4YWcuaHRtCitESVZBKmh0dHA6Ly93d3cuY2lwb3RhdG8ub3JnL0RJVkEvZGF0YS9EYXRhU2VydmVyLmFzcD9BUkVBPURaQSZUSEVNRT1fYWRtCisjCitDSUEqaHR0cHM6Ly93d3cuY2lhLmdvdi9jaWEvcHVibGljYXRpb25zL2ZhY3Rib29rL2dlb3MvYWcuaHRtbAorSVNPMzE2Nl8xKmh0dHBzOi8vd3d3LmNpYS5nb3YvbGlicmFyeS9wdWJsaWNhdGlvbnMvdGhlLXdvcmxkLWZhY3Rib29rLworSVNPMzE2Nl8yKmh0dHBzOi8vd3d3LmNpYS5nb3YvbGlicmFyeS9wdWJsaWNhdGlvbnMvdGhlLXdvcmxkLWZhY3Rib29rLwpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy91cmxzL0FuZG9ycmEudHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy91cmxzL0FuZG9ycmEudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUxNmZjNjUKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3VybHMvQW5kb3JyYS50eHQKQEAgLTAsMCArMSwyIEBACitVTklURUROQVRJT05TKmh0dHA6Ly93d3cuZ3JpZC51bmVwLmNoL2RhdGEvZGF0YS5waHA/Y2F0ZWdvcnk9aHVtYW5fcmVsYXRlZAorSVNPMzE2Nl8xKmh0dHBzOi8vd3d3LmNpYS5nb3YvbGlicmFyeS9wdWJsaWNhdGlvbnMvdGhlLXdvcmxkLWZhY3Rib29rLwpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy91cmxzL0FuZ29sYS50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3VybHMvQW5nb2xhLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYjQ0ODMzCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy91cmxzL0FuZ29sYS50eHQKQEAgLTAsMCArMSw2IEBACisjCitESVZBKmh0dHA6Ly93d3cuY2lwb3RhdG8ub3JnL0RJVkEvZGF0YS9EYXRhU2VydmVyLmFzcD9BUkVBPUFHTyZUSEVNRT1fYWRtCisjCitDSUEqaHR0cHM6Ly93d3cuY2lhLmdvdi9jaWEvcHVibGljYXRpb25zL2ZhY3Rib29rL2dlb3MvYW8uaHRtbAorSVNPMzE2Nl8xKmh0dHBzOi8vd3d3LmNpYS5nb3YvbGlicmFyeS9wdWJsaWNhdGlvbnMvdGhlLXdvcmxkLWZhY3Rib29rLworSVNPMzE2Nl8yKmh0dHBzOi8vd3d3LmNpYS5nb3YvbGlicmFyeS9wdWJsaWNhdGlvbnMvdGhlLXdvcmxkLWZhY3Rib29rLwpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy91cmxzL0FyZ2VudGluYS50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3VybHMvQXJnZW50aW5hLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MzA1Nzc0Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy91cmxzL0FyZ2VudGluYS50eHQKQEAgLTAsMCArMSw3IEBACisjCitDSVRZUE9QKmh0dHA6Ly93d3cuaW5kZWMubWVjb24uYXIvZGVmYXVsdC5odG0KK0RJVkEqaHR0cDovL3d3dy5jaXBvdGF0by5vcmcvRElWQS9kYXRhL0RhdGFTZXJ2ZXIuYXNwP0FSRUE9QVJHJlRIRU1FPV9hZG0KKyMKK0NJQSpodHRwczovL3d3dy5jaWEuZ292L2NpYS9wdWJsaWNhdGlvbnMvZmFjdGJvb2svZ2Vvcy9hci5odG1sCitJU08zMTY2XzEqaHR0cHM6Ly93d3cuY2lhLmdvdi9saWJyYXJ5L3B1YmxpY2F0aW9ucy90aGUtd29ybGQtZmFjdGJvb2svCitJU08zMTY2XzIqaHR0cHM6Ly93d3cuY2lhLmdvdi9saWJyYXJ5L3B1YmxpY2F0aW9ucy90aGUtd29ybGQtZmFjdGJvb2svCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3VybHMvQXJtZW5pYS50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3VybHMvQXJtZW5pYS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGNlMjdmNwotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvdXJscy9Bcm1lbmlhLnR4dApAQCAtMCwwICsxLDcgQEAKKyMKK0NJVFlQT1AqaHR0cDovL3d3dy5hcm1zdGF0LmFtLworRElWQSpodHRwOi8vd3d3LmNpcG90YXRvLm9yZy9ESVZBL2RhdGEvRGF0YVNlcnZlci5hc3A/QVJFQT1BUk0mVEhFTUU9X2FkbQorIworQ0lBKmh0dHBzOi8vd3d3LmNpYS5nb3YvY2lhL3B1YmxpY2F0aW9ucy9mYWN0Ym9vay9nZW9zL2FtLmh0bWwKK0lTTzMxNjZfMSpodHRwczovL3d3dy5jaWEuZ292L2xpYnJhcnkvcHVibGljYXRpb25zL3RoZS13b3JsZC1mYWN0Ym9vay8KK0lTTzMxNjZfMipodHRwczovL3d3dy5jaWEuZ292L2xpYnJhcnkvcHVibGljYXRpb25zL3RoZS13b3JsZC1mYWN0Ym9vay8KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvdXJscy9BdXN0cmFsaWEudHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy91cmxzL0F1c3RyYWxpYS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2I1YmI2ZQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvdXJscy9BdXN0cmFsaWEudHh0CkBAIC0wLDAgKzEsNSBAQAorIworUE9QKmh0dHA6Ly93d3cueGlzdC5vcmcvY250cnkvYXVzdHJhbGlhLmFzcHgKK0NJQSpodHRwOi8vd3d3Lmdlb2NvbW0uY29tL2ZhcS9jb3B5cmlnaHQuaHRtbAorSVNPMzE2Nl8xKmh0dHBzOi8vd3d3LmNpYS5nb3YvbGlicmFyeS9wdWJsaWNhdGlvbnMvdGhlLXdvcmxkLWZhY3Rib29rLworSVNPMzE2Nl8yKmh0dHBzOi8vd3d3LmNpYS5nb3YvbGlicmFyeS9wdWJsaWNhdGlvbnMvdGhlLXdvcmxkLWZhY3Rib29rLwpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy91cmxzL0F1c3RyaWEudHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy91cmxzL0F1c3RyaWEudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUxNmZjNjUKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3VybHMvQXVzdHJpYS50eHQKQEAgLTAsMCArMSwyIEBACitVTklURUROQVRJT05TKmh0dHA6Ly93d3cuZ3JpZC51bmVwLmNoL2RhdGEvZGF0YS5waHA/Y2F0ZWdvcnk9aHVtYW5fcmVsYXRlZAorSVNPMzE2Nl8xKmh0dHBzOi8vd3d3LmNpYS5nb3YvbGlicmFyeS9wdWJsaWNhdGlvbnMvdGhlLXdvcmxkLWZhY3Rib29rLwpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy91cmxzL0F6ZXJiYWlqYW4udHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy91cmxzL0F6ZXJiYWlqYW4udHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAwYzQ2MGIKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3VybHMvQXplcmJhaWphbi50eHQKQEAgLTAsMCArMSw4IEBACisjCitDSVRZUE9QKmh0dHA6Ly93d3cuYXpzdGF0Lm9yZy9pbmRleGVuLnBocAorUE9QMipodHRwOi8vd3d3LmdlbmRlci1hei5vcmcvc2hhYmxvbl9lbi5zaHRtbD9kb2MvZW4vYWJvdXQvY291bnRyeQorRElWQSpodHRwOi8vd3d3LmNpcG90YXRvLm9yZy9ESVZBL2RhdGEvRGF0YVNlcnZlci5hc3A/QVJFQT1BWkUmVEhFTUU9X2FkbQorIworQ0lBKmh0dHBzOi8vd3d3LmNpYS5nb3YvY2lhL3B1YmxpY2F0aW9ucy9mYWN0Ym9vay9nZW9zL2FqLmh0bWwKK0lTTzMxNjZfMSpodHRwczovL3d3dy5jaWEuZ292L2xpYnJhcnkvcHVibGljYXRpb25zL3RoZS13b3JsZC1mYWN0Ym9vay8KK0lTTzMxNjZfMipodHRwczovL3d3dy5jaWEuZ292L2xpYnJhcnkvcHVibGljYXRpb25zL3RoZS13b3JsZC1mYWN0Ym9vay8KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvdXJscy9CYWhyYWluLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvdXJscy9CYWhyYWluLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YmVmMTE1Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy91cmxzL0JhaHJhaW4udHh0CkBAIC0wLDAgKzEsNyBAQAorIworRElWQSpodHRwOi8vd3d3LmNpcG90YXRvLm9yZy9ESVZBL2RhdGEvRGF0YVNlcnZlci5hc3A/QVJFQT1CSFImVEhFTUU9X2FkbQorIworQ0lBKmh0dHBzOi8vd3d3LmNpYS5nb3YvY2lhL3B1YmxpY2F0aW9ucy9mYWN0Ym9vay9nZW9zL2JhLmh0bWwKK0lTTzMxNjZfMSpodHRwczovL3d3dy5jaWEuZ292L2xpYnJhcnkvcHVibGljYXRpb25zL3RoZS13b3JsZC1mYWN0Ym9vay8KK0lTTzMxNjZfMipodHRwczovL3d3dy5jaWEuZ292L2xpYnJhcnkvcHVibGljYXRpb25zL3RoZS13b3JsZC1mYWN0Ym9vay8KKwpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy91cmxzL0JhbmdsYWRlc2gudHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy91cmxzL0JhbmdsYWRlc2gudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ0YmFiNjcKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3VybHMvQmFuZ2xhZGVzaC50eHQKQEAgLTAsMCArMSw4IEBACisjCitDSVRZUE9QKmh0dHBzOi8vd3d3LmNpYS5nb3YvbGlicmFyeS9wdWJsaWNhdGlvbnMvdGhlLXdvcmxkLWZhY3Rib29rLworQVJFQSpodHRwczovL3d3dy5jaWEuZ292L2xpYnJhcnkvcHVibGljYXRpb25zL3RoZS13b3JsZC1mYWN0Ym9vay8KK0RJVkEqaHR0cDovL3d3dy5jaXBvdGF0by5vcmcvRElWQS9kYXRhL0RhdGFTZXJ2ZXIuYXNwP0FSRUE9QkdEJlRIRU1FPV9hZG0KKyMKK0NJQSpodHRwczovL3d3dy5jaWEuZ292L2NpYS9wdWJsaWNhdGlvbnMvZmFjdGJvb2svZ2Vvcy9iZy5odG1sCitJU08zMTY2XzEqaHR0cHM6Ly93d3cuY2lhLmdvdi9saWJyYXJ5L3B1YmxpY2F0aW9ucy90aGUtd29ybGQtZmFjdGJvb2svCitJU08zMTY2XzIqaHR0cHM6Ly93d3cuY2lhLmdvdi9saWJyYXJ5L3B1YmxpY2F0aW9ucy90aGUtd29ybGQtZmFjdGJvb2svCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3VybHMvQmVsYXJ1cy50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3VybHMvQmVsYXJ1cy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTI4OTE0OQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvdXJscy9CZWxhcnVzLnR4dApAQCAtMCwwICsxLDUgQEAKKyMKK1BPUCpodHRwOi8vd3d3Lnhpc3Qub3JnL2NudHJ5L2JlbGFydXMuYXNweAorQ0lBKmh0dHA6Ly93d3cuZ2VvY29tbS5jb20vZmFxL2NvcHlyaWdodC5odG1sCitJU08zMTY2XzEqaHR0cHM6Ly93d3cuY2lhLmdvdi9saWJyYXJ5L3B1YmxpY2F0aW9ucy90aGUtd29ybGQtZmFjdGJvb2svCitJU08zMTY2XzIqaHR0cHM6Ly93d3cuY2lhLmdvdi9saWJyYXJ5L3B1YmxpY2F0aW9ucy90aGUtd29ybGQtZmFjdGJvb2svCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3VybHMvQmVsZ2l1bS50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3VybHMvQmVsZ2l1bS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTE2ZmM2NQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvdXJscy9CZWxnaXVtLnR4dApAQCAtMCwwICsxLDIgQEAKK1VOSVRFRE5BVElPTlMqaHR0cDovL3d3dy5ncmlkLnVuZXAuY2gvZGF0YS9kYXRhLnBocD9jYXRlZ29yeT1odW1hbl9yZWxhdGVkCitJU08zMTY2XzEqaHR0cHM6Ly93d3cuY2lhLmdvdi9saWJyYXJ5L3B1YmxpY2F0aW9ucy90aGUtd29ybGQtZmFjdGJvb2svCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3VybHMvQmVsaXplLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvdXJscy9CZWxpemUudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk3NzBiNWMKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3VybHMvQmVsaXplLnR4dApAQCAtMCwwICsxLDUgQEAKKyMKK1BPUCpodHRwOi8vd3d3Lnhpc3Qub3JnL2NudHJ5L2JlbGl6ZS5hc3B4CitDSUEqaHR0cDovL3d3dy5nZW9jb21tLmNvbS9mYXEvY29weXJpZ2h0Lmh0bWwKK0lTTzMxNjZfMSpodHRwczovL3d3dy5jaWEuZ292L2xpYnJhcnkvcHVibGljYXRpb25zL3RoZS13b3JsZC1mYWN0Ym9vay8KK0lTTzMxNjZfMipodHRwczovL3d3dy5jaWEuZ292L2xpYnJhcnkvcHVibGljYXRpb25zL3RoZS13b3JsZC1mYWN0Ym9vay8KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvdXJscy9CZW5pbi50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3VybHMvQmVuaW4udHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdlODdkZTQKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3VybHMvQmVuaW4udHh0CkBAIC0wLDAgKzEsOCBAQAorIworQ0lUWVBPUCpodHRwOi8vd3d3Lmluc2FlLWJqLm9yZy8KK0FSRUEqaHR0cHM6Ly93d3cuY2lhLmdvdi9saWJyYXJ5L3B1YmxpY2F0aW9ucy90aGUtd29ybGQtZmFjdGJvb2svCitESVZBKmh0dHA6Ly93d3cuY2lwb3RhdG8ub3JnL0RJVkEvZGF0YS9EYXRhU2VydmVyLmFzcD9BUkVBPUJFTiZUSEVNRT1fYWRtCisjCitDSUEqaHR0cHM6Ly93d3cuY2lhLmdvdi9jaWEvcHVibGljYXRpb25zL2ZhY3Rib29rL2dlb3MvYm4uaHRtbAorSVNPMzE2Nl8xKmh0dHBzOi8vd3d3LmNpYS5nb3YvbGlicmFyeS9wdWJsaWNhdGlvbnMvdGhlLXdvcmxkLWZhY3Rib29rLworSVNPMzE2Nl8yKmh0dHBzOi8vd3d3LmNpYS5nb3YvbGlicmFyeS9wdWJsaWNhdGlvbnMvdGhlLXdvcmxkLWZhY3Rib29rLwpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy91cmxzL0JodXRhbi50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3VybHMvQmh1dGFuLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NGYyNjk2Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy91cmxzL0JodXRhbi50eHQKQEAgLTAsMCArMSw4IEBACisjCitDSVRZUE9QKmh0dHA6Ly93d3cuY2l0eXBvcHVsYXRpb24uZGUvQnV0aGFuLmh0bWwKK1BPUCpodHRwOi8vd3d3LmJodXRhbmNlbnN1cy5nb3YuYnQvCitESVZBKmh0dHA6Ly93d3cuY2lwb3RhdG8ub3JnL0RJVkEvZGF0YS9EYXRhU2VydmVyLmFzcD9BUkVBPUJUTiZUSEVNRT1fYWRtCisjCitDSUEqaHR0cHM6Ly93d3cuY2lhLmdvdi9jaWEvcHVibGljYXRpb25zL2ZhY3Rib29rL2dlb3MvYnQuaHRtbAorSVNPMzE2Nl8xKmh0dHBzOi8vd3d3LmNpYS5nb3YvbGlicmFyeS9wdWJsaWNhdGlvbnMvdGhlLXdvcmxkLWZhY3Rib29rLworSVNPMzE2Nl8yKmh0dHBzOi8vd3d3LmNpYS5nb3YvbGlicmFyeS9wdWJsaWNhdGlvbnMvdGhlLXdvcmxkLWZhY3Rib29rLwpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy91cmxzL0JvbGl2aWEudHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy91cmxzL0JvbGl2aWEudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIxN2VkOTAKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3VybHMvQm9saXZpYS50eHQKQEAgLTAsMCArMSw5IEBACisjCitDSVRZUE9QKmh0dHA6Ly93d3cuY2l0eXBvcHVsYXRpb24uZGUvQm9saXZpYS5odG1sCitQT1AqaHR0cDovL3d3dy5pbmUuZ292LmJvLworQVJFQSpodHRwczovL3d3dy5jaWEuZ292L2xpYnJhcnkvcHVibGljYXRpb25zL3RoZS13b3JsZC1mYWN0Ym9vay8KK0RJVkEqaHR0cDovL3d3dy5jaXBvdGF0by5vcmcvRElWQS9kYXRhL0RhdGFTZXJ2ZXIuYXNwP0FSRUE9Qk9MJlRIRU1FPV9hZG0KKyMKK0NJQSpodHRwczovL3d3dy5jaWEuZ292L2NpYS9wdWJsaWNhdGlvbnMvZmFjdGJvb2svZ2Vvcy9ibC5odG1sCitJU08zMTY2XzEqaHR0cHM6Ly93d3cuY2lhLmdvdi9saWJyYXJ5L3B1YmxpY2F0aW9ucy90aGUtd29ybGQtZmFjdGJvb2svCitJU08zMTY2XzIqaHR0cHM6Ly93d3cuY2lhLmdvdi9saWJyYXJ5L3B1YmxpY2F0aW9ucy90aGUtd29ybGQtZmFjdGJvb2svCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3VybHMvQm9zbmlhIGFuZCBIZXJ6ZWdvdmluYS50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3VybHMvQm9zbmlhIGFuZCBIZXJ6ZWdvdmluYS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTE2ZmM2NQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvdXJscy9Cb3NuaWEgYW5kIEhlcnplZ292aW5hLnR4dApAQCAtMCwwICsxLDIgQEAKK1VOSVRFRE5BVElPTlMqaHR0cDovL3d3dy5ncmlkLnVuZXAuY2gvZGF0YS9kYXRhLnBocD9jYXRlZ29yeT1odW1hbl9yZWxhdGVkCitJU08zMTY2XzEqaHR0cHM6Ly93d3cuY2lhLmdvdi9saWJyYXJ5L3B1YmxpY2F0aW9ucy90aGUtd29ybGQtZmFjdGJvb2svCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3VybHMvQm90c3dhbmEudHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy91cmxzL0JvdHN3YW5hLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YWI2ODdjCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy91cmxzL0JvdHN3YW5hLnR4dApAQCAtMCwwICsxLDUgQEAKKyMKK1BPUCpodHRwOi8vd3d3Lnhpc3Qub3JnL2NudHJ5L2JvdHN3YW5hLmFzcHgKK0NJQSpodHRwOi8vd3d3Lmdlb2NvbW0uY29tL2ZhcS9jb3B5cmlnaHQuaHRtbAorSVNPMzE2Nl8xKmh0dHBzOi8vd3d3LmNpYS5nb3YvbGlicmFyeS9wdWJsaWNhdGlvbnMvdGhlLXdvcmxkLWZhY3Rib29rLworSVNPMzE2Nl8yKmh0dHBzOi8vd3d3LmNpYS5nb3YvbGlicmFyeS9wdWJsaWNhdGlvbnMvdGhlLXdvcmxkLWZhY3Rib29rLwpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy91cmxzL0JyYXNpbC50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3VybHMvQnJhc2lsLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MDkyYjA5Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy91cmxzL0JyYXNpbC50eHQKQEAgLTAsMCArMSwxMSBAQAorIworQ0lUWVBPUCpodHRwOi8vd3d3LmNpdHlwb3B1bGF0aW9uLmRlL0JyYXppbC5odG1sCitQT1BVTFNUQVQqaHR0cDovL3d3dy5saWJyYXJ5LnV1Lm5sL3dlc3AvcG9wdWxzdGF0L0FtZXJpY2FzL2JyYXppbHQuaHRtCitQT1AqaHR0cDovL3d3dy5pYmdlLmdvdi5ici9lbmdsaXNoL2RlZmF1bHQucGhwCitQT1AyKmh0dHA6Ly93d3cuZ29sZGZpZWxkcy5jby56YS9JbnZlc3Rvci9Bbm51YWxfUmVwb3J0cy9GeV8yMDAzL2dmX2FyMDMvc2RfMDMvc3Rvcnkvc3R1ZHlfNi5odG0KK0FSRUEqaHR0cHM6Ly93d3cuY2lhLmdvdi9saWJyYXJ5L3B1YmxpY2F0aW9ucy90aGUtd29ybGQtZmFjdGJvb2svCitESVZBKmh0dHA6Ly93d3cuY2lwb3RhdG8ub3JnL0RJVkEvZGF0YS9EYXRhU2VydmVyLmFzcD9BUkVBPUJSQSZUSEVNRT1fYWRtCisjCitDSUEqaHR0cHM6Ly93d3cuY2lhLmdvdi9jaWEvcHVibGljYXRpb25zL2ZhY3Rib29rL2dlb3MvYnIuaHRtbAorSVNPMzE2Nl8xKmh0dHBzOi8vd3d3LmNpYS5nb3YvbGlicmFyeS9wdWJsaWNhdGlvbnMvdGhlLXdvcmxkLWZhY3Rib29rLworSVNPMzE2Nl8yKmh0dHBzOi8vd3d3LmNpYS5nb3YvbGlicmFyeS9wdWJsaWNhdGlvbnMvdGhlLXdvcmxkLWZhY3Rib29rLwpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy91cmxzL0JydW5laS50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3VybHMvQnJ1bmVpLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYmIwZTY2Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy91cmxzL0JydW5laS50eHQKQEAgLTAsMCArMSw2IEBACisjCitESVZBKmh0dHA6Ly93d3cuY2lwb3RhdG8ub3JnL0RJVkEvZGF0YS9EYXRhU2VydmVyLmFzcD9BUkVBPUJSTiZUSEVNRT1fYWRtCisjCitDSUEqaHR0cHM6Ly93d3cuY2lhLmdvdi9jaWEvcHVibGljYXRpb25zL2ZhY3Rib29rL2dlb3MvYnguaHRtbAorSVNPMzE2Nl8xKmh0dHBzOi8vd3d3LmNpYS5nb3YvbGlicmFyeS9wdWJsaWNhdGlvbnMvdGhlLXdvcmxkLWZhY3Rib29rLworSVNPMzE2Nl8yKmh0dHBzOi8vd3d3LmNpYS5nb3YvbGlicmFyeS9wdWJsaWNhdGlvbnMvdGhlLXdvcmxkLWZhY3Rib29rLwpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy91cmxzL0J1bGdhcmlhLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvdXJscy9CdWxnYXJpYS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTE2ZmM2NQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvdXJscy9CdWxnYXJpYS50eHQKQEAgLTAsMCArMSwyIEBACitVTklURUROQVRJT05TKmh0dHA6Ly93d3cuZ3JpZC51bmVwLmNoL2RhdGEvZGF0YS5waHA/Y2F0ZWdvcnk9aHVtYW5fcmVsYXRlZAorSVNPMzE2Nl8xKmh0dHBzOi8vd3d3LmNpYS5nb3YvbGlicmFyeS9wdWJsaWNhdGlvbnMvdGhlLXdvcmxkLWZhY3Rib29rLwpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy91cmxzL0J1cmtpbmEudHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy91cmxzL0J1cmtpbmEudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFhZWNhY2MKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3VybHMvQnVya2luYS50eHQKQEAgLTAsMCArMSw3IEBACisjCitDSVRZUE9QKmh0dHA6Ly93d3cuaW5zZC5iZi8KK0RJVkEqaHR0cDovL3d3dy5jaXBvdGF0by5vcmcvRElWQS9kYXRhL0RhdGFTZXJ2ZXIuYXNwP0FSRUE9QkZBJlRIRU1FPV9hZG0KKyMKK0NJQSpodHRwczovL3d3dy5jaWEuZ292L2NpYS9wdWJsaWNhdGlvbnMvZmFjdGJvb2svZ2Vvcy91di5odG1sCitJU08zMTY2XzEqaHR0cHM6Ly93d3cuY2lhLmdvdi9saWJyYXJ5L3B1YmxpY2F0aW9ucy90aGUtd29ybGQtZmFjdGJvb2svCitJU08zMTY2XzIqaHR0cHM6Ly93d3cuY2lhLmdvdi9saWJyYXJ5L3B1YmxpY2F0aW9ucy90aGUtd29ybGQtZmFjdGJvb2svClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy91cmxzL0J1cmtpbmFGYXNvLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvdXJscy9CdXJraW5hRmFzby50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmM0N2E5MgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvdXJscy9CdXJraW5hRmFzby50eHQKQEAgLTAsMCArMSw3IEBACisjCitDSVRZUE9QKmh0dHA6Ly93d3cuaW5zZC5iZi8KK0RJVkEqaHR0cDovL3d3dy5jaXBvdGF0by5vcmcvRElWQS9kYXRhL0RhdGFTZXJ2ZXIuYXNwP0FSRUE9QkZBJlRIRU1FPV9hZG0KKyMKK0NJQSpodHRwczovL3d3dy5jaWEuZ292L2NpYS9wdWJsaWNhdGlvbnMvZmFjdGJvb2svZ2Vvcy91di5odG1sCitJU08zMTY2XzEqaHR0cHM6Ly93d3cuY2lhLmdvdi9saWJyYXJ5L3B1YmxpY2F0aW9ucy90aGUtd29ybGQtZmFjdGJvb2svCitJU08zMTY2XzIqaHR0cHM6Ly93d3cuY2lhLmdvdi9saWJyYXJ5L3B1YmxpY2F0aW9ucy90aGUtd29ybGQtZmFjdGJvb2svCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3VybHMvQnVydW5kaS50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3VybHMvQnVydW5kaS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGY3NTUwMwotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvdXJscy9CdXJ1bmRpLnR4dApAQCAtMCwwICsxLDggQEAKKyMKK0NJVFlQT1AqaHR0cHM6Ly93d3cuY2lhLmdvdi9saWJyYXJ5L3B1YmxpY2F0aW9ucy90aGUtd29ybGQtZmFjdGJvb2svCitBUkVBKmh0dHBzOi8vd3d3LmNpYS5nb3YvbGlicmFyeS9wdWJsaWNhdGlvbnMvdGhlLXdvcmxkLWZhY3Rib29rLworRElWQSpodHRwOi8vd3d3LmNpcG90YXRvLm9yZy9ESVZBL2RhdGEvRGF0YVNlcnZlci5hc3A/QVJFQT1CREkmVEhFTUU9X2FkbQorIworQ0lBKmh0dHBzOi8vd3d3LmNpYS5nb3YvY2lhL3B1YmxpY2F0aW9ucy9mYWN0Ym9vay9nZW9zL2J5Lmh0bWwKK0lTTzMxNjZfMSpodHRwczovL3d3dy5jaWEuZ292L2xpYnJhcnkvcHVibGljYXRpb25zL3RoZS13b3JsZC1mYWN0Ym9vay8KK0lTTzMxNjZfMipodHRwczovL3d3dy5jaWEuZ292L2xpYnJhcnkvcHVibGljYXRpb25zL3RoZS13b3JsZC1mYWN0Ym9vay8KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvdXJscy9DYW1ib2RpYS50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3VybHMvQ2FtYm9kaWEudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2YjVkZTgKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3VybHMvQ2FtYm9kaWEudHh0CkBAIC0wLDAgKzEsNyBAQAorIworQ0lUWVBPUCpodHRwOi8vd3d3Lm5pcy5nb3Yua2gvCitESVZBKmh0dHA6Ly93d3cuY2lwb3RhdG8ub3JnL0RJVkEvZGF0YS9EYXRhU2VydmVyLmFzcD9BUkVBPUtITSZUSEVNRT1fYWRtCisjCitDSUEqaHR0cHM6Ly93d3cuY2lhLmdvdi9jaWEvcHVibGljYXRpb25zL2ZhY3Rib29rL2dlb3MvY2IuaHRtbAorSVNPMzE2Nl8xKmh0dHBzOi8vd3d3LmNpYS5nb3YvbGlicmFyeS9wdWJsaWNhdGlvbnMvdGhlLXdvcmxkLWZhY3Rib29rLworSVNPMzE2Nl8yKmh0dHBzOi8vd3d3LmNpYS5nb3YvbGlicmFyeS9wdWJsaWNhdGlvbnMvdGhlLXdvcmxkLWZhY3Rib29rLwpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy91cmxzL0NhbWVyb29uLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvdXJscy9DYW1lcm9vbi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWIwMDlmMAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvdXJscy9DYW1lcm9vbi50eHQKQEAgLTAsMCArMSw1IEBACisjCitQT1AqaHR0cDovL3d3dy54aXN0Lm9yZy9jbnRyeS9jYW1lcm9vbi5hc3B4CitDSUEqaHR0cDovL3d3dy5nZW9jb21tLmNvbS9mYXEvY29weXJpZ2h0Lmh0bWwKK0lTTzMxNjZfMSpodHRwczovL3d3dy5jaWEuZ292L2xpYnJhcnkvcHVibGljYXRpb25zL3RoZS13b3JsZC1mYWN0Ym9vay8KK0lTTzMxNjZfMipodHRwczovL3d3dy5jaWEuZ292L2xpYnJhcnkvcHVibGljYXRpb25zL3RoZS13b3JsZC1mYWN0Ym9vay8KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvdXJscy9DYW5hZGEudHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy91cmxzL0NhbmFkYS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZThiM2ExMgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvdXJscy9DYW5hZGEudHh0CkBAIC0wLDAgKzEsNSBAQAorIworUE9QKmh0dHA6Ly93d3cueGlzdC5vcmcvY250cnkvY2FuYWRhLmFzcHgKK0NJQSpodHRwOi8vd3d3Lmdlb2NvbW0uY29tL2ZhcS9jb3B5cmlnaHQuaHRtbAorSVNPMzE2Nl8xKmh0dHBzOi8vd3d3LmNpYS5nb3YvbGlicmFyeS9wdWJsaWNhdGlvbnMvdGhlLXdvcmxkLWZhY3Rib29rLworSVNPMzE2Nl8yKmh0dHBzOi8vd3d3LmNpYS5nb3YvbGlicmFyeS9wdWJsaWNhdGlvbnMvdGhlLXdvcmxkLWZhY3Rib29rLwpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy91cmxzL0NhcGUgVmVyZGUudHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy91cmxzL0NhcGUgVmVyZGUudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEyNTZhYzcKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3VybHMvQ2FwZSBWZXJkZS50eHQKQEAgLTAsMCArMSw3IEBACisjCitDSVRZUE9QKmh0dHA6Ly93d3cuaW5lLmN2LworIworRElWQSpodHRwOi8vd3d3LmNpcG90YXRvLm9yZy9ESVZBL2RhdGEvRGF0YVNlcnZlci5hc3A/QVJFQT1DUFYmVEhFTUU9X2FkbQorQ0lBKmh0dHBzOi8vd3d3LmNpYS5nb3YvY2lhL3B1YmxpY2F0aW9ucy9mYWN0Ym9vay9nZW9zL2N2Lmh0bWwKK0lTTzMxNjZfMSpodHRwczovL3d3dy5jaWEuZ292L2xpYnJhcnkvcHVibGljYXRpb25zL3RoZS13b3JsZC1mYWN0Ym9vay8KK0lTTzMxNjZfMipodHRwczovL3d3dy5jaWEuZ292L2xpYnJhcnkvcHVibGljYXRpb25zL3RoZS13b3JsZC1mYWN0Ym9vay8KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvdXJscy9DZW50cmFsIEFmcmljYW4gUmVwdWJsaWMudHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy91cmxzL0NlbnRyYWwgQWZyaWNhbiBSZXB1YmxpYy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmZhMzEwMAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvdXJscy9DZW50cmFsIEFmcmljYW4gUmVwdWJsaWMudHh0CkBAIC0wLDAgKzEsNyBAQAorIworUE9QKmh0dHA6Ly93d3cuc3RhdC1jZW50cmFmcmlxdWUuY29tLworRElWQSpodHRwOi8vd3d3LmNpcG90YXRvLm9yZy9ESVZBL2RhdGEvRGF0YVNlcnZlci5hc3A/QVJFQT1DQUYmVEhFTUU9X2FkbQorIworQ0lBKmh0dHBzOi8vd3d3LmNpYS5nb3YvY2lhL3B1YmxpY2F0aW9ucy9mYWN0Ym9vay9nZW9zL2N0Lmh0bWwKK0lTTzMxNjZfMSpodHRwczovL3d3dy5jaWEuZ292L2xpYnJhcnkvcHVibGljYXRpb25zL3RoZS13b3JsZC1mYWN0Ym9vay8KK0lTTzMxNjZfMipodHRwczovL3d3dy5jaWEuZ292L2xpYnJhcnkvcHVibGljYXRpb25zL3RoZS13b3JsZC1mYWN0Ym9vay8KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvdXJscy9DaGFkLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvdXJscy9DaGFkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMmEwOTYzCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy91cmxzL0NoYWQudHh0CkBAIC0wLDAgKzEsOCBAQAorIworQ0lUWVBPUCpodHRwOi8vd3d3LmNpdHlwb3B1bGF0aW9uLmRlL0NoYWQuaHRtbAorIworUE9QKmh0dHA6Ly93d3cuaW5zZWVkLXRjaGFkLm9yZy8KK0RJVkEqaHR0cDovL3d3dy5jaXBvdGF0by5vcmcvRElWQS9kYXRhL0RhdGFTZXJ2ZXIuYXNwP0FSRUE9VENEJlRIRU1FPV9hZG0KK0NJQSpodHRwczovL3d3dy5jaWEuZ292L2NpYS9wdWJsaWNhdGlvbnMvZmFjdGJvb2svZ2Vvcy9jZC5odG1sCitJU08zMTY2XzEqaHR0cHM6Ly93d3cuY2lhLmdvdi9saWJyYXJ5L3B1YmxpY2F0aW9ucy90aGUtd29ybGQtZmFjdGJvb2svCitJU08zMTY2XzIqaHR0cHM6Ly93d3cuY2lhLmdvdi9saWJyYXJ5L3B1YmxpY2F0aW9ucy90aGUtd29ybGQtZmFjdGJvb2svCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3VybHMvQ2hpbGUudHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy91cmxzL0NoaWxlLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MWFmNTQzCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy91cmxzL0NoaWxlLnR4dApAQCAtMCwwICsxLDEwIEBACisjCitDSVRZUE9QKmh0dHA6Ly93d3cuY2l0eXBvcHVsYXRpb24uZGUvQ2hpbGUuaHRtbAorUE9QKmh0dHA6Ly93d3cuaW5lLmNsL2luZS9jYW5hbGVzL2NoaWxlX2VzdGFkaXN0aWNvL2hvbWUucGhwCitQT1AyKmh0dHA6Ly93d3cudmlzaXRpbmdjaGlsZS5jb20vcmVnaW9uZXMvcmVnaW9uLXN1ci9yZWdpb24tYmlvLWJpby9wcm92aW5jaWEtYXJhdWNvL3Byb3ZpbmNpYS1hcmF1Y28ucGhwCitERU1PR1JBRklBKmh0dHA6Ly93d3cuaW5lLmNsL2luZS9jYW5hbGVzL2NoaWxlX2VzdGFkaXN0aWNvL2RlbW9ncmFmaWFfeV92aXRhbGVzL2RlbW9ncmFmaWEvZGVtb2dyYWZpYS5waHAKK0RJVkEqaHR0cDovL3d3dy5jaXBvdGF0by5vcmcvRElWQS9kYXRhL0RhdGFTZXJ2ZXIuYXNwP0FSRUE9Q0hMJlRIRU1FPV9hZG0KKyMKK0NJQSpodHRwczovL3d3dy5jaWEuZ292L2NpYS9wdWJsaWNhdGlvbnMvZmFjdGJvb2svZ2Vvcy9jaS5odG1sCitJU08zMTY2XzEqaHR0cHM6Ly93d3cuY2lhLmdvdi9saWJyYXJ5L3B1YmxpY2F0aW9ucy90aGUtd29ybGQtZmFjdGJvb2svCitJU08zMTY2XzIqaHR0cHM6Ly93d3cuY2lhLmdvdi9saWJyYXJ5L3B1YmxpY2F0aW9ucy90aGUtd29ybGQtZmFjdGJvb2svCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3VybHMvQ2hpbmEudHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy91cmxzL0NoaW5hLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMmQ0MTI1Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy91cmxzL0NoaW5hLnR4dApAQCAtMCwwICsxLDcgQEAKKyMKK0NJVFlQT1AqaHR0cDovL3d3dy5zdGF0cy5nb3YuY24vZW5nbGlzaC9pbmRleC5odG0KK0RJVkEqaHR0cDovL3d3dy5jaXBvdGF0by5vcmcvRElWQS9kYXRhL0RhdGFTZXJ2ZXIuYXNwP0FSRUE9Q0hOJlRIRU1FPV9hZG0KKyMKK0NJQSpodHRwczovL3d3dy5jaWEuZ292L2NpYS9wdWJsaWNhdGlvbnMvZmFjdGJvb2svZ2Vvcy9jaC5odG1sCitJU08zMTY2XzEqaHR0cHM6Ly93d3cuY2lhLmdvdi9saWJyYXJ5L3B1YmxpY2F0aW9ucy90aGUtd29ybGQtZmFjdGJvb2svCitJU08zMTY2XzIqaHR0cHM6Ly93d3cuY2lhLmdvdi9saWJyYXJ5L3B1YmxpY2F0aW9ucy90aGUtd29ybGQtZmFjdGJvb2svCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3VybHMvQ29sb21iaWEudHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy91cmxzL0NvbG9tYmlhLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNjBlZTFjCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy91cmxzL0NvbG9tYmlhLnR4dApAQCAtMCwwICsxLDggQEAKKyMKK0NJVFlQT1AqaHR0cDovL3d3dy5kYW5lLmdvdi5jby8KK1BPUDIqaHR0cHM6Ly93d3cuY2lhLmdvdi9saWJyYXJ5L3B1YmxpY2F0aW9ucy90aGUtd29ybGQtZmFjdGJvb2svCitESVZBKmh0dHA6Ly93d3cuY2lwb3RhdG8ub3JnL0RJVkEvZGF0YS9EYXRhU2VydmVyLmFzcD9BUkVBPUNPTCZUSEVNRT1fYWRtCisjCitDSUEqaHR0cHM6Ly93d3cuY2lhLmdvdi9jaWEvcHVibGljYXRpb25zL2ZhY3Rib29rL2dlb3MvY28uaHRtbAorSVNPMzE2Nl8xKmh0dHBzOi8vd3d3LmNpYS5nb3YvbGlicmFyeS9wdWJsaWNhdGlvbnMvdGhlLXdvcmxkLWZhY3Rib29rLworSVNPMzE2Nl8yKmh0dHBzOi8vd3d3LmNpYS5nb3YvbGlicmFyeS9wdWJsaWNhdGlvbnMvdGhlLXdvcmxkLWZhY3Rib29rLwpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy91cmxzL0NvbW9yb3MudHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy91cmxzL0NvbW9yb3MudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM3M2Q5ZTkKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3VybHMvQ29tb3Jvcy50eHQKQEAgLTAsMCArMSw2IEBACisjCitESVZBKmh0dHA6Ly93d3cuY2lwb3RhdG8ub3JnL0RJVkEvZGF0YS9EYXRhU2VydmVyLmFzcD9BUkVBPUNPTSZUSEVNRT1fYWRtCisjCitDSUEqaHR0cHM6Ly93d3cuY2lhLmdvdi9jaWEvcHVibGljYXRpb25zL2ZhY3Rib29rL2dlb3MvY24uaHRtbAorSVNPMzE2Nl8xKmh0dHBzOi8vd3d3LmNpYS5nb3YvbGlicmFyeS9wdWJsaWNhdGlvbnMvdGhlLXdvcmxkLWZhY3Rib29rLworSVNPMzE2Nl8yKmh0dHBzOi8vd3d3LmNpYS5nb3YvbGlicmFyeS9wdWJsaWNhdGlvbnMvdGhlLXdvcmxkLWZhY3Rib29rLwpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy91cmxzL0NvbmdvLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvdXJscy9Db25nby50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWU3YzEyOQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvdXJscy9Db25nby50eHQKQEAgLTAsMCArMSw3IEBACisjCitDSVRZUE9QKmh0dHA6Ly93d3cuY25zZWUub3JnLworRElWQSpodHRwOi8vd3d3LmNpcG90YXRvLm9yZy9ESVZBL2RhdGEvRGF0YVNlcnZlci5hc3A/QVJFQT1DT0cmVEhFTUU9X2FkbQorIworQ0lBKmh0dHBzOi8vd3d3LmNpYS5nb3YvY2lhL3B1YmxpY2F0aW9ucy9mYWN0Ym9vay9nZW9zL2NmLmh0bWwKK0lTTzMxNjZfMSpodHRwczovL3d3dy5jaWEuZ292L2xpYnJhcnkvcHVibGljYXRpb25zL3RoZS13b3JsZC1mYWN0Ym9vay8KK0lTTzMxNjZfMipodHRwczovL3d3dy5jaWEuZ292L2xpYnJhcnkvcHVibGljYXRpb25zL3RoZS13b3JsZC1mYWN0Ym9vay8KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvdXJscy9Db3N0YVJpY2EudHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy91cmxzL0Nvc3RhUmljYS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODVlNDAwNQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvdXJscy9Db3N0YVJpY2EudHh0CkBAIC0wLDAgKzEsNSBAQAorIworUE9QKmh0dHA6Ly93d3cueGlzdC5vcmcvY250cnkvY29zdGFyaWNhLmFzcHgKK0NJQSpodHRwOi8vd3d3Lmdlb2NvbW0uY29tL2ZhcS9jb3B5cmlnaHQuaHRtbAorSVNPMzE2Nl8xKmh0dHBzOi8vd3d3LmNpYS5nb3YvbGlicmFyeS9wdWJsaWNhdGlvbnMvdGhlLXdvcmxkLWZhY3Rib29rLworSVNPMzE2Nl8yKmh0dHBzOi8vd3d3LmNpYS5nb3YvbGlicmFyeS9wdWJsaWNhdGlvbnMvdGhlLXdvcmxkLWZhY3Rib29rLwpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy91cmxzL0Nyb2F0aWEudHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy91cmxzL0Nyb2F0aWEudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUxNmZjNjUKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3VybHMvQ3JvYXRpYS50eHQKQEAgLTAsMCArMSwyIEBACitVTklURUROQVRJT05TKmh0dHA6Ly93d3cuZ3JpZC51bmVwLmNoL2RhdGEvZGF0YS5waHA/Y2F0ZWdvcnk9aHVtYW5fcmVsYXRlZAorSVNPMzE2Nl8xKmh0dHBzOi8vd3d3LmNpYS5nb3YvbGlicmFyeS9wdWJsaWNhdGlvbnMvdGhlLXdvcmxkLWZhY3Rib29rLwpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy91cmxzL0N6ZWNoIFJlcHVibGljLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvdXJscy9DemVjaCBSZXB1YmxpYy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjEwODNjMgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvdXJscy9DemVjaCBSZXB1YmxpYy50eHQKQEAgLTAsMCArMSw0IEBACitVTklURUROQVRJT05TKmh0dHA6Ly93d3cuZ3JpZC51bmVwLmNoL2RhdGEvZGF0YS5waHA/Y2F0ZWdvcnk9aHVtYW5fcmVsYXRlZAorIworQ0lUWVBPUCpodHRwOi8vd3d3LmNpdHlwb3B1bGF0aW9uLmRlL0N6ZWNoUmVwLmh0bWwKK0lTTzMxNjZfMSpodHRwczovL3d3dy5jaWEuZ292L2xpYnJhcnkvcHVibGljYXRpb25zL3RoZS13b3JsZC1mYWN0Ym9vay8KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvdXJscy9EZW5tYXJrLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvdXJscy9EZW5tYXJrLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMTZmYzY1Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy91cmxzL0Rlbm1hcmsudHh0CkBAIC0wLDAgKzEsMiBAQAorVU5JVEVETkFUSU9OUypodHRwOi8vd3d3LmdyaWQudW5lcC5jaC9kYXRhL2RhdGEucGhwP2NhdGVnb3J5PWh1bWFuX3JlbGF0ZWQKK0lTTzMxNjZfMSpodHRwczovL3d3dy5jaWEuZ292L2xpYnJhcnkvcHVibGljYXRpb25zL3RoZS13b3JsZC1mYWN0Ym9vay8KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvdXJscy9FY3VhZG9yLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvdXJscy9FY3VhZG9yLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMzc2OWE0Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy91cmxzL0VjdWFkb3IudHh0CkBAIC0wLDAgKzEsNyBAQAorIworQ0lUWVBPUCpodHRwOi8vd3d3LmluZWMuZ292LmVjL2RlZmF1bHQuYXNwCitESVZBKmh0dHA6Ly93d3cuY2lwb3RhdG8ub3JnL0RJVkEvZGF0YS9EYXRhU2VydmVyLmFzcD9BUkVBPUVDVSZUSEVNRT1fYWRtCisjCitDSUEqaHR0cHM6Ly93d3cuY2lhLmdvdi9jaWEvcHVibGljYXRpb25zL2ZhY3Rib29rL2dlb3MvZWMuaHRtbAorSVNPMzE2Nl8xKmh0dHBzOi8vd3d3LmNpYS5nb3YvbGlicmFyeS9wdWJsaWNhdGlvbnMvdGhlLXdvcmxkLWZhY3Rib29rLworSVNPMzE2Nl8yKmh0dHBzOi8vd3d3LmNpYS5nb3YvbGlicmFyeS9wdWJsaWNhdGlvbnMvdGhlLXdvcmxkLWZhY3Rib29rLwpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy91cmxzL0VneXB0LnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvdXJscy9FZ3lwdC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDhlN2M0NgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvdXJscy9FZ3lwdC50eHQKQEAgLTAsMCArMSw3IEBACisjCitDSVRZUE9QKmh0dHA6Ly93d3cuc2lzLmdvdi5lZy9Fbi9EZWZhdWx0Lmh0bQorRElWQSpodHRwOi8vd3d3LmNpcG90YXRvLm9yZy9ESVZBL2RhdGEvRGF0YVNlcnZlci5hc3A/QVJFQT1FR1kmVEhFTUU9X2FkbQorIworQ0lBKmh0dHBzOi8vd3d3LmNpYS5nb3YvY2lhL3B1YmxpY2F0aW9ucy9mYWN0Ym9vay9nZW9zL2VnLmh0bWwKK0lTTzMxNjZfMSpodHRwczovL3d3dy5jaWEuZ292L2xpYnJhcnkvcHVibGljYXRpb25zL3RoZS13b3JsZC1mYWN0Ym9vay8KK0lTTzMxNjZfMipodHRwczovL3d3dy5jaWEuZ292L2xpYnJhcnkvcHVibGljYXRpb25zL3RoZS13b3JsZC1mYWN0Ym9vay8KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvdXJscy9FbFNhbHZhZG9yLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvdXJscy9FbFNhbHZhZG9yLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMjVmYWMyCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy91cmxzL0VsU2FsdmFkb3IudHh0CkBAIC0wLDAgKzEsNSBAQAorIworUE9QKmh0dHA6Ly93d3cueGlzdC5vcmcvY250cnkvZWxzYWx2YWRvci5hc3B4CitDSUEqaHR0cDovL3d3dy5nZW9jb21tLmNvbS9mYXEvY29weXJpZ2h0Lmh0bWwKK0lTTzMxNjZfMSpodHRwczovL3d3dy5jaWEuZ292L2xpYnJhcnkvcHVibGljYXRpb25zL3RoZS13b3JsZC1mYWN0Ym9vay8KK0lTTzMxNjZfMipodHRwczovL3d3dy5jaWEuZ292L2xpYnJhcnkvcHVibGljYXRpb25zL3RoZS13b3JsZC1mYWN0Ym9vay8KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvdXJscy9FcXVhdG9yaWFsIEd1aW5lYS50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3VybHMvRXF1YXRvcmlhbCBHdWluZWEudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMxZDQyNGIKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3VybHMvRXF1YXRvcmlhbCBHdWluZWEudHh0CkBAIC0wLDAgKzEsNyBAQAorIworQ0lUWVBPUCpodHRwOi8vd3d3LmRnZWNuc3RhdC1nZS5vcmcvCitESVZBKmh0dHA6Ly93d3cuY2lwb3RhdG8ub3JnL0RJVkEvZGF0YS9EYXRhU2VydmVyLmFzcD9BUkVBPUdOUSZUSEVNRT1fYWRtCisjCitDSUEqaHR0cHM6Ly93d3cuY2lhLmdvdi9jaWEvcHVibGljYXRpb25zL2ZhY3Rib29rL2dlb3MvZWsuaHRtbAorSVNPMzE2Nl8xKmh0dHBzOi8vd3d3LmNpYS5nb3YvbGlicmFyeS9wdWJsaWNhdGlvbnMvdGhlLXdvcmxkLWZhY3Rib29rLworSVNPMzE2Nl8yKmh0dHBzOi8vd3d3LmNpYS5nb3YvbGlicmFyeS9wdWJsaWNhdGlvbnMvdGhlLXdvcmxkLWZhY3Rib29rLwpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy91cmxzL0VyaXRyZWEudHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy91cmxzL0VyaXRyZWEudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQzZGQ5YjEKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3VybHMvRXJpdHJlYS50eHQKQEAgLTAsMCArMSw5IEBACisjCitDSVRZUE9QKmh0dHA6Ly93d3cuY2l0eXBvcHVsYXRpb24uZGUvRXJpdHJlYS5odG1sCitQT1AqaHR0cHM6Ly93d3cuY2lhLmdvdi9saWJyYXJ5L3B1YmxpY2F0aW9ucy90aGUtd29ybGQtZmFjdGJvb2svCitBUkVBKmh0dHBzOi8vd3d3LmNpYS5nb3YvbGlicmFyeS9wdWJsaWNhdGlvbnMvdGhlLXdvcmxkLWZhY3Rib29rLworRElWQSpodHRwOi8vd3d3LmNpcG90YXRvLm9yZy9ESVZBL2RhdGEvRGF0YVNlcnZlci5hc3A/QVJFQT1FUkkmVEhFTUU9X2FkbQorIworQ0lBKmh0dHBzOi8vd3d3LmNpYS5nb3YvY2lhL3B1YmxpY2F0aW9ucy9mYWN0Ym9vay9nZW9zL2VyLmh0bWwKK0lTTzMxNjZfMSpodHRwczovL3d3dy5jaWEuZ292L2xpYnJhcnkvcHVibGljYXRpb25zL3RoZS13b3JsZC1mYWN0Ym9vay8KK0lTTzMxNjZfMipodHRwczovL3d3dy5jaWEuZ292L2xpYnJhcnkvcHVibGljYXRpb25zL3RoZS13b3JsZC1mYWN0Ym9vay8KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvdXJscy9Fc3RvbmlhLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvdXJscy9Fc3RvbmlhLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZmM1YzI1Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy91cmxzL0VzdG9uaWEudHh0CkBAIC0wLDAgKzEsNSBAQAorIworUE9QKmh0dHA6Ly93d3cueGlzdC5vcmcvY250cnkvZXN0b25pYS5hc3B4CitDSUEqaHR0cDovL3d3dy5nZW9jb21tLmNvbS9mYXEvY29weXJpZ2h0Lmh0bWwKK0lTTzMxNjZfMSpodHRwczovL3d3dy5jaWEuZ292L2xpYnJhcnkvcHVibGljYXRpb25zL3RoZS13b3JsZC1mYWN0Ym9vay8KK0lTTzMxNjZfMipodHRwczovL3d3dy5jaWEuZ292L2xpYnJhcnkvcHVibGljYXRpb25zL3RoZS13b3JsZC1mYWN0Ym9vay8KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvdXJscy9FdGhpb3BpYS50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3VybHMvRXRoaW9waWEudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE4YTdhNzEKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3VybHMvRXRoaW9waWEudHh0CkBAIC0wLDAgKzEsNSBAQAorIworUE9QKmh0dHA6Ly93d3cueGlzdC5vcmcvY250cnkvZXRoaW9waWEuYXNweAorQ0lBKmh0dHA6Ly93d3cuZ2VvY29tbS5jb20vZmFxL2NvcHlyaWdodC5odG1sCitJU08zMTY2XzEqaHR0cHM6Ly93d3cuY2lhLmdvdi9saWJyYXJ5L3B1YmxpY2F0aW9ucy90aGUtd29ybGQtZmFjdGJvb2svCitJU08zMTY2XzIqaHR0cHM6Ly93d3cuY2lhLmdvdi9saWJyYXJ5L3B1YmxpY2F0aW9ucy90aGUtd29ybGQtZmFjdGJvb2svCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3VybHMvRmFyb2UgSXNsYW5kcy50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3VybHMvRmFyb2UgSXNsYW5kcy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTE2ZmM2NQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvdXJscy9GYXJvZSBJc2xhbmRzLnR4dApAQCAtMCwwICsxLDIgQEAKK1VOSVRFRE5BVElPTlMqaHR0cDovL3d3dy5ncmlkLnVuZXAuY2gvZGF0YS9kYXRhLnBocD9jYXRlZ29yeT1odW1hbl9yZWxhdGVkCitJU08zMTY2XzEqaHR0cHM6Ly93d3cuY2lhLmdvdi9saWJyYXJ5L3B1YmxpY2F0aW9ucy90aGUtd29ybGQtZmFjdGJvb2svCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3VybHMvRmF1bGtsYW5kIElzbGFuZHMudHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy91cmxzL0ZhdWxrbGFuZCBJc2xhbmRzLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZmY4MWI3Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy91cmxzL0ZhdWxrbGFuZCBJc2xhbmRzLnR4dApAQCAtMCwwICsxLDUgQEAKK0RJVkEqaHR0cDovL3d3dy5jaXBvdGF0by5vcmcvRElWQS9kYXRhL0RhdGFTZXJ2ZXIuYXNwP0FSRUE9RkxLJlRIRU1FPV9hZG0KKyMKK0NJQSpodHRwczovL3d3dy5jaWEuZ292L2NpYS9wdWJsaWNhdGlvbnMvZmFjdGJvb2svZ2Vvcy9may5odG1sCitJU08zMTY2XzEqaHR0cHM6Ly93d3cuY2lhLmdvdi9saWJyYXJ5L3B1YmxpY2F0aW9ucy90aGUtd29ybGQtZmFjdGJvb2svCitJU08zMTY2XzIqaHR0cHM6Ly93d3cuY2lhLmdvdi9saWJyYXJ5L3B1YmxpY2F0aW9ucy90aGUtd29ybGQtZmFjdGJvb2svCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3VybHMvRmlubGFuZC50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3VybHMvRmlubGFuZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTE2ZmM2NQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvdXJscy9GaW5sYW5kLnR4dApAQCAtMCwwICsxLDIgQEAKK1VOSVRFRE5BVElPTlMqaHR0cDovL3d3dy5ncmlkLnVuZXAuY2gvZGF0YS9kYXRhLnBocD9jYXRlZ29yeT1odW1hbl9yZWxhdGVkCitJU08zMTY2XzEqaHR0cHM6Ly93d3cuY2lhLmdvdi9saWJyYXJ5L3B1YmxpY2F0aW9ucy90aGUtd29ybGQtZmFjdGJvb2svCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3VybHMvRnJhbmNlLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvdXJscy9GcmFuY2UudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUxNmZjNjUKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3VybHMvRnJhbmNlLnR4dApAQCAtMCwwICsxLDIgQEAKK1VOSVRFRE5BVElPTlMqaHR0cDovL3d3dy5ncmlkLnVuZXAuY2gvZGF0YS9kYXRhLnBocD9jYXRlZ29yeT1odW1hbl9yZWxhdGVkCitJU08zMTY2XzEqaHR0cHM6Ly93d3cuY2lhLmdvdi9saWJyYXJ5L3B1YmxpY2F0aW9ucy90aGUtd29ybGQtZmFjdGJvb2svCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3VybHMvR2Fib24udHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy91cmxzL0dhYm9uLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MjA4Mjk5Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy91cmxzL0dhYm9uLnR4dApAQCAtMCwwICsxLDcgQEAKKyMKK0NJVFlQT1AqaHR0cDovL3d3dy5zdGF0LWdhYm9uLmdhL0hvbWUvSW5kZXgxLmh0bQorRElWQSpodHRwOi8vd3d3LmNpcG90YXRvLm9yZy9ESVZBL2RhdGEvRGF0YVNlcnZlci5hc3A/QVJFQT1HQUImVEhFTUU9X2FkbQorIworQ0lBKmh0dHBzOi8vd3d3LmNpYS5nb3YvY2lhL3B1YmxpY2F0aW9ucy9mYWN0Ym9vay9nZW9zL2diLmh0bWwKK0lTTzMxNjZfMSpodHRwczovL3d3dy5jaWEuZ292L2xpYnJhcnkvcHVibGljYXRpb25zL3RoZS13b3JsZC1mYWN0Ym9vay8KK0lTTzMxNjZfMipodHRwczovL3d3dy5jaWEuZ292L2xpYnJhcnkvcHVibGljYXRpb25zL3RoZS13b3JsZC1mYWN0Ym9vay8KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvdXJscy9HYW1iaWEgVGhlLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvdXJscy9HYW1iaWEgVGhlLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYzMxOTU5Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy91cmxzL0dhbWJpYSBUaGUudHh0CkBAIC0wLDAgKzEsNiBAQAorIworRElWQSpodHRwOi8vd3d3LmNpcG90YXRvLm9yZy9ESVZBL2RhdGEvRGF0YVNlcnZlci5hc3A/QVJFQT1HTUImVEhFTUU9X2FkbQorIworQ0lBKmh0dHBzOi8vd3d3LmNpYS5nb3YvY2lhL3B1YmxpY2F0aW9ucy9mYWN0Ym9vay9nZW9zL2dhLmh0bWwKK0lTTzMxNjZfMSpodHRwczovL3d3dy5jaWEuZ292L2xpYnJhcnkvcHVibGljYXRpb25zL3RoZS13b3JsZC1mYWN0Ym9vay8KK0lTTzMxNjZfMipodHRwczovL3d3dy5jaWEuZ292L2xpYnJhcnkvcHVibGljYXRpb25zL3RoZS13b3JsZC1mYWN0Ym9vay8KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvdXJscy9HZXJtYW55LnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvdXJscy9HZXJtYW55LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMTZmYzY1Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy91cmxzL0dlcm1hbnkudHh0CkBAIC0wLDAgKzEsMiBAQAorVU5JVEVETkFUSU9OUypodHRwOi8vd3d3LmdyaWQudW5lcC5jaC9kYXRhL2RhdGEucGhwP2NhdGVnb3J5PWh1bWFuX3JlbGF0ZWQKK0lTTzMxNjZfMSpodHRwczovL3d3dy5jaWEuZ292L2xpYnJhcnkvcHVibGljYXRpb25zL3RoZS13b3JsZC1mYWN0Ym9vay8KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvdXJscy9HaGFuYS50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3VybHMvR2hhbmEudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc2NmU3ZjAKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3VybHMvR2hhbmEudHh0CkBAIC0wLDAgKzEsNyBAQAorIworRElWQSpodHRwOi8vd3d3LmNpcG90YXRvLm9yZy9ESVZBL2RhdGEvRGF0YVNlcnZlci5hc3A/QVJFQT1HSEEmVEhFTUU9X2FkbQorIworQ0lBKmh0dHBzOi8vd3d3LmNpYS5nb3YvY2lhL3B1YmxpY2F0aW9ucy9mYWN0Ym9vay9nZW9zL2doLmh0bWwKK0lTTzMxNjZfMSpodHRwczovL3d3dy5jaWEuZ292L2xpYnJhcnkvcHVibGljYXRpb25zL3RoZS13b3JsZC1mYWN0Ym9vay8KK0lTTzMxNjZfMipodHRwczovL3d3dy5jaWEuZ292L2xpYnJhcnkvcHVibGljYXRpb25zL3RoZS13b3JsZC1mYWN0Ym9vay8KKwpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy91cmxzL0dsb3Jpb3NvIElzbGFuZHMudHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy91cmxzL0dsb3Jpb3NvIElzbGFuZHMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI2ODJhNDIKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3VybHMvR2xvcmlvc28gSXNsYW5kcy50eHQKQEAgLTAsMCArMSw1IEBACitESVZBKmh0dHA6Ly93d3cuY2lwb3RhdG8ub3JnL0RJVkEvZGF0YS9EYXRhU2VydmVyLmFzcD9BUkVBPVJFVSZUSEVNRT1fYWRtCisjCitDSUEqaHR0cHM6Ly93d3cuY2lhLmdvdi9jaWEvcHVibGljYXRpb25zL2ZhY3Rib29rL2dlb3MvenouaHRtbAorSVNPMzE2Nl8xKmh0dHBzOi8vd3d3LmNpYS5nb3YvbGlicmFyeS9wdWJsaWNhdGlvbnMvdGhlLXdvcmxkLWZhY3Rib29rLworSVNPMzE2Nl8yKmh0dHBzOi8vd3d3LmNpYS5nb3YvbGlicmFyeS9wdWJsaWNhdGlvbnMvdGhlLXdvcmxkLWZhY3Rib29rLwpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy91cmxzL0dyZWVjZS50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3VybHMvR3JlZWNlLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMTZmYzY1Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy91cmxzL0dyZWVjZS50eHQKQEAgLTAsMCArMSwyIEBACitVTklURUROQVRJT05TKmh0dHA6Ly93d3cuZ3JpZC51bmVwLmNoL2RhdGEvZGF0YS5waHA/Y2F0ZWdvcnk9aHVtYW5fcmVsYXRlZAorSVNPMzE2Nl8xKmh0dHBzOi8vd3d3LmNpYS5nb3YvbGlicmFyeS9wdWJsaWNhdGlvbnMvdGhlLXdvcmxkLWZhY3Rib29rLwpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy91cmxzL0d1YXRlbWFsYS50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3VybHMvR3VhdGVtYWxhLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MTc1MzZmCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy91cmxzL0d1YXRlbWFsYS50eHQKQEAgLTAsMCArMSw1IEBACisjCitQT1AqaHR0cDovL3d3dy54aXN0Lm9yZy9jbnRyeS9ndWF0ZW1hbGEuYXNweAorQ0lBKmh0dHA6Ly93d3cuZ2VvY29tbS5jb20vZmFxL2NvcHlyaWdodC5odG1sCitJU08zMTY2XzEqaHR0cHM6Ly93d3cuY2lhLmdvdi9saWJyYXJ5L3B1YmxpY2F0aW9ucy90aGUtd29ybGQtZmFjdGJvb2svCitJU08zMTY2XzIqaHR0cHM6Ly93d3cuY2lhLmdvdi9saWJyYXJ5L3B1YmxpY2F0aW9ucy90aGUtd29ybGQtZmFjdGJvb2svCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3VybHMvR3VpbmVhIEJpc3NhdS50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3VybHMvR3VpbmVhIEJpc3NhdS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzlkMDgyYgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvdXJscy9HdWluZWEgQmlzc2F1LnR4dApAQCAtMCwwICsxLDYgQEAKK0RJVkEqaHR0cDovL3d3dy5jaXBvdGF0by5vcmcvRElWQS9kYXRhL0RhdGFTZXJ2ZXIuYXNwP0FSRUE9R05CJlRIRU1FPV9hZG0KK0NJVFlQT1AqaHR0cDovL3d3dy5zdGF0LWd1aW5lYmlzc2F1LmNvbS8KKyMKK0NJQSpodHRwczovL3d3dy5jaWEuZ292L2NpYS9wdWJsaWNhdGlvbnMvZmFjdGJvb2svZ2Vvcy9wdS5odG1sCitJU08zMTY2XzEqaHR0cHM6Ly93d3cuY2lhLmdvdi9saWJyYXJ5L3B1YmxpY2F0aW9ucy90aGUtd29ybGQtZmFjdGJvb2svCitJU08zMTY2XzIqaHR0cHM6Ly93d3cuY2lhLmdvdi9saWJyYXJ5L3B1YmxpY2F0aW9ucy90aGUtd29ybGQtZmFjdGJvb2svCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3VybHMvR3VpbmVhLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvdXJscy9HdWluZWEudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg4ZTdjNTIKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3VybHMvR3VpbmVhLnR4dApAQCAtMCwwICsxLDYgQEAKK0RJVkEqaHR0cDovL3d3dy5jaXBvdGF0by5vcmcvRElWQS9kYXRhL0RhdGFTZXJ2ZXIuYXNwP0FSRUE9R0lOJlRIRU1FPV9hZG0KK0NJVFlQT1AqaHR0cDovL3d3dy5zdGF0LWd1aW5lZS5vcmcvCisjCitDSUEqaHR0cHM6Ly93d3cuY2lhLmdvdi9jaWEvcHVibGljYXRpb25zL2ZhY3Rib29rL2dlb3MvZ3YuaHRtbAorSVNPMzE2Nl8xKmh0dHBzOi8vd3d3LmNpYS5nb3YvbGlicmFyeS9wdWJsaWNhdGlvbnMvdGhlLXdvcmxkLWZhY3Rib29rLworSVNPMzE2Nl8yKmh0dHBzOi8vd3d3LmNpYS5nb3YvbGlicmFyeS9wdWJsaWNhdGlvbnMvdGhlLXdvcmxkLWZhY3Rib29rLwpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy91cmxzL0d1eWFuYS50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3VybHMvR3V5YW5hLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZTg5NWJjCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy91cmxzL0d1eWFuYS50eHQKQEAgLTAsMCArMSw3IEBACisjCitDSVRZUE9QKmh0dHA6Ly93d3cuc3RhdGlzdGljc2d1eWFuYS5nb3YuZ3kvCitESVZBKmh0dHA6Ly93d3cuY2lwb3RhdG8ub3JnL0RJVkEvZGF0YS9EYXRhU2VydmVyLmFzcD9BUkVBPUdVWSZUSEVNRT1fYWRtCisjCitDSUEqaHR0cHM6Ly93d3cuY2lhLmdvdi9jaWEvcHVibGljYXRpb25zL2ZhY3Rib29rL2dlb3MvZ3kuaHRtbAorSVNPMzE2Nl8xKmh0dHBzOi8vd3d3LmNpYS5nb3YvbGlicmFyeS9wdWJsaWNhdGlvbnMvdGhlLXdvcmxkLWZhY3Rib29rLworSVNPMzE2Nl8yKmh0dHBzOi8vd3d3LmNpYS5nb3YvbGlicmFyeS9wdWJsaWNhdGlvbnMvdGhlLXdvcmxkLWZhY3Rib29rLwpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy91cmxzL0hvbmR1cmFzLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvdXJscy9Ib25kdXJhcy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2FjOTc3OQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvdXJscy9Ib25kdXJhcy50eHQKQEAgLTAsMCArMSw1IEBACisjCitQT1AqaHR0cDovL3d3dy54aXN0Lm9yZy9jbnRyeS9ob25kdXJhcy5hc3B4CitDSUEqaHR0cDovL3d3dy5nZW9jb21tLmNvbS9mYXEvY29weXJpZ2h0Lmh0bWwKK0lTTzMxNjZfMSpodHRwczovL3d3dy5jaWEuZ292L2xpYnJhcnkvcHVibGljYXRpb25zL3RoZS13b3JsZC1mYWN0Ym9vay8KK0lTTzMxNjZfMipodHRwczovL3d3dy5jaWEuZ292L2xpYnJhcnkvcHVibGljYXRpb25zL3RoZS13b3JsZC1mYWN0Ym9vay8KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvdXJscy9IdW5nYXJ5LnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvdXJscy9IdW5nYXJ5LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMTZmYzY1Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy91cmxzL0h1bmdhcnkudHh0CkBAIC0wLDAgKzEsMiBAQAorVU5JVEVETkFUSU9OUypodHRwOi8vd3d3LmdyaWQudW5lcC5jaC9kYXRhL2RhdGEucGhwP2NhdGVnb3J5PWh1bWFuX3JlbGF0ZWQKK0lTTzMxNjZfMSpodHRwczovL3d3dy5jaWEuZ292L2xpYnJhcnkvcHVibGljYXRpb25zL3RoZS13b3JsZC1mYWN0Ym9vay8KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvdXJscy9JY2VsYW5kLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvdXJscy9JY2VsYW5kLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMTZmYzY1Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy91cmxzL0ljZWxhbmQudHh0CkBAIC0wLDAgKzEsMiBAQAorVU5JVEVETkFUSU9OUypodHRwOi8vd3d3LmdyaWQudW5lcC5jaC9kYXRhL2RhdGEucGhwP2NhdGVnb3J5PWh1bWFuX3JlbGF0ZWQKK0lTTzMxNjZfMSpodHRwczovL3d3dy5jaWEuZ292L2xpYnJhcnkvcHVibGljYXRpb25zL3RoZS13b3JsZC1mYWN0Ym9vay8KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvdXJscy9JbmRpYS50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3VybHMvSW5kaWEudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU3ZmE0NGYKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3VybHMvSW5kaWEudHh0CkBAIC0wLDAgKzEsNyBAQAorIworQ0lUWVBPUCpodHRwOi8vd3d3LmNlbnN1c2luZGlhLm5ldC8KK0RJVkEqaHR0cDovL3d3dy5jaXBvdGF0by5vcmcvRElWQS9kYXRhL0RhdGFTZXJ2ZXIuYXNwP0FSRUE9SU5EJlRIRU1FPV9hZG0KKyMKK0NJQSpodHRwczovL3d3dy5jaWEuZ292L2NpYS9wdWJsaWNhdGlvbnMvZmFjdGJvb2svZ2Vvcy9pbi5odG1sCitJU08zMTY2XzEqaHR0cHM6Ly93d3cuY2lhLmdvdi9saWJyYXJ5L3B1YmxpY2F0aW9ucy90aGUtd29ybGQtZmFjdGJvb2svCitJU08zMTY2XzIqaHR0cHM6Ly93d3cuY2lhLmdvdi9saWJyYXJ5L3B1YmxpY2F0aW9ucy90aGUtd29ybGQtZmFjdGJvb2svCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3VybHMvSW5kb25lc2lhLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvdXJscy9JbmRvbmVzaWEudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRmYzk2MmIKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3VybHMvSW5kb25lc2lhLnR4dApAQCAtMCwwICsxLDggQEAKKyMKK0NJVFlQT1AqaHR0cDovL3d3dy5jaXR5cG9wdWxhdGlvbi5kZS9JbmRvbmVzaWEuaHRtbAorUE9QKmh0dHA6Ly93d3cuYnBzLmdvLmlkL2luZGV4LnNodG1sCitESVZBKmh0dHA6Ly93d3cuY2lwb3RhdG8ub3JnL0RJVkEvZGF0YS9EYXRhU2VydmVyLmFzcD9BUkVBPUlETiZUSEVNRT1fYWRtCisjCitDSUEqaHR0cHM6Ly93d3cuY2lhLmdvdi9jaWEvcHVibGljYXRpb25zL2ZhY3Rib29rL2dlb3MvaWQuaHRtbAorSVNPMzE2Nl8xKmh0dHBzOi8vd3d3LmNpYS5nb3YvbGlicmFyeS9wdWJsaWNhdGlvbnMvdGhlLXdvcmxkLWZhY3Rib29rLworSVNPMzE2Nl8yKmh0dHBzOi8vd3d3LmNpYS5nb3YvbGlicmFyeS9wdWJsaWNhdGlvbnMvdGhlLXdvcmxkLWZhY3Rib29rLwpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy91cmxzL0lyYW4udHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy91cmxzL0lyYW4udHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM4OWUxOTcKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3VybHMvSXJhbi50eHQKQEAgLTAsMCArMSw3IEBACisjCitDSVRZUE9QKmh0dHA6Ly93d3cuc2NpLm9yZy5pci9wb3J0YWwvZmFjZXMvcHVibGljL3NjaV9lbgorRElWQSpodHRwOi8vd3d3LmNpcG90YXRvLm9yZy9ESVZBL2RhdGEvRGF0YVNlcnZlci5hc3A/QVJFQT1JUk4mVEhFTUU9X2FkbQorIworQ0lBKmh0dHBzOi8vd3d3LmNpYS5nb3YvY2lhL3B1YmxpY2F0aW9ucy9mYWN0Ym9vay9nZW9zL2lyLmh0bWwKK0lTTzMxNjZfMSpodHRwczovL3d3dy5jaWEuZ292L2xpYnJhcnkvcHVibGljYXRpb25zL3RoZS13b3JsZC1mYWN0Ym9vay8KK0lTTzMxNjZfMipodHRwczovL3d3dy5jaWEuZ292L2xpYnJhcnkvcHVibGljYXRpb25zL3RoZS13b3JsZC1mYWN0Ym9vay8KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvdXJscy9JcmFxLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvdXJscy9JcmFxLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43M2ZmYWFhCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy91cmxzL0lyYXEudHh0CkBAIC0wLDAgKzEsNSBAQAorIworIworQ0lUWVBPUCpodHRwczovL3d3dy5jaWEuZ292L2xpYnJhcnkvcHVibGljYXRpb25zL3RoZS13b3JsZC1mYWN0Ym9vay8KK0RJVkEqaHR0cDovL3d3dy5jaXBvdGF0by5vcmcvRElWQS9kYXRhL0RhdGFTZXJ2ZXIuYXNwP0FSRUE9SVJRJlRIRU1FPV9hZG0KK0NJQSpodHRwczovL3d3dy5jaWEuZ292L2NpYS9wdWJsaWNhdGlvbnMvZmFjdGJvb2svZ2Vvcy9pei5odG1sClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy91cmxzL0lyZWxhbmQudHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy91cmxzL0lyZWxhbmQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUxNmZjNjUKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3VybHMvSXJlbGFuZC50eHQKQEAgLTAsMCArMSwyIEBACitVTklURUROQVRJT05TKmh0dHA6Ly93d3cuZ3JpZC51bmVwLmNoL2RhdGEvZGF0YS5waHA/Y2F0ZWdvcnk9aHVtYW5fcmVsYXRlZAorSVNPMzE2Nl8xKmh0dHBzOi8vd3d3LmNpYS5nb3YvbGlicmFyeS9wdWJsaWNhdGlvbnMvdGhlLXdvcmxkLWZhY3Rib29rLwpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy91cmxzL0l0YWx5LnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvdXJscy9JdGFseS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTE2ZmM2NQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvdXJscy9JdGFseS50eHQKQEAgLTAsMCArMSwyIEBACitVTklURUROQVRJT05TKmh0dHA6Ly93d3cuZ3JpZC51bmVwLmNoL2RhdGEvZGF0YS5waHA/Y2F0ZWdvcnk9aHVtYW5fcmVsYXRlZAorSVNPMzE2Nl8xKmh0dHBzOi8vd3d3LmNpYS5nb3YvbGlicmFyeS9wdWJsaWNhdGlvbnMvdGhlLXdvcmxkLWZhY3Rib29rLwpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy91cmxzL0l2b3J5IENvYXN0LnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvdXJscy9Jdm9yeSBDb2FzdC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzE3NTFiYgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvdXJscy9Jdm9yeSBDb2FzdC50eHQKQEAgLTAsMCArMSw3IEBACisjCitDSVRZUE9QKmh0dHA6Ly93d3cuaW5zLmNpLworRElWQSpodHRwOi8vd3d3LmNpcG90YXRvLm9yZy9ESVZBL2RhdGEvRGF0YVNlcnZlci5hc3A/QVJFQT1DSVYmVEhFTUU9X2FkbQorIworQ0lBKmh0dHBzOi8vd3d3LmNpYS5nb3YvY2lhL3B1YmxpY2F0aW9ucy9mYWN0Ym9vay9nZW9zL2l2Lmh0bWwKK0lTTzMxNjZfMSpodHRwczovL3d3dy5jaWEuZ292L2xpYnJhcnkvcHVibGljYXRpb25zL3RoZS13b3JsZC1mYWN0Ym9vay8KK0lTTzMxNjZfMipodHRwczovL3d3dy5jaWEuZ292L2xpYnJhcnkvcHVibGljYXRpb25zL3RoZS13b3JsZC1mYWN0Ym9vay8KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvdXJscy9KYXBhbi50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3VybHMvSmFwYW4udHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYzOWRlMzcKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3VybHMvSmFwYW4udHh0CkBAIC0wLDAgKzEsNyBAQAorIworQ0lUWVBPUCpodHRwOi8vd3d3LnN0YXQuZ28uanAvZW5nbGlzaC9pbmRleC5odG0KK0RJVkEqaHR0cDovL3d3dy5jaXBvdGF0by5vcmcvRElWQS9kYXRhL0RhdGFTZXJ2ZXIuYXNwP0FSRUE9SlBOJlRIRU1FPV9hZG0KKyMKK0NJQSpodHRwczovL3d3dy5jaWEuZ292L2NpYS9wdWJsaWNhdGlvbnMvZmFjdGJvb2svZ2Vvcy9qYS5odG1sCitJU08zMTY2XzEqaHR0cHM6Ly93d3cuY2lhLmdvdi9saWJyYXJ5L3B1YmxpY2F0aW9ucy90aGUtd29ybGQtZmFjdGJvb2svCitJU08zMTY2XzIqaHR0cHM6Ly93d3cuY2lhLmdvdi9saWJyYXJ5L3B1YmxpY2F0aW9ucy90aGUtd29ybGQtZmFjdGJvb2svCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3VybHMvSm9yZGFuLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvdXJscy9Kb3JkYW4udHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU4NGM2YWEKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3VybHMvSm9yZGFuLnR4dApAQCAtMCwwICsxLDcgQEAKKyMKK0NJVFlQT1AqaHR0cDovL3d3dy5kb3MuZ292LmpvLworRElWQSpodHRwOi8vd3d3LmNpcG90YXRvLm9yZy9ESVZBL2RhdGEvRGF0YVNlcnZlci5hc3A/QVJFQT1KT1ImVEhFTUU9X2FkbQorIworQ0lBKmh0dHBzOi8vd3d3LmNpYS5nb3YvY2lhL3B1YmxpY2F0aW9ucy9mYWN0Ym9vay9nZW9zL2pvLmh0bWwKK0lTTzMxNjZfMSpodHRwczovL3d3dy5jaWEuZ292L2xpYnJhcnkvcHVibGljYXRpb25zL3RoZS13b3JsZC1mYWN0Ym9vay8KK0lTTzMxNjZfMipodHRwczovL3d3dy5jaWEuZ292L2xpYnJhcnkvcHVibGljYXRpb25zL3RoZS13b3JsZC1mYWN0Ym9vay8KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvdXJscy9LYXpha2hzdGFuLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvdXJscy9LYXpha2hzdGFuLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kY2I5MTI5Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy91cmxzL0themFraHN0YW4udHh0CkBAIC0wLDAgKzEsOCBAQAorIworQ0lUWVBPUCpodHRwOi8vd3d3LmNpdHlwb3B1bGF0aW9uLmRlL0themFraHN0YW4uaHRtbAorUE9QKmh0dHA6Ly93d3cuc3RhdC5rei9zdGF0L2luZGV4LmFzcHg/c2w9bmV3cyZsPWVuCitESVZBKmh0dHA6Ly93d3cuY2lwb3RhdG8ub3JnL0RJVkEvZGF0YS9EYXRhU2VydmVyLmFzcD9BUkVBPUtBWiZUSEVNRT1fYWRtCisjCitDSUEqaHR0cHM6Ly93d3cuY2lhLmdvdi9jaWEvcHVibGljYXRpb25zL2ZhY3Rib29rL2dlb3Mva3ouaHRtbAorSVNPMzE2Nl8xKmh0dHBzOi8vd3d3LmNpYS5nb3YvbGlicmFyeS9wdWJsaWNhdGlvbnMvdGhlLXdvcmxkLWZhY3Rib29rLworSVNPMzE2Nl8yKmh0dHBzOi8vd3d3LmNpYS5nb3YvbGlicmFyeS9wdWJsaWNhdGlvbnMvdGhlLXdvcmxkLWZhY3Rib29rLwpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy91cmxzL0tlbnlhLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvdXJscy9LZW55YS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDMxNDc5ZAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvdXJscy9LZW55YS50eHQKQEAgLTAsMCArMSw3IEBACisjCitDSVRZUE9QKmh0dHA6Ly93d3cuY2JzLmdvLmtlLworRElWQSpodHRwOi8vd3d3LmNpcG90YXRvLm9yZy9ESVZBL2RhdGEvRGF0YVNlcnZlci5hc3A/QVJFQT1LRU4mVEhFTUU9X2FkbQorIworQ0lBKmh0dHBzOi8vd3d3LmNpYS5nb3YvY2lhL3B1YmxpY2F0aW9ucy9mYWN0Ym9vay9nZW9zL2tlLmh0bWwKK0lTTzMxNjZfMSpodHRwczovL3d3dy5jaWEuZ292L2xpYnJhcnkvcHVibGljYXRpb25zL3RoZS13b3JsZC1mYWN0Ym9vay8KK0lTTzMxNjZfMipodHRwczovL3d3dy5jaWEuZ292L2xpYnJhcnkvcHVibGljYXRpb25zL3RoZS13b3JsZC1mYWN0Ym9vay8KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvdXJscy9LdXdhaXQudHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy91cmxzL0t1d2FpdC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWI0ZTEwZgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvdXJscy9LdXdhaXQudHh0CkBAIC0wLDAgKzEsNyBAQAorIworIworQ0lUWVBPUCpodHRwOi8vd3d3Lm1vcC5nb3Yua3cvTW9wV2ViU2l0ZS9lbmdsaXNoL2RlZmF1bHQuYXNwCitESVZBKmh0dHA6Ly93d3cuY2lwb3RhdG8ub3JnL0RJVkEvZGF0YS9EYXRhU2VydmVyLmFzcD9BUkVBPUtXVCZUSEVNRT1fYWRtCitDSUEqaHR0cHM6Ly93d3cuY2lhLmdvdi9jaWEvcHVibGljYXRpb25zL2ZhY3Rib29rL2dlb3Mva3UuaHRtbAorSVNPMzE2Nl8xKmh0dHBzOi8vd3d3LmNpYS5nb3YvbGlicmFyeS9wdWJsaWNhdGlvbnMvdGhlLXdvcmxkLWZhY3Rib29rLworSVNPMzE2Nl8yKmh0dHBzOi8vd3d3LmNpYS5nb3YvbGlicmFyeS9wdWJsaWNhdGlvbnMvdGhlLXdvcmxkLWZhY3Rib29rLwpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy91cmxzL0t5cmd5enN0YW4udHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy91cmxzL0t5cmd5enN0YW4udHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA2MDUzYTUKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3VybHMvS3lyZ3l6c3Rhbi50eHQKQEAgLTAsMCArMSw3IEBACisjCitDT1VOVFJZUFJPRklMRSpodHRwOi8vd3d3LmZhby5vcmcvY291bnRyeXByb2ZpbGVzL01hcHMvS0daLzE5L2ltL2F0dC9rZ3pfQURfZGJmMS5odG1sCitESVZBKmh0dHA6Ly93d3cuY2lwb3RhdG8ub3JnL0RJVkEvZGF0YS9EYXRhU2VydmVyLmFzcD9BUkVBPUtHWiZUSEVNRT1fYWRtCisjCitDSUEqaHR0cHM6Ly93d3cuY2lhLmdvdi9jaWEvcHVibGljYXRpb25zL2ZhY3Rib29rL2dlb3Mva2cuaHRtbAorSVNPMzE2Nl8xKmh0dHBzOi8vd3d3LmNpYS5nb3YvbGlicmFyeS9wdWJsaWNhdGlvbnMvdGhlLXdvcmxkLWZhY3Rib29rLworSVNPMzE2Nl8yKmh0dHBzOi8vd3d3LmNpYS5nb3YvbGlicmFyeS9wdWJsaWNhdGlvbnMvdGhlLXdvcmxkLWZhY3Rib29rLwpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy91cmxzL0xhb3MudHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy91cmxzL0xhb3MudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI4NjljZjYKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3VybHMvTGFvcy50eHQKQEAgLTAsMCArMSw2IEBACisjCitESVZBKmh0dHA6Ly93d3cuY2lwb3RhdG8ub3JnL0RJVkEvZGF0YS9EYXRhU2VydmVyLmFzcD9BUkVBPUxBTyZUSEVNRT1fYWRtCisjCitDSUEqaHR0cHM6Ly93d3cuY2lhLmdvdi9jaWEvcHVibGljYXRpb25zL2ZhY3Rib29rL2dlb3MvbGEuaHRtbAorSVNPMzE2Nl8xKmh0dHBzOi8vd3d3LmNpYS5nb3YvbGlicmFyeS9wdWJsaWNhdGlvbnMvdGhlLXdvcmxkLWZhY3Rib29rLworSVNPMzE2Nl8yKmh0dHBzOi8vd3d3LmNpYS5nb3YvbGlicmFyeS9wdWJsaWNhdGlvbnMvdGhlLXdvcmxkLWZhY3Rib29rLwpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy91cmxzL0xhdHZpYS50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3VybHMvTGF0dmlhLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNTYwMzhjCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy91cmxzL0xhdHZpYS50eHQKQEAgLTAsMCArMSw1IEBACisjCitQT1AqaHR0cDovL3d3dy54aXN0Lm9yZy9jbnRyeS9sYXR2aWEuYXNweAorQ0lBKmh0dHA6Ly93d3cuZ2VvY29tbS5jb20vZmFxL2NvcHlyaWdodC5odG1sCitJU08zMTY2XzEqaHR0cHM6Ly93d3cuY2lhLmdvdi9saWJyYXJ5L3B1YmxpY2F0aW9ucy90aGUtd29ybGQtZmFjdGJvb2svCitJU08zMTY2XzIqaHR0cHM6Ly93d3cuY2lhLmdvdi9saWJyYXJ5L3B1YmxpY2F0aW9ucy90aGUtd29ybGQtZmFjdGJvb2svCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3VybHMvTGViYW5vbi50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3VybHMvTGViYW5vbi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTk4Y2U5ZgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvdXJscy9MZWJhbm9uLnR4dApAQCAtMCwwICsxLDYgQEAKKyMKKyMKK0RJVkEqaHR0cDovL3d3dy5jaXBvdGF0by5vcmcvRElWQS9kYXRhL0RhdGFTZXJ2ZXIuYXNwP0FSRUE9TEJOJlRIRU1FPV9hZG0KK0NJQSpodHRwczovL3d3dy5jaWEuZ292L2NpYS9wdWJsaWNhdGlvbnMvZmFjdGJvb2svZ2Vvcy9sZS5odG1sCitJU08zMTY2XzEqaHR0cHM6Ly93d3cuY2lhLmdvdi9saWJyYXJ5L3B1YmxpY2F0aW9ucy90aGUtd29ybGQtZmFjdGJvb2svCitJU08zMTY2XzIqaHR0cHM6Ly93d3cuY2lhLmdvdi9saWJyYXJ5L3B1YmxpY2F0aW9ucy90aGUtd29ybGQtZmFjdGJvb2svCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3VybHMvTGVzb3Roby50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3VybHMvTGVzb3Roby50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2YyZTQ2NwotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvdXJscy9MZXNvdGhvLnR4dApAQCAtMCwwICsxLDYgQEAKKyMKK0RJVkEqaHR0cDovL3d3dy5jaXBvdGF0by5vcmcvRElWQS9kYXRhL0RhdGFTZXJ2ZXIuYXNwP0FSRUE9TFNPJlRIRU1FPV9hZG0KKyMKK0NJQSpodHRwczovL3d3dy5jaWEuZ292L2NpYS9wdWJsaWNhdGlvbnMvZmFjdGJvb2svZ2Vvcy9sdC5odG1sCitJU08zMTY2XzEqaHR0cHM6Ly93d3cuY2lhLmdvdi9saWJyYXJ5L3B1YmxpY2F0aW9ucy90aGUtd29ybGQtZmFjdGJvb2svCitJU08zMTY2XzIqaHR0cHM6Ly93d3cuY2lhLmdvdi9saWJyYXJ5L3B1YmxpY2F0aW9ucy90aGUtd29ybGQtZmFjdGJvb2svCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3VybHMvTGliZXJpYS50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3VybHMvTGliZXJpYS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjhiMDQ2NQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvdXJscy9MaWJlcmlhLnR4dApAQCAtMCwwICsxLDcgQEAKKyMKK1NUQVRPSURTKmh0dHA6Ly93d3cuc3RhdG9pZHMuY29tL3Vsci5odG1sCitESVZBKmh0dHA6Ly93d3cuY2lwb3RhdG8ub3JnL0RJVkEvZGF0YS9EYXRhU2VydmVyLmFzcD9BUkVBPUxCUiZUSEVNRT1fYWRtCisjCitDSUEqaHR0cHM6Ly93d3cuY2lhLmdvdi9jaWEvcHVibGljYXRpb25zL2ZhY3Rib29rL2dlb3MvbGkuaHRtbAorSVNPMzE2Nl8xKmh0dHBzOi8vd3d3LmNpYS5nb3YvbGlicmFyeS9wdWJsaWNhdGlvbnMvdGhlLXdvcmxkLWZhY3Rib29rLworSVNPMzE2Nl8yKmh0dHBzOi8vd3d3LmNpYS5nb3YvbGlicmFyeS9wdWJsaWNhdGlvbnMvdGhlLXdvcmxkLWZhY3Rib29rLwpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy91cmxzL0xpYnlhLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvdXJscy9MaWJ5YS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTFiOGFiMwotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvdXJscy9MaWJ5YS50eHQKQEAgLTAsMCArMSw2IEBACisjCitESVZBKmh0dHA6Ly93d3cuY2lwb3RhdG8ub3JnL0RJVkEvZGF0YS9EYXRhU2VydmVyLmFzcD9BUkVBPUxCWSZUSEVNRT1fYWRtCisjCitDSUEqaHR0cHM6Ly93d3cuY2lhLmdvdi9jaWEvcHVibGljYXRpb25zL2ZhY3Rib29rL2dlb3MvbHkuaHRtbAorSVNPMzE2Nl8xKmh0dHBzOi8vd3d3LmNpYS5nb3YvbGlicmFyeS9wdWJsaWNhdGlvbnMvdGhlLXdvcmxkLWZhY3Rib29rLworSVNPMzE2Nl8yKmh0dHBzOi8vd3d3LmNpYS5nb3YvbGlicmFyeS9wdWJsaWNhdGlvbnMvdGhlLXdvcmxkLWZhY3Rib29rLwpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy91cmxzL0xpZWNodGVuc3RlaW4udHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy91cmxzL0xpZWNodGVuc3RlaW4udHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI5YjY0ZTAKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3VybHMvTGllY2h0ZW5zdGVpbi50eHQKQEAgLTAsMCArMSwzIEBACitVTklURUROQVRJT05TKmh0dHA6Ly93d3cuZ3JpZC51bmVwLmNoL2RhdGEvZGF0YS5waHA/Y2F0ZWdvcnk9aHVtYW5fcmVsYXRlZAorIworSVNPMzE2Nl8xKmh0dHBzOi8vd3d3LmNpYS5nb3YvbGlicmFyeS9wdWJsaWNhdGlvbnMvdGhlLXdvcmxkLWZhY3Rib29rLwpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy91cmxzL0xpdGh1YW5pYS50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3VybHMvTGl0aHVhbmlhLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MDc0Mzc5Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy91cmxzL0xpdGh1YW5pYS50eHQKQEAgLTAsMCArMSw1IEBACisjCitQT1AqaHR0cDovL3d3dy54aXN0Lm9yZy9jbnRyeS9saXRodWFuaWEuYXNweAorQ0lBKmh0dHA6Ly93d3cuZ2VvY29tbS5jb20vZmFxL2NvcHlyaWdodC5odG1sCitJU08zMTY2XzEqaHR0cHM6Ly93d3cuY2lhLmdvdi9saWJyYXJ5L3B1YmxpY2F0aW9ucy90aGUtd29ybGQtZmFjdGJvb2svCitJU08zMTY2XzIqaHR0cHM6Ly93d3cuY2lhLmdvdi9saWJyYXJ5L3B1YmxpY2F0aW9ucy90aGUtd29ybGQtZmFjdGJvb2svCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3VybHMvTHV4ZW1ib3VyZy50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3VybHMvTHV4ZW1ib3VyZy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTE2ZmM2NQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvdXJscy9MdXhlbWJvdXJnLnR4dApAQCAtMCwwICsxLDIgQEAKK1VOSVRFRE5BVElPTlMqaHR0cDovL3d3dy5ncmlkLnVuZXAuY2gvZGF0YS9kYXRhLnBocD9jYXRlZ29yeT1odW1hbl9yZWxhdGVkCitJU08zMTY2XzEqaHR0cHM6Ly93d3cuY2lhLmdvdi9saWJyYXJ5L3B1YmxpY2F0aW9ucy90aGUtd29ybGQtZmFjdGJvb2svCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3VybHMvTWFjYXUudHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy91cmxzL01hY2F1LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNWMzODliCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy91cmxzL01hY2F1LnR4dApAQCAtMCwwICsxLDUgQEAKK0RJVkEqaHR0cDovL3d3dy5jaXBvdGF0by5vcmcvRElWQS9kYXRhL0RhdGFTZXJ2ZXIuYXNwP0FSRUE9TUFDJlRIRU1FPV9hZG0KKyMKK0NJQSpodHRwczovL3d3dy5jaWEuZ292L2NpYS9wdWJsaWNhdGlvbnMvZmFjdGJvb2svZ2Vvcy9tYy5odG1sCitJU08zMTY2XzEqaHR0cHM6Ly93d3cuY2lhLmdvdi9saWJyYXJ5L3B1YmxpY2F0aW9ucy90aGUtd29ybGQtZmFjdGJvb2svCitJU08zMTY2XzIqaHR0cHM6Ly93d3cuY2lhLmdvdi9saWJyYXJ5L3B1YmxpY2F0aW9ucy90aGUtd29ybGQtZmFjdGJvb2svCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3VybHMvTWFjZWRvbmlhLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvdXJscy9NYWNlZG9uaWEudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEwNmJlYmMKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3VybHMvTWFjZWRvbmlhLnR4dApAQCAtMCwwICsxLDYgQEAKKyMKK0RJVkEqaHR0cDovL3d3dy5jaXBvdGF0by5vcmcvRElWQS9kYXRhL0RhdGFTZXJ2ZXIuYXNwP0FSRUE9TUtEJlRIRU1FPV9hZG0KKyMKK0NJQSpodHRwczovL3d3dy5jaWEuZ292L2NpYS9wdWJsaWNhdGlvbnMvZmFjdGJvb2svZ2Vvcy9tay5odG1sCitJU08zMTY2XzEqaHR0cHM6Ly93d3cuY2lhLmdvdi9saWJyYXJ5L3B1YmxpY2F0aW9ucy90aGUtd29ybGQtZmFjdGJvb2svCitJU08zMTY2XzIqaHR0cHM6Ly93d3cuY2lhLmdvdi9saWJyYXJ5L3B1YmxpY2F0aW9ucy90aGUtd29ybGQtZmFjdGJvb2svCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3VybHMvTWFkYWdhc2Nhci50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3VybHMvTWFkYWdhc2Nhci50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTY2MDlhZQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvdXJscy9NYWRhZ2FzY2FyLnR4dApAQCAtMCwwICsxLDYgQEAKKyMKK0RJVkEqaHR0cDovL3d3dy5jaXBvdGF0by5vcmcvRElWQS9kYXRhL0RhdGFTZXJ2ZXIuYXNwP0FSRUE9TURHJlRIRU1FPV9hZG0KKyMKK0NJQSpodHRwczovL3d3dy5jaWEuZ292L2NpYS9wdWJsaWNhdGlvbnMvZmFjdGJvb2svZ2Vvcy9tYS5odG1sCitJU08zMTY2XzEqaHR0cHM6Ly93d3cuY2lhLmdvdi9saWJyYXJ5L3B1YmxpY2F0aW9ucy90aGUtd29ybGQtZmFjdGJvb2svCitJU08zMTY2XzIqaHR0cHM6Ly93d3cuY2lhLmdvdi9saWJyYXJ5L3B1YmxpY2F0aW9ucy90aGUtd29ybGQtZmFjdGJvb2svCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3VybHMvTWFsYXdpLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvdXJscy9NYWxhd2kudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ3MGVhMmQKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3VybHMvTWFsYXdpLnR4dApAQCAtMCwwICsxLDYgQEAKKyMKK0RJVkEqaHR0cDovL3d3dy5jaXBvdGF0by5vcmcvRElWQS9kYXRhL0RhdGFTZXJ2ZXIuYXNwP0FSRUE9TVdJJlRIRU1FPV9hZG0KKyMKK0NJQSpodHRwczovL3d3dy5jaWEuZ292L2NpYS9wdWJsaWNhdGlvbnMvZmFjdGJvb2svZ2Vvcy9taS5odG1sCitJU08zMTY2XzEqaHR0cHM6Ly93d3cuY2lhLmdvdi9saWJyYXJ5L3B1YmxpY2F0aW9ucy90aGUtd29ybGQtZmFjdGJvb2svCitJU08zMTY2XzIqaHR0cHM6Ly93d3cuY2lhLmdvdi9saWJyYXJ5L3B1YmxpY2F0aW9ucy90aGUtd29ybGQtZmFjdGJvb2svCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3VybHMvTWFsaS50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3VybHMvTWFsaS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTY2NjMzMgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvdXJscy9NYWxpLnR4dApAQCAtMCwwICsxLDUgQEAKKyMKK1BPUCpodHRwOi8vd3d3Lnhpc3Qub3JnL2NudHJ5L21hbGkuYXNweAorQ0lBKmh0dHA6Ly93d3cuZ2VvY29tbS5jb20vZmFxL2NvcHlyaWdodC5odG1sCitJU08zMTY2XzEqaHR0cHM6Ly93d3cuY2lhLmdvdi9saWJyYXJ5L3B1YmxpY2F0aW9ucy90aGUtd29ybGQtZmFjdGJvb2svCitJU08zMTY2XzIqaHR0cHM6Ly93d3cuY2lhLmdvdi9saWJyYXJ5L3B1YmxpY2F0aW9ucy90aGUtd29ybGQtZmFjdGJvb2svCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3VybHMvTWF1cml0YW5pYS50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3VybHMvTWF1cml0YW5pYS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTcwOGMxNAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvdXJscy9NYXVyaXRhbmlhLnR4dApAQCAtMCwwICsxLDUgQEAKKyMKK1BPUCpodHRwOi8vd3d3Lnhpc3Qub3JnL2NudHJ5L21hdXJpdGFuaWEuYXNweAorQ0lBKmh0dHA6Ly93d3cuZ2VvY29tbS5jb20vZmFxL2NvcHlyaWdodC5odG1sCitJU08zMTY2XzEqaHR0cHM6Ly93d3cuY2lhLmdvdi9saWJyYXJ5L3B1YmxpY2F0aW9ucy90aGUtd29ybGQtZmFjdGJvb2svCitJU08zMTY2XzIqaHR0cHM6Ly93d3cuY2lhLmdvdi9saWJyYXJ5L3B1YmxpY2F0aW9ucy90aGUtd29ybGQtZmFjdGJvb2svCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3VybHMvTWF1cml0aXVzLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvdXJscy9NYXVyaXRpdXMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRjODFiMDYKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3VybHMvTWF1cml0aXVzLnR4dApAQCAtMCwwICsxLDYgQEAKKyMKKyMKK0RJVkEqaHR0cDovL3d3dy5jaXBvdGF0by5vcmcvRElWQS9kYXRhL0RhdGFTZXJ2ZXIuYXNwP0FSRUE9TVVTJlRIRU1FPV9hZG0KK0NJQSpodHRwczovL3d3dy5jaWEuZ292L2NpYS9wdWJsaWNhdGlvbnMvZmFjdGJvb2svZ2Vvcy9tcC5odG1sCitJU08zMTY2XzEqaHR0cHM6Ly93d3cuY2lhLmdvdi9saWJyYXJ5L3B1YmxpY2F0aW9ucy90aGUtd29ybGQtZmFjdGJvb2svCitJU08zMTY2XzIqaHR0cHM6Ly93d3cuY2lhLmdvdi9saWJyYXJ5L3B1YmxpY2F0aW9ucy90aGUtd29ybGQtZmFjdGJvb2svCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3VybHMvTWV4aWNvLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvdXJscy9NZXhpY28udHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY5YTlmZGQKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3VybHMvTWV4aWNvLnR4dApAQCAtMCwwICsxLDYgQEAKKyMKK0RJVkEqaHR0cDovL3d3dy5jaXBvdGF0by5vcmcvRElWQS9kYXRhL0RhdGFTZXJ2ZXIuYXNwP0FSRUE9TUVYJlRIRU1FPV9hZG0KKyMKK0NJQSpodHRwczovL3d3dy5jaWEuZ292L2NpYS9wdWJsaWNhdGlvbnMvZmFjdGJvb2svZ2Vvcy9teC5odG1sCitJU08zMTY2XzEqaHR0cHM6Ly93d3cuY2lhLmdvdi9saWJyYXJ5L3B1YmxpY2F0aW9ucy90aGUtd29ybGQtZmFjdGJvb2svCitJU08zMTY2XzIqaHR0cHM6Ly93d3cuY2lhLmdvdi9saWJyYXJ5L3B1YmxpY2F0aW9ucy90aGUtd29ybGQtZmFjdGJvb2svCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3VybHMvTW9sZG92aWEudHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy91cmxzL01vbGRvdmlhLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zODJjZWIyCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy91cmxzL01vbGRvdmlhLnR4dApAQCAtMCwwICsxLDUgQEAKK0RJVkEqaHR0cDovL3d3dy5jaXBvdGF0by5vcmcvRElWQS9kYXRhL0RhdGFTZXJ2ZXIuYXNwP0FSRUE9TURBJlRIRU1FPV9hZG0KKyMKK0NJQSpodHRwczovL3d3dy5jaWEuZ292L2NpYS9wdWJsaWNhdGlvbnMvZmFjdGJvb2svZ2Vvcy9tZC5odG1sCitJU08zMTY2XzEqaHR0cHM6Ly93d3cuY2lhLmdvdi9saWJyYXJ5L3B1YmxpY2F0aW9ucy90aGUtd29ybGQtZmFjdGJvb2svCitJU08zMTY2XzIqaHR0cHM6Ly93d3cuY2lhLmdvdi9saWJyYXJ5L3B1YmxpY2F0aW9ucy90aGUtd29ybGQtZmFjdGJvb2svCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3VybHMvTW9uZ29saWEudHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy91cmxzL01vbmdvbGlhLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYTUyMzJkCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy91cmxzL01vbmdvbGlhLnR4dApAQCAtMCwwICsxLDYgQEAKKyMKKyMKK0RJVkEqaHR0cDovL3d3dy5jaXBvdGF0by5vcmcvRElWQS9kYXRhL0RhdGFTZXJ2ZXIuYXNwP0FSRUE9TU5HJlRIRU1FPV9hZG0KK0NJQSpodHRwczovL3d3dy5jaWEuZ292L2NpYS9wdWJsaWNhdGlvbnMvZmFjdGJvb2svZ2Vvcy9tZy5odG1sCitJU08zMTY2XzEqaHR0cHM6Ly93d3cuY2lhLmdvdi9saWJyYXJ5L3B1YmxpY2F0aW9ucy90aGUtd29ybGQtZmFjdGJvb2svCitJU08zMTY2XzIqaHR0cHM6Ly93d3cuY2lhLmdvdi9saWJyYXJ5L3B1YmxpY2F0aW9ucy90aGUtd29ybGQtZmFjdGJvb2svCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3VybHMvTW9yb2Njby50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3VybHMvTW9yb2Njby50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWJmYjhiMwotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvdXJscy9Nb3JvY2NvLnR4dApAQCAtMCwwICsxLDYgQEAKKyMKKyMKK0RJVkEqaHR0cDovL3d3dy5jaXBvdGF0by5vcmcvRElWQS9kYXRhL0RhdGFTZXJ2ZXIuYXNwP0FSRUE9TUFSJlRIRU1FPV9hZG0KK0NJQSpodHRwczovL3d3dy5jaWEuZ292L2NpYS9wdWJsaWNhdGlvbnMvZmFjdGJvb2svZ2Vvcy9tby5odG1sCitJU08zMTY2XzEqaHR0cHM6Ly93d3cuY2lhLmdvdi9saWJyYXJ5L3B1YmxpY2F0aW9ucy90aGUtd29ybGQtZmFjdGJvb2svCitJU08zMTY2XzIqaHR0cHM6Ly93d3cuY2lhLmdvdi9saWJyYXJ5L3B1YmxpY2F0aW9ucy90aGUtd29ybGQtZmFjdGJvb2svCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3VybHMvTW96YW1iaXF1ZS50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3VybHMvTW96YW1iaXF1ZS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGU0ZGE0MwotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvdXJscy9Nb3phbWJpcXVlLnR4dApAQCAtMCwwICsxLDYgQEAKKyMKK0RJVkEqaHR0cDovL3d3dy5jaXBvdGF0by5vcmcvRElWQS9kYXRhL0RhdGFTZXJ2ZXIuYXNwP0FSRUE9TU9aJlRIRU1FPV9hZG0KKyMKK0NJQSpodHRwczovL3d3dy5jaWEuZ292L2NpYS9wdWJsaWNhdGlvbnMvZmFjdGJvb2svZ2Vvcy9tei5odG1sXAorSVNPMzE2Nl8xKmh0dHBzOi8vd3d3LmNpYS5nb3YvbGlicmFyeS9wdWJsaWNhdGlvbnMvdGhlLXdvcmxkLWZhY3Rib29rLworSVNPMzE2Nl8yKmh0dHBzOi8vd3d3LmNpYS5nb3YvbGlicmFyeS9wdWJsaWNhdGlvbnMvdGhlLXdvcmxkLWZhY3Rib29rLwpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy91cmxzL015YW5tYXIudHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy91cmxzL015YW5tYXIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRmYmFjZTAKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3VybHMvTXlhbm1hci50eHQKQEAgLTAsMCArMSw1IEBACitESVZBKmh0dHA6Ly93d3cuY2lwb3RhdG8ub3JnL0RJVkEvZGF0YS9EYXRhU2VydmVyLmFzcD9BUkVBPU1NUiZUSEVNRT1fYWRtCisjCitDSUEqaHR0cHM6Ly93d3cuY2lhLmdvdi9jaWEvcHVibGljYXRpb25zL2ZhY3Rib29rL2dlb3MvYm0uaHRtbAorSVNPMzE2Nl8xKmh0dHBzOi8vd3d3LmNpYS5nb3YvbGlicmFyeS9wdWJsaWNhdGlvbnMvdGhlLXdvcmxkLWZhY3Rib29rLworSVNPMzE2Nl8yKmh0dHBzOi8vd3d3LmNpYS5nb3YvbGlicmFyeS9wdWJsaWNhdGlvbnMvdGhlLXdvcmxkLWZhY3Rib29rLwpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy91cmxzL05hbWliaWEudHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy91cmxzL05hbWliaWEudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc2NDg2NTUKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3VybHMvTmFtaWJpYS50eHQKQEAgLTAsMCArMSw3IEBACisjCitQT1BVTFNUQVQqaHR0cDovL3d3dy5saWJyYXJ5LnV1Lm5sL3dlc3AvcG9wdWxzdGF0L0FmcmljYS9uYW1pYmlhcC5odG0KK0RJVkEqaHR0cDovL3d3dy5jaXBvdGF0by5vcmcvRElWQS9kYXRhL0RhdGFTZXJ2ZXIuYXNwP0FSRUE9TkFNJlRIRU1FPV9hZG0KKyMKK0NJQSpodHRwczovL3d3dy5jaWEuZ292L2NpYS9wdWJsaWNhdGlvbnMvZmFjdGJvb2svZ2Vvcy93YS5odG1sCitJU08zMTY2XzEqaHR0cHM6Ly93d3cuY2lhLmdvdi9saWJyYXJ5L3B1YmxpY2F0aW9ucy90aGUtd29ybGQtZmFjdGJvb2svCitJU08zMTY2XzIqaHR0cHM6Ly93d3cuY2lhLmdvdi9saWJyYXJ5L3B1YmxpY2F0aW9ucy90aGUtd29ybGQtZmFjdGJvb2svCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3VybHMvTmVwYWwudHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy91cmxzL05lcGFsLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMjcxYjUyCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy91cmxzL05lcGFsLnR4dApAQCAtMCwwICsxLDYgQEAKKyMKK0RJVkEqaHR0cDovL3d3dy5jaXBvdGF0by5vcmcvRElWQS9kYXRhL0RhdGFTZXJ2ZXIuYXNwP0FSRUE9TlBMJlRIRU1FPV9hZG0KKyMKK0NJQSpodHRwczovL3d3dy5jaWEuZ292L2NpYS9wdWJsaWNhdGlvbnMvZmFjdGJvb2svZ2Vvcy9ucC5odG1sCitJU08zMTY2XzEqaHR0cHM6Ly93d3cuY2lhLmdvdi9saWJyYXJ5L3B1YmxpY2F0aW9ucy90aGUtd29ybGQtZmFjdGJvb2svCitJU08zMTY2XzIqaHR0cHM6Ly93d3cuY2lhLmdvdi9saWJyYXJ5L3B1YmxpY2F0aW9ucy90aGUtd29ybGQtZmFjdGJvb2svCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3VybHMvTmV0aGVybGFuZHMudHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy91cmxzL05ldGhlcmxhbmRzLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMTZmYzY1Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy91cmxzL05ldGhlcmxhbmRzLnR4dApAQCAtMCwwICsxLDIgQEAKK1VOSVRFRE5BVElPTlMqaHR0cDovL3d3dy5ncmlkLnVuZXAuY2gvZGF0YS9kYXRhLnBocD9jYXRlZ29yeT1odW1hbl9yZWxhdGVkCitJU08zMTY2XzEqaHR0cHM6Ly93d3cuY2lhLmdvdi9saWJyYXJ5L3B1YmxpY2F0aW9ucy90aGUtd29ybGQtZmFjdGJvb2svCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3VybHMvTmljYXJhZ3VhLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvdXJscy9OaWNhcmFndWEudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc1M2E2YjkKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3VybHMvTmljYXJhZ3VhLnR4dApAQCAtMCwwICsxLDUgQEAKKyMKK1BPUCpodHRwOi8vd3d3Lnhpc3Qub3JnL2NudHJ5L25pY2FyYWd1YS5hc3B4CitDSUEqaHR0cDovL3d3dy5nZW9jb21tLmNvbS9mYXEvY29weXJpZ2h0Lmh0bWwKK0lTTzMxNjZfMSpodHRwczovL3d3dy5jaWEuZ292L2xpYnJhcnkvcHVibGljYXRpb25zL3RoZS13b3JsZC1mYWN0Ym9vay8KK0lTTzMxNjZfMipodHRwczovL3d3dy5jaWEuZ292L2xpYnJhcnkvcHVibGljYXRpb25zL3RoZS13b3JsZC1mYWN0Ym9vay8KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvdXJscy9OaWdlci50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3VybHMvTmlnZXIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJiZjY3NmUKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3VybHMvTmlnZXIudHh0CkBAIC0wLDAgKzEsNiBAQAorIworRElWQSpodHRwOi8vd3d3LmNpcG90YXRvLm9yZy9ESVZBL2RhdGEvRGF0YVNlcnZlci5hc3A/QVJFQT1ORVImVEhFTUU9X2FkbQorIworQ0lBKmh0dHBzOi8vd3d3LmNpYS5nb3YvY2lhL3B1YmxpY2F0aW9ucy9mYWN0Ym9vay9nZW9zL25nLmh0bWwKK0lTTzMxNjZfMSpodHRwczovL3d3dy5jaWEuZ292L2xpYnJhcnkvcHVibGljYXRpb25zL3RoZS13b3JsZC1mYWN0Ym9vay8KK0lTTzMxNjZfMipodHRwczovL3d3dy5jaWEuZ292L2xpYnJhcnkvcHVibGljYXRpb25zL3RoZS13b3JsZC1mYWN0Ym9vay8KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvdXJscy9OaWdlcmlhLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvdXJscy9OaWdlcmlhLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYWQyNTY1Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy91cmxzL05pZ2VyaWEudHh0CkBAIC0wLDAgKzEsNiBAQAorIworRElWQSpodHRwOi8vd3d3LmNpcG90YXRvLm9yZy9ESVZBL2RhdGEvRGF0YVNlcnZlci5hc3A/QVJFQT1OR0EmVEhFTUU9X2FkbQorIworQ0lBKmh0dHBzOi8vd3d3LmNpYS5nb3YvY2lhL3B1YmxpY2F0aW9ucy9mYWN0Ym9vay9nZW9zL25pLmh0bWwKK0lTTzMxNjZfMSpodHRwczovL3d3dy5jaWEuZ292L2xpYnJhcnkvcHVibGljYXRpb25zL3RoZS13b3JsZC1mYWN0Ym9vay8KK0lTTzMxNjZfMipodHRwczovL3d3dy5jaWEuZ292L2xpYnJhcnkvcHVibGljYXRpb25zL3RoZS13b3JsZC1mYWN0Ym9vay8KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvdXJscy9Ob3J0aCBLb3JlYS50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3VybHMvTm9ydGggS29yZWEudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVmMmM4N2YKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3VybHMvTm9ydGggS29yZWEudHh0CkBAIC0wLDAgKzEsNiBAQAorIworRElWQSpodHRwOi8vd3d3LmNpcG90YXRvLm9yZy9ESVZBL2RhdGEvRGF0YVNlcnZlci5hc3A/QVJFQT1QUksmVEhFTUU9X2FkbQorIworQ0lBKmh0dHBzOi8vd3d3LmNpYS5nb3YvY2lhL3B1YmxpY2F0aW9ucy9mYWN0Ym9vay9nZW9zL2tuLmh0bWwKK0lTTzMxNjZfMSpodHRwczovL3d3dy5jaWEuZ292L2xpYnJhcnkvcHVibGljYXRpb25zL3RoZS13b3JsZC1mYWN0Ym9vay8KK0lTTzMxNjZfMipodHRwczovL3d3dy5jaWEuZ292L2xpYnJhcnkvcHVibGljYXRpb25zL3RoZS13b3JsZC1mYWN0Ym9vay8KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvdXJscy9Ob3J3YXkudHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy91cmxzL05vcndheS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTE2ZmM2NQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvdXJscy9Ob3J3YXkudHh0CkBAIC0wLDAgKzEsMiBAQAorVU5JVEVETkFUSU9OUypodHRwOi8vd3d3LmdyaWQudW5lcC5jaC9kYXRhL2RhdGEucGhwP2NhdGVnb3J5PWh1bWFuX3JlbGF0ZWQKK0lTTzMxNjZfMSpodHRwczovL3d3dy5jaWEuZ292L2xpYnJhcnkvcHVibGljYXRpb25zL3RoZS13b3JsZC1mYWN0Ym9vay8KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvdXJscy9PbWFuLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvdXJscy9PbWFuLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZWMxNGM2Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy91cmxzL09tYW4udHh0CkBAIC0wLDAgKzEsNiBAQAorIworIworRElWQSpodHRwOi8vd3d3LmNpcG90YXRvLm9yZy9ESVZBL2RhdGEvRGF0YVNlcnZlci5hc3A/QVJFQT1PTU4mVEhFTUU9X2FkbQorQ0lBKmh0dHBzOi8vd3d3LmNpYS5nb3YvY2lhL3B1YmxpY2F0aW9ucy9mYWN0Ym9vay9nZW9zL211Lmh0bWwKK0lTTzMxNjZfMSpodHRwczovL3d3dy5jaWEuZ292L2xpYnJhcnkvcHVibGljYXRpb25zL3RoZS13b3JsZC1mYWN0Ym9vay8KK0lTTzMxNjZfMipodHRwczovL3d3dy5jaWEuZ292L2xpYnJhcnkvcHVibGljYXRpb25zL3RoZS13b3JsZC1mYWN0Ym9vay8KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvdXJscy9QYWtpc3Rhbi50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3VybHMvUGFraXN0YW4udHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEwOTg2NTUKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3VybHMvUGFraXN0YW4udHh0CkBAIC0wLDAgKzEsNiBAQAorIworRElWQSpodHRwOi8vd3d3LmNpcG90YXRvLm9yZy9ESVZBL2RhdGEvRGF0YVNlcnZlci5hc3A/QVJFQT1QQUsmVEhFTUU9X2FkbQorIworQ0lBKmh0dHBzOi8vd3d3LmNpYS5nb3YvY2lhL3B1YmxpY2F0aW9ucy9mYWN0Ym9vay9nZW9zL3BrLmh0bWwKK0lTTzMxNjZfMSpodHRwczovL3d3dy5jaWEuZ292L2xpYnJhcnkvcHVibGljYXRpb25zL3RoZS13b3JsZC1mYWN0Ym9vay8KK0lTTzMxNjZfMipodHRwczovL3d3dy5jaWEuZ292L2xpYnJhcnkvcHVibGljYXRpb25zL3RoZS13b3JsZC1mYWN0Ym9vay8KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvdXJscy9QYW5hbWEudHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy91cmxzL1BhbmFtYS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzY5ZmUxOQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvdXJscy9QYW5hbWEudHh0CkBAIC0wLDAgKzEsNSBAQAorIworUE9QKmh0dHA6Ly93d3cueGlzdC5vcmcvY250cnkvcGFuYW1hLmFzcHgKK0NJQSpodHRwOi8vd3d3Lmdlb2NvbW0uY29tL2ZhcS9jb3B5cmlnaHQuaHRtbAorSVNPMzE2Nl8xKmh0dHBzOi8vd3d3LmNpYS5nb3YvbGlicmFyeS9wdWJsaWNhdGlvbnMvdGhlLXdvcmxkLWZhY3Rib29rLworSVNPMzE2Nl8yKmh0dHBzOi8vd3d3LmNpYS5nb3YvbGlicmFyeS9wdWJsaWNhdGlvbnMvdGhlLXdvcmxkLWZhY3Rib29rLwpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy91cmxzL1BhcHVhIE5ldyBHdWluZWEudHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy91cmxzL1BhcHVhIE5ldyBHdWluZWEudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIyY2QwNjMKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3VybHMvUGFwdWEgTmV3IEd1aW5lYS50eHQKQEAgLTAsMCArMSw2IEBACisjCitESVZBKmh0dHA6Ly93d3cuY2lwb3RhdG8ub3JnL0RJVkEvZGF0YS9EYXRhU2VydmVyLmFzcD9BUkVBPVBORyZUSEVNRT1fYWRtCisjCitDSUEqaHR0cHM6Ly93d3cuY2lhLmdvdi9jaWEvcHVibGljYXRpb25zL2ZhY3Rib29rL2dlb3MvcHAuaHRtbAorSVNPMzE2Nl8xKmh0dHBzOi8vd3d3LmNpYS5nb3YvbGlicmFyeS9wdWJsaWNhdGlvbnMvdGhlLXdvcmxkLWZhY3Rib29rLworSVNPMzE2Nl8yKmh0dHBzOi8vd3d3LmNpYS5nb3YvbGlicmFyeS9wdWJsaWNhdGlvbnMvdGhlLXdvcmxkLWZhY3Rib29rLwpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy91cmxzL1BhcmFndWF5LnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvdXJscy9QYXJhZ3VheS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWFjMDlmZAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvdXJscy9QYXJhZ3VheS50eHQKQEAgLTAsMCArMSw2IEBACisjCitESVZBKmh0dHA6Ly93d3cuY2lwb3RhdG8ub3JnL0RJVkEvZGF0YS9EYXRhU2VydmVyLmFzcD9BUkVBPVBSWSZUSEVNRT1fYWRtCisjCitDSUEqaHR0cHM6Ly93d3cuY2lhLmdvdi9jaWEvcHVibGljYXRpb25zL2ZhY3Rib29rL2dlb3MvcGEuaHRtbAorSVNPMzE2Nl8xKmh0dHBzOi8vd3d3LmNpYS5nb3YvbGlicmFyeS9wdWJsaWNhdGlvbnMvdGhlLXdvcmxkLWZhY3Rib29rLworSVNPMzE2Nl8yKmh0dHBzOi8vd3d3LmNpYS5nb3YvbGlicmFyeS9wdWJsaWNhdGlvbnMvdGhlLXdvcmxkLWZhY3Rib29rLwpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy91cmxzL1BlcnUudHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy91cmxzL1BlcnUudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNiZDA0NGQKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3VybHMvUGVydS50eHQKQEAgLTAsMCArMSw2IEBACisjCitESVZBKmh0dHA6Ly93d3cuY2lwb3RhdG8ub3JnL0RJVkEvZGF0YS9EYXRhU2VydmVyLmFzcD9BUkVBPVBFUiZUSEVNRT1fYWRtCisjCitDSUEqaHR0cHM6Ly93d3cuY2lhLmdvdi9jaWEvcHVibGljYXRpb25zL2ZhY3Rib29rL2dlb3MvcGUuaHRtbAorSVNPMzE2Nl8xKmh0dHBzOi8vd3d3LmNpYS5nb3YvbGlicmFyeS9wdWJsaWNhdGlvbnMvdGhlLXdvcmxkLWZhY3Rib29rLworSVNPMzE2Nl8yKmh0dHBzOi8vd3d3LmNpYS5nb3YvbGlicmFyeS9wdWJsaWNhdGlvbnMvdGhlLXdvcmxkLWZhY3Rib29rLwpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy91cmxzL1BoaWxpcHBpbmVzLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvdXJscy9QaGlsaXBwaW5lcy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmY5NzllOAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvdXJscy9QaGlsaXBwaW5lcy50eHQKQEAgLTAsMCArMSw3IEBACisjCitDSVRZUE9QKmh0dHA6Ly93d3cuY2l0eXBvcHVsYXRpb24uZGUvUGhpbGlwcGluZXMuaHRtbAorRElWQSpodHRwOi8vd3d3LmNpcG90YXRvLm9yZy9ESVZBL2RhdGEvRGF0YVNlcnZlci5hc3A/QVJFQT1QSEwmVEhFTUU9X2FkbQorIworQ0lBKmh0dHBzOi8vd3d3LmNpYS5nb3YvY2lhL3B1YmxpY2F0aW9ucy9mYWN0Ym9vay9nZW9zL3JwLmh0bWwKK0lTTzMxNjZfMSpodHRwczovL3d3dy5jaWEuZ292L2xpYnJhcnkvcHVibGljYXRpb25zL3RoZS13b3JsZC1mYWN0Ym9vay8KK0lTTzMxNjZfMipodHRwczovL3d3dy5jaWEuZ292L2xpYnJhcnkvcHVibGljYXRpb25zL3RoZS13b3JsZC1mYWN0Ym9vay8KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvdXJscy9Qb2xhbmQudHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy91cmxzL1BvbGFuZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTE2ZmM2NQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvdXJscy9Qb2xhbmQudHh0CkBAIC0wLDAgKzEsMiBAQAorVU5JVEVETkFUSU9OUypodHRwOi8vd3d3LmdyaWQudW5lcC5jaC9kYXRhL2RhdGEucGhwP2NhdGVnb3J5PWh1bWFuX3JlbGF0ZWQKK0lTTzMxNjZfMSpodHRwczovL3d3dy5jaWEuZ292L2xpYnJhcnkvcHVibGljYXRpb25zL3RoZS13b3JsZC1mYWN0Ym9vay8KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvdXJscy9Qb3J0dWdhbC50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3VybHMvUG9ydHVnYWwudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUxNmZjNjUKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3VybHMvUG9ydHVnYWwudHh0CkBAIC0wLDAgKzEsMiBAQAorVU5JVEVETkFUSU9OUypodHRwOi8vd3d3LmdyaWQudW5lcC5jaC9kYXRhL2RhdGEucGhwP2NhdGVnb3J5PWh1bWFuX3JlbGF0ZWQKK0lTTzMxNjZfMSpodHRwczovL3d3dy5jaWEuZ292L2xpYnJhcnkvcHVibGljYXRpb25zL3RoZS13b3JsZC1mYWN0Ym9vay8KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvdXJscy9QdWVydG8gUmljby50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3VybHMvUHVlcnRvIFJpY28udHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEwZWI4ZDMKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3VybHMvUHVlcnRvIFJpY28udHh0CkBAIC0wLDAgKzEsMyBAQAorVVNDRU5TVVNQVUVSVE9SSUNPKmh0dHA6Ly9mYWN0ZmluZGVyLmNlbnN1cy5nb3Yvc2VydmxldC9HQ1RUYWJsZT9fYm09eSYtZ2VvX2lkPTA0MDAwVVM3MiYtX2JveF9oZWFkX25icj1HQ1QtUEgxJi1kc19uYW1lPURFQ18yMDAwX1NGMV9VJi1yZWRvTG9nPWZhbHNlJi1tdF9uYW1lPURFQ18yMDAwX1NGMV9VX0dDVFBIMV9VUzkmLWZvcm1hdD1TVC0yJi1DT05URVhUPWdjdAorIworCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3VybHMvUWF0YXIudHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy91cmxzL1FhdGFyLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44OTZiOTdiCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy91cmxzL1FhdGFyLnR4dApAQCAtMCwwICsxLDYgQEAKKyMKKyMKK0RJVkEqaHR0cDovL3d3dy5jaXBvdGF0by5vcmcvRElWQS9kYXRhL0RhdGFTZXJ2ZXIuYXNwP0FSRUE9UUFUJlRIRU1FPV9hZG0KK0NJQSpodHRwczovL3d3dy5jaWEuZ292L2NpYS9wdWJsaWNhdGlvbnMvZmFjdGJvb2svZ2Vvcy9xYS5odG1sCitJU08zMTY2XzEqaHR0cHM6Ly93d3cuY2lhLmdvdi9saWJyYXJ5L3B1YmxpY2F0aW9ucy90aGUtd29ybGQtZmFjdGJvb2svCitJU08zMTY2XzIqaHR0cHM6Ly93d3cuY2lhLmdvdi9saWJyYXJ5L3B1YmxpY2F0aW9ucy90aGUtd29ybGQtZmFjdGJvb2svCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3VybHMvUm9tYW5pYS50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3VybHMvUm9tYW5pYS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTE2ZmM2NQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvdXJscy9Sb21hbmlhLnR4dApAQCAtMCwwICsxLDIgQEAKK1VOSVRFRE5BVElPTlMqaHR0cDovL3d3dy5ncmlkLnVuZXAuY2gvZGF0YS9kYXRhLnBocD9jYXRlZ29yeT1odW1hbl9yZWxhdGVkCitJU08zMTY2XzEqaHR0cHM6Ly93d3cuY2lhLmdvdi9saWJyYXJ5L3B1YmxpY2F0aW9ucy90aGUtd29ybGQtZmFjdGJvb2svCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3VybHMvUnVzc2lhLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvdXJscy9SdXNzaWEudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUxNmZjNjUKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3VybHMvUnVzc2lhLnR4dApAQCAtMCwwICsxLDIgQEAKK1VOSVRFRE5BVElPTlMqaHR0cDovL3d3dy5ncmlkLnVuZXAuY2gvZGF0YS9kYXRhLnBocD9jYXRlZ29yeT1odW1hbl9yZWxhdGVkCitJU08zMTY2XzEqaHR0cHM6Ly93d3cuY2lhLmdvdi9saWJyYXJ5L3B1YmxpY2F0aW9ucy90aGUtd29ybGQtZmFjdGJvb2svCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3VybHMvUndhbmRhLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvdXJscy9Sd2FuZGEudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFmYzQxOWUKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3VybHMvUndhbmRhLnR4dApAQCAtMCwwICsxLDYgQEAKKyMKK0RJVkEqaHR0cDovL3d3dy5jaXBvdGF0by5vcmcvRElWQS9kYXRhL0RhdGFTZXJ2ZXIuYXNwP0FSRUE9UldBJlRIRU1FPV9hZG0KKyMKK0NJQSpodHRwczovL3d3dy5jaWEuZ292L2NpYS9wdWJsaWNhdGlvbnMvZmFjdGJvb2svZ2Vvcy9ydy5odG1sCitJU08zMTY2XzEqaHR0cHM6Ly93d3cuY2lhLmdvdi9saWJyYXJ5L3B1YmxpY2F0aW9ucy90aGUtd29ybGQtZmFjdGJvb2svCitJU08zMTY2XzIqaHR0cHM6Ly93d3cuY2lhLmdvdi9saWJyYXJ5L3B1YmxpY2F0aW9ucy90aGUtd29ybGQtZmFjdGJvb2svCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3VybHMvU2FuIE1hcmluby50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3VybHMvU2FuIE1hcmluby50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTE2ZmM2NQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvdXJscy9TYW4gTWFyaW5vLnR4dApAQCAtMCwwICsxLDIgQEAKK1VOSVRFRE5BVElPTlMqaHR0cDovL3d3dy5ncmlkLnVuZXAuY2gvZGF0YS9kYXRhLnBocD9jYXRlZ29yeT1odW1hbl9yZWxhdGVkCitJU08zMTY2XzEqaHR0cHM6Ly93d3cuY2lhLmdvdi9saWJyYXJ5L3B1YmxpY2F0aW9ucy90aGUtd29ybGQtZmFjdGJvb2svCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3VybHMvU2FvIFRvbWUgYW5kIFByaW5jaXBlLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvdXJscy9TYW8gVG9tZSBhbmQgUHJpbmNpcGUudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM4ZDJkZmYKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3VybHMvU2FvIFRvbWUgYW5kIFByaW5jaXBlLnR4dApAQCAtMCwwICsxLDYgQEAKKyMKKyMKK0RJVkEqaHR0cDovL3d3dy5jaXBvdGF0by5vcmcvRElWQS9kYXRhL0RhdGFTZXJ2ZXIuYXNwP0FSRUE9U1RQJlRIRU1FPV9hZG0KK0NJQSpodHRwczovL3d3dy5jaWEuZ292L2NpYS9wdWJsaWNhdGlvbnMvZmFjdGJvb2svZ2Vvcy90cC5odG1sCitJU08zMTY2XzEqaHR0cHM6Ly93d3cuY2lhLmdvdi9saWJyYXJ5L3B1YmxpY2F0aW9ucy90aGUtd29ybGQtZmFjdGJvb2svCitJU08zMTY2XzIqaHR0cHM6Ly93d3cuY2lhLmdvdi9saWJyYXJ5L3B1YmxpY2F0aW9ucy90aGUtd29ybGQtZmFjdGJvb2svCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3VybHMvU2F1ZGkgQXJhYmlhLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvdXJscy9TYXVkaSBBcmFiaWEudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhkMDhjMDAKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3VybHMvU2F1ZGkgQXJhYmlhLnR4dApAQCAtMCwwICsxLDcgQEAKKyMKK0NJVFlQT1AqaHR0cDovL3d3dy5jaXR5cG9wdWxhdGlvbi5kZS9TYXVkaUFyYWJpYS5odG1sCisjCitESVZBKmh0dHA6Ly93d3cuY2lwb3RhdG8ub3JnL0RJVkEvZGF0YS9EYXRhU2VydmVyLmFzcD9BUkVBPVNBVSZUSEVNRT1fYWRtCitDSUEqaHR0cHM6Ly93d3cuY2lhLmdvdi9jaWEvcHVibGljYXRpb25zL2ZhY3Rib29rL2dlb3Mvc2EuaHRtbAorSVNPMzE2Nl8xKmh0dHBzOi8vd3d3LmNpYS5nb3YvbGlicmFyeS9wdWJsaWNhdGlvbnMvdGhlLXdvcmxkLWZhY3Rib29rLworSVNPMzE2Nl8yKmh0dHBzOi8vd3d3LmNpYS5nb3YvbGlicmFyeS9wdWJsaWNhdGlvbnMvdGhlLXdvcmxkLWZhY3Rib29rLwpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy91cmxzL1NlbmVnYWwudHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy91cmxzL1NlbmVnYWwudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM5NmQ1M2IKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3VybHMvU2VuZWdhbC50eHQKQEAgLTAsMCArMSw2IEBACisjCitESVZBKmh0dHA6Ly93d3cuY2lwb3RhdG8ub3JnL0RJVkEvZGF0YS9EYXRhU2VydmVyLmFzcD9BUkVBPVNFTiZUSEVNRT1fYWRtCisjCitDSUEqaHR0cHM6Ly93d3cuY2lhLmdvdi9jaWEvcHVibGljYXRpb25zL2ZhY3Rib29rL2dlb3Mvc2cuaHRtbAorSVNPMzE2Nl8xKmh0dHBzOi8vd3d3LmNpYS5nb3YvbGlicmFyeS9wdWJsaWNhdGlvbnMvdGhlLXdvcmxkLWZhY3Rib29rLworSVNPMzE2Nl8yKmh0dHBzOi8vd3d3LmNpYS5nb3YvbGlicmFyeS9wdWJsaWNhdGlvbnMvdGhlLXdvcmxkLWZhY3Rib29rLwpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy91cmxzL1NleWNoZWxsZXMudHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy91cmxzL1NleWNoZWxsZXMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM1ZGRiNDgKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3VybHMvU2V5Y2hlbGxlcy50eHQKQEAgLTAsMCArMSw2IEBACisjCitESVZBKmh0dHA6Ly93d3cuY2lwb3RhdG8ub3JnL0RJVkEvZGF0YS9EYXRhU2VydmVyLmFzcD9BUkVBPVNFTiZUSEVNRT1fYWRtCisjCitDSUEqaHR0cHM6Ly93d3cuY2lhLmdvdi9jaWEvcHVibGljYXRpb25zL2ZhY3Rib29rL2dlb3Mvc2UuaHRtbAorSVNPMzE2Nl8xKmh0dHBzOi8vd3d3LmNpYS5nb3YvbGlicmFyeS9wdWJsaWNhdGlvbnMvdGhlLXdvcmxkLWZhY3Rib29rLworSVNPMzE2Nl8yKmh0dHBzOi8vd3d3LmNpYS5nb3YvbGlicmFyeS9wdWJsaWNhdGlvbnMvdGhlLXdvcmxkLWZhY3Rib29rLwpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy91cmxzL1NpZXJyYSBMZW9uZS50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3VybHMvU2llcnJhIExlb25lLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNmIyMmFkCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy91cmxzL1NpZXJyYSBMZW9uZS50eHQKQEAgLTAsMCArMSw2IEBACisjCisjCitESVZBKmh0dHA6Ly93d3cuY2lwb3RhdG8ub3JnL0RJVkEvZGF0YS9EYXRhU2VydmVyLmFzcD9BUkVBPVNMRSZUSEVNRT1fYWRtCitDSUEqaHR0cHM6Ly93d3cuY2lhLmdvdi9jaWEvcHVibGljYXRpb25zL2ZhY3Rib29rL2dlb3Mvc2wuaHRtbAorSVNPMzE2Nl8xKmh0dHBzOi8vd3d3LmNpYS5nb3YvbGlicmFyeS9wdWJsaWNhdGlvbnMvdGhlLXdvcmxkLWZhY3Rib29rLworSVNPMzE2Nl8yKmh0dHBzOi8vd3d3LmNpYS5nb3YvbGlicmFyeS9wdWJsaWNhdGlvbnMvdGhlLXdvcmxkLWZhY3Rib29rLwpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy91cmxzL1NpbmdhcG9yZS50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3VybHMvU2luZ2Fwb3JlLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MzJiMzY2Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy91cmxzL1NpbmdhcG9yZS50eHQKQEAgLTAsMCArMSw2IEBACisjCitESVZBKmh0dHA6Ly93d3cuY2lwb3RhdG8ub3JnL0RJVkEvZGF0YS9EYXRhU2VydmVyLmFzcD9BUkVBPVNHUCZUSEVNRT1fYWRtCisjCitDSUEqaHR0cHM6Ly93d3cuY2lhLmdvdi9jaWEvcHVibGljYXRpb25zL2ZhY3Rib29rL2dlb3Mvc24uaHRtbAorSVNPMzE2Nl8xKmh0dHBzOi8vd3d3LmNpYS5nb3YvbGlicmFyeS9wdWJsaWNhdGlvbnMvdGhlLXdvcmxkLWZhY3Rib29rLworSVNPMzE2Nl8yKmh0dHBzOi8vd3d3LmNpYS5nb3YvbGlicmFyeS9wdWJsaWNhdGlvbnMvdGhlLXdvcmxkLWZhY3Rib29rLwpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy91cmxzL1Nsb3ZlbmlhLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvdXJscy9TbG92ZW5pYS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTE2ZmM2NQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvdXJscy9TbG92ZW5pYS50eHQKQEAgLTAsMCArMSwyIEBACitVTklURUROQVRJT05TKmh0dHA6Ly93d3cuZ3JpZC51bmVwLmNoL2RhdGEvZGF0YS5waHA/Y2F0ZWdvcnk9aHVtYW5fcmVsYXRlZAorSVNPMzE2Nl8xKmh0dHBzOi8vd3d3LmNpYS5nb3YvbGlicmFyeS9wdWJsaWNhdGlvbnMvdGhlLXdvcmxkLWZhY3Rib29rLwpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy91cmxzL1NvbWFsaWEudHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy91cmxzL1NvbWFsaWEudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNmMzZkODYKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3VybHMvU29tYWxpYS50eHQKQEAgLTAsMCArMSw2IEBACisjCitESVZBKmh0dHA6Ly93d3cuY2lwb3RhdG8ub3JnL0RJVkEvZGF0YS9EYXRhU2VydmVyLmFzcD9BUkVBPVNPTSZUSEVNRT1fYWRtCisjCitDSUEqaHR0cHM6Ly93d3cuY2lhLmdvdi9jaWEvcHVibGljYXRpb25zL2ZhY3Rib29rL2dlb3Mvc28uaHRtbAorSVNPMzE2Nl8xKmh0dHBzOi8vd3d3LmNpYS5nb3YvbGlicmFyeS9wdWJsaWNhdGlvbnMvdGhlLXdvcmxkLWZhY3Rib29rLworSVNPMzE2Nl8yKmh0dHBzOi8vd3d3LmNpYS5nb3YvbGlicmFyeS9wdWJsaWNhdGlvbnMvdGhlLXdvcmxkLWZhY3Rib29rLwpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy91cmxzL1NvdXRoIEFmcmljYS50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3VybHMvU291dGggQWZyaWNhLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45OGMyYTdiCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy91cmxzL1NvdXRoIEFmcmljYS50eHQKQEAgLTAsMCArMSw2IEBACisjCitESVZBKmh0dHA6Ly93d3cuY2lwb3RhdG8ub3JnL0RJVkEvZGF0YS9EYXRhU2VydmVyLmFzcD9BUkVBPVpBRiZUSEVNRT1fYWRtCisjCitDSUEqaHR0cHM6Ly93d3cuY2lhLmdvdi9jaWEvcHVibGljYXRpb25zL2ZhY3Rib29rL2dlb3Mvc2YuaHRtbAorSVNPMzE2Nl8xKmh0dHBzOi8vd3d3LmNpYS5nb3YvbGlicmFyeS9wdWJsaWNhdGlvbnMvdGhlLXdvcmxkLWZhY3Rib29rLworSVNPMzE2Nl8yKmh0dHBzOi8vd3d3LmNpYS5nb3YvbGlicmFyeS9wdWJsaWNhdGlvbnMvdGhlLXdvcmxkLWZhY3Rib29rLwpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy91cmxzL1NvdXRoIEtvcmVhLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvdXJscy9Tb3V0aCBLb3JlYS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTg3ZWU1ZQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvdXJscy9Tb3V0aCBLb3JlYS50eHQKQEAgLTAsMCArMSw2IEBACisjCitESVZBKmh0dHA6Ly93d3cuY2lwb3RhdG8ub3JnL0RJVkEvZGF0YS9EYXRhU2VydmVyLmFzcD9BUkVBPUtPUiZUSEVNRT1fYWRtCisjCitDSUEqaHR0cHM6Ly93d3cuY2lhLmdvdi9jaWEvcHVibGljYXRpb25zL2ZhY3Rib29rL2dlb3Mva3MuaHRtbAorSVNPMzE2Nl8xKmh0dHBzOi8vd3d3LmNpYS5nb3YvbGlicmFyeS9wdWJsaWNhdGlvbnMvdGhlLXdvcmxkLWZhY3Rib29rLworSVNPMzE2Nl8yKmh0dHBzOi8vd3d3LmNpYS5nb3YvbGlicmFyeS9wdWJsaWNhdGlvbnMvdGhlLXdvcmxkLWZhY3Rib29rLwpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy91cmxzL1NwYWluLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvdXJscy9TcGFpbi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTE2ZmM2NQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvdXJscy9TcGFpbi50eHQKQEAgLTAsMCArMSwyIEBACitVTklURUROQVRJT05TKmh0dHA6Ly93d3cuZ3JpZC51bmVwLmNoL2RhdGEvZGF0YS5waHA/Y2F0ZWdvcnk9aHVtYW5fcmVsYXRlZAorSVNPMzE2Nl8xKmh0dHBzOi8vd3d3LmNpYS5nb3YvbGlicmFyeS9wdWJsaWNhdGlvbnMvdGhlLXdvcmxkLWZhY3Rib29rLwpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy91cmxzL1N1ZGFuLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvdXJscy9TdWRhbi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGY5YzhhZgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvdXJscy9TdWRhbi50eHQKQEAgLTAsMCArMSw2IEBACisjCitESVZBKmh0dHA6Ly93d3cuY2lwb3RhdG8ub3JnL0RJVkEvZGF0YS9EYXRhU2VydmVyLmFzcD9BUkVBPVNETiZUSEVNRT1fYWRtCisjCitDSUEqaHR0cHM6Ly93d3cuY2lhLmdvdi9jaWEvcHVibGljYXRpb25zL2ZhY3Rib29rL2dlb3Mvc3UuaHRtbAorSVNPMzE2Nl8xKmh0dHBzOi8vd3d3LmNpYS5nb3YvbGlicmFyeS9wdWJsaWNhdGlvbnMvdGhlLXdvcmxkLWZhY3Rib29rLworSVNPMzE2Nl8yKmh0dHBzOi8vd3d3LmNpYS5nb3YvbGlicmFyeS9wdWJsaWNhdGlvbnMvdGhlLXdvcmxkLWZhY3Rib29rLwpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy91cmxzL1N1cmluYW1lLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvdXJscy9TdXJpbmFtZS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTNhN2VkNAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvdXJscy9TdXJpbmFtZS50eHQKQEAgLTAsMCArMSw2IEBACisjCitESVZBKmh0dHA6Ly93d3cuY2lwb3RhdG8ub3JnL0RJVkEvZGF0YS9EYXRhU2VydmVyLmFzcD9BUkVBPVNVUiZUSEVNRT1fYWRtCisjCitDSUEqaHR0cHM6Ly93d3cuY2lhLmdvdi9jaWEvcHVibGljYXRpb25zL2ZhY3Rib29rL2dlb3MvbnMuaHRtbAorSVNPMzE2Nl8xKmh0dHBzOi8vd3d3LmNpYS5nb3YvbGlicmFyeS9wdWJsaWNhdGlvbnMvdGhlLXdvcmxkLWZhY3Rib29rLworSVNPMzE2Nl8yKmh0dHBzOi8vd3d3LmNpYS5nb3YvbGlicmFyeS9wdWJsaWNhdGlvbnMvdGhlLXdvcmxkLWZhY3Rib29rLwpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy91cmxzL1N3ZWRlbi50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3VybHMvU3dlZGVuLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMTZmYzY1Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy91cmxzL1N3ZWRlbi50eHQKQEAgLTAsMCArMSwyIEBACitVTklURUROQVRJT05TKmh0dHA6Ly93d3cuZ3JpZC51bmVwLmNoL2RhdGEvZGF0YS5waHA/Y2F0ZWdvcnk9aHVtYW5fcmVsYXRlZAorSVNPMzE2Nl8xKmh0dHBzOi8vd3d3LmNpYS5nb3YvbGlicmFyeS9wdWJsaWNhdGlvbnMvdGhlLXdvcmxkLWZhY3Rib29rLwpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy91cmxzL1N3aXR6ZXJsYW5kLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvdXJscy9Td2l0emVybGFuZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTE2ZmM2NQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvdXJscy9Td2l0emVybGFuZC50eHQKQEAgLTAsMCArMSwyIEBACitVTklURUROQVRJT05TKmh0dHA6Ly93d3cuZ3JpZC51bmVwLmNoL2RhdGEvZGF0YS5waHA/Y2F0ZWdvcnk9aHVtYW5fcmVsYXRlZAorSVNPMzE2Nl8xKmh0dHBzOi8vd3d3LmNpYS5nb3YvbGlicmFyeS9wdWJsaWNhdGlvbnMvdGhlLXdvcmxkLWZhY3Rib29rLwpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy91cmxzL1N5cmlhLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvdXJscy9TeXJpYS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjQ4YTE4YQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvdXJscy9TeXJpYS50eHQKQEAgLTAsMCArMSw2IEBACisjCitESVZBKmh0dHA6Ly93d3cuY2lwb3RhdG8ub3JnL0RJVkEvZGF0YS9EYXRhU2VydmVyLmFzcD9BUkVBPVNZUiZUSEVNRT1fYWRtCisjCitDSUEqaHR0cHM6Ly93d3cuY2lhLmdvdi9jaWEvcHVibGljYXRpb25zL2ZhY3Rib29rL2dlb3Mvc3kuaHRtbAorSVNPMzE2Nl8xKmh0dHBzOi8vd3d3LmNpYS5nb3YvbGlicmFyeS9wdWJsaWNhdGlvbnMvdGhlLXdvcmxkLWZhY3Rib29rLworSVNPMzE2Nl8yKmh0dHBzOi8vd3d3LmNpYS5nb3YvbGlicmFyeS9wdWJsaWNhdGlvbnMvdGhlLXdvcmxkLWZhY3Rib29rLwpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy91cmxzL1RhamlraXN0YW4udHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy91cmxzL1RhamlraXN0YW4udHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk0Zjc5ZTgKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3VybHMvVGFqaWtpc3Rhbi50eHQKQEAgLTAsMCArMSw2IEBACisjCisjCitESVZBKmh0dHA6Ly93d3cuY2lwb3RhdG8ub3JnL0RJVkEvZGF0YS9EYXRhU2VydmVyLmFzcD9BUkVBPVRKSyZUSEVNRT1fYWRtCitDSUEqaHR0cHM6Ly93d3cuY2lhLmdvdi9jaWEvcHVibGljYXRpb25zL2ZhY3Rib29rL2dlb3MvdGkuaHRtbAorSVNPMzE2Nl8xKmh0dHBzOi8vd3d3LmNpYS5nb3YvbGlicmFyeS9wdWJsaWNhdGlvbnMvdGhlLXdvcmxkLWZhY3Rib29rLworSVNPMzE2Nl8yKmh0dHBzOi8vd3d3LmNpYS5nb3YvbGlicmFyeS9wdWJsaWNhdGlvbnMvdGhlLXdvcmxkLWZhY3Rib29rLwpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy91cmxzL1RhbnphbmlhIFVuaXRlZCBSZXB1YmxpYy50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3VybHMvVGFuemFuaWEgVW5pdGVkIFJlcHVibGljLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZWMwM2JmCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy91cmxzL1RhbnphbmlhIFVuaXRlZCBSZXB1YmxpYy50eHQKQEAgLTAsMCArMSw3IEBACisjCisjCisjCitESVZBKmh0dHA6Ly93d3cuY2lwb3RhdG8ub3JnL0RJVkEvZGF0YS9EYXRhU2VydmVyLmFzcD9BUkVBPVRaQSZUSEVNRT1fYWRtCitDSUEqaHR0cHM6Ly93d3cuY2lhLmdvdi9jaWEvcHVibGljYXRpb25zL2ZhY3Rib29rL2dlb3MvdHouaHRtbAorSVNPMzE2Nl8xKmh0dHBzOi8vd3d3LmNpYS5nb3YvbGlicmFyeS9wdWJsaWNhdGlvbnMvdGhlLXdvcmxkLWZhY3Rib29rLworSVNPMzE2Nl8yKmh0dHBzOi8vd3d3LmNpYS5nb3YvbGlicmFyeS9wdWJsaWNhdGlvbnMvdGhlLXdvcmxkLWZhY3Rib29rLwpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy91cmxzL1RoYWlsYW5kLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvdXJscy9UaGFpbGFuZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTBiYTIwMwotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvdXJscy9UaGFpbGFuZC50eHQKQEAgLTAsMCArMSw2IEBACisjCitESVZBKmh0dHA6Ly93d3cuY2lwb3RhdG8ub3JnL0RJVkEvZGF0YS9EYXRhU2VydmVyLmFzcD9BUkVBPVRIQSZUSEVNRT1fYWRtCisjCitDSUEqaHR0cHM6Ly93d3cuY2lhLmdvdi9jaWEvcHVibGljYXRpb25zL2ZhY3Rib29rL2dlb3MvdGguaHRtbAorSVNPMzE2Nl8xKmh0dHBzOi8vd3d3LmNpYS5nb3YvbGlicmFyeS9wdWJsaWNhdGlvbnMvdGhlLXdvcmxkLWZhY3Rib29rLworSVNPMzE2Nl8yKmh0dHBzOi8vd3d3LmNpYS5nb3YvbGlicmFyeS9wdWJsaWNhdGlvbnMvdGhlLXdvcmxkLWZhY3Rib29rLwpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy91cmxzL1RvZ28udHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy91cmxzL1RvZ28udHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNlZTI0MDcKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3VybHMvVG9nby50eHQKQEAgLTAsMCArMSw2IEBACisjCitESVZBKmh0dHA6Ly93d3cuY2lwb3RhdG8ub3JnL0RJVkEvZGF0YS9EYXRhU2VydmVyLmFzcD9BUkVBPVRHTyZUSEVNRT1fYWRtCisjCitDSUEqaHR0cHM6Ly93d3cuY2lhLmdvdi9jaWEvcHVibGljYXRpb25zL2ZhY3Rib29rL2dlb3MvdG8uaHRtbAorSVNPMzE2Nl8xKmh0dHBzOi8vd3d3LmNpYS5nb3YvbGlicmFyeS9wdWJsaWNhdGlvbnMvdGhlLXdvcmxkLWZhY3Rib29rLworSVNPMzE2Nl8yKmh0dHBzOi8vd3d3LmNpYS5nb3YvbGlicmFyeS9wdWJsaWNhdGlvbnMvdGhlLXdvcmxkLWZhY3Rib29rLwpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy91cmxzL1R1bmlzaWEudHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy91cmxzL1R1bmlzaWEudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgyNmIyMTAKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3VybHMvVHVuaXNpYS50eHQKQEAgLTAsMCArMSw2IEBACisjCitESVZBKmh0dHA6Ly93d3cuY2lwb3RhdG8ub3JnL0RJVkEvZGF0YS9EYXRhU2VydmVyLmFzcD9BUkVBPVRVTiZUSEVNRT1fYWRtCisjCitDSUEqaHR0cHM6Ly93d3cuY2lhLmdvdi9jaWEvcHVibGljYXRpb25zL2ZhY3Rib29rL2dlb3MvdHMuaHRtbAorSVNPMzE2Nl8xKmh0dHBzOi8vd3d3LmNpYS5nb3YvbGlicmFyeS9wdWJsaWNhdGlvbnMvdGhlLXdvcmxkLWZhY3Rib29rLworSVNPMzE2Nl8yKmh0dHBzOi8vd3d3LmNpYS5nb3YvbGlicmFyeS9wdWJsaWNhdGlvbnMvdGhlLXdvcmxkLWZhY3Rib29rLwpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy91cmxzL1R1cmtleS50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3VybHMvVHVya2V5LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zM2Y0Nzc5Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy91cmxzL1R1cmtleS50eHQKQEAgLTAsMCArMSw2IEBACisjCisjCitESVZBKmh0dHA6Ly93d3cuY2lwb3RhdG8ub3JnL0RJVkEvZGF0YS9EYXRhU2VydmVyLmFzcD9BUkVBPVRVUiZUSEVNRT1fYWRtCitDSUEqaHR0cHM6Ly93d3cuY2lhLmdvdi9jaWEvcHVibGljYXRpb25zL2ZhY3Rib29rL2dlb3MvdHUuaHRtbAorSVNPMzE2Nl8xKmh0dHBzOi8vd3d3LmNpYS5nb3YvbGlicmFyeS9wdWJsaWNhdGlvbnMvdGhlLXdvcmxkLWZhY3Rib29rLworSVNPMzE2Nl8yKmh0dHBzOi8vd3d3LmNpYS5nb3YvbGlicmFyeS9wdWJsaWNhdGlvbnMvdGhlLXdvcmxkLWZhY3Rib29rLwpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy91cmxzL1R1cmttZW5pc3Rhbi50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3VybHMvVHVya21lbmlzdGFuLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYTE3OTViCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy91cmxzL1R1cmttZW5pc3Rhbi50eHQKQEAgLTAsMCArMSw2IEBACisjCitESVZBKmh0dHA6Ly93d3cuY2lwb3RhdG8ub3JnL0RJVkEvZGF0YS9EYXRhU2VydmVyLmFzcD9BUkVBPVRLTSZUSEVNRT1fYWRtCisjCitDSUEqaHR0cHM6Ly93d3cuY2lhLmdvdi9jaWEvcHVibGljYXRpb25zL2ZhY3Rib29rL2dlb3MvdHguaHRtbAorSVNPMzE2Nl8xKmh0dHBzOi8vd3d3LmNpYS5nb3YvbGlicmFyeS9wdWJsaWNhdGlvbnMvdGhlLXdvcmxkLWZhY3Rib29rLworSVNPMzE2Nl8yKmh0dHBzOi8vd3d3LmNpYS5nb3YvbGlicmFyeS9wdWJsaWNhdGlvbnMvdGhlLXdvcmxkLWZhY3Rib29rLwpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy91cmxzL1VOSVRFRCBTVEFURVMudHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy91cmxzL1VOSVRFRCBTVEFURVMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgwOWRiOGIKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3VybHMvVU5JVEVEIFNUQVRFUy50eHQKQEAgLTAsMCArMSw1IEBACitVU0NFTlNVU0FSRUEqaHR0cDovL3d3dy5jZW5zdXMuZ292L3BvcHVsYXRpb24vd3d3L2NlbnN1c2RhdGEvZGVuc2l0eS5odG1sCitVU0NFTlNVU1BPUCpodHRwOi8vd3d3LmNlbnN1cy5nb3YvcG9wdWxhdGlvbi9jZW4yMDAwL3BoYy10NC90YWIwMS54bHMKK1VTQ0VOU1VTQk9VTkRTKmh0dHA6Ly93d3cuY2Vuc3VzLmdvdi9nZW8vd3d3L2NvYi9jbzIwMDAuaHRtbAorSVNPMzE2Nl8xKmh0dHBzOi8vd3d3LmNpYS5nb3YvbGlicmFyeS9wdWJsaWNhdGlvbnMvdGhlLXdvcmxkLWZhY3Rib29rLworSVNPMzE2Nl8yKmh0dHBzOi8vd3d3LmNpYS5nb3YvbGlicmFyeS9wdWJsaWNhdGlvbnMvdGhlLXdvcmxkLWZhY3Rib29rLwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvdXJscy9VZ2FuZGEudHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy91cmxzL1VnYW5kYS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmMxMGIzMAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvdXJscy9VZ2FuZGEudHh0CkBAIC0wLDAgKzEsNyBAQAorIworIworIworRElWQSpodHRwOi8vd3d3LmNpcG90YXRvLm9yZy9ESVZBL2RhdGEvRGF0YVNlcnZlci5hc3A/QVJFQT1VR0EmVEhFTUU9X2FkbQorQ0lBKmh0dHBzOi8vd3d3LmNpYS5nb3YvY2lhL3B1YmxpY2F0aW9ucy9mYWN0Ym9vay9nZW9zL3VnLmh0bWwKK0lTTzMxNjZfMSpodHRwczovL3d3dy5jaWEuZ292L2xpYnJhcnkvcHVibGljYXRpb25zL3RoZS13b3JsZC1mYWN0Ym9vay8KK0lTTzMxNjZfMipodHRwczovL3d3dy5jaWEuZ292L2xpYnJhcnkvcHVibGljYXRpb25zL3RoZS13b3JsZC1mYWN0Ym9vay8KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvdXJscy9Vbml0ZWQgS2luZ2RvbS50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3VybHMvVW5pdGVkIEtpbmdkb20udHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUxNmZjNjUKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3VybHMvVW5pdGVkIEtpbmdkb20udHh0CkBAIC0wLDAgKzEsMiBAQAorVU5JVEVETkFUSU9OUypodHRwOi8vd3d3LmdyaWQudW5lcC5jaC9kYXRhL2RhdGEucGhwP2NhdGVnb3J5PWh1bWFuX3JlbGF0ZWQKK0lTTzMxNjZfMSpodHRwczovL3d3dy5jaWEuZ292L2xpYnJhcnkvcHVibGljYXRpb25zL3RoZS13b3JsZC1mYWN0Ym9vay8KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvdXJscy9Vbml0ZWRBcmFiRW1pcmF0ZXMudHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy91cmxzL1VuaXRlZEFyYWJFbWlyYXRlcy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWIyM2E1YwotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvdXJscy9Vbml0ZWRBcmFiRW1pcmF0ZXMudHh0CkBAIC0wLDAgKzEsNiBAQAorIworRElWQSpodHRwOi8vd3d3LmNpcG90YXRvLm9yZy9ESVZBL2RhdGEvRGF0YVNlcnZlci5hc3A/QVJFQT1BUkUmVEhFTUU9X2FkbQorIworQ0lBKmh0dHBzOi8vd3d3LmNpYS5nb3YvY2lhL3B1YmxpY2F0aW9ucy9mYWN0Ym9vay9nZW9zL3N5Lmh0bWwKK0lTTzMxNjZfMSpodHRwczovL3d3dy5jaWEuZ292L2xpYnJhcnkvcHVibGljYXRpb25zL3RoZS13b3JsZC1mYWN0Ym9vay8KK0lTTzMxNjZfMipodHRwczovL3d3dy5jaWEuZ292L2xpYnJhcnkvcHVibGljYXRpb25zL3RoZS13b3JsZC1mYWN0Ym9vay8KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvdXJscy9VcnVndWF5LnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvdXJscy9VcnVndWF5LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNDliMDc3Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy91cmxzL1VydWd1YXkudHh0CkBAIC0wLDAgKzEsNiBAQAorIworRElWQSpodHRwOi8vd3d3LmNpcG90YXRvLm9yZy9ESVZBL2RhdGEvRGF0YVNlcnZlci5hc3A/QVJFQT1VUlkmVEhFTUU9X2FkbQorIworQ0lBKmh0dHBzOi8vd3d3LmNpYS5nb3YvY2lhL3B1YmxpY2F0aW9ucy9mYWN0Ym9vay9nZW9zL3V5Lmh0bWwKK0lTTzMxNjZfMSpodHRwczovL3d3dy5jaWEuZ292L2xpYnJhcnkvcHVibGljYXRpb25zL3RoZS13b3JsZC1mYWN0Ym9vay8KK0lTTzMxNjZfMipodHRwczovL3d3dy5jaWEuZ292L2xpYnJhcnkvcHVibGljYXRpb25zL3RoZS13b3JsZC1mYWN0Ym9vay8KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvdXJscy9VemJla2lzdGFuLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvdXJscy9VemJla2lzdGFuLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMTMxN2VjCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy91cmxzL1V6YmVraXN0YW4udHh0CkBAIC0wLDAgKzEsNyBAQAorIworQ0lUWVBPUCpodHRwOi8vd3d3LmNpdHlwb3B1bGF0aW9uLmRlL1V6YmVraXN0YW4uaHRtbAorRElWQSpodHRwOi8vd3d3LmNpcG90YXRvLm9yZy9ESVZBL2RhdGEvRGF0YVNlcnZlci5hc3A/QVJFQT1VWkImVEhFTUU9X2FkbQorIworQ0lBKmh0dHBzOi8vd3d3LmNpYS5nb3YvY2lhL3B1YmxpY2F0aW9ucy9mYWN0Ym9vay9nZW9zL3V6Lmh0bWwKK0lTTzMxNjZfMSpodHRwczovL3d3dy5jaWEuZ292L2xpYnJhcnkvcHVibGljYXRpb25zL3RoZS13b3JsZC1mYWN0Ym9vay8KK0lTTzMxNjZfMipodHRwczovL3d3dy5jaWEuZ292L2xpYnJhcnkvcHVibGljYXRpb25zL3RoZS13b3JsZC1mYWN0Ym9vay8KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvdXJscy9WZW5lenVlbGEudHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy91cmxzL1ZlbmV6dWVsYS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjQzZGM0MQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvdXJscy9WZW5lenVlbGEudHh0CkBAIC0wLDAgKzEsNiBAQAorIworRElWQSpodHRwOi8vd3d3LmNpcG90YXRvLm9yZy9ESVZBL2RhdGEvRGF0YVNlcnZlci5hc3A/QVJFQT1WRU4mVEhFTUU9X2FkbQorIworQ0lBKmh0dHBzOi8vd3d3LmNpYS5nb3YvbGlicmFyeS9wdWJsaWNhdGlvbnMvdGhlLXdvcmxkLWZhY3Rib29rLworSVNPMzE2Nl8xKmh0dHBzOi8vd3d3LmNpYS5nb3YvbGlicmFyeS9wdWJsaWNhdGlvbnMvdGhlLXdvcmxkLWZhY3Rib29rLworSVNPMzE2Nl8yKmh0dHBzOi8vd3d3LmNpYS5nb3YvbGlicmFyeS9wdWJsaWNhdGlvbnMvdGhlLXdvcmxkLWZhY3Rib29rLwpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy91cmxzL1ZpZXRuYW0udHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy91cmxzL1ZpZXRuYW0udHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZmMGI1MGEKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3VybHMvVmlldG5hbS50eHQKQEAgLTAsMCArMSw2IEBACisjCitESVZBKmh0dHA6Ly93d3cuY2lwb3RhdG8ub3JnL0RJVkEvZGF0YS9EYXRhU2VydmVyLmFzcD9BUkVBPVZOTSZUSEVNRT1fYWRtCisjCitDSUEqaHR0cHM6Ly93d3cuY2lhLmdvdi9jaWEvcHVibGljYXRpb25zL2ZhY3Rib29rL2dlb3Mvdm0uaHRtbAorSVNPMzE2Nl8xKmh0dHBzOi8vd3d3LmNpYS5nb3YvbGlicmFyeS9wdWJsaWNhdGlvbnMvdGhlLXdvcmxkLWZhY3Rib29rLworSVNPMzE2Nl8yKmh0dHBzOi8vd3d3LmNpYS5nb3YvbGlicmFyeS9wdWJsaWNhdGlvbnMvdGhlLXdvcmxkLWZhY3Rib29rLwpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy91cmxzL1llbWVuLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvdXJscy9ZZW1lbi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGE1MDNlMAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvdXJscy9ZZW1lbi50eHQKQEAgLTAsMCArMSw2IEBACisjCitESVZBKmh0dHA6Ly93d3cuY2lwb3RhdG8ub3JnL0RJVkEvZGF0YS9EYXRhU2VydmVyLmFzcD9BUkVBPVlFTSZUSEVNRT1fYWRtCisjCitDSUEqaHR0cHM6Ly93d3cuY2lhLmdvdi9jaWEvcHVibGljYXRpb25zL2ZhY3Rib29rL2dlb3MveW0uaHRtbAorSVNPMzE2Nl8xKmh0dHBzOi8vd3d3LmNpYS5nb3YvbGlicmFyeS9wdWJsaWNhdGlvbnMvdGhlLXdvcmxkLWZhY3Rib29rLworSVNPMzE2Nl8yKmh0dHBzOi8vd3d3LmNpYS5nb3YvbGlicmFyeS9wdWJsaWNhdGlvbnMvdGhlLXdvcmxkLWZhY3Rib29rLwpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy91cmxzL1l1Z29zbGF2aWEudHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy91cmxzL1l1Z29zbGF2aWEudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMyNGMzMzcKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3VybHMvWXVnb3NsYXZpYS50eHQKQEAgLTAsMCArMSw0IEBACitVTklURUROQVRJT05TKmh0dHA6Ly93d3cuZ3JpZC51bmVwLmNoL2RhdGEvZGF0YS5waHA/Y2F0ZWdvcnk9aHVtYW5fcmVsYXRlZAorIworQ0lUWVBPUCpodHRwOi8vd3d3LmNpdHlwb3B1bGF0aW9uLmRlL0RldXRzY2hsYW5kLmh0bWwKK0lTTzMxNjZfMSpodHRwczovL3d3dy5jaWEuZ292L2xpYnJhcnkvcHVibGljYXRpb25zL3RoZS13b3JsZC1mYWN0Ym9vay8KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvdXJscy9aYWlyZS50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3VybHMvWmFpcmUudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg1NDM4YWUKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3VybHMvWmFpcmUudHh0CkBAIC0wLDAgKzEsNSBAQAorRElWQSpodHRwOi8vd3d3LmNpcG90YXRvLm9yZy9ESVZBL2RhdGEvRGF0YVNlcnZlci5hc3A/QVJFQT1aQVImVEhFTUU9X2FkbQorIworQ0lBKlVOS05PV04KK0lTTzMxNjZfMSpodHRwczovL3d3dy5jaWEuZ292L2xpYnJhcnkvcHVibGljYXRpb25zL3RoZS13b3JsZC1mYWN0Ym9vay8KK0lTTzMxNjZfMipodHRwczovL3d3dy5jaWEuZ292L2xpYnJhcnkvcHVibGljYXRpb25zL3RoZS13b3JsZC1mYWN0Ym9vay8KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvdXJscy9aYW1iaWEudHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy91cmxzL1phbWJpYS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzE5Y2I3YwotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvdXJscy9aYW1iaWEudHh0CkBAIC0wLDAgKzEsNyBAQAorIworQ0lUWVBPUCpodHRwOi8vd3d3LmNpdHlwb3B1bGF0aW9uLmRlL1phbWJpYS5odG1sCitESVZBKmh0dHA6Ly93d3cuY2lwb3RhdG8ub3JnL0RJVkEvZGF0YS9EYXRhU2VydmVyLmFzcD9BUkVBPVpNQiZUSEVNRT1fYWRtCisjCitDSUEqaHR0cHM6Ly93d3cuY2lhLmdvdi9jaWEvcHVibGljYXRpb25zL2ZhY3Rib29rL2dlb3MvemEuaHRtbAorSVNPMzE2Nl8xKmh0dHBzOi8vd3d3LmNpYS5nb3YvbGlicmFyeS9wdWJsaWNhdGlvbnMvdGhlLXdvcmxkLWZhY3Rib29rLworSVNPMzE2Nl8yKmh0dHBzOi8vd3d3LmNpYS5nb3YvbGlicmFyeS9wdWJsaWNhdGlvbnMvdGhlLXdvcmxkLWZhY3Rib29rLwpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy91cmxzL1ppbWJhYndlLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvdXJscy9aaW1iYWJ3ZS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTc3MGI1YwotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvdXJscy9aaW1iYWJ3ZS50eHQKQEAgLTAsMCArMSw1IEBACisjCitQT1AqaHR0cDovL3d3dy54aXN0Lm9yZy9jbnRyeS9iZWxpemUuYXNweAorQ0lBKmh0dHA6Ly93d3cuZ2VvY29tbS5jb20vZmFxL2NvcHlyaWdodC5odG1sCitJU08zMTY2XzEqaHR0cHM6Ly93d3cuY2lhLmdvdi9saWJyYXJ5L3B1YmxpY2F0aW9ucy90aGUtd29ybGQtZmFjdGJvb2svCitJU08zMTY2XzIqaHR0cHM6Ly93d3cuY2lhLmdvdi9saWJyYXJ5L3B1YmxpY2F0aW9ucy90aGUtd29ybGQtZmFjdGJvb2svCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9yZXNvdXJjZXMvdGVzdDIuS01MIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcmVzb3VyY2VzL3Rlc3QyLktNTApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4xMGFmMjdmCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcmVzb3VyY2VzL3Rlc3QyLktNTApAQCAtMCwwICsxLDM0ODYgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9Imlzby04ODU5LTEiPz4NCis8a21sIHhtbG5zPSJodHRwOi8vZWFydGguZ29vZ2xlLmNvbS9rbWwvMi4yIj4NCisgPCEtLSANCisgVGhpcyBrbWwgZmlsZSBpcyBmb3IgdGVzdGluZyBvbmx5DQorIGl0IGlzIHVzZWQgYnkgdGhlIEttbFJlYWRlci5qYXZhIHRvIGNyZWF0ZSBhIGNvbGxlY3Rpb24gb2YgZ21sUG9seWdvbnMgdGhhdCANCisgaW4gdHVybiBjYW4gYmUgdXNlZCB0byB0ZXN0DQorIHRoZSBTcGF0aWFsR21sRXhwb3J0ZXIuamF2YSBjbGFzcw0KKyAtLT4NCisNCis8RG9jdW1lbnQ+DQorICA8IS0tIEJlZ2luIFN0eWxlIERlZmluaXRpb25zIC0tPg0KKyAgPFN0eWxlIGlkPSJhcmVhMSI+DQorICAgIDxMaW5lU3R5bGU+DQorICAgICAgPGNvbG9yPkZGMDAwMDAwPC9jb2xvcj4NCisgICAgICA8d2lkdGg+MTwvd2lkdGg+DQorICAgIDwvTGluZVN0eWxlPg0KKyAgICA8UG9seVN0eWxlPg0KKyAgICAgIDxjb2xvcj5CRjAwMDAwMDwvY29sb3I+DQorICAgICAgPGZpbGw+MDwvZmlsbD4NCisgICAgICA8b3V0bGluZT4xPC9vdXRsaW5lPg0KKyAgICA8L1BvbHlTdHlsZT4NCisgIDwvU3R5bGU+DQorICA8Rm9sZGVyPg0KKyAgICA8bmFtZT5BcmVhIEZlYXR1cmVzPC9uYW1lPg0KKyAgICA8ZGVzY3JpcHRpb24+QXJlYSBGZWF0dXJlczwvZGVzY3JpcHRpb24+DQorICAgIDxQbGFjZW1hcms+DQorICAgICAgPGRlc2NyaXB0aW9uPjwhW0NEQVRBWyBVbmtub3duIEFyZWEgVHlwZTxCUj48QlI+PEI+RklQU19BRE1JTjwvQj4gPSBNWTxCUj48QlI+PEI+R01JX0FETUlOPC9CPiA9IE1ZUy1LTEw8QlI+PEJSPjxCPkFETUlOX05BTUU8L0I+ID0gS3VhbGEgTHVtcHVyPEJSPjxCUj48Qj5GSVBTX0NOVFJZPC9CPiA9IE1ZPEJSPjxCUj48Qj5HTUlfQ05UUlk8L0I+ID0gTVlTPEJSPjxCUj48Qj5DTlRSWV9OQU1FPC9CPiA9IE1hbGF5c2lhPEJSPjxCUj48Qj5SRUdJT048L0I+ID0gU291dGhlYXN0ZXJuIEFzaWE8QlI+PEJSPjxCPkNPTlRJTkVOVDwvQj4gPSBBc2lhPEJSPjxCUj48Qj5QT1BfQURNSU48L0I+ID0gMTE0NTA3NTxCUj48QlI+PEI+U1FLTV9BRE1JTjwvQj4gPSAyNTMuNTg3PEJSPjxCUj48Qj5TUU1JX0FETUlOPC9CPiA9IDk3LjkxMDxCUj48QlI+PEI+VFlQRV9FTkc8L0I+ID0gRmVkZXJhbCBUZXJyaXRvcnk8QlI+PEJSPjxCPlRZUEVfTE9DPC9CPiA9IDxCUj48QlI+PEI+Q09MT1JfTUFQPC9CPiA9IDExIF1dPjwvZGVzY3JpcHRpb24+DQorICAgICAgPHN0eWxlVXJsPiNhcmVhMTwvc3R5bGVVcmw+DQorICAgICAgPFBvbHlnb24+DQorICAgICAgICA8b3V0ZXJCb3VuZGFyeUlzPg0KKyAgICAgICAgICA8TGluZWFyUmluZz4NCisgICAgICAgICAgICA8Y29vcmRpbmF0ZXM+DQorICAgICAgICAgICAgICAxMDEuNjA1Nzk2ODE0MCwzLjA2MzI2MjkzOTUsMA0KKyAgICAgICAgICAgICAgMTAxLjcyMjk5OTU3MjgsMy4wNjMyNzEwNDU3LDANCisgICAgICAgICAgICAgIDEwMS43NDEyMDMzMDgxLDMuMTMxNTMyOTA3NSwwDQorICAgICAgICAgICAgICAxMDEuNzQxMzAyNDkwMiwzLjIyMzY5OTA5MjksMA0KKyAgICAgICAgICAgICAgMTAxLjYwNTc5NjgxNDAsMy4yMjM2ODkwNzkzLDANCisgICAgICAgICAgICAgIDEwMS42MDU3OTY4MTQwLDMuMDYzMjYyOTM5NSwwDQorICAgICAgICAgICAgPC9jb29yZGluYXRlcz4NCisgICAgICAgICAgPC9MaW5lYXJSaW5nPg0KKyAgICAgICAgPC9vdXRlckJvdW5kYXJ5SXM+DQorICAgICAgPC9Qb2x5Z29uPg0KKyAgICA8L1BsYWNlbWFyaz4NCisgICAgPFBsYWNlbWFyaz4NCisgICAgICA8ZGVzY3JpcHRpb24+PCFbQ0RBVEFbIFVua25vd24gQXJlYSBUeXBlPEJSPjxCUj48Qj5GSVBTX0FETUlOPC9CPiA9IE1ZMDE8QlI+PEJSPjxCPkdNSV9BRE1JTjwvQj4gPSBNWVMtSk9IPEJSPjxCUj48Qj5BRE1JTl9OQU1FPC9CPiA9IEpvaG9yPEJSPjxCUj48Qj5GSVBTX0NOVFJZPC9CPiA9IE1ZPEJSPjxCUj48Qj5HTUlfQ05UUlk8L0I+ID0gTVlTPEJSPjxCUj48Qj5DTlRSWV9OQU1FPC9CPiA9IE1hbGF5c2lhPEJSPjxCUj48Qj5SRUdJT048L0I+ID0gU291dGhlYXN0ZXJuIEFzaWE8QlI+PEJSPjxCPkNPTlRJTkVOVDwvQj4gPSBBc2lhPEJSPjxCUj48Qj5QT1BfQURNSU48L0I+ID0gMjMyODQzNDxCUj48QlI+PEI+U1FLTV9BRE1JTjwvQj4gPSAxOTM1NC45ODA8QlI+PEJSPjxCPlNRTUlfQURNSU48L0I+ID0gNzQ3Mi45NTg8QlI+PEJSPjxCPlRZUEVfRU5HPC9CPiA9IFN0YXRlPEJSPjxCUj48Qj5UWVBFX0xPQzwvQj4gPSBOZWdlcmk8QlI+PEJSPjxCPkNPTE9SX01BUDwvQj4gPSAxIF1dPjwvZGVzY3JpcHRpb24+DQorICAgICAgPHN0eWxlVXJsPiNhcmVhMTwvc3R5bGVVcmw+DQorICAgICAgPFBvbHlnb24+DQorICAgICAgICA8b3V0ZXJCb3VuZGFyeUlzPg0KKyAgICAgICAgICA8TGluZWFyUmluZz4NCisgICAgICAgICAgICA8Y29vcmRpbmF0ZXM+DQorICAgICAgICAgICAgICAxMDQuMTg3OTQyNTA0OSwyLjg2Nzc4NTkzMDYsMA0KKyAgICAgICAgICAgICAgMTA0LjE4Mzg1MzE0OTQsMi44Nzk0NDM2NDU1LDANCisgICAgICAgICAgICAgIDEwNC4xNzU3OTY1MDg4LDIuODkyMjIxOTI3NiwwDQorICAgICAgICAgICAgICAxMDQuMTcxOTEzMTQ3MCwyLjg5NDk5OTUwNDEsMA0KKyAgICAgICAgICAgICAgMTA0LjE2NjkyMzUyMjksMi44OTMwNTQ5NjIyLDANCisgICAgICAgICAgICAgIDEwNC4xNjMyOTk1NjA1LDIuODg5NzIxODcwNCwwDQorICAgICAgICAgICAgICAxMDQuMTIzMjkxMDE1NiwyLjc4MTY2NjI3ODgsMA0KKyAgICAgICAgICAgICAgMTA0LjEyNDk2OTQ4MjQsMi43Njk5OTk1MDQxLDANCisgICAgICAgICAgICAgIDEwNC4xMjk0MDk3OTAwLDIuNzUzODg4NjA3MCwwDQorICAgICAgICAgICAgICAxMDQuMTQxNjQ3MzM4OSwyLjczMDgzMjU3NjgsMA0KKyAgICAgICAgICAgICAgMTA0LjE1NTUzMjgzNjksMi43MTA1NTUwNzY2LDANCisgICAgICAgICAgICAgIDEwNC4xNjQ0MTM0NTIxLDIuNzA1Mjc3NDQyOSwwDQorICAgICAgICAgICAgICAxMDQuMTcxMDgxNTQzMCwyLjcwNTI3NzQ0MjksMA0KKyAgICAgICAgICAgICAgMTA0LjIxMTkwNjQzMzEsMi43MTEzODg1ODgwLDANCisgICAgICAgICAgICAgIDEwNC4yMTk5NzA3MDMxLDIuNzE3NDk5MjU2MSwwDQorICAgICAgICAgICAgICAxMDQuMjIxMzU5MjUyOSwyLjcyMjc3Njg4OTgsMA0KKyAgICAgICAgICAgICAgMTA0LjIyMTYyNjI4MTcsMi43Mjk3MjE1NDYyLDANCisgICAgICAgICAgICAgIDEwNC4yMTk3MDM2NzQzLDIuNzc0NDQ0MTAzMiwwDQorICAgICAgICAgICAgICAxMDQuMjE3MTkzNjAzNSwyLjc4NTU1NTM2MjcsMA0KKyAgICAgICAgICAgICAgMTA0LjIwNDE0NzMzODksMi44MjY2NjYzNTUxLDANCisgICAgICAgICAgICAgIDEwNC4xOTkxMjcxOTczLDIuODQxOTQzNzQwOCwwDQorICAgICAgICAgICAgICAxMDQuMTg5NDA3MzQ4NiwyLjg2NjM4ODMyMDksMA0KKyAgICAgICAgICAgICAgMTA0LjE4Nzk0MjUwNDksMi44Njc3ODU5MzA2LDANCisgICAgICAgICAgICA8L2Nvb3JkaW5hdGVzPg0KKyAgICAgICAgICA8L0xpbmVhclJpbmc+DQorICAgICAgICA8L291dGVyQm91bmRhcnlJcz4NCisgICAgICA8L1BvbHlnb24+DQorICAgIDwvUGxhY2VtYXJrPg0KKyAgICA8UGxhY2VtYXJrPg0KKyAgICAgIDxkZXNjcmlwdGlvbj48IVtDREFUQVsgVW5rbm93biBBcmVhIFR5cGU8QlI+PEJSPjxCPkZJUFNfQURNSU48L0I+ID0gTVkwMTxCUj48QlI+PEI+R01JX0FETUlOPC9CPiA9IE1ZUy1KT0g8QlI+PEJSPjxCPkFETUlOX05BTUU8L0I+ID0gSm9ob3I8QlI+PEJSPjxCPkZJUFNfQ05UUlk8L0I+ID0gTVk8QlI+PEJSPjxCPkdNSV9DTlRSWTwvQj4gPSBNWVM8QlI+PEJSPjxCPkNOVFJZX05BTUU8L0I+ID0gTWFsYXlzaWE8QlI+PEJSPjxCPlJFR0lPTjwvQj4gPSBTb3V0aGVhc3Rlcm4gQXNpYTxCUj48QlI+PEI+Q09OVElORU5UPC9CPiA9IEFzaWE8QlI+PEJSPjxCPlBPUF9BRE1JTjwvQj4gPSAyMzI4NDM0PEJSPjxCUj48Qj5TUUtNX0FETUlOPC9CPiA9IDE5MzU0Ljk4MDxCUj48QlI+PEI+U1FNSV9BRE1JTjwvQj4gPSA3NDcyLjk1ODxCUj48QlI+PEI+VFlQRV9FTkc8L0I+ID0gU3RhdGU8QlI+PEJSPjxCPlRZUEVfTE9DPC9CPiA9IE5lZ2VyaTxCUj48QlI+PEI+Q09MT1JfTUFQPC9CPiA9IDEgXV0+PC9kZXNjcmlwdGlvbj4NCisgICAgICA8c3R5bGVVcmw+I2FyZWExPC9zdHlsZVVybD4NCisgICAgICA8UG9seWdvbj4NCisgICAgICAgIDxvdXRlckJvdW5kYXJ5SXM+DQorICAgICAgICAgIDxMaW5lYXJSaW5nPg0KKyAgICAgICAgICAgIDxjb29yZGluYXRlcz4NCisgICAgICAgICAgICAgIDEwNC4xMjYyODE3MzgzLDIuMzEzODI1NjA3MywwDQorICAgICAgICAgICAgICAxMDQuMTI0Mzk3Mjc3OCwyLjMxNjExMDYxMTAsMA0KKyAgICAgICAgICAgICAgMTA0LjEyMDIzOTI1NzgsMi4zMTg4ODg2NjQyLDANCisgICAgICAgICAgICAgIDEwNC4xMTQ5NjczNDYyLDIuMzIwNTU1MjEwMSwwDQorICAgICAgICAgICAgICAxMDQuMTAzODUxMzE4NCwyLjMxODA1NTE1MjksMA0KKyAgICAgICAgICAgICAgMTA0LjA5Nzc0NzgwMjcsMi4zMTkxNjYxODM1LDANCisgICAgICAgICAgICAgIDEwNC4wOTQ3MDM2NzQzLDIuMzE0OTk5NTgwNCwwDQorICAgICAgICAgICAgICAxMDQuMDk1MjUyOTkwNywyLjMwODg4ODQzNTQsMA0KKyAgICAgICAgICAgICAgMTA0LjA5ODMxMjM3NzksMi4yOTgzMzMxNjgwLDANCisgICAgICAgICAgICAgIDEwNC4xMDEwNjY1ODk0LDIuMjk0MTY2NTY0OSwwDQorICAgICAgICAgICAgICAxMDQuMTE1Nzk4OTUwMiwyLjI4ODMzMjkzOTEsMA0KKyAgICAgICAgICAgICAgMTA0LjExOTk1Njk3MDIsMi4yODUyNzczNjY2LDANCisgICAgICAgICAgICAgIDEwNC4xMjY2MzI2OTA0LDIuMjc4MzMyNzEwMywwDQorICAgICAgICAgICAgICAxMDQuMTMxOTEyMjMxNCwyLjI3NjY2NjE2NDQsMA0KKyAgICAgICAgICAgICAgMTA0LjEzNjkxNzExNDMsMi4yNzg2MTA3MDYzLDANCisgICAgICAgICAgICAgIDEwNC4xNDEwODI3NjM3LDIuMjgxMzg4MjgyOCwwDQorICAgICAgICAgICAgICAxMDQuMTUwODAyNjEyMywyLjI4NDk5OTg0NzQsMA0KKyAgICAgICAgICAgICAgMTA0LjE1NDk2ODI2MTcsMi4yODc3Nzc0MjM5LDANCisgICAgICAgICAgICAgIDEwNC4xNTUyNDI5MTk5LDIuMjk0NDQ0MDg0MiwwDQorICAgICAgICAgICAgICAxMDQuMTUzMzEyNjgzMSwyLjI5OTQ0NDE5ODYsMA0KKyAgICAgICAgICAgICAgMTA0LjE0OTk3ODYzNzcsMi4zMDMwNTQ4MDk2LDANCisgICAgICAgICAgICAgIDEwNC4xNDYwODc2NDY1LDIuMzA1ODMyODYyOSwwDQorICAgICAgICAgICAgICAxMDQuMTM0NDA3MDQzNSwyLjMwODMzMjkyMDEsMA0KKyAgICAgICAgICAgICAgMTA0LjEyNjI4MTczODMsMi4zMTM4MjU2MDczLDANCisgICAgICAgICAgICA8L2Nvb3JkaW5hdGVzPg0KKyAgICAgICAgICA8L0xpbmVhclJpbmc+DQorICAgICAgICA8L291dGVyQm91bmRhcnlJcz4NCisgICAgICA8L1BvbHlnb24+DQorICAgIDwvUGxhY2VtYXJrPg0KKyAgICA8UGxhY2VtYXJrPg0KKyAgICAgIDxkZXNjcmlwdGlvbj48IVtDREFUQVsgVW5rbm93biBBcmVhIFR5cGU8QlI+PEJSPjxCPkZJUFNfQURNSU48L0I+ID0gTVkwMTxCUj48QlI+PEI+R01JX0FETUlOPC9CPiA9IE1ZUy1KT0g8QlI+PEJSPjxCPkFETUlOX05BTUU8L0I+ID0gSm9ob3I8QlI+PEJSPjxCPkZJUFNfQ05UUlk8L0I+ID0gTVk8QlI+PEJSPjxCPkdNSV9DTlRSWTwvQj4gPSBNWVM8QlI+PEJSPjxCPkNOVFJZX05BTUU8L0I+ID0gTWFsYXlzaWE8QlI+PEJSPjxCPlJFR0lPTjwvQj4gPSBTb3V0aGVhc3Rlcm4gQXNpYTxCUj48QlI+PEI+Q09OVElORU5UPC9CPiA9IEFzaWE8QlI+PEJSPjxCPlBPUF9BRE1JTjwvQj4gPSAyMzI4NDM0PEJSPjxCUj48Qj5TUUtNX0FETUlOPC9CPiA9IDE5MzU0Ljk4MDxCUj48QlI+PEI+U1FNSV9BRE1JTjwvQj4gPSA3NDcyLjk1ODxCUj48QlI+PEI+VFlQRV9FTkc8L0I+ID0gU3RhdGU8QlI+PEJSPjxCPlRZUEVfTE9DPC9CPiA9IE5lZ2VyaTxCUj48QlI+PEI+Q09MT1JfTUFQPC9CPiA9IDEgXV0+PC9kZXNjcmlwdGlvbj4NCisgICAgICA8c3R5bGVVcmw+I2FyZWExPC9zdHlsZVVybD4NCisgICAgICA8UG9seWdvbj4NCisgICAgICAgIDxvdXRlckJvdW5kYXJ5SXM+DQorICAgICAgICAgIDxMaW5lYXJSaW5nPg0KKyAgICAgICAgICAgIDxjb29yZGluYXRlcz4NCisgICAgICAgICAgICAgIDEwMi41OTkxNjY4NzAxLDIuNDIxNjkyMzcxNCwwDQorICAgICAgICAgICAgICAxMDIuNTUwMjQ3MTkyNCwyLjM5ODYxMDExNTEsMA0KKyAgICAgICAgICAgICAgMTAyLjU0NzQ3MDA5MjgsMi4zOTYzODgwNTM5LDANCisgICAgICAgICAgICAgIDEwMi41MjI0NzYxOTYzLDIuMzYzMzMyNzQ4NCwwDQorICAgICAgICAgICAgICAxMDIuNTE5Njk5MDk2NywyLjM1NzIyMTYwMzQsMA0KKyAgICAgICAgICAgICAgMTAyLjUxODg1OTg2MzMsMi4zNTM2MTA1MTU2LDANCisgICAgICAgICAgICAgIDEwMi40OTk5NzcxMTE4LDIuMjYwODMyNzg2NiwwDQorICAgICAgICAgICAgICAxMDIuNTIxNjM2OTYyOSwyLjE3NDcyMTI0MTAsMA0KKyAgICAgICAgICAgICAgMTAyLjUyNjY0MTg0NTcsMi4xMjMwNTQ1MDQ0LDANCisgICAgICAgICAgICAgIDEwMi40ODc1MTgzMTA1LDIuMDkwODg3NTQ2NSwwDQorICAgICAgICAgICAgICAxMDIuNDk1MjM5MjU3OCwyLjA4NjY2NTYzMDMsMA0KKyAgICAgICAgICAgICAgMTAyLjUxMjE5MTc3MjUsMi4wNzU4MzIzNjY5LDANCisgICAgICAgICAgICAgIDEwMi41NTMyOTg5NTAyLDIuMDQ4MDU0Njk1MSwwDQorICAgICAgICAgICAgICAxMDIuNjc2NjQzMzcxNiwxLjg4NTgzMjc4NjYsMA0KKyAgICAgICAgICAgICAgMTAyLjY4Njg5NzI3NzgsMS44Njg4ODgzNzgxLDANCisgICAgICAgICAgICAgIDEwMi42OTM1NzI5OTgwLDEuODYxOTQzOTYwMiwwDQorICAgICAgICAgICAgICAxMDIuNzA0OTcxMzEzNSwxLjg1Mjc3NzI0MjcsMA0KKyAgICAgICAgICAgICAgMTAyLjcxNDY5MTE2MjEsMS44NDgzMzI4ODE5LDANCisgICAgICAgICAgICAgIDEwMi43MjYwNjY1ODk0LDEuODQ1ODMyODI0NywwDQorICAgICAgICAgICAgICAxMDIuNzc5OTY4MjYxNywxLjg1MjQ5OTQ4NTAsMA0KKyAgICAgICAgICAgICAgMTAyLjgwNTUyNjczMzQsMS44NTM4ODg1MTE3LDANCisgICAgICAgICAgICAgIDEwMi44MTY5MzI2NzgyLDEuODUxNjY2MjEyMSwwDQorICAgICAgICAgICAgICAxMDIuODI3MTg2NTg0NSwxLjg0Nzc3NzM2NjYsMA0KKyAgICAgICAgICAgICAgMTAyLjgzNjA5MDA4NzksMS44NDI3NzcyNTIyLDANCisgICAgICAgICAgICAgIDEwMi44NTIxODgxMTA0LDEuODMxMzg4NDczNSwwDQorICAgICAgICAgICAgICAxMDMuMDExOTE3MTE0MywxLjcyNzc3NzI0MjcsMA0KKyAgICAgICAgICAgICAgMTAzLjE5MTM1Mjg0NDIsMS42MTQ3MjE3NzUxLDANCisgICAgICAgICAgICAgIDEwMy4yMTU4MTI2ODMxLDEuNjA0NDQ0MDI2OSwwDQorICAgICAgICAgICAgICAxMDMuMjQ1NTA2Mjg2NiwxLjU5MjQ5OTQ5NDYsMA0KKyAgICAgICAgICAgICAgMTAzLjI2MTM2Nzc5NzksMS41ODcyMjE4NjA5LDANCisgICAgICAgICAgICAgIDEwMy4yODc3NTAyNDQxLDEuNTc4ODg4NDE2MywwDQorICAgICAgICAgICAgICAxMDMuMzE2OTMyNjc4MiwxLjU2NTU1NTA5NTcsMA0KKyAgICAgICAgICAgICAgMTAzLjM0ODU4NzAzNjEsMS41NDg4ODg0NDQ5LDANCisgICAgICAgICAgICAgIDEwMy4zNzA3OTYyMDM2LDEuNTM2NjY2MzkzMywwDQorICAgICAgICAgICAgICAxMDMuMzc4MzAzNTI3OCwxLjUzMDI3NzQ5MDYsMA0KKyAgICAgICAgICAgICAgMTAzLjM4ODMxMzI5MzUsMS41MTk3MjE3NDY0LDANCisgICAgICAgICAgICAgIDEwMy4zOTY5MjY4Nzk5LDEuNTA3Nzc3NDUyNSwwDQorICAgICAgICAgICAgICAxMDMuNDAzODQ2NzQwNywxLjQ5NDQ0Mzg5MzQsMA0KKyAgICAgICAgICAgICAgMTAzLjQwNzc1Mjk5MDcsMS40ODQ3MjE2NjA2LDANCisgICAgICAgICAgICAgIDEwMy40MTc3Mzk4NjgyLDEuNDUzNjEwNjU4NiwwDQorICAgICAgICAgICAgICAxMDMuNDIxMzU2MjAxMiwxLjQzNjk0NDAwNzksMA0KKyAgICAgICAgICAgICAgMTAzLjQ0MDI0NjU4MjAsMS4zNzM4ODg0OTI2LDANCisgICAgICAgICAgICAgIDEwMy40NTI3NTg3ODkxLDEuMzMyMjIxNzQ2NCwwDQorICAgICAgICAgICAgICAxMDMuNDU2MzU5ODYzMywxLjMyMjc3NzI3MTMsMA0KKyAgICAgICAgICAgICAgMTAzLjQ2NDQxNjUwMzksMS4zMDk5OTk3MDQ0LDANCisgICAgICAgICAgICAgIDEwMy41MTIxMzgzNjY3LDEuMjY5NTI4MTUwNiwwDQorICAgICAgICAgICAgICAxMDMuNTc5OTcxMzEzNSwxLjM0NTU1NTA2NzEsMA0KKyAgICAgICAgICAgICAgMTAzLjY3MzI4NjQzODAsMS40MzY2NjYyNTAyLDANCisgICAgICAgICAgICAgIDEwMy42ODQxMjc4MDc2LDEuNDQ2NjY2MjQwNywwDQorICAgICAgICAgICAgICAxMDMuNjg4MjkzNDU3MCwxLjQ0OTQ0MzgxNzEsMA0KKyAgICAgICAgICAgICAgMTAzLjgxMTA4MDkzMjYsMS40NzQ5OTk2NjYyLDANCisgICAgICAgICAgICAgIDEwMy44MjMwMjg1NjQ1LDEuNDc2NjY2NDUwNSwwDQorICAgICAgICAgICAgICAxMDMuODI5Njk2NjU1MywxLjQ3NjY2NjQ1MDUsMA0KKyAgICAgICAgICAgICAgMTAzLjgzNTgwMDE3MDksMS40NzU1NTUxODE1LDANCisgICAgICAgICAgICAgIDEwMy44NDYwNzY5NjUzLDEuNDcxOTQ0MDkzNywwDQorICAgICAgICAgICAgICAxMDMuODY0NDEwNDAwNCwxLjQ2MjQ5OTYxODUsMA0KKyAgICAgICAgICAgICAgMTAzLjg4MDUyMzY4MTYsMS40NTA4MzMwODIyLDANCisgICAgICAgICAgICAgIDEwMy44OTg1OTAwODc5LDEuNDM0NzIxOTQ2NywwDQorICAgICAgICAgICAgICAxMDMuOTAzMzEyNjgzMSwxLjQzMjIyMTg4OTUsMA0KKyAgICAgICAgICAgICAgMTAzLjkwODU3Njk2NTMsMS40MzA4MzMxMDEzLDANCisgICAgICAgICAgICAgIDEwMy45NjUyNjMzNjY3LDEuNDE4MDU1Mjk1OSwwDQorICAgICAgICAgICAgICAxMDMuOTc2OTEzNDUyMSwxLjQxOTcyMTg0MTgsMA0KKyAgICAgICAgICAgICAgMTAzLjk4NjYzMzMwMDgsMS40MjM2MTA5MjU3LDANCisgICAgICAgICAgICAgIDEwMy45OTgwMTYzNTc0LDEuNDMyNzc3NDA0OCwwDQorICAgICAgICAgICAgICAxMDQuMDAzNTkzNDQ0OCwxLjQ0MDgzMzA5MTcsMA0KKyAgICAgICAgICAgICAgMTA0LjAwNTgxMzU5ODYsMS40NDU1NTUyMTAxLDANCisgICAgICAgICAgICAgIDEwNC4wMTA1Mjg1NjQ1LDEuNDYxOTQ0MTAzMiwwDQorICAgICAgICAgICAgICAxMDQuMDExMzY3Nzk3OSwxLjUzMTk0NDI3NDksMA0KKyAgICAgICAgICAgICAgMTA0LjAxMDgwMzIyMjcsMS41MzgwNTU0MTk5LDANCisgICAgICAgICAgICAgIDEwNC4wMDQ0MzI2NzgyLDEuNTUxOTQ0MjU1OCwwDQorICAgICAgICAgICAgICAxMDMuOTk1Nzk2MjAzNiwxLjU2Mzg4ODc4ODIsMA0KKyAgICAgICAgICAgICAgMTAzLjk4OTQxMDQwMDQsMS41NzExMTA5NjM4LDANCisgICAgICAgICAgICAgIDEwMy45ODUyMzcxMjE2LDEuNTczODg4Nzc4NywwDQorICAgICAgICAgICAgICAxMDMuOTc1MjUwMjQ0MSwxLjU4NDQ0NDI4NDQsMA0KKyAgICAgICAgICAgICAgMTAzLjk3MTkwODU2OTMsMS41ODgwNTUzNzIyLDANCisgICAgICAgICAgICAgIDEwMy45Njk0MjEzODY3LDEuNTkyMjIxOTc1MywwDQorICAgICAgICAgICAgICAxMDMuOTY3NDY4MjYxNywxLjU5NzIyMjA4OTgsMA0KKyAgICAgICAgICAgICAgMTAzLjk1MTA4MDMyMjMsMS42NDE2NjY0MTI0LDANCisgICAgICAgICAgICAgIDEwMy45NTM4NTc0MjE5LDEuNjQ1NTU1MjU3OCwwDQorICAgICAgICAgICAgICAxMDMuOTU5NDExNjIxMSwxLjY0Njk0NDI4NDQsMA0KKyAgICAgICAgICAgICAgMTAzLjk2OTcwMzY3NDMsMS42NDMwNTUyMDA2LDANCisgICAgICAgICAgICAgIDEwMy45NzM1ODcwMzYxLDEuNjQwMjc3NjI0MSwwDQorICAgICAgICAgICAgICAxMDMuOTgwMjYyNzU2MywxLjYzMzA1NTIxMDEsMA0KKyAgICAgICAgICAgICAgMTAzLjk4MzU4MTU0MzAsMS42Mjk0NDQxMjIzLDANCisgICAgICAgICAgICAgIDEwNC4wNzc1OTA5NDI0LDEuNTAzMzU5MzE3OCwwDQorICAgICAgICAgICAgICAxMDQuMDQ3NzM3MTIxNiwxLjQ2ODg4ODUyMTIsMA0KKyAgICAgICAgICAgICAgMTA0LjA5NzE5ODQ4NjMsMS4zNzY5NDQzMDM1LDANCisgICAgICAgICAgICAgIDEwNC4wOTk3MDA5Mjc3LDEuMzcyNDk5NzA0NCwwDQorICAgICAgICAgICAgICAxMDQuMTA2OTE4MzM1MCwxLjM2NjExMDgwMTcsMA0KKyAgICAgICAgICAgICAgMTA0LjExNTc5ODk1MDIsMS4zNjExMTA5MjU3LDANCisgICAgICAgICAgICAgIDEwNC4xNTI0NzM0NDk3LDEuMzQ1NTU1MzA1NSwwDQorICAgICAgICAgICAgICAxMDQuMTc0NjgyNjE3MiwxLjMzOTk5OTkxNDIsMA0KKyAgICAgICAgICAgICAgMTA0LjE4NzE3OTU2NTQsMS4zMzgzMzMxMjk5LDANCisgICAgICAgICAgICAgIDEwNC4yMDA4MTMyOTM1LDEuMzM3Nzc3NjE0NiwwDQorICAgICAgICAgICAgICAxMDQuMjExOTA2NDMzMSwxLjM0MDI3NzY3MTgsMA0KKyAgICAgICAgICAgICAgMTA0LjIxNjkxODk0NTMsMS4zNDIyMjE5NzUzLDANCisgICAgICAgICAgICAgIDEwNC4yNzEwODc2NDY1LDEuMzYzNjEwOTgyOSwwDQorICAgICAgICAgICAgICAxMDQuMjc1ODAyNjEyMywxLjM2NTU1NTI4NjQsMA0KKyAgICAgICAgICAgICAgMTA0LjI4MTY0NjcyODUsMS4zNzM2MTA5NzM0LDANCisgICAgICAgICAgICAgIDEwNC4yOTMyOTY4MTQwLDEuNDM3Nzc3NTE5MiwwDQorICAgICAgICAgICAgICAxMDQuMjUzNTkzNDQ0OCwxLjYzMzMzMzIwNjIsMA0KKyAgICAgICAgICAgICAgMTA0LjIyNTI1MDI0NDEsMS43MTMwNTUxMzM4LDANCisgICAgICAgICAgICAgIDEwNC4yMjEzNTkyNTI5LDEuNzIyNzc3MzY2NiwwDQorICAgICAgICAgICAgICAxMDQuMTg4MjkzNDU3MCwxLjgwNDk5OTgyODMsMA0KKyAgICAgICAgICAgICAgMTA0LjExNTc5ODk1MDIsMS45NjYxMTA3MDYzLDANCisgICAgICAgICAgICAgIDEwNC4wNTgyOTYyMDM2LDIuMDU5MTY1OTU0NiwwDQorICAgICAgICAgICAgICAxMDQuMDE5Njk5MDk2NywyLjEzNjY2NjI5NzksMA0KKyAgICAgICAgICAgICAgMTAzLjk3NzQ2Mjc2ODYsMi4yNDMwNTQ4NjY4LDANCisgICAgICAgICAgICAgIDEwMy44OTgzMjMwNTkxLDIuMzg1ODMyNzg2NiwwDQorICAgICAgICAgICAgICAxMDMuODQxNjM2NjU3NywyLjQ0NjY2NjI0MDcsMA0KKyAgICAgICAgICAgICAgMTAzLjgzMTA5MjgzNDUsMi40NjM2MTA2NDkxLDANCisgICAgICAgICAgICAgIDEwMy44MjkxNDczMzg5LDIuNDY4MzMyNzY3NSwwDQorICAgICAgICAgICAgICAxMDMuODI0OTgxNjg5NSwyLjQ4NDQ0NDE0MTQsMA0KKyAgICAgICAgICAgICAgMTAzLjgzMzMxMjk4ODMsMi41MTA4MzMyNjM0LDANCisgICAgICAgICAgICAgIDEwMy44MzQ0MTE2MjExLDIuNTIzODg4NTg4MCwwDQorICAgICAgICAgICAgICAxMDMuODI1ODEzMjkzNSwyLjU2Mjc3NzA0MjQsMA0KKyAgICAgICAgICAgICAgMTAzLjgyMDI1MTQ2NDgsMi41Nzc0OTk4NjY1LDANCisgICAgICAgICAgICAgIDEwMy44MTc0NjY3MzU4LDIuNTgxNjY2NDY5NiwwDQorICAgICAgICAgICAgICAxMDMuNzY1MjU4Nzg5MSwyLjYyNTgzMjU1NzcsMA0KKyAgICAgICAgICAgICAgMTAzLjcyNzc1MjY4NTUsMi42Mzk5OTk4NjY1LDANCisgICAgICAgICAgICAgIDEwMy42NTMzMTI2ODMxLDIuNjYwODMyODgxOSwwDQorICAgICAgICAgICAgICAxMDMuNjM3MDE2Mjk2NCwyLjY2NDA5MjU0MDcsMA0KKyAgICAgICAgICAgICAgMTAzLjYyNTMxMjgwNTIsMi42NDc0MzYxNDIwLDANCisgICAgICAgICAgICAgIDEwMy42MDg4NzE0NjAwLDIuNTc2NTkyOTIyMiwwDQorICAgICAgICAgICAgICAxMDMuNjAxOTEzNDUyMSwyLjUzMDI3NzI1MjIsMA0KKyAgICAgICAgICAgICAgMTAzLjYwMzU3NjY2MDIsMi41MjU1NTUxMzM4LDANCisgICAgICAgICAgICAgIDEwMy42MDc4MjYyMzI5LDIuNTIyOTk3ODU2MSwwDQorICAgICAgICAgICAgICAxMDMuNjEzNjE2OTQzNCwyLjUyMjA3MTgzODQsMA0KKyAgICAgICAgICAgICAgMTAzLjYyNDg0NzQxMjEsMi41MTg3MTQ5MDQ4LDANCisgICAgICAgICAgICAgIDEwMy42Mjk1MDEzNDI4LDIuNTExNTkyMzg4MiwwDQorICAgICAgICAgICAgICAxMDMuNjM0OTE4MjEyOSwyLjUwMTExOTYxMzYsMA0KKyAgICAgICAgICAgICAgMTAzLjYzNjUyMDM4NTcsMi40ODIwOTQ3NjQ3LDANCisgICAgICAgICAgICAgIDEwMy42MzQ0MDcwNDM1LDIuNDc2OTQzOTY5NywwDQorICAgICAgICAgICAgICAxMDMuNjIwMjE2MzY5NiwyLjQ1MDg4MTAwNDMsMA0KKyAgICAgICAgICAgICAgMTAzLjYxMjQ3MjUzNDIsMi40NDYzODgyNDQ2LDANCisgICAgICAgICAgICAgIDEwMy41ODM4NjIzMDQ3LDIuNDYyNDk5NjE4NSwwDQorICAgICAgICAgICAgICAxMDMuNTcyNzQ2Mjc2OSwyLjQ2ODg4ODI4MjgsMA0KKyAgICAgICAgICAgICAgMTAzLjU1MzAxNjY2MjYsMi40ODA4MzI1NzY4LDANCisgICAgICAgICAgICAgIDEwMy40NjY5MTg5NDUzLDIuNTMzNjEwMzQzOSwwDQorICAgICAgICAgICAgICAxMDMuMzc5NDA5NzkwMCwyLjU4NjExMDExNTEsMA0KKyAgICAgICAgICAgICAgMTAzLjM2NDQxMDQwMDQsMi41OTQxNjU4MDIwLDANCisgICAgICAgICAgICAgIDEwMy4zNTgzMDY4ODQ4LDIuNTk2Mzg3ODYzMiwwDQorICAgICAgICAgICAgICAxMDMuMzQ2MzU5MjUyOSwyLjU5NzQ5ODg5MzcsMA0KKyAgICAgICAgICAgICAgMTAzLjMzOTE0MTg0NTcsMi41OTYzODc4NjMyLDANCisgICAgICAgICAgICAgIDEwMy4zMzE5MTY4MDkxLDIuNTk0MTY1ODAyMCwwDQorICAgICAgICAgICAgICAxMDMuMjUzNTkzNDQ0OCwyLjU2NjExMDEzNDEsMA0KKyAgICAgICAgICAgICAgMTAzLjIyODMwMjAwMjAsMi41NTYxMDk5MDUyLDANCisgICAgICAgICAgICAgIDEwMy4xODgyOTM0NTcwLDIuNTM4MzMyNDYyMywwDQorICAgICAgICAgICAgICAxMDMuMTU0NjkzNjAzNSwyLjUyODYxMDIyOTUsMA0KKyAgICAgICAgICAgICAgMTAzLjE1MTY0MTg0NTcsMi41MjkxNjU3NDQ4LDANCisgICAgICAgICAgICAgIDEwMi45ODg1NzExNjcwLDIuNTk1ODMyMzQ3OSwwDQorICAgICAgICAgICAgICAxMDIuOTgwMjYyNzU2MywyLjYwMDI3Njk0NzAsMA0KKyAgICAgICAgICAgICAgMTAyLjk2MjE4ODcyMDcsMi42MTM4ODgyNjM3LDANCisgICAgICAgICAgICAgIDEwMi45NDg4NTI1MzkxLDIuNjI3MjIxMTA3NSwwDQorICAgICAgICAgICAgICAxMDIuOTMzNTc4NDkxMiwyLjY0Mjc3Njk2NjEsMA0KKyAgICAgICAgICAgICAgMTAyLjkxNDEzODc5MzksMi42NjcyMjE1NDYyLDANCisgICAgICAgICAgICAgIDEwMi45MDI3NjMzNjY3LDIuNjgzMzMyNDQzMiwwDQorICAgICAgICAgICAgICAxMDIuODkxNjQ3MzM4OSwyLjY5OTE2NTM0NDIsMA0KKyAgICAgICAgICAgICAgMTAyLjg0NDcwMzY3NDMsMi43NTkxNjU3NjM5LDANCisgICAgICAgICAgICAgIDEwMi44MDk5NjcwNDEwLDIuODAwMjc2NzU2MywwDQorICAgICAgICAgICAgICAxMDIuODAxOTEwNDAwNCwyLjgwNTU1NDM5MDAsMA0KKyAgICAgICAgICAgICAgMTAyLjc4OTQxMzQ1MjEsMi44MTExMTAwMTk3LDANCisgICAgICAgICAgICAgIDEwMi43NTIxOTcyNjU2LDIuODIzMzMyNzg2NiwwDQorICAgICAgICAgICAgICAxMDIuNzA0NDIxOTk3MSwyLjgzODk5MDIxMTUsMA0KKyAgICAgICAgICAgICAgMTAyLjY3NTc5NjUwODgsMi43NTI0OTkxMDM1LDANCisgICAgICAgICAgICAgIDEwMi42MzY5MTcxMTQzLDIuNjQ3MjIxNTY1MiwwDQorICAgICAgICAgICAgICAxMDIuNjMyNzM2MjA2MSwyLjYzMzg4ODI0NDYsMA0KKyAgICAgICAgICAgICAgMTAyLjYzMTkxMjIzMTQsMi42Mjk5OTkxNjA4LDANCisgICAgICAgICAgICAgIDEwMi42MjA3OTYyMDM2LDIuNTc3MjIxMzkzNiwwDQorICAgICAgICAgICAgICAxMDIuNjE4NTgzNjc5MiwyLjU2NjExMDEzNDEsMA0KKyAgICAgICAgICAgICAgMTAyLjYwMzMwMjAwMjAsMi40NTQ0NDM0NTQ3LDANCisgICAgICAgICAgICAgIDEwMi41OTkxNjY4NzAxLDIuNDIxNjkyMzcxNCwwDQorICAgICAgICAgICAgPC9jb29yZGluYXRlcz4NCisgICAgICAgICAgPC9MaW5lYXJSaW5nPg0KKyAgICAgICAgPC9vdXRlckJvdW5kYXJ5SXM+DQorICAgICAgPC9Qb2x5Z29uPg0KKyAgICA8L1BsYWNlbWFyaz4NCisgICAgPFBsYWNlbWFyaz4NCisgICAgICA8ZGVzY3JpcHRpb24+PCFbQ0RBVEFbIFVua25vd24gQXJlYSBUeXBlPEJSPjxCUj48Qj5GSVBTX0FETUlOPC9CPiA9IE1ZMDI8QlI+PEJSPjxCPkdNSV9BRE1JTjwvQj4gPSBNWVMtS0VEPEJSPjxCUj48Qj5BRE1JTl9OQU1FPC9CPiA9IEtlZGFoPEJSPjxCUj48Qj5GSVBTX0NOVFJZPC9CPiA9IE1ZPEJSPjxCUj48Qj5HTUlfQ05UUlk8L0I+ID0gTVlTPEJSPjxCUj48Qj5DTlRSWV9OQU1FPC9CPiA9IE1hbGF5c2lhPEJSPjxCUj48Qj5SRUdJT048L0I+ID0gU291dGhlYXN0ZXJuIEFzaWE8QlI+PEJSPjxCPkNPTlRJTkVOVDwvQj4gPSBBc2lhPEJSPjxCUj48Qj5QT1BfQURNSU48L0I+ID0gMTU2MTY0ODxCUj48QlI+PEI+U1FLTV9BRE1JTjwvQj4gPSA5MDMzLjgyNjxCUj48QlI+PEI+U1FNSV9BRE1JTjwvQj4gPSAzNDg3Ljk2MDxCUj48QlI+PEI+VFlQRV9FTkc8L0I+ID0gU3RhdGU8QlI+PEJSPjxCPlRZUEVfTE9DPC9CPiA9IE5lZ2VyaTxCUj48QlI+PEI+Q09MT1JfTUFQPC9CPiA9IDEgXV0+PC9kZXNjcmlwdGlvbj4NCisgICAgICA8c3R5bGVVcmw+I2FyZWExPC9zdHlsZVVybD4NCisgICAgICA8UG9seWdvbj4NCisgICAgICAgIDxvdXRlckJvdW5kYXJ5SXM+DQorICAgICAgICAgIDxMaW5lYXJSaW5nPg0KKyAgICAgICAgICAgIDxjb29yZGluYXRlcz4NCisgICAgICAgICAgICAgIDEwMC4xOTQ0MTIyMzE0LDYuMjU2MDAwNTE4OCwwDQorICAgICAgICAgICAgICAxMDAuMjEyNzUzMjk1OSw2LjI0NDQ0MjkzOTgsMA0KKyAgICAgICAgICAgICAgMTAwLjIzMzg1NjIwMTIsNi4yMzA4MzIwOTk5LDANCisgICAgICAgICAgICAgIDEwMC4yNDI3MzY4MTY0LDYuMjIxMTEwMzQzOSwwDQorICAgICAgICAgICAgICAxMDAuMjUwODA4NzE1OCw2LjIwODMzMzAxNTQsMA0KKyAgICAgICAgICAgICAgMTAwLjI4NjYzNjM1MjUsNi4xMzQ0NDQyMzY4LDANCisgICAgICAgICAgICAgIDEwMC4zMzc0Nzg2Mzc3LDYuMDI3Nzc2NzE4MSwwDQorICAgICAgICAgICAgICAxMDAuMzQ4MDIyNDYwOSw1Ljk5NzIyMDk5MzAsMA0KKyAgICAgICAgICAgICAgMTAwLjM1NTUyOTc4NTIsNS45NjM4ODgxNjgzLDANCisgICAgICAgICAgICAgIDEwMC4zNjM1ODY0MjU4LDUuOTE3NDk4NTg4NiwwDQorICAgICAgICAgICAgICAxMDAuMzY5NDIyOTEyNiw1Ljg3NTgzMTYwNDAsMA0KKyAgICAgICAgICAgICAgMTAwLjM3NTc5MzQ1NzAsNS44MjExMTA3MjU0LDANCisgICAgICAgICAgICAgIDEwMC4zNzQxMzAyNDkwLDUuNjgzMzMyNDQzMiwwDQorICAgICAgICAgICAgICAxMDAuMzY4NTgzNjc5Miw1LjY2MTk0MzQzNTcsMA0KKyAgICAgICAgICAgICAgMTAwLjM1MDI1MDI0NDEsNS42MDkxNjUxOTE3LDANCisgICAgICAgICAgICAgIDEwMC4zNDkxMzYzNTI1LDUuNTY5MTY2MTgzNSwwDQorICAgICAgICAgICAgICAxMDAuMzgwNzk4MzM5OCw1LjU3MDI3NzIxNDEsMA0KKyAgICAgICAgICAgICAgMTAwLjM5MzA5NjkyMzgsNS41Njg5MTQ0MTM1LDANCisgICAgICAgICAgICAgIDEwMC41MzA4MDc0OTUxLDUuNTQ3NDk4NzAzMCwwDQorICAgICAgICAgICAgICAxMDAuNTI5NDE4OTQ1Myw1LjU0NDQ0MzEzMDUsMA0KKyAgICAgICAgICAgICAgMTAwLjUyNjM2NzE4NzUsNS41MjkxNjYyMjE2LDANCisgICAgICAgICAgICAgIDEwMC41MjUyNTMyOTU5LDUuNTE2OTQzOTMxNiwwDQorICAgICAgICAgICAgICAxMDAuNTI0Njg4NzIwNyw1LjQ5NTI3NjQ1MTEsMA0KKyAgICAgICAgICAgICAgMTAwLjUyNDY4ODcyMDcsNS40NTYxMTAwMDA2LDANCisgICAgICAgICAgICAgIDEwMC41MzIyMDM2NzQzLDUuMzM0OTk5MDg0NSwwDQorICAgICAgICAgICAgICAxMDAuNTM2MDg3MDM2MSw1LjI5ODYwOTczMzYsMA0KKyAgICAgICAgICAgICAgMTAwLjU0MDI1MjY4NTUsNS4yNzU4MzIxNzYyLDANCisgICAgICAgICAgICAgIDEwMC41NDMyOTY4MTQwLDUuMjYwODMyNzg2NiwwDQorICAgICAgICAgICAgICAxMDAuNTQ2OTIwNzc2NCw1LjI0MTk0MzM1OTQsMA0KKyAgICAgICAgICAgICAgMTAwLjU1OTY5MjM4MjgsNS4xNDMwNTQ5NjIyLDANCisgICAgICAgICAgICAgIDEwMC41NTk2OTIzODI4LDUuMTM4NjEwODM5OCwwDQorICAgICAgICAgICAgICAxMDAuNTU4Mjk2MjAzNiw1LjEzNTI3Njc5NDQsMA0KKyAgICAgICAgICAgICAgMTAwLjU1MDI0NzE5MjQsNS4xMjk5OTkxNjA4LDANCisgICAgICAgICAgICAgIDEwMC41MzkxMzg3OTM5LDUuMTI3MjIxMTA3NSwwDQorICAgICAgICAgICAgICAxMDAuNTI2NjQxODQ1Nyw1LjEyNjk0MzU4ODMsMA0KKyAgICAgICAgICAgICAgMTAwLjUxODg1OTg2MzMsNS4xMjgzMzIxMzgxLDANCisgICAgICAgICAgICAgIDEwMC41MDM1NjI5MjcyLDUuMTM0MjAyMDAzNSwwDQorICAgICAgICAgICAgICAxMDAuNTA4NTkwNjk4Miw1LjEwODA1NDE2MTEsMA0KKyAgICAgICAgICAgICAgMTAwLjUxMTY0MjQ1NjEsNS4xMDIyMjE0ODkwLDANCisgICAgICAgICAgICAgIDEwMC41MTcxOTY2NTUzLDUuMDk4NjA5OTI0MywwDQorICAgICAgICAgICAgICAxMDAuNTQ1NTE2OTY3OCw1LjA4MjIyMTk4NDksMA0KKyAgICAgICAgICAgICAgMTAwLjU0ODU3NjM1NTAsNS4wODExMTA5NTQzLDANCisgICAgICAgICAgICAgIDEwMC41NTI3NDk2MzM4LDUuMDc5OTk5OTIzNywwDQorICAgICAgICAgICAgICAxMDAuNTU3MTg5OTQxNCw1LjA3OTk5OTkyMzcsMA0KKyAgICAgICAgICAgICAgMTAwLjU2ODAzODk0MDQsNS4wODIyMjE5ODQ5LDANCisgICAgICAgICAgICAgIDEwMC41NzM1OTMxMzk2LDUuMDg2Mzg3NjM0MywwDQorICAgICAgICAgICAgICAxMDAuNjAyNzUyNjg1NSw1LjExNTgzMjMyODgsMA0KKyAgICAgICAgICAgICAgMTAwLjY4MDgwMTM5MTYsNS4yMDAyNzczMjg1LDANCisgICAgICAgICAgICAgIDEwMC42OTE2NDI3NjEyLDUuMjE1ODMyNzEwMywwDQorICAgICAgICAgICAgICAxMDAuNzg3NzUwMjQ0MSw1LjMxOTk5OTY5NDgsMA0KKyAgICAgICAgICAgICAgMTAwLjc5MTkyMzUyMjksNS4zMTk5OTk2OTQ4LDANCisgICAgICAgICAgICAgIDEwMC44MjQ0MTcxMTQzLDUuMzI3Nzc2OTA4OSwwDQorICAgICAgICAgICAgICAxMDAuODMwMjYxMjMwNSw1LjMzMDgzMjQ4MTQsMA0KKyAgICAgICAgICAgICAgMTAwLjgzNTI1MDg1NDUsNS4zMzQ5OTkwODQ1LDANCisgICAgICAgICAgICAgIDEwMC44NTA3OTk1NjA1LDUuMzUxNjY1NDk2OCwwDQorICAgICAgICAgICAgICAxMDAuODU2MDc5MTAxNiw1LjM1OTE2NTE5MTcsMA0KKyAgICAgICAgICAgICAgMTAwLjkzNjA4MDkzMjYsNS41MTU4MzI5MDEwLDANCisgICAgICAgICAgICAgIDEwMC45NDUyMzYyMDYxLDUuNTQzMzMyMDk5OSwwDQorICAgICAgICAgICAgICAxMDAuOTg0NDEzMTQ3MCw1LjcxNjM4Nzc0ODcsMA0KKyAgICAgICAgICAgICAgMTAwLjk4NDk3MDA5MjgsNS43MjExMTAzNDM5LDANCisgICAgICAgICAgICAgIDEwMC45ODEzNTM3NTk4LDUuNzI2OTQzOTY5NywwDQorICAgICAgICAgICAgICAxMDAuOTc1Nzk5NTYwNSw1LjczMDU1NDU4MDcsMA0KKyAgICAgICAgICAgICAgMTAwLjk2OTQyMTM4NjcsNS43MzMzMzI2MzQwLDANCisgICAgICAgICAgICAgIDEwMC45NjcxOTM2MDM1LDUuNzM1NTU0Njk1MSwwDQorICAgICAgICAgICAgICAxMDAuOTU3NzQ4NDEzMSw1Ljc0ODg4ODAxNTcsMA0KKyAgICAgICAgICAgICAgMTAwLjk1MTYzNzI2ODEsNS43NjQ0NDQzNTEyLDANCisgICAgICAgICAgICAgIDEwMC45NTI0Njg4NzIxLDUuNzY4MDU0OTYyMiwwDQorICAgICAgICAgICAgICAxMDAuOTU4MDIzMDcxMyw1Ljc3MTY2NTU3MzEsMA0KKyAgICAgICAgICAgICAgMTAwLjk2MTYzOTQwNDMsNS43NzI3NzY2MDM3LDANCisgICAgICAgICAgICAgIDEwMC45OTQ2NTk0MjM4LDUuNzc5NjIzMDMxNiwwDQorICAgICAgICAgICAgICAxMDAuOTkwMjQ5NjMzOCw1Ljc4ODA1NDQ2NjIsMA0KKyAgICAgICAgICAgICAgMTAwLjk5MDUxNjY2MjYsNS43OTQ5OTkxMjI2LDANCisgICAgICAgICAgICAgIDEwMC45OTM1ODM2NzkyLDUuODA2MTA5NDI4NCwwDQorICAgICAgICAgICAgICAxMDEuMDM1Nzk3MTE5MSw1Ljg5NjExMDUzNDcsMA0KKyAgICAgICAgICAgICAgMTAxLjA0MjQ3MjgzOTQsNS45MDM2MTAyMjk1LDANCisgICAgICAgICAgICAgIDEwMS4wNTQ5NjIxNTgyLDUuOTExMzg4Mzk3MiwwDQorICAgICAgICAgICAgICAxMDEuMDY1NTIxMjQwMiw1LjkxNDcyMTQ4OTAsMA0KKyAgICAgICAgICAgICAgMTAxLjA3MjQ3OTI0ODAsNS45MTQ0NDM5Njk3LDANCisgICAgICAgICAgICAgIDEwMS4wODM1ODc2NDY1LDUuOTE2OTQzNTUwMSwwDQorICAgICAgICAgICAgICAxMDEuMDkzNTgyMTUzMyw1LjkyMDgzMjYzNDAsMA0KKyAgICAgICAgICAgICAgMTAxLjEwMTM1NjUwNjMsNS45MjY5NDM3NzkwLDANCisgICAgICAgICAgICAgIDEwMS4xMDQxNDEyMzU0LDUuOTMxMTEwMzgyMSwwDQorICAgICAgICAgICAgICAxMDEuMTE5NDIyOTEyNiw1Ljk4NDQ0MzY2NDYsMA0KKyAgICAgICAgICAgICAgMTAxLjEyMDIzOTI1NzgsNS45OTA1NTQ4MDk2LDANCisgICAgICAgICAgICAgIDEwMS4xMTc3MzY4MTY0LDYuMDAxNjY2MDY5MCwwDQorICAgICAgICAgICAgICAxMDEuMTA2MzUzNzU5OCw2LjA1MDI3Njc1NjMsMA0KKyAgICAgICAgICAgICAgMTAxLjA5OTEzNjM1MjUsNi4xMTg4ODc5MDEzLDANCisgICAgICAgICAgICAgIDEwMS4xMDk0MTMxNDcwLDYuMTc4NjA5ODQ4MCwwDQorICAgICAgICAgICAgICAxMDEuMTE0NDEwNDAwNCw2LjE4MDU1NDM5MDAsMA0KKyAgICAgICAgICAgICAgMTAxLjExODg1MDcwODAsNi4xODMzMzI0NDMyLDANCisgICAgICAgICAgICAgIDEwMS4xMjE2Mjc4MDc2LDYuMTg3MjIwNTczNCwwDQorICAgICAgICAgICAgICAxMDEuMTIxNjI3ODA3Niw2LjE5NDE2NTIyOTgsMA0KKyAgICAgICAgICAgICAgMTAxLjExNTUxNjY2MjYsNi4yNDg4ODgwMTU3LDANCisgICAgICAgICAgICAgIDEwMS4xMTEzNTg2NDI2LDYuMjUxNjY2MDY5MCwwDQorICAgICAgICAgICAgICAxMDEuMTA1Nzk2ODE0MCw2LjI1MzMzMzA5MTcsMA0KKyAgICAgICAgICAgICAgMTAxLjAwOTY5Njk2MDQsNi4yNjk0NDM1MTIwLDANCisgICAgICAgICAgICAgIDEwMC45NTU1NDM1MTgxLDYuMjQyNDk4Mzk3OCwwDQorICAgICAgICAgICAgICAxMDAuOTUxMzcwMjM5Myw2LjIzOTcyMTI5ODIsMA0KKyAgICAgICAgICAgICAgMTAwLjk0NTgwMDc4MTMsNi4yMzg2MTAyNjc2LDANCisgICAgICAgICAgICAgIDEwMC44NTc0Njc2NTE0LDYuMjM0NDQzNjY0NiwwDQorICAgICAgICAgICAgICAxMDAuODU0MTQxMjM1NCw2LjIzODA1NDI3NTUsMA0KKyAgICAgICAgICAgICAgMTAwLjg1MjE4ODExMDQsNi4yNDI3NzY4NzA3LDANCisgICAgICAgICAgICAgIDEwMC44NDkxMzYzNTI1LDYuMjYwMjc3NzQ4MSwwDQorICAgICAgICAgICAgICAxMDAuODQ2OTE2MTk4Nyw2LjI4NDk5ODg5MzcsMA0KKyAgICAgICAgICAgICAgMTAwLjg0Nzg2OTg3MzAsNi4yOTY5NjM2OTE3LDANCisgICAgICAgICAgICAgIDEwMC44NTQ2OTA1NTE4LDYuMzE5NDQzNzAyNywwDQorICAgICAgICAgICAgICAxMDAuODU0MTQxMjM1NCw2LjMyNTU1NDg0NzcsMA0KKyAgICAgICAgICAgICAgMTAwLjgzMzU4NzY0NjUsNi40MTk0NDMxMzA1LDANCisgICAgICAgICAgICAgIDEwMC44MjI3NDYyNzY5LDYuNDM2MTA5NTQyOCwwDQorICAgICAgICAgICAgICAxMDAuNzU0MTUwMzkwNiw2LjUwMTk0MzU4ODMsMA0KKyAgICAgICAgICAgICAgMTAwLjc0ODU4MDkzMjYsNi41MDM2MTA2MTEwLDANCisgICAgICAgICAgICAgIDEwMC43MTY5MTg5NDUzLDYuNDc5OTk5NTQyMiwwDQorICAgICAgICAgICAgICAxMDAuNjgxMzUwNzA4MCw2LjQ1MzMzMjkwMTAsMA0KKyAgICAgICAgICAgICAgMTAwLjY2NjY0MTIzNTQsNi40NDc0OTgzMjE1LDANCisgICAgICAgICAgICAgIDEwMC42NjEwODcwMzYxLDYuNDQ3NDk4MzIxNSwwDQorICAgICAgICAgICAgICAxMDAuNjU0OTY4MjYxNyw2LjQ0ODMzMTgzMjksMA0KKyAgICAgICAgICAgICAgMTAwLjY0Mzg1OTg2MzMsNi40NTEzODgzNTkxLDANCisgICAgICAgICAgICAgIDEwMC40MzY4OTcyNzc4LDYuNTE1NTU1MzgxOCwwDQorICAgICAgICAgICAgICAxMDAuMzg3NDgxNjg5NSw2LjUzNjEwOTkyNDMsMA0KKyAgICAgICAgICAgICAgMTAwLjM3OTA0MzU3OTEsNi41NDA3NjU3NjIzLDANCisgICAgICAgICAgICAgIDEwMC4zNzYwNjgxMTUyLDYuNTA4MDU0NzMzMywwDQorICAgICAgICAgICAgICAxMDAuMzc1MjM2NTExMiw2LjUwMDAwMDAwMDAsMA0KKyAgICAgICAgICAgICAgMTAwLjM3MDIzOTI1NzgsNi40NzM2MDk5MjQzLDANCisgICAgICAgICAgICAgIDEwMC4zNjc0NjIxNTgyLDYuNDYyNDk5NjE4NSwwDQorICAgICAgICAgICAgICAxMDAuMzY1NTE2NjYyNiw2LjQ1NTU1NDk2MjIsMA0KKyAgICAgICAgICAgICAgMTAwLjM2MjQ3MjUzNDIsNi40NDk3MjAzODI3LDANCisgICAgICAgICAgICAgIDEwMC4zNTc0Njc2NTE0LDYuNDQ1Mjc2MjYwNCwwDQorICAgICAgICAgICAgICAxMDAuMzQ4ODYxNjk0Myw2LjQ0MDgzMjEzODEsMA0KKyAgICAgICAgICAgICAgMTAwLjMzNDcwMTUzODEsNi40MzE5NDI5Mzk4LDANCisgICAgICAgICAgICAgIDEwMC4zMjQ2OTE3NzI1LDYuNDIzNjA5NzMzNiwwDQorICAgICAgICAgICAgICAxMDAuMjk0MTI4NDE4MCw2LjM5MDgzMjkwMTAsMA0KKyAgICAgICAgICAgICAgMTAwLjIxMTkwNjQzMzEsNi4yOTY2NjYxNDUzLDANCisgICAgICAgICAgICAgIDEwMC4xOTQ0MTIyMzE0LDYuMjU2MDAwNTE4OCwwDQorICAgICAgICAgICAgPC9jb29yZGluYXRlcz4NCisgICAgICAgICAgPC9MaW5lYXJSaW5nPg0KKyAgICAgICAgPC9vdXRlckJvdW5kYXJ5SXM+DQorICAgICAgPC9Qb2x5Z29uPg0KKyAgICA8L1BsYWNlbWFyaz4NCisgICAgPFBsYWNlbWFyaz4NCisgICAgICA8ZGVzY3JpcHRpb24+PCFbQ0RBVEFbIFVua25vd24gQXJlYSBUeXBlPEJSPjxCUj48Qj5GSVBTX0FETUlOPC9CPiA9IE1ZMDM8QlI+PEJSPjxCPkdNSV9BRE1JTjwvQj4gPSBNWVMtS0xOPEJSPjxCUj48Qj5BRE1JTl9OQU1FPC9CPiA9IEtlbGFudGFuPEJSPjxCUj48Qj5GSVBTX0NOVFJZPC9CPiA9IE1ZPEJSPjxCUj48Qj5HTUlfQ05UUlk8L0I+ID0gTVlTPEJSPjxCUj48Qj5DTlRSWV9OQU1FPC9CPiA9IE1hbGF5c2lhPEJSPjxCUj48Qj5SRUdJT048L0I+ID0gU291dGhlYXN0ZXJuIEFzaWE8QlI+PEJSPjxCPkNPTlRJTkVOVDwvQj4gPSBBc2lhPEJSPjxCUj48Qj5QT1BfQURNSU48L0I+ID0gMTM0ODY0NjxCUj48QlI+PEI+U1FLTV9BRE1JTjwvQj4gPSAxNDk4Ni45MzA8QlI+PEJSPjxCPlNRTUlfQURNSU48L0I+ID0gNTc4Ni40NTQ8QlI+PEJSPjxCPlRZUEVfRU5HPC9CPiA9IFN0YXRlPEJSPjxCUj48Qj5UWVBFX0xPQzwvQj4gPSBOZWdlcmk8QlI+PEJSPjxCPkNPTE9SX01BUDwvQj4gPSA5IF1dPjwvZGVzY3JpcHRpb24+DQorICAgICAgPHN0eWxlVXJsPiNhcmVhMTwvc3R5bGVVcmw+DQorICAgICAgPFBvbHlnb24+DQorICAgICAgICA8b3V0ZXJCb3VuZGFyeUlzPg0KKyAgICAgICAgICA8TGluZWFyUmluZz4NCisgICAgICAgICAgICA8Y29vcmRpbmF0ZXM+DQorICAgICAgICAgICAgICAxMDEuNjk5NTQ2ODE0MCw1Ljc2MDk3MTA2OTMsMA0KKyAgICAgICAgICAgICAgMTAxLjY5ODAxMzMwNTcsNS43NTY5NDM3MDI3LDANCisgICAgICAgICAgICAgIDEwMS42NjQxMzg3OTM5LDUuNjY2MTEwMDM4OCwwDQorICAgICAgICAgICAgICAxMDEuNjY0NDEzNDUyMSw1LjYxOTQ0MjkzOTgsMA0KKyAgICAgICAgICAgICAgMTAxLjY2NjM2NjU3NzEsNS41Mjc0OTkxOTg5LDANCisgICAgICAgICAgICAgIDEwMS42NjY2NDEyMzU0LDUuNTIzMDU1MDc2NiwwDQorICAgICAgICAgICAgICAxMDEuNjY5OTY3NjUxNCw1LjUxNzQ5ODk3MDAsMA0KKyAgICAgICAgICAgICAgMTAxLjY3MjQ3MDA5MjgsNS41MTU4MzI5MDEwLDANCisgICAgICAgICAgICAgIDEwMS42OTE5MDk3OTAwLDUuNTE2MTEwNDIwMiwwDQorICAgICAgICAgICAgICAxMDEuNzIyMTk4NDg2Myw1LjUxNjM4NzkzOTUsMA0KKyAgICAgICAgICAgICAgMTAxLjc0Mzg1MDcwODAsNS41MTE5NDM4MTcxLDANCisgICAgICAgICAgICAgIDEwMS43NDY2Mjc4MDc2LDUuNTEwMjc3NzQ4MSwwDQorICAgICAgICAgICAgICAxMDEuNzQ4ODYzMjIwMiw1LjUwNzQ5OTY5NDgsMA0KKyAgICAgICAgICAgICAgMTAxLjc1MjQ3MTkyMzgsNS40OTcyMjA5OTMwLDANCisgICAgICAgICAgICAgIDEwMS43NTMzMTExNTcyLDUuNDgwNTU0NTgwNywwDQorICAgICAgICAgICAgICAxMDEuNzUyNzYxODQwOCw1LjM3MTk0MzQ3MzgsMA0KKyAgICAgICAgICAgICAgMTAxLjc1MTkyMjYwNzQsNS4zNjgzMzE5MDkyLDANCisgICAgICAgICAgICAgIDEwMS43NTA1MjY0MjgyLDUuMzY1Mjc2MzM2NywwDQorICAgICAgICAgICAgICAxMDEuNzQzNTgzNjc5Miw1LjM1ODYxMDE1MzIsMA0KKyAgICAgICAgICAgICAgMTAxLjcyNDQxMTAxMDcsNS4zNDY2NjYzMzYxLDANCisgICAgICAgICAgICAgIDEwMS42Nzg4NDgyNjY2LDUuMzMwMjc3NDQyOSwwDQorICAgICAgICAgICAgICAxMDEuNjMzNTkwNjk4Miw1LjM0Nzc3NzM2NjYsMA0KKyAgICAgICAgICAgICAgMTAxLjYyOTY3NjgxODgsNS4zNTI3NzY1Mjc0LDANCisgICAgICAgICAgICAgIDEwMS42MjUyMzY1MTEyLDUuMzYyMjIwNzY0MiwwDQorICAgICAgICAgICAgICAxMDEuNjIyMTkyMzgyOCw1LjM2MzYxMDI2NzYsMA0KKyAgICAgICAgICAgICAgMTAxLjYxODU4MzY3OTIsNS4zNjI3NzY3NTYzLDANCisgICAgICAgICAgICAgIDEwMS42MTU3OTg5NTAyLDUuMzYxMTA5NzMzNiwwDQorICAgICAgICAgICAgICAxMDEuNTM1NTIyNDYwOSw1LjI3ODA1NTE5MTAsMA0KKyAgICAgICAgICAgICAgMTAxLjQ5OTY4NzE5NDgsNS4xOTE5NDMxNjg2LDANCisgICAgICAgICAgICAgIDEwMS40OTYwNzg0OTEyLDUuMTgxOTQyOTM5OCwwDQorICAgICAgICAgICAgICAxMDEuNDY5NDIxMzg2Nyw1LjA2NjEwOTY1NzMsMA0KKyAgICAgICAgICAgICAgMTAxLjQ2NzQ2ODI2MTcsNS4wNTQ5OTgzOTc4LDANCisgICAgICAgICAgICAgIDEwMS40NTY5MTY4MDkxLDQuOTkyNDk4Mzk3OCwwDQorICAgICAgICAgICAgICAxMDEuNDU2MzU5ODYzMyw0Ljk0NTgzMjI1MjUsMA0KKyAgICAgICAgICAgICAgMTAxLjQ1NzQ3Mzc1NDksNC45NDI3NzY2ODAwLDANCisgICAgICAgICAgICAgIDEwMS40NjIxODg3MjA3LDQuOTEyMjIwOTU0OSwwDQorICAgICAgICAgICAgICAxMDEuNDYzMzAyNjEyMyw0Ljg5NTU1NDU0MjUsMA0KKyAgICAgICAgICAgICAgMTAxLjQ2MDUzMzE0MjEsNC44ODQ3MjE3NTYwLDANCisgICAgICAgICAgICAgIDEwMS40NTEzNzAyMzkzLDQuODU0MTY2MDMwOSwwDQorICAgICAgICAgICAgICAxMDEuNDQ5MTI3MTk3Myw0Ljg1MTk0MzAxNjEsMA0KKyAgICAgICAgICAgICAgMTAxLjM5MjQ3MTMxMzUsNC43NTk0NDQyMzY4LDANCisgICAgICAgICAgICAgIDEwMS4zNTg4NTYyMDEyLDQuNzAyNzc2OTA4OSwwDQorICAgICAgICAgICAgICAxMDEuMzY2MDczNjA4NCw0LjY0OTk5OTYxODUsMA0KKyAgICAgICAgICAgICAgMTAxLjM3ODg1Mjg0NDIsNC42MTI3NzY3NTYzLDANCisgICAgICAgICAgICAgIDEwMS40ODc3NDcxOTI0LDQuNTkyNzc3MjUyMiwwDQorICAgICAgICAgICAgICAxMDEuNTg5NjkxMTYyMSw0LjU2MjQ5OTA0NjMsMA0KKyAgICAgICAgICAgICAgMTAxLjU5MjQ2ODI2MTcsNC41NjA1NTQ1MDQ0LDANCisgICAgICAgICAgICAgIDEwMS42MjgzMDM1Mjc4LDQuNTU4MDUzOTcwMywwDQorICAgICAgICAgICAgICAxMDEuNjUxMzY3MTg3NSw0LjU2MjIyMDU3MzQsMA0KKyAgICAgICAgICAgICAgMTAxLjY1Nzc1Mjk5MDcsNC41NjQ5OTg2MjY3LDANCisgICAgICAgICAgICAgIDEwMS43NTA1MjY0MjgyLDQuNjIwMjc2NDUxMSwwDQorICAgICAgICAgICAgICAxMDEuNzYzNjAzMjEwNCw0LjYyOTcyMDY4NzksMA0KKyAgICAgICAgICAgICAgMTAxLjc3MDUyMzA3MTMsNC42NDExMTA0MjAyLDANCisgICAgICAgICAgICAgIDEwMS43NzQxMzk0MDQzLDQuNjU0OTk4Nzc5MywwDQorICAgICAgICAgICAgICAxMDEuNzc1MjUzMjk1OSw0LjY2MzYxMDQ1ODQsMA0KKyAgICAgICAgICAgICAgMTAxLjc3ODMxMjY4MzEsNC43MDc0OTk1MDQxLDANCisgICAgICAgICAgICAgIDEwMS43NzY2NDE4NDU3LDQuNzMxOTQzMTMwNSwwDQorICAgICAgICAgICAgICAxMDEuODE4ODYyOTE1MCw0LjczMzYxMDE1MzIsMA0KKyAgICAgICAgICAgICAgMTAxLjg4NzQ4MTY4OTUsNC42NzUyNzY3NTYzLDANCisgICAgICAgICAgICAgIDEwMS44OTIxOTY2NTUzLDQuNjcwNTU0MTYxMSwwDQorICAgICAgICAgICAgICAxMDEuOTU1NTQzNTE4MSw0LjczNDcyMTE4MzgsMA0KKyAgICAgICAgICAgICAgMTAyLjEyNzQ1NjY2NTAsNC43MzU4MzIyMTQ0LDANCisgICAgICAgICAgICAgIDEwMi4xNzgwMTY2NjI2LDQuNjYzMDU0NDY2MiwwDQorICAgICAgICAgICAgICAxMDIuMjAxMzcwMjM5Myw0LjY0MTExMDQyMDIsMA0KKyAgICAgICAgICAgICAgMTAyLjIxMDI1MDg1NDUsNC42MzY2NjYyOTc5LDANCisgICAgICAgICAgICAgIDEwMi4yMjEwNzY5NjUzLDQuNjMzODg4MjQ0NiwwDQorICAgICAgICAgICAgICAxMDIuMzM0OTc2MTk2Myw0LjYzOTk5OTM4OTYsMA0KKyAgICAgICAgICAgICAgMTAyLjMzODU3NzI3MDUsNC42NDA1NTUzODE4LDANCisgICAgICAgICAgICAgIDEwMi4zNDM1ODIxNTMzLDQuNjQ0NDQzNTEyMCwwDQorICAgICAgICAgICAgICAxMDIuMzcyMTkyMzgyOCw0LjY4MzYwOTk2MjUsMA0KKyAgICAgICAgICAgICAgMTAyLjQ5ODAxNjM1NzQsNC42NzQxNjQ3NzIwLDANCisgICAgICAgICAgICAgIDEwMi41MDk2OTY5NjA0LDQuNjcyMjIwMjMwMSwwDQorICAgICAgICAgICAgICAxMDIuNjAxMzU2NTA2Myw0LjY5MTM4NjIyMjgsMA0KKyAgICAgICAgICAgICAgMTAyLjYwMzU3NjY2MDIsNC42OTM2MDkyMzc3LDANCisgICAgICAgICAgICAgIDEwMi42MDY2Mjg0MTgwLDQuNjk5NzE5NDI5MCwwDQorICAgICAgICAgICAgICAxMDIuNjA3NDY3NjUxNCw0LjcwMzMzMTk0NzMsMA0KKyAgICAgICAgICAgICAgMTAyLjYwNDE0MTIzNTQsNC43MjcyMjA1MzUzLDANCisgICAgICAgICAgICAgIDEwMi42NDM4NTk4NjMzLDQuNzY1Mjc1OTU1MiwwDQorICAgICAgICAgICAgICAxMDIuNjYwNTIyNDYwOSw0Ljc2ODMzMTUyNzcsMA0KKyAgICAgICAgICAgICAgMTAyLjY2MzI5OTU2MDUsNC43NzA4MzIwNjE4LDANCisgICAgICAgICAgICAgIDEwMi42NjYzNjY1NzcxLDQuNzc2MTA5Njk1NCwwDQorICAgICAgICAgICAgICAxMDIuNjY4MDI5Nzg1Miw0Ljc4NDQ0MjkwMTYsMA0KKyAgICAgICAgICAgICAgMTAyLjY2NjkyMzUyMjksNC43ODgwNTM1MTI2LDANCisgICAgICAgICAgICAgIDEwMi42NDgzMjMwNTkxLDQuODM3MjIwMTkyMCwwDQorICAgICAgICAgICAgICAxMDIuNjE5NDIyOTEyNiw0Ljg2Mzg4NjgzMzIsMA0KKyAgICAgICAgICAgICAgMTAyLjU3NTUzMTAwNTksNC44OTY5NDMwOTIzLDANCisgICAgICAgICAgICAgIDEwMi41NTA3OTY1MDg4LDQuOTA4MDUzMzk4MSwwDQorICAgICAgICAgICAgICAxMDIuNTQzMjk2ODE0MCw0LjkwOTcyMDQyMDgsMA0KKyAgICAgICAgICAgICAgMTAyLjUzOTY4ODExMDQsNC45MDg4ODY5MDk1LDANCisgICAgICAgICAgICAgIDEwMi41MzYwODcwMzYxLDQuOTAzNjA5Mjc1OCwwDQorICAgICAgICAgICAgICAxMDIuNTMzMzA5OTM2NSw0Ljg5NzQ5ODEzMDgsMA0KKyAgICAgICAgICAgICAgMTAyLjUzMDgwNzQ5NTEsNC44OTUyNzYwNjk2LDANCisgICAgICAgICAgICAgIDEwMi41MjY5MTY1MDM5LDQuODk1Mjc2MDY5NiwwDQorICAgICAgICAgICAgICAxMDIuNTE3NDcxMzEzNSw0Ljg5OTcyMDE5MjAsMA0KKyAgICAgICAgICAgICAgMTAyLjUxNDY4NjU4NDUsNC45MDE2NjQ3MzM5LDANCisgICAgICAgICAgICAgIDEwMi41MTEzNjc3OTc5LDQuOTA2OTQyMzY3NiwwDQorICAgICAgICAgICAgICAxMDIuNTEwNTI4NTY0NSw0LjkxMDU1MzkzMjIsMA0KKyAgICAgICAgICAgICAgMTAyLjUwMTY0Nzk0OTIsNS4wNzI0OTgzMjE1LDANCisgICAgICAgICAgICAgIDEwMi41MDE5MjI2MDc0LDUuMDc2NjY0OTI0NiwwDQorICAgICAgICAgICAgICAxMDIuNDI3NzQ5NjMzOCw1LjE3NDk5ODI4MzQsMA0KKyAgICAgICAgICAgICAgMTAyLjQyMDgwNjg4NDgsNS4zMTU1NTM2NjUyLDANCisgICAgICAgICAgICAgIDEwMi4zOTQ0MTY4MDkxLDUuNDE5OTk4MTY4OSwwDQorICAgICAgICAgICAgICAxMDIuNDA3NDcwNzAzMSw1LjU0ODMzMTI2MDcsMA0KKyAgICAgICAgICAgICAgMTAyLjQwODMwOTkzNjUsNS41NTY2NjQ0NjY5LDANCisgICAgICAgICAgICAgIDEwMi4zOTQxNDk3ODAzLDUuNjI2Mzg2NjQyNSwwDQorICAgICAgICAgICAgICAxMDIuMzkxOTM3MjU1OSw1LjYzMzA1MjgyNTksMA0KKyAgICAgICAgICAgICAgMTAyLjM4NTgxODQ4MTQsNS42ODc0OTgwOTI3LDANCisgICAgICAgICAgICAgIDEwMi4zODYzODMwNTY2LDUuNjk1NTUyODI1OSwwDQorICAgICAgICAgICAgICAxMDIuMzg4NjAzMjEwNCw1LjY5ODA1MzM2MDAsMA0KKyAgICAgICAgICAgICAgMTAyLjQzNjM3MDg0OTYsNS43NDQ3MjE0MTI3LDANCisgICAgICAgICAgICAgIDEwMi40NDgzMTg0ODE0LDUuNzU0NDQ0MTIyMywwDQorICAgICAgICAgICAgICAxMDIuNDU2MTAwNDYzOSw1Ljc2MTExMDMwNTgsMA0KKyAgICAgICAgICAgICAgMTAyLjQ5MDgwNjU3OTYsNS43OTM2MTA1NzI4LDANCisgICAgICAgICAgICAgIDEwMi41MDk5ODY4Nzc0LDUuODE0OTk4NjI2NywwDQorICAgICAgICAgICAgICAxMDIuNTEzODkzMTI3NCw1LjgxOTk5OTY5NDgsMA0KKyAgICAgICAgICAgICAgMTAyLjUzOTcyNjI1NzMsNS44NTMxNjc1MzM5LDANCisgICAgICAgICAgICAgIDEwMi41MDQ5ODk2MjQwLDUuODc4NjA5NjU3MywwDQorICAgICAgICAgICAgICAxMDIuNDk4MzIxNTMzMiw1Ljg4NTU1NTI2NzMsMA0KKyAgICAgICAgICAgICAgMTAyLjQ5MDI1NzI2MzIsNS44OTgwNTUwNzY2LDANCisgICAgICAgICAgICAgIDEwMi40ODU4MDkzMjYyLDUuOTA3MjIxNzk0MSwwDQorICAgICAgICAgICAgICAxMDIuNDMyNzQ2ODg3Miw2LjAxOTk5OTUwNDEsMA0KKyAgICAgICAgICAgICAgMTAyLjQxNTI2Nzk0NDMsNi4wNjM4ODc1OTYxLDANCisgICAgICAgICAgICAgIDEwMi40MDg1OTk4NTM1LDYuMDc3Nzc2OTA4OSwwDQorICAgICAgICAgICAgICAxMDIuMzg4MDQ2MjY0Niw2LjExMjIyMDc2NDIsMA0KKyAgICAgICAgICAgICAgMTAyLjM4Mjc1MTQ2NDgsNi4xMjA4MzI0NDMyLDANCisgICAgICAgICAgICAgIDEwMi4zNTg1OTY4MDE4LDYuMTUxNjY1Njg3NiwwDQorICAgICAgICAgICAgICAxMDIuMzQxNjU5NTQ1OSw2LjE2OTQ0MzEzMDUsMA0KKyAgICAgICAgICAgICAgMTAyLjMyNjEwMzIxMDQsNi4xODE2NjU0MjA1LDANCisgICAgICAgICAgICAgIDEwMi4zMTMwMjY0MjgyLDYuMTg5NDQyNjM0NiwwDQorICAgICAgICAgICAgICAxMDIuMjIxNjQ5MTY5OSw2LjIxNzQ5NzgyNTYsMA0KKyAgICAgICAgICAgICAgMTAyLjE4MzMxOTA5MTgsNi4yMTk5OTgzNTk3LDANCisgICAgICAgICAgICAgIDEwMi4xODc0NzcxMTE4LDYuMjE3MjIwMzA2NCwwDQorICAgICAgICAgICAgICAxMDIuMTkwODExMTU3Miw2LjIxMzYwOTY5NTQsMA0KKyAgICAgICAgICAgICAgMTAyLjE5MzU4ODI1NjgsNi4yMDk0NDMwOTIzLDANCisgICAgICAgICAgICAgIDEwMi4xOTU1MzM3NTI0LDYuMjA0NDQyOTc3OSwwDQorICAgICAgICAgICAgICAxMDIuMTg0MTQzMDY2NCw2LjE5NDk5Nzc4NzUsMA0KKyAgICAgICAgICAgICAgMTAyLjE3OTE1MzQ0MjQsNi4xOTMzMzA3NjQ4LDANCisgICAgICAgICAgICAgIDEwMi4xNzMwMjcwMzg2LDYuMTkyNzc1NzI2MywwDQorICAgICAgICAgICAgICAxMDIuMTY2NjU2NDk0MSw2LjE5MzYwOTIzNzcsMA0KKyAgICAgICAgICAgICAgMTAyLjEyMzAxNjM1NzQsNi4yMTgwNTM4MTc3LDANCisgICAgICAgICAgICAgIDEwMi4wOTUyMzAxMDI1LDYuMjM2MTM4MzQzOCwwDQorICAgICAgICAgICAgICAxMDIuMDkwNTMwMzk1NSw2LjE1NDE2NTI2NzksMA0KKyAgICAgICAgICAgICAgMTAyLjAxMTA5MzEzOTYsNi4wMzgzMzE5ODU1LDANCisgICAgICAgICAgICAgIDEwMS45ODkxNDMzNzE2LDYuMDE4ODg4NDczNSwwDQorICAgICAgICAgICAgICAxMDEuOTgxOTE4MzM1MCw2LjAxMjIyMTMzNjQsMA0KKyAgICAgICAgICAgICAgMTAxLjk3NTUxNzI3MjksNi4wMDQ3MjE2NDE1LDANCisgICAgICAgICAgICAgIDEwMS45NTY5MTY4MDkxLDUuOTgxNjY1NjExMywwDQorICAgICAgICAgICAgICAxMDEuOTQ4MzAzMjIyNyw1Ljk2OTQ0MzMyMTIsMA0KKyAgICAgICAgICAgICAgMTAxLjk0NjA5MDY5ODIsNS45NjQ3MjE2Nzk3LDANCisgICAgICAgICAgICAgIDEwMS45NDEzNjA0NzM2LDUuOTQ4MzMxODMyOSwwDQorICAgICAgICAgICAgICAxMDEuOTQwODAzNTI3OCw1LjkyNzQ5ODgxNzQsMA0KKyAgICAgICAgICAgICAgMTAxLjk0MjQ1OTEwNjQsNS45MDg4ODc4NjMyLDANCisgICAgICAgICAgICAgIDEwMS45NDQ5NjE1NDc5LDUuODk3Nzc3NTU3NCwwDQorICAgICAgICAgICAgICAxMDEuOTQ3MTg5MzMxMSw1Ljg3OTcyMDY4NzksMA0KKyAgICAgICAgICAgICAgMTAxLjk0NjkwNzA0MzUsNS44NzI3NzYwMzE1LDANCisgICAgICAgICAgICAgIDEwMS45NDM4NDc2NTYzLDUuODYxOTQzMjQ0OSwwDQorICAgICAgICAgICAgICAxMDEuOTM4MjkzNDU3MCw1Ljg1Mzg4NzU1ODAsMA0KKyAgICAgICAgICAgICAgMTAxLjgzMzg2MjMwNDcsNS43NDMzMzE5MDkyLDANCisgICAgICAgICAgICAgIDEwMS44MjkxNDczMzg5LDUuNzQxMzg3MzY3MiwwDQorICAgICAgICAgICAgICAxMDEuODI0MTQyNDU2MSw1LjczOTQ0MjgyNTMsMA0KKyAgICAgICAgICAgICAgMTAxLjgxNzE5OTcwNzAsNS43Mzk3MjEyOTgyLDANCisgICAgICAgICAgICAgIDEwMS44MTE2MzAyNDkwLDUuNzQxMTA5ODQ4MCwwDQorICAgICAgICAgICAgICAxMDEuODA2MDgzNjc5Miw1Ljc0Mjc3Njg3MDcsMA0KKyAgICAgICAgICAgICAgMTAxLjc5NjYzMDg1OTQsNS43NDcyMjA5OTMwLDANCisgICAgICAgICAgICAgIDEwMS43ODg1NjY1ODk0LDUuNzUyNzc3MDk5NiwwDQorICAgICAgICAgICAgICAxMDEuNzc5NjkzNjAzNSw1Ljc2NDcyMTg3MDQsMA0KKyAgICAgICAgICAgICAgMTAxLjc3NTI1MzI5NTksNS43NzM4ODg1ODgwLDANCisgICAgICAgICAgICAgIDEwMS43Njk5NzM3NTQ5LDUuNzgyNDk5MzEzNCwwDQorICAgICAgICAgICAgICAxMDEuNzYyNDgxNjg5NSw1Ljc4ODg4Nzk3NzYsMA0KKyAgICAgICAgICAgICAgMTAxLjc0OTEzMDI0OTAsNS43ODk3MjE0ODkwLDANCisgICAgICAgICAgICAgIDEwMS43NDM1ODM2NzkyLDUuNzg4NjEwNDU4NCwwDQorICAgICAgICAgICAgICAxMDEuNjk5NTQ2ODE0MCw1Ljc2MDk3MTA2OTMsMA0KKyAgICAgICAgICAgIDwvY29vcmRpbmF0ZXM+DQorICAgICAgICAgIDwvTGluZWFyUmluZz4NCisgICAgICAgIDwvb3V0ZXJCb3VuZGFyeUlzPg0KKyAgICAgIDwvUG9seWdvbj4NCisgICAgPC9QbGFjZW1hcms+DQorICAgIDxQbGFjZW1hcms+DQorICAgICAgPGRlc2NyaXB0aW9uPjwhW0NEQVRBWyBVbmtub3duIEFyZWEgVHlwZTxCUj48QlI+PEI+RklQU19BRE1JTjwvQj4gPSBNWTA0PEJSPjxCUj48Qj5HTUlfQURNSU48L0I+ID0gTVlTLU1FTDxCUj48QlI+PEI+QURNSU5fTkFNRTwvQj4gPSBNZWxha2E8QlI+PEJSPjxCPkZJUFNfQ05UUlk8L0I+ID0gTVk8QlI+PEJSPjxCPkdNSV9DTlRSWTwvQj4gPSBNWVM8QlI+PEJSPjxCPkNOVFJZX05BTUU8L0I+ID0gTWFsYXlzaWE8QlI+PEJSPjxCPlJFR0lPTjwvQj4gPSBTb3V0aGVhc3Rlcm4gQXNpYTxCUj48QlI+PEI+Q09OVElORU5UPC9CPiA9IEFzaWE8QlI+PEJSPjxCPlBPUF9BRE1JTjwvQj4gPSA2NDQ5NzY8QlI+PEJSPjxCPlNRS01fQURNSU48L0I+ID0gMTcxNC44NTI8QlI+PEJSPjxCPlNRTUlfQURNSU48L0I+ID0gNjYyLjEwNDxCUj48QlI+PEI+VFlQRV9FTkc8L0I+ID0gU3RhdGU8QlI+PEJSPjxCPlRZUEVfTE9DPC9CPiA9IE5lZ2VyaTxCUj48QlI+PEI+Q09MT1JfTUFQPC9CPiA9IDIgXV0+PC9kZXNjcmlwdGlvbj4NCisgICAgICA8c3R5bGVVcmw+I2FyZWExPC9zdHlsZVVybD4NCisgICAgICA8UG9seWdvbj4NCisgICAgICAgIDxvdXRlckJvdW5kYXJ5SXM+DQorICAgICAgICAgIDxMaW5lYXJSaW5nPg0KKyAgICAgICAgICAgIDxjb29yZGluYXRlcz4NCisgICAgICAgICAgICAgIDEwMS45ODYxNjAyNzgzLDIuMzkwMDM2MTA2MSwwDQorICAgICAgICAgICAgICAxMDIuMDEzMDMxMDA1OSwyLjM1NjExMDA5NjAsMA0KKyAgICAgICAgICAgICAgMTAyLjEwNDE0MTIzNTQsMi4yNjg2MTAwMDA2LDANCisgICAgICAgICAgICAgIDEwMi4xNjQ2ODgxMTA0LDIuMjIyNzc2NDEzMCwwDQorICAgICAgICAgICAgICAxMDIuMTczMDE5NDA5MiwyLjIxNzIyMTI2MDEsMA0KKyAgICAgICAgICAgICAgMTAyLjE4MjQ1Njk3MDIsMi4yMTE5NDM2MjY0LDANCisgICAgICAgICAgICAgIDEwMi4xOTY2MTcxMjY1LDIuMjA1NTU0NDg1MywwDQorICAgICAgICAgICAgICAxMDIuMjkyNzM5ODY4MiwyLjE2OTE2NTYxMTMsMA0KKyAgICAgICAgICAgICAgMTAyLjQzMzU3ODQ5MTIsMi4xMTUyNzY4MTM1LDANCisgICAgICAgICAgICAgIDEwMi40Njc0NjgyNjE3LDIuMTAwNTU0OTQzMSwwDQorICAgICAgICAgICAgICAxMDIuNDg3NTE4MzEwNSwyLjA5MDg4NzU0NjUsMA0KKyAgICAgICAgICAgICAgMTAyLjUyNjY0MTg0NTcsMi4xMjMwNTQ1MDQ0LDANCisgICAgICAgICAgICAgIDEwMi41MjE2MzY5NjI5LDIuMTc0NzIxMjQxMCwwDQorICAgICAgICAgICAgICAxMDIuNDk5OTc3MTExOCwyLjI2MDgzMjc4NjYsMA0KKyAgICAgICAgICAgICAgMTAyLjUxODg1OTg2MzMsMi4zNTM2MTA1MTU2LDANCisgICAgICAgICAgICAgIDEwMi41MTk2OTkwOTY3LDIuMzU3MjIxNjAzNCwwDQorICAgICAgICAgICAgICAxMDIuNTIyNDc2MTk2MywyLjM2MzMzMjc0ODQsMA0KKyAgICAgICAgICAgICAgMTAyLjU0NzQ3MDA5MjgsMi4zOTYzODgwNTM5LDANCisgICAgICAgICAgICAgIDEwMi41NTAyNDcxOTI0LDIuMzk4NjEwMTE1MSwwDQorICAgICAgICAgICAgICAxMDIuNTk5MTY2ODcwMSwyLjQyMTY5MjM3MTQsMA0KKyAgICAgICAgICAgICAgMTAyLjU3NTgxMzI5MzUsMi40MjMzMzI2OTEyLDANCisgICAgICAgICAgICAgIDEwMi41NjA1MTYzNTc0LDIuNDI1NTU0NzUyMywwDQorICAgICAgICAgICAgICAxMDIuNDYxNjM5NDA0MywyLjQ1MTY2NTg3ODMsMA0KKyAgICAgICAgICAgICAgMTAyLjQ1MzU4Mjc2MzcsMi40NTY2NjU5OTI3LDANCisgICAgICAgICAgICAgIDEwMi40NTA4MTMyOTM1LDIuNDY3Nzc2Nzc1NCwwDQorICAgICAgICAgICAgICAxMDIuNDQ5NDAxODU1NSwyLjQ3MDU1NDM1MTgsMA0KKyAgICAgICAgICAgICAgMTAyLjQ0NzQ1NjM1OTksMi40NzI3NzY0MTMwLDANCisgICAgICAgICAgICAgIDEwMi40NDQ0MTIyMzE0LDIuNDc0MTY1NDM5NiwwDQorICAgICAgICAgICAgICAxMDIuMzc2OTA3MzQ4NiwyLjQ4OTk5OTI5NDMsMA0KKyAgICAgICAgICAgICAgMTAyLjM1OTk3MDA5MjgsMi40OTExMTAzMjQ5LDANCisgICAgICAgICAgICAgIDEwMi4zNDgzMTIzNzc5LDIuNDg5NDQzMzAyMiwwDQorICAgICAgICAgICAgICAxMDIuMzEzODU4MDMyMiwyLjQ3NTI3NjQ3MDIsMA0KKyAgICAgICAgICAgICAgMTAyLjI5Mzg1Mzc1OTgsMi40NjQ3MjEyMDI5LDANCisgICAgICAgICAgICAgIDEwMi4yODY2MzYzNTI1LDIuNDYyNDk5MTQxNywwDQorICAgICAgICAgICAgICAxMDIuMjc0MTM5NDA0MywyLjQ2MTk0MzYyNjQsMA0KKyAgICAgICAgICAgICAgMTAyLjIzNjkwNzk1OTAsMi40Njg4ODc4MDU5LDANCisgICAgICAgICAgICAgIDEwMi4xNDQ0MTY4MDkxLDIuNDYzNjEwMTcyMywwDQorICAgICAgICAgICAgICAxMDIuMTAxMDY2NTg5NCwyLjQ1NTI3Njk2NjEsMA0KKyAgICAgICAgICAgICAgMTAyLjA1MTkxMDQwMDQsMi40Mjc3NzY4MTM1LDANCisgICAgICAgICAgICAgIDEwMS45ODYxNjAyNzgzLDIuMzkwMDM2MTA2MSwwDQorICAgICAgICAgICAgPC9jb29yZGluYXRlcz4NCisgICAgICAgICAgPC9MaW5lYXJSaW5nPg0KKyAgICAgICAgPC9vdXRlckJvdW5kYXJ5SXM+DQorICAgICAgPC9Qb2x5Z29uPg0KKyAgICA8L1BsYWNlbWFyaz4NCisgICAgPFBsYWNlbWFyaz4NCisgICAgICA8ZGVzY3JpcHRpb24+PCFbQ0RBVEFbIFVua25vd24gQXJlYSBUeXBlPEJSPjxCUj48Qj5GSVBTX0FETUlOPC9CPiA9IE1ZMDU8QlI+PEJSPjxCPkdNSV9BRE1JTjwvQj4gPSBNWVMtTlNNPEJSPjxCUj48Qj5BRE1JTl9OQU1FPC9CPiA9IE5lZ2VyaSBTZW1iaWxhbjxCUj48QlI+PEI+RklQU19DTlRSWTwvQj4gPSBNWTxCUj48QlI+PEI+R01JX0NOVFJZPC9CPiA9IE1ZUzxCUj48QlI+PEI+Q05UUllfTkFNRTwvQj4gPSBNYWxheXNpYTxCUj48QlI+PEI+UkVHSU9OPC9CPiA9IFNvdXRoZWFzdGVybiBBc2lhPEJSPjxCUj48Qj5DT05USU5FTlQ8L0I+ID0gQXNpYTxCUj48QlI+PEI+UE9QX0FETUlOPC9CPiA9IDgwMDA1NzxCUj48QlI+PEI+U1FLTV9BRE1JTjwvQj4gPSA2NzI1LjM2ODxCUj48QlI+PEI+U1FNSV9BRE1JTjwvQj4gPSAyNTk2LjY2NTxCUj48QlI+PEI+VFlQRV9FTkc8L0I+ID0gU3RhdGU8QlI+PEJSPjxCPlRZUEVfTE9DPC9CPiA9IE5lZ2VyaTxCUj48QlI+PEI+Q09MT1JfTUFQPC9CPiA9IDUgXV0+PC9kZXNjcmlwdGlvbj4NCisgICAgICA8c3R5bGVVcmw+I2FyZWExPC9zdHlsZVVybD4NCisgICAgICA8UG9seWdvbj4NCisgICAgICAgIDxvdXRlckJvdW5kYXJ5SXM+DQorICAgICAgICAgIDxMaW5lYXJSaW5nPg0KKyAgICAgICAgICAgIDxjb29yZGluYXRlcz4NCisgICAgICAgICAgICAgIDEwMi41OTkxNjY4NzAxLDIuNDIxNjkyMzcxNCwwDQorICAgICAgICAgICAgICAxMDIuNjAzMzAyMDAyMCwyLjQ1NDQ0MzQ1NDcsMA0KKyAgICAgICAgICAgICAgMTAyLjYxODU4MzY3OTIsMi41NjYxMTAxMzQxLDANCisgICAgICAgICAgICAgIDEwMi42MjA3OTYyMDM2LDIuNTc3MjIxMzkzNiwwDQorICAgICAgICAgICAgICAxMDIuNjMxOTEyMjMxNCwyLjYyOTk5OTE2MDgsMA0KKyAgICAgICAgICAgICAgMTAyLjYzMjczNjIwNjEsMi42MzM4ODgyNDQ2LDANCisgICAgICAgICAgICAgIDEwMi42MzY5MTcxMTQzLDIuNjQ3MjIxNTY1MiwwDQorICAgICAgICAgICAgICAxMDIuNjc1Nzk2NTA4OCwyLjc1MjQ5OTEwMzUsMA0KKyAgICAgICAgICAgICAgMTAyLjcwNDQyMTk5NzEsMi44Mzg5OTAyMTE1LDANCisgICAgICAgICAgICAgIDEwMi43MDE0NjE3OTIwLDIuODc3MDA4NDM4MSwwDQorICAgICAgICAgICAgICAxMDIuNjk4MDEzMzA1NywyLjg5MDI3NjkwODksMA0KKyAgICAgICAgICAgICAgMTAyLjY5MzI5ODMzOTgsMi44OTQ5OTkwMjczLDANCisgICAgICAgICAgICAgIDEwMi42ODY4OTcyNzc4LDIuODk3NDk5MDg0NSwwDQorICAgICAgICAgICAgICAxMDIuNjc4MDE2NjYyNiwyLjg4OTE2NTg3ODMsMA0KKyAgICAgICAgICAgICAgMTAyLjY3Mzg1ODY0MjYsMi44ODg4ODc4ODIyLDANCisgICAgICAgICAgICAgIDEwMi42Njc3Mzk4NjgyLDIuODkxNjY1OTM1NSwwDQorICAgICAgICAgICAgICAxMDIuNTk4NTg3MDM2MSwyLjkzNDQ0MzQ3MzgsMA0KKyAgICAgICAgICAgICAgMTAyLjUzMzA0MjkwNzcsMi45NzY2NjU0OTY4LDANCisgICAgICAgICAgICAgIDEwMi41MTE5MTcxMTQzLDIuOTkwODMyMzI4OCwwDQorICAgICAgICAgICAgICAxMDIuNDk2OTE3NzI0NiwzLjAwMjQ5OTEwMzUsMA0KKyAgICAgICAgICAgICAgMTAyLjQ2NzQ2ODI2MTcsMy4wMjY5NDM2ODM2LDANCisgICAgICAgICAgICAgIDEwMi40NDk0MDE4NTU1LDMuMDQ5NDQzNzIxOCwwDQorICAgICAgICAgICAgICAxMDIuNDM2MzYzMjIwMiwzLjA2NzIyMTY0MTUsMA0KKyAgICAgICAgICAgICAgMTAyLjQzMzI5NjIwMzYsMy4wNzMwNTQ3OTA1LDANCisgICAgICAgICAgICAgIDEwMi40Mjk0MTI4NDE4LDMuMDc4MDU0OTA0OSwwDQorICAgICAgICAgICAgICAxMDIuNDA2OTIxMzg2NywzLjEwNDQ0MzU1MDEsMA0KKyAgICAgICAgICAgICAgMTAyLjM5NTI0ODQxMzEsMy4xMTUyNzY4MTM1LDANCisgICAgICAgICAgICAgIDEwMi4zOTIxOTY2NTUzLDMuMTE3MjIxMzU1NCwwDQorICAgICAgICAgICAgICAxMDIuMzY0OTY3MzQ2MiwzLjEyMTEwOTk2MjUsMA0KKyAgICAgICAgICAgICAgMTAyLjI2NjM3MjY4MDcsMy4xNDM2MTA0Nzc0LDANCisgICAgICAgICAgICAgIDEwMi4xMDIxODgxMTA0LDMuMTg1NTU0NTA0NCwwDQorICAgICAgICAgICAgICAxMDIuMDQxMDc2NjYwMiwzLjIyNjY2NTQ5NjgsMA0KKyAgICAgICAgICAgICAgMTAxLjk2Nzc0MjkxOTksMy4yNzMzMzI1OTU4LDANCisgICAgICAgICAgICAgIDEwMS45Mzk2ODIwMDY4LDMuMjg0NDQzODU1MywwDQorICAgICAgICAgICAgICAxMDEuOTM2MDgwOTMyNiwzLjI4NTI3Njg4OTgsMA0KKyAgICAgICAgICAgICAgMTAxLjkzMjczOTI1NzgsMy4yODQxNjU4NTkyLDANCisgICAgICAgICAgICAgIDEwMS45MTU3NzE0ODQ0LDMuMjYwNTEyMzUyMCwwDQorICAgICAgICAgICAgICAxMDEuOTE4MDI5Nzg1MiwzLjI2MDgzMjc4NjYsMA0KKyAgICAgICAgICAgICAgMTAxLjkyMTkxMzE0NzAsMy4yNjA1NTQ3OTA1LDANCisgICAgICAgICAgICAgIDEwMS45Mjc3NDk2MzM4LDMuMjU2OTQzNzAyNywwDQorICAgICAgICAgICAgICAxMDEuOTI5OTYyMTU4MiwzLjI1NDcyMTY0MTUsMA0KKyAgICAgICAgICAgICAgMTAxLjkzMzU3ODQ5MTIsMy4yNDkxNjU1MzUwLDANCisgICAgICAgICAgICAgIDEwMS45NDM1NzI5OTgwLDMuMjI3Nzc2NTI3NCwwDQorICAgICAgICAgICAgICAxMDEuOTQ1ODAwNzgxMywzLjIyMTM4Nzg2MzIsMA0KKyAgICAgICAgICAgICAgMTAxLjk2MTkwNjQzMzEsMy4xNDI3NzY5NjYxLDANCisgICAgICAgICAgICAgIDEwMS45NjE5MDY0MzMxLDMuMTI2MTEwMDc2OSwwDQorICAgICAgICAgICAgICAxMDEuOTU4MzEyOTg4MywzLjAyNTI3NjY2MDksMA0KKyAgICAgICAgICAgICAgMTAxLjg4NTgwMzIyMjcsMi44NzQ0NDM1MzEwLDANCisgICAgICAgICAgICAgIDEwMS44ODAyNDkwMjM0LDIuODY2NjY1ODQwMSwwDQorICAgICAgICAgICAgICAxMDEuODc1NTE4Nzk4OCwyLjg2MjQ5OTIzNzEsMA0KKyAgICAgICAgICAgICAgMTAxLjg3Mjc0MTY5OTIsMi44NjA1NTQ2OTUxLDANCisgICAgICAgICAgICAgIDEwMS44NjYzNjM1MjU0LDIuODU4MzMyNjM0MCwwDQorICAgICAgICAgICAgICAxMDEuODU5NDEzMTQ3MCwyLjg1NjY2NjA4ODEsMA0KKyAgICAgICAgICAgICAgMTAxLjg1NDY5MDU1MTgsMi44NTYzODgwOTIwLDANCisgICAgICAgICAgICAgIDEwMS44MzkxNDE4NDU3LDIuODU4NjEwMTUzMiwwDQorICAgICAgICAgICAgICAxMDEuODMyMTk5MDk2NywyLjg2MTExMDIxMDQsMA0KKyAgICAgICAgICAgICAgMTAxLjgxNzQ2NjczNTgsMi44NjM4ODgyNjM3LDANCisgICAgICAgICAgICAgIDEwMS43OTY5MjA3NzY0LDIuODY1ODMyMzI4OCwwDQorICAgICAgICAgICAgICAxMDEuNzc5NDE4OTQ1MywyLjg2NjM4Nzg0NDEsMA0KKyAgICAgICAgICAgICAgMTAxLjc3MDgxMjk4ODMsMi44NjU1NTQ4MDk2LDANCisgICAgICAgICAgICAgIDEwMS43NjAyNDYyNzY5LDIuODYzMzMyNzQ4NCwwDQorICAgICAgICAgICAgICAxMDEuNzU0NDMyNjc4MiwyLjg1OTk5OTE3OTgsMA0KKyAgICAgICAgICAgICAgMTAxLjc1MjQ3MTkyMzgsMi44NTY2NjYwODgxLDANCisgICAgICAgICAgICAgIDEwMS43NTI0NzE5MjM4LDIuODUyNzc3MDA0MiwwDQorICAgICAgICAgICAgICAxMDEuNzU1NTM4OTQwNCwyLjgzODA1NDY1NzAsMA0KKyAgICAgICAgICAgICAgMTAxLjc2MTkxNzExNDMsMi44MTMzMzI1NTc3LDANCisgICAgICAgICAgICAgIDEwMS43NzI3NTA4NTQ1LDIuNzc0OTk5MTQxNywwDQorICAgICAgICAgICAgICAxMDEuNzczNTkwMDg3OSwyLjc0MTk0MzM1OTQsMA0KKyAgICAgICAgICAgICAgMTAxLjc3MTA4NzY0NjUsMi43MzA4MzIwOTk5LDANCisgICAgICAgICAgICAgIDEwMS43NjMzMTMyOTM1LDIuNjk5NDQzMzQwMywwDQorICAgICAgICAgICAgICAxMDEuNzU0MTUwMzkwNiwyLjY3ODMzMjMyODgsMA0KKyAgICAgICAgICAgICAgMTAxLjc0ODMwNjI3NDQsMi42NzUyNzY3NTYzLDANCisgICAgICAgICAgICAgIDEwMS43NDQ2ODk5NDE0LDIuNjc0OTk5MjM3MSwwDQorICAgICAgICAgICAgICAxMDEuNzQxNjM4MTgzNiwyLjY3MzMzMjY5MTIsMA0KKyAgICAgICAgICAgICAgMTAxLjczOTQxMDQwMDQsMi42NzExMTAxNTMyLDANCisgICAgICAgICAgICAgIDEwMS43MzY2MzMzMDA4LDIuNjY0NzIxMDEyMSwwDQorICAgICAgICAgICAgICAxMDEuNzIzMjk3MTE5MSwyLjYyNTI3NjU2NTYsMA0KKyAgICAgICAgICAgICAgMTAxLjcyMjQ3MzE0NDUsMi42MjExMDk5NjI1LDANCisgICAgICAgICAgICAgIDEwMS43MjEzNTkyNTI5LDIuNjA0NzIxNTQ2MiwwDQorICAgICAgICAgICAgICAxMDEuNzIwNTIwMDE5NSwyLjU5MTQ3NjkxNzMsMA0KKyAgICAgICAgICAgICAgMTAxLjczNDk3MDA5MjgsMi41OTI0OTg3NzkzLDANCisgICAgICAgICAgICAgIDEwMS43NDg4NjMyMjAyLDIuNTkxOTQzMjY0MCwwDQorICAgICAgICAgICAgICAxMDEuNzYwNTI4NTY0NSwyLjU4OTcyMTIwMjksMA0KKyAgICAgICAgICAgICAgMTAxLjc3NDY4ODcyMDcsMi41ODMwNTQ1NDI1LDANCisgICAgICAgICAgICAgIDEwMS43ODU1MjI0NjA5LDIuNTczMzMyNzg2NiwwDQorICAgICAgICAgICAgICAxMDEuODQ5NzAwOTI3NywyLjQ3MjQ5ODg5MzcsMA0KKyAgICAgICAgICAgICAgMTAxLjkzMTM1MDcwODAsMi40MTUyNzY1Mjc0LDANCisgICAgICAgICAgICAgIDEwMS45ODYxNjAyNzgzLDIuMzkwMDM2MTA2MSwwDQorICAgICAgICAgICAgICAxMDIuMDUxOTEwNDAwNCwyLjQyNzc3NjgxMzUsMA0KKyAgICAgICAgICAgICAgMTAyLjEwMTA2NjU4OTQsMi40NTUyNzY5NjYxLDANCisgICAgICAgICAgICAgIDEwMi4xNDQ0MTY4MDkxLDIuNDYzNjEwMTcyMywwDQorICAgICAgICAgICAgICAxMDIuMjM2OTA3OTU5MCwyLjQ2ODg4NzgwNTksMA0KKyAgICAgICAgICAgICAgMTAyLjI3NDEzOTQwNDMsMi40NjE5NDM2MjY0LDANCisgICAgICAgICAgICAgIDEwMi4yODY2MzYzNTI1LDIuNDYyNDk5MTQxNywwDQorICAgICAgICAgICAgICAxMDIuMjkzODUzNzU5OCwyLjQ2NDcyMTIwMjksMA0KKyAgICAgICAgICAgICAgMTAyLjMxMzg1ODAzMjIsMi40NzUyNzY0NzAyLDANCisgICAgICAgICAgICAgIDEwMi4zNDgzMTIzNzc5LDIuNDg5NDQzMzAyMiwwDQorICAgICAgICAgICAgICAxMDIuMzU5OTcwMDkyOCwyLjQ5MTExMDMyNDksMA0KKyAgICAgICAgICAgICAgMTAyLjM3NjkwNzM0ODYsMi40ODk5OTkyOTQzLDANCisgICAgICAgICAgICAgIDEwMi40NDQ0MTIyMzE0LDIuNDc0MTY1NDM5NiwwDQorICAgICAgICAgICAgICAxMDIuNDQ3NDU2MzU5OSwyLjQ3Mjc3NjQxMzAsMA0KKyAgICAgICAgICAgICAgMTAyLjQ0OTQwMTg1NTUsMi40NzA1NTQzNTE4LDANCisgICAgICAgICAgICAgIDEwMi40NTA4MTMyOTM1LDIuNDY3Nzc2Nzc1NCwwDQorICAgICAgICAgICAgICAxMDIuNDUzNTgyNzYzNywyLjQ1NjY2NTk5MjcsMA0KKyAgICAgICAgICAgICAgMTAyLjQ2MTYzOTQwNDMsMi40NTE2NjU4NzgzLDANCisgICAgICAgICAgICAgIDEwMi41NjA1MTYzNTc0LDIuNDI1NTU0NzUyMywwDQorICAgICAgICAgICAgICAxMDIuNTc1ODEzMjkzNSwyLjQyMzMzMjY5MTIsMA0KKyAgICAgICAgICAgICAgMTAyLjU5OTE2Njg3MDEsMi40MjE2OTIzNzE0LDANCisgICAgICAgICAgICA8L2Nvb3JkaW5hdGVzPg0KKyAgICAgICAgICA8L0xpbmVhclJpbmc+DQorICAgICAgICA8L291dGVyQm91bmRhcnlJcz4NCisgICAgICA8L1BvbHlnb24+DQorICAgIDwvUGxhY2VtYXJrPg0KKyAgICA8UGxhY2VtYXJrPg0KKyAgICAgIDxkZXNjcmlwdGlvbj48IVtDREFUQVsgVW5rbm93biBBcmVhIFR5cGU8QlI+PEJSPjxCPkZJUFNfQURNSU48L0I+ID0gTVkwNjxCUj48QlI+PEI+R01JX0FETUlOPC9CPiA9IE1ZUy1QSE48QlI+PEJSPjxCPkFETUlOX05BTUU8L0I+ID0gUGFoYW5nPEJSPjxCUj48Qj5GSVBTX0NOVFJZPC9CPiA9IE1ZPEJSPjxCUj48Qj5HTUlfQ05UUlk8L0I+ID0gTVlTPEJSPjxCUj48Qj5DTlRSWV9OQU1FPC9CPiA9IE1hbGF5c2lhPEJSPjxCUj48Qj5SRUdJT048L0I+ID0gU291dGhlYXN0ZXJuIEFzaWE8QlI+PEJSPjxCPkNPTlRJTkVOVDwvQj4gPSBBc2lhPEJSPjxCUj48Qj5QT1BfQURNSU48L0I+ID0gMTE2NTkzMDxCUj48QlI+PEI+U1FLTV9BRE1JTjwvQj4gPSAzNjAwNy4wMjA8QlI+PEJSPjxCPlNRTUlfQURNSU48L0I+ID0gMTM5MDIuMzEwPEJSPjxCUj48Qj5UWVBFX0VORzwvQj4gPSBTdGF0ZTxCUj48QlI+PEI+VFlQRV9MT0M8L0I+ID0gTmVnZXJpPEJSPjxCUj48Qj5DT0xPUl9NQVA8L0I+ID0gNiBdXT48L2Rlc2NyaXB0aW9uPg0KKyAgICAgIDxzdHlsZVVybD4jYXJlYTE8L3N0eWxlVXJsPg0KKyAgICAgIDxQb2x5Z29uPg0KKyAgICAgICAgPG91dGVyQm91bmRhcnlJcz4NCisgICAgICAgICAgPExpbmVhclJpbmc+DQorICAgICAgICAgICAgPGNvb3JkaW5hdGVzPg0KKyAgICAgICAgICAgICAgMTAxLjkxNTc3MTQ4NDQsMy4yNjA1MTIzNTIwLDANCisgICAgICAgICAgICAgIDEwMS45MzI3MzkyNTc4LDMuMjg0MTY1ODU5MiwwDQorICAgICAgICAgICAgICAxMDEuOTM2MDgwOTMyNiwzLjI4NTI3Njg4OTgsMA0KKyAgICAgICAgICAgICAgMTAxLjkzOTY4MjAwNjgsMy4yODQ0NDM4NTUzLDANCisgICAgICAgICAgICAgIDEwMS45Njc3NDI5MTk5LDMuMjczMzMyNTk1OCwwDQorICAgICAgICAgICAgICAxMDIuMDQxMDc2NjYwMiwzLjIyNjY2NTQ5NjgsMA0KKyAgICAgICAgICAgICAgMTAyLjEwMjE4ODExMDQsMy4xODU1NTQ1MDQ0LDANCisgICAgICAgICAgICAgIDEwMi4yNjYzNzI2ODA3LDMuMTQzNjEwNDc3NCwwDQorICAgICAgICAgICAgICAxMDIuMzY0OTY3MzQ2MiwzLjEyMTEwOTk2MjUsMA0KKyAgICAgICAgICAgICAgMTAyLjM5MjE5NjY1NTMsMy4xMTcyMjEzNTU0LDANCisgICAgICAgICAgICAgIDEwMi4zOTUyNDg0MTMxLDMuMTE1Mjc2ODEzNSwwDQorICAgICAgICAgICAgICAxMDIuNDA2OTIxMzg2NywzLjEwNDQ0MzU1MDEsMA0KKyAgICAgICAgICAgICAgMTAyLjQyOTQxMjg0MTgsMy4wNzgwNTQ5MDQ5LDANCisgICAgICAgICAgICAgIDEwMi40MzMyOTYyMDM2LDMuMDczMDU0NzkwNSwwDQorICAgICAgICAgICAgICAxMDIuNDM2MzYzMjIwMiwzLjA2NzIyMTY0MTUsMA0KKyAgICAgICAgICAgICAgMTAyLjQ0OTQwMTg1NTUsMy4wNDk0NDM3MjE4LDANCisgICAgICAgICAgICAgIDEwMi40Njc0NjgyNjE3LDMuMDI2OTQzNjgzNiwwDQorICAgICAgICAgICAgICAxMDIuNDk2OTE3NzI0NiwzLjAwMjQ5OTEwMzUsMA0KKyAgICAgICAgICAgICAgMTAyLjUxMTkxNzExNDMsMi45OTA4MzIzMjg4LDANCisgICAgICAgICAgICAgIDEwMi41MzMwNDI5MDc3LDIuOTc2NjY1NDk2OCwwDQorICAgICAgICAgICAgICAxMDIuNTk4NTg3MDM2MSwyLjkzNDQ0MzQ3MzgsMA0KKyAgICAgICAgICAgICAgMTAyLjY2NzczOTg2ODIsMi44OTE2NjU5MzU1LDANCisgICAgICAgICAgICAgIDEwMi42NzM4NTg2NDI2LDIuODg4ODg3ODgyMiwwDQorICAgICAgICAgICAgICAxMDIuNjc4MDE2NjYyNiwyLjg4OTE2NTg3ODMsMA0KKyAgICAgICAgICAgICAgMTAyLjY4Njg5NzI3NzgsMi44OTc0OTkwODQ1LDANCisgICAgICAgICAgICAgIDEwMi42OTMyOTgzMzk4LDIuODk0OTk5MDI3MywwDQorICAgICAgICAgICAgICAxMDIuNjk4MDEzMzA1NywyLjg5MDI3NjkwODksMA0KKyAgICAgICAgICAgICAgMTAyLjcwMTQ2MTc5MjAsMi44NzcwMDg0MzgxLDANCisgICAgICAgICAgICAgIDEwMi43MDQ0MjE5OTcxLDIuODM4OTkwMjExNSwwDQorICAgICAgICAgICAgICAxMDIuNzUyMTk3MjY1NiwyLjgyMzMzMjc4NjYsMA0KKyAgICAgICAgICAgICAgMTAyLjc4OTQxMzQ1MjEsMi44MTExMTAwMTk3LDANCisgICAgICAgICAgICAgIDEwMi44MDE5MTA0MDA0LDIuODA1NTU0MzkwMCwwDQorICAgICAgICAgICAgICAxMDIuODA5OTY3MDQxMCwyLjgwMDI3Njc1NjMsMA0KKyAgICAgICAgICAgICAgMTAyLjg0NDcwMzY3NDMsMi43NTkxNjU3NjM5LDANCisgICAgICAgICAgICAgIDEwMi44OTE2NDczMzg5LDIuNjk5MTY1MzQ0MiwwDQorICAgICAgICAgICAgICAxMDIuOTAyNzYzMzY2NywyLjY4MzMzMjQ0MzIsMA0KKyAgICAgICAgICAgICAgMTAyLjkxNDEzODc5MzksMi42NjcyMjE1NDYyLDANCisgICAgICAgICAgICAgIDEwMi45MzM1Nzg0OTEyLDIuNjQyNzc2OTY2MSwwDQorICAgICAgICAgICAgICAxMDIuOTQ4ODUyNTM5MSwyLjYyNzIyMTEwNzUsMA0KKyAgICAgICAgICAgICAgMTAyLjk2MjE4ODcyMDcsMi42MTM4ODgyNjM3LDANCisgICAgICAgICAgICAgIDEwMi45ODAyNjI3NTYzLDIuNjAwMjc2OTQ3MCwwDQorICAgICAgICAgICAgICAxMDIuOTg4NTcxMTY3MCwyLjU5NTgzMjM0NzksMA0KKyAgICAgICAgICAgICAgMTAzLjE1MTY0MTg0NTcsMi41MjkxNjU3NDQ4LDANCisgICAgICAgICAgICAgIDEwMy4xNTQ2OTM2MDM1LDIuNTI4NjEwMjI5NSwwDQorICAgICAgICAgICAgICAxMDMuMTg4MjkzNDU3MCwyLjUzODMzMjQ2MjMsMA0KKyAgICAgICAgICAgICAgMTAzLjIyODMwMjAwMjAsMi41NTYxMDk5MDUyLDANCisgICAgICAgICAgICAgIDEwMy4yNTM1OTM0NDQ4LDIuNTY2MTEwMTM0MSwwDQorICAgICAgICAgICAgICAxMDMuMzMxOTE2ODA5MSwyLjU5NDE2NTgwMjAsMA0KKyAgICAgICAgICAgICAgMTAzLjMzOTE0MTg0NTcsMi41OTYzODc4NjMyLDANCisgICAgICAgICAgICAgIDEwMy4zNDYzNTkyNTI5LDIuNTk3NDk4ODkzNywwDQorICAgICAgICAgICAgICAxMDMuMzU4MzA2ODg0OCwyLjU5NjM4Nzg2MzIsMA0KKyAgICAgICAgICAgICAgMTAzLjM2NDQxMDQwMDQsMi41OTQxNjU4MDIwLDANCisgICAgICAgICAgICAgIDEwMy4zNzk0MDk3OTAwLDIuNTg2MTEwMTE1MSwwDQorICAgICAgICAgICAgICAxMDMuNDY2OTE4OTQ1MywyLjUzMzYxMDM0MzksMA0KKyAgICAgICAgICAgICAgMTAzLjU1MzAxNjY2MjYsMi40ODA4MzI1NzY4LDANCisgICAgICAgICAgICAgIDEwMy41NzI3NDYyNzY5LDIuNDY4ODg4MjgyOCwwDQorICAgICAgICAgICAgICAxMDMuNTgzODYyMzA0NywyLjQ2MjQ5OTYxODUsMA0KKyAgICAgICAgICAgICAgMTAzLjYxMjQ3MjUzNDIsMi40NDYzODgyNDQ2LDANCisgICAgICAgICAgICAgIDEwMy42MjAyMTYzNjk2LDIuNDUwODgxMDA0MywwDQorICAgICAgICAgICAgICAxMDMuNjM0NDA3MDQzNSwyLjQ3Njk0Mzk2OTcsMA0KKyAgICAgICAgICAgICAgMTAzLjYzNjUyMDM4NTcsMi40ODIwOTQ3NjQ3LDANCisgICAgICAgICAgICAgIDEwMy42MzQ5MTgyMTI5LDIuNTAxMTE5NjEzNiwwDQorICAgICAgICAgICAgICAxMDMuNjI5NTAxMzQyOCwyLjUxMTU5MjM4ODIsMA0KKyAgICAgICAgICAgICAgMTAzLjYyNDg0NzQxMjEsMi41MTg3MTQ5MDQ4LDANCisgICAgICAgICAgICAgIDEwMy42MTM2MTY5NDM0LDIuNTIyMDcxODM4NCwwDQorICAgICAgICAgICAgICAxMDMuNjA3ODI2MjMyOSwyLjUyMjk5Nzg1NjEsMA0KKyAgICAgICAgICAgICAgMTAzLjYwMzU3NjY2MDIsMi41MjU1NTUxMzM4LDANCisgICAgICAgICAgICAgIDEwMy42MDE5MTM0NTIxLDIuNTMwMjc3MjUyMiwwDQorICAgICAgICAgICAgICAxMDMuNjA4ODcxNDYwMCwyLjU3NjU5MjkyMjIsMA0KKyAgICAgICAgICAgICAgMTAzLjYyNTMxMjgwNTIsMi42NDc0MzYxNDIwLDANCisgICAgICAgICAgICAgIDEwMy42MzcwMTYyOTY0LDIuNjY0MDkyNTQwNywwDQorICAgICAgICAgICAgICAxMDMuNjE4ODUwNzA4MCwyLjY4MDU1NTM0MzYsMA0KKyAgICAgICAgICAgICAgMTAzLjU5MjE5MzYwMzUsMi43MDYxMTA0Nzc0LDANCisgICAgICAgICAgICAgIDEwMy41NjEzNjMyMjAyLDIuNzM3MjIxNzE3OCwwDQorICAgICAgICAgICAgICAxMDMuNTQ4MDE5NDA5MiwyLjc1MTM4ODU0OTgsMA0KKyAgICAgICAgICAgICAgMTAzLjUyODg0Njc0MDcsMi43NzMzMzMwNzI3LDANCisgICAgICAgICAgICAgIDEwMy41MTYwODI3NjM3LDIuNzg4MzMyOTM5MSwwDQorICAgICAgICAgICAgICAxMDMuNTAxNjQ3OTQ5MiwyLjgwODA1NDkyNDAsMA0KKyAgICAgICAgICAgICAgMTAzLjQ4MjQ2NzY1MTQsMi44MzY2NjYxMDcyLDANCisgICAgICAgICAgICAgIDEwMy40Njk0MjEzODY3LDIuODU3Nzc3NTk1NSwwDQorICAgICAgICAgICAgICAxMDMuNDUzNTgyNzYzNywyLjg4MzYxMDcyNTQsMA0KKyAgICAgICAgICAgICAgMTAzLjQ0OTEyNzE5NzMsMi44OTI3Nzc0NDI5LDANCisgICAgICAgICAgICAgIDEwMy40NDAyNDY1ODIwLDIuOTE3Nzc3NTM4MywwDQorICAgICAgICAgICAgICAxMDMuNDM1NzkxMDE1NiwyLjkzMzg4ODQzNTQsMA0KKyAgICAgICAgICAgICAgMTAzLjQzMzAyOTE3NDgsMi45NTExMTA4Mzk4LDANCisgICAgICAgICAgICAgIDEwMy40MzI0NTY5NzAyLDIuOTU3MjIxOTg0OSwwDQorICAgICAgICAgICAgICAxMDMuNDMyMTg5OTQxNCwyLjk3MDI3NzMwOTQsMA0KKyAgICAgICAgICAgICAgMTAzLjQzNDY5MjM4MjgsMy4wNTI3NzcyOTAzLDANCisgICAgICAgICAgICAgIDEwMy40NDM1NzI5OTgwLDMuMTIxMzg4NDM1NCwwDQorICAgICAgICAgICAgICAxMDMuNDQ3NDU2MzU5OSwzLjEzMTY2NjE4MzUsMA0KKyAgICAgICAgICAgICAgMTAzLjQ1MTM3MDIzOTMsMy4xNDg2MTA1OTE5LDANCisgICAgICAgICAgICAgIDEwMy40NTQxNDczMzg5LDMuMTc0MTY2MjAyNSwwDQorICAgICAgICAgICAgICAxMDMuNDU0Njk2NjU1MywzLjE4Nzc3NjU2NTYsMA0KKyAgICAgICAgICAgICAgMTAzLjQ1MTM3MDIzOTMsMy4yMTgzMzIyOTA2LDANCisgICAgICAgICAgICAgIDEwMy40NDQ0MTIyMzE0LDMuMjU4MzMyNzI5MywwDQorICAgICAgICAgICAgICAxMDMuNDM5NDA3MzQ4NiwzLjI4MDU1NTI0ODMsMA0KKyAgICAgICAgICAgICAgMTAzLjQzMjQ1Njk3MDIsMy4zMDEzODgyNjM3LDANCisgICAgICAgICAgICAgIDEwMy40Mjg4NDgyNjY2LDMuMzE4MDU1MTUyOSwwDQorICAgICAgICAgICAgICAxMDMuNDI3MTkyNjg4MCwzLjMyOTcyMTkyNzYsMA0KKyAgICAgICAgICAgICAgMTAzLjQyNTc5NjUwODgsMy4zNzE2NjU5NTQ2LDANCisgICAgICAgICAgICAgIDEwMy40MjYzNjEwODQwLDMuMzkyNDk5NDQ2OSwwDQorICAgICAgICAgICAgICAxMDMuNDM5NDA3MzQ4NiwzLjQzNTI3Njk4NTIsMA0KKyAgICAgICAgICAgICAgMTAzLjQ0Mzg0NzY1NjMsMy40NDQ5OTkyMTgwLDANCisgICAgICAgICAgICAgIDEwMy40NTc3NDg0MTMxLDMuNDcyNzc2ODg5OCwwDQorICAgICAgICAgICAgICAxMDMuNDcyNzQ3ODAyNywzLjQ5MjIyMTgzMjMsMA0KKyAgICAgICAgICAgICAgMTAzLjQ3NjM1NjUwNjMsMy40OTU1NTQ5MjQwLDANCisgICAgICAgICAgICAgIDEwMy40Nzg1NzY2NjAyLDMuNTAwMjc3NTE5MiwwDQorICAgICAgICAgICAgICAxMDMuNDc4MDI3MzQzOCwzLjUwNjY2NjY2MDMsMA0KKyAgICAgICAgICAgICAgMTAzLjQ2NDQxNjUwMzksMy41Mjk3MjE3MzY5LDANCisgICAgICAgICAgICAgIDEwMy40NjE2Mzk0MDQzLDMuNTMzODg4ODE2OCwwDQorICAgICAgICAgICAgICAxMDMuNDQ4MzAzMjIyNywzLjU0ODA1NTE3MjAsMA0KKyAgICAgICAgICAgICAgMTAzLjQyNDk3MjUzNDIsMy41NzI3NzcyNzEzLDANCisgICAgICAgICAgICAgIDEwMy4zODQ5NzkyNDgwLDMuNjIyMjIxNDY5OSwwDQorICAgICAgICAgICAgICAxMDMuMzcxMDc4NDkxMiwzLjY0Mjc3NzQ0MjksMA0KKyAgICAgICAgICAgICAgMTAzLjMzOTE0MTg0NTcsMy43MjYzODc5Nzc2LDANCisgICAgICAgICAgICAgIDEwMy4zMzQ3MDE1MzgxLDMuNzQyMjIxODMyMywwDQorICAgICAgICAgICAgICAxMDMuMzM1ODAwMTcwOSwzLjc1Mzg4ODYwNzAsMA0KKyAgICAgICAgICAgICAgMTAzLjM3NjM1ODAzMjIsMy44NjMwNTUyMjkyLDANCisgICAgICAgICAgICAgIDEwMy40MTM4NTY1MDYzLDMuOTU4ODg4NTMwNywwDQorICAgICAgICAgICAgICAxMDMuNDA5MTI2MjgxNyw0LjAzMjIyMTc5NDEsMA0KKyAgICAgICAgICAgICAgMTAzLjQwMTA3NzI3MDUsNC4wNTc3NzY0NTExLDANCisgICAgICAgICAgICAgIDEwMy4zOTQxMjY4OTIxLDQuMDg0OTk5MDg0NSwwDQorICAgICAgICAgICAgICAxMDMuMzk0Njk5MDk2Nyw0LjEwNTU1NDU4MDcsMA0KKyAgICAgICAgICAgICAgMTAzLjM5NzIwMTUzODEsNC4xMTcyMjA4Nzg2LDANCisgICAgICAgICAgICAgIDEwMy40MDk5NzMxNDQ1LDQuMTQ2Mzg4MDUzOSwwDQorICAgICAgICAgICAgICAxMDMuNDEyNzUwMjQ0MSw0LjE1MDU1NDY1NzAsMA0KKyAgICAgICAgICAgICAgMTAzLjQxNjkyMzUyMjksNC4xNTMwNTQyMzc0LDANCisgICAgICAgICAgICAgIDEwMy40NDY1NjM3MjA3LDQuMTY2NDM3MTQ5MCwwDQorICAgICAgICAgICAgICAxMDMuNDQxOTA5NzkwMCw0LjE3MDU1NDE2MTEsMA0KKyAgICAgICAgICAgICAgMTAzLjQzNTUxNjM1NzQsNC4xNzMzMzIyMTQ0LDANCisgICAgICAgICAgICAgIDEwMy40MTY5MjM1MjI5LDQuMTc3MjIxMjk4MiwwDQorICAgICAgICAgICAgICAxMDMuMzQwODEyNjgzMSw0LjE4MDI3Njg3MDcsMA0KKyAgICAgICAgICAgICAgMTAzLjMyNTI1NjM0NzcsNC4xNTEzODgxNjgzLDANCisgICAgICAgICAgICAgIDEwMy4zMDgyOTYyMDM2LDQuMTEzODg3Nzg2OSwwDQorICAgICAgICAgICAgICAxMDMuMzA2OTIyOTEyNiw0LjExMDI3NzE3NTksMA0KKyAgICAgICAgICAgICAgMTAzLjMwMjQ1OTcxNjgsNC4wODMwNTQ1NDI1LDANCisgICAgICAgICAgICAgIDEwMy4zMDQ0MTI4NDE4LDQuMDcxMzg4MjQ0NiwwDQorICAgICAgICAgICAgICAxMDMuMzI4ODU3NDIxOSwzLjk5Mjc3NzM0NzYsMA0KKyAgICAgICAgICAgICAgMTAzLjMzNTgwMDE3MDksMy45Nzc3NzcwMDQyLDANCisgICAgICAgICAgICAgIDEwMy4zNDM1ODIxNTMzLDMuOTUzNjEwODk3MSwwDQorICAgICAgICAgICAgICAxMDMuMzQzODU2ODExNSwzLjk0NDk5OTIxODAsMA0KKyAgICAgICAgICAgICAgMTAzLjM0MTA3OTcxMTksMy45MzQ3MjE0Njk5LDANCisgICAgICAgICAgICAgIDEwMy4zMjMzMDMyMjI3LDMuODc1ODMyNTU3NywwDQorICAgICAgICAgICAgICAxMDMuMzIxNjQwMDE0NiwzLjg3MzMzMjk3NzMsMA0KKyAgICAgICAgICAgICAgMTAzLjMxODg2MjkxNTAsMy44NzE2NjU5NTQ2LDANCisgICAgICAgICAgICAgIDEwMy4zMTQ0MDczNDg2LDMuODcxNjY1OTU0NiwwDQorICAgICAgICAgICAgICAxMDMuMzEyMTc5NTY1NCwzLjg3Mzg4ODQ5MjYsMA0KKyAgICAgICAgICAgICAgMTAzLjMwMjQ1OTcxNjgsMy44OTExMTA4OTcxLDANCisgICAgICAgICAgICAgIDEwMy4yODg1NjY1ODk0LDMuOTIxNjY2MTQ1MywwDQorICAgICAgICAgICAgICAxMDMuMjc4ODQ2NzQwNywzLjk1MzA1NDkwNDksMA0KKyAgICAgICAgICAgICAgMTAzLjI3MzU5MDA4NzksMy45NjEzODg1ODgwLDANCisgICAgICAgICAgICAgIDEwMy4yMjY2Mzg3OTM5LDQuMDIxNjY1NTczMSwwDQorICAgICAgICAgICAgICAxMDMuMTIxNjI3ODA3Niw0LjA4NTU1NTA3NjYsMA0KKyAgICAgICAgICAgICAgMTAzLjExNTc5ODk1MDIsNC4wODg2MTA2NDkxLDANCisgICAgICAgICAgICAgIDEwMy4wMDI0ODcxODI2LDQuMTM3Nzc3MzI4NSwwDQorICAgICAgICAgICAgICAxMDIuOTk4MzIxNTMzMiw0LjEzNzQ5OTgwOTMsMA0KKyAgICAgICAgICAgICAgMTAyLjk3MDgwOTkzNjUsNC4xMjcyMjExMDc1LDANCisgICAgICAgICAgICAgIDEwMi45NDIxNzY4MTg4LDQuMTEwNTUzNzQxNSwwDQorICAgICAgICAgICAgICAxMDIuOTM1NzkxMDE1Niw0LjEwODMzMTY4MDMsMA0KKyAgICAgICAgICAgICAgMTAyLjkyNDEzMzMwMDgsNC4xMDg2MDkxOTk1LDANCisgICAgICAgICAgICAgIDEwMi45MTk0MTgzMzUwLDQuMTEyNDk4MjgzNCwwDQorICAgICAgICAgICAgICAxMDIuOTEzMDE3MjcyOSw0LjExOTk5Nzk3ODIsMA0KKyAgICAgICAgICAgICAgMTAyLjg5OTk3ODYzNzcsNC4xNDI0OTgwMTY0LDANCisgICAgICAgICAgICAgIDEwMi45MzYwOTYxOTE0LDQuMjgzODg3ODYzMiwwDQorICAgICAgICAgICAgICAxMDIuOTM4ODczMjkxMCw0LjI4OTcyMTQ4OTAsMA0KKyAgICAgICAgICAgICAgMTAyLjk1OTk5MTQ1NTEsNC4zMjIyMjE3NTYwLDANCisgICAgICAgICAgICAgIDEwMi45NjYwODczNDEzLDQuMzI5NzIxNDUwOCwwDQorICAgICAgICAgICAgICAxMDIuOTcxNjQ5MTY5OSw0LjMzMzg4ODA1MzksMA0KKyAgICAgICAgICAgICAgMTAyLjk4NDk5Mjk4MTAsNC4zMzgwNTQ2NTcwLDANCisgICAgICAgICAgICAgIDEwMy4wMDc3NjY3MjM2LDQuMzYxMTA5NzMzNiwwDQorICAgICAgICAgICAgICAxMDMuMDI0Njg4NzIwNyw0LjM5NTI3NzAyMzMsMA0KKyAgICAgICAgICAgICAgMTAzLjAyNjkxNjUwMzksNC40MDE5NDMyMDY4LDANCisgICAgICAgICAgICAgIDEwMy4wMjYwNzcyNzA1LDQuNDA5OTk4ODkzNywwDQorICAgICAgICAgICAgICAxMDMuMDEwODAzMjIyNyw0LjQ0MjQ5ODIwNzEsMA0KKyAgICAgICAgICAgICAgMTAzLjAwOTE2MjkwMjgsNC40NDUyNzYyNjA0LDANCisgICAgICAgICAgICAgIDEwMi45NzY5Mjg3MTA5LDQuNDg0NDQzNjY0NiwwDQorICAgICAgICAgICAgICAxMDIuOTcyMjEzNzQ1MSw0LjQ4NDcyMTE4MzgsMA0KKyAgICAgICAgICAgICAgMTAyLjkzNDE0MzA2NjQsNC40Njc0OTg3NzkzLDANCisgICAgICAgICAgICAgIDEwMi44ODY5MzIzNzMwLDQuNDY5NDQzMzIxMiwwDQorICAgICAgICAgICAgICAxMDIuODgwODEzNTk4Niw0LjQ3MTY2NTM4MjQsMA0KKyAgICAgICAgICAgICAgMTAyLjg1Mjc2Nzk0NDMsNC41MDIyMjIwNjEyLDANCisgICAgICAgICAgICAgIDEwMi44NTEwODk0Nzc1LDQuNTA0OTk5MTYwOCwwDQorICAgICAgICAgICAgICAxMDIuODQzODcyMDcwMyw0LjUzMzMzMjgyNDcsMA0KKyAgICAgICAgICAgICAgMTAyLjg0MTY1OTU0NTksNC41NDQ0NDMxMzA1LDANCisgICAgICAgICAgICAgIDEwMi44NDE5MjY1NzQ3LDQuNTQ5MTY1NzI1NywwDQorICAgICAgICAgICAgICAxMDIuODQ0MTQ2NzI4NSw0LjU1NjEwOTQyODQsMA0KKyAgICAgICAgICAgICAgMTAyLjg0NzQ4ODQwMzMsNC41NjExMDk1NDI4LDANCisgICAgICAgICAgICAgIDEwMi44NTIyMDMzNjkxLDQuNTY0NzIxMTA3NSwwDQorICAgICAgICAgICAgICAxMDIuODYzMzExNzY3Niw0LjU2NzQ5OTE2MDgsMA0KKyAgICAgICAgICAgICAgMTAyLjg2OTE0MDYyNTAsNC41NzA1NTQ3MzMzLDANCisgICAgICAgICAgICAgIDEwMi44NzMzMDYyNzQ0LDQuNTc5OTk5OTIzNywwDQorICAgICAgICAgICAgICAxMDIuODgyMjAyMTQ4NCw0LjYxMDI3NzE3NTksMA0KKyAgICAgICAgICAgICAgMTAyLjg4MzMzMTI5ODgsNC42MTQ0NDM3NzkwLDANCisgICAgICAgICAgICAgIDEwMi44NzU4MDg3MTU4LDQuNjM5MTY1ODc4MywwDQorICAgICAgICAgICAgICAxMDIuODczMzA2Mjc0NCw0LjY0NjExMDUzNDcsMA0KKyAgICAgICAgICAgICAgMTAyLjg2NTgwNjU3OTYsNC42NTYxMDk4MDk5LDANCisgICAgICAgICAgICAgIDEwMi44NDMwNDgwOTU3LDQuNjc4NjA5ODQ4MCwwDQorICAgICAgICAgICAgICAxMDIuODM2OTI5MzIxMyw0LjY4MTExMDM4MjEsMA0KKyAgICAgICAgICAgICAgMTAyLjgyODg3MjY4MDcsNC42ODA4MzE5MDkyLDANCisgICAgICAgICAgICAgIDEwMi44MjA1NDEzODE4LDQuNjc5OTk5MzUxNSwwDQorICAgICAgICAgICAgICAxMDIuODA1MjUyMDc1Miw0LjY3NzQ5ODgxNzQsMA0KKyAgICAgICAgICAgICAgMTAyLjc4MzU5OTg1MzUsNC42NzcyMjEyOTgyLDANCisgICAgICAgICAgICAgIDEwMi43NzAyNjM2NzE5LDQuNjc4ODg2NDEzNiwwDQorICAgICAgICAgICAgICAxMDIuNzY2MDk4MDIyNSw0LjY3OTQ0MjQwNTcsMA0KKyAgICAgICAgICAgICAgMTAyLjczNjA3NjM1NTAsNC42ODYzODYxMDg0LDANCisgICAgICAgICAgICAgIDEwMi43MzI0Njc2NTE0LDQuNjg3NDk4MDkyNywwDQorICAgICAgICAgICAgICAxMDIuNjg5NjgyMDA2OCw0LjcxNjY2NTI2NzksMA0KKyAgICAgICAgICAgICAgMTAyLjY4NTI0MTY5OTIsNC43MjExMDkzOTAzLDANCisgICAgICAgICAgICAgIDEwMi42NjYwNzY2NjAyLDQuNzQ2OTQyNTIwMSwwDQorICAgICAgICAgICAgICAxMDIuNjY0Njg4MTEwNCw0Ljc0OTcxOTYxOTgsMA0KKyAgICAgICAgICAgICAgMTAyLjY2MDUyMjQ2MDksNC43NjgzMzE1Mjc3LDANCisgICAgICAgICAgICAgIDEwMi42NDM4NTk4NjMzLDQuNzY1Mjc1OTU1MiwwDQorICAgICAgICAgICAgICAxMDIuNjA0MTQxMjM1NCw0LjcyNzIyMDUzNTMsMA0KKyAgICAgICAgICAgICAgMTAyLjYwNzQ2NzY1MTQsNC43MDMzMzE5NDczLDANCisgICAgICAgICAgICAgIDEwMi42MDY2Mjg0MTgwLDQuNjk5NzE5NDI5MCwwDQorICAgICAgICAgICAgICAxMDIuNjAzNTc2NjYwMiw0LjY5MzYwOTIzNzcsMA0KKyAgICAgICAgICAgICAgMTAyLjYwMTM1NjUwNjMsNC42OTEzODYyMjI4LDANCisgICAgICAgICAgICAgIDEwMi41MDk2OTY5NjA0LDQuNjcyMjIwMjMwMSwwDQorICAgICAgICAgICAgICAxMDIuNDk4MDE2MzU3NCw0LjY3NDE2NDc3MjAsMA0KKyAgICAgICAgICAgICAgMTAyLjM3MjE5MjM4MjgsNC42ODM2MDk5NjI1LDANCisgICAgICAgICAgICAgIDEwMi4zNDM1ODIxNTMzLDQuNjQ0NDQzNTEyMCwwDQorICAgICAgICAgICAgICAxMDIuMzM4NTc3MjcwNSw0LjY0MDU1NTM4MTgsMA0KKyAgICAgICAgICAgICAgMTAyLjMzNDk3NjE5NjMsNC42Mzk5OTkzODk2LDANCisgICAgICAgICAgICAgIDEwMi4yMjEwNzY5NjUzLDQuNjMzODg4MjQ0NiwwDQorICAgICAgICAgICAgICAxMDIuMjEwMjUwODU0NSw0LjYzNjY2NjI5NzksMA0KKyAgICAgICAgICAgICAgMTAyLjIwMTM3MDIzOTMsNC42NDExMTA0MjAyLDANCisgICAgICAgICAgICAgIDEwMi4xNzgwMTY2NjI2LDQuNjYzMDU0NDY2MiwwDQorICAgICAgICAgICAgICAxMDIuMTI3NDU2NjY1MCw0LjczNTgzMjIxNDQsMA0KKyAgICAgICAgICAgICAgMTAxLjk1NTU0MzUxODEsNC43MzQ3MjExODM4LDANCisgICAgICAgICAgICAgIDEwMS44OTIxOTY2NTUzLDQuNjcwNTU0MTYxMSwwDQorICAgICAgICAgICAgICAxMDEuODg3NDgxNjg5NSw0LjY3NTI3Njc1NjMsMA0KKyAgICAgICAgICAgICAgMTAxLjgxODg2MjkxNTAsNC43MzM2MTAxNTMyLDANCisgICAgICAgICAgICAgIDEwMS43NzY2NDE4NDU3LDQuNzMxOTQzMTMwNSwwDQorICAgICAgICAgICAgICAxMDEuNzc4MzEyNjgzMSw0LjcwNzQ5OTUwNDEsMA0KKyAgICAgICAgICAgICAgMTAxLjc3NTI1MzI5NTksNC42NjM2MTA0NTg0LDANCisgICAgICAgICAgICAgIDEwMS43NzQxMzk0MDQzLDQuNjU0OTk4Nzc5MywwDQorICAgICAgICAgICAgICAxMDEuNzcwNTIzMDcxMyw0LjY0MTExMDQyMDIsMA0KKyAgICAgICAgICAgICAgMTAxLjc2MzYwMzIxMDQsNC42Mjk3MjA2ODc5LDANCisgICAgICAgICAgICAgIDEwMS43NTA1MjY0MjgyLDQuNjIwMjc2NDUxMSwwDQorICAgICAgICAgICAgICAxMDEuNjU3NzUyOTkwNyw0LjU2NDk5ODYyNjcsMA0KKyAgICAgICAgICAgICAgMTAxLjY1MTM2NzE4NzUsNC41NjIyMjA1NzM0LDANCisgICAgICAgICAgICAgIDEwMS42MjgzMDM1Mjc4LDQuNTU4MDUzOTcwMywwDQorICAgICAgICAgICAgICAxMDEuNTkyNDY4MjYxNyw0LjU2MDU1NDUwNDQsMA0KKyAgICAgICAgICAgICAgMTAxLjU4OTY5MTE2MjEsNC41NjI0OTkwNDYzLDANCisgICAgICAgICAgICAgIDEwMS40ODc3NDcxOTI0LDQuNTkyNzc3MjUyMiwwDQorICAgICAgICAgICAgICAxMDEuMzc4ODUyODQ0Miw0LjYxMjc3Njc1NjMsMA0KKyAgICAgICAgICAgICAgMTAxLjM2NjYzODE4MzYsNC41OTMwNTQ3NzE0LDANCisgICAgICAgICAgICAgIDEwMS4zNjM1ODY0MjU4LDQuNTg3Nzc3MTM3OCwwDQorICAgICAgICAgICAgICAxMDEuMzYxMDc2MzU1MCw0LjU4MDU1NDk2MjIsMA0KKyAgICAgICAgICAgICAgMTAxLjM0MDUzMDM5NTUsNC40MzI3NzY0NTExLDANCisgICAgICAgICAgICAgIDEwMS4zNjQ0MTA0MDA0LDQuNDAxOTQzMjA2OCwwDQorICAgICAgICAgICAgICAxMDEuMzY3MTg3NTAwMCw0LjQwMDI3NzEzNzgsMA0KKyAgICAgICAgICAgICAgMTAxLjM3MDc5NjIwMzYsNC4zOTk3MjExNDU2LDANCisgICAgICAgICAgICAgIDEwMS4zODc0ODE2ODk1LDQuNDA1NTU0NzcxNCwwDQorICAgICAgICAgICAgICAxMDEuMzk2MzYyMzA0Nyw0LjQwNDk5ODc3OTMsMA0KKyAgICAgICAgICAgICAgMTAxLjQwMjc2MzM2NjcsNC40MDI3NzY3MTgxLDANCisgICAgICAgICAgICAgIDEwMS40Mzk0MDczNDg2LDQuMzg5NDQzMzk3NSwwDQorICAgICAgICAgICAgICAxMDEuNDQyNzMzNzY0Niw0LjM4ODA1NDg0NzcsMA0KKyAgICAgICAgICAgICAgMTAxLjQ0NzQ1NjM1OTksNC4zNzg2MDk2NTczLDANCisgICAgICAgICAgICAgIDEwMS40NTYzNTk4NjMzLDQuMjk0OTk5MTIyNiwwDQorICAgICAgICAgICAgICAxMDEuNDYxOTA2NDMzMSw0LjI2NDcyMTg3MDQsMA0KKyAgICAgICAgICAgICAgMTAxLjQ3OTk3MjgzOTQsNC4yMTA4MzI1OTU4LDANCisgICAgICAgICAgICAgIDEwMS41MDY2Mzc1NzMyLDQuMTUxMzg4MTY4MywwDQorICAgICAgICAgICAgICAxMDEuNTE4ODU5ODYzMyw0LjEyNzQ5ODYyNjcsMA0KKyAgICAgICAgICAgICAgMTAxLjU1ODg1MzE0OTQsNC4wMTExMTAzMDU4LDANCisgICAgICAgICAgICAgIDEwMS41OTQ5NzA3MDMxLDMuODA0MTY1ODQwMSwwDQorICAgICAgICAgICAgICAxMDEuNjI2NjMyNjkwNCwzLjc3MTY2NTU3MzEsMA0KKyAgICAgICAgICAgICAgMTAxLjYyNjkwNzM0ODYsMy43NjIyMjEzMzY0LDANCisgICAgICAgICAgICAgIDEwMS42NTk0MDg1NjkzLDMuNzE4NjA5ODA5OSwwDQorICAgICAgICAgICAgICAxMDEuNjkxOTA5NzkwMCwzLjcwMTk0MzM5NzUsMA0KKyAgICAgICAgICAgICAgMTAxLjY5NjA4MzA2ODgsMy43MDE2NjU4NzgzLDANCisgICAgICAgICAgICAgIDEwMS43MTU4MTI2ODMxLDMuNzAwODMyMzY2OSwwDQorICAgICAgICAgICAgICAxMDEuNzIzODYxNjk0MywzLjcwMTY2NTg3ODMsMA0KKyAgICAgICAgICAgICAgMTAxLjczMTkxODMzNTAsMy43MDExMTAzNjMwLDANCisgICAgICAgICAgICAgIDEwMS43MzgyOTY1MDg4LDMuNjk4MzMyMzA5NywwDQorICAgICAgICAgICAgICAxMDEuNzY4MDQzNTE4MSwzLjY3NDQ0MzcyMTgsMA0KKyAgICAgICAgICAgICAgMTAxLjc3MDI0ODQxMzEsMy42NzIyMjExODM4LDANCisgICAgICAgICAgICAgIDEwMS44MTM1ODMzNzQwLDMuNjAzMzMyNTE5NSwwDQorICAgICAgICAgICAgICAxMDEuODE1MjQ2NTgyMCwzLjU5NjY2NTg1OTIsMA0KKyAgICAgICAgICAgICAgMTAxLjgxNTI0NjU4MjAsMy41OTIyMjEyNjAxLDANCisgICAgICAgICAgICAgIDEwMS44MDgyOTYyMDM2LDMuNTU5NDQzNDczOCwwDQorICAgICAgICAgICAgICAxMDEuODA1NTI2NzMzNCwzLjU1Mjc3NjgxMzUsMA0KKyAgICAgICAgICAgICAgMTAxLjc5ODg1ODY0MjYsMy41NDYxMTAxNTMyLDANCisgICAgICAgICAgICAgIDEwMS43OTE2NDEyMzU0LDMuNTQ0OTk5MTIyNiwwDQorICAgICAgICAgICAgICAxMDEuNzg1Nzk3MTE5MSwzLjU0MTM4ODAzNDgsMA0KKyAgICAgICAgICAgICAgMTAxLjc3OTY5MzYwMzUsMy41MzM4ODgzNDAwLDANCisgICAgICAgICAgICAgIDEwMS43NjYwODI3NjM3LDMuNTA2NjY2MTgzNSwwDQorICAgICAgICAgICAgICAxMDEuNzYzODcwMjM5MywzLjQ5OTk5OTUyMzIsMA0KKyAgICAgICAgICAgICAgMTAxLjc2MzMxMzI5MzUsMy40OTYzODc5NTg1LDANCisgICAgICAgICAgICAgIDEwMS43NjQxMzcyNjgxLDMuMzc5NDQzMTY4NiwwDQorICAgICAgICAgICAgICAxMDEuNzY0MTM3MjY4MSwzLjM3NDcyMTA1MDMsMA0KKyAgICAgICAgICAgICAgMTAxLjc2NzE5NjY1NTMsMy4zNjk0NDM0MTY2LDANCisgICAgICAgICAgICAgIDEwMS43ODA4MDc0OTUxLDMuMzQ2OTQzMzc4NCwwDQorICAgICAgICAgICAgICAxMDEuNzg5Njg4MTEwNCwzLjMzMzYxMDA1NzgsMA0KKyAgICAgICAgICAgICAgMTAxLjgxODg2MjkxNTAsMy4zMDAyNzY3NTYzLDANCisgICAgICAgICAgICAgIDEwMS44Mjk5NzEzMTM1LDMuMjg4ODg3OTc3NiwwDQorICAgICAgICAgICAgICAxMDEuODMyNzQ4NDEzMSwzLjI4NzIyMTQzMTcsMA0KKyAgICAgICAgICAgICAgMTAxLjg4NjY0MjQ1NjEsMy4yNjE2NjU4MjExLDANCisgICAgICAgICAgICAgIDEwMS44OTEwODI3NjM3LDMuMjYxMTEwMzA1OCwwDQorICAgICAgICAgICAgICAxMDEuOTA4MDIwMDE5NSwzLjI1OTcyMTI3OTEsMA0KKyAgICAgICAgICAgICAgMTAxLjkxNTc3MTQ4NDQsMy4yNjA1MTIzNTIwLDANCisgICAgICAgICAgICA8L2Nvb3JkaW5hdGVzPg0KKyAgICAgICAgICA8L0xpbmVhclJpbmc+DQorICAgICAgICA8L291dGVyQm91bmRhcnlJcz4NCisgICAgICA8L1BvbHlnb24+DQorICAgIDwvUGxhY2VtYXJrPg0KKyAgICA8UGxhY2VtYXJrPg0KKyAgICAgIDxkZXNjcmlwdGlvbj48IVtDREFUQVsgVW5rbm93biBBcmVhIFR5cGU8QlI+PEJSPjxCPkZJUFNfQURNSU48L0I+ID0gTVkwNzxCUj48QlI+PEI+R01JX0FETUlOPC9CPiA9IE1ZUy1QRVI8QlI+PEJSPjxCPkFETUlOX05BTUU8L0I+ID0gUGVyYWs8QlI+PEJSPjxCPkZJUFNfQ05UUlk8L0I+ID0gTVk8QlI+PEJSPjxCPkdNSV9DTlRSWTwvQj4gPSBNWVM8QlI+PEJSPjxCPkNOVFJZX05BTUU8L0I+ID0gTWFsYXlzaWE8QlI+PEJSPjxCPlJFR0lPTjwvQj4gPSBTb3V0aGVhc3Rlcm4gQXNpYTxCUj48QlI+PEI+Q09OVElORU5UPC9CPiA9IEFzaWE8QlI+PEJSPjxCPlBPUF9BRE1JTjwvQj4gPSAyNDU2MzI0PEJSPjxCUj48Qj5TUUtNX0FETUlOPC9CPiA9IDIwOTc2LjQ0OTxCUj48QlI+PEI+U1FNSV9BRE1JTjwvQj4gPSA4MDk5LjAwNzxCUj48QlI+PEI+VFlQRV9FTkc8L0I+ID0gU3RhdGU8QlI+PEJSPjxCPlRZUEVfTE9DPC9CPiA9IE5lZ2VyaTxCUj48QlI+PEI+Q09MT1JfTUFQPC9CPiA9IDMgXV0+PC9kZXNjcmlwdGlvbj4NCisgICAgICA8c3R5bGVVcmw+I2FyZWExPC9zdHlsZVVybD4NCisgICAgICA8UG9seWdvbj4NCisgICAgICAgIDxvdXRlckJvdW5kYXJ5SXM+DQorICAgICAgICAgIDxMaW5lYXJSaW5nPg0KKyAgICAgICAgICAgIDxjb29yZGluYXRlcz4NCisgICAgICAgICAgICAgIDEwMC40MDQ2NjMwODU5LDUuMTE5OTk4OTMxOSwwDQorICAgICAgICAgICAgICAxMDAuMzYzODYxMDg0MCw1LjA5MDI3NjcxODEsMA0KKyAgICAgICAgICAgICAgMTAwLjM2MTA3NjM1NTAsNS4wODYxMTAxMTUxLDANCisgICAgICAgICAgICAgIDEwMC4zNjIxODI2MTcyLDUuMDgwNTU0OTYyMiwwDQorICAgICAgICAgICAgICAxMDAuMzc5OTU5MTA2NCw1LjAzNjY2NTkxNjQsMA0KKyAgICAgICAgICAgICAgMTAwLjQwMjE5MTE2MjEsNC45ODM4ODc2NzI0LDANCisgICAgICAgICAgICAgIDEwMC40MzU1MTYzNTc0LDQuOTIxMTEwMTUzMiwwDQorICAgICAgICAgICAgICAxMDAuNDQyMTc2ODE4OCw0LjkxMzg4Nzk3NzYsMA0KKyAgICAgICAgICAgICAgMTAwLjQ1MTA4MDMyMjMsNC45MDg4ODc4NjMyLDANCisgICAgICAgICAgICAgIDEwMC40NTYwOTI4MzQ1LDQuOTEwODMyNDA1MSwwDQorICAgICAgICAgICAgICAxMDAuNTEwODAzMjIyNyw0Ljg4NjExMDMwNTgsMA0KKyAgICAgICAgICAgICAgMTAwLjYwNTUyOTc4NTIsNC43OTgzMzIyMTQ0LDANCisgICAgICAgICAgICAgIDEwMC42MDA1MTcyNzI5LDQuNzU0NDQ0MTIyMywwDQorICAgICAgICAgICAgICAxMDAuNTk0MTMxNDY5Nyw0Ljc1Mzg4ODEzMDIsMA0KKyAgICAgICAgICAgICAgMTAwLjU5MDgxMjY4MzEsNC43NTA1NTUwMzg1LDANCisgICAgICAgICAgICAgIDEwMC41ODkxNDE4NDU3LDQuNzQ0OTk4OTMxOSwwDQorICAgICAgICAgICAgICAxMDAuNTg4ODY3MTg3NSw0LjU4NjM4NzYzNDMsMA0KKyAgICAgICAgICAgICAgMTAwLjU4MzAzODMzMDEsNC4zOTkxNjYxMDcyLDANCisgICAgICAgICAgICAgIDEwMC41NzIxOTY5NjA0LDQuMzM5OTk5MTk4OSwwDQorICAgICAgICAgICAgICAxMDAuNTgwODEwNTQ2OSw0LjMwMjc3NjMzNjcsMA0KKyAgICAgICAgICAgICAgMTAwLjYwMTkxMzQ1MjEsNC4yMjE2NjUzODI0LDANCisgICAgICAgICAgICAgIDEwMC42MTQ0MTA0MDA0LDQuMTc3MjIxMjk4MiwwDQorICAgICAgICAgICAgICAxMDAuNjIwNTA2Mjg2Niw0LjE2MjQ5OTQyNzgsMA0KKyAgICAgICAgICAgICAgMTAwLjYyNzc0NjU4MjAsNC4xNTYxMDk4MDk5LDANCisgICAgICAgICAgICAgIDEwMC42MzMzMjM2Njk0LDQuMTU0NzIxMjYwMSwwDQorICAgICAgICAgICAgICAxMDAuNjM4MzEzMjkzNSw0LjE1NjY2NTgwMjAsMA0KKyAgICAgICAgICAgICAgMTAwLjY1MDgwMjYxMjMsNC4xNjQ3MjE0ODkwLDANCisgICAgICAgICAgICAgIDEwMC42NTYzNTY4MTE1LDQuMTY1ODMyNTE5NSwwDQorICAgICAgICAgICAgICAxMDAuNjY4ODUzNzU5OCw0LjE2NDE2NTQ5NjgsMA0KKyAgICAgICAgICAgICAgMTAwLjY4NDY5MjM4MjgsNC4xNTg4ODc4NjMyLDANCisgICAgICAgICAgICAgIDEwMC42OTY5MDcwNDM1LDQuMTUxOTQzMjA2OCwwDQorICAgICAgICAgICAgICAxMDAuODY0NjkyNjg4MCw0LjAzMTM4ODI4MjgsMA0KKyAgICAgICAgICAgICAgMTAwLjg2OTk1Njk3MDIsNC4wMjMwNTUwNzY2LDANCisgICAgICAgICAgICAgIDEwMC44Njk2ODk5NDE0LDQuMDE3NDk4OTcwMCwwDQorICAgICAgICAgICAgICAxMDAuNzg0MTI2MjgxNywzLjk4NDk5OTY1NjcsMA0KKyAgICAgICAgICAgICAgMTAwLjc3MzAzMzE0MjEsMy45ODI0OTkxMjI2LDANCisgICAgICAgICAgICAgIDEwMC43NTk5NzkyNDgwLDMuOTgyMjIxNjAzNCwwDQorICAgICAgICAgICAgICAxMDAuNzQxOTEyODQxOCwzLjk4NTI3NzE3NTksMA0KKyAgICAgICAgICAgICAgMTAwLjczNzE4MjYxNzIsMy45ODc0OTk3MTM5LDANCisgICAgICAgICAgICAgIDEwMC43MjU1MTcyNzI5LDMuOTk2OTQzOTUwNywwDQorICAgICAgICAgICAgICAxMDAuNzIwMjUyOTkwNywzLjk5ODMzMjk3NzMsMA0KKyAgICAgICAgICAgICAgMTAwLjcxNDY5MTE2MjEsMy45OTcyMjE5NDY3LDANCisgICAgICAgICAgICAgIDEwMC43MTA1MzMxNDIxLDMuOTk0NDQzODkzNCwwDQorICAgICAgICAgICAgICAxMDAuNzAzODU3NDIxOSwzLjk4Njk0NDE5ODYsMA0KKyAgICAgICAgICAgICAgMTAwLjcwMjQ2ODg3MjEsMy45NzQ3MjE0MzE3LDANCisgICAgICAgICAgICAgIDEwMC42OTY5MDcwNDM1LDMuOTE2OTQ0MDI2OSwwDQorICAgICAgICAgICAgICAxMDAuNjk3MTg5MzMxMSwzLjkwMzg4ODIyNTYsMA0KKyAgICAgICAgICAgICAgMTAwLjcwMTA4MDMyMjMsMy44OTQxNjY0Njk2LDANCisgICAgICAgICAgICAgIDEwMC43MDYzNTk4NjMzLDMuODg1ODMyNzg2NiwwDQorICAgICAgICAgICAgICAxMDAuNzE5MTMxNDY5NywzLjg3MDI3NzQwNDgsMA0KKyAgICAgICAgICAgICAgMTAwLjcyMjQ3MzE0NDUsMy44NjY2NjYzMTcwLDANCisgICAgICAgICAgICAgIDEwMC43MzMzMDY4ODQ4LDMuODU2NjY2NTY0OSwwDQorICAgICAgICAgICAgICAxMDAuNzQ1NTA2Mjg2NiwzLjg0ODMzMjg4MTksMA0KKyAgICAgICAgICAgICAgMTAwLjc1NDQzMjY3ODIsMy44NDMzMzI3Njc1LDANCisgICAgICAgICAgICAgIDEwMC43NTk5NzkyNDgwLDMuODQxNjY2MjIxNiwwDQorICAgICAgICAgICAgICAxMDAuNzc4NTc5NzExOSwzLjgzOTE2NjE2NDQsMA0KKyAgICAgICAgICAgICAgMTAwLjc4NTUyMjQ2MDksMy44MzkxNjYxNjQ0LDANCisgICAgICAgICAgICAgIDEwMC44NDQxMzE0Njk3LDMuODQ0MzM0MTI1NSwwDQorICAgICAgICAgICAgICAxMDAuODYzMDIxODUwNiwzLjg0OTcyMTQzMTcsMA0KKyAgICAgICAgICAgICAgMTAwLjkyNzE5MjY4ODAsMy44NjA1NTUxNzIwLDANCisgICAgICAgICAgICAgIDEwMC45Mzk0MDczNDg2LDMuODYyMjIxNzE3OCwwDQorICAgICAgICAgICAgICAxMDAuOTQyNzMzNzY0NiwzLjg2MTM4ODY4MzMsMA0KKyAgICAgICAgICAgICAgMTAwLjk0NTUxMDg2NDMsMy44NTk0NDQxNDE0LDANCisgICAgICAgICAgICAgIDEwMS4wMjYzNjcxODc1LDMuNzk5NzIxNzE3OCwwDQorICAgICAgICAgICAgICAxMDEuMTI2NjMyNjkwNCwzLjczNjExMDY4NzMsMA0KKyAgICAgICAgICAgICAgMTAxLjI1MjE5NzI2NTYsMy42Nzc0OTk3NzExLDANCisgICAgICAgICAgICAgIDEwMS4zNDE2MzY2NTc3LDMuNzM0NDQ0MTQxNCwwDQorICAgICAgICAgICAgICAxMDEuMzkyMTk2NjU1MywzLjc2ODg4ODQ3MzUsMA0KKyAgICAgICAgICAgICAgMTAxLjUxMjE5MTc3MjUsMy42NzM2MTA2ODczLDANCisgICAgICAgICAgICAgIDEwMS41MTYwODI3NjM3LDMuNjczMzMzMTY4MCwwDQorICAgICAgICAgICAgICAxMDEuNTIyNDc2MTk2MywzLjY3NTI3NzIzMzEsMA0KKyAgICAgICAgICAgICAgMTAxLjUzOTEzODc5MzksMy42ODU1NTQ5ODEyLDANCisgICAgICAgICAgICAgIDEwMS41NDQxMjg0MTgwLDMuNjg5NDQzMTExNCwwDQorICAgICAgICAgICAgICAxMDEuNTYzNTgzMzc0MCwzLjcwNTgzMjQ4MTQsMA0KKyAgICAgICAgICAgICAgMTAxLjU3OTE0NzMzODksMy43MjExMDk4NjcxLDANCisgICAgICAgICAgICAgIDEwMS42MjY2MzI2OTA0LDMuNzcxNjY1NTczMSwwDQorICAgICAgICAgICAgICAxMDEuNTk0OTcwNzAzMSwzLjgwNDE2NTg0MDEsMA0KKyAgICAgICAgICAgICAgMTAxLjU1ODg1MzE0OTQsNC4wMTExMTAzMDU4LDANCisgICAgICAgICAgICAgIDEwMS41MTg4NTk4NjMzLDQuMTI3NDk4NjI2NywwDQorICAgICAgICAgICAgICAxMDEuNTA2NjM3NTczMiw0LjE1MTM4ODE2ODMsMA0KKyAgICAgICAgICAgICAgMTAxLjQ3OTk3MjgzOTQsNC4yMTA4MzI1OTU4LDANCisgICAgICAgICAgICAgIDEwMS40NjE5MDY0MzMxLDQuMjY0NzIxODcwNCwwDQorICAgICAgICAgICAgICAxMDEuNDU2MzU5ODYzMyw0LjI5NDk5OTEyMjYsMA0KKyAgICAgICAgICAgICAgMTAxLjQ0NzQ1NjM1OTksNC4zNzg2MDk2NTczLDANCisgICAgICAgICAgICAgIDEwMS40NDI3MzM3NjQ2LDQuMzg4MDU0ODQ3NywwDQorICAgICAgICAgICAgICAxMDEuNDM5NDA3MzQ4Niw0LjM4OTQ0MzM5NzUsMA0KKyAgICAgICAgICAgICAgMTAxLjQwMjc2MzM2NjcsNC40MDI3NzY3MTgxLDANCisgICAgICAgICAgICAgIDEwMS4zOTYzNjIzMDQ3LDQuNDA0OTk4Nzc5MywwDQorICAgICAgICAgICAgICAxMDEuMzg3NDgxNjg5NSw0LjQwNTU1NDc3MTQsMA0KKyAgICAgICAgICAgICAgMTAxLjM3MDc5NjIwMzYsNC4zOTk3MjExNDU2LDANCisgICAgICAgICAgICAgIDEwMS4zNjcxODc1MDAwLDQuNDAwMjc3MTM3OCwwDQorICAgICAgICAgICAgICAxMDEuMzY0NDEwNDAwNCw0LjQwMTk0MzIwNjgsMA0KKyAgICAgICAgICAgICAgMTAxLjM0MDUzMDM5NTUsNC40MzI3NzY0NTExLDANCisgICAgICAgICAgICAgIDEwMS4zNjEwNzYzNTUwLDQuNTgwNTU0OTYyMiwwDQorICAgICAgICAgICAgICAxMDEuMzYzNTg2NDI1OCw0LjU4Nzc3NzEzNzgsMA0KKyAgICAgICAgICAgICAgMTAxLjM2NjYzODE4MzYsNC41OTMwNTQ3NzE0LDANCisgICAgICAgICAgICAgIDEwMS4zNzg4NTI4NDQyLDQuNjEyNzc2NzU2MywwDQorICAgICAgICAgICAgICAxMDEuMzY2MDczNjA4NCw0LjY0OTk5OTYxODUsMA0KKyAgICAgICAgICAgICAgMTAxLjM1ODg1NjIwMTIsNC43MDI3NzY5MDg5LDANCisgICAgICAgICAgICAgIDEwMS4zOTI0NzEzMTM1LDQuNzU5NDQ0MjM2OCwwDQorICAgICAgICAgICAgICAxMDEuNDQ5MTI3MTk3Myw0Ljg1MTk0MzAxNjEsMA0KKyAgICAgICAgICAgICAgMTAxLjQ1MTM3MDIzOTMsNC44NTQxNjYwMzA5LDANCisgICAgICAgICAgICAgIDEwMS40NjA1MzMxNDIxLDQuODg0NzIxNzU2MCwwDQorICAgICAgICAgICAgICAxMDEuNDYzMzAyNjEyMyw0Ljg5NTU1NDU0MjUsMA0KKyAgICAgICAgICAgICAgMTAxLjQ2MjE4ODcyMDcsNC45MTIyMjA5NTQ5LDANCisgICAgICAgICAgICAgIDEwMS40NTc0NzM3NTQ5LDQuOTQyNzc2NjgwMCwwDQorICAgICAgICAgICAgICAxMDEuNDU2MzU5ODYzMyw0Ljk0NTgzMjI1MjUsMA0KKyAgICAgICAgICAgICAgMTAxLjQ1NjkxNjgwOTEsNC45OTI0OTgzOTc4LDANCisgICAgICAgICAgICAgIDEwMS40Njc0NjgyNjE3LDUuMDU0OTk4Mzk3OCwwDQorICAgICAgICAgICAgICAxMDEuNDY5NDIxMzg2Nyw1LjA2NjEwOTY1NzMsMA0KKyAgICAgICAgICAgICAgMTAxLjQ5NjA3ODQ5MTIsNS4xODE5NDI5Mzk4LDANCisgICAgICAgICAgICAgIDEwMS40OTk2ODcxOTQ4LDUuMTkxOTQzMTY4NiwwDQorICAgICAgICAgICAgICAxMDEuNTM1NTIyNDYwOSw1LjI3ODA1NTE5MTAsMA0KKyAgICAgICAgICAgICAgMTAxLjYxNTc5ODk1MDIsNS4zNjExMDk3MzM2LDANCisgICAgICAgICAgICAgIDEwMS42MTg1ODM2NzkyLDUuMzYyNzc2NzU2MywwDQorICAgICAgICAgICAgICAxMDEuNjIyMTkyMzgyOCw1LjM2MzYxMDI2NzYsMA0KKyAgICAgICAgICAgICAgMTAxLjYyNTIzNjUxMTIsNS4zNjIyMjA3NjQyLDANCisgICAgICAgICAgICAgIDEwMS42Mjk2NzY4MTg4LDUuMzUyNzc2NTI3NCwwDQorICAgICAgICAgICAgICAxMDEuNjMzNTkwNjk4Miw1LjM0Nzc3NzM2NjYsMA0KKyAgICAgICAgICAgICAgMTAxLjY3ODg0ODI2NjYsNS4zMzAyNzc0NDI5LDANCisgICAgICAgICAgICAgIDEwMS43MjQ0MTEwMTA3LDUuMzQ2NjY2MzM2MSwwDQorICAgICAgICAgICAgICAxMDEuNzQzNTgzNjc5Miw1LjM1ODYxMDE1MzIsMA0KKyAgICAgICAgICAgICAgMTAxLjc1MDUyNjQyODIsNS4zNjUyNzYzMzY3LDANCisgICAgICAgICAgICAgIDEwMS43NTE5MjI2MDc0LDUuMzY4MzMxOTA5MiwwDQorICAgICAgICAgICAgICAxMDEuNzUyNzYxODQwOCw1LjM3MTk0MzQ3MzgsMA0KKyAgICAgICAgICAgICAgMTAxLjc1MzMxMTE1NzIsNS40ODA1NTQ1ODA3LDANCisgICAgICAgICAgICAgIDEwMS43NTI0NzE5MjM4LDUuNDk3MjIwOTkzMCwwDQorICAgICAgICAgICAgICAxMDEuNzQ4ODYzMjIwMiw1LjUwNzQ5OTY5NDgsMA0KKyAgICAgICAgICAgICAgMTAxLjc0NjYyNzgwNzYsNS41MTAyNzc3NDgxLDANCisgICAgICAgICAgICAgIDEwMS43NDM4NTA3MDgwLDUuNTExOTQzODE3MSwwDQorICAgICAgICAgICAgICAxMDEuNzIyMTk4NDg2Myw1LjUxNjM4NzkzOTUsMA0KKyAgICAgICAgICAgICAgMTAxLjY5MTkwOTc5MDAsNS41MTYxMTA0MjAyLDANCisgICAgICAgICAgICAgIDEwMS42NzI0NzAwOTI4LDUuNTE1ODMyOTAxMCwwDQorICAgICAgICAgICAgICAxMDEuNjY5OTY3NjUxNCw1LjUxNzQ5ODk3MDAsMA0KKyAgICAgICAgICAgICAgMTAxLjY2NjY0MTIzNTQsNS41MjMwNTUwNzY2LDANCisgICAgICAgICAgICAgIDEwMS42NjYzNjY1NzcxLDUuNTI3NDk5MTk4OSwwDQorICAgICAgICAgICAgICAxMDEuNjY0NDEzNDUyMSw1LjYxOTQ0MjkzOTgsMA0KKyAgICAgICAgICAgICAgMTAxLjY2NDEzODc5MzksNS42NjYxMTAwMzg4LDANCisgICAgICAgICAgICAgIDEwMS42OTgwMTMzMDU3LDUuNzU2OTQzNzAyNywwDQorICAgICAgICAgICAgICAxMDEuNjk5NTQ2ODE0MCw1Ljc2MDk3MTA2OTMsMA0KKyAgICAgICAgICAgICAgMTAxLjY5NjM1MDA5NzcsNS43NjEzODg3Nzg3LDANCisgICAgICAgICAgICAgIDEwMS42OTE2NDI3NjEyLDUuNzYzNjEwODM5OCwwDQorICAgICAgICAgICAgICAxMDEuNjg0OTY3MDQxMCw1Ljc3MDgzMzAxNTQsMA0KKyAgICAgICAgICAgICAgMTAxLjY2MDI0NzgwMjcsNS44MTQ5OTg2MjY3LDANCisgICAgICAgICAgICAgIDEwMS42NTcyMDM2NzQzLDUuODI1Mjc3MzI4NSwwDQorICAgICAgICAgICAgICAxMDEuNjU2NjMxNDY5Nyw1LjgzMTY2NTk5MjcsMA0KKyAgICAgICAgICAgICAgMTAxLjY1NzQ3MDcwMzEsNS44Mzc3NzcxMzc4LDANCisgICAgICAgICAgICAgIDEwMS42NjA1MjI0NjA5LDUuODQ4NjA5OTI0MywwDQorICAgICAgICAgICAgICAxMDEuNjYwNzk3MTE5MSw1Ljg1NTU1NDU4MDcsMA0KKyAgICAgICAgICAgICAgMTAxLjY1ODg1OTI1MjksNS44NjA1NTQ2OTUxLDANCisgICAgICAgICAgICAgIDEwMS42MTA1MTk0MDkyLDUuOTAyNDk5MTk4OSwwDQorICAgICAgICAgICAgICAxMDEuNjAyNDYyNzY4Niw1LjkwODA1NDM1MTgsMA0KKyAgICAgICAgICAgICAgMTAxLjU4MjQ3Mzc1NDksNS45MTYxMTAwMzg4LDANCisgICAgICAgICAgICAgIDEwMS41NzYzNzAyMzkzLDUuOTE3MjIxMDY5MywwDQorICAgICAgICAgICAgICAxMDEuNTY5OTc2ODA2Niw1LjkxNjY2NjAzMDksMA0KKyAgICAgICAgICAgICAgMTAxLjU1NTIzNjgxNjQsNS45MTA4MzI0MDUxLDANCisgICAgICAgICAgICAgIDEwMS41MDYwNDI0ODA1LDUuODgwNTcxMzY1NCwwDQorICAgICAgICAgICAgICAxMDEuNDUyMTg2NTg0NSw1Ljg2MzA1NDI3NTUsMA0KKyAgICAgICAgICAgICAgMTAxLjMxMTg5NzI3NzgsNS44MDcyMjE0MTI3LDANCisgICAgICAgICAgICAgIDEwMS4yNjEzNjc3OTc5LDUuNzIxMzg3ODYzMiwwDQorICAgICAgICAgICAgICAxMDEuMjU4ODcyOTg1OCw1LjcwOTcyMTU2NTIsMA0KKyAgICAgICAgICAgICAgMTAxLjI1NjA4ODI1NjgsNS43MDU4MzI0ODE0LDANCisgICAgICAgICAgICAgIDEwMS4yMjYwNjY1ODk0LDUuNjczMzMyMjE0NCwwDQorICAgICAgICAgICAgICAxMDEuMjIyNDczMTQ0NSw1LjY2OTk5OTEyMjYsMA0KKyAgICAgICAgICAgICAgMTAxLjIxODMwNzQ5NTEsNS42NjcyMjEwNjkzLDANCisgICAgICAgICAgICAgIDEwMS4xOTYzNTAwOTc3LDUuNjU0NzIxMjYwMSwwDQorICAgICAgICAgICAgICAxMDEuMTgzMDI5MTc0OCw1LjY0NzQ5OTA4NDUsMA0KKyAgICAgICAgICAgICAgMTAxLjE2NDk3ODAyNzMsNS42MzgzMzIzNjY5LDANCisgICAgICAgICAgICAgIDEwMS4xNTE2NDE4NDU3LDUuNjMyNDk4NzQxMSwwDQorICAgICAgICAgICAgICAxMDEuMTQ1ODEyOTg4Myw1LjYzMTExMDE5MTMsMA0KKyAgICAgICAgICAgICAgMTAxLjEzOTY4NjU4NDUsNS42MzE5NDI3NDkwLDANCisgICAgICAgICAgICAgIDEwMS4xMzIxODY4ODk2LDUuNjM4MzMyMzY2OSwwDQorICAgICAgICAgICAgICAxMDEuMDU3NDU2OTcwMiw1LjcyOTE2NjAzMDksMA0KKyAgICAgICAgICAgICAgMTAwLjk5NDY1OTQyMzgsNS43Nzk2MjMwMzE2LDANCisgICAgICAgICAgICAgIDEwMC45NjE2Mzk0MDQzLDUuNzcyNzc2NjAzNywwDQorICAgICAgICAgICAgICAxMDAuOTU4MDIzMDcxMyw1Ljc3MTY2NTU3MzEsMA0KKyAgICAgICAgICAgICAgMTAwLjk1MjQ2ODg3MjEsNS43NjgwNTQ5NjIyLDANCisgICAgICAgICAgICAgIDEwMC45NTE2MzcyNjgxLDUuNzY0NDQ0MzUxMiwwDQorICAgICAgICAgICAgICAxMDAuOTU3NzQ4NDEzMSw1Ljc0ODg4ODAxNTcsMA0KKyAgICAgICAgICAgICAgMTAwLjk2NzE5MzYwMzUsNS43MzU1NTQ2OTUxLDANCisgICAgICAgICAgICAgIDEwMC45Njk0MjEzODY3LDUuNzMzMzMyNjM0MCwwDQorICAgICAgICAgICAgICAxMDAuOTc1Nzk5NTYwNSw1LjczMDU1NDU4MDcsMA0KKyAgICAgICAgICAgICAgMTAwLjk4MTM1Mzc1OTgsNS43MjY5NDM5Njk3LDANCisgICAgICAgICAgICAgIDEwMC45ODQ5NzAwOTI4LDUuNzIxMTEwMzQzOSwwDQorICAgICAgICAgICAgICAxMDAuOTg0NDEzMTQ3MCw1LjcxNjM4Nzc0ODcsMA0KKyAgICAgICAgICAgICAgMTAwLjk0NTIzNjIwNjEsNS41NDMzMzIwOTk5LDANCisgICAgICAgICAgICAgIDEwMC45MzYwODA5MzI2LDUuNTE1ODMyOTAxMCwwDQorICAgICAgICAgICAgICAxMDAuODU2MDc5MTAxNiw1LjM1OTE2NTE5MTcsMA0KKyAgICAgICAgICAgICAgMTAwLjg1MDc5OTU2MDUsNS4zNTE2NjU0OTY4LDANCisgICAgICAgICAgICAgIDEwMC44MzUyNTA4NTQ1LDUuMzM0OTk5MDg0NSwwDQorICAgICAgICAgICAgICAxMDAuODMwMjYxMjMwNSw1LjMzMDgzMjQ4MTQsMA0KKyAgICAgICAgICAgICAgMTAwLjgyNDQxNzExNDMsNS4zMjc3NzY5MDg5LDANCisgICAgICAgICAgICAgIDEwMC43OTE5MjM1MjI5LDUuMzE5OTk5Njk0OCwwDQorICAgICAgICAgICAgICAxMDAuNzg3NzUwMjQ0MSw1LjMxOTk5OTY5NDgsMA0KKyAgICAgICAgICAgICAgMTAwLjY5MTY0Mjc2MTIsNS4yMTU4MzI3MTAzLDANCisgICAgICAgICAgICAgIDEwMC42ODA4MDEzOTE2LDUuMjAwMjc3MzI4NSwwDQorICAgICAgICAgICAgICAxMDAuNjAyNzUyNjg1NSw1LjExNTgzMjMyODgsMA0KKyAgICAgICAgICAgICAgMTAwLjU3MzU5MzEzOTYsNS4wODYzODc2MzQzLDANCisgICAgICAgICAgICAgIDEwMC41NjgwMzg5NDA0LDUuMDgyMjIxOTg0OSwwDQorICAgICAgICAgICAgICAxMDAuNTU3MTg5OTQxNCw1LjA3OTk5OTkyMzcsMA0KKyAgICAgICAgICAgICAgMTAwLjU1Mjc0OTYzMzgsNS4wNzk5OTk5MjM3LDANCisgICAgICAgICAgICAgIDEwMC41NDg1NzYzNTUwLDUuMDgxMTEwOTU0MywwDQorICAgICAgICAgICAgICAxMDAuNTQ1NTE2OTY3OCw1LjA4MjIyMTk4NDksMA0KKyAgICAgICAgICAgICAgMTAwLjUxNzE5NjY1NTMsNS4wOTg2MDk5MjQzLDANCisgICAgICAgICAgICAgIDEwMC41MTE2NDI0NTYxLDUuMTAyMjIxNDg5MCwwDQorICAgICAgICAgICAgICAxMDAuNTA4NTkwNjk4Miw1LjEwODA1NDE2MTEsMA0KKyAgICAgICAgICAgICAgMTAwLjUwMzU2MjkyNzIsNS4xMzQyMDIwMDM1LDANCisgICAgICAgICAgICAgIDEwMC40ODk2OTI2ODgwLDUuMTM5NDQzMzk3NSwwDQorICAgICAgICAgICAgICAxMDAuNDg0OTcwMDkyOCw1LjEzOTcyMTg3MDQsMA0KKyAgICAgICAgICAgICAgMTAwLjQ3ODAyNzM0MzgsNS4xMzgzMzIzNjY5LDANCisgICAgICAgICAgICAgIDEwMC40MDQ2NjMwODU5LDUuMTE5OTk4OTMxOSwwDQorICAgICAgICAgICAgPC9jb29yZGluYXRlcz4NCisgICAgICAgICAgPC9MaW5lYXJSaW5nPg0KKyAgICAgICAgPC9vdXRlckJvdW5kYXJ5SXM+DQorICAgICAgPC9Qb2x5Z29uPg0KKyAgICA8L1BsYWNlbWFyaz4NCisgICAgPFBsYWNlbWFyaz4NCisgICAgICA8ZGVzY3JpcHRpb24+PCFbQ0RBVEFbIFVua25vd24gQXJlYSBUeXBlPEJSPjxCUj48Qj5GSVBTX0FETUlOPC9CPiA9IE1ZMDg8QlI+PEJSPjxCPkdNSV9BRE1JTjwvQj4gPSBNWVMtUFJMPEJSPjxCUj48Qj5BRE1JTl9OQU1FPC9CPiA9IFBlcmxpczxCUj48QlI+PEI+RklQU19DTlRSWTwvQj4gPSBNWTxCUj48QlI+PEI+R01JX0NOVFJZPC9CPiA9IE1ZUzxCUj48QlI+PEI+Q05UUllfTkFNRTwvQj4gPSBNYWxheXNpYTxCUj48QlI+PEI+UkVHSU9OPC9CPiA9IFNvdXRoZWFzdGVybiBBc2lhPEJSPjxCUj48Qj5DT05USU5FTlQ8L0I+ID0gQXNpYTxCUj48QlI+PEI+UE9QX0FETUlOPC9CPiA9IDIwNzQ3NTxCUj48QlI+PEI+U1FLTV9BRE1JTjwvQj4gPSAxMjY2LjI0MzxCUj48QlI+PEI+U1FNSV9BRE1JTjwvQj4gPSA0ODguODk2PEJSPjxCUj48Qj5UWVBFX0VORzwvQj4gPSBTdGF0ZTxCUj48QlI+PEI+VFlQRV9MT0M8L0I+ID0gTmVnZXJpPEJSPjxCUj48Qj5DT0xPUl9NQVA8L0I+ID0gNiBdXT48L2Rlc2NyaXB0aW9uPg0KKyAgICAgIDxzdHlsZVVybD4jYXJlYTE8L3N0eWxlVXJsPg0KKyAgICAgIDxQb2x5Z29uPg0KKyAgICAgICAgPG91dGVyQm91bmRhcnlJcz4NCisgICAgICAgICAgPExpbmVhclJpbmc+DQorICAgICAgICAgICAgPGNvb3JkaW5hdGVzPg0KKyAgICAgICAgICAgICAgOTkuODUyOTUxMDQ5OCw2LjQ2NDE1MzI4OTgsMA0KKyAgICAgICAgICAgICAgOTkuNzk2OTIwNzc2NCw2LjQxMjIyMDk1NDksMA0KKyAgICAgICAgICAgICAgOTkuNzkxMzUxMzE4NCw2LjQxMTEwOTkyNDMsMA0KKyAgICAgICAgICAgICAgOTkuNzQ5NDIwMTY2MCw2LjQwNzc3NjgzMjYsMA0KKyAgICAgICAgICAgICAgOTkuNzMyMjA4MjUyMCw2LjQxMzA1NDQ2NjIsMA0KKyAgICAgICAgICAgICAgOTkuNzI3NDc4MDI3Myw2LjQyMjIyMTE4MzgsMA0KKyAgICAgICAgICAgICAgOTkuNzE2NjU5NTQ1OSw2LjQyNDk5OTIzNzEsMA0KKyAgICAgICAgICAgICAgOTkuNzAzMzIzMzY0Myw2LjQyNjExMDI2NzYsMA0KKyAgICAgICAgICAgICAgOTkuNjQzNjAwNDYzOSw2LjQyNDQ0MzI0NDksMA0KKyAgICAgICAgICAgICAgOTkuNjQwODIzMzY0Myw2LjQxOTcyMDY0OTcsMA0KKyAgICAgICAgICAgICAgOTkuNjQxOTM3MjU1OSw2LjQwNzIyMTc5NDEsMA0KKyAgICAgICAgICAgICAgOTkuNjQ2OTQyMTM4Nyw2LjM4NDk5OTI3NTIsMA0KKyAgICAgICAgICAgICAgOTkuNjUyMjA2NDIwOSw2LjM2OTcyMDQ1OTAsMA0KKyAgICAgICAgICAgICAgOTkuNjU2OTM2NjQ1NSw2LjM2MDgzMjIxNDQsMA0KKyAgICAgICAgICAgICAgOTkuNzM2MzczOTAxNCw2LjI0ODYwOTU0MjgsMA0KKyAgICAgICAgICAgICAgOTkuNzQyNzUyMDc1Miw2LjI0OTE2NTUzNTAsMA0KKyAgICAgICAgICAgICAgOTkuODY5MTI1MzY2Miw2LjI4NzIyMDk1NDksMA0KKyAgICAgICAgICAgICAgOTkuODc0MTMwMjQ5MCw2LjI4OTE2NTQ5NjgsMA0KKyAgICAgICAgICAgICAgOTkuOTIzMDE5NDA5Miw2LjMzMDgzMjQ4MTQsMA0KKyAgICAgICAgICAgICAgOTkuOTIzMDE5NDA5Miw2LjMzNjM4NzYzNDMsMA0KKyAgICAgICAgICAgICAgOTkuOTE3MTkwNTUxOCw2LjM4MzYxMDcyNTQsMA0KKyAgICAgICAgICAgICAgOTkuOTE1ODAyMDAyMCw2LjM4OTE2NTg3ODMsMA0KKyAgICAgICAgICAgICAgOTkuOTExNjM2MzUyNSw2LjM5MTk0MzkzMTYsMA0KKyAgICAgICAgICAgICAgOTkuODkzODU5ODYzMyw2LjQwMTk0MzIwNjgsMA0KKyAgICAgICAgICAgICAgOTkuODczMjkxMDE1Niw2LjQxNjExMDAzODgsMA0KKyAgICAgICAgICAgICAgOTkuODY1Nzk4OTUwMiw2LjQyMjQ5ODcwMzAsMA0KKyAgICAgICAgICAgICAgOTkuODU5MTMwODU5NCw2LjQzNjM4NzA2MjEsMA0KKyAgICAgICAgICAgICAgOTkuODUyOTUxMDQ5OCw2LjQ2NDE1MzI4OTgsMA0KKyAgICAgICAgICAgIDwvY29vcmRpbmF0ZXM+DQorICAgICAgICAgIDwvTGluZWFyUmluZz4NCisgICAgICAgIDwvb3V0ZXJCb3VuZGFyeUlzPg0KKyAgICAgIDwvUG9seWdvbj4NCisgICAgPC9QbGFjZW1hcms+DQorICAgIDxQbGFjZW1hcms+DQorICAgICAgPGRlc2NyaXB0aW9uPjwhW0NEQVRBWyBVbmtub3duIEFyZWEgVHlwZTxCUj48QlI+PEI+RklQU19BRE1JTjwvQj4gPSBNWTA4PEJSPjxCUj48Qj5HTUlfQURNSU48L0I+ID0gTVlTLVBSTDxCUj48QlI+PEI+QURNSU5fTkFNRTwvQj4gPSBQZXJsaXM8QlI+PEJSPjxCPkZJUFNfQ05UUlk8L0I+ID0gTVk8QlI+PEJSPjxCPkdNSV9DTlRSWTwvQj4gPSBNWVM8QlI+PEJSPjxCPkNOVFJZX05BTUU8L0I+ID0gTWFsYXlzaWE8QlI+PEJSPjxCPlJFR0lPTjwvQj4gPSBTb3V0aGVhc3Rlcm4gQXNpYTxCUj48QlI+PEI+Q09OVElORU5UPC9CPiA9IEFzaWE8QlI+PEJSPjxCPlBPUF9BRE1JTjwvQj4gPSAyMDc0NzU8QlI+PEJSPjxCPlNRS01fQURNSU48L0I+ID0gMTI2Ni4yNDM8QlI+PEJSPjxCPlNRTUlfQURNSU48L0I+ID0gNDg4Ljg5NjxCUj48QlI+PEI+VFlQRV9FTkc8L0I+ID0gU3RhdGU8QlI+PEJSPjxCPlRZUEVfTE9DPC9CPiA9IE5lZ2VyaTxCUj48QlI+PEI+Q09MT1JfTUFQPC9CPiA9IDYgXV0+PC9kZXNjcmlwdGlvbj4NCisgICAgICA8c3R5bGVVcmw+I2FyZWExPC9zdHlsZVVybD4NCisgICAgICA8UG9seWdvbj4NCisgICAgICAgIDxvdXRlckJvdW5kYXJ5SXM+DQorICAgICAgICAgIDxMaW5lYXJSaW5nPg0KKyAgICAgICAgICAgIDxjb29yZGluYXRlcz4NCisgICAgICAgICAgICAgIDk5LjgzNTc2OTY1MzMsNi4yNTg4MzQ4Mzg5LDANCisgICAgICAgICAgICAgIDk5Ljg0NDQyMTM4NjcsNi4yNzA1NTQ1NDI1LDANCisgICAgICAgICAgICAgIDk5Ljg0Mzg1NjgxMTUsNi4yNzY2NjU2ODc2LDANCisgICAgICAgICAgICAgIDk5LjgzOTE0MTg0NTcsNi4yNzc0OTkxOTg5LDANCisgICAgICAgICAgICAgIDk5LjgzMzU4NzY0NjUsNi4yNzYzODgxNjgzLDANCisgICAgICAgICAgICAgIDk5LjgyODU4Mjc2MzcsNi4yNzQxNjYxMDcyLDANCisgICAgICAgICAgICAgIDk5LjgwNjA3NjA0OTgsNi4yNTU1NTUxNTI5LDANCisgICAgICAgICAgICAgIDk5Ljc3NjY0MTg0NTcsNi4yMDgzMzMwMTU0LDANCisgICAgICAgICAgICAgIDk5Ljc3NTgwMjYxMjMsNi4yMDIyMjE4NzA0LDANCisgICAgICAgICAgICAgIDk5Ljc3ODg1NDM3MDEsNi4xOTE5NDMxNjg2LDANCisgICAgICAgICAgICAgIDk5Ljc4MDgwNzQ5NTEsNi4xODY5NDMwNTQyLDANCisgICAgICAgICAgICAgIDk5Ljc4NjM2MTY5NDMsNi4xNzg2MDk4NDgwLDANCisgICAgICAgICAgICAgIDk5Ljc5MzAyOTc4NTIsNi4xNzEzODc2NzI0LDANCisgICAgICAgICAgICAgIDk5LjgwODAxMzkxNjAsNi4xNTg4ODc4NjMyLDANCisgICAgICAgICAgICAgIDk5LjgxMzAxODc5ODgsNi4xNTY2NjU4MDIwLDANCisgICAgICAgICAgICAgIDk5LjgxODU4ODI1NjgsNi4xNTc3NzY4MzI2LDANCisgICAgICAgICAgICAgIDk5LjgyMTkxNDY3MjksNi4xNjExMDk5MjQzLDANCisgICAgICAgICAgICAgIDk5LjgyOTk3MTMxMzUsNi4xNzQxNjU3MjU3LDANCisgICAgICAgICAgICAgIDk5LjgzNzE4ODcyMDcsNi4xODc3NzY1NjU2LDANCisgICAgICAgICAgICAgIDk5LjgzNzE4ODcyMDcsNi4xOTMzMzE3MTg0LDANCisgICAgICAgICAgICAgIDk5LjgzNTc2OTY1MzMsNi4yNTg4MzQ4Mzg5LDANCisgICAgICAgICAgICA8L2Nvb3JkaW5hdGVzPg0KKyAgICAgICAgICA8L0xpbmVhclJpbmc+DQorICAgICAgICA8L291dGVyQm91bmRhcnlJcz4NCisgICAgICA8L1BvbHlnb24+DQorICAgIDwvUGxhY2VtYXJrPg0KKyAgICA8UGxhY2VtYXJrPg0KKyAgICAgIDxkZXNjcmlwdGlvbj48IVtDREFUQVsgVW5rbm93biBBcmVhIFR5cGU8QlI+PEJSPjxCPkZJUFNfQURNSU48L0I+ID0gTVkwODxCUj48QlI+PEI+R01JX0FETUlOPC9CPiA9IE1ZUy1QUkw8QlI+PEJSPjxCPkFETUlOX05BTUU8L0I+ID0gUGVybGlzPEJSPjxCUj48Qj5GSVBTX0NOVFJZPC9CPiA9IE1ZPEJSPjxCUj48Qj5HTUlfQ05UUlk8L0I+ID0gTVlTPEJSPjxCUj48Qj5DTlRSWV9OQU1FPC9CPiA9IE1hbGF5c2lhPEJSPjxCUj48Qj5SRUdJT048L0I+ID0gU291dGhlYXN0ZXJuIEFzaWE8QlI+PEJSPjxCPkNPTlRJTkVOVDwvQj4gPSBBc2lhPEJSPjxCUj48Qj5QT1BfQURNSU48L0I+ID0gMjA3NDc1PEJSPjxCUj48Qj5TUUtNX0FETUlOPC9CPiA9IDEyNjYuMjQzPEJSPjxCUj48Qj5TUU1JX0FETUlOPC9CPiA9IDQ4OC44OTY8QlI+PEJSPjxCPlRZUEVfRU5HPC9CPiA9IFN0YXRlPEJSPjxCUj48Qj5UWVBFX0xPQzwvQj4gPSBOZWdlcmk8QlI+PEJSPjxCPkNPTE9SX01BUDwvQj4gPSA2IF1dPjwvZGVzY3JpcHRpb24+DQorICAgICAgPHN0eWxlVXJsPiNhcmVhMTwvc3R5bGVVcmw+DQorICAgICAgPFBvbHlnb24+DQorICAgICAgICA8b3V0ZXJCb3VuZGFyeUlzPg0KKyAgICAgICAgICA8TGluZWFyUmluZz4NCisgICAgICAgICAgICA8Y29vcmRpbmF0ZXM+DQorICAgICAgICAgICAgICAxMDAuMTk0NDEyMjMxNCw2LjI1NjAwMDUxODgsMA0KKyAgICAgICAgICAgICAgMTAwLjIxMTkwNjQzMzEsNi4yOTY2NjYxNDUzLDANCisgICAgICAgICAgICAgIDEwMC4yOTQxMjg0MTgwLDYuMzkwODMyOTAxMCwwDQorICAgICAgICAgICAgICAxMDAuMzI0NjkxNzcyNSw2LjQyMzYwOTczMzYsMA0KKyAgICAgICAgICAgICAgMTAwLjMzNDcwMTUzODEsNi40MzE5NDI5Mzk4LDANCisgICAgICAgICAgICAgIDEwMC4zNDg4NjE2OTQzLDYuNDQwODMyMTM4MSwwDQorICAgICAgICAgICAgICAxMDAuMzU3NDY3NjUxNCw2LjQ0NTI3NjI2MDQsMA0KKyAgICAgICAgICAgICAgMTAwLjM2MjQ3MjUzNDIsNi40NDk3MjAzODI3LDANCisgICAgICAgICAgICAgIDEwMC4zNjU1MTY2NjI2LDYuNDU1NTU0OTYyMiwwDQorICAgICAgICAgICAgICAxMDAuMzY3NDYyMTU4Miw2LjQ2MjQ5OTYxODUsMA0KKyAgICAgICAgICAgICAgMTAwLjM3MDIzOTI1NzgsNi40NzM2MDk5MjQzLDANCisgICAgICAgICAgICAgIDEwMC4zNzUyMzY1MTEyLDYuNTAwMDAwMDAwMCwwDQorICAgICAgICAgICAgICAxMDAuMzc2MDY4MTE1Miw2LjUwODA1NDczMzMsMA0KKyAgICAgICAgICAgICAgMTAwLjM3OTA0MzU3OTEsNi41NDA3NjU3NjIzLDANCisgICAgICAgICAgICAgIDEwMC4zNzQzOTcyNzc4LDYuNTQzODg4MDkyMCwwDQorICAgICAgICAgICAgICAxMDAuMzM2OTA2NDMzMSw2LjU4Mjc3NzAyMzMsMA0KKyAgICAgICAgICAgICAgMTAwLjMzNDQxMTYyMTEsNi41ODY5NDM2MjY0LDANCisgICAgICAgICAgICAgIDEwMC4zMzI0NzM3NTQ5LDYuNTkxOTQzNzQwOCwwDQorICAgICAgICAgICAgICAxMDAuMzMxMzU5ODYzMyw2LjYwNDE2NjAzMDksMA0KKyAgICAgICAgICAgICAgMTAwLjMzMTY0OTc4MDMsNi42MTgwNTQzOTAwLDANCisgICAgICAgICAgICAgIDEwMC4zMzEwOTI4MzQ1LDYuNjI0MTY1NTM1MCwwDQorICAgICAgICAgICAgICAxMDAuMzI4NTgyNzYzNyw2LjYzNTI3Njc5NDQsMA0KKyAgICAgICAgICAgICAgMTAwLjMwNTUyNjczMzQsNi42OTQ3MjEyMjE5LDANCisgICAgICAgICAgICAgIDEwMC4zMDI3NDk2MzM4LDYuNjk4ODg3ODI1MCwwDQorICAgICAgICAgICAgICAxMDAuMjk4ODU4NjQyNiw2LjcwMTY2NTg3ODMsMA0KKyAgICAgICAgICAgICAgMTAwLjI5Mzg1Mzc1OTgsNi43MDM4ODc5Mzk1LDANCisgICAgICAgICAgICAgIDEwMC4yNjQxMzcyNjgxLDYuNzA2NjY1OTkyNywwDQorICAgICAgICAgICAgICAxMDAuMjE0OTgxMDc5MSw2LjcxMTExMDExNTEsMA0KKyAgICAgICAgICAgICAgMTAwLjIwMzg0MjE2MzEsNi43MDkzNjc3NTIxLDANCisgICAgICAgICAgICAgIDEwMC4xOTg4NTI1MzkxLDYuNzA2NjY1OTkyNywwDQorICAgICAgICAgICAgICAxMDAuMTk1ODAwNzgxMyw2LjcwMjQ5OTM4OTYsMA0KKyAgICAgICAgICAgICAgMTAwLjE5MTY0Mjc2MTIsNi42OTMwNTQxOTkyLDANCisgICAgICAgICAgICAgIDEwMC4xODk5NTY2NjUwLDYuNjg3NDk5MDQ2MywwDQorICAgICAgICAgICAgICAxMDAuMTc0NjgyNjE3Miw2LjYyNTgzMTYwNDAsMA0KKyAgICAgICAgICAgICAgMTAwLjE3NDQwNzk1OTAsNi42MTg4ODc5MDEzLDANCisgICAgICAgICAgICAgIDEwMC4xODA1MjY3MzM0LDYuNjA0MTY2MDMwOSwwDQorICAgICAgICAgICAgICAxMDAuMTg3NzM2NTExMiw2LjU5MDgzMjcxMDMsMA0KKyAgICAgICAgICAgICAgMTAwLjE5MTkwOTc5MDAsNi41ODExMTA5NTQzLDANCisgICAgICAgICAgICAgIDEwMC4xOTM1NzI5OTgwLDYuNTY5NDQzNzAyNywwDQorICAgICAgICAgICAgICAxMDAuMTcxMzU2MjAxMiw2LjQ3NjY2NTQ5NjgsMA0KKyAgICAgICAgICAgICAgMTAwLjE2NjkyMzUyMjksNi40NjY5NDM3NDA4LDANCisgICAgICAgICAgICAgIDEwMC4xNjQxMzg3OTM5LDYuNDYzMDU0NjU3MCwwDQorICAgICAgICAgICAgICAxMDAuMTQxOTIxOTk3MSw2LjQzNjY2NTUzNTAsMA0KKyAgICAgICAgICAgICAgMTAwLjEyNzExMzM0MjMsNi40MjQ5NDY3ODUwLDANCisgICAgICAgICAgICAgIDEwMC4xMjY4NjE1NzIzLDYuNDE5NjE2Njk5MiwwDQorICAgICAgICAgICAgICAxMDAuMTI4ODUyODQ0Miw2LjQwNzc3NjgzMjYsMA0KKyAgICAgICAgICAgICAgMTAwLjE2MDc5NzExOTEsNi4zMTY2NjY2MDMxLDANCisgICAgICAgICAgICAgIDEwMC4xNzE5MTMxNDcwLDYuMjg2NjY1OTE2NCwwDQorICAgICAgICAgICAgICAxMDAuMTg0NjkyMzgyOCw2LjI2NDk5OTM4OTYsMA0KKyAgICAgICAgICAgICAgMTAwLjE5MTM1Mjg0NDIsNi4yNTgwNTQ3MzMzLDANCisgICAgICAgICAgICAgIDEwMC4xOTQ0MTIyMzE0LDYuMjU2MDAwNTE4OCwwDQorICAgICAgICAgICAgPC9jb29yZGluYXRlcz4NCisgICAgICAgICAgPC9MaW5lYXJSaW5nPg0KKyAgICAgICAgPC9vdXRlckJvdW5kYXJ5SXM+DQorICAgICAgPC9Qb2x5Z29uPg0KKyAgICA8L1BsYWNlbWFyaz4NCisgICAgPFBsYWNlbWFyaz4NCisgICAgICA8ZGVzY3JpcHRpb24+PCFbQ0RBVEFbIFVua25vd24gQXJlYSBUeXBlPEJSPjxCUj48Qj5GSVBTX0FETUlOPC9CPiA9IE1ZMDk8QlI+PEJSPjxCPkdNSV9BRE1JTjwvQj4gPSBNWVMtUFBOPEJSPjxCUj48Qj5BRE1JTl9OQU1FPC9CPiA9IFB1bGF1IFBpbmFuZzxCUj48QlI+PEI+RklQU19DTlRSWTwvQj4gPSBNWTxCUj48QlI+PEI+R01JX0NOVFJZPC9CPiA9IE1ZUzxCUj48QlI+PEI+Q05UUllfTkFNRTwvQj4gPSBNYWxheXNpYTxCUj48QlI+PEI+UkVHSU9OPC9CPiA9IFNvdXRoZWFzdGVybiBBc2lhPEJSPjxCUj48Qj5DT05USU5FTlQ8L0I+ID0gQXNpYTxCUj48QlI+PEI+UE9QX0FETUlOPC9CPiA9IDEyNjI1Mzg8QlI+PEJSPjxCPlNRS01fQURNSU48L0I+ID0gMTAyNC4xOTk8QlI+PEJSPjxCPlNRTUlfQURNSU48L0I+ID0gMzk1LjQ0MzxCUj48QlI+PEI+VFlQRV9FTkc8L0I+ID0gU3RhdGU8QlI+PEJSPjxCPlRZUEVfTE9DPC9CPiA9IE5lZ2VyaTxCUj48QlI+PEI+Q09MT1JfTUFQPC9CPiA9IDEyIF1dPjwvZGVzY3JpcHRpb24+DQorICAgICAgPHN0eWxlVXJsPiNhcmVhMTwvc3R5bGVVcmw+DQorICAgICAgPFBvbHlnb24+DQorICAgICAgICA8b3V0ZXJCb3VuZGFyeUlzPg0KKyAgICAgICAgICA8TGluZWFyUmluZz4NCisgICAgICAgICAgICA8Y29vcmRpbmF0ZXM+DQorICAgICAgICAgICAgICAxMDAuMzA4MjczMzE1NCw1LjQ0NjExOTMwODUsMA0KKyAgICAgICAgICAgICAgMTAwLjMwNjkyMjkxMjYsNS40NTAyNzczMjg1LDANCisgICAgICAgICAgICAgIDEwMC4zMDM1NzM2MDg0LDUuNDUzNjEwNDIwMiwwDQorICAgICAgICAgICAgICAxMDAuMjk0MTI4NDE4MCw1LjQ1ODA1NDU0MjUsMA0KKyAgICAgICAgICAgICAgMTAwLjI3Mjc1MDg1NDUsNS40NjQ3MjE2Nzk3LDANCisgICAgICAgICAgICAgIDEwMC4yNjEwOTMxMzk2LDUuNDY2OTQzNzQwOCwwDQorICAgICAgICAgICAgICAxMDAuMjQ3NzQxNjk5Miw1LjQ2NjY2NjIyMTYsMA0KKyAgICAgICAgICAgICAgMTAwLjE4ODg1ODAzMjIsNS40NjQ0NDQxNjA1LDANCisgICAgICAgICAgICAgIDEwMC4xODM4NTMxNDk0LDUuNDYyNDk5NjE4NSwwDQorICAgICAgICAgICAgICAxMDAuMTgxNjQwNjI1MCw1LjQ1Nzc3NzAyMzMsMA0KKyAgICAgICAgICAgICAgMTAwLjE3OTY4NzUwMDAsNS40Mjc0OTg4MTc0LDANCisgICAgICAgICAgICAgIDEwMC4xOTYwODMwNjg4LDUuMjkzMzMyMDk5OSwwDQorICAgICAgICAgICAgICAxMDAuMjAzODU3NDIxOSw1LjI3MTExMDUzNDcsMA0KKyAgICAgICAgICAgICAgMTAwLjI4NTI0NzgwMjcsNS4yNTI3NzcwOTk2LDANCisgICAgICAgICAgICAgIDEwMC4yODg4NTY1MDYzLDUuMjU2MTEwMTkxMywwDQorICAgICAgICAgICAgICAxMDAuMzE2OTMyNjc4Miw1LjMzMjc3NzAyMzMsMA0KKyAgICAgICAgICAgICAgMTAwLjMxODMxMzU5ODYsNS4zMzgwNTQ2NTcwLDANCisgICAgICAgICAgICAgIDEwMC4zMjQ2OTE3NzI1LDUuMzgwODMxNzE4NCwwDQorICAgICAgICAgICAgICAxMDAuMzIwMjUxNDY0OCw1LjQyNzc3NjMzNjcsMA0KKyAgICAgICAgICAgICAgMTAwLjMwODI3MzMxNTQsNS40NDYxMTkzMDg1LDANCisgICAgICAgICAgICA8L2Nvb3JkaW5hdGVzPg0KKyAgICAgICAgICA8L0xpbmVhclJpbmc+DQorICAgICAgICA8L291dGVyQm91bmRhcnlJcz4NCisgICAgICA8L1BvbHlnb24+DQorICAgIDwvUGxhY2VtYXJrPg0KKyAgICA8UGxhY2VtYXJrPg0KKyAgICAgIDxkZXNjcmlwdGlvbj48IVtDREFUQVsgVW5rbm93biBBcmVhIFR5cGU8QlI+PEJSPjxCPkZJUFNfQURNSU48L0I+ID0gTVkwOTxCUj48QlI+PEI+R01JX0FETUlOPC9CPiA9IE1ZUy1QUE48QlI+PEJSPjxCPkFETUlOX05BTUU8L0I+ID0gUHVsYXUgUGluYW5nPEJSPjxCUj48Qj5GSVBTX0NOVFJZPC9CPiA9IE1ZPEJSPjxCUj48Qj5HTUlfQ05UUlk8L0I+ID0gTVlTPEJSPjxCUj48Qj5DTlRSWV9OQU1FPC9CPiA9IE1hbGF5c2lhPEJSPjxCUj48Qj5SRUdJT048L0I+ID0gU291dGhlYXN0ZXJuIEFzaWE8QlI+PEJSPjxCPkNPTlRJTkVOVDwvQj4gPSBBc2lhPEJSPjxCUj48Qj5QT1BfQURNSU48L0I+ID0gMTI2MjUzODxCUj48QlI+PEI+U1FLTV9BRE1JTjwvQj4gPSAxMDI0LjE5OTxCUj48QlI+PEI+U1FNSV9BRE1JTjwvQj4gPSAzOTUuNDQzPEJSPjxCUj48Qj5UWVBFX0VORzwvQj4gPSBTdGF0ZTxCUj48QlI+PEI+VFlQRV9MT0M8L0I+ID0gTmVnZXJpPEJSPjxCUj48Qj5DT0xPUl9NQVA8L0I+ID0gMTIgXV0+PC9kZXNjcmlwdGlvbj4NCisgICAgICA8c3R5bGVVcmw+I2FyZWExPC9zdHlsZVVybD4NCisgICAgICA8UG9seWdvbj4NCisgICAgICAgIDxvdXRlckJvdW5kYXJ5SXM+DQorICAgICAgICAgIDxMaW5lYXJSaW5nPg0KKyAgICAgICAgICAgIDxjb29yZGluYXRlcz4NCisgICAgICAgICAgICAgIDEwMC40MDQ2NjMwODU5LDUuMTE5OTk4OTMxOSwwDQorICAgICAgICAgICAgICAxMDAuNDc4MDI3MzQzOCw1LjEzODMzMjM2NjksMA0KKyAgICAgICAgICAgICAgMTAwLjQ4NDk3MDA5MjgsNS4xMzk3MjE4NzA0LDANCisgICAgICAgICAgICAgIDEwMC40ODk2OTI2ODgwLDUuMTM5NDQzMzk3NSwwDQorICAgICAgICAgICAgICAxMDAuNTAzNTYyOTI3Miw1LjEzNDIwMjAwMzUsMA0KKyAgICAgICAgICAgICAgMTAwLjUxODg1OTg2MzMsNS4xMjgzMzIxMzgxLDANCisgICAgICAgICAgICAgIDEwMC41MjY2NDE4NDU3LDUuMTI2OTQzNTg4MywwDQorICAgICAgICAgICAgICAxMDAuNTM5MTM4NzkzOSw1LjEyNzIyMTEwNzUsMA0KKyAgICAgICAgICAgICAgMTAwLjU1MDI0NzE5MjQsNS4xMjk5OTkxNjA4LDANCisgICAgICAgICAgICAgIDEwMC41NTgyOTYyMDM2LDUuMTM1Mjc2Nzk0NCwwDQorICAgICAgICAgICAgICAxMDAuNTU5NjkyMzgyOCw1LjEzODYxMDgzOTgsMA0KKyAgICAgICAgICAgICAgMTAwLjU1OTY5MjM4MjgsNS4xNDMwNTQ5NjIyLDANCisgICAgICAgICAgICAgIDEwMC41NDY5MjA3NzY0LDUuMjQxOTQzMzU5NCwwDQorICAgICAgICAgICAgICAxMDAuNTQzMjk2ODE0MCw1LjI2MDgzMjc4NjYsMA0KKyAgICAgICAgICAgICAgMTAwLjU0MDI1MjY4NTUsNS4yNzU4MzIxNzYyLDANCisgICAgICAgICAgICAgIDEwMC41MzYwODcwMzYxLDUuMjk4NjA5NzMzNiwwDQorICAgICAgICAgICAgICAxMDAuNTMyMjAzNjc0Myw1LjMzNDk5OTA4NDUsMA0KKyAgICAgICAgICAgICAgMTAwLjUyNDY4ODcyMDcsNS40NTYxMTAwMDA2LDANCisgICAgICAgICAgICAgIDEwMC41MjQ2ODg3MjA3LDUuNDk1Mjc2NDUxMSwwDQorICAgICAgICAgICAgICAxMDAuNTI1MjUzMjk1OSw1LjUxNjk0MzkzMTYsMA0KKyAgICAgICAgICAgICAgMTAwLjUyNjM2NzE4NzUsNS41MjkxNjYyMjE2LDANCisgICAgICAgICAgICAgIDEwMC41Mjk0MTg5NDUzLDUuNTQ0NDQzMTMwNSwwDQorICAgICAgICAgICAgICAxMDAuNTMwODA3NDk1MSw1LjU0NzQ5ODcwMzAsMA0KKyAgICAgICAgICAgICAgMTAwLjM5MzA5NjkyMzgsNS41Njg5MTQ0MTM1LDANCisgICAgICAgICAgICAgIDEwMC4zODA3OTgzMzk4LDUuNTcwMjc3MjE0MSwwDQorICAgICAgICAgICAgICAxMDAuMzQ5MTM2MzUyNSw1LjU2OTE2NjE4MzUsMA0KKyAgICAgICAgICAgICAgMTAwLjM3MTYyNzgwNzYsNS41NDMzMzIwOTk5LDANCisgICAgICAgICAgICAgIDEwMC4zNzQxMzAyNDkwLDUuNTM5MTY1NDk2OCwwDQorICAgICAgICAgICAgICAxMDAuMzgwMjQ5MDIzNCw1LjUyNDQ0MzYyNjQsMA0KKyAgICAgICAgICAgICAgMTAwLjM4MjczNjIwNjEsNS41MTMzMzMzMjA2LDANCisgICAgICAgICAgICAgIDEwMC40MzA4MDEzOTE2LDUuMjgyNDk5MzEzNCwwDQorICAgICAgICAgICAgICAxMDAuNDMzNTc4NDkxMiw1LjE5NDE2NTIyOTgsMA0KKyAgICAgICAgICAgICAgMTAwLjQyNDY4MjYxNzIsNS4xNjgwNTQ1ODA3LDANCisgICAgICAgICAgICAgIDEwMC40MTI3NTAyNDQxLDUuMTM4MDU0ODQ3NywwDQorICAgICAgICAgICAgICAxMDAuNDA0NjYzMDg1OSw1LjExOTk5ODkzMTksMA0KKyAgICAgICAgICAgIDwvY29vcmRpbmF0ZXM+DQorICAgICAgICAgIDwvTGluZWFyUmluZz4NCisgICAgICAgIDwvb3V0ZXJCb3VuZGFyeUlzPg0KKyAgICAgIDwvUG9seWdvbj4NCisgICAgPC9QbGFjZW1hcms+DQorICAgIDxQbGFjZW1hcms+DQorICAgICAgPGRlc2NyaXB0aW9uPjwhW0NEQVRBWyBVbmtub3duIEFyZWEgVHlwZTxCUj48QlI+PEI+RklQU19BRE1JTjwvQj4gPSBNWTExPEJSPjxCUj48Qj5HTUlfQURNSU48L0I+ID0gTVlTLVNSVzxCUj48QlI+PEI+QURNSU5fTkFNRTwvQj4gPSBTYXJhd2FrPEJSPjxCUj48Qj5GSVBTX0NOVFJZPC9CPiA9IE1ZPEJSPjxCUj48Qj5HTUlfQ05UUlk8L0I+ID0gTVlTPEJSPjxCUj48Qj5DTlRSWV9OQU1FPC9CPiA9IE1hbGF5c2lhPEJSPjxCUj48Qj5SRUdJT048L0I+ID0gU291dGhlYXN0ZXJuIEFzaWE8QlI+PEJSPjxCPkNPTlRJTkVOVDwvQj4gPSBBc2lhPEJSPjxCUj48Qj5QT1BfQURNSU48L0I+ID0gMTg0NDg0MDxCUj48QlI+PEI+U1FLTV9BRE1JTjwvQj4gPSAxMjM2MzguMDAwPEJSPjxCUj48Qj5TUU1JX0FETUlOPC9CPiA9IDQ3NzM2LjYyOTxCUj48QlI+PEI+VFlQRV9FTkc8L0I+ID0gU3RhdGU8QlI+PEJSPjxCPlRZUEVfTE9DPC9CPiA9IE5lZ2VyaTxCUj48QlI+PEI+Q09MT1JfTUFQPC9CPiA9IDEwIF1dPjwvZGVzY3JpcHRpb24+DQorICAgICAgPHN0eWxlVXJsPiNhcmVhMTwvc3R5bGVVcmw+DQorICAgICAgPFBvbHlnb24+DQorICAgICAgICA8b3V0ZXJCb3VuZGFyeUlzPg0KKyAgICAgICAgICA8TGluZWFyUmluZz4NCisgICAgICAgICAgICA8Y29vcmRpbmF0ZXM+DQorICAgICAgICAgICAgICAxMTEuMzExODM2MjQyNywyLjQ5NzIxNjcwMTUsMA0KKyAgICAgICAgICAgICAgMTExLjMwNTU0MTk5MjIsMi40NjYzODgyMjU2LDANCisgICAgICAgICAgICAgIDExMS4zMDM1ODg4NjcyLDIuNDU0NzIxOTI3NiwwDQorICAgICAgICAgICAgICAxMTEuMzAzNTg4ODY3MiwyLjQ0ODA1NDc5MDUsMA0KKyAgICAgICAgICAgICAgMTExLjMwNDk3NzQxNzAsMi40NDI0OTkxNjA4LDANCisgICAgICAgICAgICAgIDExMS4zNTA4MDcxODk5LDIuMzcxOTQzOTUwNywwDQorICAgICAgICAgICAgICAxMTEuMzY1MjU3MjYzMiwyLjM1ODg4ODYyNjEsMA0KKyAgICAgICAgICAgICAgMTExLjM3MDgxOTA5MTgsMi4zNjAyNzc2NTI3LDANCisgICAgICAgICAgICAgIDExMS40MDkxNDkxNjk5LDIuMzczODg4NDkyNiwwDQorICAgICAgICAgICAgICAxMTEuNDEzODc5Mzk0NSwyLjM3NjExMDU1MzcsMA0KKyAgICAgICAgICAgICAgMTExLjQxMzg3OTM5NDUsMi4zODE2NjYxODM1LDANCisgICAgICAgICAgICAgIDExMS40MDU4MjI3NTM5LDIuMzkzODg4NDczNSwwDQorICAgICAgICAgICAgICAxMTEuMzk5NDI5MzIxMywyLjQwODA1NDgyODYsMA0KKyAgICAgICAgICAgICAgMTExLjM4MTA4ODI1NjgsMi40NzE5NDM4NTUzLDANCisgICAgICAgICAgICAgIDExMS4zNzgzMTExNTcyLDIuNDgyNzc3MTE4NywwDQorICAgICAgICAgICAgICAxMTEuMzc2OTIyNjA3NCwyLjQ5NTI3NzQwNDgsMA0KKyAgICAgICAgICAgICAgMTExLjM3NjkyMjYwNzQsMi41MzYxMTA4NzgwLDANCisgICAgICAgICAgICAgIDExMS4zODAyNTY2NTI4LDIuNjE0OTk5NzcxMSwwDQorICAgICAgICAgICAgICAxMTEuMzgzODgwNjE1MiwyLjY1MjQ5OTE5ODksMA0KKyAgICAgICAgICAgICAgMTExLjM4Mzg4MDYxNTIsMi42Nzk5OTk4MjgzLDANCisgICAgICAgICAgICAgIDExMS4zODE2NTI4MzIwLDIuNjk4MzMyNzg2NiwwDQorICAgICAgICAgICAgICAxMTEuMzc3NzYxODQwOCwyLjcwODA1NTAxOTQsMA0KKyAgICAgICAgICAgICAgMTExLjM1NDQzMTE1MjMsMi43NTk5OTk3NTIwLDANCisgICAgICAgICAgICAgIDExMS4zNDg4NzY5NTMxLDIuNzY4MzMyOTU4MiwwDQorICAgICAgICAgICAgICAxMTEuMzQxOTI2NTc0NywyLjc3NTI3NzEzNzgsMA0KKyAgICAgICAgICAgICAgMTExLjMzMzA1MzU4ODksMi43Nzk5OTk3MzMwLDANCisgICAgICAgICAgICAgIDExMS4zMjc0NzY1MDE1LDIuNzgxMzg4MjgyOCwwDQorICAgICAgICAgICAgICAxMTEuMzIyMjE5ODQ4NiwyLjc3OTk5OTczMzAsMA0KKyAgICAgICAgICAgICAgMTExLjMxMjQ3NzExMTgsMi43NzU4MzI2NTMwLDANCisgICAgICAgICAgICAgIDExMS4zMDQ5Nzc0MTcwLDIuNzY5NzIxNTA4MCwwDQorICAgICAgICAgICAgICAxMTEuMzAyMjAwMzE3NCwyLjc2NTU1NTM4MTgsMA0KKyAgICAgICAgICAgICAgMTExLjI5NjA5NjgwMTgsMi43NTExMTEwMzA2LDANCisgICAgICAgICAgICAgIDExMS4yOTQ3MDgyNTIwLDIuNzQ1ODMyOTIwMSwwDQorICAgICAgICAgICAgICAxMTEuMjkzMzE5NzAyMSwyLjczMzMzMzExMDgsMA0KKyAgICAgICAgICAgICAgMTExLjI5NTI1NzU2ODQsMi42ODA4MzI4NjI5LDANCisgICAgICAgICAgICAgIDExMS4zMDQ5Nzc0MTcwLDIuNTk0NDQzNzk4MSwwDQorICAgICAgICAgICAgICAxMTEuMzExODM2MjQyNywyLjQ5NzIxNjcwMTUsMA0KKyAgICAgICAgICAgIDwvY29vcmRpbmF0ZXM+DQorICAgICAgICAgIDwvTGluZWFyUmluZz4NCisgICAgICAgIDwvb3V0ZXJCb3VuZGFyeUlzPg0KKyAgICAgIDwvUG9seWdvbj4NCisgICAgPC9QbGFjZW1hcms+DQorICAgIDxQbGFjZW1hcms+DQorICAgICAgPGRlc2NyaXB0aW9uPjwhW0NEQVRBWyBVbmtub3duIEFyZWEgVHlwZTxCUj48QlI+PEI+RklQU19BRE1JTjwvQj4gPSBNWTExPEJSPjxCUj48Qj5HTUlfQURNSU48L0I+ID0gTVlTLVNSVzxCUj48QlI+PEI+QURNSU5fTkFNRTwvQj4gPSBTYXJhd2FrPEJSPjxCUj48Qj5GSVBTX0NOVFJZPC9CPiA9IE1ZPEJSPjxCUj48Qj5HTUlfQ05UUlk8L0I+ID0gTVlTPEJSPjxCUj48Qj5DTlRSWV9OQU1FPC9CPiA9IE1hbGF5c2lhPEJSPjxCUj48Qj5SRUdJT048L0I+ID0gU291dGhlYXN0ZXJuIEFzaWE8QlI+PEJSPjxCPkNPTlRJTkVOVDwvQj4gPSBBc2lhPEJSPjxCUj48Qj5QT1BfQURNSU48L0I+ID0gMTg0NDg0MDxCUj48QlI+PEI+U1FLTV9BRE1JTjwvQj4gPSAxMjM2MzguMDAwPEJSPjxCUj48Qj5TUU1JX0FETUlOPC9CPiA9IDQ3NzM2LjYyOTxCUj48QlI+PEI+VFlQRV9FTkc8L0I+ID0gU3RhdGU8QlI+PEJSPjxCPlRZUEVfTE9DPC9CPiA9IE5lZ2VyaTxCUj48QlI+PEI+Q09MT1JfTUFQPC9CPiA9IDEwIF1dPjwvZGVzY3JpcHRpb24+DQorICAgICAgPHN0eWxlVXJsPiNhcmVhMTwvc3R5bGVVcmw+DQorICAgICAgPFBvbHlnb24+DQorICAgICAgICA8b3V0ZXJCb3VuZGFyeUlzPg0KKyAgICAgICAgICA8TGluZWFyUmluZz4NCisgICAgICAgICAgICA8Y29vcmRpbmF0ZXM+DQorICAgICAgICAgICAgICAxMTQuMDk1MDc3NTE0Niw0LjU5MDUzODAyNDksMA0KKyAgICAgICAgICAgICAgMTE0LjA2NjY3MzI3ODgsNC41OTU1NTQzNTE4LDANCisgICAgICAgICAgICAgIDExNC4wMTExMDgzOTg0LDQuNTk4ODg4Mzk3MiwwDQorICAgICAgICAgICAgICAxMTMuOTk4MDMxNjE2Miw0LjU5OTQ0MzQzNTcsMA0KKyAgICAgICAgICAgICAgMTEzLjk4NjM2NjI3MjAsNC41OTc0OTg4OTM3LDANCisgICAgICAgICAgICAgIDExMy45NzY5Mjg3MTA5LDQuNTkzMzMyMjkwNiwwDQorICAgICAgICAgICAgICAxMTMuOTcyNzYzMDYxNSw0LjU5MDU1NTE5MTAsMA0KKyAgICAgICAgICAgICAgMTEzLjk2NzIwODg2MjMsNC41ODI0OTk1MDQxLDANCisgICAgICAgICAgICAgIDExMy45NjMwNDMyMTI5LDQuNTczMDU1MjY3MywwDQorICAgICAgICAgICAgICAxMTMuOTYzMDQzMjEyOSw0LjU2NjEwOTY1NzMsMA0KKyAgICAgICAgICAgICAgMTEzLjk2NTgyMDMxMjUsNC41NTUyNzY4NzA3LDANCisgICAgICAgICAgICAgIDExMy45NzQxNTE2MTEzLDQuNTM2MTA5OTI0MywwDQorICAgICAgICAgICAgICAxMTMuOTg0NDIwNzc2NCw0LjUxMTM4ODc3ODcsMA0KKyAgICAgICAgICAgICAgMTEzLjk4OTE1MTAwMTAsNC40OTU4MzI0NDMyLDANCisgICAgICAgICAgICAgIDExMy45OTE5MjgxMDA2LDQuNDg0NzIxMTgzOCwwDQorICAgICAgICAgICAgICAxMTMuOTkzMzE2NjUwNCw0LjQ3MjQ5ODg5MzcsMA0KKyAgICAgICAgICAgICAgMTEzLjk5NDcxMjgyOTYsNC40NTMzMzI5MDEwLDANCisgICAgICAgICAgICAgIDExMy45OTQ3MTI4Mjk2LDQuNDM5NzIxMTA3NSwwDQorICAgICAgICAgICAgICAxMTMuOTkwNTM5NTUwOCw0LjQyMzMzMjIxNDQsMA0KKyAgICAgICAgICAgICAgMTEzLjk2NDQzMTc2MjcsNC4zMjEzODgyNDQ2LDANCisgICAgICAgICAgICAgIDExMy45NDM4NjI5MTUwLDQuMjc0NDQzNjI2NCwwDQorICAgICAgICAgICAgICAxMTMuOTM0NDE3NzI0Niw0LjI1NjY2NjE4MzUsMA0KKyAgICAgICAgICAgICAgMTEzLjkyNjA4NjQyNTgsNC4yNDQxNjU0MjA1LDANCisgICAgICAgICAgICAgIDExMy43NzY2NTcxMDQ1LDQuMDQ0NzIxNjAzNCwwDQorICAgICAgICAgICAgICAxMTMuNzM1NTI3MDM4NiwzLjk5Njk0Mzk1MDcsMA0KKyAgICAgICAgICAgICAgMTEzLjY2OTcwODI1MjAsMy45MzI0OTk0MDg3LDANCisgICAgICAgICAgICAgIDExMy41NTM4NjM1MjU0LDMuODM2MTEwNTkxOSwwDQorICAgICAgICAgICAgICAxMTMuNTQ2MzcxNDYwMCwzLjgyOTk5OTkyMzcsMA0KKyAgICAgICAgICAgICAgMTEzLjUxNzc2MTIzMDUsMy44MDgwNTQ5MjQwLDANCisgICAgICAgICAgICAgIDExMy40MTQ5OTMyODYxLDMuNjkxOTQzNjQ1NSwwDQorICAgICAgICAgICAgICAxMTMuMzk2Mzc3NTYzNSwzLjY1NTU1NDc3MTQsMA0KKyAgICAgICAgICAgICAgMTEzLjM4ODMyMDkyMjksMy42NDMzMzI5NTgyLDANCisgICAgICAgICAgICAgIDExMy4yOTgzMTY5NTU2LDMuNTE3NDk5NDQ2OSwwDQorICAgICAgICAgICAgICAxMTMuMjc0OTg2MjY3MSwzLjQ4NjExMDY4NzMsMA0KKyAgICAgICAgICAgICAgMTEzLjA4MjQ4OTAxMzcsMy4yNTI3Nzc1NzY0LDANCisgICAgICAgICAgICAgIDExMy4wNzYzOTMxMjc0LDMuMjM4MzMyNzQ4NCwwDQorICAgICAgICAgICAgICAxMTMuMDY1NTM2NDk5MCwzLjIyMTk0Mzg1NTMsMA0KKyAgICAgICAgICAgICAgMTEzLjA1Mzg2MzUyNTQsMy4yMDYxMTA0Nzc0LDANCisgICAgICAgICAgICAgIDExMy4wNDIyMTM0Mzk5LDMuMTkwNTU1MDk1NywwDQorICAgICAgICAgICAgICAxMTMuMDI5MTU5NTQ1OSwzLjE3NjExMDc0NDUsMA0KKyAgICAgICAgICAgICAgMTEzLjAxMDUzNjE5MzgsMy4xNjA1NTQ4ODU5LDANCisgICAgICAgICAgICAgIDExMi45OTgzMjE1MzMyLDMuMTUyMjIxNjc5NywwDQorICAgICAgICAgICAgICAxMTIuOTgxMDg2NzMxMCwzLjE0MTk0MzkzMTYsMA0KKyAgICAgICAgICAgICAgMTEyLjk2NzQ4MzUyMDUsMy4xMzQ5OTk3NTIwLDANCisgICAgICAgICAgICAgIDExMi45NTMwNDg3MDYxLDMuMTI4ODg4MTMwMiwwDQorICAgICAgICAgICAgICAxMTIuOTMyNDc5ODU4NCwzLjEyMjIyMTQ2OTksMA0KKyAgICAgICAgICAgICAgMTEyLjg2NDcwMDMxNzQsMy4xMDA4MzI5MzkxLDANCisgICAgICAgICAgICAgIDExMi42ODcxODcxOTQ4LDMuMDUyMjIxNzc1MSwwDQorICAgICAgICAgICAgICAxMTIuNjc2Mzc2MzQyOCwzLjA0OTQ0NDE5ODYsMA0KKyAgICAgICAgICAgICAgMTEyLjY0NzQ5MTQ1NTEsMy4wNDQxNjY1NjQ5LDANCisgICAgICAgICAgICAgIDExMi41MTcyMTE5MTQxLDMuMDE0NzIxODcwNCwwDQorICAgICAgICAgICAgICAxMTIuMjY0NDI3MTg1MSwyLjk1MzA1NDkwNDksMA0KKyAgICAgICAgICAgICAgMTEyLjIxNzc1ODE3ODcsMi45MzgwNTUwMzg1LDANCisgICAgICAgICAgICAgIDExMi4xMDk0MjA3NzY0LDIuOTA5MTY1ODU5MiwwDQorICAgICAgICAgICAgICAxMTIuMDkzMDQ4MDk1NywyLjkwNTI3NzI1MjIsMA0KKyAgICAgICAgICAgICAgMTExLjk2NDk5NjMzNzksMi44ODI0OTkyMTgwLDANCisgICAgICAgICAgICAgIDExMS45NTMzMjMzNjQzLDIuODgwNTU1MTUyOSwwDQorICAgICAgICAgICAgICAxMTEuOTQ3MTk2OTYwNCwyLjg3OTcyMTY0MTUsMA0KKyAgICAgICAgICAgICAgMTExLjg5MjIxMTkxNDEsMi44Nzk3MjE2NDE1LDANCisgICAgICAgICAgICAgIDExMS44NDIyMDg4NjIzLDIuODc0OTk5NTIzMiwwDQorICAgICAgICAgICAgICAxMTEuODIzNjA4Mzk4NCwyLjg3MzA1NDk4MTIsMA0KKyAgICAgICAgICAgICAgMTExLjc5MzU4NjczMTAsMi44Njg4ODgzNzgxLDANCisgICAgICAgICAgICAgIDExMS43NDA4MDY1Nzk2LDIuODU5OTk5NjU2NywwDQorICAgICAgICAgICAgICAxMTEuNjcxNjUzNzQ3NiwyLjg0ODMzMjg4MTksMA0KKyAgICAgICAgICAgICAgMTExLjY2NjA5MTkxODksMi44NDY5NDM4NTUzLDANCisgICAgICAgICAgICAgIDExMS42NTYzNzIwNzAzLDIuODQyNzc3MjUyMiwwDQorICAgICAgICAgICAgICAxMTEuNjQ0MTQ5NzgwMywyLjgzNDcyMTU2NTIsMA0KKyAgICAgICAgICAgICAgMTExLjUyMDI2MzY3MTksMi43NDYzODg0MzU0LDANCisgICAgICAgICAgICAgIDExMS40NTIyMDk0NzI3LDIuNjk3Nzc3MjcxMywwDQorICAgICAgICAgICAgICAxMTEuNDQ0NzAyMTQ4NCwyLjY5MTY2NjEyNjMsMA0KKyAgICAgICAgICAgICAgMTExLjQzOTQyMjYwNzQsMi42ODMzMzI5MjAxLDANCisgICAgICAgICAgICAgIDExMS40MzY2NTMxMzcyLDIuNjcyNDk5NjU2NywwDQorICAgICAgICAgICAgICAxMTEuNDE4MDUyNjczMywyLjU3ODA1NTM4MTgsMA0KKyAgICAgICAgICAgICAgMTExLjQwMzA1MzI4MzcsMi40ODA4MzI1NzY4LDANCisgICAgICAgICAgICAgIDExMS40MjY4NDkzNjUyLDIuNDEzNjg1MzIxOCwwDQorICAgICAgICAgICAgICAxMTEuNDQwODExMTU3MiwyLjM5NDQ0Mzk4ODgsMA0KKyAgICAgICAgICAgICAgMTExLjQ0NDEzNzU3MzIsMi4zOTExMTA4OTcxLDANCisgICAgICAgICAgICAgIDExMS40NTAyNzE2MDY0LDIuMzY4NjEwMzgyMSwwDQorICAgICAgICAgICAgICAxMTEuMzk0MTQ5NzgwMywyLjM1NjExMDU3MjgsMA0KKyAgICAgICAgICAgICAgMTExLjM2ODExMDY1NjcsMi4zMzkwOTQ0MDA0LDANCisgICAgICAgICAgICAgIDExMS4zMjI3NjkxNjUwLDIuMzgwODMyNjcyMSwwDQorICAgICAgICAgICAgICAxMTEuMzE2MDkzNDQ0OCwyLjM4Nzc3NzMyODUsMA0KKyAgICAgICAgICAgICAgMTExLjMxMTkyMDE2NjAsMi4zOTA1NTUzODE4LDANCisgICAgICAgICAgICAgIDExMS4yNDc0ODIyOTk4LDIuNDI4NjEwODAxNywwDQorICAgICAgICAgICAgICAxMTEuMjQxOTI4MTAwNiwyLjQyOTk5OTgyODMsMA0KKyAgICAgICAgICAgICAgMTExLjIyNzQ3ODAyNzMsMi40MjM4ODg2ODMzLDANCisgICAgICAgICAgICAgIDExMS4yMjMzMTIzNzc5LDIuNDIxMTEwNjMwMCwwDQorICAgICAgICAgICAgICAxMTEuMjE2NjU5NTQ1OSwyLjQxMzYxMDQ1ODQsMA0KKyAgICAgICAgICAgICAgMTExLjIxMTExMjk3NjEsMi4zOTg2MTA1OTE5LDANCisgICAgICAgICAgICAgIDExMS4yMDI3NjY0MTg1LDIuMzY1ODMyODA1NiwwDQorICAgICAgICAgICAgICAxMTEuMTgzMDM2ODA0MiwyLjI2MjIyMTgxMzIsMA0KKyAgICAgICAgICAgICAgMTExLjE2ODU4NjczMTAsMi4xNTIyMjE2Nzk3LDANCisgICAgICAgICAgICAgIDExMS4xNzA4MjIxNDM2LDIuMTQ3MjIyMDQyMSwwDQorICAgICAgICAgICAgICAxMTEuMTczMzA5MzI2MiwyLjE0MzMzMjk1ODIsMA0KKyAgICAgICAgICAgICAgMTExLjE3ODMwNjU3OTYsMi4xNDExMTA4OTcxLDANCisgICAgICAgICAgICAgIDExMS4xOTE5MzI2NzgyLDIuMTQxMTEwODk3MSwwDQorICAgICAgICAgICAgICAxMTEuMjcwODI4MjQ3MSwyLjE1MTM4ODE2ODMsMA0KKyAgICAgICAgICAgICAgMTExLjM1NDk4MDQ2ODgsMi4xNjMwNTQ5NDMxLDANCisgICAgICAgICAgICAgIDExMS4zNjgwNDE5OTIyLDIuMTYzODg4NDU0NCwwDQorICAgICAgICAgICAgICAxMTEuMzcyNzU2OTU4MCwyLjE2MTY2NTkxNjQsMA0KKyAgICAgICAgICAgICAgMTExLjM3NDE1MzEzNzIsMi4xNTYxMTAyODY3LDANCisgICAgICAgICAgICAgIDExMS4zNzI3NTY5NTgwLDIuMTUwODMyNjUzMCwwDQorICAgICAgICAgICAgICAxMTEuMzY5OTc5ODU4NCwyLjE0NjY2NjUyNjgsMA0KKyAgICAgICAgICAgICAgMTExLjM0ODg3Njk1MzEsMi4xMTkxNjU4OTc0LDANCisgICAgICAgICAgICAgIDExMS4zMzg1OTI1MjkzLDIuMTA4ODg4NjI2MSwwDQorICAgICAgICAgICAgICAxMTEuMzMzODc3NTYzNSwyLjEwNjk0NDA4NDIsMA0KKyAgICAgICAgICAgICAgMTExLjMyODMyMzM2NDMsMi4xMDU1NTUwNTc1LDANCisgICAgICAgICAgICAgIDExMS4zMjEzODA2MTUyLDIuMTA1NTU1MDU3NSwwDQorICAgICAgICAgICAgICAxMTEuMjk0MTQzNjc2OCwyLjExMjQ5OTcxMzksMA0KKyAgICAgICAgICAgICAgMTExLjI3NDY5NjM1MDEsMi4xMjA1NTQ5MjQwLDANCisgICAgICAgICAgICAgIDExMS4yNTc3NjY3MjM2LDIuMTI0MTY2MDExOCwwDQorICAgICAgICAgICAgICAxMTEuMjUyMjEyNTI0NCwyLjEyMjc3Njk4NTIsMA0KKyAgICAgICAgICAgICAgMTExLjI0NzQ4MjI5OTgsMi4xMjA1NTQ5MjQwLDANCisgICAgICAgICAgICAgIDExMS4yMzkxNTEwMDEwLDIuMTE1Mjc3MjkwMywwDQorICAgICAgICAgICAgICAxMTEuMjM1ODA5MzI2MiwyLjExMTY2NjIwMjUsMA0KKyAgICAgICAgICAgICAgMTExLjIwNTU1MTE0NzUsMi4wNjYzODgxMzAyLDANCisgICAgICAgICAgICAgIDExMS4xOTYwOTA2OTgyLDIuMDIxMzg4NTMwNywwDQorICAgICAgICAgICAgICAxMTEuMTczMzA5MzI2MiwxLjk0ODA1NTI2NzMsMA0KKyAgICAgICAgICAgICAgMTExLjE2OTQzMzU5MzgsMS45MzgzMzMwMzQ1LDANCisgICAgICAgICAgICAgIDExMS4wNjQ0MjI2MDc0LDEuNjgyMjIxODg5NSwwDQorICAgICAgICAgICAgICAxMTEuMDQzODY5MDE4NiwxLjY3NTU1NTIyOTIsMA0KKyAgICAgICAgICAgICAgMTExLjAzOTE0NjQyMzMsMS42NzMzMzMxNjgwLDANCisgICAgICAgICAgICAgIDExMS4wMzA4MjI3NTM5LDEuNjY3Nzc3NTM4MywwDQorICAgICAgICAgICAgICAxMTEuMDI3NDgxMDc5MSwxLjY2NDQ0NDIwODEsMA0KKyAgICAgICAgICAgICAgMTExLjAyMTkyNjg3OTksMS42NDk0NDQxMDMyLDANCisgICAgICAgICAgICAgIDExMS4wMDEzODg1NDk4LDEuNTg3Nzc3NjE0NiwwDQorICAgICAgICAgICAgICAxMTEuMDAwMDAwMDAwMCwxLjU3NTU1NTMyNDYsMA0KKyAgICAgICAgICAgICAgMTExLjAwMDAwMDAwMDAsMS41Njg2MTA5MDY2LDANCisgICAgICAgICAgICAgIDExMS4wMDM2MDEwNzQyLDEuNTUxMzg4NzQwNSwwDQorICAgICAgICAgICAgICAxMTEuMDA5NzE5ODQ4NiwxLjUzNzIyMjE0NzAsMA0KKyAgICAgICAgICAgICAgMTExLjAxNTgyMzM2NDMsMS41Mjk0NDQyMTc3LDANCisgICAgICAgICAgICAgIDExMS4wMjQxNDcwMzM3LDEuNTI0MTY2NTg0MCwwDQorICAgICAgICAgICAgICAxMTEuMDU0MTUzNDQyNCwxLjQ2NDk5OTY3NTgsMA0KKyAgICAgICAgICAgICAgMTExLjA2MTY1MzEzNzIsMS40NTg4ODg1MzA3LDANCisgICAgICAgICAgICAgIDExMS4xNTk3MTM3NDUxLDEuMzk5NDQ0MTAzMiwwDQorICAgICAgICAgICAgICAxMTEuMTY5NDMzNTkzOCwxLjM5NTI3NzUwMDIsMA0KKyAgICAgICAgICAgICAgMTExLjE3NDY5Nzg3NjAsMS4zOTM4ODg3MTE5LDANCisgICAgICAgICAgICAgIDExMS4xODE2NjM1MTMyLDEuMzkzODg4NzExOSwwDQorICAgICAgICAgICAgICAxMTEuMTg3MTg3MTk0OCwxLjM5NTI3NzUwMDIsMA0KKyAgICAgICAgICAgICAgMTExLjE5MTkzMjY3ODIsMS4zOTcyMjIwNDIxLDANCisgICAgICAgICAgICAgIDExMS4yMDAyNzE2MDY0LDEuNDAyNzc3NDMzNCwwDQorICAgICAgICAgICAgICAxMTEuMjA5NzE2Nzk2OSwxLjQwNjk0NDI3NDksMA0KKyAgICAgICAgICAgICAgMTExLjIyNDcwMDkyNzcsMS40MTI0OTk2NjYyLDANCisgICAgICAgICAgICAgIDExMS4yNDE5MjgxMDA2LDEuNDE1ODMyOTk2NCwwDQorICAgICAgICAgICAgICAxMTEuMjYyNDk2OTQ4MiwxLjQxNTgzMjk5NjQsMA0KKyAgICAgICAgICAgICAgMTExLjI4NzIwMDkyNzcsMS40MTMwNTUxODE1LDANCisgICAgICAgICAgICAgIDExMS4zMDE2NTEwMDEwLDEuNDA2OTQ0Mjc0OSwwDQorICAgICAgICAgICAgICAxMTEuMzc5Njk5NzA3MCwxLjM0ODA1NTM2MjcsMA0KKyAgICAgICAgICAgICAgMTExLjM3NjkyMjYwNzQsMS4zNDM4ODg3NTk2LDANCisgICAgICAgICAgICAgIDExMS4zNjY2NTM0NDI0LDEuMzQwNTU1NDI5NSwwDQorICAgICAgICAgICAgICAxMTEuMzUwODA3MTg5OSwxLjMzNTU1NTMxNTAsMA0KKyAgICAgICAgICAgICAgMTExLjMzMzA1MzU4ODksMS4zMzMwNTUyNTc4LDANCisgICAgICAgICAgICAgIDExMS4zMTk0NDI3NDkwLDEuMzMzMDU1MjU3OCwwDQorICAgICAgICAgICAgICAxMTEuMTU1NTQ4MDk1NywxLjM2Mzg4ODc0MDUsMA0KKyAgICAgICAgICAgICAgMTExLjA2MzAyNjQyODIsMS40MDQ5OTk3MzMwLDANCisgICAgICAgICAgICAgIDExMS4wNTI3NTcyNjMyLDEuNDE0OTk5NzIzNCwwDQorICAgICAgICAgICAgICAxMTEuMDM2Mzc2OTUzMSwxLjQzMzA1NTE2MjQsMA0KKyAgICAgICAgICAgICAgMTExLjAxNzIxMTkxNDEsMS40NTQ5OTk2ODUzLDANCisgICAgICAgICAgICAgIDExMC45OTA1Mzk1NTA4LDEuNDgzMDU1MTE0NywwDQorICAgICAgICAgICAgICAxMTAuOTgwMjcwMzg1NywxLjQ5MzMzMzEwMTMsMA0KKyAgICAgICAgICAgICAgMTEwLjk3Mjc2MzA2MTUsMS40OTk0NDQwMDc5LDANCisgICAgICAgICAgICAgIDExMC45NDI0NjY3MzU4LDEuNTE3MjIyMTY2MSwwDQorICAgICAgICAgICAgICAxMTAuODM2OTI5MzIxMywxLjU2MjQ5OTc2MTYsMA0KKyAgICAgICAgICAgICAgMTEwLjgyMTkyOTkzMTYsMS41NjgwNTUzOTEzLDANCisgICAgICAgICAgICAgIDExMC43OTcyMTA2OTM0LDEuNTcwNTU1NDQ4NSwwDQorICAgICAgICAgICAgICAxMTAuNzkxMDkxOTE4OSwxLjU2OTk5OTkzMzIsMA0KKyAgICAgICAgICAgICAgMTEwLjc4NTUzNzcxOTcsMS41Njg2MTA5MDY2LDANCisgICAgICAgICAgICAgIDExMC43NzYwOTI1MjkzLDEuNTY0NDQ0MzAzNSwwDQorICAgICAgICAgICAgICAxMTAuNzcyNDkxNDU1MSwxLjU2MTExMDk3MzQsMA0KKyAgICAgICAgICAgICAgMTEwLjc2OTcwNjcyNjEsMS41NTY5NDQzNzAzLDANCisgICAgICAgICAgICAgIDExMC43NjgzMzM0MzUxLDEuNTUxMzg4NzQwNSwwDQorICAgICAgICAgICAgICAxMTAuNzY4MzMzNDM1MSwxLjUzNzc3NzY2MjMsMA0KKyAgICAgICAgICAgICAgMTEwLjc3MDUzODMzMDEsMS41MTkxNjY0Njk2LDANCisgICAgICAgICAgICAgIDExMC43NzA1MzgzMzAxLDEuNTA1NTU1MzkxMywwDQorICAgICAgICAgICAgICAxMTAuNzY5MTQ5NzgwMywxLjQ5MzMzMzEwMTMsMA0KKyAgICAgICAgICAgICAgMTEwLjc2MjIwNzAzMTMsMS40Nzk0NDQwMjY5LDANCisgICAgICAgICAgICAgIDExMC43NDY2NDMwNjY0LDEuNDYxMTEwODMwMywwDQorICAgICAgICAgICAgICAxMTAuNzM0MTUzNzQ3NiwxLjQ1Mjc3NzM4NTcsMA0KKyAgICAgICAgICAgICAgMTEwLjcyNDcwMDkyNzcsMS40NDg2MTA3ODI2LDANCisgICAgICAgICAgICAgIDExMC43MDA1NDYyNjQ2LDEuNDQ1Mjc3NDUyNSwwDQorICAgICAgICAgICAgICAxMTAuNjg3NDc3MTExOCwxLjQ0NDcyMTkzNzIsMA0KKyAgICAgICAgICAgICAgMTEwLjY3NDQyMzIxNzgsMS40NDUyNzc0NTI1LDANCisgICAgICAgICAgICAgIDExMC42NzQ0MjMyMTc4LDEuNDQ5NDQ0MDU1NiwwDQorICAgICAgICAgICAgICAxMTAuNjc3MjAwMzE3NCwxLjQ1MzYxMDg5NzEsMA0KKyAgICAgICAgICAgICAgMTEwLjY5MzU4ODI1NjgsMS40NjQ0NDQxNjA1LDANCisgICAgICAgICAgICAgIDExMC42OTg1OTMxMzk2LDEuNDY2Mzg4NDY0MCwwDQorICAgICAgICAgICAgICAxMTAuNzE0OTk2MzM3OSwxLjQ3NzQ5OTcyMzQsMA0KKyAgICAgICAgICAgICAgMTEwLjcyNDcwMDkyNzcsMS40ODgzMzI5ODY4LDANCisgICAgICAgICAgICAgIDExMC43MzM1OTY4MDE4LDEuNTAwMDAwMDAwMCwwDQorICAgICAgICAgICAgICAxMTAuNzM2MzY2MjcyMCwxLjUwNDE2NjYwMzEsMA0KKyAgICAgICAgICAgICAgMTEwLjc0MDI1NzI2MzIsMS41MTM4ODg4MzU5LDANCisgICAgICAgICAgICAgIDExMC43NDEwODg4NjcyLDEuNTE5OTk5OTgwOSwwDQorICAgICAgICAgICAgICAxMTAuNzQwMjU3MjYzMiwxLjUyNjExMDg4NzUsMA0KKyAgICAgICAgICAgICAgMTEwLjczNjkyMzIxNzgsMS41MzYzODg2MzU2LDANCisgICAgICAgICAgICAgIDExMC43MzA0MzgyMzI0LDEuNTQzODc4NzkzNywwDQorICAgICAgICAgICAgICAxMTAuNzIyNDg4NDAzMywxLjU0OTQ0NDE5ODYsMA0KKyAgICAgICAgICAgICAgMTEwLjcwMjc2NjQxODUsMS41NTY5NDQzNzAzLDANCisgICAgICAgICAgICAgIDExMC42MzU1MzYxOTM4LDEuNTc4ODg4NjU0NywwDQorICAgICAgICAgICAgICAxMTAuNTY0OTg3MTgyNiwxLjU5ODA1NTM2MjcsMA0KKyAgICAgICAgICAgICAgMTEwLjUyNzIwNjQyMDksMS42MDgzMzMxMTA4LDANCisgICAgICAgICAgICAgIDExMC40Nzk5ODA0Njg4LDEuNjI0MTY2NDg4NiwwDQorICAgICAgICAgICAgICAxMTAuNDc3MjAzMzY5MSwxLjY0MzMzMzE5NjYsMA0KKyAgICAgICAgICAgICAgMTEwLjM0NTU0MjkwNzcsMS43OTM4ODg4MDczLDANCisgICAgICAgICAgICAgIDExMC4zMzg4ODI0NDYzLDEuODAwODMzMjI1MywwDQorICAgICAgICAgICAgICAxMTAuMzMzMzI4MjQ3MSwxLjgwMjIyMjAxMzUsMA0KKyAgICAgICAgICAgICAgMTEwLjMyNzc2NjQxODUsMS44MDA4MzMyMjUzLDANCisgICAgICAgICAgICAgIDExMC4zMTg4NzgxNzM4LDEuNzk2MTEwODY4NSwwDQorICAgICAgICAgICAgICAxMTAuMzE2MDkzNDQ0OCwxLjc5MTk0NDI2NTQsMA0KKyAgICAgICAgICAgICAgMTEwLjMwMzAzOTU1MDgsMS43NzA1NTU0OTYyLDANCisgICAgICAgICAgICAgIDExMC4yOTgzMTY5NTU2LDEuNzYxNjY2NTM2MywwDQorICAgICAgICAgICAgICAxMTAuMjUzMDUxNzU3OCwxLjcwNTU1NTIwMDYsMA0KKyAgICAgICAgICAgICAgMTA5Ljk4MTgyNjc4MjIsMS42ODIyOTc5NDUwLDANCisgICAgICAgICAgICAgIDEwOS45MzM4Njg0MDgyLDEuNjg3Nzc3NTE5MiwwDQorICAgICAgICAgICAgICAxMDkuOTI4MzA2NTc5NiwxLjY4OTE2NjMwNzQsMA0KKyAgICAgICAgICAgICAgMTA5LjkyNDk4Nzc5MzAsMS42OTI0OTk2Mzc2LDANCisgICAgICAgICAgICAgIDEwOS44OTk0MjkzMjEzLDEuNzIxOTQ0MDkzNywwDQorICAgICAgICAgICAgICAxMDkuNzYwNTM2MTkzOCwxLjgyMjc3NzUwOTcsMA0KKyAgICAgICAgICAgICAgMTA5LjczMzU5NjgwMTgsMS44MzY5NDQzNDE3LDANCisgICAgICAgICAgICAgIDEwOS43MTI0ODYyNjcxLDEuODQ5OTk5OTA0NiwwDQorICAgICAgICAgICAgICAxMDkuNzA4MzI4MjQ3MSwxLjg1Mjc3NzQ4MTEsMA0KKyAgICAgICAgICAgICAgMTA5LjcwMDgyMDkyMjksMS44NTg4ODg2MjYxLDANCisgICAgICAgICAgICAgIDEwOS42OTc0NzkyNDgwLDEuODYyNDk5NzEzOSwwDQorICAgICAgICAgICAgICAxMDkuNjcxMzcxNDYwMCwxLjg5ODA1NTMxNTAsMA0KKyAgICAgICAgICAgICAgMTA5LjY2MDI2MzA2MTUsMS45MTQ0NDQyMDgxLDANCisgICAgICAgICAgICAgIDEwOS42NTIyMDY0MjA5LDEuOTMzNjEwOTE2MSwwDQorICAgICAgICAgICAgICAxMDkuNjUwODE3ODcxMSwxLjkzOTE2NjMwNzQsMA0KKyAgICAgICAgICAgICAgMTA5LjY0OTk4NjI2NzEsMS45NTIyMjE4NzA0LDANCisgICAgICAgICAgICAgIDEwOS42NTU1NDgwOTU3LDIuMDAyNzc3NTc2NCwwDQorICAgICAgICAgICAgICAxMDkuNjUxMzgyNDQ2MywyLjA1NzQ5OTQwODcsMA0KKyAgICAgICAgICAgICAgMTA5LjY0ODU2NzE5OTcsMi4wNzM0MDg2MDM3LDANCisgICAgICAgICAgICAgIDEwOS42MzA4MTM1OTg2LDIuMDMxNjY2Mjc4OCwwDQorICAgICAgICAgICAgICAxMDkuNTQ4MDI3MDM4NiwxLjkwOTcyMTg1MTMsMA0KKyAgICAgICAgICAgICAgMTA5LjU0NjY1Mzc0NzYsMS45MDQxNjY0NjAwLDANCisgICAgICAgICAgICAgIDEwOS41NjM4NzMyOTEwLDEuODMzNjExMDExNSwwDQorICAgICAgICAgICAgICAxMDkuNTgyMjA2NzI2MSwxLjgwNDE2NjU1NTQsMA0KKyAgICAgICAgICAgICAgMTA5LjU4NTU0MDc3MTUsMS44MDA4MzMyMjUzLDANCisgICAgICAgICAgICAgIDEwOS41OTM4NzIwNzAzLDEuNzk1Mjc3NTk1NSwwDQorICAgICAgICAgICAgICAxMDkuNjAzNTkxOTE4OSwxLjc5MTExMDk5MjQsMA0KKyAgICAgICAgICAgICAgMTA5LjYxNTgwNjU3OTYsMS43ODkxNjY0NTA1LDANCisgICAgICAgICAgICAgIDEwOS42NjcyMTM0Mzk5LDEuNzA2Mzg4NDczNSwwDQorICAgICAgICAgICAgICAxMDkuNjY3MjEzNDM5OSwxLjYyNDE2NjQ4ODYsMA0KKyAgICAgICAgICAgICAgMTA5LjY2Nzc2Mjc1NjMsMS42MTc3Nzc1ODYwLDANCisgICAgICAgICAgICAgIDEwOS42Njk5ODI5MTAyLDEuNjEzMDU1MjI5MiwwDQorICAgICAgICAgICAgICAxMDkuNjk4ODY3Nzk3OSwxLjU4MDI3NzY4MTQsMA0KKyAgICAgICAgICAgICAgMTA5LjcxMTY0NzAzMzcsMS41NjU4MzMwOTE3LDANCisgICAgICAgICAgICAgIDEwOS43MjE5MTYxOTg3LDEuNTU1NTU1MzQzNiwwDQorICAgICAgICAgICAgICAxMDkuNzM5OTY3MzQ2MiwxLjUzOTE2NjQ1MDUsMA0KKyAgICAgICAgICAgICAgMTA5LjgyNDcwNzAzMTMsMS40Njg2MTA3NjM1LDANCisgICAgICAgICAgICAgIDEwOS45MzE2NjM1MTMyLDEuNDA2OTQ0Mjc0OSwwDQorICAgICAgICAgICAgICAxMDkuOTc5NzEzNDM5OSwxLjMxNzIxODA2NTMsMA0KKyAgICAgICAgICAgICAgMTA5Ljk4NTQxMjU5NzcsMS4zMDE4Nzk0MDYwLDANCisgICAgICAgICAgICAgIDEwOS45OTQzNzcxMzYyLDEuMjkwNDU2MDU2NiwwDQorICAgICAgICAgICAgICAxMDkuOTk3NzI2NDQwNCwxLjI4Njg0MDY3NzMsMA0KKyAgICAgICAgICAgICAgMTEwLjA3MTY2MjkwMjgsMS4yMTk5OTk3OTAyLDANCisgICAgICAgICAgICAgIDExMC4wODM4Nzc1NjM1LDEuMjExNjY2MzQ1NiwwDQorICAgICAgICAgICAgICAxMTAuMTAxMDg5NDc3NSwxLjIwMTM4ODU5NzUsMA0KKyAgICAgICAgICAgICAgMTEwLjExNTUzOTU1MDgsMS4xOTUyNzc0NTI1LDANCisgICAgICAgICAgICAgIDExMC4xMzcyMDcwMzEzLDEuMTg5NzIxODIyNywwDQorICAgICAgICAgICAgICAxMTAuMTU1ODIyNzUzOSwxLjE4Nzc3NzUxOTIsMA0KKyAgICAgICAgICAgICAgMTEwLjE2OTQzMzU5MzgsMS4xODc3Nzc1MTkyLDANCisgICAgICAgICAgICAgIDExMC4xODE5MzA1NDIwLDEuMTg2Mzg4NDkyNiwwDQorICAgICAgICAgICAgICAxMTAuMTg3MTg3MTk0OCwxLjE4NDk5OTcwNDQsMA0KKyAgICAgICAgICAgICAgMTEwLjE5ODg2Nzc5NzksMS4xNzYxMTA3NDQ1LDANCisgICAgICAgICAgICAgIDExMC4zMzI0ODkwMTM3LDEuMDAxOTQ0MzAzNSwwDQorICAgICAgICAgICAgICAxMTAuNDU5OTkxNDU1MSwwLjkwMjc3NzY3MTgsMA0KKyAgICAgICAgICAgICAgMTEwLjUxOTcwNjcyNjEsMC44NjYzODg2Nzg2LDANCisgICAgICAgICAgICAgIDExMC41MjQ0MjkzMjEzLDAuODY0MTY2NDk4MiwwDQorICAgICAgICAgICAgICAxMTAuNTQ0NDMzNTkzOCwwLjg1NjY2NjU2NDksMA0KKyAgICAgICAgICAgICAgMTEwLjU1NTI1MjA3NTIsMC44NTM4ODg3NTAxLDANCisgICAgICAgICAgICAgIDExMC41NzQ0MzIzNzMwLDAuODUyNzc3NjAwMywwDQorICAgICAgICAgICAgICAxMTAuNTk4NjAyMjk0OSwwLjg1NjExMDkzMDQsMA0KKyAgICAgICAgICAgICAgMTEwLjcwMTkyNzE4NTEsMC44NzgwNTUzMzQxLDANCisgICAgICAgICAgICAgIDExMC44MDYwOTEzMDg2LDAuOTA2NjY2NjM2NSwwDQorICAgICAgICAgICAgICAxMTAuODA5NzA3NjQxNiwwLjkxMDI3NzcyNDMsMA0KKyAgICAgICAgICAgICAgMTEwLjgxMjE4NzE5NDgsMC45MTQ0NDQzMjc0LDANCisgICAgICAgICAgICAgIDExMC44MTMwMjY0MjgyLDAuOTIwNTU1NDcyNCwwDQorICAgICAgICAgICAgICAxMTAuODEzMDI2NDI4MiwwLjkzNDE2NjU1MDYsMA0KKyAgICAgICAgICAgICAgMTEwLjgxNTgxMTE1NzIsMC45NDUyNzc2OTA5LDANCisgICAgICAgICAgICAgIDExMC44MTg2MDM1MTU2LDAuOTQ5MTY2NTM2MywwDQorICAgICAgICAgICAgICAxMTAuODIxOTI5OTMxNiwwLjk1Mjc3NzYyNDEsMA0KKyAgICAgICAgICAgICAgMTEwLjg4NTUzNjE5MzgsMS4wMDU1NTUzOTEzLDANCisgICAgICAgICAgICAgIDExMC45MDQxNTk1NDU5LDEuMDE0NDQ0MzUxMiwwDQorICAgICAgICAgICAgICAxMTAuOTA5NzEzNzQ1MSwxLjAxNTgzMzEzOTQsMA0KKyAgICAgICAgICAgICAgMTEwLjk0MTA5MzQ0NDgsMS4wMTg2MTA5NTQzLDANCisgICAgICAgICAgICAgIDExMC45OTQ3MTI4Mjk2LDEuMDE5OTk5OTgwOSwwDQorICAgICAgICAgICAgICAxMTEuMDA2OTQyNzQ5MCwxLjAyMTExMTAxMTUsMA0KKyAgICAgICAgICAgICAgMTExLjAyNDE0NzAzMzcsMS4wMjQ3MjIwOTkzLDANCisgICAgICAgICAgICAgIDExMS4xOTI0NjY3MzU4LDEuMDYxNjY2NDg4NiwwDQorICAgICAgICAgICAgICAxMTEuMTk4MDI4NTY0NSwxLjA2MzA1NTI3NjksMA0KKyAgICAgICAgICAgICAgMTExLjIxMTkyOTMyMTMsMS4wNjk3MjE5MzcyLDANCisgICAgICAgICAgICAgIDExMS4yNTgzMzEyOTg4LDEuMDY3MjIyMTE4NCwwDQorICAgICAgICAgICAgICAxMTEuMzExMDk2MTkxNCwxLjA0NDQ0NDMyMjYsMA0KKyAgICAgICAgICAgICAgMTExLjM5NDcwNjcyNjEsMS4wMTE2NjY1MzYzLDANCisgICAgICAgICAgICAgIDExMS40MDYzNzIwNzAzLDEuMDA4ODg4NzIxNSwwDQorICAgICAgICAgICAgICAxMTEuNDE5NDMzNTkzOCwxLjAwODA1NTQ0ODUsMA0KKyAgICAgICAgICAgICAgMTExLjU2Mjc1OTM5OTQsMC45OTkxNjY0ODg2LDANCisgICAgICAgICAgICAgIDExMS41Njc0ODk2MjQwLDEuMDAxMzg4Nzg4MiwwDQorICAgICAgICAgICAgICAxMTEuNjM1MjY5MTY1MCwxLjAyOTQ0NDIxNzcsMA0KKyAgICAgICAgICAgICAgMTExLjY1NTI1ODE3ODcsMS4wMzY5NDQzODkzLDANCisgICAgICAgICAgICAgIDExMS42NjY5MzExNTIzLDEuMDM5MTY2NDUwNSwwDQorICAgICAgICAgICAgICAxMTEuNjcyMjEwNjkzNCwxLjAzNzc3NzY2MjMsMA0KKyAgICAgICAgICAgICAgMTExLjY4MTkzMDU0MjAsMS4wMzM2MTEwNTkyLDANCisgICAgICAgICAgICAgIDExMS43MDAyNzE2MDY0LDEuMDI0NzIyMDk5MywwDQorICAgICAgICAgICAgICAxMTEuNzI0NDI2MjY5NSwxLjAxMTY2NjUzNjMsMA0KKyAgICAgICAgICAgICAgMTExLjczMjc1NzU2ODQsMS4wMDYxMTA5MDY2LDANCisgICAgICAgICAgICAgIDExMS43OTc3NjAwMDk4LDAuOTkzODg4NzM1OCwwDQorICAgICAgICAgICAgICAxMTEuODA5OTgyMjk5OCwwLjk5NTI3NzY0MzIsMA0KKyAgICAgICAgICAgICAgMTExLjgyNzIwOTQ3MjcsMC45OTg2MTA5NzM0LDANCisgICAgICAgICAgICAgIDExMS44NDU4MzI4MjQ3LDEuMDA3NDk5OTMzMiwwDQorICAgICAgICAgICAgICAxMTEuODU2NjQzNjc2OCwxLjAxNjk0NDQwODQsMA0KKyAgICAgICAgICAgICAgMTExLjg2MzYwMTY4NDYsMS4wMjM4ODg4MjY0LDANCisgICAgICAgICAgICAgIDExMS44NzM4NzA4NDk2LDEuMDQxMTEwOTkyNCwwDQorICAgICAgICAgICAgICAxMTEuODc5OTY2NzM1OCwxLjA1NTU1NTM0MzYsMA0KKyAgICAgICAgICAgICAgMTExLjg4OTQyNzE4NTEsMS4wNzM4ODg3Nzg3LDANCisgICAgICAgICAgICAgIDExMS44OTMwNTExNDc1LDEuMDc3NDk5ODY2NSwwDQorICAgICAgICAgICAgICAxMTEuOTQxNjUwMzkwNiwxLjEyNDcyMjAwMzksMA0KKyAgICAgICAgICAgICAgMTExLjk0OTcwNzAzMTMsMS4xMjk5OTk4NzYwLDANCisgICAgICAgICAgICAgIDExMS45NTQ3MTE5MTQxLDEuMTMyMjIxOTM3MiwwDQorICAgICAgICAgICAgICAxMTEuOTY1NTUzMjgzNywxLjEzNDk5OTc1MjAsMA0KKyAgICAgICAgICAgICAgMTExLjk4MzMyMjE0MzYsMS4xMzc3Nzc1NjY5LDANCisgICAgICAgICAgICAgIDExMi4wNDE2NTY0OTQxLDEuMTM0MTY2NDc5MSwwDQorICAgICAgICAgICAgICAxMTIuMDU1MjUyMDc1MiwxLjEzNDE2NjQ3OTEsMA0KKyAgICAgICAgICAgICAgMTEyLjA3NDQzMjM3MzAsMS4xMzU1NTUyNjczLDANCisgICAgICAgICAgICAgIDExMi4xMTA4MDkzMjYyLDEuMTQwNTU1MzgxOCwwDQorICAgICAgICAgICAgICAxMTIuMTI3MTk3MjY1NiwxLjE0NDQ0NDIyNzIsMA0KKyAgICAgICAgICAgICAgMTEyLjEzMTM2MjkxNTAsMS4xNDcyMjIwNDIxLDANCisgICAgICAgICAgICAgIDExMi4xMzQxNjI5MDI4LDEuMTUxMzg4NjQ1MiwwDQorICAgICAgICAgICAgICAxMTIuMTM2MTA4Mzk4NCwxLjE1NjExMDc2MzUsMA0KKyAgICAgICAgICAgICAgMTEyLjIxMjE5NjM1MDEsMS4zNzMzMzMyMTU3LDANCisgICAgICAgICAgICAgIDExMi4yMTM2MDc3ODgxLDEuMzc4ODg4NjA3MCwwDQorICAgICAgICAgICAgICAxMTIuMjE0OTk2MzM3OSwxLjM5MTExMDg5NzEsMA0KKyAgICAgICAgICAgICAgMTEyLjIxNDQzMTc2MjcsMS4zOTcyMjIwNDIxLDANCisgICAgICAgICAgICAgIDExMi4yMTIxOTYzNTAxLDEuNDAyMjIxOTE4MSwwDQorICAgICAgICAgICAgICAxMTIuMjA3NDg5MDEzNywxLjQwNDE2NjQ2MDAsMA0KKyAgICAgICAgICAgICAgMTEyLjE5NTI1MTQ2NDgsMS40MDI3Nzc0MzM0LDANCisgICAgICAgICAgICAgIDExMi4xODgzMDg3MTU4LDEuNDAyNzc3NDMzNCwwDQorICAgICAgICAgICAgICAxMTIuMTgzNTkzNzUwMCwxLjQwNDk5OTczMzAsMA0KKyAgICAgICAgICAgICAgMTEyLjE4MDgxNjY1MDQsMS40MDg4ODg1Nzg0LDANCisgICAgICAgICAgICAgIDExMi4xODA4MTY2NTA0LDEuNDE1ODMyOTk2NCwwDQorICAgICAgICAgICAgICAxMTIuMTg0NzA3NjQxNiwxLjQyNTI3NzQ3MTUsMA0KKyAgICAgICAgICAgICAgMTEyLjE5ODAyODU2NDUsMS40NDY2NjY0NzkxLDANCisgICAgICAgICAgICAgIDExMi4yMDQ3MTE5MTQxLDEuNDUzNjEwODk3MSwwDQorICAgICAgICAgICAgICAxMTIuMzA5NzA3NjQxNiwxLjQ5OTQ0NDAwNzksMA0KKyAgICAgICAgICAgICAgMTEyLjQ3Mjc2MzA2MTUsMS41NjgwNTUzOTEzLDANCisgICAgICAgICAgICAgIDExMi40OTA1Mzk1NTA4LDEuNTcwNTU1NDQ4NSwwDQorICAgICAgICAgICAgICAxMTIuNTAwMDAwMDAwMCwxLjU3MDU1NTQ0ODUsMA0KKyAgICAgICAgICAgICAgMTEyLjUwNDE3MzI3ODgsMS41NzA1NTU0NDg1LDANCisgICAgICAgICAgICAgIDExMi42ODAyNjczMzQwLDEuNTYzMDU1Mjc2OSwwDQorICAgICAgICAgICAgICAxMTIuODgxMDg4MjU2OCwxLjU4ODMzMzEyOTksMA0KKyAgICAgICAgICAgICAgMTEyLjg4NzIwNzAzMTMsMS41ODc3Nzc2MTQ2LDANCisgICAgICAgICAgICAgIDExMi45NzY5Mjg3MTA5LDEuNTc3NDk5ODY2NSwwDQorICAgICAgICAgICAgICAxMTIuOTk5NzEwMDgzMCwxLjU3Mjc3NzUwOTcsMA0KKyAgICAgICAgICAgICAgMTEzLjAzODU4OTQ3NzUsMS41NTY5NDQzNzAzLDANCisgICAgICAgICAgICAgIDExMy4wNTQ0MjgxMDA2LDEuNTQ1Mjc3NTk1NSwwDQorICAgICAgICAgICAgICAxMTMuMDU3MjEyODI5NiwxLjU0MTExMDk5MjQsMA0KKyAgICAgICAgICAgICAgMTEzLjA1OTE0MzA2NjQsMS41MzYzODg2MzU2LDANCisgICAgICAgICAgICAgIDExMy4xMjYzNzMyOTEwLDEuNDMxNjY2Mzc0MiwwDQorICAgICAgICAgICAgICAxMTMuMzQwODIwMzEyNSwxLjM2NTI3NzUyODgsMA0KKyAgICAgICAgICAgICAgMTEzLjM1NTI2Mjc1NjMsMS4zNTg4ODg2MjYxLDANCisgICAgICAgICAgICAgIDExMy4zNjM2MDE2ODQ2LDEuMzUzNjEwOTkyNCwwDQorICAgICAgICAgICAgICAxMTMuMzc0NDIwMTY2MCwxLjM0Mzg4ODc1OTYsMA0KKyAgICAgICAgICAgICAgMTEzLjQ1NjEwMDQ2MzksMS4yODgzMzMxNzc2LDANCisgICAgICAgICAgICAgIDExMy41ODY5MjkzMjEzLDEuMjgzNjExMDU5MiwwDQorICAgICAgICAgICAgICAxMTMuNjE2Mzc4Nzg0MiwxLjI1MTM4ODc4ODIsMA0KKyAgICAgICAgICAgICAgMTEzLjYyOTk2NjczNTgsMS4yMzc3Nzc0NzE1LDANCisgICAgICAgICAgICAgIDExMy42NDI0ODY1NzIzLDEuMjI5NDQ0MDI2OSwwDQorICAgICAgICAgICAgICAxMTMuNjUxOTMxNzYyNywxLjIyNTI3NzQyMzksMA0KKyAgICAgICAgICAgICAgMTEzLjY1ODMzMjgyNDcsMS4yMjQ3MjE5MDg2LDANCisgICAgICAgICAgICAgIDExMy42NjMwNDAxNjExLDEuMjI2NjY2NDUwNSwwDQorICAgICAgICAgICAgICAxMTMuNzg2Mzc2OTUzMSwxLjMwMTk0NDI1NTgsMA0KKyAgICAgICAgICAgICAgMTEzLjc5NDQzMzU5MzgsMS4zMDc0OTk4ODU2LDANCisgICAgICAgICAgICAgIDExMy44NDI0ODM1MjA1LDEuMzQ4NjEwODc4MCwwDQorICAgICAgICAgICAgICAxMTMuODY1MjU3MjYzMiwxLjM3NDE2NjQ4ODYsMA0KKyAgICAgICAgICAgICAgMTEzLjg3NjA4MzM3NDAsMS4zOTA1NTUzODE4LDANCisgICAgICAgICAgICAgIDExMy44ODQ5ODY4Nzc0LDEuNDAyMjIxOTE4MSwwDQorICAgICAgICAgICAgICAxMTMuODkxMDk4MDIyNSwxLjQwOTcyMTg1MTMsMA0KKyAgICAgICAgICAgICAgMTEzLjkxODA1MjY3MzMsMS40Mzc3Nzc1MTkyLDANCisgICAgICAgICAgICAgIDExMy45MjU1MzcxMDk0LDEuNDQzODg4NjY0MiwwDQorICAgICAgICAgICAgICAxMTMuOTMwODE2NjUwNCwxLjQ0NTI3NzQ1MjUsMA0KKyAgICAgICAgICAgICAgMTEzLjk2ODU5NzQxMjEsMS40NDg2MTA3ODI2LDANCisgICAgICAgICAgICAgIDExMy45ODcxOTc4NzYwLDEuNDUwODMzMDgyMiwwDQorICAgICAgICAgICAgICAxMTQuMDA0OTg5NjI0MCwxLjQ1MzYxMDg5NzEsMA0KKyAgICAgICAgICAgICAgMTE0LjAzMzU5OTg1MzUsMS40NTg4ODg1MzA3LDANCisgICAgICAgICAgICAgIDExNC4wODQzOTYzNjIzLDEuNDY5OTkzMzUyOSwwDQorICAgICAgICAgICAgICAxMTQuMjI4ODY2NTc3MSwxLjQ0MjQ5OTYzNzYsMA0KKyAgICAgICAgICAgICAgMTE0LjIzMzg3MTQ2MDAsMS40NDQ3MjE5MzcyLDANCisgICAgICAgICAgICAgIDExNC4yOTA4MTcyNjA3LDEuNDY5OTk5NzkwMiwwDQorICAgICAgICAgICAgICAxMTQuMzg5NDI3MTg1MSwxLjUwODMzMzIwNjIsMA0KKyAgICAgICAgICAgICAgMTE0LjQwMTY1NzEwNDUsMS41MDk3MjE5OTQ0LDANCisgICAgICAgICAgICAgIDExNC40MTMzMDcxODk5LDEuNTA3Nzc3NjkwOSwwDQorICAgICAgICAgICAgICAxMTQuNDI0NDIzMjE3OCwxLjUwNDcyMjExODQsMA0KKyAgICAgICAgICAgICAgMTE0LjQ0MzU4ODI1NjgsMS40OTY2NjY0MzE0LDANCisgICAgICAgICAgICAgIDExNC40NTI0NzY1MDE1LDEuNDkxOTQ0MDc0NiwwDQorICAgICAgICAgICAgICAxMTQuNDczNjAyMjk0OSwxLjQ3ODg4ODUxMTcsMA0KKyAgICAgICAgICAgICAgMTE0LjQ3Nzc2Nzk0NDMsMS40NzYxMTA2OTY4LDANCisgICAgICAgICAgICAgIDExNC40ODg1ODY0MjU4LDEuNDY2Mzg4NDY0MCwwDQorICAgICAgICAgICAgICAxMTQuNDk2MDkzNzUwMCwxLjQ2MDI3NzU1NzQsMA0KKyAgICAgICAgICAgICAgMTE0LjUxMTM4MzA1NjYsMS40NDgwNTUyNjczLDANCisgICAgICAgICAgICAgIDExNC41MzMzMzI4MjQ3LDEuNDM1NTU1MjE5NywwDQorICAgICAgICAgICAgICAxMTQuNTQzNTg2NzMxMCwxLjQzMjIyMTg4OTUsMA0KKyAgICAgICAgICAgICAgMTE0LjU1NzIxMjgyOTYsMS40MzIyMjE4ODk1LDANCisgICAgICAgICAgICAgIDExNC41NjI3NTkzOTk0LDEuNDMzNjEwOTE2MSwwDQorICAgICAgICAgICAgICAxMTQuNTcyNDg2ODc3NCwxLjQzNzc3NzUxOTIsMA0KKyAgICAgICAgICAgICAgMTE0LjU4MDU1MTE0NzUsMS40NDMzMzMxNDkwLDANCisgICAgICAgICAgICAgIDExNC41ODc0ODYyNjcxLDEuNDQ5OTk5ODA5MywwDQorICAgICAgICAgICAgICAxMTQuNTkwMjcwOTk2MSwxLjQ1NDE2NjQxMjQsMA0KKyAgICAgICAgICAgICAgMTE0LjY3NDQyMzIxNzgsMS42NDI0OTk2ODUzLDANCisgICAgICAgICAgICAgIDExNC43MTA4MjMwNTkxLDEuNzcwNTU1NDk2MiwwDQorICAgICAgICAgICAgICAxMTQuNzgzMzMyODI0NywxLjg2Mzg4ODc0MDUsMA0KKyAgICAgICAgICAgICAgMTE0Ljg0NDcxMTMwMzcsMS44OTE2NjY0MTI0LDANCisgICAgICAgICAgICAgIDExNC44NTMwNDI2MDI1LDEuODk3MjIyMDQyMSwwDQorICAgICAgICAgICAgICAxMTQuODU5OTkyOTgxMCwxLjkwNDE2NjQ2MDAsMA0KKyAgICAgICAgICAgICAgMTE0Ljg2MTkyMzIxNzgsMS45MTUyNzc0ODExLDANCisgICAgICAgICAgICAgIDExNC44NzI0ODIyOTk4LDIuMDA3Nzc3NjkwOSwwDQorICAgICAgICAgICAgICAxMTQuODcyNDgyMjk5OCwyLjAyMDI3NzUwMDIsMA0KKyAgICAgICAgICAgICAgMTE0Ljg2ODMxNjY1MDQsMi4wNDM4ODg1Njg5LDANCisgICAgICAgICAgICAgIDExNC44NjY5MjgxMDA2LDIuMDQ1Mjc3NTk1NSwwDQorICAgICAgICAgICAgICAxMTQuODYxMzY2MjcyMCwyLjA0NzIyMjEzNzUsMA0KKyAgICAgICAgICAgICAgMTE0Ljg1NTI2Mjc1NjMsMi4wNDgwNTUxNzIwLDANCisgICAgICAgICAgICAgIDExNC44NDg4NzY5NTMxLDIuMDQ3MjIyMTM3NSwwDQorICAgICAgICAgICAgICAxMTQuODM5MTU3MTA0NSwyLjA0Mzg4ODU2ODksMA0KKyAgICAgICAgICAgICAgMTE0LjgwMDUzNzEwOTQsMi4wNjQ3MjE1ODQzLDANCisgICAgICAgICAgICAgIDExNC43NzYzODI0NDYzLDIuMTQ2NjY2NTI2OCwwDQorICAgICAgICAgICAgICAxMTQuNzc2MzgyNDQ2MywyLjE1MzYxMDcwNjMsMA0KKyAgICAgICAgICAgICAgMTE0Ljc3ODU4NzM0MTMsMi4xNjU1NTUwMDAzLDANCisgICAgICAgICAgICAgIDExNC43OTA4MTcyNjA3LDIuMjE0MTY2MTY0NCwwDQorICAgICAgICAgICAgICAxMTQuNzkyMjEzNDM5OSwyLjIxOTQ0Mzc5ODEsMA0KKyAgICAgICAgICAgICAgMTE0LjgwNDcwMjc1ODgsMi4yNDg4ODg0OTI2LDANCisgICAgICAgICAgICAgIDExNC44MTAyNTY5NTgwLDIuMjU3MjIyMTc1NiwwDQorICAgICAgICAgICAgICAxMTQuODE3MjA3MzM2NCwyLjI2NDE2NjM1NTEsMA0KKyAgICAgICAgICAgICAgMTE0Ljg3MDI0Njg4NzIsMi4yNzk0NDM3NDA4LDANCisgICAgICAgICAgICAgIDExNC44NzU4MDg3MTU4LDIuMjc5NDQzNzQwOCwwDQorICAgICAgICAgICAgICAxMTQuOTAwODE3ODcxMSwyLjI3NjY2NjE2NDQsMA0KKyAgICAgICAgICAgICAgMTE0LjkwNzc2MDYyMDEsMi4yNzY2NjYxNjQ0LDANCisgICAgICAgICAgICAgIDExNC45Mjk3MDI3NTg4LDIuMjgyMjIxNzk0MSwwDQorICAgICAgICAgICAgICAxMTQuOTM5NDIyNjA3NCwyLjI4NTU1NTM2MjcsMA0KKyAgICAgICAgICAgICAgMTE0Ljk0Nzc0NjI3NjksMi4yOTExMTA5OTI0LDANCisgICAgICAgICAgICAgIDExNC45NTA1NDYyNjQ2LDIuMjk1Mjc3NTk1NSwwDQorICAgICAgICAgICAgICAxMTUuMDAxNjYzMjA4MCwyLjM2MDU1NTE3MjAsMA0KKyAgICAgICAgICAgICAgMTE1LjA5MDgyMDMxMjUsMi40MjI0OTk2NTY3LDANCisgICAgICAgICAgICAgIDExNS4xODc0NzcxMTE4LDIuNDgzMDU0NjM3OSwwDQorICAgICAgICAgICAgICAxMTUuMjAzODcyNjgwNywyLjQ4NzIyMTcxNzgsMA0KKyAgICAgICAgICAgICAgMTE1LjIxMzYwNzc4ODEsMi40OTEzODgzMjA5LDANCisgICAgICAgICAgICAgIDExNS4yMTc3NTgxNzg3LDIuNDk0MTY2Mzc0MiwwDQorICAgICAgICAgICAgICAxMTUuMjMwODE5NzAyMSwyLjUwODA1NTIxMDEsMA0KKyAgICAgICAgICAgICAgMTE1LjIzNzE5Nzg3NjAsMi41MjI0OTk1NjEzLDANCisgICAgICAgICAgICAgIDExNS4yMzcxOTc4NzYwLDIuNTI4ODg4MjI1NiwwDQorICAgICAgICAgICAgICAxMTUuMjM0OTkyOTgxMCwyLjUzMzYxMDgyMDgsMA0KKyAgICAgICAgICAgICAgMTE1LjE5OTE0MjQ1NjEsMi41ODMwNTUwMTk0LDANCisgICAgICAgICAgICAgIDExNS4xODUyNTY5NTgwLDIuNTk2OTQzODU1MywwDQorICAgICAgICAgICAgICAxMTUuMTcyMjEwNjkzNCwyLjYwNDQ0NDAyNjksMA0KKyAgICAgICAgICAgICAgMTE1LjE2NjY1NjQ5NDEsMi42MDU4MzMwNTM2LDANCisgICAgICAgICAgICAgIDExNS4xMzYzODMwNTY2LDIuNjEyMjIxNzE3OCwwDQorICAgICAgICAgICAgICAxMTUuMTMwODEzNTk4NiwyLjYxMDgzMzE2ODAsMA0KKyAgICAgICAgICAgICAgMTE1LjEyNjY0Nzk0OTIsMi42MDg2MTA2MzAwLDANCisgICAgICAgICAgICAgIDExNS4xMTk3MTI4Mjk2LDIuNjAyNDk5NDg1MCwwDQorICAgICAgICAgICAgICAxMTUuMTEwODA5MzI2MiwyLjU5NzQ5OTM3MDYsMA0KKyAgICAgICAgICAgICAgMTE1LjEwNDQzMTE1MjMsMi41OTY5NDM4NTUzLDANCisgICAgICAgICAgICAgIDExNS4wOTgzMjc2MzY3LDIuNTk3NDk5MzcwNiwwDQorICAgICAgICAgICAgICAxMTUuMDkyNzU4MTc4NywyLjU5OTcyMTQzMTcsMA0KKyAgICAgICAgICAgICAgMTE1LjA4ODU5MjUyOTMsMi42MDI0OTk0ODUwLDANCisgICAgICAgICAgICAgIDExNS4wODMwNTM1ODg5LDIuNjEwODMzMTY4MCwwDQorICAgICAgICAgICAgICAxMTUuMDgxNjcyNjY4NSwyLjYxNjM4ODMyMDksMA0KKyAgICAgICAgICAgICAgMTE1LjExODMxNjY1MDQsMi44NTExMTA5MzUyLDANCisgICAgICAgICAgICAgIDExNS4xMzk3MDk0NzI3LDIuOTA2MTEwMjg2NywwDQorICAgICAgICAgICAgICAxMTUuMTQ4NjEyOTc2MSwyLjkxODYxMDU3MjgsMA0KKyAgICAgICAgICAgICAgMTE1LjE1NTU0ODA5NTcsMi45MjU1NTUyMjkyLDANCisgICAgICAgICAgICAgIDExNS4yNDk3MTAwODMwLDMuMDEwODMzMjYzNCwwDQorICAgICAgICAgICAgICAxMTUuMzAxMzc2MzQyOCwzLjAxNjM4ODQxNjMsMA0KKyAgICAgICAgICAgICAgMTE1LjMwNTU0MTk5MjIsMy4wMDY2NjY2NjAzLDANCisgICAgICAgICAgICAgIDExNS4zMTAyNTY5NTgwLDIuOTk3Nzc3NDYyMCwwDQorICAgICAgICAgICAgICAxMTUuMzE1ODExMTU3MiwyLjk4OTE2NjI1OTgsMA0KKyAgICAgICAgICAgICAgMTE1LjMyMDgzMTI5ODgsMi45ODYzODgyMDY1LDANCisgICAgICAgICAgICAgIDExNS4zNzUyNTkzOTk0LDIuOTkxMzg4MzIwOSwwDQorICAgICAgICAgICAgICAxMTUuMzgwODEzNTk4NiwyLjk5MjIyMTgzMjMsMA0KKyAgICAgICAgICAgICAgMTE1LjQ4NzE5Nzg3NjAsMy4wMjc0OTk2NzU4LDANCisgICAgICAgICAgICAgIDExNS40OTU1MjkxNzQ4LDMuMDM5OTk5OTYxOSwwDQorICAgICAgICAgICAgICAxMTUuNDk4ODcwODQ5NiwzLjA1MDI3NzIzMzEsMA0KKyAgICAgICAgICAgICAgMTE1LjUyODU4NzM0MTMsMy4xNzYxMTA3NDQ1LDANCisgICAgICAgICAgICAgIDExNS41MTQ3MDk0NzI3LDMuMTgyMjIxODg5NSwwDQorICAgICAgICAgICAgICAxMTUuNTExMzgzMDU2NiwzLjE4NTgzMjUwMDUsMA0KKyAgICAgICAgICAgICAgMTE1LjUwOTk4Njg3NzQsMy4xOTgzMzI3ODY2LDANCisgICAgICAgICAgICAgIDExNS41MTE5MzIzNzMwLDMuMjA5OTk5NTYxMywwDQorICAgICAgICAgICAgICAxMTUuNTI5OTgzNTIwNSwzLjMwMTY2NjI1OTgsMA0KKyAgICAgICAgICAgICAgMTE1LjUzNDE0OTE2OTksMy4zMTgzMzMxNDkwLDANCisgICAgICAgICAgICAgIDExNS41Mzg4NzkzOTQ1LDMuMzMzNjEwNTM0NywwDQorICAgICAgICAgICAgICAxMTUuNTUzMzA2NTc5NiwzLjM3Mzg4ODQ5MjYsMA0KKyAgICAgICAgICAgICAgMTE1LjU1ODg2ODQwODIsMy4zODkxNjYzNTUxLDANCisgICAgICAgICAgICAgIDExNS41NzA4MzEyOTg4LDMuNDE3Nzc3NTM4MywwDQorICAgICAgICAgICAgICAxMTUuNTc2MzkzMTI3NCwzLjQyNjExMDc0NDUsMA0KKyAgICAgICAgICAgICAgMTE1LjU4MTEwMDQ2MzksMy40MjgwNTUyODY0LDANCisgICAgICAgICAgICAgIDExNS41ODcxOTYzNTAxLDMuNDI4ODg4MzIwOSwwDQorICAgICAgICAgICAgICAxMTUuNTk2OTM5MDg2OSwzLjQyNDcyMTcxNzgsMA0KKyAgICAgICAgICAgICAgMTE1LjYwNjA4NjczMTAsMy40MTk3MjE2MDM0LDANCisgICAgICAgICAgICAgIDExNS42MTI3NjI0NTEyLDMuNDE5NzIxNjAzNCwwDQorICAgICAgICAgICAgICAxMTUuNjE4MzE2NjUwNCwzLjQyMTExMDYzMDAsMA0KKyAgICAgICAgICAgICAgMTE1LjYyNjY0Nzk0OTIsMy40MjY2NjYyNTk4LDANCisgICAgICAgICAgICAgIDExNS42MjgwMzY0OTkwLDMuNDMyMjIxODg5NSwwDQorICAgICAgICAgICAgICAxMTUuNjI4MDM2NDk5MCwzLjQzOTE2NjA2OTAsMA0KKyAgICAgICAgICAgICAgMTE1LjYyNjA4MzM3NDAsMy40NTc3Nzc1MDAyLDANCisgICAgICAgICAgICAgIDExNS42MDE5Mjg3MTA5LDMuNTM5MTY2NDUwNSwwDQorICAgICAgICAgICAgICAxMTUuNTc4ODcyNjgwNywzLjU4NTU1NTA3NjYsMA0KKyAgICAgICAgICAgICAgMTE1LjU3NDE1NzcxNDgsMy41OTQ3MjE3OTQxLDANCisgICAgICAgICAgICAgIDExNS41NzEzODA2MTUyLDMuNjEyNzc3MjMzMSwwDQorICAgICAgICAgICAgICAxMTUuNTcxMzgwNjE1MiwzLjY2NjExMDUxNTYsMA0KKyAgICAgICAgICAgICAgMTE1LjU3NjkyNzE4NTEsMy43MDg2MTA1MzQ3LDANCisgICAgICAgICAgICAgIDExNS41ODUyNzM3NDI3LDMuNzQxNjY2MzE3MCwwDQorICAgICAgICAgICAgICAxMTUuNjE2Mzc4Nzg0MiwzLjg1NDE2NjUwNzcsMA0KKyAgICAgICAgICAgICAgMTE1LjY2MjQ5MDg0NDcsNC4wNzgzMzI5MDEwLDANCisgICAgICAgICAgICAgIDExNS42NjExMDIyOTQ5LDQuMDk3Nzc3MzY2NiwwDQorICAgICAgICAgICAgICAxMTUuNjU5NzEzNzQ1MSw0LjEwODU5NjMyNDksMA0KKyAgICAgICAgICAgICAgMTE1LjYyNzE5NzI2NTYsNC4xMzEwMTEwMDkyLDANCisgICAgICAgICAgICAgIDExNS42MTg3OTczMDIyLDQuMTc5NjkxNzkxNSwwDQorICAgICAgICAgICAgICAxMTUuNjQwMTk3NzUzOSw0LjI2Nzc4NzkzMzMsMA0KKyAgICAgICAgICAgICAgMTE1LjY0Mzg5ODAxMDMsNC4zNTk4Mzg5NjI2LDANCisgICAgICAgICAgICAgIDExNS42MzY1OTY2Nzk3LDQuNTcwNjU4MjA2OSwwDQorICAgICAgICAgICAgICAxMTUuNjIwNTk3ODM5NCw0LjY4MjQxNjkxNTksMA0KKyAgICAgICAgICAgICAgMTE1LjU5NzM5Njg1MDYsNC43Nzg5Mzc4MTY2LDANCisgICAgICAgICAgICAgIDExNS41OTM1OTc0MTIxLDQuODcyMjkzOTQ5MSwwDQorICAgICAgICAgICAgICAxMTUuNTg4NjAwMTU4Nyw0Ljk1NjczODk0ODgsMA0KKyAgICAgICAgICAgICAgMTE1LjU3NzAwMzQ3OTAsNS4wMDQ5OTgyMDcxLDANCisgICAgICAgICAgICAgIDExNS40Nzk3MTM0Mzk5LDUuMDIyNzc1MTczMiwwDQorICAgICAgICAgICAgICAxMTUuNDYxOTI5MzIxMyw0Ljk5OTcyMDU3MzQsMA0KKyAgICAgICAgICAgICAgMTE1LjQ1MjIwOTQ3MjcsNC45ODg4ODc3ODY5LDANCisgICAgICAgICAgICAgIDExNS4zOTI0ODY1NzIzLDQuOTI1Mjc2NzU2MywwDQorICAgICAgICAgICAgICAxMTUuMzc4ODYwNDczNiw0LjkxMTY2NTkxNjQsMA0KKyAgICAgICAgICAgICAgMTE1LjM2NjY1MzQ0MjQsNC45MDMzMzI3MTAzLDANCisgICAgICAgICAgICAgIDExNS4zNTY5MzM1OTM4LDQuODk5NDQzNjI2NCwwDQorICAgICAgICAgICAgICAxMTUuMzM1ODIzMDU5MSw0Ljg5MzA1NDk2MjIsMA0KKyAgICAgICAgICAgICAgMTE1LjMyODg3MjY4MDcsNC44OTMwNTQ5NjIyLDANCisgICAgICAgICAgICAgIDExNS4zMjMzMTg0ODE0LDQuODk0NDQzNTEyMCwwDQorICAgICAgICAgICAgICAxMTUuMzE0NDIyNjA3NCw0Ljg5OTQ0MzYyNjQsMA0KKyAgICAgICAgICAgICAgMTE1LjMwNjkzMDU0MjAsNC45MDU1NTQ3NzE0LDANCisgICAgICAgICAgICAgIDExNS4yODYzNzY5NTMxLDQuOTI1ODMxNzk0NywwDQorICAgICAgICAgICAgICAxMTUuMjIzMzEyMzc3OSw0Ljk1NzQ5OTUwNDEsMA0KKyAgICAgICAgICAgICAgMTE1LjIxNzc1ODE3ODcsNC45NTg2MTA1MzQ3LDANCisgICAgICAgICAgICAgIDExNS4yMTE2NDcwMzM3LDQuOTU4MDU0NTQyNSwwDQorICAgICAgICAgICAgICAxMTUuMjA0MTYyNTk3Nyw0Ljk1MTk0MzM5NzUsMA0KKyAgICAgICAgICAgICAgMTE1LjE0NTc4MjQ3MDcsNC45MDMyNDAyMDM5LDANCisgICAgICAgICAgICAgIDExNS4xOTIxOTk3MDcwLDQuODQ5MTY1OTE2NCwwDQorICAgICAgICAgICAgICAxMTUuMjIzMDM3NzE5Nyw0LjgwNDk5ODM5NzgsMA0KKyAgICAgICAgICAgICAgMTE1LjI2MTM4MzA1NjYsNC42ODMwNTM5NzAzLDANCisgICAgICAgICAgICAgIDExNS4yODI0OTM1OTEzLDQuNjExNjY1NzI1NywwDQorICAgICAgICAgICAgICAxMTUuMjgyNDkzNTkxMyw0LjU5ODYwOTkyNDMsMA0KKyAgICAgICAgICAgICAgMTE1LjI3ODMyMDMxMjUsNC41ODI3NzcwMjMzLDANCisgICAgICAgICAgICAgIDExNS4yNzI3NzM3NDI3LDQuNTczODg4Nzc4NywwDQorICAgICAgICAgICAgICAxMTUuMjY4NjAwNDYzOSw0LjU2NDQ0MzU4ODMsMA0KKyAgICAgICAgICAgICAgMTE1LjI2NDQyNzE4NTEsNC41NDExMTAwMzg4LDANCisgICAgICAgICAgICAgIDExNS4yNzI0OTE0NTUxLDQuNDU0MTY2NDEyNCwwDQorICAgICAgICAgICAgICAxMTUuMjczODgwMDA0OSw0LjQ0ODYwOTM1MjEsMA0KKyAgICAgICAgICAgICAgMTE1LjI3ODA1MzI4MzcsNC40Mzg4ODc1OTYxLDANCisgICAgICAgICAgICAgIDExNS4yODM1OTk4NTM1LDQuNDMwODMxOTA5MiwwDQorICAgICAgICAgICAgICAxMTUuMjg5MTQ2NDIzMyw0LjQyMzA1NDY5NTEsMA0KKyAgICAgICAgICAgICAgMTE1LjMwMjc1NzI2MzIsNC40MTAyNzczNjY2LDANCisgICAgICAgICAgICAgIDExNS4zMTQ0MjI2MDc0LDQuMzk5NzIxMTQ1NiwwDQorICAgICAgICAgICAgICAxMTUuMzIxMzgwNjE1Miw0LjM5MzA1NDk2MjIsMA0KKyAgICAgICAgICAgICAgMTE1LjM0NDcxMTMwMzcsNC4zNjgzMzE5MDkyLDANCisgICAgICAgICAgICAgIDExNS4zNTA4MDcxODk5LDQuMzU5OTk4NzAzMCwwDQorICAgICAgICAgICAgICAxMTUuMzU1NTUyNjczMyw0LjM1MTY2NTQ5NjgsMA0KKyAgICAgICAgICAgICAgMTE1LjM1Nzc1NzU2ODQsNC4zNDY5NDM4NTUzLDANCisgICAgICAgICAgICAgIDExNS4zNjAyNjAwMDk4LDQuMzM2MTEwMTE1MSwwDQorICAgICAgICAgICAgICAxMTUuMzYwMjYwMDA5OCw0LjMyOTE2NjQxMjQsMA0KKyAgICAgICAgICAgICAgMTE1LjM1NTU1MjY3MzMsNC4zMjA4MzMyMDYyLDANCisgICAgICAgICAgICAgIDExNS4zNDg2MDIyOTQ5LDQuMzE0MTY1MTE1NCwwDQorICAgICAgICAgICAgICAxMTUuMzQzMzIyNzUzOSw0LjMxMTk0MzA1NDIsMA0KKyAgICAgICAgICAgICAgMTE1LjMzNjM4MDAwNDksNC4zMTEzODgwMTU3LDANCisgICAgICAgICAgICAgIDExNS4zMjA1NDEzODE4LDQuMzE1NTU0NjE4OCwwDQorICAgICAgICAgICAgICAxMTUuMTEzNjAxNjg0Niw0LjM3NDE2NTUzNTAsMA0KKyAgICAgICAgICAgICAgMTE1LjEwNDE1NjQ5NDEsNC4zNzg4ODcxNzY1LDANCisgICAgICAgICAgICAgIDExNS4xMDA1NDAxNjExLDQuMzgyMjIxMjIxOSwwDQorICAgICAgICAgICAgICAxMTUuMDk2MzY2ODgyMyw0LjM5MTM4NzkzOTUsMA0KKyAgICAgICAgICAgICAgMTE1LjA5MDI3MDk5NjEsNC40MTMzMzI5MzkxLDANCisgICAgICAgICAgICAgIDExNS4wMjk0MjY1NzQ3LDQuNjQ1ODMzMDE1NCwwDQorICAgICAgICAgICAgICAxMTUuMDI2NjU3MTA0NSw0LjY1NjY2NTgwMjAsMA0KKyAgICAgICAgICAgICAgMTE1LjAyMDUzODMzMDEsNC43MjQ0NDM0MzU3LDANCisgICAgICAgICAgICAgIDExNS4wMjA4MjgyNDcxLDQuNzUzMzMzMDkxNywwDQorICAgICAgICAgICAgICAxMTUuMDI5MTI5MDI4Myw0LjgyMDIxMDQ1NjgsMA0KKyAgICAgICAgICAgICAgMTE1LjAyMzMyMzA1OTEsNC44NzMzMzIwMjM2LDANCisgICAgICAgICAgICAgIDExNS4wMjI0OTE0NTUxLDQuODc5NDQzMTY4NiwwDQorICAgICAgICAgICAgICAxMTUuMDE4NDMyNjE3Miw0Ljg5NTc5NDg2ODUsMA0KKyAgICAgICAgICAgICAgMTE0Ljk5MTkyODEwMDYsNC44NDY2NjYzMzYxLDANCisgICAgICAgICAgICAgIDExNC45ODYzNjYyNzIwLDQuODM5MTY1Njg3NiwwDQorICAgICAgICAgICAgICAxMTQuOTc5NDMxMTUyMyw0LjgzMTY2NTk5MjcsMA0KKyAgICAgICAgICAgICAgMTE0Ljk2MjE5NjM1MDEsNC44MjE5NDQyMzY4LDANCisgICAgICAgICAgICAgIDExNC45NDU4MjM2Njk0LDQuODE3MjIxNjQxNSwwDQorICAgICAgICAgICAgICAxMTQuOTE3NDgwNDY4OCw0LjgxMTY2NTUzNTAsMA0KKyAgICAgICAgICAgICAgMTE0LjkwNDQyNjU3NDcsNC44MTExMDk1NDI4LDANCisgICAgICAgICAgICAgIDExNC44NzkxNTAzOTA2LDQuODEwMjc2OTg1MiwwDQorICAgICAgICAgICAgICAxMTQuODY2NjUzNDQyNCw0LjgwOTcyMDk5MzAsMA0KKyAgICAgICAgICAgICAgMTE0Ljg1NjM2OTAxODYsNC44MDYzODc5MDEzLDANCisgICAgICAgICAgICAgIDExNC44NDg4NzY5NTMxLDQuODAwODMxNzk0NywwDQorICAgICAgICAgICAgICAxMTQuNzg4ODc5Mzk0NSw0Ljc1MTY2NjA2OTAsMA0KKyAgICAgICAgICAgICAgMTE0Ljc4NTI2MzA2MTUsNC43NDc0OTg1MTIzLDANCisgICAgICAgICAgICAgIDExNC43ODA1NDgwOTU3LDQuNzM4NjEwMjY3NiwwDQorICAgICAgICAgICAgICAxMTQuNzc5MTU5NTQ1OSw0LjczMzA1NDE2MTEsMA0KKyAgICAgICAgICAgICAgMTE0Ljc3Nzc3MDk5NjEsNC43MjA4MzI4MjQ3LDANCisgICAgICAgICAgICAgIDExNC43Nzk5ODM1MjA1LDQuNzA5MTY1NTczMSwwDQorICAgICAgICAgICAgICAxMTQuNzg1MjYzMDYxNSw0LjcwMDgzMjM2NjksMA0KKyAgICAgICAgICAgICAgMTE0Ljc5MTY1NjQ5NDEsNC42OTM4ODc3MTA2LDANCisgICAgICAgICAgICAgIDExNC44MTU1MzY0OTkwLDQuNTgwODMyNDgxNCwwDQorICAgICAgICAgICAgICAxMTQuODI1ODIwOTIyOSw0LjQ5NTgzMjQ0MzIsMA0KKyAgICAgICAgICAgICAgMTE0LjgyOTE2MjU5NzcsNC40NzM4ODgzOTcyLDANCisgICAgICAgICAgICAgIDExNC44MzQ3MTY3OTY5LDQuNDQ2Mzg3MjkxMCwwDQorICAgICAgICAgICAgICAxMTQuODQwODIwMzEyNSw0LjQzNzQ5OTA0NjMsMA0KKyAgICAgICAgICAgICAgMTE0Ljg0NDE0NjcyODUsNC40MzQ3MjA5OTMwLDANCisgICAgICAgICAgICAgIDExNC44NDg4NzY5NTMxLDQuNDMyNzc2NDUxMSwwDQorICAgICAgICAgICAgICAxMTQuODU1ODE5NzAyMSw0LjQzMTk0MjkzOTgsMA0KKyAgICAgICAgICAgICAgMTE0Ljg2MjE5Nzg3NjAsNC40MzMzMzI0NDMyLDANCisgICAgICAgICAgICAgIDExNC44NjY5MjgxMDA2LDQuMzU1Mjc3MDYxNSwwDQorICAgICAgICAgICAgICAxMTQuODA3NDc5ODU4NCw0LjE0Njk0NDA0NjAsMA0KKyAgICAgICAgICAgICAgMTE0LjgwNTI1MjA3NTIsNC4xNDIyMjE0NTA4LDANCisgICAgICAgICAgICAgIDExNC43OTMwNTI2NzMzLDQuMTI2OTQzNTg4MywwDQorICAgICAgICAgICAgICAxMTQuNzA5MTUyMjIxNyw0LjA1MzA1Mzg1NTksMA0KKyAgICAgICAgICAgICAgMTE0LjcwMTY2MDE1NjMsNC4wNDY5NDM2NjQ2LDANCisgICAgICAgICAgICAgIDExNC42Njk5ODI5MTAyLDQuMDI5NzIxMjYwMSwwDQorICAgICAgICAgICAgICAxMTQuNjQ5OTg2MjY3MSw0LjAyMjIyMTU2NTIsMA0KKyAgICAgICAgICAgICAgMTE0LjY0MTA5ODAyMjUsNC4wMTg4ODg0NzM1LDANCisgICAgICAgICAgICAgIDExNC42MzQ5ODY4Nzc0LDQuMDE3NDk4OTcwMCwwDQorICAgICAgICAgICAgICAxMTQuNjIzMDMxNjE2Miw0LjAyMDI3NzAyMzMsMA0KKyAgICAgICAgICAgICAgMTE0LjYxODMxNjY1MDQsNC4wMjE2NjU1NzMxLDANCisgICAgICAgICAgICAgIDExNC42MTM2MDE2ODQ2LDQuMDI0NDQzNjI2NCwwDQorICAgICAgICAgICAgICAxMTQuNjA5OTkyOTgxMCw0LjAyNzc3NjcxODEsMA0KKyAgICAgICAgICAgICAgMTE0LjYwODg3MTQ2MDAsNC4wMzM4ODc4NjMyLDANCisgICAgICAgICAgICAgIDExNC42MDk0MjA3NzY0LDQuMDUzMzMyMzI4OCwwDQorICAgICAgICAgICAgICAxMTQuNjA3NDgyOTEwMiw0LjA1ODA1Mzk3MDMsMA0KKyAgICAgICAgICAgICAgMTE0LjQ3NTU0MDE2MTEsNC4xOTk5OTk4MDkzLDANCisgICAgICAgICAgICAgIDExNC4zOTk5ODYyNjcxLDQuMjU2Mzg4NjY0MiwwDQorICAgICAgICAgICAgICAxMTQuMzI5OTg2NTcyMyw0LjMyNjk0NDM1MTIsMA0KKyAgICAgICAgICAgICAgMTE0LjMyOTE2MjU5NzcsNC4zMzk5OTkxOTg5LDANCisgICAgICAgICAgICAgIDExNC4zMTEzNzA4NDk2LDQuNDI5MTY1ODQwMSwwDQorICAgICAgICAgICAgICAxMTQuMzA2NjQwNjI1MCw0LjQzNzIyMDU3MzQsMA0KKyAgICAgICAgICAgICAgMTE0LjI2Mzg5MzEyNzQsNC40OTc0OTg1MTIzLDANCisgICAgICAgICAgICAgIDExNC4yNDYwOTM3NTAwLDQuNTIxNjY1NTczMSwwDQorICAgICAgICAgICAgICAxMTQuMjM1ODA5MzI2Miw0LjUzMTk0MzMyMTIsMA0KKyAgICAgICAgICAgICAgMTE0LjE4ODMwODcxNTgsNC41NjY5NDQxMjIzLDANCisgICAgICAgICAgICAgIDExNC4xNzk5Nzc0MTcwLDQuNTcyNDk5Mjc1MiwwDQorICAgICAgICAgICAgICAxMTQuMTY0OTkzMjg2MSw0LjU3Nzc3NjkwODksMA0KKyAgICAgICAgICAgICAgMTE0LjE1MzMyMDMxMjUsNC41Nzk5OTk5MjM3LDANCisgICAgICAgICAgICAgIDExNC4wOTUwNzc1MTQ2LDQuNTkwNTM4MDI0OSwwDQorICAgICAgICAgICAgPC9jb29yZGluYXRlcz4NCisgICAgICAgICAgPC9MaW5lYXJSaW5nPg0KKyAgICAgICAgPC9vdXRlckJvdW5kYXJ5SXM+DQorICAgICAgPC9Qb2x5Z29uPg0KKyAgICA8L1BsYWNlbWFyaz4NCisgICAgPFBsYWNlbWFyaz4NCisgICAgICA8ZGVzY3JpcHRpb24+PCFbQ0RBVEFbIFVua25vd24gQXJlYSBUeXBlPEJSPjxCUj48Qj5GSVBTX0FETUlOPC9CPiA9IE1ZMTI8QlI+PEJSPjxCPkdNSV9BRE1JTjwvQj4gPSBNWVMtU0xOPEJSPjxCUj48Qj5BRE1JTl9OQU1FPC9CPiA9IFNlbGFuZ29yPEJSPjxCUj48Qj5GSVBTX0NOVFJZPC9CPiA9IE1ZPEJSPjxCUj48Qj5HTUlfQ05UUlk8L0I+ID0gTVlTPEJSPjxCUj48Qj5DTlRSWV9OQU1FPC9CPiA9IE1hbGF5c2lhPEJSPjxCUj48Qj5SRUdJT048L0I+ID0gU291dGhlYXN0ZXJuIEFzaWE8QlI+PEJSPjxCPkNPTlRJTkVOVDwvQj4gPSBBc2lhPEJSPjxCUj48Qj5QT1BfQURNSU48L0I+ID0gMzU0OTE5MDxCUj48QlI+PEI+U1FLTV9BRE1JTjwvQj4gPSA3OTA0LjY5MjxCUj48QlI+PEI+U1FNSV9BRE1JTjwvQj4gPSAzMDUyLjAwMTxCUj48QlI+PEI+VFlQRV9FTkc8L0I+ID0gU3RhdGU8QlI+PEJSPjxCPlRZUEVfTE9DPC9CPiA9IE5lZ2VyaTxCUj48QlI+PEI+Q09MT1JfTUFQPC9CPiA9IDggXV0+PC9kZXNjcmlwdGlvbj4NCisgICAgICA8c3R5bGVVcmw+I2FyZWExPC9zdHlsZVVybD4NCisgICAgICA8UG9seWdvbj4NCisgICAgICAgIDxvdXRlckJvdW5kYXJ5SXM+DQorICAgICAgICAgIDxMaW5lYXJSaW5nPg0KKyAgICAgICAgICAgIDxjb29yZGluYXRlcz4NCisgICAgICAgICAgICAgIDEwMS45MTU3NzE0ODQ0LDMuMjYwNTEyMzUyMCwwDQorICAgICAgICAgICAgICAxMDEuOTA4MDIwMDE5NSwzLjI1OTcyMTI3OTEsMA0KKyAgICAgICAgICAgICAgMTAxLjg5MTA4Mjc2MzcsMy4yNjExMTAzMDU4LDANCisgICAgICAgICAgICAgIDEwMS44ODY2NDI0NTYxLDMuMjYxNjY1ODIxMSwwDQorICAgICAgICAgICAgICAxMDEuODMyNzQ4NDEzMSwzLjI4NzIyMTQzMTcsMA0KKyAgICAgICAgICAgICAgMTAxLjgyOTk3MTMxMzUsMy4yODg4ODc5Nzc2LDANCisgICAgICAgICAgICAgIDEwMS44MTg4NjI5MTUwLDMuMzAwMjc2NzU2MywwDQorICAgICAgICAgICAgICAxMDEuNzg5Njg4MTEwNCwzLjMzMzYxMDA1NzgsMA0KKyAgICAgICAgICAgICAgMTAxLjc4MDgwNzQ5NTEsMy4zNDY5NDMzNzg0LDANCisgICAgICAgICAgICAgIDEwMS43NjcxOTY2NTUzLDMuMzY5NDQzNDE2NiwwDQorICAgICAgICAgICAgICAxMDEuNzY0MTM3MjY4MSwzLjM3NDcyMTA1MDMsMA0KKyAgICAgICAgICAgICAgMTAxLjc2NDEzNzI2ODEsMy4zNzk0NDMxNjg2LDANCisgICAgICAgICAgICAgIDEwMS43NjMzMTMyOTM1LDMuNDk2Mzg3OTU4NSwwDQorICAgICAgICAgICAgICAxMDEuNzYzODcwMjM5MywzLjQ5OTk5OTUyMzIsMA0KKyAgICAgICAgICAgICAgMTAxLjc2NjA4Mjc2MzcsMy41MDY2NjYxODM1LDANCisgICAgICAgICAgICAgIDEwMS43Nzk2OTM2MDM1LDMuNTMzODg4MzQwMCwwDQorICAgICAgICAgICAgICAxMDEuNzg1Nzk3MTE5MSwzLjU0MTM4ODAzNDgsMA0KKyAgICAgICAgICAgICAgMTAxLjc5MTY0MTIzNTQsMy41NDQ5OTkxMjI2LDANCisgICAgICAgICAgICAgIDEwMS43OTg4NTg2NDI2LDMuNTQ2MTEwMTUzMiwwDQorICAgICAgICAgICAgICAxMDEuODA1NTI2NzMzNCwzLjU1Mjc3NjgxMzUsMA0KKyAgICAgICAgICAgICAgMTAxLjgwODI5NjIwMzYsMy41NTk0NDM0NzM4LDANCisgICAgICAgICAgICAgIDEwMS44MTUyNDY1ODIwLDMuNTkyMjIxMjYwMSwwDQorICAgICAgICAgICAgICAxMDEuODE1MjQ2NTgyMCwzLjU5NjY2NTg1OTIsMA0KKyAgICAgICAgICAgICAgMTAxLjgxMzU4MzM3NDAsMy42MDMzMzI1MTk1LDANCisgICAgICAgICAgICAgIDEwMS43NzAyNDg0MTMxLDMuNjcyMjIxMTgzOCwwDQorICAgICAgICAgICAgICAxMDEuNzY4MDQzNTE4MSwzLjY3NDQ0MzcyMTgsMA0KKyAgICAgICAgICAgICAgMTAxLjczODI5NjUwODgsMy42OTgzMzIzMDk3LDANCisgICAgICAgICAgICAgIDEwMS43MzE5MTgzMzUwLDMuNzAxMTEwMzYzMCwwDQorICAgICAgICAgICAgICAxMDEuNzIzODYxNjk0MywzLjcwMTY2NTg3ODMsMA0KKyAgICAgICAgICAgICAgMTAxLjcxNTgxMjY4MzEsMy43MDA4MzIzNjY5LDANCisgICAgICAgICAgICAgIDEwMS42OTYwODMwNjg4LDMuNzAxNjY1ODc4MywwDQorICAgICAgICAgICAgICAxMDEuNjkxOTA5NzkwMCwzLjcwMTk0MzM5NzUsMA0KKyAgICAgICAgICAgICAgMTAxLjY1OTQwODU2OTMsMy43MTg2MDk4MDk5LDANCisgICAgICAgICAgICAgIDEwMS42MjY5MDczNDg2LDMuNzYyMjIxMzM2NCwwDQorICAgICAgICAgICAgICAxMDEuNjI2NjMyNjkwNCwzLjc3MTY2NTU3MzEsMA0KKyAgICAgICAgICAgICAgMTAxLjU3OTE0NzMzODksMy43MjExMDk4NjcxLDANCisgICAgICAgICAgICAgIDEwMS41NjM1ODMzNzQwLDMuNzA1ODMyNDgxNCwwDQorICAgICAgICAgICAgICAxMDEuNTQ0MTI4NDE4MCwzLjY4OTQ0MzExMTQsMA0KKyAgICAgICAgICAgICAgMTAxLjUzOTEzODc5MzksMy42ODU1NTQ5ODEyLDANCisgICAgICAgICAgICAgIDEwMS41MjI0NzYxOTYzLDMuNjc1Mjc3MjMzMSwwDQorICAgICAgICAgICAgICAxMDEuNTE2MDgyNzYzNywzLjY3MzMzMzE2ODAsMA0KKyAgICAgICAgICAgICAgMTAxLjUxMjE5MTc3MjUsMy42NzM2MTA2ODczLDANCisgICAgICAgICAgICAgIDEwMS4zOTIxOTY2NTUzLDMuNzY4ODg4NDczNSwwDQorICAgICAgICAgICAgICAxMDEuMzQxNjM2NjU3NywzLjczNDQ0NDE0MTQsMA0KKyAgICAgICAgICAgICAgMTAxLjI1MjE5NzI2NTYsMy42Nzc0OTk3NzExLDANCisgICAgICAgICAgICAgIDEwMS4xMjY2MzI2OTA0LDMuNzM2MTEwNjg3MywwDQorICAgICAgICAgICAgICAxMDEuMDI2MzY3MTg3NSwzLjc5OTcyMTcxNzgsMA0KKyAgICAgICAgICAgICAgMTAwLjk0NTUxMDg2NDMsMy44NTk0NDQxNDE0LDANCisgICAgICAgICAgICAgIDEwMC45NDI3MzM3NjQ2LDMuODYxMzg4NjgzMywwDQorICAgICAgICAgICAgICAxMDAuOTM5NDA3MzQ4NiwzLjg2MjIyMTcxNzgsMA0KKyAgICAgICAgICAgICAgMTAwLjkyNzE5MjY4ODAsMy44NjA1NTUxNzIwLDANCisgICAgICAgICAgICAgIDEwMC44NjMwMjE4NTA2LDMuODQ5NzIxNDMxNywwDQorICAgICAgICAgICAgICAxMDAuODQ0MTMxNDY5NywzLjg0NDMzNDEyNTUsMA0KKyAgICAgICAgICAgICAgMTAwLjgyODU4Mjc2MzcsMy44MjgzMzI5MDEwLDANCisgICAgICAgICAgICAgIDEwMC44MjIxOTY5NjA0LDMuODIwODMzMjA2MiwwDQorICAgICAgICAgICAgICAxMDAuODEwNzkxMDE1NiwzLjgwNDcyMTgzMjMsMA0KKyAgICAgICAgICAgICAgMTAwLjgwODU3ODQ5MTIsMy43OTk5OTk3MTM5LDANCisgICAgICAgICAgICAgIDEwMC44MDcxODk5NDE0LDMuNzk0NDQ0MDg0MiwwDQorICAgICAgICAgICAgICAxMDAuODA2OTIyOTEyNiwzLjc4NzQ5OTkwNDYsMA0KKyAgICAgICAgICAgICAgMTAwLjgwNzQ1Njk3MDIsMy43ODEzODgyODI4LDANCisgICAgICAgICAgICAgIDEwMC44MTAyNDE2OTkyLDMuNzc3MjIxNjc5NywwDQorICAgICAgICAgICAgICAxMDAuODEzNTgzMzc0MCwzLjc3MzYxMDU5MTksMA0KKyAgICAgICAgICAgICAgMTAwLjgyNTgxMzI5MzUsMy43NzE5NDQwNDYwLDANCisgICAgICAgICAgICAgIDEwMC44Mzk2OTExNjIxLDMuNzcxNjY2MDUwMCwwDQorICAgICAgICAgICAgICAxMDAuODU4MzA2ODg0OCwzLjc2OTE2NTk5MjcsMA0KKyAgICAgICAgICAgICAgMTAwLjg2ODU4MzY3OTIsMy43NjU1NTUzODE4LDANCisgICAgICAgICAgICAgIDEwMC44ODQ5NzkyNDgwLDMuNzUzODg4NjA3MCwwDQorICAgICAgICAgICAgICAxMDEuMDI4MDMwMzk1NSwzLjYyODA1NTA5NTcsMA0KKyAgICAgICAgICAgICAgMTAxLjA0MTY0MTIzNTQsMy42MTMzMzMyMjUzLDANCisgICAgICAgICAgICAgIDEwMS4wNTI3NDk2MzM4LDMuNTk2OTQzODU1MywwDQorICAgICAgICAgICAgICAxMDEuMDU5OTY3MDQxMCwzLjU3Njk0NDM1MTIsMA0KKyAgICAgICAgICAgICAgMTAxLjA2NDk3MTkyMzgsMy41NTQ3MjE4MzIzLDANCisgICAgICAgICAgICAgIDEwMS4wNzE5MDcwNDM1LDMuNTM0NzIxODUxMywwDQorICAgICAgICAgICAgICAxMDEuMDkxMDc5NzExOSwzLjQ5OTE2NjAxMTgsMA0KKyAgICAgICAgICAgICAgMTAxLjEwNjM1Mzc1OTgsMy40NzMzMzI4ODE5LDANCisgICAgICAgICAgICAgIDEwMS4xMTE2MzMzMDA4LDMuNDY0NzIxNjc5NywwDQorICAgICAgICAgICAgICAxMDEuMTgwNTI2NzMzNCwzLjM3NTU1NTAzODUsMA0KKyAgICAgICAgICAgICAgMTAxLjE5MzI5ODMzOTgsMy4zNjA4MzMxNjgwLDANCisgICAgICAgICAgICAgIDEwMS4xOTk5ODE2ODk1LDMuMzUzODg4NTExNywwDQorICAgICAgICAgICAgICAxMDEuMjI1MjUwMjQ0MSwzLjM0NDQ0Mzc5ODEsMA0KKyAgICAgICAgICAgICAgMTAxLjIzNDcwMzA2NDAsMy4zMzk5OTk2NzU4LDANCisgICAgICAgICAgICAgIDEwMS4yMzg4NjEwODQwLDMuMzM2OTQ0MTAzMiwwDQorICAgICAgICAgICAgICAxMDEuMjQyMTg3NTAwMCwzLjMzMzYxMDUzNDcsMA0KKyAgICAgICAgICAgICAgMTAxLjI4NTc5NzExOTEsMy4yODA4MzI3Njc1LDANCisgICAgICAgICAgICAgIDEwMS4yOTQ0MTgzMzUwLDMuMjY4ODg4NDczNSwwDQorICAgICAgICAgICAgICAxMDEuMzAwMjQ3MTkyNCwzLjI1NDQ0NDEyMjMsMA0KKyAgICAgICAgICAgICAgMTAxLjMwNTIzNjgxNjQsMy4yMzIyMjE2MDM0LDANCisgICAgICAgICAgICAgIDEwMS4zMDU4MDEzOTE2LDMuMjA2MTEwNDc3NCwwDQorICAgICAgICAgICAgICAxMDEuMzE2NjUwMzkwNiwzLjEzNTU1NTI2NzMsMA0KKyAgICAgICAgICAgICAgMTAxLjMxNzc0OTAyMzQsMy4xMjk5OTk2Mzc2LDANCisgICAgICAgICAgICAgIDEwMS4zMjE2NDAwMTQ2LDMuMTIwMjc3NDA0OCwwDQorICAgICAgICAgICAgICAxMDEuMzQ1ODA5OTM2NSwzLjA5NjM4ODM0MDAsMA0KKyAgICAgICAgICAgICAgMTAxLjM1NTc5NjgxNDAsMy4wODU1NTUwNzY2LDANCisgICAgICAgICAgICAgIDEwMS4zNjEzNTg2NDI2LDMuMDc3MjIxODcwNCwwDQorICAgICAgICAgICAgICAxMDEuMzY3MTg3NTAwMCwzLjA2Mjc3NzA0MjQsMA0KKyAgICAgICAgICAgICAgMTAxLjM2ODMwMTM5MTYsMy4wNTcyMjE4ODk1LDANCisgICAgICAgICAgICAgIDEwMS4zNzEwNzg0OTEyLDMuMDMzMDU0ODI4NiwwDQorICAgICAgICAgICAgICAxMDEuMzcyNDY3MDQxMCwzLjAwMDU1NTUxNTMsMA0KKyAgICAgICAgICAgICAgMTAxLjM3MTYyNzgwNzYsMi45OTQ0NDM4OTM0LDANCisgICAgICAgICAgICAgIDEwMS4zNjQ0MTA0MDA0LDIuOTg3Nzc3MjMzMSwwDQorICAgICAgICAgICAgICAxMDEuMzU2MDc5MTAxNiwyLjk4MjQ5OTEyMjYsMA0KKyAgICAgICAgICAgICAgMTAxLjM0MTM0Njc0MDcsMi45NzY2NjU5NzM3LDANCisgICAgICAgICAgICAgIDEwMS4zMjk0MjE5OTcxLDIuOTY4MDU0NzcxNCwwDQorICAgICAgICAgICAgICAxMDEuMzE2MDcwNTU2NiwyLjk1Mzg4ODQxNjMsMA0KKyAgICAgICAgICAgICAgMTAxLjI5NDY5Mjk5MzIsMi45MTk5OTk1OTk1LDANCisgICAgICAgICAgICAgIDEwMS4yODEzNTY4MTE1LDIuODk0MTY2NDY5NiwwDQorICAgICAgICAgICAgICAxMDEuMjgyNDcwNzAzMSwyLjg1MjIyMTk2NTgsMA0KKyAgICAgICAgICAgICAgMTAxLjI4MzA0MjkwNzcsMi44NDYxMTAzNDM5LDANCisgICAgICAgICAgICAgIDEwMS4yODQ5NzMxNDQ1LDIuODQxMTEwNzA2MywwDQorICAgICAgICAgICAgICAxMDEuMjkyNDcyODM5NCwyLjgzNDcyMTU2NTIsMA0KKyAgICAgICAgICAgICAgMTAxLjMwNzQ1Njk3MDIsMi44Mjg4ODg0MTYzLDANCisgICAgICAgICAgICAgIDEwMS4zMTkxMzc1NzMyLDIuODI2NjY2MzU1MSwwDQorICAgICAgICAgICAgICAxMDEuMzYwMjM3MTIxNiwyLjgyNTU1NTMyNDYsMA0KKyAgICAgICAgICAgICAgMTAxLjM3NzQ1NjY2NTAsMi44MjE2NjYyNDA3LDANCisgICAgICAgICAgICAgIDEwMS4zOTI0NzEzMTM1LDIuODE1ODMyNjE0OSwwDQorICAgICAgICAgICAgICAxMDEuNDAxMzY3MTg3NSwyLjgxMDgzMjk3NzMsMA0KKyAgICAgICAgICAgICAgMTAxLjQxMzU4OTQ3NzUsMi44MDIyMjE3NzUxLDANCisgICAgICAgICAgICAgIDEwMS40MzMwMjkxNzQ4LDIuNzgwMjc3MjUyMiwwDQorICAgICAgICAgICAgICAxMDEuNDQzNTcyOTk4MCwyLjc2MzYxMDgzOTgsMA0KKyAgICAgICAgICAgICAgMTAxLjQ1MDgxMzI5MzUsMi43NTAyNzc1MTkyLDANCisgICAgICAgICAgICAgIDEwMS40NTQ2OTY2NTUzLDIuNzQwNTU1Mjg2NCwwDQorICAgICAgICAgICAgICAxMDEuNDU3MTk5MDk2NywyLjczNjM4ODIwNjUsMA0KKyAgICAgICAgICAgICAgMTAxLjQ2Nzc0MjkxOTksMi43MTk3MjEzMTczLDANCisgICAgICAgICAgICAgIDEwMS40NzY2Mzg3OTM5LDIuNzA3Nzc3NTAwMiwwDQorICAgICAgICAgICAgICAxMDEuNDg2NjMzMzAwOCwyLjY5NzIyMTc1NjAsMA0KKyAgICAgICAgICAgICAgMTAxLjUwNDgyMTc3NzMsMi42ODA5MTQ0MDIwLDANCisgICAgICAgICAgICAgIDEwMS41MTc0NzEzMTM1LDIuNjcxNjY2MTQ1MywwDQorICAgICAgICAgICAgICAxMDEuNTQ5NDA3OTU5MCwyLjY1NDk5OTI1NjEsMA0KKyAgICAgICAgICAgICAgMTAxLjY5ODAxMzMwNTcsMi41OTQ3MjEzMTczLDANCisgICAgICAgICAgICAgIDEwMS43MjA1MjAwMTk1LDIuNTkxNDc2OTE3MywwDQorICAgICAgICAgICAgICAxMDEuNzIxMzU5MjUyOSwyLjYwNDcyMTU0NjIsMA0KKyAgICAgICAgICAgICAgMTAxLjcyMjQ3MzE0NDUsMi42MjExMDk5NjI1LDANCisgICAgICAgICAgICAgIDEwMS43MjMyOTcxMTkxLDIuNjI1Mjc2NTY1NiwwDQorICAgICAgICAgICAgICAxMDEuNzM2NjMzMzAwOCwyLjY2NDcyMTAxMjEsMA0KKyAgICAgICAgICAgICAgMTAxLjczOTQxMDQwMDQsMi42NzExMTAxNTMyLDANCisgICAgICAgICAgICAgIDEwMS43NDE2MzgxODM2LDIuNjczMzMyNjkxMiwwDQorICAgICAgICAgICAgICAxMDEuNzQ0Njg5OTQxNCwyLjY3NDk5OTIzNzEsMA0KKyAgICAgICAgICAgICAgMTAxLjc0ODMwNjI3NDQsMi42NzUyNzY3NTYzLDANCisgICAgICAgICAgICAgIDEwMS43NTQxNTAzOTA2LDIuNjc4MzMyMzI4OCwwDQorICAgICAgICAgICAgICAxMDEuNzYzMzEzMjkzNSwyLjY5OTQ0MzM0MDMsMA0KKyAgICAgICAgICAgICAgMTAxLjc3MTA4NzY0NjUsMi43MzA4MzIwOTk5LDANCisgICAgICAgICAgICAgIDEwMS43NzM1OTAwODc5LDIuNzQxOTQzMzU5NCwwDQorICAgICAgICAgICAgICAxMDEuNzcyNzUwODU0NSwyLjc3NDk5OTE0MTcsMA0KKyAgICAgICAgICAgICAgMTAxLjc2MTkxNzExNDMsMi44MTMzMzI1NTc3LDANCisgICAgICAgICAgICAgIDEwMS43NTU1Mzg5NDA0LDIuODM4MDU0NjU3MCwwDQorICAgICAgICAgICAgICAxMDEuNzUyNDcxOTIzOCwyLjg1Mjc3NzAwNDIsMA0KKyAgICAgICAgICAgICAgMTAxLjc1MjQ3MTkyMzgsMi44NTY2NjYwODgxLDANCisgICAgICAgICAgICAgIDEwMS43NTQ0MzI2NzgyLDIuODU5OTk5MTc5OCwwDQorICAgICAgICAgICAgICAxMDEuNzYwMjQ2Mjc2OSwyLjg2MzMzMjc0ODQsMA0KKyAgICAgICAgICAgICAgMTAxLjc3MDgxMjk4ODMsMi44NjU1NTQ4MDk2LDANCisgICAgICAgICAgICAgIDEwMS43Nzk0MTg5NDUzLDIuODY2Mzg3ODQ0MSwwDQorICAgICAgICAgICAgICAxMDEuNzk2OTIwNzc2NCwyLjg2NTgzMjMyODgsMA0KKyAgICAgICAgICAgICAgMTAxLjgxNzQ2NjczNTgsMi44NjM4ODgyNjM3LDANCisgICAgICAgICAgICAgIDEwMS44MzIxOTkwOTY3LDIuODYxMTEwMjEwNCwwDQorICAgICAgICAgICAgICAxMDEuODM5MTQxODQ1NywyLjg1ODYxMDE1MzIsMA0KKyAgICAgICAgICAgICAgMTAxLjg1NDY5MDU1MTgsMi44NTYzODgwOTIwLDANCisgICAgICAgICAgICAgIDEwMS44NTk0MTMxNDcwLDIuODU2NjY2MDg4MSwwDQorICAgICAgICAgICAgICAxMDEuODY2MzYzNTI1NCwyLjg1ODMzMjYzNDAsMA0KKyAgICAgICAgICAgICAgMTAxLjg3Mjc0MTY5OTIsMi44NjA1NTQ2OTUxLDANCisgICAgICAgICAgICAgIDEwMS44NzU1MTg3OTg4LDIuODYyNDk5MjM3MSwwDQorICAgICAgICAgICAgICAxMDEuODgwMjQ5MDIzNCwyLjg2NjY2NTg0MDEsMA0KKyAgICAgICAgICAgICAgMTAxLjg4NTgwMzIyMjcsMi44NzQ0NDM1MzEwLDANCisgICAgICAgICAgICAgIDEwMS45NTgzMTI5ODgzLDMuMDI1Mjc2NjYwOSwwDQorICAgICAgICAgICAgICAxMDEuOTYxOTA2NDMzMSwzLjEyNjExMDA3NjksMA0KKyAgICAgICAgICAgICAgMTAxLjk2MTkwNjQzMzEsMy4xNDI3NzY5NjYxLDANCisgICAgICAgICAgICAgIDEwMS45NDU4MDA3ODEzLDMuMjIxMzg3ODYzMiwwDQorICAgICAgICAgICAgICAxMDEuOTQzNTcyOTk4MCwzLjIyNzc3NjUyNzQsMA0KKyAgICAgICAgICAgICAgMTAxLjkzMzU3ODQ5MTIsMy4yNDkxNjU1MzUwLDANCisgICAgICAgICAgICAgIDEwMS45Mjk5NjIxNTgyLDMuMjU0NzIxNjQxNSwwDQorICAgICAgICAgICAgICAxMDEuOTI3NzQ5NjMzOCwzLjI1Njk0MzcwMjcsMA0KKyAgICAgICAgICAgICAgMTAxLjkyMTkxMzE0NzAsMy4yNjA1NTQ3OTA1LDANCisgICAgICAgICAgICAgIDEwMS45MTgwMjk3ODUyLDMuMjYwODMyNzg2NiwwDQorICAgICAgICAgICAgICAxMDEuOTE1NzcxNDg0NCwzLjI2MDUxMjM1MjAsMA0KKyAgICAgICAgICAgIDwvY29vcmRpbmF0ZXM+DQorICAgICAgICAgIDwvTGluZWFyUmluZz4NCisgICAgICAgIDwvb3V0ZXJCb3VuZGFyeUlzPg0KKyAgICAgICAgPGlubmVyQm91bmRhcnlJcz4NCisgICAgICAgICAgPExpbmVhclJpbmc+DQorICAgICAgICAgICAgPGNvb3JkaW5hdGVzPg0KKyAgICAgICAgICAgICAgMTAxLjYwNTc5NjgxNDAsMy4wNjMyNjI5Mzk1LDANCisgICAgICAgICAgICAgIDEwMS42MDU3OTY4MTQwLDMuMjIzNjg5MDc5MywwDQorICAgICAgICAgICAgICAxMDEuNzQxMzAyNDkwMiwzLjIyMzY5OTA5MjksMA0KKyAgICAgICAgICAgICAgMTAxLjc0MTIwMzMwODEsMy4xMzE1MzI5MDc1LDANCisgICAgICAgICAgICAgIDEwMS43MjI5OTk1NzI4LDMuMDYzMjcxMDQ1NywwDQorICAgICAgICAgICAgICAxMDEuNjA1Nzk2ODE0MCwzLjA2MzI2MjkzOTUsMA0KKyAgICAgICAgICAgIDwvY29vcmRpbmF0ZXM+DQorICAgICAgICAgIDwvTGluZWFyUmluZz4NCisgICAgICAgIDwvaW5uZXJCb3VuZGFyeUlzPg0KKyAgICAgIDwvUG9seWdvbj4NCisgICAgPC9QbGFjZW1hcms+DQorICAgIDxQbGFjZW1hcms+DQorICAgICAgPGRlc2NyaXB0aW9uPjwhW0NEQVRBWyBVbmtub3duIEFyZWEgVHlwZTxCUj48QlI+PEI+RklQU19BRE1JTjwvQj4gPSBNWTEzPEJSPjxCUj48Qj5HTUlfQURNSU48L0I+ID0gTVlTLVRSTjxCUj48QlI+PEI+QURNSU5fTkFNRTwvQj4gPSBUZXJlbmdnYW51PEJSPjxCUj48Qj5GSVBTX0NOVFJZPC9CPiA9IE1ZPEJSPjxCUj48Qj5HTUlfQ05UUlk8L0I+ID0gTVlTPEJSPjxCUj48Qj5DTlRSWV9OQU1FPC9CPiA9IE1hbGF5c2lhPEJSPjxCUj48Qj5SRUdJT048L0I+ID0gU291dGhlYXN0ZXJuIEFzaWE8QlI+PEJSPjxCPkNPTlRJTkVOVDwvQj4gPSBBc2lhPEJSPjxCUj48Qj5QT1BfQURNSU48L0I+ID0gODMxMjI4PEJSPjxCUj48Qj5TUUtNX0FETUlOPC9CPiA9IDEzMTI0LjE0MDxCUj48QlI+PEI+U1FNSV9BRE1JTjwvQj4gPSA1MDY3LjIzMDxCUj48QlI+PEI+VFlQRV9FTkc8L0I+ID0gU3RhdGU8QlI+PEJSPjxCPlRZUEVfTE9DPC9CPiA9IE5lZ2VyaTxCUj48QlI+PEI+Q09MT1JfTUFQPC9CPiA9IDEwIF1dPjwvZGVzY3JpcHRpb24+DQorICAgICAgPHN0eWxlVXJsPiNhcmVhMTwvc3R5bGVVcmw+DQorICAgICAgPFBvbHlnb24+DQorICAgICAgICA8b3V0ZXJCb3VuZGFyeUlzPg0KKyAgICAgICAgICA8TGluZWFyUmluZz4NCisgICAgICAgICAgICA8Y29vcmRpbmF0ZXM+DQorICAgICAgICAgICAgICAxMDIuNjYwNTIyNDYwOSw0Ljc2ODMzMTUyNzcsMA0KKyAgICAgICAgICAgICAgMTAyLjY2NDY4ODExMDQsNC43NDk3MTk2MTk4LDANCisgICAgICAgICAgICAgIDEwMi42NjYwNzY2NjAyLDQuNzQ2OTQyNTIwMSwwDQorICAgICAgICAgICAgICAxMDIuNjg1MjQxNjk5Miw0LjcyMTEwOTM5MDMsMA0KKyAgICAgICAgICAgICAgMTAyLjY4OTY4MjAwNjgsNC43MTY2NjUyNjc5LDANCisgICAgICAgICAgICAgIDEwMi43MzI0Njc2NTE0LDQuNjg3NDk4MDkyNywwDQorICAgICAgICAgICAgICAxMDIuNzM2MDc2MzU1MCw0LjY4NjM4NjEwODQsMA0KKyAgICAgICAgICAgICAgMTAyLjc2NjA5ODAyMjUsNC42Nzk0NDI0MDU3LDANCisgICAgICAgICAgICAgIDEwMi43NzAyNjM2NzE5LDQuNjc4ODg2NDEzNiwwDQorICAgICAgICAgICAgICAxMDIuNzgzNTk5ODUzNSw0LjY3NzIyMTI5ODIsMA0KKyAgICAgICAgICAgICAgMTAyLjgwNTI1MjA3NTIsNC42Nzc0OTg4MTc0LDANCisgICAgICAgICAgICAgIDEwMi44MjA1NDEzODE4LDQuNjc5OTk5MzUxNSwwDQorICAgICAgICAgICAgICAxMDIuODI4ODcyNjgwNyw0LjY4MDgzMTkwOTIsMA0KKyAgICAgICAgICAgICAgMTAyLjgzNjkyOTMyMTMsNC42ODExMTAzODIxLDANCisgICAgICAgICAgICAgIDEwMi44NDMwNDgwOTU3LDQuNjc4NjA5ODQ4MCwwDQorICAgICAgICAgICAgICAxMDIuODY1ODA2NTc5Niw0LjY1NjEwOTgwOTksMA0KKyAgICAgICAgICAgICAgMTAyLjg3MzMwNjI3NDQsNC42NDYxMTA1MzQ3LDANCisgICAgICAgICAgICAgIDEwMi44NzU4MDg3MTU4LDQuNjM5MTY1ODc4MywwDQorICAgICAgICAgICAgICAxMDIuODgzMzMxMjk4OCw0LjYxNDQ0Mzc3OTAsMA0KKyAgICAgICAgICAgICAgMTAyLjg4MjIwMjE0ODQsNC42MTAyNzcxNzU5LDANCisgICAgICAgICAgICAgIDEwMi44NzMzMDYyNzQ0LDQuNTc5OTk5OTIzNywwDQorICAgICAgICAgICAgICAxMDIuODY5MTQwNjI1MCw0LjU3MDU1NDczMzMsMA0KKyAgICAgICAgICAgICAgMTAyLjg2MzMxMTc2NzYsNC41Njc0OTkxNjA4LDANCisgICAgICAgICAgICAgIDEwMi44NTIyMDMzNjkxLDQuNTY0NzIxMTA3NSwwDQorICAgICAgICAgICAgICAxMDIuODQ3NDg4NDAzMyw0LjU2MTEwOTU0MjgsMA0KKyAgICAgICAgICAgICAgMTAyLjg0NDE0NjcyODUsNC41NTYxMDk0Mjg0LDANCisgICAgICAgICAgICAgIDEwMi44NDE5MjY1NzQ3LDQuNTQ5MTY1NzI1NywwDQorICAgICAgICAgICAgICAxMDIuODQxNjU5NTQ1OSw0LjU0NDQ0MzEzMDUsMA0KKyAgICAgICAgICAgICAgMTAyLjg0Mzg3MjA3MDMsNC41MzMzMzI4MjQ3LDANCisgICAgICAgICAgICAgIDEwMi44NTEwODk0Nzc1LDQuNTA0OTk5MTYwOCwwDQorICAgICAgICAgICAgICAxMDIuODUyNzY3OTQ0Myw0LjUwMjIyMjA2MTIsMA0KKyAgICAgICAgICAgICAgMTAyLjg4MDgxMzU5ODYsNC40NzE2NjUzODI0LDANCisgICAgICAgICAgICAgIDEwMi44ODY5MzIzNzMwLDQuNDY5NDQzMzIxMiwwDQorICAgICAgICAgICAgICAxMDIuOTM0MTQzMDY2NCw0LjQ2NzQ5ODc3OTMsMA0KKyAgICAgICAgICAgICAgMTAyLjk3MjIxMzc0NTEsNC40ODQ3MjExODM4LDANCisgICAgICAgICAgICAgIDEwMi45NzY5Mjg3MTA5LDQuNDg0NDQzNjY0NiwwDQorICAgICAgICAgICAgICAxMDMuMDA5MTYyOTAyOCw0LjQ0NTI3NjI2MDQsMA0KKyAgICAgICAgICAgICAgMTAzLjAxMDgwMzIyMjcsNC40NDI0OTgyMDcxLDANCisgICAgICAgICAgICAgIDEwMy4wMjYwNzcyNzA1LDQuNDA5OTk4ODkzNywwDQorICAgICAgICAgICAgICAxMDMuMDI2OTE2NTAzOSw0LjQwMTk0MzIwNjgsMA0KKyAgICAgICAgICAgICAgMTAzLjAyNDY4ODcyMDcsNC4zOTUyNzcwMjMzLDANCisgICAgICAgICAgICAgIDEwMy4wMDc3NjY3MjM2LDQuMzYxMTA5NzMzNiwwDQorICAgICAgICAgICAgICAxMDIuOTg0OTkyOTgxMCw0LjMzODA1NDY1NzAsMA0KKyAgICAgICAgICAgICAgMTAyLjk3MTY0OTE2OTksNC4zMzM4ODgwNTM5LDANCisgICAgICAgICAgICAgIDEwMi45NjYwODczNDEzLDQuMzI5NzIxNDUwOCwwDQorICAgICAgICAgICAgICAxMDIuOTU5OTkxNDU1MSw0LjMyMjIyMTc1NjAsMA0KKyAgICAgICAgICAgICAgMTAyLjkzODg3MzI5MTAsNC4yODk3MjE0ODkwLDANCisgICAgICAgICAgICAgIDEwMi45MzYwOTYxOTE0LDQuMjgzODg3ODYzMiwwDQorICAgICAgICAgICAgICAxMDIuODk5OTc4NjM3Nyw0LjE0MjQ5ODAxNjQsMA0KKyAgICAgICAgICAgICAgMTAyLjkxMzAxNzI3MjksNC4xMTk5OTc5NzgyLDANCisgICAgICAgICAgICAgIDEwMi45MTk0MTgzMzUwLDQuMTEyNDk4MjgzNCwwDQorICAgICAgICAgICAgICAxMDIuOTI0MTMzMzAwOCw0LjEwODYwOTE5OTUsMA0KKyAgICAgICAgICAgICAgMTAyLjkzNTc5MTAxNTYsNC4xMDgzMzE2ODAzLDANCisgICAgICAgICAgICAgIDEwMi45NDIxNzY4MTg4LDQuMTEwNTUzNzQxNSwwDQorICAgICAgICAgICAgICAxMDIuOTcwODA5OTM2NSw0LjEyNzIyMTEwNzUsMA0KKyAgICAgICAgICAgICAgMTAyLjk5ODMyMTUzMzIsNC4xMzc0OTk4MDkzLDANCisgICAgICAgICAgICAgIDEwMy4wMDI0ODcxODI2LDQuMTM3Nzc3MzI4NSwwDQorICAgICAgICAgICAgICAxMDMuMTE1Nzk4OTUwMiw0LjA4ODYxMDY0OTEsMA0KKyAgICAgICAgICAgICAgMTAzLjEyMTYyNzgwNzYsNC4wODU1NTUwNzY2LDANCisgICAgICAgICAgICAgIDEwMy4yMjY2Mzg3OTM5LDQuMDIxNjY1NTczMSwwDQorICAgICAgICAgICAgICAxMDMuMjczNTkwMDg3OSwzLjk2MTM4ODU4ODAsMA0KKyAgICAgICAgICAgICAgMTAzLjI3ODg0Njc0MDcsMy45NTMwNTQ5MDQ5LDANCisgICAgICAgICAgICAgIDEwMy4yODg1NjY1ODk0LDMuOTIxNjY2MTQ1MywwDQorICAgICAgICAgICAgICAxMDMuMzAyNDU5NzE2OCwzLjg5MTExMDg5NzEsMA0KKyAgICAgICAgICAgICAgMTAzLjMxMjE3OTU2NTQsMy44NzM4ODg0OTI2LDANCisgICAgICAgICAgICAgIDEwMy4zMTQ0MDczNDg2LDMuODcxNjY1OTU0NiwwDQorICAgICAgICAgICAgICAxMDMuMzE4ODYyOTE1MCwzLjg3MTY2NTk1NDYsMA0KKyAgICAgICAgICAgICAgMTAzLjMyMTY0MDAxNDYsMy44NzMzMzI5NzczLDANCisgICAgICAgICAgICAgIDEwMy4zMjMzMDMyMjI3LDMuODc1ODMyNTU3NywwDQorICAgICAgICAgICAgICAxMDMuMzQxMDc5NzExOSwzLjkzNDcyMTQ2OTksMA0KKyAgICAgICAgICAgICAgMTAzLjM0Mzg1NjgxMTUsMy45NDQ5OTkyMTgwLDANCisgICAgICAgICAgICAgIDEwMy4zNDM1ODIxNTMzLDMuOTUzNjEwODk3MSwwDQorICAgICAgICAgICAgICAxMDMuMzM1ODAwMTcwOSwzLjk3Nzc3NzAwNDIsMA0KKyAgICAgICAgICAgICAgMTAzLjMyODg1NzQyMTksMy45OTI3NzczNDc2LDANCisgICAgICAgICAgICAgIDEwMy4zMDQ0MTI4NDE4LDQuMDcxMzg4MjQ0NiwwDQorICAgICAgICAgICAgICAxMDMuMzAyNDU5NzE2OCw0LjA4MzA1NDU0MjUsMA0KKyAgICAgICAgICAgICAgMTAzLjMwNjkyMjkxMjYsNC4xMTAyNzcxNzU5LDANCisgICAgICAgICAgICAgIDEwMy4zMDgyOTYyMDM2LDQuMTEzODg3Nzg2OSwwDQorICAgICAgICAgICAgICAxMDMuMzI1MjU2MzQ3Nyw0LjE1MTM4ODE2ODMsMA0KKyAgICAgICAgICAgICAgMTAzLjM0MDgxMjY4MzEsNC4xODAyNzY4NzA3LDANCisgICAgICAgICAgICAgIDEwMy40MTY5MjM1MjI5LDQuMTc3MjIxMjk4MiwwDQorICAgICAgICAgICAgICAxMDMuNDM1NTE2MzU3NCw0LjE3MzMzMjIxNDQsMA0KKyAgICAgICAgICAgICAgMTAzLjQ0MTkwOTc5MDAsNC4xNzA1NTQxNjExLDANCisgICAgICAgICAgICAgIDEwMy40NDY1NjM3MjA3LDQuMTY2NDM3MTQ5MCwwDQorICAgICAgICAgICAgICAxMDMuNDY2MzY5NjI4OSw0LjIzNDQ0MzY2NDYsMA0KKyAgICAgICAgICAgICAgMTAzLjQ4MzU4MTU0MzAsNC4yNzMwNTUwNzY2LDANCisgICAgICAgICAgICAgIDEwMy40ODk0MTA0MDA0LDQuMjg4MDU0NDY2MiwwDQorICAgICAgICAgICAgICAxMDMuNDkyNzM2ODE2NCw0LjI5OTE2NTcyNTcsMA0KKyAgICAgICAgICAgICAgMTAzLjQ5NDY4OTk0MTQsNC4zMTgzMzI2NzIxLDANCisgICAgICAgICAgICAgIDEwMy40ODc3NDcxOTI0LDQuMzQ1Mjc2ODMyNiwwDQorICAgICAgICAgICAgICAxMDMuNDgzMzA2ODg0OCw0LjM1NDQ0MzU1MDEsMA0KKyAgICAgICAgICAgICAgMTAzLjQ3NjM1NjUwNjMsNC4zNzQ3MjA1NzM0LDANCisgICAgICAgICAgICAgIDEwMy40NjQ5ODEwNzkxLDQuNDExNjY1OTE2NCwwDQorICAgICAgICAgICAgICAxMDMuNDUzNTgyNzYzNyw0LjQ3MTk0Mzg1NTMsMA0KKyAgICAgICAgICAgICAgMTAzLjQ1MzMwODEwNTUsNC40ODQ5OTg3MDMwLDANCisgICAgICAgICAgICAgIDEwMy40NTQxNDczMzg5LDQuNDkxMTA5ODQ4MCwwDQorICAgICAgICAgICAgICAxMDMuNDU0OTcxMzEzNSw0LjYyNjk0MzU4ODMsMA0KKyAgICAgICAgICAgICAgMTAzLjQ0MTA3MDU1NjYsNC43NjUyNzY5MDg5LDANCisgICAgICAgICAgICAgIDEwMy40MDk5NzMxNDQ1LDQuODU4MDU0MTYxMSwwDQorICAgICAgICAgICAgICAxMDMuMzU2MDc5MTAxNiw0Ljk0OTE2NTM0NDIsMA0KKyAgICAgICAgICAgICAgMTAzLjI3OTEzNjY1NzcsNS4wODYxMTAxMTUxLDANCisgICAgICAgICAgICAgIDEwMy4yNjU1MzM0NDczLDUuMTEzMzMyNzQ4NCwwDQorICAgICAgICAgICAgICAxMDMuMjQ4MDE2MzU3NCw1LjE1NzQ5OTMxMzQsMA0KKyAgICAgICAgICAgICAgMTAzLjI0MDI0OTYzMzgsNS4xNzY5NDM3NzkwLDANCisgICAgICAgICAgICAgIDEwMy4yMjgwMjczNDM4LDUuMjA1NTU0OTYyMiwwDQorICAgICAgICAgICAgICAxMDMuMjA4MzEyOTg4Myw1LjI0MDU1NDgwOTYsMA0KKyAgICAgICAgICAgICAgMTAzLjE4MTkyMjkxMjYsNS4yODI3NzY4MzI2LDANCisgICAgICAgICAgICAgIDEwMy4xMjYzNTgwMzIyLDUuMzcxMzg3NDgxNywwDQorICAgICAgICAgICAgICAxMDMuMTE3NDYyMTU4Miw1LjM4MzMzMzIwNjIsMA0KKyAgICAgICAgICAgICAgMTAzLjA5NjA3Njk2NTMsNS40MTAyNzczNjY2LDANCisgICAgICAgICAgICAgIDEwMy4wNzA4MjM2Njk0LDUuNDQwNTU0NjE4OCwwDQorICAgICAgICAgICAgICAxMDMuMDU4MDA2Mjg2Niw1LjQ1NTU1NDk2MjIsMA0KKyAgICAgICAgICAgICAgMTAzLjAzNzc1MDI0NDEsNS40NzY5NDM5Njk3LDANCisgICAgICAgICAgICAgIDEwMi45NzY5MTM0NTIxLDUuNTI2OTQ0MTYwNSwwDQorICAgICAgICAgICAgICAxMDIuOTYwNTMzMTQyMSw1LjUzODMzMTk4NTUsMA0KKyAgICAgICAgICAgICAgMTAyLjk1NTgxMDU0NjksNS41NDA1NTUwMDAzLDANCisgICAgICAgICAgICAgIDEwMi45NTAyNTYzNDc3LDUuNTQyMjIxMDY5MywwDQorICAgICAgICAgICAgICAxMDIuOTMwMjUyMDc1Miw1LjU0NDE2NTYxMTMsMA0KKyAgICAgICAgICAgICAgMTAyLjkyNDY4MjYxNzIsNS41NDU1NTQxNjExLDANCisgICAgICAgICAgICAgIDEwMi45MTUyNTI2ODU1LDUuNTQ5OTk5MjM3MSwwDQorICAgICAgICAgICAgICAxMDIuODc2OTA3MzQ4Niw1LjU2ODMzMjY3MjEsMA0KKyAgICAgICAgICAgICAgMTAyLjg0NjM1OTI1MjksNS41ODYzODc2MzQzLDANCisgICAgICAgICAgICAgIDEwMi44MzgwMjc5NTQxLDUuNTkyMjIxMjYwMSwwDQorICAgICAgICAgICAgICAxMDIuNjcyNzM3MTIxNiw1LjcyMTExMDM0MzksMA0KKyAgICAgICAgICAgICAgMTAyLjY2OTEyODQxODAsNS43MjQ3MjA5NTQ5LDANCisgICAgICAgICAgICAgIDEwMi42NjU4MDIwMDIwLDUuNzI4MzMyNTE5NSwwDQorICAgICAgICAgICAgICAxMDIuNjU1MjQyOTE5OSw1Ljc0NTI3NjQ1MTEsMA0KKyAgICAgICAgICAgICAgMTAyLjY1MTM2NzE4NzUsNS43NTQ5OTkxNjA4LDANCisgICAgICAgICAgICAgIDEwMi42NDA4MDgxMDU1LDUuNzcxOTQ0MDQ2MCwwDQorICAgICAgICAgICAgICAxMDIuNjMwMjQ5MDIzNCw1Ljc4ODYxMDQ1ODQsMA0KKyAgICAgICAgICAgICAgMTAyLjYxNjYzODE4MzYsNS44MDI3NzYzMzY3LDANCisgICAgICAgICAgICAgIDEwMi42MDUyMzk4NjgyLDUuODEyMjIwNTczNCwwDQorICAgICAgICAgICAgICAxMDIuNTgxMzU5ODYzMyw1LjgyODYxMDQyMDIsMA0KKyAgICAgICAgICAgICAgMTAyLjUzOTcyNjI1NzMsNS44NTMxNjc1MzM5LDANCisgICAgICAgICAgICAgIDEwMi41MTM4OTMxMjc0LDUuODE5OTk5Njk0OCwwDQorICAgICAgICAgICAgICAxMDIuNTA5OTg2ODc3NCw1LjgxNDk5ODYyNjcsMA0KKyAgICAgICAgICAgICAgMTAyLjQ5MDgwNjU3OTYsNS43OTM2MTA1NzI4LDANCisgICAgICAgICAgICAgIDEwMi40NTYxMDA0NjM5LDUuNzYxMTEwMzA1OCwwDQorICAgICAgICAgICAgICAxMDIuNDQ4MzE4NDgxNCw1Ljc1NDQ0NDEyMjMsMA0KKyAgICAgICAgICAgICAgMTAyLjQzNjM3MDg0OTYsNS43NDQ3MjE0MTI3LDANCisgICAgICAgICAgICAgIDEwMi4zODg2MDMyMTA0LDUuNjk4MDUzMzYwMCwwDQorICAgICAgICAgICAgICAxMDIuMzg2MzgzMDU2Niw1LjY5NTU1MjgyNTksMA0KKyAgICAgICAgICAgICAgMTAyLjM4NTgxODQ4MTQsNS42ODc0OTgwOTI3LDANCisgICAgICAgICAgICAgIDEwMi4zOTE5MzcyNTU5LDUuNjMzMDUyODI1OSwwDQorICAgICAgICAgICAgICAxMDIuMzk0MTQ5NzgwMyw1LjYyNjM4NjY0MjUsMA0KKyAgICAgICAgICAgICAgMTAyLjQwODMwOTkzNjUsNS41NTY2NjQ0NjY5LDANCisgICAgICAgICAgICAgIDEwMi40MDc0NzA3MDMxLDUuNTQ4MzMxMjYwNywwDQorICAgICAgICAgICAgICAxMDIuMzk0NDE2ODA5MSw1LjQxOTk5ODE2ODksMA0KKyAgICAgICAgICAgICAgMTAyLjQyMDgwNjg4NDgsNS4zMTU1NTM2NjUyLDANCisgICAgICAgICAgICAgIDEwMi40Mjc3NDk2MzM4LDUuMTc0OTk4MjgzNCwwDQorICAgICAgICAgICAgICAxMDIuNTAxOTIyNjA3NCw1LjA3NjY2NDkyNDYsMA0KKyAgICAgICAgICAgICAgMTAyLjUwMTY0Nzk0OTIsNS4wNzI0OTgzMjE1LDANCisgICAgICAgICAgICAgIDEwMi41MTA1Mjg1NjQ1LDQuOTEwNTUzOTMyMiwwDQorICAgICAgICAgICAgICAxMDIuNTExMzY3Nzk3OSw0LjkwNjk0MjM2NzYsMA0KKyAgICAgICAgICAgICAgMTAyLjUxNDY4NjU4NDUsNC45MDE2NjQ3MzM5LDANCisgICAgICAgICAgICAgIDEwMi41MTc0NzEzMTM1LDQuODk5NzIwMTkyMCwwDQorICAgICAgICAgICAgICAxMDIuNTI2OTE2NTAzOSw0Ljg5NTI3NjA2OTYsMA0KKyAgICAgICAgICAgICAgMTAyLjUzMDgwNzQ5NTEsNC44OTUyNzYwNjk2LDANCisgICAgICAgICAgICAgIDEwMi41MzMzMDk5MzY1LDQuODk3NDk4MTMwOCwwDQorICAgICAgICAgICAgICAxMDIuNTM2MDg3MDM2MSw0LjkwMzYwOTI3NTgsMA0KKyAgICAgICAgICAgICAgMTAyLjUzOTY4ODExMDQsNC45MDg4ODY5MDk1LDANCisgICAgICAgICAgICAgIDEwMi41NDMyOTY4MTQwLDQuOTA5NzIwNDIwOCwwDQorICAgICAgICAgICAgICAxMDIuNTUwNzk2NTA4OCw0LjkwODA1MzM5ODEsMA0KKyAgICAgICAgICAgICAgMTAyLjU3NTUzMTAwNTksNC44OTY5NDMwOTIzLDANCisgICAgICAgICAgICAgIDEwMi42MTk0MjI5MTI2LDQuODYzODg2ODMzMiwwDQorICAgICAgICAgICAgICAxMDIuNjQ4MzIzMDU5MSw0LjgzNzIyMDE5MjAsMA0KKyAgICAgICAgICAgICAgMTAyLjY2NjkyMzUyMjksNC43ODgwNTM1MTI2LDANCisgICAgICAgICAgICAgIDEwMi42NjgwMjk3ODUyLDQuNzg0NDQyOTAxNiwwDQorICAgICAgICAgICAgICAxMDIuNjY2MzY2NTc3MSw0Ljc3NjEwOTY5NTQsMA0KKyAgICAgICAgICAgICAgMTAyLjY2MzI5OTU2MDUsNC43NzA4MzIwNjE4LDANCisgICAgICAgICAgICAgIDEwMi42NjA1MjI0NjA5LDQuNzY4MzMxNTI3NywwDQorICAgICAgICAgICAgPC9jb29yZGluYXRlcz4NCisgICAgICAgICAgPC9MaW5lYXJSaW5nPg0KKyAgICAgICAgPC9vdXRlckJvdW5kYXJ5SXM+DQorICAgICAgPC9Qb2x5Z29uPg0KKyAgICA8L1BsYWNlbWFyaz4NCisgICAgPFBsYWNlbWFyaz4NCisgICAgICA8ZGVzY3JpcHRpb24+PCFbQ0RBVEFbIFVua25vd24gQXJlYSBUeXBlPEJSPjxCUj48Qj5GSVBTX0FETUlOPC9CPiA9IE1ZMTY8QlI+PEJSPjxCPkdNSV9BRE1JTjwvQj4gPSBNWVMtU0FCPEJSPjxCUj48Qj5BRE1JTl9OQU1FPC9CPiA9IFNhYmFoPEJSPjxCUj48Qj5GSVBTX0NOVFJZPC9CPiA9IE1ZPEJSPjxCUj48Qj5HTUlfQ05UUlk8L0I+ID0gTVlTPEJSPjxCUj48Qj5DTlRSWV9OQU1FPC9CPiA9IE1hbGF5c2lhPEJSPjxCUj48Qj5SRUdJT048L0I+ID0gU291dGhlYXN0ZXJuIEFzaWE8QlI+PEJSPjxCPkNPTlRJTkVOVDwvQj4gPSBBc2lhPEJSPjxCUj48Qj5QT1BfQURNSU48L0I+ID0gMTYyNTA5NTxCUj48QlI+PEI+U1FLTV9BRE1JTjwvQj4gPSA3NDI1OS4zMTI8QlI+PEJSPjxCPlNRTUlfQURNSU48L0I+ID0gMjg2NzEuNTIwPEJSPjxCUj48Qj5UWVBFX0VORzwvQj4gPSBTdGF0ZTxCUj48QlI+PEI+VFlQRV9MT0M8L0I+ID0gTmVnZXJpPEJSPjxCUj48Qj5DT0xPUl9NQVA8L0I+ID0gMTEgXV0+PC9kZXNjcmlwdGlvbj4NCisgICAgICA8c3R5bGVVcmw+I2FyZWExPC9zdHlsZVVybD4NCisgICAgICA8UG9seWdvbj4NCisgICAgICAgIDxvdXRlckJvdW5kYXJ5SXM+DQorICAgICAgICAgIDxMaW5lYXJSaW5nPg0KKyAgICAgICAgICAgIDxjb29yZGluYXRlcz4NCisgICAgICAgICAgICAgIDExNi44NTY5MzM1OTM4LDcuMTgzODg3NDgxNywwDQorICAgICAgICAgICAgICAxMTYuODcyNDgyMjk5OCw3LjIxOTk5OTMxMzQsMA0KKyAgICAgICAgICAgICAgMTE2Ljg3NjkyMjYwNzQsNy4yMjM2MDk5MjQzLDANCisgICAgICAgICAgICAgIDExNi45MDQxNTk1NDU5LDcuMjMyNDk5MTIyNiwwDQorICAgICAgICAgICAgICAxMTYuOTEyMjAwOTI3Nyw3LjIzNDQ0MzY2NDYsMA0KKyAgICAgICAgICAgICAgMTE2Ljk1ODAzODMzMDEsNy4yNDE2NjU4NDAxLDANCisgICAgICAgICAgICAgIDExNy4wMTYzODc5Mzk1LDcuMjY0NDQ0MzUxMiwwDQorICAgICAgICAgICAgICAxMTcuMDE4ODgyNzUxNSw3LjI2NjM4NzkzOTUsMA0KKyAgICAgICAgICAgICAgMTE3LjAyMDUzODMzMDEsNy4yNzE2NjU1NzMxLDANCisgICAgICAgICAgICAgIDExNy4wMTc0ODY1NzIzLDcuMzA4MzMyNDQzMiwwDQorICAgICAgICAgICAgICAxMTcuMDA5NDI5OTMxNiw3LjM0MjIyMTI2MDEsMA0KKyAgICAgICAgICAgICAgMTE3LjAwMzMyNjQxNjAsNy4zNTMzMzI1MTk1LDANCisgICAgICAgICAgICAgIDExNy4wMDA4MTYzNDUyLDcuMzUzNjEwMDM4OCwwDQorICAgICAgICAgICAgICAxMTYuOTk2MDkzNzUwMCw3LjM1MTM4Nzk3NzYsMA0KKyAgICAgICAgICAgICAgMTE2Ljg4NjY1NzcxNDgsNy4yODAyNzcyNTIyLDANCisgICAgICAgICAgICAgIDExNi44Nzk0MzI2NzgyLDcuMjc1NTU0NjU3MCwwDQorICAgICAgICAgICAgICAxMTYuODc4MDM2NDk5MCw3LjI3Mjc3NjYwMzcsMA0KKyAgICAgICAgICAgICAgMTE2Ljg1MTY0NjQyMzMsNy4xODk3MjExMDc1LDANCisgICAgICAgICAgICAgIDExNi44NTMwNDI2MDI1LDcuMTg2OTQzMDU0MiwwDQorICAgICAgICAgICAgICAxMTYuODU2OTMzNTkzOCw3LjE4Mzg4NzQ4MTcsMA0KKyAgICAgICAgICAgIDwvY29vcmRpbmF0ZXM+DQorICAgICAgICAgIDwvTGluZWFyUmluZz4NCisgICAgICAgIDwvb3V0ZXJCb3VuZGFyeUlzPg0KKyAgICAgIDwvUG9seWdvbj4NCisgICAgPC9QbGFjZW1hcms+DQorICAgIDxQbGFjZW1hcms+DQorICAgICAgPGRlc2NyaXB0aW9uPjwhW0NEQVRBWyBVbmtub3duIEFyZWEgVHlwZTxCUj48QlI+PEI+RklQU19BRE1JTjwvQj4gPSBNWTE2PEJSPjxCUj48Qj5HTUlfQURNSU48L0I+ID0gTVlTLVNBQjxCUj48QlI+PEI+QURNSU5fTkFNRTwvQj4gPSBTYWJhaDxCUj48QlI+PEI+RklQU19DTlRSWTwvQj4gPSBNWTxCUj48QlI+PEI+R01JX0NOVFJZPC9CPiA9IE1ZUzxCUj48QlI+PEI+Q05UUllfTkFNRTwvQj4gPSBNYWxheXNpYTxCUj48QlI+PEI+UkVHSU9OPC9CPiA9IFNvdXRoZWFzdGVybiBBc2lhPEJSPjxCUj48Qj5DT05USU5FTlQ8L0I+ID0gQXNpYTxCUj48QlI+PEI+UE9QX0FETUlOPC9CPiA9IDE2MjUwOTU8QlI+PEJSPjxCPlNRS01fQURNSU48L0I+ID0gNzQyNTkuMzEyPEJSPjxCUj48Qj5TUU1JX0FETUlOPC9CPiA9IDI4NjcxLjUyMDxCUj48QlI+PEI+VFlQRV9FTkc8L0I+ID0gU3RhdGU8QlI+PEJSPjxCPlRZUEVfTE9DPC9CPiA9IE5lZ2VyaTxCUj48QlI+PEI+Q09MT1JfTUFQPC9CPiA9IDExIF1dPjwvZGVzY3JpcHRpb24+DQorICAgICAgPHN0eWxlVXJsPiNhcmVhMTwvc3R5bGVVcmw+DQorICAgICAgPFBvbHlnb24+DQorICAgICAgICA8b3V0ZXJCb3VuZGFyeUlzPg0KKyAgICAgICAgICA8TGluZWFyUmluZz4NCisgICAgICAgICAgICA8Y29vcmRpbmF0ZXM+DQorICAgICAgICAgICAgICAxMTcuMDkzMjYxNzE4OCw3LjI5MzQ1NDE3MDIsMA0KKyAgICAgICAgICAgICAgMTE3LjA4ODA0MzIxMjksNy4yOTQxNjU2MTEzLDANCisgICAgICAgICAgICAgIDExNy4wNzQxNTc3MTQ4LDcuMjg3NDk5NDI3OCwwDQorICAgICAgICAgICAgICAxMTcuMDY3MjA3MzM2NCw3LjI4MDU1NDc3MTQsMA0KKyAgICAgICAgICAgICAgMTE3LjA2MjQ3NzExMTgsNy4yNzE2NjU1NzMxLDANCisgICAgICAgICAgICAgIDExNy4wNTE2NTEwMDEwLDcuMTczODg4MjA2NSwwDQorICAgICAgICAgICAgICAxMTcuMDUyMjAwMzE3NCw3LjE2Nzc3NzA2MTUsMA0KKyAgICAgICAgICAgICAgMTE3LjA2MjQ3NzExMTgsNy4xMTEzODgyMDY1LDANCisgICAgICAgICAgICAgIDExNy4wNjM4NzMyOTEwLDcuMTA1ODMyMDk5OSwwDQorICAgICAgICAgICAgICAxMTcuMDY2NjczMjc4OCw3LjEwMTk0MzAxNjEsMA0KKyAgICAgICAgICAgICAgMTE3LjA3Mjc2OTE2NTAsNy4xMDExMTA0NTg0LDANCisgICAgICAgICAgICAgIDExNy4wNzc0NzY1MDE1LDcuMTAzMzMyNTE5NSwwDQorICAgICAgICAgICAgICAxMTcuMDgxMTAwNDYzOSw3LjEwNjY2NTYxMTMsMA0KKyAgICAgICAgICAgICAgMTE3LjA4OTQzMTc2MjcsNy4xMTg4ODc5MDEzLDANCisgICAgICAgICAgICAgIDExNy4wOTU1NDI5MDc3LDcuMTMzMDUzNzc5NiwwDQorICAgICAgICAgICAgICAxMTcuMTAwODA3MTg5OSw3LjE0MTM4NzkzOTUsMA0KKyAgICAgICAgICAgICAgMTE3LjEyMDgxOTA5MTgsNy4xNTU1NTQ3NzE0LDANCisgICAgICAgICAgICAgIDExNy4xNDk0MjkzMjEzLDcuMTY4NjA5NjE5MSwwDQorICAgICAgICAgICAgICAxMTcuMTU5OTg4NDAzMyw3LjE3MTk0MzY2NDYsMA0KKyAgICAgICAgICAgICAgMTE3LjE3MjIxMDY5MzQsNy4xNzMzMzIyMTQ0LDANCisgICAgICAgICAgICAgIDExNy4xOTI3NDkwMjM0LDcuMTczMzMyMjE0NCwwDQorICAgICAgICAgICAgICAxMTcuMjQ0MTQwNjI1MCw3LjE3NTI3Njc1NjMsMA0KKyAgICAgICAgICAgICAgMTE3LjI0OTcxMDA4MzAsNy4xNzY2NjUzMDYxLDANCisgICAgICAgICAgICAgIDExNy4yNTMwNTE3NTc4LDcuMTc5OTk5MzUxNSwwDQorICAgICAgICAgICAgICAxMTcuMjU1MjU2NjUyOCw3LjE4NDcyMDk5MzAsMA0KKyAgICAgICAgICAgICAgMTE3LjI3MzA0MDc3MTUsNy4yMjgzMzI1MTk1LDANCisgICAgICAgICAgICAgIDExNy4yNzYzODI0NDYzLDcuMjM4NjEwMjY3NiwwDQorICAgICAgICAgICAgICAxMTcuMjc4MzIwMzEyNSw3LjI1MDAwMDAwMDAsMA0KKyAgICAgICAgICAgICAgMTE3LjI4MzMzMjgyNDcsNy4zMTQ3MjExMDc1LDANCisgICAgICAgICAgICAgIDExNy4yODMzMzI4MjQ3LDcuMzIxMzg4MjQ0NiwwDQorICAgICAgICAgICAgICAxMTcuMjgxOTM2NjQ1NSw3LjMyNjk0NDM1MTIsMA0KKyAgICAgICAgICAgICAgMTE3LjI3OTcwODg2MjMsNy4zMzE2NjU5OTI3LDANCisgICAgICAgICAgICAgIDExNy4yNzY5MzE3NjI3LDcuMzM1ODMyNTk1OCwwDQorICAgICAgICAgICAgICAxMTcuMjcwMjYzNjcxOSw3LjM0MjQ5ODc3OTMsMA0KKyAgICAgICAgICAgICAgMTE3LjI2NjA5ODAyMjUsNy4zNDUyNzY4MzI2LDANCisgICAgICAgICAgICAgIDExNy4yMjU1NDAxNjExLDcuMzUyNzc2NTI3NCwwDQorICAgICAgICAgICAgICAxMTcuMjE4ODcyMDcwMyw3LjM1Mjc3NjUyNzQsMA0KKyAgICAgICAgICAgICAgMTE3LjE0NzQ5MTQ1NTEsNy4zMzQ5OTkwODQ1LDANCisgICAgICAgICAgICAgIDExNy4xNDI3NjEyMzA1LDcuMzMzMDU0NTQyNSwwDQorICAgICAgICAgICAgICAxMTcuMDkzMjYxNzE4OCw3LjI5MzQ1NDE3MDIsMA0KKyAgICAgICAgICAgIDwvY29vcmRpbmF0ZXM+DQorICAgICAgICAgIDwvTGluZWFyUmluZz4NCisgICAgICAgIDwvb3V0ZXJCb3VuZGFyeUlzPg0KKyAgICAgIDwvUG9seWdvbj4NCisgICAgPC9QbGFjZW1hcms+DQorICAgIDxQbGFjZW1hcms+DQorICAgICAgPGRlc2NyaXB0aW9uPjwhW0NEQVRBWyBVbmtub3duIEFyZWEgVHlwZTxCUj48QlI+PEI+RklQU19BRE1JTjwvQj4gPSBNWTE2PEJSPjxCUj48Qj5HTUlfQURNSU48L0I+ID0gTVlTLVNBQjxCUj48QlI+PEI+QURNSU5fTkFNRTwvQj4gPSBTYWJhaDxCUj48QlI+PEI+RklQU19DTlRSWTwvQj4gPSBNWTxCUj48QlI+PEI+R01JX0NOVFJZPC9CPiA9IE1ZUzxCUj48QlI+PEI+Q05UUllfTkFNRTwvQj4gPSBNYWxheXNpYTxCUj48QlI+PEI+UkVHSU9OPC9CPiA9IFNvdXRoZWFzdGVybiBBc2lhPEJSPjxCUj48Qj5DT05USU5FTlQ8L0I+ID0gQXNpYTxCUj48QlI+PEI+UE9QX0FETUlOPC9CPiA9IDE2MjUwOTU8QlI+PEJSPjxCPlNRS01fQURNSU48L0I+ID0gNzQyNTkuMzEyPEJSPjxCUj48Qj5TUU1JX0FETUlOPC9CPiA9IDI4NjcxLjUyMDxCUj48QlI+PEI+VFlQRV9FTkc8L0I+ID0gU3RhdGU8QlI+PEJSPjxCPlRZUEVfTE9DPC9CPiA9IE5lZ2VyaTxCUj48QlI+PEI+Q09MT1JfTUFQPC9CPiA9IDExIF1dPjwvZGVzY3JpcHRpb24+DQorICAgICAgPHN0eWxlVXJsPiNhcmVhMTwvc3R5bGVVcmw+DQorICAgICAgPFBvbHlnb24+DQorICAgICAgICA8b3V0ZXJCb3VuZGFyeUlzPg0KKyAgICAgICAgICA8TGluZWFyUmluZz4NCisgICAgICAgICAgICA8Y29vcmRpbmF0ZXM+DQorICAgICAgICAgICAgICAxMTcuMzQyNzQyOTE5OSw2LjY3MjUyNzMxMzIsMA0KKyAgICAgICAgICAgICAgMTE3LjMzNTI3Mzc0MjcsNi42NjE2NjU5MTY0LDANCisgICAgICAgICAgICAgIDExNy4zMzUyNzM3NDI3LDYuNjU2MTA5ODA5OSwwDQorICAgICAgICAgICAgICAxMTcuMzM3MTk2MzUwMSw2LjY1MTM4ODE2ODMsMA0KKyAgICAgICAgICAgICAgMTE3LjMzOTk4MTA3OTEsNi42NDc0OTkwODQ1LDANCisgICAgICAgICAgICAgIDExNy4zNDgzMjc2MzY3LDYuNjQxOTQzOTMxNiwwDQorICAgICAgICAgICAgICAxMTcuMzUzMDQyNjAyNSw2LjYzOTk5OTM4OTYsMA0KKyAgICAgICAgICAgICAgMTE3LjQwOTE0OTE2OTksNi42MjYxMTAwNzY5LDANCisgICAgICAgICAgICAgIDExNy40MTU1NDI2MDI1LDYuNjI1NTU0MDg0OCwwDQorICAgICAgICAgICAgICAxMTcuNDMzMzE5MDkxOCw2LjYyODMzMjEzODEsMA0KKyAgICAgICAgICAgICAgMTE3LjQ0NDEzNzU3MzIsNi42MzExMTAxOTEzLDANCisgICAgICAgICAgICAgIDExNy40NTM4NzI2ODA3LDYuNjM0OTk5Mjc1MiwwDQorICAgICAgICAgICAgICAxMTcuNDY2OTI2NTc0Nyw2LjY0MjQ5ODk3MDAsMA0KKyAgICAgICAgICAgICAgMTE3LjQ5NjkzMjk4MzQsNi42NjAyNzczNjY2LDANCisgICAgICAgICAgICAgIDExNy41MDEwOTg2MzI4LDYuNjYzMDU0NDY2MiwwDQorICAgICAgICAgICAgICAxMTcuNTA4MDQxMzgxOCw2LjY2OTcyMDY0OTcsMA0KKyAgICAgICAgICAgICAgMTE3LjUxMjc3MTYwNjQsNi42Nzg2MDk4NDgwLDANCisgICAgICAgICAgICAgIDExNy41MTU1NDg3MDYxLDYuNjg5NDQyNjM0NiwwDQorICAgICAgICAgICAgICAxMTcuNTE1NTQ4NzA2MSw2LjcwMzA1NDQyODEsMA0KKyAgICAgICAgICAgICAgMTE3LjUxNDE2MDE1NjMsNi43MDg2MTA1MzQ3LDANCisgICAgICAgICAgICAgIDExNy40OTM1OTEzMDg2LDYuNzQyNDk4Mzk3OCwwDQorICAgICAgICAgICAgICAxMTcuNDkwMjU3MjYzMiw2Ljc0NjEwOTk2MjUsMA0KKyAgICAgICAgICAgICAgMTE3LjQ3MDI2MDYyMDEsNi43NjAyNzc3NDgxLDANCisgICAgICAgICAgICAgIDExNy40NjU1NTMyODM3LDYuNzYyNDk5ODA5MywwDQorICAgICAgICAgICAgICAxMTcuNDEyNzczMTMyMyw2Ljc0ODA1NDUwNDQsMA0KKyAgICAgICAgICAgICAgMTE3LjQwODA0MjkwNzcsNi43NDYxMDk5NjI1LDANCisgICAgICAgICAgICAgIDExNy40MDEwOTI1MjkzLDYuNzM5MTY1MzA2MSwwDQorICAgICAgICAgICAgICAxMTcuMzk5MTQ3MDMzNyw2LjczNDQ0MzY2NDYsMA0KKyAgICAgICAgICAgICAgMTE3LjM5ODMzMDY4ODUsNi43MjgzMzI1MTk1LDANCisgICAgICAgICAgICAgIDExNy40MDAyNjg1NTQ3LDYuNzIzNjA5OTI0MywwDQorICAgICAgICAgICAgICAxMTcuNDAzODY5NjI4OSw2LjcyMDI3NjgzMjYsMA0KKyAgICAgICAgICAgICAgMTE3LjQxMDgxMjM3NzksNi43MjAyNzY4MzI2LDANCisgICAgICAgICAgICAgIDExNy40MjMwMjcwMzg2LDYuNzIxNjY1MzgyNCwwDQorICAgICAgICAgICAgICAxMTcuNDM1MjU2OTU4MCw2LjcyMDI3NjgzMjYsMA0KKyAgICAgICAgICAgICAgMTE3LjQ0MDI2MTg0MDgsNi43MTgwNTQ3NzE0LDANCisgICAgICAgICAgICAgIDExNy40NDM1ODgyNTY4LDYuNzE0NzIxNjc5NywwDQorICAgICAgICAgICAgICAxMTcuNDQ0OTc2ODA2Niw2LjcwOTE2NTU3MzEsMA0KKyAgICAgICAgICAgICAgMTE3LjQ0NDEzNzU3MzIsNi43MDMwNTQ0MjgxLDANCisgICAgICAgICAgICAgIDExNy40Mzk0MjI2MDc0LDYuNjk0NDQyNzQ5MCwwDQorICAgICAgICAgICAgICAxMTcuNDM2MDk2MTkxNCw2LjY5MDgzMjEzODEsMA0KKyAgICAgICAgICAgICAgMTE3LjQyNzIwMDMxNzQsNi42ODYxMDk1NDI4LDANCisgICAgICAgICAgICAgIDExNy40MTI3NzMxMzIzLDYuNjc5OTk5MzUxNSwwDQorICAgICAgICAgICAgICAxMTcuNDAxNjU3MTA0NSw2LjY3NzIyMTI5ODIsMA0KKyAgICAgICAgICAgICAgMTE3LjM5NTUzODMzMDEsNi42NzY2NjUzMDYxLDANCisgICAgICAgICAgICAgIDExNy4zNDI3NDI5MTk5LDYuNjcyNTI3MzEzMiwwDQorICAgICAgICAgICAgPC9jb29yZGluYXRlcz4NCisgICAgICAgICAgPC9MaW5lYXJSaW5nPg0KKyAgICAgICAgPC9vdXRlckJvdW5kYXJ5SXM+DQorICAgICAgPC9Qb2x5Z29uPg0KKyAgICA8L1BsYWNlbWFyaz4NCisgICAgPFBsYWNlbWFyaz4NCisgICAgICA8ZGVzY3JpcHRpb24+PCFbQ0RBVEFbIFVua25vd24gQXJlYSBUeXBlPEJSPjxCUj48Qj5GSVBTX0FETUlOPC9CPiA9IE1ZMTY8QlI+PEJSPjxCPkdNSV9BRE1JTjwvQj4gPSBNWVMtU0FCPEJSPjxCUj48Qj5BRE1JTl9OQU1FPC9CPiA9IFNhYmFoPEJSPjxCUj48Qj5GSVBTX0NOVFJZPC9CPiA9IE1ZPEJSPjxCUj48Qj5HTUlfQ05UUlk8L0I+ID0gTVlTPEJSPjxCUj48Qj5DTlRSWV9OQU1FPC9CPiA9IE1hbGF5c2lhPEJSPjxCUj48Qj5SRUdJT048L0I+ID0gU291dGhlYXN0ZXJuIEFzaWE8QlI+PEJSPjxCPkNPTlRJTkVOVDwvQj4gPSBBc2lhPEJSPjxCUj48Qj5QT1BfQURNSU48L0I+ID0gMTYyNTA5NTxCUj48QlI+PEI+U1FLTV9BRE1JTjwvQj4gPSA3NDI1OS4zMTI8QlI+PEJSPjxCPlNRTUlfQURNSU48L0I+ID0gMjg2NzEuNTIwPEJSPjxCUj48Qj5UWVBFX0VORzwvQj4gPSBTdGF0ZTxCUj48QlI+PEI+VFlQRV9MT0M8L0I+ID0gTmVnZXJpPEJSPjxCUj48Qj5DT0xPUl9NQVA8L0I+ID0gMTEgXV0+PC9kZXNjcmlwdGlvbj4NCisgICAgICA8c3R5bGVVcmw+I2FyZWExPC9zdHlsZVVybD4NCisgICAgICA8UG9seWdvbj4NCisgICAgICAgIDxvdXRlckJvdW5kYXJ5SXM+DQorICAgICAgICAgIDxMaW5lYXJSaW5nPg0KKyAgICAgICAgICAgIDxjb29yZGluYXRlcz4NCisgICAgICAgICAgICAgIDExNS41OTI3NDI5MTk5LDYuMjA0NzIyNDA0NSwwDQorICAgICAgICAgICAgICAxMTUuNTk3NDg4NDAzMyw2LjE5NTgzMjI1MjUsMA0KKyAgICAgICAgICAgICAgMTE1LjYwMzA0MjYwMjUsNi4xOTQ0NDI3NDkwLDANCisgICAgICAgICAgICAgIDExNS42MDkxNTM3NDc2LDYuMTk1Mjc2MjYwNCwwDQorICAgICAgICAgICAgICAxMTUuNjEzODc2MzQyOCw2LjE5NzIyMDgwMjMsMA0KKyAgICAgICAgICAgICAgMTE1LjYxNzQ3NzQxNzAsNi4yMDA1NTQ4NDc3LDANCisgICAgICAgICAgICAgIDExNS42MTk0MzA1NDIwLDYuMjA1NTU0OTYyMiwwDQorICAgICAgICAgICAgICAxMTUuNjE4NTkxMzA4Niw2LjIxMTY2NjEwNzIsMA0KKyAgICAgICAgICAgICAgMTE1LjYxNjY1MzQ0MjQsNi4yMTYzODc3NDg3LDANCisgICAgICAgICAgICAgIDExNS42MTMzMTE3Njc2LDYuMjE5NzIwODQwNSwwDQorICAgICAgICAgICAgICAxMTUuNjA3NzU3NTY4NCw2LjIyMTExMDM0MzksMA0KKyAgICAgICAgICAgICAgMTE1LjYwMjIwMzM2OTEsNi4yMTk3MjA4NDA1LDANCisgICAgICAgICAgICAgIDExNS41OTQ3MTEzMDM3LDYuMjEzNjEwNjQ5MSwwDQorICAgICAgICAgICAgICAxMTUuNTkyNzU4MTc4Nyw2LjIwODg4ODA1MzksMA0KKyAgICAgICAgICAgICAgMTE1LjU5Mjc0MjkxOTksNi4yMDQ3MjI0MDQ1LDANCisgICAgICAgICAgICA8L2Nvb3JkaW5hdGVzPg0KKyAgICAgICAgICA8L0xpbmVhclJpbmc+DQorICAgICAgICA8L291dGVyQm91bmRhcnlJcz4NCisgICAgICA8L1BvbHlnb24+DQorICAgIDwvUGxhY2VtYXJrPg0KKyAgICA8UGxhY2VtYXJrPg0KKyAgICAgIDxkZXNjcmlwdGlvbj48IVtDREFUQVsgVW5rbm93biBBcmVhIFR5cGU8QlI+PEJSPjxCPkZJUFNfQURNSU48L0I+ID0gTVkxNjxCUj48QlI+PEI+R01JX0FETUlOPC9CPiA9IE1ZUy1TQUI8QlI+PEJSPjxCPkFETUlOX05BTUU8L0I+ID0gU2FiYWg8QlI+PEJSPjxCPkZJUFNfQ05UUlk8L0I+ID0gTVk8QlI+PEJSPjxCPkdNSV9DTlRSWTwvQj4gPSBNWVM8QlI+PEJSPjxCPkNOVFJZX05BTUU8L0I+ID0gTWFsYXlzaWE8QlI+PEJSPjxCPlJFR0lPTjwvQj4gPSBTb3V0aGVhc3Rlcm4gQXNpYTxCUj48QlI+PEI+Q09OVElORU5UPC9CPiA9IEFzaWE8QlI+PEJSPjxCPlBPUF9BRE1JTjwvQj4gPSAxNjI1MDk1PEJSPjxCUj48Qj5TUUtNX0FETUlOPC9CPiA9IDc0MjU5LjMxMjxCUj48QlI+PEI+U1FNSV9BRE1JTjwvQj4gPSAyODY3MS41MjA8QlI+PEJSPjxCPlRZUEVfRU5HPC9CPiA9IFN0YXRlPEJSPjxCUj48Qj5UWVBFX0xPQzwvQj4gPSBOZWdlcmk8QlI+PEJSPjxCPkNPTE9SX01BUDwvQj4gPSAxMSBdXT48L2Rlc2NyaXB0aW9uPg0KKyAgICAgIDxzdHlsZVVybD4jYXJlYTE8L3N0eWxlVXJsPg0KKyAgICAgIDxQb2x5Z29uPg0KKyAgICAgICAgPG91dGVyQm91bmRhcnlJcz4NCisgICAgICAgICAgPExpbmVhclJpbmc+DQorICAgICAgICAgICAgPGNvb3JkaW5hdGVzPg0KKyAgICAgICAgICAgICAgMTE2LjAyNTg3ODkwNjMsNi4wNDA1Mzk3NDE1LDANCisgICAgICAgICAgICAgIDExNi4wMjAyNjM2NzE5LDYuMDM5MTY1NDk2OCwwDQorICAgICAgICAgICAgICAxMTYuMDE2OTM3MjU1OSw2LjAzNTgzMjQwNTEsMA0KKyAgICAgICAgICAgICAgMTE2LjAxNDE2MDE1NjMsNi4wMzE2NjU4MDIwLDANCisgICAgICAgICAgICAgIDExNi4wMTYwOTgwMjI1LDYuMDI2OTQ0MTYwNSwwDQorICAgICAgICAgICAgICAxMTYuMDI0NDI5MzIxMyw2LjAyMTM4ODA1MzksMA0KKyAgICAgICAgICAgICAgMTE2LjA0OTE0ODU1OTYsNi4wMDQ5OTkxNjA4LDANCisgICAgICAgICAgICAgIDExNi4wNTMzMDY1Nzk2LDYuMDAyNDk5NTgwNCwwDQorICAgICAgICAgICAgICAxMTYuMDU5NDE3NzI0Niw2LjAwMzA1NDYxODgsMA0KKyAgICAgICAgICAgICAgMTE2LjA2MzU5ODYzMjgsNi4wMDU4MzI2NzIxLDANCisgICAgICAgICAgICAgIDExNi4wNjYwOTM0NDQ4LDYuMDA5OTk5Mjc1MiwwDQorICAgICAgICAgICAgICAxMTYuMDY2MDkzNDQ0OCw2LjAxNTI3NjkwODksMA0KKyAgICAgICAgICAgICAgMTE2LjA1OTk4MjI5OTgsNi4wMzYzODc0NDM1LDANCisgICAgICAgICAgICAgIDExNi4wNTY2NDA2MjUwLDYuMDM5OTk5MDA4MiwwDQorICAgICAgICAgICAgICAxMTYuMDMzMzMyODI0Nyw2LjA0MTExMDAzODgsMA0KKyAgICAgICAgICAgICAgMTE2LjAyNTg3ODkwNjMsNi4wNDA1Mzk3NDE1LDANCisgICAgICAgICAgICA8L2Nvb3JkaW5hdGVzPg0KKyAgICAgICAgICA8L0xpbmVhclJpbmc+DQorICAgICAgICA8L291dGVyQm91bmRhcnlJcz4NCisgICAgICA8L1BvbHlnb24+DQorICAgIDwvUGxhY2VtYXJrPg0KKyAgICA8UGxhY2VtYXJrPg0KKyAgICAgIDxkZXNjcmlwdGlvbj48IVtDREFUQVsgVW5rbm93biBBcmVhIFR5cGU8QlI+PEJSPjxCPkZJUFNfQURNSU48L0I+ID0gTVkxNjxCUj48QlI+PEI+R01JX0FETUlOPC9CPiA9IE1ZUy1TQUI8QlI+PEJSPjxCPkFETUlOX05BTUU8L0I+ID0gU2FiYWg8QlI+PEJSPjxCPkZJUFNfQ05UUlk8L0I+ID0gTVk8QlI+PEJSPjxCPkdNSV9DTlRSWTwvQj4gPSBNWVM8QlI+PEJSPjxCPkNOVFJZX05BTUU8L0I+ID0gTWFsYXlzaWE8QlI+PEJSPjxCPlJFR0lPTjwvQj4gPSBTb3V0aGVhc3Rlcm4gQXNpYTxCUj48QlI+PEI+Q09OVElORU5UPC9CPiA9IEFzaWE8QlI+PEJSPjxCPlBPUF9BRE1JTjwvQj4gPSAxNjI1MDk1PEJSPjxCUj48Qj5TUUtNX0FETUlOPC9CPiA9IDc0MjU5LjMxMjxCUj48QlI+PEI+U1FNSV9BRE1JTjwvQj4gPSAyODY3MS41MjA8QlI+PEJSPjxCPlRZUEVfRU5HPC9CPiA9IFN0YXRlPEJSPjxCUj48Qj5UWVBFX0xPQzwvQj4gPSBOZWdlcmk8QlI+PEJSPjxCPkNPTE9SX01BUDwvQj4gPSAxMSBdXT48L2Rlc2NyaXB0aW9uPg0KKyAgICAgIDxzdHlsZVVybD4jYXJlYTE8L3N0eWxlVXJsPg0KKyAgICAgIDxQb2x5Z29uPg0KKyAgICAgICAgPG91dGVyQm91bmRhcnlJcz4NCisgICAgICAgICAgPExpbmVhclJpbmc+DQorICAgICAgICAgICAgPGNvb3JkaW5hdGVzPg0KKyAgICAgICAgICAgICAgMTE4LjE2OTk4MjkxMDIsNS44NDA3NDU5MjU5LDANCisgICAgICAgICAgICAgIDExOC4xNTgzMzI4MjQ3LDUuODI0NDQzODE3MSwwDQorICAgICAgICAgICAgICAxMTguMTU4MzMyODI0Nyw1LjgxOTE2NjE4MzUsMA0KKyAgICAgICAgICAgICAgMTE4LjE2MTEwMjI5NDksNS44MTQ5OTg2MjY3LDANCisgICAgICAgICAgICAgIDExOC4xNjUyNjc5NDQzLDUuODEyMjIwNTczNCwwDQorICAgICAgICAgICAgICAxMTguMTcxOTIwNzc2NCw1LjgxMjIyMDU3MzQsMA0KKyAgICAgICAgICAgICAgMTE4LjIxMTY0NzAzMzcsNS44MjAyNzcyMTQxLDANCisgICAgICAgICAgICAgIDExOC4yMTcyMDg4NjIzLDUuODIxNjY1NzYzOSwwDQorICAgICAgICAgICAgICAxMTguMjIxOTE2MTk4Nyw1LjgyMzg4ODc3ODcsMA0KKyAgICAgICAgICAgICAgMTE4LjIyNjA4OTQ3NzUsNS44MjYzODgzNTkxLDANCisgICAgICAgICAgICAgIDExOC4yMzMwNDc0ODU0LDUuODMzMzMzMDE1NCwwDQorICAgICAgICAgICAgICAxMTguMjM0OTkyOTgxMCw1LjgzODA1NDY1NzAsMA0KKyAgICAgICAgICAgICAgMTE4LjIzNDk5Mjk4MTAsNS44NDM2MTA3NjM1LDANCisgICAgICAgICAgICAgIDExOC4yMzMwNDc0ODU0LDUuODQ4MzMyNDA1MSwwDQorICAgICAgICAgICAgICAxMTguMjIzMzEyMzc3OSw1Ljg1MjQ5OTAwODIsMA0KKyAgICAgICAgICAgICAgMTE4LjIxMjQ4NjI2NzEsNS44NTUyNzcwNjE1LDANCisgICAgICAgICAgICAgIDExOC4xOTk0MTcxMTQzLDUuODU1ODMyMDk5OSwwDQorICAgICAgICAgICAgICAxMTguMTkzMzEzNTk4Niw1Ljg1NTI3NzA2MTUsMA0KKyAgICAgICAgICAgICAgMTE4LjE3ODg2MzUyNTQsNS44NDg4ODgzOTcyLDANCisgICAgICAgICAgICAgIDExOC4xNzQ2OTc4NzYwLDUuODQ2Mzg3ODYzMiwwDQorICAgICAgICAgICAgICAxMTguMTY5OTgyOTEwMiw1Ljg0MDc0NTkyNTksMA0KKyAgICAgICAgICAgIDwvY29vcmRpbmF0ZXM+DQorICAgICAgICAgIDwvTGluZWFyUmluZz4NCisgICAgICAgIDwvb3V0ZXJCb3VuZGFyeUlzPg0KKyAgICAgIDwvUG9seWdvbj4NCisgICAgPC9QbGFjZW1hcms+DQorICAgIDxQbGFjZW1hcms+DQorICAgICAgPGRlc2NyaXB0aW9uPjwhW0NEQVRBWyBVbmtub3duIEFyZWEgVHlwZTxCUj48QlI+PEI+RklQU19BRE1JTjwvQj4gPSBNWTE2PEJSPjxCUj48Qj5HTUlfQURNSU48L0I+ID0gTVlTLVNBQjxCUj48QlI+PEI+QURNSU5fTkFNRTwvQj4gPSBTYWJhaDxCUj48QlI+PEI+RklQU19DTlRSWTwvQj4gPSBNWTxCUj48QlI+PEI+R01JX0NOVFJZPC9CPiA9IE1ZUzxCUj48QlI+PEI+Q05UUllfTkFNRTwvQj4gPSBNYWxheXNpYTxCUj48QlI+PEI+UkVHSU9OPC9CPiA9IFNvdXRoZWFzdGVybiBBc2lhPEJSPjxCUj48Qj5DT05USU5FTlQ8L0I+ID0gQXNpYTxCUj48QlI+PEI+UE9QX0FETUlOPC9CPiA9IDE2MjUwOTU8QlI+PEJSPjxCPlNRS01fQURNSU48L0I+ID0gNzQyNTkuMzEyPEJSPjxCUj48Qj5TUU1JX0FETUlOPC9CPiA9IDI4NjcxLjUyMDxCUj48QlI+PEI+VFlQRV9FTkc8L0I+ID0gU3RhdGU8QlI+PEJSPjxCPlRZUEVfTE9DPC9CPiA9IE5lZ2VyaTxCUj48QlI+PEI+Q09MT1JfTUFQPC9CPiA9IDExIF1dPjwvZGVzY3JpcHRpb24+DQorICAgICAgPHN0eWxlVXJsPiNhcmVhMTwvc3R5bGVVcmw+DQorICAgICAgPFBvbHlnb24+DQorICAgICAgICA8b3V0ZXJCb3VuZGFyeUlzPg0KKyAgICAgICAgICA8TGluZWFyUmluZz4NCisgICAgICAgICAgICA8Y29vcmRpbmF0ZXM+DQorICAgICAgICAgICAgICAxMTUuNjY2NjU2NDk0MSw1LjcwNTgzMjQ4MTQsMA0KKyAgICAgICAgICAgICAgMTE1LjY3MjIxMDY5MzQsNS43MDcyMjE5ODQ5LDANCisgICAgICAgICAgICAgIDExNS42NzEzNzE0NjAwLDUuNzExOTQzNjI2NCwwDQorICAgICAgICAgICAgICAxMTUuNjY2NjU2NDk0MSw1LjcyMDgzMjgyNDcsMA0KKyAgICAgICAgICAgICAgMTE1LjY1ODU5OTg1MzUsNS43MzMwNTQxNjExLDANCisgICAgICAgICAgICAgIDExNS42NTQ0MjY1NzQ3LDUuNzM1ODMyMjE0NCwwDQorICAgICAgICAgICAgICAxMTUuNjQ4MzMwNjg4NSw1LjczNTI3NjIyMjIsMA0KKyAgICAgICAgICAgICAgMTE1LjYzMTA4ODI1NjgsNS43MzE2NjU2MTEzLDANCisgICAgICAgICAgICAgIDExNS42Mjc3NjE4NDA4LDUuNzI4MzMyNTE5NSwwDQorICAgICAgICAgICAgICAxMTUuNjMxMDg4MjU2OCw1LjcyNDk5OTQyNzgsMA0KKyAgICAgICAgICAgICAgMTE1LjY2NjY1NjQ5NDEsNS43MDU4MzI0ODE0LDANCisgICAgICAgICAgICA8L2Nvb3JkaW5hdGVzPg0KKyAgICAgICAgICA8L0xpbmVhclJpbmc+DQorICAgICAgICA8L291dGVyQm91bmRhcnlJcz4NCisgICAgICA8L1BvbHlnb24+DQorICAgIDwvUGxhY2VtYXJrPg0KKyAgICA8UGxhY2VtYXJrPg0KKyAgICAgIDxkZXNjcmlwdGlvbj48IVtDREFUQVsgVW5rbm93biBBcmVhIFR5cGU8QlI+PEJSPjxCPkZJUFNfQURNSU48L0I+ID0gTVkxNjxCUj48QlI+PEI+R01JX0FETUlOPC9CPiA9IE1ZUy1TQUI8QlI+PEJSPjxCPkFETUlOX05BTUU8L0I+ID0gU2FiYWg8QlI+PEJSPjxCPkZJUFNfQ05UUlk8L0I+ID0gTVk8QlI+PEJSPjxCPkdNSV9DTlRSWTwvQj4gPSBNWVM8QlI+PEJSPjxCPkNOVFJZX05BTUU8L0I+ID0gTWFsYXlzaWE8QlI+PEJSPjxCPlJFR0lPTjwvQj4gPSBTb3V0aGVhc3Rlcm4gQXNpYTxCUj48QlI+PEI+Q09OVElORU5UPC9CPiA9IEFzaWE8QlI+PEJSPjxCPlBPUF9BRE1JTjwvQj4gPSAxNjI1MDk1PEJSPjxCUj48Qj5TUUtNX0FETUlOPC9CPiA9IDc0MjU5LjMxMjxCUj48QlI+PEI+U1FNSV9BRE1JTjwvQj4gPSAyODY3MS41MjA8QlI+PEJSPjxCPlRZUEVfRU5HPC9CPiA9IFN0YXRlPEJSPjxCUj48Qj5UWVBFX0xPQzwvQj4gPSBOZWdlcmk8QlI+PEJSPjxCPkNPTE9SX01BUDwvQj4gPSAxMSBdXT48L2Rlc2NyaXB0aW9uPg0KKyAgICAgIDxzdHlsZVVybD4jYXJlYTE8L3N0eWxlVXJsPg0KKyAgICAgIDxQb2x5Z29uPg0KKyAgICAgICAgPG91dGVyQm91bmRhcnlJcz4NCisgICAgICAgICAgPExpbmVhclJpbmc+DQorICAgICAgICAgICAgPGNvb3JkaW5hdGVzPg0KKyAgICAgICAgICAgICAgMTE1LjE2NjM4MTgzNTksNS4yNzYxMDM5NzM0LDANCisgICAgICAgICAgICAgIDExNS4xNTgzMzI4MjQ3LDUuMjU3Nzc3MjE0MSwwDQorICAgICAgICAgICAgICAxMTUuMTU4ODY2ODgyMyw1LjI1MTY2NjA2OTAsMA0KKyAgICAgICAgICAgICAgMTE1LjE2MjIwMDkyNzcsNS4yNDk0NDMwNTQyLDANCisgICAgICAgICAgICAgIDExNS4yMzMwNDc0ODU0LDUuMjU5NzIxNzU2MCwwDQorICAgICAgICAgICAgICAxMTUuMjQwNTM5NTUwOCw1LjI2NTgzMjkwMTAsMA0KKyAgICAgICAgICAgICAgMTE1LjI2MDI2OTE2NTAsNS4yOTM4ODgwOTIwLDANCisgICAgICAgICAgICAgIDExNS4yNjMwNDYyNjQ2LDUuMjk4MDU0Njk1MSwwDQorICAgICAgICAgICAgICAxMTUuMjYyNDk2OTQ4Miw1LjMwNDE2NTg0MDEsMA0KKyAgICAgICAgICAgICAgMTE1LjI0NjY0MzA2NjQsNS4zNzU4MzE2MDQwLDANCisgICAgICAgICAgICAgIDExNS4yNDE5MjgxMDA2LDUuMzg0NzIxNzU2MCwwDQorICAgICAgICAgICAgICAxMTUuMjM1NTI3MDM4Niw1LjM4Mzg4ODI0NDYsMA0KKyAgICAgICAgICAgICAgMTE1LjIzMDgxOTcwMjEsNS4zODE5NDI3NDkwLDANCisgICAgICAgICAgICAgIDExNS4yMTQ0MzE3NjI3LDUuMzcwODMyNDQzMiwwDQorICAgICAgICAgICAgICAxMTUuMTk5OTk2OTQ4Miw1LjM1ODA1NDE2MTEsMA0KKyAgICAgICAgICAgICAgMTE1LjE5MDI2MTg0MDgsNS4zNDcyMjEzNzQ1LDANCisgICAgICAgICAgICAgIDExNS4xODQxNDMwNjY0LDUuMzMyNzc3MDIzMywwDQorICAgICAgICAgICAgICAxMTUuMTY2MzgxODM1OSw1LjI3NjEwMzk3MzQsMA0KKyAgICAgICAgICAgIDwvY29vcmRpbmF0ZXM+DQorICAgICAgICAgIDwvTGluZWFyUmluZz4NCisgICAgICAgIDwvb3V0ZXJCb3VuZGFyeUlzPg0KKyAgICAgIDwvUG9seWdvbj4NCisgICAgPC9QbGFjZW1hcms+DQorICAgIDxQbGFjZW1hcms+DQorICAgICAgPGRlc2NyaXB0aW9uPjwhW0NEQVRBWyBVbmtub3duIEFyZWEgVHlwZTxCUj48QlI+PEI+RklQU19BRE1JTjwvQj4gPSBNWTE2PEJSPjxCUj48Qj5HTUlfQURNSU48L0I+ID0gTVlTLVNBQjxCUj48QlI+PEI+QURNSU5fTkFNRTwvQj4gPSBTYWJhaDxCUj48QlI+PEI+RklQU19DTlRSWTwvQj4gPSBNWTxCUj48QlI+PEI+R01JX0NOVFJZPC9CPiA9IE1ZUzxCUj48QlI+PEI+Q05UUllfTkFNRTwvQj4gPSBNYWxheXNpYTxCUj48QlI+PEI+UkVHSU9OPC9CPiA9IFNvdXRoZWFzdGVybiBBc2lhPEJSPjxCUj48Qj5DT05USU5FTlQ8L0I+ID0gQXNpYTxCUj48QlI+PEI+UE9QX0FETUlOPC9CPiA9IDE2MjUwOTU8QlI+PEJSPjxCPlNRS01fQURNSU48L0I+ID0gNzQyNTkuMzEyPEJSPjxCUj48Qj5TUU1JX0FETUlOPC9CPiA9IDI4NjcxLjUyMDxCUj48QlI+PEI+VFlQRV9FTkc8L0I+ID0gU3RhdGU8QlI+PEJSPjxCPlRZUEVfTE9DPC9CPiA9IE5lZ2VyaTxCUj48QlI+PEI+Q09MT1JfTUFQPC9CPiA9IDExIF1dPjwvZGVzY3JpcHRpb24+DQorICAgICAgPHN0eWxlVXJsPiNhcmVhMTwvc3R5bGVVcmw+DQorICAgICAgPFBvbHlnb24+DQorICAgICAgICA8b3V0ZXJCb3VuZGFyeUlzPg0KKyAgICAgICAgICA8TGluZWFyUmluZz4NCisgICAgICAgICAgICA8Y29vcmRpbmF0ZXM+DQorICAgICAgICAgICAgICAxMTguMzk0NjIyODAyNyw0LjY3NjA0OTIzMjUsMA0KKyAgICAgICAgICAgICAgMTE4LjM1Mjc2Nzk0NDMsNC42NzUyNzY3NTYzLDANCisgICAgICAgICAgICAgIDExOC4zNDY2NDkxNjk5LDQuNjc0NzIwNzY0MiwwDQorICAgICAgICAgICAgICAxMTguMzQzODcyMDcwMyw0LjY3MDU1NDE2MTEsMA0KKyAgICAgICAgICAgICAgMTE4LjM0NjY0OTE2OTksNC42NjYzODc1NTgwLDANCisgICAgICAgICAgICAgIDExOC4zNTA4MDcxODk5LDQuNjYzNjEwNDU4NCwwDQorICAgICAgICAgICAgICAxMTguNTI5NzA4ODYyMyw0LjYwMDI3Njk0NzAsMA0KKyAgICAgICAgICAgICAgMTE4LjU2NjA5MzQ0NDgsNC41OTgwNTQ4ODU5LDANCisgICAgICAgICAgICAgIDExOC41NzAyNjY3MjM2LDQuNjAwODMxOTg1NSwwDQorICAgICAgICAgICAgICAxMTguNTk3NDg4NDAzMyw0LjYzNDk5OTI3NTIsMA0KKyAgICAgICAgICAgICAgMTE4LjU5ODMyNzYzNjcsNC42Mzg2MTA4Mzk4LDANCisgICAgICAgICAgICAgIDExOC41OTA4MjAzMTI1LDQuNjQ0NzIxOTg0OSwwDQorICAgICAgICAgICAgICAxMTguNTc2MzkzMTI3NCw0LjY1MDgzMjE3NjIsMA0KKyAgICAgICAgICAgICAgMTE4LjQ3ODg2NjU3NzEsNC42ODkxNjUxMTU0LDANCisgICAgICAgICAgICAgIDExOC4zOTQ2MjI4MDI3LDQuNjc2MDQ5MjMyNSwwDQorICAgICAgICAgICAgPC9jb29yZGluYXRlcz4NCisgICAgICAgICAgPC9MaW5lYXJSaW5nPg0KKyAgICAgICAgPC9vdXRlckJvdW5kYXJ5SXM+DQorICAgICAgPC9Qb2x5Z29uPg0KKyAgICA8L1BsYWNlbWFyaz4NCisgICAgPFBsYWNlbWFyaz4NCisgICAgICA8ZGVzY3JpcHRpb24+PCFbQ0RBVEFbIFVua25vd24gQXJlYSBUeXBlPEJSPjxCUj48Qj5GSVBTX0FETUlOPC9CPiA9IE1ZMTY8QlI+PEJSPjxCPkdNSV9BRE1JTjwvQj4gPSBNWVMtU0FCPEJSPjxCUj48Qj5BRE1JTl9OQU1FPC9CPiA9IFNhYmFoPEJSPjxCUj48Qj5GSVBTX0NOVFJZPC9CPiA9IE1ZPEJSPjxCUj48Qj5HTUlfQ05UUlk8L0I+ID0gTVlTPEJSPjxCUj48Qj5DTlRSWV9OQU1FPC9CPiA9IE1hbGF5c2lhPEJSPjxCUj48Qj5SRUdJT048L0I+ID0gU291dGhlYXN0ZXJuIEFzaWE8QlI+PEJSPjxCPkNPTlRJTkVOVDwvQj4gPSBBc2lhPEJSPjxCUj48Qj5QT1BfQURNSU48L0I+ID0gMTYyNTA5NTxCUj48QlI+PEI+U1FLTV9BRE1JTjwvQj4gPSA3NDI1OS4zMTI8QlI+PEJSPjxCPlNRTUlfQURNSU48L0I+ID0gMjg2NzEuNTIwPEJSPjxCUj48Qj5UWVBFX0VORzwvQj4gPSBTdGF0ZTxCUj48QlI+PEI+VFlQRV9MT0M8L0I+ID0gTmVnZXJpPEJSPjxCUj48Qj5DT0xPUl9NQVA8L0I+ID0gMTEgXV0+PC9kZXNjcmlwdGlvbj4NCisgICAgICA8c3R5bGVVcmw+I2FyZWExPC9zdHlsZVVybD4NCisgICAgICA8UG9seWdvbj4NCisgICAgICAgIDxvdXRlckJvdW5kYXJ5SXM+DQorICAgICAgICAgIDxMaW5lYXJSaW5nPg0KKyAgICAgICAgICAgIDxjb29yZGluYXRlcz4NCisgICAgICAgICAgICAgIDExOC41MDE2NjMyMDgwLDQuNTUzNTg4ODY3MiwwDQorICAgICAgICAgICAgICAxMTguNDk5NDIwMTY2MCw0LjU1MzYwOTg0ODAsMA0KKyAgICAgICAgICAgICAgMTE4LjQ5NTUyOTE3NDgsNC41NTExMTAyNjc2LDANCisgICAgICAgICAgICAgIDExOC40OTI3NTIwNzUyLDQuNTQ2OTQzNjY0NiwwDQorICAgICAgICAgICAgICAxMTguNDkxMzYzNTI1NCw0LjU0MTM4NzU1ODAsMA0KKyAgICAgICAgICAgICAgMTE4LjQ5Mjc1MjA3NTIsNC41MzYxMDk5MjQzLDANCisgICAgICAgICAgICAgIDExOC40OTU1MjkxNzQ4LDQuNTMxOTQzMzIxMiwwDQorICAgICAgICAgICAgICAxMTguNDk5NDIwMTY2MCw0LjUyOTE2NjIyMTYsMA0KKyAgICAgICAgICAgICAgMTE4LjUwNDk4OTYyNDAsNC41Mjc3NzY3MTgxLDANCisgICAgICAgICAgICAgIDExOC41MTA1MzYxOTM4LDQuNTI5MTY2MjIxNiwwDQorICAgICAgICAgICAgICAxMTguNTE0NzA5NDcyNyw0LjUzMTk0MzMyMTIsMA0KKyAgICAgICAgICAgICAgMTE4LjUxNzQ4NjU3MjMsNC41MzYxMDk5MjQzLDANCisgICAgICAgICAgICAgIDExOC41MTgwNTExNDc1LDQuNTQyMjIxMDY5MywwDQorICAgICAgICAgICAgICAxMTguNTE2NjYyNTk3Nyw0LjU0NzQ5ODcwMzAsMA0KKyAgICAgICAgICAgICAgMTE4LjUxMzg5MzEyNzQsNC41NTE2NjUzMDYxLDANCisgICAgICAgICAgICAgIDExOC41MDk3MTk4NDg2LDQuNTU0NDQzMzU5NCwwDQorICAgICAgICAgICAgICAxMTguNTA0NDQwMzA3Niw0LjU1NDQ0MzM1OTQsMA0KKyAgICAgICAgICAgICAgMTE4LjUwMTY2MzIwODAsNC41NTM1ODg4NjcyLDANCisgICAgICAgICAgICA8L2Nvb3JkaW5hdGVzPg0KKyAgICAgICAgICA8L0xpbmVhclJpbmc+DQorICAgICAgICA8L291dGVyQm91bmRhcnlJcz4NCisgICAgICA8L1BvbHlnb24+DQorICAgIDwvUGxhY2VtYXJrPg0KKyAgICA8UGxhY2VtYXJrPg0KKyAgICAgIDxkZXNjcmlwdGlvbj48IVtDREFUQVsgVW5rbm93biBBcmVhIFR5cGU8QlI+PEJSPjxCPkZJUFNfQURNSU48L0I+ID0gTVkxNjxCUj48QlI+PEI+R01JX0FETUlOPC9CPiA9IE1ZUy1TQUI8QlI+PEJSPjxCPkFETUlOX05BTUU8L0I+ID0gU2FiYWg8QlI+PEJSPjxCPkZJUFNfQ05UUlk8L0I+ID0gTVk8QlI+PEJSPjxCPkdNSV9DTlRSWTwvQj4gPSBNWVM8QlI+PEJSPjxCPkNOVFJZX05BTUU8L0I+ID0gTWFsYXlzaWE8QlI+PEJSPjxCPlJFR0lPTjwvQj4gPSBTb3V0aGVhc3Rlcm4gQXNpYTxCUj48QlI+PEI+Q09OVElORU5UPC9CPiA9IEFzaWE8QlI+PEJSPjxCPlBPUF9BRE1JTjwvQj4gPSAxNjI1MDk1PEJSPjxCUj48Qj5TUUtNX0FETUlOPC9CPiA9IDc0MjU5LjMxMjxCUj48QlI+PEI+U1FNSV9BRE1JTjwvQj4gPSAyODY3MS41MjA8QlI+PEJSPjxCPlRZUEVfRU5HPC9CPiA9IFN0YXRlPEJSPjxCUj48Qj5UWVBFX0xPQzwvQj4gPSBOZWdlcmk8QlI+PEJSPjxCPkNPTE9SX01BUDwvQj4gPSAxMSBdXT48L2Rlc2NyaXB0aW9uPg0KKyAgICAgIDxzdHlsZVVybD4jYXJlYTE8L3N0eWxlVXJsPg0KKyAgICAgIDxQb2x5Z29uPg0KKyAgICAgICAgPG91dGVyQm91bmRhcnlJcz4NCisgICAgICAgICAgPExpbmVhclJpbmc+DQorICAgICAgICAgICAgPGNvb3JkaW5hdGVzPg0KKyAgICAgICAgICAgICAgMTE4LjY1OTk4ODQwMzMsNC40OTIyMzEzNjkwLDANCisgICAgICAgICAgICAgIDExOC42NDk3MTkyMzgzLDQuNDk3MjIwOTkzMCwwDQorICAgICAgICAgICAgICAxMTguNjQ0MTQ5NzgwMyw0LjQ5NTgzMjQ0MzIsMA0KKyAgICAgICAgICAgICAgMTE4LjY0MDgyMzM2NDMsNC40OTIyMjA4Nzg2LDANCisgICAgICAgICAgICAgIDExOC42Mzk5NzY1MDE1LDQuNDg2MTA5NzMzNiwwDQorICAgICAgICAgICAgICAxMTguNjQyMjExOTE0MSw0LjQ4MTM4ODA5MjAsMA0KKyAgICAgICAgICAgICAgMTE4LjY3MDgyMjE0MzYsNC40NTEzODgzNTkxLDANCisgICAgICAgICAgICAgIDExOC42ODk0MjI2MDc0LDQuNDQxMTA5NjU3MywwDQorICAgICAgICAgICAgICAxMTguNzMxOTMzNTkzOCw0LjQ0NjY2NTc2MzksMA0KKyAgICAgICAgICAgICAgMTE4Ljc1MTY2MzIwODAsNC40NTM4ODc5Mzk1LDANCisgICAgICAgICAgICAgIDExOC43NTk5ODY4Nzc0LDQuNDU5NDQ0MDQ2MCwwDQorICAgICAgICAgICAgICAxMTguNzYyNzcxNjA2NCw0LjQ2MzYxMDY0OTEsMA0KKyAgICAgICAgICAgICAgMTE4Ljc2MTM4MzA1NjYsNC40NjkxNjU4MDIwLDANCisgICAgICAgICAgICAgIDExOC43NTI0ODcxODI2LDQuNDgwNTU0NTgwNywwDQorICAgICAgICAgICAgICAxMTguNzQyNzUyMDc1Miw0LjQ4NDcyMTE4MzgsMA0KKyAgICAgICAgICAgICAgMTE4LjY4MTkzMDU0MjAsNC40OTk3MjA1NzM0LDANCisgICAgICAgICAgICAgIDExOC42NzQ5ODc3OTMwLDQuNDk5NzIwNTczNCwwDQorICAgICAgICAgICAgICAxMTguNjcwMjU3NTY4NCw0LjQ5Nzc3Njk4NTIsMA0KKyAgICAgICAgICAgICAgMTE4LjY1OTk4ODQwMzMsNC40OTIyMzEzNjkwLDANCisgICAgICAgICAgICA8L2Nvb3JkaW5hdGVzPg0KKyAgICAgICAgICA8L0xpbmVhclJpbmc+DQorICAgICAgICA8L291dGVyQm91bmRhcnlJcz4NCisgICAgICA8L1BvbHlnb24+DQorICAgIDwvUGxhY2VtYXJrPg0KKyAgICA8UGxhY2VtYXJrPg0KKyAgICAgIDxkZXNjcmlwdGlvbj48IVtDREFUQVsgVW5rbm93biBBcmVhIFR5cGU8QlI+PEJSPjxCPkZJUFNfQURNSU48L0I+ID0gTVkxNjxCUj48QlI+PEI+R01JX0FETUlOPC9CPiA9IE1ZUy1TQUI8QlI+PEJSPjxCPkFETUlOX05BTUU8L0I+ID0gU2FiYWg8QlI+PEJSPjxCPkZJUFNfQ05UUlk8L0I+ID0gTVk8QlI+PEJSPjxCPkdNSV9DTlRSWTwvQj4gPSBNWVM8QlI+PEJSPjxCPkNOVFJZX05BTUU8L0I+ID0gTWFsYXlzaWE8QlI+PEJSPjxCPlJFR0lPTjwvQj4gPSBTb3V0aGVhc3Rlcm4gQXNpYTxCUj48QlI+PEI+Q09OVElORU5UPC9CPiA9IEFzaWE8QlI+PEJSPjxCPlBPUF9BRE1JTjwvQj4gPSAxNjI1MDk1PEJSPjxCUj48Qj5TUUtNX0FETUlOPC9CPiA9IDc0MjU5LjMxMjxCUj48QlI+PEI+U1FNSV9BRE1JTjwvQj4gPSAyODY3MS41MjA8QlI+PEJSPjxCPlRZUEVfRU5HPC9CPiA9IFN0YXRlPEJSPjxCUj48Qj5UWVBFX0xPQzwvQj4gPSBOZWdlcmk8QlI+PEJSPjxCPkNPTE9SX01BUDwvQj4gPSAxMSBdXT48L2Rlc2NyaXB0aW9uPg0KKyAgICAgIDxzdHlsZVVybD4jYXJlYTE8L3N0eWxlVXJsPg0KKyAgICAgIDxQb2x5Z29uPg0KKyAgICAgICAgPG91dGVyQm91bmRhcnlJcz4NCisgICAgICAgICAgPExpbmVhclJpbmc+DQorICAgICAgICAgICAgPGNvb3JkaW5hdGVzPg0KKyAgICAgICAgICAgICAgMTE3LjY4NjkyMDE2NjAsNC4xNjgzMzU5MTQ2LDANCisgICAgICAgICAgICAgIDExNy43MjY2NDY0MjMzLDQuMTY5NzIwNjQ5NywwDQorICAgICAgICAgICAgICAxMTcuODM5NzA2NDIwOSw0LjE3MTk0MzY2NDYsMA0KKyAgICAgICAgICAgICAgMTE3Ljg3OTQzMjY3ODIsNC4xNzMwNTQ2OTUxLDANCisgICAgICAgICAgICAgIDExNy45MDM1NTY4MjM3LDQuMTc0MDQyNzAxNywwDQorICAgICAgICAgICAgICAxMTcuNzg1NTM3NzE5Nyw0LjIzOTQ0MjgyNTMsMA0KKyAgICAgICAgICAgICAgMTE3Ljc2OTcwNjcyNjEsNC4yNTExMTEwMzA2LDANCisgICAgICAgICAgICAgIDExNy43NjAyNjkxNjUwLDQuMjU1Mjc3NjMzNywwDQorICAgICAgICAgICAgICAxMTcuNzQ5MTUzMTM3Miw0LjI1ODA1NDczMzMsMA0KKyAgICAgICAgICAgICAgMTE3Ljc0MzA0MTk5MjIsNC4yNTg2MTA3MjU0LDANCisgICAgICAgICAgICAgIDExNy43MjM4NzY5NTMxLDQuMjU5OTk5Mjc1MiwwDQorICAgICAgICAgICAgICAxMTcuNjg4MzE2MzQ1Miw0LjI2MDU5MzQxNDMsMA0KKyAgICAgICAgICAgICAgMTE3LjY4MzMxOTA5MTgsNC4yNTkxNjU3NjM5LDANCisgICAgICAgICAgICAgIDExNy42NDk3MTkyMzgzLDQuMjM4MDU0Mjc1NSwwDQorICAgICAgICAgICAgICAxMTcuNjM4ODkzMTI3NCw0LjIyODYxMDAzODgsMA0KKyAgICAgICAgICAgICAgMTE3LjY0MDgyMzM2NDMsNC4yMTY5NDM3NDA4LDANCisgICAgICAgICAgICAgIDExNy42NDM2MDA0NjM5LDQuMjEyNzc3MTM3OCwwDQorICAgICAgICAgICAgICAxMTcuNjQ5NzE5MjM4Myw0LjIwNTI3NzQ0MjksMA0KKyAgICAgICAgICAgICAgMTE3LjY4NjkyMDE2NjAsNC4xNjgzMzU5MTQ2LDANCisgICAgICAgICAgICA8L2Nvb3JkaW5hdGVzPg0KKyAgICAgICAgICA8L0xpbmVhclJpbmc+DQorICAgICAgICA8L291dGVyQm91bmRhcnlJcz4NCisgICAgICA8L1BvbHlnb24+DQorICAgIDwvUGxhY2VtYXJrPg0KKyAgICA8UGxhY2VtYXJrPg0KKyAgICAgIDxkZXNjcmlwdGlvbj48IVtDREFUQVsgVW5rbm93biBBcmVhIFR5cGU8QlI+PEJSPjxCPkZJUFNfQURNSU48L0I+ID0gTVkxNjxCUj48QlI+PEI+R01JX0FETUlOPC9CPiA9IE1ZUy1TQUI8QlI+PEJSPjxCPkFETUlOX05BTUU8L0I+ID0gU2FiYWg8QlI+PEJSPjxCPkZJUFNfQ05UUlk8L0I+ID0gTVk8QlI+PEJSPjxCPkdNSV9DTlRSWTwvQj4gPSBNWVM8QlI+PEJSPjxCPkNOVFJZX05BTUU8L0I+ID0gTWFsYXlzaWE8QlI+PEJSPjxCPlJFR0lPTjwvQj4gPSBTb3V0aGVhc3Rlcm4gQXNpYTxCUj48QlI+PEI+Q09OVElORU5UPC9CPiA9IEFzaWE8QlI+PEJSPjxCPlBPUF9BRE1JTjwvQj4gPSAxNjI1MDk1PEJSPjxCUj48Qj5TUUtNX0FETUlOPC9CPiA9IDc0MjU5LjMxMjxCUj48QlI+PEI+U1FNSV9BRE1JTjwvQj4gPSAyODY3MS41MjA8QlI+PEJSPjxCPlRZUEVfRU5HPC9CPiA9IFN0YXRlPEJSPjxCUj48Qj5UWVBFX0xPQzwvQj4gPSBOZWdlcmk8QlI+PEJSPjxCPkNPTE9SX01BUDwvQj4gPSAxMSBdXT48L2Rlc2NyaXB0aW9uPg0KKyAgICAgIDxzdHlsZVVybD4jYXJlYTE8L3N0eWxlVXJsPg0KKyAgICAgIDxQb2x5Z29uPg0KKyAgICAgICAgPG91dGVyQm91bmRhcnlJcz4NCisgICAgICAgICAgPExpbmVhclJpbmc+DQorICAgICAgICAgICAgPGNvb3JkaW5hdGVzPg0KKyAgICAgICAgICAgICAgMTE4LjQxNzIxMzQzOTksNC41OTMzMzIyOTA2LDANCisgICAgICAgICAgICAgIDExOC4yODQ0MTYxOTg3LDQuNjc5NDQzMzU5NCwwDQorICAgICAgICAgICAgICAxMTguMjgwMjczNDM3NSw0LjY4MjIyMTQxMjcsMA0KKyAgICAgICAgICAgICAgMTE4LjIzMDgxOTcwMjEsNC43MzU1NTQ2OTUxLDANCisgICAgICAgICAgICAgIDExOC4xMzMwNDEzODE4LDQuODUwODMxOTg1NSwwDQorICAgICAgICAgICAgICAxMTguMTMxNjUyODMyMCw0Ljg1NjM4ODA5MjAsMA0KKyAgICAgICAgICAgICAgMTE4LjEzMzA0MTM4MTgsNC44Njg2MDk0Mjg0LDANCisgICAgICAgICAgICAgIDExOC4xMzU4MTg0ODE0LDQuODc5NDQzMTY4NiwwDQorICAgICAgICAgICAgICAxMTguMTQwNTQ4NzA2MSw0Ljg4ODMzMjM2NjksMA0KKyAgICAgICAgICAgICAgMTE4LjIwNTU1MTE0NzUsNC45NTk5OTkwODQ1LDANCisgICAgICAgICAgICAgIDExOC4yMDkxNTIyMjE3LDQuOTYzNjEwNjQ5MSwwDQorICAgICAgICAgICAgICAxMTguMzQxMzY5NjI4OSw1LjAzMTY2NTgwMjAsMA0KKyAgICAgICAgICAgICAgMTE4LjM1MDgwNzE4OTksNS4wMzU4MzI0MDUxLDANCisgICAgICAgICAgICAgIDExOC4zNTc3NTc1Njg0LDUuMDM1ODMyNDA1MSwwDQorICAgICAgICAgICAgICAxMTguMzkxMzcyNjgwNyw1LjAzNTgzMjQwNTEsMA0KKyAgICAgICAgICAgICAgMTE4LjM5ODA0MDc3MTUsNS4wMzU4MzI0MDUxLDANCisgICAgICAgICAgICAgIDExOC40MTMzMDcxODk5LDUuMDMwNTU0NzcxNCwwDQorICAgICAgICAgICAgICAxMTguNDI0OTg3NzkzMCw1LjAyMTY2NTU3MzEsMA0KKyAgICAgICAgICAgICAgMTE4LjQ0NTI1MTQ2NDgsNS4wMDExMTEwMzA2LDANCisgICAgICAgICAgICAgIDExOC40NDgzMTg0ODE0LDQuOTk2OTQzNDczOCwwDQorICAgICAgICAgICAgICAxMTguNTQ5NzEzMTM0OCw0Ljk1ODYxMDUzNDcsMA0KKyAgICAgICAgICAgICAgMTE4LjcwMTY2MDE1NjMsNC45NDMwNTQxOTkyLDANCisgICAgICAgICAgICAgIDExOC43MTA1NDA3NzE1LDQuOTQ3Nzc2Nzk0NCwwDQorICAgICAgICAgICAgICAxMTguNzQ4ODcwODQ5Niw0Ljk2NDk5OTE5ODksMA0KKyAgICAgICAgICAgICAgMTE4Ljc3OTE1OTU0NTksNC45NzcyMjE0ODkwLDANCisgICAgICAgICAgICAgIDExOC44MTgzMjg4NTc0LDQuOTkyNzc2ODcwNywwDQorICAgICAgICAgICAgICAxMTguOTEzMzA3MTg5OSw1LjAyNzc3NjcxODEsMA0KKyAgICAgICAgICAgICAgMTE4LjkzOTQyMjYwNzQsNS4wMzU4MzI0MDUxLDANCisgICAgICAgICAgICAgIDExOC45NzcyMDMzNjkxLDUuMDQ2MTEwMTUzMiwwDQorICAgICAgICAgICAgICAxMTguOTk0OTc5ODU4NCw1LjA0ODg4ODIwNjUsMA0KKyAgICAgICAgICAgICAgMTE5LjAzNDE0OTE2OTksNS4wNTc3NzY0NTExLDANCisgICAgICAgICAgICAgIDExOS4wNjk3MTc0MDcyLDUuMDY5OTk5Njk0OCwwDQorICAgICAgICAgICAgICAxMTkuMTI4MDM2NDk5MCw1LjA5Mzg4ODI4MjgsMA0KKyAgICAgICAgICAgICAgMTE5LjE3MTA5NjgwMTgsNS4xMTIyMjA3NjQyLDANCisgICAgICAgICAgICAgIDExOS4xOTM1ODgyNTY4LDUuMTIzODg4MDE1NywwDQorICAgICAgICAgICAgICAxMTkuMjE0NDMxNzYyNyw1LjEzNzQ5OTgwOTMsMA0KKyAgICAgICAgICAgICAgMTE5LjIyMzg3Njk1MzEsNS4xNDg2MTAxMTUxLDANCisgICAgICAgICAgICAgIDExOS4yNDQ0MzA1NDIwLDUuMTc2Mzg3Nzg2OSwwDQorICAgICAgICAgICAgICAxMTkuMjU1NTQ2NTY5OCw1LjE5Mjc3NjY4MDAsMA0KKyAgICAgICAgICAgICAgMTE5LjI2MzYxMDgzOTgsNS4yMDQ5OTg5NzAwLDANCisgICAgICAgICAgICAgIDExOS4yNzI0OTE0NTUxLDUuMjIzNjA5OTI0MywwDQorICAgICAgICAgICAgICAxMTkuMjc1ODE3ODcxMSw1LjM0NDk5OTMxMzQsMA0KKyAgICAgICAgICAgICAgMTE5LjI2Nzc2MTIzMDUsNS4zNjQxNjUzMDYxLDANCisgICAgICAgICAgICAgIDExOS4yNjMwNDYyNjQ2LDUuMzczMDU0NTA0NCwwDQorICAgICAgICAgICAgICAxMTkuMjYwMjY5MTY1MCw1LjM3NzIyMTEwNzUsMA0KKyAgICAgICAgICAgICAgMTE5LjIzODg3NjM0MjgsNS40MDM2MTAyMjk1LDANCisgICAgICAgICAgICAgIDExOS4yMjUyNzMxMzIzLDUuNDE3MjIxMDY5MywwDQorICAgICAgICAgICAgICAxMTkuMjE3NzU4MTc4Nyw1LjQyMzYwOTczMzYsMA0KKyAgICAgICAgICAgICAgMTE5LjIxMDI3Mzc0MjcsNS40Mjk3MjA4Nzg2LDANCisgICAgICAgICAgICAgIDExOS4xOTg1OTMxMzk2LDUuNDM4NjEwMDc2OSwwDQorICAgICAgICAgICAgICAxMTkuMTg5Njk3MjY1Niw1LjQ0MzMzMTcxODQsMA0KKyAgICAgICAgICAgICAgMTE5LjE3ODAzOTU1MDgsNS40NDUyNzYyNjA0LDANCisgICAgICAgICAgICAgIDExOS4xMzQxNjI5MDI4LDUuNDM2Mzg3MDYyMSwwDQorICAgICAgICAgICAgICAxMTkuMTI4NTkzNDQ0OCw1LjQzNDk5ODUxMjMsMA0KKyAgICAgICAgICAgICAgMTE5LjExNjkyODEwMDYsNS40MjYxMTAyNjc2LDANCisgICAgICAgICAgICAgIDExOS4xMDY2NDM2NzY4LDUuNDE2MTEwMDM4OCwwDQorICAgICAgICAgICAgICAxMTkuMDk4NjAyMjk0OSw1LjQxMDU1NDg4NTksMA0KKyAgICAgICAgICAgICAgMTE5LjA4Mjc2MzY3MTksNS40MDU4MzIyOTA2LDANCisgICAgICAgICAgICAgIDExOS4wNzAyNjY3MjM2LDUuNDA0NDQzNzQwOCwwDQorICAgICAgICAgICAgICAxMTkuMDU2NjQwNjI1MCw1LjQwNDQ0Mzc0MDgsMA0KKyAgICAgICAgICAgICAgMTE4LjkzNDcwNzY0MTYsNS40Mjk3MjA4Nzg2LDANCisgICAgICAgICAgICAgIDExOC43ODUyNjMwNjE1LDUuNTI3MjIxNjc5NywwDQorICAgICAgICAgICAgICAxMTguNjkyMTk5NzA3MCw1LjU5MTM4Nzc0ODcsMA0KKyAgICAgICAgICAgICAgMTE4LjY2MzMwNzE4OTksNS42MjQ3MjA1NzM0LDANCisgICAgICAgICAgICAgIDExOC42NjMwMDIwMTQyLDUuNjI1MDAwMDAwMCwwDQorICAgICAgICAgICAgICAxMTguNjQ4ODgwMDA0OSw1LjYzNzc3NzMyODUsMA0KKyAgICAgICAgICAgICAgMTE4LjU4MzA1MzU4ODksNS42ODYxMDk1NDI4LDANCisgICAgICAgICAgICAgIDExOC41NzQ5OTY5NDgyLDUuNjkxNjY1NjQ5NCwwDQorICAgICAgICAgICAgICAxMTguNDk1NTI5MTc0OCw1Ljc0NDcyMTQxMjcsMA0KKyAgICAgICAgICAgICAgMTE4LjQ3NDk5MDg0NDcsNS43NTgzMzMyMDYyLDANCisgICAgICAgICAgICAgIDExOC40NjYwODczNDEzLDUuNzYzMDU0ODQ3NywwDQorICAgICAgICAgICAgICAxMTguNDQzMzEzNTk4Niw1Ljc3NDcyMTE0NTYsMA0KKyAgICAgICAgICAgICAgMTE4LjQyOTcwMjc1ODgsNS43ODE2NjU4MDIwLDANCisgICAgICAgICAgICAgIDExOC4zNzM1OTYxOTE0LDUuODA3NDk4OTMxOSwwDQorICAgICAgICAgICAgICAxMTguMzYyNDg3NzkzMCw1LjgxMDI3Njk4NTIsMA0KKyAgICAgICAgICAgICAgMTE4LjI2MTkzMjM3MzAsNS44MjcyMjE4NzA0LDANCisgICAgICAgICAgICAgIDExOC4yNTU1NDY1Njk4LDUuODI3Nzc2OTA4OSwwDQorICAgICAgICAgICAgICAxMTguMTc2NjUxMDAxMCw1LjgwMzg4NzM2NzIsMA0KKyAgICAgICAgICAgICAgMTE4LjE2NTgxNzI2MDcsNS44MDA1NTQyNzU1LDANCisgICAgICAgICAgICAgIDExOC4xNTc0OTM1OTEzLDUuNzk1Mjc2NjQxOCwwDQorICAgICAgICAgICAgICAxMTguMTU2MzcyMDcwMyw1Ljc4OTcyMTQ4OTAsMA0KKyAgICAgICAgICAgICAgMTE4LjE1NjM3MjA3MDMsNS43ODQxNjUzODI0LDANCisgICAgICAgICAgICAgIDExOC4xMjU1MjY0MjgyLDUuNjg5NDQyNjM0NiwwDQorICAgICAgICAgICAgICAxMTcuOTYwMjczNzQyNyw1LjY4MTM4NzkwMTMsMA0KKyAgICAgICAgICAgICAgMTE3Ljk1NjEwMDQ2MzksNS42ODM4ODc0ODE3LDANCisgICAgICAgICAgICAgIDExNy45NTI3NjY0MTg1LDUuNjg3NDk5MDQ2MywwDQorICAgICAgICAgICAgICAxMTcuOTE3NzYyNzU2Myw1Ljc1NDk5OTE2MDgsMA0KKyAgICAgICAgICAgICAgMTE3LjkwNjkzNjY0NTUsNS43OTAyNzY1Mjc0LDANCisgICAgICAgICAgICAgIDExNy45MDY5MzY2NDU1LDUuNzk3MjIxMTgzOCwwDQorICAgICAgICAgICAgICAxMTcuOTA5NDE2MTk4Nyw1LjgwMTM4Nzc4NjksMA0KKyAgICAgICAgICAgICAgMTE3LjkyMTA5NjgwMTgsNS44MTAyNzY5ODUyLDANCisgICAgICAgICAgICAgIDExNy45MzEzNzM1OTYyLDUuODEzNjEwMDc2OSwwDQorICAgICAgICAgICAgICAxMTcuOTgyMjA4MjUyMCw1LjgwOTQ0MzQ3MzgsMA0KKyAgICAgICAgICAgICAgMTE4LjA0MDU0MjYwMjUsNS44MDMzMzIzMjg4LDANCisgICAgICAgICAgICAgIDExOC4wODAyNzY0ODkzLDUuODEwMjc2OTg1MiwwDQorICAgICAgICAgICAgICAxMTguMDg5NzA2NDIwOSw1LjgxNDE2NTExNTQsMA0KKyAgICAgICAgICAgICAgMTE4LjA5MzA0ODA5NTcsNS44MTc3Nzc2MzM3LDANCisgICAgICAgICAgICAgIDExOC4xMTkxNDA2MjUwLDUuODUzMDU0MDQ2NiwwDQorICAgICAgICAgICAgICAxMTguMTI0Njg3MTk0OCw1Ljg2MTM4ODIwNjUsMA0KKyAgICAgICAgICAgICAgMTE4LjEyNDY4NzE5NDgsNS44NjY2NjU4NDAxLDANCisgICAgICAgICAgICAgIDExOC4wNzMzMTg0ODE0LDUuOTc0OTk5NDI3OCwwDQorICAgICAgICAgICAgICAxMTguMDQ4NTk5MjQzMiw2LjAxOTQ0MzUxMjAsMA0KKyAgICAgICAgICAgICAgMTE4LjAzNjkyNjI2OTUsNi4wMzQ5OTg4OTM3LDANCisgICAgICAgICAgICAgIDExOC4wMTMwNDYyNjQ2LDYuMDU4ODg3NDgxNywwDQorICAgICAgICAgICAgICAxMTguMDA4ODgwNjE1Miw2LjA2MTY2NTUzNTAsMA0KKyAgICAgICAgICAgICAgMTE4LjAwMjc3NzA5OTYsNi4wNjIyMjA1NzM0LDANCisgICAgICAgICAgICAgIDExNy45ODk3MDAzMTc0LDYuMDYxNjY1NTM1MCwwDQorICAgICAgICAgICAgICAxMTcuOTg2OTIzMjE3OCw2LjA1NzQ5ODkzMTksMA0KKyAgICAgICAgICAgICAgMTE3Ljk4NDk5Mjk4MTAsNi4wNTI3NzYzMzY3LDANCisgICAgICAgICAgICAgIDExNy45NzYwODk0Nzc1LDYuMDQxMTEwMDM4OCwwDQorICAgICAgICAgICAgICAxMTcuOTQ5NDE3MTE0Myw2LjAxMzMzMzMyMDYsMA0KKyAgICAgICAgICAgICAgMTE3Ljk0MjQ2NjczNTgsNi4wMDYzODg2NjQyLDANCisgICAgICAgICAgICAgIDExNy44OTEwOTgwMjI1LDUuOTU1Mjc3NDQyOSwwDQorICAgICAgICAgICAgICAxMTcuODgyNzUxNDY0OCw1Ljk0OTk5OTgwOTMsMA0KKyAgICAgICAgICAgICAgMTE3Ljg3ODAzNjQ5OTAsNS45NDc3NzY3OTQ0LDANCisgICAgICAgICAgICAgIDExNy43ODIyMTEzMDM3LDUuOTE0OTk5MDA4MiwwDQorICAgICAgICAgICAgICAxMTcuNTUwNTM3MTA5NCw1Ljg5NzQ5OTA4NDUsMA0KKyAgICAgICAgICAgICAgMTE3LjUwMzA1MTc1NzgsNS44OTYxMTA1MzQ3LDANCisgICAgICAgICAgICAgIDExNy41NjQ5ODcxODI2LDUuOTE2Mzg3NTU4MCwwDQorICAgICAgICAgICAgICAxMTcuNTkwMjcwOTk2MSw1LjkyNTI3Njc1NjMsMA0KKyAgICAgICAgICAgICAgMTE3LjYyOTk2NjczNTgsNS45NDAyNzYxNDU5LDANCisgICAgICAgICAgICAgIDExNy42NDMwNTExNDc1LDUuOTQ4NjA5MzUyMSwwDQorICAgICAgICAgICAgICAxMTcuNjY3NzYyNzU2Myw1Ljk3MTY2NTM4MjQsMA0KKyAgICAgICAgICAgICAgMTE3LjY3Mzg2NjI3MjAsNS45Nzk5OTk1NDIyLDANCisgICAgICAgICAgICAgIDExNy42NzU4MTE3Njc2LDUuOTg0NzIxMTgzOCwwDQorICAgICAgICAgICAgICAxMTcuNjc1MjYyNDUxMiw1Ljk5NzQ5ODUxMjMsMA0KKyAgICAgICAgICAgICAgMTE3LjY2Mjc3MzEzMjMsNi4wODg4ODgxNjgzLDANCisgICAgICAgICAgICAgIDExNy42NTk5ODg0MDMzLDYuMDk5NzIwOTU0OSwwDQorICAgICAgICAgICAgICAxMTcuNjU0NzA4ODYyMyw2LjEwODA1NDE2MTEsMA0KKyAgICAgICAgICAgICAgMTE3LjY1MDU0MzIxMjksNi4xMTA4MzIyMTQ0LDANCisgICAgICAgICAgICAgIDExNy42MzQ3MTk4NDg2LDYuMTI5MTY1NjQ5NCwwDQorICAgICAgICAgICAgICAxMTcuNjAxOTI4NzEwOSw2LjE3ODA1NDgwOTYsMA0KKyAgICAgICAgICAgICAgMTE3LjU5OTcxNjE4NjUsNi4xODk3MjExMDc1LDANCisgICAgICAgICAgICAgIDExNy42MDEwODk0Nzc1LDYuMTk1Mjc2MjYwNCwwDQorICAgICAgICAgICAgICAxMTcuNjA4NTk2ODAxOCw2LjIxNDk5OTE5ODksMA0KKyAgICAgICAgICAgICAgMTE3LjYxMTM2NjI3MjAsNi4yMTk3MjA4NDA1LDANCisgICAgICAgICAgICAgIDExNy42MTQ5OTAyMzQ0LDYuMjIzMDU0ODg1OSwwDQorICAgICAgICAgICAgICAxMTcuNjQyMjExOTE0MSw2LjI0MzYxMDM4MjEsMA0KKyAgICAgICAgICAgICAgMTE3LjY3MTY1Mzc0NzYsNi4yNTUyNzc2MzM3LDANCisgICAgICAgICAgICAgIDExNy42ODg4NzMyOTEwLDYuMjUxNjY2MDY5MCwwDQorICAgICAgICAgICAgICAxMTcuNzA2NjQ5NzgwMyw2LjI0ODg4ODAxNTcsMA0KKyAgICAgICAgICAgICAgMTE3LjcxMjc2ODU1NDcsNi4yNDk3MjA1NzM0LDANCisgICAgICAgICAgICAgIDExNy43MTc3NTgxNzg3LDYuMjUxNjY2MDY5MCwwDQorICAgICAgICAgICAgICAxMTcuNzIxNjQ5MTY5OSw2LjI1NDQ0NDEyMjMsMA0KKyAgICAgICAgICAgICAgMTE3LjcyNDQyNjI2OTUsNi4yNTg2MTA3MjU0LDANCisgICAgICAgICAgICAgIDExNy43MjY2NDY0MjMzLDYuMjYzMzMzMzIwNiwwDQorICAgICAgICAgICAgICAxMTcuNzI4MDQyNjAyNSw2LjI2ODg4ODQ3MzUsMA0KKyAgICAgICAgICAgICAgMTE3LjczNDE1Mzc0NzYsNi4zMTcyMjE2NDE1LDANCisgICAgICAgICAgICAgIDExNy43Mzk3MDAzMTc0LDYuMzgzODg4MjQ0NiwwDQorICAgICAgICAgICAgICAxMTcuNzM4ODc2MzQyOCw2LjM4OTk5OTM4OTYsMA0KKyAgICAgICAgICAgICAgMTE3LjcyNDQyNjI2OTUsNi40MjMzMzIyMTQ0LDANCisgICAgICAgICAgICAgIDExNy42NzY2NTEwMDEwLDYuNDkxMzg3MzY3MiwwDQorICAgICAgICAgICAgICAxMTcuNjUwNTQzMjEyOSw2LjUxMzMzMzMyMDYsMA0KKyAgICAgICAgICAgICAgMTE3LjY0NjM3NzU2MzUsNi41MTYxMTA0MjAyLDANCisgICAgICAgICAgICAgIDExNy41NTg1OTM3NTAwLDYuNTM3Nzc2OTQ3MCwwDQorICAgICAgICAgICAgICAxMTcuNDc3NzY3OTQ0Myw2LjU0NDQ0MzEzMDUsMA0KKyAgICAgICAgICAgICAgMTE3LjQ3NDQyNjI2OTUsNi41NDExMTAwMzg4LDANCisgICAgICAgICAgICAgIDExNy40Njk3MTEzMDM3LDYuNTM5MTY1NDk2OCwwDQorICAgICAgICAgICAgICAxMTcuNDYzMzE3ODcxMSw2LjUzOTcyMTQ4OTAsMA0KKyAgICAgICAgICAgICAgMTE3LjQ1Mzg3MjY4MDcsNi41NDM4ODgwOTIwLDANCisgICAgICAgICAgICAgIDExNy4zMDU4MTY2NTA0LDYuNjIzNjA5NTQyOCwwDQorICAgICAgICAgICAgICAxMTcuMjk3NDkyOTgxMCw2LjYyODg4NzE3NjUsMA0KKyAgICAgICAgICAgICAgMTE3LjI5MDgxNzI2MDcsNi42MzU4MzI3ODY2LDANCisgICAgICAgICAgICAgIDExNy4yODUyNjMwNjE1LDYuNjQzODg4NDczNSwwDQorICAgICAgICAgICAgICAxMTcuMjc3NzcwOTk2MSw2LjY2MzYxMDQ1ODQsMA0KKyAgICAgICAgICAgICAgMTE3LjI3NjM4MjQ0NjMsNi42NjkxNjU2MTEzLDANCisgICAgICAgICAgICAgIDExNy4yNTMwNTE3NTc4LDYuNzY3Nzc3NDQyOSwwDQorICAgICAgICAgICAgICAxMTcuMjQ0OTc5ODU4NCw2Ljg2MTY2NTcyNTcsMA0KKyAgICAgICAgICAgICAgMTE3LjI1MTY2MzIwODAsNi44NzUyNzY1NjU2LDANCisgICAgICAgICAgICAgIDExNy4yNTI0ODcxODI2LDYuODg4MzMyMzY2OSwwDQorICAgICAgICAgICAgICAxMTcuMjUzMDUxNzU3OCw2LjkyODMzMjMyODgsMA0KKyAgICAgICAgICAgICAgMTE3LjI1MjQ4NzE4MjYsNi45NDEzODcxNzY1LDANCisgICAgICAgICAgICAgIDExNy4yNDYwOTM3NTAwLDYuOTQ4ODg3ODI1MCwwDQorICAgICAgICAgICAgICAxMTcuMTc4MzA2NTc5Niw2Ljk5MDI3NjMzNjcsMA0KKyAgICAgICAgICAgICAgMTE3LjE2ODg2OTAxODYsNi45OTQ0NDI5Mzk4LDANCisgICAgICAgICAgICAgIDExNy4xNDgzMzA2ODg1LDcuMDAxMTExMDMwNiwwDQorICAgICAgICAgICAgICAxMTcuMTQxOTM3MjU1OSw3LjAwMTk0MzU4ODMsMA0KKyAgICAgICAgICAgICAgMTE3LjA4OTQzMTc2MjcsNi45OTMwNTQzOTAwLDANCisgICAgICAgICAgICAgIDExNy4wNzk3MTE5MTQxLDYuOTg4ODg3Nzg2OSwwDQorICAgICAgICAgICAgICAxMTcuMDc1NTQ2MjY0Niw2Ljk4NjEwOTczMzYsMA0KKyAgICAgICAgICAgICAgMTE3LjA2ODYwMzUxNTYsNi45Nzk0NDM1NTAxLDANCisgICAgICAgICAgICAgIDExNy4wMzM4NjY4ODIzLDYuOTQwNTU0NjE4OCwwDQorICAgICAgICAgICAgICAxMTcuMDMxMDk3NDEyMSw2LjkzNjY2NTUzNTAsMA0KKyAgICAgICAgICAgICAgMTE3LjAyOTcwODg2MjMsNi45MzExMTAzODIxLDANCisgICAgICAgICAgICAgIDExNy4wMjk3MDg4NjIzLDYuOTEwODMyNDA1MSwwDQorICAgICAgICAgICAgICAxMTcuMDM0NDE2MTk4Nyw2Ljg5NDk5OTUwNDEsMA0KKyAgICAgICAgICAgICAgMTE3LjAzODU4OTQ3NzUsNi44ODU1NTUyNjczLDANCisgICAgICAgICAgICAgIDExNy4wNDY5NDM2NjQ2LDYuODczMzMyMDIzNiwwDQorICAgICAgICAgICAgICAxMTcuMDQ4ODY2MjcyMCw2Ljg2ODYwOTQyODQsMA0KKyAgICAgICAgICAgICAgMTE3LjA1NDQyODEwMDYsNi44NDY2NjYzMzYxLDANCisgICAgICAgICAgICAgIDExNy4wNTQ0MjgxMDA2LDYuODM5OTk5MTk4OSwwDQorICAgICAgICAgICAgICAxMTcuMDQ4MDI3MDM4Niw2LjgyNTU1NDg0NzcsMA0KKyAgICAgICAgICAgICAgMTE2Ljk4MTY1ODkzNTUsNi43NDE5NDMzNTk0LDANCisgICAgICAgICAgICAgIDExNi44NjI0ODc3OTMwLDYuNTk2Mzg3ODYzMiwwDQorICAgICAgICAgICAgICAxMTYuODU0MTU2NDk0MSw2LjU5MDgzMjcxMDMsMA0KKyAgICAgICAgICAgICAgMTE2Ljg0NTI2MDYyMDEsNi41ODYxMTAxMTUxLDANCisgICAgICAgICAgICAgIDExNi44MjQxNTc3MTQ4LDYuNTc5OTk5OTIzNywwDQorICAgICAgICAgICAgICAxMTYuNzk5OTg3NzkzMCw2LjU3NjY2NTg3ODMsMA0KKyAgICAgICAgICAgICAgMTE2Ljc4OTE0NjQyMzMsNi41NzkxNjY0MTI0LDANCisgICAgICAgICAgICAgIDExNi43ODQ5ODg0MDMzLDYuNTgxOTQzNTEyMCwwDQorICAgICAgICAgICAgICAxMTYuNzgxNjYxOTg3Myw2LjU4NTU1NTA3NjYsMA0KKyAgICAgICAgICAgICAgMTE2Ljc3OTQyNjU3NDcsNi41OTAyNzY3MTgxLDANCisgICAgICAgICAgICAgIDExNi43NzY5MzE3NjI3LDYuNjAxMTEwNDU4NCwwDQorICAgICAgICAgICAgICAxMTYuNzc2MDkyNTI5Myw2LjYyMDgzMjQ0MzIsMA0KKyAgICAgICAgICAgICAgMTE2Ljc4MDgyMjc1MzksNi42NDMzMzI0ODE0LDANCisgICAgICAgICAgICAgIDExNi43ODkxNDY0MjMzLDYuNjYyMjIwOTU0OSwwDQorICAgICAgICAgICAgICAxMTYuODA5NzA3NjQxNiw2LjcwMzA1NDQyODEsMA0KKyAgICAgICAgICAgICAgMTE2LjgyMDU0MTM4MTgsNi43MTk0NDMzMjEyLDANCisgICAgICAgICAgICAgIDExNi44MzIyMDY3MjYxLDYuNzI4MzMyNTE5NSwwDQorICAgICAgICAgICAgICAxMTYuODM4NTkyNTI5Myw2LjczNTgzMjIxNDQsMA0KKyAgICAgICAgICAgICAgMTE2Ljg0NjY0OTE2OTksNi43NDgwNTQ1MDQ0LDANCisgICAgICAgICAgICAgIDExNi44NTEzNzkzOTQ1LDYuNzU2OTQzNzAyNywwDQorICAgICAgICAgICAgICAxMTYuODU1NTUyNjczMyw2Ljc2NjM4NzkzOTUsMA0KKyAgICAgICAgICAgICAgMTE2Ljg1ODMyMjE0MzYsNi43Nzc0OTkxOTg5LDANCisgICAgICAgICAgICAgIDExNi44NTkxNTM3NDc2LDYuNzgzNjEwMzQzOSwwDQorICAgICAgICAgICAgICAxMTYuODU5NzEwNjkzNCw2LjgwMzMzMjMyODgsMA0KKyAgICAgICAgICAgICAgMTE2Ljg1MTM3OTM5NDUsNi44OTQ5OTk1MDQxLDANCisgICAgICAgICAgICAgIDExNi44NTA4MDcxODk5LDYuOTAxMTEwNjQ5MSwwDQorICAgICAgICAgICAgICAxMTYuODQwNTUzMjgzNyw2Ljk0NjEwOTc3MTcsMA0KKyAgICAgICAgICAgICAgMTE2LjgzOTE1NzEwNDUsNi45NTEzODgzNTkxLDANCisgICAgICAgICAgICAgIDExNi44MzQ5OTE0NTUxLDYuOTYxMTEwMTE1MSwwDQorICAgICAgICAgICAgICAxMTYuODI5NzExOTE0MSw2Ljk2OTE2NTgwMjAsMA0KKyAgICAgICAgICAgICAgMTE2Ljc3Mjc3Mzc0MjcsNy4wMjE2NjU1NzMxLDANCisgICAgICAgICAgICAgIDExNi43Njc3NjEyMzA1LDcuMDIzNjEwMTE1MSwwDQorICAgICAgICAgICAgICAxMTYuNzYyNDk2OTQ4Miw3LjAyMzYxMDExNTEsMA0KKyAgICAgICAgICAgICAgMTE2Ljc1NDE3MzI3ODgsNy4wMTgwNTQ5NjIyLDANCisgICAgICAgICAgICAgIDExNi43NDUyNDY4ODcyLDcuMDA2NjY2MTgzNSwwDQorICAgICAgICAgICAgICAxMTYuNzE1ODIwMzEyNSw2Ljk2Nzc3NzI1MjIsMA0KKyAgICAgICAgICAgICAgMTE2LjY2MTEwMjI5NDksNi44NTYzODgwOTIwLDANCisgICAgICAgICAgICAgIDExNi42NTY5MzY2NDU1LDYuODQ2NjY2MzM2MSwwDQorICAgICAgICAgICAgICAxMTYuNjQzMzMzNDM1MSw2Ljc3MzMzMjU5NTgsMA0KKyAgICAgICAgICAgICAgMTE2LjY0MjQ4NjU3MjMsNi43NjAyNzc3NDgxLDANCisgICAgICAgICAgICAgIDExNi42NDY2NTIyMjE3LDYuNzQzMzMxOTA5MiwwDQorICAgICAgICAgICAgICAxMTYuNjQ4MDQwNzcxNSw2LjczMTExMDU3MjgsMA0KKyAgICAgICAgICAgICAgMTE2LjY0ODA0MDc3MTUsNi43MTc0OTg3NzkzLDANCisgICAgICAgICAgICAgIDExNi42NDcyMTY3OTY5LDYuNzExMzg4NTg4MCwwDQorICAgICAgICAgICAgICAxMTYuNjQzODgyNzUxNSw2LjcwMTExMDgzOTgsMA0KKyAgICAgICAgICAgICAgMTE2LjYzOTE2MDE1NjMsNi42OTIyMjA2ODc5LDANCisgICAgICAgICAgICAgIDExNi42MzAyNTY2NTI4LDYuNjgwODMxOTA5MiwwDQorICAgICAgICAgICAgICAxMTYuNjIzMzA2Mjc0NCw2LjY3Mzg4ODIwNjUsMA0KKyAgICAgICAgICAgICAgMTE2LjU2MTA5NjE5MTQsNi42MDYzODgwOTIwLDANCisgICAgICAgICAgICAgIDExNi41MTAyNjkxNjUwLDYuNTQ4MDU0Njk1MSwwDQorICAgICAgICAgICAgICAxMTYuNTA0MTczMjc4OCw2LjU0MDU1NTAwMDMsMA0KKyAgICAgICAgICAgICAgMTE2LjUwMjc3NzA5OTYsNi41MzQ5OTg4OTM3LDANCisgICAgICAgICAgICAgIDExNi41MDI3NzcwOTk2LDYuNTI5NzIxMjYwMSwwDQorICAgICAgICAgICAgICAxMTYuNTA3NDkyMDY1NCw2LjUxMzg4ODM1OTEsMA0KKyAgICAgICAgICAgICAgMTE2LjUwNzQ5MjA2NTQsNi41MDcyMjIxNzU2LDANCisgICAgICAgICAgICAgIDExNi41MDMzMjY0MTYwLDYuNDk3NDk4NTEyMywwDQorICAgICAgICAgICAgICAxMTYuNDk4MDMxNjE2Miw2LjQ4OTQ0MjgyNTMsMA0KKyAgICAgICAgICAgICAgMTE2LjQ5MTA4ODg2NzIsNi40ODI3NzY2NDE4LDANCisgICAgICAgICAgICAgIDExNi40MTQ0Mjg3MTA5LDYuNDI4ODg3MzY3MiwwDQorICAgICAgICAgICAgICAxMTYuMzU4MDMyMjI2Niw2LjM4ODYxMDgzOTgsMA0KKyAgICAgICAgICAgICAgMTE2LjMyODU5ODAyMjUsNi4zNjMzMzI3NDg0LDANCisgICAgICAgICAgICAgIDExNi4xMDk5OTI5ODEwLDYuMTI3Nzc2MTQ1OSwwDQorICAgICAgICAgICAgICAxMTYuMDkwMjcwOTk2MSw1Ljk3Nzc3NjUyNzQsMA0KKyAgICAgICAgICAgICAgMTE2LjA1MzMwNjU3OTYsNS45MDAyNzcxMzc4LDANCisgICAgICAgICAgICAgIDExNi4wNTY2NDA2MjUwLDUuODYyNDk5MjM3MSwwDQorICAgICAgICAgICAgICAxMTYuMDU2NjQwNjI1MCw1Ljg1NTgzMjA5OTksMA0KKyAgICAgICAgICAgICAgMTE2LjA1NTI1MjA3NTIsNS44NTAyNzY5NDcwLDANCisgICAgICAgICAgICAgIDExNi4wNTEwODY0MjU4LDUuODQwODMyNzEwMywwDQorICAgICAgICAgICAgICAxMTYuMDQyMjEzNDM5OSw1LjgyOTE2NjQxMjQsMA0KKyAgICAgICAgICAgICAgMTE2LjAzNDcxMzc0NTEsNS44MjMwNTUyNjczLDANCisgICAgICAgICAgICAgIDExNi4wMTQxNjAxNTYzLDUuODA5NDQzNDczOCwwDQorICAgICAgICAgICAgICAxMTUuOTkxMzYzNTI1NCw1Ljc5Nzc3NzE3NTksMA0KKyAgICAgICAgICAgICAgMTE1Ljk0NDEzNzU3MzIsNS43Njk5OTk1MDQxLDANCisgICAgICAgICAgICAgIDExNS45MzE5MzA1NDIwLDUuNzYxNjY2Mjk3OSwwDQorICAgICAgICAgICAgICAxMTUuOTI0OTg3NzkzMCw1Ljc1NDk5OTE2MDgsMA0KKyAgICAgICAgICAgICAgMTE1LjkxODg2OTAxODYsNS43NDc0OTg1MTIzLDANCisgICAgICAgICAgICAgIDExNS45MTUwNDY2OTE5LDUuNzM4MDA1NjM4MSwwDQorICAgICAgICAgICAgICAxMTUuOTA5MTQ5MTY5OSw1LjcxNjExMDIyOTUsMA0KKyAgICAgICAgICAgICAgMTE1LjkwNDQyNjU3NDcsNS42Nzk5OTkzNTE1LDANCisgICAgICAgICAgICAgIDExNS44OTYzNzc1NjM1LDUuNjQ3MjIxNTY1MiwwDQorICAgICAgICAgICAgICAxMTUuODk0MTQ5NzgwMyw1LjY0MjQ5ODk3MDAsMA0KKyAgICAgICAgICAgICAgMTE1Ljg4NjY1NzcxNDgsNS42Mjg4ODcxNzY1LDANCisgICAgICAgICAgICAgIDExNS44NTcyMDgyNTIwLDUuNTc2Mzg4MzU5MSwwDQorICAgICAgICAgICAgICAxMTUuODQ4ODc2OTUzMSw1LjU2Mzg4NzU5NjEsMA0KKyAgICAgICAgICAgICAgMTE1LjgyOTcxMTkxNDEsNS41NDIyMjEwNjkzLDANCisgICAgICAgICAgICAgIDExNS44MTc0ODk2MjQwLDUuNTMzODg3ODYzMiwwDQorICAgICAgICAgICAgICAxMTUuODAzMDM5NTUwOCw1LjUyNzc3NjcxODEsMA0KKyAgICAgICAgICAgICAgMTE1Ljc5MjIxMzQzOTksNS41MjQ5OTk2MTg1LDANCisgICAgICAgICAgICAgIDExNS43NjI0OTY5NDgyLDUuNTIwMjc3MDIzMywwDQorICAgICAgICAgICAgICAxMTUuNzQ5NzEwMDgzMCw1LjUxOTcyMTAzMTIsMA0KKyAgICAgICAgICAgICAgMTE1LjYwNTgxOTcwMjEsNS41MjAyNzcwMjMzLDANCisgICAgICAgICAgICAgIDExNS41MjgzMjAzMTI1LDUuNTE3NDk4OTcwMCwwDQorICAgICAgICAgICAgICAxMTUuMzgxNjUyODMyMCw1LjQwMzA1NDIzNzQsMA0KKyAgICAgICAgICAgICAgMTE1LjM3ODg2MDQ3MzYsNS4zOTg4ODg1ODgwLDANCisgICAgICAgICAgICAgIDExNS4zNzE5MTc3MjQ2LDUuMzg1Mjc2Nzk0NCwwDQorICAgICAgICAgICAgICAxMTUuMzcwNTI5MTc0OCw1LjM3OTcyMDY4NzksMA0KKyAgICAgICAgICAgICAgMTE1LjM1OTcxMDY5MzQsNS4zMjM4ODg3Nzg3LDANCisgICAgICAgICAgICAgIDExNS4zNTgzMjIxNDM2LDUuMzExNjY1NTM1MCwwDQorICAgICAgICAgICAgICAxMTUuMzYxMDk5MjQzMiw1LjMwNzQ5ODkzMTksMA0KKyAgICAgICAgICAgICAgMTE1LjQ4MzA0NzQ4NTQsNS4yMjIyMjEzNzQ1LDANCisgICAgICAgICAgICAgIDExNS40ODcxOTc4NzYwLDUuMjE5NDQzMzIxMiwwDQorICAgICAgICAgICAgICAxMTUuNTEwNTM2MTkzOCw1LjIwODYxMDUzNDcsMA0KKyAgICAgICAgICAgICAgMTE1LjUyOTcwODg2MjMsNS4yMDAyNzczMjg1LDANCisgICAgICAgICAgICAgIDExNS41NDE5MzExNTIzLDUuMTk4ODg3ODI1MCwwDQorICAgICAgICAgICAgICAxMTUuNTU5MTQzMDY2NCw1LjIwMjQ5OTM4OTYsMA0KKyAgICAgICAgICAgICAgMTE1LjU3NDE1NzcxNDgsNS4xNzkxNjU4NDAxLDANCisgICAgICAgICAgICAgIDExNS41Njg2MDM1MTU2LDUuMTI2MTEwMDc2OSwwDQorICAgICAgICAgICAgICAxMTUuNTY0Njk3MjY1Niw1LjA4OTE2NTY4NzYsMA0KKyAgICAgICAgICAgICAgMTE1LjU2MTkyMDE2NjAsNS4wNzgzMzI5MDEwLDANCisgICAgICAgICAgICAgIDExNS41NTc3NDY4ODcyLDUuMDY4NjEwMTkxMywwDQorICAgICAgICAgICAgICAxMTUuNTQ2MDk2ODAxOCw1LjA1MzA1Mzg1NTksMA0KKyAgICAgICAgICAgICAgMTE1LjUyODg2OTYyODksNS4wNDE5NDM1NTAxLDANCisgICAgICAgICAgICAgIDExNS40Nzk3MTM0Mzk5LDUuMDIyNzc1MTczMiwwDQorICAgICAgICAgICAgICAxMTUuNTc3MDAzNDc5MCw1LjAwNDk5ODIwNzEsMA0KKyAgICAgICAgICAgICAgMTE1LjU4ODYwMDE1ODcsNC45NTY3Mzg5NDg4LDANCisgICAgICAgICAgICAgIDExNS41OTM1OTc0MTIxLDQuODcyMjkzOTQ5MSwwDQorICAgICAgICAgICAgICAxMTUuNTk3Mzk2ODUwNiw0Ljc3ODkzNzgxNjYsMA0KKyAgICAgICAgICAgICAgMTE1LjYyMDU5NzgzOTQsNC42ODI0MTY5MTU5LDANCisgICAgICAgICAgICAgIDExNS42MzY1OTY2Nzk3LDQuNTcwNjU4MjA2OSwwDQorICAgICAgICAgICAgICAxMTUuNjQzODk4MDEwMyw0LjM1OTgzODk2MjYsMA0KKyAgICAgICAgICAgICAgMTE1LjY0MDE5Nzc1MzksNC4yNjc3ODc5MzMzLDANCisgICAgICAgICAgICAgIDExNS42MTg3OTczMDIyLDQuMTc5NjkxNzkxNSwwDQorICAgICAgICAgICAgICAxMTUuNjI3MTk3MjY1Niw0LjEzMTAxMTAwOTIsMA0KKyAgICAgICAgICAgICAgMTE1LjY1OTcxMzc0NTEsNC4xMDg1OTYzMjQ5LDANCisgICAgICAgICAgICAgIDExNS42ODEzNzM1OTYyLDQuMTYyNzc2OTQ3MCwwDQorICAgICAgICAgICAgICAxMTUuNjg1MjU2OTU4MCw0LjE3MTk0MzY2NDYsMA0KKyAgICAgICAgICAgICAgMTE1LjY5MDgxMTE1NzIsNC4xODAyNzY4NzA3LDANCisgICAgICAgICAgICAgIDExNS43NjEzODMwNTY2LDQuMjM5NzIxMjk4MiwwDQorICAgICAgICAgICAgICAxMTUuNzcwMjYzNjcxOSw0LjI0NDcyMTQxMjcsMA0KKyAgICAgICAgICAgICAgMTE1Ljg1MDU0MDE2MTEsNC4zMjE2NjU3NjM5LDANCisgICAgICAgICAgICAgIDExNS44NTQ3MTM0Mzk5LDQuMzM4MzMyMTc2MiwwDQorICAgICAgICAgICAgICAxMTUuODU2NjQzNjc2OCw0LjM0MzA1NDc3MTQsMA0KKyAgICAgICAgICAgICAgMTE1Ljg1OTQyMDc3NjQsNC4zNDc0OTg4OTM3LDANCisgICAgICAgICAgICAgIDExNS44NzI0ODIyOTk4LDQuMzYxMTA5NzMzNiwwDQorICAgICAgICAgICAgICAxMTUuODgwODEzNTk4Niw0LjM2NjY2NTg0MDEsMA0KKyAgICAgICAgICAgICAgMTE1Ljg4NjM4MzA1NjYsNC4zNjgwNTQzOTAwLDANCisgICAgICAgICAgICAgIDExNS44OTI0ODY1NzIzLDQuMzY4ODg3OTAxMywwDQorICAgICAgICAgICAgICAxMTUuOTc2MDg5NDc3NSw0LjM0MzA1NDc3MTQsMA0KKyAgICAgICAgICAgICAgMTE1Ljk4NjY0ODU1OTYsNC4zMzk3MjE2Nzk3LDANCisgICAgICAgICAgICAgIDExNi4wMDAyNjcwMjg4LDQuMzMyNzc3MDIzMywwDQorICAgICAgICAgICAgICAxMTYuMDA4MDQxMzgxOCw0LjMyNzIyMTg3MDQsMA0KKyAgICAgICAgICAgICAgMTE2LjAyODA1MzI4MzcsNC4zMDYzODc5MDEzLDANCisgICAgICAgICAgICAgIDExNi4wMjk5ODM1MjA1LDQuMzAxNjY1MzA2MSwwDQorICAgICAgICAgICAgICAxMTYuMDMyNzYwNjIwMSw0LjI5NzQ5ODcwMzAsMA0KKyAgICAgICAgICAgICAgMTE2LjA0NTgyMjE0MzYsNC4yODI3NzY4MzI2LDANCisgICAgICAgICAgICAgIDExNi4wNDk0MjMyMTc4LDQuMjc5NDQzNzQwOCwwDQorICAgICAgICAgICAgICAxMTYuMDU0MTUzNDQyNCw0LjI3NzIyMTY3OTcsMA0KKyAgICAgICAgICAgICAgMTE2LjA1OTcwNzY0MTYsNC4yNzcyMjE2Nzk3LDANCisgICAgICAgICAgICAgIDExNi4wNjUyNjE4NDA4LDQuMjc4NjEwMjI5NSwwDQorICAgICAgICAgICAgICAxMTYuMDc0MTU3NzE0OCw0LjI4MzYxMDM0MzksMA0KKyAgICAgICAgICAgICAgMTE2LjEzODYwMzIxMDQsNC4zMzU1NTUwNzY2LDANCisgICAgICAgICAgICAgIDExNi4xNDE5MzcyNTU5LDQuMzM4ODg4MTY4MywwDQorICAgICAgICAgICAgICAxMTYuMTUwODE3ODcxMSw0LjM1MDgzMTk4NTUsMA0KKyAgICAgICAgICAgICAgMTE2LjE1NTgyMjc1MzksNC4zNTkxNjUxOTE3LDANCisgICAgICAgICAgICAgIDExNi4zMTQ2OTcyNjU2LDQuMzU3Nzc2NjQxOCwwDQorICAgICAgICAgICAgICAxMTYuNDI1ODExNzY3Niw0LjMwOTk5ODUxMjMsMA0KKyAgICAgICAgICAgICAgMTE2LjQ0MTY1MDM5MDYsNC4yOTk0NDMyNDQ5LDANCisgICAgICAgICAgICAgIDExNi40NTEzOTMxMjc0LDQuMjk1Mjc2NjQxOCwwDQorICAgICAgICAgICAgICAxMTYuNDU2OTM5Njk3Myw0LjI5Mzg4ODA5MjAsMA0KKyAgICAgICAgICAgICAgMTE2LjQ2MzA0MzIxMjksNC4yOTMzMzIwOTk5LDANCisgICAgICAgICAgICAgIDExNi40Njg1OTc0MTIxLDQuMjk0NzIxNjAzNCwwDQorICAgICAgICAgICAgICAxMTYuNTI1ODE3ODcxMSw0LjMxNzQ5OTE2MDgsMA0KKyAgICAgICAgICAgICAgMTE2LjUyOTQyNjU3NDcsNC4zMjExMTA3MjU0LDANCisgICAgICAgICAgICAgIDExNi41MzM1OTk4NTM1LDQuMzMwODMyNDgxNCwwDQorICAgICAgICAgICAgICAxMTYuNjQxOTM3MjU1OSw0LjMzNDcyMTU2NTIsMA0KKyAgICAgICAgICAgICAgMTE2LjY4ODc2NjQ3OTUsNC4zMzA3NTA0NjU0LDANCisgICAgICAgICAgICAgIDExNi44MzY2NDcwMzM3LDQuMzI5OTk5OTIzNywwDQorICAgICAgICAgICAgICAxMTYuODQzMDQ4MDk1Nyw0LjMzMDgzMjQ4MTQsMA0KKyAgICAgICAgICAgICAgMTE2Ljg3NjkyMjYwNzQsNC4zNDUyNzY4MzI2LDANCisgICAgICAgICAgICAgIDExNi44ODYzODMwNTY2LDQuMzQ4NjA5OTI0MywwDQorICAgICAgICAgICAgICAxMTYuODkxOTM3MjU1OSw0LjM0OTk5OTQyNzgsMA0KKyAgICAgICAgICAgICAgMTE2LjkxMDUzNzcxOTcsNC4zNTIyMjE0ODkwLDANCisgICAgICAgICAgICAgIDExNi45MjQ0MjMyMTc4LDQuMzUyMjIxNDg5MCwwDQorICAgICAgICAgICAgICAxMTYuOTM2OTIwMTY2MCw0LjM1MDgzMTk4NTUsMA0KKyAgICAgICAgICAgICAgMTE3LjA0Mzg2OTAxODYsNC4zMzY5NDM2MjY0LDANCisgICAgICAgICAgICAgIDExNy4xNzY2NTEwMDEwLDQuMzM1NTU1MDc2NiwwDQorICAgICAgICAgICAgICAxMTcuMTg5MTQ3OTQ5Miw0LjMzNTU1NTA3NjYsMA0KKyAgICAgICAgICAgICAgMTE3LjE5NDQyNzQ5MDIsNC4zMzY5NDM2MjY0LDANCisgICAgICAgICAgICAgIDExNy4yMDEzOTMxMjc0LDQuMzQzODg4MjgyOCwwDQorICAgICAgICAgICAgICAxMTcuMjA0MTYyNTk3Nyw0LjM0ODA1NDg4NTksMA0KKyAgICAgICAgICAgICAgMTE3LjIxMTExMjk3NjEsNC4zNTQ0NDM1NTAxLDANCisgICAgICAgICAgICAgIDExNy4yMjA4MzI4MjQ3LDQuMzU4MzMyNjM0MCwwDQorICAgICAgICAgICAgICAxMTcuMjI2Mzc5Mzk0NSw0LjM1OTE2NTE5MTcsMA0KKyAgICAgICAgICAgICAgMTE3LjIzOTQzMzI4ODYsNC4zNTgzMzI2MzQwLDANCisgICAgICAgICAgICAgIDExNy4yNDk3MTAwODMwLDQuMzU0OTk4NTg4NiwwDQorICAgICAgICAgICAgICAxMTcuMjUzODgzMzYxOCw0LjM1Mjc3NjUyNzQsMA0KKyAgICAgICAgICAgICAgMTE3LjM5ODMzMDY4ODUsNC4yNTgwNTQ3MzMzLDANCisgICAgICAgICAgICAgIDExNy40MDUyNTgxNzg3LDQuMjUxMTExMDMwNiwwDQorICAgICAgICAgICAgICAxMTcuNDEwODEyMzc3OSw0LjI0MjQ5ODM5NzgsMA0KKyAgICAgICAgICAgICAgMTE3LjQyMDI1NzU2ODQsNC4yMjQ3MjA5NTQ5LDANCisgICAgICAgICAgICAgIDExNy40MjQ0MjMyMTc4LDQuMjE0NzIxNjc5NywwDQorICAgICAgICAgICAgICAxMTcuNDM1NTMxNjE2Miw0LjE5ODg4NzgyNTAsMA0KKyAgICAgICAgICAgICAgMTE3LjQ0MzMxMzU5ODYsNC4xOTI3NzY2ODAwLDANCisgICAgICAgICAgICAgIDExNy40NTI3NjY0MTg1LDQuMTg4NjEwMDc2OSwwDQorICAgICAgICAgICAgICAxMTcuNDc1NTQwMTYxMSw0LjE4MzYwOTk2MjUsMA0KKyAgICAgICAgICAgICAgMTE3LjQ5Nzc1Njk1ODAsNC4xNzg4ODczNjcyLDANCisgICAgICAgICAgICAgIDExNy41Mjg4Njk2Mjg5LDQuMTc1Mjc2NzU2MywwDQorICAgICAgICAgICAgICAxMTcuNTkyMDU2Mjc0NCw0LjE2OTgxNzkyNDUsMA0KKyAgICAgICAgICAgICAgMTE3LjYwMTA4OTQ3NzUsNC4xOTk3MjAzODI3LDANCisgICAgICAgICAgICAgIDExNy42NDQ0Mzk2OTczLDQuMjUzODg4MTMwMiwwDQorICAgICAgICAgICAgICAxMTcuNjQ5NzE5MjM4Myw0LjI2MTk0MzgxNzEsMA0KKyAgICAgICAgICAgICAgMTE3LjY1MTkzMTc2MjcsNC4yNjY5NDM5MzE2LDANCisgICAgICAgICAgICAgIDExNy42NTMzMjAzMTI1LDQuMjc5MTY2MjIxNiwwDQorICAgICAgICAgICAgICAxMTcuNjUxOTMxNzYyNyw0LjI4NDQ0Mzg1NTMsMA0KKyAgICAgICAgICAgICAgMTE3LjYyOTE1MDM5MDYsNC4zNTM2MTAwMzg4LDANCisgICAgICAgICAgICAgIDExNy42OTMwMzg5NDA0LDQuMzc0NzIwNTczNCwwDQorICAgICAgICAgICAgICAxMTcuNzc1MjY4NTU0Nyw0LjMzNTI3NjYwMzcsMA0KKyAgICAgICAgICAgICAgMTE3Ljg2MzAzNzEwOTQsNC4yODcyMjA5NTQ5LDANCisgICAgICAgICAgICAgIDExNy44NzMzMDYyNzQ0LDQuMjc3MjIxNjc5NywwDQorICAgICAgICAgICAgICAxMTcuODg2OTMyMzczMCw0LjI1ODA1NDczMzMsMA0KKyAgICAgICAgICAgICAgMTE3Ljg5MDI2NjQxODUsNC4yNTQ0NDQxMjIzLDANCisgICAgICAgICAgICAgIDExNy45MDMzMjAzMTI1LDQuMjQ2OTQzNDczOCwwDQorICAgICAgICAgICAgICAxMTcuOTA4MDQyOTA3Nyw0LjI0NDk5ODkzMTksMA0KKyAgICAgICAgICAgICAgMTE3Ljk4ODMxMTc2NzYsNC4yMjM4ODgzOTcyLDANCisgICAgICAgICAgICAgIDExNy45OTUyNDY4ODcyLDQuMjIzODg4Mzk3MiwwDQorICAgICAgICAgICAgICAxMTguMDAwMDAwMDAwMCw0LjIyNDQ0MzQzNTcsMA0KKyAgICAgICAgICAgICAgMTE4LjAxMzA0NjI2NDYsNC4yMzE5NDMxMzA1LDANCisgICAgICAgICAgICAgIDExOC4wNzM4ODMwNTY2LDQuMjY2OTQzOTMxNiwwDQorICAgICAgICAgICAgICAxMTguMTI1MDAwMDAwMCw0LjI5MDQ4MTA5MDUsMA0KKyAgICAgICAgICAgICAgMTE4LjE4MzU5Mzc1MDAsNC4zMDc3NzY0NTExLDANCisgICAgICAgICAgICAgIDExOC40MDQ0MjY1NzQ3LDQuMzQ4ODg4Mzk3MiwwDQorICAgICAgICAgICAgICAxMTguNDk3NDgyMjk5OCw0LjM1NTU1NDU4MDcsMA0KKyAgICAgICAgICAgICAgMTE4LjUyNDk4NjI2NzEsNC4zNTU1NTQ1ODA3LDANCisgICAgICAgICAgICAgIDExOC41MzA1NDgwOTU3LDQuMzU0NDQzNTUwMSwwDQorICAgICAgICAgICAgICAxMTguNTM1MjYzMDYxNSw0LjM1MjIyMTQ4OTAsMA0KKyAgICAgICAgICAgICAgMTE4LjU0MDgxNzI2MDcsNC4zNTA4MzE5ODU1LDANCisgICAgICAgICAgICAgIDExOC41NDY5NDM2NjQ2LDQuMzUwMjc2OTQ3MCwwDQorICAgICAgICAgICAgICAxMTguNTUyMjAwMzE3NCw0LjM1MTY2NTQ5NjgsMA0KKyAgICAgICAgICAgICAgMTE4LjYyNjM3MzI5MTAsNC40MTE2NjU5MTY0LDANCisgICAgICAgICAgICAgIDExOC42MzMzMzEyOTg4LDQuNDE4NjA5NjE5MSwwDQorICAgICAgICAgICAgICAxMTguNjM5NDI3MTg1MSw0LjQyNjExMDI2NzYsMA0KKyAgICAgICAgICAgICAgMTE4LjY0MjIxMTkxNDEsNC40MzAyNzY4NzA3LDANCisgICAgICAgICAgICAgIDExOC42NDQxNDk3ODAzLDQuNDM0OTk4NTEyMywwDQorICAgICAgICAgICAgICAxMTguNjQ1NTM4MzMwMSw0LjQ0MDI3NjE0NTksMA0KKyAgICAgICAgICAgICAgMTE4LjY0NDcwNjcyNjEsNC40NDY2NjU3NjM5LDANCisgICAgICAgICAgICAgIDExOC42NDIyMTE5MTQxLDQuNDUwNTU0ODQ3NywwDQorICAgICAgICAgICAgICAxMTguNTk2OTM5MDg2OSw0LjUxODg4ODQ3MzUsMA0KKyAgICAgICAgICAgICAgMTE4LjU5Mjc1ODE3ODcsNC41MjM2MTAxMTUxLDANCisgICAgICAgICAgICAgIDExOC41NDQwMjkyMzU4LDQuNTI1NDc1MDI1MiwwDQorICAgICAgICAgICAgICAxMTguNTA5Mjc3MzQzOCw0LjUwMDU3Njk3MzAsMA0KKyAgICAgICAgICAgICAgMTE4LjQ2NzI2MjI2ODEsNC41Mzg0NDI2MTE3LDANCisgICAgICAgICAgICAgIDExOC40ODY5Njg5OTQxLDQuNTY0ODk2NTgzNiwwDQorICAgICAgICAgICAgICAxMTguNDg1MjYwMDA5OCw0LjU5Mjc3NzI1MjIsMA0KKyAgICAgICAgICAgICAgMTE4LjQ0MzMxMzU5ODYsNC42MTI0OTkyMzcxLDANCisgICAgICAgICAgICAgIDExOC40Mzc3NTkzOTk0LDQuNjEzODg3Nzg2OSwwDQorICAgICAgICAgICAgICAxMTguNDMxNjYzNTEzMiw0LjYxMzA1NDI3NTUsMA0KKyAgICAgICAgICAgICAgMTE4LjQyODMwNjU3OTYsNC42MDk3MjExODM4LDANCisgICAgICAgICAgICAgIDExOC40MTcyMTM0Mzk5LDQuNTkzMzMyMjkwNiwwDQorICAgICAgICAgICAgPC9jb29yZGluYXRlcz4NCisgICAgICAgICAgPC9MaW5lYXJSaW5nPg0KKyAgICAgICAgPC9vdXRlckJvdW5kYXJ5SXM+DQorICAgICAgPC9Qb2x5Z29uPg0KKyAgICA8L1BsYWNlbWFyaz4NCisgIDwvRm9sZGVyPg0KKzwvRG9jdW1lbnQ+DQorPC9rbWw+DQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdXRpbGl0eS9nZW5lcmF0b3JzL0FkbWluMUxleFNvcnRlci5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdXRpbGl0eS9nZW5lcmF0b3JzL0FkbWluMUxleFNvcnRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNhMzAxNWIKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91dGlsaXR5L2dlbmVyYXRvcnMvQWRtaW4xTGV4U29ydGVyLmphdmEKQEAgLTAsMCArMSwzNzUgQEAKKy8qKgorICogCisgKi8KK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5LmdlbmVyYXRvcnM7CisKK2ltcG9ydCBqYXZhLmlvLkZpbGU7CitpbXBvcnQgamF2YS5pby5QcmludFdyaXRlcjsKK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OworaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uczsKK2ltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKK2ltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CitpbXBvcnQgamF2YS51dGlsLlNldDsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcworICogcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZgorICogdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzCisgKiBhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqIAorICogQ29udHJpYnV0b3JzOiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKgorICogU1RFTSBJSSBEYXRhIE1pZ3JhdGlvbi9HZW5lcmF0aW9uIFV0aWxpdGllcyA6IEluc3RhbmNlcyBvZiB0aGlzIGNsYXNzIHNvcnQKKyAqIGFsbCBsZXZlbCAxIElTTzMxNjYtMiBkZXNjcmlwdG9ycy4gVG8gZG8gc28sIGZpcnN0IGl0IGV4dHJhY3RzIGFsbCB0aGUKKyAqIElTTzMxNjYtMiBkZXNjcmlwdG9ycyB3ZSBoYXZlIGRpc3RyaWJ1dGVkIGluIHRoZSBmb2xsb3dpbmcgdHdvIGZpbGVzOgorICogSVNPMzE2Nl8yX2xpc3QudHh0IGFuZCBJU09fTEVWRUwxX0ZJWC50eHQuIFRoZSBvdXRwdXQgaXMgd3JpdHRlbiBpbnRvIGEKKyAqIHNlbWljb2xvbiBzZXBhcmF0ZWQgZm9ybWF0IG9mIHRoZSBmb3JtOgorICogCisgKiBDT1VOVFJZOkFMUEhBMjpYWC1ZWTpOQU1FOklOREVYCisgKiAKKyAqIFRoaXMgb3V0cHV0IHdpbGwgYmUgdXNlZCBkdXJpbmcgZ2VuZXJhdGlvbiBvZiB0aGUgbGV2ZWwgMiBkZXNjcmlwdG9ycyBhbmQKKyAqIGR1cmluZyBnZW5lcmF0aW9uIG9mIHRoZSByZWxhdGlvbnNoaXAgZmlsZXMuCisgKiAKKyAqIFRvIGNvbmZpZ3VyZSwgc2VlIGNvbmZpZ3VyYXRpb24gZmlsZSA6CisgKiBvcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvY29uZmlndXJhdGlvbi9BZG1pbjFMZXhTb3J0ZXIuY29uZmlnCisgKiAKKyAqIAorICogVG8gcnVuLCBhZGQgcGF0aCB0byBjb25maWd1cmF0aW9uIGZpbGUgaW4gdGhlIHJ1biBwcm9maWxlIChpLmUuCisgKiBDOlxzdGVtSUlcb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5XGNvbmZpZ3VyYXRpb25cQWRtaW4xTGV4U29ydGVyLmNvbmZpZykKKyAqIAorICogCisgKi8KK3B1YmxpYyBjbGFzcyBBZG1pbjFMZXhTb3J0ZXIgeworCisJLyoqCisJICogT3VyIHNvdXJjZSBmaWxlcyBmb3IgSVNPIDMxNjYtMSBjb2RlcyBhbmQgZm9yIHRoZSBsaXN0IG9mIHRhcmdldAorCSAqIGNvdW50cmllcy4KKwkgKi8KKwlwcml2YXRlIFN0cmluZyBpc28zMTY2XzEgPSBudWxsOworCisJcHJpdmF0ZSBTdHJpbmcgaXNvMzE2Nl8yID0gbnVsbDsKKworCXByaXZhdGUgU3RyaW5nIGZpeEZpbGUgPSBudWxsOworCisJcHJpdmF0ZSBTdHJpbmcgdGFyZ2V0RmlsZSA9IG51bGw7CisKKwlwcml2YXRlIFN0cmluZyBvdXRwdXREaXIgPSBudWxsOworCisJcHJpdmF0ZSBTdHJpbmcgd29ya3NwYWNlID0gbnVsbDsKKworCS8qKgorCSAqIExpc3QgZm9yIElTTyAzMTY2LTEgY29kZXMgYW5kIHRhcmdldCBjb3VudHJpZXMuCisJICovCisKKwlMaXN0IHRhcmdldExpc3QgPSBudWxsOworCisJTGlzdCBjb2RlTGlzdCA9IG51bGw7CisKKwlMaXN0IGNvZGVmaXhMaXN0ID0gbnVsbDsKKworCS8qKgorCSAqIENvbnN0cnVjdG9yCisJICogCisJICogQHBhcmFtIGlzbzMxNjZfMSAtCisJICogICAgICAgICAgICBkYXRhIGZpbGUgd2l0aCB0aGUgSVNPMzE2Ni0xIEFMUEhBXzIgYW5kIEFMUEhBXzMgY29kZXMuCisJICogQHBhcmFtIGlzbzMxNjZfMiAtCisJICogICAgICAgICAgICBmaWxlIHdpdGggdGhlIElTTzMxNjYtMiBkYXRhIHVzZWQgZm9yIGdlbmVyYXRpbmcgdGhlIElEcy4KKwkgKiBAcGFyYW0gZml4RmlsZSAtCisJICogICAgICAgICAgICBmaWxlIGNvbnRhaW5pbmcgbWlzc2luZyBJU08zMTY2LTIgY29kZXMKKwkgKiBAcGFyYW0gdGFyZ2V0RmlsZSAtCisJICogICAgICAgICAgICBkYXRhIGZpbGUgd2hlcmUgd2UgZmluZCBhIGxpc3Qgb2YgY291bnRyaWVzIGZvciBnZW5lcmF0aW9uIG9mCisJICogICAgICAgICAgICB0aGVpciBjb3JyZXNwb25kaW5nIGFyZWEucHJvcGVydGllcyBmaWxlcy4KKwkgKiBAcGFyYW0gb3V0cHV0RGlyIC0KKwkgKiAgICAgICAgICAgIHRoZSBvdXRwdXQgZGlyZWN0b3J5IGZvciB0aGUgZmlsZXMgZ2VuZXJhdGVkLgorCSAqIAorCSAqLworCS8vIHB1YmxpYyBBZG1pbjFMZXhTb3J0ZXIoU3RyaW5nIGlzbzMxNjZfMSwgU3RyaW5nIGlzbzMxNjZfMiwgU3RyaW5nCisJLy8gZml4RmlsZSwKKwkvLyBTdHJpbmcgdGFyZ2V0RmlsZSwgU3RyaW5nIG91dHB1dERpcikgeworCS8vIC8vIFNldCB2YWx1ZXMgb2YgZ2xvYmFsIHZhcmlhYmxlcy4KKwkvLyB0aGlzLmlzbzMxNjZfMSA9IGlzbzMxNjZfMTsKKwkvLyB0aGlzLmlzbzMxNjZfMiA9IGlzbzMxNjZfMjsKKwkvLyB0aGlzLmZpeEZpbGUgPSBmaXhGaWxlOworCS8vIHRoaXMudGFyZ2V0RmlsZSA9IHRhcmdldEZpbGU7CisJLy8gdGhpcy5vdXRwdXREaXIgPSBvdXRwdXREaXI7CisJLy8gdGFyZ2V0TGlzdCA9IG51bGw7CisJLy8JfQorCisJLyoqCisJICogQHBhcmFtIGNvbmZpZ0ZpbGUKKwkgKi8KKwlwdWJsaWMgQWRtaW4xTGV4U29ydGVyKFN0cmluZyBjb25maWdGaWxlKSB7CisJCisJCS8vIExvYWQgYWxsIGNvbmZpZ3VyYXRpb24gdmFyaWFibGVzCisJCUhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+IHZhcnMgPSBHZW5VdGlscy5sb2FkQ29uZmlnRmlsZShjb25maWdGaWxlKTsKKworCQlTZXQ8U3RyaW5nPiBrZXlzID0gdmFycy5rZXlTZXQoKTsKKwkJSXRlcmF0b3IgaXQgPSBrZXlzLml0ZXJhdG9yKCk7CisJCXdoaWxlIChpdC5oYXNOZXh0KCkpIHsKKwkJCVN0cmluZyB2YXIgPSAoU3RyaW5nKSBpdC5uZXh0KCk7CisKKwkJCS8vIEFzc2lnbiB2YWx1ZXMgdG8gY29uZmlndXJhdGlvbiB2YXJpYWJsZXMgOgorCQkJaWYgKHZhci5lcXVhbHMoIldPUktTUEFDRSIpKSB7IC8vJE5PTi1OTFMtMSQKKwkJCQl3b3Jrc3BhY2UgPSB2YXJzLmdldCh2YXIpOworCQkJfSBlbHNlIGlmICh2YXIuZXF1YWxzKCJJU08zMTY2XzEiKSkgeyAvLyROT04tTkxTLTEkCisJCQkJaXNvMzE2Nl8xID0gdmFycy5nZXQodmFyKTsKKwkJCX0gZWxzZSBpZiAodmFyLmVxdWFscygiSVNPMzE2Nl8yIikpIHsgLy8kTk9OLU5MUy0xJAorCQkJCWlzbzMxNjZfMiA9IHZhcnMuZ2V0KHZhcik7CisJCQl9IGVsc2UgaWYgKHZhci5lcXVhbHMoIklTT19GSVgiKSkgeyAvLyROT04tTkxTLTEkCisJCQkJZml4RmlsZSA9IHZhcnMuZ2V0KHZhcik7CisJCQl9IGVsc2UgaWYgKHZhci5lcXVhbHMoIlRBUkdFVF9MSVNUIikpIHsgLy8kTk9OLU5MUy0xJAorCQkJCXRhcmdldEZpbGUgPSB2YXJzLmdldCh2YXIpOworCQkJfSBlbHNlIGlmICh2YXIuZXF1YWxzKCJQUk9QRVJUSUVTX09VVFBVVCIpKSB7IC8vJE5PTi1OTFMtMSQKKwkJCQlvdXRwdXREaXIgPSB2YXJzLmdldCh2YXIpOworCQkJfQorCisJCX0gLy8gd2hpbGUKKworCQkvLyBUaGUgd29ya3NwYWNlIHZhcmlhYmxlIHNob3VsZCBlbmQgd2l0aCBhIHNsYXNoIGNoYXJhY3RlcgorCQlpZiAod29ya3NwYWNlLmVuZHNXaXRoKCJcXCIpID09IGZhbHNlKSB7IC8vJE5PTi1OTFMtMSQKKwkJCXdvcmtzcGFjZSArPSAiXFwiOyAvLyROT04tTkxTLTEkCisJCX0KKworCQlTdHJpbmcgcGF0aCA9IHdvcmtzcGFjZSArIEdlbkNvbnN0YW50cy5QQVJBTVNfRElSOworCisJCS8vIFNldCByZW1haW5pbmcgY29uZmlnIHZhcnMgdXNpbmcgV09SS1NQQUNFICh3b3Jrc3BhY2UgcmVsYXRpdmUpCisJCWlmIChpc28zMTY2XzEgPT0gbnVsbCkgeworCQkJaXNvMzE2Nl8xID0gcGF0aCArIEdlbkNvbnN0YW50cy5JU08zMTY2XzFfRklMRTsKKwkJfQorCQlpZiAoaXNvMzE2Nl8yID09IG51bGwpIHsKKwkJCWlzbzMxNjZfMiA9IHBhdGggKyBHZW5Db25zdGFudHMuSVNPMzE2Nl8yX0ZJTEU7CisJCX0KKwkJaWYgKGZpeEZpbGUgPT0gbnVsbCkgeworCQkJZml4RmlsZSA9IHBhdGggKyBHZW5Db25zdGFudHMuSVNPRklYX0ZJTEU7CisJCX0KKwkJaWYgKHRhcmdldEZpbGUgPT0gbnVsbCkgeworCQkJdGFyZ2V0RmlsZSA9IHBhdGggKyBHZW5Db25zdGFudHMuQ09VTlRSWV9OQU1FUzsKKwkJfQorCQlpZiAob3V0cHV0RGlyID09IG51bGwpIHsKKwkJCW91dHB1dERpciA9IHBhdGggKyBHZW5Db25zdGFudHMuTEVYX0RJUjsKKwkJfQorCisJCXRhcmdldExpc3QgPSBudWxsOworCisJfQorCisJLyoqCisJICogVGhpcyBtZXRob2Qgc2V0cyB1cCBhbmQgcnVucyB0aGlzIGdlbmVyYXRvci4KKwkgKiAKKwkgKi8KKwlwdWJsaWMgdm9pZCBydW4oKSB7CisJCS8vIFJlYWQgYW5kIGtlZXAgaW4gbWVtb3J5IGEgbGlzdCBvZiB0aGUgY291bnRyaWVzIHdlIHdhbnQuCisJCXRhcmdldExpc3QgPSBHZW5VdGlscy5wb3B1bGF0ZUxpc3QodGFyZ2V0RmlsZSk7CisKKwkJLy8gUmVhZCBhbmQga2VlcCBpbiBtZW1vcnkgYSBsaXN0IG9mIHRoZSBJU08zMTY2LTEgQUxQSEEyLCBBTFBIQTMsIGFuZAorCQkvLyBudW1lcmljIGNvZGVzLgorCQljb2RlTGlzdCA9IEdlblV0aWxzLnBvcHVsYXRlTGlzdChpc28zMTY2XzEpOworCisJCS8vIFJlYWQgYW5kIGtlZXAgaW4gbWVtb3J5IGEgbGlzdCBvZiB0aGUgbWlzc2luZyBJU08zMTY2LTIgY29kZXMKKwkJY29kZWZpeExpc3QgPSBHZW5VdGlscy5wb3B1bGF0ZUxpc3QoZml4RmlsZSk7CisKKwkJLy8gTm93LCBwcm9jZXNzIGVhY2ggaXRlbSBpbiB0aGUgdGFyZ2V0IGxpc3QuCisJCXByb2Nlc3MoKTsKKworCX0KKworCS8qKgorCSAqIFByb2Nlc3Mgb3VyIGdsb2JhbCBsaXN0IG9mIHRhcmdldCBjb3VudHJpZXMuCisJICovCisJcHJvdGVjdGVkIHZvaWQgcHJvY2VzcygpIHsKKworCQkvLyBBIHdyaXRlciBmb3IgdGhlIG5ldyBmaWxlIHdlIGFyZSBjcmVhdGluZy4KKwkJUHJpbnRXcml0ZXIgbGV4RmlsZSA9IG51bGw7CisKKwkJLy8gT2JqZWN0IGhvbGRpbmcgSVNPMzE2Ni0xIHJlbGF0ZWQgZGF0YS4KKwkJSVNPQ29kZTEgaXNvQ29kZSA9IG51bGw7CisKKwkJLy8gTmFtZSBvZiB0aGUgbmV3IHByb3BlcnRpZXMgZmlsZS4KKwkJU3RyaW5nIGZpbGVOYW1lID0gbnVsbDsKKworCQkvLyBBIGxpc3QgZm9yIElTTyAzMTY2LTIgb2JqZWN0cworCQlMaXN0PElTT0NvZGUyPiBpc28yTGlzdCA9IG5ldyBBcnJheUxpc3Q8SVNPQ29kZTI+KCk7CisKKwkJaW50IHNpemUgPSB0YXJnZXRMaXN0LnNpemUoKTsKKworCQkvLyBJdGVyYXRlIGZvciBldmVyeSBjb3VudHJ5CisJCWZvciAoaW50IGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7CisKKwkJCS8vIEdldCB0aGUgbmV4dCBjb3VudHJ5IGluIHRoZSBsaXN0LgorCQkJU3RyaW5nIGNvdW50cnkgPSAoKFN0cmluZykgdGFyZ2V0TGlzdC5nZXQoaSkpLnRyaW0oKTsKKworCQkJU3lzdGVtLm91dAorCQkJCQkucHJpbnRsbigiXHRcdDw8PDwgUHJvY2Vzc2luZyBjb3VudHJ5IDogIiArIGNvdW50cnkgKyAiID4+Pj4iKTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCisKKwkJCS8vIEdldCB0aGUgSVNPMzE2Ni0xIGluZm8gZm9yIHRoaXMgY291bnRyeQorCQkJaWYgKGlzb0NvZGUgPT0gbnVsbCkgeworCQkJCWlzb0NvZGUgPSBHZW5VdGlscy5nZXRJU09Db2RlKGNvdW50cnksIGNvZGVMaXN0KTsKKwkJCX0KKworCQkJaWYgKGlzbzJMaXN0ICE9IG51bGwpIHsKKwkJCQkvLyBMb2FkIHRoZSBJU08gMzE2Ni0yIG9iamVjdHMKKwkJCQlpc28yTGlzdCA9IEdlblV0aWxzLmxvYWRJU08yKGlzbzMxNjZfMiwgaXNvQ29kZS5nZXRBbHBoYTIoKSk7CisJCQl9CisKKwkJCS8vIElmIHRoZSBkaXJlY3RvcnkgZG9lcyBub3QgZXhpc3QgZm9yIHRoaXMgY291bnRyeSwKKwkJCS8vIGNyZWF0ZSBpdCB1c2luZyBJU08gYWxwaGEzIGNvZGUuCisJCQlGaWxlIGNvdW50cnlEaXIgPSBuZXcgRmlsZShvdXRwdXREaXIgKyBpc29Db2RlLmdldEFscGhhMygpKTsKKworCQkJaWYgKGNvdW50cnlEaXIgIT0gbnVsbCAmJiBjb3VudHJ5RGlyLmV4aXN0cygpID09IGZhbHNlKSB7CisJCQkJLy8gRGlyZWN0b3J5IGRvZXMgbm90IGV4aXN0LiBDcmVhdGUgaXQuCisJCQkJY291bnRyeURpci5ta2RpcigpOworCQkJfQorCisJCQkvLyBDcmVhdGUgYW5kIG9wZW4gdGhlIG91dHB1dCBmaWxlLgorCQkJaWYgKGxleEZpbGUgPT0gbnVsbCkgeworCQkJCS8vIENyZWF0ZSB0aGUgZmlsZSBuYW1lCisJCQkJZmlsZU5hbWUgPSBjb3VudHJ5RGlyICsgIlxcIiArIGlzb0NvZGUuZ2V0QWxwaGEzKCkgLy8kTk9OLU5MUy0xJAorCQkJCQkJKyAiX0FETUlOMV9MRVgudHh0IjsgLy8kTk9OLU5MUy0xJAorCQkJCS8vIENyZWF0ZSB0bmUgbmV3IGZpbGUKKwkJCQlsZXhGaWxlID0gR2VuVXRpbHMub3BlbldyaXRlcihmaWxlTmFtZSk7CisJCQl9CisKKwkJCS8vIEV4dHJhY3QgZGVzY3JpcHRvcnMgZnJvbSBJU09fTEVWRUwxX0ZJWCwgY29udmVydCB0aGVtIGludG8KKwkJCS8vIElTT0NvZGUyIGZvcm1hdCwKKwkJCS8vIGFuZCBwdXQgdGhlbSBpbnRvIGEgbGlzdC4KKwkJCUxpc3Q8SVNPQ29kZTI+IGlzb0ZpeExpc3QgPSBHZW5VdGlscy5leHRyYWN0RGVzY3JpcHRvcnMoCisJCQkJCWNvZGVmaXhMaXN0LCBpc29Db2RlKTsKKworCQkJLy8gTm93IGZpbmQgYWxsIHRoZSB1bmlxdWUgZGVzY3JpcHRvcnMgaW4gaXNvRml4RGVzY3JpcHRvcnMgYW5kCisJCQkvLyBpc28yTGlzdC4gT3JkZXIgb2YgcGFyYW1ldGVycyBtYWtlcyBhIGRpZmZlcmVuY2UgaGVyZS4gQWx3YXlzCisJCQkvLyBwYXNzIGZpcnN0IHRoZSBpc29GaXhMaXN0CisJCQlMaXN0PFN0cmluZz4gZGVzY3JpcHRvckxpc3QgPSBnZXRVbmlxdWVEZXNjcmlwdG9ycyhpc29GaXhMaXN0LAorCQkJCQlpc28yTGlzdCk7CisKKwkJCS8vIE5vdywgcnVuIHRoZSBsZXhpY29ncmFwaGljIHNvcnRlciBvbiB0aGUgc2V0IG9mIHVuaXF1ZQorCQkJLy8gZGVzY3JpcHRvcnMuCisJCQlDb2xsZWN0aW9ucy5zb3J0KGRlc2NyaXB0b3JMaXN0KTsKKworCQkJLy8gTm93LCBjcmVhdGUgYSB1bmlmaWVkIGxpc3Qgb2YgSVNPMzE2Ni0yIG9iamVjdHMgYmFzZWQgb24gdGhlCisJCQkvLyBzb3J0ZWQgZGVzY3JpcHRvcnMKKwkJCS8vIFV0aWxMb2dnZXIubG9nSW5mb3JtYXRpb24oIkRlc2NyaXB0b3JzIGJ5IGxleGljb2dyYXBoaWMgb3JkZXJpbmcgOiAiKTsKKworCQkJaW50IGluZGV4ID0gMTsKKwkJCUl0ZXJhdG9yIGl0ID0gZGVzY3JpcHRvckxpc3QuaXRlcmF0b3IoKTsKKwkJCXdoaWxlIChpdC5oYXNOZXh0KCkpIHsKKwkJCQlTdHJpbmcgZGVzYyA9IChTdHJpbmcpIGl0Lm5leHQoKTsKKwkJCQkvLyBEbyBhIGxvb2t1cCBjb3JyZXNwb25kaW5nIHRvIHRoZSBkZXNjcmlwdG9yLgorCQkJCUlTT0NvZGUyIGN1cnJlbnQgPSBHZW5VdGlscy5nZXRJU08yT2JqZWN0KGlzbzJMaXN0LCBkZXNjKTsKKworCQkJCWlmIChjdXJyZW50ID09IG51bGwpIHsKKwkJCQkJLy8gQ29kZSBub3QgZm91bmQgaW4gcmVndWxhciBsaXN0LCBsb29rIGluIGZpeCBsaXN0LgorCQkJCQljdXJyZW50ID0gR2VuVXRpbHMuZ2V0SVNPMk9iamVjdChpc29GaXhMaXN0LCBkZXNjKTsKKwkJCQl9CisKKwkJCQlHZW5VdGlscy5hZGREYXRhKGxleEZpbGUsIFN0cmluZy52YWx1ZU9mKGluZGV4KSArICI6IiAvLyROT04tTkxTLTEkCisJCQkJCQkrIGN1cnJlbnQuZ2V0SWQoKSArICI6IiArIGN1cnJlbnQuZ2V0QWxwaGEyKCkgKyAiOiIgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCisJCQkJCQkrIGN1cnJlbnQuZ2V0TmFtZSgpICsgIlxuIik7IC8vJE5PTi1OTFMtMSQKKwkJCQlpbmRleCsrOworCQkJfQorCisJCQkvLyAvLyBXZSBkb250IG5lZWQgdGhlIElTTyBjb2RlIG9iamVjdCBmb3IgdGhpcyBjb3VudHJ5CisJCQkvLyAvLyBhbnltb3JlLCB3ZSBhcmUgZG9uZSBwcm9jZXNzaW5nIGl0LgorCQkJaXNvQ29kZSA9IG51bGw7CisKKwkJCWlmIChsZXhGaWxlICE9IG51bGwpIHsKKwkJCQlsZXhGaWxlLmNsb3NlKCk7CisJCQkJbGV4RmlsZSA9IG51bGw7CisJCQkJVXRpbExvZ2dlci5sb2dJbmZvcm1hdGlvbigiXHRcdEdlbmVyYXRlZCA6ICIgKyBmaWxlTmFtZSk7IC8vJE5PTi1OTFMtMSQKKwkJCQlmaWxlTmFtZSA9IG51bGw7CisJCQl9CisKKwkJCS8vIFJ1biBnYXJiYWdlIGNvbGxlY3Rpb24KKwkJCS8vU3lzdGVtLmdjKCk7CisKKwkJfSAvLyBmb3IKKworCX0KKworCS8qKgorCSAqIEZpbmQgYWxsIHVuaXF1ZSBkZXNjcmlwdG9ycyBpbiB0aGUgdHdvIGxpc3RzLgorCSAqIAorCSAqIEBwYXJhbSBsaXN0MQorCSAqICAgICAgICAgICAgYSBsaXN0IHdpdGggSVNPIDMxNjYtMiBjb2RlcworCSAqIEBwYXJhbSBsaXN0MgorCSAqICAgICAgICAgICAgYSBkaWZmZXJlbnQgbGlzdCB3aXRoIElTTyAzMTY2LTIgY29kZXMKKwkgKiAKKwkgKiBAcmV0dXJuIGEgbGlzdCB3aXRoIHVuaXF1ZSBkZXNjcmlwdG9ycy4KKwkgKiAKKwkgKi8KKwlwcm90ZWN0ZWQgTGlzdDxTdHJpbmc+IGdldFVuaXF1ZURlc2NyaXB0b3JzKExpc3Q8SVNPQ29kZTI+IGxpc3QxLAorCQkJTGlzdDxJU09Db2RlMj4gbGlzdDIpIHsKKworCQlMaXN0PFN0cmluZz4gZGVzY3JpcHRvclNldCA9IG5ldyBBcnJheUxpc3Q8U3RyaW5nPigpOworCQlMaXN0PFN0cmluZz4gbmFtZVNldCA9IG5ldyBBcnJheUxpc3Q8U3RyaW5nPigpOworCisJCUl0ZXJhdG9yIGl0MSA9IGxpc3QxLml0ZXJhdG9yKCk7CisJCXdoaWxlIChpdDEuaGFzTmV4dCgpKSB7CisJCQlJU09Db2RlMiBjb2RlID0gKElTT0NvZGUyKSBpdDEubmV4dCgpOworCQkJaWYgKGRlc2NyaXB0b3JTZXQuY29udGFpbnMoY29kZS5nZXRJZCgpKSA9PSBmYWxzZSkgeworCQkJCWRlc2NyaXB0b3JTZXQuYWRkKGNvZGUuZ2V0SWQoKSk7CisJCQkJbmFtZVNldC5hZGQoY29kZS5nZXROYW1lKCkpOworCQkJfQorCQl9CisKKwkJSXRlcmF0b3IgaXQyID0gbGlzdDIuaXRlcmF0b3IoKTsKKwkJd2hpbGUgKGl0Mi5oYXNOZXh0KCkpIHsKKwkJCUlTT0NvZGUyIGNvZGUgPSAoSVNPQ29kZTIpIGl0Mi5uZXh0KCk7CisJCQlpZiAoZGVzY3JpcHRvclNldC5jb250YWlucyhjb2RlLmdldElkKCkpID09IGZhbHNlKSB7CisJCQkJZGVzY3JpcHRvclNldC5hZGQoY29kZS5nZXRJZCgpKTsKKwkJCQluYW1lU2V0LmFkZChjb2RlLmdldE5hbWUoKSk7CisJCQl9CisJCX0KKworCQlyZXR1cm4gbmFtZVNldDsKKwl9CisKKwkvKioKKwkgKiBNYWluIGV4ZWN1dGlvbiBlbnRyeSBwb2ludC4KKwkgKiAKKwkgKiBAcGFyYW0gYXJncworCSAqLworCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKKwkJLy8gZmluYWwgaW50IElTT18zMTY2XzEgPSAwOworCQkvLyBmaW5hbCBpbnQgSVNPXzMxNjZfMiA9IDE7CisJCS8vIGZpbmFsIGludCBGSVhfRklMRSA9IDI7CisJCS8vIGZpbmFsIGludCBUQVJHRVRfTElTVCA9IDM7CisJCS8vIGZpbmFsIGludCBPVVRQVVRfRElSID0gNDsKKwkJLy8gZmluYWwgaW50IFBBUkFNUyA9IDU7CisJCS8vCisJCS8vIGlmIChhcmdzLmxlbmd0aCA8IFBBUkFNUykgeworCQkvLyBVdGlsTG9nZ2VyLmxvZ0luZm9ybWF0aW9uKCItLVdyb25nIGFyZ3VtZW50cy0tIik7IC8vJE5PTi1OTFMtMSQKKwkJLy8gU3lzdGVtLm91dAorCQkvLyAucHJpbnRsbigiXHRUbyBydW4sIHBsZWFzZSBwcm92aWRlIHRoZSBmb2xsb3dpbmcgYXJndW1lbnRzIDogIik7CisJCS8vIC8vJE5PTi1OTFMtMSQKKwkJLy8gVXRpbExvZ2dlci5sb2dJbmZvcm1hdGlvbigiXHRcdCBJU08gMzE2Ni0xIGZpbGUiKTsgLy8kTk9OLU5MUy0xJAorCQkvLyBVdGlsTG9nZ2VyLmxvZ0luZm9ybWF0aW9uKCJcdFx0IElTTyAzMTY2LTIgZmlsZSIpOyAvLyROT04tTkxTLTEkCisJCS8vIFV0aWxMb2dnZXIubG9nSW5mb3JtYXRpb24oIlx0XHQgSVNPIGZpeCBmaWxlIik7IC8vJE5PTi1OTFMtMSQKKwkJLy8gVXRpbExvZ2dlci5sb2dJbmZvcm1hdGlvbigiXHRcdCBUYXJnZXQgY291bnRyaWVzIGZpbGUiKTsgLy8kTk9OLU5MUy0xJAorCQkvLyBVdGlsTG9nZ2VyLmxvZ0luZm9ybWF0aW9uKCJcdFx0IE91dHB1dCBkaXJlY3RvcnkiKTsgLy8kTk9OLU5MUy0xJAorCQkvLyByZXR1cm47CisJCS8vIH0KKwkJLy8KKwkJLy8gQWRtaW4xTGV4U29ydGVyIHNvcnRlciA9IG5ldyBBZG1pbjFMZXhTb3J0ZXIoYXJnc1tJU09fMzE2Nl8xXSwKKwkJLy8gYXJnc1tJU09fMzE2Nl8yXSwgYXJnc1tGSVhfRklMRV0sIGFyZ3NbVEFSR0VUX0xJU1RdLAorCQkvLyBhcmdzW09VVFBVVF9ESVJdKTsKKworCQlmaW5hbCBpbnQgQ09ORklHX0ZJTEUgPSAwOworCQlmaW5hbCBpbnQgUEFSQU1TID0gMTsKKworCQlpZiAoYXJncy5sZW5ndGggPCBQQVJBTVMpIHsKKwkJCVV0aWxMb2dnZXIubG9nSW5mb3JtYXRpb24oIlx0XHQtLVdyb25nIGFyZ3VtZW50cy0tIik7IC8vJE5PTi1OTFMtMSQKKwkJCVN5c3RlbS5vdXQKKwkJCQkJLnByaW50bG4oIlx0XHRUbyBydW4sIHBsZWFzZSBwcm92aWRlIHRoZSBmb2xsb3dpbmcgYXJndW1lbnQocykgOiAiKTsgLy8kTk9OLU5MUy0xJAorCQkJVXRpbExvZ2dlci5sb2dJbmZvcm1hdGlvbigiXHRcdFx0IENvbmZpZ3VyYXRpb24gZmlsZSIpOyAvLyROT04tTkxTLTEkCisJCQlTeXN0ZW0uZXhpdCgxKTsKKwkJfQorCisJCUFkbWluMUxleFNvcnRlciBzb3J0ZXIgPSBuZXcgQWRtaW4xTGV4U29ydGVyKGFyZ3NbQ09ORklHX0ZJTEVdKTsKKworCQlzb3J0ZXIucnVuKCk7CisJfQorCit9CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91dGlsaXR5L2dlbmVyYXRvcnMvQWRtaW4yTGV4U29ydGVyLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91dGlsaXR5L2dlbmVyYXRvcnMvQWRtaW4yTGV4U29ydGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWI1ZWFjNQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3NyYy9vcmcvZWNsaXBzZS9zdGVtL3V0aWxpdHkvZ2VuZXJhdG9ycy9BZG1pbjJMZXhTb3J0ZXIuamF2YQpAQCAtMCwwICsxLDQ5NSBAQAorLyoqCisgKiAKKyAqLworcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkuZ2VuZXJhdG9yczsKKworaW1wb3J0IGphdmEuaW8uQnVmZmVyZWRSZWFkZXI7CitpbXBvcnQgamF2YS5pby5GaWxlOworaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247CitpbXBvcnQgamF2YS5pby5QcmludFdyaXRlcjsKK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OworaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uczsKK2ltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKK2ltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CitpbXBvcnQgamF2YS51dGlsLlNldDsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcworICogcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZgorICogdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzCisgKiBhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqIAorICogQ29udHJpYnV0b3JzOiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKgorICogU1RFTSBJSSBEYXRhIE1pZ3JhdGlvbi9HZW5lcmF0aW9uIFV0aWxpdGllcyA6IEluc3RhbmNlcyBvZiB0aGlzIGNsYXNzIHNvcnQKKyAqIGFsbCBsZXZlbCAxIElTTzMxNjYtMiBkZXNjcmlwdG9ycy4gVG8gZG8gc28sIGZpcnN0IGl0IGV4dHJhY3RzIGFsbCB0aGUKKyAqIElTTzMxNjYtMiBkZXNjcmlwdG9ycyB3ZSBoYXZlIGRpc3RyaWJ1dGVkIGluIHRoZSBmb2xsb3dpbmcgdHdvIGZpbGVzOgorICogSVNPMzE2Nl8yX2xpc3QudHh0IGFuZCBJU09fTEVWRUwxX0ZJWC50eHQuIFRoZSBvdXRwdXQgaXMgd3JpdHRlbiBpbnRvIGEKKyAqIHNlbWljb2xvbiBzZXBhcmF0ZWQgZm9ybWF0IG9mIHRoZSBmb3JtOgorICogCisgKiBDT1VOVFJZOkFMUEhBMjpYWC1ZWTpOQU1FOklOREVYCisgKiAKKyAqIFRoaXMgb3V0cHV0IHdpbGwgYmUgdXNlZCBkdXJpbmcgZ2VuZXJhdGlvbiBvZiB0aGUgbGV2ZWwgMiBkZXNjcmlwdG9ycyBhbmQKKyAqIGR1cmluZyBnZW5lcmF0aW9uIG9mIHRoZSByZWxhdGlvbnNoaXAgZmlsZXMuCisgKiAKKyAqIFRvIGNvbmZpZ3VyZSwgc2VlIGNvbmZpZ3VyYXRpb24gZmlsZSA6CisgKiBvcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvY29uZmlndXJhdGlvbi9BZG1pbjJMZXhTb3J0ZXIuY29uZmlnCisgKiAKKyAqIAorICogVG8gcnVuLCBhZGQgcGF0aCB0byBjb25maWd1cmF0aW9uIGZpbGUgaW4gdGhlIHJ1biBwcm9maWxlIChpLmUuCisgKiBDOlxzdGVtSUlcb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5XGNvbmZpZ3VyYXRpb25cQWRtaW4yTGV4U29ydGVyLmNvbmZpZykKKyAqIAorICogCisgKi8KK3B1YmxpYyBjbGFzcyBBZG1pbjJMZXhTb3J0ZXIgeworCisJLyoqCisJICogT3VyIHNvdXJjZSBmaWxlcyBmb3IgSVNPIDMxNjYtMSBjb2RlcyBhbmQgZm9yIHRoZSBsaXN0IG9mIHRhcmdldAorCSAqIGNvdW50cmllcy4KKwkgKi8KKwlwcml2YXRlIFN0cmluZyBpc28zMTY2XzEgPSBudWxsOworCisJcHJpdmF0ZSBTdHJpbmcgdGFyZ2V0RmlsZSA9IG51bGw7CisKKwlwcml2YXRlIFN0cmluZyBvdXRwdXREaXIgPSBudWxsOworCisJcHJpdmF0ZSBTdHJpbmcgd29ya3NwYWNlID0gbnVsbDsKKworCS8qKgorCSAqIExpc3QgZm9yIElTTyAzMTY2LTEgY29kZXMgYW5kIHRhcmdldCBjb3VudHJpZXMuCisJICovCisKKwlMaXN0IHRhcmdldExpc3QgPSBudWxsOworCisJTGlzdCBjb2RlTGlzdCA9IG51bGw7CisKKwkvKioKKwkgKiBIYXNoIG1hcCBmb3IgZGVhbGluZyB3aXRoCisJICovCisJSGFzaE1hcDxTdHJpbmcsIExpc3Q8U3RyaW5nPj4gYWRtaW5EYXRhID0gbnVsbDsKKworCS8qKgorCSAqIENvbnN0cnVjdG9yCisJICogCisJICogQHBhcmFtIGlzbzMxNjZfMSAtCisJICogICAgICAgICAgICBkYXRhIGZpbGUgd2l0aCB0aGUgSVNPMzE2Ni0xIEFMUEhBXzIgYW5kIEFMUEhBXzMgY29kZXMuCisJICogQHBhcmFtIHRhcmdldEZpbGUgLQorCSAqICAgICAgICAgICAgZGF0YSBmaWxlIHdoZXJlIHdlIGZpbmQgYSBsaXN0IG9mIGNvdW50cmllcyBmb3IgZ2VuZXJhdGlvbiBvZgorCSAqICAgICAgICAgICAgdGhlaXIgY29ycmVzcG9uZGluZyBhcmVhLnByb3BlcnRpZXMgZmlsZXMuCisJICogQHBhcmFtIG91dHB1dERpciAtCisJICogICAgICAgICAgICB0aGUgb3V0cHV0IGRpcmVjdG9yeSBmb3IgdGhlIGZpbGVzIGdlbmVyYXRlZC4KKwkgKiAKKwkgKi8KKwkvLyBwdWJsaWMgQWRtaW4yTGV4U29ydGVyKFN0cmluZyBpc28zMTY2XzEsIFN0cmluZyB0YXJnZXRGaWxlLCBTdHJpbmcKKwkvLyBvdXRwdXREaXIpIHsKKwkvLyAvLyBTZXQgdmFsdWVzIG9mIGdsb2JhbCB2YXJpYWJsZXMuCisJLy8gdGhpcy5pc28zMTY2XzEgPSBpc28zMTY2XzE7CisJLy8gdGhpcy50YXJnZXRGaWxlID0gdGFyZ2V0RmlsZTsKKwkvLyB0aGlzLm91dHB1dERpciA9IG91dHB1dERpcjsKKwkvLyB0YXJnZXRMaXN0ID0gbnVsbDsKKwkvLyBhZG1pbkRhdGEgPSBuZXcgSGFzaE1hcDxTdHJpbmcsIExpc3Q8U3RyaW5nPj4oKTsKKwkvLyB9CisKKwkvKioKKwkgKiBAcGFyYW0gY29uZmlnRmlsZQorCSAqLworCXB1YmxpYyBBZG1pbjJMZXhTb3J0ZXIoU3RyaW5nIGNvbmZpZ0ZpbGUpIHsKKworCQkvLyBMb2FkIGFsbCBjb25maWd1cmF0aW9uIHZhcmlhYmxlcworCQlIYXNoTWFwPFN0cmluZywgU3RyaW5nPiB2YXJzID0gR2VuVXRpbHMubG9hZENvbmZpZ0ZpbGUoY29uZmlnRmlsZSk7CisKKwkJU2V0PFN0cmluZz4ga2V5cyA9IHZhcnMua2V5U2V0KCk7CisJCUl0ZXJhdG9yIGl0ID0ga2V5cy5pdGVyYXRvcigpOworCQl3aGlsZSAoaXQuaGFzTmV4dCgpKSB7CisJCQlTdHJpbmcgdmFyID0gKFN0cmluZykgaXQubmV4dCgpOworCisJCQkvLyBBc3NpZ24gdmFsdWVzIHRvIGNvbmZpZ3VyYXRpb24gdmFyaWFibGVzIDoKKwkJCWlmICh2YXIuZXF1YWxzKCJXT1JLU1BBQ0UiKSkgeyAvLyROT04tTkxTLTEkCisJCQkJd29ya3NwYWNlID0gdmFycy5nZXQodmFyKTsKKwkJCX0gZWxzZSBpZiAodmFyLmVxdWFscygiSVNPMzE2Nl8xIikpIHsgLy8kTk9OLU5MUy0xJAorCQkJCWlzbzMxNjZfMSA9IHZhcnMuZ2V0KHZhcik7CisJCQl9IGVsc2UgaWYgKHZhci5lcXVhbHMoIlRBUkdFVF9MSVNUIikpIHsgLy8kTk9OLU5MUy0xJAorCQkJCXRhcmdldEZpbGUgPSB2YXJzLmdldCh2YXIpOworCQkJfSBlbHNlIGlmICh2YXIuZXF1YWxzKCJQUk9QRVJUSUVTX09VVFBVVCIpKSB7IC8vJE5PTi1OTFMtMSQKKwkJCQlvdXRwdXREaXIgPSB2YXJzLmdldCh2YXIpOworCQkJfQorCisJCX0gLy8gd2hpbGUKKworCQkvLyBUaGUgd29ya3NwYWNlIHZhcmlhYmxlIHNob3VsZCBlbmQgd2l0aCBhIHNsYXNoIGNoYXJhY3RlcgorCQlpZiAod29ya3NwYWNlLmVuZHNXaXRoKCJcXCIpID09IGZhbHNlKSB7IC8vJE5PTi1OTFMtMSQKKwkJCXdvcmtzcGFjZSArPSAiXFwiOyAvLyROT04tTkxTLTEkCisJCX0KKworCQlTdHJpbmcgcGF0aCA9IHdvcmtzcGFjZSArIEdlbkNvbnN0YW50cy5QQVJBTVNfRElSOworCisJCS8vIFNldCByZW1haW5pbmcgY29uZmlnIHZhcnMgdXNpbmcgV09SS1NQQUNFICh3b3Jrc3BhY2UgcmVsYXRpdmUpCisJCWlmIChpc28zMTY2XzEgPT0gbnVsbCkgeworCQkJaXNvMzE2Nl8xID0gcGF0aCArIEdlbkNvbnN0YW50cy5JU08zMTY2XzFfRklMRTsKKwkJfQorCQlpZiAodGFyZ2V0RmlsZSA9PSBudWxsKSB7CisJCQl0YXJnZXRGaWxlID0gcGF0aCArIEdlbkNvbnN0YW50cy5DT1VOVFJJRVNfTElTVDsKKwkJfQorCQlpZiAob3V0cHV0RGlyID09IG51bGwpIHsKKwkJCW91dHB1dERpciA9IHBhdGggKyBHZW5Db25zdGFudHMuTEVYX0RJUjsKKwkJfQorCisJCXRhcmdldExpc3QgPSBudWxsOworCQlhZG1pbkRhdGEgPSBuZXcgSGFzaE1hcDxTdHJpbmcsIExpc3Q8U3RyaW5nPj4oKTsKKworCX0KKworCS8qKgorCSAqIFRoaXMgbWV0aG9kIHNldHMgdXAgYW5kIHJ1bnMgdGhpcyBnZW5lcmF0b3IuCisJICogCisJICovCisJcHVibGljIHZvaWQgcnVuKCkgeworCQkvLyBSZWFkIGFuZCBrZWVwIGluIG1lbW9yeSBhIGxpc3Qgb2YgdGhlIGNvdW50cmllcyB3ZSB3YW50LgorCQl0YXJnZXRMaXN0ID0gR2VuVXRpbHMucG9wdWxhdGVMaXN0KHRhcmdldEZpbGUpOworCisJCS8vIFJlYWQgYW5kIGtlZXAgaW4gbWVtb3J5IGEgbGlzdCBvZiB0aGUgSVNPMzE2Ni0xIEFMUEhBMiwgQUxQSEEzLCBhbmQKKwkJLy8gbnVtZXJpYyBjb2Rlcy4KKwkJY29kZUxpc3QgPSBHZW5VdGlscy5wb3B1bGF0ZUxpc3QoaXNvMzE2Nl8xKTsKKworCQkvLyBDb2xsZWN0IGFsbCBsZXZlbCAyIGRhdGEsIHNvcnQgaXQgYW5kIHN0b3JlIHRoZSByZXN1bHQuCisJCXByb2Nlc3MoKTsKKworCQkvLyBOb3csIHByaW50IHRoZSByZXN1bHQuCisJCXByaW50U29ydGVkU2VxdWVuY2VzKCk7CisKKwl9CisKKwkvKioKKwkgKiBDb2xsZWN0IGFsbCBsZXZlbCAyIGFkbWluaXN0cmF0aW9uIGRhdGEgYW5kIGl0cyBjb250YWlubWVudCByZWxhdGlvbnNoaXAKKwkgKiB0byBsZXZlbCAxIGRhdGEuIFNvcnQgdGhlIGNvbGxlY3Rpb25zIGxleGljb2dyYXBoaWNhbGx5IGFuZCBzdG9yZSB0aGUKKwkgKiByZXN1bHQgZm9yIGVhY2ggY291bnRyeS4KKwkgKiAKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBwcm9jZXNzKCkgeworCisJCS8vIEEgd3JpdGVyIGZvciB0aGUgbmV3IGZpbGUgd2UgYXJlIGNyZWF0aW5nLgorCQlQcmludFdyaXRlciBsZXhGaWxlID0gbnVsbDsKKworCQkvLyBPYmplY3QgaG9sZGluZyBJU08zMTY2LTEgcmVsYXRlZCBkYXRhLgorCQlJU09Db2RlMSBpc29Db2RlID0gbnVsbDsKKworCQkvLyBOYW1lIG9mIHRoZSBuZXcgcHJvcGVydGllcyBmaWxlLgorCQlTdHJpbmcgZmlsZU5hbWUgPSBudWxsOworCisJCWludCBzaXplID0gdGFyZ2V0TGlzdC5zaXplKCk7CisKKwkJLy8gRm9yIGV2ZXJ5IGNvdW50cnkKKwkJZm9yIChpbnQgaSA9IDA7IGkgPCBzaXplOyBpKyspIHsKKworCQkJLy8gR2V0IHRoZSBuZXh0IGNvdW50cnkgaW4gdGhlIGxpc3QuCisJCQlTdHJpbmcgZmlsZSA9ICgoU3RyaW5nKSB0YXJnZXRMaXN0LmdldChpKSkudHJpbSgpOworCisJCQkvLyBHZXQgdGhlIGxldmVsIDIgZGF0YSB3ZSBuZWVkIDoKKwkJCVN0cmluZyBhZG1pbjEgPSBudWxsOworCQkJU3RyaW5nIGFkbWluMiA9IG51bGw7CisKKwkJCS8vIEFuIGluZGV4IGZvciB1bmtud29uIG9yIG4uYS4gZW50cmllcworCQkJaW50IHVua0NvdW50ZXIgPSAxOworCisJCQkvLyBPcGVuIHRoZSBkYXRhIHNvdXJjZSBmaWxlIGZvciB0aGlzIGNvdW50cnkuCisJCQlCdWZmZXJlZFJlYWRlciByZWFkZXIgPSBHZW5VdGlscy5vcGVuUmVhZGVyKGZpbGUpOworCQkJU3lzdGVtLm91dAorCQkJCQkucHJpbnRsbigiXHRcdDw8PDwgUHJvY2Vzc2luZyBjb3VudHJ5IDogIiArIGZpbGUgKyAiID4+Pj4iKTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCisJCQl0cnkgeworCisJCQkJaWYgKHJlYWRlciAhPSBudWxsKSB7CisKKwkJCQkJU3RyaW5nIGJ1ZmZlciA9IG51bGw7CisJCQkJCS8vIERlc2NyaWJlcyBsZXZlbAorCQkJCQkvLyBvZiBkYXRhIHdlCisJCQkJCS8vIGFyZSBub3cgcHJvY2Vzc2luZyA6IExFVkVMMCwgTEVWRUwxLCBvciBMRVZFTDIuCisJCQkJCWludCBsZXZlbCA9IC0xOworCQkJCQkvLyBSZWNvcmQgdGhlIHByZXZpb3VzIGxldmVsLgorCQkJCQlpbnQgb2xkbGV2ZWwgPSBsZXZlbCAtIDE7CisJCQkJCS8vIFdlIHRha2UgYSBjaHVuayBvZiB0aGUgZGF0YSBbQlVGRkVSX01JTixCVUZGRVJfTUFYXSB0bworCQkJCQkvLyBtYWtlIHByb2Nlc3NpbmcgbW9yZQorCQkJCQkvLyBlZmZpY2llbnQsIHdlIGRvbnQgbmVlZCBhbGwgb2YgaXQuCisJCQkJCWludCBCVUZGRVJfTUlOID0gMDsKKwkJCQkJaW50IEJVRkZFUl9NQVggPSAxMjA7CisKKwkJCQkJTGlzdDxTdHJpbmc+IGVudHJ5TGlzdCA9IG51bGw7CisKKwkJCQkJd2hpbGUgKEdlblV0aWxzLkVPRihidWZmZXIgPSByZWFkZXIucmVhZExpbmUoKSkgIT0gdHJ1ZSkgeworCisJCQkJCQkvLyBNYWtlIHN1cmUgdGhhdCB3ZSBtYXJrIGFsbCB1bmtub3duIGRhdGEuCisJCQkJCQlidWZmZXIgPSBidWZmZXIucmVwbGFjZSgiLCwiLCAiLFVOS05PV04sIik7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAorCisJCQkJCQlTdHJpbmdbXSBpdGVtcyA9IEdlblV0aWxzCisJCQkJCQkJCS5leHRyYWN0KGJ1ZmZlci5sZW5ndGgoKSA8IEJVRkZFUl9NQVggPyBidWZmZXIKKwkJCQkJCQkJCQk6IGJ1ZmZlci5zdWJzdHJpbmcoQlVGRkVSX01JTiwKKwkJCQkJCQkJCQkJCUJVRkZFUl9NQVgpKTsKKworCQkJCQkJLy8gR2V0IHRoZSBJU08zMTY2LTEgaW5mbyBmb3IgdGhpcyBjb3VudHJ5CisJCQkJCQlpZiAoaXNvQ29kZSA9PSBudWxsKSB7CisJCQkJCQkJaXNvQ29kZSA9IEdlblV0aWxzLmdldElTT0NvZGUoCisJCQkJCQkJCQlpdGVtc1tJU09EYXRhLkNPVU5UUllfTkFNRV0sIGNvZGVMaXN0KTsKKwkJCQkJCX0KKworCQkJCQkJLy8gR2V0IHRoZSBsZXZlbCBvZiB0aGUgZGF0YSB3ZSBhcmUgcHJvY2Vzc2luZy4KKwkJCQkJCWxldmVsID0gR2VuVXRpbHMuZ2V0RGF0YUxldmVsKGl0ZW1zKTsKKworCQkJCQkJLy8gSWYgdGhlIGRpcmVjdG9yeSBkb2VzIG5vdCBleGlzdCBmb3IgdGhpcyBjb3VudHJ5LAorCQkJCQkJLy8gY3JlYXRlIGl0IHVzaW5nIElTTyBhbHBoYTMgY29kZS4KKwkJCQkJCUZpbGUgY291bnRyeURpciA9IG5ldyBGaWxlKG91dHB1dERpcgorCQkJCQkJCQkrIGlzb0NvZGUuZ2V0QWxwaGEzKCkpOworCisJCQkJCQlpZiAoY291bnRyeURpciAhPSBudWxsICYmIGNvdW50cnlEaXIuZXhpc3RzKCkgPT0gZmFsc2UpIHsKKwkJCQkJCQkvLyBEaXJlY3RvcnkgZG9lcyBub3QgZXhpc3QuIENyZWF0ZSBpdC4KKwkJCQkJCQljb3VudHJ5RGlyLm1rZGlyKCk7CisJCQkJCQl9CisKKwkJCQkJCS8vIENyZWF0ZSBhbmQgb3BlbiB0aGUgbmV3IGZpbGUuCisJCQkJCQlpZiAobGV4RmlsZSA9PSBudWxsKSB7CisJCQkJCQkJLy8gQ3JlYXRlIHRoZSBmaWxlIG5hbWUKKwkJCQkJCQlmaWxlTmFtZSA9IGNvdW50cnlEaXIgKyAiXFwiICsgaXNvQ29kZS5nZXRBbHBoYTMoKSAvLyROT04tTkxTLTEkCisJCQkJCQkJCQkrICJfQURNSU4yX0xFWC50eHQiOyAvLyROT04tTkxTLTEkCisJCQkJCQkJLy8gQ3JlYXRlIHRuZSBuZXcgZmlsZQorCQkJCQkJCWxleEZpbGUgPSBHZW5VdGlscy5vcGVuV3JpdGVyKGZpbGVOYW1lKTsKKwkJCQkJCX0KKworCQkJCQkJLy8gVGhpcyB2YXJpYWJsZSBpbmRpY2F0ZXMgYSB0cmFuc2l0aW9uIGluIG91ciBkYXRhCisJCQkJCQkvLyBwcm9jZXNzaW5nCisJCQkJCQlib29sZWFuIHRyYW5zaXRpb24gPSAobGV2ZWwgIT0gb2xkbGV2ZWwpID8gdHJ1ZSA6IGZhbHNlOworCisJCQkJCQkvLyBXZSBoYXZlIHN3aXRjaGVkIHRvIGEgZGlmZmVyZW50IGRhdGEgbGV2ZWwgKGksZSwKKwkJCQkJCS8vIGFkbWluIDAgdG8gYWRtaW4gMSkKKwkJCQkJCWlmICh0cmFuc2l0aW9uID09IHRydWUpIHsKKwkJCQkJCQlvbGRsZXZlbCA9IGxldmVsOworCQkJCQkJCS8vIFJlc2V0IG91ciByZXBlYXRlZCBoaXN0b3J5CisJCQkJCQkJLy8gcmVwZWF0ZWRFbnRyaWVzID0gbmV3IFN0cmluZygpOworCQkJCQkJCWVudHJ5TGlzdCA9IG5ldyBBcnJheUxpc3Q8U3RyaW5nPigpOworCQkJCQkJfQorCisJCQkJCQkvLyBJZ25vcmUgYWxsIGRhdGEgdGhhdCBpcyBub3QgbGV2ZWwgMi4KKwkJCQkJCWlmIChsZXZlbCA9PSBEYXRhVHlwZXMuTEVWRUxfMAorCQkJCQkJCQl8fCBsZXZlbCA9PSBEYXRhVHlwZXMuTEVWRUxfMSkgeworCQkJCQkJCWNvbnRpbnVlOworCQkJCQkJfQorCisJCQkJCQkvLyBHZXQgdGhlIGxldmVsIDIgZGF0YSB3ZSBuZWVkIDoKKwkJCQkJCWFkbWluMSA9IGl0ZW1zW0lTT0RhdGEuQURNSU4xX05BTUVdOworCQkJCQkJYWRtaW4yID0gaXRlbXNbSVNPRGF0YS5BRE1JTjJfTkFNRV07CisKKwkJCQkJCS8vIElmIGVudGl0eSBpcyBVTktPV04gb3IgTi5BLiBoYW5kbGUgaXQgcHJvcGVybHkuCisJCQkJCQlpZiAoYWRtaW4yLmVxdWFscygiVU5LTk9XTiIpIHx8IGFkbWluMi5lcXVhbHMoIk4uQS4iKSkgeyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKKwkJCQkJCQlhZG1pbjIgPSBpc29Db2RlLmdldEFscGhhMygpICsgIi5MMi4iIC8vJE5PTi1OTFMtMSQKKwkJCQkJCQkJCSsgU3RyaW5nLnZhbHVlT2YodW5rQ291bnRlcisrKTsKKwkJCQkJCX0KKworCQkJCQkJLy8gTWFrZSBzdXJlIHRoaXMgaXMgbm90IGEgcmVwZWF0ZWQgZW50cnkuCisJCQkJCQlpZiAoR2VuVXRpbHMuaXNSZXBlYXRlZChhZG1pbjEgKyBhZG1pbjIsIGVudHJ5TGlzdCkgPT0gdHJ1ZSkgeworCQkJCQkJCWNvbnRpbnVlOworCQkJCQkJfQorCisJCQkJCQkvLyBSZW1lbWJlciB0aGlzIGVudGl0eSB0byBhdm9pZCBkdXBsaWNhdGVzLgorCQkJCQkJZW50cnlMaXN0LmFkZChhZG1pbjEgKyBhZG1pbjIpOworCisJCQkJCQlpZiAoYWRtaW5EYXRhLmdldChhZG1pbjEpID09IG51bGwpIHsKKwkJCQkJCQkvLyBDcmVhdGUgYSBuZXcgQXJyYXlMaXN0IG9mIGFkbWluaXN0cmF0aW9uIDIKKwkJCQkJCQkvLyBvYmplY3RzIGZvciBldmVyeSBsZXZlbCAxIGxvY2F0aW9uLgorCQkJCQkJCUxpc3Q8U3RyaW5nPiBhZG1pbjJMaXN0ID0gbmV3IEFycmF5TGlzdDxTdHJpbmc+KCk7CisJCQkJCQkJYWRtaW4yTGlzdC5hZGQoYWRtaW4yKTsKKwkJCQkJCQlhZG1pbkRhdGEucHV0KGFkbWluMSwgYWRtaW4yTGlzdCk7CisJCQkJCQl9IGVsc2UgeworCQkJCQkJCUxpc3Q8U3RyaW5nPiBhZG1pbjJMaXN0ID0gYWRtaW5EYXRhLmdldChhZG1pbjEpOworCQkJCQkJCWlmIChhZG1pbjJMaXN0ID09IG51bGwpIHsKKwkJCQkJCQkJYWRtaW4yTGlzdCA9IG5ldyBBcnJheUxpc3Q8U3RyaW5nPigpOworCQkJCQkJCX0KKwkJCQkJCQlhZG1pbjJMaXN0LmFkZChhZG1pbjIpOworCQkJCQkJCWFkbWluRGF0YS5wdXQoYWRtaW4xLCBhZG1pbjJMaXN0KTsKKwkJCQkJCX0KKworCQkJCQl9Ly8gd2hpbGUKKworCQkJCQlpZiAoYWRtaW5EYXRhID09IG51bGwpIHsKKwkJCQkJCWNvbnRpbnVlOworCQkJCQl9CisKKwkJCQkJU2V0PFN0cmluZz4ga2V5cyA9IGFkbWluRGF0YS5rZXlTZXQoKTsKKwkJCQkJSXRlcmF0b3IgaXQgPSBrZXlzLml0ZXJhdG9yKCk7CisKKwkJCQkJLy8gU29ydCBldmVyeSBsaXN0LgorCQkJCQl3aGlsZSAoaXQuaGFzTmV4dCgpKSB7CisJCQkJCQlMaXN0PFN0cmluZz4gYWRtaW4yTGlzdCA9IGFkbWluRGF0YS5nZXQoaXQubmV4dCgpKTsKKwkJCQkJCUNvbGxlY3Rpb25zLnNvcnQoYWRtaW4yTGlzdCk7CisJCQkJCX0KKworCQkJCQlTeXN0ZW0ub3V0CisJCQkJCQkJLnByaW50bG4oIlx0XHREZXNjcmlwdG9ycyBieSBsZXhpY29ncmFwaGljIG9yZGVyaW5nIDogIik7IC8vJE5PTi1OTFMtMSQKKworCQkJCQlTZXQ8U3RyaW5nPiBrZXlzZXQgPSBhZG1pbkRhdGEua2V5U2V0KCk7CisJCQkJCUl0ZXJhdG9yIGl0MSA9IGtleXNldC5pdGVyYXRvcigpOworCisJCQkJCXdoaWxlIChpdDEuaGFzTmV4dCgpKSB7CisKKwkJCQkJCWFkbWluMSA9IChTdHJpbmcpIGl0MS5uZXh0KCk7CisKKwkJCQkJCS8vIGFkbWluMSBpcyB0aGUga2V5IGluIG91ciBIYXNoTWFwLgorCQkJCQkJTGlzdDxTdHJpbmc+IGFkbWluMkxpc3QgPSBhZG1pbkRhdGEuZ2V0KGFkbWluMSk7CisKKwkJCQkJCUl0ZXJhdG9yIGl0MiA9IGFkbWluMkxpc3QuaXRlcmF0b3IoKTsKKworCQkJCQkJaW50IGluZGV4ID0gMTsKKworCQkJCQkJVXRpbExvZ2dlci5sb2dJbmZvcm1hdGlvbigiXHRcdEFkbWluIDEgPSAiICsgYWRtaW4xKTsgLy8kTk9OLU5MUy0xJAorCisJCQkJCQl3aGlsZSAoaXQyLmhhc05leHQoKSkgeworCisJCQkJCQkJYWRtaW4yID0gKFN0cmluZykgaXQyLm5leHQoKTsKKwkJCQkJCQlVdGlsTG9nZ2VyLmxvZ0luZm9ybWF0aW9uKCJcdFx0QXQgOiAiICsgaW5kZXggLy8kTk9OLU5MUy0xJAorCQkJCQkJCQkJKyAiIC0tIGFkbWluMiBpcyA6ICIgKyBhZG1pbjIpOyAvLyROT04tTkxTLTEkCisKKwkJCQkJCQlHZW5VdGlscy5hZGREYXRhKGxleEZpbGUsIFN0cmluZy52YWx1ZU9mKGluZGV4KQorCQkJCQkJCQkJKyAiOiIgKyBpc29Db2RlLmdldEFscGhhMigpICsgIjoiIC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAorCQkJCQkJCQkJKyBpc29Db2RlLmdldEFscGhhMygpICsgIjoiIC8vJE5PTi1OTFMtMSQKKwkJCQkJCQkJCSsgaXNvQ29kZS5nZXROYW1lKCkgKyAiOiIgKyBhZG1pbjEgKyAiOiIgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCisJCQkJCQkJCQkrIGFkbWluMiArICJcbiIpOyAvLyROT04tTkxTLTEkCisJCQkJCQkJaW5kZXgrKzsKKworCQkJCQkJfQorCisJCQkJCX0KKworCQkJCQlhZG1pbkRhdGEuY2xlYXIoKTsKKworCQkJCQkvLyBXZSBkb250IG5lZWQgdGhlIElTTyBjb2RlIG9iamVjdCBmb3IgdGhpcyBjb3VudHJ5CisJCQkJCS8vIGFueW1vcmUsIHdlIGFyZSBkb25lIHByb2Nlc3NpbmcgaXQuCisJCQkJCWlzb0NvZGUgPSBudWxsOworCisJCQkJCS8vIENsb3NlIGFsbCBvcGVuIHJlc291cmNlcy4KKwkJCQkJcmVhZGVyLmNsb3NlKCk7CisKKwkJCQkJaWYgKGxleEZpbGUgIT0gbnVsbCkgeworCQkJCQkJbGV4RmlsZS5jbG9zZSgpOworCQkJCQkJbGV4RmlsZSA9IG51bGw7CisJCQkJCQlVdGlsTG9nZ2VyLmxvZ0luZm9ybWF0aW9uKCJcdFx0R2VuZXJhdGVkIDogIiArIGZpbGVOYW1lKTsgLy8kTk9OLU5MUy0xJAorCQkJCQkJZmlsZU5hbWUgPSBudWxsOworCQkJCQl9CisKKwkJCQkJLy8gUnVuIGdhcmJhZ2UgY29sbGVjdGlvbgorCQkJCQkvL1N5c3RlbS5nYygpOworCQkJCX0KKworCQkJfSBjYXRjaCAoSU9FeGNlcHRpb24gZSkgeworCQkJCWUucHJpbnRTdGFja1RyYWNlKCk7CisJCQl9CisKKwkJfSAvLyBmb3IKKworCX0KKworCS8qKgorCSAqIENvbGxlY3QgYWxsIGxldmVsIDIgYWRtaW5pc3RyYXRpb24gZGF0YSwgc29ydCBpdCBsZXhpY29ncmFwaGljYWxseSBhbmQKKwkgKiBzdG9yZSB0aGUgcmVzdWx0LgorCSAqLworCXByb3RlY3RlZCB2b2lkIHByaW50U29ydGVkU2VxdWVuY2VzKCkgeworCisJCVV0aWxMb2dnZXIubG9nSW5mb3JtYXRpb24oIlx0XHREZXNjcmlwdG9ycyBieSBsZXhpY29ncmFwaGljIG9yZGVyaW5nIDogIik7IC8vJE5PTi1OTFMtMSQKKworCQlpZiAoYWRtaW5EYXRhID09IG51bGwpIHsKKwkJCXJldHVybjsKKwkJfQorCQlTZXQ8U3RyaW5nPiBrZXlzID0gYWRtaW5EYXRhLmtleVNldCgpOworCQlJdGVyYXRvciBpdDEgPSBrZXlzLml0ZXJhdG9yKCk7CisKKwkJd2hpbGUgKGl0MS5oYXNOZXh0KCkpIHsKKworCQkJU3RyaW5nIGFkbWluMSA9IChTdHJpbmcpIGl0MS5uZXh0KCk7CisKKwkJCUxpc3Q8U3RyaW5nPiBhZG1pbjJMaXN0ID0gYWRtaW5EYXRhLmdldChhZG1pbjEpOworCisJCQlJdGVyYXRvciBpdDIgPSBhZG1pbjJMaXN0Lml0ZXJhdG9yKCk7CisKKwkJCWludCBpbmRleCA9IDE7CisKKwkJCVV0aWxMb2dnZXIubG9nSW5mb3JtYXRpb24oIlx0XHRBZG1pbiAxID0gIiArIGFkbWluMSk7IC8vJE5PTi1OTFMtMSQKKworCQkJd2hpbGUgKGl0Mi5oYXNOZXh0KCkpIHsKKwkJCQlVdGlsTG9nZ2VyLmxvZ0luZm9ybWF0aW9uKCJcdFx0QXQgOiAiICsgaW5kZXgrKyArICIgLS0gYWRtaW4yIGlzIDogIiAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKKwkJCQkJCSsgaXQyLm5leHQoKSk7CisJCQl9CisKKwkJfQorCisJfQorCisJLyoqCisJICogRmluZCBhbiBlbnRyeSBpbiB0aGUgbGV4aWNvZ3JhcGhpY2FsbHkgc29ydGVkIGxpc3QgYW5kIGdldCBpdHMgaW5kZXguCisJICogCisJICogQHBhcmFtIGxpc3QKKwkgKiAgICAgICAgICAgIGEgbGlzdCBvZiBzdHJpbmdzLgorCSAqIEBwYXJhbSBlbnRyeQorCSAqICAgICAgICAgICAgdGhlIGVudHJ5IHdlIHdhbnQgdG8gZmluZCBpbiB0aGUgbGlzdC4KKwkgKiAKKwkgKiBAcmV0dXJuIHRoZSBpbmRleCBvZiB0aGUgZW50cnkgaW4gdGhlIHNvcnRlZCBsaXN0IChpZiBmb3VuZCkuCisJICovCisJcHJvdGVjdGVkIGludCBpbmRleExvb2t1cChMaXN0PFN0cmluZz4gbGlzdCwgU3RyaW5nIGVudHJ5KSB7CisKKwkJaW50IGluZGV4ID0gMTsKKwkJSXRlcmF0b3IgaXQgPSBsaXN0Lml0ZXJhdG9yKCk7CisKKwkJd2hpbGUgKGl0Lmhhc05leHQoKSkgeworCQkJU3RyaW5nIGN1cnJlbnQgPSAoU3RyaW5nKSBpdC5uZXh0KCk7CisJCQlpZiAoY3VycmVudC50b1VwcGVyQ2FzZSgpLmVxdWFscyhlbnRyeS50b1VwcGVyQ2FzZSgpKSkgeworCQkJCXJldHVybiBpbmRleDsKKwkJCX0KKwkJCWluZGV4Kys7CisJCX0KKwkJLy8gTm90IGZvdW5kLgorCQlVdGlsTG9nZ2VyLmxvZ0luZm9ybWF0aW9uKCJcdFx0aW5kZXhMb29rdXAgOiBlbnRyeSBub3QgZm91bmQgZm9yICIgKyBlbnRyeSk7IC8vJE5PTi1OTFMtMSQKKwkJcmV0dXJuIC0xOworCX0KKworCS8qKgorCSAqIE1haW4gZXhlY3V0aW9uIGVudHJ5IHBvaW50LgorCSAqIAorCSAqIEBwYXJhbSBhcmdzCisJICovCisJcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgeworCQkvLyBmaW5hbCBpbnQgSVNPXzMxNjZfMSA9IDA7CisJCS8vIGZpbmFsIGludCBUQVJHRVRfTElTVCA9IDE7CisJCS8vIGZpbmFsIGludCBPVVRQVVRfRElSID0gMjsKKwkJLy8gZmluYWwgaW50IFBBUkFNUyA9IDM7CisJCS8vCisJCS8vIGlmIChhcmdzLmxlbmd0aCA8IFBBUkFNUykgeworCQkvLworCQkvLyBVdGlsTG9nZ2VyLmxvZ0luZm9ybWF0aW9uKCItLVdyb25nIGFyZ3VtZW50cy0tIik7IC8vJE5PTi1OTFMtMSQKKwkJLy8gU3lzdGVtLm91dAorCQkvLyAucHJpbnRsbigiXHRUbyBydW4sIHBsZWFzZSBwcm92aWRlIHRoZSBmb2xsb3dpbmcgYXJndW1lbnRzIDogIik7CisJCS8vIC8vJE5PTi1OTFMtMSQKKwkJLy8gVXRpbExvZ2dlci5sb2dJbmZvcm1hdGlvbigiXHRcdCBJU08gMzE2Ni0xIGZpbGUiKTsgLy8kTk9OLU5MUy0xJAorCQkvLyBVdGlsTG9nZ2VyLmxvZ0luZm9ybWF0aW9uKCJcdFx0IFRhcmdldCBjb3VudHJpZXMgZmlsZSIpOyAvLyROT04tTkxTLTEkCisJCS8vIFV0aWxMb2dnZXIubG9nSW5mb3JtYXRpb24oIlx0XHQgT3V0cHV0IGRpcmVjdG9yeSIpOyAvLyROT04tTkxTLTEkCisJCS8vIHJldHVybjsKKwkJLy8gfQorCQkvLworCQkvLyBBZG1pbjJMZXhTb3J0ZXIgc29ydGVyID0gbmV3IEFkbWluMkxleFNvcnRlcihhcmdzW0lTT18zMTY2XzFdLAorCQkvLyBhcmdzW1RBUkdFVF9MSVNUXSwgYXJnc1tPVVRQVVRfRElSXSk7CisJCS8vIHNvcnRlci5ydW4oKTsKKworCQlmaW5hbCBpbnQgQ09ORklHX0ZJTEUgPSAwOworCQlmaW5hbCBpbnQgUEFSQU1TID0gMTsKKworCQlpZiAoYXJncy5sZW5ndGggPCBQQVJBTVMpIHsKKwkJCVV0aWxMb2dnZXIubG9nSW5mb3JtYXRpb24oIlx0XHQtLVdyb25nIGFyZ3VtZW50cy0tIik7IC8vJE5PTi1OTFMtMSQKKwkJCVN5c3RlbS5vdXQKKwkJCQkJLnByaW50bG4oIlx0XHRUbyBydW4sIHBsZWFzZSBwcm92aWRlIHRoZSBmb2xsb3dpbmcgYXJndW1lbnQocykgOiAiKTsgLy8kTk9OLU5MUy0xJAorCQkJVXRpbExvZ2dlci5sb2dJbmZvcm1hdGlvbigiXHRcdFx0IENvbmZpZ3VyYXRpb24gZmlsZSIpOyAvLyROT04tTkxTLTEkCisJCQlTeXN0ZW0uZXhpdCgxKTsKKwkJfQorCisJCUFkbWluMkxleFNvcnRlciBzb3J0ZXIgPSBuZXcgQWRtaW4yTGV4U29ydGVyKGFyZ3NbQ09ORklHX0ZJTEVdKTsKKworCQlzb3J0ZXIucnVuKCk7CisKKwl9CisKK30KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3NyYy9vcmcvZWNsaXBzZS9zdGVtL3V0aWxpdHkvZ2VuZXJhdG9ycy9BZ2dyZWdhdGVMb2dGaWxlLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91dGlsaXR5L2dlbmVyYXRvcnMvQWdncmVnYXRlTG9nRmlsZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdhOGVhZjQKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91dGlsaXR5L2dlbmVyYXRvcnMvQWdncmVnYXRlTG9nRmlsZS5qYXZhCkBAIC0wLDAgKzEsMjg1IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS5nZW5lcmF0b3JzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA5IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGphdmEuaW8uQnVmZmVyZWRSZWFkZXI7CitpbXBvcnQgamF2YS5pby5GaWxlOworaW1wb3J0IGphdmEuaW8uRmlsZVJlYWRlcjsKK2ltcG9ydCBqYXZhLmlvLkZpbGVXcml0ZXI7CitpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuTWFwOworaW1wb3J0IGphdmEudXRpbC5TdHJpbmdUb2tlbml6ZXI7CitpbXBvcnQgamF2YS51dGlsLlRyZWVNYXA7CisKKworLyoqCisgKiBBZ2dyZWdhdGUgdGhlIHRvdGFscyBmb3IgdGhlIHNwZWNpZmllZCBjb21wYXJ0bWVudCBmb3IgdGhlIGxpc3Qgb2YgcmVnaW9ucyBwYXNzZWQgaW4sIGFuZCB3cml0ZQorICogdGhlIHJlc3VsdCB0byB0aGUgcGFzc2VkIGluIG91dHB1dCBmaWxlICguY3N2IGZvcm1hdHRlZCBmaWxlKQorICovCisKK3B1YmxpYyBjbGFzcyBBZ2dyZWdhdGVMb2dGaWxlIHsKKworCXN0YXRpYyBTdHJpbmcgSVRFUkFUSU9OX0tFWSA9ICJpdGVyYXRpb24iOworCXN0YXRpYyBTdHJpbmcgVElNRV9LRVkgPSAidGltZSI7CisJCisJc3RhdGljIFN0cmluZyBMUyA9IFN5c3RlbS5nZXRQcm9wZXJ0eSgibGluZS5zZXBhcmF0b3IiKTsgLy8kTk9OLU5MUy0xJAorCQorCQorCS8vIFN0YXRlLCBhZG1pbiBsZXZlbCwgY29sdW1uIGhlYWRlcgorCXByaXZhdGUgc3RhdGljIE1hcDxTdHJpbmcsIE1hcDxTaG9ydCwgTGlzdDxTdHJpbmc+Pj4gaGVhZGVyczsKKworCQorCXByaXZhdGUgc3RhdGljIHNob3J0IE5VTV9MRUFEX0NPTFMgPSAyOworCQorCS8qKgorCSAqIAorCSAqIEBwYXJhbSBhcmdzCisJICovCisJQFN1cHByZXNzV2FybmluZ3MoIm5scyIpCisJcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nIFtdIGFyZ3MpIHsKKwkJaWYoYXJncy5sZW5ndGggPCA0KSB7CisJCQlTeXN0ZW0uZXJyLnByaW50bG4oIlVzYWdlOiBBZ2dyZWdhdGVMb2dGaWxlIDxpbnB1dCBsb2cgcGF0aD4gPHN0YXRlPiA8b3V0cHV0IGZpbGU+IFtsaXN0IG9mIHJlZ2lvbnMgc2VwYXJhdGVkIGJ5IHNwYWNlXSIpOyAvLyROT04tTkxTLTEkCisJCQlTeXN0ZW0uZXhpdCgtMSk7CisJCX0KKwkJCisJCXRyeSB7CisJCQlTdHJpbmcgaW5wdXREaXIgPSBhcmdzWzBdOworCQkJU3RyaW5nIHN0YXRlID0gYXJnc1sxXTsKKwkJCVN0cmluZyBvdXRGaWxlID0gYXJnc1syXTsKKwkJCVN0cmluZyBbXSByZWdpb25zID0gbmV3IFN0cmluZ1thcmdzLmxlbmd0aCAtIDNdOworCQkJZm9yKGludCBpPTA7aTxhcmdzLmxlbmd0aC0zOysraSkgcmVnaW9uc1tpXSA9IGFyZ3NbaSszXTsKKwkKKwkJCWhlYWRlcnMgPSByZWFkSGVhZGVycyhpbnB1dERpcik7CisJCQkKKwkJCWFnZ3JlZ2F0ZUZpbGVzKGlucHV0RGlyLCBzdGF0ZSwgb3V0RmlsZSwgcmVnaW9ucyk7CisJCQkJCisJCQlTeXN0ZW0ub3V0LnByaW50bG4oIlRvdGFsIHJ1bm5pbmcgc3VtIG9mICIrc3RhdGUrIjogIitydW5uaW5nX3N1bSk7CisJCX0gY2F0Y2goRXhjZXB0aW9uIGUpeworCQkJZS5wcmludFN0YWNrVHJhY2UoKTsKKwkJfQorCX0KKwkKKwlwdWJsaWMgc3RhdGljICBNYXA8U3RyaW5nLCBNYXA8U2hvcnQsIExpc3Q8U3RyaW5nPj4+IHJlYWRIZWFkZXJzKFN0cmluZyByZWZEaXIpIHRocm93cyBFeGNlcHRpb24geworCQkKKwkJIEhhc2hNYXA8U3RyaW5nLCBNYXA8U2hvcnQsIExpc3Q8U3RyaW5nPj4+cmVzdWx0ID0gbmV3ICBIYXNoTWFwPFN0cmluZywgTWFwPFNob3J0LCBMaXN0PFN0cmluZz4+PigpOworCQkgCisJCUZpbGUgZiA9IG5ldyBGaWxlKHJlZkRpcik7CisgICAgICAgIAorCQlpZighZi5leGlzdHMoKSB8fCAhZi5pc0RpcmVjdG9yeSgpICkgeworCQkJU3lzdGVtLmVyci5wcmludGxuKCJFcnJvciAiK3JlZkRpcisiIGRvZXMgbm90IGV4aXN0IG9yIGlzIG5vdCBhIGRpcmVjdG9yeSIpOworCQkJU3lzdGVtLmV4aXQoLTEpOworCQl9CisJCQorCQlmb3IoU3RyaW5nIGZpbGU6Zi5saXN0KCkpIHsKKwkJCVN0cmluZyBwYXRoID0gZi5nZXRBYnNvbHV0ZVBhdGgoKStGaWxlLnNlcGFyYXRvcitmaWxlOworCQkJaWYoZi5pc0hpZGRlbigpIHx8IGZpbGUuc3RhcnRzV2l0aCgiLiIpKSBjb250aW51ZTsgLy8gaGlkZGVuIGZpbGUKKwkJCWlmKCFmaWxlLmNvbnRhaW5zKCJfIikpIGNvbnRpbnVlOyAvLyBub3QgYSBsb2dnZWQgQ1NWIGZpbGUKKwkJCQorCQkJaW50IGluZCA9IGZpbGUuaW5kZXhPZigiXyIpOworCQkJCisJCQlTdHJpbmcgc3RhdGUgPSBmaWxlLnN1YnN0cmluZygwLCBpbmQpOworCQkJU3RyaW5nIHNsZXZlbCA9IGZpbGUuc3Vic3RyaW5nKGluZCsxLCBpbmQrMik7CisJCQorCQkJc2hvcnQgYWRtaW5MZXZlbCA9IFNob3J0LnBhcnNlU2hvcnQoc2xldmVsKTsKKwkJCS8vIFJlYWQgaGVhZGVyIGxpbmUKKwkJCUJ1ZmZlcmVkUmVhZGVyIHJlYWRlciA9IG5ldyBCdWZmZXJlZFJlYWRlcihuZXcgRmlsZVJlYWRlcihwYXRoKSk7CisJCQlTdHJpbmcgYnVmZmVyOworCQkJYnVmZmVyID0gcmVhZGVyLnJlYWRMaW5lKCk7IAorCQkJCQkJCQorCQkJU3RyaW5nIHM7CisJCQlpZihidWZmZXIgIT0gbnVsbCkgeworCQkJCVN0cmluZyBbXSB0b2tzID0gYnVmZmVyLnNwbGl0KCIsIik7CisJCQkvLwlTdHJpbmdUb2tlbml6ZXIgc3RvayA9IG5ldyBTdHJpbmdUb2tlbml6ZXIoYnVmZmVyLCIsIik7Ly8kTk9OLU5MUy0xJAorCQkJCQkKKwkJCQlNYXA8U2hvcnQsIExpc3Q8U3RyaW5nPj4gYWRtaW5NYXA7CisJCQkJCisJCQkJaWYoIXJlc3VsdC5jb250YWluc0tleShzdGF0ZSkpICB7CisJCQkJCWFkbWluTWFwID0gbmV3IEhhc2hNYXA8U2hvcnQsIExpc3Q8U3RyaW5nPj4oKTsKKwkJCQkJcmVzdWx0LnB1dChzdGF0ZSwgYWRtaW5NYXApOworCQkJCX0gZWxzZSBhZG1pbk1hcCA9IHJlc3VsdC5nZXQoc3RhdGUpOworCQkJCQorCQkJCUxpc3Q8U3RyaW5nPmhlYWRlciA9IG51bGw7CisJCQkJaWYoIWFkbWluTWFwLmNvbnRhaW5zS2V5KGFkbWluTGV2ZWwpKSB7CisJCQkJCWhlYWRlciA9IG5ldyBBcnJheUxpc3Q8U3RyaW5nPigpOworCQkJCQlhZG1pbk1hcC5wdXQoYWRtaW5MZXZlbCwgaGVhZGVyKTsKKwkJCQl9CisJCQkJCQorCQkJCWZvcihpbnQgaT0wO2k8dG9rcy5sZW5ndGg7KytpKSAgCisJCQkJCWhlYWRlci5hZGQodG9rc1tpXSk7CisJCQl9CQkKKwkJfQorCQlyZXR1cm4gcmVzdWx0OworCX0KKwkJCisKKwkvKgorCXByaXZhdGUgc3RhdGljIE1hcDxTdHJpbmcsIE1hcDxTaG9ydCwgTGlzdDxMaXN0PFN0cmluZz4+Pj4gcmVhZExvZ0ZpbGVzKFN0cmluZyBsb2dEaXIpIHRocm93cyBFeGNlcHRpb24geworCQkKKwkJSGFzaE1hcDxTdHJpbmcsIE1hcDxTaG9ydCwgTGlzdDxMaXN0PFN0cmluZz4+Pj4gcmVzdWx0ID0gbmV3IEhhc2hNYXA8U3RyaW5nLCBNYXA8U2hvcnQsIExpc3Q8TGlzdDxTdHJpbmc+Pj4+KCk7CisJCQorCQlGaWxlIGYgPSBuZXcgRmlsZShsb2dEaXIpOworCSAgICAgICAgCisJCWlmKCFmLmV4aXN0cygpIHx8ICFmLmlzRGlyZWN0b3J5KCkgKSB7CisJCQlTeXN0ZW0uZXJyLnByaW50bG4oIkVycm9yICIrbG9nRGlyKyIgZG9lcyBub3QgZXhpc3Qgb3IgaXMgbm90IGEgZGlyZWN0b3J5Iik7CisJCQlTeXN0ZW0uZXhpdCgtMSk7CisJCX0KKwkJCQorCQlmb3IoU3RyaW5nIGZpbGU6Zi5saXN0KCkpIHsKKwkJCVN0cmluZyBwYXRoID0gZi5nZXRBYnNvbHV0ZVBhdGgoKStGaWxlLnNlcGFyYXRvcitmaWxlOworU3lzdGVtLm91dC5wcmludGxuKCJSZWFkaW5nICIrcGF0aCk7CisJCQlpZihmLmlzSGlkZGVuKCkgfHwgZmlsZS5zdGFydHNXaXRoKCIuIikpIGNvbnRpbnVlOyAvLyBoaWRkZW4gZmlsZQorCQkJaWYoIWZpbGUuY29udGFpbnMoIl8iKSkgY29udGludWU7IC8vIG5vdCBhIGxvZ2dlZCBDU1YgZmlsZQorCQkJCQorCQkJaW50IGluZCA9IGZpbGUuaW5kZXhPZigiXyIpOworCQkJU3RyaW5nIHN0YXRlID0gZmlsZS5zdWJzdHJpbmcoMCwgaW5kKTsKKwkJCVN0cmluZyBzbGV2ZWwgPSBmaWxlLnN1YnN0cmluZyhpbmQrMSwgaW5kKzIpOworCQkJCisJCQlzaG9ydCBhZG1pbkxldmVsID0gU2hvcnQucGFyc2VTaG9ydChzbGV2ZWwpOworCQkJCisJCQkvLyBSZWFkIGhlYWRlciBsaW5lCisJCQlCdWZmZXJlZFJlYWRlciByZWFkZXIgPSBuZXcgQnVmZmVyZWRSZWFkZXIobmV3IEZpbGVSZWFkZXIocGF0aCkpOworCQkJCisJCQlTdHJpbmcgYnVmZmVyOworCQkJYnVmZmVyID0gcmVhZGVyLnJlYWRMaW5lKCk7IC8vIGhlYWRlcgorCQkJU3RyaW5nIHM7CisJCQkKKwkKKwkJCWJ1ZmZlciA9IHJlYWRlci5yZWFkTGluZSgpOyAvLyBGaXJzdCBkYXRhCisJCQl3aGlsZShidWZmZXIgIT0gbnVsbCkgeworCQkJCUxpc3Q8U3RyaW5nPiByb3cgPSBuZXcgQXJyYXlMaXN0PFN0cmluZz4oKTsKKwkJCQlTdHJpbmdUb2tlbml6ZXIgc3RvayA9IG5ldyBTdHJpbmdUb2tlbml6ZXIoYnVmZmVyLCIsIik7Ly8kTk9OLU5MUy0xJAorCQkJCWludCBjb2xOciA9IDA7CisJCQkJd2hpbGUoc3Rvay5oYXNNb3JlVG9rZW5zKCkpIHsKKwkJCQkJU3RyaW5nIHRvayA9IHN0b2submV4dFRva2VuKCk7CisJCQkJCXJvdy5hZGQodG9rKTsKKwkJCQl9CisJCQkJCisJCQkJTWFwPFNob3J0LCBMaXN0PExpc3Q8U3RyaW5nPj4+IGFkbWluTWFwOworCQkJCWlmKCFyZXN1bHQuY29udGFpbnNLZXkoc3RhdGUpKSAgeworCQkJCQlhZG1pbk1hcCA9IG5ldyBIYXNoTWFwPFNob3J0LCBMaXN0PExpc3Q8U3RyaW5nPj4+KCk7CisJCQkJCXJlc3VsdC5wdXQoc3RhdGUsIGFkbWluTWFwKTsKKwkJCQl9IGVsc2UgYWRtaW5NYXAgPSByZXN1bHQuZ2V0KHN0YXRlKTsKKwkJCQkKKwkJCQlMaXN0PExpc3Q8U3RyaW5nPj5kYXRhID0gbnVsbDsKKwkJCQlpZighYWRtaW5NYXAuY29udGFpbnNLZXkoYWRtaW5MZXZlbCkpIHsKKwkJCQkJZGF0YSA9IG5ldyBBcnJheUxpc3Q8TGlzdDxTdHJpbmc+PigpOworCQkJCQlhZG1pbk1hcC5wdXQoYWRtaW5MZXZlbCwgZGF0YSk7CisJCQkJfSBlbHNlIGRhdGEgPSBhZG1pbk1hcC5nZXQoYWRtaW5MZXZlbCk7CisKKwkJCQlkYXRhLmFkZChyb3cpOworCQkJCWJ1ZmZlciA9IHJlYWRlci5yZWFkTGluZSgpOyAKKwkJCX0KKwkJCisJCQkKKwkJCQorCQkJcmVhZGVyLmNsb3NlKCk7CisJCX0KKwkJcmV0dXJuIHJlc3VsdDsKKwl9CisJKi8KKwkKKwlwcml2YXRlIHN0YXRpYyBkb3VibGUgcnVubmluZ19zdW0gPSAwLjA7CisJCisJQFN1cHByZXNzV2FybmluZ3MoIm5scyIpCisJcHVibGljIHN0YXRpYyB2b2lkIGFnZ3JlZ2F0ZUZpbGVzKFN0cmluZyBpbkRpciwgU3RyaW5nIHN0YXRlLCBTdHJpbmcgb3V0RmlsZSwgU3RyaW5nIFtdIHJlZ2lvbnMpIHRocm93cyBFeGNlcHRpb24geworCQlGaWxlIGYgPSBuZXcgRmlsZShpbkRpcik7CisKKwkJRmlsZSBvdXRGID0gbmV3IEZpbGUob3V0RmlsZSk7CisKKwkJRmlsZVdyaXRlciBmdyA9IG5ldyBGaWxlV3JpdGVyKG91dEYpOworCQkKKwkJaWYoIWYuZXhpc3RzKCkgfHwgIWYuaXNEaXJlY3RvcnkoKSApIHsKKwkJCVN5c3RlbS5lcnIucHJpbnRsbigiRXJyb3IgIitpbkRpcisiIGRvZXMgbm90IGV4aXN0IG9yIGlzIG5vdCBhIGRpcmVjdG9yeSIpOworCQkJU3lzdGVtLmV4aXQoLTEpOworCQl9CisJCQkKKwkJVHJlZU1hcDxTdHJpbmcsIERvdWJsZT50b3RhbHNNYXAgPSBuZXcgVHJlZU1hcDxTdHJpbmcsIERvdWJsZT4oKTsKKworCQkKKwkJZm9yKFN0cmluZyBmaWxlOmYubGlzdCgpKSB7CisJCQlTdHJpbmcgcGF0aCA9IGYuZ2V0QWJzb2x1dGVQYXRoKCkrRmlsZS5zZXBhcmF0b3IrZmlsZTsKK1N5c3RlbS5vdXQucHJpbnRsbigiUmVhZGluZyAiK3BhdGgpOworCQkJaWYoZi5pc0hpZGRlbigpIHx8IGZpbGUuc3RhcnRzV2l0aCgiLiIpKSBjb250aW51ZTsgLy8gaGlkZGVuIGZpbGUKKwkJCWlmKCFmaWxlLmNvbnRhaW5zKCJfIikpIGNvbnRpbnVlOyAvLyBub3QgYSBsb2dnZWQgQ1NWIGZpbGUKKwkJCQkKKwkJCWludCBpbmQgPSBmaWxlLmluZGV4T2YoIl8iKTsKKwkJCVN0cmluZyBmaWxlc3RhdGUgPSBmaWxlLnN1YnN0cmluZygwLCBpbmQpOworCQkJaWYoIWZpbGVzdGF0ZS5lcXVhbHMoc3RhdGUpKQorCQkJCWNvbnRpbnVlOworCQkJCisJCQlTdHJpbmcgc2xldmVsID0gZmlsZS5zdWJzdHJpbmcoaW5kKzEsIGluZCsyKTsKKwkJCQorCQkJc2hvcnQgYWRtaW5MZXZlbCA9IFNob3J0LnBhcnNlU2hvcnQoc2xldmVsKTsKKwkJCQorCQkJLy8gUmVhZCBoZWFkZXIgbGluZQorCQkJQnVmZmVyZWRSZWFkZXIgcmVhZGVyID0gbmV3IEJ1ZmZlcmVkUmVhZGVyKG5ldyBGaWxlUmVhZGVyKHBhdGgpKTsKKwkJCQorCQkJU3RyaW5nIGJ1ZmZlcjsKKwkJCWJ1ZmZlciA9IHJlYWRlci5yZWFkTGluZSgpOyAvLyBoZWFkZXIKKwkJCWJ1ZmZlciA9IHJlYWRlci5yZWFkTGluZSgpOyAvLyBkYXRhCisJCQlMaXN0PFN0cmluZz5kYXRhID0gZ2V0VG9rZW5MaXN0KGJ1ZmZlcik7CisJCQlTdHJpbmcgczsKKwkJCQorCQkJCisJCQl3aGlsZShkYXRhICE9IG51bGwpIHsKKwkJCQlmb3IoU3RyaW5nIHJlZ2lvbjpyZWdpb25zKSB7CisJCQkJCWlmKChhZG1pbkxldmVsID09IDIgfHwgYWRtaW5MZXZlbCA9PSAxKSAmJiByZWdpb24ubGVuZ3RoKCkgPiAyKSBjb250aW51ZTsKKwkJCQkJaWYoYWRtaW5MZXZlbCA9PSAwICYmIHJlZ2lvbi5sZW5ndGgoKSA8IDMpIGNvbnRpbnVlOworCQkJCQkKKwkJCQkJZG91YmxlIHRvdGFscyA9IDAuMDsKKwkJCQkJYm9vbGVhbiBmb3VuZCA9IGZhbHNlOworCQkJCQlpbnQgY29sID0wOworCQkJCQlmb3IoU3RyaW5nIGhlYWRlciA6IGhlYWRlcnMuZ2V0KHN0YXRlKS5nZXQoYWRtaW5MZXZlbCkpIHsKKwkJCQkJCQorCQkJCQkJaWYoY29sIDwgTlVNX0xFQURfQ09MUykgeysrY29sO2NvbnRpbnVlO30KKwkJCQkJCQorCQkJCQkJaWYoaGVhZGVyLnN0YXJ0c1dpdGgocmVnaW9uKSkgeworCQkJCQkJCWZvdW5kID0gdHJ1ZTsKKwkJCQkJCQl0b3RhbHMgKz0gRG91YmxlLnBhcnNlRG91YmxlKGRhdGEuZ2V0KGNvbCkpOworCQkJCQkJCQorCQkJCQkJfSBlbHNlIGlmIChmb3VuZCkgIGJyZWFrOyAvLyBvcHRpbWl6YXRpb24sIGhlYWRlcnMgYXJlIHNvcnRlZCBhbHBoYWJldGljYWxseQkKKwkJCQkJCSsrY29sOwkKKwkJCQkJfQorCQkJCQlpZihmb3VuZCkgeworCQkJCQkJaWYodG90YWxzTWFwLmNvbnRhaW5zS2V5KHJlZ2lvbikpCisJCQkJCQkJdG90YWxzTWFwLnB1dChyZWdpb24sIHRvdGFsc01hcC5nZXQocmVnaW9uKSt0b3RhbHMpOworCQkJCQkJZWxzZSB0b3RhbHNNYXAucHV0KHJlZ2lvbiwgdG90YWxzKTsKKwkJCQkJfQorCQkJCX0KKwkJCQlidWZmZXIgPSByZWFkZXIucmVhZExpbmUoKTsgLy8gZGF0YQorCQkJCWRhdGEgPSBnZXRUb2tlbkxpc3QoYnVmZmVyKTsKKwkJCX0KKwkJCQorCQl9IC8vIGZvciBlYWNoIGZpbGUKKwkJZm9yKFN0cmluZyByZWdpb246dG90YWxzTWFwLmtleVNldCgpKSB7CisJCQlmdy53cml0ZShyZWdpb24rIiwiK3RvdGFsc01hcC5nZXQocmVnaW9uKStMUyk7CisJCX0KKwkJZncuZmx1c2goKTsKKworCQlmdy5jbG9zZSgpOworCX0KKwkJCQorCQkJCisJcHJpdmF0ZSBzdGF0aWMgTGlzdDxTdHJpbmc+IGdldFRva2VuTGlzdChTdHJpbmcgcykgeworCQlpZihzID09IG51bGwpIHJldHVybiBudWxsOworCQlBcnJheUxpc3Q8U3RyaW5nPnJlc3VsdCA9IG5ldyBBcnJheUxpc3Q8U3RyaW5nPigpOworCQlTdHJpbmdUb2tlbml6ZXIgc3RvayA9IG5ldyBTdHJpbmdUb2tlbml6ZXIocywiLCIpOy8vJE5PTi1OTFMtMSQKKwkJd2hpbGUoc3Rvay5oYXNNb3JlVG9rZW5zKCkpIHsKKwkJCVN0cmluZyB0b2sgPSBzdG9rLm5leHRUb2tlbigpOworCQkJcmVzdWx0LmFkZCh0b2spOworCQl9CisJCXJldHVybiByZXN1bHQ7CisJfQorfQorCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91dGlsaXR5L2dlbmVyYXRvcnMvQWlyQXJyaXZhbERlcGFydHVyZUFuYWx5emVyLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91dGlsaXR5L2dlbmVyYXRvcnMvQWlyQXJyaXZhbERlcGFydHVyZUFuYWx5emVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWM1MWZkOQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3NyYy9vcmcvZWNsaXBzZS9zdGVtL3V0aWxpdHkvZ2VuZXJhdG9ycy9BaXJBcnJpdmFsRGVwYXJ0dXJlQW5hbHl6ZXIuamF2YQpAQCAtMCwwICsxLDEyNSBAQAorIHBhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5LmdlbmVyYXRvcnM7CisKKyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAqIENvcHlyaWdodCAoYykgMjAwOSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICAqCisgICogQ29udHJpYnV0b3JzOgorICAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGphdmEuaW8uQnVmZmVyZWRSZWFkZXI7CitpbXBvcnQgamF2YS5pby5GaWxlOworaW1wb3J0IGphdmEuaW8uRmlsZUlucHV0U3RyZWFtOworaW1wb3J0IGphdmEuaW8uRmlsZVdyaXRlcjsKK2ltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtUmVhZGVyOworaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7CitpbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7CitpbXBvcnQgamF2YS51dGlsLlN0cmluZ1Rva2VuaXplcjsKKworLyoqCisgKgorICovCitwdWJsaWMgY2xhc3MgQWlyQXJyaXZhbERlcGFydHVyZUFuYWx5emVyIHsKKwkKKwlzdGF0aWMgU3RyaW5nIExTID0gU3lzdGVtLmdldFByb3BlcnR5KCJsaW5lLnNlcGFyYXRvciIpOyAvLyROT04tTkxTLTEkCisJCisJLyoqCisJICogCisJICogQHBhcmFtIGFyZ3MKKwkgKi8KKwlAU3VwcHJlc3NXYXJuaW5ncyh7ICJubHMiIH0pCisJcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nIFtdIGFyZ3MpIHsKKwkJaWYoYXJncy5sZW5ndGggPCAxKSB7CisJCQlTeXN0ZW0uZXJyLnByaW50bG4oIlVzYWdlOiBBaXJUcmFuc3BvcnRHZW5lcmF0b3IgPGlucHV0IC5jc3YgZmlsZT4iKTsKKwkJCVN5c3RlbS5leGl0KC0xKTsKKwkJfQorCQkKKwkJdHJ5IHsKKwkJU3RyaW5nIGlucHV0RmlsZSA9IGFyZ3NbMF07CisJCQorCQlGaWxlIGNzdmZpbGUgPSBuZXcgRmlsZShpbnB1dEZpbGUpOworCQlpZighY3N2ZmlsZS5leGlzdHMoKSkgeworCQkJU3lzdGVtLmVyci5wcmludGxuKCJFcnJvciwgIitpbnB1dEZpbGUrIiBkb2Vzbid0IGV4aXN0Iik7CisJCQlTeXN0ZW0uZXhpdCgtMSk7CisJCX0KKwkJCisJCQorCQlCdWZmZXJlZFJlYWRlciBpcmVhZGVyID0gbmV3IEJ1ZmZlcmVkUmVhZGVyKG5ldyBJbnB1dFN0cmVhbVJlYWRlcihuZXcgRmlsZUlucHV0U3RyZWFtKGNzdmZpbGUpKSk7CisJCSAgIAorCQlGaWxlV3JpdGVyIGZ3ID0gbmV3IEZpbGVXcml0ZXIoaW5wdXRGaWxlKyIub3V0LmNzdiIpOworCQkJCisJCUhhc2hNYXA8U3RyaW5nLCBJbnRlZ2VyPiBuYXRpb25hbEFycml2YWxzID0gbmV3IEhhc2hNYXA8U3RyaW5nLCBJbnRlZ2VyPigpOworCQlIYXNoTWFwPFN0cmluZywgSW50ZWdlcj4gbmF0aW9uYWxEZXBhcnR1cmVzID0gbmV3IEhhc2hNYXA8U3RyaW5nLCBJbnRlZ2VyPigpOworCQlIYXNoTWFwPFN0cmluZywgSW50ZWdlcj4gc3RhdGVUcmlwcyA9IG5ldyBIYXNoTWFwPFN0cmluZywgSW50ZWdlcj4oKTsKKwkJCisJCVN0cmluZyBsaW5lOworCQlsaW5lID0gaXJlYWRlci5yZWFkTGluZSgpOyAvL3NraXAgZmlyc3QgaGVhZGVyIHJvdworCQl3aGlsZSgobGluZT1pcmVhZGVyLnJlYWRMaW5lKCkpICE9IG51bGwpIHsgICAgCQkKKwkJICAJCVN0cmluZ1Rva2VuaXplciBzdCA9IG5ldyBTdHJpbmdUb2tlbml6ZXIobGluZSwiLCIpOworCQkgIAkJU3RyaW5nIGRlcGFydHVyZUlkICA9IHN0Lm5leHRUb2tlbigpLnRyaW0oKTsKKwkJICAJCVN0cmluZyBhcnJpdmFsSWQgPSBzdC5uZXh0VG9rZW4oKS50cmltKCk7CisJCSAgCQlpbnQgcG9wdWxhdGlvbjEgPSBJbnRlZ2VyLnBhcnNlSW50KHN0Lm5leHRUb2tlbigpLnRyaW0oKSk7CisJCSAgCQlpbnQgcG9wdWxhdGlvbjIgPSBJbnRlZ2VyLnBhcnNlSW50KHN0Lm5leHRUb2tlbigpLnRyaW0oKSk7CisJCSAgCQlkb3VibGUgZmxpZ2h0dGltZSA9IERvdWJsZS5wYXJzZURvdWJsZShzdC5uZXh0VG9rZW4oKS50cmltKCkpOworCQkgIAkJZG91YmxlIGRpc3RhbmNlID0gRG91YmxlLnBhcnNlRG91YmxlKHN0Lm5leHRUb2tlbigpLnRyaW0oKSk7CisJCSAgCQlpbnQgdHJhdmVsbGVycyA9IEludGVnZXIucGFyc2VJbnQoc3QubmV4dFRva2VuKCkudHJpbSgpKTsKKwkJICAJCQorCQkgIAkJU3RyaW5nIGRlcGFydHVyZVN0YXRlID0gZGVwYXJ0dXJlSWQuc3Vic3RyaW5nKDAsIDUpOworCQkgIAkJU3RyaW5nIGFycml2YWxTdGF0ZSA9IGFycml2YWxJZC5zdWJzdHJpbmcoMCwgNSk7CisJCSAgCQkKKwkJICAJCWlmKGRlcGFydHVyZVN0YXRlLmVxdWFscyhhcnJpdmFsU3RhdGUpKSB7CisJCSAgCQkJLy8gVHJhdmVsIHdpdGhpbiBhIHN0YXRlCisJCSAgCQkJaWYoc3RhdGVUcmlwcy5jb250YWluc0tleShkZXBhcnR1cmVTdGF0ZSkpIAorCQkgIAkJCQlzdGF0ZVRyaXBzLnB1dChkZXBhcnR1cmVTdGF0ZSwgc3RhdGVUcmlwcy5nZXQoZGVwYXJ0dXJlU3RhdGUpICsgdHJhdmVsbGVycyk7CisJCSAgCQkJZWxzZQorCQkgIAkJCQlzdGF0ZVRyaXBzLnB1dChkZXBhcnR1cmVTdGF0ZSwgdHJhdmVsbGVycyk7CisJCSAgCQl9IGVsc2UgeworCQkgIAkJCS8vIFRyYXZlbCBzdGF0ZSB0byBhbm90aGVyIHN0YXRlCisJCSAgCQkJaWYobmF0aW9uYWxEZXBhcnR1cmVzLmNvbnRhaW5zS2V5KGRlcGFydHVyZVN0YXRlKSkgCisJCSAgCQkJCW5hdGlvbmFsRGVwYXJ0dXJlcy5wdXQoZGVwYXJ0dXJlU3RhdGUsIG5hdGlvbmFsRGVwYXJ0dXJlcy5nZXQoZGVwYXJ0dXJlU3RhdGUpICsgdHJhdmVsbGVycyk7CisJCSAgCQkJZWxzZQorCQkgIAkJCQluYXRpb25hbERlcGFydHVyZXMucHV0KGRlcGFydHVyZVN0YXRlLCB0cmF2ZWxsZXJzKTsKKwkJICAJCQlpZihuYXRpb25hbEFycml2YWxzLmNvbnRhaW5zS2V5KGFycml2YWxTdGF0ZSkpIAorCQkgIAkJCQluYXRpb25hbEFycml2YWxzLnB1dChhcnJpdmFsU3RhdGUsIG5hdGlvbmFsQXJyaXZhbHMuZ2V0KGFycml2YWxTdGF0ZSkgKyB0cmF2ZWxsZXJzKTsKKwkJICAJCQllbHNlCisJCSAgCQkJCW5hdGlvbmFsQXJyaXZhbHMucHV0KGFycml2YWxTdGF0ZSwgdHJhdmVsbGVycyk7CisJCSAgCQl9CQorCQl9IC8vIGZvciBlYWNoIGxpbmUKKwkJCisJCUFycmF5TGlzdDxTdHJpbmc+IGFsbFN0YXRlcyA9IG5ldyBBcnJheUxpc3Q8U3RyaW5nPigpOworCQlmb3IoU3RyaW5nIHN0YXRlOm5hdGlvbmFsQXJyaXZhbHMua2V5U2V0KCkpIGlmKCFhbGxTdGF0ZXMuY29udGFpbnMoc3RhdGUpKSBhbGxTdGF0ZXMuYWRkKHN0YXRlKTsKKwkJZm9yKFN0cmluZyBzdGF0ZTpuYXRpb25hbERlcGFydHVyZXMua2V5U2V0KCkpIGlmKCFhbGxTdGF0ZXMuY29udGFpbnMoc3RhdGUpKSBhbGxTdGF0ZXMuYWRkKHN0YXRlKTsKKwkJZm9yKFN0cmluZyBzdGF0ZTpzdGF0ZVRyaXBzLmtleVNldCgpKSBpZighYWxsU3RhdGVzLmNvbnRhaW5zKHN0YXRlKSkgYWxsU3RhdGVzLmFkZChzdGF0ZSk7CisJCQorCQlmdy53cml0ZSgiU3RhdGUsIExvY2FsIHN0YXRlIHRyaXBzLCBOYXRpb25hbCBBcnJpdmFscywgTmF0aW9uYWxEZXBhcnR1cmVzLCAlIGxlYXZpbmcgc3RhdGUiKTsKKwkJZncud3JpdGUoTFMpOworCQlmb3IoU3RyaW5nIHN0YXRlOmFsbFN0YXRlcykgeworCQkJaW50IHN0ID0gKHN0YXRlVHJpcHMuY29udGFpbnNLZXkoc3RhdGUpKT8gc3RhdGVUcmlwcy5nZXQoc3RhdGUpIDogMDsKKwkJCWludCBuYSA9IChuYXRpb25hbEFycml2YWxzLmNvbnRhaW5zS2V5KHN0YXRlKSk/IG5hdGlvbmFsQXJyaXZhbHMuZ2V0KHN0YXRlKSA6IDA7CisJCQlpbnQgbmQgPSAobmF0aW9uYWxEZXBhcnR1cmVzLmNvbnRhaW5zS2V5KHN0YXRlKSk/IG5hdGlvbmFsRGVwYXJ0dXJlcy5nZXQoc3RhdGUpIDogMDsKKwkJCQorCQkJZncud3JpdGUoc3RhdGUrIiwiKTsKKwkJCWZ3LndyaXRlKHN0KyIiKTsKKwkJCWZ3LndyaXRlKCIsIik7CisJCQlmdy53cml0ZShuYSsiIik7CisJCQlmdy53cml0ZSgiLCIpOworCQkJZncud3JpdGUobmQrIiIpOworCQkJZncud3JpdGUoIiwiKTsKKwkJCQorCQkJZG91YmxlIHBlcmMgPSAoKGRvdWJsZSluYSsoZG91YmxlKW5kKSAvICgoZG91YmxlKW5hKyhkb3VibGUpbmQrc3QpOworCQkJZncud3JpdGUoIiIrcGVyYyk7CisJCQlmdy53cml0ZShMUyk7CisJCX0KKwkJZncuZmx1c2goKTsKKwkJZncuY2xvc2UoKTsKKwkJCisJfSBjYXRjaChFeGNlcHRpb24gZSkgeworCQllLnByaW50U3RhY2tUcmFjZSgpOworCX0KKwkJCisJfQorfQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdXRpbGl0eS9nZW5lcmF0b3JzL0FpclRyYW5zcG9ydEdlbmVyYXRvci5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdXRpbGl0eS9nZW5lcmF0b3JzL0FpclRyYW5zcG9ydEdlbmVyYXRvci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE1MjQwYjIKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91dGlsaXR5L2dlbmVyYXRvcnMvQWlyVHJhbnNwb3J0R2VuZXJhdG9yLmphdmEKQEAgLTAsMCArMSwyMDQgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5LmdlbmVyYXRvcnM7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDkgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgamF2YS5pby5CdWZmZXJlZFJlYWRlcjsKK2ltcG9ydCBqYXZhLmlvLkZpbGU7CitpbXBvcnQgamF2YS5pby5GaWxlSW5wdXRTdHJlYW07CitpbXBvcnQgamF2YS5pby5GaWxlV3JpdGVyOworaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW1SZWFkZXI7CitpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuTWFwOworaW1wb3J0IGphdmEudXRpbC5TdHJpbmdUb2tlbml6ZXI7CisKKy8qKgorICogVGhlIHV0aWxpdHkgdGFrZXMgYXMgaW5wdXQgYSAucHJvcGVydGllcyBmaWxlIGNvbnRhaW5pbmcgYXJyaXZhbC9kZXBhcnR1cmUvYmFzZSBwb3B1bGF0aW9uIGluZm9ybWF0aW9uCisgKiBmb3IgYWlycG9ydHMgYXQgYSBnaXZlbiBsZXZlbCAoZS5nLiBjb3VudGllcykgYW5kIGdlbmVyYXRlcyBhIG5ldyBmaWxlIGNvbnRhaW5pbmcKKyAqIGFycml2YWwvZGVwYXJ0dXJlIGluZm9ybWF0aW9uIGZvciB0aGUgcGlwZSBhaXIgdHJhbnNwb3J0YXRpb24gaHViIGF0IHRoZSBsZXZlbCBhYm92ZSAoZS5nIC5zdGF0ZSkuCisgKiAKKyAqIFRoZSBhcnJpdmFsL2RlcGFydHVyZSBpbmZvcm1hdGlvbiBpbiB0aGUgaW5wdXQgZmlsZSBpbmNsdWRlcyBhbGwgcGFzc2VuZ2VycywgZG9tZXN0aWMgYW5kIGludGVybmF0aW9uYWwKKyAqLworcHVibGljIGNsYXNzIEFpclRyYW5zcG9ydEdlbmVyYXRvciB7CisJCisJc3RhdGljIFN0cmluZyBMUyA9IFN5c3RlbS5nZXRQcm9wZXJ0eSgibGluZS5zZXBhcmF0b3IiKTsgLy8kTk9OLU5MUy0xJAorCQorCXByaXZhdGUgc3RhdGljIE1hcDxTdHJpbmcsIEFycmF5TGlzdDxUcmFuc3BvcnRhdGlvblJlY29yZD4+IHJlY29yZHMgPSBuZXcgSGFzaE1hcDxTdHJpbmcsIEFycmF5TGlzdDxUcmFuc3BvcnRhdGlvblJlY29yZD4+KCk7CisJLyoqCisJICogCisJICogQHBhcmFtIGFyZ3MKKwkgKi8KKwlAU3VwcHJlc3NXYXJuaW5ncyh7ICJubHMiLCAic3ludGhldGljLWFjY2VzcyIgfSkKKwlwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmcgW10gYXJncykgeworCQlpZihhcmdzLmxlbmd0aCA8IDIpIHsKKwkJCVN5c3RlbS5lcnIucHJpbnRsbigiVXNhZ2U6IEFpclRyYW5zcG9ydEdlbmVyYXRvciA8aW5wdXQgLnByb3BlcnRpZXMgZmlsZT4gPFRvcCBUcmFuc3BvcmF0aW9uIFN5c3RlbSIpOworCQkJU3lzdGVtLmV4aXQoLTEpOworCQl9CisJCQorCQl0cnkgeworCQlTdHJpbmcgaW5wdXRGaWxlID0gYXJnc1swXTsKKwkJU3RyaW5nIHRvcFN5c3RlbSA9IGFyZ3NbMV07CisJCQorCQlGaWxlIHByb3BmaWxlID0gbmV3IEZpbGUoaW5wdXRGaWxlKTsKKwkJaWYoIXByb3BmaWxlLmV4aXN0cygpKSB7CisJCQlTeXN0ZW0uZXJyLnByaW50bG4oIkVycm9yLCAiK2lucHV0RmlsZSsiIGRvZXNuJ3QgZXhpc3QiKTsKKwkJCVN5c3RlbS5leGl0KC0xKTsKKwkJfQorCQkKKwkJCisJCUJ1ZmZlcmVkUmVhZGVyIGlyZWFkZXIgPSBuZXcgQnVmZmVyZWRSZWFkZXIobmV3IElucHV0U3RyZWFtUmVhZGVyKG5ldyBGaWxlSW5wdXRTdHJlYW0ocHJvcGZpbGUpKSk7CisJCSAgIAorCQlGaWxlV3JpdGVyIGZ3ID0gbmV3IEZpbGVXcml0ZXIoaW5wdXRGaWxlKyIubmV3Iik7CisJCQkKKwkJU3RyaW5nIGxpbmU7CisJCXdoaWxlKChsaW5lPWlyZWFkZXIucmVhZExpbmUoKSkgIT0gbnVsbCkgeworCQkgIAlpZighbGluZS5zdGFydHNXaXRoKCIjIikgJiYKKwkJICAJCQkhbGluZS5zdGFydHNXaXRoKCJSRUNPUkRfQ0xBU1NOQU1FIikgJiYKKwkJICAJCQkhbGluZS5zdGFydHNXaXRoKCJUSVRMRSIpICYmCisJCSAgCQkJIWxpbmUuc3RhcnRzV2l0aCgiVkFMSUQiKSAmJgorCQkgIAkJCSFsaW5lLnN0YXJ0c1dpdGgoIlRSQU5TUE9SVF9NT0RFICIpICYmCisJCSAgCQkJIWxpbmUuc3RhcnRzV2l0aCgiSVNPS0VZXzAiKSAmJgorCQkgIAkJCSFsaW5lLnN0YXJ0c1dpdGgoIklTT0tFWV8wX0xFVkVMIikgJiYKKwkJICAgCQkJIWxpbmUuc3RhcnRzV2l0aCgiSVNPS0VZXzEiKSAmJgorCQkgIAkJCSFsaW5lLnN0YXJ0c1dpdGgoIklTT0tFWV8xX0xFVkVMIikgJiYKKwkJICAJCQkhbGluZS5zdGFydHNXaXRoKCJQT1BVTEFUSU9OX0lERU5USUZJRVIiKSAmJgorCQkgIAkJCSFsaW5lLnN0YXJ0c1dpdGgoIlJBVEVfVElNRV9QRVJJT0QiKSAmJgorCQkgIAkJCSFsaW5lLnN0YXJ0c1dpdGgoIkFWR19USU1FX0lOX1NZU1RFTSIpICYmCisJCSAgCQkJIWxpbmUuc3RhcnRzV2l0aCgiU1RBUlRfUE9QVUxBVElPTl9JTl9ORVRXT1JLIikgJiYKKwkJICAJCQkhKGxpbmUudHJpbSgpLmxlbmd0aCgpID09IDApCisJCQkJKSB7CisJCSAgCQkvLyBGaW5kIHRoZSB0cmFuc3BvcnRhdGlvbiByZWNvcmQKKwkJICAgIAkJCisJCSAgCQlpbnQgZXFpbmRleCA9IGxpbmUuaW5kZXhPZigiPSIpOworCQkgIAkJU3RyaW5nIHRyYW5zID0gbGluZS5zdWJzdHJpbmcoZXFpbmRleCsxKTsKKwkJICAJCVN0cmluZ1Rva2VuaXplciBzdCA9IG5ldyBTdHJpbmdUb2tlbml6ZXIodHJhbnMsIiwiKTsKKwkJICAJCVRyYW5zcG9ydGF0aW9uUmVjb3JkIHJlY29yZCA9IG5ldyBUcmFuc3BvcnRhdGlvblJlY29yZCgpOworCQkgIAkJcmVjb3JkLmh1Yl90b3AgPSBzdC5uZXh0VG9rZW4oKS50cmltKCk7CisJCSAgCQlyZWNvcmQuaHViX2JvdHRvbSA9IHN0Lm5leHRUb2tlbigpLnRyaW0oKTsKKwkJICAJCXJlY29yZC5hcnJpdmFscyA9IEludGVnZXIucGFyc2VJbnQoc3QubmV4dFRva2VuKCkudHJpbSgpKTsKKwkJICAJCXJlY29yZC5kZXBhcnR1cmVzID0gSW50ZWdlci5wYXJzZUludChzdC5uZXh0VG9rZW4oKS50cmltKCkpOworCQkgIAkJcmVjb3JkLmJhc2VfcG9wdWxhdGlvbiA9IEludGVnZXIucGFyc2VJbnQoc3QubmV4dFRva2VuKCkudHJpbSgpKTsKKwkJCisJCSAgCQlpZihyZWNvcmRzLmNvbnRhaW5zS2V5KHJlY29yZC5odWJfdG9wKSkKKwkJICAJCQlyZWNvcmRzLmdldChyZWNvcmQuaHViX3RvcCkuYWRkKHJlY29yZCk7CisJCSAgCQllbHNlIHsKKwkJICAJCQlBcnJheUxpc3Q8VHJhbnNwb3J0YXRpb25SZWNvcmQ+IGxpc3QgPSBuZXcgQXJyYXlMaXN0PFRyYW5zcG9ydGF0aW9uUmVjb3JkPigpOworCQkgIAkJCXJlY29yZHMucHV0KHJlY29yZC5odWJfdG9wLCBsaXN0KTsKKwkJICAJCQlsaXN0LmFkZChyZWNvcmQpOworCQkgIAkJfQorCQkgIAkJbGluZSA9ICIiOworCQkgIAl9CisJCSAgICBpZihsaW5lIT1udWxsJiZsaW5lLnRyaW0oKS5sZW5ndGgoKSAhPSAwKQlmdy53cml0ZShsaW5lK0xTKTsKKwkJICAgIGZ3LmZsdXNoKCk7CisJCX0gIC8vIEZvciBlYWNoIGxpbmUKKwkJCisJCS8vIE5vdyBmaWd1cmUgb3V0IHRoZSBhcnJpdmFsL2RlcGFydHVyZSBmb3IgdGhlIHRvcCB0cmFuc3BvcnRhdGlvbiBzeXN0ZW1zCisJCQorCQkvLyBUaGUgZGVub21pbmF0b3IKKwkJZG91YmxlIGRlbm9tID0gZ2V0RGVub21pbmF0b3IoKTsKKwkKKwkJaW50IGxpbmVuciA9IDE7CisJCWZvcihTdHJpbmcgaHViOnJlY29yZHMua2V5U2V0KCkpIHsKKwkJCUxpc3Q8VHJhbnNwb3J0YXRpb25SZWNvcmQ+IGxpc3QgPSByZWNvcmRzLmdldChodWIpOworCQkJaW50IGFycl9zdW09MCwgZGVwX3N1bT0wOworCQkJZm9yKFRyYW5zcG9ydGF0aW9uUmVjb3JkIHJlY29yZDpsaXN0KSB7CisJCQkJYXJyX3N1bSs9cmVjb3JkLmFycml2YWxzOworCQkJCWRlcF9zdW0rPXJlY29yZC5kZXBhcnR1cmVzOworCQkJfQorCQkJLy8gVGhlIHBvcHVsYXRpb24gaXMgc3VtIG9mIGFsbCBhcnJpdmFscyBhbmQgZGVwYXJ0dXJlcyAvIDIKKwkJCWludCBiYXNlX3BvcHVsYXRpb24gPSAoYXJyX3N1bStkZXBfc3VtKS8yOworCQkJLy8gRmlndXJlIHB1dCB0aGUgYXJyaXZhbC9kZXBhcnR1cmUgcmF0ZSAKKwkJCQorCQkJCisJCQlkb3VibGUgcHJvYiA9IDAuMDsgLy8gcHJvYmFiaWxpdHkgb2YgYW4gaW4tc3RhdGUtdHJhdmVsIAorCQkJCisJCQkvLyBUaGUgcHJvYmFiaWxpdHkgb2YgYW4gaW4tc3RhdGUgdHJhdmVsIGlzIHRoZSBzdW0gaWYgdGhlIHByb2JhYmlsaXR5CisJCQkvLyBvZiB0cmF2ZWwgd2l0aGluIHRoZSBzdGF0ZQorCQkJZm9yKFRyYW5zcG9ydGF0aW9uUmVjb3JkIHNvdXJjZTpsaXN0KSB7CisJCQkJZm9yKFRyYW5zcG9ydGF0aW9uUmVjb3JkIGRlc3Q6bGlzdCkgeworCQkJCQlpZihzb3VyY2UgPT0gZGVzdCkgY29udGludWU7CisJCQkJCWRvdWJsZSBwID0gZ2V0UHJvYmFiaWxpdHkoc291cmNlLCBkZXN0LCBkZW5vbSk7CisJCQkJCXByb2IgKz0gcDsKKwkJCQl9CisJCQl9CisJCQkJCQkKKwkJCS8vIFRoZXNlIGFyZSB0aGUgb3V0LW9mLXN0YXRlIHRyYXZlbGxlcnMKKwkJCWludCBhcnJpdmFscyA9IGJhc2VfcG9wdWxhdGlvbiAtIChpbnQpKGJhc2VfcG9wdWxhdGlvbipwcm9iKTsKKwkJCWludCBkZXBhcnR1cmVzID0gYmFzZV9wb3B1bGF0aW9uIC0gKGludCkoYmFzZV9wb3B1bGF0aW9uKnByb2IpOworCQkJCisJCQlmdy53cml0ZSgiIitsaW5lbnIrKyk7CisJCQlmdy53cml0ZSgiID0gIik7CisJCQlmdy53cml0ZSh0b3BTeXN0ZW0pOworCQkJZncud3JpdGUoIiwiKTsKKwkJCWZ3LndyaXRlKGh1Yik7CisJCQlmdy53cml0ZSgiLCIpOworCQkJZncud3JpdGUoYXJyaXZhbHMrIiIpOworCQkJZncud3JpdGUoIiwiKTsKKwkJCWZ3LndyaXRlKGRlcGFydHVyZXMrIiIpOworCQkJZncud3JpdGUoIiwiKTsKKwkJCWZ3LndyaXRlKGJhc2VfcG9wdWxhdGlvbisiIik7CisJCQlmdy53cml0ZShMUyk7CisJCX0KKwkJCisJCS8vIAorCQlmdy5mbHVzaCgpOworCQlmdy5jbG9zZSgpOworCQkKKwl9IGNhdGNoKEV4Y2VwdGlvbiBlKSB7CisJCWUucHJpbnRTdGFja1RyYWNlKCk7CisJfQorCQkKKwl9IC8vIG1haW4KKwkKKwlwcml2YXRlIHN0YXRpYyBkb3VibGUgZ2V0RGVub21pbmF0b3IoKSB7CisJCWRvdWJsZSByZXN1bHQgPSAwLjA7CisJCWZvcihTdHJpbmcga2V5MTpyZWNvcmRzLmtleVNldCgpKSB7CisJCQlMaXN0PFRyYW5zcG9ydGF0aW9uUmVjb3JkPiByZWNvcmRzMSA9IHJlY29yZHMuZ2V0KGtleTEpOworCQkJZm9yKFRyYW5zcG9ydGF0aW9uUmVjb3JkIHJlY29yZDE6cmVjb3JkczEpIHsKKwkJCQkvLyBhdmVyYWdlIGFycml2YWxzL2RlcGFydHVyZXMsIHNob3VsZCBiZSB0aGUgc2FtZSBhbnl3YXkKKwkJCQlkb3VibGUgbm9tMSA9IChyZWNvcmQxLmFycml2YWxzICsgcmVjb3JkMS5kZXBhcnR1cmVzKS8yLjA7CisJCQkJZG91YmxlIGRlbjEgPSByZWNvcmQxLmJhc2VfcG9wdWxhdGlvbjsKKwkJCQlkb3VibGUgcGhpMSA9IG5vbTEvZGVuMTsKKwkJCQlmb3IoU3RyaW5nIGtleTI6cmVjb3Jkcy5rZXlTZXQoKSkgeworCQkJCQlMaXN0PFRyYW5zcG9ydGF0aW9uUmVjb3JkPiByZWNvcmRzMiA9IHJlY29yZHMuZ2V0KGtleTIpOworCQkJCQlmb3IoVHJhbnNwb3J0YXRpb25SZWNvcmQgcmVjb3JkMjpyZWNvcmRzMikgeworCQkJCQkJaWYocmVjb3JkMSA9PSByZWNvcmQyKSBjb250aW51ZTsgLy8gc2tpcCB0cmF2ZWwgdG8vZnJvbSBzYW1lIGRlc3RpbmF0aW9uCisJCQkJCQkvLyBhdmVyYWdlIGFycml2YWxzL2RlcGFydHVyZXMsIHNob3VsZCBiZSB0aGUgc2FtZSBhbnl3YXkKKwkJCQkJCWRvdWJsZSBub20yID0gKHJlY29yZDIuYXJyaXZhbHMgKyByZWNvcmQyLmRlcGFydHVyZXMpLzIuMDsKKwkJCQkJCWRvdWJsZSBkZW4yID0gcmVjb3JkMi5iYXNlX3BvcHVsYXRpb247CisJCQkJCQlkb3VibGUgcGhpMiA9IG5vbTIvZGVuMjsKKwkJCQkJCXJlc3VsdCArPSBwaGkxKnBoaTI7CisJCQkJCX0KKwkJCQl9CisJCQl9CisJCX0KKwkJcmV0dXJuIHJlc3VsdDsKKwl9CisJCisJcHJpdmF0ZSBzdGF0aWMgZG91YmxlIGdldFByb2JhYmlsaXR5KFRyYW5zcG9ydGF0aW9uUmVjb3JkIHNvdXJjZSwgVHJhbnNwb3J0YXRpb25SZWNvcmQgZGVzdCwgZG91YmxlIGRlbm9taW5hdG9yKSB7CisJCWRvdWJsZSBub20xID0gKHNvdXJjZS5hcnJpdmFscyArIHNvdXJjZS5kZXBhcnR1cmVzKS8yLjA7CisJCWRvdWJsZSBkZW4xID0gc291cmNlLmJhc2VfcG9wdWxhdGlvbjsKKwkJZG91YmxlIHBoaTEgPSBub20xL2RlbjE7CisJCWRvdWJsZSBub20yID0gKGRlc3QuYXJyaXZhbHMgKyBkZXN0LmRlcGFydHVyZXMpLzIuMDsKKwkJZG91YmxlIGRlbjIgPSBkZXN0LmJhc2VfcG9wdWxhdGlvbjsKKwkJZG91YmxlIHBoaTIgPSBub20yL2RlbjI7CisJCXJldHVybiBwaGkxKnBoaTIvZGVub21pbmF0b3I7CisJfQorCXByaXZhdGUgc3RhdGljIGNsYXNzIFRyYW5zcG9ydGF0aW9uUmVjb3JkIHsKKwkJcHVibGljIGludCBhcnJpdmFsczsKKwkJcHVibGljIGludCBkZXBhcnR1cmVzOworCQlwdWJsaWMgaW50IGJhc2VfcG9wdWxhdGlvbjsKKwkJcHVibGljIFN0cmluZyBodWJfdG9wOworCQlwdWJsaWMgU3RyaW5nIGh1Yl9ib3R0b207CisJfQorfQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdXRpbGl0eS9nZW5lcmF0b3JzL0FpclRyYW5zcG9ydEdlbmVyYXRvcjIuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3NyYy9vcmcvZWNsaXBzZS9zdGVtL3V0aWxpdHkvZ2VuZXJhdG9ycy9BaXJUcmFuc3BvcnRHZW5lcmF0b3IyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2RlYzZkYwotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3NyYy9vcmcvZWNsaXBzZS9zdGVtL3V0aWxpdHkvZ2VuZXJhdG9ycy9BaXJUcmFuc3BvcnRHZW5lcmF0b3IyLmphdmEKQEAgLTAsMCArMSw2ODggQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5LmdlbmVyYXRvcnM7DQorDQoraW1wb3J0IGphdmEuaW8uQnVmZmVyZWRSZWFkZXI7DQoraW1wb3J0IGphdmEuaW8uRmlsZTsNCitpbXBvcnQgamF2YS5pby5GaWxlSW5wdXRTdHJlYW07DQoraW1wb3J0IGphdmEuaW8uRmlsZVJlYWRlcjsNCitpbXBvcnQgamF2YS5pby5GaWxlV3JpdGVyOw0KK2ltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOw0KK2ltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtUmVhZGVyOw0KK2ltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsNCitpbXBvcnQgamF2YS51dGlsLk1hcDsNCitpbXBvcnQgamF2YS51dGlsLlN0cmluZ1Rva2VuaXplcjsNCisNCisvKioNCisgKiBUaGUgdXRpbGl0eSB0YWtlcyBhcyBpbnB1dCBhIC5jc3YgZmlsZSB3aGVyZSBlYWNoIHJvdyBoYXMgdGhlIGZvbGxvd2luZyBjb2x1bW5zOg0KKyAqIA0KKyAqIDEuIEFpcnBvcnQgY29kZQ0KKyAqIDIuIFNURU0gSUQNCisgKiAzLiBUb3RhbCBwYXNzZW5nZXJzIChwZXIgeWVhcikNCisgKiA0LiBMYXQvTG9uIHN0cmluZw0KKyAqIDUuIExhdCAobnVtYmVyKQ0KKyAqIDYuIExvbiAobnVtYmVyKQ0KKyAqIA0KKyAqIEl0IGdlbmVyYXRlcyBtdWx0aXBsZSBzdGVtIC5wcm9wZXJ0aWVzIGZpbGVzIHRoYXQgdGhlIGFudCBzY3JpcHQgY29udmVydHMgdG8gRU1GIG1vZGVscy4gDQorICovDQorQFN1cHByZXNzV2FybmluZ3MoIm5scyIpDQorcHVibGljIGNsYXNzIEFpclRyYW5zcG9ydEdlbmVyYXRvcjIgew0KKwkNCisJc3RhdGljIFN0cmluZyBMUyA9IFN5c3RlbS5nZXRQcm9wZXJ0eSgibGluZS5zZXBhcmF0b3IiKTsgLy8kTk9OLU5MUy0xJA0KKwkNCisJcHJpdmF0ZSBzdGF0aWMgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz5sZXZlbDBJc29LZXlzID0gbmV3IEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+KCk7DQorCQ0KKwkvLyBXaGVuIHdlIGRvbid0IGhhdmUgZGF0YSwgdXNlIHRoaXMgbnVtYmVycy4gMTUvZGF5IG9yIDAuMDElIG9mIHBvcHVsYXRpb24sDQorCS8vIHdoaWNoZXZlciBpcyBzbWFsbGVzdA0KKwkNCisJcHJpdmF0ZSBzdGF0aWMgaW50IERFRkFVTFRfUEFTU0VOR0VSU19XSEVOX01JU1NJTkcgPSA1NDc1Ow0KKwkNCisJDQorCXByaXZhdGUgc3RhdGljIGludCBERUZBVUxUX0RJVklTSU9SID0gMzY1OyAvLyBOdW1iZXJzIGFyZSB5ZWFybHksIHdlIHdhbnQgZGFpbHkNCisJDQorCS8vIFdoYXQgcGVyY2VudGFnZSBvZiBwYXNzZW5nZXJzIGRlcGFydGluZyBmcm9tIGEgbGV2ZWwgMyAoY2l0eSkgcmVnaW9uIA0KKwkvLyBhcmUgZXhwZWN0ZWQgdG8gdHJhdmVsIHRvIGF0IGxlYXN0IGFub3RoZXIgY2l0eS4gVGhlcmUgYXJlIG5vIGludHJhLWNpdHkNCisJLy8gZmxpZ2h0cyBzbyB0aGlzIGlzIDEwMCAlDQorCQ0KKwlwcml2YXRlIHN0YXRpYyBkb3VibGUgREVGQVVMVF9QRVJDRU5UX1NUQVJUXzNfTEVWRUxfM19UT19MRVZFTF8yID0gMTAwOw0KKwkNCisJLy8gV2hhdCBwZXJjZW50YWdlIG9mIHBhc3NlbmdlcnMgd2hlbiBkZXBhcnRpbmcgZnJvbSBhIGxldmVsIDIgKGUuZy4gY291bnR5KSByZWdpb24NCisJLy8gYXJlIGV4cGVjdGVkIHRvIGFycml2ZSBhdCBhdCBsZWFzdCBhIGRpZmZlcmVudCBjb3VudHkuIFNpbmNlIGNyb3NzLWNvdW50eSBmbGlnaHRzDQorCS8vIGFyZSByYXJlIHdlIHNldCB0aGlzIHRvIDEwMC4NCisNCisJcHJpdmF0ZSBzdGF0aWMgZG91YmxlIERFRkFVTFRfUEVSQ0VOVF9TVEFSVF8zX0xFVkVMXzJfVE9fTEVWRUxfMSA9IDEwMDsNCisJDQorCS8vIFdoYXQgcGVyY2VudGFnZSBvZiBwYXNzZW5nZXJzIHdoZW4gZGVwYXJ0aW5nIGZyb20gYSBsZXZlbCAxIChlLmcuIHN0YXRlKSByZWdpb24NCisJLy8gYXJlIGV4cGVjdGVkIHRvIGFycml2ZSBhdCBhdCBsZWFzdCBhbm90aGVyIHN0YXRlLiBUaGUgYXZlcmFnZSBmb3IgVVMgaXMgNi43ICUNCisJLy8gb2YgZmxpZ2h0cyBhcmUgd2l0aGluIHRoZSBzYW1lIHN0YXRlIHNvIHdlIHVzZSB0aGF0IGdsb2JhbGx5Lg0KKw0KKwlwcml2YXRlIHN0YXRpYyBkb3VibGUgREVGQVVMVF9QRVJDRU5UX1NUQVJUXzNfTEVWRUxfMV9UT19MRVZFTF8wID0gOTMuMzsNCisJDQorCS8vIFdoYXQgcGVyY2VudGFnZSBvZiBwYXNzZW5nZXJzIHdoZW4gZGVwYXJ0aW5nIGZyb20gYSBsZXZlbCAwIChlLmcuIGNvdW50cnkpIHJlZ2lvbg0KKwkvLyBhcmUgZXhwZWN0ZWQgdG8gYXJyaXZlIGF0IGF0IGxlYXN0IGFub3RoZXIgY291bnRyeS4gVGhpcyBpcyB2ZXJ5IHRyaWNreS4NCisJLy8gSXQncyBpbnRlcm5hdGlvbmFsIHZlcnN1cyBkb21lc3RpYyBmbGlnaHRzIG5lZWRlZCBmb3IgYWxsIGNvdW50cmllcy4gV2UncmUNCisJLy8gZ3Vlc3NpbmcgNTAlLg0KKwkNCisJcHJpdmF0ZSBzdGF0aWMgZG91YmxlIERFRkFVTFRfUEVSQ0VOVF9TVEFSVF8zX0xFVkVMXzBfVE9fTEVWRUxfbTEgPSA1MDsNCisJDQorCS8vIFdoYXQgcGVyY2VudGFnZSBvZiBwYXNzZW5nZXJzIHdoZW4gZGVwYXJ0aW5nIGZyb20gYSBsZXZlbCAyIChlLmcuIGNvdW50eSkgcmVnaW9uDQorCS8vIGFyZSBleHBlY3RlZCB0byBhcnJpdmUgYXQgYXQgbGVhc3QgYSBkaWZmZXJlbnQgY291bnR5LiBTaW5jZSBjcm9zcy1jb3VudHkgZmxpZ2h0cw0KKwkvLyBhcmUgcmFyZSB3ZSBzZXQgdGhpcyB0byAxMDAuDQorCXByaXZhdGUgc3RhdGljIGRvdWJsZSBERUZBVUxUX1BFUkNFTlRfU1RBUlRfMl9MRVZFTF8yX1RPX0xFVkVMXzEgPSAxMDA7IA0KKwkvLyBXaGF0IHBlcmNlbnRhZ2Ugb2YgcGFzc2VuZ2VycyB3aGVuIGRlcGFydGluZyBmcm9tIGEgbGV2ZWwgMSAoZS5nLiBzdGF0ZSkgcmVnaW9uDQorCS8vIGFyZSBleHBlY3RlZCB0byBhcnJpdmUgYXQgYXQgbGVhc3QgYW5vdGhlciBzdGF0ZS4gVGhlIGF2ZXJhZ2UgZm9yIFVTIGlzIDYuNyAlDQorCS8vIG9mIGZsaWdodHMgYXJlIHdpdGhpbiB0aGUgc2FtZSBzdGF0ZSBzbyB3ZSB1c2UgdGhhdCBnbG9iYWxseS4NCisJcHJpdmF0ZSBzdGF0aWMgZG91YmxlIERFRkFVTFRfUEVSQ0VOVF9TVEFSVF8yX0xFVkVMXzFfVE9fTEVWRUxfMCA9IDkzLjM7DQorCS8vIFdoYXQgcGVyY2VudGFnZSBvZiBwYXNzZW5nZXJzIHdoZW4gZGVwYXJ0aW5nIGZyb20gYSBsZXZlbCAwIChlLmcuIGNvdW50cnkpIHJlZ2lvbg0KKwkvLyBhcmUgZXhwZWN0ZWQgdG8gYXJyaXZlIGF0IGF0IGxlYXN0IGFub3RoZXIgY291bnRyeS4gVGhpcyBpcyB2ZXJ5IHRyaWNreS4NCisJLy8gSXQncyBpbnRlcm5hdGlvbmFsIHZlcnN1cyBkb21lc3RpYyBmbGlnaHRzIG5lZWRlZCBmb3IgYWxsIGNvdW50cmllcy4gV2UncmUNCisJLy8gZ3Vlc3NpbmcgNTAlLg0KKwlwcml2YXRlIHN0YXRpYyBkb3VibGUgREVGQVVMVF9QRVJDRU5UX1NUQVJUXzJfTEVWRUxfMF9UT19MRVZFTF9tMSA9IDUwOw0KKwkNCisJLy8gVGhlIGFib3ZlIHBlcmNlbnRhZ2VzIGFyZSB3aGVuIHdlIGhhdmUgZGF0YSBvbiBsZXZlbCAyIChjb3VudGllcykgZm9yIGFpcnBvcnRzLg0KKwkvLyBXaGVuIHdlIG9ubHkgaGF2ZSBkYXRhIG9uIGxldmVsIDEgb3IgMCwgdGhlIHBlcmNlbnRhZ2VzIGFyZSBkaWZmZXJlbnQuIFRoZSANCisJLy8gbW90aXZhdGlvbiBiZWluZyBsZXNzIGRldGFpbGVkIGRhdGEgbWVhbnMgaXQncyBtb3JlIGxpa2VseSB0aGF0IGZsaWdodHMgYXJlDQorCS8vIG5hdGlvbmFsL2ludGVybmF0aW9uYWwuDQorCQ0KKwkvLyBBIGZsaWdodCBsZWF2aW5nIHRoZSBzdGF0ZSBpcyAxMDAgJSBsaWtlbHkgdG8gYXQgbGVhc3QgZ28gdG8gYW5vdGhlciBzdGF0ZQ0KKwlwcml2YXRlIHN0YXRpYyBkb3VibGUgREVGQVVMVF9QRVJDRU5UX1NUQVJUXzFfTEVWRUxfMV9UT19MRVZFTF8wID0gOTMuMzsNCisJDQorCS8vIEEgZmxpZ2h0IGRlcGFydGluZyB0aGUgY291bnRyeSBpcyA1MCAlIGxpa2VseSB0byBhcnJpdmUgaW4gYW5vdGhlciBjb3VudHJ5DQorCXByaXZhdGUgc3RhdGljIGRvdWJsZSBERUZBVUxUX1BFUkNFTlRfU1RBUlRfMV9MRVZFTF8wX1RPX0xFVkVMX20xID0gNTA7DQorDQorCS8vIElmIG9ubHkgaGF2ZSBhaXJwb3J0IGZvciB0aGUgY291bnRyeSBhbGwgZmxpZ2h0cyBhcmUgaW50ZXJuYXRpb25hbA0KKwlwcml2YXRlIHN0YXRpYyBkb3VibGUgREVGQVVMVF9QRVJDRU5UX1NUQVJUXzBfTEVWRUxfMF9UT19MRVZFTF9tMSA9IDEwMDsNCisJDQorCS8qKg0KKwkgKiBNYXAgc3RlbSBpZCB0byBwb3B1bGF0aW9uDQorCSAqLw0KKwlwcml2YXRlIHN0YXRpYyBNYXA8U3RyaW5nLEludGVnZXI+IHN0ZW1Qb3B1bGF0aW9uTWFwID0gbmV3IEhhc2hNYXA8U3RyaW5nLEludGVnZXI+KCk7DQorDQorCXN0YXRpYyB7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiVEwiLCAiVExTIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiVEsiLCAiVEtMIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiVEoiLCAiVEpLIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiVEgiLCAiVEhBIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiVEciLCAiVEdPIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiVEYiLCAiQVRGIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiR1kiLCAiR1VZIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiVEQiLCAiVENEIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiVEMiLCAiVENBIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiR1ciLCAiR05CIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiR1UiLCAiR1VNIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiR1QiLCAiR1RNIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiR1MiLCAiU0dTIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiR1IiLCAiR1JDIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiR1EiLCAiR05RIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiR1AiLCAiR0xQIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiU1oiLCAiU1daIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiU1kiLCAiU1lSIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiR04iLCAiR0lOIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiR00iLCAiR01CIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiR0wiLCAiR1JMIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiU1YiLCAiU0xWIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiU1QiLCAiU1RQIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiR0kiLCAiR0lCIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiR0giLCAiR0hBIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiU1IiLCAiU1VSIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiR0ciLCAiR0dZIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiU1EiLCAiU1FSIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiR0YiLCAiR1VGIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiR0UiLCAiR0VPIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiU08iLCAiU09NIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiR0QiLCAiR1JEIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiU04iLCAiU0VOIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiU00iLCAiU01SIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiR0IiLCAiR0JSIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiU0wiLCAiU0xFIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiR0EiLCAiR0FCIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiU0siLCAiU1ZLIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiU0oiLCAiU0pNIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiU0kiLCAiU1ZOIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiU0giLCAiU0hOIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiU0ciLCAiU0dQIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiU0UiLCAiU1dFIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiU0QiLCAiU0ROIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiU0MiLCAiU1lDIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiU0IiLCAiU0xCIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiU0EiLCAiU0FVIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiRlIiLCAiRlJBIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiRk8iLCAiRlJPIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiRk0iLCAiRlNNIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiUlciLCAiUldBIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiRksiLCAiRkxLIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiUlUiLCAiUlVTIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiRkoiLCAiRkpJIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiRkkiLCAiRklOIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiUlMiLCAiU1JCIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiUk8iLCAiUk9VIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiUkUiLCAiUkVVIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiRVQiLCAiRVRIIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiRVMiLCAiRVNQIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiRVIiLCAiRVJJIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiRUgiLCAiRVNIIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiRUciLCAiRUdZIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiRUUiLCAiRVNUIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiRUMiLCAiRUNVIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiRFoiLCAiRFpBIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiUUEiLCAiUUFUIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiRE8iLCAiRE9NIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiUFkiLCAiUFJZIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiRE0iLCAiRE1BIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiUFciLCAiUExXIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiREsiLCAiRE5LIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiREoiLCAiREpJIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiUFQiLCAiUFJUIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiUFMiLCAiUFNFIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiUFIiLCAiUFJJIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiREUiLCAiREVVIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiUE4iLCAiUENOIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiUE0iLCAiU1BNIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiUEwiLCAiUE9MIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiUEsiLCAiUEFLIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiUEgiLCAiUEhMIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiUEciLCAiUE5HIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiQ1oiLCAiQ1pFIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiUEYiLCAiUFlGIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiQ1kiLCAiQ1lQIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiUEUiLCAiUEVSIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiQ1giLCAiQ1hSIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiQ1YiLCAiQ1BWIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiQ1UiLCAiQ1VCIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiUEEiLCAiUEFOIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiQ1IiLCAiQ1JJIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiQ08iLCAiQ09MIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiQ04iLCAiQ0hOIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiQ00iLCAiQ01SIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiQ0wiLCAiQ0hMIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiQ0siLCAiQ09LIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiQ0kiLCAiQ0lWIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiQ0giLCAiQ0hFIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiQ0ciLCAiQ09HIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiQ0YiLCAiQ0FGIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiQ0QiLCAiQ09EIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiQ0MiLCAiQ0NLIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiT00iLCAiT01OIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiQ0EiLCAiQ0FOIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiQloiLCAiQkxaIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiQlkiLCAiQkxSIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiQlciLCAiQldBIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiQlYiLCAiQlZUIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiQlQiLCAiQlROIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiQlMiLCAiQkhTIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiQlIiLCAiQlJBIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiQk8iLCAiQk9MIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiTloiLCAiTlpMIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiQk4iLCAiQlJOIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiQk0iLCAiQk1VIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiQkoiLCAiQkVOIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiTlUiLCAiTklVIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiQkkiLCAiQkRJIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiQkgiLCAiQkhSIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiQkciLCAiQkdSIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiTlIiLCAiTlJVIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiQkYiLCAiQkZBIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiQkUiLCAiQkVMIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiTlAiLCAiTlBMIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiQkQiLCAiQkdEIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiTk8iLCAiTk9SIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiQkIiLCAiQlJCIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiQkEiLCAiQklIIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiTkwiLCAiTkxEIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiWlciLCAiWldFIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiTkkiLCAiTklDIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiTkciLCAiTkdBIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiQVoiLCAiQVpFIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiTkYiLCAiTkZLIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiTkUiLCAiTkVSIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiQVgiLCAiQUxBIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiQVciLCAiQUJXIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiTkMiLCAiTkNMIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiWk0iLCAiWk1CIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiQVUiLCAiQVVTIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiTkEiLCAiTkFNIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiQVQiLCAiQVVUIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiQVMiLCAiQVNNIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiQVIiLCAiQVJHIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiQVEiLCAiQVRBIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiQU8iLCAiQUdPIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiTVoiLCAiTU9aIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiQU4iLCAiQU5UIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiTVkiLCAiTVlTIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiQU0iLCAiQVJNIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiTVgiLCAiTUVYIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiQUwiLCAiQUxCIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiTVciLCAiTVdJIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiTVYiLCAiTURWIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiTVUiLCAiTVVTIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiWkEiLCAiWkFGIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiQUkiLCAiQUlBIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiTVQiLCAiTUxUIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiTVMiLCAiTVNSIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiQUciLCAiQVRHIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiTVIiLCAiTVJUIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiQUYiLCAiQUZHIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiTVEiLCAiTVRRIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiQUUiLCAiQVJFIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiTVAiLCAiTU5QIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiQUQiLCAiQU5EIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiTU8iLCAiTUFDIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiTU4iLCAiTU5HIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiTU0iLCAiTU1SIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiTUwiLCAiTUxJIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiTUsiLCAiTUtEIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiWVQiLCAiTVlUIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiTUgiLCAiTUhMIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiTUciLCAiTURHIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiTUUiLCAiTU5FIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiTUQiLCAiTURBIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiTUMiLCAiTUNPIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiTUEiLCAiTUFSIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiTFkiLCAiTEJZIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiWUUiLCAiWUVNIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiTFYiLCAiTFZBIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiTFUiLCAiTFVYIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiTFQiLCAiTFRVIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiTFMiLCAiTFNPIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiTFIiLCAiTEJSIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiTEsiLCAiTEtBIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiTEkiLCAiTElFIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiTEMiLCAiTENBIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiTEIiLCAiTEJOIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiTEEiLCAiTEFPIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiS1oiLCAiS0FaIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiS1kiLCAiQ1lNIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiS1ciLCAiS1dUIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiS1IiLCAiS09SIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiS1AiLCAiUFJLIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiS04iLCAiS05BIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiS00iLCAiQ09NIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiS0kiLCAiS0lSIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiS0giLCAiS0hNIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiV1MiLCAiV1NNIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiS0ciLCAiS0daIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiS0UiLCAiS0VOIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiV0YiLCAiV0xGIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiSlAiLCAiSlBOIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiSk8iLCAiSk9SIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiSk0iLCAiSkFNIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiVlUiLCAiVlVUIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiSkUiLCAiSkVZIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiVk4iLCAiVk5NIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiVkkiLCAiVklSIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiVkciLCAiVkdCIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiVkUiLCAiVkVOIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiVkMiLCAiVkNUIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiVkEiLCAiVkFUIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiSVQiLCAiSVRBIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiSVMiLCAiSVNMIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiSVIiLCAiSVJOIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiSVEiLCAiSVJRIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiSU8iLCAiSU9UIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiVVoiLCAiVVpCIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiSU4iLCAiSU5EIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiVVkiLCAiVVJZIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiSU0iLCAiSU1OIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiSUwiLCAiSVNSIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiVVMiLCAiVVNBIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiSUUiLCAiSVJMIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiSUQiLCAiSUROIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiVU0iLCAiVU1JIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiVUciLCAiVUdBIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiSFUiLCAiSFVOIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiVUEiLCAiVUtSIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiSFQiLCAiSFRJIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiSFIiLCAiSFJWIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiVFoiLCAiVFpBIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiSE4iLCAiSE5EIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiSE0iLCAiSE1EIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiVFciLCAiVFdOIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiVFYiLCAiVFVWIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiSEsiLCAiSEtHIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiVFQiLCAiVFRPIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiVFIiLCAiVFVSIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiVE8iLCAiVE9OIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiVE4iLCAiVFVOIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiVE0iLCAiVEtNIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiT0giLCAiT01OIik7DQorCX0NCisJLyoqDQorCSAqIA0KKwkgKiBAcGFyYW0gYXJncw0KKwkgKi8NCisJQFN1cHByZXNzV2FybmluZ3MoeyAibmxzIiB9KQ0KKwlwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmcgW10gYXJncykgew0KKwkJaWYoYXJncy5sZW5ndGggPCAxKSB7DQorCQkJU3lzdGVtLmVyci5wcmludGxuKCJVc2FnZTogQWlyVHJhbnNwb3J0R2VuZXJhdG9yMiA8aW5wdXQgLnByb3BlcnRpZXMgZmlsZT4iKTsNCisJCQlTeXN0ZW0uZXhpdCgtMSk7DQorCQl9DQorCQkNCisJCXRyeSB7DQorCQlTdHJpbmcgaW5wdXRGaWxlID0gYXJnc1swXTsNCisJCQ0KKwkJRmlsZSBwcm9wZmlsZSA9IG5ldyBGaWxlKGlucHV0RmlsZSk7DQorCQlpZighcHJvcGZpbGUuZXhpc3RzKCkpIHsNCisJCQlTeXN0ZW0uZXJyLnByaW50bG4oIkVycm9yLCAiK2lucHV0RmlsZSsiIGRvZXNuJ3QgZXhpc3QiKTsNCisJCQlTeXN0ZW0uZXhpdCgtMSk7DQorCQl9DQorCQkNCisJCXJlYWRTdGVtUG9wdWxhdGlvbk1hcChQb3B1bGF0aW9uUGF0aCk7DQorCQkNCisJCUJ1ZmZlcmVkUmVhZGVyIGlyZWFkZXIgPSBuZXcgQnVmZmVyZWRSZWFkZXIobmV3IElucHV0U3RyZWFtUmVhZGVyKG5ldyBGaWxlSW5wdXRTdHJlYW0ocHJvcGZpbGUpKSk7DQorCQkgICAJCQkNCisJCUhhc2hNYXA8U3RyaW5nLCBGaWxlV3JpdGVyPiB3cml0ZXJzID0gbmV3IEhhc2hNYXA8U3RyaW5nLCBGaWxlV3JpdGVyPigpOw0KKwkJSGFzaE1hcDxTdHJpbmcsIEludGVnZXI+IGNvdW50ZXJzID0gbmV3IEhhc2hNYXA8U3RyaW5nLCBJbnRlZ2VyPigpOw0KKwkJSGFzaE1hcDxTdHJpbmcsIEludGVnZXI+IHRvdGFsUGFzc2VuZ2VycyA9IG5ldyBIYXNoTWFwPFN0cmluZywgSW50ZWdlcj4oKTsNCisJCUhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+IGFpcnBvcnRDb2RlcyA9IG5ldyBIYXNoTWFwPFN0cmluZywgU3RyaW5nPigpOw0KKwkJDQorCQlTdHJpbmcgbGluZTsNCisJCXdoaWxlKChsaW5lPWlyZWFkZXIucmVhZExpbmUoKSkgIT0gbnVsbCkgew0KKwkJICBTdHJpbmdUb2tlbml6ZXIgc3QgPSBuZXcgU3RyaW5nVG9rZW5pemVyKGxpbmUsICIsIik7DQorCQkgIFN0cmluZyBhaXJwb3J0Q29kZSA9IHN0Lm5leHRUb2tlbigpLnRyaW0oKTsNCisJCSAgaWYoYWlycG9ydENvZGUuc3RhcnRzV2l0aCgiIyIpKSBjb250aW51ZTsgLy8gc2tpcA0KKwkJICBTdHJpbmcgc3RlbUNvZGUgPSBzdC5uZXh0VG9rZW4oKS50cmltKCk7DQorCQkgIC8vIHRyaW0gYXQgZmlyc3Qgc3BhY2UgaWYgZm91bmQNCisJCQ0KKwkJICBpZihzdGVtQ29kZS5pbmRleE9mKCIgIikgIT0gLTEpDQorCQkJICBzdGVtQ29kZSA9IHN0ZW1Db2RlLnN1YnN0cmluZygwLCBzdGVtQ29kZS5pbmRleE9mKCIgIikpOw0KKwkJICANCisJCSAgaW50IHN0YXJ0TGV2ZWwgPSBHZW5VdGlscy5nZXRMZXZlbChzdGVtQ29kZSk7DQorCQkgIGludCBwYXNzZW5nZXJzID0gSW50ZWdlci5wYXJzZUludChzdC5uZXh0VG9rZW4oKS50cmltKCkpOw0KKwkJICAvL2ludCBwb3B1bGF0aW9uID0gSW50ZWdlci5wYXJzZUludChzdC5uZXh0VG9rZW4oKS50cmltKCkpOw0KKwkJICBib29sZWFuIGdlbmVyYXRlZCA9IChwYXNzZW5nZXJzID09IC0xKTsNCisJCSAgSW50ZWdlciBQT1BVTEFUSU9OID0gc3RlbVBvcHVsYXRpb25NYXAuZ2V0KHN0ZW1Db2RlKTsNCisJCSAgaWYoUE9QVUxBVElPTiA9PSBudWxsICYmIGdlbmVyYXRlZCkgew0KKwkJCSAgU3lzdGVtLmVyci5wcmludGxuKCJFcnJvciwgcG9wdWxhdGlvbiBub3QgZm91bmQgZm9yICIrc3RlbUNvZGUpOw0KKwkJCSAgU3lzdGVtLmV4aXQoLTEpOw0KKwkJICB9DQorCQkgIGludCBwb3B1bGF0aW9uID0gMDsNCisJCSAgaWYoUE9QVUxBVElPTiAhPSBudWxsKSBwb3B1bGF0aW9uID0gUE9QVUxBVElPTi5pbnRWYWx1ZSgpOw0KKwkJICAvLyBTa2lwIHJlc3QNCisJCSAgU3RyaW5nIHMgPSBudWxsOw0KKwkJICB3aGlsZShzdC5oYXNNb3JlVG9rZW5zKCkpIHM9c3QubmV4dFRva2VuKCk7DQorCQkgIA0KKwkJDQorCQkgIC8vIDAuMDEgJSBwZXIgZGF5IG9yIDE1IC8gZGF5LCB3aGljaGV2ZXIgaXMgc21hbGxlc3QNCisJCSAgZG91YmxlIHRocmVzaG9sZCA9ICgoZG91YmxlKXBvcHVsYXRpb24qKGRvdWJsZSlERUZBVUxUX0RJVklTSU9SKS8xMDAwMC4wOw0KKwkJICANCisJCSAgaWYoZ2VuZXJhdGVkICYmIHRocmVzaG9sZCA8IERFRkFVTFRfUEFTU0VOR0VSU19XSEVOX01JU1NJTkcpDQorCQkJICBwYXNzZW5nZXJzID0gKGludCl0aHJlc2hvbGQ7DQorCQkgIGVsc2UgaWYoZ2VuZXJhdGVkKSANCisJCQkgIHBhc3NlbmdlcnMgPSBERUZBVUxUX1BBU1NFTkdFUlNfV0hFTl9NSVNTSU5HOw0KKwkJICBlbHNlIHBhc3NlbmdlcnMgPSBwYXNzZW5nZXJzIC8gMjsgLy8gVG90YWwgdHJvdWdocHV0LCB3ZSB3YW50IGFycml2YWxzL2RlcGFydHVyZXMgc28gZGl2aWRlIGJ5IDINCisJCSAgCSAgDQorCQkgIFV0aWxMb2dnZXIubG9nSW5mb3JtYXRpb24oc3RlbUNvZGUrIiBQb3B1bGF0aW9uOiAiK3BvcHVsYXRpb24rICIgcGFzc2VuZ2VyczogIitwYXNzZW5nZXJzKyIgZ2VuZXJhdGVkOiAiK2dlbmVyYXRlZCk7DQorCQkgIHdoaWxlKHN0ZW1Db2RlICE9IG51bGwpIHsNCisJCQkgIGludCBsZXZlbCA9IEdlblV0aWxzLmdldExldmVsKHN0ZW1Db2RlKTsNCisJCQkgIGRvdWJsZSBmYWN0b3IgPSAxLjA7DQorCQkJICBpZihsZXZlbCA9PSAzICYmIHN0YXJ0TGV2ZWwgPT0gMykgZmFjdG9yID0gREVGQVVMVF9QRVJDRU5UX1NUQVJUXzNfTEVWRUxfM19UT19MRVZFTF8yLzEwMC4wOw0KKwkJCSAgZWxzZSBpZihsZXZlbCA9PSAyICYmIHN0YXJ0TGV2ZWwgPT0gMykgZmFjdG9yID0gREVGQVVMVF9QRVJDRU5UX1NUQVJUXzNfTEVWRUxfMl9UT19MRVZFTF8xLzEwMC4wOw0KKwkJCSAgZWxzZSBpZihsZXZlbCA9PSAxICYmIHN0YXJ0TGV2ZWwgPT0gMykgZmFjdG9yID0gREVGQVVMVF9QRVJDRU5UX1NUQVJUXzNfTEVWRUxfMV9UT19MRVZFTF8wLzEwMC4wOw0KKwkJCSAgZWxzZSBpZihsZXZlbCA9PSAwICYmIHN0YXJ0TGV2ZWwgPT0gMykgZmFjdG9yID0gREVGQVVMVF9QRVJDRU5UX1NUQVJUXzNfTEVWRUxfMF9UT19MRVZFTF9tMS8xMDAuMDsNCisJCQkgIGVsc2UgaWYobGV2ZWwgPT0gMiAmJiBzdGFydExldmVsID09IDIpIGZhY3RvciA9IERFRkFVTFRfUEVSQ0VOVF9TVEFSVF8yX0xFVkVMXzJfVE9fTEVWRUxfMS8xMDAuMDsNCisJCQkgIGVsc2UgaWYobGV2ZWwgPT0gMSAmJiBzdGFydExldmVsID09IDIpIGZhY3RvciA9IERFRkFVTFRfUEVSQ0VOVF9TVEFSVF8yX0xFVkVMXzFfVE9fTEVWRUxfMC8xMDAuMDsNCisJCQkgIGVsc2UgaWYobGV2ZWwgPT0gMCAmJiBzdGFydExldmVsID09IDIpIGZhY3RvciA9IERFRkFVTFRfUEVSQ0VOVF9TVEFSVF8yX0xFVkVMXzBfVE9fTEVWRUxfbTEvMTAwLjA7DQorCQkJICBlbHNlIGlmKGxldmVsID09IDEgJiYgc3RhcnRMZXZlbCA9PSAxKSBmYWN0b3IgPSBERUZBVUxUX1BFUkNFTlRfU1RBUlRfMV9MRVZFTF8xX1RPX0xFVkVMXzAvMTAwLjA7DQorCQkJICBlbHNlIGlmKGxldmVsID09IDAgJiYgc3RhcnRMZXZlbCA9PSAxKSBmYWN0b3IgPSBERUZBVUxUX1BFUkNFTlRfU1RBUlRfMV9MRVZFTF8wX1RPX0xFVkVMX20xLzEwMC4wOw0KKwkJCSAgZWxzZSBpZihsZXZlbCA9PSAwICYmIHN0YXJ0TGV2ZWwgPT0gMCkgZmFjdG9yID0gREVGQVVMVF9QRVJDRU5UX1NUQVJUXzBfTEVWRUxfMF9UT19MRVZFTF9tMS8xMDAuMDsNCisJCQkJICAJICANCisJCQkgIGlmKHRvdGFsUGFzc2VuZ2Vycy5jb250YWluc0tleShzdGVtQ29kZSkpDQorCQkJCSAgdG90YWxQYXNzZW5nZXJzLnB1dChzdGVtQ29kZSwgKGludCkodG90YWxQYXNzZW5nZXJzLmdldChzdGVtQ29kZSkrcGFzc2VuZ2VycypmYWN0b3IpKTsNCisJCQkgIGVsc2UNCisJCQkJICB0b3RhbFBhc3NlbmdlcnMucHV0KHN0ZW1Db2RlLCAoaW50KShwYXNzZW5nZXJzKmZhY3RvcikpOw0KKwkJCSAgDQorCQkJICBpZihhaXJwb3J0Q29kZXMuY29udGFpbnNLZXkoc3RlbUNvZGUpKQ0KKwkJCQkgIGFpcnBvcnRDb2Rlcy5wdXQoc3RlbUNvZGUsIGFpcnBvcnRDb2Rlcy5nZXQoc3RlbUNvZGUpKyIsICIrYWlycG9ydENvZGUgKyAoKGdlbmVyYXRlZCk/IihFc3RpbWF0ZWQpIjoiKEFjdHVhbCkiKSk7DQorCQkJICBlbHNlDQorCQkJCSAgYWlycG9ydENvZGVzLnB1dChzdGVtQ29kZSwgYWlycG9ydENvZGUgKyAoKGdlbmVyYXRlZCk/IihFc3RpbWF0ZWQpIjoiKEFjdHVhbCkiKSk7DQorCQkJICANCisJCQkgIHN0ZW1Db2RlID0gR2VuVXRpbHMudXBDb2RlKHN0ZW1Db2RlKTsNCisJCSAgfQ0KKwkJfQ0KKwkJaXJlYWRlci5jbG9zZSgpOw0KKwkJDQorCQlmb3IoU3RyaW5nIHN0ZW1Db2RlOnRvdGFsUGFzc2VuZ2Vycy5rZXlTZXQoKSkgew0KKwkJICBpbnQgbGV2ZWwgPSBHZW5VdGlscy5nZXRMZXZlbChzdGVtQ29kZSk7DQorCQkgIC8vIFR1cm4gdHdvIGxldHRlciBjb3VudHJ5IGNvZGUgaW50byB0aHJlZSBsZXR0ZXIgY291bnRyeSBjb2RlDQorCQkgIFN0cmluZyBjb3VudHJ5ID0gR2VuVXRpbHMuZXh0cmFjdEFscGhhMShzdGVtQ29kZSk7DQorCQkgIGRvdWJsZSBudW1QYXNzZW5nZXJzID0gdG90YWxQYXNzZW5nZXJzLmdldChzdGVtQ29kZSk7DQorCQkgIG51bVBhc3NlbmdlcnMgLz0gREVGQVVMVF9ESVZJU0lPUjsNCisJCSAgDQorCQkgIGlmKGNvdW50cnkubGVuZ3RoKCkgPT0gMikgDQorCQkJICBjb3VudHJ5ID0gbGV2ZWwwSXNvS2V5cy5nZXQoY291bnRyeSk7DQorCQkgIGlmKGNvdW50cnkgPT0gbnVsbCkgew0KKwkJCSAgU3lzdGVtLmVyci5wcmludGxuKCJFcnJvciwgY291bnRyeSBjb2RlIGluIDogIitzdGVtQ29kZSsiIG5vdCByZWNvZ25pemVkIik7DQorCQkJICBjb250aW51ZTsNCisJCSAgfQ0KKwkJICBTdHJpbmcgZmlsZW5hbWU9bnVsbDsNCisJCSAgaWYobGV2ZWwgPT0gMCkNCisJCQkgIGZpbGVuYW1lID0gIlpaWl8tMV9aWlpfMC5wcm9wZXJ0aWVzIjsNCisJCSAgZWxzZSBmaWxlbmFtZSA9IGNvdW50cnkrIl8iKyhsZXZlbC0xKSsiXyIrY291bnRyeSsiXyIrbGV2ZWwrIi5wcm9wZXJ0aWVzIjsNCisJCSAgRmlsZVdyaXRlciBmdyA9IG51bGw7DQorCQkgIGlmKHdyaXRlcnMuY29udGFpbnNLZXkoZmlsZW5hbWUpKQ0KKwkJCSAgZncgPSB3cml0ZXJzLmdldChmaWxlbmFtZSk7DQorCQkgIGVsc2Ugew0KKwkJCSAgZncgPSBuZXcgRmlsZVdyaXRlcihmaWxlbmFtZSk7DQorCQkJICB3cml0ZXJzLnB1dChmaWxlbmFtZSwgZncpOw0KKwkJCSAgd3JpdGVySGVhZGVyKGZ3LCBmaWxlbmFtZSwgY291bnRyeSwgbGV2ZWwpOw0KKwkJICB9DQorCQkgIFN0cmluZyBwYXJlbnRLZXk9bnVsbCwgY2hpbGRLZXk9bnVsbDsNCisJCSAgDQorCQkgIGlmKGxldmVsID49IDIpIHsNCisJCQkgIHBhcmVudEtleSA9IHN0ZW1Db2RlLnN1YnN0cmluZygwLCBzdGVtQ29kZS5sYXN0SW5kZXhPZigiLSIpKTsNCisJCQkgIGNoaWxkS2V5ID0gc3RlbUNvZGU7DQorCQkgIH0gZWxzZSBpZiAobGV2ZWwgPT0gMSkgeyANCisJCQkgIHBhcmVudEtleSA9IGNvdW50cnk7DQorCQkJICBjaGlsZEtleSA9IHN0ZW1Db2RlOw0KKwkJICB9IGVsc2UgaWYgKGxldmVsID09IDApIHsNCisJCQkgIHBhcmVudEtleSA9ICJaWloiOw0KKwkJCSAgY2hpbGRLZXkgPSBjb3VudHJ5Ow0KKwkJICB9DQorCQkgIGludCBsaW5lY291bnQ7DQorCQkgIGlmKGNvdW50ZXJzLmNvbnRhaW5zS2V5KGZpbGVuYW1lKSkgew0KKwkJCSAgbGluZWNvdW50ID0gY291bnRlcnMuZ2V0KGZpbGVuYW1lKTsNCisJCQkgIGNvdW50ZXJzLnB1dChmaWxlbmFtZSwgbGluZWNvdW50KzEpOw0KKwkJICB9DQorCQkgIGVsc2Ugew0KKwkJCSAgbGluZWNvdW50ID0gMDsNCisJCQkgIGNvdW50ZXJzLnB1dChmaWxlbmFtZSwgbGluZWNvdW50KzEpOw0KKwkJICB9DQorCQkgIA0KKwkJICBmdy53cml0ZSgiIyAiK2FpcnBvcnRDb2Rlcy5nZXQoc3RlbUNvZGUpK0xTKTsNCisJCSAgZncud3JpdGUobGluZWNvdW50KyIgPSAiKTsNCisJCSAgZncud3JpdGUocGFyZW50S2V5KTsNCisJCSAgZncud3JpdGUoJywnKTsNCisJCSAgZncud3JpdGUoY2hpbGRLZXkpOw0KKwkJICBmdy53cml0ZSgnLCcpOw0KKwkJICBmdy53cml0ZShudW1QYXNzZW5nZXJzKyIiKTsNCisJCSAgZncud3JpdGUoJywnKTsNCisJCSAgZncud3JpdGUobnVtUGFzc2VuZ2VycysiIik7DQorCQkgIGZ3LndyaXRlKExTKTsNCisJCSAgVXRpbExvZ2dlci5sb2dJbmZvcm1hdGlvbihzdGVtQ29kZSsiIHBhc3NlbmdlcnM6ICIrbnVtUGFzc2VuZ2Vycyk7DQorCQl9ICAvLyBGb3IgZWFjaCBsaW5lDQorCQkNCisJCQ0KKwkJZm9yKEZpbGVXcml0ZXIgZnc6d3JpdGVycy52YWx1ZXMoKSkgew0KKwkJCWZ3LmZsdXNoKCk7DQorCQkJZncuY2xvc2UoKTsNCisJCX0JCQ0KKwl9IGNhdGNoKEV4Y2VwdGlvbiBlKSB7DQorCQllLnByaW50U3RhY2tUcmFjZSgpOw0KKwl9DQorCQkNCisJfSAvLyBtYWluDQorCQ0KKwkNCisJQFN1cHByZXNzV2FybmluZ3MoIm5scyIpDQorCXB1YmxpYyBzdGF0aWMgdm9pZCB3cml0ZXJIZWFkZXIoRmlsZVdyaXRlciBmdywgU3RyaW5nIGZpbGVuYW1lLCBTdHJpbmcgY291bnRyeSwgaW50IGxldmVsKSB0aHJvd3MgSU9FeGNlcHRpb24gew0KKwkJU3RyaW5nIGN0cnkgPSBjb3VudHJ5Ow0KKwkJaWYobGV2ZWwgPT0gMCkgY3RyeSA9ICJaWloiOw0KKwkJZncud3JpdGUoIiMgIitmaWxlbmFtZStMUyk7DQorCQlmdy53cml0ZSgiIy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIitMUyk7IA0KKwkJZncud3JpdGUoIiMgKiBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuIitMUyk7IA0KKwkJZncud3JpdGUoIiMgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIitMUyk7IA0KKwkJZncud3JpdGUoIiMgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAiK0xTKTsgDQorCQlmdy53cml0ZSgiIyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0IitMUyk7DQorCQlmdy53cml0ZSgiIyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sICIrTFMpOw0KKwkJZncud3JpdGUoIiMgKiAiK0xTKTsNCisJCWZ3LndyaXRlKCIjICogQ29udHJpYnV0b3JzIitMUyk7IA0KKwkJZncud3JpdGUoIiMgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIitMUyk7IA0KKwkJZncud3JpdGUoIiMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8iK0xTKTsgDQorCQlmdy53cml0ZShMUyk7CQkgDQorCQlmdy53cml0ZSgiIyBUaGlzIGlzIHRoZSBuYW1lIG9mIHRoZSBjbGFzcyB0aGF0IHdpbGwgaW50ZXJwcmV0IHRoZSByZXN0IG9mIHRoZSBmaWxlJ3MgY29udGVudHMiK0xTKTsgDQorCQlmdy53cml0ZSgiUkVDT1JEX0NMQVNTTkFNRSA9ICBvcmcuZWNsaXBzZS5zdGVtLmludGVybmFsLmRhdGEuZ2VvZ3JhcGh5LmluZnJhc3RydWN0dXJlLnRyYW5zcG9ydGF0aW9uLnNwZWNpZmljYXRpb25zLkFpclRyYW5zcG9ydGF0aW9uR2VvZ3JhcGhpY1JlbGF0aW9uc2hpcFByb3BlcnR5RmlsZVNwZWNpZmljYXRpb24iK0xTKTsNCisJCWZ3LndyaXRlKExTKTsgDQorCQlmdy53cml0ZSgiIyBUaGUgdGl0bGUgb2YgdGhlIHJlbGF0aW9uc2hpcCIrTFMpOyANCisJCWZ3LndyaXRlKCJUSVRMRSA9IEFpciB0cmFuc3BvcnQgYmV0d2VlbiAiK2N0cnkrIigiKyhsZXZlbC0xKSsiKSBhbmQgIitjdHJ5KyIoIitsZXZlbCsiKSIpOyANCisJCWZ3LndyaXRlKExTKTsgDQorCQlmdy53cml0ZSgiIyBUaGlzIGlzIHRoZSBkYXRlIHJhbmdlIGZvciB3aGljaCB0aGUgdmFsdWVzIGluIHRoaXMgZmlsZSBhcmUgdmFsaWQiK0xTKTsgDQorCQlmdy53cml0ZSgiIyBTZWUgaHR0cDovL3B1cmwub3JnL2RjL3Rlcm1zLzEuMS92YWxpZCIrTFMpOyANCisJCWZ3LndyaXRlKCJWQUxJRCA9IHN0YXJ0PTIwMDAtMDEtMDE7IGVuZD0yMDA4LTEyLTMxOyIrTFMpOw0KKwkJZncud3JpdGUoTFMpOyANCisJCWZ3LndyaXRlKCIjIFRoZSBkYXRhIGlzIGRlcml2ZWQgZnJvbSB0aGUgZm9sbG93aW5nIHByaW1hcnkgc291cmNlIitMUyk7IA0KKwkJZncud3JpdGUoIiNTT1VSQ0UgPSBodHRwOi8vd3d3LmF6d29ybGRhaXJwb3J0cy5jb20iK0xTKTsgDQorCQlmdy53cml0ZShMUyk7IA0KKwkJZncud3JpdGUoIiMgSVNPMzE2Ni0xIGFscGhhMyBrZXlzIGFuZCBsZXZlbHMgb2YgcmVsYXRpb25zaGlwIitMUyk7IA0KKwkJZncud3JpdGUoIklTT0tFWV8wID0gIitjdHJ5K0xTKTsgDQorCQlmdy53cml0ZSgiSVNPS0VZXzBfTEVWRUwgPSAiKyhsZXZlbCAtMSkrTFMpOyANCisJCWZ3LndyaXRlKCJJU09LRVlfMSA9ICIrY3RyeStMUyk7IA0KKwkJZncud3JpdGUoIklTT0tFWV8xX0xFVkVMID0gIitsZXZlbCtMUyk7DQorCQlmdy53cml0ZShMUyk7IA0KKwkJZncud3JpdGUoIiMgVGhlIG1vZGUgb2YgdHJhbnNwb3J0YXRpb24gIitMUyk7DQorCQlmdy53cml0ZSgiVFJBTlNQT1JUX01PREUgPSBhaXIiK0xTKTsgDQorCQlmdy53cml0ZShMUyk7DQorCQlmdy53cml0ZSgiIyBUaGUgcG9wdWxhdGlvbiBiZWluZyB0cmFuc3BvcnRlZCIrTFMpOyANCisJCWZ3LndyaXRlKCJQT1BVTEFUSU9OX0lERU5USUZJRVIgPSBodW1hbiIrTFMpOyANCisJCWZ3LndyaXRlKExTKTsNCisJCWZ3LndyaXRlKCIjIFRoZSB0aW1lIHBlcmlvZCBmb3IgdGhlIHJhdGUgaW4gbWlsbGlzZWNvbmRzICIrTFMpOyANCisJCWZ3LndyaXRlKCJSQVRFX1RJTUVfUEVSSU9EID0gODY0MDAwMDAiK0xTKTsgDQorCQlmdy53cml0ZShMUyk7IA0KKwkJZncud3JpdGUoIiNBdmVyYWdlIHRpbWUgaW4gdHJhbnNwb3J0YXRpb24gbmV0d29yayIrTFMpOyANCisJCWZ3LndyaXRlKCJBVkdfVElNRV9JTl9TWVNURU0gPSAxIitMUyk7IA0KKwkJZncud3JpdGUoTFMpOw0KKwkJIA0KKwkJZncud3JpdGUoIiMgUmVjb3JkIE5vLiA9IEVuY2xvc2luZyBOb2RlIEtleSwgIE5vZGUgS2V5LCBBcnJpdmFsUmF0ZSAoaW5kaXZpZHVhbHMgcGVyIFJBVEVfVElNRV9QRVJJT0QpLCBEZXBhcnR1cmVSYXRlKEluZGl2aWR1YWxzIHBlciBSQVRFX1RJTUVfUEVSSU9EKSIrTFMpOyANCisJCWZ3LmZsdXNoKCk7DQorCX0NCisNCisJcHVibGljIHN0YXRpYyBTdHJpbmcgUG9wdWxhdGlvblBhdGggPSAiQzovc3RlbXdzL29yZy5lY2xpcHNlLnN0ZW0uaW50ZXJuYWwuZGF0YS5nZW9ncmFwaHkucG9wdWxhdGlvbi5odW1hbi9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5LyI7DQorDQorCS8qKg0KKwkgKiByZWFkIGluIHRoZSBzdGVtIHBvcHVsYXRpb24gZGF0YQ0KKwkgKiANCisJICovDQorCXB1YmxpYyBzdGF0aWMgdm9pZCByZWFkU3RlbVBvcHVsYXRpb25NYXAoU3RyaW5nIHBhdGgpIHsNCisJCWZpbmFsIFN0cmluZyBOT1RGT1VORCA9ICJ4eCI7DQorCQlTdHJpbmcgdXNlTmFtZSA9IE5PVEZPVU5EOw0KKw0KKwkJdHJ5IHsNCisJCQlGaWxlIGYgPSBuZXcgRmlsZShwYXRoKTsNCisNCisJCQlpZihmLmlzRGlyZWN0b3J5KCkpIHsNCisJCQkJU3RyaW5nW10gc3ViRm9sZGVycyA9IGYubGlzdCgpOw0KKwkJCQlmb3IoaW50IGk9MDtpPHN1YkZvbGRlcnMubGVuZ3RoOysraSkgDQorCQkJCQlyZWFkU3RlbVBvcHVsYXRpb25NYXAocGF0aCtGaWxlLnNlcGFyYXRvcitzdWJGb2xkZXJzW2ldKTsNCisJCQl9IGVsc2Ugew0KKwkJCQlpZiAoZi5nZXROYW1lKCkuZW5kc1dpdGgoIi5wcm9wZXJ0aWVzIikpIHsNCisJCQkJCQkJCQkJCQ0KKwkJCQkJQnVmZmVyZWRSZWFkZXIgZmlsZVJlYWRlciA9IG9wZW5SZWFkZXIoZik7DQorDQorCQkJCQkvLyBBZGQgYWxsIHRoZSBzb3VyY2UgVVJMcyBmb3IgdGhpcyBjb3VudHJ5Lg0KKwkJCQkJaWYgKGZpbGVSZWFkZXIgIT0gbnVsbCkgew0KKwkJCQkJCVN0cmluZyBidWZmZXIgPSBudWxsOw0KKwkJCQkJCXdoaWxlIChFT0YoYnVmZmVyID0gZmlsZVJlYWRlci5yZWFkTGluZSgpKSAhPSB0cnVlKSB7DQorDQorCQkJCQkJCS8vIFV0aWxMb2dnZXIubG9nSW5mb3JtYXRpb24oIiAiK2J1ZmZlcik7DQorCQkJCQkJCS8vIFRva2VuaXplDQorCQkJCQkJCS8vIFJFSkVDVCBTVFJJTkdTDQorCQkJCQkJCWZpbmFsIFN0cmluZyBzMSA9ICJSRUNPUkRfQ0xBU1NOQU1FIjsNCisJCQkJCQkJZmluYWwgU3RyaW5nIHMyID0gIklTT0tFWSI7DQorCQkJCQkJCWZpbmFsIFN0cmluZyBzMyA9ICJBRE1JTl9MRVZFTCI7DQorCQkJCQkJCWZpbmFsIFN0cmluZyBzNCA9ICJWQUxJRCI7DQorCQkJCQkJCWZpbmFsIFN0cmluZyBzNSA9ICJTT1VSQ0UiOw0KKwkJCQkJCQlmaW5hbCBTdHJpbmcgczYgPSAiUE9QVUxBVElPTiI7DQorCQkJCQkJCWZpbmFsIFN0cmluZyBzNyA9ICJZRUFSIjsNCisJCQkJCQkJZmluYWwgU3RyaW5nIHM4ID0gIlRJVExFIjsNCisJCQkJCQkJZmluYWwgU3RyaW5nIHM5ID0gIiMiOw0KKwkJCQkJCQlpZiAoKGJ1ZmZlci5pbmRleE9mKHMxKSA9PSAtMSkNCisJCQkJCQkJCQkmJiAoYnVmZmVyLmluZGV4T2YoczIpID09IC0xKQ0KKwkJCQkJCQkJCSYmIChidWZmZXIuaW5kZXhPZihzMykgPT0gLTEpDQorCQkJCQkJCQkJJiYgKGJ1ZmZlci5pbmRleE9mKHM0KSA9PSAtMSkNCisJCQkJCQkJCQkmJiAoYnVmZmVyLmluZGV4T2YoczUpID09IC0xKQ0KKwkJCQkJCQkJCSYmIChidWZmZXIuaW5kZXhPZihzNikgPT0gLTEpDQorCQkJCQkJCQkJJiYgKGJ1ZmZlci5pbmRleE9mKHM3KSA9PSAtMSkNCisJCQkJCQkJCQkmJiAoYnVmZmVyLmluZGV4T2YoczgpID09IC0xKQ0KKwkJCQkJCQkJCSYmIChidWZmZXIuaW5kZXhPZihzOSkgPT0gLTEpDQorCQkJCQkJCQkJJiYgKGJ1ZmZlci5pbmRleE9mKCI9IikgPj0gMSkpIHsNCisNCisJCQkJCQkJCVN0cmluZ1Rva2VuaXplciB0b2tlbml6ZXIgPSBuZXcgU3RyaW5nVG9rZW5pemVyKGJ1ZmZlciwgIj0iKTsgLy8kTk9OLU5MUy0xJA0KKwkNCisJCQkJCQkJCS8vIExldmVsIDINCisJCQkJCQkJCVN0cmluZyBzdGVtSUQgPSB0b2tlbml6ZXIubmV4dFRva2VuKCkudHJpbSgpOw0KKwkJCQkJCQkJaWYoc3RlbUlELmNvbnRhaW5zKCJaWloiKSkgY29udGludWU7DQorCQkJCQkJCQlTdHJpbmcgcG9wdWxhdGlvbiA9IHRva2VuaXplci5uZXh0VG9rZW4oKS50cmltKCk7DQorCQ0KKwkJCQkJCQkJLy8gVXRpbExvZ2dlci5sb2dJbmZvcm1hdGlvbigiIitzdGVtSUQyKyIgPSAiK3BvcHVsYXRpb24pOw0KKwkJCQkJCQkJLy8gcG9wdWxhdGlvbklkTWFwLnB1dChzdGVtSUQyLCBuZXcNCisJCQkJCQkJCS8vIEludGVnZXIocG9wdWxhdGlvbi50cmltKCkpKTsNCisJCQkJCQkJCXRyeSB7DQorCQkJCQkJCQkJSW50ZWdlciBwb3BWYWwgPSBuZXcgSW50ZWdlcihwb3B1bGF0aW9uKTsNCisJCQkJCQkJCQlpbnQgaXRlc3QgPSBwb3BWYWwuaW50VmFsdWUoKTsNCisJCQkJCQkJCQlpZiAoaXRlc3QgPD0gLTEpIHsNCisJCQkJCQkJCQkJVXRpbExvZ2dlci5sb2dJbmZvcm1hdGlvbigiaW52YWxpZCBwb3B1bGF0aW9uIHZhbCBmb3IgY291bnRyeSINCisJCQkJCQkJCQkJCQkJCSsgc3RlbUlEKTsNCisJCQkJCQkJCQkJU3lzdGVtLmV4aXQoLTEpOw0KKwkJCQkJCQkJCX0NCisJCQkJCQkJCQlzdGVtUG9wdWxhdGlvbk1hcC5wdXQoc3RlbUlELCBpdGVzdCk7DQorCQkJCQkJCQl9IGNhdGNoIChOdW1iZXJGb3JtYXRFeGNlcHRpb24gbmZlKSB7DQorCQkJCQkJCQkJCVN5c3RlbS5vdXQNCisJCQkJCQkJCQkJCQkucHJpbnRsbigiISEhISBpbnZhbGlkIGRhdGEiDQorCQkJCQkJCQkJCQkJCQkrIGJ1ZmZlcik7DQorCQkJCQkJCQkJCVN5c3RlbS5leGl0KC0xKTsNCisJCQkJCQkJCX0NCisJCQkJCQkJfSAvLyBOb3QgaGVhZGVyIGZpZWxkDQorCQkJCQkJfSAvLyBXaGlsZSAhRU9GDQorCQkJCQl9IC8vIFdoaWxlIEZpbGVSZWFkZXIgaXMgbm90IG51bGwNCisJCQkJfSAvLyBpcyAucHJvcGVydGllcyBmaWxlDQorCQkJfSAvLyBJcyBmaWxlDQorCQl9IGNhdGNoIChFeGNlcHRpb24gZSkgew0KKwkJCVV0aWxMb2dnZXIubG9nSW5mb3JtYXRpb24oIkVycm9yIHJlYWRpbmcgZmlsZSIgKyB1c2VOYW1lKTsNCisJCQllLnByaW50U3RhY2tUcmFjZSgpOw0KKwkJCVN5c3RlbS5leGl0KDEpOw0KKwkJfQ0KKwl9Ly8gcmVhZFN0ZW1Qb3B1bGF0aW9uKCkNCisJDQorCS8qKg0KKwkgKiBDcmVhdGUgYSBuZXdCdWZmZXJlZFJlYWRlcg0KKwkgKiANCisJICogQHBhcmFtIGZpbGVOYW1lDQorCSAqICAgICAgICAgICAgdGhlIG5hbWUgb2YgdGhlIGZpbGUgd2Ugd2FudCB0byBvcGVuIGZvciByZWFkaW5nDQorCSAqIA0KKwkgKiBAcmV0dXJuIGEgcmVhZGVyIHRvIGEgZ2l2ZW4gZmlsZQ0KKwkgKi8NCisJc3RhdGljIHByb3RlY3RlZCBCdWZmZXJlZFJlYWRlciBvcGVuUmVhZGVyKEZpbGUgZmlsZSkgew0KKw0KKwkJdHJ5IHsNCisNCisJCQlyZXR1cm4gbmV3IEJ1ZmZlcmVkUmVhZGVyKG5ldyBGaWxlUmVhZGVyKGZpbGUpKTsNCisNCisJCX0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7DQorCQkJZS5wcmludFN0YWNrVHJhY2UoKTsNCisJCX0NCisNCisJCXJldHVybiBudWxsOw0KKwl9DQorCQ0KKwkvKioNCisJICogSW5kaWNhdGUgRW5kLU9mLUZpbGUNCisJICogDQorCSAqIEBwYXJhbSBidWZmZXINCisJICogICAgICAgICAgICBBIGJ1ZmZlciBvZiBkaXZhIGRhdGENCisJICogDQorCSAqIEByZXR1cm4gVHJ1ZSBpZiB3ZSBoYXZlIHJlYWNoZWQgRW5kLU9mLUZpbGUNCisJICovDQorCXN0YXRpYyBwcm90ZWN0ZWQgYm9vbGVhbiBFT0YoU3RyaW5nIGJ1ZmZlcikgew0KKwkJaWYgKGJ1ZmZlciA9PSBudWxsICkNCisJCQlyZXR1cm4gdHJ1ZTsNCisJCXJldHVybiBmYWxzZTsNCisJfQ0KKw0KK30NCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91dGlsaXR5L2dlbmVyYXRvcnMvQXJlYURhdGFNaWdyYXRvci5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdXRpbGl0eS9nZW5lcmF0b3JzL0FyZWFEYXRhTWlncmF0b3IuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYjE3NjFlCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdXRpbGl0eS9nZW5lcmF0b3JzL0FyZWFEYXRhTWlncmF0b3IuamF2YQpAQCAtMCwwICsxLDM3OSBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkuZ2VuZXJhdG9yczsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqYXZhLmlvLkJ1ZmZlcmVkUmVhZGVyOworaW1wb3J0IGphdmEuaW8uRmlsZTsKK2ltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOworaW1wb3J0IGphdmEuaW8uUHJpbnRXcml0ZXI7CitpbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7CitpbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOworaW1wb3J0IGphdmEudXRpbC5MaXN0OworaW1wb3J0IGphdmEudXRpbC5NYXA7CitpbXBvcnQgamF2YS51dGlsLlNldDsKKworaW1wb3J0IGphdmF4LnhtbC5wYXJzZXJzLkRvY3VtZW50QnVpbGRlcjsKK2ltcG9ydCBqYXZheC54bWwucGFyc2Vycy5Eb2N1bWVudEJ1aWxkZXJGYWN0b3J5OworaW1wb3J0IGphdmF4LnhtbC5wYXJzZXJzLlBhcnNlckNvbmZpZ3VyYXRpb25FeGNlcHRpb247CisKK2ltcG9ydCBvcmcudzNjLmRvbS5Eb2N1bWVudDsKK2ltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OworaW1wb3J0IG9yZy53M2MuZG9tLk5vZGVMaXN0OworaW1wb3J0IG9yZy54bWwuc2F4LlNBWEV4Y2VwdGlvbjsKKworLyoqCisgKiBTVEVNIElJIERhdGEgTWlncmF0aW9uL0dlbmVyYXRpb24gVXRpbGl0aWVzIDogSW5zdGFuY2VzIG9mIHRoaXMgdXRpbGl0eSBjbGFzcworICogZXh0cmFjdCB0aGUgcG9wdWxhdGlvbiBkYXRhIGZyb20gdGhlIFNURU0gSSBkYXRhIGZpbGVzIGFzIGEgc2ltcGxlIHRleHQgZmlsZS4KKyAqIFRoZSBhcmVhIGRhdGEgZXh0cmFjdGVkIGlzIHVzZWQgZHVyaW5nIGdlbmVyYXRpb24gb2YgU1RFTSBJSSBwcm9wZXJ0aWVzCisgKiBmaWxlcy4KKyAqIAorICogQWRkIHRoZSBmb2xsb3dpbmcgdmFsdWVzIHRvIHRoZSBydW4gY29uZmlndXJhdGlvbjoKKyAqIAorICogQzpcc3RlbUlJXG9yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eVxkYXRhTWlncmF0aW9uXGlucHV0XElTTzMxNjYtMVxJU08zMTY2XzFfZW4udHh0CisgKiBDOlxzdGVtSUlcb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5XGRhdGFNaWdyYXRpb25caW5wdXRcbWlncmF0aW9uXGNvdW50cnlfbmFtZXMudHh0CisgKiBDOlxzdGVtSUlcb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5XGRhdGFNaWdyYXRpb25caW5wdXRcbWlncmF0ZWREYXRhXAorICogCisgKi8KKworcHVibGljIGNsYXNzIEFyZWFEYXRhTWlncmF0b3IgeworCisJLyoqCisJICogT3VyIHNvdXJjZSBmaWxlcyBmb3IgSVNPIDMxNjYtMSBjb2RlcyBhbmQgZm9yIHRoZSBsaXN0IG9mIHRhcmdldAorCSAqIGNvdW50cmllcy4KKwkgKi8KKworCXByaXZhdGUgU3RyaW5nIGlzb0ZpbGUgPSBudWxsOworCisJcHJpdmF0ZSBTdHJpbmcgY291bnRyaWVzRmlsZSA9IG51bGw7CisKKwlwcml2YXRlIFN0cmluZyBvdXRwdXREaXIgPSBudWxsOworCisJLyoqCisJICogQSBtYXAgY29udGFpbmluZyB0dXBsZXMgb2YgdGhlIGZvcm0gKGxvY2F0aW9uLGFyZWEpCisJICovCisJTWFwIGFyZWFNYXAgPSBudWxsOworCisJTWFwIG5hbWVNYXAgPSBudWxsOworCisJLyoqCisJICogTGlzdCBmb3IgSVNPIDMxNjYtMSBjb2RlcyBhbmQgdGFyZ2V0IGNvdW50cmllcy4KKwkgKi8KKworCUxpc3QgY291bnRyaWVzTGlzdCA9IG51bGw7CisKKwlMaXN0IGNvZGVMaXN0ID0gbnVsbDsKKworCS8qKgorCSAqIENvbnN0cnVjdG9yCisJICogCisJICogQHBhcmFtIGlzb0ZpbGUKKwkgKiAgICAgICAgICAgIGEgZmlsZSBjb250YWluaW5nIElTTzMxNjYtMSBjb2RlcworCSAqIEBwYXJhbSBjb3VudHJpZXNGaWxlCisJICogICAgICAgICAgICBhIGZpbGUgY29udGFpbmluZyBjb3VudHJpZXMgZm9yIHdoaWNoIHdlIHdpbGwgZ2VuZXJhdGUgYXJlYQorCSAqICAgICAgICAgICAgcHJvcGVydGllcyBmaWxlcworCSAqIEBwYXJhbSBvdXRwdXREaXIKKwkgKiAgICAgICAgICAgIHRoZSBvdXRwdXQgZGlyZWN0b3J5IHdoZXJlIHdlIHdpbGwgd3JpdGUgdGhlIG5ldyBhcmVhIGZpbGVzCisJICovCisJQXJlYURhdGFNaWdyYXRvcihTdHJpbmcgaXNvRmlsZSwgU3RyaW5nIGNvdW50cmllc0ZpbGUsIFN0cmluZyBvdXRwdXREaXIpIHsKKwkJdGhpcy5pc29GaWxlID0gaXNvRmlsZTsKKwkJdGhpcy5jb3VudHJpZXNGaWxlID0gY291bnRyaWVzRmlsZTsKKwkJdGhpcy5vdXRwdXREaXIgPSBvdXRwdXREaXI7CisJCWFyZWFNYXAgPSBuZXcgSGFzaE1hcCgpOworCQluYW1lTWFwID0gbmV3IEhhc2hNYXAoKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIG1ldGhvZCBzZXRzIHVwIGFuZCBydW5zIHRoaXMgZ2VuZXJhdG9yLgorCSAqIAorCSAqLworCXB1YmxpYyB2b2lkIHJ1bigpIHsKKwkJLy8gUmVhZCBhbmQga2VlcCBpbiBtZW1vcnkgYSBsaXN0IG9mIHRoZSBjb3VudHJpZXMgd2Ugd2FudC4KKwkJY291bnRyaWVzTGlzdCA9IEdlblV0aWxzLnBvcHVsYXRlTGlzdChjb3VudHJpZXNGaWxlKTsKKworCQkvLyBSZWFkIGFuZCBrZWVwIGluIG1lbW9yeSBhIGxpc3Qgb2YgdGhlIElTTzMxNjYtMSBBTFBIQTIsIEFMUEhBMywgYW5kCisJCS8vIG51bWVyaWMgY29kZXMuCisJCWNvZGVMaXN0ID0gR2VuVXRpbHMucG9wdWxhdGVMaXN0KGlzb0ZpbGUpOworCisJCS8vIE5vdywgcHJvY2VzcyBlYWNoIGl0ZW0gaW4gdGhlIHRhcmdldCBsaXN0LgorCQlwcm9jZXNzKCk7CisKKwl9CisKKwkvKioKKwkgKiBNZXRob2QgdGhhdCBsb2FkcyBhbiBYTUwgZmlsZSB3aXRoIFNURU0gSSBuYW1lIGFuZCBhcmVhIGRhdGEuCisJICogCisJICogQHBhcmFtIGZpbGVOYW1lCisJICogICAgICAgICAgICB0aGUgWE1MIHRlc3QgZmlsZQorCSAqIEB0aHJvd3MgRmlsZU5vdEZvdW5kRXhjZXB0aW9uCisJICogQHRocm93cyBJT0V4Y2VwdGlvbgorCSAqIAorCSAqIEByZXR1cm4gdGhlIHJvb3QgZWxlbWVudCBvZiB0aGUgWE1MIGRvY3VtZW50CisJICogCisJICogCisJICovCisJcHJvdGVjdGVkIEVsZW1lbnQgbG9hZFhNTChTdHJpbmcgZmlsZU5hbWUpIHsKKworCQlEb2N1bWVudCBkb2MgPSBudWxsOworCQlEb2N1bWVudEJ1aWxkZXIgZG9jQnVpbGRlciA9IG51bGw7CisKKwkJdHJ5IHsKKwkJCURvY3VtZW50QnVpbGRlckZhY3RvcnkgZmFjdG9yeSA9IERvY3VtZW50QnVpbGRlckZhY3RvcnkKKwkJCQkJLm5ld0luc3RhbmNlKCk7CisJCQkvLyBYTUwgZG9jdW1lbnQgYnVpbGRlcgorCQkJZG9jQnVpbGRlciA9IGZhY3RvcnkubmV3RG9jdW1lbnRCdWlsZGVyKCk7CisJCQlkb2MgPSBkb2NCdWlsZGVyLm5ld0RvY3VtZW50KCk7CisJCQkvLyBMb2FkIFhNTCBmaWxlCisJCQlGaWxlIHhtbEZpbGUgPSBuZXcgRmlsZShmaWxlTmFtZSk7CisJCQlTdHJpbmcgZmlsZVBhdGggPSB4bWxGaWxlLmdldEFic29sdXRlUGF0aCgpOworCQkJVXRpbExvZ2dlci5sb2dJbmZvcm1hdGlvbigiRmlsZSBwYXRoID0gIiArIGZpbGVQYXRoKTsgLy8kTk9OLU5MUy0xJAorCQkJZG9jID0gZG9jQnVpbGRlci5wYXJzZShmaWxlUGF0aCk7CisJCX0gY2F0Y2ggKFBhcnNlckNvbmZpZ3VyYXRpb25FeGNlcHRpb24gcGNlKSB7CisJCQlTeXN0ZW0ub3V0CisJCQkJCS5wcmludGxuKCJMb2FkWE1MKCk6ICBFcnJvciBjb25maWd1cmluZyB4bWwgZG9jdW1lbnQgYnVpbGRlciAiIC8vJE5PTi1OTFMtMSQKKwkJCQkJCQkrIHBjZS5nZXRNZXNzYWdlKCkpOworCQl9IGNhdGNoIChTQVhFeGNlcHRpb24gZSkgeworCQkJZS5wcmludFN0YWNrVHJhY2UoKTsKKwkJfSBjYXRjaCAoSU9FeGNlcHRpb24gZSkgeworCQkJZS5wcmludFN0YWNrVHJhY2UoKTsKKwkJfQorCisJCS8vIFJldHVybiB0aGUgcm9vdCBvZiB0aGlzIFhNTCBkb2N1bWVudAorCQlyZXR1cm4gZG9jLmdldERvY3VtZW50RWxlbWVudCgpOworCX0KKworCS8qKgorCSAqIFJlYWQgYWxsIGFyZ3VtZW50cyBpbiBhIGRhdGFzZXQsIG9uZSBieSBvbmUuCisJICogCisJICogQHBhcmFtIGZpbGUKKwkgKiAgICAgICAgICAgIGZpbGVuYW1lIG9mIFhNTCBmaWxlIHdlIHdhbnQgdG8gbG9hZCBhbmQgZXh0cmFjdCBkYXRhIGZyb20uCisJICogCisJICogQHRocm93cyBGaWxlTm90Rm91bmRFeGNlcHRpb24KKwkgKiBAdGhyb3dzIElPRXhjZXB0aW9uCisJICogCisJICogQHJldHVybiBhIG1hcCB3aXRoIHR1cGxlcyAoS2V5PWxvY2F0aW9uSUQsVmFsdWUpCisJICogCisJICovCisJcHJvdGVjdGVkIE1hcCBleHRyYWN0QXJlYURhdGEoU3RyaW5nIGZpbGUpIHsKKworCQlNYXA8U3RyaW5nLCBTdHJpbmc+IGFyZWFNYXAgPSBuZXcgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4oKTsKKworCQlFbGVtZW50IHJvb3QgPSBsb2FkWE1MKGZpbGUpOworCQkvLyBnZXQgYWxsIHRoZSBlbGVtZW50cworCQlOb2RlTGlzdCBubCA9IHJvb3QuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIioiKTsgLy8kTk9OLU5MUy0xJAorCQlmb3IgKGludCBpID0gMDsgaSA8IG5sLmdldExlbmd0aCgpOyBpKyspIHsKKwkJCUVsZW1lbnQgZWwgPSAoRWxlbWVudCkgbmwuaXRlbShpKTsKKwkJCVN0cmluZyBsb2NhdGlvbiA9IGVsLmdldEF0dHJpYnV0ZSgibG9jYXRpb25JZCIpLnRvVXBwZXJDYXNlKCk7IC8vJE5PTi1OTFMtMSQKKwkJCVN0cmluZyBhcmVhID0gZWwuZ2V0QXR0cmlidXRlKCJ2YWx1ZSIpOyAvLyROT04tTkxTLTEkCisJCQkvLyBTdG9yZSBib3RoIHZhbHVlcyBmb3IgbGF0ZXIgbG9va3VwLiBVc2UgdXBwZXJjYXNlLgorCQkJYXJlYU1hcC5wdXQobG9jYXRpb24sIGFyZWEpOworCQl9CisKKwkJLy8gcmV0dXJuIGFyZWFMaXN0OworCQlyZXR1cm4gYXJlYU1hcDsKKwl9CisKKwkvKioKKwkgKiBSZWFkIGFsbCBhcmd1bWVudHMgaW4gYSBkYXRhc2V0LCBvbmUgYnkgb25lLgorCSAqIAorCSAqIEBwYXJhbSB0aGUKKwkgKiAgICAgICAgICAgIGZpbGVuYW1lCisJICogCisJICogQHRocm93cyBGaWxlTm90Rm91bmRFeGNlcHRpb24KKwkgKiBAdGhyb3dzIElPRXhjZXB0aW9uCisJICogCisJICogQHJldHVybiBhIG1hcCB3aXRoIHR1cGxlcyAoS2V5PUlELFZhbHVlPU5hbWUpCisJICogCisJICovCisJcHJvdGVjdGVkIE1hcCBleHRyYWN0TmFtZURhdGEoU3RyaW5nIGZpbGUpIHsKKworCQlNYXA8U3RyaW5nLCBTdHJpbmc+IG5hbWVNYXAgPSBuZXcgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4oKTsKKworCQlFbGVtZW50IHJvb3QgPSBsb2FkWE1MKGZpbGUpOworCQkvLyBnZXQgYWxsIHRoZSBlbGVtZW50cworCQlOb2RlTGlzdCBubCA9IHJvb3QuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIioiKTsgLy8kTk9OLU5MUy0xJAorCisJCWZvciAoaW50IGkgPSAwOyBpIDwgbmwuZ2V0TGVuZ3RoKCk7IGkrKykgeworCQkJRWxlbWVudCByZWdpb25zID0gKEVsZW1lbnQpIG5sLml0ZW0oaSk7CisJCQlOb2RlTGlzdCBsb2NhdGlvbnMgPSByZWdpb25zLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJsb2NhdGlvbiIpOyAvLyROT04tTkxTLTEkCisJCQlmb3IgKGludCBqID0gMDsgaiA8IGxvY2F0aW9ucy5nZXRMZW5ndGgoKTsgaisrKSB7CisJCQkJRWxlbWVudCBlbCA9IChFbGVtZW50KSBsb2NhdGlvbnMuaXRlbShqKTsKKwkJCQlTdHJpbmcgaWQgPSBlbC5nZXRBdHRyaWJ1dGUoImlkIikudG9VcHBlckNhc2UoKTsgLy8kTk9OLU5MUy0xJAorCQkJCVN0cmluZyBuYW1lID0gZWwuZ2V0QXR0cmlidXRlKCJuYW1lIikudG9VcHBlckNhc2UoKTsgLy8kTk9OLU5MUy0xJAorCisJCQkJLy8gU3RvcmUgYm90aCB2YWx1ZXMgZm9yIGxhdGVyIGxvb2t1cC4gVXNlIHVwcGVyY2FzZS4KKwkJCQluYW1lTWFwLnB1dChpZCwgbmFtZSk7CisJCQl9CisJCX0KKworCQlyZXR1cm4gbmFtZU1hcDsKKwl9CisKKwkvKioKKwkgKiBGaW5kIGFsbCBtYXRjaGVzIGJldHdlZW4gbG9jYXRpb25zIGFuZCBmb3JtIGEgbmV3IHR1cGxlIHdpdGggdGhlIGxvY2F0aW9uCisJICogbmFtZSBhbmQgYXJlYSB2YWx1ZSBmb3IgZWFjaCBsb2NhdGlvbi4KKwkgKiAKKwkgKiBAcGFyYW0gbTEKKwkgKiAgICAgICAgICAgIEEgbWFwIGNvbnRhaW5pbmcgdHVwbGVzIG9mIHRoZSBmb3JtIChsb2NhdGlvbixhcmVhKQorCSAqIEBwYXJhbSBtMgorCSAqICAgICAgICAgICAgQSBtYXAgY29udGFpbmluZyB0dXBsZXMgb2YgdGhlIGZvcm0gKGxvY2F0aW9uLG5hbWUpCisJICogQHBhcmFtIGxldmVsCisJICogICAgICAgICAgICBUaGUgYWRtaW5pc3RyYXRpdmUgbGV2ZWwKKwkgKiAKKwkgKiBzQHJldHVybiBBIHR1cGxlIG9mIHRoZSBmb3JtIChuYW1lOmFyZWEpCisJICovCisJcHJvdGVjdGVkIFN0cmluZyBtYXRjaChNYXAgbTEsIE1hcCBtMiwgaW50IGxldmVsKSB7CisKKwkJU3RyaW5nIHJlc3VsdCA9IG51bGw7CisJCVNldCBrZXlzID0gbTEua2V5U2V0KCk7CisJCUl0ZXJhdG9yIGl0MSA9IGtleXMuaXRlcmF0b3IoKTsKKworCQl3aGlsZSAoaXQxLmhhc05leHQoKSkgeworCisJCQlTdHJpbmcga2V5ID0gKFN0cmluZykgaXQxLm5leHQoKTsKKworCQkJaWYgKG0yLmNvbnRhaW5zS2V5KGtleSkpIHsgLy8gVG8gYmUgbW9yZSBzdHJpY3QsIGNoYW5nZSB0aGlzIHRvCisJCQkJLy8gbTIuZXF1YWxzKGtleSkKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHsKKworCQkJCQlpZiAoKChTdHJpbmcpIG0yLmdldChrZXkpKS5zdGFydHNXaXRoKCI6IikpIHsgLy8kTk9OLU5MUy0xJAorCQkJCQkJVXRpbExvZ2dlci5sb2dJbmZvcm1hdGlvbigiSWdub3JpbmcgbWFsZm9ybWVkIGVudHJ5IDogIiAvLyROT04tTkxTLTEkCisJCQkJCQkJCSsgbTIuZ2V0KGtleSkpOworCQkJCQl9CisKKwkJCQkJcmVzdWx0ID0gbTIuZ2V0KGtleSkgKyAiOiIgKyBTdHJpbmcudmFsdWVPZihsZXZlbCkgKyAiOiIgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCisJCQkJCQkJKyBtMS5nZXQoa2V5KSArICJcbiI7IC8vJE5PTi1OTFMtMSQKKwkJCQl9IGVsc2UgeworCQkJCQlyZXN1bHQgKz0gbTIuZ2V0KGtleSkgKyAiOiIgKyBTdHJpbmcudmFsdWVPZihsZXZlbCkgKyAiOiIgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCisJCQkJCQkJKyBtMS5nZXQoa2V5KSArICJcbiI7IC8vJE5PTi1OTFMtMSQKKwkJCQl9CisJCQl9CisJCX0KKwkJcmV0dXJuIHJlc3VsdDsKKwl9CisKKwkvKioKKwkgKiBQcm9jZXNzIG91ciBnbG9iYWwgbGlzdCBvZiBjb3VudHJpZXMgd2l0aCBjcm9zcy1yZWZlcmVuY2luZy4KKwkgKiAKKwkgKi8KKwlwdWJsaWMgdm9pZCBwcm9jZXNzKCkgeworCisJCVByaW50V3JpdGVyIG91dHB1dEZpbGUgPSBudWxsOworCisJCS8vIEFkbWluIGxldmVscyBmb3IgZWFjaCBjb3VudHJ5CisJCS8vIFRPIERPIDogZml4IHRoaXMgaGFyZCBjb2RlZCB2YWx1ZS4gU2hvdWxkIGJlIHBhc3NlZCBhcyBhIHBhcmFtZXRlci4KKwkJLy8gUGF0aCBzaG91bGQgY29udGFpbiB0aGUgbG9jYXRpb24gb2YgdGhlIFNURU0ncyAxIG1hcHMgOiBpdCBzaG91bGQKKwkJLy8gdGFrZSB2YWx1ZSBmcm9tIHBhcmFtZXRlciBpbnN0ZWFkLgorCQlmaW5hbCBTdHJpbmcgcGF0aCA9ICJDOlxcRWNsaXBzZVByb2plY3RzXFx3b3Jrc3BhY2UyXFxHcmVlblNjcmVlblxcSW5zdGFsbFRlbXBsYXRlXFxNYXBzXFwiOyAvLyROT04tTkxTLTEkCisKKwkJZmluYWwgaW50IExFVkVMUyA9IDE7CisKKwkJZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudHJpZXNMaXN0LnNpemUoKTsgaSsrKSB7CisKKwkJCS8vIEdldCB0aGUgbmV4dCBjb3VudHJ5IGluIHRoZSBsaXN0LgorCQkJU3RyaW5nIGNvdW50cnkgPSAoKFN0cmluZykgY291bnRyaWVzTGlzdC5nZXQoaSkpLnRyaW0oKTsKKworCQkJLy8gR2V0IHRoZSBJU08zMTY2LTEgaW5mbyBmb3IgdGhpcyBjb3VudHJ5CisJCQlJU09Db2RlMSBpc29Db2RlID0gR2VuVXRpbHMuZ2V0SVNPQ29kZShjb3VudHJ5LCBjb2RlTGlzdCk7CisKKwkJCWlmIChpc29Db2RlID09IG51bGwpIHsKKwkJCQlVdGlsTG9nZ2VyLmxvZ0luZm9ybWF0aW9uKCJpc28gY29kZSBpcyBudWxsIGZvciAiICsgY291bnRyeSk7IC8vJE5PTi1OTFMtMSQKKwkJCQljb250aW51ZTsKKwkJCX0KKworCQkJVXRpbExvZ2dlci5sb2dJbmZvcm1hdGlvbigiQ291bnRyeSBpcyA6ICAiICsgY291bnRyeSArICIgY29kZSA9ICIgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCisJCQkJCSsgaXNvQ29kZS5nZXROYW1lKCkpOworCisJCQkvLyBPcGVuIG91dHB1dCBmaWxlCisJCQlpZiAob3V0cHV0RmlsZSA9PSBudWxsKSB7CisJCQkJU3RyaW5nIGZpbGVOYW1lID0gb3V0cHV0RGlyOworCQkJCWZpbGVOYW1lICs9IGlzb0NvZGUuZ2V0TmFtZSgpICsgIl9BUkVBLnR4dCI7IC8vJE5PTi1OTFMtMSQKKwkJCQlvdXRwdXRGaWxlID0gR2VuVXRpbHMub3BlbldyaXRlcihmaWxlTmFtZSk7CisJCQl9CisKKwkJCWZvciAoaW50IGogPSAwOyBqIDw9IExFVkVMUzsgaisrKSB7CisJCQkJLy8gT3BlbiB0aGUgc291cmNlIGRhdGEgZmlsZXMgZm9yIHRoaXMgY291bnRyeToKKworCQkJCS8vIE9wZW4gdGhlIGFyZWEgZmlsZQorCQkJCVN0cmluZyBhcmVhRmlsZSA9IHBhdGg7CisJCQkJYXJlYUZpbGUgKz0gaXNvQ29kZS5nZXRBbHBoYTMoKSArICJfQXJlYV8iICsgaiArICIueG1sIjsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCisJCQkJQnVmZmVyZWRSZWFkZXIgYXJlYVJlYWRlciA9IEdlblV0aWxzLm9wZW5SZWFkZXIoYXJlYUZpbGUpOworCQkJCWlmIChhcmVhUmVhZGVyID09IG51bGwpIHsKKwkJCQkJVXRpbExvZ2dlci5sb2dJbmZvcm1hdGlvbigiRmlsZSBub3QgZm91bmQgZm9yIDogIiArIGFyZWFGaWxlKTsgLy8kTk9OLU5MUy0xJAorCQkJCQljb250aW51ZTsKKwkJCQl9CisKKwkJCQkvLyBPcGVuIHRoZSBuYW1lcyBmaWxlCisJCQkJU3RyaW5nIG5hbWVGaWxlID0gcGF0aDsKKwkJCQluYW1lRmlsZSArPSBpc29Db2RlLmdldEFscGhhMygpICsgIl9OYW1lc18iICsgaiArICIueG1sIjsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCisJCQkJQnVmZmVyZWRSZWFkZXIgbmFtZVJlYWRlciA9IEdlblV0aWxzLm9wZW5SZWFkZXIobmFtZUZpbGUpOworCQkJCWlmIChuYW1lUmVhZGVyID09IG51bGwpIHsKKwkJCQkJVXRpbExvZ2dlci5sb2dJbmZvcm1hdGlvbigiRmlsZSBub3QgZm91bmQgZm9yIDogIiArIG5hbWVGaWxlKTsgLy8kTk9OLU5MUy0xJAorCQkJCQljb250aW51ZTsKKwkJCQl9CisKKwkJCQkvLyBMb2FkIHRoZSBYTUwgYXJlYSBhbmQgbmFtZXMgZG9jdW1lbnRzIGFuZCBleHRyYWN0IHRoZSBkYXRhIHdlCisJCQkJLy8gbmVlZAorCQkJCXRyeSB7CisJCQkJCWFyZWFNYXAgPSBleHRyYWN0QXJlYURhdGEoYXJlYUZpbGUpOworCQkJCQluYW1lTWFwID0gZXh0cmFjdE5hbWVEYXRhKG5hbWVGaWxlKTsKKwkJCQkJLy8gbm93IGRvIHRoZSBtYXRjaGluZ3MKKwkJCQkJU3RyaW5nIHR1cGxlID0gbWF0Y2goYXJlYU1hcCwgbmFtZU1hcCwgaik7CisJCQkJCS8vIHdyaXRlIG1hdGNoIHRvIG91dHB1dCBmaWxlLgorCQkJCQkvLyBBIG1hdGNoIGlzIGEgdHVwbGUgb2YgdGhlIGZvcm0gKG5hbWU6YXJlYSkKKwkJCQkJb3V0cHV0RmlsZS53cml0ZSh0dXBsZSk7CisJCQkJCS8vIENsb3NlIHRoZSByZXNvdXJjZXMKKwkJCQkJYXJlYVJlYWRlci5jbG9zZSgpOworCQkJCQluYW1lUmVhZGVyLmNsb3NlKCk7CisJCQkJCWFyZWFSZWFkZXIgPSBudWxsOworCQkJCQluYW1lUmVhZGVyID0gbnVsbDsKKwkJCQkJYXJlYUZpbGUgPSBudWxsOworCQkJCQluYW1lRmlsZSA9IG51bGw7CisJCQkJfSBjYXRjaCAoSU9FeGNlcHRpb24gZSkgeworCQkJCQllLnByaW50U3RhY2tUcmFjZSgpOworCQkJCQljb250aW51ZTsKKwkJCQl9CisJCQl9IC8vIGZvciBqCisKKwkJCWlmIChvdXRwdXRGaWxlICE9IG51bGwpIHsKKwkJCQlvdXRwdXRGaWxlLmNsb3NlKCk7CisJCQkJb3V0cHV0RmlsZSA9IG51bGw7CisJCQl9CisJCX0KKwl9CisKKwkvKioKKwkgKiBNYWluIGV4ZWN1dGlvbiBlbnRyeSBwb2ludC4KKwkgKiAKKwkgKiBAcGFyYW0gYXJncworCSAqLworCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKKwkJZmluYWwgaW50IElTT19GSUxFID0gMDsKKwkJZmluYWwgaW50IENPVU5UUllfRklMRSA9IDE7CisJCWZpbmFsIGludCBPVVRQVVRfRElSID0gMjsKKwkJZmluYWwgaW50IFBBUkFNUyA9IDM7CisKKwkJaWYgKGFyZ3MubGVuZ3RoIDwgUEFSQU1TKSB7CisJCQlVdGlsTG9nZ2VyLmxvZ0luZm9ybWF0aW9uKCItLVdyb25nIGFyZ3VtZW50cy0tIik7IC8vJE5PTi1OTFMtMSQKKwkJCVN5c3RlbS5vdXQKKwkJCQkJLnByaW50bG4oIlx0VG8gcnVuLCBwbGVhc2UgcHJvdmlkZSB0aGUgZm9sbG93aW5nIGFyZ3VtZW50cyA6ICIpOyAvLyROT04tTkxTLTEkCisJCQlVdGlsTG9nZ2VyLmxvZ0luZm9ybWF0aW9uKCJcdFx0IElTTyAzMTY2LTEgZmlsZSIpOyAvLyROT04tTkxTLTEkCisJCQlVdGlsTG9nZ2VyLmxvZ0luZm9ybWF0aW9uKCJcdFx0IFRhcmdldCBjb3VudHJpZXMgZmlsZSIpOyAvLyROT04tTkxTLTEkCQkJCisJCQlVdGlsTG9nZ2VyLmxvZ0luZm9ybWF0aW9uKCJcdFx0IE91dHB1dCBkaXJlY3RvcnkiKTsgLy8kTk9OLU5MUy0xJAorCQkJcmV0dXJuOworCQl9CisKKwkJQXJlYURhdGFNaWdyYXRvciBtaWdyYXRvciA9IG5ldyBBcmVhRGF0YU1pZ3JhdG9yKGFyZ3NbSVNPX0ZJTEVdLAorCQkJCWFyZ3NbQ09VTlRSWV9GSUxFXSwgYXJnc1tPVVRQVVRfRElSXSk7CisJCW1pZ3JhdG9yLnJ1bigpOworCX0KKworfQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdXRpbGl0eS9nZW5lcmF0b3JzL0FyZWFHZW5lcmF0b3IuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3NyYy9vcmcvZWNsaXBzZS9zdGVtL3V0aWxpdHkvZ2VuZXJhdG9ycy9BcmVhR2VuZXJhdG9yLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2VjMDU2YQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3NyYy9vcmcvZWNsaXBzZS9zdGVtL3V0aWxpdHkvZ2VuZXJhdG9ycy9BcmVhR2VuZXJhdG9yLmphdmEKQEAgLTAsMCArMSwxMzkzIEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS5nZW5lcmF0b3JzOworCitpbXBvcnQgamF2YS5pby5CdWZmZXJlZFJlYWRlcjsKK2ltcG9ydCBqYXZhLmlvLkZpbGU7CitpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLmlvLlByaW50V3JpdGVyOworaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7CitpbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7CitpbXBvcnQgamF2YS51dGlsLkhhc2hTZXQ7CitpbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOworaW1wb3J0IGphdmEudXRpbC5MaXN0OworaW1wb3J0IGphdmEudXRpbC5TZXQ7CitpbXBvcnQgamF2YS51dGlsLlN0cmluZ1Rva2VuaXplcjsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKgorICogU1RFTSBJSSBEYXRhIE1pZ3JhdGlvbi9HZW5lcmF0aW9uIFV0aWxpdGllcyA6IEluc3RhbmNlcyBvZiB0aGlzIHV0aWxpdHkgY2xhc3MKKyAqIGdlbmVyYXRlIHRoZSBhcmVhLnByb3BlcnRpZXMgZmlsZXMgZm9yIGFsbCBjb3VudHJpZXMuCisgKiAKKyAqIAorICogVG8gY29uZmlndXJlLCBzZWUgY29uZmlndXJhdGlvbiBmaWxlIDoKKyAqIG9yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9jb25maWd1cmF0aW9uL0FyZWFHZW5lcmF0b3IuY29uZmlnCisgKiAKKyAqIAorICogVG8gcnVuLCBhZGQgcGF0aCB0byBjb25maWd1cmF0aW9uIGZpbGUgaW4gdGhlIHJ1biBwcm9maWxlIChpLmUuCisgKiBDOlxzdGVtSUlcb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5XGNvbmZpZ3VyYXRpb25cQXJlYUdlbmVyYXRvci5jb25maWcpCisgKiAKKyAqIAorICogU0VUIFZNQVJHUyBUTyA6IC1YbXMxMDI0bSAtWG14MTAyNG0KKyAqIAorICovCisKK3B1YmxpYyBjbGFzcyBBcmVhR2VuZXJhdG9yIHsKKworCXByaXZhdGUgU3RyaW5nIGlzbzMxNjZfMSA9IG51bGw7CisKKwlwcml2YXRlIFN0cmluZyBpc28zMTY2XzIgPSBudWxsOworCisJcHJpdmF0ZSBTdHJpbmcgZml4RmlsZSA9IG51bGw7CisKKwlwcml2YXRlIFN0cmluZyB0YXJnZXRGaWxlID0gbnVsbDsKKworCXByaXZhdGUgU3RyaW5nIGFyZWFEYXRhID0gbnVsbDsKKworCXByaXZhdGUgU3RyaW5nIHBvbHlnb25BcmVhRGF0YSA9IG51bGw7CisKKwlwcml2YXRlIFN0cmluZyBsZXhEaXIgPSBudWxsOworCisJcHJpdmF0ZSBTdHJpbmcgb3V0cHV0RGlyID0gbnVsbDsKKworCXByaXZhdGUgU3RyaW5nIHdvcmtzcGFjZSA9IG51bGw7CisKKwkvKioKKwkgKiBMaXN0cyBmb3IgSVNPIDMxNjYtMSBjb2RlcywgdGFyZ2V0IGNvdW50cmllcywgYW5kIHBvcHVsYXRpb24gZGF0YS4KKwkgKi8KKworCUxpc3QgdGFyZ2V0TGlzdCA9IG51bGw7CisKKwlMaXN0IGNvZGVMaXN0ID0gbnVsbDsKKworCUxpc3QgY29kZWZpeExpc3QgPSBudWxsOworCisJTGlzdCBhcmVhTGlzdCA9IG51bGw7CisKKwlMaXN0IGxldmVsMVBvbHlnb25BcmVhTGlzdCA9IG51bGw7CisKKwlMaXN0IGxldmVsMlBvbHlnb25BcmVhTGlzdCA9IG51bGw7CisKKwlMaXN0IHVzYUxldmVsMkxpc3QgPSBudWxsOworCisJLyoqCisJICogSGFzaCBzZXQgZm9yIHN0b3JpbmcgdGhlIHNvdXJjZSBVUkxzIHJlbGV2YW50IHRvIGFyZWEgZGF0YS4KKwkgKi8KKwlTZXQ8U3RyaW5nPiB1cmxTZXQgPSBudWxsOworCisJLyoqCisJICogSGFzaCBtYXAgdG8ga2VlcCB0cmFjayBvZiB3aGljaCBzb3VyY2VzIHdpbGwgYmUgc2hvd24gY29tbWVudGVkIG91dCBhbmQKKwkgKiB3aGljaCB3aWxsIGFwcGVhciBhY3RpdmUuCisJICovCisJSGFzaE1hcDxTdHJpbmcsIEJvb2xlYW4+IHVybFN0YXR1cyA9IG51bGw7CisKKwkvKioKKwkgKiBTdHJpbmcgdXNlZCB0byBpbmRpY2F0ZSBkZWZhdWx0IHZhbHVlIGZvciB1bmtub3duIGFyZWFzLgorCSAqLworCVN0cmluZyBERUZBVUxUID0gIjAiOyAvLyROT04tTkxTLTEkCQorCisJLyoqCisJICogQ29uc3RydWN0b3IKKwkgKiAKKwkgKiBAcGFyYW0gaXNvMzE2Nl8xIC0KKwkgKiAgICAgICAgICAgIGRhdGEgZmlsZSB3aXRoIHRoZSBJU08zMTY2LTEgQUxQSEFfMiBhbmQgQUxQSEFfMyBjb2Rlcy4KKwkgKiBAcGFyYW0gaXNvMzE2Nl8yIC0KKwkgKiAgICAgICAgICAgIGZpbGUgd2l0aCB0aGUgSVNPMzE2Ni0yIGRhdGEgdXNlZCBmb3IgZ2VuZXJhdGluZyB0aGUgSURzLgorCSAqIEBwYXJhbSBmaXhGaWxlIC0KKwkgKiAgICAgICAgICAgIGZpbGUgY29udGFpbmluZyBtaXNzaW5nIElTTzMxNjYtMiBjb2RlcworCSAqIEBwYXJhbSBhcmVhRGF0YSAtCisJICogICAgICAgICAgICBkaXJlY3RvcnkgY29uYWluaW5nIGFyZWFkIGRhdGEgZm9yIGVhY2ggY291bnRyeSBpbiBkYXRhIHNldC4KKwkgKiBAcGFyYW0gdGFyZ2V0RmlsZSAtCisJICogICAgICAgICAgICBkYXRhIGZpbGUgd2hlcmUgd2UgZmluZCBhIGxpc3Qgb2YgY291bnRyaWVzIGZvciBnZW5lcmF0aW9uIG9mCisJICogICAgICAgICAgICB0aGVpciBjb3JyZXNwb25kaW5nIGFyZWEucHJvcGVydGllcyBmaWxlcy4KKwkgKiBAcGFyYW0gcG9seWdvbkFyZWFEYXRhIC0KKwkgKiAgICAgICAgICAgIHRoZSBwYXRoIHRvIGFyZWEgZGF0YSBpbiBwb2x5Z29uIHVuaXRzCisJICogQHBhcmFtIGxleERpcgorCSAqICAgICAgICAgICAgZm9sZGVyIGNvbnRhaW5pbmcgbGV4aWNvZ3JhcGhpY2FsbHkgc29ydGVkIGZpbGVzCisJICogQHBhcmFtIG91dHB1dERpciAtCisJICogICAgICAgICAgICB0aGUgb3V0cHV0IGRpcmVjdG9yeSBmb3IgdGhlIGZpbGVzIGdlbmVyYXRlZC4KKwkgKiAKKwkgKi8KKwkvLyBwdWJsaWMgQXJlYUdlbmVyYXRvcihTdHJpbmcgaXNvMzE2Nl8xLCBTdHJpbmcgaXNvMzE2Nl8yLCBTdHJpbmcgZml4RmlsZSwKKwkvLyBTdHJpbmcgYXJlYURhdGEsIFN0cmluZyB0YXJnZXRGaWxlLCBTdHJpbmcgcG9seWdvbkFyZWFEYXRhLAorCS8vIFN0cmluZyBsZXhEaXIsIFN0cmluZyBvdXRwdXREaXIpIHsKKwkvLyAvLyBTZXQgdmFsdWVzIG9mIGdsb2JhbCB2YXJpYWJsZXMuCisJLy8gdGhpcy5pc28zMTY2XzEgPSBpc28zMTY2XzE7CisJLy8gdGhpcy5pc28zMTY2XzIgPSBpc28zMTY2XzI7CisJLy8gdGhpcy5maXhGaWxlID0gZml4RmlsZTsKKwkvLyB0aGlzLnRhcmdldEZpbGUgPSB0YXJnZXRGaWxlOworCS8vIHRoaXMuYXJlYURhdGEgPSBhcmVhRGF0YTsKKwkvLyB0aGlzLnBvbHlnb25BcmVhRGF0YSA9IHBvbHlnb25BcmVhRGF0YTsKKwkvLyB0aGlzLmxleERpciA9IGxleERpcjsKKwkvLyB0aGlzLm91dHB1dERpciA9IG91dHB1dERpcjsKKwkvLyB0YXJnZXRMaXN0ID0gbnVsbDsKKwkvLyAvLyBTZXQgdGhlIFVSTCBJRHMgdGhhdCBhcmUgcmVsZXZhbnQgZm9yIGFyZWEgZGF0YS4KKwkvLyBpbml0QXJlYVVSTFNldCgpOworCS8vIC8vIFNldCB3aGljaCBVUkxzIGFyZSBhY3RpdmUgYW5kIHdoaWNoIG9uZXMgc2hvdWxkIGJlIGNvbW1lbnRlZCBvdXQuCisJLy8gc2V0VVJMU3RhdHVzKCk7CisJLy8KKwkvLyB9CisJLyoqCisJICogQHBhcmFtIGNvbmZpZ0ZpbGUKKwkgKi8KKwlwdWJsaWMgQXJlYUdlbmVyYXRvcihTdHJpbmcgY29uZmlnRmlsZSkgeworCisJCS8vIExvYWQgYWxsIGNvbmZpZ3VyYXRpb24gdmFyaWFibGVzCisJCUhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+IHZhcnMgPSBHZW5VdGlscy5sb2FkQ29uZmlnRmlsZShjb25maWdGaWxlKTsKKworCQlTZXQ8U3RyaW5nPiBrZXlzID0gdmFycy5rZXlTZXQoKTsKKwkJSXRlcmF0b3IgaXQgPSBrZXlzLml0ZXJhdG9yKCk7CisJCXdoaWxlIChpdC5oYXNOZXh0KCkpIHsKKwkJCVN0cmluZyB2YXIgPSAoU3RyaW5nKSBpdC5uZXh0KCk7CisKKwkJCS8vIEFzc2lnbiB2YWx1ZXMgdG8gY29uZmlndXJhdGlvbiB2YXJpYWJsZXMgOgorCQkJaWYgKHZhci5lcXVhbHMoIldPUktTUEFDRSIpKSB7IC8vJE5PTi1OTFMtMSQKKwkJCQl3b3Jrc3BhY2UgPSB2YXJzLmdldCh2YXIpOworCQkJfSBlbHNlIGlmICh2YXIuZXF1YWxzKCJJU08zMTY2XzEiKSkgeyAvLyROT04tTkxTLTEkCisJCQkJaXNvMzE2Nl8xID0gdmFycy5nZXQodmFyKTsKKwkJCX0gZWxzZSBpZiAodmFyLmVxdWFscygiSVNPMzE2Nl8yIikpIHsgLy8kTk9OLU5MUy0xJAorCQkJCWlzbzMxNjZfMiA9IHZhcnMuZ2V0KHZhcik7CisJCQl9IGVsc2UgaWYgKHZhci5lcXVhbHMoIklTT19GSVgiKSkgeyAvLyROT04tTkxTLTEkCisJCQkJZml4RmlsZSA9IHZhcnMuZ2V0KHZhcik7CisJCQl9IGVsc2UgaWYgKHZhci5lcXVhbHMoIlRBUkdFVF9MSVNUIikpIHsgLy8kTk9OLU5MUy0xJAorCQkJCXRhcmdldEZpbGUgPSB2YXJzLmdldCh2YXIpOworCQkJfSBlbHNlIGlmICh2YXIuZXF1YWxzKCJQT0xZR09OX0FSRUFTIikpIHsgLy8kTk9OLU5MUy0xJAorCQkJCXBvbHlnb25BcmVhRGF0YSA9IHZhcnMuZ2V0KHZhcik7CisJCQl9IGVsc2UgaWYgKHZhci5lcXVhbHMoIkFSRUFfUE9QIikpIHsgLy8kTk9OLU5MUy0xJAorCQkJCWFyZWFEYXRhID0gdmFycy5nZXQodmFyKTsKKwkJCX0gZWxzZSBpZiAodmFyLmVxdWFscygiTEVYX0RJUiIpKSB7IC8vJE5PTi1OTFMtMSQKKwkJCQlsZXhEaXIgPSB2YXJzLmdldCh2YXIpOworCQkJfSBlbHNlIGlmICh2YXIuZXF1YWxzKCJQUk9QRVJUSUVTX09VVFBVVCIpKSB7IC8vJE5PTi1OTFMtMSQKKwkJCQlvdXRwdXREaXIgPSB2YXJzLmdldCh2YXIpOworCQkJfQorCisJCX0gLy8gd2hpbGUKKworCQkvLyBUaGUgd29ya3NwYWNlIHZhcmlhYmxlIHNob3VsZCBlbmQgd2l0aCBhIHNsYXNoIGNoYXJhY3RlcgorCQlpZiAod29ya3NwYWNlLmVuZHNXaXRoKCJcXCIpID09IGZhbHNlKSB7IC8vJE5PTi1OTFMtMSQKKwkJCXdvcmtzcGFjZSArPSAiXFwiOyAvLyROT04tTkxTLTEkCisJCX0KKworCQlTdHJpbmcgcGF0aCA9IHdvcmtzcGFjZSArIEdlbkNvbnN0YW50cy5QQVJBTVNfRElSOworCisJCS8vIFNldCByZW1haW5pbmcgY29uZmlnIHZhcnMgdXNpbmcgV09SS1NQQUNFICh3b3Jrc3BhY2UgcmVsYXRpdmUpCisJCWlmIChpc28zMTY2XzEgPT0gbnVsbCkgeworCQkJaXNvMzE2Nl8xID0gcGF0aCArIEdlbkNvbnN0YW50cy5JU08zMTY2XzFfRklMRTsKKwkJfQorCQlpZiAoaXNvMzE2Nl8yID09IG51bGwpIHsKKwkJCWlzbzMxNjZfMiA9IHBhdGggKyBHZW5Db25zdGFudHMuSVNPMzE2Nl8yX0ZJTEU7CisJCX0KKwkJaWYgKGZpeEZpbGUgPT0gbnVsbCkgeworCQkJZml4RmlsZSA9IHBhdGggKyBHZW5Db25zdGFudHMuSVNPRklYX0ZJTEU7CisJCX0KKwkJaWYgKHRhcmdldEZpbGUgPT0gbnVsbCkgeworCQkJdGFyZ2V0RmlsZSA9IHBhdGggKyBHZW5Db25zdGFudHMuR1JPVVBFRF9DT1VOVFJJRVM7CisJCX0KKwkJaWYgKHBvbHlnb25BcmVhRGF0YSA9PSBudWxsKSB7CisJCQlwb2x5Z29uQXJlYURhdGEgPSBwYXRoICsgR2VuQ29uc3RhbnRzLlBPTFlHT05fQVJFQVNfRElSOworCQl9CisJCWlmIChhcmVhRGF0YSA9PSBudWxsKSB7CisJCQlhcmVhRGF0YSA9IHBhdGggKyBHZW5Db25zdGFudHMuQVJFQV9QT1BVTEFUSU9OX0RJUjsKKwkJfQorCQlpZiAobGV4RGlyID09IG51bGwpIHsKKwkJCWxleERpciA9IHBhdGggKyBHZW5Db25zdGFudHMuTEVYX0RJUjsKKwkJfQorCQlpZiAob3V0cHV0RGlyID09IG51bGwpIHsKKwkJCW91dHB1dERpciA9IHdvcmtzcGFjZSArIEdlbkNvbnN0YW50cy5QUk9QRVJUSUVTX09VVFBVVF9ESVI7CisJCX0KKworCQl0YXJnZXRMaXN0ID0gbnVsbDsKKwkJLy8gU2V0IHRoZSBVUkwgSURzIHRoYXQgYXJlIHJlbGV2YW50IGZvciBhcmVhIGRhdGEuCisJCWluaXRBcmVhVVJMU2V0KCk7CisJCS8vIFNldCB3aGljaCBVUkxzIGFyZSBhY3RpdmUgYW5kIHdoaWNoIG9uZXMgc2hvdWxkIGJlIGNvbW1lbnRlZCBvdXQuCisJCXNldFVSTFN0YXR1cygpOworCisJfQorCisJLyoqCisJICogU2V0cyB0aGUgVVJMIElEcyByZWxldmFudCBmb3IgYXJlYSBkYXRhLiBXZSBhcmUgb25seSBpbnRlcmVzdGVkIGluIFVSTHMKKwkgKiB3aXRoIElEID0gRElWQS4gVGhpcyBjYW4gYmUgZGlmZmVyZW50IGZvciBkaWZmZXJlbnQgdHlwZXMgb2YgZGF0YS4gRm9yCisJICogZXhhbXBsZSwgZm9yIHBvcHVsYXRpb24gZGF0YSwgd2UgYXJlIGludGVyZXN0ZWQgb24gSUQgPSBDSUEKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBpbml0QXJlYVVSTFNldCgpIHsKKwkJdXJsU2V0ID0gbmV3IEhhc2hTZXQ8U3RyaW5nPigpOworCQl1cmxTZXQuYWRkKG5ldyBTdHJpbmcoIkNJQSIpKTsgLy8kTk9OLU5MUy0xJAorCQl1cmxTZXQuYWRkKG5ldyBTdHJpbmcoIlVTQ0VOU1VTQVJFQSIpKTsgLy8kTk9OLU5MUy0xJAorCQl1cmxTZXQuYWRkKG5ldyBTdHJpbmcoIlVTQ0VOU1VTQk9VTkRTIikpOyAvLyROT04tTkxTLTEkCisJCXVybFNldC5hZGQobmV3IFN0cmluZygiVVNDRU5TVVNQVUVSVE9SSUNPIikpOyAvLyROT04tTkxTLTEkCisJCXVybFNldC5hZGQobmV3IFN0cmluZygiQ0lUWVBPUFVMQVRJT04iKSk7IC8vJE5PTi1OTFMtMSQKKwkJdXJsU2V0LmFkZChuZXcgU3RyaW5nKCJVTklURUROQVRJT05TIikpOyAvLyROT04tTkxTLTEkCisJfQorCisJLyoqCisJICogU2V0IHdoaWNoIFVSTCBhcHBlYXJzIGFzIHVuY29tbWVudGVkIG9yIEFDVElWRSBhbmQgd2hpY2ggb25lcyBhcHBlYXIgYXMKKwkgKiBjb21tZW50ZWQgb3V0IG9yIFNFQ09OREFSWS4gT25seSBVUkwgc2hvdWxkIGJlIGFjdGl2ZS4gQWxsIG90aGVycyBzaG91bGQKKwkgKiBhcHBlYXIgY29tbWVudGVkLgorCSAqIAorCSAqLworCXByb3RlY3RlZCB2b2lkIHNldFVSTFN0YXR1cygpIHsKKwkJdXJsU3RhdHVzID0gbmV3IEhhc2hNYXA8U3RyaW5nLCBCb29sZWFuPigpOworCQkvLyBUaGlzIHdpbGwgYmUgdGhlIGFjdGl2ZSBVUkwuCisJCXVybFN0YXR1cy5wdXQoIkNJQSIsIG5ldyBCb29sZWFuKHRydWUpKTsgLy8kTk9OLU5MUy0xJAorCQkvLyBBbGwgb3RoZXIgVVJMcyBhcHBlYXIgYXMgY29tbWVudGVkIG91dCwgc2Vjb25kYXJ5LgorCQl1cmxTdGF0dXMucHV0KCJVU0NFTlNVU0FSRUEiLCBuZXcgQm9vbGVhbihmYWxzZSkpOyAvLyROT04tTkxTLTEkCisJCXVybFN0YXR1cy5wdXQoIlVTQ0VOU1VTQk9VTkRTIiwgbmV3IEJvb2xlYW4oZmFsc2UpKTsgLy8kTk9OLU5MUy0xJAorCQl1cmxTdGF0dXMucHV0KCJVU0NFTlNVU1BVRVJUT1JJQ08iLCBuZXcgQm9vbGVhbihmYWxzZSkpOyAvLyROT04tTkxTLTEkCisJCXVybFN0YXR1cy5wdXQoIkNJQSIsIG5ldyBCb29sZWFuKGZhbHNlKSk7IC8vJE5PTi1OTFMtMSQKKwkJdXJsU3RhdHVzLnB1dCgiQ0lUWVBPUFVMQVRJT04iLCBuZXcgQm9vbGVhbihmYWxzZSkpOyAvLyROT04tTkxTLTEkCisJCXVybFN0YXR1cy5wdXQoIlVOSVRFRE5BVElPTlMiLCBuZXcgQm9vbGVhbih0cnVlKSk7IC8vJE5PTi1OTFMtMSQKKwl9CisKKwkvKioKKwkgKiBUaGlzIG1ldGhvZCBzZXRzIHVwIGFuZCBydW5zIHRoaXMgZ2VuZXJhdG9yLgorCSAqIAorCSAqLworCXB1YmxpYyB2b2lkIHJ1bigpIHsKKworCQkvLyBSZWFkIGFuZCBrZWVwIGluIG1lbW9yeSBhIGxpc3Qgb2YgdGhlIGNvdW50cmllcyB3ZSB3YW50LgorCQl0YXJnZXRMaXN0ID0gR2VuVXRpbHMucG9wdWxhdGVMaXN0KHRhcmdldEZpbGUpOworCisJCS8vIFJlYWQgYW5kIGtlZXAgaW4gbWVtb3J5IGEgbGlzdCBvZiB0aGUgSVNPMzE2Ni0xIEFMUEhBMiwgQUxQSEEzLCBhbmQKKwkJLy8gbnVtZXJpYyBjb2Rlcy4KKwkJY29kZUxpc3QgPSBHZW5VdGlscy5wb3B1bGF0ZUxpc3QoaXNvMzE2Nl8xKTsKKworCQkvLyBSZWFkIGFuZCBrZWVwIGluIG1lbW9yeSBhIGxpc3Qgb2YgdGhlIG1pc3NpbmcgSVNPMzE2Ni0yIGNvZGVzCisJCWNvZGVmaXhMaXN0ID0gR2VuVXRpbHMucG9wdWxhdGVMaXN0KGZpeEZpbGUpOworCisJCS8vIFRISVMgSVMgQU4gU1BFQ0lBTCBDQVNFLgorCQkvLyBGT1IgVEhFIFVTQSBPTkxZLCBXRSBIQVZFIFRIRSBMRVZFTCAyIERBVEEgRk9SIEFMTCBDT1VOVElFUy4KKwkJdXNhTGV2ZWwyTGlzdCA9IEdlblV0aWxzLnBvcHVsYXRlTGlzdChHZW5Db25zdGFudHMuVVNBX0xFVkVMXzJfQVJFQSk7CisKKwkJLy8gTm93LCBwcm9jZXNzIGVhY2ggaXRlbSBpbiB0aGUgdGFyZ2V0IGxpc3QuCisJCXByb2Nlc3MoKTsKKwl9CisKKwkvKioKKwkgKiBQcm9jZXNzIG91ciBnbG9iYWwgbGlzdCBvZiB0YXJnZXQgY291bnRyaWVzLiBGb3IgZWFjaCBjb3VudHJ5IGluIGxpc3QsCisJICogZ2VuZXJhdGUgaXRzIGFyZWEucHJvcGVydGllcyBmaWxlLgorCSAqIAorCSAqLworCXByb3RlY3RlZCB2b2lkIHByb2Nlc3MoKSB7CisKKwkJZmluYWwgaW50IExFVkVMXzEgPSAxOworCQlmaW5hbCBpbnQgTEVWRUxfMiA9IDI7CisKKwkJLy8gQSB3cml0ZXIgZm9yIHRoZSBuZXcgZmlsZSB3ZSBhcmUgY3JlYXRpbmcuCisJCVByaW50V3JpdGVyIHByb3BlcnRpZXNGaWxlID0gbnVsbDsKKworCQkvLyBPYmplY3QgaG9sZGluZyBJU08zMTY2LTEgcmVsYXRlZCBkYXRhLgorCQlJU09Db2RlMSBpc29Db2RlID0gbnVsbDsKKworCQkvLyBOYW1lIG9mIHRoZSBuZXcgcHJvcGVydGllcyBmaWxlLgorCQlTdHJpbmcgZmlsZU5hbWUgPSBudWxsOworCisJCS8vIEEgbGlzdCBmb3IgSVNPIDMxNjYtMiBvYmplY3RzCisJCUxpc3QgaXNvMkxpc3QgPSBuZXcgQXJyYXlMaXN0KCk7CisKKwkJLy8gTGV2ZWwgMCBhcmVhIGluIHNxdWFyZSBraWxvbWV0ZXJzCisJCVN0cmluZyBsZXZlbDBBcmVhU3FLbSA9IG51bGw7CisKKwkJLy8gQWdncmVnYXRlIHBvbHlnb24gYXJlYSBmb3IgbGV2ZWwgMQorCQlTdHJpbmcgYWdncmVnYXRlTGV2ZWwxUG9seWdvbkFyZWEgPSBudWxsOworCisJCS8vIFZhbHVlIHVzZWQgYXMgZGVmYXVsdCB0byBjb21wdXRlIHRoZQorCQkvLyBhcHByb3hpbWF0ZSBhcmVhIG9mIGFuIHVua25vd24gbG9jYXRpb24KKwkJU3RyaW5nIGRlZmF1bHRBcmVhU3FLbSA9IERFRkFVTFQ7CisJCVN0cmluZyBkZWZhdWx0UG9seWdvbkFyZWEgPSBERUZBVUxUOworCisJCS8vIEZpbGVuYW1lcyBmb3IgbGV4MSBhbmQgbGV4MiBmaWxlcyBmb3IgYSBnaXZlbiBjb3VudHJ5LgorCQlTdHJpbmcgbGV4QWRtaW4xRmlsZSA9IG51bGw7CisJCVN0cmluZyBsZXhBZG1pbjJGaWxlID0gbnVsbDsKKworCQkvLyBMaXN0cyBob2xkaW5nIHRoZSBsZXgxIGFuZCBsZXgyIHZhbHVlcy4KKwkJLy8gTk9URTogbGV4IHZhbHVlcyBhcmUgdGhlIGxleGljb2dyYXBoaWNhbGx5IHNvcnRlZCB2YWx1ZXMgZm9yCisJCS8vIGFkbWluaXN0cmF0aW9uIGxldmVscy4KKwkJTGlzdDxTdHJpbmc+IGxleDFEYXRhU2V0ID0gbnVsbDsKKwkJTGlzdDxTdHJpbmc+IGxleDJEYXRhU2V0ID0gbnVsbDsKKworCQkvLyBMaXN0cyBmb3IgaG9sZGluZyBsZXgxIGFuZCBsZXgyIG9iamVjdHMgZm9yIGEgZ2l2ZW4gY291bnRyeS4KKwkJTGlzdDxMZXgxT2JqPiBsZXgxTGlzdCA9IG51bGw7CisJCUxpc3Q8TGV4Mk9iaj4gbGV4Mkxpc3QgPSBudWxsOworCisJCWludCBzaXplID0gdGFyZ2V0TGlzdC5zaXplKCk7CisKKwkJLy8gSXRlcmF0ZSBmb3IgZXZlcnkgY291bnRyeSBhbmQgY3JlYXRlIGl0cyBuYW1lcy5wcm9wZXJ0aWVzIGZpbGUuCisJCWZvciAoaW50IGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7CisKKwkJCS8vIEdldCB0aGUgbmV4dCBjb3VudHJ5IGluIHRoZSBsaXN0LgorCQkJU3RyaW5nIGZpbGUgPSAoKFN0cmluZykgdGFyZ2V0TGlzdC5nZXQoaSkpLnRyaW0oKTsKKworCQkJLy8gQW4gaW5kZXggZm9yIHVua253b24gb3Igbi5hLiBlbnRyaWVzCisJCQlpbnQgdW5rQ291bnRlciA9IDE7CisKKwkJCS8vIE9wZW4gdGhlIGRhdGEgc291cmNlIGZpbGUgZm9yIHRoaXMgY291bnRyeS4KKwkJCUJ1ZmZlcmVkUmVhZGVyIHJlYWRlciA9IEdlblV0aWxzLm9wZW5SZWFkZXIoZmlsZSk7CisKKwkJCVN5c3RlbS5vdXQKKwkJCQkJLnByaW50bG4oIlx0XHQ8PDw8IEFSRUEgR0VORVJBVE9SIC0tIFByb2Nlc3NpbmcgY291bnRyeSA6ICIgKyBmaWxlICsgIiA+Pj4+Iik7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAorCQkJdHJ5IHsKKworCQkJCWlmIChyZWFkZXIgIT0gbnVsbCkgeworCisJCQkJCVN0cmluZyBidWZmZXIgPSBudWxsOworCQkJCQkvLyBEZXNjcmliZXMgbGV2ZWwKKwkJCQkJLy8gb2YgZGF0YSB3ZQorCQkJCQkvLyBhcmUgbm93IHByb2Nlc3NpbmcgOiBMRVZFTDAsIExFVkVMMSwgb3IgTEVWRUwyLgorCQkJCQlpbnQgbGV2ZWwgPSAtMTsKKworCQkJCQkvLyBSZWNvcmQgdGhlIHByZXZpb3VzIGxldmVsLgorCQkJCQlpbnQgb2xkTGV2ZWwgPSBsZXZlbCAtIDE7CisKKwkJCQkJLy8gV2UgdGFrZSBhIGNodW5rIG9mIHRoZSBkYXRhIFtCVUZGRVJfTUlOLEJVRkZFUl9NQVhdIHRvCisJCQkJCS8vIG1ha2UgcHJvY2Vzc2luZyBtb3JlCisJCQkJCS8vIGVmZmljaWVudCwgd2UgZG9udCBuZWVkIGFsbCBvZiBpdC4KKwkJCQkJaW50IEJVRkZFUl9NSU4gPSAwOworCQkJCQlpbnQgQlVGRkVSX01BWCA9IDEyMDsKKworCQkJCQlMaXN0PFN0cmluZz4gZW50cnlMaXN0ID0gbnVsbDsKKworCQkJCQl3aGlsZSAoR2VuVXRpbHMuRU9GKGJ1ZmZlciA9IHJlYWRlci5yZWFkTGluZSgpKSAhPSB0cnVlKSB7CisKKwkJCQkJCS8vIE1ha2Ugc3VyZSB0aGF0IHdlIG1hcmsgYWxsIHVua25vd24gZGF0YS4KKwkJCQkJCWJ1ZmZlciA9IGJ1ZmZlci5yZXBsYWNlKCIsLCIsICIsVU5LTk9XTiwiKTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCisKKwkJCQkJCS8vIFVzZSBvbmx5IHBhcnQgb2YgdGhlIGJ1ZmZlciwgbm90IGFsbCBvZiBpdCBmb3IKKwkJCQkJCS8vIGVmZmljaWVueS4KKwkJCQkJCVN0cmluZ1tdIGl0ZW1zID0gR2VuVXRpbHMKKwkJCQkJCQkJLmV4dHJhY3QoYnVmZmVyLmxlbmd0aCgpIDwgQlVGRkVSX01BWCA/IGJ1ZmZlcgorCQkJCQkJCQkJCTogYnVmZmVyLnN1YnN0cmluZyhCVUZGRVJfTUlOLAorCQkJCQkJCQkJCQkJQlVGRkVSX01BWCkpOworCisJCQkJCQkvLyBHZXQgdGhlIElTTzMxNjYtMSBpbmZvIGZvciB0aGlzIGNvdW50cnkKKwkJCQkJCWlmIChpc29Db2RlID09IG51bGwpIHsKKwkJCQkJCQlpc29Db2RlID0gR2VuVXRpbHMuZ2V0SVNPQ29kZSgKKwkJCQkJCQkJCWl0ZW1zW0lTT0RhdGEuQ09VTlRSWV9OQU1FXSwgY29kZUxpc3QpOworCQkJCQkJfQorCisJCQkJCQkvLyBSZWFkIGFuZCBrZWVwIGluIG1lbW9yeSBhIGxpc3Qgb2YgdGhlIGFyZWEgZGF0YQorCQkJCQkJLy8gZm9yIHRoaXMgY291bnRyeS4KKwkJCQkJCWlmIChhcmVhTGlzdCA9PSBudWxsKSB7CisJCQkJCQkJU3RyaW5nIG5hbWUgPSBhcmVhRGF0YSArIGlzb0NvZGUuZ2V0TmFtZSgpCisJCQkJCQkJCQkrICJfQVJFQS50eHQiOyAvLyROT04tTkxTLTEkCisJCQkJCQkJYXJlYUxpc3QgPSBHZW5VdGlscy5wb3B1bGF0ZUxpc3QobmFtZSk7CisJCQkJCQl9CisKKwkJCQkJCS8vIEdldCB0aGUgbGV2ZWwgb2YgdGhlIGRhdGEgd2UgYXJlIHByb2Nlc3NpbmcuCisJCQkJCQlsZXZlbCA9IEdlblV0aWxzLmdldERhdGFMZXZlbChpdGVtcyk7CisKKwkJCQkJCWlmIChsZXZlbCAhPSAwICYmIGlzbzJMaXN0ICE9IG51bGwpIHsKKwkJCQkJCQkvLyBMb2FkIHRoZSBJU08gMzE2Ni0yIG9iamVjdHMgZm9yIHRoaXMgY291bnRyeQorCQkJCQkJCWlzbzJMaXN0ID0gR2VuVXRpbHMubG9hZElTTzIoaXNvMzE2Nl8yKTsKKwkJCQkJCX0KKworCQkJCQkJLy8gVGhpcyB2YXJpYWJsZSBpbmRpY2F0ZXMgYSB0cmFuc2l0aW9uIGluIG91ciBkYXRhCisJCQkJCQkvLyBwcm9jZXNzaW5nCisJCQkJCQlib29sZWFuIHRyYW5zaXRpb24gPSAobGV2ZWwgIT0gb2xkTGV2ZWwpID8gdHJ1ZSA6IGZhbHNlOworCisJCQkJCQkvLyBWYXJpYWJsZSB1c2VkIHRvIGhvbGQgdGhlIGZvcm1hdHRlZCBvdXRwdXQgZGF0YS4KKwkJCQkJCVN0cmluZyBkYXRhID0gbnVsbDsKKworCQkJCQkJLy8gVGhlIGN1cnJlbnQgZW50aXR5IHdlIGFyZSBkZWFsaW5nIHdpdGguCisJCQkJCQkvLyBCYXNlZCBvbiBpdHMgYWRtaW4gbGV2ZWwgaXQgY2FuIGJlIGEgY291bnRyeSwgYQorCQkJCQkJLy8gY291bnR5LCBldGM7CisJCQkJCQlTdHJpbmcgY3VycmVudCA9IG51bGw7CisKKwkJCQkJCS8vIERlc2NyaXB0b3IgZm9yIGN1cnJlbnQgZW50cnkuCisJCQkJCQlTdHJpbmcgZGVzY3JpcHRvciA9IG51bGw7CisKKwkJCQkJCWlmICh0cmFuc2l0aW9uID09IHRydWUpIHsKKwkJCQkJCQkvLyBLZWVwIHRyYWNrIG9mIHByZXZpb3VzIGxldmVsIGluIG9yZGVyIHRvIGRldGVjdAorCQkJCQkJCS8vIHRyYW5zaXRpb25zLgorCQkJCQkJCW9sZExldmVsID0gbGV2ZWw7CisJCQkJCQkJLy8gUmVzZXQgb3VyIHJlcGVhdGVkIGhpc3RvcnkKKwkJCQkJCQlpZiAoZW50cnlMaXN0ICE9IG51bGwpIHsKKwkJCQkJCQkJZW50cnlMaXN0LmNsZWFyKCk7CisJCQkJCQkJfQorCQkJCQkJCWVudHJ5TGlzdCA9IG5ldyBBcnJheUxpc3Q8U3RyaW5nPigpOworCisJCQkJCQkJLy8gUmVzZXQgY291bnRlciBvZiBVTktOT1dOIGFuZCBOLkEuIGVudHJpZXMuCisJCQkJCQkJdW5rQ291bnRlciA9IDE7CisJCQkJCQkJLy8gQ2xvc2UgcHJldmlvdXMgZmlsZSBpZiBpdCBpcyBzdGlsbCBvcGVuLgorCQkJCQkJCWlmIChwcm9wZXJ0aWVzRmlsZSAhPSBudWxsKSB7CisJCQkJCQkJCVV0aWxMb2dnZXIubG9nSW5mb3JtYXRpb24oIlx0XHQ8PEdlbmVyYXRlZCA6ICIgLy8kTk9OLU5MUy0xJAorCQkJCQkJCQkJCSsgZmlsZU5hbWUgKyAiPj4iKTsgLy8kTk9OLU5MUy0xJAorCQkJCQkJCQlwcm9wZXJ0aWVzRmlsZS5jbG9zZSgpOworCQkJCQkJCQlwcm9wZXJ0aWVzRmlsZSA9IG51bGw7CisJCQkJCQkJCWZpbGVOYW1lID0gbnVsbDsKKwkJCQkJCQl9CisKKwkJCQkJCQkvLyBSZWFkIGFuZCBrZWVwIGluIG1lbW9yeSBhIGxpc3Qgb2YgdGhlIGxldmVsIDEKKwkJCQkJCQkvLyBhcmVhIGRhdGEKKwkJCQkJCQkvLyBpbiBwb2x5Z29uIHVuaXRzIGZvciB0aGlzIGNvdW50cnkuCisJCQkJCQkJaWYgKGxldmVsMVBvbHlnb25BcmVhTGlzdCA9PSBudWxsICYmIGxldmVsID09IDEpIHsKKworCQkJCQkJCQkvLyBMb2FkIHRoZSBwb2x5Z29uIGFyZWEgZGF0YSBmb3IgbGV2ZWwgMS4KKwkJCQkJCQkJU3RyaW5nIG5hbWUgPSBwb2x5Z29uQXJlYURhdGEKKwkJCQkJCQkJCQkrIGlzb0NvZGUuZ2V0QWxwaGEzKCkKKwkJCQkJCQkJCQkrICJcXCIgLy8kTk9OLU5MUy0xJAorCQkJCQkJCQkJCSsgaXNvQ29kZS5nZXRBbHBoYTMoKQorCQkJCQkJCQkJCSsgIl8xX1BPTFlBUkVBLnR4dCI7IC8vJE5PTi1OTFMtMSQKKworCQkJCQkJCQkvLyBMb2FkIGxldmVsIDEgcG9seWdvbiBhcmVhIGxpc3QKKwkJCQkJCQkJbGV2ZWwxUG9seWdvbkFyZWFMaXN0ID0gR2VuVXRpbHMKKwkJCQkJCQkJCQkucG9wdWxhdGVMaXN0KG5hbWUpOworCisJCQkJCQkJCS8vIEZpbmQgdGhlIGxldmVsIDAgYXJlYSBpbiBzcXVhcmUga2lsb21ldGVycworCQkJCQkJCQlsZXZlbDBBcmVhU3FLbSA9IGdldEFyZWEoCisJCQkJCQkJCQkJaXRlbXNbSVNPRGF0YS5DT1VOVFJZX05BTUVdLAorCQkJCQkJCQkJCWl0ZW1zW0lTT0RhdGEuQ09VTlRSWV9OQU1FXSwgYXJlYUxpc3QsCisJCQkJCQkJCQkJMCk7CisKKwkJCQkJCQkJLy8gRmluZCB0aGUgYWdncmVnYXRlIHBvbHlnb24gYXJlYSBmb3IgbGV2ZWwgMQorCQkJCQkJCQlhZ2dyZWdhdGVMZXZlbDFQb2x5Z29uQXJlYSA9IGdldEFnZ3JlZ2F0ZUFyZWEobGV2ZWwxUG9seWdvbkFyZWFMaXN0KTsKKwkJCQkJCQl9CisKKwkJCQkJCQkvLyBSZWFkIGFuZCBrZWVwIGluIG1lbW9yeSBhIGxpc3Qgb2YgdGhlIGxldmVsIDIKKwkJCQkJCQkvLyBhcmVhIGRhdGEKKwkJCQkJCQkvLyBpbiBwb2x5Z29uIHVuaXRzIGZvciB0aGlzIGNvdW50cnkuCisJCQkJCQkJaWYgKGxldmVsMlBvbHlnb25BcmVhTGlzdCA9PSBudWxsICYmIGxldmVsID09IDIpIHsKKworCQkJCQkJCQkvLyBMb2FkIHRoZSBwb2x5Z29uIGFyZWEgZGF0YSBmb3IgbGV2ZWwgMi4KKwkJCQkJCQkJU3RyaW5nIG5hbWUgPSBwb2x5Z29uQXJlYURhdGEKKwkJCQkJCQkJCQkrIGlzb0NvZGUuZ2V0QWxwaGEzKCkKKwkJCQkJCQkJCQkrICJcXCIgKyBpc29Db2RlLmdldEFscGhhMygpIC8vJE5PTi1OTFMtMSQKKwkJCQkJCQkJCQkrICJfMl9QT0xZQVJFQS50eHQiOyAvLyROT04tTkxTLTEkCisKKwkJCQkJCQkJbGV2ZWwyUG9seWdvbkFyZWFMaXN0ID0gR2VuVXRpbHMKKwkJCQkJCQkJCQkucG9wdWxhdGVMaXN0KG5hbWUpOworCisJCQkJCQkJfQorCisJCQkJCQl9CisKKwkJCQkJCS8vIElmIHRoZSBkaXJlY3RvcnkgZG9lcyBub3QgZXhpc3QgZm9yIHRoaXMgY291bnRyeSwKKwkJCQkJCS8vIGNyZWF0ZSBpdCB1c2luZyBJU08gYWxwaGEzIGNvZGUuCisJCQkJCQlGaWxlIGNvdW50cnlEaXIgPSBuZXcgRmlsZShvdXRwdXREaXIKKwkJCQkJCQkJKyBpc29Db2RlLmdldEFscGhhMygpKTsKKworCQkJCQkJaWYgKGNvdW50cnlEaXIgIT0gbnVsbCAmJiBjb3VudHJ5RGlyLmV4aXN0cygpID09IGZhbHNlKSB7CisJCQkJCQkJLy8gRGlyZWN0b3J5IGRvZXMgbm90IGV4aXN0LiBDcmVhdGUgaXQuCisJCQkJCQkJY291bnRyeURpci5ta2RpcigpOworCQkJCQkJfQorCisJCQkJCQkvLyBDcmVhdGUgYW5kIG9wZW4gdGhlIG5ldyBmaWxlLgorCQkJCQkJaWYgKHByb3BlcnRpZXNGaWxlID09IG51bGwpIHsKKwkJCQkJCQkvLyBDcmVhdGUgdGhlIGZpbGUgbmFtZSBmb3IgdGhlIG5ldyBwcm9wZXJ0aWVzLmZpbGUuCisJCQkJCQkJZmlsZU5hbWUgPSBjb3VudHJ5RGlyICsgIlxcIiArIGlzb0NvZGUuZ2V0QWxwaGEzKCkgLy8kTk9OLU5MUy0xJAorCQkJCQkJCQkJKyAiXyIgKyBsZXZlbCArICJfIiArICJhcmVhLnByb3BlcnRpZXMiOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQgLy8kTk9OLU5MUy0zJAorCQkJCQkJCS8vIENyZWF0ZSB0bmUgbmV3IHByb3BlcnRpZXMuZmlsZSBmb3IgdGhpcyBjb3VudHJ5LgorCQkJCQkJCXByb3BlcnRpZXNGaWxlID0gR2VuVXRpbHMub3BlbldyaXRlcihmaWxlTmFtZSk7CisJCQkJCQl9CisKKwkJCQkJCS8vIElmIHdlIGhhdmUgc3dpdGNoZWQgdG8gYSBkaWZmZXJlbnQgZGF0YSBsZXZlbCAoaSxlLAorCQkJCQkJLy8gYWRtaW4gMCB0byBhZG1pbiAxKQorCQkJCQkJaWYgKHRyYW5zaXRpb24gPT0gdHJ1ZSkgeworCQkJCQkJCS8vIEp1c3QgYWRkIHRoZSBoZWFkZXIuCisJCQkJCQkJZGF0YSA9IGdldEhlYWRlcihpc29Db2RlLCBsZXZlbCk7CisJCQkJCQkJR2VuVXRpbHMuYWRkRGF0YShwcm9wZXJ0aWVzRmlsZSwgZGF0YSk7CisJCQkJCQkJLy8gRm9yZ2V0IHRoZSBkYXRhIHdlIGp1c3Qgd3JvdGUuCisJCQkJCQkJZGF0YSA9IG51bGw7CisJCQkJCQl9CisKKwkJCQkJCXN3aXRjaCAobGV2ZWwpIHsKKworCQkJCQkJY2FzZSBEYXRhVHlwZXMuTEVWRUxfMDoKKworCQkJCQkJCWlmICh0cmFuc2l0aW9uID09IHRydWUpIHsKKwkJCQkJCQkJZGF0YSA9ICIjIENvdW50cnlcbiI7IC8vJE5PTi1OTFMtMSQKKwkJCQkJCQkJZGF0YSArPSBpc29Db2RlLmdldEFscGhhMygpCisJCQkJCQkJCQkJKyAiID0gIiAvLyROT04tTkxTLTEkCisJCQkJCQkJCQkJKyBnZXRBcmVhKGl0ZW1zW0lTT0RhdGEuQ09VTlRSWV9OQU1FXSwKKwkJCQkJCQkJCQkJCWxldmVsKSArICJcbiI7IC8vJE5PTi1OTFMtMSQKKwkJCQkJCQkJLy8gV3JpdGUgZm9ybWF0dGVkIG91dHB1dAorCQkJCQkJCQlHZW5VdGlscy5hZGREYXRhKHByb3BlcnRpZXNGaWxlLCBkYXRhKTsKKwkJCQkJCQl9CisJCQkJCQkJY29udGludWU7CisKKwkJCQkJCWNhc2UgRGF0YVR5cGVzLkxFVkVMXzE6CisKKwkJCQkJCQljdXJyZW50ID0gaXRlbXNbSVNPRGF0YS5BRE1JTjFfTkFNRV0udG9VcHBlckNhc2UoKTsKKwkJCQkJCQlicmVhazsKKworCQkJCQkJY2FzZSBEYXRhVHlwZXMuTEVWRUxfMjoKKworCQkJCQkJCWN1cnJlbnQgPSBpdGVtc1tJU09EYXRhLkFETUlOMl9OQU1FXS50b1VwcGVyQ2FzZSgpOworCQkJCQkJCWJyZWFrOworCisJCQkJCQl9IC8vIHN3aXRjaAorCisJCQkJCQkvLyBIYW5kbGUgVU5LTk9XTiBhbmQgTi5BLiBlbnRyaWVzIGRpZmZlcmVudGx5LgorCQkJCQkJaWYgKGN1cnJlbnQuZXF1YWxzKCJVTktOT1dOIikgfHwgY3VycmVudC5lcXVhbHMoIk4uQS4iKSkgeyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKKworCQkJCQkJCWlmIChsZXZlbCA9PSAxKSB7CisJCQkJCQkJCWN1cnJlbnQgPSBpc29Db2RlLmdldEFscGhhMigpICsgIi1VTkstIiAvLyROT04tTkxTLTEkCisJCQkJCQkJCQkJKyBTdHJpbmcudmFsdWVPZih1bmtDb3VudGVyKyspOworCQkJCQkJCX0gZWxzZSB7CisJCQkJCQkJCS8vIExldmVsIDIgZGF0YS4KKwkJCQkJCQkJY3VycmVudCA9IGlzb0NvZGUuZ2V0QWxwaGEzKCkgKyAiLkwyLiIgLy8kTk9OLU5MUy0xJAorCQkJCQkJCQkJCSsgU3RyaW5nLnZhbHVlT2YodW5rQ291bnRlcisrKTsKKwkJCQkJCQl9CisJCQkJCQl9CisKKwkJCQkJCS8vIFZlcmlmeSBmb3IgcmVwZWF0ZWQgZW50cmllcyAtLSBhdm9pZCBkdXBsY2F0ZXMKKwkJCQkJCXN3aXRjaCAobGV2ZWwpIHsKKworCQkJCQkJY2FzZSBMRVZFTF8xOgorCQkJCQkJCWlmIChHZW5VdGlscy5pc1JlcGVhdGVkKGN1cnJlbnQsIGVudHJ5TGlzdCkgPT0gdHJ1ZSkgeworCQkJCQkJCQkvLyBEdXBsaWNhdGVkLCBpZ25vcmUuCisJCQkJCQkJCWNvbnRpbnVlOworCQkJCQkJCX0KKwkJCQkJCQkvLyBSZW1lbWJlciB0aGlzIGVudGl0eSB0byBhdm9pZCBkdXBsaWNhdGVzLgorCQkJCQkJCWVudHJ5TGlzdC5hZGQoY3VycmVudCk7CisJCQkJCQkJYnJlYWs7CisKKwkJCQkJCWNhc2UgTEVWRUxfMjoKKwkJCQkJCQlpZiAoR2VuVXRpbHMuaXNSZXBlYXRlZChpdGVtc1tJU09EYXRhLkFETUlOMV9OQU1FXQorCQkJCQkJCQkJKyBjdXJyZW50LCBlbnRyeUxpc3QpID09IHRydWUpIHsKKwkJCQkJCQkJLy8gRHVwbGljYXRlZCwgaWdub3JlLgorCQkJCQkJCQljb250aW51ZTsKKwkJCQkJCQl9CisJCQkJCQkJLy8gUmVtZW1iZXIgdGhpcyBlbnRpdHkgdG8gYXZvaWQgZHVwbGljYXRlcy4KKwkJCQkJCQllbnRyeUxpc3QuYWRkKGl0ZW1zW0lTT0RhdGEuQURNSU4xX05BTUVdICsgY3VycmVudCk7CisJCQkJCQkJYnJlYWs7CisKKwkJCQkJCX0KKworCQkJCQkJLy8gV2UgZ2V0IHRoZSBkZXNjcmlwdG9yIGZvciBhZG1pbmlzdHJhdGlvbiBlbnRpdGllcworCQkJCQkJLy8gZGlmZmVyZW50bHkgYmFzZWQgb24gaXRzIGxldmVsLgorCQkJCQkJaWYgKGxldmVsID09IDIpIHsKKworCQkJCQkJCWlmIChsZXgxRGF0YVNldCA9PSBudWxsICYmIGxleDJEYXRhU2V0ID09IG51bGwpIHsKKworCQkJCQkJCQkvLyBDb21wb3NlIHRoZSBmaWxlIG5hbWVzIGZvciB0aGUgbGV4IGZpbGVzIGZvcgorCQkJCQkJCQkvLyB0aGlzIGNvdW50cnkKKwkJCQkJCQkJbGV4QWRtaW4xRmlsZSA9IGxleERpciArIGlzb0NvZGUuZ2V0QWxwaGEzKCkKKwkJCQkJCQkJCQkrICJcXCIgKyBpc29Db2RlLmdldEFscGhhMygpOyAvLyROT04tTkxTLTEkCisJCQkJCQkJCWxleEFkbWluMkZpbGUgPSBsZXhBZG1pbjFGaWxlOworCQkJCQkJCQlsZXhBZG1pbjFGaWxlICs9ICJfQURNSU4xX0xFWC50eHQiOyAvLyROT04tTkxTLTEkCisJCQkJCQkJCWxleEFkbWluMkZpbGUgKz0gIl9BRE1JTjJfTEVYLnR4dCI7IC8vJE5PTi1OTFMtMSQKKworCQkJCQkJCQkvLyBMb2FkIHRoZSBsZXgxIGFuZCBsZXgyIGZpbGVzIGZvciB0aGlzCisJCQkJCQkJCS8vIGNvdW50cnkuCisJCQkJCQkJCWxleDFEYXRhU2V0ID0gR2VuVXRpbHMKKwkJCQkJCQkJCQkucG9wdWxhdGVMaXN0KGxleEFkbWluMUZpbGUpOworCQkJCQkJCQlsZXgyRGF0YVNldCA9IEdlblV0aWxzCisJCQkJCQkJCQkJLnBvcHVsYXRlTGlzdChsZXhBZG1pbjJGaWxlKTsKKworCQkJCQkJCQkvLyBDcmVhdGUgYSBtZXRob2QgdG8gc2VhcmNoIGZvciBhbiBpdGVtIG9uIGEKKwkJCQkJCQkJLy8gbGlzdAorCQkJCQkJCQkvLyBvZiBsZXggZGF0YSBvYmplY3RzLgorCQkJCQkJCQlsZXgxTGlzdCA9IEdlblV0aWxzLmNyZWF0ZUxleDFMaXN0KGxleDFEYXRhU2V0KTsKKwkJCQkJCQkJbGV4Mkxpc3QgPSBHZW5VdGlscy5jcmVhdGVMZXgyTGlzdChsZXgyRGF0YVNldCk7CisKKwkJCQkJCQl9CisKKwkJCQkJCQkvLyBDb21wb3NlIHRoZSBsZXZlbDIgZGVzY3JpcHRvciB1c2luZyB0aGUgbGV4IGRhdGE6CisKKwkJCQkJCQkvLyBTVEVQIDE6IERvIGEgbG9vayB1cCBpbiB0aGUgbGV4IDIgbGlzdHMuCisKKwkJCQkJCQkvLyBHZXQgdGhlIGxleCAyIG9iamVjdCBmb3IgdGhlIGN1cnJlbnQgZW50cnkuCisJCQkJCQkJTGV4Mk9iaiBsZXgyQ3VycmVudCA9IEdlblV0aWxzLmxleDJMb29rdXAobGV4Mkxpc3QsCisJCQkJCQkJCQlpdGVtc1tJU09EYXRhLkFETUlOMV9OQU1FXSwgY3VycmVudCk7CisKKwkJCQkJCQkvLyBHZXQgdGhlIGxleCAxIG9iamVjdCB0byB3aGljaCBsZXgyQ3VycmVudCBiZWxvbmdzCisJCQkJCQkJLy8gdG8uCisJCQkJCQkJTGV4MU9iaiBsZXgxQ3VycmVudCA9IEdlblV0aWxzLmxleDFMb29rdXAobGV4MUxpc3QsCisJCQkJCQkJCQlsZXgyQ3VycmVudC5nZXRBZG1pbjEoKSk7CisKKwkJCQkJCQkvLyBTVEVQIDI6IHBpZWNlIHRvZ2V0aGVyIHRoZSBJRCB1c2luZyB0aGUKKwkJCQkJCQkvLyBwcm9wZXIgbGV4IG9iamVjdHMgOiB0aGUgVVNBIGlzIGEgc3BlY2lhbAorCQkJCQkJCS8vIGNhc2UKKwkJCQkJCQlpZiAobGV4MUN1cnJlbnQuZ2V0RGVzY3JpcHRvcigpLmNvbnRhaW5zKCJVUy0iKSkgeyAvLyROT04tTkxTLTEkCisJCQkJCQkJCWRlc2NyaXB0b3IgPSBsZXgxQ3VycmVudC5nZXREZXNjcmlwdG9yKCkKKwkJCQkJCQkJCQkrICItIiAvLyROT04tTkxTLTEkCisJCQkJCQkJCQkJKyBsZXgxQ3VycmVudC5nZXRGb3JtYXR0ZWRJbmRleCgpCisJCQkJCQkJCQkJKyBsZXgyQ3VycmVudC5nZXRGb3JtYXR0ZWRJbmRleFVTQSgpOworCQkJCQkJCX0gZWxzZSB7CisJCQkJCQkJCWRlc2NyaXB0b3IgPSBsZXgxQ3VycmVudC5nZXREZXNjcmlwdG9yKCkKKwkJCQkJCQkJCQkrICItRyIgLy8kTk9OLU5MUy0xJAorCQkJCQkJCQkJCSsgbGV4MUN1cnJlbnQuZ2V0Rm9ybWF0dGVkSW5kZXgoKQorCQkJCQkJCQkJCSsgbGV4MkN1cnJlbnQuZ2V0Rm9ybWF0dGVkSW5kZXgoKTsKKwkJCQkJCQkJLy8gQWRkIHNvbWUgY29tbWVucyB0byBhbGxvdyByZXZlcnNlIGVuZ2luZWVyaW5nCisJCQkJCQkJCS8vIG9yIGJhY2t0cmFja2luZyB0aGUgb3JpZ2luIG9mIHRoaXMgZ2VuZXJhdGVkCisJCQkJCQkJCS8vIGtleSBhcyBtdWNoIGFzIHBvc3NpYmxlLgorCQkJCQkJCQlkYXRhID0gIiMgR2VuZXJhdGVkIGtleSBkZXRhaWxzIDogIiAvLyROT04tTkxTLTEkCisJCQkJCQkJCQkJKyAiIExldmVsIDEgKCAiIC8vJE5PTi1OTFMtMSQKKwkJCQkJCQkJCQkrIGxleDFDdXJyZW50LmdldERlc2NyaXB0b3IoKQorCQkJCQkJCQkJCSsgIiA9ICIgLy8kTk9OLU5MUy0xJAorCQkJCQkJCQkJCSsgbGV4MUN1cnJlbnQuZ2V0QWRtaW4xKCkKKwkJCQkJCQkJCQkrICIpLiAiIC8vJE5PTi1OTFMtMSQKKwkJCQkJCQkJCQkrICJMZXZlbCAyIiAvLyROT04tTkxTLTEkCisJCQkJCQkJCQkJKyBsZXgxQ3VycmVudC5nZXRGb3JtYXR0ZWRJbmRleCgpCisJCQkJCQkJCQkJKyBsZXgyQ3VycmVudC5nZXRGb3JtYXR0ZWRJbmRleCgpCisJCQkJCQkJCQkJKyAiID0gIiArIGxleDJDdXJyZW50LmdldEFkbWluMigpIC8vJE5PTi1OTFMtMSQKKwkJCQkJCQkJCQkrICIpLiBcbiI7IC8vJE5PTi1OTFMtMSQKKwkJCQkJCQl9CisKKwkJCQkJCX0gZWxzZSB7IC8vIENvbXBvc2UgZGVzY3JpcHRvciBmb3IgbGV2ZWwgMSBhbmQgbGV2ZWwKKwkJCQkJCQkvLyAwIGRhdGEuCisJCQkJCQkJLy8gR2V0IHRoZSBkZXNjcmlwdG9yIGZvciB0aGlzIGVudGl0eS4KKwkJCQkJCQlkZXNjcmlwdG9yID0gR2VuVXRpbHMuZ2V0SVNPMkRlc2NyaXB0b3IoaXNvMkxpc3QsCisJCQkJCQkJCQljdXJyZW50LCBpc29Db2RlLmdldEFscGhhMigpKTsKKworCQkJCQkJCS8vIElmIHdlIGNhbnQgZmluZCB0aGUgZGVzY3JpcHRvciwgdGhlbiBsb29rIGluIHRoZQorCQkJCQkJCS8vIGZpeCBsaXN0LgorCQkJCQkJCWlmIChkZXNjcmlwdG9yLmVxdWFscyhjdXJyZW50KSA9PSB0cnVlKSB7CisJCQkJCQkJCS8vIExvb2sgZm9yIGEgZGVzY3JpcHRvciBpbiB0aGUgZml4IGZpbGUKKwkJCQkJCQkJZGVzY3JpcHRvciA9IEdlblV0aWxzLmdldEZpeENvZGUoY29kZWZpeExpc3QsCisJCQkJCQkJCQkJY3VycmVudCwgaXRlbXNbSVNPRGF0YS5DT1VOVFJZX05BTUVdKTsKKworCQkJCQkJCQkvLyBJZiB0aGVyZSBpcyBubyBkZXNjcmlwdG9yIHN0aWxsLCBnZW5lcmF0ZQorCQkJCQkJCQkvLyBvbmUhCisJCQkJCQkJCWlmIChkZXNjcmlwdG9yLmVxdWFscyhjdXJyZW50KSA9PSB0cnVlKSB7CisJCQkJCQkJCQlkZXNjcmlwdG9yID0gaXNvQ29kZS5nZXRBbHBoYTIoKSArICItIiAvLyROT04tTkxTLTEkCisJCQkJCQkJCQkJCSsgY3VycmVudDsKKwkJCQkJCQkJfQorCQkJCQkJCX0KKworCQkJCQkJCWRhdGEgPSAiIyIgKyBjdXJyZW50ICsgIlxuIjsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCisKKwkJCQkJCX0KKworCQkJCQkJU3RyaW5nIGFyZWEgPSBERUZBVUxUOworCQkJCQkJU3RyaW5nIGxldmVsMUFyZWFTcUttID0gREVGQVVMVDsKKworCQkJCQkJc3dpdGNoIChsZXZlbCkgeworCisJCQkJCQljYXNlIDE6CisKKwkJCQkJCQlpZiAoZGVzY3JpcHRvci5jb250YWlucygiVU5LIikgPT0gZmFsc2UpIHsgLy8kTk9OLU5MUy0xJAorCQkJCQkJCQlhcmVhID0gZ2V0QXJlYShjdXJyZW50LAorCQkJCQkJCQkJCWl0ZW1zW0lTT0RhdGEuQ09VTlRSWV9OQU1FXSwgYXJlYUxpc3QsCisJCQkJCQkJCQkJbGV2ZWwpOworCQkJCQkJCX0gZWxzZSB7CisJCQkJCQkJCS8vIFVzZSB0aGUgZm9sbG93aW5nIGZvcm11bGEgdG8gY29tcHV0ZQorCQkJCQkJCQkvLyBhcHByb3hpbWF0ZSBhcmVhIDoKKwkJCQkJCQkJLy8gW1BPTFlHT05fQVJFQTEvUE9MWUdPTl9BUkVBMF0gKiBBUkVBMF9TUUtNCisKKwkJCQkJCQkJYXJlYSA9IGdldEFwcHJveGltYXRlTDFBcmVhKGN1cnJlbnQsCisJCQkJCQkJCQkJaXRlbXNbSVNPRGF0YS5DT1VOVFJZX05BTUVdLAorCQkJCQkJCQkJCWFnZ3JlZ2F0ZUxldmVsMVBvbHlnb25BcmVhLAorCQkJCQkJCQkJCWxldmVsMEFyZWFTcUttKTsKKworCQkJCQkJCX0KKworCQkJCQkJCWJyZWFrOworCisJCQkJCQljYXNlIDI6CisKKwkJCQkJCQkvLyBUcmVhdCB0aGUgVVNBIGFzIGEgc3BlY2lhbCBjYXNlIDoKKwkJCQkJCQkvLyBmb3IgdGhlIFVTQSB3ZSBoYXZlIGEgbGlzdCBvZiBsZXZlbCAyIGRhdGEuCisJCQkJCQkJaWYgKGRlc2NyaXB0b3IuY29udGFpbnMoIlVTLSIpKSB7IC8vJE5PTi1OTFMtMSQKKworCQkJCQkJCQkvLyBGaXJ0LCBmaW5kIHRoZSBJU09Db2RlMiBmb3IgdGhpcyBVU0EgYWRtaW4uCisJCQkJCQkJCUlTT0NvZGUyIGNvZGUgPSBHZW5VdGlscy5nZXRJU08yT2JqZWN0KAorCQkJCQkJCQkJCWlzbzJMaXN0LCBpdGVtc1tJU09EYXRhLkFETUlOMV9OQU1FXSwKKwkJCQkJCQkJCQlpc29Db2RlLmdldEFscGhhMigpKTsKKworCQkJCQkJCQkvLyBTZWNvbmQsIGZpbmQgdGhlIGFyZWEgZm9yIHRoaXMgVVNBIGFkbWluLgorCQkJCQkJCQlhcmVhID0gZ2V0VVNBTDJBcmVhKGl0ZW1zW0lTT0RhdGEuQURNSU4yX05BTUVdLAorCQkJCQkJCQkJCWNvZGUuZ2V0SW5kZXgoKSwgdXNhTGV2ZWwyTGlzdCk7CisJCQkJCQkJCWJyZWFrOworCQkJCQkJCX0KKworCQkJCQkJCWlmIChkZXNjcmlwdG9yLmNvbnRhaW5zKCJVTksiKSA9PSBmYWxzZSkgeyAvLyROT04tTkxTLTEkCisKKwkJCQkJCQkJLy8gRmlyc3QsIGdldCB0aGUgYXJlYSBpbiBTUSBLTSBmb3IgdGhlIGxldmVsIDEKKwkJCQkJCQkJLy8gY29udGFpbmVyIG9mIHRoZSBjdXJyZW50IGxldmVsIDIgYWRtaW5zdHJhdGluCisJCQkJCQkJCWxldmVsMUFyZWFTcUttID0gZ2V0QXJlYSgKKwkJCQkJCQkJCQlpdGVtc1tJU09EYXRhLkFETUlOMV9OQU1FXSwKKwkJCQkJCQkJCQlpdGVtc1tJU09EYXRhLkNPVU5UUllfTkFNRV0sIGFyZWFMaXN0LAorCQkJCQkJCQkJCWxldmVsIC0gMSk7CisKKwkJCQkJCQkJLy8gTm93IGdldCB0aGUgYXBwcm94aW1hdGUgYXJlYSBpbiBTUSBLTSBmb3IgdGhlCisJCQkJCQkJCS8vIGxldmVsIDIgYWRtaW5pc3RyYXRpb24KKwkJCQkJCQkJYXJlYSA9IGdldEFwcHJveGltYXRlTDJBcmVhKGRlc2NyaXB0b3IsCisJCQkJCQkJCQkJaXRlbXNbSVNPRGF0YS5BRE1JTjFfTkFNRV0sCisJCQkJCQkJCQkJaXRlbXNbSVNPRGF0YS5DT1VOVFJZX05BTUVdLAorCQkJCQkJCQkJCWxldmVsMUFyZWFTcUttKTsKKwkJCQkJCQl9IGVsc2UgeworCQkJCQkJCQkvLyBVc2UgdGhlIGZvbGxvd2luZyBmb3JtdWxhIHRvIGNvbXB1dGUKKwkJCQkJCQkJLy8gYXBwcm94aW1hdGUgYXJlYSA6CisJCQkJCQkJCS8vIFtQT0xZR09OX0FSRUEyIC8gUE9MWUdPTl9BUkVBMV0gKiBBUkVBMV9TUUtNCisKKwkJCQkJCQkJU3RyaW5nIGxldmVsMlBvbHlnb25BcmVhID0gZ2V0UG9seWdvbkFyZWEoCisJCQkJCQkJCQkJZGVzY3JpcHRvciwgaXRlbXNbSVNPRGF0YS5BRE1JTjFfTkFNRV0sCisJCQkJCQkJCQkJbGV2ZWwyUG9seWdvbkFyZWFMaXN0LCAyKTsKKworCQkJCQkJCQlkb3VibGUgcmF0aW8gPSAwLjA7CisJCQkJCQkJCWRvdWJsZSBhcHByb3hBcmVhID0gMC4wOworCisJCQkJCQkJCWlmIChEb3VibGUucGFyc2VEb3VibGUoZGVmYXVsdFBvbHlnb25BcmVhKSAhPSAwKSB7CisJCQkJCQkJCQlyYXRpbyA9IERvdWJsZQorCQkJCQkJCQkJCQkucGFyc2VEb3VibGUobGV2ZWwyUG9seWdvbkFyZWEpCisJCQkJCQkJCQkJCSogRG91YmxlCisJCQkJCQkJCQkJCQkJLnBhcnNlRG91YmxlKGRlZmF1bHRQb2x5Z29uQXJlYSk7CisJCQkJCQkJCQlhcHByb3hBcmVhID0gRG91YmxlCisJCQkJCQkJCQkJCS5wYXJzZURvdWJsZShkZWZhdWx0QXJlYVNxS20pCisJCQkJCQkJCQkJCSogcmF0aW87CisJCQkJCQkJCX0KKworCQkJCQkJCQlhcmVhID0gRG91YmxlLnRvU3RyaW5nKGFwcHJveEFyZWEpOworCisJCQkJCQkJCVV0aWxMb2dnZXIubG9nSW5mb3JtYXRpb24oIlVOS05PV04gOiAiIC8vJE5PTi1OTFMtMSQKKwkJCQkJCQkJCQkrIGl0ZW1zW0lTT0RhdGEuQURNSU4yX05BTUVdCisJCQkJCQkJCQkJKyAiLCIgKyBkZXNjcmlwdG9yIC8vJE5PTi1OTFMtMSQKKwkJCQkJCQkJCQkrICIsIiArIGFyZWEpOyAvLyROT04tTkxTLTEkCisKKwkJCQkJCQl9CisKKwkJCQkJCQlpZiAoZGVmYXVsdEFyZWFTcUttID09IERFRkFVTFQpIHsKKwkJCQkJCQkJZGVmYXVsdEFyZWFTcUttID0gbGV2ZWwxQXJlYVNxS207CisJCQkJCQkJCWRlZmF1bHRQb2x5Z29uQXJlYSA9IGdldFBvbHlnb25BcmVhKAorCQkJCQkJCQkJCWl0ZW1zW0lTT0RhdGEuQURNSU4xX05BTUVdLAorCQkJCQkJCQkJCWl0ZW1zW0lTT0RhdGEuQ09VTlRSWV9OQU1FXSwKKwkJCQkJCQkJCQlsZXZlbDFQb2x5Z29uQXJlYUxpc3QsIDEpOworCQkJCQkJCX0KKworCQkJCQkJCWJyZWFrOworCisJCQkJCQl9CisKKwkJCQkJCWlmIChkYXRhICE9IG51bGwpIHsKKwkJCQkJCQlkYXRhICs9IGRlc2NyaXB0b3IgKyAiID0gIiArIEdlblV0aWxzLmZvcm1hdChhcmVhKSAvLyROT04tTkxTLTEkCisJCQkJCQkJCQkrICJcbiI7IC8vJE5PTi1OTFMtMSQKKwkJCQkJCX0gZWxzZSB7CisJCQkJCQkJZGF0YSA9IGRlc2NyaXB0b3IgKyAiID0gIiArIEdlblV0aWxzLmZvcm1hdChhcmVhKSAvLyROT04tTkxTLTEkCisJCQkJCQkJCQkrICJcbiI7IC8vJE5PTi1OTFMtMSQKKwkJCQkJCX0KKworCQkJCQkJLy8gSWYgYXJlYSBpcyBub3Qga25vd24gKGRlc2ZhdWx0IHZhbHVlKSwgdGhlbiBjb21tZW50CisJCQkJCQkvLyBpdAorCQkJCQkJLy8gaWYgKGFyZWEuZXF1YWxzKERFRkFVTFQpKSB7CisJCQkJCQkvLyBTeXN0ZW0ub3V0CisJCQkJCQkvLyAucHJpbnRsbigiVlVLIDogIiArIGRlc2NyaXB0b3IgKyAiICwgIiArIGN1cnJlbnQKKwkJCQkJCS8vIC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAorCQkJCQkJLy8gKyAiICwgIiArIGxldmVsKTsgLy8kTk9OLU5MUy0xJAorCQkJCQkJLy8gfQorCisJCQkJCQkvLyBXcml0ZSB0aGUgZm9ybWF0dGVkIG91dHB1dAorCQkJCQkJR2VuVXRpbHMuYWRkRGF0YShwcm9wZXJ0aWVzRmlsZSwgZGF0YSk7CisJCQkJCQlkYXRhID0gbnVsbDsKKworCQkJCQl9IC8vIHdoaWxlCisKKwkJCQkJLy8gUmVzZXQgb3VyIGxvY2F0aW9uIHVzZWQgdG8gY29tcHV0ZSBhcHByb3hpbWF0ZSBhcmVhIGZvcgorCQkJCQkvLyB1bmtub3duIGxvY2F0aW9ucy4KKwkJCQkJZGVmYXVsdEFyZWFTcUttID0gREVGQVVMVDsKKwkJCQkJZGVmYXVsdFBvbHlnb25BcmVhID0gREVGQVVMVDsKKworCQkJCQkvLyBSZXNldCBhbGwgbGV4LXJlbGF0ZWQgaXRlbXMKKwkJCQkJaWYgKGxleDFEYXRhU2V0ICE9IG51bGwpIHsKKwkJCQkJCWxleDFEYXRhU2V0LmNsZWFyKCk7CisJCQkJCQlsZXgxRGF0YVNldCA9IG51bGw7CisJCQkJCX0KKwkJCQkJaWYgKGxleDJEYXRhU2V0ICE9IG51bGwpIHsKKwkJCQkJCWxleDJEYXRhU2V0LmNsZWFyKCk7CisJCQkJCQlsZXgyRGF0YVNldCA9IG51bGw7CisJCQkJCX0KKwkJCQkJaWYgKGxleDFMaXN0ICE9IG51bGwpIHsKKwkJCQkJCWxleDFMaXN0LmNsZWFyKCk7CisJCQkJCQlsZXgxTGlzdCA9IG51bGw7CisJCQkJCX0KKwkJCQkJaWYgKGxleDJMaXN0ICE9IG51bGwpIHsKKwkJCQkJCWxleDJMaXN0LmNsZWFyKCk7CisJCQkJCQlsZXgyTGlzdCA9IG51bGw7CisJCQkJCX0KKworCQkJCQlsZXhBZG1pbjFGaWxlID0gbnVsbDsKKwkJCQkJbGV4QWRtaW4yRmlsZSA9IG51bGw7CisKKwkJCQkJLy8gV2UgZG9udCBuZWVkIHRoZSBJU08gY29kZSBvYmplY3QgZm9yIHRoaXMgY291bnRyeQorCQkJCQkvLyBhbnltb3JlLCB3ZSBhcmUgZG9uZSBwcm9jZXNzaW5nIGl0LgorCQkJCQlpc29Db2RlID0gbnVsbDsKKworCQkJCQkvLyBHZXQgcmlkIG9mIHRoZSBsaXN0cyBvZiBwb2x5b24gYXJlYSBkYXRhLgorCQkJCQlpZiAobGV2ZWwxUG9seWdvbkFyZWFMaXN0ICE9IG51bGwpIHsKKwkJCQkJCWxldmVsMVBvbHlnb25BcmVhTGlzdC5jbGVhcigpOworCQkJCQkJbGV2ZWwxUG9seWdvbkFyZWFMaXN0ID0gbnVsbDsKKwkJCQkJfQorCisJCQkJCWlmIChsZXZlbDJQb2x5Z29uQXJlYUxpc3QgIT0gbnVsbCkgeworCQkJCQkJbGV2ZWwyUG9seWdvbkFyZWFMaXN0LmNsZWFyKCk7CisJCQkJCQlsZXZlbDJQb2x5Z29uQXJlYUxpc3QgPSBudWxsOworCQkJCQl9CisKKwkJCQkJLy8gUmVzZXQgdGhlIGFyZWEgbGlzdAorCQkJCQlpZiAoYXJlYUxpc3QgIT0gbnVsbCkgeworCQkJCQkJYXJlYUxpc3QuY2xlYXIoKTsKKwkJCQkJCWFyZWFMaXN0ID0gbnVsbDsKKwkJCQkJfQorCisJCQkJCS8vIENsb3NlIGFsbCBvcGVuIHJlc291cmNlcy4KKwkJCQkJcmVhZGVyLmNsb3NlKCk7CisKKwkJCQkJaWYgKHByb3BlcnRpZXNGaWxlICE9IG51bGwpIHsKKwkJCQkJCXByb3BlcnRpZXNGaWxlLmNsb3NlKCk7CisJCQkJCQlwcm9wZXJ0aWVzRmlsZSA9IG51bGw7CisJCQkJCQlVdGlsTG9nZ2VyLmxvZ0luZm9ybWF0aW9uKCJcdFx0R2VuZXJhdGVkIDogIiArIGZpbGVOYW1lKTsgLy8kTk9OLU5MUy0xJAorCQkJCQkJZmlsZU5hbWUgPSBudWxsOworCQkJCQl9CisJCQkJCS8vIFJ1biBnYXJiYWdlIGNvbGxlY3Rpb24KKwkJCQkJLy9TeXN0ZW0uZ2MoKTsKKworCQkJCX0KKworCQkJfSBjYXRjaCAoSU9FeGNlcHRpb24gZSkgeworCQkJCWUucHJpbnRTdGFja1RyYWNlKCk7CisJCQl9CisJCX0gLy8gZm9yCisJfQorCisJLyoqCisJICogR2VuZXJhdGUgdGhlIGhlYWRlciBjb21tZW50IGZvciB0aGlzIGZpbGUgLS0gaXQgdmFyaWVzIGZvciBkaWZmZXJlbnQKKwkgKiBhZG1pbiBsZXZlbHMuCisJICogCisJICogQHBhcmFtIGNvZGUKKwkgKiAgICAgICAgICAgIElTTyAzMTY2LTEgY29kZQorCSAqIEBwYXJhbSBsZXZlbAorCSAqICAgICAgICAgICAgYWRtaW5pc3RyYXRpdmUgbGV2ZWwKKwkgKiAKKwkgKiBAcmV0dXJuIHRoZSBoZWFkZXIgZm9yIHRoZSBuZXcgZmlsZS4KKwkgKiAKKwkgKi8KKwlwcm90ZWN0ZWQgU3RyaW5nIGdldEhlYWRlcihJU09Db2RlMSBjb2RlLCBpbnQgbGV2ZWwpIHsKKworCQlmaW5hbCBpbnQgREFUQV9ERVNDUklQVE9SID0gMDsKKwkJZmluYWwgaW50IFVSTCA9IDE7CisKKwkJLy8gQ3JlYXRlIHRoZSBmaWxlIG5hbWUgZm9yIHRoZSBVUkwgZmlsZS4KKwkJU3RyaW5nIHVybEZpbGUgPSB3b3Jrc3BhY2UgKyBHZW5Db25zdGFudHMuUEFSQU1TX0RJUgorCQkJCSsgR2VuQ29uc3RhbnRzLlVSTFNfRElSOworCQl1cmxGaWxlICs9IGNvZGUuZ2V0TmFtZSgpICsgIi50eHQiOyAvLyROT04tTkxTLTEkCisKKwkJU3RyaW5nIGhlYWRlciA9IG51bGw7CisKKwkJaGVhZGVyID0gIiMgIiArIGNvZGUuZ2V0QWxwaGEzKCkgKyAiXyIgKyBsZXZlbCArICJfYXJlYS5wcm9wZXJ0aWVzXG4iOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQgLy8kTk9OLU5MUy0zJAorCQloZWFkZXIgKz0gIiMgVGhpcyBmaWxlIGNvbnRhaW5zIGFyZWEgdmFsdWVzIGZvciAiICsgY29kZS5nZXROYW1lKCkgLy8kTk9OLU5MUy0xJAorCQkJCSsgIlxuIjsgLy8kTk9OLU5MUy0xJAorCQkvLyBoZWFkZXIgKz0gQ2FsZW5kYXIuZ2V0SW5zdGFuY2UoKS5nZXRUaW1lKCkgKyAiXG4iOworCisJCS8vIEFkZCB0aGUgY29weXJpZ2h0IHN0YXRlbWVudC4KKwkJaGVhZGVyICs9IEdlblV0aWxzLmdldENvcHlyaWdodCgpOworCisJCS8vIEFkZCBhbiBleHBsYW5hdGlvbiBvZiB0aGUga2V5IGZvcm1hdCBpbiBvdXIgZGF0YSBmaWxlcy4KKwkJaGVhZGVyICs9IEdlblV0aWxzLmdldEtleUZvcm1hdEV4cGxhbmF0aW9uKCk7CisKKwkJaGVhZGVyICs9ICIjIFRoaXMgaXMgdGhlIG5hbWUgb2YgdGhlIGNsYXNzIHRoYXQgd2lsbCBpbnRlcnByZXQgdGhlIHJlc3Qgb2YgdGhlIGZpbGUncyBjb250ZW50c1xuIjsgLy8kTk9OLU5MUy0xJAorCQloZWFkZXIgKz0gIlJFQ09SRF9DTEFTU05BTUUgPSBvcmcuZWNsaXBzZS5zdGVtLmludGVybmFsLmRhdGEuQ291bnRyeUdyYXBoUmVjb3JkJENvdW50cnlBcmVhTGFiZWxHcmFwaFJlY29yZFxuXG4iOyAvLyROT04tTkxTLTEkCisKKwkJaGVhZGVyICs9ICIjIFRoZSBJU08tMzE2Ni0xIGFscGhhMyBjb2RlIGZvciB0aGUgY291bnRyeVxuIjsgLy8kTk9OLU5MUy0xJAorCQloZWFkZXIgKz0gIklTT0tFWSA9ICIgKyBjb2RlLmdldEFscGhhMygpICsgIlxuXG4iOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKKworCQloZWFkZXIgKz0gIiMgVGhlIGFkbWluaXN0cmF0aW9uIGxldmVsIG9mIHRoZSBhcmVhIGRhdGFcbiI7IC8vJE5PTi1OTFMtMSQKKwkJaGVhZGVyICs9ICJBRE1JTl9MRVZFTCA9ICIgKyBsZXZlbCArICJcblxuIjsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCisKKwkJaGVhZGVyICs9ICIjIFRoaXMgaXMgdGhlIGRhdGUgcmFuZ2UgZm9yIHdoaWNoIHRoZSBhcmVhIHZhbHVlcyBpbiB0aGlzIGZpbGUgYXJlIHZhbGlkIFxuIjsgLy8kTk9OLU5MUy0xJAorCQloZWFkZXIgKz0gIiMgU2VlIGh0dHA6Ly9wdXJsLm9yZy9kYy90ZXJtcy8xLjEvdmFsaWRcbiI7IC8vJE5PTi1OTFMtMSQKKwkJaGVhZGVyICs9ICJWQUxJRCA9IHN0YXJ0PTE5MDAtMDEtMDE7XG5cbiI7IC8vJE5PTi1OTFMtMSQKKworCQkvLyBUaGUgVW5pdGVkIE5hdGlvbnMgZGF0YSBwb2xpY3kgYXBwbGllcyBvbmx5IHRvIEV1cm9wZSA6CisJCS8vIGhlYWRlciArPSBHZW5VdGlscy5nZXRVTlBvbGljeSgpOworCisJCWhlYWRlciArPSAiIyBUaGlzIGlzIHRoZSBzb3VyY2Ugb2YgdGhlIGRhdGFcbiI7IC8vJE5PTi1OTFMtMSQKKworCQkvLyBPcGVuIHRoZSBVUkwgZmlsZSBmb3IgdGhpcyBjb3VudHJ5LgorCQkvLyBVdGlsTG9nZ2VyLmxvZ0luZm9ybWF0aW9uKCJ1cmwgZmlsZSA9ICIgKyB1cmxGaWxlKTsKKwkJQnVmZmVyZWRSZWFkZXIgdXJsUmVhZGVyID0gR2VuVXRpbHMub3BlblJlYWRlcih1cmxGaWxlKTsKKworCQl0cnkgeworCQkJLy8gQWRkIGFsbCB0aGUgc291cmNlIFVSTHMgZm9yIHRoaXMgY291bnRyeS4KKwkJCWlmICh1cmxSZWFkZXIgIT0gbnVsbCkgeworCQkJCVN0cmluZyBidWZmZXIgPSBudWxsOworCQkJCXdoaWxlIChHZW5VdGlscy5FT0YoYnVmZmVyID0gdXJsUmVhZGVyLnJlYWRMaW5lKCkpICE9IHRydWUpIHsKKworCQkJCQkvLyBVdGlsTG9nZ2VyLmxvZ0luZm9ybWF0aW9uKCJCdWZmZXIgPSAiICsgYnVmZmVyKTsKKworCQkJCQkvLyBUb2tlbml6ZQorCQkJCQlTdHJpbmdUb2tlbml6ZXIgdG9rZW5pemVyID0gbmV3IFN0cmluZ1Rva2VuaXplcihidWZmZXIsICIqIik7IC8vJE5PTi1OTFMtMSQKKworCQkJCQkvLyBXZSBrbm93IHRoYXQgd2UgZXhwZWN0IG9ubHkgdHdvIHRva2Vucy4gR2V0IHRoZW0uIE9yZGVyCisJCQkJCS8vIG1hdHRlcnMgaGVyZS4KKwkJCQkJU3RyaW5nW10gdG9rZW5zID0gbmV3IFN0cmluZ1syXTsKKwkJCQkJdG9rZW5zW0RBVEFfREVTQ1JJUFRPUl0gPSB0b2tlbml6ZXIubmV4dFRva2VuKCk7CisJCQkJCXRva2Vuc1tVUkxdID0gdG9rZW5pemVyLm5leHRUb2tlbigpOworCisJCQkJCS8vIFVSTCBzb3VyY2VVUkwgPSBudWxsOworCisJCQkJCS8vIElzIHRoaXMgZGF0YSBkZXNjcmlwdG9yIG9uZSBvZiBvdXIgZGF0YSBzb3VyY2VzIChzb3VyY2UKKwkJCQkJLy8gVVJMKSA/CisJCQkJCWlmIChHZW5VdGlscy5pc1NvdXJjZVVSTCh1cmxTZXQsIHRva2Vuc1tEQVRBX0RFU0NSSVBUT1JdKSA9PSB0cnVlKSB7CisKKwkJCQkJCS8vIHRyeSB7CisJCQkJCQkvLyBJcyB0aGlzIGRhdGEgZGVzY3JpcHRvciBvbmUgb2Ygb3VyIGFjdGl2ZSBkYXRhCisJCQkJCQkvLyBzb3VyY2VzID8KKworCQkJCQkJaWYgKEdlblV0aWxzLmlzQWN0aXZlVVJMKHVybFN0YXR1cywKKwkJCQkJCQkJdG9rZW5zW0RBVEFfREVTQ1JJUFRPUl0pID09IGZhbHNlKSB7CisJCQkJCQkJLy8gTm8sIGl0IGlzIG5vdCBvbmUgYW4gYWN0aXZlIFVSTCwgc28gY29tbWVudAorCQkJCQkJCS8vIGl0CisJCQkJCQkJLy8gb3V0LgorCQkJCQkJCS8vIHNvdXJjZVVSTCA9IG5ldyBVUkwodG9rZW5zW1VSTF0pOworCisJCQkJCQkJLy8gaGVhZGVyICs9ICIjICIKKwkJCQkJCQkvLyArICJTT1VSQ0UgPSAiCisJCQkJCQkJLy8gKyBVUkxFbmNvZGVyLmVuY29kZShzb3VyY2VVUkwKKwkJCQkJCQkvLyAudG9TdHJpbmcoKSwgIlVURi04IikgKyAiXG4iOworCQkJCQkJCWhlYWRlciArPSAiIyAiICsgIlNPVVJDRSA9ICIgKyB0b2tlbnNbVVJMXSArICJcbiI7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJCAvLyROT04tTkxTLTMkCisJCQkJCQl9IGVsc2UgeworCQkJCQkJCS8vIGhlYWRlciArPSAiU09VUkNFID0gIgorCQkJCQkJCS8vICsgVVJMRW5jb2Rlci5lbmNvZGUoc291cmNlVVJMLnRvU3RyaW5nKCksCisJCQkJCQkJLy8gIlVURi04IikgKyAiXG4iOworCQkJCQkJCS8vJE5PTi1OTFMtMyQKKwkJCQkJCQloZWFkZXIgKz0gIlNPVVJDRSA9ICIgKyB0b2tlbnNbVVJMXSArICJcbiI7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAorCQkJCQkJfQorCisJCQkJCQkvLyB9IGNhdGNoIChqYXZhLmlvLlVuc3VwcG9ydGVkRW5jb2RpbmdFeGNlcHRpb24gZSkgeworCQkJCQkJLy8gVXRpbExvZ2dlci5sb2dJbmZvcm1hdGlvbigiRXJyb3I6IiArIGUuZ2V0TWVzc2FnZSgpKTsKKwkJCQkJCS8vIC8vJE5PTi1OTFMtMSQKKwkJCQkJCS8vIH0KKworCQkJCQl9CisKKwkJCQl9IC8vIHdoaWxlCisKKwkJCQkvLyBUbyBtYWtlIGl0IGxvb2sgYmV0dGVyLCBhZGQgYW4gZXh0cmEgbmV3IGxpbmUuCisJCQkJaGVhZGVyICs9ICJcbiI7IC8vJE5PTi1OTFMtMSQKKworCQkJfQorCisJCX0gY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKKwkJCS8vCisJCX0KKworCQlpZiAobGV2ZWwgPT0gRGF0YVR5cGVzLkxFVkVMXzEpIHsKKwkJCWhlYWRlciArPSAiXG4jIFN0YXRlL1Byb3ZpbmNlXG5cbiI7IC8vJE5PTi1OTFMtMSQKKwkJfSBlbHNlIGlmIChsZXZlbCA9PSBEYXRhVHlwZXMuTEVWRUxfMikgeworCQkJaGVhZGVyICs9ICIjIExldmVsIDEgKGFkbWluIDEgPSBlLmcuLCBzdGF0ZSlcbiI7IC8vJE5PTi1OTFMtMSQKKwkJCWhlYWRlciArPSAiIyBMZXZlbCAyIChhZG1pbiAyID0gZS5nLiwgY291bnR5KVxuXG4iOyAvLyROT04tTkxTLTEkCisJCX0KKworCQlyZXR1cm4gaGVhZGVyOworCX0KKworCS8qKgorCSAqIEZpbmQgdGhlIGFyZWEgdmFsdWUgZm9yIGEgZ2l2ZW4gZW50aXR5LgorCSAqIAorCSAqIEBwYXJhbSBlbnRpdHkKKwkgKiAgICAgICAgICAgIHRoZSBlbnRpdHkgZm9yIHdoaWNoIHdlIHdhbnQgdG8gZmluZCB0aGUgYXJlYQorCSAqIEBwYXJhbSBsZXZlbAorCSAqICAgICAgICAgICAgdGhlIGFkbWluIGxldmVsCisJICogCisJICogQHJldHVybiB0aGUgYXJlYSB2YWx1ZQorCSAqLworCXByb3RlY3RlZCBTdHJpbmcgZ2V0QXJlYShTdHJpbmcgZW50aXR5LCBpbnQgbGV2ZWwpIHsKKworCQlmaW5hbCBpbnQgRU5USVRZID0gMDsKKworCQlmaW5hbCBpbnQgTEVWRUwgPSAxOworCisJCWZpbmFsIGludCBBUkVBID0gMjsKKworCQlJdGVyYXRvciBpdCA9IGFyZWFMaXN0Lml0ZXJhdG9yKCk7CisKKwkJU3RyaW5nIGVudGl0eVN0ciA9IGVudGl0eS50b1VwcGVyQ2FzZSgpOworCisJCXdoaWxlIChpdC5oYXNOZXh0KCkpIHsKKworCQkJU3RyaW5nW10gYXJlYURhdGEgPSAoKFN0cmluZykgaXQubmV4dCgpKS5zcGxpdCgiOiIpOyAvLyROT04tTkxTLTEkCisKKwkJCS8vIFJvdW5kIHVwIGFyZWEgdmFsdWUgdG8gMQorCQkJLy8gaWYgKERvdWJsZS5wYXJzZURvdWJsZShhcmVhRGF0YVtBUkVBXSkgPCAxLjApIHsKKwkJCS8vIC8vIDEgU1FLTSBpcyB0aGUgbWluaW11bSBhcmVhIHZhbHVlIHdlIHJldHVybi4KKwkJCS8vIGFyZWFEYXRhW0FSRUFdID0gIjEuMCI7CisJCQkvLyB9CisKKwkJCWlmIChhcmVhRGF0YVtFTlRJVFldLnRyaW0oKS50b1VwcGVyQ2FzZSgpLmVxdWFscyhlbnRpdHlTdHIpKSB7CisKKwkJCQkvLyBXZSBnb3QgYSBuYW1lIG1hdGNoLCBub3cgY2hlY2sgYm90aCBlbnRpdGllcyBiZWxvbmcgdG8gc2FtZQorCQkJCS8vIGFkbWluIGxldmVsCisJCQkJLy8gKGkuZS4gYm90aCBhcmUgY2l0aWVzIG9yIGJvdGggYXJlIGNvdW50aWVzLCBldGMpCisJCQkJLy8gT3RoZXJ3aXNlIGl0IGlzIGFtYmlnb3VzIGJlY2F1c2Ugd2UgY2FuIGhhdmUgY2l0aWVzIGFuZAorCQkJCS8vIGNvdW50aWVzIHdpdGggdGhlIHNhbWUgbmFtZQorCQkJCS8vIENoZWNrIGJvdGggZW50aXRpZXMgYmVsb25nIHRvIHNhbWUgbGV2ZWwKKwkJCQlpZiAoU3RyaW5nLnZhbHVlT2YobGV2ZWwpLmVxdWFscyhhcmVhRGF0YVtMRVZFTF0udHJpbSgpKSA9PSBmYWxzZSkgeworCQkJCQkvLyBJZ25vcmUgOiBzYW1lIG5hbWUgLCBidXQgZGlmZmVyZW50IGxldmVsCisJCQkJCWNvbnRpbnVlOworCQkJCX0KKworCQkJCXJldHVybiBhcmVhRGF0YVtBUkVBXS50cmltKCk7CisJCQl9CisJCX0KKwkJcmV0dXJuIERFRkFVTFQ7CisJfQorCisJLyoqCisJICogRmluZCB0aGUgYXJlYSBvZiBhIHBvbHlnb24gKGluIHBvbHlnb24gdW5pdHMpCisJICogCisJICogQHBhcmFtIGRlc2NyaXB0b3IKKwkgKiBAcGFyYW0gY29udGFpbmVyCisJICogQHBhcmFtIHBvbHlnb25BcmVhTGlzdAorCSAqIEBwYXJhbSBsZXZlbAorCSAqIAorCSAqIEByZXR1cm4gYSBwb2x5Z29uIGFyZWEKKwkgKi8KKwlwcm90ZWN0ZWQgU3RyaW5nIGdldFBvbHlnb25BcmVhKFN0cmluZyBkZXNjcmlwdG9yLCBTdHJpbmcgY29udGFpbmVyLAorCQkJTGlzdCBwb2x5Z29uQXJlYUxpc3QsIGludCBsZXZlbCkgeworCisJCWZpbmFsIGludCBDT05UQUlORVIgPSAwOworCisJCWZpbmFsIGludCBBRE1JTklTVFJBVElPTiA9IDE7CisKKwkJZmluYWwgaW50IERFU0NSSVBUT1IgPSAyOworCisJCWZpbmFsIGludCBQT0xZR09OX0FSRUEgPSAzOworCisJCUl0ZXJhdG9yIGl0ID0gcG9seWdvbkFyZWFMaXN0Lml0ZXJhdG9yKCk7CisKKwkJU3RyaW5nIGRlc2NyaXB0b3JTdHIgPSBkZXNjcmlwdG9yLnRvVXBwZXJDYXNlKCkudHJpbSgpOworCisJCVN0cmluZyBjb250YWluZXJTdHIgPSBjb250YWluZXIudG9VcHBlckNhc2UoKS50cmltKCk7CisKKwkJd2hpbGUgKGl0Lmhhc05leHQoKSkgeworCisJCQlTdHJpbmcgbWF0Y2ggPSBudWxsOworCisJCQlTdHJpbmdbXSBhcmVhRGF0YSA9ICgoU3RyaW5nKSBpdC5uZXh0KCkpLnNwbGl0KCI6Iik7IC8vJE5PTi1OTFMtMSQKKworCQkJbWF0Y2ggPSBhcmVhRGF0YVtBRE1JTklTVFJBVElPTl0udG9VcHBlckNhc2UoKS50cmltKCk7CisKKwkJCXN3aXRjaCAobGV2ZWwpIHsKKworCQkJY2FzZSBEYXRhVHlwZXMuTEVWRUxfMToKKwkJCQkvLyBXZSBtYXRjaCBiYXNlZCBvbiB0aGUgYWRtaW5pc3RyYXRpb24gbmFtZS4KKwkJCQltYXRjaCA9IGFyZWFEYXRhW0FETUlOSVNUUkFUSU9OXS50b1VwcGVyQ2FzZSgpLnRyaW0oKTsKKwkJCQlicmVhazsKKworCQkJY2FzZSBEYXRhVHlwZXMuTEVWRUxfMjoKKwkJCQkvLyBXZSBtYXRjaCBiYXNlZCBvbiB0aGUgZGVzY3JpcHRvciBvZiB0aGUgbGV2ZWwgMiBhZG1pbi4KKwkJCQltYXRjaCA9IGFyZWFEYXRhW0RFU0NSSVBUT1JdLnRvVXBwZXJDYXNlKCkudHJpbSgpOworCQkJCS8vIGludCBlbmRJbmRleCA9IG1hdGNoLmxhc3RJbmRleE9mKCItIik7CisJCQkJLy8gbWF0Y2ggPSBtYXRjaC5zdWJzdHJpbmcoMCwgZW5kSW5kZXgpOworCQkJCWJyZWFrOworCisJCQl9CisKKwkJCS8vIFV0aWxMb2dnZXIubG9nSW5mb3JtYXRpb24oIk1hdGNoID0gIiArIG1hdGNoKTsKKworCQkJU3RyaW5nIGFyZWFDb250YWluZXIgPSBhcmVhRGF0YVtDT05UQUlORVJdLnRvVXBwZXJDYXNlKCkudHJpbSgpOworCisJCQlpZiAobWF0Y2guZXF1YWxzKGRlc2NyaXB0b3JTdHIpCisJCQkJCSYmIGFyZWFDb250YWluZXIuZXF1YWxzKGNvbnRhaW5lclN0cikpIHsKKwkJCQlyZXR1cm4gYXJlYURhdGFbUE9MWUdPTl9BUkVBXS50cmltKCk7CisJCQl9CisKKwkJfQorCQlyZXR1cm4gREVGQVVMVDsKKwl9CisKKwkvKioKKwkgKiBGaW5kIHRoZSBhcmVhIHZhbHVlIGZvciBhIGdpdmVuIGVudGl0eS4KKwkgKiAKKwkgKiBAcGFyYW0gZW50aXR5CisJICogICAgICAgICAgICB0aGUgZW50aXR5IGZvciB3aGljaCB3ZSB3YW50IHRvIGZpbmQgdGhlIGFyZWEKKwkgKiAKKwkgKiBAcGFyYW0gZW50aXR5Q29udGFpbmVyCisJICogCisJICogQHBhcmFtIGFyZWFMaXN0CisJICogCisJICogQHBhcmFtIGxldmVsCisJICogICAgICAgICAgICB0aGUgYWRtaW4gbGV2ZWwKKwkgKiAKKwkgKiBAcmV0dXJuIHRoZSBhcmVhIHZhbHVlCisJICovCisJcHJvdGVjdGVkIFN0cmluZyBnZXRBcmVhKFN0cmluZyBlbnRpdHksIFN0cmluZyBlbnRpdHlDb250YWluZXIsCisJCQlMaXN0IGFyZWFMaXN0LCBpbnQgbGV2ZWwpIHsKKworCQlmaW5hbCBpbnQgRU5USVRZID0gMDsKKworCQlmaW5hbCBpbnQgTEVWRUwgPSAxOworCisJCWZpbmFsIGludCBBUkVBID0gMjsKKworCQlTdHJpbmdbXSBhcmVhRGF0YSA9IG51bGw7CisKKwkJSXRlcmF0b3IgaXQgPSBhcmVhTGlzdC5pdGVyYXRvcigpOworCisJCVN0cmluZyBlbnRpdHlTdHIgPSBlbnRpdHkudG9VcHBlckNhc2UoKS50cmltKCk7CisKKwkJZW50aXR5U3RyID0gZW50aXR5U3RyLnJlcGxhY2UoIlxcdCIsICIiKTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCisKKwkJU3RyaW5nIGVudGl0eUNvbnRhaW5lclN0ciA9IGVudGl0eUNvbnRhaW5lci50b1VwcGVyQ2FzZSgpLnRyaW0oKTsKKworCQl3aGlsZSAoaXQuaGFzTmV4dCgpKSB7CisKKwkJCWFyZWFEYXRhID0gKChTdHJpbmcpIGl0Lm5leHQoKSkuc3BsaXQoIjoiKTsgLy8kTk9OLU5MUy0xJAorCisJCQkvLyBSb3VuZCB1cCBhcmVhIHZhbHVlIHRvIDEKKwkJCS8vIGlmIChEb3VibGUucGFyc2VEb3VibGUoYXJlYURhdGFbQVJFQV0pIDwgMS4wKSB7CisJCQkvLyAvLyAxIFNRS00gaXMgdGhlIG1pbmltdW0gYXJlYSB2YWx1ZSB3ZSByZXR1cm4uCisJCQkvLyBhcmVhRGF0YVtBUkVBXSA9ICIxLjAiOworCQkJLy8gfQorCisJCQlTdHJpbmdbXSBjb21wYXJlID0gbnVsbDsKKworCQkJLy8gR2V0IHRoZSBlbnRpdHkgbmFtZSBhbmQgcmVtb3ZlIGJsYW5rcworCQkJU3RyaW5nIGxvY2F0aW9uID0gYXJlYURhdGFbRU5USVRZXS50b1VwcGVyQ2FzZSgpLnRyaW0oKTsKKworCQkJbG9jYXRpb24gPSBsb2NhdGlvbi50b1VwcGVyQ2FzZSgpLnRyaW0oKTsKKworCQkJLy8gSGFuZGxlIEFsaWFzZXMgLS0gY29tcGxleCBzdHVmZiA6JAorCQkJaWYgKGxvY2F0aW9uLmNvbnRhaW5zKCJbIikpIHsgLy8kTk9OLU5MUy0xJAorCisJCQkJbG9jYXRpb24gPSBsb2NhdGlvbi5yZXBsYWNlKCJdIiwgIiIpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKKworCQkJCS8vIFRva2VuaXplCisJCQkJU3RyaW5nVG9rZW5pemVyIHRva2VucyA9IG5ldyBTdHJpbmdUb2tlbml6ZXIobG9jYXRpb24sICJbIik7IC8vJE5PTi1OTFMtMSQKKworCQkJCS8vIEdldCB0b2tlbnMKKwkJCQljb21wYXJlID0gbmV3IFN0cmluZ1t0b2tlbnMuY291bnRUb2tlbnMoKV07CisJCQkJaW50IGkgPSAwOworCQkJCXdoaWxlICh0b2tlbnMuaGFzTW9yZVRva2VucygpKSB7CisJCQkJCWNvbXBhcmVbaSsrXSA9IHRva2Vucy5uZXh0VG9rZW4oKS50b1VwcGVyQ2FzZSgpLnRyaW0oKTsKKwkJCQl9CisJCQl9CisKKwkJCWlmIChjb21wYXJlICE9IG51bGwpIHsKKwkJCQlmb3IgKGludCBpID0gMDsgaSA8IGNvbXBhcmUubGVuZ3RoOyBpKyspIHsKKwkJCQkJaWYgKGVudGl0eVN0ci5yZXBsYWNlKCItIiwgIiAiKS5lcXVhbHMoIC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAorCQkJCQkJCWNvbXBhcmVbaV0ucmVwbGFjZSgiLSIsICIgIikpIC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAorCQkJCQkJCXx8IGNvbXBhcmVbaV0uZXF1YWxzKGVudGl0eVN0ciArICItMSIpIC8vJE5PTi1OTFMtMSQKKwkJCQkJCQl8fCBjb21wYXJlW2ldLmVxdWFscyhlbnRpdHlDb250YWluZXJTdHIpKSB7CisKKwkJCQkJCS8vIENoZWNrIGJvdGggZW50aXRpZXMgYmVsb25nIHRvIHNhbWUgbGV2ZWwKKwkJCQkJCWlmIChTdHJpbmcudmFsdWVPZihsZXZlbCkKKwkJCQkJCQkJLmVxdWFscyhhcmVhRGF0YVtMRVZFTF0udHJpbSgpKSA9PSBmYWxzZSkgeworCQkJCQkJCS8vIElnbm9yZSA6IHNhbWUgbmFtZSAsIGJ1dCBkaWZmZXJlbnQgbGV2ZWwKKwkJCQkJCQljb250aW51ZTsKKwkJCQkJCX0KKwkJCQkJCXJldHVybiBhcmVhRGF0YVtBUkVBXS50cmltKCk7CisJCQkJCX0KKwkJCQl9IC8vIGZvcgorCQkJfSBlbHNlIGlmIChlbnRpdHlTdHIuZXF1YWxzKGxvY2F0aW9uKQorCQkJCQl8fCBlbnRpdHlTdHIucmVwbGFjZSgiLSIsICIgIikuZXF1YWxzKGxvY2F0aW9uKSAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKKwkJCQkJfHwgbG9jYXRpb24uZXF1YWxzKGVudGl0eVN0ciArICItMSIpKSB7IC8vJE5PTi1OTFMtMSQKKworCQkJCS8vIENoZWNrIGJvdGggZW50aXRpZXMgYmVsb25nIHRvIHNhbWUgbGV2ZWwKKwkJCQlpZiAoU3RyaW5nLnZhbHVlT2YobGV2ZWwpLmVxdWFscyhhcmVhRGF0YVtMRVZFTF0udHJpbSgpKSA9PSBmYWxzZSkgeworCQkJCQkvLyBJZ25vcmUgOiBzYW1lIG5hbWUgLCBidXQgZGlmZmVyZW50IGxldmVsCisJCQkJCWNvbnRpbnVlOworCQkJCX0KKwkJCQlyZXR1cm4gYXJlYURhdGFbQVJFQV0udHJpbSgpOworCQkJfQorCisJCX0gLy8gd2hpbGUKKworCQlyZXR1cm4gREVGQVVMVDsKKwl9CisKKwkvKioKKwkgKiBGaW5kIHRoZSBhcmVhIHZhbHVlIGZvciBhIGdpdmVuIGNvdW50eSAobGV2ZWwgMiBhZG1pbikgd2l0aGluIHRoZSBVU0EKKwkgKiAKKwkgKiBAcGFyYW0gZW50aXR5CisJICogICAgICAgICAgICB0aGUgZW50aXR5IGZvciB3aGljaCB3ZSB3YW50IHRvIGZpbmQgdGhlIGFyZWEKKwkgKiAKKwkgKiBAcGFyYW0gc3RhdGUKKwkgKiAKKwkgKiBAcGFyYW0gYXJlYUxpc3QKKwkgKiAKKwkgKiBAcmV0dXJuIHRoZSBhcmVhIHZhbHVlCisJICovCisJcHJvdGVjdGVkIFN0cmluZyBnZXRVU0FMMkFyZWEoU3RyaW5nIGVudGl0eSwgU3RyaW5nIHN0YXRlLCBMaXN0IGFyZWFMaXN0KSB7CisKKwkJZmluYWwgaW50IEVOVElUWSA9IDA7CisKKwkJZmluYWwgaW50IFNUQVRFX0lEID0gMTsKKworCQlmaW5hbCBpbnQgQVJFQSA9IDI7CisKKwkJU3RyaW5nW10gYXJlYURhdGEgPSBudWxsOworCisJCUl0ZXJhdG9yIGl0ID0gYXJlYUxpc3QuaXRlcmF0b3IoKTsKKworCQlTdHJpbmcgZW50aXR5U3RyID0gZW50aXR5LnRvVXBwZXJDYXNlKCkudHJpbSgpOworCisJCWVudGl0eVN0ciA9IGVudGl0eVN0ci5yZXBsYWNlKCJcXHQiLCAiIik7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAorCisJCVN0cmluZyBzdGF0ZVN0ciA9IHN0YXRlLnRvVXBwZXJDYXNlKCkudHJpbSgpOworCisJCXdoaWxlIChpdC5oYXNOZXh0KCkpIHsKKworCQkJYXJlYURhdGEgPSAoKFN0cmluZykgaXQubmV4dCgpKS5zcGxpdCgiOiIpOyAvLyROT04tTkxTLTEkCisKKwkJCS8vIEdldCB0aGUgZW50aXR5IG5hbWUgYW5kIHJlbW92ZSBibGFua3MKKwkJCVN0cmluZyBsb2NhdGlvbiA9IGFyZWFEYXRhW0VOVElUWV0udG9VcHBlckNhc2UoKS50cmltKCk7CisKKwkJCWxvY2F0aW9uID0gbG9jYXRpb24udG9VcHBlckNhc2UoKS50cmltKCk7CisKKwkJCWlmIChlbnRpdHlTdHIuZXF1YWxzKGxvY2F0aW9uKSkgeworCisJCQkJLy8gQ2hlY2sgYm90aCBlbnRpdGllcyBiZWxvbmcgdG8gc2FtZSBzdGF0ZQorCQkJCWlmIChzdGF0ZVN0ci5lcXVhbHMoYXJlYURhdGFbU1RBVEVfSURdLnRyaW0oKSkgPT0gZmFsc2UpIHsKKwkJCQkJLy8gSWdub3JlIDogc2FtZSBuYW1lICwgYnV0IGRpZmZlcmVudCBsZXZlbAorCQkJCQljb250aW51ZTsKKwkJCQl9CisJCQkJcmV0dXJuIGFyZWFEYXRhW0FSRUFdLnRyaW0oKTsKKwkJCX0KKworCQl9IC8vIHdoaWxlCisKKwkJcmV0dXJuIERFRkFVTFQ7CisJfQorCisJLyoqCisJICogRmluZCB0aGUgYXBwcm94aW1hdGUgYXJlYSB2YWx1ZSBmb3IgYSBrbm93biBsb2NhdGlvbi4KKwkgKiAKKwkgKiBAcGFyYW0gbGV2ZWwyQ29udGFpbmVyCisJICogQHBhcmFtIGxldmVsMUNvbnRhaW5lcgorCSAqIEBwYXJhbSBsZXZlbDBDb250YWluZXIKKwkgKiBAcGFyYW0gbGV2ZWwxQXJlYVNxS20KKwkgKiAKKwkgKiBAcmV0dXJuIHRoZSBhcHByb3hpbWF0ZSBhcmVhIHZhbHVlCisJICovCisJcHJvdGVjdGVkIFN0cmluZyBnZXRBcHByb3hpbWF0ZUwyQXJlYShTdHJpbmcgbGV2ZWwyQ29udGFpbmVyLAorCQkJU3RyaW5nIGxldmVsMUNvbnRhaW5lciwgU3RyaW5nIGxldmVsMENvbnRhaW5lciwKKwkJCVN0cmluZyBsZXZlbDFBcmVhU3FLbSkgeworCisJCS8vIEZpbmQgdGhlIGFyZWEgaW4gcG9seWdvbiB1bml0cyBvZiB0aGUgbGV2ZWwgMSBjb250YWluZXIKKwkJU3RyaW5nIGxldmVsMVBvbHlnb25BcmVhID0gZ2V0UG9seWdvbkFyZWEobGV2ZWwxQ29udGFpbmVyLAorCQkJCWxldmVsMENvbnRhaW5lciwgbGV2ZWwxUG9seWdvbkFyZWFMaXN0LCAxKTsKKworCQkvLyBGaW5kIHRoZSBhcmVhIGluIHBvbHlnb24gdW5pdHMgb2YgdGhlIGxldmVsIDIgYWRtaW5pc3RyYXRpb24KKwkJU3RyaW5nIGxldmVsMlBvbHlnb25BcmVhID0gZ2V0UG9seWdvbkFyZWEobGV2ZWwyQ29udGFpbmVyLAorCQkJCWxldmVsMUNvbnRhaW5lciwgbGV2ZWwyUG9seWdvbkFyZWFMaXN0LCAyKTsKKworCQkvLyBDb21wdXRlIHRoZSBhcHByb3hpbWF0ZSBhcmVhLCBidXQgY2hlY2sgZGl2aXNpb24gYnkgemVybyBmaXJzdC4KKwkJaWYgKERvdWJsZS5wYXJzZURvdWJsZShsZXZlbDJQb2x5Z29uQXJlYSkgPD0gMCkgeworCQkJcmV0dXJuIERFRkFVTFQ7CisJCX0KKworCQlkb3VibGUgcmF0aW8gPSBEb3VibGUucGFyc2VEb3VibGUobGV2ZWwyUG9seWdvbkFyZWEpCisJCQkJLyBEb3VibGUucGFyc2VEb3VibGUobGV2ZWwxUG9seWdvbkFyZWEpOworCisJCVN0cmluZyBhcmVhID0gU3RyaW5nCisJCQkJLnZhbHVlT2YocmF0aW8gKiBEb3VibGUucGFyc2VEb3VibGUobGV2ZWwxQXJlYVNxS20pKTsKKworCQlyZXR1cm4gYXJlYTsKKwl9CisKKwkvKioKKwkgKiBGaW5kIHRoZSBhcHByb3hpbWF0ZSBhcmVhIHZhbHVlIGZvciBhIGtub3duIGxvY2F0aW9uLgorCSAqIAorCSAqIEBwYXJhbSBsZXZlbDFDb250YWluZXIKKwkgKiBAcGFyYW0gbGV2ZWwwQ29udGFpbmVyCisJICogQHBhcmFtIGFnZ3JlYXRlTGV2ZWwxUG9seWdvbkFyZWEKKwkgKiBAcGFyYW0gbGV2ZWwxQXJlYVNxS20KKwkgKiAKKwkgKiBAcmV0dXJuIHRoZSBhcHByb3hpbWF0ZSBhcmVhIHZhbHVlCisJICovCisJcHJvdGVjdGVkIFN0cmluZyBnZXRBcHByb3hpbWF0ZUwxQXJlYShTdHJpbmcgbGV2ZWwxQ29udGFpbmVyLAorCQkJU3RyaW5nIGxldmVsMENvbnRhaW5lciwgU3RyaW5nIGFnZ3JlZ2F0ZUxldmVsMVBvbHlnb25BcmVhLAorCQkJU3RyaW5nIGxldmVsMEFyZWFTcUttKSB7CisKKwkJLy8gRmluZCB0aGUgYXJlYSBpbiBwb2x5Z29uIHVuaXRzIG9mIHRoZSBsZXZlbCAxIGNvbnRhaW5lcgorCQlTdHJpbmcgbGV2ZWwxUG9seWdvbkFyZWEgPSBnZXRQb2x5Z29uQXJlYShsZXZlbDFDb250YWluZXIsCisJCQkJbGV2ZWwwQ29udGFpbmVyLCBsZXZlbDFQb2x5Z29uQXJlYUxpc3QsIDEpOworCisJCS8vIENvbXB1dGUgdGhlIGFwcHJveGltYXRlIGFyZWEsIGJ1dCBjaGVjayBkaXZpc2lvbiBieSB6ZXJvIGZpcnN0LgorCQlpZiAoRG91YmxlLnBhcnNlRG91YmxlKGxldmVsMVBvbHlnb25BcmVhKSA8PSAwKSB7CisJCQlyZXR1cm4gREVGQVVMVDsKKwkJfQorCisJCWRvdWJsZSByYXRpbyA9IERvdWJsZS5wYXJzZURvdWJsZShsZXZlbDFQb2x5Z29uQXJlYSkKKwkJCQkvIERvdWJsZS5wYXJzZURvdWJsZShhZ2dyZWdhdGVMZXZlbDFQb2x5Z29uQXJlYSk7CisKKwkJU3RyaW5nIGFyZWEgPSBTdHJpbmcKKwkJCQkudmFsdWVPZihyYXRpbyAqIERvdWJsZS5wYXJzZURvdWJsZShsZXZlbDBBcmVhU3FLbSkpOworCisJCXJldHVybiBhcmVhOworCX0KKworCS8qKgorCSAqIAorCSAqIEByZXR1cm4gc3VtIG9mIGFsbCBsZXZlbCBLIGFyZWFzIGVpdGhlciBpbiBwb2x5Z29uIHVuaXRzCisJICogCisJICovCisJcHJvdGVjdGVkIFN0cmluZyBnZXRBZ2dyZWdhdGVBcmVhKExpc3QgYXJlYUxpc3QpIHsKKworCQlmaW5hbCBpbnQgQVJFQSA9IDM7CisJCURvdWJsZSBhZ2dyZWdhdGUgPSBuZXcgRG91YmxlKDAuMCk7CisKKwkJaWYgKGFyZWFMaXN0ID09IG51bGwpCisJCQlyZXR1cm4gIjEuMCI7IC8vJE5PTi1OTFMtMSQKKwkJSXRlcmF0b3IgaXQgPSBhcmVhTGlzdC5pdGVyYXRvcigpOworCQl3aGlsZSAoaXQuaGFzTmV4dCgpKSB7CisJCQlTdHJpbmdbXSBhcmVhRGF0YSA9ICgoU3RyaW5nKSBpdC5uZXh0KCkpLnNwbGl0KCI6Iik7IC8vJE5PTi1OTFMtMSQKKwkJCWFnZ3JlZ2F0ZSArPSBEb3VibGUucGFyc2VEb3VibGUoYXJlYURhdGFbQVJFQV0udHJpbSgpKTsKKwkJfQorCisJCXJldHVybiBEb3VibGUudG9TdHJpbmcoYWdncmVnYXRlKTsKKwl9CisKKwkvKioKKwkgKiBNYWluIGV4ZWN1dGlvbiBlbnRyeSBwb2ludC4KKwkgKiAKKwkgKiBAcGFyYW0gYXJncworCSAqLworCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKKwkJLy8gZmluYWwgaW50IElTT18zMTY2XzEgPSAwOworCQkvLyBmaW5hbCBpbnQgSVNPXzMxNjZfMiA9IDE7CisJCS8vIGZpbmFsIGludCBGSVhfRklMRSA9IDI7CisJCS8vIGZpbmFsIGludCBBUkVBX0RBVEEgPSAzOworCQkvLyBmaW5hbCBpbnQgVEFSR0VUX0xJU1QgPSA0OworCQkvLyBmaW5hbCBpbnQgUE9MWUdPTl9BUkVBUyA9IDU7CisJCS8vIGZpbmFsIGludCBMRVhfRElSID0gNjsKKwkJLy8gZmluYWwgaW50IE9VVFBVVF9ESVIgPSA3OworCQkvLyBmaW5hbCBpbnQgUEFSQU1TID0gODsKKwkJLy8KKwkJLy8gaWYgKGFyZ3MubGVuZ3RoIDwgUEFSQU1TKSB7CisJCS8vIFV0aWxMb2dnZXIubG9nSW5mb3JtYXRpb24oIi0tV3JvbmcgYXJndW1lbnRzLS0iKTsgLy8kTk9OLU5MUy0xJAorCQkvLyBTeXN0ZW0ub3V0CisJCS8vIC5wcmludGxuKCJcdFRvIHJ1biwgcGxlYXNlIHByb3ZpZGUgdGhlIGZvbGxvd2luZyBhcmd1bWVudHMgOiAiKTsKKwkJLy8gLy8kTk9OLU5MUy0xJAorCQkvLyBVdGlsTG9nZ2VyLmxvZ0luZm9ybWF0aW9uKCJcdFx0IElTTyAzMTY2LTEgZmlsZSIpOyAvLyROT04tTkxTLTEkCisJCS8vIFV0aWxMb2dnZXIubG9nSW5mb3JtYXRpb24oIlx0XHQgSVNPIDMxNjYtMiBmaWxlIik7IC8vJE5PTi1OTFMtMSQKKwkJLy8gVXRpbExvZ2dlci5sb2dJbmZvcm1hdGlvbigiXHRcdCBJU08gZml4IGZpbGUiKTsgLy8kTk9OLU5MUy0xJAorCQkvLyBVdGlsTG9nZ2VyLmxvZ0luZm9ybWF0aW9uKCJcdFx0IEFyZWEgZmlsZSIpOyAvLyROT04tTkxTLTEkCisJCS8vIFV0aWxMb2dnZXIubG9nSW5mb3JtYXRpb24oIlx0XHQgVGFyZ2V0IGNvdW50cmllcyBmaWxlIik7IC8vJE5PTi1OTFMtMSQKKwkJLy8gVXRpbExvZ2dlci5sb2dJbmZvcm1hdGlvbigiXHRcdCBQb2x5Z29uIGFyZWFzIik7IC8vJE5PTi1OTFMtMSQKKwkJLy8gVXRpbExvZ2dlci5sb2dJbmZvcm1hdGlvbigiXHRcdCBMZXhpY29ncmFwaGljIHNvcnRpbmcgZGlyZWN0b3J5Iik7CisJCS8vIC8vJE5PTi1OTFMtMSQKKwkJLy8gVXRpbExvZ2dlci5sb2dJbmZvcm1hdGlvbigiXHRcdCBPdXRwdXQgZGlyZWN0b3J5Iik7IC8vJE5PTi1OTFMtMSQKKwkJLy8gcmV0dXJuOworCQkvLyB9CisKKwkJLy8gQXJlYUdlbmVyYXRvciBnZW4gPSBuZXcgQXJlYUdlbmVyYXRvcihhcmdzW0lTT18zMTY2XzFdLAorCQkvLyBhcmdzW0lTT18zMTY2XzJdLCBhcmdzW0ZJWF9GSUxFXSwgYXJnc1tBUkVBX0RBVEFdLAorCQkvLyBhcmdzW1RBUkdFVF9MSVNUXSwgYXJnc1tQT0xZR09OX0FSRUFTXSwgYXJnc1tMRVhfRElSXSwKKwkJLy8gYXJnc1tPVVRQVVRfRElSXSk7CisKKwkJZmluYWwgaW50IENPTkZJR19GSUxFID0gMDsKKwkJZmluYWwgaW50IFBBUkFNUyA9IDE7CisKKwkJaWYgKGFyZ3MubGVuZ3RoIDwgUEFSQU1TKSB7CisJCQlVdGlsTG9nZ2VyLmxvZ0luZm9ybWF0aW9uKCJcdFx0LS1Xcm9uZyBhcmd1bWVudHMtLSIpOyAvLyROT04tTkxTLTEkCisJCQlTeXN0ZW0ub3V0CisJCQkJCS5wcmludGxuKCJcdFx0VG8gcnVuLCBwbGVhc2UgcHJvdmlkZSB0aGUgZm9sbG93aW5nIGFyZ3VtZW50KHMpIDogIik7IC8vJE5PTi1OTFMtMSQKKwkJCVV0aWxMb2dnZXIubG9nSW5mb3JtYXRpb24oIlx0XHRcdCBDb25maWd1cmF0aW9uIGZpbGUiKTsgLy8kTk9OLU5MUy0xJAorCQkJU3lzdGVtLmV4aXQoMSk7CisJCX0KKworCQlBcmVhR2VuZXJhdG9yIGdlbiA9IG5ldyBBcmVhR2VuZXJhdG9yKGFyZ3NbQ09ORklHX0ZJTEVdKTsKKwkJZ2VuLnJ1bigpOworCX0KKworfQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdXRpbGl0eS9nZW5lcmF0b3JzL0F0dGVudWF0ZUxvZ0ZpbGUuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3NyYy9vcmcvZWNsaXBzZS9zdGVtL3V0aWxpdHkvZ2VuZXJhdG9ycy9BdHRlbnVhdGVMb2dGaWxlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTQ0MGI1MAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3NyYy9vcmcvZWNsaXBzZS9zdGVtL3V0aWxpdHkvZ2VuZXJhdG9ycy9BdHRlbnVhdGVMb2dGaWxlLmphdmEKQEAgLTAsMCArMSwxNTIgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5LmdlbmVyYXRvcnM7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDkgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgamF2YS5pby5CdWZmZXJlZFJlYWRlcjsKK2ltcG9ydCBqYXZhLmlvLkZpbGVJbnB1dFN0cmVhbTsKK2ltcG9ydCBqYXZhLmlvLkZpbGVXcml0ZXI7CitpbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbVJlYWRlcjsKK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OworaW1wb3J0IGphdmEudXRpbC5TdHJpbmdUb2tlbml6ZXI7CisKKy8qKgorICogVGhlIHV0aWxpdHkgYXR0ZW51YXRlcyBzZWFzb25hbCBkYXRhIHRvIGRhbXBlbiBpbmZlY3Rpb3VzIGNhc2VzIGR1cmluZyBzZWFzb25zIHdoZW4KKyAqIGEgcGFydGljdWxhciBzdHJhaW4gaXMgbm90IGRvbWluYW50LiBGb3IgaW5zdGFuY2UsIGlmIGEgbG9nIGZpbGUgY29udGFpbnMgaW5mbHVlbnphCisgKiBjYXNlcyBmb3IgMTAgeWVhcnMgd29ydGggb2YgZGF0YSwgYW5kIHllYXIgMSwgMiwgNSBhbmQgNyBvZiB0aG9zZSB5ZWFycyBoYWQgSDNOMiBzdHJhaW4sCisgKiB5b3UgY2FuIHVzZSB0aGUgcHJvZ3JhbSB0byBnZXQgcmlkIG9mIHRoZSBwZWFrcyBmb3IgeWVhciAzLCA0LCA2LCA4LCA5IGFuZCAxMC4KKyAqLworcHVibGljIGNsYXNzIEF0dGVudWF0ZUxvZ0ZpbGUgeworCisJc3RhdGljIFN0cmluZyBMUyA9IFN5c3RlbS5nZXRQcm9wZXJ0eSgibGluZS5zZXBhcmF0b3IiKTsgLy8kTk9OLU5MUy0xJAorCQorCQorCS8qKgorCSAqIE5MUyBQcmVmaXggZm9yIEluZmVjdG9yIG5hbWUKKwkgKi8KKwlwdWJsaWMgc3RhdGljIFN0cmluZyBpbmZlY3RvclByZWZpeCA9IE1lc3NhZ2VzLmdldFN0cmluZygiSW5vY3VsYXRvci4xIik7IC8vJE5PTi1OTFMtMSQKKwkKKwkvKioKKwkgKiBOTFMgUHJlZml4IGZvciBJbm9jdWxhdG9yIG5hbWUKKwkgKi8KKwlwdWJsaWMgc3RhdGljIFN0cmluZyBpbm9jdWxhdG9yUHJlZml4ID0gTWVzc2FnZXMuZ2V0U3RyaW5nKCJJbm9jdWxhdG9yLjIiKTsgLy8kTk9OLU5MUy0xJAorCQorCS8qKgorCSAqIAorCSAqIEBwYXJhbSBhcmdzCisJICovCisJQFN1cHByZXNzV2FybmluZ3MoIm5scyIpCisJcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nIFtdIGFyZ3MpIHsKKwkJaWYoYXJncy5sZW5ndGggPCA0KSB7CisJCQlTeXN0ZW0uZXJyLnByaW50bG4oIlVzYWdlOiBBdHRlbnVhdGVMb2dGaWxlIDxsb2cgZmlsZT4gPGN5Y2xlIHBlcmlvZD4gPHN0YXJ0IG9mZnNldD4gPHNpZ25hbDE+IDxzaWduYWwyPiAuLi4gPHNpZ25hbCBuPiIpOyAvLyROT04tTkxTLTEkCisJCQlTeXN0ZW0uZXhpdCgtMSk7CisJCX0KKwkJCisJCVN0cmluZyBsb2dGaWxlID0gYXJnc1swXTsKKwkJZG91YmxlIHBlcmlvZCA9IERvdWJsZS5wYXJzZURvdWJsZShhcmdzWzFdKTsKKwkJaW50IG9mZnNldCA9IEludGVnZXIucGFyc2VJbnQoYXJnc1syXSk7CisJCWRvdWJsZSBkYW1wICA9IERvdWJsZS5wYXJzZURvdWJsZShhcmdzWzNdKTsKKwkJCisJCWludCBbXSBzaWduYWwgPSBuZXcgaW50W2FyZ3MubGVuZ3RoLTRdOworCQlmb3IoaW50IGk9NDtpPGFyZ3MubGVuZ3RoOysraSkgc2lnbmFsW2ktNF09SW50ZWdlci5wYXJzZUludChhcmdzW2ldKTsKKwkJCisJCUFycmF5TGlzdDxTdHJpbmc+aGVhZGVycyA9IG5ldyBBcnJheUxpc3Q8U3RyaW5nPigpOworCQlBcnJheUxpc3Q8QXJyYXlMaXN0PFN0cmluZz4+bG9nVGV4dCA9IG5ldyBBcnJheUxpc3Q8QXJyYXlMaXN0PFN0cmluZz4+KCk7CisJCUFycmF5TGlzdDxBcnJheUxpc3Q8RG91YmxlPj5sb2dEYXRhID0gbmV3IEFycmF5TGlzdDxBcnJheUxpc3Q8RG91YmxlPj4oKTsKKwkJCisJCXRyeSB7CisJCQkgLy8gUmVhZCBpbmZlY3Rpb3VzIGZpbGUKKwkJCSBGaWxlSW5wdXRTdHJlYW0gaWZpbGUgPSBuZXcgRmlsZUlucHV0U3RyZWFtKGxvZ0ZpbGUpOyAKKwkJICAgICBCdWZmZXJlZFJlYWRlciBpcmVhZGVyID0gbmV3IEJ1ZmZlcmVkUmVhZGVyKG5ldyBJbnB1dFN0cmVhbVJlYWRlcihpZmlsZSkpOworCQkgICAgIFN0cmluZyBoZWFkZXIgPSBudWxsOworCQkgICAgIGhlYWRlcj1pcmVhZGVyLnJlYWRMaW5lKCk7CisJCSAgICAgaWYoaGVhZGVyID09IG51bGwpIHsKKwkJICAgIAkgU3lzdGVtLmVyci5wcmludGxuKCJFcnJvciwgIithcmdzWzBdKyIgZmlsZSBpcyBlbXB0eSEiKTsgIC8vJE5PTi1OTFMtMSQvLyROT04tTkxTLTIkCisJCSAgICAJIFN5c3RlbS5leGl0KC0yKTsKKwkJICAgICB9CisJCSAgICAgU3RyaW5nVG9rZW5pemVyIHN0ID0gbmV3IFN0cmluZ1Rva2VuaXplcihoZWFkZXIsICIsIik7IC8vJE5PTi1OTFMtMSQKKwkJICAgICBpbnQgY29sdW1uID0gMDsKKwkJICAgICB3aGlsZShzdC5oYXNNb3JlVG9rZW5zKCkpIHsKKwkJICAgIAkgU3RyaW5nIHZhbCA9IHN0Lm5leHRUb2tlbigpOworCQkgICAgCSBoZWFkZXJzLmFkZCh2YWwudHJpbSgpKTsKKwkJICAgIAkgKytjb2x1bW47CisJCSAgICAgfQorCQkgICAgCisJCSAgICBTdHJpbmcgZGF0YSA9IG51bGw7IAorCQkgICAgZGF0YT1pcmVhZGVyLnJlYWRMaW5lKCk7CisJCSAgICBpZihkYXRhID09IG51bGwpIHsKKwkJICAgIAkgU3lzdGVtLmVyci5wcmludGxuKCJFcnJvciwgIithcmdzWzBdKyIgZmlsZSBoYXMgbm8gZGF0YSEiKTsgIC8vJE5PTi1OTFMtMSQvLyROT04tTkxTLTIkCisJCSAgICAJIFN5c3RlbS5leGl0KC0yKTsKKwkJICAgICB9CisJCSAgICAKKwkJICAgIHdoaWxlKGRhdGEgIT0gbnVsbCAmJiBkYXRhLnRyaW0oKS5sZW5ndGgoKSA+IDApIHsKKwkJICAgIAorCQkJICAgIHN0ID0gbmV3IFN0cmluZ1Rva2VuaXplcihkYXRhLCAiLCIpOyAvLyROT04tTkxTLTEkCisJCQkgICAgY29sdW1uID0gMDsKKwkJCSAgICBBcnJheUxpc3Q8U3RyaW5nPiB0eHRsaXN0ID0gbmV3IEFycmF5TGlzdDxTdHJpbmc+KCk7CisJCQkgICAgQXJyYXlMaXN0PERvdWJsZT4gZGF0YWxpc3QgPSBuZXcgQXJyYXlMaXN0PERvdWJsZT4oKTsKKwkJCQl3aGlsZSAoc3QuaGFzTW9yZVRva2VucygpKSB7CisJCQkJCVN0cmluZyB2YWwgPSBzdC5uZXh0VG9rZW4oKS50cmltKCk7CisJCQkJCWlmKGNvbHVtbiA8IDIpCisJCQkJCQl0eHRsaXN0LmFkZCh2YWwpOworCQkJCQllbHNlCisJCQkJCQlkYXRhbGlzdC5hZGQoRG91YmxlLnBhcnNlRG91YmxlKHZhbCkpOworCQkJCSAgICArKyBjb2x1bW47CisJCQkgICAgfSAvLyByZWFkIHRva2VucworCQkJCWxvZ1RleHQuYWRkKHR4dGxpc3QpOworCQkJCWxvZ0RhdGEuYWRkKGRhdGFsaXN0KTsKKwkJCQlkYXRhPWlyZWFkZXIucmVhZExpbmUoKTsKKwkJICAgIH0KKwkJICAgIGlyZWFkZXIuY2xvc2UoKTsKKwkJICAgIAorCQkgICAgLy8gUHJvY2VzcyB0aGUgZGF0YQorCQkgICAgCisJCSAgICBpbnQgZGF5ID0gb2Zmc2V0OworCQkgICAgaW50IHllYXIgPSAwOworCQkgICAgZG91YmxlIHN0YXJ0TmV3WWVhciA9IHBlcmlvZDsKKwkJICAgIFV0aWxMb2dnZXIubG9nSW5mb3JtYXRpb24oInNpZ25hbDogIitzaWduYWwpOworCQkgICAgZm9yKGludCBpPTA7aTxsb2dUZXh0LnNpemUoKTsrK2kpIHsKKwkJICAgIAlpbnQgc2lnID0gc2lnbmFsW3llYXJdOworCQkgICAgCUFycmF5TGlzdDxEb3VibGU+IGluZmRhdGEgPSBsb2dEYXRhLmdldChpKTsKKwkJICAgIAlpZihzaWcgPT0gMCkKKwkJICAgIAkJZm9yKGludCBqPTA7ajxpbmZkYXRhLnNpemUoKTsrK2opIGluZmRhdGEuc2V0KGosIGluZmRhdGEuZ2V0KGopKmRhbXApOworCQkgICAgCQorCQkgICAgCWRheSArPSAxOworCQkgICAgCWlmKGRheSA+IHN0YXJ0TmV3WWVhcikgeworCQkgICAgCQlzdGFydE5ld1llYXIgKz0gcGVyaW9kOworCQkgICAgCQkrK3llYXI7CisJCSAgICAJfQorCQkgICAgCVV0aWxMb2dnZXIubG9nSW5mb3JtYXRpb24oIml0ZXJhdGlvbiAiK2krIiBzaWduYWw6ICIrc2lnKTsKKwkJICAgIH0KKwkJICAgIAorCQkgICAgRmlsZVdyaXRlciBvdXRmdyA9IG5ldyBGaWxlV3JpdGVyKGxvZ0ZpbGUrIi5uZXcuY3N2Iik7CisJCSAgICBmb3IoaW50IGk9MDtpPGhlYWRlcnMuc2l6ZSgpOysraSkgeworCQkgICAgCW91dGZ3LndyaXRlKGhlYWRlcnMuZ2V0KGkpKTsKKwkJICAgIAlpZihpIDxoZWFkZXJzLnNpemUoKS0xKSBvdXRmdy53cml0ZSgiLCIpOworCQkgICAgfQorCQkgICAgb3V0Zncud3JpdGUoTFMpOworCQkgICAgCisJCSAgICBmb3IoaW50IGk9MDtpPGxvZ1RleHQuc2l6ZSgpOysraSkgeworCQkgICAgCSBBcnJheUxpc3Q8U3RyaW5nPiB0eHRsaXN0ID0gbG9nVGV4dC5nZXQoaSk7CisJCQkJIEFycmF5TGlzdDxEb3VibGU+IGRhdGFsaXN0ID0gbG9nRGF0YS5nZXQoaSk7CisJCQkJIGZvcihTdHJpbmcgdDp0eHRsaXN0KSBvdXRmdy53cml0ZSh0KyIsIik7CisJCQkJIGZvcihpbnQgaj0wO2o8ZGF0YWxpc3Quc2l6ZSgpOysraikgeworCQkJCQkgb3V0Zncud3JpdGUoZGF0YWxpc3QuZ2V0KGopKyIiKTsKKwkJCQkJIGlmKGo8ZGF0YWxpc3Quc2l6ZSgpLTEpb3V0Zncud3JpdGUoIiwiKTsKKwkJCQl9CisJCQkJIG91dGZ3LndyaXRlKExTKTsKKwkJICAgIH0JCSAgICAKKwkJfSBjYXRjaChFeGNlcHRpb24gZSkgeworCQkJZS5wcmludFN0YWNrVHJhY2UoKTsKKwkJfQorCQkKKwl9Cit9CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91dGlsaXR5L2dlbmVyYXRvcnMvQ2FuYWRhRGF0YUNsZWFuZXIuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3NyYy9vcmcvZWNsaXBzZS9zdGVtL3V0aWxpdHkvZ2VuZXJhdG9ycy9DYW5hZGFEYXRhQ2xlYW5lci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNiMDRkYzQKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91dGlsaXR5L2dlbmVyYXRvcnMvQ2FuYWRhRGF0YUNsZWFuZXIuamF2YQpAQCAtMCwwICsxLDM0MSBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkuZ2VuZXJhdG9yczsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqYXZhLmlvLkJ1ZmZlcmVkUmVhZGVyOworaW1wb3J0IGphdmEuaW8uRmlsZTsKK2ltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOworaW1wb3J0IGphdmEuaW8uUHJpbnRXcml0ZXI7CitpbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7CitpbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOworaW1wb3J0IGphdmEudXRpbC5MaXN0OworaW1wb3J0IGphdmEudXRpbC5TZXQ7CisKKy8qKgorICogU1RFTSBJSSBEYXRhIE1pZ3JhdGlvbi9HZW5lcmF0aW9uIFV0aWxpdGllcyA6IEluc3RhbmNlcyBvZiB0aGlzIHV0aWxpdHkgY2xhc3MKKyAqIGNsZWFuIHRoZSBkYXRhIGZvciBDYW5hZGEuIFRoaXMgcHJvZ3JhbSB3aWxsIHJlbW92ZSBhbGwgdW5uZWNlc2FyeSBkYXRhIGZyb20KKyAqIHRoZSBvcmlnaW5hbCBkYXRhIHNvdXJjZSBmaWxlIGZvciBDYW5hZGEuIFRoZSBvcmlnaW5hbCBkYXRhIHNvdXJjZSBmaWxlIGZvcgorICogQ2FuYWRhIHdhcyBkb3dubG9hZGVkIGZyb20gOgorICogaHR0cDovL3d3dy5nZW9jb21tLmNvbS9mYXEvY29weXJpZ2h0Lmh0bWwKKyAqIAorICogCisgKiBBZGQgdGhlIGZvbGxvd2luZyB2YWx1ZXMgdG8gdGhlIHJ1biBjb25maWd1cmF0aW9uOgorICogCisgKiBDOlx3b3Jrc3BhY2UyXG9yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eVxkYXRhTWlncmF0aW9uXGlucHV0XHByb3BlcnRpZXNcQ291bnRyaWVzTGlnaHQudHh0IAorICogQzpcc2hhcGVGaWxlc1xjYW5hZGFcCisgKiAKKyAqIG9uIG5lbHNvbnMgbWFjaGluZSBpdCB1c2VkIHRvIGJlLi4uCisgKiAKKyAqIEM6XHN0ZW1JSVxvcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHlcZGF0YU1pZ3JhdGlvblxpbnB1dFxwcm9wZXJ0aWVzXEV1cm9wZUNvdW50cmllcy50eHQKKyAqIEM6XEV1cm9wZURhdGEyMDA3XENhbmFkYVwKKyAqIAorICogT3ZlcnZpZXcgb2YgdGhlIGRhdGEgZ2VuZXJhdGlvbiBwcm9jZXNzIGZvciB0aGUgQ2FuYWRhIGRhdGEgc2V0LgorICogCisgKiAxKSBEYXRhIENsZWFuaW5nIDogc3RhcnQgYnkgcnVubmluZyBDYW5hZGFEYXRhQ2xlYW5lci4gVGhpcyBwcm9ncmFtIHdpbGwKKyAqIHJlbW92ZSBhbGwgdW5uZWNlc2FyeSBkYXRhIChpLmUuIGNvbHVtbnMpIGluIHRoZSBvcmlnaW5hbCBzb3VyY2UgZmlsZS4gSW4KKyAqIGFkZGl0aW9uLCB0aGlzIHByb2dyYW0gd2lsbCBncm91cCB0aGUgZGF0YSBiYXNlZCBvbiBpdHMgSUQgKGkuZS4gTk8sSVQsRlIsVUssCisgKiBldGMpLiBUaGUgcmVzdWx0IHdpbGwgYmUgYSBmaWxlIG5hbWVkIENhbmFkYVNvcnRlZC50eHQgd2l0aCBjbGVhbmVkIGRhdGEuCisgKiAKKyAqIEluIG90aGVyIHdvcmRzIDogQ2FuYWRhLnR4dCAtLT4gfHxDYW5hZGFEYXRhQ2xlYW5lcnx8IC0tPiBDYW5hZGFTb3J0ZWQudHh0CisgKiAKKyAqIE5PVEU6IENhbmFkYVNvcnRlZC50eHQgd2lsbCBiZSB1c2VkIGFzIHRoZSBpbnB1dCBmb3IgdGhlIHJlbWFpbmluZyBwYXJ0IG9mCisgKiB0aGUgcHJvY2Vzcy4KKyAqIAorICogCisgKiAyKSBEYXRhIENvbnZlcnRlciA6IHJ1biBDYW5hZGFEYXRhQ29udmVydGVyIHRvIGNvbnZlcnQgZmlsZSBpbiBjbGVhbmVkIGZvcm1hdAorICogaW50byBEaXZhIGZvcm1hdC4KKyAqIAorICogCisgKiAzKSBBcmVhIGFuZCBQb3B1bGF0aW9uIERhdGEgRXh0cmFjdGlvbiA6IHJ1biBDYW5hZGFEYXRhRXh0cmFjdG9yIHRvIGV4dHJhY3QKKyAqIGFyZWEgYW5kIHBvcHVsYXRpb24gZGF0YSBvciBhbGwgYWRtaW5pc3RyYXRpb25zIGluIENhbmFkYS4KKyAqIAorICovCitwdWJsaWMgY2xhc3MgQ2FuYWRhRGF0YUNsZWFuZXIgeworCisJcHJpdmF0ZSBTdHJpbmcgdGFyZ2V0RmlsZSA9IG51bGw7CisKKwlwcml2YXRlIFN0cmluZyBvdXRwdXREaXIgPSBudWxsOworCisJLyoqCisJICogTGlzdCBmb3IgSVNPIDMxNjYtMSBjb2RlcyBhbmQgdGFyZ2V0IGNvdW50cmllcy4KKwkgKi8KKwlMaXN0PFN0cmluZz4gdGFyZ2V0TGlzdCA9IG51bGw7CisKKwlMaXN0PFN0cmluZz4gY29kZUxpc3QgPSBudWxsOworCisJLyoqCisJICogSGFzaCBtYXAgdG8ga2VlcCB0cmFjayBvZiBwb2x5Z29ucy4KKwkgKi8KKwlIYXNoTWFwPFN0cmluZywgU3RyaW5nPiBtYXAgPSBudWxsOworCisJLyoqCisJICogQ29uc3RydWN0b3IKKwkgKiAKKwkgKiBAcGFyYW0gdGFyZ2V0RmlsZSAtCisJICogICAgICAgICAgICBkYXRhIGZpbGUgd2hlcmUgd2UgZmluZCBhIGxpc3Qgb2YgY291bnRyaWVzIGZvciBnZW5lcmF0aW9uIG9mCisJICogICAgICAgICAgICB0aGVpciBjb3JyZXNwb25kaW5nIGFyZWEucHJvcGVydGllcyBmaWxlcy4KKwkgKiBAcGFyYW0gb3V0cHV0RGlyIC0KKwkgKiAgICAgICAgICAgIHRoZSBvdXRwdXQgZGlyZWN0b3J5IGZvciB0aGUgZmlsZXMgZ2VuZXJhdGVkLgorCSAqIAorCSAqLworCXB1YmxpYyBDYW5hZGFEYXRhQ2xlYW5lcihTdHJpbmcgdGFyZ2V0RmlsZSwgU3RyaW5nIG91dHB1dERpcikgeworCQkvLyBTZXQgdmFsdWVzIG9mIGdsb2JhbCB2YXJpYWJsZXMuCisJCXRoaXMudGFyZ2V0RmlsZSA9IHRhcmdldEZpbGU7CisJCXRoaXMub3V0cHV0RGlyID0gb3V0cHV0RGlyOworCQl0YXJnZXRMaXN0ID0gbnVsbDsKKwkJbWFwID0gbmV3IEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+KCk7CisJfQorCisJLyoqCisJICogVGhpcyBtZXRob2Qgc2V0cyB1cCBhbmQgcnVucyB0aGUgZmluZGVyLgorCSAqIAorCSAqLworCXB1YmxpYyB2b2lkIHJ1bigpIHsKKwkJLy8gUmVhZCBhbmQga2VlcCBpbiBtZW1vcnkgYSBsaXN0IG9mIHRoZSBjb3VudHJpZXMgd2Ugd2FudC4KKwkJdGFyZ2V0TGlzdCA9IEdlblV0aWxzLnBvcHVsYXRlTGlzdCh0YXJnZXRGaWxlKTsKKworCQkvLyBOb3csIHByb2Nlc3MgZWFjaCBpdGVtIGluIHRoZSB0YXJnZXQgbGlzdC4KKwkJcHJvY2VzcygpOworCX0KKworCS8qKgorCSAqIFByb2Nlc3Mgb3VyIGdsb2JhbCBsaXN0IG9mIHRhcmdldCBjb3VudHJpZXMuCisJICogCisJICovCisJcHJvdGVjdGVkIHZvaWQgcHJvY2VzcygpIHsKKworCQkvLyBBIHdyaXRlciBmb3IgdGhlIG5ldyBmaWxlIHdlIGFyZSBjcmVhdGluZy4KKwkJUHJpbnRXcml0ZXIgY2FuYWRhRmlsZSA9IG51bGw7CisKKwkJLy8gTmFtZSBvZiB0aGUgbmV3IHByb3BlcnRpZXMgZmlsZS4KKwkJU3RyaW5nIGZpbGVOYW1lID0gbnVsbDsKKworCQlpbnQgc2l6ZSA9IHRhcmdldExpc3Quc2l6ZSgpOworCisJCWZvciAoaW50IGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7CisKKwkJCS8vIEdldCB0aGUgbmV4dCBjb3VudHJ5IGluIHRoZSBsaXN0LgorCQkJU3RyaW5nIGZpbGUgPSB0YXJnZXRMaXN0LmdldChpKS50cmltKCk7CisKKwkJCS8vIE9wZW4gdGhlIGRhdGEgc291cmNlIGZpbGUgZm9yIHRoaXMgY291bnRyeS4KKwkJCUJ1ZmZlcmVkUmVhZGVyIHJlYWRlciA9IEdlblV0aWxzLm9wZW5SZWFkZXIoZmlsZSk7CisJCQlVdGlsTG9nZ2VyLmxvZ0luZm9ybWF0aW9uKCI8PDw8IFByb2Nlc3NpbmcgQ291bnRyeSA6ICIgKyBmaWxlICsgIiA+Pj4+Iik7IC8vJE5PTi1OTFMtMSQgIC8vJE5PTi1OTFMtMiQKKwkJCXRyeSB7CisKKwkJCQlpZiAocmVhZGVyICE9IG51bGwpIHsKKworCQkJCQlTdHJpbmcgYnVmZmVyID0gbnVsbDsKKworCQkJCQkvLyBXZSB0YWtlIGEgY2h1bmsgb2YgdGhlIGRhdGEgW0JVRkZFUl9NSU4sQlVGRkVSX01BWF0gdG8KKwkJCQkJLy8gbWFrZSBwcm9jZXNzaW5nIG1vcmUKKwkJCQkJLy8gZWZmaWNpZW50LCB3ZSBkb250IG5lZWQgYWxsIG9mIGl0LgorCQkJCQlpbnQgQlVGRkVSX01JTiA9IDA7CisJCQkJCWludCBCVUZGRVJfTUFYID0gMTAwOworCisJCQkJCXdoaWxlIChHZW5VdGlscy5FT0YoYnVmZmVyID0gcmVhZGVyLnJlYWRMaW5lKCkpICE9IHRydWUpIHsKKworCQkJCQkJLy8gTWFrZSBzdXJlIHRoYXQgd2UgbWFyayBhbGwgdW5rbm93biBkYXRhLgorCQkJCQkJYnVmZmVyID0gYnVmZmVyLnJlcGxhY2UoIiwsLCIsICIsVU5LTk9XTixVTktOT1dOLCIpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKKwkJCQkJCWJ1ZmZlciA9IGJ1ZmZlci5yZXBsYWNlKCIsLCIsICIsVU5LTk9XTiwiKTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCisKKwkJCQkJCVN0cmluZ1tdIGl0ZW1zID0gYnVmZmVyLnN1YnN0cmluZyhCVUZGRVJfTUlOLAorCQkJCQkJCQlCVUZGRVJfTUFYKS5zcGxpdCgiLCIpOyAvLyROT04tTkxTLTEkCisKKwkJCQkJCS8vIENsZWFyIGJ1ZmZlciBvZiBkYXRhIHdlIGRvbnQgbmVlZC4KKwkJCQkJCVN0cmluZyBjbGVhbkJ1ZmZlciA9IGNsZWFuKGJ1ZmZlcik7CisKKwkJCQkJCUZpbGUgY291bnRyeURpciA9IG5ldyBGaWxlKG91dHB1dERpcik7CisKKwkJCQkJCWlmIChjb3VudHJ5RGlyICE9IG51bGwgJiYgY291bnRyeURpci5leGlzdHMoKSA9PSBmYWxzZSkgeworCQkJCQkJCS8vIERpcmVjdG9yeSBkb2VzIG5vdCBleGlzdC4gQ3JlYXRlIGl0LgorCQkJCQkJCWNvdW50cnlEaXIubWtkaXIoKTsKKwkJCQkJCX0KKworCQkJCQkJLy8gQ3JlYXRlIGFuZCBvcGVuIHRoZSBuZXcgZmlsZS4KKwkJCQkJCWlmIChjYW5hZGFGaWxlID09IG51bGwpIHsKKwkJCQkJCQlmaWxlTmFtZSA9IGNvdW50cnlEaXIgKyAiXFwiICsgIkNhbmFkYVNvcnRlZC50eHQiOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQJCQkJCQkJCQkKKwkJCQkJCQkvLyBDcmVhdGUgdG5lIG5ldyBwcm9wZXJ0aWVzLmZpbGUgZm9yIHRoaXMgY291bnRyeS4KKwkJCQkJCQljYW5hZGFGaWxlID0gR2VuVXRpbHMub3BlbldyaXRlcihmaWxlTmFtZSk7CisJCQkJCQl9CisKKwkJCQkJCVN0cmluZyB2YWwgPSBtYXAKKwkJCQkJCQkJLmdldChpdGVtc1tDYW5hZGFEYXRhQ2xlYW5pbmdIZWFkZXIuTkFNRTFdKTsKKwkJCQkJCWlmICh2YWwgIT0gbnVsbCkgeworCQkJCQkJCS8vIENvbmNhdGVuYXRlCisJCQkJCQkJdmFsICs9IGNsZWFuQnVmZmVyICsgIlxuIjsgLy8kTk9OLU5MUy0xJAorCQkJCQkJfSBlbHNlIHsKKwkJCQkJCQkvLyBGaXJzdCBlbnRyeQorCQkJCQkJCXZhbCA9IGNsZWFuQnVmZmVyICsgIlxuIjsgLy8kTk9OLU5MUy0xJAorCQkJCQkJfQorCQkJCQkJbWFwLnB1dChpdGVtc1tDYW5hZGFEYXRhQ2xlYW5pbmdIZWFkZXIuTkFNRTFdLCB2YWwpOworCisJCQkJCX0vLyB3aGlsZQorCisJCQkJCS8vIENsb3NlIGFsbCBvcGVuIHJlc291cmNlcy4KKwkJCQkJcmVhZGVyLmNsb3NlKCk7CisKKwkJCQkJaWYgKGNhbmFkYUZpbGUgIT0gbnVsbCkgeworCQkJCQkJU3RyaW5nIG91dHB1dCA9IGNvbnNvbGlkYXRlRGF0YShtYXApOworCQkJCQkJaWYgKG91dHB1dCAhPSBudWxsKSB7CisJCQkJCQkJR2VuVXRpbHMuYWRkRGF0YShjYW5hZGFGaWxlLCBvdXRwdXQpOworCQkJCQkJfQorCQkJCQkJY2FuYWRhRmlsZS5jbG9zZSgpOworCQkJCQkJY2FuYWRhRmlsZSA9IG51bGw7CisJCQkJCQlVdGlsTG9nZ2VyLmxvZ0luZm9ybWF0aW9uKCIiIC8vJE5PTi1OTFMtMSQKKwkJCQkJCQkJKyBmaWxlTmFtZSk7CisJCQkJCQlmaWxlTmFtZSA9IG51bGw7CisJCQkJCX0KKworCQkJCQkvLyBSdW4gZ2FyYmFnZSBjb2xsZWN0aW9uCisJCQkJCS8vU3lzdGVtLmdjKCk7CisKKwkJCQl9CisKKwkJCX0gY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKKwkJCQllLnByaW50U3RhY2tUcmFjZSgpOworCQkJfQorCisJCX0gLy8gZm9yCisKKwl9CisKKwkvKioKKwkgKiAKKwkgKiBHZXQgYWxsIHRoZSB2YWx1ZXMgaW4gdGhlIG1hcC4KKwkgKiAKKwkgKiBAcGFyYW0gbWFwCisJICogICAgICAgICAgICBhIG1hcCBvZiBsb2NhdGlvbnMKKwkgKiAKKwkgKiBAcmV0dXJuIFN0cmluZyBhIHN0cmluZyB3aWxsIGFsbCBsb2NhdGlvbnMgZ3JvdXBlZCBzZWN1ZW50aWFseS4KKwkgKiAKKwkgKi8KKwlTdHJpbmcgY29uc29saWRhdGVEYXRhKEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+IG1hcCkgeworCisJCVN0cmluZyB2YWx1ZSA9IG51bGw7CisKKwkJaWYgKG1hcC5pc0VtcHR5KCkpIHsKKwkJCXJldHVybiBudWxsOworCQl9CisKKwkJU2V0PFN0cmluZz4ga2V5cyA9IG1hcC5rZXlTZXQoKTsKKworCQlJdGVyYXRvciBpdCA9IGtleXMuaXRlcmF0b3IoKTsKKworCQl3aGlsZSAoaXQuaGFzTmV4dCgpKSB7CisKKwkJCVN0cmluZyBrZXkgPSAoU3RyaW5nKSBpdC5uZXh0KCk7CisKKwkJCWlmICh2YWx1ZSA9PSBudWxsKSB7CisJCQkJdmFsdWUgPSBtYXAuZ2V0KGtleSk7CisJCQl9IGVsc2UgeworCQkJCXZhbHVlICs9IG1hcC5nZXQoa2V5KTsKKwkJCX0KKworCQl9CisKKwkJcmV0dXJuIHZhbHVlOworCX0KKworCS8qKgorCSAqIFJlbW92ZSBhbGwgaXJyZWxldmFudCBkYXRhIGZyb20gb3VyIGJ1ZmZlcgorCSAqLworCVN0cmluZyBjbGVhbihTdHJpbmcgYnVmZmVyKSB7CisvLyBjb3VudCBieSAxCisJCWZpbmFsIGludCBMSU1JVCA9IDk7CisJCVN0cmluZyBuZXdCdWZmZXIgPSBudWxsOworCisJCVN0cmluZ1tdIGl0ZW1zID0gYnVmZmVyLnNwbGl0KCIsIik7IC8vJE5PTi1OTFMtMSQKKworCQlpbnQgaW5kZXggPSAwOworCisJCXdoaWxlIChpbmRleCA8IGl0ZW1zLmxlbmd0aCkgeworCisJCQlpZiAoaW5kZXggPj0gTElNSVQpIHsKKwkJCQluZXdCdWZmZXIgKz0gIiwiICsgaXRlbXNbaW5kZXgrK107IC8vJE5PTi1OTFMtMSQKKwkJCQljb250aW51ZTsKKwkJCX0KKworCQkJLy8gc2V0IHRoZSBjb3VudHJ5IG5hbWUgbWFudWFsbHkKKwkJCQorCQkJbmV3QnVmZmVyID0gIkNBTiwgQ0FOQURBIjsgLy8kTk9OLU5MUy0xJAorCQkJCisJCQlzd2l0Y2ggKGluZGV4KSB7CisvKgorCQkJY2FzZSBDYW5hZGFEYXRhQ2xlYW5pbmdIZWFkZXIuSUQ6CisJCQkJbmV3QnVmZmVyID0gaXRlbXNbaW5kZXhdOworCQkJCWJyZWFrOworKi8KKwkJCQorCisgICAgICAgICAgICAvKgorCQkJY2FzZSBDYW5hZGFEYXRhQ2xlYW5pbmdIZWFkZXIuQVJFQToKKwkJCQluZXdCdWZmZXIgPSAiLCIgKyBpdGVtc1tpbmRleF07IC8vJE5PTi1OTFMtMSQKKwkJCQlicmVhazsKKworCQkJY2FzZSBDYW5hZGFEYXRhQ2xlYW5pbmdIZWFkZXIuQ09VTlRSWToKKwkJCQluZXdCdWZmZXIgKz0gIiwiICsgaXRlbXNbaW5kZXhdOyAvLyROT04tTkxTLTEkCisJCQkJYnJlYWs7CisgICAgICAgICAgICAqLworCQkJY2FzZSBDYW5hZGFEYXRhQ2xlYW5pbmdIZWFkZXIuTkFNRTE6CisJCQkJbmV3QnVmZmVyICs9ICIsIiArIGl0ZW1zW2luZGV4XTsgLy8kTk9OLU5MUy0xJAorCQkJCWJyZWFrOworLyoKKwkJCWNhc2UgQ2FuYWRhRGF0YUNsZWFuaW5nSGVhZGVyLk5BTUUyOgorCQkJCW5ld0J1ZmZlciArPSAiLCIgKyBpdGVtc1tpbmRleF07IC8vJE5PTi1OTFMtMSQKKwkJCQlicmVhazsKKworCQkJY2FzZSBDYW5hZGFEYXRhQ2xlYW5pbmdIZWFkZXIuTkFNRTM6CisJCQkJbmV3QnVmZmVyICs9ICIsIiArIGl0ZW1zW2luZGV4XTsgLy8kTk9OLU5MUy0xJAorCQkJCWJyZWFrOworCisJCQljYXNlIENhbmFkYURhdGFDbGVhbmluZ0hlYWRlci5QT1AxOgorCQkJCW5ld0J1ZmZlciArPSAiLCIgKyBpdGVtc1tpbmRleF07IC8vJE5PTi1OTFMtMSQKKwkJCQlicmVhazsKKworCQkJY2FzZSBDYW5hZGFEYXRhQ2xlYW5pbmdIZWFkZXIuUE9QMjoKKwkJCQluZXdCdWZmZXIgKz0gIiwiICsgaXRlbXNbaW5kZXhdOyAvLyROT04tTkxTLTEkCisJCQkJYnJlYWs7CisqLworCQkJfQorCisJCQlpbmRleCsrOworCisJCX0KKworCQlyZXR1cm4gbmV3QnVmZmVyOworCisJfQorCisJLyoqCisJICogTWFpbiBleGVjdXRpb24gZW50cnkgcG9pbnQuCisJICogCisJICogQHBhcmFtIGFyZ3MKKwkgKi8KKwlwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CisJCWZpbmFsIGludCBUQVJHRVRfTElTVCA9IDA7CisJCWZpbmFsIGludCBPVVRQVVRfRElSID0gMTsKKwkJZmluYWwgaW50IFBBUkFNUyA9IDI7CisKKwkJaWYgKGFyZ3MubGVuZ3RoIDwgUEFSQU1TKSB7CisJCQlVdGlsTG9nZ2VyLmxvZ0luZm9ybWF0aW9uKCItLVdyb25nIGFyZ3VtZW50cy0tIik7IC8vJE5PTi1OTFMtMSQKKwkJCVN5c3RlbS5vdXQKKwkJCQkJLnByaW50bG4oIlx0VG8gcnVuLCBwbGVhc2UgcHJvdmlkZSB0aGUgZm9sbG93aW5nIGFyZ3VtZW50cyA6ICIpOyAvLyROT04tTkxTLTEkCQkJCisJCQlVdGlsTG9nZ2VyLmxvZ0luZm9ybWF0aW9uKCJcdFx0IFRhcmdldCBjb3VudHJpZXMgZmlsZSIpOyAvLyROT04tTkxTLTEkCQkJCisJCQlVdGlsTG9nZ2VyLmxvZ0luZm9ybWF0aW9uKCJcdFx0IE91dHB1dCBkaXJlY3RvcnkiKTsgLy8kTk9OLU5MUy0xJAkJCQkJCisJCQlyZXR1cm47CisJCX0KKworCQlDYW5hZGFEYXRhQ2xlYW5lciBmb3JtYXR0ZXIgPSBuZXcgQ2FuYWRhRGF0YUNsZWFuZXIoYXJnc1tUQVJHRVRfTElTVF0sCisJCQkJYXJnc1tPVVRQVVRfRElSXSk7CisJCWZvcm1hdHRlci5ydW4oKTsKKwl9Cit9CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91dGlsaXR5L2dlbmVyYXRvcnMvQ2FuYWRhRGF0YUNsZWFuaW5nSGVhZGVyLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91dGlsaXR5L2dlbmVyYXRvcnMvQ2FuYWRhRGF0YUNsZWFuaW5nSGVhZGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWM3MzdhNAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3NyYy9vcmcvZWNsaXBzZS9zdGVtL3V0aWxpdHkvZ2VuZXJhdG9ycy9DYW5hZGFEYXRhQ2xlYW5pbmdIZWFkZXIuamF2YQpAQCAtMCwwICsxLDQ1IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS5nZW5lcmF0b3JzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA5IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqCisgKiAKKyAqIFJlbGV2YW50IGtleXMgdG8gdGhlIENhbmFkaWFuIGRhdGFzZXQuIEtleXMgaW4gdGhpcyBjbGFzcyBhcmUgdXNlZCBkdXJpbmcgdGhlCisgKiBkYXRhIGNsZWFuaW5nIHByb2Nlc3MgdG8gZXh0cmFjdCBvbmx5IHRoZSByZWxldmFudCBrZXlzIGZyb20gdGhlIG9yaWdpbmFsCisgKiBkYXRhIHNvdXJjZSBmaWxlIGZvciBDYW5hZGEuIFRoZXNlIGtleXMgYXJlIHVzZWQgd2hlbiBydW5uaW5nIGFuIGluc3RhbmNlIG9mCisgKiBSdXNzaWFEYXRhQ2xlYW5lciB0byBwZXJmb3JtIGRhdGEgY2xlYW5pbmcuCisgKiAKKyAqLworcHVibGljIGFic3RyYWN0IGNsYXNzIENhbmFkYURhdGFDbGVhbmluZ0hlYWRlciB7CisKKwkvKioKKwkgKiBUb3RhbCBBcmVhCisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgQVJFQSA9IDE7CisKKwkvKioKKwkgKiBDb3VudHJ5IGlkZW50aWZpZXIKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIGludCBDT1VOVFJZID0gNzsKKworCS8qKgorCSAqIExvY2F0aW9uIG5hbWUgMQorCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IE5BTUUxID0gODsKKworCS8qKgorCSAqIFBvcHVsYXRpb24gdmFsdWUgdGhpcyBpcyBub3QgcmVhbGx5IHRoZSBwb3B1bGF0aW9uIGJ1dCBpdCB3aWxsIGNyZWF0ZQorCSAqIGR1bW15IGZpbGVzCisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgUE9QMSA9IDQ7CisKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91dGlsaXR5L2dlbmVyYXRvcnMvQ29udGFpbm1lbnRSZWxhdGlvbnNoaXBGaW5kZXIuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3NyYy9vcmcvZWNsaXBzZS9zdGVtL3V0aWxpdHkvZ2VuZXJhdG9ycy9Db250YWlubWVudFJlbGF0aW9uc2hpcEZpbmRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM0NjNjNmQKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91dGlsaXR5L2dlbmVyYXRvcnMvQ29udGFpbm1lbnRSZWxhdGlvbnNoaXBGaW5kZXIuamF2YQpAQCAtMCwwICsxLDQzNSBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkuZ2VuZXJhdG9yczsKKworaW1wb3J0IGphdmEuaW8uQnVmZmVyZWRSZWFkZXI7CitpbXBvcnQgamF2YS5pby5GaWxlOworaW1wb3J0IGphdmEuaW8uRmlsZUlucHV0U3RyZWFtOworaW1wb3J0IGphdmEuaW8uRmlsZVdyaXRlcjsKK2ltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOworaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW1SZWFkZXI7CitpbXBvcnQgamF2YS51dGlsLkhhc2hTZXQ7CitpbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOworaW1wb3J0IGphdmEudXRpbC5TZXQ7CisKKworLyoqCisgKiBUaGlzIGNsYXNzIHJlcHJlc2VudHMgCisgKi8KK3B1YmxpYyBjbGFzcyBDb250YWlubWVudFJlbGF0aW9uc2hpcEZpbmRlciB7CisKKwlwcml2YXRlIHN0YXRpYyBTdHJpbmcgQ05UUllfTFZMMF9DT0RFOworCS8vIGdldCB0aGUgcGF0aAorCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBzZXAgPSBGaWxlLnNlcGFyYXRvcjsKKwlAU3VwcHJlc3NXYXJuaW5ncygibmxzIikKKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgUEFUSCA9ICJDOiIrc2VwKyJlY2xpcHNlIitzZXArIndvcmtzcGFjZTMiK3NlcDsKKwlAU3VwcHJlc3NXYXJuaW5ncygibmxzIikKKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmdbXSBleGNsdWRlTGlzdCA9IHsiVVNBIiwiSlBOIiwiQ1ZTIiwiVEhBIiwiWlpaIn07CisJcHJpdmF0ZSBzdGF0aWMgSGFzaFNldDxTdHJpbmc+IGV4Y2x1ZGVTZXQgPSBuZXcgSGFzaFNldDxTdHJpbmc+KCk7CisJcHJpdmF0ZSBzdGF0aWMgRmlsZSBsZXZlbDFOb2RlcyA9IG51bGw7CisJcHJpdmF0ZSBzdGF0aWMgRmlsZSBsZXZlbDJOb2RlcyA9IG51bGw7CisJCisJLy8gdGhlIHNldHMgb2YgTm9kZXMKKwlzdGF0aWMgU2V0PFN0cmluZz4gbGV2ZWxPbmVTZXQ9IG5ldyBIYXNoU2V0PFN0cmluZz4oKTsKKwlzdGF0aWMgU2V0PFN0cmluZz4gbGV2ZWxUd29TZXQ9IG5ldyBIYXNoU2V0PFN0cmluZz4oKTsKKwkvLyBmb3IgYW5kIGxldmVsIHR3byBub2RlcyBub3QgaW5zaWRlIGxldmVsCisJc3RhdGljIFNldDxTdHJpbmc+IG9ycGhhbmVkU2V0ID0gbmV3IEhhc2hTZXQ8U3RyaW5nPigpOworCXN0YXRpYyBTdHJpbmcgb3V0RmlsZU5hbWU7CisJc3RhdGljIEZpbGVXcml0ZXIgZnc7CisJCisJLyoqCisJICogQHBhcmFtIGFyZ3MKKwkgKi8KKwlAU3VwcHJlc3NXYXJuaW5ncygibmxzIikKKwlwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CisJCWZvciAoaW50IGkgPSAwOyBpIDwgZXhjbHVkZUxpc3QubGVuZ3RoOyBpICsrKSB7CisJCQlleGNsdWRlU2V0LmFkZChleGNsdWRlTGlzdFtpXSk7CisJCX0KKwkJCisJCQorCQlTZXQgYWxsQ291bnRyaWVzID0gZ2V0QWxsQ291bnRyaWVzKCk7CisJCUl0ZXJhdG9yIGl0ZXIgPSBhbGxDb3VudHJpZXMuaXRlcmF0b3IoKTsKKwkJCisJCXdoaWxlKGl0ZXIuaGFzTmV4dCgpKSB7CisJCQlsZXZlbE9uZVNldC5jbGVhcigpOworCQkJbGV2ZWxUd29TZXQuY2xlYXIoKTsKKwkJCW9ycGhhbmVkU2V0LmNsZWFyKCk7CisJCQkKKwkJCUNOVFJZX0xWTDBfQ09ERSA9IChTdHJpbmcpIGl0ZXIubmV4dCgpOworCQkJc2V0Tm9kZXNGaWxlcyhDTlRSWV9MVkwwX0NPREUpOworCQkJbGV2ZWxPbmVTZXQgPSBnZXROb2Rlc0luRmlsZShsZXZlbDFOb2Rlcyk7CisJCQlsZXZlbFR3b1NldCA9IGdldE5vZGVzSW5GaWxlKGxldmVsMk5vZGVzKTsKKwkJCQorCQkJU3RyaW5nIG5vZGVEaXIgPSBQQVRIKyJvcmcuZWNsaXBzZS5zdGVtLmludGVybmFsLmRhdGEiK3NlcCsicmVzb3VyY2VzIitzZXArImRhdGEiK3NlcCsicmVsYXRpb25zaGlwIitzZXArInJlbGF0aXZlcGh5c2ljYWwiK3NlcDsKKwkJCS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworCQkJb3V0RmlsZU5hbWUgPSBub2RlRGlyK0NOVFJZX0xWTDBfQ09ERSsiXzFfIitDTlRSWV9MVkwwX0NPREUrIl8yLnByb3BlcnRpZXMiOyAKKwkJCS8vIDEuIHByb2Nlc3MgbGV2ZWwgVFdPIGlmIHdlIGhhdmUgdGhlbQorCQkJaWYobGV2ZWxUd29TZXQuc2l6ZSgpID49IDEpIHsKKwkJCQlpZiAobGV2ZWxPbmVTZXQuc2l6ZSgpPD0wKSB7CisJCQkJCVV0aWxMb2dnZXIubG9nSW5mb3JtYXRpb24oIkVSUk9SLiBGb3VuZCBMZXZlbCAyIGRhdGEgd2l0aCBubyBsZXZlbCAxIGRhdGEgZm9yLi4uICIrQ05UUllfTFZMMF9DT0RFKTsKKwkJCQkJU3lzdGVtLmV4aXQoMSk7CisJCQkJfQorCQkJCQkJCQkJCQkJCQkJCQkKKwkJCQkgdHJ5IHsKKwkJCQkJCWZ3ID0gbmV3IEZpbGVXcml0ZXIob3V0RmlsZU5hbWUpOworCQkJCQl9IGNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7CisJCQkJCQlVdGlsTG9nZ2VyLmxvZ0luZm9ybWF0aW9uKCJFcnJvciBjcmVhdGluZyBmaWxlIHdyaXRlciAiICsgZS5nZXRNZXNzYWdlKCkpOworCQkJCQkJZS5wcmludFN0YWNrVHJhY2UoKTsKKwkJCQkJCVN5c3RlbS5leGl0KDEpOworCQkJCQl9CisJCQkJd3JpdGVMMVRvTDJIZWFkZXIoKTsKKwkJCQlvcnBoYW5lZFNldCA9IHdyaXRlTDJpbkwxTm9kZXMoKTsKKwkJCQlpZiAoZncgIT0gbnVsbCkgeworCQkJCQkgdHJ5IHsKKwkJCQkJCQlmdy5mbHVzaCgpOworCQkJCQkJCWZ3LmNsb3NlKCk7CisJCQkJCQl9IGNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7CisJCQkJCQkJVXRpbExvZ2dlci5sb2dJbmZvcm1hdGlvbigiRXJyb3IgY3JlYXRpbmcgZmlsZSB3cml0ZXIgIiArIGUuZ2V0TWVzc2FnZSgpKTsKKwkJCQkJCQllLnByaW50U3RhY2tUcmFjZSgpOworCQkJCQkJCVN5c3RlbS5leGl0KDEpOworCQkJCQkJfQorCQkJCQl9CisJCQl9Ly8gaWYgbGV2ZWwyIGV4aXN0cworCQkJCisJCQkKKwkJCQorCQkJLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworCQkJb3V0RmlsZU5hbWUgPSBub2RlRGlyK0NOVFJZX0xWTDBfQ09ERSsiXzBfIitDTlRSWV9MVkwwX0NPREUrIl8xLnByb3BlcnRpZXMiOyAKKwkJCS8vIG5vdyB3cml0ZSBhbnkgbGV2ZWwgMSBhbmQgb3Igb3JwaGFuZWQgbm9kZXMgaW50byB0aGUgbGV2ZWwwLTEgZmlsZQorCQkJaWYgKG9ycGhhbmVkU2V0LnNpemUoKSA+PSAxKSB7CisJCQkJbGV2ZWxPbmVTZXQuYWRkQWxsKG9ycGhhbmVkU2V0KTsKKwkJCQlVdGlsTG9nZ2VyLmxvZ0luZm9ybWF0aW9uKCJXYXJuaW5nLCBjb3VudHJ5ICIrQ05UUllfTFZMMF9DT0RFKyIgaGFzICIrb3JwaGFuZWRTZXQuc2l6ZSgpKyIgb3JwaGFuZWQgbGV2ZWxUd29Ob2RlcyAiKTsKKwkJCQlJdGVyYXRvciB1Z2ggPSBvcnBoYW5lZFNldC5pdGVyYXRvcigpOworCQkJCXdoaWxlKHVnaC5oYXNOZXh0KCkpIHsKKwkJCQkJU3RyaW5nIGNvZGUgPSAoU3RyaW5nKSB1Z2gubmV4dCgpOworCQkJCQlVdGlsTG9nZ2VyLmxvZ0luZm9ybWF0aW9uKCJvcnBoYW4gPSAiK2NvZGUpOworCQkJCX0vLyBsZXZlbDEKKwkJCX0KKwkJCQkKKwkJCQorCQkJaWYobGV2ZWxPbmVTZXQuc2l6ZSgpPj0xKSB7CisJCQkJIHRyeSB7CisJCQkJCQlmdyA9IG5ldyBGaWxlV3JpdGVyKG91dEZpbGVOYW1lKTsKKwkJCQkJfSBjYXRjaCAoSU9FeGNlcHRpb24gZSkgeworCQkJCQkJVXRpbExvZ2dlci5sb2dJbmZvcm1hdGlvbigiRXJyb3IgY3JlYXRpbmcgZmlsZSB3cml0ZXIgIiArIGUuZ2V0TWVzc2FnZSgpKTsKKwkJCQkJCWUucHJpbnRTdGFja1RyYWNlKCk7CisJCQkJCQlTeXN0ZW0uZXhpdCgxKTsKKwkJCQkJfQorCQkJCXdyaXRlTDBUb0wxSGVhZGVyKCk7CisJCQkJd3JpdGVMMWluTDBOb2RlcygpOworCQkJCQorCQkJCWlmIChmdyAhPSBudWxsKSB7CisJCQkJCSB0cnkgeworCQkJCQkJCWZ3LmZsdXNoKCk7CisJCQkJCQkJZncuY2xvc2UoKTsKKwkJCQkJCX0gY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKKwkJCQkJCQlVdGlsTG9nZ2VyLmxvZ0luZm9ybWF0aW9uKCJFcnJvciBjcmVhdGluZyBmaWxlIHdyaXRlciAiICsgZS5nZXRNZXNzYWdlKCkpOworCQkJCQkJCWUucHJpbnRTdGFja1RyYWNlKCk7CisJCQkJCQkJU3lzdGVtLmV4aXQoMSk7CisJCQkJCQl9CisJCQkJCX0KKwkJCX0vLyBpZiBsZXZlbCAxIGV4aXN0cworCQkJCisJCQorCQkJCisJCX0gLy8gYWxsIGNvdW50cmllcworCQkKKwl9Ly8gbWFpbgorCQorCQorCQorCisJQFN1cHByZXNzV2FybmluZ3MoIm5scyIpCisJcHJpdmF0ZSBzdGF0aWMgU2V0PFN0cmluZz4gd3JpdGVMMmluTDFOb2RlcygpIHsKKwkJLy8gLi4uIHRoZW4KKwkJLy8xID0gSlAtMCwgSlAtMC1HMTAwMDAxLCBDb250YWlucyAKKwkJLy8yID0gSlAtVE9ILCBKUC1UT0gtRzQ2MDAwMiwgQ29udGFpbnMKKwkJLy8zID0gSlAtVE9ILCBKUC1UT0gtRzQ2MDAwMSwgQ29udGFpbnMKKwkJLy80ID0gSlAtVE9ILCBKUC1UT0gtRzQ2MDAwNCwgQ29udGFpbnMKKwkJaW50IGljb3VudCA9IDA7CisJCVNldDxTdHJpbmc+IG9ycGhhbnMgPSBuZXcgSGFzaFNldDxTdHJpbmc+KCk7CisJCVNldDxTdHJpbmc+IG1hdGNoU2V0ID0gbmV3IEhhc2hTZXQ8U3RyaW5nPigpOyAKKwkJSXRlcmF0b3IgaXRlciA9IGxldmVsT25lU2V0Lml0ZXJhdG9yKCk7CisJCXdoaWxlKGl0ZXIuaGFzTmV4dCgpKSB7CisJCQlTdHJpbmcgbGV2ZWxPbmVDb2RlID0gKFN0cmluZykgaXRlci5uZXh0KCk7CisJCQlJdGVyYXRvciBpdGVyMiA9IGxldmVsVHdvU2V0Lml0ZXJhdG9yKCk7CisJCQl3aGlsZShpdGVyMi5oYXNOZXh0KCkpIHsKKwkJCQlTdHJpbmcgbGV2ZWxUd29Db2RlID0gKFN0cmluZykgaXRlcjIubmV4dCgpOworCQkJCWlmKGxldmVsVHdvQ29kZS5pbmRleE9mKGxldmVsT25lQ29kZSk+PTApIHsKKwkJCQkJaWNvdW50ICsrOworCQkJCQl3cml0ZSgiIitpY291bnQrIiA9ICIrbGV2ZWxPbmVDb2RlKyIsICIrbGV2ZWxUd29Db2RlKyIsIENvbnRhaW5zIik7CisJCQkJCW1hdGNoU2V0LmFkZChsZXZlbFR3b0NvZGUpOworCQkJCX0KKwkJCX0vL2xldmVsIDIKKwkJfS8vIGxldmVsMQorCQkKKwkJLy8gY2hlY2sgdGhhdCBldmVyeW9uZSB3YXMgYWRkZWQgc29tZXdoZXJlCisJCUl0ZXJhdG9yIGl0ZXIzID0gbGV2ZWxUd29TZXQuaXRlcmF0b3IoKTsKKwkJd2hpbGUoaXRlcjMuaGFzTmV4dCgpKSB7CisJCQlTdHJpbmcgbGV2ZWxUd29Db2RlID0gKFN0cmluZykgaXRlcjMubmV4dCgpOworCQkgICAgaWYgKCFtYXRjaFNldC5jb250YWlucyhsZXZlbFR3b0NvZGUpKSBvcnBoYW5zLmFkZChsZXZlbFR3b0NvZGUpOworCQl9CisJCQorCQlyZXR1cm4gb3JwaGFuczsKKwl9CisKKworCisKKwkvKioKKwkgKiAKKwkgKi8KKwlAU3VwcHJlc3NXYXJuaW5ncygibmxzIikKKwlwcml2YXRlIHN0YXRpYyB2b2lkIHdyaXRlTDFpbkwwTm9kZXMoKSB7CisJCS8vMSA9IEpQTiwgSlAtQ0hCLCBDb250YWlucworCQkvLzIgPSBKUE4sIEpQLUNIRywgQ29udGFpbnMKKwkJLy8zID0gSlBOLCBKUC0wLCBDb250YWlucworCQkvLzQgPSBKUE4sIEpQLUtOVCwgQ29udGFpbnMKKwkJaW50IGljb3VudCA9IDA7CisJCUl0ZXJhdG9yIGl0ZXIgPSBsZXZlbE9uZVNldC5pdGVyYXRvcigpOworCQl3aGlsZShpdGVyLmhhc05leHQoKSkgeworCQkJU3RyaW5nIGxldmVsT25lQ29kZSA9IChTdHJpbmcpIGl0ZXIubmV4dCgpOworCQkJaWNvdW50ICsrOworCQkJd3JpdGUoIiIraWNvdW50KyIgPSAiK0NOVFJZX0xWTDBfQ09ERSsiLCAiK2xldmVsT25lQ29kZSsiLCBDb250YWlucyIpOworCQl9Ly8gbGV2ZWwxCisJfS8vd3JpdGVMMWluTDBOb2RlcygpCisKKworCisKKwkvKioKKwkgKiBAcGFyYW0gc3RyCisJICovCisJQFN1cHByZXNzV2FybmluZ3MoIm5scyIpCisJcHVibGljIHN0YXRpYyB2b2lkIHdyaXRlKFN0cmluZyBzdHIpIHsKKwkJdHJ5IHsKKwkJICAgICBmdy53cml0ZShzdHIrIlxuIik7IAorCQkgfSBjYXRjaCAoSU9FeGNlcHRpb24gZSkgeworCQkJCVV0aWxMb2dnZXIubG9nSW5mb3JtYXRpb24oIkVycm9yIHdyaXRpbmcgdG8gZmlsZSB3cml0ZXIgIitlLmdldE1lc3NhZ2UoKSk7CisJCQkgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKKwkJCSAgICBTeXN0ZW0uZXhpdCgxKTsKKwkJICB9Ly8gdHJ5CisJfSAvLyB3cml0ZQorCQorCQorCQorCisJLyoqCisJICogCisJICovCisJQFN1cHByZXNzV2FybmluZ3MoIm5scyIpCisJcHVibGljIHN0YXRpYyB2b2lkIHdyaXRlTDBUb0wxSGVhZGVyKCkgeworCQl3cml0ZSgiIyAiK0NOVFJZX0xWTDBfQ09ERSsiXzBfIitDTlRSWV9MVkwwX0NPREUrIl8xLnByb3BlcnRpZXMgIik7CisJCXdyaXRlKCIjLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioiKTsKKwkJd3JpdGUoIiMgKiBDb3B5cmlnaHQgKGMpIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuIik7CisJCXdyaXRlKCIjICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyIpOworCQl3cml0ZSgiIyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCIpOworCQl3cml0ZSgiIyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Iik7CisJCXdyaXRlKCIjICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwiKTsKKwkJd3JpdGUoIiMgKiIpOworCQl3cml0ZSgiIyAqIENvbnRyaWJ1dG9yczoiKTsKKwkJd3JpdGUoIiMgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIik7CisJCXdyaXRlKCIjICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovIik7CisJCXdyaXRlKCIiKTsKKwkJd3JpdGUoIiMgVGhpcyBpcyB0aGUgbmFtZSBvZiB0aGUgY2xhc3MgdGhhdCB3aWxsIGludGVycHJldCB0aGUgcmVzdCBvZiB0aGUgZmlsZSdzIGNvbnRlbnRzIik7CisJCXdyaXRlKCJSRUNPUkRfQ0xBU1NOQU1FID0gb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcm5hbC5kYXRhLnJlY29yZHMuUmVsYXRpdmVQaHlzaWNhbFJlbGF0aW9uc2hpcEdyYXBoUmVjb3JkIik7CisJCXdyaXRlKCIiKTsKKwkJd3JpdGUoIiMgVGhlIHRpdGxlIG9mIHRoZSByZWxhdGlvbnNoaXAiKTsKKwkJd3JpdGUoIlRJVExFID0gUGh5c2ljYWwgY29udGFpbm1lbnQgb2YgIitDTlRSWV9MVkwwX0NPREUrIiBsZXZlbCAoMSkgYnkgIitDTlRSWV9MVkwwX0NPREUrIiAoMCkiKTsKKwkJd3JpdGUoIiIpOworCQl3cml0ZSgiIyBUaGlzIGlzIHRoZSBkYXRlIHJhbmdlIGZvciB3aGljaCB0aGUgdmFsdWVzIGluIHRoaXMgZmlsZSBhcmUgdmFsaWQiKTsKKwkJd3JpdGUoIiMgU2VlIGh0dHA6Ly9wdXJsLm9yZy9kYy90ZXJtcy8xLjEvdmFsaWQiKTsKKwkJd3JpdGUoIlZBTElEID0gc3RhcnQ9MTkwMC0wMS0wMTsiKTsKKwkJd3JpdGUoIiIpOworCQl3cml0ZSgiIyBUaGlzIGlzIHRoZSBzb3VyY2Ugb2YgdGhlIGRhdGEiKTsKKwkJd3JpdGUoIlNPVVJDRSA9IGh0dHA6Ly93d3cuaWJtLmNvbSIpOworCQl3cml0ZSgiIik7CisJCXdyaXRlKCIjIElTTzMxNjYtMSBhbHBoYTMga2V5cyBhbmQgbGV2ZWxzIG9mIHJlbGF0aW9uc2hpcCIpOworCQl3cml0ZSgiSVNPS0VZXzAgPSAiK0NOVFJZX0xWTDBfQ09ERSsiIik7CisJCXdyaXRlKCJJU09LRVlfMF9MRVZFTCA9IDAiKTsKKwkJd3JpdGUoIklTT0tFWV8xID0gIitDTlRSWV9MVkwwX0NPREUrIiIpOworCQl3cml0ZSgiSVNPS0VZXzFfTEVWRUwgPSAxIik7CisJCXdyaXRlKCIiKTsKKwkJd3JpdGUoIiMgUmVjb3JkIE51bWJlciA9IEtleTEsIEtleTIsIHJlbGF0aW9uc2hpcCIpOworCQkKKwkJCisJCQorCX0KKwkKKwkKKwkvKioKKwkgKiAKKwkgKi8KKwlAU3VwcHJlc3NXYXJuaW5ncygibmxzIikKKwlwdWJsaWMgc3RhdGljIHZvaWQgd3JpdGVMMVRvTDJIZWFkZXIoKSB7CisJCXdyaXRlKCIjICIrQ05UUllfTFZMMF9DT0RFKyJfMV8iK0NOVFJZX0xWTDBfQ09ERSsiXzIucHJvcGVydGllcyAiKTsKKwkJd3JpdGUoIiMvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiIpOworCQl3cml0ZSgiIyAqIENvcHlyaWdodCAoYykgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4iKTsKKwkJd3JpdGUoIiMgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIik7CisJCXdyaXRlKCIjICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wIik7CisJCXdyaXRlKCIjICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQiKTsKKwkJd3JpdGUoIiMgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbCIpOworCQl3cml0ZSgiIyAqIik7CisJCXdyaXRlKCIjICogQ29udHJpYnV0b3JzOiIpOworCQl3cml0ZSgiIyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24iKTsKKwkJd3JpdGUoIiMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8iKTsKKwkJd3JpdGUoIiIpOworCQl3cml0ZSgiIyBUaGlzIGlzIHRoZSBuYW1lIG9mIHRoZSBjbGFzcyB0aGF0IHdpbGwgaW50ZXJwcmV0IHRoZSByZXN0IG9mIHRoZSBmaWxlJ3MgY29udGVudHMiKTsKKwkJd3JpdGUoIlJFQ09SRF9DTEFTU05BTUUgPSBvcmcuZWNsaXBzZS5zdGVtLmludGVybmFsLmRhdGEucmVjb3Jkcy5SZWxhdGl2ZVBoeXNpY2FsUmVsYXRpb25zaGlwR3JhcGhSZWNvcmQiKTsKKwkJd3JpdGUoIiIpOworCQl3cml0ZSgiIyBUaGUgdGl0bGUgb2YgdGhlIHJlbGF0aW9uc2hpcCIpOworCQl3cml0ZSgiVElUTEUgPSBQaHlzaWNhbCBjb250YWlubWVudCBvZiBKYXBhbiBsZXZlbCAoMikgYnkgIitDTlRSWV9MVkwwX0NPREUrIiAoMSkiKTsKKwkJd3JpdGUoIiIpOworCQl3cml0ZSgiIyBUaGlzIGlzIHRoZSBkYXRlIHJhbmdlIGZvciB3aGljaCB0aGUgdmFsdWVzIGluIHRoaXMgZmlsZSBhcmUgdmFsaWQiKTsKKwkJd3JpdGUoIiMgU2VlIGh0dHA6Ly9wdXJsLm9yZy9kYy90ZXJtcy8xLjEvdmFsaWQiKTsKKwkJd3JpdGUoIlZBTElEID0gc3RhcnQ9MTkwMC0wMS0wMTsiKTsKKwkJd3JpdGUoIiIpOworCQl3cml0ZSgiIyBUaGlzIGlzIHRoZSBzb3VyY2Ugb2YgdGhlIGRhdGEiKTsKKwkJd3JpdGUoIlNPVVJDRSA9IGh0dHA6Ly93d3cuaWJtLmNvbSIpOworCQl3cml0ZSgiIik7CisJCXdyaXRlKCIjIElTTzMxNjYtMSBhbHBoYTMga2V5cyBhbmQgbGV2ZWxzIG9mIHJlbGF0aW9uc2hpcCIpOworCQl3cml0ZSgiSVNPS0VZXzAgPSAiK0NOVFJZX0xWTDBfQ09ERSsiIik7CisJCXdyaXRlKCJJU09LRVlfMF9MRVZFTCA9IDEiKTsKKwkJd3JpdGUoIklTT0tFWV8xID0gIitDTlRSWV9MVkwwX0NPREUrIiIpOworCQl3cml0ZSgiSVNPS0VZXzFfTEVWRUwgPSAyIik7CisJCXdyaXRlKCIiKTsKKwkJd3JpdGUoIiMgUmVjb3JkIE51bWJlciA9IEtleTEsIEtleTIsIHJlbGF0aW9uc2hpcCIpOworCX0KKwkvKioKKwkgKiAKKwkgKiBAcmV0dXJuIGEgc2V0IG9mIGFsbCB0aGUgY291bnRyaWVzCisJICovCisJQFN1cHByZXNzV2FybmluZ3MoIm5scyIpCisJcHVibGljIHN0YXRpYyBTZXQgZ2V0QWxsQ291bnRyaWVzKCkgeworCQlIYXNoU2V0PFN0cmluZz4gYWxsID0gbmV3IEhhc2hTZXQ8U3RyaW5nPigpOworCQlpbnQgaWNvdW50ID0gMDsKKwkJU3RyaW5nIG5vZGVEaXIgPSBQQVRIKyJvcmcuZWNsaXBzZS5zdGVtLmludGVybmFsLmRhdGEiK3NlcCsicmVzb3VyY2VzIitzZXArImRhdGEiK3NlcCsiY291bnRyeSIrc2VwOworCQlVdGlsTG9nZ2VyLmxvZ0luZm9ybWF0aW9uKCJjb3VudHJ5IGRpciA9ICIrbm9kZURpcik7CisJCUZpbGUgbm9kZXMgPSBuZXcgRmlsZShub2RlRGlyKTsKKwkJaWYgKG5vZGVzLmV4aXN0cygpJiZub2Rlcy5pc0RpcmVjdG9yeSgpKSB7CisJCQkvL1V0aWxMb2dnZXIubG9nSW5mb3JtYXRpb24oImZvdW5kIHRvcCBsZXZlbCBkYXRhIGRpciIpOworCQkJRmlsZVtdIGNvbnRhaW5lZCA9IG5vZGVzLmxpc3RGaWxlcygpOworCQkJZm9yIChpbnQgaSA9IDA7IGkgPCBjb250YWluZWQubGVuZ3RoOyBpICsrKSB7CisJCQkJRmlsZSBmaWxlID0gY29udGFpbmVkW2ldOworCQkJCWlmIChmaWxlLmlzRGlyZWN0b3J5KCkpIHsKKwkJCQkJU3RyaW5nIGZpbGVOYW1lID0gZmlsZS5nZXROYW1lKCk7CisJCQkJCWlmKChmaWxlTmFtZS5sZW5ndGgoKT09MykmJighZXhjbHVkZVNldC5jb250YWlucyhmaWxlTmFtZSkpKSB7CisJCQkJCQlhbGwuYWRkKGZpbGVOYW1lKTsKKwkJCQkJCWljb3VudCArKzsKKwkJCQkJCS8vVXRpbExvZ2dlci5sb2dJbmZvcm1hdGlvbigiZm91bmQgIitmaWxlTmFtZSk7CisJCQkJCX0vLyBpZiBpdCdzIGEgY291bnRyeSBkaXIgbm90IG9uIGV4Y2x1ZGUgbGlzZQorCQkJCX0vLyBpZiBkaXJlY3RvcnkKKwkJCX0vLyBmb3IgYWxsIGNvbnRhaW5lZCBmaWxlcworCQkJVXRpbExvZ2dlci5sb2dJbmZvcm1hdGlvbigiIGZvdW5kICIraWNvdW50KyIgY291bnRyaWVzIik7CisJCX0gZWxzZSB7CisJCQlVdGlsTG9nZ2VyLmxvZ0luZm9ybWF0aW9uKCJ0b3AgbGV2ZWwgZGF0YSBkaXIgbm90IGZvdW5kIC0gY2hlY2sgc3RhdGljIHBhdGggaGFyZGNvZGVkIik7CisJCX0KKwkJCisJCXJldHVybiBhbGw7CisJfQorCQorCS8qKgorCSAqIEBwYXJhbSBjb3VudHJ5Q29kZQorCSAqLworCUBTdXBwcmVzc1dhcm5pbmdzKCJubHMiKQorCXB1YmxpYyBzdGF0aWMgdm9pZCBzZXROb2Rlc0ZpbGVzKFN0cmluZyBjb3VudHJ5Q29kZSkgeworCQkvLyBpbml0CisJCWxldmVsMU5vZGVzID0gbnVsbDsKKwkJbGV2ZWwyTm9kZXMgPSBudWxsOworCisJCS8vIGRpcmVjdG9yeSBvZiBub2RlIGRhdGEKKwkJU3RyaW5nIG5vZGVEaXIgPSBQQVRIKyJvcmcuZWNsaXBzZS5zdGVtLmludGVybmFsLmRhdGEiK3NlcCsicmVzb3VyY2VzIitzZXArImRhdGEiK3NlcCsiY291bnRyeSIrc2VwK2NvdW50cnlDb2RlOworCQlGaWxlIGRpciA9IG5ldyBGaWxlKG5vZGVEaXIpOworCQkKKwkJaWYgKGRpci5leGlzdHMoKSYmZGlyLmlzRGlyZWN0b3J5KCkpIHsKKwkJCS8vVXRpbExvZ2dlci5sb2dJbmZvcm1hdGlvbigiZm91bmQgdG9wIGxldmVsIGRhdGEgZGlyIik7CisJCQlGaWxlW10gZmlsZXMgPSBkaXIubGlzdEZpbGVzKCk7CisJCQlmb3IgKGludCBpID0gMDsgaSA8IGZpbGVzLmxlbmd0aDsgaSArKykgeworCQkJCUZpbGUgZmlsZSA9IGZpbGVzW2ldOworCQkJCWlmIChmaWxlLmlzRmlsZSgpKSB7CisJCQkJCWlmKGZpbGUuZ2V0TmFtZSgpLmluZGV4T2YoIl8xX25vZGUucHJvcGVydGllcyIpID49IDEpIHsKKwkJCQkJCWxldmVsMU5vZGVzID0gZmlsZTsKKwkJCQkJfQorCQkJCQlpZihmaWxlLmdldE5hbWUoKS5pbmRleE9mKCJfMl9ub2RlLnByb3BlcnRpZXMiKSA+PSAxKSB7CisJCQkJCQlsZXZlbDJOb2RlcyA9IGZpbGU7CisJCQkJCX0KKwkJCQl9CisJCQkJCisJCQl9Ly8gZm9yIGkgZmlsZXMgY29udGFpbmVkCisJCX0vLyBpZiBkaXJlY3RvcnkKKwkJcmV0dXJuOworCX0KKwkKKwkKKwkKKwkvKioKKwkgKiBAcGFyYW0gZmlsZQorCSAqIEByZXR1cm4gZm9vCisJICovCisJQFN1cHByZXNzV2FybmluZ3MoIm5scyIpCisJcHVibGljIHN0YXRpYyBTZXQ8U3RyaW5nPiBnZXROb2Rlc0luRmlsZShGaWxlIGZpbGUgKSB7CisJCUhhc2hTZXQ8U3RyaW5nPiBub2RlU2V0ID0gbmV3IEhhc2hTZXQ8U3RyaW5nPigpOworCQlpZiAoZmlsZT09bnVsbCkgcmV0dXJuIG5vZGVTZXQ7CisJCS8vIHRoZSBkYXRhIHN0YXJ0cyBhZnRlciB0aGlzIHJlcXVpcmVkIHN0cmluZy4gbXVzdCBoYXZlIGJvdGgKKwkJZmluYWwgU3RyaW5nIHN0YXJ0U3RyaW5nMSA9ICJTUEFUSUFMX1VSSSI7CisJCWZpbmFsIFN0cmluZyBzdGFydFN0cmluZzIgPSAicGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9nZW8vY291bnRyeS8iOworCQlGaWxlSW5wdXRTdHJlYW0gZmlzOworCQlCdWZmZXJlZFJlYWRlciBkID0gbnVsbDsKKwkJdHJ5IHsKKwkJCWZpcyA9IG5ldyBGaWxlSW5wdXRTdHJlYW0oZmlsZSk7IAorCQkJZCA9IG5ldyBCdWZmZXJlZFJlYWRlcihuZXcgSW5wdXRTdHJlYW1SZWFkZXIoZmlzKSk7CisJCX0gY2F0Y2goRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgCVV0aWxMb2dnZXIubG9nSW5mb3JtYXRpb24oImVycm9yIG9wZW5pbmcgc3RyZWFtIGZvciBmaWxlICIrZmlsZS5nZXROYW1lKCkpOworICAgICAgICAJVXRpbExvZ2dlci5sb2dJbmZvcm1hdGlvbigiIGVycm9yICIrZS5nZXRNZXNzYWdlKCkpOworICAgICAgICAJZS5wcmludFN0YWNrVHJhY2UoKTsKKyAgICAgICAgCVN5c3RlbS5leGl0KDEpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBTdHJpbmcgcmVjb3JkID0gIiI7CisgICAgICAgIGJvb2xlYW4gc3RhcnQgPSBmYWxzZTsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgd2hpbGUgKCAocmVjb3JkPWQucmVhZExpbmUoKSkgIT0gbnVsbCApIHsgCisgICAgICAgICAgIC8vIGdldCBwYXN0IHRoZSBoZWFkZXIgYW5kIG1ha2Ugc3VyZSB3ZSBmb3VuZAorICAgICAgICAgICAvLyB0aGUgcmVxdWlyZWQgdGFncyBvZiBhIHZhbGlkIG5vZGUgZmlsZQorICAgICAgICAgICAvLyBVdGlsTG9nZ2VyLmxvZ0luZm9ybWF0aW9uKCAibGluZT0gICIgKyByZWNvcmQpOworICAgICAgICAgIAorICAgICAgICAgICAKKyAgICAgICAgICAgaWYgKHN0YXJ0KSB7CisgICAgICAgIAkgICBpbnQgY29tbWVudCA9IHJlY29yZC5pbmRleE9mKCIjIik7CisgICAgICAgICAgICAgICAgaWYoY29tbWVudCA8IDApIHsKKyAgICAgICAgICAgICAgICAJLy8gbm90IGEgY29tbWVudAorICAgICAgICAgICAgICAgIAlpbnQgZXFDaHIgPSByZWNvcmQuaW5kZXhPZigiPSIpOworICAgICAgICAgICAgICAgIAlpZiAoZXFDaHIgPj0gMSkgeworICAgICAgICAgICAgICAgIAkJLy8gdGhpcyBpcyBhIG5vZGUKKyAgICAgICAgICAgICAgICAJCVN0cmluZyBwYWRkZWQgPSByZWNvcmQuc3Vic3RyaW5nKDAsZXFDaHIpOworICAgICAgICAgICAgICAgIAkJU3RyaW5nIG5vZGUgPSBwYWRkZWQudHJpbSgpOworICAgICAgICAgICAgICAgIAkJCisgICAgICAgICAgICAgICAgCQkvLyoqKioqKioqKioqKgorICAgICAgICAgICAgICAgIAkJLy9VdGlsTG9nZ2VyLmxvZ0luZm9ybWF0aW9uKCJmb3VuZCBrZXk9IFsiK25vZGUrIl0iKTsKKyAgICAgICAgICAgICAgICAJCS8vKioqKioqKioqKioqCisgICAgICAgICAgICAgICAgCQkKKyAgICAgICAgICAgICAgICAJCW5vZGVTZXQuYWRkKG5vZGUpOworICAgICAgICAgICAgICAgIAl9Ly8gaWYgdGhpcyBpcyBhIG5vZGUKKyAgICAgICAgICAgICAgICB9Ly8gbm90IGEgY29tbWVudAorICAgICAgICAgICB9IC8vIGlmIHN0YXJ0IHN0cmluZyBoYXMgYmVlbiBmb3VuZAorICAgICAgICAgICBpZiAoKHJlY29yZC5pbmRleE9mKHN0YXJ0U3RyaW5nMSk+PTApJiYocmVjb3JkLmluZGV4T2Yoc3RhcnRTdHJpbmcyKT49MCkpIHsKKyAgICAgICAgCSAgIHN0YXJ0ID0gdHJ1ZTsKKyAgICAgICAgICAgfQorICAgICAgICB9Ly8gd2hpbGUKKyAgICAgICAgfSBjYXRjaChFeGNlcHRpb24gZSkgeworICAgICAgICAJVXRpbExvZ2dlci5sb2dJbmZvcm1hdGlvbigiZXJyb3IgcmVhZGluZyBmaWxlICIrZmlsZS5nZXROYW1lKCkpOworICAgICAgICAJVXRpbExvZ2dlci5sb2dJbmZvcm1hdGlvbigiIGVycm9yICIrZS5nZXRNZXNzYWdlKCkpOworICAgICAgICAJZS5wcmludFN0YWNrVHJhY2UoKTsKKyAgICAgICAgCVN5c3RlbS5leGl0KDEpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAoIXN0YXJ0KSB7CisgICAgICAgIAlVdGlsTG9nZ2VyLmxvZ0luZm9ybWF0aW9uKCIgZmlsZSAiK2ZpbGUuZ2V0TmFtZSgpKyIgaGFzIG5vIHZhbGlkIGRhdGEiKTsKKyAgICAgICAgCVN5c3RlbS5leGl0KDEpOworICAgICAgICB9CisJCQorCQlyZXR1cm4gbm9kZVNldDsKKwl9Ly8gZ2V0IE5vZGVzIGluIEZpbGUKKwkKKwkKKwkKKwkKK30vLyBDbGFzcyBDb250YWlubWVudFJlbGF0aW9uc2hpcEZpbmRlciAKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3NyYy9vcmcvZWNsaXBzZS9zdGVtL3V0aWxpdHkvZ2VuZXJhdG9ycy9EYXRhVHlwZXMuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3NyYy9vcmcvZWNsaXBzZS9zdGVtL3V0aWxpdHkvZ2VuZXJhdG9ycy9EYXRhVHlwZXMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNWY5NGRkCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdXRpbGl0eS9nZW5lcmF0b3JzL0RhdGFUeXBlcy5qYXZhCkBAIC0wLDAgKzEsNDIgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5LmdlbmVyYXRvcnM7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioKKyAqIFNURU0gSUkgRGF0YSBNaWdyYXRpb24vR2VuZXJhdGlvbiBVdGlsaXRpZXMgLS0gSW5zdGFuY2VzIG9mIHRoaXMgdXRpbGl0eQorICogY2xhc3MgaG9sZCBzeW1ib2xpYyBjb25zdGFudHMuCisgKiAKKyAqLworCitwdWJsaWMgYWJzdHJhY3QgY2xhc3MgRGF0YVR5cGVzIHsKKworCS8qKgorCSAqIFN5bWJvbGljIGNvbnN0YW50cyBkZXNjcmliaW5nIHRoZSBjdXJyZW50IHR5cGUgb2YgZGF0YSB3ZSBhcmUgcHJvY2Vzc2luZy4KKwkgKiAKKwkgKi8KKworCS8qKgorCSAqIERhdGEgYXQgYWRtaW4gMCBsZXZlbAorCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IExFVkVMXzAgPSAwOworCisJLyoqCisJICogRGF0YSBhdCBhZG1pbiAxIGxldmVsCisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgTEVWRUxfMSA9IDE7CisKKwkvKioKKwkgKiBEYXRhIGF0IGFkbWluIDIgbGV2ZWwKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIGludCBMRVZFTF8yID0gMjsKKworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3NyYy9vcmcvZWNsaXBzZS9zdGVtL3V0aWxpdHkvZ2VuZXJhdG9ycy9EaWZmTG9nRmlsZS5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdXRpbGl0eS9nZW5lcmF0b3JzL0RpZmZMb2dGaWxlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDk3OWU5MgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3NyYy9vcmcvZWNsaXBzZS9zdGVtL3V0aWxpdHkvZ2VuZXJhdG9ycy9EaWZmTG9nRmlsZS5qYXZhCkBAIC0wLDAgKzEsMzE2IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS5nZW5lcmF0b3JzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA5IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGphdmEuaW8uQnVmZmVyZWRSZWFkZXI7CitpbXBvcnQgamF2YS5pby5GaWxlOworaW1wb3J0IGphdmEuaW8uRmlsZVJlYWRlcjsKK2ltcG9ydCBqYXZhLmlvLkZpbGVXcml0ZXI7CitpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuTWFwOworaW1wb3J0IGphdmEudXRpbC5TdHJpbmdUb2tlbml6ZXI7CisKKworLyoqCisgKiBEZXNwaXRlIHRoZSBuYW1lLCBEaWZmTG9nRmlsZSBjb21iaW5lcyB0d28gbG9nIHN0YXRlcyBpbiB0d28gZGlyZWN0b3JpZXMgdXNpbmcgYW55IGFyaXRobWV0aWMgb3BlcmF0aW9uIGZyb20gKywtLC8gb3IgKi4gVGhlIGxvZyBmaWxlcyBhcmUgZXhwZWN0ZWQgdG8gY29udGFpbiBhbiBpZGVudGljYWwgc2V0IG9mIHJlZ2lvbnMgYW5kIHJvd3MuCisgKiBUaGUgcmVzdWx0IGNhbiBvcHRpb25hbGx5IGJlIG5vcm1hbGl6ZWQgYnkgZGl2aWRpbmcgYnkgdGhlIHRvdGFsIHBvcHVsYXRpb24gY291bnQgKGFzc3VtZWQgdG8gYmUgdGhlIHNhbWUgaW4gYm90aCBsb2cgZmlsZXMpCisgKi8KKworcHVibGljIGNsYXNzIERpZmZMb2dGaWxlIHsKKworCXN0YXRpYyBTdHJpbmcgSVRFUkFUSU9OX0tFWSA9ICJpdGVyYXRpb24iOworCXN0YXRpYyBTdHJpbmcgVElNRV9LRVkgPSAidGltZSI7CisJCisJc3RhdGljIFN0cmluZyBMUyA9IFN5c3RlbS5nZXRQcm9wZXJ0eSgibGluZS5zZXBhcmF0b3IiKTsgLy8kTk9OLU5MUy0xJAorCQorCQorCQorCXByaXZhdGUgc3RhdGljIE1hcDxTdHJpbmcsIE1hcDxTaG9ydCwgTGlzdDxTdHJpbmc+Pj4gaGVhZGVyczsKKworCQorCXByaXZhdGUgc3RhdGljIHNob3J0IE5VTV9MRUFEX0NPTFMgPSAyOworCQorCS8qKgorCSAqIAorCSAqIEBwYXJhbSBhcmdzCisJICovCisJQFN1cHByZXNzV2FybmluZ3MoIm5scyIpCisJcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nIFtdIGFyZ3MpIHsKKwkJaWYoYXJncy5sZW5ndGggPCA2KSB7CisJCQlTeXN0ZW0uZXJyLnByaW50bG4oIlVzYWdlOiBEaWZmTG9nRmlsZSA8bG9nIHBhdGggMT4gPGxvZyBwYXRoIDI+IDxzdGF0ZT4gPGFyaXRobWV0aWMgb3BlcmF0aW9uICgrLC0sLywqKT4gPG91dHB1dCBwYXRoPiIpOyAvLyROT04tTkxTLTEkCisJCQlTeXN0ZW0uZXhpdCgtMSk7CisJCX0KKwkJCisJCXRyeSB7CisJCQlTdHJpbmcgaW5wdXREaXIxID0gYXJnc1swXTsKKwkJCVN0cmluZyBpbnB1dERpcjIgPSBhcmdzWzFdOworCQkJU3RyaW5nIHN0YXRlID0gYXJnc1syXTsKKwkJCVN0cmluZyBvcCA9IGFyZ3NbM107CisJCQlTdHJpbmcgb3V0RGlyID0gYXJnc1s0XTsKKwkJCWJvb2xlYW4gbm9ybWFsaXplID0gQm9vbGVhbi5wYXJzZUJvb2xlYW4oYXJnc1s1XSk7CisJCQloZWFkZXJzID0gcmVhZEhlYWRlcnMoaW5wdXREaXIxKTsKKwkJCQorCQkJLy9NYXA8U3RyaW5nLCBNYXA8U2hvcnQsIExpc3Q8TGlzdDxTdHJpbmc+Pj4+IGRhdGExID1yZWFkTG9nRmlsZXMoaW5wdXREaXIxKTsKKwkJCS8vTWFwPFN0cmluZywgTWFwPFNob3J0LCBMaXN0PExpc3Q8U3RyaW5nPj4+PiBkYXRhMiA9cmVhZExvZ0ZpbGVzKGlucHV0RGlyMik7CisJCQlkaWZmRmlsZXMoaW5wdXREaXIxLCBpbnB1dERpcjIsIHN0YXRlLCBvcCwgb3V0RGlyLCBub3JtYWxpemUpOworCQkJCQorCQkJU3lzdGVtLm91dC5wcmludGxuKCJUb3RhbCBydW5uaW5nIHN1bSBvZiAiK3N0YXRlKyI6ICIrcnVubmluZ19zdW0pOworCQl9IGNhdGNoKEV4Y2VwdGlvbiBlKXsKKwkJCWUucHJpbnRTdGFja1RyYWNlKCk7CisJCX0KKwl9CisJCisJcHVibGljIHN0YXRpYyAgTWFwPFN0cmluZywgTWFwPFNob3J0LCBMaXN0PFN0cmluZz4+PiByZWFkSGVhZGVycyhTdHJpbmcgcmVmRGlyKSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJCisJCSBIYXNoTWFwPFN0cmluZywgTWFwPFNob3J0LCBMaXN0PFN0cmluZz4+PnJlc3VsdCA9IG5ldyAgSGFzaE1hcDxTdHJpbmcsIE1hcDxTaG9ydCwgTGlzdDxTdHJpbmc+Pj4oKTsKKwkJIAorCQlGaWxlIGYgPSBuZXcgRmlsZShyZWZEaXIpOworICAgICAgICAKKwkJaWYoIWYuZXhpc3RzKCkgfHwgIWYuaXNEaXJlY3RvcnkoKSApIHsKKwkJCVN5c3RlbS5lcnIucHJpbnRsbigiRXJyb3IgIityZWZEaXIrIiBkb2VzIG5vdCBleGlzdCBvciBpcyBub3QgYSBkaXJlY3RvcnkiKTsKKwkJCVN5c3RlbS5leGl0KC0xKTsKKwkJfQorCQkKKwkJZm9yKFN0cmluZyBmaWxlOmYubGlzdCgpKSB7CisJCQlTdHJpbmcgcGF0aCA9IGYuZ2V0QWJzb2x1dGVQYXRoKCkrRmlsZS5zZXBhcmF0b3IrZmlsZTsKKwkJCWlmKGYuaXNIaWRkZW4oKSB8fCBmaWxlLnN0YXJ0c1dpdGgoIi4iKSkgY29udGludWU7IC8vIGhpZGRlbiBmaWxlCisJCQlpZighZmlsZS5jb250YWlucygiXyIpKSBjb250aW51ZTsgLy8gbm90IGEgbG9nZ2VkIENTViBmaWxlCisJCQkKKwkJCWludCBpbmQgPSBmaWxlLmluZGV4T2YoIl8iKTsKKwkJCQorCQkJU3RyaW5nIHN0YXRlID0gZmlsZS5zdWJzdHJpbmcoMCwgaW5kKTsKKwkJCVN0cmluZyBzbGV2ZWwgPSBmaWxlLnN1YnN0cmluZyhpbmQrMSwgaW5kKzIpOworCQkKKwkJCXNob3J0IGFkbWluTGV2ZWwgPSBTaG9ydC5wYXJzZVNob3J0KHNsZXZlbCk7CisJCQkvLyBSZWFkIGhlYWRlciBsaW5lCisJCQlCdWZmZXJlZFJlYWRlciByZWFkZXIgPSBuZXcgQnVmZmVyZWRSZWFkZXIobmV3IEZpbGVSZWFkZXIocGF0aCkpOworCQkJU3RyaW5nIGJ1ZmZlcjsKKwkJCWJ1ZmZlciA9IHJlYWRlci5yZWFkTGluZSgpOyAKKwkJCQkJCQkKKwkJCVN0cmluZyBzOworCQkJaWYoYnVmZmVyICE9IG51bGwpIHsKKwkJCQlTdHJpbmcgW10gdG9rcyA9IGJ1ZmZlci5zcGxpdCgiLCIpOworCQkJLy8JU3RyaW5nVG9rZW5pemVyIHN0b2sgPSBuZXcgU3RyaW5nVG9rZW5pemVyKGJ1ZmZlciwiLCIpOy8vJE5PTi1OTFMtMSQKKwkJCQkJCisJCQkJTWFwPFNob3J0LCBMaXN0PFN0cmluZz4+IGFkbWluTWFwOworCQkJCQorCQkJCWlmKCFyZXN1bHQuY29udGFpbnNLZXkoc3RhdGUpKSAgeworCQkJCQlhZG1pbk1hcCA9IG5ldyBIYXNoTWFwPFNob3J0LCBMaXN0PFN0cmluZz4+KCk7CisJCQkJCXJlc3VsdC5wdXQoc3RhdGUsIGFkbWluTWFwKTsKKwkJCQl9IGVsc2UgYWRtaW5NYXAgPSByZXN1bHQuZ2V0KHN0YXRlKTsKKwkJCQkKKwkJCQlMaXN0PFN0cmluZz5oZWFkZXIgPSBudWxsOworCQkJCWlmKCFhZG1pbk1hcC5jb250YWluc0tleShhZG1pbkxldmVsKSkgeworCQkJCQloZWFkZXIgPSBuZXcgQXJyYXlMaXN0PFN0cmluZz4oKTsKKwkJCQkJYWRtaW5NYXAucHV0KGFkbWluTGV2ZWwsIGhlYWRlcik7CisJCQkJfQorCQkJCQkKKwkJCQlmb3IoaW50IGk9MDtpPHRva3MubGVuZ3RoOysraSkgIAorCQkJCQloZWFkZXIuYWRkKHRva3NbaV0pOworCQkJfQkJCisJCX0KKwkJcmV0dXJuIHJlc3VsdDsKKwl9CisJCQorCisJLyoKKwlwcml2YXRlIHN0YXRpYyBNYXA8U3RyaW5nLCBNYXA8U2hvcnQsIExpc3Q8TGlzdDxTdHJpbmc+Pj4+IHJlYWRMb2dGaWxlcyhTdHJpbmcgbG9nRGlyKSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJCisJCUhhc2hNYXA8U3RyaW5nLCBNYXA8U2hvcnQsIExpc3Q8TGlzdDxTdHJpbmc+Pj4+IHJlc3VsdCA9IG5ldyBIYXNoTWFwPFN0cmluZywgTWFwPFNob3J0LCBMaXN0PExpc3Q8U3RyaW5nPj4+PigpOworCQkKKwkJRmlsZSBmID0gbmV3IEZpbGUobG9nRGlyKTsKKwkgICAgICAgIAorCQlpZighZi5leGlzdHMoKSB8fCAhZi5pc0RpcmVjdG9yeSgpICkgeworCQkJU3lzdGVtLmVyci5wcmludGxuKCJFcnJvciAiK2xvZ0RpcisiIGRvZXMgbm90IGV4aXN0IG9yIGlzIG5vdCBhIGRpcmVjdG9yeSIpOworCQkJU3lzdGVtLmV4aXQoLTEpOworCQl9CisJCQkKKwkJZm9yKFN0cmluZyBmaWxlOmYubGlzdCgpKSB7CisJCQlTdHJpbmcgcGF0aCA9IGYuZ2V0QWJzb2x1dGVQYXRoKCkrRmlsZS5zZXBhcmF0b3IrZmlsZTsKK1N5c3RlbS5vdXQucHJpbnRsbigiUmVhZGluZyAiK3BhdGgpOworCQkJaWYoZi5pc0hpZGRlbigpIHx8IGZpbGUuc3RhcnRzV2l0aCgiLiIpKSBjb250aW51ZTsgLy8gaGlkZGVuIGZpbGUKKwkJCWlmKCFmaWxlLmNvbnRhaW5zKCJfIikpIGNvbnRpbnVlOyAvLyBub3QgYSBsb2dnZWQgQ1NWIGZpbGUKKwkJCQkKKwkJCWludCBpbmQgPSBmaWxlLmluZGV4T2YoIl8iKTsKKwkJCVN0cmluZyBzdGF0ZSA9IGZpbGUuc3Vic3RyaW5nKDAsIGluZCk7CisJCQlTdHJpbmcgc2xldmVsID0gZmlsZS5zdWJzdHJpbmcoaW5kKzEsIGluZCsyKTsKKwkJCQorCQkJc2hvcnQgYWRtaW5MZXZlbCA9IFNob3J0LnBhcnNlU2hvcnQoc2xldmVsKTsKKwkJCQorCQkJLy8gUmVhZCBoZWFkZXIgbGluZQorCQkJQnVmZmVyZWRSZWFkZXIgcmVhZGVyID0gbmV3IEJ1ZmZlcmVkUmVhZGVyKG5ldyBGaWxlUmVhZGVyKHBhdGgpKTsKKwkJCQorCQkJU3RyaW5nIGJ1ZmZlcjsKKwkJCWJ1ZmZlciA9IHJlYWRlci5yZWFkTGluZSgpOyAvLyBoZWFkZXIKKwkJCVN0cmluZyBzOworCQkJCisJCisJCQlidWZmZXIgPSByZWFkZXIucmVhZExpbmUoKTsgLy8gRmlyc3QgZGF0YQorCQkJd2hpbGUoYnVmZmVyICE9IG51bGwpIHsKKwkJCQlMaXN0PFN0cmluZz4gcm93ID0gbmV3IEFycmF5TGlzdDxTdHJpbmc+KCk7CisJCQkJU3RyaW5nVG9rZW5pemVyIHN0b2sgPSBuZXcgU3RyaW5nVG9rZW5pemVyKGJ1ZmZlciwiLCIpOy8vJE5PTi1OTFMtMSQKKwkJCQlpbnQgY29sTnIgPSAwOworCQkJCXdoaWxlKHN0b2suaGFzTW9yZVRva2VucygpKSB7CisJCQkJCVN0cmluZyB0b2sgPSBzdG9rLm5leHRUb2tlbigpOworCQkJCQlyb3cuYWRkKHRvayk7CisJCQkJfQorCQkJCQorCQkJCU1hcDxTaG9ydCwgTGlzdDxMaXN0PFN0cmluZz4+PiBhZG1pbk1hcDsKKwkJCQlpZighcmVzdWx0LmNvbnRhaW5zS2V5KHN0YXRlKSkgIHsKKwkJCQkJYWRtaW5NYXAgPSBuZXcgSGFzaE1hcDxTaG9ydCwgTGlzdDxMaXN0PFN0cmluZz4+PigpOworCQkJCQlyZXN1bHQucHV0KHN0YXRlLCBhZG1pbk1hcCk7CisJCQkJfSBlbHNlIGFkbWluTWFwID0gcmVzdWx0LmdldChzdGF0ZSk7CisJCQkJCisJCQkJTGlzdDxMaXN0PFN0cmluZz4+ZGF0YSA9IG51bGw7CisJCQkJaWYoIWFkbWluTWFwLmNvbnRhaW5zS2V5KGFkbWluTGV2ZWwpKSB7CisJCQkJCWRhdGEgPSBuZXcgQXJyYXlMaXN0PExpc3Q8U3RyaW5nPj4oKTsKKwkJCQkJYWRtaW5NYXAucHV0KGFkbWluTGV2ZWwsIGRhdGEpOworCQkJCX0gZWxzZSBkYXRhID0gYWRtaW5NYXAuZ2V0KGFkbWluTGV2ZWwpOworCisJCQkJZGF0YS5hZGQocm93KTsKKwkJCQlidWZmZXIgPSByZWFkZXIucmVhZExpbmUoKTsgCisJCQl9CisJCQorCQkJCisJCQkKKwkJCXJlYWRlci5jbG9zZSgpOworCQl9CisJCXJldHVybiByZXN1bHQ7CisJfQorCSovCisJCisJcHJpdmF0ZSBzdGF0aWMgZG91YmxlIHJ1bm5pbmdfc3VtID0gMC4wOworCQorCUBTdXBwcmVzc1dhcm5pbmdzKCJubHMiKQorCXB1YmxpYyBzdGF0aWMgdm9pZCBkaWZmRmlsZXMoU3RyaW5nIGluMSwgU3RyaW5nIGluMiwgU3RyaW5nIHN0LCBTdHJpbmcgb3AsIFN0cmluZyBvdXQsIGJvb2xlYW4gbm9ybWFsaXplKSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJRmlsZSBmID0gbmV3IEZpbGUoaW4xKTsKKyAgICAgICAgCisJCWlmKCFmLmV4aXN0cygpIHx8ICFmLmlzRGlyZWN0b3J5KCkgKSB7CisJCQlTeXN0ZW0uZXJyLnByaW50bG4oIkVycm9yICIraW4xKyIgZG9lcyBub3QgZXhpc3Qgb3IgaXMgbm90IGEgZGlyZWN0b3J5Iik7CisJCQlTeXN0ZW0uZXhpdCgtMSk7CisJCX0KKwkJCQorCQlmb3IoU3RyaW5nIGZpbGU6Zi5saXN0KCkpIHsKKwkJCVN0cmluZyBwYXRoID0gZi5nZXRBYnNvbHV0ZVBhdGgoKStGaWxlLnNlcGFyYXRvcitmaWxlOworU3lzdGVtLm91dC5wcmludGxuKCJSZWFkaW5nICIrcGF0aCk7CisJCQlpZihmLmlzSGlkZGVuKCkgfHwgZmlsZS5zdGFydHNXaXRoKCIuIikpIGNvbnRpbnVlOyAvLyBoaWRkZW4gZmlsZQorCQkJaWYoIWZpbGUuY29udGFpbnMoIl8iKSkgY29udGludWU7IC8vIG5vdCBhIGxvZ2dlZCBDU1YgZmlsZQorCQkJCQorCQkJaW50IGluZCA9IGZpbGUuaW5kZXhPZigiXyIpOworCQkJU3RyaW5nIGZpbGVzdGF0ZSA9IGZpbGUuc3Vic3RyaW5nKDAsIGluZCk7CisJCQlpZighZmlsZXN0YXRlLmVxdWFscyhzdCkpCisJCQkJY29udGludWU7CisJCQkKKwkJCVN0cmluZyBzbGV2ZWwgPSBmaWxlLnN1YnN0cmluZyhpbmQrMSwgaW5kKzIpOworCQkJCisJCQlzaG9ydCBhZG1pbkxldmVsID0gU2hvcnQucGFyc2VTaG9ydChzbGV2ZWwpOworCQkJCisJCQkvLyBSZWFkIGhlYWRlciBsaW5lCisJCQlCdWZmZXJlZFJlYWRlciByZWFkZXIgPSBuZXcgQnVmZmVyZWRSZWFkZXIobmV3IEZpbGVSZWFkZXIocGF0aCkpOworCQkJCisJCQlTdHJpbmcgYnVmZmVyOworCQkJYnVmZmVyID0gcmVhZGVyLnJlYWRMaW5lKCk7IC8vIGhlYWRlcgorCQkJYnVmZmVyID0gcmVhZGVyLnJlYWRMaW5lKCk7IC8vIGRhdGEKKwkJCUxpc3Q8U3RyaW5nPmRhdGExID0gZ2V0VG9rZW5MaXN0KGJ1ZmZlcik7CisJCQlTdHJpbmcgczsKKwkJCQorCQkJU3RyaW5nIHBhdGgyID0gaW4yK0ZpbGUuc2VwYXJhdG9yK2ZpbGVzdGF0ZSsiXyIrc2xldmVsKyIuY3N2IjsKKwkJCUJ1ZmZlcmVkUmVhZGVyIHJlYWRlcjIgID0gbmV3IEJ1ZmZlcmVkUmVhZGVyKG5ldyBGaWxlUmVhZGVyKHBhdGgyKSk7CisJCQlTdHJpbmcgYnVmZmVyMiA9IHJlYWRlcjIucmVhZExpbmUoKTsgLy8gaGVhZGVyCisJCQlidWZmZXIyID0gcmVhZGVyMi5yZWFkTGluZSgpOyAvLyBkYXRhCisJCQlMaXN0PFN0cmluZz5kYXRhMiA9IGdldFRva2VuTGlzdChidWZmZXIyKTsKKworCQkJQnVmZmVyZWRSZWFkZXIgbnJlYWRlciA9IG51bGw7CisJCQlMaXN0PFN0cmluZz4gbmRhdGE9bnVsbDsKKwkJCWlmKG5vcm1hbGl6ZSkgeworCQkJCVN0cmluZyBwcGF0aCA9IGluMStGaWxlLnNlcGFyYXRvcisiUG9wdWxhdGlvbiBDb3VudF8iK3NsZXZlbCsiLmNzdiI7CisJCQkJbnJlYWRlciAgPSBuZXcgQnVmZmVyZWRSZWFkZXIobmV3IEZpbGVSZWFkZXIocHBhdGgpKTsKKwkJCQlTdHJpbmcgYnVmZmVyMyA9IG5yZWFkZXIucmVhZExpbmUoKTsgLy8gaGVhZGVyCisJCQkJYnVmZmVyMyA9IG5yZWFkZXIucmVhZExpbmUoKTsgLy8gZGF0YQorCQkJCW5kYXRhID0gZ2V0VG9rZW5MaXN0KGJ1ZmZlcjMpOworCQkJfQorCQkJCisJCQlGaWxlIG9EaXIgPSBuZXcgRmlsZShvdXQpOworCQkJaWYoIW9EaXIuZXhpc3RzKCkpCisJCQkJb0Rpci5ta2RpcnMoKTsKKwkJCQorCQkJU3RyaW5nIGZuYW1lID0gb3V0K0ZpbGUuc2VwYXJhdG9yK2ZpbGVzdGF0ZSsiXyIrYWRtaW5MZXZlbCsiLmNzdiI7CisJCQlGaWxlV3JpdGVyIGZ3ID0gbmV3IEZpbGVXcml0ZXIoZm5hbWUpOworCQkJCQorCQkJLy8gV3JpdGUgaGVhZGVyCisJCQlmdy53cml0ZShJVEVSQVRJT05fS0VZKTsKKwkJCWZ3LndyaXRlKCIsIik7CisJCQlmdy53cml0ZShUSU1FX0tFWSk7CisJCQkJCisJCQlmb3IoU3RyaW5nIGxvYzpoZWFkZXJzLmdldChmaWxlc3RhdGUpLmdldChhZG1pbkxldmVsKSkgewkKKwkJCQlpZihsb2MuZXF1YWxzKElURVJBVElPTl9LRVkpIHx8IGxvYy5lcXVhbHMoVElNRV9LRVkpKSBjb250aW51ZTsKKwkJCQlmdy53cml0ZSgiLCIpOworCQkJCWZ3LndyaXRlKGxvYyk7CisJCQl9CisJCQlmdy53cml0ZSgiXG4iKTsKKwkJCQkKKwkJCS8vIFdyaXRlIGRhdGEKKwkJCXdoaWxlKGRhdGExICE9IG51bGwgJiYgZGF0YTEuc2l6ZSgpID4gMCkgeyAvLyBGaXJzdCBsb2cgZmlsZSBjb250cm9scyB0aGUgbnVtYmVyIG9mIHJvd3MKKwkJCQlmdy53cml0ZShkYXRhMS5nZXQoMCkpOyAvLyBpdGVyYXRpb24KKwkJCQlmdy53cml0ZSgiLCIpOworCQkJCWZ3LndyaXRlKGRhdGEyLmdldCgxKSk7IC8vIHRpbWUKKwkJCQkJCisJCQkJaW50IGNvbCA9IDA7CisJCQkJZm9yKGludCBpPU5VTV9MRUFEX0NPTFM7aTxkYXRhMS5zaXplKCk7KytpKSB7CisJCQkJCVN0cmluZyBkdDEgPSBkYXRhMS5nZXQoaSk7CisJCQkJCVN0cmluZyBkdDIgPSBkYXRhMi5nZXQoaSk7CisJCQkJCVN0cmluZyBudCA9ICIxIjsKKwkJCQkJaWYobm9ybWFsaXplKSBudCA9IG5kYXRhLmdldChpKTsKKwkJCQkJCisJCQkJCWRvdWJsZSBkMSA9IERvdWJsZS5wYXJzZURvdWJsZShkdDEpOworCQkJCQlkb3VibGUgZDIgPSBEb3VibGUucGFyc2VEb3VibGUoZHQyKTsKKwkJCQkJZG91YmxlIG4gPSBEb3VibGUucGFyc2VEb3VibGUobnQpOworCQkJCQkKKwkJCQkJcnVubmluZ19zdW0gKz0gZDE7CisJCQkJCWZ3LndyaXRlKCIsIik7CisJCQkKKwkJCQkJZG91YmxlIGQgPSAwLjA7CisJCQkJCWlmKG9wLmVxdWFscygiKyIpKSBkID0gZDErZDI7CisJCQkJCWVsc2UgaWYob3AuZXF1YWxzKCItIikpIGQgPSBkMS1kMjsKKwkJCQkJZWxzZSBpZihvcC5lcXVhbHMoIi8iKSkgeworCQkJCQkJaWYoZDIgPT0gMCkgZCA9IERvdWJsZS5QT1NJVElWRV9JTkZJTklUWTsKKwkJCQkJCWVsc2UgZCA9IGQxL2QyOworCQkJCQl9IGVsc2UgaWYob3AuZXF1YWxzKCIqIikpIGQgPSBkMSpkMjsKKwkJCQkJZWxzZSB0aHJvdyBuZXcgRXhjZXB0aW9uKCJVbmtub3duIG9wZXJhdGlvbiAiK29wKTsKKwkJCQkJZncud3JpdGUoIiIrZC9uKTsKKwkJCQkJCisJCQkJfSAvLyBmb3IgZWFjaCBsb2NhdGlvbgorCQkJCWZ3LndyaXRlKCJcbiIpOworCQkJCWRhdGExID0gZ2V0VG9rZW5MaXN0KHJlYWRlci5yZWFkTGluZSgpKTsKKwkJCQlkYXRhMiA9IGdldFRva2VuTGlzdChyZWFkZXIyLnJlYWRMaW5lKCkpOworCQkJCWlmKG5vcm1hbGl6ZSkgbmRhdGEgPSBnZXRUb2tlbkxpc3QobnJlYWRlci5yZWFkTGluZSgpKTsKKwkJCX0KKwkJCWZ3LmZsdXNoKCk7CisJCQlmdy5jbG9zZSgpOworCQl9IC8vIGZvciBlYWNoIGZpbGUKKwl9CisJCQkKKwkJCQorCXByaXZhdGUgc3RhdGljIExpc3Q8U3RyaW5nPiBnZXRUb2tlbkxpc3QoU3RyaW5nIHMpIHsKKwkJaWYocyA9PSBudWxsKSByZXR1cm4gbnVsbDsKKwkJQXJyYXlMaXN0PFN0cmluZz5yZXN1bHQgPSBuZXcgQXJyYXlMaXN0PFN0cmluZz4oKTsKKwkJU3RyaW5nVG9rZW5pemVyIHN0b2sgPSBuZXcgU3RyaW5nVG9rZW5pemVyKHMsIiwiKTsvLyROT04tTkxTLTEkCisJCXdoaWxlKHN0b2suaGFzTW9yZVRva2VucygpKSB7CisJCQlTdHJpbmcgdG9rID0gc3Rvay5uZXh0VG9rZW4oKTsKKwkJCXJlc3VsdC5hZGQodG9rKTsKKwkJfQorCQlyZXR1cm4gcmVzdWx0OworCX0KK30KKwpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdXRpbGl0eS9nZW5lcmF0b3JzL0Rvd25TYW1wbGVyLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91dGlsaXR5L2dlbmVyYXRvcnMvRG93blNhbXBsZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lOGEzNTdiCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdXRpbGl0eS9nZW5lcmF0b3JzL0Rvd25TYW1wbGVyLmphdmEKQEAgLTAsMCArMSwxMTQgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5LmdlbmVyYXRvcnM7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMKKyAqIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YKKyAqIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcworICogYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKiAKKyAqIENvbnRyaWJ1dG9yczogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioKKyAqIAorICogU1RFTSBJSSBEYXRhIE1pZ3JhdGlvbi9HZW5lcmF0aW9uIFV0aWxpdGllcyA6IEluc3RhbmNlcyBvZiB0aGlzIGNsYXNzIHJ1biBhCisgKiBTaW5nbGVQYXNzRG93blNhbXBsZXIgb2JqZWN0IGFuZCBpZiBtb3JlIHRoYW4gb25lIHBhc3MgaXMgbmVjZXNzYXJ5IGl0IHJ1bnMKKyAqIGFuIGluc3RhbmNlIG9mIE11bHRpUGFzc0Rvd25TYW1wbGVyLiBZb3UgY2FuIHNwZWNpZnkgYXMgYXJndW1lbnRzIHRoZQorICogdGhyZXNob2xkIChhbHBoYSBkZWdyZWVzKQorICogCisgKiAKKyAqIFRvIGNvbmZpZ3VyZSwgc2VlIGNvbmZpZ3VyYXRpb24gZmlsZSA6CisgKiBvcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvY29uZmlndXJhdGlvbi9Eb3duU2FtcGxlci5jb25maWcKKyAqIAorICogCisgKiBUbyBydW4sIGFkZCBwYXRoIHRvIGNvbmZpZ3VyYXRpb24gZmlsZSBpbiB0aGUgcnVuIHByb2ZpbGUgKGkuZS4KKyAqIEM6XHN0ZW1JSVxvcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHlcY29uZmlndXJhdGlvblxEb3duU2FtcGxlci5jb25maWcpCisgKiAKKyAqIFNFVCBWTUFSR1MgVE8gOiAtWG1zMTAyNG0gLVhteDEwMjRtCisgKiAKKyAqLworCitwdWJsaWMgY2xhc3MgRG93blNhbXBsZXIgeworCisJLyoqCisJICogRXhlY3V0aW9uIGVudHJ5IHBvaW50CisJICogCisJICogQHBhcmFtIGFyZ3MKKwkgKi8KKwlwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CisJCS8vIGZpbmFsIGludCBTSU5HTEVfUEFTUyA9IDE7CisJCS8vIGZpbmFsIGludCBUSFJFU0hPTEQgPSAwOworCQkvLyBmaW5hbCBpbnQgUEFTU0VTID0gMTsKKwkJLy8gZmluYWwgaW50IElTT18zMTY2XzEgPSAyOworCQkvLyBmaW5hbCBpbnQgSVNPXzMxNjZfMiA9IDM7CisJCS8vIGZpbmFsIGludCBGSVhfRklMRSA9IDQ7CisJCS8vIGZpbmFsIGludCBTSU5HTEVfUEFTU19UQVJHRVRfTElTVCA9IDU7IC8vIFRoZSBwYXRoIHRvIHRoZSBvcmlnaW5hbAorCQkvLyBkYXRhCisJCS8vIC8vIGZpbGUgKHNpbmdsZS1wYXNzIGRvd25zYW1wbGVyIG9ubHkpCisJCS8vIGZpbmFsIGludCBNVUxUSV9QQVNTX1RBUkdFVF9MSVNUID0gNjsgLy8gQSBsaXN0IG9mIGFscGhhIDMgY29kZXMgZm9yCisJCS8vIC8vIChtdWx0aS1wYXNzIGRvd25zYW1wbGVyIG9ubHkpCisJCS8vIGZpbmFsIGludCBMRVhfRElSID0gNzsKKwkJLy8gZmluYWwgaW50IE9VVFBVVF9ESVIgPSA4OworCQkvLyBmaW5hbCBpbnQgUEFSQU1TID0gOTsKKwkJLy8KKwkJLy8gaWYgKGFyZ3MubGVuZ3RoIDwgUEFSQU1TKSB7CisJCS8vIFV0aWxMb2dnZXIubG9nSW5mb3JtYXRpb24oIi0tV3JvbmcgYXJndW1lbnRzLS0iKTsgLy8kTk9OLU5MUy0xJAorCQkvLyBTeXN0ZW0ub3V0CisJCS8vIC5wcmludGxuKCJcdFRvIHJ1biwgcGxlYXNlIHByb3ZpZGUgdGhlIGZvbGxvd2luZyBhcmd1bWVudHMgOiAiKTsKKwkJLy8gLy8kTk9OLU5MUy0xJAorCQkvLyBVdGlsTG9nZ2VyLmxvZ0luZm9ybWF0aW9uKCJcdFx0IFRocmVzaG9sZCAoaW4gZGVncmVlcykiKTsgLy8kTk9OLU5MUy0xJAorCQkvLyBVdGlsTG9nZ2VyLmxvZ0luZm9ybWF0aW9uKCJcdFx0IFRvdGFsIGl0ZXJhdGlvbnMiKTsgLy8kTk9OLU5MUy0xJAorCQkvLyBVdGlsTG9nZ2VyLmxvZ0luZm9ybWF0aW9uKCJcdFx0IElTTyAzMTY2LTEgZmlsZSIpOyAvLyROT04tTkxTLTEkCisJCS8vIFV0aWxMb2dnZXIubG9nSW5mb3JtYXRpb24oIlx0XHQgSVNPIDMxNjYtMiBmaWxlIik7IC8vJE5PTi1OTFMtMSQKKwkJLy8gVXRpbExvZ2dlci5sb2dJbmZvcm1hdGlvbigiXHRcdCBJU08gZml4IGZpbGUiKTsgLy8kTk9OLU5MUy0xJAorCQkvLyBVdGlsTG9nZ2VyLmxvZ0luZm9ybWF0aW9uKCJcdFx0IFNpbmdsZSBwYXNzIHRhcmdldCBjb3VudHJpZXMgZmlsZSIpOworCQkvLyAvLyROT04tTkxTLTEkCisJCS8vIFV0aWxMb2dnZXIubG9nSW5mb3JtYXRpb24oIlx0XHQgTXVsdGkgcGFzcyB0YXJnZXQgY291bnRyaWVzIGZpbGUiKTsKKwkJLy8gLy8kTk9OLU5MUy0xJAorCQkvLyBVdGlsTG9nZ2VyLmxvZ0luZm9ybWF0aW9uKCJcdFx0IExleGljb2dyYXBoaWMgc29ydGluZyBkaXJlY3RvcnkiKTsKKwkJLy8gLy8kTk9OLU5MUy0xJCQKKwkJLy8gVXRpbExvZ2dlci5sb2dJbmZvcm1hdGlvbigiXHRcdCBPdXRwdXQgZGlyZWN0b3J5Iik7IC8vJE5PTi1OTFMtMSQKKwkJLy8gcmV0dXJuOworCQkvLyB9CisJCS8vCisJCS8vIC8vIFNpbmdsZVBhc3NEb3duU2FtcGxlciBwZXJmb3JtcyBvbmUgcGFzcywgdGhlIGZpcnN0IHBhc3Mgb25seS4KKwkJLy8gU2luZ2xlUGFzc0Rvd25TYW1wbGVyIHNpbXBsZVNhbXBsZXIgPSBuZXcgU2luZ2xlUGFzc0Rvd25TYW1wbGVyKAorCQkvLyBhcmdzW1RIUkVTSE9MRF0sIGFyZ3NbSVNPXzMxNjZfMV0sIGFyZ3NbSVNPXzMxNjZfMl0sCisJCS8vIGFyZ3NbRklYX0ZJTEVdLCBhcmdzW1NJTkdMRV9QQVNTX1RBUkdFVF9MSVNUXSwgYXJnc1tMRVhfRElSXSwKKwkJLy8gYXJnc1tPVVRQVVRfRElSXSk7CisJCS8vIHNpbXBsZVNhbXBsZXIucnVuKCk7CisJCS8vCisJCS8vIC8vIElmIG1vcmUgdGhhbiBvbmUgcGFzcyBpcyBuZWVkZWQsIHRoZW4gcnVuIE11bHRpUGFzc0Rvd25TYW1wbGVyLgorCQkvLyBpZiAoSW50ZWdlci5wYXJzZUludChhcmdzW1BBU1NFU10pID4gU0lOR0xFX1BBU1MpIHsKKwkJLy8gTXVsdGlQYXNzRG93blNhbXBsZXIgbXVsdGlTYW1wbGVyID0gbmV3IE11bHRpUGFzc0Rvd25TYW1wbGVyKAorCQkvLyBhcmdzW1RIUkVTSE9MRF0sIGFyZ3NbUEFTU0VTXSwgYXJnc1tJU09fMzE2Nl8xXSwKKwkJLy8gYXJnc1tJU09fMzE2Nl8yXSwgYXJnc1tGSVhfRklMRV0sCisJCS8vIGFyZ3NbTVVMVElfUEFTU19UQVJHRVRfTElTVF0sIGFyZ3NbTEVYX0RJUl0sCisJCS8vIGFyZ3NbT1VUUFVUX0RJUl0pOworCQkvLyBtdWx0aVNhbXBsZXIucnVuKCk7CisJCS8vIH0KKworCQlmaW5hbCBpbnQgQ09ORklHX0ZJTEUgPSAwOworCQlmaW5hbCBpbnQgUEFSQU1TID0gMTsKKworCQlpZiAoYXJncy5sZW5ndGggPCBQQVJBTVMpIHsKKwkJCVV0aWxMb2dnZXIubG9nSW5mb3JtYXRpb24oIlx0XHQtLVdyb25nIGFyZ3VtZW50cy0tIik7IC8vJE5PTi1OTFMtMSQKKwkJCVN5c3RlbS5vdXQKKwkJCQkJLnByaW50bG4oIlx0XHRUbyBydW4sIHBsZWFzZSBwcm92aWRlIHRoZSBmb2xsb3dpbmcgYXJndW1lbnQocykgOiAiKTsgLy8kTk9OLU5MUy0xJAorCQkJVXRpbExvZ2dlci5sb2dJbmZvcm1hdGlvbigiXHRcdFx0IENvbmZpZ3VyYXRpb24gZmlsZSIpOyAvLyROT04tTkxTLTEkCisJCQlTeXN0ZW0uZXhpdCgxKTsKKwkJfQorCisJCS8vIFNpbmdsZVBhc3NEb3duU2FtcGxlciBwZXJmb3JtcyBvbmUgcGFzcywgdGhlIGZpcnN0IHBhc3Mgb25seS4KKwkJU2luZ2xlUGFzc0Rvd25TYW1wbGVyIHMxID0gbmV3IFNpbmdsZVBhc3NEb3duU2FtcGxlcihhcmdzW0NPTkZJR19GSUxFXSk7CisJCXMxLnJ1bigpOworCisJCS8vIElmIG1vcmUgdGhhbiBvbmUgcGFzcyBpcyBuZWVkZWQsIHRoZW4gcnVuIE11bHRpUGFzc0Rvd25TYW1wbGVyLgorCQkvLyBpZiAoSW50ZWdlci5wYXJzZUludChhcmdzW1BBU1NFU10pID4gU0lOR0xFX1BBU1MpIHsKKwkJTXVsdGlQYXNzRG93blNhbXBsZXIgczIgPSBuZXcgTXVsdGlQYXNzRG93blNhbXBsZXIoYXJnc1tDT05GSUdfRklMRV0pOworCQlzMi5ydW4oKTsKKwkJLy8gfQorCisJfQorCit9IC8vIG1haW4KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3NyYy9vcmcvZWNsaXBzZS9zdGVtL3V0aWxpdHkvZ2VuZXJhdG9ycy9FdXJvcGVEYXRhQ2xlYW5lci5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdXRpbGl0eS9nZW5lcmF0b3JzL0V1cm9wZURhdGFDbGVhbmVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmU0ZWZmNAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3NyYy9vcmcvZWNsaXBzZS9zdGVtL3V0aWxpdHkvZ2VuZXJhdG9ycy9FdXJvcGVEYXRhQ2xlYW5lci5qYXZhCkBAIC0wLDAgKzEsNDA5IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS5nZW5lcmF0b3JzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA5IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGphdmEuaW8uQnVmZmVyZWRSZWFkZXI7CitpbXBvcnQgamF2YS5pby5GaWxlOworaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247CitpbXBvcnQgamF2YS5pby5QcmludFdyaXRlcjsKK2ltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKK2ltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CitpbXBvcnQgamF2YS51dGlsLlNldDsKKworLyoqCisgKiBTVEVNIElJIERhdGEgTWlncmF0aW9uL0dlbmVyYXRpb24gVXRpbGl0aWVzIDogSW5zdGFuY2VzIG9mIHRoaXMgdXRpbGl0eSBjbGFzcworICogY2xlYW4gdGhlIGRhdGEgZm9yIEV1cm9wZS4gVGhpcyBwcm9ncmFtIHdpbGwgcmVtb3ZlIGFsbCB1bm5lY2VzYXJ5IGRhdGEgZnJvbQorICogdGhlIG9yaWdpbmFsIGRhdGEgc291cmNlIGZpbGUgZm9yIEV1cm9wZS4gVGhlIG9yaWdpbmFsIGRhdGEgc291cmNlIGZpbGUgZm9yCisgKiBFdXJvcGUgd2FzIGRvd25sb2FkZWQgZnJvbSA6CisgKiBodHRwOi8vd3d3LmdyaWQudW5lcC5jaC9kYXRhL2RhdGEucGhwP2NhdGVnb3J5PWh1bWFuX3JlbGF0ZWQKKyAqIAorICogVG8gY29uZmlndXJlLCBzZWUgY29uZmlndXJhdGlvbiBmaWxlIDoKKyAqIG9yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9jb25maWd1cmF0aW9uL0V1cm9wZURhdGFDbGVhbmVyLmNvbmZpZworICogCisgKiAKKyAqIFRvIHJ1biwgYWRkIHBhdGggdG8gY29uZmlndXJhdGlvbiBmaWxlIGluIHRoZSBydW4gcHJvZmlsZSAoaS5lLgorICogQzpcc3RlbUlJXG9yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eVxjb25maWd1cmF0aW9uXEV1cm9wZURhdGFDbGVhbmVyLmNvbmZpZykKKyAqIAorICogCisgKiBBZGQgdGhlIGZvbGxvd2luZyB2YWx1ZXMgdG8gdGhlIHJ1biBjb25maWd1cmF0aW9uOgorICogCisgKiBDOlxzdGVtSUlcb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5XGRhdGFNaWdyYXRpb25caW5wdXRccHJvcGVydGllc1xFdXJvcGVDb3VudHJpZXMudHh0CisgKiBDOlxFdXJvcGVEYXRhMjAwN1xFdXJvcGVVTlxVTmRhdGFTaHBcCisgKiAKKyAqIE92ZXJ2aWV3IG9mIHRoZSBkYXRhIGdlbmVyYXRpb24gcHJvY2VzcyBmb3IgdGhlIEV1cm9wZSBkYXRhIHNldC4KKyAqIAorICogMSkgRGF0YSBDbGVhbmluZyA6IHN0YXJ0IGJ5IHJ1bm5pbmcgRXVyb3BlRGF0YUNsZWFuZXIuIFRoaXMgcHJvZ3JhbSB3aWxsCisgKiByZW1vdmUgYWxsIHVubmVjZXNhcnkgZGF0YSAoaS5lLiBjb2x1bW5zKSBpbiB0aGUgb3JpZ2luYWwgc291cmNlIGZpbGUuIEluCisgKiBhZGRpdGlvbiwgdGhpcyBwcm9ncmFtIHdpbGwgZ3JvdXAgdGhlIGRhdGEgYmFzZWQgb24gaXRzIElEIChpLmUuIE5PLElULEZSLFVLLAorICogZXRjKS4gVGhlIHJlc3VsdCB3aWxsIGJlIGEgZmlsZSBuYW1lZCBFdXJvcGVTb3J0ZWQudHh0IHdpdGggY2xlYW5lZCBkYXRhLgorICogCisgKiBJbiBvdGhlciB3b3JkcyA6IEV1cm9wZS50eHQgLS0+IHx8RXVyb3BlRGF0YUNsZWFuZXJ8fCAtLT4gRXVyb3BlU29ydGVkLnR4dAorICogCisgKiBOT1RFOiBFdXJvcGVTb3J0ZWQudHh0IHdpbGwgYmUgdXNlZCBhcyB0aGUgaW5wdXQgZm9yIHRoZSByZW1haW5pbmcgcGFydCBvZgorICogdGhlIHByb2Nlc3MuCisgKiAKKyAqIDIpIERhdGEgRm9ybWF0dGluZyA6IHJ1biBFdXJvcGVEYXRhRm9ybWF0dGVyIHRvIGJyZWFrIGRvd24gdGhlIGRhdGEgc291cmNlCisgKiAoRXVyb3BlU29ydGVkLnR4dCkgaW50byBtdWx0aXBsZSBkYXRhIGZpbGVzLCBvbmUgZm9yIGVhY2ggY291bnRyeSBhcworICogaW5kaWNhdGVkIGJ5IHRoZSBJRCAoaS5lLiBOTyxJVCxGUixVSywgZXRjKS4gVGhlIHJlc3VsdCB3aWxsIGJlIG11bHRpcGxlIGRhdGEKKyAqIGZpbGVzIChpLmUuIGl0YWx5LnR4dCwgc3BhaW4udHh0LCBldGMpLiBFYWNoIGZpbGUgd2lsbCBiZSBmb3VuZCB1bmRlciBhCisgKiBmb2xkZXIgd2l0aCBzYW1lIG5hbWUgYXMgdGhlIGNvdW50cnkgKGkuZS4gSVRBTFlcaXRhbHkudHh0LCBTUEFJTlxzcGFpbi50eHQsCisgKiBldGMpLgorICogCisgKiAzKSBEYXRhIENvbnZlcnRlciA6IHJ1biBFdXJvcGVEYXRhQ29udmVydGVyIHRvIGNvbnZlcnQgZmlsZSBpbiBjbGVhbmVkIGZvcm1hdAorICogaW50byBEaXZhIGZvcm1hdC4KKyAqIAorICogCisgKiA0KSBBcmVhIGFuZCBQb3B1bGF0aW9uIERhdGEgRXh0cmFjdGlvbiA6IHJ1biBFdXJvcGVEYXRhRXh0cmFjdG9yIHRvIGV4dHJhY3QKKyAqIGFsbCBhcmVhIGFuZCBwb3B1bGF0aW9uIGRhdGEuCisgKiAKKyAqLworcHVibGljIGNsYXNzIEV1cm9wZURhdGFDbGVhbmVyIHsKKworCXByaXZhdGUgU3RyaW5nIHRhcmdldEZpbGUgPSBudWxsOworCisJcHJpdmF0ZSBTdHJpbmcgb3V0cHV0RGlyID0gbnVsbDsKKworCXByaXZhdGUgU3RyaW5nIHdvcmtzcGFjZSA9IG51bGw7CisKKwkvKioKKwkgKiBMaXN0IGZvciBJU08gMzE2Ni0xIGNvZGVzIGFuZCB0YXJnZXQgY291bnRyaWVzLgorCSAqLworCUxpc3Q8U3RyaW5nPiB0YXJnZXRMaXN0ID0gbnVsbDsKKworCUxpc3Q8U3RyaW5nPiBjb2RlTGlzdCA9IG51bGw7CisKKwkvKioKKwkgKiBIYXNoIG1hcCB0byBrZWVwIHRyYWNrIG9mIHBvbHlnb25zLgorCSAqLworCUhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+IG1hcCA9IG51bGw7CisKKwkvKioKKwkgKiBDb25zdHJ1Y3RvcgorCSAqIAorCSAqIEBwYXJhbSB0YXJnZXRGaWxlIC0KKwkgKiAgICAgICAgICAgIGRhdGEgZmlsZSB3aGVyZSB3ZSBmaW5kIGEgbGlzdCBvZiBjb3VudHJpZXMgZm9yIGdlbmVyYXRpb24gb2YKKwkgKiAgICAgICAgICAgIHRoZWlyIGNvcnJlc3BvbmRpbmcgYXJlYS5wcm9wZXJ0aWVzIGZpbGVzLgorCSAqIEBwYXJhbSBvdXRwdXREaXIgLQorCSAqICAgICAgICAgICAgdGhlIG91dHB1dCBkaXJlY3RvcnkgZm9yIHRoZSBmaWxlcyBnZW5lcmF0ZWQuCisJICogCisJICovCisJLy8gcHVibGljIEV1cm9wZURhdGFDbGVhbmVyKFN0cmluZyB0YXJnZXRGaWxlLCBTdHJpbmcgb3V0cHV0RGlyKSB7CisJLy8gLy8gU2V0IHZhbHVlcyBvZiBnbG9iYWwgdmFyaWFibGVzLgorCS8vIHRoaXMudGFyZ2V0RmlsZSA9IHRhcmdldEZpbGU7CisJLy8gdGhpcy5vdXRwdXREaXIgPSBvdXRwdXREaXI7CisJLy8gdGFyZ2V0TGlzdCA9IG51bGw7CisJLy8gbWFwID0gbmV3IEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+KCk7CisJLy8JfQorCisJLyoqCisJICogQHBhcmFtIGNvbmZpZ0ZpbGUKKwkgKi8KKwlwdWJsaWMgRXVyb3BlRGF0YUNsZWFuZXIoU3RyaW5nIGNvbmZpZ0ZpbGUpIHsKKworCQkvLyBMb2FkIGFsbCBjb25maWd1cmF0aW9uIHZhcmlhYmxlcworCQlIYXNoTWFwPFN0cmluZywgU3RyaW5nPiB2YXJzID0gR2VuVXRpbHMubG9hZENvbmZpZ0ZpbGUoY29uZmlnRmlsZSk7CisKKwkJU2V0PFN0cmluZz4ga2V5cyA9IHZhcnMua2V5U2V0KCk7CisJCUl0ZXJhdG9yIGl0ID0ga2V5cy5pdGVyYXRvcigpOworCQl3aGlsZSAoaXQuaGFzTmV4dCgpKSB7CisJCQlTdHJpbmcgdmFyID0gKFN0cmluZykgaXQubmV4dCgpOworCisJCQkvLyBBc3NpZ24gdmFsdWVzIHRvIGNvbmZpZ3VyYXRpb24gdmFyaWFibGVzIDoKKwkJCWlmICh2YXIuZXF1YWxzKCJXT1JLU1BBQ0UiKSkgeyAvLyROT04tTkxTLTEkCisJCQkJd29ya3NwYWNlID0gdmFycy5nZXQodmFyKTsKKwkJCX0gZWxzZSBpZiAodmFyLmVxdWFscygiVEFSR0VUX0xJU1QiKSkgeyAvLyROT04tTkxTLTEkCisJCQkJdGFyZ2V0RmlsZSA9IHZhcnMuZ2V0KHZhcik7CisJCQl9IGVsc2UgaWYgKHZhci5lcXVhbHMoIk9VVFBVVCIpKSB7IC8vJE5PTi1OTFMtMSQKKwkJCQlvdXRwdXREaXIgPSB2YXJzLmdldCh2YXIpOworCQkJfQorCisJCX0gLy8gd2hpbGUKKworCQkvLyBUaGUgd29ya3NwYWNlIHZhcmlhYmxlIHNob3VsZCBlbmQgd2l0aCBhIHNsYXNoIGNoYXJhY3RlcgorCQlpZiAod29ya3NwYWNlLmVuZHNXaXRoKCJcXCIpID09IGZhbHNlKSB7IC8vJE5PTi1OTFMtMSQKKwkJCXdvcmtzcGFjZSArPSAiXFwiOyAvLyROT04tTkxTLTEkCisJCX0KKworCQlTdHJpbmcgcGF0aCA9IHdvcmtzcGFjZSArIEdlbkNvbnN0YW50cy5QQVJBTVNfRElSOworCisJCS8vIFNldCByZW1haW5pbmcgY29uZmlnIHZhcnMgdXNpbmcgV09SS1NQQUNFICh3b3Jrc3BhY2UgcmVsYXRpdmUpCisKKwkJaWYgKHRhcmdldEZpbGUgPT0gbnVsbCkgeworCQkJdGFyZ2V0RmlsZSA9IHBhdGggKyBHZW5Db25zdGFudHMuRVVST1BFX0NPVU5UUklFUzsKKwkJfQorCQlpZiAob3V0cHV0RGlyID09IG51bGwpIHsKKwkJCW91dHB1dERpciA9IEdlbkNvbnN0YW50cy5EVU1NWV9ESVI7CisJCX0KKworCQl0YXJnZXRMaXN0ID0gbnVsbDsKKworCQltYXAgPSBuZXcgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4oKTsKKworCX0KKworCS8qKgorCSAqIFRoaXMgbWV0aG9kIHNldHMgdXAgYW5kIHJ1bnMgdGhlIGZpbmRlci4KKwkgKiAKKwkgKi8KKwlwdWJsaWMgdm9pZCBydW4oKSB7CisJCS8vIFJlYWQgYW5kIGtlZXAgaW4gbWVtb3J5IGEgbGlzdCBvZiB0aGUgY291bnRyaWVzIHdlIHdhbnQuCisJCXRhcmdldExpc3QgPSBHZW5VdGlscy5wb3B1bGF0ZUxpc3QodGFyZ2V0RmlsZSk7CisKKwkJLy8gTm93LCBwcm9jZXNzIGVhY2ggaXRlbSBpbiB0aGUgdGFyZ2V0IGxpc3QuCisJCXByb2Nlc3MoKTsKKwl9CisKKwkvKioKKwkgKiBQcm9jZXNzIG91ciBnbG9iYWwgbGlzdCBvZiB0YXJnZXQgY291bnRyaWVzLgorCSAqIAorCSAqLworCXByb3RlY3RlZCB2b2lkIHByb2Nlc3MoKSB7CisKKwkJLy8gQSB3cml0ZXIgZm9yIHRoZSBuZXcgZmlsZSB3ZSBhcmUgY3JlYXRpbmcuCisJCVByaW50V3JpdGVyIGV1cm9wZUZpbGUgPSBudWxsOworCisJCS8vIE5hbWUgb2YgdGhlIG5ldyBwcm9wZXJ0aWVzIGZpbGUuCisJCVN0cmluZyBmaWxlTmFtZSA9IG51bGw7CisKKwkJaW50IHNpemUgPSB0YXJnZXRMaXN0LnNpemUoKTsKKworCQlmb3IgKGludCBpID0gMDsgaSA8IHNpemU7IGkrKykgeworCisJCQkvLyBHZXQgdGhlIG5leHQgY291bnRyeSBpbiB0aGUgbGlzdC4KKwkJCVN0cmluZyBmaWxlID0gdGFyZ2V0TGlzdC5nZXQoaSkudHJpbSgpOworCisJCQkvLyBPcGVuIHRoZSBkYXRhIHNvdXJjZSBmaWxlIGZvciB0aGlzIGNvdW50cnkuCisJCQlCdWZmZXJlZFJlYWRlciByZWFkZXIgPSBHZW5VdGlscy5vcGVuUmVhZGVyKGZpbGUpOworCQkJU3lzdGVtLm91dAorCQkJCQkucHJpbnRsbigiXHRcdDw8PDwgRVVST1BFIERBVEEgQ0xFQU5FUiAtLSBQcm9jZXNzaW5nIENvdW50cnkgOiAiICsgZmlsZSArICIgPj4+PiIpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKKwkJCXRyeSB7CisKKwkJCQlpZiAocmVhZGVyICE9IG51bGwpIHsKKworCQkJCQlTdHJpbmcgYnVmZmVyID0gbnVsbDsKKworCQkJCQkvLyBXZSB0YWtlIGEgY2h1bmsgb2YgdGhlIGRhdGEgW0JVRkZFUl9NSU4sQlVGRkVSX01BWF0gdG8KKwkJCQkJLy8gbWFrZSBwcm9jZXNzaW5nIG1vcmUKKwkJCQkJLy8gZWZmaWNpZW50LCB3ZSBkb250IG5lZWQgYWxsIG9mIGl0LgorCQkJCQlpbnQgQlVGRkVSX01JTiA9IDA7CisJCQkJCWludCBCVUZGRVJfTUFYID0gMjAwOworCisJCQkJCXdoaWxlIChHZW5VdGlscy5FT0YoYnVmZmVyID0gcmVhZGVyLnJlYWRMaW5lKCkpICE9IHRydWUpIHsKKworCQkJCQkJLy8gTWFrZSBzdXJlIHRoYXQgd2UgbWFyayBhbGwgdW5rbm93biBkYXRhLgorCQkJCQkJYnVmZmVyID0gYnVmZmVyLnJlcGxhY2UoIiwsLCIsICIsVU5LTk9XTixVTktOT1dOLCIpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKKwkJCQkJCWJ1ZmZlciA9IGJ1ZmZlci5yZXBsYWNlKCIsLCIsICIsVU5LTk9XTiwiKTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCisKKwkJCQkJCVN0cmluZ1tdIGl0ZW1zID0gYnVmZmVyLnN1YnN0cmluZyhCVUZGRVJfTUlOLAorCQkJCQkJCQlCVUZGRVJfTUFYKS5zcGxpdCgiLCIpOyAvLyROT04tTkxTLTEkCisKKwkJCQkJCS8vIENsZWFyIGJ1ZmZlciBvZiBkYXRhIHdlIGRvbnQgbmVlZC4KKwkJCQkJCVN0cmluZyBjbGVhbkJ1ZmZlciA9IGNsZWFuKGJ1ZmZlcik7CisJCQkJCQkvLyBVdGlsTG9nZ2VyLmxvZ0luZm9ybWF0aW9uKE1lc3NhZ2VzLmdldFN0cmluZygiRXVyb3BlRGF0YUNsZWFuZXIuMjAiKQorCQkJCQkJLy8gKyBjbGVhbkJ1ZmZlcik7IC8vJE5PTi1OTFMtMSQKKworCQkJCQkJRmlsZSBjb3VudHJ5RGlyID0gbmV3IEZpbGUob3V0cHV0RGlyKTsKKworCQkJCQkJaWYgKGNvdW50cnlEaXIgIT0gbnVsbCAmJiBjb3VudHJ5RGlyLmV4aXN0cygpID09IGZhbHNlKSB7CisJCQkJCQkJLy8gRGlyZWN0b3J5IGRvZXMgbm90IGV4aXN0LiBDcmVhdGUgaXQuCisJCQkJCQkJY291bnRyeURpci5ta2RpcigpOworCQkJCQkJfQorCisJCQkJCQkvLyBDcmVhdGUgYW5kIG9wZW4gdGhlIG5ldyBmaWxlLgorCQkJCQkJaWYgKGV1cm9wZUZpbGUgPT0gbnVsbCkgeworCQkJCQkJCWZpbGVOYW1lID0gY291bnRyeURpciArICJcXCIgKyAiRXVyb3BlU29ydGVkLnR4dCI7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAkJCQkJCQkJCQorCQkJCQkJCS8vIENyZWF0ZSB0bmUgbmV3IHByb3BlcnRpZXMuZmlsZSBmb3IgdGhpcyBjb3VudHJ5LgorCQkJCQkJCWV1cm9wZUZpbGUgPSBHZW5VdGlscy5vcGVuV3JpdGVyKGZpbGVOYW1lKTsKKwkJCQkJCX0KKworCQkJCQkJU3RyaW5nIHZhbCA9IG1hcAorCQkJCQkJCQkuZ2V0KGl0ZW1zW0V1cm9wZURhdGFDbGVhbmluZ0hlYWRlci5TVFJJRF0KKwkJCQkJCQkJCQkuc3Vic3RyaW5nKDAsIDIpKTsKKwkJCQkJCWlmICh2YWwgIT0gbnVsbCkgeworCQkJCQkJCS8vIENvbmNhdGVuYXRlCisJCQkJCQkJdmFsICs9IGNsZWFuQnVmZmVyICsgIlxuIjsgLy8kTk9OLU5MUy0xJAorCQkJCQkJfSBlbHNlIHsKKwkJCQkJCQkvLyBGaXJzdCBlbnRyeQorCQkJCQkJCXZhbCA9IGNsZWFuQnVmZmVyICsgIlxuIjsgLy8kTk9OLU5MUy0xJAorCQkJCQkJfQorCQkJCQkJbWFwLnB1dChpdGVtc1tFdXJvcGVEYXRhQ2xlYW5pbmdIZWFkZXIuU1RSSURdCisJCQkJCQkJCS5zdWJzdHJpbmcoMCwgMiksIHZhbCk7CisKKwkJCQkJfS8vIHdoaWxlCisKKwkJCQkJLy8gQ2xvc2UgYWxsIG9wZW4gcmVzb3VyY2VzLgorCQkJCQlyZWFkZXIuY2xvc2UoKTsKKworCQkJCQlpZiAoZXVyb3BlRmlsZSAhPSBudWxsKSB7CisJCQkJCQlTdHJpbmcgb3V0cHV0ID0gY29uc29saWRhdGVEYXRhKG1hcCk7CisJCQkJCQlpZiAob3V0cHV0ICE9IG51bGwpIHsKKwkJCQkJCQlHZW5VdGlscy5hZGREYXRhKGV1cm9wZUZpbGUsIG91dHB1dCk7CisJCQkJCQl9CisJCQkJCQlldXJvcGVGaWxlLmNsb3NlKCk7CisJCQkJCQlldXJvcGVGaWxlID0gbnVsbDsKKwkJCQkJCVV0aWxMb2dnZXIubG9nSW5mb3JtYXRpb24oIlx0XHRHZW5lcmF0ZWQgOiIgLy8kTk9OLU5MUy0xJAorCQkJCQkJCQkrIGZpbGVOYW1lKTsKKwkJCQkJCWZpbGVOYW1lID0gbnVsbDsKKwkJCQkJfQorCisJCQkJfQorCisJCQl9IGNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7CisJCQkJZS5wcmludFN0YWNrVHJhY2UoKTsKKwkJCX0KKworCQl9IC8vIGZvcgorCisJfQorCisJLyoqCisJICogCisJICogR2V0IGFsbCB0aGUgdmFsdWVzIGluIHRoZSBtYXAuCisJICogCisJICogQHBhcmFtIG1hcAorCSAqICAgICAgICAgICAgYSBtYXAgb2YgbG9jYXRpb25zCisJICogCisJICogQHJldHVybiBTdHJpbmcgYSBzdHJpbmcgd2lsbCBhbGwgbG9jYXRpb25zIGdyb3VwZWQgc2VjdWVudGlhbHkuCisJICogCisJICovCisJU3RyaW5nIGNvbnNvbGlkYXRlRGF0YShIYXNoTWFwPFN0cmluZywgU3RyaW5nPiBtYXApIHsKKworCQlTdHJpbmcgdmFsdWUgPSBudWxsOworCisJCWlmIChtYXAuaXNFbXB0eSgpKSB7CisJCQlyZXR1cm4gbnVsbDsKKwkJfQorCisJCVNldDxTdHJpbmc+IGtleXMgPSBtYXAua2V5U2V0KCk7CisKKwkJSXRlcmF0b3IgaXQgPSBrZXlzLml0ZXJhdG9yKCk7CisKKwkJd2hpbGUgKGl0Lmhhc05leHQoKSkgeworCisJCQlTdHJpbmcga2V5ID0gKFN0cmluZykgaXQubmV4dCgpOworCisJCQlpZiAodmFsdWUgPT0gbnVsbCkgeworCQkJCXZhbHVlID0gbWFwLmdldChrZXkpOworCQkJfSBlbHNlIHsKKwkJCQl2YWx1ZSArPSBtYXAuZ2V0KGtleSk7CisJCQl9CisKKwkJfQorCisJCXJldHVybiB2YWx1ZTsKKwl9CisKKwkvKioKKwkgKiBSZW1vdmUgYWxsIGlycmVsZXZhbnQgZGF0YSBmcm9tIG91ciBidWZmZXIKKwkgKi8KKwlTdHJpbmcgY2xlYW4oU3RyaW5nIGJ1ZmZlcikgeworCisJCWZpbmFsIGludCBMSU1JVCA9IDIwOworCQlTdHJpbmcgbmV3QnVmZmVyID0gbnVsbDsKKworCQlTdHJpbmdbXSBpdGVtcyA9IGJ1ZmZlci5zcGxpdCgiLCIpOyAvLyROT04tTkxTLTEkCisKKwkJaW50IGluZGV4ID0gMDsKKworCQl3aGlsZSAoaW5kZXggPCBpdGVtcy5sZW5ndGgpIHsKKworCQkJaWYgKGluZGV4ID4gTElNSVQpIHsKKwkJCQluZXdCdWZmZXIgKz0gIiwiICsgaXRlbXNbaW5kZXgrK107IC8vJE5PTi1OTFMtMSQKKwkJCQljb250aW51ZTsKKwkJCX0KKworCQkJc3dpdGNoIChpbmRleCkgeworCisJCQljYXNlIEV1cm9wZURhdGFDbGVhbmluZ0hlYWRlci5OVU1JRDoKKwkJCQluZXdCdWZmZXIgPSBpdGVtc1tpbmRleF07CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgRXVyb3BlRGF0YUNsZWFuaW5nSGVhZGVyLlNUUklEOgorCQkJCW5ld0J1ZmZlciArPSAiLCIgKyBpdGVtc1tpbmRleF07IC8vJE5PTi1OTFMtMSQKKwkJCQlicmVhazsKKworCQkJY2FzZSBFdXJvcGVEYXRhQ2xlYW5pbmdIZWFkZXIuQVJFQToKKwkJCQluZXdCdWZmZXIgKz0gIiwiICsgaXRlbXNbaW5kZXhdOyAvLyROT04tTkxTLTEkCisJCQkJYnJlYWs7CisKKwkJCWNhc2UgRXVyb3BlRGF0YUNsZWFuaW5nSGVhZGVyLlBPUDE6CisJCQkJbmV3QnVmZmVyICs9ICIsIiArIGl0ZW1zW2luZGV4XTsgLy8kTk9OLU5MUy0xJAorCQkJCWJyZWFrOworCisJCQljYXNlIEV1cm9wZURhdGFDbGVhbmluZ0hlYWRlci5QT1AyOgorCQkJCW5ld0J1ZmZlciArPSAiLCIgKyBpdGVtc1tpbmRleF07IC8vJE5PTi1OTFMtMSQKKwkJCQlicmVhazsKKworCQkJY2FzZSBFdXJvcGVEYXRhQ2xlYW5pbmdIZWFkZXIuUE9QMzoKKwkJCQluZXdCdWZmZXIgKz0gIiwiICsgaXRlbXNbaW5kZXhdOyAvLyROT04tTkxTLTEkCisJCQkJYnJlYWs7CisKKwkJCWNhc2UgRXVyb3BlRGF0YUNsZWFuaW5nSGVhZGVyLlBPUDQ6CisJCQkJbmV3QnVmZmVyICs9ICIsIiArIGl0ZW1zW2luZGV4XTsgLy8kTk9OLU5MUy0xJAorCQkJCWJyZWFrOworCisJCQljYXNlIEV1cm9wZURhdGFDbGVhbmluZ0hlYWRlci5URU1QSUQ6CisJCQkJbmV3QnVmZmVyICs9ICIsIiArIGl0ZW1zW2luZGV4XTsgLy8kTk9OLU5MUy0xJAorCQkJCWJyZWFrOworCisJCQl9CisKKwkJCWluZGV4Kys7CisKKwkJfQorCisJCXJldHVybiBuZXdCdWZmZXI7CisKKwl9CisKKwkvKioKKwkgKiBNYWluIGV4ZWN1dGlvbiBlbnRyeSBwb2ludC4KKwkgKiAKKwkgKiBAcGFyYW0gYXJncworCSAqLworCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKKwkJLy8gZmluYWwgaW50IFRBUkdFVF9MSVNUID0gMDsKKwkJLy8gZmluYWwgaW50IE9VVFBVVF9ESVIgPSAxOworCQkvLyBmaW5hbCBpbnQgUEFSQU1TID0gMjsKKwkJLy8KKwkJLy8gaWYgKGFyZ3MubGVuZ3RoIDwgUEFSQU1TKSB7CisJCS8vIFV0aWxMb2dnZXIubG9nSW5mb3JtYXRpb24oIi0tV3JvbmcgYXJndW1lbnRzLS0iKTsgLy8kTk9OLU5MUy0xJAorCQkvLyBTeXN0ZW0ub3V0CisJCS8vIC5wcmludGxuKCJcdFRvIHJ1biwgcGxlYXNlIHByb3ZpZGUgdGhlIGZvbGxvd2luZyBhcmd1bWVudHMgOiAiKTsKKwkJLy8gLy8kTk9OLU5MUy0xJAorCQkvLyBVdGlsTG9nZ2VyLmxvZ0luZm9ybWF0aW9uKCJcdFx0IFRhcmdldCBjb3VudHJpZXMgZmlsZSIpOyAvLyROT04tTkxTLTEkCisJCS8vIFV0aWxMb2dnZXIubG9nSW5mb3JtYXRpb24oIlx0XHQgT3V0cHV0IGRpcmVjdG9yeSIpOyAvLyROT04tTkxTLTEkCisJCS8vIHJldHVybjsKKwkJLy8gfQorCQkvLworCQkvLyBFdXJvcGVEYXRhQ2xlYW5lciBmb3JtYXR0ZXIgPSBuZXcKKwkJLy8gRXVyb3BlRGF0YUNsZWFuZXIoYXJnc1tUQVJHRVRfTElTVF0sCisJCS8vIGFyZ3NbT1VUUFVUX0RJUl0pOworCQkvLyBmb3JtYXR0ZXIucnVuKCk7CisKKwkJZmluYWwgaW50IENPTkZJR19GSUxFID0gMDsKKwkJZmluYWwgaW50IFBBUkFNUyA9IDE7CisKKwkJaWYgKGFyZ3MubGVuZ3RoIDwgUEFSQU1TKSB7CisJCQlVdGlsTG9nZ2VyLmxvZ0luZm9ybWF0aW9uKCJcdFx0LS1Xcm9uZyBhcmd1bWVudHMtLSIpOyAvLyROT04tTkxTLTEkCisJCQlTeXN0ZW0ub3V0CisJCQkJCS5wcmludGxuKCJcdFx0VG8gcnVuLCBwbGVhc2UgcHJvdmlkZSB0aGUgZm9sbG93aW5nIGFyZ3VtZW50KHMpIDogIik7IC8vJE5PTi1OTFMtMSQKKwkJCVV0aWxMb2dnZXIubG9nSW5mb3JtYXRpb24oIlx0XHRcdCBDb25maWd1cmF0aW9uIGZpbGUiKTsgLy8kTk9OLU5MUy0xJAorCQkJU3lzdGVtLmV4aXQoMSk7CisJCX0KKworCQlFdXJvcGVEYXRhQ2xlYW5lciBjbGVhbmVyID0gbmV3IEV1cm9wZURhdGFDbGVhbmVyKGFyZ3NbQ09ORklHX0ZJTEVdKTsKKwkJY2xlYW5lci5ydW4oKTsKKworCX0KK30KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3NyYy9vcmcvZWNsaXBzZS9zdGVtL3V0aWxpdHkvZ2VuZXJhdG9ycy9FdXJvcGVEYXRhQ2xlYW5pbmdIZWFkZXIuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3NyYy9vcmcvZWNsaXBzZS9zdGVtL3V0aWxpdHkvZ2VuZXJhdG9ycy9FdXJvcGVEYXRhQ2xlYW5pbmdIZWFkZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNTY1Mzc4Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdXRpbGl0eS9nZW5lcmF0b3JzL0V1cm9wZURhdGFDbGVhbmluZ0hlYWRlci5qYXZhCkBAIC0wLDAgKzEsNjQgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5LmdlbmVyYXRvcnM7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDkgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioKKyAqIAorICogUmVsZXZhbnQga2V5cyB0byB0aGUgRXVyb3BlYW4gZGF0YXNldC4gS2V5cyBpbiB0aGlzIGNsYXNzIGFyZSB1c2VkIGR1cmluZyB0aGUKKyAqIGRhdGEgY2xlYW5pbmcgcHJvY2VzcyB0byBleHRyYWN0IG9ubHkgdGhlIHJlbGV2YW50IGtleXMgZnJvbSB0aGUgb3JpZ2luYWwKKyAqIGRhdGEgc291cmNlIGZpbGUgZm9yIEV1cm9wZS4gVGhlc2Uga2V5cyBhcmUgdXNlZCB3aGVuIHJ1bm5pbmcgYW4gaW5zdGFuY2Ugb2YKKyAqIEV1cm9wZURhdGFDbGVhbmVyIHRvIHBlcmZvcm0gZGF0YSBjbGVhbmluZy4KKyAqIAorICovCitwdWJsaWMgYWJzdHJhY3QgY2xhc3MgRXVyb3BlRGF0YUNsZWFuaW5nSGVhZGVyIHsKKworCS8qKgorCSAqIE51bWVyaWMgSUQKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIGludCBOVU1JRCA9IDY7CisKKwkvKioKKwkgKiBOYW1lIElECisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgU1RSSUQgPSA3OworCisJLyoqCisJICogVG90YWwgQXJlYQorCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEFSRUEgPSAxMTsKKworCS8qKgorCSAqIFBvcHVsYXRpb24gdmFsdWUgMQorCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFBPUDEgPSAxNTsKKworCS8qKgorCSAqIFBvcHVsYXRpb24gdmFsdWUgMgorCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFBPUDIgPSAxNjsKKworCS8qKgorCSAqIFBvcHVsYXRpb24gdmFsdWUgMworCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFBPUDMgPSAxNzsKKworCS8qKgorCSAqIFBvcHVsYXRpb24gdmFsdWUgNAorCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFBPUDQgPSAxODsKKworCS8qKgorCSAqIEFsdGVybmF0aXZlIElECisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgVEVNUElEID0gMjA7CisKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91dGlsaXR5L2dlbmVyYXRvcnMvRXVyb3BlRGF0YUNvbnZlcnRlci5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdXRpbGl0eS9nZW5lcmF0b3JzL0V1cm9wZURhdGFDb252ZXJ0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZmM5MmQ1Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdXRpbGl0eS9nZW5lcmF0b3JzL0V1cm9wZURhdGFDb252ZXJ0ZXIuamF2YQpAQCAtMCwwICsxLDQxMSBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkuZ2VuZXJhdG9yczsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqYXZhLmlvLkJ1ZmZlcmVkUmVhZGVyOworaW1wb3J0IGphdmEuaW8uRmlsZTsKK2ltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOworaW1wb3J0IGphdmEuaW8uUHJpbnRXcml0ZXI7CitpbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7CitpbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOworaW1wb3J0IGphdmEudXRpbC5MaXN0OworaW1wb3J0IGphdmEudXRpbC5TZXQ7CisKKy8qKgorICogQ29udmVydCBhIGRhdGEgZmlsZSB0aGF0IGNvbWVzIGludG8gdGhlIGZvcm1hdCBVTiBFdXJvcGUgOgorICogaHR0cDovL3d3dy5ncmlkLnVuZXAuY2gvZGF0YS9kYXRhLnBocD9jYXRlZ29yeT1odW1hbl9yZWxhdGVkIGludG8gdGhlIERpdmEKKyAqIGZvcm1hdCB0aGF0IHRoZSBnZW5lcmF0b3JzIGNhbiBoYW5kbGUuIFRoaXMgd29udCBmb3JtYXQgYW55IGFyYml0cmFyeSBmb3JtYXQKKyAqIGludG8gRGl2YSBmb3JtYXQuIENvbnZlcnRzIG9ubHkgOiBVTiBFdXJvcGVhbiBmb3JtYXQgLT4gRGl2YSBmb3JtYXQKKyAqIAorICogCisgKiBUbyBjb25maWd1cmUsIHNlZSBjb25maWd1cmF0aW9uIGZpbGUgOgorICogb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L2NvbmZpZ3VyYXRpb24vRXVyb3BlRGF0YUNvbnZlcnRlci5jb25maWcKKyAqIAorICogCisgKiBUbyBydW4sIGFkZCBwYXRoIHRvIGNvbmZpZ3VyYXRpb24gZmlsZSBpbiB0aGUgcnVuIHByb2ZpbGUgKGkuZS4KKyAqIEM6XHN0ZW1JSVxvcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHlcY29uZmlndXJhdGlvblxFdXJvcGVEYXRhQ29udmVydGVyLmNvbmZpZykKKyAqIAorICogCisgKiBBZGQgdGhlIGZvbGxvd2luZyB2YWx1ZXMgdG8gdGhlIHJ1biBjb25maWd1cmF0aW9uOgorICogCisgKiBDOlxzdGVtSUlcb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5XGRhdGFNaWdyYXRpb25caW5wdXRcSVNPMzE2Ni0xXElTTzMxNjZfMV9lbi50eHQKKyAqIEM6XHN0ZW1JSVxvcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHlcZGF0YU1pZ3JhdGlvblxpbnB1dFxwcm9wZXJ0aWVzXEV1cm9wZU5hbWVzLnR4dAorICogQzpcc3RlbUlJXG9yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eVxkYXRhTWlncmF0aW9uXGlucHV0XHByb3BlcnRpZXNcRXVyb3BlQ291bnRyaWVzLnR4dAorICogQzpcZGl2YVxFdXJvcGVcCisgKiAKKyAqIEJyaWVmIG92ZXJ2aWV3IG9mIHRoZSBkYXRhIGdlbmVyYXRpb24gcHJvY2VzcyBmb3IgdGhlIEV1cm9wZSBkYXRhIHNldC4KKyAqIAorICogMSkgRGF0YSBDbGVhbmluZyA6IHN0YXJ0IGJ5IHJ1bm5pbmcgRXVyb3BlRGF0YUNsZWFuZXIuIFRoaXMgcHJvZ3JhbSB3aWxsCisgKiByZW1vdmUgYWxsIHVubmVjZXNhcnkgZGF0YSAoaS5lLiBjb2x1bW5zKSBpbiB0aGUgb3JpZ2luYWwgc291cmNlIGZpbGUuIEluCisgKiBhZGRpdGlvbiwgdGhpcyBwcm9ncmFtIHdpbGwgZ3JvdXAgdGhlIGRhdGEgYmFzZWQgb24gaXRzIElEIChpLmUuIE5PLElULEZSLFVLLAorICogZXRjKS4gVGhlIHJlc3VsdCB3aWxsIGJlIGEgZmlsZSBuYW1lZCBFdXJvcGVTb3J0ZWQudHh0IHdpdGggY2xlYW5lZCBkYXRhLgorICogCisgKiBJbiBvdGhlciB3b3JkcyA6IEV1cm9wZS50eHQgLS0+IHx8RXVyb3BlRGF0YUNsZWFuZXJ8fCAtLT4gRXVyb3BlU29ydGVkLnR4dAorICogCisgKiBOT1RFOiBFdXJvcGVTb3J0ZWQudHh0IHdpbGwgYmUgdXNlZCBhcyB0aGUgaW5wdXQgZm9yIHRoZSByZW1haW5pbmcgcGFydCBvZgorICogdGhlIHByb2Nlc3MuCisgKiAKKyAqIDIpIERhdGEgRm9ybWF0dGluZyA6IHJ1biBFdXJvcGVEYXRhRm9ybWF0dGVyIHRvIGJyZWFrIGRvd24gdGhlIGRhdGEgc291cmNlCisgKiAoRXVyb3BlU29ydGVkLnR4dCkgaW50byBtdWx0aXBsZSBkYXRhIGZpbGVzLCBvbmUgZm9yIGVhY2ggY291bnRyeSBhcworICogaW5kaWNhdGVkIGJ5IHRoZSBJRCAoaS5lLiBOTyxJVCxGUixVSywgZXRjKS4gVGhlIHJlc3VsdCB3aWxsIGJlIG11bHRpcGxlIGRhdGEKKyAqIGZpbGVzIChpLmUuIGl0YWx5LnR4dCwgc3BhaW4udHh0LCBldGMpLiBFYWNoIGZpbGUgd2lsbCBiZSBmb3VuZCB1bmRlciBhCisgKiBmb2xkZXIgd2l0aCBzYW1lIG5hbWUgYXMgdGhlIGNvdW50cnkgKGkuZS4gSVRBTFlcaXRhbHkudHh0LCBTUEFJTlxzcGFpbi50eHQsCisgKiBldGMpLgorICogCisgKiAzKSBEYXRhIENvbnZlcnRlciA6IHJ1biBFdXJvcGVEYXRhQ29udmVydGVyIHRvIGNvbnZlcnQgZmlsZSBpbiBjbGVhbmVkIGZvcm1hdAorICogaW50byBEaXZhIGZvcm1hdC4KKyAqIAorICogCisgKiA0KSBBcmVhIGFuZCBQb3B1bGF0aW9uIERhdGEgRXh0cmFjdGlvbiA6IHJ1biBFdXJvcGVEYXRhRXh0cmFjdG9yIHRvIGV4dHJhY3QKKyAqIGFsbCBhcmVhIGFuZCBwb3B1bGF0aW9uIGRhdGEuCisgKiAKKyAqIAorICovCisKK3B1YmxpYyBjbGFzcyBFdXJvcGVEYXRhQ29udmVydGVyIHsKKworCS8qKgorCSAqIE91ciBzb3VyY2UgZmlsZXMgZm9yIElTTyAzMTY2LTEgY29kZXMgYW5kIGZvciB0aGUgbGlzdCBvZiB0YXJnZXQKKwkgKiBjb3VudHJpZXMuCisJICovCisJcHJpdmF0ZSBTdHJpbmcgaXNvMzE2Nl8xID0gbnVsbDsKKworCXByaXZhdGUgU3RyaW5nIG5hbWVzRmlsZSA9IG51bGw7CisKKwlwcml2YXRlIFN0cmluZyB0YXJnZXRGaWxlID0gbnVsbDsKKworCXByaXZhdGUgU3RyaW5nIG91dHB1dERpciA9IG51bGw7CisKKwlwcml2YXRlIFN0cmluZyB3b3Jrc3BhY2UgPSBudWxsOworCisJLyoqCisJICogTGlzdCBmb3IgSVNPIDMxNjYtMSBjb2RlcyBhbmQgdGFyZ2V0IGNvdW50cmllcy4KKwkgKi8KKworCUxpc3QgdGFyZ2V0TGlzdCA9IG51bGw7CisKKwlMaXN0IGNvZGVMaXN0ID0gbnVsbDsKKworCUxpc3QgZGF0YUxpc3QgPSBudWxsOworCisJTGlzdCBuYW1lc0xpc3QgPSBudWxsOworCisJLyoqCisJICogQ29uc3RydWN0b3IKKwkgKiAKKwkgKiBAcGFyYW0gaXNvMzE2Nl8xIC0KKwkgKiAgICAgICAgICAgIGRhdGEgZmlsZSB3aXRoIHRoZSBJU08zMTY2LTEgQUxQSEFfMiBhbmQgQUxQSEFfMyBjb2Rlcy4KKwkgKiBAcGFyYW0gbmFtZXNGaWxlIC0KKwkgKiAgICAgICAgICAgIGZpbGVzIHdpdGggYWxsIEV1cm9wZSBsZXZlbCAxIG5hbWVzLgorCSAqIEBwYXJhbSB0YXJnZXRGaWxlIC0KKwkgKiAgICAgICAgICAgIGxpc3Qgb2YgdGFyZ2V0IGNvdW50cmllcworCSAqIEBwYXJhbSBvdXRwdXREaXIgLQorCSAqICAgICAgICAgICAgdGhlIG91dHB1dCBkaXJlY3RvcnkgZm9yIHRoZSBmaWxlcyBnZW5lcmF0ZWQuCisJICogCisJICovCisJcHVibGljIEV1cm9wZURhdGFDb252ZXJ0ZXIoU3RyaW5nIGlzbzMxNjZfMSwgU3RyaW5nIG5hbWVzRmlsZSwKKwkJCVN0cmluZyB0YXJnZXRGaWxlLCBTdHJpbmcgb3V0cHV0RGlyKSB7CisJCS8vIFNldCB2YWx1ZXMgb2YgZ2xvYmFsIHZhcmlhYmxlcy4KKwkJdGhpcy5pc28zMTY2XzEgPSBpc28zMTY2XzE7CisJCXRoaXMubmFtZXNGaWxlID0gbmFtZXNGaWxlOworCQl0aGlzLnRhcmdldEZpbGUgPSB0YXJnZXRGaWxlOworCQl0aGlzLm91dHB1dERpciA9IG91dHB1dERpcjsKKwkJdGFyZ2V0TGlzdCA9IG51bGw7CisJfQorCisJLyoqCisJICogQHBhcmFtIGNvbmZpZ0ZpbGUKKwkgKi8KKwlwdWJsaWMgRXVyb3BlRGF0YUNvbnZlcnRlcihTdHJpbmcgY29uZmlnRmlsZSkgeworCisJCS8vIExvYWQgYWxsIGNvbmZpZ3VyYXRpb24gdmFyaWFibGVzCisJCUhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+IHZhcnMgPSBHZW5VdGlscy5sb2FkQ29uZmlnRmlsZShjb25maWdGaWxlKTsKKworCQlTZXQ8U3RyaW5nPiBrZXlzID0gdmFycy5rZXlTZXQoKTsKKwkJSXRlcmF0b3IgaXQgPSBrZXlzLml0ZXJhdG9yKCk7CisJCXdoaWxlIChpdC5oYXNOZXh0KCkpIHsKKwkJCVN0cmluZyB2YXIgPSAoU3RyaW5nKSBpdC5uZXh0KCk7CisKKwkJCS8vIEFzc2lnbiB2YWx1ZXMgdG8gY29uZmlndXJhdGlvbiB2YXJpYWJsZXMgOgorCQkJaWYgKHZhci5lcXVhbHMoIldPUktTUEFDRSIpKSB7IC8vJE5PTi1OTFMtMSQKKwkJCQl3b3Jrc3BhY2UgPSB2YXJzLmdldCh2YXIpOworCQkJfSBlbHNlIGlmICh2YXIuZXF1YWxzKCJJU08zMTY2XzEiKSkgeyAvLyROT04tTkxTLTEkCisJCQkJaXNvMzE2Nl8xID0gdmFycy5nZXQodmFyKTsKKwkJCX0gZWxzZSBpZiAodmFyLmVxdWFscygiTkFNRVNfRklMRSIpKSB7IC8vJE5PTi1OTFMtMSQKKwkJCQluYW1lc0ZpbGUgPSB2YXJzLmdldCh2YXIpOworCQkJfSBlbHNlIGlmICh2YXIuZXF1YWxzKCJUQVJHRVRfTElTVCIpKSB7IC8vJE5PTi1OTFMtMSQKKwkJCQl0YXJnZXRGaWxlID0gdmFycy5nZXQodmFyKTsKKwkJCX0gZWxzZSBpZiAodmFyLmVxdWFscygiT1VUUFVUIikpIHsgLy8kTk9OLU5MUy0xJAorCQkJCW91dHB1dERpciA9IHZhcnMuZ2V0KHZhcik7CisJCQl9CisKKwkJfSAvLyB3aGlsZQorCisJCS8vIFRoZSB3b3Jrc3BhY2UgdmFyaWFibGUgc2hvdWxkIGVuZCB3aXRoIGEgc2xhc2ggY2hhcmFjdGVyCisJCWlmICh3b3Jrc3BhY2UuZW5kc1dpdGgoIlxcIikgPT0gZmFsc2UpIHsgLy8kTk9OLU5MUy0xJAorCQkJd29ya3NwYWNlICs9ICJcXCI7IC8vJE5PTi1OTFMtMSQKKwkJfQorCisJCVN0cmluZyBwYXRoID0gd29ya3NwYWNlICsgR2VuQ29uc3RhbnRzLlBBUkFNU19ESVI7CisKKwkJLy8gU2V0IHJlbWFpbmluZyBjb25maWcgdmFycyB1c2luZyBXT1JLU1BBQ0UgKHdvcmtzcGFjZSByZWxhdGl2ZSkKKwkJaWYgKGlzbzMxNjZfMSA9PSBudWxsKSB7CisJCQlpc28zMTY2XzEgPSBwYXRoICsgR2VuQ29uc3RhbnRzLklTTzMxNjZfMV9GSUxFOworCQl9CisJCWlmIChuYW1lc0ZpbGUgPT0gbnVsbCkgeworCQkJbmFtZXNGaWxlID0gcGF0aCArIEdlbkNvbnN0YW50cy5JU08zMTY2XzJfRklMRTsKKwkJfQorCQlpZiAodGFyZ2V0RmlsZSA9PSBudWxsKSB7CisJCQl0YXJnZXRGaWxlID0gcGF0aCArIEdlbkNvbnN0YW50cy5FVVJPUEVfQ09VTlRSSUVTOworCQl9CisJCWlmIChvdXRwdXREaXIgPT0gbnVsbCkgeworCQkJb3V0cHV0RGlyID0gR2VuQ29uc3RhbnRzLkRVTU1ZX0RJUjsKKwkJfQorCisJCXRhcmdldExpc3QgPSBudWxsOworCisJfQorCisJLyoqCisJICogVGhpcyBtZXRob2Qgc2V0cyB1cCBhbmQgcnVucyB0aGlzIGdlbmVyYXRvci4KKwkgKiAKKwkgKi8KKwlwdWJsaWMgdm9pZCBydW4oKSB7CisJCS8vIFJlYWQgYW5kIGtlZXAgaW4gbWVtb3J5IGEgbGlzdCBvZiB0aGUgY291bnRyaWVzIHdlIHdhbnQuCisJCXRhcmdldExpc3QgPSBHZW5VdGlscy5wb3B1bGF0ZUxpc3QodGFyZ2V0RmlsZSk7CisKKwkJLy8gUmVhZCBhbmQga2VlcCBpbiBtZW1vcnkgYSBsaXN0IG9mIHRoZSBJU08zMTY2LTEgQUxQSEEyLCBBTFBIQTMsIGFuZAorCQkvLyBudW1lcmljIGNvZGVzLgorCQljb2RlTGlzdCA9IEdlblV0aWxzLnBvcHVsYXRlTGlzdChpc28zMTY2XzEpOworCisJCS8vIExvYWQgYWxsIGxldmVsIDEgbmFtZXMgZm9yIEV1cm9wZS4KKwkJbmFtZXNMaXN0ID0gR2VuVXRpbHMucG9wdWxhdGVMaXN0KG5hbWVzRmlsZSk7CisKKwkJLy8gUnVuIHRoZSBjb252ZXJ0ZXI6IFVOIEV1cm9wZSAtPiBEaXZhIHNldCBmb3JtYXQKKwkJcHJvY2VzcygpOworCX0KKworCS8qKgorCSAqIENvbnZlcnQgYSBkYXRhIGZpbGUgdGhhdCBjb21lcyBpbnRvIHRoZSBmb3JtYXQgVU4gRXVyb3BlIDoKKwkgKiBodHRwOi8vd3d3LmdyaWQudW5lcC5jaC9kYXRhL2RhdGEucGhwP2NhdGVnb3J5PWh1bWFuX3JlbGF0ZWQgaW50byB0aGUKKwkgKiBEaXZhIGZvcm1hdCB0aGF0IHRoZSBnZW5lcmF0b3JzIGNhbiBoYW5kbGUuIFRoaXMgd29udCBmb3JtYXQgYW55CisJICogYXJiaXRyYXJ5IGZvcm1hdCBpbnRvIERpdmEgZm9ybWF0LiBDb252ZXJ0cyBvbmx5IDogVU4gRXVyb3BlYW4gZm9ybWF0IC0+CisJICogRGl2YSBmb3JtYXQKKwkgKiAKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBwcm9jZXNzKCkgeworCisJCS8vIEEgd3JpdGVyIGZvciB0aGUgbmV3IGZpbGUgd2UgYXJlIGNyZWF0aW5nLgorCQlQcmludFdyaXRlciBkaXZhRmlsZSA9IG51bGw7CisKKwkJLy8gT2JqZWN0IGhvbGRpbmcgSVNPMzE2Ni0xIHJlbGF0ZWQgZGF0YS4KKwkJSVNPQ29kZTEgaXNvQ29kZSA9IG51bGw7CisKKwkJLy8gTmFtZSBvZiB0aGUgbmV3IHByb3BlcnRpZXMgZmlsZS4KKwkJU3RyaW5nIGZpbGVOYW1lID0gbnVsbDsKKworCQlpbnQgc2l6ZSA9IHRhcmdldExpc3Quc2l6ZSgpOworCisJCS8vIEZvciBldmVyeSBjb3VudHJ5CisJCWZvciAoaW50IGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7CisKKwkJCS8vIEdldCB0aGUgbmV4dCBmaWxlIGluIHRoZSBsaXN0LgorCQkJU3RyaW5nIGZpbGUgPSAoKFN0cmluZykgdGFyZ2V0TGlzdC5nZXQoaSkpLnRyaW0oKTsKKworCQkJLy8gT3BlbiB0aGUgZGF0YSBzb3VyY2UgZmlsZSBmb3IgdGhpcyBjb3VudHJ5LgorCQkJQnVmZmVyZWRSZWFkZXIgcmVhZGVyID0gR2VuVXRpbHMub3BlblJlYWRlcihmaWxlKTsKKwkJCVN5c3RlbS5vdXQKKwkJCQkJLnByaW50bG4oIlx0XHQ8PDw8IEVVUk9QRSBEQVRBIENPTlZFUlRFUiAgLS0gUHJvY2Vzc2luZyBDb3VudHJ5IDogIiArIGZpbGUgKyAiID4+Pj4iKTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCisJCQl0cnkgeworCisJCQkJaWYgKHJlYWRlciAhPSBudWxsKSB7CisKKwkJCQkJU3RyaW5nIGJ1ZmZlciA9IG51bGw7CisKKwkJCQkJd2hpbGUgKEdlblV0aWxzLkVPRihidWZmZXIgPSByZWFkZXIucmVhZExpbmUoKSkgIT0gdHJ1ZSkgeworCisJCQkJCQkvLyBNYWtlIHN1cmUgdGhhdCB3ZSBtYXJrIGFsbCB1bmtub3duIGRhdGEuCisJCQkJCQlidWZmZXIgPSBidWZmZXIucmVwbGFjZSgiLCwiLCAiLFVOS05PV04sIik7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAorCisJCQkJCQlTdHJpbmdbXSBpdGVtcyA9IGJ1ZmZlci5zcGxpdCgiLCIpOyAvLyROT04tTkxTLTEkCisKKwkJCQkJCS8vIEdldCB0aGUgSVNPMzE2Ni0xIGluZm8gZm9yIHRoaXMgY291bnRyeQorCQkJCQkJaWYgKGlzb0NvZGUgPT0gbnVsbCkgeworCQkJCQkJCVN0cmluZyBjb3VudHJ5ID0gR2VuVXRpbHMuZ2V0Q291bnRyeU5hbWUoCisJCQkJCQkJCQlpdGVtc1tFdXJvcGVEYXRhRm9ybWF0dGluZ0hlYWRlci5TVFJJRF0KKwkJCQkJCQkJCQkJLnN1YnN0cmluZygwLCAyKSwgY29kZUxpc3QpOworCQkJCQkJCWlzb0NvZGUgPSBHZW5VdGlscy5nZXRJU09Db2RlKGNvdW50cnksIGNvZGVMaXN0KTsKKwkJCQkJCX0KKworCQkJCQkJLy8gSWYgdGhlIGRpcmVjdG9yeSBkb2VzIG5vdCBleGlzdCBmb3IgdGhpcyBjb3VudHJ5LAorCQkJCQkJLy8gY3JlYXRlIGl0IHVzaW5nIElTTyBhbHBoYTMgY29kZS4KKwkJCQkJCUZpbGUgY291bnRyeURpciA9IG5ldyBGaWxlKG91dHB1dERpcgorCQkJCQkJCQkrIGlzb0NvZGUuZ2V0TmFtZSgpKTsKKworCQkJCQkJaWYgKGNvdW50cnlEaXIgIT0gbnVsbCAmJiBjb3VudHJ5RGlyLmV4aXN0cygpID09IGZhbHNlKSB7CisJCQkJCQkJLy8gRGlyZWN0b3J5IGRvZXMgbm90IGV4aXN0LiBDcmVhdGUgaXQuCisJCQkJCQkJY291bnRyeURpci5ta2RpcigpOworCQkJCQkJfQorCisJCQkJCQkvLyBDcmVhdGUgYW5kIG9wZW4gdGhlIG5ldyBvdXRwdXQgZmlsZS4KKwkJCQkJCWlmIChkaXZhRmlsZSA9PSBudWxsKSB7CisJCQkJCQkJLy8gQ3JlYXRlIHRoZSBmaWxlIG5hbWUKKwkJCQkJCQlmaWxlTmFtZSA9IGNvdW50cnlEaXIgKyAiXFwiICsgaXNvQ29kZS5nZXROYW1lKCkgLy8kTk9OLU5MUy0xJAorCQkJCQkJCQkJKyAiLnR4dCI7IC8vJE5PTi1OTFMtMSQKKworCQkJCQkJCVV0aWxMb2dnZXIubG9nSW5mb3JtYXRpb24oIlx0XHRGaWxlbmFtZSAgPSAiICsgZmlsZU5hbWUpOyAvLyROT04tTkxTLTEkCisKKwkJCQkJCQkvLyBDcmVhdGUgdG5lIG5ldyBmaWxlCisJCQkJCQkJZGl2YUZpbGUgPSBHZW5VdGlscy5vcGVuV3JpdGVyKGZpbGVOYW1lKTsKKwkJCQkJCX0KKworCQkJCQkJLy8gQXBwbHkgdGhlIGZvcm1hdHRpbmcgdG8gdGhlIGN1cnJlbnQgYnVmZmVyIDogVU4KKwkJCQkJCS8vIEV1cm9wZSAtPiBEaXZhIGZvcm1hdAorCQkJCQkJU3RyaW5nIGRpdmFMaW5lID0gY29udmVydDJEaXZhKGlzb0NvZGUsIGl0ZW1zKTsKKworCQkJCQkJLy8gV3JpdGUgdGhlIGNvbnZlcnRlZCBsaW5lCisJCQkJCQlVdGlsTG9nZ2VyLmxvZ0luZm9ybWF0aW9uKCJcdFx0RGl2YSBzdHJpbmcgPSAiICsgZGl2YUxpbmUpOyAvLyROT04tTkxTLTEkCisJCQkJCQlHZW5VdGlscy5hZGREYXRhKGRpdmFGaWxlLCBkaXZhTGluZSk7CisKKwkJCQkJfS8vIHdoaWxlCisKKwkJCQkJLy8gUmVzZXQgSVNPIENvZGUKKwkJCQkJaXNvQ29kZSA9IG51bGw7CisKKwkJCQkJLy8gUmVzZXQgZmlsZSBuYW1lCisJCQkJCWZpbGVOYW1lID0gbnVsbDsKKworCQkJCQkvLyBDbG9zZSB0aGUgdGFyZ2V0IGZpbGUuCisJCQkJCWRpdmFGaWxlLmNsb3NlKCk7CisJCQkJCWRpdmFGaWxlID0gbnVsbDsKKworCQkJCQkvLyBDbG9zZSBhbGwgb3BlbiByZXNvdXJjZXMuCisJCQkJCXJlYWRlci5jbG9zZSgpOworCisJCQkJCS8vIFJ1biBnYXJiYWdlIGNvbGxlY3Rpb24KKwkJCQkJLy9TeXN0ZW0uZ2MoKTsKKworCQkJCX0KKworCQkJfSBjYXRjaCAoSU9FeGNlcHRpb24gZSkgeworCQkJCWUucHJpbnRTdGFja1RyYWNlKCk7CisJCQl9CisKKwkJfSAvLyBmb3IKKworCX0KKworCS8qKgorCSAqIENvbnZlcnQgdGhlIGJ1ZmZlciBnaXZlbiBpbiBVTiBFdXJvcGUgZm9ybWF0IGludG8gRGl2YSBmb3JtYXQKKwkgKiAKKwkgKiBAcGFyYW0gaXNvQ29kZQorCSAqICAgICAgICAgICAgSVNPIDMxNjYtMSBjb2RlCisJICogCisJICogQHBhcmFtIGRhdGEKKwkgKiAgICAgICAgICAgIGEgYnVmZmVyIHdpdGggZGF0YSBvbiBVTiBFdXJvcGUgZm9ybWF0CisJICogCisJICogQHJldHVybiBjb252ZXJ0ZWQgc3RyaW5nCisJICogCisJICovCisJcHVibGljIFN0cmluZyBjb252ZXJ0MkRpdmEoSVNPQ29kZTEgaXNvQ29kZSwgU3RyaW5nW10gZGF0YSkgeworCisJCS8vIE5VTUlELFNUUklELEFSRUEsUE9QMSxQT1AyLFBPUDMsUE9QNCxURU1QSUQsPC4uLnBvbHlnb24gZGF0YS4uLj4KKworCQkvLyAyMTg5LjAsTEksMS42MDAwMDAwMDAwMDAwMDAwMEUrMDIsMC4wLDAuMCxVTktOT1dOLDwuLi5wb2x5Z29uCisJCS8vIGRhdGEuLi4+CisKKwkJLy8gPEFMUEhBMyxDT1VOVFJZX05BTUUsQURNSU4xLDwuLi5wb2x5Z29uIGRhdGEuLi4+CisKKwkJLy8gQUdPLEFuZ29sYSxMdWFuZGEsPC4uLnBvbHlnb24gZGF0YS4uLj4KKworCQkvLyBUaGUgZm9ybWF0dGVkIHByZWZpeCBzdHJpbmcKKwkJU3RyaW5nIGRpdmFTdHJpbmcgPSAiIjsgLy8kTk9OLU5MUy0xJAorCisJCS8vIEdldCByZWxldmFudCBkYXRhIGZvciBjb252ZXJzaW9uLgorCQlEb3VibGUgdmFsID0gRG91YmxlLnBhcnNlRG91YmxlKGRhdGFbRXVyb3BlRGF0YUZvcm1hdHRpbmdIZWFkZXIuTlVNSURdKTsKKwkJU3RyaW5nIG51bUlEID0gU3RyaW5nLnZhbHVlT2YodmFsLmludFZhbHVlKCkpOworCQlTdHJpbmcgYWxwaGEyID0gaXNvQ29kZS5nZXRBbHBoYTIoKTsKKwkJU3RyaW5nIGFscGhhMyA9IGlzb0NvZGUuZ2V0QWxwaGEzKCk7CisKKwkJLy8gRmluZCB0aGUgbG9jYXRpb24gbmFtZSBiYXNlZCBvbiBpdHMgbnVtZXJpYyBJRAorCQlTdHJpbmcgbG9jYXRpb25fbmFtZSA9IEdlblV0aWxzLmdldEV1cm9wZWFuTG9jYXRpb24obnVtSUQsIG5hbWVzTGlzdCk7CisKKwkJLy8gRmluZCB0aGUgY291bnRyeSBuYW1lIGJhc2VkIG9uIHRoZSBhbHBoYSAyIGNvZGUuCisJCVN0cmluZyBjb3VudHJ5X25hbWUgPSBHZW5VdGlscy5nZXRDb3VudHJ5TmFtZShhbHBoYTIsIGNvZGVMaXN0KTsKKworCQkvLyBHZXQgdGhlIG51bWJlciBvZiBpdGVtcyBpbiB0aGUgYnVmZmVyCisJCWludCBsZW5ndGggPSBkYXRhLmxlbmd0aDsKKworCQkvLyBBZGQgZml4ZWQgZGF0YSB3ZSBhbHJlYWR5IGhhdmUgYXZhaWxhYmxlIDoKKwkJZGl2YVN0cmluZyA9IGFscGhhMyArICIsIiArIGNvdW50cnlfbmFtZSArICIsIiArIGxvY2F0aW9uX25hbWU7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAorCisJCS8vIENvbmNhdGVuYXRlIHBvbHlnb24gZGF0YSAtLSBpZ25vcmUgdGhlIGZpcnN0IGVpZ2h0IGl0ZW1zCisJCS8vIHdoaWNoIGFyZSBub24tcG9seWdvbiBkYXRhIDoKKwkJLy8gTlVNSUQsU1RSSUQsQVJFQSxQT1AxLFBPUDIsUE9QMyxQT1A0LFRFTVBJRCwKKwkJZm9yIChpbnQgaSA9IDg7IGkgPCBsZW5ndGg7IGkrKykgeworCisJCQlkaXZhU3RyaW5nICs9ICIsIiArIGRhdGFbaV07IC8vJE5PTi1OTFMtMSQKKworCQl9IC8vIGZvcgorCisJCS8vIEZpbmFsbHkgYWRkIGEgbmV3IGxpbmUgdG8gdGhlIHN0cmluZy4KKwkJZGl2YVN0cmluZyArPSAiXG4iOyAvLyROT04tTkxTLTEkCisKKwkJcmV0dXJuIGRpdmFTdHJpbmc7CisJfQorCisJLyoqCisJICogTWFpbiBleGVjdXRpb24gZW50cnkgcG9pbnQuCisJICogCisJICogQHBhcmFtIGFyZ3MKKwkgKi8KKwlwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CisJCS8vIGZpbmFsIGludCBJU09fMzE2Nl8xID0gMDsKKwkJLy8gZmluYWwgaW50IEVVUk9QRV9OQU1FUyA9IDE7CisJCS8vIGZpbmFsIGludCBUQVJHRVRfTElTVCA9IDI7CisJCS8vIGZpbmFsIGludCBPVVRQVVRfRElSID0gMzsKKwkJLy8gZmluYWwgaW50IFBBUkFNUyA9IDQ7CisJCS8vCisJCS8vIGlmIChhcmdzLmxlbmd0aCA8IFBBUkFNUykgeworCQkvLyBVdGlsTG9nZ2VyLmxvZ0luZm9ybWF0aW9uKCItLVdyb25nIGFyZ3VtZW50cy0tIik7IC8vJE5PTi1OTFMtMSQKKwkJLy8gU3lzdGVtLm91dAorCQkvLyAucHJpbnRsbigiXHRUbyBydW4sIHBsZWFzZSBwcm92aWRlIHRoZSBmb2xsb3dpbmcgYXJndW1lbnRzIDogIik7CisJCS8vIC8vJE5PTi1OTFMtMSQKKwkJLy8gVXRpbExvZ2dlci5sb2dJbmZvcm1hdGlvbigiXHRcdCBJU08gMzE2Ni0xIGZpbGUiKTsgLy8kTk9OLU5MUy0xJAorCQkvLyBVdGlsTG9nZ2VyLmxvZ0luZm9ybWF0aW9uKCJcdFx0IEV1cm9wZWFuIGxvY2F0aW9ucyBmaWxlIik7IC8vJE5PTi1OTFMtMSQKKwkJLy8gVXRpbExvZ2dlci5sb2dJbmZvcm1hdGlvbigiXHRcdCBUYXJnZXQgY291bnRyaWVzIGZpbGUiKTsgLy8kTk9OLU5MUy0xJAorCQkvLyBVdGlsTG9nZ2VyLmxvZ0luZm9ybWF0aW9uKCJcdFx0IE91dHB1dCBkaXJlY3RvcnkiKTsgLy8kTk9OLU5MUy0xJAorCQkvLyByZXR1cm47CisJCS8vIH0KKwkJLy8KKwkJLy8gRXVyb3BlRGF0YUNvbnZlcnRlciBjb252ZXJ0ZXIgPSBuZXcgRXVyb3BlRGF0YUNvbnZlcnRlcigKKwkJLy8gYXJnc1tJU09fMzE2Nl8xXSwgYXJnc1tFVVJPUEVfTkFNRVNdLCBhcmdzW1RBUkdFVF9MSVNUXSwKKwkJLy8gYXJnc1tPVVRQVVRfRElSXSk7CisJCS8vIGNvbnZlcnRlci5ydW4oKTsKKworCQlmaW5hbCBpbnQgQ09ORklHX0ZJTEUgPSAwOworCQlmaW5hbCBpbnQgUEFSQU1TID0gMTsKKworCQlpZiAoYXJncy5sZW5ndGggPCBQQVJBTVMpIHsKKwkJCVV0aWxMb2dnZXIubG9nSW5mb3JtYXRpb24oIlx0XHQtLVdyb25nIGFyZ3VtZW50cy0tIik7IC8vJE5PTi1OTFMtMSQKKwkJCVN5c3RlbS5vdXQKKwkJCQkJLnByaW50bG4oIlx0XHRUbyBydW4sIHBsZWFzZSBwcm92aWRlIHRoZSBmb2xsb3dpbmcgYXJndW1lbnQocykgOiAiKTsgLy8kTk9OLU5MUy0xJAorCQkJVXRpbExvZ2dlci5sb2dJbmZvcm1hdGlvbigiXHRcdFx0IENvbmZpZ3VyYXRpb24gZmlsZSIpOyAvLyROT04tTkxTLTEkCisJCQlTeXN0ZW0uZXhpdCgxKTsKKwkJfQorCisJCUV1cm9wZURhdGFDb252ZXJ0ZXIgY29udmVydGVyID0gbmV3IEV1cm9wZURhdGFDb252ZXJ0ZXIoCisJCQkJYXJnc1tDT05GSUdfRklMRV0pOworCQljb252ZXJ0ZXIucnVuKCk7CisJfQorCit9CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91dGlsaXR5L2dlbmVyYXRvcnMvRXVyb3BlRGF0YUV4dHJhY3Rvci5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdXRpbGl0eS9nZW5lcmF0b3JzL0V1cm9wZURhdGFFeHRyYWN0b3IuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZDVhYmUyCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdXRpbGl0eS9nZW5lcmF0b3JzL0V1cm9wZURhdGFFeHRyYWN0b3IuamF2YQpAQCAtMCwwICsxLDQzMiBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkuZ2VuZXJhdG9yczsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqYXZhLmlvLkJ1ZmZlcmVkUmVhZGVyOworaW1wb3J0IGphdmEuaW8uRmlsZTsKK2ltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOworaW1wb3J0IGphdmEuaW8uUHJpbnRXcml0ZXI7CitpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKK2ltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CitpbXBvcnQgamF2YS51dGlsLlNldDsKKworLyoqCisgKiBUaGlzIGNsYXNzIHdpbGwgZXh0cmFjdCBhcmVhIGFuZCBwb3B1bGF0aW9uIGRhdGEgZnJvbSB0aGUgRXVyb3BlYW4gZGF0YQorICogc291cmNlIGZpbGUgKEV1cm9wZVNvcnRlZC50eHQpLiBGb3IgZWFjaCBjb3VudHJ5LCBpdCB3aWxsIGdlbmVyYXRlIGJvdGggYW5kCisgKiBBUkVBIGFuZCBhIFBPUFVMQVRJT04gZmlsZXMgdW5kZXIKKyAqIG9yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eVxkYXRhTWlncmF0aW9uXGlucHV0XEFyZWFQb3B1bGF0aW9uRGF0YS4KKyAqIAorICogVG8gY29uZmlndXJlLCBzZWUgY29uZmlndXJhdGlvbiBmaWxlIDoKKyAqIG9yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9jb25maWd1cmF0aW9uL0V1cm9wZURhdGFFeHRyYWN0b3IuY29uZmlnCisgKiAKKyAqIAorICogVG8gcnVuLCBhZGQgcGF0aCB0byBjb25maWd1cmF0aW9uIGZpbGUgaW4gdGhlIHJ1biBwcm9maWxlIChpLmUuCisgKiBDOlxzdGVtSUlcb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5XGNvbmZpZ3VyYXRpb25cRXVyb3BlRGF0YUV4dHJhY3Rvci5jb25maWcpCisgKiAKKyAqIAorICogQWRkIHRoZSBmb2xsb3dpbmcgdmFsdWVzIHRvIHRoZSBydW4gY29uZmlndXJhdGlvbjoKKyAqIAorICogCisgKiBDOlxzdGVtSUlcb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5XGRhdGFNaWdyYXRpb25caW5wdXRcSVNPMzE2Ni0xXElTTzMxNjZfMV9lbi50eHQKKyAqIEM6XHN0ZW1JSVxvcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHlcZGF0YU1pZ3JhdGlvblxpbnB1dFxwcm9wZXJ0aWVzXEV1cm9wZU5hbWVzLnR4dAorICogQzpcc3RlbUlJXG9yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eVxkYXRhTWlncmF0aW9uXGlucHV0XHByb3BlcnRpZXNcRXVyb3BlQ291bnRyaWVzLnR4dAorICogQzpcc3RlbUlJXG9yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eVxkYXRhTWlncmF0aW9uXGlucHV0XEFyZWFQb3B1bGF0aW9uRGF0YVwKKyAqIAorICogT3ZlcnZpZXcgb2YgdGhlIGRhdGEgZ2VuZXJhdGlvbiBwcm9jZXNzIGZvciB0aGUgRXVyb3BlIGRhdGEgc2V0LgorICogCisgKiAxKSBEYXRhIENsZWFuaW5nIDogc3RhcnQgYnkgcnVubmluZyBFdXJvcGVEYXRhQ2xlYW5lci4gVGhpcyBwcm9ncmFtIHdpbGwKKyAqIHJlbW92ZSBhbGwgdW5uZWNlc2FyeSBkYXRhIChpLmUuIGNvbHVtbnMpIGluIHRoZSBvcmlnaW5hbCBzb3VyY2UgZmlsZS4gSW4KKyAqIGFkZGl0aW9uLCB0aGlzIHByb2dyYW0gd2lsbCBncm91cCB0aGUgZGF0YSBiYXNlZCBvbiBpdHMgSUQgKGkuZS4gTk8sSVQsRlIsVUssCisgKiBldGMpLiBUaGUgcmVzdWx0IHdpbGwgYmUgYSBmaWxlIG5hbWVkIEV1cm9wZVNvcnRlZC50eHQgd2l0aCBjbGVhbmVkIGRhdGEuCisgKiAKKyAqIEluIG90aGVyIHdvcmRzIDogRXVyb3BlLnR4dCAtLT4gfHxFdXJvcGVEYXRhQ2xlYW5lcnx8IC0tPiBFdXJvcGVTb3J0ZWQudHh0CisgKiAKKyAqIE5PVEU6IEV1cm9wZVNvcnRlZC50eHQgd2lsbCBiZSB1c2VkIGFzIHRoZSBpbnB1dCBmb3IgdGhlIHJlbWFpbmluZyBwYXJ0IG9mCisgKiB0aGUgcHJvY2Vzcy4KKyAqIAorICogMikgRGF0YSBGb3JtYXR0aW5nIDogcnVuIEV1cm9wZURhdGFGb3JtYXR0ZXIgdG8gYnJlYWsgZG93biB0aGUgZGF0YSBzb3VyY2UKKyAqIChFdXJvcGVTb3J0ZWQudHh0KSBpbnRvIG11bHRpcGxlIGRhdGEgZmlsZXMsIG9uZSBmb3IgZWFjaCBjb3VudHJ5IGFzCisgKiBpbmRpY2F0ZWQgYnkgdGhlIElEIChpLmUuIE5PLElULEZSLFVLLCBldGMpLiBUaGUgcmVzdWx0IHdpbGwgYmUgbXVsdGlwbGUgZGF0YQorICogZmlsZXMgKGkuZS4gaXRhbHkudHh0LCBzcGFpbi50eHQsIGV0YykuIEVhY2ggZmlsZSB3aWxsIGJlIGZvdW5kIHVuZGVyIGEKKyAqIGZvbGRlciB3aXRoIHNhbWUgbmFtZSBhcyB0aGUgY291bnRyeSAoaS5lLiBJVEFMWVxpdGFseS50eHQsIFNQQUlOXHNwYWluLnR4dCwKKyAqIGV0YykuCisgKiAKKyAqIDMpIERhdGEgQ29udmVydGVyIDogcnVuIEV1cm9wZURhdGFDb252ZXJ0ZXIgdG8gY29udmVydCBmaWxlIGluIGNsZWFuZWQgZm9ybWF0CisgKiBpbnRvIERpdmEgZm9ybWF0LgorICogCisgKiAKKyAqIDQpIEFyZWEgYW5kIFBvcHVsYXRpb24gRGF0YSBFeHRyYWN0aW9uIDogcnVuIEV1cm9wZURhdGFFeHRyYWN0b3IgdG8gZXh0cmFjdAorICogYWxsIGFyZWEgYW5kIHBvcHVsYXRpb24gZGF0YS4KKyAqIAorICogCisgKi8KKworcHVibGljIGNsYXNzIEV1cm9wZURhdGFFeHRyYWN0b3IgeworCisJLyoqCisJICogT3VyIHNvdXJjZSBmaWxlcyBmb3IgSVNPIDMxNjYtMSBjb2RlcyBhbmQgZm9yIHRoZSBsaXN0IG9mIHRhcmdldAorCSAqIGNvdW50cmllcy4KKwkgKi8KKwlwcml2YXRlIFN0cmluZyBpc28zMTY2XzEgPSBudWxsOworCisJcHJpdmF0ZSBTdHJpbmcgbmFtZXNGaWxlID0gbnVsbDsKKworCXByaXZhdGUgU3RyaW5nIHRhcmdldEZpbGUgPSBudWxsOworCisJcHJpdmF0ZSBTdHJpbmcgb3V0cHV0RGlyID0gbnVsbDsKKworCXByaXZhdGUgU3RyaW5nIHdvcmtzcGFjZSA9IG51bGw7CisKKwkvKioKKwkgKiBMaXN0IGZvciBJU08gMzE2Ni0xIGNvZGVzIGFuZCB0YXJnZXQgY291bnRyaWVzLgorCSAqLworCisJTGlzdCB0YXJnZXRMaXN0ID0gbnVsbDsKKworCUxpc3QgY29kZUxpc3QgPSBudWxsOworCisJTGlzdCBkYXRhTGlzdCA9IG51bGw7CisKKwlMaXN0IG5hbWVzTGlzdCA9IG51bGw7CisKKwkvKioKKwkgKiBDb25zdHJ1Y3RvcgorCSAqIAorCSAqIEBwYXJhbSBpc28zMTY2XzEgLQorCSAqICAgICAgICAgICAgZGF0YSBmaWxlIHdpdGggdGhlIElTTzMxNjYtMSBBTFBIQV8yIGFuZCBBTFBIQV8zIGNvZGVzLgorCSAqIEBwYXJhbSBuYW1lc0ZpbGUgLQorCSAqICAgICAgICAgICAgZmlsZXMgd2l0aCBhbGwgRXVyb3BlIGxldmVsIDEgbmFtZXMuCisJICogQHBhcmFtIHRhcmdldEZpbGUgLQorCSAqICAgICAgICAgICAgZGF0YSBmaWxlIHdoZXJlIHdlIGZpbmQgYSBsaXN0IG9mIGNvdW50cmllcyBmb3IgZ2VuZXJhdGlvbiBvZgorCSAqICAgICAgICAgICAgdGhlaXIgY29ycmVzcG9uZGluZyBhcmVhLnByb3BlcnRpZXMgZmlsZXMuCisJICogQHBhcmFtIG91dHB1dERpciAtCisJICogICAgICAgICAgICB0aGUgb3V0cHV0IGRpcmVjdG9yeSBmb3IgdGhlIGZpbGVzIGdlbmVyYXRlZC4KKwkgKiAKKwkgKi8KKwkvLyBwdWJsaWMgRXVyb3BlRGF0YUV4dHJhY3RvcihTdHJpbmcgaXNvMzE2Nl8xLCBTdHJpbmcgbmFtZXNGaWxlLAorCS8vIFN0cmluZyB0YXJnZXRGaWxlLCBTdHJpbmcgb3V0cHV0RGlyKSB7CisJLy8gLy8gU2V0IHZhbHVlcyBvZiBnbG9iYWwgdmFyaWFibGVzLgorCS8vIHRoaXMuaXNvMzE2Nl8xID0gaXNvMzE2Nl8xOworCS8vIHRoaXMubmFtZXNGaWxlID0gbmFtZXNGaWxlOworCS8vIHRoaXMudGFyZ2V0RmlsZSA9IHRhcmdldEZpbGU7CisJLy8gdGhpcy5vdXRwdXREaXIgPSBvdXRwdXREaXI7CisJLy8gdGFyZ2V0TGlzdCA9IG51bGw7CisJLy8gfQorCS8qKgorCSAqIEBwYXJhbSBjb25maWdGaWxlCisJICovCisJcHVibGljIEV1cm9wZURhdGFFeHRyYWN0b3IoU3RyaW5nIGNvbmZpZ0ZpbGUpIHsKKworCQkvLyBMb2FkIGFsbCBjb25maWd1cmF0aW9uIHZhcmlhYmxlcworCQlIYXNoTWFwPFN0cmluZywgU3RyaW5nPiB2YXJzID0gR2VuVXRpbHMubG9hZENvbmZpZ0ZpbGUoY29uZmlnRmlsZSk7CisKKwkJU2V0PFN0cmluZz4ga2V5cyA9IHZhcnMua2V5U2V0KCk7CisJCUl0ZXJhdG9yIGl0ID0ga2V5cy5pdGVyYXRvcigpOworCQl3aGlsZSAoaXQuaGFzTmV4dCgpKSB7CisJCQlTdHJpbmcgdmFyID0gKFN0cmluZykgaXQubmV4dCgpOworCisJCQkvLyBBc3NpZ24gdmFsdWVzIHRvIGNvbmZpZ3VyYXRpb24gdmFyaWFibGVzIDoKKwkJCWlmICh2YXIuZXF1YWxzKCJXT1JLU1BBQ0UiKSkgeyAvLyROT04tTkxTLTEkCisJCQkJd29ya3NwYWNlID0gdmFycy5nZXQodmFyKTsKKwkJCX0gZWxzZSBpZiAodmFyLmVxdWFscygiSVNPMzE2Nl8xIikpIHsgLy8kTk9OLU5MUy0xJAorCQkJCWlzbzMxNjZfMSA9IHZhcnMuZ2V0KHZhcik7CisJCQl9IGVsc2UgaWYgKHZhci5lcXVhbHMoIk5BTUVTX0ZJTEUiKSkgeyAvLyROT04tTkxTLTEkCisJCQkJbmFtZXNGaWxlID0gdmFycy5nZXQodmFyKTsKKwkJCX0gZWxzZSBpZiAodmFyLmVxdWFscygiVEFSR0VUX0xJU1QiKSkgeyAvLyROT04tTkxTLTEkCisJCQkJdGFyZ2V0RmlsZSA9IHZhcnMuZ2V0KHZhcik7CisJCQl9IGVsc2UgaWYgKHZhci5lcXVhbHMoIk9VVFBVVCIpKSB7IC8vJE5PTi1OTFMtMSQKKwkJCQlvdXRwdXREaXIgPSB2YXJzLmdldCh2YXIpOworCQkJfQorCisJCX0gLy8gd2hpbGUKKworCQkvLyBUaGUgd29ya3NwYWNlIHZhcmlhYmxlIHNob3VsZCBlbmQgd2l0aCBhIHNsYXNoIGNoYXJhY3RlcgorCQlpZiAod29ya3NwYWNlLmVuZHNXaXRoKCJcXCIpID09IGZhbHNlKSB7IC8vJE5PTi1OTFMtMSQKKwkJCXdvcmtzcGFjZSArPSAiXFwiOyAvLyROT04tTkxTLTEkCisJCX0KKworCQlTdHJpbmcgcGF0aCA9IHdvcmtzcGFjZSArIEdlbkNvbnN0YW50cy5QQVJBTVNfRElSOworCisJCS8vIFNldCByZW1haW5pbmcgY29uZmlnIHZhcnMgdXNpbmcgV09SS1NQQUNFICh3b3Jrc3BhY2UgcmVsYXRpdmUpCisJCWlmIChpc28zMTY2XzEgPT0gbnVsbCkgeworCQkJaXNvMzE2Nl8xID0gcGF0aCArIEdlbkNvbnN0YW50cy5JU08zMTY2XzFfRklMRTsKKwkJfQorCQlpZiAobmFtZXNGaWxlID09IG51bGwpIHsKKwkJCW5hbWVzRmlsZSA9IHBhdGggKyBHZW5Db25zdGFudHMuRVVST1BFX05BTUVTOworCQl9CisJCWlmICh0YXJnZXRGaWxlID09IG51bGwpIHsKKwkJCXRhcmdldEZpbGUgPSBwYXRoICsgR2VuQ29uc3RhbnRzLkVVUk9QRV9DT1VOVFJJRVM7CisJCX0KKwkJaWYgKG91dHB1dERpciA9PSBudWxsKSB7CisJCQlvdXRwdXREaXIgPSBHZW5Db25zdGFudHMuQVJFQV9QT1BVTEFUSU9OX0RJUjsKKwkJfQorCisJCXRhcmdldExpc3QgPSBudWxsOworCisJfQorCisJLyoqCisJICogVGhpcyBtZXRob2Qgc2V0cyB1cCBhbmQgcnVucyB0aGlzIGdlbmVyYXRvci4KKwkgKiAKKwkgKi8KKwlwdWJsaWMgdm9pZCBydW4oKSB7CisJCS8vIFJlYWQgYW5kIGtlZXAgaW4gbWVtb3J5IGEgbGlzdCBvZiB0aGUgY291bnRyaWVzIHdlIHdhbnQuCisJCXRhcmdldExpc3QgPSBHZW5VdGlscy5wb3B1bGF0ZUxpc3QodGFyZ2V0RmlsZSk7CisKKwkJLy8gUmVhZCBhbmQga2VlcCBpbiBtZW1vcnkgYSBsaXN0IG9mIHRoZSBJU08zMTY2LTEgQUxQSEEyLCBBTFBIQTMsIGFuZAorCQkvLyBudW1lcmljIGNvZGVzLgorCQljb2RlTGlzdCA9IEdlblV0aWxzLnBvcHVsYXRlTGlzdChpc28zMTY2XzEpOworCisJCS8vIExvYWQgYWxsIGxldmVsIDEgbmFtZXMgZm9yIEV1cm9wZS4KKwkJbmFtZXNMaXN0ID0gR2VuVXRpbHMucG9wdWxhdGVMaXN0KG5hbWVzRmlsZSk7CisKKwkJLy8gUnVuIHRoZSBjb252ZXJ0ZXI6IFVOIEV1cm9wZSAtPiBEaXZhIHNldCBmb3JtYXQKKwkJcHJvY2VzcygpOworCX0KKworCS8qKgorCSAqIAorCSAqIEdlbmVyYXRlIGFyZWEgYW5kIHBvcHVsYXRpb24gZmlsZXMgZnJvbSBkYXRhIGV4dHJhY3RlZCBmcm9tCisJICogRXVyb3BlU29ydGVkLnR4dCBUaGUgYXJlYSBhbmQgcG9wdWxhdGlvbiBmaWxlcyB3aWxsIGJlIHVzZWQgYnkgdGhlCisJICogZ2VuZXJhdG9ycyB0byBwcm9kdWNlIHRoZSBwcm9wZXJ0eSBmaWxlcy4KKwkgKiAKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBwcm9jZXNzKCkgeworCisJCUFycmF5TGlzdDxTdHJpbmc+IHJlcGVhdGVkID0gbmV3IEFycmF5TGlzdDxTdHJpbmc+KCk7CisKKwkJLy8gQSB3cml0ZXIgZm9yIHRoZSBuZXcgZmlsZSB3ZSBhcmUgY3JlYXRpbmcuCisJCVByaW50V3JpdGVyIGFyZWFGaWxlID0gbnVsbDsKKwkJUHJpbnRXcml0ZXIgcG9wRmlsZSA9IG51bGw7CisKKwkJLy8gT2JqZWN0IGhvbGRpbmcgSVNPMzE2Ni0xIHJlbGF0ZWQgZGF0YS4KKwkJSVNPQ29kZTEgaXNvQ29kZSA9IG51bGw7CisKKwkJLy8gTmFtZSBvZiB0aGUgbmV3IHByb3BlcnRpZXMgZmlsZS4KKwkJU3RyaW5nIGZpbGVOYW1lID0gbnVsbDsKKworCQlpbnQgc2l6ZSA9IHRhcmdldExpc3Quc2l6ZSgpOworCisJCS8vIEZvciBldmVyeSBjb3VudHJ5CisJCWZvciAoaW50IGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7CisKKwkJCS8vIEdldCB0aGUgbmV4dCBmaWxlIGluIHRoZSBsaXN0LgorCQkJU3RyaW5nIGZpbGUgPSAoKFN0cmluZykgdGFyZ2V0TGlzdC5nZXQoaSkpLnRyaW0oKTsKKworCQkJLy8gT3BlbiB0aGUgZGF0YSBzb3VyY2UgZmlsZSBmb3IgdGhpcyBjb3VudHJ5LgorCQkJQnVmZmVyZWRSZWFkZXIgcmVhZGVyID0gR2VuVXRpbHMub3BlblJlYWRlcihmaWxlKTsKKwkJCVN5c3RlbS5vdXQKKwkJCQkJLnByaW50bG4oIlx0XHQ8PDw8IEVVUk9QRSBEQVRBIEVYVFJBQ1RPUiAtLSBQcm9jZXNzaW5nIENvdW50cnkgOiAiICsgZmlsZSArICIgPj4+PiIpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKKworCQkJdHJ5IHsKKworCQkJCWlmIChyZWFkZXIgIT0gbnVsbCkgeworCisJCQkJCVN0cmluZyBidWZmZXIgPSBudWxsOworCisJCQkJCS8vIFdlIHRha2UgYSBjaHVuayBvZiB0aGUgZGF0YSBbQlVGRkVSX01JTixCVUZGRVJfTUFYXSB0bworCQkJCQkvLyBtYWtlIHByb2Nlc3NpbmcgbW9yZQorCQkJCQkvLyBlZmZpY2llbnQsIHdlIGRvbnQgbmVlZCBhbGwgb2YgaXQuCisJCQkJCWludCBCVUZGRVJfTUlOID0gMDsKKwkJCQkJaW50IEJVRkZFUl9NQVggPSAyMDA7CisKKwkJCQkJd2hpbGUgKEdlblV0aWxzLkVPRihidWZmZXIgPSByZWFkZXIucmVhZExpbmUoKSkgIT0gdHJ1ZSkgeworCisJCQkJCQkvLyBNYWtlIHN1cmUgdGhhdCB3ZSBtYXJrIGFsbCB1bmtub3duIGRhdGEuCisJCQkJCQlidWZmZXIgPSBidWZmZXIucmVwbGFjZSgiLCwiLCAiLFVOS05PV04sIik7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAorCisJCQkJCQkvLyBVc2Ugb25seSBwYXJ0IG9mIHRoZSBidWZmZXIsIG5vdCBhbGwgb2YgaXQgZm9yCisJCQkJCQkvLyBlZmZpY2llbmN5LgorCQkJCQkJaW50IG1heCA9IChidWZmZXIubGVuZ3RoKCkgPiBCVUZGRVJfTUFYKSA/IEJVRkZFUl9NQVgKKwkJCQkJCQkJOiBidWZmZXIubGVuZ3RoKCk7CisJCQkJCQlTdHJpbmdbXSBpdGVtcyA9IGJ1ZmZlci5zdWJzdHJpbmcoQlVGRkVSX01JTiwgbWF4KQorCQkJCQkJCQkuc3BsaXQoIiwiKTsgLy8kTk9OLU5MUy0xJAorCisJCQkJCQkvLyBHZXQgdGhlIElTTzMxNjYtMSBpbmZvIGZvciB0aGlzIGNvdW50cnkKKwkJCQkJCWlmIChpc29Db2RlID09IG51bGwpIHsKKwkJCQkJCQlTdHJpbmcgY291bnRyeSA9IEdlblV0aWxzLmdldENvdW50cnlOYW1lKAorCQkJCQkJCQkJaXRlbXNbRXVyb3BlRGF0YUZvcm1hdHRpbmdIZWFkZXIuU1RSSURdCisJCQkJCQkJCQkJCS5zdWJzdHJpbmcoMCwgMiksIGNvZGVMaXN0KTsKKwkJCQkJCQlpc29Db2RlID0gR2VuVXRpbHMuZ2V0SVNPQ29kZShjb3VudHJ5LCBjb2RlTGlzdCk7CisJCQkJCQl9CisKKwkJCQkJCS8vIElmIHRoZSBkaXJlY3RvcnkgZG9lcyBub3QgZXhpc3QgZm9yIHRoaXMgY291bnRyeSwKKwkJCQkJCS8vIGNyZWF0ZSBpdCB1c2luZyBJU08gYWxwaGEzIGNvZGUuCisJCQkJCQlGaWxlIGNvdW50cnlEaXIgPSBuZXcgRmlsZShvdXRwdXREaXIpOworCisJCQkJCQlpZiAoY291bnRyeURpciAhPSBudWxsICYmIGNvdW50cnlEaXIuZXhpc3RzKCkgPT0gZmFsc2UpIHsKKwkJCQkJCQkvLyBEaXJlY3RvcnkgZG9lcyBub3QgZXhpc3QuIENyZWF0ZSBpdC4KKwkJCQkJCQljb3VudHJ5RGlyLm1rZGlyKCk7CisJCQkJCQl9CisKKwkJCQkJCS8vIENyZWF0ZSBhbmQgb3BlbiBhIG5ldyBhcmVhIGZpbGUuCisJCQkJCQlpZiAoYXJlYUZpbGUgPT0gbnVsbCkgeworCQkJCQkJCS8vIENyZWF0ZSB0aGUgZmlsZSBuYW1lCisJCQkJCQkJZmlsZU5hbWUgPSBjb3VudHJ5RGlyICsgIlxcIiArIGlzb0NvZGUuZ2V0TmFtZSgpIC8vJE5PTi1OTFMtMSQKKwkJCQkJCQkJCSsgIl9BUkVBLnR4dCI7IC8vJE5PTi1OTFMtMSQKKworCQkJCQkJCS8vIENyZWF0ZSB0bmUgbmV3IGZpbGUKKwkJCQkJCQlhcmVhRmlsZSA9IEdlblV0aWxzLm9wZW5Xcml0ZXIoZmlsZU5hbWUpOworCQkJCQkJfQorCisJCQkJCQkvLyBTaW1pbGFybHksIGNyZWF0ZSBhbmQgb3BlbiBhIG5ldyBwb3B1bGF0aW9uIGZpbGUuCisJCQkJCQlpZiAocG9wRmlsZSA9PSBudWxsKSB7CisJCQkJCQkJLy8gQ3JlYXRlIHRoZSBmaWxlIG5hbWUKKwkJCQkJCQlmaWxlTmFtZSA9IGNvdW50cnlEaXIgKyAiXFwiICsgaXNvQ29kZS5nZXROYW1lKCkgLy8kTk9OLU5MUy0xJAorCQkJCQkJCQkJKyAiX1BPUFVMQVRJT04udHh0IjsgLy8kTk9OLU5MUy0xJAorCisJCQkJCQkJLy8gQ3JlYXRlIHRuZSBuZXcgZmlsZQorCQkJCQkJCXBvcEZpbGUgPSBHZW5VdGlscy5vcGVuV3JpdGVyKGZpbGVOYW1lKTsKKwkJCQkJCX0KKworCQkJCQkJLy8gRXh0cmFjdCBhcmVhIHZhbHVlCisJCQkJCQlTdHJpbmcgYXJlYSA9IGl0ZW1zW0V1cm9wZURhdGFGb3JtYXR0aW5nSGVhZGVyLkFSRUFdOworCisJCQkJCQkvLyBFeHRyYWN0IHBvcHVsYXRpb24gdmFsdWUKKwkJCQkJCVN0cmluZyBwb3AxID0gaXRlbXNbRXVyb3BlRGF0YUZvcm1hdHRpbmdIZWFkZXIuUE9QMV07CisJCQkJCQlTdHJpbmcgcG9wMiA9IGl0ZW1zW0V1cm9wZURhdGFGb3JtYXR0aW5nSGVhZGVyLlBPUDJdOworCQkJCQkJU3RyaW5nIHBvcDMgPSBpdGVtc1tFdXJvcGVEYXRhRm9ybWF0dGluZ0hlYWRlci5QT1AzXTsKKwkJCQkJCVN0cmluZyBwb3A0ID0gaXRlbXNbRXVyb3BlRGF0YUZvcm1hdHRpbmdIZWFkZXIuUE9QNF07CisKKwkJCQkJCS8vIEZpbmQgbG9jYXRpb24gbmFtZQorCQkJCQkJLy8gR2V0IHJlbGV2YW50IGRhdGEgZm9yIGNvbnZlcnNpb24uCisJCQkJCQlEb3VibGUgdmFsID0gRG91YmxlCisJCQkJCQkJCS5wYXJzZURvdWJsZShpdGVtc1tFdXJvcGVEYXRhRm9ybWF0dGluZ0hlYWRlci5OVU1JRF0pOworCQkJCQkJU3RyaW5nIG51bUlEID0gU3RyaW5nLnZhbHVlT2YodmFsLmludFZhbHVlKCkpOworCisJCQkJCQkvLyBGaW5kIHRoZSBsb2NhdGlvbiBuYW1lIGJhc2VkIG9uIGl0cyBudW1lcmljIElECisJCQkJCQlTdHJpbmcgbG9jYXRpb24gPSBHZW5VdGlscy5nZXRFdXJvcGVhbkxvY2F0aW9uKG51bUlELAorCQkJCQkJCQluYW1lc0xpc3QpOworCisJCQkJCQlpZiAocmVwZWF0ZWQuY29udGFpbnMobG9jYXRpb24pKSB7CisJCQkJCQkJY29udGludWU7CisJCQkJCQl9CisJCQkJCQkvLyByZW1lbWJlciB0aGlzIGVsZW1lbnQKKwkJCQkJCXJlcGVhdGVkLmFkZChsb2NhdGlvbik7CisKKwkJCQkJCVN0cmluZyBwb3AgPSBudWxsOworCisJCQkJCQkvLyBHZXQgZmlyc3QgdGhlIG1vc3QgdXAtdG8tZGF0ZSBwb3B1bGF0aW9uIHZhbHVlLiBJZiBpdAorCQkJCQkJLy8gaXMgemVybywgdGhlbiBnZXQgbmV4dAorCQkJCQkJLy8gb25lIGFuZCBzbyBvbi4gUE9QNCBpcyB0aGUgbW9zdCB1cC10by1kYXRlIHZhbHVlLgorCQkJCQkJcG9wID0gcG9wNDsKKworCQkJCQkJaWYgKERvdWJsZS5wYXJzZURvdWJsZShwb3ApID09IDAuMCkgeworCQkJCQkJCXBvcCA9IHBvcDM7CisJCQkJCQl9CisKKwkJCQkJCWlmIChEb3VibGUucGFyc2VEb3VibGUocG9wKSA9PSAwLjApIHsKKwkJCQkJCQlwb3AgPSBwb3AyOworCQkJCQkJfQorCisJCQkJCQlpZiAoRG91YmxlLnBhcnNlRG91YmxlKHBvcCkgPT0gMC4wKSB7CisJCQkJCQkJLy8gVGhpcyBpcyB0aGUgbW9zdCBvdXRkYXRlZCB2YWx1ZSwgYnV0IHRoZXJlIGlzIG5vCisJCQkJCQkJLy8gb3RoZXIgY2hvaWNlLgorCQkJCQkJCXBvcCA9IHBvcDE7CisJCQkJCQl9CisKKwkJCQkJCWlmIChEb3VibGUucGFyc2VEb3VibGUocG9wKSA8PSAwLjApIHsKKwkJCQkJCQlTeXN0ZW0ub3V0CisJCQkJCQkJCQkucHJpbnRsbigiXHRcdFBvcHVsYXRpb24gaXMgemVybyBmb3IgbG9jYXRpb24gOiAiIC8vJE5PTi1OTFMtMSQKKwkJCQkJCQkJCQkJKyBpdGVtc1tFdXJvcGVEYXRhRm9ybWF0dGluZ0hlYWRlci5TVFJJRF0pOworCQkJCQkJfQorCisJCQkJCQlpZiAoRG91YmxlLnZhbHVlT2YoYXJlYSkgPCAxLjApIHsKKwkJCQkJCQlhcmVhID0gIjEuMCI7IC8vJE5PTi1OTFMtMSQKKwkJCQkJCX0KKworCQkJCQkJLy8gV3JpdGUgYXJlYSB2YWx1ZQorCQkJCQkJR2VuVXRpbHMuYWRkRGF0YShhcmVhRmlsZSwgbG9jYXRpb24gKyAiIDogMSA6ICIgLy8kTk9OLU5MUy0xJAorCQkJCQkJCQkrIERvdWJsZS52YWx1ZU9mKGFyZWEpICsgIlxuIik7IC8vJE5PTi1OTFMtMSQKKworCQkJCQkJLy8gV3JpdGUgcG9wdWxhdGlvbiB2YWx1ZQorCQkJCQkJR2VuVXRpbHMuYWRkRGF0YShwb3BGaWxlLCBsb2NhdGlvbiArICIgOiAxIDogIiAvLyROT04tTkxTLTEkCisJCQkJCQkJCSsgRG91YmxlLnZhbHVlT2YocG9wKS5pbnRWYWx1ZSgpICsgIlxuIik7IC8vJE5PTi1OTFMtMSQKKworCQkJCQl9Ly8gd2hpbGUKKworCQkJCQkvLyBSZXNldCBJU08gQ29kZQorCQkJCQlpc29Db2RlID0gbnVsbDsKKworCQkJCQkvLyBSZXNldCBmaWxlIG5hbWUKKwkJCQkJZmlsZU5hbWUgPSBudWxsOworCisJCQkJCS8vIENsb3NlIHRoZSB0YXJnZXQgZmlsZXMuCisJCQkJCWFyZWFGaWxlLmNsb3NlKCk7CisJCQkJCWFyZWFGaWxlID0gbnVsbDsKKwkJCQkJcG9wRmlsZS5jbG9zZSgpOworCQkJCQlwb3BGaWxlID0gbnVsbDsKKworCQkJCQkvLyBDbG9zZSBhbGwgb3BlbiByZXNvdXJjZXMuCisJCQkJCXJlYWRlci5jbG9zZSgpOworCisJCQkJCS8vIFJ1biBnYXJiYWdlIGNvbGxlY3Rpb24KKwkJCQkJLy9TeXN0ZW0uZ2MoKTsKKworCQkJCX0KKworCQkJfSBjYXRjaCAoSU9FeGNlcHRpb24gZSkgeworCQkJCWUucHJpbnRTdGFja1RyYWNlKCk7CisJCQl9CisKKwkJfSAvLyBmb3IKKworCX0KKworCS8qKgorCSAqIE1haW4gZXhlY3V0aW9uIGVudHJ5IHBvaW50LgorCSAqIAorCSAqIEBwYXJhbSBhcmdzCisJICovCisJcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgeworCQkvLyBmaW5hbCBpbnQgSVNPXzMxNjZfMSA9IDA7CisJCS8vIGZpbmFsIGludCBFVVJPUEVfTkFNRVMgPSAxOworCQkvLyBmaW5hbCBpbnQgVEFSR0VUX0xJU1QgPSAyOworCQkvLyBmaW5hbCBpbnQgT1VUUFVUX0RJUiA9IDM7CisJCS8vIGZpbmFsIGludCBQQVJBTVMgPSA0OworCQkvLworCQkvLyBpZiAoYXJncy5sZW5ndGggPCBQQVJBTVMpIHsKKwkJLy8gVXRpbExvZ2dlci5sb2dJbmZvcm1hdGlvbigiLS1Xcm9uZyBhcmd1bWVudHMtLSIpOyAvLyROT04tTkxTLTEkCisJCS8vIFN5c3RlbS5vdXQKKwkJLy8gLnByaW50bG4oIlx0VG8gcnVuLCBwbGVhc2UgcHJvdmlkZSB0aGUgZm9sbG93aW5nIGFyZ3VtZW50cyA6ICIpOworCQkvLyAvLyROT04tTkxTLTEkCisJCS8vIFV0aWxMb2dnZXIubG9nSW5mb3JtYXRpb24oIlx0XHQgSVNPIDMxNjYtMSBmaWxlIik7IC8vJE5PTi1OTFMtMSQKKwkJLy8gVXRpbExvZ2dlci5sb2dJbmZvcm1hdGlvbigiXHRcdCBFdXJvcGVhbiBsb2NhdGlvbnMgZmlsZSIpOyAvLyROT04tTkxTLTEkCisJCS8vIFV0aWxMb2dnZXIubG9nSW5mb3JtYXRpb24oIlx0XHQgVGFyZ2V0IGNvdW50cmllcyBmaWxlIik7IC8vJE5PTi1OTFMtMSQKKwkJLy8gVXRpbExvZ2dlci5sb2dJbmZvcm1hdGlvbigiXHRcdCBPdXRwdXQgZGlyZWN0b3J5Iik7IC8vJE5PTi1OTFMtMSQKKwkJLy8gcmV0dXJuOworCQkvLyB9CisKKwkJLy8gRXVyb3BlRGF0YUV4dHJhY3RvciBjb252ZXJ0ZXIgPSBuZXcgRXVyb3BlRGF0YUV4dHJhY3RvcigKKwkJLy8gYXJnc1tJU09fMzE2Nl8xXSwgYXJnc1tFVVJPUEVfTkFNRVNdLCBhcmdzW1RBUkdFVF9MSVNUXSwKKwkJLy8gYXJnc1tPVVRQVVRfRElSXSk7CisJCS8vIGNvbnZlcnRlci5ydW4oKTsKKworCQlmaW5hbCBpbnQgQ09ORklHX0ZJTEUgPSAwOworCQlmaW5hbCBpbnQgUEFSQU1TID0gMTsKKworCQlpZiAoYXJncy5sZW5ndGggPCBQQVJBTVMpIHsKKwkJCVV0aWxMb2dnZXIubG9nSW5mb3JtYXRpb24oIlx0XHQtLVdyb25nIGFyZ3VtZW50cy0tIik7IC8vJE5PTi1OTFMtMSQKKwkJCVN5c3RlbS5vdXQKKwkJCQkJLnByaW50bG4oIlx0XHRUbyBydW4sIHBsZWFzZSBwcm92aWRlIHRoZSBmb2xsb3dpbmcgYXJndW1lbnQocykgOiAiKTsgLy8kTk9OLU5MUy0xJAorCQkJVXRpbExvZ2dlci5sb2dJbmZvcm1hdGlvbigiXHRcdFx0IENvbmZpZ3VyYXRpb24gZmlsZSIpOyAvLyROT04tTkxTLTEkCisJCQlTeXN0ZW0uZXhpdCgxKTsKKwkJfQorCisJCUV1cm9wZURhdGFFeHRyYWN0b3IgZXh0cmFjdG9yID0gbmV3IEV1cm9wZURhdGFFeHRyYWN0b3IoCisJCQkJYXJnc1tDT05GSUdfRklMRV0pOworCQlleHRyYWN0b3IucnVuKCk7CisJfQorCit9CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91dGlsaXR5L2dlbmVyYXRvcnMvRXVyb3BlRGF0YUZvcm1hdHRlci5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdXRpbGl0eS9nZW5lcmF0b3JzL0V1cm9wZURhdGFGb3JtYXR0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZDY3YWVkCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdXRpbGl0eS9nZW5lcmF0b3JzL0V1cm9wZURhdGFGb3JtYXR0ZXIuamF2YQpAQCAtMCwwICsxLDM3MCBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkuZ2VuZXJhdG9yczsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqYXZhLmlvLkJ1ZmZlcmVkUmVhZGVyOworaW1wb3J0IGphdmEuaW8uRmlsZTsKK2ltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOworaW1wb3J0IGphdmEuaW8uUHJpbnRXcml0ZXI7CitpbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7CitpbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOworaW1wb3J0IGphdmEudXRpbC5MaXN0OworaW1wb3J0IGphdmEudXRpbC5TZXQ7CisKKy8qKgorICogCisgKiBTVEVNIElJIERhdGEgTWlncmF0aW9uL0dlbmVyYXRpb24gVXRpbGl0aWVzIDogSW5zdGFuY2VzIG9mIHRoaXMgdXRpbGl0eSBjbGFzcworICogd2lsbCB0YWtlIGFzIGlucHV0IHRoZSBjbGVhbmVkIGRhdGEgc291cmNlIGZpbGUgZm9yIEV1cm9wZSAoRXVyb3BlU29ydGVkLnR4dCkKKyAqIGFuZCB3aWxsIGJyZWFrIGl0IGludG8gbXVsdGlwbGUgZGF0YSBmaWxlcywgb25lIGZvciBlYWNoIEV1cm9wZWFuIGNvdW50cnkgaW4KKyAqIHRoZSBkYXRhc2V0LiBUaGUgbmV3IG91dHB1dCBkYXRhIGZpbGVzIHdpbGwgYmUgY3JlYXRlZCB1bmRlciA6CisgKiBDOlxzdGVtSUlcb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5XGRhdGFNaWdyYXRpb25cb3V0cHV0CisgKiAKKyAqIAorICogVG8gY29uZmlndXJlLCBzZWUgY29uZmlndXJhdGlvbiBmaWxlIDoKKyAqIG9yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9jb25maWd1cmF0aW9uL0V1cm9wZURhdGFGb3JtYXR0ZXIuY29uZmlnCisgKiAKKyAqIAorICogVG8gcnVuLCBhZGQgcGF0aCB0byBjb25maWd1cmF0aW9uIGZpbGUgaW4gdGhlIHJ1biBwcm9maWxlIChpLmUuCisgKiBDOlxzdGVtSUlcb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5XGNvbmZpZ3VyYXRpb25cRXVyb3BlRGF0YUZvcm1hdHRlci5jb25maWcpCisgKiAKKyAqIAorICogCisgKiBBZGQgdGhlIGZvbGxvd2luZyB2YWx1ZXMgdG8gdGhlIHJ1biBjb25maWd1cmF0aW9uOgorICogCisgKiBDOlxzdGVtSUlcb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5XGRhdGFNaWdyYXRpb25caW5wdXRcSVNPMzE2Ni0xXElTTzMxNjZfMV9lbi50eHQKKyAqIEM6XHN0ZW1JSVxvcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHlcZGF0YU1pZ3JhdGlvblxpbnB1dFxJU09GaXhcSVNPX0xFVkVMMV9GSVgudHh0CisgKiBDOlxzdGVtSUlcb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5XGRhdGFNaWdyYXRpb25caW5wdXRccHJvcGVydGllc1xFdXJvcGVDb3VudHJpZXMudHh0CisgKiBDOlxzdGVtSUlcb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5XGRhdGFNaWdyYXRpb25cb3V0cHV0XAorICogCisgKiBCcmllZiBvdmVydmlldyBvZiB0aGUgZGF0YSBnZW5lcmF0aW9uIHByb2Nlc3MgZm9yIHRoZSBFdXJvcGUgZGF0YSBzZXQuCisgKiAKKyAqIDEpIERhdGEgQ2xlYW5pbmcgOiBzdGFydCBieSBydW5uaW5nIEV1cm9wZURhdGFDbGVhbmVyLiBUaGlzIHByb2dyYW0gd2lsbAorICogcmVtb3ZlIGFsbCB1bm5lY2VzYXJ5IGRhdGEgKGkuZS4gY29sdW1ucykgaW4gdGhlIG9yaWdpbmFsIHNvdXJjZSBmaWxlLiBJbgorICogYWRkaXRpb24sIHRoaXMgcHJvZ3JhbSB3aWxsIGdyb3VwIHRoZSBkYXRhIGJhc2VkIG9uIGl0cyBJRCAoaS5lLiBOTyxJVCxGUixVSywKKyAqIGV0YykuIFRoZSByZXN1bHQgd2lsbCBiZSBhIGZpbGUgbmFtZWQgRXVyb3BlU29ydGVkLnR4dCB3aXRoIGNsZWFuZWQgZGF0YS4KKyAqIAorICogSW4gb3RoZXIgd29yZHMgOiBFdXJvcGUudHh0IC0tPiB8fEV1cm9wZURhdGFDbGVhbmVyfHwgLS0+IEV1cm9wZVNvcnRlZC50eHQKKyAqIAorICogTk9URTogRXVyb3BlU29ydGVkLnR4dCB3aWxsIGJlIHVzZWQgYXMgdGhlIGlucHV0IGZvciB0aGUgcmVtYWluaW5nIHBhcnQgb2YKKyAqIHRoZSBwcm9jZXNzLgorICogCisgKiAyKSBEYXRhIEZvcm1hdHRpbmcgOiBydW4gRXVyb3BlRGF0YUZvcm1hdHRlciB0byBicmVhayBkb3duIHRoZSBkYXRhIHNvdXJjZQorICogKEV1cm9wZVNvcnRlZC50eHQpIGludG8gbXVsdGlwbGUgZGF0YSBmaWxlcywgb25lIGZvciBlYWNoIGNvdW50cnkgYXMKKyAqIGluZGljYXRlZCBieSB0aGUgSUQgKGkuZS4gTk8sSVQsRlIsVUssIGV0YykuIFRoZSByZXN1bHQgd2lsbCBiZSBtdWx0aXBsZSBkYXRhCisgKiBmaWxlcyAoaS5lLiBpdGFseS50eHQsIHNwYWluLnR4dCwgZXRjKS4gRWFjaCBmaWxlIHdpbGwgYmUgZm91bmQgdW5kZXIgYQorICogZm9sZGVyIHdpdGggc2FtZSBuYW1lIGFzIHRoZSBjb3VudHJ5IChpLmUuIElUQUxZXGl0YWx5LnR4dCwgU1BBSU5cc3BhaW4udHh0LAorICogZXRjKS4KKyAqIAorICogMykgRGF0YSBDb252ZXJ0ZXIgOiBydW4gRXVyb3BlRGF0YUNvbnZlcnRlciB0byBjb252ZXJ0IGZpbGUgaW4gY2xlYW5lZCBmb3JtYXQKKyAqIGludG8gRGl2YSBmb3JtYXQuCisgKiAKKyAqIAorICogNCkgQXJlYSBhbmQgUG9wdWxhdGlvbiBEYXRhIEV4dHJhY3Rpb24gOiBydW4gRXVyb3BlRGF0YUV4dHJhY3RvciB0byBleHRyYWN0CisgKiBhbGwgYXJlYSBhbmQgcG9wdWxhdGlvbiBkYXRhLgorICogCisgKiAKKyAqLworcHVibGljIGNsYXNzIEV1cm9wZURhdGFGb3JtYXR0ZXIgeworCisJLyoqCisJICogT3VyIHNvdXJjZSBmaWxlcyBmb3IgSVNPIDMxNjYtMSBjb2RlcyBhbmQgZm9yIHRoZSBsaXN0IG9mIHRhcmdldAorCSAqIGNvdW50cmllcy4KKwkgKi8KKworCXByaXZhdGUgU3RyaW5nIGlzbzMxNjZfMSA9IG51bGw7CisKKwlwcml2YXRlIFN0cmluZyBmaXhGaWxlID0gbnVsbDsKKworCXByaXZhdGUgU3RyaW5nIHRhcmdldEZpbGUgPSBudWxsOworCisJcHJpdmF0ZSBTdHJpbmcgb3V0cHV0RGlyID0gbnVsbDsKKworCXByaXZhdGUgU3RyaW5nIHdvcmtzcGFjZSA9IG51bGw7CisKKwkvKioKKwkgKiBMaXN0IGZvciBJU08gMzE2Ni0xIGNvZGVzIGFuZCB0YXJnZXQgY291bnRyaWVzLgorCSAqLworCUxpc3Q8U3RyaW5nPiB0YXJnZXRMaXN0ID0gbnVsbDsKKworCUxpc3Q8U3RyaW5nPiBjb2RlTGlzdCA9IG51bGw7CisKKwlMaXN0PFN0cmluZz4gY29kZWZpeExpc3QgPSBudWxsOworCisJLyoqCisJICogSGFzaCBtYXAgdG8ga2VlcCB0cmFjayBvZiBwb2x5Z29ucy4KKwkgKi8KKwlIYXNoTWFwPFN0cmluZywgU3RyaW5nPiBtYXAgPSBudWxsOworCisJLyoqCisJICogQ29uc3RydWN0b3IKKwkgKiAKKwkgKiBAcGFyYW0gaXNvMzE2Nl8xIC0KKwkgKiAgICAgICAgICAgIGRhdGEgZmlsZSB3aXRoIHRoZSBJU08zMTY2LTEgQUxQSEFfMiBhbmQgQUxQSEFfMyBjb2Rlcy4KKwkgKiBAcGFyYW0gZml4RmlsZSAtCisJICogICAgICAgICAgICBmaWxlIGNvbnRhaW5pbmcgbWlzc2luZyBJU08zMTY2LTIgY29kZXMKKwkgKiBAcGFyYW0gdGFyZ2V0RmlsZSAtCisJICogICAgICAgICAgICBkYXRhIGZpbGUgd2hlcmUgd2UgZmluZCBhIGxpc3Qgb2YgY291bnRyaWVzIGZvciBnZW5lcmF0aW9uIG9mCisJICogICAgICAgICAgICB0aGVpciBjb3JyZXNwb25kaW5nIGFyZWEucHJvcGVydGllcyBmaWxlcy4KKwkgKiBAcGFyYW0gb3V0cHV0RGlyIC0KKwkgKiAgICAgICAgICAgIHRoZSBvdXRwdXQgZGlyZWN0b3J5IGZvciB0aGUgZmlsZXMgZ2VuZXJhdGVkLgorCSAqIAorCSAqLworCS8vIHB1YmxpYyBFdXJvcGVEYXRhRm9ybWF0dGVyKFN0cmluZyBpc28zMTY2XzEsIFN0cmluZyBmaXhGaWxlLAorCS8vIFN0cmluZyB0YXJnZXRGaWxlLCBTdHJpbmcgb3V0cHV0RGlyKSB7CisJLy8gLy8gU2V0IHZhbHVlcyBvZiBnbG9iYWwgdmFyaWFibGVzLgorCS8vIHRoaXMuaXNvMzE2Nl8xID0gaXNvMzE2Nl8xOworCS8vIHRoaXMuZml4RmlsZSA9IGZpeEZpbGU7CisJLy8gdGhpcy50YXJnZXRGaWxlID0gdGFyZ2V0RmlsZTsKKwkvLyB0aGlzLm91dHB1dERpciA9IG91dHB1dERpcjsKKwkvLyB0YXJnZXRMaXN0ID0gbnVsbDsKKwkvLyAvLyBDcmVhdGUgdGhlIGhhc2ggbWFwcyA6CisJLy8gbWFwID0gbmV3IEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+KCk7CisJLy8gfQorCS8qKgorCSAqIEBwYXJhbSBjb25maWdGaWxlCisJICovCisJcHVibGljIEV1cm9wZURhdGFGb3JtYXR0ZXIoU3RyaW5nIGNvbmZpZ0ZpbGUpIHsKKworCQkvLyBMb2FkIGFsbCBjb25maWd1cmF0aW9uIHZhcmlhYmxlcworCQlIYXNoTWFwPFN0cmluZywgU3RyaW5nPiB2YXJzID0gR2VuVXRpbHMubG9hZENvbmZpZ0ZpbGUoY29uZmlnRmlsZSk7CisKKwkJU2V0PFN0cmluZz4ga2V5cyA9IHZhcnMua2V5U2V0KCk7CisJCUl0ZXJhdG9yIGl0ID0ga2V5cy5pdGVyYXRvcigpOworCQl3aGlsZSAoaXQuaGFzTmV4dCgpKSB7CisJCQlTdHJpbmcgdmFyID0gKFN0cmluZykgaXQubmV4dCgpOworCisJCQkvLyBBc3NpZ24gdmFsdWVzIHRvIGNvbmZpZ3VyYXRpb24gdmFyaWFibGVzIDoKKwkJCWlmICh2YXIuZXF1YWxzKCJXT1JLU1BBQ0UiKSkgeyAvLyROT04tTkxTLTEkCisJCQkJd29ya3NwYWNlID0gdmFycy5nZXQodmFyKTsKKwkJCX0gZWxzZSBpZiAodmFyLmVxdWFscygiSVNPMzE2Nl8xIikpIHsgLy8kTk9OLU5MUy0xJAorCQkJCWlzbzMxNjZfMSA9IHZhcnMuZ2V0KHZhcik7CisJCQl9IGVsc2UgaWYgKHZhci5lcXVhbHMoIklTT19GSVgiKSkgeyAvLyROT04tTkxTLTEkCisJCQkJZml4RmlsZSA9IHZhcnMuZ2V0KHZhcik7CisJCQl9IGVsc2UgaWYgKHZhci5lcXVhbHMoIlRBUkdFVF9MSVNUIikpIHsgLy8kTk9OLU5MUy0xJAorCQkJCXRhcmdldEZpbGUgPSB2YXJzLmdldCh2YXIpOworCQkJfSBlbHNlIGlmICh2YXIuZXF1YWxzKCJPVVRQVVQiKSkgeyAvLyROT04tTkxTLTEkCisJCQkJb3V0cHV0RGlyID0gdmFycy5nZXQodmFyKTsKKwkJCX0KKworCQl9IC8vIHdoaWxlCisKKwkJLy8gVGhlIHdvcmtzcGFjZSB2YXJpYWJsZSBzaG91bGQgZW5kIHdpdGggYSBzbGFzaCBjaGFyYWN0ZXIKKwkJaWYgKHdvcmtzcGFjZS5lbmRzV2l0aCgiXFwiKSA9PSBmYWxzZSkgeyAvLyROT04tTkxTLTEkCisJCQl3b3Jrc3BhY2UgKz0gIlxcIjsgLy8kTk9OLU5MUy0xJAorCQl9CisKKwkJU3RyaW5nIHBhdGggPSB3b3Jrc3BhY2UgKyBHZW5Db25zdGFudHMuUEFSQU1TX0RJUjsKKworCQkvLyBTZXQgcmVtYWluaW5nIGNvbmZpZyB2YXJzIHVzaW5nIFdPUktTUEFDRSAod29ya3NwYWNlIHJlbGF0aXZlKQorCQlpZiAoaXNvMzE2Nl8xID09IG51bGwpIHsKKwkJCWlzbzMxNjZfMSA9IHBhdGggKyBHZW5Db25zdGFudHMuSVNPMzE2Nl8xX0ZJTEU7CisJCX0KKwkJaWYgKGZpeEZpbGUgPT0gbnVsbCkgeworCQkJZml4RmlsZSA9IHBhdGggKyBHZW5Db25zdGFudHMuSVNPRklYX0ZJTEU7CisJCX0KKwkJaWYgKHRhcmdldEZpbGUgPT0gbnVsbCkgeworCQkJdGFyZ2V0RmlsZSA9IHBhdGggKyBHZW5Db25zdGFudHMuRVVST1BFX0NPVU5UUklFUzsKKwkJfQorCQlpZiAob3V0cHV0RGlyID09IG51bGwpIHsKKwkJCW91dHB1dERpciA9IEdlbkNvbnN0YW50cy5EVU1NWV9ESVI7CisJCX0KKworCQl0YXJnZXRMaXN0ID0gbnVsbDsKKworCQkvLyBDcmVhdGUgdGhlIGhhc2ggbWFwcyA6CisJCW1hcCA9IG5ldyBIYXNoTWFwPFN0cmluZywgU3RyaW5nPigpOworCisJfQorCisJLyoqCisJICogVGhpcyBtZXRob2Qgc2V0cyB1cCBhbmQgcnVucyB0aGUgZmluZGVyLgorCSAqIAorCSAqLworCXB1YmxpYyB2b2lkIHJ1bigpIHsKKwkJLy8gUmVhZCBhbmQga2VlcCBpbiBtZW1vcnkgYSBsaXN0IG9mIHRoZSBjb3VudHJpZXMgd2Ugd2FudC4KKwkJdGFyZ2V0TGlzdCA9IEdlblV0aWxzLnBvcHVsYXRlTGlzdCh0YXJnZXRGaWxlKTsKKworCQkvLyBSZWFkIGFuZCBrZWVwIGluIG1lbW9yeSBhIGxpc3Qgb2YgdGhlIElTTzMxNjYtMSBBTFBIQTIsIEFMUEhBMywgYW5kCisJCS8vIG51bWVyaWMgY29kZXMuCisJCWNvZGVMaXN0ID0gR2VuVXRpbHMucG9wdWxhdGVMaXN0KGlzbzMxNjZfMSk7CisKKwkJLy8gUmVhZCBhbmQga2VlcCBpbiBtZW1vcnkgYSBsaXN0IG9mIHRoZSBtaXNzaW5nIElTTzMxNjYtMiBjb2RlcworCQljb2RlZml4TGlzdCA9IEdlblV0aWxzLnBvcHVsYXRlTGlzdChmaXhGaWxlKTsKKworCQkvLyBOb3csIHByb2Nlc3MgZWFjaCBpdGVtIGluIHRoZSB0YXJnZXQgbGlzdC4KKwkJcHJvY2VzcygpOworCX0KKworCS8qKgorCSAqIAorCSAqIAorCSAqLworCXByb3RlY3RlZCB2b2lkIHByb2Nlc3MoKSB7CisKKwkJLy8gQSB3cml0ZXIgZm9yIHRoZSBuZXcgZmlsZSB3ZSBhcmUgY3JlYXRpbmcuCisJCVByaW50V3JpdGVyIGV1cm9wZUZpbGUgPSBudWxsOworCisJCS8vIE9iamVjdCBob2xkaW5nIElTTzMxNjYtMSByZWxhdGVkIGRhdGEuCisJCUlTT0NvZGUxIGlzb0NvZGUgPSBudWxsOworCisJCS8vIE9iamVjdCB0byBkZXRlY3QgdHJhbnNpdGlvbnMgaW4gZGF0YQorCQlJU09Db2RlMSBjdXJyZW50Q29kZSA9IG51bGw7CisKKwkJLy8gTmFtZSBvZiB0aGUgbmV3IHByb3BlcnRpZXMgZmlsZS4KKwkJU3RyaW5nIGZpbGVOYW1lID0gbnVsbDsKKworCQlpbnQgc2l6ZSA9IHRhcmdldExpc3Quc2l6ZSgpOworCisJCWZvciAoaW50IGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7CisKKwkJCS8vIEdldCB0aGUgbmV4dCBjb3VudHJ5IGluIHRoZSBsaXN0LgorCQkJU3RyaW5nIGZpbGUgPSB0YXJnZXRMaXN0LmdldChpKS50cmltKCk7CisKKwkJCS8vIE9wZW4gdGhlIGRhdGEgc291cmNlIGZpbGUgZm9yIHRoaXMgY291bnRyeS4KKwkJCUJ1ZmZlcmVkUmVhZGVyIHJlYWRlciA9IEdlblV0aWxzLm9wZW5SZWFkZXIoZmlsZSk7CisJCQlTeXN0ZW0ub3V0CisJCQkJCS5wcmludGxuKCJcdFx0PDw8PCBEQVRBIEZPUk1BVFRFUiAtLSBQcm9jZXNzaW5nIGNvdW50cnkgOiAiICsgZmlsZSArICIgPj4+PiIpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKKwkJCXRyeSB7CisKKwkJCQlpZiAocmVhZGVyICE9IG51bGwpIHsKKworCQkJCQlTdHJpbmcgYnVmZmVyID0gbnVsbDsKKworCQkJCQl3aGlsZSAoR2VuVXRpbHMuRU9GKGJ1ZmZlciA9IHJlYWRlci5yZWFkTGluZSgpKSAhPSB0cnVlKSB7CisKKwkJCQkJCS8vIE1ha2Ugc3VyZSB0aGF0IHdlIG1hcmsgYWxsIHVua25vd24gZGF0YS4KKwkJCQkJCWJ1ZmZlciA9IGJ1ZmZlci5yZXBsYWNlKCIsLCwiLCAiLFVOS05PV04sVU5LTk9XTiwiKTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCisJCQkJCQlidWZmZXIgPSBidWZmZXIucmVwbGFjZSgiLCwiLCAiLFVOS05PV04sIik7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAkJCQkKKworCQkJCQkJU3RyaW5nW10gaXRlbXMgPSBidWZmZXIuc3BsaXQoIiwiKTsgLy8kTk9OLU5MUy0xJAorCisJCQkJCQkvLyBHZXQgSVNPIGNvZGUgZm9yIGN1cnJlbnQgZW50cnkuCisJCQkJCQlTdHJpbmcgY291bnRyeSA9IEdlblV0aWxzLmdldENvdW50cnlOYW1lKAorCQkJCQkJCQlpdGVtc1tFdXJvcGVEYXRhRm9ybWF0dGluZ0hlYWRlci5TVFJJRF0KKwkJCQkJCQkJCQkuc3Vic3RyaW5nKDAsIDIpLCBjb2RlTGlzdCk7CisJCQkJCQljdXJyZW50Q29kZSA9IEdlblV0aWxzLmdldElTT0NvZGUoY291bnRyeSwgY29kZUxpc3QpOworCisJCQkJCQkvLyBHZXQgdGhlIElTTzMxNjYtMSBpbmZvIGZvciB0aGlzIGNvdW50cnkKKwkJCQkJCWlmIChpc29Db2RlID09IG51bGwpIHsKKwkJCQkJCQljb3VudHJ5ID0gR2VuVXRpbHMuZ2V0Q291bnRyeU5hbWUoCisJCQkJCQkJCQlpdGVtc1tFdXJvcGVEYXRhRm9ybWF0dGluZ0hlYWRlci5TVFJJRF0KKwkJCQkJCQkJCQkJLnN1YnN0cmluZygwLCAyKSwgY29kZUxpc3QpOworCQkJCQkJCWlzb0NvZGUgPSBHZW5VdGlscy5nZXRJU09Db2RlKGNvdW50cnksIGNvZGVMaXN0KTsKKwkJCQkJCX0KKworCQkJCQkJLy8gQ2hlY2sgZm9yIGNvdW50cnktdHJhbnNpdGlvbnMKKwkJCQkJCWlmIChpc29Db2RlLmdldEFscGhhMigpLmVxdWFscyhjdXJyZW50Q29kZS5nZXRBbHBoYTIoKSkgPT0gZmFsc2UpIHsKKwkJCQkJCQkvLyBJZiB3ZSBoYXZlIGEgdHJhbnNpdGlvbiwgdGhlbiBjbG9zZSBwcmV2aW91cworCQkJCQkJCS8vIGZpbGUuCisJCQkJCQkJaWYgKGV1cm9wZUZpbGUgIT0gbnVsbCkgeworCQkJCQkJCQlldXJvcGVGaWxlLmNsb3NlKCk7CisJCQkJCQkJCWV1cm9wZUZpbGUgPSBudWxsOworCQkJCQkJCQlVdGlsTG9nZ2VyLmxvZ0luZm9ybWF0aW9uKE1lc3NhZ2VzCisJCQkJCQkJCQkJLmdldFN0cmluZygiXHRcdEdlbmVyYXRlZCA6IikgLy8kTk9OLU5MUy0xJAorCQkJCQkJCQkJCSsgZmlsZU5hbWUpOworCQkJCQkJCQlmaWxlTmFtZSA9IG51bGw7CisJCQkJCQkJfQorCisJCQkJCQkJLy8gU2V0IGlzbyBjb2RlIHRvIHRoZSBjdXJyZW50IGNvZGUuCisJCQkJCQkJaXNvQ29kZSA9IGN1cnJlbnRDb2RlOworCisJCQkJCQl9CisKKwkJCQkJCS8vIElmIHRoZSBkaXJlY3RvcnkgZG9lcyBub3QgZXhpc3QgZm9yIHRoaXMgY291bnRyeSwKKwkJCQkJCS8vIGNyZWF0ZSBpdCB1c2luZyBJU08gYWxwaGEzIGNvZGUuCisJCQkJCQlGaWxlIGNvdW50cnlEaXIgPSBuZXcgRmlsZShvdXRwdXREaXIKKwkJCQkJCQkJKyBpc29Db2RlLmdldEFscGhhMygpKTsKKworCQkJCQkJaWYgKGNvdW50cnlEaXIgIT0gbnVsbCAmJiBjb3VudHJ5RGlyLmV4aXN0cygpID09IGZhbHNlKSB7CisJCQkJCQkJLy8gRGlyZWN0b3J5IGRvZXMgbm90IGV4aXN0LiBDcmVhdGUgaXQuCisJCQkJCQkJY291bnRyeURpci5ta2RpcigpOworCQkJCQkJfQorCisJCQkJCQkvLyBDcmVhdGUgYW5kIG9wZW4gdGhlIG5ldyBmaWxlLgorCQkJCQkJaWYgKGV1cm9wZUZpbGUgPT0gbnVsbCkgeworCQkJCQkJCS8vIENyZWF0ZSB0aGUgZmlsZSBuYW1lIGZvciB0aGUgbmV3IHByb3BlcnRpZXMuZmlsZS4KKwkJCQkJCQlmaWxlTmFtZSA9IGNvdW50cnlEaXIgKyAiXFwiICsgaXNvQ29kZS5nZXRBbHBoYTMoKSAvLyROT04tTkxTLTEkCisJCQkJCQkJCQkrICIudHh0IjsgLy8kTk9OLU5MUy0xJAorCQkJCQkJCS8vIENyZWF0ZSB0bmUgbmV3IHByb3BlcnRpZXMuZmlsZSBmb3IgdGhpcyBjb3VudHJ5LgorCQkJCQkJCWV1cm9wZUZpbGUgPSBHZW5VdGlscy5vcGVuV3JpdGVyKGZpbGVOYW1lKTsKKwkJCQkJCX0KKworCQkJCQkJLy8gVmFyaWFibGUgdXNlZCB0byBob2xkIHRoZSBvdXRwdXQgZGF0YS4KKwkJCQkJCUdlblV0aWxzLmFkZERhdGEoZXVyb3BlRmlsZSwgYnVmZmVyICsgIlxuIik7IC8vJE5PTi1OTFMtMSQJCQkJCQkKKworCQkJCQl9Ly8gd2hpbGUKKworCQkJCQkvLyBXZSBkb250IG5lZWQgdGhlIElTTyBjb2RlIG9iamVjdCBmb3IgdGhpcyBjb3VudHJ5CisJCQkJCS8vIGFueW1vcmUsIHdlIGFyZSBkb25lIHByb2Nlc3NpbmcgaXQuCisJCQkJCWlzb0NvZGUgPSBudWxsOworCisJCQkJCS8vIENsb3NlIGFsbCBvcGVuIHJlc291cmNlcy4KKwkJCQkJcmVhZGVyLmNsb3NlKCk7CisKKwkJCQkJLy8gUnVuIGdhcmJhZ2UgY29sbGVjdGlvbgorCQkJCQkvL1N5c3RlbS5nYygpOworCisJCQkJfQorCisJCQl9IGNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7CisJCQkJZS5wcmludFN0YWNrVHJhY2UoKTsKKwkJCX0KKworCQl9IC8vIGZvcgorCisJfQorCisJLyoqCisJICogTWFpbiBleGVjdXRpb24gZW50cnkgcG9pbnQuCisJICogCisJICogQHBhcmFtIGFyZ3MKKwkgKi8KKwlwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CisJCS8vIGZpbmFsIGludCBJU09fMzE2Nl8xID0gMDsKKwkJLy8gZmluYWwgaW50IEZJWF9GSUxFID0gMTsKKwkJLy8gZmluYWwgaW50IFRBUkdFVF9MSVNUID0gMjsKKwkJLy8gZmluYWwgaW50IE9VVFBVVF9ESVIgPSAzOworCQkvLyBmaW5hbCBpbnQgUEFSQU1TID0gNDsKKwkJLy8KKwkJLy8gaWYgKGFyZ3MubGVuZ3RoIDwgUEFSQU1TKSB7CisJCS8vIFV0aWxMb2dnZXIubG9nSW5mb3JtYXRpb24oIi0tV3JvbmcgYXJndW1lbnRzLS0iKTsgLy8kTk9OLU5MUy0xJAorCQkvLyBTeXN0ZW0ub3V0CisJCS8vIC5wcmludGxuKCJcdFRvIHJ1biwgcGxlYXNlIHByb3ZpZGUgdGhlIGZvbGxvd2luZyBhcmd1bWVudHMgOiAiKTsKKwkJLy8gLy8kTk9OLU5MUy0xJAorCQkvLyBVdGlsTG9nZ2VyLmxvZ0luZm9ybWF0aW9uKCJcdFx0IElTTyAzMTY2LTEgZmlsZSIpOyAvLyROT04tTkxTLTEkCisJCS8vIFV0aWxMb2dnZXIubG9nSW5mb3JtYXRpb24oIlx0XHQgSVNPIGZpeCBmaWxlIik7IC8vJE5PTi1OTFMtMSQKKwkJLy8gVXRpbExvZ2dlci5sb2dJbmZvcm1hdGlvbigiXHRcdCBUYXJnZXQgY291bnRyaWVzIGZpbGUiKTsgLy8kTk9OLU5MUy0xJAorCQkvLyBVdGlsTG9nZ2VyLmxvZ0luZm9ybWF0aW9uKCJcdFx0IE91dHB1dCBkaXJlY3RvcnkiKTsgLy8kTk9OLU5MUy0xJAorCQkvLyByZXR1cm47CisJCS8vIH0KKworCQkvLyBFdXJvcGVEYXRhRm9ybWF0dGVyIGZvcm1hdHRlciA9IG5ldyBFdXJvcGVEYXRhRm9ybWF0dGVyKAorCQkvLyBhcmdzW0lTT18zMTY2XzFdLCBhcmdzW0ZJWF9GSUxFXSwgYXJnc1tUQVJHRVRfTElTVF0sCisJCS8vIGFyZ3NbT1VUUFVUX0RJUl0pOworCQkvLyBmb3JtYXR0ZXIucnVuKCk7CisKKwkJZmluYWwgaW50IENPTkZJR19GSUxFID0gMDsKKwkJZmluYWwgaW50IFBBUkFNUyA9IDE7CisKKwkJaWYgKGFyZ3MubGVuZ3RoIDwgUEFSQU1TKSB7CisJCQlVdGlsTG9nZ2VyLmxvZ0luZm9ybWF0aW9uKCJcdFx0LS1Xcm9uZyBhcmd1bWVudHMtLSIpOyAvLyROT04tTkxTLTEkCisJCQlTeXN0ZW0ub3V0CisJCQkJCS5wcmludGxuKCJcdFx0VG8gcnVuLCBwbGVhc2UgcHJvdmlkZSB0aGUgZm9sbG93aW5nIGFyZ3VtZW50KHMpIDogIik7IC8vJE5PTi1OTFMtMSQKKwkJCVV0aWxMb2dnZXIubG9nSW5mb3JtYXRpb24oIlx0XHRcdCBDb25maWd1cmF0aW9uIGZpbGUiKTsgLy8kTk9OLU5MUy0xJAorCQkJU3lzdGVtLmV4aXQoMSk7CisJCX0KKworCQlFdXJvcGVEYXRhRm9ybWF0dGVyIGZvcm1hdHRlciA9IG5ldyBFdXJvcGVEYXRhRm9ybWF0dGVyKAorCQkJCWFyZ3NbQ09ORklHX0ZJTEVdKTsKKwkJZm9ybWF0dGVyLnJ1bigpOworCX0KK30KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3NyYy9vcmcvZWNsaXBzZS9zdGVtL3V0aWxpdHkvZ2VuZXJhdG9ycy9FdXJvcGVEYXRhRm9ybWF0dGluZ0hlYWRlci5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdXRpbGl0eS9nZW5lcmF0b3JzL0V1cm9wZURhdGFGb3JtYXR0aW5nSGVhZGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTEyZWFkMQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3NyYy9vcmcvZWNsaXBzZS9zdGVtL3V0aWxpdHkvZ2VuZXJhdG9ycy9FdXJvcGVEYXRhRm9ybWF0dGluZ0hlYWRlci5qYXZhCkBAIC0wLDAgKzEsNjEgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5LmdlbmVyYXRvcnM7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDkgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioKKyAqIAorICogUmVsZXZhbnQga2V5cyB0byB0aGUgRXVyb3BlYW4gZGF0YXNldC4KKyAqIAorICovCitwdWJsaWMgYWJzdHJhY3QgY2xhc3MgRXVyb3BlRGF0YUZvcm1hdHRpbmdIZWFkZXIgeworCisJLyoqCisJICogTnVtZXJpYyBJRAorCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IE5VTUlEID0gMDsKKworCS8qKgorCSAqIE5hbWUgSUQKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIGludCBTVFJJRCA9IDE7CisKKwkvKioKKwkgKiBUb3RhbCBBcmVhCisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgQVJFQSA9IDI7CisKKwkvKioKKwkgKiBQb3B1bGF0aW9uIHZhbHVlIDEKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIGludCBQT1AxID0gMzsKKworCS8qKgorCSAqIFBvcHVsYXRpb24gdmFsdWUgMgorCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFBPUDIgPSA0OworCisJLyoqCisJICogUG9wdWxhdGlvbiB2YWx1ZSAzCisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgUE9QMyA9IDU7CisKKwkvKioKKwkgKiBQb3B1bGF0aW9uIHZhbHVlIDQKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIGludCBQT1A0ID0gNjsKKworCS8qKgorCSAqIEFsdGVybmF0aXZlIElECisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgVEVNUElEID0gNzsKKworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3NyYy9vcmcvZWNsaXBzZS9zdGVtL3V0aWxpdHkvZ2VuZXJhdG9ycy9GaWx0ZXJMb2dCeVJlZmVyZW5jZUxvZy5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdXRpbGl0eS9nZW5lcmF0b3JzL0ZpbHRlckxvZ0J5UmVmZXJlbmNlTG9nLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmZlNzYzMAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3NyYy9vcmcvZWNsaXBzZS9zdGVtL3V0aWxpdHkvZ2VuZXJhdG9ycy9GaWx0ZXJMb2dCeVJlZmVyZW5jZUxvZy5qYXZhCkBAIC0wLDAgKzEsMTg3IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS5nZW5lcmF0b3JzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA5IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGphdmEuaW8uQnVmZmVyZWRSZWFkZXI7CitpbXBvcnQgamF2YS5pby5GaWxlOworaW1wb3J0IGphdmEuaW8uRmlsZVJlYWRlcjsKK2ltcG9ydCBqYXZhLmlvLkZpbGVXcml0ZXI7CitpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKK2ltcG9ydCBqYXZhLnV0aWwuSGFzaFNldDsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuTWFwOworaW1wb3J0IGphdmEudXRpbC5TdHJpbmdUb2tlbml6ZXI7CisKKworLyoqCisgKiBUYWtlcyB0aGUgbG9jYXRpb25zIGZyb20gdGhlIHNlY29uZCBsb2cgZmlsZSBwYXRoIHBhc3NlZCBpbiBhbmQgZmlsdGVycyBvdXQgbG9jYXRpb25zIG5vdCBpbmNsdWRlZCBmcm9tIHRoZSBmaXJzdCBsb2cgZmlsZSBwYXRoLiBUaGUgcmVzdWx0IGlzIHN0b3JlZCBpbiBhbnkgZGVzaXJlZCBvdXRwdXQgZm9sZGVyCisgKi8KKworcHVibGljIGNsYXNzIEZpbHRlckxvZ0J5UmVmZXJlbmNlTG9nIHsKKworCXN0YXRpYyBTdHJpbmcgTFMgPSBTeXN0ZW0uZ2V0UHJvcGVydHkoImxpbmUuc2VwYXJhdG9yIik7IC8vJE5PTi1OTFMtMSQKKwkKKwkKKwkKKwlwcml2YXRlIHN0YXRpYyBNYXA8SW50ZWdlciwgTGlzdDxTdHJpbmc+PiBrZWVwQ29sdW1ucyA9IG5ldyBIYXNoTWFwPEludGVnZXIsIExpc3Q8U3RyaW5nPj4oKTsKKwkKKwkKKwkKKwlwcml2YXRlIHN0YXRpYyBzaG9ydCBOVU1fTEVBRF9DT0xTID0gMjsKKwkKKwkvKioKKwkgKiAKKwkgKiBAcGFyYW0gYXJncworCSAqLworCUBTdXBwcmVzc1dhcm5pbmdzKCJubHMiKQorCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZyBbXSBhcmdzKSB7CisJCWlmKGFyZ3MubGVuZ3RoIDwgMykgeworCQkJU3lzdGVtLmVyci5wcmludGxuKCJVc2FnZTogRmlsdGVyTG9nQnlSZWZlcmVuY2VMb2cgPHNvdXJjZSBsb2cgcGF0aD4gPHJlZmVyZW5jZSBsb2cgcGF0aD4gPG91dHB1dCBwYXRoPiIpOyAvLyROT04tTkxTLTEkCisJCQlTeXN0ZW0uZXhpdCgtMSk7CisJCX0KKwkJCisJCXRyeSB7CisJCQlTdHJpbmcgaW5wdXREaXIgPSBhcmdzWzBdOworCQkJU3RyaW5nIHJlZkRpciA9IGFyZ3NbMV07CQorCQkJU3RyaW5nIG91dERpciA9IGFyZ3NbMl07CisJCQkJCisJCQlyZXRyaWV2ZUNvbHVtbnMocmVmRGlyKTsKKwkJCQorCQkJdHJ1bmNhdGVBbmRDb3B5RmlsZXMoaW5wdXREaXIsIG91dERpcik7CisJCQkJCisJCX0gY2F0Y2goRXhjZXB0aW9uIGUpeworCQkJZS5wcmludFN0YWNrVHJhY2UoKTsKKwkJfQorCX0KKwkKKwlwdWJsaWMgc3RhdGljIHZvaWQgcmV0cmlldmVDb2x1bW5zKFN0cmluZyByZWZEaXIpIHRocm93cyBFeGNlcHRpb24geworCQlGaWxlIGYgPSBuZXcgRmlsZShyZWZEaXIpOworICAgICAgICAKKwkJaWYoIWYuZXhpc3RzKCkgfHwgIWYuaXNEaXJlY3RvcnkoKSApIHsKKwkJCVN5c3RlbS5lcnIucHJpbnRsbigiRXJyb3IgIityZWZEaXIrIiBkb2VzIG5vdCBleGlzdCBvciBpcyBub3QgYSBkaXJlY3RvcnkiKTsKKwkJCVN5c3RlbS5leGl0KC0xKTsKKwkJfQorCQkKKwkJZm9yKFN0cmluZyBmaWxlOmYubGlzdCgpKSB7CisJCQlTdHJpbmcgcGF0aCA9IGYuZ2V0QWJzb2x1dGVQYXRoKCkrRmlsZS5zZXBhcmF0b3IrZmlsZTsKKwkJCWlmKGYuaXNIaWRkZW4oKSB8fCBmaWxlLnN0YXJ0c1dpdGgoIi4iKSkgY29udGludWU7IC8vIGhpZGRlbiBmaWxlCisJCQlpZighZmlsZS5jb250YWlucygiXyIpKSBjb250aW51ZTsgLy8gbm90IGEgbG9nZ2VkIENTViBmaWxlCisJCQkKKwkJCWludCBpbmQgPSBmaWxlLmluZGV4T2YoIl8iKTsKKwkJCQorCQkJU3RyaW5nIHNsZXZlbCA9IGZpbGUuc3Vic3RyaW5nKGluZCsxLCBpbmQrMik7CisJCQorCQkJaW50IGFkbWluTGV2ZWwgPSBJbnRlZ2VyLnBhcnNlSW50KHNsZXZlbCk7CisJCQlpZihrZWVwQ29sdW1ucy5jb250YWluc0tleShhZG1pbkxldmVsKSkgY29udGludWU7CisJCQlyZWFkSGVhZGVycyhwYXRoLCBhZG1pbkxldmVsKTsKKwkJfQorCQkJCisJfQorCQorCXByaXZhdGUgc3RhdGljIHZvaWQgcmVhZEhlYWRlcnMoU3RyaW5nIGZpbGVQYXRoLCBpbnQgYWRtaW5MZXZlbCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCS8vIFJlYWQgaGVhZGVyIGxpbmUKKwkJQnVmZmVyZWRSZWFkZXIgcmVhZGVyID0gbmV3IEJ1ZmZlcmVkUmVhZGVyKG5ldyBGaWxlUmVhZGVyKGZpbGVQYXRoKSk7CisJCVN0cmluZyBidWZmZXI7CisJCWJ1ZmZlciA9IHJlYWRlci5yZWFkTGluZSgpOyAKKwkJCQkJCQorCQlTdHJpbmcgczsKKwkJaWYoYnVmZmVyICE9IG51bGwpIHsKKwkJCVN0cmluZyBbXSB0b2tzID0gYnVmZmVyLnNwbGl0KCIsIik7CisJCS8vCVN0cmluZ1Rva2VuaXplciBzdG9rID0gbmV3IFN0cmluZ1Rva2VuaXplcihidWZmZXIsIiwiKTsvLyROT04tTkxTLTEkCisJCQkJCisJCQlpZigha2VlcENvbHVtbnMuY29udGFpbnNLZXkoYWRtaW5MZXZlbCkpICB7CisJCQkJQXJyYXlMaXN0PFN0cmluZz5uZXdMID0gbmV3IEFycmF5TGlzdDxTdHJpbmc+KCk7CisJCQkJa2VlcENvbHVtbnMucHV0KGFkbWluTGV2ZWwsIG5ld0wpOworCQkJfQorCQkJTGlzdDxTdHJpbmc+IGwgPSBrZWVwQ29sdW1ucy5nZXQoYWRtaW5MZXZlbCk7CisJCQlmb3IoaW50IGk9TlVNX0xFQURfQ09MUztpPHRva3MubGVuZ3RoOysraSkgIAorCQkJCWwuYWRkKHRva3NbaV0pOworCQl9CQkKKwl9CisJCQorCisJCisJcHJpdmF0ZSBzdGF0aWMgdm9pZCB0cnVuY2F0ZUFuZENvcHlGaWxlcyhTdHJpbmcgbG9nRGlyLCBTdHJpbmcgb3V0RGlyKSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJRmlsZSBmID0gbmV3IEZpbGUobG9nRGlyKTsKKwkgICAgICAgIAorCQlpZighZi5leGlzdHMoKSB8fCAhZi5pc0RpcmVjdG9yeSgpICkgeworCQkJU3lzdGVtLmVyci5wcmludGxuKCJFcnJvciAiK2xvZ0RpcisiIGRvZXMgbm90IGV4aXN0IG9yIGlzIG5vdCBhIGRpcmVjdG9yeSIpOworCQkJU3lzdGVtLmV4aXQoLTEpOworCQl9CisJCQkKKwkJZm9yKFN0cmluZyBmaWxlOmYubGlzdCgpKSB7CisJCQlTdHJpbmcgcGF0aCA9IGYuZ2V0QWJzb2x1dGVQYXRoKCkrRmlsZS5zZXBhcmF0b3IrZmlsZTsKKwkJCWlmKGYuaXNIaWRkZW4oKSB8fCBmaWxlLnN0YXJ0c1dpdGgoIi4iKSkgY29udGludWU7IC8vIGhpZGRlbiBmaWxlCisJCQlpZighZmlsZS5jb250YWlucygiXyIpKSBjb250aW51ZTsgLy8gbm90IGEgbG9nZ2VkIENTViBmaWxlCisJCQkJCisJCQlpbnQgaW5kID0gZmlsZS5pbmRleE9mKCJfIik7CisJCQlTdHJpbmcgc2xldmVsID0gZmlsZS5zdWJzdHJpbmcoaW5kKzEsIGluZCsyKTsKKwkJCQorCQkJaW50IGFkbWluTGV2ZWwgPSBJbnRlZ2VyLnBhcnNlSW50KHNsZXZlbCk7CisJCQkKKwkJCWlmKCFrZWVwQ29sdW1ucy5jb250YWluc0tleShhZG1pbkxldmVsKSkgCisJCQkJY29udGludWU7IC8vIGFkbWluIGxldmVsIG5vdCBpbiByZWZlcmVuY2UKKwkJCQorCQkJLy8gUmVhZCBoZWFkZXIgbGluZQorCQkJQnVmZmVyZWRSZWFkZXIgcmVhZGVyID0gbmV3IEJ1ZmZlcmVkUmVhZGVyKG5ldyBGaWxlUmVhZGVyKHBhdGgpKTsKKwkJCUZpbGUgb3V0ZiA9IG5ldyBGaWxlKG91dERpcik7CisJCQlpZighb3V0Zi5leGlzdHMoKSkKKwkJCQlvdXRmLm1rZGlycygpOworCQkJCisJCQlTdHJpbmcgb3V0RmlsZSA9IG91dERpcitGaWxlLnNlcGFyYXRvcitmaWxlOworCQkJRmlsZVdyaXRlciBmdyA9IG5ldyBGaWxlV3JpdGVyKG91dEZpbGUpOworCQorCQkJCQorCQkJU3RyaW5nIGJ1ZmZlcjsKKwkJCWJ1ZmZlciA9IHJlYWRlci5yZWFkTGluZSgpOyAvLyBoZWFkZXIKKwkJCVN0cmluZyBzOworCQkJaW50IHJvdyA9IDA7CisJCQlIYXNoU2V0PEludGVnZXI+a2VlcENvbE51bWJlcnMgPSBuZXcgSGFzaFNldDxJbnRlZ2VyPigpOworCQkJaWYoYnVmZmVyICE9IG51bGwpIHsKKwkJCQlTdHJpbmdUb2tlbml6ZXIgc3RvayA9IG5ldyBTdHJpbmdUb2tlbml6ZXIoYnVmZmVyLCIsIik7Ly8kTk9OLU5MUy0xJAorCQkJCWludCBjb2xOciA9IDA7CisJCQkJd2hpbGUoc3Rvay5oYXNNb3JlVG9rZW5zKCkpIHsKKwkJCQkJU3RyaW5nIHRvayA9IHN0b2submV4dFRva2VuKCk7CisJCQkJCWlmKGNvbE5yID49IE5VTV9MRUFEX0NPTFMgJiYga2VlcENvbHVtbnMuZ2V0KGFkbWluTGV2ZWwpLmNvbnRhaW5zKHRvaykpIHsKKwkJCQkJCS8vIENvcHkgY29sdW1uIHZhbHVlCisJCQkJCQlrZWVwQ29sTnVtYmVycy5hZGQoY29sTnIpOworCQkJCQl9CisJCQkJCSsrY29sTnI7CisJCQkJfQorCQkJfQorCQkKKwkJCQorCQkJd2hpbGUoYnVmZmVyICE9IG51bGwpIHsKKwkJCQlTdHJpbmdUb2tlbml6ZXIgc3RvayA9IG5ldyBTdHJpbmdUb2tlbml6ZXIoYnVmZmVyLCIsIik7Ly8kTk9OLU5MUy0xJAorCQkJCWludCBjb2xOciA9IDA7CisJCQkJd2hpbGUoc3Rvay5oYXNNb3JlVG9rZW5zKCkpIHsKKwkJCQkJU3RyaW5nIHRvayA9IHN0b2submV4dFRva2VuKCk7CisJCQkJCWlmKGNvbE5yIDwgTlVNX0xFQURfQ09MUyB8fCBrZWVwQ29sTnVtYmVycy5jb250YWlucyhjb2xOcikpIHsKKwkJCQkJCS8vIENvcHkgY29sdW1uIHZhbHVlCisJCQkJCQlpZihjb2xOciA+IDApIGZ3LndyaXRlKCIsIik7CisJCQkJCQlmdy53cml0ZSh0b2spOworCQkJCQl9CisJCQkJCSsrY29sTnI7CisJCQkJfQorCQkJCWZ3LndyaXRlKCJcbiIpOworCQkJCQorCVV0aWxMb2dnZXIubG9nSW5mb3JtYXRpb24oIkNvcGllZCByb3cgIityb3crKyk7CisJCQkJYnVmZmVyID0gcmVhZGVyLnJlYWRMaW5lKCk7CisJCQl9CisJCQlmdy5mbHVzaCgpOworCQkJZncuY2xvc2UoKTsKKwkJCXJlYWRlci5jbG9zZSgpOworCQl9CisJfQorfQorCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91dGlsaXR5L2dlbmVyYXRvcnMvRmlsdGVyTG9nRmlsZS5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdXRpbGl0eS9nZW5lcmF0b3JzL0ZpbHRlckxvZ0ZpbGUuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mM2ZhZmQ0Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdXRpbGl0eS9nZW5lcmF0b3JzL0ZpbHRlckxvZ0ZpbGUuamF2YQpAQCAtMCwwICsxLDIwMiBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkuZ2VuZXJhdG9yczsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqYXZhLmlvLkJ1ZmZlcmVkUmVhZGVyOworaW1wb3J0IGphdmEuaW8uRmlsZTsKK2ltcG9ydCBqYXZhLmlvLkZpbGVSZWFkZXI7CitpbXBvcnQgamF2YS5pby5GaWxlV3JpdGVyOworaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7CitpbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7CitpbXBvcnQgamF2YS51dGlsLkhhc2hTZXQ7CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CitpbXBvcnQgamF2YS51dGlsLk1hcDsKK2ltcG9ydCBqYXZhLnV0aWwuU3RyaW5nVG9rZW5pemVyOworCisKKy8qKgorICogUmVhZCBTVEVNIGxvZyBmaWxlcyBhbmQgb25seSBrZWVwIGxvY2F0aW9ucyBmcm9tIHRoZSBsb2cgZmlsZSBtYXRjaGluZyBhIGZpbHRlciBjcml0ZXJpYSwgZS5nLiBJbmNpZGVuY2UgPiAxIChmb3IgYW55IHRpbWVzdGFtcCkKKyAqLworcHVibGljIGNsYXNzIEZpbHRlckxvZ0ZpbGUgeworCisJc3RhdGljIFN0cmluZyBMUyA9IFN5c3RlbS5nZXRQcm9wZXJ0eSgibGluZS5zZXBhcmF0b3IiKTsgLy8kTk9OLU5MUy0xJAorCQorCQorCQorCXByaXZhdGUgc3RhdGljIE1hcDxJbnRlZ2VyLCBIYXNoU2V0PEludGVnZXI+PiBrZWVwQ29sdW1ucyA9IG5ldyBIYXNoTWFwPEludGVnZXIsIEhhc2hTZXQ8SW50ZWdlcj4+KCk7CisJCisJcHJpdmF0ZSBzdGF0aWMgc2hvcnQgTlVNX0xFQURfQ09MUyA9IDI7CisJCisJLyoqCisJICogCisJICogQHBhcmFtIGFyZ3MKKwkgKi8KKwlAU3VwcHJlc3NXYXJuaW5ncygibmxzIikKKwlwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmcgW10gYXJncykgeworCQlpZihhcmdzLmxlbmd0aCA8IDUpIHsKKwkJCVN5c3RlbS5lcnIucHJpbnRsbigiVXNhZ2U6IEZpbHRlckxvZ0ZpbGUgPGxvZyBmaWxlcyBkaXI+IDxvdXRwdXQgZGlyPiA8VmFyaWFibGU+IDxQcmVkaWNhdGU+IDxWYWx1ZT4gXG5Gb3IgZXhhbXBsZTpcbkZpbHRlckxvZ0ZpbGUgfi9TVEVNTG9ncy9NeVNpbS9tYWxhcmlhL2h1bWFuIEluY2lkZW5jZSA+IDEiKTsgLy8kTk9OLU5MUy0xJAorCQkJU3lzdGVtLmV4aXQoLTEpOworCQl9CisJCQorCQl0cnkgeworCQkJU3RyaW5nIGxvZ0RpciA9IGFyZ3NbMF07CisJCQlTdHJpbmcgb3V0RGlyID0gYXJnc1sxXTsJCisJCQlTdHJpbmcgdmFyID0gYXJnc1syXTsKKwkJCVN0cmluZyBwcmVkaWNhdGUgPSBhcmdzWzNdOworCQkJU3RyaW5nIHZhbHVlID0gYXJnc1s0XTsKKwkJCQkKKwkJCXJldHJpZXZlQ29sdW1ucyhsb2dEaXIsIHZhciwgcHJlZGljYXRlLCB2YWx1ZSk7CisJCQkKKwkJCXRydW5jYXRlQW5kQ29weUZpbGVzKGxvZ0Rpciwgb3V0RGlyKTsKKwkJCQkKKwkJfSBjYXRjaChFeGNlcHRpb24gZSl7CisJCQllLnByaW50U3RhY2tUcmFjZSgpOworCQl9CisJfQorCQorCXB1YmxpYyBzdGF0aWMgdm9pZCByZXRyaWV2ZUNvbHVtbnMoU3RyaW5nIGxvZ0RpciwgU3RyaW5nIHZhciwgU3RyaW5nIHByZWRpY2F0ZSwgU3RyaW5nIHZhbHVlKSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJRmlsZSBmID0gbmV3IEZpbGUobG9nRGlyKTsKKyAgICAgICAgCisJCWlmKCFmLmV4aXN0cygpIHx8ICFmLmlzRGlyZWN0b3J5KCkgKSB7CisJCQlTeXN0ZW0uZXJyLnByaW50bG4oIkVycm9yICIrbG9nRGlyKyIgZG9lcyBub3QgZXhpc3Qgb3IgaXMgbm90IGEgZGlyZWN0b3J5Iik7CisJCQlTeXN0ZW0uZXhpdCgtMSk7CisJCX0KKwkJCisJCWZvcihTdHJpbmcgZmlsZTpmLmxpc3QoKSkgeworCQkJU3RyaW5nIHBhdGggPSBmLmdldEFic29sdXRlUGF0aCgpK0ZpbGUuc2VwYXJhdG9yK2ZpbGU7CisJCQlpZihmLmlzSGlkZGVuKCkgfHwgZmlsZS5zdGFydHNXaXRoKCIuIikpIGNvbnRpbnVlOyAvLyBoaWRkZW4gZmlsZQorCQkJaWYoIWZpbGUuc3RhcnRzV2l0aCh2YXIpKSBjb250aW51ZTsKKwkJCWlmKCFmaWxlLmNvbnRhaW5zKCJfIikpIGNvbnRpbnVlOyAvLyBub3QgYSBsb2dnZWQgQ1NWIGZpbGUKKwkJCQorCQkJaW50IGluZCA9IGZpbGUuaW5kZXhPZigiXyIpOworCQkJCisJCQlTdHJpbmcgc2xldmVsID0gZmlsZS5zdWJzdHJpbmcoaW5kKzEsIGluZCsyKTsKKwkJCQorCQkJaW50IGFkbWluTGV2ZWwgPSBJbnRlZ2VyLnBhcnNlSW50KHNsZXZlbCk7CisJCQkKKwkJCXJlYWRBbmRGaWx0ZXJEYXRhKHBhdGgsIHByZWRpY2F0ZSwgdmFsdWUsIGFkbWluTGV2ZWwpOworCQl9CisJCQkKKwl9CisJCisJcHJpdmF0ZSBzdGF0aWMgdm9pZCByZWFkQW5kRmlsdGVyRGF0YShTdHJpbmcgZmlsZVBhdGgsIFN0cmluZyBwcmVkaWNhdGUsIFN0cmluZyB2YWx1ZSwgaW50IGFkbWluTGV2ZWwpIHRocm93cyBFeGNlcHRpb24geworCQkvLyBSZWFkIGhlYWRlciBsaW5lCisJCUJ1ZmZlcmVkUmVhZGVyIHJlYWRlciA9IG5ldyBCdWZmZXJlZFJlYWRlcihuZXcgRmlsZVJlYWRlcihmaWxlUGF0aCkpOworCQlTdHJpbmcgYnVmZmVyOworCQlidWZmZXIgPSByZWFkZXIucmVhZExpbmUoKTsgLy8gU2tpcCBoZWFkZXIKKwkJCQkJCQorCQlpbnQgcm93ID0gMDsKKwkJYnVmZmVyID0gcmVhZGVyLnJlYWRMaW5lKCk7CisJCVN0cmluZyBzOworCQl3aGlsZShidWZmZXIgIT0gbnVsbCkgeworCQkJU3RyaW5nIFtdIHRva3MgPSBidWZmZXIuc3BsaXQoIiwiKTsKKwkJLy8JU3RyaW5nVG9rZW5pemVyIHN0b2sgPSBuZXcgU3RyaW5nVG9rZW5pemVyKGJ1ZmZlciwiLCIpOy8vJE5PTi1OTFMtMSQKKwkJCUxpc3Q8SW50ZWdlcj5rZWVwQ29scyA9IGRvRmlsdGVyKHRva3MsIHByZWRpY2F0ZSwgdmFsdWUpOworCQkJCQorCQkJaWYoIWtlZXBDb2x1bW5zLmNvbnRhaW5zS2V5KGFkbWluTGV2ZWwpKSAgeworCQkJCUhhc2hTZXQ8SW50ZWdlcj5uZXdIUyA9IG5ldyBIYXNoU2V0PEludGVnZXI+KCk7CisJCQkJa2VlcENvbHVtbnMucHV0KGFkbWluTGV2ZWwsIG5ld0hTKTsKKwkJCX0KKwkJCUhhc2hTZXQ8SW50ZWdlcj4gaHMgPSBrZWVwQ29sdW1ucy5nZXQoYWRtaW5MZXZlbCk7CisJCQlmb3IoaW50IGtlZXA6a2VlcENvbHMpIGhzLmFkZChrZWVwKTsKK1V0aWxMb2dnZXIubG9nSW5mb3JtYXRpb24oIlByb2Nlc3NlZCByb3cgIityb3crKyk7CisJCWJ1ZmZlciA9IHJlYWRlci5yZWFkTGluZSgpOworCQl9CQkKKwl9CisJCQorCisJCisJcHJpdmF0ZSBzdGF0aWMgdm9pZCB0cnVuY2F0ZUFuZENvcHlGaWxlcyhTdHJpbmcgbG9nRGlyLCBTdHJpbmcgb3V0RGlyKSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJRmlsZSBmID0gbmV3IEZpbGUobG9nRGlyKTsKKwkgICAgICAgIAorCQlpZighZi5leGlzdHMoKSB8fCAhZi5pc0RpcmVjdG9yeSgpICkgeworCQkJU3lzdGVtLmVyci5wcmludGxuKCJFcnJvciAiK2xvZ0RpcisiIGRvZXMgbm90IGV4aXN0IG9yIGlzIG5vdCBhIGRpcmVjdG9yeSIpOworCQkJU3lzdGVtLmV4aXQoLTEpOworCQl9CisJCQkKKwkJZm9yKFN0cmluZyBmaWxlOmYubGlzdCgpKSB7CisJCQlTdHJpbmcgcGF0aCA9IGYuZ2V0QWJzb2x1dGVQYXRoKCkrRmlsZS5zZXBhcmF0b3IrZmlsZTsKKwkJCWlmKGYuaXNIaWRkZW4oKSB8fCBmaWxlLnN0YXJ0c1dpdGgoIi4iKSkgY29udGludWU7IC8vIGhpZGRlbiBmaWxlCisJCQlpZighZmlsZS5jb250YWlucygiXyIpKSBjb250aW51ZTsgLy8gbm90IGEgbG9nZ2VkIENTViBmaWxlCisJCQkJCisJCQlpbnQgaW5kID0gZmlsZS5pbmRleE9mKCJfIik7CisJCQlTdHJpbmcgc2xldmVsID0gZmlsZS5zdWJzdHJpbmcoaW5kKzEsIGluZCsyKTsKKwkJCQorCQkJaW50IGFkbWluTGV2ZWwgPSBJbnRlZ2VyLnBhcnNlSW50KHNsZXZlbCk7CisJCQkKKwkJCS8vIFJlYWQgaGVhZGVyIGxpbmUKKwkJCUJ1ZmZlcmVkUmVhZGVyIHJlYWRlciA9IG5ldyBCdWZmZXJlZFJlYWRlcihuZXcgRmlsZVJlYWRlcihwYXRoKSk7CisJCQlGaWxlIG91dGYgPSBuZXcgRmlsZShvdXREaXIpOworCQkJaWYoIW91dGYuZXhpc3RzKCkpCisJCQkJb3V0Zi5ta2RpcnMoKTsKKwkJCQorCQkJU3RyaW5nIG91dEZpbGUgPSBvdXREaXIrRmlsZS5zZXBhcmF0b3IrZmlsZTsKKwkJCUZpbGVXcml0ZXIgZncgPSBuZXcgRmlsZVdyaXRlcihvdXRGaWxlKTsKKwkKKwkJCQkKKwkJCVN0cmluZyBidWZmZXI7CisJCQlidWZmZXIgPSByZWFkZXIucmVhZExpbmUoKTsgLy8gU2tpcCBoZWFkZXIJCQkJCQkKKwkJCVN0cmluZyBzOworCQkJaW50IHJvdyA9IDA7CisJCQl3aGlsZShidWZmZXIgIT0gbnVsbCkgeworCQkJCVN0cmluZ1Rva2VuaXplciBzdG9rID0gbmV3IFN0cmluZ1Rva2VuaXplcihidWZmZXIsIiwiKTsvLyROT04tTkxTLTEkCisJCQkJaW50IGNvbE5yID0gMDsKKwkJCQl3aGlsZShzdG9rLmhhc01vcmVUb2tlbnMoKSkgeworCQkJCQlTdHJpbmcgdG9rID0gc3Rvay5uZXh0VG9rZW4oKTsKKwkJCQkJaWYoY29sTnIgPCBOVU1fTEVBRF9DT0xTIHx8IGtlZXBDb2x1bW5zLmdldChhZG1pbkxldmVsKS5jb250YWlucyhjb2xOcikpIHsKKwkJCQkJCS8vIENvcHkgY29sdW1uIHZhbHVlCisJCQkJCQlpZihjb2xOciA+IDApIGZ3LndyaXRlKCIsIik7CisJCQkJCQlmdy53cml0ZSh0b2spOworCQkJCQl9CisJCQkJCSsrY29sTnI7CisJCQkJfQorCQkJCWZ3LndyaXRlKCJcbiIpOworCQkJCQorCVV0aWxMb2dnZXIubG9nSW5mb3JtYXRpb24oIkNvcGllZCByb3cgIityb3crKyk7CisJCQkJYnVmZmVyID0gcmVhZGVyLnJlYWRMaW5lKCk7CisJCQl9CisJCQlmdy5mbHVzaCgpOworCQkJZncuY2xvc2UoKTsKKwkJCXJlYWRlci5jbG9zZSgpOworCQl9CisJfQorCQorCXByaXZhdGUgc3RhdGljIExpc3Q8SW50ZWdlcj4gZG9GaWx0ZXIoU3RyaW5nIFtdIHJvdywgU3RyaW5nIHByZWRpY2F0ZSwgU3RyaW5nIHZhbHVlKSB7CisJCQorCQlkb3VibGUgdmFsID0gRG91YmxlLnZhbHVlT2YodmFsdWUpOworCQorCQlBcnJheUxpc3Q8SW50ZWdlcj5yZXN1bHQgPSBuZXcgQXJyYXlMaXN0PEludGVnZXI+KCk7CisJCQorCQlmb3IoaW50IGkgPSBOVU1fTEVBRF9DT0xTO2k8cm93Lmxlbmd0aDsrK2kpIHsKKwkJCWRvdWJsZSBjdmFsID0gRG91YmxlLnBhcnNlRG91YmxlKHJvd1tpXSk7CisJCQkJCQorCQkJYm9vbGVhbiBwcmVkTWF0Y2ggPSBmYWxzZTsKKwkJCWlmKHByZWRpY2F0ZS5lcXVhbHMoIj4iKSkgeworCQkJCWlmKGN2YWwgPiB2YWwpIHByZWRNYXRjaCA9IHRydWU7CisJCQl9CisJCQllbHNlIGlmKHByZWRpY2F0ZS5lcXVhbHMoIjwiKSkgeworCQkJCWlmKGN2YWwgPCB2YWwpIHByZWRNYXRjaCA9IHRydWU7CisJCQl9CisJCQllbHNlIGlmKHByZWRpY2F0ZS5lcXVhbHMoIj49IikpIHsKKwkJCQlpZihjdmFsID49IHZhbCkgcHJlZE1hdGNoID0gdHJ1ZTsKKwkJCX0gCisJCQllbHNlIGlmKHByZWRpY2F0ZS5lcXVhbHMoIjw9IikpIHsKKwkJCQlpZihjdmFsIDw9IHZhbCkgcHJlZE1hdGNoID0gdHJ1ZTsKKwkJCX0KKwkJCQkKKwkJCWlmKHByZWRNYXRjaCkgcmVzdWx0LmFkZChpKTsKKwkJCisJCX0KKwkJcmV0dXJuIHJlc3VsdDsKKwl9Cit9CisKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3NyYy9vcmcvZWNsaXBzZS9zdGVtL3V0aWxpdHkvZ2VuZXJhdG9ycy9GaW5kUnVuUGFyYW1ldGVyRmlsZS5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdXRpbGl0eS9nZW5lcmF0b3JzL0ZpbmRSdW5QYXJhbWV0ZXJGaWxlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmFkYmZkNwotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3NyYy9vcmcvZWNsaXBzZS9zdGVtL3V0aWxpdHkvZ2VuZXJhdG9ycy9GaW5kUnVuUGFyYW1ldGVyRmlsZS5qYXZhCkBAIC0wLDAgKzEsMTQ2IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS5nZW5lcmF0b3JzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA5IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGphdmEuaW8uQnVmZmVyZWRSZWFkZXI7CitpbXBvcnQgamF2YS5pby5GaWxlOworaW1wb3J0IGphdmEuaW8uRmlsZUlucHV0U3RyZWFtOworaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW1SZWFkZXI7CitpbXBvcnQgamF2YS5tYXRoLkJpZ0RlY2ltYWw7CitpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuU3RyaW5nVG9rZW5pemVyOworCisvKioKKyAqIEdpdmVuIGEgc2V0IG9mIHJ1biBwYXJhbWV0ZXIgbmFtZXMgYW5kIHZhbHVlcywgZmluZCBhIG1hdGNoaW5nIHJ1biBwYXJhbWV0ZXIKKyAqIGZpbGUgYW55d2hlcmUgaW4gYSBzdWIgZGlyZWN0b3J5IG9mIHRoZSBpbnB1dCBkaXJlY3RvcnkuIFVzZWZ1bCBmb3IgZmluZGluZworICogZXhhY3RseSB0aGUgbG9nZ2VkIGRhdGEgeW91IHdhbnQgCisgKi8KK3B1YmxpYyBjbGFzcyBGaW5kUnVuUGFyYW1ldGVyRmlsZSB7CisKKwkvKioKKwkgKiAKKwkgKiBAcGFyYW0gYXJncworCSAqLworCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZyBbXSBhcmdzKSB7CisJCWlmKGFyZ3MubGVuZ3RoIDwgMSkgeworCQkJU3lzdGVtLmVyci5wcmludGxuKCJVc2FnZTogRmluZFJ1blBhcmFtZXRlckZpbGUgPGRpcj4gPHBhcmFtIDE+IDx2YWwgMT4gPHBhcmFtIDI+IDx2YWwgMj4gLi4uIDxwYXJhbSBuPiA8dmFsIG4+Iik7IC8vJE5PTi1OTFMtMSQKKwkJCVN5c3RlbS5leGl0KC0xKTsKKwkJfQorCQkKKwkJU3RyaW5nIGRpciA9IGFyZ3NbMF07CisJCQkJCisJCXRyeSB7CisJCQkgLy8gT3BlbiBkaXIKKwkJCUZpbGUgZCA9IG5ldyBGaWxlKGRpcik7CisJCQlpZighZC5leGlzdHMoKSB8fCAhZC5pc0RpcmVjdG9yeSgpKSB7IAorCQkJCVN5c3RlbS5lcnIucHJpbnRsbihkaXIrICJub3QgZm91bmQgb3IgaXQgaXMgbm90IGEgZGlyZWN0b3J5Iik7IC8vJE5PTi1OTFMtMSQKKwkJCQlTeXN0ZW0uZXhpdCgtMSk7CisJCQl9CisJCQkKKwkJCXJlY3Vyc2VTZWFyY2goZCwgYXJncyk7CisJCQl9IGNhdGNoKEV4Y2VwdGlvbiBlKSB7CisJCQllLnByaW50U3RhY2tUcmFjZSgpOworCQl9CisJCQorCX0KKwkKKwlwcml2YXRlIHN0YXRpYyB2b2lkIHJlY3Vyc2VTZWFyY2goRmlsZSBkLCBTdHJpbmcgW10gYXJncykgeworCQkgLy8gUmVhZCBpbmZlY3Rpb3VzIGZpbGUKKwkJCisJCXRyeSB7CisJCSBpZihkLmlzRGlyZWN0b3J5KCkpIHsKKwkJCSAvLyBLZWVwIGdvaW5nIGRvd24gZGVlcGVyCisJCQkgU3RyaW5nIFtdIGZpbGVzICA9IGQubGlzdCgpOworCQkJIGZvcihTdHJpbmcgX2Q6ZmlsZXMpIHsKKwkJCQkgRmlsZSBmID0gbmV3IEZpbGUoZC5nZXRBYnNvbHV0ZVBhdGgoKStGaWxlLnNlcGFyYXRvcitfZCk7CisJCQkJIC8vIFVuaXggbWFrZSBzdXJlIGl0J3Mgbm90IHBhcmVudCBkaXIgb3Igd2UgZ2V0IGluZmluaXRlIGxvb3AgcHJvYmxlbSBoZXJlCisJCQkJIC8vIEZpeCBsYXRlcgorCQkJCSByZWN1cnNlU2VhcmNoKGYsIGFyZ3MpOworCQkJIH0KKwkJIH0KKwkJIAorCQkgLy8gTm90IGEgZGlyZWN0b3J5LiBEb2VzIHRoZSBmaWxlIG5hbWUgbWF0Y2g/CisJCSAKKwkJIFN0cmluZyBuYW1lID0gZC5nZXROYW1lKCk7CisJCSBpZighbmFtZS5lcXVhbHMoInJ1bnBhcmFtZXRlcnMuY3N2IikgJiYgIW5hbWUuZXF1YWxzKCJydW5wYXJhbXRlcnMuY3N2IikpIHJldHVybiA7IC8vIHdyb25nIGZpbGUgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCisJCSAKKwkJIAorCQkgCisJCSAKKwkJIEFycmF5TGlzdDxTdHJpbmc+IHBhcmFtTmFtZXMgPSBuZXcgQXJyYXlMaXN0PFN0cmluZz4oKTsKKwkJIEFycmF5TGlzdDxTdHJpbmc+IHBhcmFtVmFscyA9IG5ldyBBcnJheUxpc3Q8U3RyaW5nPigpOworCQkgCisJCSBGaWxlSW5wdXRTdHJlYW0gaWZpbGUgPSBuZXcgRmlsZUlucHV0U3RyZWFtKGQpOyAKKwkgICAgIEJ1ZmZlcmVkUmVhZGVyIGlyZWFkZXIgPSBuZXcgQnVmZmVyZWRSZWFkZXIobmV3IElucHV0U3RyZWFtUmVhZGVyKGlmaWxlKSk7CisJICAgICBTdHJpbmcgaGVhZGVyID0gbnVsbDsKKwkgICAgIGhlYWRlcj1pcmVhZGVyLnJlYWRMaW5lKCk7CisJICAgICBpZihoZWFkZXIgPT0gbnVsbCkgeworCSAgICAJIFN5c3RlbS5lcnIucHJpbnRsbigiRXJyb3IsICIrZC5nZXRBYnNvbHV0ZVBhdGgoKSsiIGZpbGUgaXMgZW1wdHkhIik7ICAvLyROT04tTkxTLTEkLy8kTk9OLU5MUy0yJAorCSAgICAJIFN5c3RlbS5leGl0KC0yKTsKKwkgICAgIH0KKwkgICAgIFN0cmluZ1Rva2VuaXplciBzdCA9IG5ldyBTdHJpbmdUb2tlbml6ZXIoaGVhZGVyLCAiLCIpOyAvLyROT04tTkxTLTEkCisJICAgICB3aGlsZShzdC5oYXNNb3JlVG9rZW5zKCkpIHsKKwkgICAgCSBTdHJpbmcgdmFsID0gc3QubmV4dFRva2VuKCk7CisJICAgIAkgcGFyYW1OYW1lcy5hZGQodmFsLnRyaW0oKSk7CisJICAgICB9CisJICAgIAorCSAgICBTdHJpbmcgZGF0YSA9IG51bGw7IAorCSAgICBkYXRhPWlyZWFkZXIucmVhZExpbmUoKTsKKwkgICAgaWYoZGF0YSA9PSBudWxsKSB7CisJICAgIAkgU3lzdGVtLmVyci5wcmludGxuKCJFcnJvciwgIitkLmdldEFic29sdXRlUGF0aCgpKyIgZmlsZSBoYXMgbm8gZGF0YSEiKTsgIC8vJE5PTi1OTFMtMSQvLyROT04tTkxTLTIkCisJICAgIAkgU3lzdGVtLmV4aXQoLTIpOworCSAgICAgfQorCSAgICAKKwkgICAgc3QgPSBuZXcgU3RyaW5nVG9rZW5pemVyKGRhdGEsICIsIik7IC8vJE5PTi1OTFMtMSQKKwkgICB3aGlsZSAoc3QuaGFzTW9yZVRva2VucygpKSB7CisJCQlTdHJpbmcgdmFsID0gc3QubmV4dFRva2VuKCkudHJpbSgpOworCQkJCisJCQkvLyBTdGFuZGFyZCBmb3JtYXQgZm9yIG51bWJlciAKKwkJCXRyeSB7CisJCQkJQmlnRGVjaW1hbCBiZCA9IG5ldyBCaWdEZWNpbWFsKHZhbCk7CisJCQkgICAgYmQgPSBiZC5zZXRTY2FsZSg1LEJpZ0RlY2ltYWwuUk9VTkRfSEFMRl9VUCk7CisJCQkgICAgdmFsID0gYmQudG9TdHJpbmcoKTsKKwkJCX1jYXRjaChOdW1iZXJGb3JtYXRFeGNlcHRpb24gbmZlKSB7CisJCQkJLy8gSWdub3JlIG5vdCBhIGRvdWJsZQorCQkJfQorCQkJcGFyYW1WYWxzLmFkZCh2YWwpOworCSAgICB9IC8vIHJlYWQgdG9rZW5zCisJIAorCSAgIGlyZWFkZXIuY2xvc2UoKTsKKwkJCisJICAgLy8gTm93IHNlZSBpZiB0aGUgZmlsZSBtYXRjaGVzCisJICAgCisJICAgYm9vbGVhbiBtYXRjaCA9IHRydWU7CisJICAgZm9yKGludCBpID0gMTtpPGFyZ3MubGVuZ3RoO2krPTIpIHsKKwkJICAgU3RyaW5nIHBuYW1lID0gYXJnc1tpXS50cmltKCk7CisJCSAgIFN0cmluZyBwdmFsID0gYXJnc1tpKzFdLnRyaW0oKTsgLy8gaW5kZXggb3V0IG9mIGJvdW5kIGlmIGJhZCBpbnB1dAorCQkgICAvLyBDb25mb3JtIHRvIHN0YW5kYXJkIG51bWJlciBmb3JtYXQgaWYgaXQncyBhIG51bWJlcgorCQkgICB0cnkgeworCQkJCUJpZ0RlY2ltYWwgYmQgPSBuZXcgQmlnRGVjaW1hbChwdmFsKTsKKwkJCSAgICBiZCA9IGJkLnNldFNjYWxlKDUsQmlnRGVjaW1hbC5ST1VORF9IQUxGX1VQKTsKKwkJCSAgICBwdmFsID0gYmQudG9TdHJpbmcoKTsKKwkJCX1jYXRjaChOdW1iZXJGb3JtYXRFeGNlcHRpb24gbmZlKSB7CisJCQkJLy8gSWdub3JlIG5vdCBhIGRvdWJsZQorCQkJfQorCQkgICBpZighcGFyYW1OYW1lcy5jb250YWlucyhwbmFtZSkpIHttYXRjaCA9IGZhbHNlO2JyZWFrO30KKwkJICAgZm9yKGludCBuPTA7bjxwYXJhbU5hbWVzLnNpemUoKTsrK24pIAorCQkJICAgaWYocG5hbWUuZXF1YWxzKHBhcmFtTmFtZXMuZ2V0KG4pKSAmJiAhcHZhbC5lcXVhbHMocGFyYW1WYWxzLmdldChuKSkpIHttYXRjaD1mYWxzZTticmVhazt9CisJICAgfQorCSAgIGlmKCFtYXRjaCkgcmV0dXJuOworCSAgIAorCSAgIFV0aWxMb2dnZXIubG9nSW5mb3JtYXRpb24oZC5nZXRBYnNvbHV0ZVBhdGgoKSk7CisJIAl9IGNhdGNoKEV4Y2VwdGlvbiBlKSB7CisJCQllLnByaW50U3RhY2tUcmFjZSgpOworCQl9CisJICAgIAorCX0KK30KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3NyYy9vcmcvZWNsaXBzZS9zdGVtL3V0aWxpdHkvZ2VuZXJhdG9ycy9HTUxHZW5lcmF0b3IuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3NyYy9vcmcvZWNsaXBzZS9zdGVtL3V0aWxpdHkvZ2VuZXJhdG9ycy9HTUxHZW5lcmF0b3IuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYTJkYTQ1Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdXRpbGl0eS9nZW5lcmF0b3JzL0dNTEdlbmVyYXRvci5qYXZhCkBAIC0wLDAgKzEsOTQzIEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS5nZW5lcmF0b3JzOworCitpbXBvcnQgamF2YS5pby5CdWZmZXJlZFJlYWRlcjsKK2ltcG9ydCBqYXZhLmlvLkZpbGU7CitpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLmlvLlByaW50V3JpdGVyOworaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7CitpbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7CitpbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOworaW1wb3J0IGphdmEudXRpbC5MaXN0OworaW1wb3J0IGphdmEudXRpbC5TZXQ7CitpbXBvcnQgamF2YS51dGlsLlN0cmluZ1Rva2VuaXplcjsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKgorICogU1RFTSBJSSBEYXRhIE1pZ3JhdGlvbi9HZW5lcmF0aW9uIFV0aWxpdGllcyA6IEluc3RhbmNlcyBvZiB0aGlzIHV0aWxpdHkgY2xhc3MKKyAqIGdlbmVyYXRlIHRoZSBHTUwgZGF0YSBmaWxlcyBmb3IgdGhlIGRpdmEgZGF0YSBzZXQgYXQgYWRtaW4gbGV2ZWxzIDAsIDEsIGFuZAorICogMi4KKyAqIAorICogCisgKiBUbyBjb25maWd1cmUsIHNlZSBjb25maWd1cmF0aW9uIGZpbGUgOgorICogb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L2NvbmZpZ3VyYXRpb24vR01MR2VuZXJhdG9yLmNvbmZpZworICogCisgKiAKKyAqIFRvIHJ1biwgYWRkIHBhdGggdG8gY29uZmlndXJhdGlvbiBmaWxlIGluIHRoZSBydW4gcHJvZmlsZSAoaS5lLgorICogQzpcc3RlbUlJXG9yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eVxjb25maWd1cmF0aW9uXEdNTEdlbmVyYXRvci5jb25maWcpCisgKiAKKyAqIAorICogU0VUIFZNQVJHUyBUTyA6IC1YbXMxMDI0bSAtWG14MTAyNG0KKyAqIAorICogCisgKi8KKworcHVibGljIGNsYXNzIEdNTEdlbmVyYXRvciB7CisKKwkvKioKKwkgKiBPdXIgc291cmNlIGZpbGVzIGZvciBJU08gMzE2Ni0xIGNvZGVzIGFuZCBmb3IgdGhlIGxpc3Qgb2YgdGFyZ2V0CisJICogY291bnRyaWVzLgorCSAqLworCisJcHJpdmF0ZSBTdHJpbmcgaXNvMzE2Nl8xID0gbnVsbDsKKworCXByaXZhdGUgU3RyaW5nIGlzbzMxNjZfMiA9IG51bGw7CisKKwlwcml2YXRlIFN0cmluZyBmaXhGaWxlID0gbnVsbDsKKworCXByaXZhdGUgU3RyaW5nIHRhcmdldEZpbGUgPSBudWxsOworCisJcHJpdmF0ZSBTdHJpbmcgbGV4RGlyID0gbnVsbDsKKworCXByaXZhdGUgU3RyaW5nIG91dHB1dERpciA9IG51bGw7CisKKwlwcml2YXRlIFN0cmluZyB3b3Jrc3BhY2UgPSBudWxsOworCisJcHJpdmF0ZSBTdHJpbmcgdXNhRGVzY3JpcHRvckZpbGUgPSBudWxsOworCisJLyoqCisJICogTGlzdCBmb3IgSVNPIDMxNjYtMSBjb2RlcyBhbmQgdGFyZ2V0IGNvdW50cmllcy4KKwkgKi8KKworCUxpc3QgdGFyZ2V0TGlzdCA9IG51bGw7CisKKwlMaXN0IGNvZGVMaXN0ID0gbnVsbDsKKworCUxpc3QgY29kZWZpeExpc3QgPSBudWxsOworCisJTGlzdCB1c2FEZXNjcmlwdG9yTGlzdCA9IG51bGw7CisKKwkvKioKKwkgKiBDb25zdHJ1Y3RvcgorCSAqIAorCSAqIEBwYXJhbSBpc28zMTY2XzEgLQorCSAqICAgICAgICAgICAgZGF0YSBmaWxlIHdpdGggdGhlIElTTzMxNjYtMSBBTFBIQV8yIGFuZCBBTFBIQV8zIGNvZGVzLgorCSAqIEBwYXJhbSBpc28zMTY2XzIgLQorCSAqICAgICAgICAgICAgZGF0YSBmaWxlIHdpdGggdGhlIElTTzMxNjYtMiBjb2Rlcy4KKwkgKiBAcGFyYW0gZml4RmlsZSAtCisJICogICAgICAgICAgICBmaWxlIGNvbnRhaW5pbmcgbWlzc2luZyBJU08zMTY2LTIgY29kZXMKKwkgKiBAcGFyYW0gdGFyZ2V0RmlsZQorCSAqICAgICAgICAgICAgdGhlIGxpc3Qgb2YgY291bnRyaWVzIGZvciB3aGljaCB3ZSB3aWxsIGdlbmVyYXRlIEdNTCBmaWxlcworCSAqIEBwYXJhbSBsZXhEaXIKKwkgKiAgICAgICAgICAgIGZvbGRlciBjb250YWluaW5nIGxleGljb2dyYXBoaWNhbGx5IHNvcnRlZCBmaWxlcworCSAqIEBwYXJhbSBvdXRwdXREaXIKKwkgKiAgICAgICAgICAgIHRoZSBvdXRwdXQgZGlyZWN0b3J5IGZvciB0aGUgR01MIGZpbGVzIHdlIGdlbmVyYXRlCisJICovCisJLy8gcHVibGljIEdNTEdlbmVyYXRvcihTdHJpbmcgaXNvMzE2Nl8xLCBTdHJpbmcgaXNvMzE2Nl8yLCBTdHJpbmcgZml4RmlsZSwKKwkvLyBTdHJpbmcgdGFyZ2V0RmlsZSwgU3RyaW5nIGxleERpciwgU3RyaW5nIG91dHB1dERpcikgeworCS8vIC8vIFNldCB2YWx1ZXMgb2YgZ2xvYmFsIHZhcmlhYmxlcy4KKwkvLyB0aGlzLmlzbzMxNjZfMSA9IGlzbzMxNjZfMTsKKwkvLyB0aGlzLmlzbzMxNjZfMiA9IGlzbzMxNjZfMjsKKwkvLyB0aGlzLmZpeEZpbGUgPSBmaXhGaWxlOworCS8vIHRoaXMudGFyZ2V0RmlsZSA9IHRhcmdldEZpbGU7CisJLy8gdGhpcy5sZXhEaXIgPSBsZXhEaXI7CisJLy8gdGhpcy5vdXRwdXREaXIgPSBvdXRwdXREaXI7CisJLy8gLy8gVGhlIG5leHQgZGVzY3JpcHRvciBpcyB1c2VkIG9ubHkgd2hlbiBwcm9jZXNzaW5nIHRoZSBVU0EKKwkvLyB0aGlzLnVzYURlc2NyaXB0b3JGaWxlID0gd29ya3NwYWNlCisJLy8gKworCS8vICJcXG9yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eVxccGFyYW1ldGVyc1xcSVNPRklYXFxVU0FfRklQUy50eHQiOy8vJE5PTi1OTFMtMSQKKwkvLyB0YXJnZXRMaXN0ID0gbnVsbDsKKwkvLwl9CisKKwkvKioKKwkgKiBAcGFyYW0gY29uZmlnRmlsZQorCSAqLworCXB1YmxpYyBHTUxHZW5lcmF0b3IoU3RyaW5nIGNvbmZpZ0ZpbGUpIHsKKworCQkvLyBMb2FkIGFsbCBjb25maWd1cmF0aW9uIHZhcmlhYmxlcworCQlIYXNoTWFwPFN0cmluZywgU3RyaW5nPiB2YXJzID0gR2VuVXRpbHMubG9hZENvbmZpZ0ZpbGUoY29uZmlnRmlsZSk7CisKKwkJU2V0PFN0cmluZz4ga2V5cyA9IHZhcnMua2V5U2V0KCk7CisJCUl0ZXJhdG9yIGl0ID0ga2V5cy5pdGVyYXRvcigpOworCQl3aGlsZSAoaXQuaGFzTmV4dCgpKSB7CisJCQlTdHJpbmcgdmFyID0gKFN0cmluZykgaXQubmV4dCgpOworCisJCQkvLyBBc3NpZ24gdmFsdWVzIHRvIGNvbmZpZ3VyYXRpb24gdmFyaWFibGVzIDoKKwkJCWlmICh2YXIuZXF1YWxzKCJXT1JLU1BBQ0UiKSkgeyAvLyROT04tTkxTLTEkCisJCQkJd29ya3NwYWNlID0gdmFycy5nZXQodmFyKTsKKwkJCX0gZWxzZSBpZiAodmFyLmVxdWFscygiSVNPMzE2Nl8xIikpIHsgLy8kTk9OLU5MUy0xJAorCQkJCWlzbzMxNjZfMSA9IHZhcnMuZ2V0KHZhcik7CisJCQl9IGVsc2UgaWYgKHZhci5lcXVhbHMoIklTTzMxNjZfMiIpKSB7IC8vJE5PTi1OTFMtMSQKKwkJCQlpc28zMTY2XzIgPSB2YXJzLmdldCh2YXIpOworCQkJfSBlbHNlIGlmICh2YXIuZXF1YWxzKCJJU09fRklYIikpIHsgLy8kTk9OLU5MUy0xJAorCQkJCWZpeEZpbGUgPSB2YXJzLmdldCh2YXIpOworCQkJfSBlbHNlIGlmICh2YXIuZXF1YWxzKCJUQVJHRVRfTElTVCIpKSB7IC8vJE5PTi1OTFMtMSQKKwkJCQl0YXJnZXRGaWxlID0gdmFycy5nZXQodmFyKTsKKwkJCX0gZWxzZSBpZiAodmFyLmVxdWFscygiTEVYX0RJUiIpKSB7IC8vJE5PTi1OTFMtMSQKKwkJCQlsZXhEaXIgPSB2YXJzLmdldCh2YXIpOworCQkJfSBlbHNlIGlmICh2YXIuZXF1YWxzKCJQUk9QRVJUSUVTX09VVFBVVCIpKSB7IC8vJE5PTi1OTFMtMSQKKwkJCQlvdXRwdXREaXIgPSB2YXJzLmdldCh2YXIpOworCQkJfQorCisJCX0gLy8gd2hpbGUKKworCQkvLyBUaGUgd29ya3NwYWNlIHZhcmlhYmxlIHNob3VsZCBlbmQgd2l0aCBhIHNsYXNoIGNoYXJhY3RlcgorCQlpZiAod29ya3NwYWNlLmVuZHNXaXRoKCJcXCIpID09IGZhbHNlKSB7IC8vJE5PTi1OTFMtMSQKKwkJCXdvcmtzcGFjZSArPSAiXFwiOyAvLyROT04tTkxTLTEkCisJCX0KKworCQlTdHJpbmcgcGF0aCA9IHdvcmtzcGFjZSArIEdlbkNvbnN0YW50cy5QQVJBTVNfRElSOworCisJCS8vIFNldCByZW1haW5pbmcgY29uZmlnIHZhcnMgdXNpbmcgV09SS1NQQUNFICh3b3Jrc3BhY2UgcmVsYXRpdmUpCisJCWlmIChpc28zMTY2XzEgPT0gbnVsbCkgeworCQkJaXNvMzE2Nl8xID0gcGF0aCArIEdlbkNvbnN0YW50cy5JU08zMTY2XzFfRklMRTsKKwkJfQorCQlpZiAoaXNvMzE2Nl8yID09IG51bGwpIHsKKwkJCWlzbzMxNjZfMiA9IHBhdGggKyBHZW5Db25zdGFudHMuSVNPMzE2Nl8yX0ZJTEU7CisJCX0KKwkJaWYgKGZpeEZpbGUgPT0gbnVsbCkgeworCQkJZml4RmlsZSA9IHBhdGggKyBHZW5Db25zdGFudHMuSVNPRklYX0ZJTEU7CisJCX0KKwkJaWYgKHRhcmdldEZpbGUgPT0gbnVsbCkgeworCQkJdGFyZ2V0RmlsZSA9IHBhdGggKyBHZW5Db25zdGFudHMuR1JPVVBFRF9DT1VOVFJJRVM7CisJCX0KKwkJaWYgKGxleERpciA9PSBudWxsKSB7CisJCQlsZXhEaXIgPSBwYXRoICsgR2VuQ29uc3RhbnRzLkxFWF9ESVI7CisJCX0KKwkJaWYgKG91dHB1dERpciA9PSBudWxsKSB7CisJCQlvdXRwdXREaXIgPSB3b3Jrc3BhY2UgKyBHZW5Db25zdGFudHMuTUFQU19PVVRQVVRfRElSOworCQl9CisKKwkJdGFyZ2V0TGlzdCA9IG51bGw7CisKKwkJLy8gVGhlIG5leHQgZGVzY3JpcHRvciBpcyB1c2VkIG9ubHkgd2hlbiBwcm9jZXNzaW5nIHRoZSBVU0EKKwkJdGhpcy51c2FEZXNjcmlwdG9yRmlsZSA9IHBhdGggKyBHZW5Db25zdGFudHMuVVNBX0ZJUFNfRklMRTsKKworCX0KKworCS8qKgorCSAqIFRoaXMgbWV0aG9kIHNldHMgdXAgYW5kIHJ1bnMgdGhpcyBnZW5lcmF0b3IuCisJICogCisJICovCisJcHVibGljIHZvaWQgcnVuKCkgeworCisJCS8vIFJlYWQgYW5kIGtlZXAgaW4gbWVtb3J5IGEgbGlzdCBvZiB0aGUgY291bnRyaWVzIHdlIHdhbnQuCisJCXRhcmdldExpc3QgPSBHZW5VdGlscy5wb3B1bGF0ZUxpc3QodGFyZ2V0RmlsZSk7CisKKwkJLy8gUmVhZCBhbmQga2VlcCBpbiBtZW1vcnkgYSBsaXN0IG9mIHRoZSBJU08zMTY2LTEgQUxQSEEyLCBBTFBIQTMsIGFuZAorCQkvLyBudW1lcmljIGNvZGVzLgorCQljb2RlTGlzdCA9IEdlblV0aWxzLnBvcHVsYXRlTGlzdChpc28zMTY2XzEpOworCisJCS8vIFJlYWQgYW5kIGtlZXAgaW4gbWVtb3J5IGEgbGlzdCBvZiB0aGUgbWlzc2luZyBJU08zMTY2LTIgY29kZXMKKwkJY29kZWZpeExpc3QgPSBHZW5VdGlscy5wb3B1bGF0ZUxpc3QoZml4RmlsZSk7CisKKwkJLy8gTG9hZCB0aGUgbGlzdCBvZiBkZXNjcmlwdG9ycyBmb3IgdGhlIFVTQSAoc3BlY2lhbCBjYXNlKQorCQl1c2FEZXNjcmlwdG9yTGlzdCA9IEdlblV0aWxzLnBvcHVsYXRlTGlzdCh1c2FEZXNjcmlwdG9yRmlsZSk7CisKKwkJLy8gTm93LCBwcm9jZXNzIGVhY2ggaXRlbSBpbiB0aGUgdGFyZ2V0IGxpc3QuCisJCXByb2Nlc3MoKTsKKworCX0KKworCS8qKgorCSAqIFByb2Nlc3Mgb3VyIGdsb2JhbCBsaXN0IG9mIHRhcmdldCBjb3VudHJpZXMuIEZvciBlYWNoIGNvdW50cnkgaW4gbGlzdCwKKwkgKiBnZW5lcmF0ZSBpdHMgR01MIGZpbGUuCisJICogCisJICovCisJcHJvdGVjdGVkIHZvaWQgcHJvY2VzcygpIHsKKworCQkvLyBBIHdyaXRlciBmb3IgdGhlIG5ldyBmaWxlIHdlIGFyZSBjcmVhdGluZy4KKwkJUHJpbnRXcml0ZXIgZ21sRmlsZSA9IG51bGw7CisKKwkJLy8gT2JqZWN0IGhvbGRpbmcgSVNPMzE2Ni0xIHJlbGF0ZWQgZGF0YS4KKwkJSVNPQ29kZTEgaXNvQ29kZSA9IG51bGw7CisKKwkJLy8gTmFtZSBvZiB0aGUgbmV3IHByb3BlcnRpZXMgZmlsZS4KKwkJU3RyaW5nIGZpbGVOYW1lID0gbnVsbDsKKworCQkvLyBBIGxpc3QgZm9yIElTTyAzMTY2LTIgb2JqZWN0cworCQlMaXN0IGlzbzJMaXN0ID0gbmV3IEFycmF5TGlzdCgpOworCisJCS8vIEZpbGVuYW1lcyBmb3IgbGV4MSBhbmQgbGV4MiBmaWxlcyBmb3IgYSBnaXZlbiBjb3VudHJ5LgorCQlTdHJpbmcgbGV4QWRtaW4xRmlsZSA9IG51bGw7CisJCVN0cmluZyBsZXhBZG1pbjJGaWxlID0gbnVsbDsKKworCQkvLyBMaXN0cyBob2xkaW5nIHRoZSBsZXgxIGFuZCBsZXgyIHZhbHVlcy4KKwkJLy8gTk9URTogbGV4IHZhbHVlcyBhcmUgdGhlIGxleGljb2dyYXBoaWNhbGx5IHNvcnRlZCB2YWx1ZXMgZm9yCisJCS8vIGFkbWluaXN0cmF0aW9uIGxldmVscy4KKwkJTGlzdDxTdHJpbmc+IGxleDFEYXRhU2V0ID0gbnVsbDsKKwkJTGlzdDxTdHJpbmc+IGxleDJEYXRhU2V0ID0gbnVsbDsKKworCQkvLyBMaXN0cyBmb3IgaG9sZGluZyBsZXgxIGFuZCBsZXgyIG9iamVjdHMgZm9yIGEgZ2l2ZW4gY291bnRyeS4KKwkJTGlzdDxMZXgxT2JqPiBsZXgxTGlzdCA9IG51bGw7CisJCUxpc3Q8TGV4Mk9iaj4gbGV4Mkxpc3QgPSBudWxsOworCisJCWludCBzaXplID0gdGFyZ2V0TGlzdC5zaXplKCk7CisKKwkJaW50IGxpbmVDb3VudGVyID0gMDsKKworCQkvLyBJdGVyYXRlIGZvciBldmVyeSBjb3VudHJ5IGFuZCBjcmVhdGUgaXRzIEdNTCBkYXRhIGZpbGUuCisJCWZvciAoaW50IGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7CisKKwkJCS8vIEdldCB0aGUgbmV4dCBjb3VudHJ5IGluIHRoZSBsaXN0LgorCQkJU3RyaW5nIGZpbGUgPSAoKFN0cmluZykgdGFyZ2V0TGlzdC5nZXQoaSkpLnRyaW0oKTsKKworCQkJLy8gQW4gaW5kZXggZm9yIHVua253b24gb3Igbi5hLiBlbnRyaWVzCisJCQlpbnQgdW5rQ291bnRlciA9IDE7CisKKwkJCS8vIFdlIHVzZSB0aGlzIGxpc3QgdG8ga2VlcCB0cmFjayBvZiBkdXBsaWNhdGVkIHBvbHlnb25zLgorCQkJTGlzdDxTVEVNUG9seWdvbj4gcG9seWdvbnMgPSBudWxsOworCisJCQkvLyBPcGVuIHRoZSBkYXRhIHNvdXJjZSBmaWxlIGZvciB0aGlzIGNvdW50cnkuCisJCQlCdWZmZXJlZFJlYWRlciByZWFkZXIgPSBHZW5VdGlscy5vcGVuUmVhZGVyKGZpbGUpOworCQkJU3lzdGVtLm91dAorCQkJCQkucHJpbnRsbigiXHRcdDw8PDwgR01MIEdFTkVSQVRPUiAtLSBQcm9jZXNzaW5nIDoiICsgZmlsZSArICIgPj4+PiIpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKKwkJCXRyeSB7CisKKwkJCQlpZiAocmVhZGVyICE9IG51bGwpIHsKKworCQkJCQlTdHJpbmcgYnVmZmVyID0gbnVsbDsKKwkJCQkJLy8gRGVzY3JpYmVzIGxldmVsCisJCQkJCS8vIG9mIGRhdGEgd2UKKwkJCQkJLy8gYXJlIG5vdyBwcm9jZXNzaW5nIDogTEVWRUwwLCBMRVZFTDEsIG9yIExFVkVMMi4KKwkJCQkJaW50IGxldmVsID0gLTE7CisKKwkJCQkJLy8gUmVjb3JkIHRoZSBwcmV2aW91cyB0eXBlLgorCQkJCQlpbnQgb2xkbGV2ZWwgPSBsZXZlbCAtIDE7CisKKwkJCQkJLy8gVXNlZCB0byBkaXN0aW5ndWlzaCBiZXR3ZWVuIGEgc2ltcGxlIHBvbHlnb24gYW5kIGlzbGFuZHMKKwkJCQkJLy8gb2YgcG9seWdvbnMuIEluaXRpYWxpemUgc3RyaW5nIHRvIHRoZSBibGFuayBjaGFyYWN0ZXIuCisJCQkJCVN0cmluZyBpc2xhbmQgPSAiICI7IC8vJE5PTi1OTFMtMSQKKworCQkJCQl3aGlsZSAoR2VuVXRpbHMuRU9GKGJ1ZmZlciA9IHJlYWRlci5yZWFkTGluZSgpKSAhPSB0cnVlKSB7CisKKwkJCQkJCWxpbmVDb3VudGVyKys7CisKKwkJCQkJCS8vIFRoZSBkYXRhIHdlIHdhbnQgdG8gd3JpdGUgdG8gdGhlIG5ldyBHTUwgZmlsZS4KKwkJCQkJCVN0cmluZyBvdXRwdXQgPSAiICI7IC8vJE5PTi1OTFMtMSQKKworCQkJCQkJLy8gTWFrZSBzdXJlIHRoYXQgd2UgbWFyayBhbGwgdW5rbm93biBkYXRhLgorCQkJCQkJYnVmZmVyID0gYnVmZmVyLnJlcGxhY2UoIiwsIiwgIixVTktOT1dOLCIpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKKworCQkJCQkJLy8gV2UgdGFrZSBhIGNodW5rIG9mIHRoZSBkYXRhIFtCVUZGRVJfTUlOLEJVRkZFUl9NQVhdCisJCQkJCQkvLyB0byBtYWtlIHByb2Nlc3NzaW5nIG1vcmUKKwkJCQkJCS8vIGVmZmljaWVudCwgd2UgZG9udCBuZWVkIGFsbCBvZiBpdC4KKwkJCQkJCWludCBCVUZGRVJfTUlOID0gMDsKKwkJCQkJCWludCBCVUZGRVJfTUFYID0gMTI1OworCisJCQkJCQlTdHJpbmdbXSBpdGVtcyA9IEdlblV0aWxzCisJCQkJCQkJCS5leHRyYWN0KGJ1ZmZlci5sZW5ndGgoKSA8IEJVRkZFUl9NQVggPyBidWZmZXIKKwkJCQkJCQkJCQk6IGJ1ZmZlci5zdWJzdHJpbmcoQlVGRkVSX01JTiwKKwkJCQkJCQkJCQkJCUJVRkZFUl9NQVgpKTsKKworCQkJCQkJLy8gR2V0IHRoZSBjb3VudHJ5IG5hbWUKKwkJCQkJCVN0cmluZyBjb3VudHJ5ID0gaXRlbXNbSVNPRGF0YS5DT1VOVFJZX05BTUVdOworCisJCQkJCQkvLyBHZXQgdGhlIElTTzMxNjYtMSBpbmZvIGZvciB0aGlzIGNvdW50cnkKKwkJCQkJCWlmIChpc29Db2RlID09IG51bGwpIHsKKwkJCQkJCQlpc29Db2RlID0gR2VuVXRpbHMuZ2V0SVNPQ29kZShjb3VudHJ5LCBjb2RlTGlzdCk7CisJCQkJCQl9CisKKwkJCQkJCS8vIEdldCB0aGUgdHlwZSBvZiB0aGUgZGF0YSB3ZSBhcmUgcHJvY2Vzc2luZy4KKwkJCQkJCWxldmVsID0gR2VuVXRpbHMuZ2V0TGV2ZWwoaXRlbXMpOworCisJCQkJCQlpZiAobGV2ZWwgIT0gMCAmJiBpc28yTGlzdCAhPSBudWxsKSB7CisJCQkJCQkJLy8gTG9hZCB0aGUgSVNPIDMxNjYtMiBvYmplY3RzIGZvciB0aGlzIGNvdW50cnkKKwkJCQkJCQlpc28yTGlzdCA9IEdlblV0aWxzLmxvYWRJU08yKGlzbzMxNjZfMik7CisJCQkJCQl9CisKKwkJCQkJCS8vIFRoaXMgdmFyaWFibGUgaW5kaWNhdGVzIGEgdHJhbnNpdGlvbiBpbiBvdXIgZGF0YQorCQkJCQkJLy8gcHJvY2Vzc2luZworCQkJCQkJYm9vbGVhbiB0cmFuc2l0aW9uID0gKGxldmVsICE9IG9sZGxldmVsKSA/IHRydWUgOiBmYWxzZTsKKworCQkJCQkJLy8gVGhlIGN1cnJlbnQgZW50aXR5IHdlIGFyZSBkZWFsaW5nIHdpdGguCisJCQkJCQkvLyBCYXNlZCBvbiBpdHMgYWRtaW4gbGV2ZWwgaXQgY2FuIGJlIGEgY291bnRyeSwgYQorCQkJCQkJLy8gY291bnR5LCBldGM7CisJCQkJCQlTdHJpbmcgY3VycmVudCA9IG51bGw7CisKKwkJCQkJCS8vIERlc2NyaXB0b3IgZm9yIGN1cnJlbnQgZW50cnkuCisJCQkJCQlTdHJpbmcgZGVzY3JpcHRvciA9IG51bGw7CisKKwkJCQkJCWlmICh0cmFuc2l0aW9uID09IHRydWUpIHsKKwkJCQkJCQkvLyBLZWVwIHRyYWNrIG9mIHByZXZpb3VzIGxldmVsIGluIG9yZGVyIHRvIGRldGVjdAorCQkJCQkJCS8vIHRyYW5zaXRpb25zLgorCQkJCQkJCW9sZGxldmVsID0gbGV2ZWw7CisKKwkJCQkJCQkvLyBSZXNldCBjb3VudGVyIG9mIFVOS05PV04gYW5kIE4uQS4gZW50cmllcy4KKwkJCQkJCQl1bmtDb3VudGVyID0gMTsKKwkJCQkJCQkvLyBDbG9zZSB0aGUgcHJldmlvdXMgZmlsZQorCQkJCQkJCWlmIChnbWxGaWxlICE9IG51bGwpIHsKKwkJCQkJCQkJb3V0cHV0ID0gY2xvc2VQb2x5Z29uSXNsYW5kVGFncygpOworCQkJCQkJCQlvdXRwdXQgKz0gZ2V0Q2xvc2luZ1RhZ3MoKTsKKwkJCQkJCQkJR2VuVXRpbHMuYWRkRGF0YShnbWxGaWxlLCBvdXRwdXQpOworCQkJCQkJCQlnbWxGaWxlLmNsb3NlKCk7CisJCQkJCQkJfQorCisJCQkJCQkJLy8gQ2xlYXIgdGhlIGxpc3Qgb2YgdW5pcXVlIHBvbHlnb25zCisJCQkJCQkJaWYgKHBvbHlnb25zICE9IG51bGwpIHsKKwkJCQkJCQkJcG9seWdvbnMuY2xlYXIoKTsKKwkJCQkJCQl9CisKKwkJCQkJCQkvLyBHZXQgYSBuZXcsIGVtcHR5IHBvbHlnb24gbGlzdAorCQkJCQkJCXBvbHlnb25zID0gbmV3IEFycmF5TGlzdDxTVEVNUG9seWdvbj4oKTsKKworCQkJCQkJCS8vIElmIHRoZSBkaXJlY3RvcnkgZG9lcyBub3QgZXhpc3QgZm9yIHRoaXMgY291bnRyeSwKKwkJCQkJCQkvLyBjcmVhdGUgaXQgdXNpbmcgSVNPIGFscGhhMyBjb2RlLgorCQkJCQkJCUZpbGUgY291bnRyeURpciA9IG5ldyBGaWxlKG91dHB1dERpcgorCQkJCQkJCQkJKyBpc29Db2RlLmdldEFscGhhMygpKTsKKworCQkJCQkJCWlmIChjb3VudHJ5RGlyICE9IG51bGwKKwkJCQkJCQkJCSYmIGNvdW50cnlEaXIuZXhpc3RzKCkgPT0gZmFsc2UpIHsKKwkJCQkJCQkJLy8gRGlyZWN0b3J5IGRvZXMgbm90IGV4aXN0LiBDcmVhdGUgaXQuCisJCQkJCQkJCWNvdW50cnlEaXIubWtkaXIoKTsKKwkJCQkJCQl9CisKKwkJCQkJCQkvLyBDcmVhdGUgdGhlIGZpbGUgbmFtZSBmb3IgdGhlIG5ldworCQkJCQkJCS8vIEdNTCBmaWxlLgorCQkJCQkJCWZpbGVOYW1lID0gY291bnRyeURpciArICJcXCIgKyBpc29Db2RlLmdldEFscGhhMygpIC8vJE5PTi1OTFMtMSQKKwkJCQkJCQkJCSsgIl8iICsgbGV2ZWwgKyAiX01BUC54bWwiOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKKworCQkJCQkJCS8vIFJlc2V0IHRoZSBwcmV2aW91cyBlbnRpdHkKKwkJCQkJCQlpc2xhbmQgPSAiICI7IC8vJE5PTi1OTFMtMSQKKworCQkJCQkJCS8vIE9wZW4gdGhlIHdyaXRlciBmb3IgdGhlIG5ldyBHTUwgZmlsZQorCQkJCQkJCWdtbEZpbGUgPSBHZW5VdGlscy5vcGVuV3JpdGVyKGZpbGVOYW1lKTsKKworCQkJCQkJCS8vIEFkZCB0aGUgaGVhZGVyIG9mIHRoZSBmaWxlCisJCQkJCQkJb3V0cHV0ID0gZ2V0T3BlbmluZ1RhZ3MoaXNvQ29kZSwgbGV2ZWwpOworCisJCQkJCQkJLy8gV3JpdGUgZGF0YQorCQkJCQkJCUdlblV0aWxzLmFkZERhdGEoZ21sRmlsZSwgb3V0cHV0LnRyaW0oKSk7CisKKwkJCQkJCX0gLy8gaWYoIHRyYW5zaXRpb24gPT0gdHJ1ZSApCisKKwkJCQkJCXN3aXRjaCAobGV2ZWwpIHsKKworCQkJCQkJY2FzZSBEYXRhVHlwZXMuTEVWRUxfMDoKKwkJCQkJCQljdXJyZW50ID0gaXNvQ29kZS5nZXRBbHBoYTMoKTsKKwkJCQkJCQlicmVhazsKKworCQkJCQkJY2FzZSBEYXRhVHlwZXMuTEVWRUxfMToKKwkJCQkJCQljdXJyZW50ID0gaXRlbXNbSVNPRGF0YS5BRE1JTjFfTkFNRV0udG9VcHBlckNhc2UoKQorCQkJCQkJCQkJLnRyaW0oKTsKKwkJCQkJCQlicmVhazsKKworCQkJCQkJY2FzZSBEYXRhVHlwZXMuTEVWRUxfMjoKKwkJCQkJCQljdXJyZW50ID0gaXRlbXNbSVNPRGF0YS5BRE1JTjJfTkFNRV0udG9VcHBlckNhc2UoKQorCQkJCQkJCQkJLnRyaW0oKTsKKwkJCQkJCQlicmVhazsKKworCQkJCQkJfSAvLyBzd2l0Y2gKKworCQkJCQkJLy8gSGFuZGxlIFVOS05PV04gYW5kIE4uQS4gZW50cmllcyBkaWZmZXJlbnRseS4KKwkJCQkJCWlmIChjdXJyZW50LmVxdWFscygiVU5LTk9XTiIpIHx8IGN1cnJlbnQuZXF1YWxzKCJOLkEuIikpIHsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCisKKwkJCQkJCQlpZiAobGV2ZWwgPT0gMSkgeworCQkJCQkJCQljdXJyZW50ID0gaXNvQ29kZS5nZXRBbHBoYTIoKSArICItVU5LLSIgLy8kTk9OLU5MUy0xJAorCQkJCQkJCQkJCSsgU3RyaW5nLnZhbHVlT2YodW5rQ291bnRlcisrKTsKKworCQkJCQkJCX0gZWxzZSB7CisJCQkJCQkJCS8vIExldmVsIDIgZGF0YS4KKwkJCQkJCQkJY3VycmVudCA9IGlzb0NvZGUuZ2V0QWxwaGEzKCkgKyAiLkwyLiIgLy8kTk9OLU5MUy0xJAorCQkJCQkJCQkJCSsgU3RyaW5nLnZhbHVlT2YodW5rQ291bnRlcisrKTsKKwkJCQkJCQl9CisJCQkJCQl9CisKKwkJCQkJCS8vIFdlIGdldCB0aGUgZGVzY3JpcHRvciBmb3IgYWRtaW5pc3RyYXRpb24gZW50aXRpZXMKKwkJCQkJCS8vIGRpZmZlcmVudGx5IGJhc2VkIG9uIGl0cyBsZXZlbC4KKworCQkJCQkJaWYgKGxldmVsID09IDIpIHsKKworCQkJCQkJCWlmIChsZXgxRGF0YVNldCA9PSBudWxsICYmIGxleDJEYXRhU2V0ID09IG51bGwpIHsKKworCQkJCQkJCQkvLyBDb21wb3NlIHRoZSBmaWxlIG5hbWVzIGZvciB0aGUgbGV4IGZpbGVzIGZvcgorCQkJCQkJCQkvLyB0aGlzCisJCQkJCQkJCS8vIGNvdW50cnkuCisJCQkJCQkJCWxleEFkbWluMUZpbGUgPSBsZXhEaXIgKyBpc29Db2RlLmdldEFscGhhMygpCisJCQkJCQkJCQkJKyAiXFwiICsgaXNvQ29kZS5nZXRBbHBoYTMoKTsgLy8kTk9OLU5MUy0xJAorCQkJCQkJCQlsZXhBZG1pbjJGaWxlID0gbGV4QWRtaW4xRmlsZTsKKwkJCQkJCQkJbGV4QWRtaW4xRmlsZSArPSAiX0FETUlOMV9MRVgudHh0IjsgLy8kTk9OLU5MUy0xJAorCQkJCQkJCQlsZXhBZG1pbjJGaWxlICs9ICJfQURNSU4yX0xFWC50eHQiOyAvLyROT04tTkxTLTEkCisKKwkJCQkJCQkJLy8gTG9hZCB0aGUgbGV4MSBhbmQgbGV4MiBmaWxlcyBmb3IgdGhpcworCQkJCQkJCQkvLyBjb3VudHJ5LgorCQkJCQkJCQlsZXgxRGF0YVNldCA9IEdlblV0aWxzCisJCQkJCQkJCQkJLnBvcHVsYXRlTGlzdChsZXhBZG1pbjFGaWxlKTsKKwkJCQkJCQkJbGV4MkRhdGFTZXQgPSBHZW5VdGlscworCQkJCQkJCQkJCS5wb3B1bGF0ZUxpc3QobGV4QWRtaW4yRmlsZSk7CisKKwkJCQkJCQkJLy8gQ3JlYXRlIGEgbWV0aG9kIHRvIHNlYXJjaCBmb3IgYW4gaXRlbSBvbiBhCisJCQkJCQkJCS8vIGxpc3Qgb2YgbGV4IGRhdGEgb2JqZWN0cy4KKwkJCQkJCQkJbGV4MUxpc3QgPSBHZW5VdGlscy5jcmVhdGVMZXgxTGlzdChsZXgxRGF0YVNldCk7CisJCQkJCQkJCWxleDJMaXN0ID0gR2VuVXRpbHMuY3JlYXRlTGV4Mkxpc3QobGV4MkRhdGFTZXQpOworCisJCQkJCQkJfQorCisJCQkJCQkJLy8gQ29tcG9zZSB0aGUgbGV2ZWwyIGRlc2NyaXB0b3IgdXNpbmcgdGhlIGxleCBkYXRhOgorCisJCQkJCQkJLy8gU1RFUCAxOiBEbyBhIGxvb2sgdXAgaW4gdGhlIGxleCAyIGxpc3RzLgorCisJCQkJCQkJLy8gR2V0IHRoZSBsZXggMiBvYmplY3QgZm9yIHRoZSBjdXJyZW50IGVudHJ5LgorCQkJCQkJCUxleDJPYmogbGV4MkN1cnJlbnQgPSBHZW5VdGlscy5sZXgyTG9va3VwKGxleDJMaXN0LAorCQkJCQkJCQkJaXRlbXNbSVNPRGF0YS5BRE1JTjFfTkFNRV0sIGN1cnJlbnQpOworCisJCQkJCQkJLy8gR2V0IHRoZSBsZXggMSBvYmplY3QgdG8gd2hpY2ggbGV4MkN1cnJlbnQgYmVsb25ncworCQkJCQkJCS8vIHRvLgorCQkJCQkJCUxleDFPYmogbGV4MUN1cnJlbnQgPSBHZW5VdGlscy5sZXgxTG9va3VwKGxleDFMaXN0LAorCQkJCQkJCQkJbGV4MkN1cnJlbnQuZ2V0QWRtaW4xKCkpOworCisJCQkJCQkJaWYgKGxleDFDdXJyZW50LmdldERlc2NyaXB0b3IoKS5jb250YWlucygiVVMtIikpIHsgLy8kTk9OLU5MUy0xJAorCQkJCQkJCQkvLyBTVEVQIDI6IHBpZWNlIHRvZ2V0aGVyIHRoZSBJRCB1c2luZyB0aGUKKwkJCQkJCQkJLy8gcHJvcGVyIGxleCBvYmplY3RzIDogdGhlIFVTQSBpcyBhIHNwZWNpYWwKKwkJCQkJCQkJLy8gY2FzZQorCQkJCQkJCQlkZXNjcmlwdG9yID0gR2VuVXRpbHMuZ2V0VVNBRGVzY3JpcHRvcigKKwkJCQkJCQkJCQlsZXgyQ3VycmVudC5nZXRBZG1pbjIoKSwgR2VuVXRpbHMKKwkJCQkJCQkJCQkJCS5leHRyYWN0QWxwaGEyKGxleDFDdXJyZW50CisJCQkJCQkJCQkJCQkJCS5nZXREZXNjcmlwdG9yKCkpLAorCQkJCQkJCQkJCXVzYURlc2NyaXB0b3JMaXN0KTsKKworCQkJCQkJCQlpZiAoZGVzY3JpcHRvci5jb250YWlucygiTm90IEZvdW5kIikpIHsgLy8kTk9OLU5MUy0xJAorCQkJCQkJCQkJU3lzdGVtLm91dAorCQkJCQkJCQkJCQkucHJpbnRsbigiXHRcdERlc2NyaXB0b3IgTm90IEZvdW5kIiAvLyROT04tTkxTLTEkCisJCQkJCQkJCQkJCQkJKyBsZXgyQ3VycmVudC5nZXRBZG1pbjIoKQorCQkJCQkJCQkJCQkJCSsgImluIiAvLyROT04tTkxTLTEkCisJCQkJCQkJCQkJCQkJKyBsZXgxQ3VycmVudC5nZXRBZG1pbjEoKSk7CisJCQkJCQkJCX0KKworCQkJCQkJCX0gZWxzZSB7CisJCQkJCQkJCS8vIFNURVAgMjogcGllY2UgdG9nZXRoZXIgdGhlIElEIHVzaW5nIHRoZQorCQkJCQkJCQkvLyBwcm9wZXIgbGV4IG9iamVjdHMuCisJCQkJCQkJCWRlc2NyaXB0b3IgPSBsZXgxQ3VycmVudC5nZXREZXNjcmlwdG9yKCkKKwkJCQkJCQkJCQkrICItRyIgLy8kTk9OLU5MUy0xJAorCQkJCQkJCQkJCSsgbGV4MUN1cnJlbnQuZ2V0Rm9ybWF0dGVkSW5kZXgoKQorCQkJCQkJCQkJCSsgbGV4MkN1cnJlbnQuZ2V0Rm9ybWF0dGVkSW5kZXgoKTsKKwkJCQkJCQl9CisKKwkJCQkJCQlpZiAoY3VycmVudC5jb250YWlucygiLkwyLiIpKSB7IC8vJE5PTi1OTFMtMSQKKwkJCQkJCQkJY3VycmVudCA9IGRlc2NyaXB0b3I7CisJCQkJCQkJfQorCisJCQkJCQl9IGVsc2UgeworCQkJCQkJCS8vIENvbXBvc2UgZGVzY3JpcHRvciBmb3IgbCAxIGFuZCBsIDAgZGF0YQorCQkJCQkJCS8vIEdldCB0aGUgZGVzY3JpcHRvciBmb3IgdGhpcyBlbnRpdHkuCisJCQkJCQkJZGVzY3JpcHRvciA9IEdlblV0aWxzLmdldElTTzJEZXNjcmlwdG9yKGlzbzJMaXN0LAorCQkJCQkJCQkJY3VycmVudCwgaXNvQ29kZS5nZXRBbHBoYTIoKSk7CisKKwkJCQkJCQkvLyBJZiB3ZSBjYW50IGZpbmQgdGhlIGRlc2NyaXB0b3IsIHRoZW4gbG9vayBpbiB0aGUKKwkJCQkJCQkvLyBmaXggbGlzdC4KKwkJCQkJCQlpZiAoZGVzY3JpcHRvci5lcXVhbHMoY3VycmVudCkgPT0gdHJ1ZSkgeworCQkJCQkJCQkvLyBMb29rIGZvciBhIGRlc2NyaXB0b3IgaW4gdGhlIGZpeCBmaWxlCisJCQkJCQkJCWRlc2NyaXB0b3IgPSBHZW5VdGlscy5nZXRGaXhDb2RlKGNvZGVmaXhMaXN0LAorCQkJCQkJCQkJCWN1cnJlbnQsIGl0ZW1zW0lTT0RhdGEuQ09VTlRSWV9OQU1FXSk7CisJCQkJCQkJfQorCisJCQkJCQl9CisKKwkJCQkJCS8vIFV0aWxMb2dnZXIubG9nSW5mb3JtYXRpb24oIkRlc2NyaXB0b3IgaXMgOiAiICsgZGVzY3JpcHRvcgorCQkJCQkJLy8gKyAiIGF0IGxldmVsIDogIiArIGxldmVsICsgIiBmb3IgIiArIGN1cnJlbnQpOworCisJCQkJCQkvLyBDcmVhdGUgYSBTVEVNIHBvbHlnb24gd2l0aCB0aGlzIHBvbHlnb24gZGF0YQorCQkJCQkJU1RFTVBvbHlnb24gcG9seWdvbiA9IG5ldyBTVEVNUG9seWdvbihidWZmZXIsIGxldmVsKTsKKworCQkJCQkJLy8gQ2hlY2sgdGhhdCB0aGlzIGlzIGluZGVlZCBhIFNURU0gcG9seWdvbgorCQkJCQkJaWYgKGlzUG9seWdvbihwb2x5Z29uKSAhPSB0cnVlKSB7CisJCQkJCQkJLy8gTm90IGEgcG9seWdvbiwgaWdub3JlLgorCQkJCQkJCWNvbnRpbnVlOworCQkJCQkJfQorCisJCQkJCQkvLyBXZSBrbm93IGl0IGlzIGEgcG9seWdvbiwgYnV0IG5vdyBjaGVjayB0aGF0IGl0cyBub3QKKwkJCQkJCS8vIGR1cGxpY2F0ZWQuCisJCQkJCQlpZiAoaXNQb2x5Z29uRHVwbGljYXRlZChwb2x5Z29ucy5pdGVyYXRvcigpLCBwb2x5Z29uKSA9PSB0cnVlKSB7CisJCQkJCQkJLy8gWWVzLCBpdCBpcyBkdXBsaWNhdGVkCisJCQkJCQkJY29udGludWU7CisJCQkJCQl9CisKKwkJCQkJCS8vIEFkZCB0aGlzIHBvbHlnb24gdG8gb3VyIGxpc3Qgb2YgdW5pcXVlIHBvbHlnb25zIHNvCisJCQkJCQkvLyB0aGF0IHdlIGNhbiBjaGVjayBkdXBsaWNhdGVzIG9mIHRoaXMgcG9seWdvbiBsYXRlci4KKwkJCQkJCXBvbHlnb25zLmFkZChwb2x5Z29uKTsKKworCQkJCQkJLy8gQ2hlY2sgdG8gc2VlIGlmIHRoaXMgcG9seWdvbiBpcyBwYXJ0IG9mIGFuIGlzbGFuZCBvZgorCQkJCQkJLy8gcG9seWdvbnMgb3IgYSBzaW1wbGUgcG9seWdvbiBhbmQgaGFuZGxlIGl0CisJCQkJCQkvLyBhY2NvcmRpbmdseS4KKwkJCQkJCWlmIChsZXZlbCA9PSAwKSB7CisJCQkJCQkJLy8gSWYgd2UgYXJlIGF0IGFkbWluIGxldmVsIDAgYW5kIGlzbGFuZCBpcyBub3QKKwkJCQkJCQkvLyBOVUxMLCB0aGVuIHdlIGhhdmUgYW4gaXNsYW5kLgorCQkJCQkJCWlmIChpc2xhbmQuZXF1YWxzKCIgIikpIHsgLy8kTk9OLU5MUy0xJAorCQkJCQkJCQlvdXRwdXQgPSBvcGVuUG9seWdvbklzbGFuZFRhZ3MoZGVzY3JpcHRvcik7CisJCQkJCQkJCWlzbGFuZCA9ICJBZG1pbiBMZXZlbCAwIjsgLy8kTk9OLU5MUy0xJAorCQkJCQkJCX0KKwkJCQkJCQlvdXRwdXQgKz0gYWRkTGluZWFyUmluZ1RhZ3MoYnVmZmVyLCBsZXZlbCk7CisJCQkJCQl9IGVsc2UgeworCisJCQkJCQkJaWYgKGlzbGFuZC5lcXVhbHMoIiAiKSA9PSB0cnVlKSB7IC8vJE5PTi1OTFMtMSQKKwkJCQkJCQkJb3V0cHV0ID0gb3BlblBvbHlnb25Jc2xhbmRUYWdzKGRlc2NyaXB0b3IpOworCQkJCQkJCQlvdXRwdXQgKz0gYWRkTGluZWFyUmluZ1RhZ3MoYnVmZmVyLCBsZXZlbCk7CisKKwkJCQkJCQl9IGVsc2UgeworCisJCQkJCQkJCWlmIChjdXJyZW50LmVxdWFscyhpc2xhbmQpID09IGZhbHNlKSB7CisJCQkJCQkJCQlvdXRwdXQgPSBjbG9zZVBvbHlnb25Jc2xhbmRUYWdzKCk7CisJCQkJCQkJCQlvdXRwdXQgKz0gb3BlblBvbHlnb25Jc2xhbmRUYWdzKGRlc2NyaXB0b3IpOworCQkJCQkJCQkJb3V0cHV0ICs9IGFkZExpbmVhclJpbmdUYWdzKGJ1ZmZlciwgbGV2ZWwpOworCQkJCQkJCQl9IGVsc2UgeworCQkJCQkJCQkJb3V0cHV0ID0gYWRkTGluZWFyUmluZ1RhZ3MoYnVmZmVyLCBsZXZlbCk7CisJCQkJCQkJCQlHZW5VdGlscy5hZGREYXRhKGdtbEZpbGUsIG91dHB1dC50cmltKCkpOworCQkJCQkJCQkJY29udGludWU7CisJCQkJCQkJCX0KKwkJCQkJCQl9CisKKwkJCQkJCQlzd2l0Y2ggKGxldmVsKSB7CisKKwkJCQkJCQljYXNlIERhdGFUeXBlcy5MRVZFTF8xOgorCQkJCQkJCQlpc2xhbmQgPSBpdGVtc1tJU09EYXRhLkFETUlOMV9OQU1FXQorCQkJCQkJCQkJCS50b1VwcGVyQ2FzZSgpOworCQkJCQkJCQlicmVhazsKKworCQkJCQkJCWNhc2UgRGF0YVR5cGVzLkxFVkVMXzI6CisJCQkJCQkJCWlzbGFuZCA9IGl0ZW1zW0lTT0RhdGEuQURNSU4yX05BTUVdCisJCQkJCQkJCQkJLnRvVXBwZXJDYXNlKCk7CisJCQkJCQkJCWJyZWFrOworCQkJCQkJCX0KKworCQkJCQkJfQorCisJCQkJCQlHZW5VdGlscy5hZGREYXRhKGdtbEZpbGUsIG91dHB1dC50cmltKCkpOworCisJCQkJCX0gLy8gd2hpbGUgbG9vcAorCisJCQkJCS8vIFJlc2V0IGFsbCBsZXgtcmVsYXRlZCBpdGVtcworCQkJCQlpZiAobGV4MURhdGFTZXQgIT0gbnVsbCkgeworCQkJCQkJbGV4MURhdGFTZXQuY2xlYXIoKTsKKwkJCQkJCWxleDFEYXRhU2V0ID0gbnVsbDsKKwkJCQkJfQorCQkJCQlpZiAobGV4MkRhdGFTZXQgIT0gbnVsbCkgeworCQkJCQkJbGV4MkRhdGFTZXQuY2xlYXIoKTsKKwkJCQkJCWxleDJEYXRhU2V0ID0gbnVsbDsKKwkJCQkJfQorCQkJCQlpZiAobGV4MUxpc3QgIT0gbnVsbCkgeworCQkJCQkJbGV4MUxpc3QuY2xlYXIoKTsKKwkJCQkJCWxleDFMaXN0ID0gbnVsbDsKKwkJCQkJfQorCQkJCQlpZiAobGV4Mkxpc3QgIT0gbnVsbCkgeworCQkJCQkJbGV4Mkxpc3QuY2xlYXIoKTsKKwkJCQkJCWxleDJMaXN0ID0gbnVsbDsKKwkJCQkJfQorCQkJCQlsZXhBZG1pbjFGaWxlID0gbnVsbDsKKwkJCQkJbGV4QWRtaW4yRmlsZSA9IG51bGw7CisKKwkJCQkJLy8gV2UgZG9udCBuZWVkIHRoZSBJU08gY29kZSBvYmplY3QgZm9yIHRoaXMgY291bnRyeQorCQkJCQkvLyBhbnltb3JlLCB3ZSBhcmUgZG9uZSBwcm9jZXNzaW5nIGl0LgorCQkJCQlpc29Db2RlID0gbnVsbDsKKworCQkJCQkvLyBDbG9zZSBhbGwgb3BlbiByZXNvdXJjZXMuCisJCQkJCXJlYWRlci5jbG9zZSgpOworCisJCQkJCWlmIChnbWxGaWxlICE9IG51bGwpIHsKKwkJCQkJCS8vIFdyaXRlIGZvcm1hdHRlZCBvdXRwdXQKKwkJCQkJCUdlblV0aWxzLmFkZERhdGEoZ21sRmlsZSwgY2xvc2VQb2x5Z29uSXNsYW5kVGFncygpKTsKKwkJCQkJCUdlblV0aWxzLmFkZERhdGEoZ21sRmlsZSwgZ2V0Q2xvc2luZ1RhZ3MoKSk7CisJCQkJCQlnbWxGaWxlLmNsb3NlKCk7CisJCQkJCQlnbWxGaWxlID0gbnVsbDsKKwkJCQkJCVV0aWxMb2dnZXIubG9nSW5mb3JtYXRpb24oIlx0XHRHZW5lcmF0ZWQgOiAiICsgZmlsZU5hbWUpOyAvLyROT04tTkxTLTEkCisJCQkJCQlmaWxlTmFtZSA9IG51bGw7CisJCQkJCX0KKworCQkJCQkvLyBSdW4gZ2FyYmFnZSBjb2xsZWN0aW9uCisJCQkJCS8vU3lzdGVtLmdjKCk7CisJCQkJfQorCisJCQl9IGNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7CisJCQkJZS5wcmludFN0YWNrVHJhY2UoKTsKKwkJCX0KKworCQl9CisKKwl9CisKKwkvKioKKwkgKiBDaGVjayB0byBzZWUgaWYgdGhpcyBpcyBhIHJlYWwgcG9seWdvbiAoaS5lLiBjbG9zZWQpCisJICogCisJICogQHBhcmFtIHBvbHlnb24KKwkgKiAgICAgICAgICAgIEEgU1RFTSBwb2x5Z29uCisJICogCisJICogQHJldHVybiB0cnVlIGlmIHRoZSBwYXJhbWV0ZXIgInBvbHlnb24iIGlzIGEgU1RFTSBwb2x5Z29uCisJICovCisJcHJvdGVjdGVkIGJvb2xlYW4gaXNQb2x5Z29uKFNURU1Qb2x5Z29uIHBvbHlnb24pIHsKKworCQlQb2ludERhdGEgaW5pdCA9IHBvbHlnb24uZ2V0SW5pdCgpOworCQlQb2ludERhdGEgbGFzdCA9IHBvbHlnb24uZ2V0TGFzdCgpOworCisJCWlmIChpbml0LmdldEx0KCkgIT0gbGFzdC5nZXRMdCgpKSB7CisJCQkvLyBOb3QgYSBwb2x5Z29uCisJCQlyZXR1cm4gZmFsc2U7CisJCX0gZWxzZSBpZiAoaW5pdC5nZXRMZygpICE9IGxhc3QuZ2V0TGcoKSkgeworCQkJLy8gTm90IGEgcG9seWdvbgorCQkJcmV0dXJuIGZhbHNlOworCQl9CisKKwkJLy8gWWVzLCBpdCBpcyBhIHBvbHlnb24KKwkJcmV0dXJuIHRydWU7CisJfQorCisJLyoqCisJICogQ2hlY2sgdG8gc2VlIGlmIHRoaXMgcG9seWdvbiBpcyBkdXBsaWNhdGVkLgorCSAqIAorCSAqIEBwYXJhbSBwb2x5Z29uCisJICogICAgICAgICAgICBhIFNURU0gcG9seWdvbgorCSAqIEBwYXJhbSBpdAorCSAqICAgICAgICAgICAgYW4gaXRlcmF0b3Igb24gdGhlIHBvbHlnb24gbGlzdAorCSAqIAorCSAqIEByZXR1cm4gdHJ1ZSBpZiB0aGlzIHBvbHlnb24gaXMgYWxyZWFkeSBpbiB0aGUgbGlzdCBvZiBrbm93biBwb2x5Z29ucworCSAqLworCXByb3RlY3RlZCBib29sZWFuIGlzUG9seWdvbkR1cGxpY2F0ZWQoSXRlcmF0b3IgaXQsIFNURU1Qb2x5Z29uIHBvbHlnb24pIHsKKworCQlpZiAoaXQuaGFzTmV4dCgpICE9IHRydWUpIHsKKwkJCXJldHVybiBmYWxzZTsKKwkJfQorCisJCXdoaWxlIChpdC5oYXNOZXh0KCkpIHsKKwkJCVNURU1Qb2x5Z29uIGN1cnJlbnQgPSAoU1RFTVBvbHlnb24pIGl0Lm5leHQoKTsKKwkJCWlmIChjdXJyZW50LnNhbWUocG9seWdvbikgPT0gdHJ1ZSkgeworCQkJCS8vIE5vdCB1bmlxdWUsIGl0IGlzIGR1cGxpY2F0ZWQgc28gY29uZGl0aW9uIGlzIGZhbHNlLgorCQkJCXJldHVybiB0cnVlOworCQkJfQorCQl9CisJCXJldHVybiBmYWxzZTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIG1ldGhvZCBjcmVhdGVzIHRoZSBvcGVuaW5nIFhNTCB0YWdzIHRoYXQgZGVhbCB3aXRoIGlzbGFuZHMgb2YKKwkgKiBwb2x5Z29uIGRhdGEuCisJICogCisJICogQHBhcmFtIGlkCisJICogICAgICAgICAgICB0aGUgZGVzY3JpcHRvciBmb3IgdGhlIGVudGl0eQorCSAqIAorCSAqIEByZXR1cm4gYSBHTUwgdGFnIHRoYXQgb3BlbnMgYSBwb2x5Z29uIGlzbGFuZCBlbGVtZW50LgorCSAqLworCXByb3RlY3RlZCBTdHJpbmcgb3BlblBvbHlnb25Jc2xhbmRUYWdzKFN0cmluZyBpZCkgeworCisJCVN0cmluZyB0YWdzID0gbnVsbDsKKwkJdGFncyA9ICI8Z21sOlBvbHlnb24gZ21sOmlkPVwiIiArIGlkICsgIlwiPlxuIjsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCisJCXRhZ3MgKz0gIjxnbWw6b3V0ZXJCb3VuZGFyeUlzPlxuIjsgLy8kTk9OLU5MUy0xJAorCisJCXJldHVybiB0YWdzOworCX0KKworCS8qKgorCSAqIFRoaXMgbWV0aG9kIGNyZWF0ZXMgdGhlIHRhZ3MgdGhhdCBkZXNjcmliZSBhICJwb2x5Z29uIGlzbGFuZCIgb3IgbGluZWFyCisJICogcmluZyBhbmQgcHV0cyB0aGUgcG9seWdvbiBkYXRhIGluc2lkZSBvZiBpdC4KKwkgKiAKKwkgKiBAcGFyYW0gYnVmZmVyCisJICogICAgICAgICAgICB0aGUgZGF0YSBidWZmZXIgY29udGFpbmluZyBhbGwgdGhlIHBvbHlnb25kIGRhdGEKKwkgKiBAcGFyYW0gbGV2ZWwKKwkgKiAgICAgICAgICAgIHRoZSBhZG1pbiBsZXZlbAorCSAqIAorCSAqIEByZXR1cm4gYSBHTUwgdGFnIHRoYXQgb3BlbiBhIGxpbmVhciByaW5nIGVsZW1lbnQKKwkgKi8KKwlwcm90ZWN0ZWQgU3RyaW5nIGFkZExpbmVhclJpbmdUYWdzKFN0cmluZyBidWZmZXIsIGludCBsZXZlbCkgeworCisJCWludCBvZmZzZXQgPSAwOworCisJCVN0cmluZyBwb2x5Z29uRGF0YSA9IG51bGw7CisKKwkJc3dpdGNoIChsZXZlbCkgeworCisJCWNhc2UgRGF0YVR5cGVzLkxFVkVMXzA6CisJCQlvZmZzZXQgPSAyOworCQkJYnJlYWs7CisKKwkJY2FzZSBEYXRhVHlwZXMuTEVWRUxfMToKKwkJCW9mZnNldCA9IDM7CisJCQlicmVhazsKKworCQljYXNlIERhdGFUeXBlcy5MRVZFTF8yOgorCQkJb2Zmc2V0ID0gNDsKKwkJCWJyZWFrOworCQl9CisKKwkJLy8gVG9rZW5pemUKKwkJU3RyaW5nVG9rZW5pemVyIHRva2VucyA9IG5ldyBTdHJpbmdUb2tlbml6ZXIoYnVmZmVyLCAiLCIpOyAvLyROT04tTkxTLTEkCisKKwkJLy8gQWR2YW5jZSB0aGUgZmlyc3QgSy10b2tlbnMuCisJCWZvciAoaW50IGkgPSAwOyBpIDwgb2Zmc2V0OyBpKyspIHsKKwkJCWlmICh0b2tlbnMuaGFzTW9yZVRva2VucygpKSB7CisJCQkJdG9rZW5zLm5leHRUb2tlbigpOworCQkJfQorCQl9CisKKwkJd2hpbGUgKHRva2Vucy5oYXNNb3JlVG9rZW5zKCkpIHsKKworCQkJU3RyaW5nIHRva2VuID0gdG9rZW5zLm5leHRUb2tlbigpOworCisJCQlpZiAoR2VuVXRpbHMuaXNOdW1lcmljKHRva2VuKSA9PSBmYWxzZSkgeworCQkJCWNvbnRpbnVlOyAvLyBJZ25vcmUsIHRoaXMgaXMgbm90IGEgdmFsaWQgY29vcmRpbmF0ZS4KKwkJCX0KKworCQkJLy8gQ29udmVydCB0b2tlbiAocG9seWdvbiBkYXRhKSB0byBhbiBpbnQuCisJCQlkb3VibGUgY29vcmQgPSBHZW5VdGlscy50b0RlZ3JlZXMoR2VuVXRpbHMuZ2V0RG91YmxlKHRva2VuKSk7CisKKwkJCS8vIEZvcm1hdCBsdCwgbGcgdmFsdWVzIGFjY29yZGluZyB0byBvdXIgY29udmVudGlvbgorCQkJaWYgKHBvbHlnb25EYXRhID09IG51bGwpIHsKKwkJCQlwb2x5Z29uRGF0YSA9IEdlblV0aWxzLmZvcm1hdChjb29yZCkgKyAiICI7IC8vJE5PTi1OTFMtMSQKKwkJCX0gZWxzZSB7CisJCQkJcG9seWdvbkRhdGEgKz0gR2VuVXRpbHMuZm9ybWF0KGNvb3JkKSArICIgIjsgLy8kTk9OLU5MUy0xJAorCQkJfQorCQl9CisKKwkJU3RyaW5nIHRhZ3MgPSAiPGdtbDpMaW5lYXJSaW5nPlxuIjsgLy8kTk9OLU5MUy0xJAorCQl0YWdzICs9ICI8Z21sOnBvc0xpc3Q+XG4iOyAvLyROT04tTkxTLTEkCisJCXRhZ3MgKz0gcG9seWdvbkRhdGEgKyAiXG4iOyAvLyROT04tTkxTLTEkCisJCXRhZ3MgKz0gIjwvZ21sOnBvc0xpc3Q+XG4iOyAvLyROT04tTkxTLTEkCisJCXRhZ3MgKz0gIjwvZ21sOkxpbmVhclJpbmc+XG4iOyAvLyROT04tTkxTLTEkCisKKwkJcmV0dXJuIHRhZ3M7CisJfQorCisJLyoqCisJICogVGhpcyBtZXRob2QgY3JlYXRlcyB0aGUgY2xvc2luZyBYTUwgdGFncyB0aGF0IGRlYWwgd2l0aCBpc2xhbmRzIG9mCisJICogcG9seWdvbiBkYXRhLgorCSAqIAorCSAqIEByZXR1cm4gYSBHTUwgdGFnIHRoYXQgY2xvc2VzIGEgcG9seWdvbgorCSAqLworCXByb3RlY3RlZCBTdHJpbmcgY2xvc2VQb2x5Z29uSXNsYW5kVGFncygpIHsKKworCQlTdHJpbmcgdGFncyA9IG51bGw7CisJCXRhZ3MgPSAiPC9nbWw6b3V0ZXJCb3VuZGFyeUlzPlxuIjsgLy8kTk9OLU5MUy0xJAorCQl0YWdzICs9ICI8L2dtbDpQb2x5Z29uPlxuIjsgLy8kTk9OLU5MUy0xJAorCisJCXJldHVybiB0YWdzOworCX0KKworCS8qKgorCSAqIFRoaXMgbWV0aG9kIGNyZWF0ZXMgdGhlIFhNTCB0YWdzIHRoYXQgZGVhbCB3aXRoIHNpbXBsZSBwb2x5Z29uIGRhdGEgYW5kCisJICogaW5jbHVkZXMgdGhlIHBvbHlnb24gZGF0YSBpbiBpdC4KKwkgKiAKKwkgKiBAcGFyYW0gYnVmZmVyCisJICogICAgICAgICAgICB0aGUgZGF0YSBidWZmZXIgY29udGFpbmluZyBhbGwgdGhlIHBvbHlnb24gZGF0YQorCSAqIEBwYXJhbSBsZXZlbAorCSAqICAgICAgICAgICAgdGhlIGFkbWluIGxldmVsCisJICogCisJICogQHJldHVybiBhIEdNTCB0YWcgdGhhdCBkZXNjcmliZXMgYSBwb2x5Z29uCisJICovCisJcHJvdGVjdGVkIFN0cmluZyBjcmVhdGVTaW1wbGVQb2x5Z29uVGFncyhTdHJpbmcgaWQsIFN0cmluZyBidWZmZXIsIGludCBsZXZlbCkgeworCisJCWludCBvZmZzZXQgPSAwOworCisJCVN0cmluZyBwb2x5Z29uRGF0YSA9IG51bGw7CisKKwkJc3dpdGNoIChsZXZlbCkgeworCisJCWNhc2UgRGF0YVR5cGVzLkxFVkVMXzA6CisJCQlvZmZzZXQgPSAyOworCQkJYnJlYWs7CisKKwkJY2FzZSBEYXRhVHlwZXMuTEVWRUxfMToKKwkJCW9mZnNldCA9IDM7CisJCQlicmVhazsKKworCQljYXNlIERhdGFUeXBlcy5MRVZFTF8yOgorCQkJb2Zmc2V0ID0gNDsKKwkJCWJyZWFrOworCQl9CisKKwkJLy8gVG9rZW5pemUKKwkJU3RyaW5nVG9rZW5pemVyIHRva2VucyA9IG5ldyBTdHJpbmdUb2tlbml6ZXIoYnVmZmVyLCAiLCIpOyAvLyROT04tTkxTLTEkCisKKwkJLy8gQWR2YW5jZSB0aGUgZmlyc3QgSy10b2tlbnMuCisJCWZvciAoaW50IGkgPSAwOyBpIDwgb2Zmc2V0OyBpKyspIHsKKwkJCWlmICh0b2tlbnMuaGFzTW9yZVRva2VucygpKSB7CisJCQkJdG9rZW5zLm5leHRUb2tlbigpOworCQkJfQorCQl9CisKKwkJd2hpbGUgKHRva2Vucy5oYXNNb3JlVG9rZW5zKCkpIHsKKworCQkJU3RyaW5nIHRva2VuID0gdG9rZW5zLm5leHRUb2tlbigpOworCisJCQlpZiAoR2VuVXRpbHMuaXNOdW1lcmljKHRva2VuKSA9PSBmYWxzZSkgeworCQkJCWNvbnRpbnVlOyAvLyBJZ25vcmUsIHRoaXMgaXMgbm90IGEgdmFsaWQgY29vcmRpbmF0ZS4KKwkJCX0KKworCQkJLy8gQ29udmVydCB0b2tlbiAocG9seWdvbiBkYXRhKSB0byBhbiBpbnQuCisJCQlkb3VibGUgY29vcmQgPSBHZW5VdGlscy50b0RlZ3JlZXMoR2VuVXRpbHMuZ2V0RG91YmxlKHRva2VuKSk7CisKKwkJCS8vIEZvcm1hdCBsdCwgbGcgdmFsdWVzIGFjY29yZGluZyB0byBvdXIgY29udmVudGlvbgorCQkJaWYgKHBvbHlnb25EYXRhID09IG51bGwpIHsKKwkJCQlwb2x5Z29uRGF0YSA9IEdlblV0aWxzLmZvcm1hdChjb29yZCkgKyAiICI7IC8vJE5PTi1OTFMtMSQKKwkJCX0gZWxzZSB7CisJCQkJcG9seWdvbkRhdGEgKz0gR2VuVXRpbHMuZm9ybWF0KGNvb3JkKSArICIgIjsgLy8kTk9OLU5MUy0xJAorCQkJfQorCQl9CisKKwkJU3RyaW5nIHRhZ3MgPSBudWxsOworCisJCWlmIChwb2x5Z29uRGF0YSA9PSBudWxsKSB7CisJCQl0YWdzID0gIjxnbWw6UG9seWdvbiBnbWw6aWQ9XCIiICsgaWQgKyAiXCIvPlxuIjsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCisJCX0gZWxzZSB7CisJCQl0YWdzID0gIjxnbWw6UG9seWdvbiBnbWw6aWQ9XCIiICsgaWQgKyAiXCI+XG4iOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKKwkJCXRhZ3MgKz0gIjxnbWw6b3V0ZXJCb3VuZGFyeUlzPlxuIjsgLy8kTk9OLU5MUy0xJAorCQkJdGFncyArPSAiPGdtbDpMaW5lYXJSaW5nPlxuIjsgLy8kTk9OLU5MUy0xJAorCQkJdGFncyArPSAiPGdtbDpwb3NMaXN0PlxuIjsgLy8kTk9OLU5MUy0xJAorCQkJdGFncyArPSBwb2x5Z29uRGF0YSArICJcbiI7IC8vJE5PTi1OTFMtMSQKKwkJCXRhZ3MgKz0gIjwvZ21sOnBvc0xpc3Q+XG4iOyAvLyROT04tTkxTLTEkCisJCQl0YWdzICs9ICI8L2dtbDpMaW5lYXJSaW5nPlxuIjsgLy8kTk9OLU5MUy0xJAorCQkJdGFncyArPSAiPC9nbWw6b3V0ZXJCb3VuZGFyeUlzPlxuIjsgLy8kTk9OLU5MUy0xJAorCQkJdGFncyArPSAiPC9nbWw6UG9seWdvbj5cbiI7IC8vJE5PTi1OTFMtMSQKKwkJfQorCisJCXJldHVybiB0YWdzOworCX0KKworCS8qKgorCSAqIEdlbmVyYXRlIHRoZSBvcGVuaW5nIHRhZ3MgZm9yIHRoaXMgR01MIGZpbGUuCisJICogCisJICogQHBhcmFtIGNvZGUKKwkgKiAgICAgICAgICAgIHRoZSBJU08gY29kZQorCSAqIEBwYXJhbSBsZXZlbAorCSAqICAgICAgICAgICAgdGhlIGFkbWluIGxldmVsCisJICogCisJICogQHJldHVybiB0aGUgb3BlbmluZyB0YWdzIGZvciB0aGUgR01MIGZpbGUKKwkgKi8KKwlwcm90ZWN0ZWQgU3RyaW5nIGdldE9wZW5pbmdUYWdzKElTT0NvZGUxIGNvZGUsIGludCBsZXZlbCkgeworCisJCS8vIENhbGVuZGFyIGRhdGUgPSBDYWxlbmRhci5nZXRJbnN0YW5jZSgpOworCisJCVN0cmluZyB0YWdzID0gIjw/eG1sIHZlcnNpb249XCIxLjBcIiBlbmNvZGluZz1cIlVURi04XCI/PlxuIjsgLy8kTk9OLU5MUy0xJAorCQl0YWdzICs9IEdlblV0aWxzLmdlR01MQ29weXJpZ2h0KCk7CisJCXRhZ3MgKz0gR2VuVXRpbHMuZ2V0R01MS2V5Rm9ybWF0RXhwbGFuYXRpb24oKTsKKwkJLy8gdGFncyArPSBHZW5VdGlscy5nZXRHTUxVTlBvbGljeSgpOworCQl0YWdzICs9ICI8TWFwIHhtbG5zOmdtbD1cImh0dHA6Ly93d3cub3Blbmdpcy5uZXQvZ21sXCIgeG1sbnM6Z2VvcnNzPVwiaHR0cDovL3d3dy5nZW9yc3Mub3JnL2dlb3Jzc1wiPlxuIjsgLy8kTk9OLU5MUy0xJAorCQl0YWdzICs9ICI8dGl0bGU+IiArIGNvZGUuZ2V0QWxwaGEzKCkgKyAiIExldmVsICIgKyBsZXZlbCAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKKwkJCQkrICIgTWFwPC90aXRsZT5cbiI7IC8vJE5PTi1OTFMtMSQKKwkJdGFncyArPSAiPHN1YlRpdGxlPkFkbWluaXN0cmF0aXZlIEJvdW5kYXJpZXM8L3N1YlRpdGxlPlxuIjsgLy8kTk9OLU5MUy0xJAorCQl0YWdzICs9ICI8dXBkYXRlZD5UdWUgTm92IDA3IDE2OjU3OjU1IFBTVCAyMDA2IDwvdXBkYXRlZD5cbiI7IC8vJE5PTi1OTFMtMSQKKwkJdGFncyArPSAiPGVudHJ5PlxuIjsgLy8kTk9OLU5MUy0xJAorCQl0YWdzICs9ICI8Z2VvcnNzOndoZXJlPlxuIjsgLy8kTk9OLU5MUy0xJAorCQlyZXR1cm4gdGFnczsKKwl9CisKKwkvKioKKwkgKiBHZW5lcmF0ZSB0aGUgY2xvc2luZyB0YWdzIGZvciB0aGlzIEdNTCBmaWxlLgorCSAqIAorCSAqIEByZXR1cm4gdGhlIGNsb3NpbmcgdGFncyBvZiB0aGUgR01MIGZpbGUKKwkgKi8KKwlwcm90ZWN0ZWQgU3RyaW5nIGdldENsb3NpbmdUYWdzKCkgeworCQlTdHJpbmcgdGFncyA9ICI8L2dlb3Jzczp3aGVyZT5cbiI7IC8vJE5PTi1OTFMtMSQKKwkJdGFncyArPSAiPC9lbnRyeT5cbiI7IC8vJE5PTi1OTFMtMSQKKwkJdGFncyArPSAiPC9NYXA+XG4iOyAvLyROT04tTkxTLTEkCisJCXJldHVybiB0YWdzOworCX0KKworCS8qKgorCSAqIFRoZSBleGVjdXRpb24gZW50cnkgcG9pbnQKKwkgKiAKKwkgKiBAcGFyYW0gYXJncworCSAqLworCisJcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgeworCQkvLyBmaW5hbCBpbnQgSVNPXzMxNjZfMSA9IDA7CisJCS8vIGZpbmFsIGludCBJU09fMzE2Nl8yID0gMTsKKwkJLy8gZmluYWwgaW50IEZJWF9GSUxFID0gMjsKKwkJLy8gZmluYWwgaW50IFRBUkdFVF9MSVNUID0gMzsKKwkJLy8gZmluYWwgaW50IExFWF9ESVIgPSA0OworCQkvLyBmaW5hbCBpbnQgT1VUUFVUX0RJUiA9IDU7CisJCS8vIGZpbmFsIGludCBQQVJBTVMgPSA2OworCQkvLworCQkvLyBpZiAoYXJncy5sZW5ndGggPCBQQVJBTVMpIHsKKwkJLy8gVXRpbExvZ2dlci5sb2dJbmZvcm1hdGlvbigiLS1Xcm9uZyBhcmd1bWVudHMtLSIpOyAvLyROT04tTkxTLTEkCisJCS8vIFN5c3RlbS5vdXQKKwkJLy8gLnByaW50bG4oIlx0VG8gcnVuLCBwbGVhc2UgcHJvdmlkZSB0aGUgZm9sbG93aW5nIGFyZ3VtZW50cyA6ICIpOworCQkvLyAvLyROT04tTkxTLTEkCisJCS8vIFV0aWxMb2dnZXIubG9nSW5mb3JtYXRpb24oIlx0XHQgSVNPIDMxNjYtMSBmaWxlIik7IC8vJE5PTi1OTFMtMSQKKwkJLy8gVXRpbExvZ2dlci5sb2dJbmZvcm1hdGlvbigiXHRcdCBJU08gMzE2Ni0yIGZpbGUiKTsgLy8kTk9OLU5MUy0xJAorCQkvLyBVdGlsTG9nZ2VyLmxvZ0luZm9ybWF0aW9uKCJcdFx0IElTTyBmaXggZmlsZSIpOyAvLyROT04tTkxTLTEkCisJCS8vIFV0aWxMb2dnZXIubG9nSW5mb3JtYXRpb24oIlx0XHQgVGFyZ2V0IGNvdW50cmllcyBmaWxlIik7IC8vJE5PTi1OTFMtMSQKKwkJLy8gVXRpbExvZ2dlci5sb2dJbmZvcm1hdGlvbigiXHRcdCBMZXhpY29ncmFwaGljIHNvcnRpbmcgZGlyZWN0b3J5Iik7CisJCS8vIC8vJE5PTi1OTFMtMSQKKwkJLy8gVXRpbExvZ2dlci5sb2dJbmZvcm1hdGlvbigiXHRcdCBPdXRwdXQgZGlyZWN0b3J5Iik7IC8vJE5PTi1OTFMtMSQKKwkJLy8gcmV0dXJuOworCQkvLyB9CisJCS8vCisJCS8vIEdNTEdlbmVyYXRvciBnZW4gPSBuZXcgR01MR2VuZXJhdG9yKGFyZ3NbSVNPXzMxNjZfMV0sCisJCS8vIGFyZ3NbSVNPXzMxNjZfMl0sCisJCS8vIGFyZ3NbRklYX0ZJTEVdLCBhcmdzW1RBUkdFVF9MSVNUXSwgYXJnc1tMRVhfRElSXSwKKwkJLy8gYXJnc1tPVVRQVVRfRElSXSk7CisJCS8vIGdlbi5ydW4oKTsKKworCQlmaW5hbCBpbnQgQ09ORklHX0ZJTEUgPSAwOworCQlmaW5hbCBpbnQgUEFSQU1TID0gMTsKKworCQlpZiAoYXJncy5sZW5ndGggPCBQQVJBTVMpIHsKKwkJCVV0aWxMb2dnZXIubG9nSW5mb3JtYXRpb24oIlx0XHQtLVdyb25nIGFyZ3VtZW50cy0tIik7IC8vJE5PTi1OTFMtMSQKKwkJCVN5c3RlbS5vdXQKKwkJCQkJLnByaW50bG4oIlx0XHRUbyBydW4sIHBsZWFzZSBwcm92aWRlIHRoZSBmb2xsb3dpbmcgYXJndW1lbnQocykgOiAiKTsgLy8kTk9OLU5MUy0xJAorCQkJVXRpbExvZ2dlci5sb2dJbmZvcm1hdGlvbigiXHRcdFx0IENvbmZpZ3VyYXRpb24gZmlsZSIpOyAvLyROT04tTkxTLTEkCisJCQlTeXN0ZW0uZXhpdCgxKTsKKwkJfQorCisJCUdNTEdlbmVyYXRvciBnZW4gPSBuZXcgR01MR2VuZXJhdG9yKGFyZ3NbQ09ORklHX0ZJTEVdKTsKKworCQlnZW4ucnVuKCk7CisKKwl9CisKK30KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3NyYy9vcmcvZWNsaXBzZS9zdGVtL3V0aWxpdHkvZ2VuZXJhdG9ycy9HZW5Db25zdGFudHMuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3NyYy9vcmcvZWNsaXBzZS9zdGVtL3V0aWxpdHkvZ2VuZXJhdG9ycy9HZW5Db25zdGFudHMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MWRlY2NkCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdXRpbGl0eS9nZW5lcmF0b3JzL0dlbkNvbnN0YW50cy5qYXZhCkBAIC0wLDAgKzEsNzAgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5LmdlbmVyYXRvcnM7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDkgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioKKyAqIEEgZ3JvdXAgb2YgY29uc3RhbnRzIHRoYXQgYXBwZWFyIHJlcGVhdGVkbHkgaW4gbWFueSBvZiB0aGUgZGF0YSBnZW5lcmF0b3JzLgorICogCisgKi8KK3B1YmxpYyBjbGFzcyBHZW5Db25zdGFudHMgeworCisJZmluYWwgc3RhdGljIFN0cmluZyBQQVJBTVNfRElSID0gIm9yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eVxccGFyYW1ldGVyc1xcIjsgLy8kTk9OLU5MUy0xJAorCisJZmluYWwgc3RhdGljIFN0cmluZyBVUkxTX0RJUiA9ICJ1cmxzXFwiOyAvLyROT04tTkxTLTEkCisKKwlmaW5hbCBzdGF0aWMgU3RyaW5nIFBPUFVMQVRJT05fUFJPRklMRVMgPSAicHJvZmlsZXNcXCI7IC8vJE5PTi1OTFMtMSQKKworCWZpbmFsIHN0YXRpYyBTdHJpbmcgUFJPUEVSVElFU19PVVRQVVRfRElSID0gIm9yZy5lY2xpcHNlLnN0ZW0uaW50ZXJuYWwuZGF0YVxccmVzb3VyY2VzXFxkYXRhXFxjb3VudHJ5XFwiOyAvLyROT04tTkxTLTEkCisJCQorCWZpbmFsIHN0YXRpYyBTdHJpbmcgTUFQU19PVVRQVVRfRElSID0gIm9yZy5lY2xpcHNlLnN0ZW0uZ2VvZ3JhcGh5XFxyZXNvdXJjZXNcXGRhdGFcXGdlb1xcY291bnRyeVxcIjsgLy8kTk9OLU5MUy0xJAorCisJZmluYWwgc3RhdGljIFN0cmluZyBJU08zMTY2XzFfRklMRSA9ICJJU08zMTY2LTFcXElTTzMxNjZfMV9saXN0LnR4dCI7IC8vJE5PTi1OTFMtMSQgCisKKwlmaW5hbCBzdGF0aWMgU3RyaW5nIElTTzMxNjZfMl9GSUxFID0gIklTTzMxNjYtMlxcSVNPMzE2Nl8yX2xpc3QudHh0IjsgLy8kTk9OLU5MUy0xJAkKKworCWZpbmFsIHN0YXRpYyBTdHJpbmcgSVNPRklYX0ZJTEUgPSAiSVNPRklYXFxJU09fRklYLnR4dCI7IC8vJE5PTi1OTFMtMSQgCisKKwlmaW5hbCBzdGF0aWMgU3RyaW5nIFBPTFlHT05fQVJFQVNfRElSID0gInBvbHlnb25BcmVhc1xcIjsgLy8kTk9OLU5MUy0xJAorCisJZmluYWwgc3RhdGljIFN0cmluZyBBUkVBX1BPUFVMQVRJT05fRElSID0gIkFyZWFQb3B1bGF0aW9uRGF0YVxcIjsgLy8kTk9OLU5MUy0xJAorCQorCWZpbmFsIHN0YXRpYyBTdHJpbmcgVVNBX0xFVkVMXzJfQVJFQSA9IEFSRUFfUE9QVUxBVElPTl9ESVIgKyAiVVNBXzJfQVJFQS50eHQiOyAvLyROT04tTkxTLTEkCisJCisJZmluYWwgc3RhdGljIFN0cmluZyBVU0FfTEVWRUxfMl9QT1BVTEFUSU9OID0gQVJFQV9QT1BVTEFUSU9OX0RJUiArICJVU0FfMl9QT1BVTEFUSU9OLnR4dCI7IC8vJE5PTi1OTFMtMSQKKworCWZpbmFsIHN0YXRpYyBTdHJpbmcgTEVYX0RJUiA9ICJzb3J0XFwiOyAvLyROT04tTkxTLTEkCisKKwlmaW5hbCBzdGF0aWMgU3RyaW5nIEVVUk9QRV9OQU1FUyA9ICJ0YXJnZXRzXFxFdXJvcGVOYW1lcy50eHQiOyAvLyROT04tTkxTLTEkCisKKwlmaW5hbCBzdGF0aWMgU3RyaW5nIEVVUk9QRV9DT1VOVFJJRVMgPSAidGFyZ2V0c1xcRXVyb3BlQ291bnRyaWVzLnR4dCI7IC8vJE5PTi1OTFMtMSQKKworCWZpbmFsIHN0YXRpYyBTdHJpbmcgR1JPVVBFRF9DT1VOVFJJRVMgPSAidGFyZ2V0c1xcZ3JvdXBlZERhdGFGaWxlcy50eHQiOyAvLyROT04tTkxTLTEkCisKKwlmaW5hbCBzdGF0aWMgU3RyaW5nIFVTQV9GSVBTX0ZJTEUgPSAiSVNPRklYXFxVU0FfRklQUy50eHQiOy8vJE5PTi1OTFMtMSQJCisKKwlmaW5hbCBzdGF0aWMgU3RyaW5nIFJFRFVDRV9MSVNUID0gInRhcmdldHNcXHJlZHVjZUxpc3QudHh0IjsgLy8kTk9OLU5MUy0xJAorCisJZmluYWwgc3RhdGljIFN0cmluZyBERUZBVUxUX0lURVJBVElPTlMgPSAiNSI7IC8vJE5PTi1OTFMtMSQKKworCWZpbmFsIHN0YXRpYyBTdHJpbmcgREVGQVVMVF9USFJFU0hPTEQgPSAiNSI7IC8vJE5PTi1OTFMtMSQKKworCWZpbmFsIHN0YXRpYyBTdHJpbmcgVVNBX0wxX0RBVEEgPSAiVVNBX0wxX0RhdGFcXFVTQV9MMS50eHQiOyAvLyROT04tTkxTLTEkCisKKwlmaW5hbCBzdGF0aWMgU3RyaW5nIEZPUk1BVF9MSVNUID0gInRhcmdldHNcXGZvcm1hdExpc3QudHh0IjsgLy8kTk9OLU5MUy0xJAorCisJZmluYWwgc3RhdGljIFN0cmluZyBDT1VOVFJZX05BTUVTID0gInRhcmdldHNcXGNvdW50cnlfbmFtZXMuRnR4dCI7IC8vJE5PTi1OTFMtMSQKKworCWZpbmFsIHN0YXRpYyBTdHJpbmcgQ09VTlRSSUVTX0xJU1QgPSAidGFyZ2V0c1xcZ3JvdXBlZERhdGFGaWxlcy50eHQiOyAvLyROT04tTkxTLTEkCisJCisJZmluYWwgc3RhdGljIFN0cmluZyBEVU1NWV9ESVIgPSAgIkM6XFxEdW1teVxcIjsgLy8kTk9OLU5MUy0xJAorCit9CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91dGlsaXR5L2dlbmVyYXRvcnMvR2VuVXRpbHMuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3NyYy9vcmcvZWNsaXBzZS9zdGVtL3V0aWxpdHkvZ2VuZXJhdG9ycy9HZW5VdGlscy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ5MWE3MzcKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91dGlsaXR5L2dlbmVyYXRvcnMvR2VuVXRpbHMuamF2YQpAQCAtMCwwICsxLDE3NzIgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5LmdlbmVyYXRvcnM7CisKK2ltcG9ydCBqYXZhLmlvLkJ1ZmZlcmVkUmVhZGVyOworaW1wb3J0IGphdmEuaW8uQnVmZmVyZWRXcml0ZXI7CitpbXBvcnQgamF2YS5pby5GaWxlOworaW1wb3J0IGphdmEuaW8uRmlsZVJlYWRlcjsKK2ltcG9ydCBqYXZhLmlvLkZpbGVXcml0ZXI7CitpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLmlvLlByaW50V3JpdGVyOworaW1wb3J0IGphdmEudGV4dC5EZWNpbWFsRm9ybWF0OworaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7CitpbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7CitpbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOworaW1wb3J0IGphdmEudXRpbC5MaXN0OworaW1wb3J0IGphdmEudXRpbC5TZXQ7CitpbXBvcnQgamF2YS51dGlsLlN0cmluZ1Rva2VuaXplcjsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKgorICogU1RFTSBJSSBEYXRhIE1pZ3JhdGlvbi9HZW5lcmF0aW9uIFV0aWxpdGllcyA6IFRoZSBtZXRob2RzIGluIHRoaXMgY2xhc3MgYXJlCisgKiB1dGlsaXR5IG1ldGhvZHMgdXNlZCBieSB0aGUgdmFyaW91cyBkYXRhIGdlbmVyYXRvcnMgZm9yIFNURU0gSUkuCisgKiAKKyAqLworCitwdWJsaWMgY2xhc3MgR2VuVXRpbHMgeworCisJLyoqCisJICogQWRkIGRhdGEgdG8gdGhlIHByb3BlcnRpZXMgZmlsZS4KKwkgKiAKKwkgKiBAcGFyYW0gcHJvcGVydGllc0ZpbGUKKwkgKiAgICAgICAgICAgIGEgd3JpdGVyIHRvIHRoZSBvdXRwdXQgZmlsZQorCSAqIEBwYXJhbSBkYXRhCisJICogICAgICAgICAgICB0aGUgZGF0YSB3ZSB3YW50IHRvIHdyaXRlCisJICovCisJc3RhdGljIHByb3RlY3RlZCB2b2lkIGFkZERhdGEoUHJpbnRXcml0ZXIgcHJvcGVydGllc0ZpbGUsIFN0cmluZyBkYXRhKSB7CisJCXByb3BlcnRpZXNGaWxlLndyaXRlKGRhdGEpOworCX0KKworCS8qKgorCSAqIFRoaXMgbWV0aG9kIGZpbmRzIHdoYXQga2luZCBvZiBkYXRhIHdlIGFyZSBkZWFsaW5nIHdpdGggY3VycmVudGx5LgorCSAqIAorCSAqIEBwYXJhbSBkYXRhCisJICogICAgICAgICAgICBhIGJ1ZmZlciBvZiBkaXZhIGRhdGEKKwkgKiAKKwkgKiBAcmV0dXJuIHRoZSBhZG1pbiBsZXZlbCBvZiB0aGUgZGF0YQorCSAqLworCXN0YXRpYyBwcm90ZWN0ZWQgaW50IGdldERhdGFMZXZlbChTdHJpbmdbXSBkYXRhKSB7CisKKwkJaWYgKGlzTnVtZXJpYyhkYXRhW0lTT0RhdGEuQURNSU4yX05BTUVdKSA9PSBmYWxzZSkgeworCQkJcmV0dXJuIERhdGFUeXBlcy5MRVZFTF8yOworCQl9IGVsc2UgaWYgKGlzTnVtZXJpYyhkYXRhW0lTT0RhdGEuQURNSU4xX05BTUVdKSA9PSBmYWxzZSkgeworCQkJcmV0dXJuIERhdGFUeXBlcy5MRVZFTF8xOworCQl9CisKKwkJcmV0dXJuIERhdGFUeXBlcy5MRVZFTF8wOworCX0KKworCS8qKgorCSAqIENvbnZlcnQgZnJvbSByYWRpYW5zIHRvIGRlZ3JlZXMuCisJICogCisJICogQHBhcmFtIHZhbHVlCisJICogICAgICAgICAgICBpbiByYWRpYW5zCisJICogCisJICogQHJldHVybiBkb3VibGUgLS0gdGhlIHZhbHVlIGluIGRlZ3JlZXMKKwkgKi8KKwlzdGF0aWMgcHJvdGVjdGVkIGRvdWJsZSB0b0RlZ3JlZXMoZG91YmxlIHZhbHVlKSB7CisJCWRvdWJsZSBkVmFsdWUgPSB2YWx1ZTsKKwkJZFZhbHVlICo9IDE4MC4wICogKDEuMCAvIGphdmEubGFuZy5NYXRoLlBJKTsKKwkJcmV0dXJuIGRWYWx1ZTsKKwl9IC8vIHRvRGVncmVlcworCisJLyoqCisJICogRXh0cmFjdCB0aGUgd29ya3NwYWNlIG91dCBvZiBhIHBhdGggaS5lLiBpZiBnaXZlbiBwYXRoID0KKwkgKiBDOlxzdGVtSUlcb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5XGRhdGFNaWdyYXRpb25caW5wdXRcSVNPMzE2Ni0xXElTTzMxNjZfMV9lbi50eHQKKwkgKiBUaGlzIG1ldGhvZCBzaG91bGQgcmV0dXJuIDogQzpcc3RlbUlJXAorCSAqIAorCSAqIEBwYXJhbSBwYXRoCisJICogQHJldHVybiB3b3Jrc3BhY2UKKwkgKi8KKwlzdGF0aWMgcHJvdGVjdGVkIFN0cmluZyBnZXRXb3Jrc3BhY2UoU3RyaW5nIHBhdGgpIHsKKwkJaW50IGkgPSBJbnRlZ2VyLk1JTl9WQUxVRTsKKwkJaW50IGogPSBJbnRlZ2VyLk1JTl9WQUxVRTsKKworCQlpZiAocGF0aC5jb250YWlucygiXFwiKSA9PSBmYWxzZSkgLy8kTk9OLU5MUy0xJAorCQkJcmV0dXJuIG5ldyBTdHJpbmcoIkM6XFxEdW1teVxcIik7IC8vJE5PTi1OTFMtMSQKKwkJaSA9IHBhdGguaW5kZXhPZigiXFwiKTsgLy8kTk9OLU5MUy0xJAorCQlqID0gcGF0aC5pbmRleE9mKCJcXCIsIGkgKyAxKTsgLy8kTk9OLU5MUy0xJAorCisJCWlmIChqICE9IEludGVnZXIuTUlOX1ZBTFVFKSB7CisJCQlyZXR1cm4gcGF0aC5zdWJzdHJpbmcoMCwgaiArIDEpOworCQl9CisKKwkJcmV0dXJuIG5ldyBTdHJpbmcoR2VuQ29uc3RhbnRzLkRVTU1ZX0RJUik7CisJfQorCisJLyoqCisJICogQ29udmVydCBmcm9tIGEgU3RyaW5nIGhvbGRpbmcgYSBkb3VibGUgdmFsdWUgb2YgdGhlIGZvcm0gRC5EREREREREIGludG8KKwkgKiBhbiBJbnRlZ2VyIG9mIHRoZSBmb3JtIDogREREREREREQKKwkgKiAKKwkgKiBAcGFyYW0gdmFsdWUKKwkgKiAgICAgICAgICAgIHN0cmluZyBob2xkaW5nIGEgZG91YmxlIHZhbHVlIGluIHRoZSBmb3JtIEQuRERERERERAorCSAqIAorCSAqIEByZXR1cm4gYW4gSW50ZWdlciB2YWx1ZSBpbiBmb3JtIERERERERERECisJICovCisJc3RhdGljIHByb3RlY3RlZCBJbnRlZ2VyIHRvSW50Rm9ybWF0KFN0cmluZyB2YWx1ZSkgeworCQlEb3VibGUgZFZhbCA9IERvdWJsZS52YWx1ZU9mKHZhbHVlKTsKKwkJcmV0dXJuIEludGVnZXIudmFsdWVPZigoaW50KSAoMTAwMDAwMDAwLjAgKiBkVmFsLmRvdWJsZVZhbHVlKCkpKTsKKwl9CisKKwkvKioKKwkgKiBDb252ZXJ0IGFuIGFycmF5IG9mIEludGVnZXJzIGludG8gYW4gYXJyYXkgb2YgaW50cy4KKwkgKiAKKwkgKiBAcGFyYW0gYW4KKwkgKiAgICAgICAgICAgIGFycmF5IG9mIEludGVnZXJzCisJICogCisJICogQHJldHVybiBhbiBhcnJheSBvZiBpbnRbXQorCSAqLworCXN0YXRpYyBwcm90ZWN0ZWQgaW50W10gdG9JbnRBcnJheShBcnJheUxpc3Q8SW50ZWdlcj4gYXJyYXkpIHsKKworCQlpbnRbXSBpbnRBcnJheSA9IG5ldyBpbnRbYXJyYXkuc2l6ZSgpXTsKKwkJSXRlcmF0b3IgaXQgPSBhcnJheS5pdGVyYXRvcigpOworCisJCWludCBpbmRleCA9IDA7CisKKwkJd2hpbGUgKGl0Lmhhc05leHQoKSkgeworCQkJaW50QXJyYXlbaW5kZXhdID0gKChJbnRlZ2VyKSBpdC5uZXh0KCkpLmludFZhbHVlKCk7CisJCQlpbmRleCsrOworCQl9CisKKwkJcmV0dXJuIGludEFycmF5OworCisJfQorCisJLyoqCisJICogQ29udmVydCB0aGUgdmFsdWUgb2Ygc3RyaW5nIHRvIGEgZG91YmxlCisJICogCisJICogQHBhcmFtIHN0cgorCSAqIAorCSAqIEByZXR1cm4gZG91YmxlCisJICovCisJc3RhdGljIHByb3RlY3RlZCBkb3VibGUgZ2V0RG91YmxlKFN0cmluZyBzdHIpIHsKKwkJRG91YmxlIGhvbGRlciA9IG5ldyBEb3VibGUoc3RyKTsKKwkJcmV0dXJuIGhvbGRlci5kb3VibGVWYWx1ZSgpOworCX0KKworCS8qKgorCSAqIFJlbW92ZSBkZWNpbWFsIHBvaW50IGZyb20gdmFsdWUgYW5kIHJldHVybiBpdHMgc3RyaW5nIHJlcHJlc2VudGF0aW9uCisJICogCisJICogQHBhcmFtIGRlZ3JlZXMKKwkgKiAKKwkgKiBAcmV0dXJuIGZvcm1hdHRlZCBzdHJpbmcKKwkgKi8KKwlzdGF0aWMgcHJvdGVjdGVkIFN0cmluZyBmb3JtYXQoZG91YmxlIGRlZ3JlZXMpIHsKKwkJLy8gU3RyaW5nIHN0ciA9IG51bGw7CisJCS8vIFN0cmluZyBzdWJTdHIgPSBudWxsOworCisJCWRvdWJsZSBkVmFsID0gZGVncmVlczsKKwkJLy8gYm9vbGVhbiBuZWdhdGl2ZSA9IGZhbHNlOworCisJCS8vIERlY2ltYWwgZm9ybWF0IGRvZXMgdGhlIHJvdW5kaW5nIGZvciB1cy4KKwkJLy8gaWYgKGRWYWwgPCAtMC4wMDAwMDA1KSB7CisJCS8vIGRWYWwgLT0gMC4wMDAwMDA1OworCQkvLyB9IGVsc2UgaWYgKGRWYWwgPiAwLjAwMDAwMDUpIHsKKwkJLy8gZFZhbCArPSAwLjAwMDAwMDU7CisJCS8vIH0KKworCQkvLyBkVmFsICo9IDEwMDAwMDAuMDsKKwkJLy8gaW50IGlWYWwgPSAoaW50KSBkVmFsOworCQkvLyByZXR1cm4gIiIraVZhbDsKKwkJLy8gc3RyID0gRG91YmxlLnRvU3RyaW5nKGRWYWwpOworCQkvLyBpbnQgZG90ID0gc3RyLmluZGV4T2YoIi4iKTsgLy8kTk9OLU5MUy0xJAorCQkvLyBzdWJTdHIgPSBzdHIuc3Vic3RyaW5nKDAsIHN0ci5sZW5ndGgoKSA8IGRvdCArIDcgPyBzdHIubGVuZ3RoKCkKKwkJLy8gOiBkb3QgKyA3KTsKKwkJLy8gcmV0dXJuIHN1YlN0cjsKKwkJRGVjaW1hbEZvcm1hdCBmb3JtID0gbmV3IERlY2ltYWxGb3JtYXQoIiMjIzAuMDAwMDAwIik7IC8vJE5PTi1OTFMtMSQKKwkJcmV0dXJuIGZvcm0uZm9ybWF0KGRWYWwpOworCisJfSAvLyBmb3JtYXREYXRhCisKKwkvKioKKwkgKiBGb3JtYXQgb25seSBzaXggZGVjaW1hbCBkaWdpdHMgYWZ0ZXIgZGVjaW1hbCBwb2ludC4KKwkgKiAKKwkgKiBAcGFyYW0gdmFsdWUKKwkgKiAgICAgICAgICAgIHVuZm9ybWF0dGVkIHZhbHVlCisJICogCisJICogQHJldHVybiBmb3JtYXR0ZWQgc3RyaW5nCisJICovCisJc3RhdGljIHByb3RlY3RlZCBTdHJpbmcgZm9ybWF0KFN0cmluZyB2YWx1ZSkgeworCQlTdHJpbmcgc3ViU3RyID0gbnVsbDsKKworCQlpbnQgZG90ID0gdmFsdWUuaW5kZXhPZigiLiIpOyAvLyROT04tTkxTLTEkCisJCXN1YlN0ciA9IHZhbHVlLnN1YnN0cmluZygwLCB2YWx1ZS5sZW5ndGgoKSA8IGRvdCArIDcgPyB2YWx1ZS5sZW5ndGgoKQorCQkJCTogZG90ICsgNyk7CisJCXJldHVybiBzdWJTdHI7CisKKwl9IC8vIGZvcm1hdERhdGEKKworCS8qKgorCSAqIFRoaXMgbWV0aG9kIGNoZWNrcyB0byBzZWUgaWYgd2UgaGF2ZSBhbHJlYWR5IHNlZW4gYSBnaXZlbiBlbnRyeS4KKwkgKiAKKwkgKiBAcGFyYW0gY3VycmVudAorCSAqICAgICAgICAgICAgZW50cnkgd2UgYXJlIHRyeWluZyB0byBtYXRjaAorCSAqIEBwYXJhbSBsaXN0CisJICogICAgICAgICAgICBhIGxpc3QgY29udGFpbmluZyBhbGwgc2VlbiBlbnRyaWVzCisJICogCisJICogQHJldHVybiBib29sZWFuIHdoZXRoZXIgdGhlIGVudHJ5IGlzIHJlcGVhdGVkIG9yIG5vdAorCSAqIAorCSAqLworCXN0YXRpYyBwcm90ZWN0ZWQgYm9vbGVhbiBpc1JlcGVhdGVkKFN0cmluZyBjdXJyZW50LCBMaXN0PFN0cmluZz4gbGlzdCkgeworCisJCVN0cmluZyBjdXJyZW50U3RyID0gY3VycmVudC50b1VwcGVyQ2FzZSgpLnRyaW0oKTsKKwkJSXRlcmF0b3IgaXQgPSBsaXN0Lml0ZXJhdG9yKCk7CisJCXdoaWxlIChpdC5oYXNOZXh0KCkpIHsKKwkJCVN0cmluZyBlbnRyeSA9ICgoU3RyaW5nKSBpdC5uZXh0KCkpLnRvVXBwZXJDYXNlKCkudHJpbSgpOworCQkJaWYgKGVudHJ5LmVxdWFscyhjdXJyZW50U3RyKSkgeworCQkJCXJldHVybiB0cnVlOworCQkJfQorCQl9CisKKwkJcmV0dXJuIGZhbHNlOworCX0KKworCS8qKgorCSAqIFRoaXMgbWV0aG9kIGZpbmRzIHdoYXQga2luZCBvZiBkYXRhIHdlIGFyZSBkZWFsaW5nIHdpdGggY3VycmVudGx5LgorCSAqIAorCSAqIEBwYXJhbSBkYXRhCisJICogICAgICAgICAgICBBIGJ1ZmZlciBvZiBwdXJlIGRpdmEgZGF0YQorCSAqIAorCSAqIEByZXR1cm4gdGhlIGFkbWluIGxldmVsIGZvciB0aGUgZGF0YSBpbiB0aGlzIGJ1ZmZlcgorCSAqLworCXN0YXRpYyBwcm90ZWN0ZWQgaW50IGdldExldmVsKFN0cmluZ1tdIGRhdGEpIHsKKworCQlpZiAoaXNOdW1lcmljKGRhdGFbSVNPRGF0YS5BRE1JTjJfTkFNRV0pID09IGZhbHNlKSB7CisJCQlyZXR1cm4gRGF0YVR5cGVzLkxFVkVMXzI7CisJCX0gZWxzZSBpZiAoaXNOdW1lcmljKGRhdGFbSVNPRGF0YS5BRE1JTjFfTkFNRV0pID09IGZhbHNlKSB7CisJCQlyZXR1cm4gRGF0YVR5cGVzLkxFVkVMXzE7CisJCX0KKworCQlyZXR1cm4gRGF0YVR5cGVzLkxFVkVMXzA7CisJfQorCisJLyoqCisJICogVGVzdCBpZiB0aGUgc3RyaW5nIGNvbnRhaW5zIGEgbnVtYmVyCisJICogCisJICogQHBhcmFtIHN0cgorCSAqICAgICAgICAgICAgdGhlIHN0cmluZyBmb3Igd2hpY2ggd2Ugd2FudCB0byB0ZXN0IGlmIGl0IHJlcHJlc2VudHMgYSBudW1iZXIKKwkgKiAKKwkgKiBAcmV0dXJuIGJvb2xlYW4gdHJ1ZSBpZiB0aGlzIHN0cmluZyByZXByZXNlbnRzIGEgbnVtYmVyCisJICovCisKKwlzdGF0aWMgcHJvdGVjdGVkIGJvb2xlYW4gaXNOdW1lcmljKFN0cmluZyBzdHIpIHsKKworCQl0cnkgeworCQkJRG91YmxlLnZhbHVlT2Yoc3RyKTsKKwkJfSBjYXRjaCAoTnVtYmVyRm9ybWF0RXhjZXB0aW9uIGUpIHsgLy8gSWYgYW4gZXhjZXB0aW9uIGlzIHRocm93biwgdGhlbgorCQkJLy8gaXQgaXMgbm90IGEgbnVtYmVyLgorCQkJcmV0dXJuIGZhbHNlOworCQl9CisKKwkJcmV0dXJuIHRydWU7CisJfQorCisJLyoqCisJICogVGVzdCB3aGV0aGVyIHRoaXMga2V5IHJlcHJlc2VudHMgYW4gYWN0aXZlIFVSTCBvciBub3QuCisJICogCisJICogQHBhcmFtIHVybFN0YXR1cworCSAqICAgICAgICAgICAgQSBtYXAgd2l0aCB0dXBsZXMgKFVSTDpTVEFUVVMpCisJICogQHBhcmFtIGtleQorCSAqICAgICAgICAgICAgVGhlIFVSTCB3aG9zZSBzdGF0dXMgd2Ugd2FudCB0byBnZXQuCisJICogCisJICogQHJldHVybiBUZXN0IHdoZXRoZXIgdGhpcyBrZXkgcmVwcmVzZW50cyBhbiBhY3RpdmUgVVJMIG9yIG5vdC4KKwkgKiAKKwkgKi8KKwlzdGF0aWMgcHJvdGVjdGVkIGJvb2xlYW4gaXNBY3RpdmVVUkwoSGFzaE1hcDxTdHJpbmcsIEJvb2xlYW4+IHVybFN0YXR1cywKKwkJCVN0cmluZyBrZXkpIHsKKworCQlpZiAodXJsU3RhdHVzLmNvbnRhaW5zS2V5KGtleSkpIHsKKwkJCXJldHVybiB1cmxTdGF0dXMuZ2V0KGtleSkuYm9vbGVhblZhbHVlKCk7CisJCX0KKworCQlyZXR1cm4gZmFsc2U7CisJfQorCisJLyoqCisJICogRG8gYSBsb29rdXAgYmFzZWQgb24gbmFtZSBhbmQgZ2V0IHRoZSBJU08zMTY2LTIgZml4IGNvZGUgZm9yIHRoaXMgaXRlbS4KKwkgKiBJZiB3ZSBjYW50IG1hdGNoLCB0aGVuIHJlY29yZCB0aGUgY291bnRyeSBhbmQgZW50aXR5IG5hbWUgb2YgdGhlCisJICogdW5tYXRjaGVkIGl0ZW1zLgorCSAqIAorCSAqIEBwYXJhbSBsaXN0CisJICogICAgICAgICAgICBhIGxpc3Qgb2YgSVNPMzE2Ni0yIGZpeCBjb2RlcworCSAqIEBwYXJhbSBlbnRpdHkKKwkgKiAgICAgICAgICAgIHRoZSBlbnRpdHkgZm9yIHdoaWNoIHdlIGFyZSBzZWVraW5nIGFuIElTTyBjb2RlCisJICogCisJICogQHBhcmFtIGNvdW50cnkKKwkgKiAgICAgICAgICAgIHRoZSBjb3VudHJ5IHRvIHdoaWNoIHRoZSBlbnRpdHkgYmVsb25ncyB0bworCSAqIAorCSAqIEByZXR1cm4gdGhlIElTTzMxNjYtMiBmaXggY29kZSBmb3IgYSBnaXZlbiBjb3VudHJ5CisJICovCisJc3RhdGljIHByb3RlY3RlZCBTdHJpbmcgZ2V0Rml4Q29kZShMaXN0IGxpc3QsIFN0cmluZyBlbnRpdHksIFN0cmluZyBjb3VudHJ5KSB7CisKKwkJZmluYWwgaW50IENPVU5UUlkgPSAwOworCisJCWZpbmFsIGludCBBRE1JTjEgPSAxOworCisJCWZpbmFsIGludCBGSVggPSAzOworCisJCVN0cmluZyBlbnRpdHlTdHIgPSBlbnRpdHkudG9VcHBlckNhc2UoKS50cmltKCk7CisKKwkJU3RyaW5nIGNvdW50cnlTdHIgPSBjb3VudHJ5LnRvVXBwZXJDYXNlKCkudHJpbSgpOworCisJCWlmIChsaXN0ICE9IG51bGwpIHsKKworCQkJSXRlcmF0b3IgaXQgPSBsaXN0Lml0ZXJhdG9yKCk7CisKKwkJCXdoaWxlIChpdC5oYXNOZXh0KCkpIHsKKworCQkJCVN0cmluZ1tdIGNvbXBhcmUgPSBudWxsOworCisJCQkJU3RyaW5nIGNvZGUgPSAoU3RyaW5nKSBpdC5uZXh0KCk7CisKKwkJCQkvLyBUb2tlbml6ZQorCQkJCVN0cmluZ1Rva2VuaXplciB0b2tlbnMgPSBuZXcgU3RyaW5nVG9rZW5pemVyKGNvZGUsICI6Iik7IC8vJE5PTi1OTFMtMSQKKworCQkJCS8vIEdldCB0b2tlbnMgLT4gb3JkZXIgbWF0dGVycyBoZXJlIQorCQkJCWNvbXBhcmUgPSBuZXcgU3RyaW5nW3Rva2Vucy5jb3VudFRva2VucygpXTsKKwkJCQlpbnQgaSA9IDA7CisJCQkJd2hpbGUgKHRva2Vucy5oYXNNb3JlVG9rZW5zKCkpIHsKKwkJCQkJY29tcGFyZVtpKytdID0gdG9rZW5zLm5leHRUb2tlbigpLnRvVXBwZXJDYXNlKCkudHJpbSgpOworCQkJCX0KKworCQkJCS8vIE5vdyBkbyB0aGUgY29tcGFyaXNvbgorCQkJCWlmIChlbnRpdHlTdHIuZXF1YWxzKGNvbXBhcmVbQURNSU4xXSkKKwkJCQkJCSYmIGNvdW50cnlTdHIuZXF1YWxzKGNvbXBhcmVbQ09VTlRSWV0pKSB7CisJCQkJCXJldHVybiBjb21wYXJlW0ZJWF07CisJCQkJfQorCQkJfQorCQl9CisKKwkJLy8gTWF0Y2ggbm90IGZvdW5kLCByZXR1cm4gaXRzZWxmLgorCQlyZXR1cm4gZW50aXR5U3RyOworCX0KKworCS8qKgorCSAqIERvIGEgbG9va3VwIGJhc2VkIG9uIG5hbWUgYW5kIGdldCB0aGUgSVNPMzE2Ni0yIGluZm8gZm9yIHRoaXMgaXRlbS4gSWYgd2UKKwkgKiBjYW50IG1hdGNoLCB0aGVuIHJlY29yZCB0aGUgY291bnRyeSBhbmQgZW50aXR5IG5hbWUgb2YgdGhlIHVubWF0Y2hlZAorCSAqIGl0ZW1zLgorCSAqIAorCSAqIEBwYXJhbSBsaXN0CisJICogICAgICAgICAgICBhIGxpc3Qgb2YgSVNPMzE2Ni0yIGNvZGVzCisJICogQHBhcmFtIG5hbWUKKwkgKiAgICAgICAgICAgIHRoZSBlbnRpdHkgZm9yIHdoaWNoIHdlIGFyZSBzZWVraW5nIGFuIElTTyBjb2RlICoKKwkgKiBAcGFyYW0gYWxwaGEyCisJICogICAgICAgICAgICB0aGUgYWxwaGEyIGNvZGUgb2YgdGhlIGNvdW50cnkgdG8gd2hpY2ggdGhlIGVudGl0eSBiZWxvbmdzIHRvCisJICogCisJICogQHJldHVybiB0aGUgSVNPMzE2Ni0yIGRlc2NyaXB0b3IuCisJICovCisJc3RhdGljIHByb3RlY3RlZCBTdHJpbmcgZ2V0SVNPMkRlc2NyaXB0b3IoTGlzdCBsaXN0LCBTdHJpbmcgbmFtZSwKKwkJCVN0cmluZyBhbHBoYTIpIHsKKworCQlJU09Db2RlMiBjb2RlID0gbnVsbDsKKworCQlTdHJpbmcgbmFtZVN0ciA9IG5hbWUudG9VcHBlckNhc2UoKTsKKworCQlpZiAobGlzdCAhPSBudWxsKSB7CisKKwkJCUl0ZXJhdG9yIGl0ID0gbGlzdC5pdGVyYXRvcigpOworCisJCQl3aGlsZSAoaXQuaGFzTmV4dCgpKSB7CisKKwkJCQlTdHJpbmdbXSBjb21wYXJlID0gbnVsbDsKKworCQkJCWNvZGUgPSAoSVNPQ29kZTIpIGl0Lm5leHQoKTsKKworCQkJCWlmIChjb2RlLmdldEFscGhhMigpLmVxdWFscyhhbHBoYTIpID09IGZhbHNlKSB7CisJCQkJCWNvbnRpbnVlOworCQkJCX0KKworCQkJCS8vIElGIElTTyAzMTY2LTIgY29udGFpbnMgYnJhY2tldHMgdGhlbiB3ZSBoYXZlIHRvIGRvIHR3bworCQkJCS8vIGNvbXBhcmlzb25zCisKKwkJCQkvLyBHZXQgdGhlIGVudGl0eSBuYW1lIGFuZCByZW1vdmUgYmxhbmtzCisJCQkJU3RyaW5nIGVudGl0eSA9IGNvZGUuZ2V0TmFtZSgpLnRvVXBwZXJDYXNlKCkudHJpbSgpOworCisJCQkJaWYgKGVudGl0eS5jb250YWlucygiWyIpKSB7IC8vJE5PTi1OTFMtMSQKKworCQkJCQllbnRpdHkgPSBlbnRpdHkucmVwbGFjZSgiXSIsICIiKTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCisKKwkJCQkJLy8gVG9rZW5pemUKKwkJCQkJU3RyaW5nVG9rZW5pemVyIHRva2VucyA9IG5ldyBTdHJpbmdUb2tlbml6ZXIoZW50aXR5LCAiWyIpOyAvLyROT04tTkxTLTEkCisKKwkJCQkJLy8gR2V0IHRva2VucyAtPiBvcmRlciBtYXR0ZXJzIGhlcmUhCisJCQkJCWNvbXBhcmUgPSBuZXcgU3RyaW5nW3Rva2Vucy5jb3VudFRva2VucygpXTsKKwkJCQkJaW50IGkgPSAwOworCQkJCQl3aGlsZSAodG9rZW5zLmhhc01vcmVUb2tlbnMoKSkgeworCQkJCQkJY29tcGFyZVtpKytdID0gdG9rZW5zLm5leHRUb2tlbigpLnRvVXBwZXJDYXNlKCkudHJpbSgpOworCQkJCQl9CisJCQkJfQorCisJCQkJaWYgKGNvbXBhcmUgIT0gbnVsbCkgeworCQkJCQlmb3IgKGludCBpID0gMDsgaSA8IGNvbXBhcmUubGVuZ3RoOyBpKyspIHsKKwkJCQkJCWlmIChuYW1lU3RyLnJlcGxhY2UoIi0iLCAiICIpLmVxdWFscyhjb21wYXJlW2ldKSkgeyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKKworCQkJCQkJCXJldHVybiBjb2RlLmdldElkKCk7CisJCQkJCQl9CisJCQkJCX0KKwkJCQl9IGVsc2UgaWYgKG5hbWVTdHIucmVwbGFjZSgiLSIsICIgIikuZXF1YWxzKGNvZGUuZ2V0TmFtZSgpKSkgeyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKKwkJCQkJcmV0dXJuIGNvZGUuZ2V0SWQoKTsKKwkJCQl9CisKKwkJCX0gLy8gd2hpbGUKKworCQl9IC8vIGlmCisKKwkJcmV0dXJuIG5hbWVTdHI7CisJfQorCisJLyoqCisJICogRG8gYSBsb29rdXAgYmFzZWQgb24gbmFtZSBhbmQgZ2V0IHRoZSBJU08zMTY2LTIgb2JqZWN0IGZvciB0aGlzIGl0ZW0uIElmCisJICogd2UgY2FudCBtYXRjaCwgdGhlbiByZWNvcmQgdGhlIGNvdW50cnkgYW5kIGVudGl0eSBuYW1lIG9mIHRoZSB1bm1hdGNoZWQKKwkgKiBpdGVtcy4KKwkgKiAKKwkgKiBAcGFyYW0gbGlzdAorCSAqICAgICAgICAgICAgYSBsaXN0IG9mIElTTzMxNjYtMiBjb2RlcworCSAqIEBwYXJhbSBuYW1lCisJICogICAgICAgICAgICB0aGUgZW50aXR5IGZvciB3aGljaCB3ZSBhcmUgc2Vla2luZyBhbiBJU08gY29kZSAqCisJICogQHBhcmFtIGFscGhhMgorCSAqICAgICAgICAgICAgdGhlIGFscGhhMiBjb2RlIG9mIHRoZSBjb3VudHJ5IHRvIHdoaWNoIHRoZSBlbnRpdHkgYmVsb25ncyB0bworCSAqIAorCSAqIEByZXR1cm4gdGhlIElTTzJDb2RlCisJICovCisJc3RhdGljIHByb3RlY3RlZCBJU09Db2RlMiBnZXRJU08yT2JqZWN0KExpc3QgbGlzdCwgU3RyaW5nIG5hbWUsCisJCQlTdHJpbmcgYWxwaGEyKSB7CisKKwkJSVNPQ29kZTIgY29kZSA9IG51bGw7CisKKwkJU3RyaW5nIG5hbWVTdHIgPSBuYW1lLnRvVXBwZXJDYXNlKCkudHJpbSgpOworCisJCWlmIChsaXN0ICE9IG51bGwpIHsKKworCQkJSXRlcmF0b3IgaXQgPSBsaXN0Lml0ZXJhdG9yKCk7CisKKwkJCXdoaWxlIChpdC5oYXNOZXh0KCkpIHsKKworCQkJCVN0cmluZ1tdIGNvbXBhcmUgPSBudWxsOworCisJCQkJY29kZSA9IChJU09Db2RlMikgaXQubmV4dCgpOworCisJCQkJaWYgKGNvZGUuZ2V0QWxwaGEyKCkuZXF1YWxzKGFscGhhMikgPT0gZmFsc2UpIHsKKwkJCQkJY29udGludWU7CisJCQkJfQorCisJCQkJLy8gSUYgSVNPIDMxNjYtMiBjb250YWlucyBicmFja2V0cyB0aGVuIHdlIGhhdmUgdG8gZG8gYXQgbGVhc3QKKwkJCQkvLyB0d28gY29tcGFyaXNvbnMKKworCQkJCS8vIEdldCB0aGUgZW50aXR5IG5hbWUgYW5kIHJlbW92ZSBibGFua3MKKwkJCQlTdHJpbmcgZW50aXR5ID0gY29kZS5nZXROYW1lKCkudG9VcHBlckNhc2UoKS50cmltKCk7CisKKwkJCQlpZiAoZW50aXR5LmNvbnRhaW5zKCJbIikpIHsgLy8kTk9OLU5MUy0xJAorCisJCQkJCWVudGl0eSA9IGVudGl0eS5yZXBsYWNlKCJdIiwgIiIpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKKworCQkJCQkvLyBUb2tlbml6ZQorCQkJCQlTdHJpbmdUb2tlbml6ZXIgdG9rZW5zID0gbmV3IFN0cmluZ1Rva2VuaXplcihlbnRpdHksICJbIik7IC8vJE5PTi1OTFMtMSQKKworCQkJCQkvLyBHZXQgdG9rZW5zIC0+IG9yZGVyIG1hdHRlcnMgaGVyZSEKKwkJCQkJY29tcGFyZSA9IG5ldyBTdHJpbmdbdG9rZW5zLmNvdW50VG9rZW5zKCldOworCQkJCQlpbnQgaSA9IDA7CisJCQkJCXdoaWxlICh0b2tlbnMuaGFzTW9yZVRva2VucygpKSB7CisJCQkJCQljb21wYXJlW2krK10gPSB0b2tlbnMubmV4dFRva2VuKCkudG9VcHBlckNhc2UoKS50cmltKCk7CisJCQkJCX0KKwkJCQl9CisKKwkJCQlpZiAoY29tcGFyZSAhPSBudWxsKSB7CisJCQkJCWZvciAoaW50IGkgPSAwOyBpIDwgY29tcGFyZS5sZW5ndGg7IGkrKykgeworCQkJCQkJaWYgKG5hbWVTdHIuZXF1YWxzKGNvbXBhcmVbaV0pKSB7CisKKwkJCQkJCQlyZXR1cm4gY29kZTsKKwkJCQkJCX0KKwkJCQkJfQorCQkJCX0gZWxzZSBpZiAobmFtZVN0ci5lcXVhbHMoY29kZS5nZXROYW1lKCkudG9VcHBlckNhc2UoKS50cmltKCkpKSB7CisJCQkJCXJldHVybiBjb2RlOworCQkJCX0KKworCQkJfSAvLyB3aGlsZQorCisJCX0gLy8gaWYKKworCQlyZXR1cm4gbmV3IElTT0NvZGUyKCJGT08iLCAiVU5LIiwgIlVOSyIsICIwIik7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJCAvLyROT04tTkxTLTMkIC8vJE5PTi1OTFMtNCQKKwl9CisKKwkvKioKKwkgKiBEbyBhIGxvb2t1cCBiYXNlZCBvbiBuYW1lIGFuZCBnZXQgdGhlIElTTzMxNjYtMiBpbmZvIGZvciB0aGlzIGl0ZW0uIElmIHdlCisJICogY2FudCBtYXRjaCwgdGhlbiByZWNvcmQgdGhlIGNvdW50cnkgYW5kIGVudGl0eSBuYW1lIG9mIHRoZSB1bm1hdGNoZWQKKwkgKiBpdGVtcy4KKwkgKiAKKwkgKiBAcGFyYW0gbGlzdAorCSAqICAgICAgICAgICAgYSBsaXN0IG9mIElTTzMxNjYtMiBjb2Rlcy4KKwkgKiBAcGFyYW0gZGVzY3JpcHRvcgorCSAqICAgICAgICAgICAgdGhlIGRlc2NyaXB0b3Igd2UgYXJlIHRyeWluZyB0byBtYXRjaC4KKwkgKiAKKwkgKiBAcmV0dXJuIHRoZSBJU08zMTY2LTIgY29kZSBmb3IgYSBnaXZlbiBjb3VudHJ5CisJICovCisJc3RhdGljIHByb3RlY3RlZCBJU09Db2RlMiBnZXRJU08yT2JqZWN0KExpc3QgbGlzdCwgU3RyaW5nIGRlc2NyaXB0b3IpIHsKKworCQlJU09Db2RlMiBjb2RlID0gbnVsbDsKKworCQlTdHJpbmcgZGVzY3JpcHRvclN0ciA9IGRlc2NyaXB0b3IudG9VcHBlckNhc2UoKTsKKworCQlpZiAobGlzdCAhPSBudWxsKSB7CisKKwkJCUl0ZXJhdG9yIGl0ID0gbGlzdC5pdGVyYXRvcigpOworCisJCQl3aGlsZSAoaXQuaGFzTmV4dCgpKSB7CisKKwkJCQljb2RlID0gKElTT0NvZGUyKSBpdC5uZXh0KCk7CisKKwkJCQlpZiAoZGVzY3JpcHRvclN0ci5lcXVhbHMoY29kZS5nZXROYW1lKCkpKSB7CisJCQkJCXJldHVybiBjb2RlOworCQkJCX0KKworCQkJfSAvLyB3aGlsZQorCisJCX0gLy8gaWYKKworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBQcm9kdWNlIGEgbGlzdCBvZiBJU08yQ29kZXMgcmVwcmVzZW50aW5nIHRoZSBzb3J0ZWQgZGVzY3JpcHRvcnMgaW4gbGlzdC4KKwkgKiAKKwkgKiBAcGFyYW0gbGlzdAorCSAqICAgICAgICAgICAgYSBsaXN0IG9mIGRlc2NyaXB0b3JzCisJICogCisJICogQHJldHVybiBhIGxpc3Qgb2YgSVNPIDMxNjYtMiBjb2Rlcy4KKwkgKi8KKwlzdGF0aWMgcHJvdGVjdGVkIExpc3Q8SVNPQ29kZTI+IGdldFNvcnRlZERlc2NyaXB0b3JzKExpc3Q8U3RyaW5nPiBsaXN0KSB7CisKKwkJSXRlcmF0b3IgaXQgPSBsaXN0Lml0ZXJhdG9yKCk7CisJCXdoaWxlIChpdC5oYXNOZXh0KCkpIHsKKwkJCVV0aWxMb2dnZXIubG9nSW5mb3JtYXRpb24oIkRlc2NyaXB0b3IgLT4gIiArIGl0Lm5leHQoKSk7IC8vJE5PTi1OTFMtMSQKKworCQl9CisKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogRmluZCBhIGxldmVsIDIgdmFsdWUgZm9yIGEgZ2l2ZW4gbGV2ZWwgMiBhZG1pbmlzdHJhdGlvbiBJdCBjYW4gYmUgZWl0aGVyCisJICogYXJlYSBvciBwb3B1bGF0aW9uIGRlcGVuZGluZyBvbiB0aGUgdHlwZSBvZiBkYXRhLgorCSAqIAorCSAqIEBwYXJhbSBlbnRpdHkKKwkgKiAgICAgICAgICAgIHRoZSBlbnRpdHkgZm9yIHdoaWNoIHdlIHdhbnQgdG8gZmluZCB0aGUgdmFsdWUKKwkgKiAKKwkgKiBAcGFyYW0gc3RhdGUKKwkgKiAKKwkgKiBAcGFyYW0gbGlzdAorCSAqICAgICAgICAgICAgYSBsaXN0IG9mIGxldmVsIDIgYWRtaW5pc3RyYXRpb25zCisJICogCisJICogQHJldHVybiB0aGUgbGV2ZWwgMiB2YWx1ZSAoYXJlYSBvciBwb3B1bGF0aW9uIHZhbHVlKQorCSAqLworCXN0YXRpYyBwcm90ZWN0ZWQgU3RyaW5nIGdldExldmVsMkRhdGEoU3RyaW5nIGVudGl0eSwgU3RyaW5nIHN0YXRlLCBMaXN0IGxpc3QpIHsKKworCQlmaW5hbCBpbnQgRU5USVRZID0gMDsKKworCQlmaW5hbCBpbnQgU1RBVEVfSUQgPSAxOworCisJCWZpbmFsIGludCBBUkVBID0gMjsKKworCQlTdHJpbmdbXSBkYXRhID0gbnVsbDsKKworCQlJdGVyYXRvciBpdCA9IGxpc3QuaXRlcmF0b3IoKTsKKworCQlTdHJpbmcgZW50aXR5U3RyID0gZW50aXR5LnRvVXBwZXJDYXNlKCkudHJpbSgpOworCisJCWVudGl0eVN0ciA9IGVudGl0eVN0ci5yZXBsYWNlKCJcXHQiLCAiIik7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAorCisJCVN0cmluZyBzdGF0ZVN0ciA9IHN0YXRlLnRvVXBwZXJDYXNlKCkudHJpbSgpOworCisJCXdoaWxlIChpdC5oYXNOZXh0KCkpIHsKKworCQkJZGF0YSA9ICgoU3RyaW5nKSBpdC5uZXh0KCkpLnNwbGl0KCI6Iik7IC8vJE5PTi1OTFMtMSQKKworCQkJLy8gR2V0IHRoZSBlbnRpdHkgbmFtZSBhbmQgcmVtb3ZlIGJsYW5rcworCQkJU3RyaW5nIGxvY2F0aW9uID0gZGF0YVtFTlRJVFldLnRvVXBwZXJDYXNlKCkudHJpbSgpOworCisJCQlsb2NhdGlvbiA9IGxvY2F0aW9uLnRvVXBwZXJDYXNlKCkudHJpbSgpOworCisJCQlpZiAoZW50aXR5LmVxdWFscyhsb2NhdGlvbikpIHsKKworCQkJCS8vIENoZWNrIGJvdGggZW50aXRpZXMgYmVsb25nIHRvIHNhbWUgc3RhdGUKKwkJCQlpZiAoc3RhdGVTdHIuZXF1YWxzKGRhdGFbU1RBVEVfSURdLnRyaW0oKSkgPT0gZmFsc2UpIHsKKwkJCQkJLy8gSWdub3JlIDogc2FtZSBuYW1lICwgYnV0IGRpZmZlcmVudCBsZXZlbAorCQkJCQljb250aW51ZTsKKwkJCQl9CisJCQkJcmV0dXJuIGRhdGFbQVJFQV0udHJpbSgpOworCQkJfQorCisJCX0gLy8gd2hpbGUKKworCQlyZXR1cm4gIjAiOyAvLyROT04tTkxTLTEkCisJfQorCisJLyoqCisJICogTG9hZCBhbGwgdGhlIElTTyAzMTY2LTIgZGF0YSBmb3IgdGhlIGNvdW50cnkgZGVzY3JpYmVkCisJICogCisJICogQHBhcmFtIGlzb0ZpbGUKKwkgKiAgICAgICAgICAgIGZpbGUgY29udGFpbmluZyBJU08gMzE2Ni0yIGNvZGVzCisJICogCisJICogQHJldHVybiBhIGxpc3QgaG9sZGluZyB0aGUgSVNPIDMxNjYtMiBjb2RlcworCSAqLworCXN0YXRpYyBwcm90ZWN0ZWQgTGlzdDxJU09Db2RlMj4gbG9hZElTTzIoU3RyaW5nIGlzb0ZpbGUpIHsKKworCQlTdHJpbmcgYnVmZmVyID0gbnVsbDsKKwkJTGlzdDxJU09Db2RlMj4gbGlzdCA9IG5ldyBBcnJheUxpc3Q8SVNPQ29kZTI+KCk7CisKKwkJQnVmZmVyZWRSZWFkZXIgcmVhZGVyID0gb3BlblJlYWRlcihpc29GaWxlKTsKKwkJdHJ5IHsKKworCQkJaWYgKHJlYWRlciAhPSBudWxsKSB7CisJCQkJd2hpbGUgKEVPRihidWZmZXIgPSByZWFkZXIucmVhZExpbmUoKSkgIT0gdHJ1ZSkgeworCQkJCQkvLyBVdGlsTG9nZ2VyLmxvZ0luZm9ybWF0aW9uKCJSZWFkIDogIiArIGJ1ZmZlcik7CisJCQkJCS8vIElmIHRoaXMgbGluZSBzdGFydHMgd2l0aCAiIyIsIHRoZW4gaWdub3JlIGl0LgorCisJCQkJCWlmIChidWZmZXIudHJpbSgpLnN0YXJ0c1dpdGgoIiMiKSkgeyAvLyROT04tTkxTLTEkCisJCQkJCQljb250aW51ZTsKKwkJCQkJfQorCisJCQkJCS8vIE1ha2Ugc3VyZSB0aGF0IHdlIG1hcmsgYWxsIHVua25vd24gZGF0YS4KKwkJCQkJYnVmZmVyID0gYnVmZmVyLnJlcGxhY2UoIjs7IiwgIjtVTktOT1dOOyIpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKKworCQkJCQkvLyBNYWtlIGl0IGFsbCB1cHBlcmNhc2UKKwkJCQkJYnVmZmVyID0gYnVmZmVyLnRvVXBwZXJDYXNlKCk7CisKKwkJCQkJLy8gVG9rZW5pemUKKwkJCQkJU3RyaW5nVG9rZW5pemVyIHRva2VucyA9IG5ldyBTdHJpbmdUb2tlbml6ZXIoYnVmZmVyLCAiOyIpOyAvLyROT04tTkxTLTEkCisKKwkJCQkJLy8gR2V0IHRva2VucyAtPiBvcmRlciBtYXR0ZXJzIGhlcmUhCisJCQkJCVN0cmluZyBhbHBoYTIgPSB0b2tlbnMubmV4dFRva2VuKCkudHJpbSgpOworCQkJCQlTdHJpbmcgaWQgPSB0b2tlbnMubmV4dFRva2VuKCkudHJpbSgpOworCQkJCQlTdHJpbmcgbmFtZSA9IHRva2Vucy5uZXh0VG9rZW4oKS50cmltKCk7CisJCQkJCVN0cmluZyBpbmRleCA9IHRva2Vucy5uZXh0VG9rZW4oKS50cmltKCk7CisKKwkJCQkJSVNPQ29kZTIgY29kZSA9IG5ldyBJU09Db2RlMihhbHBoYTIsIGlkLCBuYW1lLCBpbmRleCk7CisKKwkJCQkJLy8gYWRkIG5ldyBjb2RlIHRvIG91ciBsaXN0CisJCQkJCWxpc3QuYWRkKGNvZGUpOworCisJCQkJCWJ1ZmZlciA9IG51bGw7CisJCQkJfQorCQkJCXJlYWRlci5jbG9zZSgpOworCQkJfQorCisJCX0gY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKKwkJCWUucHJpbnRTdGFja1RyYWNlKCk7CisJCX0KKwkJcmV0dXJuIGxpc3Q7CisJfQorCisJLyoqCisJICogCisJICogQHBhcmFtIGNvbmZpZ0ZpbGUKKwkgKiBAcmV0dXJuIGhhc2ggbWFwIHdpdGggYWxsIGNvbmZpZ3VyYXRpb24gdmFyaWFibGVzIGFuZCB0aGVpciB2YWx1ZXMKKwkgKi8KKwlzdGF0aWMgcHJvdGVjdGVkIEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+IGxvYWRDb25maWdGaWxlKFN0cmluZyBjb25maWdGaWxlKSB7CisJCWZpbmFsIGludCBWQVIgPSAwOworCQlmaW5hbCBpbnQgVkFMVUUgPSAxOworCQlmaW5hbCBpbnQgVE9UQUwgPSAyOworCQlIYXNoTWFwPFN0cmluZywgU3RyaW5nPiB2YXJzID0gbmV3IEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+KCk7CisJCVN0cmluZyBidWZmZXIgPSBudWxsOworCQlCdWZmZXJlZFJlYWRlciByZWFkZXIgPSBvcGVuUmVhZGVyKGNvbmZpZ0ZpbGUpOworCisJCXRyeSB7CisJCQlpZiAocmVhZGVyICE9IG51bGwpIHsKKwkJCQl3aGlsZSAoRU9GKGJ1ZmZlciA9IHJlYWRlci5yZWFkTGluZSgpKSAhPSB0cnVlKSB7CisKKwkJCQkJLy8gSWYgdGhpcyBsaW5lIHN0YXJ0cyB3aXRoICIjIiwgdGhlbiBpZ25vcmUgaXQuCisJCQkJCWlmIChidWZmZXIudHJpbSgpLnN0YXJ0c1dpdGgoIiMiKSkgeyAvLyROT04tTkxTLTEkCisJCQkJCQlVdGlsTG9nZ2VyLmxvZ0luZm9ybWF0aW9uKCJcdFx0IiArIGJ1ZmZlcik7IC8vJE5PTi1OTFMtMSQKKwkJCQkJCWNvbnRpbnVlOworCQkJCQl9CisKKwkJCQkJaWYgKGJ1ZmZlci5jb250YWlucygiPSIpID09IGZhbHNlKSB7IC8vJE5PTi1OTFMtMSQKKwkJCQkJCVN5c3RlbS5vdXQKKwkJCQkJCQkJLnByaW50bG4oIlx0XHRCYWQgY29uZmlndXJhdGlvbiBmaWxlIC0tIGZvcm1hdCBzaG91bGQgYmUgOiBWQVIgPSBWQUxVRSAiKTsgLy8kTk9OLU5MUy0xJAorCQkJCQkJVXRpbExvZ2dlci5sb2dJbmZvcm1hdGlvbigiXHRcdElnbm9yaW5nIGxpbmUgOiAiICsgYnVmZmVyKTsgLy8kTk9OLU5MUy0xJAorCQkJCQkJY29udGludWU7CisJCQkJCX0KKworCQkJCQlTdHJpbmdbXSB0b2tlbnMgPSBidWZmZXIudHJpbSgpLnNwbGl0KCI9Iik7IC8vJE5PTi1OTFMtMSQKKworCQkJCQlpZiAodG9rZW5zLmxlbmd0aCA8IFRPVEFMKSB7CisJCQkJCQlTeXN0ZW0ub3V0CisJCQkJCQkJCS5wcmludGxuKCJcdFx0QmFkIGNvbmZpZ3VyYXRpb24gZmlsZSAtLSBmb3JtYXQgc2hvdWxkIGJlIDogIFZBUiA9IFZBTFVFICAiKTsgLy8kTk9OLU5MUy0xJAorCQkJCQkJVXRpbExvZ2dlci5sb2dJbmZvcm1hdGlvbigiXHRcdElnbm9yaW5nIGxpbmUgOiAiICsgYnVmZmVyKTsgLy8kTk9OLU5MUy0xJAorCQkJCQkJY29udGludWU7CisJCQkJCX0KKworCQkJCQkvLyBHZXQgdmFyaWFibGUgYW5kIHZhbHVlIGFuZCBpZ25vcmUgZXZlcnl0aGluZyBlbHNlIG9uIHRoZQorCQkJCQkvLyBsaW5lLgorCQkJCQlTdHJpbmcgdmFyID0gdG9rZW5zW1ZBUl0udG9VcHBlckNhc2UoKS50cmltKCk7CisJCQkJCVN0cmluZyB2YWx1ZSA9IHRva2Vuc1tWQUxVRV0udHJpbSgpOworCisJCQkJCS8vIENoZWNrIHRoYXQgaXQgaXMgYSB2YWxpZCBDT05GSUdVUkFUSU9OIFZBUklBQkxFCisJCQkJCWlmICh2ZXJpZnlWYXIodmFyKSA9PSBmYWxzZSkgeworCQkJCQkJU3lzdGVtLm91dAorCQkJCQkJCQkucHJpbnRsbigiXHRcdEJhZCBjb25maWd1cmF0aW9uIGZpbGUgLS0gaW52YWxpZCBjb25maWd1cmF0aW9uIHZhcmlhYmxlIDogIiAvLyROT04tTkxTLTEkCisJCQkJCQkJCQkJKyB2YXIpOworCQkJCQkJVXRpbExvZ2dlci5sb2dJbmZvcm1hdGlvbigiXHRcdElnbm9yaW5nIGxpbmUgOiAiICsgYnVmZmVyKTsgLy8kTk9OLU5MUy0xJAorCQkJCQkJY29udGludWU7CisJCQkJCX0KKworCQkJCQlVdGlsTG9nZ2VyLmxvZ0luZm9ybWF0aW9uKCJcdFx0PCs+IiArIGJ1ZmZlcik7IC8vJE5PTi1OTFMtMSQKKworCQkJCQl2YXJzLnB1dCh2YXIsIHZhbHVlKTsKKworCQkJCX0KKwkJCX0KKworCQl9IGNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7CisJCQllLnByaW50U3RhY2tUcmFjZSgpOworCQl9CisKKwkJLy8gVmVyaWZ5IHRoYXQgd2UgaGF2ZSBhIHZhbGlkIHdvcmtzcGFjZS4gSXQgaXMgdGhlIG9ubHkgbm9uLW9wdGlvbmFsCisJCS8vIHZhcmlhYmxlLgorCQlpZiAoR2VuVXRpbHMudmVyaWZ5V29ya3NwYWNlKHZhcnMpID09IGZhbHNlKSB7CisJCQlTeXN0ZW0ub3V0CisJCQkJCS5wcmludGxuKCJcdFx0QmFkIGNvbmZpZ3VyYXRpb24gZmlsZSAtLSBXT1JLU1BBQ0UgdmFyaWFibGUgbm90IGZvdW5kLiBQbGVhc2UgdXNlIGZvcm1hdCBWQVIgPSBWQUxVRSAoaS5lLiBXT1JLU1BBQ0UgPSBDOlxcc3RlbUlJXFwgIik7IC8vJE5PTi1OTFMtMSQKKwkJCVV0aWxMb2dnZXIubG9nSW5mb3JtYXRpb24oIlx0XHRJZ25vcmluZyBsaW5lIDogIiArIGJ1ZmZlcik7IC8vJE5PTi1OTFMtMSQKKwkJfQorCisJCXJldHVybiB2YXJzOworCisJfQorCisJLyoqCisJICogCisJICogQHBhcmFtIHZhcgorCSAqIEByZXR1cm4gYm9vbGVhbgorCSAqLworCXN0YXRpYyBwcm90ZWN0ZWQgYm9vbGVhbiB2ZXJpZnlWYXIoU3RyaW5nIHZhcikgeworCisJCWlmICh2YXIuZXF1YWxzKCJXT1JLU1BBQ0UiKSB8fCB2YXIuZXF1YWxzKCJJU08zMTY2XzEiKSAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKKwkJCQl8fCB2YXIuZXF1YWxzKCJJU08zMTY2XzIiKSB8fCB2YXIuZXF1YWxzKCJJU09fRklYIikgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCisJCQkJfHwgdmFyLmVxdWFscygiUE9QX1BST0ZJTEVTIikgfHwgdmFyLmVxdWFscygiTEVYX0RJUiIpIC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAorCQkJCXx8IHZhci5lcXVhbHMoIlRBUkdFVF9MSVNUIikgfHwgdmFyLmVxdWFscygiQVJFQV9QT1AiKSAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKKwkJCQl8fCB2YXIuZXF1YWxzKCJQT0xZR09OX0FSRUFTIikgfHwgdmFyLmVxdWFscygiT1VUUFVUIikgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkIAorCQkJCXx8IHZhci5lcXVhbHMoIlBST1BFUlRJRVNfT1VUUFVUIikgfHwgdmFyLmVxdWFscygiTUFQX09VVFBVVCIpIC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAorCQkJCXx8IHZhci5lcXVhbHMoIlRIUkVTSE9MRCIpIHx8IHZhci5lcXVhbHMoIk5BTUVTX0xJU1QiKSAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQgCisJCQkJfHwgdmFyLmVxdWFscygiSVRFUkFUSU9OUyIpIHx8IHZhci5lcXVhbHMoIlJFRFVDRV9MSVNUIikgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCisJCQkJfHwgdmFyLmVxdWFscygiSU5QVVQiKSkgeyAvLyROT04tTkxTLTEkCisJCQlyZXR1cm4gdHJ1ZTsKKwkJfQorCisJCXJldHVybiBmYWxzZTsKKworCX0KKworCS8qKgorCSAqIAorCSAqIEBwYXJhbSB2YXJzIC0tCisJICogICAgICAgICAgICBhbGwgdGhlIGNvbmZpZ3VyYXRpb24gdmFyaWFibGVzCisJICogQHJldHVybiBmYWxzZSBpZiB3ZSBkb250IGhhdmUgYSB2YWxpZCB3b3Jrc3BhY2UgdmFyaWFibGUKKwkgKi8KKwlzdGF0aWMgcHJvdGVjdGVkIGJvb2xlYW4gdmVyaWZ5V29ya3NwYWNlKEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+IHZhcnMpIHsKKworCQlTZXQ8U3RyaW5nPiBrZXlzID0gdmFycy5rZXlTZXQoKTsKKwkJSXRlcmF0b3IgaXQgPSBrZXlzLml0ZXJhdG9yKCk7CisJCXdoaWxlIChpdC5oYXNOZXh0KCkpIHsKKwkJCVN0cmluZyB2YXIgPSAoU3RyaW5nKSBpdC5uZXh0KCk7CisJCQlpZiAodmFyLmVxdWFscygiV09SS1NQQUNFIikpIHsgLy8kTk9OLU5MUy0xJAorCQkJCXJldHVybiB0cnVlOworCQkJfQorCQl9CisKKwkJcmV0dXJuIGZhbHNlOworCX0KKworCS8qKgorCSAqIAorCSAqIEBwYXJhbSB2YXJzIC0tCisJICogICAgICAgICAgICBhbGwgdGhlIGNvbmZpZ3VyYXRpb24gdmFyaWFibGVzCisJICogQHJldHVybiBmYWxzZSBpZiB3ZSBkb250IGhhdmUgYSB2YWxpZCBvdXRwdXQgZGlyZWN0b3J5CisJICovCisJc3RhdGljIHByb3RlY3RlZCBib29sZWFuIHZlcmlmeU91dHB1dERpcmVjdG9yeShIYXNoTWFwPFN0cmluZywgU3RyaW5nPiB2YXJzKSB7CisKKwkJU2V0PFN0cmluZz4ga2V5cyA9IHZhcnMua2V5U2V0KCk7CisJCUl0ZXJhdG9yIGl0ID0ga2V5cy5pdGVyYXRvcigpOworCQl3aGlsZSAoaXQuaGFzTmV4dCgpKSB7CisJCQlTdHJpbmcgdmFyID0gKFN0cmluZykgaXQubmV4dCgpOworCQkJaWYgKHZhci5lcXVhbHMoIk9VVFBVVCIpIHx8IHZhci5lcXVhbHMoIk1BUF9PVVRQVVQiKSAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKKwkJCQkJfHwgdmFyLmVxdWFscygiUFJPUEVSVElFU19PVVRQVVQiKSkgeyAvLyROT04tTkxTLTEkCisJCQkJcmV0dXJuIHRydWU7CisJCQl9CisJCX0KKworCQlyZXR1cm4gZmFsc2U7CisJfQorCisJLyoqCisJICogTG9hZCBzZWxlY3RpdmVseSB0aGUgSVNPIDMxNjYtMiBkYXRhIGZvciB0aGUgY291bnRyeSBkZXNjcmliZWQgYnkgZGVzYworCSAqIAorCSAqIEBwYXJhbSBpc29GaWxlCisJICogICAgICAgICAgICBmaWxlIGNvbnRhaW5pbmcgSVNPIDMxNjYtMiBjb2RlcworCSAqIEBwYXJhbSBkZXNjCisJICogICAgICAgICAgICBJU08zMTY2LTIgdHdvIGxldHRlciBjb3VudHJ5IGNvZGUKKwkgKiAKKwkgKiBAcmV0dXJuIGEgbGlzdCBob2xkaW5nIHRoZSBJU08gMzE2Ni0yIGNvZGVzCisJICovCisJc3RhdGljIHByb3RlY3RlZCBMaXN0PElTT0NvZGUyPiBsb2FkSVNPMihTdHJpbmcgaXNvRmlsZSwgU3RyaW5nIGRlc2MpIHsKKworCQlTdHJpbmcgYnVmZmVyID0gbnVsbDsKKwkJTGlzdDxJU09Db2RlMj4gbGlzdCA9IG5ldyBBcnJheUxpc3Q8SVNPQ29kZTI+KCk7CisKKwkJQnVmZmVyZWRSZWFkZXIgcmVhZGVyID0gb3BlblJlYWRlcihpc29GaWxlKTsKKwkJdHJ5IHsKKworCQkJaWYgKHJlYWRlciAhPSBudWxsKSB7CisJCQkJd2hpbGUgKEVPRihidWZmZXIgPSByZWFkZXIucmVhZExpbmUoKSkgIT0gdHJ1ZSkgeworCQkJCQkvLyBVdGlsTG9nZ2VyLmxvZ0luZm9ybWF0aW9uKCJSZWFkIDogIiArIGJ1ZmZlcik7CisKKwkJCQkJLy8gSWYgdGhpcyBsaW5lIHN0YXJ0cyB3aXRoICIjIiwgdGhlbiBpZ25vcmUgaXQuCisJCQkJCWlmIChidWZmZXIudHJpbSgpLnN0YXJ0c1dpdGgoIiMiKSkgeyAvLyROT04tTkxTLTEkCisJCQkJCQljb250aW51ZTsKKwkJCQkJfQorCisJCQkJCS8vIE1ha2Ugc3VyZSB0aGF0IHdlIG1hcmsgYWxsIHVua25vd24gZGF0YS4KKwkJCQkJYnVmZmVyID0gYnVmZmVyLnJlcGxhY2UoIjs7IiwgIjtVTktOT1dOOyIpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKKworCQkJCQkvLyBNYWtlIGl0IGFsbCB1cHBlcmNhc2UKKwkJCQkJYnVmZmVyID0gYnVmZmVyLnRvVXBwZXJDYXNlKCk7CisKKwkJCQkJLy8gVG9rZW5pemUKKwkJCQkJU3RyaW5nVG9rZW5pemVyIHRva2VucyA9IG5ldyBTdHJpbmdUb2tlbml6ZXIoYnVmZmVyLCAiOyIpOyAvLyROT04tTkxTLTEkCisKKwkJCQkJLy8gR2V0IHRva2VucyAtPiBvcmRlciBtYXR0ZXJzIGhlcmUhCisJCQkJCVN0cmluZyBhbHBoYTIgPSB0b2tlbnMubmV4dFRva2VuKCkudHJpbSgpOworCQkJCQlTdHJpbmcgaWQgPSB0b2tlbnMubmV4dFRva2VuKCkudHJpbSgpOworCQkJCQlTdHJpbmcgbmFtZSA9IHRva2Vucy5uZXh0VG9rZW4oKS50cmltKCk7CisJCQkJCVN0cmluZyBpbmRleCA9IHRva2Vucy5uZXh0VG9rZW4oKS50cmltKCk7CisKKwkJCQkJLy8gSWYgY3VycmVudCBlbGVtZW50IGRvZXMgbm90IG1hdGNoIG91ciB0YXJnZXQsIHRoZW4gaWdub3JlCisJCQkJCS8vIGl0LgorCQkJCQlpZiAoZGVzYy5lcXVhbHMoYWxwaGEyKSA9PSBmYWxzZSkgeworCQkJCQkJY29udGludWU7CisJCQkJCX0KKworCQkJCQlJU09Db2RlMiBjb2RlID0gbmV3IElTT0NvZGUyKGFscGhhMiwgaWQsIG5hbWUsIGluZGV4KTsKKworCQkJCQkvLyBhZGQgbmV3IGNvZGUgdG8gb3VyIGxpc3QKKwkJCQkJbGlzdC5hZGQoY29kZSk7CisKKwkJCQkJYnVmZmVyID0gbnVsbDsKKwkJCQl9CisJCQkJcmVhZGVyLmNsb3NlKCk7CisJCQl9CisKKwkJfSBjYXRjaCAoSU9FeGNlcHRpb24gZSkgeworCQkJZS5wcmludFN0YWNrVHJhY2UoKTsKKwkJfQorCQlyZXR1cm4gbGlzdDsKKwl9CisKKwkvKioKKwkgKiBMb2FkIHNlbGVjdGl2ZWx5IHRoZSBJU08gMzE2Ni0yIGZpeCBkYXRhIGZvciB0aGUgY291bnRyeSBkZXNjcmliZWQgYnkKKwkgKiBkZXNjCisJICogCisJICogQHBhcmFtIGxpc3QKKwkgKiAgICAgICAgICAgIGxpc3QgY29udGFpbmluZyBJU08gMzE2Ni0yIGNvZGVzCisJICogQHBhcmFtIGNvZGUKKwkgKiAgICAgICAgICAgIElTTzMxNjYtMSBjb2RlIHdob3NlIG5hbWUgYXR0cmlidXRlIHdlIHdhbnQgdG8gbWF0Y2ggb3IKKwkgKiAgICAgICAgICAgIGZpbHRlci4KKwkgKiAKKwkgKiBAcmV0dXJuIGEgbGlzdCBob2xkaW5nIHRoZSBJU08gMzE2Ni0yIGNvZGVzIG1hdGNoZWQuCisJICogCisJICovCisJc3RhdGljIHByb3RlY3RlZCBMaXN0PElTT0NvZGUyPiBleHRyYWN0RGVzY3JpcHRvcnMoTGlzdCBsaXN0LCBJU09Db2RlMSBjb2RlKSB7CisKKwkJTGlzdDxJU09Db2RlMj4gZGVzY3JpcHRvcnMgPSBuZXcgQXJyYXlMaXN0PElTT0NvZGUyPigpOworCisJCUl0ZXJhdG9yIGl0ID0gbGlzdC5pdGVyYXRvcigpOworCisJCXdoaWxlIChpdC5oYXNOZXh0KCkpIHsKKworCQkJU3RyaW5nIGN1cnJlbnQgPSAoU3RyaW5nKSBpdC5uZXh0KCk7CisKKwkJCWlmIChjdXJyZW50LnRyaW0oKS5zdGFydHNXaXRoKCIjIikpIHsgLy8kTk9OLU5MUy0xJAorCQkJCWNvbnRpbnVlOworCQkJfQorCisJCQkvLyBUb2tlbml6ZQorCQkJU3RyaW5nVG9rZW5pemVyIHRva2VucyA9IG5ldyBTdHJpbmdUb2tlbml6ZXIoY3VycmVudCwgIjoiKTsgLy8kTk9OLU5MUy0xJAorCisJCQkvLyBHZXQgdG9rZW5zIC0+IG9yZGVyIG1hdHRlcnMgaGVyZSEKKwkJCVN0cmluZyBjb3VudHJ5ID0gdG9rZW5zLm5leHRUb2tlbigpLnRyaW0oKTsKKwkJCVN0cmluZyBuYW1lID0gdG9rZW5zLm5leHRUb2tlbigpLnRyaW0oKTsKKwkJCS8vIFN0cmluZyBhbGlhcyA9IHRva2Vucy5uZXh0VG9rZW4oKS50cmltKCk7CisJCQl0b2tlbnMubmV4dFRva2VuKCk7CisJCQlTdHJpbmcgaWQgPSB0b2tlbnMubmV4dFRva2VuKCkudHJpbSgpOworCisJCQkvLyBJZiBjdXJyZW50IGVsZW1lbnQgZG9lcyBub3QgbWF0Y2ggb3VyIHRhcmdldCwgdGhlbiBpZ25vcmUKKwkJCS8vIGl0LgorCQkJaWYgKGNvZGUuZ2V0TmFtZSgpLmVxdWFscyhjb3VudHJ5LnRvVXBwZXJDYXNlKCkpID09IGZhbHNlKSB7CisJCQkJY29udGludWU7CisJCQl9CisKKwkJCUlTT0NvZGUyIG5ld0NvZGUgPSBuZXcgSVNPQ29kZTIoY29kZS5nZXRBbHBoYTIoKSwgaWQsIG5hbWUsICIwIik7IC8vJE5PTi1OTFMtMSQKKworCQkJLy8gYWRkIG5ldyBjb2RlIHRvIG91ciBsaXN0CisJCQlkZXNjcmlwdG9ycy5hZGQobmV3Q29kZSk7CisJCX0KKworCQlyZXR1cm4gZGVzY3JpcHRvcnM7CisJfQorCisJLyoqCisJICogQ2hlY2sgdG8gc2VlIGlmIHRoaXMgSUQgaXMgYSByZWxldmFudCBVUkwgc291cmNlIG9yIG5vdC4gQXMgYW4gZXhhbXBsZSwKKwkgKiBmb3IgYXJlYSBkYXRhIHdlIG9ubHkgY2FyZSBhYm91dCBVUkxzIHdpdGggSUQgPSBESVZBIEZvciBQb3B1bGF0aW9uIGRhdGEsCisJICogd2UgY2FyZSBhYm91dCBVUkxzIHdpdGggSUQgPSBDSUEKKwkgKiAKKwkgKiBAcGFyYW0gdXJsU2V0CisJICogQHBhcmFtIGlkCisJICogCisJICogQHJldHVybiB3aGV0aGVyIGEgVVJMIGlzIHBhcnQgb2YgdGhpcyBVUkwgc2V0LgorCSAqIAorCSAqLworCXN0YXRpYyBwcm90ZWN0ZWQgYm9vbGVhbiBpc1NvdXJjZVVSTChTZXQ8U3RyaW5nPiB1cmxTZXQsIFN0cmluZyBpZCkgeworCisJCWlmICh1cmxTZXQuY29udGFpbnMoaWQpKSB7CisJCQlyZXR1cm4gdHJ1ZTsKKwkJfQorCisJCXJldHVybiBmYWxzZTsKKwl9CisKKwkvKioKKwkgKiBGaW5kIHRoZSBJU08gQ29kZSBmb3IgdGhpcyBjb3VudHJ5IGFuZCBjcmVhdGUgYW4gSVNPIG9iamVjdCBmb3IgaXQuCisJICogCisJICogQHBhcmFtIGNvdW50cnkKKwkgKiAgICAgICAgICAgIHRoZSBjb3VudHJ5IHRvIGxvb2sgZm9yLgorCSAqIAorCSAqIEBwYXJhbSBjb2RlTGlzdAorCSAqICAgICAgICAgICAgYSBsaXN0IHdpbGwgYWxsIHRoZSBJU08gMzE2Ni0xIGNvZGVzLgorCSAqIAorCSAqIEByZXR1cm4gdGhlIElTTyBvYmplY3QgKElTTyBpbmZvKSBmb3IgdGhpcyBjb3VudHJ5LgorCSAqLworCXN0YXRpYyBwcm90ZWN0ZWQgSVNPQ29kZTEgZ2V0SVNPQ29kZShTdHJpbmcgY291bnRyeSwgTGlzdCBjb2RlTGlzdCkgeworCisJCUl0ZXJhdG9yIGl0ID0gY29kZUxpc3QuaXRlcmF0b3IoKTsKKworCQlTdHJpbmcgY291bnRyeVN0ciA9IGNvdW50cnkudG9VcHBlckNhc2UoKTsKKworCQl3aGlsZSAoaXQuaGFzTmV4dCgpKSB7CisKKwkJCVN0cmluZyBjb2RlID0gKChTdHJpbmcpIGl0Lm5leHQoKSkudG9VcHBlckNhc2UoKTsKKworCQkJLy8gVG9rZW5pemUKKwkJCVN0cmluZ1Rva2VuaXplciB0b2tlbnMgPSBuZXcgU3RyaW5nVG9rZW5pemVyKGNvZGUsICIsIik7IC8vJE5PTi1OTFMtMSQKKworCQkJLy8gR2V0IHRva2VucyAtPiBvcmRlciBtYXR0ZXJzIGhlcmUhCisJCQlTdHJpbmcgbmFtZSA9IHRva2Vucy5uZXh0VG9rZW4oKS50cmltKCk7CisJCQlTdHJpbmcgbnVtZXJpY19jb2RlID0gdG9rZW5zLm5leHRUb2tlbigpLnRyaW0oKTsKKwkJCVN0cmluZyBhbHBoYTMgPSB0b2tlbnMubmV4dFRva2VuKCkudHJpbSgpOworCQkJU3RyaW5nIGFscGhhMiA9IHRva2Vucy5uZXh0VG9rZW4oKS50cmltKCk7CisKKwkJCWlmIChuYW1lLmVxdWFscyhjb3VudHJ5U3RyKSkgeworCQkJCXJldHVybiBuZXcgSVNPQ29kZTEobmFtZSwgbnVtZXJpY19jb2RlLCBhbHBoYTIsIGFscGhhMyk7CisJCQl9CisJCX0KKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogRXh0cmFjdCBhbGwgcmVsZXZhbnQgZGF0YS4gV2UgbmVlZCA6CisJICogCisJICogVGhlIDMgbGV0dGVyIElTTzMxNjYtMSBBbHBoYSAzIGNvZGUsIHRoZSBjb3VudHJ5IG5hbWUsIHRoZSBhZG1pbjEgbmFtZSwKKwkgKiB0aGUgYWRtaW4yIG5hbWUuCisJICogCisJICogQHBhcmFtIGJ1ZmZlcgorCSAqICAgICAgICAgICAgYSBidWZmZXIgb2YgZGl2YSBkYXRhCisJICogCisJICogQHJldHVybiBhIHN0cmluZyBhcnJheSBob2xkaW5nIHRoZSBleHRyYWN0ZWQgZGF0YQorCSAqIAorCSAqLworCXN0YXRpYyBwcm90ZWN0ZWQgU3RyaW5nW10gZXh0cmFjdChTdHJpbmcgYnVmZmVyKSB7CisKKwkJU3RyaW5nW10gZGF0YSA9IG5ldyBTdHJpbmdbNF07CisKKwkJLy8gVG9rZW5pemUKKwkJU3RyaW5nVG9rZW5pemVyIGNvZGUgPSBuZXcgU3RyaW5nVG9rZW5pemVyKGJ1ZmZlciwgIiwiKTsgLy8kTk9OLU5MUy0xJAorCQkvLyBVdGlsTG9nZ2VyLmxvZ0luZm9ybWF0aW9uKCJcdFx0UmVhZCA6ICIgKyBidWZmZXIpOworCQkvLyBVdGlsTG9nZ2VyLmxvZ0luZm9ybWF0aW9uKCJhbHBoYSAzIGNvZGUgOiAiICsgY29kZS5uZXh0VG9rZW4oKSk7CisJCS8vIFV0aWxMb2dnZXIubG9nSW5mb3JtYXRpb24oImNvdW50cnkgbmFtZSBjb2RlIDogIiArIGNvZGUubmV4dFRva2VuKCkpOworCQkvLyBVdGlsTG9nZ2VyLmxvZ0luZm9ybWF0aW9uKCJhZG1pbjEgY29kZSA6ICIgKyBjb2RlLm5leHRUb2tlbigpKTsKKwkJLy8gVXRpbExvZ2dlci5sb2dJbmZvcm1hdGlvbigiYWRtaW4yIGNvZGUgOiAiICsgY29kZS5uZXh0VG9rZW4oKSk7CisJCS8vIE9yZGVyIG1hdHRlcnMgaGVyZS4KKwkJZGF0YVtJU09EYXRhLkFMUEhBM19DT0RFXSA9IGNvZGUubmV4dFRva2VuKCkudHJpbSgpOworCQlkYXRhW0lTT0RhdGEuQ09VTlRSWV9OQU1FXSA9IGNvZGUubmV4dFRva2VuKCkudHJpbSgpOworCQlkYXRhW0lTT0RhdGEuQURNSU4xX05BTUVdID0gY29kZS5uZXh0VG9rZW4oKS50cmltKCk7CisJCWRhdGFbSVNPRGF0YS5BRE1JTjJfTkFNRV0gPSBjb2RlLm5leHRUb2tlbigpLnRyaW0oKTsKKwkJcmV0dXJuIGRhdGE7CisJfQorCisJLyoqCisJICogSW5kaWNhdGUgRW5kLU9mLUZpbGUKKwkgKiAKKwkgKiBAcGFyYW0gYnVmZmVyCisJICogICAgICAgICAgICBBIGJ1ZmZlciBvZiBkaXZhIGRhdGEKKwkgKiAKKwkgKiBAcmV0dXJuIFRydWUgaWYgd2UgaGF2ZSByZWFjaGVkIEVuZC1PZi1GaWxlCisJICovCisJc3RhdGljIHByb3RlY3RlZCBib29sZWFuIEVPRihTdHJpbmcgYnVmZmVyKSB7CisJCWlmIChidWZmZXIgPT0gbnVsbCB8fCBidWZmZXIubGVuZ3RoKCkgPT0gMCkKKwkJCXJldHVybiB0cnVlOworCQlyZXR1cm4gZmFsc2U7CisJfQorCisJLyoqCisJICogVGhpcyBtZXRob2QgZXh0cmFjdHMgdGhlIGFscGhhIHR3byBjb2RlIGZvciBhIHN0YXRlIGZyb20gdGhlIElTTzMxNjYtMgorCSAqIGRlc2NyaXB0b3IuIEluIG90aGVyIHdvcmRzLCBnaXZlbjogVVMtTlksIHRoaXMgbWV0aG9kIHNob3VsZCByZXR1cm46IE5ZCisJICogVXNlZnVsIGZvciBnZW5lcmF0aW5nIHRoZSBVU0Egb25seS4KKwkgKiAKKwkgKiBAcGFyYW0gZGVzY3JpcHRvcgorCSAqICAgICAgICAgICAgdGhlIElTTzMxNjYtMiBkZXNjcmlwdG9yLgorCSAqIAorCSAqIEByZXR1cm4gYW4gQWxwaGEgMiBjb2RlIGZvciBhIHN0YXRlLgorCSAqIAorCSAqLworCXN0YXRpYyBwcm90ZWN0ZWQgU3RyaW5nIGV4dHJhY3RBbHBoYTIoU3RyaW5nIGRlc2NyaXB0b3IpIHsKKworCQlmaW5hbCBpbnQgQUxQSEEyID0gMTsKKworCQlTdHJpbmdbXSB0b2tlbnMgPSBudWxsOworCisJCWlmIChkZXNjcmlwdG9yICE9IG51bGwpIHsKKworCQkJdG9rZW5zID0gZGVzY3JpcHRvci5zcGxpdCgiLSIpOyAvLyROT04tTkxTLTEkCisKKwkJfQorCisJCWlmICh0b2tlbnMubGVuZ3RoIDwgQUxQSEEyKSB7CisJCQlyZXR1cm4gbnVsbDsKKwkJfQorCisJCXJldHVybiB0b2tlbnNbQUxQSEEyXTsKKwl9CisJCisJLyoqCisJICogVGhpcyBtZXRob2QgZXh0cmFjdHMgdGhlIGFscGhhIG9uZSBjb2RlIGZvciBhIHN0YXRlIGZyb20gdGhlIElTTzMxNjYtMgorCSAqIGRlc2NyaXB0b3IuIEluIG90aGVyIHdvcmRzLCBnaXZlbjogVVMtTlksIHRoaXMgbWV0aG9kIHNob3VsZCByZXR1cm46IE5ZCisJICogVXNlZnVsIGZvciBnZW5lcmF0aW5nIHRoZSBVU0Egb25seS4KKwkgKiAKKwkgKiBAcGFyYW0gZGVzY3JpcHRvcgorCSAqICAgICAgICAgICAgdGhlIElTTzMxNjYtMiBkZXNjcmlwdG9yLgorCSAqIAorCSAqIEByZXR1cm4gYW4gQWxwaGEgMSBjb2RlIGZvciBjb3VudHJ5CisJICogCisJICovCisJc3RhdGljIHByb3RlY3RlZCBTdHJpbmcgZXh0cmFjdEFscGhhMShTdHJpbmcgZGVzY3JpcHRvcikgeworCisJCWZpbmFsIGludCBBTFBIQTEgPSAwOworCisJCVN0cmluZ1tdIHRva2VucyA9IG51bGw7CisKKwkJaWYgKGRlc2NyaXB0b3IgIT0gbnVsbCkgeworCisJCQl0b2tlbnMgPSBkZXNjcmlwdG9yLnNwbGl0KCItIik7IC8vJE5PTi1OTFMtMSQKKworCQl9CisKKwkJaWYgKHRva2Vucy5sZW5ndGggPCBBTFBIQTEpIHsKKwkJCXJldHVybiBudWxsOworCQl9CisKKwkJcmV0dXJuIHRva2Vuc1tBTFBIQTFdOworCX0KKworCS8qKgorCSAqIFRoaXMgbWV0aG9kIHNpbXBseSByZXR1cm5zIGEgc3RyaW5nIHdpdGggSUJNJ3MgY29weXJpZ2h0IHN0YXRlbWVudC4KKwkgKiAKKwkgKiBAcmV0dXJuIHRoZSBjb3B5cmlnaHQgc3RhdGVtZW50CisJICovCisJc3RhdGljIHByb3RlY3RlZCBTdHJpbmcgZ2V0Q29weXJpZ2h0KCkgeworCisJCVN0cmluZyBjb3B5cmlnaHQgPSAiIyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4iOyAvLyROT04tTkxTLTEkCisJCWNvcHlyaWdodCArPSAiIyAqIENvcHlyaWdodCAoYykgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy5cbiI7IC8vJE5PTi1OTFMtMSQKKwkJY29weXJpZ2h0ICs9ICIjICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFsc1xuIjsgLy8kTk9OLU5MUy0xJAorCQljb3B5cmlnaHQgKz0gIiMgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjBcbiI7IC8vJE5PTi1OTFMtMSQKKwkJY29weXJpZ2h0ICs9ICIjICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXRcbiI7IC8vJE5PTi1OTFMtMSQKKwkJY29weXJpZ2h0ICs9ICIjICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWxcbiI7IC8vJE5PTi1OTFMtMSQKKwkJY29weXJpZ2h0ICs9ICIjICpcbiI7IC8vJE5PTi1OTFMtMSQKKwkJY29weXJpZ2h0ICs9ICIjICogQ29udHJpYnV0b3JzOlxuIjsgLy8kTk9OLU5MUy0xJAorCQljb3B5cmlnaHQgKz0gIiMgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uXG4iOyAvLyROT04tTkxTLTEkCisJCWNvcHlyaWdodCArPSAiIyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cblxuIjsgLy8kTk9OLU5MUy0xJAorCisJCXJldHVybiBjb3B5cmlnaHQ7CisKKwl9CisKKwkvKioKKwkgKiBUaGlzIG1ldGhvZCBzaW1wbHkgcmV0dXJucyBhIHN0cmluZyB3aXRoIGEgY29weXJpZ2h0IHN0YXRlbWVudCBmb3IgdGhlCisJICogRXVyb3BlYW4gZGF0YSAoVW5pdGVkIE5hdGlvbnMpLgorCSAqIAorCSAqIEByZXR1cm4gdGhlIGxpY2Vuc2luZyBwb2xpY3kgZm9yIEV1cm9wZQorCSAqLworCXN0YXRpYyBwcm90ZWN0ZWQgU3RyaW5nIGdldFVOUG9saWN5KCkgeworCisJCVN0cmluZyBjb3B5cmlnaHQgPSAiIyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4iOyAvLyROT04tTkxTLTEkCisJCWNvcHlyaWdodCArPSAiIyAqIFRoZSBEYXRhIHNvdXJjZSBmb3IgRXVyb3BlIGlzIFwiVU5FU0NPICgxOTg3KSB0aHJvdWdoIFVORVAvR1JJRC1FdXJvcGUuXCJcbiI7IC8vJE5PTi1OTFMtMSQKKwkJY29weXJpZ2h0ICs9ICIjICogRm9yIG1vcmUgZGV0YWlscyBwbGVhc2UgdmlzaXQgOiBodHRwOi8vd3d3LmdyaWQudW5lcC5jaC9kYXRhL3BvbGljeS5waHBcbiI7IC8vJE5PTi1OTFMtMSQKKwkJY29weXJpZ2h0ICs9ICIjICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuXG4iOyAvLyROT04tTkxTLTEkCisKKwkJcmV0dXJuIGNvcHlyaWdodDsKKworCX0KKworCS8qKgorCSAqIFRoaXMgbWV0aG9kIHNpbXBseSByZXR1cm5zIGEgc3RyaW5nIHdpdGggYSBjb3B5cmlnaHQgc3RhdGVtZW50IGZvciB0aGUKKwkgKiBFdXJvcGVhbiBkYXRhIChVbml0ZWQgTmF0aW9ucykuCisJICogCisJICogQHJldHVybiB0aGUgbGljZW5zaW5nIHBvbGljeSBmb3IgRXVyb3BlCisJICovCisJc3RhdGljIHByb3RlY3RlZCBTdHJpbmcgZ2V0R01MVU5Qb2xpY3koKSB7CisKKwkJU3RyaW5nIGNvcHlyaWdodCA9ICI8IS0tIFxuIjsgLy8kTk9OLU5MUy0xJAorCQljb3B5cmlnaHQgKz0gIiMgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuIjsgLy8kTk9OLU5MUy0xJAorCQljb3B5cmlnaHQgKz0gIiMgKiBUaGUgRGF0YSBzb3VyY2UgZm9yIEV1cm9wZSBpcyBcIlVORVNDTyAoMTk4NykgdGhyb3VnaCBVTkVQL0dSSUQtRXVyb3BlLlwiXG4iOyAvLyROT04tTkxTLTEkCisJCWNvcHlyaWdodCArPSAiIyAqIEZvciBtb3JlIGRldGFpbHMgcGxlYXNlIHZpc2l0IDogaHR0cDovL3d3dy5ncmlkLnVuZXAuY2gvZGF0YS9wb2xpY3kucGhwXG4iOyAvLyROT04tTkxTLTEkCisJCWNvcHlyaWdodCArPSAiIyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8gLS0+XG5cbiI7IC8vJE5PTi1OTFMtMSQKKworCQlyZXR1cm4gY29weXJpZ2h0OworCisJfQorCisJLyoqCisJICogRmluZCBhIGRlc2NyaXB0b3IgZm9yIHRoZSBVU0EgYmFzZWQgb24gdGhlIGxvY2F0aW9uJ3MgbmFtZS4KKwkgKiAKKwkgKiBAcGFyYW0gY291bnR5IC0KKwkgKiAgICAgICAgICAgIHRoZSBjb3VudHkgZm9yIHdoaWNoIHdlIHdhbnQgdG8gZmluZCB0aGUgZGVzY3JpcHRvcgorCSAqIAorCSAqIEBwYXJhbSBzdGF0ZUlEIC0KKwkgKiAgICAgICAgICAgIHRoZSBJRCBmb3IgdGhlIHN0YXRlIGluIHdoaWNoIHRoaXMgY291bnR5IGlzIGxvY2F0ZWQKKwkgKiAKKwkgKiBAcGFyYW0gTGlzdCAtCisJICogICAgICAgICAgICBhIGxpc3QgY29udGFpbmluZyAoZGVzY3JpcHRvcjpsb2NhdGlvbikgdHVwbGVzCisJICogCisJICogQHJldHVybiBTdHJpbmcgLSB0aGUgZGVzY3JpcHRvcgorCSAqLworCXN0YXRpYyBwcm90ZWN0ZWQgU3RyaW5nIGdldFVTQURlc2NyaXB0b3IoU3RyaW5nIGNvdW50eSwgU3RyaW5nIHN0YXRlSUQsCisJCQlMaXN0IGxpc3QpIHsKKworCQlmaW5hbCBpbnQgREVTQ1JJUFRPUiA9IDA7CisKKwkJZmluYWwgaW50IExPQ0FUSU9OID0gMTsKKworCQlTdHJpbmdbXSBkYXRhID0gbnVsbDsKKworCQlJdGVyYXRvciBpdCA9IGxpc3QuaXRlcmF0b3IoKTsKKworCQlTdHJpbmcgY291bnR5U3RyID0gY291bnR5LnRvVXBwZXJDYXNlKCkudHJpbSgpOworCisJCXdoaWxlIChpdC5oYXNOZXh0KCkpIHsKKworCQkJU3RyaW5nIG1pbmlCdWZmZXIgPSAoU3RyaW5nKSBpdC5uZXh0KCk7CisKKwkJCWlmIChtaW5pQnVmZmVyLmNvbnRhaW5zKCIjIikpIHsgLy8kTk9OLU5MUy0xJAorCQkJCWNvbnRpbnVlOworCQkJfQorCisJCQlkYXRhID0gbWluaUJ1ZmZlci5zcGxpdCgiOiIpOyAvLyROT04tTkxTLTEkCisKKwkJCS8vIEdldCB0aGUgbG9jYXRpb24gbmFtZSBhbmQgcmVtb3ZlIGJsYW5rcworCQkJU3RyaW5nIGxvY2F0aW9uID0gZGF0YVtMT0NBVElPTl0udG9VcHBlckNhc2UoKS50cmltKCk7CisKKwkJCWxvY2F0aW9uID0gbG9jYXRpb24ucmVwbGFjZSgiXFx0IiwgIiIpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKKworCQkJaWYgKGNvdW50eVN0ci5lcXVhbHMobG9jYXRpb24pKSB7CisKKwkJCQkvLyBDaGVjayBib3RoIGVudGl0aWVzIGJlbG9uZyB0byBzYW1lIHN0YXRlCisJCQkJaWYgKGRhdGFbREVTQ1JJUFRPUl0uY29udGFpbnMoc3RhdGVJRCkgPT0gZmFsc2UpIHsKKwkJCQkJLy8gSWdub3JlIDogc2FtZSBuYW1lICwgYnV0IGRpZmZlcmVudCBsZXZlbAorCQkJCQljb250aW51ZTsKKwkJCQl9CisJCQkJcmV0dXJuIGRhdGFbREVTQ1JJUFRPUl07CisJCQl9CisKKwkJfSAvLyB3aGlsZQorCisJCS8vIE5vdCBmb3VuZAorCQlyZXR1cm4gIk5vdCBGb3VuZCI7IC8vJE5PTi1OTFMtMSQKKwl9CisKKwkvKioKKwkgKiBUaGlzIG1ldGhvZCBzaW1wbHkgcmV0dXJucyBhIHN0cmluZyBleHBsYWluaW5nIHdoYXQgYSBrZXkgaXMgaW4gb3VyCisJICogcHJvcGVydGllcyBmaWxlcy4KKwkgKiAKKwkgKiBAcmV0dXJuIHRoZSBleHBsYW5hdGlvbiBvZiB0aGUga2V5IGZvcm1hdCB3ZSB1c2UgaW4gb3VyIHByb3BlcnRpZXMgYW5kCisJICogICAgICAgICBHTUwgZmlsZXMuCisJICovCisJc3RhdGljIHByb3RlY3RlZCBTdHJpbmcgZ2V0S2V5Rm9ybWF0RXhwbGFuYXRpb24oKSB7CisKKwkJU3RyaW5nIGZvcm1hdCA9ICIjIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4iOyAvLyROT04tTkxTLTEkCisJCWZvcm1hdCArPSAiIyAqIEtleSBGb3JtYXQ6IFxuIjsgLy8kTk9OLU5MUy0xJAorCQlmb3JtYXQgKz0gIiMgKiBcbiI7IC8vJE5PTi1OTFMtMSQKKwkJZm9ybWF0ICs9ICIjICogXHQgRm9yIGxldmVsIDEgZGF0YSwgdGhlIGtleSBpcyB0aGUgSVNPMzE2Ni0yIGNvZGUuIEFuIElTTzMxNjYtMiBjb2RlIGlzIGNvbXBvc2VkIGFzIGZvbGxvd3M6IFxuIjsgLy8kTk9OLU5MUy0xJAorCQlmb3JtYXQgKz0gIiMgKiBhIHR3byBsZXR0ZXIgY291bnRyeSBjb2RlIGZvbGxvd2VkIGJ5IHVwIHRvIHRocmVlIGFscGhhbnVtZXJpYyBjaGFyYWN0ZXJzIGZvciB0aGUgbGV2ZWwgMSBhZG1pbmlzdHJhdGlvbi5cbiI7IC8vJE5PTi1OTFMtMSQKKwkJZm9ybWF0ICs9ICIjICpcbiI7IC8vJE5PTi1OTFMtMSQKKwkJZm9ybWF0ICs9ICIjICogXHQgRm9yIGxldmVsIDIgZGF0YSwgdGhlIGtleSBpcyB0aGUgSVNPMzE2Ni0yIGNvZGUgZm9sbG93ZWQgYnkgc2l4IGRpZ2l0cy4gVGhlIGxlZnRtb3N0IHR3byBkaWdpdHMgaW5kaWNhdGVcbiI7IC8vJE5PTi1OTFMtMSQKKwkJZm9ybWF0ICs9ICIjICogdGhlIGxldmVsIDEgY29udGFpbmVyIG9mIGEgbGV2ZWwgMiBhZG1pbmlzdHJhdGlvbiAoaS5lLiBDYWxpZm9ybmlhIGlzIGEgbGV2ZWwgMSBjb250YWluZXIgZm9yIE9yYW5nZSBDb3VudHlcbiI7IC8vJE5PTi1OTFMtMSQKKwkJZm9ybWF0ICs9ICIjICogd2hpY2ggaXMgYSBsZXZlbCAyIGFkbWluaXN0cmF0aW9uKS4gIFRoZSB0d28gZGlnaXRzIHdlcmUgdGFrZW4gZnJvbSBhIGxleGljb2dyYXBoaWMgc29ydGluZyBvZiBhbGwgdGhlXG4iOyAvLyROT04tTkxTLTEkCisJCWZvcm1hdCArPSAiIyAqIGxldmVsIDEgYWRtaW5pc3RyYXRpb25zIHdpdGhpbiBhIGNvdW50cnkuIFNpbWlsYXJseSwgdGhlIGZvdXIgbGVmdG1vc3QgZGlnaXRzIGluZGljYXRlIGEgbGV2ZWwgMiBhZG1pbmlzdHJhdGlvbi5cbiI7IC8vJE5PTi1OTFMtMSQKKwkJZm9ybWF0ICs9ICIjICogQWdhaW4sIHRoZXNlIGZvdXIgZGlnaXRzIGFyZSBhbiBpbmRleCBpbnRvIHRoZSBsZXhpY29ncmFwaGljIHNvcnRpbmcgb2YgYWxsIGxldmVsIDIgYWRtaW5pc3RyYXRpb25zIHdpdGhpbiBcbiI7IC8vJE5PTi1OTFMtMSQKKwkJZm9ybWF0ICs9ICIjICogYSBsZXZlbCAxIGFkbWluaXN0cmF0aW9uLiBcbiI7IC8vJE5PTi1OTFMtMSQKKwkJZm9ybWF0ICs9ICIjICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cblxuIjsgLy8kTk9OLU5MUy0xJAorCisJCXJldHVybiBmb3JtYXQ7CisJfQorCisJLyoqCisJICogVGhpcyBtZXRob2Qgc2ltcGx5IHJldHVybnMgYSBzdHJpbmcgZXhwbGFpbmluZyB3aGF0IGEga2V5IGlzIGluIG91ciBHTUwKKwkgKiBmaWxlcy4KKwkgKiAKKwkgKiBAcmV0dXJuIHRoZSBleHBsYW5hdGlvbiBvZiB0aGUga2V5IGZvcm1hdCB3ZSB1c2UgaW4gb3VyIHByb3BlcnRpZXMgYW5kCisJICogICAgICAgICBHTUwgZmlsZXMuCisJICovCisJc3RhdGljIHByb3RlY3RlZCBTdHJpbmcgZ2V0R01MS2V5Rm9ybWF0RXhwbGFuYXRpb24oKSB7CisKKwkJU3RyaW5nIGZvcm1hdCA9ICI8IS0tIFxuIjsgLy8kTk9OLU5MUy0xJAorCQlmb3JtYXQgKz0gIiMgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiI7IC8vJE5PTi1OTFMtMSQKKwkJZm9ybWF0ICs9ICIjICogS2V5IEZvcm1hdDogXG4iOyAvLyROT04tTkxTLTEkCisJCWZvcm1hdCArPSAiIyAqIFxuIjsgLy8kTk9OLU5MUy0xJAorCQlmb3JtYXQgKz0gIiMgKiBcdCBGb3IgbGV2ZWwgMSBkYXRhLCB0aGUga2V5IGlzIHRoZSBJU08zMTY2LTIgY29kZS4gQW4gSVNPMzE2Ni0yIGNvZGUgaXMgY29tcG9zZWQgYXMgZm9sbG93czogXG4iOyAvLyROT04tTkxTLTEkCisJCWZvcm1hdCArPSAiIyAqIGEgdHdvIGxldHRlciBjb3VudHJ5IGNvZGUgZm9sbG93ZWQgYnkgdXAgdG8gdGhyZWUgYWxwaGFudW1lcmljIGNoYXJhY3RlcnMgZm9yIHRoZSBsZXZlbCAxIGFkbWluaXN0cmF0aW9uLlxuIjsgLy8kTk9OLU5MUy0xJAorCQlmb3JtYXQgKz0gIiMgKlxuIjsgLy8kTk9OLU5MUy0xJAorCQlmb3JtYXQgKz0gIiMgKiBcdCBGb3IgbGV2ZWwgMiBkYXRhLCB0aGUga2V5IGlzIHRoZSBJU08zMTY2LTIgY29kZSBmb2xsb3dlZCBieSBzaXggZGlnaXRzLiBUaGUgbGVmdG1vc3QgdHdvIGRpZ2l0cyBpbmRpY2F0ZVxuIjsgLy8kTk9OLU5MUy0xJAorCQlmb3JtYXQgKz0gIiMgKiB0aGUgbGV2ZWwgMSBjb250YWluZXIgb2YgYSBsZXZlbCAyIGFkbWluaXN0cmF0aW9uIChpLmUuIENhbGlmb3JuaWEgaXMgYSBsZXZlbCAxIGNvbnRhaW5lciBmb3IgT3JhbmdlIENvdW50eVxuIjsgLy8kTk9OLU5MUy0xJAorCQlmb3JtYXQgKz0gIiMgKiB3aGljaCBpcyBhIGxldmVsIDIgYWRtaW5pc3RyYXRpb24pLiAgVGhlIHR3byBkaWdpdHMgd2VyZSB0YWtlbiBmcm9tIGEgbGV4aWNvZ3JhcGhpYyBzb3J0aW5nIG9mIGFsbCB0aGVcbiI7IC8vJE5PTi1OTFMtMSQKKwkJZm9ybWF0ICs9ICIjICogbGV2ZWwgMSBhZG1pbmlzdHJhdGlvbnMgd2l0aGluIGEgY291bnRyeS4gU2ltaWxhcmx5LCB0aGUgZm91ciBsZWZ0bW9zdCBkaWdpdHMgaW5kaWNhdGUgdGhlIGxldmVsIDIgYWRtaW5pc3RyYXRpb24uXG4iOyAvLyROT04tTkxTLTEkCisJCWZvcm1hdCArPSAiIyAqIEFnYWluLCB0aGVzZSBmb3VyIGRpZ2l0cyBhcmUgYW4gaW5kZXggaW50byB0aGUgbGV4aWNvZ3JhcGhpYyBzb3J0aW5nIG9mIGFsbCBsZXZlbCAyIGFkbWluaXN0cmF0aW9ucyB3aXRoaW4gXG4iOyAvLyROT04tTkxTLTEkCisJCWZvcm1hdCArPSAiIyAqIGEgbGV2ZWwgMSBhZG1pbmlzdHJhdGlvbi4gXG4iOyAvLyROT04tTkxTLTEkCisJCWZvcm1hdCArPSAiIyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogLS0+IFxuXG4iOyAvLyROT04tTkxTLTEkCisKKwkJcmV0dXJuIGZvcm1hdDsKKwl9CisKKwkvKioKKwkgKiBUaGlzIG1ldGhvZCBzaW1wbHkgcmV0dXJucyBhIHN0cmluZyB3aXRoIElCTSdzIGNvcHlyaWdodCBzdGF0ZW1lbnQKKwkgKiBjb21tZW50ZWQgb3V0IGZvciBHTUwgZmlsZXMuCisJICogCisJICogQHJldHVybiB0aGUgY29weXJpZ2h0IHN0YXRlbWVudAorCSAqLworCXN0YXRpYyBwcm90ZWN0ZWQgU3RyaW5nIGdlR01MQ29weXJpZ2h0KCkgeworCisJCVN0cmluZyBjb3B5cmlnaHQgPSAiPCEtLSBcbiI7IC8vJE5PTi1OTFMtMSQKKwkJY29weXJpZ2h0ICs9ICIjICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuIjsgLy8kTk9OLU5MUy0xJAorCQljb3B5cmlnaHQgKz0gIiMgKiBDb3B5cmlnaHQgKGMpIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuXG4iOyAvLyROT04tTkxTLTEkCisJCWNvcHlyaWdodCArPSAiIyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHNcbiI7IC8vJE5PTi1OTFMtMSQKKwkJY29weXJpZ2h0ICs9ICIjICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wXG4iOyAvLyROT04tTkxTLTEkCisJCWNvcHlyaWdodCArPSAiIyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0XG4iOyAvLyROT04tTkxTLTEkCisJCWNvcHlyaWdodCArPSAiIyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sXG4iOyAvLyROT04tTkxTLTEkCisJCWNvcHlyaWdodCArPSAiIyAqXG4iOyAvLyROT04tTkxTLTEkCisJCWNvcHlyaWdodCArPSAiIyAqIENvbnRyaWJ1dG9yczpcbiI7IC8vJE5PTi1OTFMtMSQKKwkJY29weXJpZ2h0ICs9ICIjICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvblxuIjsgLy8kTk9OLU5MUy0xJAorCQljb3B5cmlnaHQgKz0gIiMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAtLT4gXG4iOyAvLyROT04tTkxTLTEkCQkKKworCQlyZXR1cm4gY29weXJpZ2h0OworCisJfQorCisJLyoqCisJICogCisJICogRmluZCB0aGUgY291bnRyeSBuYW1lIGJ5IGRvaW5nIGEgcmV2ZXJzZSBsb29rdXAgYmFzZWQgb24gdGhlIGFscGhhIDIKKwkgKiBjb2RlcworCSAqIAorCSAqIEBwYXJhbSBhbHBoYTIKKwkgKiBAcGFyYW0gY29kZUxpc3QKKwkgKiAKKwkgKiBAcmV0dXJuIGNvdW50cnkgbmFtZQorCSAqLworCXN0YXRpYyBwcm90ZWN0ZWQgU3RyaW5nIGdldENvdW50cnlOYW1lKFN0cmluZyBhbHBoYTJDb2RlLCBMaXN0IGNvZGVMaXN0KSB7CisKKwkJSXRlcmF0b3IgaXQgPSBjb2RlTGlzdC5pdGVyYXRvcigpOworCisJCXdoaWxlIChpdC5oYXNOZXh0KCkpIHsKKworCQkJU3RyaW5nIGNvZGUgPSAoKFN0cmluZykgaXQubmV4dCgpKS50b1VwcGVyQ2FzZSgpOworCisJCQkvLyBUb2tlbml6ZQorCQkJU3RyaW5nVG9rZW5pemVyIHRva2VucyA9IG5ldyBTdHJpbmdUb2tlbml6ZXIoY29kZSwgIiwiKTsgLy8kTk9OLU5MUy0xJAorCisJCQkvLyBHZXQgdG9rZW5zIC0+IG9yZGVyIG1hdHRlcnMgaGVyZSEKKwkJCVN0cmluZyBuYW1lID0gdG9rZW5zLm5leHRUb2tlbigpLnRyaW0oKTsKKwkJCXRva2Vucy5uZXh0VG9rZW4oKTsgLy8gdGhlIG51bWVyaWMgY29kZSwgaWdub3JlLgorCQkJdG9rZW5zLm5leHRUb2tlbigpOyAvLyB0aGUgYWxwaGEzIGNvZGUsIGlnbm9yZS4KKwkJCVN0cmluZyBhbHBoYTIgPSB0b2tlbnMubmV4dFRva2VuKCkudHJpbSgpLnRvVXBwZXJDYXNlKCk7CisKKwkJCWlmIChhbHBoYTIuZXF1YWxzKGFscGhhMkNvZGUudG9VcHBlckNhc2UoKSkpIHsKKwkJCQlyZXR1cm4gbmFtZTsKKwkJCX0KKwkJfQorCQkvLyBOb3QgZm91bmQuCisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIAorCSAqIEZpbmQgdGhlIGNvdW50cnkgbmFtZSBieSBkb2luZyBhIHJldmVyc2UgbG9va3VwIGJhc2VkIG9uIHRoZSBudW1lcmljIGNvZGUKKwkgKiBmb3IgYSBnaXZlbiBFdXJvcGVhbiBsb2NhdGlvbgorCSAqIAorCSAqIEBwYXJhbSBudW1JRAorCSAqICAgICAgICAgICAgdGhlIG51bWVyaWNhbCBJRCBmb3IgYSBsb2NhdGlvbiBpbiBFdXJvcGUKKwkgKiBAcGFyYW0gY29kZUxpc3QKKwkgKiAKKwkgKiBAcmV0dXJuIGNvdW50cnkgbmFtZQorCSAqLworCXN0YXRpYyBwcm90ZWN0ZWQgU3RyaW5nIGdldEV1cm9wZWFuTG9jYXRpb24oU3RyaW5nIG51bUlELCBMaXN0IGNvZGVMaXN0KSB7CisKKwkJZmluYWwgaW50IE5VTUNPREUgPSAwOworCQlmaW5hbCBpbnQgTE9DQVRJT05fTkFNRSA9IDE7CisKKwkJSXRlcmF0b3IgaXQgPSBjb2RlTGlzdC5pdGVyYXRvcigpOworCisJCXdoaWxlIChpdC5oYXNOZXh0KCkpIHsKKworCQkJU3RyaW5nIGxvYyA9ICgoU3RyaW5nKSBpdC5uZXh0KCkpOworCQkJbG9jID0gbG9jLnJlcGxhY2UoJ1x0JywgJyAnKTsKKwkJCVN0cmluZ1tdIHRva2VucyA9IGxvYy5zcGxpdCgiOiIpOyAvLyROT04tTkxTLTEkCisJCQlTdHJpbmcgY29kZSA9IHRva2Vuc1tOVU1DT0RFXS50cmltKCk7CisJCQlTdHJpbmcgbmFtZSA9IHRva2Vuc1tMT0NBVElPTl9OQU1FXTsKKwkJCWlmIChudW1JRC5lcXVhbHMoY29kZSkpIHsKKwkJCQlyZXR1cm4gbmFtZTsKKwkJCX0KKwkJfQorCQkvLyBOb3QgZm91bmQuCisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIERvIGEgbG9va3VwIGluIHRoZSBsZXgyIGxpc3QgZm9yIHRoZSBjdXJyZW50IGVudHJ5LgorCSAqIAorCSAqIEBwYXJhbSBsaXN0CisJICogICAgICAgICAgICBhIGxpc3Qgb2YgbGV4MiBvYmplY3RzLgorCSAqIEBwYXJhbSBhZG1pbjEKKwkgKiAgICAgICAgICAgIGFuIGFkbWluaXN0cmF0aXZlIDEgbG9jYXRpb24uCisJICogQHBhcmFtIGFkbWluMgorCSAqICAgICAgICAgICAgYW4gYWRtaW5pc3RyYXRpdmUgMiBsb2NhdGlvbi4KKwkgKiAKKwkgKiBAcmV0dXJuIGEgbGV4MiBvYmplY3QgZm9yIHRoZSBjdXJyZW50IGxvY2F0aW9uLgorCSAqIAorCSAqLworCXN0YXRpYyBwcm90ZWN0ZWQgTGV4Mk9iaiBsZXgyTG9va3VwKExpc3Q8TGV4Mk9iaj4gbGlzdCwgU3RyaW5nIGFkbWluMSwKKwkJCVN0cmluZyBhZG1pbjIpIHsKKworCQlMZXgyT2JqIGxleE9iaiA9IG51bGw7CisJCUl0ZXJhdG9yIGl0ID0gbGlzdC5pdGVyYXRvcigpOworCisJCXdoaWxlIChpdC5oYXNOZXh0KCkpIHsKKwkJCWxleE9iaiA9IChMZXgyT2JqKSBpdC5uZXh0KCk7CisJCQlpZiAoYWRtaW4yLnRvVXBwZXJDYXNlKCkuZXF1YWxzKGxleE9iai5nZXRBZG1pbjIoKSkKKwkJCQkJJiYgYWRtaW4xLnRvVXBwZXJDYXNlKCkuZXF1YWxzKGxleE9iai5nZXRBZG1pbjEoKSkpIHsKKwkJCQlyZXR1cm4gbGV4T2JqOworCQkJfQorCQl9CisJCS8vIE5vdCBmb3VuZC4KKwkJLy8gU3lzdGVtLm91dAorCQkvLyAucHJpbnRsbigibGV4Mkxvb2t1cCA6IGVudHJ5IG5vdCBmb3VuZC4gQ3JlYXRpbmcgZHVtbXkgbGV4Mk9iamVjdCBmb3IKKwkJLy8gOiAiCisJCS8vICsgYWRtaW4yKTsKKwkJcmV0dXJuIG5ldyBMZXgyT2JqKCIwIiwgIkFBIiwgIkFBQSIsICJEVU1NWSIsICJGT08iLCAiRk9PIik7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJCAvLyROT04tTkxTLTMkIC8vJE5PTi1OTFMtNCQgLy8kTk9OLU5MUy01JCAvLyROT04tTkxTLTYkCisJfQorCisJLyoqCisJICogRG8gYSBsb29rdXAgaW4gdGhlIGxleDEgbGlzdCBmb3IgdGhlIGN1cnJlbnQgZW50cnkuICoKKwkgKiAKKwkgKiBAcGFyYW0gbGlzdAorCSAqICAgICAgICAgICAgYSBsaXN0IG9mIGxleDEgb2JqZWN0cy4KKwkgKiBAcGFyYW0gYWRtaW4xCisJICogICAgICAgICAgICBhbiBhZG1pbmlzdHJhdGl2ZSAxIGxvY2F0aW9uLgorCSAqIAorCSAqIEByZXR1cm4gYSBsZXgxIG9iamVjdCBmb3IgdGhlIGN1cnJlbnQgbG9jYXRpb24uCisJICogCisJICovCisJc3RhdGljIHByb3RlY3RlZCBMZXgxT2JqIGxleDFMb29rdXAoTGlzdDxMZXgxT2JqPiBsaXN0LCBTdHJpbmcgZW50cnkpIHsKKworCQlpZiAobGlzdCA9PSBudWxsKSB7CisJCQlyZXR1cm4gbnVsbDsKKwkJfQorCisJCUl0ZXJhdG9yIGl0ID0gbGlzdC5pdGVyYXRvcigpOworCQlTdHJpbmdbXSBjb21wYXJlID0gbnVsbDsKKwkJTGV4MU9iaiBsZXhPYmogPSBudWxsOworCisJCXdoaWxlIChpdC5oYXNOZXh0KCkpIHsKKworCQkJbGV4T2JqID0gKExleDFPYmopIGl0Lm5leHQoKTsKKworCQkJaWYgKGxleE9iai5nZXRBZG1pbjEoKS5jb250YWlucygiWyIpKSB7IC8vJE5PTi1OTFMtMSQKKworCQkJCVN0cmluZyB0ZW1wSG9sZGVyID0gbGV4T2JqLmdldEFkbWluMSgpLnJlcGxhY2UoIl0iLCAiIik7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAorCisJCQkJLy8gVG9rZW5pemUKKwkJCQlTdHJpbmdUb2tlbml6ZXIgdG9rZW5zID0gbmV3IFN0cmluZ1Rva2VuaXplcih0ZW1wSG9sZGVyLCAiWyIpOyAvLyROT04tTkxTLTEkCisKKwkJCQkvLyBHZXQgdG9rZW5zIC0+IG9yZGVyIG1hdHRlcnMgaGVyZSEKKwkJCQljb21wYXJlID0gbmV3IFN0cmluZ1t0b2tlbnMuY291bnRUb2tlbnMoKV07CisJCQkJaW50IGkgPSAwOworCQkJCXdoaWxlICh0b2tlbnMuaGFzTW9yZVRva2VucygpKSB7CisJCQkJCWNvbXBhcmVbaSsrXSA9IHRva2Vucy5uZXh0VG9rZW4oKS50b1VwcGVyQ2FzZSgpLnRyaW0oKTsKKwkJCQl9CisJCQl9CisKKwkJCWlmIChjb21wYXJlICE9IG51bGwpIHsKKwkJCQkvLyBXZSBoYXZlIG1vcmUgdGhhbiBvbmUgZW50cnkgdG8gY29tcGFyZSB0by4gRXgKKwkJCQkvLyAxODpBRi1LTlI6QUY6S09OQVIgW0tVTkFSXQorCQkJCS8vIFdlIGhhdmUgdG8gY29tcGFyZSBpbmRpdmlkdWFsbHkgYWdhaW5zdCBLT05BUiBhbmQgS1VOQVIKKwkJCQkvLyBBbHNvLCByZW1vdmUgaHlwaGVucy4gRXguIGZvciBBbGdlcmlhOiBUaXppLU91em91IHNob3VsZCBiZQorCQkJCS8vIFRpemkgT3V6b3UKKwkJCQlmb3IgKGludCBpID0gMDsgaSA8IGNvbXBhcmUubGVuZ3RoOyBpKyspIHsKKwkJCQkJaWYgKGVudHJ5LnRvVXBwZXJDYXNlKCkucmVwbGFjZSgiLSIsICIgIikgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCisJCQkJCQkJLmVxdWFscyhjb21wYXJlW2ldKSkgeworCQkJCQkJcmV0dXJuIGxleE9iajsKKwkJCQkJfQorCQkJCX0KKwkJCX0KKworCQkJaWYgKGVudHJ5LnRvVXBwZXJDYXNlKCkucmVwbGFjZSgiLSIsICIgIikgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCisJCQkJCS5lcXVhbHMobGV4T2JqLmdldEFkbWluMSgpKSkgeworCQkJCXJldHVybiBsZXhPYmo7CisJCQl9CisJCX0KKwkJLy8gTm90IGZvdW5kLgorCQkvLyBTeXN0ZW0ub3V0CisJCS8vIC5wcmludGxuKCJsZXgxTG9va3VwIDogZW50cnkgbm90IGZvdW5kLiBDcmVhdGluZyBkdW1teSBsZXgxT2JqZWN0IGZvcgorCQkvLyA6ICIKKwkJLy8gKyBlbnRyeSk7CisJCXJldHVybiBuZXcgTGV4MU9iaigiMCIsIGxleE9iai5nZXRBbHBoYTIoKSArICItVU5LIiwgIkFBIiwgIkZPTyIpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQgLy8kTk9OLU5MUy0zJCAvLyROT04tTkxTLTQkCisJfQorCisJLyoqCisJICogCisJICogVGhpcyBtZXRob2QgdGFrZXMgYSBMaXN0PFN0cmluZz4gYW5kIHByb2R1Y2VzIGEgbGlzdCBvZiBMZXgxT2JqZWN0cworCSAqIAorCSAqIEBwYXJhbSBsaXN0CisJICogICAgICAgICAgICBhIGxpc3Qgb2YgbG9jYXRpb25zCisJICogCisJICogQHJldHVybiBhIGxpc3Qgb2YgbGV4MSBvYmplY3RzLgorCSAqLworCXN0YXRpYyBwcm90ZWN0ZWQgTGlzdDxMZXgxT2JqPiBjcmVhdGVMZXgxTGlzdChMaXN0PFN0cmluZz4gbGlzdCkgeworCisJCVN0cmluZ1tdIGxleDFEYXRhID0gbnVsbDsKKwkJTGlzdDxMZXgxT2JqPiBsZXgxTGlzdCA9IG51bGw7CisKKwkJaWYgKGxpc3QgIT0gbnVsbCkgeworCisJCQlJdGVyYXRvciBpdCA9IGxpc3QuaXRlcmF0b3IoKTsKKwkJCXdoaWxlIChpdC5oYXNOZXh0KCkpIHsKKworCQkJCS8vIEdldCB0aGUgY29udGVudAorCQkJCVN0cmluZyBjb250ZW50ID0gKFN0cmluZykgaXQubmV4dCgpOworCisJCQkJLy8gVG9rZW5pemUgdGhlIHN0cmluZworCQkJCVN0cmluZ1Rva2VuaXplciBjb2RlID0gbmV3IFN0cmluZ1Rva2VuaXplcihjb250ZW50LCAiOiIpOyAvLyROT04tTkxTLTEkCisKKwkJCQkvLyBBcmUgd2UgZGVhbGluZyB3aXRoIGEgbGV4MSBvYmplY3Qgb3Igd2l0aCBhIGxleDIgb2JqZWN0ID8KKwkJCQlpZiAoY29kZS5jb3VudFRva2VucygpID09IExleDFEYXRhLkNPTlNUQU5UUykgeworCisJCQkJCWlmIChsZXgxRGF0YSA9PSBudWxsKSB7CisJCQkJCQlsZXgxRGF0YSA9IG5ldyBTdHJpbmdbTGV4MURhdGEuQ09OU1RBTlRTXTsKKwkJCQkJfQorCisJCQkJCS8vIE9yZGVyIG1hdHRlcnMgaGVyZS4KKwkJCQkJbGV4MURhdGFbTGV4MURhdGEuSU5ERVhdID0gY29kZS5uZXh0VG9rZW4oKS50cmltKCk7CisJCQkJCWxleDFEYXRhW0xleDFEYXRhLkRFU0NdID0gY29kZS5uZXh0VG9rZW4oKS50cmltKCk7CisJCQkJCWxleDFEYXRhW0xleDFEYXRhLkFMUEhBMl0gPSBjb2RlLm5leHRUb2tlbigpLnRyaW0oKTsKKwkJCQkJbGV4MURhdGFbTGV4MURhdGEuQURNSU4xXSA9IGNvZGUubmV4dFRva2VuKCkudHJpbSgpOworCisJCQkJCS8vIE5vdyBjcmVhdGUgYSBsZXggMSBvYmplY3QKKwkJCQkJTGV4MU9iaiBsZXhPYmogPSBuZXcgTGV4MU9iaihsZXgxRGF0YVtMZXgxRGF0YS5JTkRFWF0sCisJCQkJCQkJbGV4MURhdGFbTGV4MURhdGEuREVTQ10sIGxleDFEYXRhW0xleDFEYXRhLkFMUEhBMl0sCisJCQkJCQkJbGV4MURhdGFbTGV4MURhdGEuQURNSU4xXSk7CisKKwkJCQkJaWYgKGxleDFMaXN0ID09IG51bGwpIHsKKwkJCQkJCWxleDFMaXN0ID0gbmV3IEFycmF5TGlzdDxMZXgxT2JqPigpOworCQkJCQl9CisJCQkJCWxleDFMaXN0LmFkZChsZXhPYmopOworCisJCQkJfSBlbHNlIHsKKwkJCQkJU3lzdGVtLm91dAorCQkJCQkJCS5wcmludGxuKCJNYWxmb3JtZWQgbGV4IGRhdGEgb2JqZWN0LiBUb3RhbCBkYXRhIGVsZW1lbnRzID0gIiAvLyROT04tTkxTLTEkCisJCQkJCQkJCQkrIGNvZGUuY291bnRUb2tlbnMoKSArICIuIEV4cGVjdGVkIDogIiAvLyROT04tTkxTLTEkCisJCQkJCQkJCQkrIExleDFEYXRhLkNPTlNUQU5UUyk7CisJCQkJfQorCisJCQl9IC8vIHdoaWxlCisKKwkJfSAvLyBpZgorCisJCXJldHVybiBsZXgxTGlzdDsKKwl9CisKKwkvKioKKwkgKiAKKwkgKiBUaGlzIG1ldGhvZCB0YWtlcyBhIExpc3Q8U3RyaW5nPiBhbmQgcHJvZHVjZXMgYSBsaXN0IG9mIExleDJPYmplY3RzLgorCSAqIAorCSAqIEBwYXJhbSBsaXN0CisJICogICAgICAgICAgICBhIGxpc3Qgb2YgbG9jYXRpb25zLgorCSAqIAorCSAqIEByZXR1cm4gYSBsaXN0IG9mIGxleDIgb2JqZWN0cy4KKwkgKi8KKwlzdGF0aWMgcHJvdGVjdGVkIExpc3Q8TGV4Mk9iaj4gY3JlYXRlTGV4Mkxpc3QoTGlzdDxTdHJpbmc+IGxpc3QpIHsKKworCQlTdHJpbmdbXSBsZXgyRGF0YSA9IG51bGw7CisJCUxpc3Q8TGV4Mk9iaj4gbGV4Mkxpc3QgPSBudWxsOworCisJCWlmIChsaXN0ICE9IG51bGwpIHsKKworCQkJSXRlcmF0b3IgaXQgPSBsaXN0Lml0ZXJhdG9yKCk7CisKKwkJCXdoaWxlIChpdC5oYXNOZXh0KCkpIHsKKworCQkJCS8vIEdldCB0aGUgY29udGVudAorCQkJCVN0cmluZyBjb250ZW50ID0gKFN0cmluZykgaXQubmV4dCgpOworCisJCQkJLy8gVG9rZW5pemUgdGhlIHN0cmluZworCQkJCVN0cmluZ1Rva2VuaXplciBjb2RlID0gbmV3IFN0cmluZ1Rva2VuaXplcihjb250ZW50LCAiOiIpOyAvLyROT04tTkxTLTEkCisKKwkJCQkvLyBBcmUgd2UgZGVhbGluZyB3aXRoIGEgbGV4MSBvYmplY3Qgb3Igd2l0aCBhIGxleDIgb2JqZWN0ID8KKwkJCQlpZiAoY29kZS5jb3VudFRva2VucygpID09IExleDJEYXRhLkNPTlNUQU5UUykgeworCisJCQkJCWlmIChjb2RlLmNvdW50VG9rZW5zKCkgPT0gTGV4MkRhdGEuQ09OU1RBTlRTKSB7CisKKwkJCQkJCWlmIChsZXgyRGF0YSA9PSBudWxsKSB7CisJCQkJCQkJbGV4MkRhdGEgPSBuZXcgU3RyaW5nW0xleDJEYXRhLkNPTlNUQU5UU107CisJCQkJCQl9CisKKwkJCQkJCS8vIE9yZGVyIG1hdHRlcnMgaGVyZS4KKwkJCQkJCWxleDJEYXRhW0xleDJEYXRhLklOREVYXSA9IGNvZGUubmV4dFRva2VuKCkudHJpbSgpOworCQkJCQkJbGV4MkRhdGFbTGV4MkRhdGEuQUxQSEEyXSA9IGNvZGUubmV4dFRva2VuKCkudHJpbSgpOworCQkJCQkJbGV4MkRhdGFbTGV4MkRhdGEuQUxQSEEzXSA9IGNvZGUubmV4dFRva2VuKCkudHJpbSgpOworCQkJCQkJbGV4MkRhdGFbTGV4MkRhdGEuQ09VTlRSWV0gPSBjb2RlLm5leHRUb2tlbigpLnRyaW0oKTsKKwkJCQkJCWxleDJEYXRhW0xleDJEYXRhLkFETUlOMV0gPSBjb2RlLm5leHRUb2tlbigpLnRyaW0oKTsKKwkJCQkJCWxleDJEYXRhW0xleDJEYXRhLkFETUlOMl0gPSBjb2RlLm5leHRUb2tlbigpLnRyaW0oKTsKKworCQkJCQkJLy8gTm93IGNyZWF0ZSBhIGxleCAyIG9iamVjdAorCQkJCQkJTGV4Mk9iaiBsZXhPYmogPSBuZXcgTGV4Mk9iaihsZXgyRGF0YVtMZXgyRGF0YS5JTkRFWF0sCisJCQkJCQkJCWxleDJEYXRhW0xleDJEYXRhLkFMUEhBMl0sCisJCQkJCQkJCWxleDJEYXRhW0xleDJEYXRhLkFMUEhBM10sCisJCQkJCQkJCWxleDJEYXRhW0xleDJEYXRhLkNPVU5UUlldLAorCQkJCQkJCQlsZXgyRGF0YVtMZXgyRGF0YS5BRE1JTjFdLAorCQkJCQkJCQlsZXgyRGF0YVtMZXgyRGF0YS5BRE1JTjJdKTsKKworCQkJCQkJLy8gQ3JlYXRlIHRoZSBsZXggMiBsaXN0IGlmIG5lY2Vzc2FyeQorCQkJCQkJaWYgKGxleDJMaXN0ID09IG51bGwpIHsKKwkJCQkJCQlsZXgyTGlzdCA9IG5ldyBBcnJheUxpc3Q8TGV4Mk9iaj4oKTsKKwkJCQkJCX0KKworCQkJCQkJLy8gQWRkIGl0IHRvIG91ciBsaXN0CisJCQkJCQlsZXgyTGlzdC5hZGQobGV4T2JqKTsKKworCQkJCQl9IGVsc2UgeworCQkJCQkJU3lzdGVtLm91dAorCQkJCQkJCQkucHJpbnRsbigiTWFsZm9ybWVkIGxleCBkYXRhIG9iamVjdC4gVG90YWwgZGF0YSBlbGVtZW50cyA9ICIgLy8kTk9OLU5MUy0xJAorCQkJCQkJCQkJCSsgY29kZS5jb3VudFRva2VucygpICsgIi4gRXhwZWN0ZWQgOiAiIC8vJE5PTi1OTFMtMSQKKwkJCQkJCQkJCQkrIExleDFEYXRhLkNPTlNUQU5UUyk7CisJCQkJCX0KKworCQkJCX0gLy8gaWYKKworCQkJfSAvLyB3aGlsZQorCisJCX0gLy8gaWYKKworCQlyZXR1cm4gbGV4Mkxpc3Q7CisJfQorCisJLyoqCisJICogZmluZHMgdGhlIGFkbWluIGxldmVsIG9mIHRoZSBpZCBieSBjb3VudGluZyAnLScgY2hhcmFjdGVycworCSAqIEBwYXJhbSBpZAorCSAqIEByZXR1cm4KKwkgKi8KKwlAU3VwcHJlc3NXYXJuaW5ncygibmxzIikKKwlwdWJsaWMgc3RhdGljIGludCBnZXRMZXZlbChTdHJpbmcgaWQpIHsKKwkJCisJCWlmKGlkLmluZGV4T2YoIi0iKSA9PS0xKSByZXR1cm4gMDsKKwkJCisJCWludCBpZHgxID0gaWQuaW5kZXhPZigiLSIpOworCQlTdHJpbmcgZmlyc3RQYXJ0ID0gaWQuc3Vic3RyaW5nKGlkeDErMSxpZC5sZW5ndGgoKSk7CisJCWlmKGZpcnN0UGFydC5pbmRleE9mKCItIikgPT0tMSkgcmV0dXJuIDE7CisJCQorCQlpbnQgaWR4MiA9IGZpcnN0UGFydC5pbmRleE9mKCItIik7CisJCVN0cmluZyBzZWNvbmRQYXJ0ID0gZmlyc3RQYXJ0LnN1YnN0cmluZyhpZHgyKzEsZmlyc3RQYXJ0Lmxlbmd0aCgpKTsKKwkJaWYoc2Vjb25kUGFydC5pbmRleE9mKCItIikgPT0tMSkgcmV0dXJuIDI7CisJCQorCisJCWludCBpZHgzID0gc2Vjb25kUGFydC5pbmRleE9mKCItIik7CisJCVN0cmluZyB0aGlyZFBhcnQgPSBzZWNvbmRQYXJ0LnN1YnN0cmluZyhpZHgzKzEsc2Vjb25kUGFydC5sZW5ndGgoKSk7CisJCWlmKHRoaXJkUGFydC5pbmRleE9mKCItIikgPT0tMSkgeworCQkJcmV0dXJuIDM7CisJCX0gCisJCS8vIFRPRE8gc2hvdWxkIGdlbmVyYWxpemUgdGhpcy4KKwkJcmV0dXJuIDQ7IC8vIHR3byBsZXZlbHMgcGFzdCB3aGVyZSB3ZSBub3cgaGF2ZSBkYXRhLi4uLgorCQkKKwl9CisJCisJLyoqCisJICogUmV0dXJuIHRoZSBzdHJpbmcgcmVzdWx0aW5nIGZyb20gInVwcGluZyIgdGhlIGxldmVsIG9mCisJICogdGhlIHBhc3NlZCBpbiBzdGVtIGlkLiBTbyBmb3IgaW5zdGFuY2UsIGEgY291bnR5IElECisJICogd291bGQgcmV0dXJuIHRoZSBzdGF0ZSBpZCBmb3IgdGhlIGNvdW50eSBldGMuCisJICogCisJICogQHBhcmFtIGlkIFRoZSBpZAorCSAqIEByZXR1cm4gVGhlIGNvbnZlcnRlZCBzdGVtIGlkCisJICovCisJcHVibGljIHN0YXRpYyBTdHJpbmcgdXBDb2RlKFN0cmluZyBpZCkgeworCQkKKwkJaW50IGxldmVsID0gZ2V0TGV2ZWwoaWQpOworCQlpbnQgdGFyZ2V0TGV2ZWwgPSBsZXZlbCAtMTsKKwkJaWYodGFyZ2V0TGV2ZWwgPT0gLTEpIHJldHVybiBudWxsOworCQlTdHJpbmdCdWlsZGVyIHJlcyA9IG5ldyBTdHJpbmdCdWlsZGVyKCk7CisJCWludCBsdmwgPSAwOworCQlmb3IoaW50IGk9MDtpPGlkLmxlbmd0aCgpOysraSkgeworCQkJY2hhciBjID0gaWQuY2hhckF0KGkpOworCQkJaWYoYyA9PSAnLScpIHsKKwkJCQlpZihsdmwgPT0gdGFyZ2V0TGV2ZWwpIHJldHVybiByZXMudG9TdHJpbmcoKTsKKwkJCQkrK2x2bDsKKwkJCX0KKwkJCXJlcy5hcHBlbmQoYyk7CisJCQkKKwkJfQorCQlyZXR1cm4gbnVsbDsKKwl9CisJCisJLyoqCisJICogUG9wdWxhdGUgYSBsaXN0IHdpdGggd2hhdGV2ZXIgc291cmNlIG9mIGRhdGEgaXMgc3BlY2lmaWVkLiBOT1RFOiB0aGUKKwkgKiBzb3VyY2UgaGFzIHRvIGhhdmUgdGhlIGZvcm1hdCAtPiB0b2tlbjE6dG9rZW4yOi4uLnRva2VuSworCSAqIAorCSAqIEBwYXJhbSBzb3VyY2UKKwkgKiAgICAgICAgICAgIFRoZSBmaWxlIHdoaWNoIGlzIHNvdXJjZSBvZiBkYXRhCisJICogCisJICogQHJldHVybiBhIGxpc3QgbG9hZGVkIHdpdGggaXRlbXMgYXMgc3BlY2lmaWVkIGJ5IHRoZSBzb3VyY2UKKwkgKiAKKwkgKi8KKwlzdGF0aWMgcHJvdGVjdGVkIExpc3Q8U3RyaW5nPiBwb3B1bGF0ZUxpc3QoU3RyaW5nIHNvdXJjZSkgeworCisJCUxpc3Q8U3RyaW5nPiBsaXN0ID0gbmV3IEFycmF5TGlzdDxTdHJpbmc+KCk7CisJCVN0cmluZyBidWZmZXIgPSBudWxsOworCisJCUJ1ZmZlcmVkUmVhZGVyIHJlYWRlciA9IG9wZW5SZWFkZXIoc291cmNlKTsKKwkJdHJ5IHsKKworCQkJaWYgKHJlYWRlciAhPSBudWxsKSB7CisJCQkJd2hpbGUgKEVPRihidWZmZXIgPSByZWFkZXIucmVhZExpbmUoKSkgIT0gdHJ1ZSkgeworCQkJCQkvLyBJZiB0aGlzIGxpbmUgc3RhcnRzIHdpdGggIiMiLCB0aGVuIGlnbm9yZSBpdC4KKwkJCQkJaWYgKGJ1ZmZlci50cmltKCkuc3RhcnRzV2l0aCgiIyIpIC8vJE5PTi1OTFMtMSQKKwkJCQkJCQl8fCBidWZmZXIudHJpbSgpLnN0YXJ0c1dpdGgoIjoiKSkgeyAvLyROT04tTkxTLTEkCisJCQkJCQljb250aW51ZTsKKwkJCQkJfQorCQkJCQlsaXN0LmFkZChidWZmZXIudHJpbSgpKTsKKwkJCQkJYnVmZmVyID0gbnVsbDsKKwkJCQl9CisJCQkJcmVhZGVyLmNsb3NlKCk7CisJCQl9CisKKwkJfSBjYXRjaCAoSU9FeGNlcHRpb24gZSkgeworCQkJZS5wcmludFN0YWNrVHJhY2UoKTsKKwkJfQorCQlyZXR1cm4gbGlzdDsKKwl9CisKKwkvKioKKwkgKiBPcGVuIGEgZm9sZGVyIGZvciByZWFkaW5nCisJICogCisJICogQHBhcmFtIGZpbGVOYW1lCisJICogICAgICAgICAgICB0aGUgZm9sZGVyIHRvIGJlIG9wZW5lZAorCSAqIAorCSAqIEByZXR1cm4gYSByZWZlcmVuY2UgdG8gdGhlIGZvbGRlcgorCSAqLworCXN0YXRpYyBwcm90ZWN0ZWQgQnVmZmVyZWRSZWFkZXIgb3BlbkZvbGRlcihTdHJpbmcgZmlsZSkgeworCisJCUJ1ZmZlcmVkUmVhZGVyIGJ1ZmZlciA9IG51bGw7CisKKwkJdHJ5IHsKKwkJCUZpbGUgbXlGaWxlID0gbmV3IEZpbGUoZmlsZSk7CisJCQlpZiAoIW15RmlsZS5leGlzdHMoKSB8fCAhbXlGaWxlLmNhblJlYWQoKSkgeworCQkJCVV0aWxMb2dnZXIubG9nSW5mb3JtYXRpb24oIkNhbnQgcmVhZCA6ICIgKyBmaWxlKTsgLy8kTk9OLU5MUy0xJAorCQkJCXJldHVybiBudWxsOworCQkJfQorCQkJYnVmZmVyID0gbmV3IEJ1ZmZlcmVkUmVhZGVyKG5ldyBGaWxlUmVhZGVyKGZpbGUpKTsKKwkJfSBjYXRjaCAoSU9FeGNlcHRpb24gZSkgeworCQkJZS5wcmludFN0YWNrVHJhY2UoKTsKKwkJfQorCisJCXJldHVybiBidWZmZXI7CisJfQorCisJLyoqCisJICogT3BlbiBhIGZpbGUgZm9yIHJlYWRpbmcKKwkgKiAKKwkgKiBAcGFyYW0gZmlsZU5hbWUKKwkgKiAgICAgICAgICAgIGEgZm9sZGVyIHdlIHdhbnQgdG8gb3BlbgorCSAqIAorCSAqIEByZXR1cm4gYSByZWZlcmVuY2UgdG8gdGhlIGZvbGRlcgorCSAqLworCXN0YXRpYyBwcm90ZWN0ZWQgRmlsZSBvcGVuRGlyZWN0b3J5KFN0cmluZyBmaWxlKSB7CisKKwkJRmlsZSBkaXIgPSBudWxsOworCisJCWRpciA9IG5ldyBGaWxlKGZpbGUpOworCQlpZiAoIWRpci5leGlzdHMoKSB8fCAhZGlyLmNhblJlYWQoKSB8fCAhZGlyLmlzRGlyZWN0b3J5KCkpIHsKKwkJCVV0aWxMb2dnZXIubG9nSW5mb3JtYXRpb24oIkNhbnQgcmVhZCA6ICIgKyBmaWxlKTsgLy8kTk9OLU5MUy0xJAorCQkJcmV0dXJuIG51bGw7CisJCX0KKworCQlyZXR1cm4gZGlyOworCX0KKworCS8qKgorCSAqIENyZWF0ZSBhIG5ld0J1ZmZlcmVkUmVhZGVyCisJICogCisJICogQHBhcmFtIGZpbGVOYW1lCisJICogICAgICAgICAgICB0aGUgbmFtZSBvZiB0aGUgZmlsZSB3ZSB3YW50IHRvIG9wZW4gZm9yIHJlYWRpbmcKKwkgKiAKKwkgKiBAcmV0dXJuIGEgcmVhZGVyIHRvIGEgZ2l2ZW4gZmlsZQorCSAqLworCXN0YXRpYyBwcm90ZWN0ZWQgQnVmZmVyZWRSZWFkZXIgb3BlblJlYWRlcihTdHJpbmcgZmlsZSkgeworCisJCXRyeSB7CisKKwkJCUZpbGUgZiA9IG5ldyBGaWxlKGZpbGUpOworCisJCQlpZiAoZi5leGlzdHMoKSA9PSBmYWxzZSkgeworCQkJCXJldHVybiBudWxsOworCQkJfQorCisJCQlyZXR1cm4gbmV3IEJ1ZmZlcmVkUmVhZGVyKG5ldyBGaWxlUmVhZGVyKGZpbGUpKTsKKworCQl9IGNhdGNoIChFeGNlcHRpb24gZSkgeworCQkJZS5wcmludFN0YWNrVHJhY2UoKTsKKwkJfQorCisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIENyZWF0ZSBhIG5ldyBQcmludFdyaXRlcgorCSAqIAorCSAqIEBwYXJhbSBmaWxlTmFtZQorCSAqICAgICAgICAgICAgdGhlIG5hbWUgb2YgdGhlIGZpbGUgd2Ugd2FudCB0byBvcGVuIGZvciB3cml0aW5nCisJICogQHJldHVybiBQcmludFdyaXRlciBhIHdyaXRlciB0byBhIGdpdmVuIGZpbGUKKwkgKi8KKwlzdGF0aWMgcHJvdGVjdGVkIFByaW50V3JpdGVyIG9wZW5Xcml0ZXIoU3RyaW5nIGZpbGUpIHsKKworCQl0cnkgeworCisJCQlyZXR1cm4gbmV3IFByaW50V3JpdGVyKG5ldyBCdWZmZXJlZFdyaXRlcihuZXcgRmlsZVdyaXRlcihmaWxlKSkpOworCisJCX0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CisJCQllLnByaW50U3RhY2tUcmFjZSgpOworCQl9CisKKwkJcmV0dXJuIG51bGw7CisJfQorCit9CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91dGlsaXR5L2dlbmVyYXRvcnMvR3JvdXBHZW5lcmF0b3IuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3NyYy9vcmcvZWNsaXBzZS9zdGVtL3V0aWxpdHkvZ2VuZXJhdG9ycy9Hcm91cEdlbmVyYXRvci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgwM2JhODMKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91dGlsaXR5L2dlbmVyYXRvcnMvR3JvdXBHZW5lcmF0b3IuamF2YQpAQCAtMCwwICsxLDY2NyBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkuZ2VuZXJhdG9yczsKKworaW1wb3J0IGphdmEuaW8uQnVmZmVyZWRSZWFkZXI7CitpbXBvcnQgamF2YS5pby5GaWxlOworaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247CitpbXBvcnQgamF2YS5pby5QcmludFdyaXRlcjsKK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OworaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOworaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuU2V0OworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqCisgKiBTVEVNIElJIERhdGEgTWlncmF0aW9uL0dlbmVyYXRpb24gVXRpbGl0aWVzIDogSW5zdGFuY2VzIG9mIHRoaXMgY2xhc3MgYXJlCisgKiB1c2VkIHRvIGdyb3VwIGFsbCBkYXRhIGFjY29yZGluZyB0byBhZG1pbmlzdHJhdGlvbiBuYW1lLiBGb3IgZXhhbXBsZSwgaWYgZGF0YQorICogZm9yIENhbGlmb3JuaWEgaXMgc2NhdHRlcmVkIGFsbCBvdmVyIHRoZSBkYXRhIGZpbGUsIHRoaXMgcHJvZ3JhbSB3aWxsIGdyb3VwCisgKiBhbGwgZGF0YSBmb3IgQ2FsaWZvcm5pYSBjb25zZWN1dGl2ZWx5LiBUaGUgYmVuZWZpdCBpcyB0aGF0IHRoaXMgd2F5IHdlIHdpbGwKKyAqIGhhdmUgYSBzaW5nbGUgcG9seWdvbiBmb3IgQ2FsaWZvcm5pYSBpbnN0ZWFkIG9mIGhhdmluZyBtdWx0aXBsZSBwb2x5Z29ucyBpZgorICogdGhlIGRhdGEgaXMgc2NhdHRlcmVkIG9yIG5vbi1jb25zZWN1dGl2ZS4KKyAqIAorICogVG8gY29uZmlndXJlLCBzZWUgY29uZmlndXJhdGlvbiBmaWxlIDoKKyAqIG9yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9jb25maWd1cmF0aW9uL0dyb3VwR2VuZXJhdG9yLmNvbmZpZworICogCisgKiAKKyAqIFRvIHJ1biwgYWRkIHBhdGggdG8gY29uZmlndXJhdGlvbiBmaWxlIGluIHRoZSBydW4gcHJvZmlsZSAoaS5lLgorICogQzpcc3RlbUlJXG9yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eVxjb25maWd1cmF0aW9uXEdyb3VwR2VuZXJhdG9yLmNvbmZpZykKKyAqIAorICogCisgKiBTRVQgVk1BUkdTIFRPIDogLVhtczEwMjRtIC1YbXgxMDI0bQorICogCisgKiAKKyAqLworCitwdWJsaWMgY2xhc3MgR3JvdXBHZW5lcmF0b3IgeworCisJLyoqCisJICogT3VyIHNvdXJjZSBmaWxlcyBmb3IgSVNPIDMxNjYtMSBjb2RlcyBhbmQgZm9yIHRoZSBsaXN0IG9mIHRhcmdldAorCSAqIGNvdW50cmllcy4KKwkgKi8KKworCXByaXZhdGUgU3RyaW5nIGlzbzMxNjZfMSA9IG51bGw7CisKKwlwcml2YXRlIFN0cmluZyBpc28zMTY2XzIgPSBudWxsOworCisJcHJpdmF0ZSBTdHJpbmcgZml4RmlsZSA9IG51bGw7CisKKwlwcml2YXRlIFN0cmluZyB0YXJnZXRGaWxlID0gbnVsbDsKKworCXByaXZhdGUgU3RyaW5nIGxleERpciA9IG51bGw7CisKKwlwcml2YXRlIFN0cmluZyBvdXRwdXREaXIgPSBudWxsOworCisJcHJpdmF0ZSBTdHJpbmcgd29ya3NwYWNlID0gbnVsbDsKKworCS8qKgorCSAqIExpc3QgZm9yIElTTyAzMTY2LTEgY29kZXMgYW5kIHRhcmdldCBjb3VudHJpZXMuCisJICovCisKKwlMaXN0IHRhcmdldExpc3QgPSBudWxsOworCisJTGlzdCBjb2RlTGlzdCA9IG51bGw7CisKKwlMaXN0IGNvZGVmaXhMaXN0ID0gbnVsbDsKKworCS8qKgorCSAqIEhhc2ggbWFwcyB0byBrZWVwIHRyYWNrIG9mIGVhY2ggZW50cnkuCisJICovCisJSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4gbGV2ZWwwTWFwID0gbnVsbDsKKworCUhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+IGxldmVsMU1hcCA9IG51bGw7CisKKwlIYXNoTWFwPFN0cmluZywgU3RyaW5nPiBsZXZlbDJNYXAgPSBudWxsOworCisJLyoqCisJICogQ29uc3RydWN0b3IKKwkgKiAKKwkgKiBAcGFyYW0gaXNvMzE2Nl8xIC0KKwkgKiAgICAgICAgICAgIGRhdGEgZmlsZSB3aXRoIHRoZSBJU08zMTY2LTEgQUxQSEFfMiBhbmQgQUxQSEFfMyBjb2Rlcy4KKwkgKiBAcGFyYW0gaXNvMzE2Nl8yIC0KKwkgKiAgICAgICAgICAgIGRhdGEgZmlsZSB3aXRoIHRoZSBJU08zMTY2LTIgY29kZXMuCisJICogQHBhcmFtIGZpeEZpbGUgLQorCSAqICAgICAgICAgICAgZmlsZSBjb250YWluaW5nIG1pc3NpbmcgSVNPMzE2Ni0yIGNvZGVzCisJICogQHBhcmFtIHRhcmdldEZpbGUKKwkgKiAgICAgICAgICAgIHRoZSBsaXN0IG9mIGNvdW50cmllcyBmb3Igd2hpY2ggd2Ugd2lsbCBnZW5lcmF0ZSBHTUwgZmlsZXMKKwkgKiBAcGFyYW0gbGV4RGlyCisJICogICAgICAgICAgICBmb2xkZXIgY29udGFpbmluZyBsZXhpY29ncmFwaGljYWxseSBzb3J0ZWQgZmlsZXMKKwkgKiBAcGFyYW0gb3V0cHV0RGlyCisJICogICAgICAgICAgICB0aGUgb3V0cHV0IGRpcmVjdG9yeSBmb3IgdGhlIEdNTCBmaWxlcyB3ZSBnZW5lcmF0ZQorCSAqLworCS8vIHB1YmxpYyBHcm91cEdlbmVyYXRvcihTdHJpbmcgaXNvMzE2Nl8xLCBTdHJpbmcgaXNvMzE2Nl8yLCBTdHJpbmcgZml4RmlsZSwKKwkvLyBTdHJpbmcgdGFyZ2V0RmlsZSwgU3RyaW5nIGxleERpciwgU3RyaW5nIG91dHB1dERpcikgeworCS8vIC8vIFNldCB2YWx1ZXMgb2YgZ2xvYmFsIHZhcmlhYmxlcy4KKwkvLyB0aGlzLmlzbzMxNjZfMSA9IGlzbzMxNjZfMTsKKwkvLyB0aGlzLmlzbzMxNjZfMiA9IGlzbzMxNjZfMjsKKwkvLyB0aGlzLmZpeEZpbGUgPSBmaXhGaWxlOworCS8vIHRoaXMudGFyZ2V0RmlsZSA9IHRhcmdldEZpbGU7CisJLy8gdGhpcy5sZXhEaXIgPSBsZXhEaXI7CisJLy8gdGhpcy5vdXRwdXREaXIgPSBvdXRwdXREaXI7CisJLy8gbGV2ZWwwTWFwID0gbnVsbDsKKwkvLyBsZXZlbDFNYXAgPSBudWxsOworCS8vIGxldmVsMk1hcCA9IG51bGw7CisJLy8gdGFyZ2V0TGlzdCA9IG51bGw7CisJLy8JfQorCisJLyoqCisJICogQHBhcmFtIGNvbmZpZ0ZpbGUKKwkgKi8KKwlwdWJsaWMgR3JvdXBHZW5lcmF0b3IoU3RyaW5nIGNvbmZpZ0ZpbGUpIHsJCisKKwkJLy8gTG9hZCBhbGwgY29uZmlndXJhdGlvbiB2YXJpYWJsZXMKKwkJSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4gdmFycyA9IEdlblV0aWxzLmxvYWRDb25maWdGaWxlKGNvbmZpZ0ZpbGUpOworCisJCVNldDxTdHJpbmc+IGtleXMgPSB2YXJzLmtleVNldCgpOworCQlJdGVyYXRvciBpdCA9IGtleXMuaXRlcmF0b3IoKTsKKwkJd2hpbGUgKGl0Lmhhc05leHQoKSkgeworCQkJU3RyaW5nIHZhciA9IChTdHJpbmcpIGl0Lm5leHQoKTsKKworCQkJLy8gQXNzaWduIHZhbHVlcyB0byBjb25maWd1cmF0aW9uIHZhcmlhYmxlcyA6CisJCQlpZiAodmFyLmVxdWFscygiV09SS1NQQUNFIikpIHsgLy8kTk9OLU5MUy0xJAorCQkJCXdvcmtzcGFjZSA9IHZhcnMuZ2V0KHZhcik7CisJCQl9IGVsc2UgaWYgKHZhci5lcXVhbHMoIklTTzMxNjZfMSIpKSB7IC8vJE5PTi1OTFMtMSQKKwkJCQlpc28zMTY2XzEgPSB2YXJzLmdldCh2YXIpOworCQkJfSBlbHNlIGlmICh2YXIuZXF1YWxzKCJJU08zMTY2XzIiKSkgeyAvLyROT04tTkxTLTEkCisJCQkJaXNvMzE2Nl8yID0gdmFycy5nZXQodmFyKTsKKwkJCX0gZWxzZSBpZiAodmFyLmVxdWFscygiSVNPX0ZJWCIpKSB7IC8vJE5PTi1OTFMtMSQKKwkJCQlmaXhGaWxlID0gdmFycy5nZXQodmFyKTsKKwkJCX0gZWxzZSBpZiAodmFyLmVxdWFscygiVEFSR0VUX0xJU1QiKSkgeyAvLyROT04tTkxTLTEkCisJCQkJdGFyZ2V0RmlsZSA9IHZhcnMuZ2V0KHZhcik7CisJCQl9IGVsc2UgaWYgKHZhci5lcXVhbHMoIkxFWF9ESVIiKSkgeyAvLyROT04tTkxTLTEkCisJCQkJbGV4RGlyID0gdmFycy5nZXQodmFyKTsKKwkJCX0gZWxzZSBpZiAodmFyLmVxdWFscygiT1VUUFVUIikpIHsgLy8kTk9OLU5MUy0xJAorCQkJCW91dHB1dERpciA9IHZhcnMuZ2V0KHZhcik7CisJCQl9CisKKwkJfSAvLyB3aGlsZQorCisJCS8vIFRoZSB3b3Jrc3BhY2UgdmFyaWFibGUgc2hvdWxkIGVuZCB3aXRoIGEgc2xhc2ggY2hhcmFjdGVyCisJCWlmICh3b3Jrc3BhY2UuZW5kc1dpdGgoIlxcIikgPT0gZmFsc2UpIHsgLy8kTk9OLU5MUy0xJAorCQkJd29ya3NwYWNlICs9ICJcXCI7IC8vJE5PTi1OTFMtMSQKKwkJfQorCisJCVN0cmluZyBwYXRoID0gd29ya3NwYWNlICsgR2VuQ29uc3RhbnRzLlBBUkFNU19ESVI7CisKKwkJLy8gU2V0IHJlbWFpbmluZyBjb25maWcgdmFycyB1c2luZyBXT1JLU1BBQ0UgKHdvcmtzcGFjZSByZWxhdGl2ZSkKKwkJaWYgKGlzbzMxNjZfMSA9PSBudWxsKSB7CisJCQlpc28zMTY2XzEgPSBwYXRoICsgR2VuQ29uc3RhbnRzLklTTzMxNjZfMV9GSUxFOworCQl9CisJCWlmIChpc28zMTY2XzIgPT0gbnVsbCkgeworCQkJaXNvMzE2Nl8yID0gcGF0aCArIEdlbkNvbnN0YW50cy5JU08zMTY2XzJfRklMRTsKKwkJfQorCQlpZiAoZml4RmlsZSA9PSBudWxsKSB7CisJCQlmaXhGaWxlID0gcGF0aCArIEdlbkNvbnN0YW50cy5JU09GSVhfRklMRTsKKwkJfQorCQlpZiAodGFyZ2V0RmlsZSA9PSBudWxsKSB7CisJCQl0YXJnZXRGaWxlID0gcGF0aCArIEdlbkNvbnN0YW50cy5DT1VOVFJJRVNfTElTVDsKKwkJfQorCQlpZiAobGV4RGlyID09IG51bGwpIHsKKwkJCWxleERpciA9IHBhdGggKyBHZW5Db25zdGFudHMuTEVYX0RJUjsKKwkJfQorCisJCWlmIChHZW5VdGlscy52ZXJpZnlPdXRwdXREaXJlY3RvcnkodmFycykgPT0gZmFsc2UpIHsKKwkJCVN5c3RlbS5vdXQKKwkJCQkJLnByaW50bG4oIlx0XHRCYWQgY29uZmlndXJhdGlvbiBmaWxlIC0tIE9VVFBVVCB2YXJpYWJsZSBub3QgZm91bmQuIFBsZWFzZSBzcGVjaWZ5IG91dHB1dCBkaXJlY3RvcnkgdXNpbmcgZm9ybWF0IFZBUiA9IFZBTFVFIChpLmUuIE9VVFBVVCA9IEM6XFxkaXZhXFxncm91cGVkXFwgIik7IC8vJE5PTi1OTFMtMSQKKwkJCVN5c3RlbS5leGl0KDEpOworCQl9CisKKwkJbGV2ZWwwTWFwID0gbnVsbDsKKwkJbGV2ZWwxTWFwID0gbnVsbDsKKwkJbGV2ZWwyTWFwID0gbnVsbDsKKwkJdGFyZ2V0TGlzdCA9IG51bGw7CisKKwl9CisKKwkvKioKKwkgKiBUaGlzIG1ldGhvZCBzZXRzIHVwIGFuZCBydW5zIHRoaXMgZ2VuZXJhdG9yLgorCSAqIAorCSAqLworCXB1YmxpYyB2b2lkIHJ1bigpIHsKKwkJLy8gUmVhZCBhbmQga2VlcCBpbiBtZW1vcnkgYSBsaXN0IG9mIHRoZSBjb3VudHJpZXMgd2Ugd2FudC4KKwkJdGFyZ2V0TGlzdCA9IEdlblV0aWxzLnBvcHVsYXRlTGlzdCh0YXJnZXRGaWxlKTsKKworCQkvLyBSZWFkIGFuZCBrZWVwIGluIG1lbW9yeSBhIGxpc3Qgb2YgdGhlIElTTzMxNjYtMSBBTFBIQTIsIEFMUEhBMywgYW5kCisJCS8vIG51bWVyaWMgY29kZXMuCisJCWNvZGVMaXN0ID0gR2VuVXRpbHMucG9wdWxhdGVMaXN0KGlzbzMxNjZfMSk7CisKKwkJLy8gUmVhZCBhbmQga2VlcCBpbiBtZW1vcnkgYSBsaXN0IG9mIHRoZSBtaXNzaW5nIElTTzMxNjYtMiBjb2RlcworCQljb2RlZml4TGlzdCA9IEdlblV0aWxzLnBvcHVsYXRlTGlzdChmaXhGaWxlKTsKKworCQkvLyBOb3csIHByb2Nlc3MgZWFjaCBpdGVtIGluIHRoZSB0YXJnZXQgbGlzdC4KKwkJcHJvY2VzcygpOworCisJfQorCisJLyoqCisJICogUHJvY2VzcyBvdXIgZ2xvYmFsIGxpc3Qgb2YgdGFyZ2V0IGNvdW50cmllcy4gRm9yIGVhY2ggY291bnRyeSBpbiBsaXN0LAorCSAqIGdlbmVyYXRlIGl0cyBHTUwgZmlsZS4KKwkgKiAKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBwcm9jZXNzKCkgeworCisJCS8vIEEgd3JpdGVyIGZvciB0aGUgbmV3IGZpbGUgd2UgYXJlIGNyZWF0aW5nLgorCQlQcmludFdyaXRlciBncm91cEZpbGUgPSBudWxsOworCisJCS8vIE9iamVjdCBob2xkaW5nIElTTzMxNjYtMSByZWxhdGVkIGRhdGEuCisJCUlTT0NvZGUxIGlzb0NvZGUgPSBudWxsOworCisJCS8vIE5hbWUgb2YgdGhlIG5ldyBwcm9wZXJ0aWVzIGZpbGUuCisJCVN0cmluZyBmaWxlTmFtZSA9IG51bGw7CisKKwkJLy8gQSBsaXN0IGZvciBJU08gMzE2Ni0yIG9iamVjdHMKKwkJTGlzdCBpc28yTGlzdCA9IG5ldyBBcnJheUxpc3QoKTsKKworCQkvLyBGaWxlbmFtZXMgZm9yIGxleDEgYW5kIGxleDIgZmlsZXMgZm9yIGEgZ2l2ZW4gY291bnRyeS4KKwkJU3RyaW5nIGxleEFkbWluMUZpbGUgPSBudWxsOworCQlTdHJpbmcgbGV4QWRtaW4yRmlsZSA9IG51bGw7CisKKwkJLy8gTGlzdHMgaG9sZGluZyB0aGUgbGV4MSBhbmQgbGV4MiB2YWx1ZXMuCisJCS8vIE5PVEU6IGxleCB2YWx1ZXMgYXJlIHRoZSBsZXhpY29ncmFwaGljYWxseSBzb3J0ZWQgdmFsdWVzIGZvcgorCQkvLyBhZG1pbmlzdHJhdGlvbiBsZXZlbHMuCisJCUxpc3Q8U3RyaW5nPiBsZXgxRGF0YVNldCA9IG51bGw7CisJCUxpc3Q8U3RyaW5nPiBsZXgyRGF0YVNldCA9IG51bGw7CisKKwkJLy8gTGlzdHMgZm9yIGhvbGRpbmcgbGV4MSBhbmQgbGV4MiBvYmplY3RzIGZvciBhIGdpdmVuIGNvdW50cnkuCisJCUxpc3Q8TGV4MU9iaj4gbGV4MUxpc3QgPSBudWxsOworCQlMaXN0PExleDJPYmo+IGxleDJMaXN0ID0gbnVsbDsKKworCQlpbnQgc2l6ZSA9IHRhcmdldExpc3Quc2l6ZSgpOworCisJCS8vIEl0ZXJhdGUgZm9yIGV2ZXJ5IGNvdW50cnkgYW5kIGNyZWF0ZSBpdHMgR01MIGRhdGEgZmlsZS4KKwkJZm9yIChpbnQgaSA9IDA7IGkgPCBzaXplOyBpKyspIHsKKworCQkJLy8gQ3JlYXRlIHRoZSBoYXNoIG1hcHMgOgorCQkJbGV2ZWwwTWFwID0gbmV3IEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+KCk7CisJCQlsZXZlbDFNYXAgPSBuZXcgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4oKTsKKwkJCWxldmVsMk1hcCA9IG5ldyBIYXNoTWFwPFN0cmluZywgU3RyaW5nPigpOworCisJCQkvLyBHZXQgdGhlIG5leHQgY291bnRyeSBpbiB0aGUgbGlzdC4KKwkJCVN0cmluZyBmaWxlID0gKChTdHJpbmcpIHRhcmdldExpc3QuZ2V0KGkpKS50cmltKCk7CisKKwkJCS8vIEFuIGluZGV4IGZvciB1bmtub3duIG9yIG4uYS4gZW50cmllcworCQkJaW50IHVua0NvdW50ZXIgPSAxOworCisJCQkvLyBXZSB1c2UgdGhpcyBsaXN0IHRvIGtlZXAgdHJhY2sgb2YgZHVwbGljYXRlZCBwb2x5Z29ucy4KKwkJCUxpc3Q8U1RFTVBvbHlnb24+IHBvbHlnb25zID0gbnVsbDsKKworCQkJLy8gT3BlbiB0aGUgZGF0YSBzb3VyY2UgZmlsZSBmb3IgdGhpcyBjb3VudHJ5LgorCQkJQnVmZmVyZWRSZWFkZXIgcmVhZGVyID0gR2VuVXRpbHMub3BlblJlYWRlcihmaWxlKTsKKworCQkJU3lzdGVtLm91dAorCQkJCQkucHJpbnRsbigiXHRcdDw8PDwgR1JPVVAgR0VORVJBVE9SIC0tIFByb2Nlc3NpbmcgY291bnRyeSA6ICIgKyBmaWxlICsgIiA+Pj4+Iik7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAorCQkJdHJ5IHsKKworCQkJCWlmIChyZWFkZXIgIT0gbnVsbCkgeworCisJCQkJCVN0cmluZyBidWZmZXIgPSBudWxsOworCQkJCQkvLyBEZXNjcmliZXMgdGhlIGxldmVsIG9mIGRhdGEKKwkJCQkJLy8gYmVpbmcgcHJvY2Vzc2luZyA6IExFVkVMMCwgTEVWRUwxLCBvciBMRVZFTDIuCisJCQkJCWludCBsZXZlbCA9IC0xOworCisJCQkJCS8vIFJlY29yZCB0aGUgcHJldmlvdXMgdHlwZS4KKwkJCQkJaW50IG9sZGxldmVsID0gbGV2ZWwgLSAxOworCisJCQkJCS8vIFRoZSBkYXRhIHdlIHdhbnQgdG8gd3JpdGUgdG8gdGhlIG5ldyBHTUwgZmlsZS4KKwkJCQkJU3RyaW5nIG91dHB1dCA9ICIgIjsgLy8kTk9OLU5MUy0xJAorCisJCQkJCXdoaWxlIChHZW5VdGlscy5FT0YoYnVmZmVyID0gcmVhZGVyLnJlYWRMaW5lKCkpICE9IHRydWUpIHsKKworCQkJCQkJLy8gTWFrZSBzdXJlIHRoYXQgd2UgbWFyayBhbGwgdW5rbm93biBkYXRhLgorCQkJCQkJYnVmZmVyID0gYnVmZmVyLnJlcGxhY2UoIiwsIiwgIixVTktOT1dOLCIpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKKworCQkJCQkJLy8gV2UgdGFrZSBhIGNodW5rIG9mIHRoZSBkYXRhIFtCVUZGRVJfTUlOLEJVRkZFUl9NQVhdCisJCQkJCQkvLyB0byBtYWtlIHByb2Nlc3NzaW5nIG1vcmUKKwkJCQkJCS8vIGVmZmljaWVudCwgd2UgZG9udCBuZWVkIGFsbCBvZiBpdC4KKwkJCQkJCWludCBCVUZGRVJfTUlOID0gMDsKKwkJCQkJCWludCBCVUZGRVJfTUFYID0gMTI1OworCisJCQkJCQlTdHJpbmdbXSBpdGVtcyA9IEdlblV0aWxzCisJCQkJCQkJCS5leHRyYWN0KGJ1ZmZlci5sZW5ndGgoKSA8IEJVRkZFUl9NQVggPyBidWZmZXIKKwkJCQkJCQkJCQk6IGJ1ZmZlci5zdWJzdHJpbmcoQlVGRkVSX01JTiwKKwkJCQkJCQkJCQkJCUJVRkZFUl9NQVgpKTsKKworCQkJCQkJLy8gR2V0IHRoZSBjb3VudHJ5IG5hbWUKKwkJCQkJCVN0cmluZyBjb3VudHJ5ID0gaXRlbXNbSVNPRGF0YS5DT1VOVFJZX05BTUVdOworCisJCQkJCQkvLyBHZXQgdGhlIElTTzMxNjYtMSBpbmZvIGZvciB0aGlzIGNvdW50cnkKKwkJCQkJCWlmIChpc29Db2RlID09IG51bGwpIHsKKwkJCQkJCQlpc29Db2RlID0gR2VuVXRpbHMuZ2V0SVNPQ29kZShjb3VudHJ5LCBjb2RlTGlzdCk7CisJCQkJCQl9CisKKwkJCQkJCS8vIEdldCB0aGUgdHlwZSBvZiB0aGUgZGF0YSB3ZSBhcmUgcHJvY2Vzc2luZy4KKwkJCQkJCWxldmVsID0gR2VuVXRpbHMuZ2V0TGV2ZWwoaXRlbXMpOworCisJCQkJCQlpZiAobGV2ZWwgIT0gMCAmJiBpc28yTGlzdCAhPSBudWxsKSB7CisJCQkJCQkJLy8gTG9hZCB0aGUgSVNPIDMxNjYtMiBvYmplY3RzIGZvciB0aGlzIGNvdW50cnkKKwkJCQkJCQlpc28yTGlzdCA9IEdlblV0aWxzLmxvYWRJU08yKGlzbzMxNjZfMik7CisJCQkJCQl9CisKKwkJCQkJCS8vIFRoaXMgdmFyaWFibGUgaW5kaWNhdGVzIGEgdHJhbnNpdGlvbiBpbiBvdXIgZGF0YQorCQkJCQkJLy8gcHJvY2Vzc2luZworCQkJCQkJYm9vbGVhbiB0cmFuc2l0aW9uID0gKGxldmVsICE9IG9sZGxldmVsKSA/IHRydWUgOiBmYWxzZTsKKworCQkJCQkJLy8gVGhlIGN1cnJlbnQgZW50aXR5IHdlIGFyZSBkZWFsaW5nIHdpdGguCisJCQkJCQkvLyBCYXNlZCBvbiBpdHMgYWRtaW4gbGV2ZWwgaXQgY2FuIGJlIGEgY291bnRyeSwgYQorCQkJCQkJLy8gY291bnR5LCBldGM7CisJCQkJCQlTdHJpbmcgY3VycmVudCA9IG51bGw7CisKKwkJCQkJCS8vIERlc2NyaXB0b3IgZm9yIGN1cnJlbnQgZW50cnkuCisJCQkJCQlTdHJpbmcgZGVzY3JpcHRvciA9IG51bGw7CisKKwkJCQkJCWlmICh0cmFuc2l0aW9uID09IHRydWUpIHsKKwkJCQkJCQkvLyBLZWVwIHRyYWNrIG9mIHByZXZpb3VzIGxldmVsIGluIG9yZGVyIHRvIGRldGVjdAorCQkJCQkJCS8vIHRyYW5zaXRpb25zLgorCQkJCQkJCW9sZGxldmVsID0gbGV2ZWw7CisKKwkJCQkJCQkvLyBSZXNldCBjb3VudGVyIG9mIFVOS05PV04gYW5kIE4uQS4gZW50cmllcy4KKwkJCQkJCQl1bmtDb3VudGVyID0gMTsKKworCQkJCQkJCS8vIENsZWFyIHRoZSBsaXN0IG9mIHVuaXF1ZSBwb2x5Z29ucworCQkJCQkJCWlmIChwb2x5Z29ucyAhPSBudWxsKSB7CisJCQkJCQkJCXBvbHlnb25zLmNsZWFyKCk7CisJCQkJCQkJfQorCisJCQkJCQkJLy8gR2V0IGEgbmV3LCBlbXB0eSBwb2x5Z29uIGxpc3QKKwkJCQkJCQlwb2x5Z29ucyA9IG5ldyBBcnJheUxpc3Q8U1RFTVBvbHlnb24+KCk7CisKKwkJCQkJCQkvLyBJZiB0aGUgZGlyZWN0b3J5IGRvZXMgbm90IGV4aXN0IGZvciB0aGlzIGNvdW50cnksCisJCQkJCQkJLy8gY3JlYXRlIGl0IHVzaW5nIElTTyBhbHBoYTMgY29kZS4KKwkJCQkJCQlGaWxlIGNvdW50cnlEaXIgPSBuZXcgRmlsZShvdXRwdXREaXIKKwkJCQkJCQkJCSsgaXNvQ29kZS5nZXRBbHBoYTMoKSk7CisKKwkJCQkJCQlpZiAoY291bnRyeURpciAhPSBudWxsCisJCQkJCQkJCQkmJiBjb3VudHJ5RGlyLmV4aXN0cygpID09IGZhbHNlKSB7CisJCQkJCQkJCS8vIERpcmVjdG9yeSBkb2VzIG5vdCBleGlzdC4gQ3JlYXRlIGl0LgorCQkJCQkJCQljb3VudHJ5RGlyLm1rZGlyKCk7CisJCQkJCQkJfQorCisJCQkJCQkJLy8gQ3JlYXRlIHRoZSBmaWxlIG5hbWUgZm9yIHRoZSBuZXcgZmlsZQorCQkJCQkJCWZpbGVOYW1lID0gY291bnRyeURpciArICJcXCIgKyBpc29Db2RlLmdldEFscGhhMygpIC8vJE5PTi1OTFMtMSQKKwkJCQkJCQkJCSsgIl9HUk9VUEVELnR4dCI7IC8vJE5PTi1OTFMtMSQKKworCQkJCQkJCS8vIE9wZW4gdGhlIHdyaXRlciBmb3IgdGhlIG5ldyBmaWxlCisJCQkJCQkJZ3JvdXBGaWxlID0gR2VuVXRpbHMub3BlbldyaXRlcihmaWxlTmFtZSk7CisKKwkJCQkJCX0gLy8gaWYoIHRyYW5zaXRpb24gPT0gdHJ1ZSApCisKKwkJCQkJCXN3aXRjaCAobGV2ZWwpIHsKKworCQkJCQkJY2FzZSBEYXRhVHlwZXMuTEVWRUxfMDoKKwkJCQkJCQljdXJyZW50ID0gaXNvQ29kZS5nZXRBbHBoYTMoKTsKKwkJCQkJCQlicmVhazsKKworCQkJCQkJY2FzZSBEYXRhVHlwZXMuTEVWRUxfMToKKwkJCQkJCQljdXJyZW50ID0gaXRlbXNbSVNPRGF0YS5BRE1JTjFfTkFNRV0udG9VcHBlckNhc2UoKTsKKwkJCQkJCQlicmVhazsKKworCQkJCQkJY2FzZSBEYXRhVHlwZXMuTEVWRUxfMjoKKwkJCQkJCQljdXJyZW50ID0gaXRlbXNbSVNPRGF0YS5BRE1JTjJfTkFNRV0udG9VcHBlckNhc2UoKTsKKwkJCQkJCQlicmVhazsKKworCQkJCQkJfSAvLyBzd2l0Y2gKKworCQkJCQkJLy8gSGFuZGxlIFVOS05PV04gYW5kIE4uQS4gZW50cmllcyBkaWZmZXJlbnRseS4KKwkJCQkJCWlmIChjdXJyZW50LmVxdWFscygiVU5LTk9XTiIpIHx8IGN1cnJlbnQuZXF1YWxzKCJOLkEuIikpIHsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCisKKwkJCQkJCQlpZiAobGV2ZWwgPT0gMSkgeworCQkJCQkJCQljdXJyZW50ID0gaXNvQ29kZS5nZXRBbHBoYTIoKSArICItVU5LLSIgLy8kTk9OLU5MUy0xJAorCQkJCQkJCQkJCSsgU3RyaW5nLnZhbHVlT2YodW5rQ291bnRlcisrKTsKKworCQkJCQkJCX0gZWxzZSB7CisJCQkJCQkJCS8vIExldmVsIDIgZGF0YS4KKwkJCQkJCQkJY3VycmVudCA9IGlzb0NvZGUuZ2V0QWxwaGEzKCkgKyAiLkwyLiIgLy8kTk9OLU5MUy0xJAorCQkJCQkJCQkJCSsgU3RyaW5nLnZhbHVlT2YodW5rQ291bnRlcisrKTsKKwkJCQkJCQl9CisJCQkJCQl9CisKKwkJCQkJCS8vIFdlIGdldCB0aGUgZGVzY3JpcHRvciBmb3IgYWRtaW5pc3RyYXRpb24gZW50aXRpZXMKKwkJCQkJCS8vIGRpZmZlcmVudGx5IGJhc2VkIG9uIGl0cyBsZXZlbC4KKworCQkJCQkJaWYgKGxldmVsID09IDIpIHsKKworCQkJCQkJCWlmIChsZXgxRGF0YVNldCA9PSBudWxsICYmIGxleDJEYXRhU2V0ID09IG51bGwpIHsKKworCQkJCQkJCQkvLyBDb21wb3NlIHRoZSBmaWxlIG5hbWVzIGZvciB0aGUgbGV4IGZpbGVzIGZvcgorCQkJCQkJCQkvLyB0aGlzCisJCQkJCQkJCS8vIGNvdW50cnkuCisJCQkJCQkJCWxleEFkbWluMUZpbGUgPSBsZXhEaXIgKyBpc29Db2RlLmdldEFscGhhMygpCisJCQkJCQkJCQkJKyAiXFwiICsgaXNvQ29kZS5nZXRBbHBoYTMoKTsgLy8kTk9OLU5MUy0xJAorCQkJCQkJCQlsZXhBZG1pbjJGaWxlID0gbGV4QWRtaW4xRmlsZTsKKwkJCQkJCQkJbGV4QWRtaW4xRmlsZSArPSAiX0FETUlOMV9MRVgudHh0IjsgLy8kTk9OLU5MUy0xJAorCQkJCQkJCQlsZXhBZG1pbjJGaWxlICs9ICJfQURNSU4yX0xFWC50eHQiOyAvLyROT04tTkxTLTEkCisKKwkJCQkJCQkJLy8gTG9hZCB0aGUgbGV4MSBhbmQgbGV4MiBmaWxlcyBmb3IgdGhpcworCQkJCQkJCQkvLyBjb3VudHJ5LgorCQkJCQkJCQlsZXgxRGF0YVNldCA9IEdlblV0aWxzCisJCQkJCQkJCQkJLnBvcHVsYXRlTGlzdChsZXhBZG1pbjFGaWxlKTsKKwkJCQkJCQkJbGV4MkRhdGFTZXQgPSBHZW5VdGlscworCQkJCQkJCQkJCS5wb3B1bGF0ZUxpc3QobGV4QWRtaW4yRmlsZSk7CisKKwkJCQkJCQkJLy8gQ3JlYXRlIGEgbWV0aG9kIHRvIHNlYXJjaCBmb3IgYW4gaXRlbSBvbiBhCisJCQkJCQkJCS8vIGxpc3Qgb2YgbGV4IGRhdGEgb2JqZWN0cy4KKwkJCQkJCQkJbGV4MUxpc3QgPSBHZW5VdGlscy5jcmVhdGVMZXgxTGlzdChsZXgxRGF0YVNldCk7CisJCQkJCQkJCWxleDJMaXN0ID0gR2VuVXRpbHMuY3JlYXRlTGV4Mkxpc3QobGV4MkRhdGFTZXQpOworCisJCQkJCQkJfQorCisJCQkJCQkJLy8gQ29tcG9zZSB0aGUgbGV2ZWwyIGRlc2NyaXB0b3IgdXNpbmcgdGhlIGxleCBkYXRhOgorCisJCQkJCQkJLy8gU1RFUCAxOiBEbyBhIGxvb2sgdXAgaW4gdGhlIGxleCAyIGxpc3RzLgorCisJCQkJCQkJLy8gR2V0IHRoZSBsZXggMiBvYmplY3QgZm9yIHRoZSBjdXJyZW50IGVudHJ5LgorCQkJCQkJCUxleDJPYmogbGV4MkN1cnJlbnQgPSBHZW5VdGlscy5sZXgyTG9va3VwKGxleDJMaXN0LAorCQkJCQkJCQkJaXRlbXNbSVNPRGF0YS5BRE1JTjFfTkFNRV0sIGN1cnJlbnQpOworCisJCQkJCQkJLy8gR2V0IHRoZSBsZXgxT2JqZWN0IHRvIHdoaWNoIGxleDJDdXJyZW50IGJlbG9uZ3MKKwkJCQkJCQlMZXgxT2JqIGxleDFDdXJyZW50ID0gR2VuVXRpbHMubGV4MUxvb2t1cChsZXgxTGlzdCwKKwkJCQkJCQkJCWxleDJDdXJyZW50LmdldEFkbWluMSgpKTsKKworCQkJCQkJCWlmIChsZXgxQ3VycmVudC5nZXREZXNjcmlwdG9yKCkuY29udGFpbnMoIlVTLSIpKSB7IC8vJE5PTi1OTFMtMSQKKwkJCQkJCQkJLy8gU1RFUCAyOiBwaWVjZSB0b2dldGhlciB0aGUgSUQgdXNpbmcgdGhlCisJCQkJCQkJCS8vIHByb3BlciBsZXggb2JqZWN0cyA6IHRoZSBVU0EgaXMgYSBzcGVjaWFsCisJCQkJCQkJCS8vIGNhc2UKKwkJCQkJCQkJZGVzY3JpcHRvciA9IGxleDFDdXJyZW50LmdldERlc2NyaXB0b3IoKQorCQkJCQkJCQkJCSsgbGV4MUN1cnJlbnQuZ2V0Rm9ybWF0dGVkSW5kZXgoKQorCQkJCQkJCQkJCSsgbGV4MkN1cnJlbnQuZ2V0Rm9ybWF0dGVkSW5kZXhVU0EoKTsKKwkJCQkJCQl9IGVsc2UgeworCQkJCQkJCQkvLyBTVEVQIDI6IHBpZWNlIHRvZ2V0aGVyIHRoZSBJRCB1c2luZyB0aGUKKwkJCQkJCQkJLy8gcHJvcGVyIGxleCBvYmplY3RzLgorCQkJCQkJCQlkZXNjcmlwdG9yID0gbGV4MUN1cnJlbnQuZ2V0RGVzY3JpcHRvcigpCisJCQkJCQkJCQkJKyAiLUciIC8vJE5PTi1OTFMtMSQKKwkJCQkJCQkJCQkrIGxleDFDdXJyZW50LmdldEZvcm1hdHRlZEluZGV4KCkKKwkJCQkJCQkJCQkrIGxleDJDdXJyZW50LmdldEZvcm1hdHRlZEluZGV4KCk7CisJCQkJCQkJfQorCisJCQkJCQkJaWYgKGN1cnJlbnQuY29udGFpbnMoIi5MMi4iKSkgeyAvLyROT04tTkxTLTEkCisJCQkJCQkJCWN1cnJlbnQgPSBkZXNjcmlwdG9yOworCQkJCQkJCX0KKworCQkJCQkJfSBlbHNlIHsKKwkJCQkJCQkvLyBDb21wb3NlIGRlc2NyaXB0b3IgZm9yIGwgMSBhbmQgbCAwIGRhdGEKKwkJCQkJCQkvLyBHZXQgdGhlIGRlc2NyaXB0b3IgZm9yIHRoaXMgZW50aXR5LgorCQkJCQkJCWRlc2NyaXB0b3IgPSBHZW5VdGlscy5nZXRJU08yRGVzY3JpcHRvcihpc28yTGlzdCwKKwkJCQkJCQkJCWN1cnJlbnQsIGlzb0NvZGUuZ2V0QWxwaGEyKCkpOworCisJCQkJCQkJLy8gSWYgd2UgY2FudCBmaW5kIHRoZSBkZXNjcmlwdG9yLCB0aGVuIGxvb2sgaW4gdGhlCisJCQkJCQkJLy8gZml4IGxpc3QuCisJCQkJCQkJaWYgKGRlc2NyaXB0b3IuZXF1YWxzKGN1cnJlbnQpID09IHRydWUpIHsKKwkJCQkJCQkJLy8gTG9vayBmb3IgYSBkZXNjcmlwdG9yIGluIHRoZSBmaXggZmlsZQorCQkJCQkJCQlkZXNjcmlwdG9yID0gR2VuVXRpbHMuZ2V0Rml4Q29kZShjb2RlZml4TGlzdCwKKwkJCQkJCQkJCQljdXJyZW50LCBpdGVtc1tJU09EYXRhLkNPVU5UUllfTkFNRV0pOworCQkJCQkJCX0KKworCQkJCQkJfQorCisJCQkJCQlTdHJpbmcga2V5ID0gbnVsbDsKKwkJCQkJCUhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+IG1hcCA9IG51bGw7CisKKwkJCQkJCS8vIFN0b3JlIHRoZSBkYXRhIGluIHRoZSBoYXNoIG1hcAorCQkJCQkJc3dpdGNoIChsZXZlbCkgeworCisJCQkJCQljYXNlIERhdGFUeXBlcy5MRVZFTF8wOgorCQkJCQkJCWtleSA9IGl0ZW1zW0lTT0RhdGEuQ09VTlRSWV9OQU1FXTsKKwkJCQkJCQltYXAgPSBsZXZlbDBNYXA7CisJCQkJCQkJYnJlYWs7CisKKwkJCQkJCWNhc2UgRGF0YVR5cGVzLkxFVkVMXzE6CisJCQkJCQkJa2V5ID0gaXRlbXNbSVNPRGF0YS5BRE1JTjFfTkFNRV07CisJCQkJCQkJbWFwID0gbGV2ZWwxTWFwOworCQkJCQkJCWJyZWFrOworCisJCQkJCQljYXNlIERhdGFUeXBlcy5MRVZFTF8yOgorCQkJCQkJCWtleSA9IGl0ZW1zW0lTT0RhdGEuQURNSU4xX05BTUVdICsgIjoiIC8vJE5PTi1OTFMtMSQKKwkJCQkJCQkJCSsgaXRlbXNbSVNPRGF0YS5BRE1JTjJfTkFNRV07CisJCQkJCQkJbWFwID0gbGV2ZWwyTWFwOworCQkJCQkJCWJyZWFrOworCQkJCQkJfQorCisJCQkJCQlpZiAobWFwLmNvbnRhaW5zS2V5KGtleSkpIHsKKwkJCQkJCQkvLyBDb25jYXRlbmF0ZSB0byBjdXJyZW50IHZhbHVlCisJCQkJCQkJU3RyaW5nIHZhbHVlID0gbWFwLmdldChrZXkpOworCQkJCQkJCXZhbHVlICs9IGJ1ZmZlciArICJcbiI7IC8vJE5PTi1OTFMtMSQKKwkJCQkJCQltYXAucHV0KGtleSwgdmFsdWUpOworCQkJCQkJfSBlbHNlIHsKKwkJCQkJCQltYXAucHV0KGtleSwgYnVmZmVyICsgIlxuIik7IC8vJE5PTi1OTFMtMSQKKwkJCQkJCX0KKworCQkJCQkJLy8gUnVuIGdhcmJhZ2UgY29sbGVjdGlvbgorCQkJCQkJLy9TeXN0ZW0uZ2MoKTsKKworCQkJCQl9IC8vIHdoaWxlIGxvb3AKKworCQkJCQkvLyBOb3cgd3JpdGUgdGhlIGVudHJpZXMgaW4gdGhlIGhhc2ggbWFwcyB0byB0aGUgZmlsZSA6CisKKwkJCQkJb3V0cHV0ID0gY29uc29saWRhdGVEYXRhKGxldmVsME1hcCk7CisJCQkJCWlmIChvdXRwdXQgIT0gbnVsbCkgeworCQkJCQkJR2VuVXRpbHMuYWRkRGF0YShncm91cEZpbGUsIG91dHB1dCk7CisJCQkJCX0KKworCQkJCQlvdXRwdXQgPSBjb25zb2xpZGF0ZURhdGEobGV2ZWwxTWFwKTsKKwkJCQkJaWYgKG91dHB1dCAhPSBudWxsKSB7CisJCQkJCQlHZW5VdGlscy5hZGREYXRhKGdyb3VwRmlsZSwgb3V0cHV0KTsKKwkJCQkJfQorCisJCQkJCW91dHB1dCA9IGNvbnNvbGlkYXRlRGF0YShsZXZlbDJNYXApOworCQkJCQlpZiAob3V0cHV0ICE9IG51bGwpIHsKKwkJCQkJCUdlblV0aWxzLmFkZERhdGEoZ3JvdXBGaWxlLCBvdXRwdXQpOworCQkJCQl9CisKKwkJCQkJLy8gUmVzZXQgYWxsIGxleC1yZWxhdGVkIGl0ZW1zCisJCQkJCWlmIChsZXgxRGF0YVNldCAhPSBudWxsKSB7CisJCQkJCQlsZXgxRGF0YVNldC5jbGVhcigpOworCQkJCQkJbGV4MURhdGFTZXQgPSBudWxsOworCQkJCQl9CisJCQkJCWlmIChsZXgyRGF0YVNldCAhPSBudWxsKSB7CisJCQkJCQlsZXgyRGF0YVNldC5jbGVhcigpOworCQkJCQkJbGV4MkRhdGFTZXQgPSBudWxsOworCQkJCQl9CisJCQkJCWlmIChsZXgxTGlzdCAhPSBudWxsKSB7CisJCQkJCQlsZXgxTGlzdC5jbGVhcigpOworCQkJCQkJbGV4MUxpc3QgPSBudWxsOworCQkJCQl9CisJCQkJCWlmIChsZXgyTGlzdCAhPSBudWxsKSB7CisJCQkJCQlsZXgyTGlzdC5jbGVhcigpOworCQkJCQkJbGV4Mkxpc3QgPSBudWxsOworCQkJCQl9CisKKwkJCQkJbGV4QWRtaW4xRmlsZSA9IG51bGw7CisJCQkJCWxleEFkbWluMkZpbGUgPSBudWxsOworCisJCQkJCS8vIFdlIGRvbnQgbmVlZCB0aGUgSVNPIGNvZGUgb2JqZWN0IGZvciB0aGlzIGNvdW50cnkKKwkJCQkJLy8gYW55bW9yZSwgd2UgYXJlIGRvbmUgcHJvY2Vzc2luZyBpdC4KKwkJCQkJaXNvQ29kZSA9IG51bGw7CisKKwkJCQkJLy8gQ2xvc2UgYWxsIG9wZW4gcmVzb3VyY2VzLgorCQkJCQlyZWFkZXIuY2xvc2UoKTsKKworCQkJCQkvLyBDbGVhciB0aGUgaGFzaCBtYXBzCisJCQkJCWlmIChsZXZlbDBNYXAgIT0gbnVsbCkgeworCQkJCQkJbGV2ZWwwTWFwLmNsZWFyKCk7CisJCQkJCQlsZXZlbDBNYXAgPSBudWxsOworCQkJCQl9CisKKwkJCQkJaWYgKGxldmVsMU1hcCAhPSBudWxsKSB7CisJCQkJCQlsZXZlbDFNYXAuY2xlYXIoKTsKKwkJCQkJCWxldmVsMU1hcCA9IG51bGw7CisJCQkJCX0KKworCQkJCQlpZiAobGV2ZWwyTWFwICE9IG51bGwpIHsKKwkJCQkJCWxldmVsMk1hcC5jbGVhcigpOworCQkJCQkJbGV2ZWwyTWFwID0gbnVsbDsKKwkJCQkJfQorCisJCQkJCWlmIChncm91cEZpbGUgIT0gbnVsbCkgeworCQkJCQkJZ3JvdXBGaWxlLmNsb3NlKCk7CisJCQkJCQlncm91cEZpbGUgPSBudWxsOworCQkJCQkJVXRpbExvZ2dlci5sb2dJbmZvcm1hdGlvbigiXHRcdEdlbmVyYXRlZCA6ICIgKyBmaWxlTmFtZSk7IC8vJE5PTi1OTFMtMSQKKwkJCQkJCWZpbGVOYW1lID0gbnVsbDsKKwkJCQkJfQorCQkJCX0KKworCQkJfSBjYXRjaCAoSU9FeGNlcHRpb24gZSkgeworCQkJCWUucHJpbnRTdGFja1RyYWNlKCk7CisJCQl9CisKKwkJfQorCisJfQorCisJLyoqCisJICogCisJICogR2V0IGFsbCB0aGUgdmFsdWVzIGluIHRoZSBtYXAuCisJICogCisJICogQHBhcmFtIG1hcAorCSAqICAgICAgICAgICAgYSBtYXAgb2YgbG9jYXRpb25zCisJICogCisJICogQHJldHVybiBTdHJpbmcgYSBzdHJpbmcgd2lsbCBhbGwgbG9jYXRpb25zIGdyb3VwZWQgc2VjdWVudGlhbHkuCisJICogCisJICovCisJU3RyaW5nIGNvbnNvbGlkYXRlRGF0YShIYXNoTWFwPFN0cmluZywgU3RyaW5nPiBtYXApIHsKKworCQlTdHJpbmcgdmFsdWUgPSBudWxsOworCisJCWlmIChtYXAuaXNFbXB0eSgpKSB7CisJCQlyZXR1cm4gbnVsbDsKKwkJfQorCisJCVNldDxTdHJpbmc+IGtleXMgPSBtYXAua2V5U2V0KCk7CisKKwkJSXRlcmF0b3IgaXQgPSBrZXlzLml0ZXJhdG9yKCk7CisKKwkJd2hpbGUgKGl0Lmhhc05leHQoKSkgeworCisJCQlTdHJpbmcga2V5ID0gKFN0cmluZykgaXQubmV4dCgpOworCisJCQlpZiAodmFsdWUgPT0gbnVsbCkgeworCQkJCXZhbHVlID0gbWFwLmdldChrZXkpOworCQkJfSBlbHNlIHsKKwkJCQl2YWx1ZSArPSBtYXAuZ2V0KGtleSk7CisJCQl9CisKKwkJfQorCisJCXJldHVybiB2YWx1ZTsKKwl9CisKKwkvKioKKwkgKiBUaGUgZXhlY3V0aW9uIGVudHJ5IHBvaW50CisJICogCisJICogQHBhcmFtIGFyZ3MKKwkgKi8KKwlwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CisJCS8vIGZpbmFsIGludCBJU09fMzE2Nl8xID0gMDsKKwkJLy8gZmluYWwgaW50IElTT18zMTY2XzIgPSAxOworCQkvLyBmaW5hbCBpbnQgRklYX0ZJTEUgPSAyOworCQkvLyBmaW5hbCBpbnQgVEFSR0VUX0xJU1QgPSAzOworCQkvLyBmaW5hbCBpbnQgTEVYX0RJUiA9IDQ7CisJCS8vIGZpbmFsIGludCBPVVRQVVRfRElSID0gNTsKKwkJLy8gZmluYWwgaW50IFBBUkFNUyA9IDY7CisJCS8vCisJCS8vIGlmIChhcmdzLmxlbmd0aCA8IFBBUkFNUykgeworCQkvLyBVdGlsTG9nZ2VyLmxvZ0luZm9ybWF0aW9uKCItLVdyb25nIGFyZ3VtZW50cy0tIik7IC8vJE5PTi1OTFMtMSQKKwkJLy8gU3lzdGVtLm91dAorCQkvLyAucHJpbnRsbigiXHRUbyBydW4sIHBsZWFzZSBwcm92aWRlIHRoZSBmb2xsb3dpbmcgYXJndW1lbnRzIDogIik7CisJCS8vIC8vJE5PTi1OTFMtMSQKKwkJLy8gVXRpbExvZ2dlci5sb2dJbmZvcm1hdGlvbigiXHRcdCBJU08gMzE2Ni0xIGZpbGUiKTsgLy8kTk9OLU5MUy0xJAorCQkvLyBVdGlsTG9nZ2VyLmxvZ0luZm9ybWF0aW9uKCJcdFx0IElTTyAzMTY2LTIgZmlsZSIpOyAvLyROT04tTkxTLTEkCisJCS8vIFV0aWxMb2dnZXIubG9nSW5mb3JtYXRpb24oIlx0XHQgSVNPIGZpeCBmaWxlIik7IC8vJE5PTi1OTFMtMSQKKwkJLy8gVXRpbExvZ2dlci5sb2dJbmZvcm1hdGlvbigiXHRcdCBUYXJnZXQgY291bnRyaWVzIGZpbGUiKTsgLy8kTk9OLU5MUy0xJAorCQkvLyBVdGlsTG9nZ2VyLmxvZ0luZm9ybWF0aW9uKCJcdFx0IExleGljb2dyYXBoaWMgc29ydGluZyBkaXJlY3RvcnkiKTsKKwkJLy8gLy8kTk9OLU5MUy0xJAorCQkvLyBVdGlsTG9nZ2VyLmxvZ0luZm9ybWF0aW9uKCJcdFx0IE91dHB1dCBkaXJlY3RvcnkiKTsgLy8kTk9OLU5MUy0xJAorCQkvLyByZXR1cm47CisJCS8vIH0KKwkJLy8KKwkJLy8gR3JvdXBHZW5lcmF0b3IgZ3JvdXBHZW4gPSBuZXcgR3JvdXBHZW5lcmF0b3IoYXJnc1tJU09fMzE2Nl8xXSwKKwkJLy8gYXJnc1tJU09fMzE2Nl8yXSwgYXJnc1tGSVhfRklMRV0sIGFyZ3NbVEFSR0VUX0xJU1RdLAorCQkvLyBhcmdzW0xFWF9ESVJdLCBhcmdzW09VVFBVVF9ESVJdKTsKKwkJLy8gZ3JvdXBHZW4ucnVuKCk7CisKKwkJZmluYWwgaW50IENPTkZJR19GSUxFID0gMDsKKwkJZmluYWwgaW50IFBBUkFNUyA9IDE7CisKKwkJaWYgKGFyZ3MubGVuZ3RoIDwgUEFSQU1TKSB7CisJCQlVdGlsTG9nZ2VyLmxvZ0luZm9ybWF0aW9uKCJcdFx0LS1Xcm9uZyBhcmd1bWVudHMtLSIpOyAvLyROT04tTkxTLTEkCisJCQlTeXN0ZW0ub3V0CisJCQkJCS5wcmludGxuKCJcdFx0VG8gcnVuLCBwbGVhc2UgcHJvdmlkZSB0aGUgZm9sbG93aW5nIGFyZ3VtZW50KHMpIDogIik7IC8vJE5PTi1OTFMtMSQKKwkJCVV0aWxMb2dnZXIubG9nSW5mb3JtYXRpb24oIlx0XHRcdCBDb25maWd1cmF0aW9uIGZpbGUiKTsgLy8kTk9OLU5MUy0xJAorCQkJU3lzdGVtLmV4aXQoMSk7CisJCX0KKworCQlHcm91cEdlbmVyYXRvciBnZW4gPSBuZXcgR3JvdXBHZW5lcmF0b3IoYXJnc1tDT05GSUdfRklMRV0pOworCisJCWdlbi5ydW4oKTsKKworCX0KKworfQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdXRpbGl0eS9nZW5lcmF0b3JzL0lTT0NvZGUxLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91dGlsaXR5L2dlbmVyYXRvcnMvSVNPQ29kZTEuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMTQ3NGRhCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdXRpbGl0eS9nZW5lcmF0b3JzL0lTT0NvZGUxLmphdmEKQEAgLTAsMCArMSw5MiBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkuZ2VuZXJhdG9yczsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKgorICogU1RFTSBJSSBEYXRhIE1pZ3JhdGlvbi9HZW5lcmF0aW9uIFV0aWxpdGllcyA6IEluc3RhbmNlcyBvZiB0aGlzIGNsYXNzIGFyZQorICoganVzdCBhIGNvbnZlbmllbmNlIGNvbnRhaW5lciBmb3IgSVNPMzE2Ni0xIGRhdGEuCisgKiAKKyAqLworcHVibGljIGNsYXNzIElTT0NvZGUxIHsKKworCS8qKgorCSAqIFRoZSBmb3VyIGRhdGEgaXRlbXMgZGVzY3JpYmluZyBvdXIgSVNPMzE2Ni0xIG9iamVjdAorCSAqLworCXByaXZhdGUgU3RyaW5nIGFscGhhMyA9IG51bGw7CisKKwlwcml2YXRlIFN0cmluZyBhbHBoYTIgPSBudWxsOworCisJcHJpdmF0ZSBTdHJpbmcgbnVtZXJpYyA9IG51bGw7CisKKwlwcml2YXRlIFN0cmluZyBuYW1lID0gbnVsbDsKKworCS8qKgorCSAqIENvbnN0cnVjdG9yCisJICogCisJICogQHBhcmFtIG5hbWUKKwkgKiBAcGFyYW0gbnVtZXJpYworCSAqIEBwYXJhbSBhbHBoYTIKKwkgKiBAcGFyYW0gYWxwaGEzCisJICovCisJcHVibGljIElTT0NvZGUxKFN0cmluZyBuYW1lLCBTdHJpbmcgbnVtZXJpYywgU3RyaW5nIGFscGhhMiwgU3RyaW5nIGFscGhhMykgeworCQl0aGlzLmFscGhhMiA9IGFscGhhMjsKKwkJdGhpcy5hbHBoYTMgPSBhbHBoYTM7CisJCXRoaXMubnVtZXJpYyA9IG51bWVyaWM7CisJCXRoaXMubmFtZSA9IG5hbWU7CisJfQorCisJLyoqCisJICogR2V0IHRoZSBhbHBoYSAyIGNvZGUKKwkgKiAKKwkgKiBAcmV0dXJuIHRoZSBhbHBoYSAyIGNvZGUKKwkgKi8KKwlwdWJsaWMgU3RyaW5nIGdldEFscGhhMigpIHsKKwkJcmV0dXJuIGFscGhhMjsKKwl9CisKKwkvKioKKwkgKiBHZXQgdGhlIGFscGhhIDMgY29kZQorCSAqIAorCSAqIEByZXR1cm4gdGhlIGFscGhhIDMgY29kZQorCSAqLworCXB1YmxpYyBTdHJpbmcgZ2V0QWxwaGEzKCkgeworCQlyZXR1cm4gYWxwaGEzOworCX0KKworCS8qKgorCSAqIEdldCB0aGUgbnVtZXJpYyBjb2RlCisJICogCisJICogQHJldHVybiB0aGUgbnVtZXJpYyBjb2RlCisJICovCisJcHVibGljIFN0cmluZyBnZXROdW1lcmljKCkgeworCQlyZXR1cm4gbnVtZXJpYzsKKwl9CisKKwkvKioKKwkgKiBHZXQgdGhlIG5hbWUKKwkgKiAKKwkgKiBAcmV0dXJuIHRoZSBuYW1lCisJICovCisJcHVibGljIFN0cmluZyBnZXROYW1lKCkgeworCQlyZXR1cm4gbmFtZTsKKwl9CisKKwkvKioKKwkgKiBDbGVhciB0aGUgb2JqZWN0CisJICovCisJcHVibGljIHZvaWQgY2xlYXIoKSB7CisJCXRoaXMuYWxwaGEyID0gbnVsbDsKKwkJdGhpcy5hbHBoYTMgPSBudWxsOworCQl0aGlzLm51bWVyaWMgPSBudWxsOworCQl0aGlzLm5hbWUgPSBudWxsOworCX0KK30KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3NyYy9vcmcvZWNsaXBzZS9zdGVtL3V0aWxpdHkvZ2VuZXJhdG9ycy9JU09Db2RlMi5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdXRpbGl0eS9nZW5lcmF0b3JzL0lTT0NvZGUyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDQ2NDRlNQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3NyYy9vcmcvZWNsaXBzZS9zdGVtL3V0aWxpdHkvZ2VuZXJhdG9ycy9JU09Db2RlMi5qYXZhCkBAIC0wLDAgKzEsOTQgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5LmdlbmVyYXRvcnM7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioKKyAqIFNURU0gSUkgRGF0YSBNaWdyYXRpb24vR2VuZXJhdGlvbiBVdGlsaXRpZXMgOiBJbnN0YW5jZXMgb2YgdGhpcyBjbGFzcyBhcmUKKyAqIGp1c3QgYSBjb252ZW5pZW5jZSBjb250YWluZXIgZm9yIElTTzMxNjYtMiBkYXRhLgorICogCisgKi8KKworcHVibGljIGNsYXNzIElTT0NvZGUyIHsKKworCS8qKgorCSAqIFRoZSB0aHJlZSBkYXRhIGl0ZW1zIGRlc2NyaWJpbmcgb3VyIElTTzMxNjYtMSBvYmplY3QuCisJICogCisJICovCisJcHJpdmF0ZSBTdHJpbmcgYWxwaGEyID0gbnVsbDsKKworCXByaXZhdGUgU3RyaW5nIGlkID0gbnVsbDsKKworCXByaXZhdGUgU3RyaW5nIG5hbWUgPSBudWxsOworCisJcHJpdmF0ZSBTdHJpbmcgaW5kZXggPSBudWxsOworCisJLyoqCisJICogQ29uc3RydWN0b3IKKwkgKiAKKwkgKiBAcGFyYW0gYWxwaGEyCisJICogQHBhcmFtIGlkCisJICogQHBhcmFtIG5hbWUKKwkgKiBAcGFyYW0gaW5kZXgKKwkgKi8KKwlwdWJsaWMgSVNPQ29kZTIoU3RyaW5nIGFscGhhMiwgU3RyaW5nIGlkLCBTdHJpbmcgbmFtZSwgU3RyaW5nIGluZGV4KSB7CisJCXRoaXMuYWxwaGEyID0gYWxwaGEyOworCQl0aGlzLmlkID0gaWQ7CisJCXRoaXMubmFtZSA9IG5hbWUucmVwbGFjZSgiLSIsICIgIik7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAorCQl0aGlzLmluZGV4ID0gaW5kZXg7CisJfQorCisJLyoqCisJICogR2V0IHRoZSBhbHBoYSAyIGNvZGUKKwkgKiAKKwkgKiBAcmV0dXJuIHRoZSBhbHBoYSAyIGNvZGUKKwkgKi8KKwlwdWJsaWMgU3RyaW5nIGdldEFscGhhMigpIHsKKwkJcmV0dXJuIGFscGhhMjsKKwl9CisKKwkvKioKKwkgKiBHZXQgdGhlIGlkIChpZiBhbnkpIGZvciB0aGlzIGNvdW50cnkKKwkgKiAKKwkgKiBAcmV0dXJuIHRoZSBpZAorCSAqLworCXB1YmxpYyBTdHJpbmcgZ2V0SWQoKSB7CisJCXJldHVybiBpZDsKKwl9CisKKwkvKioKKwkgKiBHZXQgdGhlIG5hbWUKKwkgKiAKKwkgKiBAcmV0dXJuIHRoZSBuYW1lCisJICovCisJcHVibGljIFN0cmluZyBnZXROYW1lKCkgeworCQlyZXR1cm4gbmFtZS50b1VwcGVyQ2FzZSgpOworCX0KKworCS8qKgorCSAqIEdldCB0aGUgcmVsYXRpdmUgcG9zaXRpb24gb2YgdGhpcyBlbnRpdHkgd2l0aGluIHRoZSBsaXN0IG9mIElTTyBjb2RlcworCSAqIAorCSAqIEByZXR1cm4gdGhpcyBjb2RlIHJlbGF0aXZlIGluZGV4CisJICovCisJcHVibGljIFN0cmluZyBnZXRJbmRleCgpIHsKKwkJcmV0dXJuIFN0cmluZy52YWx1ZU9mKGluZGV4KTsKKwl9CisKKwkvKioKKwkgKiBDbGVhciB0aGUgb2JqZWN0CisJICovCisJcHVibGljIHZvaWQgY2xlYXIoKSB7CisJCXRoaXMuYWxwaGEyID0gbnVsbDsKKwkJdGhpcy5pZCA9IG51bGw7CisJCXRoaXMubmFtZSA9IG51bGw7CisJCXRoaXMuaW5kZXggPSBudWxsOworCX0KK30KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3NyYy9vcmcvZWNsaXBzZS9zdGVtL3V0aWxpdHkvZ2VuZXJhdG9ycy9JU09EYXRhLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91dGlsaXR5L2dlbmVyYXRvcnMvSVNPRGF0YS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRlMDNlYzQKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91dGlsaXR5L2dlbmVyYXRvcnMvSVNPRGF0YS5qYXZhCkBAIC0wLDAgKzEsNDUgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5LmdlbmVyYXRvcnM7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioKKyAqIFNURU0gSUkgRGF0YSBNaWdyYXRpb24vR2VuZXJhdGlvbiBVdGlsaXRpZXMgOiBBIGhvbGRlciBmb3IgY29uc3RhbnRzIHJlbGF0ZWQKKyAqIHRvIElTTzMxNjYtMQorICogCisgKi8KKworcHVibGljIGFic3RyYWN0IGNsYXNzIElTT0RhdGEgeworCisJLyoqCisJICogU3ltYm9saWMgY29uc3RhbnRzIGRlc2NyaWJpbmcgYW4gSVNPMzE2Ni0xIE9iamVjdC4KKwkgKi8KKwkvKioKKwkgKiBBbHBoYSAzIGNvdW50cnkgY29kZQorCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEFMUEhBM19DT0RFID0gMDsKKworCS8qKgorCSAqIENvdW50cnkgbmFtZQorCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IENPVU5UUllfTkFNRSA9IDE7CisKKwkvKioKKwkgKiBBZG1pbmlzdHJhdGlvbiAxIG5hbWUKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIGludCBBRE1JTjFfTkFNRSA9IDI7CisKKwkvKioKKwkgKiBBZG1pbmlzdHJhdGlvbiAyIG5hbWUKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIGludCBBRE1JTjJfTkFNRSA9IDM7CisKK30KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3NyYy9vcmcvZWNsaXBzZS9zdGVtL3V0aWxpdHkvZ2VuZXJhdG9ycy9JbmZlY3Rvcklub2N1bGF0b3JHZW5lcmF0b3IuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3NyYy9vcmcvZWNsaXBzZS9zdGVtL3V0aWxpdHkvZ2VuZXJhdG9ycy9JbmZlY3Rvcklub2N1bGF0b3JHZW5lcmF0b3IuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZDExN2FlCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdXRpbGl0eS9nZW5lcmF0b3JzL0luZmVjdG9ySW5vY3VsYXRvckdlbmVyYXRvci5qYXZhCkBAIC0wLDAgKzEsMjA4IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS5nZW5lcmF0b3JzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA5IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGphdmEuaW8uQnVmZmVyZWRSZWFkZXI7CitpbXBvcnQgamF2YS5pby5GaWxlSW5wdXRTdHJlYW07CitpbXBvcnQgamF2YS5pby5GaWxlV3JpdGVyOworaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW1SZWFkZXI7CitpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuU3RyaW5nVG9rZW5pemVyOworCisvKioKKyAqIFRoZSBmaWxlIGltcG9ydHMgYW4gaW5mZWN0aW91cyBsb2cgZmlsZSAocGFyYW0xKSwgYSBwb3B1bGF0aW9uIGxvZyBmaWxlIChwYXJhbSAyKQorICogYW5kIHVzaW5nIHRoZSBzcGVjaWZpZWQgZGlzZWFzZSBuYW1lIChwYXJhbTMpIGl0IGdlbmVyYXRlcyBpbmZlY3RvciBhbmQgaW5vY3VsYXRvciBYTUwgZmlsZQorICogdGhhdCBjYW4gYmUgaW1wb3J0ZWQgaW50byBhIHNjZW5hcmlvIHRvIGluaXRpYWxpemUgaXQgdG8gdGhlIGluaXRpYWwgbG9nIGZpbGUKKyAqIHN0YXRlCisgKi8KK3B1YmxpYyBjbGFzcyBJbmZlY3Rvcklub2N1bGF0b3JHZW5lcmF0b3IgeworCisJLyoqCisJICogTkxTIFByZWZpeCBmb3IgSW5mZWN0b3IgbmFtZQorCSAqLworCXB1YmxpYyBzdGF0aWMgU3RyaW5nIGluZmVjdG9yUHJlZml4ID0gTWVzc2FnZXMuZ2V0U3RyaW5nKCJJbm9jdWxhdG9yLjEiKTsgLy8kTk9OLU5MUy0xJAorCQorCS8qKgorCSAqIE5MUyBQcmVmaXggZm9yIElub2N1bGF0b3IgbmFtZQorCSAqLworCXB1YmxpYyBzdGF0aWMgU3RyaW5nIGlub2N1bGF0b3JQcmVmaXggPSBNZXNzYWdlcy5nZXRTdHJpbmcoIklub2N1bGF0b3IuMiIpOyAvLyROT04tTkxTLTEkCisJCisJLyoqCisJICogCisJICogQHBhcmFtIGFyZ3MKKwkgKi8KKwlAU3VwcHJlc3NXYXJuaW5ncygibmxzIikKKwlwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmcgW10gYXJncykgeworCQlpZihhcmdzLmxlbmd0aCA8IDYpIHsKKwkJCVN5c3RlbS5lcnIucHJpbnRsbigiVXNhZ2U6IEluZmVjdG9ySW5vY3VsYXRvckdlbmVyYXRvciA8SSBmaWxlPiA8UiBmaWxlPiA8UCBmaWxlPiA8ZGlzZWFzZSBuYW1lPiA8cHJvamVjdCBuYW1lPiA8ZGVmYXVsdCBJJSAob3B0aW9uYWwpPiA8c2NhbGUgUiBmcmFjdGlvbiAob3B0aW9uYWwpPiIpOyAvLyROT04tTkxTLTEkCisJCQlTeXN0ZW0uZXhpdCgtMSk7CisJCX0KKwkJCisJCVN0cmluZyBkaXNlYXNlTmFtZSA9IGFyZ3NbM107CisJCVN0cmluZyBwcm9qZWN0TmFtZSA9IGFyZ3NbNF07CisJCisJCWJvb2xlYW4gdXNlRGVmYXVsdCA9IGZhbHNlOworCQlkb3VibGUgaXBlcmMgPSAwLjA7CisJCWRvdWJsZSByc2NhbGUgPSAxLjA7CisJCQorCQlpZihhcmdzLmxlbmd0aCA+NSkgeworCQkJdXNlRGVmYXVsdCA9IHRydWU7CisJCQlpcGVyYyA9IERvdWJsZS5wYXJzZURvdWJsZShhcmdzWzVdKTsKKwkJfQorCQlpZihhcmdzLmxlbmd0aCA+IDYpIHsKKwkJCXVzZURlZmF1bHQgPSB0cnVlOworCQkJcnNjYWxlID0gRG91YmxlLnBhcnNlRG91YmxlKGFyZ3NbNl0pOworCQl9CisJCQkKKwkJQXJyYXlMaXN0PFN0cmluZz5sb2NhdGlvbnMgPSBuZXcgQXJyYXlMaXN0PFN0cmluZz4oKTsKKwkJQXJyYXlMaXN0PERvdWJsZT5pbmZlY3Rpb3VzID0gbmV3IEFycmF5TGlzdDxEb3VibGU+KCk7CisJCUFycmF5TGlzdDxEb3VibGU+cmVjb3ZlcmVkID0gbmV3IEFycmF5TGlzdDxEb3VibGU+KCk7CisJCUFycmF5TGlzdDxEb3VibGU+cG9wdWxhdGlvbiA9IG5ldyBBcnJheUxpc3Q8RG91YmxlPigpOworCQkKKwkJdHJ5IHsKKwkJCSAvLyBSZWFkIGluZmVjdGlvdXMgZmlsZQorCQkJIEZpbGVJbnB1dFN0cmVhbSBpZmlsZSA9IG5ldyBGaWxlSW5wdXRTdHJlYW0oYXJnc1swXSk7IAorCQkgICAgIEJ1ZmZlcmVkUmVhZGVyIGlyZWFkZXIgPSBuZXcgQnVmZmVyZWRSZWFkZXIobmV3IElucHV0U3RyZWFtUmVhZGVyKGlmaWxlKSk7CisJCSAgICAgU3RyaW5nIGhlYWRlciA9IG51bGw7CisJCSAgICAgaGVhZGVyPWlyZWFkZXIucmVhZExpbmUoKTsKKwkJICAgICBpZihoZWFkZXIgPT0gbnVsbCkgeworCQkgICAgCSBTeXN0ZW0uZXJyLnByaW50bG4oIkVycm9yLCAiK2FyZ3NbMF0rIiBmaWxlIGlzIGVtcHR5ISIpOyAgLy8kTk9OLU5MUy0xJC8vJE5PTi1OTFMtMiQKKwkJICAgIAkgU3lzdGVtLmV4aXQoLTIpOworCQkgICAgIH0KKwkJICAgICBTdHJpbmdUb2tlbml6ZXIgc3QgPSBuZXcgU3RyaW5nVG9rZW5pemVyKGhlYWRlciwgIiwiKTsgLy8kTk9OLU5MUy0xJAorCQkgICAgIGludCBjb2x1bW4gPSAwOworCQkgICAgIHdoaWxlKHN0Lmhhc01vcmVUb2tlbnMoKSkgeworCQkgICAgCSBTdHJpbmcgdmFsID0gc3QubmV4dFRva2VuKCk7CisJCSAgICAJIGlmKGNvbHVtbiA8IDIpIHsrK2NvbHVtbjtjb250aW51ZTt9CisJCSAgICAJIGxvY2F0aW9ucy5hZGQodmFsLnRyaW0oKSk7CisJCSAgICAJICsrY29sdW1uOworCQkgICAgIH0KKwkJICAgIAorCQkgICAgU3RyaW5nIGRhdGEgPSBudWxsOyAKKwkJICAgIGRhdGE9aXJlYWRlci5yZWFkTGluZSgpOworCQkgICAgaWYoZGF0YSA9PSBudWxsKSB7CisJCSAgICAJIFN5c3RlbS5lcnIucHJpbnRsbigiRXJyb3IsICIrYXJnc1swXSsiIGZpbGUgaGFzIG5vIGRhdGEhIik7ICAvLyROT04tTkxTLTEkLy8kTk9OLU5MUy0yJAorCQkgICAgCSBTeXN0ZW0uZXhpdCgtMik7CisJCSAgICAgfQorCQkgICAgCisJCSAgICBzdCA9IG5ldyBTdHJpbmdUb2tlbml6ZXIoZGF0YSwgIiwiKTsgLy8kTk9OLU5MUy0xJAorCQkgICAgY29sdW1uID0gMDsKKwkJCXdoaWxlIChzdC5oYXNNb3JlVG9rZW5zKCkpIHsKKwkJCQlTdHJpbmcgdmFsID0gc3QubmV4dFRva2VuKCkudHJpbSgpOworCQkJCWlmKGNvbHVtbiA8IDIpIHsrK2NvbHVtbjtjb250aW51ZTt9IC8vIHNraXAgaXRlcmF0aW9uLCB0aW1lCisJCQkJaW5mZWN0aW91cy5hZGQoRG91YmxlLnBhcnNlRG91YmxlKHZhbCkpOworCQkJICAgICsrIGNvbHVtbjsKKwkJICAgIH0gLy8gcmVhZCB0b2tlbnMKKwkJICAgIAorCQkgICAgaXJlYWRlci5jbG9zZSgpOworCQkgICAgCisJCSAgICAvLyBSZWFkIHJlY292ZXJlZCBmaWxlCisJCSAgICBpZmlsZSA9IG5ldyBGaWxlSW5wdXRTdHJlYW0oYXJnc1sxXSk7IAorCQkgICAgaXJlYWRlciA9IG5ldyBCdWZmZXJlZFJlYWRlcihuZXcgSW5wdXRTdHJlYW1SZWFkZXIoaWZpbGUpKTsKKwkJICAgIGhlYWRlciA9IG51bGw7CisJCSAgICBoZWFkZXI9aXJlYWRlci5yZWFkTGluZSgpOworCQkgICAgaWYoaGVhZGVyID09IG51bGwpIHsKKwkJICAgICBTeXN0ZW0uZXJyLnByaW50bG4oIkVycm9yLCAiK2FyZ3NbMV0rIiBmaWxlIGlzIGVtcHR5ISIpOyAvLyROT04tTkxTLTEkLy8kTk9OLU5MUy0yJAorCQkgICAgIFN5c3RlbS5leGl0KC0yKTsKKwkJICAgIH0KKwkJICAgIAorCQkgICAgZGF0YSA9IG51bGw7IAorCQkgICAgZGF0YT1pcmVhZGVyLnJlYWRMaW5lKCk7CisJCSAgICBpZihkYXRhID09IG51bGwpIHsKKwkJICAgIAkgU3lzdGVtLmVyci5wcmludGxuKCJFcnJvciwgIithcmdzWzFdKyIgZmlsZSBoYXMgbm8gZGF0YSEiKTsgLy8kTk9OLU5MUy0xJC8vJE5PTi1OTFMtMiQKKwkJICAgIAkgU3lzdGVtLmV4aXQoLTIpOworCQkgICAgIH0KKwkJICAgIAorCQkgICAgc3QgPSBuZXcgU3RyaW5nVG9rZW5pemVyKGRhdGEsICIsIik7IC8vJE5PTi1OTFMtMSQKKwkJICAgIGNvbHVtbiA9IDA7CisJCQl3aGlsZSAoc3QuaGFzTW9yZVRva2VucygpKSB7CisJCQkJU3RyaW5nIHZhbCA9IHN0Lm5leHRUb2tlbigpLnRyaW0oKTsKKwkJCQlpZihjb2x1bW4gPCAyKSB7Kytjb2x1bW47Y29udGludWU7fSAvLyBza2lwIGl0ZXJhdGlvbiwgdGltZQorCQkJCXJlY292ZXJlZC5hZGQoRG91YmxlLnBhcnNlRG91YmxlKHZhbCkpOworCQkJICAgICsrIGNvbHVtbjsKKwkJICAgIH0gLy8gcmVhZCB0b2tlbnMKKwkJICAgIAorCQkgICAgaXJlYWRlci5jbG9zZSgpOworCQkgICAgCisJCSAgICAvLyBSZWFkIHBvcHVsYXRpb24gZmlsZQorCQkgICAgaWZpbGUgPSBuZXcgRmlsZUlucHV0U3RyZWFtKGFyZ3NbMl0pOyAKKwkJICAgIGlyZWFkZXIgPSBuZXcgQnVmZmVyZWRSZWFkZXIobmV3IElucHV0U3RyZWFtUmVhZGVyKGlmaWxlKSk7CisJCSAgICBoZWFkZXIgPSBudWxsOworCQkgICAgaGVhZGVyPWlyZWFkZXIucmVhZExpbmUoKTsKKwkJICAgIGlmKGhlYWRlciA9PSBudWxsKSB7CisJCSAgICAgU3lzdGVtLmVyci5wcmludGxuKCJFcnJvciwgIithcmdzWzJdKyIgZmlsZSBpcyBlbXB0eSEiKTsgLy8kTk9OLU5MUy0xJC8vJE5PTi1OTFMtMiQKKwkJICAgICBTeXN0ZW0uZXhpdCgtMik7CisJCSAgICB9CisJCSAgICAKKwkJICAgIGRhdGEgPSBudWxsOyAKKwkJICAgIGRhdGE9aXJlYWRlci5yZWFkTGluZSgpOworCQkgICAgaWYoZGF0YSA9PSBudWxsKSB7CisJCSAgICAJIFN5c3RlbS5lcnIucHJpbnRsbigiRXJyb3IsICIrYXJnc1syXSsiIGZpbGUgaGFzIG5vIGRhdGEhIik7IC8vJE5PTi1OTFMtMSQvLyROT04tTkxTLTIkCisJCSAgICAJIFN5c3RlbS5leGl0KC0yKTsKKwkJICAgICB9CisJCSAgICAKKwkJICAgIHN0ID0gbmV3IFN0cmluZ1Rva2VuaXplcihkYXRhLCAiLCIpOyAvLyROT04tTkxTLTEkCisJCSAgICBjb2x1bW4gPSAwOworCQkJd2hpbGUgKHN0Lmhhc01vcmVUb2tlbnMoKSkgeworCQkJCVN0cmluZyB2YWwgPSBzdC5uZXh0VG9rZW4oKS50cmltKCk7CisJCQkJaWYoY29sdW1uIDwgMikgeysrY29sdW1uO2NvbnRpbnVlO30gLy8gc2tpcCBpdGVyYXRpb24sIHRpbWUKKwkJCQlwb3B1bGF0aW9uLmFkZChEb3VibGUucGFyc2VEb3VibGUodmFsKSk7CisJCQkgICAgKysgY29sdW1uOworCQkgICAgfSAvLyByZWFkIHRva2VucworCQkgICAgCisJCSAgICBpcmVhZGVyLmNsb3NlKCk7CisJCSAgICAKKwkJICAgIAorCQkgICAgaW50IGluZGV4ID0gMDsKKwkJICAgIC8vIFdyaXRlCisJCSAgICBmb3IoU3RyaW5nIGxvY2F0aW9uOmxvY2F0aW9ucykgeworCQkgICAgCVN0cmluZyBpbmZlY3RvcmZpbGVuYW1lID0gaW5mZWN0b3JQcmVmaXgraW5kZXg7CisJCSAgICAJU3RyaW5nIGlub2N1bGF0b3JmaWxlbmFtZSA9IGlub2N1bGF0b3JQcmVmaXgraW5kZXg7CisJCSAgICAJRmlsZVdyaXRlciBpbmZlY3RvcmZ3ID0gbmV3IEZpbGVXcml0ZXIoaW5mZWN0b3JmaWxlbmFtZSsiLnN0YW5kYXJkIik7CisJCSAgICAJRmlsZVdyaXRlciBpbm9jdWxhdG9yZncgPSBuZXcgRmlsZVdyaXRlcihpbm9jdWxhdG9yZmlsZW5hbWUrIi5zdGFuZGFyZCIpOworCQkgICAgCQorCQkgICAgCWRvdWJsZSBpbmZkID0gaW5mZWN0aW91cy5nZXQoaW5kZXgpOworCQkgICAgCWlmKGluZmQgPT0gMC4wICYmIHVzZURlZmF1bHQpIHsKKwkJICAgIAkJaW5mZCA9IHBvcHVsYXRpb24uZ2V0KGluZGV4KSppcGVyYy8xMDAuMDsKKwkJICAgIAl9CisJCSAgICAJCisJCSAgICAJaW5mZWN0b3Jmdy53cml0ZSgiPD94bWwgdmVyc2lvbj1cIjEuMFwiIGVuY29kaW5nPVwiQVNDSUlcIj8+XG4iKTsKKwkJICAgIAlpbmZlY3RvcmZ3LndyaXRlKCI8b3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkOlNJSW5mZWN0b3IgeG1pOnZlcnNpb249XCIyLjBcIiB4bWxuczp4bWk9XCJodHRwOi8vd3d3Lm9tZy5vcmcvWE1JXCIgeG1sbnM6b3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkPVwiaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvc3RhbmRhcmQuZWNvcmVcIiAiKTsKKwkJICAgIAlpbmZlY3RvcmZ3LndyaXRlKCIgdVJJPVwicGxhdGZvcm06L3Jlc291cmNlLyIrcHJvamVjdE5hbWUrIi9kZWNvcmF0b3JzLyIraW5mZWN0b3JmaWxlbmFtZSsiLnN0YW5kYXJkXCIgdHlwZVVSST1cInN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9pZGVudGlmaWFibGU4M1wiICIpOworCQkgICAgCWluZmVjdG9yZncud3JpdGUoIiBkaXNlYXNlTmFtZT1cIiIrZGlzZWFzZU5hbWUrIlwiIHRhcmdldElTT0tleT1cIiIrbG9jYXRpb24rIlwiIHBvcHVsYXRpb25JZGVudGlmaWVyPVwiaHVtYW5cIiBpbmZlY3Rpb3VzQ291bnQ9XCIiK2luZmQrIlwiPlxuIik7CisJCSAgICAJaW5mZWN0b3Jmdy53cml0ZSgiIDxkdWJsaW5Db3JlIHRpdGxlPVwiSW5mZWN0ICIraW5mZCsiICZxdW90O2h1bWFuJnF1b3Q7IHBvcHVsYXRpb24gbWVtYmVycyB3aXRoIHRoZSBkaXNlYXNlICZxdW90OyIrZGlzZWFzZU5hbWUrIiZxdW90OyBhdCB0aGUgbG9jYXRpb24gJnF1b3Q7Iitsb2NhdGlvbisiJnF1b3Q7LlwiIGlkZW50aWZpZXI9XCJwbGF0Zm9ybTovcmVzb3VyY2UvIitwcm9qZWN0TmFtZSsiL2RlY29yYXRvcnMvIitpbmZlY3RvcmZpbGVuYW1lKyIuc3RhbmRhcmRcIiBkZXNjcmlwdGlvbj1cIkluZmVjdCAiK2luZmQrIiAmcXVvdDtodW1hbiZxdW90OyBwb3B1bGF0aW9uIG1lbWJlcnMgd2l0aCB0aGUgZGlzZWFzZSAmcXVvdDsiK2Rpc2Vhc2VOYW1lKyImcXVvdDsgYXQgdGhlIGxvY2F0aW9uICZxdW90OyIrbG9jYXRpb24rIiZxdW90OyAoQ0gtR04pLlwiIGNyZWF0b3I9XCJnZW5lcmF0ZWRcIiBmb3JtYXQ9XCJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9zdGFuZGFyZC5lY29yZVwiIHR5cGU9XCJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vaWRlbnRpZmlhYmxlODNcIiBjcmVhdGVkPVwiMjAwOC0xMi0xN1wiLz5cbiIpOworCQkgICAgCWluZmVjdG9yZncud3JpdGUoIjwvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkOlNJSW5mZWN0b3I+XG4iKTsKKwkJICAgIAlpbmZlY3RvcmZ3LmZsdXNoKCk7CisJCSAgICAJaW5mZWN0b3Jmdy5jbG9zZSgpOworCQkgICAgCQorCQkgICAgCWRvdWJsZSBpbm9jdWxhdGVkUGVyY2VudGFnZSA9IDEwMC4wKnJlY292ZXJlZC5nZXQoaW5kZXgpL3BvcHVsYXRpb24uZ2V0KGluZGV4KTsKKwkJICAgIAlpbm9jdWxhdGVkUGVyY2VudGFnZSA9IGlub2N1bGF0ZWRQZXJjZW50YWdlICogcnNjYWxlOworCQkgICAgCVV0aWxMb2dnZXIubG9nSW5mb3JtYXRpb24oInJfc2NhbGU6Iityc2NhbGUpOworCQkgICAgCQorCQkgICAgCWlub2N1bGF0b3Jmdy53cml0ZSgiPD94bWwgdmVyc2lvbj1cIjEuMFwiIGVuY29kaW5nPVwiQVNDSUlcIj8+XG4iKTsKKwkJICAgIAlpbm9jdWxhdG9yZncud3JpdGUoIjxvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQ6U0lSSW5vY3VsYXRvciB4bWk6dmVyc2lvbj1cIjIuMFwiIHhtbG5zOnhtaT1cImh0dHA6Ly93d3cub21nLm9yZy9YTUlcIiB4bWxuczpvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQ9XCJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9zdGFuZGFyZC5lY29yZVwiICIpOworCQkgICAgCWlub2N1bGF0b3Jmdy53cml0ZSgiIHVSST1cInBsYXRmb3JtOi9yZXNvdXJjZS8iK3Byb2plY3ROYW1lKyIvZGVjb3JhdG9ycy8iK2lub2N1bGF0b3JmaWxlbmFtZSsiLnN0YW5kYXJkXCIgdHlwZVVSST1cInN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9pZGVudGlmaWFibGU5XCIgIik7CisJCSAgICAJaW5vY3VsYXRvcmZ3LndyaXRlKCIgZGlzZWFzZU5hbWU9XCIiK2Rpc2Vhc2VOYW1lKyJcIiB0YXJnZXRJU09LZXk9XCIiK2xvY2F0aW9uKyJcIiBwb3B1bGF0aW9uSWRlbnRpZmllcj1cImh1bWFuXCIgaW5mZWN0aW91c0NvdW50PVwiMFwiIGlub2N1bGF0ZWRQZXJjZW50YWdlPVwiIitpbm9jdWxhdGVkUGVyY2VudGFnZSsiXCI+XG4iKTsKKwkJICAgIAlpbm9jdWxhdG9yZncud3JpdGUoIiA8ZHVibGluQ29yZSB0aXRsZT1cIklub2N1bGF0ZSAiK2lub2N1bGF0ZWRQZXJjZW50YWdlKyIgJnF1b3Q7aHVtYW4mcXVvdDsgcGVyY2VudCBvZiBwb3B1bGF0aW9uIGFnYWluc3QgdGhlIGRpc2Vhc2UgJnF1b3Q7IitkaXNlYXNlTmFtZSsiJnF1b3Q7IGF0IHRoZSBsb2NhdGlvbiAmcXVvdDsiK2xvY2F0aW9uKyImcXVvdDsuXCIgaWRlbnRpZmllcj1cInBsYXRmb3JtOi9yZXNvdXJjZS8iK3Byb2plY3ROYW1lKyIvZGVjb3JhdG9ycy8iK2lub2N1bGF0b3JmaWxlbmFtZSsiLnN0YW5kYXJkXCIgZGVzY3JpcHRpb249XCJJbm9jdWxhdGUgIitpbm9jdWxhdGVkUGVyY2VudGFnZSsiICZxdW90O2h1bWFuJnF1b3Q7IHBlcmNlbnQgb2YgcG9wdWxhdGlvbiBhZ2FpbnN0IHRoZSBkaXNlYXNlICZxdW90OyIrZGlzZWFzZU5hbWUrIiZxdW90OyBhdCB0aGUgbG9jYXRpb24gJnF1b3Q7Iitsb2NhdGlvbisiJnF1b3Q7IC5cIiBjcmVhdG9yPVwiZ2VuZXJhdGVkXCIgZm9ybWF0PVwiaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvc3RhbmRhcmQuZWNvcmVcIiB0eXBlPVwic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL2lkZW50aWZpYWJsZTlcIiBjcmVhdGVkPVwiMjAwOC0xMi0xN1wiLz5cbiIpOworCQkgICAgCWlub2N1bGF0b3Jmdy53cml0ZSgiPC9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQ6U0lSSW5vY3VsYXRvcj5cbiIpOworCQkgICAgCWlub2N1bGF0b3Jmdy5mbHVzaCgpOworCQkgICAgCWlub2N1bGF0b3Jmdy5jbG9zZSgpOworCQkgICAgCQorCQkgICAgCQorCQkgICAgCSsraW5kZXg7CisJCSAgICB9CisJCX0gY2F0Y2goRXhjZXB0aW9uIGUpIHsKKwkJCWUucHJpbnRTdGFja1RyYWNlKCk7CisJCX0KKwkJCisJfQorfQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdXRpbGl0eS9nZW5lcmF0b3JzL0xleDFEYXRhLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91dGlsaXR5L2dlbmVyYXRvcnMvTGV4MURhdGEuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YWYwNzNjCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdXRpbGl0eS9nZW5lcmF0b3JzL0xleDFEYXRhLmphdmEKQEAgLTAsMCArMSw1MCBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkuZ2VuZXJhdG9yczsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKgorICogU1RFTSBJSSBEYXRhIE1pZ3JhdGlvbi9HZW5lcmF0aW9uIFV0aWxpdGllcyA6IEEgaG9sZGVyIGZvciBjb25zdGFudHMgcmVsYXRlZAorICogdG8gTGV4MWRhdGEgb2JqZWN0cworICogCisgKi8KK3B1YmxpYyBjbGFzcyBMZXgxRGF0YSB7CisKKwkvKioKKwkgKiBTeW1ib2xpYyBjb25zdGFudHMgZGVzY3JpYmluZyBhbiBMZXgxRGF0YSBPYmplY3QuCisJICovCisKKwkvKioKKwkgKiBUb3RhbCBudW1iZXIgb2Ygc3ltYm9saWMgY29uc3RhbnRzIGZvciBsZXggMSBkYXRhIG9iamVjdHMuCisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgQ09OU1RBTlRTID0gNDsKKworCS8qKgorCSAqIGluZGV4IG9mIHRoaXMgZWxlbWVudCBpbiBsZXhpY29ncmFwaGljYWxseSBzb3J0ZWQgc2VxdWVuY2UuCisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgSU5ERVggPSAwOworCisJLyoqCisJICogZGVzY3JpcHRvcgorCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IERFU0MgPSAxOworCisJLyoqCisJICogQWxwaGEgMiBjb2RlCisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgQUxQSEEyID0gMjsKKworCS8qKgorCSAqIEFkbWluaXN0cmF0aW9uIDEgbmFtZQorCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEFETUlOMSA9IDM7CisKK30KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3NyYy9vcmcvZWNsaXBzZS9zdGVtL3V0aWxpdHkvZ2VuZXJhdG9ycy9MZXgxT2JqLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91dGlsaXR5L2dlbmVyYXRvcnMvTGV4MU9iai5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE2MWMyOGIKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91dGlsaXR5L2dlbmVyYXRvcnMvTGV4MU9iai5qYXZhCkBAIC0wLDAgKzEsMTEyIEBACisvKioKKyAqIAorICovCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS5nZW5lcmF0b3JzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzCisgKiBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mCisgKiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMKKyAqIGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICogCisgKiBDb250cmlidXRvcnM6IElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqCisgKiAKKyAqIFNURU0gSUkgRGF0YSBNaWdyYXRpb24vR2VuZXJhdGlvbiBVdGlsaXRpZXMgOiBJbnN0YW5jZXMgb2YgdGhpcyBjbGFzcworICogcmVwcmVzZW50IGEgTGV4MSBvYmplY3Qgd2hpY2ggaXMgbm90IG11Y2ggbW9yZSB0aGFuIGEgaG9sZGVyIG9mIGRhdGEgZm9yIGEKKyAqIGdpdmVuIGxvY2F0aW9uIGR1cmluZyBhIGxleGljb2dyYXBoaWMgc29ydGluZyBvZiBsZXZlbCAxIGFkbWluaXN0cmF0aW9ucy4KKyAqIAorICovCitwdWJsaWMgY2xhc3MgTGV4MU9iaiB7CisKKwkvKioKKwkgKiBUaGUgZm91ciBkYXRhIGl0ZW1zIGRlc2NyaWJpbmcgb3VyIElTTzMxNjYtMSBvYmplY3QKKwkgKi8KKwlwcml2YXRlIFN0cmluZyBpbmRleCA9IG51bGw7CisKKwlwcml2YXRlIFN0cmluZyBkZXNjID0gbnVsbDsKKworCXByaXZhdGUgU3RyaW5nIGFscGhhMiA9IG51bGw7CisKKwlwcml2YXRlIFN0cmluZyBhZG1pbjEgPSBudWxsOworCisJLyoqCisJICogQ29uc3RydWN0b3IKKwkgKiAKKwkgKiBAcGFyYW0gaW5kZXgKKwkgKiBAcGFyYW0gZGVzYworCSAqIEBwYXJhbSBhbHBoYTIKKwkgKiBAcGFyYW0gYWRtaW4xCisJICovCisJcHVibGljIExleDFPYmooU3RyaW5nIGluZGV4LCBTdHJpbmcgZGVzYywgU3RyaW5nIGFscGhhMiwgU3RyaW5nIGFkbWluMSkgeworCQl0aGlzLmluZGV4ID0gaW5kZXg7CisJCXRoaXMuZGVzYyA9IGRlc2M7CisJCXRoaXMuYWxwaGEyID0gYWxwaGEyOworCQl0aGlzLmFkbWluMSA9IGFkbWluMTsKKwl9CisKKwkvKioKKwkgKiBHZXQgdGhlIGFscGhhIDIgY29kZQorCSAqIAorCSAqIEByZXR1cm4gdGhlIGFscGhhIDIgY29kZQorCSAqLworCXB1YmxpYyBTdHJpbmcgZ2V0QWxwaGEyKCkgeworCQlyZXR1cm4gYWxwaGEyOworCX0KKworCS8qKgorCSAqIEdldCB0aGUgYWRtaW4gMiBjb2RlCisJICogCisJICogQHJldHVybiB0aGUgYWxwaGEgMiBjb2RlCisJICovCisJcHVibGljIFN0cmluZyBnZXRBZG1pbjEoKSB7CisJCXJldHVybiBhZG1pbjEudG9VcHBlckNhc2UoKTsKKwl9CisKKwkvKioKKwkgKiBHZXQgdGhlIGluZGV4CisJICogCisJICogQHJldHVybiB0aGUgbnVtZXJpYyBjb2RlCisJICovCisJcHVibGljIGludCBnZXRJbmRleCgpIHsKKwkJcmV0dXJuIEludGVnZXIucGFyc2VJbnQoaW5kZXgpOworCX0KKworCS8qKgorCSAqIEdldCB0aGUgaW5kZXggcGFkZGVkIHdpdGggYXMgbWFueSBsZWZ0bW9zdCB6ZXJvZXMgYXMgbmVjZXNzYXJ5LgorCSAqIAorCSAqIEByZXR1cm4gdGhlIGluZGV4IHBhZGRlZCB3aXRoIGxlZnRtb3N0IHplcm9lcworCSAqLworCXB1YmxpYyBTdHJpbmcgZ2V0Rm9ybWF0dGVkSW5kZXgoKSB7CisJCWlmIChpbmRleC5sZW5ndGgoKSA8IDIpIHsKKwkJCWluZGV4ID0gIjAiICsgaW5kZXg7IC8vJE5PTi1OTFMtMSQKKwkJfQorCQlyZXR1cm4gaW5kZXg7CisJfQorCisJLyoqCisJICogR2V0IHRoZSBkZXNjcmlwdG9yCisJICogCisJICogQHJldHVybiB0aGUgZGVzY3JpcHRvcgorCSAqLworCXB1YmxpYyBTdHJpbmcgZ2V0RGVzY3JpcHRvcigpIHsKKwkJcmV0dXJuIGRlc2M7CisJfQorCisJLyoqCisJICogR2V0IHRoZSBJRCBmb3IgdGhlIGFkbWluMSBGb3IgZXhhbXBsZSwgZm9yIFVTLUFLLCB3ZSB3YW50IHRvIGdldCBBSyB3aGljaAorCSAqIGlzIHRoZSBJRCBmb3IgdGhlIGFkbWluMSBhcmVhLgorCSAqIAorCSAqIEByZXR1cm4gdGhlIHN1YnN0cmluZyB3aXRoIHRoZSBJRC4KKwkgKi8KKwlwdWJsaWMgU3RyaW5nIGdldElEKCkgeworCQlpbnQgaHlwaGVuID0gZGVzYy5pbmRleE9mKCItIik7IC8vJE5PTi1OTFMtMSQKKwkJaWYgKChoeXBoZW4gKyAxKSA8IGRlc2MubGVuZ3RoKCkpIHsKKwkJCXJldHVybiBkZXNjLnN1YnN0cmluZyhoeXBoZW4gKyAxKTsKKwkJfQorCQlyZXR1cm4gZGVzYzsKKwl9CisKK30KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3NyYy9vcmcvZWNsaXBzZS9zdGVtL3V0aWxpdHkvZ2VuZXJhdG9ycy9MZXgyRGF0YS5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdXRpbGl0eS9nZW5lcmF0b3JzL0xleDJEYXRhLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzFkNDVhZQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3NyYy9vcmcvZWNsaXBzZS9zdGVtL3V0aWxpdHkvZ2VuZXJhdG9ycy9MZXgyRGF0YS5qYXZhCkBAIC0wLDAgKzEsNTggQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5LmdlbmVyYXRvcnM7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMKKyAqIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YKKyAqIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcworICogYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKiAKKyAqIENvbnRyaWJ1dG9yczogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioKKyAqIFNURU0gSUkgRGF0YSBNaWdyYXRpb24vR2VuZXJhdGlvbiBVdGlsaXRpZXMgOiBBIGhvbGRlciBmb3IgY29uc3RhbnRzIHJlbGF0ZWQKKyAqIHRvIExleDJkYXRhIG9iamVjdHMuCisgKiAKKyAqLworcHVibGljIGNsYXNzIExleDJEYXRhIHsKKworCS8qKgorCSAqIFN5bWJvbGljIGNvbnN0YW50cyBkZXNjcmliaW5nIGFuIExleDFEYXRhIE9iamVjdC4KKwkgKi8KKworCS8qKgorCSAqIFRvdGFsIG51bWJlciBvZiBzeW1ib2xpYyBjb25zdGFudHMgZm9yIGxleCAxIGRhdGEgb2JqZWN0cy4KKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIGludCBDT05TVEFOVFMgPSA2OworCisJLyoqCisJICogaW5kZXggb2YgdGhpcyBlbGVtZW50IGluIGxleGljb2dyYXBoaWNhbGx5IHNvcnRlZCBzZXF1ZW5jZS4KKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIGludCBJTkRFWCA9IDA7CisKKwkvKioKKwkgKiBBbHBoYSAyIGNvZGUKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIGludCBBTFBIQTIgPSAxOworCisJLyoqCisJICogQWxwaGEgMyBjb2RlCisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgQUxQSEEzID0gMjsKKworCS8qKgorCSAqIENvdW50cnkKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIGludCBDT1VOVFJZID0gMzsKKworCS8qKgorCSAqIEFkbWluaXN0cmF0aW9uIDEgbmFtZQorCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEFETUlOMSA9IDQ7CisKKwkvKioKKwkgKiBBZG1pbiAyIG5hbWUKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIGludCBBRE1JTjIgPSA1OworCit9CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91dGlsaXR5L2dlbmVyYXRvcnMvTGV4Mk9iai5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdXRpbGl0eS9nZW5lcmF0b3JzL0xleDJPYmouamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mM2NlMDI1Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdXRpbGl0eS9nZW5lcmF0b3JzL0xleDJPYmouamF2YQpAQCAtMCwwICsxLDE0NCBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkuZ2VuZXJhdG9yczsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcworICogcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZgorICogdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzCisgKiBhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqIAorICogQ29udHJpYnV0b3JzOiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKgorICogCisgKiBTVEVNIElJIERhdGEgTWlncmF0aW9uL0dlbmVyYXRpb24gVXRpbGl0aWVzIDogSW5zdGFuY2VzIG9mIHRoaXMgY2xhc3MKKyAqIHJlcHJlc2VudCBhIExleDEgb2JqZWN0IHdoaWNoIGlzIG5vdCBtdWNoIG1vcmUgdGhhbiBhIGhvbGRlciBvZiBkYXRhIGZvciBhCisgKiBnaXZlbiBsb2NhdGlvbiBkdXJpbmcgYSBsZXhpY29ncmFwaGljIHNvcnRpbmcgb2YgbGV2ZWwgMiBhZG1pbmlzdHJhdGlvbnMuCisgKiAKKyAqLworCitwdWJsaWMgY2xhc3MgTGV4Mk9iaiB7CisKKwkvKioKKwkgKiBUaGUgZm91ciBkYXRhIGl0ZW1zIGRlc2NyaWJpbmcgb3VyIElTTzMxNjYtMSBvYmplY3QKKwkgKi8KKwlwcml2YXRlIFN0cmluZyBpbmRleCA9IG51bGw7CisKKwlwcml2YXRlIFN0cmluZyBhbHBoYTIgPSBudWxsOworCisJcHJpdmF0ZSBTdHJpbmcgYWRtaW4yID0gbnVsbDsKKworCXByaXZhdGUgU3RyaW5nIGFscGhhMyA9IG51bGw7CisKKwlwcml2YXRlIFN0cmluZyBhZG1pbjEgPSBudWxsOworCisJcHJpdmF0ZSBTdHJpbmcgY291bnRyeSA9IG51bGw7CisKKwkvKioKKwkgKiBDb25zdHJ1Y3RvcgorCSAqIAorCSAqIEBwYXJhbSBpbmRleAorCSAqIEBwYXJhbSBhbHBoYTIKKwkgKiBAcGFyYW0gYWxwaGEzCisJICogQHBhcmFtIGNvdW50cnkKKwkgKiBAcGFyYW0gYWRtaW4xCisJICogQHBhcmFtIGFkbWluMgorCSAqLworCXB1YmxpYyBMZXgyT2JqKFN0cmluZyBpbmRleCwgU3RyaW5nIGFscGhhMiwgU3RyaW5nIGFscGhhMywgU3RyaW5nIGNvdW50cnksCisJCQlTdHJpbmcgYWRtaW4xLCBTdHJpbmcgYWRtaW4yKSB7CisJCXRoaXMuaW5kZXggPSBpbmRleDsKKwkJdGhpcy5hbHBoYTIgPSBhbHBoYTI7CisJCXRoaXMuYWRtaW4yID0gYWRtaW4yOworCQl0aGlzLmFkbWluMSA9IGFkbWluMTsKKwkJdGhpcy5hbHBoYTMgPSBhbHBoYTM7CisJCXRoaXMuY291bnRyeSA9IGNvdW50cnk7CisJfQorCisJLyoqCisJICogR2V0IHRoZSBjb3VudHJ5IGNvZGUKKwkgKiAKKwkgKiBAcmV0dXJuIHRoZSBjb3VudHJ5IGNvZGUKKwkgKi8KKwlwdWJsaWMgU3RyaW5nIGdldENvdW50cnkoKSB7CisJCXJldHVybiBjb3VudHJ5OworCX0KKworCS8qKgorCSAqIEdldCB0aGUgYWxwaGEgMSBjb2RlCisJICogCisJICogQHJldHVybiB0aGUgYWxwaGEgMSBjb2RlCisJICovCisJcHVibGljIFN0cmluZyBnZXRBbHBoYTMoKSB7CisJCXJldHVybiBhbHBoYTM7CisJfQorCisJLyoqCisJICogR2V0IHRoZSBhbHBoYSAyIGNvZGUKKwkgKiAKKwkgKiBAcmV0dXJuIHRoZSBhbHBoYSAyIGNvZGUKKwkgKi8KKwlwdWJsaWMgU3RyaW5nIGdldEFscGhhMigpIHsKKwkJcmV0dXJuIGFscGhhMjsKKwl9CisKKwkvKioKKwkgKiBHZXQgdGhlIGFkbWluIDIgY29kZQorCSAqIAorCSAqIEByZXR1cm4gdGhlIGFscGhhIDIgY29kZQorCSAqLworCXB1YmxpYyBTdHJpbmcgZ2V0QWRtaW4yKCkgeworCQlyZXR1cm4gYWRtaW4yLnRvVXBwZXJDYXNlKCk7CisJfQorCisJLyoqCisJICogR2V0IHRoZSBhZG1pbiAxIGNvZGUKKwkgKiAKKwkgKiBAcmV0dXJuIHRoZSBhIGNvZGUKKwkgKi8KKwlwdWJsaWMgU3RyaW5nIGdldEFkbWluMSgpIHsKKwkJcmV0dXJuIGFkbWluMS50b1VwcGVyQ2FzZSgpOworCX0KKworCS8qKgorCSAqIEdldCB0aGUgaW5kZXgKKwkgKiAKKwkgKiBAcmV0dXJuIHRoZSBudW1lcmljIGNvZGUKKwkgKi8KKwlwdWJsaWMgaW50IGdldEluZGV4KCkgeworCQlyZXR1cm4gSW50ZWdlci5wYXJzZUludChpbmRleCk7CisJfQorCisJLyoqCisJICogR2V0IHRoZSBpbmRleCBwYWRkZWQgd2l0aCBhcyBtYW55IGxlZnRtb3N0IHplcm9lcyBhcyBuZWNlc3NhcnkuCisJICogCisJICogQHJldHVybiB0aGUgaW5kZXggcGFkZGVkIHdpdGggbGVmdG1vc3QgemVyb2VzCisJICovCisJcHVibGljIFN0cmluZyBnZXRGb3JtYXR0ZWRJbmRleCgpIHsKKwkJZmluYWwgaW50IE1JTlNJWkUgPSA0OworCQlpZiAoaW5kZXgubGVuZ3RoKCkgPCBNSU5TSVpFKSB7CisJCQlpbnQgcGFkZGluZyA9IE1JTlNJWkUgLSBpbmRleC5sZW5ndGgoKTsKKwkJCWZvciAoaW50IGkgPSAwOyBpIDwgcGFkZGluZzsgaSsrKSB7CisJCQkJaW5kZXggPSAiMCIgKyBpbmRleDsgLy8kTk9OLU5MUy0xJAorCQkJfQorCQl9CisJCXJldHVybiBpbmRleDsKKwl9CisKKwkvKioKKwkgKiBHZXQgdGhlIGluZGV4IHBhZGRlZCB3aXRoIGFzIG1hbnkgbGVmdG1vc3QgemVyb2VzIGFzIG5lY2Vzc2FyeS4gU3BlY2lhbAorCSAqIGNhc2UgZm9yIHRoZSBVU0EgOiBhdCBtb3N0IHRocmVlIGNoYXJhY3RlcnMgaW5zdGVhZGQKKwkgKiAKKwkgKiBAcmV0dXJuIHRoZSBpbmRleCBwYWRkZWQgd2l0aCBsZWZ0bW9zdCB6ZXJvZXMKKwkgKi8KKwlwdWJsaWMgU3RyaW5nIGdldEZvcm1hdHRlZEluZGV4VVNBKCkgeworCQlmaW5hbCBpbnQgTUlOU0laRSA9IDM7CisJCWlmIChpbmRleC5sZW5ndGgoKSA8IE1JTlNJWkUpIHsKKwkJCWludCBwYWRkaW5nID0gTUlOU0laRSAtIGluZGV4Lmxlbmd0aCgpOworCQkJZm9yIChpbnQgaSA9IDA7IGkgPCBwYWRkaW5nOyBpKyspIHsKKwkJCQlpbmRleCA9ICIwIiArIGluZGV4OyAvLyROT04tTkxTLTEkCisJCQl9CisJCX0KKwkJcmV0dXJuIGluZGV4OworCX0KKworfQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdXRpbGl0eS9nZW5lcmF0b3JzL01hcFJlYWRlci5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdXRpbGl0eS9nZW5lcmF0b3JzL01hcFJlYWRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhjNDQ4ZTEKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91dGlsaXR5L2dlbmVyYXRvcnMvTWFwUmVhZGVyLmphdmEKQEAgLTAsMCArMSwyNDggQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5LmdlbmVyYXRvcnM7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDkgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgamF2YS5pby5GaWxlOworaW1wb3J0IGphdmEuaW8uRmlsZU5vdEZvdW5kRXhjZXB0aW9uOworaW1wb3J0IGphdmEuaW8uRmlsZVdyaXRlcjsKK2ltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOworaW1wb3J0IGphdmEuaW8uUHJpbnRXcml0ZXI7CisKKy8vaW1wb3J0IGNvbS5iYm4ub3Blbm1hcC5kYXRhQWNjZXNzLnNoYXBlLkVzcmlHcmFwaGljTGlzdDsKKy8vaW1wb3J0IGNvbS5iYm4ub3Blbm1hcC5kYXRhQWNjZXNzLnNoYXBlLkVzcmlQb2x5Z29uOworLy9pbXBvcnQgY29tLmJibi5vcGVubWFwLmRhdGFBY2Nlc3Muc2hhcGUuRXNyaVBvbHlnb25MaXN0OworLy9pbXBvcnQgY29tLmJibi5vcGVubWFwLmRhdGFBY2Nlc3Muc2hhcGUuaW5wdXQuRGJmSW5wdXRTdHJlYW07CisvL2ltcG9ydCBjb20uYmJuLm9wZW5tYXAuZGF0YUFjY2Vzcy5zaGFwZS5pbnB1dC5TaHBJbnB1dFN0cmVhbTsKKy8vaW1wb3J0IGNvbS5iYm4ub3Blbm1hcC5kYXRhQWNjZXNzLnNoYXBlLmlucHV0LlNoeElucHV0U3RyZWFtOworLy9pbXBvcnQgY29tLmJibi5vcGVubWFwLm9tR3JhcGhpY3MuT01Qb2x5OworCisvKioKKyAqIFNURU0gSUkgRGF0YSBNaWdyYXRpb24vR2VuZXJhdGlvbiBVdGlsaXRpZXMgLSBUaGlzIGNsYXNzIHJlYWRzIEVTUkkgc2hhcGUKKyAqIGZpbGVzIGFuZCBjb252ZXJ0cyBlYWNoIG9mIHRoZW0gaW50byBhIHBsYWluIHRleHQgZmlsZSBhcyBvdXRwdXQuCisgKi8KK3B1YmxpYyBjbGFzcyBNYXBSZWFkZXIgeworCisJUHJpbnRXcml0ZXIgcHc7CisKKwkvKioKKwkgKiBDb25zdHJ1Y3RvcgorCSAqIAorCSAqIEBwYXJhbSBvdXRGaWxlCisJICogICAgICAgICAgICB0aGUgb3V0cHV0IGZpbGUKKwkgKi8KKwlwdWJsaWMgTWFwUmVhZGVyKFN0cmluZyBvdXRGaWxlKSB7CisKKwkJdHJ5IHsKKwkJCXRoaXMucHcgPSBuZXcgUHJpbnRXcml0ZXIobmV3IEZpbGVXcml0ZXIob3V0RmlsZSkpOworCQl9IGNhdGNoIChGaWxlTm90Rm91bmRFeGNlcHRpb24gZSkgeworCQkJZS5wcmludFN0YWNrVHJhY2UoKTsKKwkJCXJldHVybjsKKwkJfSBjYXRjaCAoSU9FeGNlcHRpb24gZSkgeworCQkJZS5wcmludFN0YWNrVHJhY2UoKTsKKwkJCXJldHVybjsKKwkJfQorCX0KKworCS8qKgorCSAqIHJlYWQgaW4gYSBnaXZlbiBkaXJlY3RvcnkKKwkgKiAKKwkgKiBAcGFyYW0gZGlyCisJICogICAgICAgICAgICB0aGUgZGlyZWN0b3J5IHdlIHdhbnQgdG8gcmVhZAorCSAqLworCXB1YmxpYyB2b2lkIHJlYWREaXJlY3RvcnkoU3RyaW5nIGRpcikgeworCQl0cnkgeworCisJCQlGaWxlIGYgPSBuZXcgRmlsZShkaXIpOworCQkJRmlsZVtdIGZpbGVzID0gZi5saXN0RmlsZXMoKTsKKworCQkJaW50IGNvdW50ZXIgPSAwOworCisJCQlTdHJpbmcgc2hwRmlsZSA9IG51bGw7CisJCQlTdHJpbmcgZGJmRmlsZSA9IG51bGw7CisJCQlTdHJpbmcgc2h4RmlsZSA9IG51bGw7CisKKwkJCWZvciAoaW50IGkgPSAwOyBpIDwgZmlsZXMubGVuZ3RoOyBpKyspIHsKKwkJCQlpZiAoZmlsZXNbaV0uaXNEaXJlY3RvcnkoKSkKKwkJCQkJcmVhZERpcmVjdG9yeShmaWxlc1tpXS5nZXRBYnNvbHV0ZVBhdGgoKSk7CisJCQkJU3RyaW5nIG5hbWUgPSBmaWxlc1tpXS5nZXROYW1lKCk7CisJCQkJbmFtZSA9IG5hbWUudG9Mb3dlckNhc2UoKTsKKworCQkJCWlmIChuYW1lLmluZGV4T2YoIi5zaHAiKSAhPSAtMSAmJiBzaHBGaWxlID09IG51bGwpIHsgLy8kTk9OLU5MUy0xJAorCQkJCQlzaHBGaWxlID0gZmlsZXNbaV0uZ2V0QWJzb2x1dGVQYXRoKCk7CisJCQkJCWNvdW50ZXIrKzsKKwkJCQl9IGVsc2UgaWYgKG5hbWUuaW5kZXhPZigiLmRiZiIpICE9IC0xICYmIGRiZkZpbGUgPT0gbnVsbCkgeyAvLyROT04tTkxTLTEkCisJCQkJCWRiZkZpbGUgPSBmaWxlc1tpXS5nZXRBYnNvbHV0ZVBhdGgoKTsKKwkJCQkJY291bnRlcisrOworCQkJCX0gZWxzZSBpZiAobmFtZS5pbmRleE9mKCIuc2h4IikgIT0gLTEgJiYgc2h4RmlsZSA9PSBudWxsKSB7IC8vJE5PTi1OTFMtMSQKKwkJCQkJc2h4RmlsZSA9IGZpbGVzW2ldLmdldEFic29sdXRlUGF0aCgpOworCQkJCQljb3VudGVyKys7CisJCQkJfSBlbHNlIHsKKwkJCQkJLy8gSWdub3JlIC50eHQgYW5kIGFueSBvdGhlciBraW5kIG9mIGZpbGVzIGluIHRoaXMgZm9sZGVyCisJCQkJCWNvbnRpbnVlOworCQkJCX0KKworCQkJCWlmIChjb3VudGVyID09IDMpIHsKKwkJCQkJcmVhZEZpbGUoc2hwRmlsZSwgc2h4RmlsZSwgZGJmRmlsZSk7CisJCQkJCWNvdW50ZXIgPSAwOworCQkJCQlzaHBGaWxlID0gbnVsbDsKKwkJCQkJZGJmRmlsZSA9IG51bGw7CisJCQkJCXNoeEZpbGUgPSBudWxsOworCQkJCX0KKworCQkJfQorCisJCX0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CisJCQllLnByaW50U3RhY2tUcmFjZSgpOworCQl9CisJfQorCisJLyoqCisJICogUmVhZCBhIEVTUkkgc2hhcGUgZmlsZQorCSAqIAorCSAqIEBwYXJhbSBzaHBGaWxlCisJICogICAgICAgICAgICBtYWluIHNoYXBlIGZpbGUKKwkgKiBAcGFyYW0gc2h4RmlsZQorCSAqICAgICAgICAgICAgaW5kZXggZmlsZQorCSAqIEBwYXJhbSBkYmZGaWxlCisJICogICAgICAgICAgICBkQmFzZSB0YWJsZQorCSAqLworCXB1YmxpYyB2b2lkIHJlYWRGaWxlKFN0cmluZyBzaHBGaWxlLCBTdHJpbmcgc2h4RmlsZSwgU3RyaW5nIGRiZkZpbGUpIHsKKworCQlVdGlsTG9nZ2VyLmxvZ0luZm9ybWF0aW9uKCJzaHBGaWxlIGlzIDogIiArIHNocEZpbGUpOyAvLyROT04tTkxTLTEkCisJCVV0aWxMb2dnZXIubG9nSW5mb3JtYXRpb24oInNoeEZpbGUgaXMgOiAiICsgc2h4RmlsZSk7IC8vJE5PTi1OTFMtMSQKKwkJVXRpbExvZ2dlci5sb2dJbmZvcm1hdGlvbigiZGJmRmlsZSBpcyA6ICIgKyBkYmZGaWxlKTsgLy8kTk9OLU5MUy0xJAorCisvLwkJdHJ5IHsKKy8vCQkJQXJyYXlMaXN0IGFSZWNvcmQgPSBudWxsOworLy8JCQlGaWxlSW5wdXRTdHJlYW0gc2hwRmlzID0gbmV3IEZpbGVJbnB1dFN0cmVhbShzaHBGaWxlKTsKKy8vCQkJRmlsZUlucHV0U3RyZWFtIHNoeEZpcyA9IG5ldyBGaWxlSW5wdXRTdHJlYW0oc2h4RmlsZSk7CisvLwkJCUZpbGVJbnB1dFN0cmVhbSBkYmZGaXMgPSBuZXcgRmlsZUlucHV0U3RyZWFtKGRiZkZpbGUpOworLy8KKy8vCQkJRGJmSW5wdXRTdHJlYW0gZGJmSXMgPSBuZXcgRGJmSW5wdXRTdHJlYW0oZGJmRmlzKTsKKy8vCQkJLy8gU3RyaW5nIG5hbWVzW10gPSBkYmZJcy5nZXRDb2x1bW5OYW1lcygpOworLy8JCQlBcnJheUxpc3QgcmVjb3JkcyA9IGRiZklzLmdldFJlY29yZHMoKTsKKy8vCQkJZGJmRmlzLmNsb3NlKCk7CisvLworLy8JCQkvLyBHZXQgdGhlIGluZGV4LgorLy8JCQlTaHhJbnB1dFN0cmVhbSBzaHhJcyA9IG5ldyBTaHhJbnB1dFN0cmVhbShzaHhGaXMpOworLy8JCQlpbnRbXVtdIG9mZlNldHMgPSBzaHhJcy5nZXRJbmRleCgpOworLy8KKy8vCQkJLy8gR2V0IHRoZSBzaGFwZSBkYXRhCisvLwkJCVNocElucHV0U3RyZWFtIHNpcyA9IG5ldyBTaHBJbnB1dFN0cmVhbShzaHBGaXMpOworLy8JCQlFc3JpR3JhcGhpY0xpc3QgZWdsID0gc2lzLmdldEdlb21ldHJ5KG9mZlNldHMpOworLy8KKy8vCQkJLy8gVXRpbExvZ2dlci5sb2dJbmZvcm1hdGlvbigiU2l6ZT0iK2VnbC5zaXplKCkpOworLy8KKy8vCQkJZm9yIChpbnQgaSA9IDA7IGkgPCBvZmZTZXRzWzBdLmxlbmd0aDsgaSsrKSB7CisvLworLy8JCQkJLyoKKy8vCQkJCSAqIHRyeXsgY29tLmJibi5vcGVubWFwLmRhdGFBY2Nlc3Muc2hhcGUuRXNyaVBvbHlsaW5lIHBvbHlMaW5lID0KKy8vCQkJCSAqIG51bGw7IHBvbHlMaW5lID0KKy8vCQkJCSAqIChjb20uYmJuLm9wZW5tYXAuZGF0YUFjY2Vzcy5zaGFwZS5Fc3JpUG9seWxpbmUpZWdsLmdldE9NR3JhcGhpY0F0KGkpOworLy8JCQkJICogYVJlY29yZCA9IChBcnJheUxpc3QpcmVjb3Jkcy5nZXQoaSk7CisvLwkJCQkgKiAKKy8vCQkJCSAqIGZvciAoaW50IGo9MDtqPGFSZWNvcmQuc2l6ZSgpO2orKyl7IGlmIChqPjApIHB3LnByaW50KCIsIik7CisvLwkJCQkgKiBwdy5wcmludChhUmVjb3JkLmdldChqKSk7IH0KKy8vCQkJCSAqIAorLy8JCQkJICogZmxvYXQgbGF0bG9uW10gPSBwb2x5TGluZS5nZXRMYXRMb25BcnJheSgpOyBmb3IgKGludCBqPTA7ajxsYXRsb24ubGVuZ3RoO2orKyl7CisvLwkJCQkgKiBwdy5wcmludCgiLCIrbGF0bG9uW2pdKTsgfSBwdy5wcmludGxuKCk7IH0gY2F0Y2goCisvLwkJCQkgKiBqYXZhLmxhbmcuQ2xhc3NDYXN0RXhjZXB0aW9uIGUgKXsgZS5wcmludFN0YWNrVHJhY2UoKTsgfQorLy8JCQkJICovCisvLworLy8JCQkJdHJ5IHsKKy8vCQkJCQlPTVBvbHkgZXNwZyA9IChFc3JpUG9seWdvbikgZWdsLmdldE9NR3JhcGhpY0F0KGkpOworLy8JCQkJCWFSZWNvcmQgPSAoQXJyYXlMaXN0KSByZWNvcmRzLmdldChpKTsKKy8vCisvLwkJCQkJZm9yIChpbnQgaiA9IDA7IGogPCBhUmVjb3JkLnNpemUoKTsgaisrKSB7CisvLworLy8JCQkJCQlpZiAodGhpcy5wdyA9PSBudWxsKSB7CisvLwkJCQkJCQlVdGlsTG9nZ2VyLmxvZ0luZm9ybWF0aW9uKCJQcmludFdyaXRlciBpcyBudWxsICEiKTsgLy8kTk9OLU5MUy0xJAkJCQkJCQkKKy8vCQkJCQkJCXJldHVybjsKKy8vCQkJCQkJfQorLy8KKy8vCQkJCQkJaWYgKGogPiAwKQorLy8JCQkJCQkJdGhpcy5wdy5wcmludCgiLCIpOyAvLyROT04tTkxTLTEkCisvLwkJCQkJCXRoaXMucHcucHJpbnQoYVJlY29yZC5nZXQoaikpOworLy8JCQkJCX0KKy8vCisvLwkJCQkJZmxvYXQgbGF0bG9uW10gPSBlc3BnLmdldExhdExvbkFycmF5KCk7CisvLwkJCQkJZm9yIChpbnQgaiA9IDA7IGogPCBsYXRsb24ubGVuZ3RoOyBqKyspIHsKKy8vCQkJCQkJdGhpcy5wdy5wcmludCgiLCIgKyBsYXRsb25bal0pOyAvLyROT04tTkxTLTEkCisvLwkJCQkJfQorLy8JCQkJCXRoaXMucHcucHJpbnRsbigpOworLy8KKy8vCQkJCX0gY2F0Y2ggKENsYXNzQ2FzdEV4Y2VwdGlvbiBlKSB7CisvLworLy8JCQkJCUVzcmlQb2x5Z29uTGlzdCBlcGwgPSAoRXNyaVBvbHlnb25MaXN0KSBlZ2wKKy8vCQkJCQkJCS5nZXRPTUdyYXBoaWNBdChpKTsKKy8vCQkJCQlmb3IgKGludCBqID0gMDsgaiA8IGVwbC5zaXplKCk7IGorKykgeworLy8KKy8vCQkJCQkJRXNyaVBvbHlnb24gZXNwZyA9IChFc3JpUG9seWdvbikgZXBsLmdldE9NR3JhcGhpY0F0KGopOworLy8KKy8vCQkJCQkJYVJlY29yZCA9IChBcnJheUxpc3QpIHJlY29yZHMuZ2V0KGkpOworLy8JCQkJCQlmb3IgKGludCBxID0gMDsgcSA8IGFSZWNvcmQuc2l6ZSgpOyBxKyspIHsKKy8vCQkJCQkJCWlmIChxID4gMCkKKy8vCQkJCQkJCQl0aGlzLnB3LnByaW50KCIsIik7IC8vJE5PTi1OTFMtMSQKKy8vCQkJCQkJCXRoaXMucHcucHJpbnQoYVJlY29yZC5nZXQocSkpOworLy8JCQkJCQl9CisvLworLy8JCQkJCQlmbG9hdCBsYXRsb25bXSA9IGVzcGcuZ2V0TGF0TG9uQXJyYXkoKTsKKy8vCQkJCQkJZm9yIChpbnQgcSA9IDA7IHEgPCBsYXRsb24ubGVuZ3RoOyBxKyspIHsKKy8vCQkJCQkJCXRoaXMucHcucHJpbnQoIiwiICsgbGF0bG9uW3FdKTsgLy8kTk9OLU5MUy0xJAorLy8JCQkJCQl9CisvLworLy8JCQkJCQl0aGlzLnB3LnByaW50bG4oKTsKKy8vCisvLwkJCQkJfSAvLyBmb3IKKy8vCisvLwkJCQl9IC8vIGNhdGNoCisvLworLy8JCQl9IC8vIGZvcgorLy8KKy8vCQkJc2h4SXMuY2xvc2UoKTsKKy8vCisvLwkJfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKKy8vCQkJZS5wcmludFN0YWNrVHJhY2UoKTsKKy8vCQl9CisKKwl9IC8vIHJlYWRmaWxlCisKKwkvKioKKwkgKiBDbG9zZSB0aGUgd3JpdGVyCisJICogCisJICovCisJcHVibGljIHZvaWQgY2xvc2VGaWxlKCkgeworCQl0aGlzLnB3LmNsb3NlKCk7CisJfQorCisJLyoqCisJICogRXhlY3V0aW9uIGVudHJ5IHBvaW50CisJICogCisJICogQHBhcmFtIGFyZ3MKKwkgKi8KKwlwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CisJCWZpbmFsIGludCBFU1JJX0ZJTEUgPSAwOworCQlmaW5hbCBpbnQgT1VUUFVUX0ZJTEUgPSAxOworCisJCWlmIChhcmdzLmxlbmd0aCA8IDIpIHsKKwkJCVN5c3RlbS5vdXQKKwkJCQkJLnByaW50bG4oIldyb25nIGFyZ3VtZW50cy4gUHJvdmlkZSBFU1JJIGZpbGUgYW5kIG91dHB1dCBmaWxlbmFtZS4iKTsgLy8kTk9OLU5MUy0xJAorCQkJcmV0dXJuOworCQl9CisKKwkJTWFwUmVhZGVyIG1yID0gbmV3IE1hcFJlYWRlcihhcmdzW09VVFBVVF9GSUxFXSk7CisJCW1yLnJlYWREaXJlY3RvcnkoYXJnc1tFU1JJX0ZJTEVdKTsKKwkJbXIuY2xvc2VGaWxlKCk7CisKKwl9CisKK30KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3NyYy9vcmcvZWNsaXBzZS9zdGVtL3V0aWxpdHkvZ2VuZXJhdG9ycy9NYXRjaFByb2ZpbGVyLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91dGlsaXR5L2dlbmVyYXRvcnMvTWF0Y2hQcm9maWxlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ0ZTY0NTgKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91dGlsaXR5L2dlbmVyYXRvcnMvTWF0Y2hQcm9maWxlci5qYXZhCkBAIC0wLDAgKzEsNTM4IEBACisvKioKKyAqIAorICovCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS5nZW5lcmF0b3JzOworCitpbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOworaW1wb3J0IGphdmEudXRpbC5MaXN0OworaW1wb3J0IGphdmEudXRpbC5TdHJpbmdUb2tlbml6ZXI7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMKKyAqIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YKKyAqIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcworICogYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKiAKKyAqIENvbnRyaWJ1dG9yczogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioKKyAqIFNURU0gSUkgRGF0YSBNaWdyYXRpb24vR2VuZXJhdGlvbiBVdGlsaXRpZXMgOiBJbnN0YW5jZXMgb2YgdGhpcyBjbGFzcyB3ZXJlCisgKiB1c2VkIGF0IHNvbWUgaW50ZXJtZWRpYXRlIHBvaW50IHRvIGZpbmQgbWF0Y2hlcyB3aXRoIG1pc3NpbmcgaWRlbnRpZmllcnMuIEl0CisgKiBoYWQgYSBzaG9ydCBwZXJpb2Qgb2YgdXNlZnVsIGxpZmUuCisgKiAKKyAqIFRvIHJ1biBhZGQgdGhlIGZvbGxvd2luZyBwYXJhbWV0ZXJzIHRvIHRoZSBydW4gY29uZmlndXJhdGlvbjoKKyAqIAorICogQzpcc3RlbUlJXG9yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eVxkYXRhTWlncmF0aW9uXGlucHV0XElTTzMxNjYtMVxJU08zMTY2XzFfZW4udHh0CisgKiBDOlxzdGVtSUlcb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5XGRhdGFNaWdyYXRpb25caW5wdXRcQXJlYVBvcHVsYXRpb25EYXRhXAorICogQzpcc3RlbUlJXG9yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eVxkYXRhTWlncmF0aW9uXGlucHV0XHByb3BlcnRpZXNcQ291bnRyaWVzLnR4dAorICogQzpcc3RlbUlJXG9yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eVxkYXRhTWlncmF0aW9uXGlucHV0XG1hdGNoXG1hdGNoTGlzdC50eHQKKyAqIAorICovCisKK3B1YmxpYyBjbGFzcyBNYXRjaFByb2ZpbGVyIHsKKworCXByaXZhdGUgU3RyaW5nIGNpYURhdGEgPSBudWxsOworCisJcHJpdmF0ZSBTdHJpbmcgdGFyZ2V0RmlsZSA9IG51bGw7CisKKwlwcml2YXRlIFN0cmluZyBtYXRjaEZpbGUgPSBudWxsOworCisJcHJpdmF0ZSBTdHJpbmcgaXNvMzE2Nl8xID0gbnVsbDsKKworCS8qKgorCSAqIExpc3RzIGZvciBwb3B1bGF0aW9uIGRhdGEuCisJICovCisKKwlMaXN0IHRhcmdldExpc3QgPSBudWxsOworCisJTGlzdCBwb3B1bGF0aW9uTGlzdCA9IG51bGw7CisKKwlMaXN0IG1hdGNoTGlzdCA9IG51bGw7CisKKwlMaXN0IGFyZWFMaXN0ID0gbnVsbDsKKworCUxpc3QgY29kZUxpc3QgPSBudWxsOworCisJLyoqCisJICogU3RyaW5nIHVzZWQgdG8gaW5kaWNhdGUgZGVmYXVsdCB2YWx1ZSBmb3IgdW5rbm93biBsb2NhdGlvbnMuCisJICovCisJU3RyaW5nIERFRkFVTFQgPSAiMCI7IC8vJE5PTi1OTFMtMSQKKworCS8qKgorCSAqIENvbnN0cnVjdG9yCisJICogCisJICogQHBhcmFtIGlzbzMxNjZfMSAtCisJICogICAgICAgICAgICBkYXRhIGZpbGUgd2l0aCB0aGUgSVNPMzE2Ni0xIEFMUEhBXzIgYW5kIEFMUEhBXzMgY29kZXMuCisJICogQHBhcmFtIGNpYURhdGEgLQorCSAqICAgICAgICAgICAgdGhlIGRpcmVjdG9yeSBjb250YWluaW5nIHBvcHVsYXRpb24gZGF0YSBmb3IgYWxsIGNvdW50cmllcworCSAqIEBwYXJhbSB0YXJnZXRGaWxlIC0KKwkgKiAgICAgICAgICAgIHRoZSBsaXN0IG9mIGNvdW50cmllcyB0byBwcm9jZXNzCisJICogQHBhcmFtIG1hdGNoRmlsZSAtCisJICogICAgICAgICAgICB0aGUgbGlzdCBvZiBsb2NhdGlvbnMgYWxyZWFkeSBtYXRjaGVkCisJICogCisJICovCisJcHVibGljIE1hdGNoUHJvZmlsZXIoU3RyaW5nIGlzbzMxNjZfMSwgU3RyaW5nIGNpYURhdGEsCisJCQlTdHJpbmcgdGFyZ2V0RmlsZSwgU3RyaW5nIG1hdGNoRmlsZSkgeworCQkvLyBTZXQgdmFsdWVzIG9mIGdsb2JhbCB2YXJpYWJsZXMuCisJCXRoaXMuaXNvMzE2Nl8xID0gaXNvMzE2Nl8xOworCQl0aGlzLnRhcmdldEZpbGUgPSB0YXJnZXRGaWxlOworCQl0aGlzLm1hdGNoRmlsZSA9IG1hdGNoRmlsZTsKKwkJdGhpcy5jaWFEYXRhID0gY2lhRGF0YTsKKwl9CisKKwkvKioKKwkgKiBSdW4gdGhlIGdlbmVyYXRvci4KKwkgKiAKKwkgKi8KKwlwdWJsaWMgdm9pZCBydW4oKSB7CisJCS8vIFJlYWQgYW5kIGtlZXAgaW4gbWVtb3J5IGEgbGlzdCBvZiB0aGUgY291bnRyaWVzIHdlIHdhbnQuCisJCXRhcmdldExpc3QgPSBHZW5VdGlscy5wb3B1bGF0ZUxpc3QodGFyZ2V0RmlsZSk7CisKKwkJLy8gTG9hZCB0aGUgbGlzdCBvZiBtYXRjaGVkIGxvY2F0aW9ucworCQltYXRjaExpc3QgPSBHZW5VdGlscy5wb3B1bGF0ZUxpc3QobWF0Y2hGaWxlKTsKKworCQkvLyBSZWFkIGFuZCBrZWVwIGluIG1lbW9yeSBhIGxpc3Qgb2YgdGhlIElTTzMxNjYtMSBBTFBIQTIsIEFMUEhBMywgYW5kCisJCS8vIG51bWVyaWMgY29kZXMuCisJCWNvZGVMaXN0ID0gR2VuVXRpbHMucG9wdWxhdGVMaXN0KGlzbzMxNjZfMSk7CisKKwkJLy8gTm93LCBwcm9jZXNzIGVhY2ggaXRlbSBpbiB0aGUgdGFyZ2V0IGxpc3QuCisJCXByb2Nlc3MoKTsKKworCX0KKworCS8qKgorCSAqIFByb2Nlc3Mgb3VyIGdsb2JhbCBsaXN0IG9mIHRhcmdldCBjb3VudHJpZXMuIEZvciBlYWNoIGNvdW50cnkgaW4gbGlzdCwKKwkgKiBnZW5lcmF0ZSBpdHMgcG9wdWxhdGlvbi5wcm9wZXJ0aWVzIGZpbGUuCisJICogCisJICovCisJcHJvdGVjdGVkIHZvaWQgcHJvY2VzcygpIHsKKworCQkvLyBPYmplY3QgaG9sZGluZyBJU08zMTY2LTEgcmVsYXRlZCBkYXRhLgorCQlJU09Db2RlMSBpc29Db2RlID0gbnVsbDsKKworCQlmaW5hbCBpbnQgTE9DQVRJT04gPSAwOworCisJCWZpbmFsIGludCBMRVZFTCA9IDE7CisKKwkJaW50IHNpemUgPSB0YXJnZXRMaXN0LnNpemUoKTsKKworCQlmb3IgKGludCBpID0gMDsgaSA8IHNpemU7IGkrKykgeworCisJCQkvLyBHZXQgdGhlIG5leHQgY291bnRyeSBpbiB0aGUgbGlzdC4KKwkJCVN0cmluZyBmaWxlID0gKChTdHJpbmcpIHRhcmdldExpc3QuZ2V0KGkpKS50cmltKCk7CisJCisJCQlTdHJpbmcgY291bnRyeSA9IGV4dHJhY3RDb3VudHJ5TmFtZShmaWxlKTsKKworCQkJLy8gR2V0IHRoZSBJU08zMTY2LTEgaW5mbyBmb3IgdGhpcworCQkJLy8gY291bnRyeQorCQkJaWYgKGlzb0NvZGUgPT0gbnVsbCkgeworCQkJCWlzb0NvZGUgPSBHZW5VdGlscy5nZXRJU09Db2RlKGNvdW50cnksIGNvZGVMaXN0KTsKKwkJCX0KKworCQkJLy8gUmVhZCBhbmQga2VlcCBpbiBtZW1vcnkgYSBsaXN0IG9mIHRoZSBwb3B1bGF0aW9uIGRhdGEKKwkJCS8vIGZvciB0aGlzIGNvdW50cnkuCisJCQlpZiAocG9wdWxhdGlvbkxpc3QgPT0gbnVsbCkgeworCQkJCVN0cmluZyBuYW1lID0gY2lhRGF0YSArIGNvdW50cnkgKyAiX1BPUFVMQVRJT04udHh0IjsgLy8kTk9OLU5MUy0xJAorCQkJCXBvcHVsYXRpb25MaXN0ID0gR2VuVXRpbHMucG9wdWxhdGVMaXN0KG5hbWUpOworCQkJfQorCisJCQkvLyBOb3cgbG9hZCB0aGUgYXJlYSBkYXRhIGZvciB0aGlzIGNvdW50cnkuCisJCQlpZiAoYXJlYUxpc3QgPT0gbnVsbCkgeworCQkJCVN0cmluZyBuYW1lID0gY2lhRGF0YSArIGNvdW50cnkgKyAiX0FSRUEudHh0IjsgLy8kTk9OLU5MUy0xJAorCQkJCWFyZWFMaXN0ID0gR2VuVXRpbHMucG9wdWxhdGVMaXN0KG5hbWUpOworCQkJfQorCisJCQkvLyBJdGVyYXRlIHRocm91Z2ggYWxsIG9mIHRoZSBwb3B1bGF0aW9uIGxpc3QgdHJ5aW5nIHRvCisJCQkvLyBmaW5kIGEKKwkJCS8vIGxvY2F0aW9uIHRoYXQgaGFzbnQgYmVlbiBtYXRjaGVkIGFscmVhZHkuCisJCQkvLyBJZiBhIGxvY2F0aW9uIGRvZXMgbm90IGhhdmUgYSBtYXRjaCwgcHJpbnQgaXQuCisJCQlJdGVyYXRvciBpdCA9IHBvcHVsYXRpb25MaXN0Lml0ZXJhdG9yKCk7CisKKwkJCXdoaWxlIChpdC5oYXNOZXh0KCkpIHsKKworCQkJCVN0cmluZ1tdIGRhdGEgPSAoKFN0cmluZykgaXQubmV4dCgpKS5zcGxpdCgiOiIpOyAvLyROT04tTkxTLTEkCisKKwkJCQlpZiAoY291bnRyeS5lcXVhbHMoZGF0YVtMT0NBVElPTl0udG9VcHBlckNhc2UoKSkgPT0gZmFsc2UKKwkJCQkJCSYmIGZpbmRNYXRjaChkYXRhW0xPQ0FUSU9OXS50b1VwcGVyQ2FzZSgpLnRyaW0oKSkgPT0gZmFsc2UKKwkJCQkJCSYmIGRhdGFbTEVWRUxdLnRyaW0oKS5lcXVhbHMoIjEiKSkgeyAvLyROT04tTkxTLTEkCisJCQkJCS8vIG91dHB1dCBpbmZvIGFib3V0IHRoaXMgbG9jYXRpb24gaW4gdGhlIGZvcm1hdAorCQkJCQkvLyBsb2NhdGlvbiwgYXJlYSwgcG9wdWxhdGlvbgorCQkJCQlTdHJpbmcgcG9wdWxhdGlvbiA9IGdldFBvcHVsYXRpb24oZGF0YVtMT0NBVElPTl0sIGNvdW50cnksCisJCQkJCQkJMSk7CisJCQkJCVN0cmluZyBhcmVhID0gZ2V0QXJlYShkYXRhW0xPQ0FUSU9OXSwgY291bnRyeSwgMSk7CisJCQkJCVV0aWxMb2dnZXIubG9nSW5mb3JtYXRpb24oY291bnRyeSArICIsIiArIGRhdGFbTE9DQVRJT05dICsgIiwiIC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAorCQkJCQkJCSsgYXJlYSArICIsIiArIHBvcHVsYXRpb24pOyAvLyROT04tTkxTLTEkCisJCQkJfQorCisJCQl9CisKKwkJCS8vIFdlIGRvbnQgbmVlZCB0aGUgSVNPIGNvZGUgb2JqZWN0IGZvciB0aGlzIGNvdW50cnkKKwkJCS8vIGFueW1vcmUsIHdlIGFyZSBkb25lIHByb2Nlc3NpbmcgaXQuCisJCQlpc29Db2RlID0gbnVsbDsKKworCQkJLy8gUmVzZXQgdGhlIHBvcHVsYXRpb24gbGlzdAorCQkJaWYgKHBvcHVsYXRpb25MaXN0ICE9IG51bGwpIHsKKwkJCQlwb3B1bGF0aW9uTGlzdC5jbGVhcigpOworCQkJCXBvcHVsYXRpb25MaXN0ID0gbnVsbDsKKwkJCX0KKworCQkJLy8gUmVzZXQgdGhlIGFyZWEgbGlzdAorCQkJaWYgKGFyZWFMaXN0ICE9IG51bGwpIHsKKwkJCQlhcmVhTGlzdC5jbGVhcigpOworCQkJCWFyZWFMaXN0ID0gbnVsbDsKKwkJCX0KKworCQkJLy8gUnVuIGdhcmJhZ2UgY29sbGVjdGlvbgorCQkJLy9TeXN0ZW0uZ2MoKTsKKworCQl9IC8vIEZvciBsb29wCisKKwl9CisKKwkvKioKKwkgKiBFeHRyYWN0IHRoZSBjb3VudHJ5IG5hbWUgZnJvbSB0aGUgZmlsZSBuYW1lLiBVc2VmdWwgdXRpbGl0eSBtZXRob2QuCisJICogCisJICogQHBhcmFtIGZpbGUKKwkgKiAgICAgICAgICAgIGEgZmlsZW5hbWUuCisJICogCisJICogQHJldHVybiB0aGUgY291bnRyeSBuYW1lIGVtYmVkZGVkIGluIHRoZSBmaWxlbmFtZS4KKwkgKi8KKwlTdHJpbmcgZXh0cmFjdENvdW50cnlOYW1lKFN0cmluZyBmaWxlKSB7CisKKwkJaW50IHNlcGFyYXRvciA9IGZpbGUubGFzdEluZGV4T2YoIlxcIik7IC8vJE5PTi1OTFMtMSQKKworCQlpbnQgZG90ID0gZmlsZS5sYXN0SW5kZXhPZigiLiIpOyAvLyROT04tTkxTLTEkCisKKwkJU3RyaW5nIHN1YnN0cmluZyA9IGZpbGUuc3Vic3RyaW5nKHNlcGFyYXRvciArIDEsIGRvdCk7CisKKwkJcmV0dXJuIHN1YnN0cmluZy50b1VwcGVyQ2FzZSgpOworCX0KKworCS8qKgorCSAqIEZpbmQgaWYgYSBnaXZlbiBsb2NhdGlvbiBoYXMgYmVlbiBtYXRjaGVkIGFscmVhZHkuCisJICogCisJICogQHBhcmFtIGEKKwkgKiAgICAgICAgICAgIGxvY2F0aW9uCisJICogCisJICogQHJldHVybiB3aGV0aGVyIGEgbWF0Y2ggaXMgZm91bmQgb3Igbm90IGZvciB0aGUgbG9jYXRpb24uCisJICovCisJcHJvdGVjdGVkIGJvb2xlYW4gZmluZE1hdGNoKFN0cmluZyBsb2NhdGlvbikgeworCisJCWZpbmFsIGludCBMT0NBVElPTiA9IDE7CisKKwkJSXRlcmF0b3IgaXQgPSBtYXRjaExpc3QuaXRlcmF0b3IoKTsKKworCQl3aGlsZSAoaXQuaGFzTmV4dCgpKSB7CisKKwkJCVN0cmluZ1tdIGRhdGEgPSAoKFN0cmluZykgaXQubmV4dCgpKS5zcGxpdCgiOiIpOyAvLyROT04tTkxTLTEkCisKKwkJCVN0cmluZ1tdIGNvbXBhcmUgPSBudWxsOworCisJCQlTdHJpbmcgZW50aXR5ID0gZGF0YVtMT0NBVElPTl07CisKKwkJCVN0cmluZyBsb2NhdGlvblN0ciA9IGxvY2F0aW9uLnJlcGxhY2UoIlxcdCIsICIiKTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCisKKwkJCWxvY2F0aW9uU3RyID0gbG9jYXRpb25TdHIudG9VcHBlckNhc2UoKS50cmltKCk7CisKKwkJCS8vIEhhbmRsZSBBbGlhc2VzIC0tIGNvbXBsZXggc3R1ZmYgOiQKKwkJCWlmIChsb2NhdGlvblN0ci5jb250YWlucygiWyIpKSB7IC8vJE5PTi1OTFMtMSQKKworCQkJCWxvY2F0aW9uU3RyID0gbG9jYXRpb25TdHIucmVwbGFjZSgiXSIsICIiKTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCisKKwkJCQkvLyBUb2tlbml6ZQorCQkJCVN0cmluZ1Rva2VuaXplciB0b2tlbnMgPSBuZXcgU3RyaW5nVG9rZW5pemVyKGxvY2F0aW9uU3RyLCAiWyIpOyAvLyROT04tTkxTLTEkCisKKwkJCQkvLyBHZXQgdG9rZW5zIC0+IG9yZGVyIG1hdHRlcnMgaGVyZSEKKwkJCQljb21wYXJlID0gbmV3IFN0cmluZ1t0b2tlbnMuY291bnRUb2tlbnMoKV07CisJCQkJaW50IGkgPSAwOworCQkJCXdoaWxlICh0b2tlbnMuaGFzTW9yZVRva2VucygpKSB7CisJCQkJCWNvbXBhcmVbaSsrXSA9IHRva2Vucy5uZXh0VG9rZW4oKS50b1VwcGVyQ2FzZSgpLnRyaW0oKTsKKwkJCQl9CisJCQl9CisKKwkJCWlmIChjb21wYXJlICE9IG51bGwpIHsKKwkJCQlmb3IgKGludCBpID0gMDsgaSA8IGNvbXBhcmUubGVuZ3RoOyBpKyspIHsKKwkJCQkJaWYgKGVudGl0eS5yZXBsYWNlKCItIiwgIiAiKS5lcXVhbHMoY29tcGFyZVtpXSkgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCisJCQkJCQkJfHwgY29tcGFyZVtpXS5lcXVhbHMoZW50aXR5ICsgIi0xIikpIHsgLy8kTk9OLU5MUy0xJAorCQkJCQkJcmV0dXJuIHRydWU7CisJCQkJCX0KKworCQkJCX0KKwkJCX0gZWxzZSBpZiAoZW50aXR5LmVxdWFscyhsb2NhdGlvbikKKwkJCQkJfHwgZW50aXR5LnJlcGxhY2UoIi0iLCAiICIpLmVxdWFscyhsb2NhdGlvbikgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCisJCQkJCXx8IGxvY2F0aW9uLmVxdWFscyhlbnRpdHkgKyAiLTEiKSkgeyAvLyROT04tTkxTLTEkCisKKwkJCQlyZXR1cm4gdHJ1ZTsKKwkJCX0KKworCQkJLy8gaWYgKGRhdGFbTE9DQVRJT05dLnRvVXBwZXJDYXNlKCkudHJpbSgpLmVxdWFscyhsb2NhdGlvbikpIHsKKwkJCS8vIHJldHVybiB0cnVlOworCQkJLy8gfQorCQl9CisKKwkJcmV0dXJuIGZhbHNlOworCX0KKworCS8qKgorCSAqIEZpbmQgdGhlIHBvcHVsYXRpb24gdmFsdWUgZm9yIGEgZ2l2ZW4gZW50aXR5LgorCSAqIAorCSAqIEBwYXJhbSBlbnRpdHkKKwkgKiAgICAgICAgICAgIGEgbG9jYXRpb24uCisJICogCisJICogQHJldHVybiB0aGUgcG9wdWxhdGlvbiBvZiBhIGxvY2F0aW9uIChpZiBmb3VuZCkuCisJICovCisJcHJvdGVjdGVkIFN0cmluZyBnZXRQb3B1bGF0aW9uKFN0cmluZyBlbnRpdHksIGludCBsZXZlbCkgeworCisJCWZpbmFsIGludCBFTlRJVFkgPSAwOworCisJCWZpbmFsIGludCBMRVZFTCA9IDE7CisKKwkJZmluYWwgaW50IFBPUFVMQVRJT04gPSAyOworCisJCUl0ZXJhdG9yIGl0ID0gcG9wdWxhdGlvbkxpc3QuaXRlcmF0b3IoKTsKKworCQlTdHJpbmcgZW50aXR5U3RyID0gZW50aXR5LnRvVXBwZXJDYXNlKCk7CisKKwkJd2hpbGUgKGl0Lmhhc05leHQoKSkgeworCisJCQlTdHJpbmdbXSBwb3BEYXRhID0gKChTdHJpbmcpIGl0Lm5leHQoKSkuc3BsaXQoIjoiKTsgLy8kTk9OLU5MUy0xJAorCisJCQlpZiAoZW50aXR5U3RyLmVxdWFscyhwb3BEYXRhW0VOVElUWV0udHJpbSgpLnRvVXBwZXJDYXNlKCkpKSB7CisKKwkJCQkvLyBDaGVjayBib3RoIGVudGl0aWVzIGJlbG9uZyB0byBzYW1lIGxldmVsCisJCQkJaWYgKFN0cmluZy52YWx1ZU9mKGxldmVsKS5lcXVhbHMocG9wRGF0YVtMRVZFTF0udHJpbSgpKSA9PSBmYWxzZSkgeworCQkJCQkvLyBJZ25vcmUgOiBzYW1lIG5hbWUgLCBidXQgZGlmZmVyZW50IGxldmVsCisJCQkJCWNvbnRpbnVlOworCQkJCX0KKworCQkJCXJldHVybiBwb3BEYXRhW1BPUFVMQVRJT05dLnRyaW0oKTsKKwkJCX0KKwkJfQorCQlyZXR1cm4gREVGQVVMVDsKKwl9CisKKwkvKioKKwkgKiBGaW5kIHRoZSBwb3B1bGF0aW9uIHZhbHVlIGZvciBhIGdpdmVuIGVudGl0eS4KKwkgKiAKKwkgKiBAcGFyYW0gZW50aXR5CisJICogICAgICAgICAgICBhIGxvY2F0aW9uCisJICogCisJICogQHBhcmFtIGVudGl0eUNvbnRhaW5lcgorCSAqICAgICAgICAgICAgYSBjb250YWluZXIgKGkuZS4gbGV2ZWwgMSBhZG1pbml0cmF0aWlvbikgZm9yIHRoZSBsb2NhdGlvbgorCSAqIAorCSAqIAorCSAqIEByZXR1cm4gdGhlIHBvcHVsYXRpb24gb2YgdGhlIGxvY2F0aW9uCisJICovCisJcHJvdGVjdGVkIFN0cmluZyBnZXRQb3B1bGF0aW9uKFN0cmluZyBlbnRpdHksIFN0cmluZyBlbnRpdHlDb250YWluZXIsCisJCQlpbnQgbGV2ZWwpIHsKKworCQlmaW5hbCBpbnQgRU5USVRZID0gMDsKKworCQlmaW5hbCBpbnQgTEVWRUwgPSAxOworCisJCWZpbmFsIGludCBQT1BVTEFUSU9OID0gMjsKKworCQlTdHJpbmdbXSBwb3BEYXRhID0gbnVsbDsKKworCQlJdGVyYXRvciBpdCA9IHBvcHVsYXRpb25MaXN0Lml0ZXJhdG9yKCk7CisKKwkJU3RyaW5nIGVudGl0eVN0ciA9IGVudGl0eS50b1VwcGVyQ2FzZSgpLnRyaW0oKTsKKworCQllbnRpdHlTdHIgPSBlbnRpdHlTdHIucmVwbGFjZSgiXFx0IiwgIiIpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKKworCQlTdHJpbmcgZW50aXR5Q29udGFpbmVyU3RyID0gZW50aXR5Q29udGFpbmVyLnRvVXBwZXJDYXNlKCk7CisKKwkJd2hpbGUgKGl0Lmhhc05leHQoKSkgeworCisJCQlwb3BEYXRhID0gKChTdHJpbmcpIGl0Lm5leHQoKSkuc3BsaXQoIjoiKTsgLy8kTk9OLU5MUy0xJAorCisJCQlTdHJpbmdbXSBjb21wYXJlID0gbnVsbDsKKworCQkJLy8gR2V0IHRoZSBlbnRpdHkgbmFtZSBhbmQgcmVtb3ZlIGJsYW5rcworCQkJU3RyaW5nIGxvY2F0aW9uID0gcG9wRGF0YVtFTlRJVFldOworCisJCQlsb2NhdGlvbiA9IGxvY2F0aW9uLnJlcGxhY2UoIlxcdCIsICIiKTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCisKKwkJCWxvY2F0aW9uID0gbG9jYXRpb24udG9VcHBlckNhc2UoKS50cmltKCk7CisKKwkJCS8vIEhhbmRsZSBBbGlhc2VzIC0tIGNvbXBsZXggc3R1ZmYgOiQKKwkJCWlmIChsb2NhdGlvbi5jb250YWlucygiWyIpKSB7IC8vJE5PTi1OTFMtMSQKKworCQkJCWxvY2F0aW9uID0gbG9jYXRpb24ucmVwbGFjZSgiXSIsICIiKTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCisKKwkJCQkvLyBUb2tlbml6ZQorCQkJCVN0cmluZ1Rva2VuaXplciB0b2tlbnMgPSBuZXcgU3RyaW5nVG9rZW5pemVyKGxvY2F0aW9uLCAiWyIpOyAvLyROT04tTkxTLTEkCisKKwkJCQkvLyBHZXQgdG9rZW5zIC0+IG9yZGVyIG1hdHRlcnMgaGVyZSEKKwkJCQljb21wYXJlID0gbmV3IFN0cmluZ1t0b2tlbnMuY291bnRUb2tlbnMoKV07CisJCQkJaW50IGkgPSAwOworCQkJCXdoaWxlICh0b2tlbnMuaGFzTW9yZVRva2VucygpKSB7CisJCQkJCWNvbXBhcmVbaSsrXSA9IHRva2Vucy5uZXh0VG9rZW4oKS50b1VwcGVyQ2FzZSgpLnRyaW0oKTsKKwkJCQl9CisJCQl9CisKKwkJCWlmIChjb21wYXJlICE9IG51bGwpIHsKKwkJCQlmb3IgKGludCBpID0gMDsgaSA8IGNvbXBhcmUubGVuZ3RoOyBpKyspIHsKKwkJCQkJaWYgKGVudGl0eVN0ci5yZXBsYWNlKCItIiwgIiAiKS5lcXVhbHMoIC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAorCQkJCQkJCWNvbXBhcmVbaV0ucmVwbGFjZSgiLSIsICIgIikpIC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAorCQkJCQkJCXx8IGNvbXBhcmVbaV0uZXF1YWxzKGVudGl0eVN0ciArICItMSIpIC8vJE5PTi1OTFMtMSQKKwkJCQkJCQl8fCBjb21wYXJlW2ldLmVxdWFscyhlbnRpdHlDb250YWluZXJTdHIpKSB7CisKKwkJCQkJCS8vIENoZWNrIGJvdGggZW50aXRpZXMgYmVsb25nIHRvIHNhbWUgbGV2ZWwKKwkJCQkJCWlmIChTdHJpbmcudmFsdWVPZihsZXZlbCkuZXF1YWxzKHBvcERhdGFbTEVWRUxdLnRyaW0oKSkgPT0gZmFsc2UpIHsKKwkJCQkJCQkvLyBJZ25vcmUgOiBzYW1lIG5hbWUgLCBidXQgZGlmZmVyZW50IGxldmVsCisJCQkJCQkJY29udGludWU7CisJCQkJCQl9CisKKwkJCQkJCXJldHVybiBwb3BEYXRhW1BPUFVMQVRJT05dLnRyaW0oKTsKKworCQkJCQl9CisKKwkJCQl9CisJCQl9IGVsc2UgaWYgKGVudGl0eVN0ci5lcXVhbHMobG9jYXRpb24pCisJCQkJCXx8IGVudGl0eVN0ci5yZXBsYWNlKCItIiwgIiAiKS5lcXVhbHMobG9jYXRpb24pIC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAorCQkJCQl8fCBsb2NhdGlvbi5lcXVhbHMoZW50aXR5U3RyICsgIi0xIikpIHsgLy8kTk9OLU5MUy0xJAorCisJCQkJLy8gQ2hlY2sgYm90aCBlbnRpdGllcyBiZWxvbmcgdG8gc2FtZSBsZXZlbAorCQkJCWlmIChTdHJpbmcudmFsdWVPZihsZXZlbCkuZXF1YWxzKHBvcERhdGFbTEVWRUxdLnRyaW0oKSkgPT0gZmFsc2UpIHsKKwkJCQkJLy8gSWdub3JlIDogc2FtZSBuYW1lICwgYnV0IGRpZmZlcmVudCBsZXZlbAorCQkJCQljb250aW51ZTsKKwkJCQl9CisKKwkJCQlyZXR1cm4gcG9wRGF0YVtQT1BVTEFUSU9OXS50cmltKCk7CisKKwkJCX0KKworCQl9IC8vIHdoaWxlCisKKwkJcmV0dXJuIERFRkFVTFQ7CisJfQorCisJLyoqCisJICogRmluZCB0aGUgYXJlYSB2YWx1ZSBmb3IgYSBnaXZlbiBlbnRpdHkuCisJICogCisJICogQHBhcmFtIGVudGl0eQorCSAqICAgICAgICAgICAgYSBsb2NhdGlvbgorCSAqIAorCSAqIEBwYXJhbSBlbnRpdHlDb250YWluZXIKKwkgKiAgICAgICAgICAgIGEgY29udGFpbmVyIChpLmUuIGxldmVsIDEgYWRtaW5pdHJhdGlpb24pIGZvciB0aGUgbG9jYXRpb24KKwkgKiAKKwkgKiBAcGFyYW0gbGV2ZWwKKwkgKiAgICAgICAgICAgIHRoZSBhZG1pbmlzdHJhdGl2ZSBsZXZlbC4KKwkgKiAKKwkgKiBAcmV0dXJuIHRoZSBhcmVhIG9mIHRoZSBsb2NhdGlvbgorCSAqLworCXByb3RlY3RlZCBTdHJpbmcgZ2V0QXJlYShTdHJpbmcgZW50aXR5LCBTdHJpbmcgZW50aXR5Q29udGFpbmVyLCBpbnQgbGV2ZWwpIHsKKworCQlmaW5hbCBpbnQgRU5USVRZID0gMDsKKworCQlmaW5hbCBpbnQgTEVWRUwgPSAxOworCisJCWZpbmFsIGludCBBUkVBID0gMjsKKworCQlTdHJpbmdbXSBhcmVhRGF0YSA9IG51bGw7CisKKwkJSXRlcmF0b3IgaXQgPSBhcmVhTGlzdC5pdGVyYXRvcigpOworCisJCVN0cmluZyBlbnRpdHlTdHIgPSBlbnRpdHkudG9VcHBlckNhc2UoKS50cmltKCk7CisKKwkJZW50aXR5U3RyID0gZW50aXR5U3RyLnJlcGxhY2UoIlxcdCIsICIiKTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCisKKwkJU3RyaW5nIGVudGl0eUNvbnRhaW5lclN0ciA9IGVudGl0eUNvbnRhaW5lci50b1VwcGVyQ2FzZSgpOworCisJCXdoaWxlIChpdC5oYXNOZXh0KCkpIHsKKworCQkJYXJlYURhdGEgPSAoKFN0cmluZykgaXQubmV4dCgpKS5zcGxpdCgiOiIpOyAvLyROT04tTkxTLTEkCisKKwkJCVN0cmluZ1tdIGNvbXBhcmUgPSBudWxsOworCisJCQkvLyBHZXQgdGhlIGVudGl0eSBuYW1lIGFuZCByZW1vdmUgYmxhbmtzCisJCQlTdHJpbmcgbG9jYXRpb24gPSBhcmVhRGF0YVtFTlRJVFldOworCisJCQlsb2NhdGlvbiA9IGxvY2F0aW9uLnJlcGxhY2UoIlxcdCIsICIiKTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCisKKwkJCWxvY2F0aW9uID0gbG9jYXRpb24udG9VcHBlckNhc2UoKS50cmltKCk7CisKKwkJCS8vIEhhbmRsZSBBbGlhc2VzIC0tIGNvbXBsZXggc3R1ZmYgOiQKKwkJCWlmIChsb2NhdGlvbi5jb250YWlucygiWyIpKSB7IC8vJE5PTi1OTFMtMSQKKworCQkJCWxvY2F0aW9uID0gbG9jYXRpb24ucmVwbGFjZSgiXSIsICIiKTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCisKKwkJCQkvLyBUb2tlbml6ZQorCQkJCVN0cmluZ1Rva2VuaXplciB0b2tlbnMgPSBuZXcgU3RyaW5nVG9rZW5pemVyKGxvY2F0aW9uLCAiWyIpOyAvLyROT04tTkxTLTEkCisKKwkJCQkvLyBHZXQgdG9rZW5zIC0+IG9yZGVyIG1hdHRlcnMgaGVyZSEKKwkJCQljb21wYXJlID0gbmV3IFN0cmluZ1t0b2tlbnMuY291bnRUb2tlbnMoKV07CisJCQkJaW50IGkgPSAwOworCQkJCXdoaWxlICh0b2tlbnMuaGFzTW9yZVRva2VucygpKSB7CisJCQkJCWNvbXBhcmVbaSsrXSA9IHRva2Vucy5uZXh0VG9rZW4oKS50b1VwcGVyQ2FzZSgpLnRyaW0oKTsKKwkJCQl9CisJCQl9CisKKwkJCWlmIChjb21wYXJlICE9IG51bGwpIHsKKwkJCQlmb3IgKGludCBpID0gMDsgaSA8IGNvbXBhcmUubGVuZ3RoOyBpKyspIHsKKwkJCQkJaWYgKGVudGl0eVN0ci5yZXBsYWNlKCItIiwgIiAiKS5lcXVhbHMoIC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAorCQkJCQkJCWNvbXBhcmVbaV0ucmVwbGFjZSgiLSIsICIgIikpIC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAorCQkJCQkJCXx8IGNvbXBhcmVbaV0uZXF1YWxzKGVudGl0eVN0ciArICItMSIpIC8vJE5PTi1OTFMtMSQKKwkJCQkJCQl8fCBjb21wYXJlW2ldLmVxdWFscyhlbnRpdHlDb250YWluZXJTdHIpKSB7CisKKwkJCQkJCS8vIENoZWNrIGJvdGggZW50aXRpZXMgYmVsb25nIHRvIHNhbWUgbGV2ZWwKKwkJCQkJCWlmIChTdHJpbmcudmFsdWVPZihsZXZlbCkKKwkJCQkJCQkJLmVxdWFscyhhcmVhRGF0YVtMRVZFTF0udHJpbSgpKSA9PSBmYWxzZSkgeworCQkJCQkJCS8vIElnbm9yZSA6IHNhbWUgbmFtZSAsIGJ1dCBkaWZmZXJlbnQgbGV2ZWwKKwkJCQkJCQljb250aW51ZTsKKwkJCQkJCX0KKworCQkJCQkJcmV0dXJuIGFyZWFEYXRhW0FSRUFdLnRyaW0oKTsKKwkJCQkJfQorCisJCQkJfQorCQkJfSBlbHNlIGlmIChlbnRpdHlTdHIuZXF1YWxzKGxvY2F0aW9uKQorCQkJCQl8fCBlbnRpdHlTdHIucmVwbGFjZSgiLSIsICIgIikuZXF1YWxzKGxvY2F0aW9uKSAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKKwkJCQkJfHwgbG9jYXRpb24uZXF1YWxzKGVudGl0eVN0ciArICItMSIpKSB7IC8vJE5PTi1OTFMtMSQKKworCQkJCS8vIENoZWNrIGJvdGggZW50aXRpZXMgYmVsb25nIHRvIHNhbWUgbGV2ZWwKKwkJCQlpZiAoU3RyaW5nLnZhbHVlT2YobGV2ZWwpLmVxdWFscyhhcmVhRGF0YVtMRVZFTF0udHJpbSgpKSA9PSBmYWxzZSkgeworCQkJCQkvLyBJZ25vcmUgOiBzYW1lIG5hbWUgLCBidXQgZGlmZmVyZW50IGxldmVsCisJCQkJCWNvbnRpbnVlOworCQkJCX0KKworCQkJCXJldHVybiBhcmVhRGF0YVtBUkVBXS50cmltKCk7CisJCQl9CisKKwkJfSAvLyB3aGlsZQorCisJCXJldHVybiBERUZBVUxUOworCX0KKworCS8qKgorCSAqIE1haW4gZXhlY3V0aW9uIGVudHJ5IHBvaW50LgorCSAqIAorCSAqIEBwYXJhbSBhcmdzCisJICogCisJICovCisJcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgeworCQlmaW5hbCBpbnQgSVNPXzMxNjZfMSA9IDA7CisJCWZpbmFsIGludCBDSUFfREFUQSA9IDE7CisJCWZpbmFsIGludCBUQVJHRVRfTElTVCA9IDI7CisJCWZpbmFsIGludCBNQVRDSEVTID0gMzsKKwkJZmluYWwgaW50IFBBUkFNUyA9IDQ7CisKKwkJaWYgKGFyZ3MubGVuZ3RoIDwgUEFSQU1TKSB7CisJCQlVdGlsTG9nZ2VyLmxvZ0luZm9ybWF0aW9uKCItLVdyb25nIGFyZ3VtZW50cy0tIik7IC8vJE5PTi1OTFMtMSQKKwkJCVN5c3RlbS5vdXQKKwkJCQkJLnByaW50bG4oIlx0VG8gcnVuLCBwbGVhc2UgcHJvdmlkZSB0aGUgZm9sbG93aW5nIGFyZ3VtZW50cyA6ICIpOyAvLyROT04tTkxTLTEkCisJCQlVdGlsTG9nZ2VyLmxvZ0luZm9ybWF0aW9uKCJcdFx0IElTTyAzMTY2LTEgZmlsZSIpOyAvLyROT04tTkxTLTEkCisJCQlVdGlsTG9nZ2VyLmxvZ0luZm9ybWF0aW9uKCJcdFx0IENJQSBkYXRhIik7IC8vJE5PTi1OTFMtMSQJCQkKKwkJCVV0aWxMb2dnZXIubG9nSW5mb3JtYXRpb24oIlx0XHQgVGFyZ2V0IGNvdW50cmllcyBmaWxlIik7IC8vJE5PTi1OTFMtMSQJCQkKKwkJCVV0aWxMb2dnZXIubG9nSW5mb3JtYXRpb24oIlx0XHQgT3V0cHV0IGRpcmVjdG9yeSIpOyAvLyROT04tTkxTLTEkCQkJCQkKKwkJCXJldHVybjsKKwkJfQorCisJCU1hdGNoUHJvZmlsZXIgcHJvZmlsZXIgPSBuZXcgTWF0Y2hQcm9maWxlcihhcmdzW0lTT18zMTY2XzFdLAorCQkJCWFyZ3NbQ0lBX0RBVEFdLCBhcmdzW1RBUkdFVF9MSVNUXSwgYXJnc1tNQVRDSEVTXSk7CisJCXByb2ZpbGVyLnJ1bigpOworCX0KKworfQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdXRpbGl0eS9nZW5lcmF0b3JzL01lcmdlTG9nRmlsZXMuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3NyYy9vcmcvZWNsaXBzZS9zdGVtL3V0aWxpdHkvZ2VuZXJhdG9ycy9NZXJnZUxvZ0ZpbGVzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmU0MjkxOAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3NyYy9vcmcvZWNsaXBzZS9zdGVtL3V0aWxpdHkvZ2VuZXJhdG9ycy9NZXJnZUxvZ0ZpbGVzLmphdmEKQEAgLTAsMCArMSwzMDAgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5LmdlbmVyYXRvcnM7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDkgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgamF2YS5pby5CdWZmZXJlZFJlYWRlcjsKK2ltcG9ydCBqYXZhLmlvLkJ1ZmZlcmVkV3JpdGVyOworaW1wb3J0IGphdmEuaW8uRmlsZTsKK2ltcG9ydCBqYXZhLmlvLkZpbGVSZWFkZXI7CitpbXBvcnQgamF2YS5pby5GaWxlV3JpdGVyOworaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7CitpbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CitpbXBvcnQgamF2YS51dGlsLk1hcDsKK2ltcG9ydCBqYXZhLnV0aWwuU3RyaW5nVG9rZW5pemVyOworaW1wb3J0IGphdmEudXRpbC5UcmVlU2V0OworCisKKy8qKgorICogTWVyZ2UgdHdvIGxvZyBkaXJlY3RvcmllcyBieSB0aGUgdW5pb24gb2YgdGhlIGxvY2F0aW9ucyBpbnNpZGUgdGhlbS4gUm93cyBhcmUgZXhwZWN0ZWQgdG8gY29udGFpbiB0aGUgc2FtZSBkYXRhIGZvciB0aGUgc2FtZSBsb2NhdGlvbiAoaG93ZXZlciwgZGF0YSBmcm9tIHRoZSBmaXJzdCBsb2cgcGF0aCBpcyB1c2VkIGluIHRoZSBvdXRwdXQgZm9yIGxvY2F0aW9uIHRoYXQgaW50ZXJzZWN0KQorICovCisKK3B1YmxpYyBjbGFzcyBNZXJnZUxvZ0ZpbGVzIHsKKworCXN0YXRpYyBTdHJpbmcgSVRFUkFUSU9OX0tFWSA9ICJpdGVyYXRpb24iOworCXN0YXRpYyBTdHJpbmcgVElNRV9LRVkgPSAidGltZSI7CisJCisJc3RhdGljIFN0cmluZyBMUyA9IFN5c3RlbS5nZXRQcm9wZXJ0eSgibGluZS5zZXBhcmF0b3IiKTsgLy8kTk9OLU5MUy0xJAorCQorCQorCQorCXByaXZhdGUgc3RhdGljIE1hcDxTdHJpbmcsIE1hcDxTaG9ydCwgTGlzdDxTdHJpbmc+Pj4gaGVhZGVyczE7CisJcHJpdmF0ZSBzdGF0aWMgTWFwPFN0cmluZywgTWFwPFNob3J0LCBMaXN0PFN0cmluZz4+PiBoZWFkZXJzMjsKKworCQorCXByaXZhdGUgc3RhdGljIHNob3J0IE5VTV9MRUFEX0NPTFMgPSAyOworCQorCS8qKgorCSAqIAorCSAqIEBwYXJhbSBhcmdzCisJICovCisJQFN1cHByZXNzV2FybmluZ3MoIm5scyIpCisJcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nIFtdIGFyZ3MpIHsKKwkJaWYoYXJncy5sZW5ndGggPCAzKSB7CisJCQlTeXN0ZW0uZXJyLnByaW50bG4oIlVzYWdlOiBNZXJnZUxvZ0ZpbGVzIDxsb2cgcGF0aCAxPiA8bG9nIHBhdGggMj4gPG91dHB1dCBwYXRoPiIpOyAvLyROT04tTkxTLTEkCisJCQlTeXN0ZW0uZXhpdCgtMSk7CisJCX0KKwkJCisJCXRyeSB7CisJCQlTdHJpbmcgaW5wdXREaXIxID0gYXJnc1swXTsKKwkJCVN0cmluZyBpbnB1dERpcjIgPSBhcmdzWzFdOworCQkJU3RyaW5nIG91dERpciA9IGFyZ3NbMl07CisJCQkJCisJCQloZWFkZXJzMSA9IHJlYWRIZWFkZXJzKGlucHV0RGlyMSk7CisJCQloZWFkZXJzMiA9IHJlYWRIZWFkZXJzKGlucHV0RGlyMik7CisJCQkKKwkJCS8vTWFwPFN0cmluZywgTWFwPFNob3J0LCBMaXN0PExpc3Q8U3RyaW5nPj4+PiBkYXRhMSA9cmVhZExvZ0ZpbGVzKGlucHV0RGlyMSk7CisJCQkvL01hcDxTdHJpbmcsIE1hcDxTaG9ydCwgTGlzdDxMaXN0PFN0cmluZz4+Pj4gZGF0YTIgPXJlYWRMb2dGaWxlcyhpbnB1dERpcjIpOworCQkJbWVyZ2VGaWxlcyhpbnB1dERpcjEsIGlucHV0RGlyMiwgb3V0RGlyKTsKKwkJCQkKKwkJfSBjYXRjaChFeGNlcHRpb24gZSl7CisJCQllLnByaW50U3RhY2tUcmFjZSgpOworCQl9CisJfQorCQorCXB1YmxpYyBzdGF0aWMgIE1hcDxTdHJpbmcsIE1hcDxTaG9ydCwgTGlzdDxTdHJpbmc+Pj4gcmVhZEhlYWRlcnMoU3RyaW5nIHJlZkRpcikgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCQorCQkgSGFzaE1hcDxTdHJpbmcsIE1hcDxTaG9ydCwgTGlzdDxTdHJpbmc+Pj5yZXN1bHQgPSBuZXcgIEhhc2hNYXA8U3RyaW5nLCBNYXA8U2hvcnQsIExpc3Q8U3RyaW5nPj4+KCk7CisJCSAKKwkJRmlsZSBmID0gbmV3IEZpbGUocmVmRGlyKTsKKyAgICAgICAgCisJCWlmKCFmLmV4aXN0cygpIHx8ICFmLmlzRGlyZWN0b3J5KCkgKSB7CisJCQlTeXN0ZW0uZXJyLnByaW50bG4oIkVycm9yICIrcmVmRGlyKyIgZG9lcyBub3QgZXhpc3Qgb3IgaXMgbm90IGEgZGlyZWN0b3J5Iik7CisJCQlTeXN0ZW0uZXhpdCgtMSk7CisJCX0KKwkJCisJCWZvcihTdHJpbmcgZmlsZTpmLmxpc3QoKSkgeworCQkJU3RyaW5nIHBhdGggPSBmLmdldEFic29sdXRlUGF0aCgpK0ZpbGUuc2VwYXJhdG9yK2ZpbGU7CisJCQlpZihmLmlzSGlkZGVuKCkgfHwgZmlsZS5zdGFydHNXaXRoKCIuIikpIGNvbnRpbnVlOyAvLyBoaWRkZW4gZmlsZQorCQkJaWYoIWZpbGUuY29udGFpbnMoIl8iKSkgY29udGludWU7IC8vIG5vdCBhIGxvZ2dlZCBDU1YgZmlsZQorCQkJCisJCQlpbnQgaW5kID0gZmlsZS5pbmRleE9mKCJfIik7CisJCQkKKwkJCVN0cmluZyBzdGF0ZSA9IGZpbGUuc3Vic3RyaW5nKDAsIGluZCk7CisJCQlTdHJpbmcgc2xldmVsID0gZmlsZS5zdWJzdHJpbmcoaW5kKzEsIGluZCsyKTsKKwkJCisJCQlzaG9ydCBhZG1pbkxldmVsID0gU2hvcnQucGFyc2VTaG9ydChzbGV2ZWwpOworCQkJLy8gUmVhZCBoZWFkZXIgbGluZQorCQkJQnVmZmVyZWRSZWFkZXIgcmVhZGVyID0gbmV3IEJ1ZmZlcmVkUmVhZGVyKG5ldyBGaWxlUmVhZGVyKHBhdGgpKTsKKwkJCVN0cmluZyBidWZmZXI7CisJCQlidWZmZXIgPSByZWFkZXIucmVhZExpbmUoKTsgCisJCQkJCQkJCisJCQlTdHJpbmcgczsKKwkJCWlmKGJ1ZmZlciAhPSBudWxsKSB7CisJCQkJU3RyaW5nIFtdIHRva3MgPSBidWZmZXIuc3BsaXQoIiwiKTsKKwkJCS8vCVN0cmluZ1Rva2VuaXplciBzdG9rID0gbmV3IFN0cmluZ1Rva2VuaXplcihidWZmZXIsIiwiKTsvLyROT04tTkxTLTEkCisJCQkJCQorCQkJCU1hcDxTaG9ydCwgTGlzdDxTdHJpbmc+PiBhZG1pbk1hcDsKKwkJCQkKKwkJCQlpZighcmVzdWx0LmNvbnRhaW5zS2V5KHN0YXRlKSkgIHsKKwkJCQkJYWRtaW5NYXAgPSBuZXcgSGFzaE1hcDxTaG9ydCwgTGlzdDxTdHJpbmc+PigpOworCQkJCQlyZXN1bHQucHV0KHN0YXRlLCBhZG1pbk1hcCk7CisJCQkJfSBlbHNlIGFkbWluTWFwID0gcmVzdWx0LmdldChzdGF0ZSk7CisJCQkJCisJCQkJTGlzdDxTdHJpbmc+aGVhZGVyID0gbnVsbDsKKwkJCQlpZighYWRtaW5NYXAuY29udGFpbnNLZXkoYWRtaW5MZXZlbCkpIHsKKwkJCQkJaGVhZGVyID0gbmV3IEFycmF5TGlzdDxTdHJpbmc+KCk7CisJCQkJCWFkbWluTWFwLnB1dChhZG1pbkxldmVsLCBoZWFkZXIpOworCQkJCX0KKwkJCQkJCisJCQkJZm9yKGludCBpPTA7aTx0b2tzLmxlbmd0aDsrK2kpICAKKwkJCQkJaGVhZGVyLmFkZCh0b2tzW2ldKTsKKwkJCX0JCQorCQl9CisJCXJldHVybiByZXN1bHQ7CisJfQorCQkKKworCQorCXByaXZhdGUgc3RhdGljIE1hcDxTdHJpbmcsIE1hcDxTaG9ydCwgTGlzdDxMaXN0PFN0cmluZz4+Pj4gcmVhZExvZ0ZpbGVzKFN0cmluZyBsb2dEaXIpIHRocm93cyBFeGNlcHRpb24geworCQkKKwkJSGFzaE1hcDxTdHJpbmcsIE1hcDxTaG9ydCwgTGlzdDxMaXN0PFN0cmluZz4+Pj4gcmVzdWx0ID0gbmV3IEhhc2hNYXA8U3RyaW5nLCBNYXA8U2hvcnQsIExpc3Q8TGlzdDxTdHJpbmc+Pj4+KCk7CisJCQorCQlGaWxlIGYgPSBuZXcgRmlsZShsb2dEaXIpOworCSAgICAgICAgCisJCWlmKCFmLmV4aXN0cygpIHx8ICFmLmlzRGlyZWN0b3J5KCkgKSB7CisJCQlTeXN0ZW0uZXJyLnByaW50bG4oIkVycm9yICIrbG9nRGlyKyIgZG9lcyBub3QgZXhpc3Qgb3IgaXMgbm90IGEgZGlyZWN0b3J5Iik7CisJCQlTeXN0ZW0uZXhpdCgtMSk7CisJCX0KKwkJCQorCQlmb3IoU3RyaW5nIGZpbGU6Zi5saXN0KCkpIHsKKwkJCVN0cmluZyBwYXRoID0gZi5nZXRBYnNvbHV0ZVBhdGgoKStGaWxlLnNlcGFyYXRvcitmaWxlOworU3lzdGVtLm91dC5wcmludGxuKCJSZWFkaW5nICIrcGF0aCk7CisJCQlpZihmLmlzSGlkZGVuKCkgfHwgZmlsZS5zdGFydHNXaXRoKCIuIikpIGNvbnRpbnVlOyAvLyBoaWRkZW4gZmlsZQorCQkJaWYoIWZpbGUuY29udGFpbnMoIl8iKSkgY29udGludWU7IC8vIG5vdCBhIGxvZ2dlZCBDU1YgZmlsZQorCQkJCQorCQkJaW50IGluZCA9IGZpbGUuaW5kZXhPZigiXyIpOworCQkJU3RyaW5nIHN0YXRlID0gZmlsZS5zdWJzdHJpbmcoMCwgaW5kKTsKKwkJCVN0cmluZyBzbGV2ZWwgPSBmaWxlLnN1YnN0cmluZyhpbmQrMSwgaW5kKzIpOworCQkJCisJCQlzaG9ydCBhZG1pbkxldmVsID0gU2hvcnQucGFyc2VTaG9ydChzbGV2ZWwpOworCQkJCisJCQkvLyBSZWFkIGhlYWRlciBsaW5lCisJCQlCdWZmZXJlZFJlYWRlciByZWFkZXIgPSBuZXcgQnVmZmVyZWRSZWFkZXIobmV3IEZpbGVSZWFkZXIocGF0aCkpOworCQkJCisJCQlTdHJpbmcgYnVmZmVyOworCQkJYnVmZmVyID0gcmVhZGVyLnJlYWRMaW5lKCk7IC8vIGhlYWRlcgorCQkJU3RyaW5nIHM7CisJCQkKKwkKKwkJCWJ1ZmZlciA9IHJlYWRlci5yZWFkTGluZSgpOyAvLyBGaXJzdCBkYXRhCisJCQl3aGlsZShidWZmZXIgIT0gbnVsbCkgeworCQkJCUxpc3Q8U3RyaW5nPiByb3cgPSBuZXcgQXJyYXlMaXN0PFN0cmluZz4oKTsKKwkJCQlTdHJpbmdUb2tlbml6ZXIgc3RvayA9IG5ldyBTdHJpbmdUb2tlbml6ZXIoYnVmZmVyLCIsIik7Ly8kTk9OLU5MUy0xJAorCQkJCWludCBjb2xOciA9IDA7CisJCQkJd2hpbGUoc3Rvay5oYXNNb3JlVG9rZW5zKCkpIHsKKwkJCQkJU3RyaW5nIHRvayA9IHN0b2submV4dFRva2VuKCk7CisJCQkJCXJvdy5hZGQodG9rKTsKKwkJCQl9CisJCQkJCisJCQkJTWFwPFNob3J0LCBMaXN0PExpc3Q8U3RyaW5nPj4+IGFkbWluTWFwOworCQkJCWlmKCFyZXN1bHQuY29udGFpbnNLZXkoc3RhdGUpKSAgeworCQkJCQlhZG1pbk1hcCA9IG5ldyBIYXNoTWFwPFNob3J0LCBMaXN0PExpc3Q8U3RyaW5nPj4+KCk7CisJCQkJCXJlc3VsdC5wdXQoc3RhdGUsIGFkbWluTWFwKTsKKwkJCQl9IGVsc2UgYWRtaW5NYXAgPSByZXN1bHQuZ2V0KHN0YXRlKTsKKwkJCQkKKwkJCQlMaXN0PExpc3Q8U3RyaW5nPj5kYXRhID0gbnVsbDsKKwkJCQlpZighYWRtaW5NYXAuY29udGFpbnNLZXkoYWRtaW5MZXZlbCkpIHsKKwkJCQkJZGF0YSA9IG5ldyBBcnJheUxpc3Q8TGlzdDxTdHJpbmc+PigpOworCQkJCQlhZG1pbk1hcC5wdXQoYWRtaW5MZXZlbCwgZGF0YSk7CisJCQkJfSBlbHNlIGRhdGEgPSBhZG1pbk1hcC5nZXQoYWRtaW5MZXZlbCk7CisKKwkJCQlkYXRhLmFkZChyb3cpOworCQkJCWJ1ZmZlciA9IHJlYWRlci5yZWFkTGluZSgpOyAKKwkJCX0KKwkJCisJCQkKKwkJCQorCQkJcmVhZGVyLmNsb3NlKCk7CisJCX0KKwkJcmV0dXJuIHJlc3VsdDsKKwl9CisJCisJQFN1cHByZXNzV2FybmluZ3MoIm5scyIpCisJcHVibGljIHN0YXRpYyB2b2lkIG1lcmdlRmlsZXMoU3RyaW5nIGluMSwgU3RyaW5nIGluMiwgU3RyaW5nIG91dCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCQorCQkKKwkJRmlsZSBmID0gbmV3IEZpbGUoaW4xKTsKKyAgICAgICAgCisJCWlmKCFmLmV4aXN0cygpIHx8ICFmLmlzRGlyZWN0b3J5KCkgKSB7CisJCQlTeXN0ZW0uZXJyLnByaW50bG4oIkVycm9yICIraW4xKyIgZG9lcyBub3QgZXhpc3Qgb3IgaXMgbm90IGEgZGlyZWN0b3J5Iik7CisJCQlTeXN0ZW0uZXhpdCgtMSk7CisJCX0KKwkJCQorCQlmb3IoU3RyaW5nIGZpbGU6Zi5saXN0KCkpIHsKKwkJCVN0cmluZyBwYXRoID0gZi5nZXRBYnNvbHV0ZVBhdGgoKStGaWxlLnNlcGFyYXRvcitmaWxlOworU3lzdGVtLm91dC5wcmludGxuKCJSZWFkaW5nICIrcGF0aCk7CisJCQlpZihmLmlzSGlkZGVuKCkgfHwgZmlsZS5zdGFydHNXaXRoKCIuIikpIGNvbnRpbnVlOyAvLyBoaWRkZW4gZmlsZQorCQkJaWYoIWZpbGUuY29udGFpbnMoIl8iKSkgY29udGludWU7IC8vIG5vdCBhIGxvZ2dlZCBDU1YgZmlsZQorCQkJCQorCQkJaW50IGluZCA9IGZpbGUuaW5kZXhPZigiXyIpOworCQkJU3RyaW5nIHN0YXRlID0gZmlsZS5zdWJzdHJpbmcoMCwgaW5kKTsKKwkJCVN0cmluZyBzbGV2ZWwgPSBmaWxlLnN1YnN0cmluZyhpbmQrMSwgaW5kKzIpOworCQkJCisJCQlzaG9ydCBhZG1pbkxldmVsID0gU2hvcnQucGFyc2VTaG9ydChzbGV2ZWwpOworCQkJCisJCQkvLyBSZWFkIGhlYWRlciBsaW5lCisJCQlCdWZmZXJlZFJlYWRlciByZWFkZXIgPSBuZXcgQnVmZmVyZWRSZWFkZXIobmV3IEZpbGVSZWFkZXIocGF0aCkpOworCQkJCisJCQlTdHJpbmcgYnVmZmVyOworCQkJYnVmZmVyID0gcmVhZGVyLnJlYWRMaW5lKCk7IC8vIGhlYWRlcgorCQkJYnVmZmVyID0gcmVhZGVyLnJlYWRMaW5lKCk7IC8vIGRhdGEKKwkJCUxpc3Q8U3RyaW5nPmRhdGExID0gZ2V0VG9rZW5MaXN0KGJ1ZmZlcik7CisJCQlTdHJpbmcgczsKKwkJCQorCQkJU3RyaW5nIHBhdGgyID0gaW4yK0ZpbGUuc2VwYXJhdG9yK3N0YXRlKyJfIitzbGV2ZWwrIi5jc3YiOworCQkJQnVmZmVyZWRSZWFkZXIgcmVhZGVyMiAgPSBuZXcgQnVmZmVyZWRSZWFkZXIobmV3IEZpbGVSZWFkZXIocGF0aDIpKTsKKwkJCVN0cmluZyBidWZmZXIyID0gcmVhZGVyMi5yZWFkTGluZSgpOyAvLyBoZWFkZXIKKwkJCWJ1ZmZlcjIgPSByZWFkZXIyLnJlYWRMaW5lKCk7IC8vIGRhdGEKKwkJCUxpc3Q8U3RyaW5nPmRhdGEyID0gZ2V0VG9rZW5MaXN0KGJ1ZmZlcjIpOworCQkKKwkJCUxpc3Q8U3RyaW5nPmgxID0gaGVhZGVyczEuZ2V0KHN0YXRlKS5nZXQoYWRtaW5MZXZlbCk7CisJCQlMaXN0PFN0cmluZz5oMiA9IGhlYWRlcnMyLmdldChzdGF0ZSkuZ2V0KGFkbWluTGV2ZWwpOworCQkJCQorCQkJVHJlZVNldDxTdHJpbmc+c29ydGVkTGlzdCA9IG5ldyBUcmVlU2V0PFN0cmluZz4oKTsKKwkJCWZvcihTdHJpbmcgbG9jOmgxKQorCQkJCXNvcnRlZExpc3QuYWRkKGxvYyk7CisJCQlmb3IoU3RyaW5nIGxvYzpoMikKKwkJCQlpZighc29ydGVkTGlzdC5jb250YWlucyhsb2MpKQorCQkJCQlzb3J0ZWRMaXN0LmFkZChsb2MpOworCQkJCQorCQkJRmlsZSBvRGlyID0gbmV3IEZpbGUob3V0KTsKKwkJCWlmKCFvRGlyLmV4aXN0cygpKQorCQkJCW9EaXIubWtkaXJzKCk7CisJCQkKKwkJCVN0cmluZyBmbmFtZSA9IG91dCtGaWxlLnNlcGFyYXRvcitzdGF0ZSsiXyIrYWRtaW5MZXZlbCsiLmNzdiI7CisJCQlCdWZmZXJlZFdyaXRlciBmdyA9IG5ldyBCdWZmZXJlZFdyaXRlcihuZXcgRmlsZVdyaXRlcihmbmFtZSksIDEwMjQqMTAyNCk7CisJCQkJCisJCQkvLyBXcml0ZSBoZWFkZXIKKwkJCWZ3LndyaXRlKElURVJBVElPTl9LRVkpOworCQkJZncud3JpdGUoIiwiKTsKKwkJCWZ3LndyaXRlKFRJTUVfS0VZKTsKKwkJCQkKKwkJCWZvcihTdHJpbmcgbG9jOnNvcnRlZExpc3QpIHsJCisJCQkJaWYobG9jLmVxdWFscyhJVEVSQVRJT05fS0VZKSB8fCBsb2MuZXF1YWxzKFRJTUVfS0VZKSkgY29udGludWU7CisJCQkJZncud3JpdGUoIiwiKTsKKwkJCQlmdy53cml0ZShsb2MpOworCQkJfQorCQkJZncud3JpdGUoIlxuIik7CisJCQkJCisJCQkvLyBXcml0ZSBkYXRhCisJCQl3aGlsZShkYXRhMSAhPSBudWxsICYmIGRhdGExLnNpemUoKSA+IDApIHsgLy8gRmlyc3QgbG9nIGZpbGUgY29udHJvbHMgdGhlIG51bWJlciBvZiByb3dzCisJCQkJZncud3JpdGUoZGF0YTEuZ2V0KDApKTsgLy8gaXRlcmF0aW9uCisJCQkJZncud3JpdGUoIiwiKTsKKwkJCQlmdy53cml0ZShkYXRhMi5nZXQoMSkpOyAvLyB0aW1lCisJCQkJCQorCQkJCWZvcihTdHJpbmcgbG9jOnNvcnRlZExpc3QpIHsKKwkJCQkJaWYobG9jLmVxdWFscyhJVEVSQVRJT05fS0VZKSB8fCBsb2MuZXF1YWxzKFRJTUVfS0VZKSkgY29udGludWU7CisJCQkJCWZ3LndyaXRlKCIsIik7CisJCQkJCWludCBpbmRleCA9IGgxLmluZGV4T2YobG9jKTsKKwkJCQkJaWYoaW5kZXggIT0gLTEpIAorCQkJCQkJZncud3JpdGUoZGF0YTEuZ2V0KGluZGV4KSk7CisJCQkJCWVsc2UgeworCQkJCQkJaW5kZXggPSBoMi5pbmRleE9mKGxvYyk7CisJCQkJCQkJaWYoaW5kZXggIT0gLTEpIAorCQkJCQkJCQlmdy53cml0ZShkYXRhMi5nZXQoaW5kZXgpKTsKKwkJCQkJCQllbHNlIHRocm93IG5ldyBFeGNlcHRpb24oIkNhbm5vdCBmaW5kICIrbG9jKyIgaW4gYW55IG9mIHRoZSBsb2dzIik7CisJCQkJCQl9CisJCQkJCQkKKwkJCQl9IC8vIGZvciBlYWNoIGxvY2F0aW9uCisJCQkJZncud3JpdGUoIlxuIik7CisJCQkJZGF0YTEgPSBnZXRUb2tlbkxpc3QocmVhZGVyLnJlYWRMaW5lKCkpOworCQkJCWRhdGEyID0gZ2V0VG9rZW5MaXN0KHJlYWRlcjIucmVhZExpbmUoKSk7CisJCQl9CisJCQlmdy5mbHVzaCgpOworCQkJZncuY2xvc2UoKTsKKwkJfSAvLyBmb3IgZWFjaCBmaWxlCisJfQorCQkJCisJCQkKKwlwcml2YXRlIHN0YXRpYyBMaXN0PFN0cmluZz4gZ2V0VG9rZW5MaXN0KFN0cmluZyBzKSB7CisJCWlmKHMgPT0gbnVsbCkgcmV0dXJuIG51bGw7CisJCUFycmF5TGlzdDxTdHJpbmc+cmVzdWx0ID0gbmV3IEFycmF5TGlzdDxTdHJpbmc+KCk7CisJCVN0cmluZ1Rva2VuaXplciBzdG9rID0gbmV3IFN0cmluZ1Rva2VuaXplcihzLCIsIik7Ly8kTk9OLU5MUy0xJAorCQl3aGlsZShzdG9rLmhhc01vcmVUb2tlbnMoKSkgeworCQkJU3RyaW5nIHRvayA9IHN0b2submV4dFRva2VuKCk7CisJCQlyZXN1bHQuYWRkKHRvayk7CisJCX0KKwkJcmV0dXJuIHJlc3VsdDsKKwl9Cit9CisKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3NyYy9vcmcvZWNsaXBzZS9zdGVtL3V0aWxpdHkvZ2VuZXJhdG9ycy9NZXNzYWdlcy5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdXRpbGl0eS9nZW5lcmF0b3JzL01lc3NhZ2VzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTNjN2JlZgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3NyYy9vcmcvZWNsaXBzZS9zdGVtL3V0aWxpdHkvZ2VuZXJhdG9ycy9NZXNzYWdlcy5qYXZhCkBAIC0wLDAgKzEsNDUgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5LmdlbmVyYXRvcnM7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDkgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgamF2YS51dGlsLk1pc3NpbmdSZXNvdXJjZUV4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLnV0aWwuUmVzb3VyY2VCdW5kbGU7CisKKy8qKgorICogCisgKiBBdXRvZ2VuZXJhdGVkIGNsYXNzCisgKiAKKyAqLworcHVibGljIGNsYXNzIE1lc3NhZ2VzIHsKKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgQlVORExFX05BTUUgPSAib3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5LmdlbmVyYXRvcnMubWVzc2FnZXMiOyAvLyROT04tTkxTLTEkCisKKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBSZXNvdXJjZUJ1bmRsZSBSRVNPVVJDRV9CVU5ETEUgPSBSZXNvdXJjZUJ1bmRsZQorCQkJLmdldEJ1bmRsZShCVU5ETEVfTkFNRSk7CisKKwlwcml2YXRlIE1lc3NhZ2VzKCkgeworCQkvLyBOb3RoaW5nIGhlcmUKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBleHRlcm5hbGl6ZWQgc3RyaW5nIGxpdGVyYWwuCisJICogCisJICogQHBhcmFtIGtleQorCSAqIEByZXR1cm4gdGhlIGV4dGVybmFsaXplZCBzdHJpbmcgbGl0ZXJhbC4KKwkgKi8KKwlwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRTdHJpbmcoU3RyaW5nIGtleSkgeworCQl0cnkgeworCQkJcmV0dXJuIFJFU09VUkNFX0JVTkRMRS5nZXRTdHJpbmcoa2V5KTsKKwkJfSBjYXRjaCAoTWlzc2luZ1Jlc291cmNlRXhjZXB0aW9uIGUpIHsKKwkJCXJldHVybiAnIScgKyBrZXkgKyAnISc7CisJCX0KKwl9Cit9CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91dGlsaXR5L2dlbmVyYXRvcnMvTXVsdGlQYXNzRG93blNhbXBsZXIuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3NyYy9vcmcvZWNsaXBzZS9zdGVtL3V0aWxpdHkvZ2VuZXJhdG9ycy9NdWx0aVBhc3NEb3duU2FtcGxlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMwNGZhYjAKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91dGlsaXR5L2dlbmVyYXRvcnMvTXVsdGlQYXNzRG93blNhbXBsZXIuamF2YQpAQCAtMCwwICsxLDE4NjkgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5LmdlbmVyYXRvcnM7CisKK2ltcG9ydCBqYXZhLmlvLkJ1ZmZlcmVkUmVhZGVyOworaW1wb3J0IGphdmEuaW8uRmlsZTsKK2ltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOworaW1wb3J0IGphdmEuaW8uUHJpbnRXcml0ZXI7CitpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbnM7CitpbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7CitpbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOworaW1wb3J0IGphdmEudXRpbC5MaXN0OworaW1wb3J0IGphdmEudXRpbC5TZXQ7CitpbXBvcnQgamF2YS51dGlsLlN0cmluZ1Rva2VuaXplcjsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcworICogcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZgorICogdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzCisgKiBhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqIAorICogQ29udHJpYnV0b3JzOiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKgorICogU1RFTSBJSSBEYXRhIE1pZ3JhdGlvbi9HZW5lcmF0aW9uIFV0aWxpdGllcyA6IEluc3RhbmNlcyBvZiB0aGlzIGNsYXNzIGFyZQorICogdXNlZCB0byBydW4gYSBwb2ludC1yZWR1Y3Rpb24gYWxnb3JpdGhtIG9uIHRoZSBEaXZhIHNldC4KKyAqIAorICogCisgKiBOT1RFOiBNVUxUSSBQQVNTIERPV04gU0FNUExFUiBpcyB1c2VkIGZvciBpdGVyYXRpb25zIHR3byBhbmQgYmV5b25kLiBGb3IKKyAqIGZpcnN0IG9yIHNpbmdsZSBpdGVyYXRpb24gYWx3YXlzIHVzZSBzaW5nbGUgcGFzcyBkb3duIHNhbXBsZXIuCisgKiAKKyAqIAorICogVG8gY29uZmlndXJlLCBzZWUgY29uZmlndXJhdGlvbiBmaWxlIDoKKyAqIG9yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9jb25maWd1cmF0aW9uL011bHRpUGFzc0Rvd25TYW1wbGVyLmNvbmZpZworICogCisgKiAKKyAqIFRvIHJ1biwgYWRkIHBhdGggdG8gY29uZmlndXJhdGlvbiBmaWxlIGluIHRoZSBydW4gcHJvZmlsZSAoaS5lLgorICogQzpcc3RlbUlJXG9yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eVxjb25maWd1cmF0aW9uXE11bHRpUGFzc0Rvd25TYW1wbGVyLmNvbmZpZykKKyAqIAorICogCisgKiBTRVQgVk1BUkdTIFRPIDogLVhtczEwMjRtIC1YbXgxMDI0bQorICogCisgKiAKKyAqLworcHVibGljIGNsYXNzIE11bHRpUGFzc0Rvd25TYW1wbGVyIHsKKworCS8qKgorCSAqIE91ciBzb3VyY2UgZmlsZXMgZm9yIElTTyAzMTY2LTEgY29kZXMgYW5kIGZvciB0aGUgbGlzdCBvZiB0YXJnZXQKKwkgKiBjb3VudHJpZXMuCisJICovCisKKwlwcml2YXRlIFN0cmluZyB0aHJlc2hvbGQgPSBudWxsOworCisJcHJpdmF0ZSBTdHJpbmcgaXRlcmF0aW9ucyA9IG51bGw7CisKKwlwcml2YXRlIFN0cmluZyBpc28zMTY2XzEgPSBudWxsOworCisJcHJpdmF0ZSBTdHJpbmcgaXNvMzE2Nl8yID0gbnVsbDsKKworCXByaXZhdGUgU3RyaW5nIGZpeEZpbGUgPSBudWxsOworCisJcHJpdmF0ZSBTdHJpbmcgdGFyZ2V0RmlsZSA9IG51bGw7CisKKwlwcml2YXRlIFN0cmluZyBpbnB1dERpciA9IG51bGw7CisKKwlwcml2YXRlIFN0cmluZyBsZXhEaXIgPSBudWxsOworCisJcHJpdmF0ZSBTdHJpbmcgb3V0cHV0RGlyID0gbnVsbDsKKworCXByaXZhdGUgU3RyaW5nIHdvcmtzcGFjZSA9IG51bGw7CisKKwlwcml2YXRlIFN0cmluZyB1c2FEZXNjcmlwdG9yRmlsZSA9IG51bGw7CisKKwkvKioKKwkgKiBMaXN0IGZvciBJU08gMzE2Ni0xIGNvZGVzIGFuZCB0YXJnZXQgY291bnRyaWVzLgorCSAqLworCisJTGlzdCB0YXJnZXRMaXN0ID0gbnVsbDsKKworCUxpc3QgY29kZUxpc3QgPSBudWxsOworCisJTGlzdCBjb2RlZml4TGlzdCA9IG51bGw7CisKKwlMaXN0IHVzYURlc2NyaXB0b3JMaXN0ID0gbnVsbDsKKworCS8qKgorCSAqIExpc3QgdG8ga2VlcCB0cmFjayBvZiBwYWlycyAoUG9pbnREYXZhOlZhbHVlKQorCSAqLworCUxpc3Q8U3RyaW5nPiBwb2ludERhdGFMaXN0ID0gbnVsbDsKKworCS8qKgorCSAqIEEgZmxhZyB0aGF0IGluZGljYXRlcyB3aGV0aGVyIHdlIGNhbiBkZWxldGUgYSBwb2ludC4KKwkgKi8KKwkvLyBObywgaXQgaXMgbm90IHNhZmUgdG8gcmVtb3ZlIHRoaXMgbm9kZS4KKwlmaW5hbCBTdHJpbmcgVU5TQUZFID0gIjAiOyAvLyROT04tTkxTLTEkCisKKwkvLyBZZXMsIGl0IGNhbiBiZSBkZWxldGVkLgorCWZpbmFsIFN0cmluZyBTQUZFID0gIjEiOyAvLyROT04tTkxTLTEkCisKKwkvLyBTYWZldHkgc3RhdGUgbm90IGtub3duIHlldCAtPiBpbml0aWFsIHZhbHVlLgorCWZpbmFsIFN0cmluZyBVTktOT1dOID0gIjIiOyAvLyROT04tTkxTLTEkCisKKwkvKioKKwkgKiBVc2VkIGZvciBnbG9iYWwgc3RhdHMuCisJICovCisJZG91YmxlIHRvdGFsUG9pbnRzID0gMDsKKworCWRvdWJsZSB0b3RhbFJlbW92ZWQgPSAwOworCisJZG91YmxlIHRvdGFsUG9seWdvbnMgPSAwOworCisJZG91YmxlIGdsb2JhbE1pblBlcmNlbnQgPSBEb3VibGUuTUFYX1ZBTFVFOworCisJZG91YmxlIGdsb2JhbE1heFBlcmNlbnQgPSAwLjA7CisKKwlkb3VibGUgZ2xvYmFsUGVyY2VudCA9IDAuMDsKKworCS8qKgorCSAqIExpc3RzIHRvIGtlZXAgdHJhY2sgb2YgdGhlIG9jY3VyZW5jZXMgb2YgdmFsdWVzIG9mIHRoZSBhbmdsZXMgOiAxODAgLQorCSAqIEFyY0Nvcyh0ZXRhKQorCSAqIAorCSAqLworCUhhc2hNYXA8RG91YmxlLCBJbnRlZ2VyPiBhbmdsZVZhbHVlTWFwID0gbnVsbDsKKworCS8qKgorCSAqIENvbnN0cnVjdG9yCisJICogCisJICogQHBhcmFtIHRocmVzaG9sZCAtCisJICogICAgICAgICAgICB0aGUgdGhyZXNob2xkIGluIGRlZ3Jlc3MKKwkgKiBAcGFyYW0gaXRlcmF0aW9ucyAtCisJICogICAgICAgICAgICB0aGUgdG90YWwgbnVtYmVyIG9mIGRvd24gc2FtcGxpbmcgaXRlcmF0aW9ucworCSAqIEBwYXJhbSBpc28zMTY2XzEgLQorCSAqICAgICAgICAgICAgZGF0YSBmaWxlIHdpdGggdGhlIElTTzMxNjYtMSBBTFBIQV8yIGFuZCBBTFBIQV8zIGNvZGVzLgorCSAqIEBwYXJhbSBpc28zMTY2XzIgLQorCSAqICAgICAgICAgICAgZGF0YSBmaWxlIHdpdGggdGhlIElTTzMxNjYtMiBjb2Rlcy4KKwkgKiBAcGFyYW0gZml4RmlsZSAtCisJICogICAgICAgICAgICBmaWxlIGNvbnRhaW5pbmcgbWlzc2luZyBJU08zMTY2LTIgY29kZXMKKwkgKiBAcGFyYW0gdGFyZ2V0RmlsZQorCSAqICAgICAgICAgICAgdGhlIGxpc3Qgb2YgY291bnRyaWVzIGZvciB3aGljaCB3ZSB3aWxsIGdlbmVyYXRlIEdNTCBmaWxlcworCSAqIEBwYXJhbSBsZXhEaXIKKwkgKiAgICAgICAgICAgIGZvbGRlciBjb250YWluaW5nIGxleGljb2dyYXBoaWNhbGx5IHNvcnRlZCBmaWxlcworCSAqIEBwYXJhbSBvdXRwdXREaXIKKwkgKiAgICAgICAgICAgIHRoZSBvdXRwdXQgZGlyZWN0b3J5IGZvciB0aGUgR01MIGZpbGVzIHdlIGdlbmVyYXRlCisJICovCisJLy8gcHVibGljIE11bHRpUGFzc0Rvd25TYW1wbGVyKFN0cmluZyB0aHJlc2hvbGQsIFN0cmluZyBpdGVyYXRpb25zLAorCS8vIFN0cmluZyBpc28zMTY2XzEsIFN0cmluZyBpc28zMTY2XzIsIFN0cmluZyBmaXhGaWxlLAorCS8vIFN0cmluZyB0YXJnZXRGaWxlLCBTdHJpbmcgbGV4RGlyLCBTdHJpbmcgb3V0cHV0RGlyKSB7CisJLy8gLy8gU2V0IHZhbHVlcyBvZiBnbG9iYWwgdmFyaWFibGVzLgorCS8vIHRoaXMudGhyZXNob2xkID0gdGhyZXNob2xkOworCS8vIHRoaXMuaXRlcmF0aW9ucyA9IGl0ZXJhdGlvbnM7CisJLy8gdGhpcy5pc28zMTY2XzEgPSBpc28zMTY2XzE7CisJLy8gdGhpcy5pc28zMTY2XzIgPSBpc28zMTY2XzI7CisJLy8gdGhpcy5maXhGaWxlID0gZml4RmlsZTsKKwkvLyB0aGlzLnRhcmdldEZpbGUgPSB0YXJnZXRGaWxlOworCS8vIHRoaXMubGV4RGlyID0gbGV4RGlyOworCS8vIHRoaXMub3V0cHV0RGlyID0gb3V0cHV0RGlyOworCS8vIC8vIEZvciB0aGUgbW9tZW50IGFuZCBmb3IgY29udmVuaWVuY2UsIHRoZSBpbnB1dCBkaXIgaXMgYWxzbyB0aGUgb3V0cHV0CisJLy8gLy8gZGlyLgorCS8vIHRoaXMuaW5wdXREaXIgPSBvdXRwdXREaXI7CisJLy8gdGFyZ2V0TGlzdCA9IG51bGw7CisJLy8gYW5nbGVWYWx1ZU1hcCA9IG5ldyBIYXNoTWFwPERvdWJsZSwgSW50ZWdlcj4oKTsKKwkvLyB0aGlzLnVzYURlc2NyaXB0b3JGaWxlID0gd29ya3NwYWNlCisJLy8gKyAiXFxvcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHlcXHBhcmFtZXRlcnNcXElTT0ZJWFxcVVNBX0ZJUFMudHh0IjsKKwkvLyAvLyROT04tTkxTLTEkCisJLy8gfQorCS8qKgorCSAqIEBwYXJhbSBjb25maWdGaWxlCisJICovCisJcHVibGljIE11bHRpUGFzc0Rvd25TYW1wbGVyKFN0cmluZyBjb25maWdGaWxlKSB7CisKKwkJLy8gTG9hZCBhbGwgY29uZmlndXJhdGlvbiB2YXJpYWJsZXMKKwkJSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4gdmFycyA9IEdlblV0aWxzLmxvYWRDb25maWdGaWxlKGNvbmZpZ0ZpbGUpOworCisJCVNldDxTdHJpbmc+IGtleXMgPSB2YXJzLmtleVNldCgpOworCQlJdGVyYXRvciBpdCA9IGtleXMuaXRlcmF0b3IoKTsKKwkJd2hpbGUgKGl0Lmhhc05leHQoKSkgeworCQkJU3RyaW5nIHZhciA9IChTdHJpbmcpIGl0Lm5leHQoKTsKKworCQkJLy8gQXNzaWduIHZhbHVlcyB0byBjb25maWd1cmF0aW9uIHZhcmlhYmxlcyA6CisJCQlpZiAodmFyLmVxdWFscygiV09SS1NQQUNFIikpIHsgLy8kTk9OLU5MUy0xJAorCQkJCXdvcmtzcGFjZSA9IHZhcnMuZ2V0KHZhcik7CisJCQl9IGVsc2UgaWYgKHZhci5lcXVhbHMoIlRIUkVTSE9MRCIpKSB7IC8vJE5PTi1OTFMtMSQKKwkJCQl0aHJlc2hvbGQgPSB2YXJzLmdldCh2YXIpOworCQkJfSBlbHNlIGlmICh2YXIuZXF1YWxzKCJJVEVSQVRJT05TIikpIHsgLy8kTk9OLU5MUy0xJAorCQkJCWl0ZXJhdGlvbnMgPSB2YXJzLmdldCh2YXIpOworCQkJfSBlbHNlIGlmICh2YXIuZXF1YWxzKCJJU08zMTY2XzEiKSkgeyAvLyROT04tTkxTLTEkCisJCQkJaXNvMzE2Nl8xID0gdmFycy5nZXQodmFyKTsKKwkJCX0gZWxzZSBpZiAodmFyLmVxdWFscygiSVNPMzE2Nl8yIikpIHsgLy8kTk9OLU5MUy0xJAorCQkJCWlzbzMxNjZfMiA9IHZhcnMuZ2V0KHZhcik7CisJCQl9IGVsc2UgaWYgKHZhci5lcXVhbHMoIklTT19GSVgiKSkgeyAvLyROT04tTkxTLTEkCisJCQkJZml4RmlsZSA9IHZhcnMuZ2V0KHZhcik7CisJCQl9IGVsc2UgaWYgKHZhci5lcXVhbHMoIlRBUkdFVF9MSVNUIikgfHwgdmFyLmVxdWFscygiUkVEVUNFX0xJU1QiKSkgeyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKKwkJCQl0YXJnZXRGaWxlID0gdmFycy5nZXQodmFyKTsKKwkJCX0gZWxzZSBpZiAodmFyLmVxdWFscygiTEVYX0RJUiIpKSB7IC8vJE5PTi1OTFMtMSQKKwkJCQlsZXhEaXIgPSB2YXJzLmdldCh2YXIpOworCQkJfSBlbHNlIGlmICh2YXIuZXF1YWxzKCJNQVBfT1VUUFVUIikgfHwgdmFyLmVxdWFscygiT1VUUFVUIikpIHsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCisJCQkJb3V0cHV0RGlyID0gdmFycy5nZXQodmFyKTsKKwkJCX0KKworCQl9IC8vIHdoaWxlCisKKwkJLy8gVGhlIHdvcmtzcGFjZSB2YXJpYWJsZSBzaG91bGQgZW5kIHdpdGggYSBzbGFzaCBjaGFyYWN0ZXIKKwkJaWYgKHdvcmtzcGFjZS5lbmRzV2l0aCgiXFwiKSA9PSBmYWxzZSkgeyAvLyROT04tTkxTLTEkCisJCQl3b3Jrc3BhY2UgKz0gIlxcIjsgLy8kTk9OLU5MUy0xJAorCQl9CisKKwkJU3RyaW5nIHBhdGggPSB3b3Jrc3BhY2UgKyBHZW5Db25zdGFudHMuUEFSQU1TX0RJUjsKKworCQkvLyBTZXQgcmVtYWluaW5nIGNvbmZpZyB2YXJzIHVzaW5nIFdPUktTUEFDRSAod29ya3NwYWNlIHJlbGF0aXZlKQorCQlpZiAodGhyZXNob2xkID09IG51bGwpIHsKKwkJCXRocmVzaG9sZCA9IEdlbkNvbnN0YW50cy5ERUZBVUxUX1RIUkVTSE9MRDsgLy8gRGVmYXVsdHMgdG8gNSBkZWdyZWVzCisJCX0KKwkJaWYgKGl0ZXJhdGlvbnMgPT0gbnVsbCkgeworCQkJaXRlcmF0aW9ucyA9IEdlbkNvbnN0YW50cy5ERUZBVUxUX0lURVJBVElPTlM7IC8vIERlZmF1bHRzIHRvIDUKKwkJCS8vIGl0ZXJhdGlvbnMKKwkJfQorCQlpZiAoaXNvMzE2Nl8xID09IG51bGwpIHsKKwkJCWlzbzMxNjZfMSA9IHBhdGggKyBHZW5Db25zdGFudHMuSVNPMzE2Nl8xX0ZJTEU7CisJCX0KKwkJaWYgKGlzbzMxNjZfMiA9PSBudWxsKSB7CisJCQlpc28zMTY2XzIgPSBwYXRoICsgR2VuQ29uc3RhbnRzLklTTzMxNjZfMl9GSUxFOworCQl9CisJCWlmIChmaXhGaWxlID09IG51bGwpIHsKKwkJCWZpeEZpbGUgPSBwYXRoICsgR2VuQ29uc3RhbnRzLklTT0ZJWF9GSUxFOworCQl9CisJCWlmICh0YXJnZXRGaWxlID09IG51bGwpIHsKKwkJCXRhcmdldEZpbGUgPSBwYXRoICsgR2VuQ29uc3RhbnRzLlJFRFVDRV9MSVNUOworCQl9CisJCWlmIChsZXhEaXIgPT0gbnVsbCkgeworCQkJbGV4RGlyID0gcGF0aCArIEdlbkNvbnN0YW50cy5MRVhfRElSOworCQl9CisKKwkJaWYgKEdlblV0aWxzLnZlcmlmeU91dHB1dERpcmVjdG9yeSh2YXJzKSA9PSBmYWxzZSkgeworCQkJU3lzdGVtLm91dAorCQkJCQkucHJpbnRsbigiXHRcdEJhZCBjb25maWd1cmF0aW9uIGZpbGUgLS0gT1VUUFVUIHZhcmlhYmxlIG5vdCBmb3VuZC4gUGxlYXNlIHNwZWNpZnkgb3V0cHV0IGRpcmVjdG9yeSB1c2luZyBmb3JtYXQgVkFSID0gVkFMVUUgKGkuZS4gT1VUUFVUID0gQzpcXGRpdmFcXGdyb3VwZWRcXCAiKTsgLy8kTk9OLU5MUy0xJAorCQkJU3lzdGVtLmV4aXQoMSk7CisJCX0KKworCQkvLyBGb3IgdGhlIG1vbWVudCBhbmQgZm9yIGNvbnZlbmllbmNlLCB0aGUgaW5wdXQgZGlyIGlzIGFsc28gdGhlIG91dHB1dAorCQkvLyBkaXIuCisJCXRoaXMuaW5wdXREaXIgPSBvdXRwdXREaXI7CisJCXRhcmdldExpc3QgPSBudWxsOworCQlhbmdsZVZhbHVlTWFwID0gbmV3IEhhc2hNYXA8RG91YmxlLCBJbnRlZ2VyPigpOworCQl0aGlzLnVzYURlc2NyaXB0b3JGaWxlID0gcGF0aCArIEdlbkNvbnN0YW50cy5VU0FfRklQU19GSUxFOworCisJfQorCisJLyoqCisJICogVGhpcyBtZXRob2Qgc2V0cyB1cCBhbmQgcnVucyB0aGlzIGdlbmVyYXRvci4KKwkgKiAKKwkgKi8KKwlwdWJsaWMgdm9pZCBydW4oKSB7CisJCS8vIFJlYWQgYW5kIGtlZXAgaW4gbWVtb3J5IGEgbGlzdCBvZiB0aGUgY291bnRyaWVzIHdlIHdhbnQuCisJCXRhcmdldExpc3QgPSBHZW5VdGlscy5wb3B1bGF0ZUxpc3QodGFyZ2V0RmlsZSk7CisKKwkJLy8gUmVhZCBhbmQga2VlcCBpbiBtZW1vcnkgYSBsaXN0IG9mIHRoZSBJU08zMTY2LTEgQUxQSEEyLCBBTFBIQTMsIGFuZAorCQkvLyBudW1lcmljIGNvZGVzLgorCQljb2RlTGlzdCA9IEdlblV0aWxzLnBvcHVsYXRlTGlzdChpc28zMTY2XzEpOworCisJCS8vIFJlYWQgYW5kIGtlZXAgaW4gbWVtb3J5IGEgbGlzdCBvZiB0aGUgbWlzc2luZyBJU08zMTY2LTIgY29kZXMKKwkJY29kZWZpeExpc3QgPSBHZW5VdGlscy5wb3B1bGF0ZUxpc3QoZml4RmlsZSk7CisKKwkJLy8gTG9hZCB0aGUgbGlzdCBvZiBkZXNjcmlwdG9ycyBmb3IgdGhlIFVTQSAoc3BlY2lhbCBjYXNlKQorCQl1c2FEZXNjcmlwdG9yTGlzdCA9IEdlblV0aWxzLnBvcHVsYXRlTGlzdCh1c2FEZXNjcmlwdG9yRmlsZSk7CisKKwkJLy8gSW5pdGlhbGl6ZSB0aGUgaGFzaCBtYXAKKwkJaW5pdEhhc2hNYXAoYW5nbGVWYWx1ZU1hcCk7CisKKwkJLy8gTm93LCBwcm9jZXNzIGVhY2ggaXRlbSBpbiB0aGUgdGFyZ2V0IGxpc3QuCisJCXByb2Nlc3MoKTsKKworCX0KKworCS8qKgorCSAqIEluaXRpYWxpemUgdGhlIGhhc2ggbWFwLgorCSAqIAorCSAqIEBwYXJhbSBtYXAgLQorCSAqICAgICAgICAgICAgdGhlIGhhc2ggbWFwCisJICogCisJICovCisJcHVibGljIHZvaWQgaW5pdEhhc2hNYXAoSGFzaE1hcDxEb3VibGUsIEludGVnZXI+IG1hcCkgeworCQkvLyBBZGQgc29tZSBrZXlzL3ZhbHVlcyB0byBvdXIgaGFzaCBtYXAKKwkJbWFwLnB1dChuZXcgRG91YmxlKDkwLjApLCBuZXcgSW50ZWdlcigwKSk7CisJCW1hcC5wdXQobmV3IERvdWJsZSg0NS4wKSwgbmV3IEludGVnZXIoMCkpOworCQltYXAucHV0KG5ldyBEb3VibGUoMjIuNSksIG5ldyBJbnRlZ2VyKDApKTsKKwkJbWFwLnB1dChuZXcgRG91YmxlKDExLjI1KSwgbmV3IEludGVnZXIoMCkpOworCQltYXAucHV0KG5ldyBEb3VibGUoNS41MTI1KSwgbmV3IEludGVnZXIoMCkpOworCQltYXAucHV0KG5ldyBEb3VibGUoMi4wKSwgbmV3IEludGVnZXIoMCkpOworCQltYXAucHV0KG5ldyBEb3VibGUoMS41KSwgbmV3IEludGVnZXIoMCkpOworCQltYXAucHV0KG5ldyBEb3VibGUoMS4wKSwgbmV3IEludGVnZXIoMCkpOworCQltYXAucHV0KG5ldyBEb3VibGUoMC43NSksIG5ldyBJbnRlZ2VyKDApKTsKKwkJbWFwLnB1dChuZXcgRG91YmxlKDAuNSksIG5ldyBJbnRlZ2VyKDApKTsKKwkJbWFwLnB1dChuZXcgRG91YmxlKDAuMjUpLCBuZXcgSW50ZWdlcigwKSk7CisJCW1hcC5wdXQobmV3IERvdWJsZSgwLjE1KSwgbmV3IEludGVnZXIoMCkpOworCQltYXAucHV0KG5ldyBEb3VibGUoMC4wNSksIG5ldyBJbnRlZ2VyKDApKTsKKwl9CisKKwkvKioKKwkgKiBQZXJmb3JtIHRoZSBzZWNvbmQgaXRlcmF0aW9uIG9mIGRvd24gc2FtcGxpbmcgYW5kIGJleW9uZC4KKwkgKiAKKwkgKiBOT1RFOiBXZSBhc3N1bWUgdGhhdCBTaW5nbGVQYXNzRG93blNhbXBsZXIgaGFzIGJlZW4gcnVuIG9uY2UgYWxyZWFkeS4KKwkgKiAKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBwcm9jZXNzKCkgeworCisJCS8vIFRoZSBpbml0aWFsIHBhc3MgOiBmaXJzdCBwYXNzIGFscmVhZHkgZG9uZSBieSBTaW5nbGVQYXNzRG93blNhbXBsZXIKKwkJZmluYWwgaW50IElOSVQgPSAyOworCisJCS8vIFRoZSBjdXJyZW50IHBhc3Mgb3IgaXRlcmF0aW9uCisJCWludCBwYXNzID0gSU5JVDsKKworCQkvLyBUaGUgdG90YWwgbnVtYmVyIG9mIGl0ZXJhdGlvbnMKKwkJaW50IHRvdGFsSXRlcmF0aW9ucyA9IEludGVnZXIucGFyc2VJbnQoaXRlcmF0aW9ucyk7CisKKwkJLy8gQSB3cml0ZXIgZm9yIHRoZSBuZXcgZmlsZSB3ZSBhcmUgY3JlYXRpbmcuCisJCVByaW50V3JpdGVyIGdtbEZpbGUgPSBudWxsOworCisJCS8vIEEgd3JpdGVyIGZvciB0aGUgcmVkdWNlZCBkYXRhIGZpbGUuCisJCVByaW50V3JpdGVyIHJlZHVjZWRGaWxlID0gbnVsbDsKKworCQkvLyBPYmplY3QgaG9sZGluZyBJU08zMTY2LTEgcmVsYXRlZCBkYXRhLgorCQlJU09Db2RlMSBpc29Db2RlID0gbnVsbDsKKworCQkvLyBOYW1lIG9mIHRoZSBuZXcgcHJvcGVydGllcyBmaWxlLgorCQlTdHJpbmcgZmlsZU5hbWUgPSBudWxsOworCisJCS8vIEEgbGlzdCBmb3IgSVNPIDMxNjYtMiBvYmplY3RzCisJCUxpc3QgaXNvMkxpc3QgPSBuZXcgQXJyYXlMaXN0KCk7CisKKwkJLy8gRmlsZW5hbWVzIGZvciBsZXgxIGFuZCBsZXgyIGZpbGVzIGZvciBhIGdpdmVuIGNvdW50cnkuCisJCVN0cmluZyBsZXhBZG1pbjFGaWxlID0gbnVsbDsKKwkJU3RyaW5nIGxleEFkbWluMkZpbGUgPSBudWxsOworCisJCS8vIExpc3RzIGhvbGRpbmcgdGhlIGxleDEgYW5kIGxleDIgdmFsdWVzLgorCQkvLyBOT1RFOiBsZXggdmFsdWVzIGFyZSB0aGUgbGV4aWNvZ3JhcGhpY2FsbHkgc29ydGVkIHZhbHVlcyBmb3IKKwkJLy8gYWRtaW5pc3RyYXRpb24gbGV2ZWxzLgorCQlMaXN0PFN0cmluZz4gbGV4MURhdGFTZXQgPSBudWxsOworCQlMaXN0PFN0cmluZz4gbGV4MkRhdGFTZXQgPSBudWxsOworCisJCS8vIExpc3RzIGZvciBob2xkaW5nIGxleDEgYW5kIGxleDIgb2JqZWN0cyBmb3IgYSBnaXZlbiBjb3VudHJ5LgorCQlMaXN0PExleDFPYmo+IGxleDFMaXN0ID0gbnVsbDsKKwkJTGlzdDxMZXgyT2JqPiBsZXgyTGlzdCA9IG51bGw7CisKKwkJaW50IHNpemUgPSB0YXJnZXRMaXN0LnNpemUoKTsKKworCQkvLyBBbHBoYSAzIGNvZGUgZm9yIHRoZSBuZXh0IGNvZGUgdG8gcHJvY2Vzcy4uLgorCQlTdHJpbmcgY291bnRyeUFscGhhMyA9IG51bGw7CisKKwkJLy8gSXRlcmF0ZSBmb3IgZXZlcnkgY291bnRyeSBhbmQgY3JlYXRlIGl0cyBHTUwgZGF0YSBmaWxlLgorCQlpbnQgaSA9IDA7CisKKwkJLy8gR2V0IHRoZSBmaXJzdCBjb3VudHJ5IGluIGxpc3QuCisJCWNvdW50cnlBbHBoYTMgPSAoKFN0cmluZykgdGFyZ2V0TGlzdC5nZXQoaSkpLnRyaW0oKTsKKworCQlpZiAoY291bnRyeUFscGhhMyA9PSBudWxsKSB7CisJCQlVdGlsTG9nZ2VyLmxvZ0luZm9ybWF0aW9uKCJcdFx0RXJyb3IgOiBhbHBoYSAzIGNvdW50cnkgY29kZSBpcyBudWxsLiIpOyAvLyROT04tTkxTLTEkCisJCQlTeXN0ZW0uZXhpdCgxKTsKKwkJfQorCisJCXdoaWxlIChpIDwgc2l6ZSkgeworCisJCQkvLyBJcyBpdCB0aW1lIHRvIHByb2Nlc3MgdGhlIG5leHQgY291bnRyeSA/CisJCQlpZiAocGFzcyA+IHRvdGFsSXRlcmF0aW9ucykgeworCQkJCS8vIFllcyAsIHdlIGFyZSBkb25lIHdpdGggdGhlIGl0ZXJhdGlvbnMgLCBnbyB0byBuZXh0LgorCQkJCWkrKzsKKwkJCQlwYXNzID0gSU5JVDsKKwkJCQljb3VudHJ5QWxwaGEzID0gKGkgPCBzaXplKSA/ICgoU3RyaW5nKSB0YXJnZXRMaXN0LmdldChpKSkKKwkJCQkJCS50cmltKCkgOiAiRFVNTVkiOyAvLyROT04tTkxTLTEkCisJCQkJY29udGludWU7CisJCQl9CisKKwkJCS8vIEtlZXAgd2l0aCB0aGUgc2FtZSBjb3VudHJ5IHVudGlsIHdlIGFyZSBkb25lIHdpdGggdGhlIHRvdGFsCisJCQkvLyBudW1iZXIgb2YgcGFzc2VzLiBPdGhlcndpc2UsIGdldCB0aGUgbmV4dCBjb3VudHJ5IGluIHJlZHVjZSBsaXN0LgorCisJCQkvLyBBbiBpbmRleCBmb3IgdW5rbndvbiBvciBuLmEuIGVudHJpZXMKKwkJCWludCB1bmtDb3VudGVyID0gMTsKKworCQkJLy8gV2UgdXNlIHRoaXMgbGlzdCB0byBrZWVwIHRyYWNrIG9mIGR1cGxpY2F0ZWQgcG9seWdvbnMuCisJCQlMaXN0PFNURU1Qb2x5Z29uPiBwb2x5Z29ucyA9IG51bGw7CisKKwkJCS8vIERhdGEgc291cmNlCisJCQlmaWxlTmFtZSA9IGlucHV0RGlyICsgY291bnRyeUFscGhhMyArICJcXCIgKyBjb3VudHJ5QWxwaGEzIC8vJE5PTi1OTFMtMSQKKwkJCQkJKyAiX1JFRFVDRURfIiArIChwYXNzIC0gMSkgKyAiLnR4dCI7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAorCisJCQlCdWZmZXJlZFJlYWRlciByZWFkZXIgPSBHZW5VdGlscy5vcGVuUmVhZGVyKGZpbGVOYW1lKTsKKwkJCVN5c3RlbS5vdXQKKwkJCQkJLnByaW50bG4oIlx0XHQ8PDw8IE1VTFRJIFBBU1MgRE9XTi1TQU1QTEVSIC0tIFByb2Nlc3NpbmcgY291bnRyeSA6ICIgKyBmaWxlTmFtZSArICIgPj4+PiIpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKKworCQkJU3lzdGVtLm91dAorCQkJCQkucHJpbnRsbigiXHRcdDw8PDwgUGFzcyAiICsgcGFzcyArICIgb2YgIiArIHRvdGFsSXRlcmF0aW9ucyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKKwkJCQkJCQkrICI+Pj4+Iik7IC8vJE5PTi1OTFMtMSQKKwkJCXRyeSB7CisKKwkJCQlpZiAocmVhZGVyICE9IG51bGwpIHsKKworCQkJCQlTdHJpbmcgYnVmZmVyID0gbnVsbDsKKwkJCQkJLy8gRGVzY3JpYmVzIGxldmVsIG9mIGRhdGEgd2UKKwkJCQkJLy8gYXJlIG5vdyBwcm9jZXNzaW5nIDogTEVWRUwwLCBMRVZFTDEsIG9yIExFVkVMMi4KKwkJCQkJaW50IGxldmVsID0gLTE7CisKKwkJCQkJLy8gUmVjb3JkIHRoZSBwcmV2aW91cyB0eXBlLgorCQkJCQlpbnQgb2xkbGV2ZWwgPSBsZXZlbCAtIDE7CisKKwkJCQkJLy8gVXNlZCB0byBkaXN0aW5ndWlzaCBiZXR3ZWVuIGEgc2ltcGxlIHBvbHlnb24gYW5kIGlzbGFuZHMKKwkJCQkJLy8gb2YgcG9seWdvbnMuIEluaXRpYWxpemUgc3RyaW5nIHRvIHRoZSBibGFuayBjaGFyYWN0ZXIuCisJCQkJCVN0cmluZyBpc2xhbmQgPSAiICI7IC8vJE5PTi1OTFMtMSQKKworCQkJCQl3aGlsZSAoR2VuVXRpbHMuRU9GKGJ1ZmZlciA9IHJlYWRlci5yZWFkTGluZSgpKSAhPSB0cnVlKSB7CisKKwkJCQkJCS8vIFRoZSBkYXRhIHdlIHdhbnQgdG8gd3JpdGUgdG8gdGhlIG5ldyBHTUwgZmlsZS4KKwkJCQkJCVN0cmluZyBvdXRwdXQgPSAiICI7IC8vJE5PTi1OTFMtMSQKKworCQkJCQkJLy8gTWFrZSBzdXJlIHRoYXQgd2UgbWFyayBhbGwgdW5rbm93biBkYXRhLgorCQkJCQkJYnVmZmVyID0gYnVmZmVyLnJlcGxhY2UoIiwsIiwgIixVTktOT1dOLCIpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKKworCQkJCQkJLy8gV2UgdGFrZSBhIGNodW5rIG9mIHRoZSBkYXRhIFtCVUZGRVJfTUlOLEJVRkZFUl9NQVhdCisJCQkJCQkvLyB0byBtYWtlIHByb2Nlc3NzaW5nIG1vcmUKKwkJCQkJCS8vIGVmZmljaWVudCwgd2UgZG9udCBuZWVkIGFsbCBvZiBpdC4KKwkJCQkJCWludCBCVUZGRVJfTUlOID0gMDsKKwkJCQkJCWludCBCVUZGRVJfTUFYID0gMTI1OworCisJCQkJCQlTdHJpbmdbXSBpdGVtcyA9IEdlblV0aWxzCisJCQkJCQkJCS5leHRyYWN0KGJ1ZmZlci5sZW5ndGgoKSA8IEJVRkZFUl9NQVggPyBidWZmZXIKKwkJCQkJCQkJCQk6IGJ1ZmZlci5zdWJzdHJpbmcoQlVGRkVSX01JTiwKKwkJCQkJCQkJCQkJCUJVRkZFUl9NQVgpKTsKKworCQkJCQkJLy8gR2V0IHRoZSBjb3VudHJ5IG5hbWUKKwkJCQkJCVN0cmluZyBjb3VudHJ5ID0gaXRlbXNbSVNPRGF0YS5DT1VOVFJZX05BTUVdOworCisJCQkJCQkvLyBHZXQgdGhlIElTTzMxNjYtMSBpbmZvIGZvciB0aGlzIGNvdW50cnkKKwkJCQkJCWlmIChpc29Db2RlID09IG51bGwpIHsKKwkJCQkJCQlpc29Db2RlID0gR2VuVXRpbHMuZ2V0SVNPQ29kZShjb3VudHJ5LCBjb2RlTGlzdCk7CisJCQkJCQl9CisKKwkJCQkJCS8vIEdldCB0aGUgdHlwZSBvZiB0aGUgZGF0YSB3ZSBhcmUgcHJvY2Vzc2luZy4KKwkJCQkJCWxldmVsID0gR2VuVXRpbHMuZ2V0TGV2ZWwoaXRlbXMpOworCisJCQkJCQlpZiAobGV2ZWwgIT0gMCAmJiBpc28yTGlzdCAhPSBudWxsKSB7CisJCQkJCQkJLy8gTG9hZCB0aGUgSVNPIDMxNjYtMiBvYmplY3RzIGZvciB0aGlzIGNvdW50cnkKKwkJCQkJCQlpc28yTGlzdCA9IEdlblV0aWxzLmxvYWRJU08yKGlzbzMxNjZfMik7CisJCQkJCQl9CisKKwkJCQkJCS8vIFRoaXMgdmFyaWFibGUgaW5kaWNhdGVzIGEgdHJhbnNpdGlvbiBpbiBvdXIgZGF0YQorCQkJCQkJLy8gcHJvY2Vzc2luZworCQkJCQkJYm9vbGVhbiB0cmFuc2l0aW9uID0gKGxldmVsICE9IG9sZGxldmVsKSA/IHRydWUgOiBmYWxzZTsKKworCQkJCQkJLy8gVGhlIGN1cnJlbnQgZW50aXR5IHdlIGFyZSBkZWFsaW5nIHdpdGguCisJCQkJCQkvLyBCYXNlZCBvbiBpdHMgYWRtaW4gbGV2ZWwgaXQgY2FuIGJlIGEgY291bnRyeSwgYQorCQkJCQkJLy8gY291bnR5LCBldGM7CisJCQkJCQlTdHJpbmcgY3VycmVudCA9IG51bGw7CisKKwkJCQkJCS8vIERlc2NyaXB0b3IgZm9yIGN1cnJlbnQgZW50cnkuCisJCQkJCQlTdHJpbmcgZGVzY3JpcHRvciA9IG51bGw7CisKKwkJCQkJCWlmICh0cmFuc2l0aW9uID09IHRydWUpIHsKKwkJCQkJCQkvLyBVc2UgcHJldmlvdXMgbGV2ZWwgdG8gZGV0ZWN0IHRyYW5zaXRpb25zLgorCQkJCQkJCW9sZGxldmVsID0gbGV2ZWw7CisKKwkJCQkJCQkvLyBSZXNldCB0aGUgcHJldmlvdXMgZW50aXR5CisJCQkJCQkJaXNsYW5kID0gIiAiOyAvLyROT04tTkxTLTEkCisKKwkJCQkJCQkvLyBSZXNldCBjb3VudGVyIG9mIFVOS05PV04gYW5kIE4uQS4gZW50cmllcy4KKwkJCQkJCQl1bmtDb3VudGVyID0gMTsKKwkJCQkJCQkvLyBDbG9zZSB0aGUgcHJldmlvdXMgZmlsZQorCQkJCQkJCWlmIChnbWxGaWxlICE9IG51bGwpIHsKKwkJCQkJCQkJb3V0cHV0ID0gY2xvc2VQb2x5Z29uSXNsYW5kVGFncygpOworCQkJCQkJCQlvdXRwdXQgKz0gZ2V0Q2xvc2luZ1RhZ3MoKTsKKwkJCQkJCQkJR2VuVXRpbHMuYWRkRGF0YShnbWxGaWxlLCBvdXRwdXQpOworCQkJCQkJCQlnbWxGaWxlLmNsb3NlKCk7CisJCQkJCQkJfQorCisJCQkJCQkJLy8gQ2xlYXIgdGhlIGxpc3Qgb2YgdW5pcXVlIHBvbHlnb25zCisJCQkJCQkJaWYgKHBvbHlnb25zICE9IG51bGwpIHsKKwkJCQkJCQkJcG9seWdvbnMuY2xlYXIoKTsKKwkJCQkJCQl9CisKKwkJCQkJCQkvLyBHZXQgYSBuZXcsIGVtcHR5IHBvbHlnb24gbGlzdAorCQkJCQkJCXBvbHlnb25zID0gbmV3IEFycmF5TGlzdDxTVEVNUG9seWdvbj4oKTsKKworCQkJCQkJCS8vIElmIHRoZSBkaXJlY3RvcnkgZG9lcyBub3QgZXhpc3QgZm9yIHRoaXMgY291bnRyeSwKKwkJCQkJCQkvLyBjcmVhdGUgaXQgdXNpbmcgSVNPIGFscGhhMyBjb2RlLgorCQkJCQkJCUZpbGUgY291bnRyeURpciA9IG5ldyBGaWxlKG91dHB1dERpcgorCQkJCQkJCQkJKyBpc29Db2RlLmdldEFscGhhMygpKTsKKworCQkJCQkJCWlmIChjb3VudHJ5RGlyICE9IG51bGwKKwkJCQkJCQkJCSYmIGNvdW50cnlEaXIuZXhpc3RzKCkgPT0gZmFsc2UpIHsKKwkJCQkJCQkJLy8gRGlyZWN0b3J5IGRvZXMgbm90IGV4aXN0LiBDcmVhdGUgaXQuCisJCQkJCQkJCWNvdW50cnlEaXIubWtkaXIoKTsKKwkJCQkJCQl9CisKKwkJCQkJCQkvLyBPcGVuIHRoZSB3cml0ZXIgZm9yIHRoZSByZWR1Y2VkIGRhdGEgZmlsZQorCQkJCQkJCWlmIChyZWR1Y2VkRmlsZSA9PSBudWxsKSB7CisJCQkJCQkJCS8vIENyZWF0ZSBwcm9wZXIgbmFtZSBmb3IgdGhlIHJlZHVjZWQgZGF0YSBmaWxlLgorCQkJCQkJCQlmaWxlTmFtZSA9IGNvdW50cnlEaXIgKyAiXFwiIC8vJE5PTi1OTFMtMSQKKwkJCQkJCQkJCQkrIGlzb0NvZGUuZ2V0QWxwaGEzKCkgKyAiX1JFRFVDRURfIiAvLyROT04tTkxTLTEkCisJCQkJCQkJCQkJKyBwYXNzICsgIi50eHQiOyAvLyROT04tTkxTLTEkCisJCQkJCQkJCXJlZHVjZWRGaWxlID0gR2VuVXRpbHMub3BlbldyaXRlcihmaWxlTmFtZSk7CisJCQkJCQkJfQorCisJCQkJCQkJLy8gLy9DcmVhdGUgdGhlIGZpbGUgbmFtZSBmb3IgdGhlIHJlZHVjZWQgR01MIGZpbGUuCisJCQkJCQkJZmlsZU5hbWUgPSBjb3VudHJ5RGlyICsgIlxcIiArIGlzb0NvZGUuZ2V0QWxwaGEzKCkgLy8kTk9OLU5MUy0xJAorCQkJCQkJCQkJKyAiXyIgKyBsZXZlbCArICJfUkVEVUNFRF9NQVBfIiArIHBhc3MgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCQkJCQkJCQkJCisJCQkJCQkJCQkrICIueG1sIjsgLy8kTk9OLU5MUy0xJAorCisJCQkJCQkJLy8gQ3JlYXRlIHRoZSBmaWxlIG5hbWUgZm9yIHRoZSByZWR1Y2VkIEdNTCBmaWxlLgorCQkJCQkJCS8vIGZpbGVOYW1lID0gY291bnRyeURpciArICJcXCIgKworCQkJCQkJCS8vIGlzb0NvZGUuZ2V0QWxwaGEzKCkgLy8kTk9OLU5MUy0xJAorCQkJCQkJCS8vICsgIl8iICsgbGV2ZWwgKyAiX01BUCIgLy8kTk9OLU5MUy0xJAorCQkJCQkJCS8vIC8vJE5PTi1OTFMtMiQKKwkJCQkJCQkvLyArICIueG1sIjsgLy8kTk9OLU5MUy0xJAorCisJCQkJCQkJLy8gT3BlbiB0aGUgd3JpdGVyIGZvciB0aGUgbmV3IEdNTCBmaWxlCisJCQkJCQkJZ21sRmlsZSA9IEdlblV0aWxzLm9wZW5Xcml0ZXIoZmlsZU5hbWUpOworCisJCQkJCQkJLy8gQWRkIHRoZSBoZWFkZXIgb2YgdGhlIGZpbGUKKwkJCQkJCQlvdXRwdXQgPSBnZXRPcGVuaW5nVGFncyhpc29Db2RlLCBsZXZlbCk7CisKKwkJCQkJCQkvLyBXcml0ZSBkYXRhCisJCQkJCQkJR2VuVXRpbHMuYWRkRGF0YShnbWxGaWxlLCBvdXRwdXQudHJpbSgpKTsKKworCQkJCQkJfSAvLyBpZiggdHJhbnNpdGlvbiA9PSB0cnVlICkKKworCQkJCQkJc3dpdGNoIChsZXZlbCkgeworCisJCQkJCQljYXNlIERhdGFUeXBlcy5MRVZFTF8wOgorCQkJCQkJCWN1cnJlbnQgPSBpc29Db2RlLmdldEFscGhhMygpOworCQkJCQkJCWJyZWFrOworCisJCQkJCQljYXNlIERhdGFUeXBlcy5MRVZFTF8xOgorCQkJCQkJCWN1cnJlbnQgPSBpdGVtc1tJU09EYXRhLkFETUlOMV9OQU1FXS50b1VwcGVyQ2FzZSgpOworCQkJCQkJCWJyZWFrOworCisJCQkJCQljYXNlIERhdGFUeXBlcy5MRVZFTF8yOgorCQkJCQkJCWN1cnJlbnQgPSBpdGVtc1tJU09EYXRhLkFETUlOMl9OQU1FXS50b1VwcGVyQ2FzZSgpOworCQkJCQkJCWJyZWFrOworCisJCQkJCQl9IC8vIHN3aXRjaAorCisJCQkJCQkvLyBIYW5kbGUgVU5LTk9XTiBhbmQgTi5BLiBlbnRyaWVzIGRpZmZlcmVudGx5LgorCQkJCQkJaWYgKGN1cnJlbnQuZXF1YWxzKCJVTktOT1dOIikgfHwgY3VycmVudC5lcXVhbHMoIk4uQS4iKSkgeyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKKworCQkJCQkJCWlmIChsZXZlbCA9PSAxKSB7CisJCQkJCQkJCWN1cnJlbnQgPSBpc29Db2RlLmdldEFscGhhMigpICsgIi1VTkstIiAvLyROT04tTkxTLTEkCisJCQkJCQkJCQkJKyBTdHJpbmcudmFsdWVPZih1bmtDb3VudGVyKyspOworCisJCQkJCQkJfSBlbHNlIHsKKwkJCQkJCQkJLy8gTGV2ZWwgMiBkYXRhLgorCQkJCQkJCQljdXJyZW50ID0gaXNvQ29kZS5nZXRBbHBoYTMoKSArICIuTDIuIiAvLyROT04tTkxTLTEkCisJCQkJCQkJCQkJKyBTdHJpbmcudmFsdWVPZih1bmtDb3VudGVyKyspOworCQkJCQkJCX0KKwkJCQkJCX0KKworCQkJCQkJLy8gV2UgZ2V0IHRoZSBkZXNjcmlwdG9yIGZvciBhZG1pbmlzdHJhdGlvbiBlbnRpdGllcworCQkJCQkJLy8gZGlmZmVyZW50bHkgYmFzZWQgb24gaXRzIGxldmVsLgorCisJCQkJCQlpZiAobGV2ZWwgPT0gMikgeworCisJCQkJCQkJaWYgKGxleDFEYXRhU2V0ID09IG51bGwgJiYgbGV4MkRhdGFTZXQgPT0gbnVsbCkgeworCisJCQkJCQkJCS8vIENvbXBvc2UgdGhlIGZpbGUgbmFtZXMgZm9yIHRoZSBsZXggZmlsZXMgZm9yCisJCQkJCQkJCS8vIHRoaXMKKwkJCQkJCQkJLy8gY291bnRyeS4KKwkJCQkJCQkJbGV4QWRtaW4xRmlsZSA9IGxleERpciArIGlzb0NvZGUuZ2V0QWxwaGEzKCkKKwkJCQkJCQkJCQkrICJcXCIgKyBpc29Db2RlLmdldEFscGhhMygpOyAvLyROT04tTkxTLTEkCisJCQkJCQkJCWxleEFkbWluMkZpbGUgPSBsZXhBZG1pbjFGaWxlOworCQkJCQkJCQlsZXhBZG1pbjFGaWxlICs9ICJfQURNSU4xX0xFWC50eHQiOyAvLyROT04tTkxTLTEkCisJCQkJCQkJCWxleEFkbWluMkZpbGUgKz0gIl9BRE1JTjJfTEVYLnR4dCI7IC8vJE5PTi1OTFMtMSQKKworCQkJCQkJCQkvLyBMb2FkIHRoZSBsZXgxIGFuZCBsZXgyIGZpbGVzIGZvciB0aGlzCisJCQkJCQkJCS8vIGNvdW50cnkuCisJCQkJCQkJCWxleDFEYXRhU2V0ID0gR2VuVXRpbHMKKwkJCQkJCQkJCQkucG9wdWxhdGVMaXN0KGxleEFkbWluMUZpbGUpOworCQkJCQkJCQlsZXgyRGF0YVNldCA9IEdlblV0aWxzCisJCQkJCQkJCQkJLnBvcHVsYXRlTGlzdChsZXhBZG1pbjJGaWxlKTsKKworCQkJCQkJCQkvLyBDcmVhdGUgYSBtZXRob2QgdG8gc2VhcmNoIGZvciBhbiBpdGVtIG9uIGEKKwkJCQkJCQkJLy8gbGlzdCBvZiBsZXggZGF0YSBvYmplY3RzLgorCQkJCQkJCQlsZXgxTGlzdCA9IEdlblV0aWxzLmNyZWF0ZUxleDFMaXN0KGxleDFEYXRhU2V0KTsKKwkJCQkJCQkJbGV4Mkxpc3QgPSBHZW5VdGlscy5jcmVhdGVMZXgyTGlzdChsZXgyRGF0YVNldCk7CisKKwkJCQkJCQl9CisKKwkJCQkJCQkvLyBDb21wb3NlIHRoZSBsZXZlbDIgZGVzY3JpcHRvciB1c2luZyB0aGUgbGV4IGRhdGE6CisKKwkJCQkJCQkvLyBTVEVQIDE6IERvIGEgbG9vayB1cCBpbiB0aGUgbGV4IDIgbGlzdHMuCisKKwkJCQkJCQkvLyBHZXQgdGhlIGxleCAyIG9iamVjdCBmb3IgdGhlIGN1cnJlbnQgZW50cnkuCisJCQkJCQkJTGV4Mk9iaiBsZXgyQ3VycmVudCA9IEdlblV0aWxzLmxleDJMb29rdXAobGV4Mkxpc3QsCisJCQkJCQkJCQlpdGVtc1tJU09EYXRhLkFETUlOMV9OQU1FXSwgY3VycmVudCk7CisKKwkJCQkJCQkvLyBHZXQgdGhlIGxleDFPYmplY3QgdG8gd2hpY2ggbGV4MkN1cnJlbnQgYmVsb25ncworCQkJCQkJCUxleDFPYmogbGV4MUN1cnJlbnQgPSBHZW5VdGlscy5sZXgxTG9va3VwKGxleDFMaXN0LAorCQkJCQkJCQkJbGV4MkN1cnJlbnQuZ2V0QWRtaW4xKCkpOworCisJCQkJCQkJaWYgKGxleDFDdXJyZW50LmdldERlc2NyaXB0b3IoKS5jb250YWlucygiVVMtIikpIHsgLy8kTk9OLU5MUy0xJAorCQkJCQkJCQkvLyBTVEVQIDI6IHBpZWNlIHRvZ2V0aGVyIHRoZSBJRCB1c2luZyB0aGUKKwkJCQkJCQkJLy8gcHJvcGVyIGxleCBvYmplY3RzIDogdGhlIFVTQSBpcyBhIHNwZWNpYWwKKwkJCQkJCQkJLy8gY2FzZQorCQkJCQkJCQlkZXNjcmlwdG9yID0gR2VuVXRpbHMuZ2V0VVNBRGVzY3JpcHRvcigKKwkJCQkJCQkJCQlsZXgyQ3VycmVudC5nZXRBZG1pbjIoKSwgR2VuVXRpbHMKKwkJCQkJCQkJCQkJCS5leHRyYWN0QWxwaGEyKGxleDFDdXJyZW50CisJCQkJCQkJCQkJCQkJCS5nZXREZXNjcmlwdG9yKCkpLAorCQkJCQkJCQkJCXVzYURlc2NyaXB0b3JMaXN0KTsKKworCQkJCQkJCX0gZWxzZSB7CisJCQkJCQkJCS8vIFNURVAgMjogcGllY2UgdG9nZXRoZXIgdGhlIElEIHVzaW5nIHRoZQorCQkJCQkJCQkvLyBwcm9wZXIgbGV4IG9iamVjdHMuCisJCQkJCQkJCWRlc2NyaXB0b3IgPSBsZXgxQ3VycmVudC5nZXREZXNjcmlwdG9yKCkKKwkJCQkJCQkJCQkrICItRyIgLy8kTk9OLU5MUy0xJAorCQkJCQkJCQkJCSsgbGV4MUN1cnJlbnQuZ2V0Rm9ybWF0dGVkSW5kZXgoKQorCQkJCQkJCQkJCSsgbGV4MkN1cnJlbnQuZ2V0Rm9ybWF0dGVkSW5kZXgoKTsKKwkJCQkJCQl9CisKKwkJCQkJCQlpZiAoY3VycmVudC5jb250YWlucygiLkwyLiIpKSB7IC8vJE5PTi1OTFMtMSQKKwkJCQkJCQkJY3VycmVudCA9IGRlc2NyaXB0b3I7CisJCQkJCQkJfQorCisJCQkJCQl9IGVsc2UgeworCQkJCQkJCS8vIENvbXBvc2UgZGVzY3JpcHRvciBmb3IgbCAxIGFuZCBsIDAgZGF0YQorCQkJCQkJCS8vIEdldCB0aGUgZGVzY3JpcHRvciBmb3IgdGhpcyBlbnRpdHkuCisJCQkJCQkJZGVzY3JpcHRvciA9IEdlblV0aWxzLmdldElTTzJEZXNjcmlwdG9yKGlzbzJMaXN0LAorCQkJCQkJCQkJY3VycmVudCwgaXNvQ29kZS5nZXRBbHBoYTIoKSk7CisKKwkJCQkJCQkvLyBJZiB3ZSBjYW50IGZpbmQgdGhlIGRlc2NyaXB0b3IsIHRoZW4gbG9vayBpbiB0aGUKKwkJCQkJCQkvLyBmaXggbGlzdC4KKwkJCQkJCQlpZiAoZGVzY3JpcHRvci5lcXVhbHMoY3VycmVudCkgPT0gdHJ1ZSkgeworCQkJCQkJCQkvLyBMb29rIGZvciBhIGRlc2NyaXB0b3IgaW4gdGhlIGZpeCBmaWxlCisJCQkJCQkJCWRlc2NyaXB0b3IgPSBHZW5VdGlscy5nZXRGaXhDb2RlKGNvZGVmaXhMaXN0LAorCQkJCQkJCQkJCWN1cnJlbnQsIGl0ZW1zW0lTT0RhdGEuQ09VTlRSWV9OQU1FXSk7CisJCQkJCQkJfQorCisJCQkJCQl9CisKKwkJCQkJCS8vIFV0aWxMb2dnZXIubG9nSW5mb3JtYXRpb24oIkRlc2NyaXB0b3IgaXMgOiAiICsgZGVzY3JpcHRvcgorCQkJCQkJLy8gKyAiIGF0IGxldmVsIDogIiArIGxldmVsICsgIiBmb3IgIiArIGN1cnJlbnQpOworCisJCQkJCQkvLyBDcmVhdGUgYSBTVEVNIHBvbHlnb24gd2l0aCB0aGlzIHBvbHlnb24gZGF0YQorCQkJCQkJU1RFTVBvbHlnb24gcG9seWdvbiA9IG5ldyBTVEVNUG9seWdvbihidWZmZXIsIGxldmVsKTsKKworCQkJCQkJLy8gQ2hlY2sgdGhhdCB0aGlzIGlzIGluZGVlZCBhIFNURU0gcG9seWdvbgorCQkJCQkJaWYgKGlzUG9seWdvbihwb2x5Z29uKSAhPSB0cnVlKSB7CisJCQkJCQkJLy8gTm90IGEgcG9seWdvbiwgaWdub3JlLgorCQkJCQkJCWNvbnRpbnVlOworCQkJCQkJfQorCisJCQkJCQkvLyBDb21wdXRlIGEgbWFwIG9mIGFuZ2xlIHZhbHVlcy4KKwkJCQkJCUxpc3Q8U3RyaW5nPiBwb2ludERhdGFMaXN0ID0gY29tcHV0ZUludmVyc2VDb3NpbmVzKHBvbHlnb24pOworCisJCQkJCQkvLyBOb3cgYXBwbHkgcmVkdWN0aW9uIDogZ2V0IHJpZCBvZiBhbGwgcG9pbnRzIHdpdGgKKwkJCQkJCS8vIGFuZ2xlcyBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gYWxwaGEgZGVncmVlcworCQkJCQkJZG91YmxlIGFscGhhID0gRG91YmxlLnBhcnNlRG91YmxlKHRocmVzaG9sZCk7CisJCQkJCQlMaXN0PFN0cmluZz4gcmVkdWNlZFBvaW50RGF0YUxpc3QgPSByZWR1Y2UoYWxwaGEsCisJCQkJCQkJCXBvaW50RGF0YUxpc3QpOworCisJCQkJCQkvLyBVcGRhdGUgR2xvYmFsIFN0YXRzCisJCQkJCQl1cGRhdGVHbG9iYWxTdGF0cyhwb2ludERhdGFMaXN0LnNpemUoKSwKKwkJCQkJCQkJcmVkdWNlZFBvaW50RGF0YUxpc3Quc2l6ZSgpKTsKKworCQkJCQkJLy8gU2hvdyBzb21lIG9mIHRoZSBzdGF0cyBhZnRlciBlYWNoIHJlZHVjdGlvbi4KKwkJCQkJCS8vIHNob3dTdGF0cyhwb2ludERhdGFMaXN0LCByZWR1Y2VkUG9pbnREYXRhTGlzdCwgcGFzcyk7CisKKwkJCQkJCS8vIFB1dCBhbGwgdGhlIHJlbWFpbmluZyBwb2ludHMgaW50byBhIG5ldyBidWZmZXIKKwkJCQkJCVN0cmluZyByZWR1Y2VkUG9seWdvbkRhdGFCdWZmZXIgPSBleHRyYWN0TGlzdEludG9TdHJpbmcocmVkdWNlZFBvaW50RGF0YUxpc3QpOworCisJCQkJCQkvLyBSZWNvbnN0cnVjdCBhIGJ1ZmZlciB3aXRoIHRoZSByZWR1Y2VkIHBvaW50LWRhdGEuCisKKwkJCQkJCS8vIEV4dHJhY3QgYWxsIGRhdGEgZnJvbSBvbGQgYnVmZmVyIGV4Y2VwdCB0aGUgcG9seWdvbgorCQkJCQkJLy8gZGF0YSA6CisJCQkJCQlTdHJpbmcgbm9uUG9seWdvbkRhdGFCdWZmZXIgPSBleHRyYWN0Tm9uUG9seWdvbkRhdGEoCisJCQkJCQkJCWJ1ZmZlci5sZW5ndGgoKSA8IEJVRkZFUl9NQVggPyBidWZmZXIgOiBidWZmZXIKKwkJCQkJCQkJCQkuc3Vic3RyaW5nKEJVRkZFUl9NSU4sIEJVRkZFUl9NQVgpLAorCQkJCQkJCQlsZXZlbCk7CisKKwkJCQkJCS8vIE5vdyBwdXQgdG9nZXRoZXIgYSBuZXcgYnVmZmVyIHdoaWNoIGhhcyBiZWVuIHJlZHVjZWQKKwkJCQkJCVN0cmluZyByZWR1Y2VkQnVmZmVyID0gbm9uUG9seWdvbkRhdGFCdWZmZXIKKwkJCQkJCQkJKyByZWR1Y2VkUG9seWdvbkRhdGFCdWZmZXIgKyAiXG4iOyAvLyROT04tTkxTLTEkCisKKwkJCQkJCS8vIFdyaXRlIHJlZHVjZWQgZGF0YSBidWZmZXIgaW50byB0aGUgcmVkdWNlZCBkYXRhIGZpbGUKKwkJCQkJCUdlblV0aWxzLmFkZERhdGEocmVkdWNlZEZpbGUsIHJlZHVjZWRCdWZmZXIpOworCisJCQkJCQkvLyBEZWxldGUgdGhlIG9sZCBwb2x5Z29uCisJCQkJCQlwb2x5Z29uLmNsZWFyKCk7CisKKwkJCQkJCS8vIENyZWF0ZSBhIG5ldywgcmVkdWNlZCBTVEVNIHBvbHlnb24gd2l0aCB0aGUgbmV3IGRhdGEKKwkJCQkJCS8vIGJ1ZmZlcgorCQkJCQkJcG9seWdvbiA9IG5ldyBTVEVNUG9seWdvbihyZWR1Y2VkUG9seWdvbkRhdGFCdWZmZXIsCisJCQkJCQkJCWxldmVsKTsKKworCQkJCQkJLy8gV2Uga25vdyBpdCBpcyBhIHBvbHlnb24sIGJ1dCBub3cgY2hlY2sgdGhhdCBpdHMgbm90CisJCQkJCQkvLyBkdXBsaWNhdGVkLgorCQkJCQkJaWYgKGlzUG9seWdvbkR1cGxpY2F0ZWQocG9seWdvbnMuaXRlcmF0b3IoKSwgcG9seWdvbikgPT0gdHJ1ZSkgeworCQkJCQkJCS8vIFllcywgaXQgaXMgZHVwbGljYXRlZAorCQkJCQkJCWNvbnRpbnVlOworCQkJCQkJfQorCisJCQkJCQkvLyBBZGQgdGhpcyBwb2x5Z29uIHRvIG91ciBsaXN0IG9mIHVuaXF1ZSBwb2x5Z29ucyBzbworCQkJCQkJLy8gdGhhdCB3ZSBjYW4gY2hlY2sgZHVwbGljYXRlcyBvZiB0aGlzIHBvbHlnb24gbGF0ZXIuCisJCQkJCQlwb2x5Z29ucy5hZGQocG9seWdvbik7CisKKwkJCQkJCS8vIENoZWNrIHRvIHNlZSBpZiB0aGlzIHBvbHlnb24gaXMgcGFydCBvZiBhbiBpc2xhbmQgb2YKKwkJCQkJCS8vIHBvbHlnb25zIG9yIGEgc2ltcGxlIHBvbHlnb24KKwkJCQkJCWlmIChsZXZlbCA9PSAwKSB7CisJCQkJCQkJLy8gSWYgd2UgYXJlIGF0IGFkbWluIGxldmVsIDAgYW5kIGlzbGFuZCBpcyBub3QKKwkJCQkJCQkvLyBOVUxMLCB0aGVuIHdlIGhhdmUgYW4gaXNsYW5kLgorCQkJCQkJCWlmIChpc2xhbmQuZXF1YWxzKCIgIikpIHsgLy8kTk9OLU5MUy0xJAorCQkJCQkJCQlvdXRwdXQgPSBvcGVuUG9seWdvbklzbGFuZFRhZ3MoZGVzY3JpcHRvcik7CisJCQkJCQkJCWlzbGFuZCA9ICJBZG1pbiBMZXZlbCAwIjsgLy8kTk9OLU5MUy0xJAorCQkJCQkJCX0KKwkJCQkJCQlvdXRwdXQgKz0gYWRkTGluZWFyUmluZ1RhZ3MocmVkdWNlZEJ1ZmZlciwgbGV2ZWwpOworCQkJCQkJfSBlbHNlIHsKKworCQkJCQkJCWlmIChpc2xhbmQuZXF1YWxzKCIgIikgPT0gdHJ1ZSkgeyAvLyROT04tTkxTLTEkCisJCQkJCQkJCW91dHB1dCA9IG9wZW5Qb2x5Z29uSXNsYW5kVGFncyhkZXNjcmlwdG9yKTsKKwkJCQkJCQkJb3V0cHV0ICs9IGFkZExpbmVhclJpbmdUYWdzKHJlZHVjZWRCdWZmZXIsCisJCQkJCQkJCQkJbGV2ZWwpOworCisJCQkJCQkJfSBlbHNlIHsKKworCQkJCQkJCQlpZiAoY3VycmVudC5lcXVhbHMoaXNsYW5kKSA9PSBmYWxzZSkgeworCQkJCQkJCQkJb3V0cHV0ID0gY2xvc2VQb2x5Z29uSXNsYW5kVGFncygpOworCQkJCQkJCQkJb3V0cHV0ICs9IG9wZW5Qb2x5Z29uSXNsYW5kVGFncyhkZXNjcmlwdG9yKTsKKwkJCQkJCQkJCW91dHB1dCArPSBhZGRMaW5lYXJSaW5nVGFncyhyZWR1Y2VkQnVmZmVyLAorCQkJCQkJCQkJCQlsZXZlbCk7CisJCQkJCQkJCX0gZWxzZSB7CisJCQkJCQkJCQlvdXRwdXQgPSBhZGRMaW5lYXJSaW5nVGFncyhyZWR1Y2VkQnVmZmVyLAorCQkJCQkJCQkJCQlsZXZlbCk7CisJCQkJCQkJCQlHZW5VdGlscy5hZGREYXRhKGdtbEZpbGUsIG91dHB1dC50cmltKCkpOworCQkJCQkJCQkJY29udGludWU7CisJCQkJCQkJCX0KKwkJCQkJCQl9CisKKwkJCQkJCQlzd2l0Y2ggKGxldmVsKSB7CisKKwkJCQkJCQljYXNlIERhdGFUeXBlcy5MRVZFTF8xOgorCQkJCQkJCQlpc2xhbmQgPSBpdGVtc1tJU09EYXRhLkFETUlOMV9OQU1FXQorCQkJCQkJCQkJCS50b1VwcGVyQ2FzZSgpOworCQkJCQkJCQlicmVhazsKKworCQkJCQkJCWNhc2UgRGF0YVR5cGVzLkxFVkVMXzI6CisJCQkJCQkJCWlzbGFuZCA9IGl0ZW1zW0lTT0RhdGEuQURNSU4yX05BTUVdCisJCQkJCQkJCQkJLnRvVXBwZXJDYXNlKCk7CisJCQkJCQkJCWJyZWFrOworCQkJCQkJCX0KKwkJCQkJCX0KKworCQkJCQkJR2VuVXRpbHMuYWRkRGF0YShnbWxGaWxlLCBvdXRwdXQudHJpbSgpKTsKKworCQkJCQl9IC8vIHdoaWxlIGxvb3AKKworCQkJCQkvLyBSZXNldCBhbGwgbGV4LXJlbGF0ZWQgaXRlbXMKKworCQkJCQlpZiAobGV4MURhdGFTZXQgIT0gbnVsbCkgeworCQkJCQkJbGV4MURhdGFTZXQuY2xlYXIoKTsKKwkJCQkJCWxleDFEYXRhU2V0ID0gbnVsbDsKKwkJCQkJfQorCQkJCQlpZiAobGV4MkRhdGFTZXQgIT0gbnVsbCkgeworCQkJCQkJbGV4MkRhdGFTZXQuY2xlYXIoKTsKKwkJCQkJCWxleDJEYXRhU2V0ID0gbnVsbDsKKwkJCQkJfQorCQkJCQlpZiAobGV4MUxpc3QgIT0gbnVsbCkgeworCQkJCQkJbGV4MUxpc3QuY2xlYXIoKTsKKwkJCQkJCWxleDFMaXN0ID0gbnVsbDsKKwkJCQkJfQorCQkJCQlpZiAobGV4Mkxpc3QgIT0gbnVsbCkgeworCQkJCQkJbGV4Mkxpc3QuY2xlYXIoKTsKKwkJCQkJCWxleDJMaXN0ID0gbnVsbDsKKwkJCQkJfQorCisJCQkJCWxleEFkbWluMUZpbGUgPSBudWxsOworCQkJCQlsZXhBZG1pbjJGaWxlID0gbnVsbDsKKworCQkJCQkvLyBXZSBkb250IG5lZWQgdGhlIElTTyBjb2RlIG9iamVjdCBmb3IgdGhpcyBjb3VudHJ5CisJCQkJCS8vIGFueW1vcmUsIHdlIGFyZSBkb25lIHByb2Nlc3NpbmcgaXQuCisJCQkJCWlzb0NvZGUgPSBudWxsOworCisJCQkJCS8vIENsb3NlIGFsbCBvcGVuIHJlc291cmNlcy4KKwkJCQkJcmVhZGVyLmNsb3NlKCk7CisKKwkJCQkJaWYgKGdtbEZpbGUgIT0gbnVsbCkgeworCQkJCQkJLy8gV3JpdGUgZm9ybWF0dGVkIG91dHB1dAorCQkJCQkJR2VuVXRpbHMuYWRkRGF0YShnbWxGaWxlLCBjbG9zZVBvbHlnb25Jc2xhbmRUYWdzKCkpOworCQkJCQkJR2VuVXRpbHMuYWRkRGF0YShnbWxGaWxlLCBnZXRDbG9zaW5nVGFncygpKTsKKwkJCQkJCWdtbEZpbGUuY2xvc2UoKTsKKwkJCQkJCWdtbEZpbGUgPSBudWxsOworCQkJCQkJVXRpbExvZ2dlci5sb2dJbmZvcm1hdGlvbigiXHRcdEdlbmVyYXRlZCA6ICIgKyBmaWxlTmFtZSk7IC8vJE5PTi1OTFMtMSQKKwkJCQkJCWZpbGVOYW1lID0gbnVsbDsKKwkJCQkJfQorCisJCQkJCWlmIChyZWR1Y2VkRmlsZSAhPSBudWxsKSB7CisJCQkJCQlyZWR1Y2VkRmlsZS5jbG9zZSgpOworCQkJCQkJcmVkdWNlZEZpbGUgPSBudWxsOworCQkJCQl9CisKKwkJCQkJLy8gSW5jcmVhc2UgdGhlIHBhc3MgY291bnRlci4KKwkJCQkJcGFzcysrOworCisJCQkJCS8vIFJ1biBnYXJiYWdlIGNvbGxlY3Rpb24KKwkJCQkJLy9TeXN0ZW0uZ2MoKTsKKworCQkJCX0KKworCQkJCS8vIFNob3cgZ2xvYmFsIHN0YXRzIGZvciB0aGlzIHBhc3MKKwkJCQlzaG93R2xvYmFsU3RhdHMoKTsKKworCQkJCS8vIE5vdyBjbGVhciB0aGVtIGJlZm9yZSBuZXh0IGl0ZXJhdGlvbgorCQkJCXJlc2V0R2xvYmFsU3RhdHMoKTsKKworCQkJCS8vIE5vdyBjbGVhciB0aGUgaGFzaCBtYXAKKwkJCQlpbml0SGFzaE1hcChhbmdsZVZhbHVlTWFwKTsKKworCQkJfSBjYXRjaCAoSU9FeGNlcHRpb24gZSkgeworCQkJCWUucHJpbnRTdGFja1RyYWNlKCk7CisJCQl9CisKKwkJfQorCisJfQorCisJLyoqCisJICogRXh0cmFjdCBhbGwgbm9uIHBvbHlnb24gZGF0YSBmcm9tIHRoZSBidWZmZXIuIEFtb3VudCBvZiBub24gLSBwb2x5Z29uCisJICogZGF0YSB2YXJpZXMgYWNjb3JkaW5nIHRvIGxldmVsLgorCSAqIAorCSAqIEBwYXJhbSBidWZmZXIKKwkgKiAgICAgICAgICAgIGEgYnVmZmVyIG9mIGRpdmEgZGF0YS4KKwkgKiAKKwkgKiBAcGFyYW0gbGV2ZWwKKwkgKiAgICAgICAgICAgIGFkbWluaXN0cmF0aXZlIGxldmVsCisJICogCisJICogQHJldHVybiBTdHJpbmcgYWxsIHRoZSBub24tcG9seWdvbiBkYXRhLgorCSAqLworCXB1YmxpYyBTdHJpbmcgZXh0cmFjdE5vblBvbHlnb25EYXRhKFN0cmluZyBidWZmZXIsIGludCBsZXZlbCkgeworCisJCWludCBvZmZzZXQgPSAwOworCisJCXN3aXRjaCAobGV2ZWwpIHsKKworCQljYXNlIERhdGFUeXBlcy5MRVZFTF8wOgorCQkJb2Zmc2V0ID0gMjsKKwkJCWJyZWFrOworCisJCWNhc2UgRGF0YVR5cGVzLkxFVkVMXzE6CisJCQlvZmZzZXQgPSAzOworCQkJYnJlYWs7CisKKwkJY2FzZSBEYXRhVHlwZXMuTEVWRUxfMjoKKwkJCW9mZnNldCA9IDQ7CisJCQlicmVhazsKKworCQl9CisKKwkJLy8gZmlyc3Qgb2NjdXJyZW5jZSBvZiB0aGUgY29tbWEgc2VwYXJhdG9yCisJCWludCBiZWdpbkluZGV4ID0gYnVmZmVyLmluZGV4T2YoIiwiKTsgLy8kTk9OLU5MUy0xJAorCQlpbnQgZW5kSW5kZXggPSBiZWdpbkluZGV4OworCisJCWludCBpID0gMTsKKworCQl3aGlsZSAoaSA8IG9mZnNldCkgeworCQkJZW5kSW5kZXggPSBidWZmZXIuaW5kZXhPZigiLCIsIGJlZ2luSW5kZXggKyAxKTsgLy8kTk9OLU5MUy0xJAorCQkJYmVnaW5JbmRleCA9IGVuZEluZGV4OworCQkJaSsrOworCQl9CisKKwkJYmVnaW5JbmRleCA9IDA7CisKKwkJLy8gZXh0cmFjdCB0aGUgc2VxdWVuY2UgdXAgdG8gaW5kZXgKKwkJcmV0dXJuIGJ1ZmZlci5zdWJzdHJpbmcoYmVnaW5JbmRleCwgZW5kSW5kZXggKyAxKTsKKworCX0KKworCS8qKgorCSAqIEZpbmQgYW5kIHNob3cgdGhlIGRpZmZlcmVuY2VzIGJldHdlZW4gdGhlIG5vcm1hbCBwb2ludC1kYXRhIGxpc3QgYW5kIHRoZQorCSAqIHJlZHVjZWQgcG9pbnQtZGF0YSBsaXN0LgorCSAqIAorCSAqIEBwYXJhbSBub3JtYWxMaXN0IC0KKwkgKiAgICAgICAgICAgIGEgbGlzdCB3aXRoIHRoZSBvcmlnaW5hbCBwb2ludCBkYXRhLgorCSAqIAorCSAqIEBwYXJhbSByZWR1Y2VkTGlzdCAtCisJICogICAgICAgICAgICBhIGxpc3Qgd2l0aCB0aGUgcmVkdWNlZCBwb2ludCBkYXRhLgorCSAqIAorCSAqIEBwYXJhbSBwYXNzIC0KKwkgKiAgICAgICAgICAgIHRoZSBjdXJyZW50IHBhc3Mgb3IgaXRlcmF0aW9uLgorCSAqIAorCSAqLworCXB1YmxpYyB2b2lkIHNob3dTdGF0cyhMaXN0PFN0cmluZz4gbm9ybWFsTGlzdCwgTGlzdDxTdHJpbmc+IHJlZHVjZWRMaXN0LAorCQkJaW50IHBhc3MpIHsKKworCQkvLyBkb3VibGUgbm9ybWFsU2l6ZSA9IG5vcm1hbExpc3Quc2l6ZSgpOworCQkvLyBkb3VibGUgcmVkdWNlZFNpemUgPSByZWR1Y2VkTGlzdC5zaXplKCk7CisJCS8vIGRvdWJsZSBkaWYgPSBub3JtYWxTaXplIC0gcmVkdWNlZFNpemU7CisJCS8vIGRvdWJsZSByYXRpbyA9IGRpZiAvIG5vcm1hbFNpemU7CisJCS8vIGRvdWJsZSBwZXJjZW50ID0gcmF0aW8gKiAxMDAuMDsKKworCQlVdGlsTG9nZ2VyLmxvZ0luZm9ybWF0aW9uKCJcdFx0KioqKioqKioqKioqIERPV04gU0FNUExJTkcgU1RBVFMgRk9SICIgKyBwYXNzIC8vJE5PTi1OTFMtMSQKKwkJCQkrICIgSVRFUkFUSU9OICoqKioqKioqKioqKlxuIik7IC8vJE5PTi1OTFMtMSQKKworCQkvLyBDcmVhdGUgYW5kIHByaW50IHByb2ZpbGUgb2YgdGhlIGFuZ2xlIHZhbHVlcworCQlVdGlsTG9nZ2VyLmxvZ0luZm9ybWF0aW9uKCJcdFx0UHJvZmlsaW5nIHJlc3VsdHMgQkVGT1JFIHJlZHVjdGlvbiA6IFxuXG4iKTsgLy8kTk9OLU5MUy0xJAorCisJCXByb2ZpbGUobm9ybWFsTGlzdCk7CisJCXNob3dQcm9maWxlKCk7CisKKwkJLy8gVXRpbExvZ2dlci5sb2dJbmZvcm1hdGlvbigiVG90YWwgcG9pbnRzIGluIG9yaWdpbmFsIHBvbHlnb24gOiAiCisJCS8vICsgbm9ybWFsTGlzdC5zaXplKCkpOworCQkvLyBVdGlsTG9nZ2VyLmxvZ0luZm9ybWF0aW9uKCJUb3RhbCBwb2ludHMgaW4gcmVkdWNlZCBwb2x5Z29uIDogIgorCQkvLyArIHJlZHVjZWRMaXN0LnNpemUoKSk7CisJCS8vIFV0aWxMb2dnZXIubG9nSW5mb3JtYXRpb24oIlRvdGFsIHBvaW50cyBtYXJrZWQgZm9yIGRlbGV0aW9uIDogIiArIGRpZik7CisJCS8vCisJCS8vIFV0aWxMb2dnZXIubG9nSW5mb3JtYXRpb24oIlBlcmNlbnRhZ2Ugb2YgcmVkdWN0aW9uIDogIiArIHBlcmNlbnQgKyAiJSIpOworCQkvLworCQlVdGlsTG9nZ2VyLmxvZ0luZm9ybWF0aW9uKCJcdFx0UHJvZmlsaW5nIHJlc3VsdHMgQUZURVIgcmVkdWN0aW9uIDogXG5cbiIpOyAvLyROT04tTkxTLTEkCisKKwkJcHJvZmlsZShyZWR1Y2VkTGlzdCk7CisJCXNob3dQcm9maWxlKCk7CisKKwl9CisKKwkvKioKKwkgKiBDbGVhciB0aGUgZ2xvYmFsIHN0YXRzIChiZXR3ZWVuIGV2ZXJ5IGl0ZXJhdGlvbikKKwkgKi8KKwlwdWJsaWMgdm9pZCByZXNldEdsb2JhbFN0YXRzKCkgeworCisJCXRvdGFsUG9pbnRzID0gMDsKKworCQl0b3RhbFJlbW92ZWQgPSAwOworCisJCXRvdGFsUG9seWdvbnMgPSAwOworCisJCWdsb2JhbE1pblBlcmNlbnQgPSBEb3VibGUuTUFYX1ZBTFVFOworCisJCWdsb2JhbE1heFBlcmNlbnQgPSAwLjA7CisKKwkJZ2xvYmFsUGVyY2VudCA9IDAuMDsKKworCX0KKworCS8qKgorCSAqIFVwZGF0ZSBnbG9iYWwgc3RhdHMuCisJICogCisJICogQHBhcmFtIG5vcm1hbFNpemUgLQorCSAqICAgICAgICAgICAgdGhlIHRvdGFsIG51bWJlciBvZiBwb2ludHMgYmVmb3JlIHJlZHVjdGlvbgorCSAqIAorCSAqIEBwYXJhbSByZWR1Y2VkU2l6ZSAtCisJICogICAgICAgICAgICB0aGUgdG90YWwgbnVtYmVyIG9mIHBvaW50cyBhZnRlciByZWR1Y3Rpb24KKwkgKiAKKwkgKi8KKwlwdWJsaWMgdm9pZCB1cGRhdGVHbG9iYWxTdGF0cyhkb3VibGUgbm9ybWFsU2l6ZSwgZG91YmxlIHJlZHVjZWRTaXplKSB7CisKKwkJZG91YmxlIGRpZiA9IG5vcm1hbFNpemUgLSByZWR1Y2VkU2l6ZTsKKwkJZG91YmxlIHJhdGlvID0gZGlmIC8gbm9ybWFsU2l6ZTsKKwkJZG91YmxlIHBlcmNlbnQgPSByYXRpbyAqIDEwMC4wOworCisJCWdsb2JhbE1pblBlcmNlbnQgPSAoZ2xvYmFsTWluUGVyY2VudCA+IHBlcmNlbnQpID8gcGVyY2VudAorCQkJCTogZ2xvYmFsTWluUGVyY2VudDsKKworCQlnbG9iYWxNYXhQZXJjZW50ID0gKGdsb2JhbE1heFBlcmNlbnQgPCBwZXJjZW50KSA/IHBlcmNlbnQKKwkJCQk6IGdsb2JhbE1heFBlcmNlbnQ7CisKKwkJZ2xvYmFsUGVyY2VudCArPSBwZXJjZW50OworCisJCXRvdGFsUG9pbnRzICs9IG5vcm1hbFNpemU7CisKKwkJdG90YWxSZW1vdmVkICs9IHJlZHVjZWRTaXplOworCisJCXRvdGFsUG9seWdvbnMgKz0gMTsKKworCX0KKworCS8qKgorCSAqIFByaW50IHRoZSBnbG9iYWwgc3RhdHMKKwkgKi8KKwlwdWJsaWMgdm9pZCBzaG93R2xvYmFsU3RhdHMoKSB7CisKKwkJVXRpbExvZ2dlci5sb2dJbmZvcm1hdGlvbigiXHRcdCoqKioqKioqKioqKioqIEdMT0JBTCBTVEFUUyAqKioqKioqKioqKioqKiIpOyAvLyROT04tTkxTLTEkCisKKwkJVXRpbExvZ2dlci5sb2dJbmZvcm1hdGlvbigiXHRcdFRvdGFsIHBvbHlnb25zIDogIiArIHRvdGFsUG9seWdvbnMpOyAvLyROT04tTkxTLTEkCisKKwkJVXRpbExvZ2dlci5sb2dJbmZvcm1hdGlvbigiXHRcdFRvdGFsIHBvaW50cyA6ICIgKyB0b3RhbFBvaW50cyk7IC8vJE5PTi1OTFMtMSQKKworCQlVdGlsTG9nZ2VyLmxvZ0luZm9ybWF0aW9uKCJcdFx0QXZnIHBvaW50cyBwZXIgcG9seWdvbiA6ICIgKyB0b3RhbFBvaW50cyAvLyROT04tTkxTLTEkCisJCQkJLyB0b3RhbFBvbHlnb25zKTsKKworCQlVdGlsTG9nZ2VyLmxvZ0luZm9ybWF0aW9uKCJcdFx0R2xvYmFsIHJlZHVjdGlvbiA6ICIgKyBnbG9iYWxQZXJjZW50IC8vJE5PTi1OTFMtMSQKKwkJCQkvIHRvdGFsUG9seWdvbnMgKyAiJSIpOyAvLyROT04tTkxTLTEkCisKKwkJU3lzdGVtLm91dAorCQkJCS5wcmludGxuKCJcdFx0R2xvYmFsIE1JTiByZWR1Y3Rpb24gIDogIiArIGdsb2JhbE1pblBlcmNlbnQgKyAiJSIpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKKworCQlTeXN0ZW0ub3V0CisJCQkJLnByaW50bG4oIlx0XHRHbG9iYWwgTUFYIHJlZHVjdGlvbiAgOiAiICsgZ2xvYmFsTWF4UGVyY2VudCArICIlIik7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAorCisJfQorCisJLyoqCisJICogSnVzdCBwcmludCB0aGUgcHJvZmlsZSBmb3IgdGhlIHBvbHlnb24gcG9pbnQtZGF0YQorCSAqIAorCSAqLworCXB1YmxpYyB2b2lkIHNob3dQcm9maWxlKCkgeworCisJCS8vIENyZWF0ZSBhIHByb2ZpbGUKKwkJLy8gcHJvZmlsZShhbmdsZVZhbHVlTWFwKTsKKworCQkvLyBTb3J0IHRoZSBrZXlzCisJCVNldDxEb3VibGU+IGtleXMgPSBhbmdsZVZhbHVlTWFwLmtleVNldCgpOworCQlMaXN0PERvdWJsZT4gc29ydGVkS2V5cyA9IG5ldyBBcnJheUxpc3Q8RG91YmxlPihrZXlzKTsKKwkJQ29sbGVjdGlvbnMuc29ydChzb3J0ZWRLZXlzKTsKKworCQlVdGlsTG9nZ2VyLmxvZ0luZm9ybWF0aW9uKCJcdFx0RnJlcXVlbmNpZXMgb2YgYW5nbGVzIDogICIpOyAvLyROT04tTkxTLTEkCisKKwkJLy8gUHJpbnQgdGhlIG51bWJlciBvZiBvY2N1cnJlbmNlcyBmb3IgZWFjaCB2YWx1ZQorCQlJdGVyYXRvciBrZXlJdGVyID0gc29ydGVkS2V5cy5pdGVyYXRvcigpOworCQl3aGlsZSAoa2V5SXRlci5oYXNOZXh0KCkpIHsKKworCQkJLy8gR2V0IHRoZSBrZXkKKwkJCURvdWJsZSBrZXkgPSAoRG91YmxlKSBrZXlJdGVyLm5leHQoKTsKKworCQkJLy8gR2V0IHRoZSB2YWx1ZQorCQkJaW50IHZhbCA9IChhbmdsZVZhbHVlTWFwLmdldChrZXkpKS5pbnRWYWx1ZSgpOworCisJCQlVdGlsTG9nZ2VyLmxvZ0luZm9ybWF0aW9uKCJcdFx0IEFuZ2xlID49ICIgKyBrZXkgKyAiIEZyZXF1ZW5jeSA6ICIgKyB2YWwpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKKworCQl9CisKKwl9CisKKwkvKioKKwkgKiBBbGdvcml0aG0gZm9yIHJlZHVjaW5nIHRoZSBkYXRhIGJ5IG1hcmtpbmcgYW5kIHRoZW4gcmVtb3ZpbmcgKG5lYXJseSkgYWxsCisJICogcG9pbnRzIHdpdGggYW5nbGUgbGVzcyB0aGFuIGFscGhhLiBBbGwgcG9pbnRzIG1hcmtlZCBmb3IgZGVsZXRpb24gYXJlCisJICogY2FsbGVkIFNBRkUuCisJICogCisJICogQHBhcmFtIGFscGhhIC0KKwkgKiAgICAgICAgICAgIHRoZSB0aHJlc2hvbGQKKwkgKiBAcGFyYW0gbGlzdCAtCisJICogICAgICAgICAgICBhIGxpc3QgY29udGFpbmluZyBleHRlbmRlZCBwb2ludCBkYXRhIG9mIHRoZSBmb3JtIDoKKwkgKiAgICAgICAgICAgIElOREVYOkxUOkxHOkFOR0xFOlNBRkVUWQorCSAqIAorCSAqIEByZXR1cm4gbGlzdCAtIGEgcmVkdWNlZCBsaXN0IG9mIHBvaW50cyB0aGF0IHNob3VsZCBub3QgYmUgZGVsZXRlZAorCSAqICAgICAgICAgYmVjYXVzZSB0aGV5IGRvbnQgbWVldCB0aGUgY3JpdGVyaWEgKGkuZS4gdGhlaXIgYW5nbGUgaXMgZ3JlYXRlcgorCSAqICAgICAgICAgdGhhbiB0aHJlc2hvbGQgb3Igd2VyZSBtYXJrZWQgYXMgVU5TQUZFKQorCSAqIAorCSAqLworCXB1YmxpYyBMaXN0PFN0cmluZz4gcmVkdWNlKGRvdWJsZSBhbHBoYSwgTGlzdDxTdHJpbmc+IGxpc3QpIHsKKworCQkvKioKKwkJICogUmVtb3ZlIGFsbCBwb2ludHMgd2hpY2ggYXJlIHNhZmUgdG8gcmVtb3ZlLgorCQkgKiAKKwkJICogVG8gYmUgc2FmZSwgYSBwb2ludCBzaG91bGQgc2F0aXNmeSB0d28gY29uZGl0aW9ucyA6CisJCSAqIAorCQkgKiAxKSBIYXZlIGFuIGFuZ2xlIHdpdGggdmFsdWUgbGVzcyB0aGFuIGFscGhhIGRlZ3Jlc3MuCisJCSAqIAorCQkgKiAyKSBXZSBDQU5OT1QgbWFyayBTQUZFIGZvciBkZWxldGlvbiB0d28gY29uc2VjdXRpdmUgcG9pbnRzLgorCQkgKiAKKwkJICovCisKKwkJLy8gVGhpcyBsaXN0IHdpbGwgY29udGFpbiBvbmx5IHRoZSBlbGVtZW50cyB0aGF0IHdlIHNob3VsZCBub3QgcmVtb3ZlCisJCUxpc3Q8U3RyaW5nPiByZWR1Y2VkTGlzdCA9IG5ldyBBcnJheUxpc3Q8U3RyaW5nPigpOworCisJCS8vIFN5bWJvbGljIGNvbnN0YW50cyBmb3IgY29udHJvbGxpbmcgdGhlIHNsaWRpbmcgd2luZG93IGFsZ29yaXRobQorCQlmaW5hbCBpbnQgU1RBUlQgPSAwOworCQlmaW5hbCBpbnQgV0lORE9XX0xFTkdUSCA9IDI7CisKKwkJLy8gTXVsdGlwbGllciB0byBvYnRhaW4gbWluaW11bSBsZW5naHQgYXQgd2hpY2ggbWFrZXMgc2Vuc2UgdG8gcnVuIHRoaXMKKwkJLy8gYWxnb3JpdGhtOgorCQlmaW5hbCBpbnQgTVVMVElQTElFUiA9IDE7CisKKwkJLy8gTUlOSU1VTSBMRU5HVEggPSBNVUxUSVBMSUVSICogKFdJTkRPV19MRU5HVEggKyAxKQorCQlmaW5hbCBpbnQgTUlOSU1VTV9MRU5HVEggPSBNVUxUSVBMSUVSICogKFdJTkRPV19MRU5HVEggKyAxKTsKKworCQkvLyBJbmRleGVzIGludG8gdGhlIHN0cmluZyBjb250YWluaW5nIGV4dGVuZGVkIHBvaW50IGRhdGE6CisJCS8vIElOREVYOkxUOkxHOkFOR0xFOlNBRkVUWQorCQlmaW5hbCBpbnQgSU5ERVggPSAwOworCQlmaW5hbCBpbnQgTFQgPSAxOworCQlmaW5hbCBpbnQgTEcgPSAyOworCQlmaW5hbCBpbnQgQU5HTEUgPSAzOworCQlmaW5hbCBpbnQgU0FGRVRZID0gNDsKKworCQkvLyBPdXIgc2xpZGluZyB3aW5kb3cgY292ZXJzIGV4YWN0bHkgdGhyZWUgbm9kZXMuCisJCVN0cmluZ1tdIHAxID0gbnVsbDsKKwkJU3RyaW5nW10gcDIgPSBudWxsOworCQlTdHJpbmdbXSBwMyA9IG51bGw7CisKKwkJLy8gQW5nbGUgdmFsdWVzIGZvciBlYWNoIG9mIHRoZSB0aHJlZSBwb2ludHMgaW4gdGhlIHNsaWRpbmcgd2luZG93LgorCQlkb3VibGUgYTEgPSAwLjA7CisJCWRvdWJsZSBhMiA9IDAuMDsKKwkJZG91YmxlIGEzID0gMC4wOworCisJCS8vIFN0YXRlIChTQUZFIG9yIFVOU0FGRSkgb2YgZWFjaCBvZiB0aHJlZSBwb2ludHMgaW4gdGhlIHNsaWRpbmcgd2luZG93LgorCQlTdHJpbmcgczEgPSBVTktOT1dOOworCQlTdHJpbmcgczIgPSBVTktOT1dOOworCQlTdHJpbmcgczMgPSBVTktOT1dOOworCisJCS8vIEEgcG9pbnRlciB0byB0aGUgYmVnaW5uaW5nIGFuZCB0aGUgZW5kIG9mIHRoZSBzbGlkaW5nIHdpbmRvdy4KKwkJaW50IGxlZnRfYm9yZGVyID0gMDsKKwkJaW50IHJpZ2h0X2JvcmRlciA9IGxlZnRfYm9yZGVyICsgV0lORE9XX0xFTkdUSDsKKworCQkvLyBPdXIgY3VycmVudCBwb3NpdGlvbiB3aXRoaW4gdGhlIHNsaWRpbmcgd2luZG93LgorCQlpbnQgaW5kZXggPSBTVEFSVDsKKworCQlpZiAobGlzdC5zaXplKCkgPCBNSU5JTVVNX0xFTkdUSCkgeworCQkJLy8gVGhlcmUgaXMgbm8gcG9pbnQgaW4gcnVubmluZyB0aGlzIGFsZ29yaXRobSBpZiBwb2ludHMKKwkJCS8vIGxlc3MgdGhhbiBtaW5pbXVtIHZhbHVlLiBObyBuZWVkIHRvIHJlZHVjZS4KKwkJCXJldHVybiBsaXN0OworCQl9CisKKwkJZmluYWwgaW50IEVORCA9IGxpc3Quc2l6ZSgpIC0gMTsKKworCQkvLyBVdGlsTG9nZ2VyLmxvZ0luZm9ybWF0aW9uKCJMaXN0IHNpemUgaXMgOiAiICsgZW5kKTsKKworCQl3aGlsZSAocmlnaHRfYm9yZGVyIDw9IEVORCkgeworCisJCQkvLyBVTktOT1dOID09IE5PVCBZRVQgUFJPQ0VTU0VEIC0tIEV2ZW50dWFsbHkgaXQgd2lsbCBiZSBtYXJrZWQKKwkJCS8vIGVpdGhlciBTQUZFIG9yIFVOU0FGRQorCisJCQlib29sZWFuIGZsYWcgPSBmYWxzZTsKKworCQkJLy8gaWYgKHAxID09IG51bGwpIHsKKwkJCS8vIEdldCB0aGUgdGhyZWUgaW5pdGlhbCBwb2ludHMgY292ZXJlZCBieSBvdXIgc2xpZGluZyB3aW5kb3cuCisJCQlpbmRleCA9IGxlZnRfYm9yZGVyOworCQkJcDEgPSBsaXN0LmdldChpbmRleCsrKS5zcGxpdCgiOiIpOyAvLyROT04tTkxTLTEkCisJCQlwMiA9IGxpc3QuZ2V0KGluZGV4KyspLnNwbGl0KCI6Iik7IC8vJE5PTi1OTFMtMSQKKwkJCXAzID0gbGlzdC5nZXQoaW5kZXgpLnNwbGl0KCI6Iik7IC8vJE5PTi1OTFMtMSQKKwkJCS8vIH0KKworCQkJLy8gTm93IGdldCB0aGUgYW5nbGUgdmFsdWUgZm9yIGVhY2ggb2YgdGhlIHRocmVlIHBvaW50cy4KKwkJCWExID0gRG91YmxlLnBhcnNlRG91YmxlKHAxW0FOR0xFXSk7CisJCQlhMiA9IERvdWJsZS5wYXJzZURvdWJsZShwMltBTkdMRV0pOworCQkJYTMgPSBEb3VibGUucGFyc2VEb3VibGUocDNbQU5HTEVdKTsKKworCQkJLy8gTm93IGdldCB0aGUgc3RhdGUgb2YgZWFjaCBvZiB0aGUgdGhyZWUgcG9pbnRzLgorCQkJczEgPSBwMVtTQUZFVFldOworCQkJczIgPSBwMltTQUZFVFldOworCQkJczMgPSBwM1tTQUZFVFldOworCisJCQkvLyBDaGVjayB0byBzZWUgaWYgdGhlIGluaXRpYWwsIGxlZnRtb3N0IHBvaW50IGlzIGdyZWF0ZXIgdGhhbgorCQkJLy8gYWxwaGEgb3IgaWYgaXQgaXMgVU5TQUZFLiBJZiBzbywgdGhlbiBzbGlkZSBmb3J3YXJkIHRoZSB3aW5kb3cuCisJCQlpZiAoYTEgPiBhbHBoYSkgeworCQkJCS8vIEp1c3Qgc2xpZGUgZm9yd2FyZCB0aGUgd2luZG93IG9uZSB1bml0LgorCQkJCWxlZnRfYm9yZGVyICs9IDE7CisJCQkJcmlnaHRfYm9yZGVyICs9IDE7CisJCQkJY29udGludWU7CisJCQl9CisKKwkJCWlmIChzMS5lcXVhbHMoVU5TQUZFKSkgeworCisJCQkJaWYgKGEyIDwgYWxwaGEgJiYgYTIgPD0gYTMpIHsKKwkJCQkJLy8gWyBQMSA9IFVOU0FGRSwgUDIgPSBTQUZFLCBQMyA9IFVOU0FGRSBdCisJCQkJCS8vIEFkdmFuY2Ugc2xpZGluZyB3aW5kb3cgYWZ0ZXIgUDIKKwkJCQkJczIgPSBTQUZFOworCQkJCQlzMyA9IFVOU0FGRTsKKwkJCQl9IGVsc2UgaWYgKGEzIDwgYWxwaGEpIHsKKwkJCQkJLy8gWyBQMSA9IFVOU0FGRSwgUDIgPSBVTlNBRkUsIFAzID0gU0FGRSBdCisJCQkJCS8vIEFkdmFuY2Ugc2xpZGluZyB3aW5kb3cgYWZ0ZXIgUDIKKwkJCQkJczMgPSBTQUZFOworCQkJCQlzMiA9IFVOU0FGRTsKKwkJCQl9CisKKwkJCX0gZWxzZSBpZiAoYTEgPCBhbHBoYSAmJiBhMSA8IGEyKSB7CisJCQkJLy8gWyBQMSA9IFNBRkUsIFAyID0gVU5TQUZFLCBQMyA9IFVOS05PV04gXQorCQkJCS8vIEFkdmFuY2Ugc2xpZGluZyB3aW5kb3cgYWZ0ZXIgUDIKKwkJCQlzMSA9IFNBRkU7CisJCQkJczIgPSBVTlNBRkU7CisJCQkJLy8gTm93IGNoZWNrIHRvIHNlZSBpZiBpcyBzYWZlIHRvIG1hcmsgUDMgdG9vLgorCQkJCWlmIChhMyA8IGFscGhhKSB7CisJCQkJCS8vIFsgUDEgPSBTQUZFLCBQMiA9IFVOU0FGRSwgUDMgPSBTQUZFIF0KKwkJCQkJLy8gQWR2YW5jZSBzbGlkaW5nIHdpbmRvdyBhZnRlciBQMgorCQkJCQlzMyA9IFNBRkU7CisJCQkJfQorCQkJfSBlbHNlIGlmIChhMSA8IGFscGhhICYmIGExID4gYTIpIHsKKwkJCQkvLyBbIFAxID0gVU5TQUZFLCBQMiA9IFNBRkUsIFAzID0gVU5TQUZFIF0KKwkJCQkvLyBTUEVDSUFMIENBU0UgOiBBZHZhbmNlIHNsaWRpbmcgd2luZG93IGFmdGVyIFAzCisJCQkJczEgPSBVTlNBRkU7CisJCQkJczIgPSBTQUZFOworCQkJCXMzID0gVU5TQUZFOworCQkJCS8vIFNwZWNpYWwgY2FzZSA6IHNldCBmbGFnIHRvIGFkdmFuY2Ugc2xpZGluZyB3aW5kb3cgYWZ0ZXIgUDMKKwkJCQlmbGFnID0gdHJ1ZTsKKworCQkJfSBlbHNlIGlmIChhMSA+IGFscGhhICYmIGEyID4gYWxwaGEpIHsKKwkJCQkvLyBbIFAxID0gVU5TQUZFLCBQMiA9IFVOU0FGRSwgUDMgPSBVTktOT1dOIF0KKwkJCQkvLyBBZHZhbmNlIHNsaWRpbmcgd2luZG93IGFmdGVyIFAyCisJCQkJczEgPSBVTlNBRkU7CisJCQkJczIgPSBVTlNBRkU7CisJCQl9CisKKwkJCS8vIFBhY2sgdGhlIG1vZGlmaWVkIHBvaW50LWRhdGEuCisJCQlTdHJpbmcgdDEgPSBwMVtJTkRFWF0gKyAiOiIgKyBwMVtMVF0gKyAiOiIgKyBwMVtMR10gKyAiOiIgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkIC8vJE5PTi1OTFMtMyQKKwkJCQkJKyBwMVtBTkdMRV0gKyAiOiIgKyBzMTsgLy8kTk9OLU5MUy0xJAorCisJCQlTdHJpbmcgdDIgPSBwMltJTkRFWF0gKyAiOiIgKyBwMltMVF0gKyAiOiIgKyBwMltMR10gKyAiOiIgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkIC8vJE5PTi1OTFMtMyQKKwkJCQkJKyBwMltBTkdMRV0gKyAiOiIgKyBzMjsgLy8kTk9OLU5MUy0xJAorCisJCQlTdHJpbmcgdDMgPSBwM1tJTkRFWF0gKyAiOiIgKyBwM1tMVF0gKyAiOiIgKyBwM1tMR10gKyAiOiIgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkIC8vJE5PTi1OTFMtMyQKKwkJCQkJKyBwM1tBTkdMRV0gKyAiOiIgKyBzMzsgLy8kTk9OLU5MUy0xJAorCisJCQkvLyBTdG9yZSB0aGUgbW9kaWZpZWQgKG1hcmtlZCkgcG9pbnQtZGF0YS4KKwkJCWxpc3Quc2V0KEludGVnZXIucGFyc2VJbnQocDFbSU5ERVhdKSwgdDEpOworCQkJbGlzdC5zZXQoSW50ZWdlci5wYXJzZUludChwMltJTkRFWF0pLCB0Mik7CisJCQlsaXN0LnNldChJbnRlZ2VyLnBhcnNlSW50KHAzW0lOREVYXSksIHQzKTsKKworCQkJaWYgKGZsYWcgPT0gdHJ1ZSkgeworCQkJCS8vIFNQRUNJQUwgQ0FTRSA6IEFkdmFuY2Ugc2xpZGluZyB3aW5kb3cgYWZ0ZXIgUDMuCisJCQkJbGVmdF9ib3JkZXIgPSByaWdodF9ib3JkZXIgKyAxOworCQkJCXJpZ2h0X2JvcmRlciA9IGxlZnRfYm9yZGVyICsgV0lORE9XX0xFTkdUSDsKKwkJCQkvLyBHbyB0byB0aGUgbmV4dCBpdGVyYXRpb24uCisJCQkJY29udGludWU7CisJCQl9CisKKwkJCS8vIERFRkFVTFQgOiBBZHZhbmNlIHNsaWRpbmcgd2luZG93IGFmdGVyIFAyLgorCQkJbGVmdF9ib3JkZXIgPSByaWdodF9ib3JkZXI7CisJCQlyaWdodF9ib3JkZXIgPSBsZWZ0X2JvcmRlciArIFdJTkRPV19MRU5HVEg7CisKKwkJfSAvLyB3aGlsZQorCisJCS8vIE5vdyByZW1vdmUgdGhlIFNBRkUgcG9pbnRzIGFuZCByZXR1cm4gdGhlIHJlZHVjZWQgbGlzdC4KKwkJSXRlcmF0b3IgaXQgPSBsaXN0Lmxpc3RJdGVyYXRvcigpOworCisJCXdoaWxlIChpdC5oYXNOZXh0KCkpIHsKKworCQkJU3RyaW5nIGRhdGEgPSAoU3RyaW5nKSBpdC5uZXh0KCk7CisKKwkJCVN0cmluZ1tdIHRva2VucyA9IGRhdGEuc3BsaXQoIjoiKTsgLy8kTk9OLU5MUy0xJAorCisJCQlpZiAodG9rZW5zW1NBRkVUWV0uZXF1YWxzKFNBRkUpKSB7CisJCQkJY29udGludWU7CisJCQl9CisJCQlyZWR1Y2VkTGlzdC5hZGQoZGF0YSk7CisKKwkJfQorCisJCS8vIFV0aWxMb2dnZXIubG9nSW5mb3JtYXRpb24oIlJlZHVjZWQgbGlzdCBzaXplIGlzIDogIiArIHJlZHVjZWRMaXN0LnNpemUoKSk7CisKKwkJcmV0dXJuIHJlZHVjZWRMaXN0OworCisJfQorCisJLyoqCisJICogUHJvZmlsZSB0aGUgYW5nbGUgZGF0YS4gQ291bnQgaG93IG1hbnkgdGltZXMgZWFjaCB2YWx1ZSBvY2N1cnMKKwkgKiAKKwkgKiBAcGFyYW0gbGlzdCAtCisJICogICAgICAgICAgICBhIGxpc3Qgb2YgYW5nbGVzIGZvciBlYWNoIGRhdGEgcG9pbnQgaW4gdGhlIHBvbHlnb24KKwkgKiAKKwkgKi8KKwlwdWJsaWMgdm9pZCBwcm9maWxlKExpc3Q8U3RyaW5nPiBsaXN0KSB7CisKKwkJZmluYWwgaW50IEFOR0xFID0gMzsKKworCQlpZiAobGlzdCA9PSBudWxsKSB7CisJCQlyZXR1cm47CisJCX0KKworCQkvLyBXZSB3YW50IHRvIGl0ZXJhdGUgdGhyb3VnaCBhbGwgdGhlIHBvaW50cyBvZiB0aGUKKwkJLy8gcG9seWdvbgorCQlJdGVyYXRvciBpdCA9IGxpc3QuaXRlcmF0b3IoKTsKKworCQkvLyBDbGVhciB0aGUgaGFzaCBtYXAgYmVmb3JlIHN0YXJ0IHVzaW5nIGl0LgorCQlpbml0SGFzaE1hcChhbmdsZVZhbHVlTWFwKTsKKworCQkvLyBDb3VudCB0aGUgb2NjdXJyZW5jZXMgb2YgdGhlIHZhbHVlcyBvZiB0aGUgMTgwIG9mZnNldAorCQkvLyBtaW51cyB0aGUgYW5nbGUuCisJCS8vIFRoaXMgY291bnQgd2lsbCBiZSB1c2VmdWwgZm9yIGZpbmRpbmcgYSBnb29kIHRocmVzaG9sZC4KKwkJd2hpbGUgKGl0Lmhhc05leHQoKSkgeworCisJCQlTdHJpbmcgcCA9IChTdHJpbmcpIGl0Lm5leHQoKTsKKworCQkJU3RyaW5nW10gZWxlbWVudHMgPSBwLnNwbGl0KCI6Iik7IC8vJE5PTi1OTFMtMSQKKworCQkJRG91YmxlIGFuZ2xlID0gbmV3IERvdWJsZShlbGVtZW50c1tBTkdMRV0pOworCisJCQlkb3VibGUgZGVncmVlcyA9IGFuZ2xlLmRvdWJsZVZhbHVlKCk7CisKKwkJCWNvdW50KGRlZ3JlZXMsIGFuZ2xlVmFsdWVNYXApOworCisJCX0gLy8gd2hpbGUKKworCX0KKworCS8qKgorCSAqIEJhc2VkIG9uIHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBhbmdsZSwga2VlcCB0cmFjayBvZiBpdC4KKwkgKiAKKwkgKiBAcGFyYW0gZGVncmVlcyAtCisJICogICAgICAgICAgICBUaGUgdmFsdWUgb2YgdGhlIGxhc3Qgb2Zmc2V0IC0gQ29zLTEoYW5nbGUpIHZhbHVlLgorCSAqIAorCSAqIEBwYXJhbSBtYXAgLQorCSAqICAgICAgICAgICAgVGhlIG1hcCBob2xkaW5nIGFuZ2xlcyBhbmQgdGhlaXIgY291bnQKKwkgKiAKKwkgKi8KKwlwdWJsaWMgdm9pZCBjb3VudChkb3VibGUgZGVncmVlcywgSGFzaE1hcDxEb3VibGUsIEludGVnZXI+IG1hcCkgeworCisJCS8vIEZpbHRlciB0byBmaW5kIHRoZSBhcHByb3ByaWF0ZSBidWNrZXQgZm9yIHRoZSB2YWx1ZQorCisJCWlmIChkZWdyZWVzID49IDkwLjApIHsKKwkJCWludCBjb3VudCA9IChtYXAuZ2V0KG5ldyBEb3VibGUoOTAuMCkpKS5pbnRWYWx1ZSgpOworCQkJbWFwLnB1dChuZXcgRG91YmxlKDkwLjApLCBuZXcgSW50ZWdlcigrK2NvdW50KSk7CisKKwkJfSBlbHNlIGlmIChkZWdyZWVzID49IDQ1LjApIHsKKwkJCWludCBjb3VudCA9IChtYXAuZ2V0KG5ldyBEb3VibGUoNDUuMCkpKS5pbnRWYWx1ZSgpOworCQkJbWFwLnB1dChuZXcgRG91YmxlKDQ1LjApLCBuZXcgSW50ZWdlcigrK2NvdW50KSk7CisKKwkJfSBlbHNlIGlmIChkZWdyZWVzID49IDIyLjUpIHsKKwkJCWludCBjb3VudCA9IChtYXAuZ2V0KG5ldyBEb3VibGUoMjIuNSkpKS5pbnRWYWx1ZSgpOworCQkJbWFwLnB1dChuZXcgRG91YmxlKDIyLjUpLCBuZXcgSW50ZWdlcigrK2NvdW50KSk7CisKKwkJfSBlbHNlIGlmIChkZWdyZWVzID49IDExLjI1KSB7CisJCQlpbnQgY291bnQgPSAobWFwLmdldChuZXcgRG91YmxlKDExLjI1KSkpLmludFZhbHVlKCk7CisJCQltYXAucHV0KG5ldyBEb3VibGUoMTEuMjUpLCBuZXcgSW50ZWdlcigrK2NvdW50KSk7CisKKwkJfSBlbHNlIGlmIChkZWdyZWVzID49IDUuNTEyNSkgeworCQkJaW50IGNvdW50ID0gKG1hcC5nZXQobmV3IERvdWJsZSg1LjUxMjUpKSkuaW50VmFsdWUoKTsKKwkJCW1hcC5wdXQobmV3IERvdWJsZSg1LjUxMjUpLCBuZXcgSW50ZWdlcigrK2NvdW50KSk7CisKKwkJfSBlbHNlIGlmIChkZWdyZWVzID49IDIuMCkgeworCQkJaW50IGNvdW50ID0gKG1hcC5nZXQobmV3IERvdWJsZSgyLjApKSkuaW50VmFsdWUoKTsKKwkJCW1hcC5wdXQobmV3IERvdWJsZSgyLjApLCBuZXcgSW50ZWdlcigrK2NvdW50KSk7CisKKwkJfSBlbHNlIGlmIChkZWdyZWVzID49IDEuNSkgeworCQkJaW50IGNvdW50ID0gKG1hcC5nZXQobmV3IERvdWJsZSgxLjUpKSkuaW50VmFsdWUoKTsKKwkJCW1hcC5wdXQobmV3IERvdWJsZSgxLjUpLCBuZXcgSW50ZWdlcigrK2NvdW50KSk7CisKKwkJfSBlbHNlIGlmIChkZWdyZWVzID49IDEuMCkgeworCQkJaW50IGNvdW50ID0gKG1hcC5nZXQobmV3IERvdWJsZSgxLjApKSkuaW50VmFsdWUoKTsKKwkJCW1hcC5wdXQobmV3IERvdWJsZSgxLjApLCBuZXcgSW50ZWdlcigrK2NvdW50KSk7CisKKwkJfSBlbHNlIGlmIChkZWdyZWVzID49IDAuNzUpIHsKKwkJCWludCBjb3VudCA9IChtYXAuZ2V0KG5ldyBEb3VibGUoMC43NSkpKS5pbnRWYWx1ZSgpOworCQkJbWFwLnB1dChuZXcgRG91YmxlKDAuNzUpLCBuZXcgSW50ZWdlcigrK2NvdW50KSk7CisKKwkJfSBlbHNlIGlmIChkZWdyZWVzID49IDAuNSkgeworCQkJaW50IGNvdW50ID0gKG1hcC5nZXQobmV3IERvdWJsZSgwLjUpKSkuaW50VmFsdWUoKTsKKwkJCW1hcC5wdXQobmV3IERvdWJsZSgwLjUpLCBuZXcgSW50ZWdlcigrK2NvdW50KSk7CisKKwkJfSBlbHNlIGlmIChkZWdyZWVzID49IDAuMjUpIHsKKwkJCWludCBjb3VudCA9IChtYXAuZ2V0KG5ldyBEb3VibGUoMC4yNSkpKS5pbnRWYWx1ZSgpOworCQkJbWFwLnB1dChuZXcgRG91YmxlKDAuMjUpLCBuZXcgSW50ZWdlcigrK2NvdW50KSk7CisKKwkJfSBlbHNlIGlmIChkZWdyZWVzID49IDAuMTUpIHsKKwkJCWludCBjb3VudCA9IChtYXAuZ2V0KG5ldyBEb3VibGUoMC4xNSkpKS5pbnRWYWx1ZSgpOworCQkJbWFwLnB1dChuZXcgRG91YmxlKDAuMTUpLCBuZXcgSW50ZWdlcigrK2NvdW50KSk7CisKKwkJfSBlbHNlIGlmIChkZWdyZWVzID49IDAuMDUpIHsKKwkJCWludCBjb3VudCA9IChtYXAuZ2V0KG5ldyBEb3VibGUoMC4wNSkpKS5pbnRWYWx1ZSgpOworCQkJbWFwLnB1dChuZXcgRG91YmxlKDAuMDUpLCBuZXcgSW50ZWdlcigrK2NvdW50KSk7CisKKwkJfQorCisJfQorCisJLyoqCisJICogU2ltcGx5IGV4dHJhY3QgdGhlIExULExHIHZhbHVlcyBmcm9tIHRoZSBsaXN0LgorCSAqIAorCSAqIEBwYXJhbSBsaXN0CisJICogICAgICAgICAgICBhIGxpc3Qgd2l0aCBwb2ludC1kYXRhIG9mIHRoZSBmb3JtOiBJTkRFWDpMVDpMRzpBTkdMRTpTQUZFVFkKKwkgKiAKKwkgKiBAcmV0dXJuIFN0cmluZyBhIGNvbmNhdGVuYXRpb24gb2YgYWxsIHRoZSBMVCxMRyB2YWx1ZXMuCisJICovCisJU3RyaW5nIGV4dHJhY3RMaXN0SW50b1N0cmluZyhMaXN0PFN0cmluZz4gbGlzdCkgeworCisJCWZpbmFsIGludCBMVCA9IDE7CisKKwkJZmluYWwgaW50IExHID0gMjsKKworCQlTdHJpbmcgYnVmZmVyID0gbnVsbDsKKworCQlJdGVyYXRvciBpdCA9IGxpc3QuaXRlcmF0b3IoKTsKKworCQl3aGlsZSAoaXQuaGFzTmV4dCgpKSB7CisKKwkJCVN0cmluZyBwID0gKFN0cmluZykgaXQubmV4dCgpOworCisJCQlTdHJpbmdbXSBlbGVtZW50cyA9IHAuc3BsaXQoIjoiKTsgLy8kTk9OLU5MUy0xJAorCisJCQlpZiAoYnVmZmVyID09IG51bGwpIHsKKworCQkJCWJ1ZmZlciA9IGVsZW1lbnRzW0xUXSArICIsIiArIGVsZW1lbnRzW0xHXSArICIsIjsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCisKKwkJCX0gZWxzZSB7CisKKwkJCQlidWZmZXIgKz0gZWxlbWVudHNbTFRdICsgIiwiICsgZWxlbWVudHNbTEddICsgIiwiOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKKworCQkJfQorCisJCX0KKworCQlyZXR1cm4gYnVmZmVyOworCX0KKworCS8qKgorCSAqIENvbXB1dGUgdGhlIGNvc2luZSBpbnZlcnNlIG9mIGFuIGFuZ2xlIGFuZCBzdWJyYWN0IHRoYXQgdmFsdWUgZnJvbSBhbgorCSAqIG9mZnNldCBvZiAxODAgZGVncmVlcy4KKwkgKiAKKwkgKiBAcGFyYW0gcG9seWdvbgorCSAqICAgICAgICAgICAgYSBTVEVNIHBvbHlnb24KKwkgKiAKKwkgKiBAcmV0dXJuIExpc3QgYSBsaXN0IG9mIGFuZ2xlIHZhbHVlcyBmb3IgYWxsIHBvaW50cyBpbiB0aGUgcG9seWdvbgorCSAqIAorCSAqLworCUxpc3Q8U3RyaW5nPiBjb21wdXRlSW52ZXJzZUNvc2luZXMoU1RFTVBvbHlnb24gcG9seWdvbikgeworCisJCWZpbmFsIGRvdWJsZSBJTkZJTklUWSA9IDEwMDAwMDAwOworCisJCS8vIExpc3QgdG8ga2VlcCB0cmFjayBvZiB0dXBsZXMgb2YgdGhlIGZvcm0gOiAoIHBvaW50LCBpbnZlcnNlCisJCS8vIEFOR0xFIGFuZ2xlICkKKwkJTGlzdDxTdHJpbmc+IHBvaW50RGF0YUxpc3QgPSBuZXcgQXJyYXlMaXN0PFN0cmluZz4oKTsKKworCQkvLyBGaXJzdCwgZ2V0IGFuIGl0ZXJhdG9yIHRvIHRoZSBwb2ludHMgaW4gdGhlIHBvbHlnb24KKwkJSXRlcmF0b3IgaXQgPSBwb2x5Z29uLmdldEl0ZXJhdG9yKCk7CisKKwkJZG91YmxlIGRlZ3JlZXMgPSAwLjA7CisKKwkJLy8gR2V0IHRoZSBmaXJzdCB0aHJlZSBwb2ludHMKKwkJZG91YmxlIGludmVyc2VDb3NpbmUgPSBJTkZJTklUWTsKKworCQkvLyBTdHJpbmcgdG8gc3RvcmUgaW5pdGlhbCBwb2ludC4gVGhpcyB3aWxsIGJlIHVzZWQgdG8gc2V0IHRoZSB2YWx1ZQorCQkvLyBvZiB0aGUgbGFzdCBwb2ludC4gU2luY2UgYSBwb2x5Z29uIGhhcyB0byBiZSBjbG9zZWQsIHRoZSBmaXJzdCBhbmQKKwkJLy8gbGFzdCBwb2ludHMgc2hvdWxkIGJlIHRoZSBzYW1lLiBJdCBpcyBiZXR0ZXIgdG8gc3RvcmUgaXQgdGhhbiB0bworCQkvLyByZWNvbXB1dGUgaXQgbGF0ZXIuCisJCVN0cmluZyBpbml0UG9pbnREYXRhID0gbnVsbDsKKwkJU3RyaW5nIGxhc3RQb2ludERhdGEgPSBudWxsOworCisJCVBvaW50RGF0YSBwMSA9IG51bGw7CisJCVBvaW50RGF0YSBwMiA9IG51bGw7CisJCVBvaW50RGF0YSBwMyA9IG51bGw7CisKKwkJaW50IGluZGV4ID0gMDsKKworCQkvLyBTZXQgdGhlIHZhbHVlIG9mIHRoZSBmaXJzdCBhbmQgbGFzdCBwb2ludC4KKwkJLy8gV2UgbmV2ZXIgZGVsZXRlIHRoZSBmaXJzdCBvciB0aGUgbGFzdCBwb2ludCwgb3RoZXJ3aXNlIHdlIHdpbGwKKwkJLy8gdHVybiB0aGlzIHBvbHlnb24gaW50byBhIG5vbi1wb2x5Z29uLgorCQkvLyBTZXQgdG8gVU5TQUZFIGFuZCBhbmdsZSB0byBEb3VibGUuTUFYX1ZBTFVFIHRvIG1ha2Ugc3VyZSB0aGF0IG5laXRoZXIKKwkJLy8gb2YgdGhlc2UgcG9pbnRzIGV2ZXIgYmUgcmVtb3ZlZC4KKworCQlpZiAoaW5pdFBvaW50RGF0YSA9PSBudWxsKSB7CisKKwkJCVBvaW50RGF0YSBpbml0ID0gcG9seWdvbi5nZXRJbml0KCk7CisKKwkJCS8vIFNldCBhbmdsZSB0byBhCisJCQlpbml0UG9pbnREYXRhID0gU3RyaW5nLnZhbHVlT2YoMCkgKyAiOiIgKyBpbml0LmdldEx0KCkgKyAiOiIgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCisJCQkJCSsgaW5pdC5nZXRMZygpICsgIjoiICsgRG91YmxlLk1BWF9WQUxVRSArICI6IiArIFVOU0FGRTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCisKKwkJCWxhc3RQb2ludERhdGEgPSBTdHJpbmcudmFsdWVPZihwb2x5Z29uLnBvaW50cygpIC0gMSkgKyAiOiIgLy8kTk9OLU5MUy0xJAorCQkJCQkrIGluaXQuZ2V0THQoKSArICI6IiArIGluaXQuZ2V0TGcoKSArICI6IiAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKKwkJCQkJKyBEb3VibGUuTUFYX1ZBTFVFICsgIjoiICsgVU5TQUZFOyAvLyROT04tTkxTLTEkCisKKwkJfQorCisJCXdoaWxlIChpdC5oYXNOZXh0KCkpIHsKKworCQkJaWYgKHAxID09IG51bGwpIHsKKwkJCQlwMSA9IChQb2ludERhdGEpIGl0Lm5leHQoKTsKKwkJCQljb250aW51ZTsKKwkJCX0KKworCQkJaWYgKHAyID09IG51bGwpIHsKKwkJCQlwMiA9IChQb2ludERhdGEpIGl0Lm5leHQoKTsKKwkJCQljb250aW51ZTsKKwkJCX0KKworCQkJaWYgKHAzID09IG51bGwpIHsKKwkJCQlwMyA9IChQb2ludERhdGEpIGl0Lm5leHQoKTsKKwkJCX0KKworCQkJaWYgKGluZGV4ID09IDApIHsKKwkJCQkvLyBVdGlsTG9nZ2VyLmxvZ0luZm9ybWF0aW9uKCJBZGRpbmcgKDEpIDogIiArIGluaXRQb2ludERhdGEpOworCQkJCXBvaW50RGF0YUxpc3QuYWRkKGluZGV4KyssIGluaXRQb2ludERhdGEpOworCQkJfQorCisJCQkvLyBTdHJpbmcgdXNlZCB0byByZXByZXNlbnQgZXh0ZW5kZWQgcG9pbnQgZGF0YS4gSXQgaGFzIHRoZSBmb3JtIDoKKwkJCS8vIElOREVYOkxUOkxHOkFOR0xFOlNBRkVUWQorCQkJU3RyaW5nIHR1cGxlID0gbnVsbDsKKworCQkJLy8gTm93IHRoYXQgd2UgaGF2ZSB0aHJlZSBjb25zZWN1dGl2ZSBwb2ludHMsIGNvbXB1dGUgdGhlIGludmVyc2UKKwkJCS8vIEFOR0xFIG9mIHRoZSBhbmdsZQorCQkJLy8gZm9yIHRoZSB0cmlhbmdsZSBmb3JtZWQgYnkgdGhlc2UgdGhyZWUgY29uc2VjdXRpdmUgcG9pbnRzLgorCQkJZmluYWwgZG91YmxlIGNjID0gMTAwMDAwMDAwMDAwLjA7CisJCQlkb3VibGUgbHQxID0gcDEuZ2V0THQoKSAqIGNjOworCQkJZG91YmxlIGx0MiA9IHAyLmdldEx0KCkgKiBjYzsKKwkJCWRvdWJsZSBsdDMgPSBwMy5nZXRMdCgpICogY2M7CisJCQlkb3VibGUgbGcxID0gcDEuZ2V0TGcoKSAqIGNjOworCQkJZG91YmxlIGxnMiA9IHAyLmdldExnKCkgKiBjYzsKKwkJCWRvdWJsZSBsZzMgPSBwMy5nZXRMZygpICogY2M7CisKKwkJCS8vIGNvbXB1dGU6IGFeMiA9IChYaS0gWGktMSleMiArIChZaS0gWWktMSleMgorCQkJZG91YmxlIGEgPSBNYXRoLnBvdygobGcyIC0gbGcxKSwgMikgKyBNYXRoLnBvdygobHQyIC0gbHQxKSwgMik7CisKKwkJCS8vIGNvbXB1dGU6IGJeMiA9IChYaSsxIC1YaSleMiArIChZaSsxIC1ZaSleMgorCQkJZG91YmxlIGIgPSBNYXRoLnBvdygobGczIC0gbGcyKSwgMikgKyBNYXRoLnBvdygobHQzIC0gbHQyKSwgMik7CisKKwkJCS8vIGNvbXB1dGU6IGNeMiA9IChYaSsxIC0gWGktMSleMiArIChZaSsxIC0gWWktMSleMgorCQkJZG91YmxlIGMgPSBNYXRoLnBvdygobGczIC0gbGcxKSwgMikgKyBNYXRoLnBvdygobHQzIC0gbHQxKSwgMik7CisKKwkJCS8vIFV0aWxMb2dnZXIubG9nSW5mb3JtYXRpb24oIiBBXjIgPSAiICsgYSk7CisKKwkJCS8vIFV0aWxMb2dnZXIubG9nSW5mb3JtYXRpb24oIiBCXjIgPSAiICsgYik7CisKKwkJCS8vIFV0aWxMb2dnZXIubG9nSW5mb3JtYXRpb24oIiBDXjIgPSAiICsgYyk7CisKKwkJCS8vIE5vdyBjb21wdXRlOiAoYV4yICsgYl4yIC0gY14yKSAvIDJhYgorCisJCQlkb3VibGUgcmF0aW8gPSAoKGEgKyBiKSAtIGMpIC8gKDIgKiBNYXRoLnNxcnQoYSkgKiBNYXRoLnNxcnQoYikpOworCisJCQkvLyBVdGlsTG9nZ2VyLmxvZ0luZm9ybWF0aW9uKCJSYXRpbyBpcyA6ICIgKyByYXRpbyk7CisKKwkJCS8vIE5vdyBjb21wdXRlIHRoZSBhcmMgQU5HTEUgOiBjb3MtMSggcmF0aW8gKQorCQkJaW52ZXJzZUNvc2luZSA9IE1hdGguYWNvcyhyYXRpbyk7CisKKwkJCWRlZ3JlZXMgPSBNYXRoLmFicygxODAuMCAtIEdlblV0aWxzLnRvRGVncmVlcyhpbnZlcnNlQ29zaW5lKSk7CisKKwkJCXR1cGxlID0gU3RyaW5nLnZhbHVlT2YoaW5kZXgpICsgIjoiICsgcDIuZ2V0THQoKSArICI6IiArIHAyLmdldExnKCkgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCisJCQkJCSsgIjoiICsgbmV3IERvdWJsZShkZWdyZWVzKSArICI6IiArIFVOS05PV047IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAorCisJCQkvLyBTdG9yZSB0dXBsZSBpbiB0aGUgbWFwCisJCQkvLyBVdGlsTG9nZ2VyLmxvZ0luZm9ybWF0aW9uKCJBZGRpbmcgKDEpIDogIiArIHR1cGxlKTsKKwkJCXBvaW50RGF0YUxpc3QuYWRkKGluZGV4KyssIHR1cGxlKTsKKworCQkJLy8gVXRpbExvZ2dlci5sb2dJbmZvcm1hdGlvbigiSW52ZXJzZSBjb3NpbmUgaXMgIiArIGludmVyc2VBTkdMRSk7CisKKwkJCS8vIFNsaWRlIHRoZSBwb2ludHMgYnkgb25lIHRvIGRvIHRoZSBuZXcgY29tcHV0YXRpb24gb2YgdGhlIGFuZ2xlCisKKwkJCS8vIE5vdyBzZXQgcDEgPC0gcDIKKwkJCXAxID0gcDI7CisKKwkJCS8vIE5vdyBzZXQgcDIgPC0gcDMKKwkJCXAyID0gcDM7CisKKwkJCS8vIE5vdyBzZXQgcDMgPSBudWxsCisJCQlwMyA9IG51bGw7CisKKwkJCS8vIENoZWNrIHRvIHNlZSBpZiB0aGlzIGlzIHRoZSBsYXN0IGl0ZXJhdGlvbi4KKwkJCWlmIChpdC5oYXNOZXh0KCkgPT0gZmFsc2UpIHsKKworCQkJCS8vIElmIHNvLCBhZGQgdGhlIGxhc3QgcG9pbnQuCisJCQkJLy8gVXRpbExvZ2dlci5sb2dJbmZvcm1hdGlvbigiQWRkaW5nICgyKSA6ICIgKyBsYXN0UG9pbnREYXRhKTsKKwkJCQlwb2ludERhdGFMaXN0LmFkZChpbmRleCwgbGFzdFBvaW50RGF0YSk7CisJCQkJYnJlYWs7CisJCQl9CisKKwkJfQorCisJCXJldHVybiBwb2ludERhdGFMaXN0OworCX0KKworCS8qKgorCSAqIENoZWNrIHRvIHNlZSBpZiB0aGlzIGlzIGEgcmVhbCBwb2x5Z29uIChpLmUuIGNsb3NlZCkKKwkgKiAKKwkgKiBAcGFyYW0gcG9seWdvbgorCSAqICAgICAgICAgICAgQSBTVEVNIHBvbHlnb24KKwkgKiAKKwkgKiBAcmV0dXJuIHRydWUgaWYgdGhlIHBhcmFtZXRlciAicG9seWdvbiIgaXMgYSBTVEVNIHBvbHlnb24KKwkgKi8KKwlwcm90ZWN0ZWQgYm9vbGVhbiBpc1BvbHlnb24oU1RFTVBvbHlnb24gcG9seWdvbikgeworCisJCVBvaW50RGF0YSBpbml0ID0gcG9seWdvbi5nZXRJbml0KCk7CisJCVBvaW50RGF0YSBsYXN0ID0gcG9seWdvbi5nZXRMYXN0KCk7CisKKwkJaWYgKGluaXQuZ2V0THQoKSAhPSBsYXN0LmdldEx0KCkpIHsKKwkJCS8vIE5vdCBhIHBvbHlnb24KKwkJCXJldHVybiBmYWxzZTsKKwkJfSBlbHNlIGlmIChpbml0LmdldExnKCkgIT0gbGFzdC5nZXRMZygpKSB7CisJCQkvLyBOb3QgYSBwb2x5Z29uCisJCQlyZXR1cm4gZmFsc2U7CisJCX0KKworCQkvLyBZZXMsIGl0IGlzIGEgcG9seWdvbgorCQlyZXR1cm4gdHJ1ZTsKKwl9CisKKwkvKioKKwkgKiBDaGVjayB0byBzZWUgaWYgdGhpcyBwb2x5Z29uIGlzIGR1cGxpY2F0ZWQuCisJICogCisJICogQHBhcmFtIHBvbHlnb24KKwkgKiAgICAgICAgICAgIGEgU1RFTSBwb2x5Z29uCisJICogQHBhcmFtIGl0CisJICogICAgICAgICAgICBhbiBpdGVyYXRvciBvbiB0aGUgcG9seWdvbiBsaXN0CisJICogCisJICogQHJldHVybiB0cnVlIGlmIHRoaXMgcG9seWdvbiBpcyBhbHJlYWR5IGluIHRoZSBsaXN0IG9mIGtub3duIHBvbHlnb25zCisJICovCisJcHJvdGVjdGVkIGJvb2xlYW4gaXNQb2x5Z29uRHVwbGljYXRlZChJdGVyYXRvciBpdCwgU1RFTVBvbHlnb24gcG9seWdvbikgeworCisJCWlmIChpdC5oYXNOZXh0KCkgIT0gdHJ1ZSkgeworCQkJcmV0dXJuIGZhbHNlOworCQl9CisKKwkJd2hpbGUgKGl0Lmhhc05leHQoKSkgeworCQkJU1RFTVBvbHlnb24gY3VycmVudCA9IChTVEVNUG9seWdvbikgaXQubmV4dCgpOworCQkJaWYgKGN1cnJlbnQuc2FtZShwb2x5Z29uKSA9PSB0cnVlKSB7CisJCQkJLy8gTm90IHVuaXF1ZSwgaXQgaXMgZHVwbGljYXRlZCBzbyBjb25kaXRpb24gaXMgZmFsc2UuCisJCQkJcmV0dXJuIHRydWU7CisJCQl9CisJCX0KKwkJcmV0dXJuIGZhbHNlOworCX0KKworCS8qKgorCSAqIFRoaXMgbWV0aG9kIGNyZWF0ZXMgdGhlIG9wZW5pbmcgWE1MIHRhZ3MgdGhhdCBkZWFsIHdpdGggaXNsYW5kcyBvZgorCSAqIHBvbHlnb24gZGF0YS4KKwkgKiAKKwkgKiBAcGFyYW0gaWQKKwkgKiAgICAgICAgICAgIHRoZSBkZXNjcmlwdG9yIGZvciB0aGUgZW50aXR5CisJICogCisJICogQHJldHVybiBhIEdNTCB0YWcgdGhhdCBkZXNjcmliZXMgYSBwb2x5Z29uCisJICovCisJcHJvdGVjdGVkIFN0cmluZyBvcGVuUG9seWdvbklzbGFuZFRhZ3MoU3RyaW5nIGlkKSB7CisKKwkJU3RyaW5nIHRhZ3MgPSBudWxsOworCQl0YWdzID0gIjxnbWw6UG9seWdvbiBnbWw6aWQ9XCIiICsgaWQgKyAiXCI+XG4iOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKKwkJdGFncyArPSAiPGdtbDpvdXRlckJvdW5kYXJ5SXM+XG4iOyAvLyROT04tTkxTLTEkCisKKwkJcmV0dXJuIHRhZ3M7CisJfQorCisJLyoqCisJICogVGhpcyBtZXRob2QgY3JlYXRlcyB0aGUgdGFncyB0aGF0IGRlc2NyaWJlIGEgInBvbHlnb24gaXNsYW5kIiBvciBsaW5lYXIKKwkgKiByaW5nIGFuZCBwdXRzIHRoZSBwb2x5Z29uIGRhdGEgaW5zaWRlIG9mIGl0LgorCSAqIAorCSAqIEBwYXJhbSBidWZmZXIKKwkgKiAgICAgICAgICAgIHRoZSBkYXRhIGJ1ZmZlciBjb250YWluaW5nIGFsbCB0aGUgcG9seWdvbmQgZGF0YQorCSAqIEBwYXJhbSBsZXZlbAorCSAqICAgICAgICAgICAgdGhlIGFkbWluIGxldmVsCisJICogCisJICogQHJldHVybiBhIEdNTCB0YWcgZm9yIG9wZW5pbmcgYSBsaW5lYXIgcmluZy4KKwkgKi8KKwlwcm90ZWN0ZWQgU3RyaW5nIGFkZExpbmVhclJpbmdUYWdzKFN0cmluZyBidWZmZXIsIGludCBsZXZlbCkgeworCisJCWludCBvZmZzZXQgPSAwOworCisJCVN0cmluZyBwb2x5Z29uRGF0YSA9IG51bGw7CisKKwkJc3dpdGNoIChsZXZlbCkgeworCisJCWNhc2UgRGF0YVR5cGVzLkxFVkVMXzA6CisJCQlvZmZzZXQgPSAyOworCQkJYnJlYWs7CisKKwkJY2FzZSBEYXRhVHlwZXMuTEVWRUxfMToKKwkJCW9mZnNldCA9IDM7CisJCQlicmVhazsKKworCQljYXNlIERhdGFUeXBlcy5MRVZFTF8yOgorCQkJb2Zmc2V0ID0gNDsKKwkJCWJyZWFrOworCQl9CisKKwkJLy8gVG9rZW5pemUKKwkJU3RyaW5nVG9rZW5pemVyIHRva2VucyA9IG5ldyBTdHJpbmdUb2tlbml6ZXIoYnVmZmVyLCAiLCIpOyAvLyROT04tTkxTLTEkCisKKwkJLy8gQWR2YW5jZSB0aGUgZmlyc3QgSy10b2tlbnMuCisJCWZvciAoaW50IGkgPSAwOyBpIDwgb2Zmc2V0OyBpKyspIHsKKwkJCWlmICh0b2tlbnMuaGFzTW9yZVRva2VucygpKSB7CisJCQkJdG9rZW5zLm5leHRUb2tlbigpOworCQkJfQorCQl9CisKKwkJd2hpbGUgKHRva2Vucy5oYXNNb3JlVG9rZW5zKCkpIHsKKworCQkJU3RyaW5nIHRva2VuID0gdG9rZW5zLm5leHRUb2tlbigpOworCisJCQlpZiAoR2VuVXRpbHMuaXNOdW1lcmljKHRva2VuKSA9PSBmYWxzZSkgeworCQkJCWNvbnRpbnVlOyAvLyBJZ25vcmUsIHRoaXMgaXMgbm90IGEgdmFsaWQgY29vcmRpbmF0ZS4KKwkJCX0KKworCQkJLy8gQ29udmVydCB0b2tlbiAocG9seWdvbiBkYXRhKSB0byBhbiBpbnQuCisJCQlkb3VibGUgY29vcmQgPSBHZW5VdGlscy50b0RlZ3JlZXMoR2VuVXRpbHMuZ2V0RG91YmxlKHRva2VuKSk7CisKKwkJCS8vIEZvcm1hdCBsdCwgbGcgdmFsdWVzIGFjY29yZGluZyB0byBvdXIgY29udmVudGlvbgorCQkJaWYgKHBvbHlnb25EYXRhID09IG51bGwpIHsKKwkJCQlwb2x5Z29uRGF0YSA9IEdlblV0aWxzLmZvcm1hdChjb29yZCkgKyAiICI7IC8vJE5PTi1OTFMtMSQKKwkJCX0gZWxzZSB7CisJCQkJcG9seWdvbkRhdGEgKz0gR2VuVXRpbHMuZm9ybWF0KGNvb3JkKSArICIgIjsgLy8kTk9OLU5MUy0xJAorCQkJfQorCQl9CisKKwkJU3RyaW5nIHRhZ3MgPSAiPGdtbDpMaW5lYXJSaW5nPlxuIjsgLy8kTk9OLU5MUy0xJAorCQl0YWdzICs9ICI8Z21sOnBvc0xpc3Q+XG4iOyAvLyROT04tTkxTLTEkCisJCXRhZ3MgKz0gcG9seWdvbkRhdGEgKyAiXG4iOyAvLyROT04tTkxTLTEkCisJCXRhZ3MgKz0gIjwvZ21sOnBvc0xpc3Q+XG4iOyAvLyROT04tTkxTLTEkCisJCXRhZ3MgKz0gIjwvZ21sOkxpbmVhclJpbmc+XG4iOyAvLyROT04tTkxTLTEkCisKKwkJcmV0dXJuIHRhZ3M7CisJfQorCisJLyoqCisJICogVGhpcyBtZXRob2QgY3JlYXRlcyB0aGUgY2xvc2luZyBYTUwgdGFncyB0aGF0IGRlYWwgd2l0aCBpc2xhbmRzIG9mCisJICogcG9seWdvbiBkYXRhLgorCSAqIAorCSAqIEByZXR1cm4gYSBHTUwgdGFnIGZvciBjbG9zaW5nIGEgcG9seWdvbi4KKwkgKi8KKwlwcm90ZWN0ZWQgU3RyaW5nIGNsb3NlUG9seWdvbklzbGFuZFRhZ3MoKSB7CisKKwkJU3RyaW5nIHRhZ3MgPSBudWxsOworCQl0YWdzID0gIjwvZ21sOm91dGVyQm91bmRhcnlJcz5cbiI7IC8vJE5PTi1OTFMtMSQKKwkJdGFncyArPSAiPC9nbWw6UG9seWdvbj5cbiI7IC8vJE5PTi1OTFMtMSQKKworCQlyZXR1cm4gdGFnczsKKwl9CisKKwkvKioKKwkgKiBUaGlzIG1ldGhvZCBjcmVhdGVzIHRoZSBYTUwgdGFncyB0aGF0IGRlYWwgd2l0aCBzaW1wbGUgcG9seWdvbiBkYXRhIGFuZAorCSAqIGluY2x1ZGVzIHRoZSBwb2x5Z29uIGRhdGEgaW4gaXQuCisJICogCisJICogQHBhcmFtIGlkCisJICogICAgICAgICAgICB0aGUgZGVzY3JpcHRvciBmb3IgdGhlIGVudGl0eQorCSAqIEBwYXJhbSBidWZmZXIKKwkgKiAgICAgICAgICAgIHRoZSBkYXRhIGJ1ZmZlciBjb250YWluaW5nIGFsbCB0aGUgcG9seWdvbiBkYXRhCisJICogQHBhcmFtIGxldmVsCisJICogICAgICAgICAgICB0aGUgYWRtaW4gbGV2ZWwKKwkgKiAKKwkgKiBAcmV0dXJuIGEgR01MIHRhZyB0byBjcmVhdGUgYSBzaW1wbGUgcG9seWdvbi4KKwkgKi8KKwlwcm90ZWN0ZWQgU3RyaW5nIGNyZWF0ZVNpbXBsZVBvbHlnb25UYWdzKFN0cmluZyBpZCwgU3RyaW5nIGJ1ZmZlciwgaW50IGxldmVsKSB7CisKKwkJaW50IG9mZnNldCA9IDA7CisKKwkJU3RyaW5nIHBvbHlnb25EYXRhID0gbnVsbDsKKworCQlzd2l0Y2ggKGxldmVsKSB7CisKKwkJY2FzZSBEYXRhVHlwZXMuTEVWRUxfMDoKKwkJCW9mZnNldCA9IDI7CisJCQlicmVhazsKKworCQljYXNlIERhdGFUeXBlcy5MRVZFTF8xOgorCQkJb2Zmc2V0ID0gMzsKKwkJCWJyZWFrOworCisJCWNhc2UgRGF0YVR5cGVzLkxFVkVMXzI6CisJCQlvZmZzZXQgPSA0OworCQkJYnJlYWs7CisJCX0KKworCQkvLyBUb2tlbml6ZQorCQlTdHJpbmdUb2tlbml6ZXIgdG9rZW5zID0gbmV3IFN0cmluZ1Rva2VuaXplcihidWZmZXIsICIsIik7IC8vJE5PTi1OTFMtMSQKKworCQkvLyBBZHZhbmNlIHRoZSBmaXJzdCBLLXRva2Vucy4KKwkJZm9yIChpbnQgaSA9IDA7IGkgPCBvZmZzZXQ7IGkrKykgeworCQkJaWYgKHRva2Vucy5oYXNNb3JlVG9rZW5zKCkpIHsKKwkJCQl0b2tlbnMubmV4dFRva2VuKCk7CisJCQl9CisJCX0KKworCQl3aGlsZSAodG9rZW5zLmhhc01vcmVUb2tlbnMoKSkgeworCisJCQlTdHJpbmcgdG9rZW4gPSB0b2tlbnMubmV4dFRva2VuKCk7CisKKwkJCWlmIChHZW5VdGlscy5pc051bWVyaWModG9rZW4pID09IGZhbHNlKSB7CisJCQkJY29udGludWU7IC8vIElnbm9yZSwgdGhpcyBpcyBub3QgYSB2YWxpZCBjb29yZGluYXRlLgorCQkJfQorCisJCQkvLyBDb252ZXJ0IHRva2VuIChwb2x5Z29uIGRhdGEpIHRvIGFuIGludC4KKwkJCWRvdWJsZSBjb29yZCA9IEdlblV0aWxzLnRvRGVncmVlcyhHZW5VdGlscy5nZXREb3VibGUodG9rZW4pKTsKKworCQkJLy8gRm9ybWF0IGx0LCBsZyB2YWx1ZXMgYWNjb3JkaW5nIHRvIG91ciBjb252ZW50aW9uCisJCQlpZiAocG9seWdvbkRhdGEgPT0gbnVsbCkgeworCQkJCXBvbHlnb25EYXRhID0gR2VuVXRpbHMuZm9ybWF0KGNvb3JkKSArICIgIjsgLy8kTk9OLU5MUy0xJAorCQkJfSBlbHNlIHsKKwkJCQlwb2x5Z29uRGF0YSArPSBHZW5VdGlscy5mb3JtYXQoY29vcmQpICsgIiAiOyAvLyROT04tTkxTLTEkCisJCQl9CisJCX0KKworCQlTdHJpbmcgdGFncyA9IG51bGw7CisKKwkJaWYgKHBvbHlnb25EYXRhID09IG51bGwpIHsKKwkJCXRhZ3MgPSAiPGdtbDpQb2x5Z29uIGdtbDppZD1cIiIgKyBpZCArICJcIi8+XG4iOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKKwkJfSBlbHNlIHsKKwkJCXRhZ3MgPSAiPGdtbDpQb2x5Z29uIGdtbDppZD1cIiIgKyBpZCArICJcIj5cbiI7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAorCQkJdGFncyArPSAiPGdtbDpvdXRlckJvdW5kYXJ5SXM+XG4iOyAvLyROT04tTkxTLTEkCisJCQl0YWdzICs9ICI8Z21sOkxpbmVhclJpbmc+XG4iOyAvLyROT04tTkxTLTEkCisJCQl0YWdzICs9ICI8Z21sOnBvc0xpc3Q+XG4iOyAvLyROT04tTkxTLTEkCisJCQl0YWdzICs9IHBvbHlnb25EYXRhICsgIlxuIjsgLy8kTk9OLU5MUy0xJAorCQkJdGFncyArPSAiPC9nbWw6cG9zTGlzdD5cbiI7IC8vJE5PTi1OTFMtMSQKKwkJCXRhZ3MgKz0gIjwvZ21sOkxpbmVhclJpbmc+XG4iOyAvLyROT04tTkxTLTEkCisJCQl0YWdzICs9ICI8L2dtbDpvdXRlckJvdW5kYXJ5SXM+XG4iOyAvLyROT04tTkxTLTEkCisJCQl0YWdzICs9ICI8L2dtbDpQb2x5Z29uPlxuIjsgLy8kTk9OLU5MUy0xJAorCQl9CisKKwkJcmV0dXJuIHRhZ3M7CisJfQorCisJLyoqCisJICogR2VuZXJhdGUgdGhlIG9wZW5pbmcgdGFncyBmb3IgdGhpcyBHTUwgZmlsZS4KKwkgKiAKKwkgKiBAcGFyYW0gY29kZQorCSAqICAgICAgICAgICAgdGhlIElTTyBjb2RlCisJICogQHBhcmFtIGxldmVsCisJICogICAgICAgICAgICB0aGUgYWRtaW4gbGV2ZWwKKwkgKiAKKwkgKiBAcmV0dXJuIHRoZSBvcGVuaW5nIHRhZ3MgZm9yIHRoZSBHTUwgZmlsZS4KKwkgKi8KKwlwcm90ZWN0ZWQgU3RyaW5nIGdldE9wZW5pbmdUYWdzKElTT0NvZGUxIGNvZGUsIGludCBsZXZlbCkgeworCisJCS8vIENhbGVuZGFyIGRhdGUgPSBDYWxlbmRhci5nZXRJbnN0YW5jZSgpOworCQlTdHJpbmcgdGFncyA9ICI8P3htbCB2ZXJzaW9uPVwiMS4wXCIgZW5jb2Rpbmc9XCJVVEYtOFwiPz5cbiI7IC8vJE5PTi1OTFMtMSQKKwkJdGFncyArPSBHZW5VdGlscy5nZUdNTENvcHlyaWdodCgpOworCQl0YWdzICs9IEdlblV0aWxzLmdldEdNTEtleUZvcm1hdEV4cGxhbmF0aW9uKCk7CisJCXRhZ3MgKz0gIjxNYXAgeG1sbnM6Z21sPVwiaHR0cDovL3d3dy5vcGVuZ2lzLm5ldC9nbWxcIiB4bWxuczpnZW9yc3M9XCJodHRwOi8vd3d3Lmdlb3Jzcy5vcmcvZ2VvcnNzXCI+XG4iOyAvLyROT04tTkxTLTEkCisJCXRhZ3MgKz0gIjx0aXRsZT4iICsgY29kZS5nZXRBbHBoYTMoKSArICIgTGV2ZWwgIiArIGxldmVsIC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAorCQkJCSsgIiBNYXA8L3RpdGxlPlxuIjsgLy8kTk9OLU5MUy0xJAorCQl0YWdzICs9ICI8c3ViVGl0bGU+QWRtaW5pc3RyYXRpdmUgQm91bmRhcmllczwvc3ViVGl0bGU+XG4iOyAvLyROT04tTkxTLTEkCisJCXRhZ3MgKz0gIjx1cGRhdGVkPlR1ZSBOb3YgMDcgMTY6NTc6NTUgUFNUIDIwMDYgPC91cGRhdGVkPlxuIjsgLy8kTk9OLU5MUy0xJAorCQl0YWdzICs9ICI8ZW50cnk+XG4iOyAvLyROT04tTkxTLTEkCisJCXRhZ3MgKz0gIjxnZW9yc3M6d2hlcmU+XG4iOyAvLyROT04tTkxTLTEkCisJCXJldHVybiB0YWdzOworCX0KKworCS8qKgorCSAqIEdlbmVyYXRlIHRoZSBjbG9zaW5nIHRhZ3MgZm9yIHRoaXMgR01MIGZpbGUuCisJICogCisJICogQHJldHVybiB0aGUgY2xvc2luZyB0YWdzIG9mIHRoZSBHTUwgZmlsZQorCSAqLworCXByb3RlY3RlZCBTdHJpbmcgZ2V0Q2xvc2luZ1RhZ3MoKSB7CisJCVN0cmluZyB0YWdzID0gIjwvZ2VvcnNzOndoZXJlPlxuIjsgLy8kTk9OLU5MUy0xJAorCQl0YWdzICs9ICI8L2VudHJ5PlxuIjsgLy8kTk9OLU5MUy0xJAorCQl0YWdzICs9ICI8L01hcD5cbiI7IC8vJE5PTi1OTFMtMSQKKwkJcmV0dXJuIHRhZ3M7CisJfQorCisJLyoqCisJICogVGhlIGV4ZWN1dGlvbiBlbnRyeSBwb2ludAorCSAqIAorCSAqIEBwYXJhbSBhcmdzCisJICovCisJcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgeworCQkvLyBmaW5hbCBpbnQgVEhSRVNIT0xEID0gMDsKKwkJLy8gZmluYWwgaW50IGl0ZXJhdGlvbnMgPSAxOworCQkvLyBmaW5hbCBpbnQgSVNPXzMxNjZfMSA9IDI7CisJCS8vIGZpbmFsIGludCBJU09fMzE2Nl8yID0gMzsKKwkJLy8gZmluYWwgaW50IEZJWF9GSUxFID0gNDsKKwkJLy8gZmluYWwgaW50IFRBUkdFVF9MSVNUID0gNTsKKwkJLy8gZmluYWwgaW50IExFWF9ESVIgPSA2OworCQkvLyBmaW5hbCBpbnQgT1VUUFVUX0RJUiA9IDc7CisJCS8vIGZpbmFsIGludCBQQVJBTVMgPSA4OworCQkvLworCQkvLyBpZiAoYXJncy5sZW5ndGggPCBQQVJBTVMpIHsKKwkJLy8gVXRpbExvZ2dlci5sb2dJbmZvcm1hdGlvbigiLS1Xcm9uZyBhcmd1bWVudHMtLSIpOyAvLyROT04tTkxTLTEkCisJCS8vIFN5c3RlbS5vdXQKKwkJLy8gLnByaW50bG4oIlx0VG8gcnVuLCBwbGVhc2UgcHJvdmlkZSB0aGUgZm9sbG93aW5nIGFyZ3VtZW50cyA6ICIpOworCQkvLyAvLyROT04tTkxTLTEkCisJCS8vIFV0aWxMb2dnZXIubG9nSW5mb3JtYXRpb24oIlx0XHQgVGhyZXNob2xkIChpbiBkZWdyZWVzKSIpOyAvLyROT04tTkxTLTEkCisJCS8vIFV0aWxMb2dnZXIubG9nSW5mb3JtYXRpb24oIlx0XHQgVG90YWwgaXRlcmF0aW9ucyIpOyAvLyROT04tTkxTLTEkCisJCS8vIFV0aWxMb2dnZXIubG9nSW5mb3JtYXRpb24oIlx0XHQgSVNPIDMxNjYtMSBmaWxlIik7IC8vJE5PTi1OTFMtMSQKKwkJLy8gVXRpbExvZ2dlci5sb2dJbmZvcm1hdGlvbigiXHRcdCBJU08gMzE2Ni0yIGZpbGUiKTsgLy8kTk9OLU5MUy0xJAorCQkvLyBVdGlsTG9nZ2VyLmxvZ0luZm9ybWF0aW9uKCJcdFx0IElTTyBmaXggZmlsZSIpOyAvLyROT04tTkxTLTEkCisJCS8vIFV0aWxMb2dnZXIubG9nSW5mb3JtYXRpb24oIlx0XHQgVGFyZ2V0IGNvdW50cmllcyBmaWxlIik7IC8vJE5PTi1OTFMtMSRGCisJCS8vIFV0aWxMb2dnZXIubG9nSW5mb3JtYXRpb24oIlx0XHQgTGV4aWNvZ3JhcGhpYyBzb3J0aW5nIGRpcmVjdG9yeSIpOworCQkvLyAvLyROT04tTkxTLTEkJAorCQkvLyBVdGlsTG9nZ2VyLmxvZ0luZm9ybWF0aW9uKCJcdFx0IE91dHB1dCBkaXJlY3RvcnkiKTsgLy8kTk9OLU5MUy0xJAorCQkvLyByZXR1cm47CisJCS8vIH0KKwkJLy8KKwkJLy8gTXVsdGlQYXNzRG93blNhbXBsZXIgc2FtcGxlciA9IG5ldyBNdWx0aVBhc3NEb3duU2FtcGxlcigKKwkJLy8gYXJnc1tUSFJFU0hPTERdLCBhcmdzW2l0ZXJhdGlvbnNdLCBhcmdzW0lTT18zMTY2XzFdLAorCQkvLyBhcmdzW0lTT18zMTY2XzJdLCBhcmdzW0ZJWF9GSUxFXSwgYXJnc1tUQVJHRVRfTElTVF0sCisJCS8vIGFyZ3NbTEVYX0RJUl0sIGFyZ3NbT1VUUFVUX0RJUl0pOworCQkvLyBzYW1wbGVyLnJ1bigpOworCisJCWZpbmFsIGludCBDT05GSUdfRklMRSA9IDA7CisJCWZpbmFsIGludCBQQVJBTVMgPSAxOworCisJCWlmIChhcmdzLmxlbmd0aCA8IFBBUkFNUykgeworCQkJVXRpbExvZ2dlci5sb2dJbmZvcm1hdGlvbigiXHRcdC0tV3JvbmcgYXJndW1lbnRzLS0iKTsgLy8kTk9OLU5MUy0xJAorCQkJU3lzdGVtLm91dAorCQkJCQkucHJpbnRsbigiXHRcdFRvIHJ1biwgcGxlYXNlIHByb3ZpZGUgdGhlIGZvbGxvd2luZyBhcmd1bWVudChzKSA6ICIpOyAvLyROT04tTkxTLTEkCisJCQlVdGlsTG9nZ2VyLmxvZ0luZm9ybWF0aW9uKCJcdFx0XHQgQ29uZmlndXJhdGlvbiBmaWxlIik7IC8vJE5PTi1OTFMtMSQKKwkJCVN5c3RlbS5leGl0KDEpOworCQl9CisKKwkJTXVsdGlQYXNzRG93blNhbXBsZXIgc2FtcGxlciA9IG5ldyBNdWx0aVBhc3NEb3duU2FtcGxlcigKKwkJCQlhcmdzW0NPTkZJR19GSUxFXSk7CisKKwkJc2FtcGxlci5ydW4oKTsKKwl9CisKK30KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3NyYy9vcmcvZWNsaXBzZS9zdGVtL3V0aWxpdHkvZ2VuZXJhdG9ycy9OYW1lR2VuZXJhdG9yLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91dGlsaXR5L2dlbmVyYXRvcnMvTmFtZUdlbmVyYXRvci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJkMDRmZjgKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91dGlsaXR5L2dlbmVyYXRvcnMvTmFtZUdlbmVyYXRvci5qYXZhCkBAIC0wLDAgKzEsNzE4IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS5nZW5lcmF0b3JzOworCitpbXBvcnQgamF2YS5pby5CdWZmZXJlZFJlYWRlcjsKK2ltcG9ydCBqYXZhLmlvLkZpbGU7CitpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLmlvLlByaW50V3JpdGVyOworaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7CitpbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7CitpbXBvcnQgamF2YS51dGlsLkhhc2hTZXQ7CitpbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOworaW1wb3J0IGphdmEudXRpbC5MaXN0OworaW1wb3J0IGphdmEudXRpbC5TZXQ7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMKKyAqIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YKKyAqIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcworICogYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKiAKKyAqIENvbnRyaWJ1dG9yczogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioKKyAqIFNURU0gSUkgRGF0YSBNaWdyYXRpb24vR2VuZXJhdGlvbiBVdGlsaXRpZXMgLS0gVGhpcyBpcyBhIHV0aWxpdHkgY2xhc3MgdGhhdAorICogZ2VuZXJhdGVzIHRoZSBuYW1lcy5wcm9wZXJ0aWVzIGZpbGVzIGZvciBhbGwgY291bnRyaWVzLgorICogCisgKiAKKyAqIFRvIGNvbmZpZ3VyZSwgc2VlIGNvbmZpZ3VyYXRpb24gZmlsZSA6CisgKiBvcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvY29uZmlndXJhdGlvbi9OYW1lR2VuZXJhdG9yLmNvbmZpZworICogCisgKiAKKyAqIFRvIHJ1biwgYWRkIHBhdGggdG8gY29uZmlndXJhdGlvbiBmaWxlIGluIHRoZSBydW4gcHJvZmlsZSAoaS5lLgorICogQzpcc3RlbUlJXG9yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eVxjb25maWd1cmF0aW9uXE5hbWVHZW5lcmF0b3IuY29uZmlnKQorICogCisgKiAKKyAqLworCitwdWJsaWMgY2xhc3MgTmFtZUdlbmVyYXRvciB7CisKKwkvKioKKwkgKiBTVEVNIElJIFByb3BlcnRpZXMgRmlsZSBVdGlsaXR5IC0tIFRoaXMgY2xhc3MgaXMgYSB1dGlsaXR5IHRvIGdlbmVyYXRlCisJICogdGhlIG5hbWVzLnByb3BlcnRpZXMgZmlsZXMuCisJICogCisJICogQHBhcmFtIGlzbzMxNjZfMSAtCisJICogICAgICAgICAgICBkYXRhIGZpbGUgd2l0aCB0aGUgSVNPMzE2Ni0xIEFMUEhBXzIgYW5kIEFMUEhBXzMgY29kZXMuCisJICogQHBhcmFtIGlzbzMxNjZfMiAtCisJICogICAgICAgICAgICBmaWxlIHdpdGggdGhlIElTTzMxNjYtMiBkYXRhIHVzZWQgZm9yIGdlbmVyYXRpbmcgdGhlIElEcy4gXAorCSAqIEBwYXJhbSB0YXJnZXRMaXN0IC0KKwkgKiAgICAgICAgICAgIGRhdGEgZmlsZSB3aGVyZSB3ZSBmaW5kIGEgbGlzdCBvZiBjb3VudHJpZXMgZm9yIGdlbmVyYXRpb24gb2YKKwkgKiAgICAgICAgICAgIHRoZWlyIGNvcnJlc3BvbmRpbmcgYXJlYS5wcm9wZXJ0aWVzIGZpbGVzLgorCSAqIEBwYXJhbSBsZXhEaXIKKwkgKiAgICAgICAgICAgIGZvbGRlciBjb250YWluaW5nIGxleGljb2dyYXBoaWNhbGx5IHNvcnRlZCBmaWxlcworCSAqIEBwYXJhbSBvdXRwdXREaXIgLQorCSAqICAgICAgICAgICAgdGhlIG91dHB1dCBkaXJlY3RvcnkgZm9yIHRoZSBmaWxlcyBnZW5lcmF0ZWQuCisJICogCisJICovCisKKwkvKioKKwkgKiBPdXIgc291cmNlIGZpbGVzIGZvciBJU08gMzE2Ni0xIGNvZGVzIGFuZCBmb3IgdGhlIGxpc3Qgb2YgdGFyZ2V0CisJICogY291bnRyaWVzLgorCSAqLworCisJcHJpdmF0ZSBTdHJpbmcgaXNvMzE2Nl8xID0gbnVsbDsKKworCXByaXZhdGUgU3RyaW5nIGlzbzMxNjZfMiA9IG51bGw7CisKKwlwcml2YXRlIFN0cmluZyBmaXhGaWxlID0gbnVsbDsKKworCXByaXZhdGUgU3RyaW5nIHRhcmdldEZpbGUgPSBudWxsOworCisJcHJpdmF0ZSBTdHJpbmcgbGV4RGlyID0gbnVsbDsKKworCXByaXZhdGUgU3RyaW5nIG91dHB1dERpciA9IG51bGw7CisKKwlwcml2YXRlIFN0cmluZyB3b3Jrc3BhY2UgPSBudWxsOworCisJLyoqCisJICogTGlzdCBmb3IgSVNPIDMxNjYtMSBjb2RlcyBhbmQgdGFyZ2V0IGNvdW50cmllcy4KKwkgKi8KKwlMaXN0PFN0cmluZz4gdGFyZ2V0TGlzdCA9IG51bGw7CisKKwlMaXN0PFN0cmluZz4gY29kZUxpc3QgPSBudWxsOworCisJTGlzdDxTdHJpbmc+IGNvZGVmaXhMaXN0ID0gbnVsbDsKKworCS8qKgorCSAqIEhhc2ggc2V0IGZvciBzdG9yaW5nIHRoZSBzb3VyY2UgVVJMcyByZWxldmFudCB0byBhcmVhIGRhdGEuCisJICovCisJU2V0PFN0cmluZz4gdXJsU2V0ID0gbnVsbDsKKworCS8qKgorCSAqIEhhc2ggbWFwIHRvIGtlZXAgdHJhY2sgb2Ygd2hpY2ggc291cmNlcyB3aWxsIGJlIHNob3duIGNvbW1lbnRlZCBvdXQgYW5kCisJICogd2hpY2ggd2lsbCBhcHBlYXIgYWN0aXZlLgorCSAqLworCS8vIEhhc2hNYXA8U3RyaW5nLCBCb29sZWFuPiB1cmxTdGF0dXMgPSBudWxsOworCS8qKgorCSAqIENvbnN0cnVjdG9yCisJICogCisJICogQHBhcmFtIGlzbzMxNjZfMSAtCisJICogICAgICAgICAgICBkYXRhIGZpbGUgd2l0aCB0aGUgSVNPMzE2Ni0xIEFMUEhBXzIgYW5kIEFMUEhBXzMgY29kZXMuCisJICogQHBhcmFtIGlzbzMxNjZfMiAtCisJICogICAgICAgICAgICBmaWxlIHdpdGggdGhlIElTTzMxNjYtMiBkYXRhIHVzZWQgZm9yIGdlbmVyYXRpbmcgdGhlIElEcy4KKwkgKiBAcGFyYW0gZml4RmlsZSAtCisJICogICAgICAgICAgICBmaWxlIGNvbnRhaW5pbmcgbWlzc2luZyBJU08zMTY2LTIgY29kZXMKKwkgKiBAcGFyYW0gdGFyZ2V0RmlsZSAtCisJICogICAgICAgICAgICBkYXRhIGZpbGUgd2hlcmUgd2UgZmluZCBhIGxpc3Qgb2YgY291bnRyaWVzIGZvciBnZW5lcmF0aW9uIG9mCisJICogICAgICAgICAgICB0aGVpciBjb3JyZXNwb25kaW5nIGFyZWEucHJvcGVydGllcyBmaWxlcy4KKwkgKiBAcGFyYW0gbGV4RGlyCisJICogICAgICAgICAgICBmb2xkZXIgY29udGFpbmluZyBsZXhpY29ncmFwaGljYWxseSBzb3J0ZWQgZmlsZXMKKwkgKiBAcGFyYW0gb3V0cHV0RGlyIC0KKwkgKiAgICAgICAgICAgIHRoZSBvdXRwdXQgZGlyZWN0b3J5IGZvciB0aGUgZmlsZXMgZ2VuZXJhdGVkLgorCSAqIAorCSAqLworCS8vIHB1YmxpYyBOYW1lR2VuZXJhdG9yKFN0cmluZyBpc28zMTY2XzEsIFN0cmluZyBpc28zMTY2XzIsIFN0cmluZyBmaXhGaWxlLAorCS8vIFN0cmluZyB0YXJnZXRGaWxlLCBTdHJpbmcgbGV4RGlyLCBTdHJpbmcgb3V0cHV0RGlyKSB7CisJLy8gLy8gU2V0IHZhbHVlcyBvZiBnbG9iYWwgdmFyaWFibGVzLgorCS8vIHRoaXMuaXNvMzE2Nl8xID0gaXNvMzE2Nl8xOworCS8vIHRoaXMuaXNvMzE2Nl8yID0gaXNvMzE2Nl8yOworCS8vIHRoaXMuZml4RmlsZSA9IGZpeEZpbGU7CisJLy8gdGhpcy50YXJnZXRGaWxlID0gdGFyZ2V0RmlsZTsKKwkvLyB0aGlzLmxleERpciA9IGxleERpcjsKKwkvLyB0aGlzLm91dHB1dERpciA9IG91dHB1dERpcjsKKwkvLyB0YXJnZXRMaXN0ID0gbnVsbDsKKwkvLyAvLyBTZXQgdGhlIFVSTCBJRHMgdGhhdCBhcmUgcmVsZXZhbnQgZm9yIGFyZWEgZGF0YS4KKwkvLyBpbml0TmFtZVVSTFNldCgpOworCS8vIC8vIFNldCB3aGljaCBVUkxzIGFyZSBhY3RpdmUgYW5kIHdoaWNoIG9uZXMgc2hvdWxkIGJlIGNvbW1lbnRlZCBvdXQuCisJLy8gLy8gc2V0VVJMU3RhdHVzKCk7CisJLy8gfQorCS8qKgorCSAqIEBwYXJhbSBjb25maWdGaWxlCisJICovCisJcHVibGljIE5hbWVHZW5lcmF0b3IoU3RyaW5nIGNvbmZpZ0ZpbGUpIHsKKworCQkvLyBMb2FkIGFsbCBjb25maWd1cmF0aW9uIHZhcmlhYmxlcworCQlIYXNoTWFwPFN0cmluZywgU3RyaW5nPiB2YXJzID0gR2VuVXRpbHMubG9hZENvbmZpZ0ZpbGUoY29uZmlnRmlsZSk7CisKKwkJU2V0PFN0cmluZz4ga2V5cyA9IHZhcnMua2V5U2V0KCk7CisJCUl0ZXJhdG9yIGl0ID0ga2V5cy5pdGVyYXRvcigpOworCQl3aGlsZSAoaXQuaGFzTmV4dCgpKSB7CisJCQlTdHJpbmcgdmFyID0gKFN0cmluZykgaXQubmV4dCgpOworCisJCQkvLyBBc3NpZ24gdmFsdWVzIHRvIGNvbmZpZ3VyYXRpb24gdmFyaWFibGVzIDoKKwkJCWlmICh2YXIuZXF1YWxzKCJXT1JLU1BBQ0UiKSkgeyAvLyROT04tTkxTLTEkCisJCQkJd29ya3NwYWNlID0gdmFycy5nZXQodmFyKTsKKwkJCX0gZWxzZSBpZiAodmFyLmVxdWFscygiSVNPMzE2Nl8xIikpIHsgLy8kTk9OLU5MUy0xJAorCQkJCWlzbzMxNjZfMSA9IHZhcnMuZ2V0KHZhcik7CisJCQl9IGVsc2UgaWYgKHZhci5lcXVhbHMoIklTTzMxNjZfMiIpKSB7IC8vJE5PTi1OTFMtMSQKKwkJCQlpc28zMTY2XzIgPSB2YXJzLmdldCh2YXIpOworCQkJfSBlbHNlIGlmICh2YXIuZXF1YWxzKCJJU09fRklYIikpIHsgLy8kTk9OLU5MUy0xJAorCQkJCWZpeEZpbGUgPSB2YXJzLmdldCh2YXIpOworCQkJfSBlbHNlIGlmICh2YXIuZXF1YWxzKCJUQVJHRVRfTElTVCIpKSB7IC8vJE5PTi1OTFMtMSQKKwkJCQl0YXJnZXRGaWxlID0gdmFycy5nZXQodmFyKTsKKwkJCX0gZWxzZSBpZiAodmFyLmVxdWFscygiTEVYX0RJUiIpKSB7IC8vJE5PTi1OTFMtMSQKKwkJCQlsZXhEaXIgPSB2YXJzLmdldCh2YXIpOworCQkJfSBlbHNlIGlmICh2YXIuZXF1YWxzKCJQUk9QRVJUSUVTX09VVFBVVCIpKSB7IC8vJE5PTi1OTFMtMSQKKwkJCQlvdXRwdXREaXIgPSB2YXJzLmdldCh2YXIpOworCQkJfQorCisJCX0gLy8gd2hpbGUKKworCQkvLyBUaGUgd29ya3NwYWNlIHZhcmlhYmxlIHNob3VsZCBlbmQgd2l0aCBhIHNsYXNoIGNoYXJhY3RlcgorCQlpZiAod29ya3NwYWNlLmVuZHNXaXRoKCJcXCIpID09IGZhbHNlKSB7IC8vJE5PTi1OTFMtMSQKKwkJCXdvcmtzcGFjZSArPSAiXFwiOyAvLyROT04tTkxTLTEkCisJCX0KKworCQlTdHJpbmcgcGF0aCA9IHdvcmtzcGFjZSArIEdlbkNvbnN0YW50cy5QQVJBTVNfRElSOworCisJCS8vIFNldCByZW1haW5pbmcgY29uZmlnIHZhcnMgdXNpbmcgV09SS1NQQUNFICh3b3Jrc3BhY2UgcmVsYXRpdmUpCisJCWlmIChpc28zMTY2XzEgPT0gbnVsbCkgeworCQkJaXNvMzE2Nl8xID0gcGF0aCArIEdlbkNvbnN0YW50cy5JU08zMTY2XzFfRklMRTsKKwkJfQorCQlpZiAoaXNvMzE2Nl8yID09IG51bGwpIHsKKwkJCWlzbzMxNjZfMiA9IHBhdGggKyBHZW5Db25zdGFudHMuSVNPMzE2Nl8yX0ZJTEU7CisJCX0KKwkJaWYgKGZpeEZpbGUgPT0gbnVsbCkgeworCQkJZml4RmlsZSA9IHBhdGggKyBHZW5Db25zdGFudHMuSVNPRklYX0ZJTEU7CisJCX0KKwkJaWYgKHRhcmdldEZpbGUgPT0gbnVsbCkgeworCQkJdGFyZ2V0RmlsZSA9IHBhdGggKyBHZW5Db25zdGFudHMuQ09VTlRSSUVTX0xJU1Q7CisJCX0KKwkJaWYgKGxleERpciA9PSBudWxsKSB7CisJCQlsZXhEaXIgPSBwYXRoICsgR2VuQ29uc3RhbnRzLkxFWF9ESVI7CisJCX0KKwkJaWYgKG91dHB1dERpciA9PSBudWxsKSB7CisJCQlvdXRwdXREaXIgPSB3b3Jrc3BhY2UgKyBHZW5Db25zdGFudHMuUFJPUEVSVElFU19PVVRQVVRfRElSOworCQl9CisKKwkJdGFyZ2V0TGlzdCA9IG51bGw7CisJCS8vIFNldCB0aGUgVVJMIElEcyB0aGF0IGFyZSByZWxldmFudCBmb3IgYXJlYSBkYXRhLgorCQlpbml0TmFtZVVSTFNldCgpOworCQkvLyBTZXQgd2hpY2ggVVJMcyBhcmUgYWN0aXZlIGFuZCB3aGljaCBvbmVzIHNob3VsZCBiZSBjb21tZW50ZWQgb3V0LgorCQkvLyBzZXRVUkxTdGF0dXMoKTsKKworCX0KKworCS8qKgorCSAqIFNldHMgdGhlIFVSTCBJRHMgcmVsZXZhbnQgZm9yIGFyZWEgZGF0YS4gV2UgYXJlIG9ubHkgaW50ZXJlc3RlZCBpbiBVUkxzCisJICogd2l0aCBJRCA9IERJVkEuIFRoaXMgY2FuIGJlIGRpZmZlcmVudCBmb3IgZGlmZmVyZW50IHR5cGVzIG9mIGRhdGEuIEZvcgorCSAqIGV4YW1wbGUsIGZvciBwb3B1bGF0aW9uIGRhdGEsIHdlIGFyZSBpbnRlcmVzdGVkICBJRCA9IENJQQorCSAqLworCXByb3RlY3RlZCB2b2lkIGluaXROYW1lVVJMU2V0KCkgeworCQl1cmxTZXQgPSBuZXcgSGFzaFNldDxTdHJpbmc+KCk7CisJCXVybFNldC5hZGQobmV3IFN0cmluZygiSVNPMzE2Nl8xIikpOyAvLyROT04tTkxTLTEkCisJCXVybFNldC5hZGQobmV3IFN0cmluZygiVVNDRU5TVVNQT1AiKSk7IC8vJE5PTi1OTFMtMSQKKwl9CisKKwkvKioKKwkgKiBTZXQgd2hpY2ggVVJMIGFwcGVhcnMgYXMgdW5jb21tZW50ZWQgb3IgQUNUSVZFIGFuZCB3aGljaCBvbmVzIGFwcGVhciBhcworCSAqIGNvbW1lbnRlZCBvdXQgb3IgU0VDT05EQVJZLiBPbmx5IFVSTCBzaG91bGQgYmUgYWN0aXZlLiBBbGwgb3RoZXJzIHNob3VsZAorCSAqIGFwcGVhciBjb21tZW50ZWQuCisJICogCisJICovCisJLy8gcHJvdGVjdGVkIHZvaWQgc2V0VVJMU3RhdHVzKCkgeworCS8vIHVybFN0YXR1cyA9IG5ldyBIYXNoTWFwPFN0cmluZywgQm9vbGVhbj4oKTsKKwkvLyAvLyBUaGlzIHdpbGwgYmUgdGhlIGFjdGl2ZSBVUkwuCisJLy8gdXJsU3RhdHVzLnB1dCgiSVNPMzE2Nl8xIiwgbmV3IEJvb2xlYW4odHJ1ZSkpOworCS8vIC8vIEFsbCBvdGhlciBVUkxzIGFwcGVhciBhcyBjb21tZW50ZWQgb3V0LCBzZWNvbmRhcnkuCisJLy8gdXJsU3RhdHVzLnB1dCgiQ0lBIiwgbmV3IEJvb2xlYW4oZmFsc2UpKTsKKwkvLyB1cmxTdGF0dXMucHV0KCJVU0NFTlNVU1BPUCIsIG5ldyBCb29sZWFuKGZhbHNlKSk7CisJLy8JCQorCS8vIH0KKwkvKioKKwkgKiBUaGlzIG1ldGhvZCBzZXRzIHVwIGFuZCBydW5zIHRoaXMgZ2VuZXJhdG9yLgorCSAqIAorCSAqLworCXB1YmxpYyB2b2lkIHJ1bigpIHsKKwkJLy8gUmVhZCBhbmQga2VlcCBpbiBtZW1vcnkgYSBsaXN0IG9mIHRoZSBjb3VudHJpZXMgd2Ugd2FudC4KKwkJdGFyZ2V0TGlzdCA9IEdlblV0aWxzLnBvcHVsYXRlTGlzdCh0YXJnZXRGaWxlKTsKKworCQkvLyBSZWFkIGFuZCBrZWVwIGluIG1lbW9yeSBhIGxpc3Qgb2YgdGhlIElTTzMxNjYtMSBBTFBIQTIsIEFMUEhBMywgYW5kCisJCS8vIG51bWVyaWMgY29kZXMuCisJCWNvZGVMaXN0ID0gR2VuVXRpbHMucG9wdWxhdGVMaXN0KGlzbzMxNjZfMSk7CisKKwkJLy8gUmVhZCBhbmQga2VlcCBpbiBtZW1vcnkgYSBsaXN0IG9mIHRoZSBtaXNzaW5nIElTTzMxNjYtMiBjb2RlcworCQljb2RlZml4TGlzdCA9IEdlblV0aWxzLnBvcHVsYXRlTGlzdChmaXhGaWxlKTsKKworCQkvLyBOb3csIHByb2Nlc3MgZWFjaCBpdGVtIGluIHRoZSB0YXJnZXQgbGlzdC4KKwkJcHJvY2VzcygpOworCisJfQorCisJLyoqCisJICogUHJvY2VzcyBvdXIgZ2xvYmFsIGxpc3Qgb2YgdGFyZ2V0IGNvdW50cmllcy4gRm9yIGVhY2ggY291bnRyeSBpbiBsaXN0LAorCSAqIGdlbmVyYXRlIGl0cyBuYW1lLnByb3BlcnRpZXMgZmlsZS4KKwkgKiAKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBwcm9jZXNzKCkgeworCisJCWZpbmFsIGludCBMRVZFTF8xID0gMTsKKwkJZmluYWwgaW50IExFVkVMXzIgPSAyOworCisJCS8vIEEgd3JpdGVyIGZvciB0aGUgbmV3IGZpbGUgd2UgYXJlIGNyZWF0aW5nLgorCQlQcmludFdyaXRlciBwcm9wZXJ0aWVzRmlsZSA9IG51bGw7CisKKwkJLy8gT2JqZWN0IGhvbGRpbmcgSVNPMzE2Ni0xIHJlbGF0ZWQgZGF0YS4KKwkJSVNPQ29kZTEgaXNvQ29kZSA9IG51bGw7CisKKwkJLy8gTmFtZSBvZiB0aGUgbmV3IHByb3BlcnRpZXMgZmlsZS4KKwkJU3RyaW5nIGZpbGVOYW1lID0gbnVsbDsKKworCQkvLyBBIGxpc3QgZm9yIElTTyAzMTY2LTIgb2JqZWN0cworCQlMaXN0PElTT0NvZGUyPiBpc28yTGlzdCA9IG5ldyBBcnJheUxpc3Q8SVNPQ29kZTI+KCk7CisKKwkJLy8gRmlsZW5hbWVzIGZvciBsZXgxIGFuZCBsZXgyIGZpbGVzIGZvciBhIGdpdmVuIGNvdW50cnkuCisJCVN0cmluZyBsZXhBZG1pbjFGaWxlID0gbnVsbDsKKwkJU3RyaW5nIGxleEFkbWluMkZpbGUgPSBudWxsOworCisJCS8vIExpc3RzIGhvbGRpbmcgdGhlIGxleDEgYW5kIGxleDIgdmFsdWVzLgorCQkvLyBOT1RFOiBsZXggdmFsdWVzIGFyZSB0aGUgbGV4aWNvZ3JhcGhpY2FsbHkgc29ydGVkIHZhbHVlcyBmb3IKKwkJLy8gYWRtaW5pc3RyYXRpb24gbGV2ZWxzLgorCQlMaXN0PFN0cmluZz4gbGV4MURhdGFTZXQgPSBudWxsOworCQlMaXN0PFN0cmluZz4gbGV4MkRhdGFTZXQgPSBudWxsOworCisJCS8vIExpc3RzIGZvciBob2xkaW5nIGxleDEgYW5kIGxleDIgb2JqZWN0cyBmb3IgYSBnaXZlbiBjb3VudHJ5LgorCQlMaXN0PExleDFPYmo+IGxleDFMaXN0ID0gbnVsbDsKKwkJTGlzdDxMZXgyT2JqPiBsZXgyTGlzdCA9IG51bGw7CisKKwkJaW50IHNpemUgPSB0YXJnZXRMaXN0LnNpemUoKTsKKworCQkvLyBJdGVyYXRlIGZvciBldmVyeSBjb3VudHJ5IGFuZCBjcmVhdGUgaXRzIG5hbWVzLnByb3BlcnRpZXMgZmlsZS4KKwkJZm9yIChpbnQgaSA9IDA7IGkgPCBzaXplOyBpKyspIHsKKworCQkJLy8gR2V0IHRoZSBuZXh0IGNvdW50cnkgaW4gdGhlIGxpc3QuCisJCQlTdHJpbmcgZmlsZSA9IHRhcmdldExpc3QuZ2V0KGkpLnRyaW0oKTsKKworCQkJLy8gQW4gaW5kZXggZm9yIHVua253b24gb3Igbi5hLiBlbnRyaWVzCisJCQlpbnQgdW5rQ291bnRlciA9IDE7CisKKwkJCS8vIE9wZW4gdGhlIGRhdGEgc291cmNlIGZpbGUgZm9yIHRoaXMgY291bnRyeS4KKwkJCUJ1ZmZlcmVkUmVhZGVyIHJlYWRlciA9IEdlblV0aWxzLm9wZW5SZWFkZXIoZmlsZSk7CisJCQlTeXN0ZW0ub3V0CisJCQkJCS5wcmludGxuKCJcdFx0PDw8PCBOQU1FIEdFTkVSQVRPUiAtLSBQcm9jZXNzaW5nIGNvdW50cnkgOiAiICsgZmlsZSArICIgPj4+PiIpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKKwkJCXRyeSB7CisKKwkJCQlpZiAocmVhZGVyICE9IG51bGwpIHsKKworCQkJCQlTdHJpbmcgYnVmZmVyID0gbnVsbDsKKwkJCQkJLy8gRGVzY3JpYmVzIGxldmVsCisJCQkJCS8vIG9mIGRhdGEgd2UKKwkJCQkJLy8gYXJlIG5vdyBwcm9jZXNzaW5nIDogTEVWRUwwLCBMRVZFTDEsIG9yIExFVkVMMi4KKwkJCQkJaW50IGxldmVsID0gLTE7CisJCQkJCS8vIFJlY29yZCB0aGUgcHJldmlvdXMgbGV2ZWwuCisJCQkJCWludCBvbGRsZXZlbCA9IGxldmVsIC0gMTsKKwkJCQkJLy8gV2UgdGFrZSBhIGNodW5rIG9mIHRoZSBkYXRhIFtCVUZGRVJfTUlOLEJVRkZFUl9NQVhdIHRvCisJCQkJCS8vIG1ha2UgcHJvY2Vzc2luZyBtb3JlCisJCQkJCS8vIGVmZmljaWVudCwgd2UgZG9udCBuZWVkIGFsbCBvZiBpdC4KKwkJCQkJaW50IEJVRkZFUl9NSU4gPSAwOworCQkJCQlpbnQgQlVGRkVSX01BWCA9IDEyMDsKKwkJCQkJLy8gU3RyaW5nIHVzZWQgdG8gaWdub3JlIHJlcGVhdGVkIGVudHJpZXMuCisJCQkJCUxpc3Q8U3RyaW5nPiBlbnRyeUxpc3QgPSBudWxsOworCisJCQkJCXdoaWxlIChHZW5VdGlscy5FT0YoYnVmZmVyID0gcmVhZGVyLnJlYWRMaW5lKCkpICE9IHRydWUpIHsKKworCQkJCQkJLy8gTWFrZSBzdXJlIHRoYXQgd2UgbWFyayBhbGwgdW5rbm93biBkYXRhLgorCQkJCQkJYnVmZmVyID0gYnVmZmVyLnJlcGxhY2UoIiwsIiwgIixVTktOT1dOLCIpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKKworCQkJCQkJU3RyaW5nW10gaXRlbXMgPSBHZW5VdGlscworCQkJCQkJCQkuZXh0cmFjdChidWZmZXIubGVuZ3RoKCkgPCBCVUZGRVJfTUFYID8gYnVmZmVyCisJCQkJCQkJCQkJOiBidWZmZXIuc3Vic3RyaW5nKEJVRkZFUl9NSU4sCisJCQkJCQkJCQkJCQlCVUZGRVJfTUFYKSk7CisKKwkJCQkJCS8vIEdldCB0aGUgSVNPMzE2Ni0xIGluZm8gZm9yIHRoaXMgY291bnRyeQorCQkJCQkJaWYgKGlzb0NvZGUgPT0gbnVsbCkgeworCQkJCQkJCWlzb0NvZGUgPSBHZW5VdGlscy5nZXRJU09Db2RlKAorCQkJCQkJCQkJaXRlbXNbSVNPRGF0YS5DT1VOVFJZX05BTUVdLCBjb2RlTGlzdCk7CisJCQkJCQl9CisKKwkJCQkJCS8vIEdldCB0aGUgbGV2ZWwgb2YgdGhlIGRhdGEgd2UgYXJlIHByb2Nlc3NpbmcuCisJCQkJCQlsZXZlbCA9IEdlblV0aWxzLmdldERhdGFMZXZlbChpdGVtcyk7CisKKwkJCQkJCWlmIChsZXZlbCAhPSAwICYmIGlzbzJMaXN0ICE9IG51bGwpIHsKKwkJCQkJCQkvLyBMb2FkIHRoZSBJU08gMzE2Ni0yIG9iamVjdHMgZm9yIHRoaXMgY291bnRyeQorCQkJCQkJCWlzbzJMaXN0ID0gR2VuVXRpbHMubG9hZElTTzIoaXNvMzE2Nl8yKTsKKwkJCQkJCX0KKworCQkJCQkJLy8gSWYgdGhlIGRpcmVjdG9yeSBkb2VzIG5vdCBleGlzdCBmb3IgdGhpcyBjb3VudHJ5LAorCQkJCQkJLy8gY3JlYXRlIGl0IHVzaW5nIElTTyBhbHBoYTMgY29kZS4KKwkJCQkJCUZpbGUgY291bnRyeURpciA9IG5ldyBGaWxlKG91dHB1dERpcgorCQkJCQkJCQkrIGlzb0NvZGUuZ2V0QWxwaGEzKCkpOworCisJCQkJCQlpZiAoY291bnRyeURpciAhPSBudWxsICYmIGNvdW50cnlEaXIuZXhpc3RzKCkgPT0gZmFsc2UpIHsKKwkJCQkJCQkvLyBEaXJlY3RvcnkgZG9lcyBub3QgZXhpc3QuIENyZWF0ZSBpdC4KKwkJCQkJCQljb3VudHJ5RGlyLm1rZGlyKCk7CisJCQkJCQl9CisKKwkJCQkJCS8vIENyZWF0ZSBhbmQgb3BlbiB0aGUgbmV3IGZpbGUuCisJCQkJCQlpZiAocHJvcGVydGllc0ZpbGUgPT0gbnVsbCkgeworCQkJCQkJCS8vIENyZWF0ZSB0aGUgZmlsZSBuYW1lIGZvciB0aGUgbmV3IHByb3BlcnRpZXMuZmlsZS4KKwkJCQkJCQlmaWxlTmFtZSA9IGNvdW50cnlEaXIgKyAiXFwiICsgaXNvQ29kZS5nZXRBbHBoYTMoKSAvLyROT04tTkxTLTEkCisJCQkJCQkJCQkrICJfbmFtZXMucHJvcGVydGllcyI7IC8vJE5PTi1OTFMtMSQKKwkJCQkJCQkvLyBDcmVhdGUgdG5lIG5ldyBwcm9wZXJ0aWVzLmZpbGUgZm9yIHRoaXMgY291bnRyeS4KKwkJCQkJCQlwcm9wZXJ0aWVzRmlsZSA9IEdlblV0aWxzLm9wZW5Xcml0ZXIoZmlsZU5hbWUpOworCQkJCQkJfQorCisJCQkJCQkvLyBUaGlzIHZhcmlhYmxlIGluZGljYXRlcyBhIHRyYW5zaXRpb24gaW4gb3VyIGRhdGEKKwkJCQkJCS8vIHByb2Nlc3NpbmcKKwkJCQkJCWJvb2xlYW4gdHJhbnNpdGlvbiA9IChsZXZlbCAhPSBvbGRsZXZlbCkgPyB0cnVlIDogZmFsc2U7CisKKwkJCQkJCS8vIFZhcmlhYmxlIHVzZWQgdG8gaG9sZCB0aGUgZm9ybWF0dGVkIG91dHB1dCBkYXRhLgorCQkJCQkJU3RyaW5nIGRhdGEgPSBudWxsOworCisJCQkJCQkvLyBUaGUgY3VycmVudCBlbnRpdHkgd2UgYXJlIGRlYWxpbmcgd2l0aC4KKwkJCQkJCS8vIEJhc2VkIG9uIGl0cyBhZG1pbiBsZXZlbCBpdCBjYW4gYmUgYSBjb3VudHJ5LCBhCisJCQkJCQkvLyBjb3VudHksIGV0YzsKKwkJCQkJCVN0cmluZyBjdXJyZW50ID0gbnVsbDsKKworCQkJCQkJLy8gV2UgaGF2ZSBzd2l0Y2hlZCB0byBhIGRpZmZlcmVudCBkYXRhIGxldmVsIChpLGUsCisJCQkJCQkvLyBhZG1pbiAwIHRvIGFkbWluIDEpCisJCQkJCQlpZiAodHJhbnNpdGlvbiA9PSB0cnVlKSB7CisJCQkJCQkJLy8gS2VlcCB0cmFjayBvZiBwcmV2aW91cyBsZXZlbCBpbiBvcmRlciB0byBkZXRlY3QKKwkJCQkJCQkvLyB0cmFuc2l0aW9ucy4KKwkJCQkJCQlvbGRsZXZlbCA9IGxldmVsOworCQkJCQkJCS8vIFJlc2V0IG91ciByZXBlYXRlZCBoaXN0b3J5CisJCQkJCQkJaWYgKGVudHJ5TGlzdCAhPSBudWxsKSB7CisJCQkJCQkJCWVudHJ5TGlzdC5jbGVhcigpOworCQkJCQkJCX0KKwkJCQkJCQllbnRyeUxpc3QgPSBuZXcgQXJyYXlMaXN0PFN0cmluZz4oKTsKKworCQkJCQkJCS8vIFJlc2V0IGNvdW50ZXIgb2YgVU5LTk9XTiBhbmQgTi5BLiBlbnRyaWVzLgorCQkJCQkJCXVua0NvdW50ZXIgPSAxOworCisJCQkJCQkJaWYgKGxldmVsID09IDApIHsKKwkJCQkJCQkJLy8gQWRkIGFuIGV4cGxhbmF0aW9uIG9mIHRoZSBrZXkgZm9ybWF0IGluIG91cgorCQkJCQkJCQkvLyBkYXRhIGZpbGVzLgorCQkJCQkJCQlkYXRhID0gR2VuVXRpbHMuZ2V0S2V5Rm9ybWF0RXhwbGFuYXRpb24oKTsKKwkJCQkJCQkJLy8gQWRkIHRoZSBoZWFkZXIuCisJCQkJCQkJCWRhdGEgKz0gZ2V0SGVhZGVyKGlzb0NvZGUsIGxldmVsKTsKKwkJCQkJCQl9IGVsc2UgeworCQkJCQkJCQkvLyBBZGQgdGhlIGhlYWRlcgorCQkJCQkJCQlkYXRhID0gZ2V0SGVhZGVyKGlzb0NvZGUsIGxldmVsKTsKKwkJCQkJCQl9CisKKwkJCQkJCQlHZW5VdGlscy5hZGREYXRhKHByb3BlcnRpZXNGaWxlLCBkYXRhKTsKKwkJCQkJCQlkYXRhID0gbnVsbDsKKwkJCQkJCX0KKworCQkJCQkJc3dpdGNoIChsZXZlbCkgeworCisJCQkJCQljYXNlIERhdGFUeXBlcy5MRVZFTF8wOgorCisJCQkJCQkJLy8gSGFuZGxlIGxldmVsIDAgZGF0YSBkaWZmZXJlbnQgdGhhbiB0aGUgb3RoZXIKKwkJCQkJCQkvLyBhZG1pbiBsZXZlbHMuCisJCQkJCQkJaWYgKHRyYW5zaXRpb24gPT0gdHJ1ZSkgeworCQkJCQkJCQlkYXRhID0gaXRlbXNbSVNPRGF0YS5BTFBIQTNfQ09ERV0gKyAiID0gIiAvLyROT04tTkxTLTEkCisJCQkJCQkJCQkJKyBpdGVtc1tJU09EYXRhLkNPVU5UUllfTkFNRV0gKyAiXG4iOyAvLyROT04tTkxTLTEkCisJCQkJCQkJCUdlblV0aWxzLmFkZERhdGEocHJvcGVydGllc0ZpbGUsIGRhdGEpOworCQkJCQkJCX0KKwkJCQkJCQljb250aW51ZTsKKworCQkJCQkJY2FzZSBEYXRhVHlwZXMuTEVWRUxfMToKKwkJCQkJCQljdXJyZW50ID0gaXRlbXNbSVNPRGF0YS5BRE1JTjFfTkFNRV0udG9VcHBlckNhc2UoKTsKKwkJCQkJCQlicmVhazsKKworCQkJCQkJY2FzZSBEYXRhVHlwZXMuTEVWRUxfMjoKKwkJCQkJCQljdXJyZW50ID0gaXRlbXNbSVNPRGF0YS5BRE1JTjJfTkFNRV0udG9VcHBlckNhc2UoKTsKKwkJCQkJCQlicmVhazsKKworCQkJCQkJfSAvLyBTd2l0Y2gKKworCQkJCQkJLy8gSGFuZGxlIFVOS05PV04gYW5kIE4uQS4gZW50cmllcyBkaWZmZXJlbnRseS4KKwkJCQkJCWlmIChjdXJyZW50LmVxdWFscygiVU5LTk9XTiIpIHx8IGN1cnJlbnQuZXF1YWxzKCJOLkEuIikpIHsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCisKKwkJCQkJCQlpZiAobGV2ZWwgPT0gMSkgeworCQkJCQkJCQljdXJyZW50ID0gaXNvQ29kZS5nZXRBbHBoYTIoKSArICItVU5LLSIgLy8kTk9OLU5MUy0xJAorCQkJCQkJCQkJCSsgU3RyaW5nLnZhbHVlT2YodW5rQ291bnRlcisrKTsKKworCQkJCQkJCX0gZWxzZSB7CisJCQkJCQkJCS8vIExldmVsIDIgZGF0YS4KKwkJCQkJCQkJY3VycmVudCA9IGlzb0NvZGUuZ2V0QWxwaGEzKCkgKyAiLkwyLiIgLy8kTk9OLU5MUy0xJAorCQkJCQkJCQkJCSsgU3RyaW5nLnZhbHVlT2YodW5rQ291bnRlcisrKTsKKwkJCQkJCQl9CisJCQkJCQl9CisKKwkJCQkJCS8vIFZlcmlmeSBmb3IgcmVwZWF0ZWQgZW50cmllcyAtLSBhdnZvaWQgZHVwbGNhdGVzCisJCQkJCQlzd2l0Y2ggKGxldmVsKSB7CisKKwkJCQkJCWNhc2UgTEVWRUxfMToKKwkJCQkJCQlpZiAoR2VuVXRpbHMuaXNSZXBlYXRlZChjdXJyZW50LCBlbnRyeUxpc3QpID09IHRydWUpIHsKKwkJCQkJCQkJLy8gRHVwbGljYXRlZCwgaWdub3JlLgorCQkJCQkJCQljb250aW51ZTsKKwkJCQkJCQl9CisJCQkJCQkJLy8gUmVtZW1iZXIgdGhpcyBlbnRpdHkgdG8gYXZvaWQgZHVwbGljYXRlcy4KKwkJCQkJCQllbnRyeUxpc3QuYWRkKGN1cnJlbnQpOworCQkJCQkJCWJyZWFrOworCisJCQkJCQljYXNlIExFVkVMXzI6CisJCQkJCQkJaWYgKEdlblV0aWxzLmlzUmVwZWF0ZWQoaXRlbXNbSVNPRGF0YS5BRE1JTjFfTkFNRV0KKwkJCQkJCQkJCSsgY3VycmVudCwgZW50cnlMaXN0KSA9PSB0cnVlKSB7CisJCQkJCQkJCS8vIER1cGxpY2F0ZWQsIGlnbm9yZS4KKwkJCQkJCQkJY29udGludWU7CisJCQkJCQkJfQorCQkJCQkJCS8vIFJlbWVtYmVyIHRoaXMgZW50aXR5IHRvIGF2b2lkIGR1cGxpY2F0ZXMuCisJCQkJCQkJZW50cnlMaXN0LmFkZChpdGVtc1tJU09EYXRhLkFETUlOMV9OQU1FXSArIGN1cnJlbnQpOworCQkJCQkJCWJyZWFrOworCisJCQkJCQl9CisKKwkJCQkJCVN0cmluZyBkZXNjcmlwdG9yID0gbnVsbDsKKworCQkJCQkJLy8gV2UgZ2V0IHRoZSBkZXNjcmlwdG9yIGZvciBhZG1pbmlzdHJhdGlvbiBlbnRpdGllcworCQkJCQkJLy8gZGlmZmVyZW50bHkgYmFzZWQgb24gaXRzIGxldmVsLgorCisJCQkJCQlpZiAobGV2ZWwgPT0gMikgeworCisJCQkJCQkJaWYgKGxleDFEYXRhU2V0ID09IG51bGwgJiYgbGV4MkRhdGFTZXQgPT0gbnVsbCkgeworCisJCQkJCQkJCS8vIENvbXBvc2UgdGhlIGZpbGUgbmFtZXMgZm9yIHRoZSBsZXggZmlsZXMgZm9yCisJCQkJCQkJCS8vIHRoaXMKKwkJCQkJCQkJLy8gY291bnRyeS4KKwkJCQkJCQkJbGV4QWRtaW4xRmlsZSA9IGxleERpciArIGlzb0NvZGUuZ2V0QWxwaGEzKCkKKwkJCQkJCQkJCQkrICJcXCIgKyBpc29Db2RlLmdldEFscGhhMygpOyAvLyROT04tTkxTLTEkCisJCQkJCQkJCWxleEFkbWluMkZpbGUgPSBsZXhBZG1pbjFGaWxlOworCQkJCQkJCQlsZXhBZG1pbjFGaWxlICs9ICJfQURNSU4xX0xFWC50eHQiOyAvLyROT04tTkxTLTEkCisJCQkJCQkJCWxleEFkbWluMkZpbGUgKz0gIl9BRE1JTjJfTEVYLnR4dCI7IC8vJE5PTi1OTFMtMSQKKworCQkJCQkJCQkvLyBMb2FkIHRoZSBsZXgxIGFuZCBsZXgyIGZpbGVzIGZvciB0aGlzCisJCQkJCQkJCS8vIGNvdW50cnkuCisJCQkJCQkJCWxleDFEYXRhU2V0ID0gR2VuVXRpbHMKKwkJCQkJCQkJCQkucG9wdWxhdGVMaXN0KGxleEFkbWluMUZpbGUpOworCQkJCQkJCQlsZXgyRGF0YVNldCA9IEdlblV0aWxzCisJCQkJCQkJCQkJLnBvcHVsYXRlTGlzdChsZXhBZG1pbjJGaWxlKTsKKworCQkJCQkJCQkvLyBDcmVhdGUgYSBtZXRob2QgdG8gc2VhcmNoIGZvciBhbiBpdGVtIG9uIGEKKwkJCQkJCQkJLy8gbGlzdCBvZiBsZXggZGF0YSBvYmplY3RzLgorCQkJCQkJCQlsZXgxTGlzdCA9IEdlblV0aWxzLmNyZWF0ZUxleDFMaXN0KGxleDFEYXRhU2V0KTsKKwkJCQkJCQkJbGV4Mkxpc3QgPSBHZW5VdGlscy5jcmVhdGVMZXgyTGlzdChsZXgyRGF0YVNldCk7CisKKwkJCQkJCQl9CisKKwkJCQkJCQkvLyBDb21wb3NlIHRoZSBsZXZlbDIgZGVzY3JpcHRvciB1c2luZyB0aGUgbGV4IGRhdGE6CisKKwkJCQkJCQkvLyBTVEVQIDE6IERvIGEgbG9vayB1cCBpbiB0aGUgbGV4IDIgbGlzdHMuCisKKwkJCQkJCQkvLyBHZXQgdGhlIGxleCAyIG9iamVjdCBmb3IgdGhlIGN1cnJlbnQgZW50cnkuCisJCQkJCQkJTGV4Mk9iaiBsZXgyQ3VycmVudCA9IEdlblV0aWxzLmxleDJMb29rdXAobGV4Mkxpc3QsCisJCQkJCQkJCQlpdGVtc1tJU09EYXRhLkFETUlOMV9OQU1FXSwgY3VycmVudCk7CisKKwkJCQkJCQkvLyBHZXQgdGhlIGxleCAxIG9iamVjdCB0byB3aGljaCBsZXgyQ3VycmVudCBiZWxvbmdzCisJCQkJCQkJLy8gdG8uCisJCQkJCQkJTGV4MU9iaiBsZXgxQ3VycmVudCA9IEdlblV0aWxzLmxleDFMb29rdXAobGV4MUxpc3QsCisJCQkJCQkJCQlsZXgyQ3VycmVudC5nZXRBZG1pbjEoKSk7CisKKwkJCQkJCQkvLyBTVEVQIDI6IHBpZWNlIHRvZ2V0aGVyIHRoZSBJRCB1c2luZyB0aGUKKwkJCQkJCQkvLyBwcm9wZXIgbGV4IG9iamVjdHMgOiB0aGUgVVNBIGlzIGEgc3BlY2lhbAorCQkJCQkJCS8vIGNhc2UKKwkJCQkJCQlpZiAobGV4MUN1cnJlbnQuZ2V0RGVzY3JpcHRvcigpLmNvbnRhaW5zKCJVUy0iKSkgeyAvLyROT04tTkxTLTEkCisJCQkJCQkJCWRlc2NyaXB0b3IgPSBsZXgxQ3VycmVudC5nZXREZXNjcmlwdG9yKCkKKwkJCQkJCQkJCQkrICItIiAvLyROT04tTkxTLTEkCisJCQkJCQkJCQkJKyBsZXgxQ3VycmVudC5nZXRGb3JtYXR0ZWRJbmRleCgpCisJCQkJCQkJCQkJKyBsZXgyQ3VycmVudC5nZXRGb3JtYXR0ZWRJbmRleFVTQSgpOworCQkJCQkJCX0gZWxzZSB7CisJCQkJCQkJCWRlc2NyaXB0b3IgPSBsZXgxQ3VycmVudC5nZXREZXNjcmlwdG9yKCkgKyAiLSIgLy8kTk9OLU5MUy0xJAorCQkJCQkJCQkJCSsgIkciICsgbGV4MUN1cnJlbnQuZ2V0Rm9ybWF0dGVkSW5kZXgoKSAvLyROT04tTkxTLTEkCisJCQkJCQkJCQkJKyBsZXgyQ3VycmVudC5nZXRGb3JtYXR0ZWRJbmRleCgpOworCisJCQkJCQkJCS8vIEFkZCBzb21lIGNvbW1lbnMgdG8gYWxsb3cgcmV2ZXJzZSBlbmdpbmVlcmluZworCQkJCQkJCQkvLyBvcgorCQkJCQkJCQkvLyBiYWNrdHJhY2tpbmcgdGhlIG9yaWdpbiBvZiB0aGlzIGdlbmVyYXRlZCBrZXkKKwkJCQkJCQkJLy8gYXMKKwkJCQkJCQkJLy8gbXVjaCBhcyBwb3NzaWJsZS4KKwkJCQkJCQkJZGF0YSA9ICIjIEdlbmVyYXRlZCBrZXkgZGV0YWlscyA6ICIgLy8kTk9OLU5MUy0xJAorCQkJCQkJCQkJCSsgIiBMZXZlbCAxICggIiAvLyROT04tTkxTLTEkCisJCQkJCQkJCQkJKyBsZXgxQ3VycmVudC5nZXREZXNjcmlwdG9yKCkKKwkJCQkJCQkJCQkrICIgPSAiIC8vJE5PTi1OTFMtMSQKKwkJCQkJCQkJCQkrIGxleDFDdXJyZW50LmdldEFkbWluMSgpCisJCQkJCQkJCQkJKyAiICkuICIgLy8kTk9OLU5MUy0xJAorCQkJCQkJCQkJCSsgIkxldmVsIDIgKCAiIC8vJE5PTi1OTFMtMSQKKwkJCQkJCQkJCQkrIGxleDFDdXJyZW50LmdldEZvcm1hdHRlZEluZGV4KCkKKwkJCQkJCQkJCQkrIGxleDJDdXJyZW50LmdldEZvcm1hdHRlZEluZGV4KCkKKwkJCQkJCQkJCQkrICIgPSAiICsgbGV4MkN1cnJlbnQuZ2V0QWRtaW4yKCkgLy8kTk9OLU5MUy0xJAorCQkJCQkJCQkJCSsgIiApLiBcbiI7IC8vJE5PTi1OTFMtMSQKKwkJCQkJCQl9CisKKwkJCQkJCQlpZiAoY3VycmVudC5jb250YWlucygiLkwyLiIpKSB7IC8vJE5PTi1OTFMtMSQKKwkJCQkJCQkJY3VycmVudCA9IGRlc2NyaXB0b3I7CisJCQkJCQkJfQorCisJCQkJCQl9IGVsc2UgeyAvLyBDb21wb3NlIGRlc2NyaXB0b3IgZm9yIGxldmVsIDEgYW5kIGxldmVsCisJCQkJCQkJLy8gMCBkYXRhLgorCQkJCQkJCS8vIEdldCB0aGUgZGVzY3JpcHRvciBmb3IgdGhpcyBlbnRpdHkuCisJCQkJCQkJZGVzY3JpcHRvciA9IEdlblV0aWxzLmdldElTTzJEZXNjcmlwdG9yKGlzbzJMaXN0LAorCQkJCQkJCQkJY3VycmVudCwgaXNvQ29kZS5nZXRBbHBoYTIoKSk7CisKKwkJCQkJCQkvLyBJZiB3ZSBjYW50IGZpbmQgdGhlIGRlc2NyaXB0b3IsIHRoZW4gbG9vayBpbiB0aGUKKwkJCQkJCQkvLyBmaXggbGlzdC4KKwkJCQkJCQlpZiAoZGVzY3JpcHRvci5lcXVhbHMoY3VycmVudCkgPT0gdHJ1ZSkgeworCQkJCQkJCQkvLyBMb29rIGZvciBhIGRlc2NyaXB0b3IgaW4gdGhlIGZpeCBmaWxlCisJCQkJCQkJCWRlc2NyaXB0b3IgPSBHZW5VdGlscy5nZXRGaXhDb2RlKGNvZGVmaXhMaXN0LAorCQkJCQkJCQkJCWN1cnJlbnQsIGl0ZW1zW0lTT0RhdGEuQ09VTlRSWV9OQU1FXSk7CisKKwkJCQkJCQkJLy8gSWYgdGhlcmUgaXMgbm8gZGVzY3JpcHRvciBzdGlsbCwgZ2VuZXJhdGUKKwkJCQkJCQkJLy8gb25lIQorCQkJCQkJCQlpZiAoZGVzY3JpcHRvci5lcXVhbHMoY3VycmVudCkgPT0gdHJ1ZSkgeworCQkJCQkJCQkJZGVzY3JpcHRvciA9IGlzb0NvZGUuZ2V0QWxwaGEyKCkgKyAiLSIgLy8kTk9OLU5MUy0xJAorCQkJCQkJCQkJCQkrIGN1cnJlbnQ7CisJCQkJCQkJCX0KKworCQkJCQkJCX0KKworCQkJCQkJCS8vIEhhbmRsZSB0aGUgVVNBIGFzIGEgc3BlY2lhbCBjYXNlCisJCQkJCQkJaWYgKGRlc2NyaXB0b3IuY29udGFpbnMoIlVTLSIpKSB7IC8vJE5PTi1OTFMtMSQKKwkJCQkJCQkJZGF0YSA9ICIjIiArIGN1cnJlbnQgKyAiXG4iOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKKwkJCQkJCQl9CisKKwkJCQkJCX0KKworCQkJCQkJLy8gVXRpbExvZ2dlci5sb2dJbmZvcm1hdGlvbigiRGVzY3JpcHRvciBpcyA6ICIgKyBkZXNjcmlwdG9yCisJCQkJCQkvLyArICIgYXQgbGV2ZWwgOiAiICsgbGV2ZWwgKyAiIGZvciAiICsgY3VycmVudCk7CisKKwkJCQkJCWlmIChkYXRhICE9IG51bGwpIHsKKwkJCQkJCQlkYXRhICs9IGRlc2NyaXB0b3IgKyAiID0gIiArIGN1cnJlbnQgKyAiXG4iOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKKwkJCQkJCX0gZWxzZSB7CisJCQkJCQkJZGF0YSA9IGRlc2NyaXB0b3IgKyAiID0gIiArIGN1cnJlbnQgKyAiXG4iOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKKwkJCQkJCX0KKworCQkJCQkJR2VuVXRpbHMuYWRkRGF0YShwcm9wZXJ0aWVzRmlsZSwgZGF0YSk7CisJCQkJCQlkYXRhID0gbnVsbDsKKworCQkJCQl9Ly8gd2hpbGUKKworCQkJCQkvLyBSZXNldCBhbGwgbGV4LXJlbGF0ZWQgaXRlbXMKKwkJCQkJaWYgKGxleDFEYXRhU2V0ICE9IG51bGwpIHsKKwkJCQkJCWxleDFEYXRhU2V0LmNsZWFyKCk7CisJCQkJCQlsZXgxRGF0YVNldCA9IG51bGw7CisJCQkJCX0KKwkJCQkJaWYgKGxleDJEYXRhU2V0ICE9IG51bGwpIHsKKwkJCQkJCWxleDJEYXRhU2V0LmNsZWFyKCk7CisJCQkJCQlsZXgyRGF0YVNldCA9IG51bGw7CisJCQkJCX0KKwkJCQkJaWYgKGxleDFMaXN0ICE9IG51bGwpIHsKKwkJCQkJCWxleDFMaXN0LmNsZWFyKCk7CisJCQkJCQlsZXgxTGlzdCA9IG51bGw7CisJCQkJCX0KKwkJCQkJaWYgKGxleDJMaXN0ICE9IG51bGwpIHsKKwkJCQkJCWxleDJMaXN0LmNsZWFyKCk7CisJCQkJCQlsZXgyTGlzdCA9IG51bGw7CisJCQkJCX0KKworCQkJCQlsZXhBZG1pbjFGaWxlID0gbnVsbDsKKwkJCQkJbGV4QWRtaW4yRmlsZSA9IG51bGw7CisKKwkJCQkJLy8gV2UgZG9udCBuZWVkIHRoZSBJU08gY29kZSBvYmplY3QgZm9yIHRoaXMgY291bnRyeQorCQkJCQkvLyBhbnltb3JlLCB3ZSBhcmUgZG9uZSBwcm9jZXNzaW5nIGl0LgorCQkJCQlpc29Db2RlID0gbnVsbDsKKworCQkJCQkvLyBDbG9zZSBhbGwgb3BlbiByZXNvdXJjZXMuCisJCQkJCXJlYWRlci5jbG9zZSgpOworCisJCQkJCWlmIChwcm9wZXJ0aWVzRmlsZSAhPSBudWxsKSB7CisJCQkJCQlwcm9wZXJ0aWVzRmlsZS5jbG9zZSgpOworCQkJCQkJcHJvcGVydGllc0ZpbGUgPSBudWxsOworCQkJCQkJVXRpbExvZ2dlci5sb2dJbmZvcm1hdGlvbigiXHRcdEdlbmVyYXRlZCA6ICIgKyBmaWxlTmFtZSk7IC8vJE5PTi1OTFMtMSQKKwkJCQkJCWZpbGVOYW1lID0gbnVsbDsKKwkJCQkJfQorCisJCQkJCS8vIFJ1biBnYXJiYWdlIGNvbGxlY3Rpb24KKwkJCQkJLy9TeXN0ZW0uZ2MoKTsKKwkJCQl9CisKKwkJCX0gY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKKwkJCQllLnByaW50U3RhY2tUcmFjZSgpOworCQkJfQorCisJCX0gLy8gZm9yCisKKwl9CisKKwkvKioKKwkgKiBHZW5lcmF0ZSB0aGUgaGVhZGVyIGNvbW1lbnQgZm9yIHRoaXMgZmlsZS4KKwkgKiAKKwkgKiBAcGFyYW0gY29kZQorCSAqICAgICAgICAgICAgSVNPIDMxNjYtMSBDb2RlCisJICogCisJICogQHBhcmFtIGxldmVsCisJICogICAgICAgICAgICB0aGUgYWRtaW4gbGV2ZWwKKwkgKiAKKwkgKiBAcmV0dXJuIGEgaGVhZGVyIGNvbW1lbnQgZm9yIHRoZSBuZXcgZmlsZS4KKwkgKi8KKwlwcm90ZWN0ZWQgU3RyaW5nIGdldEhlYWRlcihJU09Db2RlMSBjb2RlLCBpbnQgbGV2ZWwpIHsKKworCQlTdHJpbmcgaGVhZGVyID0gbnVsbDsKKworCQkvLyBoZWFkZXIgPSBHZW5VdGlscy5nZXRVTlBvbGljeSgpOworCisJCXN3aXRjaCAobGV2ZWwpIHsKKworCQljYXNlIERhdGFUeXBlcy5MRVZFTF8wOgorCQkJaGVhZGVyID0gIiMgIiArIGNvZGUuZ2V0TmFtZSgpICsgIl9uYW1lcy5wcm9wZXJ0aWVzICI7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAorCQkJLy8gaGVhZGVyICs9IENhbGVuZGFyLmdldEluc3RhbmNlKCkuZ2V0VGltZSgpICsgIlxuIjsKKwkJCS8vIGhlYWRlciArPSBHZW5VdGlscy5nZXRDb3B5cmlnaHQoKTsKKworCQkJaGVhZGVyICs9ICIjIExldmVsIDBcbiI7IC8vJE5PTi1OTFMtMSQKKwkJCS8vIGhlYWRlciArPSBjb2RlLmdldEFscGhhMygpICsgIiA9ICIgKyBjb2RlLmdldE5hbWUoKSArICJcblxuIjsKKwkJCWJyZWFrOworCisJCWNhc2UgRGF0YVR5cGVzLkxFVkVMXzE6CisJCQloZWFkZXIgPSAiXG4jIExldmVsIDEgKGFkbWluIDEgPSBlLmcuLCBzdGF0ZSlcbiI7IC8vJE5PTi1OTFMtMSQKKwkJCWJyZWFrOworCisJCWNhc2UgRGF0YVR5cGVzLkxFVkVMXzI6CisJCQloZWFkZXIgPSAiXG4jIExldmVsIDIgKGFkbWluIDIgPSBlLmcuLCBjb3VudHJ5KVxuIjsgLy8kTk9OLU5MUy0xJAorCQkJYnJlYWs7CisKKwkJfQorCQlyZXR1cm4gaGVhZGVyOworCX0KKworCS8qKgorCSAqIE1haW4gZXhlY3V0aW9uIGVudHJ5IHBvaW50LgorCSAqIAorCSAqIEBwYXJhbSBhcmdzCisJICovCisJcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgeworCQkvLyBmaW5hbCBpbnQgSVNPXzMxNjZfMSA9IDA7CisJCS8vIGZpbmFsIGludCBJU09fMzE2Nl8yID0gMTsKKwkJLy8gZmluYWwgaW50IEZJWF9GSUxFID0gMjsKKwkJLy8gZmluYWwgaW50IFRBUkdFVF9MSVNUID0gMzsKKwkJLy8gZmluYWwgaW50IExFWF9ESVIgPSA0OworCQkvLyBmaW5hbCBpbnQgT1VUUFVUX0RJUiA9IDU7CisJCS8vIGZpbmFsIGludCBQQVJBTVMgPSA2OworCQkvLworCQkvLyBpZiAoYXJncy5sZW5ndGggPCBQQVJBTVMpIHsKKwkJLy8gVXRpbExvZ2dlci5sb2dJbmZvcm1hdGlvbigiLS1Xcm9uZyBhcmd1bWVudHMtLSIpOyAvLyROT04tTkxTLTEkCisJCS8vIFN5c3RlbS5vdXQKKwkJLy8gLnByaW50bG4oIlx0VG8gcnVuLCBwbGVhc2UgcHJvdmlkZSB0aGUgZm9sbG93aW5nIGFyZ3VtZW50cyA6ICIpOworCQkvLyAvLyROT04tTkxTLTEkCisJCS8vIFV0aWxMb2dnZXIubG9nSW5mb3JtYXRpb24oIlx0XHQgSVNPIDMxNjYtMSBmaWxlIik7IC8vJE5PTi1OTFMtMSQKKwkJLy8gVXRpbExvZ2dlci5sb2dJbmZvcm1hdGlvbigiXHRcdCBJU08gMzE2Ni0yIGZpbGUiKTsgLy8kTk9OLU5MUy0xJAorCQkvLyBVdGlsTG9nZ2VyLmxvZ0luZm9ybWF0aW9uKCJcdFx0IElTTyBmaXggZmlsZSIpOyAvLyROT04tTkxTLTEkCisJCS8vIFV0aWxMb2dnZXIubG9nSW5mb3JtYXRpb24oIlx0XHQgVGFyZ2V0IGNvdW50cmllcyBmaWxlIik7IC8vJE5PTi1OTFMtMSQKKwkJLy8gVXRpbExvZ2dlci5sb2dJbmZvcm1hdGlvbigiXHRcdCBMZXhpY29ncmFwaGljIHNvcnRpbmcgZGlyZWN0b3J5Iik7CisJCS8vIC8vJE5PTi1OTFMtMSQkCisJCS8vIFV0aWxMb2dnZXIubG9nSW5mb3JtYXRpb24oIlx0XHQgT3V0cHV0IGRpcmVjdG9yeSIpOyAvLyROT04tTkxTLTEkCisJCS8vIHJldHVybjsKKwkJLy8gfQorCQkvLworCQkvLyBOYW1lR2VuZXJhdG9yIGdlbiA9IG5ldyBOYW1lR2VuZXJhdG9yKGFyZ3NbSVNPXzMxNjZfMV0sCisJCS8vIGFyZ3NbSVNPXzMxNjZfMl0sIGFyZ3NbRklYX0ZJTEVdLCBhcmdzW1RBUkdFVF9MSVNUXSwKKwkJLy8gYXJnc1tMRVhfRElSXSwgYXJnc1tPVVRQVVRfRElSXSk7CisJCS8vIGdlbi5ydW4oKTsKKworCQlmaW5hbCBpbnQgQ09ORklHX0ZJTEUgPSAwOworCQlmaW5hbCBpbnQgUEFSQU1TID0gMTsKKworCQlpZiAoYXJncy5sZW5ndGggPCBQQVJBTVMpIHsKKwkJCVV0aWxMb2dnZXIubG9nSW5mb3JtYXRpb24oIlx0XHQtLVdyb25nIGFyZ3VtZW50cy0tIik7IC8vJE5PTi1OTFMtMSQKKwkJCVN5c3RlbS5vdXQKKwkJCQkJLnByaW50bG4oIlx0XHRUbyBydW4sIHBsZWFzZSBwcm92aWRlIHRoZSBmb2xsb3dpbmcgYXJndW1lbnQocykgOiAiKTsgLy8kTk9OLU5MUy0xJAorCQkJVXRpbExvZ2dlci5sb2dJbmZvcm1hdGlvbigiXHRcdFx0IENvbmZpZ3VyYXRpb24gZmlsZSIpOyAvLyROT04tTkxTLTEkCisJCQlTeXN0ZW0uZXhpdCgxKTsKKwkJfQorCisJCU5hbWVHZW5lcmF0b3IgZ2VuID0gbmV3IE5hbWVHZW5lcmF0b3IoYXJnc1tDT05GSUdfRklMRV0pOworCQlnZW4ucnVuKCk7CisKKwl9CisKK30KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3NyYy9vcmcvZWNsaXBzZS9zdGVtL3V0aWxpdHkvZ2VuZXJhdG9ycy9Ob2RlRGF0YUdlbmVyYXRvci5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdXRpbGl0eS9nZW5lcmF0b3JzL05vZGVEYXRhR2VuZXJhdG9yLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzE4MWMyMQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3NyYy9vcmcvZWNsaXBzZS9zdGVtL3V0aWxpdHkvZ2VuZXJhdG9ycy9Ob2RlRGF0YUdlbmVyYXRvci5qYXZhCkBAIC0wLDAgKzEsODE4IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS5nZW5lcmF0b3JzOworCitpbXBvcnQgamF2YS5pby5CdWZmZXJlZFJlYWRlcjsKK2ltcG9ydCBqYXZhLmlvLkZpbGU7CitpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLmlvLlByaW50V3JpdGVyOworaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7CitpbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7CitpbXBvcnQgamF2YS51dGlsLkhhc2hTZXQ7CitpbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOworaW1wb3J0IGphdmEudXRpbC5MaXN0OworaW1wb3J0IGphdmEudXRpbC5TZXQ7CitpbXBvcnQgamF2YS51dGlsLlN0cmluZ1Rva2VuaXplcjsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcworICogcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZgorICogdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzCisgKiBhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqIAorICogQ29udHJpYnV0b3JzOiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKgorICogU1RFTSBJSSBEYXRhIE1pZ3JhdGlvbi9HZW5lcmF0aW9uIFV0aWxpdGllcyAtLSBUaGlzIGlzIGEgdXRpbGl0eSBjbGFzcyB0aGF0CisgKiBnZW5lcmF0ZXMgdGhlIG5vZGUucHJvcGVydGllcyBmaWxlcyBmb3IgYWxsIGNvdW50cmllcy4KKyAqIAorICogCisgKiBUbyBjb25maWd1cmUsIHNlZSBjb25maWd1cmF0aW9uIGZpbGUgOgorICogb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L2NvbmZpZ3VyYXRpb24vTm9kZURhdGFHZW5lcmF0b3IuY29uZmlnCisgKiAKKyAqIAorICogVG8gcnVuLCBhZGQgcGF0aCB0byBjb25maWd1cmF0aW9uIGZpbGUgaW4gdGhlIHJ1biBwcm9maWxlIChpLmUuCisgKiBDOlxzdGVtSUlcb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5XGNvbmZpZ3VyYXRpb25cTm9kZURhdGFHZW5lcmF0b3IuY29uZmlnKQorICogCisgKiBTRVQgVk1BUkdTIFRPIDogLVhtczEwMjRtIC1YbXgxMDI0bQorICogCisgKi8KKworcHVibGljIGNsYXNzIE5vZGVEYXRhR2VuZXJhdG9yIHsKKworCXByaXZhdGUgU3RyaW5nIGlzbzMxNjZfMSA9IG51bGw7CisKKwlwcml2YXRlIFN0cmluZyBpc28zMTY2XzIgPSBudWxsOworCisJcHJpdmF0ZSBTdHJpbmcgZml4RmlsZSA9IG51bGw7CisKKwlwcml2YXRlIFN0cmluZyB0YXJnZXRGaWxlID0gbnVsbDsKKworCXByaXZhdGUgU3RyaW5nIGxleERpciA9IG51bGw7CisKKwlwcml2YXRlIFN0cmluZyBvdXRwdXREaXIgPSBudWxsOworCisJcHJpdmF0ZSBTdHJpbmcgd29ya3NwYWNlID0gbnVsbDsKKworCS8qKgorCSAqIExpc3QgZm9yIElTTyAzMTY2LTEgY29kZXMgYW5kIHRhcmdldCBjb3VudHJpZXMuCisJICovCisKKwlMaXN0IHRhcmdldExpc3QgPSBudWxsOworCisJTGlzdCBjb2RlTGlzdCA9IG51bGw7CisKKwlMaXN0IGNvZGVmaXhMaXN0ID0gbnVsbDsKKworCS8qKgorCSAqIEhhc2ggc2V0IGZvciBzdG9yaW5nIHRoZSBzb3VyY2UgVVJMcyByZWxldmFudCB0byBhcmVhIGRhdGEuCisJICovCisJU2V0PFN0cmluZz4gdXJsU2V0ID0gbnVsbDsKKworCS8qKgorCSAqIEhhc2ggbWFwIHRvIGtlZXAgdHJhY2sgb2Ygd2hpY2ggc291cmNlcyB3aWxsIGJlIHNob3duIGNvbW1lbnRlZCBvdXQgYW5kCisJICogd2hpY2ggd2lsbCBhcHBlYXIgYWN0aXZlLgorCSAqLworCUhhc2hNYXA8U3RyaW5nLCBCb29sZWFuPiB1cmxTdGF0dXMgPSBudWxsOworCisJLyoqCisJICogQ29uc3RydWN0b3IgKgorCSAqIAorCSAqIEBwYXJhbSBpc28zMTY2XzEgLQorCSAqICAgICAgICAgICAgZGF0YSBmaWxlIHdpdGggdGhlIElTTzMxNjYtMSBBTFBIQV8yIGFuZCBBTFBIQV8zIGNvZGVzLgorCSAqIEBwYXJhbSBpc28zMTY2XzIgLQorCSAqICAgICAgICAgICAgZmlsZSB3aXRoIHRoZSBJU08zMTY2LTIgZGF0YSB1c2VkIGZvciBnZW5lcmF0aW5nIHRoZSBJRHMuCisJICogQHBhcmFtIGZpeEZpbGUgLQorCSAqICAgICAgICAgICAgZmlsZSBjb250YWluaW5nIG1pc3NpbmcgSVNPMzE2Ni0yIGNvZGVzCisJICogQHBhcmFtIHRhcmdldEZpbGUgLQorCSAqICAgICAgICAgICAgZGF0YSBmaWxlIHdoZXJlIHdlIGZpbmQgYSBsaXN0IG9mIGNvdW50cmllcyBmb3IgZ2VuZXJhdGlvbiBvZgorCSAqICAgICAgICAgICAgdGhlaXIgY29ycmVzcG9uZGluZyBhcmVhLnByb3BlcnRpZXMgZmlsZXMuCisJICogQHBhcmFtIGxleERpcgorCSAqICAgICAgICAgICAgZm9sZGVyIGNvbnRhaW5pbmcgbGV4aWNvZ3JhcGhpY2FsbHkgc29ydGVkIGZpbGVzCisJICogQHBhcmFtIG91dHB1dERpciAtCisJICogICAgICAgICAgICB0aGUgb3V0cHV0IGRpcmVjdG9yeSBmb3IgdGhlIGZpbGVzIGdlbmVyYXRlZC4KKwkgKi8KKwkvLyBwdWJsaWMgTm9kZURhdGFHZW5lcmF0b3IoU3RyaW5nIGlzbzMxNjZfMSwgU3RyaW5nIGlzbzMxNjZfMiwKKwkvLyBTdHJpbmcgZml4RmlsZSwgU3RyaW5nIHRhcmdldEZpbGUsIFN0cmluZyBsZXhEaXIsIFN0cmluZyBvdXRwdXREaXIpIHsKKwkvLyAvLyBTZXQgdmFsdWVzIG9mIGdsb2JhbCB2YXJpYWJsZXMuCisJLy8gdGhpcy5pc28zMTY2XzEgPSBpc28zMTY2XzE7CisJLy8gdGhpcy5pc28zMTY2XzIgPSBpc28zMTY2XzI7CisJLy8gdGhpcy5maXhGaWxlID0gZml4RmlsZTsKKwkvLyB0aGlzLnRhcmdldEZpbGUgPSB0YXJnZXRGaWxlOworCS8vIHRoaXMubGV4RGlyID0gbGV4RGlyOworCS8vIHRoaXMub3V0cHV0RGlyID0gb3V0cHV0RGlyOworCS8vIHRhcmdldExpc3QgPSBudWxsOworCS8vIC8vIFNldCB0aGUgVVJMIElEcyB0aGF0IGFyZSByZWxldmFudCBmb3IgYXJlYSBkYXRhLgorCS8vIGluaXROb2RlRGF0YVVSTFNldCgpOworCS8vIC8vIFNldCB3aGljaCBVUkxzIGFyZSBhY3RpdmUgYW5kIHdoaWNoIG9uZXMgc2hvdWxkIGJlIGNvbW1lbnRlZCBvdXQuCisJLy8gc2V0VVJMU3RhdHVzKCk7CisJLy8JfQorCisJLyoqCisJICogQHBhcmFtIGNvbmZpZ0ZpbGUKKwkgKi8KKwlwdWJsaWMgTm9kZURhdGFHZW5lcmF0b3IoU3RyaW5nIGNvbmZpZ0ZpbGUpIHsKKworCQkvLyBMb2FkIGFsbCBjb25maWd1cmF0aW9uIHZhcmlhYmxlcworCQlIYXNoTWFwPFN0cmluZywgU3RyaW5nPiB2YXJzID0gR2VuVXRpbHMubG9hZENvbmZpZ0ZpbGUoY29uZmlnRmlsZSk7CisKKwkJU2V0PFN0cmluZz4ga2V5cyA9IHZhcnMua2V5U2V0KCk7CisJCUl0ZXJhdG9yIGl0ID0ga2V5cy5pdGVyYXRvcigpOworCQl3aGlsZSAoaXQuaGFzTmV4dCgpKSB7CisJCQlTdHJpbmcgdmFyID0gKFN0cmluZykgaXQubmV4dCgpOworCisJCQkvLyBBc3NpZ24gdmFsdWVzIHRvIGNvbmZpZ3VyYXRpb24gdmFyaWFibGVzIDoKKwkJCWlmICh2YXIuZXF1YWxzKCJXT1JLU1BBQ0UiKSkgeyAvLyROT04tTkxTLTEkCisJCQkJd29ya3NwYWNlID0gdmFycy5nZXQodmFyKTsKKwkJCX0gZWxzZSBpZiAodmFyLmVxdWFscygiSVNPMzE2Nl8xIikpIHsgLy8kTk9OLU5MUy0xJAorCQkJCWlzbzMxNjZfMSA9IHZhcnMuZ2V0KHZhcik7CisJCQl9IGVsc2UgaWYgKHZhci5lcXVhbHMoIklTTzMxNjZfMiIpKSB7IC8vJE5PTi1OTFMtMSQKKwkJCQlpc28zMTY2XzIgPSB2YXJzLmdldCh2YXIpOworCQkJfSBlbHNlIGlmICh2YXIuZXF1YWxzKCJJU09fRklYIikpIHsgLy8kTk9OLU5MUy0xJAorCQkJCWZpeEZpbGUgPSB2YXJzLmdldCh2YXIpOworCQkJfSBlbHNlIGlmICh2YXIuZXF1YWxzKCJUQVJHRVRfTElTVCIpKSB7IC8vJE5PTi1OTFMtMSQKKwkJCQl0YXJnZXRGaWxlID0gdmFycy5nZXQodmFyKTsKKwkJCX0gZWxzZSBpZiAodmFyLmVxdWFscygiTEVYX0RJUiIpKSB7IC8vJE5PTi1OTFMtMSQKKwkJCQlsZXhEaXIgPSB2YXJzLmdldCh2YXIpOworCQkJfSBlbHNlIGlmICh2YXIuZXF1YWxzKCJQUk9QRVJUSUVTX09VVFBVVCIpKSB7IC8vJE5PTi1OTFMtMSQKKwkJCQlvdXRwdXREaXIgPSB2YXJzLmdldCh2YXIpOworCQkJfQorCisJCX0gLy8gd2hpbGUKKworCQkvLyBUaGUgd29ya3NwYWNlIHZhcmlhYmxlIHNob3VsZCBlbmQgd2l0aCBhIHNsYXNoIGNoYXJhY3RlcgorCQlpZiAod29ya3NwYWNlLmVuZHNXaXRoKCJcXCIpID09IGZhbHNlKSB7IC8vJE5PTi1OTFMtMSQKKwkJCXdvcmtzcGFjZSArPSAiXFwiOyAvLyROT04tTkxTLTEkCisJCX0KKworCQlTdHJpbmcgcGF0aCA9IHdvcmtzcGFjZSArIEdlbkNvbnN0YW50cy5QQVJBTVNfRElSOworCisJCS8vIFNldCByZW1haW5pbmcgY29uZmlnIHZhcnMgdXNpbmcgV09SS1NQQUNFICh3b3Jrc3BhY2UgcmVsYXRpdmUpCisJCWlmIChpc28zMTY2XzEgPT0gbnVsbCkgeworCQkJaXNvMzE2Nl8xID0gcGF0aCArIEdlbkNvbnN0YW50cy5JU08zMTY2XzFfRklMRTsKKwkJfQorCQlpZiAoaXNvMzE2Nl8yID09IG51bGwpIHsKKwkJCWlzbzMxNjZfMiA9IHBhdGggKyBHZW5Db25zdGFudHMuSVNPMzE2Nl8yX0ZJTEU7CisJCX0KKwkJaWYgKGZpeEZpbGUgPT0gbnVsbCkgeworCQkJZml4RmlsZSA9IHBhdGggKyBHZW5Db25zdGFudHMuSVNPRklYX0ZJTEU7CisJCX0KKwkJaWYgKHRhcmdldEZpbGUgPT0gbnVsbCkgeworCQkJdGFyZ2V0RmlsZSA9IHBhdGggKyBHZW5Db25zdGFudHMuQ09VTlRSSUVTX0xJU1Q7CisJCX0KKwkJaWYgKGxleERpciA9PSBudWxsKSB7CisJCQlsZXhEaXIgPSBwYXRoICsgR2VuQ29uc3RhbnRzLkxFWF9ESVI7CisJCX0KKwkJaWYgKG91dHB1dERpciA9PSBudWxsKSB7CisJCQlvdXRwdXREaXIgPSB3b3Jrc3BhY2UgKyBHZW5Db25zdGFudHMuUFJPUEVSVElFU19PVVRQVVRfRElSOworCQl9CisKKwkJdGFyZ2V0TGlzdCA9IG51bGw7CisJCS8vIFNldCB0aGUgVVJMIElEcyB0aGF0IGFyZSByZWxldmFudCBmb3IgYXJlYSBkYXRhLgorCQlpbml0Tm9kZURhdGFVUkxTZXQoKTsKKwkJLy8gU2V0IHdoaWNoIFVSTHMgYXJlIGFjdGl2ZSBhbmQgd2hpY2ggb25lcyBzaG91bGQgYmUgY29tbWVudGVkIG91dC4KKwkJc2V0VVJMU3RhdHVzKCk7CisKKwl9CisKKwkvKioKKwkgKiBTZXRzIHRoZSBVUkwgSURzIHJlbGV2YW50IGZvciBhcmVhIGRhdGEuIFdlIGFyZSBvbmx5IGludGVyZXN0ZWQgaW4gVVJMcworCSAqIHdpdGggSUQgPSBESVZBLiBUaGlzIGNhbiBiZSBkaWZmZXJlbnQgZm9yIGRpZmZlcmVudCB0eXBlcyBvZiBkYXRhLiBGb3IKKwkgKiBleGFtcGxlLCBmb3IgcG9wdWxhdGlvbiBkYXRhLCB3ZSBhcmUgaW50ZXJlc3RlZCBvbiBJRCA9IENJQQorCSAqLworCXByb3RlY3RlZCB2b2lkIGluaXROb2RlRGF0YVVSTFNldCgpIHsKKwkJdXJsU2V0ID0gbmV3IEhhc2hTZXQ8U3RyaW5nPigpOworCQl1cmxTZXQuYWRkKG5ldyBTdHJpbmcoIkNJQSIpKTsgLy8kTk9OLU5MUy0xJAorCQl1cmxTZXQuYWRkKG5ldyBTdHJpbmcoIklTTzMxNjZfMSIpKTsgLy8kTk9OLU5MUy0xJAorCQl1cmxTZXQuYWRkKG5ldyBTdHJpbmcoIlVOSVRFRE5BVElPTlMiKSk7IC8vJE5PTi1OTFMtMSQKKwl9CisKKwkvKioKKwkgKiBTZXQgd2hpY2ggVVJMIGFwcGVhcnMgYXMgdW5jb21tZW50ZWQgb3IgQUNUSVZFIGFuZCB3aGljaCBvbmVzIGFwcGVhciBhcworCSAqIGNvbW1lbnRlZCBvdXQgb3IgU0VDT05EQVJZLiBPbmx5IFVSTCBzaG91bGQgYmUgYWN0aXZlLiBBbGwgb3RoZXJzIHNob3VsZAorCSAqIGFwcGVhciBjb21tZW50ZWQuCisJICogCisJICovCisJcHJvdGVjdGVkIHZvaWQgc2V0VVJMU3RhdHVzKCkgeworCQl1cmxTdGF0dXMgPSBuZXcgSGFzaE1hcDxTdHJpbmcsIEJvb2xlYW4+KCk7CisJCS8vIFRoaXMgd2lsbCBiZSB0aGUgYWN0aXZlIFVSTC4KKwkJdXJsU3RhdHVzLnB1dCgiQ0lBIiwgbmV3IEJvb2xlYW4odHJ1ZSkpOyAvLyROT04tTkxTLTEkCisJCS8vIEFsbCBvdGhlciBVUkxzIGFwcGVhciBhcyBjb21tZW50ZWQgb3V0LCBzZWNvbmRhcnkuCisJCXVybFN0YXR1cy5wdXQoIkNJQSIsIG5ldyBCb29sZWFuKGZhbHNlKSk7IC8vJE5PTi1OTFMtMSQKKwkJdXJsU3RhdHVzLnB1dCgiSVNPMzE2Nl8xIiwgbmV3IEJvb2xlYW4oZmFsc2UpKTsgLy8kTk9OLU5MUy0xJAorCQl1cmxTdGF0dXMucHV0KCJVTklURUROQVRJT05TIiwgbmV3IEJvb2xlYW4odHJ1ZSkpOyAvLyROT04tTkxTLTEkCisJfQorCisJLyoqCisJICogVGhpcyBtZXRob2Qgc2V0cyB1cCBhbmQgcnVucyB0aGlzIGdlbmVyYXRvci4KKwkgKiAKKwkgKi8KKwlwdWJsaWMgdm9pZCBydW4oKSB7CisJCS8vIFJlYWQgYW5kIGtlZXAgaW4gbWVtb3J5IGEgbGlzdCBvZiB0aGUgY291bnRyaWVzIHdlIHdhbnQuCisJCXRhcmdldExpc3QgPSBHZW5VdGlscy5wb3B1bGF0ZUxpc3QodGFyZ2V0RmlsZSk7CisKKwkJLy8gUmVhZCBhbmQga2VlcCBpbiBtZW1vcnkgYSBsaXN0IG9mIHRoZSBJU08zMTY2LTEgQUxQSEEyLCBBTFBIQTMsIGFuZAorCQkvLyBudW1lcmljIGNvZGVzLgorCQljb2RlTGlzdCA9IEdlblV0aWxzLnBvcHVsYXRlTGlzdChpc28zMTY2XzEpOworCisJCS8vIFJlYWQgYW5kIGtlZXAgaW4gbWVtb3J5IGEgbGlzdCBvZiB0aGUgbWlzc2luZyBJU08zMTY2LTIgY29kZXMKKwkJY29kZWZpeExpc3QgPSBHZW5VdGlscy5wb3B1bGF0ZUxpc3QoZml4RmlsZSk7CisKKwkJLy8gTm93LCBwcm9jZXNzIGVhY2ggaXRlbSBpbiB0aGUgdGFyZ2V0IGxpc3QuCisJCXByb2Nlc3MoKTsKKworCX0KKworCS8qKgorCSAqIFByb2Nlc3Mgb3VyIGdsb2JhbCBsaXN0IG9mIHRhcmdldCBjb3VudHJpZXMuIEZvciBlYWNoIGNvdW50cnkgaW4gbGlzdCwKKwkgKiBnZW5lcmF0ZSBpdHMgbm9kZS5wcm9wZXJ0aWVzIGZpbGUuCisJICogCisJICovCisJcHJvdGVjdGVkIHZvaWQgcHJvY2VzcygpIHsKKworCQlmaW5hbCBpbnQgTEVWRUxfMSA9IDE7CisJCWZpbmFsIGludCBMRVZFTF8yID0gMjsKKworCQkvLyBBIHdyaXRlciBmb3IgdGhlIG5ldyBmaWxlIHdlIGFyZSBjcmVhdGluZy4KKwkJUHJpbnRXcml0ZXIgcHJvcGVydGllc0ZpbGUgPSBudWxsOworCisJCS8vIE9iamVjdCBob2xkaW5nIElTTzMxNjYtMSByZWxhdGVkIGRhdGEuCisJCUlTT0NvZGUxIGlzb0NvZGUgPSBudWxsOworCisJCS8vIE5hbWUgb2YgdGhlIG5ldyBwcm9wZXJ0aWVzIGZpbGUuCisJCVN0cmluZyBmaWxlTmFtZSA9IG51bGw7CisKKwkJLy8gQSBsaXN0IGZvciBJU08gMzE2Ni0yIG9iamVjdHMKKwkJTGlzdCBpc28yTGlzdCA9IG5ldyBBcnJheUxpc3QoKTsKKworCQkvLyBGaWxlbmFtZXMgZm9yIGxleDEgYW5kIGxleDIgZmlsZXMgZm9yIGEgZ2l2ZW4gY291bnRyeS4KKwkJU3RyaW5nIGxleEFkbWluMUZpbGUgPSBudWxsOworCQlTdHJpbmcgbGV4QWRtaW4yRmlsZSA9IG51bGw7CisKKwkJLy8gTGlzdHMgaG9sZGluZyB0aGUgbGV4MSBhbmQgbGV4MiB2YWx1ZXMuCisJCS8vIE5PVEU6IGxleCB2YWx1ZXMgYXJlIHRoZSBsZXhpY29ncmFwaGljYWxseSBzb3J0ZWQgdmFsdWVzIGZvcgorCQkvLyBhZG1pbmlzdHJhdGlvbiBsZXZlbHMuCisJCUxpc3Q8U3RyaW5nPiBsZXgxRGF0YVNldCA9IG51bGw7CisJCUxpc3Q8U3RyaW5nPiBsZXgyRGF0YVNldCA9IG51bGw7CisKKwkJLy8gTGlzdHMgZm9yIGhvbGRpbmcgbGV4MSBhbmQgbGV4MiBvYmplY3RzIGZvciBhIGdpdmVuIGNvdW50cnkuCisJCUxpc3Q8TGV4MU9iaj4gbGV4MUxpc3QgPSBudWxsOworCQlMaXN0PExleDJPYmo+IGxleDJMaXN0ID0gbnVsbDsKKworCQlpbnQgc2l6ZSA9IHRhcmdldExpc3Quc2l6ZSgpOworCisJCS8vIEl0ZXJhdGUgZm9yIGV2ZXJ5IGNvdW50cnkgYW5kIGNyZWF0ZSBpdHMgbm9kZWRhdGEucHJvcGVydGllcyBmaWxlLgorCQlmb3IgKGludCBpID0gMDsgaSA8IHNpemU7IGkrKykgeworCisJCQkvLyBHZXQgdGhlIG5leHQgY291bnRyeSBpbiB0aGUgbGlzdC4KKwkJCVN0cmluZyBmaWxlID0gKChTdHJpbmcpIHRhcmdldExpc3QuZ2V0KGkpKS50cmltKCk7CisKKwkJCS8vIEFuIGluZGV4IGZvciB1bmtud29uIG9yIG4uYS4gZW50cmllcworCQkJaW50IHVua0NvdW50ZXIgPSAxOworCisJCQkvLyBPcGVuIHRoZSBkYXRhIHNvdXJjZSBmaWxlIGZvciB0aGlzIGNvdW50cnkuCisJCQlCdWZmZXJlZFJlYWRlciByZWFkZXIgPSBHZW5VdGlscy5vcGVuUmVhZGVyKGZpbGUpOworCQkJU3lzdGVtLm91dAorCQkJCQkucHJpbnRsbigiXHRcdDw8PDwgTk9ERSBEQVRBIEdFTkVSQVRPUiAtLSBQcm9jZXNzaW5nIGNvdW50cnkgOiAiICsgZmlsZSArICIgPj4+PiIpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKKwkJCXRyeSB7CisKKwkJCQlpZiAocmVhZGVyICE9IG51bGwpIHsKKworCQkJCQlTdHJpbmcgYnVmZmVyID0gbnVsbDsKKwkJCQkJLy8gRGVzY3JpYmVzIGxldmVsCisJCQkJCS8vIG9mIGRhdGEgd2UKKwkJCQkJLy8gYXJlIG5vdyBwcm9jZXNzaW5nIDogTEVWRUwwLCBMRVZFTDEsIG9yIExFVkVMMi4KKwkJCQkJaW50IGxldmVsID0gLTE7CisJCQkJCS8vIFJlY29yZCB0aGUgcHJldmlvdXMgbGV2ZWwuCisJCQkJCWludCBvbGRsZXZlbCA9IGxldmVsIC0gMTsKKwkJCQkJLy8gV2UgdGFrZSBhIGNodW5rIG9mIHRoZSBkYXRhIFtCVUZGRVJfTUlOLEJVRkZFUl9NQVhdIHRvCisJCQkJCS8vIG1ha2UgcHJvY2Vzc2luZyBtb3JlCisJCQkJCS8vIGVmZmljaWVudCwgd2UgZG9udCBuZWVkIGFsbCBvZiBpdC4KKwkJCQkJaW50IEJVRkZFUl9NSU4gPSAwOworCQkJCQlpbnQgQlVGRkVSX01BWCA9IDEyMDsKKwkJCQkJLy8gU3RyaW5nIHVzZWQgdG8gaWdub3JlIHJlcGVhdGVkIGVudHJpZXMuCisJCQkJCUxpc3Q8U3RyaW5nPiBlbnRyeUxpc3QgPSBudWxsOworCisJCQkJCXdoaWxlIChHZW5VdGlscy5FT0YoYnVmZmVyID0gcmVhZGVyLnJlYWRMaW5lKCkpICE9IHRydWUpIHsKKworCQkJCQkJLy8gTWFrZSBzdXJlIHRoYXQgd2UgbWFyayBhbGwgdW5rbm93biBkYXRhLgorCQkJCQkJYnVmZmVyID0gYnVmZmVyLnJlcGxhY2UoIiwsIiwgIixVTktOT1dOLCIpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKKworCQkJCQkJLy8gVXNlIG9ubHkgcGFydCBvZiB0aGUgYnVmZmVyLCBub3QgYWxsIG9mIGl0IGZvcgorCQkJCQkJLy8gZWZmaWNpZW5jeS4KKwkJCQkJCVN0cmluZ1tdIGl0ZW1zID0gR2VuVXRpbHMKKwkJCQkJCQkJLmV4dHJhY3QoYnVmZmVyLmxlbmd0aCgpIDwgQlVGRkVSX01BWCA/IGJ1ZmZlcgorCQkJCQkJCQkJCTogYnVmZmVyLnN1YnN0cmluZyhCVUZGRVJfTUlOLAorCQkJCQkJCQkJCQkJQlVGRkVSX01BWCkpOworCisJCQkJCQkvLyBHZXQgdGhlIGNvdW50cnkgbmFtZQorCQkJCQkJU3RyaW5nIGNvdW50cnkgPSBpdGVtc1tJU09EYXRhLkNPVU5UUllfTkFNRV07CisKKwkJCQkJCS8vIEdldCB0aGUgSVNPMzE2Ni0xIGluZm8gZm9yIHRoaXMgY291bnRyeQorCQkJCQkJaWYgKGlzb0NvZGUgPT0gbnVsbCkgeworCQkJCQkJCWlzb0NvZGUgPSBHZW5VdGlscy5nZXRJU09Db2RlKGNvdW50cnksIGNvZGVMaXN0KTsKKwkJCQkJCX0KKworCQkJCQkJLy8gR2V0IHRoZSBsZXZlbG9mIHRoZSBkYXRhIHdlIGFyZSBwcm9jZXNzaW5nLgorCQkJCQkJbGV2ZWwgPSBHZW5VdGlscy5nZXREYXRhTGV2ZWwoaXRlbXMpOworCisJCQkJCQlpZiAobGV2ZWwgIT0gMCAmJiBpc28yTGlzdCAhPSBudWxsKSB7CisJCQkJCQkJLy8gTG9hZCB0aGUgSVNPIDMxNjYtMiBvYmplY3RzIGZvciB0aGlzIGNvdW50cnkKKwkJCQkJCQlpc28yTGlzdCA9IEdlblV0aWxzLmxvYWRJU08yKGlzbzMxNjZfMik7CisJCQkJCQl9CisKKwkJCQkJCS8vIFRoaXMgdmFyaWFibGUgaW5kaWNhdGVzIGEgdHJhbnNpdGlvbiBpbiBvdXIgZGF0YQorCQkJCQkJLy8gcHJvY2Vzc2luZworCQkJCQkJYm9vbGVhbiB0cmFuc2l0aW9uID0gKGxldmVsICE9IG9sZGxldmVsKSA/IHRydWUgOiBmYWxzZTsKKworCQkJCQkJLy8gVmFyaWFibGUgdXNlZCB0byBob2xkIHRoZSBmb3JtYXR0ZWQgb3V0cHV0IGRhdGEuCisJCQkJCQlTdHJpbmcgZGF0YSA9IG51bGw7CisKKwkJCQkJCS8vIFRoZSBjdXJyZW50IGVudGl0eSB3ZSBhcmUgZGVhbGluZyB3aXRoLgorCQkJCQkJLy8gQmFzZWQgb24gaXRzIGFkbWluIGxldmVsIGl0IGNhbiBiZSBhIGNvdW50cnksIGEKKwkJCQkJCS8vIGNvdW50eSwgZXRjOworCQkJCQkJU3RyaW5nIGN1cnJlbnQgPSBudWxsOworCisJCQkJCQkvLyBEZXNjcmlwdG9yIGZvciBjdXJyZW50IGVudHJ5LgorCQkJCQkJU3RyaW5nIGRlc2NyaXB0b3IgPSBudWxsOworCisJCQkJCQkvLyBXZSBoYXZlIHN3aXRjaGVkIHRvIGEgZGlmZmVyZW50IGRhdGEgbGV2ZWwgKGksZSwKKwkJCQkJCS8vIGFkbWluIDAgdG8gYWRtaW4gMSkKKwkJCQkJCWlmICh0cmFuc2l0aW9uID09IHRydWUpIHsKKwkJCQkJCQkvLyBLZWVwIHRyYWNrIG9mIHByZXZpb3VzIGxldmVsIGluIG9yZGVyIHRvIGRldGVjdAorCQkJCQkJCS8vIHRyYW5zaXRpb25zLgorCQkJCQkJCW9sZGxldmVsID0gbGV2ZWw7CisJCQkJCQkJLy8gUmVzZXQgb3VyIHJlcGVhdGVkIGhpc3RvcnkKKwkJCQkJCQlpZiAoZW50cnlMaXN0ICE9IG51bGwpIHsKKwkJCQkJCQkJZW50cnlMaXN0LmNsZWFyKCk7CisJCQkJCQkJfQorCQkJCQkJCWVudHJ5TGlzdCA9IG5ldyBBcnJheUxpc3Q8U3RyaW5nPigpOworCisJCQkJCQkJLy8gUmVzZXQgY291bnRlciBvZiBVTktOT1dOIGFuZCBOLkEuIGVudHJpZXMuCisJCQkJCQkJdW5rQ291bnRlciA9IDE7CisJCQkJCQkJaWYgKHByb3BlcnRpZXNGaWxlICE9IG51bGwpIHsKKwkJCQkJCQkJVXRpbExvZ2dlci5sb2dJbmZvcm1hdGlvbigiXHRcdEdlbmVyYXRlZCA6ICIgLy8kTk9OLU5MUy0xJAorCQkJCQkJCQkJCSsgZmlsZU5hbWUpOworCQkJCQkJCQlwcm9wZXJ0aWVzRmlsZS5jbG9zZSgpOworCQkJCQkJCQlwcm9wZXJ0aWVzRmlsZSA9IG51bGw7CisJCQkJCQkJCWZpbGVOYW1lID0gbnVsbDsKKwkJCQkJCQl9CisJCQkJCQl9CisKKwkJCQkJCS8vIElmIHRoZSBkaXJlY3RvcnkgZG9lcyBub3QgZXhpc3QgZm9yIHRoaXMgY291bnRyeSwKKwkJCQkJCS8vIGNyZWF0ZSBpdCB1c2luZyBJU08gYWxwaGEzIGNvZGUuCisJCQkJCQlGaWxlIGNvdW50cnlEaXIgPSBuZXcgRmlsZShvdXRwdXREaXIKKwkJCQkJCQkJKyBpc29Db2RlLmdldEFscGhhMygpKTsKKworCQkJCQkJaWYgKGNvdW50cnlEaXIgIT0gbnVsbCAmJiBjb3VudHJ5RGlyLmV4aXN0cygpID09IGZhbHNlKSB7CisJCQkJCQkJLy8gRGlyZWN0b3J5IGRvZXMgbm90IGV4aXN0LiBDcmVhdGUgaXQuCisJCQkJCQkJY291bnRyeURpci5ta2RpcigpOworCQkJCQkJfQorCisJCQkJCQkvLyBDcmVhdGUgYW5kIG9wZW4gdGhlIG5ldyBmaWxlLgorCQkJCQkJaWYgKHByb3BlcnRpZXNGaWxlID09IG51bGwpIHsKKwkJCQkJCQkvLyBDcmVhdGUgdGhlIGZpbGUgbmFtZSBmb3IgdGhlIG5ldyBwcm9wZXJ0aWVzLmZpbGUuCisJCQkJCQkJZmlsZU5hbWUgPSBjb3VudHJ5RGlyICsgIlxcIiArIGlzb0NvZGUuZ2V0QWxwaGEzKCkgLy8kTk9OLU5MUy0xJAorCQkJCQkJCQkJKyAiXyIgKyBsZXZlbCArICJfbm9kZS5wcm9wZXJ0aWVzIjsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCisJCQkJCQkJLy8gQ3JlYXRlIHRuZSBuZXcgcG9wdWxhdGlvbiBmaWxlIGZvciB0aGlzIGNvdW50cnkuCisJCQkJCQkJcHJvcGVydGllc0ZpbGUgPSBHZW5VdGlscy5vcGVuV3JpdGVyKGZpbGVOYW1lKTsKKwkJCQkJCX0KKworCQkJCQkJaWYgKHRyYW5zaXRpb24gPT0gdHJ1ZSkgeworCQkJCQkJCS8vIEp1c3QgYWRkIHRoZSBoZWFkZXIKKwkJCQkJCQlkYXRhID0gZ2V0SGVhZGVyKGlzb0NvZGUsIGxldmVsKTsKKwkJCQkJCQlHZW5VdGlscy5hZGREYXRhKHByb3BlcnRpZXNGaWxlLCBkYXRhKTsKKwkJCQkJCQkvLyBGb3JnZXQgdGhlIGRhdGEgd2UganVzdCB3cm90ZS4KKwkJCQkJCQlkYXRhID0gbnVsbDsKKwkJCQkJCX0KKworCQkJCQkJc3dpdGNoIChsZXZlbCkgeworCisJCQkJCQljYXNlIERhdGFUeXBlcy5MRVZFTF8wOgorCisJCQkJCQkJLy8gSGFuZGxlIGRhdGEgbGV2ZWwgMCBkaWZmZXJlbnQgdGhhdCB0aGUgb3RoZXIKKwkJCQkJCQkvLyBhZG1pbiBsZXZlbHMuCisJCQkJCQkJaWYgKHRyYW5zaXRpb24gPT0gdHJ1ZSkgeworCQkJCQkJCQlkYXRhID0gaXNvQ29kZS5nZXRBbHBoYTMoKSArICIgPSAiIC8vJE5PTi1OTFMtMSQKKwkJCQkJCQkJCQkrIGlzb0NvZGUuZ2V0TmFtZSgpICsgIiwgIiAvLyROT04tTkxTLTEkCisJCQkJCQkJCQkJKyBpc29Db2RlLmdldE51bWVyaWMoKSArICIsICIgLy8kTk9OLU5MUy0xJAorCQkJCQkJCQkJCSsgaXNvQ29kZS5nZXRBbHBoYTIoKTsKKwkJCQkJCQkJLy8gV3JpdGUgZm9ybWF0dGVkIG91dHB1dAorCQkJCQkJCQlHZW5VdGlscy5hZGREYXRhKHByb3BlcnRpZXNGaWxlLCBkYXRhKTsKKwkJCQkJCQl9CisJCQkJCQkJY29udGludWU7CisKKwkJCQkJCWNhc2UgRGF0YVR5cGVzLkxFVkVMXzE6CisJCQkJCQkJY3VycmVudCA9IGl0ZW1zW0lTT0RhdGEuQURNSU4xX05BTUVdLnRvVXBwZXJDYXNlKCk7CisJCQkJCQkJYnJlYWs7CisKKwkJCQkJCWNhc2UgRGF0YVR5cGVzLkxFVkVMXzI6CisJCQkJCQkJY3VycmVudCA9IGl0ZW1zW0lTT0RhdGEuQURNSU4yX05BTUVdLnRvVXBwZXJDYXNlKCk7CisJCQkJCQkJYnJlYWs7CisKKwkJCQkJCX0gLy8gc3dpdGNoCisKKwkJCQkJCS8vIEhhbmRsZSBVTktOT1dOIGFuZCBOLkEuIGVudHJpZXMgZGlmZmVyZW50bHkuCisJCQkJCQlpZiAoY3VycmVudC5lcXVhbHMoIlVOS05PV04iKSB8fCBjdXJyZW50LmVxdWFscygiTi5BLiIpKSB7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAorCisJCQkJCQkJaWYgKGxldmVsID09IDEpIHsKKwkJCQkJCQkJY3VycmVudCA9IGlzb0NvZGUuZ2V0QWxwaGEyKCkgKyAiLVVOSy0iIC8vJE5PTi1OTFMtMSQKKwkJCQkJCQkJCQkrIFN0cmluZy52YWx1ZU9mKHVua0NvdW50ZXIrKyk7CisKKwkJCQkJCQl9IGVsc2UgeworCQkJCQkJCQkvLyBMZXZlbCAyIGRhdGEuCisJCQkJCQkJCWN1cnJlbnQgPSBpc29Db2RlLmdldEFscGhhMygpICsgIi5MMi4iIC8vJE5PTi1OTFMtMSQKKwkJCQkJCQkJCQkrIFN0cmluZy52YWx1ZU9mKHVua0NvdW50ZXIrKyk7CisJCQkJCQkJfQorCQkJCQkJfQorCisJCQkJCQkvLyBWZXJpZnkgZm9yIHJlcGVhdGVkIGVudHJpZXMgLS0gYXZvaWQgZHVwbGNhdGVzCisJCQkJCQlzd2l0Y2ggKGxldmVsKSB7CisKKwkJCQkJCWNhc2UgTEVWRUxfMToKKwkJCQkJCQlpZiAoR2VuVXRpbHMuaXNSZXBlYXRlZChjdXJyZW50LCBlbnRyeUxpc3QpID09IHRydWUpIHsKKwkJCQkJCQkJLy8gRHVwbGljYXRlZCwgaWdub3JlLgorCQkJCQkJCQljb250aW51ZTsKKwkJCQkJCQl9CisJCQkJCQkJLy8gUmVtZW1iZXIgdGhpcyBlbnRpdHkgdG8gYXZvaWQgZHVwbGljYXRlcy4KKwkJCQkJCQllbnRyeUxpc3QuYWRkKGN1cnJlbnQpOworCQkJCQkJCWJyZWFrOworCisJCQkJCQljYXNlIExFVkVMXzI6CisJCQkJCQkJaWYgKEdlblV0aWxzLmlzUmVwZWF0ZWQoaXRlbXNbSVNPRGF0YS5BRE1JTjFfTkFNRV0KKwkJCQkJCQkJCSsgY3VycmVudCwgZW50cnlMaXN0KSA9PSB0cnVlKSB7CisJCQkJCQkJCS8vIER1cGxpY2F0ZWQsIGlnbm9yZS4KKwkJCQkJCQkJY29udGludWU7CisJCQkJCQkJfQorCQkJCQkJCS8vIFJlbWVtYmVyIHRoaXMgZW50aXR5IHRvIGF2b2lkIGR1cGxpY2F0ZXMuCisJCQkJCQkJZW50cnlMaXN0LmFkZChpdGVtc1tJU09EYXRhLkFETUlOMV9OQU1FXSArIGN1cnJlbnQpOworCQkJCQkJCWJyZWFrOworCisJCQkJCQl9CisKKwkJCQkJCS8vIExvYWQgdGhlIGxleCBsaXN0cy4KKwkJCQkJCWlmIChsZXgxRGF0YVNldCA9PSBudWxsICYmIGxleDJEYXRhU2V0ID09IG51bGwpIHsKKworCQkJCQkJCS8vIENvbXBvc2UgdGhlIGZpbGUgbmFtZXMgZm9yIHRoZSBsZXggZmlsZXMgZm9yCisJCQkJCQkJLy8gdGhpcworCQkJCQkJCS8vIGNvdW50cnkuCisJCQkJCQkJbGV4QWRtaW4xRmlsZSA9IGxleERpciArIGlzb0NvZGUuZ2V0QWxwaGEzKCkgKyAiXFwiIC8vJE5PTi1OTFMtMSQKKwkJCQkJCQkJCSsgaXNvQ29kZS5nZXRBbHBoYTMoKTsKKwkJCQkJCQlsZXhBZG1pbjJGaWxlID0gbGV4QWRtaW4xRmlsZTsKKwkJCQkJCQlsZXhBZG1pbjFGaWxlICs9ICJfQURNSU4xX0xFWC50eHQiOyAvLyROT04tTkxTLTEkCisJCQkJCQkJbGV4QWRtaW4yRmlsZSArPSAiX0FETUlOMl9MRVgudHh0IjsgLy8kTk9OLU5MUy0xJAorCisJCQkJCQkJLy8gTG9hZCB0aGUgbGV4MSBhbmQgbGV4MiBmaWxlcyBmb3IgdGhpcworCQkJCQkJCS8vIGNvdW50cnkuCisJCQkJCQkJbGV4MURhdGFTZXQgPSBHZW5VdGlscy5wb3B1bGF0ZUxpc3QobGV4QWRtaW4xRmlsZSk7CisJCQkJCQkJbGV4MkRhdGFTZXQgPSBHZW5VdGlscy5wb3B1bGF0ZUxpc3QobGV4QWRtaW4yRmlsZSk7CisKKwkJCQkJCQkvLyBDcmVhdGUgYSBtZXRob2QgdG8gc2VhcmNoIGZvciBhbiBpdGVtIG9uIGEKKwkJCQkJCQkvLyBsaXN0CisJCQkJCQkJLy8gb2YgbGV4IGRhdGEgb2JqZWN0cy4KKwkJCQkJCQlsZXgxTGlzdCA9IEdlblV0aWxzLmNyZWF0ZUxleDFMaXN0KGxleDFEYXRhU2V0KTsKKwkJCQkJCQlsZXgyTGlzdCA9IEdlblV0aWxzLmNyZWF0ZUxleDJMaXN0KGxleDJEYXRhU2V0KTsKKworCQkJCQkJfQorCisJCQkJCQkvLyBDb21wb3NlIHRoZSBsZXZlbDIgZGVzY3JpcHRvciB1c2luZyB0aGUgbGV4IGRhdGE6CisKKwkJCQkJCS8vIFdlIGdldCB0aGUgZGVzY3JpcHRvciBmb3IgYWRtaW5pc3RyYXRpb24gZW50aXRpZXMKKwkJCQkJCS8vIGRpZmZlcmVudGx5IGJhc2VkIG9uIGl0cyBsZXZlbC4KKworCQkJCQkJaWYgKGxldmVsID09IDIpIHsKKworCQkJCQkJCS8vIFNURVAgMTogRG8gYSBsb29rIHVwIGluIHRoZSBsZXggMiBsaXN0cy4KKworCQkJCQkJCS8vIEdldCB0aGUgbGV4IDIgb2JqZWN0IGZvciB0aGUgY3VycmVudCBlbnRyeS4KKwkJCQkJCQlMZXgyT2JqIGxleDJDdXJyZW50ID0gR2VuVXRpbHMubGV4Mkxvb2t1cChsZXgyTGlzdCwKKwkJCQkJCQkJCWl0ZW1zW0lTT0RhdGEuQURNSU4xX05BTUVdLCBjdXJyZW50KTsKKworCQkJCQkJCS8vIEdldCB0aGUgbGV4IDEgb2JqZWN0IHRvIHdoaWNoIGxleDJDdXJyZW50IGJlbG9uZ3MKKwkJCQkJCQkvLyB0by4KKwkJCQkJCQlMZXgxT2JqIGxleDFDdXJyZW50ID0gR2VuVXRpbHMubGV4MUxvb2t1cChsZXgxTGlzdCwKKwkJCQkJCQkJCWxleDJDdXJyZW50LmdldEFkbWluMSgpKTsKKworCQkJCQkJCS8vIFNURVAgMjogcGllY2UgdG9nZXRoZXIgdGhlIElEIHVzaW5nIHRoZQorCQkJCQkJCS8vIHByb3BlciBsZXggb2JqZWN0cyA6IHRoZSBVU0EgaXMgYSBzcGVjaWFsIGNhc2UKKwkJCQkJCQlpZiAobGV4MUN1cnJlbnQuZ2V0RGVzY3JpcHRvcigpLmNvbnRhaW5zKCJVUy0iKSkgeyAvLyROT04tTkxTLTEkCisKKwkJCQkJCQkJZGVzY3JpcHRvciA9IGxleDFDdXJyZW50LmdldERlc2NyaXB0b3IoKQorCQkJCQkJCQkJCSsgIi0iIC8vJE5PTi1OTFMtMSQKKwkJCQkJCQkJCQkrIGxleDFDdXJyZW50LmdldEZvcm1hdHRlZEluZGV4KCkKKwkJCQkJCQkJCQkrIGxleDJDdXJyZW50LmdldEZvcm1hdHRlZEluZGV4VVNBKCk7CisKKwkJCQkJCQkJY3VycmVudCA9IGN1cnJlbnQKKwkJCQkJCQkJCQkrICIsICIgLy8kTk9OLU5MUy0xJAorCQkJCQkJCQkJCSsgbGV4MUN1cnJlbnQuZ2V0Rm9ybWF0dGVkSW5kZXgoKQorCQkJCQkJCQkJCSsgbGV4MkN1cnJlbnQuZ2V0Rm9ybWF0dGVkSW5kZXhVU0EoKQorCQkJCQkJCQkJCSsgIiwgIiAvLyROT04tTkxTLTEkCisJCQkJCQkJCQkJKyBHZW5VdGlscy5leHRyYWN0QWxwaGEyKGxleDFDdXJyZW50CisJCQkJCQkJCQkJCQkuZ2V0RGVzY3JpcHRvcigpKTsKKworCQkJCQkJCX0gZWxzZSB7CisJCQkJCQkJCWRlc2NyaXB0b3IgPSBsZXgxQ3VycmVudC5nZXREZXNjcmlwdG9yKCkKKwkJCQkJCQkJCQkrICItRyIgLy8kTk9OLU5MUy0xJAorCQkJCQkJCQkJCSsgbGV4MUN1cnJlbnQuZ2V0Rm9ybWF0dGVkSW5kZXgoKQorCQkJCQkJCQkJCSsgbGV4MkN1cnJlbnQuZ2V0Rm9ybWF0dGVkSW5kZXgoKTsKKworCQkJCQkJCQkvLyBBZGQgc29tZSBjb21tZW5zIHRvIGFsbG93IHJldmVyc2UgZW5naW5lZXJpbmcKKwkJCQkJCQkJLy8gb3IKKwkJCQkJCQkJLy8gYmFja3RyYWNraW5nIHRoZSBvcmlnaW4gb2YgdGhpcyBnZW5lcmF0ZWQga2V5CisJCQkJCQkJCS8vIGFzCisJCQkJCQkJCS8vIG11Y2ggYXMgcG9zc2libGUuCisJCQkJCQkJCWRhdGEgPSAiIyBHZW5lcmF0ZWQga2V5IGRldGFpbHMgOiAiIC8vJE5PTi1OTFMtMSQKKwkJCQkJCQkJCQkrICIgTGV2ZWwgMSAoICIgLy8kTk9OLU5MUy0xJAorCQkJCQkJCQkJCSsgbGV4MUN1cnJlbnQuZ2V0RGVzY3JpcHRvcigpCisJCQkJCQkJCQkJKyAiID0gIiAvLyROT04tTkxTLTEkCisJCQkJCQkJCQkJKyBsZXgxQ3VycmVudC5nZXRBZG1pbjEoKQorCQkJCQkJCQkJCSsgIiApLiAiIC8vJE5PTi1OTFMtMSQKKwkJCQkJCQkJCQkrICJMZXZlbCAyICggIiAvLyROT04tTkxTLTEkCisJCQkJCQkJCQkJKyBsZXgxQ3VycmVudC5nZXRGb3JtYXR0ZWRJbmRleCgpCisJCQkJCQkJCQkJKyBsZXgyQ3VycmVudC5nZXRGb3JtYXR0ZWRJbmRleCgpCisJCQkJCQkJCQkJKyAiID0gIiArIGxleDJDdXJyZW50LmdldEFkbWluMigpIC8vJE5PTi1OTFMtMSQKKwkJCQkJCQkJCQkrICIgKS4gXG4iOyAvLyROT04tTkxTLTEkCisKKwkJCQkJCQkJaWYgKGN1cnJlbnQuY29udGFpbnMoIi5MMi4iKSkgeyAvLyROT04tTkxTLTEkCisJCQkJCQkJCQljdXJyZW50ID0gZGVzY3JpcHRvcgorCQkJCQkJCQkJCQkrICIsICIgKyAiRyIgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCisJCQkJCQkJCQkJCSsgbGV4MUN1cnJlbnQuZ2V0Rm9ybWF0dGVkSW5kZXgoKQorCQkJCQkJCQkJCQkrIGxleDJDdXJyZW50LmdldEZvcm1hdHRlZEluZGV4KCkKKwkJCQkJCQkJCQkJKyAiLCAiICsgbGV4MUN1cnJlbnQuZ2V0SUQoKTsgLy8kTk9OLU5MUy0xJAorCQkJCQkJCQl9CisKKwkJCQkJCQl9CisKKwkJCQkJCX0gZWxzZSB7IC8vIENvbXBvc2UgZGVzY3JpcHRvciBmb3IgbGV2ZWwgMSBhbmQgbGV2ZWwKKwkJCQkJCQkvLyAwIGRhdGEuCisJCQkJCQkJLy8gR2V0IHRoZSBkZXNjcmlwdG9yIGZvciB0aGlzIGVudGl0eS4KKwkJCQkJCQlkZXNjcmlwdG9yID0gR2VuVXRpbHMuZ2V0SVNPMkRlc2NyaXB0b3IoaXNvMkxpc3QsCisJCQkJCQkJCQljdXJyZW50LCBpc29Db2RlLmdldEFscGhhMigpKTsKKworCQkJCQkJCS8vIElmIHdlIGNhbnQgZmluZCB0aGUgZGVzY3JpcHRvciwgdGhlbiBsb29rIGluIHRoZQorCQkJCQkJCS8vIGZpeCBsaXN0LgorCQkJCQkJCWlmIChkZXNjcmlwdG9yLmVxdWFscyhjdXJyZW50KSA9PSB0cnVlKSB7CisJCQkJCQkJCS8vIExvb2sgZm9yIGEgZGVzY3JpcHRvciBpbiB0aGUgZml4IGZpbGUKKwkJCQkJCQkJZGVzY3JpcHRvciA9IEdlblV0aWxzLmdldEZpeENvZGUoY29kZWZpeExpc3QsCisJCQkJCQkJCQkJY3VycmVudCwgaXRlbXNbSVNPRGF0YS5DT1VOVFJZX05BTUVdKTsKKworCQkJCQkJCQkvLyBJZiB0aGVyZSBpcyBubyBkZXNjcmlwdG9yIHN0aWxsLCBnZW5lcmF0ZQorCQkJCQkJCQkvLyBvbmUhCisJCQkJCQkJCWlmIChkZXNjcmlwdG9yLmVxdWFscyhjdXJyZW50KSA9PSB0cnVlKSB7CisJCQkJCQkJCQlkZXNjcmlwdG9yID0gaXNvQ29kZS5nZXRBbHBoYTIoKSArICItIiAvLyROT04tTkxTLTEkCisJCQkJCQkJCQkJCSsgY3VycmVudDsKKwkJCQkJCQkJfQorCQkJCQkJCX0KKworCQkJCQkJCS8vIEhhbmRsZSB0aGUgVVNBIGFzIGEgc3BlY2lhbCBjYXNlCisJCQkJCQkJaWYgKGRlc2NyaXB0b3IuY29udGFpbnMoIlVTLSIpKSB7IC8vJE5PTi1OTFMtMSQKKwkJCQkJCQkJZGF0YSA9ICIjIiArIGN1cnJlbnQgKyAiXG4iOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKKwkJCQkJCQl9CisKKwkJCQkJCQkvLyBHZXQgdGhlIGxleCAxIG9iamVjdCB0byB3aGljaCBsZXgyQ3VycmVudCBiZWxvbmdzCisJCQkJCQkJLy8gdG8uCisJCQkJCQkJTGV4MU9iaiBsZXgxQ3VycmVudCA9IEdlblV0aWxzLmxleDFMb29rdXAobGV4MUxpc3QsCisJCQkJCQkJCQljdXJyZW50KTsKKworCQkJCQkJCWlmIChsZXgxQ3VycmVudCA9PSBudWxsKSB7CisJCQkJCQkJCVN5c3RlbS5vdXQKKwkJCQkJCQkJCQkucHJpbnRsbigiXHRcdEZvdW5kIHByb2JsZW0gOiAiICsgY3VycmVudCAvLyROT04tTkxTLTEkCisJCQkJCQkJCQkJCQkrICIgIiArIGRlc2NyaXB0b3IgKyAiICIgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCisJCQkJCQkJCQkJCQkrIGl0ZW1zW0lTT0RhdGEuQ09VTlRSWV9OQU1FXSk7CisJCQkJCQkJfSBlbHNlIHsKKwkJCQkJCQkJY3VycmVudCA9IGN1cnJlbnQKKwkJCQkJCQkJCQkrICIsICIgLy8kTk9OLU5MUy0xJAorCQkJCQkJCQkJCSsgbGV4MUN1cnJlbnQuZ2V0Rm9ybWF0dGVkSW5kZXgoKQorCQkJCQkJCQkJCSsgIiwgIiAvLyROT04tTkxTLTEkCisJCQkJCQkJCQkJKyBsZXgxQ3VycmVudC5nZXRJRCgpOworCQkJCQkJCX0KKworCQkJCQkJfQorCisJCQkJCQkvLyBVdGlsTG9nZ2VyLmxvZ0luZm9ybWF0aW9uKCJDb21wb3NlZCA6ICIgKyBkZXNjcmlwdG9yICsgIiA9ICIKKwkJCQkJCS8vICsgY3VycmVudCk7CisKKwkJCQkJCWlmIChkYXRhICE9IG51bGwpIHsKKwkJCQkJCQlkYXRhICs9IGRlc2NyaXB0b3IgKyAiID0gIiArIGN1cnJlbnQgKyAiXG4iOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKKwkJCQkJCX0gZWxzZSB7CisJCQkJCQkJZGF0YSA9IGRlc2NyaXB0b3IgKyAiID0gIiArIGN1cnJlbnQgKyAiXG4iOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKKwkJCQkJCX0KKworCQkJCQkJR2VuVXRpbHMuYWRkRGF0YShwcm9wZXJ0aWVzRmlsZSwgZGF0YSk7CisJCQkJCQlkYXRhID0gbnVsbDsKKworCQkJCQl9IC8vIHdoaWxlIGxvb3AKKworCQkJCQkvLyBSZXNldCBhbGwgbGV4LXJlbGF0ZWQgaXRlbXMKKwkJCQkJaWYgKGxleDFEYXRhU2V0ICE9IG51bGwpIHsKKwkJCQkJCWxleDFEYXRhU2V0LmNsZWFyKCk7CisJCQkJCQlsZXgxRGF0YVNldCA9IG51bGw7CisJCQkJCX0KKwkJCQkJaWYgKGxleDJEYXRhU2V0ICE9IG51bGwpIHsKKwkJCQkJCWxleDJEYXRhU2V0LmNsZWFyKCk7CisJCQkJCQlsZXgyRGF0YVNldCA9IG51bGw7CisJCQkJCX0KKwkJCQkJaWYgKGxleDFMaXN0ICE9IG51bGwpIHsKKwkJCQkJCWxleDFMaXN0LmNsZWFyKCk7CisJCQkJCQlsZXgxTGlzdCA9IG51bGw7CisJCQkJCX0KKwkJCQkJaWYgKGxleDJMaXN0ICE9IG51bGwpIHsKKwkJCQkJCWxleDJMaXN0LmNsZWFyKCk7CisJCQkJCQlsZXgyTGlzdCA9IG51bGw7CisJCQkJCX0KKworCQkJCQlsZXhBZG1pbjFGaWxlID0gbnVsbDsKKwkJCQkJbGV4QWRtaW4yRmlsZSA9IG51bGw7CisKKwkJCQkJLy8gV2UgZG9udCBuZWVkIHRoZSBJU08gY29kZSBvYmplY3QgZm9yIHRoaXMgY291bnRyeQorCQkJCQkvLyBhbnltb3JlLCB3ZSBhcmUgZG9uZSBwcm9jZXNzaW5nIGl0LgorCQkJCQlpc29Db2RlID0gbnVsbDsKKworCQkJCQkvLyBDbG9zZSBhbGwgb3BlbiByZXNvdXJjZXMuCisJCQkJCXJlYWRlci5jbG9zZSgpOworCisJCQkJCWlmIChwcm9wZXJ0aWVzRmlsZSAhPSBudWxsKSB7CisJCQkJCQlwcm9wZXJ0aWVzRmlsZS5jbG9zZSgpOworCQkJCQkJcHJvcGVydGllc0ZpbGUgPSBudWxsOworCQkJCQkJVXRpbExvZ2dlci5sb2dJbmZvcm1hdGlvbigiXHRcdEdlbmVyYXRlZCA6ICIgKyBmaWxlTmFtZSk7IC8vJE5PTi1OTFMtMSQKKwkJCQkJCWZpbGVOYW1lID0gbnVsbDsKKwkJCQkJfQorCisJCQkJCS8vIFJ1biBnYXJiYWdlIGNvbGxlY3Rpb24KKwkJCQkJLy9TeXN0ZW0uZ2MoKTsKKwkJCQl9CisKKwkJCX0gY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKKwkJCQllLnByaW50U3RhY2tUcmFjZSgpOworCQkJfQorCisJCX0KKworCX0KKworCS8qKgorCSAqIEdlbmVyYXRlIHRoZSBoZWFkZXIgY29tbWVudCBmb3IgdGhpcyBmaWxlLgorCSAqIAorCSAqIEBwYXJhbSBjb2RlCisJICogICAgICAgICAgICBJU08gMzE2Ni0xIENvZGUKKwkgKiBAcGFyYW0gbGV2ZWwKKwkgKiAgICAgICAgICAgIHRoZSBhZG1pbiBsZXZlbAorCSAqIAorCSAqIEByZXR1cm4gYSBoZWFkZXIgY29tbWVudCBmb3IgdGhlIG5ldyBmaWxlLgorCSAqLworCXByb3RlY3RlZCBTdHJpbmcgZ2V0SGVhZGVyKElTT0NvZGUxIGNvZGUsIGludCBsZXZlbCkgeworCisJCWZpbmFsIGludCBEQVRBX0RFU0NSSVBUT1IgPSAwOworCQlmaW5hbCBpbnQgVVJMID0gMTsKKworCQkvLyBDcmVhdGUgdGhlIGZpbGUgbmFtZSBmb3IgdGhlIFVSTCBmaWxlLgorCQlTdHJpbmcgdXJsRmlsZSA9IHdvcmtzcGFjZSArIEdlbkNvbnN0YW50cy5QQVJBTVNfRElSCisJCQkJKyBHZW5Db25zdGFudHMuVVJMU19ESVI7CisJCXVybEZpbGUgKz0gY29kZS5nZXROYW1lKCkgKyAiLnR4dCI7IC8vJE5PTi1OTFMtMSQKKworCQlTdHJpbmcgaGVhZGVyID0gIiMgIiArIGNvZGUuZ2V0QWxwaGEzKCkgKyAiXyIgKyBsZXZlbCAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKKwkJCQkrICJfbm9kZS5wcm9wZXJ0aWVzICIgLy8kTk9OLU5MUy0xJAorCQkJCSsgIlxuIjsgLy8kTk9OLU5MUy0xJAorCisJCS8vIEFkZCB0aGUgY29weXJpZ2h0IHN0YXRlbWVudC4KKwkJaGVhZGVyICs9IEdlblV0aWxzLmdldENvcHlyaWdodCgpOworCisJCS8vIEFkZCBhbiBleHBsYW5hdGlvbiBvZiB0aGUga2V5IGZvcm1hdCBpbiBvdXIgZGF0YSBmaWxlcy4KKwkJaGVhZGVyICs9IEdlblV0aWxzLmdldEtleUZvcm1hdEV4cGxhbmF0aW9uKCk7CisKKwkJaGVhZGVyICs9ICIjIFRoaXMgaXMgdGhlIG5hbWUgb2YgdGhlIGNsYXNzIHRoYXQgd2lsbCBpbnRlcnByZXQgdGhlIHJlc3Qgb2YgdGhlIGZpbGUncyBjb250ZW50c1xuIjsgLy8kTk9OLU5MUy0xJAorCQloZWFkZXIgKz0gIlJFQ09SRF9DTEFTU05BTUUgPSBvcmcuZWNsaXBzZS5zdGVtLmludGVybmFsLmRhdGEuQ291bnRyeUdyYXBoUmVjb3JkJENvdW50cnlOb2RlR3JhcGhSZWNvcmRcblxuIjsgLy8kTk9OLU5MUy0xJAorCisJCWhlYWRlciArPSAiIyBUaGUgSVNPLTMxNjYtMSBhbHBoYTMgY29kZSBmb3IgdGhlIGNvdW50cnlcbiI7IC8vJE5PTi1OTFMtMSQKKwkJaGVhZGVyICs9ICJJU09LRVkgPSAiICsgY29kZS5nZXRBbHBoYTMoKSArICJcblxuIjsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCisKKwkJaGVhZGVyICs9ICIjIFRoZSBhZG1pbmlzdHJhdGlvbiBsZXZlbCBvZiB0aGUgbm9kZSBkYXRhXG4iOyAvLyROT04tTkxTLTEkCisJCWhlYWRlciArPSAiQURNSU5fTEVWRUwgPSAiICsgbGV2ZWwgKyAiXG5cbiI7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAorCisJCWhlYWRlciArPSAiIyBUaGlzIGlzIHRoZSBkYXRlIHJhbmdlIGZvciB3aGljaCB0aGUgYXJlYSB2YWx1ZXMgaW4gdGhpcyBmaWxlIGFyZSB2YWxpZCBcbiI7IC8vJE5PTi1OTFMtMSQKKwkJaGVhZGVyICs9ICIjIFNlZSBodHRwOi8vcHVybC5vcmcvZGMvdGVybXMvMS4xL3ZhbGlkXG4iOyAvLyROT04tTkxTLTEkCisJCWhlYWRlciArPSAiVkFMSUQgPSBzdGFydD0xOTAwLTAxLTAxO1xuXG4iOyAvLyROT04tTkxTLTEkCisKKwkJLy8gVGhlIFVuaXRlZCBOYXRpb25zIGRhdGEgcG9saWN5IGFwcGxpZXMgb25seSB0byBFdXJvcGUgOgorCQkvLyBoZWFkZXIgKz0gR2VuVXRpbHMuZ2V0VU5Qb2xpY3koKTsKKworCQloZWFkZXIgKz0gIiMgVGhpcyBpcyB0aGUgc291cmNlIG9mIHRoZSBkYXRhXG4iOyAvLyROT04tTkxTLTEkCisKKwkJdXJsRmlsZSArPSBjb2RlLmdldE5hbWUoKSArICIudHh0IjsgLy8kTk9OLU5MUy0xJAorCisJCS8vIE9wZW4gdGhlIFVSTCBmaWxlIGZvciB0aGlzIGNvdW50cnkuCisJCS8vIFV0aWxMb2dnZXIubG9nSW5mb3JtYXRpb24oInVybCBmaWxlID0gIiArIHVybEZpbGUpOworCQlCdWZmZXJlZFJlYWRlciB1cmxSZWFkZXIgPSBHZW5VdGlscy5vcGVuUmVhZGVyKHVybEZpbGUpOworCisJCXRyeSB7CisJCQkvLyBBZGQgYWxsIHRoZSBzb3VyY2UgVVJMcyBmb3IgdGhpcyBjb3VudHJ5LgorCQkJaWYgKHVybFJlYWRlciAhPSBudWxsKSB7CisJCQkJU3RyaW5nIGJ1ZmZlciA9IG51bGw7CisJCQkJd2hpbGUgKEdlblV0aWxzLkVPRihidWZmZXIgPSB1cmxSZWFkZXIucmVhZExpbmUoKSkgIT0gdHJ1ZSkgeworCisJCQkJCS8vIFV0aWxMb2dnZXIubG9nSW5mb3JtYXRpb24oIkJ1ZmZlciA9ICIgKyBidWZmZXIpOworCisJCQkJCS8vIFRva2VuaXplCisJCQkJCVN0cmluZ1Rva2VuaXplciB0b2tlbml6ZXIgPSBuZXcgU3RyaW5nVG9rZW5pemVyKGJ1ZmZlciwgIioiKTsgLy8kTk9OLU5MUy0xJAorCisJCQkJCS8vIFdlIGtub3cgdGhhdCB3ZSBleHBlY3Qgb25seSB0d28gdG9rZW5zLiBHZXQgdGhlbS4gT3JkZXIKKwkJCQkJLy8gbWF0dGVycyBoZXJlLgorCQkJCQlTdHJpbmdbXSB0b2tlbnMgPSBuZXcgU3RyaW5nWzJdOworCQkJCQl0b2tlbnNbREFUQV9ERVNDUklQVE9SXSA9IHRva2VuaXplci5uZXh0VG9rZW4oKTsKKwkJCQkJdG9rZW5zW1VSTF0gPSB0b2tlbml6ZXIubmV4dFRva2VuKCk7CisKKwkJCQkJaWYgKEdlblV0aWxzLmlzU291cmNlVVJMKHVybFNldCwgdG9rZW5zW0RBVEFfREVTQ1JJUFRPUl0pID09IHRydWUpIHsKKworCQkJCQkJLy8gdHJ5IHsKKwkJCQkJCS8vIElzIHRoaXMgZGF0YSBkZXNjcmlwdG9yIG9uZSBvZiBvdXIgYWN0aXZlIGRhdGEKKwkJCQkJCS8vIHNvdXJjZXMgPworCQkJCQkJaWYgKEdlblV0aWxzLmlzQWN0aXZlVVJMKHVybFN0YXR1cywKKwkJCQkJCQkJdG9rZW5zW0RBVEFfREVTQ1JJUFRPUl0pID09IGZhbHNlKSB7CisJCQkJCQkJLy8gTm8sIGl0IGlzIG5vdCBvbmUgYW4gYWN0aXZlIFVSTCwgc28gY29tbWVudAorCQkJCQkJCS8vIGl0CisJCQkJCQkJLy8gb3V0LgorCQkJCQkJCS8vIGhlYWRlciArPSAiIyAiICsgIlNPVVJDRSA9ICIgKworCQkJCQkJCS8vIFVSTEVuY29kZXIuZW5jb2RlKHRva2Vuc1tVUkxdLCAiVVRGLTgiKSArICJcbiI7CisJCQkJCQkJaGVhZGVyICs9ICIjICIgKyAiU09VUkNFID0gIiArIHRva2Vuc1tVUkxdICsgIlxuIjsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkIC8vJE5PTi1OTFMtMyQKKwkJCQkJCX0gZWxzZSB7CisJCQkJCQkJLy8gaGVhZGVyICs9ICJTT1VSQ0UgPSAiICsKKwkJCQkJCQkvLyBVUkxFbmNvZGVyLmVuY29kZSh0b2tlbnNbVVJMXSwgIlVURi04IikgKyAiXG4iOworCQkJCQkJCWhlYWRlciArPSAiU09VUkNFID0gIiArIHRva2Vuc1tVUkxdICsgIlxuIjsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCisJCQkJCQl9CisKKwkJCQkJCS8vIH0gY2F0Y2ggKGphdmEuaW8uVW5zdXBwb3J0ZWRFbmNvZGluZ0V4Y2VwdGlvbiBlKSB7CisJCQkJCQkvLyBVdGlsTG9nZ2VyLmxvZ0luZm9ybWF0aW9uKCJFcnJvcjoiICsgZS5nZXRNZXNzYWdlKCkpOworCQkJCQkJLy8gLy8kTk9OLU5MUy0xJAorCQkJCQkJLy8gfQorCQkJCQl9CisKKwkJCQl9IC8vIHdoaWxlCisKKwkJCQkvLyBUbyBtYWtlIGl0IGxvb2sgYmV0dGVyLCBhZGQgYW4gZXh0cmEgbmV3IGxpbmUuCisJCQkJaGVhZGVyICs9ICJcbiI7IC8vJE5PTi1OTFMtMSQKKworCQkJfQorCisJCX0gY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKKwkJCS8vCisJCX0KKworCQloZWFkZXIgKz0gIiMgVGhlIGZpbGUgdGhhdCBjb250YWlucyB0aGUgbGF0aXR1ZGUvbG9uZ2l0dWRlIGRhdGEgZm9yIHRoZSBub2RlIFxuIjsgLy8kTk9OLU5MUy0xJAorCQloZWFkZXIgKz0gIlNQQVRJQUxfVVJJID0gIjsgLy8kTk9OLU5MUy0xJAorCQloZWFkZXIgKz0gInBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvZ2VvL2NvdW50cnkvIjsgLy8kTk9OLU5MUy0xJAorCQloZWFkZXIgKz0gY29kZS5nZXRBbHBoYTMoKSArICIvIiArIGNvZGUuZ2V0QWxwaGEzKCkgKyAiXyIgKyBsZXZlbCAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKKwkJCQkrICJfTUFQLnhtbFxuXG4iOyAvLyROT04tTkxTLTEkCisKKwkJcmV0dXJuIGhlYWRlcjsKKwl9CisKKwkvKioKKwkgKiBFeGVjdXRpb24gZW50cnkgcG9pbnQKKwkgKiAKKwkgKiBAcGFyYW0gYXJncworCSAqLworCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKKwkJLy8gZmluYWwgaW50IElTT18zMTY2XzEgPSAwOworCQkvLyBmaW5hbCBpbnQgSVNPXzMxNjZfMiA9IDE7CisJCS8vIGZpbmFsIGludCBGSVhfRklMRSA9IDI7CisJCS8vIGZpbmFsIGludCBUQVJHRVRfTElTVCA9IDM7CisJCS8vIGZpbmFsIGludCBMRVhfRElSID0gNDsKKwkJLy8gZmluYWwgaW50IE9VVFBVVF9ESVIgPSA1OworCQkvLyBmaW5hbCBpbnQgUEFSQU1TID0gNjsKKwkJLy8KKwkJLy8gaWYgKGFyZ3MubGVuZ3RoIDwgUEFSQU1TKSB7CisJCS8vIFV0aWxMb2dnZXIubG9nSW5mb3JtYXRpb24oIi0tV3JvbmcgYXJndW1lbnRzLS0iKTsgLy8kTk9OLU5MUy0xJAorCQkvLyBTeXN0ZW0ub3V0CisJCS8vIC5wcmludGxuKCJcdFRvIHJ1biwgcGxlYXNlIHByb3ZpZGUgdGhlIGZvbGxvd2luZyBhcmd1bWVudHMgOiAiKTsKKwkJLy8gLy8kTk9OLU5MUy0xJAorCQkvLyBVdGlsTG9nZ2VyLmxvZ0luZm9ybWF0aW9uKCJcdFx0IElTTyAzMTY2LTEgZmlsZSIpOyAvLyROT04tTkxTLTEkCisJCS8vIFV0aWxMb2dnZXIubG9nSW5mb3JtYXRpb24oIlx0XHQgSVNPIDMxNjYtMiBmaWxlIik7IC8vJE5PTi1OTFMtMSQKKwkJLy8gVXRpbExvZ2dlci5sb2dJbmZvcm1hdGlvbigiXHRcdCBJU08gZml4IGZpbGUiKTsgLy8kTk9OLU5MUy0xJAorCQkvLyBVdGlsTG9nZ2VyLmxvZ0luZm9ybWF0aW9uKCJcdFx0IFRhcmdldCBjb3VudHJpZXMgZmlsZSIpOyAvLyROT04tTkxTLTEkCisJCS8vIFV0aWxMb2dnZXIubG9nSW5mb3JtYXRpb24oIlx0XHQgTGV4aWNvZ3JhcGhpYyBzb3J0aW5nIGRpcmVjdG9yeSIpOworCQkvLyAvLyROT04tTkxTLTEkJAorCQkvLyBVdGlsTG9nZ2VyLmxvZ0luZm9ybWF0aW9uKCJcdFx0IE91dHB1dCBkaXJlY3RvcnkiKTsgLy8kTk9OLU5MUy0xJAorCQkvLyByZXR1cm47CisJCS8vIH0KKwkJLy8KKwkJLy8gTm9kZURhdGFHZW5lcmF0b3IgZ2VuID0gbmV3IE5vZGVEYXRhR2VuZXJhdG9yKGFyZ3NbSVNPXzMxNjZfMV0sCisJCS8vIGFyZ3NbSVNPXzMxNjZfMl0sIGFyZ3NbRklYX0ZJTEVdLCBhcmdzW1RBUkdFVF9MSVNUXSwKKwkJLy8gYXJnc1tMRVhfRElSXSwgYXJnc1tPVVRQVVRfRElSXSk7CisJCS8vIGdlbi5ydW4oKTsKKworCQlmaW5hbCBpbnQgQ09ORklHX0ZJTEUgPSAwOworCQlmaW5hbCBpbnQgUEFSQU1TID0gMTsKKworCQlpZiAoYXJncy5sZW5ndGggPCBQQVJBTVMpIHsKKwkJCVV0aWxMb2dnZXIubG9nSW5mb3JtYXRpb24oIlx0XHQtLVdyb25nIGFyZ3VtZW50cy0tIik7IC8vJE5PTi1OTFMtMSQKKwkJCVN5c3RlbS5vdXQKKwkJCQkJLnByaW50bG4oIlx0XHRUbyBydW4sIHBsZWFzZSBwcm92aWRlIHRoZSBmb2xsb3dpbmcgYXJndW1lbnQocykgOiAiKTsgLy8kTk9OLU5MUy0xJAorCQkJVXRpbExvZ2dlci5sb2dJbmZvcm1hdGlvbigiXHRcdFx0IENvbmZpZ3VyYXRpb24gZmlsZSIpOyAvLyROT04tTkxTLTEkCisJCQlTeXN0ZW0uZXhpdCgxKTsKKwkJfQorCisJCU5vZGVEYXRhR2VuZXJhdG9yIGdlbiA9IG5ldyBOb2RlRGF0YUdlbmVyYXRvcihhcmdzW0NPTkZJR19GSUxFXSk7CisJCWdlbi5ydW4oKTsKKworCX0KKworfQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdXRpbGl0eS9nZW5lcmF0b3JzL1BvbHlnb25BcmVhR2VuZXJhdG9yLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91dGlsaXR5L2dlbmVyYXRvcnMvUG9seWdvbkFyZWFHZW5lcmF0b3IuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NmYxYmI1Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdXRpbGl0eS9nZW5lcmF0b3JzL1BvbHlnb25BcmVhR2VuZXJhdG9yLmphdmEKQEAgLTAsMCArMSw5NzAgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5LmdlbmVyYXRvcnM7CisKK2ltcG9ydCBqYXZhLmF3dC5Qb2x5Z29uOworaW1wb3J0IGphdmEuaW8uQnVmZmVyZWRSZWFkZXI7CitpbXBvcnQgamF2YS5pby5GaWxlOworaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247CitpbXBvcnQgamF2YS5pby5QcmludFdyaXRlcjsKK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OworaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOworaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuU2V0OworaW1wb3J0IGphdmEudXRpbC5TdHJpbmdUb2tlbml6ZXI7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMKKyAqIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YKKyAqIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcworICogYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKiAKKyAqIENvbnRyaWJ1dG9yczogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioKKyAqIFNURU0gSUkgRGF0YSBNaWdyYXRpb24vR2VuZXJhdGlvbiBVdGlsaXRpZXMgLS0gVGhpcyBpcyBhIHV0aWxpdHkgY2xhc3MgdGhhdAorICogY29tcHV0ZXMgdGhlIGFyZWEgb2YgYSBwb2x5Z29uIGluIHBvbHlnb24gdW5pdHMuIFRoaXMgaXMgdXNlZnVsIHRvIGNvbXB1dGUKKyAqIHRoZSBhcHByb3hpbWF0ZSBhcmVhIG9mIGEgbG9jYXRpb24gd2hlbiB3ZSBkb250IGtub3cgdGhlIGV4YWN0IGFyZWEgdmFsdWUuCisgKiAKKyAqIAorICogVG8gY29uZmlndXJlLCBzZWUgY29uZmlndXJhdGlvbiBmaWxlIDoKKyAqIG9yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9jb25maWd1cmF0aW9uL1BvbHlnb25BcmVhR2VuZXJhdG9yLmNvbmZpZworICogCisgKiAKKyAqIFRvIHJ1biwgYWRkIHBhdGggdG8gY29uZmlndXJhdGlvbiBmaWxlIGluIHRoZSBydW4gcHJvZmlsZSAoaS5lLgorICogQzpcc3RlbUlJXG9yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eVxjb25maWd1cmF0aW9uXFBvbHlnb25BcmVhR2VuZXJhdG9yLmNvbmZpZykKKyAqIAorICogQWRkIHRoZSBmb2xsb3dpbmcgdmFsdWVzIHRvIHRoZSBydW4gY29uZmlndXJhdGlvbjoKKyAqIAorICogQzpcc3RlbUlJXG9yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eVxkYXRhTWlncmF0aW9uXGlucHV0XElTTzMxNjYtMVxJU08zMTY2XzFfZW4udHh0CisgKiBDOlxzdGVtSUlcb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5XGRhdGFNaWdyYXRpb25caW5wdXRcSVNPMzE2Ni0yXElTTzMxNjZfMl9saXN0LnR4dAorICogQzpcc3RlbUlJXG9yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eVxkYXRhTWlncmF0aW9uXGlucHV0XElTT0ZpeFxJU09fTEVWRUwxX0ZJWC50eHQKKyAqIEM6XHN0ZW1JSVxvcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHlcZGF0YU1pZ3JhdGlvblxpbnB1dFxBcmVhUG9wdWxhdGlvbkRhdGFcCisgKiBDOlxzdGVtSUlcb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5XGRhdGFNaWdyYXRpb25caW5wdXRccHJvcGVydGllc1xDb3VudHJpZXMudHh0CisgKiBDOlxzdGVtSUlcb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5XGRhdGFNaWdyYXRpb25caW5wdXRcc29ydFwKKyAqIEM6XHN0ZW1JSVxvcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHlcZGF0YU1pZ3JhdGlvblxpbnB1dFxQb2x5Z29uQXJlYXNcCisgKiAKKyAqIAorICogCisgKi8KKworcHVibGljIGNsYXNzIFBvbHlnb25BcmVhR2VuZXJhdG9yIHsKKworCS8qKgorCSAqIE91ciBzb3VyY2UgZmlsZXMgZm9yIElTTyAzMTY2LTEgY29kZXMgYW5kIGZvciB0aGUgbGlzdCBvZiB0YXJnZXQKKwkgKiBjb3VudHJpZXMuCisJICovCisKKwlwcml2YXRlIFN0cmluZyBpc28zMTY2XzEgPSBudWxsOworCisJcHJpdmF0ZSBTdHJpbmcgaXNvMzE2Nl8yID0gbnVsbDsKKworCXByaXZhdGUgU3RyaW5nIGZpeEZpbGUgPSBudWxsOworCisJcHJpdmF0ZSBTdHJpbmcgYXJlYURhdGEgPSBudWxsOworCisJcHJpdmF0ZSBTdHJpbmcgdGFyZ2V0RmlsZSA9IG51bGw7CisKKwlwcml2YXRlIFN0cmluZyBsZXhEaXIgPSBudWxsOworCisJcHJpdmF0ZSBTdHJpbmcgb3V0cHV0RGlyID0gbnVsbDsKKworCXByaXZhdGUgU3RyaW5nIHdvcmtzcGFjZSA9IG51bGw7CisKKwkvKioKKwkgKiBMaXN0IGZvciBJU08gMzE2Ni0xIGNvZGVzIGFuZCB0YXJnZXQgY291bnRyaWVzLgorCSAqLworCisJTGlzdCB0YXJnZXRMaXN0ID0gbnVsbDsKKworCUxpc3QgY29kZUxpc3QgPSBudWxsOworCisJTGlzdCBjb2RlZml4TGlzdCA9IG51bGw7CisKKwlMaXN0IGFyZWFMaXN0ID0gbnVsbDsKKworCS8qIEhhc2ggbWFwIHRvIGhvbGQgYWdncmVnYXRlIHBvbHlnb24gYXJlYSB2YWx1ZXMgKi8KKwlIYXNoTWFwPFN0cmluZywgU3RyaW5nPiBhcmVhVmFsdWVzID0gbnVsbDsKKworCS8qKgorCSAqIFN0cmluZyB1c2VkIHRvIGluZGljYXRlIGRlZmF1bHQgdmFsdWUgZm9yIHVua25vd24gYXJlYXMuCisJICovCisJU3RyaW5nIERFRkFVTFQgPSAiMCI7IC8vJE5PTi1OTFMtMSQKKworCS8qKgorCSAqIENvbnN0cnVjdG9yCisJICogCisJICogQHBhcmFtIGlzbzMxNjZfMSAtCisJICogICAgICAgICAgICBkYXRhIGZpbGUgd2l0aCB0aGUgSVNPMzE2Ni0xIEFMUEhBXzIgYW5kIEFMUEhBXzMgY29kZXMuCisJICogQHBhcmFtIGlzbzMxNjZfMiAtCisJICogICAgICAgICAgICBkYXRhIGZpbGUgd2l0aCB0aGUgSVNPMzE2Ni0yIGNvZGVzLgorCSAqIEBwYXJhbSBmaXhGaWxlIC0KKwkgKiAgICAgICAgICAgIGZpbGUgY29udGFpbmluZyBtaXNzaW5nIElTTzMxNjYtMiBjb2RlcworCSAqIEBwYXJhbSBhcmVhRGF0YSAtCisJICogICAgICAgICAgICBmaWxlIGNvbnRhaW5pbmcgYXJlYSBkYXRhIGluIFNRIEtNCisJICogQHBhcmFtIHRhcmdldEZpbGUKKwkgKiAgICAgICAgICAgIHRoZSBsaXN0IG9mIGNvdW50cmllcyBmb3Igd2hpY2ggd2Ugd2lsbCBnZW5lcmF0ZSBHTUwgZmlsZXMKKwkgKiBAcGFyYW0gbGV4RGlyCisJICogICAgICAgICAgICBmb2xkZXIgY29udGFpbmluZyBsZXhpY29ncmFwaGljYWxseSBzb3J0ZWQgZmlsZXMKKwkgKiBAcGFyYW0gb3V0cHV0RGlyCisJICogICAgICAgICAgICB0aGUgb3V0cHV0IGRpcmVjdG9yeSBmb3IgdGhlIEdNTCBmaWxlcyB3ZSBnZW5lcmF0ZQorCSAqLworCS8vIHB1YmxpYyBQb2x5Z29uQXJlYUdlbmVyYXRvcihTdHJpbmcgaXNvMzE2Nl8xLCBTdHJpbmcgaXNvMzE2Nl8yLAorCS8vIFN0cmluZyBmaXhGaWxlLCBTdHJpbmcgYXJlYURhdGEsIFN0cmluZyB0YXJnZXRGaWxlLCBTdHJpbmcgbGV4RGlyLAorCS8vIFN0cmluZyBvdXRwdXREaXIpIHsKKwkvLyAvLyBTZXQgdmFsdWVzIG9mIGdsb2JhbCB2YXJpYWJsZXMuCisJLy8gdGhpcy5pc28zMTY2XzEgPSBpc28zMTY2XzE7CisJLy8gdGhpcy5pc28zMTY2XzIgPSBpc28zMTY2XzI7CisJLy8gdGhpcy5maXhGaWxlID0gZml4RmlsZTsKKwkvLyB0aGlzLmFyZWFEYXRhID0gYXJlYURhdGE7CisJLy8gdGhpcy50YXJnZXRGaWxlID0gdGFyZ2V0RmlsZTsKKwkvLyB0aGlzLmxleERpciA9IGxleERpcjsKKwkvLyB0aGlzLm91dHB1dERpciA9IG91dHB1dERpcjsKKwkvLyB0YXJnZXRMaXN0ID0gbnVsbDsKKwkvLyB9CisJLyoqCisJICogQHBhcmFtIGNvbmZpZ0ZpbGUKKwkgKi8KKwlwdWJsaWMgUG9seWdvbkFyZWFHZW5lcmF0b3IoU3RyaW5nIGNvbmZpZ0ZpbGUpIHsKKworCQkvLyBMb2FkIGFsbCBjb25maWd1cmF0aW9uIHZhcmlhYmxlcworCQlIYXNoTWFwPFN0cmluZywgU3RyaW5nPiB2YXJzID0gR2VuVXRpbHMubG9hZENvbmZpZ0ZpbGUoY29uZmlnRmlsZSk7CisKKwkJYXJlYVZhbHVlcyA9IG5ldyBIYXNoTWFwPFN0cmluZywgU3RyaW5nPigpOworCisJCVNldDxTdHJpbmc+IGtleXMgPSB2YXJzLmtleVNldCgpOworCQlJdGVyYXRvciBpdCA9IGtleXMuaXRlcmF0b3IoKTsKKwkJd2hpbGUgKGl0Lmhhc05leHQoKSkgeworCQkJU3RyaW5nIHZhciA9IChTdHJpbmcpIGl0Lm5leHQoKTsKKworCQkJLy8gQXNzaWduIHZhbHVlcyB0byBjb25maWd1cmF0aW9uIHZhcmlhYmxlcyA6CisJCQlpZiAodmFyLmVxdWFscygiV09SS1NQQUNFIikpIHsgLy8kTk9OLU5MUy0xJAorCQkJCXdvcmtzcGFjZSA9IHZhcnMuZ2V0KHZhcik7CisJCQl9IGVsc2UgaWYgKHZhci5lcXVhbHMoIklTTzMxNjZfMSIpKSB7IC8vJE5PTi1OTFMtMSQKKwkJCQlpc28zMTY2XzEgPSB2YXJzLmdldCh2YXIpOworCQkJfSBlbHNlIGlmICh2YXIuZXF1YWxzKCJJU08zMTY2XzIiKSkgeyAvLyROT04tTkxTLTEkCisJCQkJaXNvMzE2Nl8yID0gdmFycy5nZXQodmFyKTsKKwkJCX0gZWxzZSBpZiAodmFyLmVxdWFscygiSVNPX0ZJWCIpKSB7IC8vJE5PTi1OTFMtMSQKKwkJCQlmaXhGaWxlID0gdmFycy5nZXQodmFyKTsKKwkJCX0gZWxzZSBpZiAodmFyLmVxdWFscygiQVJFQV9QT1AiKSkgeyAvLyROT04tTkxTLTEkCisJCQkJYXJlYURhdGEgPSB2YXJzLmdldCh2YXIpOworCQkJfSBlbHNlIGlmICh2YXIuZXF1YWxzKCJUQVJHRVRfTElTVCIpKSB7IC8vJE5PTi1OTFMtMSQKKwkJCQl0YXJnZXRGaWxlID0gdmFycy5nZXQodmFyKTsKKwkJCX0gZWxzZSBpZiAodmFyLmVxdWFscygiTEVYX0RJUiIpKSB7IC8vJE5PTi1OTFMtMSQKKwkJCQlsZXhEaXIgPSB2YXJzLmdldCh2YXIpOworCQkJfSBlbHNlIGlmICh2YXIuZXF1YWxzKCJPVVRQVVQiKSkgeyAvLyROT04tTkxTLTEkCisJCQkJb3V0cHV0RGlyID0gdmFycy5nZXQodmFyKTsKKwkJCX0KKworCQl9IC8vIHdoaWxlCisKKwkJLy8gVGhlIHdvcmtzcGFjZSB2YXJpYWJsZSBzaG91bGQgZW5kIHdpdGggYSBzbGFzaCBjaGFyYWN0ZXIKKwkJaWYgKHdvcmtzcGFjZS5lbmRzV2l0aCgiXFwiKSA9PSBmYWxzZSkgeyAvLyROT04tTkxTLTEkCisJCQl3b3Jrc3BhY2UgKz0gIlxcIjsgLy8kTk9OLU5MUy0xJAorCQl9CisKKwkJU3RyaW5nIHBhdGggPSB3b3Jrc3BhY2UgKyBHZW5Db25zdGFudHMuUEFSQU1TX0RJUjsKKworCQkvLyBTZXQgcmVtYWluaW5nIGNvbmZpZyB2YXJzIHVzaW5nIFdPUktTUEFDRSAod29ya3NwYWNlIHJlbGF0aXZlKQorCQlpZiAoaXNvMzE2Nl8xID09IG51bGwpIHsKKwkJCWlzbzMxNjZfMSA9IHBhdGggKyBHZW5Db25zdGFudHMuSVNPMzE2Nl8xX0ZJTEU7CisJCX0KKwkJaWYgKGlzbzMxNjZfMiA9PSBudWxsKSB7CisJCQlpc28zMTY2XzIgPSBwYXRoICsgR2VuQ29uc3RhbnRzLklTTzMxNjZfMl9GSUxFOworCQl9CisJCWlmIChmaXhGaWxlID09IG51bGwpIHsKKwkJCWZpeEZpbGUgPSBwYXRoICsgR2VuQ29uc3RhbnRzLklTT0ZJWF9GSUxFOworCQl9CisJCWlmICh0YXJnZXRGaWxlID09IG51bGwpIHsKKwkJCXRhcmdldEZpbGUgPSBwYXRoICsgR2VuQ29uc3RhbnRzLkNPVU5UUklFU19MSVNUOworCQl9CisJCWlmIChhcmVhRGF0YSA9PSBudWxsKSB7CisJCQlhcmVhRGF0YSA9IHBhdGggKyBHZW5Db25zdGFudHMuQVJFQV9QT1BVTEFUSU9OX0RJUjsKKwkJfQorCQlpZiAobGV4RGlyID09IG51bGwpIHsKKwkJCWxleERpciA9IHBhdGggKyBHZW5Db25zdGFudHMuTEVYX0RJUjsKKwkJfQorCQlpZiAob3V0cHV0RGlyID09IG51bGwpIHsKKwkJCW91dHB1dERpciA9IHBhdGggKyBHZW5Db25zdGFudHMuUE9MWUdPTl9BUkVBU19ESVI7CisJCX0KKworCQl0YXJnZXRMaXN0ID0gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBDb252ZXJ0IHRoZSB2YWx1ZSBvZiBzdHJpbmcgdG8gYSBkb3VibGUKKwkgKiAKKwkgKiBAcGFyYW0gc3RyCisJICogICAgICAgICAgICBhIG51bWVyaWMgc3RyaW5nCisJICogCisJICogQHJldHVybiBkb3VibGUgdmFsdWUgb2YgYSBudW1lcmljIHN0cmluZworCSAqLworCXByb3RlY3RlZCBkb3VibGUgZ2V0RG91YmxlKFN0cmluZyBzdHIpIHsKKwkJRG91YmxlIGhvbGRlciA9IG5ldyBEb3VibGUoc3RyKTsKKwkJcmV0dXJuIGhvbGRlci5kb3VibGVWYWx1ZSgpOworCX0KKworCS8qKgorCSAqIFJlbW92ZSBkZWNpbWFsIHBvaW50IGZyb20gdmFsdWUgYW5kIHJldHVybiBpdHMgc3RyaW5nIHJlcHJlc2VudGF0aW9uCisJICogCisJICogQHBhcmFtIGRlZ3JlZXMKKwkgKiAgICAgICAgICAgIGFuIGFuZ2xlIGluIGRlZ3JlZXMKKwkgKiAKKwkgKiBAcmV0dXJuIGZvcm1hdHRlZCBzdHJpbmcgYSBmb3JtYXR0ZWQgYW5nbGUgaW4gZGVncmVzcworCSAqLworCXByb3RlY3RlZCBTdHJpbmcgZm9ybWF0KGRvdWJsZSBkZWdyZWVzKSB7CisJCVN0cmluZyBzdHIgPSBudWxsOworCQlTdHJpbmcgc3ViU3RyID0gbnVsbDsKKworCQlzdHIgPSBEb3VibGUudG9TdHJpbmcoZGVncmVlcyk7CisJCWludCBkb3QgPSBzdHIuaW5kZXhPZigiLiIpOyAvLyROT04tTkxTLTEkCisJCXN1YlN0ciA9IHN0ci5zdWJzdHJpbmcoMCwgc3RyLmxlbmd0aCgpIDwgZG90ICsgNyA/IHN0ci5sZW5ndGgoKQorCQkJCTogZG90ICsgNyk7CisJCXJldHVybiBzdWJTdHI7CisKKwl9IC8vIGZvcm1hdERhdGEKKworCS8qKgorCSAqIFRoaXMgbWV0aG9kIHNldHMgdXAgYW5kIHJ1bnMgdGhpcyBnZW5lcmF0b3IuCisJICogCisJICovCisJcHVibGljIHZvaWQgcnVuKCkgeworCQkvLyBSZWFkIGFuZCBrZWVwIGluIG1lbW9yeSBhIGxpc3Qgb2YgdGhlIGNvdW50cmllcyB3ZSB3YW50LgorCQl0YXJnZXRMaXN0ID0gR2VuVXRpbHMucG9wdWxhdGVMaXN0KHRhcmdldEZpbGUpOworCisJCS8vIFJlYWQgYW5kIGtlZXAgaW4gbWVtb3J5IGEgbGlzdCBvZiB0aGUgSVNPMzE2Ni0xIEFMUEhBMiwgQUxQSEEzLCBhbmQKKwkJLy8gbnVtZXJpYyBjb2Rlcy4KKwkJY29kZUxpc3QgPSBHZW5VdGlscy5wb3B1bGF0ZUxpc3QoaXNvMzE2Nl8xKTsKKworCQkvLyBSZWFkIGFuZCBrZWVwIGluIG1lbW9yeSBhIGxpc3Qgb2YgdGhlIG1pc3NpbmcgSVNPMzE2Ni0yIGNvZGVzCisJCWNvZGVmaXhMaXN0ID0gR2VuVXRpbHMucG9wdWxhdGVMaXN0KGZpeEZpbGUpOworCisJCS8vIE5vdywgcHJvY2VzcyBlYWNoIGl0ZW0gaW4gdGhlIHRhcmdldCBsaXN0LgorCQlwcm9jZXNzKCk7CisKKwl9CisKKwkvKioKKwkgKiBQcm9jZXNzIG91ciBnbG9iYWwgbGlzdCBvZiB0YXJnZXQgY291bnRyaWVzLiBGb3IgZWFjaCBjb3VudHJ5IGluIGxpc3QsCisJICogZ2VuZXJhdGUgaXRzIEdNTCBmaWxlLgorCSAqIAorCSAqLworCXByb3RlY3RlZCB2b2lkIHByb2Nlc3MoKSB7CisKKwkJLy8gQSB3cml0ZXIgZm9yIHRoZSBuZXcgZmlsZSB3ZSBhcmUgY3JlYXRpbmcuCisJCVByaW50V3JpdGVyIHBvbHlnb25BcmVhRmlsZSA9IG51bGw7CisKKwkJLy8gT2JqZWN0IGhvbGRpbmcgSVNPMzE2Ni0xIHJlbGF0ZWQgZGF0YS4KKwkJSVNPQ29kZTEgaXNvQ29kZSA9IG51bGw7CisKKwkJLy8gTmFtZSBvZiB0aGUgbmV3IHByb3BlcnRpZXMgZmlsZS4KKwkJU3RyaW5nIGZpbGVOYW1lID0gbnVsbDsKKworCQkvLyBBIGxpc3QgZm9yIElTTyAzMTY2LTIgb2JqZWN0cworCQlMaXN0IGlzbzJMaXN0ID0gbmV3IEFycmF5TGlzdCgpOworCisJCS8vIEZpbGVuYW1lcyBmb3IgbGV4MSBhbmQgbGV4MiBmaWxlcyBmb3IgYSBnaXZlbiBjb3VudHJ5LgorCQlTdHJpbmcgbGV4QWRtaW4xRmlsZSA9IG51bGw7CisJCVN0cmluZyBsZXhBZG1pbjJGaWxlID0gbnVsbDsKKworCQkvLyBMaXN0cyBob2xkaW5nIHRoZSBsZXgxIGFuZCBsZXgyIHZhbHVlcy4KKwkJLy8gTk9URTogbGV4IHZhbHVlcyBhcmUgdGhlIGxleGljb2dyYXBoaWNhbGx5IHNvcnRlZCB2YWx1ZXMgZm9yCisJCS8vIGFkbWluaXN0cmF0aW9uIGxldmVscy4KKwkJTGlzdDxTdHJpbmc+IGxleDFEYXRhU2V0ID0gbnVsbDsKKwkJTGlzdDxTdHJpbmc+IGxleDJEYXRhU2V0ID0gbnVsbDsKKworCQkvLyBMaXN0cyBmb3IgaG9sZGluZyBsZXgxIGFuZCBsZXgyIG9iamVjdHMgZm9yIGEgZ2l2ZW4gY291bnRyeS4KKwkJTGlzdDxMZXgxT2JqPiBsZXgxTGlzdCA9IG51bGw7CisJCUxpc3Q8TGV4Mk9iaj4gbGV4Mkxpc3QgPSBudWxsOworCisJCS8vIFN1bSBvZiB0aGUgYXJlYXMgYXQgbGV2ZWwgMQorCQkvLyBkb3VibGUgYXJlYVN1bSA9IDAuMDsKKworCQlpbnQgc2l6ZSA9IHRhcmdldExpc3Quc2l6ZSgpOworCisJCS8vIEl0ZXJhdGUgZm9yIGV2ZXJ5IGNvdW50cnkgYW5kIGNyZWF0ZSBpdHMgR01MIGRhdGEgZmlsZS4KKwkJZm9yIChpbnQgaSA9IDA7IGkgPCBzaXplOyBpKyspIHsKKworCQkJLy8gR2V0IHRoZSBuZXh0IGNvdW50cnkgaW4gdGhlIGxpc3QuCisJCQlTdHJpbmcgZmlsZSA9ICgoU3RyaW5nKSB0YXJnZXRMaXN0LmdldChpKSkudHJpbSgpOworCisJCQkvLyBBbiBpbmRleCBmb3IgdW5rbndvbiBvciBuLmEuIGVudHJpZXMKKwkJCWludCB1bmtDb3VudGVyID0gMTsKKworCQkJLy8gV2UgdXNlIHRoaXMgbGlzdCB0byBrZWVwIHRyYWNrIG9mIGR1cGxpY2F0ZWQgcG9seWdvbnMuCisJCQlMaXN0PFNURU1Qb2x5Z29uPiBwb2x5Z29ucyA9IG5ldyBBcnJheUxpc3Q8U1RFTVBvbHlnb24+KCk7CisKKwkJCS8vIE9wZW4gdGhlIGRhdGEgc291cmNlIGZpbGUgZm9yIHRoaXMgY291bnRyeS4KKwkJCUJ1ZmZlcmVkUmVhZGVyIHJlYWRlciA9IEdlblV0aWxzLm9wZW5SZWFkZXIoZmlsZSk7CisKKwkJCVN5c3RlbS5vdXQKKwkJCQkJLnByaW50bG4oIlx0XHQ8PDw8IFBPTFlHT04gQVJFQSBHRU5FUkFUT1IgLS0gUHJvY2Vzc2luZyBjb3VudHJ5IDogIiArIGZpbGUgKyAiID4+Pj4iKTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCisJCQl0cnkgeworCisJCQkJaWYgKHJlYWRlciAhPSBudWxsKSB7CisKKwkJCQkJU3RyaW5nIGJ1ZmZlciA9IG51bGw7CisJCQkJCS8vIERlc2NyaWJlcyBsZXZlbAorCQkJCQkvLyBvZiBkYXRhIHdlCisJCQkJCS8vIGFyZSBub3cgcHJvY2Vzc2luZyA6IExFVkVMMCwgTEVWRUwxLCBvciBMRVZFTDIuCisJCQkJCWludCBsZXZlbCA9IC0xOworCisJCQkJCS8vIFJlY29yZCB0aGUgcHJldmlvdXMgdHlwZS4KKwkJCQkJaW50IG9sZGxldmVsID0gbGV2ZWwgLSAxOworCisJCQkJCS8vIFN0cmluZyB1c2VkIHRvIGlnbm9yZSByZXBlYXRlZCBlbnRyaWVzLgorCQkJCQkvLyBTdHJpbmcgcmVwZWF0ZWRFbnRyaWVzID0gbnVsbDsKKwkJCQkJTGlzdDxTdHJpbmc+IGVudHJ5TGlzdCA9IG51bGw7CisKKwkJCQkJd2hpbGUgKEdlblV0aWxzLkVPRihidWZmZXIgPSByZWFkZXIucmVhZExpbmUoKSkgIT0gdHJ1ZSkgeworCisJCQkJCQkvLyBUaGUgZGF0YSB3ZSB3YW50IHRvIHdyaXRlIHRvIHRoZSBuZXcgR01MIGZpbGUuCisJCQkJCQlTdHJpbmcgb3V0cHV0ID0gIiAiOyAvLyROT04tTkxTLTEkCisKKwkJCQkJCS8vIE1ha2Ugc3VyZSB0aGF0IHdlIG1hcmsgYWxsIHVua25vd24gZGF0YS4KKwkJCQkJCWJ1ZmZlciA9IGJ1ZmZlci5yZXBsYWNlKCIsLCIsICIsVU5LTk9XTiwiKTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCisKKwkJCQkJCS8vIFdlIHRha2UgYSBjaHVuayBvZiB0aGUgZGF0YSBbQlVGRkVSX01JTixCVUZGRVJfTUFYXQorCQkJCQkJLy8gdG8gbWFrZSBwcm9jZXNzc2luZyBtb3JlCisJCQkJCQkvLyBlZmZpY2llbnQsIHdlIGRvbnQgbmVlZCBhbGwgb2YgaXQuCisJCQkJCQlpbnQgQlVGRkVSX01JTiA9IDA7CisJCQkJCQlpbnQgQlVGRkVSX01BWCA9IDEyNTsKKworCQkJCQkJU3RyaW5nW10gaXRlbXMgPSBHZW5VdGlscworCQkJCQkJCQkuZXh0cmFjdChidWZmZXIubGVuZ3RoKCkgPCBCVUZGRVJfTUFYID8gYnVmZmVyCisJCQkJCQkJCQkJOiBidWZmZXIuc3Vic3RyaW5nKEJVRkZFUl9NSU4sCisJCQkJCQkJCQkJCQlCVUZGRVJfTUFYKSk7CisKKwkJCQkJCS8vIEdldCB0aGUgY291bnRyeSBuYW1lCisJCQkJCQlTdHJpbmcgY291bnRyeSA9IGl0ZW1zW0lTT0RhdGEuQ09VTlRSWV9OQU1FXTsKKworCQkJCQkJLy8gR2V0IHRoZSBJU08zMTY2LTEgaW5mbyBmb3IgdGhpcyBjb3VudHJ5CisJCQkJCQlpZiAoaXNvQ29kZSA9PSBudWxsKSB7CisJCQkJCQkJaXNvQ29kZSA9IEdlblV0aWxzLmdldElTT0NvZGUoY291bnRyeSwgY29kZUxpc3QpOworCQkJCQkJfQorCisJCQkJCQkvLyBSZWFkIGFuZCBrZWVwIGluIG1lbW9yeSBhIGxpc3Qgb2YgdGhlIGFyZWEgZGF0YQorCQkJCQkJLy8gZm9yIHRoaXMKKwkJCQkJCS8vIGNvdW50cnkuCisJCQkJCQlpZiAoYXJlYUxpc3QgPT0gbnVsbCkgeworCQkJCQkJCVN0cmluZyBuYW1lID0gYXJlYURhdGEgKyBpc29Db2RlLmdldE5hbWUoKQorCQkJCQkJCQkJKyAiX0FSRUEudHh0IjsgLy8kTk9OLU5MUy0xJAorCQkJCQkJCWFyZWFMaXN0ID0gR2VuVXRpbHMucG9wdWxhdGVMaXN0KG5hbWUpOworCQkJCQkJfQorCisJCQkJCQkvLyBHZXQgdGhlIHR5cGUgb2YgdGhlIGRhdGEgd2UgYXJlIHByb2Nlc3NpbmcuCisJCQkJCQlsZXZlbCA9IEdlblV0aWxzLmdldExldmVsKGl0ZW1zKTsKKworCQkJCQkJaWYgKGxldmVsICE9IDAgJiYgaXNvMkxpc3QgIT0gbnVsbCkgeworCQkJCQkJCS8vIExvYWQgdGhlIElTTyAzMTY2LTIgb2JqZWN0cyBmb3IgdGhpcyBjb3VudHJ5CisJCQkJCQkJaXNvMkxpc3QgPSBHZW5VdGlscy5sb2FkSVNPMihpc28zMTY2XzIpOworCQkJCQkJfQorCisJCQkJCQkvLyBUaGlzIHZhcmlhYmxlIGluZGljYXRlcyBhIHRyYW5zaXRpb24gaW4gb3VyIGRhdGEKKwkJCQkJCS8vIHByb2Nlc3NpbmcKKwkJCQkJCWJvb2xlYW4gdHJhbnNpdGlvbiA9IChsZXZlbCAhPSBvbGRsZXZlbCkgPyB0cnVlIDogZmFsc2U7CisKKwkJCQkJCS8vIFRoZSBjdXJyZW50IGVudGl0eSB3ZSBhcmUgZGVhbGluZyB3aXRoLgorCQkJCQkJLy8gQmFzZWQgb24gaXRzIGFkbWluIGxldmVsIGl0IGNhbiBiZSBhIGNvdW50cnksIGEKKwkJCQkJCS8vIGNvdW50eSwgZXRjOworCQkJCQkJU3RyaW5nIGN1cnJlbnQgPSBudWxsOworCisJCQkJCQkvLyBEZXNjcmlwdG9yIGZvciBjdXJyZW50IGVudHJ5LgorCQkJCQkJU3RyaW5nIGRlc2NyaXB0b3IgPSBudWxsOworCisJCQkJCQlpZiAodHJhbnNpdGlvbiA9PSB0cnVlKSB7CisKKwkJCQkJCQkvLyBpZiAob2xkbGV2ZWwgPj0gMCkgeworCQkJCQkJCS8vIFV0aWxMb2dnZXIubG9nSW5mb3JtYXRpb24oIlN1bSBhcmVhIGZvciBsZXZlbCAiCisJCQkJCQkJLy8gKyBsZXZlbCArICIgaXMgOiAiICsgYXJlYVN1bSk7CisJCQkJCQkJLy8gYXJlYVN1bSA9IDAuMDsKKwkJCQkJCQkvLyB9CisKKwkJCQkJCQkvLyBXcml0ZSBhbGwga2V5cyBpbiBvdXIgaGFzaCBtYXAKKwkJCQkJCQlpZiAoYXJlYVZhbHVlcy5pc0VtcHR5KCkgPT0gZmFsc2UpIHsKKwkJCQkJCQkJU2V0PFN0cmluZz4ga2V5cyA9IGFyZWFWYWx1ZXMua2V5U2V0KCk7CisJCQkJCQkJCUl0ZXJhdG9yIGl0ID0ga2V5cy5pdGVyYXRvcigpOworCQkJCQkJCQl3aGlsZSAoaXQuaGFzTmV4dCgpKSB7CisJCQkJCQkJCQlTdHJpbmcga2V5ID0gKFN0cmluZykgaXQubmV4dCgpOworCQkJCQkJCQkJU3RyaW5nIHZhbHVlID0gYXJlYVZhbHVlcy5nZXQoa2V5KTsKKwkJCQkJCQkJCW91dHB1dCA9IGtleSArICI6IiArIHZhbHVlICsgIlxuIjsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCQkJCQkJCQkKKwkJCQkJCQkJCUdlblV0aWxzLmFkZERhdGEocG9seWdvbkFyZWFGaWxlLCBvdXRwdXQpOworCQkJCQkJCQl9CisJCQkJCQkJCS8vIENsZWFyIG91ciBoYXNoIG1hcAorCQkJCQkJCQlhcmVhVmFsdWVzLmNsZWFyKCk7CisJCQkJCQkJfQorCisJCQkJCQkJLy8gS2VlcCB0cmFjayBvZiBwcmV2aW91cyBsZXZlbCBpbiBvcmRlciB0byBkZXRlY3QKKwkJCQkJCQkvLyB0cmFuc2l0aW9ucy4KKwkJCQkJCQlvbGRsZXZlbCA9IGxldmVsOworCQkJCQkJCS8vIFJlc2V0IG91ciByZXBlYXRlZCBoaXN0b3J5CisJCQkJCQkJaWYgKGVudHJ5TGlzdCAhPSBudWxsKSB7CisJCQkJCQkJCWVudHJ5TGlzdC5jbGVhcigpOworCQkJCQkJCX0KKwkJCQkJCQllbnRyeUxpc3QgPSBuZXcgQXJyYXlMaXN0PFN0cmluZz4oKTsKKwkJCQkJCQkvLyBSZXNldCBjb3VudGVyIG9mIFVOS05PV04gYW5kIE4uQS4gZW50cmllcy4KKwkJCQkJCQl1bmtDb3VudGVyID0gMTsKKwkJCQkJCQkvLyBDbG9zZSB0aGUgcHJldmlvdXMgZmlsZQorCQkJCQkJCWlmIChwb2x5Z29uQXJlYUZpbGUgIT0gbnVsbCkgeworCQkJCQkJCQlwb2x5Z29uQXJlYUZpbGUuY2xvc2UoKTsKKwkJCQkJCQl9CisKKwkJCQkJCQkvLyBJZiB0aGUgZGlyZWN0b3J5IGRvZXMgbm90IGV4aXN0IGZvciB0aGlzIGNvdW50cnksCisJCQkJCQkJLy8gY3JlYXRlIGl0IHVzaW5nIElTTyBhbHBoYTMgY29kZS4KKwkJCQkJCQlGaWxlIGNvdW50cnlEaXIgPSBuZXcgRmlsZShvdXRwdXREaXIKKwkJCQkJCQkJCSsgaXNvQ29kZS5nZXRBbHBoYTMoKSk7CisKKwkJCQkJCQlpZiAoY291bnRyeURpciAhPSBudWxsCisJCQkJCQkJCQkmJiBjb3VudHJ5RGlyLmV4aXN0cygpID09IGZhbHNlKSB7CisJCQkJCQkJCS8vIERpcmVjdG9yeSBkb2VzIG5vdCBleGlzdC4gQ3JlYXRlIGl0LgorCQkJCQkJCQljb3VudHJ5RGlyLm1rZGlyKCk7CisJCQkJCQkJfQorCisJCQkJCQkJLy8gQ3JlYXRlIHRoZSBmaWxlIG5hbWUgZm9yIHRoZSBuZXcKKwkJCQkJCQkvLyBwb2x5Z29uIGFyZWEgZmlsZS4KKwkJCQkJCQlmaWxlTmFtZSA9IGNvdW50cnlEaXIgKyAiXFwiICsgaXNvQ29kZS5nZXRBbHBoYTMoKSAvLyROT04tTkxTLTEkCisJCQkJCQkJCQkrICJfIiArIGxldmVsICsgIl9QT0xZQVJFQS50eHQiOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKKworCQkJCQkJCS8vIE9wZW4gdGhlIHdyaXRlciBmb3IgdGhlIG5ldyBwb2x5Z29uIGFyZWEgZmlsZQorCQkJCQkJCXBvbHlnb25BcmVhRmlsZSA9IEdlblV0aWxzLm9wZW5Xcml0ZXIoZmlsZU5hbWUpOworCisJCQkJCQl9IC8vIGlmKCB0cmFuc2l0aW9uID09IHRydWUgKQorCisJCQkJCQlzd2l0Y2ggKGxldmVsKSB7CisKKwkJCQkJCWNhc2UgRGF0YVR5cGVzLkxFVkVMXzA6CisJCQkJCQkJY3VycmVudCA9IGlzb0NvZGUuZ2V0QWxwaGEzKCk7CisJCQkJCQkJYnJlYWs7CisKKwkJCQkJCWNhc2UgRGF0YVR5cGVzLkxFVkVMXzE6CisJCQkJCQkJY3VycmVudCA9IGl0ZW1zW0lTT0RhdGEuQURNSU4xX05BTUVdLnRvVXBwZXJDYXNlKCk7CisJCQkJCQkJYnJlYWs7CisKKwkJCQkJCWNhc2UgRGF0YVR5cGVzLkxFVkVMXzI6CisJCQkJCQkJY3VycmVudCA9IGl0ZW1zW0lTT0RhdGEuQURNSU4yX05BTUVdLnRvVXBwZXJDYXNlKCk7CisJCQkJCQkJYnJlYWs7CisKKwkJCQkJCX0gLy8gc3dpdGNoCisKKwkJCQkJCS8vIEhhbmRsZSBVTktOT1dOIGFuZCBOLkEuIGVudHJpZXMgZGlmZmVyZW50bHkuCisJCQkJCQlpZiAoY3VycmVudC5lcXVhbHMoIlVOS05PV04iKSB8fCBjdXJyZW50LmVxdWFscygiTi5BLiIpKSB7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAorCisJCQkJCQkJaWYgKGxldmVsID09IDEpIHsKKwkJCQkJCQkJY3VycmVudCA9IGlzb0NvZGUuZ2V0QWxwaGEyKCkgKyAiLVVOSy0iIC8vJE5PTi1OTFMtMSQKKwkJCQkJCQkJCQkrIFN0cmluZy52YWx1ZU9mKHVua0NvdW50ZXIrKyk7CisKKwkJCQkJCQl9IGVsc2UgeworCQkJCQkJCQkvLyBMZXZlbCAyIGRhdGEuCisJCQkJCQkJCWN1cnJlbnQgPSBpc29Db2RlLmdldEFscGhhMygpICsgIi5MMi4iIC8vJE5PTi1OTFMtMSQKKwkJCQkJCQkJCQkrIFN0cmluZy52YWx1ZU9mKHVua0NvdW50ZXIrKyk7CisJCQkJCQkJfQorCQkJCQkJfQorCisJCQkJCQkvLyBXZSBnZXQgdGhlIGRlc2NyaXB0b3IgZm9yIGFkbWluaXN0cmF0aW9uIGVudGl0aWVzCisJCQkJCQkvLyBkaWZmZXJlbnRseSBiYXNlZCBvbiBpdHMgbGV2ZWwuCisJCQkJCQlpZiAobGV2ZWwgPT0gMikgeworCisJCQkJCQkJaWYgKGxleDFEYXRhU2V0ID09IG51bGwgJiYgbGV4MkRhdGFTZXQgPT0gbnVsbCkgeworCisJCQkJCQkJCS8vIENvbXBvc2UgdGhlIGZpbGUgbmFtZXMgZm9yIHRoZSBsZXggZmlsZXMgZm9yCisJCQkJCQkJCS8vIHRoaXMgY291bnRyeQorCQkJCQkJCQlsZXhBZG1pbjFGaWxlID0gbGV4RGlyICsgaXNvQ29kZS5nZXRBbHBoYTMoKQorCQkJCQkJCQkJCSsgIlxcIiArIGlzb0NvZGUuZ2V0QWxwaGEzKCk7IC8vJE5PTi1OTFMtMSQKKwkJCQkJCQkJbGV4QWRtaW4yRmlsZSA9IGxleEFkbWluMUZpbGU7CisJCQkJCQkJCWxleEFkbWluMUZpbGUgKz0gIl9BRE1JTjFfTEVYLnR4dCI7IC8vJE5PTi1OTFMtMSQKKwkJCQkJCQkJbGV4QWRtaW4yRmlsZSArPSAiX0FETUlOMl9MRVgudHh0IjsgLy8kTk9OLU5MUy0xJAorCisJCQkJCQkJCS8vIExvYWQgdGhlIGxleDEgYW5kIGxleDIgZmlsZXMgZm9yIHRoaXMKKwkJCQkJCQkJLy8gY291bnRyeS4KKwkJCQkJCQkJbGV4MURhdGFTZXQgPSBHZW5VdGlscworCQkJCQkJCQkJCS5wb3B1bGF0ZUxpc3QobGV4QWRtaW4xRmlsZSk7CisJCQkJCQkJCWxleDJEYXRhU2V0ID0gR2VuVXRpbHMKKwkJCQkJCQkJCQkucG9wdWxhdGVMaXN0KGxleEFkbWluMkZpbGUpOworCisJCQkJCQkJCS8vIENyZWF0ZSBhIG1ldGhvZCB0byBzZWFyY2ggZm9yIGFuIGl0ZW0gb24gYQorCQkJCQkJCQkvLyBsaXN0IG9mIGxleCBkYXRhIG9iamVjdHMuCisJCQkJCQkJCWxleDFMaXN0ID0gR2VuVXRpbHMuY3JlYXRlTGV4MUxpc3QobGV4MURhdGFTZXQpOworCQkJCQkJCQlsZXgyTGlzdCA9IEdlblV0aWxzLmNyZWF0ZUxleDJMaXN0KGxleDJEYXRhU2V0KTsKKworCQkJCQkJCX0KKworCQkJCQkJCS8vIENvbXBvc2UgdGhlIGxldmVsMiBkZXNjcmlwdG9yIHVzaW5nIHRoZSBsZXggZGF0YToKKworCQkJCQkJCS8vIFNURVAgMTogRG8gYSBsb29rIHVwIGluIHRoZSBsZXggMiBsaXN0cy4KKworCQkJCQkJCS8vIEdldCB0aGUgbGV4IDIgb2JqZWN0IGZvciB0aGUgY3VycmVudCBlbnRyeS4KKwkJCQkJCQlMZXgyT2JqIGxleDJDdXJyZW50ID0gR2VuVXRpbHMubGV4Mkxvb2t1cChsZXgyTGlzdCwKKwkJCQkJCQkJCWl0ZW1zW0lTT0RhdGEuQURNSU4xX05BTUVdLCBjdXJyZW50KTsKKworCQkJCQkJCS8vIEdldCB0aGUgbGV4IDEgb2JqZWN0IHRvIHdoaWNoIGxleDJDdXJyZW50IGJlbG9uZ3MKKwkJCQkJCQkvLyB0by4KKwkJCQkJCQlMZXgxT2JqIGxleDFDdXJyZW50ID0gR2VuVXRpbHMubGV4MUxvb2t1cChsZXgxTGlzdCwKKwkJCQkJCQkJCWxleDJDdXJyZW50LmdldEFkbWluMSgpKTsKKworCQkJCQkJCS8vIFNURVAgMjogcGllY2UgdG9nZXRoZXIgdGhlIElEIHVzaW5nIHRoZSBwcm9wZXIKKwkJCQkJCQkvLyBsZXggb2JqZWN0cy4KKwkJCQkJCQlkZXNjcmlwdG9yID0gbGV4MUN1cnJlbnQuZ2V0RGVzY3JpcHRvcigpCisJCQkJCQkJCQkrICItRyIgLy8kTk9OLU5MUy0xJAorCQkJCQkJCQkJKyBsZXgxQ3VycmVudC5nZXRGb3JtYXR0ZWRJbmRleCgpCisJCQkJCQkJCQkrIGxleDJDdXJyZW50LmdldEZvcm1hdHRlZEluZGV4KCk7CisKKwkJCQkJCQlpZiAoY3VycmVudC5jb250YWlucygiLkwyLiIpKSB7IC8vJE5PTi1OTFMtMSQKKwkJCQkJCQkJY3VycmVudCA9IGRlc2NyaXB0b3I7CisJCQkJCQkJfQorCisJCQkJCQl9IGVsc2UgeyAvLyBDb21wb3NlIGRlc2NyaXB0b3IgZm9yIGxldmVsIDEgYW5kIGxldmVsCisJCQkJCQkJLy8gMCBkYXRhLgorCQkJCQkJCS8vIEdldCB0aGUgZGVzY3JpcHRvciBmb3IgdGhpcyBlbnRpdHkuCisJCQkJCQkJZGVzY3JpcHRvciA9IEdlblV0aWxzLmdldElTTzJEZXNjcmlwdG9yKGlzbzJMaXN0LAorCQkJCQkJCQkJY3VycmVudCwgaXNvQ29kZS5nZXRBbHBoYTIoKSk7CisKKwkJCQkJCQkvLyBJZiB3ZSBjYW50IGZpbmQgdGhlIGRlc2NyaXB0b3IsIHRoZW4gbG9vayBpbiB0aGUKKwkJCQkJCQkvLyBmaXggbGlzdC4KKwkJCQkJCQlpZiAoZGVzY3JpcHRvci5lcXVhbHMoY3VycmVudCkgPT0gdHJ1ZSkgeworCQkJCQkJCQkvLyBMb29rIGZvciBhIGRlc2NyaXB0b3IgaW4gdGhlIGZpeCBmaWxlCisJCQkJCQkJCWRlc2NyaXB0b3IgPSBHZW5VdGlscy5nZXRGaXhDb2RlKGNvZGVmaXhMaXN0LAorCQkJCQkJCQkJCWN1cnJlbnQsIGl0ZW1zW0lTT0RhdGEuQ09VTlRSWV9OQU1FXSk7CisJCQkJCQkJfQorCisJCQkJCQl9CisKKwkJCQkJCS8vIENyZWF0ZSBhIFNURU0gcG9seWdvbiB3aXRoIHRoaXMgcG9seWdvbiBkYXRhCisJCQkJCQlTVEVNUG9seWdvbiBwb2x5Z29uID0gbmV3IFNURU1Qb2x5Z29uKGJ1ZmZlciwgbGV2ZWwpOworCisJCQkJCQkvLyBDaGVjayB0aGF0IHRoaXMgaXMgaW5kZWVkIGEgU1RFTSBwb2x5Z29uCisJCQkJCQlpZiAoaXNQb2x5Z29uKHBvbHlnb24pICE9IHRydWUpIHsKKwkJCQkJCQkvLyBOb3QgYSBwb2x5Z29uLCBpZ25vcmUuCisJCQkJCQkJY29udGludWU7CisJCQkJCQl9CisKKwkJCQkJCS8vIFdlIGtub3cgaXQgaXMgYSBwb2x5Z29uLCBidXQgbm93IGNoZWNrIHRoYXQgaXRzIG5vdAorCQkJCQkJLy8gZHVwbGljYXRlZC4KKwkJCQkJCWlmIChpc1BvbHlnb25EdXBsaWNhdGVkKHBvbHlnb25zLml0ZXJhdG9yKCksIHBvbHlnb24pID09IHRydWUpIHsKKwkJCQkJCQkvLyBZZXMsIGl0IGlzIGR1cGxpY2F0ZWQKKwkJCQkJCQljb250aW51ZTsKKwkJCQkJCX0KKworCQkJCQkJLy8gQWRkIHRoaXMgcG9seWdvbiB0byBvdXIgbGlzdCBvZiB1bmlxdWUgcG9seWdvbnMgc28KKwkJCQkJCS8vIHRoYXQgd2UgY2FuIGNoZWNrIGR1cGxpY2F0ZXMgb2YgdGhpcyBwb2x5Z29uIGxhdGVyLgorCQkJCQkJcG9seWdvbnMuYWRkKHBvbHlnb24pOworCisJCQkJCQlTdHJpbmcgYXJlYSA9IG51bGw7CisKKwkJCQkJCS8vIGFyZWFTdW0gKz0gZ2V0UG9seWdvbkFyZWEocG9seWdvbik7CisJCQkJCQlhcmVhID0gZm9ybWF0KGdldFBvbHlnb25BcmVhKHBvbHlnb24pKTsKKworCQkJCQkJLy8gRm9ybWF0IG91dHB1dCBkYXRhIGFzIGZvbGxvd3M6CisKKwkJCQkJCVN0cmluZyBjb250YWluZXIgPSBudWxsOworCisJCQkJCQlzd2l0Y2ggKGxldmVsKSB7CisKKwkJCQkJCWNhc2UgMDoKKwkJCQkJCQljb250YWluZXIgPSBjdXJyZW50OworCQkJCQkJCWJyZWFrOworCQkJCQkJCQorCQkJCQkJY2FzZSAxOgorCQkJCQkJCWNvbnRhaW5lciA9IGl0ZW1zW0lTT0RhdGEuQ09VTlRSWV9OQU1FXTsKKwkJCQkJCQlicmVhazsKKworCQkJCQkJY2FzZSAyOgorCQkJCQkJCWNvbnRhaW5lciA9IGl0ZW1zW0lTT0RhdGEuQURNSU4xX05BTUVdOworCQkJCQkJCWJyZWFrOworCisJCQkJCQl9CisKKwkJCQkJCVN0cmluZyBrZXkgPSBjb250YWluZXIKKwkJCQkJCQkJKyAiOiIgKyBjdXJyZW50ICsgIjoiICsgZGVzY3JpcHRvcjsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCisJCQkJCQkKKwkJCQkJCWlmIChhcmVhVmFsdWVzLmNvbnRhaW5zS2V5KGtleSkgPT0gZmFsc2UpIHsKKwkJCQkJCQlhcmVhVmFsdWVzLnB1dChrZXksIGFyZWEpOworCQkJCQkJfSBlbHNlIHsJCQkJCQkJCisJCQkJCQkJU3RyaW5nIHZhbCA9IGFyZWFWYWx1ZXMuZ2V0KGtleSk7CisJCQkJCQkJRG91YmxlIGFnZ3JlZ2F0ZUFyZWEgPSBEb3VibGUucGFyc2VEb3VibGUodmFsKQorCQkJCQkJCQkJKyBEb3VibGUucGFyc2VEb3VibGUoYXJlYSk7CisJCQkJCQkJYXJlYVZhbHVlcy5wdXQoa2V5LCBhZ2dyZWdhdGVBcmVhLnRvU3RyaW5nKCkpOworCQkJCQkJfQorCisJCQkJCQkvLyBvdXRwdXQgPSBjb250YWluZXIgKyAiOiIgKyBjdXJyZW50ICsgIjoiICsgZGVzY3JpcHRvcgorCQkJCQkJLy8gLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCisJCQkJCQkvLyArICI6IiArIGFyZWEgKyAiXG4iOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKKworCQkJCQkJLy8gR2VuVXRpbHMuYWRkRGF0YShwb2x5Z29uQXJlYUZpbGUsIG91dHB1dCk7CisKKwkJCQkJfSAvLyB3aGlsZSBsb29wCisKKwkJCQkJU2V0PFN0cmluZz4ga2V5cyA9IGFyZWFWYWx1ZXMua2V5U2V0KCk7CisJCQkJCUl0ZXJhdG9yIGl0ID0ga2V5cy5pdGVyYXRvcigpOworCQkJCQl3aGlsZSAoaXQuaGFzTmV4dCgpKSB7CisJCQkJCQlTdHJpbmcga2V5ID0gKFN0cmluZykgaXQubmV4dCgpOworCQkJCQkJU3RyaW5nIHZhbHVlID0gYXJlYVZhbHVlcy5nZXQoa2V5KTsKKwkJCQkJCVN0cmluZyBvdXRwdXQgPSBrZXkgKyAiOiIgKyB2YWx1ZSArICJcbiI7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAkJCQkJCQorCQkJCQkJR2VuVXRpbHMuYWRkRGF0YShwb2x5Z29uQXJlYUZpbGUsIG91dHB1dCk7CisJCQkJCX0KKwkJCQkJLy8gQ2xlYXIgb3VyIGhhc2ggbWFwCisJCQkJCWFyZWFWYWx1ZXMuY2xlYXIoKTsKKworCQkJCQkvLyBSZXNldCBhbGwgbGV4LXJlbGF0ZWQgaXRlbXMKKwkJCQkJaWYgKGxleDFEYXRhU2V0ICE9IG51bGwpIHsKKwkJCQkJCWxleDFEYXRhU2V0LmNsZWFyKCk7CisJCQkJCQlsZXgxRGF0YVNldCA9IG51bGw7CisJCQkJCX0KKwkJCQkJaWYgKGxleDJEYXRhU2V0ICE9IG51bGwpIHsKKwkJCQkJCWxleDJEYXRhU2V0LmNsZWFyKCk7CisJCQkJCQlsZXgyRGF0YVNldCA9IG51bGw7CisJCQkJCX0KKwkJCQkJaWYgKGxleDFMaXN0ICE9IG51bGwpIHsKKwkJCQkJCWxleDFMaXN0LmNsZWFyKCk7CisJCQkJCQlsZXgxTGlzdCA9IG51bGw7CisJCQkJCX0KKwkJCQkJaWYgKGxleDJMaXN0ICE9IG51bGwpIHsKKwkJCQkJCWxleDJMaXN0LmNsZWFyKCk7CisJCQkJCQlsZXgyTGlzdCA9IG51bGw7CisJCQkJCX0KKworCQkJCQlsZXhBZG1pbjFGaWxlID0gbnVsbDsKKwkJCQkJbGV4QWRtaW4yRmlsZSA9IG51bGw7CisKKwkJCQkJLy8gV2UgZG9udCBuZWVkIHRoZSBJU08gY29kZSBvYmplY3QgZm9yIHRoaXMgY291bnRyeQorCQkJCQkvLyBhbnltb3JlLCB3ZSBhcmUgZG9uZSBwcm9jZXNzaW5nIGl0LgorCQkJCQlpc29Db2RlID0gbnVsbDsKKworCQkJCQkvLyBDbGVhciB0aGUgYXJlYSBsaXN0LgorCQkJCQlpZiAoYXJlYUxpc3QgIT0gbnVsbCkgeworCQkJCQkJYXJlYUxpc3QuY2xlYXIoKTsKKwkJCQkJCWFyZWFMaXN0ID0gbnVsbDsKKwkJCQkJfQorCisJCQkJCS8vIENsb3NlIGFsbCBvcGVuIHJlc291cmNlcy4KKwkJCQkJcmVhZGVyLmNsb3NlKCk7CisKKwkJCQkJaWYgKHBvbHlnb25BcmVhRmlsZSAhPSBudWxsKSB7CisJCQkJCQkvLyBXcml0ZSBmb3JtYXR0ZWQgb3V0cHV0CisJCQkJCQlwb2x5Z29uQXJlYUZpbGUuY2xvc2UoKTsKKwkJCQkJCXBvbHlnb25BcmVhRmlsZSA9IG51bGw7CisJCQkJCQlVdGlsTG9nZ2VyLmxvZ0luZm9ybWF0aW9uKCJcdFx0R2VuZXJhdGVkIDogIiArIGZpbGVOYW1lKTsgLy8kTk9OLU5MUy0xJAorCQkJCQkJZmlsZU5hbWUgPSBudWxsOworCQkJCQl9CisKKwkJCQkJLy8gUnVuIGdhcmJhZ2UgY29sbGVjdGlvbgorCQkJCQkvL1N5c3RlbS5nYygpOworCQkJCX0KKworCQkJfSBjYXRjaCAoSU9FeGNlcHRpb24gZSkgeworCQkJCWUucHJpbnRTdGFja1RyYWNlKCk7CisJCQl9CisKKwkJfQorCisJfQorCisJLyoqCisJICogQ2hlY2sgdG8gc2VlIGlmIHRoaXMgaXMgYSByZWFsIHBvbHlnb24gKGkuZS4gY2xvc2VkKQorCSAqIAorCSAqIEBwYXJhbSBwb2x5Z29uCisJICogICAgICAgICAgICBBIFNURU0gcG9seWdvbgorCSAqIAorCSAqIEByZXR1cm4gdHJ1ZSBpZiB0aGUgcGFyYW1ldGVyICJwb2x5Z29uIiBpcyBhIFNURU0gcG9seWdvbgorCSAqLworCXByb3RlY3RlZCBib29sZWFuIGlzUG9seWdvbihTVEVNUG9seWdvbiBwb2x5Z29uKSB7CisKKwkJUG9pbnREYXRhIGluaXQgPSBwb2x5Z29uLmdldEluaXQoKTsKKwkJUG9pbnREYXRhIGxhc3QgPSBwb2x5Z29uLmdldExhc3QoKTsKKworCQlpZiAoaW5pdC5nZXRMdCgpICE9IGxhc3QuZ2V0THQoKSkgeworCQkJLy8gTm90IGEgcG9seWdvbgorCQkJcmV0dXJuIGZhbHNlOworCQl9IGVsc2UgaWYgKGluaXQuZ2V0TGcoKSAhPSBsYXN0LmdldExnKCkpIHsKKwkJCS8vIE5vdCBhIHBvbHlnb24KKwkJCXJldHVybiBmYWxzZTsKKwkJfQorCisJCS8vIFllcywgaXQgaXMgYSBwb2x5Z29uCisJCXJldHVybiB0cnVlOworCX0KKworCS8qKgorCSAqIENoZWNrIHRvIHNlZSBpZiB0aGlzIHBvbHlnb24gaXMgZHVwbGljYXRlZC4KKwkgKiAKKwkgKiBAcGFyYW0gcG9seWdvbgorCSAqICAgICAgICAgICAgYSBTVEVNIHBvbHlnb24KKwkgKiBAcGFyYW0gaXQKKwkgKiAgICAgICAgICAgIGFuIGl0ZXJhdG9yIG9uIHRoZSBwb2x5Z29uIGxpc3QKKwkgKiAKKwkgKiBAcmV0dXJuIHRydWUgaWYgdGhpcyBwb2x5Z29uIGlzIGFscmVhZHkgaW4gdGhlIGxpc3Qgb2Yga25vd24gcG9seWdvbnMKKwkgKi8KKwlwcm90ZWN0ZWQgYm9vbGVhbiBpc1BvbHlnb25EdXBsaWNhdGVkKEl0ZXJhdG9yIGl0LCBTVEVNUG9seWdvbiBwb2x5Z29uKSB7CisKKwkJaWYgKGl0Lmhhc05leHQoKSAhPSB0cnVlKSB7CisJCQlyZXR1cm4gZmFsc2U7CisJCX0KKworCQl3aGlsZSAoaXQuaGFzTmV4dCgpKSB7CisJCQlTVEVNUG9seWdvbiBjdXJyZW50ID0gKFNURU1Qb2x5Z29uKSBpdC5uZXh0KCk7CisJCQlpZiAoY3VycmVudC5zYW1lKHBvbHlnb24pID09IHRydWUpIHsKKwkJCQkvLyBOb3QgdW5pcXVlLCBpdCBpcyBkdXBsaWNhdGVkIHNvIGNvbmRpdGlvbiBpcyBmYWxzZS4KKwkJCQlyZXR1cm4gdHJ1ZTsKKwkJCX0KKwkJfQorCQlyZXR1cm4gZmFsc2U7CisJfQorCisJLyoqCisJICogZ2V0IHRoZSBhcmVhIGluIHNxdWFyZSBrbSBvZiBhIGNoaWxkIHBvbHlnb24gaW5zaWRlIGEgcGFyZW50IG9mIGtub3duCisJICogYXJlYSAoc3Ega20pLiBlLmcuLCB0aGUgZnJhY3Rpb25hbCBhcmVhIG9mIGEgc3RhdGUgb2NjdXBpZWQgYnkgYSBjb3VudHkuCisJICogCisJICogQHBhcmFtIGNoaWxkCisJICogICAgICAgICAgICBhIGxvY2F0aW9uLgorCSAqIAorCSAqIEBwYXJhbSBwYXJlbnQKKwkgKiAgICAgICAgICAgIHRoZSBjb250YWluZXIgZm9yIHRoZSBsb2NhdGlvbiAoY2hpbGQpLgorCSAqIAorCSAqIEBwYXJhbSBwYXJlbnRBcmVhSW5TcUttCisJICogICAgICAgICAgICBhcmVhIGZvciB0aGUgY29udGFpbmVyIGluIHNxdWFyZSBraWxvbWV0ZXJzLgorCSAqIAorCSAqIEByZXR1cm4gYXJlYSBvZiBjaGlsZCBpbiBzcSBrbQorCSAqLworCXB1YmxpYyBzdGF0aWMgZG91YmxlIGdldENoaWxkQXJlYVNxS20oU1RFTVBvbHlnb24gY2hpbGQsCisJCQlTVEVNUG9seWdvbiBwYXJlbnQsIGRvdWJsZSBwYXJlbnRBcmVhSW5TcUttKSB7CisJCWRvdWJsZSBhcmVhMiA9IGdldFBvbHlnb25BcmVhKGNoaWxkKTsKKwkJZG91YmxlIGFyZWExID0gZ2V0UG9seWdvbkFyZWEocGFyZW50KTsKKwkJZG91YmxlIHJlc3VsdCA9IGFyZWEyIC8gYXJlYTE7CisJCWFzc2VydCAocmVzdWx0IDw9IDEuMCk7CisJCXJlc3VsdCAqPSBwYXJlbnRBcmVhSW5TcUttOworCQlyZXR1cm4gcmVzdWx0OworCX0KKworCS8qKgorCSAqIGdldCB0aGUgYXJlYSBpbiBzcXVhcmUga20gb2YgYSBjaGlsZCBwb2x5Z29uIGluc2lkZSBhIHBhcmVudCBvZiBrbm93bgorCSAqIGFyZWEgKHNxIGttKS4gZS5nLiwgdGhlIGZyYWN0aW9uYWwgYXJlYSBvZiBhIHN0YXRlIG9jY3VwaWVkIGJ5IGEgY291bnR5LgorCSAqIAorCSAqIEBwYXJhbSBjaGlsZFNldAorCSAqICAgICAgICAgICAgYXMgc2V0IG9mIHBvbHlnb24gY2hpbGRyZW4gKG1heSBiZSBhIGdyb3VwIG9mIGlzbGFuZHMpCisJICogQHBhcmFtIHBhcmVudFNldAorCSAqICAgICAgICAgICAgYSBzZXQgb2YgcG9seWdvbiBwYXJlbnRzIChtYXkgYmUgYSBncm91cCBvZiBpc2xhbmRzKQorCSAqIAorCSAqIEBwYXJhbSBwYXJlbnRBcmVhSW5TcUttCisJICogICAgICAgICAgICBhcmVhIG9mIHRoZSBjb250YWluZXIgaW4gc3F1YXJlIGtpbG9tZXRlcnMuCisJICogCisJICogQHJldHVybiBhcmVhIG9mIGNoaWxkIGluIHNxIGttCisJICovCisJcHVibGljIHN0YXRpYyBkb3VibGUgZ2V0Q2hpbGRBcmVhU3FLbShTZXQgY2hpbGRTZXQsIFNldCBwYXJlbnRTZXQsCisJCQlkb3VibGUgcGFyZW50QXJlYUluU3FLbSkgeworCQlkb3VibGUgYXJlYTIgPSBnZXRQb2x5Z29uQXJlYShjaGlsZFNldCk7CisJCWRvdWJsZSBhcmVhMSA9IGdldFBvbHlnb25BcmVhKHBhcmVudFNldCk7CisJCWRvdWJsZSByZXN1bHQgPSBhcmVhMiAvIGFyZWExOworCQlhc3NlcnQgKHJlc3VsdCA8PSAxLjApOworCQlyZXN1bHQgKj0gcGFyZW50QXJlYUluU3FLbTsKKwkJcmV0dXJuIHJlc3VsdDsKKwl9CisKKwkvKioKKwkgKiBnZXQgdGhlIGFyZWEgb2YgYW55IFNURU0gcG9seWdvbiBpbiBwb2x5Z29uIGx0LGxnIHVuaXRzCisJICogCisJICogQHBhcmFtIHAKKwkgKiAgICAgICAgICAgIGEgU1RFTSBwb2x5Z29uCisJICogCisJICogQHJldHVybiB0aGUgYXJlYSBpbiBwb2x5Z29uIHVuaXRzIGZvciB0aGUgU1RFTSBwb2x5Z29uCisJICovCisJcHVibGljIHN0YXRpYyBkb3VibGUgZ2V0UG9seWdvbkFyZWEoU1RFTVBvbHlnb24gcCkgeworCisJCWRvdWJsZSBhcmVhID0gMC4wOworCQlEb3VibGVbXSBsdFBvaW50cyA9IHAuZ2V0THRQb2ludHMoKTsKKwkJRG91YmxlW10gbGdQb2ludHMgPSBwLmdldExnUG9pbnRzKCk7CisJCWludCBuID0gbHRQb2ludHMubGVuZ3RoOworCQlmb3IgKGludCBpID0gMDsgaSA8IG4gLSAxOyBpKyspIHsKKwkJCS8vIFV0aWxMb2dnZXIubG9nSW5mb3JtYXRpb24oIioqKioqKioqKioqKioqKioqKiAqKioqKioqKioqKioqKioqIik7CisJCQkvLyBVdGlsTG9nZ2VyLmxvZ0luZm9ybWF0aW9uKCIgbHRQb2ludHNbIiArIGkgKyAiXSA9ICIgKworCQkJLy8gbHRQb2ludHNbaV0uZG91YmxlVmFsdWUoKSApOworCQkJLy8gVXRpbExvZ2dlci5sb2dJbmZvcm1hdGlvbigiIGx0UG9pbnRzWyIgKyAoaSArIDEpICsgIl0gPSAiCisJCQkvLyArIGx0UG9pbnRzW2kgKyAxXS5kb3VibGVWYWx1ZSgpICk7CisJCQkvLyBVdGlsTG9nZ2VyLmxvZ0luZm9ybWF0aW9uKCIgbGdQb2ludHNbIiArIGkgKyAiXSA9ICIgKworCQkJLy8gbGdQb2ludHNbaV0uZG91YmxlVmFsdWUoKSk7CisJCQkvLyBVdGlsTG9nZ2VyLmxvZ0luZm9ybWF0aW9uKCIgbGdQb2ludHNbIiArIChpICsgMSkgKyAiXSA9ICIKKwkJCS8vICsgbGdQb2ludHNbaSArIDFdLmRvdWJsZVZhbHVlKCkpOworCQkJLy8gVXRpbExvZ2dlci5sb2dJbmZvcm1hdGlvbigiKioqKioqKioqKioqKioqKioqICoqKioqKioqKioqKioqKioiKTsKKwkJCWFyZWEgKz0gKGx0UG9pbnRzW2ldLmRvdWJsZVZhbHVlKCkgKiBsZ1BvaW50c1tpICsgMV0uZG91YmxlVmFsdWUoKSkKKwkJCQkJLSAobHRQb2ludHNbaSArIDFdLmRvdWJsZVZhbHVlKCkgKiBsZ1BvaW50c1tpXQorCQkJCQkJCS5kb3VibGVWYWx1ZSgpKTsKKwkJfSAvLyBuZXh0IHBvaW50CisJCS8vIFV0aWxMb2dnZXIubG9nSW5mb3JtYXRpb24oIkFyZWEgaXMgOiAiICsgYXJlYSk7CisJCWFyZWEgLz0gMi4wOworCisJCXJldHVybiBNYXRoLmFicyhhcmVhKTsKKwl9CisKKwkvKioKKwkgKiBnZXQgdGhlIGFyZWEgb2YgYW55IHBvbHlnb24gaW4gcG9seWdvbiB4LHkgdW5pdHMKKwkgKiAKKwkgKiBAcGFyYW0gcG9seVNldCAtCisJICogICAgICAgICAgICBhIHNldCBvZiBqYXZhLmF3dC5Qb2x5Z29uIGFsbCByZXByZXNlbnRpbmcgb25lIGxvY2F0aW9uIHRoaXMKKwkgKiAgICAgICAgICAgIG1pZ2h0IGJlIGEgY2x1c3RlciBvZiBpc2xhbmRzIHRoYXQgdG9nZXRoZXIgbWFrZSB1cCBhIHBsYWNlCisJICogCisJICogQHJldHVybiB0aGUgYXJlYSBpbiBwb2x5Z29uIHgseSB1bml0cworCSAqLworCXB1YmxpYyBzdGF0aWMgZG91YmxlIGdldFBvbHlnb25BcmVhKFNldCBwb2x5U2V0KSB7CisJCWRvdWJsZSBhcmVhID0gMC4wOworCQlJdGVyYXRvciBpdGVyID0gcG9seVNldC5pdGVyYXRvcigpOworCQl3aGlsZSAoaXRlci5oYXNOZXh0KCkpIHsKKwkJCWRvdWJsZSBpbm5lciA9IDAuMDsKKwkJCVBvbHlnb24gcCA9IChQb2x5Z29uKSBpdGVyLm5leHQoKTsKKwkJCWludFtdIHggPSBwLnhwb2ludHM7CisJCQlpbnRbXSB5ID0gcC55cG9pbnRzOworCQkJaW50IG4gPSB4Lmxlbmd0aDsKKwkJCWZvciAoaW50IGkgPSAwOyBpIDwgbiAtIDE7IGkrKykgeworCQkJCWlubmVyICs9ICh4W2ldICogeVtpICsgMV0pIC0gKHhbaSArIDFdICogeVtpXSk7CisJCQl9IC8vIG5leHQgcG9pbnQKKwkJCWlubmVyIC89IDIuMDsKKwkJCWFyZWEgKz0gTWF0aC5hYnMoaW5uZXIpOworCQl9IC8vIG5leHQgcG9seWdvbgorCQlyZXR1cm4gYXJlYTsKKwl9CisKKwkvKioKKwkgKiBGaW5kIHRoZSBwb3B1bGF0aW9uIHZhbHVlIGZvciBhIGdpdmVuIGVudGl0eS4KKwkgKiAKKwkgKiBAcGFyYW0gZW50aXR5CisJICogICAgICAgICAgICB0aGUgbG9jYXRpb24gZm9yIHdoaWNoIHdlIHdhbnQgdG8gZmluZCB0aGUgYXJlYQorCSAqIAorCSAqIEBwYXJhbSBlbnRpdHlDb250YWluZXIKKwkgKiAgICAgICAgICAgIGEgY29udGFpbmVyIGZvciB0aGUgbG9jYXRpb24gKGVudGl0eSkKKwkgKiAKKwkgKiBAcGFyYW0gbGV2ZWwKKwkgKiAgICAgICAgICAgIHRoZSBhZG1pbmlzdHJhdGl2ZSBsZXZlbAorCSAqIAorCSAqIEByZXR1cm4gdGhlIGFyZWEgdmFsdWUKKwkgKi8KKwlwcm90ZWN0ZWQgU3RyaW5nIGdldEFyZWEoU3RyaW5nIGVudGl0eSwgU3RyaW5nIGVudGl0eUNvbnRhaW5lciwgaW50IGxldmVsKSB7CisKKwkJZmluYWwgaW50IEVOVElUWSA9IDA7CisKKwkJZmluYWwgaW50IExFVkVMID0gMTsKKworCQlmaW5hbCBpbnQgQVJFQSA9IDI7CisKKwkJU3RyaW5nW10gYXJlYURhdGEgPSBudWxsOworCisJCUl0ZXJhdG9yIGl0ID0gYXJlYUxpc3QuaXRlcmF0b3IoKTsKKworCQlTdHJpbmcgZW50aXR5U3RyID0gZW50aXR5LnRvVXBwZXJDYXNlKCkudHJpbSgpOworCisJCWVudGl0eVN0ciA9IGVudGl0eVN0ci5yZXBsYWNlKCJcXHQiLCAiIik7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAorCisJCVN0cmluZyBlbnRpdHlDb250YWluZXJTdHIgPSBlbnRpdHlDb250YWluZXIudG9VcHBlckNhc2UoKTsKKworCQl3aGlsZSAoaXQuaGFzTmV4dCgpKSB7CisKKwkJCWFyZWFEYXRhID0gKChTdHJpbmcpIGl0Lm5leHQoKSkuc3BsaXQoIjoiKTsgLy8kTk9OLU5MUy0xJAorCisJCQlTdHJpbmdbXSBjb21wYXJlID0gbnVsbDsKKworCQkJLy8gR2V0IHRoZSBlbnRpdHkgbmFtZSBhbmQgcmVtb3ZlIGJsYW5rcworCQkJU3RyaW5nIGxvY2F0aW9uID0gYXJlYURhdGFbRU5USVRZXS50b1VwcGVyQ2FzZSgpLnRyaW0oKTsKKworCQkJbG9jYXRpb24gPSBsb2NhdGlvbi50b1VwcGVyQ2FzZSgpLnRyaW0oKTsKKworCQkJLy8gSGFuZGxlIEFsaWFzZXMgLS0gY29tcGxleCBzdHVmZiA6JAorCQkJaWYgKGxvY2F0aW9uLmNvbnRhaW5zKCJbIikpIHsgLy8kTk9OLU5MUy0xJAorCisJCQkJbG9jYXRpb24gPSBsb2NhdGlvbi5yZXBsYWNlKCJdIiwgIiIpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKKworCQkJCS8vIFRva2VuaXplCisJCQkJU3RyaW5nVG9rZW5pemVyIHRva2VucyA9IG5ldyBTdHJpbmdUb2tlbml6ZXIobG9jYXRpb24sICJbIik7IC8vJE5PTi1OTFMtMSQKKworCQkJCS8vIEdldCB0b2tlbnMgLT4gb3JkZXIgbWF0dGVycyBoZXJlIQorCQkJCWNvbXBhcmUgPSBuZXcgU3RyaW5nW3Rva2Vucy5jb3VudFRva2VucygpXTsKKwkJCQlpbnQgaSA9IDA7CisJCQkJd2hpbGUgKHRva2Vucy5oYXNNb3JlVG9rZW5zKCkpIHsKKwkJCQkJY29tcGFyZVtpKytdID0gdG9rZW5zLm5leHRUb2tlbigpLnRvVXBwZXJDYXNlKCkudHJpbSgpOworCQkJCX0KKwkJCX0KKworCQkJaWYgKGNvbXBhcmUgIT0gbnVsbCkgeworCQkJCWZvciAoaW50IGkgPSAwOyBpIDwgY29tcGFyZS5sZW5ndGg7IGkrKykgeworCQkJCQlpZiAoZW50aXR5U3RyLnJlcGxhY2UoIi0iLCAiICIpLmVxdWFscyggLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCisJCQkJCQkJY29tcGFyZVtpXS5yZXBsYWNlKCItIiwgIiAiKSkgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCisJCQkJCQkJfHwgY29tcGFyZVtpXS5lcXVhbHMoZW50aXR5U3RyICsgIi0xIikgLy8kTk9OLU5MUy0xJAorCQkJCQkJCXx8IGNvbXBhcmVbaV0uZXF1YWxzKGVudGl0eUNvbnRhaW5lclN0cikpIHsKKworCQkJCQkJLy8gQ2hlY2sgYm90aCBlbnRpdGllcyBiZWxvbmcgdG8gc2FtZSBsZXZlbAorCQkJCQkJaWYgKFN0cmluZy52YWx1ZU9mKGxldmVsKQorCQkJCQkJCQkuZXF1YWxzKGFyZWFEYXRhW0xFVkVMXS50cmltKCkpID09IGZhbHNlKSB7CisJCQkJCQkJLy8gSWdub3JlIDogc2FtZSBuYW1lICwgYnV0IGRpZmZlcmVudCBsZXZlbAorCQkJCQkJCWNvbnRpbnVlOworCQkJCQkJfQorCisJCQkJCQlyZXR1cm4gYXJlYURhdGFbQVJFQV0udHJpbSgpOworCisJCQkJCX0KKworCQkJCX0KKwkJCX0gZWxzZSBpZiAoZW50aXR5U3RyLmVxdWFscyhsb2NhdGlvbikKKwkJCQkJfHwgZW50aXR5U3RyLnJlcGxhY2UoIi0iLCAiICIpLmVxdWFscyhsb2NhdGlvbikgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCisJCQkJCXx8IGxvY2F0aW9uLmVxdWFscyhlbnRpdHlTdHIgKyAiLTEiKSkgeyAvLyROT04tTkxTLTEkCisKKwkJCQkvLyBDaGVjayBib3RoIGVudGl0aWVzIGJlbG9uZyB0byBzYW1lIGxldmVsCisJCQkJaWYgKFN0cmluZy52YWx1ZU9mKGxldmVsKS5lcXVhbHMoYXJlYURhdGFbTEVWRUxdLnRyaW0oKSkgPT0gZmFsc2UpIHsKKwkJCQkJLy8gSWdub3JlIDogc2FtZSBuYW1lICwgYnV0IGRpZmZlcmVudCBsZXZlbAorCQkJCQljb250aW51ZTsKKwkJCQl9CisJCQkJcmV0dXJuIGFyZWFEYXRhW0FSRUFdLnRyaW0oKTsKKwkJCX0KKworCQl9IC8vIHdoaWxlCisKKwkJcmV0dXJuIERFRkFVTFQ7CisJfQorCisJLyoqCisJICogVGhlIGV4ZWN1dGlvbiBlbnRyeSBwb2ludAorCSAqIAorCSAqIEBwYXJhbSBhcmdzCisJICovCisJcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgeworCQkvLyBmaW5hbCBpbnQgSVNPXzMxNjZfMSA9IDA7CisJCS8vIGZpbmFsIGludCBJU09fMzE2Nl8yID0gMTsKKwkJLy8gZmluYWwgaW50IEZJWF9GSUxFID0gMjsKKwkJLy8gZmluYWwgaW50IEFSRUFfREFUQSA9IDM7CisJCS8vIGZpbmFsIGludCBUQVJHRVRfTElTVCA9IDQ7CisJCS8vIGZpbmFsIGludCBMRVhfRElSID0gNTsKKwkJLy8gZmluYWwgaW50IE9VVFBVVF9ESVIgPSA2OworCQkvLyBmaW5hbCBpbnQgUEFSQU1TID0gNzsKKwkJLy8KKwkJLy8gaWYgKGFyZ3MubGVuZ3RoIDwgUEFSQU1TKSB7CisJCS8vIFV0aWxMb2dnZXIubG9nSW5mb3JtYXRpb24oIi0tV3JvbmcgYXJndW1lbnRzLS0iKTsgLy8kTk9OLU5MUy0xJAorCQkvLyBTeXN0ZW0ub3V0CisJCS8vIC5wcmludGxuKCJcdFRvIHJ1biwgcGxlYXNlIHByb3ZpZGUgdGhlIGZvbGxvd2luZyBhcmd1bWVudHMgOiAiKTsKKwkJLy8gLy8kTk9OLU5MUy0xJAorCQkvLyBVdGlsTG9nZ2VyLmxvZ0luZm9ybWF0aW9uKCJcdFx0IElTTyAzMTY2LTEgZmlsZSIpOyAvLyROT04tTkxTLTEkCisJCS8vIFV0aWxMb2dnZXIubG9nSW5mb3JtYXRpb24oIlx0XHQgSVNPIDMxNjYtMiBmaWxlIik7IC8vJE5PTi1OTFMtMSQKKwkJLy8gVXRpbExvZ2dlci5sb2dJbmZvcm1hdGlvbigiXHRcdCBJU08gZml4IGZpbGUiKTsgLy8kTk9OLU5MUy0xJAorCQkvLyBVdGlsTG9nZ2VyLmxvZ0luZm9ybWF0aW9uKCJcdFx0IEFyZWEgZGF0YSBmaWxlIik7IC8vJE5PTi1OTFMtMSQKKwkJLy8gVXRpbExvZ2dlci5sb2dJbmZvcm1hdGlvbigiXHRcdCBUYXJnZXQgY291bnRyaWVzIGZpbGUiKTsgLy8kTk9OLU5MUy0xJAorCQkvLyBVdGlsTG9nZ2VyLmxvZ0luZm9ybWF0aW9uKCJcdFx0IExleGljb2dyYXBoaWMgc29ydGluZyBkaXJlY3RvcnkiKTsKKwkJLy8gLy8kTk9OLU5MUy0xJCQKKwkJLy8gVXRpbExvZ2dlci5sb2dJbmZvcm1hdGlvbigiXHRcdCBPdXRwdXQgZGlyZWN0b3J5Iik7IC8vJE5PTi1OTFMtMSQKKwkJLy8gcmV0dXJuOworCQkvLyB9CisJCS8vCQkKKwkJLy8gUG9seWdvbkFyZWFHZW5lcmF0b3IgZ2VuID0gbmV3IFBvbHlnb25BcmVhR2VuZXJhdG9yKGFyZ3NbSVNPXzMxNjZfMV0sCisJCS8vIGFyZ3NbSVNPXzMxNjZfMl0sIGFyZ3NbRklYX0ZJTEVdLCBhcmdzW0FSRUFfREFUQV0sCisJCS8vIGFyZ3NbVEFSR0VUX0xJU1RdLCBhcmdzW0xFWF9ESVJdLCBhcmdzW09VVFBVVF9ESVJdKTsKKwkJLy8gZ2VuLnJ1bigpOworCisJCWZpbmFsIGludCBDT05GSUdfRklMRSA9IDA7CisJCWZpbmFsIGludCBQQVJBTVMgPSAxOworCisJCWlmIChhcmdzLmxlbmd0aCA8IFBBUkFNUykgeworCQkJVXRpbExvZ2dlci5sb2dJbmZvcm1hdGlvbigiXHRcdC0tV3JvbmcgYXJndW1lbnRzLS0iKTsgLy8kTk9OLU5MUy0xJAorCQkJU3lzdGVtLm91dAorCQkJCQkucHJpbnRsbigiXHRcdFRvIHJ1biwgcGxlYXNlIHByb3ZpZGUgdGhlIGZvbGxvd2luZyBhcmd1bWVudChzKSA6ICIpOyAvLyROT04tTkxTLTEkCisJCQlVdGlsTG9nZ2VyLmxvZ0luZm9ybWF0aW9uKCJcdFx0XHQgQ29uZmlndXJhdGlvbiBmaWxlIik7IC8vJE5PTi1OTFMtMSQKKwkJCVN5c3RlbS5leGl0KDEpOworCQl9CisKKwkJUG9seWdvbkFyZWFHZW5lcmF0b3IgZ2VuID0gbmV3IFBvbHlnb25BcmVhR2VuZXJhdG9yKGFyZ3NbQ09ORklHX0ZJTEVdKTsKKworCQlnZW4ucnVuKCk7CisJfQorCit9CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91dGlsaXR5L2dlbmVyYXRvcnMvUG9wdWxhdGlvbkRhdGFNaWdyYXRvci5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdXRpbGl0eS9nZW5lcmF0b3JzL1BvcHVsYXRpb25EYXRhTWlncmF0b3IuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYWZlOTlmCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdXRpbGl0eS9nZW5lcmF0b3JzL1BvcHVsYXRpb25EYXRhTWlncmF0b3IuamF2YQpAQCAtMCwwICsxLDQyNCBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkuZ2VuZXJhdG9yczsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcworICogcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZgorICogdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzCisgKiBhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqIAorICogQ29udHJpYnV0b3JzOiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqYXZhLmlvLkJ1ZmZlcmVkUmVhZGVyOworaW1wb3J0IGphdmEuaW8uRmlsZTsKK2ltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOworaW1wb3J0IGphdmEuaW8uUHJpbnRXcml0ZXI7CitpbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7CitpbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOworaW1wb3J0IGphdmEudXRpbC5MaXN0OworaW1wb3J0IGphdmEudXRpbC5NYXA7CitpbXBvcnQgamF2YS51dGlsLlNldDsKKworaW1wb3J0IGphdmF4LnhtbC5wYXJzZXJzLkRvY3VtZW50QnVpbGRlcjsKK2ltcG9ydCBqYXZheC54bWwucGFyc2Vycy5Eb2N1bWVudEJ1aWxkZXJGYWN0b3J5OworaW1wb3J0IGphdmF4LnhtbC5wYXJzZXJzLlBhcnNlckNvbmZpZ3VyYXRpb25FeGNlcHRpb247CisKK2ltcG9ydCBvcmcudzNjLmRvbS5Eb2N1bWVudDsKK2ltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OworaW1wb3J0IG9yZy53M2MuZG9tLk5vZGVMaXN0OworaW1wb3J0IG9yZy54bWwuc2F4LlNBWEV4Y2VwdGlvbjsKKworLyoqCisgKiBTVEVNIElJIERhdGEgTWlncmF0aW9uL0dlbmVyYXRpb24gVXRpbGl0aWVzIC0tIFRoaXMgaXMgYSB1dGlsaXR5IGNsYXNzIHRoYXQKKyAqIGV4dHJhY3RzIHRoZSBwb3B1bGF0aW9uIGRhdGEgZnJvbSB0aGUgU1RFTSBJIGRhdGEgZmlsZXMgYXMgYSBzaW1wbGUgdGV4dCBmaWxlCisgKiB0aGF0IHdpbGwgYmUgdXNlZCBpbiBTVEVNIElJLiBUaGUgcG9wdWxhdGlvbiBkYXRhIGV4dHJhY3RlZCBpcyB1c2VkIGR1cmluZworICogZ2VuZXJhdGlvbiBvZiBTVEVNIElJIHByb3BlcnRpZXMgZmlsZXMuCisgKiAKKyAqIEFkZCB0aGUgZm9sbG93aW5nIHZhbHVlcyB0byB0aGUgcnVuIGNvbmZpZ3VyYXRpb246CisgKiAKKyAqIEM6XHN0ZW1JSVxvcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHlcZGF0YU1pZ3JhdGlvblxpbnB1dFxJU08zMTY2LTFcSVNPMzE2Nl8xX2VuLnR4dAorICogQzpcc3RlbUlJXG9yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eVxkYXRhTWlncmF0aW9uXGlucHV0XG1pZ3JhdGlvblxjb3VudHJ5X25hbWVzLnR4dAorICogQzpcc3RlbUlJXG9yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eVxkYXRhTWlncmF0aW9uXGlucHV0XEFyZWFQb3B1bGF0aW9uRGF0YVwKKyAqIAorICovCisKK3B1YmxpYyBjbGFzcyBQb3B1bGF0aW9uRGF0YU1pZ3JhdG9yIHsKKworCS8qKgorCSAqIE91ciBzb3VyY2UgZmlsZXMgZm9yIElTTyAzMTY2LTEgY29kZXMgYW5kIGZvciB0aGUgbGlzdCBvZiB0YXJnZXQKKwkgKiBjb3VudHJpZXMuCisJICovCisKKwlwcml2YXRlIFN0cmluZyBpc29GaWxlID0gbnVsbDsKKworCXByaXZhdGUgU3RyaW5nIHRhcmdldEZpbGUgPSBudWxsOworCisJcHJpdmF0ZSBTdHJpbmcgb3V0cHV0RGlyID0gbnVsbDsKKworCVN0cmluZyBwb3B1bGF0aW9uTGlzdCA9IG51bGw7CisKKwkvKioKKwkgKiBMaXN0IGZvciBJU08gMzE2Ni0xIGNvZGVzIGFuZCB0YXJnZXQgY291bnRyaWVzLgorCSAqLworCisJTGlzdCB0YXJnZXRMaXN0ID0gbnVsbDsKKworCUxpc3QgY29kZUxpc3QgPSBudWxsOworCisJLyoqCisJICogQSBtYXAgY29udGFpbmluZyB0dXBsZXMgb2YgdGhlIGZvcm0gKGxvY2F0aW9uLGFyZWEpCisJICovCisJTWFwIHBvcHVsYXRpb25NYXAgPSBudWxsOworCisJTWFwIG5hbWVNYXAgPSBudWxsOworCisJLyoqCisJICogQ29uc3RydWN0b3IKKwkgKiAKKwkgKiBAcGFyYW0gaXNvRmlsZSAtCisJICogICAgICAgICAgICBkYXRhIGZpbGUgd2l0aCB0aGUgSVNPMzE2Ni0xIEFMUEhBXzIgYW5kIEFMUEhBXzMgY29kZXMuCisJICogQHBhcmFtIHRhcmdldEZpbGUgLQorCSAqICAgICAgICAgICAgZGF0YSBmaWxlIHdoZXJlIHdlIGZpbmQgYSBsaXN0IG9mIGNvdW50cmllcyBmb3IgZ2VuZXJhdGlvbiBvZgorCSAqICAgICAgICAgICAgdGhlaXIgY29ycmVzcG9uZGluZyBhcmVhLnByb3BlcnRpZXMgZmlsZXMuCisJICogQHBhcmFtIG91dHB1dERpciAtCisJICogICAgICAgICAgICB0aGUgb3V0cHV0IGRpcmVjdG9yeSBmb3IgdGhlIGZpbGVzIGdlbmVyYXRlZC4KKwkgKi8KKwlwdWJsaWMgUG9wdWxhdGlvbkRhdGFNaWdyYXRvcihTdHJpbmcgaXNvRmlsZSwgU3RyaW5nIHRhcmdldEZpbGUsCisJCQlTdHJpbmcgb3V0cHV0RGlyKSB7CisJCXRoaXMuaXNvRmlsZSA9IGlzb0ZpbGU7CisJCXRoaXMudGFyZ2V0RmlsZSA9IHRhcmdldEZpbGU7CisJCXRoaXMub3V0cHV0RGlyID0gb3V0cHV0RGlyOworCQlwb3B1bGF0aW9uTWFwID0gbmV3IEhhc2hNYXAoKTsKKwkJbmFtZU1hcCA9IG5ldyBIYXNoTWFwKCk7CisJfQorCisJLyoqCisJICogVGhpcyBtZXRob2Qgc2V0cyB1cCBhbmQgcnVucyB0aGlzIGdlbmVyYXRvci4KKwkgKiAKKwkgKi8KKwlwdWJsaWMgdm9pZCBydW4oKSB7CisJCS8vIFJlYWQgYW5kIGtlZXAgaW4gbWVtb3J5IGEgbGlzdCBvZiB0aGUgY291bnRyaWVzIHdlIHdhbnQuCisJCXRhcmdldExpc3QgPSBHZW5VdGlscy5wb3B1bGF0ZUxpc3QodGFyZ2V0RmlsZSk7CisKKwkJLy8gUmVhZCBhbmQga2VlcCBpbiBtZW1vcnkgYSBsaXN0IG9mIHRoZSBJU08zMTY2LTEgQUxQSEEyLCBBTFBIQTMsIGFuZAorCQkvLyBudW1lcmljIGNvZGVzLgorCQljb2RlTGlzdCA9IEdlblV0aWxzLnBvcHVsYXRlTGlzdChpc29GaWxlKTsKKworCQkvLyBOb3csIHByb2Nlc3MgZWFjaCBpdGVtIGluIHRoZSB0YXJnZXQgbGlzdC4KKwkJcHJvY2VzcygpOworCisJfQorCisJLyoqCisJICogTWV0aG9kIHRoYXQgbG9hZHMgdGhlIFhNTCBmaWxlIGNvbnRhaW5pbmcgdGhlIHRlc3RzIGZvciB0aGlzIGFjdG9yLgorCSAqIAorCSAqIEBwYXJhbSBmaWxlTmFtZQorCSAqICAgICAgICAgICAgdGhlIFhNTCB0ZXN0IGZpbGUKKwkgKiAKKwkgKiBAdGhyb3dzIEZpbGVOb3RGb3VuZEV4Y2VwdGlvbgorCSAqIEB0aHJvd3MgSU9FeGNlcHRpb24KKwkgKiAKKwkgKiBAcmV0dXJuIHRoZSByb290IGVsZW1lbnQgb2YgdGhlIFhNTCBkb2N1bWVudC4KKwkgKiAKKwkgKi8KKwlwcm90ZWN0ZWQgRWxlbWVudCBsb2FkWE1MKFN0cmluZyBmaWxlTmFtZSkgeworCisJCURvY3VtZW50IGRvYyA9IG51bGw7CisJCURvY3VtZW50QnVpbGRlciBkb2NCdWlsZGVyID0gbnVsbDsKKworCQl0cnkgeworCQkJRG9jdW1lbnRCdWlsZGVyRmFjdG9yeSBmYWN0b3J5ID0gRG9jdW1lbnRCdWlsZGVyRmFjdG9yeQorCQkJCQkubmV3SW5zdGFuY2UoKTsKKwkJCS8vIFhNTCBkb2N1bWVudCBidWlsZGVyCisJCQlkb2NCdWlsZGVyID0gZmFjdG9yeS5uZXdEb2N1bWVudEJ1aWxkZXIoKTsKKwkJCWRvYyA9IGRvY0J1aWxkZXIubmV3RG9jdW1lbnQoKTsKKwkJCS8vIExvYWQgWE1MIGZpbGUKKwkJCUZpbGUgeG1sRmlsZSA9IG5ldyBGaWxlKGZpbGVOYW1lKTsKKwkJCVN0cmluZyBmaWxlUGF0aCA9IHhtbEZpbGUuZ2V0QWJzb2x1dGVQYXRoKCk7CisJCQlVdGlsTG9nZ2VyLmxvZ0luZm9ybWF0aW9uKCJGaWxlIHBhdGggPSAiICsgZmlsZVBhdGgpOyAvLyROT04tTkxTLTEkCisJCQlkb2MgPSBkb2NCdWlsZGVyLnBhcnNlKGZpbGVQYXRoKTsKKwkJfSBjYXRjaCAoUGFyc2VyQ29uZmlndXJhdGlvbkV4Y2VwdGlvbiBwY2UpIHsKKwkJCVN5c3RlbS5vdXQKKwkJCQkJLnByaW50bG4oIkxvYWRYTUwoKTogIEVycm9yIGNvbmZpZ3VyaW5nIHhtbCBkb2N1bWVudCBidWlsZGVyICIgLy8kTk9OLU5MUy0xJAorCQkJCQkJCSsgcGNlLmdldE1lc3NhZ2UoKSk7CisJCX0gY2F0Y2ggKFNBWEV4Y2VwdGlvbiBlKSB7CisJCQllLnByaW50U3RhY2tUcmFjZSgpOworCQl9IGNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7CisJCQllLnByaW50U3RhY2tUcmFjZSgpOworCQl9CisKKwkJLy8gUmV0dXJuIHRoZSByb290IG9mIHRoaXMgWE1MIGRvY3VtZW50CisJCXJldHVybiBkb2MuZ2V0RG9jdW1lbnRFbGVtZW50KCk7CisJfQorCisJLyoqCisJICogUmVhZCBhbGwgYXJndW1lbnRzIGluIGEgZGF0YXNldCwgb25lIGJ5IG9uZS4KKwkgKiAKKwkgKiBAcGFyYW0gZmlsZQorCSAqICAgICAgICAgICAgYSBmaWxlbmFtZQorCSAqIAorCSAqIEBwYXJhbSBsZXZlbAorCSAqICAgICAgICAgICAgYWRtaW5zdHJhdGl2ZSBsZXZlbAorCSAqIAorCSAqIEB0aHJvd3MgRmlsZU5vdEZvdW5kRXhjZXB0aW9uCisJICogQHRocm93cyBJT0V4Y2VwdGlvbgorCSAqIAorCSAqIEByZXR1cm4gYSBtYXAgd2l0aCB0dXBsZXMgKEtleT1JRCxWYWx1ZT1Qb3B1bGF0aW9ucykKKwkgKiAKKwkgKiAKKwkgKi8KKwlwcm90ZWN0ZWQgTWFwIGV4dHJhY3RQb3B1bGF0aW9uRGF0YShTdHJpbmcgZmlsZSwgaW50IGxldmVsKSB7CisKKwkJTWFwPFN0cmluZywgU3RyaW5nPiBwTWFwID0gbmV3IEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+KCk7CisKKwkJRWxlbWVudCByb290ID0gbG9hZFhNTChmaWxlKTsKKwkJLy8gZ2V0IGFsbCB0aGUgZWxlbWVudHMKKwkJTm9kZUxpc3QgbmwgPSByb290LmdldEVsZW1lbnRzQnlUYWdOYW1lKCIqIik7IC8vJE5PTi1OTFMtMSQKKworCQlmb3IgKGludCBpID0gMDsgaSA8IG5sLmdldExlbmd0aCgpOyBpKyspIHsKKwkJCUVsZW1lbnQgZWwgPSAoRWxlbWVudCkgbmwuaXRlbShpKTsKKwkJCVN0cmluZyBuYW1lID0gZWwuZ2V0QXR0cmlidXRlKCJsb2NhdGlvbklkIikudG9VcHBlckNhc2UoKTsgLy8kTk9OLU5MUy0xJAorCQkJU3RyaW5nIHBvcHVsYXRpb24gPSBlbC5nZXRBdHRyaWJ1dGUoInBvcHVsYXRpb24iKTsgLy8kTk9OLU5MUy0xJAorCQkJLy8gU3RyaW5nIGRlbnNpdHkgPSBlbC5nZXRBdHRyaWJ1dGUoInBvcHVsYXRpb25fZGVuc2l0eSIpOworCQkJLy8gLy8kTk9OLU5MUy0xJAorCQkJcE1hcC5wdXQobmFtZSwgcG9wdWxhdGlvbik7CisKKwkJfQorCisJCXJldHVybiBwTWFwOworCX0KKworCS8vIHByb3RlY3RlZCBTdHJpbmcgZXh0cmFjdFBvcHVsYXRpb25EYXRhKFN0cmluZyBmaWxlLCBpbnQgbGV2ZWwpIHsKKwkvLworCS8vIFN0cmluZyBwb3B1bGF0aW9uTGlzdCA9IG51bGw7CisJLy8KKwkvLyBNYXA8U3RyaW5nLCBTdHJpbmc+IHBvcHVsYXRpb25NYXAgPSBuZXcgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4oKTsKKwkvLworCS8vIEVsZW1lbnQgcm9vdCA9IGxvYWRYTUwoZmlsZSk7CisJLy8gLy8gZ2V0IGFsbCB0aGUgZWxlbWVudHMKKwkvLyBOb2RlTGlzdCBubCA9IHJvb3QuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIioiKTsgLy8kTk9OLU5MUy0xJAorCS8vCisJLy8gZm9yIChpbnQgaSA9IDA7IGkgPCBubC5nZXRMZW5ndGgoKTsgaSsrKSB7CisJLy8gRWxlbWVudCBlbCA9IChFbGVtZW50KSBubC5pdGVtKGkpOworCS8vIFN0cmluZyBuYW1lID0gZWwuZ2V0QXR0cmlidXRlKCJsb2NhdGlvbklkIikudG9VcHBlckNhc2UoKTsgLy8kTk9OLU5MUy0xJAorCS8vIFN0cmluZyBwb3B1bGF0aW9uID0gZWwuZ2V0QXR0cmlidXRlKCJwb3B1bGF0aW9uIik7IC8vJE5PTi1OTFMtMSQKKwkvLyBTdHJpbmcgZGVuc2l0eSA9IGVsLmdldEF0dHJpYnV0ZSgicG9wdWxhdGlvbl9kZW5zaXR5Iik7IC8vJE5PTi1OTFMtMSQKKwkvLyAvLyBTdG9yZSAoY29uY2F0ZW5hdGUpCisJLy8gaWYgKHBvcHVsYXRpb25MaXN0ID09IG51bGwpIHsKKwkvLyBwb3B1bGF0aW9uTGlzdCA9IG5hbWUgKyAiOiIgKyBTdHJpbmcudmFsdWVPZihsZXZlbCkgKyAiOiIgLy8kTk9OLU5MUy0xJAorCS8vIC8vJE5PTi1OTFMtMiQKKwkvLyArIHBvcHVsYXRpb24gKyAiOiIgKyBkZW5zaXR5ICsgIlxuIjsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCisJLy8gfSBlbHNlIHsKKwkvLyBwb3B1bGF0aW9uTGlzdCArPSBuYW1lICsgIjoiICsgU3RyaW5nLnZhbHVlT2YobGV2ZWwpICsgIjoiIC8vJE5PTi1OTFMtMSQKKwkvLyAvLyROT04tTkxTLTIkCisJLy8gKyBwb3B1bGF0aW9uICsgIjoiICsgZGVuc2l0eSArICJcbiI7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAorCS8vIH0KKwkvLyB9CisJLy8KKwkvLyByZXR1cm4gcG9wdWxhdGlvbkxpc3Q7CisJLy8gfQorCisJLyoqCisJICogUmVhZCBhbGwgYXJndW1lbnRzIGluIGEgZGF0YXNldCwgb25lIGJ5IG9uZS4KKwkgKiAKKwkgKiBAcGFyYW0gdGhlCisJICogICAgICAgICAgICBmaWxlbmFtZQorCSAqIAorCSAqIEB0aHJvd3MgRmlsZU5vdEZvdW5kRXhjZXB0aW9uCisJICogQHRocm93cyBJT0V4Y2VwdGlvbgorCSAqIAorCSAqIEByZXR1cm4gYSBtYXAgd2l0aCB0dXBsZXMgKEtleT1JRCxWYWx1ZT1OYW1lKQorCSAqIAorCSAqLworCXByb3RlY3RlZCBNYXAgZXh0cmFjdE5hbWVEYXRhKFN0cmluZyBmaWxlKSB7CisKKwkJTWFwPFN0cmluZywgU3RyaW5nPiBuYW1lTWFwID0gbmV3IEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+KCk7CisKKwkJRWxlbWVudCByb290ID0gbG9hZFhNTChmaWxlKTsKKwkJLy8gZ2V0IGFsbCB0aGUgZWxlbWVudHMKKwkJTm9kZUxpc3QgbmwgPSByb290LmdldEVsZW1lbnRzQnlUYWdOYW1lKCIqIik7IC8vJE5PTi1OTFMtMSQKKworCQlmb3IgKGludCBpID0gMDsgaSA8IG5sLmdldExlbmd0aCgpOyBpKyspIHsKKwkJCUVsZW1lbnQgcmVnaW9ucyA9IChFbGVtZW50KSBubC5pdGVtKGkpOworCQkJTm9kZUxpc3QgbG9jYXRpb25zID0gcmVnaW9ucy5nZXRFbGVtZW50c0J5VGFnTmFtZSgibG9jYXRpb24iKTsgLy8kTk9OLU5MUy0xJAorCQkJZm9yIChpbnQgaiA9IDA7IGogPCBsb2NhdGlvbnMuZ2V0TGVuZ3RoKCk7IGorKykgeworCQkJCUVsZW1lbnQgZWwgPSAoRWxlbWVudCkgbG9jYXRpb25zLml0ZW0oaik7CisJCQkJU3RyaW5nIGlkID0gZWwuZ2V0QXR0cmlidXRlKCJpZCIpLnRvVXBwZXJDYXNlKCk7IC8vJE5PTi1OTFMtMSQKKwkJCQlTdHJpbmcgbmFtZSA9IGVsLmdldEF0dHJpYnV0ZSgibmFtZSIpLnRvVXBwZXJDYXNlKCk7IC8vJE5PTi1OTFMtMSQKKworCQkJCS8vIFN0b3JlIGJvdGggdmFsdWVzIGZvciBsYXRlciBsb29rdXAuIFVzZSB1cHBlcmNhc2UuCisJCQkJbmFtZU1hcC5wdXQoaWQsIG5hbWUpOworCQkJfQorCQl9CisKKwkJcmV0dXJuIG5hbWVNYXA7CisJfQorCisJLyoqCisJICogRmluZCBhbGwgbWF0Y2hlcyBiZXR3ZWVuIGxvY2F0aW9ucyBhbmQgZm9ybSBhIG5ldyB0dXBsZSB3aXRoIHRoZSBsb2NhdGlvbgorCSAqIG5hbWUgYW5kIGFyZWEgdmFsdWUgZm9yIGVhY2ggbG9jYXRpb24uCisJICogCisJICogQHBhcmFtIG0xCisJICogICAgICAgICAgICBBIG1hcCBjb250YWluaW5nIHR1cGxlcyBvZiB0aGUgZm9ybSAobG9jYXRpb24scG9wdWxhdGlvbikKKwkgKiBAcGFyYW0gbTIKKwkgKiAgICAgICAgICAgIEEgbWFwIGNvbnRhaW5pbmcgdHVwbGVzIG9mIHRoZSBmb3JtIChsb2NhdGlvbixuYW1lKQorCSAqIEBwYXJhbSBsZXZlbAorCSAqICAgICAgICAgICAgVGhlIGFkbWluaXN0cmF0aXZlIGxldmVsCisJICogCisJICogc0ByZXR1cm4gQSB0dXBsZSBvZiB0aGUgZm9ybSAobmFtZTphcmVhKQorCSAqLworCXByb3RlY3RlZCBTdHJpbmcgbWF0Y2goTWFwIG0xLCBNYXAgbTIsIGludCBsZXZlbCkgeworCisJCVN0cmluZyByZXN1bHQgPSBudWxsOworCQlTZXQga2V5cyA9IG0xLmtleVNldCgpOworCQlJdGVyYXRvciBpdDEgPSBrZXlzLml0ZXJhdG9yKCk7CisKKwkJd2hpbGUgKGl0MS5oYXNOZXh0KCkpIHsKKworCQkJU3RyaW5nIGtleSA9IChTdHJpbmcpIGl0MS5uZXh0KCk7CisKKwkJCWlmIChtMi5jb250YWluc0tleShrZXkpKSB7IC8vIFRvIGJlIG1vcmUgc3RyaWN0LCBjaGFuZ2UgdGhpcyB0bworCQkJCS8vIG0yLmVxdWFscyhrZXkpCisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSB7CisKKwkJCQkJaWYgKCgoU3RyaW5nKSBtMi5nZXQoa2V5KSkuc3RhcnRzV2l0aCgiOiIpKSB7IC8vJE5PTi1OTFMtMSQKKwkJCQkJCVV0aWxMb2dnZXIubG9nSW5mb3JtYXRpb24oIiIgLy8kTk9OLU5MUy0xJAorCQkJCQkJCQkrIG0yLmdldChrZXkpKTsKKwkJCQkJfQorCisJCQkJCXJlc3VsdCA9IG0yLmdldChrZXkpICsgIjoiICsgU3RyaW5nLnZhbHVlT2YobGV2ZWwpICsgIjoiIC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAorCQkJCQkJCSsgbTEuZ2V0KGtleSkgKyAiXG4iOyAvLyROT04tTkxTLTEkCisJCQkJfSBlbHNlIHsKKwkJCQkJcmVzdWx0ICs9IG0yLmdldChrZXkpICsgIjoiICsgU3RyaW5nLnZhbHVlT2YobGV2ZWwpICsgIjoiIC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAorCQkJCQkJCSsgbTEuZ2V0KGtleSkgKyAiXG4iOyAvLyROT04tTkxTLTEkCisJCQkJfQorCQkJfQorCQl9CisJCXJldHVybiByZXN1bHQ7CisJfQorCisJLyoqCisJICogUHJvY2VzcyBvdXIgZ2xvYmFsIGxpc3Qgb2YgY291bnRyaWVzLgorCSAqIAorCSAqLworCXB1YmxpYyB2b2lkIHByb2Nlc3MoKSB7CisKKwkJUHJpbnRXcml0ZXIgb3V0cHV0RmlsZSA9IG51bGw7CisKKwkJLy8gQWRtaW4gbGV2ZWxzIGZvciBlYWNoIGNvdW50cnkKKwkJLy8gVE8gRE86IGZpeCB0aGVzZSBoYXJkY29kZWQgdmFyaWFibGVzLiBTaG91bGQgYmUgc2V0IHZpYSBwYXJhbWV0ZXJzLgorCQlmaW5hbCBTdHJpbmcgcG9wdWxhdGlvblBhdGggPSAiQzpcXEVjbGlwc2VQcm9qZWN0c1xcd29ya3NwYWNlMlxcR3JlZW5TY3JlZW5cXEluc3RhbGxUZW1wbGF0ZVxcUG9wdWxhdGlvbnNcXCI7IC8vJE5PTi1OTFMtMSQKKwkJZmluYWwgU3RyaW5nIG5hbWVQYXRoID0gIkM6XFxFY2xpcHNlUHJvamVjdHNcXHdvcmtzcGFjZTJcXEdyZWVuU2NyZWVuXFxJbnN0YWxsVGVtcGxhdGVcXE1hcHNcXCI7IC8vJE5PTi1OTFMtMSQKKworCQlmaW5hbCBpbnQgTEVWRUxTID0gMTsKKworCQlmb3IgKGludCBpID0gMDsgaSA8IHRhcmdldExpc3Quc2l6ZSgpOyBpKyspIHsKKworCQkJLy8gR2V0IHRoZSBuZXh0IGNvdW50cnkgaW4gdGhlIGxpc3QuCisJCQlTdHJpbmcgY291bnRyeSA9ICgoU3RyaW5nKSB0YXJnZXRMaXN0LmdldChpKSkudHJpbSgpOworCisJCQkvLyBHZXQgdGhlIElTTzMxNjYtMSBpbmZvIGZvciB0aGlzIGNvdW50cnkKKwkJCUlTT0NvZGUxIGlzb0NvZGUgPSBHZW5VdGlscy5nZXRJU09Db2RlKGNvdW50cnksIGNvZGVMaXN0KTsKKworCQkJaWYgKGlzb0NvZGUgPT0gbnVsbCkgeworCQkJCVV0aWxMb2dnZXIubG9nSW5mb3JtYXRpb24oImlzbyBjb2RlIGlzIG51bGwgZm9yICIgKyBjb3VudHJ5KTsgLy8kTk9OLU5MUy0xJAorCQkJCWNvbnRpbnVlOworCQkJfQorCisJCQlVdGlsTG9nZ2VyLmxvZ0luZm9ybWF0aW9uKCJDb3VudHJ5IGlzIDogICIgKyBjb3VudHJ5ICsgIiBjb2RlID0gIiAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKKwkJCQkJKyBpc29Db2RlLmdldE5hbWUoKSk7CisKKwkJCS8vIE9wZW4gb3V0cHV0IGZpbGUKKwkJCWlmIChvdXRwdXRGaWxlID09IG51bGwpIHsKKwkJCQlTdHJpbmcgZmlsZU5hbWUgPSBvdXRwdXREaXI7CisJCQkJZmlsZU5hbWUgKz0gaXNvQ29kZS5nZXROYW1lKCkgKyAiX1BPUFVMQVRJT04udHh0IjsgLy8kTk9OLU5MUy0xJAorCQkJCW91dHB1dEZpbGUgPSBHZW5VdGlscy5vcGVuV3JpdGVyKGZpbGVOYW1lKTsKKwkJCX0KKworCQkJZm9yIChpbnQgaiA9IDA7IGogPD0gTEVWRUxTOyBqKyspIHsKKworCQkJCS8vIE9wZW4gdGhlIHBvcHVsYXRpb24gZmlsZQorCQkJCVN0cmluZyBwb3B1bGF0aW9uRmlsZSA9IHBvcHVsYXRpb25QYXRoOworCQkJCXBvcHVsYXRpb25GaWxlICs9IGlzb0NvZGUuZ2V0QWxwaGEzKCkgKyAiX0h1bWFuXyIgKyBqICsgIi54bWwiOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKKwkJCQlCdWZmZXJlZFJlYWRlciBwb3B1bGF0aW9uUmVhZGVyID0gR2VuVXRpbHMKKwkJCQkJCS5vcGVuUmVhZGVyKHBvcHVsYXRpb25GaWxlKTsKKwkJCQlpZiAocG9wdWxhdGlvblJlYWRlciA9PSBudWxsKSB7CisJCQkJCVN5c3RlbS5vdXQKKwkJCQkJCQkucHJpbnRsbigiRmlsZSBub3QgZm91bmQgZm9yIDogIiArIHBvcHVsYXRpb25GaWxlKTsgLy8kTk9OLU5MUy0xJAorCQkJCQljb250aW51ZTsKKwkJCQl9CisKKwkJCQkvLyBPcGVuIHRoZSBuYW1lcyBmaWxlCisJCQkJU3RyaW5nIG5hbWVGaWxlID0gbmFtZVBhdGg7CisJCQkJbmFtZUZpbGUgKz0gaXNvQ29kZS5nZXRBbHBoYTMoKSArICJfTmFtZXNfIiArIGogKyAiLnhtbCI7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAorCQkJCUJ1ZmZlcmVkUmVhZGVyIG5hbWVSZWFkZXIgPSBHZW5VdGlscy5vcGVuUmVhZGVyKG5hbWVGaWxlKTsKKwkJCQlpZiAobmFtZVJlYWRlciA9PSBudWxsKSB7CisJCQkJCVV0aWxMb2dnZXIubG9nSW5mb3JtYXRpb24oIkZpbGUgbm90IGZvdW5kIGZvciA6ICIgKyBuYW1lRmlsZSk7IC8vJE5PTi1OTFMtMSQKKwkJCQkJY29udGludWU7CisJCQkJfQorCisJCQkJLy8gTG9hZCB0aGUgWE1MIGFyZWEgYW5kIG5hbWVzIGRvY3VtZW50cyBhbmQgZXh0cmFjdCB0aGUgZGF0YSB3ZQorCQkJCS8vIG5lZWQKKwkJCQl0cnkgeworCQkJCQkvLyBwb3B1bGF0aW9uTGlzdCA9IGV4dHJhY3RQb3B1bGF0aW9uRGF0YShwb3B1bGF0aW9uRmlsZSwKKwkJCQkJLy8gaik7CisJCQkJCXBvcHVsYXRpb25NYXAgPSBleHRyYWN0UG9wdWxhdGlvbkRhdGEocG9wdWxhdGlvbkZpbGUsIGopOworCQkJCQluYW1lTWFwID0gZXh0cmFjdE5hbWVEYXRhKG5hbWVGaWxlKTsKKwkJCQkJLy8gbm93IGRvIHRoZSBtYXRjaGluZ3MKKwkJCQkJU3RyaW5nIHR1cGxlID0gbWF0Y2gocG9wdWxhdGlvbk1hcCwgbmFtZU1hcCwgaik7CisKKwkJCQkJLy8gd3JpdGUgbWF0Y2ggdG8gb3V0cHV0IGZpbGUKKwkJCQkJLy8gb3V0cHV0RmlsZS53cml0ZShwb3B1bGF0aW9uTGlzdC50b1N0cmluZygpKTsKKwkJCQkJb3V0cHV0RmlsZS53cml0ZSh0dXBsZSk7CisKKwkJCQkJLy8gQ2xvc2UgdGhlIHJlc291cmNlcworCQkJCQlwb3B1bGF0aW9uUmVhZGVyLmNsb3NlKCk7CisJCQkJCW5hbWVSZWFkZXIuY2xvc2UoKTsKKwkJCQkJcG9wdWxhdGlvblJlYWRlciA9IG51bGw7CisJCQkJCW5hbWVSZWFkZXIgPSBudWxsOworCQkJCQlwb3B1bGF0aW9uRmlsZSA9IG51bGw7CisJCQkJCW5hbWVGaWxlID0gbnVsbDsKKworCQkJCQkvLyBSdW4gZ2FyYmFnZSBjb2xsZWN0aW9uCisJCQkJCS8vU3lzdGVtLmdjKCk7CisKKwkJCQl9IGNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7CisJCQkJCWUucHJpbnRTdGFja1RyYWNlKCk7CisJCQkJCWNvbnRpbnVlOworCQkJCX0KKwkJCX0gLy8gZm9yIGoKKworCQkJaWYgKG91dHB1dEZpbGUgIT0gbnVsbCkgeworCQkJCW91dHB1dEZpbGUuY2xvc2UoKTsKKwkJCQlvdXRwdXRGaWxlID0gbnVsbDsKKwkJCX0KKwkJfQorCX0KKworCS8qKgorCSAqIE1haW4gZXhlY3V0aW9uIGVudHJ5IHBvaW50LgorCSAqIAorCSAqIEBwYXJhbSBhcmdzCisJICovCisJcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgeworCQlmaW5hbCBpbnQgSVNPX0ZJTEUgPSAwOworCQlmaW5hbCBpbnQgQ09VTlRSWV9GSUxFID0gMTsKKwkJZmluYWwgaW50IE9VVFBVVF9ESVIgPSAyOworCQlmaW5hbCBpbnQgUEFSQU1TID0gMzsKKworCQlpZiAoYXJncy5sZW5ndGggPCBQQVJBTVMpIHsKKwkJCVV0aWxMb2dnZXIubG9nSW5mb3JtYXRpb24oIi0tV3JvbmcgYXJndW1lbnRzLS0iKTsgLy8kTk9OLU5MUy0xJAorCQkJU3lzdGVtLm91dAorCQkJCQkucHJpbnRsbigiXHRUbyBydW4sIHBsZWFzZSBwcm92aWRlIHRoZSBmb2xsb3dpbmcgYXJndW1lbnRzIDogIik7IC8vJE5PTi1OTFMtMSQKKwkJCVV0aWxMb2dnZXIubG9nSW5mb3JtYXRpb24oIlx0XHQgSVNPIDMxNjYtMSBmaWxlIik7IC8vJE5PTi1OTFMtMSQJCQkJCQkKKwkJCVV0aWxMb2dnZXIubG9nSW5mb3JtYXRpb24oIlx0XHQgVGFyZ2V0IGNvdW50cmllcyBmaWxlIik7IC8vJE5PTi1OTFMtMSQJCQkKKwkJCVV0aWxMb2dnZXIubG9nSW5mb3JtYXRpb24oIlx0XHQgT3V0cHV0IGRpcmVjdG9yeSIpOyAvLyROT04tTkxTLTEkCQkJCQkJCQkKKwkJCXJldHVybjsKKwkJfQorCisJCVBvcHVsYXRpb25EYXRhTWlncmF0b3IgbWlncmF0b3IgPSBuZXcgUG9wdWxhdGlvbkRhdGFNaWdyYXRvcigKKwkJCQlhcmdzW0lTT19GSUxFXSwgYXJnc1tDT1VOVFJZX0ZJTEVdLCBhcmdzW09VVFBVVF9ESVJdKTsKKwkJbWlncmF0b3IucnVuKCk7CisJfQorCit9CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91dGlsaXR5L2dlbmVyYXRvcnMvUG9wdWxhdGlvbkdlbmVyYXRvci5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdXRpbGl0eS9nZW5lcmF0b3JzL1BvcHVsYXRpb25HZW5lcmF0b3IuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NGE5ZDA4Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdXRpbGl0eS9nZW5lcmF0b3JzL1BvcHVsYXRpb25HZW5lcmF0b3IuamF2YQpAQCAtMCwwICsxLDExNTggQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5LmdlbmVyYXRvcnM7CisKK2ltcG9ydCBqYXZhLmlvLkJ1ZmZlcmVkUmVhZGVyOworaW1wb3J0IGphdmEuaW8uRmlsZTsKK2ltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOworaW1wb3J0IGphdmEuaW8uUHJpbnRXcml0ZXI7CitpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKK2ltcG9ydCBqYXZhLnV0aWwuSGFzaFNldDsKK2ltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CitpbXBvcnQgamF2YS51dGlsLlNldDsKK2ltcG9ydCBqYXZhLnV0aWwuU3RyaW5nVG9rZW5pemVyOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzCisgKiBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mCisgKiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMKKyAqIGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICogCisgKiBDb250cmlidXRvcnM6IElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqCisgKiBTVEVNIElJIERhdGEgTWlncmF0aW9uL0dlbmVyYXRpb24gVXRpbGl0aWVzIC0tIFRoaXMgY2xhc3MgaXMgYSB1dGlsaXR5IHRvCisgKiBnZW5lcmF0ZSB0aGUgcG9wdWxhdGlvbi5wcm9wZXJ0aWVzIGZpbGVzLgorICogCisgKiAKKyAqIFRvIGNvbmZpZ3VyZSwgc2VlIGNvbmZpZ3VyYXRpb24gZmlsZSA6CisgKiBvcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvY29uZmlndXJhdGlvbi9Qb3B1bGF0aW9uR2VuZXJhdG9yLmNvbmZpZworICogCisgKiAKKyAqIFRvIHJ1biwgYWRkIHBhdGggdG8gY29uZmlndXJhdGlvbiBmaWxlIGluIHRoZSBydW4gcHJvZmlsZSAoaS5lLgorICogQzpcc3RlbUlJXG9yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eVxjb25maWd1cmF0aW9uXFBvcHVsYXRpb25HZW5lcmF0b3IuY29uZmlnKQorICogCisgKiBTRVQgVk1BUkdTIFRPIDogLVhtczEwMjRtIC1YbXgxMDI0bQorICogCisgKi8KKworcHVibGljIGNsYXNzIFBvcHVsYXRpb25HZW5lcmF0b3IgeworCisJcHJpdmF0ZSBTdHJpbmcgaXNvMzE2Nl8xID0gbnVsbDsKKworCXByaXZhdGUgU3RyaW5nIGlzbzMxNjZfMiA9IG51bGw7CisKKwlwcml2YXRlIFN0cmluZyBmaXhGaWxlID0gbnVsbDsKKworCXByaXZhdGUgU3RyaW5nIHRhcmdldEZpbGUgPSBudWxsOworCisJcHJpdmF0ZSBTdHJpbmcgcG9wdWxhdGlvbkRhdGEgPSBudWxsOworCisJcHJpdmF0ZSBTdHJpbmcgcG9wdWxhdGlvblByb2ZpbGUgPSBudWxsOworCisJcHJpdmF0ZSBTdHJpbmcgbGV4RGlyID0gbnVsbDsKKworCXByaXZhdGUgU3RyaW5nIG91dHB1dERpciA9IG51bGw7CisKKwlwcml2YXRlIFN0cmluZyB3b3Jrc3BhY2UgPSBudWxsOworCisJLyoqCisJICogTGlzdHMgZm9yIElTTyAzMTY2LTEgY29kZXMsIHRhcmdldCBjb3VudHJpZXMsIGFuZCBwb3B1bGF0aW9uIGRhdGEuCisJICovCisKKwlMaXN0IHRhcmdldExpc3QgPSBudWxsOworCisJTGlzdCBjb2RlTGlzdCA9IG51bGw7CisKKwlMaXN0IGNvZGVmaXhMaXN0ID0gbnVsbDsKKworCUxpc3QgcG9wdWxhdGlvbkxpc3QgPSBudWxsOworCisJTGlzdCBwb3B1bGF0aW9uUHJvZmlsZUxpc3QgPSBudWxsOworCisJTGlzdCB1c2FMZXZlbDJMaXN0ID0gbnVsbDsKKworCS8qKgorCSAqIEhhc2ggc2V0IGZvciBzdG9yaW5nIHRoZSBzb3VyY2UgVVJMcyByZWxldmFudCB0byBhcmVhIGRhdGEuCisJICovCisJU2V0PFN0cmluZz4gdXJsU2V0ID0gbnVsbDsKKworCS8qKgorCSAqIEhhc2ggbWFwIHRvIGtlZXAgdHJhY2sgb2Ygd2hpY2ggc291cmNlcyB3aWxsIGJlIHNob3duIGNvbW1lbnRlZCBvdXQgYW5kCisJICogd2hpY2ggd2lsbCBhcHBlYXIgYWN0aXZlLgorCSAqLworCUhhc2hNYXA8U3RyaW5nLCBCb29sZWFuPiB1cmxTdGF0dXMgPSBudWxsOworCisJLyoqCisJICogU3RyaW5nIHVzZWQgdG8gaW5kaWNhdGUgZGVmYXVsdCB2YWx1ZSBmb3IgdW5rbm93biBhcmVhcy4KKwkgKi8KKwlTdHJpbmcgREVGQVVMVCA9ICIwIjsgLy8kTk9OLU5MUy0xJAorCisJLyoqCisJICogQ29uc3RydWN0b3IKKwkgKiAKKwkgKiBAcGFyYW0gaXNvMzE2Nl8xIC0KKwkgKiAgICAgICAgICAgIGRhdGEgZmlsZSB3aXRoIHRoZSBJU08zMTY2LTEgQUxQSEFfMiBhbmQgQUxQSEFfMyBjb2Rlcy4KKwkgKiBAcGFyYW0gaXNvMzE2Nl8yIC0KKwkgKiAgICAgICAgICAgIGZpbGUgd2l0aCB0aGUgSVNPMzE2Ni0yIGRhdGEgdXNlZCBmb3IgZ2VuZXJhdGluZyB0aGUgSURzLgorCSAqIEBwYXJhbSBmaXhGaWxlIC0KKwkgKiAgICAgICAgICAgIGZpbGUgY29udGFpbmluZyBtaXNzaW5nIElTTzMxNjYtMiBjb2RlcworCSAqIEBwYXJhbSBwb3B1bGF0aW9uRGF0YSAtCisJICogICAgICAgICAgICB0aGUgZGlyZWN0b3J5IGNvbnRhaW5pbmcgcG9wdWxhdGlvbiBkYXRhIGZvciBhbGwgY291bnRyaWVzCisJICogQHBhcmFtIHBvcHVsYXRpb25Qcm9maWxlIC0KKwkgKiAgICAgICAgICAgIHRoZSBkaXJlY3RvcnkgY29udGFpbmluZyBwb3B1bGF0aW9uIHByb2ZpbGUgZGF0YSBmb3IgYWxsCisJICogICAgICAgICAgICBjb3VudHJpZXMKKwkgKiBAcGFyYW0gdGFyZ2V0RmlsZSAtCisJICogICAgICAgICAgICBkYXRhIGZpbGUgd2hlcmUgd2UgZmluZCBhIGxpc3Qgb2YgY291bnRyaWVzIGZvciBnZW5lcmF0aW9uIG9mCisJICogICAgICAgICAgICB0aGVpciBjb3JyZXNwb25kaW5nIGFyZWEucHJvcGVydGllcyBmaWxlcy4KKwkgKiBAcGFyYW0gbGV4RGlyCisJICogICAgICAgICAgICBmb2xkZXIgY29udGFpbmluZyBsZXhpY29ncmFwaGljYWxseSBzb3J0ZWQgZmlsZXMKKwkgKiBAcGFyYW0gb3V0cHV0RGlyIC0KKwkgKiAgICAgICAgICAgIHRoZSBvdXRwdXQgZGlyZWN0b3J5IGZvciB0aGUgZmlsZXMgZ2VuZXJhdGVkLgorCSAqIAorCSAqLworCS8vIHB1YmxpYyBQb3B1bGF0aW9uR2VuZXJhdG9yKFN0cmluZyBpc28zMTY2XzEsIFN0cmluZyBpc28zMTY2XzIsCisJLy8gU3RyaW5nIGZpeEZpbGUsIFN0cmluZyBwb3B1bGF0aW9uRGF0YSwgU3RyaW5nIHBvcHVsYXRpb25Qcm9maWxlLAorCS8vIFN0cmluZyB0YXJnZXRGaWxlLCBTdHJpbmcgbGV4RGlyLCBTdHJpbmcgb3V0cHV0RGlyKSB7CisJLy8gLy8gU2V0IHZhbHVlcyBvZiBnbG9iYWwgdmFyaWFibGVzLgorCS8vIHRoaXMuaXNvMzE2Nl8xID0gaXNvMzE2Nl8xOworCS8vIHRoaXMuaXNvMzE2Nl8yID0gaXNvMzE2Nl8yOworCS8vIHRoaXMuZml4RmlsZSA9IGZpeEZpbGU7CisJLy8gdGhpcy50YXJnZXRGaWxlID0gdGFyZ2V0RmlsZTsKKwkvLyB0aGlzLm91dHB1dERpciA9IG91dHB1dERpcjsKKwkvLyB0aGlzLnBvcHVsYXRpb25EYXRhID0gcG9wdWxhdGlvbkRhdGE7CisJLy8gdGhpcy5wb3B1bGF0aW9uUHJvZmlsZSA9IHBvcHVsYXRpb25Qcm9maWxlOworCS8vIHRoaXMubGV4RGlyID0gbGV4RGlyOworCS8vIHRhcmdldExpc3QgPSBudWxsOworCS8vIC8vIFNldCB0aGUgVVJMIElEcyB0aGF0IGFyZSByZWxldmFudCBmb3IgYXJlYSBkYXRhLgorCS8vIGluaXRQb3B1bGF0aW9uVVJMU2V0KCk7CisJLy8gLy8gU2V0IHdoaWNoIFVSTHMgYXJlIGFjdGl2ZSBhbmQgd2hpY2ggb25lcyBzaG91bGQgYmUgY29tbWVudGVkIG91dC4KKwkvLyBzZXRVUkxTdGF0dXMoKTsKKwkvLyB9CisJLyoqCisJICogQHBhcmFtIGNvbmZpZ0ZpbGUKKwkgKi8KKwlwdWJsaWMgUG9wdWxhdGlvbkdlbmVyYXRvcihTdHJpbmcgY29uZmlnRmlsZSkgeworCisJCS8vIExvYWQgYWxsIGNvbmZpZ3VyYXRpb24gdmFyaWFibGVzCisJCUhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+IHZhcnMgPSBHZW5VdGlscy5sb2FkQ29uZmlnRmlsZShjb25maWdGaWxlKTsKKworCQlTZXQ8U3RyaW5nPiBrZXlzID0gdmFycy5rZXlTZXQoKTsKKwkJSXRlcmF0b3IgaXQgPSBrZXlzLml0ZXJhdG9yKCk7CisJCXdoaWxlIChpdC5oYXNOZXh0KCkpIHsKKwkJCVN0cmluZyB2YXIgPSAoU3RyaW5nKSBpdC5uZXh0KCk7CisKKwkJCS8vIEFzc2lnbiB2YWx1ZXMgdG8gY29uZmlndXJhdGlvbiB2YXJpYWJsZXMgOgorCQkJaWYgKHZhci5lcXVhbHMoIldPUktTUEFDRSIpKSB7IC8vJE5PTi1OTFMtMSQKKwkJCQl3b3Jrc3BhY2UgPSB2YXJzLmdldCh2YXIpOworCQkJfSBlbHNlIGlmICh2YXIuZXF1YWxzKCJJU08zMTY2XzEiKSkgeyAvLyROT04tTkxTLTEkCisJCQkJaXNvMzE2Nl8xID0gdmFycy5nZXQodmFyKTsKKwkJCX0gZWxzZSBpZiAodmFyLmVxdWFscygiSVNPMzE2Nl8yIikpIHsgLy8kTk9OLU5MUy0xJAorCQkJCWlzbzMxNjZfMiA9IHZhcnMuZ2V0KHZhcik7CisJCQl9IGVsc2UgaWYgKHZhci5lcXVhbHMoIklTT19GSVgiKSkgeyAvLyROT04tTkxTLTEkCisJCQkJZml4RmlsZSA9IHZhcnMuZ2V0KHZhcik7CisJCQl9IGVsc2UgaWYgKHZhci5lcXVhbHMoIkFSRUFfUE9QIikpIHsgLy8kTk9OLU5MUy0xJAorCQkJCXBvcHVsYXRpb25EYXRhID0gdmFycy5nZXQodmFyKTsKKwkJCX0gZWxzZSBpZiAodmFyLmVxdWFscygiUE9QX1BST0ZJTEVTIikpIHsgLy8kTk9OLU5MUy0xJAorCQkJCXBvcHVsYXRpb25Qcm9maWxlID0gdmFycy5nZXQodmFyKTsKKwkJCX0gZWxzZSBpZiAodmFyLmVxdWFscygiVEFSR0VUX0xJU1QiKSkgeyAvLyROT04tTkxTLTEkCisJCQkJdGFyZ2V0RmlsZSA9IHZhcnMuZ2V0KHZhcik7CisJCQl9IGVsc2UgaWYgKHZhci5lcXVhbHMoIkxFWF9ESVIiKSkgeyAvLyROT04tTkxTLTEkCisJCQkJbGV4RGlyID0gdmFycy5nZXQodmFyKTsKKwkJCX0gZWxzZSBpZiAodmFyLmVxdWFscygiUFJPUEVSVElFU19PVVRQVVQiKSkgeyAvLyROT04tTkxTLTEkCisJCQkJb3V0cHV0RGlyID0gdmFycy5nZXQodmFyKTsKKwkJCX0KKworCQl9IC8vIHdoaWxlCisKKwkJLy8gVGhlIHdvcmtzcGFjZSB2YXJpYWJsZSBzaG91bGQgZW5kIHdpdGggYSBzbGFzaCBjaGFyYWN0ZXIKKwkJaWYgKHdvcmtzcGFjZS5lbmRzV2l0aCgiXFwiKSA9PSBmYWxzZSkgeyAvLyROT04tTkxTLTEkCisJCQl3b3Jrc3BhY2UgKz0gIlxcIjsgLy8kTk9OLU5MUy0xJAorCQl9CisKKwkJU3RyaW5nIHBhdGggPSB3b3Jrc3BhY2UgKyBHZW5Db25zdGFudHMuUEFSQU1TX0RJUjsKKworCQkvLyBTZXQgcmVtYWluaW5nIGNvbmZpZyB2YXJzIHVzaW5nIFdPUktTUEFDRSAod29ya3NwYWNlIHJlbGF0aXZlKQorCQlpZiAoaXNvMzE2Nl8xID09IG51bGwpIHsKKwkJCWlzbzMxNjZfMSA9IHBhdGggKyBHZW5Db25zdGFudHMuSVNPMzE2Nl8xX0ZJTEU7CisJCX0KKwkJaWYgKGlzbzMxNjZfMiA9PSBudWxsKSB7CisJCQlpc28zMTY2XzIgPSBwYXRoICsgR2VuQ29uc3RhbnRzLklTTzMxNjZfMl9GSUxFOworCQl9CisJCWlmIChmaXhGaWxlID09IG51bGwpIHsKKwkJCWZpeEZpbGUgPSBwYXRoICsgR2VuQ29uc3RhbnRzLklTT0ZJWF9GSUxFOworCQl9CisJCWlmIChwb3B1bGF0aW9uRGF0YSA9PSBudWxsKSB7CisJCQlwb3B1bGF0aW9uRGF0YSA9IHBhdGggKyBHZW5Db25zdGFudHMuQVJFQV9QT1BVTEFUSU9OX0RJUjsKKwkJfQorCQlpZiAocG9wdWxhdGlvblByb2ZpbGUgPT0gbnVsbCkgeworCQkJcG9wdWxhdGlvblByb2ZpbGUgPSBwYXRoICsgR2VuQ29uc3RhbnRzLlBPUFVMQVRJT05fUFJPRklMRVM7CisJCX0KKwkJaWYgKHRhcmdldEZpbGUgPT0gbnVsbCkgeworCQkJdGFyZ2V0RmlsZSA9IHBhdGggKyBHZW5Db25zdGFudHMuQ09VTlRSSUVTX0xJU1Q7CisJCX0KKwkJaWYgKGxleERpciA9PSBudWxsKSB7CisJCQlsZXhEaXIgPSBwYXRoICsgR2VuQ29uc3RhbnRzLkxFWF9ESVI7CisJCX0KKwkJaWYgKG91dHB1dERpciA9PSBudWxsKSB7CisJCQlvdXRwdXREaXIgPSB3b3Jrc3BhY2UgKyBHZW5Db25zdGFudHMuUFJPUEVSVElFU19PVVRQVVRfRElSOworCQl9CisKKwkJdGFyZ2V0TGlzdCA9IG51bGw7CisJCS8vIFNldCB0aGUgVVJMIElEcyB0aGF0IGFyZSByZWxldmFudCBmb3IgYXJlYSBkYXRhLgorCQlpbml0UG9wdWxhdGlvblVSTFNldCgpOworCQkvLyBTZXQgd2hpY2ggVVJMcyBhcmUgYWN0aXZlIGFuZCB3aGljaCBvbmVzIHNob3VsZCBiZSBjb21tZW50ZWQgb3V0LgorCQlzZXRVUkxTdGF0dXMoKTsKKworCX0KKworCS8qKgorCSAqIFNldHMgdGhlIFVSTCBJRHMgcmVsZXZhbnQgZm9yIGFyZWEgZGF0YS4gVGhpcyBjYW4gYmUgZGlmZmVyZW50IGZvcgorCSAqIGRpZmZlcmVudCB0eXBlcyBvZiBkYXRhLiBGb3IgZXhhbXBsZSwgZm9yIHBvcHVsYXRpb24gZGF0YSwgd2UgYXJlCisJICogaW50ZXJlc3RlZCBvbiBJRCA9IENJQQorCSAqLworCXByb3RlY3RlZCB2b2lkIGluaXRQb3B1bGF0aW9uVVJMU2V0KCkgeworCQl1cmxTZXQgPSBuZXcgSGFzaFNldDxTdHJpbmc+KCk7CisJCXVybFNldC5hZGQobmV3IFN0cmluZygiVVNDRU5TVVNQT1AiKSk7IC8vJE5PTi1OTFMtMSQKKwkJdXJsU2V0LmFkZChuZXcgU3RyaW5nKCJVU0NFTlNVU1BVRVJUT1JJQ08iKSk7IC8vJE5PTi1OTFMtMSQKKwkJdXJsU2V0LmFkZChuZXcgU3RyaW5nKCJDSVRZUE9QIikpOyAvLyROT04tTkxTLTEkCisJCXVybFNldC5hZGQobmV3IFN0cmluZygiQ0lBIikpOyAvLyROT04tTkxTLTEkCisJCXVybFNldC5hZGQobmV3IFN0cmluZygiUE9QIikpOyAvLyROT04tTkxTLTEkCisJCXVybFNldC5hZGQobmV3IFN0cmluZygiUE9QMiIpKTsgLy8kTk9OLU5MUy0xJAorCQl1cmxTZXQuYWRkKG5ldyBTdHJpbmcoIkRFTU9HUkFGSUEiKSk7IC8vJE5PTi1OTFMtMSQKKwkJdXJsU2V0LmFkZChuZXcgU3RyaW5nKCJTVEFUT0lEUyIpKTsgLy8kTk9OLU5MUy0xJAorCQl1cmxTZXQuYWRkKG5ldyBTdHJpbmcoIlVOSVRFRE5BVElPTlMiKSk7IC8vJE5PTi1OTFMtMSQKKwl9CisKKwkvKioKKwkgKiBTZXQgd2hpY2ggVVJMIGFwcGVhcnMgYXMgdW5jb21tZW50ZWQgb3IgQUNUSVZFIGFuZCB3aGljaCBvbmVzIGFwcGVhciBhcworCSAqIGNvbW1lbnRlZCBvdXQgb3IgU0VDT05EQVJZLiBPbmx5IFVSTCBzaG91bGQgYmUgYWN0aXZlLiBBbGwgb3RoZXJzIHNob3VsZAorCSAqIGFwcGVhciBjb21tZW50ZWQuCisJICogCisJICovCisJcHJvdGVjdGVkIHZvaWQgc2V0VVJMU3RhdHVzKCkgeworCQl1cmxTdGF0dXMgPSBuZXcgSGFzaE1hcDxTdHJpbmcsIEJvb2xlYW4+KCk7CisJCS8vIFRoaXMgd2lsbCBiZSB0aGUgYWN0aXZlIFVSTC4KKwkJdXJsU3RhdHVzLnB1dCgiQ0lBIiwgbmV3IEJvb2xlYW4odHJ1ZSkpOyAvLyROT04tTkxTLTEkCisJCS8vIEFsbCBvdGhlciBVUkxzIGFwcGVhciBhcyBjb21tZW50ZWQgb3V0LCBzZWNvbmRhcnkuCisJCXVybFN0YXR1cy5wdXQoIlVTQ0VOU1VTUE9QIiwgbmV3IEJvb2xlYW4oZmFsc2UpKTsgLy8kTk9OLU5MUy0xJAorCQl1cmxTdGF0dXMucHV0KCJVU0NFTlNVU1BVRVJUT1JJQ08iLCBuZXcgQm9vbGVhbihmYWxzZSkpOyAvLyROT04tTkxTLTEkCisJCXVybFN0YXR1cy5wdXQoIkNJVFlQT1AiLCBuZXcgQm9vbGVhbihmYWxzZSkpOyAvLyROT04tTkxTLTEkCisJCXVybFN0YXR1cy5wdXQoIkNJQSIsIG5ldyBCb29sZWFuKGZhbHNlKSk7IC8vJE5PTi1OTFMtMSQKKwkJdXJsU3RhdHVzLnB1dCgiUE9QMiIsIG5ldyBCb29sZWFuKGZhbHNlKSk7IC8vJE5PTi1OTFMtMSQKKwkJdXJsU3RhdHVzLnB1dCgiUE9QIiwgbmV3IEJvb2xlYW4oZmFsc2UpKTsgLy8kTk9OLU5MUy0xJAorCQl1cmxTdGF0dXMucHV0KCJERU1PR1JBRklBIiwgbmV3IEJvb2xlYW4oZmFsc2UpKTsgLy8kTk9OLU5MUy0xJAorCQl1cmxTdGF0dXMucHV0KCJTVEFUT0lEUyIsIG5ldyBCb29sZWFuKGZhbHNlKSk7IC8vJE5PTi1OTFMtMSQKKwkJdXJsU3RhdHVzLnB1dCgiVU5JVEVETkFUSU9OUyIsIG5ldyBCb29sZWFuKHRydWUpKTsgLy8kTk9OLU5MUy0xJAorCX0KKworCS8qKgorCSAqIFJ1biB0aGUgZ2VuZXJhdG9yLgorCSAqIAorCSAqLworCXB1YmxpYyB2b2lkIHJ1bigpIHsKKwkJLy8gUmVhZCBhbmQga2VlcCBpbiBtZW1vcnkgYSBsaXN0IG9mIHRoZSBjb3VudHJpZXMgd2Ugd2FudC4KKwkJdGFyZ2V0TGlzdCA9IEdlblV0aWxzLnBvcHVsYXRlTGlzdCh0YXJnZXRGaWxlKTsKKworCQkvLyBSZWFkIGFuZCBrZWVwIGluIG1lbW9yeSBhIGxpc3Qgb2YgdGhlIElTTzMxNjYtMSBBTFBIQTIsIEFMUEhBMywgYW5kCisJCS8vIG51bWVyaWMgY29kZXMuCisJCWNvZGVMaXN0ID0gR2VuVXRpbHMucG9wdWxhdGVMaXN0KGlzbzMxNjZfMSk7CisKKwkJLy8gUmVhZCBhbmQga2VlcCBpbiBtZW1vcnkgYSBsaXN0IG9mIHRoZSBtaXNzaW5nIElTTzMxNjYtMiBjb2RlcworCQljb2RlZml4TGlzdCA9IEdlblV0aWxzLnBvcHVsYXRlTGlzdChmaXhGaWxlKTsKKworCQkvLyBUSElTIElTIEFOIFNQRUNJQUwgQ0FTRS4KKwkJLy8gRk9SIFRIRSBVU0EgT05MWSwgV0UgSEFWRSBUSEUgTEVWRUwgMiBEQVRBIEZPUiBBTEwgQ09VTlRJRVMuCisJCXVzYUxldmVsMkxpc3QgPSBHZW5VdGlscworCQkJCS5wb3B1bGF0ZUxpc3QoR2VuQ29uc3RhbnRzLlVTQV9MRVZFTF8yX1BPUFVMQVRJT04pOworCisJCS8vIE5vdywgcHJvY2VzcyBlYWNoIGl0ZW0gaW4gdGhlIHRhcmdldCBsaXN0LgorCQlwcm9jZXNzKCk7CisKKwl9CisKKwkvKioKKwkgKiBQcm9jZXNzIG91ciBnbG9iYWwgbGlzdCBvZiB0YXJnZXQgY291bnRyaWVzLiBGb3IgZWFjaCBjb3VudHJ5IGluIGxpc3QsCisJICogZ2VuZXJhdGUgaXRzIHBvcHVsYXRpb24ucHJvcGVydGllcyBmaWxlLgorCSAqIAorCSAqLworCXByb3RlY3RlZCB2b2lkIHByb2Nlc3MoKSB7CisKKwkJZmluYWwgaW50IExFVkVMXzEgPSAxOworCQlmaW5hbCBpbnQgTEVWRUxfMiA9IDI7CisKKwkJLy8gQSB3cml0ZXIgZm9yIHRoZSBuZXcgZmlsZSB3ZSBhcmUgY3JlYXRpbmcuCisJCVByaW50V3JpdGVyIHByb3BlcnRpZXNGaWxlID0gbnVsbDsKKworCQkvLyBPYmplY3QgaG9sZGluZyBJU08zMTY2LTEgcmVsYXRlZCBkYXRhLgorCQlJU09Db2RlMSBpc29Db2RlID0gbnVsbDsKKworCQkvLyBOYW1lIG9mIHRoZSBuZXcgcHJvcGVydGllcyBmaWxlLgorCQlTdHJpbmcgZmlsZU5hbWUgPSBudWxsOworCisJCS8vIEEgbGlzdCBmb3IgSVNPIDMxNjYtMiBvYmplY3RzCisJCUxpc3QgaXNvMkxpc3QgPSBuZXcgQXJyYXlMaXN0KCk7CisKKwkJLy8gTmFtZSBvZiB0aGUgZml4IGZpbGUgZm9yIGEgZ2l2ZW4gY291bnRyeQorCQkvLyBTdHJpbmcgZml4RmlsZSA9IG51bGw7CisKKwkJLy8gQSB3cml0ZXIgZm9yIHRoZSBmaXggZmlsZQorCQkvLyBQcmludFdyaXRlciBmaXhXcml0ZXIgPSBudWxsOworCisJCS8vIEZpbGVuYW1lcyBmb3IgbGV4MSBhbmQgbGV4MiBmaWxlcyBmb3IgYSBnaXZlbiBjb3VudHJ5LgorCQlTdHJpbmcgbGV4QWRtaW4xRmlsZSA9IG51bGw7CisJCVN0cmluZyBsZXhBZG1pbjJGaWxlID0gbnVsbDsKKworCQkvLyBMaXN0cyBob2xkaW5nIHRoZSBsZXgxIGFuZCBsZXgyIHZhbHVlcy4KKwkJLy8gTk9URTogbGV4IHZhbHVlcyBhcmUgdGhlIGxleGljb2dyYXBoaWNhbGx5IHNvcnRlZCB2YWx1ZXMgZm9yCisJCS8vIGFkbWluaXN0cmF0aW9uIGxldmVscy4KKwkJTGlzdDxTdHJpbmc+IGxleDFEYXRhU2V0ID0gbnVsbDsKKwkJTGlzdDxTdHJpbmc+IGxleDJEYXRhU2V0ID0gbnVsbDsKKworCQkvLyBMaXN0cyBmb3IgaG9sZGluZyBsZXgxIGFuZCBsZXgyIG9iamVjdHMgZm9yIGEgZ2l2ZW4gY291bnRyeS4KKwkJTGlzdDxMZXgxT2JqPiBsZXgxTGlzdCA9IG51bGw7CisJCUxpc3Q8TGV4Mk9iaj4gbGV4Mkxpc3QgPSBudWxsOworCisJCWludCBzaXplID0gdGFyZ2V0TGlzdC5zaXplKCk7CisKKwkJLy8gSXRlcmF0ZSBmb3IgZXZlcnkgY291bnRyeSBhbmQgY3JlYXRlIGl0cyBwb3B1bGF0aW9uLnByb3BlcnRpZXMgZmlsZS4KKwkJZm9yIChpbnQgaSA9IDA7IGkgPCBzaXplOyBpKyspIHsKKworCQkJLy8gR2V0IHRoZSBuZXh0IGNvdW50cnkgaW4gdGhlIGxpc3QuCisJCQlTdHJpbmcgZmlsZSA9ICgoU3RyaW5nKSB0YXJnZXRMaXN0LmdldChpKSkudHJpbSgpOworCisJCQkvLyBBbiBpbmRleCBmb3IgdW5rbndvbiBvciBuLmEuIGVudHJpZXMKKwkJCWludCB1bmtDb3VudGVyID0gMTsKKworCQkJLy8gT3BlbiB0aGUgZGF0YSBzb3VyY2UgZmlsZSBmb3IgdGhpcyBjb3VudHJ5LgorCQkJQnVmZmVyZWRSZWFkZXIgcmVhZGVyID0gR2VuVXRpbHMub3BlblJlYWRlcihmaWxlKTsKKwkJCVN5c3RlbS5vdXQKKwkJCQkJLnByaW50bG4oIlx0XHQ8PDw8IFBPUFVMQVRJT04gR0VORVJBVE9SIC0tIFByb2Nlc3NpbmcgY291bnRyeSA6ICIgKyBmaWxlICsgLy8kTk9OLU5MUy0xJAorCQkJCQkJCSI+Pj4+Iik7IC8vJE5PTi1OTFMtMSQKKwkJCXRyeSB7CisKKwkJCQlpZiAocmVhZGVyICE9IG51bGwpIHsKKworCQkJCQlTdHJpbmcgYnVmZmVyID0gbnVsbDsKKwkJCQkJLy8gRGVzY3JpYmVzIGxldmVsCisJCQkJCS8vIG9mIGRhdGEgd2UKKwkJCQkJLy8gYXJlIG5vdyBwcm9jZXNzaW5nIDogTEVWRUwwLCBMRVZFTDEsIG9yIExFVkVMMi4KKwkJCQkJaW50IGxldmVsID0gLTE7CisKKwkJCQkJLy8gUmVjb3JkIHRoZSBwcmV2aW91cyBsZXZlbC4KKwkJCQkJaW50IG9sZExldmVsID0gbGV2ZWwgLSAxOworCQkJCQkvLyBXZSB0YWtlIGEgY2h1bmsgb2YgdGhlIGRhdGEgW0JVRkZFUl9NSU4sQlVGRkVSX01BWF0gdG8KKwkJCQkJLy8gbWFrZSBwcm9jZXNzaW5nIG1vcmUKKwkJCQkJLy8gZWZmaWNpZW50LCB3ZSBkb250IG5lZWQgYWxsIG9mIGl0LgorCQkJCQlpbnQgQlVGRkVSX01JTiA9IDA7CisJCQkJCWludCBCVUZGRVJfTUFYID0gMTIwOworCQkJCQkvLyBTdHJpbmcgdXNlZCB0byBpZ25vcmUgcmVwZWF0ZWQgZW50cmllcy4KKwkJCQkJTGlzdDxTdHJpbmc+IGVudHJ5TGlzdCA9IG51bGw7CisKKwkJCQkJd2hpbGUgKEdlblV0aWxzLkVPRihidWZmZXIgPSByZWFkZXIucmVhZExpbmUoKSkgIT0gdHJ1ZSkgeworCisJCQkJCQkvLyBNYWtlIHN1cmUgdGhhdCB3ZSBtYXJrIGFsbCB1bmtub3duIGRhdGEuCisJCQkJCQlidWZmZXIgPSBidWZmZXIucmVwbGFjZSgiLCwiLCAiLFVOS05PV04sIik7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAorCisJCQkJCQkvLyBVc2Ugb25seSBwYXJ0IG9mIHRoZSBidWZmZXIsIG5vdCBhbGwgb2YgaXQgZm9yCisJCQkJCQkvLyBlZmZpY2llbmN5LgorCQkJCQkJU3RyaW5nW10gaXRlbXMgPSBHZW5VdGlscworCQkJCQkJCQkuZXh0cmFjdChidWZmZXIubGVuZ3RoKCkgPCBCVUZGRVJfTUFYID8gYnVmZmVyCisJCQkJCQkJCQkJOiBidWZmZXIuc3Vic3RyaW5nKEJVRkZFUl9NSU4sCisJCQkJCQkJCQkJCQlCVUZGRVJfTUFYKSk7CisKKwkJCQkJCS8vIEdldCB0aGUgY291bnRyeSBuYW1lCisJCQkJCQlTdHJpbmcgY291bnRyeSA9IGl0ZW1zW0lTT0RhdGEuQ09VTlRSWV9OQU1FXTsKKworCQkJCQkJLy8gR2V0IHRoZSBJU08zMTY2LTEgaW5mbyBmb3IgdGhpcyBjb3VudHJ5CisJCQkJCQlpZiAoaXNvQ29kZSA9PSBudWxsKSB7CisJCQkJCQkJaXNvQ29kZSA9IEdlblV0aWxzLmdldElTT0NvZGUoY291bnRyeSwgY29kZUxpc3QpOworCQkJCQkJfQorCisJCQkJCQkvLyBXZSBuZWVkIGEgZml4IGZpbGUgdG8ga2VlcCB0cmFjayBvZiBhbGwgdW5tYXRjaGVkCisJCQkJCQkvLyBpdGVtcworCQkJCQkJLy8gVE8gRE8gOiBtYXRjaCBhbGwgdW5tYXRjaGVkIGl0ZW1zIG1hbnVhbGx5CisJCQkJCQkvLyBpZiAoZml4V3JpdGVyID09IG51bGwpIHsKKwkJCQkJCS8vIGZpeEZpbGUgPSBvdXRwdXREaXIgKyAiTEVWRUwxX1BPUF9GSVgudHh0IjsKKwkJCQkJCS8vIFV0aWxMb2dnZXIubG9nSW5mb3JtYXRpb24oIkZpeCBmaWxlIG5hbWUgaXMgOiAiICsgZml4RmlsZSk7CisJCQkJCQkvLyAvLyBPcGVuIHRoZSBmaXggd3JpdGVyCisJCQkJCQkvLyBmaXhXcml0ZXIgPSBHZW5VdGlscy5vcGVuV3JpdGVyKGZpeEZpbGUpOworCQkJCQkJLy8gfQorCisJCQkJCQkvLyBSZWFkIGFuZCBrZWVwIGluIG1lbW9yeSBhIGxpc3Qgb2YgdGhlIHBvcHVsYXRpb24gZGF0YQorCQkJCQkJLy8gZm9yIHRoaXMgY291bnRyeS4KKwkJCQkJCWlmIChwb3B1bGF0aW9uTGlzdCA9PSBudWxsKSB7CisJCQkJCQkJU3RyaW5nIG5hbWUgPSBwb3B1bGF0aW9uRGF0YSArIGNvdW50cnkKKwkJCQkJCQkJCSsgIl9QT1BVTEFUSU9OLnR4dCI7IC8vJE5PTi1OTFMtMSQKKwkJCQkJCQlwb3B1bGF0aW9uTGlzdCA9IEdlblV0aWxzLnBvcHVsYXRlTGlzdChuYW1lKTsKKworCQkJCQkJCS8vIENyZWF0ZSB0aGUgZmlsZSBuYW1lIGZvciB0aGUgbmV3IHByb3BlcnRpZXMuZmlsZS4KKwkJCQkJCQluYW1lID0gcG9wdWxhdGlvblByb2ZpbGUgKyAiXFwiIC8vJE5PTi1OTFMtMSQKKwkJCQkJCQkJCSsgaXNvQ29kZS5nZXRBbHBoYTMoKSArICJcXCIgLy8kTk9OLU5MUy0xJAorCQkJCQkJCQkJKyBpc29Db2RlLmdldEFscGhhMygpICsgIl8iIC8vJE5PTi1OTFMtMSQKKwkJCQkJCQkJCSsgInBvcHVsYXRpb24ucHJvZmlsZSI7IC8vJE5PTi1OTFMtMSQKKworCQkJCQkJCXBvcHVsYXRpb25Qcm9maWxlTGlzdCA9IEdlblV0aWxzLnBvcHVsYXRlTGlzdChuYW1lKTsKKworCQkJCQkJfQorCisJCQkJCQkvLyBHZXQgdGhlIGxldmVsIG9mIHRoZSBkYXRhIHdlIGFyZSBwcm9jZXNzaW5nLgorCQkJCQkJbGV2ZWwgPSBHZW5VdGlscy5nZXREYXRhTGV2ZWwoaXRlbXMpOworCisJCQkJCQlpZiAobGV2ZWwgIT0gMCAmJiBpc28yTGlzdCAhPSBudWxsKSB7CisJCQkJCQkJLy8gTG9hZCB0aGUgSVNPIDMxNjYtMiBvYmplY3RzIGZvciB0aGlzIGNvdW50cnkKKwkJCQkJCQlpc28yTGlzdCA9IEdlblV0aWxzLmxvYWRJU08yKGlzbzMxNjZfMik7CisJCQkJCQl9CisKKwkJCQkJCS8vIFRoaXMgdmFyaWFibGUgaW5kaWNhdGVzIGEgdHJhbnNpdGlvbiBpbiBvdXIgZGF0YQorCQkJCQkJLy8gcHJvY2Vzc2luZworCQkJCQkJYm9vbGVhbiB0cmFuc2l0aW9uID0gKGxldmVsICE9IG9sZExldmVsKSA/IHRydWUgOiBmYWxzZTsKKworCQkJCQkJaWYgKHRyYW5zaXRpb24gPT0gdHJ1ZSkgeworCQkJCQkJCS8vIEtlZXAgdHJhY2sgb2YgcHJldmlvdXMgbGV2ZWwgaW4gb3JkZXIgdG8gZGV0ZWN0CisJCQkJCQkJLy8gdHJhbnNpdGlvbnMuCisJCQkJCQkJb2xkTGV2ZWwgPSBsZXZlbDsKKwkJCQkJCQkvLyBSZXNldCBvdXIgcmVwZWF0ZWQgaGlzdG9yeQorCQkJCQkJCWlmIChlbnRyeUxpc3QgIT0gbnVsbCkgeworCQkJCQkJCQllbnRyeUxpc3QuY2xlYXIoKTsKKwkJCQkJCQl9CisJCQkJCQkJZW50cnlMaXN0ID0gbmV3IEFycmF5TGlzdDxTdHJpbmc+KCk7CisKKwkJCQkJCQkvLyBSZXNldCBjb3VudGVyIG9mIFVOS05PV04gYW5kIE4uQS4gZW50cmllcy4KKwkJCQkJCQl1bmtDb3VudGVyID0gMTsKKwkJCQkJCQlpZiAocHJvcGVydGllc0ZpbGUgIT0gbnVsbCkgeworCQkJCQkJCQkvLyBVdGlsTG9nZ2VyLmxvZ0luZm9ybWF0aW9uKCJcdFx0R2VuZXJhdGVkIDogIgorCQkJCQkJCQkvLyArIGZpbGVOYW1lKTsKKwkJCQkJCQkJcHJvcGVydGllc0ZpbGUuY2xvc2UoKTsKKwkJCQkJCQkJcHJvcGVydGllc0ZpbGUgPSBudWxsOworCQkJCQkJCQlmaWxlTmFtZSA9IG51bGw7CisJCQkJCQkJfQorCQkJCQkJfQorCisJCQkJCQkvLyBJZiB0aGUgZGlyZWN0b3J5IGRvZXMgbm90IGV4aXN0IGZvciB0aGlzIGNvdW50cnksCisJCQkJCQkvLyBjcmVhdGUgaXQgdXNpbmcgSVNPIGFscGhhMyBjb2RlLgorCQkJCQkJRmlsZSBjb3VudHJ5RGlyID0gbmV3IEZpbGUob3V0cHV0RGlyCisJCQkJCQkJCSsgaXNvQ29kZS5nZXRBbHBoYTMoKSk7CisKKwkJCQkJCWlmIChjb3VudHJ5RGlyICE9IG51bGwgJiYgY291bnRyeURpci5leGlzdHMoKSA9PSBmYWxzZSkgeworCQkJCQkJCS8vIERpcmVjdG9yeSBkb2VzIG5vdCBleGlzdC4gQ3JlYXRlIGl0LgorCQkJCQkJCWNvdW50cnlEaXIubWtkaXIoKTsKKwkJCQkJCX0KKworCQkJCQkJLy8gQ3JlYXRlIGFuZCBvcGVuIHRoZSBuZXcgZmlsZS4KKwkJCQkJCWlmIChwcm9wZXJ0aWVzRmlsZSA9PSBudWxsKSB7CisJCQkJCQkJLy8gQ3JlYXRlIHRoZSBmaWxlIG5hbWUgZm9yIHRoZSBuZXcgcHJvcGVydGllcy5maWxlLgorCQkJCQkJCVN0cmluZyBhbHBoYTMgPSBpc29Db2RlLmdldEFscGhhMygpOworCQkJCQkJCWZpbGVOYW1lID0gY291bnRyeURpciArICJcXCIgKyBhbHBoYTMgKyAiXyIgKyBsZXZlbCAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKKwkJCQkJCQkJCSsgIl9odW1hbl8yMDAwXyIgKyAicG9wdWxhdGlvbi5wcm9wZXJ0aWVzIjsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCisJCQkJCQkJLy8gQ3JlYXRlIHRuZSBuZXcgcG9wdWxhdGlvbiBmaWxlIGZvciB0aGlzIGNvdW50cnkuCisJCQkJCQkJcHJvcGVydGllc0ZpbGUgPSBHZW5VdGlscy5vcGVuV3JpdGVyKGZpbGVOYW1lKTsKKwkJCQkJCX0KKworCQkJCQkJLy8gVmFyaWFibGUgdXNlZCB0byBob2xkIHRoZSBmb3JtYXR0ZWQgb3V0cHV0IGRhdGEuCisJCQkJCQlTdHJpbmcgZGF0YSA9IG51bGw7CisKKwkJCQkJCS8vIFRoZSBjdXJyZW50IGVudGl0eSB3ZSBhcmUgZGVhbGluZyB3aXRoLgorCQkJCQkJLy8gQmFzZWQgb24gaXRzIGFkbWluIGxldmVsIGl0IGNhbiBiZSBhIGNvdW50cnksIGEKKwkJCQkJCS8vIGNvdW50eSwgZXRjOworCQkJCQkJU3RyaW5nIGN1cnJlbnQgPSBudWxsOworCisJCQkJCQkvLyBXZSBoYXZlIHN3aXRjaGVkIHRvIGEgZGlmZmVyZW50IGRhdGEgbGV2ZWwgKGksZSwKKwkJCQkJCS8vIGFkbWluIDAgdG8gYWRtaW4gMSkKKwkJCQkJCWlmICh0cmFuc2l0aW9uID09IHRydWUpIHsKKwkJCQkJCQkvLyBKdXN0IGFkZCB0aGUgaGVhZGVyCisJCQkJCQkJZGF0YSA9IGdldEhlYWRlcihpc29Db2RlLCBsZXZlbCk7CisJCQkJCQkJR2VuVXRpbHMuYWRkRGF0YShwcm9wZXJ0aWVzRmlsZSwgZGF0YSk7CisJCQkJCQkJLy8gRm9yZ2V0IHRoZSBkYXRhIHdlIGp1c3Qgd3JvdGUuCisJCQkJCQkJZGF0YSA9IG51bGw7CisJCQkJCQl9CisKKwkJCQkJCS8vIERlc2NyaXB0b3IgZm9yIGN1cnJlbnQgZW50cnkuCisJCQkJCQlTdHJpbmcgZGVzY3JpcHRvciA9IG51bGw7CisKKwkJCQkJCXN3aXRjaCAobGV2ZWwpIHsKKworCQkJCQkJY2FzZSBEYXRhVHlwZXMuTEVWRUxfMDoKKworCQkJCQkJCS8vIEhhbmRsZSBkYXRhIGxldmVsIDAgZGlmZmVyZW50IHRoYXQgdGhlIG90aGVyCisJCQkJCQkJLy8gYWRtaW4gbGV2ZWxzLgorCisJCQkJCQkJaWYgKHRyYW5zaXRpb24gPT0gdHJ1ZSkgeworCQkJCQkJCQlkYXRhID0gIiMgQ291bnRyeVxuIjsgLy8kTk9OLU5MUy0xJAorCQkJCQkJCQlkYXRhICs9IGlzb0NvZGUuZ2V0QWxwaGEzKCkgKyAiID0gIiAvLyROT04tTkxTLTEkCisJCQkJCQkJCQkJKyBnZXRQb3B1bGF0aW9uKGNvdW50cnksIGxldmVsKTsKKwkJCQkJCQkJLy8gV3JpdGUgZm9ybWF0dGVkIG91dHB1dAorCQkJCQkJCQlHZW5VdGlscy5hZGREYXRhKHByb3BlcnRpZXNGaWxlLCBkYXRhKTsKKwkJCQkJCQl9CisJCQkJCQkJY29udGludWU7CisKKwkJCQkJCWNhc2UgRGF0YVR5cGVzLkxFVkVMXzE6CisJCQkJCQkJY3VycmVudCA9IGl0ZW1zW0lTT0RhdGEuQURNSU4xX05BTUVdLnRvVXBwZXJDYXNlKCk7CisJCQkJCQkJYnJlYWs7CisKKwkJCQkJCWNhc2UgRGF0YVR5cGVzLkxFVkVMXzI6CisJCQkJCQkJY3VycmVudCA9IGl0ZW1zW0lTT0RhdGEuQURNSU4yX05BTUVdLnRvVXBwZXJDYXNlKCk7CisJCQkJCQkJYnJlYWs7CisKKwkJCQkJCX0gLy8gU3dpdGNoCisKKwkJCQkJCS8vIEhhbmRsZSBVTktOT1dOIGFuZCBOLkEuIGVudHJpZXMgZGlmZmVyZW50bHkuCisJCQkJCQlpZiAoY3VycmVudC5lcXVhbHMoIlVOS05PV04iKSB8fCBjdXJyZW50LmVxdWFscygiTi5BLiIpKSB7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAorCisJCQkJCQkJaWYgKGxldmVsID09IDEpIHsKKwkJCQkJCQkJY3VycmVudCA9IGlzb0NvZGUuZ2V0QWxwaGEyKCkgKyAiLVVOSy0iIC8vJE5PTi1OTFMtMSQKKwkJCQkJCQkJCQkrIFN0cmluZy52YWx1ZU9mKHVua0NvdW50ZXIrKyk7CisKKwkJCQkJCQl9IGVsc2UgeworCQkJCQkJCQkvLyBMZXZlbCAyIGRhdGEuCisJCQkJCQkJCWN1cnJlbnQgPSBpc29Db2RlLmdldEFscGhhMygpICsgIi5MMi4iIC8vJE5PTi1OTFMtMSQKKwkJCQkJCQkJCQkrIFN0cmluZy52YWx1ZU9mKHVua0NvdW50ZXIrKyk7CisJCQkJCQkJfQorCQkJCQkJfQorCisJCQkJCQkvLyBWZXJpZnkgZm9yIHJlcGVhdGVkIGVudHJpZXMgLS0gYXZ2b2lkIGR1cGxjYXRlcworCQkJCQkJc3dpdGNoIChsZXZlbCkgeworCisJCQkJCQljYXNlIExFVkVMXzE6CisJCQkJCQkJaWYgKEdlblV0aWxzLmlzUmVwZWF0ZWQoY3VycmVudCwgZW50cnlMaXN0KSA9PSB0cnVlKSB7CisJCQkJCQkJCS8vIER1cGxpY2F0ZWQsIGlnbm9yZS4KKwkJCQkJCQkJY29udGludWU7CisJCQkJCQkJfQorCQkJCQkJCS8vIFJlbWVtYmVyIHRoaXMgZW50aXR5IHRvIGF2b2lkIGR1cGxpY2F0ZXMuCisJCQkJCQkJZW50cnlMaXN0LmFkZChjdXJyZW50KTsKKwkJCQkJCQlicmVhazsKKworCQkJCQkJY2FzZSBMRVZFTF8yOgorCQkJCQkJCWlmIChHZW5VdGlscy5pc1JlcGVhdGVkKGl0ZW1zW0lTT0RhdGEuQURNSU4xX05BTUVdCisJCQkJCQkJCQkrIGN1cnJlbnQsIGVudHJ5TGlzdCkgPT0gdHJ1ZSkgeworCQkJCQkJCQkvLyBEdXBsaWNhdGVkLCBpZ25vcmUuCisJCQkJCQkJCWNvbnRpbnVlOworCQkJCQkJCX0KKwkJCQkJCQkvLyBSZW1lbWJlciB0aGlzIGVudGl0eSB0byBhdm9pZCBkdXBsaWNhdGVzLgorCQkJCQkJCWVudHJ5TGlzdC5hZGQoaXRlbXNbSVNPRGF0YS5BRE1JTjFfTkFNRV0gKyBjdXJyZW50KTsKKwkJCQkJCQlicmVhazsKKworCQkJCQkJfQorCisJCQkJCQkvLyBJZiBJU08yQ29kZSBpcyBlcXVhbCB0byBlbnRpdHksIHRoZW4gd2UgZG9udCBoYXZlIGEKKwkJCQkJCS8vIG1hdGNoLiBBZGQgaXQgdG8gZml4IGZpbGUuIERPTlQgREVMRVRFCisJCQkJCQkvLyBpZiAoZGVzY3JpcHRvci5lcXVhbHMoY3VycmVudCkgJiYgbGV2ZWwgPT0gMSkgeworCQkJCQkJLy8gLy8gVW5tYXRjaGVkIGl0ZW0sIGFkZCBpdCB0byBvdXIgZml4IGZpbGUKKwkJCQkJCS8vIGZpeFdyaXRlci53cml0ZShjb3VudHJ5ICsgIjoiICsgZGVzY3JpcHRvcgorCQkJCQkJLy8gKyAiOlVOS05PV046VU5LTk9XTlxuIik7CisJCQkJCQkvLyB9CisKKwkJCQkJCS8vIFdlIGdldCB0aGUgZGVzY3JpcHRvciBmb3IgYWRtaW5pc3RyYXRpb24gZW50aXRpZXMKKwkJCQkJCS8vIGRpZmZlcmVudGx5IGJhc2VkIG9uIGl0cyBsZXZlbC4KKworCQkJCQkJaWYgKGxldmVsID09IDIpIHsKKworCQkJCQkJCWlmIChsZXgxRGF0YVNldCA9PSBudWxsICYmIGxleDJEYXRhU2V0ID09IG51bGwpIHsKKworCQkJCQkJCQkvLyBDb21wb3NlIHRoZSBmaWxlIG5hbWVzIGZvciB0aGUgbGV4IGZpbGVzIGZvcgorCQkJCQkJCQkvLyB0aGlzCisJCQkJCQkJCS8vIGNvdW50cnkuCisJCQkJCQkJCWxleEFkbWluMUZpbGUgPSBsZXhEaXIgKyBpc29Db2RlLmdldEFscGhhMygpCisJCQkJCQkJCQkJKyAiXFwiICsgaXNvQ29kZS5nZXRBbHBoYTMoKTsgLy8kTk9OLU5MUy0xJAorCQkJCQkJCQlsZXhBZG1pbjJGaWxlID0gbGV4QWRtaW4xRmlsZTsKKwkJCQkJCQkJbGV4QWRtaW4xRmlsZSArPSAiX0FETUlOMV9MRVgudHh0IjsgLy8kTk9OLU5MUy0xJAorCQkJCQkJCQlsZXhBZG1pbjJGaWxlICs9ICJfQURNSU4yX0xFWC50eHQiOyAvLyROT04tTkxTLTEkCisKKwkJCQkJCQkJLy8gTG9hZCB0aGUgbGV4MSBhbmQgbGV4MiBmaWxlcyBmb3IgdGhpcworCQkJCQkJCQkvLyBjb3VudHJ5LgorCQkJCQkJCQlsZXgxRGF0YVNldCA9IEdlblV0aWxzCisJCQkJCQkJCQkJLnBvcHVsYXRlTGlzdChsZXhBZG1pbjFGaWxlKTsKKwkJCQkJCQkJbGV4MkRhdGFTZXQgPSBHZW5VdGlscworCQkJCQkJCQkJCS5wb3B1bGF0ZUxpc3QobGV4QWRtaW4yRmlsZSk7CisKKwkJCQkJCQkJLy8gQ3JlYXRlIGEgbWV0aG9kIHRvIHNlYXJjaCBmb3IgYW4gaXRlbSBvbiBhCisJCQkJCQkJCS8vIGxpc3QKKwkJCQkJCQkJLy8gb2YgbGV4IGRhdGEgb2JqZWN0cy4KKwkJCQkJCQkJbGV4MUxpc3QgPSBHZW5VdGlscy5jcmVhdGVMZXgxTGlzdChsZXgxRGF0YVNldCk7CisJCQkJCQkJCWxleDJMaXN0ID0gR2VuVXRpbHMuY3JlYXRlTGV4Mkxpc3QobGV4MkRhdGFTZXQpOworCisJCQkJCQkJfQorCisJCQkJCQkJLy8gQ29tcG9zZSB0aGUgbGV2ZWwyIGRlc2NyaXB0b3IgdXNpbmcgdGhlIGxleCBkYXRhOgorCisJCQkJCQkJLy8gU1RFUCAxOiBEbyBhIGxvb2sgdXAgaW4gdGhlIGxleCAyIGxpc3RzLgorCisJCQkJCQkJLy8gR2V0IHRoZSBsZXggMiBvYmplY3QgZm9yIHRoZSBjdXJyZW50IGVudHJ5LgorCQkJCQkJCUxleDJPYmogbGV4MkN1cnJlbnQgPSBHZW5VdGlscy5sZXgyTG9va3VwKGxleDJMaXN0LAorCQkJCQkJCQkJaXRlbXNbSVNPRGF0YS5BRE1JTjFfTkFNRV0sIGN1cnJlbnQpOworCisJCQkJCQkJLy8gR2V0IHRoZSBsZXggMSBvYmplY3QgdG8gd2hpY2ggbGV4MkN1cnJlbnQgYmVsb25ncworCQkJCQkJCS8vIHRvLgorCQkJCQkJCUxleDFPYmogbGV4MUN1cnJlbnQgPSBHZW5VdGlscy5sZXgxTG9va3VwKGxleDFMaXN0LAorCQkJCQkJCQkJbGV4MkN1cnJlbnQuZ2V0QWRtaW4xKCkpOworCisJCQkJCQkJLy8gU1RFUCAyOiBwaWVjZSB0b2dldGhlciB0aGUgSUQgdXNpbmcgdGhlCisJCQkJCQkJLy8gcHJvcGVyIGxleCBvYmplY3RzIDogdGhlIFVTQSBpcyBhIHNwZWNpYWwKKwkJCQkJCQkvLyBjYXNlCisJCQkJCQkJaWYgKGxleDFDdXJyZW50LmdldERlc2NyaXB0b3IoKS5jb250YWlucygiVVMtIikpIHsgLy8kTk9OLU5MUy0xJAorCQkJCQkJCQlkZXNjcmlwdG9yID0gbGV4MUN1cnJlbnQuZ2V0RGVzY3JpcHRvcigpCisJCQkJCQkJCQkJKyAiLSIgLy8kTk9OLU5MUy0xJAorCQkJCQkJCQkJCSsgbGV4MUN1cnJlbnQuZ2V0Rm9ybWF0dGVkSW5kZXgoKQorCQkJCQkJCQkJCSsgbGV4MkN1cnJlbnQuZ2V0Rm9ybWF0dGVkSW5kZXhVU0EoKTsKKwkJCQkJCQl9IGVsc2UgeworCQkJCQkJCQlkZXNjcmlwdG9yID0gbGV4MUN1cnJlbnQuZ2V0RGVzY3JpcHRvcigpCisJCQkJCQkJCQkJKyAiLUciIC8vJE5PTi1OTFMtMSQKKwkJCQkJCQkJCQkrIGxleDFDdXJyZW50LmdldEZvcm1hdHRlZEluZGV4KCkKKwkJCQkJCQkJCQkrIGxleDJDdXJyZW50LmdldEZvcm1hdHRlZEluZGV4KCk7CisJCQkJCQkJCS8vIEFkZCBzb21lIGNvbW1lbnMgdG8gYWxsb3cgcmV2ZXJzZSBlbmdpbmVlcmluZworCQkJCQkJCQkvLyBvcgorCQkJCQkJCQkvLyBiYWNrdHJhY2tpbmcgdGhlIG9yaWdpbiBvZiB0aGlzIGdlbmVyYXRlZCBrZXkKKwkJCQkJCQkJLy8gYXMKKwkJCQkJCQkJLy8gbXVjaCBhcyBwb3NzaWJsZS4KKwkJCQkJCQkJZGF0YSA9ICIjIEdlbmVyYXRlZCBrZXkgZGV0YWlscyA6ICIgLy8kTk9OLU5MUy0xJAorCQkJCQkJCQkJCSsgIiBMZXZlbCAxICggIiAvLyROT04tTkxTLTEkCisJCQkJCQkJCQkJKyBsZXgxQ3VycmVudC5nZXREZXNjcmlwdG9yKCkKKwkJCQkJCQkJCQkrICIgPSAiIC8vJE5PTi1OTFMtMSQKKwkJCQkJCQkJCQkrIGxleDFDdXJyZW50LmdldEFkbWluMSgpCisJCQkJCQkJCQkJKyAiICkuICIgLy8kTk9OLU5MUy0xJAorCQkJCQkJCQkJCSsgIkxldmVsIDIgKCAiIC8vJE5PTi1OTFMtMSQKKwkJCQkJCQkJCQkrIGxleDFDdXJyZW50LmdldEZvcm1hdHRlZEluZGV4KCkKKwkJCQkJCQkJCQkrIGxleDJDdXJyZW50LmdldEZvcm1hdHRlZEluZGV4KCkKKwkJCQkJCQkJCQkrICIgPSAiICsgbGV4MkN1cnJlbnQuZ2V0QWRtaW4yKCkgLy8kTk9OLU5MUy0xJAorCQkJCQkJCQkJCSsgIiApLiBcbiI7IC8vJE5PTi1OTFMtMSQKKworCQkJCQkJCX0KKworCQkJCQkJfSBlbHNlIHsgLy8gQ29tcG9zZSBkZXNjcmlwdG9yIGZvciBsZXZlbCAxIGFuZCBsZXZlbAorCQkJCQkJCS8vIDAgZGF0YQorCQkJCQkJCS8vIEdldCB0aGUgZGVzY3JpcHRvciBmb3IgdGhpcyBlbnRpdHkuCisJCQkJCQkJZGVzY3JpcHRvciA9IEdlblV0aWxzLmdldElTTzJEZXNjcmlwdG9yKGlzbzJMaXN0LAorCQkJCQkJCQkJY3VycmVudCwgaXNvQ29kZS5nZXRBbHBoYTIoKSk7CisKKwkJCQkJCQkvLyBJZiB3ZSBjYW50IGZpbmQgdGhlIGRlc2NyaXB0b3IsIHRoZW4gbG9vayBpbiB0aGUKKwkJCQkJCQkvLyBmaXggbGlzdC4KKwkJCQkJCQlpZiAoZGVzY3JpcHRvci5lcXVhbHMoY3VycmVudCkgPT0gdHJ1ZSkgeworCQkJCQkJCQkvLyBMb29rIGZvciBhIGRlc2NyaXB0b3IgaW4gdGhlIGZpeCBmaWxlCisJCQkJCQkJCWRlc2NyaXB0b3IgPSBHZW5VdGlscy5nZXRGaXhDb2RlKGNvZGVmaXhMaXN0LAorCQkJCQkJCQkJCWN1cnJlbnQsIGl0ZW1zW0lTT0RhdGEuQ09VTlRSWV9OQU1FXSk7CisKKwkJCQkJCQkJLy8gSWYgdGhlcmUgaXMgbm8gZGVzY3JpcHRvciBzdGlsbCwgZ2VuZXJhdGUKKwkJCQkJCQkJLy8gb25lIQorCQkJCQkJCQlpZiAoZGVzY3JpcHRvci5lcXVhbHMoY3VycmVudCkgPT0gdHJ1ZSkgeworCQkJCQkJCQkJZGVzY3JpcHRvciA9IGlzb0NvZGUuZ2V0QWxwaGEyKCkgKyAiLSIgLy8kTk9OLU5MUy0xJAorCQkJCQkJCQkJCQkrIGN1cnJlbnQ7CisJCQkJCQkJCX0KKwkJCQkJCQl9CisKKwkJCQkJCQkvLyBIYW5kbGUgdGhlIFVTQSBhcyBhIHNwZWNpYWwgY2FzZQorCQkJCQkJCWlmIChkZXNjcmlwdG9yLmNvbnRhaW5zKCJVUy0iKSkgeyAvLyROT04tTkxTLTEkCisJCQkJCQkJCWRhdGEgPSAiIyIgKyBjdXJyZW50ICsgIlxuIjsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCisJCQkJCQkJfQorCQkJCQkJfQorCisJCQkJCQlTdHJpbmcgcG9wdWxhdGlvbiA9IG51bGw7CisKKwkJCQkJCXN3aXRjaCAobGV2ZWwpIHsKKworCQkJCQkJY2FzZSAxOgorCQkJCQkJCXBvcHVsYXRpb24gPSBnZXRQb3B1bGF0aW9uKGN1cnJlbnQsCisJCQkJCQkJCQlpdGVtc1tJU09EYXRhLkNPVU5UUllfTkFNRV0sIGxldmVsKTsKKwkJCQkJCQlicmVhazsKKworCQkJCQkJY2FzZSAyOgorCisJCQkJCQkJLy8gVHJlYXQgdGhlIFVTQSBhcyBhIHNwZWNpYWwgY2FzZSA6CisJCQkJCQkJLy8gZm9yIHRoZSBVU0Egd2UgaGF2ZSBhIGxpc3Qgb2YgbGV2ZWwgMiBkYXRhLgorCQkJCQkJCWlmIChkZXNjcmlwdG9yLmNvbnRhaW5zKCJVUy0iKSkgeyAvLyROT04tTkxTLTEkCisKKwkJCQkJCQkJLy8gRmlyc3QsIGZpbmQgdGhlIElTT0NvZGUyIGZvciB0aGlzIFVTQSBhZG1pbi4KKwkJCQkJCQkJSVNPQ29kZTIgY29kZSA9IEdlblV0aWxzLmdldElTTzJPYmplY3QoCisJCQkJCQkJCQkJaXNvMkxpc3QsIGl0ZW1zW0lTT0RhdGEuQURNSU4xX05BTUVdLAorCQkJCQkJCQkJCWlzb0NvZGUuZ2V0QWxwaGEyKCkpOworCisJCQkJCQkJCS8vIFNlY29uZCwgZmluZCB0aGUgYXJlYSBmb3IgdGhpcyBVU0EgYWRtaW4uCisJCQkJCQkJCXBvcHVsYXRpb24gPSBHZW5VdGlscy5nZXRMZXZlbDJEYXRhKAorCQkJCQkJCQkJCWl0ZW1zW0lTT0RhdGEuQURNSU4yX05BTUVdLCBjb2RlCisJCQkJCQkJCQkJCQkuZ2V0SW5kZXgoKSwgdXNhTGV2ZWwyTGlzdCk7CisJCQkJCQkJCWJyZWFrOworCQkJCQkJCX0KKworCQkJCQkJCWlmIChpdGVtc1tJU09EYXRhLkFETUlOMV9OQU1FXS5lcXVhbHMoIk4uQS4iKSkgeyAvLyROT04tTkxTLTEkCisJCQkJCQkJCS8vIFRoaXMgd2lsbCBoYW5kbGUgdW5rbm93biBsb2NhdGlvbnMuCisJCQkJCQkJCXBvcHVsYXRpb24gPSBnZXRQb3B1bGF0aW9uKGN1cnJlbnQsIGN1cnJlbnQsCisJCQkJCQkJCQkJbGV2ZWwpOworCQkJCQkJCX0gZWxzZSB7CisJCQkJCQkJCXBvcHVsYXRpb24gPSBnZXRQb3B1bGF0aW9uKGN1cnJlbnQsCisJCQkJCQkJCQkJaXRlbXNbSVNPRGF0YS5BRE1JTjFfTkFNRV0sIGxldmVsKTsKKwkJCQkJCQl9CisKKwkJCQkJCQkvLyBJZiByZXR1cm5lZCBwb3B1bGF0aW9uID0gREVGQVVMVCwgdGhlbiB3ZSBkb250CisJCQkJCQkJLy8gaGF2ZSBhIHBvcHVsYXRpb24gdmFsdWUgZm9yIGl0LgorCQkJCQkJCS8vIENvbXB1dGUgdGhlIGFwcHJveGltYXRlIHBvcHVsYXRpb24gYmFzZWQgb24gdGhlCisJCQkJCQkJLy8gcG9wdWxhdGlvbiBmb3IgdGhlIGxldmVsIDEgY29udGFpbmVyLgorCQkJCQkJCWlmIChwb3B1bGF0aW9uID09IERFRkFVTFQpIHsKKwkJCQkJCQkJcG9wdWxhdGlvbiA9IGdldEFwcHJveGltYXRlUG9wdWxhdGlvbihpdGVtc1tJU09EYXRhLkFETUlOMV9OQU1FXSk7CisJCQkJCQkJfQorCQkJCQkJCWJyZWFrOworCQkJCQkJfQorCisJCQkJCQlpZiAoZGF0YSAhPSBudWxsKSB7CisJCQkJCQkJZGF0YSArPSBkZXNjcmlwdG9yICsgIiA9ICIgKyBwb3B1bGF0aW9uICsgIlxuIjsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCisJCQkJCQl9IGVsc2UgeworCQkJCQkJCWRhdGEgPSBkZXNjcmlwdG9yICsgIiA9ICIgKyBwb3B1bGF0aW9uICsgIlxuIjsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCisJCQkJCQl9CisKKwkJCQkJCS8vIFdyaXRlIGZvcm1hdHRlZCBvdXRwdXQKKwkJCQkJCUdlblV0aWxzLmFkZERhdGEocHJvcGVydGllc0ZpbGUsIGRhdGEpOworCQkJCQkJZGF0YSA9IG51bGw7CisKKwkJCQkJfSAvLyB3aGlsZSBsb29wCisKKwkJCQkJLy8gUmVzZXQgYWxsIGxleC1yZWxhdGVkIGl0ZW1zCisJCQkJCWlmIChsZXgxRGF0YVNldCAhPSBudWxsKSB7CisJCQkJCQlsZXgxRGF0YVNldC5jbGVhcigpOworCQkJCQkJbGV4MURhdGFTZXQgPSBudWxsOworCQkJCQl9CisJCQkJCWlmIChsZXgyRGF0YVNldCAhPSBudWxsKSB7CisJCQkJCQlsZXgyRGF0YVNldC5jbGVhcigpOworCQkJCQkJbGV4MkRhdGFTZXQgPSBudWxsOworCQkJCQl9CisJCQkJCWlmIChsZXgxTGlzdCAhPSBudWxsKSB7CisJCQkJCQlsZXgxTGlzdC5jbGVhcigpOworCQkJCQkJbGV4MUxpc3QgPSBudWxsOworCQkJCQl9CisJCQkJCWlmIChsZXgyTGlzdCAhPSBudWxsKSB7CisJCQkJCQlsZXgyTGlzdC5jbGVhcigpOworCQkJCQkJbGV4Mkxpc3QgPSBudWxsOworCQkJCQl9CisKKwkJCQkJbGV4QWRtaW4xRmlsZSA9IG51bGw7CisJCQkJCWxleEFkbWluMkZpbGUgPSBudWxsOworCisJCQkJCS8vIFdlIGRvbnQgbmVlZCB0aGUgSVNPIGNvZGUgb2JqZWN0IGZvciB0aGlzIGNvdW50cnkKKwkJCQkJLy8gYW55bW9yZSwgd2UgYXJlIGRvbmUgcHJvY2Vzc2luZyBpdC4KKwkJCQkJaXNvQ29kZSA9IG51bGw7CisKKwkJCQkJLy8gUmVzZXQgdGhlIHBvcHVsYXRpb24gbGlzdAorCQkJCQlpZiAocG9wdWxhdGlvbkxpc3QgIT0gbnVsbCkgeworCQkJCQkJcG9wdWxhdGlvbkxpc3QuY2xlYXIoKTsKKwkJCQkJCXBvcHVsYXRpb25MaXN0ID0gbnVsbDsKKwkJCQkJfQorCisJCQkJCS8vIENsb3NlIGFsbCBvcGVuIHJlc291cmNlcy4KKwkJCQkJcmVhZGVyLmNsb3NlKCk7CisKKwkJCQkJaWYgKHByb3BlcnRpZXNGaWxlICE9IG51bGwpIHsKKwkJCQkJCXByb3BlcnRpZXNGaWxlLmNsb3NlKCk7CisJCQkJCQlwcm9wZXJ0aWVzRmlsZSA9IG51bGw7CisJCQkJCQkvLyBVdGlsTG9nZ2VyLmxvZ0luZm9ybWF0aW9uKCJcdFx0R2VuZXJhdGVkIDogIiArIGZpbGVOYW1lKTsKKwkJCQkJCWZpbGVOYW1lID0gbnVsbDsKKwkJCQkJfQorCisJCQkJCS8vIFJ1biBnYXJiYWdlIGNvbGxlY3Rpb24KKwkJCQkJLy9TeXN0ZW0uZ2MoKTsKKwkJCQl9CisKKwkJCX0gY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKKwkJCQllLnByaW50U3RhY2tUcmFjZSgpOworCQkJfQorCisJCX0gLy8gRm9yIGxvb3AKKworCQkvLyBDbG9zZSB0aGUgZml4IHdyaXRlciA6IERPTlQgREVMRVRFCisJCS8vIGlmIChmaXhXcml0ZXIgIT0gbnVsbCkgeworCQkvLyBVdGlsTG9nZ2VyLmxvZ0luZm9ybWF0aW9uKCJDbG9zaW5nIGZpeCBmaWxlIik7CisJCS8vIGZpeFdyaXRlci5jbG9zZSgpOworCQkvLyBmaXhXcml0ZXIgPSBudWxsOworCQkvLyBmaXhGaWxlID0gbnVsbDsKKwkJLy8gfQorCX0KKworCS8qKgorCSAqIEdlbmVyYXRlIHRoZSBoZWFkZXIgY29tbWVudCBmb3IgdGhpcyBmaWxlLgorCSAqIAorCSAqIEBwYXJhbSBjb2RlCisJICogQHBhcmFtIGxldmVsCisJICogCisJICogQHJldHVybiB0aGUgaGVhZGVyIGZvciB0aGUgZG9jdW1lbnQKKwkgKiAKKwkgKi8KKwlwcm90ZWN0ZWQgU3RyaW5nIGdldEhlYWRlcihJU09Db2RlMSBjb2RlLCBpbnQgbGV2ZWwpIHsKKworCQlmaW5hbCBpbnQgREFUQV9ERVNDUklQVE9SID0gMDsKKwkJZmluYWwgaW50IFVSTCA9IDE7CisKKwkJLy8gQ3JlYXRlIHRoZSBmaWxlIG5hbWUgZm9yIHRoZSBVUkwgZmlsZS4KKwkJU3RyaW5nIHVybEZpbGUgPSB3b3Jrc3BhY2UgKyBHZW5Db25zdGFudHMuUEFSQU1TX0RJUgorCQkJCSsgR2VuQ29uc3RhbnRzLlVSTFNfRElSOworCQl1cmxGaWxlICs9IGNvZGUuZ2V0TmFtZSgpICsgIi50eHQiOyAvLyROT04tTkxTLTEkCisKKwkJU3RyaW5nIGhlYWRlciA9ICIjICIgKyBjb2RlLmdldEFscGhhMygpICsgIl8iICsgbGV2ZWwgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCisJCQkJKyAiX2h1bWFuXzIwMDBfcG9wdWxhdGlvbi5wcm9wZXJ0aWVzIFxuIjsgLy8kTk9OLU5MUy0xJAorCQkvLyBoZWFkZXIgKz0gQ2FsZW5kYXIuZ2V0SW5zdGFuY2UoKS5nZXRUaW1lKCkgKyAiXG4iOworCQloZWFkZXIgKz0gIiMgVGhpcyBmaWxlIGNvbnRhaW5zIHBvcHVsYXRpb24gdmFsdWVzIGZvciB0aGUgIiAvLyROT04tTkxTLTEkCisJCQkJKyBjb2RlLmdldE5hbWUoKSArICIgaW4gMjAwMFxuIjsgLy8kTk9OLU5MUy0xJAorCisJCWhlYWRlciArPSAiI1xuIjsgLy8kTk9OLU5MUy0xJAorCQkvLyBoZWFkZXIgKz0gIiMgV2hlcmUgbm8gcG9wdWxhdGlvbiBkYXRhIHdhcyBhdmFpbGFibGUgZm9yIHRoZSBsZXZlbCAyCisJCS8vIHJlZ2lvbnMgd2l0aGluIGEgY291bnRyeSwgdGhlIHBvcHVsYXRpb24gdmFsdWVzIGhhdmVcbiI7CisJCS8vIGhlYWRlciArPSAiIyBiZWVuIHNldCB0byB0aGUgTGV2ZWwgMSBwYXJlbnQgcmVnaW9uIHBvcHVsYXRpb24gKFApCisJCS8vIGRpdmlkZWQgYnkgdGhlIG51bWJlciBvZiBjb250YWluZWQgbGV2ZWwgMiBjaGlsZCByZWdpb25zIChOKS5cbiI7CisJCS8vIGhlYWRlciArPSAiIyBUaGUgYXBwcm94aW1hdGlvbiBlbmZvcmNlcyB0aGF0IHRoZSBzdW0gb2YgbGV2ZWwgMgorCQkvLyBwb3B1bGF0aW9ucyA9IHRoZSBsZXZlbCAxIHBvcHVsYXRpb24gYW5kIGFsbG93cyBjb21wb3NpdGlvbiBvZiBhCisJCS8vIG1vZGVsXG4iOworCQkvLyBoZWFkZXIgKz0gIiMgdXNpbmcgdGhlIGF2YWlsYWJsZSBtYXAgcmVzb2x1dGlvbnMuIFRoZXNlIGFwcHJveGltYXRpb24KKwkJLy8gdmFsdWVzIHdpbGwgYmUgcmVwbGFjZWQgYXMgYmV0dGVyIGRhdGEgYmVjb21lcyBhdmFpbGFibGUuXG4iOworCQkvLyBoZWFkZXIgKz0gIiMgVGhlIHJlZ2lvbnMgd2hlcmUgdGhpcyBhcHByb3hpbWF0aW9uIHdhcyB1c2VkIGFyZQorCQkvLyBpZGVudGlmaWVkIGJ5IHRoZSBmYWN0IHRoYXQgYWxsIGxldmVsIDIgcmVnaW9ucyBoYXZlIHRoZSBzYW1lXG4iOworCQkvLyBoZWFkZXIgKz0gIiMgcG9wdWxhdGlvbiAoUC9OKS5cbiI7CisJCS8vIGhlYWRlciArPSAiI1xuIjsKKworCQkvLyBBZGQgdGhlIGNvcHlyaWdodCBzdGF0ZW1lbnQuCisJCWhlYWRlciArPSBHZW5VdGlscy5nZXRDb3B5cmlnaHQoKTsKKworCQkvLyBBZGQgYW4gZXhwbGFuYXRpb24gb2YgdGhlIGtleSBmb3JtYXQgaW4gb3VyIGRhdGEgZmlsZXMuCisJCWhlYWRlciArPSBHZW5VdGlscy5nZXRLZXlGb3JtYXRFeHBsYW5hdGlvbigpOworCisJCWhlYWRlciArPSAiIyBUaGlzIGlzIHRoZSBuYW1lIG9mIHRoZSBjbGFzcyB0aGF0IHdpbGwgaW50ZXJwcmV0IHRoZSByZXN0IG9mIHRoZSBmaWxlJ3MgY29udGVudHNcbiI7IC8vJE5PTi1OTFMtMSQKKwkJaGVhZGVyICs9ICJSRUNPUkRfQ0xBU1NOQU1FID0gb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcm5hbC5kYXRhLkNvdW50cnlHcmFwaFJlY29yZCRDb3VudHJ5UG9wdWxhdGlvbkxhYmVsR3JhcGhSZWNvcmRcblxuIjsgLy8kTk9OLU5MUy0xJAorCisJCWhlYWRlciArPSAiIyBUaGUgSVNPLTMxNjYtMSBhbHBoYTMgY29kZSBmb3IgdGhlIGNvdW50cnlcbiI7IC8vJE5PTi1OTFMtMSQKKwkJaGVhZGVyICs9ICJJU09LRVkgPSAiICsgY29kZS5nZXRBbHBoYTMoKSArICJcblxuIjsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCQorCisJCS8vIGhlYWRlciArPSAiIyBUaGUgdW5pdHMgYXJlIGluZGl2aWR1YWxzXG5cbiI7CisKKwkJaGVhZGVyICs9ICIjIFRoZSBhZG1pbmlzdHJhdGlvbiBsZXZlbCBvZiB0aGUgcG9wdWxhdGlvbiBkYXRhXG4iOyAvLyROT04tTkxTLTEkCisJCWhlYWRlciArPSAiQURNSU5fTEVWRUwgPSAiICsgbGV2ZWwgKyAiXG5cbiI7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAorCisJCWhlYWRlciArPSAiIyBUaGlzIGlzIHRoZSBkYXRlIHJhbmdlIGZvciB3aGljaCB0aGUgcG9wdWxhdGlvbiB2YWx1ZXMgaW4gdGhpcyBmaWxlIGFyZSB2YWxpZCBcbiI7IC8vJE5PTi1OTFMtMSQKKwkJaGVhZGVyICs9ICIjIFNlZSBodHRwOi8vcHVybC5vcmcvZGMvdGVybXMvMS4xL3ZhbGlkXG4iOyAvLyROT04tTkxTLTEkCisJCWhlYWRlciArPSAiVkFMSUQgPSBzdGFydD0yMDA2LTAxLTAxOyBlbmQ9MjAwNi0xMi0zMTtcblxuIjsgLy8kTk9OLU5MUy0xJAorCisJCS8vIFRoZSBVbml0ZWQgTmF0aW9ucyBkYXRhIHBvbGljeSBhcHBsaWVzIG9ubHkgdG8gRXVyb3BlIDoKKwkJLy8gaGVhZGVyICs9IEdlblV0aWxzLmdldFVOUG9saWN5KCk7CisKKwkJaGVhZGVyICs9ICIjIFRoaXMgaXMgdGhlIHNvdXJjZSBvZiB0aGUgZGF0YVxuIjsgLy8kTk9OLU5MUy0xJAorCisJCS8vIE9wZW4gdGhlIFVSTCBmaWxlIGZvciB0aGlzIGNvdW50cnkuCisJCS8vIFV0aWxMb2dnZXIubG9nSW5mb3JtYXRpb24oInVybCBmaWxlID0gIiArIHVybEZpbGUpOworCQlCdWZmZXJlZFJlYWRlciB1cmxSZWFkZXIgPSBHZW5VdGlscy5vcGVuUmVhZGVyKHVybEZpbGUpOworCisJCXRyeSB7CisJCQkvLyBBZGQgYWxsIHRoZSBzb3VyY2UgVVJMcyBmb3IgdGhpcyBjb3VudHJ5LgorCQkJaWYgKHVybFJlYWRlciAhPSBudWxsKSB7CisJCQkJU3RyaW5nIGJ1ZmZlciA9IG51bGw7CisJCQkJd2hpbGUgKEdlblV0aWxzLkVPRihidWZmZXIgPSB1cmxSZWFkZXIucmVhZExpbmUoKSkgIT0gdHJ1ZSkgeworCisJCQkJCS8vIFV0aWxMb2dnZXIubG9nSW5mb3JtYXRpb24oIkJ1ZmZlciA9ICIgKyBidWZmZXIpOworCisJCQkJCS8vIFRva2VuaXplCisJCQkJCVN0cmluZ1Rva2VuaXplciB0b2tlbml6ZXIgPSBuZXcgU3RyaW5nVG9rZW5pemVyKGJ1ZmZlciwgIioiKTsgLy8kTk9OLU5MUy0xJAorCisJCQkJCS8vIFdlIGtub3cgdGhhdCB3ZSBleHBlY3Qgb25seSB0d28gdG9rZW5zLiBHZXQgdGhlbS4gT3JkZXIKKwkJCQkJLy8gbWF0dGVycyBoZXJlLgorCQkJCQlTdHJpbmdbXSB0b2tlbnMgPSBuZXcgU3RyaW5nWzJdOworCQkJCQl0b2tlbnNbREFUQV9ERVNDUklQVE9SXSA9IHRva2VuaXplci5uZXh0VG9rZW4oKTsKKwkJCQkJdG9rZW5zW1VSTF0gPSB0b2tlbml6ZXIubmV4dFRva2VuKCk7CisKKwkJCQkJaWYgKEdlblV0aWxzLmlzU291cmNlVVJMKHVybFNldCwgdG9rZW5zW0RBVEFfREVTQ1JJUFRPUl0pID09IHRydWUpIHsKKworCQkJCQkJLy8gdHJ5IHsKKwkJCQkJCS8vIElzIHRoaXMgZGF0YSBkZXNjcmlwdG9yIG9uZSBvZiBvdXIgYWN0aXZlIGRhdGEKKwkJCQkJCS8vIHNvdXJjZXMgPworCQkJCQkJaWYgKEdlblV0aWxzLmlzQWN0aXZlVVJMKHVybFN0YXR1cywKKwkJCQkJCQkJdG9rZW5zW0RBVEFfREVTQ1JJUFRPUl0pID09IGZhbHNlKSB7CisJCQkJCQkJLy8gTm8sIGl0IGlzIG5vdCBvbmUgYW4gYWN0aXZlIFVSTCwgc28gY29tbWVudCBpdAorCQkJCQkJCS8vIG91dAorCQkJCQkJCS8vIGhlYWRlciArPSAiIyAiICsgIlNPVVJDRSA9ICIgKworCQkJCQkJCS8vIFVSTEVuY29kZXIuZW5jb2RlKHRva2Vuc1tVUkxdLCAiVVRGLTgiKSArICJcbiI7CisJCQkJCQkJaGVhZGVyICs9ICIjICIgKyAiU09VUkNFID0gIiArIHRva2Vuc1tVUkxdICsgIlxuIjsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkIC8vJE5PTi1OTFMtMyQKKworCQkJCQkJfSBlbHNlIHsKKwkJCQkJCQkvLyBoZWFkZXIgKz0gIlNPVVJDRSA9ICIgKworCQkJCQkJCS8vIFVSTEVuY29kZXIuZW5jb2RlKHRva2Vuc1tVUkxdLCAiVVRGLTgiKSArICJcbiI7CisJCQkJCQkJaGVhZGVyICs9ICJTT1VSQ0UgPSAiICsgdG9rZW5zW1VSTF0gKyAiXG4iOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKKworCQkJCQkJfQorCisJCQkJCQkvLyB9IGNhdGNoIChqYXZhLmlvLlVuc3VwcG9ydGVkRW5jb2RpbmdFeGNlcHRpb24gZSkgeworCQkJCQkJLy8gVXRpbExvZ2dlci5sb2dJbmZvcm1hdGlvbigiRXJyb3I6IiArIGUuZ2V0TWVzc2FnZSgpKTsKKwkJCQkJCS8vIC8vJE5PTi1OTFMtMSQKKwkJCQkJCS8vIH0KKworCQkJCQl9CisKKwkJCQl9IC8vIHdoaWxlCisKKwkJCQkvLyBUbyBtYWtlIGl0IGxvb2sgYmV0dGVyLCBhZGQgYW4gZXh0cmEgbmV3IGxpbmUuCisJCQkJaGVhZGVyICs9ICJcbiI7IC8vJE5PTi1OTFMtMSQKKworCQkJfQorCisJCX0gY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKKwkJCS8vCisJCX0KKworCQloZWFkZXIgKz0gIiMgVGhlIHBvcHVsYXRpb24gaWRlbnRpZmllclxuIjsgLy8kTk9OLU5MUy0xJAorCQloZWFkZXIgKz0gIlBPUFVMQVRJT04gPSBodW1hblxuXG4iOyAvLyROT04tTkxTLTEkCisKKwkJc3dpdGNoIChsZXZlbCkgeworCisJCWNhc2UgRGF0YVR5cGVzLkxFVkVMXzA6CisJCQkvLyBEbyBub3RoaW5nLgorCQkJYnJlYWs7CisKKwkJY2FzZSBEYXRhVHlwZXMuTEVWRUxfMToKKwkJCWhlYWRlciArPSAiIyBTdGF0ZS9Qcm92aW5jZVxuXG4iOyAvLyROT04tTkxTLTEkCisJCQlicmVhazsKKworCQljYXNlIERhdGFUeXBlcy5MRVZFTF8yOgorCQkJaGVhZGVyICs9ICIjIExldmVsIDEgKGFkbWluIDEgPSBlLmcuLCBzdGF0ZSlcbiI7IC8vJE5PTi1OTFMtMSQKKwkJCWhlYWRlciArPSAiIyBMZXZlbCAyIChhZG1pbiAyID0gZS5nLiwgY291bnR5KVxuXG4iOyAvLyROT04tTkxTLTEkCisJCQlicmVhazsKKworCQlkZWZhdWx0OgorCQkJYnJlYWs7CisKKwkJfQorCisJCXJldHVybiBoZWFkZXI7CisJfQorCisJLyoqCisJICogQ29tcHV0ZSBhIGRlZmF1bHQgcG9wdWxhdGlvbiB2YWx1ZSBiYXNlZCBvbiBkYXRhIGZyb20gY29udGFpbmVyCisJICogCisJICogQHBhcmFtIGVudGl0eQorCSAqICAgICAgICAgICAgdGhlIGxvY2F0aW9uIGZvciB3aGljaCB3ZSB3YW50IHRvIGNyZWF0ZSBhbiBhcHByb3hpbWF0ZSB2YWx1ZQorCSAqIAorCSAqIEByZXR1cm4gdGhlIGFwcHJveGltYXRlIHBvcHVsYXRpb24gdmFsdWUKKwkgKi8KKworCXByb3RlY3RlZCBTdHJpbmcgZ2V0QXBwcm94aW1hdGVQb3B1bGF0aW9uKFN0cmluZyBlbnRpdHkpIHsKKworCQlmaW5hbCBpbnQgTE9DQVRJT04gPSAwOworCQlmaW5hbCBpbnQgUE9QVUxBVElPTiA9IDE7CisJCWZpbmFsIGludCBDT1VOVCA9IDI7CisKKwkJU3RyaW5nIGVudGl0eVN0ciA9IGVudGl0eS50b1VwcGVyQ2FzZSgpLnRyaW0oKTsKKworCQlJdGVyYXRvciBpdCA9IHBvcHVsYXRpb25Qcm9maWxlTGlzdC5pdGVyYXRvcigpOworCisJCXdoaWxlIChpdC5oYXNOZXh0KCkpIHsKKworCQkJU3RyaW5nIGN1cnJlbnQgPSAoU3RyaW5nKSBpdC5uZXh0KCk7CisKKwkJCS8vIFRva2VuaXplCisJCQlTdHJpbmdUb2tlbml6ZXIgdG9rZW5pemVyID0gbmV3IFN0cmluZ1Rva2VuaXplcihjdXJyZW50LCAiOiIpOyAvLyROT04tTkxTLTEkCisKKwkJCS8vIFdlIGtub3cgdGhhdCB3ZSBleHBlY3Qgb25seSB0d28gdG9rZW5zLiBHZXQgdGhlbS4KKwkJCS8vIE9yZGVyIG1hdHRlcnMgaGVyZS4KKwkJCVN0cmluZ1tdIHRva2VucyA9IG5ldyBTdHJpbmdbM107CisJCQkvLyBUaGlzIGlzIHRoZSBhZG1pbjEgcmVnaW9uCisJCQl0b2tlbnNbTE9DQVRJT05dID0gdG9rZW5pemVyLm5leHRUb2tlbigpLnRvVXBwZXJDYXNlKCkudHJpbSgpOworCQkJLy8gVGhpcyBpcyB0aGUgcG9wdWxhdGlvbiB2YWx1ZQorCQkJdG9rZW5zW1BPUFVMQVRJT05dID0gdG9rZW5pemVyLm5leHRUb2tlbigpOworCQkJLy8gVGhpcyBpcyB0aGUgbnVtYmVyIG9mIGFkbWluMiBsb2NhdGlvbiB3aXRoaW4gdGhpcyBhZG1pbiAxIHJlZ2lvbgorCQkJdG9rZW5zW0NPVU5UXSA9IHRva2VuaXplci5uZXh0VG9rZW4oKTsKKworCQkJaWYgKHRva2Vuc1tMT0NBVElPTl0uZXF1YWxzKGVudGl0eVN0cikKKwkJCQkJJiYgSW50ZWdlci5wYXJzZUludCh0b2tlbnNbMl0pICE9IDApIHsKKwkJCQkvLyBVdGlsTG9nZ2VyLmxvZ0luZm9ybWF0aW9uKCJWYWx1ZSBpcyA6ICIgKyB0b2tlbnNbMV0pOworCQkJCWludCB2YWwgPSBJbnRlZ2VyLnBhcnNlSW50KHRva2Vuc1sxXS5yZXBsYWNlKCIsIiwgIiIpKSAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKKwkJCQkJCS8gSW50ZWdlci5wYXJzZUludCh0b2tlbnNbMl0pOworCQkJCXJldHVybiBTdHJpbmcudmFsdWVPZih2YWwpOworCQkJfQorCisJCX0KKworCQlyZXR1cm4gREVGQVVMVDsKKwl9CisKKwkvKioKKwkgKiBGaW5kIHRoZSBwb3B1bGF0aW9uIHZhbHVlIGZvciBhIGdpdmVuIGVudGl0eS4KKwkgKiAKKwkgKiBAcGFyYW0gZW50aXR5CisJICogICAgICAgICAgICBhIGxvY2F0aW9uCisJICogQHBhcmFtIGxldmVsCisJICogICAgICAgICAgICBhZG1pbmlzdHJhdGl2ZSBsZXZlbCBmb3IgdGhlIGxvY2F0aW9uIChlbnRpdHkpCisJICogCisJICogQHJldHVybiB0aGUgcG9wdWxhdGlvbiBmb3IgYSBsb2NhdGlvbgorCSAqLworCXByb3RlY3RlZCBTdHJpbmcgZ2V0UG9wdWxhdGlvbihTdHJpbmcgZW50aXR5LCBpbnQgbGV2ZWwpIHsKKworCQlmaW5hbCBpbnQgRU5USVRZID0gMDsKKworCQlmaW5hbCBpbnQgTEVWRUwgPSAxOworCisJCWZpbmFsIGludCBQT1BVTEFUSU9OID0gMjsKKworCQlJdGVyYXRvciBpdCA9IHBvcHVsYXRpb25MaXN0Lml0ZXJhdG9yKCk7CisKKwkJU3RyaW5nIGVudGl0eVN0ciA9IGVudGl0eS50b1VwcGVyQ2FzZSgpOworCisJCXdoaWxlIChpdC5oYXNOZXh0KCkpIHsKKworCQkJU3RyaW5nW10gcG9wRGF0YSA9ICgoU3RyaW5nKSBpdC5uZXh0KCkpLnNwbGl0KCI6Iik7IC8vJE5PTi1OTFMtMSQKKworCQkJaWYgKGVudGl0eVN0ci5lcXVhbHMocG9wRGF0YVtFTlRJVFldLnRyaW0oKS50b1VwcGVyQ2FzZSgpKSkgeworCQkJCS8vIENoZWNrIGJvdGggZW50aXRpZXMgYmVsb25nIHRvIHNhbWUgbGV2ZWwKKwkJCQlpZiAoU3RyaW5nLnZhbHVlT2YobGV2ZWwpLmVxdWFscyhwb3BEYXRhW0xFVkVMXS50cmltKCkpID09IGZhbHNlKSB7CisJCQkJCS8vIElnbm9yZSA6IHNhbWUgbmFtZSAsIGJ1dCBkaWZmZXJlbnQgbGV2ZWwKKwkJCQkJY29udGludWU7CisJCQkJfQorCisJCQkJcmV0dXJuIHBvcERhdGFbUE9QVUxBVElPTl0udHJpbSgpOworCQkJfQorCQl9CisJCXJldHVybiBERUZBVUxUOworCX0KKworCS8qKgorCSAqIEZpbmQgdGhlIHBvcHVsYXRpb24gdmFsdWUgZm9yIGEgZ2l2ZW4gZW50aXR5LgorCSAqIAorCSAqIEBwYXJhbSBlbnRpdHkKKwkgKiAgICAgICAgICAgIGEgbG9jYXRpb24uCisJICogQHBhcmFtIGVudGl0eUNvbnRhaW5lcgorCSAqICAgICAgICAgICAgYSBjb250YWluZXIgZm9yIHRoZSBsb2NhdGlvbiAoZW50aXR5KQorCSAqIAorCSAqIEByZXR1cm4gdGhlIHBvcHVsYXRpb24gdmFsdWUgZm9yIGEgbG9jYXRpb24KKwkgKi8KKwlwcm90ZWN0ZWQgU3RyaW5nIGdldFBvcHVsYXRpb24oU3RyaW5nIGVudGl0eSwgU3RyaW5nIGVudGl0eUNvbnRhaW5lciwKKwkJCWludCBsZXZlbCkgeworCisJCWZpbmFsIGludCBFTlRJVFkgPSAwOworCisJCWZpbmFsIGludCBMRVZFTCA9IDE7CisKKwkJZmluYWwgaW50IFBPUFVMQVRJT04gPSAyOworCisJCVN0cmluZ1tdIHBvcERhdGEgPSBudWxsOworCisJCUl0ZXJhdG9yIGl0ID0gcG9wdWxhdGlvbkxpc3QuaXRlcmF0b3IoKTsKKworCQlTdHJpbmcgZW50aXR5U3RyID0gZW50aXR5LnRvVXBwZXJDYXNlKCkudHJpbSgpOworCisJCWVudGl0eVN0ciA9IGVudGl0eVN0ci5yZXBsYWNlKCJcXHQiLCAiIik7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAorCisJCVN0cmluZyBlbnRpdHlDb250YWluZXJTdHIgPSBlbnRpdHlDb250YWluZXIudG9VcHBlckNhc2UoKTsKKworCQl3aGlsZSAoaXQuaGFzTmV4dCgpKSB7CisKKwkJCXBvcERhdGEgPSAoKFN0cmluZykgaXQubmV4dCgpKS5zcGxpdCgiOiIpOyAvLyROT04tTkxTLTEkCisKKwkJCVN0cmluZ1tdIGNvbXBhcmUgPSBudWxsOworCisJCQkvLyBHZXQgdGhlIGVudGl0eSBuYW1lIGFuZCByZW1vdmUgYmxhbmtzCisJCQlTdHJpbmcgbG9jYXRpb24gPSBwb3BEYXRhW0VOVElUWV0udG9VcHBlckNhc2UoKS50cmltKCk7CisKKwkJCWxvY2F0aW9uID0gbG9jYXRpb24ucmVwbGFjZSgiXFx0IiwgIiIpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKKworCQkJbG9jYXRpb24gPSBsb2NhdGlvbi50b1VwcGVyQ2FzZSgpLnRyaW0oKTsKKworCQkJLy8gSGFuZGxlIEFsaWFzZXMgLS0gY29tcGxleCBzdHVmZiA6JAorCQkJaWYgKGxvY2F0aW9uLmNvbnRhaW5zKCJbIikpIHsgLy8kTk9OLU5MUy0xJAorCisJCQkJbG9jYXRpb24gPSBsb2NhdGlvbi5yZXBsYWNlKCJdIiwgIiIpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKKworCQkJCS8vIFRva2VuaXplCisJCQkJU3RyaW5nVG9rZW5pemVyIHRva2VucyA9IG5ldyBTdHJpbmdUb2tlbml6ZXIobG9jYXRpb24sICJbIik7IC8vJE5PTi1OTFMtMSQKKworCQkJCS8vIEdldCB0b2tlbnMgLT4gb3JkZXIgbWF0dGVycyBoZXJlIQorCQkJCWNvbXBhcmUgPSBuZXcgU3RyaW5nW3Rva2Vucy5jb3VudFRva2VucygpXTsKKwkJCQlpbnQgaSA9IDA7CisJCQkJd2hpbGUgKHRva2Vucy5oYXNNb3JlVG9rZW5zKCkpIHsKKwkJCQkJY29tcGFyZVtpKytdID0gdG9rZW5zLm5leHRUb2tlbigpLnRvVXBwZXJDYXNlKCkudHJpbSgpOworCQkJCX0KKwkJCX0KKworCQkJaWYgKGNvbXBhcmUgIT0gbnVsbCkgeworCQkJCWZvciAoaW50IGkgPSAwOyBpIDwgY29tcGFyZS5sZW5ndGg7IGkrKykgeworCQkJCQlpZiAoZW50aXR5U3RyLnJlcGxhY2UoIi0iLCAiICIpLmVxdWFscyggLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCisJCQkJCQkJY29tcGFyZVtpXS5yZXBsYWNlKCItIiwgIiAiKSkgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCisJCQkJCQkJfHwgY29tcGFyZVtpXS5lcXVhbHMoZW50aXR5U3RyICsgIi0xIikgLy8kTk9OLU5MUy0xJAorCQkJCQkJCXx8IGNvbXBhcmVbaV0uZXF1YWxzKGVudGl0eUNvbnRhaW5lclN0cikpIHsKKworCQkJCQkJLy8gQ2hlY2sgYm90aCBlbnRpdGllcyBiZWxvbmcgdG8gc2FtZSBsZXZlbAorCQkJCQkJaWYgKFN0cmluZy52YWx1ZU9mKGxldmVsKS5lcXVhbHMocG9wRGF0YVtMRVZFTF0udHJpbSgpKSA9PSBmYWxzZSkgeworCQkJCQkJCS8vIElnbm9yZSA6IHNhbWUgbmFtZSAsIGJ1dCBkaWZmZXJlbnQgbGV2ZWwKKwkJCQkJCQljb250aW51ZTsKKwkJCQkJCX0KKworCQkJCQkJcmV0dXJuIHBvcERhdGFbUE9QVUxBVElPTl0udHJpbSgpOworCisJCQkJCX0KKworCQkJCX0KKwkJCX0gZWxzZSBpZiAoZW50aXR5U3RyLmVxdWFscyhsb2NhdGlvbikKKwkJCQkJfHwgZW50aXR5U3RyLnJlcGxhY2UoIi0iLCAiICIpLmVxdWFscyhsb2NhdGlvbikgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCisJCQkJCXx8IGxvY2F0aW9uLmVxdWFscyhlbnRpdHlTdHIgKyAiLTEiKSkgeyAvLyROT04tTkxTLTEkCisKKwkJCQkvLyBDaGVjayBib3RoIGVudGl0aWVzIGJlbG9uZyB0byBzYW1lIGxldmVsCisJCQkJaWYgKFN0cmluZy52YWx1ZU9mKGxldmVsKS5lcXVhbHMocG9wRGF0YVtMRVZFTF0udHJpbSgpKSA9PSBmYWxzZSkgeworCQkJCQkvLyBJZ25vcmUgOiBzYW1lIG5hbWUgLCBidXQgZGlmZmVyZW50IGxldmVsCisJCQkJCWNvbnRpbnVlOworCQkJCX0KKworCQkJCXJldHVybiBwb3BEYXRhW1BPUFVMQVRJT05dLnRyaW0oKTsKKworCQkJfQorCisJCX0gLy8gd2hpbGUKKworCQlyZXR1cm4gREVGQVVMVDsKKwl9CisKKwkvKioKKwkgKiBNYWluIGV4ZWN1dGlvbiBlbnRyeSBwb2ludC4KKwkgKiAKKwkgKiBAcGFyYW0gYXJncworCSAqIAorCSAqLworCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKKwkJLy8gZmluYWwgaW50IElTT18zMTY2XzEgPSAwOworCQkvLyBmaW5hbCBpbnQgSVNPXzMxNjZfMiA9IDE7CisJCS8vIGZpbmFsIGludCBGSVhfRklMRSA9IDI7CisJCS8vIGZpbmFsIGludCBQT1BVTEFUSU9OX0RBVEEgPSAzOworCQkvLyBmaW5hbCBpbnQgUE9QVUxBVElPTl9QUk9GSUxFID0gNDsKKwkJLy8gZmluYWwgaW50IFRBUkdFVF9MSVNUID0gNTsKKwkJLy8gZmluYWwgaW50IExFWF9ESVIgPSA2OworCQkvLyBmaW5hbCBpbnQgT1VUUFVUX0RJUiA9IDc7CisJCS8vIGZpbmFsIGludCBQQVJBTVMgPSA4OworCQkvLworCQkvLyBpZiAoYXJncy5sZW5ndGggPCBQQVJBTVMpIHsKKwkJLy8KKwkJLy8gVXRpbExvZ2dlci5sb2dJbmZvcm1hdGlvbigiLS1Xcm9uZyBhcmd1bWVudHMtLSIpOyAvLyROT04tTkxTLTEkCisJCS8vIFN5c3RlbS5vdXQKKwkJLy8gLnByaW50bG4oIlx0VG8gcnVuLCBwbGVhc2UgcHJvdmlkZSB0aGUgZm9sbG93aW5nIGFyZ3VtZW50cyA6ICIpOworCQkvLyAvLyROT04tTkxTLTEkCisJCS8vIFV0aWxMb2dnZXIubG9nSW5mb3JtYXRpb24oIlx0XHQgSVNPIDMxNjYtMSBmaWxlIik7IC8vJE5PTi1OTFMtMSQKKwkJLy8gVXRpbExvZ2dlci5sb2dJbmZvcm1hdGlvbigiXHRcdCBJU08gMzE2Ni0yIGZpbGUiKTsgLy8kTk9OLU5MUy0xJAorCQkvLyBVdGlsTG9nZ2VyLmxvZ0luZm9ybWF0aW9uKCJcdFx0IElTTyBmaXggZmlsZSIpOyAvLyROT04tTkxTLTEkCisJCS8vIFV0aWxMb2dnZXIubG9nSW5mb3JtYXRpb24oIlx0XHQgUG9wdWxhdGlvbiBkYXRhIGZpbGUiKTsgLy8kTk9OLU5MUy0xJAorCQkvLyBVdGlsTG9nZ2VyLmxvZ0luZm9ybWF0aW9uKCJcdFx0IFBvcHVsYXRpb24gcHJvZmlsZSIpOyAvLyROT04tTkxTLTEkCisJCS8vIFV0aWxMb2dnZXIubG9nSW5mb3JtYXRpb24oIlx0XHQgVGFyZ2V0IGNvdW50cmllcyBmaWxlIik7IC8vJE5PTi1OTFMtMSQKKwkJLy8gVXRpbExvZ2dlci5sb2dJbmZvcm1hdGlvbigiXHRcdCBMZXhpY29ncmFwaGljIHNvcnRpbmcgZGlyZWN0b3J5Iik7CisJCS8vIC8vJE5PTi1OTFMtMSQkCisJCS8vIFV0aWxMb2dnZXIubG9nSW5mb3JtYXRpb24oIlx0XHQgT3V0cHV0IGRpcmVjdG9yeSIpOyAvLyROT04tTkxTLTEkCisJCS8vIHJldHVybjsKKwkJLy8gfQorCQkvLworCQkvLyBQb3B1bGF0aW9uR2VuZXJhdG9yIGdlbiA9IG5ldyBQb3B1bGF0aW9uR2VuZXJhdG9yKGFyZ3NbSVNPXzMxNjZfMV0sCisJCS8vIGFyZ3NbSVNPXzMxNjZfMl0sIGFyZ3NbRklYX0ZJTEVdLCBhcmdzW1BPUFVMQVRJT05fREFUQV0sCisJCS8vIGFyZ3NbUE9QVUxBVElPTl9QUk9GSUxFXSwgYXJnc1tUQVJHRVRfTElTVF0sIGFyZ3NbTEVYX0RJUl0sCisJCS8vIGFyZ3NbT1VUUFVUX0RJUl0pOworCQkvLyBnZW4ucnVuKCk7CisKKwkJZmluYWwgaW50IENPTkZJR19GSUxFID0gMDsKKwkJZmluYWwgaW50IFBBUkFNUyA9IDE7CisKKwkJaWYgKGFyZ3MubGVuZ3RoIDwgUEFSQU1TKSB7CisJCQlVdGlsTG9nZ2VyLmxvZ0luZm9ybWF0aW9uKCJcdFx0LS1Xcm9uZyBhcmd1bWVudHMtLSIpOyAvLyROT04tTkxTLTEkCisJCQlTeXN0ZW0ub3V0CisJCQkJCS5wcmludGxuKCJcdFx0VG8gcnVuLCBwbGVhc2UgcHJvdmlkZSB0aGUgZm9sbG93aW5nIGFyZ3VtZW50KHMpIDogIik7IC8vJE5PTi1OTFMtMSQKKwkJCVV0aWxMb2dnZXIubG9nSW5mb3JtYXRpb24oIlx0XHRcdCBDb25maWd1cmF0aW9uIGZpbGUiKTsgLy8kTk9OLU5MUy0xJAorCQkJU3lzdGVtLmV4aXQoMSk7CisJCX0KKworCQlQb3B1bGF0aW9uR2VuZXJhdG9yIGdlbiA9IG5ldyBQb3B1bGF0aW9uR2VuZXJhdG9yKGFyZ3NbQ09ORklHX0ZJTEVdKTsKKwkJZ2VuLnJ1bigpOworCisJfQorCit9CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91dGlsaXR5L2dlbmVyYXRvcnMvUG9wdWxhdGlvbk1vZGlmaWVyLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91dGlsaXR5L2dlbmVyYXRvcnMvUG9wdWxhdGlvbk1vZGlmaWVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmQzMjM2MAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3NyYy9vcmcvZWNsaXBzZS9zdGVtL3V0aWxpdHkvZ2VuZXJhdG9ycy9Qb3B1bGF0aW9uTW9kaWZpZXIuamF2YQpAQCAtMCwwICsxLDEwMCBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkuZ2VuZXJhdG9yczsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqYXZhLmlvLkJ1ZmZlcmVkUmVhZGVyOworaW1wb3J0IGphdmEuaW8uRmlsZTsKK2ltcG9ydCBqYXZhLmlvLkZpbGVJbnB1dFN0cmVhbTsKK2ltcG9ydCBqYXZhLmlvLkZpbGVXcml0ZXI7CitpbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbVJlYWRlcjsKK2ltcG9ydCBqYXZhLnRleHQuU2ltcGxlRGF0ZUZvcm1hdDsKK2ltcG9ydCBqYXZhLnV0aWwuRGF0ZTsKKworLyoqCisgKiBHaXZlbiBhIGRhdGEgcmVmZXJlbmNlIGRhdGUgKHdoZW4gd2FzIHBvcHVsYXRpb24gdmFsdWVzIHRha2VuKSwgYSBkZXNpcmVkIHRhcmdldCBkYXRlIGFuZAorICogYSBkYWlseSBncm93dGggcmF0ZSwgcmV2ZXJzZSBwb3B1bGF0aW9uIHZhbHVlcyBiYWNrIChvciBmb3J3YXJkKSB0byB0aGUgdGFyZ2V0IGRhdGUgaW4KKyAqIGFsbCBwb3B1bGF0aW9uIHByb3BlcnRpZXMgZmlsZSBmb3VuZCBpbiB0aGUgdGFyZ2V0IGRpcmVjdG9yeQorICovCitwdWJsaWMgY2xhc3MgUG9wdWxhdGlvbk1vZGlmaWVyIHsKKwkKKwlzdGF0aWMgU3RyaW5nIExTID0gU3lzdGVtLmdldFByb3BlcnR5KCJsaW5lLnNlcGFyYXRvciIpOyAvLyROT04tTkxTLTEkCisJCisJLyoqCisJICogCisJICogQHBhcmFtIGFyZ3MKKwkgKi8KKwlAU3VwcHJlc3NXYXJuaW5ncygibmxzIikKKwlwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmcgW10gYXJncykgeworCQlpZihhcmdzLmxlbmd0aCA8IDQpIHsKKwkJCVN5c3RlbS5lcnIucHJpbnRsbigiVXNhZ2U6IFBvcHVsYXRpb25Nb2RpZmllciA8dGFyZ2V0IGRpcj4gPHJlZmVyZW5jZSBkYXRlPiA8dGFyZ2V0IGRhdGU+IDxkYWlseSBncm93dGggcmF0ZT4iKTsKKwkJCVN5c3RlbS5leGl0KC0xKTsKKwkJfQorCQkKKwkJdHJ5IHsKKwkJU3RyaW5nIGRpciA9IGFyZ3NbMF07CisJCVNpbXBsZURhdGVGb3JtYXQgc2RmID0gbmV3IFNpbXBsZURhdGVGb3JtYXQoIk0vZC95Iik7CisJCURhdGUgcmVmID0gc2RmLnBhcnNlKGFyZ3NbMV0pOworCQlEYXRlIHRhcmdldCA9IHNkZi5wYXJzZShhcmdzWzJdKTsKKwkJZG91YmxlIGRheXNiYWNrd2FyZCA9IChyZWYuZ2V0VGltZSgpIC0gdGFyZ2V0LmdldFRpbWUoKSkgLyAoMzYwMCoyNCoxMDAwKTsKKwkJZG91YmxlIGdyb3d0aCA9IERvdWJsZS5wYXJzZURvdWJsZShhcmdzWzNdKTsKKwkJCisJCQorCQlGaWxlIGYgPSBuZXcgRmlsZShkaXIpOworCQlpZighZi5leGlzdHMoKSB8fCAhZi5pc0RpcmVjdG9yeSgpKSB7CisJCQlTeXN0ZW0uZXJyLnByaW50bG4oIkVycm9yLCAiK2RpcisiIGlzIG5vdCBhIGRpcmVjdG9yeSBvciBkb2Vzbid0IGV4aXN0Iik7CisJCQlTeXN0ZW0uZXhpdCgtMSk7CisJCX0KKwkJCisJCQorCQlTdHJpbmcgW10gZmlsZXMgPSBmLmxpc3QoKTsKKwkJZm9yKFN0cmluZyBmaWxlIDogZmlsZXMpIHsKKwkJCWlmKCFmaWxlLmNvbnRhaW5zKCJfcG9wdWxhdGlvbi5wcm9wZXJ0aWVzIikpIGNvbnRpbnVlOworCQkJRmlsZSBwcm9wZmlsZSA9IG5ldyBGaWxlKGRpcitGaWxlLnNlcGFyYXRvcitmaWxlKTsKKwkJCisJCQlCdWZmZXJlZFJlYWRlciBpcmVhZGVyID0gbmV3IEJ1ZmZlcmVkUmVhZGVyKG5ldyBJbnB1dFN0cmVhbVJlYWRlcihuZXcgRmlsZUlucHV0U3RyZWFtKHByb3BmaWxlKSkpOworCQkgICAKKwkJCUZpbGVXcml0ZXIgZncgPSBuZXcgRmlsZVdyaXRlcihkaXIrRmlsZS5zZXBhcmF0b3IrZmlsZSsiLm5ldyIpOworCQkJCisJCQlTdHJpbmcgbGluZTsKKwkJICAgIHdoaWxlKChsaW5lPWlyZWFkZXIucmVhZExpbmUoKSkgIT0gbnVsbCkgeworCQkgICAgCWlmKCFsaW5lLnN0YXJ0c1dpdGgoIiMiKSAmJgorCQkgICAgCQkJIWxpbmUuc3RhcnRzV2l0aCgiUkVDT1JEX0NMQVNTTkFNRSIpICYmCisJCSAgICAJCQkhbGluZS5zdGFydHNXaXRoKCJJU09LRVkiKSAmJgorCQkgICAgCQkJIWxpbmUuc3RhcnRzV2l0aCgiQURNSU5fTEVWRUwiKSAmJgorCQkgICAgCQkJIWxpbmUuc3RhcnRzV2l0aCgiVkFMSUQiKSAmJgorCQkgICAgCQkJIWxpbmUuc3RhcnRzV2l0aCgiU09VUkNFIikgJiYKKwkJICAgIAkJCSFsaW5lLnN0YXJ0c1dpdGgoIlBPUFVMQVRJT04iKSAmJgorCQkgICAgCQkJIWxpbmUuc3RhcnRzV2l0aCgiWUVBUiIpICYmCisJCSAgICAJCQkhKGxpbmUudHJpbSgpLmxlbmd0aCgpID09IDApCisJCSAgICAJCQkpIHsKKwkJICAgIAkJLy8gRmluZCB0aGUgcG9wdWxhdGlvbiBudW1iZXIKKwkJICAgIAkJCisJCSAgICAJCWludCBlcWluZGV4ID0gbGluZS5pbmRleE9mKCI9Iik7CisJCSAgICAJCVN0cmluZyBwb3BzID0gbGluZS5zdWJzdHJpbmcoZXFpbmRleCsxKTsKKwkJICAgIAkJZG91YmxlIHJlZl9wb3AgPSBEb3VibGUucGFyc2VEb3VibGUocG9wcyk7CisJCSAgICAJCWRvdWJsZSBnID0gMS4wK2dyb3d0aDsKKwkJICAgIAkJZG91YmxlIGZhY3QgPSBNYXRoLnBvdyhnLCBkYXlzYmFja3dhcmQpOworCQkgICAgCQlsb25nIHRhcmdldF9wb3AgPSAobG9uZykocmVmX3BvcCAvIGZhY3QpOworCQkgICAgCQlsaW5lID0gbGluZS5zdWJzdHJpbmcoMCwgZXFpbmRleCkrIiA9ICIrdGFyZ2V0X3BvcDsKKwkJICAgIAl9CisJCSAgICAJZncud3JpdGUobGluZStMUyk7CisJCSAgICB9CisJCSAgICBmdy5mbHVzaCgpOworCQkgICAgZncuY2xvc2UoKTsKKwkJICAgIAorCQl9ICAvLyBGb3IgZWFjaCBmaWxlCisJfSBjYXRjaChFeGNlcHRpb24gZSkgeworCQllLnByaW50U3RhY2tUcmFjZSgpOworCX0KKwkJCisJfQorfQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdXRpbGl0eS9nZW5lcmF0b3JzL1BvcHVsYXRpb25Qcm9maWxlci5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdXRpbGl0eS9nZW5lcmF0b3JzL1BvcHVsYXRpb25Qcm9maWxlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVkOTg3OTYKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91dGlsaXR5L2dlbmVyYXRvcnMvUG9wdWxhdGlvblByb2ZpbGVyLmphdmEKQEAgLTAsMCArMSw1NDAgQEAKKy8qKgorICogCisgKi8KK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5LmdlbmVyYXRvcnM7CisKK2ltcG9ydCBqYXZhLmlvLkJ1ZmZlcmVkUmVhZGVyOworaW1wb3J0IGphdmEuaW8uRmlsZTsKK2ltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOworaW1wb3J0IGphdmEuaW8uUHJpbnRXcml0ZXI7CitpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKK2ltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CitpbXBvcnQgamF2YS51dGlsLlN0cmluZ1Rva2VuaXplcjsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcworICogcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZgorICogdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzCisgKiBhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqIAorICogQ29udHJpYnV0b3JzOiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKgorICogCisgKiBTVEVNIElJIERhdGEgTWlncmF0aW9uL0dlbmVyYXRpb24gVXRpbGl0aWVzIDogSW5zdGFuY2VzIG9mIHRoaXMgY2xhc3MgZmluZHMKKyAqIG91dCBob3cgbWFueSBsZXZlbCAyIGFkbWluaXN0cmF0aW9ucyBlYWNoIGxldmVsIDEgYWRtaW4gaGFzLiBJbiBvdGhlciB3b3JkcywKKyAqIGl0IHByb2ZpbGVzIGVhY2ggbGV2ZWwgMSBhZG1pbiBiYXNlZCBvbiBpdHMgcG9wdWxhdGlvbiBhbmQgdGhlIG51bWJlciBvZgorICogbGV2ZWwgMiBhZG1pbmlzdHJhdGlvbnMgdGhhdCBiZWxvbmcgdG8gaXQuCisgKiAKKyAqIFRvIHJ1biBhZGQgdGhlIGZvbGxvd2luZyBwYXJhbWV0ZXJzIHRvIHRoZSBydW4gY29uZmlndXJhdGlvbjoKKyAqIAorICogQzpcc3RlbUlJXG9yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eVxkYXRhTWlncmF0aW9uXGlucHV0XElTTzMxNjYtMVxJU08zMTY2XzFfZW4udHh0CisgKiBDOlxzdGVtSUlcb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5XGRhdGFNaWdyYXRpb25caW5wdXRcQXJlYVBvcHVsYXRpb25EYXRhXAorICogQzpcc3RlbUlJXG9yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eVxkYXRhTWlncmF0aW9uXGlucHV0XHByb3BlcnRpZXNcQ291bnRyaWVzLnR4dAorICogQzpcc3RlbUlJXG9yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eVxkYXRhTWlncmF0aW9uXGlucHV0XHByb2ZpbGVzXAorICogCisgKi8KK3B1YmxpYyBjbGFzcyBQb3B1bGF0aW9uUHJvZmlsZXIgeworCisJcHJpdmF0ZSBTdHJpbmcgcG9wdWxhdGlvbkRhdGEgPSBudWxsOworCisJcHJpdmF0ZSBTdHJpbmcgb3V0cHV0RGlyID0gbnVsbDsKKworCXByaXZhdGUgU3RyaW5nIHRhcmdldEZpbGUgPSBudWxsOworCisJcHJpdmF0ZSBTdHJpbmcgaXNvMzE2Nl8xID0gbnVsbDsKKworCS8qKgorCSAqIExpc3RzIGZvciBwb3B1bGF0aW9uIGRhdGEuCisJICovCisKKwlMaXN0IHRhcmdldExpc3QgPSBudWxsOworCisJTGlzdCBwb3B1bGF0aW9uTGlzdCA9IG51bGw7CisKKwlMaXN0IGNvZGVMaXN0ID0gbnVsbDsKKworCS8qKgorCSAqIFN0cmluZyB1c2VkIHRvIGluZGljYXRlIGRlZmF1bHQgdmFsdWUgZm9yIHVua25vd24gYXJlYXMuCisJICovCisJU3RyaW5nIERFRkFVTFQgPSAiMCI7IC8vJE5PTi1OTFMtMSQKKworCS8qKgorCSAqIENvbnN0cnVjdG9yCisJICogCisJICogQHBhcmFtIGlzbzMxNjZfMSAtCisJICogICAgICAgICAgICBkYXRhIGZpbGUgd2l0aCB0aGUgSVNPMzE2Ni0xIEFMUEhBXzIgYW5kIEFMUEhBXzMgY29kZXMuCisJICogQHBhcmFtIHBvcHVsYXRpb25EYXRhIC0KKwkgKiAgICAgICAgICAgIHRoZSBkaXJlY3RvcnkgY29udGFpbmluZyBwb3B1bGF0aW9uIGRhdGEgZm9yIGFsbCBjb3VudHJpZXMKKwkgKiBAcGFyYW0gdGFyZ2V0RmlsZSAtCisJICogICAgICAgICAgICBkYXRhIGZpbGUgd2hlcmUgd2UgZmluZCBhIGxpc3Qgb2YgY291bnRyaWVzIGZvciBnZW5lcmF0aW9uIG9mCisJICogICAgICAgICAgICB0aGVpciBjb3JyZXNwb25kaW5nIGFyZWEucHJvcGVydGllcyBmaWxlcy4KKwkgKiBAcGFyYW0gb3V0cHV0RGlyIC0KKwkgKiAgICAgICAgICAgIHRoZSBvdXRwdXQgZGlyZWN0b3J5IGZvciB0aGUgZmlsZXMgZ2VuZXJhdGVkLgorCSAqIAorCSAqLworCXB1YmxpYyBQb3B1bGF0aW9uUHJvZmlsZXIoU3RyaW5nIGlzbzMxNjZfMSwgU3RyaW5nIHBvcHVsYXRpb25EYXRhLAorCQkJU3RyaW5nIHRhcmdldEZpbGUsIFN0cmluZyBvdXRwdXREaXIpIHsKKwkJLy8gU2V0IHZhbHVlcyBvZiBnbG9iYWwgdmFyaWFibGVzLgorCQl0aGlzLmlzbzMxNjZfMSA9IGlzbzMxNjZfMTsKKwkJdGhpcy5vdXRwdXREaXIgPSBvdXRwdXREaXI7CisJCXRoaXMudGFyZ2V0RmlsZSA9IHRhcmdldEZpbGU7CisJCXRoaXMucG9wdWxhdGlvbkRhdGEgPSBwb3B1bGF0aW9uRGF0YTsKKwl9CisKKwkvKioKKwkgKiBSdW4gdGhlIGdlbmVyYXRvci4KKwkgKiAKKwkgKi8KKwlwdWJsaWMgdm9pZCBydW4oKSB7CisJCS8vIFJlYWQgYW5kIGtlZXAgaW4gbWVtb3J5IGEgbGlzdCBvZiB0aGUgY291bnRyaWVzIHdlIHdhbnQuCisJCXRhcmdldExpc3QgPSBHZW5VdGlscy5wb3B1bGF0ZUxpc3QodGFyZ2V0RmlsZSk7CisKKwkJLy8gUmVhZCBhbmQga2VlcCBpbiBtZW1vcnkgYSBsaXN0IG9mIHRoZSBJU08zMTY2LTEgQUxQSEEyLCBBTFBIQTMsIGFuZAorCQkvLyBudW1lcmljIGNvZGVzLgorCQljb2RlTGlzdCA9IEdlblV0aWxzLnBvcHVsYXRlTGlzdChpc28zMTY2XzEpOworCisJCS8vIE5vdywgcHJvY2VzcyBlYWNoIGl0ZW0gaW4gdGhlIHRhcmdldCBsaXN0LgorCQlwcm9jZXNzKCk7CisKKwl9CisKKwkvKioKKwkgKiBQcm9jZXNzIG91ciBnbG9iYWwgbGlzdCBvZiB0YXJnZXQgY291bnRyaWVzLiBGb3IgZWFjaCBjb3VudHJ5IGluIGxpc3QsCisJICogZ2VuZXJhdGUgaXRzIHBvcHVsYXRpb24ucHJvcGVydGllcyBmaWxlLgorCSAqIAorCSAqLworCXByb3RlY3RlZCB2b2lkIHByb2Nlc3MoKSB7CisKKwkJZmluYWwgaW50IENPTlRBSU5FUiA9IDA7CisJCWZpbmFsIGludCBDT1VOVCA9IDE7CisKKwkJLyoqCisJCSAqIEhhc2ggbWFwIGZvciBkZWFsaW5nIHdpdGggcG9wdWxhdGlvbiBkYXRhCisJCSAqLworCQlIYXNoTWFwPFN0cmluZywgU3RyaW5nPiBwRGF0YSA9IG5ldyBIYXNoTWFwPFN0cmluZywgU3RyaW5nPigpOworCisJCS8vIE9iamVjdCBob2xkaW5nIElTTzMxNjYtMSByZWxhdGVkIGRhdGEuCisJCUlTT0NvZGUxIGlzb0NvZGUgPSBudWxsOworCisJCS8vIEEgd3JpdGVyIGZvciB0aGUgbmV3IGZpbGUgd2UgYXJlIGNyZWF0aW5nLgorCQlQcmludFdyaXRlciBwcm9wZXJ0aWVzRmlsZSA9IG51bGw7CisKKwkJLy8gTmFtZSBvZiB0aGUgbmV3IHByb3BlcnRpZXMgZmlsZS4KKwkJU3RyaW5nIGZpbGVOYW1lID0gbnVsbDsKKworCQlpbnQgc2l6ZSA9IHRhcmdldExpc3Quc2l6ZSgpOworCisJCS8vIEl0ZXJhdGUgZm9yIGV2ZXJ5IGNvdW50cnkgYW5kIGNyZWF0ZSBpdHMgcG9wdWxhdGlvbi5wcm9wZXJ0aWVzIGZpbGUuCisJCWZvciAoaW50IGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7CisKKwkJCS8vIEdldCB0aGUgbmV4dCBjb3VudHJ5IGluIHRoZSBsaXN0LgorCQkJU3RyaW5nIGZpbGUgPSAoKFN0cmluZykgdGFyZ2V0TGlzdC5nZXQoaSkpLnRyaW0oKTsKKworCQkJLy8gQW4gaW5kZXggZm9yIHVua253b24gb3Igbi5hLiBlbnRyaWVzCisJCQlpbnQgdW5rQ291bnRlciA9IDE7CisKKwkJCS8vIE9wZW4gdGhlIGRhdGEgc291cmNlIGZpbGUgZm9yIHRoaXMgY291bnRyeS4KKwkJCUJ1ZmZlcmVkUmVhZGVyIHJlYWRlciA9IEdlblV0aWxzLm9wZW5SZWFkZXIoZmlsZSk7CisJCQlVdGlsTG9nZ2VyLmxvZ0luZm9ybWF0aW9uKCI8PDw8IFByb2Nlc3NpbmcgY291bnRyeSA6ICIgKyBmaWxlICsgIiA+Pj4+Iik7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAorCQkJdHJ5IHsKKworCQkJCWlmIChyZWFkZXIgIT0gbnVsbCkgeworCisJCQkJCVN0cmluZyBidWZmZXIgPSBudWxsOworCQkJCQkvLyBEZXNjcmliZXMgbGV2ZWwKKwkJCQkJLy8gb2YgZGF0YSB3ZQorCQkJCQkvLyBhcmUgbm93IHByb2Nlc3NpbmcgOiBMRVZFTDAsIExFVkVMMSwgb3IgTEVWRUwyLgorCQkJCQlpbnQgbGV2ZWwgPSAtMTsKKwkJCQkJLy8gUmVjb3JkIHRoZSBwcmV2aW91cyBsZXZlbC4KKwkJCQkJaW50IG9sZExldmVsID0gbGV2ZWwgLSAxOworCQkJCQkvLyBXZSB0YWtlIGEgY2h1bmsgb2YgdGhlIGRhdGEgW0JVRkZFUl9NSU4sQlVGRkVSX01BWF0gdG8KKwkJCQkJLy8gbWFrZSBwcm9jZXNzaW5nIG1vcmUKKwkJCQkJLy8gZWZmaWNpZW50LCB3ZSBkb250IG5lZWQgYWxsIG9mIGl0LgorCQkJCQlpbnQgQlVGRkVSX01JTiA9IDA7CisJCQkJCWludCBCVUZGRVJfTUFYID0gMTIwOworCisJCQkJCUxpc3Q8U3RyaW5nPiBlbnRyeUxpc3QgPSBudWxsOworCisJCQkJCXdoaWxlIChHZW5VdGlscy5FT0YoYnVmZmVyID0gcmVhZGVyLnJlYWRMaW5lKCkpICE9IHRydWUpIHsKKworCQkJCQkJLy8gTWFrZSBzdXJlIHRoYXQgd2UgbWFyayBhbGwgdW5rbm93biBkYXRhLgorCQkJCQkJYnVmZmVyID0gYnVmZmVyLnJlcGxhY2UoIiwsIiwgIixVTktOT1dOLCIpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKKworCQkJCQkJLy8gVXNlIG9ubHkgcGFydCBvZiB0aGUgYnVmZmVyLCBub3QgYWxsIG9mIGl0IGZvcgorCQkJCQkJLy8gZWZmaWNpZW5jeS4KKwkJCQkJCVN0cmluZ1tdIGl0ZW1zID0gR2VuVXRpbHMKKwkJCQkJCQkJLmV4dHJhY3QoYnVmZmVyLmxlbmd0aCgpIDwgQlVGRkVSX01BWCA/IGJ1ZmZlcgorCQkJCQkJCQkJCTogYnVmZmVyLnN1YnN0cmluZyhCVUZGRVJfTUlOLAorCQkJCQkJCQkJCQkJQlVGRkVSX01BWCkpOworCisJCQkJCQkvLyBHZXQgdGhlIGNvdW50cnkgbmFtZQorCQkJCQkJU3RyaW5nIGNvdW50cnkgPSBpdGVtc1tJU09EYXRhLkNPVU5UUllfTkFNRV07CisKKwkJCQkJCS8vIEdldCB0aGUgSVNPMzE2Ni0xIGluZm8gZm9yIHRoaXMgY291bnRyeQorCQkJCQkJaWYgKGlzb0NvZGUgPT0gbnVsbCkgeworCQkJCQkJCWlzb0NvZGUgPSBHZW5VdGlscy5nZXRJU09Db2RlKGNvdW50cnksIGNvZGVMaXN0KTsKKwkJCQkJCX0KKworCQkJCQkJLy8gUmVhZCBhbmQga2VlcCBpbiBtZW1vcnkgYSBsaXN0IG9mIHRoZSBwb3B1bGF0aW9uIGRhdGEKKwkJCQkJCS8vIGZvciB0aGlzIGNvdW50cnkuCisJCQkJCQlpZiAocG9wdWxhdGlvbkxpc3QgPT0gbnVsbCkgeworCQkJCQkJCVN0cmluZyBuYW1lID0gcG9wdWxhdGlvbkRhdGEgKyBjb3VudHJ5CisJCQkJCQkJCQkrICJfUE9QVUxBVElPTi50eHQiOyAvLyROT04tTkxTLTEkCisJCQkJCQkJcG9wdWxhdGlvbkxpc3QgPSBHZW5VdGlscy5wb3B1bGF0ZUxpc3QobmFtZSk7CisJCQkJCQl9CisKKwkJCQkJCS8vIEdldCB0aGUgbGV2ZWwgb2YgdGhlIGRhdGEgd2UgYXJlIHByb2Nlc3NpbmcuCisJCQkJCQlsZXZlbCA9IEdlblV0aWxzLmdldERhdGFMZXZlbChpdGVtcyk7CisKKwkJCQkJCS8vIFRoaXMgdmFyaWFibGUgaW5kaWNhdGVzIGEgdHJhbnNpdGlvbiBpbiBvdXIgZGF0YQorCQkJCQkJLy8gcHJvY2Vzc2luZworCQkJCQkJYm9vbGVhbiB0cmFuc2l0aW9uID0gKGxldmVsICE9IG9sZExldmVsKSA/IHRydWUgOiBmYWxzZTsKKworCQkJCQkJaWYgKHRyYW5zaXRpb24gPT0gdHJ1ZSkgeworCQkJCQkJCS8vIEtlZXAgdHJhY2sgb2YgcHJldmlvdXMgbGV2ZWwgaW4gb3JkZXIgdG8gZGV0ZWN0CisJCQkJCQkJLy8gdHJhbnNpdGlvbnMuCisJCQkJCQkJb2xkTGV2ZWwgPSBsZXZlbDsKKwkJCQkJCQkvLyBSZXNldCBvdXIgcmVwZWF0ZWQgaGlzdG9yeQorCQkJCQkJCS8vIHJlcGVhdGVkRW50cmllcyA9IG5ldyBTdHJpbmcoKTsKKwkJCQkJCQllbnRyeUxpc3QgPSBuZXcgQXJyYXlMaXN0PFN0cmluZz4oKTsKKwkJCQkJCQlpZiAocHJvcGVydGllc0ZpbGUgIT0gbnVsbCkgeworCQkJCQkJCQlVdGlsTG9nZ2VyLmxvZ0luZm9ybWF0aW9uKCJcdFx0R2VuZXJhdGVkIDogIiAvLyROT04tTkxTLTEkCisJCQkJCQkJCQkJKyBmaWxlTmFtZSk7CisJCQkJCQkJCXByb3BlcnRpZXNGaWxlLmNsb3NlKCk7CisJCQkJCQkJCXByb3BlcnRpZXNGaWxlID0gbnVsbDsKKwkJCQkJCQkJZmlsZU5hbWUgPSBudWxsOworCQkJCQkJCX0KKwkJCQkJCX0KKworCQkJCQkJLy8gSWYgdGhlIGRpcmVjdG9yeSBkb2VzIG5vdCBleGlzdCBmb3IgdGhpcyBjb3VudHJ5LAorCQkJCQkJLy8gY3JlYXRlIGl0IHVzaW5nIElTTyBhbHBoYTMgY29kZS4KKwkJCQkJCUZpbGUgY291bnRyeURpciA9IG5ldyBGaWxlKG91dHB1dERpcgorCQkJCQkJCQkrIGlzb0NvZGUuZ2V0QWxwaGEzKCkpOworCisJCQkJCQlpZiAoY291bnRyeURpciAhPSBudWxsICYmIGNvdW50cnlEaXIuZXhpc3RzKCkgPT0gZmFsc2UpIHsKKwkJCQkJCQkvLyBEaXJlY3RvcnkgZG9lcyBub3QgZXhpc3QuIENyZWF0ZSBpdC4KKwkJCQkJCQljb3VudHJ5RGlyLm1rZGlyKCk7CisJCQkJCQl9CisKKwkJCQkJCS8vIENyZWF0ZSBhbmQgb3BlbiB0aGUgbmV3IGZpbGUuCisJCQkJCQlpZiAocHJvcGVydGllc0ZpbGUgPT0gbnVsbCkgeworCQkJCQkJCS8vIENyZWF0ZSB0aGUgZmlsZSBuYW1lIGZvciB0aGUgbmV3IHByb3BlcnRpZXMuZmlsZS4KKwkJCQkJCQlTdHJpbmcgYWxwaGEzID0gaXNvQ29kZS5nZXRBbHBoYTMoKTsKKwkJCQkJCQlmaWxlTmFtZSA9IGNvdW50cnlEaXIgKyAiXFwiICsgYWxwaGEzICsgIl8iIC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAorCQkJCQkJCQkJKyAicG9wdWxhdGlvbi5wcm9maWxlIjsgLy8kTk9OLU5MUy0xJAorCQkJCQkJCS8vIENyZWF0ZSB0bmUgbmV3IHBvcHVsYXRpb24gZmlsZSBmb3IgdGhpcyBjb3VudHJ5LgorCQkJCQkJCXByb3BlcnRpZXNGaWxlID0gR2VuVXRpbHMub3BlbldyaXRlcihmaWxlTmFtZSk7CisJCQkJCQl9CisKKwkJCQkJCS8vIFRoZSBjdXJyZW50IGVudGl0eSB3ZSBhcmUgZGVhbGluZyB3aXRoLgorCQkJCQkJLy8gQmFzZWQgb24gaXRzIGFkbWluIGxldmVsIGl0IGNhbiBiZSBhIGNvdW50cnksIGEKKwkJCQkJCS8vIGNvdW50eSwgZXRjOworCQkJCQkJU3RyaW5nIGN1cnJlbnQgPSBudWxsOworCisJCQkJCQlzd2l0Y2ggKGxldmVsKSB7CisKKwkJCQkJCWNhc2UgRGF0YVR5cGVzLkxFVkVMXzA6CisJCQkJCQkJLy8gRG8gTm90aGlubmcKKwkJCQkJCQljb250aW51ZTsKKworCQkJCQkJY2FzZSBEYXRhVHlwZXMuTEVWRUxfMToKKwkJCQkJCQljdXJyZW50ID0gaXRlbXNbSVNPRGF0YS5BRE1JTjFfTkFNRV0udG9VcHBlckNhc2UoKTsKKwkJCQkJCQlicmVhazsKKworCQkJCQkJY2FzZSBEYXRhVHlwZXMuTEVWRUxfMjoKKwkJCQkJCQljdXJyZW50ID0gaXRlbXNbSVNPRGF0YS5BRE1JTjJfTkFNRV0udG9VcHBlckNhc2UoKTsKKwkJCQkJCQlicmVhazsKKworCQkJCQkJfSAvLyBTd2l0Y2gKKworCQkJCQkJLy8gSGFuZGxlIFVOS05PV04gYW5kIE4uQS4gZW50cmllcyBkaWZmZXJlbnRseS4KKwkJCQkJCWlmIChjdXJyZW50LmVxdWFscygiVU5LTk9XTiIpIHx8IGN1cnJlbnQuZXF1YWxzKCJOLkEuIikpIHsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCisKKwkJCQkJCQlpZiAobGV2ZWwgPT0gMSkgeworCQkJCQkJCQljdXJyZW50ID0gaXNvQ29kZS5nZXRBbHBoYTIoKSArICItVU5LLSIgLy8kTk9OLU5MUy0xJAorCQkJCQkJCQkJCSsgU3RyaW5nLnZhbHVlT2YodW5rQ291bnRlcisrKTsKKworCQkJCQkJCX0gZWxzZSB7CisJCQkJCQkJCS8vIExldmVsIDIgZGF0YS4KKwkJCQkJCQkJY3VycmVudCA9IGlzb0NvZGUuZ2V0QWxwaGEzKCkgKyAiLkwyLiIgLy8kTk9OLU5MUy0xJAorCQkJCQkJCQkJCSsgU3RyaW5nLnZhbHVlT2YodW5rQ291bnRlcisrKTsKKwkJCQkJCQl9CisJCQkJCQl9CisKKwkJCQkJCS8vIE1ha2Ugc3VyZSB0aGlzIGlzIG5vdCBhIHJlcGVhdGVkIGxldmVsIDEgZW50cnkuCisJCQkJCQlpZiAobGV2ZWwgPT0gMSkgeworCisJCQkJCQkJaWYgKEdlblV0aWxzLmlzUmVwZWF0ZWQoY3VycmVudCwgZW50cnlMaXN0KSA9PSB0cnVlKSB7CisJCQkJCQkJCS8vIER1cGxpY2F0ZWQsIGlnbm9yZS4KKwkJCQkJCQkJY29udGludWU7CisJCQkJCQkJfQorCisJCQkJCQkJLy8gUmVtZW1iZXIgdGhpcyBlbnRpdHkgdG8gYXZvaWQgZHVwbGljYXRlcy4KKwkJCQkJCQllbnRyeUxpc3QuYWRkKGN1cnJlbnQpOworCQkJCQkJfQorCisJCQkJCQkvLyBNYWtlIHN1cmUgdGhpcyBpcyBub3QgYSByZXBlYXRlZCBsZXZlbCAyIGVudHJ5LgorCQkJCQkJaWYgKGxldmVsID09IDIpIHsKKworCQkJCQkJCWlmIChHZW5VdGlscy5pc1JlcGVhdGVkKGl0ZW1zW0lTT0RhdGEuQURNSU4xX05BTUVdCisJCQkJCQkJCQkrIGN1cnJlbnQsIGVudHJ5TGlzdCkgPT0gdHJ1ZSkgeworCQkJCQkJCQkvLyBEdXBsaWNhdGVkLCBpZ25vcmUuCisJCQkJCQkJCWNvbnRpbnVlOworCQkJCQkJCX0KKworCQkJCQkJCS8vIFJlbWVtYmVyIHRoaXMgZW50aXR5IHRvIGF2b2lkIGR1cGxpY2F0ZXMuCisJCQkJCQkJZW50cnlMaXN0LmFkZChpdGVtc1tJU09EYXRhLkFETUlOMV9OQU1FXSArIGN1cnJlbnQpOworCQkJCQkJfQorCisJCQkJCQlTdHJpbmcgcG9wdWxhdGlvbiA9IG51bGw7CisKKwkJCQkJCXBvcHVsYXRpb24gPSBnZXRQb3B1bGF0aW9uKGl0ZW1zW0lTT0RhdGEuQURNSU4xX05BTUVdLAorCQkJCQkJCQlpdGVtc1tJU09EYXRhLkNPVU5UUllfTkFNRV0sIGxldmVsKTsKKworCQkJCQkJLy8gaW5jcmVhc2UgY291bnQgZm9yIHRoZSBjb250YWluZXIgb2YgdGhpcyBlbnRpdHkKKwkJCQkJCVN0cmluZyBwVmFsID0gcERhdGEuZ2V0KGl0ZW1zW0lTT0RhdGEuQURNSU4xX05BTUVdKTsKKworCQkJCQkJaWYgKHBWYWwgPT0gbnVsbCkgeworCisJCQkJCQkJcERhdGEucHV0KGl0ZW1zW0lTT0RhdGEuQURNSU4xX05BTUVdLCBwb3B1bGF0aW9uCisJCQkJCQkJCQkrICI6IiArIDApOyAvLyROT04tTkxTLTEkCisJCQkJCQkJY29udGludWU7CisJCQkJCQl9CisKKwkJCQkJCS8vIFRva2VuaXplCisJCQkJCQlTdHJpbmdUb2tlbml6ZXIgdG9rZW5pemVyID0gbmV3IFN0cmluZ1Rva2VuaXplcihwVmFsLAorCQkJCQkJCQkiOiIpOyAvLyROT04tTkxTLTEkCisKKwkJCQkJCS8vIFdlIGtub3cgdGhhdCB3ZSBleHBlY3Qgb25seSB0d28gdG9rZW5zLiBHZXQgdGhlbS4KKwkJCQkJCS8vIE9yZGVyIG1hdHRlcnMgaGVyZS4KKwkJCQkJCVN0cmluZ1tdIHRva2VucyA9IG5ldyBTdHJpbmdbMl07CisJCQkJCQkvLyBUaGlzIGlzIHRoZSBsb2NhdGlvbgorCQkJCQkJdG9rZW5zW0NPTlRBSU5FUl0gPSB0b2tlbml6ZXIubmV4dFRva2VuKCkudG9VcHBlckNhc2UoKTsKKwkJCQkJCS8vIFRoaXMgaXMgdGhlIGNvdW50IG9mIGVudGl0aWVzCisJCQkJCQl0b2tlbnNbQ09VTlRdID0gdG9rZW5pemVyLm5leHRUb2tlbigpOworCisJCQkJCQlpbnQgY291bnQgPSBJbnRlZ2VyLnBhcnNlSW50KHRva2Vuc1sxXSk7CisJCQkJCQljb3VudCsrOworCisJCQkJCQlwVmFsID0gdG9rZW5zW0NPTlRBSU5FUl0gKyAiOiIgKyBjb3VudDsgLy8kTk9OLU5MUy0xJAorCisJCQkJCQlwRGF0YS5wdXQoaXRlbXNbSVNPRGF0YS5BRE1JTjFfTkFNRV0sIHBWYWwpOworCisJCQkJCQlVdGlsTG9nZ2VyLmxvZ0luZm9ybWF0aW9uKCJDb3VudGVkIDogIiAvLyROT04tTkxTLTEkCisJCQkJCQkJCSsgaXRlbXNbSVNPRGF0YS5BRE1JTjFfTkFNRV0gKyAiIEFETUlOIDIgOiAiIC8vJE5PTi1OTFMtMSQKKwkJCQkJCQkJKyBpdGVtc1tJU09EYXRhLkFETUlOMl9OQU1FXSk7CisKKwkJCQkJfSAvLyB3aGlsZSBsb29wCisKKwkJCQkJLy8gTm93IHdyaXRlIHRoZSByZXN1bHRzCisJCQkJCUl0ZXJhdG9yIGl0ID0gcERhdGEua2V5U2V0KCkuaXRlcmF0b3IoKTsKKworCQkJCQl3aGlsZSAoaXQuaGFzTmV4dCgpKSB7CisKKwkJCQkJCVN0cmluZyBrZXkgPSAoU3RyaW5nKSBpdC5uZXh0KCk7CisJCQkJCQlVdGlsTG9nZ2VyLmxvZ0luZm9ybWF0aW9uKCJLZXkgaXMgIiArIGtleSk7IC8vJE5PTi1OTFMtMSQKKworCQkJCQkJU3RyaW5nIHZhbHVlID0gcERhdGEuZ2V0KGtleSk7CisJCQkJCQlVdGlsTG9nZ2VyLmxvZ0luZm9ybWF0aW9uKCJWYWx1ZSBpcyA6ICIgKyB2YWx1ZSk7IC8vJE5PTi1OTFMtMSQKKworCQkJCQkJR2VuVXRpbHMuYWRkRGF0YShwcm9wZXJ0aWVzRmlsZSwga2V5ICsgIjoiICsgdmFsdWUgLy8kTk9OLU5MUy0xJAorCQkJCQkJCQkrICJcbiIpOyAvLyROT04tTkxTLTEkCisKKwkJCQkJfQorCisJCQkJCS8vIFdlIGRvbnQgbmVlZCB0aGUgSVNPIGNvZGUgb2JqZWN0IGZvciB0aGlzIGNvdW50cnkKKwkJCQkJLy8gYW55bW9yZSwgd2UgYXJlIGRvbmUgcHJvY2Vzc2luZyBpdC4KKwkJCQkJaXNvQ29kZSA9IG51bGw7CisKKwkJCQkJLy8gUmVzZXQgdGhlIHBvcHVsYXRpb24gbGlzdAorCQkJCQlpZiAocG9wdWxhdGlvbkxpc3QgIT0gbnVsbCkgeworCQkJCQkJcG9wdWxhdGlvbkxpc3QuY2xlYXIoKTsKKwkJCQkJCXBvcHVsYXRpb25MaXN0ID0gbnVsbDsKKwkJCQkJfQorCisJCQkJCS8vIFJlc2V0IHRlaCBoYXNoIG1hcAorCQkJCQlwRGF0YS5jbGVhcigpOworCisJCQkJCS8vIENsb3NlIGFsbCBvcGVuIHJlc291cmNlcy4KKwkJCQkJcmVhZGVyLmNsb3NlKCk7CisKKwkJCQkJaWYgKHByb3BlcnRpZXNGaWxlICE9IG51bGwpIHsKKwkJCQkJCXByb3BlcnRpZXNGaWxlLmNsb3NlKCk7CisJCQkJCQlwcm9wZXJ0aWVzRmlsZSA9IG51bGw7CisJCQkJCQlVdGlsTG9nZ2VyLmxvZ0luZm9ybWF0aW9uKCJcdFx0R2VuZXJhdGVkIDogIiArIGZpbGVOYW1lKTsgLy8kTk9OLU5MUy0xJAorCQkJCQkJZmlsZU5hbWUgPSBudWxsOworCQkJCQl9CisKKwkJCQkJLy8gUnVuIGdhcmJhZ2UgY29sbGVjdGlvbgorCQkJCQkvL1N5c3RlbS5nYygpOworCQkJCX0KKworCQkJfSBjYXRjaCAoSU9FeGNlcHRpb24gZSkgeworCQkJCWUucHJpbnRTdGFja1RyYWNlKCk7CisJCQl9CisKKwkJfSAvLyBGb3IgbG9vcAorCisJfQorCisJLyoqCisJICogRmluZCB0aGUgcG9wdWxhdGlvbiB2YWx1ZSBmb3IgYSBnaXZlbiBlbnRpdHkuCisJICogCisJICogQHBhcmFtIGVudGl0eQorCSAqICAgICAgICAgICAgYSBsb2NhdGlvbgorCSAqIEBwYXJhbSBsZXZlbAorCSAqICAgICAgICAgICAgYWRtaW5pc3RyYXRpdmUgbGV2ZWwKKwkgKiAKKwkgKiBAcmV0dXJuIHRoZSBwb3B1bGF0aW9uIHZhbHVlIGZvciBhIGxvY2F0aW9uCisJICovCisJcHJvdGVjdGVkIFN0cmluZyBnZXRQb3B1bGF0aW9uKFN0cmluZyBlbnRpdHksIGludCBsZXZlbCkgeworCisJCWZpbmFsIGludCBFTlRJVFkgPSAwOworCisJCWZpbmFsIGludCBMRVZFTCA9IDE7CisKKwkJZmluYWwgaW50IFBPUFVMQVRJT04gPSAyOworCisJCUl0ZXJhdG9yIGl0ID0gcG9wdWxhdGlvbkxpc3QuaXRlcmF0b3IoKTsKKworCQlTdHJpbmcgZW50aXR5U3RyID0gZW50aXR5LnRvVXBwZXJDYXNlKCk7CisKKwkJd2hpbGUgKGl0Lmhhc05leHQoKSkgeworCisJCQlTdHJpbmdbXSBwb3BEYXRhID0gKChTdHJpbmcpIGl0Lm5leHQoKSkuc3BsaXQoIjoiKTsgLy8kTk9OLU5MUy0xJAorCisJCQlpZiAoZW50aXR5U3RyLmVxdWFscyhwb3BEYXRhW0VOVElUWV0udHJpbSgpLnRvVXBwZXJDYXNlKCkpKSB7CisKKwkJCQkvLyBDaGVjayBib3RoIGVudGl0aWVzIGJlbG9uZyB0byBzYW1lIGxldmVsCisJCQkJaWYgKFN0cmluZy52YWx1ZU9mKGxldmVsKS5lcXVhbHMocG9wRGF0YVtMRVZFTF0udHJpbSgpKSA9PSBmYWxzZSkgeworCQkJCQkvLyBJZ25vcmUgOiBzYW1lIG5hbWUgLCBidXQgZGlmZmVyZW50IGxldmVsCisJCQkJCWNvbnRpbnVlOworCQkJCX0KKworCQkJCXJldHVybiBwb3BEYXRhW1BPUFVMQVRJT05dLnRyaW0oKTsKKwkJCX0KKwkJfQorCQlyZXR1cm4gREVGQVVMVDsKKwl9CisKKwkvKioKKwkgKiBGaW5kIHRoZSBwb3B1bGF0aW9uIHZhbHVlIGZvciBhIGdpdmVuIGVudGl0eS4KKwkgKiAKKwkgKiBAcGFyYW0gZW50aXR5CisJICogICAgICAgICAgICBhIGxvY2F0aW9uCisJICogCisJICogQHBhcmFtIGVudGl0eUNvbnRhaW5lcgorCSAqICAgICAgICAgICAgYSBjb250YWluZXIgZm9yIHRoZSBsb2NhdGlvbiAoZW50aXR5KQorCSAqIAorCSAqIEByZXR1cm4gdGhlIHBvcHVsYXRpb24gdmFsdWUgZm9yIGEgbG9jYXRpb24KKwkgKi8KKwlwcm90ZWN0ZWQgU3RyaW5nIGdldFBvcHVsYXRpb24oU3RyaW5nIGVudGl0eSwgU3RyaW5nIGVudGl0eUNvbnRhaW5lciwKKwkJCWludCBsZXZlbCkgeworCisJCWZpbmFsIGludCBFTlRJVFkgPSAwOworCisJCWZpbmFsIGludCBMRVZFTCA9IDE7CisKKwkJZmluYWwgaW50IFBPUFVMQVRJT04gPSAyOworCisJCVN0cmluZ1tdIHBvcERhdGEgPSBudWxsOworCisJCUl0ZXJhdG9yIGl0ID0gcG9wdWxhdGlvbkxpc3QuaXRlcmF0b3IoKTsKKworCQlTdHJpbmcgZW50aXR5U3RyID0gZW50aXR5LnRvVXBwZXJDYXNlKCkudHJpbSgpOworCisJCVN0cmluZyBlbnRpdHlDb250YWluZXJTdHIgPSBlbnRpdHlDb250YWluZXIudG9VcHBlckNhc2UoKTsKKworCQl3aGlsZSAoaXQuaGFzTmV4dCgpKSB7CisKKwkJCXBvcERhdGEgPSAoKFN0cmluZykgaXQubmV4dCgpKS5zcGxpdCgiOiIpOyAvLyROT04tTkxTLTEkCisKKwkJCVN0cmluZ1tdIGNvbXBhcmUgPSBudWxsOworCisJCQkvLyBHZXQgdGhlIGVudGl0eSBuYW1lIGFuZCByZW1vdmUgYmxhbmtzCisJCQlTdHJpbmcgbG9jYXRpb24gPSBwb3BEYXRhW0VOVElUWV07CisKKwkJCWxvY2F0aW9uID0gbG9jYXRpb24ucmVwbGFjZSgiXFx0IiwgIiIpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKKworCQkJbG9jYXRpb24gPSBsb2NhdGlvbi50b1VwcGVyQ2FzZSgpLnRyaW0oKTsKKworCQkJLy8gSGFuZGxlIEFsaWFzZXMgLS0gY29tcGxleCBzdHVmZiA6JAorCQkJaWYgKGxvY2F0aW9uLmNvbnRhaW5zKCJbIikpIHsgLy8kTk9OLU5MUy0xJAorCisJCQkJbG9jYXRpb24gPSBsb2NhdGlvbi5yZXBsYWNlKCJdIiwgIiIpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKKworCQkJCS8vIFRva2VuaXplCisJCQkJU3RyaW5nVG9rZW5pemVyIHRva2VucyA9IG5ldyBTdHJpbmdUb2tlbml6ZXIobG9jYXRpb24sICJbIik7IC8vJE5PTi1OTFMtMSQKKworCQkJCS8vIEdldCB0b2tlbnMgLT4gb3JkZXIgbWF0dGVycyBoZXJlIQorCQkJCWNvbXBhcmUgPSBuZXcgU3RyaW5nW3Rva2Vucy5jb3VudFRva2VucygpXTsKKwkJCQlpbnQgaSA9IDA7CisJCQkJd2hpbGUgKHRva2Vucy5oYXNNb3JlVG9rZW5zKCkpIHsKKwkJCQkJY29tcGFyZVtpKytdID0gdG9rZW5zLm5leHRUb2tlbigpLnRvVXBwZXJDYXNlKCkudHJpbSgpOworCQkJCX0KKwkJCX0KKworCQkJaWYgKGNvbXBhcmUgIT0gbnVsbCkgeworCQkJCWZvciAoaW50IGkgPSAwOyBpIDwgY29tcGFyZS5sZW5ndGg7IGkrKykgeworCQkJCQlpZiAoZW50aXR5U3RyLnJlcGxhY2UoIi0iLCAiICIpLmVxdWFscyggLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCisJCQkJCQkJY29tcGFyZVtpXS5yZXBsYWNlKCItIiwgIiAiKSkgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCisJCQkJCQkJfHwgY29tcGFyZVtpXS5lcXVhbHMoZW50aXR5U3RyICsgIi0xIikgLy8kTk9OLU5MUy0xJAorCQkJCQkJCXx8IGNvbXBhcmVbaV0uZXF1YWxzKGVudGl0eUNvbnRhaW5lclN0cikpIHsKKworCQkJCQkJcmV0dXJuIHBvcERhdGFbUE9QVUxBVElPTl0udHJpbSgpOworCQkJCQl9CisKKwkJCQl9CisJCQl9IGVsc2UgaWYgKGVudGl0eVN0ci5lcXVhbHMobG9jYXRpb24pCisJCQkJCXx8IGVudGl0eVN0ci5yZXBsYWNlKCItIiwgIiAiKS5lcXVhbHMobG9jYXRpb24pIC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAorCQkJCQl8fCBsb2NhdGlvbi5lcXVhbHMoZW50aXR5U3RyICsgIi0xIikpIHsgLy8kTk9OLU5MUy0xJAorCisJCQkJLy8gQ2hlY2sgYm90aCBlbnRpdGllcyBiZWxvbmcgdG8gc2FtZSBsZXZlbAorCQkJCWlmIChTdHJpbmcudmFsdWVPZihsZXZlbCkuZXF1YWxzKHBvcERhdGFbTEVWRUxdLnRyaW0oKSkgPT0gZmFsc2UpIHsKKwkJCQkJLy8gSWdub3JlIDogc2FtZSBuYW1lICwgYnV0IGRpZmZlcmVudCBsZXZlbAorCQkJCQljb250aW51ZTsKKwkJCQl9CisKKwkJCQlyZXR1cm4gcG9wRGF0YVtQT1BVTEFUSU9OXS50cmltKCk7CisKKwkJCX0KKworCQl9IC8vIHdoaWxlCisKKwkJcmV0dXJuIERFRkFVTFQ7CisJfQorCisJLyoqCisJICogTWFpbiBleGVjdXRpb24gZW50cnkgcG9pbnQuCisJICogCisJICogQHBhcmFtIGFyZ3MKKwkgKiAKKwkgKi8KKwlwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CisJCWZpbmFsIGludCBJU09fMzE2Nl8xID0gMDsKKwkJZmluYWwgaW50IFBPUFVMQVRJT05fREFUQSA9IDE7CisJCWZpbmFsIGludCBUQVJHRVRfTElTVCA9IDI7CisJCWZpbmFsIGludCBPVVRQVVRfRElSID0gMzsKKwkJZmluYWwgaW50IFBBUkFNUyA9IDQ7CisKKwkJaWYgKGFyZ3MubGVuZ3RoIDwgUEFSQU1TKSB7CisJCQlVdGlsTG9nZ2VyLmxvZ0luZm9ybWF0aW9uKCItLVdyb25nIGFyZ3VtZW50cy0tIik7IC8vJE5PTi1OTFMtMSQKKwkJCVN5c3RlbS5vdXQKKwkJCQkJLnByaW50bG4oIlx0VG8gcnVuLCBwbGVhc2UgcHJvdmlkZSB0aGUgZm9sbG93aW5nIGFyZ3VtZW50cyA6ICIpOyAvLyROT04tTkxTLTEkCisJCQlVdGlsTG9nZ2VyLmxvZ0luZm9ybWF0aW9uKCJcdFx0IElTTyAzMTY2LTEgZmlsZSIpOyAvLyROT04tTkxTLTEkCisJCQlVdGlsTG9nZ2VyLmxvZ0luZm9ybWF0aW9uKCJcdFx0IFBvcHVsYXRpb24gZGF0YSBmaWxlIik7IC8vJE5PTi1OTFMtMSQKKwkJCVV0aWxMb2dnZXIubG9nSW5mb3JtYXRpb24oIlx0XHQgVGFyZ2V0IGNvdW50cmllcyBmaWxlIik7IC8vJE5PTi1OTFMtMSQJCQkKKwkJCVV0aWxMb2dnZXIubG9nSW5mb3JtYXRpb24oIlx0XHQgT3V0cHV0IGRpcmVjdG9yeSIpOyAvLyROT04tTkxTLTEkCQkJCQkJCQkKKwkJCXJldHVybjsKKwkJfQorCisJCVBvcHVsYXRpb25Qcm9maWxlciBwcm9maWxlciA9IG5ldyBQb3B1bGF0aW9uUHJvZmlsZXIoYXJnc1tJU09fMzE2Nl8xXSwKKwkJCQlhcmdzW1BPUFVMQVRJT05fREFUQV0sIGFyZ3NbVEFSR0VUX0xJU1RdLCBhcmdzW09VVFBVVF9ESVJdKTsKKwkJcHJvZmlsZXIucnVuKCk7CisJfQorCit9CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91dGlsaXR5L2dlbmVyYXRvcnMvUHJvcGVydGllc0dlbmVyYXRvci5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdXRpbGl0eS9nZW5lcmF0b3JzL1Byb3BlcnRpZXNHZW5lcmF0b3IuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNzc5M2FkCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdXRpbGl0eS9nZW5lcmF0b3JzL1Byb3BlcnRpZXNHZW5lcmF0b3IuamF2YQpAQCAtMCwwICsxLDE2MSBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkuZ2VuZXJhdG9yczsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcworICogcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZgorICogdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzCisgKiBhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqIAorICogQ29udHJpYnV0b3JzOiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKgorICogU1RFTSBJSSBEYXRhIE1pZ3JhdGlvbi9HZW5lcmF0aW9uIFV0aWxpdGllcyAtLVRoaXMgY2xhc3MgZ2VuZXJhdGVzIGFsbCB0aGUKKyAqIHByb3BlcnR5IGZpbGVzIGZvciBlYWNoIGNvdW50cnkuIEl0IGRvZXMgc28gYnkgaW52b2tpbmcgdGhlIE5hbWUsIEFyZWEsCisgKiBQb3B1bGF0aW9uLCBhbmQgTm9kZSBEYXRhIGdlbmVyYXRvcnMuCisgKiAKKyAqIAorICogVG8gY29uZmlndXJlLCBzZWUgY29uZmlndXJhdGlvbiBmaWxlIDoKKyAqIG9yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9jb25maWd1cmF0aW9uL1Byb3BlcnRpZXNHZW5lcmF0b3IuY29uZmlnCisgKiAKKyAqIAorICogVG8gcnVuLCBhZGQgcGF0aCB0byBjb25maWd1cmF0aW9uIGZpbGUgaW4gdGhlIHJ1biBwcm9maWxlIChpLmUuCisgKiBDOlxzdGVtSUlcb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5XGNvbmZpZ3VyYXRpb25cUHJvcGVydGllc0dlbmVyYXRvci5jb25maWcpCisgKiAKKyAqIFNFVCBWTUFSR1MgVE8gOiAtWG1zMTAyNG0gLVhteDEwMjRtCisgKiAKKyAqLworCitwdWJsaWMgY2xhc3MgUHJvcGVydGllc0dlbmVyYXRvciB7CisKKwkvKioKKwkgKiBFeGVjdXRpb24gZW50cnkgcG9pbnQKKwkgKiAKKwkgKiBAcGFyYW0gYXJncworCSAqLworCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKKworCQkvLyBmaW5hbCBpbnQgSVNPXzMxNjZfMSA9IDA7CisJCS8vIGZpbmFsIGludCBJU09fMzE2Nl8yID0gMTsKKwkJLy8gZmluYWwgaW50IEZJWF9GSUxFID0gMjsKKwkJLy8gZmluYWwgaW50IENJQV9EQVRBID0gMzsKKwkJLy8gZmluYWwgaW50IFBPUFVMQVRJT05fUFJPRklMRSA9IDQ7CisJCS8vIGZpbmFsIGludCBDT1VOVFJZX0xJU1QgPSA1OworCQkvLyBmaW5hbCBpbnQgUE9MWUdPTl9BUkVBUyA9IDY7CisJCS8vIGZpbmFsIGludCBMRVhfRElSID0gNzsKKwkJLy8gZmluYWwgaW50IFBST1BFUlRJRVNfT1VUUFVUX0RJUiA9IDg7CisJCS8vIGZpbmFsIGludCBHTUxfT1VUUFVUX0RJUiA9IDk7CisJCS8vIGZpbmFsIGludCBQQVJBTVMgPSAxMDsKKwkJLy8KKwkJLy8gaWYgKGFyZ3MubGVuZ3RoIDwgUEFSQU1TKSB7CisJCS8vIFV0aWxMb2dnZXIubG9nSW5mb3JtYXRpb24oIi0tV3JvbmcgYXJndW1lbnRzLS0iKTsgLy8kTk9OLU5MUy0xJAorCQkvLyBTeXN0ZW0ub3V0CisJCS8vIC5wcmludGxuKCJcdFRvIHJ1biwgcGxlYXNlIHByb3ZpZGUgdGhlIGZvbGxvd2luZyBhcmd1bWVudHMgOiAiKTsKKwkJLy8gLy8kTk9OLU5MUy0xJAorCQkvLyBVdGlsTG9nZ2VyLmxvZ0luZm9ybWF0aW9uKCJcdFx0IElTTyAzMTY2LTEgZmlsZSIpOyAvLyROT04tTkxTLTEkCisJCS8vIFV0aWxMb2dnZXIubG9nSW5mb3JtYXRpb24oIlx0XHQgSVNPIDMxNjYtMiBmaWxlIik7IC8vJE5PTi1OTFMtMSQKKwkJLy8gVXRpbExvZ2dlci5sb2dJbmZvcm1hdGlvbigiXHRcdCBJU08gZml4IGZpbGUiKTsgLy8kTk9OLU5MUy0xJAorCQkvLyBVdGlsTG9nZ2VyLmxvZ0luZm9ybWF0aW9uKCJcdFx0IENJQSBkYXRhIik7IC8vJE5PTi1OTFMtMSQKKwkJLy8gVXRpbExvZ2dlci5sb2dJbmZvcm1hdGlvbigiXHRcdCBQb3B1bGF0aW9uIHByb2ZpbGUiKTsgLy8kTk9OLU5MUy0xJAorCQkvLyBVdGlsTG9nZ2VyLmxvZ0luZm9ybWF0aW9uKCJcdFx0IFRhcmdldCBjb3VudHJpZXMgZmlsZSIpOyAvLyROT04tTkxTLTEkCisJCS8vIFV0aWxMb2dnZXIubG9nSW5mb3JtYXRpb24oIlx0XHQgUG9seWdvbiBhcmVhcyIpOyAvLyROT04tTkxTLTEkCisJCS8vIFV0aWxMb2dnZXIubG9nSW5mb3JtYXRpb24oIlx0XHQgTGV4aWNvZ3JhcGhpYyBzb3J0aW5nIGRpcmVjdG9yeSIpOworCQkvLyAvLyROT04tTkxTLTEkJAorCQkvLyBVdGlsTG9nZ2VyLmxvZ0luZm9ybWF0aW9uKCJcdFx0IE91dHB1dCBkaXJlY3RvcnkgZm9yIHByb3BlcnRpZXMgZmlsZXMiKTsKKwkJLy8gLy8kTk9OLU5MUy0xJAorCQkvLyBVdGlsTG9nZ2VyLmxvZ0luZm9ybWF0aW9uKCJcdFx0IE91dHB1dCBkaXJlY3RvcnkgZm9yIEdNTCBtYXBzIik7CisJCS8vIC8vJE5PTi1OTFMtMSQKKwkJLy8gcmV0dXJuOworCQkvLyB9CisKKwkJLy8gLy8gR2VuZXJhdGUgdGhlIG5hbWVzLnByb3BlcnRpZXMgZmlsZXMgZm9yIGVhY2ggY291bnRyeS4KKwkJLy8gTmFtZUdlbmVyYXRvciBuYW1lR2VuID0gbmV3IE5hbWVHZW5lcmF0b3IoYXJnc1tJU09fMzE2Nl8xXSwKKwkJLy8gYXJnc1tJU09fMzE2Nl8yXSwgYXJnc1tGSVhfRklMRV0sIGFyZ3NbQ09VTlRSWV9MSVNUXSwKKwkJLy8gYXJnc1tMRVhfRElSXSwgYXJnc1tQUk9QRVJUSUVTX09VVFBVVF9ESVJdKTsKKwkJLy8gbmFtZUdlbi5ydW4oKTsKKwkJLy8KKwkJLy8gLy8gUnVuIGdhcmJhZ2UgY29sbGVjdGlvbgorCQkvLyBTeXN0ZW0uZ2MoKTsKKwkJLy8KKwkJLy8gLy8gR2VuZXJhdGUgdGhlIHBvcHVsYXRpb24ucHJvcGVydGllcyBmaWxlcyBmb3IgZWFjaCBjb3VudHJ5LgorCQkvLyBQb3B1bGF0aW9uR2VuZXJhdG9yIHBvcEdlbiA9IG5ldworCQkvLyBQb3B1bGF0aW9uR2VuZXJhdG9yKGFyZ3NbSVNPXzMxNjZfMV0sCisJCS8vIGFyZ3NbSVNPXzMxNjZfMl0sIGFyZ3NbRklYX0ZJTEVdLCBhcmdzW0NJQV9EQVRBXSwKKwkJLy8gYXJnc1tQT1BVTEFUSU9OX1BST0ZJTEVdLCBhcmdzW0NPVU5UUllfTElTVF0sIGFyZ3NbTEVYX0RJUl0sCisJCS8vIGFyZ3NbUFJPUEVSVElFU19PVVRQVVRfRElSXSk7CisJCS8vIHBvcEdlbi5ydW4oKTsKKwkJLy8KKwkJLy8gLy8gUnVuIGdhcmJhZ2UgY29sbGVjdGlvbgorCQkvLyBTeXN0ZW0uZ2MoKTsKKwkJLy8KKwkJLy8gLy8gR2VuZXJhdGUgdGhlIGFyZWEucHJvcGVydGllcyBmaWxlcyBmb3IgZWFjaCBjb3VudHJ5LgorCQkvLyBBcmVhR2VuZXJhdG9yIGFyZWFHZW4gPSBuZXcgQXJlYUdlbmVyYXRvcihhcmdzW0lTT18zMTY2XzFdLAorCQkvLyBhcmdzW0lTT18zMTY2XzJdLCBhcmdzW0ZJWF9GSUxFXSwgYXJnc1tDSUFfREFUQV0sCisJCS8vIGFyZ3NbQ09VTlRSWV9MSVNUXSwgYXJnc1tQT0xZR09OX0FSRUFTXSwgYXJnc1tMRVhfRElSXSwKKwkJLy8gYXJnc1tQUk9QRVJUSUVTX09VVFBVVF9ESVJdKTsKKwkJLy8gYXJlYUdlbi5ydW4oKTsKKwkJLy8KKwkJLy8gLy8gUnVuIGdhcmJhZ2UgY29sbGVjdGlvbgorCQkvLyBTeXN0ZW0uZ2MoKTsKKwkJLy8KKwkJLy8gLy8gR2VuZXJhdGUgdGhlIG5vZGUucHJvcGVydGllcyBmaWxlcyBmb3IgZWFjaCBjb3VudHJ5LgorCQkvLyBOb2RlRGF0YUdlbmVyYXRvciBub2RlRGF0YUdlbiA9IG5ldworCQkvLyBOb2RlRGF0YUdlbmVyYXRvcihhcmdzW0lTT18zMTY2XzFdLAorCQkvLyBhcmdzW0lTT18zMTY2XzJdLCBhcmdzW0ZJWF9GSUxFXSwgYXJnc1tDT1VOVFJZX0xJU1RdLAorCQkvLyBhcmdzW0xFWF9ESVJdLCBhcmdzW1BST1BFUlRJRVNfT1VUUFVUX0RJUl0pOworCQkvLyBub2RlRGF0YUdlbi5ydW4oKTsKKwkJLy8KKwkJLy8gLy8gUnVuIGdhcmJhZ2UgY29sbGVjdGlvbgorCQkvLyBTeXN0ZW0uZ2MoKTsKKwkJLy8KKwkJLy8gLy8gR2VuZXJhdGUgdGhlIEdNTCBmaWxlcyBmb3IgZWFjaCBjb3VudHJ5LgorCQkvLyBHTUxHZW5lcmF0b3IgZ21sR2VuID0gbmV3IEdNTEdlbmVyYXRvcihhcmdzW0lTT18zMTY2XzFdLAorCQkvLyBhcmdzW0lTT18zMTY2XzJdLCBhcmdzW0ZJWF9GSUxFXSwgYXJnc1tDT1VOVFJZX0xJU1RdLAorCQkvLyBhcmdzW0xFWF9ESVJdLCBhcmdzW0dNTF9PVVRQVVRfRElSXSk7CisJCS8vIGdtbEdlbi5ydW4oKTsKKworCQlmaW5hbCBpbnQgQ09ORklHX0ZJTEUgPSAwOworCQlmaW5hbCBpbnQgUEFSQU1TID0gMTsKKworCQlpZiAoYXJncy5sZW5ndGggPCBQQVJBTVMpIHsKKwkJCVV0aWxMb2dnZXIubG9nSW5mb3JtYXRpb24oIi0tV3JvbmcgYXJndW1lbnRzLS0iKTsgLy8kTk9OLU5MUy0xJAorCQkJU3lzdGVtLm91dAorCQkJCQkucHJpbnRsbigiXHRUbyBydW4sIHBsZWFzZSBwcm92aWRlIHRoZSBmb2xsb3dpbmcgYXJndW1lbnQocykgOiAiKTsgLy8kTk9OLU5MUy0xJAorCQkJVXRpbExvZ2dlci5sb2dJbmZvcm1hdGlvbigiXHRcdCBDb25maWd1cmF0aW9uIGZpbGUiKTsgLy8kTk9OLU5MUy0xJAorCQkJU3lzdGVtLmV4aXQoMSk7CisJCX0KKworCQkvLyBHZW5lcmF0ZSB0aGUgbmFtZXMucHJvcGVydGllcyBmaWxlcyBmb3IgZWFjaCBjb3VudHJ5LgorCQlOYW1lR2VuZXJhdG9yIG5hbWVHZW4gPSBuZXcgTmFtZUdlbmVyYXRvcihhcmdzW0NPTkZJR19GSUxFXSk7CisJCW5hbWVHZW4ucnVuKCk7CisKKwkJLy8gUnVuIGdhcmJhZ2UgY29sbGVjdGlvbgorCQlTeXN0ZW0uZ2MoKTsKKworCQkvLyBHZW5lcmF0ZSB0aGUgcG9wdWxhdGlvbi5wcm9wZXJ0aWVzIGZpbGVzIGZvciBlYWNoIGNvdW50cnkuCisJCVBvcHVsYXRpb25HZW5lcmF0b3IgcG9wR2VuID0gbmV3IFBvcHVsYXRpb25HZW5lcmF0b3IoYXJnc1tDT05GSUdfRklMRV0pOworCQlwb3BHZW4ucnVuKCk7CisKKwkJLy8gUnVuIGdhcmJhZ2UgY29sbGVjdGlvbgorCQlTeXN0ZW0uZ2MoKTsKKworCQkvLyBHZW5lcmF0ZSB0aGUgYXJlYS5wcm9wZXJ0aWVzIGZpbGVzIGZvciBlYWNoIGNvdW50cnkuCisJCUFyZWFHZW5lcmF0b3IgYXJlYUdlbiA9IG5ldyBBcmVhR2VuZXJhdG9yKGFyZ3NbQ09ORklHX0ZJTEVdKTsKKwkJYXJlYUdlbi5ydW4oKTsKKworCQkvLyBSdW4gZ2FyYmFnZSBjb2xsZWN0aW9uCisJCVN5c3RlbS5nYygpOworCisJCS8vIEdlbmVyYXRlIHRoZSBub2RlLnByb3BlcnRpZXMgZmlsZXMgZm9yIGVhY2ggY291bnRyeS4KKwkJTm9kZURhdGFHZW5lcmF0b3Igbm9kZURhdGFHZW4gPSBuZXcgTm9kZURhdGFHZW5lcmF0b3IoYXJnc1tDT05GSUdfRklMRV0pOworCQlub2RlRGF0YUdlbi5ydW4oKTsKKworCQkvLyBSdW4gZ2FyYmFnZSBjb2xsZWN0aW9uCisJCVN5c3RlbS5nYygpOworCisJCS8vIEdlbmVyYXRlIHRoZSBHTUwgZmlsZXMgZm9yIGVhY2ggY291bnRyeS4KKwkJR01MR2VuZXJhdG9yIGdtbEdlbiA9IG5ldyBHTUxHZW5lcmF0b3IoYXJnc1tDT05GSUdfRklMRV0pOworCQlnbWxHZW4ucnVuKCk7CisKKwl9IC8vIG1haW4KK30KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3NyYy9vcmcvZWNsaXBzZS9zdGVtL3V0aWxpdHkvZ2VuZXJhdG9ycy9SdXNzaWFEYXRhQ2xlYW5lci5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdXRpbGl0eS9nZW5lcmF0b3JzL1J1c3NpYURhdGFDbGVhbmVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmM1YjJlYgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3NyYy9vcmcvZWNsaXBzZS9zdGVtL3V0aWxpdHkvZ2VuZXJhdG9ycy9SdXNzaWFEYXRhQ2xlYW5lci5qYXZhCkBAIC0wLDAgKzEsNDAyIEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS5nZW5lcmF0b3JzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA5IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGphdmEuaW8uQnVmZmVyZWRSZWFkZXI7CitpbXBvcnQgamF2YS5pby5GaWxlOworaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247CitpbXBvcnQgamF2YS5pby5QcmludFdyaXRlcjsKK2ltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKK2ltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CitpbXBvcnQgamF2YS51dGlsLlNldDsKKworLyoqCisgKiBTVEVNIElJIERhdGEgTWlncmF0aW9uL0dlbmVyYXRpb24gVXRpbGl0aWVzIDogSW5zdGFuY2VzIG9mIHRoaXMgdXRpbGl0eSBjbGFzcworICogY2xlYW4gdGhlIGRhdGEgZm9yIFJ1c3NpYS4gVGhpcyBwcm9ncmFtIHdpbGwgcmVtb3ZlIGFsbCB1bm5lY2VzYXJ5IGRhdGEgZnJvbQorICogdGhlIG9yaWdpbmFsIGRhdGEgc291cmNlIGZpbGUgZm9yIFJ1c3NpYS4gVGhlIG9yaWdpbmFsIGRhdGEgc291cmNlIGZpbGUgZm9yCisgKiBSdXNzaWEgd2FzIGRvd25sb2FkZWQgZnJvbSA6CisgKiBodHRwOi8vd3d3LmdyaWQudW5lcC5jaC9kYXRhL2RhdGEucGhwP2NhdGVnb3J5PWh1bWFuX3JlbGF0ZWQKKyAqIAorICogCisgKiBUbyBjb25maWd1cmUsIHNlZSBjb25maWd1cmF0aW9uIGZpbGUgOgorICogb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L2NvbmZpZ3VyYXRpb24vUnVzc2lhRGF0YUNsZWFuZXIuY29uZmlnCisgKiAKKyAqIAorICogVG8gcnVuLCBhZGQgcGF0aCB0byBjb25maWd1cmF0aW9uIGZpbGUgaW4gdGhlIHJ1biBwcm9maWxlIChpLmUuCisgKiBDOlxzdGVtSUlcb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5XGNvbmZpZ3VyYXRpb25cUnVzc2lhRGF0YUNsZWFuZXIuY29uZmlnKQorICogCisgKiBBZGQgdGhlIGZvbGxvd2luZyB2YWx1ZXMgdG8gdGhlIHJ1biBjb25maWd1cmF0aW9uOgorICogCisgKiBDOlxzdGVtSUlcb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5XGRhdGFNaWdyYXRpb25caW5wdXRccHJvcGVydGllc1xFdXJvcGVDb3VudHJpZXMudHh0CisgKiBDOlxFdXJvcGVEYXRhMjAwN1xSdXNzaWFcCisgKiAKKyAqIE92ZXJ2aWV3IG9mIHRoZSBkYXRhIGdlbmVyYXRpb24gcHJvY2VzcyBmb3IgdGhlIFJ1c3NpYSBkYXRhIHNldC4KKyAqIAorICogMSkgRGF0YSBDbGVhbmluZyA6IHN0YXJ0IGJ5IHJ1bm5pbmcgUnVzc2lhRGF0YUNsZWFuZXIuIFRoaXMgcHJvZ3JhbSB3aWxsCisgKiByZW1vdmUgYWxsIHVubmVjZXNhcnkgZGF0YSAoaS5lLiBjb2x1bW5zKSBpbiB0aGUgb3JpZ2luYWwgc291cmNlIGZpbGUuIEluCisgKiBhZGRpdGlvbiwgdGhpcyBwcm9ncmFtIHdpbGwgZ3JvdXAgdGhlIGRhdGEgYmFzZWQgb24gaXRzIElEIChpLmUuIE5PLElULEZSLFVLLAorICogZXRjKS4gVGhlIHJlc3VsdCB3aWxsIGJlIGEgZmlsZSBuYW1lZCBSdXNzaWFTb3J0ZWQudHh0IHdpdGggY2xlYW5lZCBkYXRhLgorICogCisgKiBJbiBvdGhlciB3b3JkcyA6IFJ1c3NpYS50eHQgLS0+IHx8UnVzc2lhRGF0YUNsZWFuZXJ8fCAtLT4gUnVzc2lhU29ydGVkLnR4dAorICogCisgKiBOT1RFOiBSdXNzaWFTb3J0ZWQudHh0IHdpbGwgYmUgdXNlZCBhcyB0aGUgaW5wdXQgZm9yIHRoZSByZW1haW5pbmcgcGFydCBvZgorICogdGhlIHByb2Nlc3MuCisgKiAKKyAqIAorICogMikgRGF0YSBDb252ZXJ0ZXIgOiBydW4gUnVzc2lhRGF0YUNvbnZlcnRlciB0byBjb252ZXJ0IGZpbGUgaW4gY2xlYW5lZCBmb3JtYXQKKyAqIGludG8gRGl2YSBmb3JtYXQuCisgKiAKKyAqIAorICogMykgQXJlYSBhbmQgUG9wdWxhdGlvbiBEYXRhIEV4dHJhY3Rpb24gOiBydW4gUnVzc2lhRGF0YUV4dHJhY3RvciB0byBleHRyYWN0CisgKiBhcmVhIGFuZCBwb3B1bGF0aW9uIGRhdGEgb3IgYWxsIGFkbWluaXN0cmF0aW9ucyBpbiBSdXNzaWEuCisgKiAKKyAqLworcHVibGljIGNsYXNzIFJ1c3NpYURhdGFDbGVhbmVyIHsKKworCXByaXZhdGUgU3RyaW5nIHRhcmdldEZpbGUgPSBudWxsOworCisJcHJpdmF0ZSBTdHJpbmcgb3V0cHV0RGlyID0gbnVsbDsKKworCXByaXZhdGUgU3RyaW5nIHdvcmtzcGFjZSA9IG51bGw7CisKKwkvKioKKwkgKiBMaXN0IGZvciBJU08gMzE2Ni0xIGNvZGVzIGFuZCB0YXJnZXQgY291bnRyaWVzLgorCSAqLworCUxpc3Q8U3RyaW5nPiB0YXJnZXRMaXN0ID0gbnVsbDsKKworCUxpc3Q8U3RyaW5nPiBjb2RlTGlzdCA9IG51bGw7CisKKwkvKioKKwkgKiBIYXNoIG1hcCB0byBrZWVwIHRyYWNrIG9mIHBvbHlnb25zLgorCSAqLworCUhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+IG1hcCA9IG51bGw7CisKKwkvKioKKwkgKiBDb25zdHJ1Y3RvcgorCSAqIAorCSAqIEBwYXJhbSB0YXJnZXRGaWxlIC0KKwkgKiAgICAgICAgICAgIGRhdGEgZmlsZSB3aGVyZSB3ZSBmaW5kIGEgbGlzdCBvZiBjb3VudHJpZXMgZm9yIGdlbmVyYXRpb24gb2YKKwkgKiAgICAgICAgICAgIHRoZWlyIGNvcnJlc3BvbmRpbmcgYXJlYS5wcm9wZXJ0aWVzIGZpbGVzLgorCSAqIEBwYXJhbSBvdXRwdXREaXIgLQorCSAqICAgICAgICAgICAgdGhlIG91dHB1dCBkaXJlY3RvcnkgZm9yIHRoZSBmaWxlcyBnZW5lcmF0ZWQuCisJICogCisJICovCisJLy8gcHVibGljIFJ1c3NpYURhdGFDbGVhbmVyKFN0cmluZyB0YXJnZXRGaWxlLCBTdHJpbmcgb3V0cHV0RGlyKSB7CisJLy8gLy8gU2V0IHZhbHVlcyBvZiBnbG9iYWwgdmFyaWFibGVzLgorCS8vIHRoaXMudGFyZ2V0RmlsZSA9IHRhcmdldEZpbGU7CisJLy8gdGhpcy5vdXRwdXREaXIgPSBvdXRwdXREaXI7CisJLy8gdGFyZ2V0TGlzdCA9IG51bGw7CisJLy8gbWFwID0gbmV3IEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+KCk7CisJLy8JfQorCisJLyoqCisJICogQHBhcmFtIGNvbmZpZ0ZpbGUKKwkgKi8KKwlwdWJsaWMgUnVzc2lhRGF0YUNsZWFuZXIoU3RyaW5nIGNvbmZpZ0ZpbGUpIHsKKwkKKwkJLy8gTG9hZCBhbGwgY29uZmlndXJhdGlvbiB2YXJpYWJsZXMKKwkJSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4gdmFycyA9IEdlblV0aWxzLmxvYWRDb25maWdGaWxlKGNvbmZpZ0ZpbGUpOworCisJCVNldDxTdHJpbmc+IGtleXMgPSB2YXJzLmtleVNldCgpOworCQlJdGVyYXRvciBpdCA9IGtleXMuaXRlcmF0b3IoKTsKKwkJd2hpbGUgKGl0Lmhhc05leHQoKSkgeworCQkJU3RyaW5nIHZhciA9IChTdHJpbmcpIGl0Lm5leHQoKTsKKworCQkJLy8gQXNzaWduIHZhbHVlcyB0byBjb25maWd1cmF0aW9uIHZhcmlhYmxlcyA6CisJCQlpZiAodmFyLmVxdWFscygiV09SS1NQQUNFIikpIHsgLy8kTk9OLU5MUy0xJAorCQkJCXdvcmtzcGFjZSA9IHZhcnMuZ2V0KHZhcik7CisJCQl9IGVsc2UgaWYgKHZhci5lcXVhbHMoIlRBUkdFVF9MSVNUIikpIHsgLy8kTk9OLU5MUy0xJAorCQkJCXRhcmdldEZpbGUgPSB2YXJzLmdldCh2YXIpOworCQkJfSBlbHNlIGlmICh2YXIuZXF1YWxzKCJPVVRQVVQiKSkgeyAvLyROT04tTkxTLTEkCisJCQkJb3V0cHV0RGlyID0gdmFycy5nZXQodmFyKTsKKwkJCX0KKworCQl9IC8vIHdoaWxlCisKKwkJLy8gVGhlIHdvcmtzcGFjZSB2YXJpYWJsZSBzaG91bGQgZW5kIHdpdGggYSBzbGFzaCBjaGFyYWN0ZXIKKwkJaWYgKHdvcmtzcGFjZS5lbmRzV2l0aCgiXFwiKSA9PSBmYWxzZSkgeyAvLyROT04tTkxTLTEkCisJCQl3b3Jrc3BhY2UgKz0gIlxcIjsgLy8kTk9OLU5MUy0xJAorCQl9CisKKwkJU3RyaW5nIHBhdGggPSB3b3Jrc3BhY2UgKyBHZW5Db25zdGFudHMuUEFSQU1TX0RJUjsKKworCQkvLyBTZXQgcmVtYWluaW5nIGNvbmZpZyB2YXJzIHVzaW5nIFdPUktTUEFDRSAod29ya3NwYWNlIHJlbGF0aXZlKQorCisJCWlmICh0YXJnZXRGaWxlID09IG51bGwpIHsKKwkJCXRhcmdldEZpbGUgPSBwYXRoICsgR2VuQ29uc3RhbnRzLkVVUk9QRV9DT1VOVFJJRVM7CisJCX0KKwkJaWYgKG91dHB1dERpciA9PSBudWxsKSB7CisJCQlvdXRwdXREaXIgPSBHZW5Db25zdGFudHMuRFVNTVlfRElSOworCQl9CisKKwkJdGFyZ2V0TGlzdCA9IG51bGw7CisKKwkJbWFwID0gbmV3IEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+KCk7CisKKwl9CisKKwkvKioKKwkgKiBUaGlzIG1ldGhvZCBzZXRzIHVwIGFuZCBydW5zIHRoZSBmaW5kZXIuCisJICogCisJICovCisJcHVibGljIHZvaWQgcnVuKCkgeworCQkvLyBSZWFkIGFuZCBrZWVwIGluIG1lbW9yeSBhIGxpc3Qgb2YgdGhlIGNvdW50cmllcyB3ZSB3YW50LgorCQl0YXJnZXRMaXN0ID0gR2VuVXRpbHMucG9wdWxhdGVMaXN0KHRhcmdldEZpbGUpOworCisJCS8vIE5vdywgcHJvY2VzcyBlYWNoIGl0ZW0gaW4gdGhlIHRhcmdldCBsaXN0LgorCQlwcm9jZXNzKCk7CisJfQorCisJLyoqCisJICogUHJvY2VzcyBvdXIgZ2xvYmFsIGxpc3Qgb2YgdGFyZ2V0IGNvdW50cmllcy4KKwkgKiAKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBwcm9jZXNzKCkgeworCisJCS8vIEEgd3JpdGVyIGZvciB0aGUgbmV3IGZpbGUgd2UgYXJlIGNyZWF0aW5nLgorCQlQcmludFdyaXRlciBydXNzaWFGaWxlID0gbnVsbDsKKworCQkvLyBOYW1lIG9mIHRoZSBuZXcgcHJvcGVydGllcyBmaWxlLgorCQlTdHJpbmcgZmlsZU5hbWUgPSBudWxsOworCisJCWludCBzaXplID0gdGFyZ2V0TGlzdC5zaXplKCk7CisKKwkJZm9yIChpbnQgaSA9IDA7IGkgPCBzaXplOyBpKyspIHsKKworCQkJLy8gR2V0IHRoZSBuZXh0IGNvdW50cnkgaW4gdGhlIGxpc3QuCisJCQlTdHJpbmcgZmlsZSA9IHRhcmdldExpc3QuZ2V0KGkpLnRyaW0oKTsKKworCQkJLy8gT3BlbiB0aGUgZGF0YSBzb3VyY2UgZmlsZSBmb3IgdGhpcyBjb3VudHJ5LgorCQkJQnVmZmVyZWRSZWFkZXIgcmVhZGVyID0gR2VuVXRpbHMub3BlblJlYWRlcihmaWxlKTsKKwkJCVN5c3RlbS5vdXQKKwkJCQkJLnByaW50bG4oIlx0XHQ8PDw8IFJVU1NJQSBEQVRBIENMRUFORVIgLS0gUHJvY2Vzc2luZyBDb3VudHJ5IDogIiArIGZpbGUgKyAiID4+Pj4iKTsgLy8kTk9OLU5MUy0xJCAgLy8kTk9OLU5MUy0yJAorCQkJdHJ5IHsKKworCQkJCWlmIChyZWFkZXIgIT0gbnVsbCkgeworCisJCQkJCVN0cmluZyBidWZmZXIgPSBudWxsOworCisJCQkJCS8vIFdlIHRha2UgYSBjaHVuayBvZiB0aGUgZGF0YSBbQlVGRkVSX01JTixCVUZGRVJfTUFYXSB0bworCQkJCQkvLyBtYWtlIHByb2Nlc3NpbmcgbW9yZQorCQkJCQkvLyBlZmZpY2llbnQsIHdlIGRvbnQgbmVlZCBhbGwgb2YgaXQuCisJCQkJCWludCBCVUZGRVJfTUlOID0gMDsKKwkJCQkJaW50IEJVRkZFUl9NQVggPSAyMDA7CisKKwkJCQkJd2hpbGUgKEdlblV0aWxzLkVPRihidWZmZXIgPSByZWFkZXIucmVhZExpbmUoKSkgIT0gdHJ1ZSkgeworCisJCQkJCQkvLyBNYWtlIHN1cmUgdGhhdCB3ZSBtYXJrIGFsbCB1bmtub3duIGRhdGEuCisJCQkJCQlidWZmZXIgPSBidWZmZXIucmVwbGFjZSgiLCwsIiwgIixVTktOT1dOLFVOS05PV04sIik7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAorCQkJCQkJYnVmZmVyID0gYnVmZmVyLnJlcGxhY2UoIiwsIiwgIixVTktOT1dOLCIpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKKworCQkJCQkJU3RyaW5nW10gaXRlbXMgPSBidWZmZXIuc3Vic3RyaW5nKEJVRkZFUl9NSU4sCisJCQkJCQkJCUJVRkZFUl9NQVgpLnNwbGl0KCIsIik7IC8vJE5PTi1OTFMtMSQKKworCQkJCQkJLy8gQ2xlYXIgYnVmZmVyIG9mIGRhdGEgd2UgZG9udCBuZWVkLgorCQkJCQkJU3RyaW5nIGNsZWFuQnVmZmVyID0gY2xlYW4oYnVmZmVyKTsKKworCQkJCQkJRmlsZSBjb3VudHJ5RGlyID0gbmV3IEZpbGUob3V0cHV0RGlyKTsKKworCQkJCQkJaWYgKGNvdW50cnlEaXIgIT0gbnVsbCAmJiBjb3VudHJ5RGlyLmV4aXN0cygpID09IGZhbHNlKSB7CisJCQkJCQkJLy8gRGlyZWN0b3J5IGRvZXMgbm90IGV4aXN0LiBDcmVhdGUgaXQuCisJCQkJCQkJY291bnRyeURpci5ta2RpcigpOworCQkJCQkJfQorCisJCQkJCQkvLyBDcmVhdGUgYW5kIG9wZW4gdGhlIG5ldyBmaWxlLgorCQkJCQkJaWYgKHJ1c3NpYUZpbGUgPT0gbnVsbCkgeworCQkJCQkJCWZpbGVOYW1lID0gY291bnRyeURpciArICJcXCIgKyAiUnVzc2lhU29ydGVkLnR4dCI7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAkJCQkJCQkJCQorCQkJCQkJCS8vIENyZWF0ZSB0bmUgbmV3IHByb3BlcnRpZXMuZmlsZSBmb3IgdGhpcyBjb3VudHJ5LgorCQkJCQkJCXJ1c3NpYUZpbGUgPSBHZW5VdGlscy5vcGVuV3JpdGVyKGZpbGVOYW1lKTsKKwkJCQkJCX0KKworCQkJCQkJU3RyaW5nIHZhbCA9IG1hcAorCQkJCQkJCQkuZ2V0KGl0ZW1zW1J1c3NpYURhdGFDbGVhbmluZ0hlYWRlci5OQU1FMV0pOworCQkJCQkJaWYgKHZhbCAhPSBudWxsKSB7CisJCQkJCQkJLy8gQ29uY2F0ZW5hdGUKKwkJCQkJCQl2YWwgKz0gY2xlYW5CdWZmZXIgKyAiXG4iOyAvLyROT04tTkxTLTEkCisJCQkJCQl9IGVsc2UgeworCQkJCQkJCS8vIEZpcnN0IGVudHJ5CisJCQkJCQkJdmFsID0gY2xlYW5CdWZmZXIgKyAiXG4iOyAvLyROT04tTkxTLTEkCisJCQkJCQl9CisJCQkJCQltYXAucHV0KGl0ZW1zW1J1c3NpYURhdGFDbGVhbmluZ0hlYWRlci5OQU1FMV0sIHZhbCk7CisKKwkJCQkJfS8vIHdoaWxlCisKKwkJCQkJLy8gQ2xvc2UgYWxsIG9wZW4gcmVzb3VyY2VzLgorCQkJCQlyZWFkZXIuY2xvc2UoKTsKKworCQkJCQlpZiAocnVzc2lhRmlsZSAhPSBudWxsKSB7CisJCQkJCQlTdHJpbmcgb3V0cHV0ID0gY29uc29saWRhdGVEYXRhKG1hcCk7CisJCQkJCQlpZiAob3V0cHV0ICE9IG51bGwpIHsKKwkJCQkJCQlHZW5VdGlscy5hZGREYXRhKHJ1c3NpYUZpbGUsIG91dHB1dCk7CisJCQkJCQl9CisJCQkJCQlydXNzaWFGaWxlLmNsb3NlKCk7CisJCQkJCQlydXNzaWFGaWxlID0gbnVsbDsKKwkJCQkJCVV0aWxMb2dnZXIubG9nSW5mb3JtYXRpb24oIiIgLy8kTk9OLU5MUy0xJAorCQkJCQkJCQkrIGZpbGVOYW1lKTsKKwkJCQkJCWZpbGVOYW1lID0gbnVsbDsKKwkJCQkJfQorCisJCQkJCS8vIFJ1biBnYXJiYWdlIGNvbGxlY3Rpb24KKwkJCQkJLy9TeXN0ZW0uZ2MoKTsKKworCQkJCX0KKworCQkJfSBjYXRjaCAoSU9FeGNlcHRpb24gZSkgeworCQkJCWUucHJpbnRTdGFja1RyYWNlKCk7CisJCQl9CisKKwkJfSAvLyBmb3IKKworCX0KKworCS8qKgorCSAqIAorCSAqIEdldCBhbGwgdGhlIHZhbHVlcyBpbiB0aGUgbWFwLgorCSAqIAorCSAqIEBwYXJhbSBtYXAKKwkgKiAgICAgICAgICAgIGEgbWFwIG9mIGxvY2F0aW9ucworCSAqIAorCSAqIEByZXR1cm4gU3RyaW5nIGEgc3RyaW5nIHdpbGwgYWxsIGxvY2F0aW9ucyBncm91cGVkIHNlY3VlbnRpYWx5LgorCSAqIAorCSAqLworCVN0cmluZyBjb25zb2xpZGF0ZURhdGEoSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4gbWFwKSB7CisKKwkJU3RyaW5nIHZhbHVlID0gbnVsbDsKKworCQlpZiAobWFwLmlzRW1wdHkoKSkgeworCQkJcmV0dXJuIG51bGw7CisJCX0KKworCQlTZXQ8U3RyaW5nPiBrZXlzID0gbWFwLmtleVNldCgpOworCisJCUl0ZXJhdG9yIGl0ID0ga2V5cy5pdGVyYXRvcigpOworCisJCXdoaWxlIChpdC5oYXNOZXh0KCkpIHsKKworCQkJU3RyaW5nIGtleSA9IChTdHJpbmcpIGl0Lm5leHQoKTsKKworCQkJaWYgKHZhbHVlID09IG51bGwpIHsKKwkJCQl2YWx1ZSA9IG1hcC5nZXQoa2V5KTsKKwkJCX0gZWxzZSB7CisJCQkJdmFsdWUgKz0gbWFwLmdldChrZXkpOworCQkJfQorCisJCX0KKworCQlyZXR1cm4gdmFsdWU7CisJfQorCisJLyoqCisJICogUmVtb3ZlIGFsbCBpcnJlbGV2YW50IGRhdGEgZnJvbSBvdXIgYnVmZmVyCisJICovCisJU3RyaW5nIGNsZWFuKFN0cmluZyBidWZmZXIpIHsKKworCQkvLyBOdW1iZXIgb2Ygbm9uLXBvbHlnb24gY29sdW1ucy4KKwkJZmluYWwgaW50IExJTUlUID0gMTc7CisJCVN0cmluZyBuZXdCdWZmZXIgPSBudWxsOworCisJCVN0cmluZ1tdIGl0ZW1zID0gYnVmZmVyLnNwbGl0KCIsIik7IC8vJE5PTi1OTFMtMSQKKworCQlpbnQgaW5kZXggPSAwOworCisJCXdoaWxlIChpbmRleCA8IGl0ZW1zLmxlbmd0aCkgeworCisJCQlpZiAoaW5kZXggPj0gTElNSVQpIHsKKwkJCQluZXdCdWZmZXIgKz0gIiwiICsgaXRlbXNbaW5kZXgrK107IC8vJE5PTi1OTFMtMSQKKwkJCQljb250aW51ZTsKKwkJCX0KKworCQkJc3dpdGNoIChpbmRleCkgeworCisJCQljYXNlIFJ1c3NpYURhdGFDbGVhbmluZ0hlYWRlci5JRDoKKwkJCQluZXdCdWZmZXIgPSBpdGVtc1tpbmRleF07CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgUnVzc2lhRGF0YUNsZWFuaW5nSGVhZGVyLkFSRUE6CisJCQkJbmV3QnVmZmVyICs9ICIsIiArIGl0ZW1zW2luZGV4XTsgLy8kTk9OLU5MUy0xJAorCQkJCWJyZWFrOworCisJCQljYXNlIFJ1c3NpYURhdGFDbGVhbmluZ0hlYWRlci5DT1VOVFJZOgorCQkJCW5ld0J1ZmZlciArPSAiLCIgKyBpdGVtc1tpbmRleF07IC8vJE5PTi1OTFMtMSQKKwkJCQlicmVhazsKKworCQkJY2FzZSBSdXNzaWFEYXRhQ2xlYW5pbmdIZWFkZXIuTkFNRTE6CisJCQkJbmV3QnVmZmVyICs9ICIsIiArIGl0ZW1zW2luZGV4XTsgLy8kTk9OLU5MUy0xJAorCQkJCWJyZWFrOworCisJCQljYXNlIFJ1c3NpYURhdGFDbGVhbmluZ0hlYWRlci5OQU1FMjoKKwkJCQluZXdCdWZmZXIgKz0gIiwiICsgaXRlbXNbaW5kZXhdOyAvLyROT04tTkxTLTEkCisJCQkJYnJlYWs7CisKKwkJCWNhc2UgUnVzc2lhRGF0YUNsZWFuaW5nSGVhZGVyLk5BTUUzOgorCQkJCW5ld0J1ZmZlciArPSAiLCIgKyBpdGVtc1tpbmRleF07IC8vJE5PTi1OTFMtMSQKKwkJCQlicmVhazsKKworCQkJY2FzZSBSdXNzaWFEYXRhQ2xlYW5pbmdIZWFkZXIuUE9QMToKKwkJCQluZXdCdWZmZXIgKz0gIiwiICsgaXRlbXNbaW5kZXhdOyAvLyROT04tTkxTLTEkCisJCQkJYnJlYWs7CisKKwkJCWNhc2UgUnVzc2lhRGF0YUNsZWFuaW5nSGVhZGVyLlBPUDI6CisJCQkJbmV3QnVmZmVyICs9ICIsIiArIGl0ZW1zW2luZGV4XTsgLy8kTk9OLU5MUy0xJAorCQkJCWJyZWFrOworCisJCQl9CisKKwkJCWluZGV4Kys7CisKKwkJfQorCisJCXJldHVybiBuZXdCdWZmZXI7CisKKwl9CisKKwkvKioKKwkgKiBNYWluIGV4ZWN1dGlvbiBlbnRyeSBwb2ludC4KKwkgKiAKKwkgKiBAcGFyYW0gYXJncworCSAqLworCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKKwkJLy8gZmluYWwgaW50IFRBUkdFVF9MSVNUID0gMDsKKwkJLy8gZmluYWwgaW50IE9VVFBVVF9ESVIgPSAxOworCQkvLyBmaW5hbCBpbnQgUEFSQU1TID0gMjsKKwkJLy8KKwkJLy8gaWYgKGFyZ3MubGVuZ3RoIDwgUEFSQU1TKSB7CisJCS8vIFV0aWxMb2dnZXIubG9nSW5mb3JtYXRpb24oIi0tV3JvbmcgYXJndW1lbnRzLS0iKTsgLy8kTk9OLU5MUy0xJAorCQkvLyBTeXN0ZW0ub3V0CisJCS8vIC5wcmludGxuKCJcdFRvIHJ1biwgcGxlYXNlIHByb3ZpZGUgdGhlIGZvbGxvd2luZyBhcmd1bWVudHMgOiAiKTsKKwkJLy8gLy8kTk9OLU5MUy0xJAorCQkvLyBVdGlsTG9nZ2VyLmxvZ0luZm9ybWF0aW9uKCJcdFx0IFRhcmdldCBjb3VudHJpZXMgZmlsZSIpOyAvLyROT04tTkxTLTEkCisJCS8vIFV0aWxMb2dnZXIubG9nSW5mb3JtYXRpb24oIlx0XHQgT3V0cHV0IGRpcmVjdG9yeSIpOyAvLyROT04tTkxTLTEkCisJCS8vIHJldHVybjsKKwkJLy8gfQorCisJCS8vIFJ1c3NpYURhdGFDbGVhbmVyIGZvcm1hdHRlciA9IG5ldworCQkvLyBSdXNzaWFEYXRhQ2xlYW5lcihhcmdzW1RBUkdFVF9MSVNUXSwKKwkJLy8gYXJnc1tPVVRQVVRfRElSXSk7CisJCS8vIGZvcm1hdHRlci5ydW4oKTsKKworCQlmaW5hbCBpbnQgQ09ORklHX0ZJTEUgPSAwOworCQlmaW5hbCBpbnQgUEFSQU1TID0gMTsKKworCQlpZiAoYXJncy5sZW5ndGggPCBQQVJBTVMpIHsKKwkJCVV0aWxMb2dnZXIubG9nSW5mb3JtYXRpb24oIlx0XHQtLVdyb25nIGFyZ3VtZW50cy0tIik7IC8vJE5PTi1OTFMtMSQKKwkJCVN5c3RlbS5vdXQKKwkJCQkJLnByaW50bG4oIlx0XHRUbyBydW4sIHBsZWFzZSBwcm92aWRlIHRoZSBmb2xsb3dpbmcgYXJndW1lbnQocykgOiAiKTsgLy8kTk9OLU5MUy0xJAorCQkJVXRpbExvZ2dlci5sb2dJbmZvcm1hdGlvbigiXHRcdFx0IENvbmZpZ3VyYXRpb24gZmlsZSIpOyAvLyROT04tTkxTLTEkCisJCQlTeXN0ZW0uZXhpdCgxKTsKKwkJfQorCisJCVJ1c3NpYURhdGFDbGVhbmVyIGNsZWFuZXIgPSBuZXcgUnVzc2lhRGF0YUNsZWFuZXIoYXJnc1tDT05GSUdfRklMRV0pOworCQljbGVhbmVyLnJ1bigpOworCX0KK30KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3NyYy9vcmcvZWNsaXBzZS9zdGVtL3V0aWxpdHkvZ2VuZXJhdG9ycy9SdXNzaWFEYXRhQ2xlYW5pbmdIZWFkZXIuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3NyYy9vcmcvZWNsaXBzZS9zdGVtL3V0aWxpdHkvZ2VuZXJhdG9ycy9SdXNzaWFEYXRhQ2xlYW5pbmdIZWFkZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NTdlZTkzCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdXRpbGl0eS9nZW5lcmF0b3JzL1J1c3NpYURhdGFDbGVhbmluZ0hlYWRlci5qYXZhCkBAIC0wLDAgKzEsNjQgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5LmdlbmVyYXRvcnM7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDkgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioKKyAqIAorICogUmVsZXZhbnQga2V5cyB0byB0aGUgUnVzc2lhbiBkYXRhc2V0LiBLZXlzIGluIHRoaXMgY2xhc3MgYXJlIHVzZWQgZHVyaW5nIHRoZQorICogZGF0YSBjbGVhbmluZyBwcm9jZXNzIHRvIGV4dHJhY3Qgb25seSB0aGUgcmVsZXZhbnQga2V5cyBmcm9tIHRoZSBvcmlnaW5hbAorICogZGF0YSBzb3VyY2UgZmlsZSBmb3IgUnVzc2lhLiBUaGVzZSBrZXlzIGFyZSB1c2VkIHdoZW4gcnVubmluZyBhbiBpbnN0YW5jZSBvZgorICogUnVzc2lhRGF0YUNsZWFuZXIgdG8gcGVyZm9ybSBkYXRhIGNsZWFuaW5nLgorICogCisgKi8KK3B1YmxpYyBhYnN0cmFjdCBjbGFzcyBSdXNzaWFEYXRhQ2xlYW5pbmdIZWFkZXIgeworCisJLyoqCisJICogQWRtaW5pc3RyYXRpb24gSUQgKG51bWVyaWMpCisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgSUQgPSA0OworCisJLyoqCisJICogVG90YWwgQXJlYQorCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEFSRUEgPSA1OworCQorCS8qKgorCSAqIENvdW50cnkgaWRlbnRpZmllcgorCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IENPVU5UUlkgPSA5OworCisJLyoqCisJICogTG9jYXRpb24gbmFtZSAxCisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgTkFNRTEgPSAxMDsKKworCS8qKgorCSAqIExvY2F0aW9uIG5hbWUgMgorCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IE5BTUUyID0gMTE7CisKKwkvKioKKwkgKiBMb2NhdGlvbiBuYW1lIDMKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIGludCBOQU1FMyA9IDEyOworCisJLyoqCisJICogUG9wdWxhdGlvbiB2YWx1ZSAoZXN0aW1hdGVkIHBvcHVsYXRpb24gZm9yIDE5OTUpCisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgUE9QMSA9IDE0OworCisJLyoqCisJICogUG9wdWxhdGlvbiB2YWx1ZSAoY29uY3JldGUgcG9wdWxhdGlvbikKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIGludCBQT1AyID0gMTY7CisKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91dGlsaXR5L2dlbmVyYXRvcnMvUnVzc2lhRGF0YUNvbnZlcnRlci5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdXRpbGl0eS9nZW5lcmF0b3JzL1J1c3NpYURhdGFDb252ZXJ0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYjc2ZjA4Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdXRpbGl0eS9nZW5lcmF0b3JzL1J1c3NpYURhdGFDb252ZXJ0ZXIuamF2YQpAQCAtMCwwICsxLDQwMiBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkuZ2VuZXJhdG9yczsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqYXZhLmlvLkJ1ZmZlcmVkUmVhZGVyOworaW1wb3J0IGphdmEuaW8uRmlsZTsKK2ltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOworaW1wb3J0IGphdmEuaW8uUHJpbnRXcml0ZXI7CitpbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7CitpbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOworaW1wb3J0IGphdmEudXRpbC5MaXN0OworaW1wb3J0IGphdmEudXRpbC5TZXQ7CisKKy8qKgorICogQ29udmVydCBhIGRhdGEgZmlsZSB0aGF0IGNvbWVzIGludG8gdGhlIGZvcm1hdCBVTiBSdXNzaWEgOgorICogaHR0cDovL3d3dy5ncmlkLnVuZXAuY2gvZGF0YS9kYXRhLnBocD9jYXRlZ29yeT1odW1hbl9yZWxhdGVkIGludG8gdGhlIERpdmEKKyAqIGZvcm1hdCB0aGF0IHRoZSBnZW5lcmF0b3JzIGNhbiBoYW5kbGUuIFRoaXMgd29udCBmb3JtYXQgYW55IGFyYml0cmFyeSBmb3JtYXQKKyAqIGludG8gRGl2YSBmb3JtYXQuIENvbnZlcnRzIG9ubHkgOiBVTiBSdXNzaWEgZm9ybWF0IC0+IERpdmEgZm9ybWF0CisgKiAKKyAqIAorICogVG8gY29uZmlndXJlLCBzZWUgY29uZmlndXJhdGlvbiBmaWxlIDoKKyAqIG9yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9jb25maWd1cmF0aW9uL1J1c3NpYURhdGFDb252ZXJ0ZXIuY29uZmlnCisgKiAKKyAqIAorICogVG8gcnVuLCBhZGQgcGF0aCB0byBjb25maWd1cmF0aW9uIGZpbGUgaW4gdGhlIHJ1biBwcm9maWxlIChpLmUuCisgKiBDOlxzdGVtSUlcb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5XGNvbmZpZ3VyYXRpb25cUnVzc2lhRGF0YUNvbnZlcnRlci5jb25maWcpCisgKiAKKyAqIEFkZCB0aGUgZm9sbG93aW5nIHZhbHVlcyB0byB0aGUgcnVuIGNvbmZpZ3VyYXRpb246CisgKiAKKyAqIEM6XHN0ZW1JSVxvcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHlcZGF0YU1pZ3JhdGlvblxpbnB1dFxJU08zMTY2LTFcSVNPMzE2Nl8xX2VuLnR4dAorICogQzpcc3RlbUlJXG9yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eVxkYXRhTWlncmF0aW9uXGlucHV0XHByb3BlcnRpZXNcRXVyb3BlTmFtZXMudHh0CisgKiBDOlxzdGVtSUlcb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5XGRhdGFNaWdyYXRpb25caW5wdXRccHJvcGVydGllc1xFdXJvcGVDb3VudHJpZXMudHh0CisgKiBDOlxkaXZhXEV1cm9wZVwgKiBPdmVydmlldyBvZiB0aGUgZGF0YSBnZW5lcmF0aW9uIHByb2Nlc3MgZm9yIHRoZSBSdXNzaWEgZGF0YQorICogc2V0LgorICogCisgKiAxKSBEYXRhIENsZWFuaW5nIDogc3RhcnQgYnkgcnVubmluZyBSdXNzaWFEYXRhQ2xlYW5lci4gVGhpcyBwcm9ncmFtIHdpbGwKKyAqIHJlbW92ZSBhbGwgdW5uZWNlc2FyeSBkYXRhIChpLmUuIGNvbHVtbnMpIGluIHRoZSBvcmlnaW5hbCBzb3VyY2UgZmlsZS4gSW4KKyAqIGFkZGl0aW9uLCB0aGlzIHByb2dyYW0gd2lsbCBncm91cCB0aGUgZGF0YSBiYXNlZCBvbiBpdHMgSUQgKGkuZS4gTk8sSVQsRlIsVUssCisgKiBldGMpLiBUaGUgcmVzdWx0IHdpbGwgYmUgYSBmaWxlIG5hbWVkIFJ1c3NpYVNvcnRlZC50eHQgd2l0aCBjbGVhbmVkIGRhdGEuCisgKiAKKyAqIEluIG90aGVyIHdvcmRzIDogUnVzc2lhLnR4dCAtLT4gfHxSdXNzaWFEYXRhQ2xlYW5lcnx8IC0tPiBSdXNzaWFTb3J0ZWQudHh0CisgKiAKKyAqIE5PVEU6IFJ1c3NpYVNvcnRlZC50eHQgd2lsbCBiZSB1c2VkIGFzIHRoZSBpbnB1dCBmb3IgdGhlIHJlbWFpbmluZyBwYXJ0IG9mCisgKiB0aGUgcHJvY2Vzcy4KKyAqIAorICogCisgKiAyKSBEYXRhIENvbnZlcnRlciA6IHJ1biBSdXNzaWFEYXRhQ29udmVydGVyIHRvIGNvbnZlcnQgZmlsZSBpbiBjbGVhbmVkIGZvcm1hdAorICogaW50byBEaXZhIGZvcm1hdC4gUHJvY2VzcyA6IFJ1c3NpYVNvcnRlZC50eHQgLS0+IHx8UnVzc2lhRGF0YUNvbnZlcnRlcnx8IC0tPgorICogUnVzc2lhLnR4dAorICogCisgKiAKKyAqIDMpIEFyZWEgYW5kIFBvcHVsYXRpb24gRGF0YSBFeHRyYWN0aW9uIDogcnVuIFJ1c3NpYURhdGFFeHRyYWN0b3IgdG8gZXh0cmFjdAorICogYXJlYSBhbmQgcG9wdWxhdGlvbiBkYXRhIG9yIGFsbCBhZG1pbmlzdHJhdGlvbnMgaW4gUnVzc2lhLgorICogCisgKiAKKyAqLworCitwdWJsaWMgY2xhc3MgUnVzc2lhRGF0YUNvbnZlcnRlciB7CisKKwkvKioKKwkgKiBPdXIgc291cmNlIGZpbGVzIGZvciBJU08gMzE2Ni0xIGNvZGVzIGFuZCBmb3IgdGhlIGxpc3Qgb2YgdGFyZ2V0CisJICogY291bnRyaWVzLgorCSAqLworCXByaXZhdGUgU3RyaW5nIGlzbzMxNjZfMSA9IG51bGw7CisKKwlwcml2YXRlIFN0cmluZyB0YXJnZXRGaWxlID0gbnVsbDsKKworCXByaXZhdGUgU3RyaW5nIG91dHB1dERpciA9IG51bGw7CisKKwlwcml2YXRlIFN0cmluZyB3b3Jrc3BhY2UgPSBudWxsOworCisJLyoqCisJICogTGlzdCBmb3IgSVNPIDMxNjYtMSBjb2RlcyBhbmQgdGFyZ2V0IGNvdW50cmllcy4KKwkgKi8KKworCUxpc3QgdGFyZ2V0TGlzdCA9IG51bGw7CisKKwlMaXN0IGNvZGVMaXN0ID0gbnVsbDsKKworCUxpc3QgZGF0YUxpc3QgPSBudWxsOworCisJLyoqCisJICogQW4gaW5kZXggdG8gY291bnQgdGhlIG51bWJlciBvZiB1bm5hbWVkIGVudHJpZXMgaW4gdGhlIGRhdGEgc2V0LgorCSAqLworCWludCB1bmtDb3VudGVyID0gMTsKKworCS8qKgorCSAqIENvbnN0cnVjdG9yCisJICogCisJICogQHBhcmFtIGlzbzMxNjZfMSAtCisJICogICAgICAgICAgICBkYXRhIGZpbGUgd2l0aCB0aGUgSVNPMzE2Ni0xIEFMUEhBXzIgYW5kIEFMUEhBXzMgY29kZXMuCisJICogQHBhcmFtIHRhcmdldEZpbGUgLQorCSAqICAgICAgICAgICAgbGlzdCBvZiB0YXJnZXQgY291bnRyaWVzCisJICogQHBhcmFtIG91dHB1dERpciAtCisJICogICAgICAgICAgICB0aGUgb3V0cHV0IGRpcmVjdG9yeSBmb3IgdGhlIGZpbGVzIGdlbmVyYXRlZC4KKwkgKiAKKwkgKi8KKwkvLyBwdWJsaWMgUnVzc2lhRGF0YUNvbnZlcnRlcihTdHJpbmcgaXNvMzE2Nl8xLCAvKiBTdHJpbmcgbmFtZXNGaWxlLCAqLworCS8vIFN0cmluZyB0YXJnZXRGaWxlLCBTdHJpbmcgb3V0cHV0RGlyKSB7CisJLy8gLy8gU2V0IHZhbHVlcyBvZiBnbG9iYWwgdmFyaWFibGVzLgorCS8vIHRoaXMuaXNvMzE2Nl8xID0gaXNvMzE2Nl8xOworCS8vIHRoaXMudGFyZ2V0RmlsZSA9IHRhcmdldEZpbGU7CisJLy8gdGhpcy5vdXRwdXREaXIgPSBvdXRwdXREaXI7CisJLy8gdGFyZ2V0TGlzdCA9IG51bGw7CisJLy8gfQorCS8qKgorCSAqIEBwYXJhbSBjb25maWdGaWxlCisJICovCisJcHVibGljIFJ1c3NpYURhdGFDb252ZXJ0ZXIoU3RyaW5nIGNvbmZpZ0ZpbGUpIHsKKworCQkvLyBMb2FkIGFsbCBjb25maWd1cmF0aW9uIHZhcmlhYmxlcworCQlIYXNoTWFwPFN0cmluZywgU3RyaW5nPiB2YXJzID0gR2VuVXRpbHMubG9hZENvbmZpZ0ZpbGUoY29uZmlnRmlsZSk7CisKKwkJU2V0PFN0cmluZz4ga2V5cyA9IHZhcnMua2V5U2V0KCk7CisJCUl0ZXJhdG9yIGl0ID0ga2V5cy5pdGVyYXRvcigpOworCQl3aGlsZSAoaXQuaGFzTmV4dCgpKSB7CisJCQlTdHJpbmcgdmFyID0gKFN0cmluZykgaXQubmV4dCgpOworCisJCQkvLyBBc3NpZ24gdmFsdWVzIHRvIGNvbmZpZ3VyYXRpb24gdmFyaWFibGVzIDoKKwkJCWlmICh2YXIuZXF1YWxzKCJXT1JLU1BBQ0UiKSkgeyAvLyROT04tTkxTLTEkCisJCQkJd29ya3NwYWNlID0gdmFycy5nZXQodmFyKTsKKwkJCX0gZWxzZSBpZiAodmFyLmVxdWFscygiSVNPMzE2Nl8xIikpIHsgLy8kTk9OLU5MUy0xJAorCQkJCWlzbzMxNjZfMSA9IHZhcnMuZ2V0KHZhcik7CisJCQl9IGVsc2UgaWYgKHZhci5lcXVhbHMoIlRBUkdFVF9MSVNUIikpIHsgLy8kTk9OLU5MUy0xJAorCQkJCXRhcmdldEZpbGUgPSB2YXJzLmdldCh2YXIpOworCQkJfSBlbHNlIGlmICh2YXIuZXF1YWxzKCJPVVRQVVQiKSkgeyAvLyROT04tTkxTLTEkCisJCQkJb3V0cHV0RGlyID0gdmFycy5nZXQodmFyKTsKKwkJCX0KKworCQl9IC8vIHdoaWxlCisKKwkJLy8gVGhlIHdvcmtzcGFjZSB2YXJpYWJsZSBzaG91bGQgZW5kIHdpdGggYSBzbGFzaCBjaGFyYWN0ZXIKKwkJaWYgKHdvcmtzcGFjZS5lbmRzV2l0aCgiXFwiKSA9PSBmYWxzZSkgeyAvLyROT04tTkxTLTEkCisJCQl3b3Jrc3BhY2UgKz0gIlxcIjsgLy8kTk9OLU5MUy0xJAorCQl9CisKKwkJU3RyaW5nIHBhdGggPSB3b3Jrc3BhY2UgKyBHZW5Db25zdGFudHMuUEFSQU1TX0RJUjsKKworCQkvLyBTZXQgcmVtYWluaW5nIGNvbmZpZyB2YXJzIHVzaW5nIFdPUktTUEFDRSAod29ya3NwYWNlIHJlbGF0aXZlKQorCQlpZiAoaXNvMzE2Nl8xID09IG51bGwpIHsKKwkJCWlzbzMxNjZfMSA9IHBhdGggKyBHZW5Db25zdGFudHMuSVNPMzE2Nl8xX0ZJTEU7CisJCX0KKwkJaWYgKHRhcmdldEZpbGUgPT0gbnVsbCkgeworCQkJdGFyZ2V0RmlsZSA9IHBhdGggKyBHZW5Db25zdGFudHMuRVVST1BFX0NPVU5UUklFUzsKKwkJfQorCQlpZiAob3V0cHV0RGlyID09IG51bGwpIHsKKwkJCW91dHB1dERpciA9IEdlbkNvbnN0YW50cy5EVU1NWV9ESVI7CisJCX0KKworCQl0YXJnZXRMaXN0ID0gbnVsbDsKKworCX0KKworCS8qKgorCSAqIFRoaXMgbWV0aG9kIHNldHMgdXAgYW5kIHJ1bnMgdGhpcyBnZW5lcmF0b3IuCisJICogCisJICovCisJcHVibGljIHZvaWQgcnVuKCkgeworCQkvLyBSZWFkIGFuZCBrZWVwIGluIG1lbW9yeSBhIGxpc3Qgb2YgdGhlIGNvdW50cmllcyB3ZSB3YW50LgorCQl0YXJnZXRMaXN0ID0gR2VuVXRpbHMucG9wdWxhdGVMaXN0KHRhcmdldEZpbGUpOworCisJCS8vIFJlYWQgYW5kIGtlZXAgaW4gbWVtb3J5IGEgbGlzdCBvZiB0aGUgSVNPMzE2Ni0xIEFMUEhBMiwgQUxQSEEzLCBhbmQKKwkJLy8gbnVtZXJpYyBjb2Rlcy4KKwkJY29kZUxpc3QgPSBHZW5VdGlscy5wb3B1bGF0ZUxpc3QoaXNvMzE2Nl8xKTsKKworCQkvLyBSdW4gdGhlIGNvbnZlcnRlcjogVU4gUnVzc2lhIC0+IERpdmEgc2V0IGZvcm1hdAorCQlwcm9jZXNzKCk7CisJfQorCisJLyoqCisJICogQ29udmVydCBhIGRhdGEgZmlsZSB0aGF0IGNvbWVzIGludG8gdGhlIGZvcm1hdCBVTiBSdXNzaWEgOgorCSAqIGh0dHA6Ly93d3cuZ3JpZC51bmVwLmNoL2RhdGEvZGF0YS5waHA/Y2F0ZWdvcnk9aHVtYW5fcmVsYXRlZCBpbnRvIHRoZQorCSAqIERpdmEgZm9ybWF0IHRoYXQgdGhlIGdlbmVyYXRvcnMgY2FuIGhhbmRsZS4gVGhpcyB3b250IGZvcm1hdCBhbnkKKwkgKiBhcmJpdHJhcnkgZm9ybWF0IGludG8gRGl2YSBmb3JtYXQuIENvbnZlcnRzIG9ubHkgOiBVTiBSdXNzaWFhbiBmb3JtYXQgLT4KKwkgKiBEaXZhIGZvcm1hdAorCSAqIAorCSAqLworCXByb3RlY3RlZCB2b2lkIHByb2Nlc3MoKSB7CisKKwkJLy8gQSB3cml0ZXIgZm9yIHRoZSBuZXcgZmlsZSB3ZSBhcmUgY3JlYXRpbmcuCisJCVByaW50V3JpdGVyIGRpdmFGaWxlID0gbnVsbDsKKworCQkvLyBPYmplY3QgaG9sZGluZyBJU08zMTY2LTEgcmVsYXRlZCBkYXRhLgorCQlJU09Db2RlMSBpc29Db2RlID0gbnVsbDsKKworCQkvLyBOYW1lIG9mIHRoZSBuZXcgcHJvcGVydGllcyBmaWxlLgorCQlTdHJpbmcgZmlsZU5hbWUgPSBudWxsOworCisJCWludCBzaXplID0gdGFyZ2V0TGlzdC5zaXplKCk7CisKKwkJLy8gRm9yIGV2ZXJ5IGNvdW50cnkKKwkJZm9yIChpbnQgaSA9IDA7IGkgPCBzaXplOyBpKyspIHsKKworCQkJLy8gR2V0IHRoZSBuZXh0IGZpbGUgaW4gdGhlIGxpc3QuCisJCQlTdHJpbmcgZmlsZSA9ICgoU3RyaW5nKSB0YXJnZXRMaXN0LmdldChpKSkudHJpbSgpOworCisJCQkvLyBPcGVuIHRoZSBkYXRhIHNvdXJjZSBmaWxlIGZvciB0aGlzIGNvdW50cnkuCisJCQlCdWZmZXJlZFJlYWRlciByZWFkZXIgPSBHZW5VdGlscy5vcGVuUmVhZGVyKGZpbGUpOworCQkJU3lzdGVtLm91dAorCQkJCQkucHJpbnRsbigiXHRcdDw8PDwgUlVTU0lBIERBVEEgQ09OVkVSVEVSIC0tIFByb2Nlc3NpbmcgQ291bnRyeSA6ICIgKyBmaWxlICsgIiA+Pj4+Iik7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJCAKKwkJCXRyeSB7CisKKwkJCQlpZiAocmVhZGVyICE9IG51bGwpIHsKKworCQkJCQlTdHJpbmcgYnVmZmVyID0gbnVsbDsKKworCQkJCQl3aGlsZSAoR2VuVXRpbHMuRU9GKGJ1ZmZlciA9IHJlYWRlci5yZWFkTGluZSgpKSAhPSB0cnVlKSB7CisKKwkJCQkJCS8vIE1ha2Ugc3VyZSB0aGF0IHdlIG1hcmsgYWxsIHVua25vd24gZGF0YS4KKwkJCQkJCWJ1ZmZlciA9IGJ1ZmZlci5yZXBsYWNlKCIsLCIsICIsVU5LTk9XTiwiKTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCisKKwkJCQkJCVN0cmluZ1tdIGl0ZW1zID0gYnVmZmVyLnNwbGl0KCIsIik7IC8vJE5PTi1OTFMtMSQKKworCQkJCQkJLy8gR2V0IHRoZSBJU08zMTY2LTEgaW5mbyBmb3IgdGhpcyBjb3VudHJ5CisJCQkJCQlpZiAoaXNvQ29kZSA9PSBudWxsKSB7CisJCQkJCQkJU3RyaW5nIGNvdW50cnkgPSBHZW5VdGlscy5nZXRDb3VudHJ5TmFtZSgKKwkJCQkJCQkJCWl0ZW1zW1J1c3NpYURhdGFGb3JtYXR0aW5nSGVhZGVyLkNPVU5UUlldCisJCQkJCQkJCQkJCS5zdWJzdHJpbmcoMCwgMiksIGNvZGVMaXN0KTsKKwkJCQkJCQlpc29Db2RlID0gR2VuVXRpbHMuZ2V0SVNPQ29kZShjb3VudHJ5LCBjb2RlTGlzdCk7CisJCQkJCQl9CisKKwkJCQkJCS8vIElmIHRoZSBkaXJlY3RvcnkgZG9lcyBub3QgZXhpc3QgZm9yIHRoaXMgY291bnRyeSwKKwkJCQkJCS8vIGNyZWF0ZSBpdCB1c2luZyBJU08gYWxwaGEzIGNvZGUuCisJCQkJCQlGaWxlIGNvdW50cnlEaXIgPSBuZXcgRmlsZShvdXRwdXREaXIKKwkJCQkJCQkJKyBpc29Db2RlLmdldE5hbWUoKSk7CisKKwkJCQkJCWlmIChjb3VudHJ5RGlyICE9IG51bGwgJiYgY291bnRyeURpci5leGlzdHMoKSA9PSBmYWxzZSkgeworCQkJCQkJCS8vIERpcmVjdG9yeSBkb2VzIG5vdCBleGlzdC4gQ3JlYXRlIGl0LgorCQkJCQkJCWNvdW50cnlEaXIubWtkaXIoKTsKKwkJCQkJCX0KKworCQkJCQkJLy8gQ3JlYXRlIGFuZCBvcGVuIHRoZSBuZXcgb3V0cHV0IGZpbGUuCisJCQkJCQlpZiAoZGl2YUZpbGUgPT0gbnVsbCkgeworCQkJCQkJCS8vIENyZWF0ZSB0aGUgZmlsZSBuYW1lCisJCQkJCQkJZmlsZU5hbWUgPSBjb3VudHJ5RGlyICsgIlxcIiArIGlzb0NvZGUuZ2V0TmFtZSgpIC8vJE5PTi1OTFMtMSQKKwkJCQkJCQkJCSsgIi50eHQiOyAvLyROT04tTkxTLTEkCisKKwkJCQkJCQlVdGlsTG9nZ2VyLmxvZ0luZm9ybWF0aW9uKCJcdFx0RmlsZW5hbWUgID0gIiArIGZpbGVOYW1lKTsgLy8kTk9OLU5MUy0xJAorCisJCQkJCQkJLy8gQ3JlYXRlIHRuZSBuZXcgZmlsZQorCQkJCQkJCWRpdmFGaWxlID0gR2VuVXRpbHMub3BlbldyaXRlcihmaWxlTmFtZSk7CisJCQkJCQl9CisKKwkJCQkJCS8vIEFwcGx5IHRoZSBmb3JtYXR0aW5nIHRvIHRoZSBjdXJyZW50IGJ1ZmZlciA6IFVOCisJCQkJCQkvLyBSdXNzaWEgLT4gRGl2YSBmb3JtYXQKKwkJCQkJCVN0cmluZyBkaXZhTGluZSA9IGNvbnZlcnQyRGl2YShpc29Db2RlLCBpdGVtcyk7CisKKwkJCQkJCS8vIFdyaXRlIHRoZSBjb252ZXJ0ZWQgbGluZQorCQkJCQkJVXRpbExvZ2dlci5sb2dJbmZvcm1hdGlvbigiXHRcdERpdmEgc3RyaW5nID0gIiArIGRpdmFMaW5lKTsgLy8kTk9OLU5MUy0xJAorCQkJCQkJR2VuVXRpbHMuYWRkRGF0YShkaXZhRmlsZSwgZGl2YUxpbmUpOworCisJCQkJCX0vLyB3aGlsZQorCisJCQkJCS8vIFJlc2V0IElTTyBDb2RlCisJCQkJCWlzb0NvZGUgPSBudWxsOworCisJCQkJCS8vIFJlc2V0IGZpbGUgbmFtZQorCQkJCQlmaWxlTmFtZSA9IG51bGw7CisKKwkJCQkJLy8gQ2xvc2UgdGhlIHRhcmdldCBmaWxlLgorCQkJCQlkaXZhRmlsZS5jbG9zZSgpOworCQkJCQlkaXZhRmlsZSA9IG51bGw7CisKKwkJCQkJLy8gQ2xvc2UgYWxsIG9wZW4gcmVzb3VyY2VzLgorCQkJCQlyZWFkZXIuY2xvc2UoKTsKKworCQkJCQkvLyBSdW4gZ2FyYmFnZSBjb2xsZWN0aW9uCisJCQkJCS8vU3lzdGVtLmdjKCk7CisKKwkJCQl9CisKKwkJCX0gY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKKwkJCQllLnByaW50U3RhY2tUcmFjZSgpOworCQkJfQorCisJCX0gLy8gZm9yCisKKwl9CisKKwkvKioKKwkgKiBDb252ZXJ0IHRoZSBidWZmZXIgZ2l2ZW4gaW4gVU4gUnVzc2lhIGZvcm1hdCBpbnRvIERpdmEgZm9ybWF0CisJICogCisJICogQHBhcmFtIGlzb0NvZGUKKwkgKiAgICAgICAgICAgIElTTyAzMTY2LTEgY29kZQorCSAqIAorCSAqIEBwYXJhbSBkYXRhCisJICogICAgICAgICAgICBhIGJ1ZmZlciB3aXRoIGRhdGEgb24gVU4gUnVzc2lhIGZvcm1hdAorCSAqIAorCSAqIEByZXR1cm4gY29udmVydGVkIHN0cmluZworCSAqIAorCSAqLworCXB1YmxpYyBTdHJpbmcgY29udmVydDJEaXZhKElTT0NvZGUxIGlzb0NvZGUsIFN0cmluZ1tdIGRhdGEpIHsKKworCQkvLyBJRCxBUkVBLENPVU5UUllfQ09ERSxOQU1FMSxOQU1FMixOQU1FMyxQT1AxLFBPUDIsPC4uLnBvbHlnb24gZGF0YS4uLj4KKworCQkvLyAxLjAsMi45Nzg5OTk5RSswMixSVVMsVU5LTk9XTixVTktOT1dOLFVOS05PV04sMC4wLDAuMCw8Li4ucG9seWdvbgorCQkvLyBkYXRhLi4uPgorCisJCS8vIDxBTFBIQTMsQ09VTlRSWV9OQU1FLEFETUlOMSw8Li4ucG9seWdvbiBkYXRhLi4uPgorCisJCS8vIEFHTyxBbmdvbGEsTHVhbmRhLDwuLi5wb2x5Z29uIGRhdGEuLi4+CisKKwkJLy8gVGhlIGZvcm1hdHRlZCBwcmVmaXggc3RyaW5nCisJCVN0cmluZyBkaXZhU3RyaW5nID0gIiI7IC8vJE5PTi1OTFMtMSQKKworCQkvLyBHZXQgcmVsZXZhbnQgZGF0YSBmb3IgY29udmVyc2lvbi4KKwkJU3RyaW5nIGFscGhhMiA9IGlzb0NvZGUuZ2V0QWxwaGEyKCk7CisJCVN0cmluZyBhbHBoYTMgPSBpc29Db2RlLmdldEFscGhhMygpOworCisJCVN0cmluZyBsb2NhdGlvbl9uYW1lID0gbnVsbDsKKworCQlpZiAoZGF0YVtSdXNzaWFEYXRhRm9ybWF0dGluZ0hlYWRlci5OQU1FM10uZXF1YWxzKCJVTktOT1dOIikgfHwgZGF0YVtSdXNzaWFEYXRhRm9ybWF0dGluZ0hlYWRlci5OQU1FM10uZXF1YWxzKCJuLmEuIikpIHsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCisJCQkvLyBJZiB0aGlzIGlzIGFuIHVubmFtZWQgbG9jYXRpb24sIHRoZW4gd2UgdXNlIG91ciBjb252ZW5hdGlvbiBmb3IKKwkJCS8vIG5hbWluZyB1bm5hbWVkIGxvY2F0aW9ucyA6CisJCQkvLyA8QUxQSEEyX0NPREU+LVVOSy08VU5LTk9XTl9DT1VOVEVSX1ZBTFVFPgorCQkJbG9jYXRpb25fbmFtZSA9IGlzb0NvZGUuZ2V0QWxwaGEyKCkgKyAiLVVOSy0iIC8vJE5PTi1OTFMtMSQKKwkJCQkJKyBTdHJpbmcudmFsdWVPZih1bmtDb3VudGVyKyspOworCQl9IGVsc2UgeworCQkJLy8gVGhlIGxvY2F0aW9uIG5hbWUgaXMgYSBjb25jYXRlbmF0aW9uIG9mIHRoZSBsZXZlbCAyCisJCQkvLyBhZG1pbmlzdHJhdGlvbiAoTkFNRTMpIGFuZCB0aGUgbGV2ZWwgMSBjb250YWluZXIKKwkJCS8vIChOQU1FMikuIFdlIGlnbm9yZSB0aGUgbGV2ZWwgMCBjb250YWluZXIgKE5BTUUxKS4KKwkJCWxvY2F0aW9uX25hbWUgPSBkYXRhW1J1c3NpYURhdGFGb3JtYXR0aW5nSGVhZGVyLk5BTUUyXSArICI7IiAvLyROT04tTkxTLTEkCisJCQkJCSsgZGF0YVtSdXNzaWFEYXRhRm9ybWF0dGluZ0hlYWRlci5OQU1FM107CisJCX0KKworCQkvLyBGaW5kIHRoZSBjb3VudHJ5IG5hbWUgYmFzZWQgb24gdGhlIGFscGhhIDIgY29kZS4KKwkJU3RyaW5nIGNvdW50cnlfbmFtZSA9IEdlblV0aWxzLmdldENvdW50cnlOYW1lKGFscGhhMiwgY29kZUxpc3QpOworCisJCS8vIEdldCB0aGUgbnVtYmVyIG9mIGl0ZW1zIGluIHRoZSBidWZmZXIKKwkJaW50IGxlbmd0aCA9IGRhdGEubGVuZ3RoOworCisJCS8vIEFkZCBmaXhlZCBkYXRhIHdlIGFscmVhZHkgaGF2ZSBhdmFpbGFibGUgOgorCQlkaXZhU3RyaW5nID0gYWxwaGEzICsgIiwiICsgY291bnRyeV9uYW1lICsgIiwiICsgbG9jYXRpb25fbmFtZTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCisKKwkJLy8gQ29uY2F0ZW5hdGUgcG9seWdvbiBkYXRhIC0tIGlnbm9yZSB0aGUgZmlyc3QgZWlnaHQgaXRlbXMKKwkJLy8gd2hpY2ggYXJlIG5vbi1wb2x5Z29uIGRhdGEgOgorCQkvLyBJRCxBUkVBLENPVU5UUlksTkFNRTEsTkFNRTIsTkFNRTMsUE9QMSxQT1AyCisJCWZvciAoaW50IGkgPSA4OyBpIDwgbGVuZ3RoOyBpKyspIHsKKworCQkJZGl2YVN0cmluZyArPSAiLCIgKyBkYXRhW2ldOyAvLyROT04tTkxTLTEkCisKKwkJfSAvLyBmb3IKKworCQkvLyBGaW5hbGx5IGFkZCBhIG5ldyBsaW5lIHRvIHRoZSBzdHJpbmcuCisJCWRpdmFTdHJpbmcgKz0gIlxuIjsgLy8kTk9OLU5MUy0xJAorCisJCXJldHVybiBkaXZhU3RyaW5nOworCX0KKworCS8qKgorCSAqIE1haW4gZXhlY3V0aW9uIGVudHJ5IHBvaW50LgorCSAqIAorCSAqIEBwYXJhbSBhcmdzCisJICovCisJcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgeworCQkvLyBmaW5hbCBpbnQgSVNPXzMxNjZfMSA9IDA7CisJCS8vIGZpbmFsIGludCBUQVJHRVRfTElTVCA9IDE7CisJCS8vIGZpbmFsIGludCBPVVRQVVRfRElSID0gMjsKKwkJLy8gZmluYWwgaW50IFBBUkFNUyA9IDM7CisJCS8vCisJCS8vIGlmIChhcmdzLmxlbmd0aCA8IFBBUkFNUykgeworCQkvLyBVdGlsTG9nZ2VyLmxvZ0luZm9ybWF0aW9uKCItLVdyb25nIGFyZ3VtZW50cy0tIik7IC8vJE5PTi1OTFMtMSQKKwkJLy8gU3lzdGVtLm91dAorCQkvLyAucHJpbnRsbigiXHRUbyBydW4sIHBsZWFzZSBwcm92aWRlIHRoZSBmb2xsb3dpbmcgYXJndW1lbnRzIDogIik7CisJCS8vIC8vJE5PTi1OTFMtMSQKKwkJLy8gVXRpbExvZ2dlci5sb2dJbmZvcm1hdGlvbigiXHRcdCBJU08gMzE2Ni0xIGZpbGUiKTsgLy8kTk9OLU5MUy0xJAorCQkvLyBVdGlsTG9nZ2VyLmxvZ0luZm9ybWF0aW9uKCJcdFx0IFRhcmdldCBjb3VudHJpZXMgZmlsZSIpOyAvLyROT04tTkxTLTEkCisJCS8vIFV0aWxMb2dnZXIubG9nSW5mb3JtYXRpb24oIlx0XHQgT3V0cHV0IGRpcmVjdG9yeSIpOyAvLyROT04tTkxTLTEkCisJCS8vIHJldHVybjsKKwkJLy8gfQorCQkvLworCQkvLyBSdXNzaWFEYXRhQ29udmVydGVyIGNvbnZlcnRlciA9IG5ldyBSdXNzaWFEYXRhQ29udmVydGVyKAorCQkvLyBhcmdzW0lTT18zMTY2XzFdLCAvKiBhcmdzW1J1c3NpYV9OQU1FU10sICovYXJnc1tUQVJHRVRfTElTVF0sCisJCS8vIGFyZ3NbT1VUUFVUX0RJUl0pOworCQkvLyBjb252ZXJ0ZXIucnVuKCk7CisKKwkJZmluYWwgaW50IENPTkZJR19GSUxFID0gMDsKKwkJZmluYWwgaW50IFBBUkFNUyA9IDE7CisKKwkJaWYgKGFyZ3MubGVuZ3RoIDwgUEFSQU1TKSB7CisJCQlVdGlsTG9nZ2VyLmxvZ0luZm9ybWF0aW9uKCJcdFx0LS1Xcm9uZyBhcmd1bWVudHMtLSIpOyAvLyROT04tTkxTLTEkCisJCQlTeXN0ZW0ub3V0CisJCQkJCS5wcmludGxuKCJcdFx0VG8gcnVuLCBwbGVhc2UgcHJvdmlkZSB0aGUgZm9sbG93aW5nIGFyZ3VtZW50KHMpIDogIik7IC8vJE5PTi1OTFMtMSQKKwkJCVV0aWxMb2dnZXIubG9nSW5mb3JtYXRpb24oIlx0XHRcdCBDb25maWd1cmF0aW9uIGZpbGUiKTsgLy8kTk9OLU5MUy0xJAorCQkJU3lzdGVtLmV4aXQoMSk7CisJCX0KKworCQlSdXNzaWFEYXRhQ29udmVydGVyIGNvbnZlcnRlciA9IG5ldyBSdXNzaWFEYXRhQ29udmVydGVyKAorCQkJCWFyZ3NbQ09ORklHX0ZJTEVdKTsKKwkJY29udmVydGVyLnJ1bigpOworCX0KKworfQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdXRpbGl0eS9nZW5lcmF0b3JzL1J1c3NpYURhdGFFeHRyYWN0b3IuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3NyYy9vcmcvZWNsaXBzZS9zdGVtL3V0aWxpdHkvZ2VuZXJhdG9ycy9SdXNzaWFEYXRhRXh0cmFjdG9yLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTEyMTU2ZAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3NyYy9vcmcvZWNsaXBzZS9zdGVtL3V0aWxpdHkvZ2VuZXJhdG9ycy9SdXNzaWFEYXRhRXh0cmFjdG9yLmphdmEKQEAgLTAsMCArMSw0MTkgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5LmdlbmVyYXRvcnM7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDkgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgamF2YS5pby5CdWZmZXJlZFJlYWRlcjsKK2ltcG9ydCBqYXZhLmlvLkZpbGU7CitpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLmlvLlByaW50V3JpdGVyOworaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7CitpbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7CitpbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOworaW1wb3J0IGphdmEudXRpbC5MaXN0OworaW1wb3J0IGphdmEudXRpbC5TZXQ7CisKKy8qKgorICogVGhpcyBjbGFzcyB3aWxsIGV4dHJhY3QgYXJlYSBhbmQgcG9wdWxhdGlvbiBkYXRhIGZyb20gdGhlIFJ1c3NpYW4gVU4gZGF0YQorICogc291cmNlIGZpbGUgKFJ1c3NpYVNvcnRlZC50eHQpLiBJdCB3aWxsIGdlbmVyYXRlIGJvdGggYW5kIEFSRUEgYW5kIFBPUFVMQVRJT04KKyAqIGZpbGVzIHVuZGVyCisgKiBvcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHlcZGF0YU1pZ3JhdGlvblxpbnB1dFxBcmVhUG9wdWxhdGlvbkRhdGEuCisgKiAKKyAqIAorICogVG8gY29uZmlndXJlLCBzZWUgY29uZmlndXJhdGlvbiBmaWxlIDoKKyAqIG9yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9jb25maWd1cmF0aW9uL1J1c3NpYURhdGFFeHRyYWN0b3IuY29uZmlnCisgKiAKKyAqIAorICogVG8gcnVuLCBhZGQgcGF0aCB0byBjb25maWd1cmF0aW9uIGZpbGUgaW4gdGhlIHJ1biBwcm9maWxlIChpLmUuCisgKiBDOlxzdGVtSUlcb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5XGNvbmZpZ3VyYXRpb25cUnVzc2lhRGF0YUV4dHJhY3Rvci5jb25maWcpCisgKiAKKyAqIEYgQWRkIHRoZSBmb2xsb3dpbmcgdmFsdWVzIHRvIHRoZSBydW4gY29uZmlndXJhdGlvbjoKKyAqIAorICogQzpcc3RlbUlJXG9yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eVxkYXRhTWlncmF0aW9uXGlucHV0XElTTzMxNjYtMVxJU08zMTY2XzFfZW4udHh0CisgKiBDOlxzdGVtSUlcb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5XGRhdGFNaWdyYXRpb25caW5wdXRccHJvcGVydGllc1xFdXJvcGVDb3VudHJpZXMudHh0CisgKiBDOlxzdGVtSUlcb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5XGRhdGFNaWdyYXRpb25caW5wdXRcQXJlYVBvcHVsYXRpb25EYXRhXAorICogCisgKiBPdmVydmlldyBvZiB0aGUgZGF0YSBnZW5lcmF0aW9uIHByb2Nlc3MgZm9yIHRoZSBFdXJvcGUgZGF0YSBzZXQuICogT3ZlcnZpZXcKKyAqIG9mIHRoZSBkYXRhIGdlbmVyYXRpb24gcHJvY2VzcyBmb3IgdGhlIFJ1c3NpYSBkYXRhIHNldC4KKyAqIAorICogMSkgRGF0YSBDbGVhbmluZyA6IHN0YXJ0IGJ5IHJ1bm5pbmcgUnVzc2lhRGF0YUNsZWFuZXIuIFRoaXMgcHJvZ3JhbSB3aWxsCisgKiByZW1vdmUgYWxsIHVubmVjZXNhcnkgZGF0YSAoaS5lLiBjb2x1bW5zKSBpbiB0aGUgb3JpZ2luYWwgc291cmNlIGZpbGUuIEluCisgKiBhZGRpdGlvbiwgdGhpcyBwcm9ncmFtIHdpbGwgZ3JvdXAgdGhlIGRhdGEgYmFzZWQgb24gaXRzIElEIChpLmUuIE5PLElULEZSLFVLLAorICogZXRjKS4gVGhlIHJlc3VsdCB3aWxsIGJlIGEgZmlsZSBuYW1lZCBSdXNzaWFTb3J0ZWQudHh0IHdpdGggY2xlYW5lZCBkYXRhLgorICogCisgKiBJbiBvdGhlciB3b3JkcyA6IFJ1c3NpYS50eHQgLS0+IHx8UnVzc2lhRGF0YUNsZWFuZXJ8fCAtLT4gUnVzc2lhU29ydGVkLnR4dAorICogCisgKiBOT1RFOiBSdXNzaWFTb3J0ZWQudHh0IHdpbGwgYmUgdXNlZCBhcyB0aGUgaW5wdXQgZm9yIHRoZSByZW1haW5pbmcgcGFydCBvZgorICogdGhlIHByb2Nlc3MuCisgKiAKKyAqIAorICogMikgRGF0YSBDb252ZXJ0ZXIgOiBydW4gUnVzc2lhRGF0YUNvbnZlcnRlciB0byBjb252ZXJ0IGZpbGUgaW4gY2xlYW5lZCBmb3JtYXQKKyAqIGludG8gRGl2YSBmb3JtYXQuCisgKiAKKyAqIAorICogMykgQXJlYSBhbmQgUG9wdWxhdGlvbiBEYXRhIEV4dHJhY3Rpb24gOiBydW4gUnVzc2lhRGF0YUV4dHJhY3RvciB0byBleHRyYWN0CisgKiBhcmVhIGFuZCBwb3B1bGF0aW9uIGRhdGEgb2YgYWxsIFJ1c3NpYW4gYWRtaW5pc3RyYXRpb25zLgorICogCisgKiAKKyAqLworCitwdWJsaWMgY2xhc3MgUnVzc2lhRGF0YUV4dHJhY3RvciB7CisKKwkvKioKKwkgKiBPdXIgc291cmNlIGZpbGVzIGZvciBJU08gMzE2Ni0xIGNvZGVzIGFuZCBmb3IgdGhlIGxpc3Qgb2YgdGFyZ2V0CisJICogY291bnRyaWVzLgorCSAqLworCXByaXZhdGUgU3RyaW5nIGlzbzMxNjZfMSA9IG51bGw7CisKKwkvLyBwcml2YXRlIFN0cmluZyBuYW1lc0ZpbGUgPSBudWxsOworCisJcHJpdmF0ZSBTdHJpbmcgdGFyZ2V0RmlsZSA9IG51bGw7CisKKwlwcml2YXRlIFN0cmluZyBvdXRwdXREaXIgPSBudWxsOworCisJcHJpdmF0ZSBTdHJpbmcgd29ya3NwYWNlID0gbnVsbDsKKworCS8qKgorCSAqIExpc3QgZm9yIElTTyAzMTY2LTEgY29kZXMgYW5kIHRhcmdldCBjb3VudHJpZXMuCisJICovCisKKwlMaXN0IHRhcmdldExpc3QgPSBudWxsOworCisJTGlzdCBjb2RlTGlzdCA9IG51bGw7CisKKwlMaXN0IGRhdGFMaXN0ID0gbnVsbDsKKworCS8vIExpc3QgbmFtZXNMaXN0ID0gbnVsbDsKKworCS8qKgorCSAqIEFuIGluZGV4IHRvIGNvdW50IHRoZSBudW1iZXIgb2YgdW5uYW1lZCBlbnRyaWVzIGluIHRoZSBkYXRhIHNldC4KKwkgKi8KKwlpbnQgdW5rQ291bnRlciA9IDE7CisKKwkvKioKKwkgKiBDb25zdHJ1Y3RvcgorCSAqIAorCSAqIEBwYXJhbSBpc28zMTY2XzEgLQorCSAqICAgICAgICAgICAgZGF0YSBmaWxlIHdpdGggdGhlIElTTzMxNjYtMSBBTFBIQV8yIGFuZCBBTFBIQV8zIGNvZGVzLgorCSAqIEBwYXJhbSB0YXJnZXRGaWxlIC0KKwkgKiAgICAgICAgICAgIGRhdGEgZmlsZSB3aGVyZSB3ZSBmaW5kIGEgbGlzdCBvZiBjb3VudHJpZXMgZm9yIGdlbmVyYXRpb24gb2YKKwkgKiAgICAgICAgICAgIHRoZWlyIGNvcnJlc3BvbmRpbmcgYXJlYS5wcm9wZXJ0aWVzIGZpbGVzLgorCSAqIEBwYXJhbSBvdXRwdXREaXIgLQorCSAqICAgICAgICAgICAgdGhlIG91dHB1dCBkaXJlY3RvcnkgZm9yIHRoZSBmaWxlcyBnZW5lcmF0ZWQuCisJICogCisJICovCisJLy8gcHVibGljIFJ1c3NpYURhdGFFeHRyYWN0b3IoU3RyaW5nIGlzbzMxNjZfMSwvKiBTdHJpbmcgbmFtZXNGaWxlLCAqLworCS8vIFN0cmluZyB0YXJnZXRGaWxlLCBTdHJpbmcgb3V0cHV0RGlyKSB7CisJLy8gLy8gU2V0IHZhbHVlcyBvZiBnbG9iYWwgdmFyaWFibGVzLgorCS8vIHRoaXMuaXNvMzE2Nl8xID0gaXNvMzE2Nl8xOworCS8vIC8vIHRoaXMubmFtZXNGaWxlID0gbmFtZXNGaWxlOworCS8vIHRoaXMudGFyZ2V0RmlsZSA9IHRhcmdldEZpbGU7CisJLy8gdGhpcy5vdXRwdXREaXIgPSBvdXRwdXREaXI7CisJLy8gdGFyZ2V0TGlzdCA9IG51bGw7CisJLy8gfQorCS8qKgorCSAqIEBwYXJhbSBjb25maWdGaWxlCisJICovCisJcHVibGljIFJ1c3NpYURhdGFFeHRyYWN0b3IoU3RyaW5nIGNvbmZpZ0ZpbGUpIHsKKworCQkvLyBMb2FkIGFsbCBjb25maWd1cmF0aW9uIHZhcmlhYmxlcworCQlIYXNoTWFwPFN0cmluZywgU3RyaW5nPiB2YXJzID0gR2VuVXRpbHMubG9hZENvbmZpZ0ZpbGUoY29uZmlnRmlsZSk7CisKKwkJU2V0PFN0cmluZz4ga2V5cyA9IHZhcnMua2V5U2V0KCk7CisJCUl0ZXJhdG9yIGl0ID0ga2V5cy5pdGVyYXRvcigpOworCQl3aGlsZSAoaXQuaGFzTmV4dCgpKSB7CisJCQlTdHJpbmcgdmFyID0gKFN0cmluZykgaXQubmV4dCgpOworCisJCQkvLyBBc3NpZ24gdmFsdWVzIHRvIGNvbmZpZ3VyYXRpb24gdmFyaWFibGVzIDoKKwkJCWlmICh2YXIuZXF1YWxzKCJXT1JLU1BBQ0UiKSkgeyAvLyROT04tTkxTLTEkCisJCQkJd29ya3NwYWNlID0gdmFycy5nZXQodmFyKTsKKwkJCX0gZWxzZSBpZiAodmFyLmVxdWFscygiSVNPMzE2Nl8xIikpIHsgLy8kTk9OLU5MUy0xJAorCQkJCWlzbzMxNjZfMSA9IHZhcnMuZ2V0KHZhcik7CisJCQl9IGVsc2UgaWYgKHZhci5lcXVhbHMoIlRBUkdFVF9MSVNUIikpIHsgLy8kTk9OLU5MUy0xJAorCQkJCXRhcmdldEZpbGUgPSB2YXJzLmdldCh2YXIpOworCQkJfSBlbHNlIGlmICh2YXIuZXF1YWxzKCJPVVRQVVQiKSkgeyAvLyROT04tTkxTLTEkCisJCQkJb3V0cHV0RGlyID0gdmFycy5nZXQodmFyKTsKKwkJCX0KKworCQl9IC8vIHdoaWxlCisKKwkJLy8gVGhlIHdvcmtzcGFjZSB2YXJpYWJsZSBzaG91bGQgZW5kIHdpdGggYSBzbGFzaCBjaGFyYWN0ZXIKKwkJaWYgKHdvcmtzcGFjZS5lbmRzV2l0aCgiXFwiKSA9PSBmYWxzZSkgeyAvLyROT04tTkxTLTEkCisJCQl3b3Jrc3BhY2UgKz0gIlxcIjsgLy8kTk9OLU5MUy0xJAorCQl9CisKKwkJU3RyaW5nIHBhdGggPSB3b3Jrc3BhY2UgKyBHZW5Db25zdGFudHMuUEFSQU1TX0RJUjsKKworCQkvLyBTZXQgcmVtYWluaW5nIGNvbmZpZyB2YXJzIHVzaW5nIFdPUktTUEFDRSAod29ya3NwYWNlIHJlbGF0aXZlKQorCQlpZiAoaXNvMzE2Nl8xID09IG51bGwpIHsKKwkJCWlzbzMxNjZfMSA9IHBhdGggKyBHZW5Db25zdGFudHMuSVNPMzE2Nl8xX0ZJTEU7CisJCX0KKwkJaWYgKHRhcmdldEZpbGUgPT0gbnVsbCkgeworCQkJdGFyZ2V0RmlsZSA9IHBhdGggKyBHZW5Db25zdGFudHMuRVVST1BFX0NPVU5UUklFUzsKKwkJfQorCQlpZiAob3V0cHV0RGlyID09IG51bGwpIHsKKwkJCW91dHB1dERpciA9IEdlbkNvbnN0YW50cy5EVU1NWV9ESVI7CisJCX0KKworCQl0YXJnZXRMaXN0ID0gbnVsbDsKKworCX0KKworCS8qKgorCSAqIFRoaXMgbWV0aG9kIHNldHMgdXAgYW5kIHJ1bnMgdGhpcyBnZW5lcmF0b3IuCisJICogCisJICovCisJcHVibGljIHZvaWQgcnVuKCkgeworCQkvLyBSZWFkIGFuZCBrZWVwIGluIG1lbW9yeSBhIGxpc3Qgb2YgdGhlIGNvdW50cmllcyB3ZSB3YW50LgorCQl0YXJnZXRMaXN0ID0gR2VuVXRpbHMucG9wdWxhdGVMaXN0KHRhcmdldEZpbGUpOworCisJCS8vIFJlYWQgYW5kIGtlZXAgaW4gbWVtb3J5IGEgbGlzdCBvZiB0aGUgSVNPMzE2Ni0xIEFMUEhBMiwgQUxQSEEzLCBhbmQKKwkJLy8gbnVtZXJpYyBjb2Rlcy4KKwkJY29kZUxpc3QgPSBHZW5VdGlscy5wb3B1bGF0ZUxpc3QoaXNvMzE2Nl8xKTsKKworCQkvLyBMb2FkIGFsbCBsZXZlbCAxIG5hbWVzIGZvciBFdXJvcGUuCisJCS8vIG5hbWVzTGlzdCA9IEdlblV0aWxzLnBvcHVsYXRlTGlzdChuYW1lc0ZpbGUpOworCisJCS8vIFJ1biB0aGUgY29udmVydGVyOiBVTiBFdXJvcGUgLT4gRGl2YSBzZXQgZm9ybWF0CisJCXByb2Nlc3MoKTsKKwl9CisKKwkvKioKKwkgKiAKKwkgKiBHZW5lcmF0ZSBhcmVhIGFuZCBwb3B1bGF0aW9uIGZpbGVzIGZyb20gZGF0YSBleHRyYWN0ZWQgZnJvbQorCSAqIEV1cm9wZVNvcnRlZC50eHQgVGhlIGFyZWEgYW5kIHBvcHVsYXRpb24gZmlsZXMgd2lsbCBiZSB1c2VkIGJ5IHRoZQorCSAqIGdlbmVyYXRvcnMgdG8gcHJvZHVjZSB0aGUgcHJvcGVydHkgZmlsZXMuCisJICogCisJICovCisJcHJvdGVjdGVkIHZvaWQgcHJvY2VzcygpIHsKKworCQlBcnJheUxpc3Q8U3RyaW5nPiByZXBlYXRlZCA9IG5ldyBBcnJheUxpc3Q8U3RyaW5nPigpOworCisJCS8vIEEgd3JpdGVyIGZvciB0aGUgbmV3IGZpbGUgd2UgYXJlIGNyZWF0aW5nLgorCQlQcmludFdyaXRlciBhcmVhRmlsZSA9IG51bGw7CisJCVByaW50V3JpdGVyIHBvcEZpbGUgPSBudWxsOworCisJCS8vIE9iamVjdCBob2xkaW5nIElTTzMxNjYtMSByZWxhdGVkIGRhdGEuCisJCUlTT0NvZGUxIGlzb0NvZGUgPSBudWxsOworCisJCS8vIE5hbWUgb2YgdGhlIG5ldyBwcm9wZXJ0aWVzIGZpbGUuCisJCVN0cmluZyBmaWxlTmFtZSA9IG51bGw7CisKKwkJaW50IHNpemUgPSB0YXJnZXRMaXN0LnNpemUoKTsKKworCQkvLyBGb3IgZXZlcnkgY291bnRyeQorCQlmb3IgKGludCBpID0gMDsgaSA8IHNpemU7IGkrKykgeworCisJCQkvLyBHZXQgdGhlIG5leHQgZmlsZSBpbiB0aGUgbGlzdC4KKwkJCVN0cmluZyBmaWxlID0gKChTdHJpbmcpIHRhcmdldExpc3QuZ2V0KGkpKS50cmltKCk7CisKKwkJCS8vIE9wZW4gdGhlIGRhdGEgc291cmNlIGZpbGUgZm9yIHRoaXMgY291bnRyeS4KKwkJCUJ1ZmZlcmVkUmVhZGVyIHJlYWRlciA9IEdlblV0aWxzLm9wZW5SZWFkZXIoZmlsZSk7CisJCQlTeXN0ZW0ub3V0CisJCQkJCS5wcmludGxuKCJcdFx0PDw8PCBSVVNTSUEgREFUQSBFWFRSQUNUT1IgLS0gUHJvY2Vzc2luZyBDb3VudHJ5IDogIiArIGZpbGUgKyAiID4+Pj4iKTsgLy8kTk9OLU5MUy0xJCAgLy8kTk9OLU5MUy0yJAorCisJCQl0cnkgeworCisJCQkJaWYgKHJlYWRlciAhPSBudWxsKSB7CisKKwkJCQkJU3RyaW5nIGJ1ZmZlciA9IG51bGw7CisKKwkJCQkJLy8gV2UgdGFrZSBhIGNodW5rIG9mIHRoZSBkYXRhIFtCVUZGRVJfTUlOLEJVRkZFUl9NQVhdIHRvCisJCQkJCS8vIG1ha2UgcHJvY2Vzc2luZyBtb3JlCisJCQkJCS8vIGVmZmljaWVudCwgd2UgZG9udCBuZWVkIGFsbCBvZiBpdC4KKwkJCQkJaW50IEJVRkZFUl9NSU4gPSAwOworCQkJCQlpbnQgQlVGRkVSX01BWCA9IDIwMDsKKworCQkJCQl3aGlsZSAoR2VuVXRpbHMuRU9GKGJ1ZmZlciA9IHJlYWRlci5yZWFkTGluZSgpKSAhPSB0cnVlKSB7CisKKwkJCQkJCS8vIE1ha2Ugc3VyZSB0aGF0IHdlIG1hcmsgYWxsIHVua25vd24gZGF0YS4KKwkJCQkJCWJ1ZmZlciA9IGJ1ZmZlci5yZXBsYWNlKCIsLCIsICIsVU5LTk9XTiwiKTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCisKKwkJCQkJCS8vIFVzZSBvbmx5IHBhcnQgb2YgdGhlIGJ1ZmZlciwgbm90IGFsbCBvZiBpdCBmb3IKKwkJCQkJCS8vIGVmZmljaWVuY3kuCisJCQkJCQlpbnQgbWF4ID0gKGJ1ZmZlci5sZW5ndGgoKSA+IEJVRkZFUl9NQVgpID8gQlVGRkVSX01BWAorCQkJCQkJCQk6IGJ1ZmZlci5sZW5ndGgoKTsKKwkJCQkJCVN0cmluZ1tdIGl0ZW1zID0gYnVmZmVyLnN1YnN0cmluZyhCVUZGRVJfTUlOLCBtYXgpCisJCQkJCQkJCS5zcGxpdCgiLCIpOyAvLyROT04tTkxTLTEkCisKKwkJCQkJCS8vIEdldCB0aGUgSVNPMzE2Ni0xIGluZm8gZm9yIHRoaXMgY291bnRyeQorCQkJCQkJaWYgKGlzb0NvZGUgPT0gbnVsbCkgeworCQkJCQkJCVN0cmluZyBjb3VudHJ5ID0gR2VuVXRpbHMuZ2V0Q291bnRyeU5hbWUoCisJCQkJCQkJCQlpdGVtc1tSdXNzaWFEYXRhRm9ybWF0dGluZ0hlYWRlci5DT1VOVFJZXQorCQkJCQkJCQkJCQkuc3Vic3RyaW5nKDAsIDIpLCBjb2RlTGlzdCk7CisJCQkJCQkJaXNvQ29kZSA9IEdlblV0aWxzLmdldElTT0NvZGUoY291bnRyeSwgY29kZUxpc3QpOworCQkJCQkJfQorCisJCQkJCQkvLyBJZiB0aGUgZGlyZWN0b3J5IGRvZXMgbm90IGV4aXN0IGZvciB0aGlzIGNvdW50cnksCisJCQkJCQkvLyBjcmVhdGUgaXQgdXNpbmcgSVNPIGFscGhhMyBjb2RlLgorCQkJCQkJRmlsZSBjb3VudHJ5RGlyID0gbmV3IEZpbGUob3V0cHV0RGlyKTsKKworCQkJCQkJaWYgKGNvdW50cnlEaXIgIT0gbnVsbCAmJiBjb3VudHJ5RGlyLmV4aXN0cygpID09IGZhbHNlKSB7CisJCQkJCQkJLy8gRGlyZWN0b3J5IGRvZXMgbm90IGV4aXN0LiBDcmVhdGUgaXQuCisJCQkJCQkJY291bnRyeURpci5ta2RpcigpOworCQkJCQkJfQorCisJCQkJCQkvLyBDcmVhdGUgYW5kIG9wZW4gYSBuZXcgYXJlYSBmaWxlLgorCQkJCQkJaWYgKGFyZWFGaWxlID09IG51bGwpIHsKKwkJCQkJCQkvLyBDcmVhdGUgdGhlIGZpbGUgbmFtZQorCQkJCQkJCWZpbGVOYW1lID0gY291bnRyeURpciArICJcXCIgKyBpc29Db2RlLmdldE5hbWUoKSAvLyROT04tTkxTLTEkCisJCQkJCQkJCQkrICJfQVJFQS50eHQiOyAvLyROT04tTkxTLTEkCisKKwkJCQkJCQkvLyBDcmVhdGUgdG5lIG5ldyBmaWxlCisJCQkJCQkJYXJlYUZpbGUgPSBHZW5VdGlscy5vcGVuV3JpdGVyKGZpbGVOYW1lKTsKKwkJCQkJCX0KKworCQkJCQkJLy8gU2ltaWxhcmx5LCBjcmVhdGUgYW5kIG9wZW4gYSBuZXcgcG9wdWxhdGlvbiBmaWxlLgorCQkJCQkJaWYgKHBvcEZpbGUgPT0gbnVsbCkgeworCQkJCQkJCS8vIENyZWF0ZSB0aGUgZmlsZSBuYW1lCisJCQkJCQkJZmlsZU5hbWUgPSBjb3VudHJ5RGlyICsgIlxcIiArIGlzb0NvZGUuZ2V0TmFtZSgpIC8vJE5PTi1OTFMtMSQKKwkJCQkJCQkJCSsgIl9QT1BVTEFUSU9OLnR4dCI7IC8vJE5PTi1OTFMtMSQKKworCQkJCQkJCS8vIENyZWF0ZSB0bmUgbmV3IGZpbGUKKwkJCQkJCQlwb3BGaWxlID0gR2VuVXRpbHMub3BlbldyaXRlcihmaWxlTmFtZSk7CisJCQkJCQl9CisKKwkJCQkJCS8vIEdldCByZWxldmFudCBkYXRhIGZvciBjb252ZXJzaW9uLgorCisJCQkJCQkvLyBFeHRyYWN0IGFyZWEgdmFsdWUKKwkJCQkJCVN0cmluZyBhcmVhID0gaXRlbXNbUnVzc2lhRGF0YUZvcm1hdHRpbmdIZWFkZXIuQVJFQV07CisKKwkJCQkJCS8vIEV4dHJhY3QgcG9wdWxhdGlvbiB2YWx1ZQorCQkJCQkJU3RyaW5nIHBvcDEgPSBpdGVtc1tSdXNzaWFEYXRhRm9ybWF0dGluZ0hlYWRlci5QT1AxXTsKKwkJCQkJCVN0cmluZyBwb3AyID0gaXRlbXNbUnVzc2lhRGF0YUZvcm1hdHRpbmdIZWFkZXIuUE9QMl07CisKKwkJCQkJCS8vIEV4dHJhY3QgbG9jYXRpb24gaW5mb3JtYXRpb24KKwkJCQkJCVN0cmluZyBuYW1lMiA9IGl0ZW1zW1J1c3NpYURhdGFGb3JtYXR0aW5nSGVhZGVyLk5BTUUyXTsKKwkJCQkJCVN0cmluZyBuYW1lMyA9IGl0ZW1zW1J1c3NpYURhdGFGb3JtYXR0aW5nSGVhZGVyLk5BTUUzXTsKKworCQkJCQkJU3RyaW5nIGxvY2F0aW9uX25hbWUgPSBudWxsOworCisJCQkJCQlpZiAobmFtZTMuZXF1YWxzKCJVTktOT1dOIikgfHwgbmFtZTMuZXF1YWxzKCJuLmEuIikpIHsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCisJCQkJCQkJLy8gSWYgdGhpcyBpcyBhbiB1bm5hbWVkIGxvY2F0aW9uLCB0aGVuIHdlIHVzZSBvdXIKKwkJCQkJCQkvLyBjb252ZW5hdGlvbiBmb3IKKwkJCQkJCQkvLyBuYW1pbmcgdW5uYW1lZCBsb2NhdGlvbnMgOgorCQkJCQkJCS8vIDxBTFBIQTJfQ09ERT4tVU5LLTxVTktOT1dOX0NPVU5URVJfVkFMVUU+CisJCQkJCQkJbG9jYXRpb25fbmFtZSA9IGlzb0NvZGUuZ2V0QWxwaGEyKCkgKyAiLVVOSy0iIC8vJE5PTi1OTFMtMSQKKwkJCQkJCQkJCSsgU3RyaW5nLnZhbHVlT2YodW5rQ291bnRlcisrKTsKKwkJCQkJCX0gZWxzZSB7CisJCQkJCQkJLy8gVGhlIGxvY2F0aW9uIG5hbWUgaXMgYSBjb25jYXRlbmF0aW9uIG9mIGxldmVsIDIKKwkJCQkJCQkvLyBhZG1pbmlzdHJhdGlvbiAoTkFNRTMpIGFuZCB0aGUgbGV2ZWwgMSBjb250YWluZXIKKwkJCQkJCQkvLyAoTkFNRTIpLiBXZSBpZ25vcmUgdGhlIGxldmVsIDAgY29udGFpbmVyIChOQU1FMSkuCisJCQkJCQkJbG9jYXRpb25fbmFtZSA9IG5hbWUyICsgIjsiICsgbmFtZTM7IC8vJE5PTi1OTFMtMSQKKwkJCQkJCX0KKworCQkJCQkJaWYgKHJlcGVhdGVkLmNvbnRhaW5zKGxvY2F0aW9uX25hbWUpKSB7CisJCQkJCQkJY29udGludWU7CisJCQkJCQl9CisJCQkJCQkvLyByZW1lbWJlciB0aGlzIGVsZW1lbnQKKwkJCQkJCXJlcGVhdGVkLmFkZChsb2NhdGlvbl9uYW1lKTsKKworCQkJCQkJU3RyaW5nIHBvcCA9IG51bGw7CisKKwkJCQkJCS8vIEdldCBmaXJzdCB0aGUgZXN0aW1hdGVkIHZhbHVlIGFuZCBpZiBpdCBpcyB6ZXJvLCB0aGVuCisJCQkJCQkvLyBnZXQgdGhlIHJlYWwgcG9wdWxhdGlvbiB2YWx1ZSBmb3IgUnVzc2lhLgorCQkJCQkJcG9wID0gcG9wMTsKKworCQkJCQkJaWYgKERvdWJsZS5wYXJzZURvdWJsZShwb3ApID09IDAuMCkgeworCQkJCQkJCXBvcCA9IHBvcDI7CisJCQkJCQl9CisKKwkJCQkJCWlmIChEb3VibGUucGFyc2VEb3VibGUocG9wKSA8PSAwLjApIHsKKwkJCQkJCQlTeXN0ZW0ub3V0CisJCQkJCQkJCQkucHJpbnRsbigiXHRcdFBvcHVsYXRpb24gaXMgemVybyBmb3IgbG9jYXRpb24gOiAiIC8vJE5PTi1OTFMtMSQKKwkJCQkJCQkJCQkJKyBsb2NhdGlvbl9uYW1lKTsKKwkJCQkJCX0KKworCQkJCQkJaWYgKERvdWJsZS52YWx1ZU9mKGFyZWEpIDwgMS4wKSB7CisJCQkJCQkJYXJlYSA9ICIxLjAiOyAvLyROT04tTkxTLTEkCisJCQkJCQl9CisKKwkJCQkJCS8vIFdyaXRlIGFyZWEgdmFsdWUKKwkJCQkJCUdlblV0aWxzLmFkZERhdGEoYXJlYUZpbGUsIGxvY2F0aW9uX25hbWUgKyAiIDogMSA6ICIgLy8kTk9OLU5MUy0xJAorCQkJCQkJCQkrIERvdWJsZS52YWx1ZU9mKGFyZWEpICsgIlxuIik7IC8vJE5PTi1OTFMtMSQKKworCQkJCQkJLy8gV3JpdGUgcG9wdWxhdGlvbiB2YWx1ZQorCQkJCQkJR2VuVXRpbHMuYWRkRGF0YShwb3BGaWxlLCBsb2NhdGlvbl9uYW1lICsgIiA6IDEgOiAiIC8vJE5PTi1OTFMtMSQKKwkJCQkJCQkJKyBEb3VibGUudmFsdWVPZihwb3ApLmludFZhbHVlKCkgKyAiXG4iKTsgLy8kTk9OLU5MUy0xJAorCisJCQkJCX0vLyB3aGlsZQorCisJCQkJCS8vIFJlc2V0IElTTyBDb2RlCisJCQkJCWlzb0NvZGUgPSBudWxsOworCisJCQkJCS8vIFJlc2V0IGZpbGUgbmFtZQorCQkJCQlmaWxlTmFtZSA9IG51bGw7CisKKwkJCQkJLy8gQ2xvc2UgdGhlIHRhcmdldCBmaWxlcy4KKwkJCQkJYXJlYUZpbGUuY2xvc2UoKTsKKwkJCQkJYXJlYUZpbGUgPSBudWxsOworCQkJCQlwb3BGaWxlLmNsb3NlKCk7CisJCQkJCXBvcEZpbGUgPSBudWxsOworCisJCQkJCS8vIENsb3NlIGFsbCBvcGVuIHJlc291cmNlcy4KKwkJCQkJcmVhZGVyLmNsb3NlKCk7CisKKwkJCQkJLy8gUnVuIGdhcmJhZ2UgY29sbGVjdGlvbgorCQkJCQkvL1N5c3RlbS5nYygpOworCisJCQkJfQorCisJCQl9IGNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7CisJCQkJZS5wcmludFN0YWNrVHJhY2UoKTsKKwkJCX0KKworCQl9IC8vIGZvcgorCisJfQorCisJLyoqCisJICogTWFpbiBleGVjdXRpb24gZW50cnkgcG9pbnQuCisJICogCisJICogQHBhcmFtIGFyZ3MKKwkgKi8KKwlwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CisJCS8vIGZpbmFsIGludCBJU09fMzE2Nl8xID0gMDsKKwkJLy8gZmluYWwgaW50IFRBUkdFVF9MSVNUID0gMTsKKwkJLy8gZmluYWwgaW50IE9VVFBVVF9ESVIgPSAyOworCQkvLyBmaW5hbCBpbnQgUEFSQU1TID0gMzsKKwkJLy8KKwkJLy8gaWYgKGFyZ3MubGVuZ3RoIDwgUEFSQU1TKSB7CisJCS8vIFV0aWxMb2dnZXIubG9nSW5mb3JtYXRpb24oIi0tV3JvbmcgYXJndW1lbnRzLS0iKTsgLy8kTk9OLU5MUy0xJAorCQkvLyBTeXN0ZW0ub3V0CisJCS8vIC5wcmludGxuKCJcdFRvIHJ1biwgcGxlYXNlIHByb3ZpZGUgdGhlIGZvbGxvd2luZyBhcmd1bWVudHMgOiAiKTsKKwkJLy8gLy8kTk9OLU5MUy0xJAorCQkvLyBVdGlsTG9nZ2VyLmxvZ0luZm9ybWF0aW9uKCJcdFx0IElTTyAzMTY2LTEgZmlsZSIpOyAvLyROT04tTkxTLTEkCisJCS8vIFV0aWxMb2dnZXIubG9nSW5mb3JtYXRpb24oIlx0XHQgVGFyZ2V0IGNvdW50cmllcyBmaWxlIik7IC8vJE5PTi1OTFMtMSQKKwkJLy8gVXRpbExvZ2dlci5sb2dJbmZvcm1hdGlvbigiXHRcdCBPdXRwdXQgZGlyZWN0b3J5Iik7IC8vJE5PTi1OTFMtMSQKKwkJLy8gcmV0dXJuOworCQkvLyB9CisKKwkJLy8gUnVzc2lhRGF0YUV4dHJhY3RvciBjb252ZXJ0ZXIgPSBuZXcgUnVzc2lhRGF0YUV4dHJhY3RvcigKKwkJLy8gYXJnc1tJU09fMzE2Nl8xXSwgYXJnc1tUQVJHRVRfTElTVF0sIGFyZ3NbT1VUUFVUX0RJUl0pOworCQkvLyBjb252ZXJ0ZXIucnVuKCk7CisKKwkJZmluYWwgaW50IENPTkZJR19GSUxFID0gMDsKKwkJZmluYWwgaW50IFBBUkFNUyA9IDE7CisKKwkJaWYgKGFyZ3MubGVuZ3RoIDwgUEFSQU1TKSB7CisJCQlVdGlsTG9nZ2VyLmxvZ0luZm9ybWF0aW9uKCJcdFx0LS1Xcm9uZyBhcmd1bWVudHMtLSIpOyAvLyROT04tTkxTLTEkCisJCQlTeXN0ZW0ub3V0CisJCQkJCS5wcmludGxuKCJcdFx0VG8gcnVuLCBwbGVhc2UgcHJvdmlkZSB0aGUgZm9sbG93aW5nIGFyZ3VtZW50KHMpIDogIik7IC8vJE5PTi1OTFMtMSQKKwkJCVV0aWxMb2dnZXIubG9nSW5mb3JtYXRpb24oIlx0XHRcdCBDb25maWd1cmF0aW9uIGZpbGUiKTsgLy8kTk9OLU5MUy0xJAorCQkJU3lzdGVtLmV4aXQoMSk7CisJCX0KKworCQlSdXNzaWFEYXRhRXh0cmFjdG9yIGV4dHJhY3RvciA9IG5ldyBSdXNzaWFEYXRhRXh0cmFjdG9yKAorCQkJCWFyZ3NbQ09ORklHX0ZJTEVdKTsKKwkJZXh0cmFjdG9yLnJ1bigpOworCX0KKworfQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdXRpbGl0eS9nZW5lcmF0b3JzL1J1c3NpYURhdGFGb3JtYXR0aW5nSGVhZGVyLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91dGlsaXR5L2dlbmVyYXRvcnMvUnVzc2lhRGF0YUZvcm1hdHRpbmdIZWFkZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NDI2ZjI0Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdXRpbGl0eS9nZW5lcmF0b3JzL1J1c3NpYURhdGFGb3JtYXR0aW5nSGVhZGVyLmphdmEKQEAgLTAsMCArMSw2MiBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkuZ2VuZXJhdG9yczsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKgorICogCisgKiBSZWxldmFudCBrZXlzIHRvIHRoZSBSdXNzaWFuIGRhdGFzZXQuIFVzZWQgZHVyaW5nIGNvbnZlcnNpb24gcHJvY2VzcyBmcm9tIHRoZQorICogUnVzc2lhbiBVTiBmb3JtYXQgLT4gRGl2YSBmb3JtYXQuCisgKiAKKyAqLworcHVibGljIGFic3RyYWN0IGNsYXNzIFJ1c3NpYURhdGFGb3JtYXR0aW5nSGVhZGVyIHsKKworCS8qKgorCSAqIE51bWVyaWMgSUQKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIGludCBJRCA9IDA7CisKKwkvKioKKwkgKiBBcmVhCisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgQVJFQSA9IDE7CisKKwkvKioKKwkgKiBDb3VudHJ5IG5hbWUKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIGludCBDT1VOVFJZID0gMjsKKworCS8qKgorCSAqIExvY2F0aW9uIE5hbWUgMQorCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IE5BTUUxID0gMzsKKworCS8qKgorCSAqIExvY2F0aW9uIE5hbWUgMgorCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IE5BTUUyID0gNDsKKworCS8qKgorCSAqIExvY2F0aW9uIE5hbWUgMworCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IE5BTUUzID0gNTsKKworCS8qKgorCSAqIFBvcHVsYXRpb24gdmFsdWUgMQorCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFBPUDEgPSA2OworCisJLyoqCisJICogUG9wdWxhdGlvbiB2YWx1ZSAyCisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgUE9QMiA9IDc7CisKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91dGlsaXR5L2dlbmVyYXRvcnMvU1RFTVBvbHlnb24uamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3NyYy9vcmcvZWNsaXBzZS9zdGVtL3V0aWxpdHkvZ2VuZXJhdG9ycy9TVEVNUG9seWdvbi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE2ODIzODUKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91dGlsaXR5L2dlbmVyYXRvcnMvU1RFTVBvbHlnb24uamF2YQpAQCAtMCwwICsxLDQzMCBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkuZ2VuZXJhdG9yczsKKworaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7CitpbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOworaW1wb3J0IGphdmEudXRpbC5MaXN0OworaW1wb3J0IGphdmEudXRpbC5TdHJpbmdUb2tlbml6ZXI7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioKKyAqIFNURU0gSUkgRGF0YSBNaWdyYXRpb24vR2VuZXJhdGlvbiBVdGlsaXRpZXMgOiBJbnN0YW5jZXMgb2YgdGhpcyB1dGlsaXR5IGNsYXNzCisgKiBhcmUgYSBhIGhvbGRlciBmb3IgcG9seWdvbiBkYXRhLiBJdCBpcyB1c2VkIGluIGNoZWNraW5ncyBmb3IgZHVwbGljYXRlIG9yCisgKiBub24tcG9seWdvbiBkYXRhCisgKiAKKyAqLworCitwdWJsaWMgY2xhc3MgU1RFTVBvbHlnb24geworCisJcHJpdmF0ZSBMaXN0PFBvaW50RGF0YT4gbGlzdCA9IG5ldyBBcnJheUxpc3Q8UG9pbnREYXRhPigpOworCisJcHJpdmF0ZSBTdHJpbmcgX2RhdGEgPSBudWxsOworCisJcHJpdmF0ZSBpbnQgX2xldmVsID0gLTE7CisKKwlwcml2YXRlIFBvaW50RGF0YSBpbml0ID0gbnVsbDsKKworCXByaXZhdGUgUG9pbnREYXRhIGxhc3QgPSBudWxsOworCisJcHJpdmF0ZSBEb3VibGUgbHRQb2ludHNbXSA9IG51bGw7CisKKwlwcml2YXRlIERvdWJsZSBsZ1BvaW50c1tdID0gbnVsbDsKKworCS8qKgorCSAqIENvbnN0cnVjdG9yCisJICogCisJICogQHBhcmFtIGRhdGEKKwkgKiAgICAgICAgICAgIHJhdyBwb2x5Z29uIGRhdGEgKGx0LCBsZykgdmFsdWVzCisJICogQHBhcmFtIGxldmVsCisJICogICAgICAgICAgICB0aGUgYWRtaW4gbGV2ZWwgZm9yIHRoaXMgZGF0YQorCSAqLworCXB1YmxpYyBTVEVNUG9seWdvbihTdHJpbmcgZGF0YSwgaW50IGxldmVsKSB7CisJCV9kYXRhID0gZGF0YTsKKwkJX2xldmVsID0gbGV2ZWw7CisJCWV4dHJhY3RMdExnRGF0YSgpOworCQlsdFBvaW50cyA9IG5ldyBEb3VibGVbbGlzdC5zaXplKCldOworCQlsZ1BvaW50cyA9IG5ldyBEb3VibGVbbGlzdC5zaXplKCldOworCQkvLyBDbGVhciB0aGUgZGF0YSBidWZmZXIgdG8gYmUgbW9yZSBtZW1vcnktZWZmaWNpZW50CisJCV9kYXRhID0gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBHZXQgdGhlIG51bWJlciBvZiBwb2ludHMgaW4gYSBwb2x5Z29uLgorCSAqIAorCSAqIEByZXR1cm4gdGhlIG51bWJlciBvZiBwb2ludHMgaW4gYSBnaXZlbiBwb2x5Z29uLgorCSAqLworCXB1YmxpYyBpbnQgcG9pbnRzKCkgeworCQlyZXR1cm4gbGlzdC5zaXplKCk7CisJfQorCisJLyoqCisJICogQ2xlYXIgdGhpcyBwb2x5Z29uCisJICovCisJdm9pZCBjbGVhcigpIHsKKwkJbGlzdC5jbGVhcigpOworCQlsZ1BvaW50cyA9IG51bGw7CisJCWx0UG9pbnRzID0gbnVsbDsKKwkJaW5pdCA9IG51bGw7CisJCWxhc3QgPSBudWxsOworCX0KKworCS8qKgorCSAqIENvbnZlcnQgdGhlIHZhbHVlIG9mIHN0cmluZyB0byBhIGRvdWJsZQorCSAqIAorCSAqIEBwYXJhbSBzdHIKKwkgKiAgICAgICAgICAgIHRoZSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgYSBkb3VibGUuCisJICogCisJICogQHJldHVybiBkb3VibGUgdmFsdWUgZXh0cmFjdGVkIGZyb20gbnVtZXJpYyBzdHJpbmcKKwkgKi8KKwlwcm90ZWN0ZWQgZG91YmxlIGdldERvdWJsZShTdHJpbmcgc3RyKSB7CisJCURvdWJsZSBob2xkZXIgPSBuZXcgRG91YmxlKHN0cik7CisJCXJldHVybiBob2xkZXIuZG91YmxlVmFsdWUoKTsKKwl9CisKKwkvKioKKwkgKiBUZXN0IGlmIHRoZSBzdHJpbmcgY29udGFpbnMgYSBudW1iZXIKKwkgKiAKKwkgKiBAcGFyYW0gc3RyCisJICogICAgICAgICAgICB0aGUgdmFsdWUgd2Ugd2FudCB0byB0ZXN0CisJICogCisJICogQHJldHVybiB0cnVlIGlmIHRoaXMgdmFsdWUgaXMgbnVtZXJpYworCSAqLworCXByb3RlY3RlZCBib29sZWFuIGlzTnVtZXJpYyhTdHJpbmcgc3RyKSB7CisKKwkJdHJ5IHsKKwkJCURvdWJsZS52YWx1ZU9mKHN0cik7CisJCX0gY2F0Y2ggKE51bWJlckZvcm1hdEV4Y2VwdGlvbiBlKSB7IC8vIElmIGFuIGV4Y2VwdGlvbiBpcyB0aHJvd24sIHRoZW4KKwkJCS8vIGl0IGlzIG5vdCBhIG51bWJlci4gT3RoZXJ3aXNlIGl0CisJCQkvLyBpcy4KKwkJCXJldHVybiBmYWxzZTsKKwkJfQorCQlyZXR1cm4gdHJ1ZTsKKwl9CisKKwkvKioKKwkgKiBUZXN0cyB3aGV0aGVyIGFub3RoZXIgcG9seWdvbiBhbmQgVEhJUyBwb2x5Z29uIGFyZSB0aGUgc2FtZQorCSAqIAorCSAqIEBwYXJhbSBwb2x5Z29uCisJICogICAgICAgICAgICB0aGUgb3RoZXIgcG9seWdvbiB3ZSB3YW50IHRvIGNvbXBhcmUgYWdhaW5zIFRISVMgb25lCisJICogCisJICogQHJldHVybiB0cnVlIGlmIHRoZXNlIHR3byBwb2x5Z29ucyBhcmUgdGhlIHNhbWUKKwkgKi8KKwlwdWJsaWMgYm9vbGVhbiBzYW1lKFNURU1Qb2x5Z29uIHBvbHlnb24pIHsKKworCQkvLyBJZiB0aGV5IGRvbnQgaGF2ZSB0aGUgc2FtZSBudW1iZXIgb2YgcG9pbnRzIHRoZXkgY2FudCBiZSB0aGUgc2FtZQorCQkvLyBwb2x5Z29uLgorCQlpZiAobGlzdC5zaXplKCkgIT0gcG9seWdvbi5wb2ludHMoKSkgeworCQkJcmV0dXJuIGZhbHNlOworCQl9CisKKwkJLy8gT3RoZXJ3aXNlLCBjb21wYXJlIGlmIHRoZXkgaGF2ZSB0aGUgc2FtZSBzdGFydGluZyBhbmQgZW5kaW5nIHBvaW50cy4KKwkJLy8gSWYgdGhleSBkb250LCB0aGVuIHRoZXkgY2FudCBiZSB0aGUgc2FtZSBwb2ludC4KKworCQlpZiAoaW5pdCAhPSBwb2x5Z29uLmdldEluaXQoKSkgeworCQkJcmV0dXJuIGZhbHNlOworCQl9IGVsc2UgaWYgKGxhc3QgIT0gcG9seWdvbi5nZXRMYXN0KCkpIHsKKwkJCXJldHVybiBmYWxzZTsKKwkJfQorCisJCS8vIEZpbmFsbHksIHNpbmNlIHRoZXkgaGF2ZSB0aGUgc2FtZSBudW1iZXIgb2YgcG9pbnRzLCB0aGUgc2FtZSBzdGFydGluZworCQkvLyBhbmQgZW5kaW5nIHBvaW50cywgY2hlY2sgdGhlCisJCS8vIGludGVybWVkaWF0ZSBwb2ludHMgdG8gc2VlIGlmIHRoZXkgYXJlIHJlYWxseSB0aGUgc2FtZS4KKworCQkvLyBhZHZhbmNlIHRoZSBmaXJzdCB0b2tlbiB3aGljaCB3ZSBrbm93IGFscmVhZHkgdG8gYmUgdGhlIHNhbWUKKwkJSXRlcmF0b3IgaXQxID0gbGlzdC5pdGVyYXRvcigpOworCQlJdGVyYXRvciBpdDIgPSBsaXN0Lml0ZXJhdG9yKCk7CisKKwkJUG9pbnREYXRhIGQxID0gbnVsbDsKKwkJUG9pbnREYXRhIGQyID0gbnVsbDsKKworCQl3aGlsZSAoaXQxLmhhc05leHQoKSkgeworCisJCQlkMSA9IChQb2ludERhdGEpIGl0MS5uZXh0KCk7CisJCQlkMiA9IChQb2ludERhdGEpIGl0Mi5uZXh0KCk7CisKKwkJCWlmIChkMS5zYW1lKGQyKSAhPSB0cnVlKSB7CisJCQkJcmV0dXJuIGZhbHNlOworCQkJfQorCisJCX0KKworCQkvLyBZZXMsIGJvdGggcG9seWdvbnMgYXJlIHRoZSBzYW1lLgorCQlyZXR1cm4gdHJ1ZTsKKwl9CisKKwkvKioKKwkgKiBjb252ZXJ0IHRvIGRlZ3JlZXMgYW5kIGNoYW5nZSBmb3JtYXQgb2YgZGF0YSB0byBTVEVNIGNvbnZlbnRpb24gLS0gZWlnaHQKKwkgKiBkaWdpdHMsIG5vIGRlY2ltYWwgcG9pbnQKKwkgKiAKKwkgKiBAcGFyYW0gdmFsdWUKKwkgKiAgICAgICAgICAgIGluIHJhZGlhbnMKKwkgKiAKKwkgKiBAcmV0dXJuIHRoZSBhbmdsZSB2YWx1ZSBpbiBkZWdyZWVzCisJICovCisJcHJvdGVjdGVkIGRvdWJsZSB0b0RlZ3JlZXMoZG91YmxlIHZhbHVlKSB7CisJCWRvdWJsZSBkVmFsdWUgPSB2YWx1ZTsKKwkJZFZhbHVlICo9IDE4MC4wOworCQlkVmFsdWUgLz0gamF2YS5sYW5nLk1hdGguUEk7CisJCS8vIHJldHVybiAoaW50KSAoMTAwMDAwMC4wICogdmFsdWUpOworCQlyZXR1cm4gZFZhbHVlOworCX0gLy8gdG9EZWdyZWVzCisKKwkvKioKKwkgKiBHZXQgYWxsIHRoZSBsdCBwb2ludHMgaW4gdGhpcyBwb2x5Z29uCisJICogCisJICogQHJldHVybiB0aGUgbHQgcG9pbnRzCisJICovCisJcHVibGljIERvdWJsZVtdIGdldEx0UG9pbnRzKCkgeworCisJCWludCBpbmRleCA9IDA7CisJCUl0ZXJhdG9yIGl0ID0gbGlzdC5pdGVyYXRvcigpOworCisJCXdoaWxlIChpdC5oYXNOZXh0KCkpIHsKKwkJCVBvaW50RGF0YSBwRGF0YSA9IChQb2ludERhdGEpIGl0Lm5leHQoKTsKKwkJCWx0UG9pbnRzW2luZGV4KytdID0gbmV3IERvdWJsZSh0b0RlZ3JlZXMocERhdGEuZ2V0THQoKSkpOworCQl9CisKKwkJcmV0dXJuIGx0UG9pbnRzOworCX0KKworCS8qKgorCSAqIEdldCBhbGwgdGhlIGxnIHBvaW50cyBpbiB0aGlzIHBvbHlnb24KKwkgKiAKKwkgKiBAcmV0dXJuIHRoZSBsZyBwb2ludHMKKwkgKi8KKwlwdWJsaWMgRG91YmxlW10gZ2V0TGdQb2ludHMoKSB7CisKKwkJaW50IGluZGV4ID0gMDsKKwkJSXRlcmF0b3IgaXQgPSBsaXN0Lml0ZXJhdG9yKCk7CisKKwkJd2hpbGUgKGl0Lmhhc05leHQoKSkgeworCQkJUG9pbnREYXRhIHBEYXRhID0gKFBvaW50RGF0YSkgaXQubmV4dCgpOworCQkJbGdQb2ludHNbaW5kZXgrK10gPSBuZXcgRG91YmxlKHRvRGVncmVlcyhwRGF0YS5nZXRMZygpKSk7CisJCX0KKworCQlyZXR1cm4gbGdQb2ludHM7CisJfQorCisJLyoqCisJICogRXh0cmFjdCB0aGUgbGF0LCBsb25nIGRhdGEgZnJvbSB0aGUgZGF0YSBidWZmZXIKKwkgKiAKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBleHRyYWN0THRMZ0RhdGEoKSB7CisKKwkJLyoqCisJCSAqIFRoaXMgbWV0aG9kIGNyZWF0ZXMgdGhlIFhNTCB0YWdzIHRoYXQgZGVhbCB3aXRoIHBvbHlnb24gZGF0YSBhbmQKKwkJICogaW5jbHVkZXMgdGhlIHBvbHlnb24gZGF0YSBpbiBpdC4KKwkJICogCisJCSAqIEBwYXJhbSBpZAorCQkgKiBAcGFyYW0gZGF0YQorCQkgKiBAcmV0dXJuCisJCSAqLworCisJCWludCBvZmZzZXQgPSAwOworCQlmaW5hbCBpbnQgSU5WQUxJRCA9IC0xMDAwMDAwMDsKKwkJZG91YmxlIGx0ID0gSU5WQUxJRDsKKwkJZG91YmxlIGxnID0gSU5WQUxJRDsKKworCQlzd2l0Y2ggKF9sZXZlbCkgeworCisJCWNhc2UgRGF0YVR5cGVzLkxFVkVMXzA6CisJCQlvZmZzZXQgPSAyOworCQkJYnJlYWs7CisKKwkJY2FzZSBEYXRhVHlwZXMuTEVWRUxfMToKKwkJCW9mZnNldCA9IDM7CisJCQlicmVhazsKKworCQljYXNlIERhdGFUeXBlcy5MRVZFTF8yOgorCQkJb2Zmc2V0ID0gNDsKKwkJCWJyZWFrOworCQl9CisKKwkJLy8gVG9rZW5pemUKKwkJU3RyaW5nVG9rZW5pemVyIHRva2VucyA9IG5ldyBTdHJpbmdUb2tlbml6ZXIoX2RhdGEsICIsIik7IC8vJE5PTi1OTFMtMSQKKworCQkvLyBBZHZhbmNlIHRoZSBmaXJzdCBLLXRva2Vucy4KKwkJZm9yIChpbnQgaSA9IDA7IGkgPCBvZmZzZXQ7IGkrKykgeworCQkJaWYgKHRva2Vucy5oYXNNb3JlVG9rZW5zKCkpIHsKKwkJCQl0b2tlbnMubmV4dFRva2VuKCk7CisJCQl9CisJCX0KKworCQkvLyBXZSBhcmUgbm93IGxvY2F0ZWQgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgcG9seWdvbiBkYXRhLgorCQl3aGlsZSAodG9rZW5zLmhhc01vcmVUb2tlbnMoKSkgeworCisJCQlTdHJpbmcgdG9rZW4gPSB0b2tlbnMubmV4dFRva2VuKCk7CisKKwkJCWlmIChpc051bWVyaWModG9rZW4pID09IGZhbHNlKSB7CisJCQkJY29udGludWU7IC8vIElnbm9yZSwgdGhpcyBpcyBub3QgYSB2YWxpZCBjb29yZGluYXRlLgorCQkJfQorCisJCQlpZiAobHQgPT0gSU5WQUxJRCkgeworCQkJCWx0ID0gZ2V0RG91YmxlKHRva2VuKTsKKwkJCX0gZWxzZSBpZiAobGcgPT0gSU5WQUxJRCkgeworCQkJCWxnID0gZ2V0RG91YmxlKHRva2VuKTsKKwkJCX0KKworCQkJaWYgKGx0ICE9IElOVkFMSUQgJiYgbGcgIT0gSU5WQUxJRCkgeworCQkJCS8vIFBvaW50RGF0YSBwb2ludCA9IG5ldyBQb2ludERhdGEodG9EZWdyZWVzKGx0KSwKKwkJCQkvLyB0b0RlZ3JlZXMobGcpKTsKKwkJCQlQb2ludERhdGEgcG9pbnQgPSBuZXcgUG9pbnREYXRhKGx0LCBsZyk7CisJCQkJaWYgKGluaXQgPT0gbnVsbCkgeworCQkJCQlpbml0ID0gcG9pbnQ7CisJCQkJfQorCQkJCWxhc3QgPSBwb2ludDsKKwkJCQkvLyBFbGltaW5hdGUgcmVwZWF0ZWQgcG9pbnRzIDogZm9yIGV2ZXJ5IG5ldyBwb2ludCwgYWRkIHRvIGxpc3QKKwkJCQkvLyBvbmx5IGlmIGl0IGlzIG5vdCBkdXBsaWNhdGVkCisJCQkJLy8gaWYgKGNoZWNrRHVwbGljYXRlZFBvaW50cyhwb2ludCkgPT0gZmFsc2UpIHsKKwkJCQlsaXN0LmFkZChwb2ludCk7CisJCQkJLy8gfQorCQkJCWx0ID0gSU5WQUxJRDsKKwkJCQlsZyA9IElOVkFMSUQ7CisJCQl9CisJCX0KKworCX0gLy8gZXh0cmFjdEx0TGdEYXRhCisKKwkvKioKKwkgKiBDaGVjayBmb3IgZHVwbGljYXRlZCBwb2ludHMgaW4gdGhlIHBvbHlnb24KKwkgKi8KKwkvLyBwcml2YXRlIGJvb2xlYW4gY2hlY2tEdXBsaWNhdGVkUG9pbnRzKFBvaW50RGF0YSBwb2ludCkgeworCS8vCisJLy8gSXRlcmF0b3IgaXQgPSB0aGlzLmxpc3QuaXRlcmF0b3IoKTsKKwkvLworCS8vIC8vIEl0ZXJhdGUgdGhyb3VnaCBhbGwgdGhlIHBvaW50cyBpbiB0aGUgcG9seWdvbiwgYXZvaWQgZHVwbGljYXRlcy4KKwkvLyB3aGlsZSAoaXQuaGFzTmV4dCgpKSB7CisJLy8KKwkvLyBQb2ludERhdGEgY3VycmVudCA9IChQb2ludERhdGEpIGl0Lm5leHQoKTsKKwkvLyAvLyBDaGVjayB0byBzZWUgaWYgdGhlc2UgdHdvIHBvbHlnb25zIGFyZSB0aGUgc2FtZQorCS8vIC8vIE5PVEU6IHRoZSBleGNlcHRpb24gaWYgdGhlIGluaXRpYWwgcG9seWdvbgorCS8vIGlmIChwb2ludC5zYW1lKGN1cnJlbnQpKSB7CisJLy8gcmV0dXJuIHRydWU7CisJLy8gfQorCS8vIH0KKwkvLyAvLyBOb3QgZHVwbGljYXRlZAorCS8vIHJldHVybiBmYWxzZTsKKwkvLyB9CisJLyoqCisJICogR2V0IHRoZSBzdGFydGluZyBwb2ludCBvZiBhIHBvbHlnb24KKwkgKiAKKwkgKiBAcmV0dXJuIHRoZSBmaXJzdCBwb2ludCBvZiBhIHBvbHlnb24KKwkgKi8KKwlwdWJsaWMgUG9pbnREYXRhIGdldEluaXQoKSB7CisJCXJldHVybiBpbml0OworCX0KKworCS8qKgorCSAqIEdldCB0aGUgbGFzdCBwb2ludCBvZiBhIHBvbHlnb24KKwkgKiAKKwkgKiBAcmV0dXJuIHRoZSBsYXN0IHBvaW50IG9mIGEgcG9seWdvbgorCSAqLworCXB1YmxpYyBQb2ludERhdGEgZ2V0TGFzdCgpIHsKKwkJcmV0dXJuIGxhc3Q7CisJfQorCisJLyoqCisJICogR2V0IGl0ZXJhdG9yIHRvIGxpc3Qgb2YgcG9seWdvbiBkYXRhIG9iamVjdHMuCisJICogCisJICogQHJldHVybiBhbiBpdGVyYXRvciB0aHJvdWdoIG91ciBsaXN0IG9mIHBvbHlnb25zCisJICovCisJcHVibGljIEl0ZXJhdG9yIGdldEl0ZXJhdG9yKCkgeworCQlyZXR1cm4gbGlzdC5saXN0SXRlcmF0b3IoKTsKKwl9CisKK30KKworLyoqCisgKiBBIHV0aWxpdHkgY2xhc3MgdXNlZCB0byBob2xkIHBvbHlnb24gZGF0YS4gQW4gaW5zdGFuY2Ugb2YgdGhpcyBjbGFzcworICogcmVwcmVzZW50cyBhIHNpbmdsZSBwb2ludC4KKyAqIAorICovCitjbGFzcyBQb2ludERhdGEgeworCisJcHJpdmF0ZSBkb3VibGUgX2x0ID0gLTE7CisKKwlwcml2YXRlIGRvdWJsZSBfbGcgPSAtMTsKKworCS8qKgorCSAqIENvbnN0cnVjdG9yCisJICogCisJICogQHBhcmFtIGx0CisJICogICAgICAgICAgICB0aGUgbGF0aXR1ZGUgaW4gZGVncmVlcworCSAqIEBwYXJhbSBsZworCSAqICAgICAgICAgICAgdGhlIGxvbmdpdHVkZSBpbiBkZWdyZXNzCisJICovCisJcHVibGljIFBvaW50RGF0YShkb3VibGUgbHQsIGRvdWJsZSBsZykgeworCQkvLyBfbHQgPSBHZW5VdGlscy50b0RlZ3JlZXMobHQpOworCQkvLyBfbGcgPSBHZW5VdGlscy50b0RlZ3JlZXMobGcpOworCQlfbHQgPSBsdDsKKwkJX2xnID0gbGc7CisJfQorCisJLyoqCisJICogR2V0IHRoZSBsYXRpdHVkZSB2YWx1ZQorCSAqIAorCSAqIEByZXR1cm4gdGhlIGxhdGl0dWRlIGluIGRlZ3Jlc3MKKwkgKiAKKwkgKi8KKwlwdWJsaWMgZG91YmxlIGdldEx0KCkgeworCQlyZXR1cm4gX2x0OworCX0KKworCS8qKgorCSAqIEdldCB0aGUgbG9uZ2l0dWRlIHZhbHVlCisJICogCisJICogQHJldHVybiB0aGUgbG9uZ2l0dWRlIGluIGRlZ3Jlc3MKKwkgKi8KKwlwdWJsaWMgZG91YmxlIGdldExnKCkgeworCQlyZXR1cm4gX2xnOworCX0KKworCS8qKgorCSAqIFNldCB0aGUgbGF0aXR1ZGUKKwkgKiAKKwkgKiBAcGFyYW0gbHQKKwkgKiAgICAgICAgICAgIHRoZSBsYXRpdHVkZQorCSAqLworCXB1YmxpYyB2b2lkIHNldEx0KGRvdWJsZSBsdCkgeworCQlfbHQgPSBsdDsKKwl9CisKKwkvKioKKwkgKiBTZXQgdGhlIGxvbmdpdHVkZQorCSAqIAorCSAqIEBwYXJhbSBsZworCSAqICAgICAgICAgICAgdGhlIGxvbmdpdHVkZQorCSAqLworCXB1YmxpYyB2b2lkIHNldExnKGRvdWJsZSBsZykgeworCQlfbGcgPSBsZzsKKwl9CisKKwkvKioKKwkgKiBDaGVjayB0byBzZWUgaWYgdHdvIHBvaW50IG9iamVjdHMgYXJlIHRoZSBzYW1lLgorCSAqIAorCSAqIEBwYXJhbSBwb2ludAorCSAqICAgICAgICAgICAgdGhlIHBvaW50IGRhdGEgaG9sZGVyCisJICogCisJICogQHJldHVybiB0cnVlIGlmIHR3byBwb2ludHMgYXJlIHRoZSBzYW1lCisJICovCisJcHVibGljIGJvb2xlYW4gc2FtZShQb2ludERhdGEgcG9pbnQpIHsKKworCQlpZiAodGhpcy5fbHQgIT0gcG9pbnQuX2x0KSB7CisJCQlyZXR1cm4gZmFsc2U7CisJCX0gZWxzZSBpZiAodGhpcy5fbGcgIT0gcG9pbnQuX2xnKSB7CisJCQlyZXR1cm4gZmFsc2U7CisJCX0KKworCQkvLyBZZXMsIGl0IGlzIHRoZSBzYW1lIGRhdGEuCisJCXJldHVybiB0cnVlOworCX0KK30KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3NyYy9vcmcvZWNsaXBzZS9zdGVtL3V0aWxpdHkvZ2VuZXJhdG9ycy9TaW5nbGVQYXNzRG93blNhbXBsZXIuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3NyYy9vcmcvZWNsaXBzZS9zdGVtL3V0aWxpdHkvZ2VuZXJhdG9ycy9TaW5nbGVQYXNzRG93blNhbXBsZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mODMxYjkyCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdXRpbGl0eS9nZW5lcmF0b3JzL1NpbmdsZVBhc3NEb3duU2FtcGxlci5qYXZhCkBAIC0wLDAgKzEsMTc4NSBAQAorLyoqCisgKiAKKyAqLworcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkuZ2VuZXJhdG9yczsKKworaW1wb3J0IGphdmEuaW8uQnVmZmVyZWRSZWFkZXI7CitpbXBvcnQgamF2YS5pby5GaWxlOworaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247CitpbXBvcnQgamF2YS5pby5QcmludFdyaXRlcjsKK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OworaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uczsKK2ltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKK2ltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CitpbXBvcnQgamF2YS51dGlsLlNldDsKK2ltcG9ydCBqYXZhLnV0aWwuU3RyaW5nVG9rZW5pemVyOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzCisgKiBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mCisgKiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMKKyAqIGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICogCisgKiBDb250cmlidXRvcnM6IElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqCisgKiBTVEVNIElJIERhdGEgTWlncmF0aW9uL0dlbmVyYXRpb24gVXRpbGl0aWVzIC0tIEluc3RhbmNlcyBvZiB0aGlzIGNsYXNzIGFyZQorICogdXNlZCB0byBydW4gYSBwb2ludC1yZWR1Y3Rpb24gYWxnb3JpdGhtIG9uIHRoZSBEaXZhIHNldC4KKyAqIAorICogTk9URSA6IFNJTkdMRSBQQVNTIERPV04gU0FNUExFUiBpcyB0byBiZSB1c2VkIG9ubHkgZm9yIGEgc2luZ2xlIGl0ZXJhdGlvbiBvcgorICogYXMgdGhlIGZpcnN0IHN0ZXAgb2YgbW9yZSB0aGFuIG9uZSBpdGVyYXRpb24uCisgKiAKKyAqIFRvIGNvbmZpZ3VyZSwgc2VlIGNvbmZpZ3VyYXRpb24gZmlsZSA6CisgKiBvcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvY29uZmlndXJhdGlvbi9TaW5nbGVQYXNzRG93blNhbXBsZXIuY29uZmlnCisgKiAKKyAqIAorICogVG8gcnVuLCBhZGQgcGF0aCB0byBjb25maWd1cmF0aW9uIGZpbGUgaW4gdGhlIHJ1biBwcm9maWxlIChpLmUuCisgKiBDOlxzdGVtSUlcb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5XGNvbmZpZ3VyYXRpb25cU2luZ2xlUGFzc0Rvd25TYW1wbGVyLmNvbmZpZykKKyAqIAorICogCisgKiBTRVQgVk1BUkdTIFRPIDogLVhtczEwMjRtIC1YbXgxMDI0bQorICogCisgKi8KK3B1YmxpYyBjbGFzcyBTaW5nbGVQYXNzRG93blNhbXBsZXIgeworCisJLyoqCisJICogT3VyIHNvdXJjZSBmaWxlcyBmb3IgSVNPIDMxNjYtMSBjb2RlcyBhbmQgZm9yIHRoZSBsaXN0IG9mIHRhcmdldAorCSAqIGNvdW50cmllcy4KKwkgKi8KKworCXByaXZhdGUgU3RyaW5nIHRocmVzaG9sZCA9IG51bGw7CisKKwlwcml2YXRlIFN0cmluZyBpc28zMTY2XzEgPSBudWxsOworCisJcHJpdmF0ZSBTdHJpbmcgaXNvMzE2Nl8yID0gbnVsbDsKKworCXByaXZhdGUgU3RyaW5nIGZpeEZpbGUgPSBudWxsOworCisJcHJpdmF0ZSBTdHJpbmcgdGFyZ2V0RmlsZSA9IG51bGw7CisKKwlwcml2YXRlIFN0cmluZyBsZXhEaXIgPSBudWxsOworCisJcHJpdmF0ZSBTdHJpbmcgb3V0cHV0RGlyID0gbnVsbDsKKworCXByaXZhdGUgU3RyaW5nIHdvcmtzcGFjZSA9IG51bGw7CisKKwlwcml2YXRlIFN0cmluZyB1c2FEZXNjcmlwdG9yRmlsZSA9IG51bGw7CisKKwkvKioKKwkgKiBMaXN0IGZvciBJU08gMzE2Ni0xIGNvZGVzIGFuZCB0YXJnZXQgY291bnRyaWVzLgorCSAqLworCisJTGlzdCB0YXJnZXRMaXN0ID0gbnVsbDsKKworCUxpc3QgY29kZUxpc3QgPSBudWxsOworCisJTGlzdCBjb2RlZml4TGlzdCA9IG51bGw7CisKKwlMaXN0IHVzYURlc2NyaXB0b3JMaXN0ID0gbnVsbDsKKworCS8qKgorCSAqIExpc3QgdG8ga2VlcCB0cmFjayBvZiBwYWlycyAoUG9pbnREYXZhOlZhbHVlKQorCSAqLworCUxpc3Q8U3RyaW5nPiBwb2ludERhdGFMaXN0ID0gbnVsbDsKKworCS8qKgorCSAqIEEgZmxhZyB0aGF0IGluZGljYXRlcyB3aGV0aGVyIHdlIGNhbiBkZWxldGUgYSBwb2ludC4KKwkgKi8KKwkvLyBObywgaXQgaXMgbm90IHNhZmUgdG8gcmVtb3ZlIHRoaXMgbm9kZS4KKwlmaW5hbCBTdHJpbmcgVU5TQUZFID0gIjAiOyAvLyROT04tTkxTLTEkCisKKwkvLyBZZXMsIGl0IGNhbiBiZSBkZWxldGVkLgorCWZpbmFsIFN0cmluZyBTQUZFID0gIjEiOyAvLyROT04tTkxTLTEkCisKKwkvLyBTYWZldHkgc3RhdGUgbm90IGtub3duIHlldCAtPiBpbml0aWFsIHZhbHVlLgorCWZpbmFsIFN0cmluZyBVTktOT1dOID0gIjIiOyAvLyAvLyROT04tTkxTLTEkCisKKwkvKioKKwkgKiBVc2VkIGZvciBnbG9iYWwgc3RhdHMuCisJICovCisJZG91YmxlIHRvdGFsUG9pbnRzID0gMDsKKworCWRvdWJsZSB0b3RhbFJlbW92ZWQgPSAwOworCisJZG91YmxlIHRvdGFsUG9seWdvbnMgPSAwOworCisJZG91YmxlIGdsb2JhbE1pblBlcmNlbnQgPSBEb3VibGUuTUFYX1ZBTFVFOworCisJZG91YmxlIGdsb2JhbE1heFBlcmNlbnQgPSAwLjA7CisKKwlkb3VibGUgZ2xvYmFsUGVyY2VudCA9IDAuMDsKKworCS8qKgorCSAqIExpc3RzIHRvIGtlZXAgdHJhY2sgb2YgdGhlIG9jY3VyZW5jZXMgb2YgdmFsdWVzIG9mIHRoZSBhbmdsZXMgOiAxODAgLQorCSAqIEFyY0Nvcyh0ZXRhKQorCSAqIAorCSAqLworCUhhc2hNYXA8RG91YmxlLCBJbnRlZ2VyPiBhbmdsZVZhbHVlTWFwID0gbnVsbDsKKworCS8qKgorCSAqIENvbnN0cnVjdG9yCisJICogCisJICogQHBhcmFtIHRocmVzaG9sZCAtCisJICogICAgICAgICAgICB0aGUgdGhyZXNob2xkIGluIGRlZ3Jlc3MKKwkgKiBAcGFyYW0gaXNvMzE2Nl8xIC0KKwkgKiAgICAgICAgICAgIGRhdGEgZmlsZSB3aXRoIHRoZSBJU08zMTY2LTEgQUxQSEFfMiBhbmQgQUxQSEFfMyBjb2Rlcy4KKwkgKiBAcGFyYW0gaXNvMzE2Nl8yIC0KKwkgKiAgICAgICAgICAgIGRhdGEgZmlsZSB3aXRoIHRoZSBJU08zMTY2LTIgY29kZXMuCisJICogQHBhcmFtIGZpeEZpbGUgLQorCSAqICAgICAgICAgICAgZmlsZSBjb250YWluaW5nIG1pc3NpbmcgSVNPMzE2Ni0yIGNvZGVzCisJICogQHBhcmFtIHRhcmdldEZpbGUKKwkgKiAgICAgICAgICAgIHRoZSBsaXN0IG9mIGNvdW50cmllcyBmb3Igd2hpY2ggd2Ugd2lsbCBnZW5lcmF0ZSBHTUwgZmlsZXMKKwkgKiBAcGFyYW0gbGV4RGlyCisJICogICAgICAgICAgICBmb2xkZXIgY29udGFpbmluZyBsZXhpY29ncmFwaGljYWxseSBzb3J0ZWQgZmlsZXMKKwkgKiBAcGFyYW0gb3V0cHV0RGlyCisJICogICAgICAgICAgICB0aGUgb3V0cHV0IGRpcmVjdG9yeSBmb3IgdGhlIEdNTCBmaWxlcyB3ZSBnZW5lcmF0ZQorCSAqLworCS8vIHB1YmxpYyBTaW5nbGVQYXNzRG93blNhbXBsZXIoU3RyaW5nIHRocmVzaG9sZCwgU3RyaW5nIGlzbzMxNjZfMSwKKwkvLyBTdHJpbmcgaXNvMzE2Nl8yLCBTdHJpbmcgZml4RmlsZSwgU3RyaW5nIHRhcmdldEZpbGUsIFN0cmluZyBsZXhEaXIsCisJLy8gU3RyaW5nIG91dHB1dERpcikgeworCS8vIC8vIFNldCB2YWx1ZXMgb2YgZ2xvYmFsIHZhcmlhYmxlcy4KKwkvLyB0aGlzLnRocmVzaG9sZCA9IHRocmVzaG9sZDsKKwkvLyB0aGlzLmlzbzMxNjZfMSA9IGlzbzMxNjZfMTsKKwkvLyB0aGlzLmlzbzMxNjZfMiA9IGlzbzMxNjZfMjsKKwkvLyB0aGlzLmZpeEZpbGUgPSBmaXhGaWxlOworCS8vIHRoaXMudGFyZ2V0RmlsZSA9IHRhcmdldEZpbGU7CisJLy8gdGhpcy5sZXhEaXIgPSBsZXhEaXI7CisJLy8gdGhpcy5vdXRwdXREaXIgPSBvdXRwdXREaXI7CisJLy8gdGFyZ2V0TGlzdCA9IG51bGw7CisJLy8gYW5nbGVWYWx1ZU1hcCA9IG5ldyBIYXNoTWFwPERvdWJsZSwgSW50ZWdlcj4oKTsKKwkvLyB0aGlzLnVzYURlc2NyaXB0b3JGaWxlID0gd29ya3NwYWNlCisJLy8gKyAiXFxvcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHlcXHBhcmFtZXRlcnNcXElTT0ZJWFxcVVNBX0ZJUFMudHh0IjsKKwkvLyAvLyROT04tTkxTLTEkCisJLy8gfQorCS8qKgorCSAqIEBwYXJhbSBjb25maWdGaWxlCisJICovCisJcHVibGljIFNpbmdsZVBhc3NEb3duU2FtcGxlcihTdHJpbmcgY29uZmlnRmlsZSkgeworCisJCS8vIExvYWQgYWxsIGNvbmZpZ3VyYXRpb24gdmFyaWFibGVzCisJCUhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+IHZhcnMgPSBHZW5VdGlscy5sb2FkQ29uZmlnRmlsZShjb25maWdGaWxlKTsKKworCQlTZXQ8U3RyaW5nPiBrZXlzID0gdmFycy5rZXlTZXQoKTsKKwkJSXRlcmF0b3IgaXQgPSBrZXlzLml0ZXJhdG9yKCk7CisJCXdoaWxlIChpdC5oYXNOZXh0KCkpIHsKKwkJCVN0cmluZyB2YXIgPSAoU3RyaW5nKSBpdC5uZXh0KCk7CisKKwkJCS8vIEFzc2lnbiB2YWx1ZXMgdG8gY29uZmlndXJhdGlvbiB2YXJpYWJsZXMgOgorCQkJaWYgKHZhci5lcXVhbHMoIldPUktTUEFDRSIpKSB7IC8vJE5PTi1OTFMtMSQKKwkJCQl3b3Jrc3BhY2UgPSB2YXJzLmdldCh2YXIpOworCQkJfSBlbHNlIGlmICh2YXIuZXF1YWxzKCJUSFJFU0hPTEQiKSkgeyAvLyROT04tTkxTLTEkCisJCQkJdGhyZXNob2xkID0gdmFycy5nZXQodmFyKTsKKwkJCX0gZWxzZSBpZiAodmFyLmVxdWFscygiSVNPMzE2Nl8xIikpIHsgLy8kTk9OLU5MUy0xJAorCQkJCWlzbzMxNjZfMSA9IHZhcnMuZ2V0KHZhcik7CisJCQl9IGVsc2UgaWYgKHZhci5lcXVhbHMoIklTTzMxNjZfMiIpKSB7IC8vJE5PTi1OTFMtMSQKKwkJCQlpc28zMTY2XzIgPSB2YXJzLmdldCh2YXIpOworCQkJfSBlbHNlIGlmICh2YXIuZXF1YWxzKCJJU09fRklYIikpIHsgLy8kTk9OLU5MUy0xJAorCQkJCWZpeEZpbGUgPSB2YXJzLmdldCh2YXIpOworCQkJfSBlbHNlIGlmICh2YXIuZXF1YWxzKCJUQVJHRVRfTElTVCIpKSB7IC8vJE5PTi1OTFMtMSQKKwkJCQl0YXJnZXRGaWxlID0gdmFycy5nZXQodmFyKTsKKwkJCX0gZWxzZSBpZiAodmFyLmVxdWFscygiTEVYX0RJUiIpKSB7IC8vJE5PTi1OTFMtMSQKKwkJCQlsZXhEaXIgPSB2YXJzLmdldCh2YXIpOworCQkJfSBlbHNlIGlmICh2YXIuZXF1YWxzKCJNQVBfT1VUUFVUIikgfHwgdmFyLmVxdWFscygiT1VUUFVUIikpIHsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCisJCQkJb3V0cHV0RGlyID0gdmFycy5nZXQodmFyKTsKKwkJCX0KKworCQl9IC8vIHdoaWxlCisKKwkJLy8gVGhlIHdvcmtzcGFjZSB2YXJpYWJsZSBzaG91bGQgZW5kIHdpdGggYSBzbGFzaCBjaGFyYWN0ZXIKKwkJaWYgKHdvcmtzcGFjZS5lbmRzV2l0aCgiXFwiKSA9PSBmYWxzZSkgeyAvLyROT04tTkxTLTEkCisJCQl3b3Jrc3BhY2UgKz0gIlxcIjsgLy8kTk9OLU5MUy0xJAorCQl9CisKKwkJU3RyaW5nIHBhdGggPSB3b3Jrc3BhY2UgKyBHZW5Db25zdGFudHMuUEFSQU1TX0RJUjsKKworCQkvLyBTZXQgcmVtYWluaW5nIGNvbmZpZyB2YXJzIHVzaW5nIFdPUktTUEFDRSAod29ya3NwYWNlIHJlbGF0aXZlKQorCQlpZiAodGhyZXNob2xkID09IG51bGwpIHsKKwkJCXRocmVzaG9sZCA9IEdlbkNvbnN0YW50cy5ERUZBVUxUX1RIUkVTSE9MRDsgLy8gRGVmYXVsdHMgdG8gNSBkZWdyZWVzCisJCX0KKwkJaWYgKGlzbzMxNjZfMSA9PSBudWxsKSB7CisJCQlpc28zMTY2XzEgPSBwYXRoICsgR2VuQ29uc3RhbnRzLklTTzMxNjZfMV9GSUxFOworCQl9CisJCWlmIChpc28zMTY2XzIgPT0gbnVsbCkgeworCQkJaXNvMzE2Nl8yID0gcGF0aCArIEdlbkNvbnN0YW50cy5JU08zMTY2XzJfRklMRTsKKwkJfQorCQlpZiAoZml4RmlsZSA9PSBudWxsKSB7CisJCQlmaXhGaWxlID0gcGF0aCArIEdlbkNvbnN0YW50cy5JU09GSVhfRklMRTsKKwkJfQorCQlpZiAodGFyZ2V0RmlsZSA9PSBudWxsKSB7CisJCQl0YXJnZXRGaWxlID0gcGF0aCArIEdlbkNvbnN0YW50cy5DT1VOVFJJRVNfTElTVDsKKwkJfQorCQlpZiAobGV4RGlyID09IG51bGwpIHsKKwkJCWxleERpciA9IHBhdGggKyBHZW5Db25zdGFudHMuTEVYX0RJUjsKKwkJfQorCisJCWlmIChHZW5VdGlscy52ZXJpZnlPdXRwdXREaXJlY3RvcnkodmFycykgPT0gZmFsc2UpIHsKKwkJCVN5c3RlbS5vdXQKKwkJCQkJLnByaW50bG4oIlx0XHRCYWQgY29uZmlndXJhdGlvbiBmaWxlIC0tIE9VVFBVVCB2YXJpYWJsZSBub3QgZm91bmQuIFBsZWFzZSBzcGVjaWZ5IG91dHB1dCBkaXJlY3RvcnkgdXNpbmcgZm9ybWF0IFZBUiA9IFZBTFVFIChpLmUuIE9VVFBVVCA9IEM6XFxkaXZhXFxncm91cGVkXFwgIik7IC8vJE5PTi1OTFMtMSQKKwkJCVN5c3RlbS5leGl0KDEpOworCQl9CisKKwkJdGFyZ2V0TGlzdCA9IG51bGw7CisJCWFuZ2xlVmFsdWVNYXAgPSBuZXcgSGFzaE1hcDxEb3VibGUsIEludGVnZXI+KCk7CisJCXRoaXMudXNhRGVzY3JpcHRvckZpbGUgPSBwYXRoICsgR2VuQ29uc3RhbnRzLlVTQV9GSVBTX0ZJTEU7CisKKwl9CisKKwkvKioKKwkgKiBUaGlzIG1ldGhvZCBzZXRzIHVwIGFuZCBydW5zIHRoaXMgZ2VuZXJhdG9yLgorCSAqIAorCSAqLworCXB1YmxpYyB2b2lkIHJ1bigpIHsKKwkJLy8gUmVhZCBhbmQga2VlcCBpbiBtZW1vcnkgYSBsaXN0IG9mIHRoZSBjb3VudHJpZXMgd2Ugd2FudC4KKwkJdGFyZ2V0TGlzdCA9IEdlblV0aWxzLnBvcHVsYXRlTGlzdCh0YXJnZXRGaWxlKTsKKworCQkvLyBSZWFkIGFuZCBrZWVwIGluIG1lbW9yeSBhIGxpc3Qgb2YgdGhlIElTTzMxNjYtMSBBTFBIQTIsIEFMUEhBMywgYW5kCisJCS8vIG51bWVyaWMgY29kZXMuCisJCWNvZGVMaXN0ID0gR2VuVXRpbHMucG9wdWxhdGVMaXN0KGlzbzMxNjZfMSk7CisKKwkJLy8gUmVhZCBhbmQga2VlcCBpbiBtZW1vcnkgYSBsaXN0IG9mIHRoZSBtaXNzaW5nIElTTzMxNjYtMiBjb2RlcworCQljb2RlZml4TGlzdCA9IEdlblV0aWxzLnBvcHVsYXRlTGlzdChmaXhGaWxlKTsKKworCQkvLyBMb2FkIHRoZSBsaXN0IG9mIGRlc2NyaXB0b3JzIGZvciB0aGUgVVNBIChzcGVjaWFsIGNhc2UpCisJCXVzYURlc2NyaXB0b3JMaXN0ID0gR2VuVXRpbHMucG9wdWxhdGVMaXN0KHVzYURlc2NyaXB0b3JGaWxlKTsKKworCQkvLyBJbml0aWFsaXplIHRoZSBoYXNoIG1hcAorCQlpbml0SGFzaE1hcChhbmdsZVZhbHVlTWFwKTsKKworCQkvLyBOb3csIHByb2Nlc3MgZWFjaCBpdGVtIGluIHRoZSB0YXJnZXQgbGlzdC4KKwkJcHJvY2VzcygpOworCisJfQorCisJLyoqCisJICogSW5pdGlhbGl6ZSB0aGUgaGFzaCBtYXAKKwkgKiAKKwkgKiBAcGFyYW0gbWFwIC0KKwkgKiAgICAgICAgICAgIHRoZSBoYXNoIG1hcAorCSAqIAorCSAqLworCXB1YmxpYyB2b2lkIGluaXRIYXNoTWFwKEhhc2hNYXA8RG91YmxlLCBJbnRlZ2VyPiBtYXApIHsKKwkJLy8gQWRkIHNvbWUga2V5cy92YWx1ZXMgdG8gb3VyIGhhc2ggbWFwCisJCW1hcC5wdXQobmV3IERvdWJsZSg5MC4wKSwgbmV3IEludGVnZXIoMCkpOworCQltYXAucHV0KG5ldyBEb3VibGUoNDUuMCksIG5ldyBJbnRlZ2VyKDApKTsKKwkJbWFwLnB1dChuZXcgRG91YmxlKDIyLjUpLCBuZXcgSW50ZWdlcigwKSk7CisJCW1hcC5wdXQobmV3IERvdWJsZSgxMS4yNSksIG5ldyBJbnRlZ2VyKDApKTsKKwkJbWFwLnB1dChuZXcgRG91YmxlKDUuNTEyNSksIG5ldyBJbnRlZ2VyKDApKTsKKwkJbWFwLnB1dChuZXcgRG91YmxlKDIuMCksIG5ldyBJbnRlZ2VyKDApKTsKKwkJbWFwLnB1dChuZXcgRG91YmxlKDEuNSksIG5ldyBJbnRlZ2VyKDApKTsKKwkJbWFwLnB1dChuZXcgRG91YmxlKDEuMCksIG5ldyBJbnRlZ2VyKDApKTsKKwkJbWFwLnB1dChuZXcgRG91YmxlKDAuNzUpLCBuZXcgSW50ZWdlcigwKSk7CisJCW1hcC5wdXQobmV3IERvdWJsZSgwLjUpLCBuZXcgSW50ZWdlcigwKSk7CisJCW1hcC5wdXQobmV3IERvdWJsZSgwLjI1KSwgbmV3IEludGVnZXIoMCkpOworCQltYXAucHV0KG5ldyBEb3VibGUoMC4xNSksIG5ldyBJbnRlZ2VyKDApKTsKKwkJbWFwLnB1dChuZXcgRG91YmxlKDAuMDUpLCBuZXcgSW50ZWdlcigwKSk7CisJfQorCisJLyoqCisJICogUGVyZm9ybSBvbmx5IHRoZSBmaXJzdCBpdGVyYXRpb24gb2YgZG93biBzYW1wbGluZy4KKwkgKiAKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBwcm9jZXNzKCkgeworCisJCS8vIEEgd3JpdGVyIGZvciB0aGUgbmV3IGZpbGUgd2UgYXJlIGNyZWF0aW5nLgorCQlQcmludFdyaXRlciBnbWxGaWxlID0gbnVsbDsKKworCQkvLyBBIHdyaXRlciBmb3IgdGhlIHJlZHVjZWQgZGF0YSBmaWxlLgorCQlQcmludFdyaXRlciByZWR1Y2VkRmlsZSA9IG51bGw7CisKKwkJLy8gT2JqZWN0IGhvbGRpbmcgSVNPMzE2Ni0xIHJlbGF0ZWQgZGF0YS4KKwkJSVNPQ29kZTEgaXNvQ29kZSA9IG51bGw7CisKKwkJLy8gTmFtZSBvZiB0aGUgbmV3IHByb3BlcnRpZXMgZmlsZS4KKwkJU3RyaW5nIGZpbGVOYW1lID0gbnVsbDsKKworCQkvLyBOYW1lIG9mIHRoZSBuZXcgcmVkdWNlZCBkYXRhIGZpbGUuCisKKwkJLy8gQSBsaXN0IGZvciBJU08gMzE2Ni0yIG9iamVjdHMKKwkJTGlzdCBpc28yTGlzdCA9IG5ldyBBcnJheUxpc3QoKTsKKworCQkvLyBGaWxlbmFtZXMgZm9yIGxleDEgYW5kIGxleDIgZmlsZXMgZm9yIGEgZ2l2ZW4gY291bnRyeS4KKwkJU3RyaW5nIGxleEFkbWluMUZpbGUgPSBudWxsOworCQlTdHJpbmcgbGV4QWRtaW4yRmlsZSA9IG51bGw7CisKKwkJLy8gTGlzdHMgaG9sZGluZyB0aGUgbGV4MSBhbmQgbGV4MiB2YWx1ZXMuCisJCS8vIE5PVEU6IGxleCB2YWx1ZXMgYXJlIHRoZSBsZXhpY29ncmFwaGljYWxseSBzb3J0ZWQgdmFsdWVzIGZvcgorCQkvLyBhZG1pbmlzdHJhdGlvbiBsZXZlbHMuCisJCUxpc3Q8U3RyaW5nPiBsZXgxRGF0YVNldCA9IG51bGw7CisJCUxpc3Q8U3RyaW5nPiBsZXgyRGF0YVNldCA9IG51bGw7CisKKwkJLy8gTGlzdHMgZm9yIGhvbGRpbmcgbGV4MSBhbmQgbGV4MiBvYmplY3RzIGZvciBhIGdpdmVuIGNvdW50cnkuCisJCUxpc3Q8TGV4MU9iaj4gbGV4MUxpc3QgPSBudWxsOworCQlMaXN0PExleDJPYmo+IGxleDJMaXN0ID0gbnVsbDsKKworCQlpbnQgc2l6ZSA9IHRhcmdldExpc3Quc2l6ZSgpOworCisJCS8vIEl0ZXJhdGUgZm9yIGV2ZXJ5IGNvdW50cnkgYW5kIGNyZWF0ZSBpdHMgR01MIGRhdGEgZmlsZS4KKwkJZm9yIChpbnQgaSA9IDA7IGkgPCBzaXplOyBpKyspIHsKKworCQkJLy8gR2V0IHRoZSBuZXh0IGNvdW50cnkgaW4gdGhlIGxpc3QuCisJCQlTdHJpbmcgZmlsZSA9ICgoU3RyaW5nKSB0YXJnZXRMaXN0LmdldChpKSkudHJpbSgpOworCisJCQkvLyBBbiBpbmRleCBmb3IgdW5rbndvbiBvciBuLmEuIGVudHJpZXMKKwkJCWludCB1bmtDb3VudGVyID0gMTsKKworCQkJLy8gV2UgdXNlIHRoaXMgbGlzdCB0byBrZWVwIHRyYWNrIG9mIGR1cGxpY2F0ZWQgcG9seWdvbnMuCisJCQlMaXN0PFNURU1Qb2x5Z29uPiBwb2x5Z29ucyA9IG51bGw7CisKKwkJCS8vIE9wZW4gdGhlIGRhdGEgc291cmNlIGZpbGUgZm9yIHRoaXMgY291bnRyeS4KKwkJCUJ1ZmZlcmVkUmVhZGVyIHJlYWRlciA9IEdlblV0aWxzLm9wZW5SZWFkZXIoZmlsZSk7CisKKwkJCVN5c3RlbS5vdXQKKwkJCQkJLnByaW50bG4oIlx0XHQ8PDw8IFNJTkdMRSBQQVNTIERPV04gU0FNUExFUiAtLSBQcm9jZXNzaW5nIGNvdW50cnkgOiAiICsgZmlsZSArICIgPj4+PiIpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKKworCQkJVXRpbExvZ2dlci5sb2dJbmZvcm1hdGlvbigiXHRcdDw8PDwgUGFzcyAxID4+Pj4iKTsgLy8kTk9OLU5MUy0xJAorCisJCQl0cnkgeworCisJCQkJaWYgKHJlYWRlciAhPSBudWxsKSB7CisKKwkJCQkJU3RyaW5nIGJ1ZmZlciA9IG51bGw7CisJCQkJCS8vIERlc2NyaWJlcyBsZXZlbCBvZiBkYXRhIHdlCisJCQkJCS8vIGFyZSBub3cgcHJvY2Vzc2luZyA6IExFVkVMMCwgTEVWRUwxLCBvciBMRVZFTDIuCisJCQkJCWludCBsZXZlbCA9IC0xOworCisJCQkJCS8vIFJlY29yZCB0aGUgcHJldmlvdXMgdHlwZS4KKwkJCQkJaW50IG9sZGxldmVsID0gbGV2ZWwgLSAxOworCisJCQkJCS8vIFVzZWQgdG8gZGlzdGluZ3Vpc2ggYmV0d2VlbiBhIHNpbXBsZSBwb2x5Z29uIGFuZCBpc2xhbmRzCisJCQkJCS8vIG9mIHBvbHlnb25zLiBJbml0aWFsaXplIHN0cmluZyB0byB0aGUgYmxhbmsgY2hhcmFjdGVyLgorCQkJCQlTdHJpbmcgaXNsYW5kID0gIiAiOyAvLyROT04tTkxTLTEkCisKKwkJCQkJd2hpbGUgKEdlblV0aWxzLkVPRihidWZmZXIgPSByZWFkZXIucmVhZExpbmUoKSkgIT0gdHJ1ZSkgeworCisJCQkJCQkvLyBUaGUgZGF0YSB3ZSB3YW50IHRvIHdyaXRlIHRvIHRoZSBuZXcgR01MIGZpbGUuCisJCQkJCQlTdHJpbmcgb3V0cHV0ID0gIiAiOyAvLyROT04tTkxTLTEkCisKKwkJCQkJCS8vIE1ha2Ugc3VyZSB0aGF0IHdlIG1hcmsgYWxsIHVua25vd24gZGF0YS4KKwkJCQkJCWJ1ZmZlciA9IGJ1ZmZlci5yZXBsYWNlKCIsLCIsICIsVU5LTk9XTiwiKTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCisKKwkJCQkJCS8vIFdlIHRha2UgYSBjaHVuayBvZiB0aGUgZGF0YSBbQlVGRkVSX01JTixCVUZGRVJfTUFYXQorCQkJCQkJLy8gdG8gbWFrZSBwcm9jZXNzc2luZyBtb3JlCisJCQkJCQkvLyBlZmZpY2llbnQsIHdlIGRvbnQgbmVlZCBhbGwgb2YgaXQuCisJCQkJCQlpbnQgQlVGRkVSX01JTiA9IDA7CisJCQkJCQlpbnQgQlVGRkVSX01BWCA9IDEyNTsKKworCQkJCQkJU3RyaW5nW10gaXRlbXMgPSBHZW5VdGlscworCQkJCQkJCQkuZXh0cmFjdChidWZmZXIubGVuZ3RoKCkgPCBCVUZGRVJfTUFYID8gYnVmZmVyCisJCQkJCQkJCQkJOiBidWZmZXIuc3Vic3RyaW5nKEJVRkZFUl9NSU4sCisJCQkJCQkJCQkJCQlCVUZGRVJfTUFYKSk7CisKKwkJCQkJCS8vIEdldCB0aGUgY291bnRyeSBuYW1lCisJCQkJCQlTdHJpbmcgY291bnRyeSA9IGl0ZW1zW0lTT0RhdGEuQ09VTlRSWV9OQU1FXTsKKworCQkJCQkJLy8gR2V0IHRoZSBJU08zMTY2LTEgaW5mbyBmb3IgdGhpcyBjb3VudHJ5CisJCQkJCQlpZiAoaXNvQ29kZSA9PSBudWxsKSB7CisJCQkJCQkJaXNvQ29kZSA9IEdlblV0aWxzLmdldElTT0NvZGUoY291bnRyeSwgY29kZUxpc3QpOworCQkJCQkJfQorCisJCQkJCQkvLyBHZXQgdGhlIHR5cGUgb2YgdGhlIGRhdGEgd2UgYXJlIHByb2Nlc3NpbmcuCisJCQkJCQlsZXZlbCA9IEdlblV0aWxzLmdldExldmVsKGl0ZW1zKTsKKworCQkJCQkJaWYgKGxldmVsICE9IDAgJiYgaXNvMkxpc3QgIT0gbnVsbCkgeworCQkJCQkJCS8vIExvYWQgdGhlIElTTyAzMTY2LTIgb2JqZWN0cyBmb3IgdGhpcyBjb3VudHJ5CisJCQkJCQkJaXNvMkxpc3QgPSBHZW5VdGlscy5sb2FkSVNPMihpc28zMTY2XzIpOworCQkJCQkJfQorCisJCQkJCQkvLyBUaGlzIHZhcmlhYmxlIGluZGljYXRlcyBhIHRyYW5zaXRpb24gaW4gb3VyIGRhdGEKKwkJCQkJCS8vIHByb2Nlc3NpbmcKKwkJCQkJCWJvb2xlYW4gdHJhbnNpdGlvbiA9IChsZXZlbCAhPSBvbGRsZXZlbCkgPyB0cnVlIDogZmFsc2U7CisKKwkJCQkJCS8vIFRoZSBjdXJyZW50IGVudGl0eSB3ZSBhcmUgZGVhbGluZyB3aXRoLgorCQkJCQkJLy8gQmFzZWQgb24gaXRzIGFkbWluIGxldmVsIGl0IGNhbiBiZSBhIGNvdW50cnksIGEKKwkJCQkJCS8vIGNvdW50eSwgZXRjOworCQkJCQkJU3RyaW5nIGN1cnJlbnQgPSBudWxsOworCisJCQkJCQkvLyBEZXNjcmlwdG9yIGZvciBjdXJyZW50IGVudHJ5LgorCQkJCQkJU3RyaW5nIGRlc2NyaXB0b3IgPSBudWxsOworCisJCQkJCQlpZiAodHJhbnNpdGlvbiA9PSB0cnVlKSB7CisJCQkJCQkJLy8gVXNlIHByZXZpb3VzIGxldmVsIHRvIGRldGVjdCB0cmFuc2l0aW9ucy4KKwkJCQkJCQlvbGRsZXZlbCA9IGxldmVsOworCisJCQkJCQkJLy8gUmVzZXQgdGhlIHByZXZpb3VzIGVudGl0eQorCQkJCQkJCWlzbGFuZCA9ICIgIjsgLy8kTk9OLU5MUy0xJAorCisJCQkJCQkJLy8gUmVzZXQgY291bnRlciBvZiBVTktOT1dOIGFuZCBOLkEuIGVudHJpZXMuCisJCQkJCQkJdW5rQ291bnRlciA9IDE7CisJCQkJCQkJLy8gQ2xvc2UgdGhlIHByZXZpb3VzIGZpbGUKKwkJCQkJCQlpZiAoZ21sRmlsZSAhPSBudWxsKSB7CisJCQkJCQkJCW91dHB1dCA9IGNsb3NlUG9seWdvbklzbGFuZFRhZ3MoKTsKKwkJCQkJCQkJb3V0cHV0ICs9IGdldENsb3NpbmdUYWdzKCk7CisJCQkJCQkJCUdlblV0aWxzLmFkZERhdGEoZ21sRmlsZSwgb3V0cHV0KTsKKwkJCQkJCQkJZ21sRmlsZS5jbG9zZSgpOworCQkJCQkJCX0KKworCQkJCQkJCS8vIENsZWFyIHRoZSBsaXN0IG9mIHVuaXF1ZSBwb2x5Z29ucworCQkJCQkJCWlmIChwb2x5Z29ucyAhPSBudWxsKSB7CisJCQkJCQkJCXBvbHlnb25zLmNsZWFyKCk7CisJCQkJCQkJfQorCisJCQkJCQkJLy8gR2V0IGEgbmV3LCBlbXB0eSBwb2x5Z29uIGxpc3QKKwkJCQkJCQlwb2x5Z29ucyA9IG5ldyBBcnJheUxpc3Q8U1RFTVBvbHlnb24+KCk7CisKKwkJCQkJCQkvLyBJZiB0aGUgZGlyZWN0b3J5IGRvZXMgbm90IGV4aXN0IGZvciB0aGlzIGNvdW50cnksCisJCQkJCQkJLy8gY3JlYXRlIGl0IHVzaW5nIElTTyBhbHBoYTMgY29kZS4KKwkJCQkJCQlGaWxlIGNvdW50cnlEaXIgPSBuZXcgRmlsZShvdXRwdXREaXIKKwkJCQkJCQkJCSsgaXNvQ29kZS5nZXRBbHBoYTMoKSk7CisKKwkJCQkJCQlpZiAoY291bnRyeURpciAhPSBudWxsCisJCQkJCQkJCQkmJiBjb3VudHJ5RGlyLmV4aXN0cygpID09IGZhbHNlKSB7CisJCQkJCQkJCS8vIERpcmVjdG9yeSBkb2VzIG5vdCBleGlzdC4gQ3JlYXRlIGl0LgorCQkJCQkJCQljb3VudHJ5RGlyLm1rZGlyKCk7CisJCQkJCQkJfQorCisJCQkJCQkJLy8gT3BlbiB0aGUgd3JpdGVyIGZvciB0aGUgcmVkdWNlZCBkYXRhIGZpbGUKKwkJCQkJCQlpZiAocmVkdWNlZEZpbGUgPT0gbnVsbCkgeworCQkJCQkJCQkvLyBOYW1lIGZvciB0aGUgcmVkdWNlZCBkYXRhIGZpbGUuCisJCQkJCQkJCWZpbGVOYW1lID0gY291bnRyeURpcgorCQkJCQkJCQkJCSsgIlxcIiAvLyROT04tTkxTLTEkCisJCQkJCQkJCQkJKyBpc29Db2RlLmdldEFscGhhMygpCisJCQkJCQkJCQkJKyAiX1JFRFVDRURfMS50eHQiOyAvLyROT04tTkxTLTEkCisJCQkJCQkJCXJlZHVjZWRGaWxlID0gR2VuVXRpbHMub3BlbldyaXRlcihmaWxlTmFtZSk7CisJCQkJCQkJfQorCisJCQkJCQkJLy8gQ3JlYXRlIHRoZSBmaWxlIG5hbWUgZm9yIHRoZSByZWR1Y2VkIEdNTCBmaWxlLgorCQkJCQkJCWZpbGVOYW1lID0gY291bnRyeURpciArICJcXCIgKyBpc29Db2RlLmdldEFscGhhMygpIC8vJE5PTi1OTFMtMSQKKwkJCQkJCQkJCSsgIl8iICsgbGV2ZWwgKyAiX1JFRFVDRURfTUFQXzEueG1sIjsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCisKKwkJCQkJCQkvLyBPcGVuIHRoZSB3cml0ZXIgZm9yIHRoZSBuZXcgR01MIGZpbGUKKwkJCQkJCQlnbWxGaWxlID0gR2VuVXRpbHMub3BlbldyaXRlcihmaWxlTmFtZSk7CisKKwkJCQkJCQkvLyBBZGQgdGhlIGhlYWRlciBvZiB0aGUgZmlsZQorCQkJCQkJCW91dHB1dCA9IGdldE9wZW5pbmdUYWdzKGlzb0NvZGUsIGxldmVsKTsKKworCQkJCQkJCS8vIFdyaXRlIGRhdGEKKwkJCQkJCQlHZW5VdGlscy5hZGREYXRhKGdtbEZpbGUsIG91dHB1dC50cmltKCkpOworCisJCQkJCQl9IC8vIGlmKCB0cmFuc2l0aW9uID09IHRydWUgKQorCisJCQkJCQlzd2l0Y2ggKGxldmVsKSB7CisKKwkJCQkJCWNhc2UgRGF0YVR5cGVzLkxFVkVMXzA6CisJCQkJCQkJY3VycmVudCA9IGlzb0NvZGUuZ2V0QWxwaGEzKCk7CisJCQkJCQkJYnJlYWs7CisKKwkJCQkJCWNhc2UgRGF0YVR5cGVzLkxFVkVMXzE6CisJCQkJCQkJY3VycmVudCA9IGl0ZW1zW0lTT0RhdGEuQURNSU4xX05BTUVdLnRvVXBwZXJDYXNlKCk7CisJCQkJCQkJYnJlYWs7CisKKwkJCQkJCWNhc2UgRGF0YVR5cGVzLkxFVkVMXzI6CisJCQkJCQkJY3VycmVudCA9IGl0ZW1zW0lTT0RhdGEuQURNSU4yX05BTUVdLnRvVXBwZXJDYXNlKCk7CisJCQkJCQkJYnJlYWs7CisKKwkJCQkJCX0gLy8gc3dpdGNoCisKKwkJCQkJCS8vIEhhbmRsZSBVTktOT1dOIGFuZCBOLkEuIGVudHJpZXMgZGlmZmVyZW50bHkuCisJCQkJCQlpZiAoY3VycmVudC5lcXVhbHMoIlVOS05PV04iKSB8fCBjdXJyZW50LmVxdWFscygiTi5BLiIpKSB7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAorCisJCQkJCQkJaWYgKGxldmVsID09IDEpIHsKKwkJCQkJCQkJY3VycmVudCA9IGlzb0NvZGUuZ2V0QWxwaGEyKCkgKyAiLVVOSy0iIC8vJE5PTi1OTFMtMSQKKwkJCQkJCQkJCQkrIFN0cmluZy52YWx1ZU9mKHVua0NvdW50ZXIrKyk7CisKKwkJCQkJCQl9IGVsc2UgeworCQkJCQkJCQkvLyBMZXZlbCAyIGRhdGEuCisJCQkJCQkJCWN1cnJlbnQgPSBpc29Db2RlLmdldEFscGhhMygpICsgIi5MMi4iIC8vJE5PTi1OTFMtMSQKKwkJCQkJCQkJCQkrIFN0cmluZy52YWx1ZU9mKHVua0NvdW50ZXIrKyk7CisJCQkJCQkJfQorCQkJCQkJfQorCisJCQkJCQkvLyBXZSBnZXQgdGhlIGRlc2NyaXB0b3IgZm9yIGFkbWluaXN0cmF0aW9uIGVudGl0aWVzCisJCQkJCQkvLyBkaWZmZXJlbnRseSBiYXNlZCBvbiBpdHMgbGV2ZWwuCisKKwkJCQkJCWlmIChsZXZlbCA9PSAyKSB7CisKKwkJCQkJCQlpZiAobGV4MURhdGFTZXQgPT0gbnVsbCAmJiBsZXgyRGF0YVNldCA9PSBudWxsKSB7CisKKwkJCQkJCQkJLy8gQ29tcG9zZSB0aGUgZmlsZSBuYW1lcyBmb3IgdGhlIGxleCBmaWxlcyBmb3IKKwkJCQkJCQkJLy8gdGhpcworCQkJCQkJCQkvLyBjb3VudHJ5LgorCQkJCQkJCQlsZXhBZG1pbjFGaWxlID0gbGV4RGlyICsgaXNvQ29kZS5nZXRBbHBoYTMoKQorCQkJCQkJCQkJCSsgIlxcIiArIGlzb0NvZGUuZ2V0QWxwaGEzKCk7IC8vJE5PTi1OTFMtMSQKKwkJCQkJCQkJbGV4QWRtaW4yRmlsZSA9IGxleEFkbWluMUZpbGU7CisJCQkJCQkJCWxleEFkbWluMUZpbGUgKz0gIl9BRE1JTjFfTEVYLnR4dCI7IC8vJE5PTi1OTFMtMSQKKwkJCQkJCQkJbGV4QWRtaW4yRmlsZSArPSAiX0FETUlOMl9MRVgudHh0IjsgLy8kTk9OLU5MUy0xJAorCisJCQkJCQkJCS8vIExvYWQgdGhlIGxleDEgYW5kIGxleDIgZmlsZXMgZm9yIHRoaXMKKwkJCQkJCQkJLy8gY291bnRyeS4KKwkJCQkJCQkJbGV4MURhdGFTZXQgPSBHZW5VdGlscworCQkJCQkJCQkJCS5wb3B1bGF0ZUxpc3QobGV4QWRtaW4xRmlsZSk7CisJCQkJCQkJCWxleDJEYXRhU2V0ID0gR2VuVXRpbHMKKwkJCQkJCQkJCQkucG9wdWxhdGVMaXN0KGxleEFkbWluMkZpbGUpOworCisJCQkJCQkJCS8vIENyZWF0ZSBhIG1ldGhvZCB0byBzZWFyY2ggZm9yIGFuIGl0ZW0gb24gYQorCQkJCQkJCQkvLyBsaXN0IG9mIGxleCBkYXRhIG9iamVjdHMuCisJCQkJCQkJCWxleDFMaXN0ID0gR2VuVXRpbHMuY3JlYXRlTGV4MUxpc3QobGV4MURhdGFTZXQpOworCQkJCQkJCQlsZXgyTGlzdCA9IEdlblV0aWxzLmNyZWF0ZUxleDJMaXN0KGxleDJEYXRhU2V0KTsKKworCQkJCQkJCX0KKworCQkJCQkJCS8vIENvbXBvc2UgdGhlIGxldmVsMiBkZXNjcmlwdG9yIHVzaW5nIHRoZSBsZXggZGF0YToKKworCQkJCQkJCS8vIFNURVAgMTogRG8gYSBsb29rIHVwIGluIHRoZSBsZXggMiBsaXN0cy4KKworCQkJCQkJCS8vIEdldCB0aGUgbGV4IDIgb2JqZWN0IGZvciB0aGUgY3VycmVudCBlbnRyeS4KKwkJCQkJCQlMZXgyT2JqIGxleDJDdXJyZW50ID0gR2VuVXRpbHMubGV4Mkxvb2t1cChsZXgyTGlzdCwKKwkJCQkJCQkJCWl0ZW1zW0lTT0RhdGEuQURNSU4xX05BTUVdLCBjdXJyZW50KTsKKworCQkJCQkJCS8vIEdldCB0aGUgbGV4MU9iamVjdCB0byB3aGljaCBsZXgyQ3VycmVudCBiZWxvbmdzCisJCQkJCQkJTGV4MU9iaiBsZXgxQ3VycmVudCA9IEdlblV0aWxzLmxleDFMb29rdXAobGV4MUxpc3QsCisJCQkJCQkJCQlsZXgyQ3VycmVudC5nZXRBZG1pbjEoKSk7CisKKwkJCQkJCQlpZiAobGV4MUN1cnJlbnQuZ2V0RGVzY3JpcHRvcigpLmNvbnRhaW5zKCJVUy0iKSkgeyAvLyROT04tTkxTLTEkCisJCQkJCQkJCS8vIFNURVAgMjogcGllY2UgdG9nZXRoZXIgdGhlIElEIHVzaW5nIHRoZQorCQkJCQkJCQkvLyBwcm9wZXIgbGV4IG9iamVjdHMgOiB0aGUgVVNBIGlzIGEgc3BlY2lhbAorCQkJCQkJCQkvLyBjYXNlCisJCQkJCQkJCWRlc2NyaXB0b3IgPSBHZW5VdGlscy5nZXRVU0FEZXNjcmlwdG9yKAorCQkJCQkJCQkJCWxleDJDdXJyZW50LmdldEFkbWluMigpLCBHZW5VdGlscworCQkJCQkJCQkJCQkJLmV4dHJhY3RBbHBoYTIobGV4MUN1cnJlbnQKKwkJCQkJCQkJCQkJCQkJLmdldERlc2NyaXB0b3IoKSksCisJCQkJCQkJCQkJdXNhRGVzY3JpcHRvckxpc3QpOworCisJCQkJCQkJfSBlbHNlIHsKKwkJCQkJCQkJLy8gU1RFUCAyOiBwaWVjZSB0b2dldGhlciB0aGUgSUQgdXNpbmcgdGhlCisJCQkJCQkJCS8vIHByb3BlciBsZXggb2JqZWN0cy4KKwkJCQkJCQkJZGVzY3JpcHRvciA9IGxleDFDdXJyZW50LmdldERlc2NyaXB0b3IoKQorCQkJCQkJCQkJCSsgIi1HIiAvLyROT04tTkxTLTEkCisJCQkJCQkJCQkJKyBsZXgxQ3VycmVudC5nZXRGb3JtYXR0ZWRJbmRleCgpCisJCQkJCQkJCQkJKyBsZXgyQ3VycmVudC5nZXRGb3JtYXR0ZWRJbmRleCgpOworCQkJCQkJCX0KKworCQkJCQkJCWlmIChjdXJyZW50LmNvbnRhaW5zKCIuTDIuIikpIHsgLy8kTk9OLU5MUy0xJAorCQkJCQkJCQljdXJyZW50ID0gZGVzY3JpcHRvcjsKKwkJCQkJCQl9CisKKwkJCQkJCX0gZWxzZSB7CisJCQkJCQkJLy8gQ29tcG9zZSBkZXNjcmlwdG9yIGZvciBsIDEgYW5kIGwgMCBkYXRhCisJCQkJCQkJLy8gR2V0IHRoZSBkZXNjcmlwdG9yIGZvciB0aGlzIGVudGl0eS4KKwkJCQkJCQlkZXNjcmlwdG9yID0gR2VuVXRpbHMuZ2V0SVNPMkRlc2NyaXB0b3IoaXNvMkxpc3QsCisJCQkJCQkJCQljdXJyZW50LCBpc29Db2RlLmdldEFscGhhMigpKTsKKworCQkJCQkJCS8vIElmIHdlIGNhbnQgZmluZCB0aGUgZGVzY3JpcHRvciwgdGhlbiBsb29rIGluIHRoZQorCQkJCQkJCS8vIGZpeCBsaXN0LgorCQkJCQkJCWlmIChkZXNjcmlwdG9yLmVxdWFscyhjdXJyZW50KSA9PSB0cnVlKSB7CisJCQkJCQkJCS8vIExvb2sgZm9yIGEgZGVzY3JpcHRvciBpbiB0aGUgZml4IGZpbGUKKwkJCQkJCQkJZGVzY3JpcHRvciA9IEdlblV0aWxzLmdldEZpeENvZGUoY29kZWZpeExpc3QsCisJCQkJCQkJCQkJY3VycmVudCwgaXRlbXNbSVNPRGF0YS5DT1VOVFJZX05BTUVdKTsKKwkJCQkJCQl9CisKKwkJCQkJCX0KKworCQkJCQkJLy8gVXRpbExvZ2dlci5sb2dJbmZvcm1hdGlvbigiRGVzY3JpcHRvciBpcyA6ICIgKyBkZXNjcmlwdG9yCisJCQkJCQkvLyArICIgYXQgbGV2ZWwgOiAiICsgbGV2ZWwgKyAiIGZvciAiICsgY3VycmVudCk7CisKKwkJCQkJCS8vIENyZWF0ZSBhIFNURU0gcG9seWdvbiB3aXRoIHRoaXMgcG9seWdvbiBkYXRhCisJCQkJCQlTVEVNUG9seWdvbiBwb2x5Z29uID0gbmV3IFNURU1Qb2x5Z29uKGJ1ZmZlciwgbGV2ZWwpOworCisJCQkJCQkvLyBDaGVjayB0aGF0IHRoaXMgaXMgaW5kZWVkIGEgU1RFTSBwb2x5Z29uCisJCQkJCQlpZiAoaXNQb2x5Z29uKHBvbHlnb24pICE9IHRydWUpIHsKKwkJCQkJCQkvLyBOb3QgYSBwb2x5Z29uLCBpZ25vcmUuCisJCQkJCQkJY29udGludWU7CisJCQkJCQl9CisKKwkJCQkJCS8vIENvbXB1dGUgYSBtYXAgb2YgYW5nbGUgdmFsdWVzLgorCQkJCQkJTGlzdDxTdHJpbmc+IHBvaW50RGF0YUxpc3QgPSBjb21wdXRlSW52ZXJzZUNvc2luZXMocG9seWdvbik7CisKKwkJCQkJCS8vIE5vdyBhcHBseSByZWR1Y3Rpb24gOiBnZXQgcmlkIG9mIGFsbCBwb2ludHMgd2l0aAorCQkJCQkJLy8gYW5nbGVzIGxlc3MgdGhhbiBvciBlcXVhbCB0byBhbHBoYSBkZWdyZWVzCisJCQkJCQlkb3VibGUgYWxwaGEgPSBEb3VibGUucGFyc2VEb3VibGUodGhyZXNob2xkKTsKKwkJCQkJCUxpc3Q8U3RyaW5nPiByZWR1Y2VkUG9pbnREYXRhTGlzdCA9IHJlZHVjZShhbHBoYSwKKwkJCQkJCQkJcG9pbnREYXRhTGlzdCk7CisKKwkJCQkJCS8vIFVwZGF0ZSBHbG9iYWwgU3RhdHMgd2l0aCByZXN1bHRzL2RhdGEgZnJvbSB0aGUKKwkJCQkJCS8vIHJlZHVjdGlvbi4KKwkJCQkJCXVwZGF0ZUdsb2JhbFN0YXRzKHBvaW50RGF0YUxpc3Quc2l6ZSgpLAorCQkJCQkJCQlyZWR1Y2VkUG9pbnREYXRhTGlzdC5zaXplKCkpOworCisJCQkJCQkvLyBTaG93IHNvbWUgb2YgdGhlIHN0YXRzIGFmdGVyIGVhY2ggcmVkdWN0aW9uLgorCQkJCQkJLy8gc2hvd1N0YXRzKHBvaW50RGF0YUxpc3QsIHJlZHVjZWRQb2ludERhdGFMaXN0LCAxKTsKKworCQkJCQkJLy8gUHV0IGFsbCB0aGUgcmVtYWluaW5nIHBvaW50cyBpbnRvIGEgbmV3IGJ1ZmZlcgorCQkJCQkJU3RyaW5nIHJlZHVjZWRQb2x5Z29uRGF0YUJ1ZmZlciA9IGV4dHJhY3RMaXN0SW50b1N0cmluZyhyZWR1Y2VkUG9pbnREYXRhTGlzdCk7CisKKwkJCQkJCS8vIFJlY29uc3RydWN0IGEgYnVmZmVyIHdpdGggdGhlIHJlZHVjZWQgcG9pbnQtZGF0YS4KKworCQkJCQkJLy8gRXh0cmFjdCBhbGwgZGF0YSBmcm9tIG9sZCBidWZmZXIgZXhjZXB0IHRoZSBwb2x5Z29uCisJCQkJCQkvLyBkYXRhIDoKKwkJCQkJCVN0cmluZyBub25Qb2x5Z29uRGF0YUJ1ZmZlciA9IGV4dHJhY3ROb25Qb2x5Z29uRGF0YSgKKwkJCQkJCQkJYnVmZmVyLmxlbmd0aCgpIDwgQlVGRkVSX01BWCA/IGJ1ZmZlciA6IGJ1ZmZlcgorCQkJCQkJCQkJCS5zdWJzdHJpbmcoQlVGRkVSX01JTiwgQlVGRkVSX01BWCksCisJCQkJCQkJCWxldmVsKTsKKworCQkJCQkJLy8gTm93IHB1dCB0b2dldGhlciBhIG5ldyBidWZmZXIgd2hpY2ggaGFzIGJlZW4gcmVkdWNlZAorCQkJCQkJU3RyaW5nIHJlZHVjZWRCdWZmZXIgPSBub25Qb2x5Z29uRGF0YUJ1ZmZlcgorCQkJCQkJCQkrIHJlZHVjZWRQb2x5Z29uRGF0YUJ1ZmZlciArICJcbiI7IC8vJE5PTi1OTFMtMSQKKworCQkJCQkJLy8gV3JpdGUgcmVkdWNlZCBkYXRhIGJ1ZmZlciBpbnRvIHRoZSByZWR1Y2VkIGRhdGEgZmlsZQorCQkJCQkJR2VuVXRpbHMuYWRkRGF0YShyZWR1Y2VkRmlsZSwgcmVkdWNlZEJ1ZmZlcik7CisKKwkJCQkJCS8vIERlbGV0ZSB0aGUgb2xkIHBvbHlnb24KKwkJCQkJCXBvbHlnb24uY2xlYXIoKTsKKwkJCQkJCXBvbHlnb24gPSBudWxsOworCisJCQkJCQkvLyBDcmVhdGUgYSBuZXcsIHJlZHVjZWQgU1RFTSBwb2x5Z29uIHdpdGggdGhlIG5ldyBkYXRhCisJCQkJCQkvLyBidWZmZXIKKwkJCQkJCXBvbHlnb24gPSBuZXcgU1RFTVBvbHlnb24ocmVkdWNlZEJ1ZmZlciwgbGV2ZWwpOworCisJCQkJCQkvLyBDaGVjayB0aGF0IHRoaXMgaXMgaW5kZWVkIGEgU1RFTSBwb2x5Z29uCisJCQkJCQlpZiAoaXNQb2x5Z29uKHBvbHlnb24pICE9IHRydWUpIHsKKwkJCQkJCQlVdGlsTG9nZ2VyLmxvZ0luZm9ybWF0aW9uKCJcdFx0Tm90IGEgcG9seWdvbiEiKTsgLy8kTk9OLU5MUy0xJAorCQkJCQkJCS8vIE5vdCBhIHBvbHlnb24sIGlnbm9yZS4KKwkJCQkJCQljb250aW51ZTsKKwkJCQkJCX0KKworCQkJCQkJLy8gV2Uga25vdyBpdCBpcyBhIHBvbHlnb24sIGJ1dCBub3cgY2hlY2sgdGhhdCBpdHMgbm90CisJCQkJCQkvLyBkdXBsaWNhdGVkLgorCQkJCQkJaWYgKGlzUG9seWdvbkR1cGxpY2F0ZWQocG9seWdvbnMuaXRlcmF0b3IoKSwgcG9seWdvbikgPT0gdHJ1ZSkgeworCQkJCQkJCS8vIFllcywgaXQgaXMgZHVwbGljYXRlZAorCQkJCQkJCWNvbnRpbnVlOworCQkJCQkJfQorCisJCQkJCQkvLyBBZGQgdGhpcyBwb2x5Z29uIHRvIG91ciBsaXN0IG9mIHVuaXF1ZSBwb2x5Z29ucyBzbworCQkJCQkJLy8gdGhhdCB3ZSBjYW4gY2hlY2sgZHVwbGljYXRlcyBvZiB0aGlzIHBvbHlnb24gbGF0ZXIuCisJCQkJCQlwb2x5Z29ucy5hZGQocG9seWdvbik7CisKKwkJCQkJCS8vIENoZWNrIHRvIHNlZSBpZiB0aGlzIHBvbHlnb24gaXMgcGFydCBvZiBhbiBpc2xhbmQgb2YKKwkJCQkJCS8vIHBvbHlnb25zIG9yIGEgc2ltcGxlIHBvbHlnb24KKwkJCQkJCWlmIChsZXZlbCA9PSAwKSB7CisJCQkJCQkJLy8gSWYgd2UgYXJlIGF0IGFkbWluIGxldmVsIDAgYW5kIGlzbGFuZCBpcyBub3QKKwkJCQkJCQkvLyBOVUxMLCB0aGVuIHdlIGhhdmUgYW4gaXNsYW5kLgorCQkJCQkJCWlmIChpc2xhbmQuZXF1YWxzKCIgIikpIHsgLy8kTk9OLU5MUy0xJAorCQkJCQkJCQlvdXRwdXQgPSBvcGVuUG9seWdvbklzbGFuZFRhZ3MoZGVzY3JpcHRvcik7CisJCQkJCQkJCWlzbGFuZCA9ICJBZG1pbiBMZXZlbCAwIjsgLy8kTk9OLU5MUy0xJAorCQkJCQkJCX0KKwkJCQkJCQlvdXRwdXQgKz0gYWRkTGluZWFyUmluZ1RhZ3MocmVkdWNlZEJ1ZmZlciwgbGV2ZWwpOworCQkJCQkJfSBlbHNlIHsKKworCQkJCQkJCWlmIChpc2xhbmQuZXF1YWxzKCIgIikgPT0gdHJ1ZSkgeyAvLyROT04tTkxTLTEkCisJCQkJCQkJCW91dHB1dCA9IG9wZW5Qb2x5Z29uSXNsYW5kVGFncyhkZXNjcmlwdG9yKTsKKwkJCQkJCQkJb3V0cHV0ICs9IGFkZExpbmVhclJpbmdUYWdzKHJlZHVjZWRCdWZmZXIsCisJCQkJCQkJCQkJbGV2ZWwpOworCisJCQkJCQkJfSBlbHNlIHsKKworCQkJCQkJCQlpZiAoY3VycmVudC5lcXVhbHMoaXNsYW5kKSA9PSBmYWxzZSkgeworCQkJCQkJCQkJb3V0cHV0ID0gY2xvc2VQb2x5Z29uSXNsYW5kVGFncygpOworCQkJCQkJCQkJb3V0cHV0ICs9IG9wZW5Qb2x5Z29uSXNsYW5kVGFncyhkZXNjcmlwdG9yKTsKKwkJCQkJCQkJCW91dHB1dCArPSBhZGRMaW5lYXJSaW5nVGFncyhyZWR1Y2VkQnVmZmVyLAorCQkJCQkJCQkJCQlsZXZlbCk7CisJCQkJCQkJCX0gZWxzZSB7CisJCQkJCQkJCQlvdXRwdXQgPSBhZGRMaW5lYXJSaW5nVGFncyhyZWR1Y2VkQnVmZmVyLAorCQkJCQkJCQkJCQlsZXZlbCk7CisJCQkJCQkJCQlHZW5VdGlscy5hZGREYXRhKGdtbEZpbGUsIG91dHB1dC50cmltKCkpOworCQkJCQkJCQkJY29udGludWU7CisJCQkJCQkJCX0KKwkJCQkJCQl9CisKKwkJCQkJCQlzd2l0Y2ggKGxldmVsKSB7CisKKwkJCQkJCQljYXNlIERhdGFUeXBlcy5MRVZFTF8xOgorCQkJCQkJCQlpc2xhbmQgPSBpdGVtc1tJU09EYXRhLkFETUlOMV9OQU1FXQorCQkJCQkJCQkJCS50b1VwcGVyQ2FzZSgpOworCQkJCQkJCQlicmVhazsKKworCQkJCQkJCWNhc2UgRGF0YVR5cGVzLkxFVkVMXzI6CisJCQkJCQkJCWlzbGFuZCA9IGl0ZW1zW0lTT0RhdGEuQURNSU4yX05BTUVdCisJCQkJCQkJCQkJLnRvVXBwZXJDYXNlKCk7CisJCQkJCQkJCWJyZWFrOworCQkJCQkJCX0KKworCQkJCQkJfQorCisJCQkJCQlHZW5VdGlscy5hZGREYXRhKGdtbEZpbGUsIG91dHB1dC50cmltKCkpOworCisJCQkJCX0gLy8gd2hpbGUgbG9vcAorCisJCQkJCS8vIFJlc2V0IGFsbCBsZXgtcmVsYXRlZCBpdGVtcworCQkJCQlpZiAobGV4MURhdGFTZXQgIT0gbnVsbCkgeworCQkJCQkJbGV4MURhdGFTZXQuY2xlYXIoKTsKKwkJCQkJCWxleDFEYXRhU2V0ID0gbnVsbDsKKwkJCQkJfQorCQkJCQlpZiAobGV4MkRhdGFTZXQgIT0gbnVsbCkgeworCQkJCQkJbGV4MkRhdGFTZXQuY2xlYXIoKTsKKwkJCQkJCWxleDJEYXRhU2V0ID0gbnVsbDsKKwkJCQkJfQorCQkJCQlpZiAobGV4MUxpc3QgIT0gbnVsbCkgeworCQkJCQkJbGV4MUxpc3QuY2xlYXIoKTsKKwkJCQkJCWxleDFMaXN0ID0gbnVsbDsKKwkJCQkJfQorCQkJCQlpZiAobGV4Mkxpc3QgIT0gbnVsbCkgeworCQkJCQkJbGV4Mkxpc3QuY2xlYXIoKTsKKwkJCQkJCWxleDJMaXN0ID0gbnVsbDsKKwkJCQkJfQorCisJCQkJCWxleEFkbWluMUZpbGUgPSBudWxsOworCQkJCQlsZXhBZG1pbjJGaWxlID0gbnVsbDsKKworCQkJCQkvLyBXZSBkb250IG5lZWQgdGhlIElTTyBjb2RlIG9iamVjdCBmb3IgdGhpcyBjb3VudHJ5CisJCQkJCS8vIGFueW1vcmUsIHdlIGFyZSBkb25lIHByb2Nlc3NpbmcgaXQuCisJCQkJCWlzb0NvZGUgPSBudWxsOworCisJCQkJCS8vIENsb3NlIGFsbCBvcGVuIHJlc291cmNlcy4KKwkJCQkJcmVhZGVyLmNsb3NlKCk7CisKKwkJCQkJaWYgKGdtbEZpbGUgIT0gbnVsbCkgeworCQkJCQkJLy8gV3JpdGUgZm9ybWF0dGVkIG91dHB1dAorCQkJCQkJR2VuVXRpbHMuYWRkRGF0YShnbWxGaWxlLCBjbG9zZVBvbHlnb25Jc2xhbmRUYWdzKCkpOworCQkJCQkJR2VuVXRpbHMuYWRkRGF0YShnbWxGaWxlLCBnZXRDbG9zaW5nVGFncygpKTsKKwkJCQkJCWdtbEZpbGUuY2xvc2UoKTsKKwkJCQkJCWdtbEZpbGUgPSBudWxsOworCQkJCQkJVXRpbExvZ2dlci5sb2dJbmZvcm1hdGlvbigiXHRcdEdlbmVyYXRlZCA6ICIgKyBmaWxlTmFtZSk7IC8vJE5PTi1OTFMtMSQKKwkJCQkJCWZpbGVOYW1lID0gbnVsbDsKKwkJCQkJfQorCisJCQkJCWlmIChyZWR1Y2VkRmlsZSAhPSBudWxsKSB7CisJCQkJCQlyZWR1Y2VkRmlsZS5jbG9zZSgpOworCQkJCQkJcmVkdWNlZEZpbGUgPSBudWxsOworCQkJCQl9CisKKwkJCQkJLy8gUnVuIGdhcmJhZ2UgY29sbGVjdGlvbgorCQkJCQkvL1N5c3RlbS5nYygpOworCQkJCX0KKworCQkJCS8vIFNob3cgZ2xvYmFsIHN0YXRzCisJCQkJc2hvd0dsb2JhbFN0YXRzKCk7CisKKwkJCQkvLyBOb3cgY2xlYXIgdGhlIGhhc2ggbWFwCisJCQkJaW5pdEhhc2hNYXAoYW5nbGVWYWx1ZU1hcCk7CisKKwkJCX0gY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKKwkJCQllLnByaW50U3RhY2tUcmFjZSgpOworCQkJfQorCisJCX0KKworCX0KKworCS8qKgorCSAqIEV4dHJhY3QgYWxsIG5vbiBwb2x5Z29uIGRhdGEgZnJvbSB0aGUgYnVmZmVyLiBBbW91bnQgb2Ygbm9uIC0gcG9seWdvbgorCSAqIGRhdGEgdmFyaWVzIGFjY29yZGluZyB0byBsZXZlbC4KKwkgKiAKKwkgKiBAcGFyYW0gYnVmZmVyCisJICogICAgICAgICAgICBhIGJ1ZmZlciBvZiBkaXZhIGRhdGEuCisJICogCisJICogQHBhcmFtIGxldmVsCisJICogICAgICAgICAgICBhZG1pbmlzdHJhdGl2ZSBsZXZlbAorCSAqIAorCSAqIEByZXR1cm4gU3RyaW5nIGFsbCB0aGUgbm9uLXBvbHlnb24gZGF0YS4KKwkgKi8KKwlwdWJsaWMgU3RyaW5nIGV4dHJhY3ROb25Qb2x5Z29uRGF0YShTdHJpbmcgYnVmZmVyLCBpbnQgbGV2ZWwpIHsKKworCQlpbnQgb2Zmc2V0ID0gMDsKKworCQlzd2l0Y2ggKGxldmVsKSB7CisKKwkJY2FzZSBEYXRhVHlwZXMuTEVWRUxfMDoKKwkJCW9mZnNldCA9IDI7CisJCQlicmVhazsKKworCQljYXNlIERhdGFUeXBlcy5MRVZFTF8xOgorCQkJb2Zmc2V0ID0gMzsKKwkJCWJyZWFrOworCisJCWNhc2UgRGF0YVR5cGVzLkxFVkVMXzI6CisJCQlvZmZzZXQgPSA0OworCQkJYnJlYWs7CisKKwkJfQorCisJCS8vIGZpcnN0IG9jY3VycmVuY2Ugb2YgdGhlIGNvbW1hIHNlcGFyYXRvcgorCQlpbnQgYmVnaW5JbmRleCA9IGJ1ZmZlci5pbmRleE9mKCIsIik7IC8vJE5PTi1OTFMtMSQKKwkJaW50IGVuZEluZGV4ID0gYmVnaW5JbmRleDsKKworCQlpbnQgaSA9IDE7CisKKwkJd2hpbGUgKGkgPCBvZmZzZXQpIHsKKwkJCWVuZEluZGV4ID0gYnVmZmVyLmluZGV4T2YoIiwiLCBiZWdpbkluZGV4ICsgMSk7IC8vJE5PTi1OTFMtMSQKKwkJCWJlZ2luSW5kZXggPSBlbmRJbmRleDsKKwkJCWkrKzsKKwkJfQorCisJCWJlZ2luSW5kZXggPSAwOworCisJCS8vIGV4dHJhY3QgdGhlIHNlcXVlbmNlIHVwIHRvIGluZGV4CisJCXJldHVybiBidWZmZXIuc3Vic3RyaW5nKGJlZ2luSW5kZXgsIGVuZEluZGV4ICsgMSk7CisKKwl9CisKKwkvKioKKwkgKiBGaW5kIGFuZCBzaG93IHRoZSBkaWZmZXJlbmNlcyBiZXR3ZWVuIHRoZSBub3JtYWwgcG9pbnQtZGF0YSBsaXN0IGFuZCB0aGUKKwkgKiByZWR1Y2VkIHBvaW50LWRhdGEgbGlzdC4KKwkgKiAKKwkgKiBAcGFyYW0gbm9ybWFsTGlzdCAtCisJICogICAgICAgICAgICBhIGxpc3Qgd2l0aCB0aGUgb3JpZ2luYWwgcG9pbnQgZGF0YQorCSAqIEBwYXJhbSByZWR1Y2VkTGlzdCAtCisJICogICAgICAgICAgICBhIGxpc3Qgd2l0aCB0aGUgcmVkdWNlZCBwb2ludCBkYXRhCisJICogCisJICogQHBhcmFtIHBhc3MgLQorCSAqICAgICAgICAgICAgdGhlIGN1cnJlbnQgcGFzcyBvciBpdGVyYXRpb24KKwkgKiAKKwkgKi8KKwlwdWJsaWMgdm9pZCBzaG93U3RhdHMoTGlzdDxTdHJpbmc+IG5vcm1hbExpc3QsIExpc3Q8U3RyaW5nPiByZWR1Y2VkTGlzdCwKKwkJCWludCBwYXNzKSB7CisKKwkJLy8gZG91YmxlIG5vcm1hbFNpemUgPSBub3JtYWxMaXN0LnNpemUoKTsKKwkJLy8gZG91YmxlIHJlZHVjZWRTaXplID0gcmVkdWNlZExpc3Quc2l6ZSgpOworCQkvLyBkb3VibGUgZGlmID0gbm9ybWFsU2l6ZSAtIHJlZHVjZWRTaXplOworCQkvLyBkb3VibGUgcmF0aW8gPSBkaWYgLyBub3JtYWxTaXplOworCQkvLyBkb3VibGUgcGVyY2VudCA9IHJhdGlvICogMTAwLjA7CisKKwkJVXRpbExvZ2dlci5sb2dJbmZvcm1hdGlvbigiXHRcdCoqKioqKioqKioqKiBET1dOIFNBTVBMSU5HIFNUQVRTIEZPUiAiICsgcGFzcyAvLyROT04tTkxTLTEkCisJCQkJKyAiIElURVJBVElPTiAqKioqKioqKioqKipcbiIpOyAvLyROT04tTkxTLTEkCisKKwkJLy8gQ3JlYXRlIGFuZCBwcmludCBwcm9maWxlIG9mIHRoZSBhbmdsZSB2YWx1ZXMKKwkJVXRpbExvZ2dlci5sb2dJbmZvcm1hdGlvbigiXHRcdFByb2ZpbGluZyByZXN1bHRzIEJFRk9SRSByZWR1Y3Rpb24gOiBcblxuIik7IC8vJE5PTi1OTFMtMSQKKworCQlwcm9maWxlKG5vcm1hbExpc3QpOworCQlzaG93UHJvZmlsZSgpOworCisJCS8vIFV0aWxMb2dnZXIubG9nSW5mb3JtYXRpb24oIlRvdGFsIHBvaW50cyBpbiBvcmlnaW5hbCBwb2x5Z29uIDogIgorCQkvLyArIG5vcm1hbExpc3Quc2l6ZSgpKTsKKwkJLy8gVXRpbExvZ2dlci5sb2dJbmZvcm1hdGlvbigiVG90YWwgcG9pbnRzIGluIHJlZHVjZWQgcG9seWdvbiA6ICIKKwkJLy8gKyByZWR1Y2VkTGlzdC5zaXplKCkpOworCQkvLyBVdGlsTG9nZ2VyLmxvZ0luZm9ybWF0aW9uKCJUb3RhbCBwb2ludHMgbWFya2VkIGZvciBkZWxldGlvbiA6ICIgKyBkaWYpOworCQkvLworCQkvLyBVdGlsTG9nZ2VyLmxvZ0luZm9ybWF0aW9uKCJQZXJjZW50YWdlIG9mIHJlZHVjdGlvbiA6ICIgKyBwZXJjZW50ICsgIiUiKTsKKwkJLy8KKwkJVXRpbExvZ2dlci5sb2dJbmZvcm1hdGlvbigiXHRcdFByb2ZpbGluZyByZXN1bHRzIEFGVEVSIHJlZHVjdGlvbiA6IFxuXG4iKTsgLy8kTk9OLU5MUy0xJAorCisJCXByb2ZpbGUocmVkdWNlZExpc3QpOworCQlzaG93UHJvZmlsZSgpOworCQlVdGlsTG9nZ2VyLmxvZ0luZm9ybWF0aW9uKCJcblxuXG4iKTsgLy8kTk9OLU5MUy0xJAorCisJfQorCisJLyoqCisJICogVXBkYXRlIGdsb2JhbCBzdGF0cy4KKwkgKiAKKwkgKiBAcGFyYW0gbm9ybWFsU2l6ZSAtCisJICogICAgICAgICAgICB0aGUgdG90YWwgbnVtYmVyIG9mIHBvaW50cyBiZWZvcmUgcmVkdWN0aW9uCisJICogCisJICogQHBhcmFtIHJlZHVjZWRTaXplIC0KKwkgKiAgICAgICAgICAgIHRoZSB0b3RhbCBudW1iZXIgb2YgcG9pbnRzIGFmdGVyIHJlZHVjdGlvbgorCSAqIAorCSAqLworCXB1YmxpYyB2b2lkIHVwZGF0ZUdsb2JhbFN0YXRzKGRvdWJsZSBub3JtYWxTaXplLCBkb3VibGUgcmVkdWNlZFNpemUpIHsKKworCQlkb3VibGUgZGlmID0gbm9ybWFsU2l6ZSAtIHJlZHVjZWRTaXplOworCQlkb3VibGUgcmF0aW8gPSBkaWYgLyBub3JtYWxTaXplOworCQlkb3VibGUgcGVyY2VudCA9IHJhdGlvICogMTAwLjA7CisKKwkJZ2xvYmFsTWluUGVyY2VudCA9IChnbG9iYWxNaW5QZXJjZW50ID4gcGVyY2VudCkgPyBwZXJjZW50CisJCQkJOiBnbG9iYWxNaW5QZXJjZW50OworCisJCWdsb2JhbE1heFBlcmNlbnQgPSAoZ2xvYmFsTWF4UGVyY2VudCA8IHBlcmNlbnQpID8gcGVyY2VudAorCQkJCTogZ2xvYmFsTWF4UGVyY2VudDsKKworCQlnbG9iYWxQZXJjZW50ICs9IHBlcmNlbnQ7CisKKwkJdG90YWxQb2ludHMgKz0gbm9ybWFsU2l6ZTsKKworCQl0b3RhbFJlbW92ZWQgKz0gcmVkdWNlZFNpemU7CisKKwkJdG90YWxQb2x5Z29ucyArPSAxOworCisJfQorCisJLyoqCisJICogUHJpbnQgdGhlIGdsb2JhbCBzdGF0cworCSAqLworCXB1YmxpYyB2b2lkIHNob3dHbG9iYWxTdGF0cygpIHsKKworCQlVdGlsTG9nZ2VyLmxvZ0luZm9ybWF0aW9uKCJcdFx0KioqKioqKioqKioqKiogR0xPQkFMIFNUQVRTICoqKioqKioqKioqKioqIik7IC8vJE5PTi1OTFMtMSQKKworCQlVdGlsTG9nZ2VyLmxvZ0luZm9ybWF0aW9uKCJcdFx0VG90YWwgcG9seWdvbnMgOiAiICsgdG90YWxQb2x5Z29ucyk7IC8vJE5PTi1OTFMtMSQKKworCQlVdGlsTG9nZ2VyLmxvZ0luZm9ybWF0aW9uKCJcdFx0VG90YWwgcG9pbnRzIDogIiArIHRvdGFsUG9pbnRzKTsgLy8kTk9OLU5MUy0xJAorCisJCVV0aWxMb2dnZXIubG9nSW5mb3JtYXRpb24oIlx0XHRBdmcgcG9pbnRzIHBlciBwb2x5Z29uIDogIiArIHRvdGFsUG9pbnRzIC8vJE5PTi1OTFMtMSQKKwkJCQkvIHRvdGFsUG9seWdvbnMpOworCisJCVV0aWxMb2dnZXIubG9nSW5mb3JtYXRpb24oIlx0XHRHbG9iYWwgcmVkdWN0aW9uIDogIiArIGdsb2JhbFBlcmNlbnQgLy8kTk9OLU5MUy0xJAorCQkJCS8gdG90YWxQb2x5Z29ucyArICIlIik7IC8vJE5PTi1OTFMtMSQKKworCQlTeXN0ZW0ub3V0CisJCQkJLnByaW50bG4oIlx0XHRHbG9iYWwgTUlOIHJlZHVjdGlvbiAgOiAiICsgZ2xvYmFsTWluUGVyY2VudCArICIlIik7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAorCisJCVN5c3RlbS5vdXQKKwkJCQkucHJpbnRsbigiXHRcdEdsb2JhbCBNQVggcmVkdWN0aW9uICA6ICIgKyBnbG9iYWxNYXhQZXJjZW50ICsgIiUiKTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCisKKwl9CisKKwkvKioKKwkgKiBKdXN0IHByaW50IHRoZSBwcm9maWxlIGZvciB0aGUgcG9seWdvbiBwb2ludC1kYXRhCisJICogCisJICovCisJcHVibGljIHZvaWQgc2hvd1Byb2ZpbGUoKSB7CisJCS8vIFNvcnQgdGhlIGtleXMKKwkJU2V0PERvdWJsZT4ga2V5cyA9IGFuZ2xlVmFsdWVNYXAua2V5U2V0KCk7CisJCUxpc3Q8RG91YmxlPiBzb3J0ZWRLZXlzID0gbmV3IEFycmF5TGlzdDxEb3VibGU+KGtleXMpOworCQlDb2xsZWN0aW9ucy5zb3J0KHNvcnRlZEtleXMpOworCisJCVV0aWxMb2dnZXIubG9nSW5mb3JtYXRpb24oIlx0XHRGcmVxdWVuY2llcyBvZiBhbmdsZXMgOiAgIik7IC8vJE5PTi1OTFMtMSQKKworCQkvLyBQcmludCB0aGUgbnVtYmVyIG9mIG9jY3VycmVuY2VzIGZvciBlYWNoIHZhbHVlCisJCUl0ZXJhdG9yIGtleUl0ZXIgPSBzb3J0ZWRLZXlzLml0ZXJhdG9yKCk7CisJCXdoaWxlIChrZXlJdGVyLmhhc05leHQoKSkgeworCisJCQkvLyBHZXQgdGhlIGtleQorCQkJRG91YmxlIGtleSA9IChEb3VibGUpIGtleUl0ZXIubmV4dCgpOworCisJCQkvLyBHZXQgdGhlIHZhbHVlCisJCQlpbnQgdmFsID0gKGFuZ2xlVmFsdWVNYXAuZ2V0KGtleSkpLmludFZhbHVlKCk7CisKKwkJCVV0aWxMb2dnZXIubG9nSW5mb3JtYXRpb24oIlx0XHQgQW5nbGUgPj0gIiArIGtleSArICIgRnJlcXVlbmN5IDogIiArIHZhbCk7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAorCisJCX0KKworCX0KKworCS8qKgorCSAqIEFsZ29yaXRobSBmb3IgcmVkdWNpbmcgdGhlIGRhdGEgYnkgbWFya2luZyBhbmQgdGhlbiByZW1vdmluZyAobmVhcmx5KSBhbGwKKwkgKiBwb2ludHMgd2l0aCBhbmdsZSBsZXNzIHRoYW4gYWxwaGEuIEFsbCBwb2ludHMgbWFya2VkIGZvciBkZWxldGlvbiBhcmUKKwkgKiBjYWxsZWQgU0FGRS4KKwkgKiAKKwkgKiBAcGFyYW0gYWxwaGEgLQorCSAqICAgICAgICAgICAgdGhlIHRocmVzaG9sZAorCSAqIEBwYXJhbSBsaXN0IC0KKwkgKiAgICAgICAgICAgIGEgbGlzdCBjb250YWluaW5nIGV4dGVuZGVkIHBvaW50IGRhdGEgb2YgdGhlIGZvcm0gOgorCSAqICAgICAgICAgICAgSU5ERVg6TFQ6TEc6QU5HTEU6U0FGRVRZCisJICogCisJICogQHJldHVybiBsaXN0IC0gYSByZWR1Y2VkIGxpc3Qgb2YgcG9pbnRzIHRoYXQgc2hvdWxkIG5vdCBiZSBkZWxldGVkCisJICogICAgICAgICBiZWNhdXNlIHRoZXkgZG9udCBtZWV0IHRoZSBjcml0ZXJpYSAoaS5lLiB0aGVpciBhbmdsZSBpcyBncmVhdGVyCisJICogICAgICAgICB0aGFuIHRocmVzaG9sZCBvciB3ZXJlIG1hcmtlZCBhcyBVTlNBRkUpCisJICogCisJICovCisJcHVibGljIExpc3Q8U3RyaW5nPiByZWR1Y2UoZG91YmxlIGFscGhhLCBMaXN0PFN0cmluZz4gbGlzdCkgeworCisJCS8qKgorCQkgKiBSZW1vdmUgYWxsIHBvaW50cyB3aGljaCBhcmUgc2FmZSB0byByZW1vdmUuCisJCSAqIAorCQkgKiBUbyBiZSBzYWZlLCBhIHBvaW50IHNob3VsZCBzYXRpc2Z5IHR3byBjb25kaXRpb25zIDoKKwkJICogCisJCSAqIDEpIEhhdmUgYW4gYW5nbGUgd2l0aCB2YWx1ZSBsZXNzIHRoYW4gYWxwaGEgZGVncmVzcy4KKwkJICogCisJCSAqIDIpIFdlIENBTk5PVCBtYXJrIFNBRkUgZm9yIGRlbGV0aW9uIHR3byBjb25zZWN1dGl2ZSBwb2ludHMuCisJCSAqIAorCQkgKi8KKworCQkvLyBUaGlzIGxpc3Qgd2lsbCBjb250YWluIG9ubHkgdGhlIGVsZW1lbnRzIHRoYXQgd2Ugc2hvdWxkIG5vdCByZW1vdmUKKwkJTGlzdDxTdHJpbmc+IHJlZHVjZWRMaXN0ID0gbmV3IEFycmF5TGlzdDxTdHJpbmc+KCk7CisKKwkJLy8gU3ltYm9saWMgY29uc3RhbnRzIGZvciBjb250cm9sbGluZyB0aGUgc2xpZGluZyB3aW5kb3cgYWxnb3JpdGhtCisJCWZpbmFsIGludCBTVEFSVCA9IDA7CisJCWZpbmFsIGludCBXSU5ET1dfTEVOR1RIID0gMjsKKworCQkvLyBNdWx0aXBsaWVyIHRvIG9idGFpbiBtaW5pbXVtIGxlbmdodCBhdCB3aGljaCBtYWtlcyBzZW5zZSB0byBydW4gdGhpcworCQkvLyBhbGdvcml0aG06CisJCWZpbmFsIGludCBNVUxUSVBMSUVSID0gMTsKKworCQkvLyBNSU5JTVVNIExFTkdUSCA9IE1VTFRJUExJRVIgKiAoV0lORE9XX0xFTkdUSCArIDEpCisJCWZpbmFsIGludCBNSU5JTVVNX0xFTkdUSCA9IE1VTFRJUExJRVIgKiAoV0lORE9XX0xFTkdUSCArIDEpOworCisJCS8vIEluZGV4ZXMgaW50byB0aGUgc3RyaW5nIGNvbnRhaW5pbmcgZXh0ZW5kZWQgcG9pbnQgZGF0YToKKwkJLy8gSU5ERVg6TFQ6TEc6QU5HTEU6U0FGRVRZCisJCWZpbmFsIGludCBJTkRFWCA9IDA7CisJCWZpbmFsIGludCBMVCA9IDE7CisJCWZpbmFsIGludCBMRyA9IDI7CisJCWZpbmFsIGludCBBTkdMRSA9IDM7CisJCWZpbmFsIGludCBTQUZFVFkgPSA0OworCisJCS8vIE91ciBzbGlkaW5nIHdpbmRvdyBjb3ZlcnMgZXhhY3RseSB0aHJlZSBub2Rlcy4KKwkJU3RyaW5nW10gcDEgPSBudWxsOworCQlTdHJpbmdbXSBwMiA9IG51bGw7CisJCVN0cmluZ1tdIHAzID0gbnVsbDsKKworCQkvLyBBbmdsZSB2YWx1ZXMgZm9yIGVhY2ggb2YgdGhlIHRocmVlIHBvaW50cyBpbiB0aGUgc2xpZGluZyB3aW5kb3cuCisJCWRvdWJsZSBhMSA9IDAuMDsKKwkJZG91YmxlIGEyID0gMC4wOworCQlkb3VibGUgYTMgPSAwLjA7CisKKwkJLy8gU3RhdGUgKFNBRkUgb3IgVU5TQUZFKSBvZiBlYWNoIG9mIHRocmVlIHBvaW50cyBpbiB0aGUgc2xpZGluZyB3aW5kb3cuCisJCVN0cmluZyBzMSA9IFVOS05PV047CisJCVN0cmluZyBzMiA9IFVOS05PV047CisJCVN0cmluZyBzMyA9IFVOS05PV047CisKKwkJLy8gQSBwb2ludGVyIHRvIHRoZSBiZWdpbm5pbmcgYW5kIHRoZSBlbmQgb2YgdGhlIHNsaWRpbmcgd2luZG93LgorCQlpbnQgbGVmdF9ib3JkZXIgPSAwOworCQlpbnQgcmlnaHRfYm9yZGVyID0gbGVmdF9ib3JkZXIgKyBXSU5ET1dfTEVOR1RIOworCisJCS8vIE91ciBjdXJyZW50IHBvc2l0aW9uIHdpdGhpbiB0aGUgc2xpZGluZyB3aW5kb3cuCisJCWludCBpbmRleCA9IFNUQVJUOworCisJCWlmIChsaXN0LnNpemUoKSA8IE1JTklNVU1fTEVOR1RIKSB7CisJCQkvLyBUaGVyZSBpcyBubyBwb2ludCBpbiBydW5uaW5nIHRoaXMgYWxnb3JpdGhtIGlmIHBvaW50cworCQkJLy8gbGVzcyB0aGFuIG1pbmltdW0gdmFsdWUuIE5vIG5lZWQgdG8gcmVkdWNlLgorCQkJcmV0dXJuIGxpc3Q7CisJCX0KKworCQlmaW5hbCBpbnQgRU5EID0gbGlzdC5zaXplKCkgLSAxOworCisJCS8vIFV0aWxMb2dnZXIubG9nSW5mb3JtYXRpb24oIkxpc3Qgc2l6ZSBpcyA6ICIgKyBlbmQpOworCisJCXdoaWxlIChyaWdodF9ib3JkZXIgPD0gRU5EKSB7CisKKwkJCS8vIFVOS05PV04gPT0gTk9UIFlFVCBQUk9DRVNTRUQgLS0gRXZlbnR1YWxseSBpdCB3aWxsIGJlIG1hcmtlZAorCQkJLy8gZWl0aGVyIFNBRkUgb3IgVU5TQUZFCisKKwkJCWJvb2xlYW4gZmxhZyA9IGZhbHNlOworCisJCQkvLyBpZiAocDEgPT0gbnVsbCkgeworCQkJLy8gR2V0IHRoZSB0aHJlZSBpbml0aWFsIHBvaW50cyBjb3ZlcmVkIGJ5IG91ciBzbGlkaW5nIHdpbmRvdy4KKwkJCWluZGV4ID0gbGVmdF9ib3JkZXI7CisJCQlwMSA9IGxpc3QuZ2V0KGluZGV4KyspLnNwbGl0KCI6Iik7IC8vJE5PTi1OTFMtMSQKKwkJCXAyID0gbGlzdC5nZXQoaW5kZXgrKykuc3BsaXQoIjoiKTsgLy8kTk9OLU5MUy0xJAorCQkJcDMgPSBsaXN0LmdldChpbmRleCkuc3BsaXQoIjoiKTsgLy8kTk9OLU5MUy0xJAorCQkJLy8gfQorCisJCQkvLyBOb3cgZ2V0IHRoZSBhbmdsZSB2YWx1ZSBmb3IgZWFjaCBvZiB0aGUgdGhyZWUgcG9pbnRzLgorCQkJYTEgPSBEb3VibGUucGFyc2VEb3VibGUocDFbQU5HTEVdKTsKKwkJCWEyID0gRG91YmxlLnBhcnNlRG91YmxlKHAyW0FOR0xFXSk7CisJCQlhMyA9IERvdWJsZS5wYXJzZURvdWJsZShwM1tBTkdMRV0pOworCisJCQkvLyBOb3cgZ2V0IHRoZSBzdGF0ZSBvZiBlYWNoIG9mIHRoZSB0aHJlZSBwb2ludHMuCisJCQlzMSA9IHAxW1NBRkVUWV07CisJCQlzMiA9IHAyW1NBRkVUWV07CisJCQlzMyA9IHAzW1NBRkVUWV07CisKKwkJCS8vIENoZWNrIHRvIHNlZSBpZiB0aGUgaW5pdGlhbCwgbGVmdG1vc3QgcG9pbnQgaXMgZ3JlYXRlciB0aGFuCisJCQkvLyBhbHBoYSBvciBpZiBpdCBpcyBVTlNBRkUuIElmIHNvLCB0aGVuIHNsaWRlIGZvcndhcmQgdGhlIHdpbmRvdy4KKwkJCWlmIChhMSA+IGFscGhhKSB7CisJCQkJLy8gSnVzdCBzbGlkZSBmb3J3YXJkIHRoZSB3aW5kb3cgb25lIHVuaXQuCisJCQkJbGVmdF9ib3JkZXIgKz0gMTsKKwkJCQlyaWdodF9ib3JkZXIgKz0gMTsKKwkJCQljb250aW51ZTsKKwkJCX0KKworCQkJaWYgKHMxLmVxdWFscyhVTlNBRkUpKSB7CisKKwkJCQlpZiAoYTIgPCBhbHBoYSAmJiBhMiA8PSBhMykgeworCQkJCQkvLyBbIFAxID0gVU5TQUZFLCBQMiA9IFNBRkUsIFAzID0gVU5TQUZFIF0KKwkJCQkJLy8gQWR2YW5jZSBzbGlkaW5nIHdpbmRvdyBhZnRlciBQMgorCQkJCQlzMiA9IFNBRkU7CisJCQkJCXMzID0gVU5TQUZFOworCQkJCX0gZWxzZSBpZiAoYTMgPCBhbHBoYSkgeworCQkJCQkvLyBbIFAxID0gVU5TQUZFLCBQMiA9IFVOU0FGRSwgUDMgPSBTQUZFIF0KKwkJCQkJLy8gQWR2YW5jZSBzbGlkaW5nIHdpbmRvdyBhZnRlciBQMgorCQkJCQlzMyA9IFNBRkU7CisJCQkJCXMyID0gVU5TQUZFOworCQkJCX0KKworCQkJfSBlbHNlIGlmIChhMSA8IGFscGhhICYmIGExIDwgYTIpIHsKKwkJCQkvLyBbIFAxID0gU0FGRSwgUDIgPSBVTlNBRkUsIFAzID0gVU5LTk9XTiBdCisJCQkJLy8gQWR2YW5jZSBzbGlkaW5nIHdpbmRvdyBhZnRlciBQMgorCQkJCXMxID0gU0FGRTsKKwkJCQlzMiA9IFVOU0FGRTsKKwkJCQkvLyBOb3cgY2hlY2sgdG8gc2VlIGlmIGlzIHNhZmUgdG8gbWFyayBQMyB0b28uCisJCQkJaWYgKGEzIDwgYWxwaGEpIHsKKwkJCQkJLy8gWyBQMSA9IFNBRkUsIFAyID0gVU5TQUZFLCBQMyA9IFNBRkUgXQorCQkJCQkvLyBBZHZhbmNlIHNsaWRpbmcgd2luZG93IGFmdGVyIFAyCisJCQkJCXMzID0gU0FGRTsKKwkJCQl9CisJCQl9IGVsc2UgaWYgKGExIDwgYWxwaGEgJiYgYTEgPiBhMikgeworCQkJCS8vIFsgUDEgPSBVTlNBRkUsIFAyID0gU0FGRSwgUDMgPSBVTlNBRkUgXQorCQkJCS8vIFNQRUNJQUwgQ0FTRSA6IEFkdmFuY2Ugc2xpZGluZyB3aW5kb3cgYWZ0ZXIgUDMKKwkJCQlzMSA9IFVOU0FGRTsKKwkJCQlzMiA9IFNBRkU7CisJCQkJczMgPSBVTlNBRkU7CisJCQkJLy8gU3BlY2lhbCBjYXNlIDogc2V0IGZsYWcgdG8gYWR2YW5jZSBzbGlkaW5nIHdpbmRvdyBhZnRlciBQMworCQkJCWZsYWcgPSB0cnVlOworCisJCQl9IGVsc2UgaWYgKGExID4gYWxwaGEgJiYgYTIgPiBhbHBoYSkgeworCQkJCS8vIFsgUDEgPSBVTlNBRkUsIFAyID0gVU5TQUZFLCBQMyA9IFVOS05PV04gXQorCQkJCS8vIEFkdmFuY2Ugc2xpZGluZyB3aW5kb3cgYWZ0ZXIgUDIKKwkJCQlzMSA9IFVOU0FGRTsKKwkJCQlzMiA9IFVOU0FGRTsKKwkJCX0KKworCQkJLy8gUGFjayB0aGUgbW9kaWZpZWQgcG9pbnQtZGF0YS4KKwkJCVN0cmluZyB0MSA9IHAxW0lOREVYXSArICI6IiArIHAxW0xUXSArICI6IiArIHAxW0xHXSArICI6IiAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQgLy8kTk9OLU5MUy0zJAorCQkJCQkrIHAxW0FOR0xFXSArICI6IiArIHMxOyAvLyROT04tTkxTLTEkCisKKwkJCVN0cmluZyB0MiA9IHAyW0lOREVYXSArICI6IiArIHAyW0xUXSArICI6IiArIHAyW0xHXSArICI6IiAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQgLy8kTk9OLU5MUy0zJAorCQkJCQkrIHAyW0FOR0xFXSArICI6IiArIHMyOyAvLyROT04tTkxTLTEkCisKKwkJCVN0cmluZyB0MyA9IHAzW0lOREVYXSArICI6IiArIHAzW0xUXSArICI6IiArIHAzW0xHXSArICI6IiAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQgLy8kTk9OLU5MUy0zJAorCQkJCQkrIHAzW0FOR0xFXSArICI6IiArIHMzOyAvLyROT04tTkxTLTEkCisKKwkJCS8vIFN0b3JlIHRoZSBtb2RpZmllZCAobWFya2VkKSBwb2ludC1kYXRhLgorCQkJbGlzdC5zZXQoSW50ZWdlci5wYXJzZUludChwMVtJTkRFWF0pLCB0MSk7CisJCQlsaXN0LnNldChJbnRlZ2VyLnBhcnNlSW50KHAyW0lOREVYXSksIHQyKTsKKwkJCWxpc3Quc2V0KEludGVnZXIucGFyc2VJbnQocDNbSU5ERVhdKSwgdDMpOworCisJCQlpZiAoZmxhZyA9PSB0cnVlKSB7CisJCQkJLy8gU1BFQ0lBTCBDQVNFIDogQWR2YW5jZSBzbGlkaW5nIHdpbmRvdyBhZnRlciBQMy4KKwkJCQlsZWZ0X2JvcmRlciA9IHJpZ2h0X2JvcmRlciArIDE7CisJCQkJcmlnaHRfYm9yZGVyID0gbGVmdF9ib3JkZXIgKyBXSU5ET1dfTEVOR1RIOworCQkJCS8vIEdvIHRvIHRoZSBuZXh0IGl0ZXJhdGlvbi4KKwkJCQljb250aW51ZTsKKwkJCX0KKworCQkJLy8gREVGQVVMVCA6IEFkdmFuY2Ugc2xpZGluZyB3aW5kb3cgYWZ0ZXIgUDIuCisJCQlsZWZ0X2JvcmRlciA9IHJpZ2h0X2JvcmRlcjsKKwkJCXJpZ2h0X2JvcmRlciA9IGxlZnRfYm9yZGVyICsgV0lORE9XX0xFTkdUSDsKKworCQl9IC8vIHdoaWxlCisKKwkJLy8gTm93IHJlbW92ZSB0aGUgU0FGRSBwb2ludHMgYW5kIHJldHVybiB0aGUgcmVkdWNlZCBsaXN0LgorCQlJdGVyYXRvciBpdCA9IGxpc3QubGlzdEl0ZXJhdG9yKCk7CisKKwkJd2hpbGUgKGl0Lmhhc05leHQoKSkgeworCisJCQlTdHJpbmcgZGF0YSA9IChTdHJpbmcpIGl0Lm5leHQoKTsKKworCQkJU3RyaW5nW10gdG9rZW5zID0gZGF0YS5zcGxpdCgiOiIpOyAvLyROT04tTkxTLTEkCisKKwkJCWlmICh0b2tlbnNbU0FGRVRZXS5lcXVhbHMoU0FGRSkpIHsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJCXJlZHVjZWRMaXN0LmFkZChkYXRhKTsKKworCQl9CisKKwkJLy8gVXRpbExvZ2dlci5sb2dJbmZvcm1hdGlvbigiUmVkdWNlZCBsaXN0IHNpemUgaXMgOiAiICsgcmVkdWNlZExpc3Quc2l6ZSgpKTsKKworCQlyZXR1cm4gcmVkdWNlZExpc3Q7CisKKwl9CisKKwkvKioKKwkgKiBQcm9maWxlIHRoZSBhbmdsZSBkYXRhLiBDb3VudCBob3cgbWFueSB0aW1lcyBlYWNoIHZhbHVlIG9jY3VycworCSAqIAorCSAqIEBwYXJhbSBsaXN0IC0KKwkgKiAgICAgICAgICAgIGEgbGlzdCBvZiBhbmdsZXMgZm9yIGVhY2ggZGF0YSBwb2ludCBpbiB0aGUgcG9seWdvbgorCSAqIAorCSAqLworCXB1YmxpYyB2b2lkIHByb2ZpbGUoTGlzdDxTdHJpbmc+IGxpc3QpIHsKKworCQlmaW5hbCBpbnQgQU5HTEUgPSAzOworCisJCWlmIChsaXN0ID09IG51bGwpIHsKKwkJCXJldHVybjsKKwkJfQorCisJCS8vIFdlIHdhbnQgdG8gaXRlcmF0ZSB0aHJvdWdoIGFsbCB0aGUgcG9pbnRzIG9mIHRoZQorCQkvLyBwb2x5Z29uCisJCUl0ZXJhdG9yIGl0ID0gbGlzdC5pdGVyYXRvcigpOworCisJCS8vIENsZWFyIHRoZSBoYXNoIG1hcCBiZWZvcmUgc3RhcnQgdXNpbmcgaXQuCisJCWluaXRIYXNoTWFwKGFuZ2xlVmFsdWVNYXApOworCisJCS8vIENvdW50IHRoZSBvY2N1cnJlbmNlcyBvZiB0aGUgdmFsdWVzIG9mIHRoZSAxODAgb2Zmc2V0CisJCS8vIG1pbnVzIHRoZSBhbmdsZS4KKwkJLy8gVGhpcyBjb3VudCB3aWxsIGJlIHVzZWZ1bCBmb3IgZmluZGluZyBhIGdvb2QgdGhyZXNob2xkLgorCQl3aGlsZSAoaXQuaGFzTmV4dCgpKSB7CisKKwkJCVN0cmluZyBwID0gKFN0cmluZykgaXQubmV4dCgpOworCisJCQlTdHJpbmdbXSBlbGVtZW50cyA9IHAuc3BsaXQoIjoiKTsgLy8kTk9OLU5MUy0xJAorCisJCQlEb3VibGUgYW5nbGUgPSBuZXcgRG91YmxlKGVsZW1lbnRzW0FOR0xFXSk7CisKKwkJCWRvdWJsZSBkZWdyZWVzID0gYW5nbGUuZG91YmxlVmFsdWUoKTsKKworCQkJY291bnQoZGVncmVlcywgYW5nbGVWYWx1ZU1hcCk7CisKKwkJfSAvLyB3aGlsZQorCisJfQorCisJLyoqCisJICogQmFzZWQgb24gdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIGFuZ2xlLCBrZWVwIHRyYWNrIG9mIGl0LgorCSAqIAorCSAqIEBwYXJhbSBkZWdyZWVzIC0KKwkgKiAgICAgICAgICAgIFRoZSB2YWx1ZSBvZiB0aGUgbGFzdCBvZmZzZXQgLSBDb3MtMShhbmdsZSkgdmFsdWUuCisJICogCisJICogQHBhcmFtIG1hcCAtCisJICogICAgICAgICAgICBUaGUgbWFwIGhvbGRpbmcgYW5nbGVzIGFuZCB0aGVpciBjb3VudAorCSAqIAorCSAqLworCXB1YmxpYyB2b2lkIGNvdW50KGRvdWJsZSBkZWdyZWVzLCBIYXNoTWFwPERvdWJsZSwgSW50ZWdlcj4gbWFwKSB7CisKKwkJLy8gRmlsdGVyIHRvIGZpbmQgdGhlIGFwcHJvcHJpYXRlIGJ1Y2tldCBmb3IgdGhlIHZhbHVlCisKKwkJaWYgKGRlZ3JlZXMgPj0gOTAuMCkgeworCQkJaW50IGNvdW50ID0gKG1hcC5nZXQobmV3IERvdWJsZSg5MC4wKSkpLmludFZhbHVlKCk7CisJCQltYXAucHV0KG5ldyBEb3VibGUoOTAuMCksIG5ldyBJbnRlZ2VyKCsrY291bnQpKTsKKworCQl9IGVsc2UgaWYgKGRlZ3JlZXMgPj0gNDUuMCkgeworCQkJaW50IGNvdW50ID0gKG1hcC5nZXQobmV3IERvdWJsZSg0NS4wKSkpLmludFZhbHVlKCk7CisJCQltYXAucHV0KG5ldyBEb3VibGUoNDUuMCksIG5ldyBJbnRlZ2VyKCsrY291bnQpKTsKKworCQl9IGVsc2UgaWYgKGRlZ3JlZXMgPj0gMjIuNSkgeworCQkJaW50IGNvdW50ID0gKG1hcC5nZXQobmV3IERvdWJsZSgyMi41KSkpLmludFZhbHVlKCk7CisJCQltYXAucHV0KG5ldyBEb3VibGUoMjIuNSksIG5ldyBJbnRlZ2VyKCsrY291bnQpKTsKKworCQl9IGVsc2UgaWYgKGRlZ3JlZXMgPj0gMTEuMjUpIHsKKwkJCWludCBjb3VudCA9IChtYXAuZ2V0KG5ldyBEb3VibGUoMTEuMjUpKSkuaW50VmFsdWUoKTsKKwkJCW1hcC5wdXQobmV3IERvdWJsZSgxMS4yNSksIG5ldyBJbnRlZ2VyKCsrY291bnQpKTsKKworCQl9IGVsc2UgaWYgKGRlZ3JlZXMgPj0gNS41MTI1KSB7CisJCQlpbnQgY291bnQgPSAobWFwLmdldChuZXcgRG91YmxlKDUuNTEyNSkpKS5pbnRWYWx1ZSgpOworCQkJbWFwLnB1dChuZXcgRG91YmxlKDUuNTEyNSksIG5ldyBJbnRlZ2VyKCsrY291bnQpKTsKKworCQl9IGVsc2UgaWYgKGRlZ3JlZXMgPj0gMi4wKSB7CisJCQlpbnQgY291bnQgPSAobWFwLmdldChuZXcgRG91YmxlKDIuMCkpKS5pbnRWYWx1ZSgpOworCQkJbWFwLnB1dChuZXcgRG91YmxlKDIuMCksIG5ldyBJbnRlZ2VyKCsrY291bnQpKTsKKworCQl9IGVsc2UgaWYgKGRlZ3JlZXMgPj0gMS41KSB7CisJCQlpbnQgY291bnQgPSAobWFwLmdldChuZXcgRG91YmxlKDEuNSkpKS5pbnRWYWx1ZSgpOworCQkJbWFwLnB1dChuZXcgRG91YmxlKDEuNSksIG5ldyBJbnRlZ2VyKCsrY291bnQpKTsKKworCQl9IGVsc2UgaWYgKGRlZ3JlZXMgPj0gMS4wKSB7CisJCQlpbnQgY291bnQgPSAobWFwLmdldChuZXcgRG91YmxlKDEuMCkpKS5pbnRWYWx1ZSgpOworCQkJbWFwLnB1dChuZXcgRG91YmxlKDEuMCksIG5ldyBJbnRlZ2VyKCsrY291bnQpKTsKKworCQl9IGVsc2UgaWYgKGRlZ3JlZXMgPj0gMC43NSkgeworCQkJaW50IGNvdW50ID0gKG1hcC5nZXQobmV3IERvdWJsZSgwLjc1KSkpLmludFZhbHVlKCk7CisJCQltYXAucHV0KG5ldyBEb3VibGUoMC43NSksIG5ldyBJbnRlZ2VyKCsrY291bnQpKTsKKworCQl9IGVsc2UgaWYgKGRlZ3JlZXMgPj0gMC41KSB7CisJCQlpbnQgY291bnQgPSAobWFwLmdldChuZXcgRG91YmxlKDAuNSkpKS5pbnRWYWx1ZSgpOworCQkJbWFwLnB1dChuZXcgRG91YmxlKDAuNSksIG5ldyBJbnRlZ2VyKCsrY291bnQpKTsKKworCQl9IGVsc2UgaWYgKGRlZ3JlZXMgPj0gMC4yNSkgeworCQkJaW50IGNvdW50ID0gKG1hcC5nZXQobmV3IERvdWJsZSgwLjI1KSkpLmludFZhbHVlKCk7CisJCQltYXAucHV0KG5ldyBEb3VibGUoMC4yNSksIG5ldyBJbnRlZ2VyKCsrY291bnQpKTsKKworCQl9IGVsc2UgaWYgKGRlZ3JlZXMgPj0gMC4xNSkgeworCQkJaW50IGNvdW50ID0gKG1hcC5nZXQobmV3IERvdWJsZSgwLjE1KSkpLmludFZhbHVlKCk7CisJCQltYXAucHV0KG5ldyBEb3VibGUoMC4xNSksIG5ldyBJbnRlZ2VyKCsrY291bnQpKTsKKworCQl9IGVsc2UgaWYgKGRlZ3JlZXMgPj0gMC4wNSkgeworCQkJaW50IGNvdW50ID0gKG1hcC5nZXQobmV3IERvdWJsZSgwLjA1KSkpLmludFZhbHVlKCk7CisJCQltYXAucHV0KG5ldyBEb3VibGUoMC4wNSksIG5ldyBJbnRlZ2VyKCsrY291bnQpKTsKKworCQl9CisKKwl9CisKKwkvKioKKwkgKiBTaW1wbHkgZXh0cmFjdCB0aGUgTFQsTEcgdmFsdWVzIGZyb20gdGhlIGxpc3QuCisJICogCisJICogQHBhcmFtIGxpc3QKKwkgKiAgICAgICAgICAgIGEgbGlzdCB3aXRoIHBvaW50LWRhdGEgb2YgdGhlIGZvcm06IElOREVYOkxUOkxHOkFOR0xFOlNBRkVUWQorCSAqIAorCSAqIEByZXR1cm4gU3RyaW5nIGEgY29uY2F0ZW5hdGlvbiBvZiBhbGwgdGhlIExULExHIHZhbHVlcy4KKwkgKi8KKwlTdHJpbmcgZXh0cmFjdExpc3RJbnRvU3RyaW5nKExpc3Q8U3RyaW5nPiBsaXN0KSB7CisKKwkJZmluYWwgaW50IExUID0gMTsKKworCQlmaW5hbCBpbnQgTEcgPSAyOworCisJCVN0cmluZyBidWZmZXIgPSBudWxsOworCisJCUl0ZXJhdG9yIGl0ID0gbGlzdC5pdGVyYXRvcigpOworCisJCXdoaWxlIChpdC5oYXNOZXh0KCkpIHsKKworCQkJU3RyaW5nIHAgPSAoU3RyaW5nKSBpdC5uZXh0KCk7CisKKwkJCVN0cmluZ1tdIGVsZW1lbnRzID0gcC5zcGxpdCgiOiIpOyAvLyROT04tTkxTLTEkCisKKwkJCWlmIChidWZmZXIgPT0gbnVsbCkgeworCisJCQkJYnVmZmVyID0gZWxlbWVudHNbTFRdICsgIiwiICsgZWxlbWVudHNbTEddICsgIiwiOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKKworCQkJfSBlbHNlIHsKKworCQkJCWJ1ZmZlciArPSBlbGVtZW50c1tMVF0gKyAiLCIgKyBlbGVtZW50c1tMR10gKyAiLCI7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAorCisJCQl9CisKKwkJfQorCisJCXJldHVybiBidWZmZXI7CisJfQorCisJLyoqCisJICogQ29tcHV0ZSB0aGUgY29zaW5lIGludmVyc2Ugb2YgYW4gYW5nbGUgYW5kIHN1YnJhY3QgdGhhdCB2YWx1ZSBmcm9tIGFuCisJICogb2Zmc2V0IG9mIDE4MCBkZWdyZWVzLgorCSAqIAorCSAqIEBwYXJhbSBwb2x5Z29uCisJICogICAgICAgICAgICBhIFNURU0gcG9seWdvbgorCSAqIAorCSAqIEByZXR1cm4gTGlzdCBhIGxpc3Qgb2YgYW5nbGUgdmFsdWVzIGZvciBhbGwgcG9pbnRzIGluIHRoZSBwb2x5Z29uCisJICogCisJICovCisJTGlzdDxTdHJpbmc+IGNvbXB1dGVJbnZlcnNlQ29zaW5lcyhTVEVNUG9seWdvbiBwb2x5Z29uKSB7CisKKwkJZmluYWwgZG91YmxlIElORklOSVRZID0gMTAwMDAwMDA7CisKKwkJLy8gTGlzdCB0byBrZWVwIHRyYWNrIG9mIHR1cGxlcyBvZiB0aGUgZm9ybSA6ICggcG9pbnQsIGludmVyc2UKKwkJLy8gQU5HTEUgYW5nbGUgKQorCQlMaXN0PFN0cmluZz4gcG9pbnREYXRhTGlzdCA9IG5ldyBBcnJheUxpc3Q8U3RyaW5nPigpOworCisJCS8vIEZpcnN0LCBnZXQgYW4gaXRlcmF0b3IgdG8gdGhlIHBvaW50cyBpbiB0aGUgcG9seWdvbgorCQlJdGVyYXRvciBpdCA9IHBvbHlnb24uZ2V0SXRlcmF0b3IoKTsKKworCQlkb3VibGUgZGVncmVlcyA9IDAuMDsKKworCQkvLyBHZXQgdGhlIGZpcnN0IHRocmVlIHBvaW50cworCQlkb3VibGUgaW52ZXJzZUNvc2luZSA9IElORklOSVRZOworCisJCS8vIFN0cmluZyB0byBzdG9yZSBpbml0aWFsIHBvaW50LiBUaGlzIHdpbGwgYmUgdXNlZCB0byBzZXQgdGhlIHZhbHVlCisJCS8vIG9mIHRoZSBsYXN0IHBvaW50LiBTaW5jZSBhIHBvbHlnb24gaGFzIHRvIGJlIGNsb3NlZCwgdGhlIGZpcnN0IGFuZAorCQkvLyBsYXN0IHBvaW50cyBzaG91bGQgYmUgdGhlIHNhbWUuIEl0IGlzIGJldHRlciB0byBzdG9yZSBpdCB0aGFuIHRvCisJCS8vIHJlY29tcHV0ZSBpdCBsYXRlci4KKwkJU3RyaW5nIGluaXRQb2ludERhdGEgPSBudWxsOworCQlTdHJpbmcgbGFzdFBvaW50RGF0YSA9IG51bGw7CisKKwkJUG9pbnREYXRhIHAxID0gbnVsbDsKKwkJUG9pbnREYXRhIHAyID0gbnVsbDsKKwkJUG9pbnREYXRhIHAzID0gbnVsbDsKKworCQlpbnQgaW5kZXggPSAwOworCisJCS8vIFNldCB0aGUgdmFsdWUgb2YgdGhlIGZpcnN0IGFuZCBsYXN0IHBvaW50LgorCQkvLyBXZSBuZXZlciBkZWxldGUgdGhlIGZpcnN0IG9yIHRoZSBsYXN0IHBvaW50LCBvdGhlcndpc2Ugd2Ugd2lsbAorCQkvLyB0dXJuIHRoaXMgcG9seWdvbiBpbnRvIGEgbm9uLXBvbHlnb24uCisJCS8vIFNldCB0byBVTlNBRkUgYW5kIGFuZ2xlIHRvIERvdWJsZS5NQVhfVkFMVUUgdG8gbWFrZSBzdXJlIHRoYXQgbmVpdGhlcgorCQkvLyBvZiB0aGVzZSBwb2ludHMgZXZlciBiZSByZW1vdmVkLgorCisJCWlmIChpbml0UG9pbnREYXRhID09IG51bGwpIHsKKworCQkJUG9pbnREYXRhIGluaXQgPSBwb2x5Z29uLmdldEluaXQoKTsKKworCQkJLy8gU2V0IGFuZ2xlIHRvIGEKKwkJCWluaXRQb2ludERhdGEgPSBTdHJpbmcudmFsdWVPZigwKSArICI6IiArIGluaXQuZ2V0THQoKSArICI6IiAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKKwkJCQkJKyBpbml0LmdldExnKCkgKyAiOiIgKyBEb3VibGUuTUFYX1ZBTFVFICsgIjoiICsgVU5TQUZFOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKKworCQkJbGFzdFBvaW50RGF0YSA9IFN0cmluZy52YWx1ZU9mKHBvbHlnb24ucG9pbnRzKCkgLSAxKSArICI6IiAvLyROT04tTkxTLTEkCisJCQkJCSsgaW5pdC5nZXRMdCgpICsgIjoiICsgaW5pdC5nZXRMZygpICsgIjoiIC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAorCQkJCQkrIERvdWJsZS5NQVhfVkFMVUUgKyAiOiIgKyBVTlNBRkU7IC8vJE5PTi1OTFMtMSQKKworCQl9CisKKwkJd2hpbGUgKGl0Lmhhc05leHQoKSkgeworCisJCQlpZiAocDEgPT0gbnVsbCkgeworCQkJCXAxID0gKFBvaW50RGF0YSkgaXQubmV4dCgpOworCQkJCWNvbnRpbnVlOworCQkJfQorCisJCQlpZiAocDIgPT0gbnVsbCkgeworCQkJCXAyID0gKFBvaW50RGF0YSkgaXQubmV4dCgpOworCQkJCWNvbnRpbnVlOworCQkJfQorCisJCQlpZiAocDMgPT0gbnVsbCkgeworCQkJCXAzID0gKFBvaW50RGF0YSkgaXQubmV4dCgpOworCQkJfQorCisJCQlpZiAoaW5kZXggPT0gMCkgeworCQkJCS8vIFV0aWxMb2dnZXIubG9nSW5mb3JtYXRpb24oIkFkZGluZyAoMSkgOiAiICsgaW5pdFBvaW50RGF0YSk7CisJCQkJcG9pbnREYXRhTGlzdC5hZGQoaW5kZXgrKywgaW5pdFBvaW50RGF0YSk7CisJCQl9CisKKwkJCS8vIFN0cmluZyB1c2VkIHRvIHJlcHJlc2VudCBleHRlbmRlZCBwb2ludCBkYXRhLiBJdCBoYXMgdGhlIGZvcm0gOgorCQkJLy8gSU5ERVg6TFQ6TEc6QU5HTEU6U0FGRVRZCisJCQlTdHJpbmcgdHVwbGUgPSBudWxsOworCisJCQkvLyBOb3cgdGhhdCB3ZSBoYXZlIHRocmVlIGNvbnNlY3V0aXZlIHBvaW50cywgY29tcHV0ZSB0aGUgaW52ZXJzZQorCQkJLy8gQU5HTEUgb2YgdGhlIGFuZ2xlCisJCQkvLyBmb3IgdGhlIHRyaWFuZ2xlIGZvcm1lZCBieSB0aGVzZSB0aHJlZSBjb25zZWN1dGl2ZSBwb2ludHMuCisJCQlmaW5hbCBkb3VibGUgY2MgPSAxMDAwMDAwMDAwMDAuMDsKKwkJCWRvdWJsZSBsdDEgPSBwMS5nZXRMdCgpICogY2M7CisJCQlkb3VibGUgbHQyID0gcDIuZ2V0THQoKSAqIGNjOworCQkJZG91YmxlIGx0MyA9IHAzLmdldEx0KCkgKiBjYzsKKwkJCWRvdWJsZSBsZzEgPSBwMS5nZXRMZygpICogY2M7CisJCQlkb3VibGUgbGcyID0gcDIuZ2V0TGcoKSAqIGNjOworCQkJZG91YmxlIGxnMyA9IHAzLmdldExnKCkgKiBjYzsKKworCQkJLy8gY29tcHV0ZTogYV4yID0gKFhpLSBYaS0xKV4yICsgKFlpLSBZaS0xKV4yCisJCQlkb3VibGUgYSA9IE1hdGgucG93KChsZzIgLSBsZzEpLCAyKSArIE1hdGgucG93KChsdDIgLSBsdDEpLCAyKTsKKworCQkJLy8gY29tcHV0ZTogYl4yID0gKFhpKzEgLVhpKV4yICsgKFlpKzEgLVlpKV4yCisJCQlkb3VibGUgYiA9IE1hdGgucG93KChsZzMgLSBsZzIpLCAyKSArIE1hdGgucG93KChsdDMgLSBsdDIpLCAyKTsKKworCQkJLy8gY29tcHV0ZTogY14yID0gKFhpKzEgLSBYaS0xKV4yICsgKFlpKzEgLSBZaS0xKV4yCisJCQlkb3VibGUgYyA9IE1hdGgucG93KChsZzMgLSBsZzEpLCAyKSArIE1hdGgucG93KChsdDMgLSBsdDEpLCAyKTsKKworCQkJLy8gVXRpbExvZ2dlci5sb2dJbmZvcm1hdGlvbigiIEFeMiA9ICIgKyBhKTsKKworCQkJLy8gVXRpbExvZ2dlci5sb2dJbmZvcm1hdGlvbigiIEJeMiA9ICIgKyBiKTsKKworCQkJLy8gVXRpbExvZ2dlci5sb2dJbmZvcm1hdGlvbigiIENeMiA9ICIgKyBjKTsKKworCQkJLy8gTm93IGNvbXB1dGU6IChhXjIgKyBiXjIgLSBjXjIpIC8gMmFiCisKKwkJCWRvdWJsZSByYXRpbyA9ICgoYSArIGIpIC0gYykgLyAoMiAqIE1hdGguc3FydChhKSAqIE1hdGguc3FydChiKSk7CisKKwkJCS8vIFV0aWxMb2dnZXIubG9nSW5mb3JtYXRpb24oIlJhdGlvIGlzIDogIiArIHJhdGlvKTsKKworCQkJLy8gTm93IGNvbXB1dGUgdGhlIGFyYyBBTkdMRSA6IGNvcy0xKCByYXRpbyApCisJCQlpbnZlcnNlQ29zaW5lID0gTWF0aC5hY29zKHJhdGlvKTsKKworCQkJZGVncmVlcyA9IE1hdGguYWJzKDE4MC4wIC0gR2VuVXRpbHMudG9EZWdyZWVzKGludmVyc2VDb3NpbmUpKTsKKworCQkJdHVwbGUgPSBTdHJpbmcudmFsdWVPZihpbmRleCkgKyAiOiIgKyBwMi5nZXRMdCgpICsgIjoiICsgcDIuZ2V0TGcoKSAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKKwkJCQkJKyAiOiIgKyBuZXcgRG91YmxlKGRlZ3JlZXMpICsgIjoiICsgVU5LTk9XTjsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCisKKwkJCS8vIFN0b3JlIHR1cGxlIGluIHRoZSBtYXAKKwkJCS8vIFV0aWxMb2dnZXIubG9nSW5mb3JtYXRpb24oIkFkZGluZyAoMSkgOiAiICsgdHVwbGUpOworCQkJcG9pbnREYXRhTGlzdC5hZGQoaW5kZXgrKywgdHVwbGUpOworCisJCQkvLyBVdGlsTG9nZ2VyLmxvZ0luZm9ybWF0aW9uKCJJbnZlcnNlIGNvc2luZSBpcyAiICsgaW52ZXJzZUFOR0xFKTsKKworCQkJLy8gU2xpZGUgdGhlIHBvaW50cyBieSBvbmUgdG8gZG8gdGhlIG5ldyBjb21wdXRhdGlvbiBvZiB0aGUgYW5nbGUKKworCQkJLy8gTm93IHNldCBwMSA8LSBwMgorCQkJcDEgPSBwMjsKKworCQkJLy8gTm93IHNldCBwMiA8LSBwMworCQkJcDIgPSBwMzsKKworCQkJLy8gTm93IHNldCBwMyA9IG51bGwKKwkJCXAzID0gbnVsbDsKKworCQkJLy8gQ2hlY2sgdG8gc2VlIGlmIHRoaXMgaXMgdGhlIGxhc3QgaXRlcmF0aW9uLgorCQkJaWYgKGl0Lmhhc05leHQoKSA9PSBmYWxzZSkgeworCisJCQkJLy8gSWYgc28sIGFkZCB0aGUgbGFzdCBwb2ludC4KKwkJCQkvLyBVdGlsTG9nZ2VyLmxvZ0luZm9ybWF0aW9uKCJBZGRpbmcgKDIpIDogIiArIGxhc3RQb2ludERhdGEpOworCQkJCXBvaW50RGF0YUxpc3QuYWRkKGluZGV4LCBsYXN0UG9pbnREYXRhKTsKKwkJCQlicmVhazsKKwkJCX0KKworCQl9CisKKwkJcmV0dXJuIHBvaW50RGF0YUxpc3Q7CisJfQorCisJLyoqCisJICogQ2hlY2sgdG8gc2VlIGlmIHRoaXMgaXMgYSByZWFsIHBvbHlnb24gKGkuZS4gY2xvc2VkKQorCSAqIAorCSAqIEBwYXJhbSBwb2x5Z29uCisJICogICAgICAgICAgICBBIFNURU0gcG9seWdvbgorCSAqIAorCSAqIEByZXR1cm4gdHJ1ZSBpZiB0aGUgcGFyYW1ldGVyICJwb2x5Z29uIiBpcyBhIFNURU0gcG9seWdvbgorCSAqLworCXByb3RlY3RlZCBib29sZWFuIGlzUG9seWdvbihTVEVNUG9seWdvbiBwb2x5Z29uKSB7CisKKwkJUG9pbnREYXRhIGluaXQgPSBwb2x5Z29uLmdldEluaXQoKTsKKwkJUG9pbnREYXRhIGxhc3QgPSBwb2x5Z29uLmdldExhc3QoKTsKKworCQlpZiAoaW5pdC5nZXRMdCgpICE9IGxhc3QuZ2V0THQoKSkgeworCQkJLy8gTm90IGEgcG9seWdvbgorCQkJcmV0dXJuIGZhbHNlOworCQl9IGVsc2UgaWYgKGluaXQuZ2V0TGcoKSAhPSBsYXN0LmdldExnKCkpIHsKKwkJCS8vIE5vdCBhIHBvbHlnb24KKwkJCXJldHVybiBmYWxzZTsKKwkJfQorCisJCS8vIFllcywgaXQgaXMgYSBwb2x5Z29uCisJCXJldHVybiB0cnVlOworCX0KKworCS8qKgorCSAqIENoZWNrIHRvIHNlZSBpZiB0aGlzIHBvbHlnb24gaXMgZHVwbGljYXRlZC4KKwkgKiAKKwkgKiBAcGFyYW0gcG9seWdvbgorCSAqICAgICAgICAgICAgYSBTVEVNIHBvbHlnb24KKwkgKiBAcGFyYW0gaXQKKwkgKiAgICAgICAgICAgIGFuIGl0ZXJhdG9yIG9uIHRoZSBwb2x5Z29uIGxpc3QKKwkgKiAKKwkgKiBAcmV0dXJuIHRydWUgaWYgdGhpcyBwb2x5Z29uIGlzIGFscmVhZHkgaW4gdGhlIGxpc3Qgb2Yga25vd24gcG9seWdvbnMKKwkgKi8KKwlwcm90ZWN0ZWQgYm9vbGVhbiBpc1BvbHlnb25EdXBsaWNhdGVkKEl0ZXJhdG9yIGl0LCBTVEVNUG9seWdvbiBwb2x5Z29uKSB7CisKKwkJaWYgKGl0Lmhhc05leHQoKSAhPSB0cnVlKSB7CisJCQlyZXR1cm4gZmFsc2U7CisJCX0KKworCQl3aGlsZSAoaXQuaGFzTmV4dCgpKSB7CisJCQlTVEVNUG9seWdvbiBjdXJyZW50ID0gKFNURU1Qb2x5Z29uKSBpdC5uZXh0KCk7CisJCQlpZiAoY3VycmVudC5zYW1lKHBvbHlnb24pID09IHRydWUpIHsKKwkJCQkvLyBOb3QgdW5pcXVlLCBpdCBpcyBkdXBsaWNhdGVkIHNvIGNvbmRpdGlvbiBpcyBmYWxzZS4KKwkJCQlyZXR1cm4gdHJ1ZTsKKwkJCX0KKwkJfQorCQlyZXR1cm4gZmFsc2U7CisJfQorCisJLyoqCisJICogVGhpcyBtZXRob2QgY3JlYXRlcyB0aGUgb3BlbmluZyBYTUwgdGFncyB0aGF0IGRlYWwgd2l0aCBpc2xhbmRzIG9mCisJICogcG9seWdvbiBkYXRhLgorCSAqIAorCSAqIEBwYXJhbSBpZAorCSAqICAgICAgICAgICAgdGhlIGRlc2NyaXB0b3IgZm9yIHRoZSBlbnRpdHkKKwkgKiAKKwkgKiBAcmV0dXJuIGEgR01MIHRhZyB0aGF0IGRlc2NyaWJlcyBhIHBvbHlnb24KKwkgKi8KKwlwcm90ZWN0ZWQgU3RyaW5nIG9wZW5Qb2x5Z29uSXNsYW5kVGFncyhTdHJpbmcgaWQpIHsKKworCQlTdHJpbmcgdGFncyA9IG51bGw7CisJCXRhZ3MgPSAiPGdtbDpQb2x5Z29uIGdtbDppZD1cIiIgKyBpZCArICJcIj5cbiI7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAorCQl0YWdzICs9ICI8Z21sOm91dGVyQm91bmRhcnlJcz5cbiI7IC8vJE5PTi1OTFMtMSQKKworCQlyZXR1cm4gdGFnczsKKwl9CisKKwkvKioKKwkgKiBUaGlzIG1ldGhvZCBjcmVhdGVzIHRoZSB0YWdzIHRoYXQgZGVzY3JpYmUgYSAicG9seWdvbiBpc2xhbmQiIG9yIGxpbmVhcgorCSAqIHJpbmcgYW5kIHB1dHMgdGhlIHBvbHlnb24gZGF0YSBpbnNpZGUgb2YgaXQuCisJICogCisJICogQHBhcmFtIGJ1ZmZlcgorCSAqICAgICAgICAgICAgdGhlIGRhdGEgYnVmZmVyIGNvbnRhaW5pbmcgYWxsIHRoZSBwb2x5Z29uZCBkYXRhCisJICogQHBhcmFtIGxldmVsCisJICogICAgICAgICAgICB0aGUgYWRtaW4gbGV2ZWwKKwkgKiAKKwkgKiBAcmV0dXJuIGEgR01MIHRhZyBmb3Igb3BlbmluZyBhIGxpbmVhciByaW5nLgorCSAqLworCXByb3RlY3RlZCBTdHJpbmcgYWRkTGluZWFyUmluZ1RhZ3MoU3RyaW5nIGJ1ZmZlciwgaW50IGxldmVsKSB7CisKKwkJaW50IG9mZnNldCA9IDA7CisKKwkJU3RyaW5nIHBvbHlnb25EYXRhID0gbnVsbDsKKworCQlzd2l0Y2ggKGxldmVsKSB7CisKKwkJY2FzZSBEYXRhVHlwZXMuTEVWRUxfMDoKKwkJCW9mZnNldCA9IDI7CisJCQlicmVhazsKKworCQljYXNlIERhdGFUeXBlcy5MRVZFTF8xOgorCQkJb2Zmc2V0ID0gMzsKKwkJCWJyZWFrOworCisJCWNhc2UgRGF0YVR5cGVzLkxFVkVMXzI6CisJCQlvZmZzZXQgPSA0OworCQkJYnJlYWs7CisJCX0KKworCQkvLyBUb2tlbml6ZQorCQlTdHJpbmdUb2tlbml6ZXIgdG9rZW5zID0gbmV3IFN0cmluZ1Rva2VuaXplcihidWZmZXIsICIsIik7IC8vJE5PTi1OTFMtMSQKKworCQkvLyBBZHZhbmNlIHRoZSBmaXJzdCBLLXRva2Vucy4KKwkJZm9yIChpbnQgaSA9IDA7IGkgPCBvZmZzZXQ7IGkrKykgeworCQkJaWYgKHRva2Vucy5oYXNNb3JlVG9rZW5zKCkpIHsKKwkJCQl0b2tlbnMubmV4dFRva2VuKCk7CisJCQl9CisJCX0KKworCQl3aGlsZSAodG9rZW5zLmhhc01vcmVUb2tlbnMoKSkgeworCisJCQlTdHJpbmcgdG9rZW4gPSB0b2tlbnMubmV4dFRva2VuKCk7CisKKwkJCWlmIChHZW5VdGlscy5pc051bWVyaWModG9rZW4pID09IGZhbHNlKSB7CisJCQkJY29udGludWU7IC8vIElnbm9yZSwgdGhpcyBpcyBub3QgYSB2YWxpZCBjb29yZGluYXRlLgorCQkJfQorCisJCQkvLyBDb252ZXJ0IHRva2VuIChwb2x5Z29uIGRhdGEpIHRvIGFuIGludC4KKwkJCWRvdWJsZSBjb29yZCA9IEdlblV0aWxzLnRvRGVncmVlcyhHZW5VdGlscy5nZXREb3VibGUodG9rZW4pKTsKKworCQkJLy8gRm9ybWF0IGx0LCBsZyB2YWx1ZXMgYWNjb3JkaW5nIHRvIG91ciBjb252ZW50aW9uCisJCQlpZiAocG9seWdvbkRhdGEgPT0gbnVsbCkgeworCQkJCXBvbHlnb25EYXRhID0gR2VuVXRpbHMuZm9ybWF0KGNvb3JkKSArICIgIjsgLy8kTk9OLU5MUy0xJAorCQkJfSBlbHNlIHsKKwkJCQlwb2x5Z29uRGF0YSArPSBHZW5VdGlscy5mb3JtYXQoY29vcmQpICsgIiAiOyAvLyROT04tTkxTLTEkCisJCQl9CisJCX0KKworCQlTdHJpbmcgdGFncyA9ICI8Z21sOkxpbmVhclJpbmc+XG4iOyAvLyROT04tTkxTLTEkCisJCXRhZ3MgKz0gIjxnbWw6cG9zTGlzdD5cbiI7IC8vJE5PTi1OTFMtMSQKKwkJdGFncyArPSBwb2x5Z29uRGF0YSArICJcbiI7IC8vJE5PTi1OTFMtMSQKKwkJdGFncyArPSAiPC9nbWw6cG9zTGlzdD5cbiI7IC8vJE5PTi1OTFMtMSQKKwkJdGFncyArPSAiPC9nbWw6TGluZWFyUmluZz5cbiI7IC8vJE5PTi1OTFMtMSQKKworCQlyZXR1cm4gdGFnczsKKwl9CisKKwkvKioKKwkgKiBUaGlzIG1ldGhvZCBjcmVhdGVzIHRoZSBjbG9zaW5nIFhNTCB0YWdzIHRoYXQgZGVhbCB3aXRoIGlzbGFuZHMgb2YKKwkgKiBwb2x5Z29uIGRhdGEuCisJICogCisJICogQHJldHVybiBhIEdNTCB0YWcgZm9yIGNsb3NpbmcgYSBwb2x5Z29uLgorCSAqLworCXByb3RlY3RlZCBTdHJpbmcgY2xvc2VQb2x5Z29uSXNsYW5kVGFncygpIHsKKworCQlTdHJpbmcgdGFncyA9IG51bGw7CisJCXRhZ3MgPSAiPC9nbWw6b3V0ZXJCb3VuZGFyeUlzPlxuIjsgLy8kTk9OLU5MUy0xJAorCQl0YWdzICs9ICI8L2dtbDpQb2x5Z29uPlxuIjsgLy8kTk9OLU5MUy0xJAorCisJCXJldHVybiB0YWdzOworCX0KKworCS8qKgorCSAqIFRoaXMgbWV0aG9kIGNyZWF0ZXMgdGhlIFhNTCB0YWdzIHRoYXQgZGVhbCB3aXRoIHNpbXBsZSBwb2x5Z29uIGRhdGEgYW5kCisJICogaW5jbHVkZXMgdGhlIHBvbHlnb24gZGF0YSBpbiBpdC4KKwkgKiAKKwkgKiBAcGFyYW0gaWQKKwkgKiAgICAgICAgICAgIHRoZSBkZXNjcmlwdG9yIGZvciB0aGUgZW50aXR5CisJICogQHBhcmFtIGJ1ZmZlcgorCSAqICAgICAgICAgICAgdGhlIGRhdGEgYnVmZmVyIGNvbnRhaW5pbmcgYWxsIHRoZSBwb2x5Z29uIGRhdGEKKwkgKiBAcGFyYW0gbGV2ZWwKKwkgKiAgICAgICAgICAgIHRoZSBhZG1pbiBsZXZlbAorCSAqIAorCSAqIEByZXR1cm4gYSBHTUwgdGFnIHRvIGNyZWF0ZSBzaW1wbGUgcG9seWdvbi4KKwkgKi8KKwlwcm90ZWN0ZWQgU3RyaW5nIGNyZWF0ZVNpbXBsZVBvbHlnb25UYWdzKFN0cmluZyBpZCwgU3RyaW5nIGJ1ZmZlciwgaW50IGxldmVsKSB7CisKKwkJaW50IG9mZnNldCA9IDA7CisKKwkJU3RyaW5nIHBvbHlnb25EYXRhID0gbnVsbDsKKworCQlzd2l0Y2ggKGxldmVsKSB7CisKKwkJY2FzZSBEYXRhVHlwZXMuTEVWRUxfMDoKKwkJCW9mZnNldCA9IDI7CisJCQlicmVhazsKKworCQljYXNlIERhdGFUeXBlcy5MRVZFTF8xOgorCQkJb2Zmc2V0ID0gMzsKKwkJCWJyZWFrOworCisJCWNhc2UgRGF0YVR5cGVzLkxFVkVMXzI6CisJCQlvZmZzZXQgPSA0OworCQkJYnJlYWs7CisJCX0KKworCQkvLyBUb2tlbml6ZQorCQlTdHJpbmdUb2tlbml6ZXIgdG9rZW5zID0gbmV3IFN0cmluZ1Rva2VuaXplcihidWZmZXIsICIsIik7IC8vJE5PTi1OTFMtMSQKKworCQkvLyBBZHZhbmNlIHRoZSBmaXJzdCBLLXRva2Vucy4KKwkJZm9yIChpbnQgaSA9IDA7IGkgPCBvZmZzZXQ7IGkrKykgeworCQkJaWYgKHRva2Vucy5oYXNNb3JlVG9rZW5zKCkpIHsKKwkJCQl0b2tlbnMubmV4dFRva2VuKCk7CisJCQl9CisJCX0KKworCQl3aGlsZSAodG9rZW5zLmhhc01vcmVUb2tlbnMoKSkgeworCisJCQlTdHJpbmcgdG9rZW4gPSB0b2tlbnMubmV4dFRva2VuKCk7CisKKwkJCWlmIChHZW5VdGlscy5pc051bWVyaWModG9rZW4pID09IGZhbHNlKSB7CisJCQkJY29udGludWU7IC8vIElnbm9yZSwgdGhpcyBpcyBub3QgYSB2YWxpZCBjb29yZGluYXRlLgorCQkJfQorCisJCQkvLyBDb252ZXJ0IHRva2VuIChwb2x5Z29uIGRhdGEpIHRvIGFuIGludC4KKwkJCWRvdWJsZSBjb29yZCA9IEdlblV0aWxzLnRvRGVncmVlcyhHZW5VdGlscy5nZXREb3VibGUodG9rZW4pKTsKKworCQkJLy8gRm9ybWF0IGx0LCBsZyB2YWx1ZXMgYWNjb3JkaW5nIHRvIG91ciBjb252ZW50aW9uCisJCQlpZiAocG9seWdvbkRhdGEgPT0gbnVsbCkgeworCQkJCXBvbHlnb25EYXRhID0gR2VuVXRpbHMuZm9ybWF0KGNvb3JkKSArICIgIjsgLy8kTk9OLU5MUy0xJAorCQkJfSBlbHNlIHsKKwkJCQlwb2x5Z29uRGF0YSArPSBHZW5VdGlscy5mb3JtYXQoY29vcmQpICsgIiAiOyAvLyROT04tTkxTLTEkCisJCQl9CisJCX0KKworCQlTdHJpbmcgdGFncyA9IG51bGw7CisKKwkJaWYgKHBvbHlnb25EYXRhID09IG51bGwpIHsKKwkJCXRhZ3MgPSAiPGdtbDpQb2x5Z29uIGdtbDppZD1cIiIgKyBpZCArICJcIi8+XG4iOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKKwkJfSBlbHNlIHsKKwkJCXRhZ3MgPSAiPGdtbDpQb2x5Z29uIGdtbDppZD1cIiIgKyBpZCArICJcIj5cbiI7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAorCQkJdGFncyArPSAiPGdtbDpvdXRlckJvdW5kYXJ5SXM+XG4iOyAvLyROT04tTkxTLTEkCisJCQl0YWdzICs9ICI8Z21sOkxpbmVhclJpbmc+XG4iOyAvLyROT04tTkxTLTEkCisJCQl0YWdzICs9ICI8Z21sOnBvc0xpc3Q+XG4iOyAvLyROT04tTkxTLTEkCisJCQl0YWdzICs9IHBvbHlnb25EYXRhICsgIlxuIjsgLy8kTk9OLU5MUy0xJAorCQkJdGFncyArPSAiPC9nbWw6cG9zTGlzdD5cbiI7IC8vJE5PTi1OTFMtMSQKKwkJCXRhZ3MgKz0gIjwvZ21sOkxpbmVhclJpbmc+XG4iOyAvLyROT04tTkxTLTEkCisJCQl0YWdzICs9ICI8L2dtbDpvdXRlckJvdW5kYXJ5SXM+XG4iOyAvLyROT04tTkxTLTEkCisJCQl0YWdzICs9ICI8L2dtbDpQb2x5Z29uPlxuIjsgLy8kTk9OLU5MUy0xJAorCQl9CisKKwkJcmV0dXJuIHRhZ3M7CisJfQorCisJLyoqCisJICogR2VuZXJhdGUgdGhlIG9wZW5pbmcgdGFncyBmb3IgdGhpcyBHTUwgZmlsZS4KKwkgKiAKKwkgKiBAcGFyYW0gY29kZQorCSAqICAgICAgICAgICAgdGhlIElTTyBjb2RlCisJICogQHBhcmFtIGxldmVsCisJICogICAgICAgICAgICB0aGUgYWRtaW4gbGV2ZWwKKwkgKiBAcmV0dXJuIHRoZSBvcGVuaW5nIHRhZ3MgZm9yIHRoZSBHTUwgZmlsZQorCSAqLworCXByb3RlY3RlZCBTdHJpbmcgZ2V0T3BlbmluZ1RhZ3MoSVNPQ29kZTEgY29kZSwgaW50IGxldmVsKSB7CisKKwkJLy8gQ2FsZW5kYXIgZGF0ZSA9IENhbGVuZGFyLmdldEluc3RhbmNlKCk7CisKKwkJU3RyaW5nIHRhZ3MgPSAiPD94bWwgdmVyc2lvbj1cIjEuMFwiIGVuY29kaW5nPVwiVVRGLThcIj8+XG4iOyAvLyROT04tTkxTLTEkCisJCXRhZ3MgKz0gR2VuVXRpbHMuZ2VHTUxDb3B5cmlnaHQoKTsKKwkJdGFncyArPSBHZW5VdGlscy5nZXRHTUxLZXlGb3JtYXRFeHBsYW5hdGlvbigpOworCQl0YWdzICs9ICI8TWFwIHhtbG5zOmdtbD1cImh0dHA6Ly93d3cub3Blbmdpcy5uZXQvZ21sXCIgeG1sbnM6Z2VvcnNzPVwiaHR0cDovL3d3dy5nZW9yc3Mub3JnL2dlb3Jzc1wiPlxuIjsgLy8kTk9OLU5MUy0xJAorCQl0YWdzICs9ICI8dGl0bGU+IiArIGNvZGUuZ2V0QWxwaGEzKCkgKyAiIExldmVsICIgKyBsZXZlbCAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKKwkJCQkrICIgTWFwPC90aXRsZT5cbiI7IC8vJE5PTi1OTFMtMSQKKwkJdGFncyArPSAiPHN1YlRpdGxlPkFkbWluaXN0cmF0aXZlIEJvdW5kYXJpZXM8L3N1YlRpdGxlPlxuIjsgLy8kTk9OLU5MUy0xJAorCQl0YWdzICs9ICI8dXBkYXRlZD5UdWUgTm92IDA3IDE2OjU3OjU1IFBTVCAyMDA2IDwvdXBkYXRlZD5cbiI7IC8vJE5PTi1OTFMtMSQKKwkJdGFncyArPSAiPGVudHJ5PlxuIjsgLy8kTk9OLU5MUy0xJAorCQl0YWdzICs9ICI8Z2VvcnNzOndoZXJlPlxuIjsgLy8kTk9OLU5MUy0xJAorCQlyZXR1cm4gdGFnczsKKwl9CisKKwkvKioKKwkgKiBHZW5lcmF0ZSB0aGUgY2xvc2luZyB0YWdzIGZvciB0aGlzIEdNTCBmaWxlLgorCSAqIAorCSAqIEByZXR1cm4gdGhlIGNsb3NpbmcgdGFncyBvZiB0aGUgR01MIGZpbGUKKwkgKi8KKwlwcm90ZWN0ZWQgU3RyaW5nIGdldENsb3NpbmdUYWdzKCkgeworCQlTdHJpbmcgdGFncyA9ICI8L2dlb3Jzczp3aGVyZT5cbiI7IC8vJE5PTi1OTFMtMSQKKwkJdGFncyArPSAiPC9lbnRyeT5cbiI7IC8vJE5PTi1OTFMtMSQKKwkJdGFncyArPSAiPC9NYXA+XG4iOyAvLyROT04tTkxTLTEkCisJCXJldHVybiB0YWdzOworCX0KKworCS8qKgorCSAqIFRoZSBleGVjdXRpb24gZW50cnkgcG9pbnQKKwkgKiAKKwkgKiBAcGFyYW0gYXJncworCSAqLworCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKKwkJLy8gZmluYWwgaW50IFRIUkVTSE9MRCA9IDA7CisJCS8vIGZpbmFsIGludCBJU09fMzE2Nl8xID0gMTsKKwkJLy8gZmluYWwgaW50IElTT18zMTY2XzIgPSAyOworCQkvLyBmaW5hbCBpbnQgRklYX0ZJTEUgPSAzOworCQkvLyBmaW5hbCBpbnQgVEFSR0VUX0xJU1QgPSA0OworCQkvLyBmaW5hbCBpbnQgTEVYX0RJUiA9IDU7CisJCS8vIGZpbmFsIGludCBPVVRQVVRfRElSID0gNjsKKwkJLy8gZmluYWwgaW50IFBBUkFNUyA9IDc7CisJCS8vCisJCS8vIGlmIChhcmdzLmxlbmd0aCA8IFBBUkFNUykgeworCQkvLyBVdGlsTG9nZ2VyLmxvZ0luZm9ybWF0aW9uKCItLVdyb25nIGFyZ3VtZW50cy0tIik7IC8vJE5PTi1OTFMtMSQKKwkJLy8gU3lzdGVtLm91dAorCQkvLyAucHJpbnRsbigiXHRUbyBydW4sIHBsZWFzZSBwcm92aWRlIHRoZSBmb2xsb3dpbmcgYXJndW1lbnRzIDogIik7CisJCS8vIC8vJE5PTi1OTFMtMSQKKwkJLy8gVXRpbExvZ2dlci5sb2dJbmZvcm1hdGlvbigiXHRcdCBUaHJlc2hvbGQgKGluIGRlZ3JlZXMpIik7IC8vJE5PTi1OTFMtMSQKKwkJLy8gVXRpbExvZ2dlci5sb2dJbmZvcm1hdGlvbigiXHRcdCBJU08gMzE2Ni0xIGZpbGUiKTsgLy8kTk9OLU5MUy0xJAorCQkvLyBVdGlsTG9nZ2VyLmxvZ0luZm9ybWF0aW9uKCJcdFx0IElTTyAzMTY2LTIgZmlsZSIpOyAvLyROT04tTkxTLTEkCisJCS8vIFV0aWxMb2dnZXIubG9nSW5mb3JtYXRpb24oIlx0XHQgSVNPIGZpeCBmaWxlIik7IC8vJE5PTi1OTFMtMSQKKwkJLy8gVXRpbExvZ2dlci5sb2dJbmZvcm1hdGlvbigiXHRcdCBUYXJnZXQgY291bnRyaWVzIGZpbGUiKTsgLy8kTk9OLU5MUy0xJAorCQkvLyBVdGlsTG9nZ2VyLmxvZ0luZm9ybWF0aW9uKCJcdFx0IExleGljb2dyYXBoaWMgc29ydGluZyBkaXJlY3RvcnkiKTsKKwkJLy8gLy8kTk9OLU5MUy0xJCQKKwkJLy8gVXRpbExvZ2dlci5sb2dJbmZvcm1hdGlvbigiXHRcdCBPdXRwdXQgZGlyZWN0b3J5Iik7IC8vJE5PTi1OTFMtMSQKKwkJLy8gcmV0dXJuOworCQkvLyB9CisJCS8vCisJCS8vIFNpbmdsZVBhc3NEb3duU2FtcGxlciBzYW1wbGVyID0gbmV3IFNpbmdsZVBhc3NEb3duU2FtcGxlcigKKwkJLy8gYXJnc1tUSFJFU0hPTERdLCBhcmdzW0lTT18zMTY2XzFdLCBhcmdzW0lTT18zMTY2XzJdLAorCQkvLyBhcmdzW0ZJWF9GSUxFXSwgYXJnc1tUQVJHRVRfTElTVF0sIGFyZ3NbTEVYX0RJUl0sCisJCS8vIGFyZ3NbT1VUUFVUX0RJUl0pOworCQkvLyBzYW1wbGVyLnJ1bigpOworCisJCWZpbmFsIGludCBDT05GSUdfRklMRSA9IDA7CisJCWZpbmFsIGludCBQQVJBTVMgPSAxOworCisJCWlmIChhcmdzLmxlbmd0aCA8IFBBUkFNUykgeworCQkJVXRpbExvZ2dlci5sb2dJbmZvcm1hdGlvbigiXHRcdC0tV3JvbmcgYXJndW1lbnRzLS0iKTsgLy8kTk9OLU5MUy0xJAorCQkJU3lzdGVtLm91dAorCQkJCQkucHJpbnRsbigiXHRcdFRvIHJ1biwgcGxlYXNlIHByb3ZpZGUgdGhlIGZvbGxvd2luZyBhcmd1bWVudChzKSA6ICIpOyAvLyROT04tTkxTLTEkCisJCQlVdGlsTG9nZ2VyLmxvZ0luZm9ybWF0aW9uKCJcdFx0XHQgQ29uZmlndXJhdGlvbiBmaWxlIik7IC8vJE5PTi1OTFMtMSQKKwkJCVN5c3RlbS5leGl0KDEpOworCQl9CisKKwkJU2luZ2xlUGFzc0Rvd25TYW1wbGVyIHNhbXBsZXIgPSBuZXcgU2luZ2xlUGFzc0Rvd25TYW1wbGVyKAorCQkJCWFyZ3NbQ09ORklHX0ZJTEVdKTsKKworCQlzYW1wbGVyLnJ1bigpOworCisJfQorCit9CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91dGlsaXR5L2dlbmVyYXRvcnMvU3BsaXRMb2dGaWxlLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91dGlsaXR5L2dlbmVyYXRvcnMvU3BsaXRMb2dGaWxlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmRlODhhMgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3NyYy9vcmcvZWNsaXBzZS9zdGVtL3V0aWxpdHkvZ2VuZXJhdG9ycy9TcGxpdExvZ0ZpbGUuamF2YQpAQCAtMCwwICsxLDEzMiBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkuZ2VuZXJhdG9yczsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqYXZhLmlvLkJ1ZmZlcmVkUmVhZGVyOworaW1wb3J0IGphdmEuaW8uRmlsZUlucHV0U3RyZWFtOworaW1wb3J0IGphdmEuaW8uRmlsZVdyaXRlcjsKK2ltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtUmVhZGVyOworaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7CitpbXBvcnQgamF2YS51dGlsLlN0cmluZ1Rva2VuaXplcjsKKworLyoqCisgKiBTcGxpdCBhIGxvZyBmaWxlIGludG8gMiBvciBtb3JlIGZpbGVzCisgKi8KK3B1YmxpYyBjbGFzcyBTcGxpdExvZ0ZpbGUgeworCisJc3RhdGljIFN0cmluZyBMUyA9IFN5c3RlbS5nZXRQcm9wZXJ0eSgibGluZS5zZXBhcmF0b3IiKTsgLy8kTk9OLU5MUy0xJAorCQorCQorCS8qKgorCSAqIAorCSAqIEBwYXJhbSBhcmdzCisJICovCisJQFN1cHByZXNzV2FybmluZ3MoIm5scyIpCisJcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nIFtdIGFyZ3MpIHsKKwkJaWYoYXJncy5sZW5ndGggPCAxKSB7CisJCQlTeXN0ZW0uZXJyLnByaW50bG4oIlVzYWdlOiBTcGxpdExvZ0ZpbGUgPGxvZyBmaWxlPiA8c2VnbWVudHM+Iik7IC8vJE5PTi1OTFMtMSQKKwkJCVN5c3RlbS5leGl0KC0xKTsKKwkJfQorCQkKKwkJU3RyaW5nIGxvZ0ZpbGUgPSBhcmdzWzBdOworCQlpbnQgc2VnbWVudHMgPSAyOyAvL2RlZmF1bHQKKwkJaWYoYXJncy5sZW5ndGggPT0gMikKKwkJCXNlZ21lbnRzID0gSW50ZWdlci5wYXJzZUludChhcmdzWzFdKTsKKwkJCisJCQorCQlBcnJheUxpc3Q8U3RyaW5nPmhlYWRlcnMgPSBuZXcgQXJyYXlMaXN0PFN0cmluZz4oKTsKKy8vCQlBcnJheUxpc3Q8QXJyYXlMaXN0PFN0cmluZz4+bG9nVGV4dCA9IG5ldyBBcnJheUxpc3Q8QXJyYXlMaXN0PFN0cmluZz4+KCk7CisvLwkJQXJyYXlMaXN0PEFycmF5TGlzdDxEb3VibGU+PmxvZ0RhdGEgPSBuZXcgQXJyYXlMaXN0PEFycmF5TGlzdDxEb3VibGU+PigpOworLy8JCUxpc3Q8U3RyaW5nPml0ZXJhdGlvbnMgPSBuZXcgQXJyYXlMaXN0PFN0cmluZz4oKTsKKy8vCQlMaXN0PFN0cmluZz50aW1lc3RhbXBzID0gbmV3IEFycmF5TGlzdDxTdHJpbmc+KCk7CisvLwkJTGlzdDxMaXN0PmRhdGFWYWxzID0gbmV3IEFycmF5TGlzdDxMaXN0PigpOworCQkKKwkJdHJ5IHsKKwkJCSAvLyBSZWFkIGluZmVjdGlvdXMgZmlsZQorCQkJIEZpbGVJbnB1dFN0cmVhbSBpZmlsZSA9IG5ldyBGaWxlSW5wdXRTdHJlYW0obG9nRmlsZSk7IAorCQkgICAgIEJ1ZmZlcmVkUmVhZGVyIGlyZWFkZXIgPSBuZXcgQnVmZmVyZWRSZWFkZXIobmV3IElucHV0U3RyZWFtUmVhZGVyKGlmaWxlKSk7CisJCSAgICAgU3RyaW5nIGhlYWRlciA9IG51bGw7CisJCSAgICAgaGVhZGVyPWlyZWFkZXIucmVhZExpbmUoKTsKKwkJICAgICBpZihoZWFkZXIgPT0gbnVsbCkgeworCQkgICAgCSBTeXN0ZW0uZXJyLnByaW50bG4oIkVycm9yLCAiK2FyZ3NbMF0rIiBmaWxlIGlzIGVtcHR5ISIpOyAgLy8kTk9OLU5MUy0xJC8vJE5PTi1OTFMtMiQKKwkJICAgIAkgU3lzdGVtLmV4aXQoLTIpOworCQkgICAgIH0KKwkJICAgICBTdHJpbmdUb2tlbml6ZXIgc3QgPSBuZXcgU3RyaW5nVG9rZW5pemVyKGhlYWRlciwgIiwiKTsgLy8kTk9OLU5MUy0xJAorCQkgICAgIGludCBjb2x1bW4gPSAwOworCQkgICAgIHdoaWxlKHN0Lmhhc01vcmVUb2tlbnMoKSkgeworCQkgICAgCSBTdHJpbmcgdmFsID0gc3QubmV4dFRva2VuKCk7CisJCSAgICAJIGhlYWRlcnMuYWRkKHZhbC50cmltKCkpOworCQkgICAgCSArK2NvbHVtbjsKKwkJICAgICB9CisJCSAgICAKKwkJICAgCisJCSAgICAKKwkJICAgIEZpbGVXcml0ZXIgW10gd3JpdGVycyA9IG51bGw7CisJCSAgICBpbnQgY29sdW1uc3BlcmZpbGUgPSAoaGVhZGVycy5zaXplKCktMikvc2VnbWVudHM7CisJCSAgICB3cml0ZXJzID0gbmV3IEZpbGVXcml0ZXJbc2VnbWVudHNdOworCQkgICAgZm9yKGludCBpPTA7aTxzZWdtZW50czsrK2kpIHsKKwkJICAgIAl3cml0ZXJzW2ldID0gbmV3IEZpbGVXcml0ZXIobG9nRmlsZSsiLiIraSsiLmNzdiIpOworCQkgICAgCXdyaXRlcnNbaV0ud3JpdGUoaGVhZGVycy5nZXQoMCkpOworCQkgICAgCXdyaXRlcnNbaV0ud3JpdGUoIiwiKTsKKwkJICAgIAl3cml0ZXJzW2ldLndyaXRlKGhlYWRlcnMuZ2V0KDEpKTsKKwkJICAgIAl3cml0ZXJzW2ldLndyaXRlKCIsIik7CisJCSAgICAJaW50IGVuZCA9IChpPT1zZWdtZW50cy0xKT8gaGVhZGVycy5zaXplKCkgOiAoMisoaSsxKSpjb2x1bW5zcGVyZmlsZSk7CisJCSAgICAJZm9yKGludCBqPTIraSpjb2x1bW5zcGVyZmlsZTtqPGVuZDsrK2opIHsKKwkJICAgIAkJd3JpdGVyc1tpXS53cml0ZShoZWFkZXJzLmdldChqKSk7CisJCSAgICAJCWlmKGo8ZW5kLTEpd3JpdGVyc1tpXS53cml0ZSgiLCIpOworCQkgICAgCX0KKwkJICAgIAl3cml0ZXJzW2ldLndyaXRlKExTKTsKKwkJICAgIH0KKwkJICAgIAorCQkgICAgU3RyaW5nIGRhdGEgPSBudWxsOyAKKwkJICAgIGRhdGE9aXJlYWRlci5yZWFkTGluZSgpOworCQkgICAgaWYoZGF0YSA9PSBudWxsKSB7CisJCSAgICAJIFN5c3RlbS5lcnIucHJpbnRsbigiRXJyb3IsICIrYXJnc1swXSsiIGZpbGUgaGFzIG5vIGRhdGEhIik7ICAvLyROT04tTkxTLTEkLy8kTk9OLU5MUy0yJAorCQkgICAgCSBTeXN0ZW0uZXhpdCgtMik7CisJCSAgICAgfQorCQkgICAgd2hpbGUoZGF0YSAhPSBudWxsICYmIGRhdGEudHJpbSgpLmxlbmd0aCgpID4gMCkgeworCQkJICAgIHN0ID0gbmV3IFN0cmluZ1Rva2VuaXplcihkYXRhLCAiLCIpOyAvLyROT04tTkxTLTEkCisJCQkgICAgY29sdW1uID0gMDsKKwkJCSAgICBBcnJheUxpc3Q8U3RyaW5nPiB0eHRsaXN0ID0gbmV3IEFycmF5TGlzdDxTdHJpbmc+KCk7CisJCQkgICAgQXJyYXlMaXN0PERvdWJsZT4gZGF0YWxpc3QgPSBuZXcgQXJyYXlMaXN0PERvdWJsZT4oKTsKKwkJCQl3aGlsZSAoc3QuaGFzTW9yZVRva2VucygpKSB7CisJCQkJCVN0cmluZyB2YWwgPSBzdC5uZXh0VG9rZW4oKS50cmltKCk7CisJCQkJCXR4dGxpc3QuYWRkKHZhbCk7CisJCQkJICAgICsrIGNvbHVtbjsKKwkJCSAgICB9IC8vIHJlYWQgdG9rZW5zCisJCQkJCisJCQkJZm9yKGludCBpPTA7aTxzZWdtZW50czsrK2kpIHsKKwkJCQkJd3JpdGVyc1tpXS53cml0ZSh0eHRsaXN0LmdldCgwKSk7CisJCQkJIAl3cml0ZXJzW2ldLndyaXRlKCIsIik7CisJCQkJCXdyaXRlcnNbaV0ud3JpdGUodHh0bGlzdC5nZXQoMSkpOworCQkJCSAJd3JpdGVyc1tpXS53cml0ZSgiLCIpOworCQkJCSAJCisJCQkJCWludCBlbmQgPSAoaT09c2VnbWVudHMtMSk/IGhlYWRlcnMuc2l6ZSgpIDogKDIrKGkrMSkqY29sdW1uc3BlcmZpbGUpOworCQkJICAgIAlmb3IoaW50IGo9MitpKmNvbHVtbnNwZXJmaWxlO2o8ZW5kOysraikgeworCQkJICAgIAkJd3JpdGVyc1tpXS53cml0ZSh0eHRsaXN0LmdldChqKSk7CisJCQkgICAgCQlpZihqPGVuZC0xKXdyaXRlcnNbaV0ud3JpdGUoIiwiKTsKKwkJCSAgICAJfQorCQkJICAgIAl3cml0ZXJzW2ldLndyaXRlKExTKTsKKwkJCQl9CisJCQkJdHh0bGlzdC5jbGVhcigpOworCQkJCWRhdGE9aXJlYWRlci5yZWFkTGluZSgpOworCQkgICAgfQorCQkgICAgaXJlYWRlci5jbG9zZSgpOworCQkgICAgZm9yKGludCBpPTA7aTxzZWdtZW50czsrK2kpIHt3cml0ZXJzW2ldLmZsdXNoKCk7d3JpdGVyc1tpXS5jbG9zZSgpO30KKwkJICAgIC8vIFByb2Nlc3MgdGhlIGRhdGEKKwkJfSBjYXRjaChFeGNlcHRpb24gZSkgeworCQkJZS5wcmludFN0YWNrVHJhY2UoKTsKKwkJfQorCQkKKwl9Cit9CisKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3NyYy9vcmcvZWNsaXBzZS9zdGVtL3V0aWxpdHkvZ2VuZXJhdG9ycy9VUkxHZW5lcmF0b3IuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3NyYy9vcmcvZWNsaXBzZS9zdGVtL3V0aWxpdHkvZ2VuZXJhdG9ycy9VUkxHZW5lcmF0b3IuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NTAyZWI4Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdXRpbGl0eS9nZW5lcmF0b3JzL1VSTEdlbmVyYXRvci5qYXZhCkBAIC0wLDAgKzEsMjA5IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS5nZW5lcmF0b3JzOworCitpbXBvcnQgamF2YS5pby5CdWZmZXJlZFJlYWRlcjsKK2ltcG9ydCBqYXZhLmlvLkZpbGU7CitpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLmlvLlByaW50V3JpdGVyOworaW1wb3J0IGphdmEudXRpbC5MaXN0OworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqCisgKiBTVEVNIElJIERhdGEgTWlncmF0aW9uL0dlbmVyYXRpb24gVXRpbGl0aWVzIC0tIEluc3RhbmNlcyBvZiB0aGlzIHV0aWxpdHkKKyAqIGNsYXNzIGNvbGxlY3QgYWxsIHRoZSBVUkxzIGFuZCBzdG9yZXMgdGhlbSBpbiBhIHNpbmdsZSBmaWxlLgorICogCisgKi8KKworcHVibGljIGNsYXNzIFVSTEdlbmVyYXRvciB7CisKKwkvKioKKwkgKiBPdXIgc291cmNlIGZpbGVzIGZvciBJU08gMzE2Ni0xIGNvZGVzIGFuZCBmb3IgdGhlIGxpc3Qgb2YgdGFyZ2V0CisJICogY291bnRyaWVzLgorCSAqLworCisJcHJpdmF0ZSBTdHJpbmcgaXNvRmlsZSA9IG51bGw7CisKKwlwcml2YXRlIFN0cmluZyB1cmxGaWxlID0gbnVsbDsKKworCXByaXZhdGUgU3RyaW5nIG91dHB1dERpciA9IG51bGw7CisKKwkvKioKKwkgKiBMaXN0IGZvciBJU08gMzE2Ni0xIGNvZGVzIGFuZCB0YXJnZXQgY291bnRyaWVzLgorCSAqLworCisJTGlzdCB1cmxzID0gbnVsbDsKKworCUxpc3QgY29kZUxpc3QgPSBudWxsOworCisJLyoqCisJICogQ29uc3RydWN0b3IKKwkgKiAKKwkgKiBAcGFyYW0gaXNvRmlsZQorCSAqICAgICAgICAgICAgZGF0YSBmaWxlIGNvbnRhaW5pbmcgdGhlIElTTzMxNjYtMSBjb2RlcworCSAqIEBwYXJhbSB1cmxGaWxlIC0KKwkgKiAgICAgICAgICAgIHRoZSBkaXJlY3RvcnkgY29udGFpbmluZyBVUkxzIGZvciBjb3VudHJpZXMgaW4gb3V0IGRhdGEgc2V0CisJICogQHBhcmFtIG91dHB1dERpciAtCisJICogICAgICAgICAgICB0aGUgb3V0cHV0IGRpcmVjdG9yeSBmb3IgdGhlIGZpbGVzIGdlbmVyYXRlZC4KKwkgKiAKKwkgKi8KKwlwdWJsaWMgVVJMR2VuZXJhdG9yKFN0cmluZyBpc29GaWxlLCBTdHJpbmcgdXJsRmlsZSwgU3RyaW5nIG91dHB1dERpcikgeworCQl0aGlzLmlzb0ZpbGUgPSBpc29GaWxlOworCQl0aGlzLnVybEZpbGUgPSB1cmxGaWxlOworCQl0aGlzLm91dHB1dERpciA9IG91dHB1dERpcjsKKwl9CisKKwkvKioKKwkgKiBUaGlzIG1ldGhvZCBzZXRzIHVwIGFuZCBydW5zIHRoaXMgZ2VuZXJhdG9yLgorCSAqIAorCSAqLworCXB1YmxpYyB2b2lkIHJ1bigpIHsKKwkJLy8gUmVhZCBhbmQga2VlcCBpbiBtZW1vcnkgYSBsaXN0IG9mIHRoZSBjb3VudHJpZXMgd2Ugd2FudC4KKwkJdXJscyA9IEdlblV0aWxzLnBvcHVsYXRlTGlzdCh1cmxGaWxlKTsKKworCQkvLyBSZWFkIGFuZCBrZWVwIGluIG1lbW9yeSBhIGxpc3Qgb2YgdGhlIElTTzMxNjYtMSBBTFBIQTIsIEFMUEhBMywgYW5kCisJCS8vIG51bWVyaWMgY29kZXMuCisJCWNvZGVMaXN0ID0gR2VuVXRpbHMucG9wdWxhdGVMaXN0KGlzb0ZpbGUpOworCisJCS8vIE5vdywgcHJvY2VzcyBlYWNoIGl0ZW0gaW4gdGhlIHRhcmdldCBsaXN0LgorCQlwcm9jZXNzKCk7CisJfQorCisJLyoqCisJICogUHJvY2VzcyBvdXIgZ2xvYmFsIGxpc3Qgb2YgY291bnRyaWVzIC0tIGZpbmQgYW5kIGFkZCBhIFVSTCBmb3IgZWFjaAorCSAqIGNvdW50cnkuCisJICogCisJICovCisJcHVibGljIHZvaWQgcHJvY2VzcygpIHsKKworCQlmaW5hbCBpbnQgQ09VTlRSWSA9IDA7CisJCVByaW50V3JpdGVyIG91dHB1dEZpbGUgPSBudWxsOworCisJCS8vIEEgVVJMIGxvY2F0aW9uIGlzIGEgZm9sZGVyIHdpdGggVVJMIGZpbGVzCisJCS8vIGZvciBldmVyeSBVUkwgbG9jYXRpb24KKwkJZm9yIChpbnQgaSA9IDA7IGkgPCB1cmxzLnNpemUoKTsgaSsrKSB7CisKKwkJCS8vIEdldCB0aGUgbmV4dCBVUkwgbG9jYXRpb24gaW4gdGhlIGxpc3QuCisJCQlTdHJpbmcgdXJsTG9jYXRpb24gPSAoKFN0cmluZykgdXJscy5nZXQoaSkpLnRyaW0oKTsKKworCQkJLy8gSWYgdGhpcyBsaW5lIHN0YXJ0cyB3aXRoICIjIiwgdGhlbiBpZ25vcmUgaXQuCisJCQlpZiAodXJsTG9jYXRpb24udHJpbSgpLnN0YXJ0c1dpdGgoIiMiKSkgeyAvLyROT04tTkxTLTEkCisJCQkJY29udGludWU7CisJCQl9CisKKwkJCVN5c3RlbS5vdXQKKwkJCQkJLnByaW50bG4oIlVSTCBpcyA6ICIgKyB1cmxMb2NhdGlvbik7IC8vJE5PTi1OTFMtMSQKKworCQkJLy8gT3BlbiB0aGUgVVJMIGxvY2F0aW9uIChhIGZvbGRlciB0aGF0IGNvbnRhaW5zIFVSTCBmaWxlcykKKwkJCUZpbGUgZGlyID0gR2VuVXRpbHMub3BlbkRpcmVjdG9yeSh1cmxMb2NhdGlvbik7CisKKwkJCXRyeSB7CisKKwkJCQlpZiAoZGlyICE9IG51bGwpIHsKKworCQkJCQkvLyBHZXQgYSBVUkwgZmlsZQorCQkJCQlGaWxlW10gdXJsRmlsZXMgPSBkaXIubGlzdEZpbGVzKCk7CisKKwkJCQkJZm9yIChpbnQgaiA9IDA7IGogPCB1cmxGaWxlcy5sZW5ndGg7IGorKykgeworCisJCQkJCQlCdWZmZXJlZFJlYWRlciByZWFkZXIgPSBHZW5VdGlscy5vcGVuUmVhZGVyKHVybEZpbGVzW2pdCisJCQkJCQkJCS5nZXRBYnNvbHV0ZVBhdGgoKSk7CisKKwkJCQkJCVN0cmluZyB1cmwgPSBudWxsOworCisJCQkJCQkvLyBSZWFkIGEgVVJMCisJCQkJCQl3aGlsZSAoR2VuVXRpbHMuRU9GKHVybCA9IHJlYWRlci5yZWFkTGluZSgpKSAhPSB0cnVlKSB7CisJCQkJCQkJVXRpbExvZ2dlci5sb2dJbmZvcm1hdGlvbihNZXNzYWdlcworCQkJCQkJCQkJLmdldFN0cmluZygiVVJMR2VuZXJhdG9yLjIiKSArIHVybCk7IC8vJE5PTi1OTFMtMSQKKwkJCQkJCQkvLyBJZiB0aGlzIGxpbmUgc3RhcnRzIHdpdGggIiMiLCB0aGVuIGlnbm9yZSBpdC4KKwkJCQkJCQlpZiAodXJsLnRyaW0oKS5zdGFydHNXaXRoKCIjIikpIHsgLy8kTk9OLU5MUy0xJAorCQkJCQkJCQlicmVhazsKKwkJCQkJCQl9CisKKwkJCQkJCQlTdHJpbmdbXSB0b2tlbnMgPSB1cmxGaWxlc1tqXS5nZXROYW1lKCkKKwkJCQkJCQkJCS5zcGxpdCgiXFwuIik7IC8vJE5PTi1OTFMtMSQKKworCQkJCQkJCS8vIEdldCB0aGUgSVNPMzE2Ni0xIGluZm8gZm9yIHRoaXMgY291bnRyeQorCQkJCQkJCUlTT0NvZGUxIGlzb0NvZGUgPSBHZW5VdGlscy5nZXRJU09Db2RlKAorCQkJCQkJCQkJdG9rZW5zW0NPVU5UUlldLCBjb2RlTGlzdCk7CisJCQkJCQkJaWYgKGlzb0NvZGUgPT0gbnVsbCkgeworCQkJCQkJCQlVdGlsTG9nZ2VyLmxvZ0luZm9ybWF0aW9uKE1lc3NhZ2VzCisJCQkJCQkJCQkJLmdldFN0cmluZygiVVJMR2VuZXJhdG9yLjUiKSAvLyROT04tTkxTLTEkCisJCQkJCQkJCQkJKyB0b2tlbnNbQ09VTlRSWV0pOworCQkJCQkJCQlicmVhazsKKwkJCQkJCQl9CisKKwkJCQkJCQkvLyBPcGVuIG91dHB1dCBmaWxlCisJCQkJCQkJaWYgKG91dHB1dEZpbGUgPT0gbnVsbCkgeworCQkJCQkJCQlTdHJpbmcgZmlsZU5hbWUgPSBvdXRwdXREaXI7CisJCQkJCQkJCWZpbGVOYW1lICs9IHRva2Vuc1tDT1VOVFJZXQorCQkJCQkJCQkJCSsgTWVzc2FnZXMuZ2V0U3RyaW5nKCJVUkxHZW5lcmF0b3IuNiIpOyAvLyROT04tTkxTLTEkCisJCQkJCQkJCW91dHB1dEZpbGUgPSBHZW5VdGlscy5vcGVuV3JpdGVyKGZpbGVOYW1lKTsKKwkJCQkJCQl9CisKKwkJCQkJCQkvLyBOb3cgd3JpdGUgdGhlIFVSTCB0byBvdXIgZmlsZQorCQkJCQkJCW91dHB1dEZpbGUud3JpdGUoaXNvQ29kZS5nZXROYW1lKCkgKyAiOiIgLy8kTk9OLU5MUy0xJAorCQkJCQkJCQkJKyBpc29Db2RlLmdldEFscGhhMygpICsgIjoiICsgdXJsICsgIlxuIik7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAorCQkJCQkJCVV0aWxMb2dnZXIubG9nSW5mb3JtYXRpb24oaXNvQ29kZS5nZXROYW1lKCkgKyAiOiIgLy8kTk9OLU5MUy0xJAorCQkJCQkJCQkJKyBpc29Db2RlLmdldEFscGhhMygpICsgIjoiICsgdXJsICsgIlxuIik7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAorCisJCQkJCQl9IC8vIGludGVybmFsIHdoaWxlCisKKwkJCQkJCXJlYWRlci5jbG9zZSgpOworCisJCQkJCQlpZiAob3V0cHV0RmlsZSAhPSBudWxsKSB7CisJCQkJCQkJb3V0cHV0RmlsZS5jbG9zZSgpOworCQkJCQkJCW91dHB1dEZpbGUgPSBudWxsOworCQkJCQkJfQorCisJCQkJCQkvLyBSdW4gZ2FyYmFnZSBjb2xsZWN0aW9uCisJCQkJCQkvL1N5c3RlbS5nYygpOworCisJCQkJCX0gLy8gZm9yIGoKKworCQkJCX0gLy8gaWYgKGRpciAhPSBudWxsKXMKKworCQkJfSBjYXRjaCAoSU9FeGNlcHRpb24gZSkgeworCQkJCWUucHJpbnRTdGFja1RyYWNlKCk7CisJCQl9CisKKwkJfSAvLyBmb3IgaQorCisJfQorCisJLyoqCisJICogRXhlY3V0aW9uIGVudHJ5IHBvaW50CisJICogCisJICogQHBhcmFtIGFyZ3MKKwkgKi8KKwlwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CisJCWZpbmFsIGludCBJU09fRklMRSA9IDA7CisJCWZpbmFsIGludCBVUkxfSU5ERVggPSAxOworCQlmaW5hbCBpbnQgT1VUUFVUX0RJUiA9IDI7CisJCWZpbmFsIGludCBQQVJBTVMgPSAzOworCisJCWlmIChhcmdzLmxlbmd0aCA8IFBBUkFNUykgeworCisJCQlVdGlsTG9nZ2VyLmxvZ0luZm9ybWF0aW9uKCItLVdyb25nIGFyZ3VtZW50cy0tIik7IC8vJE5PTi1OTFMtMSQKKwkJCVN5c3RlbS5vdXQKKwkJCQkJLnByaW50bG4oIlx0VG8gcnVuLCBwbGVhc2UgcHJvdmlkZSB0aGUgZm9sbG93aW5nIGFyZ3VtZW50cyA6ICIpOyAvLyROT04tTkxTLTEkCQkJCisJCQlVdGlsTG9nZ2VyLmxvZ0luZm9ybWF0aW9uKCJcdFx0IElTTyAzMTY2LTEgZmlsZSIpOyAvLyROT04tTkxTLTEkCisJCQlVdGlsTG9nZ2VyLmxvZ0luZm9ybWF0aW9uKCJcdFx0IFVSTCBpbmRleCBmaWxlIik7IC8vJE5PTi1OTFMtMSQJCQkKKwkJCVV0aWxMb2dnZXIubG9nSW5mb3JtYXRpb24oIlx0XHQgT3V0cHV0IGRpcmVjdG9yeSIpOyAvLyROT04tTkxTLTEkCQkJCQorCQkJcmV0dXJuOworCQl9CisKKwkJVVJMR2VuZXJhdG9yIGdlbiA9IG5ldyBVUkxHZW5lcmF0b3IoYXJnc1tJU09fRklMRV0sIGFyZ3NbVVJMX0lOREVYXSwKKwkJCQlhcmdzW09VVFBVVF9ESVJdKTsKKwkJZ2VuLnJ1bigpOworCX0KKworfQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdXRpbGl0eS9nZW5lcmF0b3JzL1VTQTJEaXZhRm9ybWF0Q29udmVydGVyLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91dGlsaXR5L2dlbmVyYXRvcnMvVVNBMkRpdmFGb3JtYXRDb252ZXJ0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNzQzOTA2Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdXRpbGl0eS9nZW5lcmF0b3JzL1VTQTJEaXZhRm9ybWF0Q29udmVydGVyLmphdmEKQEAgLTAsMCArMSw0NTEgQEAKKy8qKgorICogCisgKi8KK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5LmdlbmVyYXRvcnM7CisKK2ltcG9ydCBqYXZhLmlvLkJ1ZmZlcmVkUmVhZGVyOworaW1wb3J0IGphdmEuaW8uRmlsZTsKK2ltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOworaW1wb3J0IGphdmEuaW8uUHJpbnRXcml0ZXI7CitpbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7CitpbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOworaW1wb3J0IGphdmEudXRpbC5MaXN0OworaW1wb3J0IGphdmEudXRpbC5TZXQ7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMKKyAqIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YKKyAqIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcworICogYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKiAKKyAqIENvbnRyaWJ1dG9yczogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioKKyAqIAorICogU1RFTSBJSSBEYXRhIE1pZ3JhdGlvbi9HZW5lcmF0aW9uIFV0aWxpdGllcyA6IEluc3RhbmNlcyBvZiB0aGlzIHV0aWxpdHkgY2xhc3MKKyAqIGNvbnZlcnQgZGF0YSBmcm9tIGFuIGFsdGVybmF0aXZlIGZvcm1hdCBpbnRvIERpdmEgZm9ybWF0LiBJdCB3YXMgdXNlZCBmb3IgYQorICogdmVyeSBzcGVjaWZpYyBwdXJwb3NlIHRvIGhlbHAgYnJpbmcgdGhlIGRhdGEgZm9yIHRoZSBVU0EgaW50byB0aGUgc2FtZSBmb3JtYXQKKyAqIGFzIHRoZSByZXN0IG9mIHRoZSBmaWxlcyBpbiB0aGUgRGl2YSBzZXQuCisgKiAKKyAqIAorICogVG8gY29uZmlndXJlLCBzZWUgY29uZmlndXJhdGlvbiBmaWxlIDoKKyAqIG9yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9jb25maWd1cmF0aW9uL1VTQTJEaXZhRm9ybWF0Q29udmVydGVyLmNvbmZpZworICogCisgKiAKKyAqIFRvIHJ1biwgYWRkIHBhdGggdG8gY29uZmlndXJhdGlvbiBmaWxlIGluIHRoZSBydW4gcHJvZmlsZSAoaS5lLgorICogQzpcc3RlbUlJXG9yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eVxjb25maWd1cmF0aW9uXFVTQTJEaXZhRm9ybWF0Q29udmVydGVyLmNvbmZpZykKKyAqIAorICogVG8gcnVuLCBhZGQgdGhlIGZvbGxvd2luZyBwYXJhbWV0ZXJzIHRvIHRoZSBydW4gY29uZmlndXJhdGlvbjoKKyAqIAorICogQzpcc3RlbUlJXG9yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eVxkYXRhTWlncmF0aW9uXGlucHV0XFVTQV9MMV9EYXRhXFVTQV9MMS50eHQKKyAqIEM6XHN0ZW1JSVxvcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHlcZGF0YU1pZ3JhdGlvblxpbnB1dFxwcm9wZXJ0aWVzXGZvcm1hdExpc3QudHh0CisgKiBDOlxkaXZhXE5vcnRoQW1lcmljYVxVU0FcCisgKiAKKyAqLworCitwdWJsaWMgY2xhc3MgVVNBMkRpdmFGb3JtYXRDb252ZXJ0ZXIgeworCisJLyoqCisJICogT3VyIHNvdXJjZSBmaWxlcyBmb3IgSVNPIDMxNjYtMSBjb2RlcyBhbmQgZm9yIHRoZSBsaXN0IG9mIHRhcmdldAorCSAqIGNvdW50cmllcy4KKwkgKi8KKwkvLyBwcml2YXRlIFN0cmluZyBpc28zMTY2XzEgPSBudWxsOworCXByaXZhdGUgU3RyaW5nIHVzYUwxRmlsZSA9IG51bGw7CisKKwlwcml2YXRlIFN0cmluZyB0YXJnZXRGaWxlID0gbnVsbDsKKworCXByaXZhdGUgU3RyaW5nIG91dHB1dERpciA9IG51bGw7CisKKwlwcml2YXRlIFN0cmluZyB3b3Jrc3BhY2UgPSBudWxsOworCisJLyoqCisJICogTGlzdCBmb3IgSVNPIDMxNjYtMSBjb2RlcyBhbmQgdGFyZ2V0IGNvdW50cmllcy4KKwkgKi8KKworCUxpc3QgdGFyZ2V0TGlzdCA9IG51bGw7CisKKwkvLyBMaXN0IGNvZGVMaXN0ID0gbnVsbDsKKworCUxpc3QgZGF0YUxpc3QgPSBudWxsOworCisJLyoqCisJICogQ29uc3RydWN0b3IKKwkgKiAKKwkgKiBAcGFyYW0gdXNhTDFGaWxlIC0KKwkgKiAgICAgICAgICAgIGRhdGEgZmlsZSB3aXRoIHRoZSBJU08zMTY2LTEgQUxQSEFfMiBhbmQgQUxQSEFfMyBjb2Rlcy4KKwkgKiBAcGFyYW0gdGFyZ2V0RmlsZSAtCisJICogICAgICAgICAgICBkYXRhIGZpbGUgd2hlcmUgd2UgZmluZCBhIGxpc3Qgb2YgY291bnRyaWVzIGZvciBnZW5lcmF0aW9uIG9mCisJICogICAgICAgICAgICB0aGVpciBjb3JyZXNwb25kaW5nIGFyZWEucHJvcGVydGllcyBmaWxlcy4KKwkgKiBAcGFyYW0gb3V0cHV0RGlyIC0KKwkgKiAgICAgICAgICAgIHRoZSBvdXRwdXQgZGlyZWN0b3J5IGZvciB0aGUgZmlsZXMgZ2VuZXJhdGVkLgorCSAqIAorCSAqLworCS8vIHB1YmxpYyBVU0EyRGl2YUZvcm1hdENvbnZlcnRlcigvKiBTdHJpbmcgaXNvMzE2Nl8xLCAqL1N0cmluZyB1c2FMMUZpbGUsCisJLy8gU3RyaW5nIHRhcmdldEZpbGUsIFN0cmluZyBvdXRwdXREaXIpIHsKKwkvLyAvLyBTZXQgdmFsdWVzIG9mIGdsb2JhbCB2YXJpYWJsZXMuCisJLy8gLy8gdGhpcy5pc28zMTY2XzEgPSBpc28zMTY2XzE7CisJLy8gdGhpcy51c2FMMUZpbGUgPSB1c2FMMUZpbGU7CisJLy8gdGhpcy50YXJnZXRGaWxlID0gdGFyZ2V0RmlsZTsKKwkvLyB0aGlzLm91dHB1dERpciA9IG91dHB1dERpcjsKKwkvLyB0YXJnZXRMaXN0ID0gbnVsbDsKKwkvLyB9CisJLyoqCisJICogQHBhcmFtIGNvbmZpZ0ZpbGUKKwkgKi8KKwlwdWJsaWMgVVNBMkRpdmFGb3JtYXRDb252ZXJ0ZXIoU3RyaW5nIGNvbmZpZ0ZpbGUpIHsKKworCQkvLyBMb2FkIGFsbCBjb25maWd1cmF0aW9uIHZhcmlhYmxlcworCQlIYXNoTWFwPFN0cmluZywgU3RyaW5nPiB2YXJzID0gR2VuVXRpbHMubG9hZENvbmZpZ0ZpbGUoY29uZmlnRmlsZSk7CisKKwkJU2V0PFN0cmluZz4ga2V5cyA9IHZhcnMua2V5U2V0KCk7CisJCUl0ZXJhdG9yIGl0ID0ga2V5cy5pdGVyYXRvcigpOworCQl3aGlsZSAoaXQuaGFzTmV4dCgpKSB7CisJCQlTdHJpbmcgdmFyID0gKFN0cmluZykgaXQubmV4dCgpOworCisJCQkvLyBBc3NpZ24gdmFsdWVzIHRvIGNvbmZpZ3VyYXRpb24gdmFyaWFibGVzIDoKKwkJCWlmICh2YXIuZXF1YWxzKCJXT1JLU1BBQ0UiKSkgeyAvLyROT04tTkxTLTEkCisJCQkJd29ya3NwYWNlID0gdmFycy5nZXQodmFyKTsKKwkJCX0gZWxzZSBpZiAodmFyLmVxdWFscygiTkFNRVNfTElTVCIpKSB7IC8vJE5PTi1OTFMtMSQKKwkJCQl1c2FMMUZpbGUgPSB2YXJzLmdldCh2YXIpOworCQkJfSBlbHNlIGlmICh2YXIuZXF1YWxzKCJUQVJHRVRfTElTVCIpKSB7IC8vJE5PTi1OTFMtMSQKKwkJCQl0YXJnZXRGaWxlID0gdmFycy5nZXQodmFyKTsKKwkJCX0gZWxzZSBpZiAodmFyLmVxdWFscygiUFJPUEVSVElFU19PVVRQVVQiKSkgeyAvLyROT04tTkxTLTEkCisJCQkJb3V0cHV0RGlyID0gdmFycy5nZXQodmFyKTsKKwkJCX0KKworCQl9IC8vIHdoaWxlCisKKwkJLy8gVGhlIHdvcmtzcGFjZSB2YXJpYWJsZSBzaG91bGQgZW5kIHdpdGggYSBzbGFzaCBjaGFyYWN0ZXIKKwkJaWYgKHdvcmtzcGFjZS5lbmRzV2l0aCgiXFwiKSA9PSBmYWxzZSkgeyAvLyROT04tTkxTLTEkCisJCQl3b3Jrc3BhY2UgKz0gIlxcIjsgLy8kTk9OLU5MUy0xJAorCQl9CisKKwkJU3RyaW5nIHBhdGggPSB3b3Jrc3BhY2UgKyBHZW5Db25zdGFudHMuUEFSQU1TX0RJUjsKKworCQkvLyBTZXQgcmVtYWluaW5nIGNvbmZpZyB2YXJzIHVzaW5nIFdPUktTUEFDRSAod29ya3NwYWNlIHJlbGF0aXZlKQorCQlpZiAodXNhTDFGaWxlID09IG51bGwpIHsKKwkJCXVzYUwxRmlsZSA9IHBhdGggKyBHZW5Db25zdGFudHMuVVNBX0wxX0RBVEE7CisJCX0KKwkJaWYgKHRhcmdldEZpbGUgPT0gbnVsbCkgeworCQkJdGFyZ2V0RmlsZSA9IHBhdGggKyBHZW5Db25zdGFudHMuRk9STUFUX0xJU1Q7CisJCX0KKwkJaWYgKG91dHB1dERpciA9PSBudWxsKSB7CisJCQlvdXRwdXREaXIgPSBHZW5Db25zdGFudHMuRFVNTVlfRElSOworCQl9CisKKwkJdGFyZ2V0TGlzdCA9IG51bGw7CisJfQorCisJLyoqCisJICogVGhpcyBtZXRob2Qgc2V0cyB1cCBhbmQgcnVucyB0aGlzIGdlbmVyYXRvci4KKwkgKiAKKwkgKi8KKwlwdWJsaWMgdm9pZCBydW4oKSB7CisJCS8vIFJlYWQgYW5kIGtlZXAgaW4gbWVtb3J5IGEgbGlzdCBvZiB0aGUgY291bnRyaWVzIHdlIHdhbnQuCisJCXRhcmdldExpc3QgPSBHZW5VdGlscy5wb3B1bGF0ZUxpc3QodGFyZ2V0RmlsZSk7CisKKwkJLy8gUmVhZCBhbmQga2VlcCBpbiBtZW1vcnkgYSBsaXN0IG9mIHRoZSBJU08zMTY2LTEgQUxQSEEyLCBBTFBIQTMsIGFuZAorCQkvLyBudW1lcmljIGNvZGVzLgorCQkvLyBjb2RlTGlzdCA9IEdlblV0aWxzLnBvcHVsYXRlTGlzdChpc28zMTY2XzEpOworCisJCS8vIFJlYWQgbGV2ZWwgMSBkYXRhIGZvciB0aGUgVVNBCisJCWRhdGFMaXN0ID0gR2VuVXRpbHMucG9wdWxhdGVMaXN0KHVzYUwxRmlsZSk7CisKKwkJLy8gUnVuIHRoZSBjb252ZXJ0ZXI6IFVTIENlbnN1cyBmb3JtYXQgLT4gRGl2YSBzZXQgZm9ybWF0CisJCXByb2Nlc3MoKTsKKworCX0KKworCS8qKgorCSAqIENvbnZlcnQgYSBkYXRhIGZpbGUgdGhhdCBjb21lcyBpbnRvIHRoZSBmb3JtYXQgZnJvbSB0aGUgVVMgQ2Vuc3VzIDoKKwkgKiBodHRwOi8vd3d3LmNlbnN1cy5nb3YvZ2VvL3d3dy9jb2IvY28yMDAwLmh0bWwgaW50byB0aGUgRGl2YSBmb3JtYXQgdGhhdAorCSAqIHRoZSBnZW5lcmF0b3JzIGNhbiBoYW5kbGUuIEJvdGggZm9ybWF0cywgdGhlIFVTIENlbnN1cyB0aGUgRGl2YSBmb3JtYXQKKwkgKiBhcmUgZml4ZWQsIHdlbGwtZGVmaW5lZCBmb3JtYXRzLiBUaGlzIHdvbnQgZm9ybWF0IGFueSBhcmJpdHJhcnkgZm9ybWF0CisJICogaW50byBEaXZhIGZvcm1hdC4gQ29udmVydHMgOiBVUyBDZW5zdXMgZm9ybWF0IC0+IERpdmEgZm9ybWF0CisJICogCisJICovCisJcHJvdGVjdGVkIHZvaWQgcHJvY2VzcygpIHsKKworCQkvLyBBIHdyaXRlciBmb3IgdGhlIG5ldyBmaWxlIHdlIGFyZSBjcmVhdGluZy4KKwkJUHJpbnRXcml0ZXIgZGl2YUZpbGUgPSBudWxsOworCisJCS8vIE9iamVjdCBob2xkaW5nIElTTzMxNjYtMSByZWxhdGVkIGRhdGEuCisJCS8vIElTT0NvZGUxIGlzb0NvZGUgPSBudWxsOworCisJCS8vIE5hbWUgb2YgdGhlIG5ldyBwcm9wZXJ0aWVzIGZpbGUuCisJCVN0cmluZyBmaWxlTmFtZSA9IG51bGw7CisKKwkJaW50IHNpemUgPSB0YXJnZXRMaXN0LnNpemUoKTsKKworCQkvLyBGb3IgZXZlcnkgY291bnRyeQorCQlmb3IgKGludCBpID0gMDsgaSA8IHNpemU7IGkrKykgeworCisJCQkvLyBHZXQgdGhlIG5leHQgZmlsZSBpbiB0aGUgbGlzdC4KKwkJCVN0cmluZyBmaWxlID0gKChTdHJpbmcpIHRhcmdldExpc3QuZ2V0KGkpKS50cmltKCk7CisKKwkJCS8vIE9wZW4gdGhlIGRhdGEgc291cmNlIGZpbGUgZm9yIHRoaXMgY291bnRyeS4KKwkJCUJ1ZmZlcmVkUmVhZGVyIHJlYWRlciA9IEdlblV0aWxzLm9wZW5SZWFkZXIoZmlsZSk7CisJCQlTeXN0ZW0ub3V0CisJCQkJCS5wcmludGxuKCJcdFx0PDw8PCBVU0EgVE8gRElWQSBGT1JNQVQgQ09OVkVSVEVSIC0tIFByb2Nlc3NpbmcgQ291bnRyeSA6ICIgKyBmaWxlICsgIiA+Pj4+Iik7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJCAKKwkJCXRyeSB7CisKKwkJCQlpZiAocmVhZGVyICE9IG51bGwpIHsKKworCQkJCQlTdHJpbmcgYnVmZmVyID0gbnVsbDsKKworCQkJCQl3aGlsZSAoR2VuVXRpbHMuRU9GKGJ1ZmZlciA9IHJlYWRlci5yZWFkTGluZSgpKSAhPSB0cnVlKSB7CisKKwkJCQkJCS8vIE1ha2Ugc3VyZSB0aGF0IHdlIG1hcmsgYWxsIHVua25vd24gZGF0YS4KKwkJCQkJCWJ1ZmZlciA9IGJ1ZmZlci5yZXBsYWNlKCIsLCIsICIsVU5LTk9XTiwiKTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCisKKwkJCQkJCVN0cmluZ1tdIGl0ZW1zID0gYnVmZmVyLnNwbGl0KCIsIik7IC8vJE5PTi1OTFMtMSQKKworCQkJCQkJLy8gSWYgdGhlIGRpcmVjdG9yeSBkb2VzIG5vdCBleGlzdCBmb3IgdGhpcyBjb3VudHJ5LAorCQkJCQkJLy8gY3JlYXRlIGl0IHVzaW5nIElTTyBhbHBoYTMgY29kZS4KKwkJCQkJCUZpbGUgY291bnRyeURpciA9IG5ldyBGaWxlKG91dHB1dERpciArICJVU0EiKTsgLy8kTk9OLU5MUy0xJAorCisJCQkJCQlpZiAoY291bnRyeURpciAhPSBudWxsICYmIGNvdW50cnlEaXIuZXhpc3RzKCkgPT0gZmFsc2UpIHsKKwkJCQkJCQkvLyBEaXJlY3RvcnkgZG9lcyBub3QgZXhpc3QuIENyZWF0ZSBpdC4KKwkJCQkJCQljb3VudHJ5RGlyLm1rZGlyKCk7CisJCQkJCQl9CisKKwkJCQkJCS8vIENyZWF0ZSBhbmQgb3BlbiB0aGUgbmV3IG91dHB1dCBmaWxlLgorCQkJCQkJaWYgKGRpdmFGaWxlID09IG51bGwpIHsKKwkJCQkJCQkvLyBDcmVhdGUgdGhlIGZpbGUgbmFtZQorCQkJCQkJCWZpbGVOYW1lID0gY291bnRyeURpciArICJcXFVTQS50eHQiOyAvLyROT04tTkxTLTEkCisKKwkJCQkJCQkvLyBDcmVhdGUgdG5lIG5ldyBmaWxlCisJCQkJCQkJZGl2YUZpbGUgPSBHZW5VdGlscy5vcGVuV3JpdGVyKGZpbGVOYW1lKTsKKwkJCQkJCX0KKworCQkJCQkJLy8gQXBwbHkgdGhlIGZvcm1hdHRpbmcgdG8gdGhlIGN1cnJlbnQgYnVmZmVyIDogVVMKKwkJCQkJCS8vIENlbnN1cyBmb3JtYXQgLT4gRGl2YSBmb3JtYXQKKwkJCQkJCVN0cmluZyBkaXZhTGluZSA9IGNvbnZlcnQyRGl2YShpdGVtcyk7CisKKwkJCQkJCS8vIFdyaXRlIHRoZSBjb252ZXJ0ZWQgbGluZQorCQkJCQkJLy8gVXRpbExvZ2dlci5sb2dJbmZvcm1hdGlvbigiRGl2YSBzdHJpbmcgPSAiICsgZGl2YUxpbmUpOworCQkJCQkJR2VuVXRpbHMuYWRkRGF0YShkaXZhRmlsZSwgZGl2YUxpbmUpOworCisJCQkJCX0vLyB3aGlsZQorCisJCQkJCS8vIFRoaXMgaXMgYW4gdWdseSBoYWNrIHNpbmNlIHRoZSBlZGl0b3JzIGFyZSBub3QgcG93ZXJmdWwKKwkJCQkJLy8gZW5vdWdoIGFuZCBjYW50IGhhbmRsZSBjb3B5IHBhc3RlIG9wZXJhdGlvbnMgb2YgMjBNRUdTCisJCQkJCS8vIGFwcGVuZERhdGEoZGl2YUZpbGUpOworCisJCQkJCS8vIENsb3NlIHRoZSB0YXJnZXQgZmlsZS4KKwkJCQkJZGl2YUZpbGUuY2xvc2UoKTsKKworCQkJCQkvLyBDbG9zZSBhbGwgb3BlbiByZXNvdXJjZXMuCisJCQkJCXJlYWRlci5jbG9zZSgpOworCisJCQkJCS8vIFJ1biBnYXJiYWdlIGNvbGxlY3Rpb24KKwkJCQkJLy9TeXN0ZW0uZ2MoKTsKKworCQkJCX0KKworCQkJfSBjYXRjaCAoSU9FeGNlcHRpb24gZSkgeworCQkJCWUucHJpbnRTdGFja1RyYWNlKCk7CisJCQl9CisKKwkJfSAvLyBmb3IKKworCX0KKworCS8qKgorCSAqIENvbnZlcnQgdGhlIGJ1ZmZlciBnaXZlbiBpbiBVUyBDZW5zdXMgZm9ybWF0IGludG8gRGl2YSBmb3JtYXQKKwkgKiAKKwkgKiBAcGFyYW0gZGF0YQorCSAqICAgICAgICAgICAgYSBidWZmZXIgd2l0aCBkYXRhIG9uIFVTIENlbnN1cyBmb3JtYXQKKwkgKiAKKwkgKiBAcmV0dXJuIGNvbnZlcnRlZCBzdHJpbmcKKwkgKiAKKwkgKi8KKwlwdWJsaWMgU3RyaW5nIGNvbnZlcnQyRGl2YShTdHJpbmdbXSBkYXRhKSB7CisKKwkJLy8gVXNlZnVsIHN5bWJvbGljIGNvbnN0YW50cworCQlmaW5hbCBpbnQgU1RBVEVfSUQgPSA0OworCQlmaW5hbCBpbnQgTDFfQURNSU4gPSA1OworCQlmaW5hbCBpbnQgTDJfQURNSU4gPSA2OworCQlmaW5hbCBpbnQgTDJfQURNSU5fVFlQRSA9IDg7IC8vIFZBTElEIFRZUEVTID0gQk9ST1VHSCwgUEFSSVNILENPVU5UWSwKKwkJLy8gQ0lUWS4gSU5WQUxJRCA9IENFTlNVUyBBUkVBCisKKwkJLy8gTGV2ZWwgb2YgdGhlIGRhdGEgd2UgYXJlIHByb2Nlc3NpbmcKKwkJaW50IGxldmVsID0gLTE7CisKKwkJLy8gU3RhdGUgSUQKKwkJU3RyaW5nIHN0YXRlX2lkID0gbnVsbDsKKworCQkvLyBUaGUgZm9ybWF0dGVkIHByZWZpeCBzdHJpbmcKKwkJU3RyaW5nIGRpdmFTdHJpbmcgPSAiVVNBLFVuaXRlZCBTdGF0ZXMiOyAvLyROT04tTkxTLTEkCisKKwkJLy8gR2V0IHRoZSBsZXZlbCBvZiB0aGUgZGF0YSB3ZSBhcmUgcHJvY2Vzc2luZy4KKwkJbGV2ZWwgPSBHZW5VdGlscy5pc051bWVyaWMoZGF0YVtMMV9BRE1JTl0pID09IGZhbHNlID8gMSA6IDI7CisKKwkJLy8gR2V0IHRoZSBzdGF0ZSBJRAorCQlzdGF0ZV9pZCA9IGRhdGFbU1RBVEVfSURdOworCisJCS8vIEdldCByaWQgb2YgYmxhbmtzCisJCXN0YXRlX2lkID0gc3RhdGVfaWQudHJpbSgpOworCisJCS8vICogSUYgTEVWRUwgPT0gMSwgdGhlbiB3ZSBjYW4gaWdub3JlIGNvbHVtbnMgNiw3LDgsIGFuZCA5CisJCS8vCisJCS8vICoqIExldmVsIDEgZGF0YSBzaG91bGQgYmUgaW4gdGhlIGZvcm1hdDoKKwkJLy8KKwkJLy8gVVNBLCBVbml0ZWQgU3RhdGVzLCBMZXZlbDEgQWRtaW4sIDxQT0xZR09OIERBVEE+CisJCS8vCisJCS8vCisJCS8vICogSUYgTEVWRUwgPT0gMiwgdGhlbiB3ZSBjYW4gaWdub3JlIGNvbHVtbnMgNiw4LCBhbmQgOQorCQkvLworCQkvLyAqKiBMZXZlbCAyIGRhdGEgc2hvdWxkIGJlIGluIHRoZSBmb3JtYXQ6CisJCS8vCisJCS8vIFVTQSwgVW5pdGVkIFN0YXRlcywgTGV2ZWwxIEFkbWluLCBMZXZlbCAyIEFkbWluLCA8UE9MWUdPTiBEQVRBPgorCQkvLworCQkvLyBUbyBmaW5kIHRoZSBsZXZlbCAxIGNvbnRhaW5lciwgaXRlcmF0ZSBvdmVyIHRoZSBsaXN0IHdpdGggZGF0YSBmb3IKKwkJLy8gdGhlIFVTQS4gSWYgZHVyaW5nIGl0ZXJhdGlvbiB3ZSBtYXRjaCBzdGF0ZV9pZCwgdGhlbiB0aGF0IGlzIHRoZQorCQkvLyBjb250YWluZXIuCisKKwkJLy8gR2V0IHRoZSBudW1iZXIgb2YgaXRlbXMgaW4gdGhlIGJ1ZmZlcgorCQlpbnQgbGVuZ3RoID0gZGF0YS5sZW5ndGg7CisKKwkJLy8gUHJvY2VzcyBlYWNoIGVsZW1lbnQgaW4gdGhlIGJ1ZmZlciAtLSBpZ25vcmUgdGhlIGZpcnN0IGZpdmUgaXRlbXMuCisJCWZvciAoaW50IGkgPSA1OyBpIDwgbGVuZ3RoOyBpKyspIHsKKworCQkJLy8gSWdub3JlIGlycmVsZXZhbnQgZGF0YSBpdGVtcyB0aGF0IG9jY3VyIGF0IGJvdGggbGV2ZWxzCisJCQlpZiAoaSA9PSA3IHx8IGkgPT0gOCkgeworCQkJCWNvbnRpbnVlOworCQkJfQorCisJCQkvLyBJZ25vcmUgaXJyZWxldmFudCBkYXRhIHRoYXQgb25seSBvY2N1cnMgYXQgbGV2ZWwgMQorCQkJaWYgKGxldmVsID09IDEpIHsKKwkJCQlpZiAoaSA9PSA2IHx8IGkgPT0gOSkgeworCQkJCQljb250aW51ZTsKKwkJCQl9CisJCQl9CisKKwkJCS8vIElnbm9yZSBpcnJlbGV2YW50IGRhdGEgdGhhdCBvbmx5IG9jY3VycyBhdCBsZXZlbCAyCisJCQkvLyBJZiBsZXZlbCBpcyAyLCB0aGVuIGZpbmQgdGhlIGNvbnRhaW5lciBmb3IgdGhpcyBlbnRpdHkKKwkJCWlmIChsZXZlbCA9PSAyKSB7CisKKwkJCQkvLyBJcnJlbGV2YW50IGRhdGEsIGlnbm9yZS4KKwkJCQlpZiAoaSA9PSA1KSB7CisJCQkJCWNvbnRpbnVlOworCQkJCX0KKworCQkJCS8vIEZpbmQgdGhlIGNvbnRhaW5lciBvZiB0aGUgbGV2ZWwgMiBhZG1pbmlzdHJhdGlvbi4KKwkJCQlpZiAoaSA9PSA2KSB7CisJCQkJCWRpdmFTdHJpbmcgKz0gIiwiICsgZmluZENvbnRhaW5lcihzdGF0ZV9pZCwgZGF0YUxpc3QpOyAvLyROT04tTkxTLTEkCisKKwkJCQkJaWYgKGRhdGFbTDJfQURNSU5fVFlQRV0uY29udGFpbnMoIkNlbnN1cyBBcmVhIikgPT0gZmFsc2UpIHsgLy8kTk9OLU5MUy0xJAorCQkJCQkJLy8gQWRkIHRoZSB0eXBlIHRvIHRoZSBuYW1lIG9mIHRoZSBhZG1pbmlzdHJhdGlvbiA6CisJCQkJCQkvLyAoaS5lLiBmb3IgRmFpcmZheCA9IGFkbWluIGFuZCBjaXR5ID0gdHlwZSwgZ2V0CisJCQkJCQkvLyBGYWlyZmF4IGNpdHkpCisJCQkJCQlkaXZhU3RyaW5nICs9ICIsIiArIGRhdGFbTDJfQURNSU5dICsgIiAiIC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAorCQkJCQkJCQkrIGRhdGFbTDJfQURNSU5fVFlQRV07CisJCQkJCQljb250aW51ZTsKKwkJCQkJfQorCisJCQkJfQorCisJCQl9CisKKwkJCWRpdmFTdHJpbmcgKz0gIiwiICsgZGF0YVtpXTsgLy8kTk9OLU5MUy0xJAorCisJCX0gLy8gZm9yCisKKwkJLy8gRmluYWxseSBhZGQgYSBuZXcgbGluZSB0byB0aGUgc3RyaW5nLgorCQlkaXZhU3RyaW5nICs9ICJcbiI7IC8vJE5PTi1OTFMtMSQKKworCQlyZXR1cm4gZGl2YVN0cmluZzsKKwl9CisKKwkvKioKKwkgKiBGaW5kIHRoZSBsZXZlbCAxIGNvbnRhaW5lciBmb3IgdGhlIGN1cnJlbnQgbGV2ZWwgMiBhZG1pbmlzdHJhdGlvbgorCSAqIAorCSAqIEBwYXJhbSBzdGF0ZSAtCisJICogICAgICAgICAgICB0aGUgaWQgb2YgdGhlIGNvbnRhaW5lciAoc3RhdGUpCisJICogCisJICogQHBhcmFtIGRhdGFMaXN0IC0KKwkgKiAgICAgICAgICAgIGEgbGlzdCBvZiBsZXZlbCAxIGRhdGEgZm9yIHRoZSBVU0EKKwkgKiAKKwkgKiBAcmV0dXJuIC0gdGhlIG5hbWUgb2YgdGhlIGxldmVsIDEgY29udGFpbmVyCisJICogCisJICovCisJcHVibGljIFN0cmluZyBmaW5kQ29udGFpbmVyKFN0cmluZyBzdGF0ZSwgTGlzdCBkYXRhTGlzdCkgeworCisJCS8vIEZvcm1hdCBpbiBkYXRhIGxpc3QgaXMgOgorCQkvLyBVUyA6IFVTQSA6IFVTLUFMIDogQWxhYmFtYSA6IDEKKworCQkvLyBVc2VmdWwgc3ltYm9saWMgY29uc3RhbnRzCisJCWZpbmFsIGludCBDT05UQUlORVIgPSAzOworCQlmaW5hbCBpbnQgU1RBVEVfSUQgPSA0OworCisJCVN0cmluZyBzdGF0ZVN0ciA9IHN0YXRlLnJlcGxhY2UoIlxcdCIsICIiKTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCisKKwkJSXRlcmF0b3IgaXQgPSBkYXRhTGlzdC5pdGVyYXRvcigpOworCisJCXdoaWxlIChpdC5oYXNOZXh0KCkpIHsKKworCQkJU3RyaW5nIGVudHJ5ID0gKChTdHJpbmcpIGl0Lm5leHQoKSkudG9VcHBlckNhc2UoKS50cmltKCk7CisKKwkJCWVudHJ5ID0gZW50cnkucmVwbGFjZUFsbCgiXFx0IiwgIiIpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKKworCQkJU3RyaW5nIGVudHJpZXNbXSA9IGVudHJ5LnNwbGl0KCI6Iik7IC8vJE5PTi1OTFMtMSQKKworCQkJU3RyaW5nIGN1cnJlbnRfaWQgPSBlbnRyaWVzW1NUQVRFX0lEXTsKKworCQkJaWYgKEludGVnZXIucGFyc2VJbnQoc3RhdGVTdHIpID09IEludGVnZXIucGFyc2VJbnQoY3VycmVudF9pZCkpIHsKKwkJCQlyZXR1cm4gZW50cmllc1tDT05UQUlORVJdLnRvVXBwZXJDYXNlKCk7CisJCQl9CisKKwkJfQorCisJCXJldHVybiAiTk9UIEZPVU5EIjsgLy8kTk9OLU5MUy0xJAorCX0KKworCS8qKgorCSAqIE1haW4gZXhlY3V0aW9uIGVudHJ5IHBvaW50LgorCSAqIAorCSAqIEBwYXJhbSBhcmdzCisJICovCisJcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgeworCQkvLyBmaW5hbCBpbnQgSVNPXzMxNjZfMSA9IDA7CisJCS8vIGZpbmFsIGludCBVU0FfTDFfREFUQSA9IDA7CisJCS8vIGZpbmFsIGludCBUQVJHRVRfTElTVCA9IDE7CisJCS8vIGZpbmFsIGludCBPVVRQVVRfRElSID0gMjsKKwkJLy8gZmluYWwgaW50IFBBUkFNUyA9IDM7CisJCS8vCisJCS8vIGlmIChhcmdzLmxlbmd0aCA8IFBBUkFNUykgeworCQkvLyBVdGlsTG9nZ2VyLmxvZ0luZm9ybWF0aW9uKCItLVdyb25nIGFyZ3VtZW50cy0tIik7IC8vJE5PTi1OTFMtMSQKKwkJLy8gU3lzdGVtLm91dAorCQkvLyAucHJpbnRsbigiXHRUbyBydW4sIHBsZWFzZSBwcm92aWRlIHRoZSBmb2xsb3dpbmcgYXJndW1lbnRzIDogIik7CisJCS8vIC8vJE5PTi1OTFMtMSQKKwkJLy8gVXRpbExvZ2dlci5sb2dJbmZvcm1hdGlvbigiXHRcdCBVU0EgbGV2ZWwgMSBkYXRhIGZpbGUiKTsgLy8kTk9OLU5MUy0xJAorCQkvLyBVdGlsTG9nZ2VyLmxvZ0luZm9ybWF0aW9uKCJcdFx0IFRhcmdldCBjb3VudHJpZXMgZmlsZSIpOyAvLyROT04tTkxTLTEkCisJCS8vIFV0aWxMb2dnZXIubG9nSW5mb3JtYXRpb24oIlx0XHQgT3V0cHV0IGRpcmVjdG9yeSIpOyAvLyROT04tTkxTLTEkCisJCS8vIHJldHVybjsKKwkJLy8gfQorCisJCS8vIFVTQURpdmFDb252ZXJ0ZXIgY29udmVydGVyID0gbmV3IFVTQURpdmFDb252ZXJ0ZXIoLyoKKwkJLy8gYXJnc1tJU09fMzE2Nl8xXSwgKi8KKwkJLy8gYXJnc1tVU0FfTDFfREFUQV0sIGFyZ3NbVEFSR0VUX0xJU1RdLCBhcmdzW09VVFBVVF9ESVJdKTsKKwkJLy8gY29udmVydGVyLnJ1bigpOworCisJCWZpbmFsIGludCBDT05GSUdfRklMRSA9IDA7CisJCWZpbmFsIGludCBQQVJBTVMgPSAxOworCisJCWlmIChhcmdzLmxlbmd0aCA8IFBBUkFNUykgeworCQkJVXRpbExvZ2dlci5sb2dJbmZvcm1hdGlvbigiXHRcdC0tV3JvbmcgYXJndW1lbnRzLS0iKTsgLy8kTk9OLU5MUy0xJAorCQkJU3lzdGVtLm91dAorCQkJCQkucHJpbnRsbigiXHRcdFRvIHJ1biwgcGxlYXNlIHByb3ZpZGUgdGhlIGZvbGxvd2luZyBhcmd1bWVudChzKSA6ICIpOyAvLyROT04tTkxTLTEkCisJCQlVdGlsTG9nZ2VyLmxvZ0luZm9ybWF0aW9uKCJcdFx0XHQgQ29uZmlndXJhdGlvbiBmaWxlIik7IC8vJE5PTi1OTFMtMSQKKwkJCVN5c3RlbS5leGl0KDEpOworCQl9CisKKwkJVVNBMkRpdmFGb3JtYXRDb252ZXJ0ZXIgY29udmVydGVyID0gbmV3IFVTQTJEaXZhRm9ybWF0Q29udmVydGVyKAorCQkJCWFyZ3NbQ09ORklHX0ZJTEVdKTsKKworCQljb252ZXJ0ZXIucnVuKCk7CisJfQorCit9CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91dGlsaXR5L2dlbmVyYXRvcnMvVXRpbExvZ2dlci5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdXRpbGl0eS9nZW5lcmF0b3JzL1V0aWxMb2dnZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NWExMzFiCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdXRpbGl0eS9nZW5lcmF0b3JzL1V0aWxMb2dnZXIuamF2YQpAQCAtMCwwICsxLDYwIEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS5nZW5lcmF0b3JzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCisvKioKKyAqIFRoZSBhY3RpdmF0b3IgY2xhc3MgY29udHJvbHMgdGhlIHBsdWctaW4gbGlmZSBjeWNsZQorICovCitwdWJsaWMgY2xhc3MgVXRpbExvZ2dlciAgeworCisJLyoqCisJICogVGhlIHBsdWctaW4gSUQKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBQTFVHSU5fSUQgPSAib3JnLmVjbGlwc2Uuc3RlbS51aS5yZXBvcnRzIjsgLy8kTk9OLU5MUy0xJAorCisJLy8gVGhlIHNoYXJlZCBpbnN0YW5jZQorCXByaXZhdGUgc3RhdGljIFV0aWxMb2dnZXIgcGx1Z2luOworCisJLyoqCisJICogVGhlIGNvbnN0cnVjdG9yCisJICovCisJcHVibGljIFV0aWxMb2dnZXIoKSB7CisJCXBsdWdpbiA9IHRoaXM7CisJfQorCisJCisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBzaGFyZWQgaW5zdGFuY2UKKwkgKiAKKwkgKiBAcmV0dXJuIHRoZSBzaGFyZWQgaW5zdGFuY2UKKwkgKi8KKwlwdWJsaWMgc3RhdGljIFV0aWxMb2dnZXIgZ2V0RGVmYXVsdCgpIHsKKwkJcmV0dXJuIHBsdWdpbjsKKwl9CisKKwkKKwkvKioKKwkgKiBMb2cgaW5mb3JtYXRpb24gdG8gdGhlIElMb2cgZm9yIHRoaXMgcGx1Z2luCisJICogVGhlIG1ldGhvZCBpcyBvdmVybG9hZGVkIHRvIGFsbG93IGZvciBsb2dJbmZvcm1hdGlvbiB3aXRob3V0IGFuIGVycm9yIAorCSAqIG1ldGhvZCBzZXRzIHRoZSBlcnJvciB0byBudWxsLiBUaGlzIHNob3VsZCBiZSB1c2VkIGluc3RlYWQgb2YgVXRpbExvZ2dlci5sb2dJbmZvcm1hdGlvbgorCSAqIHRocm91Z2hvdXQgdGhlIGNvZGUuCisJICogQHBhcmFtIG1lc3NhZ2UKKwkgKiAgICAgICAgICAgIHRoZSBsb2NhbGl6ZWQgaW5mb3JtYXRpb24gbWVzc2FnZSB0ZXh0CisJICoKKwkgKi8KKwlwdWJsaWMgc3RhdGljIHZvaWQgbG9nSW5mb3JtYXRpb24oU3RyaW5nIG1lc3NhZ2UpIHsKKwkJCQlTeXN0ZW0ub3V0LnByaW50bG4obWVzc2FnZSk7CisJfSAvLyBsb2dJbmZvcm1hdGlvbgorCQorfSAvLyBBY3RpdmF0b3IKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3NyYy9vcmcvZWNsaXBzZS9zdGVtL3V0aWxpdHkvZ2VuZXJhdG9ycy9Xb3JsZFJlYWRlci5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdXRpbGl0eS9nZW5lcmF0b3JzL1dvcmxkUmVhZGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmQ1YWNiMwotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3NyYy9vcmcvZWNsaXBzZS9zdGVtL3V0aWxpdHkvZ2VuZXJhdG9ycy9Xb3JsZFJlYWRlci5qYXZhCkBAIC0wLDAgKzEsMTM4IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS5nZW5lcmF0b3JzOworCitpbXBvcnQgamF2YS5pby5CdWZmZXJlZFJlYWRlcjsKK2ltcG9ydCBqYXZhLmlvLkZpbGVOb3RGb3VuZEV4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLmlvLkZpbGVSZWFkZXI7CitpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKgorICogU1RFTSBJSSBEYXRhIE1pZ3JhdGlvbi9HZW5lcmF0aW9uIFV0aWxpdGllcyAtLSBJbnN0YW5jZXMgb2YgdGhpcyB1dGlsaXR5IGNsYXNzIHRha2UgYXMgaW5wdXQKKyAqIGEgZmlsZSBjb250YWluaW5nIGEgbGlzdCBvZiBhbGwgaW5wdXQgZGF0YSB3ZSB3YW50IHRvIHJlYWQuIFRoZSBpbnB1dCBzaG91bGQKKyAqIGJlIGluIEVTUkkgZm9ybWF0IGFuZCB0aGUgb3V0cHV0IGlzIGEgcGxhaW4gdGV4dCBmaWxlLgorICoKKyAqCisgKiBOT1RFOiB0byBydW4gaW5zdGFuY2VzIG9mIHRoaXMgY2xhc3MsIHdlIG5lZWQgTWFwUmVhZGVyLmphdmEgZnJvbSBTVEVNIEkuCisgKiBPbmNlIHdlIGdldCBNYXBSZWFkZXIsIHdlIG5lZWQgdG8gdW5jb21tZW50IGxpbmVzIDExMS0xMTMgaW4gdGhpcyBmaWxlLgorICogCisgKiBBZGQgdGhlIGZvbGxvd2luZyB2YWx1ZXMgdG8gdGhlIHJ1biBjb25maWd1cmF0aW9uOgorICogCisgKiBDOlxFY2xpcHNlUHJvamVjdHNcd29ya3NwYWNlMlxHcmVlblNjcmVlblxkYXRhTWlncmF0aW9uXGlucHV0XHdvcmxkXE5vcnRoQW1lcmljYS50eHQKKyAqIAorICovCisKKy8qKgorICogCisgKiBOT1RFOiBUaGlzIGlzIGp1c3QgYW4gZXhhbXBsZSBvZiBhIHJlYWwgY29uZmlndXJhdGlvbi4gUGF0aHMgd2lsbCBjaGFuZ2UKKyAqIGFjY29yZGluZyB0byB0aGUgbG9jYXRpb24gaW4geW91ciBtYWNoaW5lIG9mIHRoZSBJU08zMTY2LTEsIElTTzMxNjYtMiBkYXRhCisgKiBmaWxlcyBhcyB3ZWxsIGFzIHRoZSBvdXRwdXQgZGlyZWN0b3J5IGFuZCB0aGUgZGlyZWN0b3J5IHdoZXJlIHdlIGZpbmQgdGhlCisgKiBtaWdyYXRlZCAob3IgZXh0cmFjdGVkKSBhcmVhL3BvcHVsYXRpb24gZGF0YSBmcm9tIFNURU0gSS4KKyAqIAorICogQWRkIHRoZSBmb2xsb3dpbmcgdmFsdWVzIHRvIHRoZSBydW4gY29uZmlndXJhdGlvbjoKKyAqIAorICogCisgKiAKKyAqLworCitwdWJsaWMgY2xhc3MgV29ybGRSZWFkZXIgeworCisJZmluYWwgaW50IExPQ0FUSU9OID0gMDsKKworCWZpbmFsIGludCBGSUxFX05BTUUgPSAxOworCisJU3RyaW5nW10gbG9jYXRpb25zID0gbnVsbDsKKworCS8qKgorCSAqIENvbnN0cnVjdG9yCisJICogCisJICogQHBhcmFtIGxvY2F0aW9ucworCSAqLworCXB1YmxpYyBXb3JsZFJlYWRlcihTdHJpbmdbXSBsb2NhdGlvbnMpIHsKKworCQkvLyBTZXQgYSByZWZlcmVuY2UgdG8gdGhlIGlucHV0IGxvY2F0aW9ucy4KKwkJdGhpcy5sb2NhdGlvbnMgPSBsb2NhdGlvbnM7CisKKwl9CisKKwkvKioKKwkgKiBQcm9jZXNzIGFsbCBpbnB1dCBjb3VudHJ5IGZpbGVzLiBGb3IgZWFjaCBjb3VudHJ5IGZpbGUsIGNhbGwgTWFwUmVhZGVyIG9uCisJICogaXQgdG8gZ2VuZXJhdGUgcGxhaW4gdGV4dCBmaWxlIGZyb20gRVNSSSBmaWxlLgorCSAqLworCXB1YmxpYyB2b2lkIHByb2Nlc3NJbnB1dCgpIHsKKworCQlTdHJpbmcgaW5wdXQgPSBudWxsOworCisJCWlmIChsb2NhdGlvbnMgPT0gbnVsbCkgeworCQkJVXRpbExvZ2dlci5sb2dJbmZvcm1hdGlvbigiRXJyb3I6IHBsZWFzZSBzcGVjaWZ5IGFuIGlucHV0IGxvY2F0aW9uKHMpIik7IC8vJE5PTi1OTFMtMSQKKwkJCXJldHVybjsKKwkJfQorCisJCWludCBzaXplID0gbG9jYXRpb25zLmxlbmd0aDsKKworCQlmb3IgKGludCBpID0gMDsgaSA8IHNpemU7IGkrKykgeworCisJCQl0cnkgeworCQkJCS8vIEZpcnN0LCBvcGVuIHRoZSBpbnB1dCBmaWxlIC0gcHJvY2VzcyBpbnB1dCBmaWxlcyBvbmUgYXQgYQorCQkJCS8vIHRpbWUuCisKKwkJCQlVdGlsTG9nZ2VyLmxvZ0luZm9ybWF0aW9uKCJMb2NhdGlvbiBpcyA6ICIgKyBsb2NhdGlvbnNbaV0pOyAvLyROT04tTkxTLTEkCisJCQkJQnVmZmVyZWRSZWFkZXIgaW4gPSBuZXcgQnVmZmVyZWRSZWFkZXIobmV3IEZpbGVSZWFkZXIoCisJCQkJCQlsb2NhdGlvbnNbaV0pKTsKKwkJCQl3aGlsZSAoKGlucHV0ID0gaW4ucmVhZExpbmUoKSkgIT0gbnVsbCkgeworCQkJCQlpZiAoaW5wdXQubGVuZ3RoKCkgPiAwKSB7CisJCQkJCQlVdGlsTG9nZ2VyLmxvZ0luZm9ybWF0aW9uKCJXb3JsZCBSZWFkZXIgLS0gSW5wdXQgPSAiICsgaW5wdXQpOyAvLyROT04tTkxTLTEkCisJCQkJCQltYXBSZWFkKGlucHV0KTsKKwkJCQkJfQorCQkJCX0KKwkJCQlpbi5jbG9zZSgpOworCQkJfSBjYXRjaCAoRmlsZU5vdEZvdW5kRXhjZXB0aW9uIGUpIHsKKwkJCQllLnByaW50U3RhY2tUcmFjZSgpOworCQkJfSBjYXRjaCAoSU9FeGNlcHRpb24gZSkgeworCQkJCWUucHJpbnRTdGFja1RyYWNlKCk7CisJCQl9CisJCX0KKwl9CisKKwkvKioKKwkgKiBUb2tlbml6ZSB0aGUgaW5wdXQgaW50byBhIGxvY2F0aW9uIGFuZCBmaWxlIG5hbWUuCisJICogCisJICogQHBhcmFtIGlucHV0CisJICogICAgICAgICAgICBBIHN0cmluZyBvZiB0aGUgZm9ybTogTE9DQVRJT047RklMRU5BTUUKKwkgKi8KKwlwdWJsaWMgdm9pZCBtYXBSZWFkKFN0cmluZyBpbnB1dCkgeworCQkvLyBTcGxpdCBpbnB1dCBzdHJpbmcgdG8gZ2V0IHRoZSBpbnB1dCBmb2xkZXIgYW5kIHRoZSBvdXRwdXQgZmlsZSBuYW1lLgorCQlTdHJpbmdbXSBkYXRhID0gaW5wdXQuc3BsaXQoIjsiKTsgLy8kTk9OLU5MUy0xJAorCQlTdHJpbmcgbG9jYXRpb24gPSBkYXRhW0xPQ0FUSU9OXTsKKwkJU3RyaW5nIGZpbGVOYW1lID0gZGF0YVtGSUxFX05BTUVdOworCisJCWlmIChsb2NhdGlvbiA9PSBudWxsIHx8IGZpbGVOYW1lID09IG51bGwpIHsKKwkJCXJldHVybjsKKwkJfQorCQlVdGlsTG9nZ2VyLmxvZ0luZm9ybWF0aW9uKCJMb2NhdGlvbiBpcyA6ICIgKyBsb2NhdGlvbik7IC8vJE5PTi1OTFMtMSQKKwkJVXRpbExvZ2dlci5sb2dJbmZvcm1hdGlvbigiRmlsZSBuYW1lIGlzIDogIiArIGZpbGVOYW1lKTsgLy8kTk9OLU5MUy0xJAorCQlNYXBSZWFkZXIgbXIgPSBuZXcgTWFwUmVhZGVyKGZpbGVOYW1lLnRyaW0oKSk7CisJCW1yLnJlYWREaXJlY3RvcnkobG9jYXRpb24udHJpbSgpKTsKKwkJbXIuY2xvc2VGaWxlKCk7CisJfQorCisJLyoqCisJICogRXhlY3V0aW9uIGVudHJ5IHBvaW50CisJICogCisJICogQHBhcmFtIGFyZ3MKKwkgKi8KKwlwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CisJCVdvcmxkUmVhZGVyIHdyID0gbmV3IFdvcmxkUmVhZGVyKGFyZ3MpOworCQl3ci5wcm9jZXNzSW5wdXQoKTsKKwl9CisKK30KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3NyYy9vcmcvZWNsaXBzZS9zdGVtL3V0aWxpdHkvZ2VuZXJhdG9ycy9tZXNzYWdlcy5wcm9wZXJ0aWVzIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdXRpbGl0eS9nZW5lcmF0b3JzL21lc3NhZ2VzLnByb3BlcnRpZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWQyYTY5YgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3NyYy9vcmcvZWNsaXBzZS9zdGVtL3V0aWxpdHkvZ2VuZXJhdG9ycy9tZXNzYWdlcy5wcm9wZXJ0aWVzCkBAIC0wLDAgKzEsMzM4IEBACitBZG1pbjFMZXhTb3J0ZXIuMD1Qcm9jZXNzaW5nIGNvdW50cnkgOiAKK0FkbWluMUxleFNvcnRlci4zPV9BRE1JTjFfTEVYLnR4dAorQWRtaW4xTGV4U29ydGVyLjM9X0FETUlOMV9MRVgudHh0CitBZG1pbjFMZXhTb3J0ZXIuMTA9V3JvbmcgYXJndW1lbnRzLiBQcm92aWRlIElTTyAzMTY2LTEsIElTTyAzMTY2LTIsIElTTyBjb2RlIGZpeCBmaWxlLCBsaXN0IG9mIGNvdW50cmllcywgYW5kIG91dHB1dCBkaXJlY3RvcnkuCitBZG1pbjJMZXhTb3J0ZXIuMTA9RGVzY3JpcHRvcnMgYnkgbGV4aWNvZ3JhcGhpYyBvcmRlcmluZyA6IAorQWRtaW4yTGV4U29ydGVyLjExPUFkbWluIDEgPSAKK0FkbWluMkxleFNvcnRlci4xMj1cdFx0QXQgOiAKK0FkbWluMkxleFNvcnRlci4xOT1cdFx0R2VuZXJhdGVkIDogCitBZG1pbjJMZXhTb3J0ZXIuMjA9XHRcdEdlbmVyYXRlZCA6IAorQWRtaW4yTGV4U29ydGVyLjIxPURlc2NyaXB0b3JzIGJ5IGxleGljb2dyYXBoaWMgb3JkZXJpbmcgOiAKK0FkbWluMkxleFNvcnRlci4yMj1BZG1pbiAxID0gCitBZG1pbjJMZXhTb3J0ZXIuMjM9QXQgOiAKK0FkbWluMkxleFNvcnRlci4yND1cIC0tIGFkbWluMiBpcyA6IAorQWRtaW4yTGV4U29ydGVyLjI1PWluZGV4TG9va3VwIDogZW50cnkgbm90IGZvdW5kIGZvciAKK0FkbWluMUxleFNvcnRlci4xPVByb2Nlc3NpbmcgY291bnRyeSA6IAorQWRtaW4xTGV4U29ydGVyLjI9XCA+Pj4+CitBZG1pbjFMZXhTb3J0ZXIuOD1cdFx0R2VuZXJhdGVkIDogCitBZG1pbjFMZXhTb3J0ZXIuOT1Xcm9uZyBhcmd1bWVudHMuIFByb3ZpZGUgSVNPIDMxNjYtMSwgSVNPIDMxNjYtMiwgSVNPIGNvZGUgZml4IGZpbGUsIGxpc3Qgb2YgY291bnRyaWVzLCBhbmQgb3V0cHV0IGRpcmVjdG9yeS4KK0FkbWluMUxleFNvcnRlci45PVx0XHRHZW5lcmF0ZWQgOiAKK0FkbWluMkxleFNvcnRlci4wPVByb2Nlc3NpbmcgY291bnRyeSA6IAorQWRtaW4yTGV4U29ydGVyLjU9X0FETUlOMl9MRVgudHh0CitBZG1pbjJMZXhTb3J0ZXIuOT1EZXNjcmlwdG9ycyBieSBsZXhpY29ncmFwaGljIG9yZGVyaW5nIDogCitBcmVhRGF0YU1pZ3JhdG9yLjA9RmlsZSBwYXRoID0gCitBcmVhRGF0YU1pZ3JhdG9yLjE9TG9hZFhNTCgpOiAgRXJyb3IgY29uZmlndXJpbmcgeG1sIGRvY3VtZW50IGJ1aWxkZXIgCitBcmVhR2VuZXJhdG9yLjEwPUNJQQorQXJlYUdlbmVyYXRvci4xMT1DSUEKK0FyZWFHZW5lcmF0b3IuMTE0PVVOSVRFRE5BVElPTlMKK0FyZWFHZW5lcmF0b3IuMTE1PVVOSVRFRE5BVElPTlMKK0FyZWFHZW5lcmF0b3IuMTIyPV8yX1BPTFlBUkVBLnR4dAorQXJlYUdlbmVyYXRvci4xMTY9YXJlYS5wcm9wZXJ0aWVzCitBcmVhR2VuZXJhdG9yLjEyMz1MZXZlbCAyICggCitBcmVhR2VuZXJhdG9yLjExNz1cIExldmVsIDIgYWRtaW4gPSAKK0FyZWFHZW5lcmF0b3IuMTE4PVwgRGVzY3JpcHRvciA9IAorQXJlYUdlbmVyYXRvci4xMTk9XCBhcmVhID0gCitBcmVhR2VuZXJhdG9yLjEyMD1cIGxldmVsID0gCitBcmVhRGF0YU1pZ3JhdG9yLjEwPUlnbm9yaW5nIG1hbGZvcm1lZCBlbnRyeSA6IAorQXJlYURhdGFNaWdyYXRvci4xNz1DOlxcRWNsaXBzZVByb2plY3RzXFx3b3Jrc3BhY2UyXFxHcmVlblNjcmVlblxcSW5zdGFsbFRlbXBsYXRlXFxNYXBzXFwKK0FyZWFEYXRhTWlncmF0b3IuMTk9Q291bnRyeSBpcyA6ICAKK0FyZWFEYXRhTWlncmF0b3IuMjA9XCBjb2RlID0gCitBcmVhRGF0YU1pZ3JhdG9yLjIxPV9BUkVBLnR4dAorQXJlYURhdGFNaWdyYXRvci4yMj1fQXJlYV8KK0FyZWFEYXRhTWlncmF0b3IuMjM9LnhtbAorQXJlYURhdGFNaWdyYXRvci4yND1GaWxlIG5vdCBmb3VuZCBmb3IgOiAKK0FyZWFEYXRhTWlncmF0b3IuMjg9V3JvbmcgYXJndW1lbnRzLiBQcm92aWRlIElTTyBkYXRhIGZpbGUsIGxpc3Qgb2YgY291bnRyaWVzLCBhbmQgb3V0cHV0IGRpcmVjdG9yeS4KK0FyZWFHZW5lcmF0b3IuMT1DSUEKK0FyZWFHZW5lcmF0b3IuMj1VU0NFTlNVU1BVRVJUT1JJQ08KK0FyZWFHZW5lcmF0b3IuMz1VU0NFTlNVU0FSRUEKK0FyZWFHZW5lcmF0b3IuND1VU0NFTlNVU0JPVU5EUworQXJlYUdlbmVyYXRvci41PUNJQQorQXJlYUdlbmVyYXRvci42PUNJVFlQT1BVTEFUSU9OCitBcmVhR2VuZXJhdG9yLjc9VVNDRU5TVVNQVUVSVE9SSUNPCitBcmVhR2VuZXJhdG9yLjg9VVNDRU5TVVNCT1VORFMKK0FyZWFHZW5lcmF0b3IuOT1VU0NFTlNVU0FSRUEKK0FyZWFHZW5lcmF0b3IuMD1DSVRZUE9QVUxBVElPTgorRGl2YUNvbnZlcnRlci4xPVByb2Nlc3NpbmcgY291bnRyeSA6IAorRGl2YUNvbnZlcnRlci4xPVByb2Nlc3NpbmcgY291bnRyeSA6IAorRGl2YUNvbnZlcnRlci43PVxcVVNBLnR4dAorRGl2YUNvbnZlcnRlci44PVVTQSxVbml0ZWQgU3RhdGVzCitEaXZhQ29udmVydGVyLjEwPUNlbnN1cyBBcmVhCitEaXZhQ29udmVydGVyLjIwPU5PVCBGT1VORAorRGl2YUNvbnZlcnRlci4yMT1Xcm9uZyBhcmd1bWVudHMuIFByb3ZpZGUgVVNBIGxldmVsIDEgZGF0YSBmaWxlLCB0YXJnZXQgbGlzdCwgYW5kIG91dHB1dCBkaXJlY3RvcnkuCitEb3duU2FtcGxlci4wPVdyb25nIGFyZ3VtZW50cy4gUHJvdmlkZSB0aHJlc2hvbGQgKGFscGhhIGRlZ3Jlc3MpLCB0b3RhbCBwYXNzZXMsIElTTyAzMTY2LTEgYW5kIElTTyAzMTY2LTIgZGF0YSBmaWxlcywgSVNPIGNvZGUgZml4IGZpbGUsIGxpc3Qgb2YgY291bnRyaWVzLCBhbmQgb3V0cHV0IGRpcmVjdG9yaWVzLgorR2VuVXRpbHMuMTU9Rk9PCitHZW5VdGlscy4xNj1VTksKK0dlblV0aWxzLjE3PVVOSworR2VuVXRpbHMuMTg9MAorR2VuVXRpbHMuMTk9RGVzY3JpcHRvciAtPiAKK0dlblV0aWxzLjk9MAorR2VuVXRpbHMuMzk9XCMgKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuXG4KK0dlblV0aWxzLjQwPVwjICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFsc1xuCitHZW5VdGlscy40MT1cIyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMFxuCitHZW5VdGlscy40Mj1cIyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0XG4KK0dlblV0aWxzLjQzPVwjICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWxcbgorR2VuVXRpbHMuNDU9XCMgKiBDb250cmlidXRvcnM6XG4KK0dlblV0aWxzLjQ2PVwjICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvblxuCitHZW5VdGlscy4xND1Ob3QgRm91bmQKK0dlblV0aWxzLjEzPVwjICogS2V5IEZvcm1hdDogXG4KK0dlblV0aWxzLjEyPVwjICogXHQgRm9yIGxldmVsIDEgZGF0YSwgdGhlIGtleSBpcyB0aGUgSVNPMzE2Ni0yIGNvZGUuIEFuIElTTzMxNjYtMiBjb2RlIGlzIGNvbXBvc2VkIGFzIGZvbGxvd3M6IFxuCitHZW5VdGlscy41Nz1cIyAqIGEgdHdvIGxldHRlciBjb3VudHJ5IGNvZGUgZm9sbG93ZWQgYnkgdXAgdG8gdGhyZWUgYWxwaGFudW1lcmljIGNoYXJhY3RlcnMgZm9yIHRoZSBsZXZlbCAxIGFkbWluaXN0cmF0aW9uLlxuCitHZW5VdGlscy41OT1cIyAqIFx0IEZvciBsZXZlbCAyIGRhdGEsIHRoZSBrZXkgaXMgdGhlIElTTzMxNjYtMiBjb2RlIGZvbGxvd2VkIGJ5IHNpeCBkaWdpdHMuIFRoZSBsZWZ0bW9zdCB0d28gZGlnaXRzIGluZGljYXRlXG4KK0dlblV0aWxzLjYwPVwjICogdGhlIGxldmVsIDEgY29udGFpbmVyIG9mIGEgbGV2ZWwgMiBhZG1pbmlzdHJhdGlvbiAoaS5lLiBDYWxpZm9ybmlhIGlzIGEgbGV2ZWwgMSBjb250YWluZXIgZm9yIE9yYW5nZSBDb3VudHlcbgorR2VuVXRpbHMuNjE9XCMgKiB3aGljaCBpcyBhIGxldmVsIDIgYWRtaW5pc3RyYXRpb24pLiAgVGhlIHR3byBkaWdpdHMgd2VyZSB0YWtlbiBmcm9tIGEgbGV4aWNvZ3JhcGhpYyBzb3J0aW5nIG9mIGFsbCB0aGVcbgorR2VuVXRpbHMuNjI9XCMgKiBsZXZlbCAxIGFkbWluaXN0cmF0aW9ucyB3aXRoaW4gYSBjb3VudHJ5LiBTaW1pbGFybHksIHRoZSBmb3VyIGxlZnRtb3N0IGRpZ2l0cyBpbmRpY2F0ZSBhIGxldmVsIDIgYWRtaW5pc3RyYXRpb24uXG4KK0dlblV0aWxzLjYzPVwjICogQWdhaW4sIHRoZXNlIGZvdXIgZGlnaXRzIGFyZSBhbiBpbmRleCBpbnRvIHRoZSBsZXhpY29ncmFwaGljIHNvcnRpbmcgb2YgYWxsIGxldmVsIDIgYWRtaW5pc3RyYXRpb25zIHdpdGhpbiBcbgorR2VuVXRpbHMuNjQ9XCMgKiBhIGxldmVsIDEgYWRtaW5pc3RyYXRpb24uIFxuCitHZW5VdGlscy42OD1cIyAqIEtleSBGb3JtYXQ6IFxuCitHZW5VdGlscy43MD1cIyAqIFx0IEZvciBsZXZlbCAxIGRhdGEsIHRoZSBrZXkgaXMgdGhlIElTTzMxNjYtMiBjb2RlLiBBbiBJU08zMTY2LTIgY29kZSBpcyBjb21wb3NlZCBhcyBmb2xsb3dzOiBcbgorR2VuVXRpbHMuNzE9XCMgKiBhIHR3byBsZXR0ZXIgY291bnRyeSBjb2RlIGZvbGxvd2VkIGJ5IHVwIHRvIHRocmVlIGFscGhhbnVtZXJpYyBjaGFyYWN0ZXJzIGZvciB0aGUgbGV2ZWwgMSBhZG1pbmlzdHJhdGlvbi5cbgorR2VuVXRpbHMuNzM9XCMgKiBcdCBGb3IgbGV2ZWwgMiBkYXRhLCB0aGUga2V5IGlzIHRoZSBJU08zMTY2LTIgY29kZSBmb2xsb3dlZCBieSBzaXggZGlnaXRzLiBUaGUgbGVmdG1vc3QgdHdvIGRpZ2l0cyBpbmRpY2F0ZVxuCitHZW5VdGlscy43ND1cIyAqIHRoZSBsZXZlbCAxIGNvbnRhaW5lciBvZiBhIGxldmVsIDIgYWRtaW5pc3RyYXRpb24gKGkuZS4gQ2FsaWZvcm5pYSBpcyBhIGxldmVsIDEgY29udGFpbmVyIGZvciBPcmFuZ2UgQ291bnR5XG4KK0dlblV0aWxzLjc1PVwjICogd2hpY2ggaXMgYSBsZXZlbCAyIGFkbWluaXN0cmF0aW9uKS4gIFRoZSB0d28gZGlnaXRzIHdlcmUgdGFrZW4gZnJvbSBhIGxleGljb2dyYXBoaWMgc29ydGluZyBvZiBhbGwgdGhlXG4KK0dlblV0aWxzLjc2PVwjICogbGV2ZWwgMSBhZG1pbmlzdHJhdGlvbnMgd2l0aGluIGEgY291bnRyeS4gU2ltaWxhcmx5LCB0aGUgZm91ciBsZWZ0bW9zdCBkaWdpdHMgaW5kaWNhdGUgdGhlIGxldmVsIDIgYWRtaW5pc3RyYXRpb24uXG4KK0dlblV0aWxzLjc3PVwjICogQWdhaW4sIHRoZXNlIGZvdXIgZGlnaXRzIGFyZSBhbiBpbmRleCBpbnRvIHRoZSBsZXhpY29ncmFwaGljIHNvcnRpbmcgb2YgYWxsIGxldmVsIDIgYWRtaW5pc3RyYXRpb25zIHdpdGhpbiBcbgorR2VuVXRpbHMuNzg9XCMgKiBhIGxldmVsIDEgYWRtaW5pc3RyYXRpb24uIFxuCitHZW5VdGlscy44Mj1cIyAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy5cbgorR2VuVXRpbHMuODM9XCMgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzXG4KK0dlblV0aWxzLjg0PVwjICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wXG4KK0dlblV0aWxzLjg1PVwjICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXRcbgorR2VuVXRpbHMuODY9XCMgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbFxuCitHZW5VdGlscy44OD1cIyAqIENvbnRyaWJ1dG9yczpcbgorR2VuVXRpbHMuODk9XCMgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uXG4KK0dlblV0aWxzLjExPTAKK0dlblV0aWxzLjkyPUFBCitHZW5VdGlscy45Mz1BQUEKK0dlblV0aWxzLjk0PURVTU1ZCitHZW5VdGlscy45NT1GT08KK0dlblV0aWxzLjk2PUZPTworR2VuVXRpbHMuMTA9MAorR2VuVXRpbHMuMTA2PS1VTksKK0dlblV0aWxzLjEwNz1BQQorR2VuVXRpbHMuMTA4PUZPTworR2VuVXRpbHMuMTEwPU1hbGZvcm1lZCBsZXggZGF0YSBvYmplY3QuIFRvdGFsIGRhdGEgZWxlbWVudHMgPSAKK0dlblV0aWxzLjExMT0uIEV4cGVjdGVkIDogCitHZW5VdGlscy4xMTM9TWFsZm9ybWVkIGxleCBkYXRhIG9iamVjdC4gVG90YWwgZGF0YSBlbGVtZW50cyA9IAorR2VuVXRpbHMuMTE0PS4gRXhwZWN0ZWQgOiAKK0dlblV0aWxzLjExNz1DYW50IHJlYWQgOiAKK0dlblV0aWxzLjExOD1DYW50IHJlYWQgOiAKK0dNTEdlbmVyYXRvci4wPTw/eG1sIHZlcnNpb249CitHTUxHZW5lcmF0b3IuMT1cIGVuY29kaW5nPQorR01MR2VuZXJhdG9yLjcyPU5vdCBGb3VuZAorR01MR2VuZXJhdG9yLjczPURlc2NyaXB0b3Igbm90IGZvdW5kIGZvciAgCitHTUxHZW5lcmF0b3IuNzE9XCBpbiAKK0dNTEdlbmVyYXRvci4yPT8+XG4KK0dNTEdlbmVyYXRvci43ND0iPlxuCitHTUxHZW5lcmF0b3IuNzU9Ii8+XG4KK0dNTEdlbmVyYXRvci43Nj0iPlxuCitHcm91cEdlbmVyYXRvci4wPUM6XFxzdGVtSUlcXG9yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eVxcZGF0YU1pZ3JhdGlvblxcaW5wdXRcXHNvcnRcXAorR3JvdXBHZW5lcmF0b3IuOD1fR1JPVVBFRC50eHQKK0dyb3VwR2VuZXJhdG9yLjE0PV9BRE1JTjFfTEVYLnR4dAorR3JvdXBHZW5lcmF0b3IuMTU9X0FETUlOMl9MRVgudHh0CitHcm91cEdlbmVyYXRvci4yMj1cdFx0R2VuZXJhdGVkIDogCitHcm91cEdlbmVyYXRvci4yMz1Xcm9uZyBhcmd1bWVudHMuIFByb3ZpZGUgSVNPMzE2Ni0xIGFuZCBJU08zMTY2LTIgZmlsZXMsIElTTyBjb2RlcyBmaXggZmlsZSwgbGlzdCBvZiBjb3VudHJpZXMsIGFuZCBvdXRwdXQgZGlyZWN0b3J5LgorTGV4MU9iai4wPTAKK0xleDJPYmouMD0wCitMZXgyT2JqLjE9MAorTWF0Y2hQcm9maWxlci4wPTAKK01hdGNoUHJvZmlsZXIuMT1fUE9QVUxBVElPTi50eHQKK01hdGNoUHJvZmlsZXIuMj1fQVJFQS50eHQKK01hdGNoUHJvZmlsZXIuNTg9V3JvbmcgYXJndW1lbnRzLiBQcm92aWRlOiBpc28gMzE2Ni0yIGZpbGUsIENJQSBkYXRhLCB0YXJnZXQgZmlsZSwgYW5kIG1hdGNoIGZpbGUuIAorTXVsdGlQYXNzRG93blNhbXBsZXIuMz1DOlxcc3RlbUlJXFxvcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHlcXGRhdGFNaWdyYXRpb25cXGlucHV0XFxJU09GaXhcXFVTQV9GSVBTLnR4dAorTXVsdGlQYXNzRG93blNhbXBsZXIuND1DOlxcc3RlbUlJXFxvcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHlcXGRhdGFNaWdyYXRpb25cXGlucHV0XFxzb3J0XFwKK011bHRpUGFzc0Rvd25TYW1wbGVyLjg9X1JFRFVDRURfCitNdWx0aVBhc3NEb3duU2FtcGxlci45PS50eHQKK011bHRpUGFzc0Rvd25TYW1wbGVyLjExPVByb2Nlc3NpbmcgY291bnRyeSA6IAorTXVsdGlQYXNzRG93blNhbXBsZXIuMj0lCitNdWx0aVBhc3NEb3duU2FtcGxlci4xND1cIG9mIAorTXVsdGlQYXNzRG93blNhbXBsZXIuMjI9LnR4dAorTXVsdGlQYXNzRG93blNhbXBsZXIuMjM9LnR4dAorTXVsdGlQYXNzRG93blNhbXBsZXIuMjY9LnhtbAorTXVsdGlQYXNzRG93blNhbXBsZXIuMjc9LnhtbAorTXVsdGlQYXNzRG93blNhbXBsZXIuMzM9X0FETUlOMl9MRVgudHh0CitNdWx0aVBhc3NEb3duU2FtcGxlci4zND1fQURNSU4yX0xFWC50eHQKK011bHRpUGFzc0Rvd25TYW1wbGVyLjQwPUFkbWluIExldmVsIDAKK011bHRpUGFzc0Rvd25TYW1wbGVyLjQyPVx0XHRHZW5lcmF0ZWQgOiAKK011bHRpUGFzc0Rvd25TYW1wbGVyLjQ1PVwgSVRFUkFUSU9OICoqKioqKioqKioqKlxuCitNdWx0aVBhc3NEb3duU2FtcGxlci40Nj1Qcm9maWxpbmcgcmVzdWx0cyBCRUZPUkUgcmVkdWN0aW9uIDogXG5cbgorTXVsdGlQYXNzRG93blNhbXBsZXIuNDc9UHJvZmlsaW5nIHJlc3VsdHMgQUZURVIgcmVkdWN0aW9uIDogXG5cbgorTXVsdGlQYXNzRG93blNhbXBsZXIuNDg9KioqKioqKioqKioqKiogR0xPQkFMIFNUQVRTICoqKioqKioqKioqKioqCitNdWx0aVBhc3NEb3duU2FtcGxlci40OT1Ub3RhbCBwb2x5Z29ucyA6IAorTXVsdGlQYXNzRG93blNhbXBsZXIuNTA9VG90YWwgcG9pbnRzIDogCitNdWx0aVBhc3NEb3duU2FtcGxlci41MT1BdmcgcG9pbnRzIHBlciBwb2x5Z29uIDogCitNdWx0aVBhc3NEb3duU2FtcGxlci41Mj1HbG9iYWwgcmVkdWN0aW9uIDogCitNdWx0aVBhc3NEb3duU2FtcGxlci41Mz1HbG9iYWwgcmVkdWN0aW9uIDogCitNdWx0aVBhc3NEb3duU2FtcGxlci41NT1HbG9iYWwgTUlOIHJlZHVjdGlvbiAgOiAKK011bHRpUGFzc0Rvd25TYW1wbGVyLjU3PUdsb2JhbCBNQVggcmVkdWN0aW9uICA6IAorTXVsdGlQYXNzRG93blNhbXBsZXIuNTk9XCBBbmdsZSA+PSAKK011bHRpUGFzc0Rvd25TYW1wbGVyLjYwPVwgRnJlcXVlbmN5IDogCitNdWx0aVBhc3NEb3duU2FtcGxlci42MT1cIEZyZXF1ZW5jeSA6IAorTXVsdGlQYXNzRG93blNhbXBsZXIuOTY9Ij5cbgorTXVsdGlQYXNzRG93blNhbXBsZXIuOTc9PGdtbDpvdXRlckJvdW5kYXJ5SXM+XG4KK011bHRpUGFzc0Rvd25TYW1wbGVyLjk4PTxnbWw6b3V0ZXJCb3VuZGFyeUlzPlxuCitNdWx0aVBhc3NEb3duU2FtcGxlci4xMDI9PGdtbDpwb3NMaXN0PlxuCitNdWx0aVBhc3NEb3duU2FtcGxlci4xMDM9PGdtbDpwb3NMaXN0PlxuCitNdWx0aVBhc3NEb3duU2FtcGxlci4xMDU9PC9nbWw6TGluZWFyUmluZz5cbgorTXVsdGlQYXNzRG93blNhbXBsZXIuMTA2PTwvZ21sOm91dGVyQm91bmRhcnlJcz5cbgorTXVsdGlQYXNzRG93blNhbXBsZXIuMTA3PTwvZ21sOlBvbHlnb24+XG4KK011bHRpUGFzc0Rvd25TYW1wbGVyLjEwOD08L2dtbDpQb2x5Z29uPlxuCitNdWx0aVBhc3NEb3duU2FtcGxlci4xMTI9Ii8+XG4KK011bHRpUGFzc0Rvd25TYW1wbGVyLjExMz08Z21sOlBvbHlnb24gZ21sOmlkPSIKK011bHRpUGFzc0Rvd25TYW1wbGVyLjExND0iPlxuCitNdWx0aVBhc3NEb3duU2FtcGxlci4xMTU9PGdtbDpvdXRlckJvdW5kYXJ5SXM+XG4KK011bHRpUGFzc0Rvd25TYW1wbGVyLjExNj08Z21sOkxpbmVhclJpbmc+XG4KK011bHRpUGFzc0Rvd25TYW1wbGVyLjExNz08Z21sOnBvc0xpc3Q+XG4KK011bHRpUGFzc0Rvd25TYW1wbGVyLjExOD1cbgorTXVsdGlQYXNzRG93blNhbXBsZXIuMTIwPTwvZ21sOkxpbmVhclJpbmc+XG4KK011bHRpUGFzc0Rvd25TYW1wbGVyLjEyMT08L2dtbDpvdXRlckJvdW5kYXJ5SXM+XG4KK011bHRpUGFzc0Rvd25TYW1wbGVyLjEyMj08L2dtbDpQb2x5Z29uPlxuCitNdWx0aVBhc3NEb3duU2FtcGxlci4xMjM9PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz5cbgorTXVsdGlQYXNzRG93blNhbXBsZXIuMTI0PTxNYXAgeG1sbnM6Z21sPSJodHRwOi8vd3d3Lm9wZW5naXMubmV0L2dtbCIgeG1sbnM6Z2VvcnNzPSJodHRwOi8vd3d3Lmdlb3Jzcy5vcmcvZ2VvcnNzIj5cbgorTXVsdGlQYXNzRG93blNhbXBsZXIuMTI1PTx0aXRsZT4KK011bHRpUGFzc0Rvd25TYW1wbGVyLjEyNj1cIExldmVsIAorTXVsdGlQYXNzRG93blNhbXBsZXIuMTI3PVwgTWFwPC90aXRsZT5cbgorTXVsdGlQYXNzRG93blNhbXBsZXIuMTI4PTxzdWJUaXRsZT5BZG1pbmlzdHJhdGl2ZSBCb3VuZGFyaWVzPC9zdWJUaXRsZT5cbgorTXVsdGlQYXNzRG93blNhbXBsZXIuMTI5PTx1cGRhdGVkPlR1ZSBOb3YgMDcgMTY6NTc6NTUgUFNUIDIwMDYgPC91cGRhdGVkPlxuCitNdWx0aVBhc3NEb3duU2FtcGxlci4xMzA9PGVudHJ5PlxuCitNdWx0aVBhc3NEb3duU2FtcGxlci4xMzE9PGdlb3Jzczp3aGVyZT5cbgorTXVsdGlQYXNzRG93blNhbXBsZXIuMTMyPTwvZ2VvcnNzOndoZXJlPlxuCitNdWx0aVBhc3NEb3duU2FtcGxlci4xMzM9PC9lbnRyeT5cbgorTXVsdGlQYXNzRG93blNhbXBsZXIuMTM0PTwvTWFwPlxuCitNdWx0aVBhc3NEb3duU2FtcGxlci4xMzU9V3JvbmcgYXJndW1lbnRzLiBQcm92aWRlIHRocmVzaG9sZCAoYWxwaGEgZGVncmVlcyksIHRvdGFsIHBhc3NlcywgSVNPMzE2Ni0xIGFuZCBJU08zMTY2LTIgZmlsZXMsIElTTyBjb2RlcyBmaXggZmlsZSwgbGlzdCBvZiBjb3VudHJpZXMsIGFuZCBvdXRwdXQgZGlyZWN0b3J5LgorTXVsdGlQYXNzRG93blNhbXBsZXIuMTM2PSUKK05hbWVHZW5lcmF0b3IuMD1JU08zMTY2XzEKK05hbWVHZW5lcmF0b3IuMT1Qcm9jZXNzaW5nIGNvdW50cnkgOiAKK05hbWVHZW5lcmF0b3IuMj1DOlxcc3RlbUlJXFxvcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHlcXGRhdGFNaWdyYXRpb25cXGlucHV0XFxzb3J0XFwKK05hbWVHZW5lcmF0b3IuOT1fbmFtZXMucHJvcGVydGllcworTmFtZUdlbmVyYXRvci4xNz1fQURNSU4yX0xFWC50eHQKK05hbWVHZW5lcmF0b3IuMTg9X0FETUlOMl9MRVgudHh0CitOYW1lR2VuZXJhdG9yLjIzPVwgTGV2ZWwgMSAoIAorTmFtZUdlbmVyYXRvci4yND1cIExldmVsIDEgKCAKK05hbWVHZW5lcmF0b3IuMjY9TGV2ZWwgMiAoIAorTmFtZUdlbmVyYXRvci4yNz1MZXZlbCAyICggCitOYW1lR2VuZXJhdG9yLjI5PVwgKS4gXG4KK05hbWVHZW5lcmF0b3IuMzk9XHRcdEdlbmVyYXRlZCA6IAorTmFtZUdlbmVyYXRvci40MT1cIyBMZXZlbCAwXG4KK05hbWVHZW5lcmF0b3IuNDI9XG5cIyBMZXZlbCAxIChhZG1pbiAxID0gZS5nLiwgc3RhdGUpXG4KK05hbWVHZW5lcmF0b3IuNDM9XG5cIyBMZXZlbCAyIChhZG1pbiAyID0gZS5nLiwgY291bnRyeSlcbgorTmFtZUdlbmVyYXRvci40ND1Xcm9uZyBhcmd1bWVudHMuIFByb3ZpZGUgSVNPIDMxNjYtMSwgSVNPIDMxNjYtMiwgSVNPIGNvZGUgZml4IGZpbGUsIGxpc3Qgb2YgY291bnRyaWVzLCBhbmQgb3V0cHV0IGRpcmVjdG9yeS4KK05hbWVHZW5lcmF0b3IuNDU9VVNDRU5TVVNQT1AKK05vZGVEYXRhR2VuZXJhdG9yLjA9Q0lBCitOb2RlRGF0YUdlbmVyYXRvci4xPUlTTzMxNjZfMQorTm9kZURhdGFHZW5lcmF0b3IuMj1DSUEKK05vZGVEYXRhR2VuZXJhdG9yLjM9Q0lBCitOb2RlRGF0YUdlbmVyYXRvci40PVx0XHRHZW5lcmF0ZWQgOiAKK05vZGVEYXRhR2VuZXJhdG9yLjQ9X25vZGUucHJvcGVydGllcyAKK05vZGVEYXRhR2VuZXJhdG9yLjQ9UHJvY2Vzc2luZyBjb3VudHJ5IDogCitOb2RlRGF0YUdlbmVyYXRvci41PTw8PDwgUHJvY2Vzc2luZyBjb3VudHJ5IDogCitOb2RlRGF0YUdlbmVyYXRvci41PUlTTzMxNjZfMQorTm9kZURhdGFHZW5lcmF0b3IuNT1cdFx0R2VuZXJhdGVkIDogCitOb2RlRGF0YUdlbmVyYXRvci42PUM6XFxzdGVtSUlcXG9yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eVxcZGF0YU1pZ3JhdGlvblxcaW5wdXRcXHNvcnRcXAorTm9kZURhdGFHZW5lcmF0b3IuMTI9XHRcdEdlbmVyYXRlZCA6IAorTm9kZURhdGFHZW5lcmF0b3IuNj1DOlxcc3RlbUlJXFxvcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHlcXGRhdGFNaWdyYXRpb25cXGlucHV0XFxzb3J0XFwKK05vZGVEYXRhR2VuZXJhdG9yLjE1PV9ub2RlLnByb3BlcnRpZXMKK05vZGVEYXRhR2VuZXJhdG9yLjY9QzpcXHN0ZW1JSVxcb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5XFxkYXRhTWlncmF0aW9uXFxpbnB1dFxcc29ydFxcCitOb2RlRGF0YUdlbmVyYXRvci4xND1fbm9kZS5wcm9wZXJ0aWVzCitOb2RlRGF0YUdlbmVyYXRvci4xMT1cdFx0R2VuZXJhdGVkIDogCitOb2RlRGF0YUdlbmVyYXRvci4xND1fbm9kZS5wcm9wZXJ0aWVzCitOb2RlRGF0YUdlbmVyYXRvci4yND1fQURNSU4yX0xFWC50eHQKK05vZGVEYXRhR2VuZXJhdG9yLjI0PV9BRE1JTjJfTEVYLnR4dAorTm9kZURhdGFHZW5lcmF0b3IuMjQ9X0FETUlOMl9MRVgudHh0CitOb2RlRGF0YUdlbmVyYXRvci4yNT1fQURNSU4yX0xFWC50eHQKK05vZGVEYXRhR2VuZXJhdG9yLjIzPV9BRE1JTjFfTEVYLnR4dAorTm9kZURhdGFHZW5lcmF0b3IuMjM9X0FETUlOMV9MRVgudHh0CitOb2RlRGF0YUdlbmVyYXRvci4zMT1cIExldmVsIDEgKCAKK05vZGVEYXRhR2VuZXJhdG9yLjMxPVwgTGV2ZWwgMSAoIAorTm9kZURhdGFHZW5lcmF0b3IuMzE9XCBMZXZlbCAxICggCitOb2RlRGF0YUdlbmVyYXRvci4zMj1cIExldmVsIDEgKCAKK05vZGVEYXRhR2VuZXJhdG9yLjMzPVwgKS4gCitOb2RlRGF0YUdlbmVyYXRvci4zMz1cICkuIAorTm9kZURhdGFHZW5lcmF0b3IuMzM9XCApLiAKK05vZGVEYXRhR2VuZXJhdG9yLjM0PUxldmVsIDIgKCAKK05vZGVEYXRhR2VuZXJhdG9yLjM0PUxldmVsIDIgKCAKK05vZGVEYXRhR2VuZXJhdG9yLjM0PUxldmVsIDIgKCAKK05vZGVEYXRhR2VuZXJhdG9yLjM1PUxldmVsIDIgKCAKK05vZGVEYXRhR2VuZXJhdG9yLjM3PVwgKS4gXG4KK05vZGVEYXRhR2VuZXJhdG9yLjMwPVwjIEdlbmVyYXRlZCBrZXkgZGV0YWlscyA6IAorTm9kZURhdGFHZW5lcmF0b3IuMzA9XCMgR2VuZXJhdGVkIGtleSBkZXRhaWxzIDogCitOb2RlRGF0YUdlbmVyYXRvci4zNj1cICkuIFxuCitOb2RlRGF0YUdlbmVyYXRvci4zNj1cICkuIFxuCitOb2RlRGF0YUdlbmVyYXRvci41Mj1DOlxcc3RlbUlJXFxvcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHlcXGRhdGFNaWdyYXRpb25cXGlucHV0XFx1cmxzXFwKK05vZGVEYXRhR2VuZXJhdG9yLjUzPUM6XFxzdGVtSUlcXG9yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eVxcZGF0YU1pZ3JhdGlvblxcaW5wdXRcXHVybHNcXAorTm9kZURhdGFHZW5lcmF0b3IuNTY9X25vZGUucHJvcGVydGllcyAKK05vZGVEYXRhR2VuZXJhdG9yLjUyPUM6XFxzdGVtSUlcXG9yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eVxcZGF0YU1pZ3JhdGlvblxcaW5wdXRcXHVybHNcXAorTm9kZURhdGFHZW5lcmF0b3IuNTg9XCMgVGhpcyBpcyB0aGUgbmFtZSBvZiB0aGUgY2xhc3MgdGhhdCB3aWxsIGludGVycHJldCB0aGUgcmVzdCBvZiB0aGUgZmlsZSdzIGNvbnRlbnRzXG4KK05vZGVEYXRhR2VuZXJhdG9yLjUyPUM6XFxzdGVtSUlcXG9yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eVxcZGF0YU1pZ3JhdGlvblxcaW5wdXRcXHVybHNcXAorTm9kZURhdGFHZW5lcmF0b3IuNTg9UkVDT1JEX0NMQVNTTkFNRSA9IG9yZy5lY2xpcHNlLnN0ZW0uaW50ZXJuYWwuZGF0YS5Db3VudHJ5R3JhcGhSZWNvcmQkQ291bnRyeU5vZGVHcmFwaFJlY29yZFxuXG4KK05vZGVEYXRhR2VuZXJhdG9yLjU4PVJFQ09SRF9DTEFTU05BTUUgPSBvcmcuZWNsaXBzZS5zdGVtLmludGVybmFsLmRhdGEuQ291bnRyeUdyYXBoUmVjb3JkJENvdW50cnlOb2RlR3JhcGhSZWNvcmRcblxuCitOb2RlRGF0YUdlbmVyYXRvci41MT1cdFx0R2VuZXJhdGVkIDogCitOb2RlRGF0YUdlbmVyYXRvci41MT1cdFx0R2VuZXJhdGVkIDogCitOb2RlRGF0YUdlbmVyYXRvci41NT1fbm9kZS5wcm9wZXJ0aWVzIAorTm9kZURhdGFHZW5lcmF0b3IuNTc9XCMgVGhpcyBpcyB0aGUgbmFtZSBvZiB0aGUgY2xhc3MgdGhhdCB3aWxsIGludGVycHJldCB0aGUgcmVzdCBvZiB0aGUgZmlsZSdzIGNvbnRlbnRzXG4KK05vZGVEYXRhR2VuZXJhdG9yLjU3PVwjIFRoaXMgaXMgdGhlIG5hbWUgb2YgdGhlIGNsYXNzIHRoYXQgd2lsbCBpbnRlcnByZXQgdGhlIHJlc3Qgb2YgdGhlIGZpbGUncyBjb250ZW50c1xuCitOb2RlRGF0YUdlbmVyYXRvci41OT1cIyBUaGUgSVNPLTMxNjYtMSBhbHBoYTMgY29kZSBmb3IgdGhlIGNvdW50cnlcbgorTm9kZURhdGFHZW5lcmF0b3IuNTk9XCMgVGhlIElTTy0zMTY2LTEgYWxwaGEzIGNvZGUgZm9yIHRoZSBjb3VudHJ5XG4KK05vZGVEYXRhR2VuZXJhdG9yLjU5PVwjIFRoZSBJU08tMzE2Ni0xIGFscGhhMyBjb2RlIGZvciB0aGUgY291bnRyeVxuCitOb2RlRGF0YUdlbmVyYXRvci42MD1JU09LRVkgPSAKK05vZGVEYXRhR2VuZXJhdG9yLjYwPUlTT0tFWSA9IAorTm9kZURhdGFHZW5lcmF0b3IuNjA9SVNPS0VZID0gCitOb2RlRGF0YUdlbmVyYXRvci42MT1JU09LRVkgPSAKK05vZGVEYXRhR2VuZXJhdG9yLjYzPUFETUlOX0xFVkVMID0gCitOb2RlRGF0YUdlbmVyYXRvci42Mz1BRE1JTl9MRVZFTCA9IAorTm9kZURhdGFHZW5lcmF0b3IuNjM9QURNSU5fTEVWRUwgPSAKK05vZGVEYXRhR2VuZXJhdG9yLjY0PUFETUlOX0xFVkVMID0gCitOb2RlRGF0YUdlbmVyYXRvci42Nj1cIyBTZWUgaHR0cDovL3B1cmwub3JnL2RjL3Rlcm1zLzEuMS92YWxpZFxuCitOb2RlRGF0YUdlbmVyYXRvci42Nj1cIyBTZWUgaHR0cDovL3B1cmwub3JnL2RjL3Rlcm1zLzEuMS92YWxpZFxuCitOb2RlRGF0YUdlbmVyYXRvci42Nj1cIyBTZWUgaHR0cDovL3B1cmwub3JnL2RjL3Rlcm1zLzEuMS92YWxpZFxuCitOb2RlRGF0YUdlbmVyYXRvci42Nz1WQUxJRCA9IHN0YXJ0PTE5MDAtMDEtMDE7XG5cbgorTm9kZURhdGFHZW5lcmF0b3IuNjc9VkFMSUQgPSBzdGFydD0xOTAwLTAxLTAxO1xuXG4KK05vZGVEYXRhR2VuZXJhdG9yLjY3PVZBTElEID0gc3RhcnQ9MTkwMC0wMS0wMTtcblxuCitOb2RlRGF0YUdlbmVyYXRvci42OD1cIyBUaGlzIGlzIHRoZSBzb3VyY2Ugb2YgdGhlIGRhdGFcbgorTm9kZURhdGFHZW5lcmF0b3IuNjg9XCMgVGhpcyBpcyB0aGUgc291cmNlIG9mIHRoZSBkYXRhXG4KK05vZGVEYXRhR2VuZXJhdG9yLjY4PVwjIFRoaXMgaXMgdGhlIHNvdXJjZSBvZiB0aGUgZGF0YVxuCitOb2RlRGF0YUdlbmVyYXRvci42Mj1cIyBUaGUgYWRtaW5pc3RyYXRpb24gbGV2ZWwgb2YgdGhlIG5vZGUgZGF0YVxuCitOb2RlRGF0YUdlbmVyYXRvci42Mj1cIyBUaGUgYWRtaW5pc3RyYXRpb24gbGV2ZWwgb2YgdGhlIG5vZGUgZGF0YVxuCitOb2RlRGF0YUdlbmVyYXRvci42NT1cIyBUaGlzIGlzIHRoZSBkYXRlIHJhbmdlIGZvciB3aGljaCB0aGUgYXJlYSB2YWx1ZXMgaW4gdGhpcyBmaWxlIGFyZSB2YWxpZCBcbgorTm9kZURhdGFHZW5lcmF0b3IuNjU9XCMgVGhpcyBpcyB0aGUgZGF0ZSByYW5nZSBmb3Igd2hpY2ggdGhlIGFyZWEgdmFsdWVzIGluIHRoaXMgZmlsZSBhcmUgdmFsaWQgXG4KK05vZGVEYXRhR2VuZXJhdG9yLjY5PS50eHQKK05vZGVEYXRhR2VuZXJhdG9yLjY5PS50eHQKK05vZGVEYXRhR2VuZXJhdG9yLjY5PS50eHQKK05vZGVEYXRhR2VuZXJhdG9yLjcwPS50eHQKK05vZGVEYXRhR2VuZXJhdG9yLjczPVNPVVJDRSA9IAorTm9kZURhdGFHZW5lcmF0b3IuNzU9U09VUkNFID0gCitOb2RlRGF0YUdlbmVyYXRvci43OD1TUEFUSUFMX1VSSSA9IAorTm9kZURhdGFHZW5lcmF0b3IuNzg9U1BBVElBTF9VUkkgPSAKK05vZGVEYXRhR2VuZXJhdG9yLjc4PVNQQVRJQUxfVVJJID0gCitOb2RlRGF0YUdlbmVyYXRvci43Mj1TT1VSQ0UgPSAKK05vZGVEYXRhR2VuZXJhdG9yLjcyPVNPVVJDRSA9IAorTm9kZURhdGFHZW5lcmF0b3IuNzQ9U09VUkNFID0gCitOb2RlRGF0YUdlbmVyYXRvci43ND1TT1VSQ0UgPSAKK05vZGVEYXRhR2VuZXJhdG9yLjc3PVwjIFRoZSBmaWxlIHRoYXQgY29udGFpbnMgdGhlIGxhdGl0dWRlL2xvbmdpdHVkZSBkYXRhIGZvciB0aGUgbm9kZSBcbgorTm9kZURhdGFHZW5lcmF0b3IuNzc9XCMgVGhlIGZpbGUgdGhhdCBjb250YWlucyB0aGUgbGF0aXR1ZGUvbG9uZ2l0dWRlIGRhdGEgZm9yIHRoZSBub2RlIFxuCitOb2RlRGF0YUdlbmVyYXRvci43OT1wbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2dlby9jb3VudHJ5LworTm9kZURhdGFHZW5lcmF0b3IuNzk9cGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9nZW8vY291bnRyeS8KK05vZGVEYXRhR2VuZXJhdG9yLjc5PXBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvZ2VvL2NvdW50cnkvCitOb2RlRGF0YUdlbmVyYXRvci44MD1wbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2dlby9jb3VudHJ5LworTm9kZURhdGFHZW5lcmF0b3IuODM9V3JvbmcgYXJndW1lbnRzLiBQcm92aWRlIElTTyAzMTY2LTEgYW5kIElTTyAzMTY2LTIgZGF0YSBmaWxlcywgSVNPIGZpeCBmaWxlLCBsaXN0IG9mIGNvdW50cmllcywgYW5kIG91dHB1dCBkaXJlY3RvcnkuCitOb2RlRGF0YUdlbmVyYXRvci44Mz1Xcm9uZyBhcmd1bWVudHMuIFByb3ZpZGUgSVNPIDMxNjYtMSBhbmQgSVNPIDMxNjYtMiBkYXRhIGZpbGVzLCBJU08gZml4IGZpbGUsIGxpc3Qgb2YgY291bnRyaWVzLCBhbmQgb3V0cHV0IGRpcmVjdG9yeS4KK05vZGVEYXRhR2VuZXJhdG9yLjgzPVdyb25nIGFyZ3VtZW50cy4gUHJvdmlkZSBJU08gMzE2Ni0xIGFuZCBJU08gMzE2Ni0yIGRhdGEgZmlsZXMsIElTTyBmaXggZmlsZSwgbGlzdCBvZiBjb3VudHJpZXMsIGFuZCBvdXRwdXQgZGlyZWN0b3J5LgorTm9kZURhdGFHZW5lcmF0b3IuODQ9Q0lBCitOb2RlRGF0YUdlbmVyYXRvci44PVwgPj4+PgorTm9kZURhdGFHZW5lcmF0b3IuODI9X01BUC54bWxcblxuCitOb2RlRGF0YUdlbmVyYXRvci44Mj1fTUFQLnhtbFxuXG4KK1VSTEdlbmVyYXRvci4xPVVSTCBsb2NhdGlvbiBpcyA6ICAKK1VSTEdlbmVyYXRvci4yPVJlYWQgVVJMIDogCitVUkxHZW5lcmF0b3IuNT1JU08gY29kZSBub3QgZm91bmQgZm9yIGVudHJ5IDogCitVUkxHZW5lcmF0b3IuNj1fVVJMLnR4dAorVVJMR2VuZXJhdG9yLjEzPVdyb25nIGFyZ3VtZW50cy4gUHJvdmlkZSBJU08gZGF0YSBmaWxlLCBsaXN0IG9mIGNvdW50cmllcywgYW5kIG91dHB1dCBkaXJlY3RvcnkuCitFdXJvcGVEYXRhQ2xlYW5lci4yMD1DbGVhbiBkYXRhIGlzIDogCitMb2NhdGlvbkZpbmRlci4wPVVJRAorTG9jYXRpb25GaW5kZXIuMT1FdXJvcGVTYW1wbGUudHh0CitMb2NhdGlvbkZpbmRlci4yPUtleSBpcyA6IAorTG9jYXRpb25GaW5kZXIuOT1Qcm9jZXNzaW5nIGNvdW50cnkgOiAKK0xvY2F0aW9uRmluZGVyLjE0PVRPRE8gLT4gU0VUIEZJTEVOQU1FIEhFUkUKK0xvY2F0aW9uRmluZGVyLjE1PVx0XHRHZW5lcmF0ZWQgOgorTG9jYXRpb25GaW5kZXIuMTc9RXJyb3IgOiBudW1iZXIgb2YgWCdzIGFuZCBZJ3MgZG9udCBtYXRjaFwhCitMb2NhdGlvbkZpbmRlci4xOD1cdFx0XHQgY2xvc2luZyBsaW5lIDogCitMb2NhdGlvbkZpbmRlci4xOT1Xcm9uZyBhcmd1bWVudHMuCitJbm9jdWxhdG9yLjE9aW5mZWN0b3JfCitJbm9jdWxhdG9yLjI9aW5vY3VsYXRvcl8KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3NyYy9vcmcvZWNsaXBzZS9zdGVtL3V0aWxpdHkvZ21sL0dtbFBvbHlnb24uamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3NyYy9vcmcvZWNsaXBzZS9zdGVtL3V0aWxpdHkvZ21sL0dtbFBvbHlnb24uamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNTE3NjJiCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdXRpbGl0eS9nbWwvR21sUG9seWdvbi5qYXZhCkBAIC0wLDAgKzEsMTE0IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS5nbWw7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTEgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuU3RyaW5nVG9rZW5pemVyOworCisKKworLyoqCisgKiBIZWxwZXIgQ2xhc3MgZm9yIGNyZWF0aW5nIEdNTCBmaWxlcworICogCisgKi8KK3B1YmxpYyBjbGFzcyBHbWxQb2x5Z29uIHsKKwkKKwkKKwlTdHJpbmcgbmFtZSA9ICJ1bmRlZmluZWQiOy8vJE5PTi1OTFMtMSQKKwkKKwlMaXN0PERvdWJsZT4gbGF0ID0gbmV3IEFycmF5TGlzdDxEb3VibGU+KCk7CisJTGlzdDxEb3VibGU+IGxuZyA9IG5ldyBBcnJheUxpc3Q8RG91YmxlPigpOworCQorCisJLyoqCisJICogCisJICogQHBhcmFtIG5hbWUKKwkgKiAKKwkgKi8KKwlwdWJsaWMgR21sUG9seWdvbihTdHJpbmcgbmFtZSkgeworCQl0aGlzLm5hbWUgPSBuYW1lOworCX0KKwkKKwkvKioKKwkgKiAKKwkgKiBAcGFyYW0gZGxhdAorCSAqIEBwYXJhbSBkbG5nCisJICovCisJcHVibGljIHZvaWQgYWRkUG9pbnQoZG91YmxlIGRsYXQsIGRvdWJsZSBkbG5nKSB7CisJCS8vVXRpbExvZ2dlci5sb2dJbmZvcm1hdGlvbigiUkVBRCAiK2RsYXQrIiwgIitkbG5nKTsKKwkJZG91YmxlIGZhY3RvciA9IDEwMDAwMDAuMDsKKwkJZGxhdCAqPSBmYWN0b3I7CisJCWRsbmcgKj0gZmFjdG9yOworCQlsb25nIGlsYXQgPSBNYXRoLnJvdW5kKGRsYXQpOworCQlsb25nIGlsbmcgPSBNYXRoLnJvdW5kKGRsbmcpOworCQlkbGF0ID0gaWxhdDsKKwkJZGxuZyA9IGlsbmc7CisJCWRsYXQgLz0gZmFjdG9yOworCQlkbG5nIC89IGZhY3RvcjsKKwkJLy9VdGlsTG9nZ2VyLmxvZ0luZm9ybWF0aW9uKCJyb3VuZGVkIHRvICIrZGxhdCsiLCAiK2RsbmcpOworCQlsYXQuYWRkKG5ldyBEb3VibGUoZGxhdCkpOworCQlsbmcuYWRkKG5ldyBEb3VibGUoZGxuZykpOworCX0vLyBhZGRwb2ludAorCQorCS8qKgorCSAqIAorCSAqIEBwYXJhbSB0b2tlbnNLTUwKKwkgKi8KKwlwdWJsaWMgdm9pZCBhZGRQb2ludChTdHJpbmcgdG9rZW5zS01MKSB7CisJCVN0cmluZ1Rva2VuaXplciBzdCA9IG5ldyBTdHJpbmdUb2tlbml6ZXIodG9rZW5zS01MKTsKKwkJU3RyaW5nIGRlbGltID0gIlxyXG4iOy8vJE5PTi1OTFMtMSQKKwkJaWYgKHRva2Vuc0tNTC5pbmRleE9mKGRlbGltKSA8PSAtMSkKKwkJCWRlbGltID0gIlxuIjsvLyROT04tTkxTLTEkCisJCXdoaWxlIChzdC5oYXNNb3JlVG9rZW5zKCkpIHsKKwkJCVN0cmluZyB2YWx4eXogPSBzdC5uZXh0VG9rZW4oZGVsaW0pLnRyaW0oKTsKKwkJCVN0cmluZ1Rva2VuaXplciBzdDIgPSBuZXcgU3RyaW5nVG9rZW5pemVyKHZhbHh5eik7CisJCQl3aGlsZSAoc3QyLmhhc01vcmVUb2tlbnMoKSkgeworCQkJCVN0cmluZyBsYXQgPSBzdDIubmV4dFRva2VuKCIsIik7Ly8kTk9OLU5MUy0xJAorCQkJCVN0cmluZyBsbmcgPSBzdDIubmV4dFRva2VuKCIsIik7Ly8kTk9OLU5MUy0xJAorCQkJCUBTdXBwcmVzc1dhcm5pbmdzKCJ1bnVzZWQiKQorCQkJCVN0cmluZyB6ID0gc3QyLm5leHRUb2tlbigiLCIpOy8vJE5PTi1OTFMtMSQKKworCQkJCWRvdWJsZSBsdCA9IChuZXcgRG91YmxlKGxhdCkpLmRvdWJsZVZhbHVlKCk7CisJCQkJZG91YmxlIGxnID0gKG5ldyBEb3VibGUobG5nKSkuZG91YmxlVmFsdWUoKTsKKwkJCQlsdCAqPSAxMDAwMDAwLjA7CisJCQkJbGcgKj0gMTAwMDAwMC4wOworCQkJCWludCBpbHQgPSAoaW50KU1hdGgucm91bmQobHQpOworCQkJCWludCBpbGcgPSAoaW50KU1hdGgucm91bmQobGcpOworCQkJCWx0ID0gKGRvdWJsZSkgaWx0OworCQkJCWxnID0gKGRvdWJsZSkgaWxnOworCQkJCWx0IC89IDEwMDAwMDAuMDsKKwkJCQlsZyAvPSAxMDAwMDAwLjA7CisJCQkJdGhpcy5hZGRQb2ludChsdCwgbGcpOworCQkJfQorCQl9CisJfS8vIGFkZHBvaW50CisKKwkKKwkvKioKKwkgKiBhbGwgbGF0IGxvbmcgZGF0YSBhcyBhIHNpbmdsZSBzdHJpbmcgZm9yIGZpbGUgb3V0cHV0CisJICogQHJldHVybiBhbGwgbGF0IGxvbmcgZGF0YSBhcyBhIHNpbmdsZSBzdHJpbmcKKwkgKi8KKwlwdWJsaWMgU3RyaW5nIGdldERhdGEoKSB7CisJCVN0cmluZyByZXRWYWwgPSAiIjsvLyROT04tTkxTLTEkCisJCWZvciAoaW50IGkgPSAwOyBpIDwgbGF0LnNpemUoKTsgaSArKykgeworCQkJZG91YmxlIGx0ID0gbGF0LmdldChpKS5kb3VibGVWYWx1ZSgpOworCQkJZG91YmxlIGxnID0gbG5nLmdldChpKS5kb3VibGVWYWx1ZSgpOworCQkJLy8gdGhpcyBGSVhFUyB0aGUgb3JkZXIgdG8gd2hhdCBTVEVNIGV4cGVjdHMgdnMgS01MCisJCQlyZXRWYWwgKz0gbGcrIiAiK2x0Oy8vJE5PTi1OTFMtMSQKKwkJCWlmIChpIDwgbGF0LnNpemUoKS0xKSByZXRWYWwgKz0gIiAiOy8vJE5PTi1OTFMtMSQKKwkJfQorCQlyZXR1cm4gcmV0VmFsOworCX0KKwkKKwkKK30vLyBnbWxQb2x5Z29uCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91dGlsaXR5L2dtbC9LbWxSZWFkZXIuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3NyYy9vcmcvZWNsaXBzZS9zdGVtL3V0aWxpdHkvZ21sL0ttbFJlYWRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ0NWVhMTUKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91dGlsaXR5L2dtbC9LbWxSZWFkZXIuamF2YQpAQCAtMCwwICsxLDIzOSBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkuZ21sOw0KKw0KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorICogQ29weXJpZ2h0IChjKSAyMDExIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLg0KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMNCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjANCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdA0KKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sDQorICoNCisgKiBDb250cmlidXRvcnM6DQorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbg0KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KKw0KK2ltcG9ydCBqYXZhLmlvLkJ1ZmZlcmVkUmVhZGVyOw0KK2ltcG9ydCBqYXZhLmlvLkZpbGU7DQoraW1wb3J0IGphdmEuaW8uRmlsZVJlYWRlcjsNCitpbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7DQoraW1wb3J0IGphdmEudXRpbC5IYXNoU2V0Ow0KK2ltcG9ydCBqYXZhLnV0aWwuTWFwOw0KK2ltcG9ydCBqYXZhLnV0aWwuU2V0Ow0KKw0KK2ltcG9ydCBqYXZheC54bWwucGFyc2Vycy5Eb2N1bWVudEJ1aWxkZXI7DQoraW1wb3J0IGphdmF4LnhtbC5wYXJzZXJzLkRvY3VtZW50QnVpbGRlckZhY3Rvcnk7DQorDQoraW1wb3J0IG9yZy53M2MuZG9tLkRvY3VtZW50Ow0KK2ltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50Ow0KK2ltcG9ydCBvcmcudzNjLmRvbS5Ob2RlOw0KK2ltcG9ydCBvcmcudzNjLmRvbS5Ob2RlTGlzdDsNCisNCisNCisvKioNCisgKiBjcmVhdGUgdGhlIGdtbCBmcm9tIGttbA0KKyAqLw0KK3B1YmxpYyBjbGFzcyBLbWxSZWFkZXIgew0KKwkNCisJcHJvdGVjdGVkIHN0YXRpYyBNYXA8U3RyaW5nLFN0cmluZz4gbmFtZVRvSURNYXAgPSBuZXcgSGFzaE1hcDxTdHJpbmcsU3RyaW5nPigpOw0KKwkNCisJLyoqDQorCSAqIA0KKwkgKiBAcmV0dXJuDQorCSAqLw0KKwlwdWJsaWMgc3RhdGljIE1hcDxTdHJpbmcsIFN0cmluZz4gZ2V0TmFtZVRvSURNYXAoKSB7DQorCQlyZXR1cm4gbmFtZVRvSURNYXA7DQorCX0NCisNCisJcHJvdGVjdGVkIHN0YXRpYyBNYXA8U3RyaW5nLFNldDxHbWxQb2x5Z29uPj4gcG9seWdvbk1hcCA9IG5ldyBIYXNoTWFwPFN0cmluZyxTZXQ8R21sUG9seWdvbj4+KCk7DQorCXN0YXRpYyBEb2N1bWVudCBkb2M7DQorCQ0KKwkNCisJLyoqDQorCSAqIA0KKwkgKi8NCisJcHVibGljIEttbFJlYWRlcigpIHsNCisJCS8vIFRPRE8gQXV0by1nZW5lcmF0ZWQgY29uc3RydWN0b3Igc3R1Yg0KKwl9DQorDQorDQorCQ0KKwkvKioNCisJICogcmVhZHMgaW4gYSBrbWwgZmlsZQ0KKwkgKiBAcGFyYW0gZmlsZW5hbWUNCisJICogQHBhcmFtIGx2bCANCisJICogDQorCSAqIEByZXR1cm4gYSBtYXAgb2YgaWQgdG8gdGhlIHNldCBvZiBwb2x5Z29ucyBmb3IgdGhlIGxvY2F0aW9uDQorCSAqLw0KKwlwdWJsaWMgTWFwPFN0cmluZywgU2V0PEdtbFBvbHlnb24+PiByZWFkS01MKFN0cmluZyBmaWxlbmFtZSwgaW50IGx2bCkgew0KKwkJTWFwPFN0cmluZyxTZXQ8R21sUG9seWdvbj4+IGxvY2F0aW9uTWFwID0gbmV3IEhhc2hNYXA8U3RyaW5nLFNldDxHbWxQb2x5Z29uPj4oKTsNCisJCURvY3VtZW50QnVpbGRlckZhY3RvcnkgZmFjdG9yeSA9IERvY3VtZW50QnVpbGRlckZhY3RvcnkubmV3SW5zdGFuY2UoKTsNCisJCXRyeSB7DQorCQkJRG9jdW1lbnRCdWlsZGVyIGJ1aWxkZXIgPSBmYWN0b3J5Lm5ld0RvY3VtZW50QnVpbGRlcigpOw0KKwkJCWRvYyA9IGJ1aWxkZXIucGFyc2UobmV3IEZpbGUoZmlsZW5hbWUpKTsNCisJCX0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7DQorCQkJVXRpbExvZ2dlci5sb2dJbmZvcm1hdGlvbigiRXJyb3IgcGFyc2luZyBmaWxlICIgKyBlLmdldE1lc3NhZ2UoKSk7IC8vJE5PTi1OTFMtMSQNCisJCX0NCisNCisJCU5vZGVMaXN0IGFsbFBsYWNlcyA9IGRvYy5nZXRFbGVtZW50c0J5VGFnTmFtZSgiUGxhY2VtYXJrIik7IC8vJE5PTi1OTFMtMSQNCisJCQ0KKwkJZm9yIChpbnQgaSA9IDA7IGkgPCBhbGxQbGFjZXMuZ2V0TGVuZ3RoKCk7IGkrKykgew0KKwkJCUVsZW1lbnQgZSA9IChFbGVtZW50KSBhbGxQbGFjZXMuaXRlbShpKTsNCisJCQkNCisJCQ0KKwkJCS8vIGdldCB0aGUgbmFtZSBpZiB0aGVyZSBpcyBvbmUNCisJCQ0KKwkJCVN0cmluZyBpZDEgPSAibnVsbElEMSI7IC8vJE5PTi1OTFMtMSQNCisJCQlTdHJpbmcgbmFtZSA9ICJudWxsTmFtZSI7IC8vJE5PTi1OTFMtMSQNCisJCQlTdHJpbmcgaWQgPSAibnVsbElEIjsgLy8kTk9OLU5MUy0xJA0KKwkJCS8vU3RyaW5nIHBvcHVsYXRpb24gPSAibnVsbFBvcCI7DQorCQkJLy9TdHJpbmcgYXJlYSA9ICJudWxsQXJlYSI7DQorCQkJDQorCQkJCS8vIGlmIHJlYWRpbmcgZm9yIGp1c3Qgb25lIGNvdW50cnkNCisJCQkJTm9kZUxpc3QgbGlzdCA9IGUuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImRlc2NyaXB0aW9uIik7IC8vJE5PTi1OTFMtMSQNCisJCQkJaWYgKChsaXN0ICE9IG51bGwpICYmIChsaXN0LmdldExlbmd0aCgpID49IDEpKSB7DQorCQkJCQlFbGVtZW50IGRlc2NyaXB0aW9uRWx0ID0gKEVsZW1lbnQpIGxpc3QuaXRlbSgwKTsNCisJCQkJCVN0cmluZyBkZXNjID0gZGVzY3JpcHRpb25FbHQuZ2V0VGV4dENvbnRlbnQoKTsNCisJCQkJCQ0KKwkJCQkJaWYgKGRlc2NyaXB0aW9uRWx0ICE9IG51bGwpIHsNCisJCQkJCQluYW1lID0gcGFyc2VTZWdtZW50KCJBRE1JTl9OQU1FIiwgZGVzYyk7IC8vJE5PTi1OTFMtMSQNCisJCQkJCQlpZDEgPSBwYXJzZVNlZ21lbnQoIkdNSV9BRE1JTiIsIGRlc2MpOyAvLyROT04tTkxTLTEkDQorCQkJCQkJaWQ9aWQxLnJlcGxhY2VBbGwoIk1ZUy0iLCAiTVktIik7IC8vJE5PTi1OTFMtMSQNCisJCQkJCQkJCQkJCQ0KKwkJCQkJCVV0aWxMb2dnZXIubG9nSW5mb3JtYXRpb24oIiAiKTsgLy8kTk9OLU5MUy0xJA0KKwkJCQkJCVV0aWxMb2dnZXIubG9nSW5mb3JtYXRpb24oImdvdCBuYW1lPSAiK25hbWUpOyAvLyROT04tTkxTLTEkDQorCQkJCQkJVXRpbExvZ2dlci5sb2dJbmZvcm1hdGlvbigiZ290IGlkPSAiK2lkKTsgLy8kTk9OLU5MUy0xJA0KKwkJCQkJCQkJCQkJCQ0KKwkJCQkJCW5hbWVUb0lETWFwLnB1dChuYW1lLGlkKTsNCisJCQkJCQkNCisJCQkJCX0NCisJCQkJfQ0KKwkJCQlHbWxQb2x5Z29uIHAgPSBuZXcgR21sUG9seWdvbihuYW1lKTsNCisJCQkJaWYgKCFsb2NhdGlvbk1hcC5jb250YWluc0tleShuYW1lKSkgew0KKwkJCQkJU2V0PEdtbFBvbHlnb24+IHBvbHlTZXQgPSBuZXcgSGFzaFNldDxHbWxQb2x5Z29uPigpOw0KKwkJCQkJbG9jYXRpb25NYXAucHV0KG5hbWUscG9seVNldCk7DQorCQkJCX0NCisJCQkJU2V0PEdtbFBvbHlnb24+IHBvbHlTZXQgPSBsb2NhdGlvbk1hcC5nZXQobmFtZSk7DQorCQkJCQ0KKwkJCQkvLyBnZXQgdGhlIHBvbHlnb25zDQorCQkJCU5vZGVMaXN0IHBvbHlnb25MaXN0ID0gZS5nZXRFbGVtZW50c0J5VGFnTmFtZSgiUG9seWdvbiIpOyAvLyROT04tTkxTLTEkDQorCQkJCWlmIChwb2x5Z29uTGlzdCAhPSBudWxsKSB7DQorCQkJCQlmb3IgKGludCBpaSA9IDA7IGlpIDwgcG9seWdvbkxpc3QuZ2V0TGVuZ3RoKCk7IGlpKyspIHsNCisJCQkJCQlFbGVtZW50IGxpbmVFbHQgPSAoRWxlbWVudCkgcG9seWdvbkxpc3QuaXRlbShpaSk7DQorCQkJCQkJLy8gPGNvb3JkaW5hdGVzPg0KKwkJCQkJCU5vZGVMaXN0IGNvb3JkTGlzdCA9IGxpbmVFbHQNCisJCQkJCQkJCS5nZXRFbGVtZW50c0J5VGFnTmFtZSgiY29vcmRpbmF0ZXMiKTsgLy8kTk9OLU5MUy0xJA0KKw0KKwkJCQkJCWlmIChjb29yZExpc3QgIT0gbnVsbCkgew0KKwkJCQkJCQlmb3IgKGludCBqaiA9IDA7IGpqIDwgY29vcmRMaXN0LmdldExlbmd0aCgpOyBqaisrKSB7DQorCQkJCQkJCQlFbGVtZW50IGNvb3JkcyA9IChFbGVtZW50KSBjb29yZExpc3QuaXRlbShqaik7DQorCQkJCQkJCQlOb2RlTGlzdCB2YWx1ZXMgPSBjb29yZHMuZ2V0Q2hpbGROb2RlcygpOw0KKwkJCQkJCQkJaWYgKHZhbHVlcyAhPSBudWxsKSB7DQorCQkJCQkJCQkJZm9yIChpbnQga2sgPSAwOyBrayA8IHZhbHVlcy5nZXRMZW5ndGgoKTsga2srKykgew0KKwkJCQkJCQkJCQlOb2RlIG5vZGUgPSB2YWx1ZXMuaXRlbShrayk7DQorCQkJCQkJCQkJCVN0cmluZyB2YWwgPSBub2RlLmdldFRleHRDb250ZW50KCk7DQorCQkJCQkJCQkJCXAuYWRkUG9pbnQodmFsKTsNCisJCQkJCQkJCQl9Ly8gZm9yIGFsbCB2YWx1ZXNzDQorCQkJCQkJCQl9Ly8gaWYgdmFsdWUgISBudWxsDQorCQkJCQkJCX0vLyBmb3IgYWxsIGNvb3Jkcw0KKwkJCQkJCX0vLyBpZiBjb29ycyAhIG51bGwNCisJCQkJCX0vLyBmb3IgYWxsIGxpbmVzU3RyaW5nDQorCQkJCX0vLyBpZiBsaW5lbGlzdCAhIG51bGwNCisJCQkJcG9seVNldC5hZGQocCk7DQorCQkJCWxvY2F0aW9uTWFwLnB1dChuYW1lLHBvbHlTZXQpOw0KKwkJCQkNCisJCQkJDQorCQkJCVV0aWxMb2dnZXIubG9nSW5mb3JtYXRpb24oImRvbmUgcmVhZGluZyBrbWwiKTsgLy8kTk9OLU5MUy0xJA0KKwkJCQkNCisJCQkNCisJCQkNCisJCQkNCisJCX0gLy8gZm9yIGFsbCBub2Rlcw0KKwkJDQorCQlyZXR1cm4gbG9jYXRpb25NYXA7DQorCX0vLyByZWFkS01MKCkNCisJDQorCQ0KKwkvKioNCisJICogDQorCSAqIEBwYXJhbSBhdHRyDQorCSAqIEBwYXJhbSBkZXNjcg0KKwkgKiBAcmV0dXJuDQorCSAqLw0KKwlwdWJsaWMgU3RyaW5nIHBhcnNlU2VnbWVudChTdHJpbmcgYXR0ciwgU3RyaW5nIGRlc2NyKSB7DQorCQlTdHJpbmcgcmV0VmFsID0gImZhaWxlZCB0byBwYXJzZSAiK2F0dHIrIiBpbiAiK2Rlc2NyOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQNCisJCWF0dHIgKz0gIjwvQj4gPSI7IC8vJE5PTi1OTFMtMSQNCisJCWludCBsZW4gPSBhdHRyLmxlbmd0aCgpOw0KKwkJaW50IGlkMSA9IGRlc2NyLmluZGV4T2YoYXR0cikrbGVuOw0KKwkJaWYoaWQxID49MCkgew0KKwkJCVN0cmluZyB0ZW1wID0gZGVzY3Iuc3Vic3RyaW5nKGlkMSxkZXNjci5sZW5ndGgoKSkudHJpbSgpOw0KKwkJCWludCBpZDIgPSB0ZW1wLmluZGV4T2YoIjxCUj4iKTsgLy8kTk9OLU5MUy0xJA0KKwkJCWlmKGlkMj49MCkgew0KKwkJCQlyZXRWYWwgPSB0ZW1wLnN1YnN0cmluZygwLGlkMik7DQorCQkJfSBlbHNlIHsNCisJCQkJcmV0VmFsID0gdGVtcDsNCisJCQl9DQorCQkJDQorCQl9DQorCQkNCisJCXJldHVybiByZXRWYWw7DQorCX0NCisJDQorCQ0KKwkNCisJDQorCQ0KKwkvKioNCisJICogQ3JlYXRlIGEgbmV3QnVmZmVyZWRSZWFkZXINCisJICogDQorCSAqIEBwYXJhbSBmaWxlTmFtZQ0KKwkgKiAgICAgICAgICAgIHRoZSBuYW1lIG9mIHRoZSBmaWxlIHdlIHdhbnQgdG8gb3BlbiBmb3IgcmVhZGluZw0KKwkgKiANCisJICogQHJldHVybiBhIHJlYWRlciB0byBhIGdpdmVuIGZpbGUNCisJICovDQorCXN0YXRpYyBwcm90ZWN0ZWQgQnVmZmVyZWRSZWFkZXIgb3BlblJlYWRlcihTdHJpbmcgZmlsZSkgew0KKw0KKwkJdHJ5IHsNCisNCisJCQlGaWxlIGYgPSBuZXcgRmlsZShmaWxlKTsNCisNCisJCQlpZiAoZi5leGlzdHMoKSA9PSBmYWxzZSkgew0KKwkJCQlyZXR1cm4gbnVsbDsNCisJCQl9DQorDQorCQkJcmV0dXJuIG5ldyBCdWZmZXJlZFJlYWRlcihuZXcgRmlsZVJlYWRlcihmaWxlKSk7DQorDQorCQl9IGNhdGNoIChFeGNlcHRpb24gZSkgew0KKwkJCWUucHJpbnRTdGFja1RyYWNlKCk7DQorCQl9DQorDQorCQlyZXR1cm4gbnVsbDsNCisJfQ0KKw0KKwkvKioNCisJICogSW5kaWNhdGUgRW5kLU9mLUZpbGUNCisJICogDQorCSAqIEBwYXJhbSBidWZmZXINCisJICogICAgICAgICAgICBBIGJ1ZmZlciBvZiBkaXZhIGRhdGENCisJICogDQorCSAqIEByZXR1cm4gVHJ1ZSBpZiB3ZSBoYXZlIHJlYWNoZWQgRW5kLU9mLUZpbGUNCisJICovDQorCXN0YXRpYyBwcm90ZWN0ZWQgYm9vbGVhbiBFT0YoU3RyaW5nIGJ1ZmZlcikgew0KKwkJaWYgKGJ1ZmZlciA9PSBudWxsIHx8IGJ1ZmZlci5sZW5ndGgoKSA9PSAwKQ0KKwkJCXJldHVybiB0cnVlOw0KKwkJcmV0dXJuIGZhbHNlOw0KKwl9DQorCQ0KKwkNCisJDQorCQ0KKwlwcml2YXRlIHN0YXRpYyBTdHJpbmcgZ2V0VHdvTGV0dGVyQ29kZShTdHJpbmcgaWQpIHsNCisJCVN0cmluZyByZXRWYWwgPSBpZC5zdWJzdHJpbmcoaWQubGVuZ3RoKCktMiwgaWQubGVuZ3RoKCkpOw0KKwkJcmV0dXJuIHJldFZhbDsNCisJfQ0KKw0KKw0KKwkJDQorDQorCQ0KKwkNCisJDQorfQ0KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3NyYy9vcmcvZWNsaXBzZS9zdGVtL3V0aWxpdHkvZ21sL1NwYXRpYWxHbWxFeHBvcnRlci5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdXRpbGl0eS9nbWwvU3BhdGlhbEdtbEV4cG9ydGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzc3NzVhYgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3NyYy9vcmcvZWNsaXBzZS9zdGVtL3V0aWxpdHkvZ21sL1NwYXRpYWxHbWxFeHBvcnRlci5qYXZhCkBAIC0wLDAgKzEsMjE0IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS5nbWw7DQorDQorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisgKiBDb3B5cmlnaHQgKGMpIDIwMTEgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuDQorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscw0KKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMA0KKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0DQorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwNCisgKg0KKyAqIENvbnRyaWJ1dG9yczoNCisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uDQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQorDQoraW1wb3J0IGphdmEuaW8uRmlsZVdyaXRlcjsNCitpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsNCitpbXBvcnQgamF2YS5pby5Xcml0ZXI7DQoraW1wb3J0IGphdmEudXRpbC5DYWxlbmRhcjsNCitpbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7DQoraW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsNCitpbXBvcnQgamF2YS51dGlsLk1hcDsNCitpbXBvcnQgamF2YS51dGlsLlNldDsNCisNCitpbXBvcnQgamF2YXgueG1sLnBhcnNlcnMuRG9jdW1lbnRCdWlsZGVyOw0KK2ltcG9ydCBqYXZheC54bWwucGFyc2Vycy5Eb2N1bWVudEJ1aWxkZXJGYWN0b3J5Ow0KKw0KK2ltcG9ydCBvcmcuYXBhY2hlLnhtbC5zZXJpYWxpemUuT3V0cHV0Rm9ybWF0Ow0KK2ltcG9ydCBvcmcuYXBhY2hlLnhtbC5zZXJpYWxpemUuWE1MU2VyaWFsaXplcjsNCitpbXBvcnQgb3JnLnczYy5kb20uRG9jdW1lbnQ7DQoraW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7DQorDQorDQorLyoqDQorICogR2l2ZW4gYSBtYXAgb2YgZ21sUG9seWdvbnMsIGV4cG9ydCB0aGUgc3BhdGlhbCBkYXRhIHRvIGEgZ21sIGZpbGUNCisgKi8NCitwdWJsaWMgY2xhc3MgU3BhdGlhbEdtbEV4cG9ydGVyIHsNCisJDQorCXByaXZhdGUgc3RhdGljIE1hcDxTdHJpbmcsU3RyaW5nPiBuYW1lVG9JRE1hcCA9IG5ldyBIYXNoTWFwPFN0cmluZyxTdHJpbmc+KCk7DQorCQ0KKwlzdGF0aWMgRG9jdW1lbnQgZG9jOw0KKwkNCisJDQorCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBNQVAgPSAiTWFwIjsgLy8kTk9OLU5MUy0xJA0KKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgVElUTEUgPSAidGl0bGUiOyAvLyROT04tTkxTLTEkDQorCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBTVUJUSVRMRSA9ICJzdWJUaXRsZSI7IC8vJE5PTi1OTFMtMSQNCisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFVQREFURUQgPSAidXBkYXRlZCI7Ly8kTk9OLU5MUy0xJA0KKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgRU5UUlkgPSAiZW50cnkiOy8vJE5PTi1OTFMtMSQNCisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFdIRVJFID0gImdlb3Jzczp3aGVyZSI7Ly8kTk9OLU5MUy0xJA0KKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgUE9MWUdPTiA9ICJnbWw6UG9seWdvbiI7Ly8kTk9OLU5MUy0xJA0KKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgSUQgPSAiZ21sOmlkIjsvLyROT04tTkxTLTEkDQorDQorCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBCT1VOREFSWSA9ICJnbWw6b3V0ZXJCb3VuZGFyeUlzIjsvLyROT04tTkxTLTEkDQorCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBSSU5HID0gImdtbDpMaW5lYXJSaW5nIjsvLyROT04tTkxTLTEkDQorCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBQT1NMSVNUID0gImdtbDpwb3NMaXN0IjsvLyROT04tTkxTLTEkDQorCQ0KKwkNCisJLyoqDQorCSAqIA0KKwkgKi8NCisJcHVibGljIFNwYXRpYWxHbWxFeHBvcnRlcigpIHsNCisJCS8vIFRPRE8gQXV0by1nZW5lcmF0ZWQgY29uc3RydWN0b3Igc3R1Yg0KKwl9DQorDQorCS8qKg0KKwkgKiBAcGFyYW0gYXJncw0KKwkgKi8NCisJcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgew0KKwkJdGVzdCgpOw0KKwl9DQorCQ0KKwkNCisJLyoqIA0KKwkgKiBUZXN0IHRoZSBnbWxFeHBvcnRlciB1c2luZyBkYXRhIGZyb20gYSBrbWwgZmlsZS4NCisJICovDQorCXB1YmxpYyBzdGF0aWMgdm9pZCB0ZXN0KCkgew0KKwkJU3BhdGlhbEdtbEV4cG9ydGVyIHNlbGYgPSBuZXcgU3BhdGlhbEdtbEV4cG9ydGVyKCk7DQorCQlTdHJpbmcgZGlyID0gIi4vcmVzb3VyY2VzLyI7IC8vJE5PTi1OTFMtMSQNCisJCUttbFJlYWRlciBrbWxSZWFkZXIgPSBuZXcgS21sUmVhZGVyKCk7DQorCQkNCisJCU1hcDxTdHJpbmcsU2V0PEdtbFBvbHlnb24+PiBwb2x5Z29uTWFwID0ga21sUmVhZGVyLnJlYWRLTUwoZGlyKyJ0ZXN0Mi5LTUwiLDEpOyAvLyROT04tTkxTLTEkDQorCQluYW1lVG9JRE1hcCA9IGttbFJlYWRlci5nZXROYW1lVG9JRE1hcCgpOw0KKwkJDQorCQlTdHJpbmcgb3V0RmlsZSA9IGRpcisiL1RFU1RfMl9NQVAueG1sIjsgLy8kTk9OLU5MUy0xJA0KKwkJU3RyaW5nIHRocmVlTGV0dGVyQ29kZSA9ICJDQU4iOyAvLyROT04tTkxTLTEkDQorCQlzZWxmLndyaXRlU3BhdGlhbERhdGEocG9seWdvbk1hcCwgb3V0RmlsZSwgdGhyZWVMZXR0ZXJDb2RlLCAxKTsNCisJfS8vIHRlc3QNCisJDQorCQ0KKwkvKioNCisJICogR2l2ZW4gYSBtYXAgb2YgZ21sUG9seWdvbnMsIHdyaXRlcyB0aGUgR01MIGRhdGEgdG8gYW4geG1sIGZpbGUNCisJICogQHBhcmFtIHBvbHlnb25NYXANCisJICogQHBhcmFtIG91dHB1dEZpbGUNCisJICogQHBhcmFtIHRocmVlTGV0dGVyQ29kZQ0KKwkgKiBAcGFyYW0gYWRtaW5MZXZlbA0KKwkgKi8NCisJcHVibGljIHZvaWQgd3JpdGVTcGF0aWFsRGF0YShNYXA8U3RyaW5nLFNldDxHbWxQb2x5Z29uPj4gcG9seWdvbk1hcCwgU3RyaW5nIG91dHB1dEZpbGUsIFN0cmluZyB0aHJlZUxldHRlckNvZGUsIGludCBhZG1pbkxldmVsKSB7DQorCQl3cml0ZUdNTChvdXRwdXRGaWxlLHRocmVlTGV0dGVyQ29kZSwgYWRtaW5MZXZlbCwgcG9seWdvbk1hcCk7IA0KKwl9DQorCQ0KKwkNCisJLyoqDQorCSAqIFdyaXRlIHRoZSBHTUwNCisJICogQHBhcmFtIGZpbGVOYW1lDQorCSAqIEBwYXJhbSBjb3VudHJ5Q29kZQ0KKwkgKiBAcGFyYW0gbGV2ZWwNCisJICovDQorCUBTdXBwcmVzc1dhcm5pbmdzKCJkZXByZWNhdGlvbiIpDQorCXByaXZhdGUgdm9pZCB3cml0ZUdNTChTdHJpbmcgZmlsZU5hbWUsIFN0cmluZyBjb3VudHJ5Q29kZSwgaW50IGxldmVsLCBNYXA8U3RyaW5nLFNldDxHbWxQb2x5Z29uPj4gcG9seWdvbk1hcCkgew0KKwkJRG9jdW1lbnRCdWlsZGVyRmFjdG9yeSBmYWN0b3J5ID0gRG9jdW1lbnRCdWlsZGVyRmFjdG9yeS5uZXdJbnN0YW5jZSgpOw0KKwkJRG9jdW1lbnQgZG9jdW1lbnQgPSBudWxsOw0KKwkJLy9pbnQgZm91bmROYW1lcyA9IDA7DQorCQl0cnkgew0KKwkJCURvY3VtZW50QnVpbGRlciBidWlsZGVyID0gZmFjdG9yeS5uZXdEb2N1bWVudEJ1aWxkZXIoKTsNCisJCQlkb2N1bWVudCA9IGJ1aWxkZXIubmV3RG9jdW1lbnQoKTsNCisJCX0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7DQorCQkJVXRpbExvZ2dlci5sb2dJbmZvcm1hdGlvbigiRXJyb3IgcGFyc2luZyBmaWxlICIgKyBlLmdldE1lc3NhZ2UoKSk7IC8vJE5PTi1OTFMtMSQNCisJCX0NCisJCQ0KKwkJLy9NYXAgRWxlbWVudA0KKwkJRWxlbWVudCByb290ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChNQVApOw0KKwkJZG9jdW1lbnQuYXBwZW5kQ2hpbGQocm9vdCk7DQorCQlyb290LnNldEF0dHJpYnV0ZSgieG1sbnM6Z21sIiwgImh0dHA6Ly93d3cub3Blbmdpcy5uZXQvZ21sIik7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJA0KKwkJcm9vdC5zZXRBdHRyaWJ1dGUoInhtbG5zOmdlb3JzcyIsICJodHRwOi8vd3d3Lmdlb3Jzcy5vcmcvZ2VvcnNzIik7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJA0KKwkJLy8gdGl0bGUNCisJCUVsZW1lbnQgdGl0bGVFbHQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFRJVExFKTsNCisJCXRpdGxlRWx0LnNldFRleHRDb250ZW50KGNvdW50cnlDb2RlICsgIiBMZXZlbCAiK2xldmVsKyIgbWFwIik7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJA0KKwkJcm9vdC5hcHBlbmRDaGlsZCh0aXRsZUVsdCk7DQorCQkvLyBzdWJ0aXRsZQ0KKwkJRWxlbWVudCBzdWJUaXRsZUVsdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoU1VCVElUTEUpOw0KKwkJc3ViVGl0bGVFbHQuc2V0VGV4dENvbnRlbnQoIkFkbWluaXN0cmF0aXZlIEJvdW5kYXJpZXMiKTsgLy8kTk9OLU5MUy0xJA0KKwkJcm9vdC5hcHBlbmRDaGlsZChzdWJUaXRsZUVsdCk7DQorCQkvLyB1cGRhdGVkDQorCQlFbGVtZW50IHVwZGF0ZWRFbHQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFVQREFURUQpOw0KKwkJQ2FsZW5kYXIgY2FsID0gQ2FsZW5kYXIuZ2V0SW5zdGFuY2UoKTsNCisJCVN0cmluZyBkYXRlID0gY2FsLmdldFRpbWUoKS50b0xvY2FsZVN0cmluZygpOw0KKwkJdXBkYXRlZEVsdC5zZXRUZXh0Q29udGVudChkYXRlKTsNCisJCXJvb3QuYXBwZW5kQ2hpbGQodXBkYXRlZEVsdCk7DQorCQkNCisJCS8vIEVOVFJZDQorCQlFbGVtZW50IGVudHJ5RWx0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChFTlRSWSk7DQorCQlyb290LmFwcGVuZENoaWxkKGVudHJ5RWx0KTsNCisJCS8vIFdIRVJFDQorCQlFbGVtZW50IHdoZXJlRWx0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChXSEVSRSk7DQorCQllbnRyeUVsdC5hcHBlbmRDaGlsZCh3aGVyZUVsdCk7DQorCQkNCisJDQorCQlJdGVyYXRvcjxTdHJpbmc+IGl0ZXIgPSBwb2x5Z29uTWFwLmtleVNldCgpLml0ZXJhdG9yKCk7DQorCQkJCQ0KKwkJd2hpbGUoaXRlci5oYXNOZXh0KCkpIHsNCisJCQkNCisJCQlTdHJpbmcgbmFtZSA9IGl0ZXIubmV4dCgpOw0KKwkJCVV0aWxMb2dnZXIubG9nSW5mb3JtYXRpb24oIndyaXRpbmcuLi4gIituYW1lKTsgLy8kTk9OLU5MUy0xJA0KKwkJCVNldDxHbWxQb2x5Z29uPiBwb2x5U2V0ID0gcG9seWdvbk1hcC5nZXQobmFtZSk7DQorCQkJU3RyaW5nIGlkID0gbmFtZVRvSURNYXAuZ2V0KG5hbWUpOw0KKwkJCUVsZW1lbnQgcG9seUVsdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoUE9MWUdPTik7DQorCQkJcG9seUVsdC5zZXRBdHRyaWJ1dGUoSUQsIGlkKTsNCisJCQl3aGVyZUVsdC5hcHBlbmRDaGlsZChwb2x5RWx0KTsNCisJCQlFbGVtZW50IGJvdW5kYXJ5RWx0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChCT1VOREFSWSk7DQorCQkJcG9seUVsdC5hcHBlbmRDaGlsZChib3VuZGFyeUVsdCk7DQorCQkJDQorCQkJSXRlcmF0b3I8R21sUG9seWdvbj4gcmluZ3MgPSBwb2x5U2V0Lml0ZXJhdG9yKCk7DQorCQkJd2hpbGUoKHJpbmdzIT1udWxsKSAmJiAocmluZ3MuaGFzTmV4dCgpKSkgew0KKwkJCQlHbWxQb2x5Z29uIHAgPSByaW5ncy5uZXh0KCk7DQorCQkJCUVsZW1lbnQgcmluZ0VsdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoUklORyk7DQorCQkJCWJvdW5kYXJ5RWx0LmFwcGVuZENoaWxkKHJpbmdFbHQpOw0KKwkJCQlFbGVtZW50IHBvc0xpc3RFbHQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFBPU0xJU1QpOw0KKwkJCQlTdHJpbmcgZGF0YSA9IHAuZ2V0RGF0YSgpOw0KKwkJCQlwb3NMaXN0RWx0LnNldFRleHRDb250ZW50KGRhdGEpOw0KKwkJCQlyaW5nRWx0LmFwcGVuZENoaWxkKHBvc0xpc3RFbHQpOw0KKwkJCX0NCisJCQ0KKwkJfS8vIGFsbCBwb2x5Z29ucw0KKwkJDQorCQl3cml0ZShkb2N1bWVudCxmaWxlTmFtZSk7DQorCQkNCisJCQ0KKwl9Ly8gd3JpdGVHTUwNCisJDQorCQ0KKwkvKioNCisJICogQHBhcmFtIGRvY3VtZW50IA0KKwkgKiBAcGFyYW0gZmlsZU5hbWUgDQorCSAqIA0KKwkgKi8NCisJcHJpdmF0ZSBzdGF0aWMgc3luY2hyb25pemVkIHZvaWQgd3JpdGUoRG9jdW1lbnQgZG9jdW1lbnQsIFN0cmluZyBmaWxlTmFtZSkgDQorCXsNCisJCS8vaWYobG9nLmxvZ0ZsYWcpIGxvZy5sb2dFbnRlcigiWG1sVXRpbGl0aWVzLndyaXRlKCIgKyBkb2N1bWVudCArICIsICIgKyB4bWxGaWxlICsgIikiKTsNCisJCXRyeSANCisJCXsNCisJCQlGaWxlV3JpdGVyIGZ3ID0gbmV3IEZpbGVXcml0ZXIoZmlsZU5hbWUpOw0KKwkJCXdyaXRlRG9jdW1lbnQoZG9jdW1lbnQsZncpOw0KKwkJCWZ3LmNsb3NlKCk7DQorCQl9IA0KKwkJY2F0Y2goRXhjZXB0aW9uIGUpDQorCQl7DQorCQkJZS5wcmludFN0YWNrVHJhY2UoKTsNCisJCX0NCisJCS8vaWYobG9nLmxvZ0ZsYWcpIGxvZy5sb2dFeGl0KCJYbWxVdGlsaXRpZXMud3JpdGUiKTsNCisJCXJldHVybjsNCisJfQkJCQkJCQkJCQkJLy8gZW5kIHdyaXRlDQorDQorCS8qKg0KKwkgKiB3cml0ZSB4bWwgZG9jdW1lbnQgdG8gamF2YS5pby5Xcml0ZXINCisJICogQHBhcmFtIGRvYyANCisJICogQHBhcmFtIHcgDQorCSAqIEB0aHJvd3MgSU9FeGNlcHRpb24gDQorCSAqLw0KKwlwcml2YXRlIHN0YXRpYyB2b2lkIHdyaXRlRG9jdW1lbnQoRG9jdW1lbnQgZG9jLCBXcml0ZXIgdykgdGhyb3dzIElPRXhjZXB0aW9uDQorCXsNCisJCVhNTFNlcmlhbGl6ZXIgc2VyID0gbmV3IFhNTFNlcmlhbGl6ZXIodywgbmV3IE91dHB1dEZvcm1hdChkb2MsIlVURi04Iix0cnVlKSk7Ly8kTk9OLU5MUy0xJA0KKwkJc2VyLnNlcmlhbGl6ZShkb2MpOw0KKwl9DQorCQ0KKw0KK30gLy8gU3BhdGlhbEdtbEV4cG9ydGVyDQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdXRpbGl0eS9nbWwvVXRpbExvZ2dlci5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdXRpbGl0eS9nbWwvVXRpbExvZ2dlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIyYjY3MTMKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91dGlsaXR5L2dtbC9VdGlsTG9nZ2VyLmphdmEKQEAgLTAsMCArMSw2MCBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkuZ21sOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCisvKioKKyAqIFRoZSBhY3RpdmF0b3IgY2xhc3MgY29udHJvbHMgdGhlIHBsdWctaW4gbGlmZSBjeWNsZQorICovCitwdWJsaWMgY2xhc3MgVXRpbExvZ2dlciAgeworCisJLyoqCisJICogVGhlIHBsdWctaW4gSUQKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBQTFVHSU5fSUQgPSAib3JnLmVjbGlwc2Uuc3RlbS51aS5yZXBvcnRzIjsgLy8kTk9OLU5MUy0xJAorCisJLy8gVGhlIHNoYXJlZCBpbnN0YW5jZQorCXByaXZhdGUgc3RhdGljIFV0aWxMb2dnZXIgcGx1Z2luOworCisJLyoqCisJICogVGhlIGNvbnN0cnVjdG9yCisJICovCisJcHVibGljIFV0aWxMb2dnZXIoKSB7CisJCXBsdWdpbiA9IHRoaXM7CisJfQorCisJCisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBzaGFyZWQgaW5zdGFuY2UKKwkgKiAKKwkgKiBAcmV0dXJuIHRoZSBzaGFyZWQgaW5zdGFuY2UKKwkgKi8KKwlwdWJsaWMgc3RhdGljIFV0aWxMb2dnZXIgZ2V0RGVmYXVsdCgpIHsKKwkJcmV0dXJuIHBsdWdpbjsKKwl9CisKKwkKKwkvKioKKwkgKiBMb2cgaW5mb3JtYXRpb24gdG8gdGhlIElMb2cgZm9yIHRoaXMgcGx1Z2luCisJICogVGhlIG1ldGhvZCBpcyBvdmVybG9hZGVkIHRvIGFsbG93IGZvciBsb2dJbmZvcm1hdGlvbiB3aXRob3V0IGFuIGVycm9yIAorCSAqIG1ldGhvZCBzZXRzIHRoZSBlcnJvciB0byBudWxsLiBUaGlzIHNob3VsZCBiZSB1c2VkIGluc3RlYWQgb2YgVXRpbExvZ2dlci5sb2dJbmZvcm1hdGlvbgorCSAqIHRocm91Z2hvdXQgdGhlIGNvZGUuCisJICogQHBhcmFtIG1lc3NhZ2UKKwkgKiAgICAgICAgICAgIHRoZSBsb2NhbGl6ZWQgaW5mb3JtYXRpb24gbWVzc2FnZSB0ZXh0CisJICoKKwkgKi8KKwlwdWJsaWMgc3RhdGljIHZvaWQgbG9nSW5mb3JtYXRpb24oU3RyaW5nIG1lc3NhZ2UpIHsKKwkJU3lzdGVtLm91dC5wcmludGxuKG1lc3NhZ2UpOworCX0gLy8gbG9nSW5mb3JtYXRpb24KKwkKK30gLy8gQWN0aXZhdG9yCmRpZmYgLS1naXQgYS9kaXN0cmlidXRlZC9vcmcuZWNsaXBzZS5zdGVtLmdyYXBoc3luY2hyb25pemVyLy5jbGFzc3BhdGggYi9kaXN0cmlidXRlZC9vcmcuZWNsaXBzZS5zdGVtLmdyYXBoc3luY2hyb25pemVyLy5jbGFzc3BhdGgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzA0ZTg2MQotLS0gL2Rldi9udWxsCisrKyBiL2Rpc3RyaWJ1dGVkL29yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhzeW5jaHJvbml6ZXIvLmNsYXNzcGF0aApAQCAtMCwwICsxLDcgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8Y2xhc3NwYXRoPgorCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJzcmMiIHBhdGg9InNyYyIvPgorCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJjb24iIHBhdGg9Im9yZy5lY2xpcHNlLmpkdC5sYXVuY2hpbmcuSlJFX0NPTlRBSU5FUi9vcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwuZGVidWcudWkubGF1bmNoZXIuU3RhbmRhcmRWTVR5cGUvSjJTRS0xLjUiLz4KKwk8Y2xhc3NwYXRoZW50cnkga2luZD0iY29uIiBwYXRoPSJvcmcuZWNsaXBzZS5wZGUuY29yZS5yZXF1aXJlZFBsdWdpbnMiLz4KKwk8Y2xhc3NwYXRoZW50cnkga2luZD0ib3V0cHV0IiBwYXRoPSJiaW4iLz4KKzwvY2xhc3NwYXRoPgpkaWZmIC0tZ2l0IGEvZGlzdHJpYnV0ZWQvb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaHN5bmNocm9uaXplci8ucHJvamVjdCBiL2Rpc3RyaWJ1dGVkL29yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhzeW5jaHJvbml6ZXIvLnByb2plY3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGQ2NzgzMQotLS0gL2Rldi9udWxsCisrKyBiL2Rpc3RyaWJ1dGVkL29yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhzeW5jaHJvbml6ZXIvLnByb2plY3QKQEAgLTAsMCArMSwyOCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxwcm9qZWN0RGVzY3JpcHRpb24+CisJPG5hbWU+b3JnLmVjbGlwc2Uuc3RlbS5ncmFwaHN5bmNocm9uaXplcjwvbmFtZT4KKwk8Y29tbWVudD48L2NvbW1lbnQ+CisJPHByb2plY3RzPgorCTwvcHJvamVjdHM+CisJPGJ1aWxkU3BlYz4KKwkJPGJ1aWxkQ29tbWFuZD4KKwkJCTxuYW1lPm9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFidWlsZGVyPC9uYW1lPgorCQkJPGFyZ3VtZW50cz4KKwkJCTwvYXJndW1lbnRzPgorCQk8L2J1aWxkQ29tbWFuZD4KKwkJPGJ1aWxkQ29tbWFuZD4KKwkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5NYW5pZmVzdEJ1aWxkZXI8L25hbWU+CisJCQk8YXJndW1lbnRzPgorCQkJPC9hcmd1bWVudHM+CisJCTwvYnVpbGRDb21tYW5kPgorCQk8YnVpbGRDb21tYW5kPgorCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLlNjaGVtYUJ1aWxkZXI8L25hbWU+CisJCQk8YXJndW1lbnRzPgorCQkJPC9hcmd1bWVudHM+CisJCTwvYnVpbGRDb21tYW5kPgorCTwvYnVpbGRTcGVjPgorCTxuYXR1cmVzPgorCQk8bmF0dXJlPm9yZy5lY2xpcHNlLnBkZS5QbHVnaW5OYXR1cmU8L25hdHVyZT4KKwkJPG5hdHVyZT5vcmcuZWNsaXBzZS5qZHQuY29yZS5qYXZhbmF0dXJlPC9uYXR1cmU+CisJPC9uYXR1cmVzPgorPC9wcm9qZWN0RGVzY3JpcHRpb24+CmRpZmYgLS1naXQgYS9kaXN0cmlidXRlZC9vcmcuZWNsaXBzZS5zdGVtLmdyYXBoc3luY2hyb25pemVyLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcyBiL2Rpc3RyaWJ1dGVkL29yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhzeW5jaHJvbml6ZXIvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMxZWMyOGQKLS0tIC9kZXYvbnVsbAorKysgYi9kaXN0cmlidXRlZC9vcmcuZWNsaXBzZS5zdGVtLmdyYXBoc3luY2hyb25pemVyLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcwpAQCAtMCwwICsxLDggQEAKKyNGcmkgRmViIDE4IDA5OjU1OjM4IFBTVCAyMDExCitlY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29kZWdlbi5pbmxpbmVKc3JCeXRlY29kZT1lbmFibGVkCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb2RlZ2VuLnRhcmdldFBsYXRmb3JtPTEuNQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29tcGxpYW5jZT0xLjUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uYXNzZXJ0SWRlbnRpZmllcj1lcnJvcgorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5lbnVtSWRlbnRpZmllcj1lcnJvcgorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuc291cmNlPTEuNQpkaWZmIC0tZ2l0IGEvZGlzdHJpYnV0ZWQvb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaHN5bmNocm9uaXplci9NRVRBLUlORi9NQU5JRkVTVC5NRiBiL2Rpc3RyaWJ1dGVkL29yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhzeW5jaHJvbml6ZXIvTUVUQS1JTkYvTUFOSUZFU1QuTUYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTc4NWFiMAotLS0gL2Rldi9udWxsCisrKyBiL2Rpc3RyaWJ1dGVkL29yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhzeW5jaHJvbml6ZXIvTUVUQS1JTkYvTUFOSUZFU1QuTUYKQEAgLTAsMCArMSwxOCBAQAorTWFuaWZlc3QtVmVyc2lvbjogMS4wCitCdW5kbGUtTWFuaWZlc3RWZXJzaW9uOiAyCitCdW5kbGUtTmFtZTogR3JhcGhTeW5jaHJvbml6ZXIKK0J1bmRsZS1TeW1ib2xpY05hbWU6IG9yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhzeW5jaHJvbml6ZXI7c2luZ2xldG9uOj10cnVlCitCdW5kbGUtVmVyc2lvbjogMS4yLjEKK0J1bmRsZS1BY3RpdmF0b3I6IG9yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhzeW5jaHJvbml6ZXIuQWN0aXZhdG9yCitSZXF1aXJlLUJ1bmRsZTogb3JnLmVjbGlwc2UudWksCisgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLAorIG9yZy5lY2xpcHNlLnN0ZW0uY29yZSwKKyBvcmcuZWNsaXBzZS5zdGVtLmpvYnMsCisgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucywKKyBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMsCisgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLAorIG9yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkKK0J1bmRsZS1SZXF1aXJlZEV4ZWN1dGlvbkVudmlyb25tZW50OiBKMlNFLTEuNQorRXhwb3J0LVBhY2thZ2U6IG9yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhzeW5jaHJvbml6ZXIsCisgb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaHN5bmNocm9uaXplci5pbXBsLAorIG9yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhzeW5jaHJvbml6ZXIudXRpbApkaWZmIC0tZ2l0IGEvZGlzdHJpYnV0ZWQvb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaHN5bmNocm9uaXplci9idWlsZC5wcm9wZXJ0aWVzIGIvZGlzdHJpYnV0ZWQvb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaHN5bmNocm9uaXplci9idWlsZC5wcm9wZXJ0aWVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc4OTIzNzkKLS0tIC9kZXYvbnVsbAorKysgYi9kaXN0cmlidXRlZC9vcmcuZWNsaXBzZS5zdGVtLmdyYXBoc3luY2hyb25pemVyL2J1aWxkLnByb3BlcnRpZXMKQEAgLTAsMCArMSwxMCBAQAorc291cmNlLi4gPSBzcmMvCitvdXRwdXQuLiA9IGJpbi8KK2Jpbi5pbmNsdWRlcyA9IE1FVEEtSU5GLyxcCisgICAgICAgICAgICAgICAuLFwKKyAgICAgICAgICAgICAgIHBsdWdpbi54bWwsXAorICAgICAgICAgICAgICAgcGx1Z2luLnByb3BlcnRpZXMsXAorICAgICAgICAgICAgICAgbm9kZWNvbmZpZy5wcm9wZXJ0aWVzLFwKKyAgICAgICAgICAgICAgIHBsdWdpbl9kZS5wcm9wZXJ0aWVzLFwKKyAgICAgICAgICAgICAgIHBsdWdpbl9rci5wcm9wZXJ0aWVzLFwKKyAgICAgICAgICAgICAgIHBsdWdpbl96aC5wcm9wZXJ0aWVzCmRpZmYgLS1naXQgYS9kaXN0cmlidXRlZC9vcmcuZWNsaXBzZS5zdGVtLmdyYXBoc3luY2hyb25pemVyL21vZGVsL2dyYXBoc3luY2hyb25pemVyLmVjb3JlIGIvZGlzdHJpYnV0ZWQvb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaHN5bmNocm9uaXplci9tb2RlbC9ncmFwaHN5bmNocm9uaXplci5lY29yZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMGRlZTg2Ci0tLSAvZGV2L251bGwKKysrIGIvZGlzdHJpYnV0ZWQvb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaHN5bmNocm9uaXplci9tb2RlbC9ncmFwaHN5bmNocm9uaXplci5lY29yZQpAQCAtMCwwICsxLDE1IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPGVjb3JlOkVQYWNrYWdlIHhtaTp2ZXJzaW9uPSIyLjAiCisgICAgeG1sbnM6eG1pPSJodHRwOi8vd3d3Lm9tZy5vcmcvWE1JIiB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIgorICAgIHhtbG5zOmVjb3JlPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2VtZi8yMDAyL0Vjb3JlIiBuYW1lPSJncmFwaHN5bmNocm9uaXplciIKKyAgICBuc1VSST0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2dyYXBoc3luY2hyb25pemVyL2dyYXBoc3luY2hyb25pemVyLmVjb3JlIiBuc1ByZWZpeD0ib3JnLmVjbGlwc2Uuc3RlbS5ncmFwaHN5bmNocm9uaXplciI+CisgIDxlQ2xhc3NpZmllcnMgeHNpOnR5cGU9ImVjb3JlOkVDbGFzcyIgbmFtZT0iU3luY2hHcmFwaFBhcnRpdGlvbmVyIiBlU3VwZXJUeXBlcz0iLi4vLi4vb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL21vZGVsL2dyYXBoLmVjb3JlIy8vR3JhcGhQYXJ0aXRpb25lciI+CisgICAgPGVPcGVyYXRpb25zIG5hbWU9ImdldElkZW50aWZpYWJsZVJhbmsiIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgcGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5lbWYuZWNvcmUvbW9kZWwvRWNvcmUuZWNvcmUjLy9FSW50Ij4KKyAgICAgIDxlUGFyYW1ldGVycyBuYW1lPSJpZGVudGlmaWFibGUiIGVUeXBlPSJlY29yZTpFQ2xhc3MgLi4vLi4vb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL21vZGVsL2NvbW1vbi5lY29yZSMvL0lkZW50aWZpYWJsZSIvPgorICAgIDwvZU9wZXJhdGlvbnM+CisgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVBdHRyaWJ1dGUiIG5hbWU9Im51bU5vZGVzIiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIHBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2UuZW1mLmVjb3JlL21vZGVsL0Vjb3JlLmVjb3JlIy8vRUludCIKKyAgICAgICAgZGVmYXVsdFZhbHVlTGl0ZXJhbD0iMSIvPgorICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJub2RlUmFuayIgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLmVtZi5lY29yZS9tb2RlbC9FY29yZS5lY29yZSMvL0VJbnQiCisgICAgICAgIGRlZmF1bHRWYWx1ZUxpdGVyYWw9IjAiLz4KKyAgPC9lQ2xhc3NpZmllcnM+Cis8L2Vjb3JlOkVQYWNrYWdlPgpkaWZmIC0tZ2l0IGEvZGlzdHJpYnV0ZWQvb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaHN5bmNocm9uaXplci9tb2RlbC9ncmFwaHN5bmNocm9uaXplci5nZW5tb2RlbCBiL2Rpc3RyaWJ1dGVkL29yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhzeW5jaHJvbml6ZXIvbW9kZWwvZ3JhcGhzeW5jaHJvbml6ZXIuZ2VubW9kZWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTA5NGIxNAotLS0gL2Rldi9udWxsCisrKyBiL2Rpc3RyaWJ1dGVkL29yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhzeW5jaHJvbml6ZXIvbW9kZWwvZ3JhcGhzeW5jaHJvbml6ZXIuZ2VubW9kZWwKQEAgLTAsMCArMSwxNCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxnZW5tb2RlbDpHZW5Nb2RlbCB4bWk6dmVyc2lvbj0iMi4wIgorICAgIHhtbG5zOnhtaT0iaHR0cDovL3d3dy5vbWcub3JnL1hNSSIgeG1sbnM6Z2VubW9kZWw9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDIvR2VuTW9kZWwiIG1vZGVsRGlyZWN0b3J5PSIvb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaHN5bmNocm9uaXplci9zcmMiCisgICAgZWRpdERpcmVjdG9yeT0iL29yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhzeW5jaHJvbml6ZXIvc3JjIiBlZGl0b3JEaXJlY3Rvcnk9Ii9vcmcuZWNsaXBzZS5zdGVtLmdyYXBoc3luY2hyb25pemVyL3NyYyIKKyAgICBtb2RlbFBsdWdpbklEPSJvcmcuZWNsaXBzZS5zdGVtLmdyYXBoc3luY2hyb25pemVyIiBtb2RlbE5hbWU9IkdyYXBoc3luY2hyb25pemVyIgorICAgIHRlc3RzRGlyZWN0b3J5PSIvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5ncmFwaHN5bmNocm9uaXplci9zcmMiIGltcG9ydGVySUQ9Im9yZy5lY2xpcHNlLmVtZi5pbXBvcnRlci5lY29yZSIKKyAgICBjb21wbGlhbmNlTGV2ZWw9IjUuMCIgY29weXJpZ2h0RmllbGRzPSJmYWxzZSIgdGVzdHNQbHVnaW5JRD0ib3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5ncmFwaHN5bmNocm9uaXplciIKKyAgICB1c2VkR2VuUGFja2FnZXM9Ii4uLy4uL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9tb2RlbC9jb3JlLmdlbm1vZGVsIy8vY29tbW9uIC4uLy4uL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9tb2RlbC9jb3JlLmdlbm1vZGVsIy8vZ3JhcGggLi4vLi4vb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL21vZGVsL2NvcmUuZ2VubW9kZWwjLy9tb2RlbCAuLi8uLi9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvbW9kZWwvY29yZS5nZW5tb2RlbCMvL21vZGlmaWVyIC4uLy4uL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9tb2RlbC9jb3JlLmdlbm1vZGVsIy8vc2NlbmFyaW8gLi4vLi4vb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL21vZGVsL2NvcmUuZ2VubW9kZWwjLy9zZXF1ZW5jZXIgLi4vLi4vb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL21vZGVsL2NvcmUuZ2VubW9kZWwjLy9zb2x2ZXIgcGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5lbWYuZWNvcmUvbW9kZWwvRWNvcmUuZ2VubW9kZWwjLy9lY29yZSI+CisgIDxmb3JlaWduTW9kZWw+Z3JhcGhzeW5jaHJvbml6ZXIuZWNvcmU8L2ZvcmVpZ25Nb2RlbD4KKyAgPGdlblBhY2thZ2VzIHByZWZpeD0iR3JhcGhzeW5jaHJvbml6ZXIiIGJhc2VQYWNrYWdlPSJvcmcuZWNsaXBzZS5zdGVtIiBkaXNwb3NhYmxlUHJvdmlkZXJGYWN0b3J5PSJ0cnVlIgorICAgICAgZWNvcmVQYWNrYWdlPSJncmFwaHN5bmNocm9uaXplci5lY29yZSMvIj4KKyAgICA8Z2VuQ2xhc3NlcyBlY29yZUNsYXNzPSJncmFwaHN5bmNocm9uaXplci5lY29yZSMvL1N5bmNoR3JhcGhQYXJ0aXRpb25lciIvPgorICA8L2dlblBhY2thZ2VzPgorPC9nZW5tb2RlbDpHZW5Nb2RlbD4KZGlmZiAtLWdpdCBhL2Rpc3RyaWJ1dGVkL29yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhzeW5jaHJvbml6ZXIvbm9kZWNvbmZpZy5wcm9wZXJ0aWVzIGIvZGlzdHJpYnV0ZWQvb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaHN5bmNocm9uaXplci9ub2RlY29uZmlnLnByb3BlcnRpZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzc3M2YzMgotLS0gL2Rldi9udWxsCisrKyBiL2Rpc3RyaWJ1dGVkL29yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhzeW5jaHJvbml6ZXIvbm9kZWNvbmZpZy5wcm9wZXJ0aWVzCkBAIC0wLDAgKzEsNDAgQEAKKyMKKyMgQ29uZmlndXJhdGlvbiBwYXJhbWV0ZXIgZm9yIHRoZSBjdXJyZW50IG5vZGUgdXNlZCB3aGVuIHJ1bm5pbmcgU1RFTSBkaXN0cmlidXRlZAorIworIworCisjIFRoZSBjbGFzcyBwcm92aWRpbmcgbWVzc2FnaW5nIGJldHdlZW4gY2x1c3RlciBub2Rlcy4gVmFyaW91cyBpbXBsZW1lbnRhdGlvbnMKKyMgY2FuIGJlIHByb3ZpZGVkIHRvIHN1cHBvcnQgYSByYW5nZSBvZiBoYXJkd2FyZSBjb25maWd1cmF0aW9ucworTUVTU0VOR0VSQ0xBU1M9b3JnLmVjbGlwc2Uuc3RlbS5ncmFwaHN5bmNocm9uaXplci5pbXBsLk5ldHdvcmtNZXNzZW5nZXIKKworIyBXaGV0aGVyIHRvIHVzZSBiaW5hcnkgc2VyaWFsaXphdGlvbiB3aGVuIHNlcmlhbGl6aW5nIHRoZSBFTUYgZ3JhcGhzLiAKKyMgSWYgc2V0IHRvIFRSVUUsIGJlIGNhcmVmdWwgdG8gZW5zdXJlIHRoYXQgdGhlIGJpbmFyeSBmb3JtYXQgKGkuZS4gRU1GIHZlcnNpb24pIGlzIAorIyB0aGUgc2FtZSBiZXR3ZWVuIGFsbCBydW5uaW5nIGluc3RhbmNlcy4KKyMKKyMgQWxsIG5vZGVzIG11c3Qgc2V0IHRoaXMgZmxhZyB0byB0aGUgc2FtZSB2YWx1ZQorCitCSU5BUllTRVJJQUxJWkFUSU9OPVRSVUUKKworIyBXaGV0aGVyIHRvIGNvbXByZXNzIHRoZSBtZXNzYWdlcyB1c2luZyB0aGUgWklQIGFsZ29yaXRobQorIyBBbGwgbm9kZXMgbXVzdCBzZXQgdGhpcyBmbGFnIHRvIHRoZSBzYW1lIHZhbHVlCitVU0VaSVA9RkFMU0UKKworIyBUaGUgcmFuayBvZiB0aGlzIG5vZGUgMCA8PSBOT0RFUkFOSyA8IE5VTU5PREVTCitOT0RFUkFOSz0wCisKKyMgVGhlIHRvdGFsIG51bWJlciBvZiBub2RlcworTlVNTk9ERVM9MgorCisKKyM9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorIyBPdGhlciBwYXJhbWV0ZXJzIG5lZWRlZCB0byBpbml0aWFsaXplIGEgcGFydGljdWxhciBtZXNzZW5nZXIgY2FuIGJlIAorIyBlbnRlcmVkIGhlcmUuIFRoZXkgYXJlIHBhc3NlZCB0byB0aGUgaW5pdGlhbGl6ZShQcm9wZXJ0aWVzKSBtZXRob2QKKyMgb2YgdGhlIE1lc3Nlbmdlci4KKyMKKworIyBGb3IgdGhlIG5ldHdvcmsgbWVzc2VuZ2VyLiBUaGUgb3RoZXIgcmVtb3RlIGhvc3RzLCBzZXBhcmF0ZSBhZGRyZXNzZXMgdXNpbmcgc2VtaS1jb2xvbi4gCisjIFRoZSB0b3RhbCBudW1iZXIgb2YgYWRkcmVzc2VzIG11c3QgbWF0Y2ggTlVNTk9ERVMtMQorUkVNT1RFSE9TVFM9OS4xLjY3Ljc1CisKKyMgVGhlIHBvcnQgbnVtYmVyIGFsbCBob3N0cyBhcmUgZXhwZWN0ZWQgdG8gYWNjZXB0IGNvbm5lY3Rpb25zIG9uCitQT1JUPTEyMTEKZGlmZiAtLWdpdCBhL2Rpc3RyaWJ1dGVkL29yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhzeW5jaHJvbml6ZXIvcGx1Z2luLnByb3BlcnRpZXMgYi9kaXN0cmlidXRlZC9vcmcuZWNsaXBzZS5zdGVtLmdyYXBoc3luY2hyb25pemVyL3BsdWdpbi5wcm9wZXJ0aWVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUwYmQ2ZDMKLS0tIC9kZXYvbnVsbAorKysgYi9kaXN0cmlidXRlZC9vcmcuZWNsaXBzZS5zdGVtLmdyYXBoc3luY2hyb25pemVyL3BsdWdpbi5wcm9wZXJ0aWVzCkBAIC0wLDAgKzEsMTQgQEAKKworIy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjICogQ29weXJpZ2h0IChjKSAyMDExIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorIyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyMgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyMgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorIyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisjICoKKyMgKiBDb250cmlidXRvcnM6CisjICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorIyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitwbHVnaW5OYW1lID0gR3JhcGhzeW5jaHJvbml6ZXIgTW9kZWwKK3Byb3ZpZGVyTmFtZSA9IHd3dy5leGFtcGxlLm9yZwpkaWZmIC0tZ2l0IGEvZGlzdHJpYnV0ZWQvb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaHN5bmNocm9uaXplci9wbHVnaW4ueG1sIGIvZGlzdHJpYnV0ZWQvb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaHN5bmNocm9uaXplci9wbHVnaW4ueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVhNDQ0OTIKLS0tIC9kZXYvbnVsbAorKysgYi9kaXN0cmlidXRlZC9vcmcuZWNsaXBzZS5zdGVtLmdyYXBoc3luY2hyb25pemVyL3BsdWdpbi54bWwKQEAgLTAsMCArMSwxMCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzw/ZWNsaXBzZSB2ZXJzaW9uPSIzLjQiPz4KKzxwbHVnaW4+Cis8IS0tICAgPGV4dGVuc2lvbgorICAgICAgICAgcG9pbnQ9Im9yZy5lY2xpcHNlLnVpLnN0YXJ0dXAiPgorICAgICAgPHN0YXJ0dXAKKyAgICAgICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS5zdGVtLmdyYXBoc3luY2hyb25pemVyLlN0YXJ0dXAiPjwvc3RhcnR1cD4KKyAgIDwvZXh0ZW5zaW9uPgorIC0tPgorPC9wbHVnaW4+CmRpZmYgLS1naXQgYS9kaXN0cmlidXRlZC9vcmcuZWNsaXBzZS5zdGVtLmdyYXBoc3luY2hyb25pemVyL3BsdWdpbl9kZS5wcm9wZXJ0aWVzIGIvZGlzdHJpYnV0ZWQvb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaHN5bmNocm9uaXplci9wbHVnaW5fZGUucHJvcGVydGllcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYzIxZGM2Ci0tLSAvZGV2L251bGwKKysrIGIvZGlzdHJpYnV0ZWQvb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaHN5bmNocm9uaXplci9wbHVnaW5fZGUucHJvcGVydGllcwpAQCAtMCwwICsxLDE0IEBACisKKyMvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIyAqIENvcHlyaWdodCAoYykgMjAxMSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyMgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisjICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisjICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyMgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorIyAqCisjICogQ29udHJpYnV0b3JzOgorIyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworcGx1Z2luTmFtZT1HcmFwaHN5bmNocm9uaWVyZXIgTW9kZWxsCitwcm92aWRlck5hbWU9d3d3LmV4YW1wbGUub3JnCmRpZmYgLS1naXQgYS9kaXN0cmlidXRlZC9vcmcuZWNsaXBzZS5zdGVtLmdyYXBoc3luY2hyb25pemVyL3BsdWdpbl9rci5wcm9wZXJ0aWVzIGIvZGlzdHJpYnV0ZWQvb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaHN5bmNocm9uaXplci9wbHVnaW5fa3IucHJvcGVydGllcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NmFiYWY5Ci0tLSAvZGV2L251bGwKKysrIGIvZGlzdHJpYnV0ZWQvb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaHN5bmNocm9uaXplci9wbHVnaW5fa3IucHJvcGVydGllcwpAQCAtMCwwICsxLDE0IEBACisKKyMvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIyAqIENvcHlyaWdodCAoYykgMjAxMSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyMgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisjICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisjICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyMgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorIyAqCisjICogQ29udHJpYnV0b3JzOgorIyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworcGx1Z2luTmFtZT1cdWFkZjhcdWI3OThcdWQ1MDRcdWMyZjFcdWQwNmNcdWI4NWNcdWIwOThcdWM3NzRcdWM4MDAgXHViYWE4XHViMzc4Citwcm92aWRlck5hbWU9d3d3LmV4YW1wbGUub3JnCmRpZmYgLS1naXQgYS9kaXN0cmlidXRlZC9vcmcuZWNsaXBzZS5zdGVtLmdyYXBoc3luY2hyb25pemVyL3BsdWdpbl96aC5wcm9wZXJ0aWVzIGIvZGlzdHJpYnV0ZWQvb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaHN5bmNocm9uaXplci9wbHVnaW5femgucHJvcGVydGllcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jM2VmYjExCi0tLSAvZGV2L251bGwKKysrIGIvZGlzdHJpYnV0ZWQvb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaHN5bmNocm9uaXplci9wbHVnaW5femgucHJvcGVydGllcwpAQCAtMCwwICsxLDE0IEBACisKKyMvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIyAqIENvcHlyaWdodCAoYykgMjAxMSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyMgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisjICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisjICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyMgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorIyAqCisjICogQ29udHJpYnV0b3JzOgorIyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworcGx1Z2luTmFtZT1cdTU2ZmVcdTVmNjJcdTU0MGNcdTZiNjVcdTZhMjFcdTU3OGIKK3Byb3ZpZGVyTmFtZT13d3cuZXhhbXBsZS5vcmcKZGlmZiAtLWdpdCBhL2Rpc3RyaWJ1dGVkL29yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhzeW5jaHJvbml6ZXIvcmVzb3VyY2VzL2NvdW50cnlDb2RlTWFwLmNzdiBiL2Rpc3RyaWJ1dGVkL29yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhzeW5jaHJvbml6ZXIvcmVzb3VyY2VzL2NvdW50cnlDb2RlTWFwLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMGI5MjE3Ci0tLSAvZGV2L251bGwKKysrIGIvZGlzdHJpYnV0ZWQvb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaHN5bmNocm9uaXplci9yZXNvdXJjZXMvY291bnRyeUNvZGVNYXAuY3N2CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Rpc3RyaWJ1dGVkL29yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhzeW5jaHJvbml6ZXIvcmVzb3VyY2VzL3dvcmxkUGFydGlvbmluZ1N0YXRzLmNzdiBiL2Rpc3RyaWJ1dGVkL29yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhzeW5jaHJvbml6ZXIvcmVzb3VyY2VzL3dvcmxkUGFydGlvbmluZ1N0YXRzLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MDBlMTk0Ci0tLSAvZGV2L251bGwKKysrIGIvZGlzdHJpYnV0ZWQvb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaHN5bmNocm9uaXplci9yZXNvdXJjZXMvd29ybGRQYXJ0aW9uaW5nU3RhdHMuY3N2CkBAIC0wLDAgKzEsMjQ1IEBACitBQlcsMSwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAKK0FGRywyOCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwxLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCw0LDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDIxLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCw1LDAsNywwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMiwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwCitBR08sMzQsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsNyw0LDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsNSwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsNywwCitBSUEsMSwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAKK0FMQSwxLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMAorQUxCLDEsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMiwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMSwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMiwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwCitBTkQsMSwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDEsMCwwLDAsMCwwLDIsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAKK0FOVCwxLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMAorQVJFLDg1LDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDEzLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwxLDAsMCwwLDAsMSwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAKK0FSRyw1MTksMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMTIsNDEsMCwwLDAsMCwwLDAsMCwwLDAsODgsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsODQsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMTAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAKK0FSTSwxLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwyLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDEsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDEsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDEsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMAorQVNNLDEsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwCitBVEEsMSwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAKK0FURiwxLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMAorQVRHLDEsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwCitBVVMsOCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAKK0FVVCw5LDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsNCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCw2LDcsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDIsMCwwLDAsMCwwLDAsMCwwLDAsNSwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMSwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMywwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMAorQVpFLDE3LDAsMCwwLDAsMCwwLDAsMCwwLDAsMiwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDEsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDQsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDQsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDEsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMAorQkRJLDExNCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwxMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwzMSwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDE5LDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAKK0JFTCwxMiwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwzLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDcsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMiwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDcsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAKK0JFTiw3NywwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCw3LDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsNSwwLDI0LDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDI2LDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMAorQkZBLDMwMSwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsNywwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDE5LDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDI4LDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMjksMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsOSwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMywwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAKK0JHRCw2NCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCw1MiwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMSwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwCitCR1IsMjgsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsNSwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMiwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDEyLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDUsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDIsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMAorQkhSLDUsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwCitCSFMsMSwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAKK0JJSCwxLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMSwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDMsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMAorQkxSLDEsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwxLDAsMSwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDQsMCwwLDAsMCwwLDAsMCwwLDAsMTQsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCw1LDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMAorQkxaLDEsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMSwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwyLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwCitCTVUsMSwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAKK0JPTCwxMDAsMCwwLDAsMCwwLDAsMCwwLDAsMTIsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMjMsMCwwLDAsMCwwLDAsMCwwLDAsMTIsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwxNiwwLDAsMCwwLDAsMCwwLDcsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMAorQlJBLDM5NTUsMCwwLDAsMCwwLDAsMCwwLDAsNDEsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDIzLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwxOCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwyLDAsNiwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwxNiwwLDAsMCwwLDAsMCwwLDM3LDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsNSwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDExLDAsMCwwLDAsOSwwLDAsMCwwLDAsMCwwLDAsMCwwCitCUkIsMSwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAKK0JSTiwyLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMiwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMAorQlROLDE5LDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDE0LDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwxNiwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwCitCVlQsMSwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAKK0JXQSwxLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDcsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCw4MSwxLDEKK0NBRiw1MSwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsNSwxNyw1LDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsNiwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwxMSwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMAorQ0FOLDI4NCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMTE5LDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMAorQ0NLLDEsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwCitDSEUsMzUsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCw0LDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsOCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwxMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsNiwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMiwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMAorQ0hMLDMyNCwwLDAsMCwwLDAsMCwwLDAsMCw4OCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMTIsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMiwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMAorQ0hOLDI0MTQsMCwxLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwxNCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMzQsMCwwLDAsMCwwLDAsMCwyNywwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMTYsMCw3LDAsMCwwLDAsMCw3LDAsMCwwLDAsMCwwLDAsMCwwLDAsMiwwLDAsMCwwLDAsMCwwLDAsMCwwLDE0LDAsMzEsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMTYsMCwwLDAsNiwwLDAsMCwwLDAsMCwwLDAsMTcsMCwwLDAsMCwwLDAsMCwzMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwyLDAsMCwwLDAsMCwwLDAsMCwwLDIyLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDQyLDAsMCwwLDAsMCwwLDAKK0NJViwxODUsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMTksMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwxOCwwLDE2LDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwxOCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsNywwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMAorQ01SLDEsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCw1LDAsMCwwLDAsMCwwLDAsMSwzLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwyLDAsMCwwLDAsMCwwLDAsMCwwLDMsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwyMiwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsNSwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMAorQ09ELDEsMCwwLDcsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMTAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMTcsMCwwLDAsMCwwLDAsMSwwLDE2LDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwyMSwwLDIsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMjQsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwxNiwwCitDT0csNDYsMCwwLDQsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCw1LDAsMCwwLDAsMCwwLDMsMTYsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMzQsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAKK0NPSywxLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMAorQ09MLDEwODQsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwxOCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDIxLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsNCwwLDgsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCw2MiwwLDAsMCwwLDAsMCwwLDAsMCwwCitDT00sNCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAKK0NQViw5LDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMAorQ1JJLDEsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDEsMCwwLDAsMCwwLDAsMCwwLDEsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwCitDVUIsMSwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAKK0NYUiwxLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMAorQ1lNLDEsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwCitDWVAsMSwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAKK0NaRSwxMiwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDYsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCw2LDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCw5LDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMTEsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDEsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwCitERVUsNDEsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCw3LDAsMCwzLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCw4LDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDYsMCwwLDAsMSwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCw1LDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDIsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCw3LDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDYsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwCitESkksMSwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMSwwLDAsMCwxLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDEsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAKK0RNQSwxLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMAorRE5LLDMsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMSwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDEsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwCitET00sMSwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAKK0RaQSw0OCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwxLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsNCwwLDAsMCwwLDAsMCwwLDAsOSwwLDAsMCwwLDAsMCwwLDIsMCwwLDAsMCwwLDAsMiwwLDAsMCwwLDAsMCwwLDAsMywwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMTEsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwCitFQ1UsMjA1LDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDIxLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDMzLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwCitFR1ksMjYsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsNSwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDIsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsNSwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwCitFUkksMzgsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwxLDAsMCwwLDAsMCwwLDAsMCwwLDAsMjAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDYsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMAorRVNILDEsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDEsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDUsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDEsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwCitFU1AsMTcsMCwwLDAsMCwwLDAsMSwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCw2LDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDEsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDcsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwCitFU1QsMSwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwxLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwyLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAKK0VUSCwxLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMSwwLDAsMCwwLDAsMCwyMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDQsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCw1LDAsMCwwLDAsMCwwLDAsMCwwLDE0LDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwCitGSU4sMTIsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDIsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMjQsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwxLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMAorRkpJLDEsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwCitGTEssMSwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAKK0ZSQSwyMiwwLDAsMCwwLDAsMCwyLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDcsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDEwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsNSwwLDAsMCwwLDAsMCwwLDAsMCw2LDAsMCwwLDAsMCwwLDAsMCwwLDEsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCw0LDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDEsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwCitGUk8sMSwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAKK0ZTTSwxLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMAorR0FCLDQ2LDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwyLDAsMzQsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsOCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAKK0dCUiwzNiwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDEsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMSwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAKK0dFTywxLDAsMCwwLDAsMCwwLDAsMCwwLDAsMSwwLDAsMCwwLDAsMCwxLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDE2LDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwyLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAKK0dHWSwxLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMAorR0hBLDE0MSwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwyOCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwxOCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwyNSwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAKK0dJQiwxLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMAorR0lOLDMzLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMTYsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDcsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDksMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDYsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDYsMCwwLDAsMCwwLDEwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwCitHTFAsMSwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAKK0dNQiwzNywwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDQzLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwCitHTkIsMzcsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCw3LDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwxMywwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMAorR05RLDksMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDMsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCw4LDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwCitHUkMsMTMsMCwwLDAsMCwwLDIsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDUsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMiwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsNSwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwCitHUkQsMSwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAKK0dSTCwxLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMAorR1RNLDEsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwxLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMSwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCw0MSwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwxLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMAorR1VGLDEsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwyLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDQsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwCitHVU0sMSwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAKK0dVWSwyNywwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDYsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsNiwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCw2LDAsMCwwLDAsMCwwLDAsMCwwLDAKK0hLRywxLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDM0LDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAKK0hNRCwxLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMAorSE5ELDEsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMSwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDEsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDEsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwCitIUlYsMSwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMSwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwzLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwyLDAsMCwwLDEsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAKK0hUSSwxLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMAorSFVOLDE5LDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMiwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCw5LDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMywwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCw3LDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDMsMCwwLDAsMywwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwxLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMAorSUROLDI5MywwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDcsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAKK0lNTiwxLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMAorSU5ELDQ3MCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDUyLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwxNiwwLDAsMCwwLDAsMCwwLDI3LDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwxMSwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMjksMCwwLDAsNDEsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAKK0lPVCwxLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMAorSVJMLDEsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDEsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwCitJUk4sMTA1LDAsNCwwLDAsMCwwLDAsMCwwLDAsMSwwLDAsMCwwLDAsMCw0LDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMTAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDUsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwyLDAsMCwwLDAsMCw0LDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAKK0lSUSwxOSwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwxMCwwLDAsMCwwLDAsMCwxLDAsMCwwLDAsMCwwLDAsMCwyLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDExLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCw1LDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDMsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMAorSVNMLDEsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwCitJU1IsNTAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCw1LDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwxMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDcsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMTYsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMiwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAKK0lUQSwyMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDUsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDYsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDQsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwyLDAsMCwwLDAsMCwwLDEsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAKK0pBTSwxLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMAorSkVZLDEsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwCitKT1IsOCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDEsMCwxMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwzLDAsMCwwLDAsMCwwLDYsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDUsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwCitKUE4sNDcsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwCitLQVosNTQsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMTYsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCw0LDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDYzLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwxLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwxMzEsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMAorS0VOLDQ3LDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDQsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDEsMCwwLDAsMCwwLDAsMCwwLDAsOCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDE4LDIxLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwCitLR1osMywwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCw3LDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCw0LDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDMsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCw0LDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAKK0tITSwxNjUsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDEyLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDE3LDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCw1NSwwLDAsMCwwLDAsMCwwCitLSVIsMSwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAKK0tOQSwxLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMAorS09SLDMyNywwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDQsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAKK0tXVCwxMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDIsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMSwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAKK0xBTywxMzMsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsNywwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMTIsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDMsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDQ1LDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCw1NCwwLDAsMCwwLDAsMCwwCitMQk4sMSwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCw3LDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMywwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAKK0xCUiw1NCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDE4LDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCw5LDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCw3LDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwCitMQlksMzQsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDQsMCwyLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDEsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMiwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwyLDAsMCwwLDAsMCwwLDAsMCwwLDIsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwCitMQ0EsMSwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAKK0xJRSwxLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMSwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMiwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMAorTEtBLDEsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwCitMU08sMTEsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDI2LDAsMAorTFRVLDEsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMSwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMSwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDEsMCwwLDAsMCwwLDAsMCwwLDAsNCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwCitMVVgsMSwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDIsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwyLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDEsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAKK0xWQSwxLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDEsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwxLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMSwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDUsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMAorTUFDLDMsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMiwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwCitNQVIsNDksMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDksMCwwLDAsNSwxLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDQsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwCitNQ08sMSwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAKK01EQSwxLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCw1LDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCw2LDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMAorTURHLDExMSwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAKK01EViwxLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMAorTUVYLDI0MjksMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwyLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsNDEsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCw4MywwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAKK01ITCwxLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMAorTUtELDEsMCwwLDAsMCwwLDEsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDIsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMiwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMiwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwCitNTEksMSwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwyOSwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCw3LDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDIsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCw2LDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDEsMCwwLDAsMCwwLDAsMCwwLDYsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCw0LDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwCitNTFQsMSwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAKK01NUiwxNCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDEsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwxNCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMTEsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwzLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDE0LDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAKK01ORSwxLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMAorTU5HLDE4LDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDMxLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwyMSwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwCitNTlAsMSwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAKK01PWiwxMjgsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMjksMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDIsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDEyLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMTMsNywxMQorTVJULDEsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDIsMCwwLDAsMSwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDQsMCwwLDAsMCwwLDAsMCwxLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwxMiwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMAorTVNSLDEsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwCitNVFEsMSwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAKK01VUywxLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMAorTVdJLDI0LDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMjksMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCw3LDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCw5LDAKK01ZUywxNCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwyLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDcsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMiwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCw2LDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAKK01ZVCwxLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMAorTkFNLDMzLDAsMCw1LDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDcsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCw3LDIsMQorTkNMLDEsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwCitORVIsMzUsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDUsOSwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDMsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDEsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCw2LDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwzMywwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsNSwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMAorTkZLLDEsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwCitOR0EsNTM4LDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwyNCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMjIsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDMzLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMiwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMAorTklDLDEsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMSwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMSwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwCitOSVUsMSwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAKK05MRCwxOSwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDcsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCw3LDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAKK05PUiwxOCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDIsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwyLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMTQsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwCitOUEwsMTQsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMTYsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDI5LDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAKK05SVSwxLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMAorTlpMLDEsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwCitPTU4sNDksMCwwLDAsMCwwLDAsMCwwLDEzLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCw0LDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMiwwLDAsMAorUEFLLDgwLDAsMjEsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCw2LDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCw0MSwwLDAsNSwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwCitQQU4sMSwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCw0LDAsMCwxLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAKK1BDTiwxLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMAorUEVSLDE3OCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwxNiwxNiwwLDAsMCwwLDAsMCwwLDAsMCwyLDAsMCwwLDAsMCwwLDgsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDMzLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAKK1BITCw3NCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAKK1BMVywxLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMAorUE5HLDg5OCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAKK1BPTCw1MCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCw0LDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMTEsNiwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwxLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsNywwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDksMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwCitQUkksNzgsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwCitQUkssNzAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMTcsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDQsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDEsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMAorUFJULDUsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCw3LDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwCitQUlksMjQ5LDAsMCwwLDAsMCwwLDAsMCwwLDg0LDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCw3LDM3LDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwCitQU0UsMiwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwxNiwwLDAsMCwzLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwCitQWUYsMSwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAKK1FBVCwxNSwwLDAsMCwwLDAsMCwwLDAsMSwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMSwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAKK1JFVSwxLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMAorUk9VLDQxLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwxMiwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCw3LDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDUsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCw0LDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMTEsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwCitSVVMsMjQ4NiwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsNCwwLDAsMCwwLDAsMCwwLDAsMCwxNCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMzAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwyLDAsMjQsMCwwLDAsMCwwLDAsMCwxNiwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsNjMsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsNCwwLDUsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwyMSwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMiwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsNywwLDEsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsNzAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwCitSV0EsMTQyLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDMxLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwyMSwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsNSwxNSwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMAorU0FVLDE1LDAsMCwwLDAsMCwwLDAsMCwxLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMTEsMCwwLDAsMCwwLDYsMCwwLDAsMCwwLDAsMCwwLDEsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCw0LDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwxLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDcsMCwwLDAKK1NETiwxOCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDYsMCwwLDAsMCwwLDAsMCwyLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDUsNiwwLDAsMCw1LDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDEsMCwwLDAsMCwwLDAsMCwwLDAsMiwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDQsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDgsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAKK1NFTiw5MywwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDYsMCw0MywxMywwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsNCwwLDAsMCwwLDAsMCwxMiwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAKK1NHUCwxMywwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDIsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAKK1NHUywxLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMAorU0hOLDEsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwCitTSk0sMSwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAKK1NMQiwxLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMAorU0xFLDE0LDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMTAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDcsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAKK1NMViwxLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDEsMCwwLDAsMCwwLDEsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMAorU01SLDEsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwyLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwCitTT00sNzQsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwxLDAsMCwwLDAsMCwwLDAsMCwwLDAsMTQsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsOCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMAorU1BNLDEsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwCitTUkIsNCwwLDAsMCwwLDAsMiwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsNSwwLDAsMywwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDIsMCwzLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwyLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsNCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAKK1NUUCwyLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMAorU1VSLDYzLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsNSwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsNCwwLDYsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMAorU1ZLLDEsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwCitTVk4sMSwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDMsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDEsMCwzLDAsMCwwLDAsMCwwLDAsMCwwLDEsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAKK1NXRSwyNCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwxLDAsMCwwLDAsMCwwLDAsMCwwLDEsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMTQsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwCitTV1osMSwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDIsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMiwwLDAKK1NZQywyLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMAorU1lSLDEzLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsNSwwLDIsMCwwLDAsNSwwLDAsMCwwLDAsMCwwLDAsMCwwLDMsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDksMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMAorVENBLDEsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwCitUQ0QsMTQsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwxMSwwLDAsMCwwLDAsMCw1LDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwyLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCw1LDAsMiwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDQsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMAorVEdPLDIxLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwyNiwzLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMjUsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwCitUSEEsNzIsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMTcsMCwwLDAsMCw0NSwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwxNCwwLDAsMCwwLDAsMCwwLDAsMCw2LDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwCitUSkssNCwwLDUsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwyLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMywwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCw4LDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAKK1RLTCwxLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMAorVEtNLDEzLDAsNywwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDIsMCwwLDAsMCwwLDAsMCwwLDEsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDcsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMAorVExTLDEsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwCitUTVAsMSwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAKK1RPTiwxLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMAorVFRPLDEsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwCitUVU4sMjMsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDExLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwyLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMAorVFVSLDEzNiwwLDAsMCwwLDAsMCwwLDAsMCwwLDEsMCwwLDAsMCwwLDAsMSwwLDAsMCwwLDAsMiwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwyLDAsMCwwLDAsMCwwLDAsMCw1LDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCw0LDMsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsOSwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAKK1RVViwxLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMAorVFdOLDEsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMjIsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMAorVFpBLDk3LDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDE5LDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDE4LDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwxMiwwLDAsMCwwLDcsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsNSwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsOCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDYsMAorVUdBLDE4NSwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwyNCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwyMSwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMTUsMCw4LDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCw4LDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAKK1VLUiwyNSwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCw1LDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMSwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwxLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDYsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsOSwwLDAsMCwwLDAsMCwwLDAsMTEsNzAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMAorVU1JLDEsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwCitVUlksMzYsMCwwLDAsMCwwLDAsMCwwLDAsMTAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMTEsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAKK1VTQSwzMTQxLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwxMTksMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCw4MywwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMAorVVpCLDQ4LDAsMiwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDEzMSwwLDQsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCw4LDAsNywwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwCitWQVQsMSwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAKK1ZDVCwxLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMAorVkVOLDMwMSwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDksMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCw2MiwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsNiwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwCitWR0IsMSwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAKK1ZJUiwxLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMAorVk5NLDUxOSwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCw0MiwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsNTUsMCwwLDAsMCw1NCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAKK1ZVVCwxLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMAorV0xGLDEsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwCitXU00sMSwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAKK1lFTSw4LDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDIsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCw3LDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMAorWkFGLDM3MywwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCw4MSwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMjYsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMTMsMCwwLDAsMCwwLDAsMCw3LDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwyLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDMKK1pNQiw1NywwLDAsNywwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwxLDAsMCwwLDAsMCwwLDAsMCwxNiwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCw3LDAsMCwwLDAsOSwwLDAsMiwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsNiwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCw3CitaV0UsMSwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwxLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDExLDAsMCwwLDAsMCwwLDAsMSwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDMsNywwCmRpZmYgLS1naXQgYS9kaXN0cmlidXRlZC9vcmcuZWNsaXBzZS5zdGVtLmdyYXBoc3luY2hyb25pemVyL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2dyYXBoc3luY2hyb25pemVyL0FjdGl2YXRvci5qYXZhIGIvZGlzdHJpYnV0ZWQvb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaHN5bmNocm9uaXplci9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9ncmFwaHN5bmNocm9uaXplci9BY3RpdmF0b3IuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hOTM2NGQ4Ci0tLSAvZGV2L251bGwKKysrIGIvZGlzdHJpYnV0ZWQvb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaHN5bmNocm9uaXplci9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9ncmFwaHN5bmNocm9uaXplci9BY3RpdmF0b3IuamF2YQpAQCAtMCwwICsxLDIzOSBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmdyYXBoc3luY2hyb25pemVyOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDExIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCitpbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbTsKK2ltcG9ydCBqYXZhLnV0aWwuUHJvcGVydGllczsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5GaWxlTG9jYXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVBhdGg7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBhdGg7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBsYXRmb3JtOworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TdGF0dXM7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaHN5bmNocm9uaXplci5pbXBsLlNpbXVsYXRpb25HcmFwaFN5bmNocm9uaXplcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmpvYnMuc2ltdWxhdGlvbi5TaW11bGF0aW9uTWFuYWdlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5wbHVnaW4uQWJzdHJhY3RVSVBsdWdpbjsKK2ltcG9ydCBvcmcub3NnaS5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dDsKKworLyoqCisgKiBUaGUgYWN0aXZhdG9yIGNsYXNzIGNvbnRyb2xzIHRoZSBwbHVnLWluIGxpZmUgY3ljbGUKKyAqLworcHVibGljIGNsYXNzIEFjdGl2YXRvciBleHRlbmRzIEFic3RyYWN0VUlQbHVnaW4geworCisJLy8gVGhlIHBsdWctaW4gSUQKKwlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBQTFVHSU5fSUQgPSAib3JnLmVjbGlwc2Uuc3RlbS5ncmFwaHN5bmNocm9uaXplciI7IC8vJE5PTi1OTFMtMSQKKworCS8vIFRoZSBzaGFyZWQgaW5zdGFuY2UKKwlwcml2YXRlIHN0YXRpYyBBY3RpdmF0b3IgcGx1Z2luOworCQorCS8vIFN0YXJ0dXAgcmVmZXJlbmNlCisJCisJcHVibGljIHN0YXRpYyBTdHJpbmcgQ09ORklHRklMRSA9ICJub2RlY29uZmlnLnByb3BlcnRpZXMiOworCQorCXB1YmxpYyBzdGF0aWMgU3RyaW5nIE5PREVSQU5LS0VZID0gIk5PREVSQU5LIjsKKwlwdWJsaWMgc3RhdGljIFN0cmluZyBOVU1OT0RFU0tFWSA9ICJOVU1OT0RFUyI7CisJcHVibGljIHN0YXRpYyBTdHJpbmcgTUVTU0VOR0VSQ0xBU1NLRVkgPSAiTUVTU0VOR0VSQ0xBU1MiOworCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFVTRUJJTkFSWUtFWSA9ICJCSU5BUllTRVJJQUxJWkFUSU9OIjsKKwlwdWJsaWMgc3RhdGljIFN0cmluZyBVU0VaSVBLRVkgPSAiVVNFWklQIjsKKworCS8qKgorCSAqIFRoZSBjb25zdHJ1Y3RvcgorCSAqLworCXB1YmxpYyBBY3RpdmF0b3IoKSB7CisJfQorCisJLyoKKwkgKiAobm9uLUphdmFkb2MpCisJICogQHNlZSBvcmcuZWNsaXBzZS51aS5wbHVnaW4uQWJzdHJhY3RVSVBsdWdpbiNzdGFydChvcmcub3NnaS5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dCkKKwkgKi8KKwlwdWJsaWMgdm9pZCBzdGFydChCdW5kbGVDb250ZXh0IGNvbnRleHQpIHRocm93cyBFeGNlcHRpb24geworCQlzdXBlci5zdGFydChjb250ZXh0KTsKKwkJcGx1Z2luID0gdGhpczsKKwkJCisJCVNpbXVsYXRpb25NYW5hZ2VyIG1hbmFnZXIgPSBTaW11bGF0aW9uTWFuYWdlci5nZXRNYW5hZ2VyKCk7CisJCVNpbXVsYXRpb25NYW5hZ2VyRGVsZWdhdGUgc21kID0gbmV3IFNpbXVsYXRpb25NYW5hZ2VyRGVsZWdhdGUoKTsJCQorCQltYW5hZ2VyLmFkZFNpbXVsYXRpb25NYW5hZ2VyTGlzdGVuZXJTeW5jKHNtZCk7CisJCVN5bmNoR3JhcGhQYXJ0aXRpb25lciBzZ3AgPSBHcmFwaHN5bmNocm9uaXplckZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZVN5bmNoR3JhcGhQYXJ0aXRpb25lcigpOworCQltYW5hZ2VyLnNldEdyYXBoUGFydGl0aW9uZXIoc2dwKTsKKwkJCisJCWludCBub2RlcmFuaz0tMSwgbnVtbm9kZXM9LTE7CisJCVN0cmluZyBtZXNzZW5nZXJDbGFzcyA9IG51bGw7CisJCVByb3BlcnRpZXMgY29uZmlnID0gbnVsbDsKKwkJYm9vbGVhbiB1c2VCaW5hcnksIGNvbXByZXNzOworCQkKKwkJdHJ5IHsKKwkJCisJCQljb25maWcgPSBuZXcgUHJvcGVydGllcygpOworCQkJCisJCQlJUGF0aCBwYXRoID0gbmV3IFBhdGgoQ09ORklHRklMRSk7CisJCQlJbnB1dFN0cmVhbSBpcyA9IEZpbGVMb2NhdG9yLm9wZW5TdHJlYW0oUGxhdGZvcm0uZ2V0QnVuZGxlKEFjdGl2YXRvci5QTFVHSU5fSUQpLCBwYXRoLCBmYWxzZSk7CisJCQljb25maWcubG9hZChpcyk7CisJCQlpcy5jbG9zZSgpOworCQkJCisJCQkKKwkJCXRyeSB7CisJCQkJbm9kZXJhbmsgPSBJbnRlZ2VyLnBhcnNlSW50KGNvbmZpZy5nZXRQcm9wZXJ0eShOT0RFUkFOS0tFWSkpOworCQkJfSBjYXRjaChOdW1iZXJGb3JtYXRFeGNlcHRpb24gbmZlKSB7CisJCQkJdGhyb3cgbmV3IEJhZENvbmZpZ0ZpbGVFeGNlcHRpb24oIkludmFsaWQgb3IgbWlzc2luZyAiK05PREVSQU5LS0VZKyIgaW4gcHJvcGVydGllcyBmaWxlIik7CisJCQl9CisJCQkKKwkJCXRyeSB7CisJCQkJbnVtbm9kZXMgPSBJbnRlZ2VyLnBhcnNlSW50KGNvbmZpZy5nZXRQcm9wZXJ0eShOVU1OT0RFU0tFWSkpOworCQkJfSBjYXRjaChOdW1iZXJGb3JtYXRFeGNlcHRpb24gbmZlKSB7CisJCQkJdGhyb3cgbmV3IEJhZENvbmZpZ0ZpbGVFeGNlcHRpb24oIkludmFsaWQgb3IgbWlzc2luZyAiK05VTU5PREVTS0VZKyIgaW4gcHJvcGVydGllcyBmaWxlIik7CisJCQl9CisJCQkKKwkJCWlmKG5vZGVyYW5rIDwgMCB8fCBudW1ub2RlcyA8IDEpCisJCQkJdGhyb3cgbmV3IEJhZENvbmZpZ0ZpbGVFeGNlcHRpb24oIkludmFsaWQgY29uZmlndXJhdGlvbiwgIitOT0RFUkFOS0tFWSsiIG11c3QgYmUgMCBvciBncmVhdGVyIGFuZCAiK05VTU5PREVTS0VZKyIgbXVzdCBiZSAxIG9yIGdyZWF0ZXIiKTsKKwkJCW1lc3NlbmdlckNsYXNzID0gY29uZmlnLmdldFByb3BlcnR5KE1FU1NFTkdFUkNMQVNTS0VZKTsKKwkJCWlmKG1lc3NlbmdlckNsYXNzID09IG51bGwpIAorCQkJCXRocm93IG5ldyBCYWRDb25maWdGaWxlRXhjZXB0aW9uKCJNaXNzaW5nIG1lc3NlbmdlciBjbGFzcyBzcGVjaWZpY2F0aW9uIik7CisJCQkKKwkJCXVzZUJpbmFyeSA9IEJvb2xlYW4ucGFyc2VCb29sZWFuKGNvbmZpZy5nZXRQcm9wZXJ0eShVU0VCSU5BUllLRVkpKTsKKwkJCWNvbXByZXNzID0gQm9vbGVhbi5wYXJzZUJvb2xlYW4oY29uZmlnLmdldFByb3BlcnR5KFVTRVpJUEtFWSkpOworCQkJCisJCX0gY2F0Y2goRXhjZXB0aW9uIGUpIHsKKwkJCUFjdGl2YXRvci5sb2dFcnJvcigiVW5hYmxlIHRvIHJlYWQgY29uZmlndXJhdGlvbiBmaWxlIGZvciBkaXN0cmlidXRlZCBTVEVNIiwgZSk7CisJCQlyZXR1cm47CisJCX0KKwkJc2dwLnNldE5vZGVSYW5rKG5vZGVyYW5rKTsKKwkJc2dwLnNldE51bU5vZGVzKG51bW5vZGVzKTsKKworCQlNZXNzZW5nZXIgbWVzc2VuZ2VyID0gbnVsbDsKKwkJdHJ5IHsKKwkJIENsYXNzIG1lc3NDID0gQ2xhc3MuZm9yTmFtZShtZXNzZW5nZXJDbGFzcyk7CisJCSBtZXNzZW5nZXIgPSAoTWVzc2VuZ2VyKW1lc3NDLm5ld0luc3RhbmNlKCk7CisJCX0gY2F0Y2goRXhjZXB0aW9uIGNuZmUpIHsKKwkJCUFjdGl2YXRvci5sb2dFcnJvcigiVW5hYmxlIHRvIGxvYWQgb3IgaW5zdGFudGlhdGUgY2xhc3MgIittZXNzZW5nZXJDbGFzcywgY25mZSk7CisJCQlyZXR1cm47CisJCX0KKwkJCisJCVNpbXVsYXRpb25HcmFwaFN5bmNocm9uaXplci5tZXNzZW5nZXIgPSBtZXNzZW5nZXI7CisJCVNpbXVsYXRpb25HcmFwaFN5bmNocm9uaXplci5CSU5BUllTRVJJQUxJWkFUSU9OID0gdXNlQmluYXJ5OworCQlTaW11bGF0aW9uR3JhcGhTeW5jaHJvbml6ZXIuWklQTUVTU0FHRVMgPSBjb21wcmVzczsKKwkJdHJ5IHsKKwkJCW1lc3Nlbmdlci5pbml0aWFsaXplKGNvbmZpZyk7CisJCQltZXNzZW5nZXIuc3RhcnQoKTsKKwkJfSBjYXRjaChNZXNzZW5nZXJFeGNlcHRpb24gbWUpIHsKKwkJCUFjdGl2YXRvci5sb2dFcnJvcigiVW5hYmxlIHRvIGluaXRpYWxpemUgb3Igc3RhcnQgbWVzc2VuZ2VyICIrbWVzc2VuZ2VyQ2xhc3MsIG1lKTsKKwkJCXJldHVybjsKKwkJfQorCisKKwl9CisKKwkvKgorCSAqIChub24tSmF2YWRvYykKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnVpLnBsdWdpbi5BYnN0cmFjdFVJUGx1Z2luI3N0b3Aob3JnLm9zZ2kuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHQpCisJICovCisJcHVibGljIHZvaWQgc3RvcChCdW5kbGVDb250ZXh0IGNvbnRleHQpIHRocm93cyBFeGNlcHRpb24geworCQlwbHVnaW4gPSBudWxsOworCQlzdXBlci5zdG9wKGNvbnRleHQpOworCQl0cnkgeworCQkJU2ltdWxhdGlvbkdyYXBoU3luY2hyb25pemVyLm1lc3Nlbmdlci5zdG9wKCk7CisJCX0gY2F0Y2goTWVzc2VuZ2VyRXhjZXB0aW9uIG1lKSB7CisJCQkvLyBBY3RpdmF0b3IgbWlnaHQgYmUgZG93bi4gSnVzdCBkdW1wIHRoZSBzdGFjayB0cmFjZQorCQkJbWUucHJpbnRTdGFja1RyYWNlKCk7CisJCX0KKworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIHNoYXJlZCBpbnN0YW5jZQorCSAqCisJICogQHJldHVybiB0aGUgc2hhcmVkIGluc3RhbmNlCisJICovCisJcHVibGljIHN0YXRpYyBBY3RpdmF0b3IgZ2V0RGVmYXVsdCgpIHsKKwkJcmV0dXJuIHBsdWdpbjsKKwl9CisJCisJLyoqCisJICogTG9nIGFuIGVycm9yIHRvIHRoZSBJTG9nIGZvciB0aGlzIHBsdWdpbgorCSAqIAorCSAqIEBwYXJhbSBtZXNzYWdlCisJICogICAgICAgICAgICB0aGUgbG9jYWxpemVkIGVycm9yIG1lc3NhZ2UgdGV4dAorCSAqIEBwYXJhbSBleGNlcHRpb24KKwkgKiAgICAgICAgICAgIHRoZSBhc3NvY2lhdGVkIGV4Y2VwdGlvbiwgb3IgbnVsbAorCSAqLworCXB1YmxpYyBzdGF0aWMgdm9pZCBsb2dFcnJvcihTdHJpbmcgbWVzc2FnZSwgVGhyb3dhYmxlIGV4Y2VwdGlvbikgeworCQkvLyBEbyB3ZSBoYXZlIGEgcGx1Z2luPworCQlpZiAocGx1Z2luICE9IG51bGwpIHsKKwkJCS8vIFllcworCQkJcGx1Z2luLmdldExvZygpLmxvZygKKwkJCQkJbmV3IFN0YXR1cyhJU3RhdHVzLkVSUk9SLCBwbHVnaW4uZ2V0QnVuZGxlKCkuZ2V0U3ltYm9saWNOYW1lKCksCisJCQkJCQkJMCwgbWVzc2FnZSwgZXhjZXB0aW9uKSk7CisJCX0KKwkJZWxzZSB7CisJCQkvLyBObworCQkJU3lzdGVtLm91dC5wcmludGxuKG1lc3NhZ2UpOworCQkJLy8gRXhjZXB0aW9uPworCQkJaWYgKGV4Y2VwdGlvbiAhPSBudWxsKSB7CisJCQkJLy8gWWVzCisJCQkJU3lzdGVtLm91dC5wcmludGxuKGV4Y2VwdGlvbi5nZXRNZXNzYWdlKCkpOworCQkJfSAvLyBpZiAKKwkJfQorCX0gLy8gbG9nRXJyb3IKKworCS8qKgorCSAqIExvZyBpbmZvcm1hdGlvbiB0byB0aGUgSUxvZyBmb3IgdGhpcyBwbHVnaW4KKwkgKiAKKwkgKiBAcGFyYW0gbWVzc2FnZQorCSAqICAgICAgICAgICAgdGhlIGxvY2FsaXplZCBpbmZvcm1hdGlvbiBtZXNzYWdlIHRleHQKKwkgKiBAcGFyYW0gZXhjZXB0aW9uCisJICogICAgICAgICAgICB0aGUgYXNzb2NpYXRlZCBleGNlcHRpb24sIG9yIG51bGwKKwkgKi8KKwlwdWJsaWMgc3RhdGljIHZvaWQgbG9nSW5mb3JtYXRpb24oU3RyaW5nIG1lc3NhZ2UsIFRocm93YWJsZSBleGNlcHRpb24pIHsKKwkJLy8gRG8gd2UgaGF2ZSBhIHBsdWdpbj8KKwkJaWYgKHBsdWdpbiAhPSBudWxsKSB7CisJCQkvLyBZZXMKKwkJCXBsdWdpbi5nZXRMb2coKS5sb2coCisJCQkJCW5ldyBTdGF0dXMoSVN0YXR1cy5JTkZPLCBwbHVnaW4uZ2V0QnVuZGxlKCkuZ2V0U3ltYm9saWNOYW1lKCksCisJCQkJCQkJMCwgbWVzc2FnZSwgZXhjZXB0aW9uKSk7CisJCX0KKwkJZWxzZSB7CisJCQkvLyBObworCQkJU3lzdGVtLm91dC5wcmludGxuKG1lc3NhZ2UpOworCQkJLy8gRXhjZXB0aW9uPworCQkJaWYgKGV4Y2VwdGlvbiAhPSBudWxsKSB7CisJCQkJLy8gWWVzCisJCQkJU3lzdGVtLm91dC5wcmludGxuKGV4Y2VwdGlvbi5nZXRNZXNzYWdlKCkpOworCQkJfSAvLyBpZiAKKwkJfQorCX0gLy8gbG9nSW5mb3JtYXRpb24KKwkKKwkKKwkvKioKKwkgKiBMb2cgaW5mb3JtYXRpb24gdG8gdGhlIElMb2cgZm9yIHRoaXMgcGx1Z2luCisJICogVGhlIG1ldGhvZCBpcyBvdmVybG9hZGVkIHRvIGFsbG93IGZvciBsb2dJbmZvcm1hdGlvbiB3aXRob3V0IGFuIGVycm9yIAorCSAqIG1ldGhvZCBzZXRzIHRoZSBlcnJvciB0byBudWxsLiBUaGlzIHNob3VsZCBiZSB1c2VkIGluc3RlYWQgb2YgU3lzdGVtLm91dC5wcmludGxuCisJICogdGhyb3VnaG91dCB0aGUgY29kZS4KKwkgKiBAcGFyYW0gbWVzc2FnZQorCSAqICAgICAgICAgICAgdGhlIGxvY2FsaXplZCBpbmZvcm1hdGlvbiBtZXNzYWdlIHRleHQKKwkgKgorCSAqLworCXB1YmxpYyBzdGF0aWMgdm9pZCBsb2dJbmZvcm1hdGlvbihTdHJpbmcgbWVzc2FnZSkgeworCQkvLyBEbyB3ZSBoYXZlIGEgcGx1Z2luPworCQlpZiAocGx1Z2luICE9IG51bGwpIHsKKwkJCS8vIFllcworCQkJcGx1Z2luLmdldExvZygpLmxvZygKKwkJCQkJbmV3IFN0YXR1cyhJU3RhdHVzLklORk8sIHBsdWdpbi5nZXRCdW5kbGUoKS5nZXRTeW1ib2xpY05hbWUoKSwKKwkJCQkJCQkwLCBtZXNzYWdlLCBudWxsKSk7CisJCX0KKwkJZWxzZSB7CisJCQkvLyBObworCQkJU3lzdGVtLm91dC5wcmludGxuKG1lc3NhZ2UpOworCQl9CisJfSAvLyBsb2dJbmZvcm1hdGlvbgorCit9CmRpZmYgLS1naXQgYS9kaXN0cmlidXRlZC9vcmcuZWNsaXBzZS5zdGVtLmdyYXBoc3luY2hyb25pemVyL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2dyYXBoc3luY2hyb25pemVyL0JhZENvbmZpZ0ZpbGVFeGNlcHRpb24uamF2YSBiL2Rpc3RyaWJ1dGVkL29yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhzeW5jaHJvbml6ZXIvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZ3JhcGhzeW5jaHJvbml6ZXIvQmFkQ29uZmlnRmlsZUV4Y2VwdGlvbi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJkZTU1NmQKLS0tIC9kZXYvbnVsbAorKysgYi9kaXN0cmlidXRlZC9vcmcuZWNsaXBzZS5zdGVtLmdyYXBoc3luY2hyb25pemVyL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2dyYXBoc3luY2hyb25pemVyL0JhZENvbmZpZ0ZpbGVFeGNlcHRpb24uamF2YQpAQCAtMCwwICsxLDI5IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhzeW5jaHJvbml6ZXI7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTEgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioKKyAqIFRocm93biB3aGVuIGFuIGludmFsaWQgb3IgbWlzc2luZyB2YWx1ZSBpcyBmb3VuZCBpbiB0aGUgY29uZmlndXJhdGlvbiBmaWxlIG5vZGVjb25maWcucHJvcGVydGllcworICovCisKK3B1YmxpYyBjbGFzcyBCYWRDb25maWdGaWxlRXhjZXB0aW9uIGV4dGVuZHMgRXhjZXB0aW9uIHsKKworCXB1YmxpYyBCYWRDb25maWdGaWxlRXhjZXB0aW9uKFN0cmluZyBtZXNzYWdlKSB7CisJCXN1cGVyKG1lc3NhZ2UpOworCX0KKworCS8qKgorCSAqIEdlbmVyYXRlZCBhdXRvbWF0aWNhbGx5CisJICovCisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgbG9uZyBzZXJpYWxWZXJzaW9uVUlEID0gLTM3MDcyNjM1NzMwOTAyNzk2NjVMOworCit9CmRpZmYgLS1naXQgYS9kaXN0cmlidXRlZC9vcmcuZWNsaXBzZS5zdGVtLmdyYXBoc3luY2hyb25pemVyL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2dyYXBoc3luY2hyb25pemVyL0dyYXBoc3luY2hyb25pemVyRmFjdG9yeS5qYXZhIGIvZGlzdHJpYnV0ZWQvb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaHN5bmNocm9uaXplci9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9ncmFwaHN5bmNocm9uaXplci9HcmFwaHN5bmNocm9uaXplckZhY3RvcnkuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMDViMWRhCi0tLSAvZGV2L251bGwKKysrIGIvZGlzdHJpYnV0ZWQvb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaHN5bmNocm9uaXplci9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9ncmFwaHN5bmNocm9uaXplci9HcmFwaHN5bmNocm9uaXplckZhY3RvcnkuamF2YQpAQCAtMCwwICsxLDUyIEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhzeW5jaHJvbml6ZXI7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTEgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUZhY3Rvcnk7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIFRoZSA8Yj5GYWN0b3J5PC9iPiBmb3IgdGhlIG1vZGVsLgorICogSXQgcHJvdmlkZXMgYSBjcmVhdGUgbWV0aG9kIGZvciBlYWNoIG5vbi1hYnN0cmFjdCBjbGFzcyBvZiB0aGUgbW9kZWwuCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaHN5bmNocm9uaXplci5HcmFwaHN5bmNocm9uaXplclBhY2thZ2UKKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGludGVyZmFjZSBHcmFwaHN5bmNocm9uaXplckZhY3RvcnkgZXh0ZW5kcyBFRmFjdG9yeSB7CisJLyoqCisJICogVGhlIHNpbmdsZXRvbiBpbnN0YW5jZSBvZiB0aGUgZmFjdG9yeS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlHcmFwaHN5bmNocm9uaXplckZhY3RvcnkgZUlOU1RBTkNFID0gb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaHN5bmNocm9uaXplci5pbXBsLkdyYXBoc3luY2hyb25pemVyRmFjdG9yeUltcGwuaW5pdCgpOworCisJLyoqCisJICogUmV0dXJucyBhIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5TeW5jaCBHcmFwaCBQYXJ0aXRpb25lcjwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+U3luY2ggR3JhcGggUGFydGl0aW9uZXI8L2VtPicuCisJICogQGdlbmVyYXRlZAorCSAqLworCVN5bmNoR3JhcGhQYXJ0aXRpb25lciBjcmVhdGVTeW5jaEdyYXBoUGFydGl0aW9uZXIoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIHBhY2thZ2Ugc3VwcG9ydGVkIGJ5IHRoaXMgZmFjdG9yeS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIHBhY2thZ2Ugc3VwcG9ydGVkIGJ5IHRoaXMgZmFjdG9yeS4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJR3JhcGhzeW5jaHJvbml6ZXJQYWNrYWdlIGdldEdyYXBoc3luY2hyb25pemVyUGFja2FnZSgpOworCit9IC8vR3JhcGhzeW5jaHJvbml6ZXJGYWN0b3J5CmRpZmYgLS1naXQgYS9kaXN0cmlidXRlZC9vcmcuZWNsaXBzZS5zdGVtLmdyYXBoc3luY2hyb25pemVyL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2dyYXBoc3luY2hyb25pemVyL0dyYXBoc3luY2hyb25pemVyUGFja2FnZS5qYXZhIGIvZGlzdHJpYnV0ZWQvb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaHN5bmNocm9uaXplci9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9ncmFwaHN5bmNocm9uaXplci9HcmFwaHN5bmNocm9uaXplclBhY2thZ2UuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNDk4YTVlCi0tLSAvZGV2L251bGwKKysrIGIvZGlzdHJpYnV0ZWQvb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaHN5bmNocm9uaXplci9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9ncmFwaHN5bmNocm9uaXplci9HcmFwaHN5bmNocm9uaXplclBhY2thZ2UuamF2YQpAQCAtMCwwICsxLDE5NiBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmdyYXBoc3luY2hyb25pemVyOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDExIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUF0dHJpYnV0ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguR3JhcGhQYWNrYWdlOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiBUaGUgPGI+UGFja2FnZTwvYj4gZm9yIHRoZSBtb2RlbC4KKyAqIEl0IGNvbnRhaW5zIGFjY2Vzc29ycyBmb3IgdGhlIG1ldGEgb2JqZWN0cyB0byByZXByZXNlbnQKKyAqIDx1bD4KKyAqICAgPGxpPmVhY2ggY2xhc3MsPC9saT4KKyAqICAgPGxpPmVhY2ggZmVhdHVyZSBvZiBlYWNoIGNsYXNzLDwvbGk+CisgKiAgIDxsaT5lYWNoIGVudW0sPC9saT4KKyAqICAgPGxpPmFuZCBlYWNoIGRhdGEgdHlwZTwvbGk+CisgKiA8L3VsPgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhzeW5jaHJvbml6ZXIuR3JhcGhzeW5jaHJvbml6ZXJGYWN0b3J5CisgKiBAbW9kZWwga2luZD0icGFja2FnZSIKKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGludGVyZmFjZSBHcmFwaHN5bmNocm9uaXplclBhY2thZ2UgZXh0ZW5kcyBFUGFja2FnZSB7CisJLyoqCisJICogVGhlIHBhY2thZ2UgbmFtZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlTdHJpbmcgZU5BTUUgPSAiZ3JhcGhzeW5jaHJvbml6ZXIiOworCisJLyoqCisJICogVGhlIHBhY2thZ2UgbmFtZXNwYWNlIFVSSS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlTdHJpbmcgZU5TX1VSSSA9ICJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vZ3JhcGhzeW5jaHJvbml6ZXIvZ3JhcGhzeW5jaHJvbml6ZXIuZWNvcmUiOworCisJLyoqCisJICogVGhlIHBhY2thZ2UgbmFtZXNwYWNlIG5hbWUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJU3RyaW5nIGVOU19QUkVGSVggPSAib3JnLmVjbGlwc2Uuc3RlbS5ncmFwaHN5bmNocm9uaXplciI7CisKKwkvKioKKwkgKiBUaGUgc2luZ2xldG9uIGluc3RhbmNlIG9mIHRoZSBwYWNrYWdlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUdyYXBoc3luY2hyb25pemVyUGFja2FnZSBlSU5TVEFOQ0UgPSBvcmcuZWNsaXBzZS5zdGVtLmdyYXBoc3luY2hyb25pemVyLmltcGwuR3JhcGhzeW5jaHJvbml6ZXJQYWNrYWdlSW1wbC5pbml0KCk7CisKKwkvKioKKwkgKiBUaGUgbWV0YSBvYmplY3QgaWQgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhzeW5jaHJvbml6ZXIuaW1wbC5TeW5jaEdyYXBoUGFydGl0aW9uZXJJbXBsIDxlbT5TeW5jaCBHcmFwaCBQYXJ0aXRpb25lcjwvZW0+fScgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhzeW5jaHJvbml6ZXIuaW1wbC5TeW5jaEdyYXBoUGFydGl0aW9uZXJJbXBsCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmdyYXBoc3luY2hyb25pemVyLmltcGwuR3JhcGhzeW5jaHJvbml6ZXJQYWNrYWdlSW1wbCNnZXRTeW5jaEdyYXBoUGFydGl0aW9uZXIoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlpbnQgU1lOQ0hfR1JBUEhfUEFSVElUSU9ORVIgPSAwOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPk51bSBQcm9jZXNzZXM8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTWU5DSF9HUkFQSF9QQVJUSVRJT05FUl9fTlVNX1BST0NFU1NFUyA9IEdyYXBoUGFja2FnZS5HUkFQSF9QQVJUSVRJT05FUl9fTlVNX1BST0NFU1NFUzsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5OdW0gTm9kZXM8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTWU5DSF9HUkFQSF9QQVJUSVRJT05FUl9fTlVNX05PREVTID0gR3JhcGhQYWNrYWdlLkdSQVBIX1BBUlRJVElPTkVSX0ZFQVRVUkVfQ09VTlQgKyAwOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPk5vZGUgUmFuazwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNZTkNIX0dSQVBIX1BBUlRJVElPTkVSX19OT0RFX1JBTksgPSBHcmFwaFBhY2thZ2UuR1JBUEhfUEFSVElUSU9ORVJfRkVBVFVSRV9DT1VOVCArIDE7CisKKwkvKioKKwkgKiBUaGUgbnVtYmVyIG9mIHN0cnVjdHVyYWwgZmVhdHVyZXMgb2YgdGhlICc8ZW0+U3luY2ggR3JhcGggUGFydGl0aW9uZXI8L2VtPicgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU1lOQ0hfR1JBUEhfUEFSVElUSU9ORVJfRkVBVFVSRV9DT1VOVCA9IEdyYXBoUGFja2FnZS5HUkFQSF9QQVJUSVRJT05FUl9GRUFUVVJFX0NPVU5UICsgMjsKKworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaHN5bmNocm9uaXplci5TeW5jaEdyYXBoUGFydGl0aW9uZXIgPGVtPlN5bmNoIEdyYXBoIFBhcnRpdGlvbmVyPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAnPGVtPlN5bmNoIEdyYXBoIFBhcnRpdGlvbmVyPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaHN5bmNocm9uaXplci5TeW5jaEdyYXBoUGFydGl0aW9uZXIKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUNsYXNzIGdldFN5bmNoR3JhcGhQYXJ0aXRpb25lcigpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmdyYXBoc3luY2hyb25pemVyLlN5bmNoR3JhcGhQYXJ0aXRpb25lciNnZXROdW1Ob2RlcyA8ZW0+TnVtIE5vZGVzPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+TnVtIE5vZGVzPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaHN5bmNocm9uaXplci5TeW5jaEdyYXBoUGFydGl0aW9uZXIjZ2V0TnVtTm9kZXMoKQorCSAqIEBzZWUgI2dldFN5bmNoR3JhcGhQYXJ0aXRpb25lcigpCisJICogQGdlbmVyYXRlZAorCSAqLworCUVBdHRyaWJ1dGUgZ2V0U3luY2hHcmFwaFBhcnRpdGlvbmVyX051bU5vZGVzKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhzeW5jaHJvbml6ZXIuU3luY2hHcmFwaFBhcnRpdGlvbmVyI2dldE5vZGVSYW5rIDxlbT5Ob2RlIFJhbms8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxlbT5Ob2RlIFJhbms8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmdyYXBoc3luY2hyb25pemVyLlN5bmNoR3JhcGhQYXJ0aXRpb25lciNnZXROb2RlUmFuaygpCisJICogQHNlZSAjZ2V0U3luY2hHcmFwaFBhcnRpdGlvbmVyKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUF0dHJpYnV0ZSBnZXRTeW5jaEdyYXBoUGFydGl0aW9uZXJfTm9kZVJhbmsoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIGZhY3RvcnkgdGhhdCBjcmVhdGVzIHRoZSBpbnN0YW5jZXMgb2YgdGhlIG1vZGVsLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgZmFjdG9yeSB0aGF0IGNyZWF0ZXMgdGhlIGluc3RhbmNlcyBvZiB0aGUgbW9kZWwuCisJICogQGdlbmVyYXRlZAorCSAqLworCUdyYXBoc3luY2hyb25pemVyRmFjdG9yeSBnZXRHcmFwaHN5bmNocm9uaXplckZhY3RvcnkoKTsKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogRGVmaW5lcyBsaXRlcmFscyBmb3IgdGhlIG1ldGEgb2JqZWN0cyB0aGF0IHJlcHJlc2VudAorCSAqIDx1bD4KKwkgKiAgIDxsaT5lYWNoIGNsYXNzLDwvbGk+CisJICogICA8bGk+ZWFjaCBmZWF0dXJlIG9mIGVhY2ggY2xhc3MsPC9saT4KKwkgKiAgIDxsaT5lYWNoIGVudW0sPC9saT4KKwkgKiAgIDxsaT5hbmQgZWFjaCBkYXRhIHR5cGU8L2xpPgorCSAqIDwvdWw+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCWludGVyZmFjZSBMaXRlcmFscyB7CisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaHN5bmNocm9uaXplci5pbXBsLlN5bmNoR3JhcGhQYXJ0aXRpb25lckltcGwgPGVtPlN5bmNoIEdyYXBoIFBhcnRpdGlvbmVyPC9lbT59JyBjbGFzcy4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaHN5bmNocm9uaXplci5pbXBsLlN5bmNoR3JhcGhQYXJ0aXRpb25lckltcGwKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmdyYXBoc3luY2hyb25pemVyLmltcGwuR3JhcGhzeW5jaHJvbml6ZXJQYWNrYWdlSW1wbCNnZXRTeW5jaEdyYXBoUGFydGl0aW9uZXIoKQorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQ2xhc3MgU1lOQ0hfR1JBUEhfUEFSVElUSU9ORVIgPSBlSU5TVEFOQ0UuZ2V0U3luY2hHcmFwaFBhcnRpdGlvbmVyKCk7CisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+TnVtIE5vZGVzPC9iPjwvZW0+JyBhdHRyaWJ1dGUgZmVhdHVyZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVBdHRyaWJ1dGUgU1lOQ0hfR1JBUEhfUEFSVElUSU9ORVJfX05VTV9OT0RFUyA9IGVJTlNUQU5DRS5nZXRTeW5jaEdyYXBoUGFydGl0aW9uZXJfTnVtTm9kZXMoKTsKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5Ob2RlIFJhbms8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUF0dHJpYnV0ZSBTWU5DSF9HUkFQSF9QQVJUSVRJT05FUl9fTk9ERV9SQU5LID0gZUlOU1RBTkNFLmdldFN5bmNoR3JhcGhQYXJ0aXRpb25lcl9Ob2RlUmFuaygpOworCisJfQorCit9IC8vR3JhcGhzeW5jaHJvbml6ZXJQYWNrYWdlCmRpZmYgLS1naXQgYS9kaXN0cmlidXRlZC9vcmcuZWNsaXBzZS5zdGVtLmdyYXBoc3luY2hyb25pemVyL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2dyYXBoc3luY2hyb25pemVyL01lc3Nlbmdlci5qYXZhIGIvZGlzdHJpYnV0ZWQvb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaHN5bmNocm9uaXplci9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9ncmFwaHN5bmNocm9uaXplci9NZXNzZW5nZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43Nzk2Y2I5Ci0tLSAvZGV2L251bGwKKysrIGIvZGlzdHJpYnV0ZWQvb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaHN5bmNocm9uaXplci9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9ncmFwaHN5bmNocm9uaXplci9NZXNzZW5nZXIuamF2YQpAQCAtMCwwICsxLDczIEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhzeW5jaHJvbml6ZXI7CisKK2ltcG9ydCBqYXZhLnV0aWwuUHJvcGVydGllczsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAxMSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworLyoqCisgKiBUaGlzIGludGVyZmFjZSBpcyBpbXBsZW1lbnRlZCBieSBhbnkgY2xhc3MgcHJvdmlkaW5nIG1lc3NhZ2luZyBmdW5jdGlvbmFsaXR5IHVzZWQgYnkgU1RFTQorICogd2hlbiBzeW5jaHJvbml6aW5nIGdyYXBocyBiZXR3ZWVuIHJ1bm5pbmcgU1RFTSBpbnN0YW5jZXMuIFRoZSBhY3R1YWwgbWVzc2VuZ2VyIHVzZWQgYXQKKyAqIHJ1bnRpbWUgaXMgY29uZmlndXJlZCBpbiB0aGUgbm9kZWNvbmZpZy5wcm9wZXJ0aWVzIGZpbGUuIEl0IHNob3VsZCBiZSByZWxhdGl2ZWx5IHN0cmFpZ2h0Zm9yd2FyZAorICogdG8gaW1wbGVtZW50IGEgTWVzc2VuZ2VyIGZvciBhbnkgc3BlY2lhbCBoYXJkd2FyZSBhdmFpbGFibGUsIGUuZy4gdXNpbmcgYSBuYXRpdmUgT3Blbk1QSSAKKyAqIGltcGxlbWVudGF0aW9uLiAKKyAqLworcHVibGljIGludGVyZmFjZSBNZXNzZW5nZXIgeworCQorCS8qKgorCSAqIEluaXRpYWxpemUgdGhlIG1lc3Nlbmdlci4gQ29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzIGFyZSBwYXNzZWQgaW4gdGhlIHByb3BlcnRpZXMgaW5wdXQKKwkgKiAKKwkgKiBAcGFyYW0gcCBDb25maWd1cmF0aW9uIHBhcmFtZXRlcnMKKwkgKi8KKwkKKwlwdWJsaWMgdm9pZCBpbml0aWFsaXplKFByb3BlcnRpZXMgcCkgdGhyb3dzIE1lc3NlbmdlckV4Y2VwdGlvbjsKKwkKKwkvKioKKwkgKiBUaGUgc3RhcnQgbWV0aG9kIG1ha2VzIHRoZSBtZXNzZW5nZXIgcmVhZHkgCisJICogZm9yIHNlbmRpbmcgYW5kIHJlY2VpdmluZyBtZXNzYWdlcy4KKwkgKi8KKwkKKwlwdWJsaWMgdm9pZCBzdGFydCgpIHRocm93cyBNZXNzZW5nZXJFeGNlcHRpb247CisKKwkvKioKKwkgKiBTdG9wIHRoZSBtZXNzZW5nZXIuIFRoZSBtZXRob2QgaXMgY2FsbGVkIHdoZW4gU1RFTSBzaHV0cyBkb3duCisJICovCisJCisJcHVibGljIHZvaWQgc3RvcCgpIHRocm93cyBNZXNzZW5nZXJFeGNlcHRpb247CisKKwkvKioKKwkgKiBTZW5kIGEgbWVzc2FnZSB0byBub2RlIG4KKwkgKiAKKwkgKiBAcGFyYW0gbXNnIFRoZSBtZXNzYWdlCisJICogQHBhcmFtIG4gVGhlIHJhbmsgb2YgdGhlIG5vZGUgdG8gc2VuZCB0aGUgbWVzc2FnZSB0bworCSAqLworCQorCXB1YmxpYyB2b2lkIHNlbmRNc2coYnl0ZSBbXSBtc2csIGludCBuKSB0aHJvd3MgTWVzc2VuZ2VyRXhjZXB0aW9uOworCQorCS8qKgorCSAqIFJlY2VpdmUgYSBtZXNzYWdlIGZyb20gbm9kZSBuLiBUaGUgbWV0aG9kIGlzIGV4cGVjdGVkIHRvIGJsb2NrIHVudGlsCisJICogdGhlIG1lc3NhZ2UgaXMgYXZhaWxhYmxlCisJICogCisJICogQHBhcmFtIG4gVGhlIG5vZGUgcmFuaworCSAqIEByZXR1cm4gU3RyaW5nIHRoZSBtZXNzYWdlCisJICovCisJCisJcHVibGljIGJ5dGUgW10gcmVjdk1zZyhpbnQgbikgIHRocm93cyBNZXNzZW5nZXJFeGNlcHRpb247CisJCisJLyoqCisJICogd2FrZXVwQmxvY2tlZFJlY3YuIFRoZSBtZXRob2Qgd2FrZXMgdXAgYW55IGJsb2NrZWQgcmVjZWl2ZXJzLiBJdCBpcworCSAqIGNhbGxlZCBiZWZvcmUgU1RFTSBzaHV0cyBkb3duIGFuZCBhbHNvIHdoZW4gYSB1c2VyIHN0b3BzIGEgc2ltdWxhdGlvbgorCSAqLworCQorCXB1YmxpYyB2b2lkIHdha2V1cEJsb2NrZWRSZWN2KCkgdGhyb3dzIE1lc3NlbmdlckV4Y2VwdGlvbjsKKwkKK30KZGlmZiAtLWdpdCBhL2Rpc3RyaWJ1dGVkL29yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhzeW5jaHJvbml6ZXIvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZ3JhcGhzeW5jaHJvbml6ZXIvTWVzc2VuZ2VyRXhjZXB0aW9uLmphdmEgYi9kaXN0cmlidXRlZC9vcmcuZWNsaXBzZS5zdGVtLmdyYXBoc3luY2hyb25pemVyL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2dyYXBoc3luY2hyb25pemVyL01lc3NlbmdlckV4Y2VwdGlvbi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc5YmQyOWMKLS0tIC9kZXYvbnVsbAorKysgYi9kaXN0cmlidXRlZC9vcmcuZWNsaXBzZS5zdGVtLmdyYXBoc3luY2hyb25pemVyL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2dyYXBoc3luY2hyb25pemVyL01lc3NlbmdlckV4Y2VwdGlvbi5qYXZhCkBAIC0wLDAgKzEsMzMgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaHN5bmNocm9uaXplcjsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAxMSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKgorICogVGhyb3duIHdoZW4gYSBwcm9ibGVtIHdpdGggdGhlIHVuZGVybHlpbmcgbWVzc2VuZ2VyIGlzIGRldGVjdGVkLiBUaGUgY2F1c2UKKyAqIG9mIHRoZSBleGNlcHRpb24gaXMgaW1wbGVtZW50YXRpb24gZGVwZW5kZW50LgorICovCitwdWJsaWMgY2xhc3MgTWVzc2VuZ2VyRXhjZXB0aW9uIGV4dGVuZHMgRXhjZXB0aW9uIHsKKworCS8qKgorCSAqIAorCSAqLworCXByaXZhdGUgc3RhdGljIGZpbmFsIGxvbmcgc2VyaWFsVmVyc2lvblVJRCA9IDcxMjM2ODc4ODg3NDc5ODE3NTdMOworCisJcHVibGljIE1lc3NlbmdlckV4Y2VwdGlvbihTdHJpbmcgbXNnKSB7CisJCXN1cGVyKG1zZyk7CisJfQorCisJcHVibGljIE1lc3NlbmdlckV4Y2VwdGlvbihTdHJpbmcgbXNnLCBFeGNlcHRpb24gZSkgeworCQlzdXBlcihtc2csIGUpOworCX0KKworfQpkaWZmIC0tZ2l0IGEvZGlzdHJpYnV0ZWQvb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaHN5bmNocm9uaXplci9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9ncmFwaHN5bmNocm9uaXplci9TaW11bGF0aW9uTWFuYWdlckRlbGVnYXRlLmphdmEgYi9kaXN0cmlidXRlZC9vcmcuZWNsaXBzZS5zdGVtLmdyYXBoc3luY2hyb25pemVyL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2dyYXBoc3luY2hyb25pemVyL1NpbXVsYXRpb25NYW5hZ2VyRGVsZWdhdGUuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMTZmZmU1Ci0tLSAvZGV2L251bGwKKysrIGIvZGlzdHJpYnV0ZWQvb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaHN5bmNocm9uaXplci9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9ncmFwaHN5bmNocm9uaXplci9TaW11bGF0aW9uTWFuYWdlckRlbGVnYXRlLmphdmEKQEAgLTAsMCArMSw3MSBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmdyYXBoc3luY2hyb25pemVyOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDExIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCitpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhzeW5jaHJvbml6ZXIuaW1wbC5TaW11bGF0aW9uR3JhcGhTeW5jaHJvbml6ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5qb2JzLnNpbXVsYXRpb24uSVNpbXVsYXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5qb2JzLnNpbXVsYXRpb24uSVNpbXVsYXRpb25NYW5hZ2VyTGlzdGVuZXJTeW5jOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uam9icy5zaW11bGF0aW9uLlNpbXVsYXRpb25NYW5hZ2VyRXZlbnQ7CisKKy8qKgorICogVGhpcyBjbGFzcyByZWdpc3RlcmVzIHdpdGggdGhlIFNpbXVsYXRpb25NYW5hZ2VyIGFuZCBpcyBub3RpZmllZCB3aGVuZXZlciBhIG5ldyBzaW11bGF0aW9uIGlzIHN0YXJ0ZWQKKyAqIG9yIHN0b3BwZWQuIEl0IGluc3RhbnRpYXRlcyBhIG5ldyBHcmFwaFN5bmNocm9uaXplciB0aGF0IHdpbGwgc3luY2hyb25pemVyIHRoZSBydW5uaW5nIHNpbXVsYXRpb24KKyAqIHdpdGggb3RoZXIgcnVubmluZyBTVEVNIGluc3RhbmNlcy4KKyAqIAorICovCitwdWJsaWMgY2xhc3MgU2ltdWxhdGlvbk1hbmFnZXJEZWxlZ2F0ZSBpbXBsZW1lbnRzIElTaW11bGF0aW9uTWFuYWdlckxpc3RlbmVyU3luYyB7CisKKwlwcml2YXRlIEFycmF5TGlzdDxTaW11bGF0aW9uR3JhcGhTeW5jaHJvbml6ZXI+IHN5bmNocm9uaXplcnMgPSBuZXcgQXJyYXlMaXN0PFNpbXVsYXRpb25HcmFwaFN5bmNocm9uaXplcj4oKTsKKwkKKwlwdWJsaWMgdm9pZCBzaW11bGF0aW9uc0NoYW5nZWRTeW5jKFNpbXVsYXRpb25NYW5hZ2VyRXZlbnQgZXZlbnQpIHsKKwkJQWN0aXZhdG9yLmxvZ0luZm9ybWF0aW9uKCJTaW11bGF0aW9uIENoYW5nZWQgIitldmVudCk7CisJCUlTaW11bGF0aW9uIFtdIHNpbXNBZGRlZCA9IGV2ZW50LmdldFNpbXVsYXRpb25zQWRkZWQoKTsKKwkJSVNpbXVsYXRpb24gW10gc2ltc1JlbW92ZWQgPSBldmVudC5nZXRTaW11bGF0aW9uc1JlbW92ZWQoKTsKKwkJCisJCWlmKHNpbXNBZGRlZCAhPSBudWxsICYmIHNpbXNBZGRlZC5sZW5ndGggPiAwKSB7CisJCQlmb3IoaW50IGk9MDtpPHNpbXNBZGRlZC5sZW5ndGg7KytpKSB7CisJCQkJU2ltdWxhdGlvbkdyYXBoU3luY2hyb25pemVyIG5ld1N5bmMgPSBuZXcgU2ltdWxhdGlvbkdyYXBoU3luY2hyb25pemVyKHNpbXNBZGRlZFtpXSk7CisJCQkJc3luY2hyb25pemVycy5hZGQobmV3U3luYyk7CisJCQkJCisJCQkJCisJCQkJLy8gTUFEIDIwLUp1bmUtMjAxMQorCQkJCS8vIFJlbW92aW5nIFNpbXVsYXRpb24gQWRhcHRlcgorCQkJCS8vIFdlIG5lZWQgdG8gd29yayBhcm91bmQgdGhlIHVnbHkgc2ltdWxhdGlvbiBjYWxsYmFja3MgdGhhdCBhcmUgZm9yY2VkIGJ5IHRoZQorCQkJCS8vIHNpbXVsYXRpb24gbWFuYWdlci4gQWxsIGNhbGxiYWNrcyBnb2VzIHZpYSB0aGUgc2ltdWxhdGlvbiBtYW5hZ2VyIGFuZCBmb3JjZXMgCisJCQkJLy8gdGhlIFVJIHRocmVhZCB0byBiZSB1c2VkLiBXZSBkb24ndCB3YW50IHRvIHVzZSB0aGUgVUkgdGhyZWFkIHNvIHdlJ2xsIHJlZ2lzdGVyIGRpcmVjdGx5IHdpdGggdGhlIAorCQkJCS8vIHNpbXVsYXRpb24KKwkJCQkvL1NpbXVsYXRpb25NYW5hZ2VyLlNpbXVsYXRpb25BZGFwdGVyIGFkYXB0ZWRTaW0gPSAoU2ltdWxhdGlvbk1hbmFnZXIuU2ltdWxhdGlvbkFkYXB0ZXIpc2ltc0FkZGVkW2ldOwkJCQorCQkJCS8vYWRhcHRlZFNpbS5nZXRTaW11bGF0aW9uKCkuYWRkU2ltdWxhdGlvbkxpc3RlbmVyU3luYyhuZXdTeW5jKTsKKwkJCQkKKwkJCQlzaW1zQWRkZWRbaV0uYWRkU2ltdWxhdGlvbkxpc3RlbmVyU3luYyhuZXdTeW5jLCB0cnVlKTsKKwkJCQkKKwkJCX0KKwkJfQorCQkKKwkJQXJyYXlMaXN0PFNpbXVsYXRpb25HcmFwaFN5bmNocm9uaXplcj4gcmVtb3ZlICA9IG5ldyBBcnJheUxpc3Q8U2ltdWxhdGlvbkdyYXBoU3luY2hyb25pemVyPigpOworCQlpZihzaW1zUmVtb3ZlZCAhPSBudWxsICYmIHNpbXNSZW1vdmVkLmxlbmd0aCA+IDApIHsKKwkJCWZvcihpbnQgaT0wO2k8c2ltc1JlbW92ZWQubGVuZ3RoOysraSkKKwkJCQlmb3IoaW50IGo9MDtqPHN5bmNocm9uaXplcnMuc2l6ZSgpOysraikgIHsKKwkJCQkJaWYoc3luY2hyb25pemVycy5nZXQoaikuZ2V0U2ltdWxhdGlvbigpLmVxdWFscyhzaW1zUmVtb3ZlZFtpXSkpIHsKKwkJCQkJCXJlbW92ZS5hZGQoc3luY2hyb25pemVycy5nZXQoaikpOworCQkJCQkJc2ltc1JlbW92ZWRbaV0ucmVtb3ZlU2ltdWxhdGlvbkxpc3RlbmVyU3luYyhzeW5jaHJvbml6ZXJzLmdldChqKSk7CisJCQkJCX0KKwkJCQl9CisJCQkKKwkJCWZvcihTaW11bGF0aW9uR3JhcGhTeW5jaHJvbml6ZXIgc2dzOnJlbW92ZSkKKwkJCQlzeW5jaHJvbml6ZXJzLnJlbW92ZShzZ3MpOworCQl9CisJfQorfQpkaWZmIC0tZ2l0IGEvZGlzdHJpYnV0ZWQvb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaHN5bmNocm9uaXplci9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9ncmFwaHN5bmNocm9uaXplci9TeW5jaEdyYXBoUGFydGl0aW9uZXIuamF2YSBiL2Rpc3RyaWJ1dGVkL29yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhzeW5jaHJvbml6ZXIvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZ3JhcGhzeW5jaHJvbml6ZXIvU3luY2hHcmFwaFBhcnRpdGlvbmVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmU2Y2Q4NAotLS0gL2Rldi9udWxsCisrKyBiL2Rpc3RyaWJ1dGVkL29yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhzeW5jaHJvbml6ZXIvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZ3JhcGhzeW5jaHJvbml6ZXIvU3luY2hHcmFwaFBhcnRpdGlvbmVyLmphdmEKQEAgLTAsMCArMSwxMDkgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaHN5bmNocm9uaXplcjsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAxMSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uSWRlbnRpZmlhYmxlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5HcmFwaFBhcnRpdGlvbmVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uam9icy5zaW11bGF0aW9uLklTaW11bGF0aW9uOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiBBIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5TeW5jaCBHcmFwaCBQYXJ0aXRpb25lcjwvYj48L2VtPicuIFRoZSBjbGFzcyBzdWJkaXZpZXMgYSBtb2RlbAorICogZ3JhcGggYW1vbmcgbXVsdGlwbGUgcnVubmluZyBpbnN0YW5jZXMgb2YgU1RFTSBhc3NpZ25pbmcgdG8gZWFjaCBpbnN0YW5jZSBhIHN1YmdyYXBoIChzZXQgb2Ygbm9kZXMpIHRvIAorICogd29yayBvbi4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICoKKyAqIDxwPgorICogVGhlIGZvbGxvd2luZyBmZWF0dXJlcyBhcmUgc3VwcG9ydGVkOgorICogPHVsPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhzeW5jaHJvbml6ZXIuU3luY2hHcmFwaFBhcnRpdGlvbmVyI2dldE51bU5vZGVzIDxlbT5OdW0gTm9kZXM8L2VtPn08L2xpPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhzeW5jaHJvbml6ZXIuU3luY2hHcmFwaFBhcnRpdGlvbmVyI2dldE5vZGVSYW5rIDxlbT5Ob2RlIFJhbms8L2VtPn08L2xpPgorICogPC91bD4KKyAqIDwvcD4KKyAqCisgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhzeW5jaHJvbml6ZXIuR3JhcGhzeW5jaHJvbml6ZXJQYWNrYWdlI2dldFN5bmNoR3JhcGhQYXJ0aXRpb25lcigpCisgKiBAbW9kZWwKKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGludGVyZmFjZSBTeW5jaEdyYXBoUGFydGl0aW9uZXIgZXh0ZW5kcyBHcmFwaFBhcnRpdGlvbmVyIHsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPk51bSBOb2RlczwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIGlzIDxjb2RlPiIxIjwvY29kZT4uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8cD4KKwkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5OdW0gTm9kZXM8L2VtPicgYXR0cmlidXRlIGlzbid0IGNsZWFyLAorCSAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4KKwkgKiA8L3A+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+TnVtIE5vZGVzPC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiBAc2VlICNzZXROdW1Ob2RlcyhpbnQpCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmdyYXBoc3luY2hyb25pemVyLkdyYXBoc3luY2hyb25pemVyUGFja2FnZSNnZXRTeW5jaEdyYXBoUGFydGl0aW9uZXJfTnVtTm9kZXMoKQorCSAqIEBtb2RlbCBkZWZhdWx0PSIxIgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlpbnQgZ2V0TnVtTm9kZXMoKTsKKworCS8qKgorCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhzeW5jaHJvbml6ZXIuU3luY2hHcmFwaFBhcnRpdGlvbmVyI2dldE51bU5vZGVzIDxlbT5OdW0gTm9kZXM8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPk51bSBOb2RlczwvZW0+JyBhdHRyaWJ1dGUuCisJICogQHNlZSAjZ2V0TnVtTm9kZXMoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwl2b2lkIHNldE51bU5vZGVzKGludCB2YWx1ZSk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5Ob2RlIFJhbms8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyA8Y29kZT4iMCI8L2NvZGU+LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPHA+CisJICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+Tm9kZSBSYW5rPC9lbT4nIGF0dHJpYnV0ZSBpc24ndCBjbGVhciwKKwkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uCisJICogPC9wPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPk5vZGUgUmFuazwvZW0+JyBhdHRyaWJ1dGUuCisJICogQHNlZSAjc2V0Tm9kZVJhbmsoaW50KQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaHN5bmNocm9uaXplci5HcmFwaHN5bmNocm9uaXplclBhY2thZ2UjZ2V0U3luY2hHcmFwaFBhcnRpdGlvbmVyX05vZGVSYW5rKCkKKwkgKiBAbW9kZWwgZGVmYXVsdD0iMCIKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJaW50IGdldE5vZGVSYW5rKCk7CisKKwkvKioKKwkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmdyYXBoc3luY2hyb25pemVyLlN5bmNoR3JhcGhQYXJ0aXRpb25lciNnZXROb2RlUmFuayA8ZW0+Tm9kZSBSYW5rPC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5Ob2RlIFJhbms8L2VtPicgYXR0cmlidXRlLgorCSAqIEBzZWUgI2dldE5vZGVSYW5rKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJdm9pZCBzZXROb2RlUmFuayhpbnQgdmFsdWUpOworCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAbW9kZWwKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJaW50IGdldElkZW50aWZpYWJsZVJhbmsoSWRlbnRpZmlhYmxlIGlkZW50aWZpYWJsZSk7CisJCisKKwkvKioKKwkgKiBpbml0aWFsaXplIHRoZSBwYXJ0aXRpb25lciBmcm9tIGEgc2ltdWxhdGlvbgorCSAqIAorCSAqIEBwYXJhbSBzIElTaW11bGF0aW9uCisJICovCisJcHVibGljIHZvaWQgaW5pdGlhbGl6ZShJU2ltdWxhdGlvbiBzKTsgCit9IC8vIFN5bmNoR3JhcGhQYXJ0aXRpb25lcgpkaWZmIC0tZ2l0IGEvZGlzdHJpYnV0ZWQvb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaHN5bmNocm9uaXplci9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9ncmFwaHN5bmNocm9uaXplci9pbXBsL0dyYXBoc3luY2hyb25pemVyRmFjdG9yeUltcGwuamF2YSBiL2Rpc3RyaWJ1dGVkL29yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhzeW5jaHJvbml6ZXIvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZ3JhcGhzeW5jaHJvbml6ZXIvaW1wbC9HcmFwaHN5bmNocm9uaXplckZhY3RvcnlJbXBsLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWFlMWVjYgotLS0gL2Rldi9udWxsCisrKyBiL2Rpc3RyaWJ1dGVkL29yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhzeW5jaHJvbml6ZXIvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZ3JhcGhzeW5jaHJvbml6ZXIvaW1wbC9HcmFwaHN5bmNocm9uaXplckZhY3RvcnlJbXBsLmphdmEKQEAgLTAsMCArMSwxMDMgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaHN5bmNocm9uaXplci5pbXBsOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDExIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3Q7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5pbXBsLkVGYWN0b3J5SW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUucGx1Z2luLkVjb3JlUGx1Z2luOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhzeW5jaHJvbml6ZXIuR3JhcGhzeW5jaHJvbml6ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhzeW5jaHJvbml6ZXIuR3JhcGhzeW5jaHJvbml6ZXJQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhzeW5jaHJvbml6ZXIuU3luY2hHcmFwaFBhcnRpdGlvbmVyOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiBBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgbW9kZWwgPGI+RmFjdG9yeTwvYj4uCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIEdyYXBoc3luY2hyb25pemVyRmFjdG9yeUltcGwgZXh0ZW5kcyBFRmFjdG9yeUltcGwgaW1wbGVtZW50cyBHcmFwaHN5bmNocm9uaXplckZhY3RvcnkgeworCS8qKgorCSAqIENyZWF0ZXMgdGhlIGRlZmF1bHQgZmFjdG9yeSBpbXBsZW1lbnRhdGlvbi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgc3RhdGljIEdyYXBoc3luY2hyb25pemVyRmFjdG9yeSBpbml0KCkgeworCQl0cnkgeworCQkJR3JhcGhzeW5jaHJvbml6ZXJGYWN0b3J5IHRoZUdyYXBoc3luY2hyb25pemVyRmFjdG9yeSA9IChHcmFwaHN5bmNocm9uaXplckZhY3RvcnkpRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RUZhY3RvcnkoImh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9ncmFwaHN5bmNocm9uaXplci9ncmFwaHN5bmNocm9uaXplci5lY29yZSIpOyAKKwkJCWlmICh0aGVHcmFwaHN5bmNocm9uaXplckZhY3RvcnkgIT0gbnVsbCkgeworCQkJCXJldHVybiB0aGVHcmFwaHN5bmNocm9uaXplckZhY3Rvcnk7CisJCQl9CisJCX0KKwkJY2F0Y2ggKEV4Y2VwdGlvbiBleGNlcHRpb24pIHsKKwkJCUVjb3JlUGx1Z2luLklOU1RBTkNFLmxvZyhleGNlcHRpb24pOworCQl9CisJCXJldHVybiBuZXcgR3JhcGhzeW5jaHJvbml6ZXJGYWN0b3J5SW1wbCgpOworCX0KKworCS8qKgorCSAqIENyZWF0ZXMgYW4gaW5zdGFuY2Ugb2YgdGhlIGZhY3RvcnkuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEdyYXBoc3luY2hyb25pemVyRmFjdG9yeUltcGwoKSB7CisJCXN1cGVyKCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIEVPYmplY3QgY3JlYXRlKEVDbGFzcyBlQ2xhc3MpIHsKKwkJc3dpdGNoIChlQ2xhc3MuZ2V0Q2xhc3NpZmllcklEKCkpIHsKKwkJCWNhc2UgR3JhcGhzeW5jaHJvbml6ZXJQYWNrYWdlLlNZTkNIX0dSQVBIX1BBUlRJVElPTkVSOiByZXR1cm4gY3JlYXRlU3luY2hHcmFwaFBhcnRpdGlvbmVyKCk7CisJCQlkZWZhdWx0OgorCQkJCXRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIlRoZSBjbGFzcyAnIiArIGVDbGFzcy5nZXROYW1lKCkgKyAiJyBpcyBub3QgYSB2YWxpZCBjbGFzc2lmaWVyIik7CisJCX0KKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgU3luY2hHcmFwaFBhcnRpdGlvbmVyIGNyZWF0ZVN5bmNoR3JhcGhQYXJ0aXRpb25lcigpIHsKKwkJU3luY2hHcmFwaFBhcnRpdGlvbmVySW1wbCBzeW5jaEdyYXBoUGFydGl0aW9uZXIgPSBuZXcgU3luY2hHcmFwaFBhcnRpdGlvbmVySW1wbCgpOworCQlyZXR1cm4gc3luY2hHcmFwaFBhcnRpdGlvbmVyOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBHcmFwaHN5bmNocm9uaXplclBhY2thZ2UgZ2V0R3JhcGhzeW5jaHJvbml6ZXJQYWNrYWdlKCkgeworCQlyZXR1cm4gKEdyYXBoc3luY2hyb25pemVyUGFja2FnZSlnZXRFUGFja2FnZSgpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGRlcHJlY2F0ZWQKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQERlcHJlY2F0ZWQKKwlwdWJsaWMgc3RhdGljIEdyYXBoc3luY2hyb25pemVyUGFja2FnZSBnZXRQYWNrYWdlKCkgeworCQlyZXR1cm4gR3JhcGhzeW5jaHJvbml6ZXJQYWNrYWdlLmVJTlNUQU5DRTsKKwl9CisKK30gLy9HcmFwaHN5bmNocm9uaXplckZhY3RvcnlJbXBsCmRpZmYgLS1naXQgYS9kaXN0cmlidXRlZC9vcmcuZWNsaXBzZS5zdGVtLmdyYXBoc3luY2hyb25pemVyL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2dyYXBoc3luY2hyb25pemVyL2ltcGwvR3JhcGhzeW5jaHJvbml6ZXJQYWNrYWdlSW1wbC5qYXZhIGIvZGlzdHJpYnV0ZWQvb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaHN5bmNocm9uaXplci9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9ncmFwaHN5bmNocm9uaXplci9pbXBsL0dyYXBoc3luY2hyb25pemVyUGFja2FnZUltcGwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNWY5ODgxCi0tLSAvZGV2L251bGwKKysrIGIvZGlzdHJpYnV0ZWQvb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaHN5bmNocm9uaXplci9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9ncmFwaHN5bmNocm9uaXplci9pbXBsL0dyYXBoc3luY2hyb25pemVyUGFja2FnZUltcGwuamF2YQpAQCAtMCwwICsxLDIyMiBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmdyYXBoc3luY2hyb25pemVyLmltcGw7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTEgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVBdHRyaWJ1dGU7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzczsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9wZXJhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRVBhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVjb3JlUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuaW1wbC5FUGFja2FnZUltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5Db21tb25QYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5HcmFwaFBhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLk1vZGVsUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuTW9kaWZpZXJQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zY2VuYXJpby5TY2VuYXJpb1BhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNlcXVlbmNlci5TZXF1ZW5jZXJQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zb2x2ZXIuU29sdmVyUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmdyYXBoc3luY2hyb25pemVyLkdyYXBoc3luY2hyb25pemVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmdyYXBoc3luY2hyb25pemVyLkdyYXBoc3luY2hyb25pemVyUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmdyYXBoc3luY2hyb25pemVyLlN5bmNoR3JhcGhQYXJ0aXRpb25lcjsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIG1vZGVsIDxiPlBhY2thZ2U8L2I+LgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBHcmFwaHN5bmNocm9uaXplclBhY2thZ2VJbXBsIGV4dGVuZHMgRVBhY2thZ2VJbXBsIGltcGxlbWVudHMgR3JhcGhzeW5jaHJvbml6ZXJQYWNrYWdlIHsKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcml2YXRlIEVDbGFzcyBzeW5jaEdyYXBoUGFydGl0aW9uZXJFQ2xhc3MgPSBudWxsOworCisJLyoqCisJICogQ3JlYXRlcyBhbiBpbnN0YW5jZSBvZiB0aGUgbW9kZWwgPGI+UGFja2FnZTwvYj4sIHJlZ2lzdGVyZWQgd2l0aAorCSAqIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRVBhY2thZ2UuUmVnaXN0cnkgRVBhY2thZ2UuUmVnaXN0cnl9IGJ5IHRoZSBwYWNrYWdlCisJICogcGFja2FnZSBVUkkgdmFsdWUuCisJICogPHA+Tm90ZTogdGhlIGNvcnJlY3Qgd2F5IHRvIGNyZWF0ZSB0aGUgcGFja2FnZSBpcyB2aWEgdGhlIHN0YXRpYworCSAqIGZhY3RvcnkgbWV0aG9kIHtAbGluayAjaW5pdCBpbml0KCl9LCB3aGljaCBhbHNvIHBlcmZvcm1zCisJICogaW5pdGlhbGl6YXRpb24gb2YgdGhlIHBhY2thZ2UsIG9yIHJldHVybnMgdGhlIHJlZ2lzdGVyZWQgcGFja2FnZSwKKwkgKiBpZiBvbmUgYWxyZWFkeSBleGlzdHMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FUGFja2FnZS5SZWdpc3RyeQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaHN5bmNocm9uaXplci5HcmFwaHN5bmNocm9uaXplclBhY2thZ2UjZU5TX1VSSQorCSAqIEBzZWUgI2luaXQoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcml2YXRlIEdyYXBoc3luY2hyb25pemVyUGFja2FnZUltcGwoKSB7CisJCXN1cGVyKGVOU19VUkksIEdyYXBoc3luY2hyb25pemVyRmFjdG9yeS5lSU5TVEFOQ0UpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByaXZhdGUgc3RhdGljIGJvb2xlYW4gaXNJbml0ZWQgPSBmYWxzZTsKKworCS8qKgorCSAqIENyZWF0ZXMsIHJlZ2lzdGVycywgYW5kIGluaXRpYWxpemVzIHRoZSA8Yj5QYWNrYWdlPC9iPiBmb3IgdGhpcyBtb2RlbCwgYW5kIGZvciBhbnkgb3RoZXJzIHVwb24gd2hpY2ggaXQgZGVwZW5kcy4KKwkgKiAKKwkgKiA8cD5UaGlzIG1ldGhvZCBpcyB1c2VkIHRvIGluaXRpYWxpemUge0BsaW5rIEdyYXBoc3luY2hyb25pemVyUGFja2FnZSNlSU5TVEFOQ0V9IHdoZW4gdGhhdCBmaWVsZCBpcyBhY2Nlc3NlZC4KKwkgKiBDbGllbnRzIHNob3VsZCBub3QgaW52b2tlIGl0IGRpcmVjdGx5LiBJbnN0ZWFkLCB0aGV5IHNob3VsZCBzaW1wbHkgYWNjZXNzIHRoYXQgZmllbGQgdG8gb2J0YWluIHRoZSBwYWNrYWdlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZU5TX1VSSQorCSAqIEBzZWUgI2NyZWF0ZVBhY2thZ2VDb250ZW50cygpCisJICogQHNlZSAjaW5pdGlhbGl6ZVBhY2thZ2VDb250ZW50cygpCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBzdGF0aWMgR3JhcGhzeW5jaHJvbml6ZXJQYWNrYWdlIGluaXQoKSB7CisJCWlmIChpc0luaXRlZCkgcmV0dXJuIChHcmFwaHN5bmNocm9uaXplclBhY2thZ2UpRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RVBhY2thZ2UoR3JhcGhzeW5jaHJvbml6ZXJQYWNrYWdlLmVOU19VUkkpOworCisJCS8vIE9idGFpbiBvciBjcmVhdGUgYW5kIHJlZ2lzdGVyIHBhY2thZ2UKKwkJR3JhcGhzeW5jaHJvbml6ZXJQYWNrYWdlSW1wbCB0aGVHcmFwaHN5bmNocm9uaXplclBhY2thZ2UgPSAoR3JhcGhzeW5jaHJvbml6ZXJQYWNrYWdlSW1wbCkoRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0KGVOU19VUkkpIGluc3RhbmNlb2YgR3JhcGhzeW5jaHJvbml6ZXJQYWNrYWdlSW1wbCA/IEVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldChlTlNfVVJJKSA6IG5ldyBHcmFwaHN5bmNocm9uaXplclBhY2thZ2VJbXBsKCkpOworCisJCWlzSW5pdGVkID0gdHJ1ZTsKKworCQkvLyBJbml0aWFsaXplIHNpbXBsZSBkZXBlbmRlbmNpZXMKKwkJQ29tbW9uUGFja2FnZS5lSU5TVEFOQ0UuZUNsYXNzKCk7CisJCUdyYXBoUGFja2FnZS5lSU5TVEFOQ0UuZUNsYXNzKCk7CisJCU1vZGVsUGFja2FnZS5lSU5TVEFOQ0UuZUNsYXNzKCk7CisJCU1vZGlmaWVyUGFja2FnZS5lSU5TVEFOQ0UuZUNsYXNzKCk7CisJCVNjZW5hcmlvUGFja2FnZS5lSU5TVEFOQ0UuZUNsYXNzKCk7CisJCVNlcXVlbmNlclBhY2thZ2UuZUlOU1RBTkNFLmVDbGFzcygpOworCQlTb2x2ZXJQYWNrYWdlLmVJTlNUQU5DRS5lQ2xhc3MoKTsKKworCQkvLyBDcmVhdGUgcGFja2FnZSBtZXRhLWRhdGEgb2JqZWN0cworCQl0aGVHcmFwaHN5bmNocm9uaXplclBhY2thZ2UuY3JlYXRlUGFja2FnZUNvbnRlbnRzKCk7CisKKwkJLy8gSW5pdGlhbGl6ZSBjcmVhdGVkIG1ldGEtZGF0YQorCQl0aGVHcmFwaHN5bmNocm9uaXplclBhY2thZ2UuaW5pdGlhbGl6ZVBhY2thZ2VDb250ZW50cygpOworCisJCS8vIE1hcmsgbWV0YS1kYXRhIHRvIGluZGljYXRlIGl0IGNhbid0IGJlIGNoYW5nZWQKKwkJdGhlR3JhcGhzeW5jaHJvbml6ZXJQYWNrYWdlLmZyZWV6ZSgpOworCisgIAorCQkvLyBVcGRhdGUgdGhlIHJlZ2lzdHJ5IGFuZCByZXR1cm4gdGhlIHBhY2thZ2UKKwkJRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UucHV0KEdyYXBoc3luY2hyb25pemVyUGFja2FnZS5lTlNfVVJJLCB0aGVHcmFwaHN5bmNocm9uaXplclBhY2thZ2UpOworCQlyZXR1cm4gdGhlR3JhcGhzeW5jaHJvbml6ZXJQYWNrYWdlOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQ2xhc3MgZ2V0U3luY2hHcmFwaFBhcnRpdGlvbmVyKCkgeworCQlyZXR1cm4gc3luY2hHcmFwaFBhcnRpdGlvbmVyRUNsYXNzOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQXR0cmlidXRlIGdldFN5bmNoR3JhcGhQYXJ0aXRpb25lcl9OdW1Ob2RlcygpIHsKKwkJcmV0dXJuIChFQXR0cmlidXRlKXN5bmNoR3JhcGhQYXJ0aXRpb25lckVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDApOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQXR0cmlidXRlIGdldFN5bmNoR3JhcGhQYXJ0aXRpb25lcl9Ob2RlUmFuaygpIHsKKwkJcmV0dXJuIChFQXR0cmlidXRlKXN5bmNoR3JhcGhQYXJ0aXRpb25lckVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDEpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBHcmFwaHN5bmNocm9uaXplckZhY3RvcnkgZ2V0R3JhcGhzeW5jaHJvbml6ZXJGYWN0b3J5KCkgeworCQlyZXR1cm4gKEdyYXBoc3luY2hyb25pemVyRmFjdG9yeSlnZXRFRmFjdG9yeUluc3RhbmNlKCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJpdmF0ZSBib29sZWFuIGlzQ3JlYXRlZCA9IGZhbHNlOworCisJLyoqCisJICogQ3JlYXRlcyB0aGUgbWV0YS1tb2RlbCBvYmplY3RzIGZvciB0aGUgcGFja2FnZS4gIFRoaXMgbWV0aG9kIGlzCisJICogZ3VhcmRlZCB0byBoYXZlIG5vIGFmZmVjdCBvbiBhbnkgaW52b2NhdGlvbiBidXQgaXRzIGZpcnN0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIGNyZWF0ZVBhY2thZ2VDb250ZW50cygpIHsKKwkJaWYgKGlzQ3JlYXRlZCkgcmV0dXJuOworCQlpc0NyZWF0ZWQgPSB0cnVlOworCisJCS8vIENyZWF0ZSBjbGFzc2VzIGFuZCB0aGVpciBmZWF0dXJlcworCQlzeW5jaEdyYXBoUGFydGl0aW9uZXJFQ2xhc3MgPSBjcmVhdGVFQ2xhc3MoU1lOQ0hfR1JBUEhfUEFSVElUSU9ORVIpOworCQljcmVhdGVFQXR0cmlidXRlKHN5bmNoR3JhcGhQYXJ0aXRpb25lckVDbGFzcywgU1lOQ0hfR1JBUEhfUEFSVElUSU9ORVJfX05VTV9OT0RFUyk7CisJCWNyZWF0ZUVBdHRyaWJ1dGUoc3luY2hHcmFwaFBhcnRpdGlvbmVyRUNsYXNzLCBTWU5DSF9HUkFQSF9QQVJUSVRJT05FUl9fTk9ERV9SQU5LKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcml2YXRlIGJvb2xlYW4gaXNJbml0aWFsaXplZCA9IGZhbHNlOworCisJLyoqCisJICogQ29tcGxldGUgdGhlIGluaXRpYWxpemF0aW9uIG9mIHRoZSBwYWNrYWdlIGFuZCBpdHMgbWV0YS1tb2RlbC4gIFRoaXMKKwkgKiBtZXRob2QgaXMgZ3VhcmRlZCB0byBoYXZlIG5vIGFmZmVjdCBvbiBhbnkgaW52b2NhdGlvbiBidXQgaXRzIGZpcnN0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIGluaXRpYWxpemVQYWNrYWdlQ29udGVudHMoKSB7CisJCWlmIChpc0luaXRpYWxpemVkKSByZXR1cm47CisJCWlzSW5pdGlhbGl6ZWQgPSB0cnVlOworCisJCS8vIEluaXRpYWxpemUgcGFja2FnZQorCQlzZXROYW1lKGVOQU1FKTsKKwkJc2V0TnNQcmVmaXgoZU5TX1BSRUZJWCk7CisJCXNldE5zVVJJKGVOU19VUkkpOworCisJCS8vIE9idGFpbiBvdGhlciBkZXBlbmRlbnQgcGFja2FnZXMKKwkJR3JhcGhQYWNrYWdlIHRoZUdyYXBoUGFja2FnZSA9IChHcmFwaFBhY2thZ2UpRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RVBhY2thZ2UoR3JhcGhQYWNrYWdlLmVOU19VUkkpOworCQlFY29yZVBhY2thZ2UgdGhlRWNvcmVQYWNrYWdlID0gKEVjb3JlUGFja2FnZSlFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShFY29yZVBhY2thZ2UuZU5TX1VSSSk7CisJCUNvbW1vblBhY2thZ2UgdGhlQ29tbW9uUGFja2FnZSA9IChDb21tb25QYWNrYWdlKUVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVQYWNrYWdlKENvbW1vblBhY2thZ2UuZU5TX1VSSSk7CisKKwkJLy8gQ3JlYXRlIHR5cGUgcGFyYW1ldGVycworCisJCS8vIFNldCBib3VuZHMgZm9yIHR5cGUgcGFyYW1ldGVycworCisJCS8vIEFkZCBzdXBlcnR5cGVzIHRvIGNsYXNzZXMKKwkJc3luY2hHcmFwaFBhcnRpdGlvbmVyRUNsYXNzLmdldEVTdXBlclR5cGVzKCkuYWRkKHRoZUdyYXBoUGFja2FnZS5nZXRHcmFwaFBhcnRpdGlvbmVyKCkpOworCisJCS8vIEluaXRpYWxpemUgY2xhc3NlcyBhbmQgZmVhdHVyZXM7IGFkZCBvcGVyYXRpb25zIGFuZCBwYXJhbWV0ZXJzCisJCWluaXRFQ2xhc3Moc3luY2hHcmFwaFBhcnRpdGlvbmVyRUNsYXNzLCBTeW5jaEdyYXBoUGFydGl0aW9uZXIuY2xhc3MsICJTeW5jaEdyYXBoUGFydGl0aW9uZXIiLCAhSVNfQUJTVFJBQ1QsICFJU19JTlRFUkZBQ0UsIElTX0dFTkVSQVRFRF9JTlNUQU5DRV9DTEFTUyk7CisJCWluaXRFQXR0cmlidXRlKGdldFN5bmNoR3JhcGhQYXJ0aXRpb25lcl9OdW1Ob2RlcygpLCB0aGVFY29yZVBhY2thZ2UuZ2V0RUludCgpLCAibnVtTm9kZXMiLCAiMSIsIDAsIDEsIFN5bmNoR3JhcGhQYXJ0aXRpb25lci5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsKKwkJaW5pdEVBdHRyaWJ1dGUoZ2V0U3luY2hHcmFwaFBhcnRpdGlvbmVyX05vZGVSYW5rKCksIHRoZUVjb3JlUGFja2FnZS5nZXRFSW50KCksICJub2RlUmFuayIsICIwIiwgMCwgMSwgU3luY2hHcmFwaFBhcnRpdGlvbmVyLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOworCisJCUVPcGVyYXRpb24gb3AgPSBhZGRFT3BlcmF0aW9uKHN5bmNoR3JhcGhQYXJ0aXRpb25lckVDbGFzcywgdGhlRWNvcmVQYWNrYWdlLmdldEVJbnQoKSwgImdldElkZW50aWZpYWJsZVJhbmsiLCAwLCAxLCBJU19VTklRVUUsIElTX09SREVSRUQpOworCQlhZGRFUGFyYW1ldGVyKG9wLCB0aGVDb21tb25QYWNrYWdlLmdldElkZW50aWZpYWJsZSgpLCAiaWRlbnRpZmlhYmxlIiwgMCwgMSwgSVNfVU5JUVVFLCBJU19PUkRFUkVEKTsKKworCQkvLyBDcmVhdGUgcmVzb3VyY2UKKwkJY3JlYXRlUmVzb3VyY2UoZU5TX1VSSSk7CisJfQorCit9IC8vR3JhcGhzeW5jaHJvbml6ZXJQYWNrYWdlSW1wbApkaWZmIC0tZ2l0IGEvZGlzdHJpYnV0ZWQvb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaHN5bmNocm9uaXplci9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9ncmFwaHN5bmNocm9uaXplci9pbXBsL05ldHdvcmtNZXNzZW5nZXIuamF2YSBiL2Rpc3RyaWJ1dGVkL29yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhzeW5jaHJvbml6ZXIvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZ3JhcGhzeW5jaHJvbml6ZXIvaW1wbC9OZXR3b3JrTWVzc2VuZ2VyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTM5YjM5OQotLS0gL2Rldi9udWxsCisrKyBiL2Rpc3RyaWJ1dGVkL29yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhzeW5jaHJvbml6ZXIvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZ3JhcGhzeW5jaHJvbml6ZXIvaW1wbC9OZXR3b3JrTWVzc2VuZ2VyLmphdmEKQEAgLTAsMCArMSwyMzIgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaHN5bmNocm9uaXplci5pbXBsOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDExIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqCisgKiBBIG1lc3NlbmdlciB0aGF0IHNlbmRzIGFuZCByZWNlaXZlcyBtZXNzYWdlcyBvdmVyIHRjcC9pcC4gU2luY2UgaXQncyBleHBlY3RlZCB0byBydW4KKyAqIGluc2lkZSBFY2xpcHNlIGl0J3MgdXNpbmcgSm9icyBpbnN0ZWFkIG9mIFRocmVhZHMuCisgKi8KKworaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247CitpbXBvcnQgamF2YS5pby5PYmplY3RJbnB1dFN0cmVhbTsKK2ltcG9ydCBqYXZhLmlvLk9iamVjdE91dHB1dFN0cmVhbTsKK2ltcG9ydCBqYXZhLm5ldC5JbmV0QWRkcmVzczsKK2ltcG9ydCBqYXZhLm5ldC5TZXJ2ZXJTb2NrZXQ7CitpbXBvcnQgamF2YS5uZXQuU29ja2V0OworaW1wb3J0IGphdmEubmV0LlNvY2tldEV4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLm5ldC5Vbmtub3duSG9zdEV4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLnV0aWwuUHJvcGVydGllczsKK2ltcG9ydCBqYXZhLnV0aWwuU3RyaW5nVG9rZW5pemVyOworaW1wb3J0IGphdmEudXRpbC5jb25jdXJyZW50LkJyb2tlbkJhcnJpZXJFeGNlcHRpb247CitpbXBvcnQgamF2YS51dGlsLmNvbmN1cnJlbnQuQ3ljbGljQmFycmllcjsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUHJvZ3Jlc3NNb25pdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TdGF0dXM7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLmpvYnMuSm9iOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhzeW5jaHJvbml6ZXIuTWVzc2VuZ2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhzeW5jaHJvbml6ZXIuTWVzc2VuZ2VyRXhjZXB0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uam9icy5BY3RpdmF0b3I7CisKK3B1YmxpYyBjbGFzcyBOZXR3b3JrTWVzc2VuZ2VyIGltcGxlbWVudHMgTWVzc2VuZ2VyIHsKKworCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFJFTU9URUhPU1RTS0VZID0gIlJFTU9URUhPU1RTIjsKKwlwdWJsaWMgc3RhdGljIFN0cmluZyBQT1JUS0VZID0gIlBPUlQiOworCXB1YmxpYyBzdGF0aWMgaW50IERFRkFVTFRfUE9SVCA9IDEyMTE7CisJCisJcHJpdmF0ZSBTdHJpbmcgW10gaG9zdHM7CisJcHJpdmF0ZSBieXRlIFtdW10gcmVjdk1lc3NhZ2VzOworCXByb3RlY3RlZCBJbmV0QWRkcmVzcyBbXSBob3N0QWRkcmVzc2VzOworCQorCXByaXZhdGUgaW50IGNvbV9wb3J0OyAKKworCXByb3RlY3RlZCBzdGF0aWMgSm9iIGFjY2VwdEpvYjsKKworCS8vIFVzZWQgdG8gYmxvY2sgdW50aWwgZGF0YSBpcyByZWNlaXZlZCBmcm9tIGEgaG9zdDsKKwlwcm90ZWN0ZWQgc3RhdGljIEN5Y2xpY0JhcnJpZXIgW10gZGF0YVJlY2VpdmVkQmFycmllcnM7CisKKwkvKioKKwkgKiBJbml0aWFsaXplIHRoZSBtZXNzZW5nZXIKKwkgKi8KKwkKKwlwdWJsaWMgdm9pZCBpbml0aWFsaXplKFByb3BlcnRpZXMgcCkgdGhyb3dzIE1lc3NlbmdlckV4Y2VwdGlvbiB7CisJCVN0cmluZyByZW1vdGVIb3N0cyA9IHAuZ2V0UHJvcGVydHkoUkVNT1RFSE9TVFNLRVkpOworCQlpZihyZW1vdGVIb3N0cyA9PSBudWxsKSAKKwkJCXRocm93IG5ldyBNZXNzZW5nZXJFeGNlcHRpb24oIk1pc3NpbmcgcmVtb3RlIGhvc3RzIHNwZWNpZmljYXRpb24iKTsKKwkJU3RyaW5nIHBvcnQgPSBwLmdldFByb3BlcnR5KFBPUlRLRVkpOworCQlpZihwb3J0ID09IG51bGwpIGNvbV9wb3J0ID0gREVGQVVMVF9QT1JUOworCQllbHNlIGNvbV9wb3J0ID0gSW50ZWdlci5wYXJzZUludChwb3J0KTsKKwkJU3RyaW5nVG9rZW5pemVyIHN0ID0gbmV3IFN0cmluZ1Rva2VuaXplcihyZW1vdGVIb3N0cywgIjsiKTsKKwkJaG9zdHMgPSBuZXcgU3RyaW5nW3N0LmNvdW50VG9rZW5zKCldOworCQlpbnQgbj0wOworCQl3aGlsZShzdC5oYXNNb3JlVG9rZW5zKCkpIGhvc3RzW24rK10gPSBzdC5uZXh0VG9rZW4oKTsKKwkJCisJCWRhdGFSZWNlaXZlZEJhcnJpZXJzID0gbmV3IEN5Y2xpY0JhcnJpZXJbaG9zdHMubGVuZ3RoXTsKKwkJcmVjdk1lc3NhZ2VzICA9IG5ldyBieXRlW2hvc3RzLmxlbmd0aF1bXTsKKwkJaG9zdEFkZHJlc3NlcyA9IG5ldyBJbmV0QWRkcmVzc1tob3N0cy5sZW5ndGhdOworCQlmb3IoaW50IGk9MDtpPGhvc3RzLmxlbmd0aDsrK2kpIHsKKwkJCWRhdGFSZWNlaXZlZEJhcnJpZXJzW2ldID0gbmV3IEN5Y2xpY0JhcnJpZXIoMik7CisJCQl0cnkgeworCQkJCWhvc3RBZGRyZXNzZXNbaV0gPSBJbmV0QWRkcmVzcy5nZXRCeU5hbWUoaG9zdHNbaV0pOworCQkJfSBjYXRjaChVbmtub3duSG9zdEV4Y2VwdGlvbiBlKSB7CisJCQkJdGhyb3cgbmV3IE1lc3NlbmdlckV4Y2VwdGlvbigiVW5hYmxlIHRvIHJlc29sdmUgaG9zdCAiK2hvc3RzW2ldLCBlKTsKKwkJCX0KKwkJfQorCQkKKwl9CisKKwkKKwlwdWJsaWMgdm9pZCBzdGFydCgpIHRocm93cyBNZXNzZW5nZXJFeGNlcHRpb24geworCQl0cnkgeworCQkJU2VydmVyU29ja2V0IHNlcnZlclNvY2tldCA9IG5ldyBTZXJ2ZXJTb2NrZXQoY29tX3BvcnQpOworCQkJYWNjZXB0Sm9iID0gbmV3IFNvY2tldExpc3RlbmVySm9iKCJTb2NrZXQgbGlzdGVuZXIgIixzZXJ2ZXJTb2NrZXQpOworCQkJYWNjZXB0Sm9iLnNjaGVkdWxlKCk7CisJCX0gY2F0Y2goRXhjZXB0aW9uIGUpIHsKKwkJCXRocm93IG5ldyBNZXNzZW5nZXJFeGNlcHRpb24oIlVuYWJsZSB0byBzdGFydCBtZXNzZW5nZXIiLCBlKTsKKwkJfQorCX0KKworCXB1YmxpYyB2b2lkIHN0b3AoKSB0aHJvd3MgTWVzc2VuZ2VyRXhjZXB0aW9uIHsKKwkJd2FrZXVwQmxvY2tlZFJlY3YoKTsKKwkJYWNjZXB0Sm9iLmNhbmNlbCgpOworCX0KKworCXB1YmxpYyB2b2lkIHNlbmRNc2coYnl0ZSBbXSBtc2csIGludCBuKSB0aHJvd3MgTWVzc2VuZ2VyRXhjZXB0aW9uIHsKKwkJdHJ5IHsKKwkJCUluZXRBZGRyZXNzIG90aGVySG9zdCA9IGhvc3RBZGRyZXNzZXNbbl07CisJCQlTb2NrZXQgc29jID0gbmV3IFNvY2tldChvdGhlckhvc3QuZ2V0SG9zdE5hbWUoKSwgY29tX3BvcnQpOworCQkJT2JqZWN0T3V0cHV0U3RyZWFtIG9vcyA9IG5ldyBPYmplY3RPdXRwdXRTdHJlYW0oc29jLmdldE91dHB1dFN0cmVhbSgpKTsJCisJCQlvb3Mud3JpdGVPYmplY3QobXNnKTsKKwkJCW9vcy5jbG9zZSgpOworCQkJc29jLmNsb3NlKCk7CisJCX0gY2F0Y2goRXhjZXB0aW9uIGUpIHsKKwkJCXRocm93IG5ldyBNZXNzZW5nZXJFeGNlcHRpb24oIkV4Y2VwdGlvbiBlbmNvdW50ZXJlZCBzZW5kaW5nIG1lc3NhZ2UgdG8gIitob3N0QWRkcmVzc2VzW25dLCBlKTsKKwkJfQorCX0KKworCXB1YmxpYyBieXRlIFtdIHJlY3ZNc2coaW50IG4pICB0aHJvd3MgTWVzc2VuZ2VyRXhjZXB0aW9uIHsKKwkJdHJ5IHsKKwkJCWRhdGFSZWNlaXZlZEJhcnJpZXJzW25dLmF3YWl0KCk7CisJCX0gY2F0Y2goRXhjZXB0aW9uIGUpIHsKKwkJCXRocm93IG5ldyBNZXNzZW5nZXJFeGNlcHRpb24oIlByb2JsZW0gcmVjZWl2aW5nIG1lc3NhZ2UgZnJvbSBob3N0ICIrbik7CisJCX0KKwkJcmV0dXJuIHJlY3ZNZXNzYWdlc1tuXTsKKwl9CisKKwlwcm90ZWN0ZWQgY2xhc3MgU29ja2V0TGlzdGVuZXJKb2IgZXh0ZW5kcyBKb2IgeworCQlTZXJ2ZXJTb2NrZXQgc29ja2V0OworCQlwdWJsaWMgU29ja2V0TGlzdGVuZXJKb2IoU3RyaW5nIG5hbWUpIHsKKwkJCXN1cGVyKG5hbWUpOworCQl9CisJCXB1YmxpYyBTb2NrZXRMaXN0ZW5lckpvYihTdHJpbmcgbmFtZSwgU2VydmVyU29ja2V0IHNvY2tldCkgeworCQkJc3VwZXIobmFtZSk7CisJCQl0aGlzLnNvY2tldCA9IHNvY2tldDsKKwkJfQorCQlAT3ZlcnJpZGUKKwkJcHJvdGVjdGVkIElTdGF0dXMgcnVuKElQcm9ncmVzc01vbml0b3IgbW9uaXRvcikgeworCQkJCisJCQl0cnkgeworCQkJCXdoaWxlKCFzb2NrZXQuaXNDbG9zZWQoKSkgeworCQkJCQlTb2NrZXQgcyA9IHNvY2tldC5hY2NlcHQoKTsKKwkJCQkJaWYoc29ja2V0LmlzQ2xvc2VkKCkpIGJyZWFrOworCQkJCQkvLyBXaGljaCBob3N0IGlzIGNvbm5lY3Rpbmc/CisJCQkJCUluZXRBZGRyZXNzIGFkZHIgPSBzLmdldEluZXRBZGRyZXNzKCk7CisJCQkJCWludCBoID0gLTE7CisJCQkJCWZvcihpbnQgaT0wO2k8aG9zdEFkZHJlc3Nlcy5sZW5ndGg7KytpKQorCQkJCQkJaWYoYWRkci5lcXVhbHMoaG9zdEFkZHJlc3Nlc1tpXSkpIGggPSBpOworCQkJCQlpZihoID09IC0xKQorCQkJCQkJdGhyb3cgbmV3IE1lc3NlbmdlckV4Y2VwdGlvbigiVW5hYmxlIHRvIGRldGVybWluZSB3aGljaCBob3N0IGNvbm5lY3RlZCwgYWRkcmVzcyB3YXMgIithZGRyKTsKKwkJCQkJCisJCQkJCW5ldyBDb25uZWN0aW9uSGFuZGxlcigiQWNjZXB0aW5nIGNvbm5lY3Rpb24iLCBzLCBoKTsKKwkJCQl9CisJCQl9IGNhdGNoKFNvY2tldEV4Y2VwdGlvbiBzZSkgeworCQkJCS8vIFRoZSBzb2NrZXQgd2FzIG1vc3QgbGlrZWx5IGNsb3NlZCBzaW5jZSB0aGUgdXNlciBzaHV0IGRvd24gU1RFTQorCQkJfQorCQkJY2F0Y2goSU9FeGNlcHRpb24gaW9lKSB7CisJCQkJaW9lLnByaW50U3RhY2tUcmFjZSgpOworCQkJfWNhdGNoKE1lc3NlbmdlckV4Y2VwdGlvbiBtZSkgeworCQkJCW1lLnByaW50U3RhY2tUcmFjZSgpOworCQkJfQorCQkJCisJCQlyZXR1cm4gU3RhdHVzLk9LX1NUQVRVUzsKKwkJfQorCQlAT3ZlcnJpZGUKKwkJcHJvdGVjdGVkIHZvaWQgY2FuY2VsaW5nKCkgeworCQkJdHJ5IHsKKwkJCQlzb2NrZXQuY2xvc2UoKTsKKwkJCQl0aGlzLmpvaW4oKTsKKwkJCX0gY2F0Y2goRXhjZXB0aW9uIGUpIHsKKwkJCQllLnByaW50U3RhY2tUcmFjZSgpOworCQkJfQorCQl9CisJfQorCisJcHJvdGVjdGVkIGNsYXNzIENvbm5lY3Rpb25IYW5kbGVyIGV4dGVuZHMgSm9iIHsKKwkJcHJpdmF0ZSBTb2NrZXQgc29jOworCQlwcml2YXRlIGludCBvdGhlclJhbms7CisJCQorCQlwdWJsaWMgQ29ubmVjdGlvbkhhbmRsZXIoU3RyaW5nIG4pIHsKKwkJCXN1cGVyKG4pOworCQl9CisJCXB1YmxpYyBDb25uZWN0aW9uSGFuZGxlcihTdHJpbmcgbiwgU29ja2V0IHMsIGludCBoKSB7CisJCQlzdXBlcihuKTsKKwkJCXNvYyA9IHM7CisJCQlvdGhlclJhbmsgPSBoOworCQkJdGhpcy5zY2hlZHVsZSgpOworCQl9CisJCQorCQlAT3ZlcnJpZGUKKwkJcHJvdGVjdGVkIElTdGF0dXMgcnVuKElQcm9ncmVzc01vbml0b3IgbW9uaXRvcikgeworCQkJT2JqZWN0SW5wdXRTdHJlYW0gb2lzID0gbnVsbDsKKwkJCXRyeSB7CisJCQkJb2lzID0gbmV3IE9iamVjdElucHV0U3RyZWFtKHNvYy5nZXRJbnB1dFN0cmVhbSgpKTsKKwkJCX0gY2F0Y2ggKElPRXhjZXB0aW9uIGUxKSB7CisJCQkJQWN0aXZhdG9yLmxvZ0Vycm9yKCJFcnJvciByZWFkaW5nIGRhdGEgb24gc29ja2V0IiwgZTEpOworCQkJfQorCQkJdHJ5IHsKKwkJCQlieXRlW10gbXNnID0gKGJ5dGVbXSlvaXMucmVhZE9iamVjdCgpOworCQkJCXJlY3ZNZXNzYWdlc1tvdGhlclJhbmtdID0gbXNnOworCQkJCW9pcy5jbG9zZSgpOworCQkJCXNvYy5jbG9zZSgpOworCQkJfSBjYXRjaChFeGNlcHRpb24gZSkgeworCQkJCWUucHJpbnRTdGFja1RyYWNlKCk7IC8vIFdoYXQgZG8gd2UgZG8gd2hlbiBhbiBleGNlcHRpb24gaGFwcGVucyBoZXJlPyAKKwkJCX0KKwkJCQorCQkJLy8gV2FrZSB1cCBhbnlib2R5IHdhaXRpbmcgZm9yIHRoZSBtZXNzYWdlCisJCQl0cnl7CisJCQkJZGF0YVJlY2VpdmVkQmFycmllcnNbb3RoZXJSYW5rXS5hd2FpdCgpOworCQkJfSBjYXRjaChCcm9rZW5CYXJyaWVyRXhjZXB0aW9uIGJiZSkgeyAKKwkJCQlBY3RpdmF0b3IubG9nRXJyb3IoIkJyb2tlbiBiYXJyaWVyIHdhaXRpbmcgZm9yIGRhdGEiLCBiYmUpOworCQkJfSBjYXRjaChJbnRlcnJ1cHRlZEV4Y2VwdGlvbiBpZSkgeworCQkJCUFjdGl2YXRvci5sb2dFcnJvcigiSW50ZXJydXB0ZWQgd2FpdGluZyBmb3IgZGF0YSIsIGllKTsKKwkJCX0KKwkJCXJldHVybiBTdGF0dXMuT0tfU1RBVFVTOworCQl9CisJCQorCX0KKwkKKwlwdWJsaWMgdm9pZCB3YWtldXBCbG9ja2VkUmVjdigpIHRocm93cyBNZXNzZW5nZXJFeGNlcHRpb24geworCQlpbnQgbj0wOworCQlmb3IoQ3ljbGljQmFycmllciBjYjpkYXRhUmVjZWl2ZWRCYXJyaWVycykgeworCQkJaWYoY2IuZ2V0TnVtYmVyV2FpdGluZygpID09IDEpIHsKKwkJCQlyZWN2TWVzc2FnZXNbbl0gPSBudWxsOyAvLyBudWxsIG1lYW5zIG5vIGRhdGEgb3IgaW50ZXJydXB0ZWQKKwkJCQl0cnkgeworCQkJCQljYi5hd2FpdCgpOyAvLyB3aWxsIHJldHVybiByaWdoIGF3YXkgYW5kIHdha2UgdXAgdGhlIGJsb2NrZWQgcGFydHkKKwkJCQl9IGNhdGNoKEV4Y2VwdGlvbiBlKSB7CisJCQkJCXRocm93IG5ldyBNZXNzZW5nZXJFeGNlcHRpb24oIlByb2JsZW0gd2FraW5nIHVwIGJsb2NrZWQgcmVjZWl2ZXIiLCBlKTsKKwkJCQl9CisJCQl9CisJCQkrK247CisJCX0KKwl9CisJCit9CmRpZmYgLS1naXQgYS9kaXN0cmlidXRlZC9vcmcuZWNsaXBzZS5zdGVtLmdyYXBoc3luY2hyb25pemVyL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2dyYXBoc3luY2hyb25pemVyL2ltcGwvU2ltdWxhdGlvbkdyYXBoU3luY2hyb25pemVyLmphdmEgYi9kaXN0cmlidXRlZC9vcmcuZWNsaXBzZS5zdGVtLmdyYXBoc3luY2hyb25pemVyL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2dyYXBoc3luY2hyb25pemVyL2ltcGwvU2ltdWxhdGlvbkdyYXBoU3luY2hyb25pemVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzk1MjE4ZgotLS0gL2Rldi9udWxsCisrKyBiL2Rpc3RyaWJ1dGVkL29yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhzeW5jaHJvbml6ZXIvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZ3JhcGhzeW5jaHJvbml6ZXIvaW1wbC9TaW11bGF0aW9uR3JhcGhTeW5jaHJvbml6ZXIuamF2YQpAQCAtMCwwICsxLDM2MyBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmdyYXBoc3luY2hyb25pemVyLmltcGw7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTEgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKK2ltcG9ydCBqYXZhLmlvLkJ5dGVBcnJheUlucHV0U3RyZWFtOworaW1wb3J0IGphdmEuaW8uQnl0ZUFycmF5T3V0cHV0U3RyZWFtOworaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247CitpbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7CitpbXBvcnQgamF2YS51dGlsLk1hcDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5CYXNpY0VMaXN0OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5FTGlzdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuVVJJOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS51dGlsLkVjb3JlVXRpbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUueG1pLlhNTFJlc291cmNlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5VdGlsaXR5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5EeW5hbWljTGFiZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkVkZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkdyYXBoOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5HcmFwaEZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkludGVncmF0aW9uTGFiZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkludGVncmF0aW9uTGFiZWxWYWx1ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguTm9kZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguTm9kZUxhYmVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5EZWNvcmF0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLkludGVncmF0aW9uRGVjb3JhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLlJlbGF0aXZlUGh5c2ljYWxSZWxhdGlvbnNoaXBMYWJlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuRGlzZWFzZU1vZGVsTGFiZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaHN5bmNocm9uaXplci5NZXNzZW5nZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaHN5bmNocm9uaXplci5BY3RpdmF0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaHN5bmNocm9uaXplci5NZXNzZW5nZXJFeGNlcHRpb247CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaHN5bmNocm9uaXplci5TeW5jaEdyYXBoUGFydGl0aW9uZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5qb2JzLnNpbXVsYXRpb24uSVNpbXVsYXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5qb2JzLnNpbXVsYXRpb24uSVNpbXVsYXRpb25MaXN0ZW5lclN5bmM7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5qb2JzLnNpbXVsYXRpb24uU2ltdWxhdGlvbkV2ZW50OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uam9icy5zaW11bGF0aW9uLlNpbXVsYXRpb25NYW5hZ2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uam9icy5zaW11bGF0aW9uLlNpbXVsYXRpb25TdGF0ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxMYWJlbDsKKworLyoqIAorICogVGhpcyBjbGFzcyBpcyByZXNwb25zaWJsZSBmb3Igc3luY2hyb25pemluZyBhIFNURU0gc2ltdWxhdGlvbiBhY3Jvc3MgbXVsdGlwbGUgcnVubmluZyBTVEVNIGluc3RhbmNlcy4gCisgKiBJdCB1c2VzIHRoZSB1bmRlcmx5aW5nIE1lc3NlbmdlciB0byBzZW5kIGFuZCByZWNlaXZlIHN1YmdyYXBoIGNoYW5nZXMgdG8gb3RoZXIgd29ya2VyIG5vZGVzLgorICogCisgKgorICovCisKK3B1YmxpYyBjbGFzcyBTaW11bGF0aW9uR3JhcGhTeW5jaHJvbml6ZXIgaW1wbGVtZW50cyBJU2ltdWxhdGlvbkxpc3RlbmVyU3luY3sKKworCXB1YmxpYyBmaW5hbCBzdGF0aWMgbG9uZyBSRVRSWV9XQUlUID0gMTAwMDsgLy9tcworCXB1YmxpYyBmaW5hbCBzdGF0aWMgaW50IE1BWF9TRU5EX1JFVFJJRVMgPSA2MDsgLy8gb25lIG1pbnV0ZQorCQorCS8qKgorCSAqIEVNRiBTYXZlIE9wdGlvbnMKKwkgKi8KKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBNYXA8U3RyaW5nLE9iamVjdD4gRU1GX1NFUklBTElaQVRJT05fT1BUSU9OUyAKKwkJPSBuZXcgSGFzaE1hcDxTdHJpbmcsT2JqZWN0PigpOworCXN0YXRpYyB7CisvLwkJRU1GX1NFUklBTElaQVRJT05fT1BUSU9OUy5wdXQoWE1MUmVzb3VyY2UuT1BUSU9OX0VOQ09ESU5HLCAiVVRGLTgiKTsKKwkJRU1GX1NFUklBTElaQVRJT05fT1BUSU9OUy5wdXQoWE1MUmVzb3VyY2UuT1BUSU9OX1pJUCwgQm9vbGVhbi5GQUxTRSk7IC8vIENoYW5nZSB0byBCb29sZWFuLkZBTFNFIHRvIHR1cm4gY29tcHJlc3Npb24gb2YgWE1JIGRhdGEgb3ZlciBuZXR3b3JrLgorCX0KKwkKKwlwdWJsaWMgc3RhdGljIE1lc3NlbmdlciBtZXNzZW5nZXI7CisJCQorCS8qKgorCSAqICBUaGUgZ3JhcGhzIHRoYXQgaXMgc2hhcmVkIHdpdGggb3RoZXIgcnVubmluZyBpbnN0YW5jZXMuIFRoZSBpbmRleCBpbnRvIHRoaXMgYXJyYXkgCisJICogIGlzIGltcG9ydGFudC4gSWYgZm9yIGluc3RhbmNlIHRoZSBub2RlIHJhbmsgb2YgdGhpcyBpbnN0YW5jZSBpcyAzIG91dCBvZiBhIHRvdGFsIG51bWJlcgorCSAqICBvZiBub2RlcyA1LCBpbmRleCAwLTIgYXJlIHRoZSBub2RlcyB3aXRoIHJhbmsgMC0yIGFuZCBpbmRleCAzIGlzIHRoZSBub2RlIHdpdGggcmFuayA0LgorCSAqLworCQorCXByaXZhdGUgc3RhdGljIEdyYXBoIFtdIG15U2hhcmVkR3JhcGhzOworCQorCS8qKgorCSAqICBSZW1vdGUgZ3JhcGhzIHJlY2VpdmVkIGZyb20gb3RoZXIgcnVubmluZyBpbnN0YW5jZXMuIFRoZSBpbmRleCBmb2xsb3dzIHRoZSBzYW1lCisJICogIHJ1bGUgYXMgZm9yIG15U2hhcmVkR3JhcGhzLgorCSAqLworCXByaXZhdGUgc3RhdGljIEdyYXBoIFtdIHJlbW90ZVNoYXJlZEdyYXBoczsKKworCS8vIFdoZXRoZXIgdG8gdXNlIGJpbmFyeSBzZXJpYWxpemF0aW9uCisJcHVibGljIHN0YXRpYyBib29sZWFuIEJJTkFSWVNFUklBTElaQVRJT047CisJLy8gV2hldGhlciB0byB6aXAgdGhlIG1lc3NhZ2VzCisJcHVibGljIHN0YXRpYyBib29sZWFuIFpJUE1FU1NBR0VTOworCQorCQorCS8qKgorCSAqIEluc3RydW1lbnRhdGlvbgorCSAqLworCXByaXZhdGUgbG9uZyB0b3RhbFNlbmRUaW1lID0gMDsKKwlwcml2YXRlIGxvbmcgdG90YWxSZWN2VGltZSA9IDA7CisJcHJpdmF0ZSBsb25nIHRvdGFsVGltZSA9IDA7CisJCisJCisJcHJpdmF0ZSBJU2ltdWxhdGlvbiBzaW11bGF0aW9uOworCXB1YmxpYyBTaW11bGF0aW9uR3JhcGhTeW5jaHJvbml6ZXIoSVNpbXVsYXRpb24gc2ltKSB7CQorCQl0aGlzLnNpbXVsYXRpb24gPSBzaW07CisKKwkJU3luY2hHcmFwaFBhcnRpdGlvbmVyIHNncCA9ICAoU3luY2hHcmFwaFBhcnRpdGlvbmVyKVNpbXVsYXRpb25NYW5hZ2VyLmdldE1hbmFnZXIoKS5nZXRHcmFwaFBhcnRpdGlvbmVyKCk7CisJCS8vIENsZWFyIG91dCBmcm9tIG9sZCBzaW11bGF0aW9uCisJCW15U2hhcmVkR3JhcGhzID0gbmV3IEdyYXBoW3NncC5nZXROdW1Ob2RlcygpLTFdOworCQlyZW1vdGVTaGFyZWRHcmFwaHMgPSBuZXcgR3JhcGhbc2dwLmdldE51bU5vZGVzKCktMV07CisJCQkKKwkJaWYoWklQTUVTU0FHRVMpCisJCQlFTUZfU0VSSUFMSVpBVElPTl9PUFRJT05TLnB1dChYTUxSZXNvdXJjZS5PUFRJT05fWklQLCBCb29sZWFuLlRSVUUpOworCQllbHNlCisJCQlFTUZfU0VSSUFMSVpBVElPTl9PUFRJT05TLnB1dChYTUxSZXNvdXJjZS5PUFRJT05fWklQLCBCb29sZWFuLkZBTFNFKTsKKwkJCisJCWlmKCFCSU5BUllTRVJJQUxJWkFUSU9OKQorCQkJRU1GX1NFUklBTElaQVRJT05fT1BUSU9OUy5wdXQoWE1MUmVzb3VyY2UuT1BUSU9OX0VOQ09ESU5HLCAiVVRGLTgiKTsKKwl9CisJCisJYm9vbGVhbiBidXN5ID0gZmFsc2U7CisJaW50IGN5Y2xlID0gMDsKKwkvKioKKwkgKiBDYWxsZWQgYnkgdGhlIFNpbXVsYXRpb24gd2hlbmV2ZXIgdGhlIHN0YXRlIG9mIGEgc2ltdWxhdGlvbiBjaGFuZ2VzLiBXZSBhcmUgaW50ZXJlc3RlZCBpbiB0aGUgdGhlIENPTVBMRVRFRF9DWUNMRQorCSAqIGV2ZW50IHNpbmNlIHRoYXQncyB3aGVyZSB0aGUgZ3JhcGhzIGFyZSBzeW5jaHJvbml6ZWQuCisJICovCisJcHVibGljIHZvaWQgc2ltdWxhdGlvbkNoYW5nZWRTeW5jKFNpbXVsYXRpb25FdmVudCBldmVudCkgeworCQkvLyBJbml0aWFsaXplIHdpdGggdGhlIGN1cnJlbnQgc2ltdWxhdGlvbi4gSWYgdGhpcyBoYXMgYWxyZWFkeSBiZWVuIGRvbmUsIHRoZSBtZXRob2Qgd2lsbCByZXR1cm4gcmlnaHQgYXdheQorCQkoKFN5bmNoR3JhcGhQYXJ0aXRpb25lcilTaW11bGF0aW9uTWFuYWdlci5nZXRNYW5hZ2VyKCkuZ2V0R3JhcGhQYXJ0aXRpb25lcigpKS5pbml0aWFsaXplKHRoaXMuZ2V0U2ltdWxhdGlvbigpKTsKKwkJCisJCS8vIEF0IHRoZSBlbmQgb2YgYSBjeWNsZSwgd2Ugc2VuZCB0aGUgZ3JhcGhzIGFyb3VuZAorCQlpZihldmVudC5nZXRTaW11bGF0aW9uU3RhdGUoKS5lcXVhbHMoU2ltdWxhdGlvblN0YXRlLlJVTk5JTkcpKSB7CisJCQkKKwkJfQorCQlpZihldmVudC5nZXRTaW11bGF0aW9uU3RhdGUoKS5lcXVhbHMoU2ltdWxhdGlvblN0YXRlLkNPTVBMRVRFRF9DWUNMRSkpIHsKKwkJCWlmKGN5Y2xlID09IDEpIHsgLy8gZmlyc3QgY3ljbGUgaGFzIGxvdHMgb2Ygb3ZlcmhlYWQsIHNraXAKKwkJCQl0b3RhbFRpbWUgPSBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKTsgLy8gcmVzZXRzIGl0CisJCQkJdG90YWxTZW5kVGltZSA9IDA7CisJCQkJdG90YWxSZWN2VGltZSA9IDA7CisJCQl9CisJCQkrK2N5Y2xlOworCQkJaWYoKChTeW5jaEdyYXBoUGFydGl0aW9uZXIpIFNpbXVsYXRpb25NYW5hZ2VyLmdldE1hbmFnZXIoKS5nZXRHcmFwaFBhcnRpdGlvbmVyKCkpLmdldE51bU5vZGVzKCkgPT0gMSkgcmV0dXJuOyAvLyBub3RoaW5nIHRvIGRvCisJCQkKKwkJCQorCQkJaWYoYnVzeSkgeworCQkJCUFjdGl2YXRvci5sb2dFcnJvcigiRXJyb3IgcmVjZWl2ZWQgcmUtZW50cmFudCBjYWxsYmFjayBpbiBncmFwaCBzeW5jaHJvbml6ZXIiLCBuZXcgRXhjZXB0aW9uKCkpOyAvLyROT04tTkxTLTEkCisJCQkJYnVzeSA9IGZhbHNlOworCQkJCXJldHVybjsKKwkJCX0KKwkJCWJ1c3kgPSB0cnVlOworCisJCQkvLyBJbnN0cnVtZW50YXRpb24KKy8vCQkJbG9uZyBub3cgPSBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKTsKKwkJCQorCQkJRUxpc3Q8RGVjb3JhdG9yPmVsID0gc2ltdWxhdGlvbi5nZXRTY2VuYXJpbygpLmdldENhbm9uaWNhbEdyYXBoKCkuZ2V0RGVjb3JhdG9ycygpOworCQkJCisJCQkvLyBXZSBvbmx5IHN5bmNocm9uaXplIHRoZSBkZWNvcmF0b3JzIHRoYXQgY2FsY3VsYXRlcyBkZWx0YXMsIHRob3NlIHdvdWxkCisJCQkvLyBiZSBpbnN0YW5jZXMgb2YgSW50ZWdyYXRpb25EZWNvcmF0b3I7CisJCQkKKwkJCUVMaXN0PERlY29yYXRvcj4gaWRlY29yYXRvcnMgPSBuZXcgQmFzaWNFTGlzdDxEZWNvcmF0b3I+KCk7CisJCQkKKwkJCWZvcihEZWNvcmF0b3IgZDplbCkKKwkJCQlpZihkIGluc3RhbmNlb2YgSW50ZWdyYXRpb25EZWNvcmF0b3IpIGlkZWNvcmF0b3JzLmFkZChkKTsKKwkJCQorCQkJaWYobXlTaGFyZWRHcmFwaHNbMF0gPT0gbnVsbCkgaW5pdFNoYXJlZEdyYXBoKGlkZWNvcmF0b3JzKTsKKwkJCQorCQkJLy8gQ29weSB0aGUgbGF0ZXN0IHZhbHVlcyBmcm9tIHRoZSBncmFwaCBsYWJlbHMgdG8gdGhlIHNoYXJlZCBncmFwaHMKKwkJCWZvcihHcmFwaCBncmFwaDpteVNoYXJlZEdyYXBocykKKwkJCQlmb3IoTWFwLkVudHJ5PFVSSSwgTm9kZUxhYmVsPmVudHJ5IDogZ3JhcGguZ2V0Tm9kZUxhYmVscygpLmVudHJ5U2V0KCkpIHsKKwkJCQkJVVJJIHVyaSA9IGVudHJ5LmdldEtleSgpOworCQkJCQlOb2RlTGFiZWwgbGF0ZXN0VmFsID0gc2ltdWxhdGlvbi5nZXRTY2VuYXJpbygpLmdldENhbm9uaWNhbEdyYXBoKCkuZ2V0Tm9kZUxhYmVscygpLmdldCh1cmkpOworCQkJCQlpZihsYXRlc3RWYWwgPT0gbnVsbCkKKwkJCQkJCUFjdGl2YXRvci5sb2dFcnJvcigiQ2Fubm90IGZpbmQgbm9kZSBsYWJlbCB3aXRoIFVSSSAiK3VyaSwgbmV3IEV4Y2VwdGlvbigpKTsKKwkJCQkJZWxzZSAoKChJbnRlZ3JhdGlvbkxhYmVsVmFsdWUpZW50cnkuZ2V0VmFsdWUoKS5nZXRDdXJyZW50VmFsdWUoKSkpLnNldCgoSW50ZWdyYXRpb25MYWJlbFZhbHVlKShsYXRlc3RWYWwuZ2V0Q3VycmVudFZhbHVlKCkpKTsKKwkJCQl9CisJCQkKKwkJCS8vIE5vdyBzZW5kIHRoZSB1cGRhdGVkIGdyYXBoCisJCQlsb25nIG5vdyA9IFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpOworCQkJZm9yKGludCBuPTA7bjxteVNoYXJlZEdyYXBocy5sZW5ndGg7KytuKSAKKwkJCQlzZW5kR3JhcGgobXlTaGFyZWRHcmFwaHNbbl0sIG4pOworCQkJbG9uZyB0aGVuID0gU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCk7CisJCQkKKwkJCXRvdGFsU2VuZFRpbWUgKz0gKHRoZW4tbm93KTsKKwkJCS8vIGFuZCByZWNlaXZlIHRoZSB1cGRhdGUgZnJvbSB0aGUgb3RoZXIgcnVubmluZyBpbnN0YW5jZQorCQkJbm93ID0gU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCk7CisJCQlmb3IoaW50IG49MDtuPG15U2hhcmVkR3JhcGhzLmxlbmd0aDsrK24pIAkJCisJCQkJcmVtb3RlU2hhcmVkR3JhcGhzW25dID0gcmVjZWl2ZUdyYXBoKG4pOworCQkJdGhlbiA9IFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpOworCQkJdG90YWxSZWN2VGltZSArPSAodGhlbi1ub3cpOworCQkJLy8gYW5kIHVwZGF0ZSBsb2NhbCBsYWJlbCB2YWx1ZXMgZnJvbSB0aGUgcmVtb3RlIHZhbHVlcworCQkJLy8gQ29weSB0aGUgbGF0ZXN0IHZhbHVlcyBmcm9tIHRoZSBncmFwaCBsYWJlbHMgdG8gdGhlIHNoYXJlZCBncmFwaAorCQkJZm9yKEdyYXBoIGdyYXBoOnJlbW90ZVNoYXJlZEdyYXBocykgeworCQkJCWlmKGdyYXBoID09IG51bGwpIGJyZWFrOyAvLyBOdWxsIHZhbHVlIG1lYW5zIHRoZSBzaW11bGF0aW9uIHdhcyBzdG9wcGVkIAorCQkJCWZvcihNYXAuRW50cnk8VVJJLCBOb2RlTGFiZWw+ZW50cnkgOiBncmFwaC5nZXROb2RlTGFiZWxzKCkuZW50cnlTZXQoKSkgeworCQkJCQlVUkkgdXJpID0gZW50cnkuZ2V0S2V5KCk7CisJCQkJCU5vZGVMYWJlbCBsYXRlc3RWYWwgPSBzaW11bGF0aW9uLmdldFNjZW5hcmlvKCkuZ2V0Q2Fub25pY2FsR3JhcGgoKS5nZXROb2RlTGFiZWxzKCkuZ2V0KHVyaSk7CisJCQkJCWlmKGxhdGVzdFZhbCA9PSBudWxsKQorCQkJCQkJQWN0aXZhdG9yLmxvZ0Vycm9yKCJDYW5ub3QgZmluZCBub2RlIGxhYmVsIHdpdGggVVJJICIrdXJpLCBuZXcgRXhjZXB0aW9uKCkpOworCQkJCQllbHNlIHsKKwkJCQkJCS8vIE5lZWQgdG8gc2V0IGJvdGggY3VycmVudCBhbmQgdGVtcCB2YWx1ZSBzaW5jZSB0aGlzIGluc3RhbmNlIHdpbGwgb25seSBzZXQgdGhlIHRlbXAKKwkJCQkJCS8vIHZhbHVlIHRvIHRoZSBjdXJyZW50IHZhbHVlIGZvciB0aGUgbm9kZXMgaXQgbWFuYWdlcy4KKwkJCQkJCSgoSW50ZWdyYXRpb25MYWJlbFZhbHVlKShsYXRlc3RWYWwuZ2V0Q3VycmVudFZhbHVlKCkpKS5zZXQoKChJbnRlZ3JhdGlvbkxhYmVsVmFsdWUpZW50cnkuZ2V0VmFsdWUoKS5nZXRDdXJyZW50VmFsdWUoKSkpOworCQkJCQkJKChJbnRlZ3JhdGlvbkxhYmVsVmFsdWUpKChJbnRlZ3JhdGlvbkxhYmVsKWxhdGVzdFZhbCkuZ2V0VGVtcFZhbHVlKCkpLnNldCgoKEludGVncmF0aW9uTGFiZWxWYWx1ZSllbnRyeS5nZXRWYWx1ZSgpLmdldEN1cnJlbnRWYWx1ZSgpKSk7CisJCQkJCX0KKwkJCQl9CisJCQl9CisvLwkJCWxvbmcgdGhlbiA9IFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpOworLy8JCQl0aGlzLnRvdGFsQ29tbVRpbWUgKz0gKHRoZW4gLSBub3cpOworCQl9IGVsc2UgaWYoZXZlbnQuZ2V0U2ltdWxhdGlvblN0YXRlKCkuZXF1YWxzKFNpbXVsYXRpb25TdGF0ZS5TVE9QUEVEKSkgeworCQkJdHJ5IHsKKwkJCQltZXNzZW5nZXIud2FrZXVwQmxvY2tlZFJlY3YoKTsKKwkJCX0gY2F0Y2goTWVzc2VuZ2VyRXhjZXB0aW9uIG1lKSB7CisJCQkJQWN0aXZhdG9yLmxvZ0Vycm9yKCJDYW5ub3Qgd2FrZSB1cCBibG9ja2VkIHJlY3YiLCBtZSk7CisJCQl9CisJCX0gZWxzZSBpZihldmVudC5nZXRTaW11bGF0aW9uU3RhdGUoKS5lcXVhbHMoU2ltdWxhdGlvblN0YXRlLlBBVVNFRCkpIHsKKwkJCXRvdGFsVGltZSA9IFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpIC0gdG90YWxUaW1lOworCQkJQWN0aXZhdG9yLmxvZ0luZm9ybWF0aW9uKCJUb3RhbCBzZW5kIHRpbWU6Iit0aGlzLnRvdGFsU2VuZFRpbWUpOworCQkJQWN0aXZhdG9yLmxvZ0luZm9ybWF0aW9uKCJUb3RhbCByZWN2IHRpbWU6Iit0aGlzLnRvdGFsUmVjdlRpbWUpOworCQkJQWN0aXZhdG9yLmxvZ0luZm9ybWF0aW9uKCJUb3RhbCBzaW11bGF0aW9uIHRpbWU6Iit0aGlzLnRvdGFsVGltZSk7CisJCX0KKwkJYnVzeSA9IGZhbHNlOworCX0KKworCXB1YmxpYyBJU2ltdWxhdGlvbiBnZXRTaW11bGF0aW9uKCkgeworCQlyZXR1cm4gc2ltdWxhdGlvbjsKKwl9CisJCisJLyoqCisJICogVGhpcyBpcyBhbiBpbXBvcnRhbnQgbWV0aG9kIHdoZXJlIHRoZSBncmFwaHMgKGNvbnRhaW5pbmcgYSBsaXN0IG9mIGR5bmFtaWMgbm9kZSBsYWJlbHMpIGFyZSBjYWxjdWxhdGVkCisJICogZm9yIGVhY2ggcmVtb3RlIHNlcnZlciB0aGlzIGluc3RhbmNlIGlzIGNvbW11bmljYXRpbmcgd2l0aC4gVGhlIG15U2hhcmVkR3JhcGhzIGFycmF5IGlzIHBvcHVsYXRlZAorCSAqIHdpdGggdGhlIGdyYXBoLiAKKwkgKiAKKwkgKiBAcGFyYW0gaWRlY29yYXRvcnMKKwkgKi8KKwlwcml2YXRlIHZvaWQgaW5pdFNoYXJlZEdyYXBoKEVMaXN0PERlY29yYXRvcj5pZGVjb3JhdG9ycykgeworCQkKKwkJCisJCS8vIEdldCB0aGUgZ3JhcGggcGFydGl0aW9uZXIKKwkJU3luY2hHcmFwaFBhcnRpdGlvbmVyIGdwID0oU3luY2hHcmFwaFBhcnRpdGlvbmVyKVNpbXVsYXRpb25NYW5hZ2VyLmdldE1hbmFnZXIoKS5nZXRHcmFwaFBhcnRpdGlvbmVyKCk7CisJCQorCQlmb3IoaW50IGk9MDtpPGdwLmdldE51bU5vZGVzKCktMTsrK2kpIHsKKwkJCW15U2hhcmVkR3JhcGhzW2ldID0gR3JhcGhGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVHcmFwaCgpOworCQkJLy8gQ2xlYXIgb3V0IGFsbCB1bm5lY2Vzc2FyeSBkYXRhIHRvIHJlZHVjZSBzaXplCisJCQlteVNoYXJlZEdyYXBoc1tpXS5zZXREdWJsaW5Db3JlKG51bGwpOworCQkJbXlTaGFyZWRHcmFwaHNbaV0uc2V0VGltZShudWxsKTsKKwkJCW15U2hhcmVkR3JhcGhzW2ldLnNldFVSSShudWxsKTsKKwkJCW15U2hhcmVkR3JhcGhzW2ldLnNldFR5cGVVUkkobnVsbCk7CisJCX0KKwkJCisJCWZvcihEZWNvcmF0b3IgZDppZGVjb3JhdG9ycykgeworCQkJRUxpc3Q8RHluYW1pY0xhYmVsPm15TGFiZWxzID0gZ3AucGFydGl0aW9uRGVjb3JhdG9yTGFiZWxzKGQpOworCisJCQkvLyBSZXRyaWV2ZSB0aGUgbm9kZSBlZGdlcyBhbmQgc2VlIGlmIGl0IHBvaW50cyBvdXRzaWRlIHRoZSB1cGRhdGUgc2V0CisJCQkvLyBmb3IgdGhpcyBkZWNvcmF0b3IuIElmIHNvLCB3ZSBhZGQgdGhlIGxhYmVsIHRvIHRoZSBzaGFyZWQgc2V0CisJCQlmb3IoRHluYW1pY0xhYmVsIGRsOm15TGFiZWxzKSB7CisJCQkJaWYoZGwuZ2V0SWRlbnRpZmlhYmxlKCkgaW5zdGFuY2VvZiBOb2RlKSB7IC8vIEFsd2F5cyB0cnVlIGJ1dCBiZSBzYWZlCisJCQkJCU5vZGUgbiA9IChOb2RlKWRsLmdldElkZW50aWZpYWJsZSgpOworCQkJCQlFTGlzdDxFZGdlPmVkZ2VzID0gbi5nZXRFZGdlcygpOworCQkJCQlmb3IoRWRnZSBlOmVkZ2VzKSB7CisJCQkJCQlpZihlLmdldExhYmVsKCkgaW5zdGFuY2VvZiBSZWxhdGl2ZVBoeXNpY2FsUmVsYXRpb25zaGlwTGFiZWwpIAorCQkJCQkJCWNvbnRpbnVlOwkKKwkJCQkJCU5vZGUgb3RoZXJOb2RlID0gbnVsbDsKKwkJCQkJCS8vIFNlZSBpZiB0aGUgZWRnZSBjb25uZWN0cyBpbiBhbnkgd2F5IHRvIGEgbm9kZSB0aGF0IGlzIG91dHNpZGUgdGhlIHdvcmtpbmcgc2V0CisJCQkJCQkvLyBvZiB0aGlzIGluc3RhbmNlLgorCQkJCQkJaWYoZ3AuZ2V0Tm9kZVJhbmsoKSAhPSBncC5nZXRJZGVudGlmaWFibGVSYW5rKGUuZ2V0QigpKSkgb3RoZXJOb2RlID0gZS5nZXRCKCk7CisJCQkJCQlpZihncC5nZXROb2RlUmFuaygpICE9IGdwLmdldElkZW50aWZpYWJsZVJhbmsoZS5nZXRBKCkpKSBvdGhlck5vZGUgPSBlLmdldEEoKTsKKwkJCQkJCQorCQkJCQkJaWYob3RoZXJOb2RlICE9IG51bGwpIHsKKwkJCQkJCQlpbnQgb3RoZXJSYW5rID0gZ3AuZ2V0SWRlbnRpZmlhYmxlUmFuayhvdGhlck5vZGUpOworCQkJCQkJCS8vIFdlIGNsb25lIHRoZSBsYWJlbCBzbyB3ZSBjYW4gZ2V0IHJpZCBvZiAKKwkJCQkJCQkvLyBsYWJlbCB2YWx1ZXMgbm90IG5lZWRlZCwgcmVkdWNpbmcgdGhlIHNpemUKKwkJCQkJCQkvLyBvZiB0aGUgc2VudCBncmFwaAorCQkJCQkJCUR5bmFtaWNMYWJlbCBjbG9uZUxhYmVsID0gKER5bmFtaWNMYWJlbClFY29yZVV0aWwuY29weShkbCk7CisJCQkJCQkJLy8gUmVtZW1iZXIgdG8gZGV0YWNoIGZyb20gcGFyZW50IG9yIHdlJ2xsIGdldCBkdXBsaWNhdGUgbm9kZSBsYWJlbHMKKwkJCQkJCQkoKE5vZGUpY2xvbmVMYWJlbC5nZXRJZGVudGlmaWFibGUoKSkuZ2V0TGFiZWxzKCkucmVtb3ZlKGNsb25lTGFiZWwpOworCQkJCQkJCWlmKGNsb25lTGFiZWwgaW5zdGFuY2VvZiBJbnRlZ3JhdGlvbkxhYmVsKSB7CisJCQkJCQkJCS8vIGNsZWFuIG91dCB1bm5lY2Vzc2FyeSAgZGF0YQorCQkJCQkJCQljbG9uZUxhYmVsLnNldER1YmxpbkNvcmUobnVsbCk7IC8vIFdlIGRvbid0IG5lZWQgdG8gcGFzcyBEdWJsaW4gY29yZS4KKwkJCQkJCQkJKChJbnRlZ3JhdGlvbkxhYmVsKWNsb25lTGFiZWwpLnNldERlbHRhVmFsdWUobnVsbCk7CisJCQkJCQkJCSgoSW50ZWdyYXRpb25MYWJlbCljbG9uZUxhYmVsKS5zZXRUZW1wVmFsdWUobnVsbCk7CisJCQkJCQkJCSgoSW50ZWdyYXRpb25MYWJlbCljbG9uZUxhYmVsKS5zZXRQcm9iZVZhbHVlKG51bGwpOworCQkJCQkJCQkoKEludGVncmF0aW9uTGFiZWwpY2xvbmVMYWJlbCkuc2V0RXJyb3JTY2FsZShudWxsKTsKKwkJCQkJCQkJKChJbnRlZ3JhdGlvbkxhYmVsKWNsb25lTGFiZWwpLnNldE5leHRWYWx1ZShudWxsKTsKKwkJCQkJCQkJY2xvbmVMYWJlbC5zZXREZWNvcmF0b3IobnVsbCk7CisJCQkJCQkJCWNsb25lTGFiZWwuc2V0SWRlbnRpZmlhYmxlKG51bGwpOworCQkJCQkJCQljbG9uZUxhYmVsLnNldFR5cGVVUkkobnVsbCk7CisJCQkJCQkJCWNsb25lTGFiZWwuc2V0VVJJT2ZJZGVudGlmaWFibGVUb0JlTGFiZWxlZChudWxsKTsJCisJCQkJCQkJCQorCQkJCQkJCQkvLyBTcGVjaWFsIGNsZWFuaW5nCisJCQkJCQkJCWlmKGNsb25lTGFiZWwgaW5zdGFuY2VvZiBTdGFuZGFyZFBvcHVsYXRpb25Nb2RlbExhYmVsKSB7CisJCQkJCQkJCQkoKFN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWwpY2xvbmVMYWJlbCkuc2V0UG9wdWxhdGlvbklkZW50aWZpZXIobnVsbCk7CisJCQkJCQkJCQkoKFN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWwpY2xvbmVMYWJlbCkuc2V0UG9wdWxhdGlvbkxhYmVsKG51bGwpOworCQkJCQkJCQl9CisJCQkJCQkJCWlmKGNsb25lTGFiZWwgaW5zdGFuY2VvZiBEaXNlYXNlTW9kZWxMYWJlbCkgeworCQkJCQkJCQkJKChEaXNlYXNlTW9kZWxMYWJlbCljbG9uZUxhYmVsKS5zZXRQb3B1bGF0aW9uTW9kZWxMYWJlbChudWxsKTsKKwkJCQkJCQkJCSgoRGlzZWFzZU1vZGVsTGFiZWwpY2xvbmVMYWJlbCkuc2V0UG9wdWxhdGlvbkxhYmVsKG51bGwpOworCQkJCQkJCQl9CisJCQkJCQorCQkJCQkJCX0KKy8vCQkJCQkJCUFjdGl2YXRvci5sb2dJbmZvcm1hdGlvbigiQWRkaW5nICIrY2xvbmVMYWJlbC5nZXRVUkkoKSsiIHRvIHNoYXJlZCBncmFwaCIpOworCQkJCQkJCQorCQkJCQkJCS8vIE1ha2Ugc3VyZSB3ZSBnZXQgdGhlIHJpZ2h0IGdyYXBoLiBGb3IgaW5zdGFuY2UsIGEgbm9kZSAxIGNvbW11bmljYXRpbmcgd2l0aCBub2RlCisJCQkJCQkJLy8gMiBhbmQgMCB3aWxsIGhhdmUgdHdvIGdyYXBocy4gTm9kZSAwIGdvZXMgaW4gaW5kZXggMCwgYW5kIE5vZGUgMiBnb2VzIGluIGluZGV4IDEuCisJCQkJCQkJaW50IGluZGV4ID0gKG90aGVyUmFuayA+PSBteVNoYXJlZEdyYXBocy5sZW5ndGgpPyBvdGhlclJhbmstMTpvdGhlclJhbms7IAorCQkJCQkJCW15U2hhcmVkR3JhcGhzW2luZGV4XS5nZXROb2RlTGFiZWxzKCkucHV0KGNsb25lTGFiZWwuZ2V0VVJJKCksIChOb2RlTGFiZWwpY2xvbmVMYWJlbCk7CisJCQkJCQl9CisJCQkJCX0KKwkJCQl9CisJCQl9CisJCX0KKwkJZm9yKGludCBpPTA7aTxncC5nZXROdW1Ob2RlcygpLTE7KytpKSAKKwkJCUFjdGl2YXRvci5sb2dJbmZvcm1hdGlvbigiU2hhcmVkIGdyYXBoICIraSsiIGlzIHNpemUgIitteVNoYXJlZEdyYXBoc1tpXS5nZXROb2RlTGFiZWxzKCkua2V5U2V0KCkuc2l6ZSgpKTsKKwl9CisJCisJCisJCisKKwlwcml2YXRlIHZvaWQgc2VuZEdyYXBoKEdyYXBoIGcsIGludCBub2RlUmFuaykgeworCQl0cnkgeworCQkJVVJJIHRtcEZpbGVVUkkgPSBVUkkuY3JlYXRlVVJJKCJwbGF0Zm9ybTovdG1wLnhtaSIpOyAvLyBkb2VzIGl0IG1hdHRlcj8KKwkJCUJ5dGVBcnJheU91dHB1dFN0cmVhbSBiYW9zID0gbmV3IEJ5dGVBcnJheU91dHB1dFN0cmVhbSgpOworCQkJVXRpbGl0eS5zZXJpYWxpemVJZGVudGlmaWFibGVUb1N0cmVhbShnLCB0bXBGaWxlVVJJLCBiYW9zLCBFTUZfU0VSSUFMSVpBVElPTl9PUFRJT05TLCBCSU5BUllTRVJJQUxJWkFUSU9OKTsKKwkJCQorCQkJaW50IHJldHJpZXMgPSAwOworCQkJZG8geworCQkJCS8vIHNlbmQgaXQKKwkJCQl0cnkgeworCQkJCQltZXNzZW5nZXIuc2VuZE1zZyhiYW9zLnRvQnl0ZUFycmF5KCksIG5vZGVSYW5rKTsKKwkJCQkJYnJlYWs7CisJCQkJfSBjYXRjaChNZXNzZW5nZXJFeGNlcHRpb24gbWUpIHsKKwkJCQkJLy8gQSBjb25uZWN0aW9uIHdhcyBwcm9iYWJseSByZWZ1c2VkLiBSZXRyeSB1bnRpbCB0aGUgY29ubmVjdGlvbiBpcyBhdmFpbGFibGUgb3IgbWF4aW11bSByZXRyaWVzIGhhdmUgYmVlbiBleGNlZWRlZC4KKwkJCQkJdHJ5IHsKKwkJCQkJCVRocmVhZC5zbGVlcChSRVRSWV9XQUlUKTsKKwkJCQkJfSBjYXRjaChFeGNlcHRpb24gZSkgeworCQkJCQkJZS5wcmludFN0YWNrVHJhY2UoKTsKKwkJCQkJfQorCQkJCX0KKwkJCX0gd2hpbGUocmV0cmllcysrIDwgTUFYX1NFTkRfUkVUUklFUyk7CisJCQlpZihyZXRyaWVzID49IE1BWF9TRU5EX1JFVFJJRVMpCisJCQkJdGhyb3cgbmV3IE1lc3NlbmdlckV4Y2VwdGlvbigiVW5hYmxlIHRvIHNlbmQgbWVzc2FnZSB0byBub2RlICIrbm9kZVJhbmsrIiwgcmV0cmllZCAiK01BWF9TRU5EX1JFVFJJRVMrIiB0aW1lcyIsIG5ldyBFeGNlcHRpb24oKSk7CisJCX0gY2F0Y2goTWVzc2VuZ2VyRXhjZXB0aW9uIG1lKSB7CisJCQlBY3RpdmF0b3IubG9nRXJyb3IoIkV4Y2VwdGlvbiBjYXVnaHQgc2VuZGluZyBtZXNzYWdlIHRvIG5vZGUgIitub2RlUmFuaywgbWUpOworCQl9IGNhdGNoKElPRXhjZXB0aW9uIGlvKSB7CisJCQlBY3RpdmF0b3IubG9nRXJyb3IoIkV4Y2VwdGlvbiBjYXVnaHQgc2VyYWxpemluZyBtZXNzYWdlIixpbyk7CisJCX0KKwl9CisJCisJcHJpdmF0ZSBHcmFwaCByZWNlaXZlR3JhcGgoaW50IG5vZGVSYW5rKSB7CisJCWJ5dGUgW10geG1pID0gbnVsbDsKKwkJdHJ5IHsKKwkJCXhtaSA9IG1lc3Nlbmdlci5yZWN2TXNnKG5vZGVSYW5rKTsKKwkJfSBjYXRjaChNZXNzZW5nZXJFeGNlcHRpb24gbWUpIHsKKwkJCUFjdGl2YXRvci5sb2dFcnJvcigiRXhjZXB0aW9uIGNhdWdodCByZWNlaXZpbmcgZGF0YSBmcm9tIG5vZGUgIitub2RlUmFuaywgbWUpOworCQkJcmV0dXJuIG51bGw7CisJCX0KKwkJaWYoeG1pID09IG51bGwpIHJldHVybiBudWxsOyAvLyBOdWxsIHZhbHVlIGlzIHJldHVybmVkIHdoZW4gdGhlIGJsb2NrZWQgbGlzdGVuZXIgaXMgZm9yY2VkIHRvIHdha2UgdXAsIGUuZy4gd2hlbiB0aGUgc2ltdWxhdGlvbiBzdG9wcy4KKwkJQnl0ZUFycmF5SW5wdXRTdHJlYW0gYmFpcyA9IG5ldyBCeXRlQXJyYXlJbnB1dFN0cmVhbSh4bWkpOworCQlVUkkgdG1wRmlsZVVSSSA9IFVSSS5jcmVhdGVVUkkoInBsYXRmb3JtOi90bXAueG1pIik7IC8vIGRvZXMgaXQgbWF0dGVyPworCQlHcmFwaCBnID0gKEdyYXBoKVV0aWxpdHkuZ2V0SWRlbnRpZmlhYmxlRnJvbVN0cmVhbSh0bXBGaWxlVVJJLCBiYWlzLCBFTUZfU0VSSUFMSVpBVElPTl9PUFRJT05TLCBCSU5BUllTRVJJQUxJWkFUSU9OKTsKKwkJaWYoZyA9PSBudWxsKSAKKwkJCUFjdGl2YXRvci5sb2dFcnJvcigiUmVjaWV2ZWQgbnVsbCBncmFwaCBmcm9tICIrbm9kZVJhbmssIG5ldyBFeGNlcHRpb24oKSk7IC8vJE5PTi1OTFMtMSQKKwkJcmV0dXJuIGc7CisJfQorfQpkaWZmIC0tZ2l0IGEvZGlzdHJpYnV0ZWQvb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaHN5bmNocm9uaXplci9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9ncmFwaHN5bmNocm9uaXplci9pbXBsL1N5bmNoR3JhcGhQYXJ0aXRpb25lckltcGwuamF2YSBiL2Rpc3RyaWJ1dGVkL29yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhzeW5jaHJvbml6ZXIvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZ3JhcGhzeW5jaHJvbml6ZXIvaW1wbC9TeW5jaEdyYXBoUGFydGl0aW9uZXJJbXBsLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWVlODA1MwotLS0gL2Rldi9udWxsCisrKyBiL2Rpc3RyaWJ1dGVkL29yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhzeW5jaHJvbml6ZXIvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZ3JhcGhzeW5jaHJvbml6ZXIvaW1wbC9TeW5jaEdyYXBoUGFydGl0aW9uZXJJbXBsLmphdmEKQEAgLTAsMCArMSw0ODUgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaHN5bmNocm9uaXplci5pbXBsOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDExIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCitpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKK2ltcG9ydCBqYXZhLnV0aWwuSGFzaFNldDsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuTWFwOworaW1wb3J0IGphdmEudXRpbC5OYXZpZ2FibGVTZXQ7CitpbXBvcnQgamF2YS51dGlsLlRyZWVTZXQ7CitpbXBvcnQgamF2YS51dGlsLk1hcC5FbnRyeTsKK2ltcG9ydCBqYXZhLnV0aWwuU2V0OworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5CYXNpY0VMaXN0OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5FTGlzdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuRU1hcDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuVVJJOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLmltcGwuRU5vdGlmaWNhdGlvbkltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLlV0aWxpdHk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5JZGVudGlmaWFibGU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkR5bmFtaWNMYWJlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguRWRnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguR3JhcGg7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLk5vZGU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmltcGwuR3JhcGhQYXJ0aXRpb25lckltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLkRlY29yYXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5Lkdlb2dyYXBoaWNNYXBwZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuUmVsYXRpdmVQaHlzaWNhbFJlbGF0aW9uc2hpcExhYmVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhzeW5jaHJvbml6ZXIuR3JhcGhzeW5jaHJvbml6ZXJQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhzeW5jaHJvbml6ZXIuU3luY2hHcmFwaFBhcnRpdGlvbmVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhzeW5jaHJvbml6ZXIudXRpbC5HbG9iYWxUaWxlR2VuZXJhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhzeW5jaHJvbml6ZXIuQWN0aXZhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uam9icy5zaW11bGF0aW9uLklTaW11bGF0aW9uOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiBBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+U3luY2ggR3JhcGggUGFydGl0aW9uZXI8L2I+PC9lbT4nLiBUaGlzIGNsYXNzIHN1YmRpdmlkZXMgdGhlIGdyYXBocworICogYW1vbmcgbXVsdGlwbGUgcnVubmluZyBpbnN0YW5jZXMgb2YgU1RFTS4gVGhlIGFsZ29yaXRobSBhdHRlbXB0cyB0byBtaW5pbWl6ZSB0aGUgInN1cmZhY2UiICgjIG9mIGVkZ2VzKSBhbmQgbWF4aW1pemUgCisgKiB0aGUgdm9sdW1lICgjIG9mIG5vZGVzKSBmb3IgZWFjaCBydW5uaW5nIGluc3RhbmNlLCB3aGlsZSBhbHNvIGtlZXBpbmcgdGhlIHZvbHVtZSBhcHByb3hpbWF0ZWx5IHRoZSBzYW1lIGZvciBlYWNoCisgKiBydW5uaW5nIGluc3RhbmNlLgorICogCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIDxwPgorICogVGhlIGZvbGxvd2luZyBmZWF0dXJlcyBhcmUgaW1wbGVtZW50ZWQ6CisgKiA8dWw+CisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaHN5bmNocm9uaXplci5pbXBsLlN5bmNoR3JhcGhQYXJ0aXRpb25lckltcGwjZ2V0TnVtTm9kZXMgPGVtPk51bSBOb2RlczwvZW0+fTwvbGk+CisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaHN5bmNocm9uaXplci5pbXBsLlN5bmNoR3JhcGhQYXJ0aXRpb25lckltcGwjZ2V0Tm9kZVJhbmsgPGVtPk5vZGUgUmFuazwvZW0+fTwvbGk+CisgKiA8L3VsPgorICogPC9wPgorICoKKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIFN5bmNoR3JhcGhQYXJ0aXRpb25lckltcGwgZXh0ZW5kcyBHcmFwaFBhcnRpdGlvbmVySW1wbCBpbXBsZW1lbnRzIFN5bmNoR3JhcGhQYXJ0aXRpb25lciB7CisJCisJLyoqCisJICogVGhpcyBtYXAgc3RvcmVzIGZvciBlYWNoIGRlY29yYXRvciwgYW5vdGhlciBtYXAgd2hlcmUgdGhlIGtleSBpcyB0aGUgcHJvY2Vzc29yIElEIGFuZCB0aGUgdmFsdWUgaXMgdGhlIGxhYmVscyB1cGRhdGVkIGJ5IHRoYXQgcHJvY2Vzc29yLgorCSAqIC0xIGlzIGEgc3BlY2lhbCBrZXkgY29udGFpbmluZyBhbGwgbGFiZWxzIHVwZGF0ZWQgYnkgdGhlIGRlY29yYXRvcgorCSAqLworCXByb3RlY3RlZCBNYXA8RGVjb3JhdG9yLCBNYXA8SW50ZWdlciwgRUxpc3Q8RHluYW1pY0xhYmVsPj4+IGRlY29yYXRvclByb2Nlc3Nvck51bWJlckxhYmVsTWFwID0gbmV3IEhhc2hNYXA8RGVjb3JhdG9yLCBNYXA8SW50ZWdlciwgRUxpc3Q8RHluYW1pY0xhYmVsPj4+KCk7CisKKwkKKwkvKioKKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0TnVtTm9kZXMoKSA8ZW0+TnVtIE5vZGVzPC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNnZXROdW1Ob2RlcygpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBpbnQgTlVNX05PREVTX0VERUZBVUxUID0gMTsKKwkvKioKKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXROdW1Ob2RlcygpIDxlbT5OdW0gTm9kZXM8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI2dldE51bU5vZGVzKCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgaW50IG51bU5vZGVzID0gTlVNX05PREVTX0VERUZBVUxUOworCS8qKgorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXROb2RlUmFuaygpIDxlbT5Ob2RlIFJhbms8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI2dldE5vZGVSYW5rKCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIGludCBOT0RFX1JBTktfRURFRkFVTFQgPSAwOworCS8qKgorCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldE5vZGVSYW5rKCkgPGVtPk5vZGUgUmFuazwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZ2V0Tm9kZVJhbmsoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBpbnQgbm9kZVJhbmsgPSBOT0RFX1JBTktfRURFRkFVTFQ7CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgU3luY2hHcmFwaFBhcnRpdGlvbmVySW1wbCgpIHsKKwkJc3VwZXIoKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgRUNsYXNzIGVTdGF0aWNDbGFzcygpIHsKKwkJcmV0dXJuIEdyYXBoc3luY2hyb25pemVyUGFja2FnZS5MaXRlcmFscy5TWU5DSF9HUkFQSF9QQVJUSVRJT05FUjsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgaW50IGdldE51bU5vZGVzKCkgeworCQlyZXR1cm4gbnVtTm9kZXM7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgc2V0TnVtTm9kZXMoaW50IG5ld051bU5vZGVzKSB7CisJCWludCBvbGROdW1Ob2RlcyA9IG51bU5vZGVzOworCQludW1Ob2RlcyA9IG5ld051bU5vZGVzOworCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpCisJCQllTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBHcmFwaHN5bmNocm9uaXplclBhY2thZ2UuU1lOQ0hfR1JBUEhfUEFSVElUSU9ORVJfX05VTV9OT0RFUywgb2xkTnVtTm9kZXMsIG51bU5vZGVzKSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIGludCBnZXROb2RlUmFuaygpIHsKKwkJcmV0dXJuIG5vZGVSYW5rOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIHNldE5vZGVSYW5rKGludCBuZXdOb2RlUmFuaykgeworCQlpbnQgb2xkTm9kZVJhbmsgPSBub2RlUmFuazsKKwkJbm9kZVJhbmsgPSBuZXdOb2RlUmFuazsKKwkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQorCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgR3JhcGhzeW5jaHJvbml6ZXJQYWNrYWdlLlNZTkNIX0dSQVBIX1BBUlRJVElPTkVSX19OT0RFX1JBTkssIG9sZE5vZGVSYW5rLCBub2RlUmFuaykpOworCX0KKworCQorCisJLyoqCisJICogT3ZlcnJpZGUgdG8gY2xlYXIgbWFwCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgc2V0TnVtUHJvY2Vzc2VzKGludCBuZXdOdW1Qcm9jZXNzZXMpIHsKKwkJaWYoZ2V0TnVtUHJvY2Vzc2VzKCkgIT0gbmV3TnVtUHJvY2Vzc2VzKSAKKwkJCWRlY29yYXRvclByb2Nlc3Nvck51bWJlckxhYmVsTWFwLmNsZWFyKCk7CisJCXN1cGVyLnNldE51bVByb2Nlc3NlcyhuZXdOdW1Qcm9jZXNzZXMpOworCX0KKwkKKwlwcml2YXRlIElTaW11bGF0aW9uIGN1cnJlbnRTaW11bGF0aW9uOworCisJcHJpdmF0ZSBIYXNoTWFwPFN0cmluZywgSW50ZWdlcj4gcmFua0NhY2hlID0gbmV3IEhhc2hNYXA8U3RyaW5nLCBJbnRlZ2VyPigpOworCisJCisJLyoqCisJICogaW5pdGlhbGl6ZSB0aGUgcGFydGl0aW9uZXIgZnJvbSBhIHNpbXVsYXRpb24KKwkgKiAKKwkgKiBAcGFyYW0gcyBJU2ltdWxhdGlvbgorCSAqLworCXB1YmxpYyB2b2lkIGluaXRpYWxpemUoSVNpbXVsYXRpb24gcykgeworCQlpZihzLmVxdWFscyhjdXJyZW50U2ltdWxhdGlvbikpIHJldHVybjsgLy8gZG9uZQorCQkKKwkJSGFzaFNldDxTdHJpbmc+Y291bnRyaWVzID0gbmV3IEhhc2hTZXQ8U3RyaW5nPigpOworCQlIYXNoTWFwPFN0cmluZywgU2V0PFN0cmluZz4+IG5vZGVJZE1hcCA9IG5ldyBIYXNoTWFwPFN0cmluZywgU2V0PFN0cmluZz4+KCk7CisJCQorCQlHcmFwaCBnID0gcy5nZXRTY2VuYXJpbygpLmdldENhbm9uaWNhbEdyYXBoKCk7CisJCUVNYXA8VVJJLCBOb2RlPm5vZGVzID0gZy5nZXROb2RlcygpOworCQlmb3IoRW50cnk8VVJJLCBOb2RlPiBlbnRyeSA6IG5vZGVzLmVudHJ5U2V0KCkpIHsKKwkJCU5vZGUgbiA9IGVudHJ5LmdldFZhbHVlKCk7CQkKKwkJCVN0cmluZyBpZCA9IG4uZ2V0VVJJKCkubGFzdFNlZ21lbnQoKTsKKwkJCVN0cmluZyBjdHJ5ID0gZ2V0Q291bnRyeShpZCk7CisJCQlpZihjdHJ5ICE9IG51bGwgJiYgIG5vZGVJZE1hcC5jb250YWluc0tleShjdHJ5KSkgIC8vIEl0J3MgYSBjb3VudHJ5CisJCQkJbm9kZUlkTWFwLmdldChjdHJ5KS5hZGQoaWQpOworCQkJZWxzZSBpZihjdHJ5ICE9IG51bGwgJiYgICFub2RlSWRNYXAuY29udGFpbnNLZXkoY3RyeSkpIHsKKwkJCQlIYXNoU2V0PFN0cmluZz5pZHMgPSBuZXcgSGFzaFNldDxTdHJpbmc+KCk7CisJCQkJaWRzLmFkZChpZCk7CisJCQkJbm9kZUlkTWFwLnB1dChjdHJ5LCBpZHMpOworCQkJfQorCQl9CisJCQorCQlTZXQ8U3RyaW5nW10+IGNvbW1vbkJvcmRlcklkUGFpcnNTZXQgPSBuZXcgSGFzaFNldDxTdHJpbmdbXT4oKTsKKwkJCisJCWZvcihFbnRyeTxVUkksIEVkZ2U+IGVudHJ5OmcuZ2V0RWRnZXMoKSkgeworCQkJRWRnZSBlID0gZW50cnkuZ2V0VmFsdWUoKTsKKwkJCWlmKGUuZ2V0TGFiZWwoKSBpbnN0YW5jZW9mIFJlbGF0aXZlUGh5c2ljYWxSZWxhdGlvbnNoaXBMYWJlbCkgCisJCQkJY29udGludWU7CS8vIHNraXAKKwkJCVN0cmluZyBbXSBzdCA9IG5ldyBTdHJpbmdbMl07CisJCQlpZihlLmdldEEoKSAhPSBudWxsICYmIGUuZ2V0QigpICE9IG51bGwpIHsKKwkJCQlzdFswXSA9IGUuZ2V0QSgpLmdldFVSSSgpLmxhc3RTZWdtZW50KCk7CisJCQkJc3RbMV0gPSBlLmdldEIoKS5nZXRVUkkoKS5sYXN0U2VnbWVudCgpOworCQkJCWNvbW1vbkJvcmRlcklkUGFpcnNTZXQuYWRkKHN0KTsKKwkJCX0KKwkJfQorCQkvLyBOb3cgZGV0ZXJtaW5lIHRoZSBwYXJ0aXRpb25pbmcgdXNpbmcgSmFtaWUncyBhbGdvcml0aG0KKwkJCisJCQorCQlHbG9iYWxUaWxlR2VuZXJhdG9yIGd0ZyA9IG5ldyBHbG9iYWxUaWxlR2VuZXJhdG9yKHRoaXMuZ2V0TnVtTm9kZXMoKSwgbm9kZUlkTWFwLCBjb21tb25Cb3JkZXJJZFBhaXJzU2V0KTsKKwkJCisJCUxpc3Q8U2V0PFN0cmluZz4+cGFydGl0aW9uZWROb2RlcyA9IGd0Zy5nZXRQYXJpdGlvbmVkTm9kZXMoKTsKKwkJCisJCWludCByYW5rID0gMDsKKwkJZm9yKFNldDxTdHJpbmc+IGFsbElkczpwYXJ0aXRpb25lZE5vZGVzKSB7CisJCQlmb3IoU3RyaW5nIGlkOmFsbElkcykgCisJCQkJcmFua0NhY2hlLnB1dChpZCwgcmFuayk7CisJCQkrK3Jhbms7CisJCX0KKwkJY3VycmVudFNpbXVsYXRpb24gPSBzOworCX0KKwkKKwkJLyoqCisJCSAqIFJldHVybiB0aGUgY291bnRyeSBhIGdpdmVuIGlkIGlzIGluc2lkZQorCQkgKiBAcGFyYW0gaWQgMiBvciAzIGxldHRlciBhZG1pbiBjb2RlCisJCSAqIEByZXR1cm4KKwkJICovCisJcHJpdmF0ZSBTdHJpbmcgZ2V0Q291bnRyeShTdHJpbmcgaWQpIHsKKwkJaWYoVXRpbGl0eS5rZXlMZXZlbChpZCkgPT0gMCApIC8vIEl0J3MgYSBjb3VudHJ5CisJCQlyZXR1cm4gaWQ7CisJCWVsc2UgaWYoVXRpbGl0eS5rZXlMZXZlbChpZCkgPT0gLTEgKSAvLyBaWloKKwkJCSByZXR1cm4gaWQ7CisJCWVsc2UgeworCQkJLy8gSXQncyBoaWdoZXIgYWRtaW4gdGhhbiBsZXZlbCAwLiBXZSBuZWVkIHRvIGZpbmQgdGhlIGNvdW50cnkgdGhlIGNvZGUgaXMgaW4KKwkJCVN0cmluZyBjdHJjb2RlID0gR2VvZ3JhcGhpY01hcHBlci5nZXRBbHBoYTMoaWQuc3Vic3RyaW5nKDAsIDIpKTsKKwkJCXJldHVybiBjdHJjb2RlOworCQl9CisJfQorCQorCS8qKgorCSAqIAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBFTGlzdDxEeW5hbWljTGFiZWw+IHBhcnRpdGlvbkRlY29yYXRvckxhYmVscyhEZWNvcmF0b3IgZGVjb3JhdG9yLCBpbnQgcHJvY2Vzc1JhbmspIHsKKwkJc3luY2hyb25pemVkKGRlY29yYXRvclByb2Nlc3Nvck51bWJlckxhYmVsTWFwKSB7CisKKwkJCWlmKGRlY29yYXRvclByb2Nlc3Nvck51bWJlckxhYmVsTWFwICE9IG51bGwgJiYgZGVjb3JhdG9yUHJvY2Vzc29yTnVtYmVyTGFiZWxNYXAuY29udGFpbnNLZXkoZGVjb3JhdG9yKSAgJiYKKwkJCQkJZGVjb3JhdG9yUHJvY2Vzc29yTnVtYmVyTGFiZWxNYXAuZ2V0KGRlY29yYXRvcikuY29udGFpbnNLZXkocHJvY2Vzc1JhbmspKSB7CisJCQkJRUxpc3Q8RHluYW1pY0xhYmVsPiByZXMgPSBkZWNvcmF0b3JQcm9jZXNzb3JOdW1iZXJMYWJlbE1hcC5nZXQoZGVjb3JhdG9yKS5nZXQocHJvY2Vzc1JhbmspOworCQkJCXJldHVybiByZXM7CisJCQl9CisKKwkJCXN5bmNocm9uaXplZCh0aGlzKSB7CisJCQkJRUxpc3Q8RHluYW1pY0xhYmVsPiB0ZW1wID0gbmV3IEJhc2ljRUxpc3Q8RHluYW1pY0xhYmVsPigpOyAKKworCQkJCS8vIEZpbmQgdGhlIG5vZGUgYW5kIHBhcnRpdGlvbiB0aGUgbGFiZWxzIGFjY29yZGluZyB0byB0aGVpciBub2RlLgorCisJCQkJLy8gVHJlZVNldCBndWFyYW50ZWVzIE8obG9nKG4pKSBhZGQvY29udGFpbnMKKwkJCQlUcmVlU2V0PFN0cmluZz5ub2RlVVJJcyA9IG5ldyBUcmVlU2V0PFN0cmluZz4oKTsKKworCQkJCWZvcihEeW5hbWljTGFiZWwgbGFiOmRlY29yYXRvci5nZXRMYWJlbHNUb1VwZGF0ZSgpKSB7CisJCQkJCVN0cmluZyB1cmkgPSBsYWIuZ2V0SWRlbnRpZmlhYmxlKCkuZ2V0VVJJKCkudG9TdHJpbmcoKTsKKwkJCQkJaWYoIW5vZGVVUklzLmNvbnRhaW5zKHVyaSkgJiYgCisJCQkJCQkJZ2V0Tm9kZVJhbmsoKSA9PSBnZXRJZGVudGlmaWFibGVSYW5rKGxhYi5nZXRJZGVudGlmaWFibGUoKSkpICAKKwkJCQkJCW5vZGVVUklzLmFkZCh1cmkpOworCQkJCX0KKworCQkJCWludCBzaXplID0gbm9kZVVSSXMuc2l6ZSgpOworCQkJCWlmKHByb2Nlc3NSYW5rID09IDAgfHwgc2l6ZSA+IDEpIHsgLy8gSWYgc2l6ZSBpcyAxIGFuZCBwcm9jZXNzUmFuayBpcyAwIHRoZSBzaW5nbGUgbm9kZSBnZXRzIGFzc2lnbmVkIHRvIHRoZSBmaXJzdCBDUFUuCisJCQkJCWludCBub2Rlc1BlclBhcnRpdGlvbiA9IHNpemUgLyBnZXROdW1Qcm9jZXNzZXMoKTsKKwkJCQkJaW50IHN0YXJ0ID0gIHByb2Nlc3NSYW5rKm5vZGVzUGVyUGFydGl0aW9uOworCQkJCQlpbnQgZW5kOworCQkJCQlpZihwcm9jZXNzUmFuayA9PSBnZXROdW1Qcm9jZXNzZXMoKSAtMSkgZW5kID0gc2l6ZTsgLy8gVGhlIGxhc3QgdGhyZWFkcyBncmFicyBhbGwgbm9kZXMgdW50aWwgdGhlIGxhc3Qgb25lCisJCQkJCWVsc2UgZW5kID0gc3RhcnQgKyBub2Rlc1BlclBhcnRpdGlvbjsKKworCQkJCQlTdHJpbmcgZmlyc3Q9bm9kZVVSSXMuZmlyc3QoKTsKKwkJCQkJZm9yKGludCBpPTA7aTxzdGFydDsrK2kpIGZpcnN0ID0gbm9kZVVSSXMuaGlnaGVyKGZpcnN0KTsKKwkJCQkJU3RyaW5nIGxhc3QgPSBmaXJzdDsKKwkJCQkJZm9yKGludCBpPXN0YXJ0O2k8ZW5kLTE7KytpKQlsYXN0ID0gbm9kZVVSSXMuaGlnaGVyKGxhc3QpOworCisJCQkJCU5hdmlnYWJsZVNldDxTdHJpbmc+cHJvY2Vzc1VSSXMgPSAgbm9kZVVSSXMuc3ViU2V0KGZpcnN0LCB0cnVlLCBsYXN0LCB0cnVlKTsKKworCQkJCQlmb3IoRHluYW1pY0xhYmVsIGRsOmRlY29yYXRvci5nZXRMYWJlbHNUb1VwZGF0ZSgpKSB7CisJCQkJCQlpZihwcm9jZXNzVVJJcy5jb250YWlucyhkbC5nZXRJZGVudGlmaWFibGUoKS5nZXRVUkkoKS50b1N0cmluZygpKSkgeworCQkJCQkJCXRlbXAuYWRkKGRsKTsKKwkJCQkJCX0gCisJCQkJCX0KKwkJCQl9CisJCQkJTWFwPEludGVnZXIsIEVMaXN0PER5bmFtaWNMYWJlbD4+IHBhcnRpdGlvbk1hcCA9IG51bGw7CisKKwkJCQlpZihkZWNvcmF0b3JQcm9jZXNzb3JOdW1iZXJMYWJlbE1hcC5jb250YWluc0tleShkZWNvcmF0b3IpKQorCQkJCQlwYXJ0aXRpb25NYXAgPSBkZWNvcmF0b3JQcm9jZXNzb3JOdW1iZXJMYWJlbE1hcC5nZXQoZGVjb3JhdG9yKTsKKwkJCQllbHNlIHsKKwkJCQkJcGFydGl0aW9uTWFwID0gbmV3IEhhc2hNYXA8SW50ZWdlciwgRUxpc3Q8RHluYW1pY0xhYmVsPj4oKTsKKwkJCQkJZGVjb3JhdG9yUHJvY2Vzc29yTnVtYmVyTGFiZWxNYXAucHV0KGRlY29yYXRvciwgcGFydGl0aW9uTWFwKTsKKwkJCQl9CisJCQkJcGFydGl0aW9uTWFwLnB1dChwcm9jZXNzUmFuaywgdGVtcCk7CisJCQkJQWN0aXZhdG9yLmxvZ0luZm9ybWF0aW9uKCJEZWNvcmF0b3IgZGVjb3JhdG9yIHVwZGF0ZXMgIit0ZW1wLnNpemUoKSsiIGxhYmVscyIpOworCQkJCXJldHVybiB0ZW1wOworCQkJfQorCQl9CisJfQorCisJLyoqCisJICogU2FtZSBhcyBhYm92ZSBidXQgcmV0dXJuIGFsbCBsYWJlbHMgaGFuZGxlZCBieSB0aGlzIGRlY29yYXRvciBvbiB0aGlzIG5vZGUKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgRUxpc3Q8RHluYW1pY0xhYmVsPiBwYXJ0aXRpb25EZWNvcmF0b3JMYWJlbHMoRGVjb3JhdG9yIGRlY29yYXRvcikgeworCQlpZihkZWNvcmF0b3JQcm9jZXNzb3JOdW1iZXJMYWJlbE1hcCAhPSBudWxsICYmIGRlY29yYXRvclByb2Nlc3Nvck51bWJlckxhYmVsTWFwLmNvbnRhaW5zS2V5KGRlY29yYXRvcikgICYmCisJCQkJZGVjb3JhdG9yUHJvY2Vzc29yTnVtYmVyTGFiZWxNYXAuZ2V0KGRlY29yYXRvcikuY29udGFpbnNLZXkoLTEpKSB7IC8vIC0xIGlzIHNwZWNpYWwga2V5LCBpdCBtZWFucyBhbGwgbGFiZWxzCisJCQlFTGlzdDxEeW5hbWljTGFiZWw+IHJlcyA9IGRlY29yYXRvclByb2Nlc3Nvck51bWJlckxhYmVsTWFwLmdldChkZWNvcmF0b3IpLmdldCgtMSk7CisJCQlyZXR1cm4gcmVzOworCQl9CisJCQorCQlzeW5jaHJvbml6ZWQodGhpcykgeworCQkJRUxpc3Q8RHluYW1pY0xhYmVsPiB0ZW1wID0gbmV3IEJhc2ljRUxpc3Q8RHluYW1pY0xhYmVsPigpOyAKKwkJCQkKKwkJCS8vIEZpbmQgdGhlIG5vZGUgYW5kIHBhcnRpdGlvbiB0aGUgbGFiZWxzIGFjY29yZGluZyB0byB0aGVpciBub2RlLgorCQkJCisJCQlBcnJheUxpc3Q8U3RyaW5nPm5vZGVVUklzID0gbmV3IEFycmF5TGlzdDxTdHJpbmc+KCk7CisJCQlmb3IoRHluYW1pY0xhYmVsIGxhYjpkZWNvcmF0b3IuZ2V0TGFiZWxzVG9VcGRhdGUoKSkgeworCQkJCVN0cmluZyB1cmkgPSBsYWIuZ2V0SWRlbnRpZmlhYmxlKCkuZ2V0VVJJKCkudG9TdHJpbmcoKTsKKwkJCQlpZighbm9kZVVSSXMuY29udGFpbnModXJpKSAmJiAKKwkJCQkJCWdldE5vZGVSYW5rKCkgPT0gZ2V0SWRlbnRpZmlhYmxlUmFuayhsYWIuZ2V0SWRlbnRpZmlhYmxlKCkpKSAKKwkJCQkJdGVtcC5hZGQobGFiKTsKKwkJCX0KKwkJCQkJCQorCQkJTWFwPEludGVnZXIsIEVMaXN0PER5bmFtaWNMYWJlbD4+IHBhcnRpdGlvbk1hcCA9IG51bGw7CisJCQkKKwkJCWlmKGRlY29yYXRvclByb2Nlc3Nvck51bWJlckxhYmVsTWFwLmNvbnRhaW5zS2V5KGRlY29yYXRvcikpCisJCQkJcGFydGl0aW9uTWFwID0gZGVjb3JhdG9yUHJvY2Vzc29yTnVtYmVyTGFiZWxNYXAuZ2V0KGRlY29yYXRvcik7CisJCQllbHNlIHsKKwkJCQlwYXJ0aXRpb25NYXAgPSBuZXcgSGFzaE1hcDxJbnRlZ2VyLCBFTGlzdDxEeW5hbWljTGFiZWw+PigpOworCQkJCWRlY29yYXRvclByb2Nlc3Nvck51bWJlckxhYmVsTWFwLnB1dChkZWNvcmF0b3IsIHBhcnRpdGlvbk1hcCk7CisJCQl9CisJCQlwYXJ0aXRpb25NYXAucHV0KC0xLCB0ZW1wKTsKKwkJCXJldHVybiB0ZW1wOworCQl9CisJfQorCQorCQorCS8qKgorCSAqIEdpdmVuIGFuIGlkZW50aWZpYWJsZSwgcmV0dXJuIHRoZSByYW5rIChub2RlIG51bWJlcikgd2hlcmUgdGhlIGlkZW50aWZpYWJsZQorCSAqIGlzIG1hbmFnZWQuCisJICogCisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlwdWJsaWMgaW50IGdldElkZW50aWZpYWJsZVJhbmsoSWRlbnRpZmlhYmxlIGlkZW50aWZpYWJsZSkgeworCQlTdHJpbmcga2V5ID0gaWRlbnRpZmlhYmxlLmdldFVSSSgpLmxhc3RTZWdtZW50KCk7CisJCWlmKHJhbmtDYWNoZS5jb250YWluc0tleShrZXkpKSAKKwkJCXJldHVybiByYW5rQ2FjaGUuZ2V0KGtleSk7CisJCQorCQlBY3RpdmF0b3IubG9nRXJyb3IoIlVuYWJsZSB0byBmaW5kIHNlcnZlciByYW5rIGZvciBub2RlICIra2V5KyIuIEFzc2lnbmluZyB0byBmaXJzdCBzZXJ2ZXIiLCBuZXcgRXhjZXB0aW9uKCkpOworCQlyZXR1cm4gMDsKKwkJLy8gUmFuZG9tCisvLwkJaW50IGhhc2ggPSBpZGVudGlmaWFibGUuZ2V0VVJJKCkudG9TdHJpbmcoKS5oYXNoQ29kZSgpOworLy8JCWhhc2ggPSBNYXRoLmFicyhoYXNoKTsKKy8vCQlpbnQgbm9kZSA9IGhhc2ggJSBnZXROdW1Ob2RlcygpOworLy8JCXJldHVybiBub2RlOworCisJCS8vIFVTQSBNZXhpY28KKy8vCQlpZigoaWRlbnRpZmlhYmxlLmdldFVSSSgpLmxhc3RTZWdtZW50KCkuc3RhcnRzV2l0aCgiTVgiKSB8fCBpZGVudGlmaWFibGUuZ2V0VVJJKCkubGFzdFNlZ21lbnQoKS5zdGFydHNXaXRoKCJNRVgiKSkpIHJldHVybiAxOyAKKy8vCQlyZXR1cm4gMDsgLy8gZXZlcnl0aGluZyBlbHNlIGlzIG9uIHRoZSBmaXJzdCBub2RlLgorCX0KKworCisJCisJCisJLyoqCisJICogIENoZWNrIGlmIHRoZSBpZGVudGlmaWFibGUgcGFzc2VkIGluIGlzIG1hbmFnZWQgYnkgdGhpcyBTVEVNIGluc3RhbmNlCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIGJvb2xlYW4gaXNNYW5hZ2VkKElkZW50aWZpYWJsZSBpZGVudGlmaWFibGUpIHsKKwkJcmV0dXJuIHRoaXMuZ2V0Tm9kZVJhbmsoKSA9PSB0aGlzLmdldElkZW50aWZpYWJsZVJhbmsoaWRlbnRpZmlhYmxlKTsKKwl9CisJCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIE9iamVjdCBlR2V0KGludCBmZWF0dXJlSUQsIGJvb2xlYW4gcmVzb2x2ZSwgYm9vbGVhbiBjb3JlVHlwZSkgeworCQlzd2l0Y2ggKGZlYXR1cmVJRCkgeworCQkJY2FzZSBHcmFwaHN5bmNocm9uaXplclBhY2thZ2UuU1lOQ0hfR1JBUEhfUEFSVElUSU9ORVJfX05VTV9OT0RFUzoKKwkJCQlyZXR1cm4gZ2V0TnVtTm9kZXMoKTsKKwkJCWNhc2UgR3JhcGhzeW5jaHJvbml6ZXJQYWNrYWdlLlNZTkNIX0dSQVBIX1BBUlRJVElPTkVSX19OT0RFX1JBTks6CisJCQkJcmV0dXJuIGdldE5vZGVSYW5rKCk7CisJCX0KKwkJcmV0dXJuIHN1cGVyLmVHZXQoZmVhdHVyZUlELCByZXNvbHZlLCBjb3JlVHlwZSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgZVNldChpbnQgZmVhdHVyZUlELCBPYmplY3QgbmV3VmFsdWUpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJCWNhc2UgR3JhcGhzeW5jaHJvbml6ZXJQYWNrYWdlLlNZTkNIX0dSQVBIX1BBUlRJVElPTkVSX19OVU1fTk9ERVM6CisJCQkJc2V0TnVtTm9kZXMoKEludGVnZXIpbmV3VmFsdWUpOworCQkJCXJldHVybjsKKwkJCWNhc2UgR3JhcGhzeW5jaHJvbml6ZXJQYWNrYWdlLlNZTkNIX0dSQVBIX1BBUlRJVElPTkVSX19OT0RFX1JBTks6CisJCQkJc2V0Tm9kZVJhbmsoKEludGVnZXIpbmV3VmFsdWUpOworCQkJCXJldHVybjsKKwkJfQorCQlzdXBlci5lU2V0KGZlYXR1cmVJRCwgbmV3VmFsdWUpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGVVbnNldChpbnQgZmVhdHVyZUlEKSB7CisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7CisJCQljYXNlIEdyYXBoc3luY2hyb25pemVyUGFja2FnZS5TWU5DSF9HUkFQSF9QQVJUSVRJT05FUl9fTlVNX05PREVTOgorCQkJCXNldE51bU5vZGVzKE5VTV9OT0RFU19FREVGQVVMVCk7CisJCQkJcmV0dXJuOworCQkJY2FzZSBHcmFwaHN5bmNocm9uaXplclBhY2thZ2UuU1lOQ0hfR1JBUEhfUEFSVElUSU9ORVJfX05PREVfUkFOSzoKKwkJCQlzZXROb2RlUmFuayhOT0RFX1JBTktfRURFRkFVTFQpOworCQkJCXJldHVybjsKKwkJfQorCQlzdXBlci5lVW5zZXQoZmVhdHVyZUlEKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgYm9vbGVhbiBlSXNTZXQoaW50IGZlYXR1cmVJRCkgeworCQlzd2l0Y2ggKGZlYXR1cmVJRCkgeworCQkJY2FzZSBHcmFwaHN5bmNocm9uaXplclBhY2thZ2UuU1lOQ0hfR1JBUEhfUEFSVElUSU9ORVJfX05VTV9OT0RFUzoKKwkJCQlyZXR1cm4gbnVtTm9kZXMgIT0gTlVNX05PREVTX0VERUZBVUxUOworCQkJY2FzZSBHcmFwaHN5bmNocm9uaXplclBhY2thZ2UuU1lOQ0hfR1JBUEhfUEFSVElUSU9ORVJfX05PREVfUkFOSzoKKwkJCQlyZXR1cm4gbm9kZVJhbmsgIT0gTk9ERV9SQU5LX0VERUZBVUxUOworCQl9CisJCXJldHVybiBzdXBlci5lSXNTZXQoZmVhdHVyZUlEKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkgeworCQlpZiAoZUlzUHJveHkoKSkgcmV0dXJuIHN1cGVyLnRvU3RyaW5nKCk7CisKKwkJU3RyaW5nQnVmZmVyIHJlc3VsdCA9IG5ldyBTdHJpbmdCdWZmZXIoc3VwZXIudG9TdHJpbmcoKSk7CisJCXJlc3VsdC5hcHBlbmQoIiAobnVtTm9kZXM6ICIpOworCQlyZXN1bHQuYXBwZW5kKG51bU5vZGVzKTsKKwkJcmVzdWx0LmFwcGVuZCgiLCBub2RlUmFuazogIik7CisJCXJlc3VsdC5hcHBlbmQobm9kZVJhbmspOworCQlyZXN1bHQuYXBwZW5kKCcpJyk7CisJCXJldHVybiByZXN1bHQudG9TdHJpbmcoKTsKKwl9CisKK30gLy9TeW5jaEdyYXBoUGFydGl0aW9uZXJJbXBsCmRpZmYgLS1naXQgYS9kaXN0cmlidXRlZC9vcmcuZWNsaXBzZS5zdGVtLmdyYXBoc3luY2hyb25pemVyL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2dyYXBoc3luY2hyb25pemVyL3V0aWwvQ291bnRyeUdyYXBoUGFydGl0aW9uUGxhbm5lci5qYXZhIGIvZGlzdHJpYnV0ZWQvb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaHN5bmNocm9uaXplci9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9ncmFwaHN5bmNocm9uaXplci91dGlsL0NvdW50cnlHcmFwaFBhcnRpdGlvblBsYW5uZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYTMwYWYxCi0tLSAvZGV2L251bGwKKysrIGIvZGlzdHJpYnV0ZWQvb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaHN5bmNocm9uaXplci9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9ncmFwaHN5bmNocm9uaXplci91dGlsL0NvdW50cnlHcmFwaFBhcnRpdGlvblBsYW5uZXIuamF2YQpAQCAtMCwwICsxLDYyMCBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmdyYXBoc3luY2hyb25pemVyLnV0aWw7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTEgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgamF2YS5pby5CdWZmZXJlZFJlYWRlcjsKK2ltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOworaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW07CitpbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbVJlYWRlcjsKK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OworaW1wb3J0IGphdmEudXRpbC5BcnJheXM7CitpbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7CitpbXBvcnQgamF2YS51dGlsLkhhc2hTZXQ7CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CitpbXBvcnQgamF2YS51dGlsLk1hcDsKK2ltcG9ydCBqYXZhLnV0aWwuU2V0OworaW1wb3J0IGphdmEudXRpbC5TdHJpbmdUb2tlbml6ZXI7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuVVJJOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5yZXNvdXJjZS5pbXBsLkV4dGVuc2libGVVUklDb252ZXJ0ZXJJbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhzeW5jaHJvbml6ZXIuQWN0aXZhdG9yOworCitwdWJsaWMgY2xhc3MgQ291bnRyeUdyYXBoUGFydGl0aW9uUGxhbm5lciB7CisJCisJc3RhdGljIGludCBOVU1fQ09VTlRSSUVTID0gLTE7CisJc3RhdGljIGludFtdW10gY29tbW9uQm9yZGVyTWF0cml4ID0gbnVsbDsKKwlzdGF0aWMgZmluYWwgU3RyaW5nIFNUQVRTX0ZJTEUgPSAid29ybGRQYXJ0aW9uaW5nU3RhdHMuY3N2IjsgLy8kTk9OLU5MUy0xJAorCXN0YXRpYyBmaW5hbCBTdHJpbmcgQ09ERVNfRklMRSA9ICJjb3VudHJ5Q29kZU1hcC5jc3YiOyAvLyROT04tTkxTLTEkCisJCisJCisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFVSSV9QUkVGSVggPSAicGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3N0YXRpc3RpY3MvIjsKKwkvLyBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgVVJJX1BSRUZJWCA9ICIvVXNlcnMvamhrYXVmL0RvY3VtZW50cy93b3Jrc3BhY2Uvb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9zdGF0aXN0aWNzLyI7CisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgVVJJIENPREVTX0ZJTEVfVVJJID0gVVJJLmNyZWF0ZVVSSShVUklfUFJFRklYICsgQ09ERVNfRklMRSk7CisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgVVJJIFNUQVRTX0ZJTEVfVVJJID0gVVJJLmNyZWF0ZVVSSShVUklfUFJFRklYICsgU1RBVFNfRklMRSk7CisJCisJc3RhdGljIE1hcDxTdHJpbmcsU3RyaW5nPiBjb3VudHJ5Q29kZTJ0bzMgPSBuZXcgSGFzaE1hcDxTdHJpbmcsU3RyaW5nPigpOworCXN0YXRpYyBNYXA8U3RyaW5nLFN0cmluZz4gY291bnRyeUNvZGUzdG8yID0gbmV3IEhhc2hNYXA8U3RyaW5nLFN0cmluZz4oKTsKKwkKKwlzdGF0aWMgZmluYWwgTGlzdDxDb3VudHJ5PiB3b3JsZENvdW50cnlMaXN0ID0gbmV3IEFycmF5TGlzdDxDb3VudHJ5PigpOworCXN0YXRpYyBmaW5hbCBNYXA8U3RyaW5nLENvdW50cnk+IHdvcmxkQ291bnRyeU1hcCA9IG5ldyBIYXNoTWFwPFN0cmluZyxDb3VudHJ5PigpOworCQorCS8qKgorCSAqIAorCSAqLworCXB1YmxpYyBDb3VudHJ5R3JhcGhQYXJ0aXRpb25QbGFubmVyKCkgeworCQkvLyBzdGVwIDAsIHJlZ2VuZXJhdGUgdGhlIHN0YXRzIGV2ZXJ5IHRpbWUgaW4gY2FzZSB0aGUgU1RFTSBkYXRhIGNoYW5nZXMKKwkJLy9Xb3JsZFBhcnRpdGlvbmluZ1N0YXRzIHdwcyA9IG5ldyBXb3JsZFBhcnRpdGlvbmluZ1N0YXRzKCk7CisJCQorCQkvLyB0aGVuIHByZXBhcmUgdG8gZG8gdGhlIHBsYW4KKwkJbWFwQ29kZXMoKTsKKwkJbWFwQ291bnRyeVN0YXRzKCk7CisJfQorCisJLyoqCisJICogTWFpbiBtZXRob2QgZm9yIHRlc3Rpbmcgb25seQorCSAqIEBwYXJhbSBhcmdzCisJICovCisJQFN1cHByZXNzV2FybmluZ3MoIm5scyIpCisJcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgeworCQkKKwkJLyoKKwkJICogRm9yIHRlc3Rpbmcgb25seQorCQkgKi8KKwkJU3RyaW5nW10gdGVzdCA9CXsgCisJCQkJIkFGRyIsIkFHTyIsIkFJQSIsIkFMQSIsIkFMQiIsIkFORCIsIkFOVCIsIkFSRSIsIkFSRyIsIkFSTSIsIkFTTSIsIkFUQSIsIkFURiIsIkFURyIsCisJCQkJIkFVUyIsIkFVVCIsIkFaRSIsIkJESSIsIkJFTCIsIkJFTiIsIkJGQSIsIkJHRCIsIkJHUiIsIkJIUiIsIkJIUyIsIkJJSCIsIkJMUiIsIkJMWiIsCisJCQkJIkJNVSIsIkJPTCIsIkJSQSIsIkJSQiIsIkJSTiIsIkJUTiIsIkJWVCIsIkJXQSIsIkNBRiIsIkNBTiIsIkNDSyIsIkNIRSIsIkNITCIsIkNITiIsCisJCQkJIkNJViIsIkNNUiIsIkNPRCIsIkNPRyIsIkNPSyIsIkNPTCIsIkNPTSIsIkNQViIsIkNSSSIsIkNVQiIsIkNYUiIsIkNZTSIsIkNZUCIsIkNaRSIsCisJCQkJIkRFVSIsIkRKSSIsIkRNQSIsIkROSyIsIkRPTSIsIkRaQSIsIkVDVSIsIkVHWSIsIkVSSSIsIkVTSCIsIkVTUCIsIkVTVCIsIkVUSCIsIkZJTiIsCisJCQkJIkZKSSIsIkZMSyIsIkZSQSIsIkZSTyIsIkZTTSIsIkdBQiIsIkdCUiIsIkdFTyIsIkdHWSIsIkdIQSIsIkdJQiIsIkdJTiIsIkdMUCIsIkdNQiIsCisJCQkJIkdOQiIsIkdOUSIsIkdSQyIsIkdSRCIsIkdSTCIsIkdUTSIsIkdVRiIsIkdVTSIsIkdVWSIsIkhLRyIsIkhNRCIsIkhORCIsIkhSViIsIkhUSSIsCisJCQkJIkhVTiIsIklETiIsIklNTiIsIklORCIsIklPVCIsIklSTCIsIklSTiIsIklSUSIsIklTTCIsIklTUiIsIklUQSIsIkpBTSIsIkpFWSIsIkpPUiIsCisJCQkJIkpQTiIsIktBWiIsIktFTiIsIktHWiIsIktITSIsIktJUiIsIktOQSIsIktPUiIsIktXVCIsIkxBTyIsIkxCTiIsIkxCUiIsIkxCWSIsIkxDQSIsCisJCQkJIkxJRSIsIkxLQSIsIkxTTyIsIkxUVSIsIkxVWCIsIkxWQSIsIk1BQyIsIk1BUiIsIk1DTyIsIk1EQSIsIk1ERyIsIk1EViIsIk1FWCIsIk1ITCIsCisJCQkJIk1LRCIsIk1MSSIsIk1MVCIsIk1NUiIsIk1ORSIsIk1ORyIsIk1OUCIsIk1PWiIsIk1SVCIsIk1TUiIsIk1UUSIsIk1VUyIsIk1XSSIsIk1ZUyIsCisJCQkJIk1ZVCIsIk5BTSIsIk5DTCIsIk5FUiIsIk5GSyIsIk5HQSIsIk5JQyIsIk5JVSIsIk5MRCIsIk5PUiIsIk5QTCIsIk5SVSIsIk5aTCIsIk9NTiIsCisJCQkJIlBBSyIsIlBBTiIsIlBDTiIsIlBFUiIsIlBITCIsIlBMVyIsIlBORyIsIlBPTCIsIlBSSSIsIlBSSyIsIlBSVCIsIlBSWSIsIlBTRSIsIlBZRiIsCisJCQkJIlFBVCIsIlJFVSIsIlJPVSIsIlJVUyIsIlJXQSIsIlNBVSIsIlNETiIsIlNFTiIsIlNHUCIsIlNHUyIsIlNITiIsIlNKTSIsIlNMQiIsIlNMRSIsCisJCQkJIlNMViIsIlNNUiIsIlNPTSIsIlNQTSIsIlNSQiIsIlNUUCIsIlNVUiIsIlNWSyIsIlNWTiIsIlNXRSIsIlNXWiIsIlNZQyIsIlNZUiIsIlRDQSIsCisJCQkJIlRDRCIsIlRHTyIsIlRIQSIsIlRKSyIsIlRLTCIsIlRLTSIsIlRMUyIsIlRNUCIsIlRPTiIsIlRUTyIsIlRVTiIsIlRVUiIsIlRVViIsIlRXTiIsCisJCQkJIlRaQSIsIlVHQSIsIlVLUiIsIlVNSSIsIlVSWSIsIlVTQSIsIlVaQiIsIlZBVCIsIlZDVCIsIlZFTiIsIlZHQiIsIlZJUiIsIlZOTSIsIlZVVCIsCisJCQkJIldMRiIsIldTTSIsIllFTSIsIlpBRiIsIlpNQiIsIlpXRSIgfTsKKwkJCQorCQkKKwkJU2V0PFN0cmluZz4gdGVzdFNldCA9IG5ldyBIYXNoU2V0PFN0cmluZz4oKTsKKwkJZm9yIChpbnQgaSA9IDA7IGkgPCB0ZXN0Lmxlbmd0aDsgaSArKykgeworCQkJdGVzdFNldC5hZGQodGVzdFtpXSk7CisJCX0KKwkKKwkJQ291bnRyeUdyYXBoUGFydGl0aW9uUGxhbm5lciBjZ3BwID0gbmV3IENvdW50cnlHcmFwaFBhcnRpdGlvblBsYW5uZXIoKTsKKworCQlpbnQgbnVtU2VydmVycyA9IDc7CisJCQorCQlMaXN0PFBhcnRpdGlvbkdyb3VwPiBwbGFuID0gY2dwcC5nZXRQbGFuKG51bVNlcnZlcnMsIHRlc3RTZXQpOworCQlMaXN0PFNldDxTdHJpbmc+PiBwbGFuQ29kZXMgPSBjZ3BwLnBsYW5Bc0NvZGVTdHJpbmdzKHBsYW4pOworCQkKKwkJQWN0aXZhdG9yLmxvZ0luZm9ybWF0aW9uKCJwbGFubmluZyBjb21wbGV0ZS4uLi4gYXNzaWdubWVudHMgYXJlOiIpOworCQlmb3IoaW50IGkgPSAwOyBpIDwgcGxhbi5zaXplKCk7IGkgKyspIHsKKwkJCQorCQkJUGFydGl0aW9uR3JvdXAgcGcgPSBwbGFuLmdldChpKTsKKwkJCVNldDxTdHJpbmc+IGNvdW50cnlTZXQgPSBwbGFuQ29kZXMuZ2V0KGkpOworCQkJZG91YmxlIHN1cmZhY2UgPSBwZy5jb3VudFVucmVzb2x2ZWRCb3JkZXJFZGdlcygpOworCQkJZG91YmxlIHN1cmZhY2VUb1ZvbHVtZSA9IHN1cmZhY2UvKGRvdWJsZSlwZy50b3RhbE5vZGVzOworCQkJQWN0aXZhdG9yLmxvZ0luZm9ybWF0aW9uKCJzZXJ2ZXIgbnVtYmVyOiAiK2krIiAgc2l6ZSBpcyAiK3BnLnRvdGFsTm9kZXMrIiBleHRlcm5hbCBFZGdlcyA9ICIrKGludClzdXJmYWNlKyIgc3VyZmFjZVRvVm9sdW1lUmF0aW89ICIrc3VyZmFjZVRvVm9sdW1lKTsKKwkJCQorCQkJU3RyaW5nIHMgPSAiIjsKKwkJCWZvcihTdHJpbmcgY3RyeTogY291bnRyeVNldCkgIHsKKwkJCQlzICs9IGN0cnkrIiAgIjsKKwkJCX0vLyBmb3IgYWxsIGNvdW50cmllcyBvbiBncm91cAorCQkJQWN0aXZhdG9yLmxvZ0luZm9ybWF0aW9uKCIgICAgICAiK3MpOworCQl9Ly8gZm9yIGFsbCBncm91cHMKKwkJCisJCS8vbm93IHRoZSB0aGUgbWF0cml4IG9mIG1lc3NhZ2Ugc2l6ZSBncm91cCB0byBncm91cAorCQlpbnRbXVtdIHBnTWF0cml4ID0gZ2V0UGFydGl0aW9uR3JvdXBCb3JkZXJNYXRyaXgocGxhbik7CisJCUFjdGl2YXRvci5sb2dJbmZvcm1hdGlvbigiIik7CisJCUFjdGl2YXRvci5sb2dJbmZvcm1hdGlvbigiIik7CisJCUFjdGl2YXRvci5sb2dJbmZvcm1hdGlvbigiUGFydGl0aW9uR3JvdXAgTWF0cml4Iik7CisJCUFjdGl2YXRvci5sb2dJbmZvcm1hdGlvbigiIik7CisJCWZvciAoaW50IGkgPSAwOyBpIDwgcGxhbi5zaXplKCk7IGkgKyspIHsKKwkJCVN0cmluZyBzID0gIiI7CisJCQlmb3IgKGludCBqID0gMDsgaiA8IHBsYW4uc2l6ZSgpOyBqICsrKSB7CisJCQkJaWYocGdNYXRyaXhbaV1bal08MTApIHMgKz0gIiAiOworCQkJCWlmKHBnTWF0cml4W2ldW2pdPDEwMCkgcyArPSAiICI7CisJCQkJcyArPSBwZ01hdHJpeFtpXVtqXSsiICAiOworCQkJfQorCQkJQWN0aXZhdG9yLmxvZ0luZm9ybWF0aW9uKHMpOworCQl9CisJfQorCQorCS8qKgorCSAqIEdlbmVyYXRlIGEgcGFydGl0aW9uIHBsYW4gZm9yIGEgY29sbGVjdGlvbiBvZiBjb3VudHJpZXMgdG8gcnVuCisJICogIDAuIHZhbGlkYXRlIHRoZSBudW1iZXIgb2Ygc2VydmVycworICAJICogIDEuIGluaXRpYWxpemUgYW4gZW1wdHkgcGxhbiBmb3IgbnVtU2VydmVycworCSAqICAyLiBhZGQgYWxsIGNvdW50cmllcyB0byBhbiB1bmFzc2lnbmVkIHNldAorCSAqICAzLiBnZXQgdGhlIGNvdW50cmllcyBzb3J0ZWQgbGFyZ2UgdG8gc21hbGwKKwkgKiAgNC4gR0VUIHRoZSB0b3RhbCBudW1iZXIgb2Ygbm9kZXMgZm9yIHRoZSBFTlRJUkUgY29sbGVjdGlvbiB0byBydW4KKwkgKiAgNS4gZXN0aW1hdGUgdGhlIGFwcHJveGltYXRlIHRhcmdldCBzaXplIHBlciBQYXJ0aXRpb24gR3JvdXAKKwkgKiAgNi4gYWRkIHRoZSBudW1TZXJ2ZXJzIGxhcmdlc3QgY291bnRyaWVzIGluIG9yZGVyIGxhcmdlIHRvIHNtYWxsCisJICogIDcuIHdlIGhhdmUgYXNzaWduZWQgbnVtU2VydmVycyBjb3VudHJpZXMKKwkgKiAgOC4gaXRlcmF0ZSB0aHJvdWdoIHRoZSB1bmFzc2lnbmVkIGNvdW50cmllcyB1bnRpbCB3ZSBoYXZlIG5vIG1vcmUKKwkgKiAgOS4gY2hlY2sgbWF4IHBnIHNpemUgaGVyZQorCSAqICAxMC4gZ2V0IHRoZSBoaWdoZXN0IHN1cmZhY2UgYXJlYSBmb3IgYWxsIGNhbmRpZGF0ZXMgd3J0IFRISVMgZ3JvdXAgcGcKKwkgKiAgMTEuIGlzIGl0IHRoZSBvdmVyYWxsIExhcmdlc3Q/PworCSAqICAxMi4gaWYgd2UgYXJlIG5vdCByZWR1Y2luZyBzdXJmYWNlIGFyZWEgd2UgbmVlZCB0byBjaGFuZ2UgdGhlIHBsYW4KKwkgKiAgMTMuIGFzc2lnbiB0aGUgc2VsZWN0ZWQgY291bnRyeQorCSAqICAxNC4gcmVtb3ZlIGl0IGZyb20gdGhlIHVuYXNzaWduZWQgbGlzdCAKKwkgKiAgCisJICogQHBhcmFtIG51bVNlcnZlcnMKKwkgKiBAcGFyYW0gdW5hc3NpZ25lZFNldAorCSAqIEByZXR1cm4KKwkgKi8KKwlAU3VwcHJlc3NXYXJuaW5ncygibmxzIikKKwlwdWJsaWMgTGlzdDxQYXJ0aXRpb25Hcm91cD4gZ2V0UGxhbihpbnQgbnVtU2VydmVycywgZmluYWwgU2V0PFN0cmluZz4gY291bnRyaWVzKSB7CisJCWlmKG51bVNlcnZlcnMgPiBjb3VudHJpZXMuc2l6ZSgpKSB7CisJCQludW1TZXJ2ZXJzID0gY291bnRyaWVzLnNpemUoKTsKKwkJCUFjdGl2YXRvci5sb2dJbmZvcm1hdGlvbigiQ291bnRyeUdyYXBoUGF0aXRpb25QbGFubmVyLmdldFBsYW4oKTogV2FybmluZywgbnVtYmVyIG9mIHNlcnZlcnMgY2FuIG5vdCBleGNlZWQgbnVtYmVyIG9mIGNvdW50cmllcy4gVXNpbmcgIitudW1TZXJ2ZXJzKyIgc2VydmVycyBmb3Igbm93LiIpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKKwkJfQorCQlMaXN0PFBhcnRpdGlvbkdyb3VwPiBwYXJ0aXRpb25QbGFuID0gbmV3IEFycmF5TGlzdDxQYXJ0aXRpb25Hcm91cD4oKTsKKwkJLy8xLiBpbml0IGFuIGVtcHR5IHBsYW4KKwkJZm9yKGludCBpID0gMDsgaSA8IG51bVNlcnZlcnM7IGkgKyspIHsKKwkJCVBhcnRpdGlvbkdyb3VwIGNvdW50cnlHcm91cCA9IG5ldyBQYXJ0aXRpb25Hcm91cCgpOyAvLyBzZXQgb2YgdGhyZWUgbGV0dGVyIGNvdW50cnkgY29kZXMgPSBwbGFuIGZvciBvbmUgc2VydmVyOworCQkJcGFydGl0aW9uUGxhbi5hZGQoY291bnRyeUdyb3VwKTsKKwkJfQorCQkKKwkJLy8gMi4gYWRkIGFsbCBjb3VudHJpZXMgdG8gYW4gdW5hc3NpZ25lZCBzZXQKKwkJU2V0PFN0cmluZz4gdW5hc3NpZ25lZFNldCA9IG5ldyBIYXNoU2V0PFN0cmluZz4oKTsKKwkJdW5hc3NpZ25lZFNldC5hZGRBbGwoY291bnRyaWVzKTsKKwkJCisJCS8vIDMuIGdldCB0aGUgY291bnRyaWVzIHNvcnRlZCBsYXJnZSB0byBzbWFsbAorCQlDb3VudHJ5W10gdW5hc3NpZ25lZENvdW50cmllcyA9IGdldFNvcnRlZENvdW50cmllcyh1bmFzc2lnbmVkU2V0KTsKKwkJCisJCS8vNC4gR0VUIHRoZSB0b3RhbCBudW1iZXIgb2Ygbm9kZXMgZm9yIHRoZSBFTlRJUkUgY29sbGVjdGlvbiB0byBydW4KKwkJaW50IHRvdGFsUHJvYmxlbVNpemUgPSAwOworCQlmb3IoaW50IGkgPSAwOyBpIDwgdW5hc3NpZ25lZENvdW50cmllcy5sZW5ndGg7IGkgKyspIHsKKwkJCXRvdGFsUHJvYmxlbVNpemUrPSB1bmFzc2lnbmVkQ291bnRyaWVzW2ldLm51bU5vZGVzOworCQl9CisJCQorCQkvLyA1LiBlc3RpbWF0ZSB0aGUgYXBwcm94aW1hdGUgdGFyZ2V0IHNpemUgcGVyIFBhcnRpdGlvbiBHcm91cAorCQlBY3RpdmF0b3IubG9nSW5mb3JtYXRpb24oIkNvdW50cnlHcmFwaFBhdGl0aW9uUGxhbm5lci5nZXRQbGFuKCk6IEFQUFJPWElNQVRFIHRvdGFsIHByb2JsZW0gc2l6ZSA9ICIrdG90YWxQcm9ibGVtU2l6ZSk7CisJCWludCB0YXJnZXRHcm91cFNpemUgPSB0b3RhbFByb2JsZW1TaXplL251bVNlcnZlcnM7IC8vIGFwcHJveGltYXRlIHRhcmdldAorCQlBY3RpdmF0b3IubG9nSW5mb3JtYXRpb24oIkNvdW50cnlHcmFwaFBhdGl0aW9uUGxhbm5lci5nZXRQbGFuKCk6IEFQUFJPWElNQVRFIHRhcmdldCBwYXJ0aXRpb24gc2l6ZSA9ICIrdGFyZ2V0R3JvdXBTaXplKTsKKwkJCisJCS8vIDYuIGFkZCB0aGUgbnVtU2VydmVycyBsYXJnZXN0IGNvdW50cmllcyBpbiBvcmRlciBsYXJnZSB0byBzbWFsbAorCQlmb3IoaW50IGkgPSAwOyBpIDwgbnVtU2VydmVyczsgaSArKykgeworCQkJUGFydGl0aW9uR3JvdXAgcGFydGl0aW9uR3JvdXAgPSBwYXJ0aXRpb25QbGFuLmdldChpKTsKKwkJCXBhcnRpdGlvbkdyb3VwLmFkZCh1bmFzc2lnbmVkQ291bnRyaWVzW2ldKTsKKwkJCUFjdGl2YXRvci5sb2dJbmZvcm1hdGlvbigiIitpKyI6IGFkZGVkICIrdW5hc3NpZ25lZENvdW50cmllc1tpXS50aHJlZUxldHRlckNvZGUpOworCQkJdW5hc3NpZ25lZFNldC5yZW1vdmUodW5hc3NpZ25lZENvdW50cmllc1tpXS50aHJlZUxldHRlckNvZGUpOworCQl9CisJCQorCQkvLyA3LiB3ZSBoYXZlIGFzc2lnbmVkIG51bVNlcnZlcnMgY291bnRyaWVzCisJCQorCQkKKwkJLy8gOC4gaXRlcmF0ZSB0aHJvdWdoIHRoZSB1bmFzc2lnbmVkIGNvdW50cmllcyB1bnRpbCB3ZSBoYXZlIG5vIG1vcmUKKwkJaW50IG92ZXJBbGxNYXhTdXJmYWNlID0gLTE7CisJCWludCBwbGFuVG9QaWNrID0gLTE7CisJCXdoaWxlKHVuYXNzaWduZWRTZXQuc2l6ZSgpID4gMCkgeworCQkJQ291bnRyeVtdIGNvdW50cmllc1RvUHJvY2Vzcz1nZXRTb3J0ZWRDb3VudHJpZXModW5hc3NpZ25lZFNldCk7CisJCQlvdmVyQWxsTWF4U3VyZmFjZSA9IC0xOyAvLyByZXNldAorCQkJLy8gZm9yIGVhY2ggcGFydGl0aW9uIGdyb3VwCisJCQlmb3IoaW50IGkgPSAwOyBpIDwgcGFydGl0aW9uUGxhbi5zaXplKCk7IGkgKyspIHsKKwkJCQkvLyBpdGVyYXRlIHRocm91Z2ggZXZlcnkgdW5hc3NpZ25lZCBjb3VudHJ5CisJCQkJUGFydGl0aW9uR3JvdXAgcGcgPSBwYXJ0aXRpb25QbGFuLmdldChpKTsKKwkJCQlwZy5uZXh0Q2FuZGlkYXRlTWVtYmVyPW51bGw7CisJCQkJLy8gOS4gY2hlY2sgbWF4IHBnIHNpemUgaGVyZSAKKwkJCQlpZihwZy50b3RhbE5vZGVzIDwgdGFyZ2V0R3JvdXBTaXplKSB7CisJCQkJCS8vIDEwLiBnZXQgdGhlIGhpZ2hlc3Qgc3VyZmFjZSBhcmVhIGZvciBhbGwgY2FuZGlkYXRlcyB3cnQgVEhJUyBncm91cCBwZworCQkJCQlpbnQgaGlnaGVzdFN1cmZhY2UgPSBwZy5nZXRMYXJnZXN0Qm9yZGVyRm9yQ291bnRyeVNldChjb3VudHJpZXNUb1Byb2Nlc3MpOworCQkJCQkKKwkJCQkJLy8gMTEuIGlzIGl0IHRoZSBvdmVyYWxsIExhcmdlc3Q/PworCQkJCQlpZihoaWdoZXN0U3VyZmFjZSA+PSBvdmVyQWxsTWF4U3VyZmFjZSkgeworCQkJCQkJb3ZlckFsbE1heFN1cmZhY2UgPSBoaWdoZXN0U3VyZmFjZTsKKwkJCQkJCXBsYW5Ub1BpY2sgPSBpOworCQkJCQl9Ly8gaWYgbmV3IGJlc3QgcGljaworCQkJCX0vLyBpZiBwYXJ0aXRpb24gZ3JvdXAgaXMgbm90IHRvbyBiaWcgYWxyZWFkeQorCQkJfS8vIGZvciBhbGwgcGFydGl0aW9uR3JvdXBzCisJCQkKKwkJCQorCQkJLy8vLy8vLy8vLyBubyBzdXJmYWNlICAvLy8vLy8vCisJCQkvLyAxMi4gaWYgd2UgYXJlIG5vdCByZWR1Y2luZyBzdXJmYWNlIGFyZWEgd2UgbmVlZCB0byBjaGFuZ2UgdGhlIHBsYW4KKwkJCS8vIGFuZCBpbnN0ZWFkIGFkZCB0aGUgbmV4dCAobGFyZ2VzdCkgY291bnRyeSB0byB0aGUgU21hbGxlc3QgUGFydGl0aW9uR3JvdXAKKwkJCWlmKG92ZXJBbGxNYXhTdXJmYWNlPD0wKSB7CisJCQkJcGxhblRvUGljayA9IGdldFNtYWxsZXN0R3JvdXBJbmRleChwYXJ0aXRpb25QbGFuKTsKKwkJCQlQYXJ0aXRpb25Hcm91cCBwZyA9IHBhcnRpdGlvblBsYW4uZ2V0KHBsYW5Ub1BpY2spOworCQkJCXBnLm5leHRDYW5kaWRhdGVNZW1iZXI9Y291bnRyaWVzVG9Qcm9jZXNzWzBdOyAvLyBwaWNrIHRoZSBMQVJHRVNUIHJlbWFpbmluZyBjb3VudHJ5CisJCQl9CisJCQkvLy8vLy8vLy8vIG5vIHN1cmZhY2UgIC8vLy8vLy8KKwkJCQorCQkJCisJCQkvLyBhc3NlcnQKKwkJCWlmKHBsYW5Ub1BpY2sgPCAwKSB7CisJCQkJQWN0aXZhdG9yLmxvZ0luZm9ybWF0aW9uKCJIb3VzdG9uIHdlIGhhdmUgYSBwcm9ibGVtIik7CisJCQkJU3lzdGVtLmV4aXQoMSk7CisJCQl9CisJCQkKKwkJCS8vIGRpZCB3ZSBnZXQgYSBwbGFuPworCQkJaWYocGxhblRvUGljayA+PTApIHsKKwkJCQlQYXJ0aXRpb25Hcm91cCBuZXh0R3JvdXAgPSBwYXJ0aXRpb25QbGFuLmdldChwbGFuVG9QaWNrKTsKKwkJCQlDb3VudHJ5IHNlbGVjdGVkID0gbmV4dEdyb3VwLm5leHRDYW5kaWRhdGVNZW1iZXI7CisJCQkJCisJCQkJaWYoc2VsZWN0ZWQ9PW51bGwpIHsKKwkJCQkJQWN0aXZhdG9yLmxvZ0luZm9ybWF0aW9uKCJIb3VzdG9uIHdlIGhhdmUgYSBwcm9ibGVtIik7CisJCQkJCVN5c3RlbS5leGl0KDEpOworCQkJCX0KKwkJCQkvLzEzLiBhc3NpZ24gdGhlIHNlbGVjdGVkIGNvdW50cnkKKwkJCQluZXh0R3JvdXAuYWRkKHNlbGVjdGVkKTsKKwkJCQkvLzE0LiByZW1vdmUgaXQgZnJvbSB0aGUgdW5hc3NpZ25lZCBsaXN0IAorCQkJCXVuYXNzaWduZWRTZXQucmVtb3ZlKHNlbGVjdGVkLnRocmVlTGV0dGVyQ29kZSk7CisJCQl9CisJCQlpZih1bmFzc2lnbmVkU2V0LnNpemUoKT09MCkgYnJlYWs7CisJCQkKKwkJCQorCQl9Ly8gV0hJTEUgd2UgaGF2ZSBtb3JlIHVuYXNzaWduZWQgY291bnRyaWVzIHRvIHByb2Nlc3MKKwkJCQkKKwkJcmV0dXJuIHBhcnRpdGlvblBsYW47CisJfQorCQorCQorCS8qKgorCSAqIAorCSAqIEBwYXJhbSBwYXJ0aXRpb25QbGFuCisJICogQHJldHVybgorCSAqLworCXB1YmxpYyBMaXN0PFNldDxTdHJpbmc+PiBwbGFuQXNDb2RlU3RyaW5ncyhMaXN0PFBhcnRpdGlvbkdyb3VwPiBwYXJ0aXRpb25QbGFuKSB7CisJCUxpc3Q8U2V0PFN0cmluZz4+IHBsYW5MaXN0ID0gbmV3IEFycmF5TGlzdDxTZXQ8U3RyaW5nPj4oKTsKKwkJZm9yKGludCBpID0gMDsgaSA8IHBhcnRpdGlvblBsYW4uc2l6ZSgpOyBpICsrKSB7CisJCQkvLyBpdGVyYXRlIHRocm91Z2ggZXZlcnkgdW5hc3NpZ25lZCBjb3VudHJ5CisJCQlQYXJ0aXRpb25Hcm91cCBwZyA9IHBhcnRpdGlvblBsYW4uZ2V0KGkpOworCQkJcGxhbkxpc3QuYWRkKHBnLmdldENvdW50cnlDb2RlcygpKTsKKwkJfS8vIGZvciBhbGwgcGFydGl0aW9uR3JvdXBzCisJCQorCQlyZXR1cm4gcGxhbkxpc3Q7CisJfQorCQorCQorCQorCS8qKgorCSAqIGdldHMgdGhlIHNtYWxsZXN0IGN1cnJlbnQKKwkgKiBAcGFyYW0gcGFydGl0aW9uUGxhbgorCSAqIEByZXR1cm4KKwkgKi8KKwlwdWJsaWMgaW50IGdldFNtYWxsZXN0R3JvdXBJbmRleChMaXN0PFBhcnRpdGlvbkdyb3VwPiBwYXJ0aXRpb25QbGFuKSB7CisJCWludCBzbWFsbGVzdCA9IEludGVnZXIuTUFYX1ZBTFVFOworCQlpbnQgaW5kZXggPSAtMTsKKwkJZm9yKGludCBpID0gMDsgaSA8IHBhcnRpdGlvblBsYW4uc2l6ZSgpOyBpICsrKSB7CisJCQkvLyBpdGVyYXRlIHRocm91Z2ggZXZlcnkgdW5hc3NpZ25lZCBjb3VudHJ5CisJCQlQYXJ0aXRpb25Hcm91cCBwZyA9IHBhcnRpdGlvblBsYW4uZ2V0KGkpOworCQkJaWYocGcudG90YWxOb2RlcyA8IHNtYWxsZXN0KSB7CisJCQkJc21hbGxlc3QgPSBwZy50b3RhbE5vZGVzOworCQkJCWluZGV4ID0gaTsKKwkJCX0vLyBpZiBwYXJ0aXRpb24gZ3JvdXAgCisJCX0vLyBmb3IgYWxsIHBhcnRpdGlvbkdyb3VwcworCQlyZXR1cm4gaW5kZXg7CisJfQorCQorCQorCQorCQorCS8qKgorCSAqIFNvcnRlZCBDb3VudHJ5W10gbGFyZ2UgdG8gc21hbGwKKwkgKiBAcGFyYW0gY291bnRyeVNldAorCSAqIEByZXR1cm4KKwkgKi8KKwlwdWJsaWMgQ291bnRyeVtdIGdldFNvcnRlZENvdW50cmllcyhTZXQ8U3RyaW5nPiBjb3VudHJ5U2V0KSB7CisJCUNvdW50cnlbXSBzb3J0ZWRDb3VudHJpZXMgPSBuZXcgQ291bnRyeVtjb3VudHJ5U2V0LnNpemUoKV07CisJCWludCBpY291bnQgPSAwOworCQlmb3IoU3RyaW5nIGN0cnk6IGNvdW50cnlTZXQpICB7CisJCQlDb3VudHJ5IGMgPSB3b3JsZENvdW50cnlNYXAuZ2V0KGN0cnkpOworCQkJaWYoYyA9PSBudWxsKQorCQkJCVN5c3RlbS5lcnIucHJpbnRsbigiVW5hYmxlIHRvIGZpbmQgY291bnRyeSAiK2N0cnkpOworCQkJc29ydGVkQ291bnRyaWVzW2ljb3VudF0gPSBjOworCQkJaWNvdW50ICsrOworCQl9CisJCUFycmF5cy5zb3J0KHNvcnRlZENvdW50cmllcyk7CisJCXJldHVybiBzb3J0ZWRDb3VudHJpZXM7CisJfQorCQorCS8qKgorCSAqIEdldHMgYSBjb21wYXRpYmxlIGlucHV0IHN0cmVhbSBmb3IgdGhlIGdpdmVuIFVSSQorCSAqIEByZXR1cm4KKwkgKiBAdGhyb3dzIElPRXhjZXB0aW9uCisJICovCisJcHJpdmF0ZSBJbnB1dFN0cmVhbSBnZXRJbnB1dFN0cmVhbUZvclVSSShVUkkgdXJpKSB0aHJvd3MgSU9FeGNlcHRpb24KKwl7CisJCXJldHVybiBuZXcgRXh0ZW5zaWJsZVVSSUNvbnZlcnRlckltcGwoKS5jcmVhdGVJbnB1dFN0cmVhbSh1cmkpOworCX0KKworCS8qKgorCSAqIHJlYWQgaW4gYSBsaXN0IG9mIGFsbCBjb3VudHJpZXMKKwkgKi8KKwlAU3VwcHJlc3NXYXJuaW5ncygibmxzIikKKwlwdWJsaWMgdm9pZCBtYXBDb2RlcygpIHsKKwkJCisJCSAgU3RyaW5nIHJlY29yZDsgIAorICAgICAgICAgIGludCByZWNDb3VudCA9IDA7CisgICAgICAgICAgQnVmZmVyZWRSZWFkZXIgZCA9IG51bGw7CisgICAgICAgICAgdHJ5IHsgCisgICAgICAgIAkgIGQgPSBuZXcgQnVmZmVyZWRSZWFkZXIobmV3IElucHV0U3RyZWFtUmVhZGVyKGdldElucHV0U3RyZWFtRm9yVVJJKENPREVTX0ZJTEVfVVJJKSkpOworCisgICAgICAgICAgICAgIHdoaWxlICggKHJlY29yZD1kLnJlYWRMaW5lKCkpICE9IG51bGwgKSB7IAorICAgICAgICAgICAgICAgICByZWNDb3VudCsrOyAKKyAgICAgICAgICAgICAgICAgU3RyaW5nVG9rZW5pemVyIHN0ID0gbmV3IFN0cmluZ1Rva2VuaXplcihyZWNvcmQgKTsKKyAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgIEBTdXBwcmVzc1dhcm5pbmdzKCJ1bnVzZWQiKQorCQkJCSBTdHJpbmcgbmFtZSA9IHN0Lm5leHRUb2tlbigiLCIpOworICAgICAgICAgICAgICAgICAKKwkJCQkgU3RyaW5nIHR3b0xldHRlciA9IHN0Lm5leHRUb2tlbigiLCIpOworCQkJCSBTdHJpbmcgdGhyZWVMZXR0ZXIgPSBzdC5uZXh0VG9rZW4oIiwiKTsKKwkJCQkgCisJCQkJIGNvdW50cnlDb2RlMnRvMy5wdXQodHdvTGV0dGVyLHRocmVlTGV0dGVyKTsKKwkJCQkgY291bnRyeUNvZGUzdG8yLnB1dCh0aHJlZUxldHRlcix0d29MZXR0ZXIpOworICAgICAgICAgICAgICB9IC8vIGxpbmVzCisgICAgICAgICAgICAgCisgICAgICAgICAgIH0gY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsgCisgICAgICAgICAgICAgIC8vIGNhdGNoIGlvIGVycm9ycyBmcm9tIEZpbGVJbnB1dFN0cmVhbSBvciByZWFkTGluZSgpIAorICAgICAgICAgICAgICBBY3RpdmF0b3IubG9nSW5mb3JtYXRpb24oIiBJT0V4Y2VwdGlvbiBlcnJvciEiICsgZS5nZXRNZXNzYWdlKCkpOyAKKyAgICAgICAgICAgfSBmaW5hbGx5IHsKKyAgICAgICAgCSAgIHRyeSB7CisgICAgICAgIAkJICAgZC5jbG9zZSgpOworICAgICAgICAJICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsgfQorICAgICAgICAgICB9CisJfSAvLyByZWFkIGNvZGVzCisJCisJLyoqCisJICogcmVhZCBpbiBhIGxpc3Qgb2YgYWxsIGNvdW50cmllcworCSAqLworCUBTdXBwcmVzc1dhcm5pbmdzKCJubHMiKQorCXB1YmxpYyB2b2lkIG1hcENvdW50cnlTdGF0cygpIHsKKwkJICBpbnQgY291bnRyeUNvdW50ID0gMDsKKwkJICBTdHJpbmcgcmVjb3JkOyAgCisgICAgICAgICAgaW50IHJlY0NvdW50ID0gMDsKKyAgICAgICAgICAKKyAgICAgICAgICBCdWZmZXJlZFJlYWRlciBkID0gbnVsbDsKKyAgICAgICAgICAKKyAgICAgICAgICB0cnkgeyAgICAgICAgIAkgIAorICAgICAgICAJICBkID0gbmV3IEJ1ZmZlcmVkUmVhZGVyKG5ldyBJbnB1dFN0cmVhbVJlYWRlcihnZXRJbnB1dFN0cmVhbUZvclVSSShTVEFUU19GSUxFX1VSSSkpKTsKKworICAgICAgICAgICAgICB3aGlsZSAoIChyZWNvcmQ9ZC5yZWFkTGluZSgpKSAhPSBudWxsICkgeyAKKyAgICAgICAgICAgICAgICAgcmVjQ291bnQrKzsgCisgICAgICAgICAgICAgICAgIFN0cmluZ1Rva2VuaXplciBzdCA9IG5ldyBTdHJpbmdUb2tlbml6ZXIocmVjb3JkLCIsIik7ICAKKyAgICAgICAgICAgICAgICAgCisJCQkJIFN0cmluZyB0aHJlZUxldHRlciA9IHN0Lm5leHRUb2tlbigpOworCQkJCSBpbnQgbnVtTm9kZXMgPSAobmV3IEludGVnZXIoc3QubmV4dFRva2VuKCkudHJpbSgpKSkuaW50VmFsdWUoKTsKKwkJCQkgaWYoY29tbW9uQm9yZGVyTWF0cml4ID09IG51bGwpIHsKKwkJCQkJIE5VTV9DT1VOVFJJRVMgPSBzdC5jb3VudFRva2VucygpOworCQkJCQkgY29tbW9uQm9yZGVyTWF0cml4ID0gbmV3IGludFtOVU1fQ09VTlRSSUVTXVtOVU1fQ09VTlRSSUVTXTsKKwkJCQkgfQorCQkJCSBmb3IgKGludCBpID0gMDsgaSA8IE5VTV9DT1VOVFJJRVM7IGkgKyspIHsKKwkJCQkJIGludCB2YWwgPSAobmV3IEludGVnZXIoc3QubmV4dFRva2VuKCkudHJpbSgpKSkuaW50VmFsdWUoKTsKKwkJCQkJIGNvbW1vbkJvcmRlck1hdHJpeFtjb3VudHJ5Q291bnRdW2ldID0gdmFsOworCQkJCSB9CisJCQkJIAorCQkJCSBTdHJpbmcgdHdvTGV0dGVyID0gY291bnRyeUNvZGUzdG8yLmdldCh0aHJlZUxldHRlcik7CisJCQkJIENvdW50cnkgY3RyeSA9IG5ldyBDb3VudHJ5KHRocmVlTGV0dGVyLCB0d29MZXR0ZXIsIGNvdW50cnlDb3VudCwgbnVtTm9kZXMpOworCQkJCSAKKwkJCQkgd29ybGRDb3VudHJ5TGlzdC5hZGQoY291bnRyeUNvdW50LGN0cnkpOworCQkJCSB3b3JsZENvdW50cnlNYXAucHV0KHRocmVlTGV0dGVyLCBjdHJ5KTsKKwkJCQkgY291bnRyeUNvdW50Kys7CisJCQkJIAorCQkJCSAKKyAgICAgICAgICAgICAgfSAvLyBsaW5lcworICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgQWN0aXZhdG9yLmxvZ0luZm9ybWF0aW9uKCJyZWFkIG1hdHJpeCAiK2NvdW50cnlDb3VudCsiIHggIitOVU1fQ09VTlRSSUVTKTsKKyAgICAgICAgICAgICAgaWYoY291bnRyeUNvdW50ICE9IE5VTV9DT1VOVFJJRVMpIHsKKyAgICAgICAgICAgIAkgIEFjdGl2YXRvci5sb2dJbmZvcm1hdGlvbigiRkFJTCAiK2NvdW50cnlDb3VudCsiICE9ICIrTlVNX0NPVU5UUklFUyk7CisgICAgICAgICAgICAJICBTeXN0ZW0uZXhpdCgxKTsKKyAgICAgICAgICAgICAgfQorCisgICAgICAgICAgIH0gY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsgCisgICAgICAgICAgICAgIC8vIGNhdGNoIGlvIGVycm9ycyBmcm9tIEZpbGVJbnB1dFN0cmVhbSBvciByZWFkTGluZSgpIAorICAgICAgICAgICAgICBBY3RpdmF0b3IubG9nSW5mb3JtYXRpb24oIiBJT0V4Y2VwdGlvbiBlcnJvciEiICsgZS5nZXRNZXNzYWdlKCkpOyAKKyAgICAgICAgICAgfSBmaW5hbGx5IHsKKyAgICAgICAgCSAgIHRyeSB7CisgICAgICAgIAkJICAgZC5jbG9zZSgpOworICAgICAgICAJICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsgfTsKKyAgICAgICAgICAgfQorCX0gLy8gcmVhZCBjb2RlcworCQorCS8qKgorCSAqIGlubmVyIGNsYXNzCisJICogQGF1dGhvciBqaGthdWYKKwkgKgorCSAqLworCXB1YmxpYyBjbGFzcyBDb3VudHJ5IGltcGxlbWVudHMgQ29tcGFyYWJsZTxDb3VudHJ5PiB7CisJCQorCQlTdHJpbmcgdGhyZWVMZXR0ZXJDb2RlOworCQlTdHJpbmcgdHdvTGV0dGVyQ29kZTsKKwkJaW50IGluZGV4OworCQlpbnQgbnVtTm9kZXM7CisJCQorCQkKKwkJCisJCQorCQkKKwkJCisJCS8qKgorCQkgKiAKKwkJICogQHBhcmFtIHRocmVlTGV0dGVyQ29kZQorCQkgKiBAcGFyYW0gdHdvTGV0dGVyQ29kZQorCQkgKiBAcGFyYW0gaW5kZXgKKwkJICovCisJCXB1YmxpYyBDb3VudHJ5KFN0cmluZyB0aHJlZUxldHRlckNvZGUsIFN0cmluZyB0d29MZXR0ZXJDb2RlLCBpbnQgaW5kZXgsIGludCBudW1Ob2RlcykgeworCQkJdGhpcy50aHJlZUxldHRlckNvZGUgPSB0aHJlZUxldHRlckNvZGU7CisJCQl0aGlzLnR3b0xldHRlckNvZGUgPSB0d29MZXR0ZXJDb2RlOworCQkJdGhpcy5pbmRleCA9IGluZGV4OworCQkJdGhpcy5udW1Ob2RlcyA9IG51bU5vZGVzOworCQl9CisKKworCisJCS8qKgorCQkgKiBjb21wYXJlcyB0d28gY291bnRyaWVzIGZvciBzb3J0CisJCSAqIEBwYXJhbSBvdGhlciBjb3VudHJ5CisJCSAqLworCQlwdWJsaWMgaW50IGNvbXBhcmVUbyhDb3VudHJ5IG90aGVyKSB7CisJCQkKKwkJCS8vIGV4Y2VwdGlvbiAtIGxhcmdlIGNvdW50cnkgd2l0aCBaRVJPIG5laWdoYm9ycworCQkJLy8gVE9ETyBjaGVjayB0aGUgU1RFTSBkYXRhIGhlcmUKKwkJCS8vIHdlIG1hbnkgbm90ZSBiZSB1c2luZyBhbGwgdGhlc2UgUE5HIG5vZGVzCisJCQkvLyB0aGV5IGhhdmUgbm8gbmVpZ2hib3JzCisJCQlpZih0aGlzLnRocmVlTGV0dGVyQ29kZS5lcXVhbHNJZ25vcmVDYXNlKCJQTkciKSkgcmV0dXJuIDE7IC8vJE5PTi1OTFMtMSQKKwkJCQorCQkJaWYodGhpcy5udW1Ob2RlcyA+IG90aGVyLm51bU5vZGVzKSB7CisJCQkJcmV0dXJuIC0xOworCQkJfSBlbHNlIGlmKHRoaXMubnVtTm9kZXMgPCBvdGhlci5udW1Ob2RlcykgeworCQkJCXJldHVybiAxOworCQkJfSBlbHNlIAlyZXR1cm4gMDsKKwkJfQorCQkKKwl9CisJCisJLyoqCisJICogaW5uZXIgY2xhc3MKKwkgKiBAYXV0aG9yIGpoa2F1ZgorCSAqCisJICovCisJcHVibGljIGNsYXNzIFBhcnRpdGlvbkdyb3VwIHsKKwkJCisJCVNldDxDb3VudHJ5PiBjb3VudHJ5R3JvdXAgPSBuZXcgSGFzaFNldDxDb3VudHJ5PigpOworCQkKKwkJQ291bnRyeSBuZXh0Q2FuZGlkYXRlTWVtYmVyID0gbnVsbDsKKwkJCisJCWludCB0b3RhbE5vZGVzID0gMDsKKwkKKwkJLyoqCisJCSAqIAorCQkgKi8KKwkJcHVibGljIFBhcnRpdGlvbkdyb3VwKCkgeworCQl9CisJCQorCQkvKioKKwkJICogcmV0dXJucyB0aGUgZ3JvdXAgYXMgc2V0IG9mIHRocmVlIGxldHRlciBjb3VudHJ5IGNvZGVzCisJCSAqIEByZXR1cm4KKwkJICovCisJCVNldDxTdHJpbmc+IGdldENvdW50cnlDb2RlcygpIHsKKwkJCVNldDxTdHJpbmc+IHBsYW5TZXQgPSBuZXcgSGFzaFNldDxTdHJpbmc+KCk7CisJCQlmb3IoQ291bnRyeSBjdHJ5OiBjb3VudHJ5R3JvdXApICB7CisJCQkJcGxhblNldC5hZGQoY3RyeS50aHJlZUxldHRlckNvZGUpOworCQkJfQorCQkJcmV0dXJuIHBsYW5TZXQ7CisJCX0KKworCQkvKioKKwkJICogCisJCSAqIEBwYXJhbSBjb3VudHJ5CisJCSAqLworCQlwdWJsaWMgdm9pZCBhZGQoQ291bnRyeSBjb3VudHJ5KSB7CisJCQljb3VudHJ5R3JvdXAuYWRkKGNvdW50cnkpOworCQkJdG90YWxOb2RlcyArPSBjb3VudHJ5Lm51bU5vZGVzOworCQl9CisKKwkJLyoqCisJCSAqIAorCQkgKiBAcGFyYW0gb3RoZXIKKwkJICogQHJldHVybgorCQkgKi8KKwkJcHVibGljIGludCBnZXRDb21tb25Cb3JkZXJBcmVhKENvdW50cnkgb3RoZXIpIHsKKwkJCWludCBzdXJmYWNlQXJlYSA9IDA7CisJCQlmb3IoQ291bnRyeSBjdHJ5OiBjb3VudHJ5R3JvdXApICB7CisJCQkJc3VyZmFjZUFyZWEgKz0gY29tbW9uQm9yZGVyTWF0cml4W2N0cnkuaW5kZXhdW290aGVyLmluZGV4XTsKKwkJCX0KKwkJCXJldHVybiBzdXJmYWNlQXJlYTsKKwkJfQorCQkKKwkJCisJCQorCQkKKwkJCisJCS8qKgorCQkgKiAKKwkJICogQ291bnQgdGhlIHVucmVzb2x2ZWQgb3IgZXh0ZXJuYWwgZWRnZXMgaW4gYSBjb3VudHJ5R3JvdXAKKwkJICogQHJldHVybgorCQkgKi8KKwkJcHVibGljIGludCBjb3VudFVucmVzb2x2ZWRCb3JkZXJFZGdlcygpIHsKKwkJCWludCBzdXJmYWNlQXJlYSA9IDA7CisJCQkvLyBmb3IgZXZlcnkgY291bnRyeSBpbiB0aGlzIGdyb3VwCisJCQlmb3IoQ291bnRyeSBjdHJ5OiBjb3VudHJ5R3JvdXApICB7CisJCQkJCisJCQkJLy8gYW5kIGZvciBldmVyeSBwb3NzaWJsZSBuZWlnaGJvciBjb3VudHJ5CisJCQkJZm9yKGludCBqID0gMDsgaiA8IE5VTV9DT1VOVFJJRVM7IGogKyspIHsKKwkJCQkJLy8gbm90IGRpYWdvbmFsIGVsZW1lbnQKKwkJCQkJaWYoaiAhPSBjdHJ5LmluZGV4KSB7CisJCQkJCQlDb3VudHJ5IHRhcmdldCA9IHdvcmxkQ291bnRyeUxpc3QuZ2V0KGopOworCQkJCQkJLy8gSUYgY291bnRyeSBqIGlzIE5PVCBpbiB0aGlzIGdyb3VwCisJCQkJCQlpZighY291bnRyeUdyb3VwLmNvbnRhaW5zKHRhcmdldCkpIHsKKwkJCQkJCQlzdXJmYWNlQXJlYSArPSBjb21tb25Cb3JkZXJNYXRyaXhbal1bY3RyeS5pbmRleF07CisJCQkJCQl9Ly8gaWYgdGFyZ2V0IGlzIHJlbW90ZQorCQkJCQl9Ly8gbm90IGRpYWdvbmFsIChpcyB0YXJnZXQgaXMgT1RIRVIgY291bnRyeSkKKwkJCQorCQkJCX0vLyBhbGwgb3RoZXIgdGFyZ2V0IGNvdW50cmllcworCQkJCQorCQkJfS8vIGZvciBhbGwgY291bnRyaWVzIGluIHRoaXMgZ3JvdXAKKwkJCXJldHVybiBzdXJmYWNlQXJlYTsKKwkJfS8vY291bnRVbnJlc29sdmVkQm9yZGVyRWRnZXMoKQorCQkKKwkJCisJCQorCQkvKioKKwkJICogCisJCSAqIEBwYXJhbSBjb3VudHJpZXNUb1Byb2Nlc3MKKwkJICogQHJldHVybgorCQkgKi8KKwkJcHVibGljIGludCBnZXRMYXJnZXN0Qm9yZGVyRm9yQ291bnRyeVNldChDb3VudHJ5W10gY291bnRyaWVzVG9Qcm9jZXNzKSB7CisJCQlpbnQgbWF4QXJlYSA9IC0xOworCQkJLy8gZm9yIGVhY2ggdW5hc3NpZ25lZCBjb3VudHJ5CisJCQlmb3IoaW50IGkgPSAwOyBpIDwgY291bnRyaWVzVG9Qcm9jZXNzLmxlbmd0aDsgaSArKykgeworCQkJCUNvdW50cnkgY2FuZGlkYXRlID0gY291bnRyaWVzVG9Qcm9jZXNzW2ldOworCQkJCS8vIGdldCBpdCdzIHRvdGFsIGJvcmRlciBhcmVhIHdpdGggdGhpcyBncm91cAorCQkJCWludCBzdXJmYWNlQXJlYSA9IDA7CisJCQkJZm9yKENvdW50cnkgY3RyeTogY291bnRyeUdyb3VwKSAgeworCQkJCQlzdXJmYWNlQXJlYSArPSBjb21tb25Cb3JkZXJNYXRyaXhbY3RyeS5pbmRleF1bY2FuZGlkYXRlLmluZGV4XTsKKwkJCQl9CisJCQkJaWYoc3VyZmFjZUFyZWEgPiBtYXhBcmVhKSB7CisJCQkJCW1heEFyZWEgPSBzdXJmYWNlQXJlYTsKKwkJCQkJbmV4dENhbmRpZGF0ZU1lbWJlciA9IGNhbmRpZGF0ZTsKKwkJCQl9CisJCQl9Ly9mb3IgY291bnRyaWVzVG9Qcm9jZXNzCisJCQlyZXR1cm4gbWF4QXJlYTsKKwkJfQorCisKKworCQkKKwl9Ly8gUGFydGl0aW9uR3JvdXAKKwkKKwkvKioKKwkgKiAKKwkgKiBAcGFyYW0gbWFzdGVyTGlzdAorCSAqIEByZXR1cm4KKwkgKi8KKwlwdWJsaWMgc3RhdGljIGludFtdW10gZ2V0UGFydGl0aW9uR3JvdXBCb3JkZXJNYXRyaXgoTGlzdDxQYXJ0aXRpb25Hcm91cD4gbWFzdGVyTGlzdCkgeworCQlpbnQgbnVtR3JvdXBzID0gbWFzdGVyTGlzdC5zaXplKCk7CisJCWludFtdW10gbWF0cml4ID0gbmV3IGludFtudW1Hcm91cHNdW251bUdyb3Vwc107CisJCQorCQlmb3IoaW50IGkgPSAwOyBpIDwgbnVtR3JvdXBzOyBpICsrKSAgeworCQkJUGFydGl0aW9uR3JvdXAgcGdpID0gbWFzdGVyTGlzdC5nZXQoaSk7CisJCQlmb3IoaW50IGogPSAwOyBqIDwgbnVtR3JvdXBzOyBqICsrKSAgeworCQkJCW1hdHJpeFtpXVtqXSA9IDA7CisJCQkJaWYoaSE9aikgeworCQkJCQlQYXJ0aXRpb25Hcm91cCBwZ2ogPSBtYXN0ZXJMaXN0LmdldChqKTsKKwkJCQkJZm9yKENvdW50cnkgY3RyeTogcGdqLmNvdW50cnlHcm91cCkgIHsKKwkJCQkJCW1hdHJpeFtpXVtqXSArPSBwZ2kuZ2V0Q29tbW9uQm9yZGVyQXJlYShjdHJ5KTsKKwkJCQkJfQorCQkJCX0KKwkJCQkKKwkJCX0vLyBmb3IgagorCQl9IC8vIGZvciBpCisJCXJldHVybiBtYXRyaXg7CisJfQorCQorCit9Ly8gQ291bnRyeUdyYXBoUGF0aXRpb25QbGFubmVyCmRpZmYgLS1naXQgYS9kaXN0cmlidXRlZC9vcmcuZWNsaXBzZS5zdGVtLmdyYXBoc3luY2hyb25pemVyL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2dyYXBoc3luY2hyb25pemVyL3V0aWwvR2xvYmFsVGlsZUdlbmVyYXRvci5qYXZhIGIvZGlzdHJpYnV0ZWQvb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaHN5bmNocm9uaXplci9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9ncmFwaHN5bmNocm9uaXplci91dGlsL0dsb2JhbFRpbGVHZW5lcmF0b3IuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYzcyOTRlCi0tLSAvZGV2L251bGwKKysrIGIvZGlzdHJpYnV0ZWQvb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaHN5bmNocm9uaXplci9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9ncmFwaHN5bmNocm9uaXplci91dGlsL0dsb2JhbFRpbGVHZW5lcmF0b3IuamF2YQpAQCAtMCwwICsxLDEwNTQgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaHN5bmNocm9uaXplci51dGlsOworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTEgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKK2ltcG9ydCBqYXZhLmF3dC5SZWN0YW5nbGU7CitpbXBvcnQgamF2YS5pby5CdWZmZXJlZFJlYWRlcjsKK2ltcG9ydCBqYXZhLmlvLkZpbGU7CitpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtUmVhZGVyOworaW1wb3J0IGphdmEubmV0LlVSTDsKK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OworaW1wb3J0IGphdmEudXRpbC5BcnJheXM7CitpbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7CitpbXBvcnQgamF2YS51dGlsLkhhc2hTZXQ7CitpbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOworaW1wb3J0IGphdmEudXRpbC5MaXN0OworaW1wb3J0IGphdmEudXRpbC5NYXA7CitpbXBvcnQgamF2YS51dGlsLlNldDsKK2ltcG9ydCBqYXZhLnV0aWwuU3RyaW5nVG9rZW5pemVyOworCitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkZpbGVMb2NhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QYXRoOworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QbGF0Zm9ybTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5Lk5hbWVSZWFkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS5jZW50ZXJzLkNlbnRlclJlYWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5LmNlbnRlcnMuUGx1Z2luQ2VudGVyUmVhZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhzeW5jaHJvbml6ZXIuQWN0aXZhdG9yOworaW1wb3J0IG9yZy5vc2dpLmZyYW1ld29yay5CdW5kbGU7CisKKworCisvKioKKyAqIHRoaXMgY2xhc3MgY3JlYXRlcyBhIHRpbGluZyBvZiB0aGUgd29ybGQgYW5kIGFzc2lnbnMgdGhlIFNURU0gZ2VvZ3JhcGhpYyBub2RlcyAoYXQgaGlnaGVzdCBhZG1pbiBsZXZlbCkKKyAqIHRvIHRoZXNlIHRpbGVzLiBUaGUgdGlsZXMgYXJlIGxhdGVyIHVzZWQgdG8gcGFydGl0aW9uIHRoZSBnbG9iYWwgZ3JhcGguCisgKiBUaGUgdGlsZXMgYXJlIGluIGEgc3BhY2Ugb2YgCisgKiAtOTA8PWxhdDw9OTAKKyAqIC0xODA8bG5nPD0xODAKKyAqIEBhdXRob3IgamhrYXVmCisgKgorICovCitwdWJsaWMgY2xhc3MgR2xvYmFsVGlsZUdlbmVyYXRvciB7CisKKwlzdGF0aWMgaW50IE5VTV9DT1VOVFJJRVMgPSAtMTsKKwlzdGF0aWMgU3RyaW5nIFtdIGNvdW50cmllc1RvUHJvY2VzcyA9IG51bGw7CisJCisJc3RhdGljIE1hcDxTdHJpbmcsIFNldDxTdHJpbmc+PiBjb3VudHJ5SGlnaGVzdElkTWFwID0gbmV3IEhhc2hNYXA8U3RyaW5nLCBTZXQ8U3RyaW5nPj4oKTsKKwlzdGF0aWMgTGlzdDxGaWxlPiBmaWx0ZXJlZDsKKwlzdGF0aWMgRmlsZVtdIHJldFZhbDsKKwlMaXN0PFRpbGU+IHRpbGVMaXN0ID0gbmV3IEFycmF5TGlzdDxUaWxlPigpOworCXN0YXRpYyBNYXA8U3RyaW5nLEJvbmQ+IHdvcmxkQm9uZE1hcCA9IG5ldyBIYXNoTWFwPFN0cmluZyxCb25kPigpOworCXN0YXRpYyBNYXA8U3RyaW5nLE5vZGU+IHdvcmxkTm9kZU1hcCA9IG5ldyBIYXNoTWFwPFN0cmluZyxOb2RlPigpOworCQorCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBVUklfVEFSR0VUID0gInJlc291cmNlcy9kYXRhL3N0YXRpc3RpY3MvIjsgLy8kTk9OLU5MUy0xJAorCXN0YXRpYyBmaW5hbCBTdHJpbmcgQ09ERVNfRklMRSA9ICJjb3VudHJ5Q29kZU1hcC5jc3YiOyAvLyROT04tTkxTLTEkCisJcHJpdmF0ZSBzdGF0aWMgVVJMIENPREVTX0ZJTEVfVVJJID0gbnVsbDsKKworCQorCXN0YXRpYyBNYXA8U3RyaW5nLFN0cmluZz4gY291bnRyeUNvZGUydG8zID0gbmV3IEhhc2hNYXA8U3RyaW5nLFN0cmluZz4oKTsKKwlzdGF0aWMgTWFwPFN0cmluZyxTdHJpbmc+IGNvdW50cnlDb2RlM3RvMiA9IG5ldyBIYXNoTWFwPFN0cmluZyxTdHJpbmc+KCk7CisJCisJc3RhdGljIFRpbGVbXVtdIHRpbGVNYXRyaXg7CisJc3RhdGljIGludCB4U2l6ZTsKKwlzdGF0aWMgaW50IHlTaXplOworCQorCS8vIHRoZSA0IG5uIGFuZCA0IG5ubgorCXN0YXRpYyBpbnRbXSBkeCA9IHsgMSAsIC0xLCAwLCAgMCwgMSwgIDEsIC0xLCAtMSB9OworCXN0YXRpYyBpbnRbXSBkeSA9IHsgMCAsIDAgLCAxLCAtMSwgMSwgLTEsIC0xLCAgMSB9OworCQorCXN0YXRpYyBpbnRbXSBsaW5lYXJMYXRDb3VudCA9IG5ldyBpbnRbMTgxXTsKKwlzdGF0aWMgaW50W10gbGluZWFyTG5nQ291bnQgPSBuZXcgaW50WzM2MV07CisJCisJLyoqIAorCSAqIHRoZSBmaW5hbCBwYXJ0aXRpb24gcmVzdWx0IGlzIGFuIGFycmF5IG9mIHJvd3Mgb2YgcGFydGl0aW9ucyAoZWFjaCBwYXJ0aXRpb24gPSBjb2xsZWN0aW9uIG9mIHRpbGVzKQorCSAqLworCXN0YXRpYyBQYXJ0aXRpb25Sb3dbXSByb3dzID0gbnVsbDsKKwkKKwkKKwkKKwkvKioKKwkgKiBnZXQgdGhlIGZpbmFsIHJlc3VsdCBhcyBhIGxpc3Qgb2YgU2V0IG9mIG5vZGVJRHMKKwkgKiBAcmV0dXJuIGEgbGlzdCBvZiBTZXQ8U3RyaW5nPiwgb25lIGZvciBlYWNoIHBhcnRpdGlvbgorCSAqLworCUBTdXBwcmVzc1dhcm5pbmdzKCJubHMiKQorCXB1YmxpYyBMaXN0PFNldDxTdHJpbmc+PiBnZXRQYXJpdGlvbmVkTm9kZXMoKSB7CisJCUxpc3Q8U2V0PFN0cmluZz4+IHJlc3VsdCA9IG5ldyBBcnJheUxpc3Q8U2V0PFN0cmluZz4+ICgpOworCQlmb3IoUGFydGl0aW9uUm93IHJvdzogcm93cykgeworCQkJTGlzdDxQYXJ0aXRpb24+IHBhcnRpdGlvbkxpc3QgPSByb3cucGFydGl0aW9uTGlzdDsKKwkJCWZvcihQYXJ0aXRpb24gcGFydGl0aW9uOiBwYXJ0aXRpb25MaXN0KSB7CisJCQkJU2V0PFN0cmluZz4gbm9kZUlkU2V0ID0gcGFydGl0aW9uLmdldEFsbE5vZGVzKCk7CisJCQkJCisJCQkJQWN0aXZhdG9yLmxvZ0luZm9ybWF0aW9uKCI+Pj4gcGFyaXRpb24gIyIrcGFydGl0aW9uLmlkKyIgaGFzICIrbm9kZUlkU2V0LnNpemUoKSsiIG5vZGVJRHMiKTsKKwkJCQkKKwkJCQlyZXN1bHQuYWRkKG5vZGVJZFNldCk7CisJCQl9Ly8gZm9yIGFsbCBwYXJ0aXRpb25zIGluIGEgcm93CisJCX0vLyBmb3IgYWxsIHJvd3MKKwkJcmV0dXJuIHJlc3VsdDsKKwl9CisJCisJCisJLyoqCisJICogVGhpcyBjbGFzcyByZWFkcyBhbGxvd3MgdGhlIHVzZXIgdG8gc3BlY2lmeSB0aGUgZ3JhcGggZGF0YSBmb3IgdGlsaW5nCisJICogCisJICogQHBhcmFtIG51bVBhcml0aW9ucyB0aGUgbnVtYmVyIG9mIHBhcml0aW9ucyAobWFjaGluZXMpIHRvIHVzZQorCSAqIEBwYXJhbSBub2RlSWRNYXAgYSBtYXAgb2YgYWxsIG5vZGVzIHRvIHBhcnRpdGlvbiB0aGUgd29ybGQgaW50bworCSAqIEBwYXJhbSBjb21tb25Cb3JkZXJJZFBhaXJzU2V0IGFzIFNldCBvZiBTdHJpbmdbMl0gcGFpcnMgcmVwcmVzZW50aW5nIHRoZSBpZCdzIG9mIGFsbCBub2RlIHBhaXJzIGNvbm5lY3RlZCBieSBhIGJvcmRlciBvciBlZGdlCisJICovCisJQFN1cHByZXNzV2FybmluZ3MoIm5scyIpCisJcHVibGljIEdsb2JhbFRpbGVHZW5lcmF0b3IoaW50IG51bVBhcml0aW9ucywgSGFzaE1hcDxTdHJpbmcsIFNldDxTdHJpbmc+PiBub2RlSWRNYXAsIFNldDxTdHJpbmdbXT4gY29tbW9uQm9yZGVySWRQYWlyc1NldCkgeworCQkvLyB0d28gZGVncmVlIHRpbGVzCisJCWludCBwZXJpb2QgPSAyOyAKKwkJLy8gcGhhc2UgaXMgemVybyBmcm9tIG5vdy4gV2UgY2FuIGxhdGVyIG9wdGltaXplIHRoaXMgdG8gcmVkdWNlIGNvbW11bmljYXRpb25zIGNvc3QKKwkKKwkJLy8gVE9ETyB0ZXN0IGF0IGRpZmZlcmVudCBwaGFzZSB2YWx1ZXMgdG8gc2VlIGlmIHRoaXMgcHJvdmlkZXMgYmV0dGVyIG9wdGltaXphdGlvbiBvZiBlZGdlIGNvbW11bmljYXRpb24KKwkJLy8gZG91YmxlIHBoYXNlID0gMC4wOworCQlpbml0KCk7CisKKwkJQWN0aXZhdG9yLmxvZ0luZm9ybWF0aW9uKCJyZWFkaW5nIHdvcmxkIGNlbnRlcnMuLi4iKTsKKwkJUGx1Z2luQ2VudGVyUmVhZGVyIGNyID0gbmV3IFBsdWdpbkNlbnRlclJlYWRlcigpOworCQljb3VudHJpZXNUb1Byb2Nlc3MgPSBnZXRDb3VudHJ5SURzKG5vZGVJZE1hcCk7CisJCUFjdGl2YXRvci5sb2dJbmZvcm1hdGlvbigiZ290ICIrY291bnRyaWVzVG9Qcm9jZXNzLmxlbmd0aCsiIGNvdW50cnkgaWRzIik7CisJCQorCQkvLyBhbGwgdGhlIGlkcyB0byBwcm9jZXNzOgorCQljb3VudHJ5SGlnaGVzdElkTWFwID0gbm9kZUlkTWFwOworCQljcmVhdGVUaWxlcyhwZXJpb2QpOworCQlhc3NpZ25BbGxOb2Rlcyhjcik7IC8vIGFsc28gY3JlYXRlcyB0aGUgbm9kZXMgYW5kIGZpbGxzIHRoZSB3b3JsZE5vZGVNYXAKKwkJCisJCUFjdGl2YXRvci5sb2dJbmZvcm1hdGlvbigicmVhZGluZyB3b3JsZCBlZGdlcyIpOworCQlyZWFkV29ybGRCb25kcyhjb21tb25Cb3JkZXJJZFBhaXJzU2V0KTsKKwkJQWN0aXZhdG9yLmxvZ0luZm9ybWF0aW9uKCJyZWFkICIrd29ybGRCb25kTWFwLnNpemUoKSsiIHdvcmxkIGVkZ2VzIGFuZCAiK3dvcmxkTm9kZU1hcC5zaXplKCkrIiBub2RlcyIpOworCQljb21wdXRlQWxsRWRnZXMoKTsKKwkJcm93cyA9IGdldFBhcnRpdGlvbnMocGVyaW9kLCBudW1QYXJpdGlvbnMpOworCX0vLyBjb25zdHJ1Y3RvcgorCQorCQorCS8qKiAKKwkgKiBUaGlzIGNvbnN0cnVjdG9yIGlzIGZvciB0ZXN0aW5nLgorCSAqIEl0IHRha2VzIGFzIGRhdGEgdGhlIGhpZ2hlc3QgcmVzb2x1dGlvbiBub2RlcyBmb3IgdGhlIGVudGlyZSB3b3JsZCBhbmQgYWxsIGNvbW1vbiBib3JkZXJzIGluIHRoZSAKKwkgKiBzdGVtIGRhdGEuIFBhcnRpdGlvbmluZyBpcyBjYWxsZWQgYnkgdGhlIG1haW4gbWV0aG9kIChhbHNvIHVzZWQgZm9yIHRlc3RpbmcpLgorCSAqLworCUBTdXBwcmVzc1dhcm5pbmdzKCJubHMiKQorLyoJcHVibGljIEdsb2JhbFRpbGVHZW5lcmF0b3IoaW50IHBlcmlvZCwgZG91YmxlIHBoYXNlKSB7CisJCWluaXQoKTsKKwkJCisJCUFjdGl2YXRvci5sb2dJbmZvcm1hdGlvbigicmVhZGluZyB3b3JsZCBjZW50ZXJzLi4uIik7CisJCVBsdWdpbkNlbnRlclJlYWRlciBjciA9IG5ldyBQbHVnaW5DZW50ZXJSZWFkZXIoKTsKKwkJY291bnRyaWVzVG9Qcm9jZXNzID0gZ2V0Q291bnRyeUlEcygpOworCQlBY3RpdmF0b3IubG9nSW5mb3JtYXRpb24oImdvdCAiK2NvdW50cmllc1RvUHJvY2Vzcy5sZW5ndGgrIiBjb3VudHJ5IGlkcyIpOworCQkKKwkJLy8gcmVhZCBlYWNoIGZvbGRlcgorCQlyZWFkSURzQnlDb3VudHJ5Q29kZSgpOworCQljcmVhdGVUaWxlcyhwZXJpb2QpOworCQlhc3NpZ25BbGxOb2Rlcyhjcik7IC8vIGFsc28gY3JlYXRlcyB0aGUgbm9kZXMgYW5kIGZpbGxzIHRoZSB3b3JsZE5vZGVNYXAKKwkJCisJCUFjdGl2YXRvci5sb2dJbmZvcm1hdGlvbigicmVhZGluZyB3b3JsZCBlZGdlcyIpOworCQlTZXQ8U3RyaW5nW10+IGlkUGFpcnNTZXQgPSBnZXRXb3JsZEZyb21Db21tb25Cb3JkZXJSZWFkZXIoKTsKKwkJcmVhZFdvcmxkQm9uZHMoaWRQYWlyc1NldCk7CisJCUFjdGl2YXRvci5sb2dJbmZvcm1hdGlvbigicmVhZCAiK3dvcmxkQm9uZE1hcC5zaXplKCkrIiB3b3JsZCBlZGdlcyBhbmQgIit3b3JsZE5vZGVNYXAuc2l6ZSgpKyIgbm9kZXMiKTsKKwkJY29tcHV0ZUFsbEVkZ2VzKCk7CisJCQorCX0vLyBjb25zdHJ1Y3RvcgorKi8JCisJLyoqCisJICogZm9yIHRlc3RpbmcKKwkgKiBAcGFyYW0gYXJncworCSAqLworLyoJQFN1cHByZXNzV2FybmluZ3MoInVudXNlZCIpCisJcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgeworCQlpbnQgcGVyaW9kID0gMjsgLy8gdHdvIGRlZ3JlZSB0aWxlcworCQlkb3VibGUgcGhhc2UgPSAwLjA7CisJCUdsb2JhbFRpbGVHZW5lcmF0b3IgZ3RnID0gbmV3IEdsb2JhbFRpbGVHZW5lcmF0b3IocGVyaW9kICxwaGFzZSk7CisJCWludCBudW1QYXJ0aXRpb25zID0gNDsKKwkJcm93cyA9IGd0Zy5nZXRQYXJ0aXRpb25zKHBlcmlvZCwgbnVtUGFydGl0aW9ucyk7CisJCUxpc3Q8U2V0PFN0cmluZz4+IHJlc3VsdCA9IGd0Zy5nZXRQYXJpdGlvbmVkTm9kZXMoKTsKKwkJU3lzdGVtLmV4aXQoMCk7CisJfQorCSovCisJLyoqCisJICogaW5pdCB0aGUgc3RhdGljIGxpbmVhciBkZW5zaXR5IGFycmF5CisJICovCisJcHVibGljIHZvaWQgaW5pdCgpIHsKKwkJCisvLwkJRmlsZSBmaWxlID0gbmV3IEZpbGUoIi4iKTsKKy8vCQlTdHJpbmcgZmlsZXBhdGggPSBmaWxlLmdldEFic29sdXRlUGF0aCgpOworLy8JCWludCBpZHggPSBmaWxlcGF0aC5pbmRleE9mKFBST0pFQ1RfTkFNRSk7CisvLwkJQnVuZGxlIGJ1bmRsZSA9IEFjdGl2YXRvci5nZXREZWZhdWx0KCkuCisvLwkJUGF0aCBwYXRoID0gbmV3IFBhdGgoIi4uLyIpOworLy8JCVVSTCBmaWxlVVJMID0gIEZpbGVMb2NhdG9yLmZpbmQoYnVuZGxlLCBwYXRoLCBudWxsKTsKKy8vCQlXT1JLU1BBQ0UgPSBmaWxlVVJMLmdldFBhdGgoKTsKKwkJLy9XT1JLU1BBQ0UgPSBmaWxlcGF0aC5zdWJzdHJpbmcoMCxpZHgpOworCQlCdW5kbGUgZ2VvQnVuZGxlID0gUGxhdGZvcm0uZ2V0QnVuZGxlKCJvcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5Iik7CisJCQorCQlQYXRoIHBhdGgyID0gbmV3IFBhdGgoVVJJX1RBUkdFVCtDT0RFU19GSUxFKTsKKwkJQ09ERVNfRklMRV9VUkkgPSBGaWxlTG9jYXRvci5maW5kKGdlb0J1bmRsZSwgcGF0aDIsIG51bGwpOworCQkKKwkJCisJCWZvciAoaW50IGkgPSAwOyBpIDwgbGluZWFyTGF0Q291bnQubGVuZ3RoOyBpICsrKSB7CisJCQlsaW5lYXJMYXRDb3VudFtpXSA9IDA7CisJCX0KKwkJbWFwQ29kZXMoKTsKKwl9CisJCisJLyoqCisJICogZ2V0IEFMTCBjb3VudHJ5IElEcworCSAqIEByZXR1cm4KKwkgKi8KKwlwdWJsaWMgc3RhdGljIFN0cmluZ1tdIGdldENvdW50cnlJRHMoKSB7CisJCVNldDxTdHJpbmc+IGlkcyA9IGNvdW50cnlDb2RlM3RvMi5rZXlTZXQoKTsKKwkJU3RyaW5nW10gcmV0VmFsID0gaWRzLnRvQXJyYXkobmV3IFN0cmluZ1tpZHMuc2l6ZSgpXSk7CisJCUFycmF5cy5zb3J0KHJldFZhbCk7CisJCXJldHVybiByZXRWYWw7CisJfQorCQorCQorCQorCS8qKgorCSAqIGdldCB0aGUgY291bnRyeSBJRHMganVzdCBzZW5kIHRvIHRoaXMgY2xhc3MKKwkgKiBAcmV0dXJuCisJICovCisJcHVibGljIHN0YXRpYyBTdHJpbmdbXSBnZXRDb3VudHJ5SURzKEhhc2hNYXA8U3RyaW5nLCBTZXQ8U3RyaW5nPj4gY291bnRyeUlkTWFwKSB7CisJCVNldDxTdHJpbmc+IGlkcyA9IGNvdW50cnlJZE1hcC5rZXlTZXQoKTsKKwkJU3RyaW5nW10gcmV0VmFsID0gaWRzLnRvQXJyYXkobmV3IFN0cmluZ1tpZHMuc2l6ZSgpXSk7CisJCUFycmF5cy5zb3J0KHJldFZhbCk7CisJCXJldHVybiByZXRWYWw7CisJfQorCQorCS8qKgorCSAqIAorCSAqIEBwYXJhbSBudW1QYXJ0aXRpb25zCisJICogQHJldHVybgorCSAqLworCUBTdXBwcmVzc1dhcm5pbmdzKCJubHMiKQorCXB1YmxpYyBQYXJ0aXRpb25Sb3dbXSBnZXRQYXJ0aXRpb25zKGludCBwZXJpb2QsIGludCBudW1QYXJ0aXRpb25zKSB7CisJCQorCQlpZihudW1QYXJ0aXRpb25zPT0wKSB7CisJCQlBY3RpdmF0b3IubG9nSW5mb3JtYXRpb24oIk1pbmltdW0gbnVtYmVyIG9mIHBhcnRpdGlvbnMgaXMgb25lLCBub3QgWmVyby4gUmVzZXR0aW5nIHRvIG9uZSIpOworCQkJbnVtUGFydGl0aW9ucyA9IDE7CisJCX0KKwkJCisJCWludCBudW1Sb3dzID0gKGludCkgTWF0aC5zcXJ0KChkb3VibGUpIG51bVBhcnRpdGlvbnMpOworCQlpbnQgdGFyZ2V0UGFydGl0aW9uU2l6ZSA9IHdvcmxkTm9kZU1hcC5zaXplKCkvbnVtUGFydGl0aW9uczsKKwkJaW50IHByZXZpb3VzU3VtID0gMDsKKwkJQWN0aXZhdG9yLmxvZ0luZm9ybWF0aW9uKCJjYWxjdWxhdGVkIHRhcmdldCBwYXJ0aXRpb24gc2l6ZSBbbm9kZXNdIGlzICIrdGFyZ2V0UGFydGl0aW9uU2l6ZSk7CisJCQorCQlpbnQgY29sc1BlclJvdyA9IG51bVBhcnRpdGlvbnMvbnVtUm93czsKKwkJZG91YmxlIGRDb2xzUGVyUm93ID0gKChkb3VibGUpbnVtUGFydGl0aW9ucykvKChkb3VibGUpbnVtUm93cyk7CisJCWludCBmaXJzdEV4dHJhID0gMDsKKwkJaWYoZENvbHNQZXJSb3cgPiAoZG91YmxlKSBjb2xzUGVyUm93KSBmaXJzdEV4dHJhID0gMTsgLy90aGUgZmlyc3Qgcm93IG1pZ2h0IGdldCBvbmUgbW9yZSAKKwkJCisJCWludCB0YXJnZXRSb3dTaXplID0gdGFyZ2V0UGFydGl0aW9uU2l6ZSooY29sc1BlclJvdyArIGZpcnN0RXh0cmEpOyAvLyB0YXJnZXQgc2l6ZSBmb3IgRklSU1Qgcm93IC8vIHRoZSBmaXJzdCByb3cgb25seSBtaWdodCBoYXZlIGFuIGV4dHJhIHBhcnRpdGlvbgorCQkKKwkJUGFydGl0aW9uUm93W10gcGFydGl0aW9uUm93ID0gbmV3IFBhcnRpdGlvblJvd1tudW1Sb3dzXTsKKwkJCisJCWludCBsYXRNaW4gPSAtOTA7CisJCWludCBsbmdNaW4gPSAtMTgwOworCQlpbnQgbGF0U3VtID0gMDsKKwkJaW50IGxhdE1heCA9IDA7CisJCWZvcihpbnQgaSA9IDA7IGkgPCAxODA7IGkgKyspIHsKKwkJCWxhdFN1bSArPSBsaW5lYXJMYXRDb3VudFtpXTsKKwkJCWxhdE1heCA9IGktOTA7CisJCQlpZihsYXRTdW0gPj0gdGFyZ2V0Um93U2l6ZSkgeworCQkJCWludCBkMSA9IE1hdGguYWJzKGxhdFN1bS10YXJnZXRSb3dTaXplKTsKKwkJCQlpbnQgZDIgPSBNYXRoLmFicyhwcmV2aW91c1N1bS10YXJnZXRSb3dTaXplKTsKKwkJCQlpZihkMiA8IGQxKSBsYXRNYXggLT0gMTsKKwkJCQlicmVhazsKKwkJCX0gZWxzZSB7CisJCQkJcHJldmlvdXNTdW0gPSBsYXRTdW07CisJCQl9CisJCX0KKwkJCisJCWludCBsbmdNYXggPSAwOworCQkKKwkJaW50IGljb3VudCA9IDA7CisJCUFjdGl2YXRvci5sb2dJbmZvcm1hdGlvbigiIG51bVBhcnRpdGlvbnMgPSAiK251bVBhcnRpdGlvbnMrIiAgYWRkaW5nIG51bVJvd3MgPSAiK251bVJvd3MpOworCQlmb3IgKGludCBpID0gMDsgaSA8IG51bVJvd3M7IGkgKyspIHsKKwkJCQorCQkJCisJCQlwYXJ0aXRpb25Sb3dbaV0gPSBuZXcgUGFydGl0aW9uUm93KCk7CisJCQlpbnQgcGFydGl0aW9uc1RvQWRkID0gY29sc1BlclJvdzsKKwkJCWlmKGk9PTApIHBhcnRpdGlvbnNUb0FkZCArPSBmaXJzdEV4dHJhOworCQkJQWN0aXZhdG9yLmxvZ0luZm9ybWF0aW9uKCIgcm93ICIraSsiIDogIGFkZGluZyAiK3BhcnRpdGlvbnNUb0FkZCsiIHBhcnRpdGlvbnMiKTsKKwkJCisJCQkvLyBub3cgZGl2aWRlIHVwIGJ5IGxvbmdpdHVkZSBhcm91bmQgdGhlIGdsb3ZlKDM2MCkKKwkJCWxpbmVhckxuZ0NvdW50ID0gZ2V0TGluZWFyTG5nQ291bnQobGF0TWluLCBsYXRNYXgpOworCQkJbG5nTWluID0gLTE4MDsKKwkJCWludCBsbmdTdW0gPSAwOworCQkJaW50IHByZXZpb3VzTG5nU3VtID0gMDsKKwkJCWZvcihpbnQgamogPSAobG5nTWluKzE4MCk7IGpqIDwgMzYwOyBqaiArKykgeworCQkJCWxuZ1N1bSArPSBsaW5lYXJMbmdDb3VudFtqal07CisJCQkJbG5nTWF4ID0gamotMTgwOworCQkJCWlmKGxuZ1N1bSA+PSB0YXJnZXRQYXJ0aXRpb25TaXplKSB7CisJCQkJCWludCBkMSA9IE1hdGguYWJzKGxuZ1N1bS10YXJnZXRQYXJ0aXRpb25TaXplKTsKKwkJCQkJaW50IGQyID0gTWF0aC5hYnMocHJldmlvdXNMbmdTdW0tdGFyZ2V0Um93U2l6ZSk7CisJCQkJCWlmKGQyIDwgZDEpIGxuZ01heCAtPSAxOworCQkJCQlicmVhazsKKwkJCQl9IGVsc2UgeworCQkJCQlwcmV2aW91c1N1bSA9IGxuZ1N1bTsKKwkJCQl9CisJCQl9CisJCQkKKwkJCQorCQkJQWN0aXZhdG9yLmxvZ0luZm9ybWF0aW9uKCIxKSBsYXRtaW4gPSAiK2xhdE1pbisiICBsYXRtYXg9ICIrbGF0TWF4KTsKKwkJCWZvcihpbnQgaiA9IDA7IGogPCBwYXJ0aXRpb25zVG9BZGQ7IGogKyspIHsKKwkJCQlQYXJ0aXRpb24gcCA9IG5ldyBQYXJ0aXRpb24oaWNvdW50LCBsYXRNaW4sIGxuZ01pbiwgbGF0TWF4LCBsbmdNYXgpOworCQkJCWljb3VudCArKzsKKwkJCQlwYXJ0aXRpb25Sb3dbaV0uYWRkKHApOworCQkJCWxuZ01pbiA9IGxuZ01heDsKKwkJCQkKKwkJCQlpZihqIDwgcGFydGl0aW9uc1RvQWRkLTEpIHsKKwkJCQkJbG5nU3VtID0gMDsKKwkJCQkJcHJldmlvdXNMbmdTdW0gPSAwOworCQkJCQlmb3IoaW50IGpqID0gKGxuZ01pbisxODEpOyBqaiA8IDM2MDsgamogKyspIHsKKwkJCQkJCWxuZ1N1bSArPSBsaW5lYXJMbmdDb3VudFtqal07CisJCQkJCQlsbmdNYXggPSBqai0xODA7CisJCQkJCQlpZihsbmdTdW0gPj0gdGFyZ2V0UGFydGl0aW9uU2l6ZSkgeworCQkJCQkJCWludCBkMSA9IE1hdGguYWJzKGxuZ1N1bS10YXJnZXRQYXJ0aXRpb25TaXplKTsKKwkJCQkJCQlpbnQgZDIgPSBNYXRoLmFicyhwcmV2aW91c0xuZ1N1bS10YXJnZXRSb3dTaXplKTsKKwkJCQkJCQlpZihkMiA8IGQxKSBsbmdNYXggLT0gMTsKKwkJCQkJCQlicmVhazsKKwkJCQkJCX0gZWxzZSB7CisJCQkJCQkJcHJldmlvdXNTdW0gPSBsbmdTdW07CisJCQkJCQl9CisJCQkJCX0KKwkJCQl9IGVsc2UgeworCQkJCQlsbmdNYXggPSAxODA7CisJCQkJfQorCQkJCQorCQkJCQorCQkJfQorCQkJCisJCQkvLyBnZXQgcmVhZHkgZm9yIHRoZSBuZXh0IHJvdworCQkJLy8gY29tcHV0ZSBkZWxhdExhdCBmcm9tIHRoZSBsaW5lYXIgZGVuc2l0eSBjb3VudAorCQkJdGFyZ2V0Um93U2l6ZSA9IHRhcmdldFBhcnRpdGlvblNpemUqY29sc1BlclJvdzsgLy8gdGhlIGZpcnN0IHJvdyBvbmx5IG1pZ2h0IGhhdmUgYW4gZXh0cmEgcGFydGl0aW9uCisJCQlsYXRNaW4gPSBsYXRNYXg7CisJCQkKKwkJCWlmKGkgPCBudW1Sb3dzLTEpIHsKKwkJCQlsYXRTdW0gPSAwOworCQkJCXByZXZpb3VzU3VtID0gMDsKKwkJCQlmb3IoaW50IGlpID0gKGxhdE1pbis5MSk7IGlpIDwgMTgwOyBpaSArKykgeworCQkJCQlsYXRTdW0gKz0gbGluZWFyTGF0Q291bnRbaWldOworCQkJCQlsYXRNYXggPSBpaS05MDsKKwkJCQkJaWYobGF0U3VtID49IHRhcmdldFJvd1NpemUpIHsKKwkJCQkJCWludCBkMSA9IE1hdGguYWJzKGxhdFN1bS10YXJnZXRSb3dTaXplKTsKKwkJCQkJCWludCBkMiA9IE1hdGguYWJzKHByZXZpb3VzU3VtLXRhcmdldFJvd1NpemUpOworCQkJCQkJaWYoZDIgPCBkMSkgbGF0TWF4IC09IDE7CisJCQkJCQlicmVhazsKKwkJCQkJfSBlbHNlIHsKKwkJCQkJCXByZXZpb3VzU3VtID0gbGF0U3VtOworCQkJCQl9CisJCQkJfQorCQkJfSBlbHNlIHsKKwkJCQlsYXRNYXggPSA5MDsgLy8gZXZlcnl0aGluZworCQkJfQorCQkJCisJCQlBY3RpdmF0b3IubG9nSW5mb3JtYXRpb24oIjIpIGxhdG1pbiA9ICIrbGF0TWluKyIgIGxhdG1heD0gIitsYXRNYXgpOworCQl9CisJCQorCQkvLyBub3cgZGl2eSB1cCB0aGUgdGlsZXMKKwkJaW50IGl4ID0gMDsKKwkJZm9yKGludCBpTGF0PSAtOTA7IGlMYXQgPCA5MDsgaUxhdCArPSBwZXJpb2QpIHsKKwkJCQorCQkJaW50IGl5ID0gMDsKKwkJCWZvcihpbnQgaUxuZyA9IC0xODA7IGlMbmcgPDE4MDsgaUxuZyArPSBwZXJpb2QpIHsKKwkJCQkKKwkJCQlUaWxlIHRpbGUgPSB0aWxlTWF0cml4W2l4XVtpeV07CisJCQkJYm9vbGVhbiBhZGRlZCA9IGZhbHNlOworCQkJCWZvcihpbnQgaSA9IDA7IGkgPCBwYXJ0aXRpb25Sb3cubGVuZ3RoOyBpICsrKSB7CisJCQkJCVBhcnRpdGlvblJvdyByb3cgPSBwYXJ0aXRpb25Sb3dbaV07CisJCQkJCWZvcihQYXJ0aXRpb24gcDogcm93LnBhcnRpdGlvbkxpc3QpIHsKKwkJCQkJCWlmKChwLmxhdE1pbjw9aUxhdCkmJihpTGF0IDwgcC5sYXRNYXgpJiYocC5sbmdNaW48PWlMbmcpJiYoaUxuZzxwLmxuZ01heCkpIHsKKwkJCQkJCQlwLmFkZFRpbGUodGlsZSk7CisJCQkJCQkJYWRkZWQgPSB0cnVlOworCQkJCQkJCWJyZWFrOworCQkJCQkJfS8vIGlmCisJCQkJCX0vLyBmb3IgYWxsIHAgKGNvbHMpCisJCQkJCWlmKGFkZGVkKSBicmVhazsKKwkJCQl9Ly8gZm9yIGkgcm93cworCQkJCQorCQkJCWl5Kys7CisJCQl9Ly8gbG5nCisJCQlpeCsrOworCQl9Ly8gbGF0CisJCQorCQlBY3RpdmF0b3IubG9nSW5mb3JtYXRpb24oIiIpOworCQlBY3RpdmF0b3IubG9nSW5mb3JtYXRpb24oInNpemVzLi4uLi4iKTsKKwkJLy8gdGVzdGluZworCQlpbnQgYXZnU2l6ZSA9IDA7CisJCWludFtdIHJvd1N1bT0gbmV3IGludFtwYXJ0aXRpb25Sb3cubGVuZ3RoXTsKKwkJZm9yKGludCBpID0gMDsgaSA8IHBhcnRpdGlvblJvdy5sZW5ndGg7IGkgKyspIHsKKwkJCXJvd1N1bVtpXSA9IDA7CisJCX0KKwkJCisJCWZvcihpbnQgaSA9IDA7IGkgPCBwYXJ0aXRpb25Sb3cubGVuZ3RoOyBpICsrKSB7CisJCQlQYXJ0aXRpb25Sb3cgcm93ID0gcGFydGl0aW9uUm93W2ldOworCQkJU3lzdGVtLm91dC5wcmludCgicm93KCIraSsiKSAgIik7CisJCQlmb3IoUGFydGl0aW9uIHA6IHJvdy5wYXJ0aXRpb25MaXN0KSB7CisJCQkJU3lzdGVtLm91dC5wcmludCgiIitwLmdldFNpemUoKSsiICAiKTsKKwkJCQlhdmdTaXplICs9IHAuZ2V0U2l6ZSgpOworCQkJCXJvd1N1bVtpXSArPSBwLmdldFNpemUoKTsKKwkJCX0vLyBmb3IgYWxsIHAgKGNvbHMpCisJCQlBY3RpdmF0b3IubG9nSW5mb3JtYXRpb24oIiIpOworCQl9Ly8gZm9yIGkgcm93cworCQkKKwkJYXZnU2l6ZSAvPSBudW1QYXJ0aXRpb25zOworCQlBY3RpdmF0b3IubG9nSW5mb3JtYXRpb24oInRhcmdldCBwYXJ0aXRpb24gc2l6ZSBpcyAiK2F2Z1NpemUpOworCQlmb3IoaW50IGkgPSAwOyBpIDwgcGFydGl0aW9uUm93Lmxlbmd0aDsgaSArKykgeworCQkJCisJCQlBY3RpdmF0b3IubG9nSW5mb3JtYXRpb24oInJvdyAiK2krIiBzdW0gaXMgIityb3dTdW1baV0pOworCQl9CisJCQorCQkKKwkJcmV0dXJuIHBhcnRpdGlvblJvdzsKKwl9CisJCisJCisJLyoqCisJICogCisJICogQHBhcmFtIGxhdE1pbgorCSAqIEBwYXJhbSBsYXRNYXgKKwkgKiBAcGFyYW0gcGFydGl0aW9uUm93CisJICogQHJldHVybgorCSAqLworCXB1YmxpYyBpbnRbXSBnZXRMaW5lYXJMbmdDb3VudChpbnQgbGF0TWluLCBpbnQgbGF0TWF4KSB7CisJCWludFtdIGxpbmVhckxuZ0NvdW50ID0gbmV3IGludFszNjFdOworCQlmb3IgKGludCBpID0gMDsgaSA8IGxpbmVhckxuZ0NvdW50Lmxlbmd0aDsgaSArKykgeworCQkJbGluZWFyTG5nQ291bnRbaV0gPSAwOworCQl9CisJCQorCQlJdGVyYXRvcjxTdHJpbmc+IGl0ZXIgPSB3b3JsZE5vZGVNYXAua2V5U2V0KCkuaXRlcmF0b3IoKTsKKwkJd2hpbGUoaXRlci5oYXNOZXh0KCkpIHsKKwkJCVN0cmluZyBrZXkgPSBpdGVyLm5leHQoKTsKKwkJCU5vZGUgbiA9IHdvcmxkTm9kZU1hcC5nZXQoa2V5KTsKKwkJCS8vIGlzIGl0IGluIHRoZSBsYXRpdHVkZSByYW5nZSBmb3IgdGhpcyByb3c/CQorCQkJaWYoKGxhdE1pbjw9bi5sYXQpJiYobi5sYXQgPCBsYXRNYXgpKSB7CisJCQkJLy95ZXMsIGFkZCB0byB0aGUgaGlzdG9ncmFtCisJCQkJaW50IGlkeCA9IChpbnQpIChuLmxuZysxODAuMCk7CisJCQkJbGluZWFyTG5nQ291bnRbaWR4XSArKzsKKwkJCX0vLyBpZgorCQl9Ly8gZm9yIGFsbCBub2RlcworCQkgCisJCXJldHVybiBsaW5lYXJMbmdDb3VudDsKKwl9CisJCisJCisJCisJLyoqCisJICogdGhpcyBtZXRob2QgY3JlYXRlcyBhIGxpc3Qgb2YgdGlsZXMgY292ZXJpbmcgdGhlIHdvcmxkLgorCSAqIFRoZSB0aWxlcyBhcmUgbGF0ZXIgdXNlZCB0byBwYXJ0aXRpb24gdGhlIGdsb2JhbCBncmFwaC4KKwkgKiBUaGUgdGlsZXMgYXJlIGluIGEgc3BhY2Ugb2YgCisJICogLTkwPD1sYXQ8PTkwCisJICogLTE4MDxsbmc8PTE4MAorCSAqCisJICovCisJQFN1cHByZXNzV2FybmluZ3MoIm5scyIpCisJcHVibGljIHZvaWQgY3JlYXRlVGlsZXMoaW50IHBlcmlvZCkgeworCQkKKwkJeFNpemUgPSAxODAvcGVyaW9kOworCQl5U2l6ZSA9IDM2MC9wZXJpb2Q7CisJCXRpbGVNYXRyaXggPSBuZXcgVGlsZVt4U2l6ZV1beVNpemVdOworCQlpbnQgaWNvdW50ID0gMDsKKwkJaW50IGl4ID0gMDsKKwkJZm9yKGludCBpTGF0PSAtOTA7IGlMYXQgPCA5MDsgaUxhdCArPSBwZXJpb2QpIHsKKwkJCQorCQkJaW50IGl5ID0gMDsKKwkJCWZvcihpbnQgaUxuZyA9IC0xODA7IGlMbmcgPDE4MDsgaUxuZyArPSBwZXJpb2QpIHsKKwkJCQlTdHJpbmcgaWQgPSAidGlsZSgiK2lMYXQrIiwiK2lMbmcrIikiOworCQkJCVRpbGUgdCA9IG5ldyBUaWxlKGlkLCBpTGF0LGlMbmcscGVyaW9kKTsKKwkJCQl0aWxlTGlzdC5hZGQodCk7CisJCQkJdGlsZU1hdHJpeFtpeF1baXldID0gdDsKKwkJCQlpY291bnQgKys7CisJCQkJaXkrKzsKKwkJCX0vLyBsbmcKKwkJCWl4Kys7CisJCX0vLyBsYXQKKwkJQWN0aXZhdG9yLmxvZ0luZm9ybWF0aW9uKCJ0aWxlZCB3b3JsZCB3aXRoICIraWNvdW50KyIgdGlsZXMiKTsKKwkJCisJfS8vIGNyZWF0ZVRpbGVzCisJCisJCisJLyoqCisJICogCisJICovCisJQFN1cHByZXNzV2FybmluZ3MoIm5scyIpCisJcHVibGljIHZvaWQgY29tcHV0ZUFsbEVkZ2VzKCkgeworCQkKKwkJaW50IGxhcmdlc3RFZGdlID0gLTE7CisJCWZvcihpbnQgaT0wOyBpIDwgeFNpemU7IGkrKykgeworCQkJCisJCQlmb3IoaW50IGogPSAwOyBqIDwgeVNpemU7IGorKykgeworCQkJCVRpbGUgdGlsZSA9IHRpbGVNYXRyaXhbaV1bal07CisJCQkJLy8gMS4gaXRlcmF0ZSB0aHJvdWdoIHRoZSBwb2ludHMKKwkJCQlmb3IoTm9kZSBuOnRpbGUubm9kZVNldCkgeworCQkJCQkvLzIuIGl0ZXJhdGUgdGhyb3VnaCB0aGUgZWRnZXMKKwkJCQkJZm9yKEJvbmQgYjogbi5ib25kU2V0KSB7CisJCQkJCQlTdHJpbmcgb3RoZXJJRCA9IGIuZ2V0T3RoZXJJRChuLmlkKTsKKwkJCQkJCU5vZGUgb3RoZXJOb2RlID0gd29ybGROb2RlTWFwLmdldChvdGhlcklEKTsKKwkJCQkJCS8vIGlzIHRoZSBvdGhlciBub2RlIGluIFRISVMgdGlsZT8KKwkJCQkJCWlmKCEgdGlsZS5ub2RlU2V0LmNvbnRhaW5zKG90aGVyTm9kZSkpIHsKKwkJCQkJCQkKKwkJCQkJCQkvLyBObywgdGhlbiBjaGVjayBhbGwgdGhlIG5laWdoYm9ycworCQkJCQkJCWZvcihpbnQgbm4gPSAwOyBubiA8IDg7IG5uICsrKSB7CisJCQkJCQkJCWludCBkaSA9IGkgK2R4W25uXTsKKwkJCQkJCQkJaW50IGRqID0gaiArZHlbbm5dOworCQkJCQkJCQlpZihkaSA8IDApIGRpID0geFNpemUtMTsKKwkJCQkJCQkJaWYoZGogPCAwKSBkaiA9IHlTaXplLTE7CisJCQkJCQkJCWlmKGRpID49IHhTaXplKSBkaSA9IDA7CisJCQkJCQkJCWlmKGRqID49IHlTaXplKSBkaiA9IDA7CisJCQkJCQkJCVRpbGUgbmVpZ2hib3JUaWxlID0gdGlsZU1hdHJpeFtkaV1bZGpdOworCQkJCQkJCQlpZihuZWlnaGJvclRpbGUubm9kZVNldC5jb250YWlucyhvdGhlck5vZGUpKSB7CisJCQkJCQkJCQl0aWxlLmVkZ2VzW25uXS5hZGRCb25kdG9FZGdlKGIuYm9uZElEKTsKKwkJCQkJCQkJCWludCBlZGdlV2VpZ2h0ID0gdGlsZS5lZGdlc1tubl0uZ2V0U2l6ZSgpOworCQkJCQkJCQkJaWYoZWRnZVdlaWdodCA+IGxhcmdlc3RFZGdlKSBsYXJnZXN0RWRnZSA9IGVkZ2VXZWlnaHQ7CisJCQkJCQkJCQlicmVhazsKKwkJCQkJCQkJfQorCQkJCQkJCX0vLyBmb3IgYWxsIG5uJ3MKKwkJCQkJCQkKKwkJCQkJCX0vLyBpZiByZW1vdGUgbm9kZQorCQkJCQl9Ly8gZm9yIGFsbCBib25kcyB0byBub2RlCisJCQkJfS8vIGZvciBhbGwgbm9kZXMgaW4gdGlsZQorCQkJCQorCQkJfS8vIGxuZworCQl9Ly8gbGF0CisJCUFjdGl2YXRvci5sb2dJbmZvcm1hdGlvbigiTGFyZ2VzdCBlZGdlIGhhcyAiK2xhcmdlc3RFZGdlKyIgYm9uZHMiKTsKKwl9Ly9jb21wdXRlQWxsRWRnZXMoKQorCQorCQorCS8qKgorCSAqIFVzZWQgb25seSBmb3IgdGVzdGluZy4uLiBSdXNzaWEgd3JhcHMgYWNyb3NzICsvLSBMbmcKKwkgKiBAcGFyYW0gY3IKKwkgKi8KKwlAU3VwcHJlc3NXYXJuaW5ncygibmxzIikKKwlwdWJsaWMgc3RhdGljIHZvaWQgdGVzdENlbnRlcnNSYW5nZShDZW50ZXJSZWFkZXIgY3IpIHsKKwkJCisJCWRvdWJsZSBsYXRNYXggPSBEb3VibGUuTUlOX1ZBTFVFOworCQlkb3VibGUgbG5nTWF4ID0gRG91YmxlLk1JTl9WQUxVRTsKKwkJZG91YmxlIGxhdE1pbiA9IERvdWJsZS5NQVhfVkFMVUU7CisJCWRvdWJsZSBsbmdNaW4gPSBEb3VibGUuTUFYX1ZBTFVFOworCQlmb3IoU3RyaW5nIGN0cnk6Y291bnRyaWVzVG9Qcm9jZXNzKSB7CisJCQlTZXQ8U3RyaW5nPiBpZFNldCA9IGNvdW50cnlIaWdoZXN0SWRNYXAuZ2V0KGN0cnkpOworCQkJZm9yKFN0cmluZyBpZDogaWRTZXQpIHsKKwkJCQlkb3VibGVbXSBsYXRsbmcgPSBjci5nZXRMYXRMb25nKGlkKTsKKwkJCQlkb3VibGUgbGF0ID0gbGF0bG5nWzBdOworCQkJCWRvdWJsZSBsbmcgPSBsYXRsbmdbMV07CisJCQkJaWYobGF0ID4gbGF0TWF4KSBsYXRNYXggPSBsYXQ7CisJCQkJaWYobG5nID4gbG5nTWF4KSBsbmdNYXggPSBsbmc7CisJCQkJaWYobGF0IDwgbGF0TWluKSBsYXRNaW4gPSBsYXQ7CisJCQkJaWYobG5nIDwgbG5nTWluKSBsbmdNaW4gPSBsbmc7CisJCQkJLy9pZihsbmc+MTgwKSBBY3RpdmF0b3IubG9nSW5mb3JtYXRpb24oIiAiK2lkKyAiIGZvdW5kIGF0IGxuZyAiK2xuZyk7CisJCQl9Ly8gZm9yIGFsbCBpZHMKKwkJCQorCQkJCisJCX0vLyBmb3IgYWxsIGNvdW50cmllcworCQlBY3RpdmF0b3IubG9nSW5mb3JtYXRpb24oImxhdCByYW5nZSBpcyAiK2xhdE1pbisiIHRvICIrbGF0TWF4KTsKKwkJQWN0aXZhdG9yLmxvZ0luZm9ybWF0aW9uKCJsbmcgcmFuZ2UgaXMgIitsbmdNaW4rIiB0byAiK2xuZ01heCk7CisJfS8vdGVzdENlbnRlcnNSYW5nZQorCQorCS8qKgorCSAqIAorCSAqIEBwYXJhbSBjcgorCSAqLworCUBTdXBwcmVzc1dhcm5pbmdzKCJubHMiKQorCXB1YmxpYyB2b2lkIGFzc2lnbkFsbE5vZGVzKFBsdWdpbkNlbnRlclJlYWRlciBjcikgeworCQkKKwkJZm9yKFN0cmluZyBjdHJ5OmNvdW50cmllc1RvUHJvY2VzcykgeworCQkJU2V0PFN0cmluZz4gaWRTZXQgPSBjb3VudHJ5SGlnaGVzdElkTWFwLmdldChjdHJ5KTsKKwkJCWZvcihTdHJpbmcgaWQ6IGlkU2V0KSB7CisJCQkJZG91YmxlW10gbGF0bG5nID0gY3IuZ2V0TGF0TG9uZyhpZCk7CisJCQkJaWYobGF0bG5nICE9IG51bGwpIHsKKwkJCQkJZG91YmxlIGxhdCA9IGxhdGxuZ1swXTsKKwkJCQkJZG91YmxlIGxuZyA9IGxhdGxuZ1sxXTsKKwkJCQkJaWYobG5nID4xODAuMCkgbG5nIC09IDM2MC4wOyAvLyBmaXhlcyBzb21lIHBvaW50cyBpbiBydXNzaWEKKwkJCQkJTm9kZSBub2RlID0gbmV3IE5vZGUoaWQsbGF0LGxuZyk7CisJCQkJCWJvb2xlYW4gYXNzaWduZWQgPSBmYWxzZTsKKwkJCQkJZm9yKFRpbGUgdGlsZTogdGlsZUxpc3QpIHsKKwkJCQkJCWlmKHRpbGUuZ2V0Qm91bmRzMkQoKS5jb250YWlucyhub2RlLmxhdCwgbm9kZS5sbmcpICkgeworCQkJCQkJCXRpbGUuYWRkTm9kZShub2RlKTsKKwkJCQkJCQlhc3NpZ25lZCA9IHRydWU7CisJCQkJCQkJaW50IGlkeCA9IChpbnQpKG5vZGUubGF0ICsgOTAuMCk7CisJCQkJCQkJbGluZWFyTGF0Q291bnRbaWR4XSArKzsKKwkJCQkJCQlicmVhazsKKwkJCQkJCX0KKwkJCQkJfQorCQkJCQlpZighYXNzaWduZWQpIEFjdGl2YXRvci5sb2dJbmZvcm1hdGlvbigiRXJyb3IsIGZhaWxlZCB0byBhc3NpZ24gIitpZCsiIGF0ICIrbGF0KyIsICIrbG5nICk7CisJCQkJfSAKKwkJCQkKKwkJCQkKKwkJCX0vLyBmb3IgYWxsIGlkcwkKKwkJfS8vIGZvciBhbGwgY291bnRyaWVzCisJCQorCQlpbnQgbGFyZ2VzdCA9IDA7CisJCWZvcihUaWxlIHRpbGU6IHRpbGVMaXN0KSB7CisJCQlpZih0aWxlLmdldE51bU5vZGVzKCkgPiBsYXJnZXN0KSBsYXJnZXN0ID0gdGlsZS5nZXROdW1Ob2RlcygpOworCQkJCisJCX0KKwkJCisJCUFjdGl2YXRvci5sb2dJbmZvcm1hdGlvbigiYXNzaWduZWQgYWxsIHBvaW50cy4gbGFyZ2VzdCB0aWxlIGlzICIrbGFyZ2VzdCk7CisJfS8vYXNzaWduQWxsTm9kZXMKKwkKKworCisJLyoqCisJICogZm9yIHRlc3RpbmcKKwkgKiBAcGFyYW0gY291bnRyeQorCSAqIEByZXR1cm4gY291bnRyeVBvbHlnb25NYXAKKwkgKiBLZXk6IGNvdW50cnkgbmFtZSwgVmFsdWU6IHBvbHlnb25zIHdpdGhpbiBjb3VudHJ5CisJICovCisJcHVibGljIHZvaWQgcmVhZElEc0J5Q291bnRyeUNvZGUoKSB7CisJCQorCQlmb3IgKGludCBpID0gMDsgaSA8IGNvdW50cmllc1RvUHJvY2Vzcy5sZW5ndGg7IGkgKyspIHsJCisJCQlTdHJpbmcgY291bnRyeSA9IGNvdW50cmllc1RvUHJvY2Vzc1tpXTsKKwkJCVNldDxTdHJpbmc+IGNvdW50cnlJRFNldCA9IG51bGw7CisJCQlOYW1lUmVhZGVyIG5hbWVSZWFkZXIgPSBuZXcgTmFtZVJlYWRlcigpOworCQkJaWYoY291bnRyeUhpZ2hlc3RJZE1hcC5jb250YWluc0tleShjb3VudHJ5KSkgeworCQkJCWNvdW50cnlJRFNldCA9IGNvdW50cnlIaWdoZXN0SWRNYXAuZ2V0KGNvdW50cnkpOworCQkJfSBlbHNlIHsKKwkJCQljb3VudHJ5SURTZXQgPSBuZXcgSGFzaFNldDxTdHJpbmc+KCk7CisJCQkJY291bnRyeUhpZ2hlc3RJZE1hcC5wdXQoY291bnRyeSwgY291bnRyeUlEU2V0KTsKKwkJCX0KKwkJCQorCQkJU2V0PFN0cmluZz4gaWRTZXQgPSAobmFtZVJlYWRlci5yZWFkTmFtZXNCeUNvdW50cnlDb2RlKGNvdW50cnkpKS5rZXlTZXQoKTsKKwkJCQorCQkJSXRlcmF0b3I8U3RyaW5nPiBpdGVyID0gaWRTZXQuaXRlcmF0b3IoKTsKKwkJCXdoaWxlKCAoaXRlciE9bnVsbCkmJihpdGVyLmhhc05leHQoKSkgKSB7CisJCQkJCVN0cmluZyBpZCA9IGl0ZXIubmV4dCgpOworCQkJCQlpZighaWQuZXF1YWxzSWdub3JlQ2FzZShjb3VudHJ5KSkgeworCQkJCQkJY291bnRyeUlEU2V0LmFkZChpZCk7CisJCQkJCX0KKwkJCX0KKwkJCisJCQkKKwkJCQorCQkJCisJCQlpZihjb3VudHJ5SURTZXQuc2l6ZSgpPT0wKSBjb3VudHJ5SURTZXQuYWRkKGNvdW50cnkpOworCQkJLy8gQWN0aXZhdG9yLmxvZ0luZm9ybWF0aW9uKCJjb3VudHJ5ICIrY291bnRyeSsiIGhhcyAiK2NvdW50cnlJRFNldC5zaXplKCkrIiBpZHMiKTsKKwkJCWludCBsdmwgPSBnZXRIaWdoZXN0QWRtaW5MZXZlbChjb3VudHJ5SURTZXQpOworCQkJCisJCQlpZihsdmwgPj0xKSB7CisJCQkJU2V0PFN0cmluZz4gcmVkdWNlZElEU2V0ID0gZ2V0SGlnaGVzdEFkbWluU2V0KGNvdW50cnlJRFNldCwgbHZsLCBjb3VudHJ5KTsKKwkJCQljb3VudHJ5SURTZXQgPSByZWR1Y2VkSURTZXQ7CisJCQl9CisJCQkvL0FjdGl2YXRvci5sb2dJbmZvcm1hdGlvbigiICAgYXQgYWRtaW4gbGV2ZWwgIitsdmwrIiBjb3VudHJ5ICIrY291bnRyeSsiIGhhcyAiK2NvdW50cnlJRFNldC5zaXplKCkrIiBpZHMiKTsKKwkJCWNvdW50cnlIaWdoZXN0SWRNYXAucHV0KGNvdW50cnksIGNvdW50cnlJRFNldCk7CisJCQkKKwkJfS8vIGZvciBhbGwgY291bnRyaWVzIHRvIHByb2Nlc3MKKwkJCisJCQorCX0vLyByZWFkQ291bnRyeUNvZGVzCisJCisJLyoqCisJICogRm9yIHRlc3RpbmcKKwkgKi8KKy8qCXB1YmxpYyBTZXQ8U3RyaW5nW10+IGdldFdvcmxkRnJvbUNvbW1vbkJvcmRlclJlYWRlcigpIHsKKwkJU2V0PFN0cmluZ1tdPiBpZFBhaXJzU2V0PSBuZXcgSGFzaFNldDxTdHJpbmdbXT4oKTsKKwkJb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcm5hbC5kYXRhLmdlb2dyYXBoeS5ncmFwaHN5bmNocm9uaXplci5Db21tb25Cb3JkZXJSZWFkZXIgY2JyID0gbmV3IENvbW1vbkJvcmRlclJlYWRlcigpOworCQlJdGVyYXRvcjxTdHJpbmc+IGl0ZXIgPSBjYnIuZ2V0Q29tbW9uQm9yZGVyTWFwKCkua2V5U2V0KCkuaXRlcmF0b3IoKTsKKwkJd2hpbGUoKGl0ZXIhPW51bGwpJiYoaXRlci5oYXNOZXh0KCkpKSB7CisJCQlTdHJpbmcga2V5ID0gaXRlci5uZXh0KCk7CisJCQlMaXN0PENvbW1vbkJvcmRlclJlbGF0aW9uPiByZWxhdGlvbnMgPSBjYnIuY29tbW9uQm9yZGVyTWFwLmdldChrZXkpOworCQkJZm9yKENvbW1vbkJvcmRlclJlbGF0aW9uIHJlbDpyZWxhdGlvbnMpIHsKKwkJCQlTdHJpbmdbXSBpZFBhaXIgPSBuZXcgU3RyaW5nWzJdOworCQkJCWlkUGFpclswXSA9ICByZWwuaWQxOworCQkJCWlkUGFpclsxXSA9ICByZWwuaWQyOworCQkJCWlkUGFpcnNTZXQuYWRkKGlkUGFpcik7CisJCQl9CisJCX0KKwkJcmV0dXJuIGlkUGFpcnNTZXQ7CisJfS8vZ2V0V29ybGRGcm9tQ29tbW9uQm9yZGVyUmVhZGVyKCkKKyovCisJCisJLyoqCisJICogCisJICovCisJcHVibGljIHZvaWQgcmVhZFdvcmxkQm9uZHMoU2V0PFN0cmluZ1tdPiBpZFBhaXJzU2V0KSB7CisJCWZvcihTdHJpbmdbXWlkUGFpcjogaWRQYWlyc1NldCkgeworCQkJCVN0cmluZyBpZDEgPSBpZFBhaXJbMF07CisJCQkJU3RyaW5nIGlkMiA9IGlkUGFpclsxXTsKKwkJCQlCb25kIGIgPSBuZXcgQm9uZChpZDEsaWQyKTsKKwkJCQl3b3JsZEJvbmRNYXAucHV0KGIuYm9uZElELCBiKTsgLy8gYWxsIHRoZSBib25kc3MgaW4gdGhlIHdvcmxkCisJCQkJCisJCQkJLy8gYWRkIHRoZSBib25kIHRvIHRoZSBub2RlcyBhcyB3ZWxsLgorCQkJCU5vZGUgbjEgPSB3b3JsZE5vZGVNYXAuZ2V0KGlkMSk7CisJCQkJTm9kZSBuMiA9IHdvcmxkTm9kZU1hcC5nZXQoaWQyKTsKKwkJCQkKKwkJCQlpZihuMT09bnVsbCkgeworCQkJCQkvLyBBY3RpdmF0b3IubG9nSW5mb3JtYXRpb24oIm5vIG5vZGUgZm9yIGlkICIraWQxKTsKKwkJCQkJCisJCQkJfSBlbHNlIHsKKwkJCQkJbjEuYm9uZFNldC5hZGQoYik7CisJCQkJfQorCQkJCWlmKG4yPT1udWxsKSB7CisJCQkJCS8vIEFjdGl2YXRvci5sb2dJbmZvcm1hdGlvbigiMiBubyBub2RlIGZvciBpZCAiK2lkMik7CisJCQkJCQorCQkJCX0gZWxzZSB7CisJCQkJCW4yLmJvbmRTZXQuYWRkKGIpOworCQkJCX0KKwkJCQkKKwkJfS8vIGFsbCBpZFBhaXJzCisJfQorCQkKKworCQorCS8qKgorCSAqIHJlYWQgaW4gYSBsaXN0IG9mIGFsbCBjb3VudHJpZXMKKwkgKi8KKwlAU3VwcHJlc3NXYXJuaW5ncygibmxzIikKKwlwdWJsaWMgdm9pZCBtYXBDb2RlcygpIHsKKwkJCisJCSAgU3RyaW5nIHJlY29yZDsgIAorICAgICAgICAgIGludCByZWNDb3VudCA9IDA7CisgICAgICAgICAgQnVmZmVyZWRSZWFkZXIgZCA9IG51bGw7CisgICAgICAgICAgdHJ5IHsgCisgICAgICAgIAkgIGQgPSBuZXcgQnVmZmVyZWRSZWFkZXIobmV3IElucHV0U3RyZWFtUmVhZGVyKENPREVTX0ZJTEVfVVJJLm9wZW5TdHJlYW0oKSkpOworCisgICAgICAgICAgICAgIHdoaWxlICggKHJlY29yZD1kLnJlYWRMaW5lKCkpICE9IG51bGwgKSB7IAorICAgICAgICAgICAgICAgICByZWNDb3VudCsrOyAKKyAgICAgICAgICAgICAgICAgU3RyaW5nVG9rZW5pemVyIHN0ID0gbmV3IFN0cmluZ1Rva2VuaXplcihyZWNvcmQgKTsKKyAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgIEBTdXBwcmVzc1dhcm5pbmdzKCJ1bnVzZWQiKQorCQkJCSBTdHJpbmcgbmFtZSA9IHN0Lm5leHRUb2tlbigiLCIpOworICAgICAgICAgICAgICAgICAKKwkJCQkgU3RyaW5nIHR3b0xldHRlciA9IHN0Lm5leHRUb2tlbigiLCIpOworCQkJCSBTdHJpbmcgdGhyZWVMZXR0ZXIgPSBzdC5uZXh0VG9rZW4oIiwiKTsKKwkJCQkgCisJCQkJIGNvdW50cnlDb2RlMnRvMy5wdXQodHdvTGV0dGVyLHRocmVlTGV0dGVyKTsKKwkJCQkgY291bnRyeUNvZGUzdG8yLnB1dCh0aHJlZUxldHRlcix0d29MZXR0ZXIpOworICAgICAgICAgICAgICB9IC8vIGxpbmVzCisgICAgICAgICAgICAgCisgICAgICAgICAgIH0gY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsgCisgICAgICAgICAgICAgIC8vIGNhdGNoIGlvIGVycm9ycyBmcm9tIEZpbGVJbnB1dFN0cmVhbSBvciByZWFkTGluZSgpIAorICAgICAgICAgICAgICBBY3RpdmF0b3IubG9nSW5mb3JtYXRpb24oIiBJT0V4Y2VwdGlvbiBlcnJvciEiICsgZS5nZXRNZXNzYWdlKCkpOyAKKyAgICAgICAgICAgfSBmaW5hbGx5IHsKKyAgICAgICAgCSAgIHRyeSB7CisgICAgICAgIAkJICAgZC5jbG9zZSgpOworICAgICAgICAJICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsgfQorICAgICAgICAgICB9CisJfSAvLyByZWFkIGNvZGVzCisJCisKKwkKKy8vCS8qKgorLy8JICogR2V0cyBhIGNvbXBhdGlibGUgaW5wdXQgc3RyZWFtIGZvciB0aGUgZ2l2ZW4gVVJJCisvLwkgKiBAcmV0dXJuCisvLwkgKiBAdGhyb3dzIElPRXhjZXB0aW9uCisvLwkgKi8KKy8vCXByaXZhdGUgSW5wdXRTdHJlYW0gZ2V0SW5wdXRTdHJlYW1Gb3JVUkkoVVJJIHVyaSkgdGhyb3dzIElPRXhjZXB0aW9uCisvLwl7CisvLwkJcmV0dXJuIG5ldyBFeHRlbnNpYmxlVVJJQ29udmVydGVySW1wbCgpLmNyZWF0ZUlucHV0U3RyZWFtKHVyaSk7CisvLwl9CisJCQorCS8qKgorCSAqIAorCSAqIEBwYXJhbSBhbGxJZFNldAorCSAqIEByZXR1cm4KKwkgKi8KKwlwdWJsaWMgIFNldDxTdHJpbmc+IGdldEhpZ2hlc3RBZG1pblNldChTZXQ8U3RyaW5nPiBhbGxJZFNldCwgaW50IG1heEFkbWluLCAgU3RyaW5nIHRocmVlTGV0dGVyQ29kZSkgeworCQlTZXQ8U3RyaW5nPiBsZXZlbGVkSURMaXN0ID0gbmV3IEhhc2hTZXQ8U3RyaW5nPigpOworCQlmb3IoU3RyaW5nIHN0ZW1pZDogYWxsSWRTZXQpIHsKKwkJCS8vQWN0aXZhdG9yLmxvZ0luZm9ybWF0aW9uKCJpZCA9ICIrc3RlbWlkKyIgIit0aHJlZUxldHRlckNvZGUpOworCQkJaW50IGx2bCA9IGdldEFkbWluTGV2ZWwoc3RlbWlkKTsKKwkJCWlmKChtYXhBZG1pbiA+PTEpJiYobHZsID09IG1heEFkbWluKSkgeworCQkJCWxldmVsZWRJRExpc3QuYWRkKHN0ZW1pZCk7CisJCQl9CisJCQlpZigobWF4QWRtaW4gPT0wKSYmKGx2bCA9PSBtYXhBZG1pbikpIHsKKwkJCQlsZXZlbGVkSURMaXN0LmFkZCh0aHJlZUxldHRlckNvZGUpOworCQkJfQorCQl9CisJCXJldHVybiBsZXZlbGVkSURMaXN0OworCX0KKwkKKwkvKioKKwkgKiBAcGFyYW0gc3RlbWlkCisJICogQHJldHVybiBhZG1pbmlzdHJhdGlvbiBsZXZlbAorCSAqLworCXB1YmxpYyBpbnQgZ2V0QWRtaW5MZXZlbChTdHJpbmcgc3RlbWlkKSB7CisJCQorCQlTdHJpbmcgW10gc3BsaXRJRCA9IHN0ZW1pZC5zcGxpdCgiLSIpOyAvLyROT04tTkxTLTEkCisJCWlmKHNwbGl0SUQubGVuZ3RoID09IDQpIHsKKwkJCXJldHVybiAzOworCQl9CisJCWVsc2UgaWYoc3BsaXRJRC5sZW5ndGggPT0gMykgeworCQkJcmV0dXJuIDI7CisJCX0KKwkJZWxzZSBpZihzcGxpdElELmxlbmd0aCA9PSAyKSB7CisJCQlyZXR1cm4gMTsKKwkJfQorCQlyZXR1cm4gc3BsaXRJRC5sZW5ndGgtMTsKKwl9CisJCisJLyoqCisJICogCisJICogQHBhcmFtIGFsbElkU2V0CisJICogQHJldHVybiB0aGUgaGlnaGVzdCBhZG1pbiBsZXZlbCBvZiB0aGUgc2V0CisJICovCisJcHVibGljICBpbnQgZ2V0SGlnaGVzdEFkbWluTGV2ZWwoU2V0PFN0cmluZz4gYWxsSWRTZXQpIHsKKwkJaW50IG1heEFkbWluID0gMDsKKwkJCisJCWZvcihTdHJpbmcgc3RlbWlkOiBhbGxJZFNldCkgeworCQkJaW50IGx2bCA9IGdldEFkbWluTGV2ZWwoc3RlbWlkKTsKKwkJCWlmKGx2bCA+PSBtYXhBZG1pbikgbWF4QWRtaW4gPSBsdmw7CisJCQlpZihzdGVtaWQuaW5kZXhPZigiVVMtIik9PTApIHsgLy8kTk9OLU5MUy0xJAorCQkJCXJldHVybiAyOyAvLyBpZ25vcmUgdGhlIGxldmVsIDMgZGF0YSBmb3Igbm93ICh2ZXJtb250KQorCQkJfQorCQl9CisJCQorCQlyZXR1cm4gbWF4QWRtaW47CisJfQorCQorCS8qKgorCSAqIEBwYXJhbSBmaWxlcworCSAqIEByZXR1cm4gcmV0VmFsCisJICovCisJcHVibGljIHN0YXRpYyBGaWxlW10gZmlsdGVyQW5kU29ydEZpbGVzKEZpbGVbXSBmaWxlcykgeworCQlmaWx0ZXJlZCA9IG5ldyBBcnJheUxpc3Q8RmlsZT4oKTsKKwkJZm9yIChpbnQgaSA9IDA7IGkgPCBmaWxlcy5sZW5ndGg7IGkgKyspIHsKKwkJCVN0cmluZyBuYW1lID0gZmlsZXNbaV0uZ2V0TmFtZSgpOworCQkJaWYobmFtZS5pbmRleE9mKCJfbmFtZXMucHJvcGVydGllcyIpPj0xKSB7IC8vJE5PTi1OTFMtMSQgCisJCQkJZmlsdGVyZWQuYWRkKGZpbGVzW2ldKTsJCQkKKwkJCX0KKwkJfQorCQlyZXRWYWwgPSBuZXcgRmlsZVtmaWx0ZXJlZC5zaXplKCldOworCQlmb3IgKGludCBpID0gMDsgaSA8IGZpbHRlcmVkLnNpemUoKTsgaSArKykgeworCQkJcmV0VmFsW2ldID0gZmlsdGVyZWQuZ2V0KGkpOworCQl9CisJCUFycmF5cy5zb3J0KHJldFZhbCk7CisJCXJldHVybiByZXRWYWw7CisJfQorCQorCQorCS8qKgorCSAqIGlubmVyIGNsYXNzLiBCb25kIGJldHdlZW4gdHdvIG5vZGVzCisJICogQGF1dGhvciBqaGthdWYKKwkgKgorCSAqLworCXB1YmxpYyBjbGFzcyBCb25kICB7CisJCQorCQlTdHJpbmcgYm9uZElEOworCQlTdHJpbmcgaWQxOworCQlTdHJpbmcgaWQyOworCQkKKwkJLyoqCisJCSAqIEJvbmQgYmV0d2VlbiB0d28gbm9kZXMKKwkJICovCisJCUBTdXBwcmVzc1dhcm5pbmdzKCJubHMiKQorCQlwdWJsaWMgQm9uZChTdHJpbmcgbm9kZTEsIFN0cmluZyBub2RlMikgeworCQkJU3RyaW5nW10gdGVtcCA9IG5ldyBTdHJpbmdbMl07CisJCQl0ZW1wWzBdID0gbm9kZTE7CisJCQl0ZW1wWzFdID0gbm9kZTI7CisJCQlBcnJheXMuc29ydCh0ZW1wKTsKKwkJCWJvbmRJRCA9IHRlbXBbMF0rIl8iK3RlbXBbMV07CisJCQlpZDEgPSB0ZW1wWzBdOworCQkJaWQyID0gdGVtcFsxXTsKKwkJfQorCQkKKwkJLyoqCisJCSAqIGZyb20gb25lIG5vZGVzIGlkIHJldHVybiB0aGUgb3RoZXIKKwkJICogQHBhcmFtIG5vZGVJRAorCQkgKiBAcmV0dXJuCisJCSAqLworCQlwdWJsaWMgU3RyaW5nIGdldE90aGVySUQoU3RyaW5nIG5vZGVJRCkgeworCQkJaWYoaWQxLmVxdWFsc0lnbm9yZUNhc2Uobm9kZUlEKSkgeworCQkJCXJldHVybiBpZDI7CisJCQl9IGVsc2UgeworCQkJCXJldHVybiBpZDE7CisJCQl9CisJCX0KKwkJCisJfS8vQm9uZAorCQorCS8qKgorCSAqIGlubmVyIGNsYXNzCisJICogQGF1dGhvciBqaGthdWYKKwkgKgorCSAqLworCXB1YmxpYyBjbGFzcyBFZGdlICB7CisJCQorCQlTZXQ8U3RyaW5nPiBib25kU2V0ID0gbmV3IEhhc2hTZXQ8U3RyaW5nPigpOworCQlpbnQgaW5kZXg7CisJCQorCQkvKioKKwkJICogRWRnZSBiZXR3ZWVuIHR3byB0aWxlcworCQkgKi8KKwkJcHVibGljIEVkZ2UoaW50IGlkeCkgeworCQkJaW5kZXggPSBpZHg7CisJCX0KKwkJCisJCQorCQlwdWJsaWMgdm9pZCBhZGRCb25kdG9FZGdlKFN0cmluZyBib25kSUQpIHsKKwkJCXRoaXMuYm9uZFNldC5hZGQoYm9uZElEKTsKKwkJfQorCQkKKwkJcHVibGljIGludCBnZXRTaXplKCkgeworCQkJcmV0dXJuIGJvbmRTZXQuc2l6ZSgpOworCQl9CisJCQorCX0vL0VkZ2UKKwkKKwkvKioKKwkgKiBpbm5lciBjbGFzcworCSAqIEBhdXRob3IgamhrYXVmCisJICoKKwkgKi8KKwlAU3VwcHJlc3NXYXJuaW5ncygic2VyaWFsIikKKwlwdWJsaWMgY2xhc3MgVGlsZSBleHRlbmRzIFJlY3RhbmdsZSB7CisJCQorCQlwcml2YXRlIFNldDxOb2RlPiBub2RlU2V0ID0gbmV3IEhhc2hTZXQ8Tm9kZT4oKTsKKwkJU3RyaW5nICBpZDsKKwkJaW50IG51bU5vZGVzID0gMDsKKwkJCisJCUVkZ2VbXSBlZGdlcyA9IG5ldyBFZGdlWzhdOyAvLyBlaWdodCBuZWFyZXN0IG5laWdoYm9ycworCQorCQkvKioKKwkJICogCisJCSAqLworCQlwdWJsaWMgVGlsZShTdHJpbmcgaWQsIGludCB4LCBpbnQgeSwgaW50IHBlcmlvZCkgeworCQkJc3VwZXIoeCx5LHBlcmlvZCxwZXJpb2QpOworCQkJdGhpcy5pZCA9IGlkOworCQkJZm9yKGludCBpID0gMDsgaSA8IDg7IGkgKyspIHsKKwkJCQllZGdlc1tpXSA9IG5ldyBFZGdlKGkpOworCQkJfQorCQl9CisJCQorCQkvKioKKwkJICogCisJCSAqIEBwYXJhbSBuCisJCSAqLworCQlwdWJsaWMgdm9pZCBhZGROb2RlKE5vZGUgbikgeworCQkJbm9kZVNldC5hZGQobik7CisJCQludW1Ob2RlcyArKzsKKwkJfQorCQkKKwkJLyoqCisJCSAqIAorCQkgKi8KKwkJcHVibGljIGludCBnZXROdW1Ob2RlcygpIHsKKwkJCXJldHVybiBudW1Ob2RlczsKKwkJfQorCX0vLyBUaWxlIGlubmVyIGNsYXNzCisJCisJLyoqCisJICogaW5uZXIgY2xhc3MKKwkgKiBAYXV0aG9yIGpoa2F1ZgorCSAqCisJICovCisJcHVibGljIGNsYXNzIE5vZGUgeworCQkKKwkJZG91YmxlIGxhdDsKKwkJZG91YmxlIGxuZzsKKwkJU3RyaW5nIGlkOworCQkKKwkJU2V0PEJvbmQ+IGJvbmRTZXQgPSBuZXcgSGFzaFNldDxCb25kPigpOworCQkKKwkJLyoqCisJCSAqIAorCQkgKi8KKwkJcHVibGljIE5vZGUoU3RyaW5nIGlkLCBkb3VibGUgbGF0LCBkb3VibGUgbG5nKSB7CisJCQl0aGlzLmlkID0gaWQ7CisJCQl0aGlzLmxhdCA9IGxhdDsKKwkJCXRoaXMubG5nID0gbG5nOworCQkJd29ybGROb2RlTWFwLnB1dChpZCwgdGhpcyk7CisJCX0KKwl9Ly8gTm9kZSBpbm5lciBjbGFzcworCQorCS8qKgorCSAqIGlubmVyIGNsYXNzCisJICogQGF1dGhvciBqaGthdWYKKwkgKgorCSAqLworCXB1YmxpYyBjbGFzcyBQYXJ0aXRpb24geworCQkKKwkJZG91YmxlIGxhdE1pbjsKKwkJZG91YmxlIGxuZ01pbjsKKwkJZG91YmxlIGxhdE1heDsKKwkJZG91YmxlIGxuZ01heDsKKwkJaW50IGlkOworCQlwcml2YXRlIFNldDxUaWxlPiB0aWxlU2V0ID0gbmV3IEhhc2hTZXQ8VGlsZT4oKTsKKwkJaW50IHNpemUgPSAwOworCQkKKwkJCisJCS8qKgorCQkgKiAKKwkJICovCisJCXB1YmxpYyBQYXJ0aXRpb24oaW50IGlkLCBpbnQgbGF0TWluLCBpbnQgbG5nTWluLCBpbnQgbGF0TWF4LCBpbnQgbG5nTWF4KSB7CisJCQl0aGlzLmlkID0gaWQ7CisJCQl0aGlzLmxhdE1pbiA9IGxhdE1pbjsKKwkJCXRoaXMubG5nTWluID0gbG5nTWluOworCQkJdGhpcy5sYXRNYXggPSBsYXRNYXg7CisJCQl0aGlzLmxuZ01heCA9IGxuZ01heDsKKwkJfQorCQkKKwkJcHVibGljIGludCBnZXRTaXplKCkgeworCQkJcmV0dXJuIHNpemU7CisJCX0KKwkJCisJCXB1YmxpYyB2b2lkIGFkZFRpbGUoVGlsZSB0KSB7CisJCQlpZih0Lm51bU5vZGVzID4gMCApIHsKKwkJCQl0aWxlU2V0LmFkZCh0KTsKKwkJCQlzaXplICs9IHQubnVtTm9kZXM7CisJCQl9CisJCX0vLyBhZGRUaWxlCisJCQorCQkKKwkJLyoqCisJCSAqIAorCQkgKiBAcmV0dXJuIGEgc2V0IG9mIGlkcyBjb3JyZXNwb25kaW5nIHRvIGFsbCBub2RlcyBpbiB0aGlzIHRpbGUKKwkJICovCisJCXB1YmxpYyBTZXQ8U3RyaW5nPiBnZXRBbGxOb2RlcygpIHsKKwkJCVNldDxTdHJpbmc+IG5vZGVJZFNldCA9IG5ldyBIYXNoU2V0PFN0cmluZz4oKTsKKwkJCWZvcihUaWxlIHRpbGU6IHRpbGVTZXQpIHsKKwkJCQlmb3IoTm9kZSBub2RlOiB0aWxlLm5vZGVTZXQpIHsKKwkJCQkJbm9kZUlkU2V0LmFkZChub2RlLmlkKTsKKwkJCQl9Ly8gYWxsIG5vZGVzIGluIHRpbGUKKwkJCX0vLyBhbGwgdGlsZXMgaW4gdGhpcyBwYXJpdGlvbgorCQkJcmV0dXJuIG5vZGVJZFNldDsKKwkJCisJCX0vLyBnZXRBbGxOb2RlcworCQkKKwkJCisJCQorCX0vLyBQYXJ0aXRpb24gaW5uZXIgY2xhc3MKKwkKKwkvKioKKwkgKiBpbm5lciBjbGFzcworCSAqIEBhdXRob3IgamhrYXVmCisJICoKKwkgKi8KKwlwdWJsaWMgY2xhc3MgUGFydGl0aW9uUm93IHsKKwkJCisJCUxpc3Q8UGFydGl0aW9uPiBwYXJ0aXRpb25MaXN0ID0gbmV3IEFycmF5TGlzdDxQYXJ0aXRpb24+KCk7CisJCQorCQkvKioKKwkJICogCisJCSAqLworCQlwdWJsaWMgUGFydGl0aW9uUm93KCkgeworCQkJCisJCX0vLyBjb25zdHJ1Y3RvcgorCQkKKwkJcHVibGljIHZvaWQgYWRkKFBhcnRpdGlvbiBwKSB7CisJCQlwYXJ0aXRpb25MaXN0LmFkZChwKTsKKwkJfQorCQkKKwl9Ly8gUGFydGl0aW9uUm93IGlubmVyIGNsYXNzCisJCQorCQorfS8vLyBDbGFzcyBHbG9iYWxUaWxlR2VuZXJhdG9yCmRpZmYgLS1naXQgYS9kaXN0cmlidXRlZC9vcmcuZWNsaXBzZS5zdGVtLmdyYXBoc3luY2hyb25pemVyL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2dyYXBoc3luY2hyb25pemVyL3V0aWwvR3JhcGhzeW5jaHJvbml6ZXJBZGFwdGVyRmFjdG9yeS5qYXZhIGIvZGlzdHJpYnV0ZWQvb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaHN5bmNocm9uaXplci9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9ncmFwaHN5bmNocm9uaXplci91dGlsL0dyYXBoc3luY2hyb25pemVyQWRhcHRlckZhY3RvcnkuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYmE5OTczCi0tLSAvZGV2L251bGwKKysrIGIvZGlzdHJpYnV0ZWQvb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaHN5bmNocm9uaXplci9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9ncmFwaHN5bmNocm9uaXplci91dGlsL0dyYXBoc3luY2hyb25pemVyQWRhcHRlckZhY3RvcnkuamF2YQpAQCAtMCwwICsxLDE0NyBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmdyYXBoc3luY2hyb25pemVyLnV0aWw7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTEgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5BZGFwdGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LmltcGwuQWRhcHRlckZhY3RvcnlJbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5HcmFwaFBhcnRpdGlvbmVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhzeW5jaHJvbml6ZXIuR3JhcGhzeW5jaHJvbml6ZXJQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhzeW5jaHJvbml6ZXIuU3luY2hHcmFwaFBhcnRpdGlvbmVyOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiBUaGUgPGI+QWRhcHRlciBGYWN0b3J5PC9iPiBmb3IgdGhlIG1vZGVsLgorICogSXQgcHJvdmlkZXMgYW4gYWRhcHRlciA8Y29kZT5jcmVhdGVYWFg8L2NvZGU+IG1ldGhvZCBmb3IgZWFjaCBjbGFzcyBvZiB0aGUgbW9kZWwuCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaHN5bmNocm9uaXplci5HcmFwaHN5bmNocm9uaXplclBhY2thZ2UKKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIEdyYXBoc3luY2hyb25pemVyQWRhcHRlckZhY3RvcnkgZXh0ZW5kcyBBZGFwdGVyRmFjdG9yeUltcGwgeworCS8qKgorCSAqIFRoZSBjYWNoZWQgbW9kZWwgcGFja2FnZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgc3RhdGljIEdyYXBoc3luY2hyb25pemVyUGFja2FnZSBtb2RlbFBhY2thZ2U7CisKKwkvKioKKwkgKiBDcmVhdGVzIGFuIGluc3RhbmNlIG9mIHRoZSBhZGFwdGVyIGZhY3RvcnkuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEdyYXBoc3luY2hyb25pemVyQWRhcHRlckZhY3RvcnkoKSB7CisJCWlmIChtb2RlbFBhY2thZ2UgPT0gbnVsbCkgeworCQkJbW9kZWxQYWNrYWdlID0gR3JhcGhzeW5jaHJvbml6ZXJQYWNrYWdlLmVJTlNUQU5DRTsKKwkJfQorCX0KKworCS8qKgorCSAqIFJldHVybnMgd2hldGhlciB0aGlzIGZhY3RvcnkgaXMgYXBwbGljYWJsZSBmb3IgdGhlIHR5cGUgb2YgdGhlIG9iamVjdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyA8Y29kZT50cnVlPC9jb2RlPiBpZiB0aGUgb2JqZWN0IGlzIGVpdGhlciB0aGUgbW9kZWwncyBwYWNrYWdlIG9yIGlzIGFuIGluc3RhbmNlIG9iamVjdCBvZiB0aGUgbW9kZWwuCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB3aGV0aGVyIHRoaXMgZmFjdG9yeSBpcyBhcHBsaWNhYmxlIGZvciB0aGUgdHlwZSBvZiB0aGUgb2JqZWN0LgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgYm9vbGVhbiBpc0ZhY3RvcnlGb3JUeXBlKE9iamVjdCBvYmplY3QpIHsKKwkJaWYgKG9iamVjdCA9PSBtb2RlbFBhY2thZ2UpIHsKKwkJCXJldHVybiB0cnVlOworCQl9CisJCWlmIChvYmplY3QgaW5zdGFuY2VvZiBFT2JqZWN0KSB7CisJCQlyZXR1cm4gKChFT2JqZWN0KW9iamVjdCkuZUNsYXNzKCkuZ2V0RVBhY2thZ2UoKSA9PSBtb2RlbFBhY2thZ2U7CisJCX0KKwkJcmV0dXJuIGZhbHNlOworCX0KKworCS8qKgorCSAqIFRoZSBzd2l0Y2ggdGhhdCBkZWxlZ2F0ZXMgdG8gdGhlIDxjb2RlPmNyZWF0ZVhYWDwvY29kZT4gbWV0aG9kcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgR3JhcGhzeW5jaHJvbml6ZXJTd2l0Y2g8QWRhcHRlcj4gbW9kZWxTd2l0Y2ggPQorCQluZXcgR3JhcGhzeW5jaHJvbml6ZXJTd2l0Y2g8QWRhcHRlcj4oKSB7CisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyBBZGFwdGVyIGNhc2VTeW5jaEdyYXBoUGFydGl0aW9uZXIoU3luY2hHcmFwaFBhcnRpdGlvbmVyIG9iamVjdCkgeworCQkJCXJldHVybiBjcmVhdGVTeW5jaEdyYXBoUGFydGl0aW9uZXJBZGFwdGVyKCk7CisJCQl9CisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyBBZGFwdGVyIGNhc2VHcmFwaFBhcnRpdGlvbmVyKEdyYXBoUGFydGl0aW9uZXIgb2JqZWN0KSB7CisJCQkJcmV0dXJuIGNyZWF0ZUdyYXBoUGFydGl0aW9uZXJBZGFwdGVyKCk7CisJCQl9CisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyBBZGFwdGVyIGRlZmF1bHRDYXNlKEVPYmplY3Qgb2JqZWN0KSB7CisJCQkJcmV0dXJuIGNyZWF0ZUVPYmplY3RBZGFwdGVyKCk7CisJCQl9CisJCX07CisKKwkvKioKKwkgKiBDcmVhdGVzIGFuIGFkYXB0ZXIgZm9yIHRoZSA8Y29kZT50YXJnZXQ8L2NvZGU+LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIHRhcmdldCB0aGUgb2JqZWN0IHRvIGFkYXB0LgorCSAqIEByZXR1cm4gdGhlIGFkYXB0ZXIgZm9yIHRoZSA8Y29kZT50YXJnZXQ8L2NvZGU+LgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVBZGFwdGVyKE5vdGlmaWVyIHRhcmdldCkgeworCQlyZXR1cm4gbW9kZWxTd2l0Y2guZG9Td2l0Y2goKEVPYmplY3QpdGFyZ2V0KTsKKwl9CisKKworCS8qKgorCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaHN5bmNocm9uaXplci5TeW5jaEdyYXBoUGFydGl0aW9uZXIgPGVtPlN5bmNoIEdyYXBoIFBhcnRpdGlvbmVyPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsKKwkgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhzeW5jaHJvbml6ZXIuU3luY2hHcmFwaFBhcnRpdGlvbmVyCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZVN5bmNoR3JhcGhQYXJ0aXRpb25lckFkYXB0ZXIoKSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkdyYXBoUGFydGl0aW9uZXIgPGVtPlBhcnRpdGlvbmVyPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsKKwkgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5HcmFwaFBhcnRpdGlvbmVyCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZUdyYXBoUGFydGl0aW9uZXJBZGFwdGVyKCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIHRoZSBkZWZhdWx0IGNhc2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsLgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVFT2JqZWN0QWRhcHRlcigpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCit9IC8vR3JhcGhzeW5jaHJvbml6ZXJBZGFwdGVyRmFjdG9yeQpkaWZmIC0tZ2l0IGEvZGlzdHJpYnV0ZWQvb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaHN5bmNocm9uaXplci9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9ncmFwaHN5bmNocm9uaXplci91dGlsL0dyYXBoc3luY2hyb25pemVyU3dpdGNoLmphdmEgYi9kaXN0cmlidXRlZC9vcmcuZWNsaXBzZS5zdGVtLmdyYXBoc3luY2hyb25pemVyL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2dyYXBoc3luY2hyb25pemVyL3V0aWwvR3JhcGhzeW5jaHJvbml6ZXJTd2l0Y2guamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wOTkzODBmCi0tLSAvZGV2L251bGwKKysrIGIvZGlzdHJpYnV0ZWQvb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaHN5bmNocm9uaXplci9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9ncmFwaHN5bmNocm9uaXplci91dGlsL0dyYXBoc3luY2hyb25pemVyU3dpdGNoLmphdmEKQEAgLTAsMCArMSwxNTMgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaHN5bmNocm9uaXplci51dGlsOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDExIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5HcmFwaFBhcnRpdGlvbmVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhzeW5jaHJvbml6ZXIuR3JhcGhzeW5jaHJvbml6ZXJQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhzeW5jaHJvbml6ZXIuU3luY2hHcmFwaFBhcnRpdGlvbmVyOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiBUaGUgPGI+U3dpdGNoPC9iPiBmb3IgdGhlIG1vZGVsJ3MgaW5oZXJpdGFuY2UgaGllcmFyY2h5LgorICogSXQgc3VwcG9ydHMgdGhlIGNhbGwge0BsaW5rICNkb1N3aXRjaChFT2JqZWN0KSBkb1N3aXRjaChvYmplY3QpfQorICogdG8gaW52b2tlIHRoZSA8Y29kZT5jYXNlWFhYPC9jb2RlPiBtZXRob2QgZm9yIGVhY2ggY2xhc3Mgb2YgdGhlIG1vZGVsLAorICogc3RhcnRpbmcgd2l0aCB0aGUgYWN0dWFsIGNsYXNzIG9mIHRoZSBvYmplY3QKKyAqIGFuZCBwcm9jZWVkaW5nIHVwIHRoZSBpbmhlcml0YW5jZSBoaWVyYXJjaHkKKyAqIHVudGlsIGEgbm9uLW51bGwgcmVzdWx0IGlzIHJldHVybmVkLAorICogd2hpY2ggaXMgdGhlIHJlc3VsdCBvZiB0aGUgc3dpdGNoLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhzeW5jaHJvbml6ZXIuR3JhcGhzeW5jaHJvbml6ZXJQYWNrYWdlCisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBHcmFwaHN5bmNocm9uaXplclN3aXRjaDxUPiB7CisJLyoqCisJICogVGhlIGNhY2hlZCBtb2RlbCBwYWNrYWdlCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHN0YXRpYyBHcmFwaHN5bmNocm9uaXplclBhY2thZ2UgbW9kZWxQYWNrYWdlOworCisJLyoqCisJICogQ3JlYXRlcyBhbiBpbnN0YW5jZSBvZiB0aGUgc3dpdGNoLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBHcmFwaHN5bmNocm9uaXplclN3aXRjaCgpIHsKKwkJaWYgKG1vZGVsUGFja2FnZSA9PSBudWxsKSB7CisJCQltb2RlbFBhY2thZ2UgPSBHcmFwaHN5bmNocm9uaXplclBhY2thZ2UuZUlOU1RBTkNFOworCQl9CisJfQorCisJLyoqCisJICogQ2FsbHMgPGNvZGU+Y2FzZVhYWDwvY29kZT4gZm9yIGVhY2ggY2xhc3Mgb2YgdGhlIG1vZGVsIHVudGlsIG9uZSByZXR1cm5zIGEgbm9uIG51bGwgcmVzdWx0OyBpdCB5aWVsZHMgdGhhdCByZXN1bHQuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBmaXJzdCBub24tbnVsbCByZXN1bHQgcmV0dXJuZWQgYnkgYSA8Y29kZT5jYXNlWFhYPC9jb2RlPiBjYWxsLgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVCBkb1N3aXRjaChFT2JqZWN0IHRoZUVPYmplY3QpIHsKKwkJcmV0dXJuIGRvU3dpdGNoKHRoZUVPYmplY3QuZUNsYXNzKCksIHRoZUVPYmplY3QpOworCX0KKworCS8qKgorCSAqIENhbGxzIDxjb2RlPmNhc2VYWFg8L2NvZGU+IGZvciBlYWNoIGNsYXNzIG9mIHRoZSBtb2RlbCB1bnRpbCBvbmUgcmV0dXJucyBhIG5vbiBudWxsIHJlc3VsdDsgaXQgeWllbGRzIHRoYXQgcmVzdWx0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgZmlyc3Qgbm9uLW51bGwgcmVzdWx0IHJldHVybmVkIGJ5IGEgPGNvZGU+Y2FzZVhYWDwvY29kZT4gY2FsbC4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIFQgZG9Td2l0Y2goRUNsYXNzIHRoZUVDbGFzcywgRU9iamVjdCB0aGVFT2JqZWN0KSB7CisJCWlmICh0aGVFQ2xhc3MuZUNvbnRhaW5lcigpID09IG1vZGVsUGFja2FnZSkgeworCQkJcmV0dXJuIGRvU3dpdGNoKHRoZUVDbGFzcy5nZXRDbGFzc2lmaWVySUQoKSwgdGhlRU9iamVjdCk7CisJCX0KKwkJZWxzZSB7CisJCQlMaXN0PEVDbGFzcz4gZVN1cGVyVHlwZXMgPSB0aGVFQ2xhc3MuZ2V0RVN1cGVyVHlwZXMoKTsKKwkJCXJldHVybgorCQkJCWVTdXBlclR5cGVzLmlzRW1wdHkoKSA/CisJCQkJCWRlZmF1bHRDYXNlKHRoZUVPYmplY3QpIDoKKwkJCQkJZG9Td2l0Y2goZVN1cGVyVHlwZXMuZ2V0KDApLCB0aGVFT2JqZWN0KTsKKwkJfQorCX0KKworCS8qKgorCSAqIENhbGxzIDxjb2RlPmNhc2VYWFg8L2NvZGU+IGZvciBlYWNoIGNsYXNzIG9mIHRoZSBtb2RlbCB1bnRpbCBvbmUgcmV0dXJucyBhIG5vbiBudWxsIHJlc3VsdDsgaXQgeWllbGRzIHRoYXQgcmVzdWx0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgZmlyc3Qgbm9uLW51bGwgcmVzdWx0IHJldHVybmVkIGJ5IGEgPGNvZGU+Y2FzZVhYWDwvY29kZT4gY2FsbC4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIFQgZG9Td2l0Y2goaW50IGNsYXNzaWZpZXJJRCwgRU9iamVjdCB0aGVFT2JqZWN0KSB7CisJCXN3aXRjaCAoY2xhc3NpZmllcklEKSB7CisJCQljYXNlIEdyYXBoc3luY2hyb25pemVyUGFja2FnZS5TWU5DSF9HUkFQSF9QQVJUSVRJT05FUjogeworCQkJCVN5bmNoR3JhcGhQYXJ0aXRpb25lciBzeW5jaEdyYXBoUGFydGl0aW9uZXIgPSAoU3luY2hHcmFwaFBhcnRpdGlvbmVyKXRoZUVPYmplY3Q7CisJCQkJVCByZXN1bHQgPSBjYXNlU3luY2hHcmFwaFBhcnRpdGlvbmVyKHN5bmNoR3JhcGhQYXJ0aXRpb25lcik7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlR3JhcGhQYXJ0aXRpb25lcihzeW5jaEdyYXBoUGFydGl0aW9uZXIpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gZGVmYXVsdENhc2UodGhlRU9iamVjdCk7CisJCQkJcmV0dXJuIHJlc3VsdDsKKwkJCX0KKwkJCWRlZmF1bHQ6IHJldHVybiBkZWZhdWx0Q2FzZSh0aGVFT2JqZWN0KTsKKwkJfQorCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPlN5bmNoIEdyYXBoIFBhcnRpdGlvbmVyPC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7CisJICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCisJICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+U3luY2ggR3JhcGggUGFydGl0aW9uZXI8L2VtPicuCisJICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBUIGNhc2VTeW5jaEdyYXBoUGFydGl0aW9uZXIoU3luY2hHcmFwaFBhcnRpdGlvbmVyIG9iamVjdCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5QYXJ0aXRpb25lcjwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOworCSAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgorCSAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPlBhcnRpdGlvbmVyPC9lbT4nLgorCSAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVCBjYXNlR3JhcGhQYXJ0aXRpb25lcihHcmFwaFBhcnRpdGlvbmVyIG9iamVjdCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5FT2JqZWN0PC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7CisJICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2gsIGJ1dCB0aGlzIGlzIHRoZSBsYXN0IGNhc2UgYW55d2F5LgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgorCSAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkVPYmplY3Q8L2VtPicuCisJICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBUIGRlZmF1bHRDYXNlKEVPYmplY3Qgb2JqZWN0KSB7CisJCXJldHVybiBudWxsOworCX0KKworfSAvL0dyYXBoc3luY2hyb25pemVyU3dpdGNoCmRpZmYgLS1naXQgYS9kaXN0cmlidXRlZC9vcmcuZWNsaXBzZS5zdGVtLmdyYXBoc3luY2hyb25pemVyL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2dyYXBoc3luY2hyb25pemVyL3V0aWwvU3BlZWRUZXN0LmphdmEgYi9kaXN0cmlidXRlZC9vcmcuZWNsaXBzZS5zdGVtLmdyYXBoc3luY2hyb25pemVyL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2dyYXBoc3luY2hyb25pemVyL3V0aWwvU3BlZWRUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2ViMzYxOAotLS0gL2Rldi9udWxsCisrKyBiL2Rpc3RyaWJ1dGVkL29yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhzeW5jaHJvbml6ZXIvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZ3JhcGhzeW5jaHJvbml6ZXIvdXRpbC9TcGVlZFRlc3QuamF2YQpAQCAtMCwwICsxLDE1MCBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmdyYXBoc3luY2hyb25pemVyLnV0aWw7CisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDExIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGphdmEuaW8uQnl0ZUFycmF5SW5wdXRTdHJlYW07CitpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLmlvLk9iamVjdElucHV0U3RyZWFtOworaW1wb3J0IGphdmEuaW8uT2JqZWN0T3V0cHV0U3RyZWFtOworaW1wb3J0IGphdmEubmV0LkluZXRBZGRyZXNzOworaW1wb3J0IGphdmEubmV0LlNlcnZlclNvY2tldDsKK2ltcG9ydCBqYXZhLm5ldC5Tb2NrZXQ7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVByb2dyZXNzTW9uaXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU3RhdHVzOworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5qb2JzLkpvYjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmdyYXBoc3luY2hyb25pemVyLkFjdGl2YXRvcjsKKworLyoqCisgKiBOZXR3b3JrIHNwZWVkIHRlc3QgdXRpbGl0eQorICoKKyAqLworcHVibGljIGNsYXNzIFNwZWVkVGVzdCB7CisKKwlzdGF0aWMgYm9vbGVhbiBTRU5ERVIgPSB0cnVlOworCXN0YXRpYyBpbnQgQ09NTV9QT1JUID0gMTExMTsKKwlzdGF0aWMgU3RyaW5nIHJlbW90ZUhvc3Q7CisJCisJc3RhdGljIGludCBbXSBMQVJHRV9PQkpFQ1RfMUdCOworCXN0YXRpYyBpbnQgU0laRV9PRl9JTlQgPSA0OyAvLyBieXRlcworCS8qKgorCSAqIEBwYXJhbSBhcmdzCisJICovCisJcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgeworCQlpZihhcmdzLmxlbmd0aCA+IDApIHJlbW90ZUhvc3QgPSBhcmdzWzBdOworCQl0cnkgeworCQkJaWYoIVNFTkRFUikgc2V0dXBDb21tdW5pY2F0aW9uKCk7CisJCQllbHNlICBzcGVlZFRlc3QoKTsKKwkJfSBjYXRjaChFeGNlcHRpb24gZSkgeworCQkJZS5wcmludFN0YWNrVHJhY2UoKTsKKwkJfQorCX0KKworCXByaXZhdGUgc3RhdGljIHZvaWQgc2V0dXBDb21tdW5pY2F0aW9uKCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKKwkJU2VydmVyU29ja2V0IHNlcnZlclNvY2tldCA9IG5ldyBTZXJ2ZXJTb2NrZXQoQ09NTV9QT1JUKTsKKwkJSm9iIGFjY2VwdEpvYiA9IG5ldyBTb2NrZXRMaXN0ZW5lckpvYigiU29ja2V0IGxpc3RlbmVyICIsc2VydmVyU29ja2V0KTsKKwkJYWNjZXB0Sm9iLnNjaGVkdWxlKCk7CisJfQorCQorCXByb3RlY3RlZCBzdGF0aWMgY2xhc3MgU29ja2V0TGlzdGVuZXJKb2IgZXh0ZW5kcyBKb2IgeworCQlTZXJ2ZXJTb2NrZXQgc29ja2V0OworCQlwdWJsaWMgU29ja2V0TGlzdGVuZXJKb2IoU3RyaW5nIG5hbWUpIHsKKwkJCXN1cGVyKG5hbWUpOworCQl9CisJCXB1YmxpYyBTb2NrZXRMaXN0ZW5lckpvYihTdHJpbmcgbmFtZSwgU2VydmVyU29ja2V0IHNvY2tldCkgeworCQkJc3VwZXIobmFtZSk7CisJCQl0aGlzLnNvY2tldCA9IHNvY2tldDsKKwkJfQorCQlAT3ZlcnJpZGUKKwkJcHJvdGVjdGVkIElTdGF0dXMgcnVuKElQcm9ncmVzc01vbml0b3IgbW9uaXRvcikgeworCQkJCisJCQl0cnkgeworCQkJCXdoaWxlKHRydWUpIHsKKwkJCQkJU29ja2V0IHMgPSBzb2NrZXQuYWNjZXB0KCk7CisJCQkJCW5ldyBDb25uZWN0aW9uSGFuZGxlcigiQWNjZXB0aW5nIGNvbm5lY3Rpb24iLCBzKTsKKwkJCQl9CisJCQl9IGNhdGNoKElPRXhjZXB0aW9uIGlvZSkgeworCQkJCWlvZS5wcmludFN0YWNrVHJhY2UoKTsKKwkJCX0KKwkJCQorCQkJcmV0dXJuIFN0YXR1cy5PS19TVEFUVVM7CisJCX0KKwkJCisJfQorCQorCXByb3RlY3RlZCBzdGF0aWMgY2xhc3MgQ29ubmVjdGlvbkhhbmRsZXIgZXh0ZW5kcyBKb2IgeworCQlwcml2YXRlIFNvY2tldCBzb2M7CisJCXB1YmxpYyBDb25uZWN0aW9uSGFuZGxlcihTdHJpbmcgbikgeworCQkJc3VwZXIobik7CisJCX0KKwkJcHVibGljIENvbm5lY3Rpb25IYW5kbGVyKFN0cmluZyBuLCBTb2NrZXQgcykgeworCQkJc3VwZXIobik7CisJCQlzb2MgPSBzOworCQkJdGhpcy5zY2hlZHVsZSgpOworCQl9CisJCUBPdmVycmlkZQorCQlwcm90ZWN0ZWQgSVN0YXR1cyBydW4oSVByb2dyZXNzTW9uaXRvciBtb25pdG9yKSB7CisJCQlPYmplY3RJbnB1dFN0cmVhbSBvaXMgPSBudWxsOworCQkJU3RyaW5nIHN0YXR1cz0iT0siOworCQkJdHJ5IHsKKwkJCQlvaXMgPSBuZXcgT2JqZWN0SW5wdXRTdHJlYW0oc29jLmdldElucHV0U3RyZWFtKCkpOworCQkJfSBjYXRjaCAoSU9FeGNlcHRpb24gZTEpIHsKKwkJCQllMS5wcmludFN0YWNrVHJhY2UoKTsKKwkJCX0KKwkJCXRyeSB7CisJCQkJU3RyaW5nIHhtaSA9IChTdHJpbmcpb2lzLnJlYWRPYmplY3QoKTsKKwkJCQlCeXRlQXJyYXlJbnB1dFN0cmVhbSBiYWlzID0gbmV3IEJ5dGVBcnJheUlucHV0U3RyZWFtKHhtaS5nZXRCeXRlcygpKTsKKwkJCX0gY2F0Y2goRXhjZXB0aW9uIGUpIHsKKwkJCQllLnByaW50U3RhY2tUcmFjZSgpOworCQkJCXN0YXR1cyA9ICJFUlJPUiI7CisJCQl9CisJCQl0cnkgeworCQkJCU9iamVjdE91dHB1dFN0cmVhbSBvb3MgPSBuZXcgT2JqZWN0T3V0cHV0U3RyZWFtKHNvYy5nZXRPdXRwdXRTdHJlYW0oKSk7CisJCQkJb29zLndyaXRlT2JqZWN0KHN0YXR1cyk7CisJCQkJb2lzLmNsb3NlKCk7CisJCQkJb29zLmNsb3NlKCk7CisJCQkJc29jLmNsb3NlKCk7CisJCQl9IGNhdGNoKEV4Y2VwdGlvbiBlKSB7CisJCQkJZS5wcmludFN0YWNrVHJhY2UoKTsKKwkJCX0KKwkJCQorCQkJcmV0dXJuIFN0YXR1cy5PS19TVEFUVVM7CisJCX0KKwkJCisJfQorCUBTdXBwcmVzc1dhcm5pbmdzKCJubHMiKQorCXByaXZhdGUgc3RhdGljIHZvaWQgc3BlZWRUZXN0KCkgeworCQl0cnkgeworCQkJTEFSR0VfT0JKRUNUXzFHQj0gbmV3IGludFsxMDI0KjEwMjQqNjQvU0laRV9PRl9JTlQvKjEwNzM3NDE4MjQqL107CisJCQlsb25nIG5vdyA9IFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpOworCQkJSW5ldEFkZHJlc3Mgb3RoZXJIb3N0ID0gSW5ldEFkZHJlc3MuZ2V0QnlOYW1lKHJlbW90ZUhvc3QpOworCQkJU29ja2V0IHNvYyA9IG5ldyBTb2NrZXQob3RoZXJIb3N0LmdldEhvc3ROYW1lKCksIENPTU1fUE9SVCk7CisJCQlPYmplY3RPdXRwdXRTdHJlYW0gb29zID0gbmV3IE9iamVjdE91dHB1dFN0cmVhbShzb2MuZ2V0T3V0cHV0U3RyZWFtKCkpOworCQkJCisJCQlvb3Mud3JpdGVPYmplY3QoTEFSR0VfT0JKRUNUXzFHQik7CisJCQlPYmplY3RJbnB1dFN0cmVhbSBvaXMgPSBuZXcgT2JqZWN0SW5wdXRTdHJlYW0oc29jLmdldElucHV0U3RyZWFtKCkpOworCQkJU3RyaW5nIG1lc3MgPSAoU3RyaW5nKW9pcy5yZWFkT2JqZWN0KCk7CisJCQlpZighbWVzcy5lcXVhbHMoIk9LIikpCisJCQkJQWN0aXZhdG9yLmxvZ0luZm9ybWF0aW9uKCJFcnJvciByZWNlaXZlZCBmcm9tICIrcmVtb3RlSG9zdCsiOiAiK21lc3MpOworCQkJCisJCQlsb25nIHRoZW4gPSBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKTsKKwkJCQorCQkJQWN0aXZhdG9yLmxvZ0luZm9ybWF0aW9uKCJUb3RhbCB0aW1lOiIrKHRoZW4tbm93KSk7CisJCQkKKwkJCW9pcy5jbG9zZSgpOworCQkJb29zLmNsb3NlKCk7CisJCQlzb2MuY2xvc2UoKTsKKwkJfSBjYXRjaChFeGNlcHRpb24gZSkgeworCQkJZS5wcmludFN0YWNrVHJhY2UoKTsKKwkJfQorCX0KK30KZGlmZiAtLWdpdCBhL2Rpc3RyaWJ1dGVkL29yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhzeW5jaHJvbml6ZXIvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZ3JhcGhzeW5jaHJvbml6ZXIvdXRpbC9TdWJDb3VudHJ5R3JhcGhQYXJ0aXRpb25QbGFubmVyLmphdmEgYi9kaXN0cmlidXRlZC9vcmcuZWNsaXBzZS5zdGVtLmdyYXBoc3luY2hyb25pemVyL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2dyYXBoc3luY2hyb25pemVyL3V0aWwvU3ViQ291bnRyeUdyYXBoUGFydGl0aW9uUGxhbm5lci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE3YjE5OGMKLS0tIC9kZXYvbnVsbAorKysgYi9kaXN0cmlidXRlZC9vcmcuZWNsaXBzZS5zdGVtLmdyYXBoc3luY2hyb25pemVyL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2dyYXBoc3luY2hyb25pemVyL3V0aWwvU3ViQ291bnRyeUdyYXBoUGFydGl0aW9uUGxhbm5lci5qYXZhCkBAIC0wLDAgKzEsMTE5MiBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmdyYXBoc3luY2hyb25pemVyLnV0aWw7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTEgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgamF2YS5pby5CdWZmZXJlZFJlYWRlcjsKK2ltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOworaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW07CitpbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbVJlYWRlcjsKK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OworaW1wb3J0IGphdmEudXRpbC5BcnJheXM7CitpbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7CitpbXBvcnQgamF2YS51dGlsLkhhc2hTZXQ7CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CitpbXBvcnQgamF2YS51dGlsLk1hcDsKK2ltcG9ydCBqYXZhLnV0aWwuU2V0OworaW1wb3J0IGphdmEudXRpbC5TdHJpbmdUb2tlbml6ZXI7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuVVJJOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5yZXNvdXJjZS5pbXBsLkV4dGVuc2libGVVUklDb252ZXJ0ZXJJbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhzeW5jaHJvbml6ZXIuQWN0aXZhdG9yOworCitwdWJsaWMgY2xhc3MgU3ViQ291bnRyeUdyYXBoUGFydGl0aW9uUGxhbm5lciB7CisJCisJc3RhdGljIGludCBOVU1fQ09VTlRSSUVTID0gLTE7CisJc3RhdGljIGludCBOVU1fTEVWRUxfMV9JRFMgPSAtMTsKKwlzdGF0aWMgaW50W11bXSBsZXZlbDBDb21tb25Cb3JkZXJNYXRyaXggPSBudWxsOworCXN0YXRpYyBpbnRbXVtdIGxldmVsMUNvbW1vbkJvcmRlck1hdHJpeCA9IG51bGw7CisJc3RhdGljIGZpbmFsIFN0cmluZyBTVEFUU19GSUxFXzAgPSAid29ybGRQYXJ0aW9uaW5nU3RhdHMuY3N2IjsgLy8kTk9OLU5MUy0xJAorCXN0YXRpYyBmaW5hbCBTdHJpbmcgU1RBVFNfRklMRV8xID0gInN1YkNvdW50cnlQYXJ0aW9uaW5nU3RhdHMuY3N2IjsgLy8kTk9OLU5MUy0xJAorCXN0YXRpYyBmaW5hbCBTdHJpbmcgQ09ERVNfRklMRSA9ICJjb3VudHJ5Q29kZU1hcC5jc3YiOyAvLyROT04tTkxTLTEkCisJCisJQFN1cHByZXNzV2FybmluZ3MoIm5scyIpCisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFVSSV9QUkVGSVggPSAicGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3N0YXRpc3RpY3MvIjsKKwkvL3ByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBVUklfUFJFRklYID0gIi9Vc2Vycy9qaGthdWYvRG9jdW1lbnRzL3dvcmtzcGFjZS9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3N0YXRpc3RpY3MvIjsKKwkKKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBVUkkgQ09ERVNfRklMRV9VUkkgPSBVUkkuY3JlYXRlVVJJKFVSSV9QUkVGSVggKyBDT0RFU19GSUxFKTsKKwkKKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBVUkkgU1RBVFNfRklMRV8wX1VSSSA9IFVSSS5jcmVhdGVVUkkoVVJJX1BSRUZJWCArIFNUQVRTX0ZJTEVfMCk7CisJCisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgVVJJIFNUQVRTX0ZJTEVfMV9VUkkgPSBVUkkuY3JlYXRlVVJJKFVSSV9QUkVGSVggKyBTVEFUU19GSUxFXzEpOworCQorCQorCXN0YXRpYyBNYXA8U3RyaW5nLFN0cmluZz4gcmVnaW9uQ29kZTJ0bzMgPSBuZXcgSGFzaE1hcDxTdHJpbmcsU3RyaW5nPigpOworCXN0YXRpYyBNYXA8U3RyaW5nLFN0cmluZz4gcmVnaW9uQ29kZTN0bzIgPSBuZXcgSGFzaE1hcDxTdHJpbmcsU3RyaW5nPigpOworCQorCXN0YXRpYyBmaW5hbCBMaXN0PENvdW50cnk+IHdvcmxkQ291bnRyeUxpc3QgPSBuZXcgQXJyYXlMaXN0PENvdW50cnk+KCk7CisJc3RhdGljIGZpbmFsIE1hcDxTdHJpbmcsQ291bnRyeT4gd29ybGRDb3VudHJ5TWFwID0gbmV3IEhhc2hNYXA8U3RyaW5nLENvdW50cnk+KCk7CisJCisJc3RhdGljIGZpbmFsIExpc3Q8UmVnaW9uPiB3b3JsZFN0YXRlTGlzdCA9IG5ldyBBcnJheUxpc3Q8UmVnaW9uPigpOworCXN0YXRpYyBmaW5hbCBMaXN0PFN0cmluZz4gbGV2ZWxPbmVJRExpc3QgPSBuZXcgQXJyYXlMaXN0PFN0cmluZz4oKTsKKwkKKwlzdGF0aWMgZmluYWwgTWFwPFN0cmluZyxSZWdpb24+IHdvcmxkU3ViQ291bnRyeU1hcCA9IG5ldyBIYXNoTWFwPFN0cmluZyxSZWdpb24+KCk7CisJc3RhdGljIGZpbmFsIGRvdWJsZSBERUxUQV9UT0xMRVJBTkNFID0gMC4yOworCXN0YXRpYyBkb3VibGUgU0laRV9NSVNTTUFUQ0hfVE9MTEVSQU5DRSA9IDEuMCtERUxUQV9UT0xMRVJBTkNFOworCQorCS8qKgorCSAqIAorCSAqLworCXB1YmxpYyBTdWJDb3VudHJ5R3JhcGhQYXJ0aXRpb25QbGFubmVyKCkgeworCQkvLyBzdGVwIDAsIHJlZ2VuZXJhdGUgdGhlIHN0YXRzIGV2ZXJ5IHRpbWUgaW4gY2FzZSB0aGUgU1RFTSBkYXRhIGNoYW5nZXMKKwkJLy9Xb3JsZFBhcnRpdGlvbmluZ1N0YXRzIHdwcyA9IG5ldyBXb3JsZFBhcnRpdGlvbmluZ1N0YXRzKCk7CisJCisJCQorCQkvLyB0aGVuIHByZXBhcmUgdG8gZG8gdGhlIHBsYW4KKwkJbWFwQ29kZXMoKTsKKwkJbWFwQ291bnRyeVN0YXRzKCk7CisJCW1hcFN1YkNvdW50cnlTdGF0cygpOworCX0KKworCS8qKgorCSAqIE1haW4gbWV0aG9kIGZvciB0ZXN0aW5nIG9ubHkKKwkgKiBAcGFyYW0gYXJncworCSAqLworCUBTdXBwcmVzc1dhcm5pbmdzKCJubHMiKQorCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKKwkJCisJCS8qCisJCSAqIEZvciB0ZXN0aW5nIG9ubHkKKwkJICovCisJCVN0cmluZ1tdIHRlc3QgPQl7IAorCQkJCSJBRkciLCJBR08iLCJBSUEiLCJBTEEiLCJBTEIiLCJBTkQiLCJBTlQiLCJBUkUiLCJBUkciLCJBUk0iLCJBU00iLCJBVEEiLCJBVEYiLCJBVEciLAorCQkJCSJBVVMiLCJBVVQiLCJBWkUiLCJCREkiLCJCRUwiLCJCRU4iLCJCRkEiLCJCR0QiLCJCR1IiLCJCSFIiLCJCSFMiLCJCSUgiLCJCTFIiLCJCTFoiLAorCQkJCSJCTVUiLCJCT0wiLCJCUkEiLCJCUkIiLCJCUk4iLCJCVE4iLCJCVlQiLCJCV0EiLCJDQUYiLCJDQU4iLCJDQ0siLCJDSEUiLCJDSEwiLCJDSE4iLAorCQkJCSJDSVYiLCJDTVIiLCJDT0QiLCJDT0ciLCJDT0siLCJDT0wiLCJDT00iLCJDUFYiLCJDUkkiLCJDVUIiLCJDWFIiLCJDWU0iLCJDWVAiLCJDWkUiLAorCQkJCSJERVUiLCJESkkiLCJETUEiLCJETksiLCJET00iLCJEWkEiLCJFQ1UiLCJFR1kiLCJFUkkiLCJFU0giLCJFU1AiLCJFU1QiLCJFVEgiLCJGSU4iLAorCQkJCSJGSkkiLCJGTEsiLCJGUkEiLCJGUk8iLCJGU00iLCJHQUIiLCJHQlIiLCJHRU8iLCJHR1kiLCJHSEEiLCJHSUIiLCJHSU4iLCJHTFAiLCJHTUIiLAorCQkJCSJHTkIiLCJHTlEiLCJHUkMiLCJHUkQiLCJHUkwiLCJHVE0iLCJHVUYiLCJHVU0iLCJHVVkiLCJIS0ciLCJITUQiLCJITkQiLCJIUlYiLCJIVEkiLAorCQkJCSJIVU4iLCJJRE4iLCJJTU4iLCJJTkQiLCJJT1QiLCJJUkwiLCJJUk4iLCJJUlEiLCJJU0wiLCJJU1IiLCJJVEEiLCJKQU0iLCJKRVkiLCJKT1IiLAorCQkJCSJKUE4iLCJLQVoiLCJLRU4iLCJLR1oiLCJLSE0iLCJLSVIiLCJLTkEiLCJLT1IiLCJLV1QiLCJMQU8iLCJMQk4iLCJMQlIiLCJMQlkiLCJMQ0EiLAorCQkJCSJMSUUiLCJMS0EiLCJMU08iLCJMVFUiLCJMVVgiLCJMVkEiLCJNQUMiLCJNQVIiLCJNQ08iLCJNREEiLCJNREciLCJNRFYiLCJNRVgiLCJNSEwiLAorCQkJCSJNS0QiLCJNTEkiLCJNTFQiLCJNTVIiLCJNTkUiLCJNTkciLCJNTlAiLCJNT1oiLCJNUlQiLCJNU1IiLCJNVFEiLCJNVVMiLCJNV0kiLCJNWVMiLAorCQkJCSJNWVQiLCJOQU0iLCJOQ0wiLCJORVIiLCJORksiLCJOR0EiLCJOSUMiLCJOSVUiLCJOTEQiLCJOT1IiLCJOUEwiLCJOUlUiLCJOWkwiLCJPTU4iLAorCQkJCSJQQUsiLCJQQU4iLCJQQ04iLCJQRVIiLCJQSEwiLCJQTFciLCJQTkciLCJQT0wiLCJQUkkiLCJQUksiLCJQUlQiLCJQUlkiLCJQU0UiLCJQWUYiLAorCQkJCSJRQVQiLCJSRVUiLCJST1UiLCJSVVMiLCJSV0EiLCJTQVUiLCJTRE4iLCJTRU4iLCJTR1AiLCJTR1MiLCJTSE4iLCJTSk0iLCJTTEIiLCJTTEUiLAorCQkJCSJTTFYiLCJTTVIiLCJTT00iLCJTUE0iLCJTUkIiLCJTVFAiLCJTVVIiLCJTVksiLCJTVk4iLCJTV0UiLCJTV1oiLCJTWUMiLCJTWVIiLCJUQ0EiLAorCQkJCSJUQ0QiLCJUR08iLCJUSEEiLCJUSksiLCJUS0wiLCJUS00iLCJUTFMiLCJUTVAiLCJUT04iLCJUVE8iLCJUVU4iLCJUVVIiLCJUVVYiLCJUV04iLAorCQkJCSJUWkEiLCJVR0EiLCJVS1IiLCJVTUkiLCJVUlkiLCJVU0EiLCJVWkIiLCJWQVQiLCJWQ1QiLCJWRU4iLCJWR0IiLCJWSVIiLCJWTk0iLCJWVVQiLAorCQkJCSJXTEYiLCJXU00iLCJZRU0iLCJaQUYiLCJaTUIiLCJaV0UiIH07CisJCQkKKwkJCisJCVNldDxTdHJpbmc+IHRlc3RTZXQgPSBuZXcgSGFzaFNldDxTdHJpbmc+KCk7CisJCWZvciAoaW50IGkgPSAwOyBpIDwgdGVzdC5sZW5ndGg7IGkgKyspIHsKKwkJCXRlc3RTZXQuYWRkKHRlc3RbaV0pOworCQl9CisJCisJCVN1YkNvdW50cnlHcmFwaFBhcnRpdGlvblBsYW5uZXIgc3ViQ3RyeVBhcnRpb25QbGFubmVyID0gbmV3IFN1YkNvdW50cnlHcmFwaFBhcnRpdGlvblBsYW5uZXIoKTsKKworCQlpbnQgbnVtU2VydmVycyA9IDc7CisJCQorCQkvLyBERUJVRworCQkvLyBzdWJDdHJ5UGFydGlvblBsYW5uZXIuY2hlY2tTdW1Db3VudHJ5U3RhdHMoKTsKKwkJCisJCWZpbmFsIExpc3Q8UGFydGl0aW9uR3JvdXA+IGluaXRpYWxQbGFuID0gc3ViQ3RyeVBhcnRpb25QbGFubmVyLmdldEluaXRpYWxDb3VudHJ5TGV2ZWxQbGFuKG51bVNlcnZlcnMsIHRlc3RTZXQpOworCQkvL2ZpbmFsIExpc3Q8UGFydGl0aW9uR3JvdXA+IGluaXRpYWxQbGFuID0gc3ViQ3RyeVBhcnRpb25QbGFubmVyLmdldFBsYW4obnVtU2VydmVycywgdGVzdFNldCk7CisJCUxpc3Q8UGFydGl0aW9uR3JvdXA+IHBsYW4gPSBzdWJDdHJ5UGFydGlvblBsYW5uZXIucmVsYXhQYXJ0aXRpb25QbGFuKGluaXRpYWxQbGFuKTsKKwkJCisJCUxpc3Q8U2V0PFN0cmluZz4+IHBsYW5Db2RlcyA9IHN1YkN0cnlQYXJ0aW9uUGxhbm5lci5wbGFuQXNDb2RlU3RyaW5ncyhwbGFuKTsKKwkJCisJCUFjdGl2YXRvci5sb2dJbmZvcm1hdGlvbigicGxhbm5pbmcgY29tcGxldGUuLi4uIGFzc2lnbm1lbnRzIGFyZToiKTsKKwkJaW50IGFsbE5vZGVzID0gMDsKKwkJZm9yKGludCBpID0gMDsgaSA8IHBsYW4uc2l6ZSgpOyBpICsrKSB7CisJCQkKKwkJCVBhcnRpdGlvbkdyb3VwIHBnID0gcGxhbi5nZXQoaSk7CisJCQlTZXQ8U3RyaW5nPiByZWdpb25TZXQgPSBwbGFuQ29kZXMuZ2V0KGkpOworCQkJCisJCQkvLyBjaGVja3N1bQorCQkJU2V0PFJlZ2lvbj4gcmVnaW9uUyA9IHBnLnJlZ2lvbkdyb3VwOworCQkJZm9yKFJlZ2lvbiByOnJlZ2lvblMpIHsKKwkJCQlhbGxOb2RlcyArPSByLm51bU5vZGVzOworCQkJfQorCQkJCisJCQlkb3VibGUgc3VyZmFjZSA9IHBnLmNvdW50VW5yZXNvbHZlZEJvcmRlckVkZ2VzKCk7CisJCQlpbnQgdG90YWxOb2RlcyA9IHBnLmdldFRvdGFsTm9kZXMoKTsKKwkJCWRvdWJsZSBzdXJmYWNlVG9Wb2x1bWUgPSBzdXJmYWNlLyhkb3VibGUpdG90YWxOb2RlczsKKwkJCS8vICoqKiBBY3RpdmF0b3IubG9nSW5mb3JtYXRpb24oIiAiKTsKKwkJCUFjdGl2YXRvci5sb2dJbmZvcm1hdGlvbigic2VydmVyIG51bWJlcjogIitpKyIgIHNpemUgaXMgWyIrdG90YWxOb2RlcysiXSBleHRlcm5hbCBFZGdlcyA9ICIrKGludClzdXJmYWNlKyIgc3VyZmFjZVRvVm9sdW1lUmF0aW89ICIrc3VyZmFjZVRvVm9sdW1lKTsKKwkJCQorCQkJU3RyaW5nIHMgPSAiIjsKKwkJCWludCBpY291bnQgPSAwOworCQkJU3RyaW5nW10gcmducyA9IHJlZ2lvblNldC50b0FycmF5KG5ldyBTdHJpbmdbcmVnaW9uU2V0LnNpemUoKV0pOworCQkJQXJyYXlzLnNvcnQocmducyk7CisJCQkKKwkJCWZvcihTdHJpbmcgcmVnaW9uOiByZ25zKSAgeworCQkJCXMgKz0gcmVnaW9uKyIgICI7CisJCQkJaWNvdW50ICsrOworCQkJCWlmIChpY291bnQgJTI1ID09IDApIHMgKz0gIlxuICAiOworCQkJfS8vIGZvciBhbGwgY291bnRyaWVzIG9uIGdyb3VwCisJCQkvLyAqKioqKiBBY3RpdmF0b3IubG9nSW5mb3JtYXRpb24oIiAgIitzKTsKKwkJCQorCQl9Ly8gZm9yIGFsbCBncm91cHMKKwkJQWN0aXZhdG9yLmxvZ0luZm9ybWF0aW9uKCJ0b3RhbCBub2RlQ291bnQgPSAiK2FsbE5vZGVzKTsKKwkJCisJCS8vbm93IHRoZSB0aGUgbWF0cml4IG9mIG1lc3NhZ2Ugc2l6ZSBncm91cCB0byBncm91cAorCQlpbnRbXVtdIHBnTWF0cml4ID0gZ2V0UGFydGl0aW9uR3JvdXBCb3JkZXJNYXRyaXgocGxhbik7CisJCUFjdGl2YXRvci5sb2dJbmZvcm1hdGlvbigiIik7CisJCUFjdGl2YXRvci5sb2dJbmZvcm1hdGlvbigiIik7CisJCUFjdGl2YXRvci5sb2dJbmZvcm1hdGlvbigiUGFydGl0aW9uR3JvdXAgTWF0cml4Iik7CisJCUFjdGl2YXRvci5sb2dJbmZvcm1hdGlvbigiIik7CisJCWZvciAoaW50IGkgPSAwOyBpIDwgcGxhbi5zaXplKCk7IGkgKyspIHsKKwkJCVN0cmluZyBzID0gIiI7CisJCQlmb3IgKGludCBqID0gMDsgaiA8IHBsYW4uc2l6ZSgpOyBqICsrKSB7CisJCQkJaWYocGdNYXRyaXhbaV1bal08MTApIHMgKz0gIiAiOworCQkJCWlmKHBnTWF0cml4W2ldW2pdPDEwMCkgcyArPSAiICI7CisJCQkJcyArPSBwZ01hdHJpeFtpXVtqXSsiICAiOworCQkJfQorCQkJQWN0aXZhdG9yLmxvZ0luZm9ybWF0aW9uKHMpOworCQl9CisJfQorCQorCS8qKgorCSAqIEdlbmVyYXRlIGEgcGFydGl0aW9uIHBsYW4gZm9yIGEgY29sbGVjdGlvbiBvZiBsZXZlbCAxIHJlZ2lvbnMgdG8gcnVuCisJICogIDAuIHZhbGlkYXRlIHRoZSBudW1iZXIgb2Ygc2VydmVycworICAJICogIDEuIGluaXRpYWxpemUgYW4gZW1wdHkgcGxhbiBmb3IgbnVtU2VydmVycworCSAqICAyLiBhZGQgYWxsIGxldmVsIDEgcmVnaW9ucyB0byBhbiB1bmFzc2lnbmVkIHNldAorCSAqICAzLiBnZXQgdGhlIGxldmVsIDEgcmVnaW9ucyBzb3J0ZWQgbGFyZ2UgdG8gc21hbGwKKwkgKiAgNC4gR0VUIHRoZSB0b3RhbCBudW1iZXIgb2Ygbm9kZXMgZm9yIHRoZSBFTlRJUkUgY29sbGVjdGlvbiB0byBydW4KKwkgKiAgNS4gZXN0aW1hdGUgdGhlIGFwcHJveGltYXRlIHRhcmdldCBzaXplIHBlciBQYXJ0aXRpb24gR3JvdXAKKwkgKiAgNi4gYWRkIHRoZSBudW1TZXJ2ZXJzIGxhcmdlc3QgbGV2ZWwgMSByZWdpb25zIGluIG9yZGVyIGxhcmdlIHRvIHNtYWxsCisJICogICAgIDYuYS4gZmluZCB0aGUgbnVtU2VydmVycyBsYXJnZXN0IGNvdW50cmllcyBpbiBvcmRlciBsYXJnZSB0byBzbWFsbAorCSAqCSAgIDYuYi5waWNrIHRoZSBsYXJnZXN0IHJlZ2lvbnMgaW5zaWRlIHRoZSBuZXh0IGxhcmdlc3QgY291bnRyeQorCSAqICA3LiB3ZSBoYXZlIGFzc2lnbmVkIG51bVNlcnZlcnMgbGV2ZWwgMSByZWdpb25zCisJICogIDguIGl0ZXJhdGUgdGhyb3VnaCB0aGUgdW5hc3NpZ25lZCBsZXZlbCAxIHJlZ2lvbnMgdW50aWwgd2UgaGF2ZSBubyBtb3JlCisJICogIDkuIGNoZWNrIG1heCBwZyBzaXplIGhlcmUKKwkgKiAgMTAuIGdldCB0aGUgaGlnaGVzdCBzdXJmYWNlIGFyZWEgZm9yIGFsbCBjYW5kaWRhdGVzIHdydCBUSElTIGdyb3VwIHBnCisJICogIDExLiBpcyBpdCB0aGUgb3ZlcmFsbCBMYXJnZXN0Pz8KKwkgKiAgMTIuIGlmIHdlIGFyZSBub3QgcmVkdWNpbmcgc3VyZmFjZSBhcmVhIHdlIG5lZWQgdG8gY2hhbmdlIHRoZSBwbGFuCisJICogIDEzLiBhc3NpZ24gdGhlIHNlbGVjdGVkIHJlZ2lvbgorCSAqICAxNC4gcmVtb3ZlIGl0IGZyb20gdGhlIHVuYXNzaWduZWQgbGlzdCAKKwkgKiAgCisJICogQHBhcmFtIG51bVNlcnZlcnMKKwkgKiBAcGFyYW0gdW5hc3NpZ25lZFNldAorCSAqIEByZXR1cm4KKwkgKi8KKwlAU3VwcHJlc3NXYXJuaW5ncygibmxzIikKKwlwdWJsaWMgTGlzdDxQYXJ0aXRpb25Hcm91cD4gZ2V0UGxhbihpbnQgbnVtU2VydmVycywgZmluYWwgU2V0PFN0cmluZz4gY291bnRyaWVzKSB7CisJCQorCQkvLzAuIFRoZSByZWdpb25zIGFyZSBhIGxpc3Qgb2YgY291bnRyaWVzCisJCS8vICAgYnV0IHdlIHJlYWxseSB3YW50IHRvIHN0dWR5IGFkbWluIDEgcmVnaW9ucworCQkvLyAgIHNvIGZvciBlYWNoIGNvdW50cnk6CisJCS8vICAgaTogR2V0IHRoZSB0d28gbGV0dGVyIGNvZGUgZnJvbSB0aGUgdGhyZWUgbGV0dGVyIGNvZGUKKwkJLy8gICBpaTogRnJvbSB0aGUgbGV2ZWxPbmVJRExpc3QgYWRkIGFsbCB0aGUgbGV2ZWwgb25lIGlkcworCQkvLyAgIGlpOiBvciwgaWYgdGhlcmUgaXMgb25seSB0aGUgbGV2ZWwgMCBpZCBhZGQgdGhhdC4KKwkJU2V0PFN0cmluZz4gcmVnaW9ucyA9IG5ldyBIYXNoU2V0PFN0cmluZz4oKTsKKwkJZm9yKFN0cmluZyB0aHJlZUxldHRlcklEOiBjb3VudHJpZXMpICB7CisJCQkKKwkJCVN0cmluZyB0d29MZXR0ZXJQcmVmaXggPSByZWdpb25Db2RlM3RvMi5nZXQodGhyZWVMZXR0ZXJJRCk7CisJCQkgCisJCQlmb3IoaW50IGkgPSAwOyBpIDwgbGV2ZWxPbmVJRExpc3Quc2l6ZSgpOyBpICsrKSB7CisJCQkJU3RyaW5nIGxldmVsT25lSUQgPSBsZXZlbE9uZUlETGlzdC5nZXQoaSk7CisJCQkJaWYoKHR3b0xldHRlclByZWZpeCE9bnVsbCkgJiYgKGxldmVsT25lSUQuaW5kZXhPZih0d29MZXR0ZXJQcmVmaXgpPj0wKSkgcmVnaW9ucy5hZGQobGV2ZWxPbmVJRCk7CisJCQkJaWYobGV2ZWxPbmVJRC5lcXVhbHNJZ25vcmVDYXNlKHRocmVlTGV0dGVySUQpKSByZWdpb25zLmFkZCh0aHJlZUxldHRlcklEKTsKKwkJCX0KKwkJCQorCQl9CisJCS8vIHdlIG5vdyBoYXZlIHRoZSBmdWxsIHJlZ2lvbiBzZXQgaW4gcmVnaW9ucworCQkKKwkJaWYobnVtU2VydmVycyA+IHJlZ2lvbnMuc2l6ZSgpKSB7CisJCQludW1TZXJ2ZXJzID0gcmVnaW9ucy5zaXplKCk7CisJCQlBY3RpdmF0b3IubG9nSW5mb3JtYXRpb24oIkNvdW50cnlHcmFwaFBhdGl0aW9uUGxhbm5lci5nZXRQbGFuKCk6IFdhcm5pbmcsIG51bWJlciBvZiBzZXJ2ZXJzIGNhbiBub3QgZXhjZWVkIG51bWJlciBvZiBjb3VudHJpZXMuIFVzaW5nICIrbnVtU2VydmVycysiIHNlcnZlcnMgZm9yIG5vdy4iKTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCisJCX0KKwkJCisJCQorCQkKKwkJLy8xLiBpbml0IGFuIGVtcHR5IHBsYW4KKwkJTGlzdDxQYXJ0aXRpb25Hcm91cD4gcGFydGl0aW9uUGxhbiA9IG5ldyBBcnJheUxpc3Q8UGFydGl0aW9uR3JvdXA+KCk7CisJCWZvcihpbnQgaSA9IDA7IGkgPCBudW1TZXJ2ZXJzOyBpICsrKSB7CisJCQlQYXJ0aXRpb25Hcm91cCBwYXJ0aXRpb25Hcm91cCA9IG5ldyBQYXJ0aXRpb25Hcm91cCgpOyAvLyBzZXQgb2YgdGhyZWUgbGV0dGVyIHJlZ2lvbiBjb2RlcyA9IHBsYW4gZm9yIG9uZSBzZXJ2ZXI7CisJCQlwYXJ0aXRpb25QbGFuLmFkZChwYXJ0aXRpb25Hcm91cCk7CisJCX0KKwkJCisJCS8vIDIuIGFkZCBhbGwgcmVnaW9ucyB0byBhbiB1bmFzc2lnbmVkIHNldAorCQlTZXQ8U3RyaW5nPiB1bmFzc2lnbmVkU2V0ID0gbmV3IEhhc2hTZXQ8U3RyaW5nPigpOworCQl1bmFzc2lnbmVkU2V0LmFkZEFsbChyZWdpb25zKTsKKwkJCisJCS8vIDMuIGdldCB0aGUgcmVnaW9ucyBzb3J0ZWQgbGFyZ2UgdG8gc21hbGwKKwkJUmVnaW9uW10gdW5hc3NpZ25lZFJlZ2lvbnMgPSBnZXRTb3J0ZWRSZWdpb25zKHVuYXNzaWduZWRTZXQpOworCQkKKwkJLy80LiBHRVQgdGhlIHRvdGFsIG51bWJlciBvZiBub2RlcyBmb3IgdGhlIEVOVElSRSBjb2xsZWN0aW9uIHRvIHJ1bgorCQlpbnQgdG90YWxQcm9ibGVtU2l6ZSA9IDA7CisJCWZvcihpbnQgaSA9IDA7IGkgPCB1bmFzc2lnbmVkUmVnaW9ucy5sZW5ndGg7IGkgKyspIHsKKwkJCXRvdGFsUHJvYmxlbVNpemUrPSB1bmFzc2lnbmVkUmVnaW9uc1tpXS5udW1Ob2RlczsKKwkJfQorCQkKKwkJLy8gNS4gZXN0aW1hdGUgdGhlIGFwcHJveGltYXRlIHRhcmdldCBzaXplIHBlciBQYXJ0aXRpb24gR3JvdXAKKwkJQWN0aXZhdG9yLmxvZ0luZm9ybWF0aW9uKCJDb3VudHJ5R3JhcGhQYXRpdGlvblBsYW5uZXIuZ2V0UGxhbigpOiB0b3RhbCBwcm9ibGVtIHNpemUgPSAiK3RvdGFsUHJvYmxlbVNpemUpOworCQlkb3VibGUgdGFyZ2V0R3JvdXBTaXplRCA9IHRvdGFsUHJvYmxlbVNpemUvbnVtU2VydmVyczsgLy8gYXBwcm94aW1hdGUgdGFyZ2V0CisJCUFjdGl2YXRvci5sb2dJbmZvcm1hdGlvbigiQ291bnRyeUdyYXBoUGF0aXRpb25QbGFubmVyLmdldFBsYW4oKTogSURFQUwgdGFyZ2V0IHBhcnRpdGlvbiBzaXplID0gIitNYXRoLnJvdW5kKHRhcmdldEdyb3VwU2l6ZUQpKTsKKwkJdGFyZ2V0R3JvdXBTaXplRCo9IFNJWkVfTUlTU01BVENIX1RPTExFUkFOQ0U7CisJCWludCB0YXJnZXRHcm91cFNpemUgPSAoaW50KU1hdGgucm91bmQodGFyZ2V0R3JvdXBTaXplRCk7CisJCUFjdGl2YXRvci5sb2dJbmZvcm1hdGlvbigiQ291bnRyeUdyYXBoUGF0aXRpb25QbGFubmVyLmdldFBsYW4oKTogUGxhbm5pbmcgZm9yIG1heCB0YXJnZXQgcGFydGl0aW9uIHNpemUgfj0gIit0YXJnZXRHcm91cFNpemUpOworCQkKKwkJLy8gNi4gc2VlZCB0aGUgZmlyc3QgbnVtU2VydmVyIFJlZ2lvbnMKKwkJLy8gNi5hLiBmaW5kIHRoZSBudW1TZXJ2ZXJzIGxhcmdlc3QgY291bnRyaWVzIGluIG9yZGVyIGxhcmdlIHRvIHNtYWxsCisJCVN1YkNvdW50cnlHcmFwaFBhcnRpdGlvblBsYW5uZXIuQ291bnRyeVtdIHBhcmVudHMgPSBnZXRTb3J0ZWRDb3VudHJpZXMod29ybGRDb3VudHJ5TGlzdCk7CisJCUFycmF5cy5zb3J0KHBhcmVudHMpOworCQkKKwkJCisJCQorCQlmb3IoaW50IGkgPSAwOyBpIDwgbnVtU2VydmVyczsgaSArKykgeworCQkJLy8gdGhlIGdyb3VwIHRvIHNlZWQKKwkJCVBhcnRpdGlvbkdyb3VwIHBhcnRpdGlvbkdyb3VwID0gcGFydGl0aW9uUGxhbi5nZXQoaSk7CisJCQlTdHJpbmcgbmV4dExhcmdlc3RDb3VudHJ5ID0gcGFyZW50c1tpXS50aHJlZUxldHRlckNvZGU7CisJCQkKKwkJCVJlZ2lvbltdIHVuYXNzaWduZWQgPSBnZXRTb3J0ZWRSZWdpb25zKHVuYXNzaWduZWRTZXQpOworCQkJLy8gNi5iLnBpY2sgQSByZWdpb24gaW5zaWRlIHRoZSBuZXh0IGxhcmdlc3QgY291bnRyeQorCQkJUmVnaW9uIHNlZWRSZWdpb24gPSBudWxsOworCQkJZm9yKGludCBqID0gMDsgaiA8IHVuYXNzaWduZWQubGVuZ3RoOyBqICsrKSB7CisJCQkJc2VlZFJlZ2lvbiA9IHVuYXNzaWduZWRbal07CisJCQkJaWYoc2VlZFJlZ2lvbi5wYXJlbnRDb3VudHJ5Q29kZS5lcXVhbHNJZ25vcmVDYXNlKG5leHRMYXJnZXN0Q291bnRyeSkpIHsKKwkJCQkJcGFydGl0aW9uR3JvdXAuYWRkKHNlZWRSZWdpb24pOworCQkJCQlBY3RpdmF0b3IubG9nSW5mb3JtYXRpb24oIiIraSsiOiBzZWVkaW5nIHdpdGggICIrc2VlZFJlZ2lvbi5yZWdpb25JRCsiIGluc2lkZSBjb3VudHJ5ICIrbmV4dExhcmdlc3RDb3VudHJ5KTsKKwkJCQkJdW5hc3NpZ25lZFNldC5yZW1vdmUoc2VlZFJlZ2lvbik7CisJCQkJfQorCQkJCQkKKwkJCX0KKwkJCQorCQkJCisJCQkKKwkJCQorCQl9CisJCQorCQkvLyA3LiB3ZSBoYXZlIGFzc2lnbmVkIG51bVNlcnZlcnMgcmVnaW9ucworCQkKKwkJCisJCS8vIDguIGl0ZXJhdGUgdGhyb3VnaCB0aGUgdW5hc3NpZ25lZCByZWdpb25zIHVudGlsIHdlIGhhdmUgbm8gbW9yZQorCQlkb3VibGUgcHJvZ3Jlc3MgPSAwOworCQkKKwkJd2hpbGUodW5hc3NpZ25lZFNldC5zaXplKCkgPiAwKSB7CisJCQkKKwkJCWlmKHByb2dyZXNzJTEwMD09MCkgeworCQkJCUFjdGl2YXRvci5sb2dJbmZvcm1hdGlvbigiICAgICAgIit1bmFzc2lnbmVkU2V0LnNpemUoKSsiIHJlZ2lvbnMgcmVtYWluaW5nIHRvIGJlIGFzc2lnbmVkIik7CisJCQl9CisJCQlwcm9ncmVzcyArKzsKKwkJCQorCQkJUmVnaW9uW10gcmVnaW9uc1RvUHJvY2Vzcz1nZXRTb3J0ZWRSZWdpb25zKHVuYXNzaWduZWRTZXQpOworCQkJCisJCQkvLyBmb3IgZWFjaCBwYXJ0aXRpb24gZ3JvdXAKKwkJCQorCQkJUmVnaW9uIHJlZ2lvblRvQXNzaWduID0gbnVsbDsKKwkJCVBhcnRpdGlvbkdyb3VwIGRlc3RpbmF0aW9uR3JvdXAgPSBudWxsOworCQkJZG91YmxlIG1pbkZhY3RvciA9IERvdWJsZS5NQVhfVkFMVUU7CisJCQkKKwkJCWZvcihpbnQgaSA9IDA7IGkgPCBwYXJ0aXRpb25QbGFuLnNpemUoKTsgaSArKykgeworCQkJCS8vIGl0ZXJhdGUgdGhyb3VnaCBldmVyeSB1bmFzc2lnbmVkIHJlZ2lvbgorCQkJCVBhcnRpdGlvbkdyb3VwIHBnID0gcGFydGl0aW9uUGxhbi5nZXQoaSk7CisJCQkJcGcubmV4dENhbmRpZGF0ZU1lbWJlcj1udWxsOworCQkJCQkJCisJCQkJLy8gOS4gY2hlY2sgbWF4IHBnIHNpemUgaGVyZSAKKwkJCQlpZihwZy5nZXRUb3RhbE5vZGVzKCkgPCB0YXJnZXRHcm91cFNpemUpIHsKKwkJCQkJLy8gMTAuIGdldCB0aGUgaGlnaGVzdCBzdXJmYWNlIGFyZWEgZm9yIGFsbCBjYW5kaWRhdGVzIHdydCBUSElTIGdyb3VwIHBnCisJCQkJCWZvcihSZWdpb24gY2FuZGlkYXRlOiByZWdpb25zVG9Qcm9jZXNzKSB7CisJCQkJCQkvLyBmb3IgZXZlcnkgT1RIRVIgZ3JvdXAKKwkJCQkJCQorCQkJCQkJZG91YmxlIHdvcnN0Q2FzZUxvYWRUaGlzQ2FuZGlkYXRlVGhpc1BsYW4gPSBEb3VibGUuTUlOX1ZBTFVFOworCQkJCQkJCisJCQkJCQlmb3IoaW50IGogPSAwOyBqIDwgcGFydGl0aW9uUGxhbi5zaXplKCk7IGogKyspIHsKKwkJCQkJCQkvLyBpdGVyYXRlIHRocm91Z2ggZXZlcnkgdW5hc3NpZ25lZCByZWdpb24KKwkJCQkJCQlpZihqIT1pKSB7CisJCQkJCQkJCVBhcnRpdGlvbkdyb3VwIHBnT3RoZXIgPSBwYXJ0aXRpb25QbGFuLmdldChqKTsKKwkJCQkJCQkJZG91YmxlIGxvYWQgPSBnZXRDb21tdW5pY2F0aW9uc0xvYWRGYWN0b3IoY2FuZGlkYXRlLCBwZ090aGVyLnJlZ2lvbkdyb3VwLCBwZy5yZWdpb25Hcm91cCkgOworCQkJCQkJCQlpZihsb2FkID4gd29yc3RDYXNlTG9hZFRoaXNDYW5kaWRhdGVUaGlzUGxhbikgeworCQkJCQkJCQkJd29yc3RDYXNlTG9hZFRoaXNDYW5kaWRhdGVUaGlzUGxhbiA9IGxvYWQ7CisJCQkJCQkJCX0vLyBpZiBuZXcgYmVzdAorCQkJCQkJCX0vLyBpZiBub3QgdGhpcyBncm91cAorCQkJCQkJfS8vIGZvciBhbGwgb3RoZXIgcGxhbkdyb3VwcworCQkJCQkJCisJCQkJCQkvLyBpcyB0aGlzIGEgbmV3IGJlc3QgY2FzZQorCQkJCQkJaWYod29yc3RDYXNlTG9hZFRoaXNDYW5kaWRhdGVUaGlzUGxhbiA8IG1pbkZhY3RvcikgeworCQkJCQkJCW1pbkZhY3RvciA9IHdvcnN0Q2FzZUxvYWRUaGlzQ2FuZGlkYXRlVGhpc1BsYW47CisJCQkJCQkJcmVnaW9uVG9Bc3NpZ249Y2FuZGlkYXRlOworCQkJCQkJCWRlc3RpbmF0aW9uR3JvdXA9cGc7CisJCQkJCQl9CisJCQkJCQkKKwkJCQkJfS8vIGZvciBhbGwgdW5hc3NpZ25lZCByZWdpb25zCisJCQkJCQkJCisJCQkJfS8vIGlmIHBhcnRpdGlvbiBncm91cCBpcyBub3QgdG9vIGJpZyBhbHJlYWR5CisJCQl9Ly8gZm9yIGFsbCBwYXJ0aXRpb25Hcm91cHMKKwkJCQorCQkJLy8xMS4gYWRkIHRoZSBjYW5kaWRhdGUKKwkJCWlmKChyZWdpb25Ub0Fzc2lnbiAhPW51bGwpJiYoZGVzdGluYXRpb25Hcm91cCAhPSBudWxsKSkgeworCQkJCWRlc3RpbmF0aW9uR3JvdXAuYWRkKHJlZ2lvblRvQXNzaWduKTsKKwkJCQl1bmFzc2lnbmVkU2V0LnJlbW92ZShyZWdpb25Ub0Fzc2lnbi5yZWdpb25JRCk7CisJCQl9CisJCQkKKwkJCQorCQkJCisJCQlpZih1bmFzc2lnbmVkU2V0LnNpemUoKT09MCkgYnJlYWs7CisJCQkKKwkJCQorCQl9Ly8gV0hJTEUgd2UgaGF2ZSBtb3JlIHVuYXNzaWduZWQgcmVnaW9ucyB0byBwcm9jZXNzCisJCQkJCisJCXJldHVybiBwYXJ0aXRpb25QbGFuOworCX0KKwkKKwkvKioKKwkgKiAKKwkgKiBAcGFyYW0gbnVtU2VydmVycworCSAqIEBwYXJhbSBjb3VudHJpZXMKKwkgKiBAcmV0dXJuCisJICovCisJQFN1cHByZXNzV2FybmluZ3MoIm5scyIpCisJcHVibGljIExpc3Q8UGFydGl0aW9uR3JvdXA+IGdldEluaXRpYWxDb3VudHJ5TGV2ZWxQbGFuKGludCBudW1TZXJ2ZXJzLCBmaW5hbCBTZXQ8U3RyaW5nPiBjb3VudHJpZXMpIHsKKwkJCisJCUFjdGl2YXRvci5sb2dJbmZvcm1hdGlvbigiMS4gR2V0dGluZyBpbml0aWFsIENvdW50cnkgTGV2ZWwgUGxhbiIpOworCQkvLyAxLiBHZXQgYW4gSU5JVElBTCBwbGFuIHVzaW5nIHRoZSBjb3VudHJ5IGxldmVsIHBsYW5udGVyCisJCUNvdW50cnlHcmFwaFBhcnRpdGlvblBsYW5uZXIgY2dwcCA9IG5ldyBDb3VudHJ5R3JhcGhQYXJ0aXRpb25QbGFubmVyKCk7CisJCUxpc3Q8Q291bnRyeUdyYXBoUGFydGl0aW9uUGxhbm5lci5QYXJ0aXRpb25Hcm91cD4gaW5pdGlhbFBsYW4gPSBjZ3BwLmdldFBsYW4obnVtU2VydmVycywgY291bnRyaWVzKTsKKwkJTGlzdDxTZXQ8U3RyaW5nPj4gaW5pdGlhbFBsYW5Db3VudHJ5U2V0ID0gY2dwcC5wbGFuQXNDb2RlU3RyaW5ncyhpbml0aWFsUGxhbik7CisJCQorCQkvLyB3ZSBub3cgaGF2ZSB0aGUgZnVsbCByZWdpb24gc2V0IGluIHJlZ2lvbnMKKwkJaWYobnVtU2VydmVycyA+IGluaXRpYWxQbGFuQ291bnRyeVNldC5zaXplKCkpIHsKKwkJCW51bVNlcnZlcnMgPSBpbml0aWFsUGxhbkNvdW50cnlTZXQuc2l6ZSgpOworCQkJQWN0aXZhdG9yLmxvZ0luZm9ybWF0aW9uKCJDb3VudHJ5R3JhcGhQYXRpdGlvblBsYW5uZXIuZ2V0UGxhbigpOiBXYXJuaW5nLCBudW1iZXIgb2Ygc2VydmVycyBjYW4gbm90IGV4Y2VlZCBudW1iZXIgb2YgY291bnRyaWVzLiBVc2luZyAiK251bVNlcnZlcnMrIiBzZXJ2ZXJzIGZvciBub3cuIik7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAorCQl9CisJCUFjdGl2YXRvci5sb2dJbmZvcm1hdGlvbigiMi4gRXhlY3V0aW5nIGluaXRpYWwgQ291bnRyeSBMZXZlbCBQbGFuIGJ5IGxldmVsIDEgcmVnaW9ucyIpOworCSAgIAorCQkvLyAyLiBleGVjdXRlIHRoaXMgcGxhbiBieSB0aGUgbGV2ZWwgb25lIHJlZ2lvbnMgcmVnaW9ucworCQkvLyBpbml0IHRoZSAgcGxhbiBiYXNlZCBvbiB0aGUgY291bnRyeSBhc3NpZ25tZW50cworCQlpbnQgcGFydGl0aW9uQ291bnQgPSAwOworCQlMaXN0PFBhcnRpdGlvbkdyb3VwPiBwYXJ0aXRpb25QbGFuID0gbmV3IEFycmF5TGlzdDxQYXJ0aXRpb25Hcm91cD4oKTsKKwkJZm9yKFNldDxTdHJpbmc+IGNvdW50cnlTZXQ6aW5pdGlhbFBsYW5Db3VudHJ5U2V0KSB7CisJCSAgICAvLyBkZWZpbmUgYSBsZXZlbCAxIHBhcnRpdGlvbiBncm91cCBmb3IgdGhpcyBzZXQKKwkJCVBhcnRpdGlvbkdyb3VwIHBhcnRpdGlvbkdyb3VwID0gbmV3IFBhcnRpdGlvbkdyb3VwKCk7IC8vIHNldCBvZiB0aHJlZSBsZXR0ZXIgcmVnaW9uIGNvZGVzID0gcGxhbiBmb3Igb25lIHNlcnZlcjsKKwkJCXBhcnRpdGlvblBsYW4uYWRkKHBhcnRpdGlvbkdyb3VwKTsKKwkJCUFjdGl2YXRvci5sb2dJbmZvcm1hdGlvbigiIik7CisJCQlTeXN0ZW0ub3V0LnByaW50KCJQYXJ0aXRpb24gIitwYXJ0aXRpb25Db3VudCsiIGFkZGluZyAiKTsKKwkJCXBhcnRpdGlvbkNvdW50Kys7CisJCQkvLyBmb3IgZXZlcnkgY291bnRyeSBpbiB0aGUgcGxhbgorCQkJZm9yKFN0cmluZyB0aHJlZUxldHRlcklEOiBjb3VudHJ5U2V0KSB7CisJCQkJCisJCQkJU3lzdGVtLm91dC5wcmludCgiICIrdGhyZWVMZXR0ZXJJRCk7CisJCQkJU3RyaW5nIHR3b0xldHRlclByZWZpeCA9IHJlZ2lvbkNvZGUzdG8yLmdldCh0aHJlZUxldHRlcklEKTsKKwkJCQlmb3IoaW50IGkgPSAwOyBpIDwgbGV2ZWxPbmVJRExpc3Quc2l6ZSgpOyBpICsrKSB7CisJCQkJCVN0cmluZyBsZXZlbE9uZUlEID0gbGV2ZWxPbmVJRExpc3QuZ2V0KGkpOworCQkJCQlpZigodHdvTGV0dGVyUHJlZml4IT1udWxsKSAmJiAobGV2ZWxPbmVJRC5pbmRleE9mKHR3b0xldHRlclByZWZpeCk9PTApKSB7CisJCQkJCQlSZWdpb24gcmVnaW9uID0gd29ybGRTdWJDb3VudHJ5TWFwLmdldChsZXZlbE9uZUlEKTsKKwkJCQkJCXBhcnRpdGlvbkdyb3VwLmFkZChyZWdpb24pOworCQkJCQl9CisJCQkJCS8vIG9yLi4uLiBpZiBvbmx5IHRoZSBjb3VudHJ5IG5vZGUKKwkJCQkJaWYobGV2ZWxPbmVJRC5lcXVhbHNJZ25vcmVDYXNlKHRocmVlTGV0dGVySUQpKSB7CisJCQkJCQlSZWdpb24gcmVnaW9uID0gd29ybGRTdWJDb3VudHJ5TWFwLmdldChsZXZlbE9uZUlEKTsKKwkJCQkJCXBhcnRpdGlvbkdyb3VwLmFkZChyZWdpb24pOworCQkJCQl9CisJCQkJfQorCQkJfQorCQkJCisJCX0KKwkJcmV0dXJuIHBhcnRpdGlvblBsYW47CisJfQorCQorCQorCS8qKgorCSAqIAorCSAqIEBwYXJhbSBudW1TZXJ2ZXJzCisJICogQHBhcmFtIGNvdW50cmllcworCSAqIEByZXR1cm4KKwkgKi8KKwlwdWJsaWMgTGlzdDxQYXJ0aXRpb25Hcm91cD4gcmVsYXhQYXJ0aXRpb25QbGFuKExpc3Q8UGFydGl0aW9uR3JvdXA+IHBhcnRpdGlvblBsYW4pIHsKKwkJCisJCQorCQkKKwkJLy8zLiBnZXQgYW4gYWNjdXJhdGUgY291bnQgb2YgdGhlIHRvdGFsIG5vZGVzCisJCWludCBwcm9ibGVtU2l6ZSA9IDA7CisJCWZvcihpbnQgaSA9IDA7IGkgPCBwYXJ0aXRpb25QbGFuLnNpemUoKTsgaSArKykgeworCQkJUGFydGl0aW9uR3JvdXAgcGcgPSBwYXJ0aXRpb25QbGFuLmdldChpKTsKKwkJCXByb2JsZW1TaXplICs9IHBnLmdldFRvdGFsTm9kZXMoKTsKKwkJfQorCQkKKwkJZG91YmxlIGlkZWFsVGFyZ2V0U2l6ZSA9IHByb2JsZW1TaXplL3BhcnRpdGlvblBsYW4uc2l6ZSgpOworCQkvLyA0LiBSZWxheGF0aW9uLiAKKwkJCisJCQorCQkvL2ludCBwaWNrSW5kZXggPSBnZXRMYXJnZXN0R3JvdXBJbmRleChwYXJ0aXRpb25QbGFuKTsKKwkJLy9QYXJ0aXRpb25Hcm91cCBsYXJnZUdyb3VwID0gcGFydGl0aW9uUGxhbi5nZXQocGlja0luZGV4KTsKKwkJCisJCVNJWkVfTUlTU01BVENIX1RPTExFUkFOQ0UgPSAxLjArREVMVEFfVE9MTEVSQU5DRTsKKwkJZm9yKGludCBvdXRlciA9IDA7IG91dGVyIDwgNTAwOyBvdXRlciArKykgeworCQkJLy8gNC5hLiBkbyBhbiBpbml0aWFsIHNvcnQgb2YgdGhlIHBhcnRpdGlvbkdyb3VwcyBieSBzaXplCisJCQlQYXJ0aXRpb25Hcm91cFtdIHNvcnRlZFBsYW5zID0gcGFydGl0aW9uUGxhbi50b0FycmF5KG5ldyBQYXJ0aXRpb25Hcm91cFtwYXJ0aXRpb25QbGFuLnNpemUoKV0pOworCQkJQXJyYXlzLnNvcnQoc29ydGVkUGxhbnMpOworCQkJCisJCQkKKwkJCWZvcihpbnQgaW5uZXIgPSAwOyBpbm5lciA8IDEwOyBpbm5lciArKykgeworCQkJCS8vIGl0ZXJhdGUgdGhyb3VnaCB0aGVtCisJCQkJZm9yKGludCBpID0gMDsgaSA8IHNvcnRlZFBsYW5zLmxlbmd0aDsgaSArKykgeworCQkJCQkKKwkJCQkJUGFydGl0aW9uR3JvdXAgY3VycmVudEdyb3VwPSBzb3J0ZWRQbGFuc1tpXTsKKwkJCQkJaW50IHBsYW5TaXplID0gY3VycmVudEdyb3VwLmdldFRvdGFsTm9kZXMoKTsKKwkJCQkJCisJCQkJCS8vIGZvciBlYWNoIGdyb3VwIHdpdGggc2l6ZSA+IHRhcmdldCBzaXplLi4uLgorCQkJCQlpZihwbGFuU2l6ZSA+IChpZGVhbFRhcmdldFNpemUqU0laRV9NSVNTTUFUQ0hfVE9MTEVSQU5DRSkpIHsKKwkJCQkJCS8vIHRyeSB0byBtYWtlIGEgbW92ZSAtIHRoaXMgcmVhbGx5IGlzIGEgbGFyZ2VHcm91cAorCQkJCQkJaW50IHBpY2tJbmRleCA9IGk7IC8vIGEgbGFyZ2UgcGxhbgorCQkJCQkJZG91YmxlIG1heEV4dGVybmFsQXJlYSA9IERvdWJsZS5NSU5fVkFMVUU7CisJCQkJCQlSZWdpb24gcmVnaW9uVG9Nb3ZlID0gbnVsbDsKKwkJCQkJCVBhcnRpdGlvbkdyb3VwIGdyb3VwVG9Nb3ZlVG8gPSBudWxsOworCQkJCQkJLy9pbnQgZGVzdGluYXRpb25JbmRleCA9IDA7CisJCQkJCQkvLyA0YS4gRm9yIGVhY2ggcmVnaW9uIGluIHRoZSBsYXJnZXN0IGdyb3VwCisJCQkJCQlmb3IoUmVnaW9uIGNhbmRpZGF0ZTogY3VycmVudEdyb3VwLnJlZ2lvbkdyb3VwKSB7CisJCQkJCQkJLy80Yi4gRmluZCB0aGUgb3RoZXIgcGFydGl0aW9uIGdyb3VwIHdpdGggdGhlIExBUkdFU1QgY29ubmVjdGlvbnMgdG8gdGhhdCByZWdpb24KKwkJCQkJCQlmb3IoaW50IGogID0gMDsgaiA8IHBhcnRpdGlvblBsYW4uc2l6ZSgpOyBqICsrKSB7CisJCQkJCQkJCWlmKGohPSBwaWNrSW5kZXgpIHsKKwkJCQkJCQkJCS8vIG90aGVyIGdyb3VwcyBvbmx5CisJCQkJCQkJCQlQYXJ0aXRpb25Hcm91cCBvdGhlckdyb3VwID0gcGFydGl0aW9uUGxhbi5nZXQoaik7CisJCQkJCQkJCQlpZihvdGhlckdyb3VwLmdldFRvdGFsTm9kZXMoKTw9aWRlYWxUYXJnZXRTaXplKXsKKwkJCQkJCQkJCQkvLyBzbWFsbCBwbGFuCisJCQkJCQkJCQkJZG91YmxlIGxvYWQgPSBnZXRDb21tdW5pY2F0aW9uc0xvYWRGYWN0b3IoY2FuZGlkYXRlLCBvdGhlckdyb3VwLnJlZ2lvbkdyb3VwLCBjdXJyZW50R3JvdXAucmVnaW9uR3JvdXApIDsKKwkJCQkJCQkJCQlpZihsb2FkID4gbWF4RXh0ZXJuYWxBcmVhKSB7CisJCQkJCQkJCQkJCW1heEV4dGVybmFsQXJlYSA9IGxvYWQ7CisJCQkJCQkJCQkJCXJlZ2lvblRvTW92ZSA9IGNhbmRpZGF0ZTsKKwkJCQkJCQkJCQkJZ3JvdXBUb01vdmVUbyA9IG90aGVyR3JvdXA7CisJCQkJCQkJCQkJCS8vZGVzdGluYXRpb25JbmRleCA9IGo7CisJCQkJCQkJCQkJfS8vIGlmIG5ldyBiZXN0CisJCQkJCQkJCQl9Ly8gaWYgc21hbGwgcGxhbgorCQkJCQkJCQkJCisJCQkJCQkJCX0vLyBpZiBvdGhlciBncm91cAorCQkJCQkJCX0gLy8gZm9yIGogb3RoZXIgcGFydGl0aW9uR3JvdXBzCisJCQkJCQl9Ly8gZm9yIGFsbCByZWdpb25zIGluIGdyb3VwCisJCQkJCQkKKwkJCQkJCQorCQkJCQkJLy8gNGMuIE1ha2UgdGhlIG1vdmUKKwkJCQkJCWlmKChyZWdpb25Ub01vdmUgIT1udWxsKSYmKGdyb3VwVG9Nb3ZlVG8gIT0gbnVsbCkpIHsKKwkJCQkJCQljdXJyZW50R3JvdXAucmVnaW9uR3JvdXAucmVtb3ZlKHJlZ2lvblRvTW92ZSk7CisJCQkJCQkJZ3JvdXBUb01vdmVUby5yZWdpb25Hcm91cC5hZGQocmVnaW9uVG9Nb3ZlKTsKKwkJCQkJCX0KKwkJCQkJfSAvLyBpZiBwbGFuIHNpemUgPj4gYXZnCisJCQkJCWVsc2UgaWYocGxhblNpemUgPCAoaWRlYWxUYXJnZXRTaXplL1NJWkVfTUlTU01BVENIX1RPTExFUkFOQ0UpKSB7CisJCQkJCQkJCisJCQkJCQkvLyBpZiByZWFsbHkgc21hbGwgZmluZCB0aGUgYmVzdCBvdXRzaWRlIHJlZ2lvbiB0byBhZGQKKwkJCQkJCVBhcnRpdGlvbkdyb3VwIGdyb3VwVG9Nb3ZlVG8gPSBjdXJyZW50R3JvdXA7CisJCQkJCQlQYXJ0aXRpb25Hcm91cCBncm91cFRvTW92ZUZyb20gPSBudWxsOworCQkJCQkJUmVnaW9uIHJlZ2lvblRvTW92ZSA9IG51bGw7CisJCQkJCQlpbnQgbWF4QXJlYSA9IC0xOworCQkJCQkJaW50IHBpY2tJbmRleCA9IGk7CisJCQkJCQkKKwkJCQkJCS8vIGl0ZXJhdGUgdGhyb3VnaCBhbGwgdGhlIE9USEVSIGdyb3VwcworCQkJCQkJZm9yKGludCBqICA9IDA7IGogPCBwYXJ0aXRpb25QbGFuLnNpemUoKTsgaiArKykgeworCQkJCQkJCWlmKGohPSBwaWNrSW5kZXgpIHsKKwkJCQkJCQkJLy8gb3RoZXIgZ3JvdXBzIG9ubHkKKwkJCQkJCQkJUGFydGl0aW9uR3JvdXAgb3RoZXJHcm91cCA9IHBhcnRpdGlvblBsYW4uZ2V0KGopOworCQkJCQkJCQlpZihvdGhlckdyb3VwLmdldFRvdGFsTm9kZXMoKT4oaWRlYWxUYXJnZXRTaXplKlNJWkVfTUlTU01BVENIX1RPTExFUkFOQ0UpKXsKKwkJCQkJCQkJCWZvcihSZWdpb24gY2FuZGlkYXRlOiBvdGhlckdyb3VwLnJlZ2lvbkdyb3VwKSB7CisJCQkJCQkJCQkJaW50IGFyZWEgPSBncm91cFRvTW92ZVRvLmdldFN1cmZhY2VBcmVhKGNhbmRpZGF0ZSk7CisJCQkJCQkJCQkJaWYoYXJlYSA+IG1heEFyZWEpIHsKKwkJCQkJCQkJCQkJcmVnaW9uVG9Nb3ZlID0gY2FuZGlkYXRlOworCQkJCQkJCQkJCQlncm91cFRvTW92ZUZyb20gPSBvdGhlckdyb3VwOworCQkJCQkJCQkJCX0vLyBpZiBiZXN0IGNhbmRpZGF0ZQorCQkJCQkJCQkJfSAvL2ZvciBhbGwgcmVnaW9ucyBpbiBvdGhlciBncm91cAorCQkJCQkJCQkJCisJCQkJCQkJCX0vL2lmIG90aGVyIGdyb3VwIGlzIGxhcmdlCisJCQkJCQkJfS8vaWYgb3RoZXIgZ3JvdXAKKwkJCQkJCX0vLyBmb3IgYWxsIGdyb3VwcworCQkJCQkJaWYoKHJlZ2lvblRvTW92ZSAhPW51bGwpJiYoZ3JvdXBUb01vdmVGcm9tICE9IG51bGwpKSB7CisJCQkJCQkJZ3JvdXBUb01vdmVGcm9tLnJlZ2lvbkdyb3VwLnJlbW92ZShyZWdpb25Ub01vdmUpOworCQkJCQkJCWdyb3VwVG9Nb3ZlVG8ucmVnaW9uR3JvdXAuYWRkKHJlZ2lvblRvTW92ZSk7CisJCQkJCQl9CisJCQkJCQkKKwkJCQkJfS8vIGlmIHBsYW4gc2l6ZSA8PCBhdmVyYWdlCisJCQkJCQorCQkJCX0vLyBmb3IgYWxsIHBsYW5zIGJ5IHNpemUKKwkJCQkKKwkJCQkKKwkJCX0vLyByZWxheCBpbm5lciBsb29wCisJCX0vLyByZWxheCBvdXRlciBsb29wCisJCisJCQorCQkKKwkJCQkKKwkJcmV0dXJuIHBhcnRpdGlvblBsYW47CisJfSAvLyByZWxheFBsYW5CeUNvdW50cmllcworCQorCQorCS8qKgorCSAqIFdlIHdhbnQgdGhlIG1pbmltdW0gY29tbXVuaWNhdGlvbiBjb3N0IHdpdGggT1RIRVIgUmVnaW9uR3JvdXBzIGFuZCB0aGUgbWF4aW11bSBzdXJmYWNlIGFyZWEgcmVkdWN0aW9uIHdpdGggVEhJUyBvbmUuCisJICogd2UgY29tcHV0ZSB0aGUgcmF0aW8gc3VyZmFjZUFyZWFPVEhFUi9zdXJmYWNlQXJlYVRISVMuIEJpZ2dlciB2YWx1ZXMgYXJlIGJldHRlciB0byBtb3ZlIG91dC4KKwkgKiBAcGFyYW0gcmVnaW9uc1RvUHJvY2VzcworCSAqIEByZXR1cm4KKwkgKi8KKwlwdWJsaWMgZG91YmxlIGdldENvbW11bmljYXRpb25zTG9hZEZhY3RvcihSZWdpb24gY2FuZGlkYXRlLCBTZXQ8UmVnaW9uPiBvdXRzaWRlUmVnaW9ucywgU2V0PFJlZ2lvbj4gaG9tZVJlZ2lvbnMpIHsKKwkJZG91YmxlIGZhY3RvciA9IERvdWJsZS5NSU5fVkFMVUU7CisJCQorCQlkb3VibGUgb3V0U2lkZVN1cmZhY2VBcmVhID0gMDsKKwkJLy8gZm9yIGVhY2ggcmVnaW9uIGluIE91dFNpZGUgZ3JvdXAKKwkJZm9yKFJlZ2lvbiByZWdpb246IG91dHNpZGVSZWdpb25zKSAgeworCQkJb3V0U2lkZVN1cmZhY2VBcmVhICs9IGxldmVsMUNvbW1vbkJvcmRlck1hdHJpeFtjYW5kaWRhdGUuaW5kZXhdW3JlZ2lvbi5pbmRleF07CisJCX0KKwkJCisJCWRvdWJsZSBpblNpZGVTdXJmYWNlQXJlYSA9IDA7CisJCS8vIGZvciBlYWNoIHJlZ2lvbiBpbiBPdXRTaWRlIGdyb3VwCisJCWZvcihSZWdpb24gcmVnaW9uOiBob21lUmVnaW9ucykgIHsKKwkJCWluU2lkZVN1cmZhY2VBcmVhICs9IGxldmVsMUNvbW1vbkJvcmRlck1hdHJpeFtjYW5kaWRhdGUuaW5kZXhdW3JlZ2lvbi5pbmRleF07CisJCX0KKwkJCisJCQorCQkvLyB3ZWlnaHQgdGhlIHJlc3VsdCBieSB0aGUgdm9sdW1lIG9mIHRoZSByZWdpb24KKwkJLy9zdXJmYWNlQXJlYVRISVMgKj0gY2FuZGlkYXRlLm51bU5vZGVzOworCQlpZihpblNpZGVTdXJmYWNlQXJlYSA8PTAgKSBpblNpZGVTdXJmYWNlQXJlYSA9IDAuMDE7ICAvLyBhdm9pZCBkaXZpZGUgYnkgemVybworCQlpZihvdXRTaWRlU3VyZmFjZUFyZWEgPT0wICkgb3V0U2lkZVN1cmZhY2VBcmVhID0gMC4xOyAgLy8gd2VpZ2h0IG9ubHkgYnkgMC4xL3N1cmZhY2VBcmVhVEhJUzsKKwkJZG91YmxlIHJhdGlvID0gb3V0U2lkZVN1cmZhY2VBcmVhL2luU2lkZVN1cmZhY2VBcmVhOworCQkKKwkJaWYocmF0aW8gPiBmYWN0b3IpIHsKKwkJCWZhY3RvciA9IHJhdGlvOworCQl9CisJCQorCQlyZXR1cm4gZmFjdG9yOworCX0KKworCQorCS8qKgorCSAqIAorCSAqIEBwYXJhbSBwYXJ0aXRpb25QbGFuCisJICogQHJldHVybgorCSAqLworCUBTdXBwcmVzc1dhcm5pbmdzKCJubHMiKQorCXB1YmxpYyBpbnQgZ2V0TGFyZ2VzdEdyb3VwSW5kZXgoTGlzdDxQYXJ0aXRpb25Hcm91cD4gcGFydGl0aW9uUGxhbikgeworCQlpbnQgcGlja0luZGV4ID0gMDsKKwkJaW50IG1heFNpemUgPSAtMTsKKwkJZm9yKGludCBpICA9IDA7IGkgPCBwYXJ0aXRpb25QbGFuLnNpemUoKTsgaSArKykgeworCQkJUGFydGl0aW9uR3JvdXAgcGcgPSBwYXJ0aXRpb25QbGFuLmdldChpKTsKKwkJCWludCBudW1Ob2RlcyA9IHBnLmdldFRvdGFsTm9kZXMoKTsKKwkJCWlmKG51bU5vZGVzID4gbWF4U2l6ZSkgeworCQkJCW1heFNpemUgPSBudW1Ob2RlczsKKwkJCQlwaWNrSW5kZXggPSBpOworCQkJfQorCQl9CisJCUFjdGl2YXRvci5sb2dJbmZvcm1hdGlvbigiKioqKiBjaG9vc2luZyAiK3BpY2tJbmRleCsiIHNpemUgPSAiK21heFNpemUpOworCQlyZXR1cm4gcGlja0luZGV4OwkJCisJfS8vZ2V0TGFyZ2VzdEdyb3VwCisJCisJLyoqCisJICogCisJICogQHBhcmFtIHBhcnRpdGlvblBsYW4KKwkgKiBAcmV0dXJuCisJICovCisJcHVibGljIExpc3Q8U2V0PFN0cmluZz4+IHBsYW5Bc0NvZGVTdHJpbmdzKExpc3Q8UGFydGl0aW9uR3JvdXA+IHBhcnRpdGlvblBsYW4pIHsKKwkJTGlzdDxTZXQ8U3RyaW5nPj4gcGxhbkxpc3QgPSBuZXcgQXJyYXlMaXN0PFNldDxTdHJpbmc+PigpOworCQlmb3IoaW50IGkgPSAwOyBpIDwgcGFydGl0aW9uUGxhbi5zaXplKCk7IGkgKyspIHsKKwkJCS8vIGl0ZXJhdGUgdGhyb3VnaCBldmVyeSB1bmFzc2lnbmVkIHJlZ2lvbgorCQkJUGFydGl0aW9uR3JvdXAgcGcgPSBwYXJ0aXRpb25QbGFuLmdldChpKTsKKwkJCXBsYW5MaXN0LmFkZChwZy5nZXRSZWdpb25Db2RlcygpKTsKKwkJfS8vIGZvciBhbGwgcGFydGl0aW9uR3JvdXBzCisJCQorCQlyZXR1cm4gcGxhbkxpc3Q7CisJfQorCQorCQorCQorCS8qKgorCSAqIGdldHMgdGhlIHNtYWxsZXN0IGN1cnJlbnQKKwkgKiBAcGFyYW0gcGFydGl0aW9uUGxhbgorCSAqIEByZXR1cm4KKwkgKi8KKwlwdWJsaWMgaW50IGdldFNtYWxsZXN0R3JvdXBJbmRleChMaXN0PFBhcnRpdGlvbkdyb3VwPiBwYXJ0aXRpb25QbGFuKSB7CisJCWludCBzbWFsbGVzdCA9IEludGVnZXIuTUFYX1ZBTFVFOworCQlpbnQgaW5kZXggPSAtMTsKKwkJZm9yKGludCBpID0gMDsgaSA8IHBhcnRpdGlvblBsYW4uc2l6ZSgpOyBpICsrKSB7CisJCQkvLyBpdGVyYXRlIHRocm91Z2ggZXZlcnkgdW5hc3NpZ25lZCByZWdpb24KKwkJCVBhcnRpdGlvbkdyb3VwIHBnID0gcGFydGl0aW9uUGxhbi5nZXQoaSk7CisJCQlpbnQgdG90YWxOb2RlcyA9IHBnLmdldFRvdGFsTm9kZXMoKTsKKwkJCWlmKHRvdGFsTm9kZXMgPCBzbWFsbGVzdCkgeworCQkJCXNtYWxsZXN0ID0gdG90YWxOb2RlczsKKwkJCQlpbmRleCA9IGk7CisJCQl9Ly8gaWYgcGFydGl0aW9uIGdyb3VwIAorCQl9Ly8gZm9yIGFsbCBwYXJ0aXRpb25Hcm91cHMKKwkJcmV0dXJuIGluZGV4OworCX0KKwkKKwkKKwkKKwkKKwkvKioKKwkgKiBTb3J0ZWQgUmVnaW9uW10gbGFyZ2UgdG8gc21hbGwKKwkgKiBAcGFyYW0gcmVnaW9uU2V0CisJICogQHJldHVybgorCSAqLworCUBTdXBwcmVzc1dhcm5pbmdzKCJubHMiKQorCXB1YmxpYyBSZWdpb25bXSBnZXRTb3J0ZWRSZWdpb25zKFNldDxTdHJpbmc+IHJlZ2lvblNldCkgeworCQlSZWdpb25bXSBzb3J0ZWRSZWdpb25zID0gbmV3IFJlZ2lvbltyZWdpb25TZXQuc2l6ZSgpXTsKKwkJaW50IGljb3VudCA9IDA7CisJCWZvcihTdHJpbmcgcmVnaW9uOiByZWdpb25TZXQpICB7CisJCQlSZWdpb24gciA9IHdvcmxkU3ViQ291bnRyeU1hcC5nZXQocmVnaW9uKTsKKwkJCWlmKHIgPT0gbnVsbCkKKwkJCQlTeXN0ZW0uZXJyLnByaW50bG4oIlVuYWJsZSB0byBmaW5kIHJlZ2lvbiAiK3JlZ2lvbik7CisJCQlzb3J0ZWRSZWdpb25zW2ljb3VudF0gPSByOworCQkJaWNvdW50ICsrOworCQl9CisJCUFycmF5cy5zb3J0KHNvcnRlZFJlZ2lvbnMpOworCQlyZXR1cm4gc29ydGVkUmVnaW9uczsKKwl9CisJCisJLyoqCisJICogU29ydGVkIENvdW50cnlbXSBsYXJnZSB0byBzbWFsbAorCSAqIEBwYXJhbSBjb3VudHJ5TGlzdAorCSAqIEByZXR1cm4KKwkgKi8KKwlwdWJsaWMgQ291bnRyeVtdIGdldFNvcnRlZENvdW50cmllcyhMaXN0PENvdW50cnk+IGNvdW50cnlMaXN0KSB7CisJCUNvdW50cnlbXSBzb3J0ZWRDb3VudHJpZXMgPSBjb3VudHJ5TGlzdC50b0FycmF5KG5ldyBDb3VudHJ5W2NvdW50cnlMaXN0LnNpemUoKV0pOworCQlBcnJheXMuc29ydChzb3J0ZWRDb3VudHJpZXMpOworCQlyZXR1cm4gc29ydGVkQ291bnRyaWVzOworCX0KKwkKKwkKKwkvKioKKwkgKiBTb3J0ZWQgU3RyaW5nW10gb2YgY291bnR5IG5hbWVzIChhbHBoYWJldGljYWwpIGxhcmdlIHRvIHNtYWxsCisJICogQHBhcmFtIGNvdW50cnlMaXN0CisJICogQHJldHVybgorCSAqLworCXB1YmxpYyBTdHJpbmdbXSBnZXRTb3J0ZWRDb3VudHJ5TmFtZXMoTGlzdDxDb3VudHJ5PiBjb3VudHJ5TGlzdCkgeworCQlTdHJpbmdbXSBzb3J0ZWRDb3VudHJpZXMgPSBuZXcgU3RyaW5nW2NvdW50cnlMaXN0LnNpemUoKV07CisJCWludCBpY291bnQgPSAwOworCQlmb3IoQ291bnRyeSBjdHJ5OiBjb3VudHJ5TGlzdCkgIHsKKwkJCXNvcnRlZENvdW50cmllc1tpY291bnRdID0gY3RyeS50aHJlZUxldHRlckNvZGU7CisJCQlpY291bnQgKys7CisJCX0KKwkJQXJyYXlzLnNvcnQoc29ydGVkQ291bnRyaWVzKTsKKwkJcmV0dXJuIHNvcnRlZENvdW50cmllczsKKwl9CisJCisJCisJLyoqCisJICogQHBhcmFtIHN0ZW1pZAorCSAqIEByZXR1cm4gYWRtaW5pc3RyYXRpb24gbGV2ZWwKKwkgKi8KKwlwdWJsaWMgaW50IGdldEFkbWluTGV2ZWwoU3RyaW5nIHN0ZW1pZCkgeworCQkKKwkJU3RyaW5nIFtdIHNwbGl0SUQgPSBzdGVtaWQuc3BsaXQoIi0iKTsgLy8kTk9OLU5MUy0xJAorCQlpZihzcGxpdElELmxlbmd0aCA9PSA0KSB7CisJCQlyZXR1cm4gMzsKKwkJfQorCQllbHNlIGlmKHNwbGl0SUQubGVuZ3RoID09IDMpIHsKKwkJCXJldHVybiAyOworCQl9CisJCWVsc2UgaWYoc3BsaXRJRC5sZW5ndGggPT0gMikgeworCQkJcmV0dXJuIDE7CisJCX0KKwkJcmV0dXJuIHNwbGl0SUQubGVuZ3RoLTE7CisJfQorCQorCS8qKgorCSAqIEdldHMgYSBjb21wYXRpYmxlIGlucHV0IHN0cmVhbSBmb3IgdGhlIGdpdmVuIFVSSQorCSAqIEByZXR1cm4KKwkgKiBAdGhyb3dzIElPRXhjZXB0aW9uCisJICovCisJcHJpdmF0ZSBJbnB1dFN0cmVhbSBnZXRJbnB1dFN0cmVhbUZvclVSSShVUkkgdXJpKSB0aHJvd3MgSU9FeGNlcHRpb24KKwl7CisJCXJldHVybiBuZXcgRXh0ZW5zaWJsZVVSSUNvbnZlcnRlckltcGwoKS5jcmVhdGVJbnB1dFN0cmVhbSh1cmkpOworCX0KKworCS8qKgorCSAqIHJlYWQgaW4gYSBsaXN0IG9mIGFsbCBjb3VudHJpZXMKKwkgKi8KKwlAU3VwcHJlc3NXYXJuaW5ncygibmxzIikKKwlwdWJsaWMgdm9pZCBtYXBDb2RlcygpIHsKKwkJCisJCSAgU3RyaW5nIHJlY29yZDsgIAorICAgICAgICAgIGludCByZWNDb3VudCA9IDA7CisgICAgICAgICAgQnVmZmVyZWRSZWFkZXIgZCA9IG51bGw7CisgICAgICAgICAgdHJ5IHsgCisgICAgICAgIAkgIGQgPSBuZXcgQnVmZmVyZWRSZWFkZXIobmV3IElucHV0U3RyZWFtUmVhZGVyKGdldElucHV0U3RyZWFtRm9yVVJJKENPREVTX0ZJTEVfVVJJKSkpOworCisgICAgICAgICAgICAgIHdoaWxlICggKHJlY29yZD1kLnJlYWRMaW5lKCkpICE9IG51bGwgKSB7IAorICAgICAgICAgICAgICAgICByZWNDb3VudCsrOyAKKyAgICAgICAgICAgICAgICAgU3RyaW5nVG9rZW5pemVyIHN0ID0gbmV3IFN0cmluZ1Rva2VuaXplcihyZWNvcmQgKTsKKyAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgIEBTdXBwcmVzc1dhcm5pbmdzKCJ1bnVzZWQiKQorCQkJCSBTdHJpbmcgbmFtZSA9IHN0Lm5leHRUb2tlbigiLCIpOworICAgICAgICAgICAgICAgICAKKwkJCQkgU3RyaW5nIHR3b0xldHRlciA9IHN0Lm5leHRUb2tlbigiLCIpOworCQkJCSBTdHJpbmcgdGhyZWVMZXR0ZXIgPSBzdC5uZXh0VG9rZW4oIiwiKTsKKwkJCQkgCisJCQkJIHJlZ2lvbkNvZGUydG8zLnB1dCh0d29MZXR0ZXIsdGhyZWVMZXR0ZXIpOworCQkJCSByZWdpb25Db2RlM3RvMi5wdXQodGhyZWVMZXR0ZXIsdHdvTGV0dGVyKTsKKyAgICAgICAgICAgICAgfSAvLyBsaW5lcworICAgICAgICAgICAgIAorICAgICAgICAgICB9IGNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7IAorICAgICAgICAgICAgICAvLyBjYXRjaCBpbyBlcnJvcnMgZnJvbSBGaWxlSW5wdXRTdHJlYW0gb3IgcmVhZExpbmUoKSAKKyAgICAgICAgICAgICAgQWN0aXZhdG9yLmxvZ0luZm9ybWF0aW9uKCIgSU9FeGNlcHRpb24gZXJyb3IhIiArIGUuZ2V0TWVzc2FnZSgpKTsgCisgICAgICAgICAgIH0gZmluYWxseSB7CisgICAgICAgIAkgICB0cnkgeworICAgICAgICAJCSAgIGQuY2xvc2UoKTsKKyAgICAgICAgCSAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7IH0KKyAgICAgICAgICAgfQorCX0gLy8gcmVhZCBjb2RlcworCQorCS8qKgorCSAqIHJlYWQgaW4gYSBtYXAgb2YgY291bnRyaWVzIGFuZCB0aGVpciBzaXplcworCSAqLworCUBTdXBwcmVzc1dhcm5pbmdzKCJubHMiKQorCXB1YmxpYyB2b2lkIG1hcENvdW50cnlTdGF0cygpIHsKKwkJICBpbnQgaW5kZXggPSAwOworCQkgIFN0cmluZyByZWNvcmQ7ICAKKyAgICAgICAgICBpbnQgcmVjQ291bnQgPSAwOworICAgICAgICAgIAorICAgICAgICAgIEJ1ZmZlcmVkUmVhZGVyIGQgPSBudWxsOworICAgICAgICAgIAorICAgICAgICAgIHRyeSB7ICAgICAgICAgCSAgCisgICAgICAgIAkgIGQgPSBuZXcgQnVmZmVyZWRSZWFkZXIobmV3IElucHV0U3RyZWFtUmVhZGVyKGdldElucHV0U3RyZWFtRm9yVVJJKFNUQVRTX0ZJTEVfMF9VUkkpKSk7CisKKyAgICAgICAgICAgICAgd2hpbGUgKCAocmVjb3JkPWQucmVhZExpbmUoKSkgIT0gbnVsbCApIHsgCisgICAgICAgICAgICAgICAgIHJlY0NvdW50Kys7IAorICAgICAgICAgICAgICAgICBTdHJpbmdUb2tlbml6ZXIgc3QgPSBuZXcgU3RyaW5nVG9rZW5pemVyKHJlY29yZCwiLCIpOyAgCisgICAgICAgICAgICAgICAgIAorCQkJCSBTdHJpbmcgdGhyZWVMZXR0ZXIgPSBzdC5uZXh0VG9rZW4oKTsKKwkJCQkgaW50IG51bU5vZGVzID0gKG5ldyBJbnRlZ2VyKHN0Lm5leHRUb2tlbigpLnRyaW0oKSkpLmludFZhbHVlKCk7CisJCQkJCisJCQkJIAorCQkJCSBTdHJpbmcgdHdvTGV0dGVyID0gcmVnaW9uQ29kZTN0bzIuZ2V0KHRocmVlTGV0dGVyKTsKKwkJCQkgQ291bnRyeSBjb3VudHJ5ID0gbmV3IENvdW50cnkodGhyZWVMZXR0ZXIsIHR3b0xldHRlciwgaW5kZXgsIG51bU5vZGVzKTsKKwkJCQkgCisJCQkJIHdvcmxkQ291bnRyeUxpc3QuYWRkKGluZGV4LGNvdW50cnkpOworCQkJCSB3b3JsZENvdW50cnlNYXAucHV0KHRocmVlTGV0dGVyLCBjb3VudHJ5KTsKKwkJCQkgaW5kZXgrKzsKKwkJCQkgCisJCQkJIAorICAgICAgICAgICAgICB9IC8vIGxpbmVzCisgICAgICAgICAgICAgIAorICAgICAgICAgICAgICBsZXZlbDBDb21tb25Cb3JkZXJNYXRyaXggPSBuZXcgaW50W3dvcmxkQ291bnRyeUxpc3Quc2l6ZSgpXVt3b3JsZENvdW50cnlMaXN0LnNpemUoKV07CisgICAgICAgICAgICAgIEFjdGl2YXRvci5sb2dJbmZvcm1hdGlvbigicmVhZCAiK2luZGV4KyIgY291bnRyaWVzIGFuZCB0aGVpciBzaXplcyIpOworICAgICAgICAgICAgICAKKworICAgICAgICAgICB9IGNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7IAorICAgICAgICAgICAgICAvLyBjYXRjaCBpbyBlcnJvcnMgZnJvbSBGaWxlSW5wdXRTdHJlYW0gb3IgcmVhZExpbmUoKSAKKyAgICAgICAgICAgICAgQWN0aXZhdG9yLmxvZ0luZm9ybWF0aW9uKCIgSU9FeGNlcHRpb24gZXJyb3IhIiArIGUuZ2V0TWVzc2FnZSgpKTsgCisgICAgICAgICAgIH0gZmluYWxseSB7CisgICAgICAgIAkgICB0cnkgeworICAgICAgICAJCSAgIGQuY2xvc2UoKTsKKyAgICAgICAgCSAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7IH07CisgICAgICAgICAgIH0KKwl9IC8vIG1hcCByZWdpb24gc3RhdHMgbWF0cml4CisJCisJCisJLyoqCisJICogcmVhZCBpbiBhIG1hdHJpeCBvZiBhbGwgcmVnaW9uIG5laWdoYm9yIHN0YXRpc3RpY3MKKwkgKi8KKwlAU3VwcHJlc3NXYXJuaW5ncygibmxzIikKKwlwdWJsaWMgdm9pZCBtYXBTdWJDb3VudHJ5U3RhdHMoKSB7CisJCSAgaW50IGxldmVsT25lQ291bnQgPSAwOworCQkgIFN0cmluZyByZWNvcmQ7ICAKKyAgICAgICAgICBpbnQgcmVjQ291bnQgPSAwOworICAgICAgICAgIAorICAgICAgICAgIEJ1ZmZlcmVkUmVhZGVyIGQgPSBudWxsOworICAgICAgICAgIAorICAgICAgICAgIC8vIGdldCB0aGUgZGltZW5zaW9uIG9mIHRoZSBNYXRyaXggZnJvbSB0aGUgZmlyc3QgbGluZSBvZiBkYXRhCisgICAgICAgICAKKyAgICAgICAgICB0cnkgeyAgICAgICAgIAkgIAorICAgICAgICAJICBkID0gbmV3IEJ1ZmZlcmVkUmVhZGVyKG5ldyBJbnB1dFN0cmVhbVJlYWRlcihnZXRJbnB1dFN0cmVhbUZvclVSSShTVEFUU19GSUxFXzFfVVJJKSkpOworCisgICAgICAgICAgICAgIHdoaWxlICggKHJlY29yZD1kLnJlYWRMaW5lKCkpICE9IG51bGwgKSB7IAorICAgICAgICAgICAgICAgICByZWNDb3VudCsrOyAKKyAgICAgICAgICAgICAgICAgU3RyaW5nVG9rZW5pemVyIHN0ID0gbmV3IFN0cmluZ1Rva2VuaXplcihyZWNvcmQsIiwiKTsgIAorICAgICAgICAgICAgICAgICAKKwkJCQkgU3RyaW5nIGxldmVsT25lSUQgPSBzdC5uZXh0VG9rZW4oKTsKKwkJCQkKKwkJCQkgaW50IG51bU5vZGVzID0gKG5ldyBJbnRlZ2VyKHN0Lm5leHRUb2tlbigpLnRyaW0oKSkpLmludFZhbHVlKCk7CisJCQkJIGlmKGxldmVsMUNvbW1vbkJvcmRlck1hdHJpeCA9PSBudWxsKSB7CisJCQkJCSBOVU1fTEVWRUxfMV9JRFMgPSBzdC5jb3VudFRva2VucygpOworCQkJCQkgbGV2ZWwxQ29tbW9uQm9yZGVyTWF0cml4ID0gbmV3IGludFtOVU1fTEVWRUxfMV9JRFNdW05VTV9MRVZFTF8xX0lEU107CisJCQkJIH0KKwkJCQkgZm9yIChpbnQgaSA9IDA7IGkgPCBOVU1fTEVWRUxfMV9JRFM7IGkgKyspIHsKKwkJCQkJIGludCB2YWwgPSAobmV3IEludGVnZXIoc3QubmV4dFRva2VuKCkudHJpbSgpKSkuaW50VmFsdWUoKTsKKwkJCQkJIGxldmVsMUNvbW1vbkJvcmRlck1hdHJpeFtsZXZlbE9uZUNvdW50XVtpXSA9IHZhbDsKKwkJCQkgfQorCQkJCSAKKwkJCQkgU3RyaW5nIGxldmVsMENvZGUgPSAiIjsKKwkJCQkgaW50IGx2bCA9IGdldEFkbWluTGV2ZWwobGV2ZWxPbmVJRCk7CisJCQkJIGlmKGx2bD09MCkgeworCQkJCQkgbGV2ZWwwQ29kZSA9IGxldmVsT25lSUQ7CisJCQkJIH0gZWxzZSB7CisJCQkJCSBTdHJpbmcgdHdvTGV0dGVyID0gbGV2ZWxPbmVJRC5zdWJzdHJpbmcoMCwyKTsKKwkJCQkJIGxldmVsMENvZGUgPSByZWdpb25Db2RlMnRvMy5nZXQodHdvTGV0dGVyKTsKKwkJCQkgfQorCQkJCSAgCisJCQkJIENvdW50cnkgY3RyeSA9IHdvcmxkQ291bnRyeU1hcC5nZXQobGV2ZWwwQ29kZSk7CisJCQkJIAorCQkJCSAvLyBuZXZlciBoYXBwZW5zIGlmIGRhdGEgb2sKKwkJCQkgaWYoY3RyeT09bnVsbCkgeworCQkJCQkgQWN0aXZhdG9yLmxvZ0luZm9ybWF0aW9uKCJFcnJvciwgY3RyeSA9IG51bGwgZm9yIGxldmVsMENvZGU9ICIrbGV2ZWwwQ29kZSk7CisJCQkJCSBTeXN0ZW0uZXhpdCgxKTsKKwkJCQkgfQorCQkJCSAKKwkJCQkgUmVnaW9uIHJlZ2lvbiA9IG5ldyBSZWdpb24obGV2ZWxPbmVJRCwgbGV2ZWxPbmVDb3VudCwgbnVtTm9kZXMsY3RyeS50aHJlZUxldHRlckNvZGUpOworCQkJCSAKKwkJCQkgd29ybGRTdGF0ZUxpc3QuYWRkKGxldmVsT25lQ291bnQscmVnaW9uKTsKKwkJCQkgd29ybGRTdWJDb3VudHJ5TWFwLnB1dChsZXZlbE9uZUlELCByZWdpb24pOworCQkJCQorCQkJCSBsZXZlbE9uZUlETGlzdC5hZGQobGV2ZWxPbmVJRCk7CisJCQkJIGxldmVsT25lQ291bnQrKzsKKwkJCQkgCisJCQkJIAorICAgICAgICAgICAgICB9IC8vIGxpbmVzCisgICAgICAgICAgICAgIAorICAgICAgICAgICAgICBBY3RpdmF0b3IubG9nSW5mb3JtYXRpb24oInJlYWQgbWF0cml4ICIrbGV2ZWxPbmVDb3VudCsiIHggIitOVU1fTEVWRUxfMV9JRFMpOworICAgICAgICAgICAgICBpZihsZXZlbE9uZUNvdW50ICE9IE5VTV9MRVZFTF8xX0lEUykgeworICAgICAgICAgICAgCSAgQWN0aXZhdG9yLmxvZ0luZm9ybWF0aW9uKCJGQUlMICIrbGV2ZWxPbmVDb3VudCsiICE9ICIrTlVNX0xFVkVMXzFfSURTKTsKKyAgICAgICAgICAgIAkgIFN5c3RlbS5leGl0KDEpOworICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgfSBjYXRjaCAoSU9FeGNlcHRpb24gZSkgeyAKKyAgICAgICAgICAgICAgLy8gY2F0Y2ggaW8gZXJyb3JzIGZyb20gRmlsZUlucHV0U3RyZWFtIG9yIHJlYWRMaW5lKCkgCisgICAgICAgICAgICAgIEFjdGl2YXRvci5sb2dJbmZvcm1hdGlvbigiIElPRXhjZXB0aW9uIGVycm9yISIgKyBlLmdldE1lc3NhZ2UoKSk7IAorICAgICAgICAgICB9IGZpbmFsbHkgeworICAgICAgICAJICAgdHJ5IHsKKyAgICAgICAgCQkgICBkLmNsb3NlKCk7CisgICAgICAgIAkgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgeyB9OworICAgICAgICAgICB9CisJfSAvLyBtYXAgcmVnaW9uIHN0YXRzIG1hdHJpeAorCQorCS8qKgorCSAqIFRoaXMgbWV0aG9kIGlzIGZvciB0ZXN0aW5nIG9ubHkKKwkgKiB0byB2YWxpZGF0ZSB0aGUgc3ViQ291bnRyeSBTVEFUUyBtYXRyaXgKKwkgKi8KKwlAU3VwcHJlc3NXYXJuaW5ncygibmxzIikKKwlwdWJsaWMgdm9pZCBjaGVja1N1bUNvdW50cnlTdGF0cygpIHsKKwkJCisJCVN0cmluZ1tdIHdvcmxkID0gZ2V0U29ydGVkQ291bnRyeU5hbWVzKHdvcmxkQ291bnRyeUxpc3QpOworCQlmb3IoaW50IGkgPSAwOyBpIDwgd29ybGQubGVuZ3RoOyBpICsrKSB7CisJCQlmb3IoaW50IGogPSAwOyBqIDwgd29ybGQubGVuZ3RoOyBqICsrKSB7CisJCQkJbGV2ZWwwQ29tbW9uQm9yZGVyTWF0cml4W2ldW2pdPTA7CisJCQl9CisJCX0KKwkJCisJCWZvcihpbnQgaSA9IDA7IGkgPCB3b3JsZFN0YXRlTGlzdC5zaXplKCk7IGkgKyspIHsKKwkJCWludCBpaSA9IGdldENvdW50cnlJbmRleCh3b3JsZFN0YXRlTGlzdC5nZXQoaSkucGFyZW50Q291bnRyeUNvZGUsd29ybGQpOworCQkJZm9yKGludCBqID0gMDsgaiA8IHdvcmxkU3RhdGVMaXN0LnNpemUoKTsgaiArKykgeworCQkJCWludCBqaiA9IGdldENvdW50cnlJbmRleCh3b3JsZFN0YXRlTGlzdC5nZXQoaikucGFyZW50Q291bnRyeUNvZGUsd29ybGQpOworCQkJCWlmKGlpIT1qaikgbGV2ZWwwQ29tbW9uQm9yZGVyTWF0cml4W2lpXVtqal0rPSBsZXZlbDFDb21tb25Cb3JkZXJNYXRyaXhbaV1bal07IC8vIGRvbid0IHJlcG9ydCB0aGUgaW50ZXJuYWwgY291bnRyeSBlZGdlcworCQkJfQorCQl9CisJCUFjdGl2YXRvci5sb2dJbmZvcm1hdGlvbigiIik7CisJCUFjdGl2YXRvci5sb2dJbmZvcm1hdGlvbigiQ2hlY2tTdW0gZm9yIFN0YXRzIE1hcnRpeCAtIGNvbXByZXNzZWQgYnkgY291bnRyeSIpOworCQlBY3RpdmF0b3IubG9nSW5mb3JtYXRpb24oIiIpOworCQlmb3IgKGludCBpID0gMDsgaSA8IHdvcmxkLmxlbmd0aDsgaSArKykgeworCQkJU3RyaW5nIHMgPSB3b3JsZFtpXSsiICAiOworCQkJZm9yIChpbnQgaiA9IDA7IGogPCAyNTsgaiArKykgeworCQkJCWlmKGxldmVsMENvbW1vbkJvcmRlck1hdHJpeFtpXVtqXTwxMCkgcyArPSAiICI7CisJCQkJaWYobGV2ZWwwQ29tbW9uQm9yZGVyTWF0cml4W2ldW2pdPDEwMCkgcyArPSAiICI7CisJCQkJcyArPSBsZXZlbDBDb21tb25Cb3JkZXJNYXRyaXhbaV1bal0rIiAgIjsKKwkJCX0KKwkJCUFjdGl2YXRvci5sb2dJbmZvcm1hdGlvbihzKTsKKwkJfQorCQlBY3RpdmF0b3IubG9nSW5mb3JtYXRpb24oIiIpOworCQlBY3RpdmF0b3IubG9nSW5mb3JtYXRpb24oIkNoZWNrU3VtIGZvciBTdGF0cyBNYXJ0aXggLSBjb21wcmVzc2VkIGJ5IGNvdW50cnkiKTsKKwkJQWN0aXZhdG9yLmxvZ0luZm9ybWF0aW9uKCIiKTsKKwkJU3lzdGVtLmV4aXQoMCk7CisJfQorCQorCS8qKgorCSAqIAorCSAqIEBwYXJhbSB0aHJlZUxldHRlckNvZGUKKwkgKiBAcGFyYW0gd29ybGQKKwkgKiBAcmV0dXJuCisJICovCisJQFN1cHByZXNzV2FybmluZ3MoIm5scyIpCisJcHVibGljIHN0YXRpYyBpbnQgZ2V0Q291bnRyeUluZGV4KFN0cmluZyB0aHJlZUxldHRlckNvZGUsIFN0cmluZ1tdIHdvcmxkKSB7CisJCWZvcihpbnQgaSA9IDA7IGkgPCB3b3JsZC5sZW5ndGg7IGkgKyspIHsKKwkJCWlmKHdvcmxkW2ldLmVxdWFsc0lnbm9yZUNhc2UodGhyZWVMZXR0ZXJDb2RlKSkgcmV0dXJuIGk7CisJCX0KKwkJQWN0aXZhdG9yLmxvZ0luZm9ybWF0aW9uKCJFcnJvciBtYXBwaW5nIGNvdW50cnkgaW5kZXgiKTsKKwkJU3lzdGVtLmV4aXQoMSk7CisJCXJldHVybiAtMTsgLy8gc2hvdWxkIG5ldmVyIGhhcHBlbiBzbyAKKwl9CisJCisJLyoqCisJICogaW5uZXIgY2xhc3MKKwkgKiBAYXV0aG9yIGpoa2F1ZgorCSAqCisJICovCisJcHVibGljIGNsYXNzIENvdW50cnkgaW1wbGVtZW50cyBDb21wYXJhYmxlPENvdW50cnk+IHsKKwkJCisJCVN0cmluZyB0aHJlZUxldHRlckNvZGU7CisJCVN0cmluZyB0d29MZXR0ZXJDb2RlOworCQlpbnQgaW5kZXg7CisJCWludCBudW1Ob2RlczsKKwkJCisJCS8qKgorCQkgKiAKKwkJICogQHBhcmFtIHRocmVlTGV0dGVyQ29kZQorCQkgKiBAcGFyYW0gdHdvTGV0dGVyQ29kZQorCQkgKiBAcGFyYW0gaW5kZXgKKwkJICovCisJCXB1YmxpYyBDb3VudHJ5KFN0cmluZyB0aHJlZUxldHRlckNvZGUsIFN0cmluZyB0d29MZXR0ZXJDb2RlLCBpbnQgaW5kZXgsIGludCBudW1Ob2RlcykgeworCQkJdGhpcy50aHJlZUxldHRlckNvZGUgPSB0aHJlZUxldHRlckNvZGU7CisJCQl0aGlzLnR3b0xldHRlckNvZGUgPSB0d29MZXR0ZXJDb2RlOworCQkJdGhpcy5pbmRleCA9IGluZGV4OworCQkJdGhpcy5udW1Ob2RlcyA9IG51bU5vZGVzOworCQl9CisKKworCisJCS8qKgorCQkgKiBjb21wYXJlcyB0d28gY291bnRyaWVzIGZvciBzb3J0CisJCSAqIEBwYXJhbSBvdGhlciBjb3VudHJ5CisJCSAqLworCQlwdWJsaWMgaW50IGNvbXBhcmVUbyhDb3VudHJ5IG90aGVyKSB7CisJCQkKKwkJCS8vIGV4Y2VwdGlvbiAtIGxhcmdlIGNvdW50cnkgd2l0aCBaRVJPIG5laWdoYm9ycworCQkJLy8gVE9ETyBjaGVjayB0aGUgU1RFTSBkYXRhIGhlcmUKKwkJCS8vIHdlIG1hbnkgbm90ZSBiZSB1c2luZyBhbGwgdGhlc2UgUE5HIG5vZGVzCisJCQkvLyB0aGV5IGhhdmUgbm8gbmVpZ2hib3JzCisJCQlpZih0aGlzLnRocmVlTGV0dGVyQ29kZS5lcXVhbHNJZ25vcmVDYXNlKCJQTkciKSkgcmV0dXJuIDE7IC8vJE5PTi1OTFMtMSQKKwkJCQorCQkJaWYodGhpcy5udW1Ob2RlcyA+IG90aGVyLm51bU5vZGVzKSB7CisJCQkJcmV0dXJuIC0xOworCQkJfSBlbHNlIGlmKHRoaXMubnVtTm9kZXMgPCBvdGhlci5udW1Ob2RlcykgeworCQkJCXJldHVybiAxOworCQkJfSBlbHNlIAlyZXR1cm4gMDsKKwkJfQorCQkKKwl9CisJCisJCisJLyoqCisJICogaW5uZXIgY2xhc3MKKwkgKiBAYXV0aG9yIGpoa2F1ZgorCSAqCisJICovCisJcHVibGljIGNsYXNzIFJlZ2lvbiBpbXBsZW1lbnRzIENvbXBhcmFibGU8UmVnaW9uPiB7CisJCQorCQlTdHJpbmcgcmVnaW9uSUQ7CisJCWludCBpbmRleDsKKwkJaW50IG51bU5vZGVzOworCQlTdHJpbmcgcGFyZW50Q291bnRyeUNvZGU7CisJCQorCQkKKwkJLyoqCisJCSAqIEBwYXJhbSByZWdpb25JRAorCQkgKiBAcGFyYW0gaW5kZXgKKwkJICogQHBhcmFtIG51bU5vZGVzCisJCSAqIEBwYXJhbSBwYXJlbnRDb3VudHJ5CisJCSAqLworCQlwdWJsaWMgUmVnaW9uKFN0cmluZyByZWdpb25JRCwgaW50IGluZGV4LCBpbnQgbnVtTm9kZXMsIFN0cmluZyBwYXJlbnRDb3VudHJ5KSB7CisJCQl0aGlzLnJlZ2lvbklEID0gcmVnaW9uSUQ7CisJCQl0aGlzLmluZGV4ID0gaW5kZXg7CisJCQl0aGlzLm51bU5vZGVzID0gbnVtTm9kZXM7CisJCQl0aGlzLnBhcmVudENvdW50cnlDb2RlID0gcGFyZW50Q291bnRyeTsKKwkJfQorCisKKworCQkvKioKKwkJICogY29tcGFyZXMgdHdvIGNvdW50cmllcyBmb3Igc29ydAorCQkgKiBAcGFyYW0gb3RoZXIgcmVnaW9uCisJCSAqLworCQlwdWJsaWMgaW50IGNvbXBhcmVUbyhSZWdpb24gb3RoZXIpIHsKKwkJCQorCQkJLy8gZXhjZXB0aW9uIC0gbGFyZ2UgcmVnaW9uIHdpdGggWkVSTyBuZWlnaGJvcnMKKwkJCS8vIFRPRE8gY2hlY2sgdGhlIFNURU0gZGF0YSBoZXJlCisJCQkvLyB3ZSBtYW55IG5vdGUgYmUgdXNpbmcgYWxsIHRoZXNlIFBORyBub2RlcworCQkJLy8gdGhleSBoYXZlIG5vIG5laWdoYm9ycworCQkJaWYodGhpcy5yZWdpb25JRC5lcXVhbHNJZ25vcmVDYXNlKCJQTkciKSkgcmV0dXJuIDE7IC8vJE5PTi1OTFMtMSQKKwkJCQorCQkJaWYodGhpcy5udW1Ob2RlcyA+IG90aGVyLm51bU5vZGVzKSB7CisJCQkJcmV0dXJuIC0xOworCQkJfSBlbHNlIGlmKHRoaXMubnVtTm9kZXMgPCBvdGhlci5udW1Ob2RlcykgeworCQkJCXJldHVybiAxOworCQkJfSBlbHNlIAlyZXR1cm4gMDsKKwkJfQorCQkKKwl9CisJCisJLyoqCisJICogaW5uZXIgY2xhc3MKKwkgKiBAYXV0aG9yIGpoa2F1ZgorCSAqCisJICovCisJcHVibGljIGNsYXNzIFBhcnRpdGlvbkdyb3VwIGltcGxlbWVudHMgQ29tcGFyYWJsZTxQYXJ0aXRpb25Hcm91cD4geworCQkKKwkJU2V0PFJlZ2lvbj4gcmVnaW9uR3JvdXAgPSBuZXcgSGFzaFNldDxSZWdpb24+KCk7CisJCQorCQlSZWdpb24gbmV4dENhbmRpZGF0ZU1lbWJlciA9IG51bGw7CisJCQorCQorCQkvKioKKwkJICogCisJCSAqLworCQlwdWJsaWMgUGFydGl0aW9uR3JvdXAoKSB7CisJCX0KKwkJCisJCS8qKgorCQkgKiByZXR1cm5zIHRoZSBncm91cCBhcyBzZXQgb2YgdGhyZWUgbGV0dGVyIHJlZ2lvbiBjb2RlcworCQkgKiBAcmV0dXJuCisJCSAqLworCQlTZXQ8U3RyaW5nPiBnZXRSZWdpb25Db2RlcygpIHsKKwkJCVNldDxTdHJpbmc+IHBsYW5TZXQgPSBuZXcgSGFzaFNldDxTdHJpbmc+KCk7CisJCQlmb3IoUmVnaW9uIHJlZ2lvbjogcmVnaW9uR3JvdXApICB7CisJCQkJcGxhblNldC5hZGQocmVnaW9uLnJlZ2lvbklEKTsKKwkJCX0KKwkJCXJldHVybiBwbGFuU2V0OworCQl9CisJCQorCQkvKioKKwkJICogCisJCSAqIEByZXR1cm4KKwkJICovCisJCXB1YmxpYyBpbnQgZ2V0VG90YWxOb2RlcygpIHsKKwkJCWludCBzdW0gPSAwOworCQkJZm9yKFJlZ2lvbiByOnJlZ2lvbkdyb3VwKSB7CisJCQkJc3VtICs9IHIubnVtTm9kZXM7CisJCQl9CisJCQlyZXR1cm4gc3VtOworCQl9Ly8gZ2V0VG90YWxOb2RlcworCisJCS8qKgorCQkgKiAKKwkJICogQHBhcmFtIHJlZ2lvbgorCQkgKi8KKwkJcHVibGljIHZvaWQgYWRkKFJlZ2lvbiByZWdpb24pIHsKKwkJCXJlZ2lvbkdyb3VwLmFkZChyZWdpb24pOworCQl9CisKKwkJLyoqCisJCSAqIAorCQkgKiBAcGFyYW0gb3RoZXIKKwkJICogQHJldHVybgorCQkgKi8KKwkJcHVibGljIGludCBnZXRDb21tb25Cb3JkZXJBcmVhKFJlZ2lvbiBvdGhlcikgeworCQkJaW50IHN1cmZhY2VBcmVhID0gMDsKKwkJCWZvcihSZWdpb24gcmVnaW9uOiByZWdpb25Hcm91cCkgIHsKKwkJCQlzdXJmYWNlQXJlYSArPSBsZXZlbDFDb21tb25Cb3JkZXJNYXRyaXhbcmVnaW9uLmluZGV4XVtvdGhlci5pbmRleF07CisJCQl9CisJCQlyZXR1cm4gc3VyZmFjZUFyZWE7CisJCX0KKwkJCisJCQorCQkKKwkJCisJCQorCQkvKioKKwkJICogCisJCSAqIENvdW50IHRoZSB1bnJlc29sdmVkIG9yIGV4dGVybmFsIGVkZ2VzIGluIGEgcmVnaW9uR3JvdXAKKwkJICogQHJldHVybgorCQkgKi8KKwkJcHVibGljIGludCBjb3VudFVucmVzb2x2ZWRCb3JkZXJFZGdlcygpIHsKKwkJCWludCBzdXJmYWNlQXJlYSA9IDA7CisJCQkvLyBmb3IgZXZlcnkgcmVnaW9uIGluIHRoaXMgZ3JvdXAKKwkJCWZvcihSZWdpb24gcmVnaW9uOiByZWdpb25Hcm91cCkgIHsKKwkJCQkKKwkJCQkvLyBhbmQgZm9yIGV2ZXJ5IHBvc3NpYmxlIG5laWdoYm9yIHJlZ2lvbgorCQkJCWZvcihpbnQgaiA9IDA7IGogPCBOVU1fTEVWRUxfMV9JRFM7IGogKyspIHsKKwkJCQkJLy8gbm90IGRpYWdvbmFsIGVsZW1lbnQKKwkJCQkJaWYoaiAhPSByZWdpb24uaW5kZXgpIHsKKwkJCQkJCVJlZ2lvbiB0YXJnZXQgPSB3b3JsZFN0YXRlTGlzdC5nZXQoaik7CisJCQkJCQkvLyBJRiByZWdpb24gaiBpcyBOT1QgaW4gdGhpcyBncm91cAorCQkJCQkJaWYoIXJlZ2lvbkdyb3VwLmNvbnRhaW5zKHRhcmdldCkpIHsKKwkJCQkJCQlzdXJmYWNlQXJlYSArPSBsZXZlbDFDb21tb25Cb3JkZXJNYXRyaXhbal1bcmVnaW9uLmluZGV4XTsKKwkJCQkJCX0vLyBpZiB0YXJnZXQgaXMgcmVtb3RlCisJCQkJCX0vLyBub3QgZGlhZ29uYWwgKGlzIHRhcmdldCBpcyBPVEhFUiByZWdpb24pCisJCQkKKwkJCQl9Ly8gYWxsIG90aGVyIHRhcmdldCBjb3VudHJpZXMKKwkJCQkKKwkJCX0vLyBmb3IgYWxsIGNvdW50cmllcyBpbiB0aGlzIGdyb3VwCisJCQlyZXR1cm4gc3VyZmFjZUFyZWE7CisJCX0vL2NvdW50VW5yZXNvbHZlZEJvcmRlckVkZ2VzKCkKKwkJCisJCQorCQkKKwkJCisJCQorCQkKKwkJLyoqCisJCSAqIAorCQkgKiBAcGFyYW0gY2FuZGlkYXRlCisJCSAqIEByZXR1cm4KKwkJICovCisJCXB1YmxpYyBpbnQgZ2V0U3VyZmFjZUFyZWEoUmVnaW9uIGNhbmRpZGF0ZSkgeworCQkJaW50IHN1cmZhY2VBcmVhID0gMDsKKwkJCS8vIGZvciBlYWNoIHJlZ2lvbiBpbiBUSElTIGdyb3VwCisJCQlmb3IoUmVnaW9uIHJlZ2lvbjogcmVnaW9uR3JvdXApICB7CisJCQkJc3VyZmFjZUFyZWEgKz0gbGV2ZWwxQ29tbW9uQm9yZGVyTWF0cml4W2NhbmRpZGF0ZS5pbmRleF1bcmVnaW9uLmluZGV4XTsKKwkJCX0KKwkJCXJldHVybiBzdXJmYWNlQXJlYTsKKwkJfS8vZ2V0U3VyZmFjZUFyZWEKKworCQkKKwkJLyoqCisJCSAqIGNvbXBhcmVzIHR3byBjb3VudHJpZXMgZm9yIHNvcnQKKwkJICogQHBhcmFtIG90aGVyIHJlZ2lvbgorCQkgKi8KKwkJcHVibGljIGludCBjb21wYXJlVG8oUGFydGl0aW9uR3JvdXAgb3RoZXIpIHsKKwkJCQorCQkJaW50IHRoaXNTaXplID0gdGhpcy5nZXRUb3RhbE5vZGVzKCk7CisJCQlpbnQgb3RoZXJTaXplID0gb3RoZXIuZ2V0VG90YWxOb2RlcygpOworCQkJaWYodGhpc1NpemUgPCBvdGhlclNpemUpIHsKKwkJCQlyZXR1cm4gMTsKKwkJCX0gZWxzZSBpZih0aGlzU2l6ZSA+IG90aGVyU2l6ZSkgeworCQkJCXJldHVybiAtMTsKKwkJCX0gZWxzZSAJcmV0dXJuIDA7CisJCX0vL2NvbXBhcmVUbworCQkKKwkJCisJCQorCisKKwkJCisJfS8vIFBhcnRpdGlvbkdyb3VwCisJCisJLyoqCisJICogCisJICogQHBhcmFtIG1hc3Rlckxpc3QKKwkgKiBAcmV0dXJuCisJICovCisJcHVibGljIHN0YXRpYyBpbnRbXVtdIGdldFBhcnRpdGlvbkdyb3VwQm9yZGVyTWF0cml4KExpc3Q8UGFydGl0aW9uR3JvdXA+IG1hc3Rlckxpc3QpIHsKKwkJaW50IG51bUdyb3VwcyA9IG1hc3Rlckxpc3Quc2l6ZSgpOworCQlpbnRbXVtdIG1hdHJpeCA9IG5ldyBpbnRbbnVtR3JvdXBzXVtudW1Hcm91cHNdOworCQkKKwkJZm9yKGludCBpID0gMDsgaSA8IG51bUdyb3VwczsgaSArKykgIHsKKwkJCVBhcnRpdGlvbkdyb3VwIHBnaSA9IG1hc3Rlckxpc3QuZ2V0KGkpOworCQkJZm9yKGludCBqID0gMDsgaiA8IG51bUdyb3VwczsgaiArKykgIHsKKwkJCQltYXRyaXhbaV1bal0gPSAwOworCQkJCWlmKGkhPWopIHsKKwkJCQkJUGFydGl0aW9uR3JvdXAgcGdqID0gbWFzdGVyTGlzdC5nZXQoaik7CisJCQkJCWZvcihSZWdpb24gcmVnaW9uOiBwZ2oucmVnaW9uR3JvdXApICB7CisJCQkJCQltYXRyaXhbaV1bal0gKz0gcGdpLmdldENvbW1vbkJvcmRlckFyZWEocmVnaW9uKTsKKwkJCQkJfQorCQkJCX0KKwkJCQkKKwkJCX0vLyBmb3IgagorCQl9IC8vIGZvciBpCisJCXJldHVybiBtYXRyaXg7CisJfQorCQorCit9Ly8gQ291bnRyeUdyYXBoUGF0aXRpb25QbGFubmVyCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jLy5wcm9qZWN0IGIvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy8ucHJvamVjdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43OWFjNWM1Ci0tLSAvZGV2L251bGwKKysrIGIvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy8ucHJvamVjdApAQCAtMCwwICsxLDIyIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPHByb2plY3REZXNjcmlwdGlvbj4KKwk8bmFtZT5vcmcuZWNsaXBzZS5zdGVtLmRvYzwvbmFtZT4KKwk8Y29tbWVudD48L2NvbW1lbnQ+CisJPHByb2plY3RzPgorCTwvcHJvamVjdHM+CisJPGJ1aWxkU3BlYz4KKwkJPGJ1aWxkQ29tbWFuZD4KKwkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5NYW5pZmVzdEJ1aWxkZXI8L25hbWU+CisJCQk8YXJndW1lbnRzPgorCQkJPC9hcmd1bWVudHM+CisJCTwvYnVpbGRDb21tYW5kPgorCQk8YnVpbGRDb21tYW5kPgorCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLlNjaGVtYUJ1aWxkZXI8L25hbWU+CisJCQk8YXJndW1lbnRzPgorCQkJPC9hcmd1bWVudHM+CisJCTwvYnVpbGRDb21tYW5kPgorCTwvYnVpbGRTcGVjPgorCTxuYXR1cmVzPgorCQk8bmF0dXJlPm9yZy5lY2xpcHNlLnBkZS5QbHVnaW5OYXR1cmU8L25hdHVyZT4KKwk8L25hdHVyZXM+Cis8L3Byb2plY3REZXNjcmlwdGlvbj4KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvTUVUQS1JTkYvTUFOSUZFU1QuTUYgYi9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL01FVEEtSU5GL01BTklGRVNULk1GCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZmYjkxNzAKLS0tIC9kZXYvbnVsbAorKysgYi9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL01FVEEtSU5GL01BTklGRVNULk1GCkBAIC0wLDAgKzEsOCBAQAorTWFuaWZlc3QtVmVyc2lvbjogMS4wCitCdW5kbGUtTWFuaWZlc3RWZXJzaW9uOiAyCitCdW5kbGUtTmFtZTogJXBsdWdpbk5hbWUKK0J1bmRsZS1TeW1ib2xpY05hbWU6IG9yZy5lY2xpcHNlLnN0ZW0uZG9jO3NpbmdsZXRvbjo9dHJ1ZQorQnVuZGxlLVZlcnNpb246IDEuMi4xCitCdW5kbGUtVmVuZG9yOiAlcHJvdmlkZXJOYW1lCitCdW5kbGUtTG9jYWxpemF0aW9uOiBwbHVnaW4KK1JlcXVpcmUtQnVuZGxlOiBvcmcuZWNsaXBzZS5oZWxwCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2J1aWxkLnByb3BlcnRpZXMgYi9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2J1aWxkLnByb3BlcnRpZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDJjN2U1MQotLS0gL2Rldi9udWxsCisrKyBiL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvYnVpbGQucHJvcGVydGllcwpAQCAtMCwwICsxLDI1IEBACitiaW4uaW5jbHVkZXMgPSBNRVRBLUlORi8sXAorICAgICAgICAgICAgICAgcGx1Z2luLnhtbCxcCisgICAgICAgICAgICAgICB0b2MueG1sLFwKKyAgICAgICAgICAgICAgIHRvY2NvbmNlcHRzLnhtbCxcCisgICAgICAgICAgICAgICB0b2NlcGlkZW1pb2xvZ2ljYWxtb2RlbGluZy54bWwsXAorICAgICAgICAgICAgICAgdG9jZ2V0dGluZ3N0YXJ0ZWQueG1sLFwKKyAgICAgICAgICAgICAgIHRvY2ludGVyZmFjZS54bWwsXAorICAgICAgICAgICAgICAgdG9jcmVmZXJlbmNlLnhtbCxcCisgICAgICAgICAgICAgICB0b2N0dXRvcmlhbHMueG1sLFwKKyAgICAgICAgICAgICAgIGhlbHAvLFwKKyAgICAgICAgICAgICAgIHBsdWdpbi5wcm9wZXJ0aWVzLFwKKyAgICAgICAgICAgICAgIG5vdGljZS5odG1sLFwKKyAgICAgICAgICAgICAgIGVwbC12MTAuaHRtbCxcCisgICAgICAgICAgICAgICB0b2NkaXNjbGFpbWVyLnhtbAorc3JjLmluY2x1ZGVzID0gaGVscC8sXAorICAgICAgICAgICAgICAgZXBsLXYxMC5odG1sLFwKKyAgICAgICAgICAgICAgIG5vdGljZS5odG1sLFwKKyAgICAgICAgICAgICAgIHRvY3R1dG9yaWFscy54bWwsXAorICAgICAgICAgICAgICAgdG9jcmVmZXJlbmNlLnhtbCxcCisgICAgICAgICAgICAgICB0b2NpbnRlcmZhY2UueG1sLFwKKyAgICAgICAgICAgICAgIHRvY2dldHRpbmdzdGFydGVkLnhtbCxcCisgICAgICAgICAgICAgICB0b2NlcGlkZW1pb2xvZ2ljYWxtb2RlbGluZy54bWwsXAorICAgICAgICAgICAgICAgdG9jZGlzY2xhaW1lci54bWwsXAorICAgICAgICAgICAgICAgdG9jY29uY2VwdHMueG1sLFwKKyAgICAgICAgICAgICAgIHRvYy54bWwKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvY29udGV4dHNlbnNpdGl2ZWhlbHAueG1sIGIvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9jb250ZXh0c2Vuc2l0aXZlaGVscC54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmY2ZGRjMwotLS0gL2Rldi9udWxsCisrKyBiL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvY29udGV4dHNlbnNpdGl2ZWhlbHAueG1sCkBAIC0wLDAgKzEsODUgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+DQorDQorPGNvbnRleHRzPg0KKwk8Y29udGV4dCBpZD0ibmV3ZGlzZWFzZV9jb250ZXh0aWQiIHRpdGxlPSJBYm91dCBOZXcgRGlzZWFzZSBXaXphcmQiPg0KKwkJPGRlc2NyaXB0aW9uPlRoaXMgV2l6YXJkIGFsbG93cyB5b3UgdG8gY3JlYXRlIGFuZCBkZWZpbmUgcHJvcGVydGllcyBvZiBhIG5ldyBEaXNlYXNlLjwvZGVzY3JpcHRpb24+DQorCQk8dG9waWMgaHJlZj0iaGVscC9odG1sL2ludGVyZmFjZS93aXphcmRzL2Rpc2Vhc2V3aXphcmQuaHRtbCIgbGFiZWw9IkRpc2Vhc2UgV2l6YXJkIi8+DQorCTwvY29udGV4dD4NCisJDQorCTxjb250ZXh0IGlkPSJuZXdleHBlcmltZW50X2NvbnRleHRpZCIgdGl0bGU9IkFib3V0IE5ldyBFeHBlcmltZW50IFdpemFyZCI+DQorCQk8ZGVzY3JpcHRpb24+VGhpcyBXaXphcmQgYWxsb3dzIHlvdSB0byBjcmVhdGUgYW5kIGRlZmluZSB0aGUgcHJvcGVydGllcyBvZiBhIG5ldyBFeHBlcmltZW50LjwvZGVzY3JpcHRpb24+DQorCQk8dG9waWMgaHJlZj0iaGVscC9odG1sL2ludGVyZmFjZS93aXphcmRzL2V4cGVyaW1lbnR3aXphcmQuaHRtbCIgbGFiZWw9IkV4cGVyaW1lbnQgV2l6YXJkIi8+DQorCTwvY29udGV4dD4NCisJDQorCTxjb250ZXh0IGlkPSJuZXdncmFwaF9jb250ZXh0aWQiIHRpdGxlPSJBYm91dCBOZXcgR3JhcGggV2l6YXJkIj4NCisJCTxkZXNjcmlwdGlvbj5UaGlzIFdpemFyZCBhbGxvd3MgeW91IHRvIGNyZWF0ZSBhbmQgZGVmaW5lIHRoZSBwcm9wZXJ0aWVzIG9mIGEgbmV3IEdyYXBoLjwvZGVzY3JpcHRpb24+DQorCQk8dG9waWMgaHJlZj0iaGVscC9odG1sL2ludGVyZmFjZS93aXphcmRzL2dyYXBod2l6YXJkLmh0bWwiIGxhYmVsPSJHcmFwaCBXaXphcmQiLz4NCisJPC9jb250ZXh0Pg0KKwkNCisJPGNvbnRleHQgaWQ9Im5ld2luZmVjdG9yaW5vY3VsYXRvcl9jb250ZXh0aWQiIHRpdGxlPSJBYm91dCBOZXcgSW5mZWN0aW9uL0lub2N1bGF0aW9uIFBvaW50IFdpemFyZCI+DQorCQk8ZGVzY3JpcHRpb24+VGhpcyBXaXphcmQgYWxsb3dzIHlvdSB0byBjcmVhdGUgYW5kIGRlZmluZSB0aGUgcHJvcGVydGllcyBvZiBhIG5ldyBJbmZlY3RvciBvciBJbm9jdWxhdG9yLjwvZGVzY3JpcHRpb24+DQorCQk8dG9waWMgaHJlZj0iaGVscC9odG1sL2ludGVyZmFjZS93aXphcmRzL2luZmVjdG9yd2l6YXJkLmh0bWwiIGxhYmVsPSJJbmZlY3Rvci9Jbm9jdWxhdG9yIFdpemFyZCIvPg0KKwk8L2NvbnRleHQ+DQorCQ0KKwk8Y29udGV4dCBpZD0ibmV3bW9kZWxfY29udGV4dGlkIiB0aXRsZT0iQWJvdXQgTmV3IE1vZGVsIFdpemFyZCI+DQorCQk8ZGVzY3JpcHRpb24+VGhpcyBXaXphcmQgYWxsb3dzIHlvdSB0byBjcmVhdGUgYW5kIGRlZmluZSB0aGUgcHJvcGVydGllcyBvZiBhIG5ldyBNb2RlbC48L2Rlc2NyaXB0aW9uPg0KKwkJPHRvcGljIGhyZWY9ImhlbHAvaHRtbC9pbnRlcmZhY2Uvd2l6YXJkcy9tb2RlbHdpemFyZC5odG1sIiBsYWJlbD0iTW9kZWwgV2l6YXJkIi8+DQorCTwvY29udGV4dD4NCisJDQorCTxjb250ZXh0IGlkPSJuZXdtb2RpZmllcl9jb250ZXh0aWQiIHRpdGxlPSJBYm91dCBOZXcgTW9kaWZpZXIgV2l6YXJkIj4NCisJCTxkZXNjcmlwdGlvbj5UaGlzIFdpemFyZCBhbGxvd3MgeW91IHRvIGNyZWF0ZSBhbmQgZGVmaW5lIHRoZSBwcm9wZXJ0aWVzIG9mIGEgbmV3IE1vZGlmaWVyLjwvZGVzY3JpcHRpb24+DQorCQk8dG9waWMgaHJlZj0iaGVscC9odG1sL2ludGVyZmFjZS93aXphcmRzL21vZGlmaWVyd2l6YXJkLmh0bWwiIGxhYmVsPSJNb2RpZmllciBXaXphcmQiLz4NCisJPC9jb250ZXh0Pg0KKwkNCisJPGNvbnRleHQgaWQ9Im5ld3BvcHVsYXRpb25fY29udGV4dGlkIiB0aXRsZT0iQWJvdXQgTmV3IFBvcHVsYXRpb24gTW9kZWwgV2l6YXJkIj4NCisJCTxkZXNjcmlwdGlvbj5UaGlzIFdpemFyZCBhbGxvd3MgeW91IHRvIGRlZmluZSB0aGUgcHJvcGVydGllcyBvZiBhIG5ldyBQb3B1bGF0aW9uIE1vZGVsLjwvZGVzY3JpcHRpb24+DQorCQk8dG9waWMgaHJlZj0iaGVscC9odG1sL2ludGVyZmFjZS93aXphcmRzL3BvcHVsYXRpb253aXphcmQuaHRtbCIgbGFiZWw9IlBvcHVsYXRpb24gTW9kZWwgV2l6YXJkIi8+DQorCTwvY29udGV4dD4NCisJDQorCTxjb250ZXh0IGlkPSJuZXdwb3B1bGF0aW9uaW5pdGlhbGl6ZXJfY29udGV4dGlkIiB0aXRsZT0iQWJvdXQgTmV3IFBvcHVsYXRpb24gSW5pdGlhbGl6ZXIgV2l6YXJkIj4NCisJCTxkZXNjcmlwdGlvbj5UaGlzIFdpemFyZCBhbGxvd3MgeW91IHRvIGRlZmluZSB0aGUgaW5pdGlhbCBzdGF0ZSBvZiBhIFBvcHVsYXRpb24uPC9kZXNjcmlwdGlvbj4NCisJCTx0b3BpYyBocmVmPSJoZWxwL2h0bWwvaW50ZXJmYWNlL3dpemFyZHMvcG9wdWxhdGlvbmluaXRpYWxpemVyd2l6YXJkLmh0bWwiIGxhYmVsPSJQb3B1bGF0aW9uIEluaXRpYWxpemVyIFdpemFyZCIvPg0KKwk8L2NvbnRleHQ+DQorCQ0KKwk8Y29udGV4dCBpZD0ibmV3cHJlZGljYXRlX2NvbnRleHRpZCIgdGl0bGU9IkFib3V0IE5ldyBQcmVkaWNhdGUgV2l6YXJkIj4NCisJCTxkZXNjcmlwdGlvbj5UaGlzIFdpemFyZCBhbGxvd3MgeW91IHRvIGNyZWF0ZSBhbmQgZGVmaW5lIHRoZSBwcm9wZXJ0aWVzIG9mIGEgbmV3IFByZWRpY2F0ZS48L2Rlc2NyaXB0aW9uPg0KKwkJPHRvcGljIGhyZWY9ImhlbHAvaHRtbC9pbnRlcmZhY2Uvd2l6YXJkcy9wcmVkaWNhdGV3aXphcmQuaHRtbCIgbGFiZWw9IlByZWRpY2F0ZSBXaXphcmQiLz4NCisJPC9jb250ZXh0Pg0KKwkNCisJPGNvbnRleHQgaWQ9Im5ld3JlYWx0aW1lc2VxdWVuY2VyX2NvbnRleHRpZCIgdGl0bGU9IkFib3V0IE5ldyBSZWFsIFRpbWUgU2VxdWVuY2VyIFdpemFyZCI+DQorCQk8ZGVzY3JpcHRpb24+VGhpcyBXaXphcmQgYWxsb3dzIHlvdSB0byBjcmVhdGUgYW5kIGRlZmluZSB0aGUgcHJvcGVydGllcyBvZiBhIG5ldyBSZWFsLVRpbWUgU2VxdWVuY2VyLjwvZGVzY3JpcHRpb24+DQorCQk8dG9waWMgaHJlZj0iaGVscC9odG1sL2ludGVyZmFjZS93aXphcmRzL3JlYWx0aW1lc2VxdWVuY2Vyd2l6YXJkLmh0bWwiIGxhYmVsPSJSZWFsIFRpbWUgU2VxdWVuY2VyIFdpemFyZCIvPg0KKwk8L2NvbnRleHQ+DQorCQ0KKwk8Y29udGV4dCBpZD0ibmV3c2NlbmFyaW9fY29udGV4dGlkIiB0aXRsZT0iQWJvdXQgTmV3IFNjZW5hcmlvIFdpemFyZCI+DQorCQk8ZGVzY3JpcHRpb24+VGhpcyBXaXphcmQgYWxsb3dzIHlvdSB0byBjcmVhdGUgYW5kIGRlZmluZSB0aGUgcHJvcGVydGllcyBvZiBhIG5ldyBTY2VuYXJpby48L2Rlc2NyaXB0aW9uPg0KKwkJPHRvcGljIGhyZWY9ImhlbHAvaHRtbC9pbnRlcmZhY2Uvd2l6YXJkcy9zY2VuYXJpb3dpemFyZC5odG1sIiBsYWJlbD0iU2NlbmFyaW8gV2l6YXJkIi8+DQorCTwvY29udGV4dD4NCisNCisJPGNvbnRleHQgaWQ9Im5ld3NlcXVlbnRpYWxzZXF1ZW5jZXJfY29udGV4dGlkIiB0aXRsZT0iQWJvdXQgTmV3IFNlcXVlbnRpYWwgU2VxdWVuY2VyIFdpemFyZCI+DQorCQk8ZGVzY3JpcHRpb24+VGhpcyBXaXphcmQgYWxsb3dzIHlvdSB0byBjcmVhdGUgYW5kIGRlZmluZSB0aGUgcHJvcGVydGllcyBvZiBhIG5ldyBTZXF1ZW50aWFsIFNlcXVlbmNlci48L2Rlc2NyaXB0aW9uPg0KKwkJPHRvcGljIGhyZWY9ImhlbHAvaHRtbC9pbnRlcmZhY2Uvd2l6YXJkcy9zZXF1ZW50aWFsc2VxdWVuY2Vyd2l6YXJkLmh0bWwiIGxhYmVsPSJTZXF1ZW50aWFsIFNlcXVlbmNlciBXaXphcmQiLz4NCisJPC9jb250ZXh0Pg0KKwkNCisJPGNvbnRleHQgaWQ9Im5ld3N0ZW1wcm9qZWN0X2NvbnRleHRpZCIgdGl0bGU9IkFib3V0IE5ldyBTVEVNIFByb2plY3QgV2l6YXJkIj4NCisJCTxkZXNjcmlwdGlvbj5UaGlzIFdpemFyZCBhbGxvd3MgeW91IHRvIGNyZWF0ZSBhbmQgZGVmaW5lIHRoZSBwcm9wZXJ0aWVzIG9mIGEgbmV3IFNURU0gUHJvamVjdC48L2Rlc2NyaXB0aW9uPg0KKwkJPHRvcGljIGhyZWY9ImhlbHAvaHRtbC9pbnRlcmZhY2Uvd2l6YXJkcy9zdGVtcHJvamVjdHdpemFyZC5odG1sIiBsYWJlbD0iU1RFTSBQcm9qZWN0IFdpemFyZCIvPg0KKwk8L2NvbnRleHQ+DQorDQorCTxjb250ZXh0IGlkPSJuZXd0cmlnZ2VyX2NvbnRleHRpZCIgdGl0bGU9IkFib3V0IE5ldyBUcmlnZ2VyIFdpemFyZCI+DQorCQk8ZGVzY3JpcHRpb24+VGhpcyBXaXphcmQgYWxsb3dzIHlvdSB0byBjcmVhdGUgYW5kIGRlZmluZSB0aGUgcHJvcGVydGllcyBvZiBhIG5ldyBUcmlnZ2VyLjwvZGVzY3JpcHRpb24+DQorCQk8dG9waWMgaHJlZj0iaGVscC9odG1sL2ludGVyZmFjZS93aXphcmRzL3RyaWdnZXJ3aXphcmQuaHRtbCIgbGFiZWw9IlRyaWdnZXIgV2l6YXJkIi8+DQorCTwvY29udGV4dD4NCisJDQorCTxjb250ZXh0IGlkPSJuZXdhdXRvbWF0aWNleHBfY29udGV4dGlkIiB0aXRsZT0iQWJvdXQgTmV3IEF1dG8gRXhwIFdpemFyZCI+DQorCQk8ZGVzY3JpcHRpb24+VGhpcyBXaXphcmQgYWxsb3dzIHlvdSB0byBjcmVhdGUgYW5kIGRlZmluZSB0aGUgcHJvcGVydGllcyBvZiBhbiBhdXRvbWF0aWMgZXhwZXJpbWVudDwvZGVzY3JpcHRpb24+DQorCQk8dG9waWMgaHJlZj0iaGVscC9odG1sL2ludGVyZmFjZS93aXphcmRzL2F1dG9leHB3aXphcmQuaHRtbCIgbGFiZWw9IkF1dG9FeHAgV2l6YXJkIi8+DQorCTwvY29udGV4dD4NCisJDQorCTxjb250ZXh0IGlkPSJpbnZhbGlkbmVzdGluZ19jb250ZXh0aWQiIHRpdGxlPSJNb2RlbCBuZXN0aW5nIj4NCisJCTxkZXNjcmlwdGlvbj5Qb3NzaWJsZSBtb2RlbCBuZXN0aW5nIHByb2JsZW0uPC9kZXNjcmlwdGlvbj4NCisJCTx0b3BpYyBocmVmPSJoZWxwL2h0bWwvdHV0b3JpYWxzL21vZGVsbmVzdGluZy5odG1sIiBsYWJlbD0iU2NlbmFyaW8gaW5pdGlhbGl6YXRpb24iLz4NCisJPC9jb250ZXh0Pg0KKwkNCis8L2NvbnRleHRzPg0KKw0KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvY29weWhlbHAueG1sIGIvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9jb3B5aGVscC54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTA4YTkxNgotLS0gL2Rldi9udWxsCisrKyBiL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvY29weWhlbHAueG1sCkBAIC0wLDAgKzEsNDMgQEAKKzwhLS0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAtLT4KKzwhLS0gQW50IGJ1aWxkIHNjcmlwdCB0byBjb3B5IHRoZSBoZWxwIGZpbGVzICAgICAgIC0tPgorPCEtLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIC0tPgorPHByb2plY3QgbmFtZT0iY29weUhlbHAiIGRlZmF1bHQ9ImNvcHloZWxwIiA+CisKKwkKKwk8IS0tIENvbmZpZ3VyZSB0aGUgZGlyZWN0b3J5IGludG8gd2hpY2ggdGhlIHdlYiBhcHBsaWNhdGlvbiBpcyBidWlsdCAtLT4KKwk8cHJvcGVydHkgbmFtZT0iYnVpbGQuZGlyIiAgICB2YWx1ZT0iJHtiYXNlZGlyfSIvPgorICAgICAgICA8cHJvcGVydHkgbmFtZT0iemlwLm5hbWUiICAgIHZhbHVlPSJoZWxwLnppcCIvPgorICAgICAgICAKKwkKKworIAkKKwk8IS0tIEV4ZWN1dGFibGUgVGFyZ2V0cyAtLT4KKwkJCisJPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVzY3JpcHRpb249InJlbW92ZXMgcHJldmlvdXMgYnVpbGQiPgkJCisJCTxkZWxldGUgZGlyPSIkKHppcC5uYW1lKSIgLz4JCisJPC90YXJnZXQ+CisKKwkKKwkKKwk8IS0tIAorCQkqIEJ1aWxkIHRoZSB6aXAgZmlsZSAgCisJCSogICBjb250YWlucworCQkqICAgICAKKwkJKiAgICAgaGVscC9odG1sLworCQkqICAgICAgIGluZGV4Lmh0bWwKKwkJKiAgICAgICB0b2MuaHRtbAorCQkqICAgICAgICouaHRtbCAgYWxsIHRoZSByY3AgaGVscCBmaWxlcworCQkqIAorCQktLT4KKwk8dGFyZ2V0IG5hbWU9ImNvcHloZWxwIiBkZXBlbmRzPSJjbGVhbiIgCisJCWRlc2NyaXB0aW9uPSJjcmVhdGVzIHRoZSB6aXAgZmlsZSI+CQorCQkJCQorCQk8emlwIAorCQkJZGVzdGZpbGU9IiR7emlwLm5hbWV9Ij4KKwkJCTx6aXBmaWxlc2V0IGRpcj0iaGVscC9odG1sIiBwcmVmaXg9ImhlbHAvaHRtbCIvPiAJICAgICAgCisJCQkgCisJCTwvemlwPgorCTwvdGFyZ2V0PgorCisKKzwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvZXBsLXYxMC5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9lcGwtdjEwLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWQ0YjE5NgotLS0gL2Rldi9udWxsCisrKyBiL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvZXBsLXYxMC5odG1sCkBAIC0wLDAgKzEsMzI4IEBACis8aHRtbCB4bWxuczpvPSJ1cm46c2NoZW1hcy1taWNyb3NvZnQtY29tOm9mZmljZTpvZmZpY2UiCit4bWxuczp3PSJ1cm46c2NoZW1hcy1taWNyb3NvZnQtY29tOm9mZmljZTp3b3JkIgoreG1sbnM9Imh0dHA6Ly93d3cudzMub3JnL1RSL1JFQy1odG1sNDAiPgorCis8aGVhZD4KKzxtZXRhIGh0dHAtZXF1aXY9Q29udGVudC1UeXBlIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD13aW5kb3dzLTEyNTIiPgorPG1ldGEgbmFtZT1Qcm9nSWQgY29udGVudD1Xb3JkLkRvY3VtZW50PgorPG1ldGEgbmFtZT1HZW5lcmF0b3IgY29udGVudD0iTWljcm9zb2Z0IFdvcmQgOSI+Cis8bWV0YSBuYW1lPU9yaWdpbmF0b3IgY29udGVudD0iTWljcm9zb2Z0IFdvcmQgOSI+Cis8bGluayByZWw9RmlsZS1MaXN0CitocmVmPSIuL0VjbGlwc2UlMjBFUEwlMjAyMDAzXzExXzEwJTIwRmluYWxfZmlsZXMvZmlsZWxpc3QueG1sIj4KKzx0aXRsZT5FY2xpcHNlIFB1YmxpYyBMaWNlbnNlIC0gVmVyc2lvbiAxLjA8L3RpdGxlPgorPCEtLVtpZiBndGUgbXNvIDldPjx4bWw+CisgPG86RG9jdW1lbnRQcm9wZXJ0aWVzPgorICA8bzpSZXZpc2lvbj4yPC9vOlJldmlzaW9uPgorICA8bzpUb3RhbFRpbWU+MzwvbzpUb3RhbFRpbWU+CisgIDxvOkNyZWF0ZWQ+MjAwNC0wMy0wNVQyMzowMzowMFo8L286Q3JlYXRlZD4KKyAgPG86TGFzdFNhdmVkPjIwMDQtMDMtMDVUMjM6MDM6MDBaPC9vOkxhc3RTYXZlZD4KKyAgPG86UGFnZXM+NDwvbzpQYWdlcz4KKyAgPG86V29yZHM+MTYyNjwvbzpXb3Jkcz4KKyAgPG86Q2hhcmFjdGVycz45MjcwPC9vOkNoYXJhY3RlcnM+CisgICA8bzpMaW5lcz43NzwvbzpMaW5lcz4KKyAgPG86UGFyYWdyYXBocz4xODwvbzpQYXJhZ3JhcGhzPgorICA8bzpDaGFyYWN0ZXJzV2l0aFNwYWNlcz4xMTM4NDwvbzpDaGFyYWN0ZXJzV2l0aFNwYWNlcz4KKyAgPG86VmVyc2lvbj45LjQ0MDI8L286VmVyc2lvbj4KKyA8L286RG9jdW1lbnRQcm9wZXJ0aWVzPgorPC94bWw+PCFbZW5kaWZdLS0+PCEtLVtpZiBndGUgbXNvIDldPjx4bWw+CisgPHc6V29yZERvY3VtZW50PgorICA8dzpUcmFja1JldmlzaW9ucy8+CisgPC93OldvcmREb2N1bWVudD4KKzwveG1sPjwhW2VuZGlmXS0tPgorPHN0eWxlPgorPCEtLQorIC8qIEZvbnQgRGVmaW5pdGlvbnMgKi8KK0Bmb250LWZhY2UKKwl7Zm9udC1mYW1pbHk6VGFob21hOworCXBhbm9zZS0xOjIgMTEgNiA0IDMgNSA0IDQgMiA0OworCW1zby1mb250LWNoYXJzZXQ6MDsKKwltc28tZ2VuZXJpYy1mb250LWZhbWlseTpzd2lzczsKKwltc28tZm9udC1waXRjaDp2YXJpYWJsZTsKKwltc28tZm9udC1zaWduYXR1cmU6NTUzNjc5NDk1IC0yMTQ3NDgzNjQ4IDggMCA2NjA0NyAwO30KKyAvKiBTdHlsZSBEZWZpbml0aW9ucyAqLworcC5Nc29Ob3JtYWwsIGxpLk1zb05vcm1hbCwgZGl2Lk1zb05vcm1hbAorCXttc28tc3R5bGUtcGFyZW50OiIiOworCW1hcmdpbjowaW47CisJbWFyZ2luLWJvdHRvbTouMDAwMXB0OworCW1zby1wYWdpbmF0aW9uOndpZG93LW9ycGhhbjsKKwlmb250LXNpemU6MTIuMHB0OworCWZvbnQtZmFtaWx5OiJUaW1lcyBOZXcgUm9tYW4iOworCW1zby1mYXJlYXN0LWZvbnQtZmFtaWx5OiJUaW1lcyBOZXcgUm9tYW4iO30KK3AKKwl7bWFyZ2luLXJpZ2h0OjBpbjsKKwltc28tbWFyZ2luLXRvcC1hbHQ6YXV0bzsKKwltc28tbWFyZ2luLWJvdHRvbS1hbHQ6YXV0bzsKKwltYXJnaW4tbGVmdDowaW47CisJbXNvLXBhZ2luYXRpb246d2lkb3ctb3JwaGFuOworCWZvbnQtc2l6ZToxMi4wcHQ7CisJZm9udC1mYW1pbHk6IlRpbWVzIE5ldyBSb21hbiI7CisJbXNvLWZhcmVhc3QtZm9udC1mYW1pbHk6IlRpbWVzIE5ldyBSb21hbiI7fQorcC5CYWxsb29uVGV4dCwgbGkuQmFsbG9vblRleHQsIGRpdi5CYWxsb29uVGV4dAorCXttc28tc3R5bGUtbmFtZToiQmFsbG9vbiBUZXh0IjsKKwltYXJnaW46MGluOworCW1hcmdpbi1ib3R0b206LjAwMDFwdDsKKwltc28tcGFnaW5hdGlvbjp3aWRvdy1vcnBoYW47CisJZm9udC1zaXplOjguMHB0OworCWZvbnQtZmFtaWx5OlRhaG9tYTsKKwltc28tZmFyZWFzdC1mb250LWZhbWlseToiVGltZXMgTmV3IFJvbWFuIjt9CitAcGFnZSBTZWN0aW9uMQorCXtzaXplOjguNWluIDExLjBpbjsKKwltYXJnaW46MS4waW4gMS4yNWluIDEuMGluIDEuMjVpbjsKKwltc28taGVhZGVyLW1hcmdpbjouNWluOworCW1zby1mb290ZXItbWFyZ2luOi41aW47CisJbXNvLXBhcGVyLXNvdXJjZTowO30KK2Rpdi5TZWN0aW9uMQorCXtwYWdlOlNlY3Rpb24xO30KKy0tPgorPC9zdHlsZT4KKzwvaGVhZD4KKworPGJvZHkgbGFuZz1FTi1VUyBzdHlsZT0ndGFiLWludGVydmFsOi41aW4nPgorCis8ZGl2IGNsYXNzPVNlY3Rpb24xPgorCis8cCBhbGlnbj1jZW50ZXIgc3R5bGU9J3RleHQtYWxpZ246Y2VudGVyJz48Yj5FY2xpcHNlIFB1YmxpYyBMaWNlbnNlIC0gdiAxLjA8L2I+Cis8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5USEUgQUNDT01QQU5ZSU5HIFBST0dSQU0gSVMgUFJPVklERUQgVU5ERVIKK1RIRSBURVJNUyBPRiBUSElTIEVDTElQU0UgUFVCTElDIExJQ0VOU0UgKCZxdW90O0FHUkVFTUVOVCZxdW90OykuIEFOWSBVU0UsCitSRVBST0RVQ1RJT04gT1IgRElTVFJJQlVUSU9OIE9GIFRIRSBQUk9HUkFNIENPTlNUSVRVVEVTIFJFQ0lQSUVOVCdTIEFDQ0VQVEFOQ0UKK09GIFRISVMgQUdSRUVNRU5ULjwvc3Bhbj4gPC9wPgorCis8cD48Yj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+MS4gREVGSU5JVElPTlM8L3NwYW4+PC9iPiA8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4mcXVvdDtDb250cmlidXRpb24mcXVvdDsgbWVhbnM6PC9zcGFuPiA8L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmEpCitpbiB0aGUgY2FzZSBvZiB0aGUgaW5pdGlhbCBDb250cmlidXRvciwgdGhlIGluaXRpYWwgY29kZSBhbmQgZG9jdW1lbnRhdGlvbgorZGlzdHJpYnV0ZWQgdW5kZXIgdGhpcyBBZ3JlZW1lbnQsIGFuZDxiciBjbGVhcj1sZWZ0PgorYikgaW4gdGhlIGNhc2Ugb2YgZWFjaCBzdWJzZXF1ZW50IENvbnRyaWJ1dG9yOjwvc3Bhbj48L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmkpCitjaGFuZ2VzIHRvIHRoZSBQcm9ncmFtLCBhbmQ8L3NwYW4+PC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5paSkKK2FkZGl0aW9ucyB0byB0aGUgUHJvZ3JhbTs8L3NwYW4+PC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz53aGVyZQorc3VjaCBjaGFuZ2VzIGFuZC9vciBhZGRpdGlvbnMgdG8gdGhlIFByb2dyYW0gb3JpZ2luYXRlIGZyb20gYW5kIGFyZSBkaXN0cmlidXRlZAorYnkgdGhhdCBwYXJ0aWN1bGFyIENvbnRyaWJ1dG9yLiBBIENvbnRyaWJ1dGlvbiAnb3JpZ2luYXRlcycgZnJvbSBhIENvbnRyaWJ1dG9yCitpZiBpdCB3YXMgYWRkZWQgdG8gdGhlIFByb2dyYW0gYnkgc3VjaCBDb250cmlidXRvciBpdHNlbGYgb3IgYW55b25lIGFjdGluZyBvbgorc3VjaCBDb250cmlidXRvcidzIGJlaGFsZi4gQ29udHJpYnV0aW9ucyBkbyBub3QgaW5jbHVkZSBhZGRpdGlvbnMgdG8gdGhlCitQcm9ncmFtIHdoaWNoOiAoaSkgYXJlIHNlcGFyYXRlIG1vZHVsZXMgb2Ygc29mdHdhcmUgZGlzdHJpYnV0ZWQgaW4gY29uanVuY3Rpb24KK3dpdGggdGhlIFByb2dyYW0gdW5kZXIgdGhlaXIgb3duIGxpY2Vuc2UgYWdyZWVtZW50LCBhbmQgKGlpKSBhcmUgbm90IGRlcml2YXRpdmUKK3dvcmtzIG9mIHRoZSBQcm9ncmFtLiA8L3NwYW4+PC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+JnF1b3Q7Q29udHJpYnV0b3ImcXVvdDsgbWVhbnMgYW55IHBlcnNvbiBvcgorZW50aXR5IHRoYXQgZGlzdHJpYnV0ZXMgdGhlIFByb2dyYW0uPC9zcGFuPiA8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4mcXVvdDtMaWNlbnNlZCBQYXRlbnRzICZxdW90OyBtZWFuIHBhdGVudAorY2xhaW1zIGxpY2Vuc2FibGUgYnkgYSBDb250cmlidXRvciB3aGljaCBhcmUgbmVjZXNzYXJpbHkgaW5mcmluZ2VkIGJ5IHRoZSB1c2UKK29yIHNhbGUgb2YgaXRzIENvbnRyaWJ1dGlvbiBhbG9uZSBvciB3aGVuIGNvbWJpbmVkIHdpdGggdGhlIFByb2dyYW0uIDwvc3Bhbj48L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4mcXVvdDtQcm9ncmFtJnF1b3Q7IG1lYW5zIHRoZSBDb250cmlidXRpb25zCitkaXN0cmlidXRlZCBpbiBhY2NvcmRhbmNlIHdpdGggdGhpcyBBZ3JlZW1lbnQuPC9zcGFuPiA8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4mcXVvdDtSZWNpcGllbnQmcXVvdDsgbWVhbnMgYW55b25lIHdobworcmVjZWl2ZXMgdGhlIFByb2dyYW0gdW5kZXIgdGhpcyBBZ3JlZW1lbnQsIGluY2x1ZGluZyBhbGwgQ29udHJpYnV0b3JzLjwvc3Bhbj4gPC9wPgorCis8cD48Yj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+Mi4gR1JBTlQgT0YgUklHSFRTPC9zcGFuPjwvYj4gPC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5hKQorU3ViamVjdCB0byB0aGUgdGVybXMgb2YgdGhpcyBBZ3JlZW1lbnQsIGVhY2ggQ29udHJpYnV0b3IgaGVyZWJ5IGdyYW50cyBSZWNpcGllbnQKK2Egbm9uLWV4Y2x1c2l2ZSwgd29ybGR3aWRlLCByb3lhbHR5LWZyZWUgY29weXJpZ2h0IGxpY2Vuc2UgdG88c3Bhbgorc3R5bGU9J2NvbG9yOnJlZCc+IDwvc3Bhbj5yZXByb2R1Y2UsIHByZXBhcmUgZGVyaXZhdGl2ZSB3b3JrcyBvZiwgcHVibGljbHkKK2Rpc3BsYXksIHB1YmxpY2x5IHBlcmZvcm0sIGRpc3RyaWJ1dGUgYW5kIHN1YmxpY2Vuc2UgdGhlIENvbnRyaWJ1dGlvbiBvZiBzdWNoCitDb250cmlidXRvciwgaWYgYW55LCBhbmQgc3VjaCBkZXJpdmF0aXZlIHdvcmtzLCBpbiBzb3VyY2UgY29kZSBhbmQgb2JqZWN0IGNvZGUKK2Zvcm0uPC9zcGFuPjwvcD4KKworPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YikKK1N1YmplY3QgdG8gdGhlIHRlcm1zIG9mIHRoaXMgQWdyZWVtZW50LCBlYWNoIENvbnRyaWJ1dG9yIGhlcmVieSBncmFudHMKK1JlY2lwaWVudCBhIG5vbi1leGNsdXNpdmUsIHdvcmxkd2lkZSw8c3BhbiBzdHlsZT0nY29sb3I6Z3JlZW4nPiA8L3NwYW4+cm95YWx0eS1mcmVlCitwYXRlbnQgbGljZW5zZSB1bmRlciBMaWNlbnNlZCBQYXRlbnRzIHRvIG1ha2UsIHVzZSwgc2VsbCwgb2ZmZXIgdG8gc2VsbCwgaW1wb3J0CithbmQgb3RoZXJ3aXNlIHRyYW5zZmVyIHRoZSBDb250cmlidXRpb24gb2Ygc3VjaCBDb250cmlidXRvciwgaWYgYW55LCBpbiBzb3VyY2UKK2NvZGUgYW5kIG9iamVjdCBjb2RlIGZvcm0uIFRoaXMgcGF0ZW50IGxpY2Vuc2Ugc2hhbGwgYXBwbHkgdG8gdGhlIGNvbWJpbmF0aW9uCitvZiB0aGUgQ29udHJpYnV0aW9uIGFuZCB0aGUgUHJvZ3JhbSBpZiwgYXQgdGhlIHRpbWUgdGhlIENvbnRyaWJ1dGlvbiBpcyBhZGRlZAorYnkgdGhlIENvbnRyaWJ1dG9yLCBzdWNoIGFkZGl0aW9uIG9mIHRoZSBDb250cmlidXRpb24gY2F1c2VzIHN1Y2ggY29tYmluYXRpb24KK3RvIGJlIGNvdmVyZWQgYnkgdGhlIExpY2Vuc2VkIFBhdGVudHMuIFRoZSBwYXRlbnQgbGljZW5zZSBzaGFsbCBub3QgYXBwbHkgdG8KK2FueSBvdGhlciBjb21iaW5hdGlvbnMgd2hpY2ggaW5jbHVkZSB0aGUgQ29udHJpYnV0aW9uLiBObyBoYXJkd2FyZSBwZXIgc2UgaXMKK2xpY2Vuc2VkIGhlcmV1bmRlci4gPC9zcGFuPjwvcD4KKworPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YykKK1JlY2lwaWVudCB1bmRlcnN0YW5kcyB0aGF0IGFsdGhvdWdoIGVhY2ggQ29udHJpYnV0b3IgZ3JhbnRzIHRoZSBsaWNlbnNlcyB0byBpdHMKK0NvbnRyaWJ1dGlvbnMgc2V0IGZvcnRoIGhlcmVpbiwgbm8gYXNzdXJhbmNlcyBhcmUgcHJvdmlkZWQgYnkgYW55IENvbnRyaWJ1dG9yCit0aGF0IHRoZSBQcm9ncmFtIGRvZXMgbm90IGluZnJpbmdlIHRoZSBwYXRlbnQgb3Igb3RoZXIgaW50ZWxsZWN0dWFsIHByb3BlcnR5CityaWdodHMgb2YgYW55IG90aGVyIGVudGl0eS4gRWFjaCBDb250cmlidXRvciBkaXNjbGFpbXMgYW55IGxpYWJpbGl0eSB0byBSZWNpcGllbnQKK2ZvciBjbGFpbXMgYnJvdWdodCBieSBhbnkgb3RoZXIgZW50aXR5IGJhc2VkIG9uIGluZnJpbmdlbWVudCBvZiBpbnRlbGxlY3R1YWwKK3Byb3BlcnR5IHJpZ2h0cyBvciBvdGhlcndpc2UuIEFzIGEgY29uZGl0aW9uIHRvIGV4ZXJjaXNpbmcgdGhlIHJpZ2h0cyBhbmQKK2xpY2Vuc2VzIGdyYW50ZWQgaGVyZXVuZGVyLCBlYWNoIFJlY2lwaWVudCBoZXJlYnkgYXNzdW1lcyBzb2xlIHJlc3BvbnNpYmlsaXR5Cit0byBzZWN1cmUgYW55IG90aGVyIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgbmVlZGVkLCBpZiBhbnkuIEZvciBleGFtcGxlLAoraWYgYSB0aGlyZCBwYXJ0eSBwYXRlbnQgbGljZW5zZSBpcyByZXF1aXJlZCB0byBhbGxvdyBSZWNpcGllbnQgdG8gZGlzdHJpYnV0ZQordGhlIFByb2dyYW0sIGl0IGlzIFJlY2lwaWVudCdzIHJlc3BvbnNpYmlsaXR5IHRvIGFjcXVpcmUgdGhhdCBsaWNlbnNlIGJlZm9yZQorZGlzdHJpYnV0aW5nIHRoZSBQcm9ncmFtLjwvc3Bhbj48L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmQpCitFYWNoIENvbnRyaWJ1dG9yIHJlcHJlc2VudHMgdGhhdCB0byBpdHMga25vd2xlZGdlIGl0IGhhcyBzdWZmaWNpZW50IGNvcHlyaWdodAorcmlnaHRzIGluIGl0cyBDb250cmlidXRpb24sIGlmIGFueSwgdG8gZ3JhbnQgdGhlIGNvcHlyaWdodCBsaWNlbnNlIHNldCBmb3J0aCBpbgordGhpcyBBZ3JlZW1lbnQuIDwvc3Bhbj48L3A+CisKKzxwPjxiPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4zLiBSRVFVSVJFTUVOVFM8L3NwYW4+PC9iPiA8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5BIENvbnRyaWJ1dG9yIG1heSBjaG9vc2UgdG8gZGlzdHJpYnV0ZSB0aGUKK1Byb2dyYW0gaW4gb2JqZWN0IGNvZGUgZm9ybSB1bmRlciBpdHMgb3duIGxpY2Vuc2UgYWdyZWVtZW50LCBwcm92aWRlZCB0aGF0Ojwvc3Bhbj4KKzwvcD4KKworPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YSkKK2l0IGNvbXBsaWVzIHdpdGggdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoaXMgQWdyZWVtZW50OyBhbmQ8L3NwYW4+PC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5iKQoraXRzIGxpY2Vuc2UgYWdyZWVtZW50Ojwvc3Bhbj48L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmkpCitlZmZlY3RpdmVseSBkaXNjbGFpbXMgb24gYmVoYWxmIG9mIGFsbCBDb250cmlidXRvcnMgYWxsIHdhcnJhbnRpZXMgYW5kCitjb25kaXRpb25zLCBleHByZXNzIGFuZCBpbXBsaWVkLCBpbmNsdWRpbmcgd2FycmFudGllcyBvciBjb25kaXRpb25zIG9mIHRpdGxlCithbmQgbm9uLWluZnJpbmdlbWVudCwgYW5kIGltcGxpZWQgd2FycmFudGllcyBvciBjb25kaXRpb25zIG9mIG1lcmNoYW50YWJpbGl0eQorYW5kIGZpdG5lc3MgZm9yIGEgcGFydGljdWxhciBwdXJwb3NlOyA8L3NwYW4+PC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5paSkKK2VmZmVjdGl2ZWx5IGV4Y2x1ZGVzIG9uIGJlaGFsZiBvZiBhbGwgQ29udHJpYnV0b3JzIGFsbCBsaWFiaWxpdHkgZm9yIGRhbWFnZXMsCitpbmNsdWRpbmcgZGlyZWN0LCBpbmRpcmVjdCwgc3BlY2lhbCwgaW5jaWRlbnRhbCBhbmQgY29uc2VxdWVudGlhbCBkYW1hZ2VzLCBzdWNoCithcyBsb3N0IHByb2ZpdHM7IDwvc3Bhbj48L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmlpaSkKK3N0YXRlcyB0aGF0IGFueSBwcm92aXNpb25zIHdoaWNoIGRpZmZlciBmcm9tIHRoaXMgQWdyZWVtZW50IGFyZSBvZmZlcmVkIGJ5IHRoYXQKK0NvbnRyaWJ1dG9yIGFsb25lIGFuZCBub3QgYnkgYW55IG90aGVyIHBhcnR5OyBhbmQ8L3NwYW4+PC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5pdikKK3N0YXRlcyB0aGF0IHNvdXJjZSBjb2RlIGZvciB0aGUgUHJvZ3JhbSBpcyBhdmFpbGFibGUgZnJvbSBzdWNoIENvbnRyaWJ1dG9yLCBhbmQKK2luZm9ybXMgbGljZW5zZWVzIGhvdyB0byBvYnRhaW4gaXQgaW4gYSByZWFzb25hYmxlIG1hbm5lciBvbiBvciB0aHJvdWdoIGEKK21lZGl1bSBjdXN0b21hcmlseSB1c2VkIGZvciBzb2Z0d2FyZSBleGNoYW5nZS48c3BhbiBzdHlsZT0nY29sb3I6Ymx1ZSc+IDwvc3Bhbj48L3NwYW4+PC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+V2hlbiB0aGUgUHJvZ3JhbSBpcyBtYWRlIGF2YWlsYWJsZSBpbiBzb3VyY2UKK2NvZGUgZm9ybTo8L3NwYW4+IDwvcD4KKworPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YSkKK2l0IG11c3QgYmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhpcyBBZ3JlZW1lbnQ7IGFuZCA8L3NwYW4+PC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5iKSBhCitjb3B5IG9mIHRoaXMgQWdyZWVtZW50IG11c3QgYmUgaW5jbHVkZWQgd2l0aCBlYWNoIGNvcHkgb2YgdGhlIFByb2dyYW0uIDwvc3Bhbj48L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5Db250cmlidXRvcnMgbWF5IG5vdCByZW1vdmUgb3IgYWx0ZXIgYW55Citjb3B5cmlnaHQgbm90aWNlcyBjb250YWluZWQgd2l0aGluIHRoZSBQcm9ncmFtLiA8L3NwYW4+PC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+RWFjaCBDb250cmlidXRvciBtdXN0IGlkZW50aWZ5IGl0c2VsZiBhcyB0aGUKK29yaWdpbmF0b3Igb2YgaXRzIENvbnRyaWJ1dGlvbiwgaWYgYW55LCBpbiBhIG1hbm5lciB0aGF0IHJlYXNvbmFibHkgYWxsb3dzCitzdWJzZXF1ZW50IFJlY2lwaWVudHMgdG8gaWRlbnRpZnkgdGhlIG9yaWdpbmF0b3Igb2YgdGhlIENvbnRyaWJ1dGlvbi4gPC9zcGFuPjwvcD4KKworPHA+PGI+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPjQuIENPTU1FUkNJQUwgRElTVFJJQlVUSU9OPC9zcGFuPjwvYj4gPC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+Q29tbWVyY2lhbCBkaXN0cmlidXRvcnMgb2Ygc29mdHdhcmUgbWF5CithY2NlcHQgY2VydGFpbiByZXNwb25zaWJpbGl0aWVzIHdpdGggcmVzcGVjdCB0byBlbmQgdXNlcnMsIGJ1c2luZXNzIHBhcnRuZXJzCithbmQgdGhlIGxpa2UuIFdoaWxlIHRoaXMgbGljZW5zZSBpcyBpbnRlbmRlZCB0byBmYWNpbGl0YXRlIHRoZSBjb21tZXJjaWFsIHVzZQorb2YgdGhlIFByb2dyYW0sIHRoZSBDb250cmlidXRvciB3aG8gaW5jbHVkZXMgdGhlIFByb2dyYW0gaW4gYSBjb21tZXJjaWFsCitwcm9kdWN0IG9mZmVyaW5nIHNob3VsZCBkbyBzbyBpbiBhIG1hbm5lciB3aGljaCBkb2VzIG5vdCBjcmVhdGUgcG90ZW50aWFsCitsaWFiaWxpdHkgZm9yIG90aGVyIENvbnRyaWJ1dG9ycy4gVGhlcmVmb3JlLCBpZiBhIENvbnRyaWJ1dG9yIGluY2x1ZGVzIHRoZQorUHJvZ3JhbSBpbiBhIGNvbW1lcmNpYWwgcHJvZHVjdCBvZmZlcmluZywgc3VjaCBDb250cmlidXRvciAoJnF1b3Q7Q29tbWVyY2lhbAorQ29udHJpYnV0b3ImcXVvdDspIGhlcmVieSBhZ3JlZXMgdG8gZGVmZW5kIGFuZCBpbmRlbW5pZnkgZXZlcnkgb3RoZXIKK0NvbnRyaWJ1dG9yICgmcXVvdDtJbmRlbW5pZmllZCBDb250cmlidXRvciZxdW90OykgYWdhaW5zdCBhbnkgbG9zc2VzLCBkYW1hZ2VzIGFuZAorY29zdHMgKGNvbGxlY3RpdmVseSAmcXVvdDtMb3NzZXMmcXVvdDspIGFyaXNpbmcgZnJvbSBjbGFpbXMsIGxhd3N1aXRzIGFuZCBvdGhlcgorbGVnYWwgYWN0aW9ucyBicm91Z2h0IGJ5IGEgdGhpcmQgcGFydHkgYWdhaW5zdCB0aGUgSW5kZW1uaWZpZWQgQ29udHJpYnV0b3IgdG8KK3RoZSBleHRlbnQgY2F1c2VkIGJ5IHRoZSBhY3RzIG9yIG9taXNzaW9ucyBvZiBzdWNoIENvbW1lcmNpYWwgQ29udHJpYnV0b3IgaW4KK2Nvbm5lY3Rpb24gd2l0aCBpdHMgZGlzdHJpYnV0aW9uIG9mIHRoZSBQcm9ncmFtIGluIGEgY29tbWVyY2lhbCBwcm9kdWN0CitvZmZlcmluZy4gVGhlIG9ibGlnYXRpb25zIGluIHRoaXMgc2VjdGlvbiBkbyBub3QgYXBwbHkgdG8gYW55IGNsYWltcyBvciBMb3NzZXMKK3JlbGF0aW5nIHRvIGFueSBhY3R1YWwgb3IgYWxsZWdlZCBpbnRlbGxlY3R1YWwgcHJvcGVydHkgaW5mcmluZ2VtZW50LiBJbiBvcmRlcgordG8gcXVhbGlmeSwgYW4gSW5kZW1uaWZpZWQgQ29udHJpYnV0b3IgbXVzdDogYSkgcHJvbXB0bHkgbm90aWZ5IHRoZSBDb21tZXJjaWFsCitDb250cmlidXRvciBpbiB3cml0aW5nIG9mIHN1Y2ggY2xhaW0sIGFuZCBiKSBhbGxvdyB0aGUgQ29tbWVyY2lhbCBDb250cmlidXRvcgordG8gY29udHJvbCwgYW5kIGNvb3BlcmF0ZSB3aXRoIHRoZSBDb21tZXJjaWFsIENvbnRyaWJ1dG9yIGluLCB0aGUgZGVmZW5zZSBhbmQKK2FueSByZWxhdGVkIHNldHRsZW1lbnQgbmVnb3RpYXRpb25zLiBUaGUgSW5kZW1uaWZpZWQgQ29udHJpYnV0b3IgbWF5IHBhcnRpY2lwYXRlCitpbiBhbnkgc3VjaCBjbGFpbSBhdCBpdHMgb3duIGV4cGVuc2UuPC9zcGFuPiA8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5Gb3IgZXhhbXBsZSwgYSBDb250cmlidXRvciBtaWdodCBpbmNsdWRlIHRoZQorUHJvZ3JhbSBpbiBhIGNvbW1lcmNpYWwgcHJvZHVjdCBvZmZlcmluZywgUHJvZHVjdCBYLiBUaGF0IENvbnRyaWJ1dG9yIGlzIHRoZW4gYQorQ29tbWVyY2lhbCBDb250cmlidXRvci4gSWYgdGhhdCBDb21tZXJjaWFsIENvbnRyaWJ1dG9yIHRoZW4gbWFrZXMgcGVyZm9ybWFuY2UKK2NsYWltcywgb3Igb2ZmZXJzIHdhcnJhbnRpZXMgcmVsYXRlZCB0byBQcm9kdWN0IFgsIHRob3NlIHBlcmZvcm1hbmNlIGNsYWltcyBhbmQKK3dhcnJhbnRpZXMgYXJlIHN1Y2ggQ29tbWVyY2lhbCBDb250cmlidXRvcidzIHJlc3BvbnNpYmlsaXR5IGFsb25lLiBVbmRlciB0aGlzCitzZWN0aW9uLCB0aGUgQ29tbWVyY2lhbCBDb250cmlidXRvciB3b3VsZCBoYXZlIHRvIGRlZmVuZCBjbGFpbXMgYWdhaW5zdCB0aGUKK290aGVyIENvbnRyaWJ1dG9ycyByZWxhdGVkIHRvIHRob3NlIHBlcmZvcm1hbmNlIGNsYWltcyBhbmQgd2FycmFudGllcywgYW5kIGlmIGEKK2NvdXJ0IHJlcXVpcmVzIGFueSBvdGhlciBDb250cmlidXRvciB0byBwYXkgYW55IGRhbWFnZXMgYXMgYSByZXN1bHQsIHRoZQorQ29tbWVyY2lhbCBDb250cmlidXRvciBtdXN0IHBheSB0aG9zZSBkYW1hZ2VzLjwvc3Bhbj4gPC9wPgorCis8cD48Yj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+NS4gTk8gV0FSUkFOVFk8L3NwYW4+PC9iPiA8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5FWENFUFQgQVMgRVhQUkVTU0xZIFNFVCBGT1JUSCBJTiBUSElTCitBR1JFRU1FTlQsIFRIRSBQUk9HUkFNIElTIFBST1ZJREVEIE9OIEFOICZxdW90O0FTIElTJnF1b3Q7IEJBU0lTLCBXSVRIT1VUCitXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIEVJVEhFUiBFWFBSRVNTIE9SIElNUExJRUQgSU5DTFVESU5HLAorV0lUSE9VVCBMSU1JVEFUSU9OLCBBTlkgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIFRJVExFLCBOT04tSU5GUklOR0VNRU5ULAorTUVSQ0hBTlRBQklMSVRZIE9SIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBFYWNoIFJlY2lwaWVudCBpcyBzb2xlbHkKK3Jlc3BvbnNpYmxlIGZvciBkZXRlcm1pbmluZyB0aGUgYXBwcm9wcmlhdGVuZXNzIG9mIHVzaW5nIGFuZCBkaXN0cmlidXRpbmcgdGhlCitQcm9ncmFtIGFuZCBhc3N1bWVzIGFsbCByaXNrcyBhc3NvY2lhdGVkIHdpdGggaXRzIGV4ZXJjaXNlIG9mIHJpZ2h0cyB1bmRlciB0aGlzCitBZ3JlZW1lbnQgLCBpbmNsdWRpbmcgYnV0IG5vdCBsaW1pdGVkIHRvIHRoZSByaXNrcyBhbmQgY29zdHMgb2YgcHJvZ3JhbSBlcnJvcnMsCitjb21wbGlhbmNlIHdpdGggYXBwbGljYWJsZSBsYXdzLCBkYW1hZ2UgdG8gb3IgbG9zcyBvZiBkYXRhLCBwcm9ncmFtcyBvcgorZXF1aXBtZW50LCBhbmQgdW5hdmFpbGFiaWxpdHkgb3IgaW50ZXJydXB0aW9uIG9mIG9wZXJhdGlvbnMuIDwvc3Bhbj48L3A+CisKKzxwPjxiPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz42LiBESVNDTEFJTUVSIE9GIExJQUJJTElUWTwvc3Bhbj48L2I+IDwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkVYQ0VQVCBBUyBFWFBSRVNTTFkgU0VUIEZPUlRIIElOIFRISVMKK0FHUkVFTUVOVCwgTkVJVEhFUiBSRUNJUElFTlQgTk9SIEFOWSBDT05UUklCVVRPUlMgU0hBTEwgSEFWRSBBTlkgTElBQklMSVRZIEZPUgorQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisoSU5DTFVESU5HIFdJVEhPVVQgTElNSVRBVElPTiBMT1NUIFBST0ZJVFMpLCBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcKK05FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT1IgRElTVFJJQlVUSU9OIE9GCitUSEUgUFJPR1JBTSBPUiBUSEUgRVhFUkNJU0UgT0YgQU5ZIFJJR0hUUyBHUkFOVEVEIEhFUkVVTkRFUiwgRVZFTiBJRiBBRFZJU0VEIE9GCitUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLjwvc3Bhbj4gPC9wPgorCis8cD48Yj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+Ny4gR0VORVJBTDwvc3Bhbj48L2I+IDwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPklmIGFueSBwcm92aXNpb24gb2YgdGhpcyBBZ3JlZW1lbnQgaXMgaW52YWxpZAorb3IgdW5lbmZvcmNlYWJsZSB1bmRlciBhcHBsaWNhYmxlIGxhdywgaXQgc2hhbGwgbm90IGFmZmVjdCB0aGUgdmFsaWRpdHkgb3IKK2VuZm9yY2VhYmlsaXR5IG9mIHRoZSByZW1haW5kZXIgb2YgdGhlIHRlcm1zIG9mIHRoaXMgQWdyZWVtZW50LCBhbmQgd2l0aG91dAorZnVydGhlciBhY3Rpb24gYnkgdGhlIHBhcnRpZXMgaGVyZXRvLCBzdWNoIHByb3Zpc2lvbiBzaGFsbCBiZSByZWZvcm1lZCB0byB0aGUKK21pbmltdW0gZXh0ZW50IG5lY2Vzc2FyeSB0byBtYWtlIHN1Y2ggcHJvdmlzaW9uIHZhbGlkIGFuZCBlbmZvcmNlYWJsZS48L3NwYW4+IDwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPklmIFJlY2lwaWVudCBpbnN0aXR1dGVzIHBhdGVudCBsaXRpZ2F0aW9uCithZ2FpbnN0IGFueSBlbnRpdHkgKGluY2x1ZGluZyBhIGNyb3NzLWNsYWltIG9yIGNvdW50ZXJjbGFpbSBpbiBhIGxhd3N1aXQpCithbGxlZ2luZyB0aGF0IHRoZSBQcm9ncmFtIGl0c2VsZiAoZXhjbHVkaW5nIGNvbWJpbmF0aW9ucyBvZiB0aGUgUHJvZ3JhbSB3aXRoCitvdGhlciBzb2Z0d2FyZSBvciBoYXJkd2FyZSkgaW5mcmluZ2VzIHN1Y2ggUmVjaXBpZW50J3MgcGF0ZW50KHMpLCB0aGVuIHN1Y2gKK1JlY2lwaWVudCdzIHJpZ2h0cyBncmFudGVkIHVuZGVyIFNlY3Rpb24gMihiKSBzaGFsbCB0ZXJtaW5hdGUgYXMgb2YgdGhlIGRhdGUKK3N1Y2ggbGl0aWdhdGlvbiBpcyBmaWxlZC4gPC9zcGFuPjwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkFsbCBSZWNpcGllbnQncyByaWdodHMgdW5kZXIgdGhpcyBBZ3JlZW1lbnQKK3NoYWxsIHRlcm1pbmF0ZSBpZiBpdCBmYWlscyB0byBjb21wbHkgd2l0aCBhbnkgb2YgdGhlIG1hdGVyaWFsIHRlcm1zIG9yCitjb25kaXRpb25zIG9mIHRoaXMgQWdyZWVtZW50IGFuZCBkb2VzIG5vdCBjdXJlIHN1Y2ggZmFpbHVyZSBpbiBhIHJlYXNvbmFibGUKK3BlcmlvZCBvZiB0aW1lIGFmdGVyIGJlY29taW5nIGF3YXJlIG9mIHN1Y2ggbm9uY29tcGxpYW5jZS4gSWYgYWxsIFJlY2lwaWVudCdzCityaWdodHMgdW5kZXIgdGhpcyBBZ3JlZW1lbnQgdGVybWluYXRlLCBSZWNpcGllbnQgYWdyZWVzIHRvIGNlYXNlIHVzZSBhbmQKK2Rpc3RyaWJ1dGlvbiBvZiB0aGUgUHJvZ3JhbSBhcyBzb29uIGFzIHJlYXNvbmFibHkgcHJhY3RpY2FibGUuIEhvd2V2ZXIsCitSZWNpcGllbnQncyBvYmxpZ2F0aW9ucyB1bmRlciB0aGlzIEFncmVlbWVudCBhbmQgYW55IGxpY2Vuc2VzIGdyYW50ZWQgYnkKK1JlY2lwaWVudCByZWxhdGluZyB0byB0aGUgUHJvZ3JhbSBzaGFsbCBjb250aW51ZSBhbmQgc3Vydml2ZS4gPC9zcGFuPjwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkV2ZXJ5b25lIGlzIHBlcm1pdHRlZCB0byBjb3B5IGFuZCBkaXN0cmlidXRlCitjb3BpZXMgb2YgdGhpcyBBZ3JlZW1lbnQsIGJ1dCBpbiBvcmRlciB0byBhdm9pZCBpbmNvbnNpc3RlbmN5IHRoZSBBZ3JlZW1lbnQgaXMKK2NvcHlyaWdodGVkIGFuZCBtYXkgb25seSBiZSBtb2RpZmllZCBpbiB0aGUgZm9sbG93aW5nIG1hbm5lci4gVGhlIEFncmVlbWVudAorU3Rld2FyZCByZXNlcnZlcyB0aGUgcmlnaHQgdG8gcHVibGlzaCBuZXcgdmVyc2lvbnMgKGluY2x1ZGluZyByZXZpc2lvbnMpIG9mCit0aGlzIEFncmVlbWVudCBmcm9tIHRpbWUgdG8gdGltZS4gTm8gb25lIG90aGVyIHRoYW4gdGhlIEFncmVlbWVudCBTdGV3YXJkIGhhcwordGhlIHJpZ2h0IHRvIG1vZGlmeSB0aGlzIEFncmVlbWVudC4gVGhlIEVjbGlwc2UgRm91bmRhdGlvbiBpcyB0aGUgaW5pdGlhbAorQWdyZWVtZW50IFN0ZXdhcmQuIFRoZSBFY2xpcHNlIEZvdW5kYXRpb24gbWF5IGFzc2lnbiB0aGUgcmVzcG9uc2liaWxpdHkgdG8KK3NlcnZlIGFzIHRoZSBBZ3JlZW1lbnQgU3Rld2FyZCB0byBhIHN1aXRhYmxlIHNlcGFyYXRlIGVudGl0eS4gRWFjaCBuZXcgdmVyc2lvbgorb2YgdGhlIEFncmVlbWVudCB3aWxsIGJlIGdpdmVuIGEgZGlzdGluZ3Vpc2hpbmcgdmVyc2lvbiBudW1iZXIuIFRoZSBQcm9ncmFtCisoaW5jbHVkaW5nIENvbnRyaWJ1dGlvbnMpIG1heSBhbHdheXMgYmUgZGlzdHJpYnV0ZWQgc3ViamVjdCB0byB0aGUgdmVyc2lvbiBvZgordGhlIEFncmVlbWVudCB1bmRlciB3aGljaCBpdCB3YXMgcmVjZWl2ZWQuIEluIGFkZGl0aW9uLCBhZnRlciBhIG5ldyB2ZXJzaW9uIG9mCit0aGUgQWdyZWVtZW50IGlzIHB1Ymxpc2hlZCwgQ29udHJpYnV0b3IgbWF5IGVsZWN0IHRvIGRpc3RyaWJ1dGUgdGhlIFByb2dyYW0KKyhpbmNsdWRpbmcgaXRzIENvbnRyaWJ1dGlvbnMpIHVuZGVyIHRoZSBuZXcgdmVyc2lvbi4gRXhjZXB0IGFzIGV4cHJlc3NseSBzdGF0ZWQKK2luIFNlY3Rpb25zIDIoYSkgYW5kIDIoYikgYWJvdmUsIFJlY2lwaWVudCByZWNlaXZlcyBubyByaWdodHMgb3IgbGljZW5zZXMgdG8KK3RoZSBpbnRlbGxlY3R1YWwgcHJvcGVydHkgb2YgYW55IENvbnRyaWJ1dG9yIHVuZGVyIHRoaXMgQWdyZWVtZW50LCB3aGV0aGVyCitleHByZXNzbHksIGJ5IGltcGxpY2F0aW9uLCBlc3RvcHBlbCBvciBvdGhlcndpc2UuIEFsbCByaWdodHMgaW4gdGhlIFByb2dyYW0gbm90CitleHByZXNzbHkgZ3JhbnRlZCB1bmRlciB0aGlzIEFncmVlbWVudCBhcmUgcmVzZXJ2ZWQuPC9zcGFuPiA8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5UaGlzIEFncmVlbWVudCBpcyBnb3Zlcm5lZCBieSB0aGUgbGF3cyBvZiB0aGUKK1N0YXRlIG9mIE5ldyBZb3JrIGFuZCB0aGUgaW50ZWxsZWN0dWFsIHByb3BlcnR5IGxhd3Mgb2YgdGhlIFVuaXRlZCBTdGF0ZXMgb2YKK0FtZXJpY2EuIE5vIHBhcnR5IHRvIHRoaXMgQWdyZWVtZW50IHdpbGwgYnJpbmcgYSBsZWdhbCBhY3Rpb24gdW5kZXIgdGhpcworQWdyZWVtZW50IG1vcmUgdGhhbiBvbmUgeWVhciBhZnRlciB0aGUgY2F1c2Ugb2YgYWN0aW9uIGFyb3NlLiBFYWNoIHBhcnR5IHdhaXZlcworaXRzIHJpZ2h0cyB0byBhIGp1cnkgdHJpYWwgaW4gYW55IHJlc3VsdGluZyBsaXRpZ2F0aW9uLjwvc3Bhbj4gPC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWw+PCFbaWYgIXN1cHBvcnRFbXB0eVBhcmFzXT4mbmJzcDs8IVtlbmRpZl0+PG86cD48L286cD48L3A+CisKKzwvZGl2PgorCis8L2JvZHk+CisKKzwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC9jb25jZXB0cy9leHRlbnNpYmlsaXR5Lmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC9jb25jZXB0cy9leHRlbnNpYmlsaXR5Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjZiYzFjOQotLS0gL2Rldi9udWxsCisrKyBiL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2NvbmNlcHRzL2V4dGVuc2liaWxpdHkuaHRtbApAQCAtMCwwICsxLDIwIEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wIFRyYW5zaXRpb25hbC8vRU4iPgorCis8aHRtbD4KKzxoZWFkPgorCTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PWlzby04ODU5LTEiPgorCTx0aXRsZT5TVEVNIENvbmNlcHRzPC90aXRsZT4KKzwvaGVhZD4KKworPGJvZHk+Cis8aDI+RXh0ZW5zaWJpbGl0eTwvaDI+Cis8cD4KK1NURU0gd2FzIGRlc2lnbmVkIGZyb20gdGhlIHZlcnkgYmVnaW5uaW5nIHRvIGJlIGVhc2lseSBleHRlbmRlZC4gIFRoaXMgbWVhbnMKK3RoYXQgaXQgaXMgcG9zc2libGUgdG8gYWRkIG5ldyBkYXRhIGFuZCBjb21wdWF0YXRpb25hbCBjb21wb25lbnRzIHRvIFNURU0KK2FuZCB1c2UgdGhlbSBpbiBuZXcgbW9kZWxpbmcgYXBwcm9hY2hlcyBub3QgZXhwbGljaXRseSBwcm92aWRlZCBpbiB0aGUgCitiYXNlIGNvbmZpZ3VyYXRpb24gb2YgdGhlIHN5c3RlbS4gIFRoZSBjaG9pY2Ugb2YgRWNsaXBzZSBhcyB0aGUgaW1wbGVtZW50YXRpb24gCitmcmFtZXdvcmsgYWxsb3dzIFNURU0gdG8gbGV2ZXJhZ2UgdGhlIGZyYW1ld29yaydzIHNvZnR3YXJlIGNvbXBvbmVudCBhcmNoaXRlY3R1cmUgdG8KK2ZhY2lsbGl0YXRlIHRoaXMuICAKKzwvcD4KKzwvYm9keT4KKzwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC9jb25jZXB0cy9pbWcvU2NlbmFyaW9Db21wb3NpdGlvbi5qcGcgYi9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC9jb25jZXB0cy9pbWcvU2NlbmFyaW9Db21wb3NpdGlvbi5qcGcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzdlMzgwMgotLS0gL2Rldi9udWxsCisrKyBiL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2NvbmNlcHRzL2ltZy9TY2VuYXJpb0NvbXBvc2l0aW9uLmpwZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC9jb25jZXB0cy9tb2RlbGluZ2ZyYW1ld29yay5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvY29uY2VwdHMvbW9kZWxpbmdmcmFtZXdvcmsuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43OTg5NWJhCi0tLSAvZGV2L251bGwKKysrIGIvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvY29uY2VwdHMvbW9kZWxpbmdmcmFtZXdvcmsuaHRtbApAQCAtMCwwICsxLDQxOCBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMCBUcmFuc2l0aW9uYWwvL0VOIj4KKworPGh0bWw+Cis8aGVhZD4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PWlzby04ODU5LTEiPgorPHRpdGxlPlNURU0gQ29uY2VwdHM8L3RpdGxlPgorPC9oZWFkPgorCis8Ym9keT4KKworPGgyPlRoZSBTVEVNIE1vZGVsaW5nIEZyYW1ld29yazwvaDI+Cis8cD5BdCBpdHMgY29yZSBTVEVNIGlzIGEgZGlzY3JldGUgZXZlbnQgc2ltdWxhdGlvbiBzeXN0ZW0uIEl0CitiZWdpbnMgd2l0aCBhbiBpbml0aWFsICJzaW11bGF0aW9uIHN0YXRlIiBhbmQgdGhlbiBwcm9jZWVkcyBpbiBzdGVwLXdpc2UKK2Zhc2hpb24gdG8gZGV0ZXJtaW5lIHRoZSBuZXh0IHN0YXRlIG9mIHRoZSBTaW11bGF0aW9uIGFzIGEgZnVuY3Rpb24gb2YKK3RoZSBjdXJyZW50IHN0YXRlIGFuZCBhIHBhcmFtZXRlciB0aGF0IHNwZWNpZmllcyB0aGUgY3VycmVudCAidGltZSIuIEl0Cit1c2VzIGEgImdyYXBoIiB0byByZXByZXNlbnQgdGhlIHN0YXRlIG9mIHRoZSBTaW11bGF0aW9uIGF0IGVhY2ggb2YgaXRzCitzdGVwcy48L3A+Cis8cD5BIGdyYXBoIGlzIGEgc2ltcGxlLCBidXQgcG93ZXJmdWwsIG1hdGhlbWF0aWNhbCBhYnN0cmFjdGlvbiBmb3IKK3JlcHJlc2VudGluZyAiZW50aXRpZXMiIChpLmUuLCB0aGluZ3MgaW4gdGhlIHdvcmxkKSBhbmQgdGhlaXIKK3JlbGF0aW9uc2hpcHMuIE1vcmUgZm9ybWFsbHksIGEgZ3JhcGggaXMgYSBzZXQgb2YgIm5vZGVzIiwgImVkZ2VzIiBhbmQKKyJsYWJlbHMiLCB3aGVyZSBOb2RlcyBnZW5lcmFsbHkgY29ycmVzcG9uZCB0byBlbnRpdGllcyBhbmQgZWRnZXMgbGluawordHdvIG5vZGVzIGFuZCByZXByZXNlbnQgc29tZSByZWxhdGlvbnNoaXAgYmV0d2VlbiB0aGVtLiBMYWJlbHMgYXJlCithdHRhY2hlZCB0byBlaXRoZXIgYSBub2RlIG9yIGFuIGVkZ2UgYW5kIHJlcHJlc2VudCBzb21lIGFzcGVjdCBvZiB0aGVpcgoraG9zdCAobGlrZSB0aGUgbmFtZSBvZiB0aGUgZW50aXR5LCBvciB0aGUgbmFtZSBvZiB0aGUgcmVsYXRpb25zaGlwKS4KK0VhY2ggbm9kZSBtYXkgaGF2ZSBtb3JlIHRoYW4gb25lIGxhYmVsLCBidXQgZWFjaCBlZGdlIHdpbGwgb25seSBoYXZlCitvbmUuPC9wPgorCis8aDQgaWQ9Y2Fub25pY2FsZ3JhcGg+VGhlIENhbm9uaWNhbCBHcmFwaDwvaDQ+Cis8cD4KK0luIFNURU0sIG5vZGVzIHR5cGljYWxseSByZXByZXNlbnQgZ2VvZ3JhcGhpYyByZWdpb25zIHdoaWxlIGVkZ2VzIAorcmVwcmVzZW50IHJlbGF0aW9uc2hpcHMgYmV0d2VlbiBnZW9ncmFwaGljIHJlZ2lvbnMuIFRoZXJlIG1heSBiZSAKK2FueSBudW1iZXIgb2YgZWRnZXMgYmV0d2VlbiBhbnkgdHdvIG5vZGVzLCBhcyB0aGVyZSBtYXkgYmUgYW55IG51bWJlciAKK29mIHJlbGF0aW9uc2hpcHMgYmV0d2VlbiBhbnkgdHdvIGdlb2dyYXBoaWMgbG9jYXRpb25zLiBBIGxhYmVsIG9uIGEgbm9kZSAKK21pZ2h0IHJlcHJlc2VudCB0aGUgcGh5c2ljYWwgYXJlYSBvZiB0aGUgY29ycmVzcG9uZGluZyBnZW9ncmFwaGljIGxvY2F0aW9uLCAKK3RoZSBudW1iZXIgb2YgcG9wdWxhdGlvbiBtZW1iZXJzIG9mIGEgcGFydGljdWxhciB0eXBlIHRoYXQgbGl2ZSB0aGVyZSwgCitvciBhIG1hdGhlbWF0aWNhbCByZXByZXNlbnRhdGlvbiBvZiB0aGUgc3RhdGUgb2YgYSBwYXJ0aWN1bGFyIGRpc2Vhc2UgYXQgCit0aGF0IGxvY2F0aW9uLiBBbiBlZGdlIGJldHdlZW4gdHdvIG5vZGVzIG1pZ2h0IHJlcHJlc2VudCBhIHJlbGF0aW9uc2hpcCAKK3N1Y2ggYXMgdGhlIHNoYXJpbmcgb2YgYSBjb21tb24gYm9yZGVyIChpLmUuLCB0d28gcmVnaW9ucyBhcmUgcGh5c2ljYWxseSAKK2FkamFjZW50IGFuZCBjb3VsZCBlYXNpbHkgZXhjaGFuZ2UgcG9wdWxhdGlvbiBtZW1iZXJzKTsgYSBkaWZmZXJlbnQgZWRnZSAKK2JldHdlZW4gdGhlIHNhbWUgdHdvIG5vZGVzIG1pZ2h0IHJlcHJlc2VudCBhIHJvYWQgdGhhdCBjb25uZWN0cyB0aGUgdHdvIAorbG9jYXRpb25zLiAgSW4gdGhlIGZpcnN0IGNhc2UsIHRoZSBsYWJlbCBmb3IgYSBib3JkZXIgZWRnZSBtaWdodCByZWNvcmQgCit0aGUgbGVuZ3RoIG9mIHRoZSBib3JkZXIgYmV0d2VlbiB0aGUgdHdvIGxvY2F0aW9uczsgaW4gdGhlIGxhdGVyIGNhc2UsIAordGhlIGxhYmVsIG1pZ2h0IGluZGljYXRlIHRoZSB0eXBlIG9mIHJvYWQgYW5kIGhvdyBtdWNoIHRyYWZmaWMgaXQgY2Fycmllcy4gCitDb21wbGV0ZWx5IGRpZmZlcmVudCBlZGdlcyBjb3VsZCBhbHNvIGV4aXN0LCBmb3IgaW5zdGFuY2Ugb25lcyB0aGF0IHJlcHJlc2VudCAKK3RoZSBmbGlnaHQgcGF0aCBvZiBtaWdyYXRvcnkgYmlyZHMuIFRoZSBncmFwaCB0aGF0IGluY2x1ZGVzIGFsbCBvZiB0aGUgbm9kZXMsIAorZWRnZXMgYW5kIGxhYmVscyBuZWNlc3NhcnkgdG8gcmVwcmVzZW50IHRoZSBzdGF0ZSBvZiB0aGUgc2ltdWxhdGlvbiBpcyBjYWxsZWQgCit0aGUgPGVtPmNhbm9uaWNhbCBncmFwaDwvZW0+LgorPC9wPgorPGg0IGlkPXNpbXVsYXRpb24+U2ltdWxhdGlvbjwvaDQ+Cis8cD4KK0EgPGVtPlNpbXVsYXRpb248L2VtPiBpbiBTVEVNIGlzIGNyZWF0ZWQgZnJvbSBhIAorPGEgaHJlZj0iI2Nhbm9uaWNhbGdyYXBoIj5jYW5vbmljYWwgZ3JhcGg8L2E+LiAgVGhlIHNwZWNpZmljYXRpb24gb2YgaG93Cit0byBjcmVhdGUgdGhlIGdyYXBoIGlzIHJlcHJlc2VudGVkIGJ5IGEgPGEgaHJlZj0iI3NjZW5hcmlvIj5TY2VuYXJpbzwvYT4KKyhkZWZpbmVkIGJlbG93KS4gIAorPHA+Cis8L3A+CitUaGUgZXhlY3V0aW9uIG9mIGEgU2ltdWxhdGlvbiBiZWdpbnMgd2l0aCBhbiA8ZW0+aW5pdGlhbGl6ZWQ8L2VtPgorY2Fub25pY2FsIGdyYXBoIGFuZCBhIHN0YXJ0aW5nIDxlbT50aW1lPC9lbT4uIFRoZSBmaXJzdCBzdGVwIGluIGEKK1NpbXVsYXRpb24gaXMgdG8gZGV0ZXJtaW5lIHRoZSBuZXh0IHBvaW50IGluIHRpbWUgdGhhdCB3aWxsIGJlIHVzZWQgdG8KK3VwZGF0ZSB0aGUgc3RhdGUgb2YgdGhlIDxhIGhyZWY9IiNjYW5vbmljYWxncmFwaCI+Y2Fub25pY2FsIGdyYXBoPC9hPi4gCitXaXRoIHRoaXMgdmFsdWUgZGV0ZXJtaW5lZCB0aGUgaW50ZXJuYWwgU1RFTSBTaW11bGF0aW9uICJlbmdpbmUiIGludm9rZXMsCitpbiBhIHZlcnkgc3BlY2lmaWMgb3JkZXIsIGEgc2V0IG9mIGNvbXB1dGF0aW9ucyBhc3NvY2lhdGVkIHdpdGggdGhlIAorPGEgaHJlZj0iI2Nhbm9uaWNhbGdyYXBoIj5jYW5vbmljYWwgZ3JhcGg8L2E+LiAgVGhlc2UKK2NvbXB1dGF0aW9ucyB0YWtlIHRoZSB0aW1lIHBvaW50IGFzIGlucHV0IGFuZCBjb21wdXRlIHRoZSAibmV4dCIgc3RhdGUKK29mIHRoZSBncmFwaCBhcyBpdCB3aWxsIGJlIGF0IHRoYXQgdGltZS4gV2hlbiB0aGVzZSBjb21wdXRhdGlvbnMgYXJlCitjb21wbGV0ZSwgdGhlIHN0YXRlIG9mIHRoZSBlbnRpcmUgZ3JhcGggaXMgY2hhbmdlZCB0byB0aGUgIm5leHQiIHZhbHVlCitqdXN0IGNvbXB1dGVkLiBUaGlzIHByb2Nlc3MgY29udGludWVzIHVudGlsIHN0b3BwZWQgYnkgdGhlIHVzZXIsIG9yLCBpZgorc3BlY2lmaWVkLCBhIHByZWRldGVybWluZWQgZW5kLXRpbWUgaXMgcmVhY2hlZC48L3A+CisKKworPGgzPlRoZSBTVEVNIENvbXBvc2l0aW9uYWwgTW9kZWxpbmcgRnJhbWV3b3JrPC9oMz4KKzxwPk9uZSBvZiB0aGUgbWFpbiBmZWF0dXJlcyBvZiBTVEVNLCBhbmQgdGhlIG9uZSB0aGF0IG1ha2VzIGl0IHN1Y2gKK2EgcG93ZXJmdWwgbW9kZWxpbmcgc3lzdGVtLCBpcyBpdHMgZnJhbWV3b3JrIGZvciBzcGVjaWZ5aW5nIHRoZSBmZWF0dXJlcworb2YgYSA8YSBocmVmPSIjc2ltdWxhdGlvbiI+U2ltdWxhdGlvbjwvYT4uIFRoaXMgZnJhbWV3b3JrIGFsbG93cyBhIAorPGEgaHJlZj0iI3NpbXVsYXRpb24iPlNpbXVsYXRpb248L2E+IHRvIGJlIGNvbXBvc2VkIGZyb20KK21hbnkgZGlmZmVyZW50IHJldXNhYmxlIGNvbXBvbmVudHMgdGhhdCBhcmUgY29tYmluZWQgdG8gZm9ybSB0aGUgCis8YSBocmVmPSIjc2ltdWxhdGlvbiI+U2ltdWxhdGlvbidzPC9hPgorPGEgaHJlZj0iI2Nhbm9uaWNhbGdyYXBoIj5jYW5vbmljYWwgZ3JhcGg8L2E+LCBjb21wdXRhdGlvbmFsIGVsZW1lbnRzCithbmQgc2VxdWVuY2Ugb2YgdGltZSBwb2ludHMuCis8L3A+Cis8cD5UaGlzIGFwcHJvYWNoIGlzIGV4dHJlbWVseSBmbGV4aWJsZSBhbmQgcG93ZXJmdWwuIFRoZSBjb21wb25lbnRzCitjYW4gYmUgZnJvbSBtYW55IGRpZmZlcmVudCBzb3VyY2VzIGFuZCBjYW4gYmUgZXhjaGFuZ2VkIGFtb25nIHVzZXJzLiBUaGUKK2NvbXBvbmVudHMgY2FuIGFsc28gYmUgY29tYmluZWQgdG8gY3JlYXRlIGxhcmdlciBzdHJ1Y3R1cmVzIHdoaWNoIHRoZW4KK2NhbiBiZWNvbWUgcmV1c2FibGUgY29tcG9uZW50cyB0aGVtc2VsdmVzLiBGb3IgaW5zdGFuY2UsIGl0IGlzIHBvc3NpYmxlCit0byBjcmVhdGUgYSBkZXRhaWxlZCBtb2RlbCBvZiBhIGNvdW50cnkgYW5kIHRoZW4gcmV1c2UgdGhhdCBtb2RlbCBhcyBhCitjb21wb25lbnQgaW4gbWFueSBkaWZmZXJlbnQgPGEgaHJlZj0iI3NpbXVsYXRpb24iPlNpbXVsYXRpb25zPC9hPi4gU2ltaWxhcmx5LCBjb21wdXRhdGlvbmFsCithc3BlY3RzIG9mIGEgPGEgaHJlZj0iI3NpbXVsYXRpb24iPlNpbXVsYXRpb248L2E+IHN1Y2ggYXMgYSBzcGVjaWFsaXplZCBkaXNlYXNlIG1vZGVsIGNhbiBiZQorZGV2ZWxvcGVkIGJ5IGFuIGluZGl2aWR1YWwgcmVzZWFyY2hlciBhbmQgdGhlbiB1c2VkIGJ5IG1hbnkgb3RoZXJzIGluCit0aGVpciBtb2RlbHMuIFRoZSBhYmlsaXR5IG9mIFNURU0gdG8gY29tYmluZSBjb21wb25lbnRzIGZyb20gZGlmZmVyZW50Citzb3VyY2VzIG1ha2VzIGl0IHBvc3NpYmxlIHRvIGxldmVyYWdlIHRoZSB2YXJpZWQgZXhwZXJ0aXNlIG9mIGRpZmZlcmVudAorbW9kZWwgYnVpbGRlcnMgaW4gYSB3YXkgdGhhdCBoYXMgbmV2ZXIgYmVmb3JlIGJlZW4gcG9zc2libGUuPC9wPgorPHA+VG8gZm9zdGVyIHJldXNlIGFuZCBjb2xsYWJvcmF0aW9uLCBlYWNoIGNvbXBvbmVudCBpbiB0aGUKK2ZyYW1ld29yayBoYXMgYSBzZXQgb2YgPGEgaHJlZj0iaHR0cDovL2R1YmxpbmNvcmUub3JnLyI+RHVibGluIENvcmU8L2E+CittZXRhZGF0YSBhc3NvY2lhdGVkIHdpdGggaXQuIFRoaXMgbWV0YWRhdGEgcmVjb3JkcyBpbXBvcnRhbnQgYXR0cmlidXRlcworb2YgdGhlIGNvbXBvbmVudCBzdWNoIGFzIGl0cyB0aXRsZSwgZGVzY3JpcHRpdmUgdGV4dCwgdGhlIG5hbWUgb2YgdGhlCitvcmlnaW5hbCBjcmVhdG9yLCBhbnkgbGl0ZXJhdHVyZSBjaXRhdGlvbnMgYXNzb2NpYXRlZCB3aXRoIGl0IChlLmcuLCBhCitwYXBlciBkZXNjcmliaW5nIGEgcGFydGljdWxhciBkaXNlYXNlIG1vZGVsKSBhbmQgbWFueSBvdGhlcnMgc3VjaCBhcworaW1wb3J0YW50IGRhdGVzLCBzcGF0aWFsIGNoYXJhY3RlcmlzdGljcy4gVGhpcyBpbmZvcm1hdGlvbiBhbGxvd3MKK21vZGVsZXJzIHRvIGtub3cgZXhhY3RseSB3aGF0IHRoZXkgYXJlIHVzaW5nIGluIHRoZWlyIG1vZGVscy48L3A+CisKKworPGgzPlNURU0gQ29tcG9uZW50czwvaDM+Cis8cD5UaGUgU1RFTSBjb21wb3NpdGlvbmFsIG1vZGVsaW5nIGZyYW1ld29yayBjb25zaXN0cyBvZiBlaWdodAorY29tcG9uZW50cyB0aGF0IGNvbnN0aXR1dGUgdGhlICJidWlsZGluZyBibG9ja3MiIG9mIGFueSA8YSBocmVmPSIjc2ltdWxhdGlvbiI+U2ltdWxhdGlvbjwvYT4uCitUaGVzZSBhcmU6IDxlbT48YSBocmVmPSIjc2NlbmFyaW8iPlNjZW5hcmlvczwvYT48L2VtPiwgCis8ZW0+PGEgaHJlZj0iI3NlcXVlbmNlciI+U2VxdWVuY2VyczwvYT48L2VtPiwgPGVtPjxhIGhyZWY9IiNkZWNvcmF0b3IiPkRlY29yYXRvcnM8L2E+PC9lbT4sIAorPGVtPjxhIGhyZWY9IiNtb2RlbCI+TW9kZWxzPC9hPjwvZW0+LCA8ZW0+PGEgaHJlZj0iI2dyYXBoIj4gR3JhcGhzPC9hPjwvZW0+LAorPGVtPjxhIGhyZWY9IiNtb2RpZmllciI+IE1vZGlmaWVyczwvYT48L2VtPiwgPGVtPjxhIGhyZWY9IiN0cmlnZ2VyIj4gVHJpZ2dlcnM8L2E+PC9lbT4sIGFuZAorPGVtPjxhIGhyZWY9IiNwcmVkaWNhdGUiPiBQcmVkaWNhdGVzPC9hPjwvZW0+LiAgSW4gYWRkaXRpb24sIAorYSBzZXF1ZW5jZSBvZiByZWxhdGVkIDxhIGhyZWY9IiNzaW11bGF0aW9uIj5TaW11bGF0aW9uczwvYT4gY2FsbGVkIGEgPGEgaHJlZj0iI2JhdGNoIj5CYXRjaDwvYT4sIAorY2FuIGJlIGRlZmluZWQgdXNpbmcgY29tcG9uZW50cyBjYWxsZWQgYW4gPGVtPjxhIGhyZWY9IiNleHBlcmltZW50Ij5FeHBlcmltZW50PC9hPjwvZW0+IGFuZCAKKzxlbT48YSBocmVmPSIjbW9kaWZpZXIiPk1vZGlmaWVyPC9hPjwvZW0+LiA8L3A+CisKKzxoNCBpZD1zY2VuYXJpbz5TY2VuYXJpbzwvaDQ+Cis8cD5UaGUgbWFpbiBjb21wb25lbnQgb2YgYSA8YSBocmVmPSIjc2ltdWxhdGlvbiI+U2ltdWxhdGlvbjwvYT4gaXMgYSBTY2VuYXJpby4gV2hlbiBhCis8YSBocmVmPSIjc2ltdWxhdGlvbiI+U2ltdWxhdGlvbjwvYT4gaXMgcnVuIGluIFNURU0sIGl0IGlzIGFsd2F5cyBjcmVhdGVkIGZyb20gYSBTY2VuYXJpby4gQQorU2NlbmFyaW8gbG9naWNhbGx5IGNvbGxlY3RzIHRvZ2V0aGVyIHRocmVlIG90aGVyIHR5cGVzIG9mIGNvbXBvbmVudHMsIGEKK3NpbmdsZSA8YSBocmVmPSIjc2VxdWVuY2VyIj5TZXF1ZW5jZXI8L2E+LCBhIHNldCBvZiA8YSBocmVmPSIjZGVjb3JhdG9yIj4KK0RlY29yYXRvcnM8L2E+LCBhbmQgYSBzaW5nbGUgPGEgaHJlZj0iI21vZGVsIj4gTW9kZWw8L2E+LiBUb2dldGhlciwgdGhlc2UKK2NvbXBvbmVudHMgY2FuIGJlIHVzZWQgdG8gY3JlYXRlIGEgPGEgaHJlZj0iI3NpbXVsYXRpb24iPlNpbXVsYXRpb248L2E+LjwvcD4KKzwvcD4KKzxwPgorQSBTY2VuYXJpbyBjYW4gYmUgY3JlYXRlZCB1c2luZyB0aGUgCis8YSBocmVmPSIuLi9pbnRlcmZhY2Uvd2l6YXJkcy9zY2VuYXJpb3dpemFyZC5odG1sIj5TY2VuYXJpbyBXaXphcmQ8L2E+IGFuZCAKK2VkaXRlZCB1c2luZyB0aGUgPGEgaHJlZj0iLi4vaW50ZXJmYWNlL2VkaXRvcnMvc2NlbmFyaW9lZGl0b3IuaHRtbCI+U2NlbmFyaW8gRWRpdG9yPC9hPi4KKzwvcD4KKzxoNCBpZD1zZXF1ZW5jZXI+U2VxdWVuY2VyPC9oND4KKzxwPkEgU2VxdWVuY2VyIGlzIHRoZSBjb21wb25lbnQgb2YgYSA8YSBocmVmPSIjc2ltdWxhdGlvbiI+U2ltdWxhdGlvbjwvYT4gdGhhdCBkZXRlcm1pbmVzIHRoZQorc2VxdWVuY2Ugb2YgdGltZSB2YWx1ZXMgdGhhdCB3aWxsIGJlIHVzZWQgdG8gY29tcHV0ZSB0aGUgbmV4dCBzdGF0ZSBvZgordGhlIDxhIGhyZWY9IiNjYW5vbmljYWxncmFwaCI+Y2Fub25pY2FsIGdyYXBoPC9hPi4gSXQgbWF5IHByb2R1Y2UgdmFsdWVzCit0aGF0IGFyZSBhdCBmaXhlZCBpbnRlcnZhbHMgb2YgdGltZSwgb3IgaXQgbWF5IHZhcnkgdGhlIGR1cmF0aW9uIG9mIHRoZQoraW50ZXJ2YWxzIGJldHdlZW4gcG9pbnRzLiBUaGUgdmFsdWVzIGl0IGNyZWF0ZXMgYXJlIGluIHNpbXVsYXRlZCAiU1RFTQorVGltZSIsIGJ1dCB0aGVyZSBpcyBubyByZXN0cmljdGlvbiBwcmV2ZW50aW5nIHRoZSB2YWx1ZXMgZnJvbSByZWZsZWN0aW5nCisid2FsbCBjbG9jayIgdGltZS4gVGhpcyBjYW4gYmUgdXNlZnVsIGZvciAiU2ltdWxhdGlvbnMiIHRoYXQgaW5jb3Jwb3JhdGUKK2V4dGVybmFsICJyZWFsLXRpbWUiIGRhdGEgdmFsdWVzIGZyb20gZGF0YWJhc2VzIG9yIG90aGVyIHNvdXJjZXMgc3VjaCBhcword2VhdGhlciBvYnNlcnZhdGlvbnMuPC9wPgorPC9wPgorPHA+CitBIFNlcXVlbmNlciBjYW4gYmUgY3JlYXRlZCB1c2luZyB0aGUgCis8YSBocmVmPSIuLi9pbnRlcmZhY2Uvd2l6YXJkcy9zZXF1ZW50aWFsc2VxdWVuY2Vyd2l6YXJkLmh0bWwiPlNlcXVlbnRpYWwgU2VxdWVuY2VyIFdpemFyZDwvYT4gb3IgdGhlCis8YSBocmVmPSIuLi9pbnRlcmZhY2Uvd2l6YXJkcy9yZWFsdGltZXNlcXVlbmNlcndpemFyZC5odG1sIj5SZWFsLXRpbWUgU2VxdWVuY2VyIFdpemFyZDwvYT4KK2FuZCBlZGl0ZWQgdXNpbmcgdGhlIDxhIGhyZWY9Ii4uL2ludGVyZmFjZS9lZGl0b3JzL3NlcXVlbmNlcmVkaXRvci5odG1sIj5TZXF1ZW5jZXIgRWRpdG9yPC9hPi4KKzwvcD4KKzxoNCBpZD1kZWNvcmF0b3I+RGVjb3JhdG9yPC9oND4KKzxwPkEgRGVjb3JhdG9yIGlzIHRoZSBmcmFtZXdvcmsncyBjb21wdXRhdGlvbmFsIGNvbXBvbmVudC4gRXZlcnkKK0RlY29yYXRvciBjYW4gcGFydGljaXBhdGUgaW4gdGhlIGluaXRpYWxpemF0aW9uIG9mIHRoZSAKKzxhIGhyZWY9IiNjYW5vbmljYWxncmFwaCI+Y2Fub25pY2FsIGdyYXBoPC9hPiwgZm9yIGluc3RhbmNlIGJ5IHNldHRpbmcgdGhlCit2YWx1ZXMgb2YgZXhpc3RpbmcgbGFiZWxzIG9yIGFkZGluZyBhZGRpdGlvbmFsIG9uZXMgKGkuZS4sIHRoZXkKKyJkZWNvcmF0ZSIgdGhlIGdyYXBoKS4gQWxzbywgYXQgZWFjaCBzaW11bGF0aW9uIGN5Y2xlLCB0aGV5IGFyZQorcmVzcG9uc2libGUgZm9yIGRldGVybWluaW5nIHRoZSBuZXh0IHN0YXRlIG9mIHRoZSAKKzxhIGhyZWY9IiNjYW5vbmljYWxncmFwaCI+Y2Fub25pY2FsIGdyYXBoPC9hPiBieSBjb21wdXRpbmcgdGhlIHZhbHVlcyBvZgorbGFiZWxzIGFzIGEgZnVuY3Rpb24gb2YgdGhlIGN1cnJlbnQgPGEgaHJlZj0iI3NpbXVsYXRpb24iPlNpbXVsYXRpb248L2E+IAordGltZS4gSW4gYW4gZXBpZGVtaW9sb2dpY2FsIDxhIGhyZWY9IiNzaW11bGF0aW9uIj5TaW11bGF0aW9uPC9hPiwgYSAKK2Rpc2Vhc2UgbW9kZWwgd291bGQgYmUgaW1wbGVtZW50ZWQgYXMgYSBEZWNvcmF0b3IuIFRoZXJlIGlzIG5vIHJlc3RyaWN0aW9uIAorb24gd2hhdCBhIERlY29yYXRvciBjYW4gZG8sIGl0IGNhbiwgZm9yIGluc3RhbmNlLCBpc3N1ZSBhIHF1ZXJ5IHRvIGEgCitkYXRhYmFzZSBvciBpbnZva2UgYSB3ZWIgc2VydmljZS48L3A+CisKKzxoNCBpZD1tb2RlbD5Nb2RlbDwvaDQ+Cis8cD5BIE1vZGVsIGlzIHRoZSBjb21wb25lbnQgcmVzcG9uc2libGUgZm9yIHJlcHJlc2VudGluZyB0aGUKK2NvbnRlbnRzIG9mIHRoZSA8YSBocmVmPSIjY2Fub25pY2FsZ3JhcGgiPmNhbm9uaWNhbCBncmFwaDwvYT4gYW5kIGZvcgorY3JlYXRpbmcgYW4gaW5zdGFuY2Ugb2YgaXQgd2hlbiBhIDxhIGhyZWY9IiNzaW11bGF0aW9uIj5TaW11bGF0aW9uPC9hPiAKK2lzIHN0YXJ0ZWQgZnJvbSBhIDxhIGhyZWY9IiNzY2VuYXJpbyI+U2NlbmFyaW88L2E+LiBJdCBjb21iaW5lcyB3aXRoIAordGhlIGZpbmFsIGNvbXBvbmVudCBvZiB0aGUgZnJhbWV3b3JrIGNhbGxlZCBhIDxhIGhyZWY9IiNncmFwaCI+R3JhcGg8L2E+IAordG8gZm9ybSBhIHRyZWUuIFRoaXMgdHJlZSBpcyBhIGhpZXJhcmNoaWNhbCBvcmdhbml6YXRpb24gb2YgdGhlIGRpZmZlcmVudAorY29udHJpYnV0aW9ucyB0byB0aGUgPGEgaHJlZj0iI2Nhbm9uaWNhbGdyYXBoIj5jYW5vbmljYWwgZ3JhcGg8L2E+LgorTW9kZWwgaW5zdGFuY2VzIGZvcm0gdGhlIHJvb3QgYW5kIGludGVyaW9yIG5vZGVzIG9mIHRoZSB0cmVlIHdoaWxlIAorPGEgaHJlZj0iI2dyYXBoIj4gR3JhcGg8L2E+IGluc3RhbmNlcyBmb3JtIHRoZSBsZWF2ZXMuIFRoZSBNb2RlbAorcmVmZXJlbmNlZCBieSBhIDxhIGhyZWY9IiNzY2VuYXJpbyI+U2NlbmFyaW88L2E+IGlzIHRoZSByb290IG9mIHN1Y2ggYQordHJlZS48L3A+Cis8cD5FYWNoIE1vZGVsIGNvbnRhaW5zIHRocmVlIGRpZmZlcmVudCBjb2xsZWN0aW9ucy4gVGhlIGZpcnN0IGlzIGEKK2NvbGxlY3Rpb24gb2YgInN1Yi1Nb2RlbCIgaW5zdGFuY2VzLCBlYWNoIG9mIHdoaWNoIGlzIGVzc2VudGlhbGx5IHRoZQorcm9vdCBvZiBhIHN1Yi10cmVlLiBUaGUgc2Vjb25kIGlzIGEgY29sbGVjdGlvbiBvZiAKKzxhIGhyZWY9IiNncmFwaCI+IEdyYXBoPC9hPiBpbnN0YW5jZXMsIGFuZCB0aGUgdGhpcmQgaXMgYW5vdGhlciBjb2xsZWN0aW9uCitvZiA8YSBocmVmPSIjZGVjb3JhdG9yIj4gRGVjb3JhdG9yczwvYT4uPC9wPgorPC9wPgorPHA+CitBIE1vZGVsIGNhbiBiZSBjcmVhdGVkIHVzaW5nIHRoZSAKKzxhIGhyZWY9Ii4uL2ludGVyZmFjZS93aXphcmRzL21vZGVsd2l6YXJkLmh0bWwiPk1vZGVsIFdpemFyZDwvYT4gYW5kIAorZWRpdGVkIHVzaW5nIHRoZSA8YSBocmVmPSIuLi9pbnRlcmZhY2UvZWRpdG9ycy9tb2RlbGVkaXRvci5odG1sIj5Nb2RlbCBFZGl0b3I8L2E+LgorPC9wPgorPGg0IGlkPWdyYXBoPkdyYXBoPC9oND4KKzxwPkdyYXBoIGluc3RhbmNlcyBjb250YWluIHRoZSBhY3R1YWwgY29tcG9uZW50cywgTm9kZXMsIEVkZ2VzLCBhbmQKK0xhYmVscywgdGhhdCBldmVudHVhbGx5IHdpbGwgYmUgY29udHJpYnV0ZWQgdG8gYSAKKzxhIGhyZWY9IiNjYW5vbmljYWxncmFwaCI+Y2Fub25pY2FsIGdyYXBoPC9hPi4gSW4gdGhlIGNvbXBvc2l0aW9uYWwKK2ZyYW1ld29yaywgR3JhcGggaW5zdGFuY2VzIGFyZSBub3QgdHJ1ZSBtYXRoZW1hdGljYWwgImdyYXBocyIsIHRoZXkgYXJlCitiZXR0ZXIgZGVzY3JpYmVkIGFzICJncmFwaCBmcmFnbWVudHMiIGFzIHRoZXkgbWF5IGNvbnRhaW4gdW5yZXNvbHZlZAorc2V0cyBvZiBFZGdlcyBvciBMYWJlbHMgKGFuZCBubyBOb2RlcykuIFdoZW4gdGhlIAorPGEgaHJlZj0iI2Nhbm9uaWNhbGdyYXBoIj5jYW5vbmljYWwgZ3JhcGg8L2E+IGlzIGNyZWF0ZWQsIHRoZXNlIGZyYWdtZW50cworYXJlIGNvbWJpbmVkIGFuZCB0aGVpciBjb250ZW50J3MgY29ubmVjdGlvbnMgZXZlbnR1YWxseSByZXNvbHZlZCAoaS5lLiwKK0VkZ2VzIGFuZCBMYWJlbHMgd2lsbCBiZSBtYXRlZCB3aXRoIHRoZWlyIGFwcHJvcHJpYXRlICJtaXNzaW5nIiBOb2RlcykuCitUaGUgcmVzdWx0aW5nIDxhIGhyZWY9IiNjYW5vbmljYWxncmFwaCI+Y2Fub25pY2FsIGdyYXBoPC9hPiBpcyBhIHRydWUKK21hdGhlbWF0aWNhbCBncmFwaC48L3A+Cis8L3A+Cis8cD4KK0EgR3JhcGggY2FuIGJlIGNyZWF0ZWQgdXNpbmcgdGhlIAorPGEgaHJlZj0iLi4vaW50ZXJmYWNlL3dpemFyZHMvZ3JhcGh3aXphcmQuaHRtbCI+R3JhcGggV2l6YXJkPC9hPiBhbmQgCitlZGl0ZWQgdXNpbmcgdGhlIDxhIGhyZWY9Ii4uL2ludGVyZmFjZS9lZGl0b3JzL2dyYXBoZWRpdG9yLmh0bWwiPkdyYXBoIEVkaXRvcjwvYT4uCis8L3A+Cis8aDQgaWQ9bGFiZWw+TGFiZWw8L2g0PgorPHA+TGFiZWxzIHBsYXkgYSBzcGVjaWFsIHJvbGUgaW4gdGhlIGZyYW1ld29yayBpbiB0aGF0IHRoZXkgY2FuCitzdG9yZSB0d28gc3RhdGUgdmFsdWVzIHNpbXVsdGFuZW91c2x5LiBUaGV5IGhhdmUgYSAiY3VycmVudCIgdmFsdWUKK3doaWNoLCBjb2xsZWN0aXZlbHksIHJlY29yZHMgdGhlIGN1cnJlbnQgc3RhdGUgb2YgdGhlIGdyYXBoLiBUaGV5IGNhbgorYWxzbyBoYXZlIGEgIm5leHQiIHZhbHVlIHdoaWNoIGlzIHVzZWQsIGNvbGxlY3RpdmVseSwgdG8gc3RvcmUgdGhlIG5leHQKK3N0YXRlIG9mIHRoZSBncmFwaC48L3A+CisKKzxoNCBpZD1tb2RlbGRlY29yYXRvcnM+TW9kZWwgRGVjb3JhdG9yczwvaDQ+Cis8cD5UaGUgY29sbGVjdGlvbiBvZiA8YSBocmVmPSIjZGVjb3JhdG9yIj4gRGVjb3JhdG9yczwvYT4gdGhhdCBtYXkKK2V4aXN0IGluIGVhY2ggPGEgaHJlZj0iI21vZGVsIj4gTW9kZWw8L2E+IGlzIHNpbWlsYXIgdG8gdGhhdCBjb250YWluZWQKK2luIGEgPGEgaHJlZj0iI3NjZW5hcmlvIj5TY2VuYXJpbzwvYT4gaW5zdGFuY2UuIEl0cyBjb250ZW50cyByZXByZXNlbnRzCit0aGUgY29tcHV0YXRpb25hbCBjb21wb25lbnQgb2YgdGhlIDxhIGhyZWY9IiNtb2RlbCI+IE1vZGVsPC9hPi4gVGhlCitkaWZmZXJlbmNlIGlzIHRoYXQgdGhlIDxhIGhyZWY9IiNtb2RlbGRlY29yYXRvcnMiPiBNb2RlbCBEZWNvcmF0b3JzPC9hPgorYXJlIG9ubHkgYWJsZSB0byBtb2RpZnkgdGhlIHBhcnRzIG9mIHRoZSA8YSBocmVmPSIjY2Fub25pY2FsZ3JhcGgiPmNhbm9uaWNhbAorZ3JhcGg8L2E+IHRoYXQgYXJlIGNvbnRyaWJ1dGVkIGJ5IHRoZSB0cmVlIHJvb3RlZCBhdCB0aGUgPGEgaHJlZj0iI21vZGVsIj4KK01vZGVsPC9hPi4gVGhlIDxhIGhyZWY9IiNkZWNvcmF0b3IiPiBEZWNvcmF0b3JzPC9hPiBpbiB0aGUgPGEKKwlocmVmPSIjc2NlbmFyaW8iPlNjZW5hcmlvPC9hPiwgYmVpbmcgYWJvdmUgdGhlIHJvb3Qgb2YgdGhlIHRyZWUsIGFyZQorYWJsZSB0byBhY2Nlc3MgdGhlIGVudGlyZSA8YSBocmVmPSIjY2Fub25pY2FsZ3JhcGgiPmNhbm9uaWNhbCBncmFwaDwvYT4uCitUaGVyZSBpcyBhbHNvIGEgc3RyaWN0IGV4ZWN1dGlvbiBvcmRlciBvZiA8YSBocmVmPSIjbW9kZWxkZWNvcmF0b3JzIj4KK01vZGVsIERlY29yYXRvcnM8L2E+LiBUaGUgb25lcyB0aGF0IGFyZSBjb250cmlidXRlZCBsb3dlciBpbiB0aGUgdHJlZSBhcmUKK2ludm9rZWQgYmVmb3JlIG9uZXMgY29udHJpYnV0ZWQgYWJvdmUgdGhlbS4gPGEgaHJlZj0iI3NjZW5hcmlvIj5TY2VuYXJpbzwvYT4KKzxhIGhyZWY9IiNkZWNvcmF0b3IiPiBEZWNvcmF0b3JzPC9hPiBhcmUgaW52b2tlZCBsYXN0LiBUaGUgb3JkZXIgb2YKK2ludm9jYXRpb24gZm9yIDxhIGhyZWY9IiNkZWNvcmF0b3IiPiBEZWNvcmF0b3JzPC9hPiBhdCB0aGUgc2FtZSAibGV2ZWwiCitpcyBhcmJpdHJhcnkuPC9wPgorCis8cD5BIDxhIGhyZWY9IiNtb2RlbGRlY29yYXRvcnMiPiBNb2RlbCBEZWNvcmF0b3I8L2E+IHdvdWxkIHR5cGljYWxseQorYmUgc29tZSBjb21wdXRhdGlvbiB0aGF0IG5lZWRzIHRvIGJlIGV4ZWN1dGVkIGZvciBlYWNoIGN5Y2xlIG9mIHRoZQorPGEgaHJlZj0iI3NpbXVsYXRpb24iPlNpbXVsYXRpb248L2E+LCB3aGlsZSBhIDxhIGhyZWY9IiNzY2VuYXJpbyI+U2NlbmFyaW88L2E+IDxhCisJaHJlZj0iI2RlY29yYXRvciI+IERlY29yYXRvcjwvYT4gd291bGQgdHlwaWNhbGx5IGJlIHVzZWQgdG8gbW9kaWZ5IHRoZQoraW5pdGlhbCBzdGF0ZSBvZiB0aGUgPGEgaHJlZj0iI2Nhbm9uaWNhbGdyYXBoIj5jYW5vbmljYWwgZ3JhcGg8L2E+IHRvCitjdXN0b21pemUgaXQgZm9yIGEgcGFydGljdWxhciAiI3NjZW5hcmlvIi4gRm9yIGV4YW1wbGUsIGluIGFuCitlcGlkZW1pb2xvZ2ljYWwgPGEgaHJlZj0iI3NpbXVsYXRpb24iPlNpbXVsYXRpb248L2E+LCBhIGRpc2Vhc2UgbW9kZWwgCit3b3VsZCBiZSBhZGRlZCB0byBhCis8YSBocmVmPSIjc2ltdWxhdGlvbiI+U2ltdWxhdGlvbjwvYT4gYXMgYSA8YSBocmVmPSIjbW9kZWxkZWNvcmF0b3JzIj4gCitNb2RlbCBEZWNvcmF0b3I8L2E+IHdoaWxlCit0aGUgZXhhY3QgbG9jYXRpb24gb2YgYW4gb3V0YnJlYWsgb2YgYSBkaXNlYXNlIHdvdWxkIGJlIGFkZGVkIHRvIHRoZQorPGEgaHJlZj0iI3NpbXVsYXRpb24iPlNpbXVsYXRpb248L2E+IGJ5IGEgPGEgaHJlZj0iI3NjZW5hcmlvIj5TY2VuYXJpbzwvYT4gCis8YSBocmVmPSIjZGVjb3JhdG9yIj4KK0RlY29yYXRvcjwvYT4uIE1hbnkgZGlmZmVyZW50IDxhIGhyZWY9IiNzY2VuYXJpbyI+U2NlbmFyaW88L2E+IGluc3RhbmNlcworY291bGQgcmVmZXIgdG8gdGhlIHNhbWUgPGEgaHJlZj0iI21vZGVsIj4gTW9kZWw8L2E+ICh3aXRoIGl0cyBkaXNlYXNlCittb2RlbCksIGJ1dCBwcm92aWRlIGRpZmZlcmVudCA8YSBocmVmPSIjZGVjb3JhdG9yIj4gRGVjb3JhdG9yczwvYT4gdG8KK3NwZWNpZnkgZGlmZmVyZW50IHN0YXJ0aW5nIGxvY2F0aW9ucy48L3A+Cis8cD48YSBocmVmPSIjZGVjb3JhdG9yIj4gRGVjb3JhdG9yczwvYT4gdHlwaWNhbGx5IGNvbXB1dGUgdGhlIG5leHQKK3ZhbHVlIGZvciBMYWJlbHMgaW4gdGhlIDxhIGhyZWY9IiNjYW5vbmljYWxncmFwaCI+Y2Fub25pY2FsIGdyYXBoPC9hPiBhcworYSBmdW5jdGlvbiBvZiB0aGUgY3VycmVudCBjb250ZW50cyBvZiB0aGUgZ3JhcGggYW5kIHRoZSB0aW1lLjwvcD4KKzxwPlRoZSBGaWd1cmUgYmVsb3cgaWxsdXN0cmF0ZXMgaG93IHRoZXNlIGNvbXBvbmVudHMgYXJlIGNvbWJpbmVkIHRvCitjcmVhdGUgYSA8YSBocmVmPSIjbW9kZWwiPiBNb2RlbDwvYT4gdGhhdCBpcyB1c2VkIGJ5IHR3byBkaWZmZXJlbnQgPGEKK2hyZWY9IiNzY2VuYXJpbyI+IFNjZW5hcmlvczwvYT4uPC9wPgorPHA+PGltZyBzcmM9ImltZy9TY2VuYXJpb0NvbXBvc2l0aW9uLmpwZyIgLz48L3A+CisKKzxoNCBpZD1leHBlcmltZW50PkV4cGVyaW1lbnQ8L2g0PgorPHA+CitBbiBFeHBlcmltZW50IGlzIGEgc3BlY2lmaWNhdGlvbiBvZiBob3cgdG8gdGFrZSBhIDxlbT5iYXNlPC9lbT4gCis8YSBocmVmPSIjc2NlbmFyaW8iPlNjZW5hcmlvPC9hPiBhbmQgc3lzdGVtYXRpY2FsbHkgbW9kaWZ5IGl0IHRvIGNyZWF0ZSAKK2FuZCBydW4gYSBzZXF1ZW5jZSBvZiByZWxhdGVkIDxhIGhyZWY9IiNzaW11bGF0aW9uIj5TaW11bGF0aW9uczwvYT4uICAKK0ZvciBpbnN0YW5jZSwgb25lIG1pZ2h0IHdhbnQKK3RvIGV4cGxvcmUgdGhlIGVmZmVjdCBvZiBkaWZmZXJlbnQgdHJhbnNtaXNzaW9uIHJhdGVzIGZvciBhIGRpc2Vhc2UgaW4gYSAKK3BhcnRpY3VsYXIgPGEgaHJlZj0iI3NjZW5hcmlvIj5TY2VuYXJpbzwvYT4uICBBbiBFeHBlcmltZW50IGFsbG93cyBvbmUgCit0byBzcGVjaWZ5IHRoZSAoYmFzZSkgPGEgaHJlZj0iI3NjZW5hcmlvIj5TY2VuYXJpbzwvYT4gYW5kIGEgY29sbGVjdGlvbiAKK29mICA8YSBocmVmPSIjbW9kaWZpZXIiPk1vZGlmaWVyczwvYT4gdGhhdCBrbm93IGhvdyB0byBtb2RpZnkgaXQgaW4gCitzcGVjaWZpYyB3YXlzLiAgVGhlIG1vZGlmaWVkIDxhIGhyZWY9IiNzY2VuYXJpbyI+U2NlbmFyaW88L2E+IGluc3RhbmNlcyAKK2NhbiB0aGVuIGJlIHVzZWQgdG8gY3JlYXRlIDxhIGhyZWY9IiNzaW11bGF0aW9uIj5TaW11bGF0aW9uczwvYT4uIAorPC9wPgorPHA+CitUbyBpbml0aWF0ZSB0aGUgY3JlYXRpb24gb2YgdGhlIGRlcml2YXRpdmUgPGEgaHJlZj0iI3NjZW5hcmlvIj5TY2VuYXJpb3M8L2E+CithbmQgc3Vic2VxdWVudCA8YSBocmVmPSIjc2ltdWxhdGlvbiI+U2ltdWxhdGlvbnM8L2E+LCBhbiBFeHBlcmltZW50IGNhbiAKK2JlIHJ1biBqdXN0IGxpa2UgYSA8YSBocmVmPSIjc2NlbmFyaW8iPlNjZW5hcmlvPC9hPiB0byBjcmVhdGUgYSB0eXBlIG9mIAorZXhlY3V0aW9uIHVuaXQgY2FsbGVkIGEgPGEgaHJlZj0iI2JhdGNoIj5CYXRjaDwvYT4uICAKKzwvcD4KKzxwPgorQW4gRXhwZXJpbWVudCBjYW4gYmUgY3JlYXRlZCB1c2luZyB0aGUgCis8YSBocmVmPSIuLi9pbnRlcmZhY2Uvd2l6YXJkcy9leHBlcmltZW50d2l6YXJkLmh0bWwiPkV4cGVyaW1lbnQgV2l6YXJkPC9hPiBhbmQgCitlZGl0ZWQgdXNpbmcgdGhlIDxhIGhyZWY9Ii4uL2ludGVyZmFjZS9lZGl0b3JzL2V4cGVyaW1lbnRlZGl0b3IuaHRtbCI+RXhwZXJpbWVudCBFZGl0b3I8L2E+LgorPC9wPgorPGg0IGlkPW1vZGlmaWVyPk1vZGlmaWVyPC9oND4KKzxwPgorQSBNb2RpZmllciBpcyBhIHNwZWNpZmljYXRpb24gb2YgaG93IHRvIHN5c3RlbWF0aWNhbGx5IGNoYW5nZSB0aGUgdmFsdWVzCitvZiBvbmUgb3IgbW9yZSBmZWF0dXJlcyBvZiBhIDxhIGhyZWY9IiNzY2VuYXJpbyI+U2NlbmFyaW88L2E+LiAgVGhlcmUgYXJlIAordHdvIHR5cGVzIG9mIE1vZGlmaWVycy4gQSA8YSBocmVmPSIjcmFuZ2Vtb2RpZmllciI+UmFuZ2UgTW9kaWZpZXI8L2E+ICAKK21vZGlmaWVzIG51bWVyaWMgZmVhdHVyZXMgYnkgYXNzaWduaW5nIHRoZW0gdmFsdWVzIGZyb20gYSBzcGVjaWZpZWQgInJhbmdlIiAKK29mIHZhbHVlcywgd2hpbGUgYSA8YSBocmVmPSIjc2VxdWVuY2Vtb2RpZmllciI+U2VxdWVuY2UgTW9kaWZpZXI8L2E+IAorbW9kaWZpZXMgZmVhdHVyZXMgYnkgYXNzaWduaW5nIHRoZW0gc3VjY2Vzc2l2ZSB2YWx1ZXMgZnJvbSBhIHByZXNwZWNpZmllZCAKK29yZGVyZWQgY29sbGVjdGlvbi4KKzwvcD4KKzxwPgorQSBNb2RpZmllciBjYW4gYmUgY3JlYXRlZCB1c2luZyB0aGUgCis8YSBocmVmPSIuLi9pbnRlcmZhY2Uvd2l6YXJkcy9tb2RpZmllcndpemFyZC5odG1sIj5Nb2RpZmllciBXaXphcmQ8L2E+IGFuZCAKK2VkaXRlZCB1c2luZyB0aGUgPGEgaHJlZj0iLi4vaW50ZXJmYWNlL2VkaXRvcnMvbW9kaWZlcmVkaXRvci5odG1sIj5Nb2RpZmllciBFZGl0b3I8L2E+LgorPC9wPgorPGg0IGlkPXJhbmdlbW9kaWZpZXI+UmFuZ2UgTW9kaWZpZXI8L2g0PgorPHA+CitBIFJhbmdlIE1vZGlmaWVyIHNwZWNpZmllcyBhIHJhbmdlIG9mIHZhbHVlcyBmb3IgYSBudW1lcmljIGZlYXR1cmUgYW5kIGFuCitpbmNyZW1lbnQgdmFsdWUuICBJdCBtb2RpZmllcyBhIG51bWVyaWMgZmVhdHVyZSBieSBmaXJzdCBhc3NpZ25pbmcgaXQgYQorc3RhcnRpbmcgdmFsdWUgYW5kIHRoZW4gaXQgc3Vic2VxdWVudGx5IGFzc2lnbnMgdmFsdWVzIGdlbmVyYXRlZCBieSBhZGRpbmcKK2FuIGluY3JlbWVudCB2YWx1ZSB0byB0aGUgcHJldmlvdXNseSBhc3NpZ25lZCB2YWx1ZSB1bnRpbCB0aGUgcmVzdWx0IGV4Y2VlZHMKK2Egc3BlY2lmaWVkIGVuZCB2YWx1ZS4gIElmIHRoZSBzdGFydCB2YWx1ZSBpcyBncmVhdGVyIHRoYW4gdGhlIGVuZCB2YWx1ZSwgCit0aGVuIHRoZSBpbmNyZW1lbnQgbXVzdCBiZSBuZWdhdGl2ZS4KKzwvcD4KKzxoNCBpZD1zZXF1ZW5jZW1vZGlmaWVyPlNlcXVlbmNlIE1vZGlmaWVyPC9oND4KKzxwPgorQSBTZXF1ZW5jZSBNb2RpZmllciBzcGVjaWZpZXMgYSBzZXF1ZW5jZSBvZiB2YWx1ZXMgZm9yIGFuIGFyYml0cmFyeSBmZWF0dXJlLgorSXQgbW9kaWZpZXMgdGhlIGZlYXR1cmUgYnkgYXNzaWduaW5nIGl0LCBpbiBzZXF1ZW50aWFsIG9yZGVyLCB0aGUgdmFsdWVzIAoraW4gdGhlIHNlcXVlbmNlLgorPC9wPgorPGg0IGlkPXRyaWdnZXI+VHJpZ2dlcjwvaDQ+Cis8cD4KK0EgVHJpZ2dlciBpcyBhIHNwZWNpYWwga2luZCBvZiA8YSBocmVmPSIjZGVjb3JhdG9yIj5EZWNvcmF0b3I8L2E+IHRoYXQgY29tYmluZXMgCithIDxhIGhyZWY9IiNwcmVkaWNhdGUiPlByZWRpY2F0ZTwvYT4gd2l0aCBhIHJlZmVyZW5jZSB0byBhbm90aGVyIAorPGEgaHJlZj0iI2RlY29yYXRvciI+RGVjb3JhdG9yPC9hPi4gIEl0cyByb2xlIGlzIHRvIGNvbmRpdGlvbmFsbHkgZXhlY3V0ZSB0aGUKKzxhIGhyZWY9IiNkZWNvcmF0b3IiPkRlY29yYXRvcjwvYT4gaXQgcmVmZXJlbmNlcyBpZiBjZXJ0YWluIGNvbmRpdGlvbnMgZXhpc3QgCitpbiB0aGUgPGEgaHJlZj0iI3NpbXVsYXRpb24iPlNpbXVsYXRpb248L2E+LiAgVHlwaWNhbGx5LCB0aGUgCis8YSBocmVmPSIjZGVjb3JhdG9yIj5EZWNvcmF0b3I8L2E+IHJlZmVyZW5jZWQgYnkgdGhlIFRyaWdnZXIgd2lsbCBiZSBhIAorPGEgaHJlZj0iI21vZGlmaWVyIj5Nb2RpZmllcjwvYT4gd2hpY2ggd2lsbCBiZSBjb25maWd1cmVkIHRvIGFsdGVyIHNvbWUgYXNwZWN0IG9mIHRoZQorcnVubmluZyA8YSBocmVmPSIjc2ltdWxhdGlvbiI+U2ltdWxhdGlvbjwvYT4uICBGb3IgaW5zdGFuY2UsIGEgCis8YSBocmVmPSIjbW9kaWZpZXIiPk1vZGlmaWVyPC9hPiBjb3VsZCBjaGFuZ2UgdGhlIHZhbHVlcyBvbiA8YSBocmVmPSIjbGFiZWwiPkxhYmVsczwvYT4KK29uIGFuIDxhIGhyZWY9IiNlZGdlIj5FZGdlPC9hPiBvciA8YSBocmVmPSIjbm9kZSI+Tm9kZTwvYT4gaW4gdGhlIAorPGEgaHJlZj0iI2Nhbm9uaWNhbGdyYXBoIj5jYW5vbmljYWwgZ3JhcGg8L2E+LiAgVGhvc2UgdmFsdWVzIGNvdWxkIHJlcHJlc2VudCBzdWNoCit0aGluZ3MgYXMgdGhlIG9wZXJhdGlvbmFsIHN0YXR1cyBvZiBhbiBhaXJwb3J0LCBvciB0aGUgc3RhdHVzIChvcGVuIG9yIGNsb3NlZCkgb2YKK2Egcm9hZCBiZXR3ZWVuIHR3byByZWdpb25zLiAgQSBtb2RpZmllciBjYW4gYWxzbyBtb2RpZnkgYW5vdGhlciAKKzxhIGhyZWY9IiNkZWNvcmF0b3IiPkRlY29yYXRvcjwvYT4gYWN0aXZlIGluIGEgPGEgaHJlZj0iI3NpbXVsYXRpb24iPlNpbXVsYXRpb248L2E+LgorQW4gZXhhbXBsZSB3b3VsZCBiZSBjaGFuZ2luZyB0aGUgY29uZmlndXJhdGlvbiB2YWx1ZXMgb2YgYSBEaXNlYXNlIE1vZGVsLgorPC9wPgorPHA+CitUaGUgb3BlcmF0aW9uIG9mIGEgVHJpZ2dlciBpcyBjb25jZXB0dWFsbHkgc2ltcGxlLCBvbiBlYWNoIHNpbXVsYXRpb24gY3ljbGUsIAordGhlIFRyaWdnZXJzIGNvbnRhaW5lZCBieSBhICA8YSBocmVmPSIjc2NlbmFyaW8iPlNjZW5hcmlvPC9hPgorYXJlIGV4ZWN1dGVkLCBqdXN0IGxpa2UgdGhlIG90aGVyIDxhIGhyZWY9IiNkZWNvcmF0b3IiPkRlY29yYXRvcnM8L2E+LCB0byB1cGRhdGUgCit0aGUgPGEgaHJlZj0iI2Nhbm9uaWNhbGdyYXBoIj5jYW5vbmljYWwgZ3JhcGg8L2E+LiAgVGhlIGZpcnN0IHRoaW5nIHRoZSBUcmlnZ2VyIAorZG9lcyBpcyBldmFsdWF0ZSB0aGUgPGEgaHJlZj0iI3ByZWRpY2F0ZSI+UHJlZGljYXRlPC9hPiBpdCByZWZlcmVuY2VzLiAgSWYgdGhlIAorPGEgaHJlZj0iI3ByZWRpY2F0ZSI+UHJlZGljYXRlPC9hPiBldmFsdWF0ZXMgdG8gPGVtPkZhbHNlPC9lbT4sIHRoZW4gdGhlIFRyaWdnZXIgCitzaW1wbHkgcmV0dXJucyB3aXRob3V0IHBlcmZvcm1pbmcgYW55IG90aGVyIGFjdGlvbnMuICBJZiwgaG93ZXZlciwgdGhlIAorPGEgaHJlZj0iI3ByZWRpY2F0ZSI+UHJlZGljYXRlPC9hPiBldmFsdWF0ZXMgdG8gPGVtPlRydWU8L2VtPiwgdGhlbiB0aGUgVHJpZ2dlcgorYWxsb3dzIHRoZSA8YSBocmVmPSIjZGVjb3JhdG9yIj5EZWNvcmF0b3I8L2E+IGl0IHJlZmVyZW5jZXMgdG8gdXBkYXRlIHRoZSAgCis8YSBocmVmPSIjY2Fub25pY2FsZ3JhcGgiPmNhbm9uaWNhbCBncmFwaDwvYT4uICBTbyBsb25nIGFzIHRoZSAKKzxhIGhyZWY9IiNwcmVkaWNhdGUiPlByZWRpY2F0ZTwvYT4gcmV0dXJucyA8ZW0+VHJ1ZTwvZW0+IHRoZSByZWZlcmVuY2VkIAorPGEgaHJlZj0iI2RlY29yYXRvciI+RGVjb3JhdG9yPC9hPiB3aWxsIGJlIGV4ZWN1dGVkLiAgSWYgdGhlIAorPGEgaHJlZj0iI2RlY29yYXRvciI+RGVjb3JhdG9yPC9hPiBpcyBhICA8YSBocmVmPSIjbW9kaWZpZXIiPk1vZGlmaWVyPC9hPiB0aGVuIGl0Cit3aWxsIHN0ZXAgdGhyb3VnaCBlYWNoIG9mIGl0cyBjb25maWd1cmVkIG1vZGlmaWNhdGlvbnMgZWFjaCB0aW1lIGl0IGlzIAorYWN0aXZhdGVkIHVudGlsIGFsbCBtb2RpZmljYXRpb25zIGhhdmUgYmVlbiBjb21wbGV0ZWQuCis8L3A+Cis8cD4KK0EgVHJpZ2dlciBjYW4gYmUgY3JlYXRlZCB1c2luZyB0aGUgCis8YSBocmVmPSIuLi9pbnRlcmZhY2Uvd2l6YXJkcy90cmlnZ2Vyd2l6YXJkLmh0bWwiPlRyaWdnZXIgV2l6YXJkPC9hPiBhbmQgCitlZGl0ZWQgdXNpbmcgdGhlIDxhIGhyZWY9Ii4uL2ludGVyZmFjZS9lZGl0b3JzL3RyaWdnZXJlZGl0b3IuaHRtbCI+VHJpZ2dlciBFZGl0b3I8L2E+LgorPC9wPgorPGg0IGlkPXByZWRpY2F0ZT5QcmVkaWNhdGU8L2g0PgorPHA+CitBIFByZWRpY2F0ZSBpcyBhIGJvb2xlYW4gZXhwcmVzc2lvbiB0aGF0IHJldHVybnMgPGVtPlRydWU8L2VtPiBvciA8ZW0+RmFsc2U8L2VtPgorZGVwZW5kaW5nIG9uIHRlc3RhYmxlIGNvbmRpdGlvbnMgaW4gYSBydW5uaW5nIDxhIGhyZWY9IiNzaW11bGF0aW9uIj5TaW11bGF0aW9uPC9hPgorYW5kIHRoZSBleHByZXNzaW9uIGl0c2VsZi4gIEluc3RhbmNlcyBvZiAgUHJlZGljYXRlcyBhcmUgcmVmZXJlbmNlZCBieSAgCis8YSBocmVmPSIjdHJpZ2dlciI+VHJpZ2dlcnM8L2E+IGFuZCB0aGVpciBsb2dpY2FsIHZhbHVlcyBhcmUgdXNlZCB0byBjb250cm9sCit0aGUgZXhlY3V0aW9uIG9mIGEgPGEgaHJlZj0iI2RlY29yYXRvciI+RGVjb3JhdG9yPC9hPiByZWZlcmVuY2VkIGJ5IGVhY2ggCis8YSBocmVmPSIjdHJpZ2dlciI+VHJpZ2dlcjwvYT4uCis8L3A+Cis8cD4KK0FyYml0cmFyeSBsb2dpY2FsIGV4cHJlc3Npb25zIGNhbiBiZSBleHByZXNzZWQgaW4gYSBQcmVkaWNhdGUsIGJ1dCBjdXJyZW50bHksCitkdWUgdG8gaW1wbGVtZW50YXRpb24gbGltaXRhdGlvbnMsIHRoZSBvbmx5IHRlc3RhYmxlIGNvbmRpdGlvbnMgYXJlIHRoZQorY3VycmVudCBhbmQgZWxhcHNlZCB0aW1lcyBpbiBhIHJ1bm5pbmcgPGEgaHJlZj0iI3NpbXVsYXRpb24iPlNpbXVsYXRpb248L2E+LgorSW4gZnV0dXJlIHZlcnNpb25zIG9mIFNURU0sIGEgcmljaGVyIHNldCBvZiBjb25kaXRpb25zIHdpbGwgYmUgYXZhaWxhYmxlLiAgCitUaGUgdGVzdGluZyBvZiB0aW1lIGlzIHN0aWxsIGFuIGV4dHJlbWVseSB1c2VmdWwgY29uZGl0aW9uIGFzIGl0IGFsbG93cyBmb3IKK3NwZWNpZmljIG1vZGlmaWNhdGlvbnMgdG8gYmUgbWFkZSB0byBhIDxhIGhyZWY9IiNzaW11bGF0aW9uIj5TaW11bGF0aW9uPC9hPgorYXQgcHJlY2lzZSBwb2ludHMgaW4gdGltZS4KKzwvcD4KKzxwPgorQSBQcmVkaWNhdGUgY2FuIGJlIGNyZWF0ZWQgdXNpbmcgdGhlIAorPGEgaHJlZj0iLi4vaW50ZXJmYWNlL3dpemFyZHMvcHJlZGljYXRld2l6YXJkLmh0bWwiPlByZWRpY2F0ZSBXaXphcmQ8L2E+IGFuZCAKK2VkaXRlZCB1c2luZyB0aGUgPGEgaHJlZj0iLi4vaW50ZXJmYWNlL2VkaXRvcnMvcHJlZGljYXRlZWRpdG9yLmh0bWwiPlByZWRpY2F0ZSBFZGl0b3I8L2E+LgorPC9wPgorPGgzPlNpbXVsYXRpb24gRXhlY3V0aW9uPC9oMz4KKzxwPldoZW4gaXMgU2ltdWxhdGlvbiBpcyBzdGFydGVkLCB0aGUgZmlyc3Qgb3BlcmF0aW9uIGlzIHRvIGNyZWF0ZQordGhlIDxhIGhyZWY9IiNjYW5vbmljYWxncmFwaCI+Y2Fub25pY2FsIGdyYXBoPC9hPi4gVGhpcyBpcyBhY2NvbXBsaXNoZWQKK2J5IHJlY3Vyc2l2ZWx5IGRlc2NlbmRpbmcgdGhlIHRyZWUgcm9vdGVkIGJ5IHRoZSA8YSBocmVmPSIjbW9kZWwiPgorTW9kZWw8L2E+IHJlZmVyZW5jZWQgYnkgdGhlIDxhIGhyZWY9IiNzY2VuYXJpbyI+U2NlbmFyaW88L2E+LiBBcyB0aGUgPGEKKwlocmVmPSIjY2Fub25pY2FsZ3JhcGgiPmNhbm9uaWNhbCBncmFwaDwvYT4gaXMgY29uc3RydWN0ZWQsIGNvbm5lY3Rpb25zCitiZXR3ZWVuIExhYmVscyBhbmQgRWRnZXMgaW4gdGhlIGdyYXBoIGZyYWdtZW50cyBhcmUgcmVzb2x2ZWQgYW5kIHRoZW4KK2VhY2ggPGEgaHJlZj0iI21vZGVsIj4gTW9kZWw8L2E+IDxhIGhyZWY9IiNkZWNvcmF0b3IiPiBEZWNvcmF0b3I8L2E+IGlzCitpbnZva2VkIGFuZCBnaXZlbiB0aGUgb3Bwb3J0dW5pdHkgdG8gImRlY29yYXRlIiB0aGUgPGEKKwlocmVmPSIjY2Fub25pY2FsZ3JhcGgiPmNhbm9uaWNhbCBncmFwaDwvYT4gYXMgcGFydCBvZiBpdHMKK2luaXRpYWxpemF0aW9uLiBXaGVuIHRoaXMgaXMgY29tcGxldGUsIHRoZSA8YSBocmVmPSIjc2NlbmFyaW8iPlNjZW5hcmlvPC9hPgorPGEgaHJlZj0iI2RlY29yYXRvciI+IERlY29yYXRvcnM8L2E+IGFyZSBpbnZva2VkIHRvIGdpdmUgdGhlbSB0aGUKK29wcG9ydHVuaXR5IHRvIGRlY29yYXRlIHRoZSA8YSBocmVmPSIjY2Fub25pY2FsZ3JhcGgiPmNhbm9uaWNhbAorZ3JhcGg8L2E+LjwvcD4KKzxwPldoZW4gdGhlIDxhIGhyZWY9IiNjYW5vbmljYWxncmFwaCI+Y2Fub25pY2FsIGdyYXBoPC9hPiBoYXMgYmVlbgorY29uc3RydWN0ZWQgYW5kIGluaXRpYWxpemVkIGJ5IHRoZSA8YSBocmVmPSIjbW9kZWwiPiBNb2RlbDwvYT4gYW5kIDxhCisJaHJlZj0iI3NjZW5hcmlvIj5TY2VuYXJpbzwvYT4gPGEgaHJlZj0iI2RlY29yYXRvciI+IERlY29yYXRvcnM8L2E+LCB0aGUKK1NpbXVsYXRpb24gY2FuIGJlZ2luIGl0cyBmaXJzdCBjeWNsZS4gVGhlIGZpcnN0IHN0ZXAgb2YgdGhlIFNpbXVsYXRpb24KK2lzIHRvIGRldGVybWluZSBpZiB0aGUgU2ltdWxhdGlvbiBoYXMgY29tcGxldGVkIGl0cyBzZXF1ZW5jZSBvZiBjeWNsZXMuCitUaGUgYW5zd2VyIHRvIHRoaXMgcXVlc3Rpb24gaXMgcHJvdmlkZWQgYnkgdGhlIDxhIGhyZWY9IiNzZXF1ZW5jZXIiPlNlcXVlbmNlcjwvYT4KK3RoYXQgaXMgcmVmZXJlbmNlZCBieSB0aGUgPGEgaHJlZj0iI3NjZW5hcmlvIj5TY2VuYXJpbzwvYT4gZnJvbSB3aGljaAordGhlIFNpbXVsYXRpb24gd2FzIHN0YXJ0ZWQuIElmIHRoZSBhbnN3ZXIgaXMgIk5vLCIgYW5kIHRoZSBTaW11bGF0aW9uCitzaG91bGQgY29udGludWUsIHRoZSA8YSBocmVmPSIjc2VxdWVuY2VyIj5TZXF1ZW5jZXI8L2E+IHdpbGwgcHJvdmlkZSBhCit2YWx1ZSB0aGF0IHJlcHJlc2VudHMgdGhlICJ0aW1lIiBvZiB0aGUgbmV4dCBjeWNsZS4gVGhlIFNURU0gU2ltdWxhdGlvbgorZW5naW5lIHRoZW4gdGFrZXMgdGhhdCB2YWx1ZSBhbmQgaW52b2tlcyBlYWNoIG9mIHRoZSA8YSBocmVmPSIjbW9kZWwiPgorTW9kZWw8L2E+IDxhIGhyZWY9IiNkZWNvcmF0b3IiPiBEZWNvcmF0b3JzPC9hPiAoaW4gcHJvcGVyIG9yZGVyKSBwYXNzaW5nCit0aGVtIHRoZSB0aW1lIHZhbHVlLiBUaGV5IHBlcmZvcm0gdGhlaXIgY29tcHV0YXRpb25zIGFuZCB0aGVuIHRoZSA8YQorCWhyZWY9IiNzY2VuYXJpbyI+U2NlbmFyaW88L2E+IDxhIGhyZWY9IiNkZWNvcmF0b3IiPiBEZWNvcmF0b3JzPC9hPiBhcmUKK2ludm9rZWQgaW4gdGhlIHNhbWUgbWFubmVyLiBGcmVxdWVudGx5LCB0aGUgPGEgaHJlZj0iI3NjZW5hcmlvIj5TY2VuYXJpbzwvYT4KKzxhIGhyZWY9IiNkZWNvcmF0b3IiPiBEZWNvcmF0b3JzPC9hPiB3aWxsIG5vdCBoYXZlIGFueSBjb21wdXRhdGlvbnMgdG8KK3BlcmZvcm0gYWZ0ZXIgdGhleSBoYXZlIGRvbmUgdGhlaXIgaW5pdGlhbGl6YXRpb24sIGJ1dCB0aGVyZSBpcyBubworcmVzdHJpY3Rpb24gdGhhdCBlbmZvcmNlcyB0aGlzLjwvcD4KKzxwPldoZW4gdGhlIDxhIGhyZWY9IiNkZWNvcmF0b3IiPiBEZWNvcmF0b3JzPC9hPiBhcmUgZmluaXNoZWQsIHRoZQorU2ltdWxhdGlvbiBlbmdpbmUgdGVsbHMgdGhlIDxhIGhyZWY9IiNjYW5vbmljYWxncmFwaCI+Y2Fub25pY2FsCitncmFwaDwvYT4gdG8gc3dpdGNoIHRvIGl0cyAibmV4dCIgc3RhdGUuIFRoaXMgbWVhbnMgdGhhdCBhbGwgb2YgdGhlIExhYmVscworZXhjaGFuZ2UgdGhlaXIgImN1cnJlbnQiIGFuZCAibmV4dCIgdmFsdWVzLiBUaGlzIGNvbXBsZXRlcyB0aGUgZmlyc3QKK2N5Y2xlLiBUaGUgcHJvY2VzcyBiZWdpbnMgdGhlIG5leHQgY3ljbGUgd2l0aCB0aGUgPGEgaHJlZj0iI3NlcXVlbmNlciI+U2VxdWVuY2VyPC9hPgorZGV0ZXJtaW5pbmcgaWYgdGhlIHNlcXVlbmNlIG9mIHNpbXVsYXRpb24gY3ljbGVzIGlzIGNvbXBsZXRlLjwvcD4KKworPGg0IGlkPWJhdGNoPkJhdGNoIEV4ZWN1dGlvbjwvaDQ+Cis8cD4KK0EgQmF0Y2ggaXMgY3JlYXRlZCB3aGVuIGFuIDxhIGhyZWY9IiNleHBlcmltZW50Ij5FeHBlcmltZW50PC9hPiBpcyBleGVjdXRlZC4gIAorV2hlbiBhIEJhdGNoIHJ1bnMsIGl0IGZpcnN0IHRha2VzIHRoZSBiYXNlIDxhIGhyZWY9IiNzY2VuYXJpbyI+U2NlbmFyaW88L2E+IAorb2YgdGhlIDxhIGhyZWY9IiNleHBlcmltZW50Ij5FeHBlcmltZW50PC9hPiwgYXBwbGllcyB0aGUgTW9kaWZpZXJzIHJlZmVyZW5jZWQgCitieSB0aGUgPGEgaHJlZj0iI2V4cGVyaW1lbnQiPkV4cGVyaW1lbnQ8L2E+IGFuZCBjcmVhdGVzIGEgbmV3IGRlcml2YXRpdmUgCis8YSBocmVmPSIjc2NlbmFyaW8iPlNjZW5hcmlvPC9hPi4gIEl0IHRoZW4gaW5pdGlhdGVzIHRoZSBleGVjdXRpb24gb2YgYSAKKzxhIGhyZWY9IiNzaW11bGF0aW9uIj5TaW11bGF0aW9uPC9hPiBmcm9tIHRoZSBkZXJpdmVkIDxhIGhyZWY9IiNzY2VuYXJpbyI+U2NlbmFyaW88L2E+LiAgCitXaGVuIHRoYXQgPGEgaHJlZj0iI3NpbXVsYXRpb24iPlNpbXVsYXRpb248L2E+IGNvbXBsZXRlcywgdGhlIEJhdGNoIHJlcGVhdHMgdGhlCitwcm9jZXNzIHVudGlsIHRoZSBNb2RpZmllcnMgaW5kaWNhdGUgdGhhdCB0aGVyZSBhcmUgbm8gYWRkaXRpb25hbCBtb2RpZmljYXRpb25zIHRvIAorbWFrZSwgYXQgd2hpY2ggcG9pbnQgdGhlIGV4ZWN1dGlvbiBvZiB0aGUgQmF0Y2ggaXMgY29tcGxldGUgYW5kIGl0IGV4aXRzLgorPC9wPgorPC9ib2R5PgorPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2NvbmNlcHRzL292ZXJ2aWV3Lmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC9jb25jZXB0cy9vdmVydmlldy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY3ZTMwMjEKLS0tIC9kZXYvbnVsbAorKysgYi9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC9jb25jZXB0cy9vdmVydmlldy5odG1sCkBAIC0wLDAgKzEsMzUgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAgVHJhbnNpdGlvbmFsLy9FTiI+CisKKzxodG1sPgorPGhlYWQ+CisJPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9aXNvLTg4NTktMSI+CisJPHRpdGxlPlNURU0gQ29uY2VwdHM8L3RpdGxlPgorPC9oZWFkPgorCis8Ym9keT4KKworPGgyPgorV2hhdCBpcyB0aGUgU3BhdGlvdGVtcG9yYWwgRXBpZGVtaW9sb2dpY2FsIE1vZGVsZXIgKFNURU0pPworPC9oMj4KKzxwPgorVGhlIFNwYXRpb3RlbXBvcmFsIEVwaWRlbWlvbG9naWNhbCBNb2RlbGVyIChTVEVNKSB0b29sIGlzIGRlc2lnbmVkIAordG8gaGVscCBzY2llbnRpc3RzIGFuZCBwdWJsaWMgaGVhbHRoIG9mZmljaWFscyBjcmVhdGUgYW5kIHVzZSBzcGF0aWFsIAorYW5kIHRlbXBvcmFsIG1vZGVscyBvZiBlbWVyZ2luZyBpbmZlY3Rpb3VzIGRpc2Vhc2VzLiAKK1RoZXNlIG1vZGVscyBjb3VsZCBhaWQgaW4gdW5kZXJzdGFuZGluZywgYW5kIHBvdGVudGlhbGx5IHByZXZlbnRpbmcsIAordGhlIHNwcmVhZCBzdWNoIGRpc2Vhc2VzLgorPC9wPgorPHA+CitQb2xpY3ltYWtlcnMgcmVzcG9uc2libGUgZm9yIGNyZWF0aW5nIHN0cmF0ZWdpZXMgdG8gY29udGFpbiBkaXNlYXNlcyAKK2FuZCBwcmV2ZW50IGVwaWRlbWljcyBuZWVkIGFuIGFjY3VyYXRlIHVuZGVyc3RhbmRpbmcgb2YgZGlzZWFzZSAKK2R5bmFtaWNzIGFuZCB0aGUgbGlrZWx5IG91dGNvbWVzIG9mIHByZXZlbnRpdmUgYWN0aW9ucy4gCitJbiBhbiBpbmNyZWFzaW5nbHkgY29ubmVjdGVkIHdvcmxkIHdpdGggZXh0cmVtZWx5IGVmZmljaWVudCAKK2dsb2JhbCB0cmFuc3BvcnRhdGlvbiBsaW5rcywgdGhlIHZlY3RvcnMgb2YgaW5mZWN0aW9uIGNhbiAKK2JlIHF1aXRlIGNvbXBsZXguIFNURU0gZmFjaWxpdGF0ZXMgdGhlIGRldmVsb3BtZW50IG9mIGFkdmFuY2VkIAorbWF0aGVtYXRpY2FsIG1vZGVscyB0aGF0IGluY29ycG9yYXRlIG1hbnkgZmFjdG9ycyB0aGF0IGltcGFjdCAKK3RoZSBzcHJlYWQgb2YgZGlzZWFzZS4gIFRoZXNlIGluY2x1ZGUgcG9wdWxhdGlvbiB0eXBlcyBhbmQgdGhlaXIgCitnZW9ncmFwaGljYWwgZGlzdHJpYnV0aW9uIGFuZCBkZW5zaXR5LCB0cmFuc3BvcnRhdGlvbiByb3V0ZXMgYW5kIAordGhlaXIgY2FwYWNpdGllcywgYW5kIHRoZSBjaGFyYWN0ZXJpc3RpY3Mgb2YgYSBkaXNlYXNlLgorPC9wPgorCis8L2JvZHk+Cis8L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvZXBpZGVtaW9sb2dpY2FsbW9kZWxpbmcvaW1hZ2VzL1NFSVJTLmdpZiBiL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2VwaWRlbWlvbG9naWNhbG1vZGVsaW5nL2ltYWdlcy9TRUlSUy5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzNkZmYwMAotLS0gL2Rldi9udWxsCisrKyBiL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2VwaWRlbWlvbG9naWNhbG1vZGVsaW5nL2ltYWdlcy9TRUlSUy5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvZXBpZGVtaW9sb2dpY2FsbW9kZWxpbmcvaW1hZ2VzL1NJUlMuZ2lmIGIvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvZXBpZGVtaW9sb2dpY2FsbW9kZWxpbmcvaW1hZ2VzL1NJUlMuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVmYmI4OTYKLS0tIC9kZXYvbnVsbAorKysgYi9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC9lcGlkZW1pb2xvZ2ljYWxtb2RlbGluZy9pbWFnZXMvU0lSUy5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvZXBpZGVtaW9sb2dpY2FsbW9kZWxpbmcvaW1hZ2VzL1NJUy5naWYgYi9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC9lcGlkZW1pb2xvZ2ljYWxtb2RlbGluZy9pbWFnZXMvU0lTLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMzkwYzc1Ci0tLSAvZGV2L251bGwKKysrIGIvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvZXBpZGVtaW9sb2dpY2FsbW9kZWxpbmcvaW1hZ2VzL1NJUy5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvZXBpZGVtaW9sb2dpY2FsbW9kZWxpbmcvb3ZlcnZpZXcuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2VwaWRlbWlvbG9naWNhbG1vZGVsaW5nL292ZXJ2aWV3Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjMyZjM0MwotLS0gL2Rldi9udWxsCisrKyBiL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2VwaWRlbWlvbG9naWNhbG1vZGVsaW5nL292ZXJ2aWV3Lmh0bWwKQEAgLTAsMCArMSwxMjYgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAgVHJhbnNpdGlvbmFsLy9FTiI+CisKKzxodG1sPgorPGhlYWQ+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1pc28tODg1OS0xIj4KKzx0aXRsZT5FcGlkZW1pb2xvZ2ljYWwgTW9kZWxpbmcgT3ZlcnZpZXc8L3RpdGxlPgorPC9oZWFkPgorCis8Ym9keT4KKzxoMT5FcGlkZW1pb2xvZ2ljYWwgTW9kZWxpbmc8L2gxPgorCis8aW1nIHNyYz0iaW1hZ2VzL3Npcy5naWYiIGFsaWduPVJJR0hUIEhTUEFDRT0xMCBWU1BBQ0U9MTAgd2lkdGg9MjUlPgorPHA+IENvbXBhcnRtZW50YWwgZGlzZWFzZSBtb2RlbHMgYXJlIHNvbWUgb2YgdGhlIG1vc3Qgd2lkZWx5IHVzZWQKK21vZGVscyBvZiBpbmZlY3Rpb3VzIGRpc2Vhc2UuIEluIHRoZXNlIG1vZGVscyBpbmRpdmlkdWFscyAob3IgcG9ydGlvbnMgb2YKK2FuIGluZGl2aWR1YWwpIGFyZSBjb25zaWRlcmVkIHRvIGJlIGluIGEgY29tcGFydG1lbnRzIGJhc2VkIG9uIHRoZWlyCitkaXNlYXNlIHN0YXR1cy4gQnkgY29udmVudGlvbiwgY29tbW9ubHkgdXNlZCBjb21wYXJ0bWVudGFsIG1vZGVscyBhcmUKK2Rlc2lnbmF0ZWQgYnkgdGhlIGZpcnN0IGxldHRlcnMgb2YgdGhlIGNvbXBhcnRtZW50cyBhbmQgdGhlIG9yZGVyIAorcGVvcGxlIG1vdmUgYmV0d2VlbiB0aGVtLiBTbywgdGhlIG1vZGVsIGZvciBhIGRpc2Vhc2Ugd2hlcmUgcGVvcGxlIAorc3RhcnQgb3V0IFN1c2NlcHRpYmxlLCBiZWNvbWUgSW5mZWN0aW91cyBhZnRlciBjYXRjaGluZyB0aGUgZGlzZWFzZSwgCithbmQgdGhlbiBhZnRlciBzb21lIHRpbWUgY2xlYXIgdGhlIGRpc2Vhc2UgYW5kIGJlY29tZSBTdXNjZXB0aWJsZSBhZ2Fpbgord291bGQgYmUgYW4gU0lTIG1vZGVsLiBUaGUgZm91ciBtb3N0IGNvbW1vbmx5IHVzZWQgY29tcGFydG1lbnRzCithcmUgPHU+UzwvdT51c2NlcHRpYmxlLCA8dT5FPC91Pnhwb3NlZCwgPHU+STwvdT5uZmVjdGlvdXMsIGFuZAorPHU+UjwvdT5lbW92ZWQuIDx1PlM8L3U+dXNjZXB0aWJsZSBjb250YWlucyB0aG9zZSBpbmRpdmlkdWFscyAKK3dobyBjYW4gc3RpbGwgYmUgaW5mZWN0ZWQgd2l0aCBkaXNlYXNlLiA8dT5FPC91Pnhwb3NlZCBjb250YWlucyBpbmRpdmlkdWFscword2hvIGhhdmUgYmVlbiBpbmZlY3RlZCB3aXRoIHRoZSBkaXNlYXNlLCBidXQgaGF2ZSBub3QgeWV0IGJlY29tZQoraW5mZWN0aW91cyB0aGVtc2VsdmVzLiA8dT5JPC91Pm5mZWN0aW91cyBjb250YWlucyB0aG9zZSBpbmRpdmlkdWFscyB3aG8KK2FyZSBpbmZlY3RlZCBhbmQgaW5mZWN0aW91cy4gPHU+UjwvdT5lbW92ZWQgKHNvbWV0aW1lcyBjYWxsZWQgPHU+UjwvdT5lY292ZXJlZCkKK2NvbnRhaW5zIHRob3NlIGluZGl2aWR1YWxzIHdobyBoYXZlIGJlZW4gcmVtb3ZlZCBmcm9tIHRoZSBzeXN0ZW0KK2VpdGhlciB0aHJvdWdoIGRlYXRoIG9yIGltbXVuaXR5LiBUaGUgZGlzZWFzZSBzdGF0ZSBvZiBhIHBvcHVsYXRpb24gCitpcyBzcGVjY2lmaWVkIGJ5IGtub3dpbmcgdGhlIG51YmVyIG9mIGluZGl2aWR1YWxzIChvciBwcm9wb3J0aW9uIG9mCit0aGUgcG9wdWxhdGlvbikgdGhhdCBpcyBpbiBlYWNoIGNvbXBhcnRtZW50LgorICAJCisgPHA+IFRoZXJlIGFyZSB0d28gbWFpbiB0eXBlcyBvZiBjb21wYXJ0bWVudGFsIG1vZGVsczogZGV0ZXJtaW5pc3RpYworIGFuZCBzdG9jaGFzdGljLiBJbiBkZXRlcm1pbmlzdGljIG1vZGVsLCByYXRlcyBvZiBtb3ZlbWVudHMgYmV0d2VlbgorIGNvbXBhcnRtZW50cyBhcmUgdXNlZCB0byByZXByZXNlbnQgdGhlIHByb2Nlc3NlcyBieSB3aGljaCBpbmRpdmlkdWFscworIGFyZSBpbmZlY3RlZCwgYmVjb21lIGlsbCBhbmQgZXZlbnR1YWxseSByZWNvdmVyIGZyb20gZGlzZWFzZS4gVGhlc2UgCisgcmF0ZXMgc3BlY2lmeSBhIHNldCBvZiBkaWZmZXJlbnRpYWwgb3IgZGlmZmVyZW5jZSBlcXVhdGlvbnMsIHdoaWNoCisgY2FuIGJlIGV2YWx1YXRlZCB0byBnaXZlIHRoYXQgc3RhdGUgb2YgdGhlIG1vZGVsIGF0IGEgZnV0dXJlIHRpbWUgCisgcG9pbnQuIEluIGRldGVybWluaXN0aWMgbW9kZWxzIGNvbXBhcnRtZW50cyBuZWVkIG5vdCBjb250YWluIGFuCisgaW50ZWdlciBudW1iZXIgb2YgaW5kaXZpZHVhbHMuCisgCisgPHA+RGV0ZXJtaW5pc3RpYyBtb2RlbHMgb25seSBnaXZlIHRoZSA8aT5leHBlY3RlZDwvaT4gYmVoYXZpb3Igb2YKKyB0aGUgZGlzZWFzZSBpbiBhIHBvcHVsYXRpb24gdW5kZXIgYSBzZXQgb2YgYXNzdW1wdGlvbnMgYWJvdXQgCisgdGhlIG5hdHVyYWwgaGlzdG9yeSBhbmQgZXBpZGVtaW9sb2d5IG9mIHRoZSBkaXNlYXNlLiBPZnRlbgorIHdlIHdvdWxkIGFsc28gbGlrZSB0byBrbm93IGhvdyB0aGUgZGlzZWFzZSBiZWhhdmVzIGluIG1vcmUKKyBleHRyZW1lIGNhc2VzLCBhbmQgd2hhdCB0aGUgZGlzdHJpYnV0aW9uIG9mIHRoaXMgYmVoYXZpb3IgCisgaXMuIFN0b2NoYXN0aWMgbW9kZWxzIHByb3ZpZGUgYSBtZXRob2QgZm9yIGFkZHJlc3NpbmcgdGhpcworIGlzc3VlLiBJbiBhIHN0b2NoYXN0aWMgbW9kZWwsIHdob2xlIGluZGl2aWR1YWxzIGFyZSBtb3ZlZCAKKyBiZXR3ZWVuIGNvbXBhcnRtZW50cyBiYXNlZCBvbiBhIHJhbmRvbSBkcmF3IGZyb20gc29tZSBzcGVjaWZpZWQKKyBkaXN0cmlidXRpb24uIFRvIGdldCBpbmZvcm1hdGl2ZSByZXN1bHRzIGZyb20gYSBzdG9jaGFzdGljIAorIGNvbXBhcnRtZW50YWwgbW9kZWwgaXQgaXMgbmVjZXNzYXJ5IHRvIGRvIGh1bmRyZWRzLCBvciBldmVuCisgdGhvdXNhbmRzIG9mIGV4cGVyaW1lbnRzLiAKKworPHA+Q29tcGFydGFtZW50YWwgbW9kZWxzIGFsc28gbWF5IGhhdmUgImNsb3NlZCIgb3IgIm9wZW4iIHBvcHVsYXRpb25zLgorSW4gY2xvc2VkIHBvcHVsYXRpb25zIHRoZSBzZXQgb2YgaW5kaXZpZHVhbHMgcmVwcmVzZW50ZWQgYnkgdGhlIG1vZGVsCitpcyBzdGF0aWMsIG5vIG9uZSBjb21lcyBpbiBhbmQgbm8gb25lIGNvbWVzIG91dC4gSXQgaXMgb2Ygbm90ZSB0aGF0CitpbiBzdWNoIHBvcHVsYXRpb25zIGFueSBkaXNlYXNlIHRoYXQgY29uZmVycyBwZXJtYW5lbnQgaW1tdW5pdHkKK2FmdGVyIGluZmVjdGlvbiB3aWxsIGV2ZW50dWFsbHkgYmVjb21lIGV4dGluY3QuIEluIGFuIG9wZW4gCitwb3B1bGF0aW9uIHRoZXJlIGlzIGNvbnRpbnVvdXMgaW1taWdyYXRpb24gYW5kIGVtaWdyYXRpb24gZnJvbQordGhlIHBvcHVsYXRpb24sIHVzdWFsbHkgdmlhIGJpcnRoIGFuZCBkZWF0aC4gCisgIAorPHA+U1RFTSBjb21lcyB3aXRoIGRldGVybWluaXN0aWMgaW1wbGVtZW50YXRpb25zIGZvciB0aHJlZSBjb21tb25seSB1c2VkCitjb21wYXJ0bWVudGFsIG1vZGVsczogU0koUyksIFNJUihTKSwgYW5kIFNJRVIoUykuIFRoZXNlIG1vZGVscyBhcmUKK2ltcGxlbWVudGVkIGFzIGhhdmluZyBvcGVuIHBvcHVsYXRpb25zLCBidXQgY2xvc2VkIHBvcHVsYXRpb25zIGNhbgorYmUgZWFzaWx5IHNpbXVsYXRlZCBieSBzZXR0aW5nIHRoZSBpbW1pZ3JhdGlvbi9lbWlncmF0aW9uIHJhdGUgdG8KK3plcm8uIFdoaWNoIG1vZGVsIGlzIGFwcHJvcHJpYXRlIGZvciBhIG1vZGVsaW5nIHByb2plY3QgZGVwZW5kcworb24gYm90aCB0aGUgZGlzZWFzZSBvZiBpbnRlcmVzdCBhbmQgdGhlIHRpbWVzY2FsZSB0aGF0IHdlIGFyZSAKK2ludGVyZXN0ZWQgaW4gbW9kZWxpbmcgb3VyIHJlc3VsdHMuIAorCis8aDI+VGhlIFNJKFMpIE1vZGVsPC9oMj4KKzxhIGhyZWY9InNpbWF0aC5odG1sIj4KKzxpbWcgc3JjPSJpbWFnZXMvc2lzLmdpZiIgYWxpZ249Q0VOVEVSIEhTUEFDRT0xMCBWU1BBQ0U9MTAgd2lkdGg9MjQlIGJvcmRlcj0wPgorPC9hPgorCis8cD5TSShTKSBhcmUgdXNlZnVsIGZvciBtb2RlbGluZyBkaXNlYXNlcyB3aXRoIGEgc2hvcnQgbGF0ZW50IHBlcmlvZCAodGhlIHRpbWUgCitiZXR3ZWVuIGJlaW5nIGluZmVjdGVkIGFuZCBiZWNvbWluZyBpbmZlY3Rpb3VzKSB0aGF0IGVpdGhlciBjb25mZXIgbm8gbG9uZyB0ZXJtIAoraW1tdW5pdHkgKGluIHRoZSBjYXNlIG9mIFNJUyBtb2RlbHMpIG9yIHJlc3VsdCBpbiBwZXJtYW5lbnQgaW5mZWN0aW9uIChpbiB0aGUgY2FzZQorb2YgU0kgbW9kZWxzKS4gRGlzZWFzZXMgb2YgdGhpcyB0eXBlIGluY2x1ZGUgdGhlIGNvbW1vbiBjb2xkIGFuZCBtYW55IAorbWFjcm8tcGFyYXNpdGUgaW5mZWN0aW9ucy4gU3VzY2VwdGlibGUgaW5kaXZpZHVhbHMgYXJlIGluZmVjdGVkIGF0IHRoZSAKK3JhdGUgb2YgPGVtPiZiZXRhO0k8L2VtPiwgYXQgd2hpY2ggdGltZSB0aGV5IGxvc2UgaW5mZWN0aW91c25lc3MKK2F0IHRoZSByYXRlIG9mIDxlbT4mZ2FtbWE7PC9lbT4uIE1hdGhlbWF0aWNhbCBkZXRhaWxzIG9mIHRoaXMgbW9kZWwKK2NhbiBiZSB2aWV3ZWQgPGEgaHJlZj0ic2ltYXRoLmh0bWwiPmhlcmU8L2E+LgorCisKKzxoMj5UaGUgU0lSKFMpIE1vZGVsPC9oMj4KKzxhIGhyZWY9InNpcm1hdGguaHRtbCI+Cis8aW1nIHNyYz0iaW1hZ2VzL3NpcnMuZ2lmIiBhbGlnbj1DRU5URVIgSFNQQUNFPTEwIFZTUEFDRT0xMCB3aWR0aD0zNiUgYm9yZGVyPTA+Cis8L2E+CisKKzxwPiBTSVIoUykgbW9kZWxzIGFyZSB1c2VmdWwgZm9yIG1vZGVsaW5nIGRpc2Vhc2VzIHdpdGggYSBzaG9ydCBsYXRlbnQgCitwZXJpb2QgdGhhdCBjb25mZXIgaW1tdW5pdHkgYWZ0ZXIgaW5mZWN0aW9uLCB3aGV0aGVyIHBlcm1hbmVudGx5IChhbiBTSVIKK21vZGVsKSwgb3IgdGVtcG9yYXJpbHkgKGFuIFNJUlMgbW9kZWwpLiBTdWNoIGEgbW9kZWwgbWlnaHQgYmUgdXNlZnVsIGZvcgorbW9kZWxpbmcgZGlzZWFzZXMgc3VjaCBhcyBpbmZsdWVuemEgb3IgY2hpY2tlbi1wb3guIFN1c2NlcHRpYmxlIGluZGl2aWR1YWxzIGFyZSBpbmZlY3RlZCAKK2F0IHRoZSByYXRlIG9mIDxlbT4mYmV0YTtJPC9lbT4uIFRoZXkgdGhlbiBsb29zZSBpbmZlY3Rpb3VzbmVzcyBhdCB0aGUgcmF0ZSBvZgorPGVtPiZnYW1tYTs8L2VtPiBhbmQgdGhlbiBiZWNvbWUgaW1tdW5lIHRvIGZ1cnRoZXIgaW5mZWN0aW9uLiBJbW11bml0eSBpcyBsb3N0CithdCB0aGUgcmF0ZSBvZiA8ZW0+JnNpZ21hOzwvZW0+LiAgTWF0aGVtYXRpY2FsIGRldGFpbHMgb2YgdGhpcyBtb2RlbCBjYW4gYmUKK3ZpZXdlZCA8YSBocmVmPSJzaXJtYXRoLmh0bWwiPmhlcmU8L2E+LgorCis8aDI+VGhlIFNFSVIoUykgTW9kZWw8L2gyPgorPGEgaHJlZj0ic2Vpcm1hdGguaHRtbCI+Cis8aW1nIHNyYz0iaW1hZ2VzL3NlaXJzLmdpZiIgYWxpZ249Q0VOVEVSIEhTUEFDRT0xMCBWU1BBQ0U9MTAgd2lkdGg9NDglIGJvcmRlcj0wPgorPC9hPgorCis8cD4gU0VJUihTKSBtb2RlbHMgYXJlIHVzZWZ1bCBmb3IgbW9kZWxpbmcgZGlzZWFzZXMgdGhhdCBoYXZlIGEgbG9uZyBsYXRlbnQKK3BlcmlvZCBpbiB3aGljaCBpbmZlY3RlZCBpbmRpdmlkdWFscyBhcmUgbm90IHRoZW1zZWx2ZXMgaW5mZWN0aW91cy4gIE1lYXNsZXMsCitpbmZsdWVuemEgYW5kIHNtYWxscG94IGFyZSBhbGwgZGlzZWFzZXMgdGhhdCBtaWdodCBiZSBhcHByb3ByaWF0ZWx5IGNoYXJhY3Rlcml6ZWQKK2J5IHRoaXMgbW9kZWwuIFN1c2NlcHRpYmxlIGluZGl2aWR1YWxzIGFyZSBpbmZlY3RlZCAgYXQgdGhlIHJhdGUgb2YgPGVtPiZiZXRhO0k8L2VtPi4KK1RoZXNlIGluZGl2aWR1YWxzIGJlY29tZSBpbmZlY3Rpb3VzIGF0IHRoZSByYXRlIG9mIDxlbT4mZXBzaWxvbjs8L2VtPiwgYW5kICAKK3RoZW4gbG9vc2UgaW5mZWN0aW91c25lc3MgYXQgdGhlIHJhdGUgb2YKKzxlbT4mZ2FtbWE7PC9lbT4sIGJlY29taW5nIGltbXVuZSB0byBmdXJ0aGVyIGluZmVjdGlvbi4gSW1tdW5pdHkgaXMgbG9zdAorYXQgdGhlIHJhdGUgb2YgPGVtPiZzaWdtYTs8L2VtPi4gTWF0aGVtYXRpY2FsIGRldGFpbHMgb2YgdGhpcyBtb2RlbCBjYW4gYmUKK3ZpZXdlZCA8YSBocmVmPSJzd2lybWF0aC5odG1sIj5oZXJlPC9hPi4KKworCis8aDI+RnVydGhlciBSZWFkaW5nPC9oMj4KKzxvbD4KKwk8bGk+IEhldGhjb3RlLCBILiBXLiAyMDAwLiBUaGUgTWF0aGVtYXRpY3Mgb2YgSW5mZWN0aW91cyBEaXNlYXNlcy4gCisJU0lBTSBSZXYuIDQyLCA0IChEZWMuIDIwMDApLCA1OTktNjUzLiBET0k9IGh0dHA6Ly9keC5kb2kub3JnLzEwLjExMzcvUzAwMzYxNDQ1MDAzNzE5MDcKKwk8bGk+ICBGb3JkLCBELiBBLiwgS2F1Zm1hbiwgSi4gSC4sIEVpcm9uLCBJLiwyMDA2LiBBbiBleHRlbnNpYmxlIHNwYXRpYWwKKwkJYW5kIHRlbXBvcmFsIGVwaWRlbWlvbG9naWNhbCBtb2RlbGluZyBzeXN0ZW0uIAorCQlJbnQgSiBIZWFsdGggR2VvZ3IuIDUsIDQgKEphbi4gMjAwNikuIERPST1odHRwOi8vZHguZG9pLm9yZy8xMC4xMTg2LzE0NzYtMDcyWC01LTQKKwkJIAorPC9vbD4KKworPC9ib2R5PgorPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2VwaWRlbWlvbG9naWNhbG1vZGVsaW5nL3NlaXJtYXRoLmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC9lcGlkZW1pb2xvZ2ljYWxtb2RlbGluZy9zZWlybWF0aC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIzMjZiNDYKLS0tIC9kZXYvbnVsbAorKysgYi9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC9lcGlkZW1pb2xvZ2ljYWxtb2RlbGluZy9zZWlybWF0aC5odG1sCkBAIC0wLDAgKzEsMTc1IEBACis8IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIvaHRtbDQvbG9vc2UuZHRkIj4KKzxodG1sPgorPGhlYWQ+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0xIj4KKzx0aXRsZT5TRUlSKFMpIERpc2Vhc2UgTW9kZWwgTWF0aGVtYXRpY3M8L3RpdGxlPgorPC9oZWFkPgorPGJvZHk+Cis8aDE+U0VJUiBEaXNlYXNlIE1vZGVsIE1hdGhlbWF0aWNzPC9oMT4KKzxpbWcgc3JjPSJpbWFnZXMvc2VpcnMuZ2lmIiBhbGlnbj1DRU5URVIgSFNQQUNFPTEwIFZTUEFDRT0xMCBib3JkZXI9MCB3aWR0aD0xMDAlPgorPHA+VGhlIGJhc2ljIDxlbT5TRUlSPC9lbT4gKFN1c2NlcHRpYmxlLCBFeHBvc2VkLCBJbmZlY3Rpb3VzLCBSZW1vdmVkKQorYW5kIDxlbT5TRUlSUzwvZW0+IChTdXNjZXB0aWJsZSwgRXhwb3NlZCwgSW5mZWN0aW91cywgUmVtb3ZlZCwgCitTdXNjZXB0aWJsZSkgZGlzZWFzZSBtb2RlbHMgYXNzdW1lIGEgdW5pZm9ybQorcG9wdWxhdGlvbiBhdCBhIHNpbmdsZSBsb2NhdGlvbiBhbmQgdGhhdCB0aGUgcG9wdWxhdGlvbiBtZW1iZXJzIGFyZSB3ZWxsCisibWl4ZWQiLCBtZWFuaW5nIHRoYXQgdGhleSBhcmUgZXF1YWxseSBsaWtlbHkgdG8gbWVldCBhbmQgaW5mZWN0IGVhY2gKK290aGVyLiBUaGlzIG1vZGVsLCBmb3IgYSBub3JtYWxpemVkIHBvcHVsYXRpb24sIGlzIGRlZmluZWQgYnkgdGhlIHRocmVlCitlcXVhdGlvbnMgYmVsb3c6Cis8dWw+CisJPGxpPjxlbT4mRGVsdGE7cyA9ICZtdTsgJm1pbnVzOyAmYmV0YTtzIGkgKyAmc2lnbWE7ciAmbWludXM7CisJJm11O3M8L2VtPjwvbGk+CisJPGxpPjxlbT4mRGVsdGE7ZSA9ICZiZXRhO3MgaSAmbWludXM7ICZlcHNpbG9uO2UgJm1pbnVzOyAmbXU7ZTwvZW0+PC9saT4KKwk8bGk+PGVtPiZEZWx0YTtpID0gJmVwc2lsb247ZSAmbWludXM7ICZnYW1tYTtpICZtaW51czsgJm11O2k8L2VtPjwvbGk+CisJPGxpPjxlbT4mRGVsdGE7ciA9ICZnYW1tYTtpICZtaW51czsgJnNpZ21hO3IgJm1pbnVzOyAmbXU7cjwvZW0+PC9saT4KKzwvdWw+CisKKworPHA+V2hlcmU6Cis8dWw+CisJPGxpPjxlbT5zPC9lbT4gaXMgdGhlIHByb3BvcnRpb24gb2YgdGhlIHBvcHVsYXRpb24gdGhhdCBpcworCQk8ZW0+U3VzY2VwdGlibGU8L2VtPjwvbGk+CisJPGxpPjxlbT5lPC9lbT4gaXMgdGhlIHByb3BvcnRpb24gb2YgdGhlIHBvcHVsYXRpb24gdGhhdCBpcyA8ZW0+RXhwb3NlZDwvZW0+IHRvCisJCXRoZSBkaXNlYXNlLCBidXQgbm90IHlldCBpbmZlY3Rpb3VzLjwvbGk+CQorCTxsaT48ZW0+aTwvZW0+IGlzIHRoZSBwcm9wb3J0aW9uIG9mIHRoZSBwb3B1bGF0aW9uCisJCXRoYXQgaXMgPGVtPkluZmVjdGlvdXM8L2VtPjwvbGk+CisJPGxpPjxlbT5yPC9lbT4gaXMgdGhlIHByb3BvcnRpb24gb2YgdGhlIHBvcHVsYXRpb24KKwkJdGhhdCBpcyA8ZW0+UmVtb3ZlZDwvZW0+IGZyb20gdGhlIGluZmVjdGlvdXMgYW5kIHN1c2NlcHRpYmxlIHBvcHVsYXRpb25zLCAKKwkJYW5kIHRoZXJlZm9yZSBjYW5ub3QgYmUgaW5mZWN0ZWQuPC9saT4KKwk8bGk+PGVtPiZtdTs8L2VtPiBib3RoIHRoZSByYXRlIG9mIGltbWlncmF0aW9uIChlLmcuLCBieSBiaXJ0aCkgYW5kIGVtaWdyYXRpb24KKwkJKGUuZy4sIGJ5IGRlYXRoKSBmcm9tIHRoZSBwb3B1bGF0aW9uLiBUaGVzZSByYXRlcyBhcmUgYXNzdW1lZCB0byBiZSBlcXVhbAorCQlvdmVyIHRoZSB0aW1lIHBlcmlvZCBvZiBpbnRlcmVzdCAodGhpcyBzaW1wbGlmaWVzIHRoZSBtYXRoZW1hdGljcykuPC9saT4KKyAJPGxpPjxlbT4mYmV0YTs8L2VtPiBpcyB0aGUgZGlzZWFzZSB0cmFuc21pc3Npb24gKGluZmVjdGlvbikgcmF0ZS4KKwkJIFRoZSByYXRlIGF0IHdoaWNoIGluZmVjdGlvdXMgaW5kaXZpZHVhbHMgaW5mZWN0IHN1c2NlcHRpYmxlIGluZGl2aWR1YWxzLiBPbmNlCisJIAlpbmZlY3RlZCwgc3VzY2VwdGlibGUgZW50ZXIgdGhlIGV4cG9zZWQgY29tcGFydG1lbnQuPC9saT4KKwk8bGk+PGVtPiZlcHNpbG9uOzwvZW0+IGlzIHRoZSByYXRlIGF0IHdoaWNoIDxlbT5FeHBvc2VkPC9lbT4gcG9wdWxhdGlvbgorCQltZW1iZXJzIGJlY29tZSA8ZW0+SW5mZWN0aW91czwvZW0+LjwvbGk+CisJPGxpPiZnYW1tYTsgaXMgdGhlIHJhdGUgYXQgd2hpY2ggaW5kaXZpZHVhbHMgY2xlYXIgaW5mZWN0aW9uLiBJbiB0aGlzIG1vZGVsIHRoZXNlCisJCWluZGl2aWR1YWxzIGNhbm5vdCBiZSByZS1pbmZlY3RlZCBmb3Igc29tZSBwZXJpb2Qgb2YgdGltZSBhZnRlciBpbmZlY3Rpb24gKHdoZXRoZXIgdGhyb3VnaAorCQlpbW11bml0eSBvciByZW1vdmFsIGZyb20gdGhlIHBvcHVsYXRpb24pLjwvbGk+CisJPGxpPjxlbT4mc2lnbWE7PC9lbT4gaXMgdGhlIGltbXVuaXR5IGxvc3MgcmF0ZS4gVGhpcyBjb2VmZmljaWVudAorCQlkZXRlcm1pbmVzIHRoZSByYXRlIGF0IHdoaWNoIDxlbT5SZW1vdmVkPC9lbT4gcG9wdWxhdGlvbiBtZW1iZXJzIGxvc2UKKwkJdGhlaXIgaW1tdW5pdHkgdG8gdGhlIGRpc2Vhc2UgYW5kIGJlY29tZSA8ZW0+U3VzY2VwdGlibGU8L2VtPiBhZ2Fpbi4gRm9yIGFuIFNFSVIKKwkJbW9kZWwsIHRoaXMgcmF0ZSBpcyAwLgorCTwvbGk+CQorPC91bD4KKzwvcD4KK0ZvbGxvd2luZyBiYXNpY2FsbHkgdGhlIHNhbWUgZGVyaXZhdGlvbiBhcyBvdXRsaW5lZCBmb3IgdGhlCis8YSBocmVmPSJzaW1hdGguaHRtbCI+U0k8L2E+CithbmQKKzxhIGhyZWY9InNpcm1hdGguaHRtbCI+U0lSPC9hPgorbW9kZWxzLCB0aGVzZSBiZWNvbWU6CisKKzxwPkxldAorPHVsPgorCTxsaT48ZW0+Jm11OzxzdWI+aTwvc3ViPjwvZW0+IGJlIHRoZSA8ZW0+SW5mZWN0aW91cyBNb3J0YWxpdHkKKwlSYXRlPC9lbT4uIFRoaXMgaXMgdGhlIHJhdGUgYXQgd2hpY2ggaW5mZWN0ZWQgcG9wdWxhdGlvbiBtZW1iZXJzIGRpZQorCXNwZWNpZmljYWxseSBkdWUgdG8gdGhlIGRpc2Vhc2UuPC9saT4KKzwvdWw+CisKKzxwPldlIG1vZGlmeSBvdXIgbW9kZWwgdG8gaW5jbHVkZSB0aGlzIGFkZGl0aW9uYWwgcmF0ZQorCis8dWw+CisJPGxpPjxlbT4mRGVsdGE7cyA9ICZtdTsgJm1pbnVzOyAmYmV0YTtzIGkgKyAmc2lnbWE7ciAmbWludXM7CisJJm11OyBzPC9lbT48L2xpPgorCTxsaT48ZW0+JkRlbHRhO2UgPSAmYmV0YTtzIGkgJm1pbnVzOyAmZXBzaWxvbjtlICZtaW51czsgJm11O2U8L2VtPjwvbGk+CisJPGxpPjxlbT4mRGVsdGE7aSA9ICZlcHNpbG9uO2UgJm1pbnVzOyAmZ2FtbWE7aQorCSZtaW51czsgKCZtdTsrJm11OzxzdWI+aTwvc3ViPilpPC9lbT48L2xpPgorCTxsaT48ZW0+JkRlbHRhO3IgPSAmZ2FtbWE7aSAmbWludXM7ICZzaWdtYTtyCisJJm1pbnVzOyAmbXU7cjwvZW0+PC9saT4KKzwvdWw+Cis8L3A+Cis8aDM+U3BhdGlhbCBBZGFwdGF0aW9uPC9oMz4KKzxwPgorPHVsPgorCTxsaT48ZW0+JkRlbHRhO3MgUDxzdWI+bDwvc3ViPj0gJm11O1A8c3ViPmw8L3N1Yj4gJm1pbnVzOworCSZiZXRhOzxzdWI+bDwvc3ViPiBzIGkgUDxzdWI+bDwvc3ViPiArICZzaWdtYTsgciBQPHN1Yj5sPC9zdWI+ICZtaW51czsKKwkmbXU7IHMgUDxzdWI+bDwvc3ViPjwvZW0+PC9saT4KKwk8bGk+PGVtPiZEZWx0YTtlIFA8c3ViPmw8L3N1Yj49ICZiZXRhO3NpUDxzdWI+bDwvc3ViPiAmbWludXM7CisJJmVwc2lsb247ZVA8c3ViPmw8L3N1Yj4gJm1pbnVzOyAmbXU7ZVA8c3ViPmw8L3N1Yj48L2VtPjwvbGk+CisJPGxpPjxlbT4mRGVsdGE7aVA8c3ViPmw8L3N1Yj4gPSAmZXBzaWxvbjtlIFA8c3ViPmw8L3N1Yj4KKwkmbWludXM7ICZnYW1tYTsgaSBQPHN1Yj5sPC9zdWI+ICZtaW51czsgKCZtdTsrJm11OzxzdWI+aTwvc3ViPilpIAorCVA8c3ViPmw8L3N1Yj48L2VtPjwvbGk+CisJPGxpPjxlbT4mRGVsdGE7ciBQPHN1Yj5sPC9zdWI+PSAmZ2FtbWE7aVA8c3ViPmw8L3N1Yj4KKwkmbWludXM7ICZzaWdtYTtyIFA8c3ViPmw8L3N1Yj4mbWludXM7ICZtdTtyIFA8c3ViPmw8L3N1Yj48L2VtPjwvbGk+Cis8L3VsPgorPHA+TGV0IDxlbT5TPHN1Yj5sPC9zdWI+ID0gcyBQPHN1Yj5sPC9zdWI+PC9lbT4gYmUgdGhlIG51bWJlciBvZiA8ZW0+U3VzY2VwdGlibGU8L2VtPgorcG9wdWxhdGlvbiBtZW1iZXJzIGF0IGxvY2F0aW9uIDxlbT5sPC9lbT4uIFNpbWlsYXJseSwgbGV0IDxlbT5JPHN1Yj5sPC9zdWI+Cis9IGkgUDxzdWI+bDwvc3ViPjwvZW0+IGJlIHRoZSBudW1iZXIgb2YgcG9wdWxhdGlvbiBtZW1iZXJzIGF0IGxvY2F0aW9uIDxlbT5sPC9lbT4KK3RoYXQgYXJlIDxlbT5JbmZlY3Rpb3VzPC9lbT4sIGFuZCBsZXQgPGVtPnIKK1A8c3ViPmw8L3N1Yj4gPC9lbT5iZSB0aGUgPGVtPlJlY292ZXJlZDwvZW0+IHBvcHVsYXRpb24uIEZvciByZWFkYWJpbGl0eSwgd2UKK2Ryb3AgdGhlIDxlbT5sPC9lbT4gc3Vic2NyaXB0IGFuZCBzdWJzdGl0dXRlLiA8L3A+CitTdWJzdGl0dXRpbmcKKworPC9wPgorPHVsPgorCTxsaT48ZW0+JkRlbHRhO1MgPSAmbXU7UDxzdWI+bDwvc3ViPiAmbWludXM7ICZiZXRhOzxzdWI+bDwvc3ViPgorCVMgaSArICZzaWdtYTtSICZtaW51czsgJm11OyBTPC9lbT48L2xpPgorCTxsaT48ZW0+JkRlbHRhO0UgPSAmYmV0YTtTIGkgJm1pbnVzOyAmZXBzaWxvbjtFICZtaW51czsgJm11O0U8L2VtPjwvbGk+CisJPGxpPjxlbT4mRGVsdGE7SSA9ICZlcHNpbG9uO0UgJm1pbnVzOyAmZ2FtbWE7SQorCSZtaW51czsgKCZtdTsrJm11OzxzdWI+aTwvc3ViPilJIDwvZW0+PC9saT4KKwk8bGk+PGVtPiZEZWx0YTtSPSAmZ2FtbWE7SSZtaW51czsgJnNpZ21hO1IKKwkmbWludXM7ICZtdTtSPC9lbT48L2xpPgorPC91bD4KKworQ29udGludWluZyB3aXRoCis8ZW0+IGkgPSBJL1A8c3ViPmw8L3N1Yj48L2VtPgorLCB3ZSBoYXZlOgorPHVsPgorCTxsaT48ZW0+JkRlbHRhO1MgPSAmbXU7UDxzdWI+bDwvc3ViPiAmbWludXM7ICgmYmV0YTs8c3ViPmw8L3N1Yj4vUDxzdWI+bDwvc3ViPilTSQorCSsgJnNpZ21hO1IgJm1pbnVzOyAmbXU7IFM8L2VtPjwvbGk+CisJPGxpPjxlbT4mRGVsdGE7RSA9ICgmYmV0YTs8c3ViPmw8L3N1Yj4vUDxzdWI+bDwvc3ViPilTSQorCSZtaW51czsgJmVwc2lsb247RSAmbWludXM7ICZtdTtFPC9lbT48L2xpPgorCTxsaT48ZW0+JkRlbHRhO0kgPSAmZXBzaWxvbjtFICZtaW51czsgJmdhbW1hO0kKKwkmbWludXM7ICgmbXU7KyZtdTs8c3ViPmk8L3N1Yj4pSSA8L2VtPjwvbGk+CisJPGxpPjxlbT4mRGVsdGE7Uj0gJmdhbW1hO0kgJm1pbnVzOyAmc2lnbWE7UgorCSZtaW51czsgJm11O1I8L2VtPjwvbGk+Cis8L3VsPgorCitMZXR0aW5nCis8ZW0+JmJldGE7PHN1cD4qPC9zdXA+ID0gJmJldGE7PHN1Yj5sPC9zdWI+L1A8c3ViPmw8L3N1Yj4gPSAmYmV0YTsKKyhkPHN1Yj5sPC9zdWI+LyhBUERQPHN1Yj5sPC9zdWI+KSkgPC9lbT4KK2dpdmVzOgorCis8dWw+CisJPGxpPjxlbT4mRGVsdGE7UyA9ICZtdTtQPHN1Yj5sPC9zdWI+ICZtaW51czsgJmJldGE7PHN1cD4qPC9zdXA+CisJUyBJICsgJnNpZ21hO1IgJm1pbnVzOyAmbXU7IFM8L2VtPjwvbGk+CisJPGxpPjxlbT4mRGVsdGE7RSA9ICZiZXRhOzxzdXA+Kjwvc3VwPiBTIEkgJm1pbnVzOyAmZXBzaWxvbjtFCisJJm1pbnVzOyAmbXU7RTwvZW0+PC9saT4KKwk8bGk+PGVtPiZEZWx0YTtJID0gJmVwc2lsb247RSAmbWludXM7ICZnYW1tYTtJCisJJm1pbnVzOyAoJm11OysmbXU7PHN1Yj5pPC9zdWI+KUkgPC9lbT48L2xpPgorCTxsaT48ZW0+JkRlbHRhO1I9ICZnYW1tYTtJICZtaW51czsgJnNpZ21hO1IKKwkmbWludXM7ICZtdTtSPC9lbT48L2xpPgorPC91bD4KK1RTRgorPHVsPgorCTxsaT48ZW0+VFNGPHN1Yj5sPC9zdWI+ID0gKChTK0UrSStSKS9BcmVhPHN1Yj5sPC9zdWI+KSAvCisJKFAvQXJlYShTK0UrSStSKSk8L2VtPjwvbGk+CisJPGxpPjxlbT5UU0Y8c3ViPmw8L3N1Yj4gPSAoMS9BcmVhPHN1Yj5sPC9zdWI+KSAvIChQL0FyZWEgKTwvZW0+PC9saT4KKwk8bGk+PGVtPlRTRjxzdWI+bDwvc3ViPiA9IEFyZWEgLyAoUCAqQXJlYTxzdWI+bDwvc3ViPiApPC9lbT48L2xpPgorCTxsaT48ZW0+VFNGPHN1Yj5sPC9zdWI+ID0gKDEgLyBQKSogKEFyZWEvQXJlYTxzdWI+bDwvc3ViPiApPC9lbT48L2xpPgorPC91bD4KKzxoMz5OZWlnaGJvcmluZyBJbmZlY3Rpb3VzIFBvcHVsYXRpb25zPC9oMz4KKzwvcD4KKzx1bD4KKwk8bGk+PGVtPiZEZWx0YTtTID0gJm11O1A8c3ViPmw8L3N1Yj4gJm1pbnVzOyAmYmV0YTs8c3VwPio8L3N1cD4KKwlTIChJICsgSTxzdWI+bmVpZ2hib3I8L3N1Yj4oKSApICsgJnNpZ21hO1IgJm1pbnVzOyAmbXU7IFM8L2VtPjwvbGk+CisJPGxpPjxlbT4mRGVsdGE7RSA9ICZiZXRhOzxzdXA+Kjwvc3VwPiBTIChJICsgSTxzdWI+bmVpZ2hib3I8L3N1Yj4oKQorCSkgJm1pbnVzOyAmZXBzaWxvbjtFICZtaW51czsgJm11O0U8L2VtPjwvbGk+CisJPGxpPjxlbT4mRGVsdGE7SSA9ICZlcHNpbG9uO0UgJm1pbnVzOyAmZ2FtbWE7SQorCSZtaW51czsgKCZtdTsrJm11OzxzdWI+aTwvc3ViPilJIDwvZW0+PC9saT4KKwk8bGk+PGVtPiZEZWx0YTtSPSAmZ2FtbWE7SSAmbWludXM7ICZzaWdtYTtSCisJJm1pbnVzOyAmbXU7UjwvZW0+PC9saT4KKzwvdWw+CisKK1NwZWNpZmljIHN0YXRpc3RpY3Mgb24gdGhlIHRvdGFsIG51bWJlciBvZiBiaXJ0aHMsIGRlYXRocyBhbmQgZGVhdGhzIGR1ZQordG8gdGhlIGRpc2Vhc2UgY2FuIGJlIGNvbXB1dGVkIGJ5IGFkZGluZyB0aGUgYXBwcm9wcmlhdGUgdGVybXMgb2YgdGhlCitlcXVhdGlvbnMgYWJvdmUuCis8dWw+CisJPGxpPjxlbT5CPSAmbXU7KFMgKyBFICsgSSArIFIpPC9lbT4sIGlzIHRoZSBudW1iZXIgb2YgPGVtPkJpcnRoczwvZW0+CisJPC9saT4KKwk8bGk+PGVtPkQgPSAmbXU7UyArICZtdTtFICsgKCZtdTsgKyAmbXU7PHN1Yj5pPC9zdWI+KUkKKwkrICZtdTtSPC9lbT4saXMgdGhlIHRvdGFsIG51bWJlciBvZiA8ZW0+RGVhdGhzPC9lbT48L2xpPgorCTxsaT48ZW0+REQ9ICZtdTs8c3ViPmk8L3N1Yj4gSTwvZW0+LCBpcyB0aGUgbnVtYmVyIG9mCisJPGVtPkRpc2Vhc2UgRGVhdGhzPC9lbT48L2xpPgorPC91bD4KKzwvYm9keT4KKzwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC9lcGlkZW1pb2xvZ2ljYWxtb2RlbGluZy9zaW1hdGguaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2VwaWRlbWlvbG9naWNhbG1vZGVsaW5nL3NpbWF0aC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg2ZTBhNTAKLS0tIC9kZXYvbnVsbAorKysgYi9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC9lcGlkZW1pb2xvZ2ljYWxtb2RlbGluZy9zaW1hdGguaHRtbApAQCAtMCwwICsxLDI1NyBAQAorPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL2h0bWw0L2xvb3NlLmR0ZCI+Cis8aHRtbD4KKzxoZWFkPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9SVNPLTg4NTktMSI+Cis8dGl0bGU+U0kgRGlzZWFzZSBNb2RlbCBNYXRoZW1hdGljczwvdGl0bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxoMT5TSShTKSBEaXNlYXNlIE1vZGVsIE1hdGhlbWF0aWNzPC9oMT4KKzxpbWcgc3JjPSJpbWFnZXMvc2lzLmdpZiIgYWxpZ249Q0VOVEVSIEhTUEFDRT0xMCBWU1BBQ0U9MTAgYm9yZGVyPTA+Cis8cD5UaGUgYmFzaWMgPGVtPlNJPC9lbT4gKFN1c2NlcHRpYmxlLCBJbmZlY3Rpb3VzKQorYW5kIDxlbT5TSVM8L2VtPiAoU3VzY2VwdGlibGUsIEluZmVjdGlvdXMgU3VzY2VwdGlibGUpIAorZGlzZWFzZSBtb2RlbHMgYXNzdW1lIGEgdW5pZm9ybSBwb3B1bGF0aW9uIAorYXQgYSBzaW5nbGUgbG9jYXRpb24gYW5kIHRoYXQgdGhlCitwb3B1bGF0aW9uIG1lbWJlcnMgYXJlIHdlbGwgIm1peGVkIiwgbWVhbmluZyB0aGF0IHRoZXkgYXJlIGVxdWFsbHkKK2xpa2VseSB0byBtZWV0IGFuZCBpbmZlY3QgZWFjaCBvdGhlci4gVGhpcyBtb2RlbCwgZm9yIGEgbm9ybWFsaXplZAorcG9wdWxhdGlvbiwgY2FuIGJlIGRlZmluZWQgYnkgdGhlIHR3byBkaWZmZXJlbmNlIGVxdWF0aW9ucyBiZWxvdzoKKzx1bD4KKwk8bGk+PGVtPiZEZWx0YTtzID0gJm11OyAmbWludXM7ICZiZXRhO3MgaSArICZnYW1tYTtpICZtaW51czsKKwkmbXU7czwvZW0+PC9saT4KKwk8bGk+PGVtPiZEZWx0YTtpID0gJmJldGE7cyBpICZtaW51czsgJmdhbW1hO2kgJm1pbnVzOyAmbXU7aTwvZW0+PC9saT4KKzwvdWw+Cis8cD5XaGVyZToKKzx1bD4KKwk8bGk+PGVtPnM8L2VtPiBpcyB0aGUgcHJvcG9ydGlvbiBvZiB0aGUgcG9wdWxhdGlvbiA8ZW0+U3VzY2VwdGlibGU8L2VtPiB0byB0aGUgZGlzZWFzZS4gPC9saT4KKwk8bGk+PGVtPmk8L2VtPiBpcyB0aGUgcHJvcG9ydGlvbiBvZiB0aGUgcG9wdWxhdGlvbiB0aGF0IGlzIDxlbT5JbmZlY3Rpb3VzPC9lbT48L2xpPgorCTxsaT48ZW0+Jm11OzwvZW0+IGJvdGggdGhlIHJhdGUgb2YgaW1taWdyYXRpb24gKGUuZy4sIGJ5IGJpcnRoKSBhbmQgZW1pZ3JhdGlvbgorCQkoZS5nLiwgYnkgZGVhdGgpIGZyb20gdGhlIHBvcHVsYXRpb24uIFRoZXNlIHJhdGVzIGFyZSBhc3N1bWVkIHRvIGJlIGVxdWFsCisJCW92ZXIgdGhlIHRpbWUgcGVyaW9kIG9mIGludGVyZXN0ICh0aGlzIHNpbXBsaWZpZXMgdGhlIG1hdGhlbWF0aWNzKS48L2xpPgorCTxsaT48ZW0+JmJldGE7PC9lbT4gaXMgdGhlIGRpc2Vhc2UgdHJhbnNtaXNzaW9uIChpbmZlY3Rpb24pIHJhdGUuCisJVGhlIHJhdGUgYXQgd2hpY2ggaW5mZWN0aW91cyBpbmRpdmlkdWFscyBpbmZlY3Qgc3VzY2VwdGlibGUgaW5kaXZpZHVhbHMuIE9uY2UKKwlpbmZlY3RlZCwgc3VzY2VwdGlibGUgaW5kaXZpZHVhbHMgaW5zdGFudGx5IGJlY29tZSBpbmZlY3Rpb3VzIHRoZW1zZWx2ZXMuIEluIHRoZSBTVEVNIAorCW5ldyBkaXNlYXNlIHdpemFyZCwgPGVtPiZiZXRhOzwvZW0+IGlzIHNwZWNpZmllZCB1c2luZyAgdGhlICJUcmFuc21pc3Npb24gUmF0ZSIgcHJvcGVydHkuPC9saT4KKwk8bGk+JmdhbW1hOyBpcyB0aGUgcmF0ZSBhdCB3aGljaCBpbmRpdmlkdWFscyBjbGVhciBpbmZlY3Rpb24uIEluIHRoaXMgbW9kZWwgdGhlc2UKKwkJaW5kaXZpZHVhbHMgYmVjb21lIHN1c2NlcHRpYmxlIGFnYWluIGFmdGVyIGNsZWFyaW5nIGluZmVjdGlvbi4gSW4gYSBwdXJlIDxlbT5TSTwvZW0+IG1vZGVsLAorCQl0aGlzIHJhdGUgaXMgMC4gSW4gdGhlIFNURU0gIG5ldyBkaXNlYXNlIHdpemFyZCwgPGVtPiZnYW1tYTs8L2VtPiBpcyBzcGVjaWZpZWQgdXNpbmcgCisJCXRoZSAiSW5mZWN0aW91cyBSZWNvdmVyeSBSYXRlIiBwcm9wZXJ0eS48L2xpPgorPC91bD4KKzwvcD4KKzxwPkluIHRoZSBmaXJzdCBlcXVhdGlvbiwgdGhlIDxlbT5TdXNjZXB0aWJsZTwvZW0+IHBvcHVsYXRpb24KK2luY3JlYXNlcyB3aGVuIG5ldyBtZW1iZXJzIGFyZSBib3JuLiBUaGlzIHZhbHVlIGlzIHRoZSBiaXJ0aCByYXRlICZtdTsKK211bHRpcGxpZWQgYnkgdGhlIHRvdGFsIHBvcHVsYXRpb24gd2hpY2gsIHNpbmNlIHRoZSB2YWx1ZXMgYXJlIG5vcm1hbGl6ZWQsIGlzIDEuIEl0IGFsc28gaW5jcmVhc2VzIAorZHVlIHRvIDxlbT5JbmZlY3Rpb3VzPC9lbT4gcG9wdWxhdGlvbiBtZW1iZXJzIHJlY292ZXJpbmcuIFRoZSA8ZW0+U3VzY2VwdGlibGU8L2VtPiBwb3B1bGF0aW9uCitkZWNyZWFzZXMgYnkgbWVtYmVycyB3aG8gZGllLiBUaGF0IHZhbHVlIGlzICZtdTssIHRoZSBtb3J0YWxpdHkgcmF0ZSwKK211bHRpcGxpZWQgYnkgdGhlIDxlbT5TdXNjZXB0aWJsZTwvZW0+IHBvcHVsYXRpb24sIDxlbT5zPC9lbT4uIFRoZSA8ZW0+U3VzY2VwdGlibGU8L2VtPgorcG9wdWxhdGlvbiBhbHNvIGRlY3JlYXNlcyBieSBoYXZpbmcgbWVtYmVycyBiZWNvbWUgPGVtPmluZmVjdGVkPC9lbT4uCitUaGUgcHJvZHVjdCBvZiA8ZW0+JmJldGE7PC9lbT4gYW5kIDxlbT5pPC9lbT4gZ2l2ZXMgdGhlIG5vcm1hbGl6ZWQKK251bWJlciBvZiA8ZW0+U3VzY2VwdGlibGU8L2VtPiBwb3B1bGF0aW9uIG1lbWJlcnMgdGhhdCB3b3VsZCBiZWNvbWUKK2luZmVjdGVkIGZvciBlYWNoIDxlbT5JbmZlY3Rpb3VzPC9lbT4gcG9wdWxhdGlvbiBtZW1iZXIgYXNzdW1pbmcgYWxsCitwb3B1bGF0aW9uIG1lbWJlcnMgYXJlIGluIHRoZSA8ZW0+U3VzY2VwdGlibGU8L2VtPiBzdGF0ZS4gTXVsdGlwbHlpbmcKK3RoYXQgYnkgPGVtPnM8L2VtPiwgdGhlIGZyYWN0aW9uIHRoYXQgYWN0dWFsbHkgYXJlIDxlbT5TdXNjZXB0aWJsZTwvZW0+LAorZ2l2ZXMgdGhlIG5vcm1hbGl6ZWQgYW1vdW50IHRoYXQgYmVjb21lIDxlbT5JbmZlY3Rpb3VzPC9lbT4uPC9wPgorPHA+SW4gdGhlIHNlY29uZCBlcXVhdGlvbiwgdGhlIDxlbT5JbmZlY3Rpb3VzPC9lbT4gcG9wdWxhdGlvbgoraW5jcmVhc2VzIGJ5IHRoZSBudW1iZXIgb2YgPGVtPlN1c2NlcHRpYmxlPC9lbT4gcG9wdWxhdGlvbiBtZW1iZXJzIHRoYXQKK2JlY29tZSA8ZW0+SW5mZWN0aW91czwvZW0+ICh0aGUgZmlyc3QgdGVybSkuIEl0IGFsc28gZGVjcmVhc2VzIGJ5IHRoZQorcHJvcG9ydGlvbiB0aGF0IDxlbT5SZWNvdmVyPC9lbT4gZnJvbSB0aGUgZGlzZWFzZSAobWlkZGxlIHRlcm0pIGFuZCBieQordGhlIHByb3BvcnRpb24gdGhhdCBkaWUgKGxhc3QgdGVybSkuPC9wPgorPHA+RnJlcXVlbnRseSwgYmVpbmcgaW5mZWN0ZWQgYnkgYSBkaXNlYXNlIHdpbGwgaW5jcmVhc2UgdGhlCitsaWtlbGlob29kIHRoYXQgYSBwb3B1bGF0aW9uIG1lbWJlciB3aWxsIGRpZS4gVGhlIG1vZGVsIGFib3ZlIG5lZWRzIHRvCitiZSBlbmhhbmNlZCB0byBpbmNsdWRlIHRoZSBsaWtlbGlob29kIG9mIGEgZmF0YWwgaW5mZWN0aW9uIGFuZCBhCitwb3RlbnRpYWxseSBkaWZmZXJlbnQgcmF0ZSBhdCB3aGljaCBpbmZlY3RlZCBtZW1iZXJzIGRpZS48L3A+Cis8cD5MZXQKKzx1bD4KKwk8bGk+PGVtPiZtdTs8c3ViPmk8L3N1Yj48L2VtPiBiZSB0aGUgPGVtPkluZmVjdGlvdXMgTW9ydGFsaXR5CisJUmF0ZTwvZW0+LiBUaGlzIGlzIHRoZSBpbmNyZWFzZWQgcmF0ZSBhdCB3aGljaCBpbmZlY3RlZCBwb3B1bGF0aW9uIG1lbWJlcnMgZGllCisJc3BlY2lmaWNhbGx5IGR1ZSB0byB0aGUgZGlzZWFzZS4gVGhlIGFjdHVhbCBtb3J0YWxpdHkgcmF0ZSBhdCB3aGljaCBpbmZlY3RlZCBwb3B1bGF0aW9uCisJbWVtYmVycyBkaWUgaXMgPGVtPiZtdTsrJm11OzxzdWI+aTwvc3ViPjwvZW0+ICh0aGUgYmFja2dyb3VuZCBtb3J0YWxpdHkgcmF0ZSBwbHVzIAorCXRoZSBpbmZlY3Rpb3VzIG1vcnRhbGl0eSByYXRlKSA8L2xpPgorPC91bD4KKzwvcD4KKworPHA+V2UgbW9kaWZ5IG91ciBtb2RlbCB0byBpbmNsdWRlIHRoaXMgYWRkaXRpb25hbCByYXRlCisKKzx1bD4KKwk8bGk+PGVtPiZEZWx0YTtzID0gJm11O1AgJm1pbnVzOyAmYmV0YTtzIGkgKyAmZ2FtbWE7aQorCSZtaW51czsgJm11OyBzPC9lbT48L2xpPgorCTxsaT48ZW0+JkRlbHRhO2kgPSAmYmV0YTtzIGkgJm1pbnVzOworCSZnYW1tYTtpICZtaW51czsgKCZtdTsrJm11OzxzdWI+aTwvc3ViPilpPC9lbT48L2xpPgorPC91bD4KKzwvcD4KKzxoMz5TcGF0aWFsIEFkYXB0YXRpb248L2gzPgorPHA+VGhlICJTSSIgZGlzZWFzZSBtb2RlbCBjb21wdXRhdGlvbnMgaW4gU1RFTSBlbmhhbmNlIHRoZXNlCitlcXVhdGlvbnMgYnkgYWRhcHRpbmcgdGhlbSB0byBwb3B1bGF0aW9ucyB0aGF0IGFyZSBzcGF0aWFsbHkKK2Rpc3RyaWJ1dGVkLiBUaGlzIHJlbGF4ZXMgdGhlIGFzc3VtcHRpb24gdGhhdCB0aGUgcG9wdWxhdGlvbnMgYXJlIGF0IGEKK3NpbmdsZSBsb2NhdGlvbiBhbmQgb3BlbnMgdXAgdGhlIHBvc3NpYmlsaXR5IHRoYXQgZGlmZmVyZW50IGxvY2F0aW9ucworY291bGQgaGF2ZSBkaWZmZXJlbnQgYXJlYXMgYW5kIG51bWJlcnMgb2YgcG9wdWxhdGlvbiBtZW1iZXJzIChpLmUuLAorZGlmZmVyZW50IHBvcHVsYXRpb24gZGVuc2l0aWVzKS4gVG8gYWNjb21tb2RhdGUgdGhpcyBzaXR1YXRpb24gU1RFTQorbWFpbnRhaW5zIHNlcGFyYXRlIGRpc2Vhc2Ugc3RhdGUgdmFsdWVzIGZvciBlYWNoIGxvY2F0aW9uIGFuZCB1c2VzCit1bm5vcm1hbGl6ZWQgdmVyc2lvbnMgb2YgdGhlIGVxdWF0aW9ucyBwcmVzZW50ZWQgYWJvdmUuIFdlIGRldmVsb3AgdGhvc2UKK2JlbG93LgorPHA+VG8gYWNjb3VudCBmb3IgcG9wdWxhdGlvbiBkaWZmZXJlbmNlcyBhdCBkaWZmZXJlbnQgbG9jYXRpb25zLCB3ZQorZGVmaW5lIGEgbmV3IHBhcmFtZXRlciA8ZW0+UDxzdWI+bDwvc3ViPjwvZW0+IHdoaWNoIGlzIHRoZSBudW1iZXIgb2YKK3BvcHVsYXRpb24gbWVtYmVycyBhdCBsb2NhdGlvbiA8ZW0+bDwvZW0+IChOb3RlOiA8ZW0+UDxzdWI+bDwvc3ViPgorPSBTPHN1Yj5sPC9zdWI+ICsgSTxzdWI+bDwvc3ViPjwvZW0+KS4gV2UgYWxzbyBuZWVkIHRvIGFjY291bnQgZm9yIHZhcmlhYmlsaXR5IGluIHRoZSBkaXNlYXNlCit0cmFuc21pc3Npb24gKGluZmVjdGlvbikgcmF0ZSwgJmJldGE7LCBkdWUgdG8gcG90ZW50aWFsbHkgZGlmZmVyZW50Citwb3B1bGF0aW9uIGRlbnNpdGllcy4gVGhpcyBtb2RpZmljYXRpb24gaXMgYmFzZWQgdXBvbiB0aGUgYXNzdW1wdGlvbgordGhhdCBsb2NhdGlvbnMgd2l0aCBncmVhdGVyIHBvcHVsYXRpb24gZGVuc2l0aWVzIHdpbGwgaGF2ZSBhIGhpZ2hlcgorZWZmZWN0aXZlIHRyYW5zbWlzc2lvbiByYXRlcyB0aGFuIGxvY2F0aW9ucyB3aXRoIGxvd2VyIGRlbnNpdGllcyAoaS5lLiwKK29uZSB2YWx1ZSBjYW4ndCBiZSB1c2VkIGZvciBhbGwgbG9jYXRpb25zKS4gVGh1cywgd2UgbmVlZCB0byByZXBsYWNlIHRoZQorPGVtPiZiZXRhOzwvZW0+IGluIHRoZSBub24tc3BhdGlhbCB2ZXJzaW9ucyBvZiB0aGUgZXF1YXRpb25zIHdpdGggYSA8ZW0+JmJldGE7Cis8c3ViPmw8L3N1Yj48L2VtPiB0aGF0IGlzIHNwZWNpZmljIHRvIHRoZSBsb2NhdGlvbi48L3A+CitNYWtpbmcgdGhlIHN1YnN0aXR1dGlvbiBmb3IKKzxlbT4mYmV0YTs8L2VtPgorYW5kIG11bHRpcGx5IGJvdGggc2lkZXMgb2YgdGhlIGVxdWF0aW9ucyBieQorPGVtPlA8c3ViPmw8L3N1Yj48L2VtPgorLCB3ZSBvYnRhaW46Cis8L3A+CisKKzx1bD4KKwk8bGk+PGVtPiZEZWx0YTtzIFA8c3ViPmw8L3N1Yj49ICZtdTtQPHN1Yj5sPC9zdWI+ICZtaW51czsKKwkmYmV0YTs8c3ViPmw8L3N1Yj4gcyBpIFA8c3ViPmw8L3N1Yj4gKyAmZ2FtbWE7IGkgUDxzdWI+bDwvc3ViPgorCSZtaW51czsgJm11OyBzIFA8c3ViPmw8L3N1Yj48L2VtPjwvbGk+CisJPGxpPjxlbT4mRGVsdGE7aSBQPHN1Yj5sPC9zdWI+ID0gJmJldGE7PHN1Yj5sPC9zdWI+CisJcyBpIFA8c3ViPmw8L3N1Yj4gJm1pbnVzOyAmZ2FtbWE7IGkgUDxzdWI+bDwvc3ViPiAmbWludXM7CisJKCZtdTsrJm11OzxzdWI+aTwvc3ViPmkgUDxzdWI+bDwvc3ViPjwvZW0+PC9saT4KKwk8L2xpPgorPC91bD4KKworV2UgY2hvb3NlIHRoZSB2YWx1ZSBmb3IKKzxlbT4mYmV0YTs8c3ViPmw8L3N1Yj48L2VtPgordG8gYmUgb3JpZ2luYWwKKzxlbT4mYmV0YTs8L2VtPgorc2NhbGVkIGJ5IHRoZSByYXRpbyBiZXR3ZWVuIHRoZSBwb3B1bGF0aW9uIGRlbnNpdHkgYXQgdGhlIGxvY2F0aW9uIGFuZAordGhlIGF2ZXJhZ2UgcG9wdWxhdGlvbiBkZW5zaXR5IG9mIGFsbCBsb2NhdGlvbnMuCis8dWw+CisJPGxpPjxlbT4gJmJldGE7PHN1Yj5sPC9zdWI+ID0gJmJldGE7IGQ8c3ViPmw8L3N1Yj4vQVBEPC9lbT48L2xpPgorPC91bD4KK1doZXJlCis8ZW0+ZDxzdWI+bDwvc3ViPjwvZW0+CitpcyB0aGUgcG9wdWxhdGlvbiBkZW5zaXR5IGF0IGxvY2F0aW9uCis8ZW0+bDwvZW0+CissIGFuZAorPGVtPkFQRDwvZW0+CitpcyB0aGUgYXZlcmFnZSBwb3B1bGF0aW9uIGRlbnNpdHkgZm9yIGFsbCBsb2NhdGlvbnMuCisKKzxwPkxldCA8ZW0+UzxzdWI+bDwvc3ViPiA9IHMgUDxzdWI+bDwvc3ViPjwvZW0+IGJlIHRoZSBudW1iZXIgb2YgPGVtPlN1c2NlcHRpYmxlPC9lbT4KK3BvcHVsYXRpb24gbWVtYmVycyBhdCBsb2NhdGlvbiA8ZW0+bDwvZW0+LiAsIGxldCA8ZW0+STxzdWI+bDwvc3ViPgorPSBpIFA8c3ViPmw8L3N1Yj48L2VtPiBiZSB0aGUgbnVtYmVyIG9mIHBvcHVsYXRpb24gbWVtYmVycyBhdCBsb2NhdGlvbiA8ZW0+bDwvZW0+Cit0aGF0IGFyZSA8ZW0+SW5mZWN0aW91czwvZW0+IChib3RoIHN0YXRlcyBjb21iaW5lZCkuIEZvciByZWFkYWJpbGl0eSwgd2UKK2Ryb3AgdGhlIDxlbT5sPC9lbT4gc3Vic2NyaXB0IGFuZCBzdWJzdGl0dXRlLjwvcD4KKworPHVsPgorCTxsaT48ZW0+JkRlbHRhO1MgPSAmbXU7UDxzdWI+bDwvc3ViPiAmbWludXM7ICZiZXRhOzxzdWI+bDwvc3ViPgorCVMgaSArICZnYW1tYTtJICAmbWludXM7ICZtdTsgUzwvZW0+PC9saT4KKwk8bGk+PGVtPiZEZWx0YTtJID0gJmJldGE7PHN1Yj5sPC9zdWI+IFMgaQorCSZtaW51czsgJmdhbW1hO0kgJm1pbnVzOyAoJm11OysmbXU7PHN1Yj5pPC9zdWI+KUkgIDwvZW0+PC9saT4KKzwvdWw+CisKK0NvbnRpbnVpbmcgd2l0aAorPGVtPiBpID0gSS9QPHN1Yj5sPC9zdWI+PC9lbT4KKywgd2UgaGF2ZToKKzx1bD4KKwk8bGk+PGVtPiZEZWx0YTtTID0gJm11O1A8c3ViPmw8L3N1Yj4gJm1pbnVzOyAoJmJldGE7PHN1Yj5sPC9zdWI+L1A8c3ViPmw8L3N1Yj4pCisJUyBJICsgJmdhbW1hO0kgJm1pbnVzOyAmbXU7IFM8L2VtPjwvbGk+CisJPGxpPjxlbT4mRGVsdGE7SSA9ICgmYmV0YTs8c3ViPmw8L3N1Yj4vUDxzdWI+bDwvc3ViPikKKwlTIEkgJm1pbnVzOyAmZ2FtbWE7SSAmbWludXM7ICgmbXU7KyZtdTs8c3ViPmk8L3N1Yj4pSSA8L2VtPjwvbGk+Cis8L3VsPgorCitMZXR0aW5nCis8ZW0+JmJldGE7PHN1cD4qPC9zdXA+ID0gJmJldGE7PHN1Yj5sPC9zdWI+L1A8c3ViPmw8L3N1Yj4gPSAmYmV0YTsKKyhkPHN1Yj5sPC9zdWI+LyhBUERQPHN1Yj5sPC9zdWI+KSkgPC9lbT4KK2dpdmVzOgorCis8dWw+CisJPGxpPjxlbT4mRGVsdGE7UyA9ICZtdTtQPHN1Yj5sPC9zdWI+ICZtaW51czsgJmJldGE7PHN1cD4qPC9zdXA+CisJUyBJICsgJmdhbW1hO0kgJm1pbnVzOyAmbXU7IFM8L2VtPjwvbGk+CisJPGxpPjxlbT4mRGVsdGE7SSA9ICZiZXRhOzxzdXA+Kjwvc3VwPiBTIEkKKwkmbWludXM7ICZnYW1tYTtJICZtaW51czsgKCZtdTsrJm11OzxzdWI+aTwvc3ViPilJIDwvZW0+PC9saT4KKzwvdWw+CisKKzxwPkNvbXB1dGluZyA8ZW0+JmJldGE7PHN1cD4qPC9zdXA+PC9lbT4gaXMgc3RyYWlnaHRmb3J3YXJkLiBMZXQgPGVtPlRTRjxzdWI+bDwvc3ViPgorPSAoZDxzdWI+bDwvc3ViPi8oQVBEUDxzdWI+bDwvc3ViPik8L2VtPiBiZSB0aGUgPGVtPnRyYW5zbWlzc2lvbiBzY2FsZQorZmFjdG9yPC9lbT4gYXQgbG9jYXRpb24gPGVtPmw8L2VtPi48L3A+Cis8cD5UaHVzCis8dWw+CisJPGxpPjxlbT4mYmV0YTs8c3VwPio8L3N1cD4gPSAmYmV0YTsgVFNGPHN1Yj5sPC9zdWI+PC9lbT48L2xpPgorPC91bD4KKzwvcD4KKzxwPlN1YnN0aXR1dGluZyA8ZW0+UDxzdWI+bDwvc3ViPiA9IFMgKyBJPC9lbT4sIDxlbT5BUEQgPQorUC9BcmVhPC9lbT4gYW5kIDxlbT5kPHN1Yj5sPC9zdWI+ID0gKFMrSSkvQXJlYTxzdWI+bDwvc3ViPjwvZW0+LCB3aGVyZSA8ZW0+UDwvZW0+CitpcyB0aGUgdG90YWwgcG9wdWxhdGlvbiBmb3IgYWxsIGxvY2F0aW9ucywgPGVtPkFyZWE8c3ViPmw8L3N1Yj48L2VtPiBpcwordGhlIGFyZWEgb2YgbG9jYXRpb24gPGVtPmw8L2VtPiwgYW5kIDxlbT5BcmVhPC9lbT4gaXMgdGhlIHRvdGFsIGFyZWEgb2YKK2FsbCBsb2NhdGlvbnMsIHdlIGdldDoKKzx1bD4KKwk8bGk+PGVtPlRTRjxzdWI+bDwvc3ViPiA9ICgoUytJKS9BcmVhPHN1Yj5sPC9zdWI+KSAvIChQL0FyZWEKKwkoUytJKSk8L2VtPjwvbGk+CisJPGxpPjxlbT5UU0Y8c3ViPmw8L3N1Yj4gPSAoMS9BcmVhPHN1Yj5sPC9zdWI+KSAvIChQL0FyZWEgKTwvZW0+PC9saT4KKwk8bGk+PGVtPlRTRjxzdWI+bDwvc3ViPiA9IEFyZWEgLyAoUCAqQXJlYTxzdWI+bDwvc3ViPiApPC9lbT48L2xpPgorCTxsaT48ZW0+VFNGPHN1Yj5sPC9zdWI+ID0gKDEgLyBQKSogKEFyZWEvQXJlYTxzdWI+bDwvc3ViPiApPC9lbT48L2xpPgorPC91bD4KK1NvIHRoZQorPGVtPlRTRjxzdWI+bDwvc3ViPjwvZW0+CitpcyB0aGUgcHJvZHVjdCBvZiB0aGUgcmVjaXByb2NhbCBvZiB0aGUgdG90YWwgcG9wdWxhdGlvbiBvZiBhbGwKK2xvY2F0aW9ucyBhbmQgdGhlIGNvbnN0YW50IHJhdGlvIGJldHdlZW4gdGhlIGFyZWEgb2YgdGhlIGxvY2F0aW9uIGFuZAordGhlIHRvdGFsIGFyZWEgb2YgYWxsIGxvY2F0aW9ucy4gVGhlIGZvcm1lciBjYW4gYmUgY29tcHV0ZWQgYnkKK2FjY3VtdWxhdGluZyB0aGUgcG9wdWxhdGlvbiBvZiBhbGwgbG9jYXRpb25zIGFzIHRoZXkgYXJlIGdlbmVyYXRlZCBhbmQKK3RoZSBsYXRlciByYXRpbyBjYW4gYmUgY29tcHV0ZWQgb25jZSBhdCB0aGUgc3RhcnQgb2YgdGhlIHNpbXVsYXRpb24uCis8L3A+CisKKzxoMz5OZWlnaGJvcmluZyBJbmZlY3Rpb3VzIFBvcHVsYXRpb25zPC9oMz4KKzxwPlRoZSBleHRlbnNpb24gb2YgdGhlIG5vbi1zcGF0aWFsIG1vZGVsIGludG8gYSBzcGF0aWFsIG9uZSBpbiBTVEVNCithbHNvIG5lZWRzIHRvIGFjY291bnQgZm9yIGluZmVjdGlvdXMgcG9wdWxhdGlvbiBtZW1iZXJzIHRoYXQgcmVzaWRlIGluIGEKK2xvY2F0aW9uJ3MgIm5laWdoYm9ycyIuIENvbnNpZGVyIGEgbG9jYXRpb24gd2l0aCBubyBpbmZlY3Rpb25zIHRoYXQgaXMKK3BoeXNpY2FsbHkgYWRqYWNlbnQgdG8gc2V2ZXJhbCBsb2NhdGlvbnMgdGhhdCBoYXZlIGxhcmdlIGluZmVjdGlvdXMKK3BvcHVsYXRpb25zLiBUaGlzIHBoeXNpY2FsIGFkamFjZW5jeSB3b3VsZCBuYXR1cmFsbHkgbGVhZCB0bworcG9wdWxhdGlvbi10by1wb3B1bGF0aW9uIGNvbnRhY3QgYW5kIGV2ZW50dWFsbHkgdG8gZGlzZWFzZSB0cmFuc21pc3Npb24uCitXZSBuZWVkIHRvIGZ1cnRoZXIgZXh0ZW5kIHRoZSBlcXVhdGlvbnMgd2UgYXJlIGhlcmUgdG8gaW5jb3Jwb3JhdGUgdGhpcworYXNwZWN0IG9mIGEgc3BhdGlhbGx5IGRpc3RyaWJ1dGVkIHBvcHVsYXRpb24uPC9wPgorPHA+SW4gU1RFTSwgYSBsb2NhdGlvbiBoYXMgYW5vdGhlciBsb2NhdGlvbiBhcyBhIG5laWdoYm9yIDxlbT5SZWxhdGlvbnNoaXA8L2VtPgordGhhdCBsaW5rcyBpdCB0byB0aGF0IGxvY2F0aW9uLiBJZiB0aGUgPGVtPlJlbGF0aW9uc2hpcDwvZW0+IHJlcHJlc2VudHMKK3RoZSBleGNoYW5nZSBvZiBvZiBwb3B1bGF0aW9uIG1lbWJlcnMgKGkuZS4sIHNvbWUga2luZCBvZiB0cmFuc3BvcnRhdGlvbgorcmVsYXRpb25zaGlwIGxpa2UgcGF0aHdheXMsIHJvYWRzIG9yIGFpciB0cmF2ZWwpIHRoZW4gaXQgd291bGQgYmUKK3Bvc3NpYmxlIGZvciA8ZW0+SW5mZWN0aW91czwvZW0+IHBvcHVsYXRpb24gbWVtYmVycyBmcm9tIGEgbmVpZ2hib3IgdG8KKyJ2aXNpdCIgYSBsb2NhdGlvbi4gV2UgbmVlZCB0byBhY2NvdW50IGZvciB0aGlzIHBvdGVudGlhbCBieSBpbmNyZWFzaW5nCit0aGUgImVmZmVjdGl2ZSIgPGVtPkluZmVjdGlvdXM8L2VtPiBwb3B1bGF0aW9uIGF0IGEgbG9jYXRpb24gd2hlbiBkb2luZworb3VyIGNvbXB1dGF0aW9ucy4gRWFjaCBSZWxhdGlvbnNoaXAgaGFzIGEgcmF0ZSBhdCB3aGljaCBwb3B1bGF0aW9uCittZW1iZXJzIHRyYXZlbCBmcm9tIG9uZSBsb2NhdGlvbiB0byBhbm90aGVyLiBJdCBpcyBhc3N1bWVkIHRoYXQgdGhlCit2aXNpdG9ycyB3b3VsZCBoYXZlIHRoZSBzYW1lIGxldmVsIG9mICJpbmZlY3Rpb3VzIGNvbnRhY3QiIGFzIGFuCitpbmZlY3Rpb3VzIG1lbWJlciBvZiB0aGUgcG9wdWxhdGlvbiBhdCB0aGUgY3VycmVudCBsb2NhdGlvbiAoaS5lLiwgdGhhdAordGhleSBjb3VsZCBjb3VsZCBiZSBjb3VudGVkIGFzIGFuIGluZmVjdGlvdXMgbWVtYmVyIG9mIHRoZSBwb3B1bGF0aW9uIGF0Cit0aGUgY3VycmVudCBsb2NhdGlvbikuPC9wPgorPHA+VGhlIGVxdWF0aW9ucyBiZWNvbWU6PC9wPgorPHVsPgorCTxsaT48ZW0+JkRlbHRhO1MgPSAmbXU7UDxzdWI+bDwvc3ViPiAmbWludXM7ICZiZXRhOzxzdXA+Kjwvc3VwPgorCVMgKEkgKyBJPHN1Yj5uZWlnaGJvcjwvc3ViPigpICkgKyAmZ2FtbWE7SSAmbWludXM7ICZtdTsgUzwvZW0+CisJPC9saT4KKwk8bGk+PGVtPiZEZWx0YTtJID0gJmJldGE7PHN1cD4qPC9zdXA+IFMgKEkKKwkrIEk8c3ViPm5laWdoYm9yPC9zdWI+KCkgKSAmbWludXM7ICZnYW1tYTtJICZtaW51czsgKCZtdTsrJm11OzxzdWI+aTwvc3ViPilJCisJPC9lbT48L2xpPgorPC91bD4KKzwvcD4KKzxwPldoZXJlCis8dWw+CisJPGxpPjxlbT5JPHN1Yj5uZWlnaGJvcjwvc3ViPigpID0gKCZzdW07IDxzdWI+bTwvc3ViPiBJIDxzdWI+bTwvc3ViPm1peGluZ2ZhY3RvcikvKCZzdW07PHN1Yj5tPC9zdWI+UDxzdWI+bTwvc3ViPm1peGluZ2ZhY3Rvcik8L2VtPgorCWlzIHRoZSBudW1iZXIgb2YgPGVtPkluZmVjdGlvdXM8L2VtPiB2aXNpdG9ycyBmcm9tIG5laWdoYm9yIDxlbT5tPC9lbT4uPC9saT4KKwk8bGk+PGVtPm1peGluZ2ZhY3RvcjwvZW0+IGlzIGEgY29uc3RhbnQgdGhhdCB2YXJpZXMgZGVwZW5kaW5nIG9uIHRoZSB0eXBlIG9mIHJlbGF0aW9uc2hpcC4gRm9yIG5laWdoYm9yaW5nIGxvY2F0aW9ucworCShpLmUuIHBlb3BsZSBtaWdyYXRpbmcgYWNyb3NzIGJvcmRlcikgU1RFTSB1c2VzIHRoZSAiUGh5cy5BZGouSW5mLlByb3BvcnRpb24iIHByb3BlcnR5IG9uIHRoZSBuZXcgZGlzZWFzZSAKKwl3aXphcmQgdG8gc3BlY2lmeSB0aGUgbWl4aW5nIGZhY3Rvci4gRm9yIHJvYWQgdHJhbnNwb3J0YXRpb24sIFNURU0gdXNlcyAiUm9hZC5OZXQuSW5mLlByb3BvcnRpb24iIHRvIAorCXNwZWNpZnkgdGhlIG1peGluZyBmYWN0b3IgZm9yIHJvYWRzIGJldHdlZW4gbG9jYXRpb25zLjwvbGk+CisJPGxpPlA8c3ViPm08L3N1Yj4gaXMgdGhlIG51bWJlciBvZiBwb3B1bGF0aW9uIG1lbWJlcnMgYXQgbmVpZ2hib3IKKwk8ZW0+bTwvZW0+PC9saT4KKwk8bGk+STxzdWI+bTwvc3ViPiBpcyB0aGUgbnVtYmVyIG9mIDxlbT5JbmZlY3Rpb3VzPC9lbT4gcG9wdWxhdGlvbgorCW1lbWJlcnMgYXQgbmVpZ2hib3IgPGVtPm08L2VtPjwvbGk+Cis8L3VsPgorPC9wPgorPHA+U3BlY2lmaWMgc3RhdGlzdGljcyBvbiB0aGUgdG90YWwgbnVtYmVyIG9mIGJpcnRocywgZGVhdGhzIGFuZAorZGVhdGhzIGR1ZSB0byB0aGUgZGlzZWFzZSBjYW4gYmUgY29tcHV0ZWQgYnkgYWRkaW5nIHRoZSBhcHByb3ByaWF0ZQordGVybXMgb2YgdGhlIGVxdWF0aW9ucyBhYm92ZS4KKzx1bD4KKwk8bGk+PGVtPkI9ICZtdTsgKFMgKyBJKTwvZW0+LCBpcyB0aGUgbnVtYmVyIG9mIDxlbT5CaXJ0aHM8L2VtPjwvbGk+CisJPGxpPjxlbT5EID0gJm11OyBTICsgKCZtdTsgKyAmbXU7PHN1Yj5pPC9zdWI+ICk8L2VtPixpcyB0aGUgdG90YWwgbnVtYmVyIG9mIDxlbT5EZWF0aHM8L2VtPjwvbGk+CisJPGxpPjxlbT5ERD0gJm11OzxzdWI+aTwvc3ViPiBJPC9lbT4sIGlzIHRoZSBudW1iZXIgb2YKKwk8ZW0+RGlzZWFzZSBEZWF0aHM8L2VtPjwvbGk+Cis8L3VsPgorPC9wPgorCis8L2JvZHk+Cis8L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvZXBpZGVtaW9sb2dpY2FsbW9kZWxpbmcvc2lybWF0aC5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvZXBpZGVtaW9sb2dpY2FsbW9kZWxpbmcvc2lybWF0aC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUzMTdmMzcKLS0tIC9kZXYvbnVsbAorKysgYi9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC9lcGlkZW1pb2xvZ2ljYWxtb2RlbGluZy9zaXJtYXRoLmh0bWwKQEAgLTAsMCArMSwxNTggQEAKKzwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi9odG1sNC9sb29zZS5kdGQiPgorPGh0bWw+Cis8aGVhZD4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTEiPgorPHRpdGxlPlNJUiBEaXNlYXNlIE1vZGVsIE1hdGhlbWF0aWNzPC90aXRsZT4KKzwvaGVhZD4KKzxib2R5PgorPGgxPlNJUihTKSBEaXNlYXNlIE1vZGVsIE1hdGhlbWF0aWNzPC9oMT4KKzxpbWcgc3JjPSJpbWFnZXMvc2lycy5naWYiIGFsaWduPUNFTlRFUiBIU1BBQ0U9MTAgVlNQQUNFPTEwIGJvcmRlcj0wIHdpZHRoPTgwJT4KKworPHA+VGhlIGJhc2ljIDxlbT5TSVI8L2VtPiAoU3VzY2VwdGlibGUsIEluZmVjdGlvdXMsIFJlbW92ZWQpCithbmQgIDxlbT5TSVJTPC9lbT4gKFN1c2NlcHRpYmxlLCBJbmZlY3Rpb3VzLCBSZWNvdmVyZWQsIFN1c2NlcHRpYmxlKQorZGlzZWFzZSBtb2RlbHMgYXNzdW1lIGEgdW5pZm9ybSBwb3B1bGF0aW9uIGF0IGEgc2luZ2xlIGxvY2F0aW9uIGFuZCB0aGF0Cit0aGUgcG9wdWxhdGlvbiBtZW1iZXJzIGFyZSB3ZWxsICJtaXhlZCIsIG1lYW5pbmcgdGhhdCB0aGV5IGFyZSBlcXVhbGx5CitsaWtlbHkgdG8gbWVldCBhbmQgaW5mZWN0IGVhY2ggb3RoZXIuIFRoaXMgbW9kZWwsIGZvciBhIG5vcm1hbGl6ZWQKK3BvcHVsYXRpb24sIGlzIGRlZmluZWQgYnkgdGhlIHRocmVlIGVxdWF0aW9ucyBiZWxvdzoKKzx1bD4KKwk8bGk+PGVtPiZEZWx0YTtzID0gJm11OyAmbWludXM7ICZiZXRhO3MgaSArICZzaWdtYTtyICZtaW51czsKKwkmbXU7czwvZW0+PC9saT4KKwk8bGk+PGVtPiZEZWx0YTtpID0gJmJldGE7cyBpICZtaW51czsgJmdhbW1hO2kgJm1pbnVzOyAmbXU7aTwvZW0+PC9saT4KKwk8bGk+PGVtPiZEZWx0YTtyID0gJmdhbW1hO2kgJm1pbnVzOyAmc2lnbWE7ciAmbWludXM7ICZtdTtyPC9lbT48L2xpPgorPC91bD4KKworPHA+V2hlcmU6Cis8dWw+CisJPGxpPjxlbT5zPC9lbT4gaXMgdGhlIHByb3BvcnRpb24gb2YgdGhlIHBvcHVsYXRpb24gdGhhdCBpcworCQk8ZW0+U3VzY2VwdGlibGU8L2VtPjwvbGk+CisJPGxpPjxlbT5pPC9lbT4gaXMgdGhlIHByb3BvcnRpb24gb2YgdGhlIHBvcHVsYXRpb24KKwkJdGhhdCBpcyA8ZW0+SW5mZWN0aW91czwvZW0+PC9saT4KKwk8bGk+PGVtPnI8L2VtPiBpcyB0aGUgcHJvcG9ydGlvbiBvZiB0aGUgcG9wdWxhdGlvbgorCQl0aGF0IGlzIDxlbT5SZW1vdmVkPC9lbT4gZnJvbSB0aGUgaW5mZWN0aW91cyBhbmQgc3VzY2VwdGlibGUgcG9wdWxhdGlvbnMsIAorCQlhbmQgdGhlcmVmb3JlIGNhbm5vdCBiZSBpbmZlY3RlZC48L2xpPgorCTxsaT48ZW0+Jm11OzwvZW0+IGJvdGggdGhlIHJhdGUgb2YgaW1taWdyYXRpb24gKGUuZy4sIGJ5IGJpcnRoKSBhbmQgZW1pZ3JhdGlvbgorCQkoZS5nLiwgYnkgZGVhdGgpIGZyb20gdGhlIHBvcHVsYXRpb24uIFRoZXNlIHJhdGVzIGFyZSBhc3N1bWVkIHRvIGJlIGVxdWFsCisJCW92ZXIgdGhlIHRpbWUgcGVyaW9kIG9mIGludGVyZXN0ICh0aGlzIHNpbXBsaWZpZXMgdGhlIG1hdGhlbWF0aWNzKS48L2xpPgorCTxsaT48ZW0+JmJldGE7PC9lbT4gaXMgdGhlIGRpc2Vhc2UgdHJhbnNtaXNzaW9uIChpbmZlY3Rpb24pIHJhdGUuCisJIFRoZSByYXRlIGF0IHdoaWNoIGluZmVjdGlvdXMgaW5kaXZpZHVhbHMgaW5mZWN0IHN1c2NlcHRpYmxlIGluZGl2aWR1YWxzLiBPbmNlCisJIGluZmVjdGVkLCBzdXNjZXB0aWJsZSBpbmRpdmlkdWFscyBpbnN0YW50bHkgYmVjb21lIGluZmVjdGlvdXMgdGhlbXNlbHZlcy48L2xpPgorCTxsaT4mZ2FtbWE7IGlzIHRoZSByYXRlIGF0IHdoaWNoIGluZGl2aWR1YWxzIGNsZWFyIGluZmVjdGlvbi4gSW4gdGhpcyBtb2RlbCB0aGVzZQorCQlpbmRpdmlkdWFscyBjYW5ub3QgYmUgcmUtaW5mZWN0ZWQgZm9yIHNvbWUgcGVyaW9kIG9mIHRpbWUgYWZ0ZXIgaW5mZWN0aW9uICh3aGV0aGVyIHRocm91Z2gKKwkJaW1tdW5pdHkgb3IgcmVtb3ZhbCBmcm9tIHRoZSBwb3B1bGF0aW9uKS48L2xpPgorCTxsaT48ZW0+JnNpZ21hOzwvZW0+IGlzIHRoZSBpbW11bml0eSBsb3NzIHJhdGUuIFRoaXMgY29lZmZpY2llbnQKKwkJZGV0ZXJtaW5lcyB0aGUgcmF0ZSBhdCB3aGljaCA8ZW0+UmVtb3ZlZDwvZW0+IHBvcHVsYXRpb24gbWVtYmVycyBsb3NlCisJCXRoZWlyIGltbXVuaXR5IHRvIHRoZSBkaXNlYXNlIGFuZCBiZWNvbWUgPGVtPlN1c2NlcHRpYmxlPC9lbT4gYWdhaW4uIEZvciBhbiBTSVIKKwkJbW9kZWwsIHRoaXMgcmF0ZSBpcyAwLgorCTwvbGk+Cis8L3VsPgorPC9wPgorRm9sbG93aW5nIGJhc2ljYWxseSB0aGUgc2FtZSBkZXJpdmF0aW9uIGFzIG91dGxpbmVkIGZvciB0aGUKKzxhIGhyZWY9InNpbWF0aC5odG1sIj5TSTwvYT4KK21vZGVsLCB0aGVzZSBiZWNvbWU6CisKKzxwPkxldAorPHVsPgorCTxsaT48ZW0+Jm11OzxzdWI+aTwvc3ViPjwvZW0+IGJlIHRoZSA8ZW0+SW5mZWN0aW91cyBNb3J0YWxpdHkKKwlSYXRlPC9lbT4uIFRoaXMgaXMgdGhlIGluY3JlYXNlZCByYXRlIGF0IHdoaWNoIGluZmVjdGVkIHBvcHVsYXRpb24gbWVtYmVycyBkaWUKKwlzcGVjaWZpY2FsbHkgZHVlIHRvIHRoZSBkaXNlYXNlLjwvbGk+Cis8L3VsPgorPC9wPgorPHA+V2UgbW9kaWZ5IG91ciBtb2RlbCB0byBpbmNsdWRlIHRoaXMgYWRkaXRpb25hbCByYXRlLgorCis8dWw+CisJPGxpPjxlbT4mRGVsdGE7cyA9ICZtdTsgJm1pbnVzOyAmYmV0YTtzIGkgKyAmc2lnbWE7ciAmbWludXM7CisJJm11OyBzPC9lbT48L2xpPgorCTxsaT48ZW0+JkRlbHRhO2kgPSAmYmV0YTtzIGkgJm1pbnVzOworCSZnYW1tYTtpICZtaW51czsgKCZtdTsrJm11OzxzdWI+aTwvc3ViPilpPC9lbT48L2xpPgorCTxsaT48ZW0+JkRlbHRhO3IgPSAmZ2FtbWE7aSAmbWludXM7ICZzaWdtYTtyCisJJm1pbnVzOyAmbXU7cjwvZW0+PC9saT4KKzwvdWw+Cis8L3A+Cis8aDM+U3BhdGlhbCBBZGFwdGF0aW9uPC9oMz4KKzxwPgorPHVsPgorCTxsaT48ZW0+JkRlbHRhO3MgUDxzdWI+bDwvc3ViPj0gJm11O1A8c3ViPmw8L3N1Yj4gJm1pbnVzOworCSZiZXRhOzxzdWI+bDwvc3ViPiBzIGkgUDxzdWI+bDwvc3ViPiArICZzaWdtYTsgciBQPHN1Yj5sPC9zdWI+ICZtaW51czsKKwkmbXU7IHMgUDxzdWI+bDwvc3ViPjwvZW0+PC9saT4KKwk8bGk+PGVtPiZEZWx0YTtpIFA8c3ViPmw8L3N1Yj4gPSAmYmV0YTs8c3ViPmw8L3N1Yj4KKwlzIGkgUDxzdWI+bDwvc3ViPiAmbWludXM7ICZnYW1tYTsgaSBQPHN1Yj5sPC9zdWI+ICZtaW51czsKKwkoJm11OysmbXU7PHN1Yj5pPC9zdWI+KWkgUDxzdWI+bDwvc3ViPjwvZW0+PC9saT4KKwk8bGk+PGVtPiZEZWx0YTtyIFA8c3ViPmw8L3N1Yj49ICZnYW1tYTtpUDxzdWI+bDwvc3ViPgorCSZtaW51czsgJnNpZ21hO3IgUDxzdWI+bDwvc3ViPiZtaW51czsgJm11O3IgUDxzdWI+bDwvc3ViPjwvZW0+PC9saT4KKzwvdWw+CisKKzxwPkxldCA8ZW0+UzxzdWI+bDwvc3ViPiA9IHMgUDxzdWI+bDwvc3ViPjwvZW0+IGJlIHRoZSBudW1iZXIgb2YgPGVtPlN1c2NlcHRpYmxlPC9lbT4KK3BvcHVsYXRpb24gbWVtYmVycyBhdCBsb2NhdGlvbiA8ZW0+bDwvZW0+LiBTaW1pbGFybHksIGxldCA8ZW0+STxzdWI+bDwvc3ViPgorPSBpIFA8c3ViPmw8L3N1Yj48L2VtPiBiZSB0aGUgbnVtYmVyIG9mIHBvcHVsYXRpb24gbWVtYmVycyBhdCBsb2NhdGlvbiA8ZW0+bDwvZW0+Cit0aGF0IGFyZSA8ZW0+SW5mZWN0aW91czwvZW0+LCBhbmQgbGV0IDxlbT5yCitQPHN1Yj5sPC9zdWI+PC9lbT4gYmUgdGhlIDxlbT5SZWNvdmVyZWQ8L2VtPiBwb3B1bGF0aW9uLiBGb3IgcmVhZGFiaWxpdHksIHdlCitkcm9wIHRoZSA8ZW0+bDwvZW0+IHN1YnNjcmlwdCBhbmQgc3Vic3RpdHV0ZS4gPC9wPgorU3Vic3RpdHV0aW5nCisKKzwvcD4KKzx1bD4KKwk8bGk+PGVtPiZEZWx0YTtTID0gJm11O1A8c3ViPmw8L3N1Yj4gJm1pbnVzOyAmYmV0YTs8c3ViPmw8L3N1Yj4KKwlTIGkgKyAmc2lnbWE7UiAmbWludXM7ICZtdTsgUzwvZW0+PC9saT4KKwk8bGk+PGVtPiZEZWx0YTtJID0gJmJldGE7PHN1Yj5sPC9zdWI+IFMgaQorCSZtaW51czsgJmdhbW1hO0kgJm1pbnVzOyAoJm11OysmbXU7PHN1Yj5pPC9zdWI+KUkgPC9lbT48L2xpPgorCTxsaT48ZW0+JkRlbHRhO1I9ICZnYW1tYTtJICZtaW51czsgJnNpZ21hO1IKKwkmbWludXM7ICZtdTtSPC9lbT48L2xpPgorPC91bD4KKworQ29udGludWluZyB3aXRoCis8ZW0+IGkgPSBJL1A8c3ViPmw8L3N1Yj48L2VtPgorLCB3ZSBoYXZlOgorPHVsPgorCTxsaT48ZW0+JkRlbHRhO1MgPSAmbXU7UDxzdWI+bDwvc3ViPiAmbWludXM7ICgmYmV0YTs8c3ViPmw8L3N1Yj4vUDxzdWI+bDwvc3ViPikKKwlTIEkgKyAmc2lnbWE7UiAmbWludXM7ICZtdTsgUzwvZW0+PC9saT4KKwk8bGk+PGVtPiZEZWx0YTtJID0gKCZiZXRhOzxzdWI+bDwvc3ViPi9QPHN1Yj5sPC9zdWI+KQorCVMgSSAmbWludXM7ICZnYW1tYTtJICZtaW51czsgKCZtdTsrJm11OzxzdWI+aTwvc3ViPilJIDwvZW0+PC9saT4KKwk8bGk+PGVtPiZEZWx0YTtSPSAmZ2FtbWE7SSAmbWludXM7ICZzaWdtYTtSCisJJm1pbnVzOyAmbXU7UjwvZW0+PC9saT4KKzwvdWw+CisKK0xldHRpbmcKKzxlbT4mYmV0YTs8c3VwPio8L3N1cD4gPSAmYmV0YTs8c3ViPmw8L3N1Yj4vUDxzdWI+bDwvc3ViPiA9ICZiZXRhOworKGQ8c3ViPmw8L3N1Yj4vKEFQRFA8c3ViPmw8L3N1Yj4pKSA8L2VtPgorZ2l2ZXM6CisKKzx1bD4KKwk8bGk+PGVtPiZEZWx0YTtTID0gJm11O1A8c3ViPmw8L3N1Yj4gJm1pbnVzOyAmYmV0YTs8c3VwPio8L3N1cD4KKwlTIEkgKyAmc2lnbWE7UiAmbWludXM7ICZtdTsgUzwvZW0+PC9saT4KKwk8bGk+PGVtPiZEZWx0YTtJID0gJmJldGE7PHN1cD4qPC9zdXA+IFMgSQorCSZtaW51czsgJmdhbW1hO0kgJm1pbnVzOyAoJm11OysmbXU7PHN1Yj5pPC9zdWI+KUkgPC9lbT48L2xpPgorCTxsaT48ZW0+JkRlbHRhO1I9ICZnYW1tYTtJICZtaW51czsgJnNpZ21hO1IKKwkmbWludXM7ICZtdTtSPC9lbT48L2xpPgorPC91bD4KK1RTRgorPHVsPgorCTxsaT48ZW0+VFNGPHN1Yj5sPC9zdWI+ID0gKChTK0krUikvQXJlYTxzdWI+bDwvc3ViPikgLworCShQL0FyZWEoUytJK1IpKTwvZW0+PC9saT4KKwk8bGk+PGVtPlRTRjxzdWI+bDwvc3ViPiA9ICgxL0FyZWE8c3ViPmw8L3N1Yj4pIC8gKFAvQXJlYSApPC9lbT48L2xpPgorCTxsaT48ZW0+VFNGPHN1Yj5sPC9zdWI+ID0gQXJlYSAvIChQICpBcmVhPHN1Yj5sPC9zdWI+ICk8L2VtPjwvbGk+CisJPGxpPjxlbT5UU0Y8c3ViPmw8L3N1Yj4gPSAoMSAvIFApKiAoQXJlYS9BcmVhPHN1Yj5sPC9zdWI+ICk8L2VtPjwvbGk+Cis8L3VsPgorPGgzPk5laWdoYm9yaW5nIEluZmVjdGlvdXMgUG9wdWxhdGlvbnM8L2gzPgorPC9wPgorPHVsPgorCTxsaT48ZW0+JkRlbHRhO1MgPSAmbXU7UDxzdWI+bDwvc3ViPiAmbWludXM7ICZiZXRhOzxzdXA+Kjwvc3VwPgorCVMgKEkgKyBJPHN1Yj5uZWlnaGJvcjwvc3ViPigpICkgKyAmc2lnbWE7UiAmbWludXM7ICZtdTsgUzwvZW0+PC9saT4KKwk8bGk+PGVtPiZEZWx0YTtJID0gJmJldGE7PHN1cD4qPC9zdXA+IFMgKEkKKwkrIEk8c3ViPm5laWdoYm9yPC9zdWI+KCkgKSAmbWludXM7ICZnYW1tYTtJICZtaW51czsgKCZtdTsrJm11OzxzdWI+aTwvc3ViPilJCisJPC9lbT48L2xpPgorCTxsaT48ZW0+JkRlbHRhO1IgPSAmZ2FtbWE7SSAmbWludXM7ICZzaWdtYTtSCisJJm1pbnVzOyAmbXU7UjwvZW0+PC9saT4KKzwvdWw+CisKK1NwZWNpZmljIHN0YXRpc3RpY3Mgb24gdGhlIHRvdGFsIG51bWJlciBvZiBiaXJ0aHMsIGRlYXRocyBhbmQgZGVhdGhzIGR1ZQordG8gdGhlIGRpc2Vhc2UgY2FuIGJlIGNvbXB1dGVkIGJ5IGFkZGluZyB0aGUgYXBwcm9wcmlhdGUgdGVybXMgb2YgdGhlCitlcXVhdGlvbnMgYWJvdmUuCis8dWw+CisJPGxpPjxlbT5CPSAmbXU7IChTICsgSSArIFIpPC9lbT4sIGlzIHRoZSBudW1iZXIgb2YgPGVtPkJpcnRoczwvZW0+CisJPC9saT4KKwk8bGk+PGVtPkQgPSAmbXU7IFMgKyAoJm11OyArICZtdTs8c3ViPmk8L3N1Yj4gKUkgKyAmbXU7UjwvZW0+LGlzIHRoZSB0b3RhbCBudW1iZXIgb2YgPGVtPkRlYXRoczwvZW0+PC9saT4KKwk8bGk+PGVtPkREPSAmbXU7PHN1Yj5pPC9zdWI+IEk8L2VtPiwgaXMgdGhlIG51bWJlciBvZgorCTxlbT5EaXNlYXNlIERlYXRoczwvZW0+PC9saT4KKzwvdWw+Cis8L2JvZHk+Cis8L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvZ2V0dGluZ3N0YXJ0ZWQvaW1nL3F1aWNrc3RhcnQvLmN2c2lnbm9yZSBiL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2dldHRpbmdzdGFydGVkL2ltZy9xdWlja3N0YXJ0Ly5jdnNpZ25vcmUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOThlNmVmNgotLS0gL2Rldi9udWxsCisrKyBiL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2dldHRpbmdzdGFydGVkL2ltZy9xdWlja3N0YXJ0Ly5jdnNpZ25vcmUKQEAgLTAsMCArMSBAQAorKi5kYgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvZ2V0dGluZ3N0YXJ0ZWQvaW1nL3F1aWNrc3RhcnQvRmlnMS5wbmcgYi9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC9nZXR0aW5nc3RhcnRlZC9pbWcvcXVpY2tzdGFydC9GaWcxLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYjNjZWM5Ci0tLSAvZGV2L251bGwKKysrIGIvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvZ2V0dGluZ3N0YXJ0ZWQvaW1nL3F1aWNrc3RhcnQvRmlnMS5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvZ2V0dGluZ3N0YXJ0ZWQvaW1nL3F1aWNrc3RhcnQvRmlnMV9jcm9wcGVkLnBuZyBiL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2dldHRpbmdzdGFydGVkL2ltZy9xdWlja3N0YXJ0L0ZpZzFfY3JvcHBlZC5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDc0NzQ3YwotLS0gL2Rldi9udWxsCisrKyBiL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2dldHRpbmdzdGFydGVkL2ltZy9xdWlja3N0YXJ0L0ZpZzFfY3JvcHBlZC5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvZ2V0dGluZ3N0YXJ0ZWQvaW1nL3F1aWNrc3RhcnQvRmlnMi5wbmcgYi9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC9nZXR0aW5nc3RhcnRlZC9pbWcvcXVpY2tzdGFydC9GaWcyLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZmQ1NTVlCi0tLSAvZGV2L251bGwKKysrIGIvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvZ2V0dGluZ3N0YXJ0ZWQvaW1nL3F1aWNrc3RhcnQvRmlnMi5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvZ2V0dGluZ3N0YXJ0ZWQvaW1nL3F1aWNrc3RhcnQvZmlnMS5qcGcgYi9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC9nZXR0aW5nc3RhcnRlZC9pbWcvcXVpY2tzdGFydC9maWcxLmpwZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMTgwYWM2Ci0tLSAvZGV2L251bGwKKysrIGIvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvZ2V0dGluZ3N0YXJ0ZWQvaW1nL3F1aWNrc3RhcnQvZmlnMS5qcGcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvZ2V0dGluZ3N0YXJ0ZWQvaW1nL3F1aWNrc3RhcnQvZmlnMi5qcGcgYi9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC9nZXR0aW5nc3RhcnRlZC9pbWcvcXVpY2tzdGFydC9maWcyLmpwZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYjkyOWRmCi0tLSAvZGV2L251bGwKKysrIGIvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvZ2V0dGluZ3N0YXJ0ZWQvaW1nL3F1aWNrc3RhcnQvZmlnMi5qcGcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvZ2V0dGluZ3N0YXJ0ZWQvaW1nL3F1aWNrc3RhcnQvZmlnMy5qcGcgYi9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC9nZXR0aW5nc3RhcnRlZC9pbWcvcXVpY2tzdGFydC9maWczLmpwZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNTk0NDBjCi0tLSAvZGV2L251bGwKKysrIGIvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvZ2V0dGluZ3N0YXJ0ZWQvaW1nL3F1aWNrc3RhcnQvZmlnMy5qcGcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvZ2V0dGluZ3N0YXJ0ZWQvaW1nL3F1aWNrc3RhcnQvZmlnNC5qcGcgYi9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC9nZXR0aW5nc3RhcnRlZC9pbWcvcXVpY2tzdGFydC9maWc0LmpwZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZGQyNGVkCi0tLSAvZGV2L251bGwKKysrIGIvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvZ2V0dGluZ3N0YXJ0ZWQvaW1nL3F1aWNrc3RhcnQvZmlnNC5qcGcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvZ2V0dGluZ3N0YXJ0ZWQvaW1nL3F1aWNrc3RhcnQvZmlnNS5qcGcgYi9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC9nZXR0aW5nc3RhcnRlZC9pbWcvcXVpY2tzdGFydC9maWc1LmpwZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYjRjMjU0Ci0tLSAvZGV2L251bGwKKysrIGIvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvZ2V0dGluZ3N0YXJ0ZWQvaW1nL3F1aWNrc3RhcnQvZmlnNS5qcGcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvZ2V0dGluZ3N0YXJ0ZWQvcXVpY2tzdGFydC5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvZ2V0dGluZ3N0YXJ0ZWQvcXVpY2tzdGFydC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQwNjljNzEKLS0tIC9kZXYvbnVsbAorKysgYi9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC9nZXR0aW5nc3RhcnRlZC9xdWlja3N0YXJ0Lmh0bWwKQEAgLTAsMCArMSw1NiBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMCBUcmFuc2l0aW9uYWwvL0VOIj4KKworPGh0bWw+Cis8aGVhZD4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PWlzby04ODU5LTEiPgorPHRpdGxlPlNURU0gUXVpY2sgU3RhcnQ8L3RpdGxlPgorPC9oZWFkPgorCis8Ym9keT4KKzxoMT5TVEVNIFF1aWNrIFN0YXJ0PC9oMT4KKzxwPldoZW4geW91IGZpcnN0IHN0YXJ0IFNURU0gaXQgd2lsbCBkaXNwbGF5IHRoZSA8YSBocmVmPSIuLi9pbnRlcmZhY2UvcGVyc3BlY3RpdmVzL3NpbXVsYXRpb24uaHRtbCI+U2ltdWxhdGlvbgorcGVyc3BlY3RpdmU8L2E+IGNvbnRhaW5pbmcgYSA8YQlocmVmPSIuLi9pbnRlcmZhY2Uvdmlld3Mvc2NlbmFyaW9zdmlldy5odG1sIj5TY2VuYXJpb3MgdmlldzwvYT4uIFRoaXMKK3ZpZXcgY29udGFpbnMgYSBoaWVyYXJjaGljYWwgZGlzcGxheSBvZiB0aGUgPGEKKwlocmVmPSIuLi9jb25jZXB0cy9tb2RlbGluZ2ZyYW1ld29yay5odG1sI3NjZW5hcmlvIj4gU2NlbmFyaW9zPC9hPiB0aGF0CithcmUgYnVpbHQgaW4gdG8gU1RFTSBhbmQgYXJlIHJlYWR5IHRvIHN0YXJ0IGEgU2ltdWxhdGlvbi4gU2VlCitGaWd1cmVzJm5ic3A7MSBhbmQgMiBiZWxvdy4KKzxwPgorPGEKKwlocmVmPSIuLi9pbnRlcmZhY2UvcGVyc3BlY3RpdmVzL2ltZy9zaW11bGF0aW9ucGVyc3BlY3RpdmUucG5nIj48aW1nCisJc3JjPSIuLi9pbnRlcmZhY2UvcGVyc3BlY3RpdmVzL2ltZy9zaW11bGF0aW9ucGVyc3BlY3RpdmUucG5nIiBzdHlsZT0id2lkdGg6ODAwcHgiPjwvYT4KKzxwPkZpZ3VyZSAxLgorPHA+RXhwYW5kIHRoZSB0cmVlIGRpc3BsYXllZCBpbiB0aGUgPGEKKwlocmVmPSIuLi9pbnRlcmZhY2Uvdmlld3Mvc2NlbmFyaW9zdmlldy5odG1sIj5TY2VuYXJpb3MgdmlldzwvYT4gdG8KK2Rpc3BsYXkgdGhlIGF2YWlsYWJsZSA8YQorCWhyZWY9Ii4uL2NvbmNlcHRzL21vZGVsaW5nZnJhbWV3b3JrLmh0bWwjc2NlbmFyaW8iPiBTY2VuYXJpb3M8L2E+LgorU2VsZWN0IG9uZSBvZiB0aGUgZGlzcGxheWVkIDxhCisJaHJlZj0iLi4vY29uY2VwdHMvbW9kZWxpbmdmcmFtZXdvcmsuaHRtbCNzY2VuYXJpbyI+IFNjZW5hcmlvczwvYT4gYnkKKyJkb3VibGUtY2xpY2tpbmciIG9uIGl0cyB0aXRsZSwgRmlndXJlJm5ic3A7Mi4gPC9wPgorPGEgaHJlZj0iaW1nL3F1aWNrc3RhcnQvRmlnMV9jcm9wcGVkLnBuZyI+PGltZworCXNyYz0iaW1nL3F1aWNrc3RhcnQvRmlnMV9jcm9wcGVkLnBuZyI+PC9hPgorPHA+RmlndXJlIDIKKzxwPlNURU0gd2lsbCBpbW1lZGlhdGVseSBiZWdpbiByZWFkaW5nIGluCit0aGUgZGF0YSB0aGF0IGRlZmluZXMgdGhlIFNpbXVsYXRpb24uIEl0J3MgcHJvZ3Jlc3MgaXMgZGlzcGxheWVkIGF0IHRoZQorYm90dG9tIG9mIHRoZSB3aW5kb3cuIFRoZSBhbW91bnQgb2YgdGltZSBpdCB0YWtlcyB0byByZWFkIGluIHRoZSBkYXRhCitmb3IgdGhlIFNpbXVsYXRpb24gd2lsbCBkZXBlbmQgdXBvbiB0aGUgc2l6ZSBvZiB0aGUgbW9kZWwgYW5kIHRoZQorY2hhcmFjdGVyaXN0aWNzIG9mIHRoZSBob3N0IGNvbXB1dGVyLiBPbiBhIGZhc3QgY29tcHV0ZXIgd2l0aCBtb3JlIHRoYW4KKzIgZ2lnYWJ5dGVzIG9mIFJBTSBhbmQgZmFzdCBkaXNrcyB0aGUgPGEKKwlocmVmPSIuLi9jb25jZXB0cy9tb2RlbGluZ2ZyYW1ld29yay5odG1sI3NjZW5hcmlvIj4gU2NlbmFyaW88L2E+CitpbGx1c3RyYXRlZCBpbiBGaWd1cmUmbmJzcDszLCBiZWxvdywgd2lsbCBsb2FkIGFuZCBiZWdhbiBleGVjdXRpb24gaW4KK2xlc3MgdGhhbiA1IHNlY29uZHMuIE9uIGEgc21hbGxlciBzbG93ZXIgbWFjaGluZSAoZS5nLiwgYSBzbWFsbCBsYXB0b3AKK3dpdGggc2xvdyBkaXNrcyksIHRoaXMgY291bGQgdGFrZSAzMCBzZWNvbmRzIG9yIGxvbmdlcikuPC9wPgorCis8YSBocmVmPSJpbWcvcXVpY2tzdGFydC9GaWcyLnBuZyI+PGltZworCXNyYz0iaW1nL3F1aWNrc3RhcnQvRmlnMi5wbmciIHN0eWxlPSJ3aWR0aDo4MDBweCI+PC9hPjwvY2VudGVyPgorPC9wPgorPHA+RmlndXJlIDMKKzxwPkluIEZpZ3VyZSZuYnNwOzMsIHdlIHNlZSB0aGUgc3RhdGUgb2YgdGhlIHNpbXVsYXRpb24gYWZ0ZXIgYWJvdXQgNTUgaXRlcmF0aW9ucy4gSW4gdGhpcyBjYXNlLAordGhlIGRpc2Vhc2UgaXMgc3ByZWFkaW5nIGFjcm9zcyBjb21tb24gYm9yZGVycyBmcm9tIHN0YXJ0aW5nIGluIHRoZSBub3J0aAorYW5kIG1vdmluZyBzb3V0aC4KKzxwPgorVGhlICJTaW11bGF0aW9uIGNvbnRyb2wiIGFyZWEgaW4gdGhlIGxvd2VyIGxlZnQgaXMgdXNlZCB0byAiU3RhcnQiLCAiUGF1c2UiLCAiUmVzZXQiLAorIlN0ZXAiIGFuZCAiU3RvcCIgYWxsIHRoZSBhY3RpdmUgU2ltdWxhdGlvbnMuIAorPHA+Cis8L3A+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC9pbmRleC5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW5kZXguaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZWY3NjAzCi0tLSAvZGV2L251bGwKKysrIGIvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW5kZXguaHRtbApAQCAtMCwwICsxLDE1IEBACis8SFRNTD4KKzxIRUFEPiAKKzx0aXRsZT5TVEVNIFVzZXIgSGVscDwvdGl0bGU+Cis8L0hFQUQ+IAorCisgIDxGUkFNRVNFVCBjb2xzPSIyNSUsNzUlIj4KKyAgICAgIDxGUkFNRSBzcmM9InRvYy5odG1sIj4KKyAgICAgIDxGUkFNRSBuYW1lPSJtYWluIj4KKyAgPC9GUkFNRVNFVD4KKworPEJPRFk+Cis8aDI+VGhpcyByZXF1aXJlcyBhIHdlYiBjbGllbnQgd2l0aCBGUkFNRSBzdXBwb3J0PC9oMj4KKzwvQk9EWT4KKworPC9IVE1MPgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL2VkaXRvcnMvZWRpdG9yc292ZXJ2aWV3Lmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC9pbnRlcmZhY2UvZWRpdG9ycy9lZGl0b3Jzb3ZlcnZpZXcuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNGNiNWJkCi0tLSAvZGV2L251bGwKKysrIGIvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL2VkaXRvcnMvZWRpdG9yc292ZXJ2aWV3Lmh0bWwKQEAgLTAsMCArMSwyNSBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMCBUcmFuc2l0aW9uYWwvL0VOIj4KKworPGh0bWw+Cis8aGVhZD4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PWlzby04ODU5LTEiPgorPHRpdGxlPk92ZXJ2aWV3PC90aXRsZT4KKzwvaGVhZD4KKworPGJvZHk+Cis8aDE+RWRpdG9yczwvaDE+Cis8cD5UaGUgU1RFTSBpbnRlcmZhY2UgaW5jbHVkZXMgYSBudW1iZXIgb2YgZGlmZmVyZW50ICJFZGl0b3JzIi4gRWFjaAorZWRpdG9yIGZhY2lsaXRhdGVzIHRoZSBtb2RpZmljYXRpb24gb2YgYSBjb21wb25lbnQgb2YgYSBTVEVNIDxhCisJaHJlZj0iLi4vLi4vY29uY2VwdHMvbW9kZWxpbmdmcmFtZXdvcmsuaHRtbCNzY2VuYXJpbyI+IFNjZW5hcmlvPC9hPi4KKzx1bD4KKyAgICA8bGk+PGEgaHJlZj0iZXhwZXJpbWVudGVkaXRvci5odG1sIj5FeHBlcmltZW50IEVkaXRvcjwvYT48L2xpPgorCTxsaT48YSBocmVmPSJncmFwaGVkaXRvci5odG1sIj5HcmFwaCBFZGl0b3I8L2E+PC9saT4KKwk8bGk+PGEgaHJlZj0ibW9kZWxlZGl0b3IuaHRtbCI+TW9kZWwgRWRpdG9yPC9hPjwvbGk+CisJPGxpPjxhIGhyZWY9Im1vZGlmaWVyZWRpdG9yLmh0bWwiPk1vZGlmaWVyIEVkaXRvcjwvYT48L2xpPgorCTxsaT48YSBocmVmPSJwcmVkaWNhdGVlZGl0b3IuaHRtbCI+UHJlZGljYXRlIEVkaXRvcjwvYT48L2xpPgorCTxsaT48YSBocmVmPSJzY2VuYXJpb2VkaXRvci5odG1sIj4gU2NlbmFyaW8gRWRpdG9yPC9hPjwvbGk+CisJPGxpPjxhIGhyZWY9InNlcXVlbmNlcmVkaXRvci5odG1sIj4gU2VxdWVuY2VyIEVkaXRvcjwvYT48L2xpPgorCTxsaT48YSBocmVmPSJ0cmlnZ2VyZWRpdG9yLmh0bWwiPiBUcmlnZ2VyIEVkaXRvcjwvYT48L2xpPgorPC91bD4KKzwvYm9keT4KKzwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC9pbnRlcmZhY2UvZWRpdG9ycy9leHBlcmltZW50ZWRpdG9yLmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC9pbnRlcmZhY2UvZWRpdG9ycy9leHBlcmltZW50ZWRpdG9yLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGZkNWI4MgotLS0gL2Rldi9udWxsCisrKyBiL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2ludGVyZmFjZS9lZGl0b3JzL2V4cGVyaW1lbnRlZGl0b3IuaHRtbApAQCAtMCwwICsxLDIxIEBACis8IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIvaHRtbDQvbG9vc2UuZHRkIj4KKzxodG1sPgorPGhlYWQ+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0xIj4KKzx0aXRsZT5FeHBlcmltZW50IEVkaXRvcjwvdGl0bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxoMT5FeHBlcmltZW50IEVkaXRvcjwvaDE+Cis8cD5UaGUgPGVtPkV4cGVyaW1lbnQgRWRpdG9yPC9lbT4gaXMgdXNlZCB0byBlZGl0IDxhIGhyZWY9Ii4uLy4uL2NvbmNlcHRzL21vZGVsaW5nZnJhbWV3b3JrLmh0bWwjZXhwZXJpbWVudCI+IEV4cGVyaW1lbnRzPC9hPi4gSXQKK3N1cHBvcnRzIGRyYWcgYW5kIGRyb3AsIGFuZCB1bmRvLjwvcD4KKzxwPkEgPGEgaHJlZj0iLi4vLi4vY29uY2VwdHMvbW9kZWxpbmdmcmFtZXdvcmsuaHRtbCNleHBlcmltZW50Ij4KK0V4cGVyaW1lbnQ8L2E+IGNhbiBiZSBkcmFnZ2VkIGZyb20gYSBwcm9qZWN0J3MgY29sbGVjdGlvbiBvciBmcm9tIHRoZSA8YQorCWhyZWY9Ii4uL3ZpZXdzL2V4cGVyaW1lbnRzdmlldy5odG1sIj4gRXhwZXJpbWVudHMgVmlldzwvYT4uIFNpbWlsYXJseSwgYSA8YQorCWhyZWY9Ii4uLy4uL2NvbmNlcHRzL21vZGVsaW5nZnJhbWV3b3JrLmh0bWwjc2NlbmFyaW8iPiBTY2VuYXJpbzwvYT4gY2FuIGJlCitkcmFnZ2VkIGZyb20gYSBwcm9qZWN0cyBjb2xsZWN0aW9uIG9yIGZyb20gdGhlIDxhCisJaHJlZj0iLi4vdmlld3Mvc2NlbmFyaW9zdmlldy5odG1sIj4gU2NlbmFyaW9zIFZpZXc8L2E+LCBhbmQgCisJYSA8YSBocmVmPSIuLi8uLi9jb25jZXB0cy9tb2RlbGluZ2ZyYW1ld29yay5odG1sI21vZGlmaWVyIj4gTW9kaWZpZXI8L2E+IGNhbiBiZQorZHJhZ2dlZCBmcm9tIGEgcHJvamVjdHMgY29sbGVjdGlvbi48L3A+Cis8aW1nIHNyYz0iaW1nL2V4cGVyaW1lbnRlZGl0b3IxLmpwZyIgLz4KKzwvYm9keT4KKzwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC9pbnRlcmZhY2UvZWRpdG9ycy9ncmFwaGVkaXRvci5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL2VkaXRvcnMvZ3JhcGhlZGl0b3IuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NTJmZjFiCi0tLSAvZGV2L251bGwKKysrIGIvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL2VkaXRvcnMvZ3JhcGhlZGl0b3IuaHRtbApAQCAtMCwwICsxLDEzIEBACis8IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIvaHRtbDQvbG9vc2UuZHRkIj4KKzxodG1sPgorPGhlYWQ+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0xIj4KKzx0aXRsZT5HcmFwaCBFZGl0b3I8L3RpdGxlPgorPC9oZWFkPgorPGJvZHk+Cis8aDE+R3JhcGggRWRpdG9yPC9oMT4KKzxwPlRoZSA8ZW0+R3JhcGggRWRpdG9yPC9lbT4gaXMgdXNlZCB0byBtb2RpZnkgPGEgaHJlZj0iLi4vLi4vY29uY2VwdHMvbW9kZWxpbmdmcmFtZXdvcmsuaHRtbCNncmFwaCI+IEdyYXBoczwvYT4uIEl0CitzdXBwb3J0cyBkcmFnIGFuZCBkcm9wLCBhbmQgdW5kby48L3A+Cis8aW1nIHNyYz0iaW1nL2dyYXBoZWRpdG9yMS5qcGciIC8+Cis8L2JvZHk+Cis8L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL2VkaXRvcnMvaW1nL2V4cGVyaW1lbnRlZGl0b3IxLmpwZyBiL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2ludGVyZmFjZS9lZGl0b3JzL2ltZy9leHBlcmltZW50ZWRpdG9yMS5qcGcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWQ5Mjk1NgotLS0gL2Rldi9udWxsCisrKyBiL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2ludGVyZmFjZS9lZGl0b3JzL2ltZy9leHBlcmltZW50ZWRpdG9yMS5qcGcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL2VkaXRvcnMvaW1nL2dyYXBoZWRpdG9yMS5qcGcgYi9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC9pbnRlcmZhY2UvZWRpdG9ycy9pbWcvZ3JhcGhlZGl0b3IxLmpwZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNWFmNjE3Ci0tLSAvZGV2L251bGwKKysrIGIvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL2VkaXRvcnMvaW1nL2dyYXBoZWRpdG9yMS5qcGcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL2VkaXRvcnMvaW1nL21vZGVsZWRpdG9yMS5qcGcgYi9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC9pbnRlcmZhY2UvZWRpdG9ycy9pbWcvbW9kZWxlZGl0b3IxLmpwZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNDM0NDg3Ci0tLSAvZGV2L251bGwKKysrIGIvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL2VkaXRvcnMvaW1nL21vZGVsZWRpdG9yMS5qcGcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL2VkaXRvcnMvaW1nL21vZGlmaWVyZWRpdG9yMS5qcGcgYi9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC9pbnRlcmZhY2UvZWRpdG9ycy9pbWcvbW9kaWZpZXJlZGl0b3IxLmpwZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MjNiNjI5Ci0tLSAvZGV2L251bGwKKysrIGIvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL2VkaXRvcnMvaW1nL21vZGlmaWVyZWRpdG9yMS5qcGcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL2VkaXRvcnMvaW1nL3ByZWRpY2F0ZWVkaXRvcjEuanBnIGIvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL2VkaXRvcnMvaW1nL3ByZWRpY2F0ZWVkaXRvcjEuanBnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZjNThkMWEKLS0tIC9kZXYvbnVsbAorKysgYi9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC9pbnRlcmZhY2UvZWRpdG9ycy9pbWcvcHJlZGljYXRlZWRpdG9yMS5qcGcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL2VkaXRvcnMvaW1nL3NjZW5hcmlvZWRpdG9yMS5qcGcgYi9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC9pbnRlcmZhY2UvZWRpdG9ycy9pbWcvc2NlbmFyaW9lZGl0b3IxLmpwZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYjM5MTgzCi0tLSAvZGV2L251bGwKKysrIGIvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL2VkaXRvcnMvaW1nL3NjZW5hcmlvZWRpdG9yMS5qcGcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL2VkaXRvcnMvaW1nL3NlcXVlbmNlcmVkaXRvcjEuanBnIGIvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL2VkaXRvcnMvaW1nL3NlcXVlbmNlcmVkaXRvcjEuanBnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIyYWFkMTYKLS0tIC9kZXYvbnVsbAorKysgYi9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC9pbnRlcmZhY2UvZWRpdG9ycy9pbWcvc2VxdWVuY2VyZWRpdG9yMS5qcGcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL2VkaXRvcnMvaW1nL3RyaWdnZXJlZGl0b3IxLmpwZyBiL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2ludGVyZmFjZS9lZGl0b3JzL2ltZy90cmlnZ2VyZWRpdG9yMS5qcGcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWU3NDZlMQotLS0gL2Rldi9udWxsCisrKyBiL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2ludGVyZmFjZS9lZGl0b3JzL2ltZy90cmlnZ2VyZWRpdG9yMS5qcGcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL2VkaXRvcnMvbW9kZWxlZGl0b3IuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2ludGVyZmFjZS9lZGl0b3JzL21vZGVsZWRpdG9yLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzQ4MGZjNwotLS0gL2Rldi9udWxsCisrKyBiL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2ludGVyZmFjZS9lZGl0b3JzL21vZGVsZWRpdG9yLmh0bWwKQEAgLTAsMCArMSwxOSBAQAorPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL2h0bWw0L2xvb3NlLmR0ZCI+Cis8aHRtbD4KKzxoZWFkPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9SVNPLTg4NTktMSI+Cis8dGl0bGU+TW9kZWwgRWRpdG9yPC90aXRsZT4KKzwvaGVhZD4KKzxib2R5PgorPGgxPk1vZGVsIEVkaXRvcjwvaDE+Cis8cD5UaGUgPGVtPk1vZGVsIEVkaXRvcjwvZW0+IGlzIHVzZWQgdG8gZWRpdCA8YSBocmVmPSIuLi8uLi9jb25jZXB0cy9tb2RlbGluZ2ZyYW1ld29yay5odG1sI21vZGVsIj4gTW9kZWxzPC9hPi4gSXQKK3N1cHBvcnRzIGRyYWcgYW5kIGRyb3AsIGFuZCB1bmRvLjwvcD4KKzxwPkEgPGEgaHJlZj0iLi4vLi4vY29uY2VwdHMvbW9kZWxpbmdmcmFtZXdvcmsuaHRtbCNtb2RlbCI+CitNb2RlbDwvYT4gY2FuIGJlIGRyYWdnZWQgZnJvbSBhIHByb2plY3QncyBjb2xsZWN0aW9uIG9yIGZyb20gdGhlIDxhCisJaHJlZj0iLi4vdmlld3MvbW9kZWxzdmlldy5odG1sIj4gTW9kZWxzIFZpZXc8L2E+LiBTaW1pbGFybHksIGEgPGEKKwlocmVmPSIuLi8uLi9jb25jZXB0cy9tb2RlbGluZ2ZyYW1ld29yay5odG1sI2dyYXBoIj4gR3JhcGg8L2E+IGNhbiBiZQorZHJhZ2dlZCBmcm9tIGEgcHJvamVjdHMgY29sbGVjdGlvbiBvciBmcm9tIHRoZSA8YQorCWhyZWY9Ii4uL3ZpZXdzL2dyYXBoc3ZpZXcuaHRtbCI+IEdyYXBocyBWaWV3PC9hPi48L3A+Cis8aW1nIHNyYz0iaW1nL21vZGVsZWRpdG9yMS5qcGciIC8+Cis8L2JvZHk+Cis8L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL2VkaXRvcnMvbW9kaWZpZXJlZGl0b3IuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2ludGVyZmFjZS9lZGl0b3JzL21vZGlmaWVyZWRpdG9yLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzczZDE5YQotLS0gL2Rldi9udWxsCisrKyBiL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2ludGVyZmFjZS9lZGl0b3JzL21vZGlmaWVyZWRpdG9yLmh0bWwKQEAgLTAsMCArMSwxNSBAQAorPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL2h0bWw0L2xvb3NlLmR0ZCI+Cis8aHRtbD4KKzxoZWFkPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9SVNPLTg4NTktMSI+Cis8dGl0bGU+TW9kaWZpZXIgRWRpdG9yPC90aXRsZT4KKzwvaGVhZD4KKzxib2R5PgorPGgxPk1vZGlmaWVyIEVkaXRvcjwvaDE+Cis8cD5UaGUgPGVtPk1vZGlmaWVyIEVkaXRvcjwvZW0+IGlzIHVzZWQgdG8gZWRpdCA8YSBocmVmPSIuLi8uLi9jb25jZXB0cy9tb2RlbGluZ2ZyYW1ld29yay5odG1sI21vZGlmaWVyIj4gTW9kaWZpZXJzPC9hPi4gCis8L3A+Cis8cD4KKzxpbWcgc3JjPSJpbWcvbW9kaWZpZXJlZGl0b3IxLmpwZyIgLz4KKzwvcD4KKzwvYm9keT4KKzwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC9pbnRlcmZhY2UvZWRpdG9ycy9wcmVkaWNhdGVlZGl0b3IuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2ludGVyZmFjZS9lZGl0b3JzL3ByZWRpY2F0ZWVkaXRvci5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNhMTQ1N2QKLS0tIC9kZXYvbnVsbAorKysgYi9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC9pbnRlcmZhY2UvZWRpdG9ycy9wcmVkaWNhdGVlZGl0b3IuaHRtbApAQCAtMCwwICsxLDEzIEBACis8IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIvaHRtbDQvbG9vc2UuZHRkIj4KKzxodG1sPgorPGhlYWQ+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0xIj4KKzx0aXRsZT5QcmVkaWNhdGUgRWRpdG9yPC90aXRsZT4KKzwvaGVhZD4KKzxib2R5PgorPGgxPlByZWRpY2F0ZSBFZGl0b3I8L2gxPgorPHA+VGhlIDxlbT5QcmVkaWNhdGUgRWRpdG9yPC9lbT4gaXMgdXNlZCB0byBlZGl0IDxhIGhyZWY9Ii4uLy4uL2NvbmNlcHRzL21vZGVsaW5nZnJhbWV3b3JrLmh0bWwjcHJlZGljYXRlIj4gUHJlZGljYXRlczwvYT4uIAorPC9wPgorPGltZyBzcmM9ImltZy9wcmVkaWNhdGVlZGl0b3IxLmpwZyIgLz4KKzwvYm9keT4KKzwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC9pbnRlcmZhY2UvZWRpdG9ycy9zY2VuYXJpb2VkaXRvci5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL2VkaXRvcnMvc2NlbmFyaW9lZGl0b3IuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZGQ0MjMwCi0tLSAvZGV2L251bGwKKysrIGIvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL2VkaXRvcnMvc2NlbmFyaW9lZGl0b3IuaHRtbApAQCAtMCwwICsxLDMxIEBACis8IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIvaHRtbDQvbG9vc2UuZHRkIj4KKzxodG1sPgorPGhlYWQ+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0xIj4KKzx0aXRsZT5TY2VuYXJpbyBFZGl0b3I8L3RpdGxlPgorPC9oZWFkPgorPGJvZHk+Cis8aDE+U2NlbmFyaW8gRWRpdG9yPC9oMT4KKzxwPlRoZSA8ZW0+U2NlbmFyaW8gRWRpdG9yPC9lbT4gaXMgdXNlZCB0byBlZGl0IDxhCisJaHJlZj0iLi4vLi4vY29uY2VwdHMvbW9kZWxpbmdmcmFtZXdvcmsuaHRtbCNzY2VuYXJpbyI+IFNjZW5hcmlvczwvYT4uCitJdCBzdXBwb3J0cyBkcmFnIGFuZCBkcm9wLCBhbmQgdW5kby48L3A+Cis8cD5BIDxhIGhyZWY9Ii4uLy4uL2NvbmNlcHRzL21vZGVsaW5nZnJhbWV3b3JrLmh0bWwjbW9kZWwiPgorTW9kZWw8L2E+IGNhbiBiZSBhZGRlZCB0byBhIDxhCisJaHJlZj0iLi4vLi4vY29uY2VwdHMvbW9kZWxpbmdmcmFtZXdvcmsuaHRtbCNzY2VuYXJpbyI+IFNjZW5hcmlvPC9hPiBieQorZHJhZ2dpbmcgaXQgZnJvbSBlaXRoZXIgYSBwcm9qZWN0J3MgY29sbGVjdGlvbiBvZiA8YQorCWhyZWY9Ii4uLy4uL2NvbmNlcHRzL21vZGVsaW5nZnJhbWV3b3JrLmh0bWwjbW9kZWwiPiBNb2RlbHM8L2E+LCBvciBmcm9tCit0aGUgc2V0IGluIHRoZSA8YSBocmVmPSIuLi92aWV3cy9tb2RlbHN2aWV3Lmh0bWwiPiBNb2RlbHMgVmlldzwvYT4uCitTaW1pbGFybHksIGFueSBudW1iZXIgb2YgPGEKKwlocmVmPSIuLi8uLi9jb25jZXB0cy9tb2RlbGluZ2ZyYW1ld29yay5odG1sI2RlY29yYXRvciI+IERlY29yYXRvcnM8L2E+CitjYW4gYmUgZHJhZ2dlZCBmcm9tIGEgcHJvamVjdCdzIGNvbGxlY3Rpb24gb3IgZnJvbSB0aGUgc2V0IG9mIEJ1aWx0LWluIDxhCisJaHJlZj0iLi4vLi4vY29uY2VwdHMvbW9kZWxpbmdmcmFtZXdvcmsuaHRtbCNkZWNvcmF0b3IiPiBEZWNvcmF0b3JzPC9hPgorZnJvbSB0aGUgPGEgaHJlZj0iLi4vdmlld3MvZGVjb3JhdG9yc3ZpZXcuaHRtbCI+RGVjb3JhdG9ycyBWaWV3PC9hPiBvcgorZnJvbSB0aGUgPGEgaHJlZj0iLi4vdmlld3MvZGlzZWFzZXN2aWV3Lmh0bWwiPkRpc2Vhc2VzIFZpZXc8L2E+LiBBcword2VsbCwgYSA8YSBocmVmPSIuLi8uLi9jb25jZXB0cy9tb2RlbGluZ2ZyYW1ld29yay5odG1sI3NlcXVlbmNlciI+CitTZXF1ZW5jZXI8L2E+IGNhbiBiZSBhZGRlZCB0byBhIDxhCisJaHJlZj0iLi4vLi4vY29uY2VwdHMvbW9kZWxpbmdmcmFtZXdvcmsuaHRtbCNzY2VuYXJpbyI+IFNjZW5hcmlvPC9hPiBieQorZHJhZ2dpbmcgaXQgZnJvbSBhIHByb2plY3QncyBjb2xsZWN0aW9uIG9yIGZyb20gdGhlIDxhCisJaHJlZj0iLi4vdmlld3Mvc2VxdWVuY2Vyc3ZpZXcuaHRtbCI+U2VxdWVuY2VycyB2aWV3PC9hPi48L3A+Cis8aW1nIHNyYz0iaW1nL3NjZW5hcmlvZWRpdG9yMS5qcGciIC8+Cis8L2JvZHk+Cis8L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL2VkaXRvcnMvc2VxdWVuY2VyZWRpdG9yLmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC9pbnRlcmZhY2UvZWRpdG9ycy9zZXF1ZW5jZXJlZGl0b3IuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMzhkYTliCi0tLSAvZGV2L251bGwKKysrIGIvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL2VkaXRvcnMvc2VxdWVuY2VyZWRpdG9yLmh0bWwKQEAgLTAsMCArMSwxNCBAQAorPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL2h0bWw0L2xvb3NlLmR0ZCI+Cis8aHRtbD4KKzxoZWFkPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9SVNPLTg4NTktMSI+Cis8dGl0bGU+U2VxdWVuY2VyIEVkaXRvcjwvdGl0bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxoMT5TZXF1ZW5jZXIgRWRpdG9yPC9oMT4KKzxwPlRoZSA8ZW0+U2VxdWVuY2VyIEVkaXRvcjwvZW0+IGlzIHVzZWQgdG8gZWRpdCA8YSBocmVmPSIuLi8uLi9jb25jZXB0cy9tb2RlbGluZ2ZyYW1ld29yay5odG1sI3NlcXVlbmNlciI+IFNlcXVlbmNlcnM8L2E+LiBNb2RpZmljYXRpb25zIHRvIHRoZQorU2VxdWVuY2VyIGFyZSBkb25lIHRocm91Z2ggdGhlICA8YQorICAgIGhyZWY9Ii4uL3ZpZXdzL3Byb3BlcnRpZXN2aWV3Lmh0bWwiPiBQcm9wZXJ0aWVzIFZpZXc8L2E+PC9wPgorPGltZyBzcmM9ImltZy9zZXF1ZW5jZXJlZGl0b3IxLmpwZyIgLz4KKzwvYm9keT4KKzwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC9pbnRlcmZhY2UvZWRpdG9ycy90cmlnZ2VyZWRpdG9yLmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC9pbnRlcmZhY2UvZWRpdG9ycy90cmlnZ2VyZWRpdG9yLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDhiMjViZQotLS0gL2Rldi9udWxsCisrKyBiL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2ludGVyZmFjZS9lZGl0b3JzL3RyaWdnZXJlZGl0b3IuaHRtbApAQCAtMCwwICsxLDE3IEBACis8IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIvaHRtbDQvbG9vc2UuZHRkIj4KKzxodG1sPgorPGhlYWQ+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0xIj4KKzx0aXRsZT5FeHBlcmltZW50IEVkaXRvcjwvdGl0bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxoMT5UcmlnZ2VyIEVkaXRvcjwvaDE+Cis8cD5UaGUgPGVtPlRyaWdnZXIgRWRpdG9yPC9lbT4gaXMgdXNlZCB0byBlZGl0IDxhIGhyZWY9Ii4uLy4uL2NvbmNlcHRzL21vZGVsaW5nZnJhbWV3b3JrLmh0bWwjdHJpZ2dlciI+IFRyaWdnZXI8L2E+LiBJdAorc3VwcG9ydHMgZHJhZyBhbmQgZHJvcCwgYW5kIHVuZG8uPC9wPgorPHA+QSA8YSBocmVmPSIuLi8uLi9jb25jZXB0cy9tb2RlbGluZ2ZyYW1ld29yay5odG1sI3ByZWRpY2F0ZSI+CitQcmVkaWNhdGU8L2E+IGNhbiBiZSBkcmFnZ2VkIGZyb20gYSBwcm9qZWN0J3MgY29sbGVjdGlvbi4gU2ltaWxhcmx5LCAKKwlhIDxhIGhyZWY9Ii4uLy4uL2NvbmNlcHRzL21vZGVsaW5nZnJhbWV3b3JrLmh0bWwjbW9kaWZpZXIiPiBNb2RpZmllcjwvYT4gY2FuIGJlCitkcmFnZ2VkIGZyb20gYSBwcm9qZWN0cyBjb2xsZWN0aW9uLjwvcD4KKzxpbWcgc3JjPSJpbWcvdHJpZ2dlcmVkaXRvcjEuanBnIiAvPgorPC9ib2R5PgorPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2ludGVyZmFjZS9pbWcvZmlnMWEuanBnIGIvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL2ltZy9maWcxYS5qcGcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzQwMDQzOAotLS0gL2Rldi9udWxsCisrKyBiL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2ludGVyZmFjZS9pbWcvZmlnMWEuanBnCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2ludGVyZmFjZS9pbWcvZmlnMmEuanBnIGIvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL2ltZy9maWcyYS5qcGcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjVmMjFmMAotLS0gL2Rldi9udWxsCisrKyBiL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2ludGVyZmFjZS9pbWcvZmlnMmEuanBnCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2ludGVyZmFjZS9pbnRlcmZhY2VvdmVydmlldy5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL2ludGVyZmFjZW92ZXJ2aWV3Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTBjMWYxNAotLS0gL2Rldi9udWxsCisrKyBiL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2ludGVyZmFjZS9pbnRlcmZhY2VvdmVydmlldy5odG1sCkBAIC0wLDAgKzEsNDIgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAgVHJhbnNpdGlvbmFsLy9FTiI+CisKKzxodG1sPgorPGhlYWQ+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1pc28tODg1OS0xIj4KKzx0aXRsZT5JbnRlcmZhY2UgT3ZlcnZpZXc8L3RpdGxlPgorPC9oZWFkPgorCis8Ym9keT4KKzxjZW50ZXI+Cis8aDE+U1RFTSBJbnRlcmZhY2UgT3ZlcnZpZXc8L2gxPgorPC9jZW50ZXI+Cis8cD5UaGUgU1RFTSB1c2VyIGludGVyZmFjZSBpcyBvcmdhbml6ZWQgaW50byB0aHJlZSAicGVyc3BlY3RpdmVzIiwKKzxhIGhyZWY9InBlcnNwZWN0aXZlcy9kZXNpZ25lci5odG1sIj5EZXNpZ25lciBwZXJzcGVjdGl2ZSA8L2E+LAorYSA8YSBocmVmPSJwZXJzcGVjdGl2ZXMvc2ltdWxhdGlvbi5odG1sIj5TaW11bGF0aW9uIHBlcnNwZWN0aXZlPC9hPgorYW5kIGFuIDxhIGhyZWY9InBlcnNwZWN0aXZlcy9hbmFseXNpcy5odG1sIj5BbmFseXNpcyBwZXJzcGVjdGl2ZTwvYT4uIEEKK3BlcnNwZWN0aXZlIGlzIGEgY29sbGVjdGlvbiBvZiAiZWRpdG9ycyIsICJ2aWV3cyIsICJtZW51IGJhciIsICJ0b29sCitiYXIiIGFuZCBhICJwZXJzcGVjdGl2ZSBiYXIiLiBBbiBlZGl0b3IgaXMgYSBzdWItd2luZG93IHVzZWQgdG8KK2ludGVyYWN0aXZlbHkgbW9kaWZ5IG9uZSBvZiBTVEVNJ3MgY29tcG9uZW50cyB3aGlsZSBhIHZpZXcgaXMgYQorc3ViLXdpbmRvdyB1c2VkIHRvIGRpc3BsYXkgaW5mb3JtYXRpb24gdG8gYSB1c2VyLiBUaGUgbWVudSBiYXIgY29udGFpbnMKK2hpZ2gtbGV2ZWwgbWVudXMgZm9yIG9wdGlvbnMgYW5kIG9wZXJhdGlvbnMgdGhhdCBjYW4gYmUgc2VsZWN0ZWQgYnkgYQordXNlciwgd2hpbGUgdGhlIHRvb2wgYmFyIGNvbnRhaW5zIGljb25zIHRoYXQgaWYgc2VsZWN0ZWQgKGNsaWNrZWQgb24pCitjYXVzZSBTVEVNIHRvIHBlcmZvcm0gYWN0aW9ucy4gVGhlIHBlcnNwZWN0aXZlIGJhciBpcyB1c2VkIHRvIHN3aXRjaAorYmV0d2VlbiBTVEVNJ3MgcGVyc3BlY3RpdmVzLiBUaGVzZSBhcmUgaWxsdXN0cmF0ZWQgaW4gdGhlIGltYWdlIGluCitGaWd1cmUgMSBiZWxvdy4KKzxwPgorPGNlbnRlcj48YSBocmVmPSJpbWcvZmlnMWEuanBnIiB3aWR0aD0iMTIwMCIgaGVpZ2h0PSI1MDAiPjxpbWcgc3JjPSJpbWcvZmlnMWEuanBnIiB3aWR0aD0iMTA1MCIgaGVpZ2h0PSI4MDAiPjwvYT48L2NlbnRlcj4KKzxwPlNpbWlsYXJseSBpbiB0aGUgaW1hZ2UgaW4gRmlndXJlIDIgYmVsb3csIGlzIFNURU0ncyA8YQorCWhyZWY9InBlcnNwZWN0aXZlcy9zaW11bGF0aW9uLmh0bWwiPlNpbXVsYXRpb24gcGVyc3BlY3RpdmU8L2E+LiBOb3RlCit0aGF0IGl0IGRvZXMgbm90IGhhdmUgYW4gZWRpdG9yIGFyZWEuCis8Y2VudGVyPjxhIGhyZWY9ImltZy9maWcyYS5qcGciIHdpZHRoPSIxMDAwIiBoZWlnaHQ9IjgwMCI+PGltZyBzcmM9ImltZy9maWcyYS5qcGciIHdpZHRoPSIxMDAwIiBoZWlnaHQ9IjgwMCI+PC9hPjwvY2VudGVyPgorQSB1c2VyIGNhbiBzd2l0Y2ggYmFjayBhbmQgZm9ydGggYmV0d2VlbiB0aGUgdHdvIHBlcnNwZWN0aXZlcyBieQorY2xpY2tpbmcgb24gdGhlbSBpbiB0aGUgcGVyc3BlY3RpdmUgYmFyLiBUaGUgdmlld3MgYXJlIGdyb3VwZWQgdG9nZXRoZXIKK2luIGRpZmZlcmVudCBhcmVhcyBvZiB0aGUgcGVyc3BlY3RpdmUuIENsaWNraW5nIG9uIHRoZSB0aXRsZSBvZiBhIHZpZXcKK2Rpc3BsYXllZCBvbiBpdHMgdGFiIHdpbGwgYnJpbmcgdGhhdCB2aWV3IHRvIHRoZSBmb3JlZ3JvdW5kLiBWaWV3cyBjYW4KK2JlIGNsb3NlZCBieSBjbGlja2luZyBvbiB0aGUgIlgiIG5leHQgdG8gdGhlaXIgbmFtZSwgb3Igb3BlbmVkIGZyb20gdGhlCisiV2luZG93IiBtZW51IGluIHRoZSBtZW51IGJhci4gQW55IHZpZXcgY2FuIGJlIGRpc3BsYXllZCBpbiBhbnkKK3BlcnNwZWN0aXZlLCB0aG91Z2ggZWFjaCBwZXJzcGVjdGl2ZSBoYXMgYSBkZWZhdWx0IHNldCBpdCBkaXNwbGF5cyB3aGVuCitmaXJzdCBjcmVhdGVkLgorPC9wPgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL3BlcnNwZWN0aXZlcy9hbmFseXNpcy5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL3BlcnNwZWN0aXZlcy9hbmFseXNpcy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY1YjljZjAKLS0tIC9kZXYvbnVsbAorKysgYi9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC9pbnRlcmZhY2UvcGVyc3BlY3RpdmVzL2FuYWx5c2lzLmh0bWwKQEAgLTAsMCArMSwzOSBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMCBUcmFuc2l0aW9uYWwvL0VOIj4KKworPGh0bWw+Cis8aGVhZD4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PWlzby04ODU5LTEiPgorPHRpdGxlPkRlc2lnbmVyPC90aXRsZT4KKzwvaGVhZD4KKworPGJvZHk+Cis8aDE+QW5hbHlzaXMgUGVyc3BlY3RpdmU8L2gxPgorPHA+VGhlIDxlbT5BbmFseXNpcyBhbmQgVmFsaWRhdGlvbiAKK1BlcnNwZWN0aXZlPC9lbT4gYWxsb3dzIHVzZXJzIHRvIHBlcmZvcm0gYW5hbHlzaXMsIGZpdHRpbmcsIG1vZGVsIGNvbXBhcmlzb24sIGFuZCAKK3ZhbGlkYXRpb24gYWNyb3NzIG11bHRpcGxlIHNpbXVsYXRpb25zIGFuZCBkYXRhIHNldHMuIFRoZSBBbmFseXNpcyBwZXJzcGVjdGl2ZSAKK3VzZXMgZGF0YSBmcm9tIGVpdGhlciBjb21wbGV0ZSBzaW11bGF0aW9uIHJ1bnMgb3IgZGF0YSBpbXBvcnRlZCBpbnRvIFNURU0uIFRoZSBsYXR0ZXIgCitjb3VsZCBiZSByZWFsIGJpby1zdXJ2ZWlsbGFuY2UgZGF0YSBpbiB0aGUgYXBwcm9wcmlhdGUgQ1NWIGZvcm1hdCBvciBkYXRhIGZyb20gYSAKK2NvbXBsZXRlZCBzaW11bGF0aW9uLiA8L3NwYW4+Cis8cD5UaGUgcHVycG9zZSBvZiB0aGlzIHBlcnNwZWN0aXZlIGlzIHRvIGhvbGQgdGhlIHdpbmRvd3MgKGFuZCBhc3NvY2lhdGVkIHRvb2xzKSB0aGF0IAorc3VwcG9ydCB2YXJpb3VzIGFuYWx5c2lzIG9wZXJhdGlvbnMgb24gZXhpc3RpbmcgZGF0YS4gSWYgdGhlIHBlcnNwZWN0aXZlIGlzIG5vdCAKK3Zpc2libGUgb25jZSB5b3Ugc3RhcnQgU1RFTSwganVzdCBnbyB0byB0aGUgbWVudSBiYXIgYW5kIGNsaWNrOjxicj4KKzxicj4KKyZndDtXaW5kb3cmZ3Q7T3BlbiBQZXJzcGVjdGl2ZSZndDtBbmFseXNpczxwPgorQnkgZGVmYXVsdCwgdGhlIEFuYWx5c2lzIHBlcnNwZWN0aXZlIGNvbnRhaW5zIHRocmVlIHZpZXdzLiA8L3NwYW4+Jm5ic3A7SG93ZXZlciB5b3UgY2FuIGNsb3NlIGFueSBvZiB0aGVzZSB2aWV3cyBhbmQgb3BlbiBvdGhlcnMuCis8aDM+RGVmYXVsdCBWaWV3czwvaDM+Cis8dWw+CisJPGxpPjxiPlRhYmJlZCBWaWV3czwvYj46IFRoZSB0YWJiZWQgdmlldyBob2xkcyB0aGUgZm9sbG93aW5nIHZpZXdzLjwvbGk+CisJPHVsPgorCQk8bGk+PGEgaHJlZj0iLi4vdmlld3MvRXN0aW1hdG9ydmlldy5odG1sIj5Fc3RpbWF0b3IgVmlldzwvYT46IFVzZWQgdG8gCisJCWVzdGltYXRlIG1vZGVsIHBhcmFtZXRlcnMgZnJvbSBhbiBleGlzdGluZyBkYXRhIHNldCAoc2ltdWxhdGVkIG9yIHJlYWwpLjxsaT4KKwkJPGEgaHJlZj0iLi4vdmlld3MvU2NlbmFyaW9Db21wYXJpc29udmlldy5odG1sIj5TY2VuYXJpbyBDb21wYXJpc29uIFZpZXc8L2E+OiAKKwkJTWVhc3VyZXMgdGhlIFJNUyBkaWZmZXJlbmNlIGJldHdlZW4gdHdvIGV4aXN0aW5nIGRhdGEgc2V0cyAoc2ltdWxhdGVkIG9yIAorCQlyZWFsKS48bGk+PGEgaHJlZj0iLi4vdmlld3MvTHlhcHVub3Z2aWV3Lmh0bWwiPkx5YXB1bm92IFZpZXc8L2E+OiAKKwkJQ29tcGFyZXMgdHdvIGV4aXN0aW5nIHNjZW5hcmlvcyBiYXNlZCBvbiB0aGVpciB0cmFqZWN0b3JpZXMgaW4gYSAKKwkJTHlhcHVub3YgUGhhc2UgU3BhY2UuPGxpPjxhIGhyZWY9Ii4uL3ZpZXdzL0VwaWRlbWljdmlldy5odG1sIj4KKwkJRXBpZGVtaWMgVmlldzwvYT46IEFnZ3JlZ2F0ZXMgZGF0YSBhY3Jvc3MgbG9jYXRpb25zIGZvciBhIGdpdmVuIGVwaWRlbWljIAorCQlzY2VuYXJpbyBhbmQgcGxvdHMgdGhlIGFnZ3JlZ2F0ZWQgZGF0YSBhbmQgZGlzZWFzZSBpbmNpZGVuY2UuPC91bD4KKzwvdWw+Cis8aW1nIGJvcmRlcj0iMCIgc3JjPSJpbWcvYW5hbHlzaXNwZXJzcGVjdGl2ZS5qcGciIHdpZHRoPSIxMDAwIiBoZWlnaHQ9IjgwMCI+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC9pbnRlcmZhY2UvcGVyc3BlY3RpdmVzL2Rlc2lnbmVyLmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC9pbnRlcmZhY2UvcGVyc3BlY3RpdmVzL2Rlc2lnbmVyLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWNkYzdkYQotLS0gL2Rldi9udWxsCisrKyBiL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2ludGVyZmFjZS9wZXJzcGVjdGl2ZXMvZGVzaWduZXIuaHRtbApAQCAtMCwwICsxLDQ5IEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wIFRyYW5zaXRpb25hbC8vRU4iPgorCis8aHRtbD4KKzxoZWFkPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9aXNvLTg4NTktMSI+Cis8dGl0bGU+RGVzaWduZXI8L3RpdGxlPgorPC9oZWFkPgorCis8Ym9keT4KKzxoMT5EZXNpZ25lciBQZXJzcGVjdGl2ZTwvaDE+Cis8cD5UaGUgPGVtPkRlc2lnbmVyIFBlcnNwZWN0aXZlPC9lbT4gaXMgbG9hZGVkIHRoZSBmaXJzdCB0aW1lIHRoYXQgeW91IGxvYWQKK1NURU0gd2l0aCBhIHNldCBvZiBkZWZhdWx0IFZpZXdzLiBTdWJzZXF1ZW50IHVzZXMgb2YgU1RFTSB3aWxsIGxvYWQgdGhlCitwZXJzcGVjdGl2ZXMgYW5kIHZpZXdzIHRoYXQgeW91IGxhc3QgdXNlZC4gPGJyPgorPGltZyBzcmM9ImltZy9kZXNpZ25lcnBlcnNwZWN0aXZlLnBuZyIgd2lkdGg9IjEwMDAiIGhlaWdodD0iODAwIj4KKzxwPlRoZSBwdXJwb3NlIG9mIHRoaXMgcGVyc3BlY3RpdmUgaXMgdG8gaG9sZCB0aGUgd2luZG93cyB0aGF0IGFyZQordXNlZCBpbiBidWlsZGluZyBhIDxhCisJaHJlZj0iLi4vLi4vY29uY2VwdHMvbW9kZWxpbmdmcmFtZXdvcmsuaHRtbCNzY2VuYXJpbyI+IFNjZW5hcmlvPC9hPgordGhhdCB5b3Ugd2lsbCB0aGVuIHJ1bi4gWW91IGNhbiBhbHNvIHVzZSBpdCB0byBzdGFydCBhbiBleGlzdGluZworc2ltdWxhdGlvbi4KKzxwPlRvIHN0YXJ0IGFuIGV4aXN0aW5nIHNpbXVsYXRpb24sIHNlbGVjdCB0aGUgPGEKKwlocmVmPSIuLi92aWV3cy9zY2VuYXJpb3ZpZXcuaHRtbCI+U2NlbmFyaW8gVmlldzwvYT4uIEl0IHdpbGwgc2hvdyBhbgorZXhpc3RpbmcgcHJvamVjdHMgYW5kIGlmIHlvdSBzZWxlY3QgYSBwcm9qZWN0LCBpdCB3aWxsIGRpc3BsYXkgdGhlIDxhCisJaHJlZj0iLi4vLi4vY29uY2VwdHMvbW9kZWxpbmdmcmFtZXdvcmsuaHRtbCNzY2VuYXJpbyI+IFNjZW5hcmlvPC9hPiBmb3IKK3RoYXQgcHJvamVjdC4gRG91YmxlIGNsaWNrIHRoZSA8YQorCWhyZWY9Ii4uLy4uL2NvbmNlcHRzL21vZGVsaW5nZnJhbWV3b3JrLmh0bWwjc2NlbmFyaW8iPiBTY2VuYXJpbzwvYT4gdG8KK3NlbGVjdCBpdCBhbmQgc3RhcnQgdGhlIHNpbXVsYXRpb24gcnVubmluZy4gU1RFTSB3aWxsIGF1dG9tYXRpY2FsbHkKK3N3aXRjaCB0byB0aGUgPGEgaHJlZj0ic2ltdWxhdGlvbi5odG1sIj5TaW11bGF0aW9uIFBlcnNwZWN0aXZlPC9hPi4KKzxwPlRoZSBmb2xsb3dpbmcgdmlld3MgYXJlIGRpc3BsYXllZCBmb3IgdGhlIERlc2lnbmVyIFBlcnNwZWN0aXZlIGJ5CitkZWZhdWx0LiBIb3dldmVyIHlvdSBjYW4gY2xvc2UgYW55IG9mIHRoZXNlIHZpZXdzIGFuZCBvcGVuIG90aGVycy4KKzxoMz5EZWZhdWx0IFZpZXdzPC9oMz4KKzx1bD48bGk+PGEgaHJlZj0iLi4vdmlld3MvcHJvamVjdHZpZXcuaHRtbCI+U1RFTSBQcm9qZWN0IEV4cGxvcmVyPC9hPjwvbGk+CisJVGhpcyB2aWV3IGlzIHVzZWQgdG8gYnVpbGQgbmV3IFNURU0gcHJvamVjdHMuCisJPGxpPjxiPlRhYmJlZCBWaWV3czwvYj46IFRoZSB0YWJiZWQgdmlldyBob2xkcyB0aGUgZm9sbG93aW5nIHZpZXdzLjwvbGk+CisJPHVsPgorCQk8bGk+PGEgaHJlZj0iLi4vdmlld3Mvc2NlbmFyaW92aWV3Lmh0bWwiPlNjZW5hcmlvIFZpZXc8L2E+PC9saT46CisJCVdoZW4gc2VsZWN0ZWQgdGhpcyB2aWV3IHdpbGwgZGlzcGxheSBhIGxpc3Qgb2YgZXhpc3RpbmcgcHJvamVjdHMgd2l0aAorCQl0aGVpcgorCQk8YSBocmVmPSIuLi8uLi9jb25jZXB0cy9tb2RlbGluZ2ZyYW1ld29yay5odG1sI3NjZW5hcmlvIj4KKwkJU2NlbmFyaW9zPC9hPi4KKwkJPGxpPjxhIGhyZWY9Ii4uL3ZpZXdzL21vZGVsc3ZpZXcuaHRtbCI+TW9kZWxzIFZpZXc8L2E+PC9saT4KKwkJPGxpPjxhIGhyZWY9Ii4uL3ZpZXdzL2dyYXBoc3ZpZXcuaHRtbCI+R3JhcGhzIFZpZXc8L2E+PC9saT4KKwkJPGxpPjxhIGhyZWY9Ii4uL3ZpZXdzL3NlcXVlbmNlcnZpZXcuaHRtbCI+U2VxdWVuY2VyIFZpZXc8L2E+PC9saT4KKwkJPGxpPjxhIGhyZWY9Ii4uL3ZpZXdzL2RlY29yYXRvcnN2aWV3Lmh0bWwiPkRlY29yYXRvcnMgVmlldzwvYT48L2xpPgorCQk8bGk+PGEgaHJlZj0iLi4vdmlld3MvcHJvcGVydGllc3ZpZXcuaHRtbCI+UHJvcGVydGllcyBWaWV3PC9hPjwvbGk+CisJCTxsaT48YSBocmVmPSIuLi92aWV3cy90YXNrc3ZpZXcuaHRtbCI+VGFza3MgVmlldzwvYT48L2xpPgorCQk8bGk+PGEgaHJlZj0iLi4vdmlld3MvZXJyb3JfbG9nLmh0bWwiPkVycm9yIExvZyBWaWV3PC9hPjwvbGk+CisJPC91bD4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2ludGVyZmFjZS9wZXJzcGVjdGl2ZXMvaW1nLy5jdnNpZ25vcmUgYi9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC9pbnRlcmZhY2UvcGVyc3BlY3RpdmVzL2ltZy8uY3ZzaWdub3JlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA4NWU4YmEKLS0tIC9kZXYvbnVsbAorKysgYi9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC9pbnRlcmZhY2UvcGVyc3BlY3RpdmVzL2ltZy8uY3ZzaWdub3JlCkBAIC0wLDAgKzEgQEAKK1RodW1icy5kYgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL3BlcnNwZWN0aXZlcy9pbWcvYW5hbHlzaXNwZXJzcGVjdGl2ZS5qcGcgYi9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC9pbnRlcmZhY2UvcGVyc3BlY3RpdmVzL2ltZy9hbmFseXNpc3BlcnNwZWN0aXZlLmpwZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYzJkNzA0Ci0tLSAvZGV2L251bGwKKysrIGIvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL3BlcnNwZWN0aXZlcy9pbWcvYW5hbHlzaXNwZXJzcGVjdGl2ZS5qcGcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL3BlcnNwZWN0aXZlcy9pbWcvZGVzaWduZXJwZXJzcGVjdGl2ZS5qcGcgYi9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC9pbnRlcmZhY2UvcGVyc3BlY3RpdmVzL2ltZy9kZXNpZ25lcnBlcnNwZWN0aXZlLmpwZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ODNlYTAyCi0tLSAvZGV2L251bGwKKysrIGIvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL3BlcnNwZWN0aXZlcy9pbWcvZGVzaWduZXJwZXJzcGVjdGl2ZS5qcGcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL3BlcnNwZWN0aXZlcy9pbWcvZGVzaWduZXJwZXJzcGVjdGl2ZS5wbmcgYi9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC9pbnRlcmZhY2UvcGVyc3BlY3RpdmVzL2ltZy9kZXNpZ25lcnBlcnNwZWN0aXZlLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42N2IxOTk0Ci0tLSAvZGV2L251bGwKKysrIGIvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL3BlcnNwZWN0aXZlcy9pbWcvZGVzaWduZXJwZXJzcGVjdGl2ZS5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL3BlcnNwZWN0aXZlcy9pbWcvc2ltdWxhdGlvbnBlcnNwZWN0aXZlLnBuZyBiL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2ludGVyZmFjZS9wZXJzcGVjdGl2ZXMvaW1nL3NpbXVsYXRpb25wZXJzcGVjdGl2ZS5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjhkYjkxZgotLS0gL2Rldi9udWxsCisrKyBiL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2ludGVyZmFjZS9wZXJzcGVjdGl2ZXMvaW1nL3NpbXVsYXRpb25wZXJzcGVjdGl2ZS5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL3BlcnNwZWN0aXZlcy9wZXJzcGVjdGl2ZXNvdmVydmlldy5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL3BlcnNwZWN0aXZlcy9wZXJzcGVjdGl2ZXNvdmVydmlldy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMxODFkZjcKLS0tIC9kZXYvbnVsbAorKysgYi9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC9pbnRlcmZhY2UvcGVyc3BlY3RpdmVzL3BlcnNwZWN0aXZlc292ZXJ2aWV3Lmh0bWwKQEAgLTAsMCArMSwzMiBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMCBUcmFuc2l0aW9uYWwvL0VOIj4KKworPGh0bWw+Cis8aGVhZD4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PWlzby04ODU5LTEiPgorPHRpdGxlPk92ZXJ2aWV3PC90aXRsZT4KKzwvaGVhZD4KKworPGJvZHk+Cis8aDE+UGVyc3BlY3RpdmVzPC9oMT4KKzxwPgorU1RFTSBpcyBhbiBFY2xpcHNlIFJpY2ggQ2xpZW50IGFwcGxpY2F0aW9uLiBBcyBzdWNoIGl0IGlzIG9yZ2FuaXplZCBpbnRvCismcXVvdDtwZXJzcGVjdGl2ZXMmcXVvdDsgZWFjaCBvZiB3aGljaCBjb250YWlucyBvbmUgb3IgbW9yZQorPGEgaHJlZj0iLi4vdmlld3Mvdmlld3NvdmVydmlldy5odG1sIj52aWV3czwvYT4uIDxicj4KK1RoZSBjb250ZW50cyBvZiBhIHBlcnNwZWN0aXZlIGNhbiBiZSBjdXN0b21pemVkIGJ5IHRoZSB1c2VyIGJ1dCB0aGUgZGVmYXVsdAorcGVyc3BlY3RpdmVzIGFyZSBkZXNpZ25lZCB0byBzdXBwb3J0IGRpZmZlcmVudCB1c2VzIG9mIHRoZSBTVEVNIGFwcGxpY2F0aW9uLjxwPgorVGhlIFNURU0gc3lzdGVtIGNvbnRhaW5zIHRocmVlICJwZXJzcGVjdGl2ZXMiOgorPHVsPgorCTxsaT5UaGUgPGEgaHJlZj0iYW5hbHlzaXMuaHRtbCI+QW5hbHlzaXM8L2E+IHBlcnNwZWN0aXZlIGlzIHVzZSB0byBhbmFseXplCisJZXBpZGVtaWMgZGF0YSZuYnNwOyBnYXRoZXJlZCBmcm9tIGNvbXBsZXRlZCBzaW11bGF0aW9ucyBvciBmcm9tIGltcG9ydAorCXB1YmxpYyBoZWFsdGggcmVwb3J0cy4gSXQgYWxzbyBzdXBwb3J0cyBjb21wYXJpc29uIGFuZCB2YWxpZGF0aW9uIG9mCisJbXVsdGlwbGUgZGF0YSBzZXRzLjwvbGk+CisJCisJPGxpPlRoZSA8YSBocmVmPSJkZXNpZ25lci5odG1sIj4gRGVzaWduZXI8L2E+IHBlcnNwZWN0aXZlIGlzIHVzZWQKKwl0byBkZXNpZ24gYW5kIGNyZWF0ZSBuZXcgU1RFTSBTaW11bGF0aW9ucy48L2xpPgorCQorCTxsaT5UaGUgPGEgaHJlZj0ic2ltdWxhdGlvbi5odG1sIj4gU2ltdWxhdGlvbjwvYT4gcGVyc3BlY3RpdmUgaXMKKwl1c2VkIHRvIHN0YXJ0LCZuYnNwOyB2aWV3LCBhbmQgY29udHJvbCBydW5uaW5nIFNURU0gU2ltdWxhdGlvbnMuPC9saT4KKworPC91bD4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2ludGVyZmFjZS9wZXJzcGVjdGl2ZXMvc2ltdWxhdGlvbi5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL3BlcnNwZWN0aXZlcy9zaW11bGF0aW9uLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzkyZjhjMQotLS0gL2Rldi9udWxsCisrKyBiL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2ludGVyZmFjZS9wZXJzcGVjdGl2ZXMvc2ltdWxhdGlvbi5odG1sCkBAIC0wLDAgKzEsNTEgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAgVHJhbnNpdGlvbmFsLy9FTiI+CisKKzxodG1sPgorPGhlYWQ+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1pc28tODg1OS0xIj4KKzx0aXRsZT5TaW11bGF0aW9uIFBlcnNwZWN0aXZlPC90aXRsZT4KKzwvaGVhZD4KKworPGJvZHk+Cis8aDE+U2ltdWxhdGlvbiBQZXJzcGVjdGl2ZTwvaDE+Cis8cD5UaGUgPGVtPlNpbXVsYXRpb24gUGVyc3BlY3RpdmU8L2VtPiBpcyBsb2FkZWQgd2hlbiBhIHNpbXVsYXRpb24gaXMKK2FjdGl2YXRlZCBmcm9tIHRoZSA8YSBocmVmPSJkZXNpZ25lci5odG1sIj5EZXNpZ25lciBwZXJzcGVjdGl2ZTwvYT4gb3IKK2lmIHRoZSB1c2VyIHNlbGVjdHMgaXQuIEl0IGlzIHN0YXJ0ZWQgd2l0aCBhIHNldCBvZiBkZWZhdWx0IFZpZXdzLgorU3Vic2VxdWVudCB1c2VzIG9mIFNURU0gd2lsbCBsb2FkIHRoZSBwZXJzcGVjdGl2ZXMgYW5kIHZpZXdzIHRoYXQgeW91CitsYXN0IHVzZWQuIDxicj4KKzxpbWcgc3JjPSJpbWcvc2ltdWxhdGlvbnBlcnNwZWN0aXZlLnBuZyIgd2lkdGg9IjEwMDAiIGhlaWdodD0iODAwIj4KKzxwPlRoZSBwdXJwb3NlIG9mIHRoaXMgcGVyc3BlY3RpdmUgaXMgdG8gaG9sZCB0aGUgd2luZG93cyB0aGF0IGFyZQordXNlZCB0byBkaXNwbGF5IHRoZSBwcm9ncmVzcyBvZiBhIHNpbXVsYXRpb24gYXMgaXQgcnVucy4gVGhlIGZvbGxvd2luZworVmlld3MgYXJlIGRpc3BsYXllZCBieSBkZWZhdWx0LiBIb3dldmVyIHlvdSBjYW4gY2xvc2UgYW55IG9mIHRoZXNlIHZpZXdzCithbmQgb3BlbiBvdGhlcnMuCis8aDM+RGVmYXVsdCBWaWV3czwvaDM+Cis8dWw+CisJPGxpPjxhIGhyZWY9Ii4uL3ZpZXdzL21hcHZpZXcuaHRtbCI+TWFwIFZpZXc8L2E+PC9saT4KKwlUaGlzIHZpZXcgaXMgdXNlZCB0byBncmFwaGljYWxseSBkaXNwbGF5IHRoZSBzdGF0ZSBvZiB0aGUgc2ltdWxhdGlvbi4KKwk8bGk+PGI+VGFiYmVkIFZpZXdzPC9iPjogVGhlIHRhYmJlZCB2aWV3IGhvbGRzIHRoZSBmb2xsb3dpbmcgdmlld3MuPC9saT4KKwk8dWw+CisJCTxsaT48YSBocmVmPSIuLi92aWV3cy9zY2VuYXJpb3ZpZXcuaHRtbCI+U2NlbmFyaW8gVmlldzwvYT46IFdoZW4KKwkJc2VsZWN0ZWQgdGhpcyB2aWV3IHdpbGwgZGlzcGxheSBhIGxpc3Qgb2YgZXhpc3RpbmcgcHJvamVjdHMuIFNlbGVjdGluZworCQl0aGUgcHJvamVjdCB3aWxsIGRpc3BsYXkgdGhlIDxhCisJCQlocmVmPSIuLi8uLi9jb25jZXB0cy9tb2RlbGluZ2ZyYW1ld29yay5odG1sI3NjZW5hcmlvIj4gU2NlbmFyaW88L2E+CisJCXdoaWNoIGNhbiBiZSBzZWxlY3RlZCB0byBydW4gdGhlIHNpbXVsYXRpb24uPC9saT4KKwkJPGxpPjxhIGhyZWY9Ii4uL3ZpZXdzL2NvbnRyb2x2aWV3Lmh0bWwiPlNpbXVsYXRpb24gQ29udHJvbAorCQlWaWV3PC9hPjwvbGk+CisJCTxsaT48YSBocmVmPSIuLi92aWV3cy9tb2RlbHN2aWV3Lmh0bWwiPk1vZGVscyBWaWV3PC9hPjwvbGk+CisJCTxsaT48YSBocmVmPSIuLi92aWV3cy9ncmFwaHN2aWV3Lmh0bWwiPkdyYXBocyBWaWV3PC9hPjwvbGk+CisJCTxsaT48YSBocmVmPSIuLi92aWV3cy9zZXF1ZW5jZXJ2aWV3Lmh0bWwiPlNlcXVlbmNlciBWaWV3PC9hPjwvbGk+CisJCTxsaT48YSBocmVmPSIuLi92aWV3cy9kZWNvcmF0b3Jzdmlldy5odG1sIj5EZWNvcmF0b3JzIFZpZXc8L2E+PC9saT4KKwkJPGxpPjxhIGhyZWY9Ii4uL3ZpZXdzL3Byb3BlcnRpZXN2aWV3Lmh0bWwiPlByb3BlcnRpZXMgVmlldzwvYT48L2xpPgorCQk8bGk+PGEgaHJlZj0iLi4vdmlld3MvdGFza3N2aWV3Lmh0bWwiPlRhc2tzIFZpZXc8L2E+PC9saT4KKwkJPGxpPjxhIGhyZWY9Ii4uL3ZpZXdzL2Vycm9yX2xvZy5odG1sIj5FcnJvciBMb2cgVmlldzwvYT48L2xpPgorCTwvdWw+CisJPGgzPk9wdGlvbmFsIFZpZXdzPC9oMz4KKwk8cD5UaGUgZm9sbG93aW5nIHZpZXdzIGNhbiBiZSBzZWxlY3RlZCBmcm9tIHRoZSA8Yj5XaW5kb3ctPk90aGVyPC9iPgorCW1lbnUuCisJPHVsPgorCQk8bGk+PGEgaHJlZj0iLi4vdmlld3MvZ2UuaHRtbCI+R29vZ2xlIEVhcnRoIEludGVyZmFjZTwvYT48L2xpPgorCQlUaGlzIHZpZXcgaXMgdXNlZCB0byBwcm9qZWN0IHRoZSBzcHJlYWQgb2YgZGlzZWFzZSBvbiB0aGUgM0QKKwkJR29vZ2xlRWFydGggaW1hZ2UuCisJPC91bD4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2ludGVyZmFjZS9wcmVmZXJlbmNlcy9pbWcvbG9nZ2luZ3ByZWZlcmVuY2VzLnBuZyBiL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2ludGVyZmFjZS9wcmVmZXJlbmNlcy9pbWcvbG9nZ2luZ3ByZWZlcmVuY2VzLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZTA4MmUzCi0tLSAvZGV2L251bGwKKysrIGIvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL3ByZWZlcmVuY2VzL2ltZy9sb2dnaW5ncHJlZmVyZW5jZXMucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2ludGVyZmFjZS9wcmVmZXJlbmNlcy9pbWcvcG9wdWxhdGlvbm1vZGVsaW5nLmpwZyBiL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2ludGVyZmFjZS9wcmVmZXJlbmNlcy9pbWcvcG9wdWxhdGlvbm1vZGVsaW5nLmpwZwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi43ZmRhYTM5Ci0tLSAvZGV2L251bGwKKysrIGIvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL3ByZWZlcmVuY2VzL2ltZy9wb3B1bGF0aW9ubW9kZWxpbmcuanBnCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2ludGVyZmFjZS9wcmVmZXJlbmNlcy9pbWcvcHJlZmVyZW5jZXNnZWFkdmFuY2VkLmpwZyBiL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2ludGVyZmFjZS9wcmVmZXJlbmNlcy9pbWcvcHJlZmVyZW5jZXNnZWFkdmFuY2VkLmpwZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMTJhNDM0Ci0tLSAvZGV2L251bGwKKysrIGIvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL3ByZWZlcmVuY2VzL2ltZy9wcmVmZXJlbmNlc2dlYWR2YW5jZWQuanBnCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2ludGVyZmFjZS9wcmVmZXJlbmNlcy9pbWcvcHJlZmVyZW5jZXNnZXRvcGxldmVsLmpwZyBiL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2ludGVyZmFjZS9wcmVmZXJlbmNlcy9pbWcvcHJlZmVyZW5jZXNnZXRvcGxldmVsLmpwZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMGFlNzAyCi0tLSAvZGV2L251bGwKKysrIGIvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL3ByZWZlcmVuY2VzL2ltZy9wcmVmZXJlbmNlc2dldG9wbGV2ZWwuanBnCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2ludGVyZmFjZS9wcmVmZXJlbmNlcy9pbWcvcHJlZmVyZW5jZXNtYXBkYXRhbWdudC5qcGcgYi9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC9pbnRlcmZhY2UvcHJlZmVyZW5jZXMvaW1nL3ByZWZlcmVuY2VzbWFwZGF0YW1nbnQuanBnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEwNjI2NDEKLS0tIC9kZXYvbnVsbAorKysgYi9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC9pbnRlcmZhY2UvcHJlZmVyZW5jZXMvaW1nL3ByZWZlcmVuY2VzbWFwZGF0YW1nbnQuanBnCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2ludGVyZmFjZS9wcmVmZXJlbmNlcy9pbWcvcHJlZmVyZW5jZXNtYXB2aWV3LmpwZyBiL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2ludGVyZmFjZS9wcmVmZXJlbmNlcy9pbWcvcHJlZmVyZW5jZXNtYXB2aWV3LmpwZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40OTRiNzg0Ci0tLSAvZGV2L251bGwKKysrIGIvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL3ByZWZlcmVuY2VzL2ltZy9wcmVmZXJlbmNlc21hcHZpZXcuanBnCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2ludGVyZmFjZS9wcmVmZXJlbmNlcy9pbWcvcHJlZmVyZW5jZXNvcGVubWVudS5qcGcgYi9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC9pbnRlcmZhY2UvcHJlZmVyZW5jZXMvaW1nL3ByZWZlcmVuY2Vzb3Blbm1lbnUuanBnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM1M2QxNmMKLS0tIC9kZXYvbnVsbAorKysgYi9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC9pbnRlcmZhY2UvcHJlZmVyZW5jZXMvaW1nL3ByZWZlcmVuY2Vzb3Blbm1lbnUuanBnCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2ludGVyZmFjZS9wcmVmZXJlbmNlcy9pbWcvcHJlZmVyZW5jZXNvcGVubWVudS5wbmcgYi9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC9pbnRlcmZhY2UvcHJlZmVyZW5jZXMvaW1nL3ByZWZlcmVuY2Vzb3Blbm1lbnUucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdmY2NkM2IKLS0tIC9kZXYvbnVsbAorKysgYi9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC9pbnRlcmZhY2UvcHJlZmVyZW5jZXMvaW1nL3ByZWZlcmVuY2Vzb3Blbm1lbnUucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2ludGVyZmFjZS9wcmVmZXJlbmNlcy9pbWcvcHJlZmVyZW5jZXNzaW1tYW5hZ2VtZW50LmpwZyBiL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2ludGVyZmFjZS9wcmVmZXJlbmNlcy9pbWcvcHJlZmVyZW5jZXNzaW1tYW5hZ2VtZW50LmpwZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MDU2ZTlhCi0tLSAvZGV2L251bGwKKysrIGIvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL3ByZWZlcmVuY2VzL2ltZy9wcmVmZXJlbmNlc3NpbW1hbmFnZW1lbnQuanBnCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2ludGVyZmFjZS9wcmVmZXJlbmNlcy9pbWcvcHJlZmVyZW5jZXNzaW1tYW5hZ2VtZW50LnBuZyBiL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2ludGVyZmFjZS9wcmVmZXJlbmNlcy9pbWcvcHJlZmVyZW5jZXNzaW1tYW5hZ2VtZW50LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZTA4YzAyCi0tLSAvZGV2L251bGwKKysrIGIvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL3ByZWZlcmVuY2VzL2ltZy9wcmVmZXJlbmNlc3NpbW1hbmFnZW1lbnQucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2ludGVyZmFjZS9wcmVmZXJlbmNlcy9pbWcvcHJlZmVyZW5jZXN0b3BsZXZlbC5qcGcgYi9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC9pbnRlcmZhY2UvcHJlZmVyZW5jZXMvaW1nL3ByZWZlcmVuY2VzdG9wbGV2ZWwuanBnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRiYjY4OWYKLS0tIC9kZXYvbnVsbAorKysgYi9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC9pbnRlcmZhY2UvcHJlZmVyZW5jZXMvaW1nL3ByZWZlcmVuY2VzdG9wbGV2ZWwuanBnCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2ludGVyZmFjZS9wcmVmZXJlbmNlcy9pbWcvcHJlZmVyZW5jZXN0b3BsZXZlbC5wbmcgYi9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC9pbnRlcmZhY2UvcHJlZmVyZW5jZXMvaW1nL3ByZWZlcmVuY2VzdG9wbGV2ZWwucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM2OGExYTUKLS0tIC9kZXYvbnVsbAorKysgYi9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC9pbnRlcmZhY2UvcHJlZmVyZW5jZXMvaW1nL3ByZWZlcmVuY2VzdG9wbGV2ZWwucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2ludGVyZmFjZS9wcmVmZXJlbmNlcy9pbWcvcHJlZmVyZW5jZXN2aXN1YWxpemF0aW9udG9wbGV2ZWwuanBnIGIvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL3ByZWZlcmVuY2VzL2ltZy9wcmVmZXJlbmNlc3Zpc3VhbGl6YXRpb250b3BsZXZlbC5qcGcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzEzNTgzMgotLS0gL2Rldi9udWxsCisrKyBiL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2ludGVyZmFjZS9wcmVmZXJlbmNlcy9pbWcvcHJlZmVyZW5jZXN2aXN1YWxpemF0aW9udG9wbGV2ZWwuanBnCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2ludGVyZmFjZS9wcmVmZXJlbmNlcy9pbWcvc29sdmVycHJlZmVyZW5jZXMucG5nIGIvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL3ByZWZlcmVuY2VzL2ltZy9zb2x2ZXJwcmVmZXJlbmNlcy5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZThkZTdlMwotLS0gL2Rldi9udWxsCisrKyBiL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2ludGVyZmFjZS9wcmVmZXJlbmNlcy9pbWcvc29sdmVycHJlZmVyZW5jZXMucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2ludGVyZmFjZS9wcmVmZXJlbmNlcy9wb3B1bGF0aW9ubW9kZWxpbmcuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2ludGVyZmFjZS9wcmVmZXJlbmNlcy9wb3B1bGF0aW9ubW9kZWxpbmcuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MzVhOWI4Ci0tLSAvZGV2L251bGwKKysrIGIvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL3ByZWZlcmVuY2VzL3BvcHVsYXRpb25tb2RlbGluZy5odG1sCkBAIC0wLDAgKzEsMTMgQEAKKzwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi9odG1sNC9sb29zZS5kdGQiPg0KKzxodG1sPg0KKzxoZWFkPg0KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTEiPg0KKzx0aXRsZT5Qb3B1bGF0aW9uIE1vZGVsaW5nPC90aXRsZT4NCis8L2hlYWQ+DQorPGJvZHk+DQorPGgxPlBvcHVsYXRpb24gTW9kZWxpbmc8L2gxPg0KKzxwPlBvcHVsYXRpb24gTW9kZWxpbmc8L3A+DQorPGltZyBzcmM9ImltZy9wb3B1bGF0aW9ubW9kZWxpbmcuanBnIiAvPg0KKw0KKzwvYm9keT4NCis8L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL3ByZWZlcmVuY2VzL3ByZWZlcmVuY2VzZ2VhZHZhbmNlZC5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL3ByZWZlcmVuY2VzL3ByZWZlcmVuY2VzZ2VhZHZhbmNlZC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdmN2VlYzQKLS0tIC9kZXYvbnVsbAorKysgYi9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC9pbnRlcmZhY2UvcHJlZmVyZW5jZXMvcHJlZmVyZW5jZXNnZWFkdmFuY2VkLmh0bWwKQEAgLTAsMCArMSwzMSBAQAorPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL2h0bWw0L2xvb3NlLmR0ZCI+Cis8aHRtbD4KKzxoZWFkPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9SVNPLTg4NTktMSI+Cis8dGl0bGU+R29vZ2xlIEVhcnRoIEFkdmFuY2VkPC90aXRsZT4KKzwvaGVhZD4KKzxib2R5PgorPGgxPkdvb2dsZSBFYXJ0aCBBZHZhbmNlZDwvaDE+Cis8dWw+CisJPGxpPjxlbT4iQWxsb3cgZGVidWcgb3V0cHV0IG9uIENvbnNvbGUiPC9lbT4gCisJICAgIDxicj5UaGlzIGlzIHVzZWQgZm9yIHByb2JsZW0gZGV0ZXJtaW5hdGlvbi4KKy4gICAgICAgKERlZmF1bHQ6Jm5ic3A7RmFsc2UpPC9saT4KKwk8bGk+PGVtPiJVc2UgR29vZ2xlRWFydGggQm91bmRpbmcgQm94IHRvIGZpbHRlciBvdXRwdXQiPC9lbT4KKwkgICAgPGJyPlRoaXMgd2lsbCBpbXByb3ZlIHBlcmZvcm1hbmNlIGJlY2F1c2Ugb25seSBkYXRhIGlzIHNlbnQgdG8gR29vZ2xlRWFydGgKKwkgICAgZm9yIHRoZSBhcmVhcyBzaG93biBpbiB0aGUgR29vZ2xlRWFydGggd2luZG93LiAgCisJICAgIFRoaXMgaXMgdXNlZnVsIHdoZW4geW91IGFyZSB1c3VhbGx5ICB6b29tZWQgaW4gb24gR29vZ2xlRWFydGggdG8gZXhhbWluZSBhIAorCSAgICBzbWFsbCBhcmVhLiAgVGhpcyBpcyBvbmx5IGF2YWlsYWJsZSB3aGVuIHVzaW5nIG9uZSB0aGUgc2VydmxldCByZWxhdGVkIAorCSAgICBkaXNwbGF5IG1ldGhvZHMuCisJICAgIChEZWZhdWx0OiZuYnNwO0ZhbHNlKTwvbGk+CisJPGxpPjxlbT4iU2hvdyBBZG1pbiBBcmVhIEJvcmRlcnMiPC9lbT4KKwkgICAgIDxicj5JZiBzZWxlY3RlZCB0aGVuIHRoZSBib3JkZXJzIG9mIHRoZSBTVEVNIEFkbWluaXN0cmF0aW9uIGFyZWFzIGFyZSBzaG93bi4KKwkgICAgIFRoaXMgaXMgdXN1YWxseSBub3QgbmVlZGVkIGJlY2F1c2UgR29vZ2xlRWFydGggYWxzbyBoYXMgYW4gb3B0aW9uIHRvIAorCSAgICAgc2hvdyBib3JkZXIgYXJlYXMuCisJICAgICAoRGVmYXVsdDombmJzcDtGYWxzZSk8L2xpPgorCTxsaT48ZW0+IkV4cGVyaW1lbnRhbCBPcHRpb24iPC9lbT4KKwkgICAgICA8YnI+VXNlZCB0byB0dXJuIG9uIHZhcmlvdXMgZXhwaXJtZW50YWwgb3B0aW9ucy4gTm90IG5vcm1hbGx5IHVzZWQhCisJICAgICAgKERlZmF1bHQ6Jm5ic3A7RmFsc2UpPC9saT4KKzwvdWw+Cis8aW1nIHNyYz0iaW1nL3ByZWZlcmVuY2VzZ2VhZHZhbmNlZC5qcGciIC8+Cis8L2JvZHk+Cis8L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL3ByZWZlcmVuY2VzL3ByZWZlcmVuY2VzZ2V0b3BsZXZlbC5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL3ByZWZlcmVuY2VzL3ByZWZlcmVuY2VzZ2V0b3BsZXZlbC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU2NjhlZGYKLS0tIC9kZXYvbnVsbAorKysgYi9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC9pbnRlcmZhY2UvcHJlZmVyZW5jZXMvcHJlZmVyZW5jZXNnZXRvcGxldmVsLmh0bWwKQEAgLTAsMCArMSw2NSBAQAorPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL2h0bWw0L2xvb3NlLmR0ZCI+Cis8aHRtbD4KKzxoZWFkPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9SVNPLTg4NTktMSI+Cis8dGl0bGU+R29vZ2xlIEVhcnRoIFByZWZlcmVuY2VzPC90aXRsZT4KKzwvaGVhZD4KKzxib2R5PgorPGgxPkdvb2dsZSBFYXJ0aCBQcmVmZXJlbmNlczwvaDE+Cis8cD4KK1NwZWNpZmllcyB0aGUgcHJlZmVyZW5jZXMgdXNlZCBieSB0aGUgU1RFTSB0byBHb29nbGVFYXJ0aCBpbnRlcmZhY2UuCis8cD4KKzx1bD4KKyAgPGxpPjxlbT5DaG9vc2UgdGhlIE1ldGhvZCB1c2VkIHRvIGRpc3BsYXkgU1RFTSBSZXN1bHRzPC9lbT48L2xpPgorICA8dWw+CisJPGxpPjxlbT5Mb2dPbmx5PC9lbT48YnI+V2l0aCB0aGlzIG9wdGlvbiwgdGhlIEtNTCBmaWxlcyAKKwlhcmUgd3JpdHRlbiBidXQgbm90IGRpc3BsYXllZCBieSBHb29nbGVFYXJ0aC4gCisJVGhpcyB3b3VsZCBiZSB1c2VkIHdoZW4geW91IGFyZSBlaXRoZXIgZ29pbmcgdG8gZGlzcGxheSAKKwl0aGUgR29vZ2xlRWFydGggdmlzdWFsaXphdGlvbiBhdCBhIGxhdGVyIHRpbWUgb3IgaWYgeW91IGFyZSAKKwlnb2luZyB0byBydW4gR29vZ2xlRWFydGggZnJvbSBhbm90aGVyIHN5c3RlbSB3aXRoIHRoZSBLTUwgCisJZmlsZXMgb24gYSBzaGFyZWQgZGlzay48L2xpPgorCTxsaT48ZW0+IkxvZytTZXJ2bGV0IjwvZW0+PGJyPldpdGggdGhpcyBvcHRpb24sIAorCXRoZSBLTUwgZmlsZXMgYXJlIHdyaXR0ZW4gYW5kIHRoZW4gZGlzcGxheWVkIGJ5IEdvb2dsZUVhcnRoLiAKKwlHb29nbGVFYXJ0aCBhY3R1YWxseSByZXF1ZXN0cyB0aGUgZmlsZSBmcm9tIGEgd2Vic2VydmVyIAorCVNlcnZsZXQgd2hpY2ggcmVhZHMgdGhlIGZpbGUgYW5kIHNlbmRzIGl0IHRvIEdvb2dsZUVhcnRoLjwvbGk+CisJPGxpPjxlbT4iQXN5bmNTZXJ2bGV0IjwvZW0+PGJyPlRoZSBLTUwgaXMgd3JpdHRlbiBvbiBldmVyeSBjeWNsZSwgCisJb3ZlcmxheWluZyB0aGUgZmlsZSB3cml0dGVuIGZvciB0aGUgcHJldmlvdXMgY3ljbGUuIEdvb2dsZUVhcnRoIAorCWFza3MgZm9yIG5ldyBkYXRhIG9uIGEgcHJlZGV0ZXJtaW5lZCBpbnRlcnZhbCBhbmQgaXMgc2VudCB0aGUgCisJY3VycmVudCBLTUwuICBUaGUgYWR2YW50YWdlIG92ZXIgdGhlIHByZXZpb3VzIG1ldGhvZCBpcyB0aGF0IAorCWl0IGhlbHBzIGtlZXAgR29vZ2xlRWFydGggZnJvbSBmYWxsaW5nIHRvbyBmYXIgYmVoaW5kIHRoZSBTVEVNIHByb2Nlc3NpbmcuPC9saT4KKwk8bGk+PGVtPiJEaXJlY3RMYXVuY2giPC9lbT48YnI+V2l0aCB0aGlzIG9wdGlvbiwgdGhlIEtNTCBmaWxlcyAKKwlhcmUgZGlyZWN0bHkgc2VudCB0byBHb29nbGVFYXJ0aCB3aXRob3V0IHVzaW5nIGFuIGludGVybWVkaWF0ZSAKKwl3ZWIgc2VydmVyLiBUaGlzIGNhbiBjYXVzZSBwcm9ibGVtcyBiZWNhdXNlIEdvb2dsZUVhcnRoIG1heSBnZXQgCisJZmlsZXMgZmFzdGVyIHRoYW4gaXQgY2FuIHByb2Nlc3MgdGhlbSBidXQgaXQgaXMgbW9yZSBlZmZpY2llbnQuPC9saT4KKwk8bGk+PGVtPiJNYW51YWxEaXNwbGF5IjwvZW0+PGJyPiBUaGUgbWFwIGlzIGdlbmVyYXRlZCBieSB1c2VyIAorCWNsaWNraW5nIHRoZSA8Yj5EaXNwbGF5PC9iPiBidXR0b24uIFRoaXMgaXMgdGhlIGRlZmF1bHQgb3B0aW9uLjwvbGk+CisgIDwvdWw+CisgIDxsaT48ZW0+IkZvbGRlciBmb3IgS01MIGxvZ2dpbmc6IjwvZW0+VGhpcyBpcyB0aGUgZm9sZGVyIHdoZXJlIAorCVNURU0gd2lsbCB3cml0ZSB0aGUgS01MIGZpbGVzIHRoYXQgR29vZ2xlRWFydGggd2lsbCByZWFkLiAgCisJSWYgaXQgYWxyZWFkeSBjb250YWlucyBLTUwgZmlsZXMsIHRoZSB1c2VyIHdpbGwgYmUgZ2l2ZW4gCisJdGhlIG9wb3J0dW5pdHkgdG8gZGVsZXRlIHRoZW0sIGtlZXAgdGhlbSBvciBjaG9vc2UgYSBuZXcgZm9sZGVyLjwvbGk+CisgIDxsaT48ZW0+IlVzZSBpbnRlcm5hbCB3ZWJzZXJ2ZXIiPC9lbT48YnI+VGhpcyBpcyB1c2VkIHRvIGNhdXNlIHRoZSAKKyAgICB3ZWJzZXJ2ZXIgYnVpbHQgaW50byBFY2xpcHNlIHRvIGJlIHVzZWQuPC9saT4KKyAgPGxpPjxlbT4iSG9zdG5hbWU6cG9ydCBmb3IgZXh0ZXJuYWwgd2Vic2VydmVyIjwvZW0+CisgICAgPGJyPlRoaXMgaXMgdGhlIHJlcXVpcmVkIGhvc3RuYW1lIGFuZCBwb3J0IGZvciBhbiBleHRlcm5hbCB3ZWJzZXJ2ZXIuIAorICAgIE5vcm1hbGx5IHRoZSBpbnRlcm5hbCB3ZWJzZXJ2ZXIgd291bGQgYmUgdXNlZCBzbyB0aGlzIGlzIG5vdCBuZWVkZWQgCisgICAgYnV0IHRoZXJlIGFyZSBjYXNlcyB3aGVyZSBvbmUgbWlnaHQgd2FudCB0byB1c2UgYW4gZXhpc3Rpbmcgd2ViIHNlcnZlci4gPC9saT4KKyAgPGxpPjxlbT4iQXV0b21hdGljYWxseSBzdGFydHVwIEdvb2dsZUVhcnRoIjwvZW0+CisgICAgPGJyPklmIHNwZWNpZmllZCB0aGVuIHdoZW4gdGhlIFNURU0tR29vZ2xlRWFydGggdmlldyBpcyBzdGFydGVkLAorICAgICB0aGVuIHRoZSBHb29nbGVFYXJ0aCBhcHBsaWNhdGlvbiBpcyBhbHNvIGxhdW5jaGVkLjwvbGk+CisgIDxsaT48ZW0+IkF1dG9tYXRpY2FsbHkgcHJvY2VzcyBldmVyeSBzaW11bGF0aW9uIjwvZW0+CisgICAgPGJyPmlmIHNwZWNpZmllZCwgdGhlbiB3aGVuIHlvdSBzdGFydCBhbnkgc2ltdWxhdGlvbiBydW5uaW5nLCAKKyAgICBpdCB3aWxsIGF1dG9tYXRpY2FsbHkgaGF2ZSBpdHMgcHJvY2Vzc2luZyBiZSBtYXBwZWQgdG8gR29vZ2xlRWFydGguICAKKyAgICBPbmx5IG9uZSBzaW11bGF0aW9uIHdpbGwgYmUgZGlzcGxheWVkIGJ5IEdFIHNpbmNlIGl0IHdvdWxkIAorICAgIGJlIGNvdW50ZXJwcm9kdWN0aXZlIHRvIHNob3cgMiBkaWZmZXJlbnQgdmlld3MgYXQgdGhlIHNhbWUgdGltZS4gPC9saT4KKyAgPGxpPjxlbT4iV3JpdGUgS01MIGZpbGVzIG9ubHkgZXZlcnkgTiB0aCBjeWNsZSI8L2VtPgorICAgIDxicj5JZiB0aGUgc2ltdWxhdGlvbiBkb2VzIG5vdCBjaGFuZ2UgcmFwaWRseSBmcm9tIGN5Y2xlIHRvIGN5Y2xlLCAKKyAgICBzaWduaWZpY2FudCBvdmVyaGVhZCBjYW4gYmUgc2F2ZWQgYnkgb25seSBzZW5kaW5nIGRhdGEgdG8gCisgICAgR29vZ2xlRWFydGggZXZlcnkgTnRoIGN5Y2xlLjwvbGk+CisgIDxsaT48ZW0+IkNob3NlIEFzcGVjdCB0byBiZSBMb2dnZWQuY3ljbGUiPC9lbT4KKyAgICA8YnI+U2VsZWN0IHRoZSBkaXNlYXNlIGFzcGVjdCB0byBiZSBkaXNwbGF5ZWQgYXMgY29sb3JlZCBwb2x5Z29ucworICAgIG9uIHRoZSBHb29nbGVFYXJ0aCBtYXAuPC9saT4KKzwvdWw+Cis8aW1nIHNyYz0iaW1nL3ByZWZlcmVuY2VzZ2V0b3BsZXZlbC5qcGciIC8+Cis8L2JvZHk+Cis8L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL3ByZWZlcmVuY2VzL3ByZWZlcmVuY2VzbG9nZ2luZy5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL3ByZWZlcmVuY2VzL3ByZWZlcmVuY2VzbG9nZ2luZy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk4ZjJiZjgKLS0tIC9kZXYvbnVsbAorKysgYi9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC9pbnRlcmZhY2UvcHJlZmVyZW5jZXMvcHJlZmVyZW5jZXNsb2dnaW5nLmh0bWwKQEAgLTAsMCArMSwxNiBAQAorPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL2h0bWw0L2xvb3NlLmR0ZCI+Cis8aHRtbD4KKzxoZWFkPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9SVNPLTg4NTktMSI+Cis8dGl0bGU+U2ltdWxhdGlvbiBNYW5hZ2VtZW50PC90aXRsZT4KKzwvaGVhZD4KKzxib2R5PgorPGgxPkxvZ2dpbmc8L2gxPgorPHA+CitPbiB0aGUgbG9nZ2luZyBwcmVmZXJlbmNlIHBhZ2UsIHlvdSBjYW4gc3BlY2lmeSB3aGV0aGVyIHRvIGxvZyBpbnRlZ2VycyBvciByZWFsIG51bWJlcnMgaW4gbG9nIGZpbGVzLiAKK1RoZSBkZWZhdWx0IGlzIHRvIGxvZyByZWFsIG51bWJlcnMuCisgPC9wPgorIDxici8+CisgPGltZyBzcmM9ImltZy9sb2dnaW5ncHJlZmVyZW5jZXMucG5nIj4KKzwvYm9keT4KKzwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC9pbnRlcmZhY2UvcHJlZmVyZW5jZXMvcHJlZmVyZW5jZXNtYXBkYXRhbWdudC5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL3ByZWZlcmVuY2VzL3ByZWZlcmVuY2VzbWFwZGF0YW1nbnQuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMDYwYTVhCi0tLSAvZGV2L251bGwKKysrIGIvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL3ByZWZlcmVuY2VzL3ByZWZlcmVuY2VzbWFwZGF0YW1nbnQuaHRtbApAQCAtMCwwICsxLDM0IEBACis8IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIvaHRtbDQvbG9vc2UuZHRkIj4KKzxodG1sPgorPGhlYWQ+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0xIj4KKzx0aXRsZT5NYXAgRGF0YSBNYW5hZ2VtZW50PC90aXRsZT4KKzwvaGVhZD4KKzxib2R5PgorPGgxPk1hcCBEYXRhIE1hbmFnZW1lbnQ8L2gxPgorPHA+VGhlIE1hcCBEYXRhIE1hbmFnZW1lbnQgcHJlZmVyZW5jZXMgcGFnZSBzZXRzIHByZWZlcmVuY2VzIGZvcgorbWFuYWdpbmcgdGhlIGxhdGl0dWRlL2xvbmdpdHVkZSBkYXRhIHRoYXQgZGVmaW5lcyB0aGUgYm9yZGVycyBvZgorZ2VvZ3JhcGhpYyBwb2x5Z29ucy48L3A+Cis8dWw+CisJPGxpPjxlbT4gIkRvd24gc2FtcGxlIGxhdGl0dWRlL2xvbmdpdHVkZSBwb2x5Z29ucy4iPC9lbT4gSWYgVHJ1ZSwKKwl0aGVuIHRoZSBmdWxsIHJlc29sdXRpb24gcG9seWdvbiBkYXRhIHdpbGwgYmUgInNhbXBsZWQiIGJ5IHNraXBwaW5nCisJb3ZlciBkYXRhIHBvaW50cyBpbiB0aGUgcG9seWdvbnMgKGFzIHNwZWNpZmllZCBpbiB0aGUgc2FtcGxlIGZyZXF1ZW5jeSkKKwkoRGVmYXVsdDombmJzcDtGYWxzZSk8L2xpPgorCTxsaT48ZW0+ICJsYXRpdHVkZS9sb25naXR1ZGUgZGF0YSBzYW1wbGUgZnJlcXVlbmN5LiI8L2VtPlRoZQorCW51bWJlciBvZiBsYXQvbG9uZyBkYXRhIHBvaW50cyB0byBza2lwIHdoZW4gc2FtcGxpbmcgdGhlIGZ1bGwKKwlyZXNvbHV0aW9uIGRhdGEuIChEZWZhdWx0OiZuYnNwOzEpPC9saT4KKwk8bGk+PGVtPiAiUmVwb3J0IEkvTyBFeGNlcHRpb25zLiI8L2VtPiBJZiBUcnVlLCB0aGVuIGFuIGVycm9yIGluCisJcmVhZGluZyBpbiB0aGUgbGF0L2xvbmcgZGF0YSBmb3IgYSBjb3VudHJ5IHdpbGwgYmUgcmVwb3J0ZWQuIFR5cGljYWxseSwKKwl0aGlzIGlzIEZhbHNlIGFzIHRoZXJlIGFyZSBhIGZldyBjb3VudHJpZXMgd2hlcmUgdGhlIGxhdC9sb25nIGRhdGEgaXMKKwltaXNzaW5nIGFuZCB0aGlzIGNhbiBiZSBpZ25vcmVkLiAoRGVmYXVsdDombmJzcDtGYWxzZSk8L2xpPgorCTxsaT48ZW0+ICJVc2UgbG93ZXIgcmVzb2x1dGlvbiBsYXQvbG9uZyBkYXRhIGlmIGF2YWlsYWJsZSIgPC9lbT5JZgorCVRydWUsIHRoZW4gdGhlIGdlb2dyYXBoaWMgdmlzdWFsaXphdGlvbnMgd2lsbCBmYXZvciB0aGUgdXNlIG9mCisJcHJlLWNvbXB1dGVkIGxvd2VyIHJlc29sdXRpb24gZGF0YSBzZXRzIGluc3RlYWQgb2YgbW9yZSBkZXRhaWxlZAorCXJlc29sdXRpb24gZGF0YS4gVGhpcyBjYW4gcmVzdWx0IGluIGZhc3RlciB2aXN1YWxpemF0aW9uIHBlcmZvcm1hbmNlCisJd2l0aCB0aGUgcG90ZW50aWFsIGZvciBzbGlnaHQgdmlzdWFsIGRlZmVjdHMuIEluIHByYWN0aWNlLCB0aGUgdmlzdWFsCisJaW1wYWN0IGlzIHVuZGV0ZWN0YWJsZSB3aGlsZSB0aGUgaW5jcmVhc2UgaW4gcGVyZm9ybWFuY2UgaXMgZHJhbWF0aWMuCisJKERlZmF1bHQ6Jm5ic3A7VHJ1ZSk8L2xpPgorPC91bD4KKzxpbWcgc3JjPSJpbWcvcHJlZmVyZW5jZXNtYXBkYXRhbWdudC5qcGciIC8+Cis8L2JvZHk+Cis8L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL3ByZWZlcmVuY2VzL3ByZWZlcmVuY2VzbWFwdmlldy5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL3ByZWZlcmVuY2VzL3ByZWZlcmVuY2VzbWFwdmlldy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBkMjE0MGEKLS0tIC9kZXYvbnVsbAorKysgYi9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC9pbnRlcmZhY2UvcHJlZmVyZW5jZXMvcHJlZmVyZW5jZXNtYXB2aWV3Lmh0bWwKQEAgLTAsMCArMSwzMyBAQAorPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL2h0bWw0L2xvb3NlLmR0ZCI+Cis8aHRtbD4KKzxoZWFkPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9SVNPLTg4NTktMSI+Cis8dGl0bGU+TWFwIFZpZXc8L3RpdGxlPgorPC9oZWFkPgorPGJvZHk+Cis8aDE+TWFwIFZpZXc8L2gxPgorPHA+TWFwIFZpZXc8L3A+Cis8dWw+CisJPGxpPjxlbT5CYWNrZ3JvdW5kIENvbG9yPC9lbT5UaGUgY29sb3Igb2YgdGhlIGRpc3BsYXkgb3V0c2lkZSBvZiBhCisJcG9seWdvbi48L2xpPgorCTxsaT48ZW0+Rm9yZWdyb3VuZCBDb2xvcjwvZW0+VGhlIGNvbG9yIG9mIHBvbHlnb25zIHRoYXQgY29ycmVzcG9uZAorCXRvIGEgcHJvcGVydHkgd2l0aCBhIHJlbGF0aXZlIHZhbHVlIGdyZWF0ZXIgdGhhbiB6ZXJvICgwLjApPC9saT4KKwk8bGk+PGVtPlplcm8gUmVsYXRpdmUgVmFsdWUgQ29sb3I8L2VtPiBUaGUgY29sb3Igb2YgcG9seWdvbnMgdGhhdAorCWNvcnJlc3BvbmQgdG8gYSBwcm9wZXJ0eSB3aXRoIGEgcmVsYXRpdmUgdmFsdWUgZXF1YWwgdG8gemVybyAoMC4wKS48L2xpPgorCTxsaT48ZW0+Qm9yZGVycyBDb2xvcjwvZW0+VGhlIGNvbG9yIG9mIHBvbHlnb24gYm9yZGVycy48L2xpPgorCTxsaT48ZW0+RHJhdyBQb2x5Z29uIEJvcmRlcnM8L2VtPklmIFRydWUsIHRoZW4gZHJhdyB0aGUgcG9seWdvbgorCWJvcmRlcnMgKERlZmF1bHQ6Jm5ic3A7VHJ1ZSk8L2xpPgorCTxsaT48ZW0+VXNlIExvZ2FyaXRobWljIFNjYWxlPC9lbT5JZiBUcnVlLCB0aGVuIHRoZSBpbnRlbnNpdHkgb2YKKwl0aGUgY29sb3IgZGlzcGxheWVkIGluIGEgcG9seWdvbiB0aGF0IGNvcnJlc3BvbmRzIHRvIGEgcHJvcGVydHkgd2l0aCBhCisJbm9uLXplcm8gcmVsYXRpdmUgdmFsdWUgd2lsbCBiZSBkZXRlcm1pbmVkIHVzaW5nIGEgbG9nYXJpdGhtaWMgc2NhbGUuCisJKERlZmF1bHQ6Jm5ic3A7RmFsc2UpPC9saT4KKwk8bGk+PGVtPkdhaW4gRmFjdG9yPC9lbT4oRGVmYXVsdDombmJzcDsxLjBFNyk8L2xpPgorCTxsaT48ZW0+R1VJIFNjYWxpbmcgRmFjdG9yPC9lbT4oRGVmYXVsdDombmJzcDs4LjApPC9saT4KKwk8bGk+PGVtPkluaXRpYWwgWCBUcmFuc2xhdGlvbjwvZW0+KERlZmF1bHQ6Jm5ic3A7MCk8L2xpPgorCTxsaT48ZW0+SW5pdGlhbCBZIFRyYW5zbGF0aW9uPC9lbT4oRGVmYXVsdDombmJzcDswKTwvbGk+CisJPGxpPjxlbT5ab29tIFJ1bGVyIFNjYWxpbmcgRmFjdG9yPC9lbT48L2xpPgorCTxsaT48ZW0+SW5pdGlhbCBTY2FsZSBTZWxlY3Rpb24gKDAtMTAwKTwvZW0+KERlZmF1bHQ6Jm5ic3A7NTApPC9saT4KKzwvdWw+Cis8aW1nIHNyYz0iaW1nL3ByZWZlcmVuY2VzbWFwdmlldy5qcGciIC8+Cis8L2JvZHk+Cis8L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL3ByZWZlcmVuY2VzL3ByZWZlcmVuY2Vzb3ZlcnZpZXcuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2ludGVyZmFjZS9wcmVmZXJlbmNlcy9wcmVmZXJlbmNlc292ZXJ2aWV3Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDYzYTg0NwotLS0gL2Rldi9udWxsCisrKyBiL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2ludGVyZmFjZS9wcmVmZXJlbmNlcy9wcmVmZXJlbmNlc292ZXJ2aWV3Lmh0bWwKQEAgLTAsMCArMSwyNiBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMCBUcmFuc2l0aW9uYWwvL0VOIj4KKworPGh0bWw+Cis8aGVhZD4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PWlzby04ODU5LTEiPgorPHRpdGxlPlNURU0gUHJlZmVyZW5jZXMgT3ZlcnZpZXc8L3RpdGxlPgorPC9oZWFkPgorCis8Ym9keT4KKzxoMT5TVEVNIFByZWZlcmVuY2VzIE92ZXJ2aWV3PC9oMT4KKzxwPlNURU0gaGFzIGEgbnVtYmVyIG9mIDxlbT5wcmVmZXJlbmNlczwvZW0+IHRoYXQgY2FuIGJlIHNwZWNpZmllZAordGhhdCBzcGVjaWZ5IGNvbmZpZ3VyYXRpb24gaW5mb3JtYXRpb24gb3IgY29udHJvbCBob3cgU2ltdWxhdGlvbnMKK2V4ZWN1dGUgb3IgYXJlIGRpc3BsYXllZC4gUHJlZmVyZW5jZXMgYXJlIGFjY2Vzc2VkIHRocm91Z2ggdGhlCisiV2luZG93cy0mZ3Q7UHJlZmVyZW5jZXMuLi4iIG1lbnUuIDwvcD4KKzxwPgorPGltZworCXNyYz0iaW1nL3ByZWZlcmVuY2Vzb3Blbm1lbnUucG5nIiAvPjwvcD4KKzxwPlRoaXMgb3BlbnMgdGhlIHByZWZlcmVuY2VzIGRpYWxvZy4gU2VsZWN0aW5nIHZhcmlvdXMgZWxlbWVudHMKK3VuZGVyICJTVEVNIiBpbiB0aGUgdHJlZSBkaXNwbGF5IG9uIHRoZSBsZWZ0LCBkaXNwbGF5cyB0aGUgY29ycmVzcG9uZGluZworaW50ZXJmYWNlIGZvciBzZXR0aW5nIHByZWZlcmVuY2VzIG9uIHRoZSByaWdodC48L3A+CisKKworPGltZworCXNyYz0iaW1nL3ByZWZlcmVuY2VzdG9wbGV2ZWwucG5nIiAvPgorPC9ib2R5PgorPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2ludGVyZmFjZS9wcmVmZXJlbmNlcy9wcmVmZXJlbmNlc3NpbW1hbmFnZW1lbnQuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2ludGVyZmFjZS9wcmVmZXJlbmNlcy9wcmVmZXJlbmNlc3NpbW1hbmFnZW1lbnQuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZWEyMWY4Ci0tLSAvZGV2L251bGwKKysrIGIvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL3ByZWZlcmVuY2VzL3ByZWZlcmVuY2Vzc2ltbWFuYWdlbWVudC5odG1sCkBAIC0wLDAgKzEsNDggQEAKKzwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi9odG1sNC9sb29zZS5kdGQiPgorPGh0bWw+Cis8aGVhZD4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTEiPgorPHRpdGxlPlNpbXVsYXRpb24gTWFuYWdlbWVudDwvdGl0bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxoMT5TaW11bGF0aW9uIE1hbmFnZW1lbnQ8L2gxPgorPHA+VGhlIDxlbT5TaW11bGF0aW9uIE1hbmFnZW1lbnQ8L2VtPiBwcmVmZXJlbmNlIHBhZ2UgYWxsb3dzIGNvbnRyb2wKK292ZXIgdGhlIGV4ZWN1dGlvbiBvZiBTaW11bGF0aW9ucyBhbmQgdGhlIHJlcG9ydGluZyBvZiB3YXJuaW5nIG1lc3NhZ2VzCitnZW5lcmF0ZWQgd2hlbiBhIFNpbXVsYXRpb24gaXMgY3JlYXRlZCBmcm9tIGEgPGEKKwlocmVmPSIuLi8uLi9jb25jZXB0cy9tb2RlbGluZ2ZyYW1ld29yay5odG1sI3NjZW5hcmlvIj4gU2NlbmFyaW88L2E+LgorPHVsPgorCTxsaT48ZW0+IlBhdXNlIHNpbXVsYXRpb24gYWZ0ZXIgZWFjaCBjeWNsZSI8L2VtPiBJZiB0aGlzIGJveCBpcworCWNoZWNrZWQsIHRoZSBTaW11bGF0aW9uIHdpbGwgcGF1c2UgZXhlY3V0aW9uIGZvciB0aGUgbnVtYmVyIG9mIHNlY29uZHMKKwlzcGVjaWZpZWQgaW4gdGhlIGJveCBiZWxvdyBpdC4gVGhpcyBpcyB1c2VmdWwgdG8gbWF0Y2ggdGhlIHNwZWVkIG9mCisJZXhlY3V0aW9uIG9mIHRoZSBtYWNoaW5lIHJ1bm5pbmcgdGhlIFNpbXVsYXRpb24gd2l0aCBpdHMgdmlzdWFsaXphdGlvbi4KKwlUaGlzIHByZWZlcmVuY2UgcHJvdmlkZXMgdGhlIG9wdGlvbiB0byBnaXZlIHZpc3VhbGl6YXRpb25zIG1vcmUgdGltZSB0bworCXJlbmRlciwgdGhpcyBjYW4gYmUgdXNlZnVsIGZvciB0aGUgPGEgaHJlZj0iLi4vdmlld3MvZ2UuaHRtbCI+CisJR29vZ2xlIEVhcnRoIHZpZXc8L2E+LCBmb3IgaW5zdGFuY2UuCisJKERlZmF1bHQ6Jm5ic3A7VHJ1ZSwmbmJzcDsyJm5ic3A7U2Vjb25kcyk8L2xpPgorCTxsaT48ZW0+IlJlcG9ydCBhbGwgdW5yZXNvbHZlZCBsaW5rcyI8L2VtPiBJZiB0aGlzIGJveCBpcyBjaGVja2VkLAorCXRoZW4gYW55IEVkZ2VzIG9yIExhYmVscyB0aGF0IHNwZWNpZnkgYSBOb2RlIGluIGEgZ3JhcGggdGhhdCBjYW4gbm90IGJlCisJInJlc29sdmVkIiAoaS5lLiwgdGhlIE5vZGUgY2Fubm90IGJlIGZvdW5kKSB3aWxsIGJlIHJlcG9ydGVkIHdpdGggYW4KKwlpbmZvcm1hdGlvbmFsIG1lc3NhZ2UuIEl0IGlzIHVzZWZ1bCB0byBoYXZlIHRoZSBvcHRpb24gdG8gc3VwcHJlc3MKKwl0aGVzZSBtZXNzYWdlcyBhcyBtYW55IG9mIHRoZSBidWlsdC1pbiA8YQorCQlocmVmPSIuLi8uLi9jb25jZXB0cy9tb2RlbGluZ2ZyYW1ld29yay5odG1sI3NjZW5hcmlvIj4gU2NlbmFyaW9zPC9hPgorCWhhdmUgdW5yZXNvbHZlZCBsaW5rcy4gVGhpcyBpcyBub3QgYW4gZXJyb3IsIHRoZSB1bnJlc29sdmVkIGxpbmtzIGFyZQorCWlnbm9yZWQgYW5kIHJlc3VsdCBmcm9tIHVzaW5nIDxhCisJCWhyZWY9Ii4uLy4uL2NvbmNlcHRzL21vZGVsaW5nZnJhbWV3b3JrLmh0bWwjZ3JhcGgiPiBHcmFwaHM8L2E+IHRoYXQKKwlwcm92aWRlIGdlbmVyYWwgY29ubmVjdGl2aXR5LiBGb3IgaW5zdGFuY2UsIGJldHdlZW4gdGhlIEVhcnRoIChaWlopIGFuZAorCWFsbCBvZiB0aGUgcG9zc2libGUgY291bnRyaWVzIGluIHRoZSB3b3JsZC4gTm90IGFsbCA8YQorCQlocmVmPSIuLi8uLi9jb25jZXB0cy9tb2RlbGluZ2ZyYW1ld29yay5odG1sI3NjZW5hcmlvIj4gU2NlbmFyaW9zPC9hPgorCXdpbGwgaW52b2x2ZSBldmVyeSBjb3VudHJ5IHNvbWUgbGlua3MgYXJlIHVucmVzb2x2ZWQuCisJKERlZmF1bHQ6Jm5ic3A7RmFsc2UpPC9saT4KKwk8bGk+PGVtPiJSZXBvcnQgdW5yZXNvbHZlZCBhaXIgdHJhbnNwb3J0IGxpbmtzIjwvZW0+IElmIHRoaXMgYm94CisJaXMgY2hlY2tlZCB0aGVuIHVucmVzb2x2ZWQgbGlua3MgZnJvbSBhaXIgdHJhbnNwb3J0YXRpb24gd2lsbCBiZSAKKwlzaG93ZWQuKERlZmF1bHQ6Jm5ic3A7RmFsc2UpPC9saT4KKwk8bGk+PGVtPiJSZXBvcnQgdGhlIG51bWJlciBvZiB1bnJlc29sdmVkIGxpbmtzIjwvZW0+IElmIHRoaXMgYm94CisJaXMgY2hlY2tlZCB0aGVuIHRoZSBudW1iZXIgb2YgbGlua3MgdGhhdCBjYW5ub3QgYmUgcmVzb2x2ZWQgd2lsbCBiZQorCXJlcG9ydGVkIGFzIGFuIGluZm9ybWF0aW9uYWwgbWVzc2FnZS4oRGVmYXVsdDombmJzcDtGYWxzZSk8L2xpPgorCTxsaT48ZW0+IlVzZXIgc2NlbmFyaW8gY2FjaGluZyI8L2VtPklmIHRoaXMgYm94IGlzIGNoZWNrZWQgc2NlbmFyaW9zCisJd2lsbCBiZSBjYWNoZWQgaW4gbWVtb3J5IGFsbG93aW5nIHRoZW0gdG8gc3RhcnQgdXAgbW9yZSBxdWlja2x5LiAoRGVmYXVsdDombmJzcDtGYWxzZSwgdW5jaGVja2VkKTwvbGk+Cis8L3VsPgorPC9wPgorPGltZyBzcmM9ImltZy9wcmVmZXJlbmNlc3NpbW1hbmFnZW1lbnQucG5nIiAvPgorPC9ib2R5PgorPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2ludGVyZmFjZS9wcmVmZXJlbmNlcy9wcmVmZXJlbmNlc3NvbHZlci5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL3ByZWZlcmVuY2VzL3ByZWZlcmVuY2Vzc29sdmVyLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjhkZDliNgotLS0gL2Rldi9udWxsCisrKyBiL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2ludGVyZmFjZS9wcmVmZXJlbmNlcy9wcmVmZXJlbmNlc3NvbHZlci5odG1sCkBAIC0wLDAgKzEsMjAgQEAKKzwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi9odG1sNC9sb29zZS5kdGQiPgorPGh0bWw+Cis8aGVhZD4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTEiPgorPHRpdGxlPlNpbXVsYXRpb24gTWFuYWdlbWVudDwvdGl0bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxoMT5Tb2x2ZXI8L2gxPgorPHA+CitPbiB0aGUgc29sdmVyIHByZWZlcmVuY2UgcGFnZSwgeW91IGNhbiBzcGVjaWZ5IHRoZSBudW1iZXIgb2YgY29uY3VycmVudCB3b3JrZXIgdGhyZWFkcyB5b3Ugd2FudCB0byAKK3J1biBkdXJpbmcgYSBzaW11bGF0aW9uLiBUaGUgbnVtYmVyIGlzIHR5cGljYWxseSB0aGUgbmFtZSBhcyB0aGUgbnVtYmVyIG9mIENQVSBjb3JlcyBhdmFpbGFibGUgCitvbiB5b3VyIGhhcmR3YXJlLCBwdXQgeW91IGNhbiBleHBlcmltZW50IHdpdGggdGhlIG51bWJlciB0byBkZXRlcm1pbmUgd2hhdCBwZXJmb3JtcyBiZXN0IG9uIHlvdXIgbWFjaGluZS4KKyA8L3A+CisgPHA+IFlvdSBjYW4gYWxzbyBzcGVjaWZ5IHRoZSBkZWZhdWx0IHNvbHZlciB0byB1c2Ugd2hlbiBydW5uaWduIGEgc2ltdWxhdGlvbi4gV2hlbiBhIG5ldyBzY2VuYXJpbyBpcyBjcmVhdGVkLAorIHRoZSBkZWZhdWx0IHNvbHZlciB3aWxsIGJlIHByZS1zZWxlY3RlZCBmb3IgdGhlIHNjZW5hcmlvLgorIDwvcD4KKyA8YnIvPgorIDxpbWcgc3JjPSJpbWcvc29sdmVycHJlZmVyZW5jZXMucG5nIj4KKzwvYm9keT4KKzwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC9pbnRlcmZhY2UvcHJlZmVyZW5jZXMvcHJlZmVyZW5jZXN2aXN1YWxpemF0aW9udG9wbGV2ZWwuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2ludGVyZmFjZS9wcmVmZXJlbmNlcy9wcmVmZXJlbmNlc3Zpc3VhbGl6YXRpb250b3BsZXZlbC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdhMjE3NGUKLS0tIC9kZXYvbnVsbAorKysgYi9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC9pbnRlcmZhY2UvcHJlZmVyZW5jZXMvcHJlZmVyZW5jZXN2aXN1YWxpemF0aW9udG9wbGV2ZWwuaHRtbApAQCAtMCwwICsxLDI2IEBACis8IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIvaHRtbDQvbG9vc2UuZHRkIj4KKzxodG1sPgorPGhlYWQ+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0xIj4KKzx0aXRsZT5WaXN1YWxpemF0aW9uIFByZWZlcmVuY2VzPC90aXRsZT4KKzwvaGVhZD4KKzxib2R5PgorPGgxPlZpc3VhbGl6YXRpb248L2gxPgorPHA+VGhlIFZpc3VhbGl6YXRpb24gcHJlZmVyZW5jZXMgc3BlY2lmeSB0aGUgY29uZmlndXJhdGlvbiB2YWx1ZXMKK3RoYXQgc3BlY2lmeSBwYXJhbWV0ZXJzIHRoYXQgY29udHJvbCB0aGUgZ2VuZXJhdGlvbiBvZiB2aXN1YWwKK3JlcHJlc2VudGF0aW9ucyBvZiBhIFNpbXVsYXRpb24uPC9wPgorPHA+Cis8dWw+CisJPGxpPjxlbT4iTmFtZSBvZiB0aGUgaW5pdGlhbCBhdHRyaWJ1dGUgdG8gZGlzcGxheToiPC9lbT4gVGhpcyBpcworCXRoZSB0ZXh0IHN0cmluZyB0aGF0IGlzIHRoZSBuYW1lIG9mIHRoZSBwcm9wZXJ0eSB1cGRhdGVkIGJ5IGEgPGEKKwkJaHJlZj0iLi4vLi4vY29uY2VwdHMvbW9kZWxpbmdmcmFtZXdvcmsuaHRtbCNkZWNvcmF0b3IiPiBEZWNvcmF0b3I8L2E+CisJdG8gZGlzcGxheSBieSBkZWZhdWx0LiBUaGlzIG1lYW5zIHRoYXQgaWYgYSA8YQorCQlocmVmPSIuLi8uLi9jb25jZXB0cy9tb2RlbGluZ2ZyYW1ld29yay5odG1sI2RlY29yYXRvciI+IERlY29yYXRvcjwvYT4KKwl1cGRhdGVzIGEgcHJvcGVydHkgdGhhdCBoYXMgdGhlIHNwZWNpZmllZCBjaGFyYWN0ZXIgc3RyaW5nIGFzIGl0cyBuYW1lLAorCXRoZW4gaXQgd2lsbCBzZWxlY3QgaXQgYXMgdGhlIGRlZmF1bHQgdG8gZGlzcGxheSBmaXJzdC4gSWYgdGhlIHZhbHVlIGlzCisJIkkiLCBmb3IgaW5zdGFuY2UsIHRoZW4gaXQgd2lsbCBkaXNwbGF5IHRoZSAiaW5mZWN0aW91cyIgdmFsdWUKKwkoRGVmYXVsdDombmJzcDsiSSIpPC9saT4KKzwvdWw+Cis8aW1nIHNyYz0iaW1nL3ByZWZlcmVuY2VzdmlzdWFsaXphdGlvbnRvcGxldmVsLmpwZyIgLz4KKzwvYm9keT4KKzwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC9pbnRlcmZhY2Uvdmlld3MvYWN0aXZlc2ltdWxhdGlvbnN2aWV3Lmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC9pbnRlcmZhY2Uvdmlld3MvYWN0aXZlc2ltdWxhdGlvbnN2aWV3Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWFkNTA4MQotLS0gL2Rldi9udWxsCisrKyBiL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2ludGVyZmFjZS92aWV3cy9hY3RpdmVzaW11bGF0aW9uc3ZpZXcuaHRtbApAQCAtMCwwICsxLDE3IEBACis8IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIvaHRtbDQvbG9vc2UuZHRkIj4KKzxodG1sPgorPGhlYWQ+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0xIj4KKzx0aXRsZT5BY3RpdmUgU2ltdWxhdGlvbnMgVmlldzwvdGl0bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxoMT5BY3RpdmUgU2ltdWxhdGlvbnMgVmlldzwvaDE+Cis8cD4KK1RoZSA8ZW0+QWN0aXZlIFNpbXVsYXRpb25zIFZpZXc8L2VtPiBzaW1wbHkgbGlzdHMgdGhlIFNpbXVsYXRpb25zIChydW5uaW5nIG9yIG5vdCkgdGhhdCBhcmUgImFjdGl2ZSIgaW4gU1RFTS4gIAorPC9wPgorPHA+CitDbGlja2luZyBvbiB0aGUgbmFtZSBvZiBvbmUgb2YgdGhlIFNpbXVsYXRpb25zIHdpbGwgc2V0IHRoZSBmb2N1cyBvbiB0aGF0IFNpbXVsYXRpb24uCis8L3A+Cis8aW1nIHNyYz0iaW1nL2FjdGl2ZXNpbXVsYXRpb25zdmlldy5qcGciLz4KKzwvYm9keT4KKzwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC9pbnRlcmZhY2Uvdmlld3MvY29udHJvbHZpZXcuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2ludGVyZmFjZS92aWV3cy9jb250cm9sdmlldy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA4N2MwZjAKLS0tIC9kZXYvbnVsbAorKysgYi9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC9pbnRlcmZhY2Uvdmlld3MvY29udHJvbHZpZXcuaHRtbApAQCAtMCwwICsxLDMxIEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wIFRyYW5zaXRpb25hbC8vRU4iPgorCis8aHRtbD4KKzxoZWFkPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9aXNvLTg4NTktMSI+Cis8dGl0bGU+aGVscDwvdGl0bGU+Cis8L2hlYWQ+CisKKzxib2R5PgorPGgxPkNvbnRyb2wgVmlldzwvaDE+Cis8cD5UaGUgPGVtPkNvbnRyb2wgVmlldzwvZW0+IGRpc3BsYXlzIGEgZHluYW1pYyBjb2xsZWN0aW9uIG9mCisic2ltdWxhdGlvbiBjb250cm9scyIgdGhhdCBtYXRjaCB0aGUgc2V0IG9mICJhY3RpdmUiIFNpbXVsYXRpb25zLiBFYWNoCitjb250cm9sIHNob3dzIHRoZSBuYW1lIG9mIHRoZSBTY2VuYXJpbyBhbmQgdGhhdCBzdGF0dXMgb2YgdGhlCitTaW11bGF0aW9uLCBpbmNsdWRpbmcgaXRzICJzdGF0ZSIgKGVpdGhlciAiUnVubmluZyIgb3IgIlBhdXNlZCIpLCB0aGUKK2N1cnJlbnQgInRpbWUiIGluIHRoZSBzaW11bGF0aW9uLCBhIHByb2dyZXNzIGJhci4gRWFjaCBjb250cm9sIGFsc28gaGFzCitmaXZlIGJ1dHRvbnMgdGhhdCBjb250cm9sIHRoZSBjb3JyZXNwb25kaW5nIFNpbXVsYXRpb246Cis8b2w+CisJPGxpPiJSdW4iIEJlZ2luIHJ1bm5pbmcgdGhlIFNpbXVsYXRpb24uPC9saT4KKwk8bGk+IlBhdXNlIiBQYXVzZSB0aGUgcnVubmluZyBvZiB0aGUgU2ltdWxhdGlvbi4gVGhpcyBtYWludGFpbnMKKwl0aGUgY3VycmVudCBzdGF0ZSBvZiB0aGUgc2ltdWxhdGlvbi48L2xpPgorCTxsaT4iUmVzZXQiIFJlc2V0IGFsbCBzdGF0ZSBpbmZvcm1hdGlvbiBpbiB0aGUgU2ltdWxhdGlvbiBiYWNrIHRvCisJaW5pdGlhbCB2YWx1ZXMgYW5kIHNldCB0aGUgc3RhdGUgb2YgdGhlIFNpbXVsYXRpb24gdG8gIlBhdXNlZCI8L2xpPgorCTxsaT4iU3RlcCIgUnVuIHRoZSBzaW11bGF0aW9uIGZvciBhIHNpbmdsZSBjeWNsZSBhbmQgdGhlbiBzZXQgdGhlCisJc3RhdGUgb2YgdGhlIFNpbXVsYXRpb24gdG8gIlBhdXNlZCI8L2xpPgorCTxsaT4iU3RvcCIgU3RvcCBhbGwgZXhlY3V0aW9uIG9mIHRoZSBTaW11bGF0aW9uIGFuZCBkZXN0cm95IGFsbAorCXN0YXRlIGluZm9ybWF0aW9uLiBUaGUgU2ltdWxhdGlvbiB3aWxsIGJlIHJlbW92ZWQgZnJvbSB0aGUgc3lzdGVtLjwvbGk+Cis8L29sPgorPC9wPgorPGltZyBzcmM9ImltZy9jb250cm9sdmlldy5wbmciLz4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2ludGVyZmFjZS92aWV3cy9jc3Zsb2dnZXJ2aWV3Lmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC9pbnRlcmZhY2Uvdmlld3MvY3N2bG9nZ2Vydmlldy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkyNjlkYWIKLS0tIC9kZXYvbnVsbAorKysgYi9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC9pbnRlcmZhY2Uvdmlld3MvY3N2bG9nZ2Vydmlldy5odG1sCkBAIC0wLDAgKzEsMjE0IEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wIFRyYW5zaXRpb25hbC8vRU4iPgorCis8aHRtbD4KKzxoZWFkPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9aXNvLTg4NTktMSI+Cis8dGl0bGU+aGVscDwvdGl0bGU+Cis8L2hlYWQ+CisKKzxib2R5PgorPGgxIGFsaWduPSJsZWZ0Ij48Zm9udCBmYWNlPSJUaW1lcyBOZXcgUm9tYW4iIHNpemU9IjUiPkNTViBMb2dnZXIgVmlldzwvZm9udD48L2gxPgorPHAgYWxpZ249ImxlZnQiPjxmb250IGZhY2U9IlRpbWVzIE5ldyBSb21hbiI+VGhlIGN1cnJlbnQgZGlzdHJpYnV0aW9uIG9mIFNURU0gcHJvdmlkZXMgdXNlcnMgd2l0aAordGhlIGFiaWxpdHkgdG8gb3V0cHV0IERpc2Vhc2UgU3RhdGUgRGF0YSB0byBhIGNvbW1hIHNlcGFyYXRlZCB2YXJpYWJsZSAoQ1NWKSAKK2ZpbGUuIFRoaXMgZnVuY3Rpb24gaXMgZW5hYmxlcyB0aHJvdWdoIGEgdmlldyBjYWxsZWQgdGhlIENTViBMb2dnZXIgVmlldy48YnI+CismbmJzcDs8L2ZvbnQ+PHAgYWxpZ249ImxlZnQiPjxmb250IGZhY2U9IlRpbWVzIE5ldyBSb21hbiIgc2l6ZT0iNCI+PGI+MSkgTG9hZGluZyB0aGUgCitDU1YgTG9nZ2VyIFZpZXc8L2I+PC9mb250PjwvcD4KKwk8Zm9udCBGQUNFPSJIZWx2Ij4KKwk8cCBhbGlnbj0ibGVmdCI+PGZvbnQgZmFjZT0iVGltZXMgTmV3IFJvbWFuIj5UbyBsb2FkIG9yIGFjdGl2YXRlIHRoZSBDU1YgCisJTG9nZ2VyIFZpZXcsJm5ic3A7IGZpcnN0IGxhdW5jaAorCShhbmQgcnVuKSBzdGVtLiBPbiB0aGUgdG9wIG1lbnUgKFNlZSBmaWd1cmUgMSkgYmFyIGNsaWNrIG9uIDwvZm9udD48L3A+CisJPHAgRElSPSJMVFIiIGFsaWduPSJsZWZ0Ij48Zm9udCBmYWNlPSJUaW1lcyBOZXcgUm9tYW4iPiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOworCTxiPiZuYnNwOyZndDt3aW5kb3cmZ3Q7b3RoZXIuLi4mZ3Q7Q1NWIExvZ2dlcjwvYj48L2ZvbnQ+PC9wPgorCTwvZm9udD4KKwk8cCBESVI9IkxUUiIgYWxpZ249ImxlZnQiPjxmb250IGZhY2U9IlRpbWVzIE5ldyBSb21hbiI+VGhpcyB3aWxsIG9wZW4gYSBDU1YgCisJTG9nZ2VyIFRhYiBhdCB0aGUgYm90dG9tIG9mIHlvdXIgU2ltdWxhdGlvbiBQZXJzcGVjdGl2ZSAoU2VlIGZpZ3VyZSAyKS4gPGJyPgorCUluaXRpYWxseSB0aGUgdmlldyB3aWxsIGJlIGJsYW5rIGJlY2F1c2UgdGhlcmUgYXJlIG5vIHNjZW5hcmlvcyBiZWluZyAKKwlsb2dnZWQuPC9mb250PjwvcD4KKwk8Zm9udCBGQUNFPSJIZWx2Ij4KKwk8dGFibGUgYm9yZGVyPSIxIiBjZWxsc3BhY2luZz0iMyIgd2lkdGg9IjIxJSIgaWQ9InRhYmxlNSIgYmdjb2xvcj0iI0MwQzBDMCIgY2VsbHBhZGRpbmc9IjMiPgorCQk8dHI+CisJCQk8dGQ+CisJCQk8cCBhbGlnbj0ibGVmdCI+PGZvbnQgRkFDRT0iVGltZXMgTmV3IFJvbWFuIj4KKwkJCTxpbWcgYm9yZGVyPSIwIiBzcmM9ImltZy9jc3YxLmpwZyIgd2lkdGg9IjI4MCIgaGVpZ2h0PSI0NDYiPjwvZm9udD48L3RkPgorCQkJPHRkPgorCQkJPHAgYWxpZ249ImxlZnQiPgorCTxmb250IEZBQ0U9IlRpbWVzIE5ldyBSb21hbiI+CisJCQk8aW1nIGJvcmRlcj0iMCIgc3JjPSJpbWcvY3N2Mi5qcGciIHdpZHRoPSI1MTAiIGhlaWdodD0iMjUwIj48L2ZvbnQ+PC90ZD4KKwkJPC90cj4KKwkJPHRyPgorCQkJPHRkIGJnY29sb3I9IiNGRkZGRkYiPjxmb250IEZBQ0U9IlRpbWVzIE5ldyBSb21hbiI+CisJCQk8cCBhbGlnbj0ibGVmdCI+PGI+RmlndXJlIDE6IE9wZW5pbmcgdGhlIENTViBMb2dnZXIgVmlldzwvYj48L2ZvbnQ+PC90ZD4KKwkJCTx0ZCBiZ2NvbG9yPSIjRkZGRkZGIj4KKwk8Zm9udCBGQUNFPSJUaW1lcyBOZXcgUm9tYW4iPgorCQkJPHAgYWxpZ249ImxlZnQiPjxiPkZpZ3VyZSAyOiBTdGFydGluZyBhIFNjZW5hcmlvPC9iPjwvZm9udD48L3RkPgorCQk8L3RyPgorPC90YWJsZT4KKzxwIERJUj0iTFRSIiBhbGlnbj0ibGVmdCI+Jm5ic3A7PC9wPgorCTxmb250IEZBQ0U9IlRpbWVzIE5ldyBSb21hbiI+CisJPHAgRElSPSJMVFIiIGFsaWduPSJsZWZ0Ij48Yj48Zm9udCBzaXplPSI0Ij4yKSBUZXN0aW5nIHRoZSBMb2dnZXI8L2ZvbnQ+PC9iPjwvcD4KKwk8cCBESVI9IkxUUiIgYWxpZ249ImxlZnQiPlRvIHVzZSB0aGUgbG9nZ2VyLCB5b3UgZmlyc3QgaGF2ZSB0byBhY3RpdmF0ZSBsb2dnaW5nIGZyb20gdGhlIENTViBMb2dnZXIgdGFiLiAKKwlDbGljayB0aGUgJ09uJyBidXR0b24gYW5kIHRoZSBuZXh0IHRpbWUgYSBzY2VuYXJpbyBpcyBzdGFydGVkIGRhdGEgd2lsbCBiZSBsb2dnZWQsIHNlZSBmaWd1cmUgMy4gPC9wPgorCTx0YWJsZSBib3JkZXI9IjEiIGNlbGxzcGFjaW5nPSIxIiB3aWR0aD0iNDklIiBpZD0idGFibGUyIj4KKwkJPHRyPgorCQkJPHRkPgorCQkJPHAgYWxpZ249ImxlZnQiPgorCQkJPGltZyBib3JkZXI9IjAiIHNyYz0iaW1nL2NzdjJfNS5qcGciIHdpZHRoPSIxMDAwIiBoZWlnaHQ9IjgwMCI+PjwvdGQ+CisJCTwvdHI+CisJCTx0cj4KKwkJCTx0ZD4KKwkJCTxwIGFsaWduPSJsZWZ0Ij48Yj5GaWd1cmUgMy4gRW5hYmxpbmcgTG9nZ2luZyBmcm9tIHRoZSBDU1YgTG9nZ2VyIHRhYjwvYj48L3RkPgorCQk8L3RyPgorCTwvdGFibGU+CisJPHAgRElSPSJMVFIiIGFsaWduPSJsZWZ0Ij5OZXh0IHlvdSBwaWNrIHRoZSBzY2VuYXJpbyB5b3Ugd2FudCB0byBsb2cuIAorCVlvdSBjYW4gcGljayBlaXRoZXIgeW91ciBvd24gc2NlbmFyaW8gb3IgYSBidWlsdCBpbiBvbmUuIAorCUluIHRoZSBmb2xsb3dpbmcgZXhhbXBsZSB3ZSB1c2UgdGhlIGJ1aWx0IGluIHNjZW5hcmlvIGZvciB0aGUgCisJUGFuZGVtaWMgRGVtbyBpbiBUb2t5bywgSmFwYW4uIDwvcD4KKzxwIERJUj0iTFRSIiBhbGlnbj0ibGVmdCI+R28gdG8gdGhlIFNjZW5hcmlvcyBUYWIgaW4gZWl0aGVyIHRoZSBTaW11bGF0aW9uIG9yIAorRGVzaWduZXIgUGVyc3BlY3RpdmUgYW5kIGV4cGFuZCB0aGUgVGFiczwvcD4KKwk8L2ZvbnQ+CisJPC9mb250PgorCTxwIERJUj0iTFRSIiBhbGlnbj0ibGVmdCI+PGI+PGZvbnQgZmFjZT0iVGltZXMgTmV3IFJvbWFuIj4tJmd0O1NURU0tJmd0O0dlb2dyYXBoeS0mZ3Q7UG9saXRpY2FsLSZndDtDb3VudHJ5LSZndDtKYXBhbjwvZm9udD48L2I+PC9wPgorCTxwIERJUj0iTFRSIiBhbGlnbj0ibGVmdCI+PGZvbnQgZmFjZT0iVGltZXMgTmV3IFJvbWFuIj5kb3VibGUgY2xpY2sgb24gdGhlIGJ1aWx0IGluIHNjZW5hcmlvPGk+PGJyPgorCVBhbmRlbWljIERlbW8sIFRva3lvLCBKYXBhbiwgMjAwMDxicj4KKwk8L2k+dG8gc3RhcnQgaXQuIChTZWUgRmlndXJlIDIpLjwvZm9udD48L3A+CisJPGZvbnQgRkFDRT0iSGVsdiI+CisJPHAgYWxpZ249ImxlZnQiPiZuYnNwOzwvcD4KKwk8L2ZvbnQ+CisJPGZvbnQgRkFDRT0iVGltZXMgTmV3IFJvbWFuIj4KKwk8cCBhbGlnbj0ibGVmdCI+T25jZSB5b3UgaGF2ZSBzdGFydGVkIHRoZSBzY2VuYXJpbywgY2xpY2sgb24gdGhlIENTViBMb2dnZXIgVGFiLgorCVlvdSB3aWxsIG5vdGljZSB0aGF0IHRoZSB2aWV3IG5vdyBkaXNwbGF5cyB0aGUgc2NlbmFyaW8gYW5kIGRpc2Vhc2UgYmVpbmcgbG9nZ2VkLiAKKwlZb3UgY2FuIHN0b3AgbG9nZ2luZyBhdCBhbnkgdGltZSBieSBzZWxlY3RpbmcgdGhlICdPZmYnIGJ1dHRvbiBpbiB0aGUgQ1NWIAorCTxwIGRpcj0ibHRyIiBhbGlnbj0ibGVmdCI+PGI+PGZvbnQgc2l6ZT0iNCI+MykgUmVtZW1iZXJpbmcgVXNlciBwcmVmZXJlbmNlczwvZm9udD48L2I+PC9wPgorPHAgZGlyPSJsdHIiIGFsaWduPSJsZWZ0Ij5Zb3VyIHNlbGVjdGlvbnMsIGJ5IHNjZW5hcmlvLCB3aWxsIGJlIHJlbWVtYmVyZWQgCit0aGUgc3lzdGVtIHByZWZlcmVuY2VzIGZvciB0aGUgQ1NWIExvZ2dlciBWaWV3LiBUaGUgU1RFTSBDU1YgTG9nZ2VyIFZpZXcgCit1c2VzIEVjbGlwc2UgRGlhbG9nU2V0dGluZ3MgdG8gYXV0b21hdGljYWxseSByZW1lbWJlciB1c2VyIHByZWZlcmVuY2VzLiAKK1RoaXMgZmVhdHVyZSBpcyBhbHdheXMgZW5hYmxlZCBhbmQgYmVnaW5zIGFzIHNvb24gYXMgeW91IGVuYWJsZSBhbnkgcmVwb3J0IHZpZXcuIAorVGhlIHByZWZlcmVuY2VzIHRoYXQgYXJlICJyZW1lbWJlcmVkIiBhcmUgdGhlIGxvZ2dlciBzZXR0aW5nIGZvciBlYWNoIHNjZW5hcmlvLiAKKzxwIGRpcj0ibHRyIiBhbGlnbj0ibGVmdCI+PGI+Li4uIHJ1bnRpbWUtc3RlbS5wcm9kdWN0XC5tZXRhZGF0YVwucGx1Z2luc1xvcmcuZWNsaXBzZS5zdGVtLnV0aWwubG9nZ2VyczwvYj48L3A+Cis8cCBkaXI9Imx0ciIgYWxpZ249ImxlZnQiPndoZXJlIHRoZSBkaXJlY3RvcnkgPGI+XHJ1bnRpbWUtc3RlbS5wcm9kdWN0PC9iPiBpcyAKK2xvY2F0ZWQgaW4gdGhlIHNhbWUgcGFyZW50IGRpcmVjdG9yeSBhcyB0aGUgdXNlcnMgU1RFTSBlY2xpcHNlIHdvcmtzcGFjZSAoZm9yIAorZXhhbXBsZSBjOlxydW50aW1lLXN0ZW0ucHJvZHVjdCkuPC9wPgorPHAgZGlyPSJsdHIiIGFsaWduPSJsZWZ0Ij5QcmVmZXJlbmNlcyBmb3IgdGhlIFRpbWUgU2VyaWVzIHZpZXdzIGFyZSBzdG9yZWQgaW4gYSAKK2ZpbGU6PGJyPgorPGJyPgorPGI+Q1NWTG9nZ2VyX1ByZWZlcmVuY2VzLnR4dDwvYj48L3A+Cis8cCBkaXI9Imx0ciIgYWxpZ249ImxlZnQiPllvdSBuZXZlciBuZWVkIHRvIGVkaXQgdGhpcyBmaWxlIGRpcmVjdGx5LiBPbmNlIHlvdSAKK2hhdmUgZGVzaWduYXRlZCBhIHNldCBvZiBsb2NhdGlvbnMgdG8gbW9uaXRvciBmb3IgdGhlIGxvZ2dlciwgdGhlc2Ugd2lsbCBhbHdheXMgCitiZSB1c2VkIGZvciB0aGUgY29ycmVzcG9uZGluZyBzY2VuYXJpby48YnI+CitJbiA8Yj5GaWd1cmUgNDwvYj4gd2Ugc2hvdyB0aGUgZGlzZWFzZSB0aGF0IGhhcyBiZWVuIGRlc2lnbmF0ZWQgZm9yIGxvZ2dpbmcgZm9yIHRoZSAKK0phcGFuIHNjZW5hcmlvLjwvcD4KKwk8L2ZvbnQ+CisJPHAgZGlyPSJsdHIiIGFsaWduPSJsZWZ0Ij4mbmJzcDs8L3A+CisJPGZvbnQgRkFDRT0iVGltZXMgTmV3IFJvbWFuIj4KKwk8L2ZvbnQ+CisJPHAgYWxpZ249ImxlZnQiPiZuYnNwOzwvcD4KKwk8Zm9udCBGQUNFPSJUaW1lcyBOZXcgUm9tYW4iPgorCTx0YWJsZSBib3JkZXI9IjEiIGNlbGxzcGFjaW5nPSIxIiB3aWR0aD0iNDklIiBpZD0idGFibGUyIj4KKwkJPHRyPgorCQkJPHRkPgorCQkJPHAgYWxpZ249ImxlZnQiPgorCQkJPGltZyBib3JkZXI9IjAiIHNyYz0iaW1nL2NzdjMuanBnIiB3aWR0aD0iMTAwMCIgaGVpZ2h0PSI4MDAiPjwvdGQ+CisJCTwvdHI+CisJCTx0cj4KKwkJCTx0ZD4KKwkJCTxwIGFsaWduPSJsZWZ0Ij48Yj5GaWd1cmUgNDogTG9nZ2luZyBEYXRhIGZvciBhIFNjZW5hcmlvPC9iPjwvdGQ+CisJCTwvdHI+CisJPC90YWJsZT4KKwk8L2ZvbnQ+CisJPHAgYWxpZ249ImxlZnQiPiZuYnNwOzwvcD4KKwk8L2ZvbnQ+CisJPGZvbnQgRkFDRT0iVGltZXMgTmV3IFJvbWFuIiBzaXplPSI0Ij4KKwk8cCBhbGlnbj0ibGVmdCI+PGI+NCkgRGlyZWN0b3J5IExvY2F0aW9uIG9mIExvZ2dlZCBEYXRhPC9iPjwvcD4KKwk8L2ZvbnQ+CisJPGZvbnQgRkFDRT0iVGltZXMgTmV3IFJvbWFuIj4KKwk8cCBhbGlnbj0ibGVmdCI+VGhlIERpc2Vhc2UgU3RhdGUgZGF0YSBmb3IgZXZlcnkgbG9jYXRpb24gbW9uaXRvcmVkIGlzIHN0b3JlZCAKKwlpbiBhIHNlcGFyYXRlIENvbW1hIFNlcGFyYXRlZCBWYXJpYWJsZSBmaWxlLiBUaGUgZGF0YSBkaXJlY3RvcnkgKEZpZ3VyZSA1KSAKKwltYXkgYmUgZm91bmQgdW5kZXIgeW91ciBTVEVNIHdvcmtzcGFjZSBmb2xkZXIgYXMgc3ViZm9sZGVyIG9mIAorCSJSZWNvcmRlZCBTaW11bGF0aW9ucyIgaW4geW91ciBwcm9qZWN0IGZvbGRlci4gRm9yIGluc3RhbmNlLCBpZiB5b3UgYXJlIAorCWxvZ2dpbmcgYSBzY2VuYXJpbyBpbiBhIHByb2plY3QgY2FsbGVkICJWZXJtb250IiwgdGhlIGxvZyBmaWxlcyB3aWxsIGJlIAorCWZvdW5kIGluIGEgc3ViZm9sZGVyIHVuZGVyIHRoaXMgZGlyZWN0b3J5OiA8L3A+Cis8cCBhbGlnbj0ibGVmdCI+PGI+Jm5ic3A7Li4ucnVudGltZS1zdGVtLnByb2R1Y3RcVmVybW9udFxSZWNvcmRlZCBTaW11bGF0aW9uc1w8L2I+PGJyPgorPGJyPgorPHAgYWxpZ249ImxlZnQiPkZvciBidWlsdC1pbiBzY2VuYXJpb3MgdGhlIGxvZyBmaWxlcyBhcmUgbG9jYXRlZCB1bmRlciB0aGlzIAorZm9sZGVyOiAgPC9wPgorPHAgYWxpZ249ImxlZnQiPjxiPiZuYnNwOy4uLnJ1bnRpbWUtc3RlbS5wcm9kdWN0XEJ1aWx0SW5TY2VuYXJpb3NcUmVjb3JkZWQgU2ltdWxhdGlvbnNcPC9iPjxicj4KKzxicj4KK0l0IGlzIHBvc3NpYmxlIHRvIHJ1biBtdWx0aXBsZSBzY2VuYXJpb3MgaW4gU1RFTSwgb3IgdG8gc2ltdWx0YW5lb3VzbHkgcnVuIAorbW9yZSB0aGFuIG9uZSBpbnN0YW5jZSBvZiBhIGdpdmVuIHNjZW5hcmlvLiBMb2dnZWQgZGF0YSBpcyBzdG9yZWQgaW4gYSBmb2xkZXIgCit3aXRoIHRoZSBzYW1lIG5hbWUgYXMgdGhlIHNjZW5hcmlvIGp1c3QgcnVuLCBidXQgdGhpcyBmb2xkZXIgaXMgcGxhY2UgaW4gdHVybiAKK2luIGEgcGFyZW50IGZvbGRlciBuYW1lZCBieSB0aGUgc3RhcnQgdGltZSBvZiB0aGUgcGFydGljdWxhciBzY2VuYXJpbyBpbnN0YW5jZS4gCitUaGlzIHdheSwgaWYgeW91IHJ1biB0aGUgc2NlbmFyaW8gbW9yZSB0aGFuIG9uY2UgKGZvciBleGFtcGxlIGFzIGEgYmF0Y2ggcHJvY2VzcyAKK3dpdGggc29tZSBwYXJhbWV0ZXIgY2hhbmdlZCBmcm9tIHJ1biB0byBydW4pIG5vIGRhdGEgd2lsbCBiZSBhY2NpZGVudGFsbHkgCitvdmVyd3JpdHRlbiBhcyBlYWNoIHNjZW5hcmlvIHdpbGwgaGF2ZSBhIHVuaXF1ZSB0aW1lIHN0YW1wLiAKK0VhY2ggc2NlbmFyaW8gZm9sZGVyIGlzIGZ1cnRoZXIgc3ViZGl2aWRlZCBpbnRvIHN1YmZvbGRlcnMsIG9uZSBmb2xkZXIgZm9yIGVhY2ggCitkaXNlYXNlICh0aGUgZm9sZGVyIG5hbWUgaXMgdGhlIGRpc2Vhc2UgbmFtZSkgdGhhdCBpcyBwYXJ0IG9mIHRoZSBzY2VuYXJpbyAKKyhTZWUgRmlndXJlIDUpLiAgPC9wPgorCTwvZm9udD48Zm9udCBGQUNFPSJIZWx2Ij4KKwk8Zm9udCBGQUNFPSJUaW1lcyBOZXcgUm9tYW4iPgorCTx0YWJsZSBib3JkZXI9IjEiIGNlbGxzcGFjaW5nPSIxIiB3aWR0aD0iMjYlIiBpZD0idGFibGUzIj4KKwkJPHRyPgorCQkJPHRkIGhlaWdodD0iMjIzIj4KKwkJCTxwIGFsaWduPSJsZWZ0Ij4KKwkJCTxpbWcgYm9yZGVyPSIwIiBzcmM9ImltZy9jc3Y0LmpwZyI+PC90ZD4KKwkJPC90cj4KKwkJPHRyPgorCQkJPHRkPgorCQkJPHAgYWxpZ249ImxlZnQiPjxiPkZpZ3VyZSA1OiBUaGUgbG9jYXRpb24gKGRpcmVjdG9yeSkgd2hlcmUgZmlsZXMgCisJCQlhcmUgc3RvcmVkLjwvYj48L3RkPgorCQk8L3RyPgorCTwvdGFibGU+CisJPC9mb250PgorCTxwIGFsaWduPSJsZWZ0Ij4KKwk8Zm9udCBGQUNFPSJUaW1lcyBOZXcgUm9tYW4iIHNpemU9IjQiPgorCTxiPjUpIENTViBMb2dnZWQgRGF0YSBGaWxlczwvYj48L2ZvbnQ+PC9wPgorCTwvZm9udD4KKwk8Zm9udCBGQUNFPSJUaW1lcyBOZXcgUm9tYW4iPgorCTxwIGFsaWduPSJsZWZ0Ij5JbiBGaWd1cmUgNiB3ZSBzaG93IHRoZSBwYXJ0aWN1bGFyIGRhdGEgZmlsZXMgd3JpdHRlbiBieSB0aGUgCisJbG9nZ2VyIGZvciB0aGUgUGFuZGVtaWMgRGVtbyBkaXNlYXNlLiBTZXBhcmF0ZSBDU1YgZmlsZXMgKHdpdGggZXh0ZW5zaW9uIC5jc3YpIAorCWFyZSBjcmVhdGVkIGZvciBlYWNoIGRpc2Vhc2Ugc3RhdGUgbW9kZWxlZCBieSB0aGUgZGlzZWFzZS4gVGhlc2UgYXJlIG5hbWVkIAorCXVzaW5nIHRoZSBJRCBvZiB0aGUgc3RhdGUgKGUuZy4gUywgRSwgSSBvciBSKSBmb2xsb3dlZCBieSBhbiB1bmRlcnNjb3JlIAorCShfKSBmb2xsb3dlZCBieSBhIG51bWJlci4gVGhlIG51bWJlciBpbmRpY2F0ZXMgdGhlIHJlc29sdXRpb24gb2YgdGhlIGxvY2F0aW9ucyAKKwlzdG9yZWQgaW4gdGhlIGZpbGUuIEZvciBpbnN0YW5jZSwgMyBtZWFucyBnZW9ncmFwaGljYWwgYWRtaW5pc3RyYXRpb24gCisJbGV2ZWwgMywgaS5lLiBVUyBjaXRpZXMuIEEgc2Vjb25kIGZpbGUgKHJ1bnBhcmFtZXRlcnMuY3N2KSBpcyBhbHNvIGdlbmVyYXRlZC4gCisJVGhpcyB3aWxsIGNvbnRhaW4gZGF0YSBhYm91dCB0aGUgcnVuIHBhcmFtZXRlcnMgZm9yIGVhY2ggZGlzZWFzZS48L3A+CisJPC9mb250PgorCTxmb250IEZBQ0U9IkhlbHYiPgorCTxmb250IEZBQ0U9IlRpbWVzIE5ldyBSb21hbiI+CisJPHRhYmxlIGJvcmRlcj0iMSIgY2VsbHNwYWNpbmc9IjEiIHdpZHRoPSI0OSUiIGlkPSJ0YWJsZTQiPgorCQk8dHI+CisJCQk8dGQ+CisJCQk8cCBhbGlnbj0ibGVmdCI+CisJCQk8aW1nIGJvcmRlcj0iMCIgc3JjPSJpbWcvY3N2NS5qcGciPjwvdGQ+CisJCTwvdHI+CisJCTx0cj4KKwkJCTx0ZD4KKwkJCTxwIGFsaWduPSJsZWZ0Ij48Yj5GaWd1cmUgNjogIEluZGl2aWR1YWwgTG9nIEZpbGVzLiBUaGVzZSBhcmUgY3JlYXRlZCAKKwkJCWZvciBlYWNoIGxvY2F0aW9uIG9yIG5vZGUgbW9uaXRvcmVkLiBBbm90aGVyIGZpbGUgY29udGFpbnMgdGhlIAorCQkJcGFyYW1ldGVycyBydW4gZm9yIHRoZSBzY2VuYXJpbyBpbiBxdWVzdGlvbi48L2I+PC90ZD4KKwkJPC90cj4KKwk8L3RhYmxlPgorCTwvZm9udD4KKwk8L2ZvbnQ+Cis8cCBhbGlnbj0ibGVmdCI+RWFjaCBvZiB0aGUgZGF0YSBmaWxlcyBmb3IgbW9uaXRvcmVkIG5vZGVzIGNvbnRhaW5zIGNvbW1hIAorc2VwYXJhdGVkIGRhdGEuIFRoZSBzcGVjaWZpYyBjb2x1bW5zIGluIHRoZSBmaWxlIHJlcHJlc2VudHMgdGhlIGxvY2F0aW9ucyAKK2JlaW5nIGxvZ2dlZC4gRm9yIGV4YW1wbGUsIGZvciB0aGUgSmFwYW4gc2NlbmFyaW8gdGhlIGZpbGUgU18xLmNzdiBoYXMgdGhlIAorY29sdW1uczogPC9wPgorPHAgYWxpZ249ImxlZnQiPjxiPiZuYnNwO2l0ZXJhdGlvbix0aW1lLEpQLUtZVSxKUC1LTlQsSlAtMCxKUC1DSEIsSlAtVEFJLEpQLUNIRyxKUC1TS08sSlAtSFJJLEpQLVRPSCxKUC1LSU4sSlAtUllVCis8L2I+PC9wPgorPHAgYWxpZ249ImxlZnQiPkEgZGF0YSBzYW1wbGUgaXMgc2hvd24gaW4gRmlndXJlIDcuPC9wPgorPHRhYmxlIGJvcmRlcj0iMSIgd2lkdGg9IjY0JSIgaWQ9InRhYmxlNiI+CisJPHRyPgorCQk8dGQ+MSxGcmkmbmJzcDsxMCZuYnNwO09jdCZuYnNwOzA4LDU2MDA0Mi4wLDI0NTI0MC40NTQ2NjIwNzc2Miw1NjI3NDI0LjAsNzk1NjQuODY2NjQ1MzYzMTMsNzkzMzIuMCwxMTAxNDAuMDxici8+CisyLFN1biZuYnNwOzEyJm5ic3A7T2N0Jm5ic3A7MDgsNTYwMDQyLjAsMjMyNDI3LjU3NTIzNTE0OTQyLDU2Mjc0MjQuMCw3OTUxOS4xMTk5ODU0NDY3Nyw3OTMzMS45MzQ5NTA2ODc3MiwxMTAxNDAuMDxici8+CiszLFR1ZSZuYnNwOzE0Jm5ic3A7T2N0Jm5ic3A7MDgsNTYwMDQyLjAsMTk4MzE4LjYzNDQ2NjA2OTc1LDU2Mjc0MjQuMCw3NzE2Ni40OTQ1OTkzODMzMiw3OTMyNi40NDU3NjAwNzUwOCwxMTAxNDAuMCwxMTUyODQuMDxici8+Cis0LFRodSZuYnNwOzE2Jm5ic3A7T2N0Jm5ic3A7MDgsNTYwMDQyLjAsMTA0MDQ2Ljk3OTg4Nzc3MzgsNTYyNzQyNC4wLDYwMDQ5Ljk1NzA0NDA2NDgyNCw3ODc2MS4yNDMxNjE5NjUyOCwxMTAxNDAuMCwxMTUyODQuMCA8YnIvPjwvdGQ+CisJPC90cj4KKwk8dHI+CisJCTx0ZD48Yj48Zm9udCBzaXplPSI0Ij5GaWd1cmUgNzogU2FtcGxlIGRhdGEgZnJvbSBhIENTViBMb2cgRmlsZTwvZm9udD48L2I+PC90ZD4KKwk8L3RyPgorPC90YWJsZT4KKzxwIGFsaWduPSJsZWZ0Ij4mbmJzcDs8L3A+Cis8cCBhbGlnbj0ibGVmdCI+Jm5ic3A7PC9wPgorPC9ib2R5PgorPC9odG1sPgorCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC9pbnRlcmZhY2Uvdmlld3MvZGVjb3JhdG9yc3ZpZXcuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2ludGVyZmFjZS92aWV3cy9kZWNvcmF0b3Jzdmlldy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjExMjJiMTAKLS0tIC9kZXYvbnVsbAorKysgYi9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC9pbnRlcmZhY2Uvdmlld3MvZGVjb3JhdG9yc3ZpZXcuaHRtbApAQCAtMCwwICsxLDI0IEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wIFRyYW5zaXRpb25hbC8vRU4iPgorCis8aHRtbD4KKzxoZWFkPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9aXNvLTg4NTktMSI+Cis8dGl0bGU+RGVjb3JhdG9ycyBWaWV3PC90aXRsZT4KKzwvaGVhZD4KKworPGJvZHk+Cis8aDE+RGVjb3JhdG9ycyBWaWV3PC9oMT4KKzxwPlRoZSA8ZW0+RGVjb3JhdG9ycyBWaWV3PC9lbT4gZGlzcGxheXMgdGhlIDxhCisJaHJlZj0iLi4vLi4vY29uY2VwdHMvbW9kZWxpbmdmcmFtZXdvcmsuaHRtbCNkZWNvcmF0b3IiPiBEZWNvcmF0b3JzPC9hPgordGhhdCBhcmUgYXZhaWxhYmxlIGZvciB1c2UgaW4gPGEKKwlocmVmPSIuLi8uLi9jb25jZXB0cy9tb2RlbGluZ2ZyYW1ld29yay5odG1sI3NjZW5hcmlvIj4gU2NlbmFyaW9zPC9hPi4KK1RoZSBhdmFpbGFibGUgPGEgaHJlZj0iLi4vLi4vY29uY2VwdHMvbW9kZWxpbmdmcmFtZXdvcmsuaHRtbCNkZWNvcmF0b3IiPgorRGVjb3JhdG9yczwvYT4gYXJlIG9yZ2FuaXplZCBpbiBhIHRyZWUuIFRob3NlIGxpc3RlZCB1bmRlciAiU1RFTSIgYXJlCitidWlsdC1pbiB0byBTVEVNLjwvcD4KKzxwPlRoZSB2aWV3IHN1cHBvcnRzICJkcmFnIiBzdWNoIHRoYXQgYSA8YQorCWhyZWY9Ii4uLy4uL2NvbmNlcHRzL21vZGVsaW5nZnJhbWV3b3JrLmh0bWwjZGVjb3JhdG9yIj4gRGVjb3JhdG9yPC9hPgorY2FuIGJlIGRyYWdnZWQgZnJvbSB0aGlzIHZpZXcgYW5kICJkcm9wcGVkIiBpbnRvIGFuIG9wZW4gPGEKKwlocmVmPSIuLi9lZGl0b3JzL21vZGVsZWRpdG9yLmh0bWwiPk1vZGVsIGVkaXRvcjwvYT4uIDwvcD4KKzxpbWcgc3JjPSJpbWcvZGVjb3JhdG9yc3ZpZXcuanBnIiAvPgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL3ZpZXdzL2Rpc2Vhc2Vzdmlldy5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL3ZpZXdzL2Rpc2Vhc2Vzdmlldy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjllM2EyZjEKLS0tIC9kZXYvbnVsbAorKysgYi9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC9pbnRlcmZhY2Uvdmlld3MvZGlzZWFzZXN2aWV3Lmh0bWwKQEAgLTAsMCArMSwxMiBAQAorPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL2h0bWw0L2xvb3NlLmR0ZCI+Cis8aHRtbD4KKzxoZWFkPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9SVNPLTg4NTktMSI+Cis8dGl0bGU+RGlzZWFzZXMgVmlldzwvdGl0bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxoMT5EaXNlYXNlcyBWaWV3PC9oMT4KKzxwPlRoZSA8ZW0+RGlzZWFzZXMgVmlldzwvZW0+IGxpc3RzIHRoZSBEaXNlYXNlcyB0aGF0IGFyZSBidWlsdC1pbiB0byBTVEVNLjwvcD4KKzxpbWcgc3JjPSJpbWcvZGlzZWFzZXN2aWV3LmpwZyIgLz4KKzwvYm9keT4KKzwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC9pbnRlcmZhY2Uvdmlld3MvZHVibGluY29yZXBvcHVwLmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC9pbnRlcmZhY2Uvdmlld3MvZHVibGluY29yZXBvcHVwLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDY3MDliMgotLS0gL2Rldi9udWxsCisrKyBiL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2ludGVyZmFjZS92aWV3cy9kdWJsaW5jb3JlcG9wdXAuaHRtbApAQCAtMCwwICsxLDM2IEBACis8IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIvaHRtbDQvbG9vc2UuZHRkIj4KKzxodG1sPgorPGhlYWQ+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0xIj4KKzx0aXRsZT5EdWJsaW4gQ29yZSBQb3AtdXA8L3RpdGxlPgorPC9oZWFkPgorPGJvZHk+Cis8aDE+RHVibGluIENvcmUgUG9wLXVwPC9oMT4KKzxwPlRoZSB2aWV3cyB0aGF0IGxpc3QgU2ltdWxhdGlvbiBjb21wb25lbnRzICg8YQorCWhyZWY9Ii4uLy4uL2NvbmNlcHRzL21vZGVsaW5nZnJhbWV3b3JrLmh0bWwjZGVjb3JhdG9yIj4gRGVjb3JhdG9yczwvYT4sCis8YSBocmVmPSIuLi8uLi9jb25jZXB0cy9tb2RlbGluZ2ZyYW1ld29yay5odG1sI2dyYXBoIj4gR3JhcGhzPC9hPiwgPGEKKwlocmVmPSIuLi8uLi9jb25jZXB0cy9tb2RlbGluZ2ZyYW1ld29yay5odG1sI21vZGVsIj4gTW9kZWxzPC9hPiwgPGEKKwlocmVmPSIuLi8uLi9jb25jZXB0cy9tb2RlbGluZ2ZyYW1ld29yay5odG1sI3NjZW5hcmlvIj4gU2NlbmFyaW9zPC9hPgorYW5kIDxhIGhyZWY9Ii4uLy4uL2NvbmNlcHRzL21vZGVsaW5nZnJhbWV3b3JrLmh0bWwjc2VxdWVuY2VyIj4KK1NlcXVlbmNlcnM8L2E+KSBzdXBwb3J0IGFuIGluc3RhbnQgInBvcC11cCIgZGlzcGxheSBvZiB0aGUgPGEKKwlocmVmPSJodHRwOi8vZHVibGluY29yZS5vcmcvIj5EdWJsaW4gQ29yZTwvYT4gbWV0YWRhdGEgYXNzb2NpYXRlZCB3aXRoCit0aGUgY29tcG9uZW50cyBkaXNwbGF5ZWQgaW4gdGhlIHZpZXcuIFRoaXMgdGFrZXMgdGhlIGZvcm0gb2YgYSBzbWFsbAord2luZG93IHRoYXQgaXMgYWN0aXZhdGVkIHdoZW4gdGhlIG1vdXNlIHN0b3BzIGFuZCAiaG92ZXJzIiBvdmVyIG9uZSBvZgordGhlIGNvbXBvbmVudHMuIFRoZSB3aW5kb3cgcHJlc2VudHMgYSBzaG9ydCBzdW1tYXJ5IG9mIHRoZSBtZXRhZGF0YSBhcworaWxsdXN0cmF0ZWQgaW4gdGhlIGltYWdlcyBiZWxvdy48L3A+CisKKzxwPlRoZSBtZXRhZGF0YSBwb3AtdXAgaW4gdGhlIDxhIGhyZWY9InNjZW5hcmlvdmlldy5odG1sIj5TY2VuYXJpb3MKK3ZpZXc8L2E+LiBUaGUgZmlyc3QgbGluZSBpcyB0aGUgdGl0bGUgb2YgdGhlIDxhCisJaHJlZj0iLi4vLi4vY29uY2VwdHMvbW9kZWxpbmdmcmFtZXdvcmsuaHRtbCNzY2VuYXJpbyI+IFNjZW5hcmlvPC9hPiwKK3RoZSBzZWNvbmQgbGluZSAoImRhZm9yZCIpIGlzIHRoZSBuYW1lIG9mIHRoZSAiY3JlYXRvciIgb2YgdGhlIDxhCisJaHJlZj0iLi4vLi4vY29uY2VwdHMvbW9kZWxpbmdmcmFtZXdvcmsuaHRtbCNzY2VuYXJpbyI+IFNjZW5hcmlvPC9hPi4KK1RoZSB0aGlyZCBsaW5lIGlzIHRoZSBkYXRlIHJhbmdlIHNwZWNpZmllZCBmb3IgdGhlIDxhCisJaHJlZj0iLi4vLi4vY29uY2VwdHMvbW9kZWxpbmdmcmFtZXdvcmsuaHRtbCNzY2VuYXJpbyI+IFNjZW5hcmlvPC9hPi4KK1RoZSBsYXN0IGxpbmUgKCJJQk0iKSBpcyB0aGUgbmFtZSBvZiB0aGUgInB1Ymxpc2hlciIuIDxpbWcKKwlzcmM9ImltZy9kY3NjZW5hcmlvc3BvcHVwLmpwZyIgLz48L3A+CisKKzxwPlRoZSBtZXRhZGF0YSBwb3AtdXAgaW4gdGhlIDxhIGhyZWY9Im1vZGVsc3ZpZXcuaHRtbCI+TW9kZWxzCit2aWV3PC9hPjwvcD4KKzxpbWcgc3JjPSJpbWcvZGNtb2RlbHNwb3B1cC5qcGciIC8+Cis8L2JvZHk+Cis8L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL3ZpZXdzL2VwaWRlbWljdmlldy5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL3ZpZXdzL2VwaWRlbWljdmlldy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU0Y2ZmMmYKLS0tIC9kZXYvbnVsbAorKysgYi9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC9pbnRlcmZhY2Uvdmlld3MvZXBpZGVtaWN2aWV3Lmh0bWwKQEAgLTAsMCArMSw2MSBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMCBUcmFuc2l0aW9uYWwvL0VOIj4KKworPGh0bWw+Cis8aGVhZD4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PWlzby04ODU5LTEiPgorPHRpdGxlPmhlbHA8L3RpdGxlPgorPC9oZWFkPgorCis8Ym9keT4KKzxoMT5FcGlkZW1pYyBWaWV3PC9oMT4KKzxwPlRoZSA8ZW0+RXBpZGVtaWMgVmlldzwvZW0+IGRpc3BsYXlzIGEgZHluYW1pYyBjb2xsZWN0aW9uIG9mCisic2ltdWxhdGlvbiBjb250cm9scyIgdGhhdCBtYXRjaCB0aGUgc2V0IG9mICJhY3RpdmUiIFNpbXVsYXRpb25zLiBFYWNoCitjb250cm9sIHNob3dzIHRoZSBuYW1lIG9mIHRoZSBTY2VuYXJpbyBhbmQgdGhhdCBzdGF0dXMgb2YgdGhlCitTaW11bGF0aW9uLCBpbmNsdWRpbmcgaXRzICJzdGF0ZSIgKGVpdGhlciAiUnVubmluZyIgb3IgIlBhdXNlZCIpLCB0aGUKK2N1cnJlbnQgInRpbWUiIGluIHRoZSBzaW11bGF0aW9uLCBhIHByb2dyZXNzIGJhci4gRWFjaCBjb250cm9sIGFsc28gaGFzCitmaXZlIGJ1dHRvbnMgdGhhdCBjb250cm9sIHRoZSBjb3JyZXNwb25kaW5nIFNpbXVsYXRpb246Cis8b2w+CisJPGxpPiJSdW4iIEJlZ2luIHJ1bm5pbmcgdGhlIFNpbXVsYXRpb24uPC9saT4KKwk8bGk+IlBhdXNlIiBQYXVzZSB0aGUgcnVubmluZyBvZiB0aGUgU2ltdWxhdGlvbi4gVGhpcyBtYWludGFpbnMKKwl0aGUgY3VycmVudCBzdGF0ZSBvZiB0aGUgc2ltdWxhdGlvbi48L2xpPgorCTxsaT4iUmVzZXQiIFJlc2V0IGFsbCBzdGF0ZSBpbmZvcm1hdGlvbiBpbiB0aGUgU2ltdWxhdGlvbiBiYWNrIHRvCisJaW5pdGlhbCB2YWx1ZXMgYW5kIHNldCB0aGUgc3RhdGUgb2YgdGhlIFNpbXVsYXRpb24gdG8gIlBhdXNlZCI8L2xpPgorCTxsaT4iU3RlcCIgUnVuIHRoZSBzaW11bGF0aW9uIGZvciBhIHNpbmdsZSBjeWNsZSBhbmQgdGhlbiBzZXQgdGhlCisJc3RhdGUgb2YgdGhlIFNpbXVsYXRpb24gdG8gIlBhdXNlZCI8L2xpPgorCTxsaT4iU3RvcCIgU3RvcCBhbGwgZXhlY3V0aW9uIG9mIHRoZSBTaW11bGF0aW9uIGFuZCBkZXN0cm95IGFsbAorCXN0YXRlIGluZm9ybWF0aW9uLiBUaGUgU2ltdWxhdGlvbiB3aWxsIGJlIHJlbW92ZWQgZnJvbSB0aGUgc3lzdGVtLjwvbGk+Cis8L29sPgorPC9wPgorJm5ic3A7PHA+VG8gdXNlIHRoZSBFcGlkZW1pYyB2aWV3OjxvbD4KKwk8bGk+RW50ZXIgdGhlIDxhIGhyZWY9Ii4uL3BlcnNwZWN0aXZlcy9hbmFseXNpcy5odG1sIj5BbmFseXNpcyBQZXJzcGVjdGl2ZTwvYT48L2xpPgorCTxsaT5DbGljayBvbiB0aGUgRXBpZGVtaWMgVGFiPC9saT4KKwk8bGk+VXNlIHRoZSBTZWxlY3QgRm9sZGVyIGJ1dHRvbiB0byBjaG9zZSB0aGUgZm9sZGVyIGNvbnRhaW5pbmcgdGhlIGVwaWRlbWljIGRhdGEgCisJeW91IHdpc2ggdG8gc3R1ZHkuIFRoZSBmaWxlcyBzaG91bGQgaGF2ZSB0aGUgZm9sbG93aW5nCisJPGEgaHJlZj0iY3N2bG9nZ2Vydmlldy5odG1sIj4mbmJzcDtmb3JtYXQuPC9hPjwvbGk+CisJPGxpPkNsaWNrIEFnZ3JlZ2F0ZSBEYXRhLiBUaGlzIHdpbGwgYXV0b21hdGljYWxseSBjcmVhdGUgdHdvIGFnZ3JlZ2F0ZWQgZGF0YSAKKwlmaWxlcyBiYXNlZCBvbiB0aGUgZGF0YSBpbiB0aGUgb3JpZ2luYWwgc2NlbmFyaW8gZm9sZGVyLiBUaGVzZSBmaWxlIG5hbWVzIAorCXdpbGwgYXBwZWFyIGluIHRoZTxicj4KKwl0ZXh0IGZpZWxkcyBmb3IgU2NlbmFyaW8gQWdncmVnYXRlIEZpbGUgYW5kIFNjZW5hcmlvIEluY2lkZW5jZSBmaWxlLiZuYnNwOyAKKwlUaGUgYWdncmVnYXRlZCBkYXRhIHdpbGwgYmUgd3JpdHRlbiB0byB0aGUgJ2FnZ3JlZ2F0ZScgYW5kICdpbmNpZGVuY2UnIAorCXN1YmZvbGRlcnMgcmVzcGVjdGl2ZWx5IDxicj4KKwkodGhlc2Ugd2lsbCBiZSBjcmVhdGVkIGlmIHRoZXkgZG8gbm90IGV4aXN0KS4gVGhlIGZpbGVzIHdpbGwgYmUgbmFtZWQgYmFzZWQgCisJb24gdGhlIGlucHV0IHNjZW5hcmlvIGZvbGRlci4gVGhlIGFnZ3JlZ2F0ZSBkYXRhIGlzIHRoZSBydW5uaW5nIGludGVncmFsIG9yIAorCXN1bSBvdmVyIHRpbWUgPGJyPgorCW9mIGFsbCBjb21wYXJ0bWVudCBkYXRhIChTLEUsSSxSKSBvdmVyIGFsbCBsb2NhdGlvbnMgaW4gdGhlIGlucHV0IHNjZW5hcmlvIAorCWZvbGRlci4gVGhlIGluY2lkZW5jZSBkYXRhIGNvbnRhaW5zIGRpZmZlcmVudGlhbCBkYXRhIGluY2x1ZGluZyBpbmNpZGVuY2UgCisJKG5ldyBjYXNlcyBhdCB0aW1lIHQpLCA8YnI+CisJbmV3IGJpcnRocywgZGVhdGhzLCBldGMuIEluY2lkZW5jZSBkYXRhIHdpbGwgYmUgZXN0aW1hdGVkIGlmIGl0IGRvZXMgbm90IAorCWV4aXN0IGluIHRoZSBvcmlnaW5hbCBzY2VuYXJpbyBkYXRhIGZpbGVzLiBOb3RlLCBpZiB5b3UgYWxyZWFkeSBoYXZlIAorCWFnZ3JlZ2F0ZSBkYXRhIHlvdSBjYW4gYWxzbyBpbnB1dDxicj4KKwl0aGVzZSBmaWxlcyBtYW51YWxseS48L2xpPgorCTxsaT5PbiB0aGUgbGVmdCBoYW5kIHNpZGUgdGhlIEVwaWRlbWljIHZpZXcgd2lsbCBzaG93IHRoZSBpbnRlZ3JhdGVkIHN0YXRlIAorCWRhdGEgKFMsRSxJLFIsIGV0YykuIERpZmZlcmVudGlhbCBkYXRhIHdpbGwgYXBwZWFyIG9uIHRoZSByaWdodCBoYW5kIGNoYXJ0LiAKKwlUbyB0b2dnbGUgYmV0d2VlbiBsaW5lYXI8YnI+CisJYW5kIGxvZ2FyaXRobWljIHNjYWxlcyBvciB0byBjaGFuZ2Ugd2hhdCB2YXJpYWJsZXMgYXJlIHBsb3R0ZWQganVzdCByaWdodCAKKwljbGljayBhbmQgdXNlIHRoZSBjdXN0b20gZGlhbG9nIHRoYXQgd2lsbCBhcHBlYXIuIDwvbGk+Cis8L29sPgorPHA+Jm5ic3A7PC9wPgorPHA+Jm5ic3A7PC9wPgorPHA+PGltZyBib3JkZXI9IjAiIHNyYz0iaW1nL0VwaWRlbWljLmpwZyIgd2lkdGg9IjEwMDAiIGhlaWdodD0iODAwIj4gPC9wPgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL3ZpZXdzL2Vycm9yX2xvZy5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL3ZpZXdzL2Vycm9yX2xvZy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVlNGI1ZDIKLS0tIC9kZXYvbnVsbAorKysgYi9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC9pbnRlcmZhY2Uvdmlld3MvZXJyb3JfbG9nLmh0bWwKQEAgLTAsMCArMSw4MSBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiIKKyJodHRwOi8vd3d3LnczLm9yZy9UUi9odG1sNC9sb29zZS5kdGQiPgorPGh0bWw+Cis8aGVhZD4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PWlzby04ODU5LTEiPgorPHRpdGxlPkVycm9yIExvZzwvdGl0bGU+Cis8c2NyaXB0IGxhbmd1YWdlPSJKYXZhU2NyaXB0IiB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiCisJc3JjPSJQTFVHSU5TX1JPT1Qvb3JnLmVjbGlwc2UuaGVscC9saXZlaGVscC5qcyI+PC9zY3JpcHQ+Cis8bGluayBocmVmPSIuLi8uLi9ib29rLmNzcyIgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPgorPCEtLQorLnN0eWxlMSB7CisJZm9udC1zaXplOiAxOHB4OworCWZvbnQtd2VpZ2h0OiBib2xkOworfQorLnN0eWxlMiB7CisJZm9udC1zaXplOiAxMnB0OworCWZvbnQtd2VpZ2h0OiBib2xkOworfQorLS0+Cis8L3N0eWxlPgorPC9oZWFkPgorCis8Ym9keT4KKzxwIGNsYXNzPSJzdHlsZTEiPkVycm9yIExvZyBWaWV3PC9wPgorPHA+VGhlIDxlbT5FcnJvciBMb2cgVmlldzwvZW0+IGNhcHR1cmVzIGFsbCB0aGUgd2FybmluZ3MgYW5kCitlcnJvcnMgbG9nZ2VkIGJ5IHBsdWctaW5zLiBUaGUgdW5kZXJseWluZyBsb2cgZmlsZSBpcyBhIDxlbT4ubG9nPC9lbT4KK2ZpbGUgc3RvcmVkIGluIHRoZSA8ZW0+Lm1ldGFkYXRhPC9lbT4gc3ViZGlyZWN0b3J5IG9mIHRoZSB3b3Jrc3BhY2UuIFRoZTxzdHJvbmc+Cis8L3N0cm9uZz52aWV3IGlzIGF2YWlsYWJsZSB1bmRlciA8YSBjbGFzcz0iY29tbWFuZC1saW5rIgorCWhyZWY9J2phdmFzY3JpcHQ6ZXhlY3V0ZUNvbW1hbmQoIm9yZy5lY2xpcHNlLnVpLnZpZXdzLnNob3dWaWV3KG9yZy5lY2xpcHNlLnVpLnZpZXdzLnNob3dWaWV3LnZpZXdJZD1vcmcuZWNsaXBzZS5wZGUucnVudGltZS5Mb2dWaWV3KSIpJz4KKzxpbWcgc3JjPSJQTFVHSU5TX1JPT1Qvb3JnLmVjbGlwc2UuaGVscC9jb21tYW5kX2xpbmsucG5nIj4gPHN0cm9uZz5XaW5kb3cKKyZndDsgU2hvdyBWaWV3ICZndDsgRXJyb3IgTG9nPC9zdHJvbmc+IDwvYT4uPC9wPgorPHA+PGltZyBzcmM9ImltZy9lcnJvcl9sb2cucG5nIiBhbHQ9IkVycm9yIExvZyIKKwloc3BhY2U9IjMwIj48L3A+Cis8cD4mbmJzcDs8L3A+Cis8cCBjbGFzcz0ic3R5bGUyIj5FdmVudCBTb3J0aW5nPC9wPgorPHA+RXZlbnRzIGluIHRoZSBsb2cgdmlldyBjYW4gYmUgc29ydGVkIGJ5IDxzdHJvbmc+TWVzc2FnZTwvc3Ryb25nPiwKKzxzdHJvbmc+UGx1Zy1pbiBJRDwvc3Ryb25nPiBvciA8c3Ryb25nPkRhdGU8L3N0cm9uZz4gaW4gYXNjZW5kaW5nIG9yCitkZXNjZW5kaW5nIG9yZGVyLiBTaW1wbHkgY2xpY2sgb24gdGhlIGNvbHVtbiBoZWFkZXIgdGhhdCB5b3Ugd2FudCB0aGUKK3NvcnRpbmcgdG8gYmUgYmFzZWQgb24uIFRoZSBkb3duIGFycm93IGluIHRoZSBjb2x1bW4gaGVhZGVyIGluZGljYXRlcworZGVzY2VuZGluZyBvcmRlcjsgd2hpbGUsIHRoZSB1cCBhcnJvdyBpbmRpY2F0ZXMgYW4gYXNjZW5kaW5nIG9yZGVyLjwvcD4KKzxwPiZuYnNwOzwvcD4KKzxwIGNsYXNzPSJzdHlsZTIiPkV2ZW50IEZpbHRlcmluZzwvcD4KKzxwPllvdSBjYW4gZmlsdGVyIHRoZSB2aWV3IHRvIHNob3cgZXZlbnRzIG9mIGEgcGFydGljdWxhciB0eXBlIG9yCitzZXNzaW9uLiBBbHNvLCB5b3UgY2FuIGxpbWl0IHRoZSBudW1iZXIgb2YgZW50cmllcyBpbiB0aGUgdmlldy4KK0ZpbHRlcmluZyBvcHRpb25zIGFyZSBhdmFpbGFibGUgdW5kZXIgPHN0cm9uZz5GaWx0ZXJzLi4uPC9zdHJvbmc+IGZyb20KK3RoZSB2aWV3J3MgdG9vbGJhciBkcm9wIGRvd24gbWVudS48L3A+Cis8cD4mbmJzcDs8L3A+Cis8cCBjbGFzcz0ic3R5bGUyIj5JbXBvcnQgYW5kIEV4cG9ydCBMb2dzPC9wPgorPHA+VG8gPHN0cm9uZz5pbXBvcnQ8L3N0cm9uZz4gYW4gYXJiaXRyYXJ5IDxlbT4ubG9nPC9lbT4gZmlsZSBpbnRvCit0aGUgdmlldywgcHJlc3MgdGhlIDxzdHJvbmc+SW1wb3J0IExvZzwvc3Ryb25nPiB0b29sYmFyIGJ1dHRvbiBvciBzZWxlY3QKKzxzdHJvbmc+SW1wb3J0IExvZy4uLjwvc3Ryb25nPiBmcm9tIHRoZSBjb250ZXh0IG1lbnUuIFRoZW4sIGNob29zZSBhIDxlbT4ubG9nPC9lbT4KK2ZpbGUgZnJvbSB0aGUgZmlsZSBzeXN0ZW0uPC9wPgorPHA+VG8gPHN0cm9uZz5leHBvcnQ8L3N0cm9uZz4gdGhlIGN1cnJlbnQgbG9nIHZpZXcgY29udGVudCBpbnRvIGEKK2ZpbGUsIHByZXNzIHRoZSA8c3Ryb25nPkV4cG9ydCBMb2c8L3N0cm9uZz4gdG9vbGJhciBidXR0b24gb3Igc2VsZWN0IDxzdHJvbmc+RXhwb3J0CitMb2cuLi48L3N0cm9uZz4gZnJvbSB0aGUgY29udGV4dCBtZW51LiBUaGVuLCBlbnRlciBhIGZpbGUgbmFtZS48L3A+Cis8cD4mbmJzcDs8L3A+Cis8cCBjbGFzcz0ic3R5bGUyIj5DbGVhciBhbmQgRGVsZXRlIExvZ3M8L3A+Cis8cD5UbyA8c3Ryb25nPmNsZWFyPC9zdHJvbmc+IHRoZSB2aWV3IGxvZyBjb250ZW50IHdpdGhvdXQgZGVsZXRpbmcKK3RoZSB1bmRlcmx5aW5nIDxlbT4ubG9nPC9lbT4gZmlsZSwgcHJlc3MgdGhlIDxzdHJvbmc+Q2xlYXIgTG9nPC9zdHJvbmc+Cit0b29sYmFyIGJ1dHRvbiBvciBzZWxlY3QgPHN0cm9uZz5DbGVhciBMb2cgVmlld2VyPC9zdHJvbmc+IGZyb20gdGhlCitjb250ZXh0IG1lbnUuPC9wPgorPHA+VG8gcGVybWFuZW50bHkgPHN0cm9uZz5kZWxldGU8L3N0cm9uZz4gdGhlIHVuZGVybHlpbmcgPGVtPi5sb2c8L2VtPgorZmlsZSwgcHJlc3MgdGhlIDxzdHJvbmc+RGVsZXRlIExvZzwvc3Ryb25nPiB0b29sYmFyIGJ1dHRvbiBvciBzZWxlY3QgPHN0cm9uZz5EZWxldGUKK0xvZzwvc3Ryb25nPiBmcm9tIHRoZSBjb250ZXh0IG1lbnUuPC9wPgorPHA+Jm5ic3A7PC9wPgorPHAgY2xhc3M9InN0eWxlMiI+RXZlbnQgRGV0YWlsczwvcD4KKzxwPkZ1bGwgZGV0YWlscyBhYm91dCBhIHBhcnRpY3VsYXIgZXZlbnQgY2FuIGJlIHZpZXdlZCBpbiB0aGUgPHN0cm9uZz5FdmVudAorRGV0YWlsczwvc3Ryb25nPiBkaWFsb2cgYnkgZG91YmxlLWNsaWNraW5nIG9uIGEgcGFydGljdWxhciBlbnRyeSBvciBzZWxlY3RpbmcgPHN0cm9uZz5FdmVudAorRGV0YWlsczwvc3Ryb25nPiBmcm9tIHRoZSBjb250ZXh0IG1lbnUgb2YgdGhhdCBlbnRyeS4gWW91IGNhbiB2aWV3IHRoZSA8c3Ryb25nPkRhdGU8L3N0cm9uZz4sCis8c3Ryb25nPlNldmVyaXR5PC9zdHJvbmc+LCA8c3Ryb25nPk1lc3NhZ2U8L3N0cm9uZz4sIDxzdHJvbmc+RXhjZXB0aW9uCitTdGFjayBUcmFjZTwvc3Ryb25nPiAoaWYgYXZhaWxhYmxlKSBhbmQgPHN0cm9uZz5TZXNzaW9uIERhdGE8L3N0cm9uZz4gb2YgZWFjaAorZXZlbnQuPC9wPgorPHA+WW91IGNhbiBuYXZpZ2F0ZSBmcm9tIG9uZSBlbnRyeSB0byB0aGUgbmV4dCB2aWEgdGhlIDxzdHJvbmc+VXA8L3N0cm9uZz4KK2FuZCA8c3Ryb25nPkRvd248L3N0cm9uZz4gYXJyb3cgYnV0dG9ucy48L3A+Cis8cD5UbyBjb3B5IHRoZSBlcnJvciB0byB0aGUgY2xpcGJvYXJkLCBwcmVzcyB0aGUgYnV0dG9uIHdpdGggdGhlCitjbGlwYm9hcmQgaW1hZ2UuPC9wPgorPHA+Jm5ic3A7PC9wPgorPHA+Jm5ic3A7PC9wPgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL3ZpZXdzL2VzdGltYXRvcnZpZXcuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2ludGVyZmFjZS92aWV3cy9lc3RpbWF0b3J2aWV3Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2Y3OTI5OQotLS0gL2Rldi9udWxsCisrKyBiL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2ludGVyZmFjZS92aWV3cy9lc3RpbWF0b3J2aWV3Lmh0bWwKQEAgLTAsMCArMSw0NiBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMCBUcmFuc2l0aW9uYWwvL0VOIj4KKworPGh0bWw+Cis8aGVhZD4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PWlzby04ODU5LTEiPgorPHRpdGxlPmhlbHA8L3RpdGxlPgorPC9oZWFkPgorCis8Ym9keT4KKzxoMT5Fc3RpbWF0b3IgVmlldzwvaDE+Cis8cCBjbGFzcz0iTXNvTm9ybWFsIiBzdHlsZT0icGFnZS1icmVhay1hZnRlcjogYXZvaWQ7IHRleHQtYXV0b3NwYWNlOiBub25lOyBtYXJnaW4tbGVmdDogLjc1cHQiPgorPGI+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZToxMS4wcHQ7Y29sb3I6YmxhY2siPk1vZGVsIFBhcmFtZXRlciBFc3RpbWF0aW9uPC9zcGFuPgorPC9iPjwvcD4KKzxwPlRoZSA8ZW0+RXN0aW1hdG9yIFZpZXc8L2VtPiBhbGxvd3MgYSB1c2VyIHRvIGVzdGltYXRlIHBhcmFtZXRlciBmb3IgYSAobmV3KSBtb2RlbCBiYXNlZCBvbiBleGlzdGluZyAKK2RhdGEuJm5ic3A7IEFsZ29yaXRobXMgYXJlIG5vdyBjb21wbGV0ZSBmb3IgcGFyYW1ldGVyIEVzdGltYXRpb24gdXNpbmcgU0ksIFNJUiwgCithbmQgU0VJUiBtb2RlbHMuIDwvc3Bhbj4KKzxvbD4KKwk8bGk+RW50ZXIgdGhlIDxhIGhyZWY9Ii4uL3BlcnNwZWN0aXZlcy9hbmFseXNpcy5odG1sIj5BbmFseXNpcyBQZXJzcGVjdGl2ZTwvYT48L2xpPgorCTxsaT5DbGljayBvbiB0aGUgRXN0aW1hdG9yIFRhYjwvbGk+CisJPGxpPkNsaWNrIG9uIHRoZSAmcXVvdDtTZWxlY3QmcXVvdDsgYnV0dG9uIHRvIGNob3NlIHRoZSBkaXJlY3RvcnkgdGhhdCBjb250YWlucyB0aGUgCisJZGF0YSBmaWxlcyB5b3Ugd2lzaCB0byBhbmFseXplLiBUaGVzZSBmaWxlcyBzaG91bGQgaGF2ZSB0aGUgZm9sbG93aW5nCisJPGEgaHJlZj0iY3N2bG9nZ2Vydmlldy5odG1sIj4mbmJzcDtmb3JtYXQuPC9hPjwvbGk+CisJPGxpPkEgZGlhbG9nIHdpbGwgbGF1bmNoIGFsbG93aW5nIHlvdSB0byBjaG9zZSB0aGUgZm9sZGVyLiBTZWxlY3QgdGhlIGZvbGRlciAKKwlieSBjbGlja2luZyAmcXVvdDtTZWxlY3QgU2NlbmFyaW8gRm9sZGVyJnF1b3Q7IGFuZCB0aGVuIGNsaWNrICZxdW90O05leHQmcXVvdDs8L2xpPgorPC9vbD4KKzwvcD4KKyZuYnNwOzxwPjxpbWcgYm9yZGVyPSIwIiBzcmM9ImltZy9Fc3RpbWF0b3IxYS5qcGciIHdpZHRoPSIxMDAwIiBoZWlnaHQ9IjgwMCI+PC9wPgorPHA+NS4gQSBzZWNvbmQgZGlhbG9nIHdpbGwgbGF1bmNoIGFsbG93aW5nIHlvdSB0byBjaG9zZSBmcm9tIHZhbGlkIG1vZGVscyAKK2FwcHJvcHJpYXRlIHRvIHRoZSBkYXRhIHNldCB5b3UgY2hvc2UuIElmLCBmb3IgZXhhbXBsZSwgdGhlIGRhdGE8YnI+Citjb250YWlucyBjb2x1bW5zIGZvciBhbGwgUyxFLEksUiBzdGF0ZXMsIHRoZW4gYW55IFNFSVIgcGFyYW1ldGVyIGVzdGltYXRvciB3aWxsIAorYXBwZWFyIG9uIHRoZSBsaXN0LiBTZWxlY3QgYW5kIEVzdGltYXRvciBhbmQgY2xpY2sgJnF1b3Q7RmluaXNoJnF1b3Q7PC9wPgorPHA+Jm5ic3A7PC9wPgorPHA+PGltZyBib3JkZXI9IjAiIHNyYz0iaW1nL0VzdGltYXRvcjFiLmpwZyIgd2lkdGg9IjEwMDAiIGhlaWdodD0iODAwIj48L3A+Cis8cD42LiBUaGUgRm9sZGVyIHlvdSBjaG9zZSB3aWxsIG5vdyBzaG93IHVwIG9uIHRoZSAmcXVvdDtTY2VuYXJpbyBGb2xkZXImcXVvdDsgdGV4dCBmaWVsZC4gCitDbGljayAmcXVvdDtFc3RpbWF0ZSBQYXJhbWV0ZXJzJnF1b3Q7LjwvcD4KKzxwPjxpbWcgYm9yZGVyPSIwIiBzcmM9ImltZy9Fc3RpbWF0b3IyLmpwZyIgd2lkdGg9IjEwMDAiIGhlaWdodD0iODAwIj48L3A+Cis8cD43LiBBIGJhciBjaGFydCBncmFwaCB3aWxsIGFwcGVhciBzaG93aW5nIHlvdSBlc3RpbWF0ZXMgZm9yIHRoZSBhcHByb3ByaWF0ZSAKK21vZGVsIHBhcmFtZXRlcnMuIEluIHNvbWUgY2FzZSB0d28gYmFycyB3aWxsIGFwcGVhciBmb3IgZWFjaCBwYXJhbWV0ZXIgYXMgdGhlIAorZXN0aW1hdG9yIG1heTxicj4KK2RldGVybWluZSB0aGUgYmVzdCBlc3RpbWF0ZSBmaXRzIHdpdGhpbiBhIHJhbmdlIG9mIHZhbHVlcy4gRm9yIG1vcmUgaW5mb3JtYXRpb24gCitvbiB0aGUgZXN0aW1hdGlvbiBhbGdvcml0aG1zIHBsZWFzZSBzZWUgdGhlCis8YSBocmVmPSJodHRwOi8vd2lraS5lY2xpcHNlLm9yZy9Fc3RpbWF0aW5nX01vZGVsX1BhcmFtZXRlcnNfZnJvbV9FeHRlcm5hbF9EYXRhIj4KK0VjbGlwc2UgU1RFTSB3aWtpLjwvYT48L3A+Cis8cD48aW1nIGJvcmRlcj0iMCIgc3JjPSJpbWcvRXN0aW1hdG9yMy5qcGciIHdpZHRoPSIxMDAwIiBoZWlnaHQ9IjgwMCI+PC9wPgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL3ZpZXdzL2dlLmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC9pbnRlcmZhY2Uvdmlld3MvZ2UuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMDAzMjk0Ci0tLSAvZGV2L251bGwKKysrIGIvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL3ZpZXdzL2dlLmh0bWwKQEAgLTAsMCArMSwxMjggQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAgVHJhbnNpdGlvbmFsLy9FTiI+CisKKzxodG1sPgorPGhlYWQ+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1pc28tODg1OS0xIj4KKzx0aXRsZT5Hb29nbGVFYXJ0aCBWaWV3PC90aXRsZT4KKzwvaGVhZD4KKworPGJvZHk+Cis8aDE+U1RFTSB0byBHb29nbGVFYXJ0aCBWaWV3PC9oMT4KKzxwPlRoZSBTVEVNIHRvIEdvb2dsZUVhcnRoIHZpZXcgcHJvamVjdHMgdGhlIHJlc3VsdHMgb2YgdGhlIFNURU0KK3NpbXVsYXRpb24gb250byBHb29nbGVFYXJ0aHMgM0QgZGlzcGxheSBvZiB0aGUgV29ybGQuIEZvciBleGFtcGxlLCBpbgordGhlIGZvbGxvd2luZyBkaXNwbGF5LCB0aGUgcHJvZ3Jlc3Mgb2YgYSBkaXNlYXNlIGlzIHNob3duIGluIHJlZAorc3VwZXJpbXBvc2VkIG9uIHRoZSBHb29nbGVFYXJ0aCBkaXNwbGF5LjwvcD4KKzxwPgorPHVsPgorCUNvbG9yIEtleQorCTxsaT5CbHVlIC0gU3VzY2VwdGlibGU8L2xpPgorCTxsaT5ZZWxsb3cgLSBFeHBvc2VkPC9saT4KKwk8bGk+UmVkIC0gSW5mZWN0aW91czwvbGk+CisJPGxpPkdyZWVuIC0gUmVjb3ZlcmVkPC9saT4KKzwvdWw+Cis8cD48aW1nIHNyYz0iaW1nL2dlbWFwMS5qcGciIHdpZHRoPTYwMD4KKzxwPgorPGgyPlByZXJlcXVpc2l0ZXM8L2gyPgorPHA+WW91IG11c3QgaGF2ZSBpbnN0YWxsZWQgdGhlIEdvb2dsZUVhcnRoIGFwcGxpY2F0aW9uIHdoaWNoIGlzCithdmFpbGFibGUgZm9yIHBlcnNvbmFsIHVzZSBmcm9tIHRoZSA8YQorCWhyZWY9Imh0dHA6Ly9lYXJ0aC5nb29nbGUuY29tL2VhcnRoNC5odG1sIj5Hb29nbGVFYXJ0aCBkb3dubG9hZAorc2l0ZTwvYT4uIFlvdSBzaG91bGQgdmVyaWZ5IHRoYXQgR29vZ2xlRWFydGggd29ya3MgY29ycmVjdGx5IG9uIHlvdXIgbWFjaGluZQorYnkgc3RhcnRpbmcgaXQgYW5kIHZlcmlmaW5nIHRoYXQgeW91IGNhbiBicm93c2UgdGhlIDNEIGltYWdlLiAKK1BsdXMgaXQgaXMgYSBmdW4gYXBwbGljYXRpb24gdG8gcGxheSB3aXRoLiBOb3RlIHRoYXQgc29tZSBvbGRlcgorY29tcHV0ZXJzIGRvIG5vdCBoYXZlIHRoZSAzRCBncmFwaGljcyBjYXBhYmlsaXRpZXMgcmVxdWlyZWQgYnkKK0dvb2dsZUVhcnRoIGFuZCB5b3Ugd2lsbCBub3QgYmUgYWJsZSB0byBydW4gR29vZ2xlRWFydGguICAgCis8aDI+U3RhcnRpbmcgdGhlIFNURU0gdG8gR29vZ2xlRWFydGggaW50ZXJmYWNlLjwvaDI+Cis8cD5Zb3UgY2FuIGxlYXZlIEdvb2dsZUVhcnRoIHJ1bm5pbmcgb3Igbm90LiBTVEVNIHdpbGwgc3RhcnQgaXQgaWYKK25lZWRlZC4gCis8cD4KK0lmIHlvdSBhcmUgcnVubmluZyBTVEVNIGZyb20gdGhlIHNvdXJjZSBkaXN0cmlidXRpb24sICB5b3UgbmVlZCBidWlsZCB0aGUgCitTZXJ2bGV0cyBhcyBkZXNjcmliZWQgbGF0ZXIuICAKKzx1bD4KKyAgICA8bGk+U3RhcnR1cCB0aGUgU1RFTSBhcHBsaWNhdGlvbiBhcyBkZXNjcmliZWQgZWFybGllci4KKwk8bGk+TG9hZCBHb29nbGVFYXJ0aCBWaWV3IDxiPldpbmRvd3MtPkdvb2dsZUVhcnRoIFZpZXc8L2I+CisJPGxpPlNlbGVjdCB0aGUgR29vZ2xlRWFydGggVmlldyBmcm9tIHRoZSBUYWJiZWQgV2luZG93LiA8YnI+CisJVGhpcyBzaG91bGQgc3RhcnQgdGhlIEdvb2dsZUVhcnRoIGFwcGxpY2F0aW9uIGlmIGl0IHdhcyBub3QKKwlhbHJlYWR5IHN0YXJ0ZWQuIFRoZSBTVEVNLUdvb2dsZUVhcnRoIGludGVyZmFjZSBoYXMgbWFueSBvcHRpb25zIHRoYXQKKwljYW4gYmUgc2V0IGZyb20gCisJPGI+V2luZG93cy0+cHJlZmVyZW5jZXMtPlNURU0tPlZpc3VhbGl6YXRpb24tPkdlb2dyYXBoaWMtPkdvb2dsZUVhcnRoPC9iPiAKKwlIb3dldmVyLCB3ZSBjYW4gdXNlIHRoZSBkZWZhdWx0cyBmb3Igb3VyIGZpcnN0IHJ1bi4gCisJPGxpPlN0YXJ0IGEgbmV3IHNpbXVsYXRpb24gYnkgc2VsZWN0aW5nIHRoZSBTY2VuYXJpbyB3aW5kb3cuIAorCTxsaT5TZWxlY3QgdGhlIFVTQSBzY2VuYXJpby4gU1RFTS0+R2VvZ3JhcGh5LT5Qb2xpdGljYWwtPkNvdW50cnktPlVTQQorCTxsaT5kb3VibGUgY2xpY2tpbmcgdGhlICJQYW5kZW1pYyBEZW1vIiA8YSBocmVmPSIuLi8uLi9jb25jZXB0cy9tb2RlbGluZ2ZyYW1ld29yay5odG1sI3NjZW5hcmlvIj4gU2NlbmFyaW88L2E+LgorCTxsaT5BZnRlciB0aGUgZGlzcGxheSBoYXMgcnVuIGZvciBhdCBsYWVhc3QgNyBjeWNsZXMsIAorCSAgICBwcmVzcyB0aGUgPGI+cGF1c2U8L2I+IGNvbnRyb2wuCisJPGxpPlNlbGVjdCB0aGUgR29vZ2xlRWFydGggVmlldyBhbmQgcHJlc3MgdGhlIDxiPkRpc3BsYXk8L2I+IGJ1dHRvbi4KKwk8bGk+WW91IHNob3VsZCBzZWUgdGhlIGN1cnJlbnQgc3RhdGUgb2YgdGhlIFBhbmRlbWljIERlbW8gaW5mZWN0aW9uIHN1cGVyaW1wb3NlZCBvbiAKKwkgICAgdGhlIEdvb2dsZUVhcnRoIG1hcC4KKzwvdWw+CisKKzxwPgorPGgyPk1hbnVhbCBtb2RlIHZlcnN1cyBBdXRvbWF0aWMgTW9kZS48L2gyPgorICBUaGUgU1RFTSB0byBHb29nbGVFYXJ0aCBpcyBkaXN0cmlidXRlZCB3aXRoIHRoZSBkZWZhdWx0IHRvIHJ1biBpbiBNYW51YWwgbW9kZS4KKyAgSW4gb3JkZXIgdG8gc2VlIHRoZSBzdGF0ZSBvZiB0aGUgZGlzZWFzZSBzdXBlcmltcG9zZWQgb24gdGhlIAorICBHb29nbGVFYXJ0aCAzRCBpbWFnZSwgeW91IGhhdmUgdG8gbWFudWFsbHkgcHJlc3MgdGhlIGRpc3BsYXkgYnV0dG9uLgorICBUaGUgbW9yZSBpbnRlcmVzdGluZyB3YXkgdG8gcnVuIGl0IGlzIHdpdGggdGhlIEdvb2dsZUVhcnRoIGRpc3BsYXkgCisgIGJlaW5nIGF1dG9tYXRpY2FsbHkgdXBkYXRlZCBvbiBlYWNoIGN5Y2xlIHdpdGggdGhlIGN1cnJlbnQgc3RhdHVzIG9mIHRoZSBkaXNlYXNlLgorICBCdXQgYmVjYXVzZSBib3RoIFNURU0gYW5kIEdvb2dsZUVhcnRoIHVzZSBhIGxvdCBvZiBDUFUgcmVzb3VyY2VzIGFuZCAKKyAgc3lzdGVtIG1lbW9yeSwgdGhleSB3aWxsIG9ubHkgcnVuIHdlbGwgc2ltdWx0YW5lb3VzbHkgaWYgeW91IGhhdmUgYXQgbGVhc3QgCisgIHR3byBHaWdhYnl0ZXMgb2YgbWVtb3J5IGFuZCBhIGZhc3QgcHJvY2Vzc29yLiAgSXQgd2lsbCBydW4gd2l0aCBvbmUgZ2lnYWJ5dGUgCisgIG9mIG1lbW9yeSBidXQgdmVyeSBzbG93bHkuCisgIDxwPgorICBJZiB5b3UgYXJlIGx1Y2t5IGVub3VnaCB0byBoYXZlIDIgR2lnYWJ5dGVzIG1lbW9yeSwgZ28gdG8gdGhlIAorICA8YSBocmVmPSIuLi9wcmVmZXJlbmNlcy9wcmVmZXJlbmNlc2dldG9wbGV2ZWwuaHRtbCI+R29vZ2xlRWFydGggUHJlZmVyZW5jZXM8L2E+CisgIGFuZCBzZXQgdGhlICJtZXRob2QiIHByZWZlcmVuY2UgdG8gIkFzeW5jaCBTZXJ2bGV0IiBvciAiRGlyZWN0IExhdW5jaCIuCisgIDxwPgorICBUaGUgbmV4dCB0aW1lIHlvdSBzdGFydCBhIHNpbXVsYXRpb24sIHlvdSBzaG91bGQgdGhlbiBzZWUgdGhlIGRpc2Vhc2Ugc3ByZWFkIAorICBpbiB0aGUgR29vZ2xlRWFydGggd2luZG93IGFzIFNURU0gcnVucy4KKyAgPHA+CisgIFlvdSBjYW4gYWxzbyA8Yj5yaWdodCBjbGljazwvYj4gaW4gdGhlIFNURU0tR29vZ2xlRWFydGggd2luZG93IHRvIGJyaW5nIHVwIAorICBhIGNvbnRleHQgbWVudSB3aXRoIGFkZGl0aW9uYWwgY29tbWFuZHMuCisgIAorICA8aDI+QnVpbGRpbmcgU2VydmxldHM8L2gyPgorICBJZiB5b3UgYXJlIHJ1bm5pbmcgZnJvbSB0aGUgU1RFTSBzb3VyY2UgZGlzdHJpYnV0aW9uOgorICA8dWw+CisgICAgPGxpPlVwZGF0ZSBTVEVNIHRvIHRoZSBsYXRlc3QgY29kZSBsZXZlbCBhbmQgZW5zdXJlIGl0IGlzIHJlZnJlc2hlZCBhbmQgcmVidWlsdC4KKyAgICA8bGk+RnJvbSBwcm9qZWN0IDxiPm9yZy5lY2xpcHNlLnN0ZW0udWkuZ2U8L2I+IHNlbGVjdCA8Yj5zZXJ2bGV0LnhtbDwvYj4KKyAgICA8bGk+U2VsZWN0IDxiPlJ1bkFzLT5BbnRCdWlsZDwvYj4KKyAgICA8bGk+RnJvbSBFY2xpcHNlLCBSdW4gU3RlbSB1c2luZyBzdGVtLnByb2R1Y3QgaW4gb3JnLmVjbGlwc2Uuc3RlbS51aSAKKyAgICAgICAgYXMgZGVzY3JpYmVkIGVhcmxpZXIgCisgICA8L3VsPgorICBJZiB5b3UgYXJlIHJ1bm5pbmcgdGhlIFNURU0gc3RhbmRhbG9uZSBleGVjdXRhYmxlLCB0aGUgYWJvdmUgc3RlcHMgd2VyZSAKKyAgYWxyZWFkeSBkb25lIGZvciB5b3UgYW5kIHlvdSBqdXN0IG5lZWQgdG8gc3RhcnQgU1RFTS5leGUuCisgIAorICA8aDI+Q29udGV4dCBNZW51PC9oMj4KKyAgSWYgeW91IGJyaW5nIHVwIHRoZSBjb250ZXh0IG1lbnUgKFJpZ2h0IGNsaWNrIGluIFdpbmRvd3MpIHRoZW4geW91IHdpbGwgCisgIGdldCBhIG1lbnUgd2hlcmUgeW91IGNhbiBpc3N1ZSBzb21lIGNvbnRyb2wgY29tbWFuZHMgb3Igb3B0aW9ucyBmb3IgdGhlIAorICBTVEVNL0dvb2dsZUVhcnRoIGludGVyZmFjZS4gIFRoZSBkaWZmZXJlbmNlIGJldHdlZW4gdGhlIGNvbnRleHQgbWVudSBhbmQgCisgIHRoZSA8Yj5QcmVmZXJlY2VzPC9iPiBpcyB0aGF0IHRoZSBjb250ZXh0IG1lbnUgb25seSBhZmZlY3RzIHRoZSBjdXJyZW50IAorICBpbnZvY2F0aW9uLiAgCisgIDx1bD4KKyAgIDxsaT48ZW0+RGlzcGxheSBBZG1pbiBBcmVhPC9lbT48YnI+CisgICAgIFRoaXMgd2lsbCBicmluZyB1cCBhIG1lbnUgd2hlcmUgeW91IGNhbiBzcGVjaWZ5IGFuIGFkbWluIGFyZWEgYW5kIAorICAgICBoYXZlIGlmIGRpc3BsYXllZCBvbiB0aGUgR29vZ2xlRWFydGggbWFwLiAgVGhpcyBoYXMgbm90aGluZyB0byBkbyAKKyAgICAgd2l0aCBTVEVNIGJ1dCBpdCB3YXMgdXNlZnVsIGR1cmluZyBvdXIgZGV2ZWxwbWVudCBvZiB0aGUgU1RFTSAKKyAgICAgZ2VvZ3JhcGh5IGZpbGVzIGFuZCBoYXMgYmVlbiBsZWZ0IGluLgorICAgPGxpPjxlbT5EaXNwbGF5IFN0YXR1czwvZW0+PGJyPgorICAgICBUaGlzIHdpbGwgZGlzcGxheSBvbiB0aGUgY29uc29sZSB0aGUgc3RhdHVzIG9mIHRoZSBTVEVNL0dvb2dsZUVhcnRoIAorICAgICBpbnRlcm5hbCBpbnRlcmZhY2UuICBJdCBpcyBhIHVzZWZ1bCBkZWJ1ZyB0b29sLgorICAgPGxpPjxlbT5EZWJ1ZyBPbi9PZmY8L2VtPjxicj4KKyAgICAgVHVybnMgb24gIG9yIG9mZiB0aGUgZGVidWcgb3V0cHV0LgorICAgPGxpPjxlbT5Hb29nbGVFYXJ0aCBTdGFydDwvZW0+PGJyPgorICAgICBTdGFydHVwIEdvb2dsZUVhcnRoIGFwcGxpY2F0aW9uIGlmIGl0IGlzIG5vdCBhbHJlYWR5IHN0YXJ0ZWQuCisgICA8bGk+PGVtPkdvb2dsZUVhcnRoIFJlc3RhcnQ8L2VtPjxicj4KKyAgICAgSWYgR29vZ2xlRWFydGggd2FzIGZvciBhbnkgcmVhc29uIHN0b3BwZWQgb3IgY3Jhc2hlZCwgCisgICAgIHRoaXMgd2lsbCBhdHRlbXB0IHRvIGdldCBpdCBydW5uaW5nIGFnYWluIHdpdGggdGhlIGN1cnJlbnQgCisgICAgIFNURU0gc3RhdHVzLiBJdCBtYXkgbm90IHdvcmsuCisgICA8bGk+PGVtPkdvb2dsZUVhcnRoIFJ1bjwvZW0+PGJyPgorICAgICBUaGlzIGlzIHVzZWQgaWYgeW91IGhhdmUgYWxyZWFkeSBjYXB0dXJlZCB0aGUgS01MIGxvZyBmaWxlcyBhbmQgCisgICAgIHlvdSB3YW50IHRvIHJ1biB0aGVtIGFmdGVyIHRoZSBzaW11bGF0aW9uIGlzIGNvbXBsZXRlLgorICAgICBJdCB3aWxsIGxldCB5b3Ugc3BlY2lmeSB0aGUgZm9sZGVyIGNvbnRhaW5pbmcgdGhlIEtNTCBmaWxlcyBhbmQgCisgICAgIHdpbGwgc2VuZCB0aGVtIG9uZSBieSBvbmUgdG8gR29vZ2xlRWFydGguCisgICA8bGk+PGVtPkdvb2dsZUVhcnRoIFN0b3A8L2VtPjxicj4KKyAgICAgVGhpcyB3aWxsIHN0b3AgdGhlIHNlbmRpbmcgb2YgZmlsZXMgdG8gR29vZ2xlRWFydGggYW5kIAorICAgICBjbGVhciB0aGUgcG9seWdvbnMgYWxyZWFkeSBkaXNwbGF5ZWQuIAorICAgCisgIDwvdWw+CisgICAgCis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC9pbnRlcmZhY2Uvdmlld3MvZ3JhcGhzdmlldy5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL3ZpZXdzL2dyYXBoc3ZpZXcuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYTQwMjU3Ci0tLSAvZGV2L251bGwKKysrIGIvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL3ZpZXdzL2dyYXBoc3ZpZXcuaHRtbApAQCAtMCwwICsxLDI1IEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wIFRyYW5zaXRpb25hbC8vRU4iPgorCis8aHRtbD4KKzxoZWFkPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9aXNvLTg4NTktMSI+Cis8dGl0bGU+aGVscDwvdGl0bGU+Cis8L2hlYWQ+CisKKzxib2R5PgorPGgxPkdyYXBocyBWaWV3PC9oMT4KKzxwPlRoZSA8ZW0+R3JhcGhzIFZpZXc8L2VtPiBkaXNwbGF5cyB0aGUgPGEKKwlocmVmPSIuLi8uLi9jb25jZXB0cy9tb2RlbGluZ2ZyYW1ld29yay5odG1sI2dyYXBoIj4gR3JhcGhzPC9hPiB0aGF0IGFyZQorYXZhaWxhYmxlIGZvciB1c2UgaW4gPGEKKwlocmVmPSIuLi8uLi9jb25jZXB0cy9tb2RlbGluZ2ZyYW1ld29yay5odG1sI3NjZW5hcmlvIj4gU2NlbmFyaW9zPC9hPi4gSXQgY29udGFpbnMgZ3JhcGhzIHJlcHJlc2VudGluZworCWluZnJhc3R1Y3R1cmUgc3VjaCBhcyBhaXJwb3J0cyBhbmQgcm9hZHMsIGFzIHdlbGwgYXMgY29tbW9uIGJvcmRlciByZWxhdGlvbnNoaXBzIGJldHdlZW4gcmVnaW9ucy4KK1RoZSBhdmFpbGFibGUgPGEgaHJlZj0iLi4vLi4vY29uY2VwdHMvbW9kZWxpbmdmcmFtZXdvcmsuaHRtbCNncmFwaCI+CitHcmFwaHM8L2E+IGFyZSBvcmdhbml6ZWQgaW4gYSB0cmVlLiBUaG9zZSBsaXN0ZWQgdW5kZXIgIlNURU0iIGFyZSBidWlsdC1pbgordG8gU1RFTS48L3A+Cis8cD5UaGUgdmlldyBzdXBwb3J0cyAiZHJhZyIgc3VjaCB0aGF0IGEgPGEKKwlocmVmPSIuLi8uLi9jb25jZXB0cy9tb2RlbGluZ2ZyYW1ld29yay5odG1sI2dyYXBoIj4gR3JhcGhzPC9hPiBjYW4gYmUKK2RyYWdnZWQgZnJvbSB0aGlzIHZpZXcgYW5kICJkcm9wcGVkIiBpbnRvIGFuIG9wZW4gPGEKKwlocmVmPSIuLi9lZGl0b3JzL21vZGVsZWRpdG9yLmh0bWwiPk1vZGVsIGVkaXRvcjwvYT4uPC9wPgorPGltZyBzcmM9ImltZy9ncmFwaHN2aWV3LnBuZyIgLz4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2ludGVyZmFjZS92aWV3cy9pbWcvLmN2c2lnbm9yZSBiL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2ludGVyZmFjZS92aWV3cy9pbWcvLmN2c2lnbm9yZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wODVlOGJhCi0tLSAvZGV2L251bGwKKysrIGIvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL3ZpZXdzL2ltZy8uY3ZzaWdub3JlCkBAIC0wLDAgKzEgQEAKK1RodW1icy5kYgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL3ZpZXdzL2ltZy9Dc3YyXzUuanBnIGIvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL3ZpZXdzL2ltZy9Dc3YyXzUuanBnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkyZjdiNjUKLS0tIC9kZXYvbnVsbAorKysgYi9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC9pbnRlcmZhY2Uvdmlld3MvaW1nL0NzdjJfNS5qcGcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL3ZpZXdzL2ltZy9Dc3Y2LmpwZyBiL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2ludGVyZmFjZS92aWV3cy9pbWcvQ3N2Ni5qcGcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2M4MzY0OQotLS0gL2Rldi9udWxsCisrKyBiL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2ludGVyZmFjZS92aWV3cy9pbWcvQ3N2Ni5qcGcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL3ZpZXdzL2ltZy9FcGlkZW1pYy5qcGcgYi9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC9pbnRlcmZhY2Uvdmlld3MvaW1nL0VwaWRlbWljLmpwZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYWNiM2UxCi0tLSAvZGV2L251bGwKKysrIGIvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL3ZpZXdzL2ltZy9FcGlkZW1pYy5qcGcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL3ZpZXdzL2ltZy9Fc3RpbWF0b3IxYS5qcGcgYi9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC9pbnRlcmZhY2Uvdmlld3MvaW1nL0VzdGltYXRvcjFhLmpwZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kOGJjM2RlCi0tLSAvZGV2L251bGwKKysrIGIvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL3ZpZXdzL2ltZy9Fc3RpbWF0b3IxYS5qcGcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL3ZpZXdzL2ltZy9Fc3RpbWF0b3IxYi5qcGcgYi9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC9pbnRlcmZhY2Uvdmlld3MvaW1nL0VzdGltYXRvcjFiLmpwZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MjhhOWEyCi0tLSAvZGV2L251bGwKKysrIGIvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL3ZpZXdzL2ltZy9Fc3RpbWF0b3IxYi5qcGcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL3ZpZXdzL2ltZy9Fc3RpbWF0b3IyLmpwZyBiL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2ludGVyZmFjZS92aWV3cy9pbWcvRXN0aW1hdG9yMi5qcGcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDRjY2IxZQotLS0gL2Rldi9udWxsCisrKyBiL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2ludGVyZmFjZS92aWV3cy9pbWcvRXN0aW1hdG9yMi5qcGcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL3ZpZXdzL2ltZy9Fc3RpbWF0b3IzLmpwZyBiL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2ludGVyZmFjZS92aWV3cy9pbWcvRXN0aW1hdG9yMy5qcGcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTEzNDI2YgotLS0gL2Rldi9udWxsCisrKyBiL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2ludGVyZmFjZS92aWV3cy9pbWcvRXN0aW1hdG9yMy5qcGcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL3ZpZXdzL2ltZy9MeWFwdW5vdi5qcGcgYi9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC9pbnRlcmZhY2Uvdmlld3MvaW1nL0x5YXB1bm92LmpwZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZTI3MzgwCi0tLSAvZGV2L251bGwKKysrIGIvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL3ZpZXdzL2ltZy9MeWFwdW5vdi5qcGcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL3ZpZXdzL2ltZy9QaGFzZVNwYWNlVmlldy5qcGcgYi9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC9pbnRlcmZhY2Uvdmlld3MvaW1nL1BoYXNlU3BhY2VWaWV3LmpwZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZGQ1YTBmCi0tLSAvZGV2L251bGwKKysrIGIvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL3ZpZXdzL2ltZy9QaGFzZVNwYWNlVmlldy5qcGcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL3ZpZXdzL2ltZy9TY2VuYXJpb0NvbXBhcmlzb24uanBnIGIvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL3ZpZXdzL2ltZy9TY2VuYXJpb0NvbXBhcmlzb24uanBnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc4MzczZWYKLS0tIC9kZXYvbnVsbAorKysgYi9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC9pbnRlcmZhY2Uvdmlld3MvaW1nL1NjZW5hcmlvQ29tcGFyaXNvbi5qcGcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL3ZpZXdzL2ltZy9TY2VuYXJpb0NvbXBhcmlzb25CLmpwZyBiL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2ludGVyZmFjZS92aWV3cy9pbWcvU2NlbmFyaW9Db21wYXJpc29uQi5qcGcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTU1YjViZAotLS0gL2Rldi9udWxsCisrKyBiL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2ludGVyZmFjZS92aWV3cy9pbWcvU2NlbmFyaW9Db21wYXJpc29uQi5qcGcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL3ZpZXdzL2ltZy9hY3RpdmVzaW11bGF0aW9uc3ZpZXcuanBnIGIvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL3ZpZXdzL2ltZy9hY3RpdmVzaW11bGF0aW9uc3ZpZXcuanBnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkyZjM5YjIKLS0tIC9kZXYvbnVsbAorKysgYi9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC9pbnRlcmZhY2Uvdmlld3MvaW1nL2FjdGl2ZXNpbXVsYXRpb25zdmlldy5qcGcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL3ZpZXdzL2ltZy9jb21wYXJzb25FcXVhdGlvbi5qcGcgYi9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC9pbnRlcmZhY2Uvdmlld3MvaW1nL2NvbXBhcnNvbkVxdWF0aW9uLmpwZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NWI2ZDllCi0tLSAvZGV2L251bGwKKysrIGIvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL3ZpZXdzL2ltZy9jb21wYXJzb25FcXVhdGlvbi5qcGcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL3ZpZXdzL2ltZy9jb250cm9sdmlldy5qcGcgYi9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC9pbnRlcmZhY2Uvdmlld3MvaW1nL2NvbnRyb2x2aWV3LmpwZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYjNlNjg1Ci0tLSAvZGV2L251bGwKKysrIGIvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL3ZpZXdzL2ltZy9jb250cm9sdmlldy5qcGcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL3ZpZXdzL2ltZy9jb250cm9sdmlldy5wbmcgYi9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC9pbnRlcmZhY2Uvdmlld3MvaW1nL2NvbnRyb2x2aWV3LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NzEwYzRhCi0tLSAvZGV2L251bGwKKysrIGIvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL3ZpZXdzL2ltZy9jb250cm9sdmlldy5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL3ZpZXdzL2ltZy9jc3YxLmpwZyBiL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2ludGVyZmFjZS92aWV3cy9pbWcvY3N2MS5qcGcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmQzZWMwYgotLS0gL2Rldi9udWxsCisrKyBiL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2ludGVyZmFjZS92aWV3cy9pbWcvY3N2MS5qcGcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL3ZpZXdzL2ltZy9jc3YyLmpwZyBiL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2ludGVyZmFjZS92aWV3cy9pbWcvY3N2Mi5qcGcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWQ2YzMyMAotLS0gL2Rldi9udWxsCisrKyBiL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2ludGVyZmFjZS92aWV3cy9pbWcvY3N2Mi5qcGcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL3ZpZXdzL2ltZy9jc3YzLmpwZyBiL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2ludGVyZmFjZS92aWV3cy9pbWcvY3N2My5qcGcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmEyZmEzMQotLS0gL2Rldi9udWxsCisrKyBiL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2ludGVyZmFjZS92aWV3cy9pbWcvY3N2My5qcGcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL3ZpZXdzL2ltZy9jc3Y0LmpwZyBiL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2ludGVyZmFjZS92aWV3cy9pbWcvY3N2NC5qcGcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWRjZDk4ZQotLS0gL2Rldi9udWxsCisrKyBiL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2ludGVyZmFjZS92aWV3cy9pbWcvY3N2NC5qcGcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL3ZpZXdzL2ltZy9jc3Y1LmpwZyBiL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2ludGVyZmFjZS92aWV3cy9pbWcvY3N2NS5qcGcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDFhZGU4YQotLS0gL2Rldi9udWxsCisrKyBiL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2ludGVyZmFjZS92aWV3cy9pbWcvY3N2NS5qcGcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL3ZpZXdzL2ltZy9kY21vZGVsc3BvcHVwLmpwZyBiL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2ludGVyZmFjZS92aWV3cy9pbWcvZGNtb2RlbHNwb3B1cC5qcGcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjE5YzdjYgotLS0gL2Rldi9udWxsCisrKyBiL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2ludGVyZmFjZS92aWV3cy9pbWcvZGNtb2RlbHNwb3B1cC5qcGcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL3ZpZXdzL2ltZy9kY3NjZW5hcmlvc3BvcHVwLmpwZyBiL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2ludGVyZmFjZS92aWV3cy9pbWcvZGNzY2VuYXJpb3Nwb3B1cC5qcGcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGYyMmFlZAotLS0gL2Rldi9udWxsCisrKyBiL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2ludGVyZmFjZS92aWV3cy9pbWcvZGNzY2VuYXJpb3Nwb3B1cC5qcGcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL3ZpZXdzL2ltZy9kZWNvcmF0b3Jzdmlldy5qcGcgYi9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC9pbnRlcmZhY2Uvdmlld3MvaW1nL2RlY29yYXRvcnN2aWV3LmpwZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zOTYxZTI1Ci0tLSAvZGV2L251bGwKKysrIGIvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL3ZpZXdzL2ltZy9kZWNvcmF0b3Jzdmlldy5qcGcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL3ZpZXdzL2ltZy9kaXNlYXNlc3ZpZXcuanBnIGIvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL3ZpZXdzL2ltZy9kaXNlYXNlc3ZpZXcuanBnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNjZTdkYWYKLS0tIC9kZXYvbnVsbAorKysgYi9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC9pbnRlcmZhY2Uvdmlld3MvaW1nL2Rpc2Vhc2Vzdmlldy5qcGcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL3ZpZXdzL2ltZy9lcnJvcl9sb2cucG5nIGIvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL3ZpZXdzL2ltZy9lcnJvcl9sb2cucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYyMmYwOWUKLS0tIC9kZXYvbnVsbAorKysgYi9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC9pbnRlcmZhY2Uvdmlld3MvaW1nL2Vycm9yX2xvZy5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL3ZpZXdzL2ltZy9lcnJvcmxvZ3ZpZXcuanBnIGIvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL3ZpZXdzL2ltZy9lcnJvcmxvZ3ZpZXcuanBnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIwOTc2NDEKLS0tIC9kZXYvbnVsbAorKysgYi9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC9pbnRlcmZhY2Uvdmlld3MvaW1nL2Vycm9ybG9ndmlldy5qcGcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL3ZpZXdzL2ltZy9nZW1hcDEuanBnIGIvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL3ZpZXdzL2ltZy9nZW1hcDEuanBnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJhMThlYmEKLS0tIC9kZXYvbnVsbAorKysgYi9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC9pbnRlcmZhY2Uvdmlld3MvaW1nL2dlbWFwMS5qcGcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL3ZpZXdzL2ltZy9ncmFwaHN2aWV3LmpwZyBiL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2ludGVyZmFjZS92aWV3cy9pbWcvZ3JhcGhzdmlldy5qcGcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTM4YmQ2MwotLS0gL2Rldi9udWxsCisrKyBiL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2ludGVyZmFjZS92aWV3cy9pbWcvZ3JhcGhzdmlldy5qcGcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL3ZpZXdzL2ltZy9ncmFwaHN2aWV3LnBuZyBiL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2ludGVyZmFjZS92aWV3cy9pbWcvZ3JhcGhzdmlldy5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGM3ODdhNAotLS0gL2Rldi9udWxsCisrKyBiL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2ludGVyZmFjZS92aWV3cy9pbWcvZ3JhcGhzdmlldy5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL3ZpZXdzL2ltZy9seWFwRXExLmpwZyBiL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2ludGVyZmFjZS92aWV3cy9pbWcvbHlhcEVxMS5qcGcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWE0MWZjYQotLS0gL2Rldi9udWxsCisrKyBiL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2ludGVyZmFjZS92aWV3cy9pbWcvbHlhcEVxMS5qcGcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL3ZpZXdzL2ltZy9seWFwRXEyLmpwZyBiL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2ludGVyZmFjZS92aWV3cy9pbWcvbHlhcEVxMi5qcGcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjYyZDI5NwotLS0gL2Rldi9udWxsCisrKyBiL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2ludGVyZmFjZS92aWV3cy9pbWcvbHlhcEVxMi5qcGcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL3ZpZXdzL2ltZy9seWFwRXEzLmpwZyBiL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2ludGVyZmFjZS92aWV3cy9pbWcvbHlhcEVxMy5qcGcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWQxMjU2YQotLS0gL2Rldi9udWxsCisrKyBiL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2ludGVyZmFjZS92aWV3cy9pbWcvbHlhcEVxMy5qcGcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL3ZpZXdzL2ltZy9tYXB2aWV3LmpwZyBiL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2ludGVyZmFjZS92aWV3cy9pbWcvbWFwdmlldy5qcGcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGIxZDA3OQotLS0gL2Rldi9udWxsCisrKyBiL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2ludGVyZmFjZS92aWV3cy9pbWcvbWFwdmlldy5qcGcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL3ZpZXdzL2ltZy9tYXB2aWV3LnBuZyBiL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2ludGVyZmFjZS92aWV3cy9pbWcvbWFwdmlldy5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2Q5MDEzZAotLS0gL2Rldi9udWxsCisrKyBiL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2ludGVyZmFjZS92aWV3cy9pbWcvbWFwdmlldy5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL3ZpZXdzL2ltZy9tYXB2aWV3Y29tYm8uanBnIGIvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL3ZpZXdzL2ltZy9tYXB2aWV3Y29tYm8uanBnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlkYzQ2ODQKLS0tIC9kZXYvbnVsbAorKysgYi9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC9pbnRlcmZhY2Uvdmlld3MvaW1nL21hcHZpZXdjb21iby5qcGcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL3ZpZXdzL2ltZy9tYXB2aWV3cG9wdXAuanBnIGIvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL3ZpZXdzL2ltZy9tYXB2aWV3cG9wdXAuanBnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIyODZiNTkKLS0tIC9kZXYvbnVsbAorKysgYi9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC9pbnRlcmZhY2Uvdmlld3MvaW1nL21hcHZpZXdwb3B1cC5qcGcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL3ZpZXdzL2ltZy9tYXB2aWV3cG9wdXBnYWluLmpwZyBiL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2ludGVyZmFjZS92aWV3cy9pbWcvbWFwdmlld3BvcHVwZ2Fpbi5qcGcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTE2YTBhOQotLS0gL2Rldi9udWxsCisrKyBiL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2ludGVyZmFjZS92aWV3cy9pbWcvbWFwdmlld3BvcHVwZ2Fpbi5qcGcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL3ZpZXdzL2ltZy9tYXB2aWV3cG9wdXBwcm9qZWN0aW9uLmpwZyBiL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2ludGVyZmFjZS92aWV3cy9pbWcvbWFwdmlld3BvcHVwcHJvamVjdGlvbi5qcGcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDNmOGNkZgotLS0gL2Rldi9udWxsCisrKyBiL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2ludGVyZmFjZS92aWV3cy9pbWcvbWFwdmlld3BvcHVwcHJvamVjdGlvbi5qcGcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL3ZpZXdzL2ltZy9tYXB2aWV3c2NhbGUuanBnIGIvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL3ZpZXdzL2ltZy9tYXB2aWV3c2NhbGUuanBnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFlZWNlNDYKLS0tIC9kZXYvbnVsbAorKysgYi9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC9pbnRlcmZhY2Uvdmlld3MvaW1nL21hcHZpZXdzY2FsZS5qcGcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL3ZpZXdzL2ltZy9tb2RlbHN2aWV3LmpwZyBiL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2ludGVyZmFjZS92aWV3cy9pbWcvbW9kZWxzdmlldy5qcGcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTEwZDdlYQotLS0gL2Rldi9udWxsCisrKyBiL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2ludGVyZmFjZS92aWV3cy9pbWcvbW9kZWxzdmlldy5qcGcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL3ZpZXdzL2ltZy9tb2RlbHN2aWV3LnBuZyBiL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2ludGVyZmFjZS92aWV3cy9pbWcvbW9kZWxzdmlldy5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzE3N2FiMQotLS0gL2Rldi9udWxsCisrKyBiL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2ludGVyZmFjZS92aWV3cy9pbWcvbW9kZWxzdmlldy5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL3ZpZXdzL2ltZy9wcm9qZWN0dmlldy5qcGcgYi9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC9pbnRlcmZhY2Uvdmlld3MvaW1nL3Byb2plY3R2aWV3LmpwZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYjEyMTljCi0tLSAvZGV2L251bGwKKysrIGIvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL3ZpZXdzL2ltZy9wcm9qZWN0dmlldy5qcGcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL3ZpZXdzL2ltZy9wcm9qZWN0dmlldy5wbmcgYi9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC9pbnRlcmZhY2Uvdmlld3MvaW1nL3Byb2plY3R2aWV3LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZmZjYWFmCi0tLSAvZGV2L251bGwKKysrIGIvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL3ZpZXdzL2ltZy9wcm9qZWN0dmlldy5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL3ZpZXdzL2ltZy9wcm9wZXJ0aWVzdmlldy5qcGcgYi9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC9pbnRlcmZhY2Uvdmlld3MvaW1nL3Byb3BlcnRpZXN2aWV3LmpwZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYzJmNDQyCi0tLSAvZGV2L251bGwKKysrIGIvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL3ZpZXdzL2ltZy9wcm9wZXJ0aWVzdmlldy5qcGcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL3ZpZXdzL2ltZy9wcm9wZXJ0aWVzdmlldy5wbmcgYi9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC9pbnRlcmZhY2Uvdmlld3MvaW1nL3Byb3BlcnRpZXN2aWV3LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jM2JmNDA0Ci0tLSAvZGV2L251bGwKKysrIGIvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL3ZpZXdzL2ltZy9wcm9wZXJ0aWVzdmlldy5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL3ZpZXdzL2ltZy9yZXBvcnRQcmVmZXJlbmNlcy5qcGcgYi9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC9pbnRlcmZhY2Uvdmlld3MvaW1nL3JlcG9ydFByZWZlcmVuY2VzLmpwZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZmU0M2MwCi0tLSAvZGV2L251bGwKKysrIGIvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL3ZpZXdzL2ltZy9yZXBvcnRQcmVmZXJlbmNlcy5qcGcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL3ZpZXdzL2ltZy9zY2VuYXJpb3N2aWV3LmpwZyBiL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2ludGVyZmFjZS92aWV3cy9pbWcvc2NlbmFyaW9zdmlldy5qcGcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTgxNTk1ZAotLS0gL2Rldi9udWxsCisrKyBiL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2ludGVyZmFjZS92aWV3cy9pbWcvc2NlbmFyaW9zdmlldy5qcGcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL3ZpZXdzL2ltZy9zY2VuYXJpb3N2aWV3LnBuZyBiL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2ludGVyZmFjZS92aWV3cy9pbWcvc2NlbmFyaW9zdmlldy5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTc4MzA4ZQotLS0gL2Rldi9udWxsCisrKyBiL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2ludGVyZmFjZS92aWV3cy9pbWcvc2NlbmFyaW9zdmlldy5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL3ZpZXdzL2ltZy9zZWxlY3RyZXBvcnRzLmpwZyBiL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2ludGVyZmFjZS92aWV3cy9pbWcvc2VsZWN0cmVwb3J0cy5qcGcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGRjMDUwYwotLS0gL2Rldi9udWxsCisrKyBiL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2ludGVyZmFjZS92aWV3cy9pbWcvc2VsZWN0cmVwb3J0cy5qcGcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL3ZpZXdzL2ltZy9zZXF1ZW5jZXJzdmlldy5qcGcgYi9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC9pbnRlcmZhY2Uvdmlld3MvaW1nL3NlcXVlbmNlcnN2aWV3LmpwZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43M2M1MmE1Ci0tLSAvZGV2L251bGwKKysrIGIvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL3ZpZXdzL2ltZy9zZXF1ZW5jZXJzdmlldy5qcGcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL3ZpZXdzL2ltZy90aW1lc2VyaWVzdmlldy5qcGcgYi9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC9pbnRlcmZhY2Uvdmlld3MvaW1nL3RpbWVzZXJpZXN2aWV3LmpwZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43Y2U2YjcwCi0tLSAvZGV2L251bGwKKysrIGIvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL3ZpZXdzL2ltZy90aW1lc2VyaWVzdmlldy5qcGcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL3ZpZXdzL2x5YXB1bm92dmlldy5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL3ZpZXdzL2x5YXB1bm92dmlldy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNhNWY0MjQKLS0tIC9kZXYvbnVsbAorKysgYi9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC9pbnRlcmZhY2Uvdmlld3MvbHlhcHVub3Z2aWV3Lmh0bWwKQEAgLTAsMCArMSw3OCBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMCBUcmFuc2l0aW9uYWwvL0VOIj4KKworPGh0bWwgeG1sbnM6dj0idXJuOnNjaGVtYXMtbWljcm9zb2Z0LWNvbTp2bWwiIHhtbG5zOm89InVybjpzY2hlbWFzLW1pY3Jvc29mdC1jb206b2ZmaWNlOm9mZmljZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnL1RSL1JFQy1odG1sNDAiPgorPGhlYWQ+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1pc28tODg1OS0xIj4KKworPHRpdGxlPmhlbHA8L3RpdGxlPgorPC9oZWFkPgorCis8Ym9keT4KKzxoMT5MeWFwdW5vdiBWaWV3PC9oMT4KKzxwPlRoZSA8ZW0+THlhcHVub3YgVmlldzwvZW0+IGFsbG93cyBhIHVzZXIgdG8gYXBwbHkgdG9vbHMgZGV2ZWxvcGVkIHRvIGFuYWx5emUKK2R5bmFtaWNhbCBzeXN0ZW1zLiBUaGUgUk1TIGNvbXBhcmlzb24gdmlldyBpcyBhIHVzZWZ1bCBtZWFzdXJlIG9mIHRoZSBhdmVyYWdlCitkaWZmZXJlbmNlIGJldHdlZW4gdHdvIHNjZW5hcmlvcy4gSG93ZXZlciwgaWYgYSBtb2RlbCBhbmQgcmVmZXJlbmNlIHNjZW5hcmlvCitlYWNoIGRlc2NyaWJlIGFuIGVwaWRlbWljIHRoYXQgYmVnaW5zIGFuZCBlbmQgaW4gdGhlIHNhbWUgc3RhdGUgKHplcm8KK2luZmVjdGlvdXMpLCB0aGUgUk1TIGVycm9yIHdpbGwgZXZlbnR1YWxseSBmYWxsJm5ic3A7IHRvIHplcm8gYXMgYSBmdW5jdGlvbiBvZgordGltZSwgZXZlbiBpbiBjYXNlIG9mIGEgJiM4MjIwO2JhZCYjODIyMTsgbW9kZWwuIEluIGFkZGl0aW9uIHRvIG1lYXN1cmluZyB0aGUgYXZlcmFnZSBlcnJvciwKK2l0IGlzIHVzZWZ1bCB0byBsb29rIGZvciBvdGhlciBtZWFzdXJlcyB0aGF0IG1pZ2h0IHByb3ZpZGUgYSAmIzgyMjA7ZmluZ2VycHJpbnQmIzgyMjE7IGZvcgordGhlIHNwYXRpb3RlbXBvcmFsIGR5bmFtaWNzIG9mIGFuIGluZmVjdGlvdXMgZGlzZWFzZS4gTGlrZSBtYW55IGR5bmFtaWNhbAorc3lzdGVtcywgaW5mZWN0aW91cyBkaXNlYXNlIGlzIGEgcHJvY2VzcyBvZiBtYW55IHZhcmlhYmxlcy4gSG93ZXZlciwgaXQgaXMgb2Z0ZW4KK3Bvc3NpYmxlIHRvIGNhcHR1cmUgdGhlIGVzc2VudGlhbCBkeW5hbWljcyBieSBsb29raW5nIGF0IGp1c3QgYSBmZXcgc3lzdGVtCit2YXJpYWJsZXMgaW4gYW4gYXBwcm9wcmlhdGUgcGhhc2Ugc3BhY2UuJm5ic3A7IEluIGl0cyBtb3N0IGdlbmVyYWwgZm9ybWFsaXNtLCBhbnkKK2R5bmFtaWNhbCBzeXN0ZW0gaXMgZGVmaW5lZCBieSBhIGZpeGVkIHNldCBvZiBlcXVhdGlvbnMgdGhhdCBnb3Zlcm4gdGhlIHRpbWUKK2RlcGVuZGVuY2Ugb2YgdGhlIHN5c3RlbSYjODIxNztzIHN0YXRlIHZhcmlhYmxlcy4gVGhlIHN0YXRlIHZhcmlhYmxlcyBhdCBzb21lIGluc3RhbnQKK2luIHRpbWUgZGVmaW5lIGEgcG9pbnQgaW4gcGhhc2Ugc3BhY2UuIEEgU0VJUiBtb2RlbCBkZWZpbmVzIGEgZm91ciBkaW1lbnNpb25hbAorcGhhc2Ugc3BhY2UuIEFuIFNJIG1vZGVsIGRlZmluZXMgYSB0d28gZGltZW5zaW9uYWwgc3BhY2UuIEV4YW1pbmluZyBhIHJlZHVjZWQKK3NldCBvZiBkaW1lbnNpb24gbWF5IGJlIHRob3VnaHQgb2YgYXMgdGFraW5nIHNsaWNlIHRocm91Z2ggcGhhc2Ugc3BhY2UgKGZvcgorZXhhbXBsZSBpbiB0aGUgU0kgcGxhbmUpLgorPHAgY2xhc3M9Ik1zb05vcm1hbCIgc3R5bGU9InRleHQtaW5kZW50OjExLjVwdCI+QXQgdGhlIHN0YXRlIG9mIHRoZSBzeXN0ZW0KK2NoYW5nZXMgd2l0aCB0aW1lLCB0aGUgcG9pbnQgKFModCksIEkodCkpIGluIHBoYXNlIHNwYWNlIGRlZmluZXMgYSA8aT50cmFqZWN0b3J5PC9pPgoraW4gdGhlIFNJIHBsYW5lLiBDb25zaWRlciBhbiBlcGlkZW1pYyB0aGF0IGJlZ2lucyB3aXRoIG9uZSBpbmZlY3Rpb3VzIHBlcnNvbiBhbmQKK3ZpcnR1YWxseSB0aGUgZW50aXJlIHBvcHVsYXRpb24gc3VzY2VwdGlibGUgYXQgdD0wLCZuYnNwOyBTKDApIH4gMS4gVGhlIHRyYWplY3RvcnkKK3dpbGwgYmVnaW4gYXQgdGltZSB6ZXJvIGFsb25nIHRoZSBTIGF4aXMgbmVhciAxLiBBcyB0aGUgZGlzZWFzZSBzcHJlYWRzLCB0aGUKK3N1c2NlcHRpYmxlIHBvcHVsYXRpb24gKFMpIHdpbGwgZGVjcmVhc2UgYW5kIHRoZSBpbmZlY3Rpb3VzIHBvcHVsYXRpb24gKEkpIHdpbGwKK2luY3JlYXNlLiBUaGUgZGV0YWlsZWQgc2hhcGUgb2YgdGhlIHRoaXMgdHJhamVjdG9yeSB3aWxsIGRlcGVuZCBvbiB0aGUgdGltZSBpdAordGFrZXMgZm9yIHRoZSBkaXNlYXNlIHRvIHNwcmVhZCB0byBkaWZmZXJlbnQgcG9wdWxhdGlvbiBjZW50ZXJzLCBhcyB3ZWxsIGFzIHRoZQorKHN1c2NlcHRpYmxlKSBwb3B1bGF0aW9uIGRlbnNpdHkgZnVuY3Rpb24uIFRoZSBwZWFrcyBhbmQgdmFsbGV5cyBhbG9uZyB0aGUKK3RyYWplY3RvcnkgaW4gU0kgcGhhc2Ugc3BhY2UgcHJvdmVkIGEgc2lnbmF0dXJlIG9yIGZpbmdlcnByaW50IGZvciBhbiBlcGlkZW1pYwordGhlIHNoYXBlIG9mIHdoaWNoIGRlcGVuZHMgb24gdGhlIGRpc2Vhc2UsIHRoZSBkaXNlYXNlIHZlY3RvcnMsIHRoZSBwb3B1bGF0aW9uCitkaXN0cmlidXRpb24sIGV0Yy4gVGhlIG1hdGhlbWF0aWNzIG9mIGR5bmFtaWNhbCBzeXN0ZW1zIHByb3ZpZGUgdXMgd2l0aCBhCitmb3JtYWxpc20gdG8gY29tcGFyZSB0cmFqZWN0b3JpZXMgaW4gYSBwaGFzZSBzcGFjZS4gR2l2ZW4gYSBzaW5nbGUgc2V0IG9mIHJ1bGVzCisoZS5nLiwgYSBkaXNlYXNlIG1vZGVsKSwgdHdvIHNpbXVsYXRpb25zIHRoYXQgYmVnaW4gaW5maW5pdGVzaW1hbGx5IGNsb3NlCit0b2dldGhlciBpbiBwaGFzZSBzcGFjZSBtYXkgZXZvbHZlIGRpZmZlcmVudCBpbiB0aW1lIGFuZCBzcGFjZS4gVGhpcyBzZXBhcmF0aW9uCitpbiBwaGFzZSBzcGFjZSBjYW4gYmUgbWVhc3VyZSBxdWFudGl0YXRpdmVseS4gPC9wPgorPHAgY2xhc3M9Ik1zb05vcm1hbCIgc3R5bGU9InRleHQtaW5kZW50OjExLjVwdCI+VGhlIFZlY3RvcjwvcD4KKzxwIGNsYXNzPSJNc29Ob3JtYWwiIHN0eWxlPSJ0ZXh0LWluZGVudDoxMS41cHQiIGFsaWduPSJjZW50ZXIiPiZuYnNwOzxzcGFuIHN0eWxlPSJmb250LXNpemU6Cis5LjBwdCI+PGltZyBib3JkZXI9IjAiIHNyYz0iaW1nL2x5YXBFcTIuanBnIiB3aWR0aD0iMTQ3IiBoZWlnaHQ9IjM5Ij48L3NwYW4+IDwvcD4KKzxwIGNsYXNzPSJNc29Ob3JtYWwiIHN0eWxlPSJ0ZXh0LWluZGVudDoxMS41cHQiPmRlZmluZXMgYSB0cmFqZWN0b3J5IGluIFNJIHNwYWNlLiBUaGUgaW5pdGlhbCBzZXBhcmF0aW9uIGF0Cit0aW1lIHplcm8gYmUgZGVmaW5lZCBhcyA8L3A+Cis8cCBjbGFzcz0iTXNvTm9ybWFsIiBzdHlsZT0idGV4dC1pbmRlbnQ6MTEuNXB0IiBhbGlnbj0iY2VudGVyIj4KKzxpbWcgYm9yZGVyPSIwIiBzcmM9ImltZy9seWFwRXEzLmpwZyIgd2lkdGg9IjY2IiBoZWlnaHQ9IjM4Ij4uCis8L3A+Cis8cCBjbGFzcz0iTXNvTm9ybWFsIiBzdHlsZT0idGV4dC1pbmRlbnQ6MTEuNXB0Ij5UaGUgcmF0ZSBvZiBzZXBhcmF0aW9uIG9mIHR3byB0cmFqZWN0b3JpZXMgaW4gcGhhc2Ugc3BhY2Ugd2lsbCBvZnRlbiBvYmV5IHRoZQorZXF1YXRpb248L3A+Cis8cCBjbGFzcz0iTXNvTm9ybWFsIiBhbGlnbj0iY2VudGVyIiBzdHlsZT0idGV4dC1hbGlnbjpjZW50ZXI7dGV4dC1pbmRlbnQ6MTEuNXB0Ij4KKzxpbWcgYm9yZGVyPSIwIiBzcmM9ImltZy9seWFwRXExLmpwZyIgd2lkdGg9IjIzNCIgaGVpZ2h0PSI0OCI+PC9wPgorPHAgY2xhc3M9Ik1zb05vcm1hbCIgc3R5bGU9InRleHQtaW5kZW50OjBpbiI+Jm5ic3A7d2hlcmUKKzxzcGFuIHN0eWxlPSJmb250LWZhbWlseTpTeW1ib2wiPmwgPC9zcGFuPmlzIHRoZSBMeWFwdW5vdiBFeHBvbmVudC4gVGhpcworZXhwb25lbnQgaXMgYSBjaGFyYWN0ZXJpc3RpYyBvZiB0aGUgZHluYW1pY2FsIHN5c3RlbSB0aGF0IGRlZmluZXMgdGhlIHJhdGUgb2YKK3NlcGFyYXRpb24gb2YgaW5maW5pdGVzaW1hbGx5IGNsb3NlIHRyYWplY3RvcmllcyBpbiBwaGFzZSBzcGFjZS4gPC9wPgorPHA+VG8gdXNlIHRoZSBMeWFwdW5vdiB2aWV3OjxvbD4KKwk8bGk+RW50ZXIgdGhlIDxhIGhyZWY9Ii4uL3BlcnNwZWN0aXZlcy9hbmFseXNpcy5odG1sIj5BbmFseXNpcyBQZXJzcGVjdGl2ZTwvYT48L2xpPgorCTxsaT5DbGljayBvbiB0aGUgTHlhcHVub3YgVGFiPC9saT4KKwk8bGk+VXNlIHRoZSBTZWxlY3QgRm9sZGVyIGJ1dHRvbnMgdG8gY2hvc2UgdGhlIGZvbGRlcnMgY29udGFpbmluZyB0aGUgZGF0YQorCXlvdSB3aXNoIHRvIGNvbXBhcmUuIFRoZSBmaWxlcyBzaG91bGQgaGF2ZSB0aGUgZm9sbG93aW5nCisJPGEgaHJlZj0iY3N2bG9nZ2Vydmlldy5odG1sIj4mbmJzcDtmb3JtYXQuPC9hPjwvbGk+CisJPGxpPkNsaWNrICZxdW90O0NvbXB1dGUgTHlhcHVub3YgRXhwb25lbnQmcXVvdDs8L2xpPgorCTxsaT5Ud28gY2hhcnRzIHdpbGwgYXBwZWFyLCB0aGUgbGVmdCBoYW5kIGNoYXJ0IHdpbGwgc2hvdyB0aGUgdHJhamVjdG9yaWVzCisJaW4gcGhhc2Ugc3BhY2UgKEkgdnMuIFMpIGZvciB0aGUgdHdvIGRhdGEgc2V0cy4gVGhlIHJpZ2h0IGhhbmQgY2hhcnQgd2lsbAorCXNob3cgdGhlIExvZyBvZiB0aGUgaW50ZWdyYXRlZDxicj4KKwlkaWZmZXJlbmNlIGJldHdlZW4gdGhlIHR3byB0cmFqZWN0b3JpZXMgYXMgYSBmdW5jdGlvbiBvZiB0aW1lLiBUaGUgZXhwb25lbnQKKwlpcyB0aGUgaW5pdGlhbCBzbG9wZSBvZiB0aGlzIHRpbWUgdmFyeWluZyBkaWZmZXJlbmNlIHBsb3R0ZWQgb24gYSBzZW1pLWxvZworCXBsb3QuPC9saT4KKzwvb2w+Cis8L3A+CismbmJzcDs8cD48aW1nIGJvcmRlcj0iMCIgc3JjPSJpbWcvTHlhcHVub3YuanBnIiB3aWR0aD0iMTAwMCIgaGVpZ2h0PSI2MDgiPiA8L3A+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC9pbnRlcmZhY2Uvdmlld3MvbWFwdmlldy5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL3ZpZXdzL21hcHZpZXcuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNjAwODM5Ci0tLSAvZGV2L251bGwKKysrIGIvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL3ZpZXdzL21hcHZpZXcuaHRtbApAQCAtMCwwICsxLDM5IEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wIFRyYW5zaXRpb25hbC8vRU4iPgorCis8aHRtbD4KKzxoZWFkPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9aXNvLTg4NTktMSI+Cis8dGl0bGU+aGVscDwvdGl0bGU+Cis8L2hlYWQ+CisKKzxib2R5PgorPGgxPk1hcCBWaWV3PC9oMT4KKzxwPlRoZSA8ZW0+TWFwIFZpZXc8L2VtPiBkaXNwbGF5cyBnZW9ncmFwaGljIGltYWdlcyB0aGF0IHJlZmxlY3QgdGhlIHN0YXRlIG9mCithbiBhY3RpdmUgU2ltdWxhdGlvbi4gPGltZyBzcmM9ImltZy9tYXB2aWV3LnBuZyIgLz4KKzxwPlRoZSBzdGF0ZSBpbmZvcm1hdGlvbiBkaXNwbGF5ZWQgaW4gdGhlIG1hcCB2aWV3IGRpcmVjdGx5Citjb3JyZXNwb25kcyB0byB0aGUgdmFsdWVzIHVwZGF0ZWQgYnkgb25lIG9mIHRoZSA8YQorCWhyZWY9Ii4uLy4uL2NvbmNlcHRzL21vZGVsaW5nZnJhbWV3b3JrLmh0bWwjZGVjb3JhdG9yIj4gRGVjb3JhdG9yczwvYT4KK2luIHRoZSBTaW11bGF0aW9uLiBUaGUgcGFydGljdWxhciA8YQorCWhyZWY9Ii4uLy4uL2NvbmNlcHRzL21vZGVsaW5nZnJhbWV3b3JrLmh0bWwjZGVjb3JhdG9yIj4gRGVjb3JhdG9yPC9hPgoraXMgc2VsZWN0ZWQgYnkgYSAiY29tYm8gYm94IiBpbiB0aGUgbG93ZXIgbGVmdCBvZiB0aGUgdmlldy4gRWFjaCA8YQorCWhyZWY9Ii4uLy4uL2NvbmNlcHRzL21vZGVsaW5nZnJhbWV3b3JrLmh0bWwjZGVjb3JhdG9yIj4gRGVjb3JhdG9yPC9hPgordXBkYXRlcyBhIG51bWJlciBvZiBwcm9wZXJ0aWVzIChpLmUuLCB2YWx1ZXMgdGhhdCBkZWZpbmUgdGhlIHN0YXRlIG9mCit0aGUgU2ltdWxhdGlvbikuIFRoZSBNYXAgdmlldyBjYW4gZGlzcGxheSB0aGUgInJlbGF0aXZlIiB2YWx1ZXMgb2YgdGhlc2UKK3Byb3BlcnRpZXMgd2l0aCBkaWZmZXJlbnQgaW50ZW5zaXRpZXMvY29sb3JzLiBUaGUgc3BlY2lmaWMgcHJvcGVydHkgaXMKK3NlbGVjdGVkIGJ5IHRoZSBjb21ibyBib3ggYmVuZWF0aCB0aGUgb25lIHRoYXQgc2VsZWN0cyB0aGUgPGEKKwlocmVmPSIuLi8uLi9jb25jZXB0cy9tb2RlbGluZ2ZyYW1ld29yay5odG1sI2RlY29yYXRvciI+IERlY29yYXRvcjwvYT4uPC9wPgorPHA+PGltZyBzcmM9ImltZy9tYXB2aWV3Y29tYm8uanBnIiAvPgorPHA+VGhlIGltYWdlIGNhbiBiZSBwYW5uZWQgYnkgaG9sZGluZyB0aGUgbGVmdCBtb3VzZSBidXR0b24gZG93biBhbmQKK2RyYWdnaW5nIHRoZSBjdXJzb3IuPC9wPgorPGgyPkNvbnRleHQgTWVudTwvaDI+Cis8cD5BIHBvcC11cCBjb250ZXh0IG1lbnUgaXMgYXZhaWxhYmxlIGJ5IHJpZ2h0LWNsaWNraW5nIG9uIHRoZQoraW1hZ2UuPC9wPgorPHA+Cis8aW1nIHNyYz0iaW1nL21hcHZpZXdwb3B1cC5qcGciIC8+Cis8L3A+Cis8cD5UaGVyZSBpcyBhIHN1Yi1tZW51IGZvciBzcGVjaWZ5aW5nIHRoZSAiZ2FpbiBmYWN0b3IiIHRvIHVzZQord2hlbiBkaXNwbGF5aW5nIHZhbHVlcy4gVGhlIGdhaW4gZmFjdG9yIHNjYWxlcyB0aGUgdmFsdWVzIG9mIHRoZSBwcm9wZXJ0aWVzIHNvIHRoYXQgc21hbGwKK3ZhbHVlcyBjYW4gYmUgdmlzdWFsaXplZC4gPGJyLz4KKzxpbWcgc3JjPSJpbWcvbWFwdmlld3BvcHVwZ2Fpbi5qcGciIC8+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC9pbnRlcmZhY2Uvdmlld3MvbW9kZWxzdmlldy5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL3ZpZXdzL21vZGVsc3ZpZXcuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xODFlZWY5Ci0tLSAvZGV2L251bGwKKysrIGIvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL3ZpZXdzL21vZGVsc3ZpZXcuaHRtbApAQCAtMCwwICsxLDI2IEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wIFRyYW5zaXRpb25hbC8vRU4iPgorCis8aHRtbD4KKzxoZWFkPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9aXNvLTg4NTktMSI+Cis8dGl0bGU+aGVscDwvdGl0bGU+Cis8L2hlYWQ+CisKKzxib2R5PgorPGgxPk1vZGVscyBWaWV3PC9oMT4KKzxwPlRoZSA8ZW0+TW9kZWxzIFZpZXc8L2VtPiBkaXNwbGF5cyB0aGUgPGEKKwlocmVmPSIuLi8uLi9jb25jZXB0cy9tb2RlbGluZ2ZyYW1ld29yay5odG1sI21vZGVsIj4gTW9kZWxzPC9hPiB0aGF0IGFyZQorYXZhaWxhYmxlIGZvciB1c2UgaW4gdXNlciBkZWZpbmVkIDxhCisJaHJlZj0iLi4vLi4vY29uY2VwdHMvbW9kZWxpbmdmcmFtZXdvcmsuaHRtbCNzY2VuYXJpbyI+IFNjZW5hcmlvczwvYT4uCitUaGUgYXZhaWxhYmxlIDxhIGhyZWY9Ii4uLy4uL2NvbmNlcHRzL21vZGVsaW5nZnJhbWV3b3JrLmh0bWwjbW9kZWwiPgorTW9kZWxzPC9hPiBhcmUgb3JnYW5pemVkIGluIGEgdHJlZS4gVGhvc2UgbGlzdGVkIHVuZGVyICJTVEVNIiBhcmUgYnVpbHQtaW4KK3RvIFNURU0uIFRoZXJlIG1heSBiZSBvdGhlcnMgcHJvdmlkZWQgYnkgdGhpcmQtcGFydGllcy4gVGhlc2UgcHJlZGVmaW5lZAorbW9kZWxzIHByb3ZpZGUgYW4gaW52YWx1YWJsZSAianVtcC1zdGFydCIgaW4gdGhlIHByb2Nlc3Mgb2YgZGVmaW5pbmcKK290aGVyIDxhIGhyZWY9Ii4uLy4uL2NvbmNlcHRzL21vZGVsaW5nZnJhbWV3b3JrLmh0bWwjbW9kZWwiPiBNb2RlbHM8L2E+LjwvcD4KKzxwPlRoZSB2aWV3IHN1cHBvcnRzICJkcmFnIiBzdWNoIHRoYXQgYSA8YQorCWhyZWY9Ii4uLy4uL2NvbmNlcHRzL21vZGVsaW5nZnJhbWV3b3JrLmh0bWwjbW9kZWwiPiBNb2RlbDwvYT4gY2FuIGJlCitkcmFnZ2VkIGZyb20gdGhpcyB2aWV3IGFuZCAiZHJvcHBlZCIgaW50byBhbiBvcGVuIE1vZGVsIG9yIDxhCisJaHJlZj0iLi4vZWRpdG9ycy9zY2VuYXJpb2VkaXRvci5odG1sIj5TY2VuYXJpbyBlZGl0b3I8L2E+LjwvcD4KKzxpbWcgc3JjPSJpbWcvbW9kZWxzdmlldy5wbmciIC8+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC9pbnRlcmZhY2Uvdmlld3MvcHJvamVjdHZpZXcuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2ludGVyZmFjZS92aWV3cy9wcm9qZWN0dmlldy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA0OTE4NGYKLS0tIC9kZXYvbnVsbAorKysgYi9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC9pbnRlcmZhY2Uvdmlld3MvcHJvamVjdHZpZXcuaHRtbApAQCAtMCwwICsxLDIzIEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wIFRyYW5zaXRpb25hbC8vRU4iPgorCis8aHRtbD4KKzxoZWFkPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9aXNvLTg4NTktMSI+Cis8dGl0bGU+aGVscDwvdGl0bGU+Cis8L2hlYWQ+CisKKzxib2R5PgorPGgxPlNURU0gUHJvamVjdCBFeHBsb3JlciBWaWV3PC9oMT4KKzxwPlRoZSA8ZW0+U1RFTSBQcm9qZWN0IEV4cGxvcmVyIFZpZXc8L2VtPiBkaXNwbGF5cyB0aGUgU1RFTQorcHJvamVjdHMgYW5kIHRoZWlyIGNvbnRlbnRzLiBBIHByb2plY3QgaXMgYSBjb2xsZWN0aW9uIG9mIDxhCisJaHJlZj0iLi4vLi4vY29uY2VwdHMvbW9kZWxpbmdmcmFtZXdvcmsuaHRtbCNkZWNvcmF0b3IiPiBEZWNvcmF0b3JzPC9hPiwKKzxhIGhyZWY9Ii4uLy4uL2NvbmNlcHRzL21vZGVsaW5nZnJhbWV3b3JrLmh0bWwjZ3JhcGgiPiBHcmFwaHM8L2E+LCA8YQorCWhyZWY9Ii4uLy4uL2NvbmNlcHRzL21vZGVsaW5nZnJhbWV3b3JrLmh0bWwjbW9kZWwiPiBNb2RlbHM8L2E+LCA8YQorCWhyZWY9Ii4uLy4uL2NvbmNlcHRzL21vZGVsaW5nZnJhbWV3b3JrLmh0bWwjc2NlbmFyaW8iPiBTY2VuYXJpb3M8L2E+CithbmQgU2VxdWVuY2VycyB0aGF0IGFyZSB0eXBpY2FsbHkgZm9jdXNlZCBvbiBvbmUgcGFydGljdWxhciBzaW11bGF0aW9uCithcmVhLCBmb3IgaW5zdGFuY2UsIHRoZSBzcHJlYWQgb2YgYSBwYXJ0aWN1bGFyIGRpc2Vhc2UuPC9wPgorPHA+UmlnaHQtY2xpY2tpbmcgb24gaXRlbXMgaW4gdGhlIHZpZXcgd2lsbCBicmluZyB1cCBhIHBvcC11cAorY29udGV4dCBtZW51LjwvcD4KKzxpbWcgc3JjPSJpbWcvcHJvamVjdHZpZXcucG5nIiAvPgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL3ZpZXdzL3Byb3BlcnRpZXN2aWV3Lmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC9pbnRlcmZhY2Uvdmlld3MvcHJvcGVydGllc3ZpZXcuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NGQwYzljCi0tLSAvZGV2L251bGwKKysrIGIvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL3ZpZXdzL3Byb3BlcnRpZXN2aWV3Lmh0bWwKQEAgLTAsMCArMSwxOCBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMCBUcmFuc2l0aW9uYWwvL0VOIj4KKworPGh0bWw+Cis8aGVhZD4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PWlzby04ODU5LTEiPgorPHRpdGxlPmhlbHA8L3RpdGxlPgorPC9oZWFkPgorCis8Ym9keT4KKzxoMT5Qcm9wZXJ0aWVzIFZpZXc8L2gxPgorPHA+VGhlIDxlbT5Qcm9wZXJ0aWVzIFZpZXc8L2VtPiBhbGxvd3MgeW91IHRvIGVkaXQgdGhlIHByb3BlcnRpZXMgb2YgY29tcG9uZW50cyBpbiB5b3VyIHNjZW5hcmlvLCBzdWNoIGFzIGRpc2Vhc2UKK21vZGVscywgaW5mZWN0b3JzIGFuZCBzZXF1ZW5jZXJzLiBBcyBzaG93biBpbiB0aGUgZmlndXJlIGJlbG93LCBhZnRlciBzZWxlY3RpbmcgYSBkaXNlYXNlIG1vZGVsIHdpdGggdGhlIAorcHJvcGVydGllcyB2aWV3IG9wZW4sIHRoZSBwcm9wZXJ0aWVzIG9mIHRoZSBtb2RlbCBpcyBzaG93bi4gSXQgaXMgcG9zc2libGUgdG8gY2hhbmdlIGFueSBvZiB0aGUgcGFyYW1ldGVycyAKK2luIHRoZSBkaXNlYXNlIG1vZGVsIGJ5IGxlZnQtY2xpY2tpbmcgb24gaXRzIHZhbHVlLiBBZnRlciBjaGFuZ2luZyBvbmUgb3IgbW9yZSBwYXJhbWV0ZXJzLCByZW1lbWJlciB0byBzYXZlCit0aGUgZGlzZWFzZSBtb2RlbCAoQ3RybCtTKSB0byBwaWNrIHVwIHRoZSBjaGFuZ2VzIHRoZSBuZXh0IHRpbWUgeW91IHJ1biBhIHNpbXVsYXRpb24uICAKKzxpbWcgc3JjPSJpbWcvcHJvcGVydGllc3ZpZXcucG5nIiAvPgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL3ZpZXdzL3JlcG9ydHZpZXcuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2ludGVyZmFjZS92aWV3cy9yZXBvcnR2aWV3Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWEzZjkwMgotLS0gL2Rldi9udWxsCisrKyBiL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2ludGVyZmFjZS92aWV3cy9yZXBvcnR2aWV3Lmh0bWwKQEAgLTAsMCArMSwxODQgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAgVHJhbnNpdGlvbmFsLy9FTiI+CisKKzxodG1sPgorPGhlYWQ+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1pc28tODg1OS0xIj4KKzx0aXRsZT5oZWxwPC90aXRsZT4KKzwvaGVhZD4KKworPGJvZHk+Cis8aDE+UmVwb3J0IFZpZXc8L2gxPgorPHA+PGZvbnQgc2l6ZT0iMiI+VGhlIGN1cnJlbnQgZGlzdHJpYnV0aW9uIG9mIFNURU0gcHJvdmlkZXMgdXNlcnMgd2l0aAorY29uZmlndXJhYmxlIHJ1biB0aW1lIFJlcG9ydCBWaWV3cyB3aXRoIHdoaWNoIHRvIHN0dWR5IHJ1bm5pbmcgc2ltdWxhdGlvbnMuIEluCit0aGUgY3VycmVudCBkaXN0cmlidXRpb24gdGhlIGF2YWlsYWJsZSByZXBvcnRzIGFyZTo8L2ZvbnQ+PHVsPgorCTxsaT48Zm9udCBzaXplPSIyIj5UaGUgVGltZSBTZXJpZXMgVmlldzwvZm9udD48L2xpPgorCTxsaT48Zm9udCBzaXplPSIyIj5UaGUgUGhhc2UgU3BhY2UgVmlldzwvZm9udD48L2xpPgorCTwvdWw+CisJPHA+PGZvbnQgc2l6ZT0iMiI+QWxsIFNURU0gdmlld3MgYXJlIGNyZWF0ZSB1c2luZyB0aGUKKwk8YSBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2JpcnQvIj5FY2xpcHNlIEJ1c2luZXNzIEludGVsbGlnZW5jZQorCVJlcG9ydGluZyBUb29sIChCSVJUKS48L2E+Jm5ic3A7IDwvZm9udD48L3A+CisJPHA+PGZvbnQgc2l6ZT0iMiIgZmFjZT0iVGltZXMgTmV3IFJvbWFuIj5UaGUgUmVwb3J0IFZpZXdzIGNvbXBsZW1lbnQgdGhlIHZhcmlvdXMgTWFwIHZpc3VhbGl6YXRpb24KKwl2aWV3cy4gV2hpbGUgdGhlIE1hcCBnaXZlcyBhIHF1YWxpdGF0aXZlIHZpc3VhbGl6YXRpb24gb2YgYSBydW5uaW5nCisJc2ltdWxhdGlvbiAoZS5nLiBhIHNwcmVhZGluZyBpbmZlY3Rpb3VzIGRpc2Vhc2UpLCB0aGUgUmVwb3J0IFZpZXdzIHByb3ZpZGUKKwltb3JlIHF1YW50aXRhdGl2ZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgc2ltdWxhdGlvbiBzdGF0ZSBlaXRoZXIgYXQgc3BlY2lmaWMKKwlsb2NhdGlvbnMgb3IgYWdncmVnYXRlZCBhIGRpZmZlcmVudCBsZXZlbHMuPC9mb250PjwvcD4KKwk8cD48Zm9udCBmYWNlPSJUaW1lcyBOZXcgUm9tYW4iPjxiPjEpIExvYWRpbmcgdGhlIFJlcG9ydCBWaWV3czwvYj48L2ZvbnQ+PC9wPgorCTxwIERJUj0iTFRSIj48Zm9udCBzaXplPSIyIiBmYWNlPSJUaW1lcyBOZXcgUm9tYW4iPlRvIGxvYWQgb3IgYWN0aXZhdGUgdGhlIHJlcG9ydHMsIGZpcnN0IGxhdW5jaAorCShhbmQgcnVuKSBzdGVtLiBUaGVuLCBvbiB0aGUgdG9wIG1lbnUgYmFyIGNsaWNrIG9uIDwvZm9udD48L3A+CisJPHAgRElSPSJMVFIiPjxmb250IHNpemU9IjIiIGZhY2U9IkFyaWFsIj4mZ3Q7d2luZG93Jmd0O290aGVyLi4uJmd0O1RpbWUgU2VyaWVzPC9mb250PjwvcD4KKwk8Zm9udCBGQUNFPSJIZWx2Ij4KKwk8cCBESVI9IkxUUiI+PGZvbnQgc2l6ZT0iMiI+U2VsZWN0IGl0LiBHbyBiYWNrIHRvIHRoZSB0b3AgbWVudSBiYXIgYW5kIGNsaWNrCisJb24gPC9mb250PjwvcD4KKwk8L2ZvbnQ+CisJPHAgRElSPSJMVFIiPjxmb250IHNpemU9IjIiIGZhY2U9IkFyaWFsIj4mZ3Q7d2luZG93Jmd0O290aGVyLi4uJmd0O1BoYXNlIFNwYWNlPC9mb250PjwvcD4KKwk8Zm9udCBGQUNFPSJIZWx2Ij4KKwk8cCBESVI9IkxUUiI+PGZvbnQgc2l6ZT0iMiI+VGhpcyB3aWxsIG9wZW4gdHdvIGRpZmZlcmVudCBCSVJUIFJlcG9ydCBWaWV3cy4KKwlPdGhlciB2aWV3cyB3b3VsZCBiZSBhY3RpdmF0ZWQgaW4gdGhlIHNhbWUgd2F5LjwvZm9udD48L3A+CisJPHAgRElSPSJMVFIiPjxiPjIpIFN0YXJ0aW5nIHRoZSBSZXBvcnQgVmlld3M8L2I+PC9wPgorCTxwIERJUj0iTFRSIj48Zm9udCBzaXplPSIyIj5OZXh0IGdvIHRvIHRoZSBzY2VuYXJpb3MgdGFiIGFuZCBleHBhbmQgPC9mb250PgorCTwvcD4KKwk8L2ZvbnQ+CisJPHAgRElSPSJMVFIiPjxmb250IHNpemU9IjIiIGZhY2U9IkFyaWFsIj4tJmd0O1NURU0tJmd0O0dlb2dyYXBoeS0mZ3Q7UG9saXRpY2FsLSZndDtDb3VudHJ5LSZndDtKYXBhbjwvZm9udD48L3A+CisJPGZvbnQgRkFDRT0iSGVsdiI+CisJPHAgRElSPSJMVFIiPjxmb250IHNpemU9IjIiPmRvdWJsZSBjbGljayBvbiB0aGUgYnVpbHQgaW4gc2NlbmFyaW88aT48YnI+CisJUGFuZGVtaWMgRGVtbywgVG9reW8sIEphcGFuLCAyMDAwPGJyPgorCTwvaT50byBzdGFydCBpdC48L2ZvbnQ+PC9wPgorCTx0YWJsZSBib3JkZXI9IjEiIGNlbGxzcGFjaW5nPSIxIiB3aWR0aD0iNjAlIj4KKwkJPHRyPgorCQkJPHRkPgorCQkJPHAgYWxpZ249ImNlbnRlciI+PGZvbnQgRkFDRT0iSGVsdiI+CisJCQk8aW1nIGJvcmRlcj0iMCIgc3JjPSJpbWcvdGltZXNlcmllc3ZpZXcuanBnIiB3aWR0aD0iMTAwMCIgaGVpZ2h0PSI4MDAiPjwvZm9udD48L3RkPgorCQk8L3RyPgorCQk8dHI+CisJCQk8dGQ+CisJCQk8cCBhbGlnbj0iY2VudGVyIj48Yj5GaWd1cmUgMTogUnVubmluZyB0aGUgYnVpbHQgaW4gSmFwYW4gU2NlbmFyaW8KKwkJCXdpdGggdGhlIFRpbWVTZXJpZXMgdmlldyBkaXNwbGF5ZWQgYmVsb3cgdGhlIG1hcC48L2I+PC90ZD4KKwkJPC90cj4KKwk8L3RhYmxlPgorCTxwIERJUj0iTFRSIj48Yj4zKSBBZGRpbmcgYW5kIHJlbW92aW5nIGxvY2F0aW9ucyB0byBNb25pdG9yPC9iPjwvcD4KKwk8cCBESVI9IkxUUiI+PGZvbnQgc2l6ZT0iMiI+TG9vayBhdCB0aGUgdGltZSBzZXJpZXMgYW5kIHBoYXNlIHNwYWNlIHZpZXdzLgorCVlvdSB3aWxsIHByb2JhYmx5IHNlZSBhIHNpbmdsZSBjaGFydCB3aGljaCBzaG91bGQgc2hvdyB0aGUgZGF0YSBmb3IgYWxsIG9mCisJSmFwYW4uIElmIHlvdSBjbGljayBvbiBhbnkgbG9jYXRpb24gb24gdGhlIG1hcCwgYSBuZXcgcmVwb3J0IHdpbGwgYmUgYWRkZWQKKwlmb3IgdGhhdCBuZXcgbG9jYXRpb24uIEluIHRoaXMgcmVsZWFzZSBjbGlja2luZyBvbiB0aGUgbWFwIHdpbGwgZ2VuZXJhdGUgYQorCW5ldyByZXBvcnQgb2YgZXZlcnkgdHlwZSB0aGF0IGlzIGN1cnJlbnRseSBsb2FkZWQgKGUuZy4sIGJvdGggVGltZSBTZXJpZXMKKwlhbmQgUGhhc2UgU3BhY2UgcmVwb3J0cyB3aWxsIGJlIGFkZGVkIGZvciB0aGF0IGxvY2F0aW9uIGlmIHRoZXkgYXJlIGJvdGgKKwlhY3RpdmUpLiBJbiB0aGUgZnV0dXJlIHdlIHdpbGwgYWRkIGEgc2VsZWN0b3Igc28gbWFwIGNsaWNraW5nIHdpbGwgZ2VuZXJhdGUKKwl1c2VyIHNwZWNpZmllZCB0eXBlcyBvZiBuZXcgcmVwb3J0cy48YnI+CisJPGJyPgorCUtlZXAgY2xpY2tpbmcgb24gdGhlIG1hcCB0byBnZXQgbmV3IHJlcG9ydHMuIFQ8YnI+CisJVG8gcmVtb3ZlIGEgcmVwb3J0IHNpbXBseSBjbGljayB0aGUgcmVtb3ZlCisJYnV0dG9uIGluIHRoZSByZXBvcnQgd2luZG93LjwvZm9udD48L3A+CisJCisJPHAgRElSPSJMVFIiPjxiPjQpIFJlbWVtYmVyaW5nIFVzZXIgcHJlZmVyZW5jZXM8L2I+PC9wPgorCTxwIERJUj0iTFRSIj48Zm9udCBzaXplPSIyIj5UaGUgU1RFTSByZXBvcnQgdmlld3MgdXNlIEVjbGlwc2UgRGlhbG9nU2V0dGluZ3MgdG8KKwlhdXRvbWF0aWNhbGx5IHJlbWVtYmVyIHVzZXIgcHJlZmVyZW5jZXMuIFRoaXMgZmVhdHVyZSBpcyBhbHdheXMgZW5hYmxlZCBhbmQKKwliZWdpbnMgYXMgc29vbiBhcyB5b3UgZW5hYmxlIGFueSByZXBvcnQgdmlldy4gVGhlIHByZWZlcmVuY2VzIHRoYXQgYXJlCisJJnF1b3Q7cmVtZW1iZXJlZCZxdW90OyBhcmUgdGhlIG1hcCBsb2NhdGlvbnMgdGhlIHVzZXIgd2FzIG1vc3QgcmVjZW50bHkgbW9uaXRvcmluZworCXdpdGggb25lIG9yIG1vcmUgcmVwb3J0IHZpZXdzLiBQcmVmZXJlbmNlcyBhcmUgc3RvcmVkIGluZGVwZW5kZW50bHkgZm9yIGVhY2gKKwl0eXBlIG9mIHJlcG9ydCBzbyB0aGUgc3lzdGVtIHdpbGwgYWxsb3cgKGFuZCByZW1lbWJlcikgdGhhdCB0aGUgdXNlciB3aXNoZXMKKwl0byBtb25pdG9yLCBmb3IgZXhhbXBsZSwgb25lIHNldCBvZiBsb2NhdGlvbnMgd2l0aCBUaW1lIFNlcmllcyByZXBvcnRzIGFuZAorCWFub3RoZXIgc2V0IG9mIGxvY2F0aW9ucyB3aXRoIFBoYXNlIFNwYWNlIHJlcG9ydHMuIFRoZSB1c2VycyBwcmVmZXJlbmNlcyBhcmUKKwlzdG9yZWQgb24gZGlzayBpbiBhIGRpcmVjdG9yeTo8L2ZvbnQ+PC9wPgorCTwvZm9udD4KKwk8Zm9udCBGQUNFPSJBcmlhbCI+CisJPHAgRElSPSJMVFIiPi4uLlxydW50aW1lLXN0ZW0ucHJvZHVjdFwubWV0YWRhdGFcLnBsdWdpbnNcb3JnLmVjbGlwc2Uuc3RlbS51aS5yZXBvcnRzPC9wPgorCTwvZm9udD4KKwk8Zm9udCBGQUNFPSJIZWx2Ij4KKwk8cCBESVI9IkxUUiI+PGZvbnQgc2l6ZT0iMiI+d2hlcmUgdGhlIGRpcmVjdG9yeSBccnVudGltZS1zdGVtLnByb2R1Y3QgaXMgbG9jYXRlZCBpbiB0aGUKKwlzYW1lIHBhcmVudCBkaXJlY3RvcnkgYXMgdGhlIHVzZXJzIFNURU0gZWNsaXBzZSB3b3Jrc3BhY2UgKGZvciBleGFtcGxlCisJYzpccnVudGltZS1zdGVtLnByb2R1Y3QpLjwvZm9udD48L3A+CisJPHAgRElSPSJMVFIiPjxmb250IHNpemU9IjIiPlByZWZlcmVuY2VzIGZvciB0aGUgVGltZSBTZXJpZXMgdmlld3MgYXJlIHN0b3JlZCBpbiBhIGZpbGU6PGJyPgorCVRpbWVTZXJpZXNfUHJlZmVyZW5jZXMudHh0PGJyPgorCVByZWZlcmVuY2VzIGZvciB0aGUgUGhhc2UgU3BhY2Ugdmlld3MgYXJlIHN0b3JlZCBpbiBhIGZpbGU6PGJyPgorCVBoYXNlU3BhY2VfUHJlZmVyZW5jZXMudHh0PC9mb250PjwvcD4KKwk8cCBESVI9IkxUUiI+PGI+NSkgQ29uZmlndXJpbmcgdGhlIFRpbWVTZXJpZXMgUmVwb3J0PC9iPjwvcD4KKwk8cCBESVI9IkxUUiI+PGZvbnQgc2l6ZT0iMiI+T24gdGhlIGxvd2VyIGxlZnQgaGFuZCBzaWRlIG9mIGV2ZXJ5IFRpbWVTZXJpZXMgUmVwb3J0IHZpZXcKKwl3aW5kb3cgYXJlIHR3byBjb21ibyBib3hlcyBvbmUgYXRvcCB0aGUgb3RoZXIuIElmIGEgc2ltdWxhdGlvbiBpcyBydW5uaW5nLAorCXRoZSB0b3AgY29tYm8gYm94IGFsbG93cyBhIHVzZXIgdG8gdGFrZSBkYXRhIGZyb20gZGlmZmVyZW50ICZxdW90O2RlY29yYXRvcnMmcXVvdDsKKwl0aGF0IGV4aXN0IGF0IHNlbGVjdGVkIGxvY2F0aW9ucy4gSW4gbW9zdCBjYXNlcyB0aGUgdXNlciB3aWxsIGJlIHJ1bm5pbmcKKwlvbmx5IG9uZSBkaXNlYXNlIGF0IGEgdGltZSBhbmQgdGhlcmUgd2lsbCBiZSBvbmx5IG9uZSBsb2NhdGlvbiBkZWNvcmF0b3IgdG8KKwljaG9zZSBmcm9tICh0aGUgcnVubmluZyBkaXNlYXNlKS4gSW4gZ2VuZXJhbCBvbmUgY2FuIGNvbmZpZ3VyZSBzY2VuYXJpb3MgaW4KKwlTVEVNIHRvIHNpbXVsdGFuZW91cyBydW4gbXVsdGlwbGUgZGlzZWFzZXMgaW4gd2hpY2ggY2FzZSBvbmUgY2FuIGV4YW1pbmUgdGhlCisJc3RhdGUgb2YgZWFjaCBkaXNlYXNlIGluIHR1cm4gdmlhIHRoaXMgdG8gY29tYm8gYm94LiA8L2ZvbnQ+IDwvcD4KKwk8cCBESVI9IkxUUiI+PGZvbnQgc2l6ZT0iMiI+VGhlIGJvdHRvbSBjb21ibyBib3ggaXMgbm90IHVzZWQgYnkgdGhlIFRpbWVTZXJpZXMgUmVwb3J0LiBUaGUKKwlib3R0b20gY29tYm8gYm94IHNob3dzIHRoZSBkaWZmZXJlbnQgJnF1b3Q7bGFiZWxzJnF1b3Q7IHByb2Nlc3NlZCBieSB0aGUgc2VsZWN0ZWQKKwlkZWNvcmF0b3IuIEZvciBhIHBhcnRpY3VsYXIgZGlzZWFzZSBtb2RlbCB0aGVzZSBsYWJlbHMgbWlnaHQgPGk+aW5jbHVkZTwvaT4sCisJZm9yIGV4YW1wbGUsPC9mb250PjwvcD4KKwk8cCBESVI9IkxUUiI+UyAtIHRoZSBwb3B1bGF0aW9uIGZyYWN0aW9uJm5ic3A7IFN1c2NlcHRpYmxlICgwLjAgJmx0Oz0gUyAmbHQ7PSAxLjApPC9wPgorCTxwIERJUj0iTFRSIj5FIC0gdGhlIHBvcHVsYXRpb24gZnJhY3Rpb24mbmJzcDsgRXhwb3NlZCAoMC4wICZsdDs9IEUgJmx0Oz0gMS4wKTwvcD4KKwk8cCBESVI9IkxUUiI+SSAtIHRoZSBwb3B1bGF0aW9uIGZyYWN0aW9uIEluZmVjdGlvdXMgKDAuMCAmbHQ7PSBJICZsdDs9IDEuMCk8L3A+CisJPHAgRElSPSJMVFIiPlIgLSB0aGUgcG9wdWxhdGlvbiBmcmFjdGlvbiBSZWNvdmVyZWQgKDAuMCAmbHQ7PSBSICZsdDs9IDEuMCkgPC9wPgorCTxwIERJUj0iTFRSIj48aT48Zm9udCBzaXplPSIyIj5SYXRoZXIgdGhhbiBkaXNwbGF5IG9ubHkgYSBzaW5nbGUgdmFyaWFibGUgb3IgbGFiZWwgUywgRSwgSSwKKwlvciBSLCB0aGUgVGltZSBTZXJpZXMgdmlld2VyIHNpbXVsdGFuZW91c2x5IGRpc3BsYXlzIG11bHRpcGxlIGxhYmVscyBmb3IgdGhlCisJc2VsZWN0ZWQgZGVjb3JhdG9yIGluIGNvbmZpZ3VyYWJsZSBjb2xvcnMuIDwvZm9udD4gPC9pPjxmb250IHNpemU9IjIiPlNlZSB0aGUgY29sb3JlZCBsaW5lcyBpbgorCUZpZ3VyZSAxLiBCeSBkZWZhdWx0IHRoZSBsYWJlbHMgZGlzcGxheWVkIGluIHRoZSBUaW1lIFNlcmllcyB2aWV3IGFyZSBTLCBFLAorCUksIGFuZCBSIGluIEJsdWUsIFllbGxvdywgUmVkLCBhbmQgR3JlZW4gcmVzcGVjdGl2ZWx5LiBJZiB0aGVzZSBsYWJlbHMgZG8KKwlub3QgZXhpc3QgaW4gdGhlIHNlbGVjdGVkIGRlY29yYXRvciB0aGVuIHRoZSBTVEVNIHJlcG9ydCB2aWV3IHdpbGwgYXR0ZW1wdAorCXRvIHJlbmRlciBldmVyeSBsYWJlbCBmb3Igd2hpY2ggcmVsYXRpdmUgdmFsdWVzICgwLSZndDsxKSBhcmUgZGVmaW5lZC4gVGhlCisJZGVmYXVsdCBjb2xvciAoYmx1ZSkgd291bGQgYmUgdXNlZC48L2ZvbnQ+PC9wPgorCTxwIERJUj0iTFRSIj48Yj42KSBDb25maWd1cmluZyB0aGUgTGFiZWxzIGFuZCBDb2xvcnM8L2I+PC9wPgorCTxwIERJUj0iTFRSIj48Zm9udCBzaXplPSIyIj5UbyBjb25maWd1cmUgb3IgY2hhbmdlIHRoZSBkZWZhdWx0IGxhYmVscyBhbmQgY29sb3JzIGRpc3BsYXllZAorCWluIHRoZSBUaW1lIFNlcmllcyB2aWV3LCBnbyB0byB0aGUgdG9wIG1lbnUgYmFyIGFuZCBzZWxlY3Q8L2ZvbnQ+PC9wPgorCTxwIERJUj0iTFRSIj48Zm9udCBzaXplPSIyIj4mZ3Q7V2luZG93Jmd0O3ByZWZlcmVuY2VzPC9mb250PjwvcD4KKwk8cCBESVI9IkxUUiI+PGZvbnQgc2l6ZT0iMiI+YSBkaWFsb2cgd2lsbCBvcGVuLiBPbiB0aGUgbGVmdCBoYW5kIHNpZGUgZXhwYW5kIC0mZ3Q7U1RFTSAtJmd0OworCVZpc3VhbGl6YXRpb248L2ZvbnQ+PC9wPgorCTxwIERJUj0iTFRSIj48Zm9udCBzaXplPSIyIj5hbmQgY2xpY2sgb24gdmlzdWFsaXphdGlvbi4gVGhlIGRpc3BsYXllZCBsYWJlbHMgYW5kIHRoZWlyCisJYXNzb2NpYXRlZCBjb2xvcnMgbWF5IGJlIGNoYW5nZWQgaW4gdGhpcyBkaWFsb2cuIFNlZSBGaWd1cmUgMiBiZWxvdy48L2ZvbnQ+PC9wPgorCTx0YWJsZSBib3JkZXI9IjEiIGNlbGxzcGFjaW5nPSIxIiB3aWR0aD0iNjAlIj4KKwkJPHRyPgorCQkJPHRkPgorCQkJPHAgYWxpZ249ImNlbnRlciI+CisJCQk8aW1nIGJvcmRlcj0iMCIgc3JjPSJpbWcvcmVwb3J0UHJlZmVyZW5jZXMuanBnIiB3aWR0aD0iNjAwIiA+PC90ZD4KKwkJPC90cj4KKwkJPHRyPgorCQkJPHRkPjxiPkZpZ3VyZSAzOiBUaGUgRGVmYXVsdCBMYWJlbHMgYW5kIENvbG9ycyBtYXkgYmUgY29uZmlndXJlZCBpbgorCQkJdGhlIHZpZXcgcHJlZmVyZW5jZXMgPGk+KHNlZSB0ZXh0KS48L2k+PC9iPjwvdGQ+CisJCTwvdHI+CisJPC90YWJsZT4KKwk8cCBESVI9IkxUUiI+PGk+PGZvbnQgc2l6ZT0iMiI+UGxlYXNlIG5vdGUsIHlvdSBtdXN0IHNwZWNpZnkgb25seSB2YWxpZCBsYWJlbCB2YWx1ZXMgZm9yIGEKKwlydW5uaW5nIG1vZGVsLiBJZiB5b3UgdHlwZSBhIGxhYmVsIG5hbWUgdGhhdCBkb2VzIG5vdCBleGlzdCAoZS5nLiwgWCkgdGhlCisJUmVwb3J0IFZpZXdlciB3aWxsIG5vdCBmaW5kIHRoYXQgbGFiZWwgb3IgYXNzb2NpYXRlZCB2YWx1ZXMgdG8gcGxvdC4gSWYgeW91CisJYXJlIHVzaW5nIG9uZSBvZiBTVEVNcyBidWlsdCBpbiBNb2RlbHMgaXQgd2lsbCBub3QgYmUgbmVjZXNzYXJ5IHRvIGNoYW5nZQorCXRoZXNlIGRlZmF1bHQgdmFsdWVzLjwvZm9udD48L2k+PC9wPgorCTxwIERJUj0iTFRSIj48Yj43KSBDb25maWd1cmluZyB0aGUgUGhhc2VTcGFjZSBSZXBvcnQ8L2I+PC9wPgorCTxwIERJUj0iTFRSIj48Zm9udCBzaXplPSIyIj5PbiB0aGUgbG93ZXIgbGVmdCBoYW5kIHNpZGUgb2YgZXZlcnkgUGhhc2VTcGFjZQorCVJlcG9ydCB2aWV3IHdpbmRvdyBhcmUgZm91ciBjb21ibyBib3hlcy4gVGhlIGxlZnQgaGFuZCBwYWlyIChvbmUgYXRvcCB0aGUKKwlvdGhlcikgZGV0ZXJtaW5lIHRoZSB5LWF4aXMgdmFsdWUgZGlzcGxheWVkLiBUaGUgcmlnaHQgaGFuZCBwYWlyIChvbmUgYXRvcAorCXRoZSBvdGhlcikgZGV0ZXJtaW5lIHRoZSB4LWF4aXMgdmFsdWUgZGlzcGxheWVkLi4gSWYgYSBzaW11bGF0aW9uIGlzCisJcnVubmluZywgYm90aCB0b3AgY29tYm8gYm94ZXMgYWxsb3dzIGEgdXNlciB0byB0YWtlIGRhdGEgZnJvbSBkaWZmZXJlbnQKKwkmcXVvdDtkZWNvcmF0b3JzJnF1b3Q7IHRoYXQgZXhpc3QgYXQgc2VsZWN0ZWQgbG9jYXRpb25zLiBJbiBtb3N0IGNhc2VzIHRoZSB1c2VyIHdpbGwKKwliZSBydW5uaW5nIG9ubHkgb25lIGRpc2Vhc2UgYXQgYSB0aW1lIGFuZCB0aGVyZSB3aWxsIGJlIG9ubHkgb25lIGxvY2F0aW9uCisJZGVjb3JhdG9yIHRvIGNob3NlIGZyb20gKHRoZSBydW5uaW5nIGRpc2Vhc2UpLiBUaGUgdHdvIGJvdHRvbSBjb21ibyBib3hlcworCWFsbG93IHRoZSB1c2VyIHRvIHNlbGVjdCBhbW9uZyB0aGUgZGlmZmVyZW50ICZxdW90O2xhYmVscyZxdW90OyBwcm9jZXNzZWQgYnkgdGhlCisJc2VsZWN0ZWQgZGVjb3JhdG9yLiBBcyBkaXNjdXNzZWQgYWJvdmUsIGZvciBhIHBhcnRpY3VsYXIgZGlzZWFzZSBtb2RlbCB0aGVzZQorCWxhYmVscyBtaWdodCA8aT4KKwlpbmNsdWRlPC9pPiwgZm9yIGV4YW1wbGUsIFMsIEUsIEksIGFuZCBSLiZuYnNwOyBUaGUgUGhhc2VTcGFjZSB2aWV3IGFsbG93cworCW9uZSB0byB2aWV3IHRoZSAmcXVvdDt0cmFqZWN0b3J5JnF1b3Q7IG9mIG9uZSBzeXN0ZW0gdmFyaWFibGUgcGxvdHRlZCBhZ2FpbnN0IGFub3RoZXIKKwlpbiBhIHBoYXNlIHNwYWNlIG9mIHR3byB2YXJpYWJsZXMuIFR5cGljYWxseSBlcGlkZW1pb2xvZ2lzdCB3aWxsIHBsb3QgSSh0KQorCXZzIFModCkuIE5vdCB0aGF0IHRpbWUgaXMgbm90IGFuIGV4cGxpY2l0IGF4aXMgbGFiZWwgaW4gdGhpcyB2aWV3LiBSYXRoZXIKKwl0aGUgcmVzdWx0aW5nIGN1cnZlIHJlcHJlc2VudHMgdGhlIHRyYWplY3Rvcnkgb2YgSSB2cyBTIGluIHRpbWUuPC9mb250PjwvcD4KKwk8dGFibGUgYm9yZGVyPSIxIiBjZWxsc3BhY2luZz0iMSIgd2lkdGg9IjYwJSI+CisJCTx0cj4KKwkJCTx0ZD4KKwkJCTxwIGFsaWduPSJjZW50ZXIiPjxmb250IEZBQ0U9IkhlbHYiPgorCQkJPGltZyBib3JkZXI9IjAiIHNyYz0iaW1nL1BoYXNlU3BhY2VWaWV3LmpwZyIgd2lkdGg9IjEwMDAiIGhlaWdodD0iODAwIiA+PC9mb250PjwvdGQ+CisJCTwvdHI+CisJCTx0cj4KKwkJCTx0ZD4KKwkJCTxwIGFsaWduPSJjZW50ZXIiPjxiPkZpZ3VyZSA0OiA8Zm9udCBGQUNFPSJIZWx2Ij5SdW5uaW5nIHRoZSBidWlsdAorCQkJaW4gSmFwYW4gU2NlbmFyaW8gd2l0aCB0aGUgUGhhc2VTcGFjZSB2aWV3IDxicj4KKwkJCWRpc3BsYXllZCBiZWxvdyB0aGUgbWFwLjwvZm9udD48L2I+PC90ZD4KKwkJPC90cj4KKwk8L3RhYmxlPgorCTxwIERJUj0iTFRSIj4mbmJzcDsgPC9wPgorCTxwIERJUj0iTFRSIj48Yj44KSBGb3IgQ29kZSBEZXZlbG9wZXJzPC9iPjwvcD4KKwk8cCBESVI9IkxUUiI+PGZvbnQgc2l6ZT0iMiI+QWxsIG9mIHRoZSBzb3VyY2UgY29kZSBmb3IgdGhlIFJlcG9ydCBWaWV3ZXJzCisJbWF5IGJlIGZvdW5kIGluIHRoZSBTVEVNIHBhY2thZ2U6PC9mb250PjwvcD4KKwk8L2ZvbnQ+PGZvbnQgRkFDRT0iQ291cmllciBOZXciIHNpemU9IjIiPgorCTxwIERJUj0iTFRSIj5vcmcuZWNsaXBzZS5zdGVtLnVpLnJlcG9ydHMudmlld3M8L3A+CisJPC9mb250PgorCTxwPiZuYnNwOzwvcD4KKwk8cD4mbmJzcDs8L3A+Cis8L2JvZHk+Cis8L2h0bWw+CisKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2ludGVyZmFjZS92aWV3cy9zY2VuYXJpb2NvbXBhcmlzb252aWV3Lmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC9pbnRlcmZhY2Uvdmlld3Mvc2NlbmFyaW9jb21wYXJpc29udmlldy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNmMDJiMDEKLS0tIC9kZXYvbnVsbAorKysgYi9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC9pbnRlcmZhY2Uvdmlld3Mvc2NlbmFyaW9jb21wYXJpc29udmlldy5odG1sCkBAIC0wLDAgKzEsNjQgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAgVHJhbnNpdGlvbmFsLy9FTiI+CisKKzxodG1sIHhtbG5zOnY9InVybjpzY2hlbWFzLW1pY3Jvc29mdC1jb206dm1sIiB4bWxuczpvPSJ1cm46c2NoZW1hcy1taWNyb3NvZnQtY29tOm9mZmljZTpvZmZpY2UiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy9UUi9SRUMtaHRtbDQwIj4KKzxoZWFkPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9aXNvLTg4NTktMSI+CisKKzx0aXRsZT5oZWxwPC90aXRsZT4KKzwvaGVhZD4KKworPGJvZHk+Cis8aDE+U2NlbmFyaW8gQ29tcGFyaXNvbiBWaWV3PC9oMT4KKzxwIGRpcj0ibHRyIj5UaGUgPGVtPlNjZW5hcmlvIENvbXBhcmlzb24gVmlldzwvZW0+IGFsbG93cyBhIHVzZXIgdG8gY29tcGFyZSB0d28gZGF0YSBzZXRzCithbmQgdG8gbWVhc3VyZSB0aGUgdGltZSB2YXJ5aW5nIFJvb3QgTWVhbiBTcXVhcmUgKFJNUykgZGlmZmVyZW5jZSBiZXR3ZWVuIHRoZQorYWdncmVnYXRlIGVwaWRlbWljIGRhdGEuIDxicj4KK1RoZSBkYXRhIG1heSBiZSByZWFsIGRhdGEgb3IgdGhlIHJlc3VsdHMgZnJvbSBvbmUgb3IgbW9yZSBjb21wbGV0ZWQgc2ltdWxhdGlvbnMuCitUaGUgYWxnb3JpdGhtIHVzZWQgdG8gbWVhc3VyZSB0aGUgUk1TIGRpZmZlcmVuY2UKKzxzcGFuIHN0eWxlPSJmb250LWZhbWlseTpTeW1ib2wiPmQ8L3NwYW4+PHN1Yj5hLGI8L3N1Yj4odCkgYmV0d2VlbiB0d28gc2NlbmFyaW9zCismIzgyMTY7YSYjODIxNzsgYW5kICYjODIxNjtiJiM4MjE3OyA8YnI+CithdCB0aW1lIHQgYXZlcmFnZWQgb3ZlciBhbGwgbG9jYXRpb25zIChpKSBpczo8cCBjbGFzcz0iTXNvTm9ybWFsIj4KKzxpbWcgYm9yZGVyPSIwIiBzcmM9ImltZy9jb21wYXJzb25FcXVhdGlvbi5qcGciIHdpZHRoPSI1OTciIGhlaWdodD0iMTQ5Ij4KKyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOworPC9wPgorPHAgY2xhc3M9Ik1zb05vcm1hbCI+Tm90ZSB0aGF0IGVhY2ggbG9jYXRpb24gJiM4MjE2OzxpPmk8L2k+JiM4MjE3OyBpcyB3ZWlnaHRlZCBieSB0aGUgbG9jYWwKK3BvcHVsYXRpb24gUDxzdWI+aTwvc3ViPiBzbyBtb3JlIHBvcHVsb3VzIGxvY2F0aW9ucyBjb250cmlidXRlIG1vcmUgdG8gdGhlCittZWFzdXJlbWVudC4gVGhlIG1ldGhvZCBhc3N1bWVzIHRoZSBzY2VuYXJpb3MgYSxiIGVhY2ggY292ZXIgdGhlIHNhbWUgc2V0IG9mCitsb2NhdGlvbiB7aX0gd2hpY2ggaXMgdHJ1ZSBpbiB0aGlzIGNhc2UuIFRoZSBSTVMgZGlmZmVyZW5jZSBpcyBldmFsdWF0ZWQgb25seSBhdAorbG9jYXRpb25zIHRoYXQgaGF2ZSBhIG5vbi16ZXJvIHJhdGUgb2YgaW5mZWN0aW9uIGF0IHNvbWUgdGltZSB0LiBJZiwgZm9yCitleGFtcGxlLCBhIGNvbXBhcmlzb24gaXMgbWFkZSBvZiB0d28gc2NlbmFyaW9zIGludm9sdmluZyB0aGUgZW50aXJlIHBsYW5ldCBidXQKK3RoZSBlcGlkZW1pYyBpbiBxdWVzdGlvbiBpcyBsb2NhbGl6ZWQgdG8gYSBzbWFsbCByZWdpb24gKGUuZy4sIHRoZSBzdGF0ZSBvZgorVmVybW9udCksIG9uZSBvbmx5IHdhbnRzIHRvIGNvbXBhcmUgdGhlIG1vZGVsIHRvIHRoZSByZWZlcmVuY2Ugb3ZlciB0aG9zZQorbG9jYXRpb25zIHdoZXJlIHRoZSBlcGlkZW1pYyBhY3R1YWxseSB0b29rIHBsYWNlLiBJbmNsdWRpbmcgbG9jYXRpb25zIHdpdGggSSA9IDA8Zm9udCBmYWNlPSJTeW1ib2wiPiZxdW90OzwvZm9udD48Zm9udCBmYWNlPSJUaW1lcyBOZXcgUm9tYW4iPnQ8L2ZvbnQ+Cit3b3VsZAorYXJ0aWZpY2lhbGx5IHJlZHVjZSB0aGUgZXN0aW1hdGVkIFJNUyBlcnJvci48L3A+Cis8cCBjbGFzcz0iTXNvTm9ybWFsIj5GaW5hbGx5IHdlIG5vdGUgdGhhdCB0aGUgY29tcGFyaXNvbiBpcyBtYWRlIGluY2x1ZGluZyBvbmx5Cit0aGUgUyBhbmQgSSBzdGF0ZXMuIFRoZSBhbGdvcml0aG0gY29tcGFyZXMgdGhlc2UgdHdvIGRpc2Vhc2Ugc3RhdGUgdmFyaWFibGVzIHRvCithbGxvdyBmb3IgY29tcGFyaXNvbnMgYmV0d2VlbiBkaWZmZXJlbnQgdHlwZXMgb2YgbW9kZWxzLiBJbiBhIHJlYWwgZXBpZGVtaWMKK3NjZW5hcmlvLCBvbmUgbWF5IHdpc2ggdG8gZXZhbHVhdGUgKGZvciBleGFtcGxlKSBTSSwgU0lSIGFuZCBTRUlSIG1vZGVscyBmb3IgdGhlCitzYW1lIGluZmVjdGlvdXMgZGlzZWFzZS4gU2luY2UgdGhlIFMgYW5kIEkgc3RhdGVzIGFyZSBjb21tb24gdG8gYWxsLCBtZWFzdXJpbmcKK3RoZSBSTVMgZGlmZmVyZW5jZSBpbiB0aGlzIHdheSBhbGxvd3MgZm9yIGNvbXBhcmlzb24gYWNyb3NzIGRpZmZlcmVudCB0eXBlcyBvZgorbW9kZWxzLiBJbiBjYXNlcyB3aGVyZSBvbmx5IHRoZSBpbmZlY3Rpb3VzIG9yIHBlcmhhcHMgY2hhbmdlIGluIGluZmVjdGlvdXM8c3BhbiBzdHlsZT0icG9zaXRpb246IHJlbGF0aXZlOyB0b3A6IDIuMHB0Ij4KKzxmb250IGZhY2U9IlN5bWJvbCI+RDwvZm9udD5JIDwvc3Bhbj48IS0tW2lmIGd0ZSBtc28gOV0+PCFbZW5kaWZdLS0+aXMKK2tub3duLCBSTVMgY29tcGFyaXNvbiBtYXkgYWxzbyBiZSBtYWRlIGJhc2VkIG9ubHkgb24gdGhlIEkgc3RhdGUuPC9wPgorPHA+Jm5ic3A7PHA+VG8gdXNlIHRoZSBTY2VuYXJpbyBDb21wYXJpc29uIHZpZXc6PG9sPgorCTxsaT5FbnRlciB0aGUgPGEgaHJlZj0iLi4vcGVyc3BlY3RpdmVzL2FuYWx5c2lzLmh0bWwiPkFuYWx5c2lzIFBlcnNwZWN0aXZlPC9hPjwvbGk+CisJPGxpPkNsaWNrIG9uIHRoZSBTY2VuYXJpbyBDb21wYXJpc29uIFRhYjwvbGk+CisJPGxpPlVzZSB0aGUgU2VsZWN0IEZvbGRlciBidXR0b25zIHRvIGNob3NlIHRoZSBmb2xkZXJzIGNvbnRhaW5pbmcgdGhlIGRhdGEKKwl5b3Ugd2lzaCB0byBjb21wYXJlLiBUaGUgZmlsZXMgc2hvdWxkIGhhdmUgdGhlIGZvbGxvd2luZworCTxhIGhyZWY9ImNzdmxvZ2dlcnZpZXcuaHRtbCI+Jm5ic3A7Zm9ybWF0LjwvYT48L2xpPgorCTxsaT5DbGljayBBbmFseXplPC9saT4KKwk8bGk+VGhlIHRpbWUgdmFyeWluZyBSTVMgZGlmZmVyZW5jZSB3aWxsIGFwcGVhciBpbiB0aGUgY2hhcnQgYW5kIHRoZQorCWludGVncmF0ZWQgUk1TIGRpZmZlcmVuY2Ugd2lsbCBhcHBlYXIgaW4gdGhlIGNvbnNvbGUgYXQgdGhlIGJvdHRvbSBvZiB0aGUKKwl2aWV3LjwvbGk+Cis8L29sPgorPC9wPgorPHA+Jm5ic3A7PC9wPgorPGltZyBib3JkZXI9IjAiIHNyYz0iaW1nL1NjZW5hcmlvQ29tcGFyaXNvbi5qcGciIHdpZHRoPSIxMDAwIiBoZWlnaHQ9IjgwMCI+PHA+Ni4KK0luIHRoaXMgKG9yIGluIGFueSBTVEVNIGNoYXJ0KSB2aWV3LCB0byB0b2dnbGUgYmV0d2VlbiBhIExpbmVhciBhbmQgTG9nIHNjYWxlCitzaW1wbHkgcmlnaHQgY2xpY2sgb24gdGhlIGNoYXJ0IGFuZCBzcGVjaWZ5IHlvdSBwbG90IHByZWZlcmVuY2VzIGluIHRoZSBkaWFsb2cKK3RoYXQ8YnI+CithcHBlYXJzIChzZWUgYmVsb3cpLjwvcD4KKzxwPjxpbWcgYm9yZGVyPSIwIiBzcmM9ImltZy9TY2VuYXJpb0NvbXBhcmlzb25CLmpwZyIgd2lkdGg9IjEwMDAiIGhlaWdodD0iODAwIj4KKzwvcD4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2ludGVyZmFjZS92aWV3cy9zY2VuYXJpb3N2aWV3Lmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC9pbnRlcmZhY2Uvdmlld3Mvc2NlbmFyaW9zdmlldy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYyN2NjNWEKLS0tIC9kZXYvbnVsbAorKysgYi9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC9pbnRlcmZhY2Uvdmlld3Mvc2NlbmFyaW9zdmlldy5odG1sCkBAIC0wLDAgKzEsMjEgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAgVHJhbnNpdGlvbmFsLy9FTiI+CisKKzxodG1sPgorPGhlYWQ+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1pc28tODg1OS0xIj4KKzx0aXRsZT5oZWxwPC90aXRsZT4KKzwvaGVhZD4KKworPGJvZHk+Cis8aDE+U2NlbmFyaW9zIFZpZXc8L2gxPgorPHA+VGhlIDxlbT5TY2VuYXJpb3MgVmlldzwvZW0+IGRpc3BsYXlzIHRoZSA8YQorCWhyZWY9Ii4uLy4uL2NvbmNlcHRzL21vZGVsaW5nZnJhbWV3b3JrLmh0bWwjc2NlbmFyaW8iPiBTY2VuYXJpb3M8L2E+Cit0aGF0IGFyZSBhdmFpbGFibGUgdG8gc3RhcnQgYSBTaW11bGF0aW9uLiBUaGUgYXZhaWxhYmxlIDxhCisJaHJlZj0iLi4vLi4vY29uY2VwdHMvbW9kZWxpbmdmcmFtZXdvcmsuaHRtbCNzY2VuYXJpbyI+IFNjZW5hcmlvczwvYT4KK2FyZSBvcmdhbml6ZWQgaW4gYSB0cmVlLiBUaG9zZSBsaXN0ZWQgdW5kZXIgIlNURU0iIGFyZSBidWlsdC1pbiB0byBTVEVNLjwvcD4KKzxwPkEgU2ltdWxhdGlvbiBjYW4gYmUgc3RhcnRlZCBieSBkb3VibGUtY2xpY2tpbmcgb24gb25lIG9mIHRoZQorbGlzdGVkIDxhIGhyZWY9Ii4uLy4uL2NvbmNlcHRzL21vZGVsaW5nZnJhbWV3b3JrLmh0bWwjc2NlbmFyaW8iPgorU2NlbmFyaW9zPC9hPiwgb3IgYnkgY2xpY2tpbmcgb24gdGhlIGdyZWVuIHRyaWFuZ2xlIGluIHRoZSBtZW51IGJhci4gPGltZworCXNyYz0iaW1nL3NjZW5hcmlvc3ZpZXcucG5nIiAvPgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL3ZpZXdzL3NlcXVlbmNlcnN2aWV3Lmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC9pbnRlcmZhY2Uvdmlld3Mvc2VxdWVuY2Vyc3ZpZXcuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZDkzNWUzCi0tLSAvZGV2L251bGwKKysrIGIvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL3ZpZXdzL3NlcXVlbmNlcnN2aWV3Lmh0bWwKQEAgLTAsMCArMSwyNCBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMCBUcmFuc2l0aW9uYWwvL0VOIj4KKworPGh0bWw+Cis8aGVhZD4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PWlzby04ODU5LTEiPgorPHRpdGxlPmhlbHA8L3RpdGxlPgorPC9oZWFkPgorCis8Ym9keT4KKzxoMT5TZXF1ZW5jZXJzIFZpZXc8L2gxPgorPHA+VGhlIDxlbT5TZXF1ZW5jZXJzIFZpZXc8L2VtPiBkaXNwbGF5cyB0aGUgPGEKKwlocmVmPSIuLi8uLi9jb25jZXB0cy9tb2RlbGluZ2ZyYW1ld29yay5odG1sI3NlcXVlbmNlciI+IFNlcXVlbmNlcnM8L2E+Cit0aGF0IGFyZSBhdmFpbGFibGUgZm9yIHVzZSBpbiA8YQorCWhyZWY9Ii4uLy4uL2NvbmNlcHRzL21vZGVsaW5nZnJhbWV3b3JrLmh0bWwjc2NlbmFyaW8iPiBTY2VuYXJpb3M8L2E+LgorVGhlIGF2YWlsYWJsZSA8YSBocmVmPSIuLi8uLi9jb25jZXB0cy9tb2RlbGluZ2ZyYW1ld29yay5odG1sI3NlcXVlbmNlciI+CitTZXF1ZW5jZXJzPC9hPiBhcmUgb3JnYW5pemVkIGluIGEgdHJlZS4gVGhvc2UgbGlzdGVkIHVuZGVyICJTVEVNIiBhcmUKK2J1aWx0LWluIHRvIFNURU0uPC9wPgorPHA+VGhlIHZpZXcgc3VwcG9ydHMgImRyYWciIHN1Y2ggdGhhdCBhIDxhCisJaHJlZj0iLi4vLi4vY29uY2VwdHMvbW9kZWxpbmdmcmFtZXdvcmsuaHRtbCNzZXF1ZW5jZXIiPiBTZXF1ZW5jZXI8L2E+CitjYW4gYmUgZHJhZ2dlZCBmcm9tIHRoaXMgdmlldyBhbmQgImRyb3BwZWQiIGludG8gYW4gb3BlbiBTY2VuYXJpbworZWRpdG9yLjwvcD4KKzxpbWcgc3JjPSJpbWcvc2VxdWVuY2Vyc3ZpZXcuanBnIiAvPgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL3ZpZXdzL3Rhc2tzdmlldy5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL3ZpZXdzL3Rhc2tzdmlldy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU4OTQwNTQKLS0tIC9kZXYvbnVsbAorKysgYi9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC9pbnRlcmZhY2Uvdmlld3MvdGFza3N2aWV3Lmh0bWwKQEAgLTAsMCArMSwxMyBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMCBUcmFuc2l0aW9uYWwvL0VOIj4KKworPGh0bWw+Cis8aGVhZD4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PWlzby04ODU5LTEiPgorPHRpdGxlPmhlbHA8L3RpdGxlPgorPC9oZWFkPgorCis8Ym9keT4KKzxoMT5UYXNrcyBWaWV3PC9oMT4KKzxwPlRoaXMgaGVscCB0ZXh0IGhhcyBub3QgeWV0IGJlZW4gd3JpdHRlbi4gVm9sdW50ZWVycyBuZWVkZWQhCis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC9pbnRlcmZhY2Uvdmlld3Mvdmlld3NvdmVydmlldy5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL3ZpZXdzL3ZpZXdzb3ZlcnZpZXcuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iOTZjNjExCi0tLSAvZGV2L251bGwKKysrIGIvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL3ZpZXdzL3ZpZXdzb3ZlcnZpZXcuaHRtbApAQCAtMCwwICsxLDQ3IEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wIFRyYW5zaXRpb25hbC8vRU4iPgorCis8aHRtbD4KKzxoZWFkPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9aXNvLTg4NTktMSI+Cis8dGl0bGU+T3ZlcnZpZXc8L3RpdGxlPgorPC9oZWFkPgorCis8Ym9keT4KKzxoMT5WaWV3czwvaDE+Cis8cD5UaGUgU1RFTSBpbnRlcmZhY2UgaW5jbHVkZXMgYSBudW1iZXIgb2YgZGlmZmVyZW50ICJWaWV3cyIuIEVhY2gKK3ZpZXcgZGlzcGxheXMgYSBwYXJ0aWN1bGFyIGFzcGVjdCBvZiB0aGUgc3RhdGUgb2YgU1RFTSwgaXRzIGNvbXBvbmVudHMsCitvciBvZiBhbiBhY3RpdmUgU2ltdWxhdGlvbi4gU29tZSB2aWV3cyBoYXZlIGZ1bmN0aW9ucyB0aGF0IGFsbG93CitTaW11bGF0aW9ucyB0byBiZSBjcmVhdGVkIGFuZCBjb250cm9sbGVkLgorPHVsPgorICAgIDxsaT48YSBocmVmPSJhY3RpdmVzaW11bGF0aW9uc3ZpZXcuaHRtbCI+QWN0aXZlIFNpbXVsYXRpb25zPC9hPjwvbGk+CisJPGxpPjxhIGhyZWY9ImNvbnRyb2x2aWV3Lmh0bWwiPkNvbnRyb2w8L2E+PC9saT4KKwk8bGk+PGEgaHJlZj0iY3N2bG9nZ2Vydmlldy5odG1sIj5DU1YgTG9nZ2VyIFZpZXc8L2E+PC9saT4KKwk8bGk+PGEgaHJlZj0iZGVjb3JhdG9yc3ZpZXcuaHRtbCI+RGVjb3JhdG9yczwvYT48L2xpPgorCTxsaT48YSBocmVmPSJkaXNlYXNlc3N2aWV3Lmh0bWwiPkRpc2Vhc2VzPC9hPjwvbGk+CisJPGxpPjxhIGhyZWY9ImR1YmxpbmNvcmVwb3B1cC5odG1sIj5EdWJsaW4gQ29yZSBQb3AtdXA8L2E+PC9saT4KKwk8bGk+PGEgaHJlZj0iZXBpZGVtaWN2aWV3Lmh0bWwiPkVwaWRlbWljPC9hPjwvbGk+CisJPGxpPjxhIGhyZWY9ImVycm9yX2xvZy5odG1sIj5FcnJvciBMb2c8L2E+PC9saT4KKwk8bGk+PGEgaHJlZj0iZXN0aW1hdG9ydmlldy5odG1sIj5Fc3RpbWF0b3I8L2E+PC9saT4KKwk8bGk+PGEgaHJlZj0iZ2UuaHRtbCI+R29vZ2xlIEVhcnRoPC9hPjwvbGk+CisJPGxpPjxhIGhyZWY9ImdyYXBoc3ZpZXcuaHRtbCI+R3JhcGhzPC9hPjwvbGk+CisJPGxpPjxhIGhyZWY9Imx5YXB1bm92dmlldy5odG1sIj5MeWFwdW5vdjwvYT48L2xpPgorCTxsaT48YSBocmVmPSJtYXB2aWV3Lmh0bWwiPk1hcDwvYT48L2xpPgorCTxsaT48YSBocmVmPSJtb2RlbHN2aWV3Lmh0bWwiPk1vZGVsczwvYT48L2xpPgorCTxsaT48YSBocmVmPSJwcm9qZWN0dmlldy5odG1sIj5Qcm9qZWN0PC9hPjwvbGk+CisJPGxpPjxhIGhyZWY9InByb3BlcnRpZXN2aWV3Lmh0bWwiPlByb3BlcnRpZXM8L2E+PC9saT4KKwk8bGk+PGEgaHJlZj0icmVwb3J0dmlldy5odG1sIj5SZXBvcnQ8L2E+PC9saT4KKwk8bGk+PGEgaHJlZj0ic2NlbmFyaW9jb21wYXJpc29udmlldy5odG1sIj5TY2VuYXJpbyBDb21wYXJpc29uPC9hPjwvbGk+CisJPGxpPjxhIGhyZWY9InNjZW5hcmlvc3ZpZXcuaHRtbCI+U2NlbmFyaW9zPC9hPjwvbGk+CisJPGxpPjxhIGhyZWY9InNlcXVlbmNlcnZpZXcuaHRtbCI+U2VxdWVuY2VyczwvYT48L2xpPgorCTxsaT48YSBocmVmPSJ0YXNrc3ZpZXcuaHRtbCI+VGFza3M8L2E+PC9saT4KKworPC91bD4KKzxwPkluIGFkZGl0aW9uLCB2aWV3cyB0aGF0IGxpc3QgU2ltdWxhdGlvbiBjb21wb25lbnRzICg8YQorCWhyZWY9ImRlY29yYXRvcnN2aWV3Lmh0bWwiPkRlY29yYXRvcnM8L2E+LCA8YSBocmVmPSJncmFwaHN2aWV3Lmh0bWwiPkdyYXBoczwvYT4sCis8YSBocmVmPSJtb2RlbHN2aWV3Lmh0bWwiPk1vZGVsczwvYT4sIDxhIGhyZWY9InNjZW5hcmlvc3ZpZXcuaHRtbCI+U2NlbmFyaW9zPC9hPgorYW5kIDxhIGhyZWY9InNlcXVlbmNlcnZpZXcuaHRtbCI+U2VxdWVuY2VyczwvYT4pIGFsc28gc3VwcG9ydCBhbiBpbnN0YW50CisicG9wLXVwIiBkaXNwbGF5IG9mIHRoZSA8YSBocmVmPSJodHRwOi8vZHVibGluY29yZS5vcmcvIj5EdWJsaW4gQ29yZTwvYT4KK21ldGFkYXRhIG9mIHRoZSBjb21wb25lbnQgZGlzcGxheWVkIGluIHRoZSB2aWV3LiBTZWUgPGEKKwlocmVmPSJkdWJsaW5jb3JlcG9wdXAuaHRtbCI+RHVibGluIENvcmUgUG9wLXVwPC9hPiBmb3IgbW9yZSBkZXRhaWxzLjwvcD4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2ludGVyZmFjZS93aXphcmRzL2F1dG9leHB3aXphcmQuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2ludGVyZmFjZS93aXphcmRzL2F1dG9leHB3aXphcmQuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZDFhOTc0Ci0tLSAvZGV2L251bGwKKysrIGIvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL3dpemFyZHMvYXV0b2V4cHdpemFyZC5odG1sCkBAIC0wLDAgKzEsNDAgQEAKKzwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi9odG1sNC9sb29zZS5kdGQiPgorPGh0bWw+Cis8aGVhZD4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTEiPgorPHRpdGxlPk5ldyBEaXNlYXNlIFdpemFyZDwvdGl0bGU+Cis8L2hlYWQ+Cis8Ym9keT4KK1RvIGNyZWF0ZSBhIG5ldyBhdXRvbWF0ZWQgZXhwZXJpbWVudCBpbiBTVEVNLCBjbGljayB0aGUgIk5ldyBBdXRvbWF0aWMgZXhwZXJpbWVudCIgdG9vbGJhciBpY29uLiBBIG5ldyB3aXphcmQgc2hvd3MgdXAgc2ltaWxhciB0byB0aGUgb25lIGluIHRoZSBmaWd1cmUgYmVsb3cuCisKKzxpbWcgc3JjPSJpbWcvYXV0b21hdGljZXhwZXJpbWVudHdpemFyZC5qcGciIC8+CisKKzxwPkZpcnN0LCBzcGVjaWZ5IGEgbmFtZSBmb3IgeW91ciBuZXcgYXV0b21hdGVkIGV4cGVyaW1lbnQuIFlvdSBjYW4gZ2l2ZSBpdCBhbnkgbmFtZSB5b3Ugd2FudC4gTmV4dCwgcGljayB0aGUgYWxnb3JpdGhtIHRvIHVzZS4gCitDdXJyZW50bHkgdGhlcmUgaXMgb25seSBvbmUgb3B0aW9uIGF2YWlsYWJsZSwgIkF1dG9tYXRpY0V4cGVyaW1lbnQiIHdoaWNoIGlzIGFuIGltcGxlbWVudGF0aW9uIG9mIGEgTmVsZGVyIE1lYWQgZG93bmhpbGwgc2ltcGxleCBudW1lcmljYWwgb3B0aW1pemF0aW9uIGFsZ29yaXRobS4KKzwvcD4gCis8cD4KK1RoZSBOZWxkZXIgTWVhZCBhbGdvcml0aG0gY2FuIGJlIGNvbmZpZ3VyZWQgYXMgZm9sbG93czoKKzwvcD4KKzxwPjEuIE1heGltdW0gSXRlcmF0aW9ucy4gSWYgdGhpcyBudW1iZXIgb2Ygc2ltdWxhdGlvbnMgaGFzIHJhbiB3aXRob3V0IGNvbnZlcmdlbmNlIHRvIGFuIGVycm9yIHZhcmlhdGlvbiBzbWFsbGVyIHRoYW4gdGhlIHRvbGVyYW5jZSwgdGhlIGFsZ29yaXRobSBzdG9wcyBvciByZXN0YXJ0cyBpdHNlbGYgKGRlcGVuZGluZyB1cG9uIHRoZSBzZXR0aW5nIG9mIFJlLWluaXRpYWxpemUgcGFyYW1ldGVyIHNlZSBiZWxvdykuIElmIHlvdSBzZXQgaXQgdG8gLTEsIHRoZSBhbGdvcml0aG0gd2lsbCBydW4gdW50aWwgdGhlIGVycm9yIGNvbnZlcmdlcyAoLTEgZXNzZW50aWFsbHkgbWVhbnMgbm8gbWF4aW11bSBudW1iZXIgb2YgaXRlcmF0aW9ucyk8L3A+CisKKzxwPjIuIFJlZmVyZW5jZSBkYXRhIGZvbGRlci4gVGhpcyBpcyB0aGUgZGlyZWN0b3J5IGNvbnRhaW5pbmcgdGhlIHJlZmVyZW5jZSBkYXRhLiBUaGUgZGlyZWN0b3J5IG11c3QgY29udGFpbiB0aGUgc2FtZSBmaWxlcyB0aGF0IFNURU0gZ2VuZXJhdGVzIGluIGl0cyBsb2cgb3V0cHV0IGZvbGRlcnMsIGUuZy4gYW4gSV8yLmNzdiwgSW5jaWRlbmNlXzIuY3N2LCBTXzIuY3N2IGV0Yy4gVGhlIGN1cnJlbnQgZXJyb3IgZnVuY3Rpb24gb25seSByZXF1aXJlcyB0aGUgSW5jaWRlbmNlIGZpbGUuIElmIHRoZSByZWZlcmVuY2UgZmlsZXMgYXJlIGxvY2F0ZWQgaW4gYSBmb2xkZXIgaW5zaWRlIHRoZSBjdXJyZW50IHByb2plY3QsIHRoZSBsb2NhdGlvbiBpcyBzcGVjaWZpZWQgaW4gYSBwbGF0Zm9ybSBuZXV0cmFsIG1hbm5lciBhbmQgdGhlIHByb2plY3QgYW5kIGFzc29jaWF0ZWQgYXV0b21hdGljIGV4cGVyaW1lbnQgY2FuIGJlIHNoYXJlZCB3aXRoIG90aGVycy48L3A+CisKKzxwPjMuIEJhc2UgU2NlbmFyaW8uIENsaWNraW5nIHRoZSAiU2VsZWN0IFNjZW5hcmlvIiBidXR0b24gd2lsbCBhbGxvdyB5b3UgdG8gcGljayBhbnkgU2NlbmFyaW8gdGhhdCBpcyBpbnNpZGUgeW91ciBjdXJyZW50IHByb2plY3QuIFRoZSBiYXNlIHNjZW5hcmlvIHRoZSBpcyB0aGUgc2NlbmFyaW8gdGhlIGF1dG9tYXRpYyBleHBlcmltZW50IHdpbGwgcnVuIGFuZCBjb21wYXJlIHRvIHRoZSByZWZlcmVuY2U8L3A+CisKKzxwPjQuIEVycm9yIEZ1bmN0aW9uLiBUaGUgZXJyb3IgZnVuY3Rpb24gdG8gdXNlIHdoZW4gY29tcGFyaW5nIG1vZGVsIG91dHB1dCB0byB0aGUgcmVmZXJlbmNlLiBDdXJyZW50bHkgb25seSBhIHNpbmdsZSBlcnJvciBmdW5jdGlvbiAiU2ltcGxlRXJyb3JGdW5jdGlvbiIgaXMgcHJvdmlkZWQuIEl0IGNhbGN1bGF0ZXMgYSBOb3JtYWxpemVkIE1lYW4gU3F1YXJlIEVycm9yIChOTVNFKSBiZXR3ZWVuIHRoZSBpbmNpZGVuY2Ugb3V0cHV0dGVkIGJ5IHRoZSBtb2RlbCBhbmQgdGhlIGluY2lkZW5jZSBpbiB0aGUgcmVmZXJlbmNlIGRhdGEuPC9wPgorCis8cD41LiBSZS1pbml0aWFsaXplLiBJZiB0aGlzIGlzIHNldCB0byBZZXMsIHRoZSBhdXRvbWF0aWMgZXhwZXJpbWVudCB3aWxsIHJlc3RhcnQgaXRzZWxmIHVzaW5nIHRoZSBjdXJyZW50IGJlc3QgKHNtYWxsZXN0IGVycm9yKSBzZXQgb2YgcGFyYW1ldGVyIHZhbHVlcyBmb3VuZC4gVGhlIGF1dG9tYXRpYyBleHBlcmltZW50IHdpbGwgc3RvcCBvZiBpdCBjb252ZXJnZXMgdG93YXJkcyB0aGUgc2FtZSBtaW5pbWFsIGVycm9yIHR3aWNlIGluIGEgcm93LiBJZiBzZXQgdG8gTm8sIHRoZSBhdXRvbWF0aWMgZXhwZXJpbWVudCB3aWxsIHN0b3Agb25jZSBpdCdzIGNvbnZlcmdlZCB0byBhbiBlcnJvciB2YXJpYXRpb24gc21hbGxlciB0aGFuIHRoZSB0b2xlcmFuY2UuPC9wPgorCis8cD42LiBUb2xlcmFuY2UuIFRoZSBlcnJvciB0b2xlcmFuY2UgZGV0ZXJtaW5pbmcgd2hlbiB0aGUgTmVsZGVyIE1lYWQgYWxnb3JpdGhtIHN0b3BzLiBJZiB0aGUgZXJyb3IgdmFyaWF0aW9uIGJldHdlZW4gbXVsdGlwbGUgc2ltdWxhdGlvbnMgaXMgc21hbGxlciB0aGFuIHRoaXMgdG9sZXJhbmNlLCB0aGUgTmVsZGVyIE1lYWQgYWxnb3JpdGhtIGVpdGhlciBzdG9wcyBvciByZXN0YXJ0cyBpdHNlbGYuIFRoZSBzbWFsbGVyIHlvdSBtYWtlIHRoZSB0b2xlcmFuY2UgdGhlIG1vcmUgc2ltdWxhdGlvbnMgYXJlIG5lZWRlZCBmb3IgY29udmVyZ2VuY2UsIGJ1dCB0aGUgcmVzdWx0aW5nIHNldCBvZiBwYXJhbWV0ZXIgdmFsdWVzIGJlY29tZXMgbW9yZSBhY2N1cmF0ZS48L3A+CisKKzxwPgorSW4gdGhlIHdpbmRvdyBpbiB0aGUgYm90dG9tIGxlZnQgeW91IGNhbiBhZGQgb25lIG9yIG1vcmUgcGFyYW1ldGVyIHRoYXQgeW91IHdhbnQgdG8gb3B0aW1pemUgaW4gdGhlIGF1dG9tYXRpYyBleHBlcmltZW50LiBJZiB5b3UgY2xpY2sgdGhlICsgYnV0dG9uIGJlbG93IHRoZSB3aW5kb3csIGEgZGlhbG9nIHNob3dzIHVwIGRpc3BsYXlpbmcgb24gdGhlIGxlZnQgYWxsIG9iamVjdHMgaW5zaWRlIHlvdXIgY3VycmVudCBwcm9qZWN0IHRoYXQgaGFzIHBhcmFtZXRlcnMgeW91IGNhbiBvcHRpbWl6ZS4KK1RoZSBvYmplY3RzIGluY2x1ZGVzIERpc2Vhc2UgTW9kZWxzLCBJbmZlY3RvcnMgYW5kIElub2N1bGF0b3JzLiBJZiB5b3Ugc2VsZWN0IGFueSBvYmplY3Qgb24gdGhlIGxlZnQsIGEgbGlzdCBvZiB0aGUgb2JqZWN0IHBhcmFtZXRlcnMgYXJlIHNob3duIG9uIHRoZSByaWdodC4gSWYgeW91IHNlbGVjdCBvbmUgb2YgdGhlbSBhbmQgY2xpY2sgT2theSwgaXQgd2lsbCBzaG93IHVwIGlvbiB0aGUgYm90dG9tIGxlZnQgd2luZG93IGFuZCB3aWxsIGJlIGFkZGVkIHRvIHRoZSBzZXQgb2YgcGFyYW1ldGVycyB2YXJpZWQgYnkgdGhlIE5lZGxlciBNZWFkIGFsZ29yaXRobS4gSWYgeW91IHNlbGVjdCB0aGUgcGFyYW1ldGVyIGluIHRoZSB3aW5kb3csIHlvdSBjYW4gc3BlY2lmeSB0aGUgaW5pdGlhbCB2YWx1ZSBmb3IgdGhlIHBhcmFtZXRlciBvbiB0aGUgYm90dG9tIHJpZ2h0LiBZb3UgY2FuIGFsc28gc3BlY2lmeSBhbiBpbml0aWFsIHN0ZXAgc2l6ZSBhbmQgYSBtYXhpbXVtIGFuZCBtaW5pbSB2YWx1ZSBmb3IgdGhlIHBhcmFtZXRlciB1c2VkIGJ5IHRoZSBvcHRpbWl6ZXIuCis8L3A+CisKKzxwPllvdSBjYW4gYWRkIGFzIG1hbnkgcGFyYW1ldGVycyBhcmUgeW91IHdhbnQgdG8gdGhlIGF1dG9tYXRpYyBleHBlcmltZW50LCBidXQgdGhlIG1vcmUgcGFyYW1ldGVycyB5b3UgaGF2ZSB0aGUgbGFyZ2VyIHRoZSBwYXJhbWV0ZXIgc3BhY2UgYW5kIHRoZSBsb25nZXIgaXQgbWlnaHQgdGFrZSBmb3IgdGhlIGFsZ29yaXRobSB0byBjb252ZXJnZS48L3A+CisKKzxwPk9mdGVuIGNvbnZlcmdlbmNlIHRvIGEgZ2xvYmFsIG1pbmltYSBjYW4gYmUgcmVhY2hlZCBxdWlja2VyIGJ5IG1hbnVhbGx5IHJlc3RhcnRpbmcgdGhlIGF1dG9tYXRlZCBleHBlcmltZW50IG9uIHRoZSBDb250cm9scyB0YWIuIElmIGl0IHNlZW1zIHRoYXQgdGhlIGVycm9yIHZhcmlhdGlvbiBpcyBzbWFsbCwgcmVzdGFydCB0aGUgYWxnb3JpdGhtIGFnYWluIHVzaW5nIHRoZSBiZXN0IHNldCBvZiBwYXJhbWV0ZXJzLiBUaGlzIGNhbiBvZnRlbiBzcGVlZCB0aGluZ3MgdXAgY29tcGFyZWQgdG8gd2FpdGluZyBmb3IgY29udmVyZ2VuY2UgYmVsb3cgdGhlIHRvbGVyYW5jZS5kLk5ldC5JbmYuUHJvcG9ydGlvbjogRnJhY3Rpb24gcGVyIFJvYWQKKzwvcD4KKzwvYm9keT4KKzwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC9pbnRlcmZhY2Uvd2l6YXJkcy9kaXNlYXNld2l6YXJkLmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC9pbnRlcmZhY2Uvd2l6YXJkcy9kaXNlYXNld2l6YXJkLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzk4NzM2OAotLS0gL2Rldi9udWxsCisrKyBiL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2ludGVyZmFjZS93aXphcmRzL2Rpc2Vhc2V3aXphcmQuaHRtbApAQCAtMCwwICsxLDMxIEBACis8IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIvaHRtbDQvbG9vc2UuZHRkIj4KKzxodG1sPgorPGhlYWQ+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0xIj4KKzx0aXRsZT5OZXcgRGlzZWFzZSBXaXphcmQ8L3RpdGxlPgorPC9oZWFkPgorPGJvZHk+Cis8cD5UaGUgPGVtPk5ldyBEaXNlYXNlIFdpemFyZDwvZW0+IGlzIHVzZWQgdG8gY3JlYXRlIGFuZCBkZWZpbmUgdGhlCitwcm9wZXJ0aWVzIG9mIGEgbmV3IERpc2Vhc2UuIEEgZmlsZSBuYW1lIGZvciB0aGUgbmV3IGluc3RhbmNlIGFsb25nIHdpdGggdGhlIERpc2Vhc2UgTmFtZSBtdXN0IGJlIHByb3ZpZGVkLjwvcD4KKzxwPlBhcmFtZXRlcnMgdGhhdCBjYW4gYmUgc3BlY2lmaWVkIGRlcGVuZHMgdXBvbiB0aGUgcGFydGljdWxhciBkaXNlYXNlIG1vZGVsIHNlbGVjdGVkIGluIHRoZSBEaXNlYXNlIE1vZGVsIGRyb3AtZG93bi4gCitGb3IgZXhhbXBsZSwgZm9yIGFuIFNJIG1vZGVsLCB0aGUgcGFyYW1ldGVycyBhcmU6Cis8dWw+CisJPGxpPkRpc2Vhc2UgTmFtZTwvbGk+CisJPGxpPlBvcHVsYXRpb246IGkuZS4sIGh1bWFuPC9saT4KKwk8bGk+VGltZSBQZXJpb2QgKFRQKTogSW4gbWlsbGlzZWNvbmRzLCB0aGUgcmVmZXJlbmNlIHRpbWUgcGVyaW9kIGFsbCByYXRlcyBhcmUgaW4gcmVsYXRpb24gdG8uPC9saT4KKwk8bGk+RnJlcXVlbmN5IERlcGVuZGVudDogWWVzIG9yIE5vLiBJZiBObywgdGhlIGRpc2Vhc2UgbW9kZWwgYXNzdW1lcyBkZW5zaXR5IGRlcGVuZGVuY3kgYW5kIHRyYW5zbWlzc2lvbiByYXRlcyBhcmUgc2NhbGVkIGFjY29yZGluZyB0byB0aGUgbG9jYWwgcG9wdWxhdGlvbiBkZW5zaXR5LjwvbGk+CisJPGxpPlJlZmVyZW5jZSBQb3AgRGVuc2l0eTogUE0vU1EgS00uIFRoZSByZWZlcmVuY2UgZGVuc2l0eSwgb25seSB1c2VkIHdoZW4gZnJlcXVlbmN5IGRlcGVuZGVudCBpcyBObzwvbGk+CisJPGxpPlRyYW5zbWlzc2lvbiBSYXRlICgmYmV0YTspLiAgVGhpcyBpcyB0aGUgdHJhbnNtaXNzaW9uIChvciBjb250YWN0KSByYXRlLCBub3QgdGhlIGJhc2ljIHJlcHJvZHVjdGl2ZSBudW1iZXIgKFI8c3ViPm88L3N1Yj4pLgorCUlmICdzJyByZXByZXNlbnRzIHRoZSBmcmFjdGlvbiBvZiB0aGUgcG9wdWxhdGlvbiB0aGF0IGlzIHN1c2NlcHRpYmxlLCBSPHN1Yj5vPC9zdWI+fnMmYmV0YTsvKCZnYW1tYTsgKyAmbXU7KS48L2xpPiAKKwk8bGk+Tm9uLUxpbmVhcml0eSBDb2VmZmljaWVudCAoJm51Oyk6IFR5cGljYWxseSAmbnU7PTEuIE11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIDAuMC4gSW5jaWRlbmNlIGlzICZiZXRhOypTKkk8c3VwPiZudTs8L3N1cD4gPC9saT4KKwk8bGk+SW5mZWN0aW91cyBSZWNvdmVyeSBSYXRlICgmZ2FtbWE7KTogUE0vVFAqPC9saT4KKwk8bGk+SW5mZWN0aW91cyBNb3J0YWxpdHkgUmF0ZSAoJm11OyAmaW90YTspOiBQTS9UUCo8L2xpPgorCTxsaT5DaGFyYWN0ZXJpc3RpYyBNaXhpbmcgRGlzdGFuY2U6IEluIGtpbG9tZXRlcnMsIHRoZSBkaXN0YW5jZSB0aHJlc2hvbGQgd2hlcmUgdGhlIHBvcHVsYXRpb24gaXMgYXNzdW1lZCBmdWxseSBtaXhlZC48L2xpPgorCTxsaT5Sb2FkLk5ldC5JbmYuUHJvcG9ydGlvbjogRnJhY3Rpb24gcGVyIFJvYWQ8L2xpPgorPC91bD48L3A+CisKKzxpbWcgc3JjPSJpbWcvZGlzZWFzZXdpemFyZDEuanBnIiAvPgorPGltZyBzcmM9ImltZy9kaXNlYXNld2l6YXJkMi5qcGciIC8+Cis8aW1nIHNyYz0iaW1nL2Rpc2Vhc2Vwcm9wZXJ0aWVzLmpwZyIgLz4KKzwvYm9keT4KKzwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC9pbnRlcmZhY2Uvd2l6YXJkcy9leHBlcmltZW50d2l6YXJkLmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC9pbnRlcmZhY2Uvd2l6YXJkcy9leHBlcmltZW50d2l6YXJkLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYThkMzI3OAotLS0gL2Rldi9udWxsCisrKyBiL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2ludGVyZmFjZS93aXphcmRzL2V4cGVyaW1lbnR3aXphcmQuaHRtbApAQCAtMCwwICsxLDE0IEBACis8IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIvaHRtbDQvbG9vc2UuZHRkIj4KKzxodG1sPgorPGhlYWQ+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0xIj4KKzx0aXRsZT5OZXcgRXhwZXJpbWVudDwvdGl0bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxwPlRoZSA8ZW0+TmV3IEV4cGVyaW1lbnQgV2l6YXJkPC9lbT4gaXMgdXNlZCB0byBjcmVhdGUgYW5kIGRlZmluZSB0aGUKK3Byb3BlcnRpZXMgb2YgYSBuZXcgPGEgaHJlZj0iLi4vLi4vY29uY2VwdHMvbW9kZWxpbmdmcmFtZXdvcmsuaHRtbCNleHBlcmltZW50Ij4gRXhwZXJpbWVudDwvYT4uCitBIG5hbWUgZm9yIHRoZSBFeHBlcmltZW50IG11c3QgYmUgcHJvdmlkZWQuIEV4cGVyaW1lbnRzIGNvbnRhaW4gYSBiYXNlIHNjZW5hcmlvLCBhcyB3ZWxsIGFzIG9uZSBvcgorbW9yZSBNb2RpZmllcnM8L3A+Cis8aW1nIHNyYz0iaW1nL2V4cGVyaW1lbnR3aXphcmQxLmpwZyIgLz4KKzxpbWcgc3JjPSJpbWcvZXhwZXJpbWVudHdpemFyZDIuanBnIiAvPgorPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2ludGVyZmFjZS93aXphcmRzL2dyYXBod2l6YXJkLmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC9pbnRlcmZhY2Uvd2l6YXJkcy9ncmFwaHdpemFyZC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI0YTljOGYKLS0tIC9kZXYvbnVsbAorKysgYi9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC9pbnRlcmZhY2Uvd2l6YXJkcy9ncmFwaHdpemFyZC5odG1sCkBAIC0wLDAgKzEsMjIgQEAKKzwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi9odG1sNC9sb29zZS5kdGQiPgorPGh0bWw+Cis8aGVhZD4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTEiPgorPHRpdGxlPk5ldyBHcmFwaDwvdGl0bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxwPlRoZSA8ZW0+TmV3IEdyYXBoIFdpemFyZDwvZW0+IGlzIHVzZWQgdG8gY3JlYXRlIGFuZCBkZWZpbmUgdGhlCitwcm9wZXJ0aWVzIG9mIGEgbmV3IDxhIGhyZWY9Ii4uLy4uL2NvbmNlcHRzL21vZGVsaW5nZnJhbWV3b3JrLmh0bWwjZ3JhcGgiPiBHcmFwaDwvYT4uCitBIG5hbWUgZm9yIHRoZSBHcmFwaCBtdXN0IGJlIHByb3ZpZGVkLjwvcD4KKzxwPlByb3BlcnRpZXMgdGhhdCBjYW4gYmUgc3BlY2lmaWVkIGRlcGVuZHMgdXBvbiB0aGUgc291cmNlIHNlbGVjdGVkIGluIHRoZSBkcm9wLWRvd24uIEZvciBhIHNxdWFyZSBsYXR0aWNlIGdyYXBoLAordGhlIHByb3BlcnRpZXMgYXJlOgorPHVsPjxsaT5Tb3VyY2U6IERyb3AtZG93biBtZW51IHNlbGVjdGlvbjwvbGk+CisJPGxpPlggU2l6ZSAoVW5pdHMpPC9saT4KKwk8bGk+WSBTaXplIChVbml0cyk8L2xpPgorCTxsaT5OZWFyZXN0IE5laWdoYm9yczogWWVzIG9yIE5vPC9saT4KKwk8bGk+TmV4dCBOZWFyZXN0IE5laWdoYm9yczogWWVzIG9yIE5vPC9saT4KKwk8bGk+UGVyaW9kaWMgQm91bmRhcmllczogWWVzIG9yIE5vPC9saT4KKzwvdWw+PC9wPgorPGltZyBzcmM9ImltZy9ncmFwaHdpemFyZDEuanBnIiAvPgorPGltZyBzcmM9ImltZy9ncmFwaHdpemFyZDIuanBnIiAvPgorPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2ludGVyZmFjZS93aXphcmRzL2ltZy9hdXRvbWF0aWNleHBlcmltZW50cGVyc3AuanBnIGIvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL3dpemFyZHMvaW1nL2F1dG9tYXRpY2V4cGVyaW1lbnRwZXJzcC5qcGcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjhlNjIzMQotLS0gL2Rldi9udWxsCisrKyBiL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2ludGVyZmFjZS93aXphcmRzL2ltZy9hdXRvbWF0aWNleHBlcmltZW50cGVyc3AuanBnCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2ludGVyZmFjZS93aXphcmRzL2ltZy9hdXRvbWF0aWNleHBlcmltZW50d2l6YXJkLmpwZyBiL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2ludGVyZmFjZS93aXphcmRzL2ltZy9hdXRvbWF0aWNleHBlcmltZW50d2l6YXJkLmpwZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZDk0ZjA4Ci0tLSAvZGV2L251bGwKKysrIGIvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL3dpemFyZHMvaW1nL2F1dG9tYXRpY2V4cGVyaW1lbnR3aXphcmQuanBnCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2ludGVyZmFjZS93aXphcmRzL2ltZy9kaXNlYXNlcHJvcGVydGllcy5qcGcgYi9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC9pbnRlcmZhY2Uvd2l6YXJkcy9pbWcvZGlzZWFzZXByb3BlcnRpZXMuanBnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIyZTVhNDAKLS0tIC9kZXYvbnVsbAorKysgYi9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC9pbnRlcmZhY2Uvd2l6YXJkcy9pbWcvZGlzZWFzZXByb3BlcnRpZXMuanBnCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2ludGVyZmFjZS93aXphcmRzL2ltZy9kaXNlYXNld2l6YXJkMS5qcGcgYi9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC9pbnRlcmZhY2Uvd2l6YXJkcy9pbWcvZGlzZWFzZXdpemFyZDEuanBnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg3ZWNmODgKLS0tIC9kZXYvbnVsbAorKysgYi9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC9pbnRlcmZhY2Uvd2l6YXJkcy9pbWcvZGlzZWFzZXdpemFyZDEuanBnCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2ludGVyZmFjZS93aXphcmRzL2ltZy9kaXNlYXNld2l6YXJkMi5qcGcgYi9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC9pbnRlcmZhY2Uvd2l6YXJkcy9pbWcvZGlzZWFzZXdpemFyZDIuanBnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZmNWI4ODUKLS0tIC9kZXYvbnVsbAorKysgYi9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC9pbnRlcmZhY2Uvd2l6YXJkcy9pbWcvZGlzZWFzZXdpemFyZDIuanBnCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2ludGVyZmFjZS93aXphcmRzL2ltZy9lcnJvcmZ1bmMuanBnIGIvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL3dpemFyZHMvaW1nL2Vycm9yZnVuYy5qcGcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWI0MTM4NwotLS0gL2Rldi9udWxsCisrKyBiL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2ludGVyZmFjZS93aXphcmRzL2ltZy9lcnJvcmZ1bmMuanBnCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2ludGVyZmFjZS93aXphcmRzL2ltZy9leHBlcmltZW50d2l6YXJkMS5qcGcgYi9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC9pbnRlcmZhY2Uvd2l6YXJkcy9pbWcvZXhwZXJpbWVudHdpemFyZDEuanBnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMxOGUyNTcKLS0tIC9kZXYvbnVsbAorKysgYi9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC9pbnRlcmZhY2Uvd2l6YXJkcy9pbWcvZXhwZXJpbWVudHdpemFyZDEuanBnCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2ludGVyZmFjZS93aXphcmRzL2ltZy9leHBlcmltZW50d2l6YXJkMi5qcGcgYi9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC9pbnRlcmZhY2Uvd2l6YXJkcy9pbWcvZXhwZXJpbWVudHdpemFyZDIuanBnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMyM2E1NWQKLS0tIC9kZXYvbnVsbAorKysgYi9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC9pbnRlcmZhY2Uvd2l6YXJkcy9pbWcvZXhwZXJpbWVudHdpemFyZDIuanBnCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2ludGVyZmFjZS93aXphcmRzL2ltZy9ncmFwaHdpemFyZDEuanBnIGIvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL3dpemFyZHMvaW1nL2dyYXBod2l6YXJkMS5qcGcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzI4MDlkMwotLS0gL2Rldi9udWxsCisrKyBiL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2ludGVyZmFjZS93aXphcmRzL2ltZy9ncmFwaHdpemFyZDEuanBnCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2ludGVyZmFjZS93aXphcmRzL2ltZy9ncmFwaHdpemFyZDIuanBnIGIvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL3dpemFyZHMvaW1nL2dyYXBod2l6YXJkMi5qcGcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2RjYTM1MAotLS0gL2Rldi9udWxsCisrKyBiL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2ludGVyZmFjZS93aXphcmRzL2ltZy9ncmFwaHdpemFyZDIuanBnCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2ludGVyZmFjZS93aXphcmRzL2ltZy9pbmZlY3RvcnByb3BlcnRpZXMuanBnIGIvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL3dpemFyZHMvaW1nL2luZmVjdG9ycHJvcGVydGllcy5qcGcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWZkMTZmZQotLS0gL2Rldi9udWxsCisrKyBiL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2ludGVyZmFjZS93aXphcmRzL2ltZy9pbmZlY3RvcnByb3BlcnRpZXMuanBnCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2ludGVyZmFjZS93aXphcmRzL2ltZy9pbmZlY3RvcndpemFyZDEuanBnIGIvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL3dpemFyZHMvaW1nL2luZmVjdG9yd2l6YXJkMS5qcGcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDIyYjliOQotLS0gL2Rldi9udWxsCisrKyBiL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2ludGVyZmFjZS93aXphcmRzL2ltZy9pbmZlY3RvcndpemFyZDEuanBnCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2ludGVyZmFjZS93aXphcmRzL2ltZy9pbmZlY3RvcndpemFyZDIuanBnIGIvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL3dpemFyZHMvaW1nL2luZmVjdG9yd2l6YXJkMi5qcGcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTM3YTU1NgotLS0gL2Rldi9udWxsCisrKyBiL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2ludGVyZmFjZS93aXphcmRzL2ltZy9pbmZlY3RvcndpemFyZDIuanBnCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2ludGVyZmFjZS93aXphcmRzL2ltZy9tb2RlbHdpemFyZDEuanBnIGIvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL3dpemFyZHMvaW1nL21vZGVsd2l6YXJkMS5qcGcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzE0ODYzMQotLS0gL2Rldi9udWxsCisrKyBiL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2ludGVyZmFjZS93aXphcmRzL2ltZy9tb2RlbHdpemFyZDEuanBnCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2ludGVyZmFjZS93aXphcmRzL2ltZy9tb2RlbHdpemFyZDIuanBnIGIvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL3dpemFyZHMvaW1nL21vZGVsd2l6YXJkMi5qcGcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGVkYjJiOQotLS0gL2Rldi9udWxsCisrKyBiL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2ludGVyZmFjZS93aXphcmRzL2ltZy9tb2RlbHdpemFyZDIuanBnCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2ludGVyZmFjZS93aXphcmRzL2ltZy9tb2RpZmllcndpemFyZDEuanBnIGIvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL3dpemFyZHMvaW1nL21vZGlmaWVyd2l6YXJkMS5qcGcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGQ0YjcxMQotLS0gL2Rldi9udWxsCisrKyBiL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2ludGVyZmFjZS93aXphcmRzL2ltZy9tb2RpZmllcndpemFyZDEuanBnCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2ludGVyZmFjZS93aXphcmRzL2ltZy9tb2RpZmllcndpemFyZDIuanBnIGIvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL3dpemFyZHMvaW1nL21vZGlmaWVyd2l6YXJkMi5qcGcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWM2ZTEyZAotLS0gL2Rldi9udWxsCisrKyBiL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2ludGVyZmFjZS93aXphcmRzL2ltZy9tb2RpZmllcndpemFyZDIuanBnCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2ludGVyZmFjZS93aXphcmRzL2ltZy9tb2RpZmllcndpemFyZDMuanBnIGIvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL3dpemFyZHMvaW1nL21vZGlmaWVyd2l6YXJkMy5qcGcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjUwNzI1ZAotLS0gL2Rldi9udWxsCisrKyBiL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2ludGVyZmFjZS93aXphcmRzL2ltZy9tb2RpZmllcndpemFyZDMuanBnCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2ludGVyZmFjZS93aXphcmRzL2ltZy9tb2RpZmllcndpemFyZDQuanBnIGIvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL3dpemFyZHMvaW1nL21vZGlmaWVyd2l6YXJkNC5qcGcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjlhNjE3YwotLS0gL2Rldi9udWxsCisrKyBiL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2ludGVyZmFjZS93aXphcmRzL2ltZy9tb2RpZmllcndpemFyZDQuanBnCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2ludGVyZmFjZS93aXphcmRzL2ltZy9tb2RpZmllcndpemFyZDUuanBnIGIvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL3dpemFyZHMvaW1nL21vZGlmaWVyd2l6YXJkNS5qcGcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTEwYjM5NAotLS0gL2Rldi9udWxsCisrKyBiL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2ludGVyZmFjZS93aXphcmRzL2ltZy9tb2RpZmllcndpemFyZDUuanBnCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2ludGVyZmFjZS93aXphcmRzL2ltZy9tb2RpZmllcndpemFyZDYuanBnIGIvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL3dpemFyZHMvaW1nL21vZGlmaWVyd2l6YXJkNi5qcGcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjlhYmNkNAotLS0gL2Rldi9udWxsCisrKyBiL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2ludGVyZmFjZS93aXphcmRzL2ltZy9tb2RpZmllcndpemFyZDYuanBnCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2ludGVyZmFjZS93aXphcmRzL2ltZy9waWNrcGFyYW1zLmpwZyBiL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2ludGVyZmFjZS93aXphcmRzL2ltZy9waWNrcGFyYW1zLmpwZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNWYyMjUxCi0tLSAvZGV2L251bGwKKysrIGIvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL3dpemFyZHMvaW1nL3BpY2twYXJhbXMuanBnCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2ludGVyZmFjZS93aXphcmRzL2ltZy9wb3B1bGF0aW9uaW5pdGlhbGl6ZXJ3aXphcmQxLmpwZyBiL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2ludGVyZmFjZS93aXphcmRzL2ltZy9wb3B1bGF0aW9uaW5pdGlhbGl6ZXJ3aXphcmQxLmpwZwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi45ZWY2YjJiCi0tLSAvZGV2L251bGwKKysrIGIvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL3dpemFyZHMvaW1nL3BvcHVsYXRpb25pbml0aWFsaXplcndpemFyZDEuanBnCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2ludGVyZmFjZS93aXphcmRzL2ltZy9wb3B1bGF0aW9uaW5pdGlhbGl6ZXJ3aXphcmQyLmpwZyBiL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2ludGVyZmFjZS93aXphcmRzL2ltZy9wb3B1bGF0aW9uaW5pdGlhbGl6ZXJ3aXphcmQyLmpwZwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5iM2Q1N2MyCi0tLSAvZGV2L251bGwKKysrIGIvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL3dpemFyZHMvaW1nL3BvcHVsYXRpb25pbml0aWFsaXplcndpemFyZDIuanBnCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2ludGVyZmFjZS93aXphcmRzL2ltZy9wb3B1bGF0aW9ud2l6YXJkMS5qcGcgYi9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC9pbnRlcmZhY2Uvd2l6YXJkcy9pbWcvcG9wdWxhdGlvbndpemFyZDEuanBnCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjRjMTBjNTQKLS0tIC9kZXYvbnVsbAorKysgYi9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC9pbnRlcmZhY2Uvd2l6YXJkcy9pbWcvcG9wdWxhdGlvbndpemFyZDEuanBnCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2ludGVyZmFjZS93aXphcmRzL2ltZy9wb3B1bGF0aW9ud2l6YXJkMi5qcGcgYi9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC9pbnRlcmZhY2Uvd2l6YXJkcy9pbWcvcG9wdWxhdGlvbndpemFyZDIuanBnCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmIyODI3YWQKLS0tIC9kZXYvbnVsbAorKysgYi9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC9pbnRlcmZhY2Uvd2l6YXJkcy9pbWcvcG9wdWxhdGlvbndpemFyZDIuanBnCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2ludGVyZmFjZS93aXphcmRzL2ltZy9wcmVkaWNhdGV3aXphcmQxLmpwZyBiL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2ludGVyZmFjZS93aXphcmRzL2ltZy9wcmVkaWNhdGV3aXphcmQxLmpwZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NTEwMmQwCi0tLSAvZGV2L251bGwKKysrIGIvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL3dpemFyZHMvaW1nL3ByZWRpY2F0ZXdpemFyZDEuanBnCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2ludGVyZmFjZS93aXphcmRzL2ltZy9wcmVkaWNhdGV3aXphcmQyLmpwZyBiL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2ludGVyZmFjZS93aXphcmRzL2ltZy9wcmVkaWNhdGV3aXphcmQyLmpwZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMDQzOGMzCi0tLSAvZGV2L251bGwKKysrIGIvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL3dpemFyZHMvaW1nL3ByZWRpY2F0ZXdpemFyZDIuanBnCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2ludGVyZmFjZS93aXphcmRzL2ltZy9yZWFsdGltZXNlcXVlbmNlcndpemFyZDEuanBnIGIvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL3dpemFyZHMvaW1nL3JlYWx0aW1lc2VxdWVuY2Vyd2l6YXJkMS5qcGcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWFhY2Q4ZQotLS0gL2Rldi9udWxsCisrKyBiL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2ludGVyZmFjZS93aXphcmRzL2ltZy9yZWFsdGltZXNlcXVlbmNlcndpemFyZDEuanBnCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2ludGVyZmFjZS93aXphcmRzL2ltZy9yZWFsdGltZXNlcXVlbmNlcndpemFyZDIuanBnIGIvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL3dpemFyZHMvaW1nL3JlYWx0aW1lc2VxdWVuY2Vyd2l6YXJkMi5qcGcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTY4NGM5NAotLS0gL2Rldi9udWxsCisrKyBiL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2ludGVyZmFjZS93aXphcmRzL2ltZy9yZWFsdGltZXNlcXVlbmNlcndpemFyZDIuanBnCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2ludGVyZmFjZS93aXphcmRzL2ltZy9zY2VuYXJpb3dpemFyZDEuanBnIGIvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL3dpemFyZHMvaW1nL3NjZW5hcmlvd2l6YXJkMS5qcGcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjY1OWJhYwotLS0gL2Rldi9udWxsCisrKyBiL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2ludGVyZmFjZS93aXphcmRzL2ltZy9zY2VuYXJpb3dpemFyZDEuanBnCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2ludGVyZmFjZS93aXphcmRzL2ltZy9zY2VuYXJpb3dpemFyZDIuanBnIGIvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL3dpemFyZHMvaW1nL3NjZW5hcmlvd2l6YXJkMi5qcGcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjc4NGE4MQotLS0gL2Rldi9udWxsCisrKyBiL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2ludGVyZmFjZS93aXphcmRzL2ltZy9zY2VuYXJpb3dpemFyZDIuanBnCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2ludGVyZmFjZS93aXphcmRzL2ltZy9zZXF1ZW50aWFsc2VxdWVuY2Vyd2l6YXJkMS5qcGcgYi9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC9pbnRlcmZhY2Uvd2l6YXJkcy9pbWcvc2VxdWVudGlhbHNlcXVlbmNlcndpemFyZDEuanBnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA4NmFiMWIKLS0tIC9kZXYvbnVsbAorKysgYi9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC9pbnRlcmZhY2Uvd2l6YXJkcy9pbWcvc2VxdWVudGlhbHNlcXVlbmNlcndpemFyZDEuanBnCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2ludGVyZmFjZS93aXphcmRzL2ltZy9zZXF1ZW50aWFsc2VxdWVuY2Vyd2l6YXJkMi5qcGcgYi9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC9pbnRlcmZhY2Uvd2l6YXJkcy9pbWcvc2VxdWVudGlhbHNlcXVlbmNlcndpemFyZDIuanBnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAyMWYxYWQKLS0tIC9kZXYvbnVsbAorKysgYi9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC9pbnRlcmZhY2Uvd2l6YXJkcy9pbWcvc2VxdWVudGlhbHNlcXVlbmNlcndpemFyZDIuanBnCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2ludGVyZmFjZS93aXphcmRzL2ltZy9zdGVtcHJvamVjdHdpemFyZDEuanBnIGIvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL3dpemFyZHMvaW1nL3N0ZW1wcm9qZWN0d2l6YXJkMS5qcGcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGQ1MzAyZQotLS0gL2Rldi9udWxsCisrKyBiL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2ludGVyZmFjZS93aXphcmRzL2ltZy9zdGVtcHJvamVjdHdpemFyZDEuanBnCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2ludGVyZmFjZS93aXphcmRzL2ltZy90cmlnZ2Vyd2l6YXJkMS5qcGcgYi9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC9pbnRlcmZhY2Uvd2l6YXJkcy9pbWcvdHJpZ2dlcndpemFyZDEuanBnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYzNjY4YTgKLS0tIC9kZXYvbnVsbAorKysgYi9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC9pbnRlcmZhY2Uvd2l6YXJkcy9pbWcvdHJpZ2dlcndpemFyZDEuanBnCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2ludGVyZmFjZS93aXphcmRzL2ltZy90cmlnZ2Vyd2l6YXJkMi5qcGcgYi9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC9pbnRlcmZhY2Uvd2l6YXJkcy9pbWcvdHJpZ2dlcndpemFyZDIuanBnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRkZDQ5ZWMKLS0tIC9kZXYvbnVsbAorKysgYi9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC9pbnRlcmZhY2Uvd2l6YXJkcy9pbWcvdHJpZ2dlcndpemFyZDIuanBnCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2ludGVyZmFjZS93aXphcmRzL2luZmVjdG9yd2l6YXJkLmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC9pbnRlcmZhY2Uvd2l6YXJkcy9pbmZlY3RvcndpemFyZC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE5YWMyMTEKLS0tIC9kZXYvbnVsbAorKysgYi9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC9pbnRlcmZhY2Uvd2l6YXJkcy9pbmZlY3RvcndpemFyZC5odG1sCkBAIC0wLDAgKzEsMzAgQEAKKzwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi9odG1sNC9sb29zZS5kdGQiPgorPGh0bWw+Cis8aGVhZD4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTEiPgorPHRpdGxlPk5ldyBJbmZlY3RvciBXaXphcmQ8L3RpdGxlPgorPC9oZWFkPgorPGJvZHk+Cis8cD5UaGUgPGVtPk5ldyBJbmZlY3Rvci9Jbm9jdWxhdG9yIFdpemFyZDwvZW0+IGlzIHVzZWQgdG8gY3JlYXRlIGFuZCBkZWZpbmUgdGhlCitwcm9wZXJ0aWVzIG9mIGEgbmV3IEluZmVjdG9yIG9yIElub2N1bGF0b3IuIEEgTmFtZSBhbmQgRGlzZWFzZSBOYW1lIG11c3QgYmUgcHJvdmlkZWQuPC9wPgorPHA+UHJvcGVydGllcyB0aGF0IGNhbiBiZSBzcGVjaWZpZWQgd2l0aGluIHRoZSBOZXcgSW5mZWN0b3IvSW5vY3VsYXRvciBXaXphcmQgYXJlOiAKKworPHVsPjxsaT5XaGV0aGVyIHRvIGNyZWF0ZSBhIE5ldyBJbmZlY3RvciBvciBhIE5ldyBJbm9jdWxhdG9yPC9saT4KKwk8bGk+RGlzZWFzZSBOYW1lPC9saT4KKwk8bGk+UG9wdWxhdGlvbjogaS5lLiwgaHVtYW48L2xpPgorPC91bD4KK0lmIHRoZSBkYXRhIGlzIHRvIGJlIGVudGVyZWQgbWFudWFsbHkgKHNwZWNpZmllZCBieSBjbGlja2luZyAiRW50ZXIgTWFudWFsbHkiKSwgeW91IG5lZWQgdG8gcHJvdmlkZToKKzx1bD48bGk+V2hldGhlciB0byBpbmZlY3QvaW5vY3VsYXRlIGFuIGFic29sdXRlIG51bWJlciBvciBhIHBlcmNlbnRhZ2Ugb2YgdGhlIHBvcHVsYXRpb248L2xpPgorCTxsaT5UaGUgbnVtYmVyIChvciBwZXJjZW50KSB0byBpbmZlY3QvaW5vY3VsYXRlPC9saT4KKwk8bGk+VGhlIGxvY2F0aW9uIHRvIGluZmVjdC9pbm9jdWxhdGUgYXQuPC9saT4KKzwvdWw+CitJZiBkYXRhIGlzIHRvIGJlIGltcG9ydGVkIGZyb20gYSBmaWxlIChzcGVjaWZpZWQgYnkgY2xpY2tpbmcgIkltcG9ydCBmcm9tIFNURU0gbG9nIGZpbGVzKSwgeW91IG5lZWQgdG8gcHJvdmlkZToKKzx1bD48bGk+V2hldGhlciB0byBpbmZlY3QvaW5vY3VsYXRlIGFuIGFic29sdXRlIG51bWJlciBvciBhIHBlcmNlbnRhZ2Ugb2YgdGhlIHBvcHVsYXRpb248L2xpPgorCTxsaT5UaGUgbG9jYXRpb24gb2YgYSBTVEVNIGxvZyBmb2xkZXI8L2xpPgorCTxsaT5UaGUgcm93IHRvIHVzZSB0byBpbmZlY3Qgb3IgaW5vY3VsYXRlIGZyb208L2xpPgorPC91bD4KKwkKKzxpbWcgc3JjPSJpbWcvaW5mZWN0b3J3aXphcmQxLmpwZyIgLz4KKzxpbWcgc3JjPSJpbWcvaW5mZWN0b3J3aXphcmQyLmpwZyIgLz4KKzxpbWcgc3JjPSJpbWcvaW5mZWN0b3Jwcm9wZXJ0aWVzLmpwZyIgLz4KKzwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC9pbnRlcmZhY2Uvd2l6YXJkcy9tb2RlbHdpemFyZC5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL3dpemFyZHMvbW9kZWx3aXphcmQuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZjgyZWRhCi0tLSAvZGV2L251bGwKKysrIGIvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL3dpemFyZHMvbW9kZWx3aXphcmQuaHRtbApAQCAtMCwwICsxLDE0IEBACis8IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIvaHRtbDQvbG9vc2UuZHRkIj4KKzxodG1sPgorPGhlYWQ+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0xIj4KKzx0aXRsZT5OZXcgTW9kZWw8L3RpdGxlPgorPC9oZWFkPgorPGJvZHk+Cis8cD5UaGUgPGVtPk5ldyBNb2RlbCBXaXphcmQ8L2VtPiBpcyB1c2VkIHRvIGNyZWF0ZSBhbmQgZGVmaW5lIHRoZQorcHJvcGVydGllcyBvZiBhIG5ldyA8YSBocmVmPSIuLi8uLi9jb25jZXB0cy9tb2RlbGluZ2ZyYW1ld29yay5odG1sI21vZGVsIj4gTW9kZWw8L2E+LgorQSBuYW1lIG11c3QgYmUgcHJvdmlkZWQgZm9yIHRoZSBtb2RlbC4gTW9kZWxzIGFyZSBjb250YWluZXJzIGZvciBncmFwaHMsIGRpc2Vhc2UgbW9kZWxzLCBwb3B1bGF0aW9uIG1vZGVscywgcG9wdWxhdGlvbiAKK2luaXRpYWxpemVycyBhcyB3ZWxsIGFzIG90aGVyIG1vZGVsczwvcD4KKzxpbWcgc3JjPSJpbWcvbW9kZWx3aXphcmQxLmpwZyIgLz4KKzxpbWcgc3JjPSJpbWcvbW9kZWx3aXphcmQyLmpwZyIgLz4KKzwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC9pbnRlcmZhY2Uvd2l6YXJkcy9tb2RpZmllcndpemFyZC5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL3dpemFyZHMvbW9kaWZpZXJ3aXphcmQuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNjQxNjlkCi0tLSAvZGV2L251bGwKKysrIGIvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL3dpemFyZHMvbW9kaWZpZXJ3aXphcmQuaHRtbApAQCAtMCwwICsxLDMxIEBACis8IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIvaHRtbDQvbG9vc2UuZHRkIj4KKzxodG1sPgorPGhlYWQ+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0xIj4KKzx0aXRsZT5OZXcgTW9kaWZpZXI8L3RpdGxlPgorPC9oZWFkPgorPGJvZHk+Cis8cD5UaGUgPGVtPk5ldyBNb2RpZmllciBXaXphcmQ8L2VtPiBpcyB1c2VkIHRvIGNyZWF0ZSBhbmQgZGVmaW5lIHRoZQorcHJvcGVydGllcyBvZiBhIG5ldyA8YSBocmVmPSIuLi8uLi9jb25jZXB0cy9tb2RlbGluZ2ZyYW1ld29yay5odG1sI21vZGlmaWVyIj4gTW9kaWZpZXI8L2E+LiAgSXQgaXMgYSAKK2JpdCBkaWZmZXJlbnQgZnJvbSB0aGUgb3RoZXIgd2l6YXJkcyBpbiB0aGF0IGl0IGlzIGludm9rZWQgZnJvbSB0aGUgY29udGV4dCBtZW51CitvZiBzZWxlY3RlZCBTVEVNIGNvbXBvbmVudHMgdGhhdCBjYW4gYmUgbW9kaWZpZWQuICBJbiB0aGUgaW1hZ2UgYmVsb3csIHRoZSBidWlsdC1pbgorZGlzZWFzZSBtb2RlbCBmb3IgdGhlIE1leGljbyBVU0EgUGFuZGVtaWMgRmx1IFNjZW5hcmlvIERlbW8gaXMgc2VsZWN0ZWQgYW5kIHRoZSBjb250ZXh0IG1lbnUgZGlzcGxheWVkLgorPC9wPiAKKzxpbWcgc3JjPSJpbWcvbW9kaWZpZXJ3aXphcmQxLmpwZyIgLz4KKzxwPgorVGhlIHJlc3VsdGluZyB3aXphcmQgaXMgaW4gdGhlIG5leHQgaW1hZ2UuICBJdCBzaG93cyB0aGUgYXR0cmlidXRlcyBvZiB0aGUgZGlzZWFzZSBtb2RlbCB0aGF0CitjYW4gYmUgbW9kaWZpZWQuICBJbiB0aGUgZXhhbXBsZSwgYSA8YSBocmVmPSIuLi8uLi9jb25jZXB0cy9tb2RlbGluZ2ZyYW1ld29yay5odG1sI3JhbmdlbW9kaWZpZXIiPiAKK1JhbmdlIE1vZGlmaWVyPC9hPiBmb3IgdGhlIDxlbT5UcmFuc21pc3Npb24gUmF0ZTwvZW0+IGhhcyBiZWVuIAorY3JlYXRlZCB0aGF0IHNldHMgdGhlIGluaXRpYWwgdmFsdWUgdG8gMi4wIGFuZCB0aGVuIGluY3JlbWVudHMgaXQgYnkgMC4xIHVudGlsIDIuNSAoaW5jbHVzaXZlKS4KK0luIHRoZSBleGFtcGxlLCB0aGUgPGVtPkRpc2Vhc2UgTmFtZTwvZW0+IGFuZCA8ZW0+UG9wdWxhdGlvbjwvZW0+IGFyZSBncmF5ZWQgb3V0LCBpbmRpY2F0aW5nCit0aGF0IG5vIG1vZGlmaWVyIGNhbiBiZSBzcGVjaWZpZWQgZm9yIHRob3NlIGF0dHJpYnV0ZXMuCis8L3A+Cis8cD4KK1RoZSBjcmVhdGlvbiBvZiA8YSBocmVmPSIuLi8uLi9jb25jZXB0cy9tb2RlbGluZ2ZyYW1ld29yay5odG1sI3NlcXVlbmNlbW9kaWZpZXIiPiAKK1NlcXVlbmNlIE1vZGlmaWVyczwvYT4gaXMgbm90IGltcGxlbWVudGVkIHlldC4KKzwvcD4KKworPGltZyBzcmM9ImltZy9tb2RpZmllcndpemFyZDIuanBnIiAvPgorPGltZyBzcmM9ImltZy9tb2RpZmllcndpemFyZDMuanBnIiAvPgorCis8L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL3dpemFyZHMvcG9wdWxhdGlvbmluaXRpYWxpemVyd2l6YXJkLmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC9pbnRlcmZhY2Uvd2l6YXJkcy9wb3B1bGF0aW9uaW5pdGlhbGl6ZXJ3aXphcmQuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZDE3MTg3Ci0tLSAvZGV2L251bGwKKysrIGIvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL3dpemFyZHMvcG9wdWxhdGlvbmluaXRpYWxpemVyd2l6YXJkLmh0bWwKQEAgLTAsMCArMSwyMiBAQAorPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL2h0bWw0L2xvb3NlLmR0ZCI+DQorPGh0bWw+DQorPGhlYWQ+DQorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9SVNPLTg4NTktMSI+DQorPHRpdGxlPk5ldyBQb3B1bGF0aW9uIEluaXRpYWxpemVyIFdpemFyZDwvdGl0bGU+DQorPC9oZWFkPg0KKzxib2R5Pg0KKzxwPlRoZSA8ZW0+TmV3IFBvcHVsYXRpb24gSW5pdGlhbGl6ZXIgV2l6YXJkPC9lbT4gaXMgdXNlZCB0byBkZWZpbmUgdGhlIGluaXRpYWwgc3RhdGUgb2YgYSBwb3B1bGF0aW9uLiANCitBIG5hbWUgbXVzdCBiZSBwcm92aWRlZCBmb3IgdGhlIFBvcHVsYXRpb24gSW5pdGlhbGl6ZXI8L3A+DQorPHA+UHJvcGVydGllcyB0aGF0IGNhbiBiZSBtYW5pcHVsYXRlZCB3aXRoaW4gdGhlIE5ldyBQb3B1bGF0aW9uIEluaXRpYWxpemVyIFdpemFyZCBkZXBlbmRzIG9uIHRoZSBQb3B1bGF0aW9uIEluaXRpYWxpemVyDQorc2VsZWN0ZWQgZnJvbSB0aGUgZHJvcC1kb3duLiBGb3IgYSBzdGFuZGFyZCBwb3B1bGF0aW9uIGluaXRpYWxpemVyLCB0aGV5IGFyZToNCis8dWw+DQorCTxsaT5JbmRpdmlkdWFsczogQ291bnQgb3IgQ291bnQvU3F1YXJlIEtpbG9tZXRlcnM8L2xpPg0KKwk8bGk+VXNlIERlbnNpdHk6IEluaXRpYWxpemUgdXNpbmcgZGVuc2l0eSBpbnN0ZWFkIG9mIGFuIGFic29sdXRlIG51bWJlcjwvbGk+DQorCTxsaT5Qb3B1bGF0aW9uOiBpLmUuLCBodW1hbjwvbGk+DQorCTxsaT5Mb2NhdGlvbiBJU08gS2V5OiBJZiBubyBsb2NhdGlvbiBpcyBzcGVjaWZpZWQgdGhlIHBvcHVsYXRpb24gaW5pdGlhbGl6ZXIgaXMgYXNzdW1lZCB0byBiZSBnbG9iYWw8L2xpPg0KKzwvdWw+PC9wPg0KKw0KKzxpbWcgc3JjPSJpbWcvcG9wdWxhdGlvbmluaXRpYWxpemVyd2l6YXJkMS5qcGciIC8+DQorPGltZyBzcmM9ImltZy9wb3B1bGF0aW9uaW5pdGlhbGl6ZXJ3aXphcmQyLmpwZyIgLz4NCis8L2JvZHk+DQorPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2ludGVyZmFjZS93aXphcmRzL3BvcHVsYXRpb253aXphcmQuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2ludGVyZmFjZS93aXphcmRzL3BvcHVsYXRpb253aXphcmQuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MTU3NzYyCi0tLSAvZGV2L251bGwKKysrIGIvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL3dpemFyZHMvcG9wdWxhdGlvbndpemFyZC5odG1sCkBAIC0wLDAgKzEsMjMgQEAKKzwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi9odG1sNC9sb29zZS5kdGQiPg0KKzxodG1sPg0KKzxoZWFkPg0KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTEiPg0KKzx0aXRsZT5OZXcgUG9wdWxhdGlvbiBXaXphcmQ8L3RpdGxlPg0KKzwvaGVhZD4NCis8Ym9keT4NCis8cD5UaGUgPGVtPk5ldyBQb3B1bGF0aW9uIE1vZGVsIFdpemFyZDwvZW0+IGlzIHVzZWQgdG8gZGVmaW5lIHRoZSBwcm9wZXJ0aWVzIG9mIGEgbmV3IHBvcHVsYXRpb24gbW9kZWwuIEEgZmlsZSBuYW1lIG11c3QgYmUgcHJvdmlkZWQgZm9yIHRoZSBQb3B1bGF0aW9uIG1vZGVsLjwvcD4NCis8cD5Qcm9wZXJ0aWVzIHRoYXQgY2FuIGJlIG1hbmlwdWxhdGVkIHdpdGhpbiB0aGUgTmV3IFBvcHVsYXRpb24gTW9kZWwgV2l6YXJkIGRlcGVuZHMgb24gdGhlIG1vZGVsIHNlbGVjdGVkIGZyb20gdGhlIGRyb3AtZG93bi4NCitGb3IgYSBzdGFuZGFyZCBwb3B1bGF0aW9uIG1vZGVsIHRoZXkgYXJlOg0KKzx1bD4NCisJPGxpPlBvcHVsYXRpb246IGkuZS4sIGh1bWFuPC9saT4NCisJPGxpPk1vZGVsIE5hbWU8L2xpPg0KKwk8bGk+QmFja2dyb3VuZCBCaXJ0aCBSYXRlOiBQTS9UUCo8L2xpPg0KKwk8bGk+QmFja2dyb3VuZCBNb3J0YWxpdHkgUmF0ZSAoJm11Oyk6IFBNL1RQKjwvbGk+DQorCTxsaT5UaW1lIFBlcmlvZCAoVFApOiBJbiBtaWxsaXNlY29uZHM8L2xpPiANCisJPGxpPkxvY2F0aW9uIElTTyBLZXk6IElmIG5vIGxvY2F0aW9uIGlzIHNwZWNpZmllZCwgdGhlIHBvcHVsYXRpb24gbW9kZWwgaXMgYXNzdW1lZCBnbG9iYWw8L2xpPg0KKzwvdWw+PC9wPg0KKw0KKzxpbWcgc3JjPSJpbWcvcG9wdWxhdGlvbndpemFyZDEuanBnIiAvPg0KKzxpbWcgc3JjPSJpbWcvcG9wdWxhdGlvbndpemFyZDIuanBnIiAvPg0KKzwvYm9keT4NCis8L2h0bWw+DQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL3dpemFyZHMvcHJlZGljYXRld2l6YXJkLmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC9pbnRlcmZhY2Uvd2l6YXJkcy9wcmVkaWNhdGV3aXphcmQuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iODZlOGRjCi0tLSAvZGV2L251bGwKKysrIGIvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL3dpemFyZHMvcHJlZGljYXRld2l6YXJkLmh0bWwKQEAgLTAsMCArMSwxNSBAQAorPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL2h0bWw0L2xvb3NlLmR0ZCI+Cis8aHRtbD4KKzxoZWFkPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9SVNPLTg4NTktMSI+Cis8dGl0bGU+TmV3IFByZWRpY2F0ZTwvdGl0bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxwPlRoZSA8ZW0+TmV3IFByZWRpY2F0ZSBXaXphcmQ8L2VtPiBpcyB1c2VkIHRvIGNyZWF0ZSBhbmQgZGVmaW5lIHRoZQorcHJvcGVydGllcyBvZiBhIG5ldyA8YSBocmVmPSIuLi8uLi9jb25jZXB0cy9tb2RlbGluZ2ZyYW1ld29yay5odG1sI3ByZWRpY2F0ZSI+IFByZWRpY2F0ZTwvYT4uCitBIG5hbWUgbXVzdCBiZSBwcm92aWRlZCBmb3IgdGhlIFByZWRpY2F0ZS4gUHJlZGljYXRlcyBjb250YWlucyB0ZXN0cyBzdWNoIGFzIGFuIGVsYXBzZWQgdGltZSB0ZXN0IHRoYXQKK2ZsaXBzIHRoZSBwcmVkaWNhdGUgdG8gdHJ1ZSBvbmNlIGEgY2VydGFpbiB0aW1lIGhhcyBlbGFwc2VkIGluIGEgc2ltdWxhdGlvbi4gUHJlZGljYXRlcyBhcmUgdXNlZCBieQorVHJpZ2dlcnMgdG8gbW9kaWZ5IHNvbWUgYXNwZWN0IG9mIGEgc2ltdWxhdGlvbi48L3A+Cis8aW1nIHNyYz0iaW1nL3ByZWRpY2F0ZXdpemFyZDEuanBnIiAvPgorPGltZyBzcmM9ImltZy9wcmVkaWNhdGV3aXphcmQyLmpwZyIgLz4KKzwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC9pbnRlcmZhY2Uvd2l6YXJkcy9yZWFsdGltZXNlcXVlbmNlcndpemFyZC5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL3dpemFyZHMvcmVhbHRpbWVzZXF1ZW5jZXJ3aXphcmQuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNTg3ZjczCi0tLSAvZGV2L251bGwKKysrIGIvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL3dpemFyZHMvcmVhbHRpbWVzZXF1ZW5jZXJ3aXphcmQuaHRtbApAQCAtMCwwICsxLDE2IEBACis8IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIvaHRtbDQvbG9vc2UuZHRkIj4KKzxodG1sPgorPGhlYWQ+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0xIj4KKzx0aXRsZT5OZXcgUmVhbC1UaW1lIFNlcXVlbmNlciBXaXphcmQ8L3RpdGxlPgorPC9oZWFkPgorPGJvZHk+Cis8cD5UaGUgPGVtPk5ldyBSZWFsLVRpbWUgU2VxdWVuY2VyIFdpemFyZDwvZW0+IGlzIHVzZWQgdG8gY3JlYXRlIGFuZAorZGVmaW5lIHRoZSBwcm9wZXJ0aWVzIG9mIGEgbmV3IFJlYWwtVGltZSA8YQorCWhyZWY9Ii4uLy4uL2NvbmNlcHRzL21vZGVsaW5nZnJhbWV3b3JrLmh0bWwjc2VxdWVuY2VyIj4gU2VxdWVuY2VyPC9hPi4gQSBuYW1lIG11c3QgYmUgCisJcHJvdmlkZWQgZm9yIHRoZSBSZWFsLVRpbWUgU2VxdWVuY2VyIGluIG9yZGVyIHRvIGJlIGFibGUgdG8gY2xpY2sgIk5leHQiIG9yICJGaW5pc2giLiBUaGUgQ3ljbGUgUGVyaW9kIGNhbiAKKwliZSBhbHRlcmVkIGJ5IGNoYW5naW5nIHRoZSBsZW5ndGggb2YgdGhlIHBlcmlvZCBpbiBhYnNvbHV0ZSBudW1iZXJzIG9yIHRoZSB1bml0cyBvZiBtZWFzdXJlbWVudC48L3A+Cis8aW1nIHNyYz0iaW1nL3JlYWx0aW1lc2VxdWVuY2Vyd2l6YXJkMS5qcGciIC8+Cis8aW1nIHNyYz0iaW1nL3JlYWx0aW1lc2VxdWVuY2Vyd2l6YXJkMi5qcGciIC8+Cis8L2JvZHk+Cis8L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL3dpemFyZHMvc2NlbmFyaW93aXphcmQuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2ludGVyZmFjZS93aXphcmRzL3NjZW5hcmlvd2l6YXJkLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzI5MTJhNQotLS0gL2Rldi9udWxsCisrKyBiL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2ludGVyZmFjZS93aXphcmRzL3NjZW5hcmlvd2l6YXJkLmh0bWwKQEAgLTAsMCArMSwxOCBAQAorPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL2h0bWw0L2xvb3NlLmR0ZCI+Cis8aHRtbD4KKzxoZWFkPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9SVNPLTg4NTktMSI+Cis8dGl0bGU+TmV3IFNjZW5hcmlvPC90aXRsZT4KKzwvaGVhZD4KKzxib2R5PgorPHA+VGhlIDxlbT5OZXcgU2NlbmFyaW8gV2l6YXJkPC9lbT4gaXMgdXNlZCB0byBjcmVhdGUgYW5kIGRlZmluZSB0aGUKK3Byb3BlcnRpZXMgb2YgYSBuZXcgPGEKKwlocmVmPSIuLi8uLi9jb25jZXB0cy9tb2RlbGluZ2ZyYW1ld29yay5odG1sI3NjZW5hcmlvIj4gU2NlbmFyaW88L2E+LiBBIG5hbWUgbXVzdCBiZSBwcm92aWRlZCBmb3IKKwl0aGUgc2NlbmFyaW8sIGFuZCB0aGUgU29sdmVyIGNhbiBiZSBjaGFuZ2VkIHVzaW5nIGEgZHJvcC1kb3duIG1lbnUgdW5kZXIgIlBpY2sgYSBTb2x2ZXIiLjwvcD4KKzxwPklmIHlvdSBwaWNrIHRoZSBSdW5nZUt1dHRhU29sdmVyLCB5b3UgYWxzbyBoYXZlIHRoZSBvcHRpb24gb2Ygc3BlY2lmeWluZyBhIFJlbGF0aXZlIFRvbGVyYW5jZQorZm9yIHRoZSBudW1lcmljYWwgaW50ZWdyYXRvci4gVGhlIHNtYWxsZXIgdGhlIG51bWJlciB0aGUgbW9yZSBwcmVjaXNlIHRoZSByZXN1bHRzLCBidXQgc2ltdWxhdGlvbnMKK3dpbGwgYWxzbyB0YWtlIGxvbmdlciB0byBydW4uIDwvcD4KKzxwPlNjZW5hcmlvcyBjb250YWluIGEgbW9kZWwsIG9uZSBvciBtb3JlIGluZmVjdG9ycy9pbm9jdWxhdG9ycyBhcyB3ZWxsIGFzIGEgc2VxdWVuY2VyLiA8L3A+Cis8aW1nIHNyYz0iaW1nL3NjZW5hcmlvd2l6YXJkMS5qcGciIC8+Cis8aW1nIHNyYz0iaW1nL3NjZW5hcmlvd2l6YXJkMi5qcGciIC8+Cis8L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL3dpemFyZHMvc2VxdWVudGlhbHNlcXVlbmNlcndpemFyZC5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL3dpemFyZHMvc2VxdWVudGlhbHNlcXVlbmNlcndpemFyZC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdlZDIzZGQKLS0tIC9kZXYvbnVsbAorKysgYi9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC9pbnRlcmZhY2Uvd2l6YXJkcy9zZXF1ZW50aWFsc2VxdWVuY2Vyd2l6YXJkLmh0bWwKQEAgLTAsMCArMSwxNyBAQAorPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL2h0bWw0L2xvb3NlLmR0ZCI+Cis8aHRtbD4KKzxoZWFkPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9SVNPLTg4NTktMSI+Cis8dGl0bGU+TmV3IFNlcXVlbnRpYWwgU2VxdWVuY2VyIFdpemFyZDwvdGl0bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxwPlRoZSA8ZW0+TmV3IFNlcXVlbnRpYWwgU2VxdWVuY2VyIFdpemFyZDwvZW0+IGlzIHVzZWQgdG8gY3JlYXRlCithbmQgZGVmaW5lIHRoZSBwcm9wZXJ0aWVzIG9mIGEgbmV3IFNlcXVlbnRpYWwgPGEKKwlocmVmPSIuLi8uLi9jb25jZXB0cy9tb2RlbGluZ2ZyYW1ld29yay5odG1sI3NlcXVlbmNlciI+IFNlcXVlbmNlcjwvYT4uIEEgbmFtZSBtdXN0IGJlIHByb3ZpZGVkIGZvciAKKwl0aGUgc2VxdWVuY2VyLiBUaGUgbGVuZ3RoIG9mIHRoZSBDeWNsZSBQZXJpb2QgY2FuCisJYmUgc3BlY2lmaWVkLCBhbmQgdGhlIHVuaXQgb2YgdGltZSAobWlsbGlzZWNvbmRzLCBzZWNvbmRzLCBtaW51dGVzLCBob3VycywgZGF5cykuIFRoZSBTdGFydCBEYXRlIGNhbiBiZSBjaG9zZW4gYW5kIG9wdGlvbmFsbHkgCisJYW4gRW5kIERhdGUuPC9wPgorPGltZyBzcmM9ImltZy9zZXF1ZW50aWFsc2VxdWVuY2Vyd2l6YXJkMS5qcGciIC8+Cis8aW1nIHNyYz0iaW1nL3NlcXVlbnRpYWxzZXF1ZW5jZXJ3aXphcmQyLmpwZyIgLz4KKzwvYm9keT4KKzwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC9pbnRlcmZhY2Uvd2l6YXJkcy9zdGVtcHJvamVjdHdpemFyZC5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL3dpemFyZHMvc3RlbXByb2plY3R3aXphcmQuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NWU1MDdkCi0tLSAvZGV2L251bGwKKysrIGIvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL3dpemFyZHMvc3RlbXByb2plY3R3aXphcmQuaHRtbApAQCAtMCwwICsxLDE0IEBACis8IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIvaHRtbDQvbG9vc2UuZHRkIj4KKzxodG1sPgorPGhlYWQ+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0xIj4KKzx0aXRsZT5OZXcgU1RFTSBQcm9qZWN0IFdpemFyZDwvdGl0bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxwPlRoZSA8ZW0+TmV3IFNURU0gUHJvamVjdCBXaXphcmQ8L2VtPiBpcyB1c2VkIHRvIGNyZWF0ZSBhbmQKK2RlZmluZSB0aGUgcHJvcGVydGllcyBvZiBhIG5ldyBTVEVNIFByb2plY3QuIEEgUHJvamVjdCBOYW1lIG11c3QgYmUgcHJvdmlkZWQgCitpbiBvcmRlciB0byBiZSBhYmxlIHRvIGNsaWNrICJGaW5pc2giLiBUaGUgTG9jYXRpb24gb2YgdGhlIFNURU0gUHJvamVjdCBjYW4gYmUKK2NoYW5nZWQgb3IgY2FuIHJlbWFpbiBhdCB0aGUgZGVmYXVsdCBsb2NhdGlvbi48L3A+Cis8aW1nIHNyYz0iaW1nL3N0ZW1wcm9qZWN0d2l6YXJkMS5qcGciIC8+Cis8L2JvZHk+Cis8L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL3dpemFyZHMvdHJpZ2dlcndpemFyZC5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL3dpemFyZHMvdHJpZ2dlcndpemFyZC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNkYTE3YjgKLS0tIC9kZXYvbnVsbAorKysgYi9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC9pbnRlcmZhY2Uvd2l6YXJkcy90cmlnZ2Vyd2l6YXJkLmh0bWwKQEAgLTAsMCArMSwxNCBAQAorPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL2h0bWw0L2xvb3NlLmR0ZCI+Cis8aHRtbD4KKzxoZWFkPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9SVNPLTg4NTktMSI+Cis8dGl0bGU+TmV3IFRyaWdnZXI8L3RpdGxlPgorPC9oZWFkPgorPGJvZHk+Cis8cD5UaGUgPGVtPk5ldyBUcmlnZ2VyIFdpemFyZDwvZW0+IGlzIHVzZWQgdG8gY3JlYXRlIGFuZCBkZWZpbmUgdGhlCitwcm9wZXJ0aWVzIG9mIGEgbmV3IDxhIGhyZWY9Ii4uLy4uL2NvbmNlcHRzL21vZGVsaW5nZnJhbWV3b3JrLmh0bWwjdHJpZ2dlciI+IFRyaWdnZXI8L2E+LiAKK0EgbmFtZSBmb3IgdGhlIE5ldyBUcmlnZ2VyIG11c3QgYmUgcHJvdmlkZWQuIFRyaWdnZXJzIGNvbnRhaW4gYSBQcmVkaWNhdGUgYXMgd2VsbCBhcyBvbmUgb3IgbW9yZQorTW9kaWZpZXJzPC9wPgorPGltZyBzcmM9ImltZy90cmlnZ2Vyd2l6YXJkMS5qcGciIC8+Cis8aW1nIHNyYz0iaW1nL3RyaWdnZXJ3aXphcmQyLmpwZyIgLz4KKzwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC9pbnRlcmZhY2Uvd2l6YXJkcy93aXphcmRzb3ZlcnZpZXcuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2ludGVyZmFjZS93aXphcmRzL3dpemFyZHNvdmVydmlldy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjllZjk4YzEKLS0tIC9kZXYvbnVsbAorKysgYi9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC9pbnRlcmZhY2Uvd2l6YXJkcy93aXphcmRzb3ZlcnZpZXcuaHRtbApAQCAtMCwwICsxLDQxIEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wIFRyYW5zaXRpb25hbC8vRU4iPgorCis8aHRtbD4KKzxoZWFkPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9aXNvLTg4NTktMSI+Cis8dGl0bGU+T3ZlcnZpZXc8L3RpdGxlPgorPC9oZWFkPgorCis8Ym9keT4KKzxoMT5XaXphcmRzPC9oMT4KKzxwPkEgPGVtPldpemFyZDwvZW0+IGlzIGFuIGFpZCB0aGF0IGhlbHBzIGEgU1RFTSB1c2VyIGNvbXBsZXRlIGEKK2NvbW1vbiB0YXNrLiBBIFdpemFyZCAid2Fsa3MiIGEgdXNlciBzdGVwLWJ5LXN0ZXAgdGhyb3VnaCBlYWNoIHN0YWdlIG9mCit0aGUgcHJvY2VzcyBvZiBjb21wbGV0aW5nIHRoZSB0YXNrLiBXaGVuIGEgV2l6YXJkIGlzIHN0YXJ0ZWQgaXQgY3JlYXRlcworYSBzZXJpZXMgb2Ygc21hbGwgd2luZG93cyB0aGF0IGNvbnRhaW4gImZvcm1zIiB0aGF0IGEgdXNlciBmaWxscyBvdXQgdG8KK3Byb3ZpZGUgdGhlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSB0byBjb21wbGV0ZSB0aGUgdGFzay4gSW5mb3JtYXRpdmUKK21lc3NhZ2VzIHByb21wdCB0aGUgdXNlciBmb3IgbWlzc2luZyBpbmZvcm1hdGlvbiBhbmQgcHJvdmlkZSBmZWVkYmFjaworKGkuZS4gZXJyb3IgbWVzc2FnZXMpIG9uIHRoZSB2YWxpZGl0eSBvZiB0aGUgdXNlcidzIGVudHJpZXMuPC9wPgorPHA+V2hlbiB0aGUgdXNlciBoYXMgcHJvdmlkZWQgc3VmZmljaWVudCBpbmZvcm1hdGlvbiB0byBjb21wbGV0ZSB0aGUKK3Rhc2sgdGhleSBzZWxlY3QgdGhlICJGaW5pc2giIGJ1dHRvbiBhbmQgdGhlIFdpemFyZCB3aWxsIGNvbXBsZXRlIGl0cworam9iIGJ5IHBlcmZvcm1pbmcgdGhlIHRhc2sgZm9yIHRoZSB1c2VyLjwvcD4KKzxwPkF0IGFueSBwb2ludCBhIHVzZXIgY2FuIGFiYW5kb24gdGhlIFdpemFyZCBieSBjYW5jZWxpbmcgdGhlCitvcGVyYXRpb24gYW5kIG5vdGhpbmcgd2lsbCBoYXZlIGNoYW5nZWQgaW4gdGhlaXIgc3lzdGVtLjwvcD4KKzxwPlNURU0gY29udGFpbnMgdGhlIGZvbGxvd2luZyBXaXphcmRzOjwvcD4KKzx1bD4KKwk8bGk+PGEgaHJlZj0iZGlzZWFzZXdpemFyZC5odG1sIj5EZWZpbmUgYSBuZXcgRGlzZWFzZTwvYT48L2xpPgorCTxsaT48YSBocmVmPSJleHBlcmltZW50d2l6YXJkLmh0bWwiPk5ldyBFeHBlcmltZW50PC9hPjwvbGk+CisJPGxpPjxhIGhyZWY9ImluZmVjdG9yd2l6YXJkLmh0bWwiPkRlZmluZSBhIG5ldyBJbmZlY3Rvci9Jbm9jdWxhdG9yPC9hPjwvbGk+CisJPGxpPjxhIGhyZWY9ImdyYXBod2l6YXJkLmh0bWwiPk5ldyBHcmFwaDwvYT48L2xpPgorCTxsaT48YSBocmVmPSJtb2RlbHdpemFyZC5odG1sIj5OZXcgTW9kZWw8L2E+PC9saT4KKwk8bGk+PGEgaHJlZj0ibW9kaWZpZXJ3aXphcmQuaHRtbCI+TmV3IE1vZGlmaWVyPC9hPjwvbGk+CisJPGxpPjxhIGhyZWY9InBvcHVsYXRpb253aXphcmQuaHRtbCI+TmV3IFBvcHVsYXRpb24gTW9kZWw8L2E+PC9saT4gCisJPGxpPjxhIGhyZWY9InBvcHVsYXRpb25pbml0aWFsaXplcndpemFyZC5odG1sIj5OZXcgUG9wdWxhdGlvbiBJbml0aWFsaXplcjwvYT48L2xpPgorCTxsaT48YSBocmVmPSJwcmVkaWNhdGV3aXphcmQuaHRtbCI+TmV3IFByZWRpY2F0ZTwvYT48L2xpPgorCTxsaT48YSBocmVmPSJyZWFsdGltZXNlcXVlbmNlcndpemFyZC5odG1sIj5OZXcgUmVhbC1UaW1lIFNlcXVlbmNlcjwvYT48L2xpPgorCTxsaT48YSBocmVmPSJzY2VuYXJpb3dpemFyZC5odG1sIj5OZXcgU2NlbmFyaW88L2E+PC9saT4KKwk8bGk+PGEgaHJlZj0ic2VxdWVudGlhbHNlcXVlbmNlcndpemFyZC5odG1sIj5OZXcgU2VxdWVudGlhbCBTZXF1ZW5jZXI8L2E+PC9saT4KKwk8bGk+PGEgaHJlZj0ic3RlbXByb2plY3R3aXphcmQuaHRtbCI+TmV3IFNURU0gUHJvamVjdDwvYT48L2xpPgorCTxsaT48YSBocmVmPSJ0cmlnZ2Vyd2l6YXJkLmh0bWwiPk5ldyBUcmlnZ2VyPC9hPjwvbGk+Cis8L3VsPgorPC9ib2R5PgorPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL3JlZmVyZW5jZS9kaXNjbGFpbWVyLmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC9yZWZlcmVuY2UvZGlzY2xhaW1lci5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc4NGQ3NjIKLS0tIC9kZXYvbnVsbAorKysgYi9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC9yZWZlcmVuY2UvZGlzY2xhaW1lci5odG1sCkBAIC0wLDAgKzEsNTIgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAgVHJhbnNpdGlvbmFsLy9FTiI+CisKKzxodG1sPgorPGhlYWQ+CisJPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9aXNvLTg4NTktMSI+CisJPHRpdGxlPkRpc2NsYWltZXI8L3RpdGxlPgorPC9oZWFkPgorCisKKzxib2R5PgorPGgyPkRpc2NsYWltZXI8L2gyPgorPHA+Jm5ic3A7PC9wPgorPHRhYmxlIGJvcmRlcj0iMCIgd2lkdGg9IjYwJSIgaWQ9InRhYmxlMSI+CisJPHRyPgorCQk8dGQ+PGZvbnQgRkFDRT0iSGVsdiI+CitUaGUgdmFyaW91cyBtb2RlbHMgYW5kIHJlZmVyZW5jZSBkYXRhIGluY2x1ZGVkIGluIFNURU0gYXJlIHByb3ZpZGVkIAorYXMgZXhhbXBsZXMgb2YgaG93IHVzZXJzIGNhbiBjcmVhdGUgYW5kIGRlZmluZSB0aGVpciBvd24gbW9kZWxzIGFuZCBkYXRhLiBXaGlsZSBlZmZvcnQgd2FzL2lzIAorbWFkZSB0byBlbnN1cmUgdGhlIGRhdGEgcmVmbGVjdHMgaW5mb3JtYXRpb24gYXZhaWxhYmxlIHRvZGF5IGluIHRoZSBwdWJsaWMgZG9tYWluLCB3ZSBkbyBub3QgcmVwcmVzZW50IG9yIGd1YXJhbnRlZSB0aGUgYWNjdXJhY3kgCitvZiBkYXRhIG9yIG9mIHRoZSBvcmlnaW5hbCBzb3VyY2VzIGluY2x1ZGluZyBwb3B1bGF0aW9ucywgYXJlYSwgcG9wdWxhdGlvbiBkZW5zaXRpZXMsIGdlb2dyYXBoaWMgaW5mb3JtYXRpb24gKHByZWNpc2UgbGF0aXR1ZGVzIGFuZCBsb25naXR1ZGVzLCBldGMpLiBJbiAKK3NvbWUgY2FzZXMgZXN0aW1hdGlvbnMgd2VyZSB1c2VkIHRvIHByb3ZpZGUgYXBwcm94aW1hdGlvbnMgZm9yIHBvcHVsYXRpb24gZGVuc2l0aWVzIHdoZXJlIG5vIHB1YmxpYyBkYXRhIGNvdWxkIGJlIGZvdW5kLiBUaGUgbWF0aGVtYXRpY2FsIAorbW9kZWxzIGluY2x1ZGVkIGluIFNURU0gYXJlIGJhc2VkIG9uIHN0YW5kYXJkIHRleHRib29rIG1vZGVscyBsaWtlLCBmb3IgZXhhbXBsZSwgdGhlIFNJUiBvciBTRUlSIG1vZGVscy4KK1VzZXJzIGFyZSBmcmVlIHRvIGFkanVzdCB0aGUgcmF0ZSBjb25zdGFudHMgaW4gdGhlc2UgbWF0aGVtYXRpY2FsIAorbW9kZWxzIHRvIGNyZWF0ZSB0aGVpciBvd24gYXBwcm94aW1hdGlvbnMgb3IgbW9kZWxzIG9mIGluZmVjdGlvdXMgZGlzZWFzZS4gSW4gCithZGRpdGlvbiB0byBjaGFuZ2luZyByYXRlIGNvbnN0YW50cywKK2FkdmFuY2VkIHVzZXJzIHdpbGwgd2FudCB0byBjb2RlIHRoZWlyIG93biBtYXRoZW1hdGljcyBleHRlbmRpbmcgCit0aGUgc2ltcGxlIGJhc2UgbW9kZWxzLiBXZSBkbyBub3QgcmVwcmVzZW50ZWQgb3IgZ3VhcmFudGVlIHRoYXQgdGhlIHNpbXBsZSBiYXNlIAorbW9kZWxzIGluY2x1ZGVkIGluIFNURU0gYXJlCismcXVvdDtvcHRpbWFsJnF1b3Q7IGZvciBhbnkgcGFydGljdWxhciBpbmZlY3Rpb3VzIGRpc2Vhc2UgYW5kIGNyZWF0aW9uIG9mIGEgCismcXVvdDtnb29kJnF1b3Q7IG1vZGVsIGZvciByZWFsIGRpc2Vhc2UgaXMgcGFydCBvZiBtb2Rlcm4gc3RhdGUgb2YgdGhlIGFydCBlcGlkZW1pb2xvZ2ljYWwgCityZXNlYXJjaC4gU1RFTSBpcyBwcm92aWRlZCBhcyAKK2EgRnJhbWV3b3JrIHRvIHN1cHBvcnQgdGhpcyByZXNlYXJjaCBpbiB3aGljaCB1c2VycyBtYXkgY3JlYXRlIGFuZCAKK2V4Y2hhbmdlIHRoZWlyIG93biBtb2RlbHMgYmFzZWQgb24gdGhlaXIgb3duIHJlZmVyZW5jZSBkYXRhLiBXZSBkbyBjbGFpbSB0byBpbXBsZW1lbnRlZCAmcXVvdDtiZXN0JnF1b3Q7IG9yIGV2ZW4gJnF1b3Q7YWNjdXJhdGUmcXVvdDsgCittb2RlbHMgZm9yIGFueSBwYXJ0aWN1bGFyIGRpc2Vhc2UuCitPdmVyIHRpbWUgd2Ugd2lsbCBidWlsZCBpbnRvIFNURU0gdG9vbHMgdGhhdCB3aWxsIGFsbG93IHVzZXJzIHRvIGRvIAordGhlaXIgb3duIHZhbGlkYXRpb24gc3R1ZGllcyBvZiB2YXJpb3VzIG1vZGVscy4KKzwvZm9udD4KKwkJPC90ZD4KKwk8L3RyPgorPC90YWJsZT4KKzxmb250IEZBQ0U9IkhlbHYiIFNJWkU9IjIiPgorPHAgRElSPSJMVFIiPiZuYnNwOzwvcD4KKzwvZm9udD48Zm9udCBGQUNFPSJIZWx2Ij4KKzxwPgorJm5ic3A7PC9wPgorPC9mb250PgorPHA+CisKKyZuYnNwOworCisKKzwvYm9keT4KKzwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC9yZWZlcmVuY2UvcmVmZXJlbmNlcy5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvcmVmZXJlbmNlL3JlZmVyZW5jZXMuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYmVhYmRkCi0tLSAvZGV2L251bGwKKysrIGIvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvcmVmZXJlbmNlL3JlZmVyZW5jZXMuaHRtbApAQCAtMCwwICsxLDQ2IEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wIFRyYW5zaXRpb25hbC8vRU4iPgorCis8aHRtbD4KKzxoZWFkPgorCTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PWlzby04ODU5LTEiPgorCTx0aXRsZT5SZWZlcmVuY2U8L3RpdGxlPgorPC9oZWFkPgorCisKKzxib2R5PgorPGgyPlNwYXRpb3RlbXBvcmFsIEVwaWRlbWlvbG9naWNhbCBNb2RlbGxlciAoU1RFTSkgUmVmZXJlbmNlczwvaDI+Cis8cD4KKworVGhlIGZvbGxvd2luZyBsaW5rcyB3aWxsIGdpdmUgeW91IG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgU1RFTS4KKzxwPgorVGhlc2Ugd2ViIHBhZ2VzIGRvIG5vdCBmb3JtYXQgd2VsbCBpbiB0aGUgRWNsaXBzZSBlbnZpcm9ubWVudCwgc28gCit3ZSByZWNvbW1lbmQgdXNpbmcgeW91ciBub3JtYWwgYnJvd3NlciAoRmlyZWZveCwgZXRjKS4gCis8cD4KK1RvIGRvIHRoaXMsIGdvIHRvOiAKKzxpPjxwcmU+CisgV2luZG93IC0+IFByZWZlcmVjZXMgLT4gSGVscCAKKyAgIHNlbGVjdCA8Yj5Vc2UgZXh0ZXJuYWwgYnJvd3NlcjwvYj4KKyBUZXJtaW5hdGUgdGhlIGN1cnJlbnQgaGVscCB3aW5kb3csIAorIGFuZCByZXNlbGVjdCA8Yj5IZWxwIC0+IEhlbHAgQ29udGVudHM8L2I+Cis8L3ByZT48L2k+CisKKzxoMj5SZWZlcmVuY2VzPC9oMj4gCisgIDx1bD4KKyAgPGxpPiAgCisgIDxhIGhyZWY9Imh0dHA6Ly93d3cuaWotaGVhbHRoZ2VvZ3JhcGhpY3MuY29tL2NvbnRlbnQvNS8xLzQiPgorICAgIGh0dHA6Ly93d3cuaWotaGVhbHRoZ2VvZ3JhcGhpY3MuY29tL2NvbnRlbnQvNS8xLzQ8L2E+CisgICA8YnI+QSByZWNlbnQgcGFwZXIgZGVzY3JpYmluZyB0aGUgU1RFTSBjb25jZXB0cworICAgCisgICAKKyAgIDxsaT4KKyAgICA8YSBocmVmPSJodHRwOi8vd2lraS5lY2xpcHNlLm9yZy9pbmRleC5waHAvU1RFTSI+CisgICAgaHR0cDovL3dpa2kuZWNsaXBzZS5vcmcvaW5kZXgucGhwL1NURU08L2E+CisgICAgPGJyPkVjbGlwc2UgU1RFTSBXaWtpCisgICA8bGk+CisgICAgIDxhIGhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvc3RlbSI+aHR0cDovL3d3dy5lY2xpcHNlLm9yZy9zdGVtPC9hPgorICAgICAgPGJyPkVjbGlwc2UgU1RFTSB3ZWIgcGFnZQorICA8L3VsPgorICAKKyAgCis8L2JvZHk+Cis8L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvdG9jLmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC90b2MuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMmVkNjZkCi0tLSAvZGV2L251bGwKKysrIGIvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvdG9jLmh0bWwKQEAgLTAsMCArMSw5MyBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMCBUcmFuc2l0aW9uYWwvL0VOIj4KKworPGh0bWw+Cis8aGVhZD4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PWlzby04ODU5LTEiPgorPHRpdGxlPlNURU0gVGFibGUgb2YgQ29udGVudHM8L3RpdGxlPgorPC9oZWFkPgorCis8Ym9keT4KKzxjZW50ZXI+Cis8aDE+U1RFTSBVc2VyIEhlbHA8L2gxPgorPC9jZW50ZXI+Cis8aDI+U1RFTSBUYWJsZSBvZiBDb250ZW50czwvaDI+Cis8cD5UaGUgU3BhdGlvdGVtcG9yYWwgRXBpZGVtaW9sb2dpY2FsIE1vZGVsZXIgKFNURU0pIGlzIGFuCitleHRlbnNpYmxlIHNvZnR3YXJlIHN5c3RlbSBhbmQgZnJhbWV3b3JrIGZvciBkZXZlbG9waW5nIGFuZCBydW5uaW5nCitkaXNjcmV0ZSBldmVudCBzaW11bGF0aW9uIG1vZGVscy4gSXQgd2FzIHByaW1hcmlseSBkZXZlbG9wZWQgZm9yCittb2RlbGluZyB0aGUgc3ByZWFkIG9mIGluZmVjdGlvdXMgZGlzZWFzZXMsIGJ1dCBpdCBpcyBnZW5lcmFsIGVub3VnaCB0bworYmUgYXBwbGllZCB0byB2aXJ0dWFsbHkgYW55IG90aGVyIG1vZGVsaW5nIGFwcGxpY2F0aW9uIGludm9sdmluZyBzcGFjZQorYW5kIHRpbWUuPC9wPgorPFA+Cis8dWw+CisgIDxsaT48YSBocmVmPWdldHRpbmdzdGFydGVkL3F1aWNrc3RhcnQuaHRtbCB0YXJnZXQ9Im1haW4iID5HZXR0aW5nIFN0YXJ0ZWQ8L2E+CisgIDxsaT5TVEVNIGNvbmNlcHRzCisgICAgPHVsPgorICAgICAgPGxpPjxhIGhyZWY9Y29uY2VwdHMvb3ZlcnZpZXcuaHRtbCB0YXJnZXQ9Im1haW4iID5PdmVydmlldzwvYT4KKyAgICAgIDxsaT48YSBocmVmPWNvbmNlcHRzL21vZGVsaW5nZnJhbWV3b3JrLmh0bWwgdGFyZ2V0PSJtYWluIiA+RnJhbWV3b3JrPC9hPgorICAgICAgPGxpPjxhIGhyZWY9Y29uY2VwdHMvZXh0ZW5zaWJpbGl0eS5odG1sIHRhcmdldD0ibWFpbiIgPkV4dGVuc2liaWxpdHk8L2E+CisgICAgPC91bD4KKyA8bGk+SW50ZXJmYWNlIDwvYT4KKyAgICA8dWw+CisgICAgICA8bGk+PGEgaHJlZj1pbnRlcmZhY2UvaW50ZXJmYWNlb3ZlcnZpZXcuaHRtbCB0YXJnZXQ9Im1haW4iID5PdmVydmlldzwvYT4KKyAgICAgIDxsaT48YSBocmVmPWludGVyZmFjZS9wZXJzcGVjdGl2ZXMvcGVyc3BlY3RpdmVzb3ZlcnZpZXcuaHRtbCB0YXJnZXQ9Im1haW4iID5QZXJzcGVjdGl2ZXM8L2E+CisgICAgICA8dWw+CisgICAgICAgIDxsaT48YSBocmVmPWludGVyZmFjZS9wZXJzcGVjdGl2ZXMvYW5hbHlzaXMuaHRtbCB0YXJnZXQ9Im1haW4iID5BbmFseXNpczwvYT4KKyAgICAgICAgPGxpPjxhIGhyZWY9aW50ZXJmYWNlL3BlcnNwZWN0aXZlcy9kZXNpZ25lci5odG1sIHRhcmdldD0ibWFpbiIgPkRlc2lnbmVyPC9hPgorICAgICAgICA8bGk+PGEgaHJlZj1pbnRlcmZhY2UvcGVyc3BlY3RpdmVzL3NpbXVsYXRpb24uaHRtbCB0YXJnZXQ9Im1haW4iID5TaW11bGF0aW9uPC9hPgorICAgICAgPC91bD4KKyAgICAgIDxsaT48YSBocmVmPWludGVyZmFjZS92aWV3cy92aWV3c292ZXJ2aWV3Lmh0bWwgdGFyZ2V0PSJtYWluIiA+Vmlld3M8L2E+CisgICAgICA8dWw+CisKKworCQkJPGxpPjxhIGhyZWY9aW50ZXJmYWNlL3ZpZXdzL2FjdGl2ZXNpbXVsYXRpb25zdmlldy5odG1sIHRhcmdldD0ibWFpbiIgPkFjdGl2ZSBTaW11bGF0aW9ucyBWaWV3PC9hPgorCisJCQk8bGk+PGEgaHJlZj1pbnRlcmZhY2Uvdmlld3MvY29udHJvbHZpZXcuaHRtbCB0YXJnZXQ9Im1haW4iID5Db250cm9sIFZpZXc8L2E+CisKKwkJCTxsaT48YSBocmVmPWludGVyZmFjZS92aWV3cy9jc3Zsb2dnZXJ2aWV3Lmh0bWwgdGFyZ2V0PSJtYWluIiA+Q1NWIExvZ2dlciBWaWV3PC9hPgorCisJCQk8bGk+PGEgaHJlZj1pbnRlcmZhY2Uvdmlld3MvZGVjb3JhdG9yc3ZpZXcuaHRtbCB0YXJnZXQ9Im1haW4iID5EZWNvcmF0b3JzIFZpZXc8L2E+CisKKwkJCTxsaT48YSBocmVmPWludGVyZmFjZS92aWV3cy9kaXNlYXNlc3ZpZXcuaHRtbCB0YXJnZXQ9Im1haW4iID5EaXNlYXNlcyBWaWV3PC9hPgorCisJCQk8bGk+PGEgaHJlZj1pbnRlcmZhY2Uvdmlld3MvZXBpZGVtaWN2aWV3Lmh0bWwgdGFyZ2V0PSJtYWluIiA+RXBpZGVtaWMgVmlldzwvYT4KKworCQkJPGxpPjxhIGhyZWY9aW50ZXJmYWNlL3ZpZXdzL2Vycm9yX2xvZy5odG1sIHRhcmdldD0ibWFpbiIgPkVycm9yIExvZyBWaWV3PC9hPgorCisJCQk8bGk+PGEgaHJlZj1pbnRlcmZhY2Uvdmlld3MvZXN0aW1hdG9yLmh0bWwgdGFyZ2V0PSJtYWluIiA+RXN0aW1hdG9yIFZpZXc8L2E+CisKKwkJCTxsaT48YSBocmVmPWludGVyZmFjZS92aWV3cy9nZS5odG1sIHRhcmdldD0ibWFpbiIgPkdvb2dsZSBFYXJ0aCBWaWV3PC9hPgorCisJCQk8bGk+PGEgaHJlZj1pbnRlcmZhY2Uvdmlld3MvZ3JhcGhzdmlldy5odG1sIHRhcmdldD0ibWFpbiIgPkdyYXBocyBWaWV3PC9hPgorCisJCQk8bGk+PGEgaHJlZj1pbnRlcmZhY2Uvdmlld3MvbHlhcHVub3Z2aWV3Lmh0bWwgdGFyZ2V0PSJtYWluIiA+THlhcHVub3YgVmlldzwvYT4KKworCQkJPGxpPjxhIGhyZWY9aW50ZXJmYWNlL3ZpZXdzL21hcHZpZXcuaHRtbCB0YXJnZXQ9Im1haW4iID5NYXAgVmlldzwvYT4KKworCQkJPGxpPjxhIGhyZWY9aW50ZXJmYWNlL3ZpZXdzL21vZGVsc3ZpZXcuaHRtbCB0YXJnZXQ9Im1haW4iID5Nb2RlbHMgVmlldzwvYT4KKworCQkJPGxpPjxhIGhyZWY9aW50ZXJmYWNlL3ZpZXdzL3Byb2plY3R2aWV3Lmh0bWwgdGFyZ2V0PSJtYWluIiA+UHJvamVjdCBFeHBsb3JlciBWaWV3PC9hPgorCisJCQk8bGk+PGEgaHJlZj1pbnRlcmZhY2Uvdmlld3MvcHJvcGVydGllc3ZpZXcuaHRtbCB0YXJnZXQ9Im1haW4iID5Qcm9wZXJ0aWVzIFZpZXc8L2E+CisKKwkJCTxsaT48YSBocmVmPWludGVyZmFjZS92aWV3cy9yZXBvcnR2aWV3Lmh0bWwgdGFyZ2V0PSJtYWluIiA+UmVwb3J0IFZpZXc8L2E+CisKKwkJCTxsaT48YSBocmVmPWludGVyZmFjZS92aWV3cy9zY2VuYXJpb3N2aWV3Lmh0bWwgdGFyZ2V0PSJtYWluIiA+U2NlbmFyaW9zIFZpZXc8L2E+CisKKwkJCTxsaT48YSBocmVmPWludGVyZmFjZS92aWV3cy9zY2VuYXJpb2NvbXBhcmlzb252aWV3Lmh0bWwgdGFyZ2V0PSJtYWluIiA+U2NlbmFyaW8gQ29tcGFyaXNvbiBWaWV3PC9hPgorCisJCQk8bGk+PGEgaHJlZj1pbnRlcmZhY2Uvdmlld3Mvc2VxdWVuY2Vyc3ZpZXcuaHRtbCB0YXJnZXQ9Im1haW4iID5TZXF1ZW5jZXJzIFZpZXc8L2E+CisKKwkJCTxsaT48YSBocmVmPWludGVyZmFjZS92aWV3cy9kdWJsaW5jb3JlcG9wdXAuaHRtbCB0YXJnZXQ9Im1haW4iID5EdWJsaW4gQ29yZSBQb3B1cDwvYT4KKyAgICAgIDwvdWw+CisgICAgPC91bD4KKworCisKKworICA8bGk+PGEgaHJlZj1lcGlkZW1pb2xvZ2ljYWxtb2RlbGluZy9vdmVydmlldy5odG1sIHRhcmdldD0ibWFpbiIgPiBFcGlkZW1pb2xvZ2ljYWwgTW9kZWxpbmcgPC9hPgorICA8bGk+PGEgaHJlZj10dXRvcmlhbHMvdHV0b3JpYWxzb3ZlcnZpZXcuaHRtbCB0YXJnZXQ9Im1haW4iID5UdXRvcmlhbHM8L2E+CisgIDxsaT48YSBocmVmPXJlZmVyZW5jZS9yZWZlcmVuY2VzLmh0bWwgdGFyZ2V0PSJtYWluIiA+UmVmZXJlbmNlcyA8L2E+CisgIDxsaT48YSBocmVmPSJyZWZlcmVuY2UvZGlzY2xhaW1lci5odG1sIj5EaXNjbGFpbWVyPC9hPjwvdWw+CisKKzwvYm9keT4KKzwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC90dXRvcmlhbHMvY3N2aW1wb3J0dHV0b3JpYWwuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL3R1dG9yaWFscy9jc3ZpbXBvcnR0dXRvcmlhbC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFhMmYxZjgKLS0tIC9kZXYvbnVsbAorKysgYi9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC90dXRvcmlhbHMvY3N2aW1wb3J0dHV0b3JpYWwuaHRtbApAQCAtMCwwICsxLDEzOCBAQAorPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL2h0bWw0L2xvb3NlLmR0ZCI+Cis8aHRtbD4KKzxoZWFkPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9SVNPLTg4NTktMSI+Cis8dGl0bGU+Q3JlYXRpbmcgYSBuZXcgU2NlbmFyaW8gVHV0b3JpYWw8L3RpdGxlPgorPC9oZWFkPgorPGJvZHk+Cis8aDE+SW1wb3J0aW5nIERhdGEgRnJvbSBFeHRlcm5hbCBGaWxlczwvaDE+Cis8cD48Yj5PdmVydmlldzo8L2I+PC9wPgorPHA+U1RFTSBhbHNvIGFsbG93cyB1c2VycyB0byBpbXBvcnQgZGF0YSBmcm9tIG9uZSBvciBtb3JlIGV4dGVybmFsIGZpbGVzIGFuZCB0byAKK3BsYXkgdGhlbSBiYWNrLiBUb2RheSwgaW1wb3J0IGlzIHN1cHBvcnRlZCBmb3IgQ29tbWEgU2VwYXJhdGVkIFZhcmlhYmxlIChDU1YpIAorZmlsZXMuPGJyPgorJm5ic3A7PC9wPgorPHA+PGI+T3JnYW5pemluZyB0aGUgRGF0YSBGaWxlczo8L2I+PC9wPgorPHA+VGhlIGluZGl2aWR1YWwgZmlsZXMgb3IgY29sbGVjdGlvbnMgb2YgZmlsZXMgZm9yIGEgcGFydGljdWxhciBzY2VuYXJpbyAKK3Nob3VsZCBiZSBncm91cGVkIGluIGEgc2luZ2xlIGZvbGRlci4gSW4gZmlndXJlIDFhIHdlIHNob3cgYSBjb2xsZWN0aW9uIG9mIAorZmlsZXMsIGFsbCBjb250YWluaW5nIFNoaWdlbGxhIGRhdGEsIGdyb3VwZWQgaW4gYSBmb2xkZXIgY2FsbGVkICJTY2VuYXJpb1NoaWdlbGxhIi4gCitUaGlzIGZvbGRlciBjYW4gaGF2ZSBhbnkgbmFtZSBhbmQgYmUgcGxhY2VkIGluIGFueSBsb2NhdGlvbi4gSW4gdGhlIGV4YW1wbGUgCitiZWxvdyB3ZSBwbGFjZSB0aGUgZm9sZGVyIGluIHRoZSBzYW1lIGxvY2F0aW9uIHRoYXQgU1RFTSB0eXBpY2FsbHkgZXhwb3J0cyAKK2RhdGEgdG8sIG5hbWVseTo8L3A+Cis8cD4mbmJzcDsmbmJzcDsgLi4uIDxiPiBydW50aW1lLXN0ZW0ucHJvZHVjdFwmbHQ7cHJvamVjdCZndDtcUmVjb3JkZWQgU2ltdWxhdGlvbnNcCis8L2I+PC9wPgorPHA+V2hlcmUgeW91ciBydW50aW1lLXN0ZW0ucHJvZHVjdFwgaXMgdHlwaWNhbGx5IGxvY2F0ZWQgbiZuYnNwOworPGEgaHJlZj0iZmlsZTovLy9DOi9ydW50aW1lLXN0ZW0ucHJvZHVjdC8iPkM6XHJ1bnRpbWUtc3RlbS5wcm9kdWN0XDwvYT4gaW4gYSAKK2RlZmF1bHQgRWNsaXBzZSBpbnN0YWxsYXRpb24uPC9wPgorPHA+VG8gaW1wb3J0IGRhdGEsIGl0IGlzIG5lY2Vzc2FyeSB0aGF0IGEgQ1NWIGZpbGUgYmUgY3JlYXRlZCBmb3IgZWFjaCBzdGF0ZSAKK21vZGVsZWQgYnkgdGhlIGRpc2Vhc2UuIEVhY2ggZmlsZSBuYW1lIHNob3VsZCBiZSB0aGUgZGlzZWFzZSBzdGF0ZSBpZGVudGlmaWVyIAorKGUuZy4gUywgRSwgSSBvciBSKSBmb2xsb3dlZCBieSBhbiB1bmRlcnNjb3JlIGNoYXJhY3RlciAoXykgZm9sbG93ZWQgYnkgYSBudW1iZXIuIAorVGhlIG51bWJlciBpbmRpY2F0ZXMgdGhlIGdlb2dyYXBoaWNhbCByZXNvbHV0aW9uIGZvciBsb2NhdGlvbnMgY29udGFpbmVkIGluIHRoZSAKK2ZpbGUuIEZvciBpbnN0YW5jZSwgMyByZXByZXNlbnRzIGxvY2F0aW9ucyBhdCBhZG1pbmlzdHJhdGlvbiBsZXZlbCAzIChVUyBjaXRpZXMpLiAKK0luIEZpZ3VyZSAxYSB3ZSBzaG93IHNldmVyYWwgZmlsZXMgY29udGFpbmluZyBkYXRhIGZvciB0aGUgUywgRSwgSSBhbmQgUiBzdGF0ZXMgCithdCBhZG1pbmlzdHJhdGlvbiBsZXZlbCAzLiBUaGUgZmlsZSBleHRlbnNpb24gc2hvdWxkIGJlIC5jc3YuIDwvcD4KKzxwPkZvciBpbmZvcm1hdGlvbiBvbiBob3cgdG8gZXhwb3J0IGRhdGEsIHBsZWFzZSBzZWUgdGhlIGRvY3VtZW50YXRpb24gb24gdGhlCis8YSBocmVmPSIuLi9pbnRlcmZhY2Uvdmlld3MvY3N2bG9nZ2Vydmlldy5odG1sIj5DU1YgTG9nZ2VyIFZpZXc8L2E+LjwvcD4KKzx0YWJsZSBib3JkZXI9IjEiIHdpZHRoPSI1NSUiIGlkPSJ0YWJsZTMiPgorCTx0cj4KKwkJPHRkPgorCQk8aW1nIGJvcmRlcj0iMCIgc3JjPSJpbWcvaW1wb3J0c2NlbmFyaW8xYS5qcGciPjwvdGQ+CisJPC90cj4KKwk8dHI+CisJCTx0ZD48Yj5GaWd1cmUgMWE6IE9yZ2FuaXppbmcgeW91ciBkYXRhIHRvIHByZXBhcmUgdG8gaW1wb3J0IGludG8gU1RFTS48L2I+PC90ZD4KKwk8L3RyPgorPC90YWJsZT4KKzxwPkVhY2ggQ1NWIGZpbGUgc2hvdWxkIGNvbnRhaW4gYSBoZWFkZXIgaW5kaWNhdGluZyB0aGUgZG9tYWluIG9mIGRhdGEgaW4gCitlYWNoIGNvbHVtbi4gVGhlIGZpcnN0IGNvbHVtbiBzaG91bGQgY29udGFpbiBhIHNlcXVlbnRpYWwgaXRlcmF0aW9uIG9yIHJvdyAKK251bWJlciBhbmQgdGhlIGhlYWRlciBsYWJlbCBtdXN0IGJlICdpdGVyYXRpb24nLiBUaGUgc2Vjb25kIGNvbHVtbiBzaG91bGQgCitjb250YWluIHRoZSB0aW1lIHRoZSBkYXRhIGFwcGxpZXMgdG8gKGVhY2ggcm93IHNob3VsZCBiZSBzZXF1ZW50aWFsIGluIHRpbWUpIAord2l0aCBoZWFkZXIgbGFiZWwgJ3RpbWUnLiBUaGUgZm9sbG93aW5nIGNvbHVtbnMgaGVhZGVycyBzaG91bGQgaW5kaWNhdGUgdGhlIAordW5pcXVlIFNURU0gbG9jYXRpb24gSUQgZm9yIHdoaWNoIGRhdGEgaW4gdGhhdCBjb2x1bW4gYmVsb25ncyB0bywgYW5kIHRoZSAKK3ZhbHVlcyBpbiBlYWNoIHJvdyBpcyB0aGUgY291bnQgKGluZGl2aWR1YWxzKSBhdCB0aGUgbG9jYXRpb24gaW4gdGhlIHN0YXRlIAorcmVwcmVzZW50ZWQgYnkgdGhlIGZpbGUuIElmIHRoZSBkYXRhIGlzIGZyb20gc3luZHJvbWljIHN1cnZlaWxsYW5jZSB1c2VycyAKK3dpbGwgbGlrZWx5IG5vdCBoYXZlIGluZm9ybWF0aW9uIG9uIGV2ZXJ5IHBvc3NpYmxlIHN0YXRlIGJ1dCB3aGVuIGltcG9ydGluZyAKK3lvdSBtdXN0IGhhdmUgZmlsZXMgYW5kIGZpbGUgaGVhZGVycyBmb3IgZWFjaCBzdGF0ZSB0aGF0IHlvdSB3YW50IHRvIGRpc3BsYXkuIAorU1RFTSBkZXRlcm1pbmVzIHRoZSB0eXBlIG9mIHRoZSBkaXNlYXNlIGJ5IGNoZWNraW5nIHdoaWNoIGZpbGVzIGFyZSBhdmFpbGFibGUgCit3aGVuIGltcG9ydGluZyBkYXRhLCBzbyBpZiBmb3IgZXhhbXBsZSBTVEVNIGZpbmRzIGFuIFNfMy5jc3YgYW5kIElfMy5jc3YgZmlsZSAKK2J1dCBubyBFXzMuY3N2IG9yIFJfMy5jc3YgZmlsZSBpdCB3aWxsIGFzc3VtZWQgdGhlIGRpc2Vhc2UgaXMgb2YgdHlwZSBTSS4gCitOb3RlIHRoYXQgdGhlIGRhdGEgaW4gZWFjaCBjb2x1bW4gbXVzdCBiZSB0b3RhbCBjb3VudCAoaW5kaXZpZHVhbHMpIGFuZCBub3QgCitmcmFjdGlvbiBpbiBlYWNoIHN0YXRlLiBUaGUgbnVtYmVycyBtYXkgYmUgZmxvYXRpbmcgcG9pbnQgKGFsbG93aW5nIGZyYWN0aW9uYWwgCitwZW9wbGUgaW5mZWN0ZWQgZm9yIGV4YW1wbGUpLiA8L3A+Cis8dGFibGUgYm9yZGVyPSIxIiBpZD0idGFibGU1Ij4KKwk8dHI+CisJCTx0ZD4KKwkJPHAgYWxpZ249ImxlZnQiPjxiPml0ZXJhdGlvbiwmbmJzcDt0aW1lLCZuYnNwO1VTLVZULTUwMDEzLTY3MDAwLCZuYnNwO1VTLVZULTUwMDI3LTc3NTAwLCZuYnNwO1VTLVZULTUwMDIxLTE2ODI1LCZuYnNwO1VTLVZULTUwMDIxLTc1OTI1PGJyLz4KKwkJMCxUaHUmbmJzcDtEZWMmbmJzcDsxMyZuYnNwOzE4OjMyOjU4Jm5ic3A7UFNUJm5ic3A7MjAwNywmbmJzcDsyNTMxNzUsJm5ic3A7MS40NSwmbmJzcDsxLjQ1LCZuYnNwOzAuMCwmbmJzcDswLjAsJm5ic3A7MjIuOTk8YnIvPgorCQkxLFRodSZuYnNwO0RlYyZuYnNwOzEzJm5ic3A7MTg6MzI6NTkmbmJzcDtQU1QmbmJzcDsyMDA3LCZuYnNwOzI1MzExMCwmbmJzcDszLjM0LCZuYnNwOzMuMzQsJm5ic3A7MC4wLCZuYnNwOzAuNDMsJm5ic3A7ODYuMjI8YnIvPgorCQkuLi48L2I+PC90ZD4KKwk8L3RyPgorCTx0cj4KKwkJPHRkPgorCQk8cCBhbGlnbj0iY2VudGVyIj48Yj5UYWJsZSAxOiBUaGUgQ1NWIGZpbGUgbXVzdCBsYWJlbCB0aGUgbG9jYXRpb25zIHlvdSBwbGFuIHRvIGltcG9ydCAKKwkJaW50byBTVEVNIChzZWUgdGV4dCk8YnI+CisJCTwvYj48aT5Gb3IgaW5mb3JtYXRpb24gb24gaG93IHRvIGV4cG9ydCBkYXRhLCBwbGVhc2Ugc2VlIHRoZSAKKwkJZG9jdW1lbnRhdGlvbiBvbiB0aGUgPGEgaHJlZj0iLi4vaW50ZXJmYWNlL3ZpZXdzL2NzdmxvZ2dlcnZpZXcuaHRtbCI+Q1NWIAorCQlMb2dnZXIgVmlldzwvYT4uPC9pPjwvdGQ+CisJPC90cj4KKzwvdGFibGU+Cis8cCBhbGlnbj0iY2VudGVyIj4mbmJzcDs8L3A+Cis8cCBhbGlnbj0ibGVmdCI+SW4gb3JkZXIgdG8gYWN0dWFsbHkgaW1wb3J0IHRoZSBkYXRhIGludG8gU1RFTSB5b3UgbXVzdCBjcmVhdGUgYSAKK3NjZW5hcmlvLiBUaGUgZXh0ZXJuYWwgZGF0YSB3aWxsIGJlIHJlYWQgYnkgYWRkaW5nIGEgc3BlY2lhbCBkaXNlYXNlIG1vZGVsPGJyPgorY2FsbGVkIGEgPGI+JnF1b3Q7RXh0ZXJuYWxEYXRhU291cmNlRGlzZWFzZU1vZGVsJnF1b3Q7PC9iPiB0byB5b3VyIHNjZW5hcmlvLiBGb2xsb3cgdGhlIAoraW5zdHJ1Y3Rpb25zIGZvciA8YSBocmVmPSJzY2VuYXJpb3R1dG9yaWFsLmh0bWwiPmNyZWF0aW5nIGEgc2NlbmFyaW8uPC9hPiBZb3VyIAorc2NlbmFyaW8gbXVzdCBjb250YWluPGJyPgorYSZuYnNwOyA8YSBocmVmPSJtb2RlbHR1dG9yaWFsLmh0bWwiPm1vZGVsPC9hPiBhbmQgPGEgaHJlZj0iZ3JhcGh0dXRvcmlhbC5odG1sIj4KK2dyYXBoPC9hPiB0aGF0IGNvbnRhaW5zIHRoZSBzYW1lIHNldCBvZiB0aGUgcmVnaW9ucyBuYW1lZCBpbiB5b3VyIGNvbGxlY3Rpb24gb2YgCitkYXRhIGZpbGVzLiBTbyBpZiB5b3Ugd2FudCB0byBwbGF5IGJhY2sgZGF0YSBvbiBVUyBjb3VudGllcywgPGJyPgoreW91IG11c3QgYWRkIGFsbCB0aGUgVVMgY291bnRpZXMgdG8geW91ciBtb2RlbC48L3A+Cis8cCBhbGlnbj0ibGVmdCI+V2hlbiB5b3UgYXJlIHJlYWR5IHRvIGFkZCB0aGUgPGI+RXh0ZXJuYWxEYXRhU291cmNlRGlzZWFzZU1vZGVsCis8L2I+dG8geW91ciBzY2VuYXJpbyAodW5kZXIgdGhlIG1vZGVsIG5vZGUpLCBjbGljayBvbiB0aGUgaWNvbiBmb3IKKzxhIGhyZWY9ImRpc2Vhc2V0dXRvcmlhbC5odG1sIj5hZGRpbmcgYSBuZXcgZGlzZWFzZTwvYT4uPGJyPgorc3BlY2lmeSB5b3VyIHByb2plY3QgYW5kIGdpdmUgdGhlIGRpc2Vhc2UgYSBuYW1lLiBTZWxlY3QmbmJzcDsgPGI+CitFeHRlcm5hbERhdGFTb3VyY2VEaXNlYXNlTW9kZWwgPC9iPmFzIHRoZSBkaXNlYXNlIG1vZGVsLiBZb3UgbXVzdCB0aGVuIHRlbGwgdGhlJm5ic3A7Cis8Yj5FeHRlcm5hbERhdGFTb3VyY2VEaXNlYXNlTW9kZWwgPGJyPgorPC9iPnRoZSBsb2NhdGlvbiBvZiB5b3VyIGRhdGEgZmlsZShzKS4gWW91IG1heSB1c2UgdGhlIHNlbGVjdG9yIGJ1dHRvbnMgdG8gdGhlIAorcmlnaHQgb2YgRGF0YSBQYXRoLiBBICZxdW90O1NlbGVjdCBEaXJlY3RvcnkmcXVvdDsgZGlhbG9nIChmaWd1cmUgMWMpIHdpbGwgYXBwZWFyIGFsbG93aW5nIAoreW91IHRvIHNlbGVjdCBhIGRpcmVjdG9yeSB0aGF0IGNvbnRhaW5zIHRoZSBkYXRhIGZpbGVzIHlvdSB3aXNoIHRvIHBsYXkgYmFjay4gPGJyPgorPC9wPgorPHRhYmxlIGJvcmRlcj0iMSIgd2lkdGg9IjM4JSIgaWQ9InRhYmxlNCI+CisJPHRyPgorCQk8dGQ+CisJCTxpbWcgYm9yZGVyPSIwIiBzcmM9ImltZy9pbXBvcnRzY2VuYXJpbzFiLmpwZyI+PC90ZD4KKwkJPHRkPgorCQk8aW1nIGJvcmRlcj0iMCIgc3JjPSJpbWcvaW1wb3J0c2NlbmFyaW8xYy5qcGciPjwvdGQ+CisJPC90cj4KKwk8dHI+CisJCTx0ZD48Yj5GaWd1cmUgMWI6IENyZWF0aW5nIGFuJm5ic3A7IEV4dGVybmFsRGF0YVNvdXJjZURpc2Vhc2VNb2RlbCA8L2I+CisJCTwvdGQ+CisJCTx0ZD48Yj5GaWd1cmUgMWM6IFNlbGVjdCB0aGUgRGlyZWN0b3J5IHRoYXQgQ29udGFpbnMgeW91ciBkYXRhPC9iPjwvdGQ+CisJPC90cj4KKzwvdGFibGU+Cis8cD5PbmNlIHlvdSBoYXZlIGNyZWF0ZWQgYSBzY2VuYXJpbyBzZXQgdXAgdG8gUmVwbGF5IGEgZGlzZWFzZSBmcm9tIGFuIGV4dGVybmFsIAorZmlsZSB5b3UgY2FuIGFsc28gZWRpdCB0aGUgZGF0YSBwYXRoIHVzaW5nIHRoZSBQcm9wZXJ0aWVzIEVkaXRvci4mbmJzcDsgSnVzdCBnbyAKK3RvIHlvdXIgcHJvamVjdCwgZmluZCB0aGUmbmJzcDsgPGI+RXh0ZXJuYWxEYXRhU291cmNlRGlzZWFzZU1vZGVsIDwvYj55b3UgCitjcmVhdGVkPGJyPgordW5kZXIgdGhlICZxdW90O2RlY29yYXRvcnMmcXVvdDsgZm9sZGVyLCBhbmQmbmJzcDsgZG91YmxlIGNsaWNrIG9uIGl0IGluIHRoZSBSZXNvdXJjZSBTZXQgCit3aW5kb3cgKFNlZSBmaWd1cmUgMikuIFRoZSBFZGl0b3Igd2lsbCBzaG93IHVwIGFsbG93aW5nIHlvdSB0byBjaGFuZ2UgdGhpcyBwYXRoIAordXNlZCB0byByZWFkIGluIGRhdGEuPC9wPgorPHA+Jm5ic3A7PC9wPgorPHRhYmxlIGJvcmRlcj0iMSIgd2lkdGg9IjQzJSIgaWQ9InRhYmxlMiI+CisJPHRyPgorCQk8dGQ+CisJCTxiPgorCQk8aW1nIGJvcmRlcj0iMCIgc3JjPSJpbWcvaW1wb3J0c2NlbmFyaW8yLmpwZyIgPjwvYj48L3RkPgorCTwvdHI+CisJPHRyPgorCQk8dGQ+PGI+RmlndXJlIDI6IENoYW5naW5nIHRoZSBEYXRhIFBhdGggaW4gdGhlIFByb3BlcnRpZXMgRWRpdG9yPC9iPjwvdGQ+CisJPC90cj4KKzwvdGFibGU+Cis8cD4mbmJzcDs8L3A+Cis8cD4gT25jZSB5b3UgaGF2ZSBjb21wbGV0ZWQgc2V0dGluZyB1cCB5b3VyIHNjZW5hcmlvLAorPHNwYW4gc3R5bGU9ImZvbnQtd2VpZ2h0OiA0MDAiPjxpPlNhdmUgeW91ciB3b3JrIGF0IHRoaXMgcG9pbnQgYnkgaGl0dGluZyA8Yj5jdHJsLXM8L2I+PC9pPjwvc3Bhbj48L3A+Cis8cD4gVG8gcmVwbGF5IHlvdXIgZGF0YSwgc2ltcGx5IHNlbGVjdCB0aGUgc2NlbmFyaW8geW91IGNyZWF0ZWQgaW4gdGhlIFNURU0gCitwcm9qZWN0IGV4cGxvcmVyLCByaWdodCBjbGljaywgYW5kIHNlbGVjdCBydW4uIFNURU0gd2lsbCBsYXVuY2gsIGxvYWQgdGhlIAorbG9jYXRpb25zIHlvdSBzcGVjaWZpZWQ8YnI+CithbmQgcGxheSBiYWNrIHlvdXIgZGF0YS48L3A+CisKKworPC9ib2R5PgorPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL3R1dG9yaWFscy9kaXNlYXNldHV0b3JpYWwuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL3R1dG9yaWFscy9kaXNlYXNldHV0b3JpYWwuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMThjZDE2Ci0tLSAvZGV2L251bGwKKysrIGIvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvdHV0b3JpYWxzL2Rpc2Vhc2V0dXRvcmlhbC5odG1sCkBAIC0wLDAgKzEsNTggQEAKKzwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi9odG1sNC9sb29zZS5kdGQiPgorPGh0bWw+Cis8aGVhZD4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTEiPgorPHRpdGxlPkNyZWF0aW5nIGEgbmV3IERpc2Vhc2UgVHV0b3JpYWw8L3RpdGxlPgorPC9oZWFkPgorPGJvZHk+Cis8aDE+Q3JlYXRpbmcgYSBuZXcgRGlzZWFzZTwvaDE+CisKKzxwPjEpIE9uIHRoZSBtZW51IGJhciBjbGljayAtJmd0O25ldy0mZ3Q7bmV3IGRpc2Vhc2UgPC9wPgorPHA+MikgVGhpcyB3aWxsIGxhdW5jaCB0aGUgRGlhbG9nIHNob3duIGluIEZpZ3VyZSAxLiBGaWxsIGluIHRoZSBOYW1lOiAoRXhwZXJpbWVudGFsRGlzZWFzZSkKKzwvcD4KKzxwPjMpIEZpbGwgaW4gdGhlIERpc2Vhc2UgTmFtZTogWW91IGNhbiB1c2UgdGhlIHNhbWUgbmFtZSB5b3UgdXNlZCBpbiAoMikgKEV4cGVyaW1lbnRhbERpc2Vhc2UpCis8L3A+Cis8cD40KSBTZWxlY3QgdGhlIERpc2Vhc2VNb2RlbCBpbiB0aGUgQ29tYm9Cb3g6IGUuZy4sIHNlbGVjdCAmcXVvdDtFeHBlcmltZW50YWxEaXNlYXNlTW9kZWxJbXBsJnF1b3Q7Cis8L3A+Cis8cD5BdCB0aGlzIHBvaW50IHlvdSBzaG91bGQgYWxzbyBlZGl0IG9yIHNldCBhbnkgb2YgdGhlIGRpc2Vhc2UgcGFyYW1ldGVycyAoaS5lLiAKK1RyYW5zbWlzc2lvbiBSYXRlLCBSZWNvdmVyeSBSYXRlLCBldGMpLjxicj4KK0lmIHlvdSBkb24ndCB3YW50IHRvIGRvIGl0IG5vdyBpdCB3aWxsIGFsc28gYmUgZWRpdGFibGUgYW55IHRpbWUgYWZ0ZXIgdGhlIAorc2NlbmFyaW8gaXMgY3JlYXRlZC4gPC9wPgorPHRhYmxlIGJvcmRlcj0iMSIgY2VsbHNwYWNpbmc9IjEiIHdpZHRoPSI0OSUiPgorCTx0cj4KKwkJPHRkPgorCQk8cCBhbGlnbj0iY2VudGVyIj4KKwkJPGltZyBib3JkZXI9IjAiIHNyYz0iaW1nL2Rpc2Vhc2VEaWFsb2cuanBnIiB3aWR0aD0iNTI1IiBoZWlnaHQ9IjUzMSI+PC90ZD4KKwk8L3RyPgorCTx0cj4KKwkJPHRkPgorCQk8cCBhbGlnbj0iY2VudGVyIj48Yj5GaWd1cmUgMTogVGhlIG5ldyBEaXNlYXNlIERpYWxvZy48L2I+PC90ZD4KKwk8L3RyPgorPC90YWJsZT4KKzxwPiZuYnNwOzwvcD4KKzxwPjUpIEZpbGwgaW4gYW55IER1YmxpbiBjb3JlIGRhdGEgeW91IHdhbnQgdG8gYWRkIDwvcD4KKzxwPjYpIENsaWNrIGZpbmlzaCA8L3A+Cis8cD43KSBVbmRlciBkZWNvcmF0b3JzIHlvdSBzaG91bGQgc2VlIEV4cGVyaW1lbnRhbERpc2Vhc2Uuc3RhbmRhcmQgPC9wPgorPHA+OCkgRG91YmxlIGNsaWNrIG9uIE1PREVMUyBpbiB0aGUgcHJvamVjdCBleHBsb3Jlci4gWW91IHNob3VsZCBzZWUgJnF1b3Q7Q3ViYUV4cGVyaW1lbnRhbERpc2Vhc2UmcXVvdDsgCitpbiB0aGUgUmVzb3VyY2UgU2V0LiA8L3A+Cis8cD45KSBEUkFHIHlvdXIgbmV3IGRpc2Vhc2UgKGUuZy4sIEN1YmFFeHBlcmltZW50YWxEaXNlYXNlLlN0YW5kYXJkKSBmcm9tIAorZGVjb3JhdG9ycyAoaW4gdGhlIHByb2plY3QgZXhwbG9yZXIgd2luZG93KSBpbnRvIHRoZSBtb2RlbCAmcXVvdDtDdWJhRXhwZXJpbWVudGFsRGlzZWFzZSZxdW90OyAKK2luIHRoZSBSZXNvdXJjZSBTZXQgd2luZG93LiBFeHBhbmQgdGhlICZxdW90O0N1YmFFeHBlcmltZW50YWxEaXNlYXNlJnF1b3Q7IGluIHRoZSAKK1Jlc291cmNlIFNldCB3aW5kb3cgdG8gc2VlIHRoYXQgaXQgd29ya2VkLiBTZWUgRmlndXJlIDIuPC9wPgorPHRhYmxlIGJvcmRlcj0iMSIgY2VsbHNwYWNpbmc9IjEiIHdpZHRoPSI0OSUiPgorCTx0cj4KKwkJPHRkPgorCQk8cCBhbGlnbj0iY2VudGVyIj4KKwkJPGltZyBib3JkZXI9IjAiIHNyYz0iaW1nL2RyYWdkaXNlYXNldG9tb2RlbC5qcGciIHdpZHRoPSI1NzMiIGhlaWdodD0iNDMxIj48L3RkPgorCTwvdHI+CisJPHRyPgorCQk8dGQ+CisJCTxwIGFsaWduPSJjZW50ZXIiPjxiPkZpZ3VyZSAyLiBEcmFnIHRoZSBEaXNlYXNlIE1vZGVsIChkZWNvcmF0b3IpIGludG8gCisJCXRoZSBNb2RlbCBpbiB0aGUgUmVzb3VyY2UgU2V0LjwvYj48L3RkPgorCTwvdHI+Cis8L3RhYmxlPgorCis8aDM+PHNwYW4gc3R5bGU9ImZvbnQtd2VpZ2h0OiA0MDAiPjxpPlNhdmUgeW91ciB3b3JrIGF0IHRoaXMgcG9pbnQgYnkgaGl0dGluZyA8Yj5jdHJsLXM8L2I+PC9pPjwvc3Bhbj48L2gzPgorCis8L2JvZHk+Cis8L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvdHV0b3JpYWxzL2V4cGVyaW1lbnR0dXRvcmlhbC5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvdHV0b3JpYWxzL2V4cGVyaW1lbnR0dXRvcmlhbC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmViNzFiZTUKLS0tIC9kZXYvbnVsbAorKysgYi9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC90dXRvcmlhbHMvZXhwZXJpbWVudHR1dG9yaWFsLmh0bWwKQEAgLTAsMCArMSw2OCBAQAorPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL2h0bWw0L2xvb3NlLmR0ZCI+Cis8aHRtbD4KKzxoZWFkPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9SVNPLTg4NTktMSI+Cis8dGl0bGU+Q3JlYXRpbmcgYSBuZXcgRXhwZXJpbWVudCBUdXRvcmlhbDwvdGl0bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxoMT5DcmVhdGUgYSBuZXcgRXhwZXJpbWVudDwvaDE+Cis8cD48Yj5PdmVydmlldzo8L2I+PC9wPgorPHA+QW4gRXhwZXJpbWVudCBpcyBhIGNvbGxlY3Rpb24gb2YgPGk+bW9kaWZpZXJzIDwvaT53aXRoIGEgbGluayB0byBhIDxiPgorU2NlbmFyaW88L2I+PGJyPgorQW4gZXhwZXJpbWVudCBjYW4gcnVuIGp1c3QgbGlrZSBhIHNjZW5hcmlvIGNhbiBydW4uIFdoZW4geW91IHJ1biBhbiBleHBlcmltZW50CitpdCBjcmVhdGVzIGEgPGI+QmF0Y2g8L2I+PGJyPgorQSBCYXRjaCBpcyBhbiBleGVjdXRhYmxlIHRoYXQgc3Bhd25zIG9mZiAoYSBzZXF1ZW5jZSBvZikgc2ltdWxhdGlvbnMuIFRoZQorRXhwZXJpbWVudCB1c2VzIG1vZGlmaWVycyB0byBtYWtlIGNoYW5nZXMgdG8gdGhlIHNjZW5hcmlvIHRoZW4gcnVuIGEgc2ltdWxhdGlvbgorZnJvbSBlYWNoLjxicj4KKyZuYnNwOzwvcD4KKzxwPk5ldyBWaWV3OiBBY3RpdmUgQmF0Y2hlcyAoYW5hbG9nb3VzIHRvIEFjdGl2ZSBTaW11bGF0aW9ucyk8YnI+Cis8YnI+CisxKSBjcmVhdGUgeW91ciBzY2VuYXJpbzxicj4KKzxicj4KKzIpIGluIHRoZSBlZGl0b3IgeW91IGNhbiBjcmVhdGUgbW9kaWZpZXJzIGZvciBtb2RlbHMsIGRlY29yYXRvcnMgKGEgZGlzZWFzZQorbW9kZWwpLCBvciBncmFwaHMuPGJyPgorVG8gY3JlYXRlIGEgbW9kaWZpZXIgZm9yIGEgZGlzZWFzZSwgZm9yIGV4YW1wbGUsIGZpbmQgeW91ciBkaXNlYXNlIGluIHRoZSBTVEVNCitQcm9qZWN0IGV4cGxvcmVyLiBTZWxlY3QgaXQsIHJpZ2h0IGNsaWNrIG9uIHlvdXIgZGlzZWFzZSwgYW5kIGNob3NlIGNyZWF0ZSBhIG1vZGlmaWVyCithcyBzaG93biBpbiBmaWd1cmUgMS4gPC9wPgorPHRhYmxlIGJvcmRlcj0iMSIgd2lkdGg9IjMwJSIgaWQ9InRhYmxlMSI+CisJPHRyPgorCQk8dGQ+CisJCTxwIGFsaWduPSJjZW50ZXIiPgorCQk8aW1nIGJvcmRlcj0iMCIgc3JjPSJpbWcvZXhwZXIxYS5qcGciIHdpZHRoPSI0NDgiIGhlaWdodD0iNjUzIj48L3RkPgorCQk8dGQ+PGltZyBib3JkZXI9IjAiIHNyYz0iaW1nL2V4cGVyMWIuanBnIiB3aWR0aD0iNDQ5IiBoZWlnaHQ9IjY0OSI+PC90ZD4KKwk8L3RyPgorCTx0cj4KKwkJPHRkPjxiPkZpZ3VyZSAxYTogQ3JlYXRpbmcgYSBuZXcgbW9kaWZpZXIgZm9yIGEgcGFydGljdWxhciBkaXNlYXNlIGluIGFuCisJCWV4aXN0aW5nIHNjZW5hcmlvPC9iPjwvdGQ+CisJCTx0ZD48Yj5GaWd1cmUgMWI6IERlZmluaW5nIHRoZSBuZXcgbW9kaWZpZXIgZm9yIGFuIGV4cGVyaW1lbnQ8L2I+PC90ZD4KKwk8L3RyPgorPC90YWJsZT4KKzxwPiA8YnI+CitUaGlzIHdpbGwgbGF1bmNoIGEgbmV3IGRpYWxvZyB0byBoZWxwIHlvdSBjcmVhdGUgYSBtb2RpZmllciB0aGF0IGNhbiBiZSBhZGRlZCB0bworYW4gZXhwZXJpbWVudCAoc2VlIGZpZ3VyZSAyKS4gSW4gdGhlIG5ldyBtb2RpZmllciBkaWFsb2csIGZvciBleGFtcGxlLCB1bmRlciBUcmFuc21pc3Npb24gcmF0ZSBzZWxlY3QgJnF1b3Q7cmFuZ2UmcXVvdDsgPGJyPgorPGk+KHNlcXVlbmNlIG5vdCB5ZXQgZW5hYmxlZCk8L2k+IGFuZCBzcGVjaWZ5IHRoZSByYW5nZSBhcyBzaG93biBpbiBmaWd1cmUgMi48L3A+Cis8cD48YnI+Cis8YnI+CiszKSBPbiB0b3AsIHNlbGVjdCAmcXVvdDtFeHBlcmltZW50IE1vZGVsJnF1b3Q7IHRvIGxhdW5jaCB0aGUgZXhwZXJpbWVudCB3aXphcmQgKEZpZ3VyZSAyKTxicj4KK2RyYWcgdGhlIHNjZW5hcmlvIGludG8gdGhlIGV4cGVyaW1lbnQ8YnI+CitkcmFnIGFueSBudW1iZXIgb2YgbW9kaWZpZXJzIGludG8gdGhlIGV4cGVyaW1lbnQ8L3A+Cis8cD5jbGljayBvbiB0aGUgZXhwZXJpbWVudCwgcmlnaHQgY2xpY2ssIGFuZCBydW4gaXQuPC9wPgorPGZvbnQgc2l6ZT0iNCI+Cis8L2ZvbnQ+Cis8dGFibGUgYm9yZGVyPSIxIiBjZWxsc3BhY2luZz0iMSIgd2lkdGg9IjQ1JSI+CisJPHRyPgorCQk8dGQ+CisJCTxwIGFsaWduPSJjZW50ZXIiPgorCQk8aW1nIGJvcmRlcj0iMCIgc3JjPSJpbWcvZXhwZXIyLmpwZyIgd2lkdGg9Ijc1NiIgaGVpZ2h0PSI0OTAiPjwvdGQ+CisJPC90cj4KKwk8dHI+CisJCTx0ZD4KKwkJPHAgYWxpZ249ImNlbnRlciI+PGI+RmlndXJlIDI6IFRoZSBOZXcgRXhwZXJpbWVudCBXaXphcmQuPC9iPjwvdGQ+CisJPC90cj4KKzwvdGFibGU+CisKKzxoMz48c3BhbiBzdHlsZT0iZm9udC13ZWlnaHQ6IDQwMCI+PGk+U2F2ZSB5b3VyIHdvcmsgYXQgdGhpcyBwb2ludCBieSBoaXR0aW5nIDxiPmN0cmwtczwvYj48L2k+PC9zcGFuPjwvaDM+CisKKworPC9ib2R5PgorPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL3R1dG9yaWFscy9ncmFwaHR1dG9yaWFsLmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC90dXRvcmlhbHMvZ3JhcGh0dXRvcmlhbC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc0OGExZjcKLS0tIC9kZXYvbnVsbAorKysgYi9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC90dXRvcmlhbHMvZ3JhcGh0dXRvcmlhbC5odG1sCkBAIC0wLDAgKzEsMTEzIEBACis8IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIvaHRtbDQvbG9vc2UuZHRkIj4KKzxodG1sPgorPGhlYWQ+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0xIj4KKzx0aXRsZT5DcmVhdGluZyBhIG5ldyBHcmFwaCBUdXRvcmlhbDwvdGl0bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxoMT5DcmVhdGluZyBhIG5ldyBHcmFwaCBUdXRvcmlhbDwvaDE+CitDcmVhdGluZyBhIGdyYXBoIGluIHN0ZW0gaW52b2x2ZXMgYnVpbGRpbmcgYSBtb2RlbCBhbmQgYWRkaW5nIHRvIGl0IGEgc2V0IG9mIAorbG9jYXRpb25zIChOb2RlcykgYW5kIGNvbm5lY3Rpb25zIGJldHdlZW4gdGhvc2UgbG9jYXRpb25zIChFZGdlcykuPHA+U3RlbSBjb21lcyAKK3dpdGggYSBudW1iZXIgb2YgYnVpbGQgaW4gTW9kZWwgZWFjaCBjb250YWluaW5nIHByZWNvbmZpZ3VyZWQgZ3JhcGhzLiBJdCBhbHNvIAorY29tZXMgd2l0aCBwcmVjb25maWd1cmVkIE1vZGVscyBmb3IgZXZlcnkgY291bnRyeSBhbmQgZm9yIGV2ZXJ5IGNvbnRpbmVudC4gVGhlc2UgCittYXkgYmUgZm91bmQgaW4gdGhlIERlc2lnbmVyIFBlcnNwZWN0aXZlIHVuZGVyIHRoZSBNb2RlbHMgdGFiLiBTZWU6IAorTW9kZWxzJmd0O0dlb2dyYXBoeTwvcD4KKzxwPkFkZGluZyBhIG5ldyBkaXNlYXNlIHZlY3RvciBvciB0cmFuc21pc3Npb24gcGF0aCBiZXR3ZWVuIHR3byBsb2NhdGlvbnMgCityZXF1aXJlZCBhZGRpbmcgYSBuZXcgRWRnZSBiZXR3ZWVuIGJldHdlZW4gdGhlIHR3byByZXNwZWN0aXZlIG5vZGVzLiBCZWZvcmUgd2UgCitkaXNjdXNzIGhvdyB0byBkZWZpbmUgYW4gZW50aXJlbHkgbmV3IHR5cGUgb2YgZWRnZSwgaXQgaXMgaW1wb3J0YW50IHRvIGxlYXJuIGhvdyAKK3RvIGNvbXBvc2UgYSBncmFwaCB0YWtpbmcgYWR2YW50YWdlIG9mIGJ1aWxkIGluIGVkZ2UgY29sbGVjdGlvbnMgdGhhdCBhcmUgCithbHJlYWR5IGluY2x1ZGVkIGluIFNURU0uPC9wPgorPHA+Jm5ic3A7PC9wPgorPHAgYWxpZ249ImNlbnRlciI+PGI+PGZvbnQgc2l6ZT0iNSI+Q29tcG9zaW5nIGEgR3JhcGg8L2ZvbnQ+PC9iPjwvcD4KKzxwIGFsaWduPSJsZWZ0Ij5TdXBwb3NlIHlvdSB3YW50IHRvIGNyZWF0ZSBhIG5ldyBzaW11bGF0aW9uIHNjZW5hcmlvIGZvciBzb21lIAorZGlzZWFzZSBpbnZvbHZpbmcgdGhyZWUgY291bnRyaWVzOyBGcmFuY2UsIEl0YWx5LCBhbmQgU3BhaW4uIFN0ZW0gY29tZXMgd2l0aCAKK21vZGVscyBmb3IgZWFjaCBjb3VudHJ5IGJ1dCBkb2VzIG5vdCBjb21lIHdpdGggYSBncmFwaCBmb3IgdGhhdCBncm91cCBvZiB0aHJlZS4gCitXZSBtdXN0IGNvbXBvc2UgaXQuPC9wPgorPHAgYWxpZ249ImxlZnQiPjEpIEZvbGxvdyB0aGUgZXhhbXBsZSBpbiB0aGUgc2VjdGlvbiBvbiA8YSBocmVmPSJwcm9qZWN0dHV0b3JpYWwuaHRtbCI+Q3JlYXRpbmcgYSBuZXcgUHJvamVjdDwvYT4gCit0byBjcmVhdGUgYSBwcm9qZWN0IGZvbGRlciBmb3IgdGhpcyBuZXcgc2NlbmFyaW8uPC9wPgorPHAgYWxpZ249ImxlZnQiPjIpIEZvbGxvdyB0aGUgZXhhbXBsZSBpbiB0aGUgc2VjdGlvbiBvbiA8YSBocmVmPSJtb2RlbHR1dG9yaWFsLmh0bWwiPkNyZWF0aW5nIGEgbmV3IE1vZGVsPC9hPiAKK3RvIGNyZWF0ZSBhIHBhcmVudCBtb2RlbC4gSW4gdGhlIGZvbGxvd2luZyBleGFtcGxlIHdlIHdpbGwgYXNzdW1lIHRoYXQgeW91IHVzZWQgCit0aGUgbmFtZSAmcXVvdDtFeGFtcGxlJnF1b3Q7IGZvciB0aGlzIHBhcmVudCBtb2RlbC48L3A+Cis8cCBhbGlnbj0ibGVmdCI+MykgQ2xpY2sgb24geW91ciAmcXVvdDtFeGFtcGxlJnF1b3Q7IG1vZGVsIHRvIG9wZW4gaXQgaW4gdGhlIFJlc291cmNlIFNldCAKK3dpbmRvdy48L3A+Cis8cCBhbGlnbj0ibGVmdCI+NCkgQ2xpY2sgb24gdGhlIG1vZGVscyBmb2xkZXIgYW5kIG9wZW4gdGhlIEZvbGRlcnM8L3A+Cis8cCBhbGlnbj0ibGVmdCI+Jmd0O1NURU0mZ3Q7R2VvZ3JhcGh5Jmd0O1BvbGl0aWNhbCZndDtDb3VudHJ5Jmd0O0VTUDwvcD4KKzxwIGFsaWduPSJsZWZ0Ij5EcmFnIHRoZSBtb2RlbCBlbnRpdGxlZCZuYnNwOyAmcXVvdDtFU1AoMCwgMSkgRnVsbCBJbmZyYXN0cnVjdHVyZSZxdW90OyAKK2ludG8geW91ciBwYXJlbnQgJnF1b3Q7RXhhbXBsZSZxdW90OyBtb2RlbC4gPC9wPgorPHAgYWxpZ249ImxlZnQiPiZuYnNwOyZxdW90O0VTUCgwLCAxKSBGdWxsIEluZnJhc3RydWN0dXJlJnF1b3Q7IGlzIHRoZSBmdWxsIGluZnJhc3RydWN0dXJlIAorZm9yIFNwYWluIHdpdGggYWRtaW4gMCBhbmQgYWRtaW4gMSByZXNvbHV0aW9uLiBJdCBpcyBpdHNlbGYgYSBncmFwaCB3aXRoIAorY29udGFpbm1lbnQgcmVsYXRpb25zaGlwcyBhbmQgPGJyPgorYWRqYWNlbmN5IHJlbGF0aW9uc2hpcHMgZm9yIFNwYWluLjwvcD4KKzxwIGFsaWduPSJsZWZ0Ij41KSBSZXBlYXQgU3RlcCA0IGZvciBGcmFuY2UgYW5kIEl0YWx5PC9wPgorPHAgYWxpZ249ImxlZnQiPiZndDtTVEVNJmd0O0dlb2dyYXBoeSZndDtQb2xpdGljYWwmZ3Q7Q291bnRyeSZndDtGUkE8L3A+Cis8cCBhbGlnbj0ibGVmdCI+Jmd0O1NURU0mZ3Q7R2VvZ3JhcGh5Jmd0O1BvbGl0aWNhbCZndDtDb3VudHJ5Jmd0O0lUQTwvcD4KKzxwIGFsaWduPSJsZWZ0Ij42KSBZb3VyIHBhcmVudCBtb2RlbCAmcXVvdDtFeGFtcGxlJnF1b3Q7IHdpbGwgYXBwZWFyIG5leHQgdG8gYSBibHVlIAordHJpYW5nbGUuIElmIHlvdSBleHBhbmQgdGhpcyBub2RlIGJ5IGNsaWNraW5nIG9uICgrKSBuZXh0IHRvIHRoZSBtb2RlbCB5b3Ugd2lsbCAKK3NlZSB0aHJlZSBuZXcgYmx1ZSB0cmlhbmdsZXMgcmVwcmVzZW50aW5nIHRoZSB0aHJlZSBjb3VudHJ5IGxldmVsIGdyYXBocyB5b3UgCithZGRlZCB0byB5b3VyIG1vZGVsIChTZWUgRmlndXJlIDEpLiBIb3dldmVyLCBhdCB0aGlzIHBvaW50IHRoZXJlIGFyZSBubyAKK2Nvbm5lY3Rpb25zIGJldHdlZW4gdGhlIHRocmVlIGNvdW50cmllcyB5b3UgYWRkZWQuIFRoZXNlIGNvbm5lY3Rpb25zIG9yICZxdW90O0NvbW1vbiAKK0JvcmRlciZxdW90OyByZWxhdGlvbnNoaXBzIGJldHdlZW4gYW55IHR3byBjb3VudHJpZXMgbXVzdCBiZSBhZGRlZCBvbmNlIHBlciBwYWlyIG9mIAorY291bnRyaWVzLiBUaGV5IG1heSBiZSBmb3VuZCB1bmRlciB0aGUgR3JhcGhzIHRhYi4gQW55IHR3byB3YXkgZWRnZSBpcyBwbGFjZSBpbiAKK3RoZSBmb2xkZXIgb2YgdGhlIGNvdW50cmllcyB3aG8ncyB0aHJlZSBsZXR0ZXIgY291bnRyeSBjb2RlIGFwcGVhcnMgZmlyc3QgCithbHBoYWJldGljYWxseS4gPC9wPgorPHRhYmxlIGJvcmRlcj0iMSIgY2VsbHNwYWNpbmc9IjEiIHdpZHRoPSIxMDAlIj4KKwk8dHI+CisJCTx0ZD48Yj4KKworPGltZyBib3JkZXI9IjAiIHNyYz0iaW1nL2dyYXBoMS5qcGciIHdpZHRoPSI4MDAiIGhlaWdodD0iNjIzIj48L2I+PC90ZD4KKwk8L3RyPgorCTx0cj4KKwkJPHRkPjxiPkZpZ3VyZSAxOiBDb21wb3NpbmcgYSBHcmFwaDwvYj48L3RkPgorCTwvdHI+Cis8L3RhYmxlPgorPHAgYWxpZ249ImNlbnRlciI+Jm5ic3A7PC9wPgorPHAgYWxpZ249ImxlZnQiPjcpIFRvIGFkZCB0aGUgYm9yZGVyIGJldHdlZW4gRnJhbmNlIGFuZCBTcGFpbiBzZWxlY3QgdGhlIEdSQVBIUyAKK3RhYiBhbmQgY2xpY2sgb246PC9wPgorPHAgYWxpZ249ImxlZnQiPiZndDtTVEVNJmd0O0dlb2dyYXBoeSZndDtQb2xpdGljYWwmZ3Q7Q291bnRyeSZndDtFU1A8L3A+Cis8cCBhbGlnbj0ibGVmdCI+ZHJhZyB0aGUgaWNvbiBmb3IgJnF1b3Q7Q29tbW9uIEJvcmRlciByZWxhdGlvbnNoaXAgYmV0d2VlbiBjb3VudHJ5IAorRVNQIGFuZCBGUkEmcXVvdDsgaW50byB5b3VyICZxdW90O0V4YW1wbGUmcXVvdDsgbW9kZWwuIEl0IHdpbGwgYXBwZWFyIGF0IHRoZSBzYW1lIGxldmVsIGluIHRoZSAKK3RyZWUgYXMgdGhlIGNvdW50cmllcyBTcGFpbiBhbmQgRnJhbmNlLiBOb3RlIHRoYXQgdGhlIEVkZ2VzIGNvbm5lY3RpbmcgU3BhaW4gYW5kIAorRnJhbmNlIG1heSBiZSBmb3VuZCBpbiB0aGUgRVNQIGZvbGRlciBiZWNhdXNlIEVTUCBjb21lcyBiZWZvcmUgRlJBIAorYWxwaGFiZXRpY2FsbHkuPC9wPgorPHAgYWxpZ249ImxlZnQiPjgpIFRvIGFkZCB0aGUgYm9yZGVyIGJldHdlZW4gRnJhbmNlIGFuZCBJdGFseSBzZWxlY3QgdGhlIEdSQVBIUyAKK3RhYiBhbmQgY2xpY2sgb246PC9wPgorPHAgYWxpZ249ImxlZnQiPiZndDtTVEVNJmd0O0dlb2dyYXBoeSZndDtQb2xpdGljYWwmZ3Q7Q291bnRyeSZndDtGUkE8L3A+Cis8cCBhbGlnbj0ibGVmdCI+ZHJhZyB0aGUgaWNvbiBmb3IgJnF1b3Q7Q29tbW9uIEJvcmRlciByZWxhdGlvbnNoaXAgYmV0d2VlbiBjb3VudHJ5IAorRlJBIGFuZCBJVEE8L3A+Cis8cCBhbGlnbj0ibGVmdCI+OSkgRm9sbG93IHRoZSBpbnN0cnVjdGlvbnMgZm9yIDxhIGhyZWY9ImRpc2Vhc2V0dXRvcmlhbC5odG1sIj5DcmVhdGluZyBhIG5ldyBEaXNlYXNlPC9hPiAKK2FuZCBkcmFnIHlvdXIgbmV3IERpc2Vhc2UgaW50byB5b3VyICZxdW90O0V4cGVyaW1lbnRhbCZxdW90OyBNb2RlbC4gTm90ZSB0aGF0IGFueSBkaXNlYXNlIAorKG9yIGFsbCBkaXNlYXNlcykgYXBwZWFyIHVuZGVyIHRoZSB0b3AgbGV2ZWwgTU9ERUwgbm9kZS4gU2VlIGZpZ3VyZSAyLjwvcD4KKzxwIGFsaWduPSJsZWZ0Ij4mbmJzcDs8L3A+Cis8dGFibGUgYm9yZGVyPSIxIiBjZWxsc3BhY2luZz0iMSIgd2lkdGg9IjEwMCUiPgorCTx0cj4KKwkJPHRkPjxiPjxpbWcgYm9yZGVyPSIwIiBzcmM9ImltZy9ncmFwaDIuanBnIiB3aWR0aD0iODAwIiBoZWlnaHQ9IjYyMyI+PC9iPjwvdGQ+CisJPC90cj4KKwk8dHI+CisJCTx0ZD48Yj5GaWd1cmUgMjogQSBEaXNlYXNlIGhhcyBiZWVuIGFkZGVkIHRvIHRoZSBNb2RlbDwvYj48L3RkPgorCTwvdHI+Cis8L3RhYmxlPgorPHAgYWxpZ249ImxlZnQiPjEwKSBGb2xsb3cgdGhlIGluc3RydWN0aW9ucyA8YSBocmVmPSJzY2VuYXJpb3R1dG9yaWFsLmh0bWwiPkNyZWF0aW5nIGEgbmV3IFNjZW5hcmlvPC9hPi4gCitBZGQgeW91ciBtb2RlbCB0byB0aGUgU2NlbmFyaW8uIFRoZW4gZm9sbG93IGluc3RydWN0aW9ucyBmb3ImbmJzcDsgPGEgaHJlZj0ic2VxdWVuY2VydHV0b3JpYWwuaHRtbCI+Q3JlYXRpbmcgYSBuZXcgU2VxdWVuY2VyPC9hPiAKK2FuZCA8YSBocmVmPSJpbmZlY3RvcnR1dG9yaWFsLmh0bWwiPkNyZWF0aW5nIGEgbmV3IEluZmVjdG9yPC9hPi4gU2VlIEZpZ3VyZSAzIAorYmVsb3cuIFRoZSBTZXF1ZW5jZXIsIHRoZSBJbmZlY3RvciwgYW5kIHlvdXIgbmV3ICZxdW90O0V4YW1wbGUmcXVvdDsgTW9kZWwgYXJlIGFsbCBwYXJ0IG9mIAorYSBTY2VuYXJpbyBub2RlLiBFeHBhbmQgeW91ciBtb2RlbCB0byBzZWUgdGhlIGdyYXBoIG9mIG5vZGVzIGFuZCBlZGdlcywgYXMgd2VsbCAKK2FzIHRoZSBkaXNlYXNlIG9yIGRpc2Vhc2UgeW91IGhhdmUgZGVmaW5lZC4gPC9wPgorPHRhYmxlIGJvcmRlcj0iMSIgY2VsbHNwYWNpbmc9IjEiIHdpZHRoPSIxMDAlIj4KKwk8dHI+CisJCTx0ZD4KKzxpbWcgYm9yZGVyPSIwIiBzcmM9ImltZy9ncmFwaDMuanBnIiB3aWR0aD0iODAwIiBoZWlnaHQ9IjYyMyI+PC90ZD4KKwk8L3RyPgorCTx0cj4KKwkJPHRkPjxiPkZpZ3VyZSAzOiBUaGUgRXhhbXBsZSBTY2VuYXJpbyBpcyByZWFkeSB0byBydW4uIFNlZSB0aGUgcHJvcGVyIAorCQloaWVyYXJjaGljYWwgc3RydWN0dXJlIG9mIHRoaXMgc2NlbmFyaW8gaW4gdGhlIFJlc291cmNlIFNldCB3aW5kb3cuPC9iPjwvdGQ+CisJPC90cj4KKzwvdGFibGU+Cis8cCBhbGlnbj0iY2VudGVyIj4mbmJzcDsmbmJzcDsKKzxiPkRlZmluaW5nIGEgTmV3IEdyYXBoIEVkZ2U8L2I+PC9wPgorPHAgYWxpZ249ImxlZnQiPkluIHRoZSBleGFtcGxlIGFib3ZlIHdlIGNvbXBvc2VkIGEgZ3JhcGggZnJvbSBleGlzdGluZyAKK2NvbXBvbmVudHMuIFN1cHBvc2UgeW91IHdhbnRlZCB0byBhZGQgYSBuZXcgcmVsYXRpb25zaGlwIGJldHdlZW4gdHdvIHBsYWNlcy4gCitUYWtlIGZvciBleGFtcGxlIHRoZSBTdGF0ZW4gSXNsYW5kIEZlcnJ5IGJldHdlZW4gU3RhdGVuIElzbGFuZCBhbmQgTWFuaGF0dGFuIAorSXNsYW5kIGluIE5ZLjwvcD4KKzxwIGFsaWduPSJsZWZ0Ij48aT50aGlzIG5lZWRzIHRvIGJlIHdyaXR0ZW4uPC9pPjwvcD4KKzwvYm9keT4KKzwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC90dXRvcmlhbHMvaW1nLy5jdnNpZ25vcmUgYi9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC90dXRvcmlhbHMvaW1nLy5jdnNpZ25vcmUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDg1ZThiYQotLS0gL2Rldi9udWxsCisrKyBiL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL3R1dG9yaWFscy9pbWcvLmN2c2lnbm9yZQpAQCAtMCwwICsxIEBACitUaHVtYnMuZGIKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL3R1dG9yaWFscy9pbWcvSW5mZWN0b3JEaWFsb2cuanBnIGIvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvdHV0b3JpYWxzL2ltZy9JbmZlY3RvckRpYWxvZy5qcGcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzkyNjA1OQotLS0gL2Rldi9udWxsCisrKyBiL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL3R1dG9yaWFscy9pbWcvSW5mZWN0b3JEaWFsb2cuanBnCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL3R1dG9yaWFscy9pbWcvSW5mZWN0b3JJY29uLmpwZyBiL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL3R1dG9yaWFscy9pbWcvSW5mZWN0b3JJY29uLmpwZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yOGQxNDI5Ci0tLSAvZGV2L251bGwKKysrIGIvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvdHV0b3JpYWxzL2ltZy9JbmZlY3Rvckljb24uanBnCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL3R1dG9yaWFscy9pbWcvTmV3TW9kZWwuanBnIGIvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvdHV0b3JpYWxzL2ltZy9OZXdNb2RlbC5qcGcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTBkZTZmZgotLS0gL2Rldi9udWxsCisrKyBiL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL3R1dG9yaWFscy9pbWcvTmV3TW9kZWwuanBnCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL3R1dG9yaWFscy9pbWcvTmV3UG9wdWxhdGlvbk1vZGVsLmpwZyBiL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL3R1dG9yaWFscy9pbWcvTmV3UG9wdWxhdGlvbk1vZGVsLmpwZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZWY3YjIwCi0tLSAvZGV2L251bGwKKysrIGIvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvdHV0b3JpYWxzL2ltZy9OZXdQb3B1bGF0aW9uTW9kZWwuanBnCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL3R1dG9yaWFscy9pbWcvZGlzZWFzZURpYWxvZy5qcGcgYi9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC90dXRvcmlhbHMvaW1nL2Rpc2Vhc2VEaWFsb2cuanBnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY4ZTgwNGQKLS0tIC9kZXYvbnVsbAorKysgYi9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC90dXRvcmlhbHMvaW1nL2Rpc2Vhc2VEaWFsb2cuanBnCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL3R1dG9yaWFscy9pbWcvZHJhZ2Rpc2Vhc2V0b21vZGVsLmpwZyBiL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL3R1dG9yaWFscy9pbWcvZHJhZ2Rpc2Vhc2V0b21vZGVsLmpwZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZDE0ZWJkCi0tLSAvZGV2L251bGwKKysrIGIvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvdHV0b3JpYWxzL2ltZy9kcmFnZGlzZWFzZXRvbW9kZWwuanBnCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL3R1dG9yaWFscy9pbWcvZXhwZXIxYS5qcGcgYi9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC90dXRvcmlhbHMvaW1nL2V4cGVyMWEuanBnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU3OTU3MjcKLS0tIC9kZXYvbnVsbAorKysgYi9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC90dXRvcmlhbHMvaW1nL2V4cGVyMWEuanBnCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL3R1dG9yaWFscy9pbWcvZXhwZXIxYi5qcGcgYi9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC90dXRvcmlhbHMvaW1nL2V4cGVyMWIuanBnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI1MmFjYzQKLS0tIC9kZXYvbnVsbAorKysgYi9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC90dXRvcmlhbHMvaW1nL2V4cGVyMWIuanBnCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL3R1dG9yaWFscy9pbWcvZXhwZXIyLmpwZyBiL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL3R1dG9yaWFscy9pbWcvZXhwZXIyLmpwZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNjIyZWRmCi0tLSAvZGV2L251bGwKKysrIGIvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvdHV0b3JpYWxzL2ltZy9leHBlcjIuanBnCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL3R1dG9yaWFscy9pbWcvZ3JhcGgxLmpwZyBiL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL3R1dG9yaWFscy9pbWcvZ3JhcGgxLmpwZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZDllMWI1Ci0tLSAvZGV2L251bGwKKysrIGIvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvdHV0b3JpYWxzL2ltZy9ncmFwaDEuanBnCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL3R1dG9yaWFscy9pbWcvZ3JhcGgyLmpwZyBiL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL3R1dG9yaWFscy9pbWcvZ3JhcGgyLmpwZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYzkxM2Q5Ci0tLSAvZGV2L251bGwKKysrIGIvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvdHV0b3JpYWxzL2ltZy9ncmFwaDIuanBnCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL3R1dG9yaWFscy9pbWcvZ3JhcGgzLmpwZyBiL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL3R1dG9yaWFscy9pbWcvZ3JhcGgzLmpwZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MmJiNWYxCi0tLSAvZGV2L251bGwKKysrIGIvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvdHV0b3JpYWxzL2ltZy9ncmFwaDMuanBnCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL3R1dG9yaWFscy9pbWcvaW1wb3J0c2NlbmFyaW8xYS5qcGcgYi9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC90dXRvcmlhbHMvaW1nL2ltcG9ydHNjZW5hcmlvMWEuanBnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZkOWQ0NGIKLS0tIC9kZXYvbnVsbAorKysgYi9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC90dXRvcmlhbHMvaW1nL2ltcG9ydHNjZW5hcmlvMWEuanBnCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL3R1dG9yaWFscy9pbWcvaW1wb3J0c2NlbmFyaW8xYi5qcGcgYi9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC90dXRvcmlhbHMvaW1nL2ltcG9ydHNjZW5hcmlvMWIuanBnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY2NWFmMWUKLS0tIC9kZXYvbnVsbAorKysgYi9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC90dXRvcmlhbHMvaW1nL2ltcG9ydHNjZW5hcmlvMWIuanBnCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL3R1dG9yaWFscy9pbWcvaW1wb3J0c2NlbmFyaW8xYy5qcGcgYi9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC90dXRvcmlhbHMvaW1nL2ltcG9ydHNjZW5hcmlvMWMuanBnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ1NjFiOWQKLS0tIC9kZXYvbnVsbAorKysgYi9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC90dXRvcmlhbHMvaW1nL2ltcG9ydHNjZW5hcmlvMWMuanBnCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL3R1dG9yaWFscy9pbWcvaW1wb3J0c2NlbmFyaW8yLmpwZyBiL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL3R1dG9yaWFscy9pbWcvaW1wb3J0c2NlbmFyaW8yLmpwZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40OTZhODExCi0tLSAvZGV2L251bGwKKysrIGIvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvdHV0b3JpYWxzL2ltZy9pbXBvcnRzY2VuYXJpbzIuanBnCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL3R1dG9yaWFscy9pbWcvbW9kZWxJY29uLmpwZyBiL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL3R1dG9yaWFscy9pbWcvbW9kZWxJY29uLmpwZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YWI2NTQ3Ci0tLSAvZGV2L251bGwKKysrIGIvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvdHV0b3JpYWxzL2ltZy9tb2RlbEljb24uanBnCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL3R1dG9yaWFscy9pbWcvbW9kZWxuZXN0aW5nLnBuZyBiL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL3R1dG9yaWFscy9pbWcvbW9kZWxuZXN0aW5nLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YjU2YmE4Ci0tLSAvZGV2L251bGwKKysrIGIvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvdHV0b3JpYWxzL2ltZy9tb2RlbG5lc3RpbmcucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL3R1dG9yaWFscy9pbWcvbmV3cHJvamVjdC5qcGcgYi9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC90dXRvcmlhbHMvaW1nL25ld3Byb2plY3QuanBnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ5OTg0MzYKLS0tIC9kZXYvbnVsbAorKysgYi9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC90dXRvcmlhbHMvaW1nL25ld3Byb2plY3QuanBnCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL3R1dG9yaWFscy9pbWcvbmV3cHJvamVjdEljb24uanBnIGIvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvdHV0b3JpYWxzL2ltZy9uZXdwcm9qZWN0SWNvbi5qcGcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGVkMDZlZgotLS0gL2Rldi9udWxsCisrKyBiL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL3R1dG9yaWFscy9pbWcvbmV3cHJvamVjdEljb24uanBnCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL3R1dG9yaWFscy9pbWcvcG9wdWxhdGlvbm1vZGVsLmdpZiBiL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL3R1dG9yaWFscy9pbWcvcG9wdWxhdGlvbm1vZGVsLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNDZmOTMyCi0tLSAvZGV2L251bGwKKysrIGIvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvdHV0b3JpYWxzL2ltZy9wb3B1bGF0aW9ubW9kZWwuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL3R1dG9yaWFscy9pbWcvcHJvamVjdERpYWxvZy5qcGcgYi9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC90dXRvcmlhbHMvaW1nL3Byb2plY3REaWFsb2cuanBnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQyZjY4MDEKLS0tIC9kZXYvbnVsbAorKysgYi9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC90dXRvcmlhbHMvaW1nL3Byb2plY3REaWFsb2cuanBnCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL3R1dG9yaWFscy9pbWcvcHJvcEVkaXRvci5qcGcgYi9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC90dXRvcmlhbHMvaW1nL3Byb3BFZGl0b3IuanBnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ4MGJkZTEKLS0tIC9kZXYvbnVsbAorKysgYi9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC90dXRvcmlhbHMvaW1nL3Byb3BFZGl0b3IuanBnCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL3R1dG9yaWFscy9pbWcvc2NlbmFyaW8uanBnIGIvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvdHV0b3JpYWxzL2ltZy9zY2VuYXJpby5qcGcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWY4M2I5NwotLS0gL2Rldi9udWxsCisrKyBiL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL3R1dG9yaWFscy9pbWcvc2NlbmFyaW8uanBnCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL3R1dG9yaWFscy9pbWcvc2VxdWVuY2VyMS5qcGcgYi9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC90dXRvcmlhbHMvaW1nL3NlcXVlbmNlcjEuanBnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgzMDFiZmYKLS0tIC9kZXYvbnVsbAorKysgYi9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC90dXRvcmlhbHMvaW1nL3NlcXVlbmNlcjEuanBnCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL3R1dG9yaWFscy9pbWcvc2VxdWVuY2VyMi5qcGcgYi9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC90dXRvcmlhbHMvaW1nL3NlcXVlbmNlcjIuanBnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU3NWFhMmYKLS0tIC9kZXYvbnVsbAorKysgYi9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC90dXRvcmlhbHMvaW1nL3NlcXVlbmNlcjIuanBnCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL3R1dG9yaWFscy9pbWcvc2VxdWVuY2VyMy5qcGcgYi9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC90dXRvcmlhbHMvaW1nL3NlcXVlbmNlcjMuanBnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUyMzMyNjIKLS0tIC9kZXYvbnVsbAorKysgYi9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC90dXRvcmlhbHMvaW1nL3NlcXVlbmNlcjMuanBnCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL3R1dG9yaWFscy9pbmZlY3RvcnR1dG9yaWFsLmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC90dXRvcmlhbHMvaW5mZWN0b3J0dXRvcmlhbC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE1MDBlNWIKLS0tIC9kZXYvbnVsbAorKysgYi9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC90dXRvcmlhbHMvaW5mZWN0b3J0dXRvcmlhbC5odG1sCkBAIC0wLDAgKzEsNzAgQEAKKzwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi9odG1sNC9sb29zZS5kdGQiPgorPGh0bWw+Cis8aGVhZD4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTEiPgorPHRpdGxlPkNyZWF0aW5nIGEgbmV3IEluZmVjdG9yIFR1dG9yaWFsPC90aXRsZT4KKzwvaGVhZD4KKzxib2R5PgorPGgxPkNyZWF0ZSBhIG5ldyBJbmZlY3RvcjwvaDE+CisKKworCismbmJzcDs8dGFibGUgYm9yZGVyPSIxIiBjZWxsc3BhY2luZz0iMSIgd2lkdGg9IjQ1JSI+CisJPHRyPgorCQk8dGQ+CisJCTxwIGFsaWduPSJjZW50ZXIiPgorCQk8aW1nIGJvcmRlcj0iMCIgc3JjPSJpbWcvSW5mZWN0b3JJY29uLmpwZyIgd2lkdGg9Ijg2IiBoZWlnaHQ9Ijk4Ij48L3RkPgorCTwvdHI+CisJPHRyPgorCQk8dGQ+CisJCTxwIGFsaWduPSJjZW50ZXIiPjxiPkZpZ3VyZSAxOiBUaGUgSW5mZWN0b3IgSWNvbiBsb29rcyBzaW1pbGFyIHRvIHRoZSAKKwkJTmV3IERpc2Vhc2UgSWNvbiBidXQgY29udGFpbnMgYSBjYXBpdGFsIGxldHRlciAnSScgaW4gdGhlIGxvd2VyIHJpZ2h0IAorCQloYW5kIGNvcm5lci48L2I+PC90ZD4KKwk8L3RyPgorPC90YWJsZT4KKzxwPkNsaWNrIG9uIHRoZSBuZXcgaW5mZWN0b3IgaWNvbiAoYmxhY2sgc3F1YXJlIHdpdGggdGhlIGhlYWx0aCBzeW1ib2wgYW5kIAordGhlIGxldHRlciBJKSA8L3A+Cis8b2w+CisJPGxpPk5hbWUgaXQgKGUuZy4sICZxdW90O0N1YmFJbmZlY3RvciZxdW90OyksIHVuZGVyIERpc2Vhc2VOYW1lOiAmcXVvdDtFeHBlcmltZW50YWxEaXNlYXNlJnF1b3Q7CisJPGJyPgorJm5ic3A7PC9saT4KKwk8bGk+VW5kZXIgY291bnRyeSBzZWxlY3QgdGhlIGxvY2F0aW9uIHlvdSB3YW50IHRvIGluZmVjdCAoZS5nLiwmbmJzcDsgQ3ViYSkuIAorCVlvdSBjYW4gaW5mZWN0IGF0IHRoZSBjb3VudHJ5IGxldmVsLCBzdGF0ZSBvciBwcm92aW5jZSBsZXZlbCBvciBldmVuIGF0IHRoZSAKKwljb3VudHkgbGV2ZWwgZGVwZW5kaW5nIG9uIHRoZSByZXNvbHV0aW9uIG9mIHRoZSBncmFwaCB5b3UgYXJlIHVzaW5nLiBJbiB0aGUgCisJY2FzZSBvZiBDdWJhLCBvbmx5IGNvdW50cnkgbGV2ZWwgaXMgc2VsZWN0ZWQgKHNlZSBGaWd1cmUgMi4pPGJyPgorJm5ic3A7PC9saT4KKwk8bGk+Q2xpY2sgb24gdGhlIFNjZW5hcmlvIHRvIG9wZW4gaXQgaW4gdGhlIFJlc291cmNlIHNldCA8YnI+CismbmJzcDs8L2xpPgorCTxsaT5kcmFnIHRoZSBDdWJhSW5mZWN0b3IgZnJvbSBEZWNvcmF0b3JzIGludG8gdGhlIDxiPlNjZW5hcmlvPC9iPiAob3BlbiBpdCB0byBzZWUgCitpdCkgPGJyPgorJm5ic3A7PC9saT4KKwk8bGk+SW4gdGhlIHJlc291cmNlIHNldCBjbGljayBvbiB0aGUgaW5mZWN0b3IgU0kgSW5mZWN0b3IgRXhwZXJpbWVudGFsRGlzZWFzZSB0byBlZGl0IAoraXQuIFlvdXIgZGlzZWFzZSBtb2RlbCBtYXkgYmUgU0ksIFNJUiwgU0lFUiwgZXRjIGJ1dCBpbiBhbGwgY2FzZXMgeW91IG9ubHkgbmVlZCAKK2FuIFNJIGluZmVjdG9yIChhcyB0aGlzIGJhc2UgY2xhc3Mgd2lsbCBhZGQgaW5mZWN0aW91cyBwZW9wbGUgdG8gc2VlZCBhbnkgbW9kZWwuPGJyPgorJm5ic3A7PC9saT4KKwk8bGk+Q2xpY2sgb24gUHJvcGVydGllcyB0byBvcGVuIHRoZSBQcm9wZXJ0aWVzIEVkaXRvciBhbmQgZG91YmxlIGNsaWNrIG9uIAorCXRoZSBJbmZlY3RvciBpbiB0aGUgUmVzb3VyY2UgU2V0IHVuZGVyIHlvdXIgc2NlbmFyaW8uIFRoaXMgd2lsbCBvcGVuIGFuIAorCWVkaXRvciB3aGVyZSB5b3UgY2FuIGNvbmZpcm0gdGhlIGxvY2F0aW9uIHRvIGJlIGluZmVjdGVkIGFuZCB0aGUgbnVtYmVyIG9mIAorCWluZmVjdGlvdXMgcGVvcGxlIHRvIHN0YXJ0IHdpdGguPGJyPgorJm5ic3A7PC9saT4KKwk8bGk+QWRkIGFkZGl0aW9uYWwgaW5mZWN0b3JzIGZvciBvdGhlciBsb2NhdGlvbnMgYXMgZGVzaXJlZCBmb2xsb3dpbmcgdGhlIAorCXByb2NlZHVyZSBhYm92ZS48YnI+CismbmJzcDs8L2xpPgorPC9vbD4KKworPHRhYmxlIGJvcmRlcj0iMSIgY2VsbHNwYWNpbmc9IjEiIHdpZHRoPSI3MCUiPgorCTx0cj4KKwkJPHRkPgorCQk8aW1nIGJvcmRlcj0iMCIgc3JjPSJpbWcvSW5mZWN0b3JEaWFsb2cuanBnIiB3aWR0aD0iNTI1IiBoZWlnaHQ9IjY2OSI+PC90ZD4KKwk8L3RyPgorCTx0cj4KKwkJPHRkPkZpZ3VyZSAyOiBDcmVhdGluZyBhbiBJbmZlY3RvciBmb3IgQ3ViYS4gSGVyZSB3ZSBhcmUgc2VsZWN0aW5nIGEgCisJCWNvdW50cnkgbGV2ZWwgbm9kZS4gTm90ZSB0aGUgbG9jYXRpb24gSUQgKENVQikuPC90ZD4KKwk8L3RyPgorPC90YWJsZT4KKzxwPjxpPnNhdmUgeW91ciB3b3JrIGF0IHRoaXMgcG9pbnQgYnkgaGl0dGluZyAmbHQ7Y3RybCZndDtTPC9pPiA8L3A+Cis8cD4KKzxwPgorJm5ic3A7Jm5ic3A7Cis8L2JvZHk+Cis8L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvdHV0b3JpYWxzL21vZGVsbmVzdGluZy5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvdHV0b3JpYWxzL21vZGVsbmVzdGluZy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVjNDU5MGMKLS0tIC9kZXYvbnVsbAorKysgYi9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC90dXRvcmlhbHMvbW9kZWxuZXN0aW5nLmh0bWwKQEAgLTAsMCArMSwzMCBAQAorPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL2h0bWw0L2xvb3NlLmR0ZCI+Cis8aHRtbD4KKzxoZWFkPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9SVNPLTg4NTktMSI+Cis8dGl0bGU+TmVzdGluZyBtb2RlbHM8L3RpdGxlPgorPC9oZWFkPgorPGJvZHk+Cis8aDE+Q29udHJvbGxpbmcgc2NlbmFyaW8gaW5pdGlhbGl6YXRpb24gYnkgbmVzdGluZyBtb2RlbHM8L2gxPgorPHA+QXQgdGhlIGJlZ2lubmluZyBvZiBhIHNpbXVsYXRpb24sIFNURU0gYWxsb3dzIGRlY29yYXRvcnMgc3VjaCBhcyBwb3B1bGF0aW9uIG1vZGVscywgcG9wdWxhdGlvbiBpbml0aWFsaXplcnMKK2FuZCBkaXNlYXNlIG1vZGVscyB0byBpbml0aWFsaXplIHRoZW1zZWx2ZXMuIEZvciBpbnN0YW5jZSwgd2hlbiBhIGRpc2Vhc2UgbW9kZWwgaXMgaW5pdGlhbGl6ZWQsIGl0IGNyZWF0ZXMgdGhlIAorZGlzZWFzZSBtb2RlbCBsYWJlbHMgbmVjZXNzYXJ5IHRvIHRyYWNrIHRoZSBzdGF0ZSBvZiB0aGUgZGlzZXNlIGluIGEgcG9wdWxhdGlvbi4gQSBkaXNlYXNlIG1vZGVsIGRlcGVuZHMKK29uIHRoZSBwb3B1bGF0aW9uIG1vZGVsIGxhYmVscyBjcmVhdGVkIGJ5IGEgcG9wdWxhdGlvbiBtb2RlbCB0byBiZSBhYmxlIHRvIGNyZWF0ZSB0aGUgZGlzZWFzZSBtb2RlbCBsYWJlbHMuIEZ1cnRoZXJtb3JlLCAKK2EgcG9wdWxhdGlvbiBtb2RlbCBkZXBlbmRzIG9uIHRoZSBleGlzdGFuY2Ugb2Ygc3RhdGljIHBvcHVsYXRpb24gbGFiZWxzLCBjcmVhdGVkIGVpdGhlciBieSBhIHBvcHVsYXRpb24gaW5pdGlhbGl6ZXJzIAorb3IgYnkgZHJhZ2dpbmcgcG9wdWxhdGlvbiBkYXRhIGludG8geW91ciBtb2RlbCBmcm9tIHRoZSBTVEVNIGxpYnJhcnkuCis8L3A+Cis8cD4KK0NvbnNlcXVlbnRseSwgdGhlIG9yZGVyIG9mIGluaXRpYWxpemF0aW9uIGJlY29tZXMgaW1wb3J0YW50LCBhbmQgdGhlIG9yZGVyIGlzIGNvbnRyb2xsZWQgYnkKK25lc3RpbmcgbW9kZWxzIGluc2lkZSBtb2RlbHMuIERlY29yYXRvcnMgdGhhdCBhcmUgZGVlcGVyIGluIHRoZSBtb2RlbCB0cmVlIGFyZSBpbml0aWFsaXplZCBiZWZvcmUgZGVjb3JhdG9ycyBoaWdoZXIgdXAKK2luIHRoZSB0cmVlLiBTZWUgdGhlIGZpZ3VyZSBiZWxvdyBmb3IgYW4gZXhhbXBsZS4gRGVlcGVzdCBpbiB0aGUgdHJlZSBpcyBhIHBvcHVsYXRpb24gaW5pdGlhbGl6ZXIgdGhhdCBjcmVhdGVzIHRoZQorc3RhdGljIHBvcHVsYXRpb24gbGFiZWxzIG5lZWRlZCBieSB0aGUgZGVtb2dyYXBoaWMgcG9wdWxhdGlvbiBtb2RlbCBvbmUgbGV2ZWwgdXAuIFRoZSBkZW1vZ3JhcGhpYyBwb3B1bGF0aW9uIG1vZGVsCitzdWJkaXZpZGVzIHRoZSBwb3B1bGF0aW9uIGludG8gc3ViZ3JvdXBzIG5lZWRlZCBieSB0aGUgZGlzZWFzZSBtb2RlbCBpbiB0aGUgbGV2ZWwgYWJvdmUuIAorPC9wPgorPHA+CitJbiBzdW1tYXJ5LCB0aGUgb3JkZXIgaXMgcG9wdWxhdGlvbiBpbml0aWFsaXplcnMgYmVmb3JlIHBvcHVsYXRpb24gbW9kZWxzLCBwb3B1bGF0aW9uIG1vZGVscyBiZWZvcmUgZGlzZWFzZSBtb2RlbHMsCithbmQgZGlzZWFzZSBtb2RlbHMgYmVmb3JlIGluZmVjdG9ycy9pbm9jdWxhdG9ycy4KKzwvcD4KKzxici8+Cis8aW1nIGJvcmRlcj0iMCIgc3JjPSJpbWcvbW9kZWxuZXN0aW5nLnBuZyIiPgorPC9ib2R5PgorPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL3R1dG9yaWFscy9tb2RlbHR1dG9yaWFsLmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC90dXRvcmlhbHMvbW9kZWx0dXRvcmlhbC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlhM2Q0NzQKLS0tIC9kZXYvbnVsbAorKysgYi9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC90dXRvcmlhbHMvbW9kZWx0dXRvcmlhbC5odG1sCkBAIC0wLDAgKzEsNTcgQEAKKzwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi9odG1sNC9sb29zZS5kdGQiPgorPGh0bWw+Cis8aGVhZD4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTEiPgorPHRpdGxlPkNyZWF0aW5nIGEgbmV3IE1vZGVsIFR1dG9yaWFsPC90aXRsZT4KKzwvaGVhZD4KKzxib2R5PgorPGgxPkNyZWF0ZSBhIG5ldyBNb2RlbDwvaDE+CisKKzxicj4KK0EgbW9kZWwgd2lsbCBjb250YWluIHNldmVyYWwgdGhpbmdzIGluY2x1ZGluZyBhIGRpc2Vhc2UsIGEgbG9jYXRpb25zIG9yIGdyYXBocyAKK29mIGxvY2F0aW9ucywgcG9wdWxhdGlvbnMsIGV0Yy48YnI+CismbmJzcDs8dGFibGUgYm9yZGVyPSIxIiBjZWxsc3BhY2luZz0iMSIgd2lkdGg9IjIyJSI+CisJPHRyPgorCQk8dGQ+CisJCTxwIGFsaWduPSJjZW50ZXIiPgorCQk8aW1nIGJvcmRlcj0iMCIgc3JjPSJpbWcvbW9kZWxJY29uLmpwZyIgd2lkdGg9IjEwOCIgaGVpZ2h0PSIxMDgiPjwvdGQ+CisJPC90cj4KKwk8dHI+CisJCTx0ZD4KKwkJPHAgYWxpZ249ImNlbnRlciI+PGI+RmlnLiAxOiBUaGUgbmV3IG1vZGVsIEljb248L2I+PC90ZD4KKwk8L3RyPgorPC90YWJsZT4KKzxwPgorVG8gY3JlYXRlIGEgbmV3IG1vZGVsLCBnbyB0byB0aGUgU1RFTSBEZXNpZ25lciBQZXJzcGVjdGl2ZS4gCis8dWw+CisJPGxpPkNsaWNrIG9uIGJsdWUgdHJpYW5nbGUgdG8gY3JlYXRlIG5ldyBtb2RlbCAoZm9yIGV4YW1wbGUsIGNvbmNhdGVuYXRlOiAKKwlDdWJhRXhwZXJpbWVudGFsRGlzZWFzZSkgPC9saT4KKwk8bGk+VGhpcyB3aWxsIGxhdW5jaCBhIGRpYWxvZyB3aGVyZSB5b3UgY2FuIGdpdmUgeW91ciBtb2RlbCBhIG5hbWUuPC9saT4KKwk8bGk+Q2xpY2sgTmV4dDwvbGk+CisJPGxpPkZpbGwgaW4gYW55IER1YmxpbiBjb3JlIGRhdGEgeW91IHdhbnQgdG8gYWRkPC9saT4KKwk8bGk+Q2xpY2sgRmluaXNoZWQ8L2xpPgorPC91bD4KKzxwPkluIHRoZSBTVEVNIEV4cGxvcmVyIHVuZGVyIHlvdXIgbmV3IFByb2plY3QgeW91IHNob3VsZCBzZWUgYSBtb2RlbHMgZm9sZGVyIAorY29udGFpbmluZyB5b3VyIG1vZGVsLiBEb3VibGU8YnI+CitjbGljayBvbiB5b3VyIG1vZGVsIGFuZCB5b3Ugc2hvdWxkIHNlZSBhbHNvIHNlZSBpdCBpbiB0aGUgUmVzb3VyY2UgU2V0IFdpbmRvdy48L3A+Cis8dGFibGUgYm9yZGVyPSIxIiBjZWxsc3BhY2luZz0iMSIgd2lkdGg9IjU2JSI+CisJPHRyPgorCQk8dGQ+CisJCTxwIGFsaWduPSJjZW50ZXIiPgorCQk8aW1nIGJvcmRlcj0iMCIgc3JjPSJpbWcvTmV3TW9kZWwuanBnIiB3aWR0aD0iNjI3IiBoZWlnaHQ9IjQ2MiI+PC90ZD4KKwk8L3RyPgorCTx0cj4KKwkJPHRkPgorCQk8cCBhbGlnbj0iY2VudGVyIj48Yj5GaWd1cmUgMjogVGhlIGRlc2lnbmVyIHBlcnNwZWN0aXZlIHNob3dpbmcgdGhlIG5ldyAKKwkJbW9kZWwgbmFtZXMgJnF1b3Q7Q3ViYUV4cGVyaW1lbnRhbERpc2Vhc2UmcXVvdDsgaW4gYm90aCB0aGUgU1RFTSBwcm9qZWN0IEV4cGxvcmVyCisJCTxicj4KKwkJdW5kZXIgYSBwcm9qZWN0IGVudGl0bGVkICZxdW90O0V4cGVyaW1lbnRhbCBEaXNlYXNlJnF1b3Q7IGFuZCBhbHNvIGluPGJyPgorCQl0aGUgJnF1b3Q7UmVzb3VyY2UgU2V0JnF1b3Q7IFdpbmRvdy4gPC9iPjwvdGQ+CisJPC90cj4KKzwvdGFibGU+Cis8cCBhbGlnbj0iY2VudGVyIj4mbmJzcDs8L3A+CisKKzxoMz48c3BhbiBzdHlsZT0iZm9udC13ZWlnaHQ6IDQwMCI+PGk+U2F2ZSB5b3VyIHdvcmsgYXQgdGhpcyBwb2ludCBieSBoaXR0aW5nIDxiPmN0cmwtczwvYj48L2k+PC9zcGFuPjwvaDM+CisKKzwvYm9keT4KKzwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC90dXRvcmlhbHMvcG9wdWxhdGlvbm1vZGVsdHV0b3JpYWwuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL3R1dG9yaWFscy9wb3B1bGF0aW9ubW9kZWx0dXRvcmlhbC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBhNDY4YmEKLS0tIC9kZXYvbnVsbAorKysgYi9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC90dXRvcmlhbHMvcG9wdWxhdGlvbm1vZGVsdHV0b3JpYWwuaHRtbApAQCAtMCwwICsxLDQ0IEBACis8IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIvaHRtbDQvbG9vc2UuZHRkIj4KKzxodG1sPgorPGhlYWQ+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0xIj4KKzx0aXRsZT5DcmVhdGluZyBhIG5ldyBEaXNlYXNlIFR1dG9yaWFsPC90aXRsZT4KKzwvaGVhZD4KKzxib2R5PgorPGgxPkNyZWF0aW5nIGEgbmV3IFBvcHVsYXRpb24gTW9kZWw8L2gxPgorCis8cD4xKSBPbiB0aGUgbWVudSBiYXIgY2xpY2sgLSZndDtuZXctJmd0O1BvcHVsYXRpb24gTW9kZWwgb3IgYWx0ZXJuYXRpdmVseSBzZWxlY3QgdGhlIAorTmV3IFBvcHVsYXRpb24gSWNvbiA8aW1nIHNyYz0iaW1nL3BvcHVsYXRpb25tb2RlbC5naWYiLz4gZnJvbSB0aGUgdG9vbGJhciA8L3A+CisKKzxwPjIpIFRoaXMgd2lsbCBsYXVuY2ggdGhlIERpYWxvZyBzaG93biBpbiBGaWd1cmUgMS4gRmlsbCBpbiB0aGUgTmFtZTogKGUuZy4gRXhwZXJpbWVudGFsUG9wdWxhdGlvbk1vZGVsKQorPC9wPgorPHA+MykgU2VsZWN0IHRoZSBQb3B1bGF0aW9uIE1vZGVsIGluIHRoZSBDb21ib0JveDogZS5nLiwgc2VsZWN0ICZxdW90O1N0YW5kYXJkUG9wdWxhdGlvbk1vZGVsSW1wbCZxdW90OworPC9wPgorPHA+U2V0IHRoZSBwYXJhbWV0ZXJzIG9mIHRoZSBwb3B1bGF0aW9uIG1vZGVsLCBzdWNoIGFzIGJhY2tncm91bmQgYmlydGggcmF0ZSwgYmFja2dyb3VuZCBtb3J0YWxpdHkgcmF0ZSBhbmQKK3RpbWUgcGVyaW9kIDwvcD4KKzx0YWJsZSBib3JkZXI9IjEiIGNlbGxzcGFjaW5nPSIxIiB3aWR0aD0iNDklIj4KKwk8dHI+CisJCTx0ZD4KKwkJPHAgYWxpZ249ImNlbnRlciI+CisJCTxpbWcgYm9yZGVyPSIwIiBzcmM9ImltZy9OZXdQb3B1bGF0aW9uTW9kZWwuanBnIj48L3RkPgorCTwvdHI+CisJPHRyPgorCQk8dGQ+CisJCTxwIGFsaWduPSJjZW50ZXIiPjxiPkZpZ3VyZSAxOiBUaGUgbmV3IFBvcHVsYXRpb24gTW9kZWwuPC9iPjwvdGQ+CisJPC90cj4KKzwvdGFibGU+Cis8cD4mbmJzcDs8L3A+Cis8cD41KSBGaWxsIGluIGFueSBEdWJsaW4gY29yZSBkYXRhIHlvdSB3YW50IHRvIGFkZCA8L3A+Cis8cD42KSBDbGljayBmaW5pc2ggPC9wPgorPHA+NykgVW5kZXIgZGVjb3JhdG9ycyB5b3Ugc2hvdWxkIHNlZSBFeHBlcmltZW50YWxQb3B1bGF0aW9uTW9kZWwuc3RhbmRhcmQgPC9wPgorPHA+OCkgRG91YmxlIGNsaWNrIG9uIE1PREVMUyBpbiB0aGUgcHJvamVjdCBleHBsb3Jlci4gWW91IHNob3VsZCBzZWUgJnF1b3Q7Q3ViYUV4cGVyaW1lbnRhbERpc2Vhc2UmcXVvdDsgCitpbiB0aGUgUmVzb3VyY2UgU2V0LiA8L3A+Cis8cD45KSBEUkFHIHlvdXIgbmV3IHBvcHVsYXRpb24gbW9kZWwgKGUuZy4sIEV4cGVyaW1lbnRhbFBvcHVsYXRpb25Nb2RlbC5zdGFuZGFyZCkgZnJvbSAKK2RlY29yYXRvcnMgKGluIHRoZSBwcm9qZWN0IGV4cGxvcmVyIHdpbmRvdykgaW50byB0aGUgbW9kZWwgJnF1b3Q7Q3ViYUV4cGVyaW1lbnRhbERpc2Vhc2UmcXVvdDsgCitpbiB0aGUgUmVzb3VyY2UgU2V0IHdpbmRvdy4gRXhwYW5kIHRoZSAmcXVvdDtDdWJhRXhwZXJpbWVudGFsRGlzZWFzZSZxdW90OyBpbiB0aGUgCitSZXNvdXJjZSBTZXQgd2luZG93IHRvIHNlZSB0aGF0IGl0IHdvcmtlZC4KKworPGgzPjxzcGFuIHN0eWxlPSJmb250LXdlaWdodDogNDAwIj48aT5TYXZlIHlvdXIgd29yayBhdCB0aGlzIHBvaW50IGJ5IGhpdHRpbmcgPGI+Y3RybC1zPC9iPjwvaT48L3NwYW4+PC9oMz4KKworPC9ib2R5PgorPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL3R1dG9yaWFscy9wcm9qZWN0dHV0b3JpYWwuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL3R1dG9yaWFscy9wcm9qZWN0dHV0b3JpYWwuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YjZhNWIyCi0tLSAvZGV2L251bGwKKysrIGIvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvdHV0b3JpYWxzL3Byb2plY3R0dXRvcmlhbC5odG1sCkBAIC0wLDAgKzEsNzEgQEAKKzwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi9odG1sNC9sb29zZS5kdGQiPgorPGh0bWw+Cis8aGVhZD4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTEiPgorPHRpdGxlPkNyZWF0aW5nIGEgbmV3IFByb2plY3QgVHV0b3JpYWw8L3RpdGxlPgorPC9oZWFkPgorPGJvZHk+Cis8aDE+Q3JlYXRlIGEgbmV3IFByb2plY3Q8L2gxPgorCis8cD4KKworPGI+U3RlcCAxOiBDcmVhdGlvbiBvZiBhIG5ldyBQcm9qZWN0LjwvYj48YnI+CitUaGlzIHR1dG9yaWFsIHRlbGxzIHlvdSBob3cgdG8gY3JlYXRlIGEgcHJvamVjdCBpbiB0aGUgU1RFTSBEZXNpZ25lciAKK3BlcnNwZWN0aXZlLiBBIHByb2plY3QgaXMgcmVhbGx5IGEgbmV3IEZvbGRlciBpbiB5b3U8YnI+Cit5b3VyIFNURU0gd29ya3NwYWNlLiBZb3UgbmV2ZXIgbmVlZCB0byBhY2Nlc3MgdGhlc2UgZm9sZGVycyBvciBTVEVNIGRlc2lnbiBmaWxlcyAKK291dHNpZGUgb2YgdGhlIFNURU0gZW52aXJvbm1lbnQgYnV0IHRoZXkKK2FyZSBhbGwgc3RvcmVkIGluIHRoZSBmb2xkZXIgPGJyPgorLi4uXHJ1bnRpbWUtc3RlbS5wcm9kdWN0IDxicj4KK3doaWNoIGlzIGxvY2F0ZWQgaW4gdGhlIAorc2FtZSBmb2xkZXIgYXMgeW91ciBTVEVNIHdvcmtzcGFjZSAoZS5nLiBjOlxydW50aW1lLXN0ZW0ucHJvZHVjdCkuPHA+CitUaGUgbmFtZXMgdXNlZCB0byBjcmVhdGUgYSBUZXN0IHByb2plY3QgaW4gdGhpcyBleGFtcGxlIGFyZSBpbiBwYXJlbnRoZXNlcy4gCis8YnI+CitTdWJzdGl0dXRlIHlvdXIgbmFtZXMgYXMgYXBwcm9wcmlhdGUuIAorSW4gdGhpcyBleGFtcGxlLCB0aGUgc2NlbmFyaW8gd2lsbCBiZSBmb3IgSmFwYW4uCis8cD4KKzxiPk5vdGU6PC9iPiBUaGVyZSBhcmUgaWNvbnMgZm9yIG1hbnkgb2YgdGhlIGFjdGlvbnMgYnV0IGZvciBjbGFyaXR5IGhlcmUgCit0aGUgbWVudWJhciBpdGVtcyBhcmUgdXNlZC48YnI+CitUaGUgbmV3IHByb2plY3QgSWNvbiBpcyBzaG93biBpbiBGaWd1cmUgMS48YnI+CismbmJzcDs8dGFibGUgYm9yZGVyPSIxIiBjZWxsc3BhY2luZz0iMSIgd2lkdGg9IjE5JSI+CisJPHRyPgorCQk8dGQ+CisJCTxwIGFsaWduPSJjZW50ZXIiPgorCQk8aW1nIGJvcmRlcj0iMCIgc3JjPSJpbWcvbmV3cHJvamVjdC5qcGciIHdpZHRoPSI2NTEiIGhlaWdodD0iNjI2Ij48L3RkPgorCTwvdHI+CisJPHRyPgorCQk8dGQ+PGI+RmlndXJlIDE6IHRoZSBuZXcgcHJvamVjdCBJY29uPC9iPjwvdGQ+CisJPC90cj4KKzwvdGFibGU+CisKKzxoMz5DcmVhdGluZyB0aGUgUHJvamVjdDwvaDM+Cis8dWw+Cis8bGk+UnVuIFNURU0uIFlvdSBzaG91bGQgc2VlIGEgVEFCIHdpdGggdGhlIGxhYmVsICZxdW90O0Rlc2lnbmVyJnF1b3Q7IG9uIGl0LiBUaGlzIGlzIHRoZSAKK0Rlc2lnbmVyIFBlcnNwZWN0aXZlIHVzZWQgdG8gZGVzaWduIHByb2plY3RzLCBTY2VuYXJpb3MsIGV0Yy4gQW5vdGhlciAKK3BlcnNwZWN0aXZlIGlzIHRoZSBTVEVNIFBlcnNwZWN0aXZlIHVzZWQgd2hlbiB5b3UgYWN0dWFsbHkgcnVuIGEgbW9kZS4gSWYgZm9yIAorc29tZSByZWFzb24gdGhlIERlc2lnbmVyIFBlcnNwZWN0aXZlIGhhcyBiZWVuIGNsb3NlZCBvciBpcyBub3QgdmlzaWJsZS4gR28gdG8gCit0aGUgbWVudSBiYXIgYW5kIGNsaWNrOjxicj4KKyZndDt3aW5kb3cmZ3Q7b3BlbiBwZXJzcGVjdGl2ZS4uLiZndDtEZXNpZ25lcjxicj4KK3RvIG9wZW4gaXQuIEdvIHRvIHRoZSBTVEVNIERlc2lnbmVyIFBlcnNwZWN0aXZlLiA8YnI+CismbmJzcDs8bGk+Q2xpY2sgb24gTmV3LT5TVEVNIHByb2plY3QgYW5kIGNyZWF0ZSBuZXcgU1RFTSBwcm9qZWN0IChUZXN0KQorPGxpPkNsaWNrICJOZXh0IiBpZiB5b3Ugd2FudCB0byB1cGRhdGUgdGhlIER1YmxpbkNvcmUgZGF0YS4KKzxsaT5DbGljayAiRmluaXNoIgorPGxpPiBPcGVuIHRoZSBuZXcgcHJvamVjdC4gWW91IHNob3VsZCBzZWUgc2V2ZXJhbCBmb2xkZXJzIGluY2x1ZGluZzogZGVjb3JhdG9ycywgZ3JhcGhzLCBldGMuCis8L3VsPgorCis8dGFibGUgYm9yZGVyPSIxIiBjZWxsc3BhY2luZz0iMSIgd2lkdGg9IjU5JSI+CisJPHRyPgorCQk8dGQ+CisJCTxwIGFsaWduPSJjZW50ZXIiPjxiPgorCQk8aW1nIGJvcmRlcj0iMCIgc3JjPSJpbWcvcHJvamVjdERpYWxvZy5qcGciIHdpZHRoPSI1MjUiIGhlaWdodD0iNDM0Ij48L2I+PC90ZD4KKwk8L3RyPgorCTx0cj4KKwkJPHRkPgorCQk8cCBhbGlnbj0iY2VudGVyIj48Yj5GaWd1cmUgMjogVGhlIG5ldyBwcm9qZWN0IGRpYWxvZzwvYj48L3RkPgorCTwvdHI+Cis8L3RhYmxlPgorCis8aDM+PHNwYW4gc3R5bGU9ImZvbnQtd2VpZ2h0OiA0MDAiPjxpPlNhdmUgeW91ciB3b3JrIGF0IHRoaXMgcG9pbnQgYnkgaGl0dGluZyA8Yj5jdHJsLXM8L2I+PC9pPjwvc3Bhbj48L2gzPgorCisKKzwvYm9keT4KKzwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC90dXRvcmlhbHMvc2NlbmFyaW90dXRvcmlhbC5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvdHV0b3JpYWxzL3NjZW5hcmlvdHV0b3JpYWwuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MDJmMjQ3Ci0tLSAvZGV2L251bGwKKysrIGIvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvdHV0b3JpYWxzL3NjZW5hcmlvdHV0b3JpYWwuaHRtbApAQCAtMCwwICsxLDk5IEBACis8IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIvaHRtbDQvbG9vc2UuZHRkIj4KKzxodG1sPgorPGhlYWQ+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0xIj4KKzx0aXRsZT5DcmVhdGluZyBhIG5ldyBTY2VuYXJpbyBUdXRvcmlhbDwvdGl0bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxoMT5DcmVhdGUgYSBuZXcgU2NlbmFyaW88L2gxPgorPGZvbnQgc2l6ZT0iNCI+Cis8L2ZvbnQ+IAorPHA+Y2xpY2sgb24gdGhlIHB1cnBsZSBkaWFtb25kIGljb24gdG8gY3JlYXRlIG5ldyBzY2VuYXJpbyA8L3A+Cis8cD5naXZlIGl0IGEgbmFtZSAoeW91IG1pZ2h0IHdhbnQgbW9yZSB0aGFuIG9uZSBzbyBpbmRleCBpdCwgZm9yIGV4YW1wbGUsIGFzIAorJnF1b3Q7RXhwZXJpbWVudGFsRGlzZWFzZTEmcXVvdDspIDwvcD4KKzxwPkZpbGwgaW4gYW55IER1YmxpbiBjb3JlIGRhdGEgeW91IHdhbnQgdG8gYWRkIDwvcD4KKzxwPmNsaWNrIGZpbmlzaCA8L3A+Cis8cD5Gcm9tIHRoZSBQcm9qZWN0IEV4cGxvcmVyIHdpbmRvdywgdW5kZXIgTW9kZWxzLCBEcmFnIHRoZSBuZXcgbW9kZWwgCisoJnF1b3Q7Y3ViYS5tb2RlbCZxdW90OykgaW50byB0aGUgbmV3IFNjZW5hcmlvIGluIHRoZSBSZXNvdXJjZSBTZXQuIEV4cGFuZCB0aGUgc2NlbmFyaW8gc28gCit5b3UgY2FuIHNlZSB0aGF0IGl0IHdvcmtlZC4gPC9wPgorPHRhYmxlIGJvcmRlcj0iMSIgY2VsbHNwYWNpbmc9IjEiIHdpZHRoPSI1NiUiPgorCTx0cj4KKwkJPHRkPgorCQk8cCBhbGlnbj0iY2VudGVyIj4KKwkJPGltZyBib3JkZXI9IjAiIHNyYz0iaW1nL3NjZW5hcmlvLmpwZyIgd2lkdGg9Ijg1MiIgaGVpZ2h0PSI0OTgiPjwvdGQ+CisJPC90cj4KKwk8dHI+CisJCTx0ZD4KKwkJPHAgYWxpZ249ImNlbnRlciI+PGI+RmlndXJlIDE6IEEgbmV3IFNjZW5hcmlvIGluIHRoZSBSZXNvdXJjZSBTZXQuIFRoZSAKKwkJbW9kZWwgaGFzIGFscmVhZHkgYmVlbiBkcmFnZ2VkIGludG8gaXQuPC9iPjwvdGQ+CisJPC90cj4KKzwvdGFibGU+CisKKzxwIGFsaWduPSJsZWZ0Ij4mbmJzcDs8L3A+Cis8cCBhbGlnbj0ibGVmdCI+WW91ciBtb2RlbCBpcyBub3cgcGFydCBvZiB5b3VyIHNjZW5hcmlvIGJ1dCB5b3UgYXJlIG5vdCBmaW5pc2hlZCAKK3lldC4gRXZlcnkgc2NlbmFyaW8gbXVzdCBhbHNvIGluY2x1ZGUgYSAmcXVvdDtzZXF1ZW5jZXImcXVvdDsgd2hpY2ggYmFzaWNhbGx5IGlzIGEgY2xvY2sgCit0aGF0PGJyPgorcmVndWxhdGVzIHRpbWUsIGFuZCBhbiAmcXVvdDtpbmZlY3RvciZxdW90OyB3aGljaCBzZXRzIHRoZSBpbml0aWFsIGluZmVjdGlvdXMgcG9wdWxhdGlvbi4gCitJZiB5b3UgcmFuIGEgbW9kZWwgZm9yIGFuIGluZmVjdGlvdXMgZGlzZWFzZSB3aGVyZSBub2JvZHkgd2FzIGluZmVjdGVkIGFueXdoZXJlIAordGhlbjxicj4KK25vdGhpbmcgd291bGQgaGFwcGVuLiBQbGVhc2UgZm9sbG93IHRoZSBzZXBhcmF0ZSB0dXRvcmlhbHMgb24gJnF1b3Q7PGEgaHJlZj0ic2VxdWVuY2VydHV0b3JpYWwuaHRtbCI+Y3JlYXRpbmcgCithIHNlcXVlbmNlcjwvYT4mcXVvdDsgYW5kICZxdW90OzxhIGhyZWY9ImluZmVjdG9ydHV0b3JpYWwuaHRtbCI+Y3JlYXRpbmcgYW5kIGluZmVjdG9yPC9hPiZxdW90OyAKK3RvIGxlYXJuIG1vcmUgYWJvdXQgaG93IHRvIGNyZWF0ZSBhbmQgY3VzdG9taXplPGJyPgorZWFjaCBvZiB0aGVtLiBJbiB0aGUgZXhhbXBsZSBiZWxvdyB3ZSB3aWxsIGRlc2NyaWJlIGNyZWF0aW9uIG9mIGEgc2NlbmFyaW8gdXNpbmcgCithIGRlZmF1bHQgc2VxdWVuY2VyIGJ1dCB5b3UgY2FuIGVhc2lseSB1c2UgeW91ciBvd24gY3VzdG9tIHNlcXVlbmNlIHNpbXBseTxicj4KK2J5IGRyYWdnaW5nIHRoYXQgZnJvbSZuYnNwOyB5b3VyIHByb2plY3RzICZxdW90O3NlcXVlbmNlcnMmcXVvdDsgZm9sZGVyLjwvcD4KKzxwIGFsaWduPSJsZWZ0Ij48YnI+Cis8Yj5BZGQgYSBzZXF1ZW5jZXIgdG8gdGhlIFNjZW5hcmlvPC9iPjxicj4KKzxicj4KK1RvIGFkZCB0aGUgc3lzdGVtIGRlZmF1bHQgc2VxdWVuY2VyIHRvIHlvdXIgbW9kZWwsIGdvIHRvIFNlcXVlbmNlcnMgb24gdGhlIAorYm90dG9tIHdpbmRvdyAtIGV4cGFuZCBmdWxseTxicj4KKzxicj4KK2RyYWcgJnF1b3Q7U2VxdWVudGlhbCBTZXF1ZW5jZXIgMjAwNiZxdW90OyBpbnRvIHRoZSBTY2VuYXJpbyBpbiB0aGUgUmVzb3VyY2UgU2V0LiBNYWtlIAorc3VyZSB5b3UgaGF2ZSBhIHByb3BlcnRpZXMgRWRpdG9yIFdpbmRvdyBvcGVuPGJyPgorPGJyPgorY2xpY2sgb24gJmd0O1dpbmRvdyZndDtvdGhlciZndDtHZW5lcmFsJmd0O1Byb3BlcnRpZXMgdG8gb3BlbiB0aGUgcHJvcGVydGllcyB2aWV3LiBPcGVuIHRoZSAKK0Rpc2Vhc2UgaW4gdGhlIFByb3BlcnRpZXMgRWRpdG9yICYjODIxMTsgZ2V0IHJlYWR5IHRvIENyZWF0ZSBhbiBJbmZlY3Rvcjxicj4KKyZuYnNwOzwvcD4KKzxwIGFsaWduPSJsZWZ0Ij48Yj5BZGRpbmcgYW4gSW5mZWN0b3I8YnI+Cis8L2I+PGk+U2VlIGFsc28gdGhlIGluc3RydWN0aW9ucyBmb3IgPGEgaHJlZj0iaW5mZWN0b3J0dXRvcmlhbC5odG1sIj5jcmVhdGluZyBhbiAKK2luZmVjdG9yLjwvYT48L2k+PGJyPgorVG8gY3JlYXRlIGFuIGluZmVjdG9yIHlvdSBmaXJzdCBuZWVkIHRvIG1ha2Ugc3VyZSB5b3Uga25vdyB0aGUgZXhhY3QgJiM4MjE2O0Rpc2Vhc2UgCitOYW1lJiM4MjE3OyB1c2VkIHdoZW4geW91IGNyZWF0ZWQgeW91ciBkaXNlYXNlLiA8YnI+CitUbyBiZSBzdXJlIGNoZWNrIGl0IGFzIGZvbGxvd3MuIEluIHRoZSBQcm9qZWN0IEV4cGxvcmVyLCBVbmRlciBEZWNvcmF0b3JzLCAKK2RvdWJsZSBjbGljayBvbiBFeHBlcmltZW50YWxEaXNlYXNlLnN0YW5kYXJkIDxicj4KK1RoZSBuZXcgZGlzZWFzZSB3aWxsIGJlIHZpc2libGUgaW4gdGhlIHJlc291cmNlIHNldC4gRXhwYW5kIHRoZSBmaWxlIG5vZGUgYW4geW91IAorc2hvdWxkIHNlZSAmIzgyMjA7RXhwZXJpbWVudGFsRGlzZWFzZSBtb2RlbCBodW1hbiYjODIyMTsuIDxicj4KK0NsaWNrIG9uICYjODIyMDtFeHBlcmltZW50YWxEaXNlYXNlIERpc2Vhc2UgbW9kZWwgaHVtYW4mIzgyMjE7IEluIHRoZSBib3R0b20gd2luZG93IGNsaWNrIG9uIAordGhlIHByb3BlcnRpZXMgdGFiIHRvIHNob3cgdGhlIGRpc2Vhc2UgaW4gdGhlIHByb3BlcnRpZXMgZWRpdG9yIHZpZXcuIDxicj4KKzxicj4KK0NsaWNrIG9uIHRoZSBuZXcgaW5mZWN0b3IgaWNvbiAoYmxhY2sgc3F1YXJlIHdpdGggdGhlIGhlYWx0aCBzeW1ib2wgYW5kIHRoZSAKK2xldHRlciBJKTwvcD4KKzx0YWJsZSBib3JkZXI9IjEiIHdpZHRoPSIxMCUiIGlkPSJ0YWJsZTEiPgorCTx0cj4KKwkJPHRkPgorCQk8cCBhbGlnbj0iY2VudGVyIj48Yj4KKwkJPGltZyBib3JkZXI9IjAiIHNyYz0iaW1nL0luZmVjdG9ySWNvbi5qcGciIHdpZHRoPSI4NiIgaGVpZ2h0PSI5OCI+PC9iPjwvdGQ+CisJPC90cj4KKwk8dHI+CisJCTx0ZCBoZWlnaHQ9IjI3Ij4KKwkJPHAgYWxpZ249ImNlbnRlciI+PGI+VGhlIE5ldyBJbmZlY3RvciBJY29uPC9iPjwvdGQ+CisJPC90cj4KKzwvdGFibGU+Cis8cCBhbGlnbj0ibGVmdCI+PGJyPgorPGJyPgorTmFtZSBpdCAoZS5nLiwgJnF1b3Q7Q3ViYUluZmVjdG9yJnF1b3Q7KSwgdW5kZXIgRGlzZWFzZU5hbWU6ICZxdW90O0V4cGVyaW1lbnRhbERpc2Vhc2UmcXVvdDs8YnI+CitVbmRlciBjb3VudHJ5IHNlbGVjdCBDdWJhPGJyPgorQ2xpY2sgb24gdGhlIFNjZW5hcmlvIHRvIG9wZW4gaXQgaW4gdGhlIFJlc291cmNlIHNldDxicj4KK2RyYWcgdGhlIEN1YmFJbmZlY3RvciBmcm9tIERlY29yYXRvcnMgaW50byB0aGUgc2NlbmFyaW8gKG9wZW4gaXQgdG8gc2VlIGl0KTxicj4KKzxicj4KK0luIHRoZSByZXNvdXJjZSBzZXQgY2xpY2sgb24gdGhlIGluZmVjdG9yIFNJIEluZmVjdG9yIEV4cGVyaW1lbnRhbERpc2Vhc2UgdG8gCitlZGl0IGl0LiBZb3VyIGRpc2Vhc2UgbW9kZWwgbWF5IGJlIFNJLCBTSVIsIFNJRVIsIGV0YyBidXQgaW4gYWxsIGNhc2VzIHlvdSBvbmx5IAorbmVlZCBhbiBTSSBpbmZlY3RvciAoYXMgdGhpcyBiYXNlIGNsYXNzIHdpbGwgYWRkIGluZmVjdGlvdXMgcGVvcGxlIHRvIHNlZWQgYW55IAorbW9kZWwuPGJyPgorPGJyPgorY2xpY2sgb24gdGhlIHNjZW5hcmlvLCByaWdodCBjbGljayBhbmQgcnVuIDwvcD4KKzxoMyBhbGlnbj0ibGVmdCI+PHNwYW4gc3R5bGU9ImZvbnQtd2VpZ2h0OiA0MDAiPjxpPlNhdmUgeW91ciB3b3JrIGF0IHRoaXMgcG9pbnQgYnkgaGl0dGluZyA8Yj5jdHJsLXM8L2I+PC9pPjwvc3Bhbj48L2gzPgorCisKKzwvYm9keT4KKzwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC90dXRvcmlhbHMvc2VxdWVuY2VydHV0b3JpYWwuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL3R1dG9yaWFscy9zZXF1ZW5jZXJ0dXRvcmlhbC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBmMjc3MjMKLS0tIC9kZXYvbnVsbAorKysgYi9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC90dXRvcmlhbHMvc2VxdWVuY2VydHV0b3JpYWwuaHRtbApAQCAtMCwwICsxLDcxIEBACis8IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIvaHRtbDQvbG9vc2UuZHRkIj4KKzxodG1sPgorPGhlYWQ+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0xIj4KKzx0aXRsZT5DcmVhdGluZyBhIG5ldyBTZXF1ZW5jZXIgVHV0b3JpYWw8L3RpdGxlPgorPC9oZWFkPgorPGJvZHk+Cis8aDE+Q3JlYXRpbmcgYSBuZXcgU2VxdWVuY2VyIFR1dG9yaWFsPC9oMT4KKzxwPkV2ZXJ5IHNjZW5hcmlvIG11c3QgYWxzbyBpbmNsdWRlIGEgJnF1b3Q7c2VxdWVuY2VyJnF1b3Q7IHdoaWNoIGJhc2ljYWxseSBpcyBhIGNsb2NrIAordGhhdDxicj4KK3JlZ3VsYXRlcyB0aW1lLCBhbmQgYW4gJnF1b3Q7aW5mZWN0b3ImcXVvdDsgd2hpY2ggc2V0cyB0aGUgaW5pdGlhbCBpbmZlY3Rpb3VzIHBvcHVsYXRpb24uIAorU3RlbSBoYXMgYSBidWlsZCBpbiBkZWZhdWx0PGJyPgorc2VxdWVuY2VyIGNhbGxlZCB0aGUgJnF1b3Q7U2VxdWVudGlhbCBTZXF1ZW5jZXImcXVvdDsgYnV0IHlvdSB3aWxsIG5vIGRvdWJ0IHdhbnQgdG8gY3JlYXRlIAoreW91ciBvd24gdG8gc3BlY2lmeTxicj4KK3N0YXJ0IHRpbWUsIHN0ZXAgc2l6ZSwgZW5kIHRpbWUsIGV0Yy48L3A+Cis8cD5UbyBjcmVhdGUgYSBuZXcgc2VxdWVuY2VyIGNsaWNrIG9uIHRoZSBOZXcgU2VxdWVuY2VyIEljb24gd2hpY2ggYXBwZWFycyBhcyBhIAorbGl0dGxlIGNsb2NrLjxicj4KK0FsdGVybmF0aXZlbHksIG9uIHRoZSBtZW51IGJhciB5b3UgY2FuIHNlbGVjdCAmZ3Q7TkVXJmd0O1NFUVVFTkNFUjwvcD4KKzx0YWJsZSBib3JkZXI9IjEiIHdpZHRoPSIxNiUiIGlkPSJ0YWJsZTEiPgorCTx0cj4KKwkJPHRkIGFsaWduPSJjZW50ZXIiPgorCQk8aW1nIGJvcmRlcj0iMCIgc3JjPSJpbWcvc2VxdWVuY2VyMy5qcGciIHdpZHRoPSI1OCIgaGVpZ2h0PSI1NiI+PC90ZD4KKwk8L3RyPgorCTx0cj4KKwkJPHRkIGFsaWduPSJjZW50ZXIiPjxiPkZpZ3VyZSAxOiBUaGUgTmV3IFNlcXVlbmNlciBJY29uPC9iPjwvdGQ+CisJPC90cj4KKzwvdGFibGU+Cis8cD4mbmJzcDs8L3A+Cis8cD5UaGUgJnF1b3Q7TmV3IFNlcXVlbnRpYWwgU2VxdWVuY2VyJnF1b3Q7IERpYWxvZyB3aWxsIG9wZW4gYXMgc2hvd24gaW4gZmlndXJlIDIgYmVsb3cuPGJyPgorU3BlY2lmeSBpbiB3aGljaCBQcm9qZWN0IHRvIHB1dCB0aGUgU2VxdWVuY2VyIChpdCB3aWxsIGFsd2F5cyBnbyBpbiB5b3VyIAorU2VxdWVuY2VycyBmb2xkZXIpLjxicj4KK0dpdmUgaXQgYSBuYW1lLCBhbmQgc2VsZWN0IHRoZSBjeWNsZSBwZXJpb2QgYW5kIHVuaXQuIEF0IHRoaXMgcG9pbnQgaW4gdGltZSBTVEVNIAorb25seSBzdXBwb3J0czxicj4KK2NvbnN0YW50IHRpbWUgc3RlcHMuIEluIHRoZSBmdXR1cmUgbmV3IFNlcXVlbmNlcnMgd2lsbCBiZSBjcmVhdGVkIHRoYXQgYWxsb3cgCit2YXJpYWJsZSB0aW1lIHN0ZXBzLjwvcD4KKzxwPlNlbGVjdCB0aGUgc3RhcnRpbmcgZGF0ZS48L3A+Cis8cD5JZiB5b3Ugd2lzaCB0byBzcGVjaWZ5IGFuZCBFbmQgRGF0ZSBiZSBzdXJlIHRvIGNoZWNrIHRoZSA8Yj4mcXVvdDtTcGVjaWZ5IEVuZCAKK0RhdGUmcXVvdDsgPC9iPmNoZWNrYm94Ljxicj4KK1RoaXMgY2hlY2sgYm94IE1VU1QgYmUgc2V0IGZvciB0aGUgZW5kIGRhdGUgdG8gYmUgZWRpdGFibGUgbGF0ZXIuPC9wPgorPHA+WW91IHdpbGwgdGhlbiBiZSBhbGxvd2VkIHRvIHNldCB0aGUgRW5kIERhdGUgaW4gdGhlIHNlY29uZCBjYWxlbmRhci4gPGJyPgorJm5ic3A7PC9wPgorPHRhYmxlIGJvcmRlcj0iMSIgd2lkdGg9IjM0JSIgaWQ9InRhYmxlMiI+CisJPHRyPgorCQk8dGQgYWxpZ249ImNlbnRlciI+PGI+CisJCTxpbWcgYm9yZGVyPSIwIiBzcmM9ImltZy9zZXF1ZW5jZXIxLmpwZyIgd2lkdGg9IjQ1NSIgaGVpZ2h0PSI2MzYiPjwvYj48L3RkPgorCTwvdHI+CisJPHRyPgorCQk8dGQgYWxpZ249ImNlbnRlciI+PGI+RmlndXJlIDI6IFRoZSBOZXcgU2VxdWVudGlhbCBTZXF1ZW5jZXIgRGlhbG9nIAorCQloZWxwcyB5b3UgY29uZmlndXJlIGEgU2VxdWVuY2VyLjwvYj48L3RkPgorCTwvdHI+Cis8L3RhYmxlPgorPHA+Jm5ic3A7PC9wPgorPHA+T25jZSB5b3UgaGF2ZSBjcmVhdGVkIHlvdXIgc2VxdWVuY2VyIGl0IG11c3QgYmUgZHJhZ2dlZCBpbnRvIHlvdXIgc2NlbmFyaW8gCitmb2xkZXIuIEZvbGxvdyB0aGUgaW5zdHJ1Y3Rpb25zPGJyPgordW5kZXIgPGEgaHJlZj0ic2NlbmFyaW90dXRvcmlhbC5odG1sIj4mcXVvdDtDcmVhdGluZyBhIFNjZW5hcmlvJnF1b3Q7LiA8L2E+Jm5ic3A7VGhlIAorc2VxdWVuY2VyIGNhbiBiZSBlZGl0ZWQgYWZ0ZXIgY3JlYXRpb24gYnkgb3BlbmluZyB0aGUgc2NlbmFyaW8sIHNlbGVjdGluZyB0aGUKKzxicj4KK3NlcXVlbmNlciwgYW5kIGRvdWJsZSBjbGlja2luZyB0byBvcGVuIGl0IGluIHRoZSAmcXVvdDtwcm9wZXJ0eSBlZGl0b3ImcXVvdDsgYXQgdGhlIGJvdHRvbSAKK29mIHRoZSBzY3JlZW4gKFNlZSBmaWd1cmUgMykuPC9wPgorPHA+Jm5ic3A7PC9wPgorPHRhYmxlIGJvcmRlcj0iMSIgd2lkdGg9IjE0JSIgaWQ9InRhYmxlMyI+CisJPHRyPgorCQk8dGQ+PGltZyBib3JkZXI9IjAiIHNyYz0iaW1nL3NlcXVlbmNlcjIuanBnIiB3aWR0aD0iNjU5IiBoZWlnaHQ9IjU4NiI+PC90ZD4KKwk8L3RyPgorCTx0cj4KKwkJPHRkPkZpZ3VyZSAzOiBDaGFuZ2luZyB0aGUgc2VxdWVuY2VyIGluIHRoZSBwcm9wZXJ0eSBlZGl0b3IgYWZ0ZXIgaXQgaGFzIAorCQliZWVuIGFkZGVkIHRvIGEgc2NlbmFyaW8uPC90ZD4KKwk8L3RyPgorPC90YWJsZT4KKzwvYm9keT4KKzwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC93aGF0c25ldy92MC4yLjIuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL3doYXRzbmV3L3YwLjIuMi5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI3ZDY3ZWEKLS0tIC9kZXYvbnVsbAorKysgYi9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC93aGF0c25ldy92MC4yLjIuaHRtbApAQCAtMCwwICsxLDIzIEBACis8aHRtbD4KKzxoZWFkPgorPHRpdGxlPldoYXQncyBuZXcgaW4gVjAuMi4yIG9mIFNURU08L3RpdGxlPgorPC9oZWFkPgorPGJvZHk+Cis8aDE+V2hhdCdzIG5ldyBpbiBWMC4yLjIgb2YgU1RFTTwvaDE+Cis8b2w+CisKKwk8bGk+VGltZSBkZWxheSBjaGFuZ2VkIGZyb20gc2Vjb25kcyB0byBtaWxsaXNlY29uZHMgPGEKKwkJaHJlZj0iaHR0cHM6Ly9idWdzLmVjbGlwc2Uub3JnL2J1Z3Mvc2hvd19idWcuY2dpP2lkPTIwNDQ4MyI+QnVnCisJMjA0NDgzPC9hPjwvbGk+CisJCisJPGxpPlRpbWUgU2VyaWVzIHZpZXcgbm93IHNob3dzIHRpbWUgdW5pdHMgPGEKKwkJaHJlZj0iaHR0cHM6Ly9idWdzLmVjbGlwc2Uub3JnL2J1Z3Mvc2hvd19idWcuY2dpP2lkPTIxMTgzNiI+QnVnCisJMjExODM2PC9hPjwvbGk+CisJCisJCTxsaT5OZWVkIHVzZXIgdHV0b3JpYWwgZm9yIGNvbXBvc2luZyBhIG5ldyBncmFwaCA8YQorCQlocmVmPSJodHRwczovL2J1Z3MuZWNsaXBzZS5vcmcvYnVncy9zaG93X2J1Zy5jZ2k/aWQ9MjEzNjU2Ij5CdWcKKwkyMTM2NTY8L2E+PC9saT4KKzwvb2w+Cis8L2JvZHk+CisKKzwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2phdmFkb2MueG1sIGIvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9qYXZhZG9jLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lOTE1ZTlkCi0tLSAvZGV2L251bGwKKysrIGIvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9qYXZhZG9jLnhtbApAQCAtMCwwICsxLDY2IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPHByb2plY3QgZGVmYXVsdD0iamF2YWRvYyI+CisJPGRlc2NyaXB0aW9uPgorCSAgICBHZW5lcmF0ZSBKYXZhRG9jIGZvciB0aGUgU1RFTSBwcm9qZWN0cworCQkKKwkJICBUaGUgb3V0cHV0IHdpbGwgZ28gdG86CisJCSAgICBvcmcuZWNsaXBzZS5zdGVtLmRvYy9qYXZhZG9jCisJCQorCQkgIFRoaXMgZ2VuZXJhdGVzIHRob3VzYW5kcyBvZiB3cm5pbmcgbWVzc2FnZXMgYnV0IAorCQkgIHRoZXJlIGFwcGVhcnMgdG8gYmUgbm8gZWFzeSB3YXkgdG8gYXZvaWQgdGhpcy4KKwkJCisJICAgIDwvZGVzY3JpcHRpb24+CisKKwkJCisKKwkJPCEtLSBQIHIgbyBqIGUgYyB0ICBTIHAgZSBjIGkgZiBpIGMgYSB0IGkgbyBuIHMgLS0+CisKKworCQk8IS0tIFRoZSBwcmVmaXggZm9yIGZ1bGx5IHF1YWxpZmllZCBuYW1lcyAtLT4KKwkJPHByb3BlcnR5IG5hbWU9IklEX1JPT1QiIHZhbHVlPSJvcmcuZWNsaXBzZS5zdGVtIiAvPgorCisJCisJPCEtLSAKKwkgICAgVGhlIHNvdXJjZSBmaWxlIHRvIGdlbmVyYXRlIEphdmFEb2MgZm9yICAKKwktLT4KKwk8cGF0aCBpZD0ic291cmNlcGF0aCI+CQkKKwkJPHBhdGhlbGVtZW50IGxvY2F0aW9uPSIuLi8ke0lEX1JPT1R9LmNvcmUvc3JjIiAvPgkJCisJCTxwYXRoZWxlbWVudCBsb2NhdGlvbj0iLi4vJHtJRF9ST09UfS5kZWZpbml0aW9ucy9zcmMiIC8+CisJCTxwYXRoZWxlbWVudCBsb2NhdGlvbj0iLi4vJHtJRF9ST09UfS50ZXN0cy51dGlsL3NyYyIgLz4KKwkJPHBhdGhlbGVtZW50IGxvY2F0aW9uPSIuLi8ke0lEX1JPT1R9LmRpc2Vhc2Vtb2RlbHMvc3JjIiAvPgorCQk8cGF0aGVsZW1lbnQgbG9jYXRpb249Ii4uLyR7SURfUk9PVH0uZGlzZWFzZXMvc3JjIiAvPgorCQk8cGF0aGVsZW1lbnQgbG9jYXRpb249Ii4uLyR7SURfUk9PVH0uZ2VvZ3JhcGh5L3NyYyIgLz4KKwkJPHBhdGhlbGVtZW50IGxvY2F0aW9uPSIuLi8ke0lEX1JPT1R9LmludGVybmFsLmRhdGEvc3JjIiAvPgorCQk8cGF0aGVsZW1lbnQgbG9jYXRpb249Ii4uLyR7SURfUk9PVH0uam9icy9zcmMiIC8+CisJCTxwYXRoZWxlbWVudCBsb2NhdGlvbj0iLi4vJHtJRF9ST09UfS5zZXF1ZW5jZXJzL3NyYyIgLz4KKwkJPHBhdGhlbGVtZW50IGxvY2F0aW9uPSIuLi8ke0lEX1JPT1R9LnVpL3NyYyIgLz4KKwkJPHBhdGhlbGVtZW50IGxvY2F0aW9uPSIuLi8ke0lEX1JPT1R9LnVpLmRpc2Vhc2Vtb2RlbHMvc3JjIiAvPgorCQk8cGF0aGVsZW1lbnQgbG9jYXRpb249Ii4uLyR7SURfUk9PVH0udWkuZ2Uvc3JjIiAvPgorCTwvcGF0aD4KKwkKKwkKKzx0YXJnZXQgbmFtZT0iamF2YWRvYyI+CisgIAorICA8amF2YWRvYyBhY2Nlc3M9InB1YmxpYyIgYXV0aG9yPSJmYWxzZSIgCQkKKwlkZXN0ZGlyPSJqYXZhZG9jIiBkb2N0aXRsZT0iU1RFTSBKYXZhZG9jIiBub2RlcHJlY2F0ZWQ9ImZhbHNlIiBub2RlcHJlY2F0ZWRsaXN0PSJmYWxzZSIgbm9pbmRleD0iZmFsc2UiIG5vbmF2YmFyPSJmYWxzZSIgbm90cmVlPSJmYWxzZSIgCisJc291cmNlcGF0aHJlZj0ic291cmNlcGF0aCIJCisJc291cmNlPSIxLjUiICBzcGxpdGluZGV4PSJ0cnVlIiB1c2U9InRydWUiIHZlcnNpb249ImZhbHNlIgorICAJICAvPiAKKzwvdGFyZ2V0PgorCis8IS0tIAorCQkqIEJ1aWxkIHRoZSB6aXAgZmlsZSAgCisJCSogICAKKwkJKiAKKwkJLS0+CisJPHRhcmdldCBuYW1lPSJ6aXAiIAorCQlkZXNjcmlwdGlvbj0iY3JlYXRlcyB0aGUgemlwIGZpbGUiPgkKKwkJCQkKKwkJPHppcCAKKwkJCWRlc3RmaWxlPSJqYXZhZG9jLnppcCI+CisJCQk8emlwZmlsZXNldCBkaXI9ImphdmFkb2MiIHByZWZpeD0iamF2YWRvYyIvPiAJICAgICAgCisJCQkgCisJCTwvemlwPgorCTwvdGFyZ2V0PgorCQorPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9ub3RpY2UuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2Mvbm90aWNlLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzZhZjk2NgotLS0gL2Rldi9udWxsCisrKyBiL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2Mvbm90aWNlLmh0bWwKQEAgLTAsMCArMSw3OSBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMC8vRU4iPgorPGh0bWw+Cis8aGVhZD4KKzxtZXRhIGh0dHAtZXF1aXY9Q29udGVudC1UeXBlIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1pc28tODg1OS0xIj4KKzx0aXRsZT5FY2xpcHNlLm9yZyBTb2Z0d2FyZSBVc2VyIEFncmVlbWVudDwvdGl0bGU+Cis8L2hlYWQ+CisKKzxib2R5IGxhbmc9IkVOLVVTIiBsaW5rPWJsdWUgdmxpbms9cHVycGxlPgorPGgyPkVjbGlwc2UgRm91bmRhdGlvbiBTb2Z0d2FyZSBVc2VyIEFncmVlbWVudDwvaDI+Cis8cD5NYXJjaCAxNywgMjAwNTwvcD4KKworPGgzPlVzYWdlIE9mIENvbnRlbnQ8L2gzPgorCis8cD5USEUgRUNMSVBTRSBGT1VOREFUSU9OIE1BS0VTIEFWQUlMQUJMRSBTT0ZUV0FSRSwgRE9DVU1FTlRBVElPTiwgSU5GT1JNQVRJT04gQU5EL09SIE9USEVSIE1BVEVSSUFMUyBGT1IgT1BFTiBTT1VSQ0UgUFJPSkVDVFMKKyAgIChDT0xMRUNUSVZFTFkgJnF1b3Q7Q09OVEVOVCZxdW90OykuICBVU0UgT0YgVEhFIENPTlRFTlQgSVMgR09WRVJORUQgQlkgVEhFIFRFUk1TIEFORCBDT05ESVRJT05TIE9GIFRISVMgQUdSRUVNRU5UIEFORC9PUiBUSEUgVEVSTVMgQU5ECisgICBDT05ESVRJT05TIE9GIExJQ0VOU0UgQUdSRUVNRU5UUyBPUiBOT1RJQ0VTIElORElDQVRFRCBPUiBSRUZFUkVOQ0VEIEJFTE9XLiAgQlkgVVNJTkcgVEhFIENPTlRFTlQsIFlPVSBBR1JFRSBUSEFUIFlPVVIgVVNFCisgICBPRiBUSEUgQ09OVEVOVCBJUyBHT1ZFUk5FRCBCWSBUSElTIEFHUkVFTUVOVCBBTkQvT1IgVEhFIFRFUk1TIEFORCBDT05ESVRJT05TIE9GIEFOWSBBUFBMSUNBQkxFIExJQ0VOU0UgQUdSRUVNRU5UUyBPUgorICAgTk9USUNFUyBJTkRJQ0FURUQgT1IgUkVGRVJFTkNFRCBCRUxPVy4gIElGIFlPVSBETyBOT1QgQUdSRUUgVE8gVEhFIFRFUk1TIEFORCBDT05ESVRJT05TIE9GIFRISVMgQUdSRUVNRU5UIEFORCBUSEUgVEVSTVMgQU5ECisgICBDT05ESVRJT05TIE9GIEFOWSBBUFBMSUNBQkxFIExJQ0VOU0UgQUdSRUVNRU5UUyBPUiBOT1RJQ0VTIElORElDQVRFRCBPUiBSRUZFUkVOQ0VEIEJFTE9XLCBUSEVOIFlPVSBNQVkgTk9UIFVTRSBUSEUgQ09OVEVOVC48L3A+CisgICAKKzxoMz5BcHBsaWNhYmxlIExpY2Vuc2VzPC9oMz4gICAKKyAgIAorPHA+VW5sZXNzIG90aGVyd2lzZSBpbmRpY2F0ZWQsIGFsbCBDb250ZW50IG1hZGUgYXZhaWxhYmxlIGJ5IHRoZSBFY2xpcHNlIEZvdW5kYXRpb24gaXMgcHJvdmlkZWQgdG8geW91IHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMAorICAgKCZxdW90O0VQTCZxdW90OykuICBBIGNvcHkgb2YgdGhlIEVQTCBpcyBwcm92aWRlZCB3aXRoIHRoaXMgQ29udGVudCBhbmQgaXMgYWxzbyBhdmFpbGFibGUgYXQgPGEgaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwiPmh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sPC9hPi4KKyAgIEZvciBwdXJwb3NlcyBvZiB0aGUgRVBMLCAmcXVvdDtQcm9ncmFtJnF1b3Q7IHdpbGwgbWVhbiB0aGUgQ29udGVudC48L3A+CisKKzxwPkNvbnRlbnQgaW5jbHVkZXMsIGJ1dCBpcyBub3QgbGltaXRlZCB0bywgc291cmNlIGNvZGUsIG9iamVjdCBjb2RlLCBkb2N1bWVudGF0aW9uIGFuZCBvdGhlciBmaWxlcyBtYWludGFpbmVkIGluIHRoZSBFY2xpcHNlLm9yZyBDVlMgcmVwb3NpdG9yeSAoJnF1b3Q7UmVwb3NpdG9yeSZxdW90OykgaW4gQ1ZTCisgICBtb2R1bGVzICgmcXVvdDtNb2R1bGVzJnF1b3Q7KSBhbmQgbWFkZSBhdmFpbGFibGUgYXMgZG93bmxvYWRhYmxlIGFyY2hpdmVzICgmcXVvdDtEb3dubG9hZHMmcXVvdDspLjwvcD4KKyAgIAorPHVsPgorCTxsaT5Db250ZW50IG1heSBiZSBzdHJ1Y3R1cmVkIGFuZCBwYWNrYWdlZCBpbnRvIG1vZHVsZXMgdG8gZmFjaWxpdGF0ZSBkZWxpdmVyaW5nLCBleHRlbmRpbmcsIGFuZCB1cGdyYWRpbmcgdGhlIENvbnRlbnQuICBUeXBpY2FsIG1vZHVsZXMgbWF5IGluY2x1ZGUgcGx1Zy1pbnMgKCZxdW90O1BsdWctaW5zJnF1b3Q7KSwgcGx1Zy1pbiBmcmFnbWVudHMgKCZxdW90O0ZyYWdtZW50cyZxdW90OyksIGFuZCBmZWF0dXJlcyAoJnF1b3Q7RmVhdHVyZXMmcXVvdDspLjwvbGk+CisJPGxpPkVhY2ggUGx1Zy1pbiBvciBGcmFnbWVudCBtYXkgYmUgcGFja2FnZWQgYXMgYSBzdWItZGlyZWN0b3J5IG9yIEpBUiAoSmF2YSZ0cmFkZTsgQVJjaGl2ZSkgaW4gYSBkaXJlY3RvcnkgbmFtZWQgJnF1b3Q7cGx1Z2lucyZxdW90Oy48L2xpPgorCTxsaT5BIEZlYXR1cmUgaXMgYSBidW5kbGUgb2Ygb25lIG9yIG1vcmUgUGx1Zy1pbnMgYW5kL29yIEZyYWdtZW50cyBhbmQgYXNzb2NpYXRlZCBtYXRlcmlhbC4gIEVhY2ggRmVhdHVyZSBtYXkgYmUgcGFja2FnZWQgYXMgYSBzdWItZGlyZWN0b3J5IGluIGEgZGlyZWN0b3J5IG5hbWVkICZxdW90O2ZlYXR1cmVzJnF1b3Q7LiAgV2l0aGluIGEgRmVhdHVyZSwgZmlsZXMgbmFtZWQgJnF1b3Q7ZmVhdHVyZS54bWwmcXVvdDsgbWF5IGNvbnRhaW4gYSBsaXN0IG9mIHRoZSBuYW1lcyBhbmQgdmVyc2lvbiBudW1iZXJzIG9mIHRoZSBQbHVnLWlucworICAgICAgYW5kL29yIEZyYWdtZW50cyBhc3NvY2lhdGVkIHdpdGggdGhhdCBGZWF0dXJlLjwvbGk+CisJPGxpPkZlYXR1cmVzIG1heSBhbHNvIGluY2x1ZGUgb3RoZXIgRmVhdHVyZXMgKCZxdW90O0luY2x1ZGVkIEZlYXR1cmVzJnF1b3Q7KS4gV2l0aGluIGEgRmVhdHVyZSwgZmlsZXMgbmFtZWQgJnF1b3Q7ZmVhdHVyZS54bWwmcXVvdDsgbWF5IGNvbnRhaW4gYSBsaXN0IG9mIHRoZSBuYW1lcyBhbmQgdmVyc2lvbiBudW1iZXJzIG9mIEluY2x1ZGVkIEZlYXR1cmVzLjwvbGk+Cis8L3VsPiAgIAorIAorPHA+VGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIGdvdmVybmluZyBQbHVnLWlucyBhbmQgRnJhZ21lbnRzIHNob3VsZCBiZSBjb250YWluZWQgaW4gZmlsZXMgbmFtZWQgJnF1b3Q7YWJvdXQuaHRtbCZxdW90OyAoJnF1b3Q7QWJvdXRzJnF1b3Q7KS4gVGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIGdvdmVybmluZyBGZWF0dXJlcyBhbmQKK0luY2x1ZGVkIEZlYXR1cmVzIHNob3VsZCBiZSBjb250YWluZWQgaW4gZmlsZXMgbmFtZWQgJnF1b3Q7bGljZW5zZS5odG1sJnF1b3Q7ICgmcXVvdDtGZWF0dXJlIExpY2Vuc2VzJnF1b3Q7KS4gIEFib3V0cyBhbmQgRmVhdHVyZSBMaWNlbnNlcyBtYXkgYmUgbG9jYXRlZCBpbiBhbnkgZGlyZWN0b3J5IG9mIGEgRG93bmxvYWQgb3IgTW9kdWxlCitpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0byB0aGUgZm9sbG93aW5nIGxvY2F0aW9uczo8L3A+CisKKzx1bD4KKwk8bGk+VGhlIHRvcC1sZXZlbCAocm9vdCkgZGlyZWN0b3J5PC9saT4KKwk8bGk+UGx1Zy1pbiBhbmQgRnJhZ21lbnQgZGlyZWN0b3JpZXM8L2xpPgorCTxsaT5JbnNpZGUgUGx1Zy1pbnMgYW5kIEZyYWdtZW50cyBwYWNrYWdlZCBhcyBKQVJzPC9saT4KKwk8bGk+U3ViLWRpcmVjdG9yaWVzIG9mIHRoZSBkaXJlY3RvcnkgbmFtZWQgJnF1b3Q7c3JjJnF1b3Q7IG9mIGNlcnRhaW4gUGx1Zy1pbnM8L2xpPgorCTxsaT5GZWF0dXJlIGRpcmVjdG9yaWVzPC9saT4KKzwvdWw+CisJCQorPHA+Tm90ZTogaWYgYSBGZWF0dXJlIG1hZGUgYXZhaWxhYmxlIGJ5IHRoZSBFY2xpcHNlIEZvdW5kYXRpb24gaXMgaW5zdGFsbGVkIHVzaW5nIHRoZSBFY2xpcHNlIFVwZGF0ZSBNYW5hZ2VyLCB5b3UgbXVzdCBhZ3JlZSB0byBhIGxpY2Vuc2UgKCZxdW90O0ZlYXR1cmUgVXBkYXRlIExpY2Vuc2UmcXVvdDspIGR1cmluZyB0aGUKK2luc3RhbGxhdGlvbiBwcm9jZXNzLiAgSWYgdGhlIEZlYXR1cmUgY29udGFpbnMgSW5jbHVkZWQgRmVhdHVyZXMsIHRoZSBGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlIHNob3VsZCBlaXRoZXIgcHJvdmlkZSB5b3Ugd2l0aCB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgZ292ZXJuaW5nIHRoZSBJbmNsdWRlZCBGZWF0dXJlcyBvcgoraW5mb3JtIHlvdSB3aGVyZSB5b3UgY2FuIGxvY2F0ZSB0aGVtLiAgRmVhdHVyZSBVcGRhdGUgTGljZW5zZXMgbWF5IGJlIGZvdW5kIGluIHRoZSAmcXVvdDtsaWNlbnNlJnF1b3Q7IHByb3BlcnR5IG9mIGZpbGVzIG5hbWVkICZxdW90O2ZlYXR1cmUucHJvcGVydGllcyZxdW90OyBmb3VuZCB3aXRoaW4gYSBGZWF0dXJlLgorU3VjaCBBYm91dHMsIEZlYXR1cmUgTGljZW5zZXMsIGFuZCBGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlcyBjb250YWluIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyAob3IgcmVmZXJlbmNlcyB0byBzdWNoIHRlcm1zIGFuZCBjb25kaXRpb25zKSB0aGF0IGdvdmVybiB5b3VyIHVzZSBvZiB0aGUgYXNzb2NpYXRlZCBDb250ZW50IGluCit0aGF0IGRpcmVjdG9yeS48L3A+CisKKzxwPlRIRSBBQk9VVFMsIEZFQVRVUkUgTElDRU5TRVMsIEFORCBGRUFUVVJFIFVQREFURSBMSUNFTlNFUyBNQVkgUkVGRVIgVE8gVEhFIEVQTCBPUiBPVEhFUiBMSUNFTlNFIEFHUkVFTUVOVFMsIE5PVElDRVMgT1IgVEVSTVMgQU5EIENPTkRJVElPTlMuICBTT01FIE9GIFRIRVNFCitPVEhFUiBMSUNFTlNFIEFHUkVFTUVOVFMgTUFZIElOQ0xVREUgKEJVVCBBUkUgTk9UIExJTUlURUQgVE8pOjwvcD4KKworPHVsPgorCTxsaT5Db21tb24gUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjAgKGF2YWlsYWJsZSBhdCA8YSBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2NwbC12MTAuaHRtbCI+aHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9jcGwtdjEwLmh0bWw8L2E+KTwvbGk+CisJPGxpPkFwYWNoZSBTb2Z0d2FyZSBMaWNlbnNlIDEuMSAoYXZhaWxhYmxlIGF0IDxhIGhyZWY9Imh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFIj5odHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRTwvYT4pPC9saT4KKwk8bGk+QXBhY2hlIFNvZnR3YXJlIExpY2Vuc2UgMi4wIChhdmFpbGFibGUgYXQgPGEgaHJlZj0iaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wIj5odHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjA8L2E+KTwvbGk+CisJPGxpPklCTSBQdWJsaWMgTGljZW5zZSAxLjAgKGF2YWlsYWJsZSBhdCA8YSBocmVmPSJodHRwOi8vb3NzLnNvZnR3YXJlLmlibS5jb20vZGV2ZWxvcGVyd29ya3Mvb3BlbnNvdXJjZS9saWNlbnNlMTAuaHRtbCI+aHR0cDovL29zcy5zb2Z0d2FyZS5pYm0uY29tL2RldmVsb3BlcndvcmtzL29wZW5zb3VyY2UvbGljZW5zZTEwLmh0bWw8L2E+KTwvbGk+CQorCTxsaT5NZXRybyBMaW5rIFB1YmxpYyBMaWNlbnNlIDEuMDAgKGF2YWlsYWJsZSBhdCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW5ncm91cC5vcmcvb3Blbm1vdGlmL3N1cHBvcnRlcnMvbWV0cm9saW5rL2xpY2Vuc2UuaHRtbCI+aHR0cDovL3d3dy5vcGVuZ3JvdXAub3JnL29wZW5tb3RpZi9zdXBwb3J0ZXJzL21ldHJvbGluay9saWNlbnNlLmh0bWw8L2E+KTwvbGk+CisJPGxpPk1vemlsbGEgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjEgKGF2YWlsYWJsZSBhdCA8YSBocmVmPSJodHRwOi8vd3d3Lm1vemlsbGEub3JnL01QTC9NUEwtMS4xLmh0bWwiPmh0dHA6Ly93d3cubW96aWxsYS5vcmcvTVBML01QTC0xLjEuaHRtbDwvYT4pPC9saT4KKzwvdWw+CisKKzxwPklUIElTIFlPVVIgT0JMSUdBVElPTiBUTyBSRUFEIEFORCBBQ0NFUFQgQUxMIFNVQ0ggVEVSTVMgQU5EIENPTkRJVElPTlMgUFJJT1IgVE8gVVNFIE9GIFRIRSBDT05URU5ULiAgSWYgbm8gQWJvdXQsIEZlYXR1cmUgTGljZW5zZSwgb3IgRmVhdHVyZSBVcGRhdGUgTGljZW5zZSBpcyBwcm92aWRlZCwgcGxlYXNlCitjb250YWN0IHRoZSBFY2xpcHNlIEZvdW5kYXRpb24gdG8gZGV0ZXJtaW5lIHdoYXQgdGVybXMgYW5kIGNvbmRpdGlvbnMgZ292ZXJuIHRoYXQgcGFydGljdWxhciBDb250ZW50LjwvcD4KKworPGgzPkNyeXB0b2dyYXBoeTwvaDM+CisKKzxwPkNvbnRlbnQgbWF5IGNvbnRhaW4gZW5jcnlwdGlvbiBzb2Z0d2FyZS4gVGhlIGNvdW50cnkgaW4gd2hpY2ggeW91IGFyZSBjdXJyZW50bHkgbWF5IGhhdmUgcmVzdHJpY3Rpb25zIG9uIHRoZSBpbXBvcnQsIHBvc3Nlc3Npb24sIGFuZCB1c2UsIGFuZC9vciByZS1leHBvcnQgdG8KKyAgIGFub3RoZXIgY291bnRyeSwgb2YgZW5jcnlwdGlvbiBzb2Z0d2FyZS4gQkVGT1JFIHVzaW5nIGFueSBlbmNyeXB0aW9uIHNvZnR3YXJlLCBwbGVhc2UgY2hlY2sgdGhlIGNvdW50cnkncyBsYXdzLCByZWd1bGF0aW9ucyBhbmQgcG9saWNpZXMgY29uY2VybmluZyB0aGUgaW1wb3J0LAorICAgcG9zc2Vzc2lvbiwgb3IgdXNlLCBhbmQgcmUtZXhwb3J0IG9mIGVuY3J5cHRpb24gc29mdHdhcmUsIHRvIHNlZSBpZiB0aGlzIGlzIHBlcm1pdHRlZC48L3A+CisgICAKKzxzbWFsbD5KYXZhIGFuZCBhbGwgSmF2YS1iYXNlZCB0cmFkZW1hcmtzIGFyZSB0cmFkZW1hcmtzIG9mIFN1biBNaWNyb3N5c3RlbXMsIEluYy4gaW4gdGhlIFVuaXRlZCBTdGF0ZXMsIG90aGVyIGNvdW50cmllcywgb3IgYm90aC48L3NtYWxsPiAgIAorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9wbHVnaW4ucHJvcGVydGllcyBiL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvcGx1Z2luLnByb3BlcnRpZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTViNTNhMgotLS0gL2Rldi9udWxsCisrKyBiL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvcGx1Z2luLnByb3BlcnRpZXMKQEAgLTAsMCArMSwxMyBAQAorIy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjICogQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorIyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyMgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyMgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorIyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisjICoKKyMgKiBDb250cmlidXRvcnM6CisjICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorIyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitwbHVnaW5OYW1lID0gU1RFTSBEb2N1bWVudGF0aW9uCitwcm92aWRlck5hbWUgPSBFY2xpcHNlLm9yZwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvcGx1Z2luLnhtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvcGx1Z2luLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MGRmNTE5Ci0tLSAvZGV2L251bGwKKysrIGIvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9wbHVnaW4ueG1sCkBAIC0wLDAgKzEsMzcgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8P2VjbGlwc2UgdmVyc2lvbj0iMy40Ij8+Cis8cGx1Z2luPgorCisgICA8ZXh0ZW5zaW9uCisgICAgICAgIHBvaW50PSJvcmcuZWNsaXBzZS5oZWxwLnRvYyI+CisgICAgIDx0b2MKKyAgICAgICAgICAgZmlsZT0idG9jLnhtbCIKKyAgICAgICAgICAgcHJpbWFyeT0idHJ1ZSIvPgorICAgICAKKyAgPC9leHRlbnNpb24+CisgIAorICA8ZXh0ZW5zaW9uCisgICAgICAgICBwb2ludD0ib3JnLmVjbGlwc2UuaGVscC50b2MiPgorICAgICA8dG9jCisgICAgICAgICAgIGZpbGU9InRvY2NvbmNlcHRzLnhtbCI+CisgICAgIDwvdG9jPgorICAgICA8dG9jIGZpbGU9InRvY2dldHRpbmdzdGFydGVkLnhtbCIvPgorICAgICA8dG9jIGZpbGU9InRvY3JlZmVyZW5jZS54bWwiLz4KKyAgICAgPHRvYworICAgICAgICAgICBmaWxlPSJ0b2NlcGlkZW1pb2xvZ2ljYWxtb2RlbGluZy54bWwiCisgICAgICAgICAgID4KKyAgICAgPC90b2M+CisgICAgIDx0b2MKKyAgICAgICAgICAgZmlsZT0idG9jaW50ZXJmYWNlLnhtbCI+CisgICAgIDwvdG9jPgorICAgICA8dG9jCisgICAgICAgICAgIGZpbGU9InRvY3R1dG9yaWFscy54bWwiPgorICAgICA8L3RvYz4KKyAgIDwvZXh0ZW5zaW9uPgorCisgPGV4dGVuc2lvbiBwb2ludD0ib3JnLmVjbGlwc2UuaGVscC5jb250ZXh0cyI+CisgICAgPGNvbnRleHRzIGZpbGU9ImNvbnRleHRzZW5zaXRpdmVoZWxwLnhtbCIvPgorICAgIDwvZXh0ZW5zaW9uPgorCisKKzwvcGx1Z2luPgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy90b2MueG1sIGIvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy90b2MueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE4MWE3YjUKLS0tIC9kZXYvbnVsbAorKysgYi9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL3RvYy54bWwKQEAgLTAsMCArMSwyNiBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzw/TkxTIFRZUEU9Im9yZy5lY2xpcHNlLmhlbHAudG9jIj8+CisKKzx0b2MgbGFiZWw9IlNURU0gVXNlciBIZWxwIiB0b3BpYz0iaGVscC9odG1sL3RvYy5odG1sIj4KKwk8dG9waWMgbGFiZWw9IkdldHRpbmcgU3RhcnRlZCI+CisJCTxhbmNob3IgaWQ9ImdldHRpbmdzdGFydGVkIiAvPgorCTwvdG9waWM+CisJPHRvcGljIGxhYmVsPSJDb25jZXB0cyI+CisJCTxhbmNob3IgaWQ9ImNvbmNlcHRzIiAvPgorCTwvdG9waWM+CisJPHRvcGljIGxhYmVsPSJJbnRlcmZhY2UiPgorCQk8YW5jaG9yIGlkPSJpbnRlcmZhY2UiIC8+CisJPC90b3BpYz4KKwk8dG9waWMgbGFiZWw9IkVwaWRlbWlvbG9naWNhbCBNb2RlbGluZyI+CisJCTxhbmNob3IgaWQ9ImVwaWRlbWlvbG9naWNhbG1vZGVsaW5nIiAvPgorCTwvdG9waWM+CisJPHRvcGljIGxhYmVsPSJUdXRvcmlhbHMgKGludGVybmV0IGFjY2VzcyByZXF1aXJlZCkiPgorCQk8YW5jaG9yIGlkPSJ0dXRvcmlhbHMiIC8+CisJPC90b3BpYz4KKwk8dG9waWMgbGFiZWw9IlJlZmVyZW5jZSI+CisJCTxhbmNob3IgaWQ9InJlZmVyZW5jZSIgLz4KKwk8L3RvcGljPgorCTx0b3BpYyBocmVmPSJoZWxwL2h0bWwvcmVmZXJlbmNlL2Rpc2NsYWltZXIuaHRtbCIgbGFiZWw9IkRpc2NsYWltZXIiPgorCQk8YW5jaG9yIGlkPSJkaXNjbGFpbWVyIiAvPgorCTwvdG9waWM+Cis8L3RvYz4KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvdG9jY29uY2VwdHMueG1sIGIvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy90b2Njb25jZXB0cy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDA2NGQzZAotLS0gL2Rldi9udWxsCisrKyBiL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvdG9jY29uY2VwdHMueG1sCkBAIC0wLDAgKzEsMTMgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8P05MUyBUWVBFPSJvcmcuZWNsaXBzZS5oZWxwLnRvYyI/PgorCis8dG9jIGxhYmVsPSJDb25jZXB0cyIgbGlua190bz0idG9jLnhtbCNjb25jZXB0cyI+CisJPHRvcGljIGxhYmVsPSJPdmVydmlldyIgaHJlZj0iaGVscC9odG1sL2NvbmNlcHRzL292ZXJ2aWV3Lmh0bWwiPgorCTwvdG9waWM+CisJPHRvcGljIGxhYmVsPSJNb2RlbGluZyBGcmFtZXdvcmsiCisJCWhyZWY9ImhlbHAvaHRtbC9jb25jZXB0cy9tb2RlbGluZ2ZyYW1ld29yay5odG1sIj4KKwk8L3RvcGljPgorCTx0b3BpYyBsYWJlbD0iRXh0ZW5zaWJpbGl0eSIKKwkJaHJlZj0iaGVscC9odG1sL2NvbmNlcHRzL2V4dGVuc2liaWxpdHkuaHRtbCI+CisJPC90b3BpYz4KKzwvdG9jPgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy90b2NkaXNjbGFpbWVyLnhtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvdG9jZGlzY2xhaW1lci54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzllYjk3NAotLS0gL2Rldi9udWxsCisrKyBiL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvdG9jZGlzY2xhaW1lci54bWwKQEAgLTAsMCArMSw4IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPD9OTFMgVFlQRT0ib3JnLmVjbGlwc2UuaGVscC50b2MiPz4KKworPHRvYyBsYWJlbD0iRGlzY2xhaW1lciIgbGlua190bz0idG9jLnhtbCNkaXNjbGFpbWVyIiB0b3BpYz0iaGVscC9odG1sL3JlZmVyZW5jZS9kaXNjbGFpbWVyLmh0bWwiPgorCTx0b3BpYyBsYWJlbD0iRGlzY2xhaW1lciIKKwkJaHJlZj0iaGVscC9odG1sL3JlZmVyZW5jZS9kaXNjbGFpbWVyLmh0bWwiPgorCTwvdG9waWM+Cis8L3RvYz4KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvdG9jZXBpZGVtaW9sb2dpY2FsbW9kZWxpbmcueG1sIGIvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy90b2NlcGlkZW1pb2xvZ2ljYWxtb2RlbGluZy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWRhOGEwMgotLS0gL2Rldi9udWxsCisrKyBiL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvdG9jZXBpZGVtaW9sb2dpY2FsbW9kZWxpbmcueG1sCkBAIC0wLDAgKzEsMTUgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8P05MUyBUWVBFPSJvcmcuZWNsaXBzZS5oZWxwLnRvYyI/PgorCis8dG9jIGxhYmVsPSJFcGlkZW1pb2xvZ2ljYWwgTW9kZWxpbmciCisJbGlua190bz0idG9jLnhtbCNlcGlkZW1pb2xvZ2ljYWxtb2RlbGluZyI+CisJPHRvcGljIGxhYmVsPSJFcGlkZW1pb2xvZ2ljYWwgTW9kZWxpbmcgT3ZlcnZpZXciCisJCWhyZWY9ImhlbHAvaHRtbC9lcGlkZW1pb2xvZ2ljYWxtb2RlbGluZy9vdmVydmlldy5odG1sIiAvPgorCTx0b3BpYyBsYWJlbD0iU0kgRGlzZWFzZSBNb2RlbCBNYXRoZW1hdGljcyIKKwkJaHJlZj0iaGVscC9odG1sL2VwaWRlbWlvbG9naWNhbG1vZGVsaW5nL3NpbWF0aC5odG1sIiAvPgorCTx0b3BpYyBsYWJlbD0iU0lSIERpc2Vhc2UgTW9kZWwgTWF0aGVtYXRpY3MiCisJCWhyZWY9ImhlbHAvaHRtbC9lcGlkZW1pb2xvZ2ljYWxtb2RlbGluZy9zaXJtYXRoLmh0bWwiIC8+CisJPHRvcGljIGxhYmVsPSJTRUlSIERpc2Vhc2UgTW9kZWwgTWF0aGVtYXRpY3MiCisJCWhyZWY9ImhlbHAvaHRtbC9lcGlkZW1pb2xvZ2ljYWxtb2RlbGluZy9zZWlybWF0aC5odG1sIiAvPgorCis8L3RvYz4KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvdG9jZ2V0dGluZ3N0YXJ0ZWQueG1sIGIvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy90b2NnZXR0aW5nc3RhcnRlZC54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGIwNmU4YgotLS0gL2Rldi9udWxsCisrKyBiL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvdG9jZ2V0dGluZ3N0YXJ0ZWQueG1sCkBAIC0wLDAgKzEsOCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzw/TkxTIFRZUEU9Im9yZy5lY2xpcHNlLmhlbHAudG9jIj8+CisKKzx0b2MgbGFiZWw9IkdldHRpbmcgU3RhcnRlZCIgbGlua190bz0idG9jLnhtbCNnZXR0aW5nc3RhcnRlZCI+CisJPHRvcGljIGxhYmVsPSJRdWljayBTdGFydCIKKwkJaHJlZj0iaGVscC9odG1sL2dldHRpbmdzdGFydGVkL3F1aWNrc3RhcnQuaHRtbCI+CisJPC90b3BpYz4KKzwvdG9jPgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy90b2NpbnRlcmZhY2UueG1sIGIvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy90b2NpbnRlcmZhY2UueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIyMzk5MmMKLS0tIC9kZXYvbnVsbAorKysgYi9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL3RvY2ludGVyZmFjZS54bWwKQEAgLTAsMCArMSwxNDEgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8P05MUyBUWVBFPSJvcmcuZWNsaXBzZS5oZWxwLnRvYyI/PgorCis8dG9jIGxhYmVsPSJJbnRlcmZhY2UiIGxpbmtfdG89InRvYy54bWwjaW50ZXJmYWNlIj4KKworCTx0b3BpYyBsYWJlbD0iT3ZlcnZpZXciCisJCWhyZWY9ImhlbHAvaHRtbC9pbnRlcmZhY2UvaW50ZXJmYWNlb3ZlcnZpZXcuaHRtbCIgLz4KKworCTx0b3BpYyBsYWJlbD0iUGVyc3BlY3RpdmVzIgorCQlocmVmPSJoZWxwL2h0bWwvaW50ZXJmYWNlL3BlcnNwZWN0aXZlcy9wZXJzcGVjdGl2ZXNvdmVydmlldy5odG1sIj4KKwkJPHRvcGljIGxhYmVsPSJBbmFseXNpcyIKKwkJCWhyZWY9ImhlbHAvaHRtbC9pbnRlcmZhY2UvcGVyc3BlY3RpdmVzL2FuYWx5c2lzLmh0bWwiIC8+CisJCTx0b3BpYyBsYWJlbD0iRGVzaWduZXIiCisJCQlocmVmPSJoZWxwL2h0bWwvaW50ZXJmYWNlL3BlcnNwZWN0aXZlcy9kZXNpZ25lci5odG1sIiAvPgorCQk8dG9waWMgbGFiZWw9IlNpbXVsYXRpb24iCisJCQlocmVmPSJoZWxwL2h0bWwvaW50ZXJmYWNlL3BlcnNwZWN0aXZlcy9zaW11bGF0aW9uLmh0bWwiIC8+CisJPC90b3BpYz4KKworCTx0b3BpYyBsYWJlbD0iVmlld3MiCisJCWhyZWY9ImhlbHAvaHRtbC9pbnRlcmZhY2Uvdmlld3Mvdmlld3NvdmVydmlldy5odG1sIj4KKwkJPHRvcGljIGxhYmVsPSJBY3RpdmUgU2ltdWxhdGlvbnMgVmlldyIKKwkJCWhyZWY9ImhlbHAvaHRtbC9pbnRlcmZhY2Uvdmlld3MvYWN0aXZlc2ltdWxhdGlvbnN2aWV3Lmh0bWwiIC8+CisJCTx0b3BpYyBsYWJlbD0iQ29udHJvbCBWaWV3IgorCQkJaHJlZj0iaGVscC9odG1sL2ludGVyZmFjZS92aWV3cy9jb250cm9sdmlldy5odG1sIiAvPgorICAJCTx0b3BpYyBsYWJlbD0iQ1NWIExvZ2dlciBWaWV3IiAKKyAgCQkJaHJlZj0iaGVscC9odG1sL2ludGVyZmFjZS92aWV3cy9jc3Zsb2dnZXJ2aWV3Lmh0bWwiIC8+CisJCTx0b3BpYyBsYWJlbD0iRGVjb3JhdG9ycyBWaWV3IgorCQkJaHJlZj0iaGVscC9odG1sL2ludGVyZmFjZS92aWV3cy9kZWNvcmF0b3Jzdmlldy5odG1sIiAvPgorCQk8dG9waWMgbGFiZWw9IkRpc2Vhc2VzIFZpZXciCisJCQlocmVmPSJoZWxwL2h0bWwvaW50ZXJmYWNlL3ZpZXdzL2Rpc2Vhc2Vzdmlldy5odG1sIiAvPgorCQkJPHRvcGljIGxhYmVsPSJFcGlkZW1pYyBWaWV3IgorCQkJaHJlZj0iaGVscC9odG1sL2ludGVyZmFjZS92aWV3cy9lcGlkZW1pY3ZpZXcuaHRtbCIgLz4KKwkJPHRvcGljIGxhYmVsPSJFcnJvciBMb2cgVmlldyIKKwkJCWhyZWY9ImhlbHAvaHRtbC9pbnRlcmZhY2Uvdmlld3MvZXJyb3JfbG9nLmh0bWwiIC8+CisJCQk8dG9waWMgbGFiZWw9IkVzdGltYXRvciBWaWV3IgorCQkJaHJlZj0iaGVscC9odG1sL2ludGVyZmFjZS92aWV3cy9lc3RpbWF0b3J2aWV3Lmh0bWwiIC8+CisJCTx0b3BpYyBsYWJlbD0iR29vZ2xlIEVhcnRoIFZpZXciCisJCQlocmVmPSJoZWxwL2h0bWwvaW50ZXJmYWNlL3ZpZXdzL2dlLmh0bWwiIC8+CisJCTx0b3BpYyBsYWJlbD0iR3JhcGhzIFZpZXciCisJCQlocmVmPSJoZWxwL2h0bWwvaW50ZXJmYWNlL3ZpZXdzL2dyYXBoc3ZpZXcuaHRtbCIgLz4KKwkJCTx0b3BpYyBsYWJlbD0iTHlhcHVub3YgVmlldyIKKwkJCWhyZWY9ImhlbHAvaHRtbC9pbnRlcmZhY2Uvdmlld3MvbHlhcHVub3Z2aWV3Lmh0bWwiIC8+CisJCTx0b3BpYyBsYWJlbD0iTWFwIFZpZXciCisJCQlocmVmPSJoZWxwL2h0bWwvaW50ZXJmYWNlL3ZpZXdzL21hcHZpZXcuaHRtbCIgLz4KKwkJPHRvcGljIGxhYmVsPSJNb2RlbHMgVmlldyIKKwkJCWhyZWY9ImhlbHAvaHRtbC9pbnRlcmZhY2Uvdmlld3MvbW9kZWxzdmlldy5odG1sIiAvPgorICA8dG9waWMgaHJlZj0iaGVscC9odG1sL2ludGVyZmFjZS92aWV3cy9wcm9qZWN0dmlldy5odG1sIiBsYWJlbD0iUHJvamVjdCBFeHBsb3JlciI+CisgIDwvdG9waWM+CisgIDx0b3BpYyBocmVmPSJoZWxwL2h0bWwvaW50ZXJmYWNlL3ZpZXdzL3Byb3BlcnRpZXN2aWV3Lmh0bWwiIGxhYmVsPSJQcm9wZXJ0aWVzIFZpZXciPgorICA8L3RvcGljPgorICA8dG9waWMgaHJlZj0iaGVscC9odG1sL2ludGVyZmFjZS92aWV3cy9yZXBvcnR2aWV3Lmh0bWwiIGxhYmVsPSJSZXBvcnQgVmlldyI+CisgIDwvdG9waWM+CisJCQk8dG9waWMgaHJlZj0iaGVscC9odG1sL2ludGVyZmFjZS92aWV3cy9zY2VuYXJpb2NvbXBhcmlzb252aWV3Lmh0bWwiIGxhYmVsPSJTY2VuYXJpbyBDb21wYXJpc29uIFZpZXciPgorICAgPC90b3BpYz4KKwkJPHRvcGljIGxhYmVsPSJTY2VuYXJpb3MgVmlldyIKKwkJCWhyZWY9ImhlbHAvaHRtbC9pbnRlcmZhY2Uvdmlld3Mvc2NlbmFyaW9zdmlldy5odG1sIiAvPgorCQk8dG9waWMgbGFiZWw9IlNlcXVlbmNlcnMgVmlldyIKKwkJCWhyZWY9ImhlbHAvaHRtbC9pbnRlcmZhY2Uvdmlld3Mvc2VxdWVuY2Vyc3ZpZXcuaHRtbCIgLz4KKyAgPHRvcGljIGhyZWY9ImhlbHAvaHRtbC9pbnRlcmZhY2Uvdmlld3MvdGFza3N2aWV3Lmh0bWwiIGxhYmVsPSJUYXNrcyBWaWV3Ij4KKyAgPC90b3BpYz4KKwk8L3RvcGljPgorCisJPHRvcGljIGxhYmVsPSJFZGl0b3JzIgorCQlocmVmPSJoZWxwL2h0bWwvaW50ZXJmYWNlL2VkaXRvcnMvZWRpdG9yc292ZXJ2aWV3Lmh0bWwiPgorICA8dG9waWMgaHJlZj0iaGVscC9odG1sL2ludGVyZmFjZS9lZGl0b3JzL2V4cGVyaW1lbnRlZGl0b3IuaHRtbCIgbGFiZWw9IkV4cGVyaW1lbnQgRWRpdG9yIj4KKyAgPC90b3BpYz4KKwkJPHRvcGljIGxhYmVsPSJHcmFwaCBFZGl0b3IiCisJCQlocmVmPSJoZWxwL2h0bWwvaW50ZXJmYWNlL2VkaXRvcnMvZ3JhcGhlZGl0b3IuaHRtbCIgLz4KKwkJPHRvcGljIGxhYmVsPSJNb2RlbCBFZGl0b3IiCisJCQlocmVmPSJoZWxwL2h0bWwvaW50ZXJmYWNlL2VkaXRvcnMvbW9kZWxlZGl0b3IuaHRtbCIgLz4KKyAgPHRvcGljIGhyZWY9ImhlbHAvaHRtbC9pbnRlcmZhY2UvZWRpdG9ycy9tb2RpZmllcmVkaXRvci5odG1sIiBsYWJlbD0iTW9kaWZpZXIgRWRpdG9yIj4KKyAgPC90b3BpYz4KKyAgPHRvcGljIGhyZWY9ImhlbHAvaHRtbC9pbnRlcmZhY2UvZWRpdG9ycy9wcmVkaWNhdGVlZGl0b3IuaHRtbCIgbGFiZWw9IlByZWRpY2F0ZSBFZGl0b3IiPgorICA8L3RvcGljPgorCQk8dG9waWMgbGFiZWw9IlNjZW5hcmlvIEVkaXRvciIKKwkJCWhyZWY9ImhlbHAvaHRtbC9pbnRlcmZhY2UvZWRpdG9ycy9zY2VuYXJpb2VkaXRvci5odG1sIiAvPgorICA8dG9waWMgaHJlZj0iaGVscC9odG1sL2ludGVyZmFjZS9lZGl0b3JzL3NlcXVlbmNlcmVkaXRvci5odG1sIiBsYWJlbD0iU2VxdWVuY2VyIEVkaXRvciI+CisgIDwvdG9waWM+CisgIDx0b3BpYyBocmVmPSJoZWxwL2h0bWwvaW50ZXJmYWNlL2VkaXRvcnMvdHJpZ2dlcmVkaXRvci5odG1sIiBsYWJlbD0iVHJpZ2dlciBFZGl0b3IiPgorICA8L3RvcGljPgorCTwvdG9waWM+CisKKwk8dG9waWMgbGFiZWw9IldpemFyZHMiCisJCWhyZWY9ImhlbHAvaHRtbC9pbnRlcmZhY2Uvd2l6YXJkcy93aXphcmRzb3ZlcnZpZXcuaHRtbCI+CisJCTx0b3BpYyBsYWJlbD0iTmV3IERpc2Vhc2UgV2l6YXJkIgorCQkJaHJlZj0iaGVscC9odG1sL2ludGVyZmFjZS93aXphcmRzL2Rpc2Vhc2V3aXphcmQuaHRtbCIgLz4KKyAgPHRvcGljIGhyZWY9ImhlbHAvaHRtbC9pbnRlcmZhY2Uvd2l6YXJkcy9leHBlcmltZW50d2l6YXJkLmh0bWwiIGxhYmVsPSJOZXcgRXhwZXJpbWVudCBXaXphcmQiPgorICA8L3RvcGljPgorCQk8dG9waWMgaHJlZj0iaGVscC9odG1sL2ludGVyZmFjZS93aXphcmRzL2dyYXBod2l6YXJkLmh0bWwiIGxhYmVsPSJOZXcgR3JhcGggV2l6YXJkIj4KKyAgPC90b3BpYz4KKyAgPHRvcGljIGhyZWY9ImhlbHAvaHRtbC9pbnRlcmZhY2Uvd2l6YXJkcy9pbmZlY3RvcndpemFyZC5odG1sIiBsYWJlbD0iTmV3IEluZmVjdG9yL0lub2N1bGF0b3IgV2l6YXJkIj4KKyAgPC90b3BpYz4KKwkJPHRvcGljIGhyZWY9ImhlbHAvaHRtbC9pbnRlcmZhY2Uvd2l6YXJkcy9tb2RlbHdpemFyZC5odG1sIiBsYWJlbD0iTmV3IE1vZGVsIFdpemFyZCI+CisgIDwvdG9waWM+CisgIDx0b3BpYyBocmVmPSJoZWxwL2h0bWwvaW50ZXJmYWNlL3dpemFyZHMvbW9kaWZpZXJ3aXphcmQuaHRtbCIgbGFiZWw9Ik5ldyBNb2RpZmllciBXaXphcmQiPgorICA8L3RvcGljPgorICA8dG9waWMgaHJlZj0iaGVscC9odG1sL2ludGVyZmFjZS93aXphcmRzL3BvcHVsYXRpb253aXphcmQuaHRtbCIgbGFiZWw9Ik5ldyBQb3B1bGF0aW9uIFdpemFyZCI+CisgIDwvdG9waWM+CisgIDx0b3BpYyBocmVmPSJoZWxwL2h0bWwvaW50ZXJmYWNlL3dpemFyZHMvcG9wdWxhdGlvbmluaXRpYWxpemVyd2l6YXJkLmh0bWwiIGxhYmVsPSJOZXcgUG9wdWxhdGlvbiBJbml0aWFsaXplciBXaXphcmQiPgorICA8L3RvcGljPgorICA8dG9waWMgaHJlZj0iaGVscC9odG1sL2ludGVyZmFjZS93aXphcmRzL3ByZWRpY2F0ZXdpemFyZC5odG1sIiBsYWJlbD0iTmV3IFByZWRpY2F0ZSBXaXphcmQiPgorICA8L3RvcGljPgorCQk8dG9waWMgbGFiZWw9Ik5ldyBSZWFsLVRpbWUgU2VxdWVuY2VyIFdpemFyZCIKKwkJCWhyZWY9ImhlbHAvaHRtbC9pbnRlcmZhY2Uvd2l6YXJkcy9yZWFsdGltZXNlcXVlbmNlcndpemFyZC5odG1sIiAvPgorCQk8dG9waWMgbGFiZWw9Ik5ldyBTY2VuYXJpbyBXaXphcmQiCisJCQlocmVmPSJoZWxwL2h0bWwvaW50ZXJmYWNlL3dpemFyZHMvc2NlbmFyaW93aXphcmQuaHRtbCIgLz4KKwkJPHRvcGljIGxhYmVsPSJOZXcgU2VxdWVudGlhbCBTZXF1ZW5jZXIgV2l6YXJkIgorCQkJaHJlZj0iaGVscC9odG1sL2ludGVyZmFjZS93aXphcmRzL3NlcXVlbnRpYWxzZXF1ZW5jZXJ3aXphcmQuaHRtbCIgLz4KKwkJPHRvcGljIGxhYmVsPSJOZXcgU1RFTSBQcm9qZWN0IFdpemFyZCIKKwkJCWhyZWY9ImhlbHAvaHRtbC9pbnRlcmZhY2Uvd2l6YXJkcy9zdGVtcHJvamVjdHdpemFyZC5odG1sIiAvPgorICA8dG9waWMgaHJlZj0iaGVscC9odG1sL2ludGVyZmFjZS93aXphcmRzL3RyaWdnZXJ3aXphcmQuaHRtbCIgbGFiZWw9Ik5ldyBUcmlnZ2VyIFdpemFyZCI+CisgIDwvdG9waWM+CisgIDx0b3BpYyBocmVmPSJoZWxwL2h0bWwvaW50ZXJmYWNlL3dpemFyZHMvYXV0b2V4cHdpemFyZC5odG1sIiBsYWJlbD0iTmV3IEF1dG9tYXRpYyBFeHBlcmltZW50IFdpemFyZCI+CisgIDwvdG9waWM+CisJPC90b3BpYz4KKworCTx0b3BpYyBsYWJlbD0iUHJlZmVyZW5jZXMiCisJCWhyZWY9ImhlbHAvaHRtbC9pbnRlcmZhY2UvcHJlZmVyZW5jZXMvcHJlZmVyZW5jZXNvdmVydmlldy5odG1sIj4KKyAgPHRvcGljIGhyZWY9ImhlbHAvaHRtbC9pbnRlcmZhY2UvcHJlZmVyZW5jZXMvcHJlZmVyZW5jZXNsb2dnaW5nLmh0bWwiIGxhYmVsPSJMb2dnaW5nIj4KKyAgPC90b3BpYz4KKworCQk8dG9waWMgbGFiZWw9IlNpbXVsYXRpb24gTWFuYWdlbWVudCIKKwkJCWhyZWY9ImhlbHAvaHRtbC9pbnRlcmZhY2UvcHJlZmVyZW5jZXMvcHJlZmVyZW5jZXNzaW1tYW5hZ2VtZW50Lmh0bWwiIC8+CisgIDx0b3BpYyBocmVmPSJoZWxwL2h0bWwvaW50ZXJmYWNlL3ByZWZlcmVuY2VzL3ByZWZlcmVuY2Vzc29sdmVyLmh0bWwiIGxhYmVsPSJTb2x2ZXIiPgorICA8L3RvcGljPgorCisJCTx0b3BpYyBsYWJlbD0iVmlzdWFsaXphdGlvbiIKKwkJCWhyZWY9ImhlbHAvaHRtbC9pbnRlcmZhY2UvcHJlZmVyZW5jZXMvcHJlZmVyZW5jZXN2aXN1YWxpemF0aW9udG9wbGV2ZWwuaHRtbCI+CisJCQk8dG9waWMgbGFiZWw9Ikdvb2dsZSBFYXJ0aCIKKwkJCQlocmVmPSJoZWxwL2h0bWwvaW50ZXJmYWNlL3ByZWZlcmVuY2VzL3ByZWZlcmVuY2VzZ2V0b3BsZXZlbC5odG1sIj4KKwkJCQk8dG9waWMgbGFiZWw9IkFkdmFuY2VkIgorCQkJCQlocmVmPSJoZWxwL2h0bWwvaW50ZXJmYWNlL3ByZWZlcmVuY2VzL3ByZWZlcmVuY2VzZ2VhZHZhbmNlZC5odG1sIiAvPgorCQkJPC90b3BpYz4KKwkJCTx0b3BpYyBsYWJlbD0iTWFwIENvbG9ycyIKKwkJCQlocmVmPSJoZWxwL2h0bWwvaW50ZXJmYWNlL3ByZWZlcmVuY2VzL3ByZWZlcmVuY2VzbWFwdmlldy5odG1sIiAvPgorICAgPHRvcGljIGhyZWY9ImhlbHAvaHRtbC9pbnRlcmZhY2UvcHJlZmVyZW5jZXMvcG9wdWxhdGlvbm1vZGVsaW5nLmh0bWwiIGxhYmVsPSJQb3B1bGF0aW9uIE1vZGVsaW5nIj4KKyAgIDwvdG9waWM+CisJCTwvdG9waWM+CisKKwk8L3RvcGljPgorPC90b2M+CmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL3RvY3JlZmVyZW5jZS54bWwgYi9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL3RvY3JlZmVyZW5jZS54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjhhYzk1YgotLS0gL2Rldi9udWxsCisrKyBiL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvdG9jcmVmZXJlbmNlLnhtbApAQCAtMCwwICsxLDggQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8P05MUyBUWVBFPSJvcmcuZWNsaXBzZS5oZWxwLnRvYyI/PgorCis8dG9jIGxhYmVsPSJSZWZlcmVuY2UgTWF0ZXJpYWwiIGxpbmtfdG89InRvYy54bWwjcmVmZXJlbmNlIj4KKwk8dG9waWMgbGFiZWw9IlNURU0gcmVmZXJlbmNlIGluZm9ybWF0aW9uIgorCQlocmVmPSJoZWxwL2h0bWwvcmVmZXJlbmNlL3JlZmVyZW5jZXMuaHRtbCI+CisJPC90b3BpYz4KKzwvdG9jPgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy90b2N0dXRvcmlhbHMueG1sIGIvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy90b2N0dXRvcmlhbHMueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJhZGY3NGIKLS0tIC9kZXYvbnVsbAorKysgYi9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL3RvY3R1dG9yaWFscy54bWwKQEAgLTAsMCArMSwyNCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzw/TkxTIFRZUEU9Im9yZy5lY2xpcHNlLmhlbHAudG9jIj8+CisKKzx0b2MgbGFiZWw9IlR1dG9yaWFscyAoaW50ZXJuZXQgYWNjZXNzIHJlcXVpcmVkKSIgbGlua190bz0idG9jLnhtbCN0dXRvcmlhbHMiPgorCTx0b3BpYyBsYWJlbD0iQ3JlYXRpbmcgYSBTY2VuYXJpbyIKKwkJaHJlZj0iaHR0cDovL3dpa2kuZWNsaXBzZS5vcmcvQ3JlYXRpbmdfYV9TVEVNX1NjZW5hcmlvIiAvPgorICAgPHRvcGljIGhyZWY9Imh0dHA6Ly93aWtpLmVjbGlwc2Uub3JnL0JhdGNoX01vZGVfJTI4UnVubmluZ19FeHBlcmltZW50cyUyOSIgbGFiZWw9IkNyZWF0aW5nIGFuZCBydW5uaW5nIEV4cGVyaW1lbnRzIj4KKyAgIDwvdG9waWM+CisgICA8dG9waWMgaHJlZj0iaHR0cDovL3dpa2kuZWNsaXBzZS5vcmcvSW52b2tpbmdfbW9kaWZpZXJzX3VzaW5nX3RyaWdnZXJzX2FuZF9wcmVkaWNhdGVzLiIgbGFiZWw9Ik1vZGlmeWluZyBzY2VuYXJpb3MgdXNpbmcgdHJpZ2dlcnMiPgorICAgPC90b3BpYz4KKwk8dG9waWMgbGFiZWw9IkFuYWx5c2lzIj4KKwkJPHRvcGljIGxhYmVsPSJBbmFseXNpcyBvdmVydmlldyIKKwkJaHJlZj0iaHR0cDovL3dpa2kuZWNsaXBzZS5vcmcvQW5hbHlzaXMiIC8+CisJCTx0b3BpYyBsYWJlbD0iQW5hbHl6aW5nIGFuIEVwaWRlbWljIgorCQlocmVmPSJodHRwOi8vd2lraS5lY2xpcHNlLm9yZy9FcGlkZW1pY19WaWV3IiAvPgorCQk8dG9waWMgbGFiZWw9IkVzdGltYXRpbmcgTW9kZWwgUGFyYW1ldGVycyIKKwkJaHJlZj0iaHR0cDovL3dpa2kuZWNsaXBzZS5vcmcvRXN0aW1hdGluZ19Nb2RlbF9QYXJhbWV0ZXJzX2Zyb21fRXh0ZXJuYWxfRGF0YSIgLz4KKwkJPHRvcGljIGxhYmVsPSJMeWFwdW5vdiAoUGhhc2UgU3BhY2UpIEFuYWx5c2lzIgorCQlocmVmPSJodHRwOi8vd2lraS5lY2xpcHNlLm9yZy9MeWFwdW5vdl9BbmFseXNpcyIgLz4KKwkJPHRvcGljIGxhYmVsPSJDb21wYXJpbmcgU2NlbmFyaW9zIGFuZCBFcGlkZW1pY3MiCisJCWhyZWY9Imh0dHA6Ly93aWtpLmVjbGlwc2Uub3JnL1JNU19Db21wYXJpc29uX2JldHdlZW5fZGF0YV9zZXRzIiAvPgorIAk8L3RvcGljPgorPC90b2M+CisKZGlmZiAtLWdpdCBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuZmVhdHVyZS8ucHJvamVjdCBiL2ZlYXR1cmVzL29yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuZmVhdHVyZS8ucHJvamVjdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40OWIzNjlhCi0tLSAvZGV2L251bGwKKysrIGIvZmVhdHVyZXMvb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5mZWF0dXJlLy5wcm9qZWN0CkBAIC0wLDAgKzEsMTcgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8cHJvamVjdERlc2NyaXB0aW9uPgorCTxuYW1lPm9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuZmVhdHVyZTwvbmFtZT4KKwk8Y29tbWVudD48L2NvbW1lbnQ+CisJPHByb2plY3RzPgorCTwvcHJvamVjdHM+CisJPGJ1aWxkU3BlYz4KKwkJPGJ1aWxkQ29tbWFuZD4KKwkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5GZWF0dXJlQnVpbGRlcjwvbmFtZT4KKwkJCTxhcmd1bWVudHM+CisJCQk8L2FyZ3VtZW50cz4KKwkJPC9idWlsZENvbW1hbmQ+CisJPC9idWlsZFNwZWM+CisJPG5hdHVyZXM+CisJCTxuYXR1cmU+b3JnLmVjbGlwc2UucGRlLkZlYXR1cmVOYXR1cmU8L25hdHVyZT4KKwk8L25hdHVyZXM+Cis8L3Byb2plY3REZXNjcmlwdGlvbj4KZGlmZiAtLWdpdCBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuZmVhdHVyZS9idWlsZC5wcm9wZXJ0aWVzIGIvZmVhdHVyZXMvb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5mZWF0dXJlL2J1aWxkLnByb3BlcnRpZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjc0YWY4NgotLS0gL2Rldi9udWxsCisrKyBiL2ZlYXR1cmVzL29yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuZmVhdHVyZS9idWlsZC5wcm9wZXJ0aWVzCkBAIC0wLDAgKzEsNCBAQAorYmluLmluY2x1ZGVzID0gZmVhdHVyZS54bWwsXAorICAgICAgICAgICAgICAgZmVhdHVyZS5wcm9wZXJ0aWVzLFwKKyAgICAgICAgICAgICAgIGVwbC12MTAuaHRtbCxcCisgICAgICAgICAgICAgICBsaWNlbnNlLmh0bWwKZGlmZiAtLWdpdCBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuZmVhdHVyZS9lcGwtdjEwLmh0bWwgYi9mZWF0dXJlcy9vcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmZlYXR1cmUvZXBsLXYxMC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVkNGIxOTYKLS0tIC9kZXYvbnVsbAorKysgYi9mZWF0dXJlcy9vcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmZlYXR1cmUvZXBsLXYxMC5odG1sCkBAIC0wLDAgKzEsMzI4IEBACis8aHRtbCB4bWxuczpvPSJ1cm46c2NoZW1hcy1taWNyb3NvZnQtY29tOm9mZmljZTpvZmZpY2UiCit4bWxuczp3PSJ1cm46c2NoZW1hcy1taWNyb3NvZnQtY29tOm9mZmljZTp3b3JkIgoreG1sbnM9Imh0dHA6Ly93d3cudzMub3JnL1RSL1JFQy1odG1sNDAiPgorCis8aGVhZD4KKzxtZXRhIGh0dHAtZXF1aXY9Q29udGVudC1UeXBlIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD13aW5kb3dzLTEyNTIiPgorPG1ldGEgbmFtZT1Qcm9nSWQgY29udGVudD1Xb3JkLkRvY3VtZW50PgorPG1ldGEgbmFtZT1HZW5lcmF0b3IgY29udGVudD0iTWljcm9zb2Z0IFdvcmQgOSI+Cis8bWV0YSBuYW1lPU9yaWdpbmF0b3IgY29udGVudD0iTWljcm9zb2Z0IFdvcmQgOSI+Cis8bGluayByZWw9RmlsZS1MaXN0CitocmVmPSIuL0VjbGlwc2UlMjBFUEwlMjAyMDAzXzExXzEwJTIwRmluYWxfZmlsZXMvZmlsZWxpc3QueG1sIj4KKzx0aXRsZT5FY2xpcHNlIFB1YmxpYyBMaWNlbnNlIC0gVmVyc2lvbiAxLjA8L3RpdGxlPgorPCEtLVtpZiBndGUgbXNvIDldPjx4bWw+CisgPG86RG9jdW1lbnRQcm9wZXJ0aWVzPgorICA8bzpSZXZpc2lvbj4yPC9vOlJldmlzaW9uPgorICA8bzpUb3RhbFRpbWU+MzwvbzpUb3RhbFRpbWU+CisgIDxvOkNyZWF0ZWQ+MjAwNC0wMy0wNVQyMzowMzowMFo8L286Q3JlYXRlZD4KKyAgPG86TGFzdFNhdmVkPjIwMDQtMDMtMDVUMjM6MDM6MDBaPC9vOkxhc3RTYXZlZD4KKyAgPG86UGFnZXM+NDwvbzpQYWdlcz4KKyAgPG86V29yZHM+MTYyNjwvbzpXb3Jkcz4KKyAgPG86Q2hhcmFjdGVycz45MjcwPC9vOkNoYXJhY3RlcnM+CisgICA8bzpMaW5lcz43NzwvbzpMaW5lcz4KKyAgPG86UGFyYWdyYXBocz4xODwvbzpQYXJhZ3JhcGhzPgorICA8bzpDaGFyYWN0ZXJzV2l0aFNwYWNlcz4xMTM4NDwvbzpDaGFyYWN0ZXJzV2l0aFNwYWNlcz4KKyAgPG86VmVyc2lvbj45LjQ0MDI8L286VmVyc2lvbj4KKyA8L286RG9jdW1lbnRQcm9wZXJ0aWVzPgorPC94bWw+PCFbZW5kaWZdLS0+PCEtLVtpZiBndGUgbXNvIDldPjx4bWw+CisgPHc6V29yZERvY3VtZW50PgorICA8dzpUcmFja1JldmlzaW9ucy8+CisgPC93OldvcmREb2N1bWVudD4KKzwveG1sPjwhW2VuZGlmXS0tPgorPHN0eWxlPgorPCEtLQorIC8qIEZvbnQgRGVmaW5pdGlvbnMgKi8KK0Bmb250LWZhY2UKKwl7Zm9udC1mYW1pbHk6VGFob21hOworCXBhbm9zZS0xOjIgMTEgNiA0IDMgNSA0IDQgMiA0OworCW1zby1mb250LWNoYXJzZXQ6MDsKKwltc28tZ2VuZXJpYy1mb250LWZhbWlseTpzd2lzczsKKwltc28tZm9udC1waXRjaDp2YXJpYWJsZTsKKwltc28tZm9udC1zaWduYXR1cmU6NTUzNjc5NDk1IC0yMTQ3NDgzNjQ4IDggMCA2NjA0NyAwO30KKyAvKiBTdHlsZSBEZWZpbml0aW9ucyAqLworcC5Nc29Ob3JtYWwsIGxpLk1zb05vcm1hbCwgZGl2Lk1zb05vcm1hbAorCXttc28tc3R5bGUtcGFyZW50OiIiOworCW1hcmdpbjowaW47CisJbWFyZ2luLWJvdHRvbTouMDAwMXB0OworCW1zby1wYWdpbmF0aW9uOndpZG93LW9ycGhhbjsKKwlmb250LXNpemU6MTIuMHB0OworCWZvbnQtZmFtaWx5OiJUaW1lcyBOZXcgUm9tYW4iOworCW1zby1mYXJlYXN0LWZvbnQtZmFtaWx5OiJUaW1lcyBOZXcgUm9tYW4iO30KK3AKKwl7bWFyZ2luLXJpZ2h0OjBpbjsKKwltc28tbWFyZ2luLXRvcC1hbHQ6YXV0bzsKKwltc28tbWFyZ2luLWJvdHRvbS1hbHQ6YXV0bzsKKwltYXJnaW4tbGVmdDowaW47CisJbXNvLXBhZ2luYXRpb246d2lkb3ctb3JwaGFuOworCWZvbnQtc2l6ZToxMi4wcHQ7CisJZm9udC1mYW1pbHk6IlRpbWVzIE5ldyBSb21hbiI7CisJbXNvLWZhcmVhc3QtZm9udC1mYW1pbHk6IlRpbWVzIE5ldyBSb21hbiI7fQorcC5CYWxsb29uVGV4dCwgbGkuQmFsbG9vblRleHQsIGRpdi5CYWxsb29uVGV4dAorCXttc28tc3R5bGUtbmFtZToiQmFsbG9vbiBUZXh0IjsKKwltYXJnaW46MGluOworCW1hcmdpbi1ib3R0b206LjAwMDFwdDsKKwltc28tcGFnaW5hdGlvbjp3aWRvdy1vcnBoYW47CisJZm9udC1zaXplOjguMHB0OworCWZvbnQtZmFtaWx5OlRhaG9tYTsKKwltc28tZmFyZWFzdC1mb250LWZhbWlseToiVGltZXMgTmV3IFJvbWFuIjt9CitAcGFnZSBTZWN0aW9uMQorCXtzaXplOjguNWluIDExLjBpbjsKKwltYXJnaW46MS4waW4gMS4yNWluIDEuMGluIDEuMjVpbjsKKwltc28taGVhZGVyLW1hcmdpbjouNWluOworCW1zby1mb290ZXItbWFyZ2luOi41aW47CisJbXNvLXBhcGVyLXNvdXJjZTowO30KK2Rpdi5TZWN0aW9uMQorCXtwYWdlOlNlY3Rpb24xO30KKy0tPgorPC9zdHlsZT4KKzwvaGVhZD4KKworPGJvZHkgbGFuZz1FTi1VUyBzdHlsZT0ndGFiLWludGVydmFsOi41aW4nPgorCis8ZGl2IGNsYXNzPVNlY3Rpb24xPgorCis8cCBhbGlnbj1jZW50ZXIgc3R5bGU9J3RleHQtYWxpZ246Y2VudGVyJz48Yj5FY2xpcHNlIFB1YmxpYyBMaWNlbnNlIC0gdiAxLjA8L2I+Cis8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5USEUgQUNDT01QQU5ZSU5HIFBST0dSQU0gSVMgUFJPVklERUQgVU5ERVIKK1RIRSBURVJNUyBPRiBUSElTIEVDTElQU0UgUFVCTElDIExJQ0VOU0UgKCZxdW90O0FHUkVFTUVOVCZxdW90OykuIEFOWSBVU0UsCitSRVBST0RVQ1RJT04gT1IgRElTVFJJQlVUSU9OIE9GIFRIRSBQUk9HUkFNIENPTlNUSVRVVEVTIFJFQ0lQSUVOVCdTIEFDQ0VQVEFOQ0UKK09GIFRISVMgQUdSRUVNRU5ULjwvc3Bhbj4gPC9wPgorCis8cD48Yj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+MS4gREVGSU5JVElPTlM8L3NwYW4+PC9iPiA8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4mcXVvdDtDb250cmlidXRpb24mcXVvdDsgbWVhbnM6PC9zcGFuPiA8L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmEpCitpbiB0aGUgY2FzZSBvZiB0aGUgaW5pdGlhbCBDb250cmlidXRvciwgdGhlIGluaXRpYWwgY29kZSBhbmQgZG9jdW1lbnRhdGlvbgorZGlzdHJpYnV0ZWQgdW5kZXIgdGhpcyBBZ3JlZW1lbnQsIGFuZDxiciBjbGVhcj1sZWZ0PgorYikgaW4gdGhlIGNhc2Ugb2YgZWFjaCBzdWJzZXF1ZW50IENvbnRyaWJ1dG9yOjwvc3Bhbj48L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmkpCitjaGFuZ2VzIHRvIHRoZSBQcm9ncmFtLCBhbmQ8L3NwYW4+PC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5paSkKK2FkZGl0aW9ucyB0byB0aGUgUHJvZ3JhbTs8L3NwYW4+PC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz53aGVyZQorc3VjaCBjaGFuZ2VzIGFuZC9vciBhZGRpdGlvbnMgdG8gdGhlIFByb2dyYW0gb3JpZ2luYXRlIGZyb20gYW5kIGFyZSBkaXN0cmlidXRlZAorYnkgdGhhdCBwYXJ0aWN1bGFyIENvbnRyaWJ1dG9yLiBBIENvbnRyaWJ1dGlvbiAnb3JpZ2luYXRlcycgZnJvbSBhIENvbnRyaWJ1dG9yCitpZiBpdCB3YXMgYWRkZWQgdG8gdGhlIFByb2dyYW0gYnkgc3VjaCBDb250cmlidXRvciBpdHNlbGYgb3IgYW55b25lIGFjdGluZyBvbgorc3VjaCBDb250cmlidXRvcidzIGJlaGFsZi4gQ29udHJpYnV0aW9ucyBkbyBub3QgaW5jbHVkZSBhZGRpdGlvbnMgdG8gdGhlCitQcm9ncmFtIHdoaWNoOiAoaSkgYXJlIHNlcGFyYXRlIG1vZHVsZXMgb2Ygc29mdHdhcmUgZGlzdHJpYnV0ZWQgaW4gY29uanVuY3Rpb24KK3dpdGggdGhlIFByb2dyYW0gdW5kZXIgdGhlaXIgb3duIGxpY2Vuc2UgYWdyZWVtZW50LCBhbmQgKGlpKSBhcmUgbm90IGRlcml2YXRpdmUKK3dvcmtzIG9mIHRoZSBQcm9ncmFtLiA8L3NwYW4+PC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+JnF1b3Q7Q29udHJpYnV0b3ImcXVvdDsgbWVhbnMgYW55IHBlcnNvbiBvcgorZW50aXR5IHRoYXQgZGlzdHJpYnV0ZXMgdGhlIFByb2dyYW0uPC9zcGFuPiA8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4mcXVvdDtMaWNlbnNlZCBQYXRlbnRzICZxdW90OyBtZWFuIHBhdGVudAorY2xhaW1zIGxpY2Vuc2FibGUgYnkgYSBDb250cmlidXRvciB3aGljaCBhcmUgbmVjZXNzYXJpbHkgaW5mcmluZ2VkIGJ5IHRoZSB1c2UKK29yIHNhbGUgb2YgaXRzIENvbnRyaWJ1dGlvbiBhbG9uZSBvciB3aGVuIGNvbWJpbmVkIHdpdGggdGhlIFByb2dyYW0uIDwvc3Bhbj48L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4mcXVvdDtQcm9ncmFtJnF1b3Q7IG1lYW5zIHRoZSBDb250cmlidXRpb25zCitkaXN0cmlidXRlZCBpbiBhY2NvcmRhbmNlIHdpdGggdGhpcyBBZ3JlZW1lbnQuPC9zcGFuPiA8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4mcXVvdDtSZWNpcGllbnQmcXVvdDsgbWVhbnMgYW55b25lIHdobworcmVjZWl2ZXMgdGhlIFByb2dyYW0gdW5kZXIgdGhpcyBBZ3JlZW1lbnQsIGluY2x1ZGluZyBhbGwgQ29udHJpYnV0b3JzLjwvc3Bhbj4gPC9wPgorCis8cD48Yj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+Mi4gR1JBTlQgT0YgUklHSFRTPC9zcGFuPjwvYj4gPC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5hKQorU3ViamVjdCB0byB0aGUgdGVybXMgb2YgdGhpcyBBZ3JlZW1lbnQsIGVhY2ggQ29udHJpYnV0b3IgaGVyZWJ5IGdyYW50cyBSZWNpcGllbnQKK2Egbm9uLWV4Y2x1c2l2ZSwgd29ybGR3aWRlLCByb3lhbHR5LWZyZWUgY29weXJpZ2h0IGxpY2Vuc2UgdG88c3Bhbgorc3R5bGU9J2NvbG9yOnJlZCc+IDwvc3Bhbj5yZXByb2R1Y2UsIHByZXBhcmUgZGVyaXZhdGl2ZSB3b3JrcyBvZiwgcHVibGljbHkKK2Rpc3BsYXksIHB1YmxpY2x5IHBlcmZvcm0sIGRpc3RyaWJ1dGUgYW5kIHN1YmxpY2Vuc2UgdGhlIENvbnRyaWJ1dGlvbiBvZiBzdWNoCitDb250cmlidXRvciwgaWYgYW55LCBhbmQgc3VjaCBkZXJpdmF0aXZlIHdvcmtzLCBpbiBzb3VyY2UgY29kZSBhbmQgb2JqZWN0IGNvZGUKK2Zvcm0uPC9zcGFuPjwvcD4KKworPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YikKK1N1YmplY3QgdG8gdGhlIHRlcm1zIG9mIHRoaXMgQWdyZWVtZW50LCBlYWNoIENvbnRyaWJ1dG9yIGhlcmVieSBncmFudHMKK1JlY2lwaWVudCBhIG5vbi1leGNsdXNpdmUsIHdvcmxkd2lkZSw8c3BhbiBzdHlsZT0nY29sb3I6Z3JlZW4nPiA8L3NwYW4+cm95YWx0eS1mcmVlCitwYXRlbnQgbGljZW5zZSB1bmRlciBMaWNlbnNlZCBQYXRlbnRzIHRvIG1ha2UsIHVzZSwgc2VsbCwgb2ZmZXIgdG8gc2VsbCwgaW1wb3J0CithbmQgb3RoZXJ3aXNlIHRyYW5zZmVyIHRoZSBDb250cmlidXRpb24gb2Ygc3VjaCBDb250cmlidXRvciwgaWYgYW55LCBpbiBzb3VyY2UKK2NvZGUgYW5kIG9iamVjdCBjb2RlIGZvcm0uIFRoaXMgcGF0ZW50IGxpY2Vuc2Ugc2hhbGwgYXBwbHkgdG8gdGhlIGNvbWJpbmF0aW9uCitvZiB0aGUgQ29udHJpYnV0aW9uIGFuZCB0aGUgUHJvZ3JhbSBpZiwgYXQgdGhlIHRpbWUgdGhlIENvbnRyaWJ1dGlvbiBpcyBhZGRlZAorYnkgdGhlIENvbnRyaWJ1dG9yLCBzdWNoIGFkZGl0aW9uIG9mIHRoZSBDb250cmlidXRpb24gY2F1c2VzIHN1Y2ggY29tYmluYXRpb24KK3RvIGJlIGNvdmVyZWQgYnkgdGhlIExpY2Vuc2VkIFBhdGVudHMuIFRoZSBwYXRlbnQgbGljZW5zZSBzaGFsbCBub3QgYXBwbHkgdG8KK2FueSBvdGhlciBjb21iaW5hdGlvbnMgd2hpY2ggaW5jbHVkZSB0aGUgQ29udHJpYnV0aW9uLiBObyBoYXJkd2FyZSBwZXIgc2UgaXMKK2xpY2Vuc2VkIGhlcmV1bmRlci4gPC9zcGFuPjwvcD4KKworPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YykKK1JlY2lwaWVudCB1bmRlcnN0YW5kcyB0aGF0IGFsdGhvdWdoIGVhY2ggQ29udHJpYnV0b3IgZ3JhbnRzIHRoZSBsaWNlbnNlcyB0byBpdHMKK0NvbnRyaWJ1dGlvbnMgc2V0IGZvcnRoIGhlcmVpbiwgbm8gYXNzdXJhbmNlcyBhcmUgcHJvdmlkZWQgYnkgYW55IENvbnRyaWJ1dG9yCit0aGF0IHRoZSBQcm9ncmFtIGRvZXMgbm90IGluZnJpbmdlIHRoZSBwYXRlbnQgb3Igb3RoZXIgaW50ZWxsZWN0dWFsIHByb3BlcnR5CityaWdodHMgb2YgYW55IG90aGVyIGVudGl0eS4gRWFjaCBDb250cmlidXRvciBkaXNjbGFpbXMgYW55IGxpYWJpbGl0eSB0byBSZWNpcGllbnQKK2ZvciBjbGFpbXMgYnJvdWdodCBieSBhbnkgb3RoZXIgZW50aXR5IGJhc2VkIG9uIGluZnJpbmdlbWVudCBvZiBpbnRlbGxlY3R1YWwKK3Byb3BlcnR5IHJpZ2h0cyBvciBvdGhlcndpc2UuIEFzIGEgY29uZGl0aW9uIHRvIGV4ZXJjaXNpbmcgdGhlIHJpZ2h0cyBhbmQKK2xpY2Vuc2VzIGdyYW50ZWQgaGVyZXVuZGVyLCBlYWNoIFJlY2lwaWVudCBoZXJlYnkgYXNzdW1lcyBzb2xlIHJlc3BvbnNpYmlsaXR5Cit0byBzZWN1cmUgYW55IG90aGVyIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgbmVlZGVkLCBpZiBhbnkuIEZvciBleGFtcGxlLAoraWYgYSB0aGlyZCBwYXJ0eSBwYXRlbnQgbGljZW5zZSBpcyByZXF1aXJlZCB0byBhbGxvdyBSZWNpcGllbnQgdG8gZGlzdHJpYnV0ZQordGhlIFByb2dyYW0sIGl0IGlzIFJlY2lwaWVudCdzIHJlc3BvbnNpYmlsaXR5IHRvIGFjcXVpcmUgdGhhdCBsaWNlbnNlIGJlZm9yZQorZGlzdHJpYnV0aW5nIHRoZSBQcm9ncmFtLjwvc3Bhbj48L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmQpCitFYWNoIENvbnRyaWJ1dG9yIHJlcHJlc2VudHMgdGhhdCB0byBpdHMga25vd2xlZGdlIGl0IGhhcyBzdWZmaWNpZW50IGNvcHlyaWdodAorcmlnaHRzIGluIGl0cyBDb250cmlidXRpb24sIGlmIGFueSwgdG8gZ3JhbnQgdGhlIGNvcHlyaWdodCBsaWNlbnNlIHNldCBmb3J0aCBpbgordGhpcyBBZ3JlZW1lbnQuIDwvc3Bhbj48L3A+CisKKzxwPjxiPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4zLiBSRVFVSVJFTUVOVFM8L3NwYW4+PC9iPiA8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5BIENvbnRyaWJ1dG9yIG1heSBjaG9vc2UgdG8gZGlzdHJpYnV0ZSB0aGUKK1Byb2dyYW0gaW4gb2JqZWN0IGNvZGUgZm9ybSB1bmRlciBpdHMgb3duIGxpY2Vuc2UgYWdyZWVtZW50LCBwcm92aWRlZCB0aGF0Ojwvc3Bhbj4KKzwvcD4KKworPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YSkKK2l0IGNvbXBsaWVzIHdpdGggdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoaXMgQWdyZWVtZW50OyBhbmQ8L3NwYW4+PC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5iKQoraXRzIGxpY2Vuc2UgYWdyZWVtZW50Ojwvc3Bhbj48L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmkpCitlZmZlY3RpdmVseSBkaXNjbGFpbXMgb24gYmVoYWxmIG9mIGFsbCBDb250cmlidXRvcnMgYWxsIHdhcnJhbnRpZXMgYW5kCitjb25kaXRpb25zLCBleHByZXNzIGFuZCBpbXBsaWVkLCBpbmNsdWRpbmcgd2FycmFudGllcyBvciBjb25kaXRpb25zIG9mIHRpdGxlCithbmQgbm9uLWluZnJpbmdlbWVudCwgYW5kIGltcGxpZWQgd2FycmFudGllcyBvciBjb25kaXRpb25zIG9mIG1lcmNoYW50YWJpbGl0eQorYW5kIGZpdG5lc3MgZm9yIGEgcGFydGljdWxhciBwdXJwb3NlOyA8L3NwYW4+PC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5paSkKK2VmZmVjdGl2ZWx5IGV4Y2x1ZGVzIG9uIGJlaGFsZiBvZiBhbGwgQ29udHJpYnV0b3JzIGFsbCBsaWFiaWxpdHkgZm9yIGRhbWFnZXMsCitpbmNsdWRpbmcgZGlyZWN0LCBpbmRpcmVjdCwgc3BlY2lhbCwgaW5jaWRlbnRhbCBhbmQgY29uc2VxdWVudGlhbCBkYW1hZ2VzLCBzdWNoCithcyBsb3N0IHByb2ZpdHM7IDwvc3Bhbj48L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmlpaSkKK3N0YXRlcyB0aGF0IGFueSBwcm92aXNpb25zIHdoaWNoIGRpZmZlciBmcm9tIHRoaXMgQWdyZWVtZW50IGFyZSBvZmZlcmVkIGJ5IHRoYXQKK0NvbnRyaWJ1dG9yIGFsb25lIGFuZCBub3QgYnkgYW55IG90aGVyIHBhcnR5OyBhbmQ8L3NwYW4+PC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5pdikKK3N0YXRlcyB0aGF0IHNvdXJjZSBjb2RlIGZvciB0aGUgUHJvZ3JhbSBpcyBhdmFpbGFibGUgZnJvbSBzdWNoIENvbnRyaWJ1dG9yLCBhbmQKK2luZm9ybXMgbGljZW5zZWVzIGhvdyB0byBvYnRhaW4gaXQgaW4gYSByZWFzb25hYmxlIG1hbm5lciBvbiBvciB0aHJvdWdoIGEKK21lZGl1bSBjdXN0b21hcmlseSB1c2VkIGZvciBzb2Z0d2FyZSBleGNoYW5nZS48c3BhbiBzdHlsZT0nY29sb3I6Ymx1ZSc+IDwvc3Bhbj48L3NwYW4+PC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+V2hlbiB0aGUgUHJvZ3JhbSBpcyBtYWRlIGF2YWlsYWJsZSBpbiBzb3VyY2UKK2NvZGUgZm9ybTo8L3NwYW4+IDwvcD4KKworPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YSkKK2l0IG11c3QgYmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhpcyBBZ3JlZW1lbnQ7IGFuZCA8L3NwYW4+PC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5iKSBhCitjb3B5IG9mIHRoaXMgQWdyZWVtZW50IG11c3QgYmUgaW5jbHVkZWQgd2l0aCBlYWNoIGNvcHkgb2YgdGhlIFByb2dyYW0uIDwvc3Bhbj48L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5Db250cmlidXRvcnMgbWF5IG5vdCByZW1vdmUgb3IgYWx0ZXIgYW55Citjb3B5cmlnaHQgbm90aWNlcyBjb250YWluZWQgd2l0aGluIHRoZSBQcm9ncmFtLiA8L3NwYW4+PC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+RWFjaCBDb250cmlidXRvciBtdXN0IGlkZW50aWZ5IGl0c2VsZiBhcyB0aGUKK29yaWdpbmF0b3Igb2YgaXRzIENvbnRyaWJ1dGlvbiwgaWYgYW55LCBpbiBhIG1hbm5lciB0aGF0IHJlYXNvbmFibHkgYWxsb3dzCitzdWJzZXF1ZW50IFJlY2lwaWVudHMgdG8gaWRlbnRpZnkgdGhlIG9yaWdpbmF0b3Igb2YgdGhlIENvbnRyaWJ1dGlvbi4gPC9zcGFuPjwvcD4KKworPHA+PGI+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPjQuIENPTU1FUkNJQUwgRElTVFJJQlVUSU9OPC9zcGFuPjwvYj4gPC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+Q29tbWVyY2lhbCBkaXN0cmlidXRvcnMgb2Ygc29mdHdhcmUgbWF5CithY2NlcHQgY2VydGFpbiByZXNwb25zaWJpbGl0aWVzIHdpdGggcmVzcGVjdCB0byBlbmQgdXNlcnMsIGJ1c2luZXNzIHBhcnRuZXJzCithbmQgdGhlIGxpa2UuIFdoaWxlIHRoaXMgbGljZW5zZSBpcyBpbnRlbmRlZCB0byBmYWNpbGl0YXRlIHRoZSBjb21tZXJjaWFsIHVzZQorb2YgdGhlIFByb2dyYW0sIHRoZSBDb250cmlidXRvciB3aG8gaW5jbHVkZXMgdGhlIFByb2dyYW0gaW4gYSBjb21tZXJjaWFsCitwcm9kdWN0IG9mZmVyaW5nIHNob3VsZCBkbyBzbyBpbiBhIG1hbm5lciB3aGljaCBkb2VzIG5vdCBjcmVhdGUgcG90ZW50aWFsCitsaWFiaWxpdHkgZm9yIG90aGVyIENvbnRyaWJ1dG9ycy4gVGhlcmVmb3JlLCBpZiBhIENvbnRyaWJ1dG9yIGluY2x1ZGVzIHRoZQorUHJvZ3JhbSBpbiBhIGNvbW1lcmNpYWwgcHJvZHVjdCBvZmZlcmluZywgc3VjaCBDb250cmlidXRvciAoJnF1b3Q7Q29tbWVyY2lhbAorQ29udHJpYnV0b3ImcXVvdDspIGhlcmVieSBhZ3JlZXMgdG8gZGVmZW5kIGFuZCBpbmRlbW5pZnkgZXZlcnkgb3RoZXIKK0NvbnRyaWJ1dG9yICgmcXVvdDtJbmRlbW5pZmllZCBDb250cmlidXRvciZxdW90OykgYWdhaW5zdCBhbnkgbG9zc2VzLCBkYW1hZ2VzIGFuZAorY29zdHMgKGNvbGxlY3RpdmVseSAmcXVvdDtMb3NzZXMmcXVvdDspIGFyaXNpbmcgZnJvbSBjbGFpbXMsIGxhd3N1aXRzIGFuZCBvdGhlcgorbGVnYWwgYWN0aW9ucyBicm91Z2h0IGJ5IGEgdGhpcmQgcGFydHkgYWdhaW5zdCB0aGUgSW5kZW1uaWZpZWQgQ29udHJpYnV0b3IgdG8KK3RoZSBleHRlbnQgY2F1c2VkIGJ5IHRoZSBhY3RzIG9yIG9taXNzaW9ucyBvZiBzdWNoIENvbW1lcmNpYWwgQ29udHJpYnV0b3IgaW4KK2Nvbm5lY3Rpb24gd2l0aCBpdHMgZGlzdHJpYnV0aW9uIG9mIHRoZSBQcm9ncmFtIGluIGEgY29tbWVyY2lhbCBwcm9kdWN0CitvZmZlcmluZy4gVGhlIG9ibGlnYXRpb25zIGluIHRoaXMgc2VjdGlvbiBkbyBub3QgYXBwbHkgdG8gYW55IGNsYWltcyBvciBMb3NzZXMKK3JlbGF0aW5nIHRvIGFueSBhY3R1YWwgb3IgYWxsZWdlZCBpbnRlbGxlY3R1YWwgcHJvcGVydHkgaW5mcmluZ2VtZW50LiBJbiBvcmRlcgordG8gcXVhbGlmeSwgYW4gSW5kZW1uaWZpZWQgQ29udHJpYnV0b3IgbXVzdDogYSkgcHJvbXB0bHkgbm90aWZ5IHRoZSBDb21tZXJjaWFsCitDb250cmlidXRvciBpbiB3cml0aW5nIG9mIHN1Y2ggY2xhaW0sIGFuZCBiKSBhbGxvdyB0aGUgQ29tbWVyY2lhbCBDb250cmlidXRvcgordG8gY29udHJvbCwgYW5kIGNvb3BlcmF0ZSB3aXRoIHRoZSBDb21tZXJjaWFsIENvbnRyaWJ1dG9yIGluLCB0aGUgZGVmZW5zZSBhbmQKK2FueSByZWxhdGVkIHNldHRsZW1lbnQgbmVnb3RpYXRpb25zLiBUaGUgSW5kZW1uaWZpZWQgQ29udHJpYnV0b3IgbWF5IHBhcnRpY2lwYXRlCitpbiBhbnkgc3VjaCBjbGFpbSBhdCBpdHMgb3duIGV4cGVuc2UuPC9zcGFuPiA8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5Gb3IgZXhhbXBsZSwgYSBDb250cmlidXRvciBtaWdodCBpbmNsdWRlIHRoZQorUHJvZ3JhbSBpbiBhIGNvbW1lcmNpYWwgcHJvZHVjdCBvZmZlcmluZywgUHJvZHVjdCBYLiBUaGF0IENvbnRyaWJ1dG9yIGlzIHRoZW4gYQorQ29tbWVyY2lhbCBDb250cmlidXRvci4gSWYgdGhhdCBDb21tZXJjaWFsIENvbnRyaWJ1dG9yIHRoZW4gbWFrZXMgcGVyZm9ybWFuY2UKK2NsYWltcywgb3Igb2ZmZXJzIHdhcnJhbnRpZXMgcmVsYXRlZCB0byBQcm9kdWN0IFgsIHRob3NlIHBlcmZvcm1hbmNlIGNsYWltcyBhbmQKK3dhcnJhbnRpZXMgYXJlIHN1Y2ggQ29tbWVyY2lhbCBDb250cmlidXRvcidzIHJlc3BvbnNpYmlsaXR5IGFsb25lLiBVbmRlciB0aGlzCitzZWN0aW9uLCB0aGUgQ29tbWVyY2lhbCBDb250cmlidXRvciB3b3VsZCBoYXZlIHRvIGRlZmVuZCBjbGFpbXMgYWdhaW5zdCB0aGUKK290aGVyIENvbnRyaWJ1dG9ycyByZWxhdGVkIHRvIHRob3NlIHBlcmZvcm1hbmNlIGNsYWltcyBhbmQgd2FycmFudGllcywgYW5kIGlmIGEKK2NvdXJ0IHJlcXVpcmVzIGFueSBvdGhlciBDb250cmlidXRvciB0byBwYXkgYW55IGRhbWFnZXMgYXMgYSByZXN1bHQsIHRoZQorQ29tbWVyY2lhbCBDb250cmlidXRvciBtdXN0IHBheSB0aG9zZSBkYW1hZ2VzLjwvc3Bhbj4gPC9wPgorCis8cD48Yj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+NS4gTk8gV0FSUkFOVFk8L3NwYW4+PC9iPiA8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5FWENFUFQgQVMgRVhQUkVTU0xZIFNFVCBGT1JUSCBJTiBUSElTCitBR1JFRU1FTlQsIFRIRSBQUk9HUkFNIElTIFBST1ZJREVEIE9OIEFOICZxdW90O0FTIElTJnF1b3Q7IEJBU0lTLCBXSVRIT1VUCitXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIEVJVEhFUiBFWFBSRVNTIE9SIElNUExJRUQgSU5DTFVESU5HLAorV0lUSE9VVCBMSU1JVEFUSU9OLCBBTlkgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIFRJVExFLCBOT04tSU5GUklOR0VNRU5ULAorTUVSQ0hBTlRBQklMSVRZIE9SIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBFYWNoIFJlY2lwaWVudCBpcyBzb2xlbHkKK3Jlc3BvbnNpYmxlIGZvciBkZXRlcm1pbmluZyB0aGUgYXBwcm9wcmlhdGVuZXNzIG9mIHVzaW5nIGFuZCBkaXN0cmlidXRpbmcgdGhlCitQcm9ncmFtIGFuZCBhc3N1bWVzIGFsbCByaXNrcyBhc3NvY2lhdGVkIHdpdGggaXRzIGV4ZXJjaXNlIG9mIHJpZ2h0cyB1bmRlciB0aGlzCitBZ3JlZW1lbnQgLCBpbmNsdWRpbmcgYnV0IG5vdCBsaW1pdGVkIHRvIHRoZSByaXNrcyBhbmQgY29zdHMgb2YgcHJvZ3JhbSBlcnJvcnMsCitjb21wbGlhbmNlIHdpdGggYXBwbGljYWJsZSBsYXdzLCBkYW1hZ2UgdG8gb3IgbG9zcyBvZiBkYXRhLCBwcm9ncmFtcyBvcgorZXF1aXBtZW50LCBhbmQgdW5hdmFpbGFiaWxpdHkgb3IgaW50ZXJydXB0aW9uIG9mIG9wZXJhdGlvbnMuIDwvc3Bhbj48L3A+CisKKzxwPjxiPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz42LiBESVNDTEFJTUVSIE9GIExJQUJJTElUWTwvc3Bhbj48L2I+IDwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkVYQ0VQVCBBUyBFWFBSRVNTTFkgU0VUIEZPUlRIIElOIFRISVMKK0FHUkVFTUVOVCwgTkVJVEhFUiBSRUNJUElFTlQgTk9SIEFOWSBDT05UUklCVVRPUlMgU0hBTEwgSEFWRSBBTlkgTElBQklMSVRZIEZPUgorQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisoSU5DTFVESU5HIFdJVEhPVVQgTElNSVRBVElPTiBMT1NUIFBST0ZJVFMpLCBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcKK05FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT1IgRElTVFJJQlVUSU9OIE9GCitUSEUgUFJPR1JBTSBPUiBUSEUgRVhFUkNJU0UgT0YgQU5ZIFJJR0hUUyBHUkFOVEVEIEhFUkVVTkRFUiwgRVZFTiBJRiBBRFZJU0VEIE9GCitUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLjwvc3Bhbj4gPC9wPgorCis8cD48Yj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+Ny4gR0VORVJBTDwvc3Bhbj48L2I+IDwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPklmIGFueSBwcm92aXNpb24gb2YgdGhpcyBBZ3JlZW1lbnQgaXMgaW52YWxpZAorb3IgdW5lbmZvcmNlYWJsZSB1bmRlciBhcHBsaWNhYmxlIGxhdywgaXQgc2hhbGwgbm90IGFmZmVjdCB0aGUgdmFsaWRpdHkgb3IKK2VuZm9yY2VhYmlsaXR5IG9mIHRoZSByZW1haW5kZXIgb2YgdGhlIHRlcm1zIG9mIHRoaXMgQWdyZWVtZW50LCBhbmQgd2l0aG91dAorZnVydGhlciBhY3Rpb24gYnkgdGhlIHBhcnRpZXMgaGVyZXRvLCBzdWNoIHByb3Zpc2lvbiBzaGFsbCBiZSByZWZvcm1lZCB0byB0aGUKK21pbmltdW0gZXh0ZW50IG5lY2Vzc2FyeSB0byBtYWtlIHN1Y2ggcHJvdmlzaW9uIHZhbGlkIGFuZCBlbmZvcmNlYWJsZS48L3NwYW4+IDwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPklmIFJlY2lwaWVudCBpbnN0aXR1dGVzIHBhdGVudCBsaXRpZ2F0aW9uCithZ2FpbnN0IGFueSBlbnRpdHkgKGluY2x1ZGluZyBhIGNyb3NzLWNsYWltIG9yIGNvdW50ZXJjbGFpbSBpbiBhIGxhd3N1aXQpCithbGxlZ2luZyB0aGF0IHRoZSBQcm9ncmFtIGl0c2VsZiAoZXhjbHVkaW5nIGNvbWJpbmF0aW9ucyBvZiB0aGUgUHJvZ3JhbSB3aXRoCitvdGhlciBzb2Z0d2FyZSBvciBoYXJkd2FyZSkgaW5mcmluZ2VzIHN1Y2ggUmVjaXBpZW50J3MgcGF0ZW50KHMpLCB0aGVuIHN1Y2gKK1JlY2lwaWVudCdzIHJpZ2h0cyBncmFudGVkIHVuZGVyIFNlY3Rpb24gMihiKSBzaGFsbCB0ZXJtaW5hdGUgYXMgb2YgdGhlIGRhdGUKK3N1Y2ggbGl0aWdhdGlvbiBpcyBmaWxlZC4gPC9zcGFuPjwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkFsbCBSZWNpcGllbnQncyByaWdodHMgdW5kZXIgdGhpcyBBZ3JlZW1lbnQKK3NoYWxsIHRlcm1pbmF0ZSBpZiBpdCBmYWlscyB0byBjb21wbHkgd2l0aCBhbnkgb2YgdGhlIG1hdGVyaWFsIHRlcm1zIG9yCitjb25kaXRpb25zIG9mIHRoaXMgQWdyZWVtZW50IGFuZCBkb2VzIG5vdCBjdXJlIHN1Y2ggZmFpbHVyZSBpbiBhIHJlYXNvbmFibGUKK3BlcmlvZCBvZiB0aW1lIGFmdGVyIGJlY29taW5nIGF3YXJlIG9mIHN1Y2ggbm9uY29tcGxpYW5jZS4gSWYgYWxsIFJlY2lwaWVudCdzCityaWdodHMgdW5kZXIgdGhpcyBBZ3JlZW1lbnQgdGVybWluYXRlLCBSZWNpcGllbnQgYWdyZWVzIHRvIGNlYXNlIHVzZSBhbmQKK2Rpc3RyaWJ1dGlvbiBvZiB0aGUgUHJvZ3JhbSBhcyBzb29uIGFzIHJlYXNvbmFibHkgcHJhY3RpY2FibGUuIEhvd2V2ZXIsCitSZWNpcGllbnQncyBvYmxpZ2F0aW9ucyB1bmRlciB0aGlzIEFncmVlbWVudCBhbmQgYW55IGxpY2Vuc2VzIGdyYW50ZWQgYnkKK1JlY2lwaWVudCByZWxhdGluZyB0byB0aGUgUHJvZ3JhbSBzaGFsbCBjb250aW51ZSBhbmQgc3Vydml2ZS4gPC9zcGFuPjwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkV2ZXJ5b25lIGlzIHBlcm1pdHRlZCB0byBjb3B5IGFuZCBkaXN0cmlidXRlCitjb3BpZXMgb2YgdGhpcyBBZ3JlZW1lbnQsIGJ1dCBpbiBvcmRlciB0byBhdm9pZCBpbmNvbnNpc3RlbmN5IHRoZSBBZ3JlZW1lbnQgaXMKK2NvcHlyaWdodGVkIGFuZCBtYXkgb25seSBiZSBtb2RpZmllZCBpbiB0aGUgZm9sbG93aW5nIG1hbm5lci4gVGhlIEFncmVlbWVudAorU3Rld2FyZCByZXNlcnZlcyB0aGUgcmlnaHQgdG8gcHVibGlzaCBuZXcgdmVyc2lvbnMgKGluY2x1ZGluZyByZXZpc2lvbnMpIG9mCit0aGlzIEFncmVlbWVudCBmcm9tIHRpbWUgdG8gdGltZS4gTm8gb25lIG90aGVyIHRoYW4gdGhlIEFncmVlbWVudCBTdGV3YXJkIGhhcwordGhlIHJpZ2h0IHRvIG1vZGlmeSB0aGlzIEFncmVlbWVudC4gVGhlIEVjbGlwc2UgRm91bmRhdGlvbiBpcyB0aGUgaW5pdGlhbAorQWdyZWVtZW50IFN0ZXdhcmQuIFRoZSBFY2xpcHNlIEZvdW5kYXRpb24gbWF5IGFzc2lnbiB0aGUgcmVzcG9uc2liaWxpdHkgdG8KK3NlcnZlIGFzIHRoZSBBZ3JlZW1lbnQgU3Rld2FyZCB0byBhIHN1aXRhYmxlIHNlcGFyYXRlIGVudGl0eS4gRWFjaCBuZXcgdmVyc2lvbgorb2YgdGhlIEFncmVlbWVudCB3aWxsIGJlIGdpdmVuIGEgZGlzdGluZ3Vpc2hpbmcgdmVyc2lvbiBudW1iZXIuIFRoZSBQcm9ncmFtCisoaW5jbHVkaW5nIENvbnRyaWJ1dGlvbnMpIG1heSBhbHdheXMgYmUgZGlzdHJpYnV0ZWQgc3ViamVjdCB0byB0aGUgdmVyc2lvbiBvZgordGhlIEFncmVlbWVudCB1bmRlciB3aGljaCBpdCB3YXMgcmVjZWl2ZWQuIEluIGFkZGl0aW9uLCBhZnRlciBhIG5ldyB2ZXJzaW9uIG9mCit0aGUgQWdyZWVtZW50IGlzIHB1Ymxpc2hlZCwgQ29udHJpYnV0b3IgbWF5IGVsZWN0IHRvIGRpc3RyaWJ1dGUgdGhlIFByb2dyYW0KKyhpbmNsdWRpbmcgaXRzIENvbnRyaWJ1dGlvbnMpIHVuZGVyIHRoZSBuZXcgdmVyc2lvbi4gRXhjZXB0IGFzIGV4cHJlc3NseSBzdGF0ZWQKK2luIFNlY3Rpb25zIDIoYSkgYW5kIDIoYikgYWJvdmUsIFJlY2lwaWVudCByZWNlaXZlcyBubyByaWdodHMgb3IgbGljZW5zZXMgdG8KK3RoZSBpbnRlbGxlY3R1YWwgcHJvcGVydHkgb2YgYW55IENvbnRyaWJ1dG9yIHVuZGVyIHRoaXMgQWdyZWVtZW50LCB3aGV0aGVyCitleHByZXNzbHksIGJ5IGltcGxpY2F0aW9uLCBlc3RvcHBlbCBvciBvdGhlcndpc2UuIEFsbCByaWdodHMgaW4gdGhlIFByb2dyYW0gbm90CitleHByZXNzbHkgZ3JhbnRlZCB1bmRlciB0aGlzIEFncmVlbWVudCBhcmUgcmVzZXJ2ZWQuPC9zcGFuPiA8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5UaGlzIEFncmVlbWVudCBpcyBnb3Zlcm5lZCBieSB0aGUgbGF3cyBvZiB0aGUKK1N0YXRlIG9mIE5ldyBZb3JrIGFuZCB0aGUgaW50ZWxsZWN0dWFsIHByb3BlcnR5IGxhd3Mgb2YgdGhlIFVuaXRlZCBTdGF0ZXMgb2YKK0FtZXJpY2EuIE5vIHBhcnR5IHRvIHRoaXMgQWdyZWVtZW50IHdpbGwgYnJpbmcgYSBsZWdhbCBhY3Rpb24gdW5kZXIgdGhpcworQWdyZWVtZW50IG1vcmUgdGhhbiBvbmUgeWVhciBhZnRlciB0aGUgY2F1c2Ugb2YgYWN0aW9uIGFyb3NlLiBFYWNoIHBhcnR5IHdhaXZlcworaXRzIHJpZ2h0cyB0byBhIGp1cnkgdHJpYWwgaW4gYW55IHJlc3VsdGluZyBsaXRpZ2F0aW9uLjwvc3Bhbj4gPC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWw+PCFbaWYgIXN1cHBvcnRFbXB0eVBhcmFzXT4mbmJzcDs8IVtlbmRpZl0+PG86cD48L286cD48L3A+CisKKzwvZGl2PgorCis8L2JvZHk+CisKKzwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmZlYXR1cmUvZmVhdHVyZS5wcm9wZXJ0aWVzIGIvZmVhdHVyZXMvb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5mZWF0dXJlL2ZlYXR1cmUucHJvcGVydGllcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNDRjZmI2Ci0tLSAvZGV2L251bGwKKysrIGIvZmVhdHVyZXMvb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5mZWF0dXJlL2ZlYXR1cmUucHJvcGVydGllcwpAQCAtMCwwICsxLDE3MyBAQAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBDb3B5cmlnaHQgKGMpIDIwMTEgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisjIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisjIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisjIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisjIAorIyBDb250cmlidXRvcnM6CisjICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgZmVhdHVyZS5wcm9wZXJ0aWVzCisjIGNvbnRhaW5zIGV4dGVybmFsaXplZCBzdHJpbmdzIGZvciBmZWF0dXJlLnhtbAorIyAiJWZvbyIgaW4gZmVhdHVyZS54bWwgY29ycmVzcG9uZHMgdG8gdGhlIGtleSAiZm9vIiBpbiB0aGlzIGZpbGUKKyMgamF2YS5pby5Qcm9wZXJ0aWVzIGZpbGUgKElTTyA4ODU5LTEgd2l0aCAiXCIgZXNjYXBlcykKKyMgVGhpcyBmaWxlIHNob3VsZCBiZSB0cmFuc2xhdGVkLgorCisjICJmZWF0dXJlTmFtZSIgcHJvcGVydHkgLSBuYW1lIG9mIHRoZSBmZWF0dXJlCitmZWF0dXJlTmFtZT1TVEVNIEFuYWx5c2lzIGFuZCBPcHRpbWl6YXRpb24KKworIyAicHJvdmlkZXJOYW1lIiBwcm9wZXJ0eSAtIG5hbWUgb2YgdGhlIGNvbXBhbnkgdGhhdCBwcm92aWRlcyB0aGUgZmVhdHVyZQorcHJvdmlkZXJOYW1lPUVjbGlwc2Uub3JnCisKKyMgInVwZGF0ZVNpdGVOYW1lIiBwcm9wZXJ0eSAtIGxhYmVsIGZvciB0aGUgdXBkYXRlIHNpdGUKK3VwZGF0ZVNpdGVOYW1lPVNURU0gVXBkYXRlcworCisjICJzZWNvbmRhcnlTaXRlTmFtZSIgcHJvcGVydHkgLSBsYWJlbCBmb3IgdGhlIHNlY29uZGFyeSB1cGRhdGUgc2l0ZQorI3NlY29uZGFyeVVwZGF0ZVNpdGVOYW1lPVNURU0gVXBkYXRlcworCisjICJkZXNjcmlwdGlvbiIgcHJvcGVydHkgLSBkZXNjcmlwdGlvbiBvZiB0aGUgZmVhdHVyZQorZGVzY3JpcHRpb249VG9vbHMgZm9yIG1vZGVsIGFuYWx5c2lzIGFuZCBvcHRpbWl6YXRpb24KKworIyAiY29weXJpZ2h0IiBwcm9wZXJ0eSAtIHRleHQgb2YgdGhlICJGZWF0dXJlIFVwZGF0ZSBDb3B5cmlnaHQiCitjb3B5cmlnaHQ9XAorQ29weXJpZ2h0IChjKSAyMDA3LTIwMTEgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuXG5cCitBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzXG5cCithcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjBcblwKK3doaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0XG5cCitodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbFxuXAorXG5cCitDb250cmlidXRvcnM6XG5cCisgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uXG4KKyMjIyMjIyMjIyMjIyMjIyMgZW5kIG9mIGNvcHlyaWdodCBwcm9wZXJ0eSAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworIyAibGljZW5zZVVSTCIgcHJvcGVydHkgLSBVUkwgb2YgdGhlICJGZWF0dXJlIExpY2Vuc2UiCisjIGRvIG5vdCB0cmFuc2xhdGUgdmFsdWUgLSBqdXN0IGNoYW5nZSB0byBwb2ludCB0byBhIGxvY2FsZS1zcGVjaWZpYyBIVE1MIHBhZ2UKK2xpY2Vuc2VVUkw9bGljZW5zZS5odG1sCisKKyMgImxpY2Vuc2UiIHByb3BlcnR5IC0gdGV4dCBvZiB0aGUgIkZlYXR1cmUgVXBkYXRlIExpY2Vuc2UiCisjIHNob3VsZCBiZSBwbGFpbiB0ZXh0IHZlcnNpb24gb2YgbGljZW5zZSBhZ3JlZW1lbnQgcG9pbnRlZCB0byBiZSAibGljZW5zZVVSTCIKK2xpY2Vuc2U9XAorRWNsaXBzZSBGb3VuZGF0aW9uIFNvZnR3YXJlIFVzZXIgQWdyZWVtZW50XG5cCitBcHJpbCAxNCwgMjAxMFxuXAorXG5cCitVc2FnZSBPZiBDb250ZW50XG5cCitcblwKK1RIRSBFQ0xJUFNFIEZPVU5EQVRJT04gTUFLRVMgQVZBSUxBQkxFIFNPRlRXQVJFLCBET0NVTUVOVEFUSU9OLCBJTkZPUk1BVElPTiBBTkQvT1JcblwKK09USEVSIE1BVEVSSUFMUyBGT1IgT1BFTiBTT1VSQ0UgUFJPSkVDVFMgKENPTExFQ1RJVkVMWSAiQ09OVEVOVCIpLlxuXAorVVNFIE9GIFRIRSBDT05URU5UIElTIEdPVkVSTkVEIEJZIFRIRSBURVJNUyBBTkQgQ09ORElUSU9OUyBPRiBUSElTXG5cCitBR1JFRU1FTlQgQU5EL09SIFRIRSBURVJNUyBBTkQgQ09ORElUSU9OUyBPRiBMSUNFTlNFIEFHUkVFTUVOVFMgT1JcblwKK05PVElDRVMgSU5ESUNBVEVEIE9SIFJFRkVSRU5DRUQgQkVMT1cuICBCWSBVU0lORyBUSEUgQ09OVEVOVCwgWU9VXG5cCitBR1JFRSBUSEFUIFlPVVIgVVNFIE9GIFRIRSBDT05URU5UIElTIEdPVkVSTkVEIEJZIFRISVMgQUdSRUVNRU5UXG5cCitBTkQvT1IgVEhFIFRFUk1TIEFORCBDT05ESVRJT05TIE9GIEFOWSBBUFBMSUNBQkxFIExJQ0VOU0UgQUdSRUVNRU5UU1xuXAorT1IgTk9USUNFUyBJTkRJQ0FURUQgT1IgUkVGRVJFTkNFRCBCRUxPVy4gIElGIFlPVSBETyBOT1QgQUdSRUUgVE8gVEhFXG5cCitURVJNUyBBTkQgQ09ORElUSU9OUyBPRiBUSElTIEFHUkVFTUVOVCBBTkQgVEhFIFRFUk1TIEFORCBDT05ESVRJT05TXG5cCitPRiBBTlkgQVBQTElDQUJMRSBMSUNFTlNFIEFHUkVFTUVOVFMgT1IgTk9USUNFUyBJTkRJQ0FURUQgT1IgUkVGRVJFTkNFRFxuXAorQkVMT1csIFRIRU4gWU9VIE1BWSBOT1QgVVNFIFRIRSBDT05URU5ULlxuXAorXG5cCitBcHBsaWNhYmxlIExpY2Vuc2VzXG5cCitcblwKK1VubGVzcyBvdGhlcndpc2UgaW5kaWNhdGVkLCBhbGwgQ29udGVudCBtYWRlIGF2YWlsYWJsZSBieSB0aGVcblwKK0VjbGlwc2UgRm91bmRhdGlvbiBpcyBwcm92aWRlZCB0byB5b3UgdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mXG5cCit0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMCAoIkVQTCIpLiBBIGNvcHkgb2YgdGhlIEVQTCBpc1xuXAorcHJvdmlkZWQgd2l0aCB0aGlzIENvbnRlbnQgYW5kIGlzIGFsc28gYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sLlxuXAorRm9yIHB1cnBvc2VzIG9mIHRoZSBFUEwsICJQcm9ncmFtIiB3aWxsIG1lYW4gdGhlIENvbnRlbnQuXG5cCitcblwKK0NvbnRlbnQgaW5jbHVkZXMsIGJ1dCBpcyBub3QgbGltaXRlZCB0bywgc291cmNlIGNvZGUsIG9iamVjdCBjb2RlLFxuXAorZG9jdW1lbnRhdGlvbiBhbmQgb3RoZXIgZmlsZXMgbWFpbnRhaW5lZCBpbiB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uIHNvdXJjZSBjb2RlXG5cCityZXBvc2l0b3J5ICgiUmVwb3NpdG9yeSIpIGluIHNvZnR3YXJlIG1vZHVsZXMgKCJNb2R1bGVzIikgYW5kIG1hZGUgYXZhaWxhYmxlXG5cCithcyBkb3dubG9hZGFibGUgYXJjaGl2ZXMgKCJEb3dubG9hZHMiKS5cblwKK1xuXAorICAgICAgIC0gQ29udGVudCBtYXkgYmUgc3RydWN0dXJlZCBhbmQgcGFja2FnZWQgaW50byBtb2R1bGVzIHRvIGZhY2lsaXRhdGUgZGVsaXZlcmluZyxcblwKKyAgICAgICAgIGV4dGVuZGluZywgYW5kIHVwZ3JhZGluZyB0aGUgQ29udGVudC4gVHlwaWNhbCBtb2R1bGVzIG1heSBpbmNsdWRlIHBsdWctaW5zICgiUGx1Zy1pbnMiKSxcblwKKyAgICAgICAgIHBsdWctaW4gZnJhZ21lbnRzICgiRnJhZ21lbnRzIiksIGFuZCBmZWF0dXJlcyAoIkZlYXR1cmVzIikuXG5cCisgICAgICAgLSBFYWNoIFBsdWctaW4gb3IgRnJhZ21lbnQgbWF5IGJlIHBhY2thZ2VkIGFzIGEgc3ViLWRpcmVjdG9yeSBvciBKQVIgKEphdmEoVE0pIEFSY2hpdmUpXG5cCisgICAgICAgICBpbiBhIGRpcmVjdG9yeSBuYW1lZCAicGx1Z2lucyIuXG5cCisgICAgICAgLSBBIEZlYXR1cmUgaXMgYSBidW5kbGUgb2Ygb25lIG9yIG1vcmUgUGx1Zy1pbnMgYW5kL29yIEZyYWdtZW50cyBhbmQgYXNzb2NpYXRlZCBtYXRlcmlhbC5cblwKKyAgICAgICAgIEVhY2ggRmVhdHVyZSBtYXkgYmUgcGFja2FnZWQgYXMgYSBzdWItZGlyZWN0b3J5IGluIGEgZGlyZWN0b3J5IG5hbWVkICJmZWF0dXJlcyIuXG5cCisgICAgICAgICBXaXRoaW4gYSBGZWF0dXJlLCBmaWxlcyBuYW1lZCAiZmVhdHVyZS54bWwiIG1heSBjb250YWluIGEgbGlzdCBvZiB0aGUgbmFtZXMgYW5kIHZlcnNpb25cblwKKyAgICAgICAgIG51bWJlcnMgb2YgdGhlIFBsdWctaW5zIGFuZC9vciBGcmFnbWVudHMgYXNzb2NpYXRlZCB3aXRoIHRoYXQgRmVhdHVyZS5cblwKKyAgICAgICAtIEZlYXR1cmVzIG1heSBhbHNvIGluY2x1ZGUgb3RoZXIgRmVhdHVyZXMgKCJJbmNsdWRlZCBGZWF0dXJlcyIpLiBXaXRoaW4gYSBGZWF0dXJlLCBmaWxlc1xuXAorICAgICAgICAgbmFtZWQgImZlYXR1cmUueG1sIiBtYXkgY29udGFpbiBhIGxpc3Qgb2YgdGhlIG5hbWVzIGFuZCB2ZXJzaW9uIG51bWJlcnMgb2YgSW5jbHVkZWQgRmVhdHVyZXMuXG5cCitcblwKK1RoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBnb3Zlcm5pbmcgUGx1Zy1pbnMgYW5kIEZyYWdtZW50cyBzaG91bGQgYmVcblwKK2NvbnRhaW5lZCBpbiBmaWxlcyBuYW1lZCAiYWJvdXQuaHRtbCIgKCJBYm91dHMiKS4gVGhlIHRlcm1zIGFuZFxuXAorY29uZGl0aW9ucyBnb3Zlcm5pbmcgRmVhdHVyZXMgYW5kIEluY2x1ZGVkIEZlYXR1cmVzIHNob3VsZCBiZSBjb250YWluZWRcblwKK2luIGZpbGVzIG5hbWVkICJsaWNlbnNlLmh0bWwiICgiRmVhdHVyZSBMaWNlbnNlcyIpLiBBYm91dHMgYW5kIEZlYXR1cmVcblwKK0xpY2Vuc2VzIG1heSBiZSBsb2NhdGVkIGluIGFueSBkaXJlY3Rvcnkgb2YgYSBEb3dubG9hZCBvciBNb2R1bGVcblwKK2luY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvIHRoZSBmb2xsb3dpbmcgbG9jYXRpb25zOlxuXAorXG5cCisgICAgICAgLSBUaGUgdG9wLWxldmVsIChyb290KSBkaXJlY3RvcnlcblwKKyAgICAgICAtIFBsdWctaW4gYW5kIEZyYWdtZW50IGRpcmVjdG9yaWVzXG5cCisgICAgICAgLSBJbnNpZGUgUGx1Zy1pbnMgYW5kIEZyYWdtZW50cyBwYWNrYWdlZCBhcyBKQVJzXG5cCisgICAgICAgLSBTdWItZGlyZWN0b3JpZXMgb2YgdGhlIGRpcmVjdG9yeSBuYW1lZCAic3JjIiBvZiBjZXJ0YWluIFBsdWctaW5zXG5cCisgICAgICAgLSBGZWF0dXJlIGRpcmVjdG9yaWVzXG5cCitcblwKK05vdGU6IGlmIGEgRmVhdHVyZSBtYWRlIGF2YWlsYWJsZSBieSB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uIGlzIGluc3RhbGxlZCB1c2luZyB0aGVcblwKK1Byb3Zpc2lvbmluZyBUZWNobm9sb2d5IChhcyBkZWZpbmVkIGJlbG93KSwgeW91IG11c3QgYWdyZWUgdG8gYSBsaWNlbnNlICgiRmVhdHVyZSBcblwKK1VwZGF0ZSBMaWNlbnNlIikgZHVyaW5nIHRoZSBpbnN0YWxsYXRpb24gcHJvY2Vzcy4gSWYgdGhlIEZlYXR1cmUgY29udGFpbnNcblwKK0luY2x1ZGVkIEZlYXR1cmVzLCB0aGUgRmVhdHVyZSBVcGRhdGUgTGljZW5zZSBzaG91bGQgZWl0aGVyIHByb3ZpZGUgeW91XG5cCit3aXRoIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBnb3Zlcm5pbmcgdGhlIEluY2x1ZGVkIEZlYXR1cmVzIG9yIGluZm9ybVxuXAoreW91IHdoZXJlIHlvdSBjYW4gbG9jYXRlIHRoZW0uIEZlYXR1cmUgVXBkYXRlIExpY2Vuc2VzIG1heSBiZSBmb3VuZCBpblxuXAordGhlICJsaWNlbnNlIiBwcm9wZXJ0eSBvZiBmaWxlcyBuYW1lZCAiZmVhdHVyZS5wcm9wZXJ0aWVzIiBmb3VuZCB3aXRoaW4gYSBGZWF0dXJlLlxuXAorU3VjaCBBYm91dHMsIEZlYXR1cmUgTGljZW5zZXMsIGFuZCBGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlcyBjb250YWluIHRoZVxuXAordGVybXMgYW5kIGNvbmRpdGlvbnMgKG9yIHJlZmVyZW5jZXMgdG8gc3VjaCB0ZXJtcyBhbmQgY29uZGl0aW9ucykgdGhhdFxuXAorZ292ZXJuIHlvdXIgdXNlIG9mIHRoZSBhc3NvY2lhdGVkIENvbnRlbnQgaW4gdGhhdCBkaXJlY3RvcnkuXG5cCitcblwKK1RIRSBBQk9VVFMsIEZFQVRVUkUgTElDRU5TRVMsIEFORCBGRUFUVVJFIFVQREFURSBMSUNFTlNFUyBNQVkgUkVGRVJcblwKK1RPIFRIRSBFUEwgT1IgT1RIRVIgTElDRU5TRSBBR1JFRU1FTlRTLCBOT1RJQ0VTIE9SIFRFUk1TIEFORCBDT05ESVRJT05TLlxuXAorU09NRSBPRiBUSEVTRSBPVEhFUiBMSUNFTlNFIEFHUkVFTUVOVFMgTUFZIElOQ0xVREUgKEJVVCBBUkUgTk9UIExJTUlURUQgVE8pOlxuXAorXG5cCisgICAgICAgLSBDb21tb24gUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjAgKGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2NwbC12MTAuaHRtbClcblwKKyAgICAgICAtIEFwYWNoZSBTb2Z0d2FyZSBMaWNlbnNlIDEuMSAoYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFKVxuXAorICAgICAgIC0gQXBhY2hlIFNvZnR3YXJlIExpY2Vuc2UgMi4wIChhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wKVxuXAorICAgICAgIC0gTWV0cm8gTGluayBQdWJsaWMgTGljZW5zZSAxLjAwIChhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5vcGVuZ3JvdXAub3JnL29wZW5tb3RpZi9zdXBwb3J0ZXJzL21ldHJvbGluay9saWNlbnNlLmh0bWwpXG5cCisgICAgICAgLSBNb3ppbGxhIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4xIChhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5tb3ppbGxhLm9yZy9NUEwvTVBMLTEuMS5odG1sKVxuXAorXG5cCitJVCBJUyBZT1VSIE9CTElHQVRJT04gVE8gUkVBRCBBTkQgQUNDRVBUIEFMTCBTVUNIIFRFUk1TIEFORCBDT05ESVRJT05TIFBSSU9SXG5cCitUTyBVU0UgT0YgVEhFIENPTlRFTlQuIElmIG5vIEFib3V0LCBGZWF0dXJlIExpY2Vuc2UsIG9yIEZlYXR1cmUgVXBkYXRlIExpY2Vuc2VcblwKK2lzIHByb3ZpZGVkLCBwbGVhc2UgY29udGFjdCB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uIHRvIGRldGVybWluZSB3aGF0IHRlcm1zIGFuZCBjb25kaXRpb25zXG5cCitnb3Zlcm4gdGhhdCBwYXJ0aWN1bGFyIENvbnRlbnQuXG5cCitcblwKK1xuXFVzZSBvZiBQcm92aXNpb25pbmcgVGVjaG5vbG9neVxuXAorXG5cCitUaGUgRWNsaXBzZSBGb3VuZGF0aW9uIG1ha2VzIGF2YWlsYWJsZSBwcm92aXNpb25pbmcgc29mdHdhcmUsIGV4YW1wbGVzIG9mIHdoaWNoIGluY2x1ZGUsXG5cCitidXQgYXJlIG5vdCBsaW1pdGVkIHRvLCBwMiBhbmQgdGhlIEVjbGlwc2UgVXBkYXRlIE1hbmFnZXIgKCJQcm92aXNpb25pbmcgVGVjaG5vbG9neSIpIGZvclxuXAordGhlIHB1cnBvc2Ugb2YgYWxsb3dpbmcgdXNlcnMgdG8gaW5zdGFsbCBzb2Z0d2FyZSwgZG9jdW1lbnRhdGlvbiwgaW5mb3JtYXRpb24gYW5kL29yXG5cCitvdGhlciBtYXRlcmlhbHMgKGNvbGxlY3RpdmVseSAiSW5zdGFsbGFibGUgU29mdHdhcmUiKS4gVGhpcyBjYXBhYmlsaXR5IGlzIHByb3ZpZGVkIHdpdGhcblwKK3RoZSBpbnRlbnQgb2YgYWxsb3dpbmcgc3VjaCB1c2VycyB0byBpbnN0YWxsLCBleHRlbmQgYW5kIHVwZGF0ZSBFY2xpcHNlLWJhc2VkIHByb2R1Y3RzLlxuXAorSW5mb3JtYXRpb24gYWJvdXQgcGFja2FnaW5nIEluc3RhbGxhYmxlIFNvZnR3YXJlIGlzIGF2YWlsYWJsZSBhdFxuXAoraHR0cDovL2VjbGlwc2Uub3JnL2VxdWlub3gvcDIvcmVwb3NpdG9yeV9wYWNrYWdpbmcuaHRtbCAoIlNwZWNpZmljYXRpb24iKS5cblwKK1xuXAorWW91IG1heSB1c2UgUHJvdmlzaW9uaW5nIFRlY2hub2xvZ3kgdG8gYWxsb3cgb3RoZXIgcGFydGllcyB0byBpbnN0YWxsIEluc3RhbGxhYmxlIFNvZnR3YXJlLlxuXAorWW91IHNoYWxsIGJlIHJlc3BvbnNpYmxlIGZvciBlbmFibGluZyB0aGUgYXBwbGljYWJsZSBsaWNlbnNlIGFncmVlbWVudHMgcmVsYXRpbmcgdG8gdGhlXG5cCitJbnN0YWxsYWJsZSBTb2Z0d2FyZSB0byBiZSBwcmVzZW50ZWQgdG8sIGFuZCBhY2NlcHRlZCBieSwgdGhlIHVzZXJzIG9mIHRoZSBQcm92aXNpb25pbmcgVGVjaG5vbG9neVxuXAoraW4gYWNjb3JkYW5jZSB3aXRoIHRoZSBTcGVjaWZpY2F0aW9uLiBCeSB1c2luZyBQcm92aXNpb25pbmcgVGVjaG5vbG9neSBpbiBzdWNoIGEgbWFubmVyIGFuZFxuXAorbWFraW5nIGl0IGF2YWlsYWJsZSBpbiBhY2NvcmRhbmNlIHdpdGggdGhlIFNwZWNpZmljYXRpb24sIHlvdSBmdXJ0aGVyIGFja25vd2xlZGdlIHlvdXJcblwKK2FncmVlbWVudCB0bywgYW5kIHRoZSBhY3F1aXNpdGlvbiBvZiBhbGwgbmVjZXNzYXJ5IHJpZ2h0cyB0byBwZXJtaXQgdGhlIGZvbGxvd2luZzpcblwKK1xuXAorICAgICAgIDEuIEEgc2VyaWVzIG9mIGFjdGlvbnMgbWF5IG9jY3VyICgiUHJvdmlzaW9uaW5nIFByb2Nlc3MiKSBpbiB3aGljaCBhIHVzZXIgbWF5IGV4ZWN1dGVcblwKKyAgICAgICAgICB0aGUgUHJvdmlzaW9uaW5nIFRlY2hub2xvZ3kgb24gYSBtYWNoaW5lICgiVGFyZ2V0IE1hY2hpbmUiKSB3aXRoIHRoZSBpbnRlbnQgb2YgaW5zdGFsbGluZyxcblwKKyAgICAgICAgICBleHRlbmRpbmcgb3IgdXBkYXRpbmcgdGhlIGZ1bmN0aW9uYWxpdHkgb2YgYW4gRWNsaXBzZS1iYXNlZCBwcm9kdWN0LlxuXAorICAgICAgIDIuIER1cmluZyB0aGUgUHJvdmlzaW9uaW5nIFByb2Nlc3MsIHRoZSBQcm92aXNpb25pbmcgVGVjaG5vbG9neSBtYXkgY2F1c2UgdGhpcmQgcGFydHlcblwKKyAgICAgICAgICBJbnN0YWxsYWJsZSBTb2Z0d2FyZSBvciBhIHBvcnRpb24gdGhlcmVvZiB0byBiZSBhY2Nlc3NlZCBhbmQgY29waWVkIHRvIHRoZSBUYXJnZXQgTWFjaGluZS5cblwKKyAgICAgICAzLiBQdXJzdWFudCB0byB0aGUgU3BlY2lmaWNhdGlvbiwgeW91IHdpbGwgcHJvdmlkZSB0byB0aGUgdXNlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgdGhhdFxuXAorICAgICAgICAgIGdvdmVybiB0aGUgdXNlIG9mIHRoZSBJbnN0YWxsYWJsZSBTb2Z0d2FyZSAoIkluc3RhbGxhYmxlIFNvZnR3YXJlIEFncmVlbWVudCIpIGFuZCBzdWNoXG5cCisgICAgICAgICAgSW5zdGFsbGFibGUgU29mdHdhcmUgQWdyZWVtZW50IHNoYWxsIGJlIGFjY2Vzc2VkIGZyb20gdGhlIFRhcmdldCBNYWNoaW5lIGluIGFjY29yZGFuY2VcblwKKyAgICAgICAgICB3aXRoIHRoZSBTcGVjaWZpY2F0aW9uLiBTdWNoIEluc3RhbGxhYmxlIFNvZnR3YXJlIEFncmVlbWVudCBtdXN0IGluZm9ybSB0aGUgdXNlciBvZiB0aGVcblwKKyAgICAgICAgICB0ZXJtcyBhbmQgY29uZGl0aW9ucyB0aGF0IGdvdmVybiB0aGUgSW5zdGFsbGFibGUgU29mdHdhcmUgYW5kIG11c3Qgc29saWNpdCBhY2NlcHRhbmNlIGJ5XG5cCisgICAgICAgICAgdGhlIGVuZCB1c2VyIGluIHRoZSBtYW5uZXIgcHJlc2NyaWJlZCBpbiBzdWNoIEluc3RhbGxhYmxlIFNvZnR3YXJlIEFncmVlbWVudC4gVXBvbiBzdWNoXG5cCisgICAgICAgICAgaW5kaWNhdGlvbiBvZiBhZ3JlZW1lbnQgYnkgdGhlIHVzZXIsIHRoZSBwcm92aXNpb25pbmcgVGVjaG5vbG9neSB3aWxsIGNvbXBsZXRlIGluc3RhbGxhdGlvblxuXAorICAgICAgICAgIG9mIHRoZSBJbnN0YWxsYWJsZSBTb2Z0d2FyZS5cblwKK1xuXAorQ3J5cHRvZ3JhcGh5XG5cCitcblwKK0NvbnRlbnQgbWF5IGNvbnRhaW4gZW5jcnlwdGlvbiBzb2Z0d2FyZS4gVGhlIGNvdW50cnkgaW4gd2hpY2ggeW91IGFyZVxuXAorY3VycmVudGx5IG1heSBoYXZlIHJlc3RyaWN0aW9ucyBvbiB0aGUgaW1wb3J0LCBwb3NzZXNzaW9uLCBhbmQgdXNlLFxuXAorYW5kL29yIHJlLWV4cG9ydCB0byBhbm90aGVyIGNvdW50cnksIG9mIGVuY3J5cHRpb24gc29mdHdhcmUuIEJFRk9SRVxuXAordXNpbmcgYW55IGVuY3J5cHRpb24gc29mdHdhcmUsIHBsZWFzZSBjaGVjayB0aGUgY291bnRyeSdzIGxhd3MsXG5cCityZWd1bGF0aW9ucyBhbmQgcG9saWNpZXMgY29uY2VybmluZyB0aGUgaW1wb3J0LCBwb3NzZXNzaW9uLCBvciB1c2UsIGFuZFxuXAorcmUtZXhwb3J0IG9mIGVuY3J5cHRpb24gc29mdHdhcmUsIHRvIHNlZSBpZiB0aGlzIGlzIHBlcm1pdHRlZC5cblwKK1xuXAorSmF2YSBhbmQgYWxsIEphdmEtYmFzZWQgdHJhZGVtYXJrcyBhcmUgdHJhZGVtYXJrcyBvZiBPcmFjbGUgQ29ycG9yYXRpb24gaW4gdGhlIFVuaXRlZCBTdGF0ZXMsIG90aGVyIGNvdW50cmllcywgb3IgYm90aC5cbgorIyMjIyMjIyMjIyMgZW5kIG9mIGxpY2Vuc2UgcHJvcGVydHkgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5mZWF0dXJlL2ZlYXR1cmUueG1sIGIvZmVhdHVyZXMvb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5mZWF0dXJlL2ZlYXR1cmUueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZlMmE1MTEKLS0tIC9kZXYvbnVsbAorKysgYi9mZWF0dXJlcy9vcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmZlYXR1cmUvZmVhdHVyZS54bWwKQEAgLTAsMCArMSw2NCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxmZWF0dXJlCisgICAgICBpZD0ib3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5mZWF0dXJlIgorICAgICAgbGFiZWw9IiVmZWF0dXJlTmFtZSIKKyAgICAgIHZlcnNpb249IjEuMi4xIgorICAgICAgcHJvdmlkZXItbmFtZT0iJXByb3ZpZGVyTmFtZSI+CisKKyAgIDxkZXNjcmlwdGlvbj4KKyAgICAgICVkZXNjcmlwdGlvbgorICAgPC9kZXNjcmlwdGlvbj4KKworICAgPGNvcHlyaWdodD4KKyAgICAgICVjb3B5cmlnaHQKKyAgIDwvY29weXJpZ2h0PgorCisgICA8bGljZW5zZSB1cmw9IiVsaWNlbnNlVVJMIj4KKyAgICAgICVsaWNlbnNlCisgICA8L2xpY2Vuc2U+CisKKyAgIDx1cmw+CisgICAgICA8dXBkYXRlIGxhYmVsPSIldXBkYXRlU2l0ZU5hbWUiIHVybD0iaHR0cDovL2Rvd25sb2FkLmVjbGlwc2Uub3JnL3N0ZW0vdXBkYXRlLXNpdGUvIi8+CisgICA8L3VybD4KKworICAgPHJlcXVpcmVzPgorICAgICAgPGltcG9ydCBwbHVnaW49Im9yZy5lY2xpcHNlLmNvcmUucnVudGltZSIvPgorICAgICAgPGltcG9ydCBwbHVnaW49Im9yZy5lY2xpcHNlLmVtZi5lY29yZSIvPgorICAgICAgPGltcG9ydCBwbHVnaW49Im9yZy5lY2xpcHNlLmpmYWNlIi8+CisgICAgICA8aW1wb3J0IHBsdWdpbj0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlIi8+CisgICAgICA8aW1wb3J0IHBsdWdpbj0ib3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMiLz4KKyAgICAgIDxpbXBvcnQgcGx1Z2luPSJvcmcuZWNsaXBzZS51aS5pZGUiLz4KKyAgICAgIDxpbXBvcnQgcGx1Z2luPSJvcmcuZWNsaXBzZS51aSIvPgorICAgICAgPGltcG9ydCBwbHVnaW49Im9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscyIvPgorICAgICAgPGltcG9ydCBwbHVnaW49Im9yZy5lY2xpcHNlLnN0ZW0udXRpbC5sb2dnZXJzIi8+CisgICAgICA8aW1wb3J0IHBsdWdpbj0ib3JnLmVjbGlwc2Uuc3RlbS51aSIvPgorICAgICAgPGltcG9ydCBwbHVnaW49Im9yZy5lY2xpcHNlLnVpLm5hdmlnYXRvci5yZXNvdXJjZXMiLz4KKyAgICAgIDxpbXBvcnQgcGx1Z2luPSJvcmcuZWNsaXBzZS5lbWYuZWNvcmUuZWRpdCIvPgorICAgICAgPGltcG9ydCBwbHVnaW49Im9yZy5lY2xpcHNlLmJpcnQuY2hhcnQuZW5naW5lIi8+CisgICAgICA8aW1wb3J0IHBsdWdpbj0ib3JnLmVjbGlwc2UuYmlydC5jb3JlLnVpIi8+CisgICAgICA8aW1wb3J0IHBsdWdpbj0ib3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucyIvPgorICAgICAgPGltcG9ydCBwbHVnaW49Im9yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkiLz4KKyAgIDwvcmVxdWlyZXM+CisKKyAgIDxwbHVnaW4KKyAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzIgorICAgICAgICAgZG93bmxvYWQtc2l6ZT0iMCIKKyAgICAgICAgIGluc3RhbGwtc2l6ZT0iMCIKKyAgICAgICAgIHZlcnNpb249IjAuMC4wIgorICAgICAgICAgdW5wYWNrPSJmYWxzZSIvPgorCisgICA8cGx1Z2luCisgICAgICAgICBpZD0ib3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5hdXRvbWF0aWNleHBlcmltZW50IgorICAgICAgICAgZG93bmxvYWQtc2l6ZT0iMCIKKyAgICAgICAgIGluc3RhbGwtc2l6ZT0iMCIKKyAgICAgICAgIHZlcnNpb249IjAuMC4wIgorICAgICAgICAgdW5wYWNrPSJmYWxzZSIvPgorCisgICA8cGx1Z2luCisgICAgICAgICBpZD0ib3JnLmVjbGlwc2Uuc3RlbS51dGlsLmFuYWx5c2lzIgorICAgICAgICAgZG93bmxvYWQtc2l6ZT0iMCIKKyAgICAgICAgIGluc3RhbGwtc2l6ZT0iMCIKKyAgICAgICAgIHZlcnNpb249IjAuMC4wIgorICAgICAgICAgdW5wYWNrPSJmYWxzZSIvPgorCis8L2ZlYXR1cmU+CmRpZmYgLS1naXQgYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmZlYXR1cmUvbGljZW5zZS5odG1sIGIvZmVhdHVyZXMvb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5mZWF0dXJlL2xpY2Vuc2UuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMTg0Y2EzCi0tLSAvZGV2L251bGwKKysrIGIvZmVhdHVyZXMvb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5mZWF0dXJlL2xpY2Vuc2UuaHRtbApAQCAtMCwwICsxLDEwNyBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iSVNPLTg4NTktMSIgPz4KKzwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgWEhUTUwgMS4wIFN0cmljdC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbDEvRFREL3hodG1sMS1zdHJpY3QuZHRkIj4KKzxodG1sIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIj4KKzxoZWFkPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9SVNPLTg4NTktMSIgLz4KKzx0aXRsZT5FY2xpcHNlIEZvdW5kYXRpb24gU29mdHdhcmUgVXNlciBBZ3JlZW1lbnQ8L3RpdGxlPgorPC9oZWFkPgorCis8Ym9keSBsYW5nPSJFTi1VUyI+Cis8aDI+RWNsaXBzZSBGb3VuZGF0aW9uIFNvZnR3YXJlIFVzZXIgQWdyZWVtZW50PC9oMj4KKzxwPkFwcmlsIDE0LCAyMDEwPC9wPgorCis8aDM+VXNhZ2UgT2YgQ29udGVudDwvaDM+CisKKzxwPlRIRSBFQ0xJUFNFIEZPVU5EQVRJT04gTUFLRVMgQVZBSUxBQkxFIFNPRlRXQVJFLCBET0NVTUVOVEFUSU9OLCBJTkZPUk1BVElPTiBBTkQvT1IgT1RIRVIgTUFURVJJQUxTIEZPUiBPUEVOIFNPVVJDRSBQUk9KRUNUUworICAgKENPTExFQ1RJVkVMWSAmcXVvdDtDT05URU5UJnF1b3Q7KS4gIFVTRSBPRiBUSEUgQ09OVEVOVCBJUyBHT1ZFUk5FRCBCWSBUSEUgVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgVEhJUyBBR1JFRU1FTlQgQU5EL09SIFRIRSBURVJNUyBBTkQKKyAgIENPTkRJVElPTlMgT0YgTElDRU5TRSBBR1JFRU1FTlRTIE9SIE5PVElDRVMgSU5ESUNBVEVEIE9SIFJFRkVSRU5DRUQgQkVMT1cuICBCWSBVU0lORyBUSEUgQ09OVEVOVCwgWU9VIEFHUkVFIFRIQVQgWU9VUiBVU0UKKyAgIE9GIFRIRSBDT05URU5UIElTIEdPVkVSTkVEIEJZIFRISVMgQUdSRUVNRU5UIEFORC9PUiBUSEUgVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgQU5ZIEFQUExJQ0FCTEUgTElDRU5TRSBBR1JFRU1FTlRTIE9SCisgICBOT1RJQ0VTIElORElDQVRFRCBPUiBSRUZFUkVOQ0VEIEJFTE9XLiAgSUYgWU9VIERPIE5PVCBBR1JFRSBUTyBUSEUgVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgVEhJUyBBR1JFRU1FTlQgQU5EIFRIRSBURVJNUyBBTkQKKyAgIENPTkRJVElPTlMgT0YgQU5ZIEFQUExJQ0FCTEUgTElDRU5TRSBBR1JFRU1FTlRTIE9SIE5PVElDRVMgSU5ESUNBVEVEIE9SIFJFRkVSRU5DRUQgQkVMT1csIFRIRU4gWU9VIE1BWSBOT1QgVVNFIFRIRSBDT05URU5ULjwvcD4KKworPGgzPkFwcGxpY2FibGUgTGljZW5zZXM8L2gzPgorCis8cD5Vbmxlc3Mgb3RoZXJ3aXNlIGluZGljYXRlZCwgYWxsIENvbnRlbnQgbWFkZSBhdmFpbGFibGUgYnkgdGhlIEVjbGlwc2UgRm91bmRhdGlvbiBpcyBwcm92aWRlZCB0byB5b3UgdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4wCisgICAoJnF1b3Q7RVBMJnF1b3Q7KS4gIEEgY29weSBvZiB0aGUgRVBMIGlzIHByb3ZpZGVkIHdpdGggdGhpcyBDb250ZW50IGFuZCBpcyBhbHNvIGF2YWlsYWJsZSBhdCA8YSBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbCI+aHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWw8L2E+LgorICAgRm9yIHB1cnBvc2VzIG9mIHRoZSBFUEwsICZxdW90O1Byb2dyYW0mcXVvdDsgd2lsbCBtZWFuIHRoZSBDb250ZW50LjwvcD4KKworPHA+Q29udGVudCBpbmNsdWRlcywgYnV0IGlzIG5vdCBsaW1pdGVkIHRvLCBzb3VyY2UgY29kZSwgb2JqZWN0IGNvZGUsIGRvY3VtZW50YXRpb24gYW5kIG90aGVyIGZpbGVzIG1haW50YWluZWQgaW4gdGhlIEVjbGlwc2UgRm91bmRhdGlvbiBzb3VyY2UgY29kZQorICAgcmVwb3NpdG9yeSAoJnF1b3Q7UmVwb3NpdG9yeSZxdW90OykgaW4gc29mdHdhcmUgbW9kdWxlcyAoJnF1b3Q7TW9kdWxlcyZxdW90OykgYW5kIG1hZGUgYXZhaWxhYmxlIGFzIGRvd25sb2FkYWJsZSBhcmNoaXZlcyAoJnF1b3Q7RG93bmxvYWRzJnF1b3Q7KS48L3A+CisKKzx1bD4KKyAgICAgICA8bGk+Q29udGVudCBtYXkgYmUgc3RydWN0dXJlZCBhbmQgcGFja2FnZWQgaW50byBtb2R1bGVzIHRvIGZhY2lsaXRhdGUgZGVsaXZlcmluZywgZXh0ZW5kaW5nLCBhbmQgdXBncmFkaW5nIHRoZSBDb250ZW50LiAgVHlwaWNhbCBtb2R1bGVzIG1heSBpbmNsdWRlIHBsdWctaW5zICgmcXVvdDtQbHVnLWlucyZxdW90OyksIHBsdWctaW4gZnJhZ21lbnRzICgmcXVvdDtGcmFnbWVudHMmcXVvdDspLCBhbmQgZmVhdHVyZXMgKCZxdW90O0ZlYXR1cmVzJnF1b3Q7KS48L2xpPgorICAgICAgIDxsaT5FYWNoIFBsdWctaW4gb3IgRnJhZ21lbnQgbWF5IGJlIHBhY2thZ2VkIGFzIGEgc3ViLWRpcmVjdG9yeSBvciBKQVIgKEphdmEmdHJhZGU7IEFSY2hpdmUpIGluIGEgZGlyZWN0b3J5IG5hbWVkICZxdW90O3BsdWdpbnMmcXVvdDsuPC9saT4KKyAgICAgICA8bGk+QSBGZWF0dXJlIGlzIGEgYnVuZGxlIG9mIG9uZSBvciBtb3JlIFBsdWctaW5zIGFuZC9vciBGcmFnbWVudHMgYW5kIGFzc29jaWF0ZWQgbWF0ZXJpYWwuICBFYWNoIEZlYXR1cmUgbWF5IGJlIHBhY2thZ2VkIGFzIGEgc3ViLWRpcmVjdG9yeSBpbiBhIGRpcmVjdG9yeSBuYW1lZCAmcXVvdDtmZWF0dXJlcyZxdW90Oy4gIFdpdGhpbiBhIEZlYXR1cmUsIGZpbGVzIG5hbWVkICZxdW90O2ZlYXR1cmUueG1sJnF1b3Q7IG1heSBjb250YWluIGEgbGlzdCBvZiB0aGUgbmFtZXMgYW5kIHZlcnNpb24gbnVtYmVycyBvZiB0aGUgUGx1Zy1pbnMKKyAgICAgIGFuZC9vciBGcmFnbWVudHMgYXNzb2NpYXRlZCB3aXRoIHRoYXQgRmVhdHVyZS48L2xpPgorICAgICAgIDxsaT5GZWF0dXJlcyBtYXkgYWxzbyBpbmNsdWRlIG90aGVyIEZlYXR1cmVzICgmcXVvdDtJbmNsdWRlZCBGZWF0dXJlcyZxdW90OykuIFdpdGhpbiBhIEZlYXR1cmUsIGZpbGVzIG5hbWVkICZxdW90O2ZlYXR1cmUueG1sJnF1b3Q7IG1heSBjb250YWluIGEgbGlzdCBvZiB0aGUgbmFtZXMgYW5kIHZlcnNpb24gbnVtYmVycyBvZiBJbmNsdWRlZCBGZWF0dXJlcy48L2xpPgorPC91bD4KKworPHA+VGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIGdvdmVybmluZyBQbHVnLWlucyBhbmQgRnJhZ21lbnRzIHNob3VsZCBiZSBjb250YWluZWQgaW4gZmlsZXMgbmFtZWQgJnF1b3Q7YWJvdXQuaHRtbCZxdW90OyAoJnF1b3Q7QWJvdXRzJnF1b3Q7KS4gVGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIGdvdmVybmluZyBGZWF0dXJlcyBhbmQKK0luY2x1ZGVkIEZlYXR1cmVzIHNob3VsZCBiZSBjb250YWluZWQgaW4gZmlsZXMgbmFtZWQgJnF1b3Q7bGljZW5zZS5odG1sJnF1b3Q7ICgmcXVvdDtGZWF0dXJlIExpY2Vuc2VzJnF1b3Q7KS4gIEFib3V0cyBhbmQgRmVhdHVyZSBMaWNlbnNlcyBtYXkgYmUgbG9jYXRlZCBpbiBhbnkgZGlyZWN0b3J5IG9mIGEgRG93bmxvYWQgb3IgTW9kdWxlCitpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0byB0aGUgZm9sbG93aW5nIGxvY2F0aW9uczo8L3A+CisKKzx1bD4KKyAgICAgICA8bGk+VGhlIHRvcC1sZXZlbCAocm9vdCkgZGlyZWN0b3J5PC9saT4KKyAgICAgICA8bGk+UGx1Zy1pbiBhbmQgRnJhZ21lbnQgZGlyZWN0b3JpZXM8L2xpPgorICAgICAgIDxsaT5JbnNpZGUgUGx1Zy1pbnMgYW5kIEZyYWdtZW50cyBwYWNrYWdlZCBhcyBKQVJzPC9saT4KKyAgICAgICA8bGk+U3ViLWRpcmVjdG9yaWVzIG9mIHRoZSBkaXJlY3RvcnkgbmFtZWQgJnF1b3Q7c3JjJnF1b3Q7IG9mIGNlcnRhaW4gUGx1Zy1pbnM8L2xpPgorICAgICAgIDxsaT5GZWF0dXJlIGRpcmVjdG9yaWVzPC9saT4KKzwvdWw+CisKKzxwPk5vdGU6IGlmIGEgRmVhdHVyZSBtYWRlIGF2YWlsYWJsZSBieSB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uIGlzIGluc3RhbGxlZCB1c2luZyB0aGUgUHJvdmlzaW9uaW5nIFRlY2hub2xvZ3kgKGFzIGRlZmluZWQgYmVsb3cpLCB5b3UgbXVzdCBhZ3JlZSB0byBhIGxpY2Vuc2UgKCZxdW90O0ZlYXR1cmUgVXBkYXRlIExpY2Vuc2UmcXVvdDspIGR1cmluZyB0aGUKK2luc3RhbGxhdGlvbiBwcm9jZXNzLiAgSWYgdGhlIEZlYXR1cmUgY29udGFpbnMgSW5jbHVkZWQgRmVhdHVyZXMsIHRoZSBGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlIHNob3VsZCBlaXRoZXIgcHJvdmlkZSB5b3Ugd2l0aCB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgZ292ZXJuaW5nIHRoZSBJbmNsdWRlZCBGZWF0dXJlcyBvcgoraW5mb3JtIHlvdSB3aGVyZSB5b3UgY2FuIGxvY2F0ZSB0aGVtLiAgRmVhdHVyZSBVcGRhdGUgTGljZW5zZXMgbWF5IGJlIGZvdW5kIGluIHRoZSAmcXVvdDtsaWNlbnNlJnF1b3Q7IHByb3BlcnR5IG9mIGZpbGVzIG5hbWVkICZxdW90O2ZlYXR1cmUucHJvcGVydGllcyZxdW90OyBmb3VuZCB3aXRoaW4gYSBGZWF0dXJlLgorU3VjaCBBYm91dHMsIEZlYXR1cmUgTGljZW5zZXMsIGFuZCBGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlcyBjb250YWluIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyAob3IgcmVmZXJlbmNlcyB0byBzdWNoIHRlcm1zIGFuZCBjb25kaXRpb25zKSB0aGF0IGdvdmVybiB5b3VyIHVzZSBvZiB0aGUgYXNzb2NpYXRlZCBDb250ZW50IGluCit0aGF0IGRpcmVjdG9yeS48L3A+CisKKzxwPlRIRSBBQk9VVFMsIEZFQVRVUkUgTElDRU5TRVMsIEFORCBGRUFUVVJFIFVQREFURSBMSUNFTlNFUyBNQVkgUkVGRVIgVE8gVEhFIEVQTCBPUiBPVEhFUiBMSUNFTlNFIEFHUkVFTUVOVFMsIE5PVElDRVMgT1IgVEVSTVMgQU5EIENPTkRJVElPTlMuICBTT01FIE9GIFRIRVNFCitPVEhFUiBMSUNFTlNFIEFHUkVFTUVOVFMgTUFZIElOQ0xVREUgKEJVVCBBUkUgTk9UIExJTUlURUQgVE8pOjwvcD4KKworPHVsPgorICAgICAgIDxsaT5Db21tb24gUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjAgKGF2YWlsYWJsZSBhdCA8YSBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2NwbC12MTAuaHRtbCI+aHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9jcGwtdjEwLmh0bWw8L2E+KTwvbGk+CisgICAgICAgPGxpPkFwYWNoZSBTb2Z0d2FyZSBMaWNlbnNlIDEuMSAoYXZhaWxhYmxlIGF0IDxhIGhyZWY9Imh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFIj5odHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRTwvYT4pPC9saT4KKyAgICAgICA8bGk+QXBhY2hlIFNvZnR3YXJlIExpY2Vuc2UgMi4wIChhdmFpbGFibGUgYXQgPGEgaHJlZj0iaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wIj5odHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjA8L2E+KTwvbGk+CisgICAgICAgPGxpPk1ldHJvIExpbmsgUHVibGljIExpY2Vuc2UgMS4wMCAoYXZhaWxhYmxlIGF0IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbmdyb3VwLm9yZy9vcGVubW90aWYvc3VwcG9ydGVycy9tZXRyb2xpbmsvbGljZW5zZS5odG1sIj5odHRwOi8vd3d3Lm9wZW5ncm91cC5vcmcvb3Blbm1vdGlmL3N1cHBvcnRlcnMvbWV0cm9saW5rL2xpY2Vuc2UuaHRtbDwvYT4pPC9saT4KKyAgICAgICA8bGk+TW96aWxsYSBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMSAoYXZhaWxhYmxlIGF0IDxhIGhyZWY9Imh0dHA6Ly93d3cubW96aWxsYS5vcmcvTVBML01QTC0xLjEuaHRtbCI+aHR0cDovL3d3dy5tb3ppbGxhLm9yZy9NUEwvTVBMLTEuMS5odG1sPC9hPik8L2xpPgorPC91bD4KKworPHA+SVQgSVMgWU9VUiBPQkxJR0FUSU9OIFRPIFJFQUQgQU5EIEFDQ0VQVCBBTEwgU1VDSCBURVJNUyBBTkQgQ09ORElUSU9OUyBQUklPUiBUTyBVU0UgT0YgVEhFIENPTlRFTlQuICBJZiBubyBBYm91dCwgRmVhdHVyZSBMaWNlbnNlLCBvciBGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlIGlzIHByb3ZpZGVkLCBwbGVhc2UKK2NvbnRhY3QgdGhlIEVjbGlwc2UgRm91bmRhdGlvbiB0byBkZXRlcm1pbmUgd2hhdCB0ZXJtcyBhbmQgY29uZGl0aW9ucyBnb3Zlcm4gdGhhdCBwYXJ0aWN1bGFyIENvbnRlbnQuPC9wPgorCisKKzxoMz5Vc2Ugb2YgUHJvdmlzaW9uaW5nIFRlY2hub2xvZ3k8L2gzPgorCis8cD5UaGUgRWNsaXBzZSBGb3VuZGF0aW9uIG1ha2VzIGF2YWlsYWJsZSBwcm92aXNpb25pbmcgc29mdHdhcmUsIGV4YW1wbGVzIG9mIHdoaWNoIGluY2x1ZGUsIGJ1dCBhcmUgbm90IGxpbWl0ZWQgdG8sIHAyIGFuZCB0aGUgRWNsaXBzZQorICAgVXBkYXRlIE1hbmFnZXIgKCZxdW90O1Byb3Zpc2lvbmluZyBUZWNobm9sb2d5JnF1b3Q7KSBmb3IgdGhlIHB1cnBvc2Ugb2YgYWxsb3dpbmcgdXNlcnMgdG8gaW5zdGFsbCBzb2Z0d2FyZSwgZG9jdW1lbnRhdGlvbiwgaW5mb3JtYXRpb24gYW5kL29yCisgICBvdGhlciBtYXRlcmlhbHMgKGNvbGxlY3RpdmVseSAmcXVvdDtJbnN0YWxsYWJsZSBTb2Z0d2FyZSZxdW90OykuIFRoaXMgY2FwYWJpbGl0eSBpcyBwcm92aWRlZCB3aXRoIHRoZSBpbnRlbnQgb2YgYWxsb3dpbmcgc3VjaCB1c2VycyB0bworICAgaW5zdGFsbCwgZXh0ZW5kIGFuZCB1cGRhdGUgRWNsaXBzZS1iYXNlZCBwcm9kdWN0cy4gSW5mb3JtYXRpb24gYWJvdXQgcGFja2FnaW5nIEluc3RhbGxhYmxlIFNvZnR3YXJlIGlzIGF2YWlsYWJsZSBhdCA8YQorICAgICAgIGhyZWY9Imh0dHA6Ly9lY2xpcHNlLm9yZy9lcXVpbm94L3AyL3JlcG9zaXRvcnlfcGFja2FnaW5nLmh0bWwiPmh0dHA6Ly9lY2xpcHNlLm9yZy9lcXVpbm94L3AyL3JlcG9zaXRvcnlfcGFja2FnaW5nLmh0bWw8L2E+CisgICAoJnF1b3Q7U3BlY2lmaWNhdGlvbiZxdW90OykuPC9wPgorCis8cD5Zb3UgbWF5IHVzZSBQcm92aXNpb25pbmcgVGVjaG5vbG9neSB0byBhbGxvdyBvdGhlciBwYXJ0aWVzIHRvIGluc3RhbGwgSW5zdGFsbGFibGUgU29mdHdhcmUuIFlvdSBzaGFsbCBiZSByZXNwb25zaWJsZSBmb3IgZW5hYmxpbmcgdGhlCisgICBhcHBsaWNhYmxlIGxpY2Vuc2UgYWdyZWVtZW50cyByZWxhdGluZyB0byB0aGUgSW5zdGFsbGFibGUgU29mdHdhcmUgdG8gYmUgcHJlc2VudGVkIHRvLCBhbmQgYWNjZXB0ZWQgYnksIHRoZSB1c2VycyBvZiB0aGUgUHJvdmlzaW9uaW5nIFRlY2hub2xvZ3kKKyAgIGluIGFjY29yZGFuY2Ugd2l0aCB0aGUgU3BlY2lmaWNhdGlvbi4gQnkgdXNpbmcgUHJvdmlzaW9uaW5nIFRlY2hub2xvZ3kgaW4gc3VjaCBhIG1hbm5lciBhbmQgbWFraW5nIGl0IGF2YWlsYWJsZSBpbiBhY2NvcmRhbmNlIHdpdGggdGhlCisgICBTcGVjaWZpY2F0aW9uLCB5b3UgZnVydGhlciBhY2tub3dsZWRnZSB5b3VyIGFncmVlbWVudCB0bywgYW5kIHRoZSBhY3F1aXNpdGlvbiBvZiBhbGwgbmVjZXNzYXJ5IHJpZ2h0cyB0byBwZXJtaXQgdGhlIGZvbGxvd2luZzo8L3A+CisKKzxvbD4KKyAgICAgICA8bGk+QSBzZXJpZXMgb2YgYWN0aW9ucyBtYXkgb2NjdXIgKCZxdW90O1Byb3Zpc2lvbmluZyBQcm9jZXNzJnF1b3Q7KSBpbiB3aGljaCBhIHVzZXIgbWF5IGV4ZWN1dGUgdGhlIFByb3Zpc2lvbmluZyBUZWNobm9sb2d5CisgICAgICAgb24gYSBtYWNoaW5lICgmcXVvdDtUYXJnZXQgTWFjaGluZSZxdW90Oykgd2l0aCB0aGUgaW50ZW50IG9mIGluc3RhbGxpbmcsIGV4dGVuZGluZyBvciB1cGRhdGluZyB0aGUgZnVuY3Rpb25hbGl0eSBvZiBhbiBFY2xpcHNlLWJhc2VkCisgICAgICAgcHJvZHVjdC48L2xpPgorICAgICAgIDxsaT5EdXJpbmcgdGhlIFByb3Zpc2lvbmluZyBQcm9jZXNzLCB0aGUgUHJvdmlzaW9uaW5nIFRlY2hub2xvZ3kgbWF5IGNhdXNlIHRoaXJkIHBhcnR5IEluc3RhbGxhYmxlIFNvZnR3YXJlIG9yIGEgcG9ydGlvbiB0aGVyZW9mIHRvIGJlCisgICAgICAgYWNjZXNzZWQgYW5kIGNvcGllZCB0byB0aGUgVGFyZ2V0IE1hY2hpbmUuPC9saT4KKyAgICAgICA8bGk+UHVyc3VhbnQgdG8gdGhlIFNwZWNpZmljYXRpb24sIHlvdSB3aWxsIHByb3ZpZGUgdG8gdGhlIHVzZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIHRoYXQgZ292ZXJuIHRoZSB1c2Ugb2YgdGhlIEluc3RhbGxhYmxlCisgICAgICAgU29mdHdhcmUgKCZxdW90O0luc3RhbGxhYmxlIFNvZnR3YXJlIEFncmVlbWVudCZxdW90OykgYW5kIHN1Y2ggSW5zdGFsbGFibGUgU29mdHdhcmUgQWdyZWVtZW50IHNoYWxsIGJlIGFjY2Vzc2VkIGZyb20gdGhlIFRhcmdldAorICAgICAgIE1hY2hpbmUgaW4gYWNjb3JkYW5jZSB3aXRoIHRoZSBTcGVjaWZpY2F0aW9uLiBTdWNoIEluc3RhbGxhYmxlIFNvZnR3YXJlIEFncmVlbWVudCBtdXN0IGluZm9ybSB0aGUgdXNlciBvZiB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgdGhhdCBnb3Zlcm4KKyAgICAgICB0aGUgSW5zdGFsbGFibGUgU29mdHdhcmUgYW5kIG11c3Qgc29saWNpdCBhY2NlcHRhbmNlIGJ5IHRoZSBlbmQgdXNlciBpbiB0aGUgbWFubmVyIHByZXNjcmliZWQgaW4gc3VjaCBJbnN0YWxsYWJsZSBTb2Z0d2FyZSBBZ3JlZW1lbnQuIFVwb24gc3VjaAorICAgICAgIGluZGljYXRpb24gb2YgYWdyZWVtZW50IGJ5IHRoZSB1c2VyLCB0aGUgcHJvdmlzaW9uaW5nIFRlY2hub2xvZ3kgd2lsbCBjb21wbGV0ZSBpbnN0YWxsYXRpb24gb2YgdGhlIEluc3RhbGxhYmxlIFNvZnR3YXJlLjwvbGk+Cis8L29sPgorCis8aDM+Q3J5cHRvZ3JhcGh5PC9oMz4KKworPHA+Q29udGVudCBtYXkgY29udGFpbiBlbmNyeXB0aW9uIHNvZnR3YXJlLiBUaGUgY291bnRyeSBpbiB3aGljaCB5b3UgYXJlIGN1cnJlbnRseSBtYXkgaGF2ZSByZXN0cmljdGlvbnMgb24gdGhlIGltcG9ydCwgcG9zc2Vzc2lvbiwgYW5kIHVzZSwgYW5kL29yIHJlLWV4cG9ydCB0bworICAgYW5vdGhlciBjb3VudHJ5LCBvZiBlbmNyeXB0aW9uIHNvZnR3YXJlLiBCRUZPUkUgdXNpbmcgYW55IGVuY3J5cHRpb24gc29mdHdhcmUsIHBsZWFzZSBjaGVjayB0aGUgY291bnRyeSdzIGxhd3MsIHJlZ3VsYXRpb25zIGFuZCBwb2xpY2llcyBjb25jZXJuaW5nIHRoZSBpbXBvcnQsCisgICBwb3NzZXNzaW9uLCBvciB1c2UsIGFuZCByZS1leHBvcnQgb2YgZW5jcnlwdGlvbiBzb2Z0d2FyZSwgdG8gc2VlIGlmIHRoaXMgaXMgcGVybWl0dGVkLjwvcD4KKworPHA+PHNtYWxsPkphdmEgYW5kIGFsbCBKYXZhLWJhc2VkIHRyYWRlbWFya3MgYXJlIHRyYWRlbWFya3Mgb2YgT3JhY2xlIENvcnBvcmF0aW9uIGluIHRoZSBVbml0ZWQgU3RhdGVzLCBvdGhlciBjb3VudHJpZXMsIG9yIGJvdGguPC9zbWFsbD48L3A+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS5zdGVtLmNvcmUuZmVhdHVyZS8ucHJvamVjdCBiL2ZlYXR1cmVzL29yZy5lY2xpcHNlLnN0ZW0uY29yZS5mZWF0dXJlLy5wcm9qZWN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM3NDU1YzkKLS0tIC9kZXYvbnVsbAorKysgYi9mZWF0dXJlcy9vcmcuZWNsaXBzZS5zdGVtLmNvcmUuZmVhdHVyZS8ucHJvamVjdApAQCAtMCwwICsxLDE3IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPHByb2plY3REZXNjcmlwdGlvbj4KKwk8bmFtZT5vcmcuZWNsaXBzZS5zdGVtLmNvcmUuZmVhdHVyZTwvbmFtZT4KKwk8Y29tbWVudD48L2NvbW1lbnQ+CisJPHByb2plY3RzPgorCTwvcHJvamVjdHM+CisJPGJ1aWxkU3BlYz4KKwkJPGJ1aWxkQ29tbWFuZD4KKwkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5GZWF0dXJlQnVpbGRlcjwvbmFtZT4KKwkJCTxhcmd1bWVudHM+CisJCQk8L2FyZ3VtZW50cz4KKwkJPC9idWlsZENvbW1hbmQ+CisJPC9idWlsZFNwZWM+CisJPG5hdHVyZXM+CisJCTxuYXR1cmU+b3JnLmVjbGlwc2UucGRlLkZlYXR1cmVOYXR1cmU8L25hdHVyZT4KKwk8L25hdHVyZXM+Cis8L3Byb2plY3REZXNjcmlwdGlvbj4KZGlmZiAtLWdpdCBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLnN0ZW0uY29yZS5mZWF0dXJlL2J1aWxkLnByb3BlcnRpZXMgYi9mZWF0dXJlcy9vcmcuZWNsaXBzZS5zdGVtLmNvcmUuZmVhdHVyZS9idWlsZC5wcm9wZXJ0aWVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI3NGFmODYKLS0tIC9kZXYvbnVsbAorKysgYi9mZWF0dXJlcy9vcmcuZWNsaXBzZS5zdGVtLmNvcmUuZmVhdHVyZS9idWlsZC5wcm9wZXJ0aWVzCkBAIC0wLDAgKzEsNCBAQAorYmluLmluY2x1ZGVzID0gZmVhdHVyZS54bWwsXAorICAgICAgICAgICAgICAgZmVhdHVyZS5wcm9wZXJ0aWVzLFwKKyAgICAgICAgICAgICAgIGVwbC12MTAuaHRtbCxcCisgICAgICAgICAgICAgICBsaWNlbnNlLmh0bWwKZGlmZiAtLWdpdCBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLnN0ZW0uY29yZS5mZWF0dXJlL2VwbC12MTAuaHRtbCBiL2ZlYXR1cmVzL29yZy5lY2xpcHNlLnN0ZW0uY29yZS5mZWF0dXJlL2VwbC12MTAuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZDRiMTk2Ci0tLSAvZGV2L251bGwKKysrIGIvZmVhdHVyZXMvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmZlYXR1cmUvZXBsLXYxMC5odG1sCkBAIC0wLDAgKzEsMzI4IEBACis8aHRtbCB4bWxuczpvPSJ1cm46c2NoZW1hcy1taWNyb3NvZnQtY29tOm9mZmljZTpvZmZpY2UiCit4bWxuczp3PSJ1cm46c2NoZW1hcy1taWNyb3NvZnQtY29tOm9mZmljZTp3b3JkIgoreG1sbnM9Imh0dHA6Ly93d3cudzMub3JnL1RSL1JFQy1odG1sNDAiPgorCis8aGVhZD4KKzxtZXRhIGh0dHAtZXF1aXY9Q29udGVudC1UeXBlIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD13aW5kb3dzLTEyNTIiPgorPG1ldGEgbmFtZT1Qcm9nSWQgY29udGVudD1Xb3JkLkRvY3VtZW50PgorPG1ldGEgbmFtZT1HZW5lcmF0b3IgY29udGVudD0iTWljcm9zb2Z0IFdvcmQgOSI+Cis8bWV0YSBuYW1lPU9yaWdpbmF0b3IgY29udGVudD0iTWljcm9zb2Z0IFdvcmQgOSI+Cis8bGluayByZWw9RmlsZS1MaXN0CitocmVmPSIuL0VjbGlwc2UlMjBFUEwlMjAyMDAzXzExXzEwJTIwRmluYWxfZmlsZXMvZmlsZWxpc3QueG1sIj4KKzx0aXRsZT5FY2xpcHNlIFB1YmxpYyBMaWNlbnNlIC0gVmVyc2lvbiAxLjA8L3RpdGxlPgorPCEtLVtpZiBndGUgbXNvIDldPjx4bWw+CisgPG86RG9jdW1lbnRQcm9wZXJ0aWVzPgorICA8bzpSZXZpc2lvbj4yPC9vOlJldmlzaW9uPgorICA8bzpUb3RhbFRpbWU+MzwvbzpUb3RhbFRpbWU+CisgIDxvOkNyZWF0ZWQ+MjAwNC0wMy0wNVQyMzowMzowMFo8L286Q3JlYXRlZD4KKyAgPG86TGFzdFNhdmVkPjIwMDQtMDMtMDVUMjM6MDM6MDBaPC9vOkxhc3RTYXZlZD4KKyAgPG86UGFnZXM+NDwvbzpQYWdlcz4KKyAgPG86V29yZHM+MTYyNjwvbzpXb3Jkcz4KKyAgPG86Q2hhcmFjdGVycz45MjcwPC9vOkNoYXJhY3RlcnM+CisgICA8bzpMaW5lcz43NzwvbzpMaW5lcz4KKyAgPG86UGFyYWdyYXBocz4xODwvbzpQYXJhZ3JhcGhzPgorICA8bzpDaGFyYWN0ZXJzV2l0aFNwYWNlcz4xMTM4NDwvbzpDaGFyYWN0ZXJzV2l0aFNwYWNlcz4KKyAgPG86VmVyc2lvbj45LjQ0MDI8L286VmVyc2lvbj4KKyA8L286RG9jdW1lbnRQcm9wZXJ0aWVzPgorPC94bWw+PCFbZW5kaWZdLS0+PCEtLVtpZiBndGUgbXNvIDldPjx4bWw+CisgPHc6V29yZERvY3VtZW50PgorICA8dzpUcmFja1JldmlzaW9ucy8+CisgPC93OldvcmREb2N1bWVudD4KKzwveG1sPjwhW2VuZGlmXS0tPgorPHN0eWxlPgorPCEtLQorIC8qIEZvbnQgRGVmaW5pdGlvbnMgKi8KK0Bmb250LWZhY2UKKwl7Zm9udC1mYW1pbHk6VGFob21hOworCXBhbm9zZS0xOjIgMTEgNiA0IDMgNSA0IDQgMiA0OworCW1zby1mb250LWNoYXJzZXQ6MDsKKwltc28tZ2VuZXJpYy1mb250LWZhbWlseTpzd2lzczsKKwltc28tZm9udC1waXRjaDp2YXJpYWJsZTsKKwltc28tZm9udC1zaWduYXR1cmU6NTUzNjc5NDk1IC0yMTQ3NDgzNjQ4IDggMCA2NjA0NyAwO30KKyAvKiBTdHlsZSBEZWZpbml0aW9ucyAqLworcC5Nc29Ob3JtYWwsIGxpLk1zb05vcm1hbCwgZGl2Lk1zb05vcm1hbAorCXttc28tc3R5bGUtcGFyZW50OiIiOworCW1hcmdpbjowaW47CisJbWFyZ2luLWJvdHRvbTouMDAwMXB0OworCW1zby1wYWdpbmF0aW9uOndpZG93LW9ycGhhbjsKKwlmb250LXNpemU6MTIuMHB0OworCWZvbnQtZmFtaWx5OiJUaW1lcyBOZXcgUm9tYW4iOworCW1zby1mYXJlYXN0LWZvbnQtZmFtaWx5OiJUaW1lcyBOZXcgUm9tYW4iO30KK3AKKwl7bWFyZ2luLXJpZ2h0OjBpbjsKKwltc28tbWFyZ2luLXRvcC1hbHQ6YXV0bzsKKwltc28tbWFyZ2luLWJvdHRvbS1hbHQ6YXV0bzsKKwltYXJnaW4tbGVmdDowaW47CisJbXNvLXBhZ2luYXRpb246d2lkb3ctb3JwaGFuOworCWZvbnQtc2l6ZToxMi4wcHQ7CisJZm9udC1mYW1pbHk6IlRpbWVzIE5ldyBSb21hbiI7CisJbXNvLWZhcmVhc3QtZm9udC1mYW1pbHk6IlRpbWVzIE5ldyBSb21hbiI7fQorcC5CYWxsb29uVGV4dCwgbGkuQmFsbG9vblRleHQsIGRpdi5CYWxsb29uVGV4dAorCXttc28tc3R5bGUtbmFtZToiQmFsbG9vbiBUZXh0IjsKKwltYXJnaW46MGluOworCW1hcmdpbi1ib3R0b206LjAwMDFwdDsKKwltc28tcGFnaW5hdGlvbjp3aWRvdy1vcnBoYW47CisJZm9udC1zaXplOjguMHB0OworCWZvbnQtZmFtaWx5OlRhaG9tYTsKKwltc28tZmFyZWFzdC1mb250LWZhbWlseToiVGltZXMgTmV3IFJvbWFuIjt9CitAcGFnZSBTZWN0aW9uMQorCXtzaXplOjguNWluIDExLjBpbjsKKwltYXJnaW46MS4waW4gMS4yNWluIDEuMGluIDEuMjVpbjsKKwltc28taGVhZGVyLW1hcmdpbjouNWluOworCW1zby1mb290ZXItbWFyZ2luOi41aW47CisJbXNvLXBhcGVyLXNvdXJjZTowO30KK2Rpdi5TZWN0aW9uMQorCXtwYWdlOlNlY3Rpb24xO30KKy0tPgorPC9zdHlsZT4KKzwvaGVhZD4KKworPGJvZHkgbGFuZz1FTi1VUyBzdHlsZT0ndGFiLWludGVydmFsOi41aW4nPgorCis8ZGl2IGNsYXNzPVNlY3Rpb24xPgorCis8cCBhbGlnbj1jZW50ZXIgc3R5bGU9J3RleHQtYWxpZ246Y2VudGVyJz48Yj5FY2xpcHNlIFB1YmxpYyBMaWNlbnNlIC0gdiAxLjA8L2I+Cis8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5USEUgQUNDT01QQU5ZSU5HIFBST0dSQU0gSVMgUFJPVklERUQgVU5ERVIKK1RIRSBURVJNUyBPRiBUSElTIEVDTElQU0UgUFVCTElDIExJQ0VOU0UgKCZxdW90O0FHUkVFTUVOVCZxdW90OykuIEFOWSBVU0UsCitSRVBST0RVQ1RJT04gT1IgRElTVFJJQlVUSU9OIE9GIFRIRSBQUk9HUkFNIENPTlNUSVRVVEVTIFJFQ0lQSUVOVCdTIEFDQ0VQVEFOQ0UKK09GIFRISVMgQUdSRUVNRU5ULjwvc3Bhbj4gPC9wPgorCis8cD48Yj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+MS4gREVGSU5JVElPTlM8L3NwYW4+PC9iPiA8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4mcXVvdDtDb250cmlidXRpb24mcXVvdDsgbWVhbnM6PC9zcGFuPiA8L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmEpCitpbiB0aGUgY2FzZSBvZiB0aGUgaW5pdGlhbCBDb250cmlidXRvciwgdGhlIGluaXRpYWwgY29kZSBhbmQgZG9jdW1lbnRhdGlvbgorZGlzdHJpYnV0ZWQgdW5kZXIgdGhpcyBBZ3JlZW1lbnQsIGFuZDxiciBjbGVhcj1sZWZ0PgorYikgaW4gdGhlIGNhc2Ugb2YgZWFjaCBzdWJzZXF1ZW50IENvbnRyaWJ1dG9yOjwvc3Bhbj48L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmkpCitjaGFuZ2VzIHRvIHRoZSBQcm9ncmFtLCBhbmQ8L3NwYW4+PC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5paSkKK2FkZGl0aW9ucyB0byB0aGUgUHJvZ3JhbTs8L3NwYW4+PC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz53aGVyZQorc3VjaCBjaGFuZ2VzIGFuZC9vciBhZGRpdGlvbnMgdG8gdGhlIFByb2dyYW0gb3JpZ2luYXRlIGZyb20gYW5kIGFyZSBkaXN0cmlidXRlZAorYnkgdGhhdCBwYXJ0aWN1bGFyIENvbnRyaWJ1dG9yLiBBIENvbnRyaWJ1dGlvbiAnb3JpZ2luYXRlcycgZnJvbSBhIENvbnRyaWJ1dG9yCitpZiBpdCB3YXMgYWRkZWQgdG8gdGhlIFByb2dyYW0gYnkgc3VjaCBDb250cmlidXRvciBpdHNlbGYgb3IgYW55b25lIGFjdGluZyBvbgorc3VjaCBDb250cmlidXRvcidzIGJlaGFsZi4gQ29udHJpYnV0aW9ucyBkbyBub3QgaW5jbHVkZSBhZGRpdGlvbnMgdG8gdGhlCitQcm9ncmFtIHdoaWNoOiAoaSkgYXJlIHNlcGFyYXRlIG1vZHVsZXMgb2Ygc29mdHdhcmUgZGlzdHJpYnV0ZWQgaW4gY29uanVuY3Rpb24KK3dpdGggdGhlIFByb2dyYW0gdW5kZXIgdGhlaXIgb3duIGxpY2Vuc2UgYWdyZWVtZW50LCBhbmQgKGlpKSBhcmUgbm90IGRlcml2YXRpdmUKK3dvcmtzIG9mIHRoZSBQcm9ncmFtLiA8L3NwYW4+PC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+JnF1b3Q7Q29udHJpYnV0b3ImcXVvdDsgbWVhbnMgYW55IHBlcnNvbiBvcgorZW50aXR5IHRoYXQgZGlzdHJpYnV0ZXMgdGhlIFByb2dyYW0uPC9zcGFuPiA8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4mcXVvdDtMaWNlbnNlZCBQYXRlbnRzICZxdW90OyBtZWFuIHBhdGVudAorY2xhaW1zIGxpY2Vuc2FibGUgYnkgYSBDb250cmlidXRvciB3aGljaCBhcmUgbmVjZXNzYXJpbHkgaW5mcmluZ2VkIGJ5IHRoZSB1c2UKK29yIHNhbGUgb2YgaXRzIENvbnRyaWJ1dGlvbiBhbG9uZSBvciB3aGVuIGNvbWJpbmVkIHdpdGggdGhlIFByb2dyYW0uIDwvc3Bhbj48L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4mcXVvdDtQcm9ncmFtJnF1b3Q7IG1lYW5zIHRoZSBDb250cmlidXRpb25zCitkaXN0cmlidXRlZCBpbiBhY2NvcmRhbmNlIHdpdGggdGhpcyBBZ3JlZW1lbnQuPC9zcGFuPiA8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4mcXVvdDtSZWNpcGllbnQmcXVvdDsgbWVhbnMgYW55b25lIHdobworcmVjZWl2ZXMgdGhlIFByb2dyYW0gdW5kZXIgdGhpcyBBZ3JlZW1lbnQsIGluY2x1ZGluZyBhbGwgQ29udHJpYnV0b3JzLjwvc3Bhbj4gPC9wPgorCis8cD48Yj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+Mi4gR1JBTlQgT0YgUklHSFRTPC9zcGFuPjwvYj4gPC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5hKQorU3ViamVjdCB0byB0aGUgdGVybXMgb2YgdGhpcyBBZ3JlZW1lbnQsIGVhY2ggQ29udHJpYnV0b3IgaGVyZWJ5IGdyYW50cyBSZWNpcGllbnQKK2Egbm9uLWV4Y2x1c2l2ZSwgd29ybGR3aWRlLCByb3lhbHR5LWZyZWUgY29weXJpZ2h0IGxpY2Vuc2UgdG88c3Bhbgorc3R5bGU9J2NvbG9yOnJlZCc+IDwvc3Bhbj5yZXByb2R1Y2UsIHByZXBhcmUgZGVyaXZhdGl2ZSB3b3JrcyBvZiwgcHVibGljbHkKK2Rpc3BsYXksIHB1YmxpY2x5IHBlcmZvcm0sIGRpc3RyaWJ1dGUgYW5kIHN1YmxpY2Vuc2UgdGhlIENvbnRyaWJ1dGlvbiBvZiBzdWNoCitDb250cmlidXRvciwgaWYgYW55LCBhbmQgc3VjaCBkZXJpdmF0aXZlIHdvcmtzLCBpbiBzb3VyY2UgY29kZSBhbmQgb2JqZWN0IGNvZGUKK2Zvcm0uPC9zcGFuPjwvcD4KKworPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YikKK1N1YmplY3QgdG8gdGhlIHRlcm1zIG9mIHRoaXMgQWdyZWVtZW50LCBlYWNoIENvbnRyaWJ1dG9yIGhlcmVieSBncmFudHMKK1JlY2lwaWVudCBhIG5vbi1leGNsdXNpdmUsIHdvcmxkd2lkZSw8c3BhbiBzdHlsZT0nY29sb3I6Z3JlZW4nPiA8L3NwYW4+cm95YWx0eS1mcmVlCitwYXRlbnQgbGljZW5zZSB1bmRlciBMaWNlbnNlZCBQYXRlbnRzIHRvIG1ha2UsIHVzZSwgc2VsbCwgb2ZmZXIgdG8gc2VsbCwgaW1wb3J0CithbmQgb3RoZXJ3aXNlIHRyYW5zZmVyIHRoZSBDb250cmlidXRpb24gb2Ygc3VjaCBDb250cmlidXRvciwgaWYgYW55LCBpbiBzb3VyY2UKK2NvZGUgYW5kIG9iamVjdCBjb2RlIGZvcm0uIFRoaXMgcGF0ZW50IGxpY2Vuc2Ugc2hhbGwgYXBwbHkgdG8gdGhlIGNvbWJpbmF0aW9uCitvZiB0aGUgQ29udHJpYnV0aW9uIGFuZCB0aGUgUHJvZ3JhbSBpZiwgYXQgdGhlIHRpbWUgdGhlIENvbnRyaWJ1dGlvbiBpcyBhZGRlZAorYnkgdGhlIENvbnRyaWJ1dG9yLCBzdWNoIGFkZGl0aW9uIG9mIHRoZSBDb250cmlidXRpb24gY2F1c2VzIHN1Y2ggY29tYmluYXRpb24KK3RvIGJlIGNvdmVyZWQgYnkgdGhlIExpY2Vuc2VkIFBhdGVudHMuIFRoZSBwYXRlbnQgbGljZW5zZSBzaGFsbCBub3QgYXBwbHkgdG8KK2FueSBvdGhlciBjb21iaW5hdGlvbnMgd2hpY2ggaW5jbHVkZSB0aGUgQ29udHJpYnV0aW9uLiBObyBoYXJkd2FyZSBwZXIgc2UgaXMKK2xpY2Vuc2VkIGhlcmV1bmRlci4gPC9zcGFuPjwvcD4KKworPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YykKK1JlY2lwaWVudCB1bmRlcnN0YW5kcyB0aGF0IGFsdGhvdWdoIGVhY2ggQ29udHJpYnV0b3IgZ3JhbnRzIHRoZSBsaWNlbnNlcyB0byBpdHMKK0NvbnRyaWJ1dGlvbnMgc2V0IGZvcnRoIGhlcmVpbiwgbm8gYXNzdXJhbmNlcyBhcmUgcHJvdmlkZWQgYnkgYW55IENvbnRyaWJ1dG9yCit0aGF0IHRoZSBQcm9ncmFtIGRvZXMgbm90IGluZnJpbmdlIHRoZSBwYXRlbnQgb3Igb3RoZXIgaW50ZWxsZWN0dWFsIHByb3BlcnR5CityaWdodHMgb2YgYW55IG90aGVyIGVudGl0eS4gRWFjaCBDb250cmlidXRvciBkaXNjbGFpbXMgYW55IGxpYWJpbGl0eSB0byBSZWNpcGllbnQKK2ZvciBjbGFpbXMgYnJvdWdodCBieSBhbnkgb3RoZXIgZW50aXR5IGJhc2VkIG9uIGluZnJpbmdlbWVudCBvZiBpbnRlbGxlY3R1YWwKK3Byb3BlcnR5IHJpZ2h0cyBvciBvdGhlcndpc2UuIEFzIGEgY29uZGl0aW9uIHRvIGV4ZXJjaXNpbmcgdGhlIHJpZ2h0cyBhbmQKK2xpY2Vuc2VzIGdyYW50ZWQgaGVyZXVuZGVyLCBlYWNoIFJlY2lwaWVudCBoZXJlYnkgYXNzdW1lcyBzb2xlIHJlc3BvbnNpYmlsaXR5Cit0byBzZWN1cmUgYW55IG90aGVyIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgbmVlZGVkLCBpZiBhbnkuIEZvciBleGFtcGxlLAoraWYgYSB0aGlyZCBwYXJ0eSBwYXRlbnQgbGljZW5zZSBpcyByZXF1aXJlZCB0byBhbGxvdyBSZWNpcGllbnQgdG8gZGlzdHJpYnV0ZQordGhlIFByb2dyYW0sIGl0IGlzIFJlY2lwaWVudCdzIHJlc3BvbnNpYmlsaXR5IHRvIGFjcXVpcmUgdGhhdCBsaWNlbnNlIGJlZm9yZQorZGlzdHJpYnV0aW5nIHRoZSBQcm9ncmFtLjwvc3Bhbj48L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmQpCitFYWNoIENvbnRyaWJ1dG9yIHJlcHJlc2VudHMgdGhhdCB0byBpdHMga25vd2xlZGdlIGl0IGhhcyBzdWZmaWNpZW50IGNvcHlyaWdodAorcmlnaHRzIGluIGl0cyBDb250cmlidXRpb24sIGlmIGFueSwgdG8gZ3JhbnQgdGhlIGNvcHlyaWdodCBsaWNlbnNlIHNldCBmb3J0aCBpbgordGhpcyBBZ3JlZW1lbnQuIDwvc3Bhbj48L3A+CisKKzxwPjxiPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4zLiBSRVFVSVJFTUVOVFM8L3NwYW4+PC9iPiA8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5BIENvbnRyaWJ1dG9yIG1heSBjaG9vc2UgdG8gZGlzdHJpYnV0ZSB0aGUKK1Byb2dyYW0gaW4gb2JqZWN0IGNvZGUgZm9ybSB1bmRlciBpdHMgb3duIGxpY2Vuc2UgYWdyZWVtZW50LCBwcm92aWRlZCB0aGF0Ojwvc3Bhbj4KKzwvcD4KKworPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YSkKK2l0IGNvbXBsaWVzIHdpdGggdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoaXMgQWdyZWVtZW50OyBhbmQ8L3NwYW4+PC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5iKQoraXRzIGxpY2Vuc2UgYWdyZWVtZW50Ojwvc3Bhbj48L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmkpCitlZmZlY3RpdmVseSBkaXNjbGFpbXMgb24gYmVoYWxmIG9mIGFsbCBDb250cmlidXRvcnMgYWxsIHdhcnJhbnRpZXMgYW5kCitjb25kaXRpb25zLCBleHByZXNzIGFuZCBpbXBsaWVkLCBpbmNsdWRpbmcgd2FycmFudGllcyBvciBjb25kaXRpb25zIG9mIHRpdGxlCithbmQgbm9uLWluZnJpbmdlbWVudCwgYW5kIGltcGxpZWQgd2FycmFudGllcyBvciBjb25kaXRpb25zIG9mIG1lcmNoYW50YWJpbGl0eQorYW5kIGZpdG5lc3MgZm9yIGEgcGFydGljdWxhciBwdXJwb3NlOyA8L3NwYW4+PC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5paSkKK2VmZmVjdGl2ZWx5IGV4Y2x1ZGVzIG9uIGJlaGFsZiBvZiBhbGwgQ29udHJpYnV0b3JzIGFsbCBsaWFiaWxpdHkgZm9yIGRhbWFnZXMsCitpbmNsdWRpbmcgZGlyZWN0LCBpbmRpcmVjdCwgc3BlY2lhbCwgaW5jaWRlbnRhbCBhbmQgY29uc2VxdWVudGlhbCBkYW1hZ2VzLCBzdWNoCithcyBsb3N0IHByb2ZpdHM7IDwvc3Bhbj48L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmlpaSkKK3N0YXRlcyB0aGF0IGFueSBwcm92aXNpb25zIHdoaWNoIGRpZmZlciBmcm9tIHRoaXMgQWdyZWVtZW50IGFyZSBvZmZlcmVkIGJ5IHRoYXQKK0NvbnRyaWJ1dG9yIGFsb25lIGFuZCBub3QgYnkgYW55IG90aGVyIHBhcnR5OyBhbmQ8L3NwYW4+PC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5pdikKK3N0YXRlcyB0aGF0IHNvdXJjZSBjb2RlIGZvciB0aGUgUHJvZ3JhbSBpcyBhdmFpbGFibGUgZnJvbSBzdWNoIENvbnRyaWJ1dG9yLCBhbmQKK2luZm9ybXMgbGljZW5zZWVzIGhvdyB0byBvYnRhaW4gaXQgaW4gYSByZWFzb25hYmxlIG1hbm5lciBvbiBvciB0aHJvdWdoIGEKK21lZGl1bSBjdXN0b21hcmlseSB1c2VkIGZvciBzb2Z0d2FyZSBleGNoYW5nZS48c3BhbiBzdHlsZT0nY29sb3I6Ymx1ZSc+IDwvc3Bhbj48L3NwYW4+PC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+V2hlbiB0aGUgUHJvZ3JhbSBpcyBtYWRlIGF2YWlsYWJsZSBpbiBzb3VyY2UKK2NvZGUgZm9ybTo8L3NwYW4+IDwvcD4KKworPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YSkKK2l0IG11c3QgYmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhpcyBBZ3JlZW1lbnQ7IGFuZCA8L3NwYW4+PC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5iKSBhCitjb3B5IG9mIHRoaXMgQWdyZWVtZW50IG11c3QgYmUgaW5jbHVkZWQgd2l0aCBlYWNoIGNvcHkgb2YgdGhlIFByb2dyYW0uIDwvc3Bhbj48L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5Db250cmlidXRvcnMgbWF5IG5vdCByZW1vdmUgb3IgYWx0ZXIgYW55Citjb3B5cmlnaHQgbm90aWNlcyBjb250YWluZWQgd2l0aGluIHRoZSBQcm9ncmFtLiA8L3NwYW4+PC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+RWFjaCBDb250cmlidXRvciBtdXN0IGlkZW50aWZ5IGl0c2VsZiBhcyB0aGUKK29yaWdpbmF0b3Igb2YgaXRzIENvbnRyaWJ1dGlvbiwgaWYgYW55LCBpbiBhIG1hbm5lciB0aGF0IHJlYXNvbmFibHkgYWxsb3dzCitzdWJzZXF1ZW50IFJlY2lwaWVudHMgdG8gaWRlbnRpZnkgdGhlIG9yaWdpbmF0b3Igb2YgdGhlIENvbnRyaWJ1dGlvbi4gPC9zcGFuPjwvcD4KKworPHA+PGI+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPjQuIENPTU1FUkNJQUwgRElTVFJJQlVUSU9OPC9zcGFuPjwvYj4gPC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+Q29tbWVyY2lhbCBkaXN0cmlidXRvcnMgb2Ygc29mdHdhcmUgbWF5CithY2NlcHQgY2VydGFpbiByZXNwb25zaWJpbGl0aWVzIHdpdGggcmVzcGVjdCB0byBlbmQgdXNlcnMsIGJ1c2luZXNzIHBhcnRuZXJzCithbmQgdGhlIGxpa2UuIFdoaWxlIHRoaXMgbGljZW5zZSBpcyBpbnRlbmRlZCB0byBmYWNpbGl0YXRlIHRoZSBjb21tZXJjaWFsIHVzZQorb2YgdGhlIFByb2dyYW0sIHRoZSBDb250cmlidXRvciB3aG8gaW5jbHVkZXMgdGhlIFByb2dyYW0gaW4gYSBjb21tZXJjaWFsCitwcm9kdWN0IG9mZmVyaW5nIHNob3VsZCBkbyBzbyBpbiBhIG1hbm5lciB3aGljaCBkb2VzIG5vdCBjcmVhdGUgcG90ZW50aWFsCitsaWFiaWxpdHkgZm9yIG90aGVyIENvbnRyaWJ1dG9ycy4gVGhlcmVmb3JlLCBpZiBhIENvbnRyaWJ1dG9yIGluY2x1ZGVzIHRoZQorUHJvZ3JhbSBpbiBhIGNvbW1lcmNpYWwgcHJvZHVjdCBvZmZlcmluZywgc3VjaCBDb250cmlidXRvciAoJnF1b3Q7Q29tbWVyY2lhbAorQ29udHJpYnV0b3ImcXVvdDspIGhlcmVieSBhZ3JlZXMgdG8gZGVmZW5kIGFuZCBpbmRlbW5pZnkgZXZlcnkgb3RoZXIKK0NvbnRyaWJ1dG9yICgmcXVvdDtJbmRlbW5pZmllZCBDb250cmlidXRvciZxdW90OykgYWdhaW5zdCBhbnkgbG9zc2VzLCBkYW1hZ2VzIGFuZAorY29zdHMgKGNvbGxlY3RpdmVseSAmcXVvdDtMb3NzZXMmcXVvdDspIGFyaXNpbmcgZnJvbSBjbGFpbXMsIGxhd3N1aXRzIGFuZCBvdGhlcgorbGVnYWwgYWN0aW9ucyBicm91Z2h0IGJ5IGEgdGhpcmQgcGFydHkgYWdhaW5zdCB0aGUgSW5kZW1uaWZpZWQgQ29udHJpYnV0b3IgdG8KK3RoZSBleHRlbnQgY2F1c2VkIGJ5IHRoZSBhY3RzIG9yIG9taXNzaW9ucyBvZiBzdWNoIENvbW1lcmNpYWwgQ29udHJpYnV0b3IgaW4KK2Nvbm5lY3Rpb24gd2l0aCBpdHMgZGlzdHJpYnV0aW9uIG9mIHRoZSBQcm9ncmFtIGluIGEgY29tbWVyY2lhbCBwcm9kdWN0CitvZmZlcmluZy4gVGhlIG9ibGlnYXRpb25zIGluIHRoaXMgc2VjdGlvbiBkbyBub3QgYXBwbHkgdG8gYW55IGNsYWltcyBvciBMb3NzZXMKK3JlbGF0aW5nIHRvIGFueSBhY3R1YWwgb3IgYWxsZWdlZCBpbnRlbGxlY3R1YWwgcHJvcGVydHkgaW5mcmluZ2VtZW50LiBJbiBvcmRlcgordG8gcXVhbGlmeSwgYW4gSW5kZW1uaWZpZWQgQ29udHJpYnV0b3IgbXVzdDogYSkgcHJvbXB0bHkgbm90aWZ5IHRoZSBDb21tZXJjaWFsCitDb250cmlidXRvciBpbiB3cml0aW5nIG9mIHN1Y2ggY2xhaW0sIGFuZCBiKSBhbGxvdyB0aGUgQ29tbWVyY2lhbCBDb250cmlidXRvcgordG8gY29udHJvbCwgYW5kIGNvb3BlcmF0ZSB3aXRoIHRoZSBDb21tZXJjaWFsIENvbnRyaWJ1dG9yIGluLCB0aGUgZGVmZW5zZSBhbmQKK2FueSByZWxhdGVkIHNldHRsZW1lbnQgbmVnb3RpYXRpb25zLiBUaGUgSW5kZW1uaWZpZWQgQ29udHJpYnV0b3IgbWF5IHBhcnRpY2lwYXRlCitpbiBhbnkgc3VjaCBjbGFpbSBhdCBpdHMgb3duIGV4cGVuc2UuPC9zcGFuPiA8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5Gb3IgZXhhbXBsZSwgYSBDb250cmlidXRvciBtaWdodCBpbmNsdWRlIHRoZQorUHJvZ3JhbSBpbiBhIGNvbW1lcmNpYWwgcHJvZHVjdCBvZmZlcmluZywgUHJvZHVjdCBYLiBUaGF0IENvbnRyaWJ1dG9yIGlzIHRoZW4gYQorQ29tbWVyY2lhbCBDb250cmlidXRvci4gSWYgdGhhdCBDb21tZXJjaWFsIENvbnRyaWJ1dG9yIHRoZW4gbWFrZXMgcGVyZm9ybWFuY2UKK2NsYWltcywgb3Igb2ZmZXJzIHdhcnJhbnRpZXMgcmVsYXRlZCB0byBQcm9kdWN0IFgsIHRob3NlIHBlcmZvcm1hbmNlIGNsYWltcyBhbmQKK3dhcnJhbnRpZXMgYXJlIHN1Y2ggQ29tbWVyY2lhbCBDb250cmlidXRvcidzIHJlc3BvbnNpYmlsaXR5IGFsb25lLiBVbmRlciB0aGlzCitzZWN0aW9uLCB0aGUgQ29tbWVyY2lhbCBDb250cmlidXRvciB3b3VsZCBoYXZlIHRvIGRlZmVuZCBjbGFpbXMgYWdhaW5zdCB0aGUKK290aGVyIENvbnRyaWJ1dG9ycyByZWxhdGVkIHRvIHRob3NlIHBlcmZvcm1hbmNlIGNsYWltcyBhbmQgd2FycmFudGllcywgYW5kIGlmIGEKK2NvdXJ0IHJlcXVpcmVzIGFueSBvdGhlciBDb250cmlidXRvciB0byBwYXkgYW55IGRhbWFnZXMgYXMgYSByZXN1bHQsIHRoZQorQ29tbWVyY2lhbCBDb250cmlidXRvciBtdXN0IHBheSB0aG9zZSBkYW1hZ2VzLjwvc3Bhbj4gPC9wPgorCis8cD48Yj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+NS4gTk8gV0FSUkFOVFk8L3NwYW4+PC9iPiA8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5FWENFUFQgQVMgRVhQUkVTU0xZIFNFVCBGT1JUSCBJTiBUSElTCitBR1JFRU1FTlQsIFRIRSBQUk9HUkFNIElTIFBST1ZJREVEIE9OIEFOICZxdW90O0FTIElTJnF1b3Q7IEJBU0lTLCBXSVRIT1VUCitXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIEVJVEhFUiBFWFBSRVNTIE9SIElNUExJRUQgSU5DTFVESU5HLAorV0lUSE9VVCBMSU1JVEFUSU9OLCBBTlkgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIFRJVExFLCBOT04tSU5GUklOR0VNRU5ULAorTUVSQ0hBTlRBQklMSVRZIE9SIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBFYWNoIFJlY2lwaWVudCBpcyBzb2xlbHkKK3Jlc3BvbnNpYmxlIGZvciBkZXRlcm1pbmluZyB0aGUgYXBwcm9wcmlhdGVuZXNzIG9mIHVzaW5nIGFuZCBkaXN0cmlidXRpbmcgdGhlCitQcm9ncmFtIGFuZCBhc3N1bWVzIGFsbCByaXNrcyBhc3NvY2lhdGVkIHdpdGggaXRzIGV4ZXJjaXNlIG9mIHJpZ2h0cyB1bmRlciB0aGlzCitBZ3JlZW1lbnQgLCBpbmNsdWRpbmcgYnV0IG5vdCBsaW1pdGVkIHRvIHRoZSByaXNrcyBhbmQgY29zdHMgb2YgcHJvZ3JhbSBlcnJvcnMsCitjb21wbGlhbmNlIHdpdGggYXBwbGljYWJsZSBsYXdzLCBkYW1hZ2UgdG8gb3IgbG9zcyBvZiBkYXRhLCBwcm9ncmFtcyBvcgorZXF1aXBtZW50LCBhbmQgdW5hdmFpbGFiaWxpdHkgb3IgaW50ZXJydXB0aW9uIG9mIG9wZXJhdGlvbnMuIDwvc3Bhbj48L3A+CisKKzxwPjxiPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz42LiBESVNDTEFJTUVSIE9GIExJQUJJTElUWTwvc3Bhbj48L2I+IDwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkVYQ0VQVCBBUyBFWFBSRVNTTFkgU0VUIEZPUlRIIElOIFRISVMKK0FHUkVFTUVOVCwgTkVJVEhFUiBSRUNJUElFTlQgTk9SIEFOWSBDT05UUklCVVRPUlMgU0hBTEwgSEFWRSBBTlkgTElBQklMSVRZIEZPUgorQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisoSU5DTFVESU5HIFdJVEhPVVQgTElNSVRBVElPTiBMT1NUIFBST0ZJVFMpLCBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcKK05FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT1IgRElTVFJJQlVUSU9OIE9GCitUSEUgUFJPR1JBTSBPUiBUSEUgRVhFUkNJU0UgT0YgQU5ZIFJJR0hUUyBHUkFOVEVEIEhFUkVVTkRFUiwgRVZFTiBJRiBBRFZJU0VEIE9GCitUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLjwvc3Bhbj4gPC9wPgorCis8cD48Yj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+Ny4gR0VORVJBTDwvc3Bhbj48L2I+IDwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPklmIGFueSBwcm92aXNpb24gb2YgdGhpcyBBZ3JlZW1lbnQgaXMgaW52YWxpZAorb3IgdW5lbmZvcmNlYWJsZSB1bmRlciBhcHBsaWNhYmxlIGxhdywgaXQgc2hhbGwgbm90IGFmZmVjdCB0aGUgdmFsaWRpdHkgb3IKK2VuZm9yY2VhYmlsaXR5IG9mIHRoZSByZW1haW5kZXIgb2YgdGhlIHRlcm1zIG9mIHRoaXMgQWdyZWVtZW50LCBhbmQgd2l0aG91dAorZnVydGhlciBhY3Rpb24gYnkgdGhlIHBhcnRpZXMgaGVyZXRvLCBzdWNoIHByb3Zpc2lvbiBzaGFsbCBiZSByZWZvcm1lZCB0byB0aGUKK21pbmltdW0gZXh0ZW50IG5lY2Vzc2FyeSB0byBtYWtlIHN1Y2ggcHJvdmlzaW9uIHZhbGlkIGFuZCBlbmZvcmNlYWJsZS48L3NwYW4+IDwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPklmIFJlY2lwaWVudCBpbnN0aXR1dGVzIHBhdGVudCBsaXRpZ2F0aW9uCithZ2FpbnN0IGFueSBlbnRpdHkgKGluY2x1ZGluZyBhIGNyb3NzLWNsYWltIG9yIGNvdW50ZXJjbGFpbSBpbiBhIGxhd3N1aXQpCithbGxlZ2luZyB0aGF0IHRoZSBQcm9ncmFtIGl0c2VsZiAoZXhjbHVkaW5nIGNvbWJpbmF0aW9ucyBvZiB0aGUgUHJvZ3JhbSB3aXRoCitvdGhlciBzb2Z0d2FyZSBvciBoYXJkd2FyZSkgaW5mcmluZ2VzIHN1Y2ggUmVjaXBpZW50J3MgcGF0ZW50KHMpLCB0aGVuIHN1Y2gKK1JlY2lwaWVudCdzIHJpZ2h0cyBncmFudGVkIHVuZGVyIFNlY3Rpb24gMihiKSBzaGFsbCB0ZXJtaW5hdGUgYXMgb2YgdGhlIGRhdGUKK3N1Y2ggbGl0aWdhdGlvbiBpcyBmaWxlZC4gPC9zcGFuPjwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkFsbCBSZWNpcGllbnQncyByaWdodHMgdW5kZXIgdGhpcyBBZ3JlZW1lbnQKK3NoYWxsIHRlcm1pbmF0ZSBpZiBpdCBmYWlscyB0byBjb21wbHkgd2l0aCBhbnkgb2YgdGhlIG1hdGVyaWFsIHRlcm1zIG9yCitjb25kaXRpb25zIG9mIHRoaXMgQWdyZWVtZW50IGFuZCBkb2VzIG5vdCBjdXJlIHN1Y2ggZmFpbHVyZSBpbiBhIHJlYXNvbmFibGUKK3BlcmlvZCBvZiB0aW1lIGFmdGVyIGJlY29taW5nIGF3YXJlIG9mIHN1Y2ggbm9uY29tcGxpYW5jZS4gSWYgYWxsIFJlY2lwaWVudCdzCityaWdodHMgdW5kZXIgdGhpcyBBZ3JlZW1lbnQgdGVybWluYXRlLCBSZWNpcGllbnQgYWdyZWVzIHRvIGNlYXNlIHVzZSBhbmQKK2Rpc3RyaWJ1dGlvbiBvZiB0aGUgUHJvZ3JhbSBhcyBzb29uIGFzIHJlYXNvbmFibHkgcHJhY3RpY2FibGUuIEhvd2V2ZXIsCitSZWNpcGllbnQncyBvYmxpZ2F0aW9ucyB1bmRlciB0aGlzIEFncmVlbWVudCBhbmQgYW55IGxpY2Vuc2VzIGdyYW50ZWQgYnkKK1JlY2lwaWVudCByZWxhdGluZyB0byB0aGUgUHJvZ3JhbSBzaGFsbCBjb250aW51ZSBhbmQgc3Vydml2ZS4gPC9zcGFuPjwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkV2ZXJ5b25lIGlzIHBlcm1pdHRlZCB0byBjb3B5IGFuZCBkaXN0cmlidXRlCitjb3BpZXMgb2YgdGhpcyBBZ3JlZW1lbnQsIGJ1dCBpbiBvcmRlciB0byBhdm9pZCBpbmNvbnNpc3RlbmN5IHRoZSBBZ3JlZW1lbnQgaXMKK2NvcHlyaWdodGVkIGFuZCBtYXkgb25seSBiZSBtb2RpZmllZCBpbiB0aGUgZm9sbG93aW5nIG1hbm5lci4gVGhlIEFncmVlbWVudAorU3Rld2FyZCByZXNlcnZlcyB0aGUgcmlnaHQgdG8gcHVibGlzaCBuZXcgdmVyc2lvbnMgKGluY2x1ZGluZyByZXZpc2lvbnMpIG9mCit0aGlzIEFncmVlbWVudCBmcm9tIHRpbWUgdG8gdGltZS4gTm8gb25lIG90aGVyIHRoYW4gdGhlIEFncmVlbWVudCBTdGV3YXJkIGhhcwordGhlIHJpZ2h0IHRvIG1vZGlmeSB0aGlzIEFncmVlbWVudC4gVGhlIEVjbGlwc2UgRm91bmRhdGlvbiBpcyB0aGUgaW5pdGlhbAorQWdyZWVtZW50IFN0ZXdhcmQuIFRoZSBFY2xpcHNlIEZvdW5kYXRpb24gbWF5IGFzc2lnbiB0aGUgcmVzcG9uc2liaWxpdHkgdG8KK3NlcnZlIGFzIHRoZSBBZ3JlZW1lbnQgU3Rld2FyZCB0byBhIHN1aXRhYmxlIHNlcGFyYXRlIGVudGl0eS4gRWFjaCBuZXcgdmVyc2lvbgorb2YgdGhlIEFncmVlbWVudCB3aWxsIGJlIGdpdmVuIGEgZGlzdGluZ3Vpc2hpbmcgdmVyc2lvbiBudW1iZXIuIFRoZSBQcm9ncmFtCisoaW5jbHVkaW5nIENvbnRyaWJ1dGlvbnMpIG1heSBhbHdheXMgYmUgZGlzdHJpYnV0ZWQgc3ViamVjdCB0byB0aGUgdmVyc2lvbiBvZgordGhlIEFncmVlbWVudCB1bmRlciB3aGljaCBpdCB3YXMgcmVjZWl2ZWQuIEluIGFkZGl0aW9uLCBhZnRlciBhIG5ldyB2ZXJzaW9uIG9mCit0aGUgQWdyZWVtZW50IGlzIHB1Ymxpc2hlZCwgQ29udHJpYnV0b3IgbWF5IGVsZWN0IHRvIGRpc3RyaWJ1dGUgdGhlIFByb2dyYW0KKyhpbmNsdWRpbmcgaXRzIENvbnRyaWJ1dGlvbnMpIHVuZGVyIHRoZSBuZXcgdmVyc2lvbi4gRXhjZXB0IGFzIGV4cHJlc3NseSBzdGF0ZWQKK2luIFNlY3Rpb25zIDIoYSkgYW5kIDIoYikgYWJvdmUsIFJlY2lwaWVudCByZWNlaXZlcyBubyByaWdodHMgb3IgbGljZW5zZXMgdG8KK3RoZSBpbnRlbGxlY3R1YWwgcHJvcGVydHkgb2YgYW55IENvbnRyaWJ1dG9yIHVuZGVyIHRoaXMgQWdyZWVtZW50LCB3aGV0aGVyCitleHByZXNzbHksIGJ5IGltcGxpY2F0aW9uLCBlc3RvcHBlbCBvciBvdGhlcndpc2UuIEFsbCByaWdodHMgaW4gdGhlIFByb2dyYW0gbm90CitleHByZXNzbHkgZ3JhbnRlZCB1bmRlciB0aGlzIEFncmVlbWVudCBhcmUgcmVzZXJ2ZWQuPC9zcGFuPiA8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5UaGlzIEFncmVlbWVudCBpcyBnb3Zlcm5lZCBieSB0aGUgbGF3cyBvZiB0aGUKK1N0YXRlIG9mIE5ldyBZb3JrIGFuZCB0aGUgaW50ZWxsZWN0dWFsIHByb3BlcnR5IGxhd3Mgb2YgdGhlIFVuaXRlZCBTdGF0ZXMgb2YKK0FtZXJpY2EuIE5vIHBhcnR5IHRvIHRoaXMgQWdyZWVtZW50IHdpbGwgYnJpbmcgYSBsZWdhbCBhY3Rpb24gdW5kZXIgdGhpcworQWdyZWVtZW50IG1vcmUgdGhhbiBvbmUgeWVhciBhZnRlciB0aGUgY2F1c2Ugb2YgYWN0aW9uIGFyb3NlLiBFYWNoIHBhcnR5IHdhaXZlcworaXRzIHJpZ2h0cyB0byBhIGp1cnkgdHJpYWwgaW4gYW55IHJlc3VsdGluZyBsaXRpZ2F0aW9uLjwvc3Bhbj4gPC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWw+PCFbaWYgIXN1cHBvcnRFbXB0eVBhcmFzXT4mbmJzcDs8IVtlbmRpZl0+PG86cD48L286cD48L3A+CisKKzwvZGl2PgorCis8L2JvZHk+CisKKzwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS5zdGVtLmNvcmUuZmVhdHVyZS9mZWF0dXJlLnByb3BlcnRpZXMgYi9mZWF0dXJlcy9vcmcuZWNsaXBzZS5zdGVtLmNvcmUuZmVhdHVyZS9mZWF0dXJlLnByb3BlcnRpZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWJiMTcwYwotLS0gL2Rldi9udWxsCisrKyBiL2ZlYXR1cmVzL29yZy5lY2xpcHNlLnN0ZW0uY29yZS5mZWF0dXJlL2ZlYXR1cmUucHJvcGVydGllcwpAQCAtMCwwICsxLDE3NCBAQAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBDb3B5cmlnaHQgKGMpIDIwMTEgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisjIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisjIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisjIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisjIAorIyBDb250cmlidXRvcnM6CisjICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgZmVhdHVyZS5wcm9wZXJ0aWVzCisjIGNvbnRhaW5zIGV4dGVybmFsaXplZCBzdHJpbmdzIGZvciBmZWF0dXJlLnhtbAorIyAiJWZvbyIgaW4gZmVhdHVyZS54bWwgY29ycmVzcG9uZHMgdG8gdGhlIGtleSAiZm9vIiBpbiB0aGlzIGZpbGUKKyMgamF2YS5pby5Qcm9wZXJ0aWVzIGZpbGUgKElTTyA4ODU5LTEgd2l0aCAiXCIgZXNjYXBlcykKKyMgVGhpcyBmaWxlIHNob3VsZCBiZSB0cmFuc2xhdGVkLgorCisjICJmZWF0dXJlTmFtZSIgcHJvcGVydHkgLSBuYW1lIG9mIHRoZSBmZWF0dXJlCitmZWF0dXJlTmFtZT1TcGF0aW90ZW1wb3JhbCBFcGlkZW1pb2xvZ2ljYWwgTW9kZWxlciBDb3JlCisKKyMgInByb3ZpZGVyTmFtZSIgcHJvcGVydHkgLSBuYW1lIG9mIHRoZSBjb21wYW55IHRoYXQgcHJvdmlkZXMgdGhlIGZlYXR1cmUKK3Byb3ZpZGVyTmFtZT1FY2xpcHNlLm9yZworCisjICJ1cGRhdGVTaXRlTmFtZSIgcHJvcGVydHkgLSBsYWJlbCBmb3IgdGhlIHVwZGF0ZSBzaXRlCit1cGRhdGVTaXRlTmFtZT1TVEVNIFVwZGF0ZXMKKworIyAic2Vjb25kYXJ5U2l0ZU5hbWUiIHByb3BlcnR5IC0gbGFiZWwgZm9yIHRoZSBzZWNvbmRhcnkgdXBkYXRlIHNpdGUKKyNzZWNvbmRhcnlVcGRhdGVTaXRlTmFtZT1TVEVNIFVwZGF0ZXMKKworIyAiZGVzY3JpcHRpb24iIHByb3BlcnR5IC0gZGVzY3JpcHRpb24gb2YgdGhlIGZlYXR1cmUKK2Rlc2NyaXB0aW9uPVNURU0ncyBjb3JlIGZ1bmN0aW9uYWxpdHksIGluY2x1ZGluZyBkZXNpZ24gZWRpdG9ycyBcCithbmQgc2ltdWxhdGlvbiBydW50aW1lCisKKyMgImNvcHlyaWdodCIgcHJvcGVydHkgLSB0ZXh0IG9mIHRoZSAiRmVhdHVyZSBVcGRhdGUgQ29weXJpZ2h0IgorY29weXJpZ2h0PVwKK0NvcHlyaWdodCAoYykgMjAwNy0yMDExIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLlxuXAorQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFsc1xuXAorYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wXG5cCit3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdFxuXAoraHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWxcblwKK1xuXAorQ29udHJpYnV0b3JzOlxuXAorICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvblxuCisjIyMjIyMjIyMjIyMjIyMjIGVuZCBvZiBjb3B5cmlnaHQgcHJvcGVydHkgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyMgImxpY2Vuc2VVUkwiIHByb3BlcnR5IC0gVVJMIG9mIHRoZSAiRmVhdHVyZSBMaWNlbnNlIgorIyBkbyBub3QgdHJhbnNsYXRlIHZhbHVlIC0ganVzdCBjaGFuZ2UgdG8gcG9pbnQgdG8gYSBsb2NhbGUtc3BlY2lmaWMgSFRNTCBwYWdlCitsaWNlbnNlVVJMPWxpY2Vuc2UuaHRtbAorCisjICJsaWNlbnNlIiBwcm9wZXJ0eSAtIHRleHQgb2YgdGhlICJGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlIgorIyBzaG91bGQgYmUgcGxhaW4gdGV4dCB2ZXJzaW9uIG9mIGxpY2Vuc2UgYWdyZWVtZW50IHBvaW50ZWQgdG8gYmUgImxpY2Vuc2VVUkwiCitsaWNlbnNlPVwKK0VjbGlwc2UgRm91bmRhdGlvbiBTb2Z0d2FyZSBVc2VyIEFncmVlbWVudFxuXAorQXByaWwgMTQsIDIwMTBcblwKK1xuXAorVXNhZ2UgT2YgQ29udGVudFxuXAorXG5cCitUSEUgRUNMSVBTRSBGT1VOREFUSU9OIE1BS0VTIEFWQUlMQUJMRSBTT0ZUV0FSRSwgRE9DVU1FTlRBVElPTiwgSU5GT1JNQVRJT04gQU5EL09SXG5cCitPVEhFUiBNQVRFUklBTFMgRk9SIE9QRU4gU09VUkNFIFBST0pFQ1RTIChDT0xMRUNUSVZFTFkgIkNPTlRFTlQiKS5cblwKK1VTRSBPRiBUSEUgQ09OVEVOVCBJUyBHT1ZFUk5FRCBCWSBUSEUgVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgVEhJU1xuXAorQUdSRUVNRU5UIEFORC9PUiBUSEUgVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgTElDRU5TRSBBR1JFRU1FTlRTIE9SXG5cCitOT1RJQ0VTIElORElDQVRFRCBPUiBSRUZFUkVOQ0VEIEJFTE9XLiAgQlkgVVNJTkcgVEhFIENPTlRFTlQsIFlPVVxuXAorQUdSRUUgVEhBVCBZT1VSIFVTRSBPRiBUSEUgQ09OVEVOVCBJUyBHT1ZFUk5FRCBCWSBUSElTIEFHUkVFTUVOVFxuXAorQU5EL09SIFRIRSBURVJNUyBBTkQgQ09ORElUSU9OUyBPRiBBTlkgQVBQTElDQUJMRSBMSUNFTlNFIEFHUkVFTUVOVFNcblwKK09SIE5PVElDRVMgSU5ESUNBVEVEIE9SIFJFRkVSRU5DRUQgQkVMT1cuICBJRiBZT1UgRE8gTk9UIEFHUkVFIFRPIFRIRVxuXAorVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgVEhJUyBBR1JFRU1FTlQgQU5EIFRIRSBURVJNUyBBTkQgQ09ORElUSU9OU1xuXAorT0YgQU5ZIEFQUExJQ0FCTEUgTElDRU5TRSBBR1JFRU1FTlRTIE9SIE5PVElDRVMgSU5ESUNBVEVEIE9SIFJFRkVSRU5DRURcblwKK0JFTE9XLCBUSEVOIFlPVSBNQVkgTk9UIFVTRSBUSEUgQ09OVEVOVC5cblwKK1xuXAorQXBwbGljYWJsZSBMaWNlbnNlc1xuXAorXG5cCitVbmxlc3Mgb3RoZXJ3aXNlIGluZGljYXRlZCwgYWxsIENvbnRlbnQgbWFkZSBhdmFpbGFibGUgYnkgdGhlXG5cCitFY2xpcHNlIEZvdW5kYXRpb24gaXMgcHJvdmlkZWQgdG8geW91IHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZlxuXAordGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjAgKCJFUEwiKS4gQSBjb3B5IG9mIHRoZSBFUEwgaXNcblwKK3Byb3ZpZGVkIHdpdGggdGhpcyBDb250ZW50IGFuZCBpcyBhbHNvIGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbC5cblwKK0ZvciBwdXJwb3NlcyBvZiB0aGUgRVBMLCAiUHJvZ3JhbSIgd2lsbCBtZWFuIHRoZSBDb250ZW50LlxuXAorXG5cCitDb250ZW50IGluY2x1ZGVzLCBidXQgaXMgbm90IGxpbWl0ZWQgdG8sIHNvdXJjZSBjb2RlLCBvYmplY3QgY29kZSxcblwKK2RvY3VtZW50YXRpb24gYW5kIG90aGVyIGZpbGVzIG1haW50YWluZWQgaW4gdGhlIEVjbGlwc2UgRm91bmRhdGlvbiBzb3VyY2UgY29kZVxuXAorcmVwb3NpdG9yeSAoIlJlcG9zaXRvcnkiKSBpbiBzb2Z0d2FyZSBtb2R1bGVzICgiTW9kdWxlcyIpIGFuZCBtYWRlIGF2YWlsYWJsZVxuXAorYXMgZG93bmxvYWRhYmxlIGFyY2hpdmVzICgiRG93bmxvYWRzIikuXG5cCitcblwKKyAgICAgICAtIENvbnRlbnQgbWF5IGJlIHN0cnVjdHVyZWQgYW5kIHBhY2thZ2VkIGludG8gbW9kdWxlcyB0byBmYWNpbGl0YXRlIGRlbGl2ZXJpbmcsXG5cCisgICAgICAgICBleHRlbmRpbmcsIGFuZCB1cGdyYWRpbmcgdGhlIENvbnRlbnQuIFR5cGljYWwgbW9kdWxlcyBtYXkgaW5jbHVkZSBwbHVnLWlucyAoIlBsdWctaW5zIiksXG5cCisgICAgICAgICBwbHVnLWluIGZyYWdtZW50cyAoIkZyYWdtZW50cyIpLCBhbmQgZmVhdHVyZXMgKCJGZWF0dXJlcyIpLlxuXAorICAgICAgIC0gRWFjaCBQbHVnLWluIG9yIEZyYWdtZW50IG1heSBiZSBwYWNrYWdlZCBhcyBhIHN1Yi1kaXJlY3Rvcnkgb3IgSkFSIChKYXZhKFRNKSBBUmNoaXZlKVxuXAorICAgICAgICAgaW4gYSBkaXJlY3RvcnkgbmFtZWQgInBsdWdpbnMiLlxuXAorICAgICAgIC0gQSBGZWF0dXJlIGlzIGEgYnVuZGxlIG9mIG9uZSBvciBtb3JlIFBsdWctaW5zIGFuZC9vciBGcmFnbWVudHMgYW5kIGFzc29jaWF0ZWQgbWF0ZXJpYWwuXG5cCisgICAgICAgICBFYWNoIEZlYXR1cmUgbWF5IGJlIHBhY2thZ2VkIGFzIGEgc3ViLWRpcmVjdG9yeSBpbiBhIGRpcmVjdG9yeSBuYW1lZCAiZmVhdHVyZXMiLlxuXAorICAgICAgICAgV2l0aGluIGEgRmVhdHVyZSwgZmlsZXMgbmFtZWQgImZlYXR1cmUueG1sIiBtYXkgY29udGFpbiBhIGxpc3Qgb2YgdGhlIG5hbWVzIGFuZCB2ZXJzaW9uXG5cCisgICAgICAgICBudW1iZXJzIG9mIHRoZSBQbHVnLWlucyBhbmQvb3IgRnJhZ21lbnRzIGFzc29jaWF0ZWQgd2l0aCB0aGF0IEZlYXR1cmUuXG5cCisgICAgICAgLSBGZWF0dXJlcyBtYXkgYWxzbyBpbmNsdWRlIG90aGVyIEZlYXR1cmVzICgiSW5jbHVkZWQgRmVhdHVyZXMiKS4gV2l0aGluIGEgRmVhdHVyZSwgZmlsZXNcblwKKyAgICAgICAgIG5hbWVkICJmZWF0dXJlLnhtbCIgbWF5IGNvbnRhaW4gYSBsaXN0IG9mIHRoZSBuYW1lcyBhbmQgdmVyc2lvbiBudW1iZXJzIG9mIEluY2x1ZGVkIEZlYXR1cmVzLlxuXAorXG5cCitUaGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgZ292ZXJuaW5nIFBsdWctaW5zIGFuZCBGcmFnbWVudHMgc2hvdWxkIGJlXG5cCitjb250YWluZWQgaW4gZmlsZXMgbmFtZWQgImFib3V0Lmh0bWwiICgiQWJvdXRzIikuIFRoZSB0ZXJtcyBhbmRcblwKK2NvbmRpdGlvbnMgZ292ZXJuaW5nIEZlYXR1cmVzIGFuZCBJbmNsdWRlZCBGZWF0dXJlcyBzaG91bGQgYmUgY29udGFpbmVkXG5cCitpbiBmaWxlcyBuYW1lZCAibGljZW5zZS5odG1sIiAoIkZlYXR1cmUgTGljZW5zZXMiKS4gQWJvdXRzIGFuZCBGZWF0dXJlXG5cCitMaWNlbnNlcyBtYXkgYmUgbG9jYXRlZCBpbiBhbnkgZGlyZWN0b3J5IG9mIGEgRG93bmxvYWQgb3IgTW9kdWxlXG5cCitpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0byB0aGUgZm9sbG93aW5nIGxvY2F0aW9uczpcblwKK1xuXAorICAgICAgIC0gVGhlIHRvcC1sZXZlbCAocm9vdCkgZGlyZWN0b3J5XG5cCisgICAgICAgLSBQbHVnLWluIGFuZCBGcmFnbWVudCBkaXJlY3Rvcmllc1xuXAorICAgICAgIC0gSW5zaWRlIFBsdWctaW5zIGFuZCBGcmFnbWVudHMgcGFja2FnZWQgYXMgSkFSc1xuXAorICAgICAgIC0gU3ViLWRpcmVjdG9yaWVzIG9mIHRoZSBkaXJlY3RvcnkgbmFtZWQgInNyYyIgb2YgY2VydGFpbiBQbHVnLWluc1xuXAorICAgICAgIC0gRmVhdHVyZSBkaXJlY3Rvcmllc1xuXAorXG5cCitOb3RlOiBpZiBhIEZlYXR1cmUgbWFkZSBhdmFpbGFibGUgYnkgdGhlIEVjbGlwc2UgRm91bmRhdGlvbiBpcyBpbnN0YWxsZWQgdXNpbmcgdGhlXG5cCitQcm92aXNpb25pbmcgVGVjaG5vbG9neSAoYXMgZGVmaW5lZCBiZWxvdyksIHlvdSBtdXN0IGFncmVlIHRvIGEgbGljZW5zZSAoIkZlYXR1cmUgXG5cCitVcGRhdGUgTGljZW5zZSIpIGR1cmluZyB0aGUgaW5zdGFsbGF0aW9uIHByb2Nlc3MuIElmIHRoZSBGZWF0dXJlIGNvbnRhaW5zXG5cCitJbmNsdWRlZCBGZWF0dXJlcywgdGhlIEZlYXR1cmUgVXBkYXRlIExpY2Vuc2Ugc2hvdWxkIGVpdGhlciBwcm92aWRlIHlvdVxuXAord2l0aCB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgZ292ZXJuaW5nIHRoZSBJbmNsdWRlZCBGZWF0dXJlcyBvciBpbmZvcm1cblwKK3lvdSB3aGVyZSB5b3UgY2FuIGxvY2F0ZSB0aGVtLiBGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlcyBtYXkgYmUgZm91bmQgaW5cblwKK3RoZSAibGljZW5zZSIgcHJvcGVydHkgb2YgZmlsZXMgbmFtZWQgImZlYXR1cmUucHJvcGVydGllcyIgZm91bmQgd2l0aGluIGEgRmVhdHVyZS5cblwKK1N1Y2ggQWJvdXRzLCBGZWF0dXJlIExpY2Vuc2VzLCBhbmQgRmVhdHVyZSBVcGRhdGUgTGljZW5zZXMgY29udGFpbiB0aGVcblwKK3Rlcm1zIGFuZCBjb25kaXRpb25zIChvciByZWZlcmVuY2VzIHRvIHN1Y2ggdGVybXMgYW5kIGNvbmRpdGlvbnMpIHRoYXRcblwKK2dvdmVybiB5b3VyIHVzZSBvZiB0aGUgYXNzb2NpYXRlZCBDb250ZW50IGluIHRoYXQgZGlyZWN0b3J5LlxuXAorXG5cCitUSEUgQUJPVVRTLCBGRUFUVVJFIExJQ0VOU0VTLCBBTkQgRkVBVFVSRSBVUERBVEUgTElDRU5TRVMgTUFZIFJFRkVSXG5cCitUTyBUSEUgRVBMIE9SIE9USEVSIExJQ0VOU0UgQUdSRUVNRU5UUywgTk9USUNFUyBPUiBURVJNUyBBTkQgQ09ORElUSU9OUy5cblwKK1NPTUUgT0YgVEhFU0UgT1RIRVIgTElDRU5TRSBBR1JFRU1FTlRTIE1BWSBJTkNMVURFIChCVVQgQVJFIE5PVCBMSU1JVEVEIFRPKTpcblwKK1xuXAorICAgICAgIC0gQ29tbW9uIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4wIChhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9jcGwtdjEwLmh0bWwpXG5cCisgICAgICAgLSBBcGFjaGUgU29mdHdhcmUgTGljZW5zZSAxLjEgKGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRSlcblwKKyAgICAgICAtIEFwYWNoZSBTb2Z0d2FyZSBMaWNlbnNlIDIuMCAoYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMClcblwKKyAgICAgICAtIE1ldHJvIExpbmsgUHVibGljIExpY2Vuc2UgMS4wMCAoYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cub3Blbmdyb3VwLm9yZy9vcGVubW90aWYvc3VwcG9ydGVycy9tZXRyb2xpbmsvbGljZW5zZS5odG1sKVxuXAorICAgICAgIC0gTW96aWxsYSBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMSAoYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cubW96aWxsYS5vcmcvTVBML01QTC0xLjEuaHRtbClcblwKK1xuXAorSVQgSVMgWU9VUiBPQkxJR0FUSU9OIFRPIFJFQUQgQU5EIEFDQ0VQVCBBTEwgU1VDSCBURVJNUyBBTkQgQ09ORElUSU9OUyBQUklPUlxuXAorVE8gVVNFIE9GIFRIRSBDT05URU5ULiBJZiBubyBBYm91dCwgRmVhdHVyZSBMaWNlbnNlLCBvciBGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlXG5cCitpcyBwcm92aWRlZCwgcGxlYXNlIGNvbnRhY3QgdGhlIEVjbGlwc2UgRm91bmRhdGlvbiB0byBkZXRlcm1pbmUgd2hhdCB0ZXJtcyBhbmQgY29uZGl0aW9uc1xuXAorZ292ZXJuIHRoYXQgcGFydGljdWxhciBDb250ZW50LlxuXAorXG5cCitcblxVc2Ugb2YgUHJvdmlzaW9uaW5nIFRlY2hub2xvZ3lcblwKK1xuXAorVGhlIEVjbGlwc2UgRm91bmRhdGlvbiBtYWtlcyBhdmFpbGFibGUgcHJvdmlzaW9uaW5nIHNvZnR3YXJlLCBleGFtcGxlcyBvZiB3aGljaCBpbmNsdWRlLFxuXAorYnV0IGFyZSBub3QgbGltaXRlZCB0bywgcDIgYW5kIHRoZSBFY2xpcHNlIFVwZGF0ZSBNYW5hZ2VyICgiUHJvdmlzaW9uaW5nIFRlY2hub2xvZ3kiKSBmb3JcblwKK3RoZSBwdXJwb3NlIG9mIGFsbG93aW5nIHVzZXJzIHRvIGluc3RhbGwgc29mdHdhcmUsIGRvY3VtZW50YXRpb24sIGluZm9ybWF0aW9uIGFuZC9vclxuXAorb3RoZXIgbWF0ZXJpYWxzIChjb2xsZWN0aXZlbHkgIkluc3RhbGxhYmxlIFNvZnR3YXJlIikuIFRoaXMgY2FwYWJpbGl0eSBpcyBwcm92aWRlZCB3aXRoXG5cCit0aGUgaW50ZW50IG9mIGFsbG93aW5nIHN1Y2ggdXNlcnMgdG8gaW5zdGFsbCwgZXh0ZW5kIGFuZCB1cGRhdGUgRWNsaXBzZS1iYXNlZCBwcm9kdWN0cy5cblwKK0luZm9ybWF0aW9uIGFib3V0IHBhY2thZ2luZyBJbnN0YWxsYWJsZSBTb2Z0d2FyZSBpcyBhdmFpbGFibGUgYXRcblwKK2h0dHA6Ly9lY2xpcHNlLm9yZy9lcXVpbm94L3AyL3JlcG9zaXRvcnlfcGFja2FnaW5nLmh0bWwgKCJTcGVjaWZpY2F0aW9uIikuXG5cCitcblwKK1lvdSBtYXkgdXNlIFByb3Zpc2lvbmluZyBUZWNobm9sb2d5IHRvIGFsbG93IG90aGVyIHBhcnRpZXMgdG8gaW5zdGFsbCBJbnN0YWxsYWJsZSBTb2Z0d2FyZS5cblwKK1lvdSBzaGFsbCBiZSByZXNwb25zaWJsZSBmb3IgZW5hYmxpbmcgdGhlIGFwcGxpY2FibGUgbGljZW5zZSBhZ3JlZW1lbnRzIHJlbGF0aW5nIHRvIHRoZVxuXAorSW5zdGFsbGFibGUgU29mdHdhcmUgdG8gYmUgcHJlc2VudGVkIHRvLCBhbmQgYWNjZXB0ZWQgYnksIHRoZSB1c2VycyBvZiB0aGUgUHJvdmlzaW9uaW5nIFRlY2hub2xvZ3lcblwKK2luIGFjY29yZGFuY2Ugd2l0aCB0aGUgU3BlY2lmaWNhdGlvbi4gQnkgdXNpbmcgUHJvdmlzaW9uaW5nIFRlY2hub2xvZ3kgaW4gc3VjaCBhIG1hbm5lciBhbmRcblwKK21ha2luZyBpdCBhdmFpbGFibGUgaW4gYWNjb3JkYW5jZSB3aXRoIHRoZSBTcGVjaWZpY2F0aW9uLCB5b3UgZnVydGhlciBhY2tub3dsZWRnZSB5b3VyXG5cCithZ3JlZW1lbnQgdG8sIGFuZCB0aGUgYWNxdWlzaXRpb24gb2YgYWxsIG5lY2Vzc2FyeSByaWdodHMgdG8gcGVybWl0IHRoZSBmb2xsb3dpbmc6XG5cCitcblwKKyAgICAgICAxLiBBIHNlcmllcyBvZiBhY3Rpb25zIG1heSBvY2N1ciAoIlByb3Zpc2lvbmluZyBQcm9jZXNzIikgaW4gd2hpY2ggYSB1c2VyIG1heSBleGVjdXRlXG5cCisgICAgICAgICAgdGhlIFByb3Zpc2lvbmluZyBUZWNobm9sb2d5IG9uIGEgbWFjaGluZSAoIlRhcmdldCBNYWNoaW5lIikgd2l0aCB0aGUgaW50ZW50IG9mIGluc3RhbGxpbmcsXG5cCisgICAgICAgICAgZXh0ZW5kaW5nIG9yIHVwZGF0aW5nIHRoZSBmdW5jdGlvbmFsaXR5IG9mIGFuIEVjbGlwc2UtYmFzZWQgcHJvZHVjdC5cblwKKyAgICAgICAyLiBEdXJpbmcgdGhlIFByb3Zpc2lvbmluZyBQcm9jZXNzLCB0aGUgUHJvdmlzaW9uaW5nIFRlY2hub2xvZ3kgbWF5IGNhdXNlIHRoaXJkIHBhcnR5XG5cCisgICAgICAgICAgSW5zdGFsbGFibGUgU29mdHdhcmUgb3IgYSBwb3J0aW9uIHRoZXJlb2YgdG8gYmUgYWNjZXNzZWQgYW5kIGNvcGllZCB0byB0aGUgVGFyZ2V0IE1hY2hpbmUuXG5cCisgICAgICAgMy4gUHVyc3VhbnQgdG8gdGhlIFNwZWNpZmljYXRpb24sIHlvdSB3aWxsIHByb3ZpZGUgdG8gdGhlIHVzZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIHRoYXRcblwKKyAgICAgICAgICBnb3Zlcm4gdGhlIHVzZSBvZiB0aGUgSW5zdGFsbGFibGUgU29mdHdhcmUgKCJJbnN0YWxsYWJsZSBTb2Z0d2FyZSBBZ3JlZW1lbnQiKSBhbmQgc3VjaFxuXAorICAgICAgICAgIEluc3RhbGxhYmxlIFNvZnR3YXJlIEFncmVlbWVudCBzaGFsbCBiZSBhY2Nlc3NlZCBmcm9tIHRoZSBUYXJnZXQgTWFjaGluZSBpbiBhY2NvcmRhbmNlXG5cCisgICAgICAgICAgd2l0aCB0aGUgU3BlY2lmaWNhdGlvbi4gU3VjaCBJbnN0YWxsYWJsZSBTb2Z0d2FyZSBBZ3JlZW1lbnQgbXVzdCBpbmZvcm0gdGhlIHVzZXIgb2YgdGhlXG5cCisgICAgICAgICAgdGVybXMgYW5kIGNvbmRpdGlvbnMgdGhhdCBnb3Zlcm4gdGhlIEluc3RhbGxhYmxlIFNvZnR3YXJlIGFuZCBtdXN0IHNvbGljaXQgYWNjZXB0YW5jZSBieVxuXAorICAgICAgICAgIHRoZSBlbmQgdXNlciBpbiB0aGUgbWFubmVyIHByZXNjcmliZWQgaW4gc3VjaCBJbnN0YWxsYWJsZSBTb2Z0d2FyZSBBZ3JlZW1lbnQuIFVwb24gc3VjaFxuXAorICAgICAgICAgIGluZGljYXRpb24gb2YgYWdyZWVtZW50IGJ5IHRoZSB1c2VyLCB0aGUgcHJvdmlzaW9uaW5nIFRlY2hub2xvZ3kgd2lsbCBjb21wbGV0ZSBpbnN0YWxsYXRpb25cblwKKyAgICAgICAgICBvZiB0aGUgSW5zdGFsbGFibGUgU29mdHdhcmUuXG5cCitcblwKK0NyeXB0b2dyYXBoeVxuXAorXG5cCitDb250ZW50IG1heSBjb250YWluIGVuY3J5cHRpb24gc29mdHdhcmUuIFRoZSBjb3VudHJ5IGluIHdoaWNoIHlvdSBhcmVcblwKK2N1cnJlbnRseSBtYXkgaGF2ZSByZXN0cmljdGlvbnMgb24gdGhlIGltcG9ydCwgcG9zc2Vzc2lvbiwgYW5kIHVzZSxcblwKK2FuZC9vciByZS1leHBvcnQgdG8gYW5vdGhlciBjb3VudHJ5LCBvZiBlbmNyeXB0aW9uIHNvZnR3YXJlLiBCRUZPUkVcblwKK3VzaW5nIGFueSBlbmNyeXB0aW9uIHNvZnR3YXJlLCBwbGVhc2UgY2hlY2sgdGhlIGNvdW50cnkncyBsYXdzLFxuXAorcmVndWxhdGlvbnMgYW5kIHBvbGljaWVzIGNvbmNlcm5pbmcgdGhlIGltcG9ydCwgcG9zc2Vzc2lvbiwgb3IgdXNlLCBhbmRcblwKK3JlLWV4cG9ydCBvZiBlbmNyeXB0aW9uIHNvZnR3YXJlLCB0byBzZWUgaWYgdGhpcyBpcyBwZXJtaXR0ZWQuXG5cCitcblwKK0phdmEgYW5kIGFsbCBKYXZhLWJhc2VkIHRyYWRlbWFya3MgYXJlIHRyYWRlbWFya3Mgb2YgT3JhY2xlIENvcnBvcmF0aW9uIGluIHRoZSBVbml0ZWQgU3RhdGVzLCBvdGhlciBjb3VudHJpZXMsIG9yIGJvdGguXG4KKyMjIyMjIyMjIyMjIGVuZCBvZiBsaWNlbnNlIHByb3BlcnR5ICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLnN0ZW0uY29yZS5mZWF0dXJlL2ZlYXR1cmUueG1sIGIvZmVhdHVyZXMvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmZlYXR1cmUvZmVhdHVyZS54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDhhOTA2MwotLS0gL2Rldi9udWxsCisrKyBiL2ZlYXR1cmVzL29yZy5lY2xpcHNlLnN0ZW0uY29yZS5mZWF0dXJlL2ZlYXR1cmUueG1sCkBAIC0wLDAgKzEsMjM2IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPGZlYXR1cmUKKyAgICAgIGlkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZmVhdHVyZSIKKyAgICAgIGxhYmVsPSIlZmVhdHVyZU5hbWUiCisgICAgICB2ZXJzaW9uPSIxLjIuMSIKKyAgICAgIHByb3ZpZGVyLW5hbWU9IiVwcm92aWRlck5hbWUiPgorCisgICA8ZGVzY3JpcHRpb24+CisgICAgICAlZGVzY3JpcHRpb24KKyAgIDwvZGVzY3JpcHRpb24+CisKKyAgIDxjb3B5cmlnaHQ+CisgICAgICAlY29weXJpZ2h0CisgICA8L2NvcHlyaWdodD4KKworICAgPGxpY2Vuc2UgdXJsPSIlbGljZW5zZVVSTCI+CisgICAgICAlbGljZW5zZQorICAgPC9saWNlbnNlPgorCisgICA8dXJsPgorICAgICAgPHVwZGF0ZSBsYWJlbD0iJXVwZGF0ZVNpdGVOYW1lIiB1cmw9Imh0dHA6Ly9kb3dubG9hZC5lY2xpcHNlLm9yZy9zdGVtL3VwZGF0ZS1zaXRlLyIvPgorICAgPC91cmw+CisKKyAgIDxyZXF1aXJlcz4KKyAgICAgIDxpbXBvcnQgcGx1Z2luPSJvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUiLz4KKyAgICAgIDxpbXBvcnQgcGx1Z2luPSJvcmcuZWNsaXBzZS5lbWYuZWNvcmUuZWRpdCIgdmVyc2lvbj0iMi42LjAiIG1hdGNoPSJncmVhdGVyT3JFcXVhbCIvPgorICAgICAgPGltcG9ydCBwbHVnaW49Im9yZy5lY2xpcHNlLmVtZi5lY29yZSIvPgorICAgICAgPGltcG9ydCBwbHVnaW49Im9yZy5lY2xpcHNlLmVtZi5lY29yZS54bWkiLz4KKyAgICAgIDxpbXBvcnQgcGx1Z2luPSJvcmcuZWNsaXBzZS5lbWYuZWRpdC51aSIvPgorICAgICAgPGltcG9ydCBwbHVnaW49Im9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzIi8+CisgICAgICA8aW1wb3J0IHBsdWdpbj0ib3JnLmVjbGlwc2UuaGVscCIvPgorICAgICAgPGltcG9ydCBwbHVnaW49Im9yZy5lY2xpcHNlLnVpLmlkZSIvPgorICAgICAgPGltcG9ydCBwbHVnaW49Im9yZy5lY2xpcHNlLnVpLnZpZXdzLmxvZyIvPgorICAgICAgPGltcG9ydCBwbHVnaW49Im9yZy5lY2xpcHNlLmNvcmUuZXhwcmVzc2lvbnMiLz4KKyAgICAgIDxpbXBvcnQgcGx1Z2luPSJvcmcuZWNsaXBzZS51aS5uYXZpZ2F0b3IiLz4KKyAgICAgIDxpbXBvcnQgcGx1Z2luPSJvcmcuZWNsaXBzZS51aS5uYXZpZ2F0b3IucmVzb3VyY2VzIi8+CisgICAgICA8aW1wb3J0IHBsdWdpbj0ib3JnLmVjbGlwc2UudWkuaW50cm8iLz4KKyAgICAgIDxpbXBvcnQgcGx1Z2luPSJvcmcuZWNsaXBzZS51aS5pbnRyby51bml2ZXJzYWwiLz4KKyAgICAgIDxpbXBvcnQgcGx1Z2luPSJvcmcuZWNsaXBzZS51aS5mb3JtcyIvPgorICAgICAgPGltcG9ydCBwbHVnaW49Im9yZy5lY2xpcHNlLmJpcnQuY2hhcnQuZW5naW5lIi8+CisgICAgICA8aW1wb3J0IHBsdWdpbj0ib3JnLmVjbGlwc2UuYmlydC5jaGFydC5lbmdpbmUuZXh0ZW5zaW9uIi8+CisgICAgICA8aW1wb3J0IHBsdWdpbj0ib3JnLmVjbGlwc2UuYmlydC5jb3JlLnVpIi8+CisgICAgICA8aW1wb3J0IHBsdWdpbj0ib3JnLmVjbGlwc2UuYmlydC5jaGFydC5kZXZpY2Uuc3d0Ii8+CisgICAgICA8aW1wb3J0IHBsdWdpbj0ib3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLm11bHRpcG9wdWxhdGlvbiIvPgorICAgICAgPGltcG9ydCBwbHVnaW49Im9yZy5lY2xpcHNlLmVtZi5lZGl0Ii8+CisgICAgICA8aW1wb3J0IHBsdWdpbj0ib3JnLmVjbGlwc2UuaGVscC5hcHBzZXJ2ZXIiLz4KKyAgICAgIDxpbXBvcnQgcGx1Z2luPSJvcmcuZWNsaXBzZS5jb3JlLmNvbW1hbmRzIiB2ZXJzaW9uPSIzLjYuMCIgbWF0Y2g9ImdyZWF0ZXJPckVxdWFsIi8+CisgICAgICA8aW1wb3J0IHBsdWdpbj0ib3JnLmVjbGlwc2UuY29yZS5ydW50aW1lIiB2ZXJzaW9uPSIzLjYuMCIgbWF0Y2g9ImdyZWF0ZXJPckVxdWFsIi8+CisgICAgICA8aW1wb3J0IHBsdWdpbj0ib3JnLmVjbGlwc2UuY29yZS5leHByZXNzaW9ucyIgdmVyc2lvbj0iMy40LjIwMCIgbWF0Y2g9ImdyZWF0ZXJPckVxdWFsIi8+CisgICAgICA8aW1wb3J0IHBsdWdpbj0ib3JnLmVjbGlwc2UuZW1mLmVjb3JlLnhtaSIgdmVyc2lvbj0iMi41LjAiIG1hdGNoPSJncmVhdGVyT3JFcXVhbCIvPgorICAgICAgPGltcG9ydCBwbHVnaW49Im9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMiIHZlcnNpb249IjEuMS4wIiBtYXRjaD0iZ3JlYXRlck9yRXF1YWwiLz4KKyAgICAgIDxpbXBvcnQgcGx1Z2luPSJvcmcuZWNsaXBzZS5zdGVtLnVpIiB2ZXJzaW9uPSIxLjEuMSIgbWF0Y2g9ImdyZWF0ZXJPckVxdWFsIi8+CisgICAgICA8aW1wb3J0IHBsdWdpbj0ib3JnLmVjbGlwc2UuZHJhdzJkIiB2ZXJzaW9uPSIzLjYuMSIgbWF0Y2g9ImdyZWF0ZXJPckVxdWFsIi8+CisgICAgICA8aW1wb3J0IHBsdWdpbj0ib3JnLmVjbGlwc2UuemVzdC5jb3JlIiB2ZXJzaW9uPSIxLjIuMCIgbWF0Y2g9ImdyZWF0ZXJPckVxdWFsIi8+CisgICAgICA8aW1wb3J0IHBsdWdpbj0ib3JnLmVjbGlwc2UuemVzdC5sYXlvdXRzIiB2ZXJzaW9uPSIxLjEuMCIgbWF0Y2g9ImdyZWF0ZXJPckVxdWFsIi8+CisgICAgICA8aW1wb3J0IHBsdWdpbj0ib3JnLmVjbGlwc2Uub3NnaSIvPgorICAgPC9yZXF1aXJlcz4KKworICAgPHBsdWdpbgorICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkiCisgICAgICAgICBkb3dubG9hZC1zaXplPSIwIgorICAgICAgICAgaW5zdGFsbC1zaXplPSIwIgorICAgICAgICAgdmVyc2lvbj0iMC4wLjAiCisgICAgICAgICB1bnBhY2s9ImZhbHNlIi8+CisKKyAgIDxwbHVnaW4KKyAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5zdGVtLnVpLmludGVydmVudGlvbnMiCisgICAgICAgICBkb3dubG9hZC1zaXplPSIwIgorICAgICAgICAgaW5zdGFsbC1zaXplPSIwIgorICAgICAgICAgdmVyc2lvbj0iMC4wLjAiCisgICAgICAgICB1bnBhY2s9ImZhbHNlIi8+CisKKyAgIDxwbHVnaW4KKyAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5zdGVtLmludGVydmVudGlvbnMiCisgICAgICAgICBkb3dubG9hZC1zaXplPSIwIgorICAgICAgICAgaW5zdGFsbC1zaXplPSIwIgorICAgICAgICAgdmVyc2lvbj0iMC4wLjAiCisgICAgICAgICB1bnBhY2s9ImZhbHNlIi8+CisKKyAgIDxwbHVnaW4KKyAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMiCisgICAgICAgICBkb3dubG9hZC1zaXplPSIwIgorICAgICAgICAgaW5zdGFsbC1zaXplPSIwIgorICAgICAgICAgdmVyc2lvbj0iMC4wLjAiCisgICAgICAgICB1bnBhY2s9ImZhbHNlIi8+CisKKyAgIDxwbHVnaW4KKyAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMiCisgICAgICAgICBkb3dubG9hZC1zaXplPSIwIgorICAgICAgICAgaW5zdGFsbC1zaXplPSIwIgorICAgICAgICAgdmVyc2lvbj0iMC4wLjAiCisgICAgICAgICB1bnBhY2s9ImZhbHNlIi8+CisKKyAgIDxwbHVnaW4KKyAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUiCisgICAgICAgICBkb3dubG9hZC1zaXplPSIwIgorICAgICAgICAgaW5zdGFsbC1zaXplPSIwIgorICAgICAgICAgdmVyc2lvbj0iMC4wLjAiCisgICAgICAgICB1bnBhY2s9ImZhbHNlIi8+CisKKyAgIDxwbHVnaW4KKyAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zIgorICAgICAgICAgZG93bmxvYWQtc2l6ZT0iMCIKKyAgICAgICAgIGluc3RhbGwtc2l6ZT0iMCIKKyAgICAgICAgIHZlcnNpb249IjAuMC4wIgorICAgICAgICAgdW5wYWNrPSJmYWxzZSIvPgorCisgICA8cGx1Z2luCisgICAgICAgICBpZD0ib3JnLmVjbGlwc2Uuc3RlbS5qb2JzIgorICAgICAgICAgZG93bmxvYWQtc2l6ZT0iMCIKKyAgICAgICAgIGluc3RhbGwtc2l6ZT0iMCIKKyAgICAgICAgIHZlcnNpb249IjAuMC4wIgorICAgICAgICAgdW5wYWNrPSJmYWxzZSIvPgorCisgICA8cGx1Z2luCisgICAgICAgICBpZD0ib3JnLmVjbGlwc2Uuc3RlbS5qb2JzLm5sMSIKKyAgICAgICAgIGRvd25sb2FkLXNpemU9IjAiCisgICAgICAgICBpbnN0YWxsLXNpemU9IjAiCisgICAgICAgICB2ZXJzaW9uPSIwLjAuMCIKKyAgICAgICAgIGZyYWdtZW50PSJ0cnVlIgorICAgICAgICAgdW5wYWNrPSJmYWxzZSIvPgorCisgICA8cGx1Z2luCisgICAgICAgICBpZD0ib3JnLmVjbGlwc2Uuc3RlbS5zZXF1ZW5jZXJzIgorICAgICAgICAgZG93bmxvYWQtc2l6ZT0iMCIKKyAgICAgICAgIGluc3RhbGwtc2l6ZT0iMCIKKyAgICAgICAgIHZlcnNpb249IjAuMC4wIgorICAgICAgICAgdW5wYWNrPSJmYWxzZSIvPgorCisgICA8cGx1Z2luCisgICAgICAgICBpZD0ib3JnLmVjbGlwc2Uuc3RlbS51aSIKKyAgICAgICAgIGRvd25sb2FkLXNpemU9IjAiCisgICAgICAgICBpbnN0YWxsLXNpemU9IjAiCisgICAgICAgICB2ZXJzaW9uPSIwLjAuMCIKKyAgICAgICAgIHVucGFjaz0iZmFsc2UiLz4KKworICAgPHBsdWdpbgorICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLnN0ZW0udWkubmwxIgorICAgICAgICAgZG93bmxvYWQtc2l6ZT0iMCIKKyAgICAgICAgIGluc3RhbGwtc2l6ZT0iMCIKKyAgICAgICAgIHZlcnNpb249IjAuMC4wIgorICAgICAgICAgZnJhZ21lbnQ9InRydWUiCisgICAgICAgICB1bnBhY2s9ImZhbHNlIi8+CisKKyAgIDxwbHVnaW4KKyAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5zdGVtLnVpLnJlcG9ydHMiCisgICAgICAgICBkb3dubG9hZC1zaXplPSIwIgorICAgICAgICAgaW5zdGFsbC1zaXplPSIwIgorICAgICAgICAgdmVyc2lvbj0iMC4wLjAiCisgICAgICAgICB1bnBhY2s9ImZhbHNlIi8+CisKKyAgIDxwbHVnaW4KKyAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5zdGVtLnV0aWwubG9nZ2VycyIKKyAgICAgICAgIGRvd25sb2FkLXNpemU9IjAiCisgICAgICAgICBpbnN0YWxsLXNpemU9IjAiCisgICAgICAgICB2ZXJzaW9uPSIwLjAuMCIKKyAgICAgICAgIHVucGFjaz0iZmFsc2UiLz4KKworICAgPHBsdWdpbgorICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhnZW5lcmF0b3JzIgorICAgICAgICAgZG93bmxvYWQtc2l6ZT0iMCIKKyAgICAgICAgIGluc3RhbGwtc2l6ZT0iMCIKKyAgICAgICAgIHZlcnNpb249IjAuMC4wIgorICAgICAgICAgdW5wYWNrPSJmYWxzZSIvPgorCisgICA8cGx1Z2luCisgICAgICAgICBpZD0ib3JnLmVjbGlwc2Uuc3RlbS5zb2x2ZXJzLmZkIgorICAgICAgICAgZG93bmxvYWQtc2l6ZT0iMCIKKyAgICAgICAgIGluc3RhbGwtc2l6ZT0iMCIKKyAgICAgICAgIHZlcnNpb249IjAuMC4wIgorICAgICAgICAgdW5wYWNrPSJmYWxzZSIvPgorCisgICA8cGx1Z2luCisgICAgICAgICBpZD0ib3JnLmVjbGlwc2Uuc3RlbS5zb2x2ZXJzLnJrIgorICAgICAgICAgZG93bmxvYWQtc2l6ZT0iMCIKKyAgICAgICAgIGluc3RhbGwtc2l6ZT0iMCIKKyAgICAgICAgIHZlcnNpb249IjAuMC4wIgorICAgICAgICAgdW5wYWNrPSJmYWxzZSIvPgorCisgICA8cGx1Z2luCisgICAgICAgICBpZD0ib3JnLmVjbGlwc2Uuc3RlbS50cmFuc3BvcnQiCisgICAgICAgICBkb3dubG9hZC1zaXplPSIwIgorICAgICAgICAgaW5zdGFsbC1zaXplPSIwIgorICAgICAgICAgdmVyc2lvbj0iMC4wLjAiCisgICAgICAgICB1bnBhY2s9ImZhbHNlIi8+CisKKyAgIDxwbHVnaW4KKyAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5zdGVtLnVpLmdlIgorICAgICAgICAgZG93bmxvYWQtc2l6ZT0iMCIKKyAgICAgICAgIGluc3RhbGwtc2l6ZT0iMCIKKyAgICAgICAgIHZlcnNpb249IjAuMC4wIgorICAgICAgICAgdW5wYWNrPSJmYWxzZSIvPgorCisgICA8cGx1Z2luCisgICAgICAgICBpZD0ib3JnLmVjbGlwc2Uuc3RlbS51aS5ncmFwaGVkaXRvciIKKyAgICAgICAgIGRvd25sb2FkLXNpemU9IjAiCisgICAgICAgICBpbnN0YWxsLXNpemU9IjAiCisgICAgICAgICB2ZXJzaW9uPSIwLjAuMCIKKyAgICAgICAgIHVucGFjaz0iZmFsc2UiLz4KKworICAgPHBsdWdpbgorICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLnN0ZW0udWkuZ3JhcGhnZW5lcmF0b3JzIgorICAgICAgICAgZG93bmxvYWQtc2l6ZT0iMCIKKyAgICAgICAgIGluc3RhbGwtc2l6ZT0iMCIKKyAgICAgICAgIHZlcnNpb249IjAuMC4wIgorICAgICAgICAgdW5wYWNrPSJmYWxzZSIvPgorCisgICA8cGx1Z2luCisgICAgICAgICBpZD0ib3JnLmVjbGlwc2Uuc3RlbS51aS5oZWFkbGVzcyIKKyAgICAgICAgIGRvd25sb2FkLXNpemU9IjAiCisgICAgICAgICBpbnN0YWxsLXNpemU9IjAiCisgICAgICAgICB2ZXJzaW9uPSIwLjAuMCIKKyAgICAgICAgIHVucGFjaz0iZmFsc2UiLz4KKworICAgPHBsdWdpbgorICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLnN0ZW0udWkuc29sdmVycy5mZCIKKyAgICAgICAgIGRvd25sb2FkLXNpemU9IjAiCisgICAgICAgICBpbnN0YWxsLXNpemU9IjAiCisgICAgICAgICB2ZXJzaW9uPSIwLjAuMCIKKyAgICAgICAgIHVucGFjaz0iZmFsc2UiLz4KKworICAgPHBsdWdpbgorICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLnN0ZW0udWkuc29sdmVycy5yayIKKyAgICAgICAgIGRvd25sb2FkLXNpemU9IjAiCisgICAgICAgICBpbnN0YWxsLXNpemU9IjAiCisgICAgICAgICB2ZXJzaW9uPSIwLjAuMCIKKyAgICAgICAgIHVucGFjaz0iZmFsc2UiLz4KKworICAgPHBsdWdpbgorICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLnN0ZW0udWkudHJhbnNwb3J0IgorICAgICAgICAgZG93bmxvYWQtc2l6ZT0iMCIKKyAgICAgICAgIGluc3RhbGwtc2l6ZT0iMCIKKyAgICAgICAgIHZlcnNpb249IjAuMC4wIgorICAgICAgICAgdW5wYWNrPSJmYWxzZSIvPgorCis8L2ZlYXR1cmU+CmRpZmYgLS1naXQgYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS5zdGVtLmNvcmUuZmVhdHVyZS9saWNlbnNlLmh0bWwgYi9mZWF0dXJlcy9vcmcuZWNsaXBzZS5zdGVtLmNvcmUuZmVhdHVyZS9saWNlbnNlLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzE4NGNhMwotLS0gL2Rldi9udWxsCisrKyBiL2ZlYXR1cmVzL29yZy5lY2xpcHNlLnN0ZW0uY29yZS5mZWF0dXJlL2xpY2Vuc2UuaHRtbApAQCAtMCwwICsxLDEwNyBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iSVNPLTg4NTktMSIgPz4KKzwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgWEhUTUwgMS4wIFN0cmljdC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbDEvRFREL3hodG1sMS1zdHJpY3QuZHRkIj4KKzxodG1sIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIj4KKzxoZWFkPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9SVNPLTg4NTktMSIgLz4KKzx0aXRsZT5FY2xpcHNlIEZvdW5kYXRpb24gU29mdHdhcmUgVXNlciBBZ3JlZW1lbnQ8L3RpdGxlPgorPC9oZWFkPgorCis8Ym9keSBsYW5nPSJFTi1VUyI+Cis8aDI+RWNsaXBzZSBGb3VuZGF0aW9uIFNvZnR3YXJlIFVzZXIgQWdyZWVtZW50PC9oMj4KKzxwPkFwcmlsIDE0LCAyMDEwPC9wPgorCis8aDM+VXNhZ2UgT2YgQ29udGVudDwvaDM+CisKKzxwPlRIRSBFQ0xJUFNFIEZPVU5EQVRJT04gTUFLRVMgQVZBSUxBQkxFIFNPRlRXQVJFLCBET0NVTUVOVEFUSU9OLCBJTkZPUk1BVElPTiBBTkQvT1IgT1RIRVIgTUFURVJJQUxTIEZPUiBPUEVOIFNPVVJDRSBQUk9KRUNUUworICAgKENPTExFQ1RJVkVMWSAmcXVvdDtDT05URU5UJnF1b3Q7KS4gIFVTRSBPRiBUSEUgQ09OVEVOVCBJUyBHT1ZFUk5FRCBCWSBUSEUgVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgVEhJUyBBR1JFRU1FTlQgQU5EL09SIFRIRSBURVJNUyBBTkQKKyAgIENPTkRJVElPTlMgT0YgTElDRU5TRSBBR1JFRU1FTlRTIE9SIE5PVElDRVMgSU5ESUNBVEVEIE9SIFJFRkVSRU5DRUQgQkVMT1cuICBCWSBVU0lORyBUSEUgQ09OVEVOVCwgWU9VIEFHUkVFIFRIQVQgWU9VUiBVU0UKKyAgIE9GIFRIRSBDT05URU5UIElTIEdPVkVSTkVEIEJZIFRISVMgQUdSRUVNRU5UIEFORC9PUiBUSEUgVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgQU5ZIEFQUExJQ0FCTEUgTElDRU5TRSBBR1JFRU1FTlRTIE9SCisgICBOT1RJQ0VTIElORElDQVRFRCBPUiBSRUZFUkVOQ0VEIEJFTE9XLiAgSUYgWU9VIERPIE5PVCBBR1JFRSBUTyBUSEUgVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgVEhJUyBBR1JFRU1FTlQgQU5EIFRIRSBURVJNUyBBTkQKKyAgIENPTkRJVElPTlMgT0YgQU5ZIEFQUExJQ0FCTEUgTElDRU5TRSBBR1JFRU1FTlRTIE9SIE5PVElDRVMgSU5ESUNBVEVEIE9SIFJFRkVSRU5DRUQgQkVMT1csIFRIRU4gWU9VIE1BWSBOT1QgVVNFIFRIRSBDT05URU5ULjwvcD4KKworPGgzPkFwcGxpY2FibGUgTGljZW5zZXM8L2gzPgorCis8cD5Vbmxlc3Mgb3RoZXJ3aXNlIGluZGljYXRlZCwgYWxsIENvbnRlbnQgbWFkZSBhdmFpbGFibGUgYnkgdGhlIEVjbGlwc2UgRm91bmRhdGlvbiBpcyBwcm92aWRlZCB0byB5b3UgdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4wCisgICAoJnF1b3Q7RVBMJnF1b3Q7KS4gIEEgY29weSBvZiB0aGUgRVBMIGlzIHByb3ZpZGVkIHdpdGggdGhpcyBDb250ZW50IGFuZCBpcyBhbHNvIGF2YWlsYWJsZSBhdCA8YSBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbCI+aHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWw8L2E+LgorICAgRm9yIHB1cnBvc2VzIG9mIHRoZSBFUEwsICZxdW90O1Byb2dyYW0mcXVvdDsgd2lsbCBtZWFuIHRoZSBDb250ZW50LjwvcD4KKworPHA+Q29udGVudCBpbmNsdWRlcywgYnV0IGlzIG5vdCBsaW1pdGVkIHRvLCBzb3VyY2UgY29kZSwgb2JqZWN0IGNvZGUsIGRvY3VtZW50YXRpb24gYW5kIG90aGVyIGZpbGVzIG1haW50YWluZWQgaW4gdGhlIEVjbGlwc2UgRm91bmRhdGlvbiBzb3VyY2UgY29kZQorICAgcmVwb3NpdG9yeSAoJnF1b3Q7UmVwb3NpdG9yeSZxdW90OykgaW4gc29mdHdhcmUgbW9kdWxlcyAoJnF1b3Q7TW9kdWxlcyZxdW90OykgYW5kIG1hZGUgYXZhaWxhYmxlIGFzIGRvd25sb2FkYWJsZSBhcmNoaXZlcyAoJnF1b3Q7RG93bmxvYWRzJnF1b3Q7KS48L3A+CisKKzx1bD4KKyAgICAgICA8bGk+Q29udGVudCBtYXkgYmUgc3RydWN0dXJlZCBhbmQgcGFja2FnZWQgaW50byBtb2R1bGVzIHRvIGZhY2lsaXRhdGUgZGVsaXZlcmluZywgZXh0ZW5kaW5nLCBhbmQgdXBncmFkaW5nIHRoZSBDb250ZW50LiAgVHlwaWNhbCBtb2R1bGVzIG1heSBpbmNsdWRlIHBsdWctaW5zICgmcXVvdDtQbHVnLWlucyZxdW90OyksIHBsdWctaW4gZnJhZ21lbnRzICgmcXVvdDtGcmFnbWVudHMmcXVvdDspLCBhbmQgZmVhdHVyZXMgKCZxdW90O0ZlYXR1cmVzJnF1b3Q7KS48L2xpPgorICAgICAgIDxsaT5FYWNoIFBsdWctaW4gb3IgRnJhZ21lbnQgbWF5IGJlIHBhY2thZ2VkIGFzIGEgc3ViLWRpcmVjdG9yeSBvciBKQVIgKEphdmEmdHJhZGU7IEFSY2hpdmUpIGluIGEgZGlyZWN0b3J5IG5hbWVkICZxdW90O3BsdWdpbnMmcXVvdDsuPC9saT4KKyAgICAgICA8bGk+QSBGZWF0dXJlIGlzIGEgYnVuZGxlIG9mIG9uZSBvciBtb3JlIFBsdWctaW5zIGFuZC9vciBGcmFnbWVudHMgYW5kIGFzc29jaWF0ZWQgbWF0ZXJpYWwuICBFYWNoIEZlYXR1cmUgbWF5IGJlIHBhY2thZ2VkIGFzIGEgc3ViLWRpcmVjdG9yeSBpbiBhIGRpcmVjdG9yeSBuYW1lZCAmcXVvdDtmZWF0dXJlcyZxdW90Oy4gIFdpdGhpbiBhIEZlYXR1cmUsIGZpbGVzIG5hbWVkICZxdW90O2ZlYXR1cmUueG1sJnF1b3Q7IG1heSBjb250YWluIGEgbGlzdCBvZiB0aGUgbmFtZXMgYW5kIHZlcnNpb24gbnVtYmVycyBvZiB0aGUgUGx1Zy1pbnMKKyAgICAgIGFuZC9vciBGcmFnbWVudHMgYXNzb2NpYXRlZCB3aXRoIHRoYXQgRmVhdHVyZS48L2xpPgorICAgICAgIDxsaT5GZWF0dXJlcyBtYXkgYWxzbyBpbmNsdWRlIG90aGVyIEZlYXR1cmVzICgmcXVvdDtJbmNsdWRlZCBGZWF0dXJlcyZxdW90OykuIFdpdGhpbiBhIEZlYXR1cmUsIGZpbGVzIG5hbWVkICZxdW90O2ZlYXR1cmUueG1sJnF1b3Q7IG1heSBjb250YWluIGEgbGlzdCBvZiB0aGUgbmFtZXMgYW5kIHZlcnNpb24gbnVtYmVycyBvZiBJbmNsdWRlZCBGZWF0dXJlcy48L2xpPgorPC91bD4KKworPHA+VGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIGdvdmVybmluZyBQbHVnLWlucyBhbmQgRnJhZ21lbnRzIHNob3VsZCBiZSBjb250YWluZWQgaW4gZmlsZXMgbmFtZWQgJnF1b3Q7YWJvdXQuaHRtbCZxdW90OyAoJnF1b3Q7QWJvdXRzJnF1b3Q7KS4gVGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIGdvdmVybmluZyBGZWF0dXJlcyBhbmQKK0luY2x1ZGVkIEZlYXR1cmVzIHNob3VsZCBiZSBjb250YWluZWQgaW4gZmlsZXMgbmFtZWQgJnF1b3Q7bGljZW5zZS5odG1sJnF1b3Q7ICgmcXVvdDtGZWF0dXJlIExpY2Vuc2VzJnF1b3Q7KS4gIEFib3V0cyBhbmQgRmVhdHVyZSBMaWNlbnNlcyBtYXkgYmUgbG9jYXRlZCBpbiBhbnkgZGlyZWN0b3J5IG9mIGEgRG93bmxvYWQgb3IgTW9kdWxlCitpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0byB0aGUgZm9sbG93aW5nIGxvY2F0aW9uczo8L3A+CisKKzx1bD4KKyAgICAgICA8bGk+VGhlIHRvcC1sZXZlbCAocm9vdCkgZGlyZWN0b3J5PC9saT4KKyAgICAgICA8bGk+UGx1Zy1pbiBhbmQgRnJhZ21lbnQgZGlyZWN0b3JpZXM8L2xpPgorICAgICAgIDxsaT5JbnNpZGUgUGx1Zy1pbnMgYW5kIEZyYWdtZW50cyBwYWNrYWdlZCBhcyBKQVJzPC9saT4KKyAgICAgICA8bGk+U3ViLWRpcmVjdG9yaWVzIG9mIHRoZSBkaXJlY3RvcnkgbmFtZWQgJnF1b3Q7c3JjJnF1b3Q7IG9mIGNlcnRhaW4gUGx1Zy1pbnM8L2xpPgorICAgICAgIDxsaT5GZWF0dXJlIGRpcmVjdG9yaWVzPC9saT4KKzwvdWw+CisKKzxwPk5vdGU6IGlmIGEgRmVhdHVyZSBtYWRlIGF2YWlsYWJsZSBieSB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uIGlzIGluc3RhbGxlZCB1c2luZyB0aGUgUHJvdmlzaW9uaW5nIFRlY2hub2xvZ3kgKGFzIGRlZmluZWQgYmVsb3cpLCB5b3UgbXVzdCBhZ3JlZSB0byBhIGxpY2Vuc2UgKCZxdW90O0ZlYXR1cmUgVXBkYXRlIExpY2Vuc2UmcXVvdDspIGR1cmluZyB0aGUKK2luc3RhbGxhdGlvbiBwcm9jZXNzLiAgSWYgdGhlIEZlYXR1cmUgY29udGFpbnMgSW5jbHVkZWQgRmVhdHVyZXMsIHRoZSBGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlIHNob3VsZCBlaXRoZXIgcHJvdmlkZSB5b3Ugd2l0aCB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgZ292ZXJuaW5nIHRoZSBJbmNsdWRlZCBGZWF0dXJlcyBvcgoraW5mb3JtIHlvdSB3aGVyZSB5b3UgY2FuIGxvY2F0ZSB0aGVtLiAgRmVhdHVyZSBVcGRhdGUgTGljZW5zZXMgbWF5IGJlIGZvdW5kIGluIHRoZSAmcXVvdDtsaWNlbnNlJnF1b3Q7IHByb3BlcnR5IG9mIGZpbGVzIG5hbWVkICZxdW90O2ZlYXR1cmUucHJvcGVydGllcyZxdW90OyBmb3VuZCB3aXRoaW4gYSBGZWF0dXJlLgorU3VjaCBBYm91dHMsIEZlYXR1cmUgTGljZW5zZXMsIGFuZCBGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlcyBjb250YWluIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyAob3IgcmVmZXJlbmNlcyB0byBzdWNoIHRlcm1zIGFuZCBjb25kaXRpb25zKSB0aGF0IGdvdmVybiB5b3VyIHVzZSBvZiB0aGUgYXNzb2NpYXRlZCBDb250ZW50IGluCit0aGF0IGRpcmVjdG9yeS48L3A+CisKKzxwPlRIRSBBQk9VVFMsIEZFQVRVUkUgTElDRU5TRVMsIEFORCBGRUFUVVJFIFVQREFURSBMSUNFTlNFUyBNQVkgUkVGRVIgVE8gVEhFIEVQTCBPUiBPVEhFUiBMSUNFTlNFIEFHUkVFTUVOVFMsIE5PVElDRVMgT1IgVEVSTVMgQU5EIENPTkRJVElPTlMuICBTT01FIE9GIFRIRVNFCitPVEhFUiBMSUNFTlNFIEFHUkVFTUVOVFMgTUFZIElOQ0xVREUgKEJVVCBBUkUgTk9UIExJTUlURUQgVE8pOjwvcD4KKworPHVsPgorICAgICAgIDxsaT5Db21tb24gUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjAgKGF2YWlsYWJsZSBhdCA8YSBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2NwbC12MTAuaHRtbCI+aHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9jcGwtdjEwLmh0bWw8L2E+KTwvbGk+CisgICAgICAgPGxpPkFwYWNoZSBTb2Z0d2FyZSBMaWNlbnNlIDEuMSAoYXZhaWxhYmxlIGF0IDxhIGhyZWY9Imh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFIj5odHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRTwvYT4pPC9saT4KKyAgICAgICA8bGk+QXBhY2hlIFNvZnR3YXJlIExpY2Vuc2UgMi4wIChhdmFpbGFibGUgYXQgPGEgaHJlZj0iaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wIj5odHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjA8L2E+KTwvbGk+CisgICAgICAgPGxpPk1ldHJvIExpbmsgUHVibGljIExpY2Vuc2UgMS4wMCAoYXZhaWxhYmxlIGF0IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbmdyb3VwLm9yZy9vcGVubW90aWYvc3VwcG9ydGVycy9tZXRyb2xpbmsvbGljZW5zZS5odG1sIj5odHRwOi8vd3d3Lm9wZW5ncm91cC5vcmcvb3Blbm1vdGlmL3N1cHBvcnRlcnMvbWV0cm9saW5rL2xpY2Vuc2UuaHRtbDwvYT4pPC9saT4KKyAgICAgICA8bGk+TW96aWxsYSBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMSAoYXZhaWxhYmxlIGF0IDxhIGhyZWY9Imh0dHA6Ly93d3cubW96aWxsYS5vcmcvTVBML01QTC0xLjEuaHRtbCI+aHR0cDovL3d3dy5tb3ppbGxhLm9yZy9NUEwvTVBMLTEuMS5odG1sPC9hPik8L2xpPgorPC91bD4KKworPHA+SVQgSVMgWU9VUiBPQkxJR0FUSU9OIFRPIFJFQUQgQU5EIEFDQ0VQVCBBTEwgU1VDSCBURVJNUyBBTkQgQ09ORElUSU9OUyBQUklPUiBUTyBVU0UgT0YgVEhFIENPTlRFTlQuICBJZiBubyBBYm91dCwgRmVhdHVyZSBMaWNlbnNlLCBvciBGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlIGlzIHByb3ZpZGVkLCBwbGVhc2UKK2NvbnRhY3QgdGhlIEVjbGlwc2UgRm91bmRhdGlvbiB0byBkZXRlcm1pbmUgd2hhdCB0ZXJtcyBhbmQgY29uZGl0aW9ucyBnb3Zlcm4gdGhhdCBwYXJ0aWN1bGFyIENvbnRlbnQuPC9wPgorCisKKzxoMz5Vc2Ugb2YgUHJvdmlzaW9uaW5nIFRlY2hub2xvZ3k8L2gzPgorCis8cD5UaGUgRWNsaXBzZSBGb3VuZGF0aW9uIG1ha2VzIGF2YWlsYWJsZSBwcm92aXNpb25pbmcgc29mdHdhcmUsIGV4YW1wbGVzIG9mIHdoaWNoIGluY2x1ZGUsIGJ1dCBhcmUgbm90IGxpbWl0ZWQgdG8sIHAyIGFuZCB0aGUgRWNsaXBzZQorICAgVXBkYXRlIE1hbmFnZXIgKCZxdW90O1Byb3Zpc2lvbmluZyBUZWNobm9sb2d5JnF1b3Q7KSBmb3IgdGhlIHB1cnBvc2Ugb2YgYWxsb3dpbmcgdXNlcnMgdG8gaW5zdGFsbCBzb2Z0d2FyZSwgZG9jdW1lbnRhdGlvbiwgaW5mb3JtYXRpb24gYW5kL29yCisgICBvdGhlciBtYXRlcmlhbHMgKGNvbGxlY3RpdmVseSAmcXVvdDtJbnN0YWxsYWJsZSBTb2Z0d2FyZSZxdW90OykuIFRoaXMgY2FwYWJpbGl0eSBpcyBwcm92aWRlZCB3aXRoIHRoZSBpbnRlbnQgb2YgYWxsb3dpbmcgc3VjaCB1c2VycyB0bworICAgaW5zdGFsbCwgZXh0ZW5kIGFuZCB1cGRhdGUgRWNsaXBzZS1iYXNlZCBwcm9kdWN0cy4gSW5mb3JtYXRpb24gYWJvdXQgcGFja2FnaW5nIEluc3RhbGxhYmxlIFNvZnR3YXJlIGlzIGF2YWlsYWJsZSBhdCA8YQorICAgICAgIGhyZWY9Imh0dHA6Ly9lY2xpcHNlLm9yZy9lcXVpbm94L3AyL3JlcG9zaXRvcnlfcGFja2FnaW5nLmh0bWwiPmh0dHA6Ly9lY2xpcHNlLm9yZy9lcXVpbm94L3AyL3JlcG9zaXRvcnlfcGFja2FnaW5nLmh0bWw8L2E+CisgICAoJnF1b3Q7U3BlY2lmaWNhdGlvbiZxdW90OykuPC9wPgorCis8cD5Zb3UgbWF5IHVzZSBQcm92aXNpb25pbmcgVGVjaG5vbG9neSB0byBhbGxvdyBvdGhlciBwYXJ0aWVzIHRvIGluc3RhbGwgSW5zdGFsbGFibGUgU29mdHdhcmUuIFlvdSBzaGFsbCBiZSByZXNwb25zaWJsZSBmb3IgZW5hYmxpbmcgdGhlCisgICBhcHBsaWNhYmxlIGxpY2Vuc2UgYWdyZWVtZW50cyByZWxhdGluZyB0byB0aGUgSW5zdGFsbGFibGUgU29mdHdhcmUgdG8gYmUgcHJlc2VudGVkIHRvLCBhbmQgYWNjZXB0ZWQgYnksIHRoZSB1c2VycyBvZiB0aGUgUHJvdmlzaW9uaW5nIFRlY2hub2xvZ3kKKyAgIGluIGFjY29yZGFuY2Ugd2l0aCB0aGUgU3BlY2lmaWNhdGlvbi4gQnkgdXNpbmcgUHJvdmlzaW9uaW5nIFRlY2hub2xvZ3kgaW4gc3VjaCBhIG1hbm5lciBhbmQgbWFraW5nIGl0IGF2YWlsYWJsZSBpbiBhY2NvcmRhbmNlIHdpdGggdGhlCisgICBTcGVjaWZpY2F0aW9uLCB5b3UgZnVydGhlciBhY2tub3dsZWRnZSB5b3VyIGFncmVlbWVudCB0bywgYW5kIHRoZSBhY3F1aXNpdGlvbiBvZiBhbGwgbmVjZXNzYXJ5IHJpZ2h0cyB0byBwZXJtaXQgdGhlIGZvbGxvd2luZzo8L3A+CisKKzxvbD4KKyAgICAgICA8bGk+QSBzZXJpZXMgb2YgYWN0aW9ucyBtYXkgb2NjdXIgKCZxdW90O1Byb3Zpc2lvbmluZyBQcm9jZXNzJnF1b3Q7KSBpbiB3aGljaCBhIHVzZXIgbWF5IGV4ZWN1dGUgdGhlIFByb3Zpc2lvbmluZyBUZWNobm9sb2d5CisgICAgICAgb24gYSBtYWNoaW5lICgmcXVvdDtUYXJnZXQgTWFjaGluZSZxdW90Oykgd2l0aCB0aGUgaW50ZW50IG9mIGluc3RhbGxpbmcsIGV4dGVuZGluZyBvciB1cGRhdGluZyB0aGUgZnVuY3Rpb25hbGl0eSBvZiBhbiBFY2xpcHNlLWJhc2VkCisgICAgICAgcHJvZHVjdC48L2xpPgorICAgICAgIDxsaT5EdXJpbmcgdGhlIFByb3Zpc2lvbmluZyBQcm9jZXNzLCB0aGUgUHJvdmlzaW9uaW5nIFRlY2hub2xvZ3kgbWF5IGNhdXNlIHRoaXJkIHBhcnR5IEluc3RhbGxhYmxlIFNvZnR3YXJlIG9yIGEgcG9ydGlvbiB0aGVyZW9mIHRvIGJlCisgICAgICAgYWNjZXNzZWQgYW5kIGNvcGllZCB0byB0aGUgVGFyZ2V0IE1hY2hpbmUuPC9saT4KKyAgICAgICA8bGk+UHVyc3VhbnQgdG8gdGhlIFNwZWNpZmljYXRpb24sIHlvdSB3aWxsIHByb3ZpZGUgdG8gdGhlIHVzZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIHRoYXQgZ292ZXJuIHRoZSB1c2Ugb2YgdGhlIEluc3RhbGxhYmxlCisgICAgICAgU29mdHdhcmUgKCZxdW90O0luc3RhbGxhYmxlIFNvZnR3YXJlIEFncmVlbWVudCZxdW90OykgYW5kIHN1Y2ggSW5zdGFsbGFibGUgU29mdHdhcmUgQWdyZWVtZW50IHNoYWxsIGJlIGFjY2Vzc2VkIGZyb20gdGhlIFRhcmdldAorICAgICAgIE1hY2hpbmUgaW4gYWNjb3JkYW5jZSB3aXRoIHRoZSBTcGVjaWZpY2F0aW9uLiBTdWNoIEluc3RhbGxhYmxlIFNvZnR3YXJlIEFncmVlbWVudCBtdXN0IGluZm9ybSB0aGUgdXNlciBvZiB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgdGhhdCBnb3Zlcm4KKyAgICAgICB0aGUgSW5zdGFsbGFibGUgU29mdHdhcmUgYW5kIG11c3Qgc29saWNpdCBhY2NlcHRhbmNlIGJ5IHRoZSBlbmQgdXNlciBpbiB0aGUgbWFubmVyIHByZXNjcmliZWQgaW4gc3VjaCBJbnN0YWxsYWJsZSBTb2Z0d2FyZSBBZ3JlZW1lbnQuIFVwb24gc3VjaAorICAgICAgIGluZGljYXRpb24gb2YgYWdyZWVtZW50IGJ5IHRoZSB1c2VyLCB0aGUgcHJvdmlzaW9uaW5nIFRlY2hub2xvZ3kgd2lsbCBjb21wbGV0ZSBpbnN0YWxsYXRpb24gb2YgdGhlIEluc3RhbGxhYmxlIFNvZnR3YXJlLjwvbGk+Cis8L29sPgorCis8aDM+Q3J5cHRvZ3JhcGh5PC9oMz4KKworPHA+Q29udGVudCBtYXkgY29udGFpbiBlbmNyeXB0aW9uIHNvZnR3YXJlLiBUaGUgY291bnRyeSBpbiB3aGljaCB5b3UgYXJlIGN1cnJlbnRseSBtYXkgaGF2ZSByZXN0cmljdGlvbnMgb24gdGhlIGltcG9ydCwgcG9zc2Vzc2lvbiwgYW5kIHVzZSwgYW5kL29yIHJlLWV4cG9ydCB0bworICAgYW5vdGhlciBjb3VudHJ5LCBvZiBlbmNyeXB0aW9uIHNvZnR3YXJlLiBCRUZPUkUgdXNpbmcgYW55IGVuY3J5cHRpb24gc29mdHdhcmUsIHBsZWFzZSBjaGVjayB0aGUgY291bnRyeSdzIGxhd3MsIHJlZ3VsYXRpb25zIGFuZCBwb2xpY2llcyBjb25jZXJuaW5nIHRoZSBpbXBvcnQsCisgICBwb3NzZXNzaW9uLCBvciB1c2UsIGFuZCByZS1leHBvcnQgb2YgZW5jcnlwdGlvbiBzb2Z0d2FyZSwgdG8gc2VlIGlmIHRoaXMgaXMgcGVybWl0dGVkLjwvcD4KKworPHA+PHNtYWxsPkphdmEgYW5kIGFsbCBKYXZhLWJhc2VkIHRyYWRlbWFya3MgYXJlIHRyYWRlbWFya3Mgb2YgT3JhY2xlIENvcnBvcmF0aW9uIGluIHRoZSBVbml0ZWQgU3RhdGVzLCBvdGhlciBjb3VudHJpZXMsIG9yIGJvdGguPC9zbWFsbD48L3A+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5LmVhcnRoc2NpZW5jZS5mZWF0dXJlLy5wcm9qZWN0IGIvZmVhdHVyZXMvb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS5lYXJ0aHNjaWVuY2UuZmVhdHVyZS8ucHJvamVjdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYzdhMjI3Ci0tLSAvZGV2L251bGwKKysrIGIvZmVhdHVyZXMvb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS5lYXJ0aHNjaWVuY2UuZmVhdHVyZS8ucHJvamVjdApAQCAtMCwwICsxLDE3IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPHByb2plY3REZXNjcmlwdGlvbj4KKwk8bmFtZT5vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5LmVhcnRoc2NpZW5jZS5mZWF0dXJlPC9uYW1lPgorCTxjb21tZW50PjwvY29tbWVudD4KKwk8cHJvamVjdHM+CisJPC9wcm9qZWN0cz4KKwk8YnVpbGRTcGVjPgorCQk8YnVpbGRDb21tYW5kPgorCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLkZlYXR1cmVCdWlsZGVyPC9uYW1lPgorCQkJPGFyZ3VtZW50cz4KKwkJCTwvYXJndW1lbnRzPgorCQk8L2J1aWxkQ29tbWFuZD4KKwk8L2J1aWxkU3BlYz4KKwk8bmF0dXJlcz4KKwkJPG5hdHVyZT5vcmcuZWNsaXBzZS5wZGUuRmVhdHVyZU5hdHVyZTwvbmF0dXJlPgorCTwvbmF0dXJlcz4KKzwvcHJvamVjdERlc2NyaXB0aW9uPgpkaWZmIC0tZ2l0IGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS5lYXJ0aHNjaWVuY2UuZmVhdHVyZS9idWlsZC5wcm9wZXJ0aWVzIGIvZmVhdHVyZXMvb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS5lYXJ0aHNjaWVuY2UuZmVhdHVyZS9idWlsZC5wcm9wZXJ0aWVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI3NGFmODYKLS0tIC9kZXYvbnVsbAorKysgYi9mZWF0dXJlcy9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5LmVhcnRoc2NpZW5jZS5mZWF0dXJlL2J1aWxkLnByb3BlcnRpZXMKQEAgLTAsMCArMSw0IEBACitiaW4uaW5jbHVkZXMgPSBmZWF0dXJlLnhtbCxcCisgICAgICAgICAgICAgICBmZWF0dXJlLnByb3BlcnRpZXMsXAorICAgICAgICAgICAgICAgZXBsLXYxMC5odG1sLFwKKyAgICAgICAgICAgICAgIGxpY2Vuc2UuaHRtbApkaWZmIC0tZ2l0IGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS5lYXJ0aHNjaWVuY2UuZmVhdHVyZS9lcGwtdjEwLmh0bWwgYi9mZWF0dXJlcy9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5LmVhcnRoc2NpZW5jZS5mZWF0dXJlL2VwbC12MTAuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZDRiMTk2Ci0tLSAvZGV2L251bGwKKysrIGIvZmVhdHVyZXMvb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS5lYXJ0aHNjaWVuY2UuZmVhdHVyZS9lcGwtdjEwLmh0bWwKQEAgLTAsMCArMSwzMjggQEAKKzxodG1sIHhtbG5zOm89InVybjpzY2hlbWFzLW1pY3Jvc29mdC1jb206b2ZmaWNlOm9mZmljZSIKK3htbG5zOnc9InVybjpzY2hlbWFzLW1pY3Jvc29mdC1jb206b2ZmaWNlOndvcmQiCit4bWxucz0iaHR0cDovL3d3dy53My5vcmcvVFIvUkVDLWh0bWw0MCI+CisKKzxoZWFkPgorPG1ldGEgaHR0cC1lcXVpdj1Db250ZW50LVR5cGUgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PXdpbmRvd3MtMTI1MiI+Cis8bWV0YSBuYW1lPVByb2dJZCBjb250ZW50PVdvcmQuRG9jdW1lbnQ+Cis8bWV0YSBuYW1lPUdlbmVyYXRvciBjb250ZW50PSJNaWNyb3NvZnQgV29yZCA5Ij4KKzxtZXRhIG5hbWU9T3JpZ2luYXRvciBjb250ZW50PSJNaWNyb3NvZnQgV29yZCA5Ij4KKzxsaW5rIHJlbD1GaWxlLUxpc3QKK2hyZWY9Ii4vRWNsaXBzZSUyMEVQTCUyMDIwMDNfMTFfMTAlMjBGaW5hbF9maWxlcy9maWxlbGlzdC54bWwiPgorPHRpdGxlPkVjbGlwc2UgUHVibGljIExpY2Vuc2UgLSBWZXJzaW9uIDEuMDwvdGl0bGU+Cis8IS0tW2lmIGd0ZSBtc28gOV0+PHhtbD4KKyA8bzpEb2N1bWVudFByb3BlcnRpZXM+CisgIDxvOlJldmlzaW9uPjI8L286UmV2aXNpb24+CisgIDxvOlRvdGFsVGltZT4zPC9vOlRvdGFsVGltZT4KKyAgPG86Q3JlYXRlZD4yMDA0LTAzLTA1VDIzOjAzOjAwWjwvbzpDcmVhdGVkPgorICA8bzpMYXN0U2F2ZWQ+MjAwNC0wMy0wNVQyMzowMzowMFo8L286TGFzdFNhdmVkPgorICA8bzpQYWdlcz40PC9vOlBhZ2VzPgorICA8bzpXb3Jkcz4xNjI2PC9vOldvcmRzPgorICA8bzpDaGFyYWN0ZXJzPjkyNzA8L286Q2hhcmFjdGVycz4KKyAgIDxvOkxpbmVzPjc3PC9vOkxpbmVzPgorICA8bzpQYXJhZ3JhcGhzPjE4PC9vOlBhcmFncmFwaHM+CisgIDxvOkNoYXJhY3RlcnNXaXRoU3BhY2VzPjExMzg0PC9vOkNoYXJhY3RlcnNXaXRoU3BhY2VzPgorICA8bzpWZXJzaW9uPjkuNDQwMjwvbzpWZXJzaW9uPgorIDwvbzpEb2N1bWVudFByb3BlcnRpZXM+Cis8L3htbD48IVtlbmRpZl0tLT48IS0tW2lmIGd0ZSBtc28gOV0+PHhtbD4KKyA8dzpXb3JkRG9jdW1lbnQ+CisgIDx3OlRyYWNrUmV2aXNpb25zLz4KKyA8L3c6V29yZERvY3VtZW50PgorPC94bWw+PCFbZW5kaWZdLS0+Cis8c3R5bGU+Cis8IS0tCisgLyogRm9udCBEZWZpbml0aW9ucyAqLworQGZvbnQtZmFjZQorCXtmb250LWZhbWlseTpUYWhvbWE7CisJcGFub3NlLTE6MiAxMSA2IDQgMyA1IDQgNCAyIDQ7CisJbXNvLWZvbnQtY2hhcnNldDowOworCW1zby1nZW5lcmljLWZvbnQtZmFtaWx5OnN3aXNzOworCW1zby1mb250LXBpdGNoOnZhcmlhYmxlOworCW1zby1mb250LXNpZ25hdHVyZTo1NTM2Nzk0OTUgLTIxNDc0ODM2NDggOCAwIDY2MDQ3IDA7fQorIC8qIFN0eWxlIERlZmluaXRpb25zICovCitwLk1zb05vcm1hbCwgbGkuTXNvTm9ybWFsLCBkaXYuTXNvTm9ybWFsCisJe21zby1zdHlsZS1wYXJlbnQ6IiI7CisJbWFyZ2luOjBpbjsKKwltYXJnaW4tYm90dG9tOi4wMDAxcHQ7CisJbXNvLXBhZ2luYXRpb246d2lkb3ctb3JwaGFuOworCWZvbnQtc2l6ZToxMi4wcHQ7CisJZm9udC1mYW1pbHk6IlRpbWVzIE5ldyBSb21hbiI7CisJbXNvLWZhcmVhc3QtZm9udC1mYW1pbHk6IlRpbWVzIE5ldyBSb21hbiI7fQorcAorCXttYXJnaW4tcmlnaHQ6MGluOworCW1zby1tYXJnaW4tdG9wLWFsdDphdXRvOworCW1zby1tYXJnaW4tYm90dG9tLWFsdDphdXRvOworCW1hcmdpbi1sZWZ0OjBpbjsKKwltc28tcGFnaW5hdGlvbjp3aWRvdy1vcnBoYW47CisJZm9udC1zaXplOjEyLjBwdDsKKwlmb250LWZhbWlseToiVGltZXMgTmV3IFJvbWFuIjsKKwltc28tZmFyZWFzdC1mb250LWZhbWlseToiVGltZXMgTmV3IFJvbWFuIjt9CitwLkJhbGxvb25UZXh0LCBsaS5CYWxsb29uVGV4dCwgZGl2LkJhbGxvb25UZXh0CisJe21zby1zdHlsZS1uYW1lOiJCYWxsb29uIFRleHQiOworCW1hcmdpbjowaW47CisJbWFyZ2luLWJvdHRvbTouMDAwMXB0OworCW1zby1wYWdpbmF0aW9uOndpZG93LW9ycGhhbjsKKwlmb250LXNpemU6OC4wcHQ7CisJZm9udC1mYW1pbHk6VGFob21hOworCW1zby1mYXJlYXN0LWZvbnQtZmFtaWx5OiJUaW1lcyBOZXcgUm9tYW4iO30KK0BwYWdlIFNlY3Rpb24xCisJe3NpemU6OC41aW4gMTEuMGluOworCW1hcmdpbjoxLjBpbiAxLjI1aW4gMS4waW4gMS4yNWluOworCW1zby1oZWFkZXItbWFyZ2luOi41aW47CisJbXNvLWZvb3Rlci1tYXJnaW46LjVpbjsKKwltc28tcGFwZXItc291cmNlOjA7fQorZGl2LlNlY3Rpb24xCisJe3BhZ2U6U2VjdGlvbjE7fQorLS0+Cis8L3N0eWxlPgorPC9oZWFkPgorCis8Ym9keSBsYW5nPUVOLVVTIHN0eWxlPSd0YWItaW50ZXJ2YWw6LjVpbic+CisKKzxkaXYgY2xhc3M9U2VjdGlvbjE+CisKKzxwIGFsaWduPWNlbnRlciBzdHlsZT0ndGV4dC1hbGlnbjpjZW50ZXInPjxiPkVjbGlwc2UgUHVibGljIExpY2Vuc2UgLSB2IDEuMDwvYj4KKzwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPlRIRSBBQ0NPTVBBTllJTkcgUFJPR1JBTSBJUyBQUk9WSURFRCBVTkRFUgorVEhFIFRFUk1TIE9GIFRISVMgRUNMSVBTRSBQVUJMSUMgTElDRU5TRSAoJnF1b3Q7QUdSRUVNRU5UJnF1b3Q7KS4gQU5ZIFVTRSwKK1JFUFJPRFVDVElPTiBPUiBESVNUUklCVVRJT04gT0YgVEhFIFBST0dSQU0gQ09OU1RJVFVURVMgUkVDSVBJRU5UJ1MgQUNDRVBUQU5DRQorT0YgVEhJUyBBR1JFRU1FTlQuPC9zcGFuPiA8L3A+CisKKzxwPjxiPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4xLiBERUZJTklUSU9OUzwvc3Bhbj48L2I+IDwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPiZxdW90O0NvbnRyaWJ1dGlvbiZxdW90OyBtZWFuczo8L3NwYW4+IDwvcD4KKworPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YSkKK2luIHRoZSBjYXNlIG9mIHRoZSBpbml0aWFsIENvbnRyaWJ1dG9yLCB0aGUgaW5pdGlhbCBjb2RlIGFuZCBkb2N1bWVudGF0aW9uCitkaXN0cmlidXRlZCB1bmRlciB0aGlzIEFncmVlbWVudCwgYW5kPGJyIGNsZWFyPWxlZnQ+CitiKSBpbiB0aGUgY2FzZSBvZiBlYWNoIHN1YnNlcXVlbnQgQ29udHJpYnV0b3I6PC9zcGFuPjwvcD4KKworPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+aSkKK2NoYW5nZXMgdG8gdGhlIFByb2dyYW0sIGFuZDwvc3Bhbj48L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmlpKQorYWRkaXRpb25zIHRvIHRoZSBQcm9ncmFtOzwvc3Bhbj48L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPndoZXJlCitzdWNoIGNoYW5nZXMgYW5kL29yIGFkZGl0aW9ucyB0byB0aGUgUHJvZ3JhbSBvcmlnaW5hdGUgZnJvbSBhbmQgYXJlIGRpc3RyaWJ1dGVkCitieSB0aGF0IHBhcnRpY3VsYXIgQ29udHJpYnV0b3IuIEEgQ29udHJpYnV0aW9uICdvcmlnaW5hdGVzJyBmcm9tIGEgQ29udHJpYnV0b3IKK2lmIGl0IHdhcyBhZGRlZCB0byB0aGUgUHJvZ3JhbSBieSBzdWNoIENvbnRyaWJ1dG9yIGl0c2VsZiBvciBhbnlvbmUgYWN0aW5nIG9uCitzdWNoIENvbnRyaWJ1dG9yJ3MgYmVoYWxmLiBDb250cmlidXRpb25zIGRvIG5vdCBpbmNsdWRlIGFkZGl0aW9ucyB0byB0aGUKK1Byb2dyYW0gd2hpY2g6IChpKSBhcmUgc2VwYXJhdGUgbW9kdWxlcyBvZiBzb2Z0d2FyZSBkaXN0cmlidXRlZCBpbiBjb25qdW5jdGlvbgord2l0aCB0aGUgUHJvZ3JhbSB1bmRlciB0aGVpciBvd24gbGljZW5zZSBhZ3JlZW1lbnQsIGFuZCAoaWkpIGFyZSBub3QgZGVyaXZhdGl2ZQord29ya3Mgb2YgdGhlIFByb2dyYW0uIDwvc3Bhbj48L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4mcXVvdDtDb250cmlidXRvciZxdW90OyBtZWFucyBhbnkgcGVyc29uIG9yCitlbnRpdHkgdGhhdCBkaXN0cmlidXRlcyB0aGUgUHJvZ3JhbS48L3NwYW4+IDwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPiZxdW90O0xpY2Vuc2VkIFBhdGVudHMgJnF1b3Q7IG1lYW4gcGF0ZW50CitjbGFpbXMgbGljZW5zYWJsZSBieSBhIENvbnRyaWJ1dG9yIHdoaWNoIGFyZSBuZWNlc3NhcmlseSBpbmZyaW5nZWQgYnkgdGhlIHVzZQorb3Igc2FsZSBvZiBpdHMgQ29udHJpYnV0aW9uIGFsb25lIG9yIHdoZW4gY29tYmluZWQgd2l0aCB0aGUgUHJvZ3JhbS4gPC9zcGFuPjwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPiZxdW90O1Byb2dyYW0mcXVvdDsgbWVhbnMgdGhlIENvbnRyaWJ1dGlvbnMKK2Rpc3RyaWJ1dGVkIGluIGFjY29yZGFuY2Ugd2l0aCB0aGlzIEFncmVlbWVudC48L3NwYW4+IDwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPiZxdW90O1JlY2lwaWVudCZxdW90OyBtZWFucyBhbnlvbmUgd2hvCityZWNlaXZlcyB0aGUgUHJvZ3JhbSB1bmRlciB0aGlzIEFncmVlbWVudCwgaW5jbHVkaW5nIGFsbCBDb250cmlidXRvcnMuPC9zcGFuPiA8L3A+CisKKzxwPjxiPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4yLiBHUkFOVCBPRiBSSUdIVFM8L3NwYW4+PC9iPiA8L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmEpCitTdWJqZWN0IHRvIHRoZSB0ZXJtcyBvZiB0aGlzIEFncmVlbWVudCwgZWFjaCBDb250cmlidXRvciBoZXJlYnkgZ3JhbnRzIFJlY2lwaWVudAorYSBub24tZXhjbHVzaXZlLCB3b3JsZHdpZGUsIHJveWFsdHktZnJlZSBjb3B5cmlnaHQgbGljZW5zZSB0bzxzcGFuCitzdHlsZT0nY29sb3I6cmVkJz4gPC9zcGFuPnJlcHJvZHVjZSwgcHJlcGFyZSBkZXJpdmF0aXZlIHdvcmtzIG9mLCBwdWJsaWNseQorZGlzcGxheSwgcHVibGljbHkgcGVyZm9ybSwgZGlzdHJpYnV0ZSBhbmQgc3VibGljZW5zZSB0aGUgQ29udHJpYnV0aW9uIG9mIHN1Y2gKK0NvbnRyaWJ1dG9yLCBpZiBhbnksIGFuZCBzdWNoIGRlcml2YXRpdmUgd29ya3MsIGluIHNvdXJjZSBjb2RlIGFuZCBvYmplY3QgY29kZQorZm9ybS48L3NwYW4+PC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5iKQorU3ViamVjdCB0byB0aGUgdGVybXMgb2YgdGhpcyBBZ3JlZW1lbnQsIGVhY2ggQ29udHJpYnV0b3IgaGVyZWJ5IGdyYW50cworUmVjaXBpZW50IGEgbm9uLWV4Y2x1c2l2ZSwgd29ybGR3aWRlLDxzcGFuIHN0eWxlPSdjb2xvcjpncmVlbic+IDwvc3Bhbj5yb3lhbHR5LWZyZWUKK3BhdGVudCBsaWNlbnNlIHVuZGVyIExpY2Vuc2VkIFBhdGVudHMgdG8gbWFrZSwgdXNlLCBzZWxsLCBvZmZlciB0byBzZWxsLCBpbXBvcnQKK2FuZCBvdGhlcndpc2UgdHJhbnNmZXIgdGhlIENvbnRyaWJ1dGlvbiBvZiBzdWNoIENvbnRyaWJ1dG9yLCBpZiBhbnksIGluIHNvdXJjZQorY29kZSBhbmQgb2JqZWN0IGNvZGUgZm9ybS4gVGhpcyBwYXRlbnQgbGljZW5zZSBzaGFsbCBhcHBseSB0byB0aGUgY29tYmluYXRpb24KK29mIHRoZSBDb250cmlidXRpb24gYW5kIHRoZSBQcm9ncmFtIGlmLCBhdCB0aGUgdGltZSB0aGUgQ29udHJpYnV0aW9uIGlzIGFkZGVkCitieSB0aGUgQ29udHJpYnV0b3IsIHN1Y2ggYWRkaXRpb24gb2YgdGhlIENvbnRyaWJ1dGlvbiBjYXVzZXMgc3VjaCBjb21iaW5hdGlvbgordG8gYmUgY292ZXJlZCBieSB0aGUgTGljZW5zZWQgUGF0ZW50cy4gVGhlIHBhdGVudCBsaWNlbnNlIHNoYWxsIG5vdCBhcHBseSB0bworYW55IG90aGVyIGNvbWJpbmF0aW9ucyB3aGljaCBpbmNsdWRlIHRoZSBDb250cmlidXRpb24uIE5vIGhhcmR3YXJlIHBlciBzZSBpcworbGljZW5zZWQgaGVyZXVuZGVyLiA8L3NwYW4+PC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5jKQorUmVjaXBpZW50IHVuZGVyc3RhbmRzIHRoYXQgYWx0aG91Z2ggZWFjaCBDb250cmlidXRvciBncmFudHMgdGhlIGxpY2Vuc2VzIHRvIGl0cworQ29udHJpYnV0aW9ucyBzZXQgZm9ydGggaGVyZWluLCBubyBhc3N1cmFuY2VzIGFyZSBwcm92aWRlZCBieSBhbnkgQ29udHJpYnV0b3IKK3RoYXQgdGhlIFByb2dyYW0gZG9lcyBub3QgaW5mcmluZ2UgdGhlIHBhdGVudCBvciBvdGhlciBpbnRlbGxlY3R1YWwgcHJvcGVydHkKK3JpZ2h0cyBvZiBhbnkgb3RoZXIgZW50aXR5LiBFYWNoIENvbnRyaWJ1dG9yIGRpc2NsYWltcyBhbnkgbGlhYmlsaXR5IHRvIFJlY2lwaWVudAorZm9yIGNsYWltcyBicm91Z2h0IGJ5IGFueSBvdGhlciBlbnRpdHkgYmFzZWQgb24gaW5mcmluZ2VtZW50IG9mIGludGVsbGVjdHVhbAorcHJvcGVydHkgcmlnaHRzIG9yIG90aGVyd2lzZS4gQXMgYSBjb25kaXRpb24gdG8gZXhlcmNpc2luZyB0aGUgcmlnaHRzIGFuZAorbGljZW5zZXMgZ3JhbnRlZCBoZXJldW5kZXIsIGVhY2ggUmVjaXBpZW50IGhlcmVieSBhc3N1bWVzIHNvbGUgcmVzcG9uc2liaWxpdHkKK3RvIHNlY3VyZSBhbnkgb3RoZXIgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBuZWVkZWQsIGlmIGFueS4gRm9yIGV4YW1wbGUsCitpZiBhIHRoaXJkIHBhcnR5IHBhdGVudCBsaWNlbnNlIGlzIHJlcXVpcmVkIHRvIGFsbG93IFJlY2lwaWVudCB0byBkaXN0cmlidXRlCit0aGUgUHJvZ3JhbSwgaXQgaXMgUmVjaXBpZW50J3MgcmVzcG9uc2liaWxpdHkgdG8gYWNxdWlyZSB0aGF0IGxpY2Vuc2UgYmVmb3JlCitkaXN0cmlidXRpbmcgdGhlIFByb2dyYW0uPC9zcGFuPjwvcD4KKworPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+ZCkKK0VhY2ggQ29udHJpYnV0b3IgcmVwcmVzZW50cyB0aGF0IHRvIGl0cyBrbm93bGVkZ2UgaXQgaGFzIHN1ZmZpY2llbnQgY29weXJpZ2h0CityaWdodHMgaW4gaXRzIENvbnRyaWJ1dGlvbiwgaWYgYW55LCB0byBncmFudCB0aGUgY29weXJpZ2h0IGxpY2Vuc2Ugc2V0IGZvcnRoIGluCit0aGlzIEFncmVlbWVudC4gPC9zcGFuPjwvcD4KKworPHA+PGI+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPjMuIFJFUVVJUkVNRU5UUzwvc3Bhbj48L2I+IDwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkEgQ29udHJpYnV0b3IgbWF5IGNob29zZSB0byBkaXN0cmlidXRlIHRoZQorUHJvZ3JhbSBpbiBvYmplY3QgY29kZSBmb3JtIHVuZGVyIGl0cyBvd24gbGljZW5zZSBhZ3JlZW1lbnQsIHByb3ZpZGVkIHRoYXQ6PC9zcGFuPgorPC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5hKQoraXQgY29tcGxpZXMgd2l0aCB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhpcyBBZ3JlZW1lbnQ7IGFuZDwvc3Bhbj48L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmIpCitpdHMgbGljZW5zZSBhZ3JlZW1lbnQ6PC9zcGFuPjwvcD4KKworPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+aSkKK2VmZmVjdGl2ZWx5IGRpc2NsYWltcyBvbiBiZWhhbGYgb2YgYWxsIENvbnRyaWJ1dG9ycyBhbGwgd2FycmFudGllcyBhbmQKK2NvbmRpdGlvbnMsIGV4cHJlc3MgYW5kIGltcGxpZWQsIGluY2x1ZGluZyB3YXJyYW50aWVzIG9yIGNvbmRpdGlvbnMgb2YgdGl0bGUKK2FuZCBub24taW5mcmluZ2VtZW50LCBhbmQgaW1wbGllZCB3YXJyYW50aWVzIG9yIGNvbmRpdGlvbnMgb2YgbWVyY2hhbnRhYmlsaXR5CithbmQgZml0bmVzcyBmb3IgYSBwYXJ0aWN1bGFyIHB1cnBvc2U7IDwvc3Bhbj48L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmlpKQorZWZmZWN0aXZlbHkgZXhjbHVkZXMgb24gYmVoYWxmIG9mIGFsbCBDb250cmlidXRvcnMgYWxsIGxpYWJpbGl0eSBmb3IgZGFtYWdlcywKK2luY2x1ZGluZyBkaXJlY3QsIGluZGlyZWN0LCBzcGVjaWFsLCBpbmNpZGVudGFsIGFuZCBjb25zZXF1ZW50aWFsIGRhbWFnZXMsIHN1Y2gKK2FzIGxvc3QgcHJvZml0czsgPC9zcGFuPjwvcD4KKworPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+aWlpKQorc3RhdGVzIHRoYXQgYW55IHByb3Zpc2lvbnMgd2hpY2ggZGlmZmVyIGZyb20gdGhpcyBBZ3JlZW1lbnQgYXJlIG9mZmVyZWQgYnkgdGhhdAorQ29udHJpYnV0b3IgYWxvbmUgYW5kIG5vdCBieSBhbnkgb3RoZXIgcGFydHk7IGFuZDwvc3Bhbj48L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPml2KQorc3RhdGVzIHRoYXQgc291cmNlIGNvZGUgZm9yIHRoZSBQcm9ncmFtIGlzIGF2YWlsYWJsZSBmcm9tIHN1Y2ggQ29udHJpYnV0b3IsIGFuZAoraW5mb3JtcyBsaWNlbnNlZXMgaG93IHRvIG9idGFpbiBpdCBpbiBhIHJlYXNvbmFibGUgbWFubmVyIG9uIG9yIHRocm91Z2ggYQorbWVkaXVtIGN1c3RvbWFyaWx5IHVzZWQgZm9yIHNvZnR3YXJlIGV4Y2hhbmdlLjxzcGFuIHN0eWxlPSdjb2xvcjpibHVlJz4gPC9zcGFuPjwvc3Bhbj48L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5XaGVuIHRoZSBQcm9ncmFtIGlzIG1hZGUgYXZhaWxhYmxlIGluIHNvdXJjZQorY29kZSBmb3JtOjwvc3Bhbj4gPC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5hKQoraXQgbXVzdCBiZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGlzIEFncmVlbWVudDsgYW5kIDwvc3Bhbj48L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmIpIGEKK2NvcHkgb2YgdGhpcyBBZ3JlZW1lbnQgbXVzdCBiZSBpbmNsdWRlZCB3aXRoIGVhY2ggY29weSBvZiB0aGUgUHJvZ3JhbS4gPC9zcGFuPjwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkNvbnRyaWJ1dG9ycyBtYXkgbm90IHJlbW92ZSBvciBhbHRlciBhbnkKK2NvcHlyaWdodCBub3RpY2VzIGNvbnRhaW5lZCB3aXRoaW4gdGhlIFByb2dyYW0uIDwvc3Bhbj48L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5FYWNoIENvbnRyaWJ1dG9yIG11c3QgaWRlbnRpZnkgaXRzZWxmIGFzIHRoZQorb3JpZ2luYXRvciBvZiBpdHMgQ29udHJpYnV0aW9uLCBpZiBhbnksIGluIGEgbWFubmVyIHRoYXQgcmVhc29uYWJseSBhbGxvd3MKK3N1YnNlcXVlbnQgUmVjaXBpZW50cyB0byBpZGVudGlmeSB0aGUgb3JpZ2luYXRvciBvZiB0aGUgQ29udHJpYnV0aW9uLiA8L3NwYW4+PC9wPgorCis8cD48Yj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+NC4gQ09NTUVSQ0lBTCBESVNUUklCVVRJT048L3NwYW4+PC9iPiA8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5Db21tZXJjaWFsIGRpc3RyaWJ1dG9ycyBvZiBzb2Z0d2FyZSBtYXkKK2FjY2VwdCBjZXJ0YWluIHJlc3BvbnNpYmlsaXRpZXMgd2l0aCByZXNwZWN0IHRvIGVuZCB1c2VycywgYnVzaW5lc3MgcGFydG5lcnMKK2FuZCB0aGUgbGlrZS4gV2hpbGUgdGhpcyBsaWNlbnNlIGlzIGludGVuZGVkIHRvIGZhY2lsaXRhdGUgdGhlIGNvbW1lcmNpYWwgdXNlCitvZiB0aGUgUHJvZ3JhbSwgdGhlIENvbnRyaWJ1dG9yIHdobyBpbmNsdWRlcyB0aGUgUHJvZ3JhbSBpbiBhIGNvbW1lcmNpYWwKK3Byb2R1Y3Qgb2ZmZXJpbmcgc2hvdWxkIGRvIHNvIGluIGEgbWFubmVyIHdoaWNoIGRvZXMgbm90IGNyZWF0ZSBwb3RlbnRpYWwKK2xpYWJpbGl0eSBmb3Igb3RoZXIgQ29udHJpYnV0b3JzLiBUaGVyZWZvcmUsIGlmIGEgQ29udHJpYnV0b3IgaW5jbHVkZXMgdGhlCitQcm9ncmFtIGluIGEgY29tbWVyY2lhbCBwcm9kdWN0IG9mZmVyaW5nLCBzdWNoIENvbnRyaWJ1dG9yICgmcXVvdDtDb21tZXJjaWFsCitDb250cmlidXRvciZxdW90OykgaGVyZWJ5IGFncmVlcyB0byBkZWZlbmQgYW5kIGluZGVtbmlmeSBldmVyeSBvdGhlcgorQ29udHJpYnV0b3IgKCZxdW90O0luZGVtbmlmaWVkIENvbnRyaWJ1dG9yJnF1b3Q7KSBhZ2FpbnN0IGFueSBsb3NzZXMsIGRhbWFnZXMgYW5kCitjb3N0cyAoY29sbGVjdGl2ZWx5ICZxdW90O0xvc3NlcyZxdW90OykgYXJpc2luZyBmcm9tIGNsYWltcywgbGF3c3VpdHMgYW5kIG90aGVyCitsZWdhbCBhY3Rpb25zIGJyb3VnaHQgYnkgYSB0aGlyZCBwYXJ0eSBhZ2FpbnN0IHRoZSBJbmRlbW5pZmllZCBDb250cmlidXRvciB0bwordGhlIGV4dGVudCBjYXVzZWQgYnkgdGhlIGFjdHMgb3Igb21pc3Npb25zIG9mIHN1Y2ggQ29tbWVyY2lhbCBDb250cmlidXRvciBpbgorY29ubmVjdGlvbiB3aXRoIGl0cyBkaXN0cmlidXRpb24gb2YgdGhlIFByb2dyYW0gaW4gYSBjb21tZXJjaWFsIHByb2R1Y3QKK29mZmVyaW5nLiBUaGUgb2JsaWdhdGlvbnMgaW4gdGhpcyBzZWN0aW9uIGRvIG5vdCBhcHBseSB0byBhbnkgY2xhaW1zIG9yIExvc3NlcworcmVsYXRpbmcgdG8gYW55IGFjdHVhbCBvciBhbGxlZ2VkIGludGVsbGVjdHVhbCBwcm9wZXJ0eSBpbmZyaW5nZW1lbnQuIEluIG9yZGVyCit0byBxdWFsaWZ5LCBhbiBJbmRlbW5pZmllZCBDb250cmlidXRvciBtdXN0OiBhKSBwcm9tcHRseSBub3RpZnkgdGhlIENvbW1lcmNpYWwKK0NvbnRyaWJ1dG9yIGluIHdyaXRpbmcgb2Ygc3VjaCBjbGFpbSwgYW5kIGIpIGFsbG93IHRoZSBDb21tZXJjaWFsIENvbnRyaWJ1dG9yCit0byBjb250cm9sLCBhbmQgY29vcGVyYXRlIHdpdGggdGhlIENvbW1lcmNpYWwgQ29udHJpYnV0b3IgaW4sIHRoZSBkZWZlbnNlIGFuZAorYW55IHJlbGF0ZWQgc2V0dGxlbWVudCBuZWdvdGlhdGlvbnMuIFRoZSBJbmRlbW5pZmllZCBDb250cmlidXRvciBtYXkgcGFydGljaXBhdGUKK2luIGFueSBzdWNoIGNsYWltIGF0IGl0cyBvd24gZXhwZW5zZS48L3NwYW4+IDwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkZvciBleGFtcGxlLCBhIENvbnRyaWJ1dG9yIG1pZ2h0IGluY2x1ZGUgdGhlCitQcm9ncmFtIGluIGEgY29tbWVyY2lhbCBwcm9kdWN0IG9mZmVyaW5nLCBQcm9kdWN0IFguIFRoYXQgQ29udHJpYnV0b3IgaXMgdGhlbiBhCitDb21tZXJjaWFsIENvbnRyaWJ1dG9yLiBJZiB0aGF0IENvbW1lcmNpYWwgQ29udHJpYnV0b3IgdGhlbiBtYWtlcyBwZXJmb3JtYW5jZQorY2xhaW1zLCBvciBvZmZlcnMgd2FycmFudGllcyByZWxhdGVkIHRvIFByb2R1Y3QgWCwgdGhvc2UgcGVyZm9ybWFuY2UgY2xhaW1zIGFuZAord2FycmFudGllcyBhcmUgc3VjaCBDb21tZXJjaWFsIENvbnRyaWJ1dG9yJ3MgcmVzcG9uc2liaWxpdHkgYWxvbmUuIFVuZGVyIHRoaXMKK3NlY3Rpb24sIHRoZSBDb21tZXJjaWFsIENvbnRyaWJ1dG9yIHdvdWxkIGhhdmUgdG8gZGVmZW5kIGNsYWltcyBhZ2FpbnN0IHRoZQorb3RoZXIgQ29udHJpYnV0b3JzIHJlbGF0ZWQgdG8gdGhvc2UgcGVyZm9ybWFuY2UgY2xhaW1zIGFuZCB3YXJyYW50aWVzLCBhbmQgaWYgYQorY291cnQgcmVxdWlyZXMgYW55IG90aGVyIENvbnRyaWJ1dG9yIHRvIHBheSBhbnkgZGFtYWdlcyBhcyBhIHJlc3VsdCwgdGhlCitDb21tZXJjaWFsIENvbnRyaWJ1dG9yIG11c3QgcGF5IHRob3NlIGRhbWFnZXMuPC9zcGFuPiA8L3A+CisKKzxwPjxiPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz41LiBOTyBXQVJSQU5UWTwvc3Bhbj48L2I+IDwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkVYQ0VQVCBBUyBFWFBSRVNTTFkgU0VUIEZPUlRIIElOIFRISVMKK0FHUkVFTUVOVCwgVEhFIFBST0dSQU0gSVMgUFJPVklERUQgT04gQU4gJnF1b3Q7QVMgSVMmcXVvdDsgQkFTSVMsIFdJVEhPVVQKK1dBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgRUlUSEVSIEVYUFJFU1MgT1IgSU1QTElFRCBJTkNMVURJTkcsCitXSVRIT1VUIExJTUlUQVRJT04sIEFOWSBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgVElUTEUsIE5PTi1JTkZSSU5HRU1FTlQsCitNRVJDSEFOVEFCSUxJVFkgT1IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIEVhY2ggUmVjaXBpZW50IGlzIHNvbGVseQorcmVzcG9uc2libGUgZm9yIGRldGVybWluaW5nIHRoZSBhcHByb3ByaWF0ZW5lc3Mgb2YgdXNpbmcgYW5kIGRpc3RyaWJ1dGluZyB0aGUKK1Byb2dyYW0gYW5kIGFzc3VtZXMgYWxsIHJpc2tzIGFzc29jaWF0ZWQgd2l0aCBpdHMgZXhlcmNpc2Ugb2YgcmlnaHRzIHVuZGVyIHRoaXMKK0FncmVlbWVudCAsIGluY2x1ZGluZyBidXQgbm90IGxpbWl0ZWQgdG8gdGhlIHJpc2tzIGFuZCBjb3N0cyBvZiBwcm9ncmFtIGVycm9ycywKK2NvbXBsaWFuY2Ugd2l0aCBhcHBsaWNhYmxlIGxhd3MsIGRhbWFnZSB0byBvciBsb3NzIG9mIGRhdGEsIHByb2dyYW1zIG9yCitlcXVpcG1lbnQsIGFuZCB1bmF2YWlsYWJpbGl0eSBvciBpbnRlcnJ1cHRpb24gb2Ygb3BlcmF0aW9ucy4gPC9zcGFuPjwvcD4KKworPHA+PGI+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPjYuIERJU0NMQUlNRVIgT0YgTElBQklMSVRZPC9zcGFuPjwvYj4gPC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+RVhDRVBUIEFTIEVYUFJFU1NMWSBTRVQgRk9SVEggSU4gVEhJUworQUdSRUVNRU5ULCBORUlUSEVSIFJFQ0lQSUVOVCBOT1IgQU5ZIENPTlRSSUJVVE9SUyBTSEFMTCBIQVZFIEFOWSBMSUFCSUxJVFkgRk9SCitBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyhJTkNMVURJTkcgV0lUSE9VVCBMSU1JVEFUSU9OIExPU1QgUFJPRklUUyksIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCitPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORworTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPUiBESVNUUklCVVRJT04gT0YKK1RIRSBQUk9HUkFNIE9SIFRIRSBFWEVSQ0lTRSBPRiBBTlkgUklHSFRTIEdSQU5URUQgSEVSRVVOREVSLCBFVkVOIElGIEFEVklTRUQgT0YKK1RIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRVMuPC9zcGFuPiA8L3A+CisKKzxwPjxiPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz43LiBHRU5FUkFMPC9zcGFuPjwvYj4gPC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+SWYgYW55IHByb3Zpc2lvbiBvZiB0aGlzIEFncmVlbWVudCBpcyBpbnZhbGlkCitvciB1bmVuZm9yY2VhYmxlIHVuZGVyIGFwcGxpY2FibGUgbGF3LCBpdCBzaGFsbCBub3QgYWZmZWN0IHRoZSB2YWxpZGl0eSBvcgorZW5mb3JjZWFiaWxpdHkgb2YgdGhlIHJlbWFpbmRlciBvZiB0aGUgdGVybXMgb2YgdGhpcyBBZ3JlZW1lbnQsIGFuZCB3aXRob3V0CitmdXJ0aGVyIGFjdGlvbiBieSB0aGUgcGFydGllcyBoZXJldG8sIHN1Y2ggcHJvdmlzaW9uIHNoYWxsIGJlIHJlZm9ybWVkIHRvIHRoZQorbWluaW11bSBleHRlbnQgbmVjZXNzYXJ5IHRvIG1ha2Ugc3VjaCBwcm92aXNpb24gdmFsaWQgYW5kIGVuZm9yY2VhYmxlLjwvc3Bhbj4gPC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+SWYgUmVjaXBpZW50IGluc3RpdHV0ZXMgcGF0ZW50IGxpdGlnYXRpb24KK2FnYWluc3QgYW55IGVudGl0eSAoaW5jbHVkaW5nIGEgY3Jvc3MtY2xhaW0gb3IgY291bnRlcmNsYWltIGluIGEgbGF3c3VpdCkKK2FsbGVnaW5nIHRoYXQgdGhlIFByb2dyYW0gaXRzZWxmIChleGNsdWRpbmcgY29tYmluYXRpb25zIG9mIHRoZSBQcm9ncmFtIHdpdGgKK290aGVyIHNvZnR3YXJlIG9yIGhhcmR3YXJlKSBpbmZyaW5nZXMgc3VjaCBSZWNpcGllbnQncyBwYXRlbnQocyksIHRoZW4gc3VjaAorUmVjaXBpZW50J3MgcmlnaHRzIGdyYW50ZWQgdW5kZXIgU2VjdGlvbiAyKGIpIHNoYWxsIHRlcm1pbmF0ZSBhcyBvZiB0aGUgZGF0ZQorc3VjaCBsaXRpZ2F0aW9uIGlzIGZpbGVkLiA8L3NwYW4+PC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+QWxsIFJlY2lwaWVudCdzIHJpZ2h0cyB1bmRlciB0aGlzIEFncmVlbWVudAorc2hhbGwgdGVybWluYXRlIGlmIGl0IGZhaWxzIHRvIGNvbXBseSB3aXRoIGFueSBvZiB0aGUgbWF0ZXJpYWwgdGVybXMgb3IKK2NvbmRpdGlvbnMgb2YgdGhpcyBBZ3JlZW1lbnQgYW5kIGRvZXMgbm90IGN1cmUgc3VjaCBmYWlsdXJlIGluIGEgcmVhc29uYWJsZQorcGVyaW9kIG9mIHRpbWUgYWZ0ZXIgYmVjb21pbmcgYXdhcmUgb2Ygc3VjaCBub25jb21wbGlhbmNlLiBJZiBhbGwgUmVjaXBpZW50J3MKK3JpZ2h0cyB1bmRlciB0aGlzIEFncmVlbWVudCB0ZXJtaW5hdGUsIFJlY2lwaWVudCBhZ3JlZXMgdG8gY2Vhc2UgdXNlIGFuZAorZGlzdHJpYnV0aW9uIG9mIHRoZSBQcm9ncmFtIGFzIHNvb24gYXMgcmVhc29uYWJseSBwcmFjdGljYWJsZS4gSG93ZXZlciwKK1JlY2lwaWVudCdzIG9ibGlnYXRpb25zIHVuZGVyIHRoaXMgQWdyZWVtZW50IGFuZCBhbnkgbGljZW5zZXMgZ3JhbnRlZCBieQorUmVjaXBpZW50IHJlbGF0aW5nIHRvIHRoZSBQcm9ncmFtIHNoYWxsIGNvbnRpbnVlIGFuZCBzdXJ2aXZlLiA8L3NwYW4+PC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+RXZlcnlvbmUgaXMgcGVybWl0dGVkIHRvIGNvcHkgYW5kIGRpc3RyaWJ1dGUKK2NvcGllcyBvZiB0aGlzIEFncmVlbWVudCwgYnV0IGluIG9yZGVyIHRvIGF2b2lkIGluY29uc2lzdGVuY3kgdGhlIEFncmVlbWVudCBpcworY29weXJpZ2h0ZWQgYW5kIG1heSBvbmx5IGJlIG1vZGlmaWVkIGluIHRoZSBmb2xsb3dpbmcgbWFubmVyLiBUaGUgQWdyZWVtZW50CitTdGV3YXJkIHJlc2VydmVzIHRoZSByaWdodCB0byBwdWJsaXNoIG5ldyB2ZXJzaW9ucyAoaW5jbHVkaW5nIHJldmlzaW9ucykgb2YKK3RoaXMgQWdyZWVtZW50IGZyb20gdGltZSB0byB0aW1lLiBObyBvbmUgb3RoZXIgdGhhbiB0aGUgQWdyZWVtZW50IFN0ZXdhcmQgaGFzCit0aGUgcmlnaHQgdG8gbW9kaWZ5IHRoaXMgQWdyZWVtZW50LiBUaGUgRWNsaXBzZSBGb3VuZGF0aW9uIGlzIHRoZSBpbml0aWFsCitBZ3JlZW1lbnQgU3Rld2FyZC4gVGhlIEVjbGlwc2UgRm91bmRhdGlvbiBtYXkgYXNzaWduIHRoZSByZXNwb25zaWJpbGl0eSB0bworc2VydmUgYXMgdGhlIEFncmVlbWVudCBTdGV3YXJkIHRvIGEgc3VpdGFibGUgc2VwYXJhdGUgZW50aXR5LiBFYWNoIG5ldyB2ZXJzaW9uCitvZiB0aGUgQWdyZWVtZW50IHdpbGwgYmUgZ2l2ZW4gYSBkaXN0aW5ndWlzaGluZyB2ZXJzaW9uIG51bWJlci4gVGhlIFByb2dyYW0KKyhpbmNsdWRpbmcgQ29udHJpYnV0aW9ucykgbWF5IGFsd2F5cyBiZSBkaXN0cmlidXRlZCBzdWJqZWN0IHRvIHRoZSB2ZXJzaW9uIG9mCit0aGUgQWdyZWVtZW50IHVuZGVyIHdoaWNoIGl0IHdhcyByZWNlaXZlZC4gSW4gYWRkaXRpb24sIGFmdGVyIGEgbmV3IHZlcnNpb24gb2YKK3RoZSBBZ3JlZW1lbnQgaXMgcHVibGlzaGVkLCBDb250cmlidXRvciBtYXkgZWxlY3QgdG8gZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbQorKGluY2x1ZGluZyBpdHMgQ29udHJpYnV0aW9ucykgdW5kZXIgdGhlIG5ldyB2ZXJzaW9uLiBFeGNlcHQgYXMgZXhwcmVzc2x5IHN0YXRlZAoraW4gU2VjdGlvbnMgMihhKSBhbmQgMihiKSBhYm92ZSwgUmVjaXBpZW50IHJlY2VpdmVzIG5vIHJpZ2h0cyBvciBsaWNlbnNlcyB0bwordGhlIGludGVsbGVjdHVhbCBwcm9wZXJ0eSBvZiBhbnkgQ29udHJpYnV0b3IgdW5kZXIgdGhpcyBBZ3JlZW1lbnQsIHdoZXRoZXIKK2V4cHJlc3NseSwgYnkgaW1wbGljYXRpb24sIGVzdG9wcGVsIG9yIG90aGVyd2lzZS4gQWxsIHJpZ2h0cyBpbiB0aGUgUHJvZ3JhbSBub3QKK2V4cHJlc3NseSBncmFudGVkIHVuZGVyIHRoaXMgQWdyZWVtZW50IGFyZSByZXNlcnZlZC48L3NwYW4+IDwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPlRoaXMgQWdyZWVtZW50IGlzIGdvdmVybmVkIGJ5IHRoZSBsYXdzIG9mIHRoZQorU3RhdGUgb2YgTmV3IFlvcmsgYW5kIHRoZSBpbnRlbGxlY3R1YWwgcHJvcGVydHkgbGF3cyBvZiB0aGUgVW5pdGVkIFN0YXRlcyBvZgorQW1lcmljYS4gTm8gcGFydHkgdG8gdGhpcyBBZ3JlZW1lbnQgd2lsbCBicmluZyBhIGxlZ2FsIGFjdGlvbiB1bmRlciB0aGlzCitBZ3JlZW1lbnQgbW9yZSB0aGFuIG9uZSB5ZWFyIGFmdGVyIHRoZSBjYXVzZSBvZiBhY3Rpb24gYXJvc2UuIEVhY2ggcGFydHkgd2FpdmVzCitpdHMgcmlnaHRzIHRvIGEganVyeSB0cmlhbCBpbiBhbnkgcmVzdWx0aW5nIGxpdGlnYXRpb24uPC9zcGFuPiA8L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbD48IVtpZiAhc3VwcG9ydEVtcHR5UGFyYXNdPiZuYnNwOzwhW2VuZGlmXT48bzpwPjwvbzpwPjwvcD4KKworPC9kaXY+CisKKzwvYm9keT4KKworPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkuZWFydGhzY2llbmNlLmZlYXR1cmUvZmVhdHVyZS5wcm9wZXJ0aWVzIGIvZmVhdHVyZXMvb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS5lYXJ0aHNjaWVuY2UuZmVhdHVyZS9mZWF0dXJlLnByb3BlcnRpZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2Q0ODRlZgotLS0gL2Rldi9udWxsCisrKyBiL2ZlYXR1cmVzL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkuZWFydGhzY2llbmNlLmZlYXR1cmUvZmVhdHVyZS5wcm9wZXJ0aWVzCkBAIC0wLDAgKzEsMTc4IEBACisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIENvcHlyaWdodCAoYykgMjAxMSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyMgQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworIyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyMgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyMgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyMgCisjIENvbnRyaWJ1dG9yczoKKyMgICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBmZWF0dXJlLnByb3BlcnRpZXMKKyMgY29udGFpbnMgZXh0ZXJuYWxpemVkIHN0cmluZ3MgZm9yIGZlYXR1cmUueG1sCisjICIlZm9vIiBpbiBmZWF0dXJlLnhtbCBjb3JyZXNwb25kcyB0byB0aGUga2V5ICJmb28iIGluIHRoaXMgZmlsZQorIyBqYXZhLmlvLlByb3BlcnRpZXMgZmlsZSAoSVNPIDg4NTktMSB3aXRoICJcIiBlc2NhcGVzKQorIyBUaGlzIGZpbGUgc2hvdWxkIGJlIHRyYW5zbGF0ZWQuCisKKyMgImZlYXR1cmVOYW1lIiBwcm9wZXJ0eSAtIG5hbWUgb2YgdGhlIGZlYXR1cmUKK2ZlYXR1cmVOYW1lPVNURU0gRWFydGggU2NpZW5jZSBEYXRhICgyMDAxLTIwMTApCisKKyMgInByb3ZpZGVyTmFtZSIgcHJvcGVydHkgLSBuYW1lIG9mIHRoZSBjb21wYW55IHRoYXQgcHJvdmlkZXMgdGhlIGZlYXR1cmUKK3Byb3ZpZGVyTmFtZT1FY2xpcHNlLm9yZworCisjICJ1cGRhdGVTaXRlTmFtZSIgcHJvcGVydHkgLSBsYWJlbCBmb3IgdGhlIHVwZGF0ZSBzaXRlCit1cGRhdGVTaXRlTmFtZT1TVEVNIFVwZGF0ZXMKKworIyAic2Vjb25kYXJ5U2l0ZU5hbWUiIHByb3BlcnR5IC0gbGFiZWwgZm9yIHRoZSBzZWNvbmRhcnkgdXBkYXRlIHNpdGUKKyNzZWNvbmRhcnlVcGRhdGVTaXRlTmFtZT1TVEVNIFVwZGF0ZXMKKworIyAiZGVzY3JpcHRpb24iIHByb3BlcnR5IC0gZGVzY3JpcHRpb24gb2YgdGhlIGZlYXR1cmUKK2Rlc2NyaXB0aW9uPVwKK1RoaXMgZmVhdHVyZSBjb250YWlucyBnZW5lcmF0ZWQgcmFpbmZhbGwsIGF2ZXJhZ2UgdGVtcGVyYXR1cmUsXAorbmlnaHQgdGVtcGVyYXR1cmUsIHZlZ2V0YXRpb24gY292ZXJhZ2UsIGFuZCBlbGV2YXRpb24gZGF0YSBmb3JcCit0aGUgd2hvbGUgRWFydGguICBEYXRhIGlzIGRlcml2ZWQgZnJvbSBhY3R1YWwgZGF0YSBwcm92aWRlZCBieVwKK3RoZSBVUyBOYXRpb25hbCBPY2VhbmljIGFuZCBBdG1vc3BoZXJpYyBBZG1pbmlzdHJhdGlvbiAoTk9BQSlcCithbmQgVVMgTmF0aW9uYWwgQWVyb25hdXRpY3MgYW5kIFNwYWNlIEFkbWluaXN0cmF0aW9uIChOQVNBKS4KKworIyAiY29weXJpZ2h0IiBwcm9wZXJ0eSAtIHRleHQgb2YgdGhlICJGZWF0dXJlIFVwZGF0ZSBDb3B5cmlnaHQiCitjb3B5cmlnaHQ9XAorQ29weXJpZ2h0IChjKSAyMDExIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLlxuXAorQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFsc1xuXAorYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wXG5cCit3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdFxuXAoraHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWxcblwKK1xuXAorQ29udHJpYnV0b3JzOlxuXAorICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvblxuCisjIyMjIyMjIyMjIyMjIyMjIGVuZCBvZiBjb3B5cmlnaHQgcHJvcGVydHkgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyMgImxpY2Vuc2VVUkwiIHByb3BlcnR5IC0gVVJMIG9mIHRoZSAiRmVhdHVyZSBMaWNlbnNlIgorIyBkbyBub3QgdHJhbnNsYXRlIHZhbHVlIC0ganVzdCBjaGFuZ2UgdG8gcG9pbnQgdG8gYSBsb2NhbGUtc3BlY2lmaWMgSFRNTCBwYWdlCitsaWNlbnNlVVJMPWxpY2Vuc2UuaHRtbAorCisjICJsaWNlbnNlIiBwcm9wZXJ0eSAtIHRleHQgb2YgdGhlICJGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlIgorIyBzaG91bGQgYmUgcGxhaW4gdGV4dCB2ZXJzaW9uIG9mIGxpY2Vuc2UgYWdyZWVtZW50IHBvaW50ZWQgdG8gYmUgImxpY2Vuc2VVUkwiCitsaWNlbnNlPVwKK0VjbGlwc2UgRm91bmRhdGlvbiBTb2Z0d2FyZSBVc2VyIEFncmVlbWVudFxuXAorQXByaWwgMTQsIDIwMTBcblwKK1xuXAorVXNhZ2UgT2YgQ29udGVudFxuXAorXG5cCitUSEUgRUNMSVBTRSBGT1VOREFUSU9OIE1BS0VTIEFWQUlMQUJMRSBTT0ZUV0FSRSwgRE9DVU1FTlRBVElPTiwgSU5GT1JNQVRJT04gQU5EL09SXG5cCitPVEhFUiBNQVRFUklBTFMgRk9SIE9QRU4gU09VUkNFIFBST0pFQ1RTIChDT0xMRUNUSVZFTFkgIkNPTlRFTlQiKS5cblwKK1VTRSBPRiBUSEUgQ09OVEVOVCBJUyBHT1ZFUk5FRCBCWSBUSEUgVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgVEhJU1xuXAorQUdSRUVNRU5UIEFORC9PUiBUSEUgVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgTElDRU5TRSBBR1JFRU1FTlRTIE9SXG5cCitOT1RJQ0VTIElORElDQVRFRCBPUiBSRUZFUkVOQ0VEIEJFTE9XLiAgQlkgVVNJTkcgVEhFIENPTlRFTlQsIFlPVVxuXAorQUdSRUUgVEhBVCBZT1VSIFVTRSBPRiBUSEUgQ09OVEVOVCBJUyBHT1ZFUk5FRCBCWSBUSElTIEFHUkVFTUVOVFxuXAorQU5EL09SIFRIRSBURVJNUyBBTkQgQ09ORElUSU9OUyBPRiBBTlkgQVBQTElDQUJMRSBMSUNFTlNFIEFHUkVFTUVOVFNcblwKK09SIE5PVElDRVMgSU5ESUNBVEVEIE9SIFJFRkVSRU5DRUQgQkVMT1cuICBJRiBZT1UgRE8gTk9UIEFHUkVFIFRPIFRIRVxuXAorVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgVEhJUyBBR1JFRU1FTlQgQU5EIFRIRSBURVJNUyBBTkQgQ09ORElUSU9OU1xuXAorT0YgQU5ZIEFQUExJQ0FCTEUgTElDRU5TRSBBR1JFRU1FTlRTIE9SIE5PVElDRVMgSU5ESUNBVEVEIE9SIFJFRkVSRU5DRURcblwKK0JFTE9XLCBUSEVOIFlPVSBNQVkgTk9UIFVTRSBUSEUgQ09OVEVOVC5cblwKK1xuXAorQXBwbGljYWJsZSBMaWNlbnNlc1xuXAorXG5cCitVbmxlc3Mgb3RoZXJ3aXNlIGluZGljYXRlZCwgYWxsIENvbnRlbnQgbWFkZSBhdmFpbGFibGUgYnkgdGhlXG5cCitFY2xpcHNlIEZvdW5kYXRpb24gaXMgcHJvdmlkZWQgdG8geW91IHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZlxuXAordGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjAgKCJFUEwiKS4gQSBjb3B5IG9mIHRoZSBFUEwgaXNcblwKK3Byb3ZpZGVkIHdpdGggdGhpcyBDb250ZW50IGFuZCBpcyBhbHNvIGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbC5cblwKK0ZvciBwdXJwb3NlcyBvZiB0aGUgRVBMLCAiUHJvZ3JhbSIgd2lsbCBtZWFuIHRoZSBDb250ZW50LlxuXAorXG5cCitDb250ZW50IGluY2x1ZGVzLCBidXQgaXMgbm90IGxpbWl0ZWQgdG8sIHNvdXJjZSBjb2RlLCBvYmplY3QgY29kZSxcblwKK2RvY3VtZW50YXRpb24gYW5kIG90aGVyIGZpbGVzIG1haW50YWluZWQgaW4gdGhlIEVjbGlwc2UgRm91bmRhdGlvbiBzb3VyY2UgY29kZVxuXAorcmVwb3NpdG9yeSAoIlJlcG9zaXRvcnkiKSBpbiBzb2Z0d2FyZSBtb2R1bGVzICgiTW9kdWxlcyIpIGFuZCBtYWRlIGF2YWlsYWJsZVxuXAorYXMgZG93bmxvYWRhYmxlIGFyY2hpdmVzICgiRG93bmxvYWRzIikuXG5cCitcblwKKyAgICAgICAtIENvbnRlbnQgbWF5IGJlIHN0cnVjdHVyZWQgYW5kIHBhY2thZ2VkIGludG8gbW9kdWxlcyB0byBmYWNpbGl0YXRlIGRlbGl2ZXJpbmcsXG5cCisgICAgICAgICBleHRlbmRpbmcsIGFuZCB1cGdyYWRpbmcgdGhlIENvbnRlbnQuIFR5cGljYWwgbW9kdWxlcyBtYXkgaW5jbHVkZSBwbHVnLWlucyAoIlBsdWctaW5zIiksXG5cCisgICAgICAgICBwbHVnLWluIGZyYWdtZW50cyAoIkZyYWdtZW50cyIpLCBhbmQgZmVhdHVyZXMgKCJGZWF0dXJlcyIpLlxuXAorICAgICAgIC0gRWFjaCBQbHVnLWluIG9yIEZyYWdtZW50IG1heSBiZSBwYWNrYWdlZCBhcyBhIHN1Yi1kaXJlY3Rvcnkgb3IgSkFSIChKYXZhKFRNKSBBUmNoaXZlKVxuXAorICAgICAgICAgaW4gYSBkaXJlY3RvcnkgbmFtZWQgInBsdWdpbnMiLlxuXAorICAgICAgIC0gQSBGZWF0dXJlIGlzIGEgYnVuZGxlIG9mIG9uZSBvciBtb3JlIFBsdWctaW5zIGFuZC9vciBGcmFnbWVudHMgYW5kIGFzc29jaWF0ZWQgbWF0ZXJpYWwuXG5cCisgICAgICAgICBFYWNoIEZlYXR1cmUgbWF5IGJlIHBhY2thZ2VkIGFzIGEgc3ViLWRpcmVjdG9yeSBpbiBhIGRpcmVjdG9yeSBuYW1lZCAiZmVhdHVyZXMiLlxuXAorICAgICAgICAgV2l0aGluIGEgRmVhdHVyZSwgZmlsZXMgbmFtZWQgImZlYXR1cmUueG1sIiBtYXkgY29udGFpbiBhIGxpc3Qgb2YgdGhlIG5hbWVzIGFuZCB2ZXJzaW9uXG5cCisgICAgICAgICBudW1iZXJzIG9mIHRoZSBQbHVnLWlucyBhbmQvb3IgRnJhZ21lbnRzIGFzc29jaWF0ZWQgd2l0aCB0aGF0IEZlYXR1cmUuXG5cCisgICAgICAgLSBGZWF0dXJlcyBtYXkgYWxzbyBpbmNsdWRlIG90aGVyIEZlYXR1cmVzICgiSW5jbHVkZWQgRmVhdHVyZXMiKS4gV2l0aGluIGEgRmVhdHVyZSwgZmlsZXNcblwKKyAgICAgICAgIG5hbWVkICJmZWF0dXJlLnhtbCIgbWF5IGNvbnRhaW4gYSBsaXN0IG9mIHRoZSBuYW1lcyBhbmQgdmVyc2lvbiBudW1iZXJzIG9mIEluY2x1ZGVkIEZlYXR1cmVzLlxuXAorXG5cCitUaGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgZ292ZXJuaW5nIFBsdWctaW5zIGFuZCBGcmFnbWVudHMgc2hvdWxkIGJlXG5cCitjb250YWluZWQgaW4gZmlsZXMgbmFtZWQgImFib3V0Lmh0bWwiICgiQWJvdXRzIikuIFRoZSB0ZXJtcyBhbmRcblwKK2NvbmRpdGlvbnMgZ292ZXJuaW5nIEZlYXR1cmVzIGFuZCBJbmNsdWRlZCBGZWF0dXJlcyBzaG91bGQgYmUgY29udGFpbmVkXG5cCitpbiBmaWxlcyBuYW1lZCAibGljZW5zZS5odG1sIiAoIkZlYXR1cmUgTGljZW5zZXMiKS4gQWJvdXRzIGFuZCBGZWF0dXJlXG5cCitMaWNlbnNlcyBtYXkgYmUgbG9jYXRlZCBpbiBhbnkgZGlyZWN0b3J5IG9mIGEgRG93bmxvYWQgb3IgTW9kdWxlXG5cCitpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0byB0aGUgZm9sbG93aW5nIGxvY2F0aW9uczpcblwKK1xuXAorICAgICAgIC0gVGhlIHRvcC1sZXZlbCAocm9vdCkgZGlyZWN0b3J5XG5cCisgICAgICAgLSBQbHVnLWluIGFuZCBGcmFnbWVudCBkaXJlY3Rvcmllc1xuXAorICAgICAgIC0gSW5zaWRlIFBsdWctaW5zIGFuZCBGcmFnbWVudHMgcGFja2FnZWQgYXMgSkFSc1xuXAorICAgICAgIC0gU3ViLWRpcmVjdG9yaWVzIG9mIHRoZSBkaXJlY3RvcnkgbmFtZWQgInNyYyIgb2YgY2VydGFpbiBQbHVnLWluc1xuXAorICAgICAgIC0gRmVhdHVyZSBkaXJlY3Rvcmllc1xuXAorXG5cCitOb3RlOiBpZiBhIEZlYXR1cmUgbWFkZSBhdmFpbGFibGUgYnkgdGhlIEVjbGlwc2UgRm91bmRhdGlvbiBpcyBpbnN0YWxsZWQgdXNpbmcgdGhlXG5cCitQcm92aXNpb25pbmcgVGVjaG5vbG9neSAoYXMgZGVmaW5lZCBiZWxvdyksIHlvdSBtdXN0IGFncmVlIHRvIGEgbGljZW5zZSAoIkZlYXR1cmUgXG5cCitVcGRhdGUgTGljZW5zZSIpIGR1cmluZyB0aGUgaW5zdGFsbGF0aW9uIHByb2Nlc3MuIElmIHRoZSBGZWF0dXJlIGNvbnRhaW5zXG5cCitJbmNsdWRlZCBGZWF0dXJlcywgdGhlIEZlYXR1cmUgVXBkYXRlIExpY2Vuc2Ugc2hvdWxkIGVpdGhlciBwcm92aWRlIHlvdVxuXAord2l0aCB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgZ292ZXJuaW5nIHRoZSBJbmNsdWRlZCBGZWF0dXJlcyBvciBpbmZvcm1cblwKK3lvdSB3aGVyZSB5b3UgY2FuIGxvY2F0ZSB0aGVtLiBGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlcyBtYXkgYmUgZm91bmQgaW5cblwKK3RoZSAibGljZW5zZSIgcHJvcGVydHkgb2YgZmlsZXMgbmFtZWQgImZlYXR1cmUucHJvcGVydGllcyIgZm91bmQgd2l0aGluIGEgRmVhdHVyZS5cblwKK1N1Y2ggQWJvdXRzLCBGZWF0dXJlIExpY2Vuc2VzLCBhbmQgRmVhdHVyZSBVcGRhdGUgTGljZW5zZXMgY29udGFpbiB0aGVcblwKK3Rlcm1zIGFuZCBjb25kaXRpb25zIChvciByZWZlcmVuY2VzIHRvIHN1Y2ggdGVybXMgYW5kIGNvbmRpdGlvbnMpIHRoYXRcblwKK2dvdmVybiB5b3VyIHVzZSBvZiB0aGUgYXNzb2NpYXRlZCBDb250ZW50IGluIHRoYXQgZGlyZWN0b3J5LlxuXAorXG5cCitUSEUgQUJPVVRTLCBGRUFUVVJFIExJQ0VOU0VTLCBBTkQgRkVBVFVSRSBVUERBVEUgTElDRU5TRVMgTUFZIFJFRkVSXG5cCitUTyBUSEUgRVBMIE9SIE9USEVSIExJQ0VOU0UgQUdSRUVNRU5UUywgTk9USUNFUyBPUiBURVJNUyBBTkQgQ09ORElUSU9OUy5cblwKK1NPTUUgT0YgVEhFU0UgT1RIRVIgTElDRU5TRSBBR1JFRU1FTlRTIE1BWSBJTkNMVURFIChCVVQgQVJFIE5PVCBMSU1JVEVEIFRPKTpcblwKK1xuXAorICAgICAgIC0gQ29tbW9uIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4wIChhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9jcGwtdjEwLmh0bWwpXG5cCisgICAgICAgLSBBcGFjaGUgU29mdHdhcmUgTGljZW5zZSAxLjEgKGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRSlcblwKKyAgICAgICAtIEFwYWNoZSBTb2Z0d2FyZSBMaWNlbnNlIDIuMCAoYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMClcblwKKyAgICAgICAtIE1ldHJvIExpbmsgUHVibGljIExpY2Vuc2UgMS4wMCAoYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cub3Blbmdyb3VwLm9yZy9vcGVubW90aWYvc3VwcG9ydGVycy9tZXRyb2xpbmsvbGljZW5zZS5odG1sKVxuXAorICAgICAgIC0gTW96aWxsYSBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMSAoYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cubW96aWxsYS5vcmcvTVBML01QTC0xLjEuaHRtbClcblwKK1xuXAorSVQgSVMgWU9VUiBPQkxJR0FUSU9OIFRPIFJFQUQgQU5EIEFDQ0VQVCBBTEwgU1VDSCBURVJNUyBBTkQgQ09ORElUSU9OUyBQUklPUlxuXAorVE8gVVNFIE9GIFRIRSBDT05URU5ULiBJZiBubyBBYm91dCwgRmVhdHVyZSBMaWNlbnNlLCBvciBGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlXG5cCitpcyBwcm92aWRlZCwgcGxlYXNlIGNvbnRhY3QgdGhlIEVjbGlwc2UgRm91bmRhdGlvbiB0byBkZXRlcm1pbmUgd2hhdCB0ZXJtcyBhbmQgY29uZGl0aW9uc1xuXAorZ292ZXJuIHRoYXQgcGFydGljdWxhciBDb250ZW50LlxuXAorXG5cCitcblxVc2Ugb2YgUHJvdmlzaW9uaW5nIFRlY2hub2xvZ3lcblwKK1xuXAorVGhlIEVjbGlwc2UgRm91bmRhdGlvbiBtYWtlcyBhdmFpbGFibGUgcHJvdmlzaW9uaW5nIHNvZnR3YXJlLCBleGFtcGxlcyBvZiB3aGljaCBpbmNsdWRlLFxuXAorYnV0IGFyZSBub3QgbGltaXRlZCB0bywgcDIgYW5kIHRoZSBFY2xpcHNlIFVwZGF0ZSBNYW5hZ2VyICgiUHJvdmlzaW9uaW5nIFRlY2hub2xvZ3kiKSBmb3JcblwKK3RoZSBwdXJwb3NlIG9mIGFsbG93aW5nIHVzZXJzIHRvIGluc3RhbGwgc29mdHdhcmUsIGRvY3VtZW50YXRpb24sIGluZm9ybWF0aW9uIGFuZC9vclxuXAorb3RoZXIgbWF0ZXJpYWxzIChjb2xsZWN0aXZlbHkgIkluc3RhbGxhYmxlIFNvZnR3YXJlIikuIFRoaXMgY2FwYWJpbGl0eSBpcyBwcm92aWRlZCB3aXRoXG5cCit0aGUgaW50ZW50IG9mIGFsbG93aW5nIHN1Y2ggdXNlcnMgdG8gaW5zdGFsbCwgZXh0ZW5kIGFuZCB1cGRhdGUgRWNsaXBzZS1iYXNlZCBwcm9kdWN0cy5cblwKK0luZm9ybWF0aW9uIGFib3V0IHBhY2thZ2luZyBJbnN0YWxsYWJsZSBTb2Z0d2FyZSBpcyBhdmFpbGFibGUgYXRcblwKK2h0dHA6Ly9lY2xpcHNlLm9yZy9lcXVpbm94L3AyL3JlcG9zaXRvcnlfcGFja2FnaW5nLmh0bWwgKCJTcGVjaWZpY2F0aW9uIikuXG5cCitcblwKK1lvdSBtYXkgdXNlIFByb3Zpc2lvbmluZyBUZWNobm9sb2d5IHRvIGFsbG93IG90aGVyIHBhcnRpZXMgdG8gaW5zdGFsbCBJbnN0YWxsYWJsZSBTb2Z0d2FyZS5cblwKK1lvdSBzaGFsbCBiZSByZXNwb25zaWJsZSBmb3IgZW5hYmxpbmcgdGhlIGFwcGxpY2FibGUgbGljZW5zZSBhZ3JlZW1lbnRzIHJlbGF0aW5nIHRvIHRoZVxuXAorSW5zdGFsbGFibGUgU29mdHdhcmUgdG8gYmUgcHJlc2VudGVkIHRvLCBhbmQgYWNjZXB0ZWQgYnksIHRoZSB1c2VycyBvZiB0aGUgUHJvdmlzaW9uaW5nIFRlY2hub2xvZ3lcblwKK2luIGFjY29yZGFuY2Ugd2l0aCB0aGUgU3BlY2lmaWNhdGlvbi4gQnkgdXNpbmcgUHJvdmlzaW9uaW5nIFRlY2hub2xvZ3kgaW4gc3VjaCBhIG1hbm5lciBhbmRcblwKK21ha2luZyBpdCBhdmFpbGFibGUgaW4gYWNjb3JkYW5jZSB3aXRoIHRoZSBTcGVjaWZpY2F0aW9uLCB5b3UgZnVydGhlciBhY2tub3dsZWRnZSB5b3VyXG5cCithZ3JlZW1lbnQgdG8sIGFuZCB0aGUgYWNxdWlzaXRpb24gb2YgYWxsIG5lY2Vzc2FyeSByaWdodHMgdG8gcGVybWl0IHRoZSBmb2xsb3dpbmc6XG5cCitcblwKKyAgICAgICAxLiBBIHNlcmllcyBvZiBhY3Rpb25zIG1heSBvY2N1ciAoIlByb3Zpc2lvbmluZyBQcm9jZXNzIikgaW4gd2hpY2ggYSB1c2VyIG1heSBleGVjdXRlXG5cCisgICAgICAgICAgdGhlIFByb3Zpc2lvbmluZyBUZWNobm9sb2d5IG9uIGEgbWFjaGluZSAoIlRhcmdldCBNYWNoaW5lIikgd2l0aCB0aGUgaW50ZW50IG9mIGluc3RhbGxpbmcsXG5cCisgICAgICAgICAgZXh0ZW5kaW5nIG9yIHVwZGF0aW5nIHRoZSBmdW5jdGlvbmFsaXR5IG9mIGFuIEVjbGlwc2UtYmFzZWQgcHJvZHVjdC5cblwKKyAgICAgICAyLiBEdXJpbmcgdGhlIFByb3Zpc2lvbmluZyBQcm9jZXNzLCB0aGUgUHJvdmlzaW9uaW5nIFRlY2hub2xvZ3kgbWF5IGNhdXNlIHRoaXJkIHBhcnR5XG5cCisgICAgICAgICAgSW5zdGFsbGFibGUgU29mdHdhcmUgb3IgYSBwb3J0aW9uIHRoZXJlb2YgdG8gYmUgYWNjZXNzZWQgYW5kIGNvcGllZCB0byB0aGUgVGFyZ2V0IE1hY2hpbmUuXG5cCisgICAgICAgMy4gUHVyc3VhbnQgdG8gdGhlIFNwZWNpZmljYXRpb24sIHlvdSB3aWxsIHByb3ZpZGUgdG8gdGhlIHVzZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIHRoYXRcblwKKyAgICAgICAgICBnb3Zlcm4gdGhlIHVzZSBvZiB0aGUgSW5zdGFsbGFibGUgU29mdHdhcmUgKCJJbnN0YWxsYWJsZSBTb2Z0d2FyZSBBZ3JlZW1lbnQiKSBhbmQgc3VjaFxuXAorICAgICAgICAgIEluc3RhbGxhYmxlIFNvZnR3YXJlIEFncmVlbWVudCBzaGFsbCBiZSBhY2Nlc3NlZCBmcm9tIHRoZSBUYXJnZXQgTWFjaGluZSBpbiBhY2NvcmRhbmNlXG5cCisgICAgICAgICAgd2l0aCB0aGUgU3BlY2lmaWNhdGlvbi4gU3VjaCBJbnN0YWxsYWJsZSBTb2Z0d2FyZSBBZ3JlZW1lbnQgbXVzdCBpbmZvcm0gdGhlIHVzZXIgb2YgdGhlXG5cCisgICAgICAgICAgdGVybXMgYW5kIGNvbmRpdGlvbnMgdGhhdCBnb3Zlcm4gdGhlIEluc3RhbGxhYmxlIFNvZnR3YXJlIGFuZCBtdXN0IHNvbGljaXQgYWNjZXB0YW5jZSBieVxuXAorICAgICAgICAgIHRoZSBlbmQgdXNlciBpbiB0aGUgbWFubmVyIHByZXNjcmliZWQgaW4gc3VjaCBJbnN0YWxsYWJsZSBTb2Z0d2FyZSBBZ3JlZW1lbnQuIFVwb24gc3VjaFxuXAorICAgICAgICAgIGluZGljYXRpb24gb2YgYWdyZWVtZW50IGJ5IHRoZSB1c2VyLCB0aGUgcHJvdmlzaW9uaW5nIFRlY2hub2xvZ3kgd2lsbCBjb21wbGV0ZSBpbnN0YWxsYXRpb25cblwKKyAgICAgICAgICBvZiB0aGUgSW5zdGFsbGFibGUgU29mdHdhcmUuXG5cCitcblwKK0NyeXB0b2dyYXBoeVxuXAorXG5cCitDb250ZW50IG1heSBjb250YWluIGVuY3J5cHRpb24gc29mdHdhcmUuIFRoZSBjb3VudHJ5IGluIHdoaWNoIHlvdSBhcmVcblwKK2N1cnJlbnRseSBtYXkgaGF2ZSByZXN0cmljdGlvbnMgb24gdGhlIGltcG9ydCwgcG9zc2Vzc2lvbiwgYW5kIHVzZSxcblwKK2FuZC9vciByZS1leHBvcnQgdG8gYW5vdGhlciBjb3VudHJ5LCBvZiBlbmNyeXB0aW9uIHNvZnR3YXJlLiBCRUZPUkVcblwKK3VzaW5nIGFueSBlbmNyeXB0aW9uIHNvZnR3YXJlLCBwbGVhc2UgY2hlY2sgdGhlIGNvdW50cnkncyBsYXdzLFxuXAorcmVndWxhdGlvbnMgYW5kIHBvbGljaWVzIGNvbmNlcm5pbmcgdGhlIGltcG9ydCwgcG9zc2Vzc2lvbiwgb3IgdXNlLCBhbmRcblwKK3JlLWV4cG9ydCBvZiBlbmNyeXB0aW9uIHNvZnR3YXJlLCB0byBzZWUgaWYgdGhpcyBpcyBwZXJtaXR0ZWQuXG5cCitcblwKK0phdmEgYW5kIGFsbCBKYXZhLWJhc2VkIHRyYWRlbWFya3MgYXJlIHRyYWRlbWFya3Mgb2YgT3JhY2xlIENvcnBvcmF0aW9uIGluIHRoZSBVbml0ZWQgU3RhdGVzLCBvdGhlciBjb3VudHJpZXMsIG9yIGJvdGguXG4KKyMjIyMjIyMjIyMjIGVuZCBvZiBsaWNlbnNlIHByb3BlcnR5ICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkuZWFydGhzY2llbmNlLmZlYXR1cmUvZmVhdHVyZS54bWwgYi9mZWF0dXJlcy9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5LmVhcnRoc2NpZW5jZS5mZWF0dXJlL2ZlYXR1cmUueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAyZjM4MTEKLS0tIC9kZXYvbnVsbAorKysgYi9mZWF0dXJlcy9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5LmVhcnRoc2NpZW5jZS5mZWF0dXJlL2ZlYXR1cmUueG1sCkBAIC0wLDAgKzEsODIgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8ZmVhdHVyZQorICAgICAgaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkuZWFydGhzY2llbmNlLmZlYXR1cmUiCisgICAgICBsYWJlbD0iJWZlYXR1cmVOYW1lIgorICAgICAgdmVyc2lvbj0iMi4wLjAiCisgICAgICBwcm92aWRlci1uYW1lPSIlcHJvdmlkZXJOYW1lIj4KKworICAgPGRlc2NyaXB0aW9uPgorICAgICAgJWRlc2NyaXB0aW9uCisgICA8L2Rlc2NyaXB0aW9uPgorCisgICA8Y29weXJpZ2h0PgorICAgICAgJWNvcHlyaWdodAorICAgPC9jb3B5cmlnaHQ+CisKKyAgIDxsaWNlbnNlIHVybD0iJWxpY2Vuc2VVUkwiPgorICAgICAgJWxpY2Vuc2UKKyAgIDwvbGljZW5zZT4KKworICAgPHVybD4KKyAgICAgIDx1cGRhdGUgbGFiZWw9IiV1cGRhdGVTaXRlTmFtZSIgdXJsPSJodHRwOi8vZG93bmxvYWQuZWNsaXBzZS5vcmcvc3RlbS91cGRhdGUtc2l0ZS8iLz4KKyAgIDwvdXJsPgorCisgICA8aW5jbHVkZXMKKyAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5LmVhcnRoc2NpZW5jZS4yMDAwLmZlYXR1cmUiCisgICAgICAgICB2ZXJzaW9uPSIwLjAuMCIvPgorCisgICA8aW5jbHVkZXMKKyAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5LmVhcnRoc2NpZW5jZS4yMDAxLmZlYXR1cmUiCisgICAgICAgICB2ZXJzaW9uPSIwLjAuMCIvPgorCisgICA8aW5jbHVkZXMKKyAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5LmVhcnRoc2NpZW5jZS4yMDAyLmZlYXR1cmUiCisgICAgICAgICB2ZXJzaW9uPSIwLjAuMCIvPgorCisgICA8aW5jbHVkZXMKKyAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5LmVhcnRoc2NpZW5jZS4yMDAzLmZlYXR1cmUiCisgICAgICAgICB2ZXJzaW9uPSIwLjAuMCIvPgorCisgICA8aW5jbHVkZXMKKyAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5LmVhcnRoc2NpZW5jZS4yMDA0LmZlYXR1cmUiCisgICAgICAgICB2ZXJzaW9uPSIwLjAuMCIvPgorCisgICA8aW5jbHVkZXMKKyAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5LmVhcnRoc2NpZW5jZS4yMDA1LmZlYXR1cmUiCisgICAgICAgICB2ZXJzaW9uPSIwLjAuMCIvPgorCisgICA8aW5jbHVkZXMKKyAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5LmVhcnRoc2NpZW5jZS4yMDA2LmZlYXR1cmUiCisgICAgICAgICB2ZXJzaW9uPSIwLjAuMCIvPgorCisgICA8aW5jbHVkZXMKKyAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5LmVhcnRoc2NpZW5jZS4yMDA3LmZlYXR1cmUiCisgICAgICAgICB2ZXJzaW9uPSIwLjAuMCIvPgorCisgICA8aW5jbHVkZXMKKyAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5LmVhcnRoc2NpZW5jZS4yMDA4LmZlYXR1cmUiCisgICAgICAgICB2ZXJzaW9uPSIwLjAuMCIvPgorCisgICA8aW5jbHVkZXMKKyAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5LmVhcnRoc2NpZW5jZS4yMDA5LmZlYXR1cmUiCisgICAgICAgICB2ZXJzaW9uPSIwLjAuMCIvPgorCisgICA8aW5jbHVkZXMKKyAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5LmVhcnRoc2NpZW5jZS4yMDEwLmZlYXR1cmUiCisgICAgICAgICB2ZXJzaW9uPSIwLjAuMCIvPgorCisgICA8cGx1Z2luCisgICAgICAgICBpZD0ib3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS5lYXJ0aHNjaWVuY2UuY29tYmluZWQiCisgICAgICAgICBkb3dubG9hZC1zaXplPSIwIgorICAgICAgICAgaW5zdGFsbC1zaXplPSIwIgorICAgICAgICAgdmVyc2lvbj0iMC4wLjAiCisgICAgICAgICB1bnBhY2s9ImZhbHNlIi8+CisKKyAgIDxwbHVnaW4KKyAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5LmVhcnRoc2NpZW5jZS5lbGV2YXRpb24iCisgICAgICAgICBkb3dubG9hZC1zaXplPSIwIgorICAgICAgICAgaW5zdGFsbC1zaXplPSIwIgorICAgICAgICAgdmVyc2lvbj0iMC4wLjAiCisgICAgICAgICB1bnBhY2s9ImZhbHNlIi8+CisKKzwvZmVhdHVyZT4KZGlmZiAtLWdpdCBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkuZWFydGhzY2llbmNlLmZlYXR1cmUvbGljZW5zZS5odG1sIGIvZmVhdHVyZXMvb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS5lYXJ0aHNjaWVuY2UuZmVhdHVyZS9saWNlbnNlLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzE4NGNhMwotLS0gL2Rldi9udWxsCisrKyBiL2ZlYXR1cmVzL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkuZWFydGhzY2llbmNlLmZlYXR1cmUvbGljZW5zZS5odG1sCkBAIC0wLDAgKzEsMTA3IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJJU08tODg1OS0xIiA/PgorPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBYSFRNTCAxLjAgU3RyaWN0Ly9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sMS9EVEQveGh0bWwxLXN0cmljdC5kdGQiPgorPGh0bWwgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiPgorPGhlYWQ+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0xIiAvPgorPHRpdGxlPkVjbGlwc2UgRm91bmRhdGlvbiBTb2Z0d2FyZSBVc2VyIEFncmVlbWVudDwvdGl0bGU+Cis8L2hlYWQ+CisKKzxib2R5IGxhbmc9IkVOLVVTIj4KKzxoMj5FY2xpcHNlIEZvdW5kYXRpb24gU29mdHdhcmUgVXNlciBBZ3JlZW1lbnQ8L2gyPgorPHA+QXByaWwgMTQsIDIwMTA8L3A+CisKKzxoMz5Vc2FnZSBPZiBDb250ZW50PC9oMz4KKworPHA+VEhFIEVDTElQU0UgRk9VTkRBVElPTiBNQUtFUyBBVkFJTEFCTEUgU09GVFdBUkUsIERPQ1VNRU5UQVRJT04sIElORk9STUFUSU9OIEFORC9PUiBPVEhFUiBNQVRFUklBTFMgRk9SIE9QRU4gU09VUkNFIFBST0pFQ1RTCisgICAoQ09MTEVDVElWRUxZICZxdW90O0NPTlRFTlQmcXVvdDspLiAgVVNFIE9GIFRIRSBDT05URU5UIElTIEdPVkVSTkVEIEJZIFRIRSBURVJNUyBBTkQgQ09ORElUSU9OUyBPRiBUSElTIEFHUkVFTUVOVCBBTkQvT1IgVEhFIFRFUk1TIEFORAorICAgQ09ORElUSU9OUyBPRiBMSUNFTlNFIEFHUkVFTUVOVFMgT1IgTk9USUNFUyBJTkRJQ0FURUQgT1IgUkVGRVJFTkNFRCBCRUxPVy4gIEJZIFVTSU5HIFRIRSBDT05URU5ULCBZT1UgQUdSRUUgVEhBVCBZT1VSIFVTRQorICAgT0YgVEhFIENPTlRFTlQgSVMgR09WRVJORUQgQlkgVEhJUyBBR1JFRU1FTlQgQU5EL09SIFRIRSBURVJNUyBBTkQgQ09ORElUSU9OUyBPRiBBTlkgQVBQTElDQUJMRSBMSUNFTlNFIEFHUkVFTUVOVFMgT1IKKyAgIE5PVElDRVMgSU5ESUNBVEVEIE9SIFJFRkVSRU5DRUQgQkVMT1cuICBJRiBZT1UgRE8gTk9UIEFHUkVFIFRPIFRIRSBURVJNUyBBTkQgQ09ORElUSU9OUyBPRiBUSElTIEFHUkVFTUVOVCBBTkQgVEhFIFRFUk1TIEFORAorICAgQ09ORElUSU9OUyBPRiBBTlkgQVBQTElDQUJMRSBMSUNFTlNFIEFHUkVFTUVOVFMgT1IgTk9USUNFUyBJTkRJQ0FURUQgT1IgUkVGRVJFTkNFRCBCRUxPVywgVEhFTiBZT1UgTUFZIE5PVCBVU0UgVEhFIENPTlRFTlQuPC9wPgorCis8aDM+QXBwbGljYWJsZSBMaWNlbnNlczwvaDM+CisKKzxwPlVubGVzcyBvdGhlcndpc2UgaW5kaWNhdGVkLCBhbGwgQ29udGVudCBtYWRlIGF2YWlsYWJsZSBieSB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uIGlzIHByb3ZpZGVkIHRvIHlvdSB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjAKKyAgICgmcXVvdDtFUEwmcXVvdDspLiAgQSBjb3B5IG9mIHRoZSBFUEwgaXMgcHJvdmlkZWQgd2l0aCB0aGlzIENvbnRlbnQgYW5kIGlzIGFsc28gYXZhaWxhYmxlIGF0IDxhIGhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sIj5odHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbDwvYT4uCisgICBGb3IgcHVycG9zZXMgb2YgdGhlIEVQTCwgJnF1b3Q7UHJvZ3JhbSZxdW90OyB3aWxsIG1lYW4gdGhlIENvbnRlbnQuPC9wPgorCis8cD5Db250ZW50IGluY2x1ZGVzLCBidXQgaXMgbm90IGxpbWl0ZWQgdG8sIHNvdXJjZSBjb2RlLCBvYmplY3QgY29kZSwgZG9jdW1lbnRhdGlvbiBhbmQgb3RoZXIgZmlsZXMgbWFpbnRhaW5lZCBpbiB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uIHNvdXJjZSBjb2RlCisgICByZXBvc2l0b3J5ICgmcXVvdDtSZXBvc2l0b3J5JnF1b3Q7KSBpbiBzb2Z0d2FyZSBtb2R1bGVzICgmcXVvdDtNb2R1bGVzJnF1b3Q7KSBhbmQgbWFkZSBhdmFpbGFibGUgYXMgZG93bmxvYWRhYmxlIGFyY2hpdmVzICgmcXVvdDtEb3dubG9hZHMmcXVvdDspLjwvcD4KKworPHVsPgorICAgICAgIDxsaT5Db250ZW50IG1heSBiZSBzdHJ1Y3R1cmVkIGFuZCBwYWNrYWdlZCBpbnRvIG1vZHVsZXMgdG8gZmFjaWxpdGF0ZSBkZWxpdmVyaW5nLCBleHRlbmRpbmcsIGFuZCB1cGdyYWRpbmcgdGhlIENvbnRlbnQuICBUeXBpY2FsIG1vZHVsZXMgbWF5IGluY2x1ZGUgcGx1Zy1pbnMgKCZxdW90O1BsdWctaW5zJnF1b3Q7KSwgcGx1Zy1pbiBmcmFnbWVudHMgKCZxdW90O0ZyYWdtZW50cyZxdW90OyksIGFuZCBmZWF0dXJlcyAoJnF1b3Q7RmVhdHVyZXMmcXVvdDspLjwvbGk+CisgICAgICAgPGxpPkVhY2ggUGx1Zy1pbiBvciBGcmFnbWVudCBtYXkgYmUgcGFja2FnZWQgYXMgYSBzdWItZGlyZWN0b3J5IG9yIEpBUiAoSmF2YSZ0cmFkZTsgQVJjaGl2ZSkgaW4gYSBkaXJlY3RvcnkgbmFtZWQgJnF1b3Q7cGx1Z2lucyZxdW90Oy48L2xpPgorICAgICAgIDxsaT5BIEZlYXR1cmUgaXMgYSBidW5kbGUgb2Ygb25lIG9yIG1vcmUgUGx1Zy1pbnMgYW5kL29yIEZyYWdtZW50cyBhbmQgYXNzb2NpYXRlZCBtYXRlcmlhbC4gIEVhY2ggRmVhdHVyZSBtYXkgYmUgcGFja2FnZWQgYXMgYSBzdWItZGlyZWN0b3J5IGluIGEgZGlyZWN0b3J5IG5hbWVkICZxdW90O2ZlYXR1cmVzJnF1b3Q7LiAgV2l0aGluIGEgRmVhdHVyZSwgZmlsZXMgbmFtZWQgJnF1b3Q7ZmVhdHVyZS54bWwmcXVvdDsgbWF5IGNvbnRhaW4gYSBsaXN0IG9mIHRoZSBuYW1lcyBhbmQgdmVyc2lvbiBudW1iZXJzIG9mIHRoZSBQbHVnLWlucworICAgICAgYW5kL29yIEZyYWdtZW50cyBhc3NvY2lhdGVkIHdpdGggdGhhdCBGZWF0dXJlLjwvbGk+CisgICAgICAgPGxpPkZlYXR1cmVzIG1heSBhbHNvIGluY2x1ZGUgb3RoZXIgRmVhdHVyZXMgKCZxdW90O0luY2x1ZGVkIEZlYXR1cmVzJnF1b3Q7KS4gV2l0aGluIGEgRmVhdHVyZSwgZmlsZXMgbmFtZWQgJnF1b3Q7ZmVhdHVyZS54bWwmcXVvdDsgbWF5IGNvbnRhaW4gYSBsaXN0IG9mIHRoZSBuYW1lcyBhbmQgdmVyc2lvbiBudW1iZXJzIG9mIEluY2x1ZGVkIEZlYXR1cmVzLjwvbGk+Cis8L3VsPgorCis8cD5UaGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgZ292ZXJuaW5nIFBsdWctaW5zIGFuZCBGcmFnbWVudHMgc2hvdWxkIGJlIGNvbnRhaW5lZCBpbiBmaWxlcyBuYW1lZCAmcXVvdDthYm91dC5odG1sJnF1b3Q7ICgmcXVvdDtBYm91dHMmcXVvdDspLiBUaGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgZ292ZXJuaW5nIEZlYXR1cmVzIGFuZAorSW5jbHVkZWQgRmVhdHVyZXMgc2hvdWxkIGJlIGNvbnRhaW5lZCBpbiBmaWxlcyBuYW1lZCAmcXVvdDtsaWNlbnNlLmh0bWwmcXVvdDsgKCZxdW90O0ZlYXR1cmUgTGljZW5zZXMmcXVvdDspLiAgQWJvdXRzIGFuZCBGZWF0dXJlIExpY2Vuc2VzIG1heSBiZSBsb2NhdGVkIGluIGFueSBkaXJlY3Rvcnkgb2YgYSBEb3dubG9hZCBvciBNb2R1bGUKK2luY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvIHRoZSBmb2xsb3dpbmcgbG9jYXRpb25zOjwvcD4KKworPHVsPgorICAgICAgIDxsaT5UaGUgdG9wLWxldmVsIChyb290KSBkaXJlY3Rvcnk8L2xpPgorICAgICAgIDxsaT5QbHVnLWluIGFuZCBGcmFnbWVudCBkaXJlY3RvcmllczwvbGk+CisgICAgICAgPGxpPkluc2lkZSBQbHVnLWlucyBhbmQgRnJhZ21lbnRzIHBhY2thZ2VkIGFzIEpBUnM8L2xpPgorICAgICAgIDxsaT5TdWItZGlyZWN0b3JpZXMgb2YgdGhlIGRpcmVjdG9yeSBuYW1lZCAmcXVvdDtzcmMmcXVvdDsgb2YgY2VydGFpbiBQbHVnLWluczwvbGk+CisgICAgICAgPGxpPkZlYXR1cmUgZGlyZWN0b3JpZXM8L2xpPgorPC91bD4KKworPHA+Tm90ZTogaWYgYSBGZWF0dXJlIG1hZGUgYXZhaWxhYmxlIGJ5IHRoZSBFY2xpcHNlIEZvdW5kYXRpb24gaXMgaW5zdGFsbGVkIHVzaW5nIHRoZSBQcm92aXNpb25pbmcgVGVjaG5vbG9neSAoYXMgZGVmaW5lZCBiZWxvdyksIHlvdSBtdXN0IGFncmVlIHRvIGEgbGljZW5zZSAoJnF1b3Q7RmVhdHVyZSBVcGRhdGUgTGljZW5zZSZxdW90OykgZHVyaW5nIHRoZQoraW5zdGFsbGF0aW9uIHByb2Nlc3MuICBJZiB0aGUgRmVhdHVyZSBjb250YWlucyBJbmNsdWRlZCBGZWF0dXJlcywgdGhlIEZlYXR1cmUgVXBkYXRlIExpY2Vuc2Ugc2hvdWxkIGVpdGhlciBwcm92aWRlIHlvdSB3aXRoIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBnb3Zlcm5pbmcgdGhlIEluY2x1ZGVkIEZlYXR1cmVzIG9yCitpbmZvcm0geW91IHdoZXJlIHlvdSBjYW4gbG9jYXRlIHRoZW0uICBGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlcyBtYXkgYmUgZm91bmQgaW4gdGhlICZxdW90O2xpY2Vuc2UmcXVvdDsgcHJvcGVydHkgb2YgZmlsZXMgbmFtZWQgJnF1b3Q7ZmVhdHVyZS5wcm9wZXJ0aWVzJnF1b3Q7IGZvdW5kIHdpdGhpbiBhIEZlYXR1cmUuCitTdWNoIEFib3V0cywgRmVhdHVyZSBMaWNlbnNlcywgYW5kIEZlYXR1cmUgVXBkYXRlIExpY2Vuc2VzIGNvbnRhaW4gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIChvciByZWZlcmVuY2VzIHRvIHN1Y2ggdGVybXMgYW5kIGNvbmRpdGlvbnMpIHRoYXQgZ292ZXJuIHlvdXIgdXNlIG9mIHRoZSBhc3NvY2lhdGVkIENvbnRlbnQgaW4KK3RoYXQgZGlyZWN0b3J5LjwvcD4KKworPHA+VEhFIEFCT1VUUywgRkVBVFVSRSBMSUNFTlNFUywgQU5EIEZFQVRVUkUgVVBEQVRFIExJQ0VOU0VTIE1BWSBSRUZFUiBUTyBUSEUgRVBMIE9SIE9USEVSIExJQ0VOU0UgQUdSRUVNRU5UUywgTk9USUNFUyBPUiBURVJNUyBBTkQgQ09ORElUSU9OUy4gIFNPTUUgT0YgVEhFU0UKK09USEVSIExJQ0VOU0UgQUdSRUVNRU5UUyBNQVkgSU5DTFVERSAoQlVUIEFSRSBOT1QgTElNSVRFRCBUTyk6PC9wPgorCis8dWw+CisgICAgICAgPGxpPkNvbW1vbiBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMCAoYXZhaWxhYmxlIGF0IDxhIGhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvY3BsLXYxMC5odG1sIj5odHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2NwbC12MTAuaHRtbDwvYT4pPC9saT4KKyAgICAgICA8bGk+QXBhY2hlIFNvZnR3YXJlIExpY2Vuc2UgMS4xIChhdmFpbGFibGUgYXQgPGEgaHJlZj0iaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UiPmh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFPC9hPik8L2xpPgorICAgICAgIDxsaT5BcGFjaGUgU29mdHdhcmUgTGljZW5zZSAyLjAgKGF2YWlsYWJsZSBhdCA8YSBocmVmPSJodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAiPmh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMDwvYT4pPC9saT4KKyAgICAgICA8bGk+TWV0cm8gTGluayBQdWJsaWMgTGljZW5zZSAxLjAwIChhdmFpbGFibGUgYXQgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuZ3JvdXAub3JnL29wZW5tb3RpZi9zdXBwb3J0ZXJzL21ldHJvbGluay9saWNlbnNlLmh0bWwiPmh0dHA6Ly93d3cub3Blbmdyb3VwLm9yZy9vcGVubW90aWYvc3VwcG9ydGVycy9tZXRyb2xpbmsvbGljZW5zZS5odG1sPC9hPik8L2xpPgorICAgICAgIDxsaT5Nb3ppbGxhIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4xIChhdmFpbGFibGUgYXQgPGEgaHJlZj0iaHR0cDovL3d3dy5tb3ppbGxhLm9yZy9NUEwvTVBMLTEuMS5odG1sIj5odHRwOi8vd3d3Lm1vemlsbGEub3JnL01QTC9NUEwtMS4xLmh0bWw8L2E+KTwvbGk+Cis8L3VsPgorCis8cD5JVCBJUyBZT1VSIE9CTElHQVRJT04gVE8gUkVBRCBBTkQgQUNDRVBUIEFMTCBTVUNIIFRFUk1TIEFORCBDT05ESVRJT05TIFBSSU9SIFRPIFVTRSBPRiBUSEUgQ09OVEVOVC4gIElmIG5vIEFib3V0LCBGZWF0dXJlIExpY2Vuc2UsIG9yIEZlYXR1cmUgVXBkYXRlIExpY2Vuc2UgaXMgcHJvdmlkZWQsIHBsZWFzZQorY29udGFjdCB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uIHRvIGRldGVybWluZSB3aGF0IHRlcm1zIGFuZCBjb25kaXRpb25zIGdvdmVybiB0aGF0IHBhcnRpY3VsYXIgQ29udGVudC48L3A+CisKKworPGgzPlVzZSBvZiBQcm92aXNpb25pbmcgVGVjaG5vbG9neTwvaDM+CisKKzxwPlRoZSBFY2xpcHNlIEZvdW5kYXRpb24gbWFrZXMgYXZhaWxhYmxlIHByb3Zpc2lvbmluZyBzb2Z0d2FyZSwgZXhhbXBsZXMgb2Ygd2hpY2ggaW5jbHVkZSwgYnV0IGFyZSBub3QgbGltaXRlZCB0bywgcDIgYW5kIHRoZSBFY2xpcHNlCisgICBVcGRhdGUgTWFuYWdlciAoJnF1b3Q7UHJvdmlzaW9uaW5nIFRlY2hub2xvZ3kmcXVvdDspIGZvciB0aGUgcHVycG9zZSBvZiBhbGxvd2luZyB1c2VycyB0byBpbnN0YWxsIHNvZnR3YXJlLCBkb2N1bWVudGF0aW9uLCBpbmZvcm1hdGlvbiBhbmQvb3IKKyAgIG90aGVyIG1hdGVyaWFscyAoY29sbGVjdGl2ZWx5ICZxdW90O0luc3RhbGxhYmxlIFNvZnR3YXJlJnF1b3Q7KS4gVGhpcyBjYXBhYmlsaXR5IGlzIHByb3ZpZGVkIHdpdGggdGhlIGludGVudCBvZiBhbGxvd2luZyBzdWNoIHVzZXJzIHRvCisgICBpbnN0YWxsLCBleHRlbmQgYW5kIHVwZGF0ZSBFY2xpcHNlLWJhc2VkIHByb2R1Y3RzLiBJbmZvcm1hdGlvbiBhYm91dCBwYWNrYWdpbmcgSW5zdGFsbGFibGUgU29mdHdhcmUgaXMgYXZhaWxhYmxlIGF0IDxhCisgICAgICAgaHJlZj0iaHR0cDovL2VjbGlwc2Uub3JnL2VxdWlub3gvcDIvcmVwb3NpdG9yeV9wYWNrYWdpbmcuaHRtbCI+aHR0cDovL2VjbGlwc2Uub3JnL2VxdWlub3gvcDIvcmVwb3NpdG9yeV9wYWNrYWdpbmcuaHRtbDwvYT4KKyAgICgmcXVvdDtTcGVjaWZpY2F0aW9uJnF1b3Q7KS48L3A+CisKKzxwPllvdSBtYXkgdXNlIFByb3Zpc2lvbmluZyBUZWNobm9sb2d5IHRvIGFsbG93IG90aGVyIHBhcnRpZXMgdG8gaW5zdGFsbCBJbnN0YWxsYWJsZSBTb2Z0d2FyZS4gWW91IHNoYWxsIGJlIHJlc3BvbnNpYmxlIGZvciBlbmFibGluZyB0aGUKKyAgIGFwcGxpY2FibGUgbGljZW5zZSBhZ3JlZW1lbnRzIHJlbGF0aW5nIHRvIHRoZSBJbnN0YWxsYWJsZSBTb2Z0d2FyZSB0byBiZSBwcmVzZW50ZWQgdG8sIGFuZCBhY2NlcHRlZCBieSwgdGhlIHVzZXJzIG9mIHRoZSBQcm92aXNpb25pbmcgVGVjaG5vbG9neQorICAgaW4gYWNjb3JkYW5jZSB3aXRoIHRoZSBTcGVjaWZpY2F0aW9uLiBCeSB1c2luZyBQcm92aXNpb25pbmcgVGVjaG5vbG9neSBpbiBzdWNoIGEgbWFubmVyIGFuZCBtYWtpbmcgaXQgYXZhaWxhYmxlIGluIGFjY29yZGFuY2Ugd2l0aCB0aGUKKyAgIFNwZWNpZmljYXRpb24sIHlvdSBmdXJ0aGVyIGFja25vd2xlZGdlIHlvdXIgYWdyZWVtZW50IHRvLCBhbmQgdGhlIGFjcXVpc2l0aW9uIG9mIGFsbCBuZWNlc3NhcnkgcmlnaHRzIHRvIHBlcm1pdCB0aGUgZm9sbG93aW5nOjwvcD4KKworPG9sPgorICAgICAgIDxsaT5BIHNlcmllcyBvZiBhY3Rpb25zIG1heSBvY2N1ciAoJnF1b3Q7UHJvdmlzaW9uaW5nIFByb2Nlc3MmcXVvdDspIGluIHdoaWNoIGEgdXNlciBtYXkgZXhlY3V0ZSB0aGUgUHJvdmlzaW9uaW5nIFRlY2hub2xvZ3kKKyAgICAgICBvbiBhIG1hY2hpbmUgKCZxdW90O1RhcmdldCBNYWNoaW5lJnF1b3Q7KSB3aXRoIHRoZSBpbnRlbnQgb2YgaW5zdGFsbGluZywgZXh0ZW5kaW5nIG9yIHVwZGF0aW5nIHRoZSBmdW5jdGlvbmFsaXR5IG9mIGFuIEVjbGlwc2UtYmFzZWQKKyAgICAgICBwcm9kdWN0LjwvbGk+CisgICAgICAgPGxpPkR1cmluZyB0aGUgUHJvdmlzaW9uaW5nIFByb2Nlc3MsIHRoZSBQcm92aXNpb25pbmcgVGVjaG5vbG9neSBtYXkgY2F1c2UgdGhpcmQgcGFydHkgSW5zdGFsbGFibGUgU29mdHdhcmUgb3IgYSBwb3J0aW9uIHRoZXJlb2YgdG8gYmUKKyAgICAgICBhY2Nlc3NlZCBhbmQgY29waWVkIHRvIHRoZSBUYXJnZXQgTWFjaGluZS48L2xpPgorICAgICAgIDxsaT5QdXJzdWFudCB0byB0aGUgU3BlY2lmaWNhdGlvbiwgeW91IHdpbGwgcHJvdmlkZSB0byB0aGUgdXNlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgdGhhdCBnb3Zlcm4gdGhlIHVzZSBvZiB0aGUgSW5zdGFsbGFibGUKKyAgICAgICBTb2Z0d2FyZSAoJnF1b3Q7SW5zdGFsbGFibGUgU29mdHdhcmUgQWdyZWVtZW50JnF1b3Q7KSBhbmQgc3VjaCBJbnN0YWxsYWJsZSBTb2Z0d2FyZSBBZ3JlZW1lbnQgc2hhbGwgYmUgYWNjZXNzZWQgZnJvbSB0aGUgVGFyZ2V0CisgICAgICAgTWFjaGluZSBpbiBhY2NvcmRhbmNlIHdpdGggdGhlIFNwZWNpZmljYXRpb24uIFN1Y2ggSW5zdGFsbGFibGUgU29mdHdhcmUgQWdyZWVtZW50IG11c3QgaW5mb3JtIHRoZSB1c2VyIG9mIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyB0aGF0IGdvdmVybgorICAgICAgIHRoZSBJbnN0YWxsYWJsZSBTb2Z0d2FyZSBhbmQgbXVzdCBzb2xpY2l0IGFjY2VwdGFuY2UgYnkgdGhlIGVuZCB1c2VyIGluIHRoZSBtYW5uZXIgcHJlc2NyaWJlZCBpbiBzdWNoIEluc3RhbGxhYmxlIFNvZnR3YXJlIEFncmVlbWVudC4gVXBvbiBzdWNoCisgICAgICAgaW5kaWNhdGlvbiBvZiBhZ3JlZW1lbnQgYnkgdGhlIHVzZXIsIHRoZSBwcm92aXNpb25pbmcgVGVjaG5vbG9neSB3aWxsIGNvbXBsZXRlIGluc3RhbGxhdGlvbiBvZiB0aGUgSW5zdGFsbGFibGUgU29mdHdhcmUuPC9saT4KKzwvb2w+CisKKzxoMz5DcnlwdG9ncmFwaHk8L2gzPgorCis8cD5Db250ZW50IG1heSBjb250YWluIGVuY3J5cHRpb24gc29mdHdhcmUuIFRoZSBjb3VudHJ5IGluIHdoaWNoIHlvdSBhcmUgY3VycmVudGx5IG1heSBoYXZlIHJlc3RyaWN0aW9ucyBvbiB0aGUgaW1wb3J0LCBwb3NzZXNzaW9uLCBhbmQgdXNlLCBhbmQvb3IgcmUtZXhwb3J0IHRvCisgICBhbm90aGVyIGNvdW50cnksIG9mIGVuY3J5cHRpb24gc29mdHdhcmUuIEJFRk9SRSB1c2luZyBhbnkgZW5jcnlwdGlvbiBzb2Z0d2FyZSwgcGxlYXNlIGNoZWNrIHRoZSBjb3VudHJ5J3MgbGF3cywgcmVndWxhdGlvbnMgYW5kIHBvbGljaWVzIGNvbmNlcm5pbmcgdGhlIGltcG9ydCwKKyAgIHBvc3Nlc3Npb24sIG9yIHVzZSwgYW5kIHJlLWV4cG9ydCBvZiBlbmNyeXB0aW9uIHNvZnR3YXJlLCB0byBzZWUgaWYgdGhpcyBpcyBwZXJtaXR0ZWQuPC9wPgorCis8cD48c21hbGw+SmF2YSBhbmQgYWxsIEphdmEtYmFzZWQgdHJhZGVtYXJrcyBhcmUgdHJhZGVtYXJrcyBvZiBPcmFjbGUgQ29ycG9yYXRpb24gaW4gdGhlIFVuaXRlZCBTdGF0ZXMsIG90aGVyIGNvdW50cmllcywgb3IgYm90aC48L3NtYWxsPjwvcD4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkuZmVhdHVyZS8ucHJvamVjdCBiL2ZlYXR1cmVzL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkuZmVhdHVyZS8ucHJvamVjdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42Nzc2MzMxCi0tLSAvZGV2L251bGwKKysrIGIvZmVhdHVyZXMvb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS5mZWF0dXJlLy5wcm9qZWN0CkBAIC0wLDAgKzEsMTcgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8cHJvamVjdERlc2NyaXB0aW9uPgorCTxuYW1lPm9yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkuZmVhdHVyZTwvbmFtZT4KKwk8Y29tbWVudD48L2NvbW1lbnQ+CisJPHByb2plY3RzPgorCTwvcHJvamVjdHM+CisJPGJ1aWxkU3BlYz4KKwkJPGJ1aWxkQ29tbWFuZD4KKwkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5GZWF0dXJlQnVpbGRlcjwvbmFtZT4KKwkJCTxhcmd1bWVudHM+CisJCQk8L2FyZ3VtZW50cz4KKwkJPC9idWlsZENvbW1hbmQ+CisJPC9idWlsZFNwZWM+CisJPG5hdHVyZXM+CisJCTxuYXR1cmU+b3JnLmVjbGlwc2UucGRlLkZlYXR1cmVOYXR1cmU8L25hdHVyZT4KKwk8L25hdHVyZXM+Cis8L3Byb2plY3REZXNjcmlwdGlvbj4KZGlmZiAtLWdpdCBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkuZmVhdHVyZS9idWlsZC5wcm9wZXJ0aWVzIGIvZmVhdHVyZXMvb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS5mZWF0dXJlL2J1aWxkLnByb3BlcnRpZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjc0YWY4NgotLS0gL2Rldi9udWxsCisrKyBiL2ZlYXR1cmVzL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkuZmVhdHVyZS9idWlsZC5wcm9wZXJ0aWVzCkBAIC0wLDAgKzEsNCBAQAorYmluLmluY2x1ZGVzID0gZmVhdHVyZS54bWwsXAorICAgICAgICAgICAgICAgZmVhdHVyZS5wcm9wZXJ0aWVzLFwKKyAgICAgICAgICAgICAgIGVwbC12MTAuaHRtbCxcCisgICAgICAgICAgICAgICBsaWNlbnNlLmh0bWwKZGlmZiAtLWdpdCBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkuZmVhdHVyZS9lcGwtdjEwLmh0bWwgYi9mZWF0dXJlcy9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5LmZlYXR1cmUvZXBsLXYxMC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVkNGIxOTYKLS0tIC9kZXYvbnVsbAorKysgYi9mZWF0dXJlcy9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5LmZlYXR1cmUvZXBsLXYxMC5odG1sCkBAIC0wLDAgKzEsMzI4IEBACis8aHRtbCB4bWxuczpvPSJ1cm46c2NoZW1hcy1taWNyb3NvZnQtY29tOm9mZmljZTpvZmZpY2UiCit4bWxuczp3PSJ1cm46c2NoZW1hcy1taWNyb3NvZnQtY29tOm9mZmljZTp3b3JkIgoreG1sbnM9Imh0dHA6Ly93d3cudzMub3JnL1RSL1JFQy1odG1sNDAiPgorCis8aGVhZD4KKzxtZXRhIGh0dHAtZXF1aXY9Q29udGVudC1UeXBlIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD13aW5kb3dzLTEyNTIiPgorPG1ldGEgbmFtZT1Qcm9nSWQgY29udGVudD1Xb3JkLkRvY3VtZW50PgorPG1ldGEgbmFtZT1HZW5lcmF0b3IgY29udGVudD0iTWljcm9zb2Z0IFdvcmQgOSI+Cis8bWV0YSBuYW1lPU9yaWdpbmF0b3IgY29udGVudD0iTWljcm9zb2Z0IFdvcmQgOSI+Cis8bGluayByZWw9RmlsZS1MaXN0CitocmVmPSIuL0VjbGlwc2UlMjBFUEwlMjAyMDAzXzExXzEwJTIwRmluYWxfZmlsZXMvZmlsZWxpc3QueG1sIj4KKzx0aXRsZT5FY2xpcHNlIFB1YmxpYyBMaWNlbnNlIC0gVmVyc2lvbiAxLjA8L3RpdGxlPgorPCEtLVtpZiBndGUgbXNvIDldPjx4bWw+CisgPG86RG9jdW1lbnRQcm9wZXJ0aWVzPgorICA8bzpSZXZpc2lvbj4yPC9vOlJldmlzaW9uPgorICA8bzpUb3RhbFRpbWU+MzwvbzpUb3RhbFRpbWU+CisgIDxvOkNyZWF0ZWQ+MjAwNC0wMy0wNVQyMzowMzowMFo8L286Q3JlYXRlZD4KKyAgPG86TGFzdFNhdmVkPjIwMDQtMDMtMDVUMjM6MDM6MDBaPC9vOkxhc3RTYXZlZD4KKyAgPG86UGFnZXM+NDwvbzpQYWdlcz4KKyAgPG86V29yZHM+MTYyNjwvbzpXb3Jkcz4KKyAgPG86Q2hhcmFjdGVycz45MjcwPC9vOkNoYXJhY3RlcnM+CisgICA8bzpMaW5lcz43NzwvbzpMaW5lcz4KKyAgPG86UGFyYWdyYXBocz4xODwvbzpQYXJhZ3JhcGhzPgorICA8bzpDaGFyYWN0ZXJzV2l0aFNwYWNlcz4xMTM4NDwvbzpDaGFyYWN0ZXJzV2l0aFNwYWNlcz4KKyAgPG86VmVyc2lvbj45LjQ0MDI8L286VmVyc2lvbj4KKyA8L286RG9jdW1lbnRQcm9wZXJ0aWVzPgorPC94bWw+PCFbZW5kaWZdLS0+PCEtLVtpZiBndGUgbXNvIDldPjx4bWw+CisgPHc6V29yZERvY3VtZW50PgorICA8dzpUcmFja1JldmlzaW9ucy8+CisgPC93OldvcmREb2N1bWVudD4KKzwveG1sPjwhW2VuZGlmXS0tPgorPHN0eWxlPgorPCEtLQorIC8qIEZvbnQgRGVmaW5pdGlvbnMgKi8KK0Bmb250LWZhY2UKKwl7Zm9udC1mYW1pbHk6VGFob21hOworCXBhbm9zZS0xOjIgMTEgNiA0IDMgNSA0IDQgMiA0OworCW1zby1mb250LWNoYXJzZXQ6MDsKKwltc28tZ2VuZXJpYy1mb250LWZhbWlseTpzd2lzczsKKwltc28tZm9udC1waXRjaDp2YXJpYWJsZTsKKwltc28tZm9udC1zaWduYXR1cmU6NTUzNjc5NDk1IC0yMTQ3NDgzNjQ4IDggMCA2NjA0NyAwO30KKyAvKiBTdHlsZSBEZWZpbml0aW9ucyAqLworcC5Nc29Ob3JtYWwsIGxpLk1zb05vcm1hbCwgZGl2Lk1zb05vcm1hbAorCXttc28tc3R5bGUtcGFyZW50OiIiOworCW1hcmdpbjowaW47CisJbWFyZ2luLWJvdHRvbTouMDAwMXB0OworCW1zby1wYWdpbmF0aW9uOndpZG93LW9ycGhhbjsKKwlmb250LXNpemU6MTIuMHB0OworCWZvbnQtZmFtaWx5OiJUaW1lcyBOZXcgUm9tYW4iOworCW1zby1mYXJlYXN0LWZvbnQtZmFtaWx5OiJUaW1lcyBOZXcgUm9tYW4iO30KK3AKKwl7bWFyZ2luLXJpZ2h0OjBpbjsKKwltc28tbWFyZ2luLXRvcC1hbHQ6YXV0bzsKKwltc28tbWFyZ2luLWJvdHRvbS1hbHQ6YXV0bzsKKwltYXJnaW4tbGVmdDowaW47CisJbXNvLXBhZ2luYXRpb246d2lkb3ctb3JwaGFuOworCWZvbnQtc2l6ZToxMi4wcHQ7CisJZm9udC1mYW1pbHk6IlRpbWVzIE5ldyBSb21hbiI7CisJbXNvLWZhcmVhc3QtZm9udC1mYW1pbHk6IlRpbWVzIE5ldyBSb21hbiI7fQorcC5CYWxsb29uVGV4dCwgbGkuQmFsbG9vblRleHQsIGRpdi5CYWxsb29uVGV4dAorCXttc28tc3R5bGUtbmFtZToiQmFsbG9vbiBUZXh0IjsKKwltYXJnaW46MGluOworCW1hcmdpbi1ib3R0b206LjAwMDFwdDsKKwltc28tcGFnaW5hdGlvbjp3aWRvdy1vcnBoYW47CisJZm9udC1zaXplOjguMHB0OworCWZvbnQtZmFtaWx5OlRhaG9tYTsKKwltc28tZmFyZWFzdC1mb250LWZhbWlseToiVGltZXMgTmV3IFJvbWFuIjt9CitAcGFnZSBTZWN0aW9uMQorCXtzaXplOjguNWluIDExLjBpbjsKKwltYXJnaW46MS4waW4gMS4yNWluIDEuMGluIDEuMjVpbjsKKwltc28taGVhZGVyLW1hcmdpbjouNWluOworCW1zby1mb290ZXItbWFyZ2luOi41aW47CisJbXNvLXBhcGVyLXNvdXJjZTowO30KK2Rpdi5TZWN0aW9uMQorCXtwYWdlOlNlY3Rpb24xO30KKy0tPgorPC9zdHlsZT4KKzwvaGVhZD4KKworPGJvZHkgbGFuZz1FTi1VUyBzdHlsZT0ndGFiLWludGVydmFsOi41aW4nPgorCis8ZGl2IGNsYXNzPVNlY3Rpb24xPgorCis8cCBhbGlnbj1jZW50ZXIgc3R5bGU9J3RleHQtYWxpZ246Y2VudGVyJz48Yj5FY2xpcHNlIFB1YmxpYyBMaWNlbnNlIC0gdiAxLjA8L2I+Cis8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5USEUgQUNDT01QQU5ZSU5HIFBST0dSQU0gSVMgUFJPVklERUQgVU5ERVIKK1RIRSBURVJNUyBPRiBUSElTIEVDTElQU0UgUFVCTElDIExJQ0VOU0UgKCZxdW90O0FHUkVFTUVOVCZxdW90OykuIEFOWSBVU0UsCitSRVBST0RVQ1RJT04gT1IgRElTVFJJQlVUSU9OIE9GIFRIRSBQUk9HUkFNIENPTlNUSVRVVEVTIFJFQ0lQSUVOVCdTIEFDQ0VQVEFOQ0UKK09GIFRISVMgQUdSRUVNRU5ULjwvc3Bhbj4gPC9wPgorCis8cD48Yj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+MS4gREVGSU5JVElPTlM8L3NwYW4+PC9iPiA8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4mcXVvdDtDb250cmlidXRpb24mcXVvdDsgbWVhbnM6PC9zcGFuPiA8L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmEpCitpbiB0aGUgY2FzZSBvZiB0aGUgaW5pdGlhbCBDb250cmlidXRvciwgdGhlIGluaXRpYWwgY29kZSBhbmQgZG9jdW1lbnRhdGlvbgorZGlzdHJpYnV0ZWQgdW5kZXIgdGhpcyBBZ3JlZW1lbnQsIGFuZDxiciBjbGVhcj1sZWZ0PgorYikgaW4gdGhlIGNhc2Ugb2YgZWFjaCBzdWJzZXF1ZW50IENvbnRyaWJ1dG9yOjwvc3Bhbj48L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmkpCitjaGFuZ2VzIHRvIHRoZSBQcm9ncmFtLCBhbmQ8L3NwYW4+PC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5paSkKK2FkZGl0aW9ucyB0byB0aGUgUHJvZ3JhbTs8L3NwYW4+PC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz53aGVyZQorc3VjaCBjaGFuZ2VzIGFuZC9vciBhZGRpdGlvbnMgdG8gdGhlIFByb2dyYW0gb3JpZ2luYXRlIGZyb20gYW5kIGFyZSBkaXN0cmlidXRlZAorYnkgdGhhdCBwYXJ0aWN1bGFyIENvbnRyaWJ1dG9yLiBBIENvbnRyaWJ1dGlvbiAnb3JpZ2luYXRlcycgZnJvbSBhIENvbnRyaWJ1dG9yCitpZiBpdCB3YXMgYWRkZWQgdG8gdGhlIFByb2dyYW0gYnkgc3VjaCBDb250cmlidXRvciBpdHNlbGYgb3IgYW55b25lIGFjdGluZyBvbgorc3VjaCBDb250cmlidXRvcidzIGJlaGFsZi4gQ29udHJpYnV0aW9ucyBkbyBub3QgaW5jbHVkZSBhZGRpdGlvbnMgdG8gdGhlCitQcm9ncmFtIHdoaWNoOiAoaSkgYXJlIHNlcGFyYXRlIG1vZHVsZXMgb2Ygc29mdHdhcmUgZGlzdHJpYnV0ZWQgaW4gY29uanVuY3Rpb24KK3dpdGggdGhlIFByb2dyYW0gdW5kZXIgdGhlaXIgb3duIGxpY2Vuc2UgYWdyZWVtZW50LCBhbmQgKGlpKSBhcmUgbm90IGRlcml2YXRpdmUKK3dvcmtzIG9mIHRoZSBQcm9ncmFtLiA8L3NwYW4+PC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+JnF1b3Q7Q29udHJpYnV0b3ImcXVvdDsgbWVhbnMgYW55IHBlcnNvbiBvcgorZW50aXR5IHRoYXQgZGlzdHJpYnV0ZXMgdGhlIFByb2dyYW0uPC9zcGFuPiA8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4mcXVvdDtMaWNlbnNlZCBQYXRlbnRzICZxdW90OyBtZWFuIHBhdGVudAorY2xhaW1zIGxpY2Vuc2FibGUgYnkgYSBDb250cmlidXRvciB3aGljaCBhcmUgbmVjZXNzYXJpbHkgaW5mcmluZ2VkIGJ5IHRoZSB1c2UKK29yIHNhbGUgb2YgaXRzIENvbnRyaWJ1dGlvbiBhbG9uZSBvciB3aGVuIGNvbWJpbmVkIHdpdGggdGhlIFByb2dyYW0uIDwvc3Bhbj48L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4mcXVvdDtQcm9ncmFtJnF1b3Q7IG1lYW5zIHRoZSBDb250cmlidXRpb25zCitkaXN0cmlidXRlZCBpbiBhY2NvcmRhbmNlIHdpdGggdGhpcyBBZ3JlZW1lbnQuPC9zcGFuPiA8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4mcXVvdDtSZWNpcGllbnQmcXVvdDsgbWVhbnMgYW55b25lIHdobworcmVjZWl2ZXMgdGhlIFByb2dyYW0gdW5kZXIgdGhpcyBBZ3JlZW1lbnQsIGluY2x1ZGluZyBhbGwgQ29udHJpYnV0b3JzLjwvc3Bhbj4gPC9wPgorCis8cD48Yj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+Mi4gR1JBTlQgT0YgUklHSFRTPC9zcGFuPjwvYj4gPC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5hKQorU3ViamVjdCB0byB0aGUgdGVybXMgb2YgdGhpcyBBZ3JlZW1lbnQsIGVhY2ggQ29udHJpYnV0b3IgaGVyZWJ5IGdyYW50cyBSZWNpcGllbnQKK2Egbm9uLWV4Y2x1c2l2ZSwgd29ybGR3aWRlLCByb3lhbHR5LWZyZWUgY29weXJpZ2h0IGxpY2Vuc2UgdG88c3Bhbgorc3R5bGU9J2NvbG9yOnJlZCc+IDwvc3Bhbj5yZXByb2R1Y2UsIHByZXBhcmUgZGVyaXZhdGl2ZSB3b3JrcyBvZiwgcHVibGljbHkKK2Rpc3BsYXksIHB1YmxpY2x5IHBlcmZvcm0sIGRpc3RyaWJ1dGUgYW5kIHN1YmxpY2Vuc2UgdGhlIENvbnRyaWJ1dGlvbiBvZiBzdWNoCitDb250cmlidXRvciwgaWYgYW55LCBhbmQgc3VjaCBkZXJpdmF0aXZlIHdvcmtzLCBpbiBzb3VyY2UgY29kZSBhbmQgb2JqZWN0IGNvZGUKK2Zvcm0uPC9zcGFuPjwvcD4KKworPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YikKK1N1YmplY3QgdG8gdGhlIHRlcm1zIG9mIHRoaXMgQWdyZWVtZW50LCBlYWNoIENvbnRyaWJ1dG9yIGhlcmVieSBncmFudHMKK1JlY2lwaWVudCBhIG5vbi1leGNsdXNpdmUsIHdvcmxkd2lkZSw8c3BhbiBzdHlsZT0nY29sb3I6Z3JlZW4nPiA8L3NwYW4+cm95YWx0eS1mcmVlCitwYXRlbnQgbGljZW5zZSB1bmRlciBMaWNlbnNlZCBQYXRlbnRzIHRvIG1ha2UsIHVzZSwgc2VsbCwgb2ZmZXIgdG8gc2VsbCwgaW1wb3J0CithbmQgb3RoZXJ3aXNlIHRyYW5zZmVyIHRoZSBDb250cmlidXRpb24gb2Ygc3VjaCBDb250cmlidXRvciwgaWYgYW55LCBpbiBzb3VyY2UKK2NvZGUgYW5kIG9iamVjdCBjb2RlIGZvcm0uIFRoaXMgcGF0ZW50IGxpY2Vuc2Ugc2hhbGwgYXBwbHkgdG8gdGhlIGNvbWJpbmF0aW9uCitvZiB0aGUgQ29udHJpYnV0aW9uIGFuZCB0aGUgUHJvZ3JhbSBpZiwgYXQgdGhlIHRpbWUgdGhlIENvbnRyaWJ1dGlvbiBpcyBhZGRlZAorYnkgdGhlIENvbnRyaWJ1dG9yLCBzdWNoIGFkZGl0aW9uIG9mIHRoZSBDb250cmlidXRpb24gY2F1c2VzIHN1Y2ggY29tYmluYXRpb24KK3RvIGJlIGNvdmVyZWQgYnkgdGhlIExpY2Vuc2VkIFBhdGVudHMuIFRoZSBwYXRlbnQgbGljZW5zZSBzaGFsbCBub3QgYXBwbHkgdG8KK2FueSBvdGhlciBjb21iaW5hdGlvbnMgd2hpY2ggaW5jbHVkZSB0aGUgQ29udHJpYnV0aW9uLiBObyBoYXJkd2FyZSBwZXIgc2UgaXMKK2xpY2Vuc2VkIGhlcmV1bmRlci4gPC9zcGFuPjwvcD4KKworPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YykKK1JlY2lwaWVudCB1bmRlcnN0YW5kcyB0aGF0IGFsdGhvdWdoIGVhY2ggQ29udHJpYnV0b3IgZ3JhbnRzIHRoZSBsaWNlbnNlcyB0byBpdHMKK0NvbnRyaWJ1dGlvbnMgc2V0IGZvcnRoIGhlcmVpbiwgbm8gYXNzdXJhbmNlcyBhcmUgcHJvdmlkZWQgYnkgYW55IENvbnRyaWJ1dG9yCit0aGF0IHRoZSBQcm9ncmFtIGRvZXMgbm90IGluZnJpbmdlIHRoZSBwYXRlbnQgb3Igb3RoZXIgaW50ZWxsZWN0dWFsIHByb3BlcnR5CityaWdodHMgb2YgYW55IG90aGVyIGVudGl0eS4gRWFjaCBDb250cmlidXRvciBkaXNjbGFpbXMgYW55IGxpYWJpbGl0eSB0byBSZWNpcGllbnQKK2ZvciBjbGFpbXMgYnJvdWdodCBieSBhbnkgb3RoZXIgZW50aXR5IGJhc2VkIG9uIGluZnJpbmdlbWVudCBvZiBpbnRlbGxlY3R1YWwKK3Byb3BlcnR5IHJpZ2h0cyBvciBvdGhlcndpc2UuIEFzIGEgY29uZGl0aW9uIHRvIGV4ZXJjaXNpbmcgdGhlIHJpZ2h0cyBhbmQKK2xpY2Vuc2VzIGdyYW50ZWQgaGVyZXVuZGVyLCBlYWNoIFJlY2lwaWVudCBoZXJlYnkgYXNzdW1lcyBzb2xlIHJlc3BvbnNpYmlsaXR5Cit0byBzZWN1cmUgYW55IG90aGVyIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgbmVlZGVkLCBpZiBhbnkuIEZvciBleGFtcGxlLAoraWYgYSB0aGlyZCBwYXJ0eSBwYXRlbnQgbGljZW5zZSBpcyByZXF1aXJlZCB0byBhbGxvdyBSZWNpcGllbnQgdG8gZGlzdHJpYnV0ZQordGhlIFByb2dyYW0sIGl0IGlzIFJlY2lwaWVudCdzIHJlc3BvbnNpYmlsaXR5IHRvIGFjcXVpcmUgdGhhdCBsaWNlbnNlIGJlZm9yZQorZGlzdHJpYnV0aW5nIHRoZSBQcm9ncmFtLjwvc3Bhbj48L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmQpCitFYWNoIENvbnRyaWJ1dG9yIHJlcHJlc2VudHMgdGhhdCB0byBpdHMga25vd2xlZGdlIGl0IGhhcyBzdWZmaWNpZW50IGNvcHlyaWdodAorcmlnaHRzIGluIGl0cyBDb250cmlidXRpb24sIGlmIGFueSwgdG8gZ3JhbnQgdGhlIGNvcHlyaWdodCBsaWNlbnNlIHNldCBmb3J0aCBpbgordGhpcyBBZ3JlZW1lbnQuIDwvc3Bhbj48L3A+CisKKzxwPjxiPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4zLiBSRVFVSVJFTUVOVFM8L3NwYW4+PC9iPiA8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5BIENvbnRyaWJ1dG9yIG1heSBjaG9vc2UgdG8gZGlzdHJpYnV0ZSB0aGUKK1Byb2dyYW0gaW4gb2JqZWN0IGNvZGUgZm9ybSB1bmRlciBpdHMgb3duIGxpY2Vuc2UgYWdyZWVtZW50LCBwcm92aWRlZCB0aGF0Ojwvc3Bhbj4KKzwvcD4KKworPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YSkKK2l0IGNvbXBsaWVzIHdpdGggdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoaXMgQWdyZWVtZW50OyBhbmQ8L3NwYW4+PC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5iKQoraXRzIGxpY2Vuc2UgYWdyZWVtZW50Ojwvc3Bhbj48L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmkpCitlZmZlY3RpdmVseSBkaXNjbGFpbXMgb24gYmVoYWxmIG9mIGFsbCBDb250cmlidXRvcnMgYWxsIHdhcnJhbnRpZXMgYW5kCitjb25kaXRpb25zLCBleHByZXNzIGFuZCBpbXBsaWVkLCBpbmNsdWRpbmcgd2FycmFudGllcyBvciBjb25kaXRpb25zIG9mIHRpdGxlCithbmQgbm9uLWluZnJpbmdlbWVudCwgYW5kIGltcGxpZWQgd2FycmFudGllcyBvciBjb25kaXRpb25zIG9mIG1lcmNoYW50YWJpbGl0eQorYW5kIGZpdG5lc3MgZm9yIGEgcGFydGljdWxhciBwdXJwb3NlOyA8L3NwYW4+PC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5paSkKK2VmZmVjdGl2ZWx5IGV4Y2x1ZGVzIG9uIGJlaGFsZiBvZiBhbGwgQ29udHJpYnV0b3JzIGFsbCBsaWFiaWxpdHkgZm9yIGRhbWFnZXMsCitpbmNsdWRpbmcgZGlyZWN0LCBpbmRpcmVjdCwgc3BlY2lhbCwgaW5jaWRlbnRhbCBhbmQgY29uc2VxdWVudGlhbCBkYW1hZ2VzLCBzdWNoCithcyBsb3N0IHByb2ZpdHM7IDwvc3Bhbj48L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmlpaSkKK3N0YXRlcyB0aGF0IGFueSBwcm92aXNpb25zIHdoaWNoIGRpZmZlciBmcm9tIHRoaXMgQWdyZWVtZW50IGFyZSBvZmZlcmVkIGJ5IHRoYXQKK0NvbnRyaWJ1dG9yIGFsb25lIGFuZCBub3QgYnkgYW55IG90aGVyIHBhcnR5OyBhbmQ8L3NwYW4+PC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5pdikKK3N0YXRlcyB0aGF0IHNvdXJjZSBjb2RlIGZvciB0aGUgUHJvZ3JhbSBpcyBhdmFpbGFibGUgZnJvbSBzdWNoIENvbnRyaWJ1dG9yLCBhbmQKK2luZm9ybXMgbGljZW5zZWVzIGhvdyB0byBvYnRhaW4gaXQgaW4gYSByZWFzb25hYmxlIG1hbm5lciBvbiBvciB0aHJvdWdoIGEKK21lZGl1bSBjdXN0b21hcmlseSB1c2VkIGZvciBzb2Z0d2FyZSBleGNoYW5nZS48c3BhbiBzdHlsZT0nY29sb3I6Ymx1ZSc+IDwvc3Bhbj48L3NwYW4+PC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+V2hlbiB0aGUgUHJvZ3JhbSBpcyBtYWRlIGF2YWlsYWJsZSBpbiBzb3VyY2UKK2NvZGUgZm9ybTo8L3NwYW4+IDwvcD4KKworPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YSkKK2l0IG11c3QgYmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhpcyBBZ3JlZW1lbnQ7IGFuZCA8L3NwYW4+PC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5iKSBhCitjb3B5IG9mIHRoaXMgQWdyZWVtZW50IG11c3QgYmUgaW5jbHVkZWQgd2l0aCBlYWNoIGNvcHkgb2YgdGhlIFByb2dyYW0uIDwvc3Bhbj48L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5Db250cmlidXRvcnMgbWF5IG5vdCByZW1vdmUgb3IgYWx0ZXIgYW55Citjb3B5cmlnaHQgbm90aWNlcyBjb250YWluZWQgd2l0aGluIHRoZSBQcm9ncmFtLiA8L3NwYW4+PC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+RWFjaCBDb250cmlidXRvciBtdXN0IGlkZW50aWZ5IGl0c2VsZiBhcyB0aGUKK29yaWdpbmF0b3Igb2YgaXRzIENvbnRyaWJ1dGlvbiwgaWYgYW55LCBpbiBhIG1hbm5lciB0aGF0IHJlYXNvbmFibHkgYWxsb3dzCitzdWJzZXF1ZW50IFJlY2lwaWVudHMgdG8gaWRlbnRpZnkgdGhlIG9yaWdpbmF0b3Igb2YgdGhlIENvbnRyaWJ1dGlvbi4gPC9zcGFuPjwvcD4KKworPHA+PGI+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPjQuIENPTU1FUkNJQUwgRElTVFJJQlVUSU9OPC9zcGFuPjwvYj4gPC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+Q29tbWVyY2lhbCBkaXN0cmlidXRvcnMgb2Ygc29mdHdhcmUgbWF5CithY2NlcHQgY2VydGFpbiByZXNwb25zaWJpbGl0aWVzIHdpdGggcmVzcGVjdCB0byBlbmQgdXNlcnMsIGJ1c2luZXNzIHBhcnRuZXJzCithbmQgdGhlIGxpa2UuIFdoaWxlIHRoaXMgbGljZW5zZSBpcyBpbnRlbmRlZCB0byBmYWNpbGl0YXRlIHRoZSBjb21tZXJjaWFsIHVzZQorb2YgdGhlIFByb2dyYW0sIHRoZSBDb250cmlidXRvciB3aG8gaW5jbHVkZXMgdGhlIFByb2dyYW0gaW4gYSBjb21tZXJjaWFsCitwcm9kdWN0IG9mZmVyaW5nIHNob3VsZCBkbyBzbyBpbiBhIG1hbm5lciB3aGljaCBkb2VzIG5vdCBjcmVhdGUgcG90ZW50aWFsCitsaWFiaWxpdHkgZm9yIG90aGVyIENvbnRyaWJ1dG9ycy4gVGhlcmVmb3JlLCBpZiBhIENvbnRyaWJ1dG9yIGluY2x1ZGVzIHRoZQorUHJvZ3JhbSBpbiBhIGNvbW1lcmNpYWwgcHJvZHVjdCBvZmZlcmluZywgc3VjaCBDb250cmlidXRvciAoJnF1b3Q7Q29tbWVyY2lhbAorQ29udHJpYnV0b3ImcXVvdDspIGhlcmVieSBhZ3JlZXMgdG8gZGVmZW5kIGFuZCBpbmRlbW5pZnkgZXZlcnkgb3RoZXIKK0NvbnRyaWJ1dG9yICgmcXVvdDtJbmRlbW5pZmllZCBDb250cmlidXRvciZxdW90OykgYWdhaW5zdCBhbnkgbG9zc2VzLCBkYW1hZ2VzIGFuZAorY29zdHMgKGNvbGxlY3RpdmVseSAmcXVvdDtMb3NzZXMmcXVvdDspIGFyaXNpbmcgZnJvbSBjbGFpbXMsIGxhd3N1aXRzIGFuZCBvdGhlcgorbGVnYWwgYWN0aW9ucyBicm91Z2h0IGJ5IGEgdGhpcmQgcGFydHkgYWdhaW5zdCB0aGUgSW5kZW1uaWZpZWQgQ29udHJpYnV0b3IgdG8KK3RoZSBleHRlbnQgY2F1c2VkIGJ5IHRoZSBhY3RzIG9yIG9taXNzaW9ucyBvZiBzdWNoIENvbW1lcmNpYWwgQ29udHJpYnV0b3IgaW4KK2Nvbm5lY3Rpb24gd2l0aCBpdHMgZGlzdHJpYnV0aW9uIG9mIHRoZSBQcm9ncmFtIGluIGEgY29tbWVyY2lhbCBwcm9kdWN0CitvZmZlcmluZy4gVGhlIG9ibGlnYXRpb25zIGluIHRoaXMgc2VjdGlvbiBkbyBub3QgYXBwbHkgdG8gYW55IGNsYWltcyBvciBMb3NzZXMKK3JlbGF0aW5nIHRvIGFueSBhY3R1YWwgb3IgYWxsZWdlZCBpbnRlbGxlY3R1YWwgcHJvcGVydHkgaW5mcmluZ2VtZW50LiBJbiBvcmRlcgordG8gcXVhbGlmeSwgYW4gSW5kZW1uaWZpZWQgQ29udHJpYnV0b3IgbXVzdDogYSkgcHJvbXB0bHkgbm90aWZ5IHRoZSBDb21tZXJjaWFsCitDb250cmlidXRvciBpbiB3cml0aW5nIG9mIHN1Y2ggY2xhaW0sIGFuZCBiKSBhbGxvdyB0aGUgQ29tbWVyY2lhbCBDb250cmlidXRvcgordG8gY29udHJvbCwgYW5kIGNvb3BlcmF0ZSB3aXRoIHRoZSBDb21tZXJjaWFsIENvbnRyaWJ1dG9yIGluLCB0aGUgZGVmZW5zZSBhbmQKK2FueSByZWxhdGVkIHNldHRsZW1lbnQgbmVnb3RpYXRpb25zLiBUaGUgSW5kZW1uaWZpZWQgQ29udHJpYnV0b3IgbWF5IHBhcnRpY2lwYXRlCitpbiBhbnkgc3VjaCBjbGFpbSBhdCBpdHMgb3duIGV4cGVuc2UuPC9zcGFuPiA8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5Gb3IgZXhhbXBsZSwgYSBDb250cmlidXRvciBtaWdodCBpbmNsdWRlIHRoZQorUHJvZ3JhbSBpbiBhIGNvbW1lcmNpYWwgcHJvZHVjdCBvZmZlcmluZywgUHJvZHVjdCBYLiBUaGF0IENvbnRyaWJ1dG9yIGlzIHRoZW4gYQorQ29tbWVyY2lhbCBDb250cmlidXRvci4gSWYgdGhhdCBDb21tZXJjaWFsIENvbnRyaWJ1dG9yIHRoZW4gbWFrZXMgcGVyZm9ybWFuY2UKK2NsYWltcywgb3Igb2ZmZXJzIHdhcnJhbnRpZXMgcmVsYXRlZCB0byBQcm9kdWN0IFgsIHRob3NlIHBlcmZvcm1hbmNlIGNsYWltcyBhbmQKK3dhcnJhbnRpZXMgYXJlIHN1Y2ggQ29tbWVyY2lhbCBDb250cmlidXRvcidzIHJlc3BvbnNpYmlsaXR5IGFsb25lLiBVbmRlciB0aGlzCitzZWN0aW9uLCB0aGUgQ29tbWVyY2lhbCBDb250cmlidXRvciB3b3VsZCBoYXZlIHRvIGRlZmVuZCBjbGFpbXMgYWdhaW5zdCB0aGUKK290aGVyIENvbnRyaWJ1dG9ycyByZWxhdGVkIHRvIHRob3NlIHBlcmZvcm1hbmNlIGNsYWltcyBhbmQgd2FycmFudGllcywgYW5kIGlmIGEKK2NvdXJ0IHJlcXVpcmVzIGFueSBvdGhlciBDb250cmlidXRvciB0byBwYXkgYW55IGRhbWFnZXMgYXMgYSByZXN1bHQsIHRoZQorQ29tbWVyY2lhbCBDb250cmlidXRvciBtdXN0IHBheSB0aG9zZSBkYW1hZ2VzLjwvc3Bhbj4gPC9wPgorCis8cD48Yj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+NS4gTk8gV0FSUkFOVFk8L3NwYW4+PC9iPiA8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5FWENFUFQgQVMgRVhQUkVTU0xZIFNFVCBGT1JUSCBJTiBUSElTCitBR1JFRU1FTlQsIFRIRSBQUk9HUkFNIElTIFBST1ZJREVEIE9OIEFOICZxdW90O0FTIElTJnF1b3Q7IEJBU0lTLCBXSVRIT1VUCitXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIEVJVEhFUiBFWFBSRVNTIE9SIElNUExJRUQgSU5DTFVESU5HLAorV0lUSE9VVCBMSU1JVEFUSU9OLCBBTlkgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIFRJVExFLCBOT04tSU5GUklOR0VNRU5ULAorTUVSQ0hBTlRBQklMSVRZIE9SIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBFYWNoIFJlY2lwaWVudCBpcyBzb2xlbHkKK3Jlc3BvbnNpYmxlIGZvciBkZXRlcm1pbmluZyB0aGUgYXBwcm9wcmlhdGVuZXNzIG9mIHVzaW5nIGFuZCBkaXN0cmlidXRpbmcgdGhlCitQcm9ncmFtIGFuZCBhc3N1bWVzIGFsbCByaXNrcyBhc3NvY2lhdGVkIHdpdGggaXRzIGV4ZXJjaXNlIG9mIHJpZ2h0cyB1bmRlciB0aGlzCitBZ3JlZW1lbnQgLCBpbmNsdWRpbmcgYnV0IG5vdCBsaW1pdGVkIHRvIHRoZSByaXNrcyBhbmQgY29zdHMgb2YgcHJvZ3JhbSBlcnJvcnMsCitjb21wbGlhbmNlIHdpdGggYXBwbGljYWJsZSBsYXdzLCBkYW1hZ2UgdG8gb3IgbG9zcyBvZiBkYXRhLCBwcm9ncmFtcyBvcgorZXF1aXBtZW50LCBhbmQgdW5hdmFpbGFiaWxpdHkgb3IgaW50ZXJydXB0aW9uIG9mIG9wZXJhdGlvbnMuIDwvc3Bhbj48L3A+CisKKzxwPjxiPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz42LiBESVNDTEFJTUVSIE9GIExJQUJJTElUWTwvc3Bhbj48L2I+IDwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkVYQ0VQVCBBUyBFWFBSRVNTTFkgU0VUIEZPUlRIIElOIFRISVMKK0FHUkVFTUVOVCwgTkVJVEhFUiBSRUNJUElFTlQgTk9SIEFOWSBDT05UUklCVVRPUlMgU0hBTEwgSEFWRSBBTlkgTElBQklMSVRZIEZPUgorQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisoSU5DTFVESU5HIFdJVEhPVVQgTElNSVRBVElPTiBMT1NUIFBST0ZJVFMpLCBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcKK05FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT1IgRElTVFJJQlVUSU9OIE9GCitUSEUgUFJPR1JBTSBPUiBUSEUgRVhFUkNJU0UgT0YgQU5ZIFJJR0hUUyBHUkFOVEVEIEhFUkVVTkRFUiwgRVZFTiBJRiBBRFZJU0VEIE9GCitUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLjwvc3Bhbj4gPC9wPgorCis8cD48Yj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+Ny4gR0VORVJBTDwvc3Bhbj48L2I+IDwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPklmIGFueSBwcm92aXNpb24gb2YgdGhpcyBBZ3JlZW1lbnQgaXMgaW52YWxpZAorb3IgdW5lbmZvcmNlYWJsZSB1bmRlciBhcHBsaWNhYmxlIGxhdywgaXQgc2hhbGwgbm90IGFmZmVjdCB0aGUgdmFsaWRpdHkgb3IKK2VuZm9yY2VhYmlsaXR5IG9mIHRoZSByZW1haW5kZXIgb2YgdGhlIHRlcm1zIG9mIHRoaXMgQWdyZWVtZW50LCBhbmQgd2l0aG91dAorZnVydGhlciBhY3Rpb24gYnkgdGhlIHBhcnRpZXMgaGVyZXRvLCBzdWNoIHByb3Zpc2lvbiBzaGFsbCBiZSByZWZvcm1lZCB0byB0aGUKK21pbmltdW0gZXh0ZW50IG5lY2Vzc2FyeSB0byBtYWtlIHN1Y2ggcHJvdmlzaW9uIHZhbGlkIGFuZCBlbmZvcmNlYWJsZS48L3NwYW4+IDwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPklmIFJlY2lwaWVudCBpbnN0aXR1dGVzIHBhdGVudCBsaXRpZ2F0aW9uCithZ2FpbnN0IGFueSBlbnRpdHkgKGluY2x1ZGluZyBhIGNyb3NzLWNsYWltIG9yIGNvdW50ZXJjbGFpbSBpbiBhIGxhd3N1aXQpCithbGxlZ2luZyB0aGF0IHRoZSBQcm9ncmFtIGl0c2VsZiAoZXhjbHVkaW5nIGNvbWJpbmF0aW9ucyBvZiB0aGUgUHJvZ3JhbSB3aXRoCitvdGhlciBzb2Z0d2FyZSBvciBoYXJkd2FyZSkgaW5mcmluZ2VzIHN1Y2ggUmVjaXBpZW50J3MgcGF0ZW50KHMpLCB0aGVuIHN1Y2gKK1JlY2lwaWVudCdzIHJpZ2h0cyBncmFudGVkIHVuZGVyIFNlY3Rpb24gMihiKSBzaGFsbCB0ZXJtaW5hdGUgYXMgb2YgdGhlIGRhdGUKK3N1Y2ggbGl0aWdhdGlvbiBpcyBmaWxlZC4gPC9zcGFuPjwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkFsbCBSZWNpcGllbnQncyByaWdodHMgdW5kZXIgdGhpcyBBZ3JlZW1lbnQKK3NoYWxsIHRlcm1pbmF0ZSBpZiBpdCBmYWlscyB0byBjb21wbHkgd2l0aCBhbnkgb2YgdGhlIG1hdGVyaWFsIHRlcm1zIG9yCitjb25kaXRpb25zIG9mIHRoaXMgQWdyZWVtZW50IGFuZCBkb2VzIG5vdCBjdXJlIHN1Y2ggZmFpbHVyZSBpbiBhIHJlYXNvbmFibGUKK3BlcmlvZCBvZiB0aW1lIGFmdGVyIGJlY29taW5nIGF3YXJlIG9mIHN1Y2ggbm9uY29tcGxpYW5jZS4gSWYgYWxsIFJlY2lwaWVudCdzCityaWdodHMgdW5kZXIgdGhpcyBBZ3JlZW1lbnQgdGVybWluYXRlLCBSZWNpcGllbnQgYWdyZWVzIHRvIGNlYXNlIHVzZSBhbmQKK2Rpc3RyaWJ1dGlvbiBvZiB0aGUgUHJvZ3JhbSBhcyBzb29uIGFzIHJlYXNvbmFibHkgcHJhY3RpY2FibGUuIEhvd2V2ZXIsCitSZWNpcGllbnQncyBvYmxpZ2F0aW9ucyB1bmRlciB0aGlzIEFncmVlbWVudCBhbmQgYW55IGxpY2Vuc2VzIGdyYW50ZWQgYnkKK1JlY2lwaWVudCByZWxhdGluZyB0byB0aGUgUHJvZ3JhbSBzaGFsbCBjb250aW51ZSBhbmQgc3Vydml2ZS4gPC9zcGFuPjwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkV2ZXJ5b25lIGlzIHBlcm1pdHRlZCB0byBjb3B5IGFuZCBkaXN0cmlidXRlCitjb3BpZXMgb2YgdGhpcyBBZ3JlZW1lbnQsIGJ1dCBpbiBvcmRlciB0byBhdm9pZCBpbmNvbnNpc3RlbmN5IHRoZSBBZ3JlZW1lbnQgaXMKK2NvcHlyaWdodGVkIGFuZCBtYXkgb25seSBiZSBtb2RpZmllZCBpbiB0aGUgZm9sbG93aW5nIG1hbm5lci4gVGhlIEFncmVlbWVudAorU3Rld2FyZCByZXNlcnZlcyB0aGUgcmlnaHQgdG8gcHVibGlzaCBuZXcgdmVyc2lvbnMgKGluY2x1ZGluZyByZXZpc2lvbnMpIG9mCit0aGlzIEFncmVlbWVudCBmcm9tIHRpbWUgdG8gdGltZS4gTm8gb25lIG90aGVyIHRoYW4gdGhlIEFncmVlbWVudCBTdGV3YXJkIGhhcwordGhlIHJpZ2h0IHRvIG1vZGlmeSB0aGlzIEFncmVlbWVudC4gVGhlIEVjbGlwc2UgRm91bmRhdGlvbiBpcyB0aGUgaW5pdGlhbAorQWdyZWVtZW50IFN0ZXdhcmQuIFRoZSBFY2xpcHNlIEZvdW5kYXRpb24gbWF5IGFzc2lnbiB0aGUgcmVzcG9uc2liaWxpdHkgdG8KK3NlcnZlIGFzIHRoZSBBZ3JlZW1lbnQgU3Rld2FyZCB0byBhIHN1aXRhYmxlIHNlcGFyYXRlIGVudGl0eS4gRWFjaCBuZXcgdmVyc2lvbgorb2YgdGhlIEFncmVlbWVudCB3aWxsIGJlIGdpdmVuIGEgZGlzdGluZ3Vpc2hpbmcgdmVyc2lvbiBudW1iZXIuIFRoZSBQcm9ncmFtCisoaW5jbHVkaW5nIENvbnRyaWJ1dGlvbnMpIG1heSBhbHdheXMgYmUgZGlzdHJpYnV0ZWQgc3ViamVjdCB0byB0aGUgdmVyc2lvbiBvZgordGhlIEFncmVlbWVudCB1bmRlciB3aGljaCBpdCB3YXMgcmVjZWl2ZWQuIEluIGFkZGl0aW9uLCBhZnRlciBhIG5ldyB2ZXJzaW9uIG9mCit0aGUgQWdyZWVtZW50IGlzIHB1Ymxpc2hlZCwgQ29udHJpYnV0b3IgbWF5IGVsZWN0IHRvIGRpc3RyaWJ1dGUgdGhlIFByb2dyYW0KKyhpbmNsdWRpbmcgaXRzIENvbnRyaWJ1dGlvbnMpIHVuZGVyIHRoZSBuZXcgdmVyc2lvbi4gRXhjZXB0IGFzIGV4cHJlc3NseSBzdGF0ZWQKK2luIFNlY3Rpb25zIDIoYSkgYW5kIDIoYikgYWJvdmUsIFJlY2lwaWVudCByZWNlaXZlcyBubyByaWdodHMgb3IgbGljZW5zZXMgdG8KK3RoZSBpbnRlbGxlY3R1YWwgcHJvcGVydHkgb2YgYW55IENvbnRyaWJ1dG9yIHVuZGVyIHRoaXMgQWdyZWVtZW50LCB3aGV0aGVyCitleHByZXNzbHksIGJ5IGltcGxpY2F0aW9uLCBlc3RvcHBlbCBvciBvdGhlcndpc2UuIEFsbCByaWdodHMgaW4gdGhlIFByb2dyYW0gbm90CitleHByZXNzbHkgZ3JhbnRlZCB1bmRlciB0aGlzIEFncmVlbWVudCBhcmUgcmVzZXJ2ZWQuPC9zcGFuPiA8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5UaGlzIEFncmVlbWVudCBpcyBnb3Zlcm5lZCBieSB0aGUgbGF3cyBvZiB0aGUKK1N0YXRlIG9mIE5ldyBZb3JrIGFuZCB0aGUgaW50ZWxsZWN0dWFsIHByb3BlcnR5IGxhd3Mgb2YgdGhlIFVuaXRlZCBTdGF0ZXMgb2YKK0FtZXJpY2EuIE5vIHBhcnR5IHRvIHRoaXMgQWdyZWVtZW50IHdpbGwgYnJpbmcgYSBsZWdhbCBhY3Rpb24gdW5kZXIgdGhpcworQWdyZWVtZW50IG1vcmUgdGhhbiBvbmUgeWVhciBhZnRlciB0aGUgY2F1c2Ugb2YgYWN0aW9uIGFyb3NlLiBFYWNoIHBhcnR5IHdhaXZlcworaXRzIHJpZ2h0cyB0byBhIGp1cnkgdHJpYWwgaW4gYW55IHJlc3VsdGluZyBsaXRpZ2F0aW9uLjwvc3Bhbj4gPC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWw+PCFbaWYgIXN1cHBvcnRFbXB0eVBhcmFzXT4mbmJzcDs8IVtlbmRpZl0+PG86cD48L286cD48L3A+CisKKzwvZGl2PgorCis8L2JvZHk+CisKKzwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5LmZlYXR1cmUvZmVhdHVyZS5wcm9wZXJ0aWVzIGIvZmVhdHVyZXMvb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS5mZWF0dXJlL2ZlYXR1cmUucHJvcGVydGllcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YTgxYTczCi0tLSAvZGV2L251bGwKKysrIGIvZmVhdHVyZXMvb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS5mZWF0dXJlL2ZlYXR1cmUucHJvcGVydGllcwpAQCAtMCwwICsxLDE3NCBAQAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBDb3B5cmlnaHQgKGMpIDIwMTEgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisjIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisjIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisjIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisjIAorIyBDb250cmlidXRvcnM6CisjICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgZmVhdHVyZS5wcm9wZXJ0aWVzCisjIGNvbnRhaW5zIGV4dGVybmFsaXplZCBzdHJpbmdzIGZvciBmZWF0dXJlLnhtbAorIyAiJWZvbyIgaW4gZmVhdHVyZS54bWwgY29ycmVzcG9uZHMgdG8gdGhlIGtleSAiZm9vIiBpbiB0aGlzIGZpbGUKKyMgamF2YS5pby5Qcm9wZXJ0aWVzIGZpbGUgKElTTyA4ODU5LTEgd2l0aCAiXCIgZXNjYXBlcykKKyMgVGhpcyBmaWxlIHNob3VsZCBiZSB0cmFuc2xhdGVkLgorCisjICJmZWF0dXJlTmFtZSIgcHJvcGVydHkgLSBuYW1lIG9mIHRoZSBmZWF0dXJlCitmZWF0dXJlTmFtZT1TVEVNIEdlb2dyYXBoaWNhbCBhbmQgR2VvcG9saXRpY2FsIERhdGEKKworIyAicHJvdmlkZXJOYW1lIiBwcm9wZXJ0eSAtIG5hbWUgb2YgdGhlIGNvbXBhbnkgdGhhdCBwcm92aWRlcyB0aGUgZmVhdHVyZQorcHJvdmlkZXJOYW1lPUVjbGlwc2Uub3JnCisKKyMgInVwZGF0ZVNpdGVOYW1lIiBwcm9wZXJ0eSAtIGxhYmVsIGZvciB0aGUgdXBkYXRlIHNpdGUKK3VwZGF0ZVNpdGVOYW1lPVNURU0gVXBkYXRlcworCisjICJzZWNvbmRhcnlTaXRlTmFtZSIgcHJvcGVydHkgLSBsYWJlbCBmb3IgdGhlIHNlY29uZGFyeSB1cGRhdGUgc2l0ZQorI3NlY29uZGFyeVVwZGF0ZVNpdGVOYW1lPVNURU0gVXBkYXRlcworCisjICJkZXNjcmlwdGlvbiIgcHJvcGVydHkgLSBkZXNjcmlwdGlvbiBvZiB0aGUgZmVhdHVyZQorZGVzY3JpcHRpb249QWN0dWFsIGdlb2dyYXBoaWNhbCBhbmQgZ2VvcG9saXRpY2FsIGRhdGEgZm9yIEVhcnRoLCBcCitpbmNsdWRpbmcgcG9saXRpY2FsIGJvdW5kYXJpZXMgYW5kIG5hbWVzIGZvciBjb3VudHJpZXMKKworIyAiY29weXJpZ2h0IiBwcm9wZXJ0eSAtIHRleHQgb2YgdGhlICJGZWF0dXJlIFVwZGF0ZSBDb3B5cmlnaHQiCitjb3B5cmlnaHQ9XAorQ29weXJpZ2h0IChjKSAyMDA3LTIwMTEgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuXG5cCitBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzXG5cCithcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjBcblwKK3doaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0XG5cCitodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbFxuXAorXG5cCitDb250cmlidXRvcnM6XG5cCisgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uXG4KKyMjIyMjIyMjIyMjIyMjIyMgZW5kIG9mIGNvcHlyaWdodCBwcm9wZXJ0eSAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworIyAibGljZW5zZVVSTCIgcHJvcGVydHkgLSBVUkwgb2YgdGhlICJGZWF0dXJlIExpY2Vuc2UiCisjIGRvIG5vdCB0cmFuc2xhdGUgdmFsdWUgLSBqdXN0IGNoYW5nZSB0byBwb2ludCB0byBhIGxvY2FsZS1zcGVjaWZpYyBIVE1MIHBhZ2UKK2xpY2Vuc2VVUkw9bGljZW5zZS5odG1sCisKKyMgImxpY2Vuc2UiIHByb3BlcnR5IC0gdGV4dCBvZiB0aGUgIkZlYXR1cmUgVXBkYXRlIExpY2Vuc2UiCisjIHNob3VsZCBiZSBwbGFpbiB0ZXh0IHZlcnNpb24gb2YgbGljZW5zZSBhZ3JlZW1lbnQgcG9pbnRlZCB0byBiZSAibGljZW5zZVVSTCIKK2xpY2Vuc2U9XAorRWNsaXBzZSBGb3VuZGF0aW9uIFNvZnR3YXJlIFVzZXIgQWdyZWVtZW50XG5cCitBcHJpbCAxNCwgMjAxMFxuXAorXG5cCitVc2FnZSBPZiBDb250ZW50XG5cCitcblwKK1RIRSBFQ0xJUFNFIEZPVU5EQVRJT04gTUFLRVMgQVZBSUxBQkxFIFNPRlRXQVJFLCBET0NVTUVOVEFUSU9OLCBJTkZPUk1BVElPTiBBTkQvT1JcblwKK09USEVSIE1BVEVSSUFMUyBGT1IgT1BFTiBTT1VSQ0UgUFJPSkVDVFMgKENPTExFQ1RJVkVMWSAiQ09OVEVOVCIpLlxuXAorVVNFIE9GIFRIRSBDT05URU5UIElTIEdPVkVSTkVEIEJZIFRIRSBURVJNUyBBTkQgQ09ORElUSU9OUyBPRiBUSElTXG5cCitBR1JFRU1FTlQgQU5EL09SIFRIRSBURVJNUyBBTkQgQ09ORElUSU9OUyBPRiBMSUNFTlNFIEFHUkVFTUVOVFMgT1JcblwKK05PVElDRVMgSU5ESUNBVEVEIE9SIFJFRkVSRU5DRUQgQkVMT1cuICBCWSBVU0lORyBUSEUgQ09OVEVOVCwgWU9VXG5cCitBR1JFRSBUSEFUIFlPVVIgVVNFIE9GIFRIRSBDT05URU5UIElTIEdPVkVSTkVEIEJZIFRISVMgQUdSRUVNRU5UXG5cCitBTkQvT1IgVEhFIFRFUk1TIEFORCBDT05ESVRJT05TIE9GIEFOWSBBUFBMSUNBQkxFIExJQ0VOU0UgQUdSRUVNRU5UU1xuXAorT1IgTk9USUNFUyBJTkRJQ0FURUQgT1IgUkVGRVJFTkNFRCBCRUxPVy4gIElGIFlPVSBETyBOT1QgQUdSRUUgVE8gVEhFXG5cCitURVJNUyBBTkQgQ09ORElUSU9OUyBPRiBUSElTIEFHUkVFTUVOVCBBTkQgVEhFIFRFUk1TIEFORCBDT05ESVRJT05TXG5cCitPRiBBTlkgQVBQTElDQUJMRSBMSUNFTlNFIEFHUkVFTUVOVFMgT1IgTk9USUNFUyBJTkRJQ0FURUQgT1IgUkVGRVJFTkNFRFxuXAorQkVMT1csIFRIRU4gWU9VIE1BWSBOT1QgVVNFIFRIRSBDT05URU5ULlxuXAorXG5cCitBcHBsaWNhYmxlIExpY2Vuc2VzXG5cCitcblwKK1VubGVzcyBvdGhlcndpc2UgaW5kaWNhdGVkLCBhbGwgQ29udGVudCBtYWRlIGF2YWlsYWJsZSBieSB0aGVcblwKK0VjbGlwc2UgRm91bmRhdGlvbiBpcyBwcm92aWRlZCB0byB5b3UgdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mXG5cCit0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMCAoIkVQTCIpLiBBIGNvcHkgb2YgdGhlIEVQTCBpc1xuXAorcHJvdmlkZWQgd2l0aCB0aGlzIENvbnRlbnQgYW5kIGlzIGFsc28gYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sLlxuXAorRm9yIHB1cnBvc2VzIG9mIHRoZSBFUEwsICJQcm9ncmFtIiB3aWxsIG1lYW4gdGhlIENvbnRlbnQuXG5cCitcblwKK0NvbnRlbnQgaW5jbHVkZXMsIGJ1dCBpcyBub3QgbGltaXRlZCB0bywgc291cmNlIGNvZGUsIG9iamVjdCBjb2RlLFxuXAorZG9jdW1lbnRhdGlvbiBhbmQgb3RoZXIgZmlsZXMgbWFpbnRhaW5lZCBpbiB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uIHNvdXJjZSBjb2RlXG5cCityZXBvc2l0b3J5ICgiUmVwb3NpdG9yeSIpIGluIHNvZnR3YXJlIG1vZHVsZXMgKCJNb2R1bGVzIikgYW5kIG1hZGUgYXZhaWxhYmxlXG5cCithcyBkb3dubG9hZGFibGUgYXJjaGl2ZXMgKCJEb3dubG9hZHMiKS5cblwKK1xuXAorICAgICAgIC0gQ29udGVudCBtYXkgYmUgc3RydWN0dXJlZCBhbmQgcGFja2FnZWQgaW50byBtb2R1bGVzIHRvIGZhY2lsaXRhdGUgZGVsaXZlcmluZyxcblwKKyAgICAgICAgIGV4dGVuZGluZywgYW5kIHVwZ3JhZGluZyB0aGUgQ29udGVudC4gVHlwaWNhbCBtb2R1bGVzIG1heSBpbmNsdWRlIHBsdWctaW5zICgiUGx1Zy1pbnMiKSxcblwKKyAgICAgICAgIHBsdWctaW4gZnJhZ21lbnRzICgiRnJhZ21lbnRzIiksIGFuZCBmZWF0dXJlcyAoIkZlYXR1cmVzIikuXG5cCisgICAgICAgLSBFYWNoIFBsdWctaW4gb3IgRnJhZ21lbnQgbWF5IGJlIHBhY2thZ2VkIGFzIGEgc3ViLWRpcmVjdG9yeSBvciBKQVIgKEphdmEoVE0pIEFSY2hpdmUpXG5cCisgICAgICAgICBpbiBhIGRpcmVjdG9yeSBuYW1lZCAicGx1Z2lucyIuXG5cCisgICAgICAgLSBBIEZlYXR1cmUgaXMgYSBidW5kbGUgb2Ygb25lIG9yIG1vcmUgUGx1Zy1pbnMgYW5kL29yIEZyYWdtZW50cyBhbmQgYXNzb2NpYXRlZCBtYXRlcmlhbC5cblwKKyAgICAgICAgIEVhY2ggRmVhdHVyZSBtYXkgYmUgcGFja2FnZWQgYXMgYSBzdWItZGlyZWN0b3J5IGluIGEgZGlyZWN0b3J5IG5hbWVkICJmZWF0dXJlcyIuXG5cCisgICAgICAgICBXaXRoaW4gYSBGZWF0dXJlLCBmaWxlcyBuYW1lZCAiZmVhdHVyZS54bWwiIG1heSBjb250YWluIGEgbGlzdCBvZiB0aGUgbmFtZXMgYW5kIHZlcnNpb25cblwKKyAgICAgICAgIG51bWJlcnMgb2YgdGhlIFBsdWctaW5zIGFuZC9vciBGcmFnbWVudHMgYXNzb2NpYXRlZCB3aXRoIHRoYXQgRmVhdHVyZS5cblwKKyAgICAgICAtIEZlYXR1cmVzIG1heSBhbHNvIGluY2x1ZGUgb3RoZXIgRmVhdHVyZXMgKCJJbmNsdWRlZCBGZWF0dXJlcyIpLiBXaXRoaW4gYSBGZWF0dXJlLCBmaWxlc1xuXAorICAgICAgICAgbmFtZWQgImZlYXR1cmUueG1sIiBtYXkgY29udGFpbiBhIGxpc3Qgb2YgdGhlIG5hbWVzIGFuZCB2ZXJzaW9uIG51bWJlcnMgb2YgSW5jbHVkZWQgRmVhdHVyZXMuXG5cCitcblwKK1RoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBnb3Zlcm5pbmcgUGx1Zy1pbnMgYW5kIEZyYWdtZW50cyBzaG91bGQgYmVcblwKK2NvbnRhaW5lZCBpbiBmaWxlcyBuYW1lZCAiYWJvdXQuaHRtbCIgKCJBYm91dHMiKS4gVGhlIHRlcm1zIGFuZFxuXAorY29uZGl0aW9ucyBnb3Zlcm5pbmcgRmVhdHVyZXMgYW5kIEluY2x1ZGVkIEZlYXR1cmVzIHNob3VsZCBiZSBjb250YWluZWRcblwKK2luIGZpbGVzIG5hbWVkICJsaWNlbnNlLmh0bWwiICgiRmVhdHVyZSBMaWNlbnNlcyIpLiBBYm91dHMgYW5kIEZlYXR1cmVcblwKK0xpY2Vuc2VzIG1heSBiZSBsb2NhdGVkIGluIGFueSBkaXJlY3Rvcnkgb2YgYSBEb3dubG9hZCBvciBNb2R1bGVcblwKK2luY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvIHRoZSBmb2xsb3dpbmcgbG9jYXRpb25zOlxuXAorXG5cCisgICAgICAgLSBUaGUgdG9wLWxldmVsIChyb290KSBkaXJlY3RvcnlcblwKKyAgICAgICAtIFBsdWctaW4gYW5kIEZyYWdtZW50IGRpcmVjdG9yaWVzXG5cCisgICAgICAgLSBJbnNpZGUgUGx1Zy1pbnMgYW5kIEZyYWdtZW50cyBwYWNrYWdlZCBhcyBKQVJzXG5cCisgICAgICAgLSBTdWItZGlyZWN0b3JpZXMgb2YgdGhlIGRpcmVjdG9yeSBuYW1lZCAic3JjIiBvZiBjZXJ0YWluIFBsdWctaW5zXG5cCisgICAgICAgLSBGZWF0dXJlIGRpcmVjdG9yaWVzXG5cCitcblwKK05vdGU6IGlmIGEgRmVhdHVyZSBtYWRlIGF2YWlsYWJsZSBieSB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uIGlzIGluc3RhbGxlZCB1c2luZyB0aGVcblwKK1Byb3Zpc2lvbmluZyBUZWNobm9sb2d5IChhcyBkZWZpbmVkIGJlbG93KSwgeW91IG11c3QgYWdyZWUgdG8gYSBsaWNlbnNlICgiRmVhdHVyZSBcblwKK1VwZGF0ZSBMaWNlbnNlIikgZHVyaW5nIHRoZSBpbnN0YWxsYXRpb24gcHJvY2Vzcy4gSWYgdGhlIEZlYXR1cmUgY29udGFpbnNcblwKK0luY2x1ZGVkIEZlYXR1cmVzLCB0aGUgRmVhdHVyZSBVcGRhdGUgTGljZW5zZSBzaG91bGQgZWl0aGVyIHByb3ZpZGUgeW91XG5cCit3aXRoIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBnb3Zlcm5pbmcgdGhlIEluY2x1ZGVkIEZlYXR1cmVzIG9yIGluZm9ybVxuXAoreW91IHdoZXJlIHlvdSBjYW4gbG9jYXRlIHRoZW0uIEZlYXR1cmUgVXBkYXRlIExpY2Vuc2VzIG1heSBiZSBmb3VuZCBpblxuXAordGhlICJsaWNlbnNlIiBwcm9wZXJ0eSBvZiBmaWxlcyBuYW1lZCAiZmVhdHVyZS5wcm9wZXJ0aWVzIiBmb3VuZCB3aXRoaW4gYSBGZWF0dXJlLlxuXAorU3VjaCBBYm91dHMsIEZlYXR1cmUgTGljZW5zZXMsIGFuZCBGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlcyBjb250YWluIHRoZVxuXAordGVybXMgYW5kIGNvbmRpdGlvbnMgKG9yIHJlZmVyZW5jZXMgdG8gc3VjaCB0ZXJtcyBhbmQgY29uZGl0aW9ucykgdGhhdFxuXAorZ292ZXJuIHlvdXIgdXNlIG9mIHRoZSBhc3NvY2lhdGVkIENvbnRlbnQgaW4gdGhhdCBkaXJlY3RvcnkuXG5cCitcblwKK1RIRSBBQk9VVFMsIEZFQVRVUkUgTElDRU5TRVMsIEFORCBGRUFUVVJFIFVQREFURSBMSUNFTlNFUyBNQVkgUkVGRVJcblwKK1RPIFRIRSBFUEwgT1IgT1RIRVIgTElDRU5TRSBBR1JFRU1FTlRTLCBOT1RJQ0VTIE9SIFRFUk1TIEFORCBDT05ESVRJT05TLlxuXAorU09NRSBPRiBUSEVTRSBPVEhFUiBMSUNFTlNFIEFHUkVFTUVOVFMgTUFZIElOQ0xVREUgKEJVVCBBUkUgTk9UIExJTUlURUQgVE8pOlxuXAorXG5cCisgICAgICAgLSBDb21tb24gUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjAgKGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2NwbC12MTAuaHRtbClcblwKKyAgICAgICAtIEFwYWNoZSBTb2Z0d2FyZSBMaWNlbnNlIDEuMSAoYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFKVxuXAorICAgICAgIC0gQXBhY2hlIFNvZnR3YXJlIExpY2Vuc2UgMi4wIChhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wKVxuXAorICAgICAgIC0gTWV0cm8gTGluayBQdWJsaWMgTGljZW5zZSAxLjAwIChhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5vcGVuZ3JvdXAub3JnL29wZW5tb3RpZi9zdXBwb3J0ZXJzL21ldHJvbGluay9saWNlbnNlLmh0bWwpXG5cCisgICAgICAgLSBNb3ppbGxhIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4xIChhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5tb3ppbGxhLm9yZy9NUEwvTVBMLTEuMS5odG1sKVxuXAorXG5cCitJVCBJUyBZT1VSIE9CTElHQVRJT04gVE8gUkVBRCBBTkQgQUNDRVBUIEFMTCBTVUNIIFRFUk1TIEFORCBDT05ESVRJT05TIFBSSU9SXG5cCitUTyBVU0UgT0YgVEhFIENPTlRFTlQuIElmIG5vIEFib3V0LCBGZWF0dXJlIExpY2Vuc2UsIG9yIEZlYXR1cmUgVXBkYXRlIExpY2Vuc2VcblwKK2lzIHByb3ZpZGVkLCBwbGVhc2UgY29udGFjdCB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uIHRvIGRldGVybWluZSB3aGF0IHRlcm1zIGFuZCBjb25kaXRpb25zXG5cCitnb3Zlcm4gdGhhdCBwYXJ0aWN1bGFyIENvbnRlbnQuXG5cCitcblwKK1xuXFVzZSBvZiBQcm92aXNpb25pbmcgVGVjaG5vbG9neVxuXAorXG5cCitUaGUgRWNsaXBzZSBGb3VuZGF0aW9uIG1ha2VzIGF2YWlsYWJsZSBwcm92aXNpb25pbmcgc29mdHdhcmUsIGV4YW1wbGVzIG9mIHdoaWNoIGluY2x1ZGUsXG5cCitidXQgYXJlIG5vdCBsaW1pdGVkIHRvLCBwMiBhbmQgdGhlIEVjbGlwc2UgVXBkYXRlIE1hbmFnZXIgKCJQcm92aXNpb25pbmcgVGVjaG5vbG9neSIpIGZvclxuXAordGhlIHB1cnBvc2Ugb2YgYWxsb3dpbmcgdXNlcnMgdG8gaW5zdGFsbCBzb2Z0d2FyZSwgZG9jdW1lbnRhdGlvbiwgaW5mb3JtYXRpb24gYW5kL29yXG5cCitvdGhlciBtYXRlcmlhbHMgKGNvbGxlY3RpdmVseSAiSW5zdGFsbGFibGUgU29mdHdhcmUiKS4gVGhpcyBjYXBhYmlsaXR5IGlzIHByb3ZpZGVkIHdpdGhcblwKK3RoZSBpbnRlbnQgb2YgYWxsb3dpbmcgc3VjaCB1c2VycyB0byBpbnN0YWxsLCBleHRlbmQgYW5kIHVwZGF0ZSBFY2xpcHNlLWJhc2VkIHByb2R1Y3RzLlxuXAorSW5mb3JtYXRpb24gYWJvdXQgcGFja2FnaW5nIEluc3RhbGxhYmxlIFNvZnR3YXJlIGlzIGF2YWlsYWJsZSBhdFxuXAoraHR0cDovL2VjbGlwc2Uub3JnL2VxdWlub3gvcDIvcmVwb3NpdG9yeV9wYWNrYWdpbmcuaHRtbCAoIlNwZWNpZmljYXRpb24iKS5cblwKK1xuXAorWW91IG1heSB1c2UgUHJvdmlzaW9uaW5nIFRlY2hub2xvZ3kgdG8gYWxsb3cgb3RoZXIgcGFydGllcyB0byBpbnN0YWxsIEluc3RhbGxhYmxlIFNvZnR3YXJlLlxuXAorWW91IHNoYWxsIGJlIHJlc3BvbnNpYmxlIGZvciBlbmFibGluZyB0aGUgYXBwbGljYWJsZSBsaWNlbnNlIGFncmVlbWVudHMgcmVsYXRpbmcgdG8gdGhlXG5cCitJbnN0YWxsYWJsZSBTb2Z0d2FyZSB0byBiZSBwcmVzZW50ZWQgdG8sIGFuZCBhY2NlcHRlZCBieSwgdGhlIHVzZXJzIG9mIHRoZSBQcm92aXNpb25pbmcgVGVjaG5vbG9neVxuXAoraW4gYWNjb3JkYW5jZSB3aXRoIHRoZSBTcGVjaWZpY2F0aW9uLiBCeSB1c2luZyBQcm92aXNpb25pbmcgVGVjaG5vbG9neSBpbiBzdWNoIGEgbWFubmVyIGFuZFxuXAorbWFraW5nIGl0IGF2YWlsYWJsZSBpbiBhY2NvcmRhbmNlIHdpdGggdGhlIFNwZWNpZmljYXRpb24sIHlvdSBmdXJ0aGVyIGFja25vd2xlZGdlIHlvdXJcblwKK2FncmVlbWVudCB0bywgYW5kIHRoZSBhY3F1aXNpdGlvbiBvZiBhbGwgbmVjZXNzYXJ5IHJpZ2h0cyB0byBwZXJtaXQgdGhlIGZvbGxvd2luZzpcblwKK1xuXAorICAgICAgIDEuIEEgc2VyaWVzIG9mIGFjdGlvbnMgbWF5IG9jY3VyICgiUHJvdmlzaW9uaW5nIFByb2Nlc3MiKSBpbiB3aGljaCBhIHVzZXIgbWF5IGV4ZWN1dGVcblwKKyAgICAgICAgICB0aGUgUHJvdmlzaW9uaW5nIFRlY2hub2xvZ3kgb24gYSBtYWNoaW5lICgiVGFyZ2V0IE1hY2hpbmUiKSB3aXRoIHRoZSBpbnRlbnQgb2YgaW5zdGFsbGluZyxcblwKKyAgICAgICAgICBleHRlbmRpbmcgb3IgdXBkYXRpbmcgdGhlIGZ1bmN0aW9uYWxpdHkgb2YgYW4gRWNsaXBzZS1iYXNlZCBwcm9kdWN0LlxuXAorICAgICAgIDIuIER1cmluZyB0aGUgUHJvdmlzaW9uaW5nIFByb2Nlc3MsIHRoZSBQcm92aXNpb25pbmcgVGVjaG5vbG9neSBtYXkgY2F1c2UgdGhpcmQgcGFydHlcblwKKyAgICAgICAgICBJbnN0YWxsYWJsZSBTb2Z0d2FyZSBvciBhIHBvcnRpb24gdGhlcmVvZiB0byBiZSBhY2Nlc3NlZCBhbmQgY29waWVkIHRvIHRoZSBUYXJnZXQgTWFjaGluZS5cblwKKyAgICAgICAzLiBQdXJzdWFudCB0byB0aGUgU3BlY2lmaWNhdGlvbiwgeW91IHdpbGwgcHJvdmlkZSB0byB0aGUgdXNlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgdGhhdFxuXAorICAgICAgICAgIGdvdmVybiB0aGUgdXNlIG9mIHRoZSBJbnN0YWxsYWJsZSBTb2Z0d2FyZSAoIkluc3RhbGxhYmxlIFNvZnR3YXJlIEFncmVlbWVudCIpIGFuZCBzdWNoXG5cCisgICAgICAgICAgSW5zdGFsbGFibGUgU29mdHdhcmUgQWdyZWVtZW50IHNoYWxsIGJlIGFjY2Vzc2VkIGZyb20gdGhlIFRhcmdldCBNYWNoaW5lIGluIGFjY29yZGFuY2VcblwKKyAgICAgICAgICB3aXRoIHRoZSBTcGVjaWZpY2F0aW9uLiBTdWNoIEluc3RhbGxhYmxlIFNvZnR3YXJlIEFncmVlbWVudCBtdXN0IGluZm9ybSB0aGUgdXNlciBvZiB0aGVcblwKKyAgICAgICAgICB0ZXJtcyBhbmQgY29uZGl0aW9ucyB0aGF0IGdvdmVybiB0aGUgSW5zdGFsbGFibGUgU29mdHdhcmUgYW5kIG11c3Qgc29saWNpdCBhY2NlcHRhbmNlIGJ5XG5cCisgICAgICAgICAgdGhlIGVuZCB1c2VyIGluIHRoZSBtYW5uZXIgcHJlc2NyaWJlZCBpbiBzdWNoIEluc3RhbGxhYmxlIFNvZnR3YXJlIEFncmVlbWVudC4gVXBvbiBzdWNoXG5cCisgICAgICAgICAgaW5kaWNhdGlvbiBvZiBhZ3JlZW1lbnQgYnkgdGhlIHVzZXIsIHRoZSBwcm92aXNpb25pbmcgVGVjaG5vbG9neSB3aWxsIGNvbXBsZXRlIGluc3RhbGxhdGlvblxuXAorICAgICAgICAgIG9mIHRoZSBJbnN0YWxsYWJsZSBTb2Z0d2FyZS5cblwKK1xuXAorQ3J5cHRvZ3JhcGh5XG5cCitcblwKK0NvbnRlbnQgbWF5IGNvbnRhaW4gZW5jcnlwdGlvbiBzb2Z0d2FyZS4gVGhlIGNvdW50cnkgaW4gd2hpY2ggeW91IGFyZVxuXAorY3VycmVudGx5IG1heSBoYXZlIHJlc3RyaWN0aW9ucyBvbiB0aGUgaW1wb3J0LCBwb3NzZXNzaW9uLCBhbmQgdXNlLFxuXAorYW5kL29yIHJlLWV4cG9ydCB0byBhbm90aGVyIGNvdW50cnksIG9mIGVuY3J5cHRpb24gc29mdHdhcmUuIEJFRk9SRVxuXAordXNpbmcgYW55IGVuY3J5cHRpb24gc29mdHdhcmUsIHBsZWFzZSBjaGVjayB0aGUgY291bnRyeSdzIGxhd3MsXG5cCityZWd1bGF0aW9ucyBhbmQgcG9saWNpZXMgY29uY2VybmluZyB0aGUgaW1wb3J0LCBwb3NzZXNzaW9uLCBvciB1c2UsIGFuZFxuXAorcmUtZXhwb3J0IG9mIGVuY3J5cHRpb24gc29mdHdhcmUsIHRvIHNlZSBpZiB0aGlzIGlzIHBlcm1pdHRlZC5cblwKK1xuXAorSmF2YSBhbmQgYWxsIEphdmEtYmFzZWQgdHJhZGVtYXJrcyBhcmUgdHJhZGVtYXJrcyBvZiBPcmFjbGUgQ29ycG9yYXRpb24gaW4gdGhlIFVuaXRlZCBTdGF0ZXMsIG90aGVyIGNvdW50cmllcywgb3IgYm90aC5cbgorIyMjIyMjIyMjIyMgZW5kIG9mIGxpY2Vuc2UgcHJvcGVydHkgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS5mZWF0dXJlL2ZlYXR1cmUueG1sIGIvZmVhdHVyZXMvb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS5mZWF0dXJlL2ZlYXR1cmUueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU0NGUzOGEKLS0tIC9kZXYvbnVsbAorKysgYi9mZWF0dXJlcy9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5LmZlYXR1cmUvZmVhdHVyZS54bWwKQEAgLTAsMCArMSw0MyBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxmZWF0dXJlCisgICAgICBpZD0ib3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS5mZWF0dXJlIgorICAgICAgbGFiZWw9IiVmZWF0dXJlTmFtZSIKKyAgICAgIHZlcnNpb249IjEuMi4xIgorICAgICAgcHJvdmlkZXItbmFtZT0iJXByb3ZpZGVyTmFtZSI+CisKKyAgIDxkZXNjcmlwdGlvbj4KKyAgICAgICVkZXNjcmlwdGlvbgorICAgPC9kZXNjcmlwdGlvbj4KKworICAgPGNvcHlyaWdodD4KKyAgICAgICVjb3B5cmlnaHQKKyAgIDwvY29weXJpZ2h0PgorCisgICA8bGljZW5zZSB1cmw9IiVsaWNlbnNlVVJMIj4KKyAgICAgICVsaWNlbnNlCisgICA8L2xpY2Vuc2U+CisKKyAgIDx1cmw+CisgICAgICA8dXBkYXRlIGxhYmVsPSIldXBkYXRlU2l0ZU5hbWUiIHVybD0iaHR0cDovL2Rvd25sb2FkLmVjbGlwc2Uub3JnL3N0ZW0vdXBkYXRlLXNpdGUvIi8+CisgICA8L3VybD4KKworICAgPHJlcXVpcmVzPgorICAgICAgPGltcG9ydCBwbHVnaW49Im9yZy5lY2xpcHNlLnN0ZW0uY29yZSIvPgorICAgICAgPGltcG9ydCBwbHVnaW49Im9yZy5lY2xpcHNlLmNvcmUucnVudGltZSIvPgorICAgPC9yZXF1aXJlcz4KKworICAgPHBsdWdpbgorICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkiCisgICAgICAgICBkb3dubG9hZC1zaXplPSIwIgorICAgICAgICAgaW5zdGFsbC1zaXplPSIwIgorICAgICAgICAgdmVyc2lvbj0iMC4wLjAiCisgICAgICAgICB1bnBhY2s9ImZhbHNlIi8+CisKKyAgIDxwbHVnaW4KKyAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5Lm1vZGVscyIKKyAgICAgICAgIGRvd25sb2FkLXNpemU9IjAiCisgICAgICAgICBpbnN0YWxsLXNpemU9IjAiCisgICAgICAgICB2ZXJzaW9uPSIwLjAuMCIKKyAgICAgICAgIHVucGFjaz0iZmFsc2UiLz4KKworPC9mZWF0dXJlPgpkaWZmIC0tZ2l0IGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS5mZWF0dXJlL2xpY2Vuc2UuaHRtbCBiL2ZlYXR1cmVzL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkuZmVhdHVyZS9saWNlbnNlLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzE4NGNhMwotLS0gL2Rldi9udWxsCisrKyBiL2ZlYXR1cmVzL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkuZmVhdHVyZS9saWNlbnNlLmh0bWwKQEAgLTAsMCArMSwxMDcgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IklTTy04ODU5LTEiID8+Cis8IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIFhIVE1MIDEuMCBTdHJpY3QvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwxL0RURC94aHRtbDEtc3RyaWN0LmR0ZCI+Cis8aHRtbCB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCI+Cis8aGVhZD4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTEiIC8+Cis8dGl0bGU+RWNsaXBzZSBGb3VuZGF0aW9uIFNvZnR3YXJlIFVzZXIgQWdyZWVtZW50PC90aXRsZT4KKzwvaGVhZD4KKworPGJvZHkgbGFuZz0iRU4tVVMiPgorPGgyPkVjbGlwc2UgRm91bmRhdGlvbiBTb2Z0d2FyZSBVc2VyIEFncmVlbWVudDwvaDI+Cis8cD5BcHJpbCAxNCwgMjAxMDwvcD4KKworPGgzPlVzYWdlIE9mIENvbnRlbnQ8L2gzPgorCis8cD5USEUgRUNMSVBTRSBGT1VOREFUSU9OIE1BS0VTIEFWQUlMQUJMRSBTT0ZUV0FSRSwgRE9DVU1FTlRBVElPTiwgSU5GT1JNQVRJT04gQU5EL09SIE9USEVSIE1BVEVSSUFMUyBGT1IgT1BFTiBTT1VSQ0UgUFJPSkVDVFMKKyAgIChDT0xMRUNUSVZFTFkgJnF1b3Q7Q09OVEVOVCZxdW90OykuICBVU0UgT0YgVEhFIENPTlRFTlQgSVMgR09WRVJORUQgQlkgVEhFIFRFUk1TIEFORCBDT05ESVRJT05TIE9GIFRISVMgQUdSRUVNRU5UIEFORC9PUiBUSEUgVEVSTVMgQU5ECisgICBDT05ESVRJT05TIE9GIExJQ0VOU0UgQUdSRUVNRU5UUyBPUiBOT1RJQ0VTIElORElDQVRFRCBPUiBSRUZFUkVOQ0VEIEJFTE9XLiAgQlkgVVNJTkcgVEhFIENPTlRFTlQsIFlPVSBBR1JFRSBUSEFUIFlPVVIgVVNFCisgICBPRiBUSEUgQ09OVEVOVCBJUyBHT1ZFUk5FRCBCWSBUSElTIEFHUkVFTUVOVCBBTkQvT1IgVEhFIFRFUk1TIEFORCBDT05ESVRJT05TIE9GIEFOWSBBUFBMSUNBQkxFIExJQ0VOU0UgQUdSRUVNRU5UUyBPUgorICAgTk9USUNFUyBJTkRJQ0FURUQgT1IgUkVGRVJFTkNFRCBCRUxPVy4gIElGIFlPVSBETyBOT1QgQUdSRUUgVE8gVEhFIFRFUk1TIEFORCBDT05ESVRJT05TIE9GIFRISVMgQUdSRUVNRU5UIEFORCBUSEUgVEVSTVMgQU5ECisgICBDT05ESVRJT05TIE9GIEFOWSBBUFBMSUNBQkxFIExJQ0VOU0UgQUdSRUVNRU5UUyBPUiBOT1RJQ0VTIElORElDQVRFRCBPUiBSRUZFUkVOQ0VEIEJFTE9XLCBUSEVOIFlPVSBNQVkgTk9UIFVTRSBUSEUgQ09OVEVOVC48L3A+CisKKzxoMz5BcHBsaWNhYmxlIExpY2Vuc2VzPC9oMz4KKworPHA+VW5sZXNzIG90aGVyd2lzZSBpbmRpY2F0ZWQsIGFsbCBDb250ZW50IG1hZGUgYXZhaWxhYmxlIGJ5IHRoZSBFY2xpcHNlIEZvdW5kYXRpb24gaXMgcHJvdmlkZWQgdG8geW91IHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMAorICAgKCZxdW90O0VQTCZxdW90OykuICBBIGNvcHkgb2YgdGhlIEVQTCBpcyBwcm92aWRlZCB3aXRoIHRoaXMgQ29udGVudCBhbmQgaXMgYWxzbyBhdmFpbGFibGUgYXQgPGEgaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwiPmh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sPC9hPi4KKyAgIEZvciBwdXJwb3NlcyBvZiB0aGUgRVBMLCAmcXVvdDtQcm9ncmFtJnF1b3Q7IHdpbGwgbWVhbiB0aGUgQ29udGVudC48L3A+CisKKzxwPkNvbnRlbnQgaW5jbHVkZXMsIGJ1dCBpcyBub3QgbGltaXRlZCB0bywgc291cmNlIGNvZGUsIG9iamVjdCBjb2RlLCBkb2N1bWVudGF0aW9uIGFuZCBvdGhlciBmaWxlcyBtYWludGFpbmVkIGluIHRoZSBFY2xpcHNlIEZvdW5kYXRpb24gc291cmNlIGNvZGUKKyAgIHJlcG9zaXRvcnkgKCZxdW90O1JlcG9zaXRvcnkmcXVvdDspIGluIHNvZnR3YXJlIG1vZHVsZXMgKCZxdW90O01vZHVsZXMmcXVvdDspIGFuZCBtYWRlIGF2YWlsYWJsZSBhcyBkb3dubG9hZGFibGUgYXJjaGl2ZXMgKCZxdW90O0Rvd25sb2FkcyZxdW90OykuPC9wPgorCis8dWw+CisgICAgICAgPGxpPkNvbnRlbnQgbWF5IGJlIHN0cnVjdHVyZWQgYW5kIHBhY2thZ2VkIGludG8gbW9kdWxlcyB0byBmYWNpbGl0YXRlIGRlbGl2ZXJpbmcsIGV4dGVuZGluZywgYW5kIHVwZ3JhZGluZyB0aGUgQ29udGVudC4gIFR5cGljYWwgbW9kdWxlcyBtYXkgaW5jbHVkZSBwbHVnLWlucyAoJnF1b3Q7UGx1Zy1pbnMmcXVvdDspLCBwbHVnLWluIGZyYWdtZW50cyAoJnF1b3Q7RnJhZ21lbnRzJnF1b3Q7KSwgYW5kIGZlYXR1cmVzICgmcXVvdDtGZWF0dXJlcyZxdW90OykuPC9saT4KKyAgICAgICA8bGk+RWFjaCBQbHVnLWluIG9yIEZyYWdtZW50IG1heSBiZSBwYWNrYWdlZCBhcyBhIHN1Yi1kaXJlY3Rvcnkgb3IgSkFSIChKYXZhJnRyYWRlOyBBUmNoaXZlKSBpbiBhIGRpcmVjdG9yeSBuYW1lZCAmcXVvdDtwbHVnaW5zJnF1b3Q7LjwvbGk+CisgICAgICAgPGxpPkEgRmVhdHVyZSBpcyBhIGJ1bmRsZSBvZiBvbmUgb3IgbW9yZSBQbHVnLWlucyBhbmQvb3IgRnJhZ21lbnRzIGFuZCBhc3NvY2lhdGVkIG1hdGVyaWFsLiAgRWFjaCBGZWF0dXJlIG1heSBiZSBwYWNrYWdlZCBhcyBhIHN1Yi1kaXJlY3RvcnkgaW4gYSBkaXJlY3RvcnkgbmFtZWQgJnF1b3Q7ZmVhdHVyZXMmcXVvdDsuICBXaXRoaW4gYSBGZWF0dXJlLCBmaWxlcyBuYW1lZCAmcXVvdDtmZWF0dXJlLnhtbCZxdW90OyBtYXkgY29udGFpbiBhIGxpc3Qgb2YgdGhlIG5hbWVzIGFuZCB2ZXJzaW9uIG51bWJlcnMgb2YgdGhlIFBsdWctaW5zCisgICAgICBhbmQvb3IgRnJhZ21lbnRzIGFzc29jaWF0ZWQgd2l0aCB0aGF0IEZlYXR1cmUuPC9saT4KKyAgICAgICA8bGk+RmVhdHVyZXMgbWF5IGFsc28gaW5jbHVkZSBvdGhlciBGZWF0dXJlcyAoJnF1b3Q7SW5jbHVkZWQgRmVhdHVyZXMmcXVvdDspLiBXaXRoaW4gYSBGZWF0dXJlLCBmaWxlcyBuYW1lZCAmcXVvdDtmZWF0dXJlLnhtbCZxdW90OyBtYXkgY29udGFpbiBhIGxpc3Qgb2YgdGhlIG5hbWVzIGFuZCB2ZXJzaW9uIG51bWJlcnMgb2YgSW5jbHVkZWQgRmVhdHVyZXMuPC9saT4KKzwvdWw+CisKKzxwPlRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBnb3Zlcm5pbmcgUGx1Zy1pbnMgYW5kIEZyYWdtZW50cyBzaG91bGQgYmUgY29udGFpbmVkIGluIGZpbGVzIG5hbWVkICZxdW90O2Fib3V0Lmh0bWwmcXVvdDsgKCZxdW90O0Fib3V0cyZxdW90OykuIFRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBnb3Zlcm5pbmcgRmVhdHVyZXMgYW5kCitJbmNsdWRlZCBGZWF0dXJlcyBzaG91bGQgYmUgY29udGFpbmVkIGluIGZpbGVzIG5hbWVkICZxdW90O2xpY2Vuc2UuaHRtbCZxdW90OyAoJnF1b3Q7RmVhdHVyZSBMaWNlbnNlcyZxdW90OykuICBBYm91dHMgYW5kIEZlYXR1cmUgTGljZW5zZXMgbWF5IGJlIGxvY2F0ZWQgaW4gYW55IGRpcmVjdG9yeSBvZiBhIERvd25sb2FkIG9yIE1vZHVsZQoraW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG8gdGhlIGZvbGxvd2luZyBsb2NhdGlvbnM6PC9wPgorCis8dWw+CisgICAgICAgPGxpPlRoZSB0b3AtbGV2ZWwgKHJvb3QpIGRpcmVjdG9yeTwvbGk+CisgICAgICAgPGxpPlBsdWctaW4gYW5kIEZyYWdtZW50IGRpcmVjdG9yaWVzPC9saT4KKyAgICAgICA8bGk+SW5zaWRlIFBsdWctaW5zIGFuZCBGcmFnbWVudHMgcGFja2FnZWQgYXMgSkFSczwvbGk+CisgICAgICAgPGxpPlN1Yi1kaXJlY3RvcmllcyBvZiB0aGUgZGlyZWN0b3J5IG5hbWVkICZxdW90O3NyYyZxdW90OyBvZiBjZXJ0YWluIFBsdWctaW5zPC9saT4KKyAgICAgICA8bGk+RmVhdHVyZSBkaXJlY3RvcmllczwvbGk+Cis8L3VsPgorCis8cD5Ob3RlOiBpZiBhIEZlYXR1cmUgbWFkZSBhdmFpbGFibGUgYnkgdGhlIEVjbGlwc2UgRm91bmRhdGlvbiBpcyBpbnN0YWxsZWQgdXNpbmcgdGhlIFByb3Zpc2lvbmluZyBUZWNobm9sb2d5IChhcyBkZWZpbmVkIGJlbG93KSwgeW91IG11c3QgYWdyZWUgdG8gYSBsaWNlbnNlICgmcXVvdDtGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlJnF1b3Q7KSBkdXJpbmcgdGhlCitpbnN0YWxsYXRpb24gcHJvY2Vzcy4gIElmIHRoZSBGZWF0dXJlIGNvbnRhaW5zIEluY2x1ZGVkIEZlYXR1cmVzLCB0aGUgRmVhdHVyZSBVcGRhdGUgTGljZW5zZSBzaG91bGQgZWl0aGVyIHByb3ZpZGUgeW91IHdpdGggdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIGdvdmVybmluZyB0aGUgSW5jbHVkZWQgRmVhdHVyZXMgb3IKK2luZm9ybSB5b3Ugd2hlcmUgeW91IGNhbiBsb2NhdGUgdGhlbS4gIEZlYXR1cmUgVXBkYXRlIExpY2Vuc2VzIG1heSBiZSBmb3VuZCBpbiB0aGUgJnF1b3Q7bGljZW5zZSZxdW90OyBwcm9wZXJ0eSBvZiBmaWxlcyBuYW1lZCAmcXVvdDtmZWF0dXJlLnByb3BlcnRpZXMmcXVvdDsgZm91bmQgd2l0aGluIGEgRmVhdHVyZS4KK1N1Y2ggQWJvdXRzLCBGZWF0dXJlIExpY2Vuc2VzLCBhbmQgRmVhdHVyZSBVcGRhdGUgTGljZW5zZXMgY29udGFpbiB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgKG9yIHJlZmVyZW5jZXMgdG8gc3VjaCB0ZXJtcyBhbmQgY29uZGl0aW9ucykgdGhhdCBnb3Zlcm4geW91ciB1c2Ugb2YgdGhlIGFzc29jaWF0ZWQgQ29udGVudCBpbgordGhhdCBkaXJlY3RvcnkuPC9wPgorCis8cD5USEUgQUJPVVRTLCBGRUFUVVJFIExJQ0VOU0VTLCBBTkQgRkVBVFVSRSBVUERBVEUgTElDRU5TRVMgTUFZIFJFRkVSIFRPIFRIRSBFUEwgT1IgT1RIRVIgTElDRU5TRSBBR1JFRU1FTlRTLCBOT1RJQ0VTIE9SIFRFUk1TIEFORCBDT05ESVRJT05TLiAgU09NRSBPRiBUSEVTRQorT1RIRVIgTElDRU5TRSBBR1JFRU1FTlRTIE1BWSBJTkNMVURFIChCVVQgQVJFIE5PVCBMSU1JVEVEIFRPKTo8L3A+CisKKzx1bD4KKyAgICAgICA8bGk+Q29tbW9uIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4wIChhdmFpbGFibGUgYXQgPGEgaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9jcGwtdjEwLmh0bWwiPmh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvY3BsLXYxMC5odG1sPC9hPik8L2xpPgorICAgICAgIDxsaT5BcGFjaGUgU29mdHdhcmUgTGljZW5zZSAxLjEgKGF2YWlsYWJsZSBhdCA8YSBocmVmPSJodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRSI+aHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0U8L2E+KTwvbGk+CisgICAgICAgPGxpPkFwYWNoZSBTb2Z0d2FyZSBMaWNlbnNlIDIuMCAoYXZhaWxhYmxlIGF0IDxhIGhyZWY9Imh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMCI+aHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wPC9hPik8L2xpPgorICAgICAgIDxsaT5NZXRybyBMaW5rIFB1YmxpYyBMaWNlbnNlIDEuMDAgKGF2YWlsYWJsZSBhdCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW5ncm91cC5vcmcvb3Blbm1vdGlmL3N1cHBvcnRlcnMvbWV0cm9saW5rL2xpY2Vuc2UuaHRtbCI+aHR0cDovL3d3dy5vcGVuZ3JvdXAub3JnL29wZW5tb3RpZi9zdXBwb3J0ZXJzL21ldHJvbGluay9saWNlbnNlLmh0bWw8L2E+KTwvbGk+CisgICAgICAgPGxpPk1vemlsbGEgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjEgKGF2YWlsYWJsZSBhdCA8YSBocmVmPSJodHRwOi8vd3d3Lm1vemlsbGEub3JnL01QTC9NUEwtMS4xLmh0bWwiPmh0dHA6Ly93d3cubW96aWxsYS5vcmcvTVBML01QTC0xLjEuaHRtbDwvYT4pPC9saT4KKzwvdWw+CisKKzxwPklUIElTIFlPVVIgT0JMSUdBVElPTiBUTyBSRUFEIEFORCBBQ0NFUFQgQUxMIFNVQ0ggVEVSTVMgQU5EIENPTkRJVElPTlMgUFJJT1IgVE8gVVNFIE9GIFRIRSBDT05URU5ULiAgSWYgbm8gQWJvdXQsIEZlYXR1cmUgTGljZW5zZSwgb3IgRmVhdHVyZSBVcGRhdGUgTGljZW5zZSBpcyBwcm92aWRlZCwgcGxlYXNlCitjb250YWN0IHRoZSBFY2xpcHNlIEZvdW5kYXRpb24gdG8gZGV0ZXJtaW5lIHdoYXQgdGVybXMgYW5kIGNvbmRpdGlvbnMgZ292ZXJuIHRoYXQgcGFydGljdWxhciBDb250ZW50LjwvcD4KKworCis8aDM+VXNlIG9mIFByb3Zpc2lvbmluZyBUZWNobm9sb2d5PC9oMz4KKworPHA+VGhlIEVjbGlwc2UgRm91bmRhdGlvbiBtYWtlcyBhdmFpbGFibGUgcHJvdmlzaW9uaW5nIHNvZnR3YXJlLCBleGFtcGxlcyBvZiB3aGljaCBpbmNsdWRlLCBidXQgYXJlIG5vdCBsaW1pdGVkIHRvLCBwMiBhbmQgdGhlIEVjbGlwc2UKKyAgIFVwZGF0ZSBNYW5hZ2VyICgmcXVvdDtQcm92aXNpb25pbmcgVGVjaG5vbG9neSZxdW90OykgZm9yIHRoZSBwdXJwb3NlIG9mIGFsbG93aW5nIHVzZXJzIHRvIGluc3RhbGwgc29mdHdhcmUsIGRvY3VtZW50YXRpb24sIGluZm9ybWF0aW9uIGFuZC9vcgorICAgb3RoZXIgbWF0ZXJpYWxzIChjb2xsZWN0aXZlbHkgJnF1b3Q7SW5zdGFsbGFibGUgU29mdHdhcmUmcXVvdDspLiBUaGlzIGNhcGFiaWxpdHkgaXMgcHJvdmlkZWQgd2l0aCB0aGUgaW50ZW50IG9mIGFsbG93aW5nIHN1Y2ggdXNlcnMgdG8KKyAgIGluc3RhbGwsIGV4dGVuZCBhbmQgdXBkYXRlIEVjbGlwc2UtYmFzZWQgcHJvZHVjdHMuIEluZm9ybWF0aW9uIGFib3V0IHBhY2thZ2luZyBJbnN0YWxsYWJsZSBTb2Z0d2FyZSBpcyBhdmFpbGFibGUgYXQgPGEKKyAgICAgICBocmVmPSJodHRwOi8vZWNsaXBzZS5vcmcvZXF1aW5veC9wMi9yZXBvc2l0b3J5X3BhY2thZ2luZy5odG1sIj5odHRwOi8vZWNsaXBzZS5vcmcvZXF1aW5veC9wMi9yZXBvc2l0b3J5X3BhY2thZ2luZy5odG1sPC9hPgorICAgKCZxdW90O1NwZWNpZmljYXRpb24mcXVvdDspLjwvcD4KKworPHA+WW91IG1heSB1c2UgUHJvdmlzaW9uaW5nIFRlY2hub2xvZ3kgdG8gYWxsb3cgb3RoZXIgcGFydGllcyB0byBpbnN0YWxsIEluc3RhbGxhYmxlIFNvZnR3YXJlLiBZb3Ugc2hhbGwgYmUgcmVzcG9uc2libGUgZm9yIGVuYWJsaW5nIHRoZQorICAgYXBwbGljYWJsZSBsaWNlbnNlIGFncmVlbWVudHMgcmVsYXRpbmcgdG8gdGhlIEluc3RhbGxhYmxlIFNvZnR3YXJlIHRvIGJlIHByZXNlbnRlZCB0bywgYW5kIGFjY2VwdGVkIGJ5LCB0aGUgdXNlcnMgb2YgdGhlIFByb3Zpc2lvbmluZyBUZWNobm9sb2d5CisgICBpbiBhY2NvcmRhbmNlIHdpdGggdGhlIFNwZWNpZmljYXRpb24uIEJ5IHVzaW5nIFByb3Zpc2lvbmluZyBUZWNobm9sb2d5IGluIHN1Y2ggYSBtYW5uZXIgYW5kIG1ha2luZyBpdCBhdmFpbGFibGUgaW4gYWNjb3JkYW5jZSB3aXRoIHRoZQorICAgU3BlY2lmaWNhdGlvbiwgeW91IGZ1cnRoZXIgYWNrbm93bGVkZ2UgeW91ciBhZ3JlZW1lbnQgdG8sIGFuZCB0aGUgYWNxdWlzaXRpb24gb2YgYWxsIG5lY2Vzc2FyeSByaWdodHMgdG8gcGVybWl0IHRoZSBmb2xsb3dpbmc6PC9wPgorCis8b2w+CisgICAgICAgPGxpPkEgc2VyaWVzIG9mIGFjdGlvbnMgbWF5IG9jY3VyICgmcXVvdDtQcm92aXNpb25pbmcgUHJvY2VzcyZxdW90OykgaW4gd2hpY2ggYSB1c2VyIG1heSBleGVjdXRlIHRoZSBQcm92aXNpb25pbmcgVGVjaG5vbG9neQorICAgICAgIG9uIGEgbWFjaGluZSAoJnF1b3Q7VGFyZ2V0IE1hY2hpbmUmcXVvdDspIHdpdGggdGhlIGludGVudCBvZiBpbnN0YWxsaW5nLCBleHRlbmRpbmcgb3IgdXBkYXRpbmcgdGhlIGZ1bmN0aW9uYWxpdHkgb2YgYW4gRWNsaXBzZS1iYXNlZAorICAgICAgIHByb2R1Y3QuPC9saT4KKyAgICAgICA8bGk+RHVyaW5nIHRoZSBQcm92aXNpb25pbmcgUHJvY2VzcywgdGhlIFByb3Zpc2lvbmluZyBUZWNobm9sb2d5IG1heSBjYXVzZSB0aGlyZCBwYXJ0eSBJbnN0YWxsYWJsZSBTb2Z0d2FyZSBvciBhIHBvcnRpb24gdGhlcmVvZiB0byBiZQorICAgICAgIGFjY2Vzc2VkIGFuZCBjb3BpZWQgdG8gdGhlIFRhcmdldCBNYWNoaW5lLjwvbGk+CisgICAgICAgPGxpPlB1cnN1YW50IHRvIHRoZSBTcGVjaWZpY2F0aW9uLCB5b3Ugd2lsbCBwcm92aWRlIHRvIHRoZSB1c2VyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyB0aGF0IGdvdmVybiB0aGUgdXNlIG9mIHRoZSBJbnN0YWxsYWJsZQorICAgICAgIFNvZnR3YXJlICgmcXVvdDtJbnN0YWxsYWJsZSBTb2Z0d2FyZSBBZ3JlZW1lbnQmcXVvdDspIGFuZCBzdWNoIEluc3RhbGxhYmxlIFNvZnR3YXJlIEFncmVlbWVudCBzaGFsbCBiZSBhY2Nlc3NlZCBmcm9tIHRoZSBUYXJnZXQKKyAgICAgICBNYWNoaW5lIGluIGFjY29yZGFuY2Ugd2l0aCB0aGUgU3BlY2lmaWNhdGlvbi4gU3VjaCBJbnN0YWxsYWJsZSBTb2Z0d2FyZSBBZ3JlZW1lbnQgbXVzdCBpbmZvcm0gdGhlIHVzZXIgb2YgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIHRoYXQgZ292ZXJuCisgICAgICAgdGhlIEluc3RhbGxhYmxlIFNvZnR3YXJlIGFuZCBtdXN0IHNvbGljaXQgYWNjZXB0YW5jZSBieSB0aGUgZW5kIHVzZXIgaW4gdGhlIG1hbm5lciBwcmVzY3JpYmVkIGluIHN1Y2ggSW5zdGFsbGFibGUgU29mdHdhcmUgQWdyZWVtZW50LiBVcG9uIHN1Y2gKKyAgICAgICBpbmRpY2F0aW9uIG9mIGFncmVlbWVudCBieSB0aGUgdXNlciwgdGhlIHByb3Zpc2lvbmluZyBUZWNobm9sb2d5IHdpbGwgY29tcGxldGUgaW5zdGFsbGF0aW9uIG9mIHRoZSBJbnN0YWxsYWJsZSBTb2Z0d2FyZS48L2xpPgorPC9vbD4KKworPGgzPkNyeXB0b2dyYXBoeTwvaDM+CisKKzxwPkNvbnRlbnQgbWF5IGNvbnRhaW4gZW5jcnlwdGlvbiBzb2Z0d2FyZS4gVGhlIGNvdW50cnkgaW4gd2hpY2ggeW91IGFyZSBjdXJyZW50bHkgbWF5IGhhdmUgcmVzdHJpY3Rpb25zIG9uIHRoZSBpbXBvcnQsIHBvc3Nlc3Npb24sIGFuZCB1c2UsIGFuZC9vciByZS1leHBvcnQgdG8KKyAgIGFub3RoZXIgY291bnRyeSwgb2YgZW5jcnlwdGlvbiBzb2Z0d2FyZS4gQkVGT1JFIHVzaW5nIGFueSBlbmNyeXB0aW9uIHNvZnR3YXJlLCBwbGVhc2UgY2hlY2sgdGhlIGNvdW50cnkncyBsYXdzLCByZWd1bGF0aW9ucyBhbmQgcG9saWNpZXMgY29uY2VybmluZyB0aGUgaW1wb3J0LAorICAgcG9zc2Vzc2lvbiwgb3IgdXNlLCBhbmQgcmUtZXhwb3J0IG9mIGVuY3J5cHRpb24gc29mdHdhcmUsIHRvIHNlZSBpZiB0aGlzIGlzIHBlcm1pdHRlZC48L3A+CisKKzxwPjxzbWFsbD5KYXZhIGFuZCBhbGwgSmF2YS1iYXNlZCB0cmFkZW1hcmtzIGFyZSB0cmFkZW1hcmtzIG9mIE9yYWNsZSBDb3Jwb3JhdGlvbiBpbiB0aGUgVW5pdGVkIFN0YXRlcywgb3RoZXIgY291bnRyaWVzLCBvciBib3RoLjwvc21hbGw+PC9wPgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLnBvcHVsYXRpb24uaHVtYW4uZmVhdHVyZS8ucHJvamVjdCBiL2ZlYXR1cmVzL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5wb3B1bGF0aW9uLmh1bWFuLmZlYXR1cmUvLnByb2plY3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmIwNjZjMgotLS0gL2Rldi9udWxsCisrKyBiL2ZlYXR1cmVzL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5wb3B1bGF0aW9uLmh1bWFuLmZlYXR1cmUvLnByb2plY3QKQEAgLTAsMCArMSwxNyBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxwcm9qZWN0RGVzY3JpcHRpb24+CisJPG5hbWU+b3JnLmVjbGlwc2Uuc3RlbS5kYXRhLnBvcHVsYXRpb24uaHVtYW4uZmVhdHVyZTwvbmFtZT4KKwk8Y29tbWVudD48L2NvbW1lbnQ+CisJPHByb2plY3RzPgorCTwvcHJvamVjdHM+CisJPGJ1aWxkU3BlYz4KKwkJPGJ1aWxkQ29tbWFuZD4KKwkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5GZWF0dXJlQnVpbGRlcjwvbmFtZT4KKwkJCTxhcmd1bWVudHM+CisJCQk8L2FyZ3VtZW50cz4KKwkJPC9idWlsZENvbW1hbmQ+CisJPC9idWlsZFNwZWM+CisJPG5hdHVyZXM+CisJCTxuYXR1cmU+b3JnLmVjbGlwc2UucGRlLkZlYXR1cmVOYXR1cmU8L25hdHVyZT4KKwk8L25hdHVyZXM+Cis8L3Byb2plY3REZXNjcmlwdGlvbj4KZGlmZiAtLWdpdCBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5wb3B1bGF0aW9uLmh1bWFuLmZlYXR1cmUvYnVpbGQucHJvcGVydGllcyBiL2ZlYXR1cmVzL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5wb3B1bGF0aW9uLmh1bWFuLmZlYXR1cmUvYnVpbGQucHJvcGVydGllcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNzRhZjg2Ci0tLSAvZGV2L251bGwKKysrIGIvZmVhdHVyZXMvb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLnBvcHVsYXRpb24uaHVtYW4uZmVhdHVyZS9idWlsZC5wcm9wZXJ0aWVzCkBAIC0wLDAgKzEsNCBAQAorYmluLmluY2x1ZGVzID0gZmVhdHVyZS54bWwsXAorICAgICAgICAgICAgICAgZmVhdHVyZS5wcm9wZXJ0aWVzLFwKKyAgICAgICAgICAgICAgIGVwbC12MTAuaHRtbCxcCisgICAgICAgICAgICAgICBsaWNlbnNlLmh0bWwKZGlmZiAtLWdpdCBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5wb3B1bGF0aW9uLmh1bWFuLmZlYXR1cmUvZXBsLXYxMC5odG1sIGIvZmVhdHVyZXMvb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLnBvcHVsYXRpb24uaHVtYW4uZmVhdHVyZS9lcGwtdjEwLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWQ0YjE5NgotLS0gL2Rldi9udWxsCisrKyBiL2ZlYXR1cmVzL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5wb3B1bGF0aW9uLmh1bWFuLmZlYXR1cmUvZXBsLXYxMC5odG1sCkBAIC0wLDAgKzEsMzI4IEBACis8aHRtbCB4bWxuczpvPSJ1cm46c2NoZW1hcy1taWNyb3NvZnQtY29tOm9mZmljZTpvZmZpY2UiCit4bWxuczp3PSJ1cm46c2NoZW1hcy1taWNyb3NvZnQtY29tOm9mZmljZTp3b3JkIgoreG1sbnM9Imh0dHA6Ly93d3cudzMub3JnL1RSL1JFQy1odG1sNDAiPgorCis8aGVhZD4KKzxtZXRhIGh0dHAtZXF1aXY9Q29udGVudC1UeXBlIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD13aW5kb3dzLTEyNTIiPgorPG1ldGEgbmFtZT1Qcm9nSWQgY29udGVudD1Xb3JkLkRvY3VtZW50PgorPG1ldGEgbmFtZT1HZW5lcmF0b3IgY29udGVudD0iTWljcm9zb2Z0IFdvcmQgOSI+Cis8bWV0YSBuYW1lPU9yaWdpbmF0b3IgY29udGVudD0iTWljcm9zb2Z0IFdvcmQgOSI+Cis8bGluayByZWw9RmlsZS1MaXN0CitocmVmPSIuL0VjbGlwc2UlMjBFUEwlMjAyMDAzXzExXzEwJTIwRmluYWxfZmlsZXMvZmlsZWxpc3QueG1sIj4KKzx0aXRsZT5FY2xpcHNlIFB1YmxpYyBMaWNlbnNlIC0gVmVyc2lvbiAxLjA8L3RpdGxlPgorPCEtLVtpZiBndGUgbXNvIDldPjx4bWw+CisgPG86RG9jdW1lbnRQcm9wZXJ0aWVzPgorICA8bzpSZXZpc2lvbj4yPC9vOlJldmlzaW9uPgorICA8bzpUb3RhbFRpbWU+MzwvbzpUb3RhbFRpbWU+CisgIDxvOkNyZWF0ZWQ+MjAwNC0wMy0wNVQyMzowMzowMFo8L286Q3JlYXRlZD4KKyAgPG86TGFzdFNhdmVkPjIwMDQtMDMtMDVUMjM6MDM6MDBaPC9vOkxhc3RTYXZlZD4KKyAgPG86UGFnZXM+NDwvbzpQYWdlcz4KKyAgPG86V29yZHM+MTYyNjwvbzpXb3Jkcz4KKyAgPG86Q2hhcmFjdGVycz45MjcwPC9vOkNoYXJhY3RlcnM+CisgICA8bzpMaW5lcz43NzwvbzpMaW5lcz4KKyAgPG86UGFyYWdyYXBocz4xODwvbzpQYXJhZ3JhcGhzPgorICA8bzpDaGFyYWN0ZXJzV2l0aFNwYWNlcz4xMTM4NDwvbzpDaGFyYWN0ZXJzV2l0aFNwYWNlcz4KKyAgPG86VmVyc2lvbj45LjQ0MDI8L286VmVyc2lvbj4KKyA8L286RG9jdW1lbnRQcm9wZXJ0aWVzPgorPC94bWw+PCFbZW5kaWZdLS0+PCEtLVtpZiBndGUgbXNvIDldPjx4bWw+CisgPHc6V29yZERvY3VtZW50PgorICA8dzpUcmFja1JldmlzaW9ucy8+CisgPC93OldvcmREb2N1bWVudD4KKzwveG1sPjwhW2VuZGlmXS0tPgorPHN0eWxlPgorPCEtLQorIC8qIEZvbnQgRGVmaW5pdGlvbnMgKi8KK0Bmb250LWZhY2UKKwl7Zm9udC1mYW1pbHk6VGFob21hOworCXBhbm9zZS0xOjIgMTEgNiA0IDMgNSA0IDQgMiA0OworCW1zby1mb250LWNoYXJzZXQ6MDsKKwltc28tZ2VuZXJpYy1mb250LWZhbWlseTpzd2lzczsKKwltc28tZm9udC1waXRjaDp2YXJpYWJsZTsKKwltc28tZm9udC1zaWduYXR1cmU6NTUzNjc5NDk1IC0yMTQ3NDgzNjQ4IDggMCA2NjA0NyAwO30KKyAvKiBTdHlsZSBEZWZpbml0aW9ucyAqLworcC5Nc29Ob3JtYWwsIGxpLk1zb05vcm1hbCwgZGl2Lk1zb05vcm1hbAorCXttc28tc3R5bGUtcGFyZW50OiIiOworCW1hcmdpbjowaW47CisJbWFyZ2luLWJvdHRvbTouMDAwMXB0OworCW1zby1wYWdpbmF0aW9uOndpZG93LW9ycGhhbjsKKwlmb250LXNpemU6MTIuMHB0OworCWZvbnQtZmFtaWx5OiJUaW1lcyBOZXcgUm9tYW4iOworCW1zby1mYXJlYXN0LWZvbnQtZmFtaWx5OiJUaW1lcyBOZXcgUm9tYW4iO30KK3AKKwl7bWFyZ2luLXJpZ2h0OjBpbjsKKwltc28tbWFyZ2luLXRvcC1hbHQ6YXV0bzsKKwltc28tbWFyZ2luLWJvdHRvbS1hbHQ6YXV0bzsKKwltYXJnaW4tbGVmdDowaW47CisJbXNvLXBhZ2luYXRpb246d2lkb3ctb3JwaGFuOworCWZvbnQtc2l6ZToxMi4wcHQ7CisJZm9udC1mYW1pbHk6IlRpbWVzIE5ldyBSb21hbiI7CisJbXNvLWZhcmVhc3QtZm9udC1mYW1pbHk6IlRpbWVzIE5ldyBSb21hbiI7fQorcC5CYWxsb29uVGV4dCwgbGkuQmFsbG9vblRleHQsIGRpdi5CYWxsb29uVGV4dAorCXttc28tc3R5bGUtbmFtZToiQmFsbG9vbiBUZXh0IjsKKwltYXJnaW46MGluOworCW1hcmdpbi1ib3R0b206LjAwMDFwdDsKKwltc28tcGFnaW5hdGlvbjp3aWRvdy1vcnBoYW47CisJZm9udC1zaXplOjguMHB0OworCWZvbnQtZmFtaWx5OlRhaG9tYTsKKwltc28tZmFyZWFzdC1mb250LWZhbWlseToiVGltZXMgTmV3IFJvbWFuIjt9CitAcGFnZSBTZWN0aW9uMQorCXtzaXplOjguNWluIDExLjBpbjsKKwltYXJnaW46MS4waW4gMS4yNWluIDEuMGluIDEuMjVpbjsKKwltc28taGVhZGVyLW1hcmdpbjouNWluOworCW1zby1mb290ZXItbWFyZ2luOi41aW47CisJbXNvLXBhcGVyLXNvdXJjZTowO30KK2Rpdi5TZWN0aW9uMQorCXtwYWdlOlNlY3Rpb24xO30KKy0tPgorPC9zdHlsZT4KKzwvaGVhZD4KKworPGJvZHkgbGFuZz1FTi1VUyBzdHlsZT0ndGFiLWludGVydmFsOi41aW4nPgorCis8ZGl2IGNsYXNzPVNlY3Rpb24xPgorCis8cCBhbGlnbj1jZW50ZXIgc3R5bGU9J3RleHQtYWxpZ246Y2VudGVyJz48Yj5FY2xpcHNlIFB1YmxpYyBMaWNlbnNlIC0gdiAxLjA8L2I+Cis8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5USEUgQUNDT01QQU5ZSU5HIFBST0dSQU0gSVMgUFJPVklERUQgVU5ERVIKK1RIRSBURVJNUyBPRiBUSElTIEVDTElQU0UgUFVCTElDIExJQ0VOU0UgKCZxdW90O0FHUkVFTUVOVCZxdW90OykuIEFOWSBVU0UsCitSRVBST0RVQ1RJT04gT1IgRElTVFJJQlVUSU9OIE9GIFRIRSBQUk9HUkFNIENPTlNUSVRVVEVTIFJFQ0lQSUVOVCdTIEFDQ0VQVEFOQ0UKK09GIFRISVMgQUdSRUVNRU5ULjwvc3Bhbj4gPC9wPgorCis8cD48Yj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+MS4gREVGSU5JVElPTlM8L3NwYW4+PC9iPiA8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4mcXVvdDtDb250cmlidXRpb24mcXVvdDsgbWVhbnM6PC9zcGFuPiA8L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmEpCitpbiB0aGUgY2FzZSBvZiB0aGUgaW5pdGlhbCBDb250cmlidXRvciwgdGhlIGluaXRpYWwgY29kZSBhbmQgZG9jdW1lbnRhdGlvbgorZGlzdHJpYnV0ZWQgdW5kZXIgdGhpcyBBZ3JlZW1lbnQsIGFuZDxiciBjbGVhcj1sZWZ0PgorYikgaW4gdGhlIGNhc2Ugb2YgZWFjaCBzdWJzZXF1ZW50IENvbnRyaWJ1dG9yOjwvc3Bhbj48L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmkpCitjaGFuZ2VzIHRvIHRoZSBQcm9ncmFtLCBhbmQ8L3NwYW4+PC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5paSkKK2FkZGl0aW9ucyB0byB0aGUgUHJvZ3JhbTs8L3NwYW4+PC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz53aGVyZQorc3VjaCBjaGFuZ2VzIGFuZC9vciBhZGRpdGlvbnMgdG8gdGhlIFByb2dyYW0gb3JpZ2luYXRlIGZyb20gYW5kIGFyZSBkaXN0cmlidXRlZAorYnkgdGhhdCBwYXJ0aWN1bGFyIENvbnRyaWJ1dG9yLiBBIENvbnRyaWJ1dGlvbiAnb3JpZ2luYXRlcycgZnJvbSBhIENvbnRyaWJ1dG9yCitpZiBpdCB3YXMgYWRkZWQgdG8gdGhlIFByb2dyYW0gYnkgc3VjaCBDb250cmlidXRvciBpdHNlbGYgb3IgYW55b25lIGFjdGluZyBvbgorc3VjaCBDb250cmlidXRvcidzIGJlaGFsZi4gQ29udHJpYnV0aW9ucyBkbyBub3QgaW5jbHVkZSBhZGRpdGlvbnMgdG8gdGhlCitQcm9ncmFtIHdoaWNoOiAoaSkgYXJlIHNlcGFyYXRlIG1vZHVsZXMgb2Ygc29mdHdhcmUgZGlzdHJpYnV0ZWQgaW4gY29uanVuY3Rpb24KK3dpdGggdGhlIFByb2dyYW0gdW5kZXIgdGhlaXIgb3duIGxpY2Vuc2UgYWdyZWVtZW50LCBhbmQgKGlpKSBhcmUgbm90IGRlcml2YXRpdmUKK3dvcmtzIG9mIHRoZSBQcm9ncmFtLiA8L3NwYW4+PC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+JnF1b3Q7Q29udHJpYnV0b3ImcXVvdDsgbWVhbnMgYW55IHBlcnNvbiBvcgorZW50aXR5IHRoYXQgZGlzdHJpYnV0ZXMgdGhlIFByb2dyYW0uPC9zcGFuPiA8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4mcXVvdDtMaWNlbnNlZCBQYXRlbnRzICZxdW90OyBtZWFuIHBhdGVudAorY2xhaW1zIGxpY2Vuc2FibGUgYnkgYSBDb250cmlidXRvciB3aGljaCBhcmUgbmVjZXNzYXJpbHkgaW5mcmluZ2VkIGJ5IHRoZSB1c2UKK29yIHNhbGUgb2YgaXRzIENvbnRyaWJ1dGlvbiBhbG9uZSBvciB3aGVuIGNvbWJpbmVkIHdpdGggdGhlIFByb2dyYW0uIDwvc3Bhbj48L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4mcXVvdDtQcm9ncmFtJnF1b3Q7IG1lYW5zIHRoZSBDb250cmlidXRpb25zCitkaXN0cmlidXRlZCBpbiBhY2NvcmRhbmNlIHdpdGggdGhpcyBBZ3JlZW1lbnQuPC9zcGFuPiA8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4mcXVvdDtSZWNpcGllbnQmcXVvdDsgbWVhbnMgYW55b25lIHdobworcmVjZWl2ZXMgdGhlIFByb2dyYW0gdW5kZXIgdGhpcyBBZ3JlZW1lbnQsIGluY2x1ZGluZyBhbGwgQ29udHJpYnV0b3JzLjwvc3Bhbj4gPC9wPgorCis8cD48Yj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+Mi4gR1JBTlQgT0YgUklHSFRTPC9zcGFuPjwvYj4gPC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5hKQorU3ViamVjdCB0byB0aGUgdGVybXMgb2YgdGhpcyBBZ3JlZW1lbnQsIGVhY2ggQ29udHJpYnV0b3IgaGVyZWJ5IGdyYW50cyBSZWNpcGllbnQKK2Egbm9uLWV4Y2x1c2l2ZSwgd29ybGR3aWRlLCByb3lhbHR5LWZyZWUgY29weXJpZ2h0IGxpY2Vuc2UgdG88c3Bhbgorc3R5bGU9J2NvbG9yOnJlZCc+IDwvc3Bhbj5yZXByb2R1Y2UsIHByZXBhcmUgZGVyaXZhdGl2ZSB3b3JrcyBvZiwgcHVibGljbHkKK2Rpc3BsYXksIHB1YmxpY2x5IHBlcmZvcm0sIGRpc3RyaWJ1dGUgYW5kIHN1YmxpY2Vuc2UgdGhlIENvbnRyaWJ1dGlvbiBvZiBzdWNoCitDb250cmlidXRvciwgaWYgYW55LCBhbmQgc3VjaCBkZXJpdmF0aXZlIHdvcmtzLCBpbiBzb3VyY2UgY29kZSBhbmQgb2JqZWN0IGNvZGUKK2Zvcm0uPC9zcGFuPjwvcD4KKworPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YikKK1N1YmplY3QgdG8gdGhlIHRlcm1zIG9mIHRoaXMgQWdyZWVtZW50LCBlYWNoIENvbnRyaWJ1dG9yIGhlcmVieSBncmFudHMKK1JlY2lwaWVudCBhIG5vbi1leGNsdXNpdmUsIHdvcmxkd2lkZSw8c3BhbiBzdHlsZT0nY29sb3I6Z3JlZW4nPiA8L3NwYW4+cm95YWx0eS1mcmVlCitwYXRlbnQgbGljZW5zZSB1bmRlciBMaWNlbnNlZCBQYXRlbnRzIHRvIG1ha2UsIHVzZSwgc2VsbCwgb2ZmZXIgdG8gc2VsbCwgaW1wb3J0CithbmQgb3RoZXJ3aXNlIHRyYW5zZmVyIHRoZSBDb250cmlidXRpb24gb2Ygc3VjaCBDb250cmlidXRvciwgaWYgYW55LCBpbiBzb3VyY2UKK2NvZGUgYW5kIG9iamVjdCBjb2RlIGZvcm0uIFRoaXMgcGF0ZW50IGxpY2Vuc2Ugc2hhbGwgYXBwbHkgdG8gdGhlIGNvbWJpbmF0aW9uCitvZiB0aGUgQ29udHJpYnV0aW9uIGFuZCB0aGUgUHJvZ3JhbSBpZiwgYXQgdGhlIHRpbWUgdGhlIENvbnRyaWJ1dGlvbiBpcyBhZGRlZAorYnkgdGhlIENvbnRyaWJ1dG9yLCBzdWNoIGFkZGl0aW9uIG9mIHRoZSBDb250cmlidXRpb24gY2F1c2VzIHN1Y2ggY29tYmluYXRpb24KK3RvIGJlIGNvdmVyZWQgYnkgdGhlIExpY2Vuc2VkIFBhdGVudHMuIFRoZSBwYXRlbnQgbGljZW5zZSBzaGFsbCBub3QgYXBwbHkgdG8KK2FueSBvdGhlciBjb21iaW5hdGlvbnMgd2hpY2ggaW5jbHVkZSB0aGUgQ29udHJpYnV0aW9uLiBObyBoYXJkd2FyZSBwZXIgc2UgaXMKK2xpY2Vuc2VkIGhlcmV1bmRlci4gPC9zcGFuPjwvcD4KKworPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YykKK1JlY2lwaWVudCB1bmRlcnN0YW5kcyB0aGF0IGFsdGhvdWdoIGVhY2ggQ29udHJpYnV0b3IgZ3JhbnRzIHRoZSBsaWNlbnNlcyB0byBpdHMKK0NvbnRyaWJ1dGlvbnMgc2V0IGZvcnRoIGhlcmVpbiwgbm8gYXNzdXJhbmNlcyBhcmUgcHJvdmlkZWQgYnkgYW55IENvbnRyaWJ1dG9yCit0aGF0IHRoZSBQcm9ncmFtIGRvZXMgbm90IGluZnJpbmdlIHRoZSBwYXRlbnQgb3Igb3RoZXIgaW50ZWxsZWN0dWFsIHByb3BlcnR5CityaWdodHMgb2YgYW55IG90aGVyIGVudGl0eS4gRWFjaCBDb250cmlidXRvciBkaXNjbGFpbXMgYW55IGxpYWJpbGl0eSB0byBSZWNpcGllbnQKK2ZvciBjbGFpbXMgYnJvdWdodCBieSBhbnkgb3RoZXIgZW50aXR5IGJhc2VkIG9uIGluZnJpbmdlbWVudCBvZiBpbnRlbGxlY3R1YWwKK3Byb3BlcnR5IHJpZ2h0cyBvciBvdGhlcndpc2UuIEFzIGEgY29uZGl0aW9uIHRvIGV4ZXJjaXNpbmcgdGhlIHJpZ2h0cyBhbmQKK2xpY2Vuc2VzIGdyYW50ZWQgaGVyZXVuZGVyLCBlYWNoIFJlY2lwaWVudCBoZXJlYnkgYXNzdW1lcyBzb2xlIHJlc3BvbnNpYmlsaXR5Cit0byBzZWN1cmUgYW55IG90aGVyIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgbmVlZGVkLCBpZiBhbnkuIEZvciBleGFtcGxlLAoraWYgYSB0aGlyZCBwYXJ0eSBwYXRlbnQgbGljZW5zZSBpcyByZXF1aXJlZCB0byBhbGxvdyBSZWNpcGllbnQgdG8gZGlzdHJpYnV0ZQordGhlIFByb2dyYW0sIGl0IGlzIFJlY2lwaWVudCdzIHJlc3BvbnNpYmlsaXR5IHRvIGFjcXVpcmUgdGhhdCBsaWNlbnNlIGJlZm9yZQorZGlzdHJpYnV0aW5nIHRoZSBQcm9ncmFtLjwvc3Bhbj48L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmQpCitFYWNoIENvbnRyaWJ1dG9yIHJlcHJlc2VudHMgdGhhdCB0byBpdHMga25vd2xlZGdlIGl0IGhhcyBzdWZmaWNpZW50IGNvcHlyaWdodAorcmlnaHRzIGluIGl0cyBDb250cmlidXRpb24sIGlmIGFueSwgdG8gZ3JhbnQgdGhlIGNvcHlyaWdodCBsaWNlbnNlIHNldCBmb3J0aCBpbgordGhpcyBBZ3JlZW1lbnQuIDwvc3Bhbj48L3A+CisKKzxwPjxiPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4zLiBSRVFVSVJFTUVOVFM8L3NwYW4+PC9iPiA8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5BIENvbnRyaWJ1dG9yIG1heSBjaG9vc2UgdG8gZGlzdHJpYnV0ZSB0aGUKK1Byb2dyYW0gaW4gb2JqZWN0IGNvZGUgZm9ybSB1bmRlciBpdHMgb3duIGxpY2Vuc2UgYWdyZWVtZW50LCBwcm92aWRlZCB0aGF0Ojwvc3Bhbj4KKzwvcD4KKworPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YSkKK2l0IGNvbXBsaWVzIHdpdGggdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoaXMgQWdyZWVtZW50OyBhbmQ8L3NwYW4+PC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5iKQoraXRzIGxpY2Vuc2UgYWdyZWVtZW50Ojwvc3Bhbj48L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmkpCitlZmZlY3RpdmVseSBkaXNjbGFpbXMgb24gYmVoYWxmIG9mIGFsbCBDb250cmlidXRvcnMgYWxsIHdhcnJhbnRpZXMgYW5kCitjb25kaXRpb25zLCBleHByZXNzIGFuZCBpbXBsaWVkLCBpbmNsdWRpbmcgd2FycmFudGllcyBvciBjb25kaXRpb25zIG9mIHRpdGxlCithbmQgbm9uLWluZnJpbmdlbWVudCwgYW5kIGltcGxpZWQgd2FycmFudGllcyBvciBjb25kaXRpb25zIG9mIG1lcmNoYW50YWJpbGl0eQorYW5kIGZpdG5lc3MgZm9yIGEgcGFydGljdWxhciBwdXJwb3NlOyA8L3NwYW4+PC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5paSkKK2VmZmVjdGl2ZWx5IGV4Y2x1ZGVzIG9uIGJlaGFsZiBvZiBhbGwgQ29udHJpYnV0b3JzIGFsbCBsaWFiaWxpdHkgZm9yIGRhbWFnZXMsCitpbmNsdWRpbmcgZGlyZWN0LCBpbmRpcmVjdCwgc3BlY2lhbCwgaW5jaWRlbnRhbCBhbmQgY29uc2VxdWVudGlhbCBkYW1hZ2VzLCBzdWNoCithcyBsb3N0IHByb2ZpdHM7IDwvc3Bhbj48L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmlpaSkKK3N0YXRlcyB0aGF0IGFueSBwcm92aXNpb25zIHdoaWNoIGRpZmZlciBmcm9tIHRoaXMgQWdyZWVtZW50IGFyZSBvZmZlcmVkIGJ5IHRoYXQKK0NvbnRyaWJ1dG9yIGFsb25lIGFuZCBub3QgYnkgYW55IG90aGVyIHBhcnR5OyBhbmQ8L3NwYW4+PC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5pdikKK3N0YXRlcyB0aGF0IHNvdXJjZSBjb2RlIGZvciB0aGUgUHJvZ3JhbSBpcyBhdmFpbGFibGUgZnJvbSBzdWNoIENvbnRyaWJ1dG9yLCBhbmQKK2luZm9ybXMgbGljZW5zZWVzIGhvdyB0byBvYnRhaW4gaXQgaW4gYSByZWFzb25hYmxlIG1hbm5lciBvbiBvciB0aHJvdWdoIGEKK21lZGl1bSBjdXN0b21hcmlseSB1c2VkIGZvciBzb2Z0d2FyZSBleGNoYW5nZS48c3BhbiBzdHlsZT0nY29sb3I6Ymx1ZSc+IDwvc3Bhbj48L3NwYW4+PC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+V2hlbiB0aGUgUHJvZ3JhbSBpcyBtYWRlIGF2YWlsYWJsZSBpbiBzb3VyY2UKK2NvZGUgZm9ybTo8L3NwYW4+IDwvcD4KKworPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YSkKK2l0IG11c3QgYmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhpcyBBZ3JlZW1lbnQ7IGFuZCA8L3NwYW4+PC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5iKSBhCitjb3B5IG9mIHRoaXMgQWdyZWVtZW50IG11c3QgYmUgaW5jbHVkZWQgd2l0aCBlYWNoIGNvcHkgb2YgdGhlIFByb2dyYW0uIDwvc3Bhbj48L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5Db250cmlidXRvcnMgbWF5IG5vdCByZW1vdmUgb3IgYWx0ZXIgYW55Citjb3B5cmlnaHQgbm90aWNlcyBjb250YWluZWQgd2l0aGluIHRoZSBQcm9ncmFtLiA8L3NwYW4+PC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+RWFjaCBDb250cmlidXRvciBtdXN0IGlkZW50aWZ5IGl0c2VsZiBhcyB0aGUKK29yaWdpbmF0b3Igb2YgaXRzIENvbnRyaWJ1dGlvbiwgaWYgYW55LCBpbiBhIG1hbm5lciB0aGF0IHJlYXNvbmFibHkgYWxsb3dzCitzdWJzZXF1ZW50IFJlY2lwaWVudHMgdG8gaWRlbnRpZnkgdGhlIG9yaWdpbmF0b3Igb2YgdGhlIENvbnRyaWJ1dGlvbi4gPC9zcGFuPjwvcD4KKworPHA+PGI+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPjQuIENPTU1FUkNJQUwgRElTVFJJQlVUSU9OPC9zcGFuPjwvYj4gPC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+Q29tbWVyY2lhbCBkaXN0cmlidXRvcnMgb2Ygc29mdHdhcmUgbWF5CithY2NlcHQgY2VydGFpbiByZXNwb25zaWJpbGl0aWVzIHdpdGggcmVzcGVjdCB0byBlbmQgdXNlcnMsIGJ1c2luZXNzIHBhcnRuZXJzCithbmQgdGhlIGxpa2UuIFdoaWxlIHRoaXMgbGljZW5zZSBpcyBpbnRlbmRlZCB0byBmYWNpbGl0YXRlIHRoZSBjb21tZXJjaWFsIHVzZQorb2YgdGhlIFByb2dyYW0sIHRoZSBDb250cmlidXRvciB3aG8gaW5jbHVkZXMgdGhlIFByb2dyYW0gaW4gYSBjb21tZXJjaWFsCitwcm9kdWN0IG9mZmVyaW5nIHNob3VsZCBkbyBzbyBpbiBhIG1hbm5lciB3aGljaCBkb2VzIG5vdCBjcmVhdGUgcG90ZW50aWFsCitsaWFiaWxpdHkgZm9yIG90aGVyIENvbnRyaWJ1dG9ycy4gVGhlcmVmb3JlLCBpZiBhIENvbnRyaWJ1dG9yIGluY2x1ZGVzIHRoZQorUHJvZ3JhbSBpbiBhIGNvbW1lcmNpYWwgcHJvZHVjdCBvZmZlcmluZywgc3VjaCBDb250cmlidXRvciAoJnF1b3Q7Q29tbWVyY2lhbAorQ29udHJpYnV0b3ImcXVvdDspIGhlcmVieSBhZ3JlZXMgdG8gZGVmZW5kIGFuZCBpbmRlbW5pZnkgZXZlcnkgb3RoZXIKK0NvbnRyaWJ1dG9yICgmcXVvdDtJbmRlbW5pZmllZCBDb250cmlidXRvciZxdW90OykgYWdhaW5zdCBhbnkgbG9zc2VzLCBkYW1hZ2VzIGFuZAorY29zdHMgKGNvbGxlY3RpdmVseSAmcXVvdDtMb3NzZXMmcXVvdDspIGFyaXNpbmcgZnJvbSBjbGFpbXMsIGxhd3N1aXRzIGFuZCBvdGhlcgorbGVnYWwgYWN0aW9ucyBicm91Z2h0IGJ5IGEgdGhpcmQgcGFydHkgYWdhaW5zdCB0aGUgSW5kZW1uaWZpZWQgQ29udHJpYnV0b3IgdG8KK3RoZSBleHRlbnQgY2F1c2VkIGJ5IHRoZSBhY3RzIG9yIG9taXNzaW9ucyBvZiBzdWNoIENvbW1lcmNpYWwgQ29udHJpYnV0b3IgaW4KK2Nvbm5lY3Rpb24gd2l0aCBpdHMgZGlzdHJpYnV0aW9uIG9mIHRoZSBQcm9ncmFtIGluIGEgY29tbWVyY2lhbCBwcm9kdWN0CitvZmZlcmluZy4gVGhlIG9ibGlnYXRpb25zIGluIHRoaXMgc2VjdGlvbiBkbyBub3QgYXBwbHkgdG8gYW55IGNsYWltcyBvciBMb3NzZXMKK3JlbGF0aW5nIHRvIGFueSBhY3R1YWwgb3IgYWxsZWdlZCBpbnRlbGxlY3R1YWwgcHJvcGVydHkgaW5mcmluZ2VtZW50LiBJbiBvcmRlcgordG8gcXVhbGlmeSwgYW4gSW5kZW1uaWZpZWQgQ29udHJpYnV0b3IgbXVzdDogYSkgcHJvbXB0bHkgbm90aWZ5IHRoZSBDb21tZXJjaWFsCitDb250cmlidXRvciBpbiB3cml0aW5nIG9mIHN1Y2ggY2xhaW0sIGFuZCBiKSBhbGxvdyB0aGUgQ29tbWVyY2lhbCBDb250cmlidXRvcgordG8gY29udHJvbCwgYW5kIGNvb3BlcmF0ZSB3aXRoIHRoZSBDb21tZXJjaWFsIENvbnRyaWJ1dG9yIGluLCB0aGUgZGVmZW5zZSBhbmQKK2FueSByZWxhdGVkIHNldHRsZW1lbnQgbmVnb3RpYXRpb25zLiBUaGUgSW5kZW1uaWZpZWQgQ29udHJpYnV0b3IgbWF5IHBhcnRpY2lwYXRlCitpbiBhbnkgc3VjaCBjbGFpbSBhdCBpdHMgb3duIGV4cGVuc2UuPC9zcGFuPiA8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5Gb3IgZXhhbXBsZSwgYSBDb250cmlidXRvciBtaWdodCBpbmNsdWRlIHRoZQorUHJvZ3JhbSBpbiBhIGNvbW1lcmNpYWwgcHJvZHVjdCBvZmZlcmluZywgUHJvZHVjdCBYLiBUaGF0IENvbnRyaWJ1dG9yIGlzIHRoZW4gYQorQ29tbWVyY2lhbCBDb250cmlidXRvci4gSWYgdGhhdCBDb21tZXJjaWFsIENvbnRyaWJ1dG9yIHRoZW4gbWFrZXMgcGVyZm9ybWFuY2UKK2NsYWltcywgb3Igb2ZmZXJzIHdhcnJhbnRpZXMgcmVsYXRlZCB0byBQcm9kdWN0IFgsIHRob3NlIHBlcmZvcm1hbmNlIGNsYWltcyBhbmQKK3dhcnJhbnRpZXMgYXJlIHN1Y2ggQ29tbWVyY2lhbCBDb250cmlidXRvcidzIHJlc3BvbnNpYmlsaXR5IGFsb25lLiBVbmRlciB0aGlzCitzZWN0aW9uLCB0aGUgQ29tbWVyY2lhbCBDb250cmlidXRvciB3b3VsZCBoYXZlIHRvIGRlZmVuZCBjbGFpbXMgYWdhaW5zdCB0aGUKK290aGVyIENvbnRyaWJ1dG9ycyByZWxhdGVkIHRvIHRob3NlIHBlcmZvcm1hbmNlIGNsYWltcyBhbmQgd2FycmFudGllcywgYW5kIGlmIGEKK2NvdXJ0IHJlcXVpcmVzIGFueSBvdGhlciBDb250cmlidXRvciB0byBwYXkgYW55IGRhbWFnZXMgYXMgYSByZXN1bHQsIHRoZQorQ29tbWVyY2lhbCBDb250cmlidXRvciBtdXN0IHBheSB0aG9zZSBkYW1hZ2VzLjwvc3Bhbj4gPC9wPgorCis8cD48Yj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+NS4gTk8gV0FSUkFOVFk8L3NwYW4+PC9iPiA8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5FWENFUFQgQVMgRVhQUkVTU0xZIFNFVCBGT1JUSCBJTiBUSElTCitBR1JFRU1FTlQsIFRIRSBQUk9HUkFNIElTIFBST1ZJREVEIE9OIEFOICZxdW90O0FTIElTJnF1b3Q7IEJBU0lTLCBXSVRIT1VUCitXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIEVJVEhFUiBFWFBSRVNTIE9SIElNUExJRUQgSU5DTFVESU5HLAorV0lUSE9VVCBMSU1JVEFUSU9OLCBBTlkgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIFRJVExFLCBOT04tSU5GUklOR0VNRU5ULAorTUVSQ0hBTlRBQklMSVRZIE9SIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBFYWNoIFJlY2lwaWVudCBpcyBzb2xlbHkKK3Jlc3BvbnNpYmxlIGZvciBkZXRlcm1pbmluZyB0aGUgYXBwcm9wcmlhdGVuZXNzIG9mIHVzaW5nIGFuZCBkaXN0cmlidXRpbmcgdGhlCitQcm9ncmFtIGFuZCBhc3N1bWVzIGFsbCByaXNrcyBhc3NvY2lhdGVkIHdpdGggaXRzIGV4ZXJjaXNlIG9mIHJpZ2h0cyB1bmRlciB0aGlzCitBZ3JlZW1lbnQgLCBpbmNsdWRpbmcgYnV0IG5vdCBsaW1pdGVkIHRvIHRoZSByaXNrcyBhbmQgY29zdHMgb2YgcHJvZ3JhbSBlcnJvcnMsCitjb21wbGlhbmNlIHdpdGggYXBwbGljYWJsZSBsYXdzLCBkYW1hZ2UgdG8gb3IgbG9zcyBvZiBkYXRhLCBwcm9ncmFtcyBvcgorZXF1aXBtZW50LCBhbmQgdW5hdmFpbGFiaWxpdHkgb3IgaW50ZXJydXB0aW9uIG9mIG9wZXJhdGlvbnMuIDwvc3Bhbj48L3A+CisKKzxwPjxiPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz42LiBESVNDTEFJTUVSIE9GIExJQUJJTElUWTwvc3Bhbj48L2I+IDwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkVYQ0VQVCBBUyBFWFBSRVNTTFkgU0VUIEZPUlRIIElOIFRISVMKK0FHUkVFTUVOVCwgTkVJVEhFUiBSRUNJUElFTlQgTk9SIEFOWSBDT05UUklCVVRPUlMgU0hBTEwgSEFWRSBBTlkgTElBQklMSVRZIEZPUgorQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisoSU5DTFVESU5HIFdJVEhPVVQgTElNSVRBVElPTiBMT1NUIFBST0ZJVFMpLCBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcKK05FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT1IgRElTVFJJQlVUSU9OIE9GCitUSEUgUFJPR1JBTSBPUiBUSEUgRVhFUkNJU0UgT0YgQU5ZIFJJR0hUUyBHUkFOVEVEIEhFUkVVTkRFUiwgRVZFTiBJRiBBRFZJU0VEIE9GCitUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLjwvc3Bhbj4gPC9wPgorCis8cD48Yj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+Ny4gR0VORVJBTDwvc3Bhbj48L2I+IDwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPklmIGFueSBwcm92aXNpb24gb2YgdGhpcyBBZ3JlZW1lbnQgaXMgaW52YWxpZAorb3IgdW5lbmZvcmNlYWJsZSB1bmRlciBhcHBsaWNhYmxlIGxhdywgaXQgc2hhbGwgbm90IGFmZmVjdCB0aGUgdmFsaWRpdHkgb3IKK2VuZm9yY2VhYmlsaXR5IG9mIHRoZSByZW1haW5kZXIgb2YgdGhlIHRlcm1zIG9mIHRoaXMgQWdyZWVtZW50LCBhbmQgd2l0aG91dAorZnVydGhlciBhY3Rpb24gYnkgdGhlIHBhcnRpZXMgaGVyZXRvLCBzdWNoIHByb3Zpc2lvbiBzaGFsbCBiZSByZWZvcm1lZCB0byB0aGUKK21pbmltdW0gZXh0ZW50IG5lY2Vzc2FyeSB0byBtYWtlIHN1Y2ggcHJvdmlzaW9uIHZhbGlkIGFuZCBlbmZvcmNlYWJsZS48L3NwYW4+IDwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPklmIFJlY2lwaWVudCBpbnN0aXR1dGVzIHBhdGVudCBsaXRpZ2F0aW9uCithZ2FpbnN0IGFueSBlbnRpdHkgKGluY2x1ZGluZyBhIGNyb3NzLWNsYWltIG9yIGNvdW50ZXJjbGFpbSBpbiBhIGxhd3N1aXQpCithbGxlZ2luZyB0aGF0IHRoZSBQcm9ncmFtIGl0c2VsZiAoZXhjbHVkaW5nIGNvbWJpbmF0aW9ucyBvZiB0aGUgUHJvZ3JhbSB3aXRoCitvdGhlciBzb2Z0d2FyZSBvciBoYXJkd2FyZSkgaW5mcmluZ2VzIHN1Y2ggUmVjaXBpZW50J3MgcGF0ZW50KHMpLCB0aGVuIHN1Y2gKK1JlY2lwaWVudCdzIHJpZ2h0cyBncmFudGVkIHVuZGVyIFNlY3Rpb24gMihiKSBzaGFsbCB0ZXJtaW5hdGUgYXMgb2YgdGhlIGRhdGUKK3N1Y2ggbGl0aWdhdGlvbiBpcyBmaWxlZC4gPC9zcGFuPjwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkFsbCBSZWNpcGllbnQncyByaWdodHMgdW5kZXIgdGhpcyBBZ3JlZW1lbnQKK3NoYWxsIHRlcm1pbmF0ZSBpZiBpdCBmYWlscyB0byBjb21wbHkgd2l0aCBhbnkgb2YgdGhlIG1hdGVyaWFsIHRlcm1zIG9yCitjb25kaXRpb25zIG9mIHRoaXMgQWdyZWVtZW50IGFuZCBkb2VzIG5vdCBjdXJlIHN1Y2ggZmFpbHVyZSBpbiBhIHJlYXNvbmFibGUKK3BlcmlvZCBvZiB0aW1lIGFmdGVyIGJlY29taW5nIGF3YXJlIG9mIHN1Y2ggbm9uY29tcGxpYW5jZS4gSWYgYWxsIFJlY2lwaWVudCdzCityaWdodHMgdW5kZXIgdGhpcyBBZ3JlZW1lbnQgdGVybWluYXRlLCBSZWNpcGllbnQgYWdyZWVzIHRvIGNlYXNlIHVzZSBhbmQKK2Rpc3RyaWJ1dGlvbiBvZiB0aGUgUHJvZ3JhbSBhcyBzb29uIGFzIHJlYXNvbmFibHkgcHJhY3RpY2FibGUuIEhvd2V2ZXIsCitSZWNpcGllbnQncyBvYmxpZ2F0aW9ucyB1bmRlciB0aGlzIEFncmVlbWVudCBhbmQgYW55IGxpY2Vuc2VzIGdyYW50ZWQgYnkKK1JlY2lwaWVudCByZWxhdGluZyB0byB0aGUgUHJvZ3JhbSBzaGFsbCBjb250aW51ZSBhbmQgc3Vydml2ZS4gPC9zcGFuPjwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkV2ZXJ5b25lIGlzIHBlcm1pdHRlZCB0byBjb3B5IGFuZCBkaXN0cmlidXRlCitjb3BpZXMgb2YgdGhpcyBBZ3JlZW1lbnQsIGJ1dCBpbiBvcmRlciB0byBhdm9pZCBpbmNvbnNpc3RlbmN5IHRoZSBBZ3JlZW1lbnQgaXMKK2NvcHlyaWdodGVkIGFuZCBtYXkgb25seSBiZSBtb2RpZmllZCBpbiB0aGUgZm9sbG93aW5nIG1hbm5lci4gVGhlIEFncmVlbWVudAorU3Rld2FyZCByZXNlcnZlcyB0aGUgcmlnaHQgdG8gcHVibGlzaCBuZXcgdmVyc2lvbnMgKGluY2x1ZGluZyByZXZpc2lvbnMpIG9mCit0aGlzIEFncmVlbWVudCBmcm9tIHRpbWUgdG8gdGltZS4gTm8gb25lIG90aGVyIHRoYW4gdGhlIEFncmVlbWVudCBTdGV3YXJkIGhhcwordGhlIHJpZ2h0IHRvIG1vZGlmeSB0aGlzIEFncmVlbWVudC4gVGhlIEVjbGlwc2UgRm91bmRhdGlvbiBpcyB0aGUgaW5pdGlhbAorQWdyZWVtZW50IFN0ZXdhcmQuIFRoZSBFY2xpcHNlIEZvdW5kYXRpb24gbWF5IGFzc2lnbiB0aGUgcmVzcG9uc2liaWxpdHkgdG8KK3NlcnZlIGFzIHRoZSBBZ3JlZW1lbnQgU3Rld2FyZCB0byBhIHN1aXRhYmxlIHNlcGFyYXRlIGVudGl0eS4gRWFjaCBuZXcgdmVyc2lvbgorb2YgdGhlIEFncmVlbWVudCB3aWxsIGJlIGdpdmVuIGEgZGlzdGluZ3Vpc2hpbmcgdmVyc2lvbiBudW1iZXIuIFRoZSBQcm9ncmFtCisoaW5jbHVkaW5nIENvbnRyaWJ1dGlvbnMpIG1heSBhbHdheXMgYmUgZGlzdHJpYnV0ZWQgc3ViamVjdCB0byB0aGUgdmVyc2lvbiBvZgordGhlIEFncmVlbWVudCB1bmRlciB3aGljaCBpdCB3YXMgcmVjZWl2ZWQuIEluIGFkZGl0aW9uLCBhZnRlciBhIG5ldyB2ZXJzaW9uIG9mCit0aGUgQWdyZWVtZW50IGlzIHB1Ymxpc2hlZCwgQ29udHJpYnV0b3IgbWF5IGVsZWN0IHRvIGRpc3RyaWJ1dGUgdGhlIFByb2dyYW0KKyhpbmNsdWRpbmcgaXRzIENvbnRyaWJ1dGlvbnMpIHVuZGVyIHRoZSBuZXcgdmVyc2lvbi4gRXhjZXB0IGFzIGV4cHJlc3NseSBzdGF0ZWQKK2luIFNlY3Rpb25zIDIoYSkgYW5kIDIoYikgYWJvdmUsIFJlY2lwaWVudCByZWNlaXZlcyBubyByaWdodHMgb3IgbGljZW5zZXMgdG8KK3RoZSBpbnRlbGxlY3R1YWwgcHJvcGVydHkgb2YgYW55IENvbnRyaWJ1dG9yIHVuZGVyIHRoaXMgQWdyZWVtZW50LCB3aGV0aGVyCitleHByZXNzbHksIGJ5IGltcGxpY2F0aW9uLCBlc3RvcHBlbCBvciBvdGhlcndpc2UuIEFsbCByaWdodHMgaW4gdGhlIFByb2dyYW0gbm90CitleHByZXNzbHkgZ3JhbnRlZCB1bmRlciB0aGlzIEFncmVlbWVudCBhcmUgcmVzZXJ2ZWQuPC9zcGFuPiA8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5UaGlzIEFncmVlbWVudCBpcyBnb3Zlcm5lZCBieSB0aGUgbGF3cyBvZiB0aGUKK1N0YXRlIG9mIE5ldyBZb3JrIGFuZCB0aGUgaW50ZWxsZWN0dWFsIHByb3BlcnR5IGxhd3Mgb2YgdGhlIFVuaXRlZCBTdGF0ZXMgb2YKK0FtZXJpY2EuIE5vIHBhcnR5IHRvIHRoaXMgQWdyZWVtZW50IHdpbGwgYnJpbmcgYSBsZWdhbCBhY3Rpb24gdW5kZXIgdGhpcworQWdyZWVtZW50IG1vcmUgdGhhbiBvbmUgeWVhciBhZnRlciB0aGUgY2F1c2Ugb2YgYWN0aW9uIGFyb3NlLiBFYWNoIHBhcnR5IHdhaXZlcworaXRzIHJpZ2h0cyB0byBhIGp1cnkgdHJpYWwgaW4gYW55IHJlc3VsdGluZyBsaXRpZ2F0aW9uLjwvc3Bhbj4gPC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWw+PCFbaWYgIXN1cHBvcnRFbXB0eVBhcmFzXT4mbmJzcDs8IVtlbmRpZl0+PG86cD48L286cD48L3A+CisKKzwvZGl2PgorCis8L2JvZHk+CisKKzwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS5zdGVtLmRhdGEucG9wdWxhdGlvbi5odW1hbi5mZWF0dXJlL2ZlYXR1cmUucHJvcGVydGllcyBiL2ZlYXR1cmVzL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5wb3B1bGF0aW9uLmh1bWFuLmZlYXR1cmUvZmVhdHVyZS5wcm9wZXJ0aWVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM2MWZjYTgKLS0tIC9kZXYvbnVsbAorKysgYi9mZWF0dXJlcy9vcmcuZWNsaXBzZS5zdGVtLmRhdGEucG9wdWxhdGlvbi5odW1hbi5mZWF0dXJlL2ZlYXR1cmUucHJvcGVydGllcwpAQCAtMCwwICsxLDE3MyBAQAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBDb3B5cmlnaHQgKGMpIDIwMTEgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisjIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisjIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisjIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisjIAorIyBDb250cmlidXRvcnM6CisjICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgZmVhdHVyZS5wcm9wZXJ0aWVzCisjIGNvbnRhaW5zIGV4dGVybmFsaXplZCBzdHJpbmdzIGZvciBmZWF0dXJlLnhtbAorIyAiJWZvbyIgaW4gZmVhdHVyZS54bWwgY29ycmVzcG9uZHMgdG8gdGhlIGtleSAiZm9vIiBpbiB0aGlzIGZpbGUKKyMgamF2YS5pby5Qcm9wZXJ0aWVzIGZpbGUgKElTTyA4ODU5LTEgd2l0aCAiXCIgZXNjYXBlcykKKyMgVGhpcyBmaWxlIHNob3VsZCBiZSB0cmFuc2xhdGVkLgorCisjICJmZWF0dXJlTmFtZSIgcHJvcGVydHkgLSBuYW1lIG9mIHRoZSBmZWF0dXJlCitmZWF0dXJlTmFtZT1TVEVNIEh1bWFuIFBvcHVsYXRpb24gRGF0YQorCisjICJwcm92aWRlck5hbWUiIHByb3BlcnR5IC0gbmFtZSBvZiB0aGUgY29tcGFueSB0aGF0IHByb3ZpZGVzIHRoZSBmZWF0dXJlCitwcm92aWRlck5hbWU9RWNsaXBzZS5vcmcKKworIyAidXBkYXRlU2l0ZU5hbWUiIHByb3BlcnR5IC0gbGFiZWwgZm9yIHRoZSB1cGRhdGUgc2l0ZQordXBkYXRlU2l0ZU5hbWU9U1RFTSBVcGRhdGVzCisKKyMgInNlY29uZGFyeVNpdGVOYW1lIiBwcm9wZXJ0eSAtIGxhYmVsIGZvciB0aGUgc2Vjb25kYXJ5IHVwZGF0ZSBzaXRlCisjc2Vjb25kYXJ5VXBkYXRlU2l0ZU5hbWU9U1RFTSBVcGRhdGVzCisKKyMgImRlc2NyaXB0aW9uIiBwcm9wZXJ0eSAtIGRlc2NyaXB0aW9uIG9mIHRoZSBmZWF0dXJlCitkZXNjcmlwdGlvbj1EYXRhIGFib3V0IGh1bWFuIHBvcHVsYXRpb25zIGZvciBhbGwgY291bnRyaWVzCisKKyMgImNvcHlyaWdodCIgcHJvcGVydHkgLSB0ZXh0IG9mIHRoZSAiRmVhdHVyZSBVcGRhdGUgQ29weXJpZ2h0IgorY29weXJpZ2h0PVwKK0NvcHlyaWdodCAoYykgMjAwNy0yMDExIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLlxuXAorQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFsc1xuXAorYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wXG5cCit3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdFxuXAoraHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWxcblwKK1xuXAorQ29udHJpYnV0b3JzOlxuXAorICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvblxuCisjIyMjIyMjIyMjIyMjIyMjIGVuZCBvZiBjb3B5cmlnaHQgcHJvcGVydHkgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyMgImxpY2Vuc2VVUkwiIHByb3BlcnR5IC0gVVJMIG9mIHRoZSAiRmVhdHVyZSBMaWNlbnNlIgorIyBkbyBub3QgdHJhbnNsYXRlIHZhbHVlIC0ganVzdCBjaGFuZ2UgdG8gcG9pbnQgdG8gYSBsb2NhbGUtc3BlY2lmaWMgSFRNTCBwYWdlCitsaWNlbnNlVVJMPWxpY2Vuc2UuaHRtbAorCisjICJsaWNlbnNlIiBwcm9wZXJ0eSAtIHRleHQgb2YgdGhlICJGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlIgorIyBzaG91bGQgYmUgcGxhaW4gdGV4dCB2ZXJzaW9uIG9mIGxpY2Vuc2UgYWdyZWVtZW50IHBvaW50ZWQgdG8gYmUgImxpY2Vuc2VVUkwiCitsaWNlbnNlPVwKK0VjbGlwc2UgRm91bmRhdGlvbiBTb2Z0d2FyZSBVc2VyIEFncmVlbWVudFxuXAorQXByaWwgMTQsIDIwMTBcblwKK1xuXAorVXNhZ2UgT2YgQ29udGVudFxuXAorXG5cCitUSEUgRUNMSVBTRSBGT1VOREFUSU9OIE1BS0VTIEFWQUlMQUJMRSBTT0ZUV0FSRSwgRE9DVU1FTlRBVElPTiwgSU5GT1JNQVRJT04gQU5EL09SXG5cCitPVEhFUiBNQVRFUklBTFMgRk9SIE9QRU4gU09VUkNFIFBST0pFQ1RTIChDT0xMRUNUSVZFTFkgIkNPTlRFTlQiKS5cblwKK1VTRSBPRiBUSEUgQ09OVEVOVCBJUyBHT1ZFUk5FRCBCWSBUSEUgVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgVEhJU1xuXAorQUdSRUVNRU5UIEFORC9PUiBUSEUgVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgTElDRU5TRSBBR1JFRU1FTlRTIE9SXG5cCitOT1RJQ0VTIElORElDQVRFRCBPUiBSRUZFUkVOQ0VEIEJFTE9XLiAgQlkgVVNJTkcgVEhFIENPTlRFTlQsIFlPVVxuXAorQUdSRUUgVEhBVCBZT1VSIFVTRSBPRiBUSEUgQ09OVEVOVCBJUyBHT1ZFUk5FRCBCWSBUSElTIEFHUkVFTUVOVFxuXAorQU5EL09SIFRIRSBURVJNUyBBTkQgQ09ORElUSU9OUyBPRiBBTlkgQVBQTElDQUJMRSBMSUNFTlNFIEFHUkVFTUVOVFNcblwKK09SIE5PVElDRVMgSU5ESUNBVEVEIE9SIFJFRkVSRU5DRUQgQkVMT1cuICBJRiBZT1UgRE8gTk9UIEFHUkVFIFRPIFRIRVxuXAorVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgVEhJUyBBR1JFRU1FTlQgQU5EIFRIRSBURVJNUyBBTkQgQ09ORElUSU9OU1xuXAorT0YgQU5ZIEFQUExJQ0FCTEUgTElDRU5TRSBBR1JFRU1FTlRTIE9SIE5PVElDRVMgSU5ESUNBVEVEIE9SIFJFRkVSRU5DRURcblwKK0JFTE9XLCBUSEVOIFlPVSBNQVkgTk9UIFVTRSBUSEUgQ09OVEVOVC5cblwKK1xuXAorQXBwbGljYWJsZSBMaWNlbnNlc1xuXAorXG5cCitVbmxlc3Mgb3RoZXJ3aXNlIGluZGljYXRlZCwgYWxsIENvbnRlbnQgbWFkZSBhdmFpbGFibGUgYnkgdGhlXG5cCitFY2xpcHNlIEZvdW5kYXRpb24gaXMgcHJvdmlkZWQgdG8geW91IHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZlxuXAordGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjAgKCJFUEwiKS4gQSBjb3B5IG9mIHRoZSBFUEwgaXNcblwKK3Byb3ZpZGVkIHdpdGggdGhpcyBDb250ZW50IGFuZCBpcyBhbHNvIGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbC5cblwKK0ZvciBwdXJwb3NlcyBvZiB0aGUgRVBMLCAiUHJvZ3JhbSIgd2lsbCBtZWFuIHRoZSBDb250ZW50LlxuXAorXG5cCitDb250ZW50IGluY2x1ZGVzLCBidXQgaXMgbm90IGxpbWl0ZWQgdG8sIHNvdXJjZSBjb2RlLCBvYmplY3QgY29kZSxcblwKK2RvY3VtZW50YXRpb24gYW5kIG90aGVyIGZpbGVzIG1haW50YWluZWQgaW4gdGhlIEVjbGlwc2UgRm91bmRhdGlvbiBzb3VyY2UgY29kZVxuXAorcmVwb3NpdG9yeSAoIlJlcG9zaXRvcnkiKSBpbiBzb2Z0d2FyZSBtb2R1bGVzICgiTW9kdWxlcyIpIGFuZCBtYWRlIGF2YWlsYWJsZVxuXAorYXMgZG93bmxvYWRhYmxlIGFyY2hpdmVzICgiRG93bmxvYWRzIikuXG5cCitcblwKKyAgICAgICAtIENvbnRlbnQgbWF5IGJlIHN0cnVjdHVyZWQgYW5kIHBhY2thZ2VkIGludG8gbW9kdWxlcyB0byBmYWNpbGl0YXRlIGRlbGl2ZXJpbmcsXG5cCisgICAgICAgICBleHRlbmRpbmcsIGFuZCB1cGdyYWRpbmcgdGhlIENvbnRlbnQuIFR5cGljYWwgbW9kdWxlcyBtYXkgaW5jbHVkZSBwbHVnLWlucyAoIlBsdWctaW5zIiksXG5cCisgICAgICAgICBwbHVnLWluIGZyYWdtZW50cyAoIkZyYWdtZW50cyIpLCBhbmQgZmVhdHVyZXMgKCJGZWF0dXJlcyIpLlxuXAorICAgICAgIC0gRWFjaCBQbHVnLWluIG9yIEZyYWdtZW50IG1heSBiZSBwYWNrYWdlZCBhcyBhIHN1Yi1kaXJlY3Rvcnkgb3IgSkFSIChKYXZhKFRNKSBBUmNoaXZlKVxuXAorICAgICAgICAgaW4gYSBkaXJlY3RvcnkgbmFtZWQgInBsdWdpbnMiLlxuXAorICAgICAgIC0gQSBGZWF0dXJlIGlzIGEgYnVuZGxlIG9mIG9uZSBvciBtb3JlIFBsdWctaW5zIGFuZC9vciBGcmFnbWVudHMgYW5kIGFzc29jaWF0ZWQgbWF0ZXJpYWwuXG5cCisgICAgICAgICBFYWNoIEZlYXR1cmUgbWF5IGJlIHBhY2thZ2VkIGFzIGEgc3ViLWRpcmVjdG9yeSBpbiBhIGRpcmVjdG9yeSBuYW1lZCAiZmVhdHVyZXMiLlxuXAorICAgICAgICAgV2l0aGluIGEgRmVhdHVyZSwgZmlsZXMgbmFtZWQgImZlYXR1cmUueG1sIiBtYXkgY29udGFpbiBhIGxpc3Qgb2YgdGhlIG5hbWVzIGFuZCB2ZXJzaW9uXG5cCisgICAgICAgICBudW1iZXJzIG9mIHRoZSBQbHVnLWlucyBhbmQvb3IgRnJhZ21lbnRzIGFzc29jaWF0ZWQgd2l0aCB0aGF0IEZlYXR1cmUuXG5cCisgICAgICAgLSBGZWF0dXJlcyBtYXkgYWxzbyBpbmNsdWRlIG90aGVyIEZlYXR1cmVzICgiSW5jbHVkZWQgRmVhdHVyZXMiKS4gV2l0aGluIGEgRmVhdHVyZSwgZmlsZXNcblwKKyAgICAgICAgIG5hbWVkICJmZWF0dXJlLnhtbCIgbWF5IGNvbnRhaW4gYSBsaXN0IG9mIHRoZSBuYW1lcyBhbmQgdmVyc2lvbiBudW1iZXJzIG9mIEluY2x1ZGVkIEZlYXR1cmVzLlxuXAorXG5cCitUaGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgZ292ZXJuaW5nIFBsdWctaW5zIGFuZCBGcmFnbWVudHMgc2hvdWxkIGJlXG5cCitjb250YWluZWQgaW4gZmlsZXMgbmFtZWQgImFib3V0Lmh0bWwiICgiQWJvdXRzIikuIFRoZSB0ZXJtcyBhbmRcblwKK2NvbmRpdGlvbnMgZ292ZXJuaW5nIEZlYXR1cmVzIGFuZCBJbmNsdWRlZCBGZWF0dXJlcyBzaG91bGQgYmUgY29udGFpbmVkXG5cCitpbiBmaWxlcyBuYW1lZCAibGljZW5zZS5odG1sIiAoIkZlYXR1cmUgTGljZW5zZXMiKS4gQWJvdXRzIGFuZCBGZWF0dXJlXG5cCitMaWNlbnNlcyBtYXkgYmUgbG9jYXRlZCBpbiBhbnkgZGlyZWN0b3J5IG9mIGEgRG93bmxvYWQgb3IgTW9kdWxlXG5cCitpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0byB0aGUgZm9sbG93aW5nIGxvY2F0aW9uczpcblwKK1xuXAorICAgICAgIC0gVGhlIHRvcC1sZXZlbCAocm9vdCkgZGlyZWN0b3J5XG5cCisgICAgICAgLSBQbHVnLWluIGFuZCBGcmFnbWVudCBkaXJlY3Rvcmllc1xuXAorICAgICAgIC0gSW5zaWRlIFBsdWctaW5zIGFuZCBGcmFnbWVudHMgcGFja2FnZWQgYXMgSkFSc1xuXAorICAgICAgIC0gU3ViLWRpcmVjdG9yaWVzIG9mIHRoZSBkaXJlY3RvcnkgbmFtZWQgInNyYyIgb2YgY2VydGFpbiBQbHVnLWluc1xuXAorICAgICAgIC0gRmVhdHVyZSBkaXJlY3Rvcmllc1xuXAorXG5cCitOb3RlOiBpZiBhIEZlYXR1cmUgbWFkZSBhdmFpbGFibGUgYnkgdGhlIEVjbGlwc2UgRm91bmRhdGlvbiBpcyBpbnN0YWxsZWQgdXNpbmcgdGhlXG5cCitQcm92aXNpb25pbmcgVGVjaG5vbG9neSAoYXMgZGVmaW5lZCBiZWxvdyksIHlvdSBtdXN0IGFncmVlIHRvIGEgbGljZW5zZSAoIkZlYXR1cmUgXG5cCitVcGRhdGUgTGljZW5zZSIpIGR1cmluZyB0aGUgaW5zdGFsbGF0aW9uIHByb2Nlc3MuIElmIHRoZSBGZWF0dXJlIGNvbnRhaW5zXG5cCitJbmNsdWRlZCBGZWF0dXJlcywgdGhlIEZlYXR1cmUgVXBkYXRlIExpY2Vuc2Ugc2hvdWxkIGVpdGhlciBwcm92aWRlIHlvdVxuXAord2l0aCB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgZ292ZXJuaW5nIHRoZSBJbmNsdWRlZCBGZWF0dXJlcyBvciBpbmZvcm1cblwKK3lvdSB3aGVyZSB5b3UgY2FuIGxvY2F0ZSB0aGVtLiBGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlcyBtYXkgYmUgZm91bmQgaW5cblwKK3RoZSAibGljZW5zZSIgcHJvcGVydHkgb2YgZmlsZXMgbmFtZWQgImZlYXR1cmUucHJvcGVydGllcyIgZm91bmQgd2l0aGluIGEgRmVhdHVyZS5cblwKK1N1Y2ggQWJvdXRzLCBGZWF0dXJlIExpY2Vuc2VzLCBhbmQgRmVhdHVyZSBVcGRhdGUgTGljZW5zZXMgY29udGFpbiB0aGVcblwKK3Rlcm1zIGFuZCBjb25kaXRpb25zIChvciByZWZlcmVuY2VzIHRvIHN1Y2ggdGVybXMgYW5kIGNvbmRpdGlvbnMpIHRoYXRcblwKK2dvdmVybiB5b3VyIHVzZSBvZiB0aGUgYXNzb2NpYXRlZCBDb250ZW50IGluIHRoYXQgZGlyZWN0b3J5LlxuXAorXG5cCitUSEUgQUJPVVRTLCBGRUFUVVJFIExJQ0VOU0VTLCBBTkQgRkVBVFVSRSBVUERBVEUgTElDRU5TRVMgTUFZIFJFRkVSXG5cCitUTyBUSEUgRVBMIE9SIE9USEVSIExJQ0VOU0UgQUdSRUVNRU5UUywgTk9USUNFUyBPUiBURVJNUyBBTkQgQ09ORElUSU9OUy5cblwKK1NPTUUgT0YgVEhFU0UgT1RIRVIgTElDRU5TRSBBR1JFRU1FTlRTIE1BWSBJTkNMVURFIChCVVQgQVJFIE5PVCBMSU1JVEVEIFRPKTpcblwKK1xuXAorICAgICAgIC0gQ29tbW9uIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4wIChhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9jcGwtdjEwLmh0bWwpXG5cCisgICAgICAgLSBBcGFjaGUgU29mdHdhcmUgTGljZW5zZSAxLjEgKGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRSlcblwKKyAgICAgICAtIEFwYWNoZSBTb2Z0d2FyZSBMaWNlbnNlIDIuMCAoYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMClcblwKKyAgICAgICAtIE1ldHJvIExpbmsgUHVibGljIExpY2Vuc2UgMS4wMCAoYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cub3Blbmdyb3VwLm9yZy9vcGVubW90aWYvc3VwcG9ydGVycy9tZXRyb2xpbmsvbGljZW5zZS5odG1sKVxuXAorICAgICAgIC0gTW96aWxsYSBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMSAoYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cubW96aWxsYS5vcmcvTVBML01QTC0xLjEuaHRtbClcblwKK1xuXAorSVQgSVMgWU9VUiBPQkxJR0FUSU9OIFRPIFJFQUQgQU5EIEFDQ0VQVCBBTEwgU1VDSCBURVJNUyBBTkQgQ09ORElUSU9OUyBQUklPUlxuXAorVE8gVVNFIE9GIFRIRSBDT05URU5ULiBJZiBubyBBYm91dCwgRmVhdHVyZSBMaWNlbnNlLCBvciBGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlXG5cCitpcyBwcm92aWRlZCwgcGxlYXNlIGNvbnRhY3QgdGhlIEVjbGlwc2UgRm91bmRhdGlvbiB0byBkZXRlcm1pbmUgd2hhdCB0ZXJtcyBhbmQgY29uZGl0aW9uc1xuXAorZ292ZXJuIHRoYXQgcGFydGljdWxhciBDb250ZW50LlxuXAorXG5cCitcblxVc2Ugb2YgUHJvdmlzaW9uaW5nIFRlY2hub2xvZ3lcblwKK1xuXAorVGhlIEVjbGlwc2UgRm91bmRhdGlvbiBtYWtlcyBhdmFpbGFibGUgcHJvdmlzaW9uaW5nIHNvZnR3YXJlLCBleGFtcGxlcyBvZiB3aGljaCBpbmNsdWRlLFxuXAorYnV0IGFyZSBub3QgbGltaXRlZCB0bywgcDIgYW5kIHRoZSBFY2xpcHNlIFVwZGF0ZSBNYW5hZ2VyICgiUHJvdmlzaW9uaW5nIFRlY2hub2xvZ3kiKSBmb3JcblwKK3RoZSBwdXJwb3NlIG9mIGFsbG93aW5nIHVzZXJzIHRvIGluc3RhbGwgc29mdHdhcmUsIGRvY3VtZW50YXRpb24sIGluZm9ybWF0aW9uIGFuZC9vclxuXAorb3RoZXIgbWF0ZXJpYWxzIChjb2xsZWN0aXZlbHkgIkluc3RhbGxhYmxlIFNvZnR3YXJlIikuIFRoaXMgY2FwYWJpbGl0eSBpcyBwcm92aWRlZCB3aXRoXG5cCit0aGUgaW50ZW50IG9mIGFsbG93aW5nIHN1Y2ggdXNlcnMgdG8gaW5zdGFsbCwgZXh0ZW5kIGFuZCB1cGRhdGUgRWNsaXBzZS1iYXNlZCBwcm9kdWN0cy5cblwKK0luZm9ybWF0aW9uIGFib3V0IHBhY2thZ2luZyBJbnN0YWxsYWJsZSBTb2Z0d2FyZSBpcyBhdmFpbGFibGUgYXRcblwKK2h0dHA6Ly9lY2xpcHNlLm9yZy9lcXVpbm94L3AyL3JlcG9zaXRvcnlfcGFja2FnaW5nLmh0bWwgKCJTcGVjaWZpY2F0aW9uIikuXG5cCitcblwKK1lvdSBtYXkgdXNlIFByb3Zpc2lvbmluZyBUZWNobm9sb2d5IHRvIGFsbG93IG90aGVyIHBhcnRpZXMgdG8gaW5zdGFsbCBJbnN0YWxsYWJsZSBTb2Z0d2FyZS5cblwKK1lvdSBzaGFsbCBiZSByZXNwb25zaWJsZSBmb3IgZW5hYmxpbmcgdGhlIGFwcGxpY2FibGUgbGljZW5zZSBhZ3JlZW1lbnRzIHJlbGF0aW5nIHRvIHRoZVxuXAorSW5zdGFsbGFibGUgU29mdHdhcmUgdG8gYmUgcHJlc2VudGVkIHRvLCBhbmQgYWNjZXB0ZWQgYnksIHRoZSB1c2VycyBvZiB0aGUgUHJvdmlzaW9uaW5nIFRlY2hub2xvZ3lcblwKK2luIGFjY29yZGFuY2Ugd2l0aCB0aGUgU3BlY2lmaWNhdGlvbi4gQnkgdXNpbmcgUHJvdmlzaW9uaW5nIFRlY2hub2xvZ3kgaW4gc3VjaCBhIG1hbm5lciBhbmRcblwKK21ha2luZyBpdCBhdmFpbGFibGUgaW4gYWNjb3JkYW5jZSB3aXRoIHRoZSBTcGVjaWZpY2F0aW9uLCB5b3UgZnVydGhlciBhY2tub3dsZWRnZSB5b3VyXG5cCithZ3JlZW1lbnQgdG8sIGFuZCB0aGUgYWNxdWlzaXRpb24gb2YgYWxsIG5lY2Vzc2FyeSByaWdodHMgdG8gcGVybWl0IHRoZSBmb2xsb3dpbmc6XG5cCitcblwKKyAgICAgICAxLiBBIHNlcmllcyBvZiBhY3Rpb25zIG1heSBvY2N1ciAoIlByb3Zpc2lvbmluZyBQcm9jZXNzIikgaW4gd2hpY2ggYSB1c2VyIG1heSBleGVjdXRlXG5cCisgICAgICAgICAgdGhlIFByb3Zpc2lvbmluZyBUZWNobm9sb2d5IG9uIGEgbWFjaGluZSAoIlRhcmdldCBNYWNoaW5lIikgd2l0aCB0aGUgaW50ZW50IG9mIGluc3RhbGxpbmcsXG5cCisgICAgICAgICAgZXh0ZW5kaW5nIG9yIHVwZGF0aW5nIHRoZSBmdW5jdGlvbmFsaXR5IG9mIGFuIEVjbGlwc2UtYmFzZWQgcHJvZHVjdC5cblwKKyAgICAgICAyLiBEdXJpbmcgdGhlIFByb3Zpc2lvbmluZyBQcm9jZXNzLCB0aGUgUHJvdmlzaW9uaW5nIFRlY2hub2xvZ3kgbWF5IGNhdXNlIHRoaXJkIHBhcnR5XG5cCisgICAgICAgICAgSW5zdGFsbGFibGUgU29mdHdhcmUgb3IgYSBwb3J0aW9uIHRoZXJlb2YgdG8gYmUgYWNjZXNzZWQgYW5kIGNvcGllZCB0byB0aGUgVGFyZ2V0IE1hY2hpbmUuXG5cCisgICAgICAgMy4gUHVyc3VhbnQgdG8gdGhlIFNwZWNpZmljYXRpb24sIHlvdSB3aWxsIHByb3ZpZGUgdG8gdGhlIHVzZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIHRoYXRcblwKKyAgICAgICAgICBnb3Zlcm4gdGhlIHVzZSBvZiB0aGUgSW5zdGFsbGFibGUgU29mdHdhcmUgKCJJbnN0YWxsYWJsZSBTb2Z0d2FyZSBBZ3JlZW1lbnQiKSBhbmQgc3VjaFxuXAorICAgICAgICAgIEluc3RhbGxhYmxlIFNvZnR3YXJlIEFncmVlbWVudCBzaGFsbCBiZSBhY2Nlc3NlZCBmcm9tIHRoZSBUYXJnZXQgTWFjaGluZSBpbiBhY2NvcmRhbmNlXG5cCisgICAgICAgICAgd2l0aCB0aGUgU3BlY2lmaWNhdGlvbi4gU3VjaCBJbnN0YWxsYWJsZSBTb2Z0d2FyZSBBZ3JlZW1lbnQgbXVzdCBpbmZvcm0gdGhlIHVzZXIgb2YgdGhlXG5cCisgICAgICAgICAgdGVybXMgYW5kIGNvbmRpdGlvbnMgdGhhdCBnb3Zlcm4gdGhlIEluc3RhbGxhYmxlIFNvZnR3YXJlIGFuZCBtdXN0IHNvbGljaXQgYWNjZXB0YW5jZSBieVxuXAorICAgICAgICAgIHRoZSBlbmQgdXNlciBpbiB0aGUgbWFubmVyIHByZXNjcmliZWQgaW4gc3VjaCBJbnN0YWxsYWJsZSBTb2Z0d2FyZSBBZ3JlZW1lbnQuIFVwb24gc3VjaFxuXAorICAgICAgICAgIGluZGljYXRpb24gb2YgYWdyZWVtZW50IGJ5IHRoZSB1c2VyLCB0aGUgcHJvdmlzaW9uaW5nIFRlY2hub2xvZ3kgd2lsbCBjb21wbGV0ZSBpbnN0YWxsYXRpb25cblwKKyAgICAgICAgICBvZiB0aGUgSW5zdGFsbGFibGUgU29mdHdhcmUuXG5cCitcblwKK0NyeXB0b2dyYXBoeVxuXAorXG5cCitDb250ZW50IG1heSBjb250YWluIGVuY3J5cHRpb24gc29mdHdhcmUuIFRoZSBjb3VudHJ5IGluIHdoaWNoIHlvdSBhcmVcblwKK2N1cnJlbnRseSBtYXkgaGF2ZSByZXN0cmljdGlvbnMgb24gdGhlIGltcG9ydCwgcG9zc2Vzc2lvbiwgYW5kIHVzZSxcblwKK2FuZC9vciByZS1leHBvcnQgdG8gYW5vdGhlciBjb3VudHJ5LCBvZiBlbmNyeXB0aW9uIHNvZnR3YXJlLiBCRUZPUkVcblwKK3VzaW5nIGFueSBlbmNyeXB0aW9uIHNvZnR3YXJlLCBwbGVhc2UgY2hlY2sgdGhlIGNvdW50cnkncyBsYXdzLFxuXAorcmVndWxhdGlvbnMgYW5kIHBvbGljaWVzIGNvbmNlcm5pbmcgdGhlIGltcG9ydCwgcG9zc2Vzc2lvbiwgb3IgdXNlLCBhbmRcblwKK3JlLWV4cG9ydCBvZiBlbmNyeXB0aW9uIHNvZnR3YXJlLCB0byBzZWUgaWYgdGhpcyBpcyBwZXJtaXR0ZWQuXG5cCitcblwKK0phdmEgYW5kIGFsbCBKYXZhLWJhc2VkIHRyYWRlbWFya3MgYXJlIHRyYWRlbWFya3Mgb2YgT3JhY2xlIENvcnBvcmF0aW9uIGluIHRoZSBVbml0ZWQgU3RhdGVzLCBvdGhlciBjb3VudHJpZXMsIG9yIGJvdGguXG4KKyMjIyMjIyMjIyMjIGVuZCBvZiBsaWNlbnNlIHByb3BlcnR5ICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5wb3B1bGF0aW9uLmh1bWFuLmZlYXR1cmUvZmVhdHVyZS54bWwgYi9mZWF0dXJlcy9vcmcuZWNsaXBzZS5zdGVtLmRhdGEucG9wdWxhdGlvbi5odW1hbi5mZWF0dXJlL2ZlYXR1cmUueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUyNDMyZTcKLS0tIC9kZXYvbnVsbAorKysgYi9mZWF0dXJlcy9vcmcuZWNsaXBzZS5zdGVtLmRhdGEucG9wdWxhdGlvbi5odW1hbi5mZWF0dXJlL2ZlYXR1cmUueG1sCkBAIC0wLDAgKzEsNDMgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8ZmVhdHVyZQorICAgICAgaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uZGF0YS5wb3B1bGF0aW9uLmh1bWFuLmZlYXR1cmUiCisgICAgICBsYWJlbD0iJWZlYXR1cmVOYW1lIgorICAgICAgdmVyc2lvbj0iMS4yLjEiCisgICAgICBwcm92aWRlci1uYW1lPSIlcHJvdmlkZXJOYW1lIj4KKworICAgPGRlc2NyaXB0aW9uPgorICAgICAgJWRlc2NyaXB0aW9uCisgICA8L2Rlc2NyaXB0aW9uPgorCisgICA8Y29weXJpZ2h0PgorICAgICAgJWNvcHlyaWdodAorICAgPC9jb3B5cmlnaHQ+CisKKyAgIDxsaWNlbnNlIHVybD0iJWxpY2Vuc2VVUkwiPgorICAgICAgJWxpY2Vuc2UKKyAgIDwvbGljZW5zZT4KKworICAgPHVybD4KKyAgICAgIDx1cGRhdGUgbGFiZWw9IiV1cGRhdGVTaXRlTmFtZSIgdXJsPSJodHRwOi8vZG93bmxvYWQuZWNsaXBzZS5vcmcvc3RlbS91cGRhdGUtc2l0ZS8iLz4KKyAgIDwvdXJsPgorCisgICA8cmVxdWlyZXM+CisgICAgICA8aW1wb3J0IHBsdWdpbj0ib3JnLmVjbGlwc2UuY29yZS5ydW50aW1lIi8+CisgICAgICA8aW1wb3J0IHBsdWdpbj0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlIi8+CisgICA8L3JlcXVpcmVzPgorCisgICA8cGx1Z2luCisgICAgICAgICBpZD0ib3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS5wb3B1bGF0aW9uLmh1bWFuIgorICAgICAgICAgZG93bmxvYWQtc2l6ZT0iMCIKKyAgICAgICAgIGluc3RhbGwtc2l6ZT0iMCIKKyAgICAgICAgIHZlcnNpb249IjAuMC4wIgorICAgICAgICAgdW5wYWNrPSJmYWxzZSIvPgorCisgICA8cGx1Z2luCisgICAgICAgICBpZD0ib3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS5wb3B1bGF0aW9uLmh1bWFuLm1vZGVscyIKKyAgICAgICAgIGRvd25sb2FkLXNpemU9IjAiCisgICAgICAgICBpbnN0YWxsLXNpemU9IjAiCisgICAgICAgICB2ZXJzaW9uPSIwLjAuMCIKKyAgICAgICAgIHVucGFjaz0iZmFsc2UiLz4KKworPC9mZWF0dXJlPgpkaWZmIC0tZ2l0IGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLnBvcHVsYXRpb24uaHVtYW4uZmVhdHVyZS9saWNlbnNlLmh0bWwgYi9mZWF0dXJlcy9vcmcuZWNsaXBzZS5zdGVtLmRhdGEucG9wdWxhdGlvbi5odW1hbi5mZWF0dXJlL2xpY2Vuc2UuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMTg0Y2EzCi0tLSAvZGV2L251bGwKKysrIGIvZmVhdHVyZXMvb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLnBvcHVsYXRpb24uaHVtYW4uZmVhdHVyZS9saWNlbnNlLmh0bWwKQEAgLTAsMCArMSwxMDcgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IklTTy04ODU5LTEiID8+Cis8IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIFhIVE1MIDEuMCBTdHJpY3QvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwxL0RURC94aHRtbDEtc3RyaWN0LmR0ZCI+Cis8aHRtbCB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCI+Cis8aGVhZD4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTEiIC8+Cis8dGl0bGU+RWNsaXBzZSBGb3VuZGF0aW9uIFNvZnR3YXJlIFVzZXIgQWdyZWVtZW50PC90aXRsZT4KKzwvaGVhZD4KKworPGJvZHkgbGFuZz0iRU4tVVMiPgorPGgyPkVjbGlwc2UgRm91bmRhdGlvbiBTb2Z0d2FyZSBVc2VyIEFncmVlbWVudDwvaDI+Cis8cD5BcHJpbCAxNCwgMjAxMDwvcD4KKworPGgzPlVzYWdlIE9mIENvbnRlbnQ8L2gzPgorCis8cD5USEUgRUNMSVBTRSBGT1VOREFUSU9OIE1BS0VTIEFWQUlMQUJMRSBTT0ZUV0FSRSwgRE9DVU1FTlRBVElPTiwgSU5GT1JNQVRJT04gQU5EL09SIE9USEVSIE1BVEVSSUFMUyBGT1IgT1BFTiBTT1VSQ0UgUFJPSkVDVFMKKyAgIChDT0xMRUNUSVZFTFkgJnF1b3Q7Q09OVEVOVCZxdW90OykuICBVU0UgT0YgVEhFIENPTlRFTlQgSVMgR09WRVJORUQgQlkgVEhFIFRFUk1TIEFORCBDT05ESVRJT05TIE9GIFRISVMgQUdSRUVNRU5UIEFORC9PUiBUSEUgVEVSTVMgQU5ECisgICBDT05ESVRJT05TIE9GIExJQ0VOU0UgQUdSRUVNRU5UUyBPUiBOT1RJQ0VTIElORElDQVRFRCBPUiBSRUZFUkVOQ0VEIEJFTE9XLiAgQlkgVVNJTkcgVEhFIENPTlRFTlQsIFlPVSBBR1JFRSBUSEFUIFlPVVIgVVNFCisgICBPRiBUSEUgQ09OVEVOVCBJUyBHT1ZFUk5FRCBCWSBUSElTIEFHUkVFTUVOVCBBTkQvT1IgVEhFIFRFUk1TIEFORCBDT05ESVRJT05TIE9GIEFOWSBBUFBMSUNBQkxFIExJQ0VOU0UgQUdSRUVNRU5UUyBPUgorICAgTk9USUNFUyBJTkRJQ0FURUQgT1IgUkVGRVJFTkNFRCBCRUxPVy4gIElGIFlPVSBETyBOT1QgQUdSRUUgVE8gVEhFIFRFUk1TIEFORCBDT05ESVRJT05TIE9GIFRISVMgQUdSRUVNRU5UIEFORCBUSEUgVEVSTVMgQU5ECisgICBDT05ESVRJT05TIE9GIEFOWSBBUFBMSUNBQkxFIExJQ0VOU0UgQUdSRUVNRU5UUyBPUiBOT1RJQ0VTIElORElDQVRFRCBPUiBSRUZFUkVOQ0VEIEJFTE9XLCBUSEVOIFlPVSBNQVkgTk9UIFVTRSBUSEUgQ09OVEVOVC48L3A+CisKKzxoMz5BcHBsaWNhYmxlIExpY2Vuc2VzPC9oMz4KKworPHA+VW5sZXNzIG90aGVyd2lzZSBpbmRpY2F0ZWQsIGFsbCBDb250ZW50IG1hZGUgYXZhaWxhYmxlIGJ5IHRoZSBFY2xpcHNlIEZvdW5kYXRpb24gaXMgcHJvdmlkZWQgdG8geW91IHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMAorICAgKCZxdW90O0VQTCZxdW90OykuICBBIGNvcHkgb2YgdGhlIEVQTCBpcyBwcm92aWRlZCB3aXRoIHRoaXMgQ29udGVudCBhbmQgaXMgYWxzbyBhdmFpbGFibGUgYXQgPGEgaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwiPmh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sPC9hPi4KKyAgIEZvciBwdXJwb3NlcyBvZiB0aGUgRVBMLCAmcXVvdDtQcm9ncmFtJnF1b3Q7IHdpbGwgbWVhbiB0aGUgQ29udGVudC48L3A+CisKKzxwPkNvbnRlbnQgaW5jbHVkZXMsIGJ1dCBpcyBub3QgbGltaXRlZCB0bywgc291cmNlIGNvZGUsIG9iamVjdCBjb2RlLCBkb2N1bWVudGF0aW9uIGFuZCBvdGhlciBmaWxlcyBtYWludGFpbmVkIGluIHRoZSBFY2xpcHNlIEZvdW5kYXRpb24gc291cmNlIGNvZGUKKyAgIHJlcG9zaXRvcnkgKCZxdW90O1JlcG9zaXRvcnkmcXVvdDspIGluIHNvZnR3YXJlIG1vZHVsZXMgKCZxdW90O01vZHVsZXMmcXVvdDspIGFuZCBtYWRlIGF2YWlsYWJsZSBhcyBkb3dubG9hZGFibGUgYXJjaGl2ZXMgKCZxdW90O0Rvd25sb2FkcyZxdW90OykuPC9wPgorCis8dWw+CisgICAgICAgPGxpPkNvbnRlbnQgbWF5IGJlIHN0cnVjdHVyZWQgYW5kIHBhY2thZ2VkIGludG8gbW9kdWxlcyB0byBmYWNpbGl0YXRlIGRlbGl2ZXJpbmcsIGV4dGVuZGluZywgYW5kIHVwZ3JhZGluZyB0aGUgQ29udGVudC4gIFR5cGljYWwgbW9kdWxlcyBtYXkgaW5jbHVkZSBwbHVnLWlucyAoJnF1b3Q7UGx1Zy1pbnMmcXVvdDspLCBwbHVnLWluIGZyYWdtZW50cyAoJnF1b3Q7RnJhZ21lbnRzJnF1b3Q7KSwgYW5kIGZlYXR1cmVzICgmcXVvdDtGZWF0dXJlcyZxdW90OykuPC9saT4KKyAgICAgICA8bGk+RWFjaCBQbHVnLWluIG9yIEZyYWdtZW50IG1heSBiZSBwYWNrYWdlZCBhcyBhIHN1Yi1kaXJlY3Rvcnkgb3IgSkFSIChKYXZhJnRyYWRlOyBBUmNoaXZlKSBpbiBhIGRpcmVjdG9yeSBuYW1lZCAmcXVvdDtwbHVnaW5zJnF1b3Q7LjwvbGk+CisgICAgICAgPGxpPkEgRmVhdHVyZSBpcyBhIGJ1bmRsZSBvZiBvbmUgb3IgbW9yZSBQbHVnLWlucyBhbmQvb3IgRnJhZ21lbnRzIGFuZCBhc3NvY2lhdGVkIG1hdGVyaWFsLiAgRWFjaCBGZWF0dXJlIG1heSBiZSBwYWNrYWdlZCBhcyBhIHN1Yi1kaXJlY3RvcnkgaW4gYSBkaXJlY3RvcnkgbmFtZWQgJnF1b3Q7ZmVhdHVyZXMmcXVvdDsuICBXaXRoaW4gYSBGZWF0dXJlLCBmaWxlcyBuYW1lZCAmcXVvdDtmZWF0dXJlLnhtbCZxdW90OyBtYXkgY29udGFpbiBhIGxpc3Qgb2YgdGhlIG5hbWVzIGFuZCB2ZXJzaW9uIG51bWJlcnMgb2YgdGhlIFBsdWctaW5zCisgICAgICBhbmQvb3IgRnJhZ21lbnRzIGFzc29jaWF0ZWQgd2l0aCB0aGF0IEZlYXR1cmUuPC9saT4KKyAgICAgICA8bGk+RmVhdHVyZXMgbWF5IGFsc28gaW5jbHVkZSBvdGhlciBGZWF0dXJlcyAoJnF1b3Q7SW5jbHVkZWQgRmVhdHVyZXMmcXVvdDspLiBXaXRoaW4gYSBGZWF0dXJlLCBmaWxlcyBuYW1lZCAmcXVvdDtmZWF0dXJlLnhtbCZxdW90OyBtYXkgY29udGFpbiBhIGxpc3Qgb2YgdGhlIG5hbWVzIGFuZCB2ZXJzaW9uIG51bWJlcnMgb2YgSW5jbHVkZWQgRmVhdHVyZXMuPC9saT4KKzwvdWw+CisKKzxwPlRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBnb3Zlcm5pbmcgUGx1Zy1pbnMgYW5kIEZyYWdtZW50cyBzaG91bGQgYmUgY29udGFpbmVkIGluIGZpbGVzIG5hbWVkICZxdW90O2Fib3V0Lmh0bWwmcXVvdDsgKCZxdW90O0Fib3V0cyZxdW90OykuIFRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBnb3Zlcm5pbmcgRmVhdHVyZXMgYW5kCitJbmNsdWRlZCBGZWF0dXJlcyBzaG91bGQgYmUgY29udGFpbmVkIGluIGZpbGVzIG5hbWVkICZxdW90O2xpY2Vuc2UuaHRtbCZxdW90OyAoJnF1b3Q7RmVhdHVyZSBMaWNlbnNlcyZxdW90OykuICBBYm91dHMgYW5kIEZlYXR1cmUgTGljZW5zZXMgbWF5IGJlIGxvY2F0ZWQgaW4gYW55IGRpcmVjdG9yeSBvZiBhIERvd25sb2FkIG9yIE1vZHVsZQoraW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG8gdGhlIGZvbGxvd2luZyBsb2NhdGlvbnM6PC9wPgorCis8dWw+CisgICAgICAgPGxpPlRoZSB0b3AtbGV2ZWwgKHJvb3QpIGRpcmVjdG9yeTwvbGk+CisgICAgICAgPGxpPlBsdWctaW4gYW5kIEZyYWdtZW50IGRpcmVjdG9yaWVzPC9saT4KKyAgICAgICA8bGk+SW5zaWRlIFBsdWctaW5zIGFuZCBGcmFnbWVudHMgcGFja2FnZWQgYXMgSkFSczwvbGk+CisgICAgICAgPGxpPlN1Yi1kaXJlY3RvcmllcyBvZiB0aGUgZGlyZWN0b3J5IG5hbWVkICZxdW90O3NyYyZxdW90OyBvZiBjZXJ0YWluIFBsdWctaW5zPC9saT4KKyAgICAgICA8bGk+RmVhdHVyZSBkaXJlY3RvcmllczwvbGk+Cis8L3VsPgorCis8cD5Ob3RlOiBpZiBhIEZlYXR1cmUgbWFkZSBhdmFpbGFibGUgYnkgdGhlIEVjbGlwc2UgRm91bmRhdGlvbiBpcyBpbnN0YWxsZWQgdXNpbmcgdGhlIFByb3Zpc2lvbmluZyBUZWNobm9sb2d5IChhcyBkZWZpbmVkIGJlbG93KSwgeW91IG11c3QgYWdyZWUgdG8gYSBsaWNlbnNlICgmcXVvdDtGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlJnF1b3Q7KSBkdXJpbmcgdGhlCitpbnN0YWxsYXRpb24gcHJvY2Vzcy4gIElmIHRoZSBGZWF0dXJlIGNvbnRhaW5zIEluY2x1ZGVkIEZlYXR1cmVzLCB0aGUgRmVhdHVyZSBVcGRhdGUgTGljZW5zZSBzaG91bGQgZWl0aGVyIHByb3ZpZGUgeW91IHdpdGggdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIGdvdmVybmluZyB0aGUgSW5jbHVkZWQgRmVhdHVyZXMgb3IKK2luZm9ybSB5b3Ugd2hlcmUgeW91IGNhbiBsb2NhdGUgdGhlbS4gIEZlYXR1cmUgVXBkYXRlIExpY2Vuc2VzIG1heSBiZSBmb3VuZCBpbiB0aGUgJnF1b3Q7bGljZW5zZSZxdW90OyBwcm9wZXJ0eSBvZiBmaWxlcyBuYW1lZCAmcXVvdDtmZWF0dXJlLnByb3BlcnRpZXMmcXVvdDsgZm91bmQgd2l0aGluIGEgRmVhdHVyZS4KK1N1Y2ggQWJvdXRzLCBGZWF0dXJlIExpY2Vuc2VzLCBhbmQgRmVhdHVyZSBVcGRhdGUgTGljZW5zZXMgY29udGFpbiB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgKG9yIHJlZmVyZW5jZXMgdG8gc3VjaCB0ZXJtcyBhbmQgY29uZGl0aW9ucykgdGhhdCBnb3Zlcm4geW91ciB1c2Ugb2YgdGhlIGFzc29jaWF0ZWQgQ29udGVudCBpbgordGhhdCBkaXJlY3RvcnkuPC9wPgorCis8cD5USEUgQUJPVVRTLCBGRUFUVVJFIExJQ0VOU0VTLCBBTkQgRkVBVFVSRSBVUERBVEUgTElDRU5TRVMgTUFZIFJFRkVSIFRPIFRIRSBFUEwgT1IgT1RIRVIgTElDRU5TRSBBR1JFRU1FTlRTLCBOT1RJQ0VTIE9SIFRFUk1TIEFORCBDT05ESVRJT05TLiAgU09NRSBPRiBUSEVTRQorT1RIRVIgTElDRU5TRSBBR1JFRU1FTlRTIE1BWSBJTkNMVURFIChCVVQgQVJFIE5PVCBMSU1JVEVEIFRPKTo8L3A+CisKKzx1bD4KKyAgICAgICA8bGk+Q29tbW9uIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4wIChhdmFpbGFibGUgYXQgPGEgaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9jcGwtdjEwLmh0bWwiPmh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvY3BsLXYxMC5odG1sPC9hPik8L2xpPgorICAgICAgIDxsaT5BcGFjaGUgU29mdHdhcmUgTGljZW5zZSAxLjEgKGF2YWlsYWJsZSBhdCA8YSBocmVmPSJodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRSI+aHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0U8L2E+KTwvbGk+CisgICAgICAgPGxpPkFwYWNoZSBTb2Z0d2FyZSBMaWNlbnNlIDIuMCAoYXZhaWxhYmxlIGF0IDxhIGhyZWY9Imh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMCI+aHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wPC9hPik8L2xpPgorICAgICAgIDxsaT5NZXRybyBMaW5rIFB1YmxpYyBMaWNlbnNlIDEuMDAgKGF2YWlsYWJsZSBhdCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW5ncm91cC5vcmcvb3Blbm1vdGlmL3N1cHBvcnRlcnMvbWV0cm9saW5rL2xpY2Vuc2UuaHRtbCI+aHR0cDovL3d3dy5vcGVuZ3JvdXAub3JnL29wZW5tb3RpZi9zdXBwb3J0ZXJzL21ldHJvbGluay9saWNlbnNlLmh0bWw8L2E+KTwvbGk+CisgICAgICAgPGxpPk1vemlsbGEgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjEgKGF2YWlsYWJsZSBhdCA8YSBocmVmPSJodHRwOi8vd3d3Lm1vemlsbGEub3JnL01QTC9NUEwtMS4xLmh0bWwiPmh0dHA6Ly93d3cubW96aWxsYS5vcmcvTVBML01QTC0xLjEuaHRtbDwvYT4pPC9saT4KKzwvdWw+CisKKzxwPklUIElTIFlPVVIgT0JMSUdBVElPTiBUTyBSRUFEIEFORCBBQ0NFUFQgQUxMIFNVQ0ggVEVSTVMgQU5EIENPTkRJVElPTlMgUFJJT1IgVE8gVVNFIE9GIFRIRSBDT05URU5ULiAgSWYgbm8gQWJvdXQsIEZlYXR1cmUgTGljZW5zZSwgb3IgRmVhdHVyZSBVcGRhdGUgTGljZW5zZSBpcyBwcm92aWRlZCwgcGxlYXNlCitjb250YWN0IHRoZSBFY2xpcHNlIEZvdW5kYXRpb24gdG8gZGV0ZXJtaW5lIHdoYXQgdGVybXMgYW5kIGNvbmRpdGlvbnMgZ292ZXJuIHRoYXQgcGFydGljdWxhciBDb250ZW50LjwvcD4KKworCis8aDM+VXNlIG9mIFByb3Zpc2lvbmluZyBUZWNobm9sb2d5PC9oMz4KKworPHA+VGhlIEVjbGlwc2UgRm91bmRhdGlvbiBtYWtlcyBhdmFpbGFibGUgcHJvdmlzaW9uaW5nIHNvZnR3YXJlLCBleGFtcGxlcyBvZiB3aGljaCBpbmNsdWRlLCBidXQgYXJlIG5vdCBsaW1pdGVkIHRvLCBwMiBhbmQgdGhlIEVjbGlwc2UKKyAgIFVwZGF0ZSBNYW5hZ2VyICgmcXVvdDtQcm92aXNpb25pbmcgVGVjaG5vbG9neSZxdW90OykgZm9yIHRoZSBwdXJwb3NlIG9mIGFsbG93aW5nIHVzZXJzIHRvIGluc3RhbGwgc29mdHdhcmUsIGRvY3VtZW50YXRpb24sIGluZm9ybWF0aW9uIGFuZC9vcgorICAgb3RoZXIgbWF0ZXJpYWxzIChjb2xsZWN0aXZlbHkgJnF1b3Q7SW5zdGFsbGFibGUgU29mdHdhcmUmcXVvdDspLiBUaGlzIGNhcGFiaWxpdHkgaXMgcHJvdmlkZWQgd2l0aCB0aGUgaW50ZW50IG9mIGFsbG93aW5nIHN1Y2ggdXNlcnMgdG8KKyAgIGluc3RhbGwsIGV4dGVuZCBhbmQgdXBkYXRlIEVjbGlwc2UtYmFzZWQgcHJvZHVjdHMuIEluZm9ybWF0aW9uIGFib3V0IHBhY2thZ2luZyBJbnN0YWxsYWJsZSBTb2Z0d2FyZSBpcyBhdmFpbGFibGUgYXQgPGEKKyAgICAgICBocmVmPSJodHRwOi8vZWNsaXBzZS5vcmcvZXF1aW5veC9wMi9yZXBvc2l0b3J5X3BhY2thZ2luZy5odG1sIj5odHRwOi8vZWNsaXBzZS5vcmcvZXF1aW5veC9wMi9yZXBvc2l0b3J5X3BhY2thZ2luZy5odG1sPC9hPgorICAgKCZxdW90O1NwZWNpZmljYXRpb24mcXVvdDspLjwvcD4KKworPHA+WW91IG1heSB1c2UgUHJvdmlzaW9uaW5nIFRlY2hub2xvZ3kgdG8gYWxsb3cgb3RoZXIgcGFydGllcyB0byBpbnN0YWxsIEluc3RhbGxhYmxlIFNvZnR3YXJlLiBZb3Ugc2hhbGwgYmUgcmVzcG9uc2libGUgZm9yIGVuYWJsaW5nIHRoZQorICAgYXBwbGljYWJsZSBsaWNlbnNlIGFncmVlbWVudHMgcmVsYXRpbmcgdG8gdGhlIEluc3RhbGxhYmxlIFNvZnR3YXJlIHRvIGJlIHByZXNlbnRlZCB0bywgYW5kIGFjY2VwdGVkIGJ5LCB0aGUgdXNlcnMgb2YgdGhlIFByb3Zpc2lvbmluZyBUZWNobm9sb2d5CisgICBpbiBhY2NvcmRhbmNlIHdpdGggdGhlIFNwZWNpZmljYXRpb24uIEJ5IHVzaW5nIFByb3Zpc2lvbmluZyBUZWNobm9sb2d5IGluIHN1Y2ggYSBtYW5uZXIgYW5kIG1ha2luZyBpdCBhdmFpbGFibGUgaW4gYWNjb3JkYW5jZSB3aXRoIHRoZQorICAgU3BlY2lmaWNhdGlvbiwgeW91IGZ1cnRoZXIgYWNrbm93bGVkZ2UgeW91ciBhZ3JlZW1lbnQgdG8sIGFuZCB0aGUgYWNxdWlzaXRpb24gb2YgYWxsIG5lY2Vzc2FyeSByaWdodHMgdG8gcGVybWl0IHRoZSBmb2xsb3dpbmc6PC9wPgorCis8b2w+CisgICAgICAgPGxpPkEgc2VyaWVzIG9mIGFjdGlvbnMgbWF5IG9jY3VyICgmcXVvdDtQcm92aXNpb25pbmcgUHJvY2VzcyZxdW90OykgaW4gd2hpY2ggYSB1c2VyIG1heSBleGVjdXRlIHRoZSBQcm92aXNpb25pbmcgVGVjaG5vbG9neQorICAgICAgIG9uIGEgbWFjaGluZSAoJnF1b3Q7VGFyZ2V0IE1hY2hpbmUmcXVvdDspIHdpdGggdGhlIGludGVudCBvZiBpbnN0YWxsaW5nLCBleHRlbmRpbmcgb3IgdXBkYXRpbmcgdGhlIGZ1bmN0aW9uYWxpdHkgb2YgYW4gRWNsaXBzZS1iYXNlZAorICAgICAgIHByb2R1Y3QuPC9saT4KKyAgICAgICA8bGk+RHVyaW5nIHRoZSBQcm92aXNpb25pbmcgUHJvY2VzcywgdGhlIFByb3Zpc2lvbmluZyBUZWNobm9sb2d5IG1heSBjYXVzZSB0aGlyZCBwYXJ0eSBJbnN0YWxsYWJsZSBTb2Z0d2FyZSBvciBhIHBvcnRpb24gdGhlcmVvZiB0byBiZQorICAgICAgIGFjY2Vzc2VkIGFuZCBjb3BpZWQgdG8gdGhlIFRhcmdldCBNYWNoaW5lLjwvbGk+CisgICAgICAgPGxpPlB1cnN1YW50IHRvIHRoZSBTcGVjaWZpY2F0aW9uLCB5b3Ugd2lsbCBwcm92aWRlIHRvIHRoZSB1c2VyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyB0aGF0IGdvdmVybiB0aGUgdXNlIG9mIHRoZSBJbnN0YWxsYWJsZQorICAgICAgIFNvZnR3YXJlICgmcXVvdDtJbnN0YWxsYWJsZSBTb2Z0d2FyZSBBZ3JlZW1lbnQmcXVvdDspIGFuZCBzdWNoIEluc3RhbGxhYmxlIFNvZnR3YXJlIEFncmVlbWVudCBzaGFsbCBiZSBhY2Nlc3NlZCBmcm9tIHRoZSBUYXJnZXQKKyAgICAgICBNYWNoaW5lIGluIGFjY29yZGFuY2Ugd2l0aCB0aGUgU3BlY2lmaWNhdGlvbi4gU3VjaCBJbnN0YWxsYWJsZSBTb2Z0d2FyZSBBZ3JlZW1lbnQgbXVzdCBpbmZvcm0gdGhlIHVzZXIgb2YgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIHRoYXQgZ292ZXJuCisgICAgICAgdGhlIEluc3RhbGxhYmxlIFNvZnR3YXJlIGFuZCBtdXN0IHNvbGljaXQgYWNjZXB0YW5jZSBieSB0aGUgZW5kIHVzZXIgaW4gdGhlIG1hbm5lciBwcmVzY3JpYmVkIGluIHN1Y2ggSW5zdGFsbGFibGUgU29mdHdhcmUgQWdyZWVtZW50LiBVcG9uIHN1Y2gKKyAgICAgICBpbmRpY2F0aW9uIG9mIGFncmVlbWVudCBieSB0aGUgdXNlciwgdGhlIHByb3Zpc2lvbmluZyBUZWNobm9sb2d5IHdpbGwgY29tcGxldGUgaW5zdGFsbGF0aW9uIG9mIHRoZSBJbnN0YWxsYWJsZSBTb2Z0d2FyZS48L2xpPgorPC9vbD4KKworPGgzPkNyeXB0b2dyYXBoeTwvaDM+CisKKzxwPkNvbnRlbnQgbWF5IGNvbnRhaW4gZW5jcnlwdGlvbiBzb2Z0d2FyZS4gVGhlIGNvdW50cnkgaW4gd2hpY2ggeW91IGFyZSBjdXJyZW50bHkgbWF5IGhhdmUgcmVzdHJpY3Rpb25zIG9uIHRoZSBpbXBvcnQsIHBvc3Nlc3Npb24sIGFuZCB1c2UsIGFuZC9vciByZS1leHBvcnQgdG8KKyAgIGFub3RoZXIgY291bnRyeSwgb2YgZW5jcnlwdGlvbiBzb2Z0d2FyZS4gQkVGT1JFIHVzaW5nIGFueSBlbmNyeXB0aW9uIHNvZnR3YXJlLCBwbGVhc2UgY2hlY2sgdGhlIGNvdW50cnkncyBsYXdzLCByZWd1bGF0aW9ucyBhbmQgcG9saWNpZXMgY29uY2VybmluZyB0aGUgaW1wb3J0LAorICAgcG9zc2Vzc2lvbiwgb3IgdXNlLCBhbmQgcmUtZXhwb3J0IG9mIGVuY3J5cHRpb24gc29mdHdhcmUsIHRvIHNlZSBpZiB0aGlzIGlzIHBlcm1pdHRlZC48L3A+CisKKzxwPjxzbWFsbD5KYXZhIGFuZCBhbGwgSmF2YS1iYXNlZCB0cmFkZW1hcmtzIGFyZSB0cmFkZW1hcmtzIG9mIE9yYWNsZSBDb3Jwb3JhdGlvbiBpbiB0aGUgVW5pdGVkIFN0YXRlcywgb3RoZXIgY291bnRyaWVzLCBvciBib3RoLjwvc21hbGw+PC9wPgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLnRyYW5zcG9ydGF0aW9uLmZlYXR1cmUvLnByb2plY3QgYi9mZWF0dXJlcy9vcmcuZWNsaXBzZS5zdGVtLmRhdGEudHJhbnNwb3J0YXRpb24uZmVhdHVyZS8ucHJvamVjdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMjA0NjU5Ci0tLSAvZGV2L251bGwKKysrIGIvZmVhdHVyZXMvb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLnRyYW5zcG9ydGF0aW9uLmZlYXR1cmUvLnByb2plY3QKQEAgLTAsMCArMSwxNyBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxwcm9qZWN0RGVzY3JpcHRpb24+CisJPG5hbWU+b3JnLmVjbGlwc2Uuc3RlbS5kYXRhLnRyYW5zcG9ydGF0aW9uLmZlYXR1cmU8L25hbWU+CisJPGNvbW1lbnQ+PC9jb21tZW50PgorCTxwcm9qZWN0cz4KKwk8L3Byb2plY3RzPgorCTxidWlsZFNwZWM+CisJCTxidWlsZENvbW1hbmQ+CisJCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuRmVhdHVyZUJ1aWxkZXI8L25hbWU+CisJCQk8YXJndW1lbnRzPgorCQkJPC9hcmd1bWVudHM+CisJCTwvYnVpbGRDb21tYW5kPgorCTwvYnVpbGRTcGVjPgorCTxuYXR1cmVzPgorCQk8bmF0dXJlPm9yZy5lY2xpcHNlLnBkZS5GZWF0dXJlTmF0dXJlPC9uYXR1cmU+CisJPC9uYXR1cmVzPgorPC9wcm9qZWN0RGVzY3JpcHRpb24+CmRpZmYgLS1naXQgYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS5zdGVtLmRhdGEudHJhbnNwb3J0YXRpb24uZmVhdHVyZS9idWlsZC5wcm9wZXJ0aWVzIGIvZmVhdHVyZXMvb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLnRyYW5zcG9ydGF0aW9uLmZlYXR1cmUvYnVpbGQucHJvcGVydGllcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNzRhZjg2Ci0tLSAvZGV2L251bGwKKysrIGIvZmVhdHVyZXMvb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLnRyYW5zcG9ydGF0aW9uLmZlYXR1cmUvYnVpbGQucHJvcGVydGllcwpAQCAtMCwwICsxLDQgQEAKK2Jpbi5pbmNsdWRlcyA9IGZlYXR1cmUueG1sLFwKKyAgICAgICAgICAgICAgIGZlYXR1cmUucHJvcGVydGllcyxcCisgICAgICAgICAgICAgICBlcGwtdjEwLmh0bWwsXAorICAgICAgICAgICAgICAgbGljZW5zZS5odG1sCmRpZmYgLS1naXQgYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS5zdGVtLmRhdGEudHJhbnNwb3J0YXRpb24uZmVhdHVyZS9lcGwtdjEwLmh0bWwgYi9mZWF0dXJlcy9vcmcuZWNsaXBzZS5zdGVtLmRhdGEudHJhbnNwb3J0YXRpb24uZmVhdHVyZS9lcGwtdjEwLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWQ0YjE5NgotLS0gL2Rldi9udWxsCisrKyBiL2ZlYXR1cmVzL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS50cmFuc3BvcnRhdGlvbi5mZWF0dXJlL2VwbC12MTAuaHRtbApAQCAtMCwwICsxLDMyOCBAQAorPGh0bWwgeG1sbnM6bz0idXJuOnNjaGVtYXMtbWljcm9zb2Z0LWNvbTpvZmZpY2U6b2ZmaWNlIgoreG1sbnM6dz0idXJuOnNjaGVtYXMtbWljcm9zb2Z0LWNvbTpvZmZpY2U6d29yZCIKK3htbG5zPSJodHRwOi8vd3d3LnczLm9yZy9UUi9SRUMtaHRtbDQwIj4KKworPGhlYWQ+Cis8bWV0YSBodHRwLWVxdWl2PUNvbnRlbnQtVHlwZSBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9d2luZG93cy0xMjUyIj4KKzxtZXRhIG5hbWU9UHJvZ0lkIGNvbnRlbnQ9V29yZC5Eb2N1bWVudD4KKzxtZXRhIG5hbWU9R2VuZXJhdG9yIGNvbnRlbnQ9Ik1pY3Jvc29mdCBXb3JkIDkiPgorPG1ldGEgbmFtZT1PcmlnaW5hdG9yIGNvbnRlbnQ9Ik1pY3Jvc29mdCBXb3JkIDkiPgorPGxpbmsgcmVsPUZpbGUtTGlzdAoraHJlZj0iLi9FY2xpcHNlJTIwRVBMJTIwMjAwM18xMV8xMCUyMEZpbmFsX2ZpbGVzL2ZpbGVsaXN0LnhtbCI+Cis8dGl0bGU+RWNsaXBzZSBQdWJsaWMgTGljZW5zZSAtIFZlcnNpb24gMS4wPC90aXRsZT4KKzwhLS1baWYgZ3RlIG1zbyA5XT48eG1sPgorIDxvOkRvY3VtZW50UHJvcGVydGllcz4KKyAgPG86UmV2aXNpb24+MjwvbzpSZXZpc2lvbj4KKyAgPG86VG90YWxUaW1lPjM8L286VG90YWxUaW1lPgorICA8bzpDcmVhdGVkPjIwMDQtMDMtMDVUMjM6MDM6MDBaPC9vOkNyZWF0ZWQ+CisgIDxvOkxhc3RTYXZlZD4yMDA0LTAzLTA1VDIzOjAzOjAwWjwvbzpMYXN0U2F2ZWQ+CisgIDxvOlBhZ2VzPjQ8L286UGFnZXM+CisgIDxvOldvcmRzPjE2MjY8L286V29yZHM+CisgIDxvOkNoYXJhY3RlcnM+OTI3MDwvbzpDaGFyYWN0ZXJzPgorICAgPG86TGluZXM+Nzc8L286TGluZXM+CisgIDxvOlBhcmFncmFwaHM+MTg8L286UGFyYWdyYXBocz4KKyAgPG86Q2hhcmFjdGVyc1dpdGhTcGFjZXM+MTEzODQ8L286Q2hhcmFjdGVyc1dpdGhTcGFjZXM+CisgIDxvOlZlcnNpb24+OS40NDAyPC9vOlZlcnNpb24+CisgPC9vOkRvY3VtZW50UHJvcGVydGllcz4KKzwveG1sPjwhW2VuZGlmXS0tPjwhLS1baWYgZ3RlIG1zbyA5XT48eG1sPgorIDx3OldvcmREb2N1bWVudD4KKyAgPHc6VHJhY2tSZXZpc2lvbnMvPgorIDwvdzpXb3JkRG9jdW1lbnQ+Cis8L3htbD48IVtlbmRpZl0tLT4KKzxzdHlsZT4KKzwhLS0KKyAvKiBGb250IERlZmluaXRpb25zICovCitAZm9udC1mYWNlCisJe2ZvbnQtZmFtaWx5OlRhaG9tYTsKKwlwYW5vc2UtMToyIDExIDYgNCAzIDUgNCA0IDIgNDsKKwltc28tZm9udC1jaGFyc2V0OjA7CisJbXNvLWdlbmVyaWMtZm9udC1mYW1pbHk6c3dpc3M7CisJbXNvLWZvbnQtcGl0Y2g6dmFyaWFibGU7CisJbXNvLWZvbnQtc2lnbmF0dXJlOjU1MzY3OTQ5NSAtMjE0NzQ4MzY0OCA4IDAgNjYwNDcgMDt9CisgLyogU3R5bGUgRGVmaW5pdGlvbnMgKi8KK3AuTXNvTm9ybWFsLCBsaS5Nc29Ob3JtYWwsIGRpdi5Nc29Ob3JtYWwKKwl7bXNvLXN0eWxlLXBhcmVudDoiIjsKKwltYXJnaW46MGluOworCW1hcmdpbi1ib3R0b206LjAwMDFwdDsKKwltc28tcGFnaW5hdGlvbjp3aWRvdy1vcnBoYW47CisJZm9udC1zaXplOjEyLjBwdDsKKwlmb250LWZhbWlseToiVGltZXMgTmV3IFJvbWFuIjsKKwltc28tZmFyZWFzdC1mb250LWZhbWlseToiVGltZXMgTmV3IFJvbWFuIjt9CitwCisJe21hcmdpbi1yaWdodDowaW47CisJbXNvLW1hcmdpbi10b3AtYWx0OmF1dG87CisJbXNvLW1hcmdpbi1ib3R0b20tYWx0OmF1dG87CisJbWFyZ2luLWxlZnQ6MGluOworCW1zby1wYWdpbmF0aW9uOndpZG93LW9ycGhhbjsKKwlmb250LXNpemU6MTIuMHB0OworCWZvbnQtZmFtaWx5OiJUaW1lcyBOZXcgUm9tYW4iOworCW1zby1mYXJlYXN0LWZvbnQtZmFtaWx5OiJUaW1lcyBOZXcgUm9tYW4iO30KK3AuQmFsbG9vblRleHQsIGxpLkJhbGxvb25UZXh0LCBkaXYuQmFsbG9vblRleHQKKwl7bXNvLXN0eWxlLW5hbWU6IkJhbGxvb24gVGV4dCI7CisJbWFyZ2luOjBpbjsKKwltYXJnaW4tYm90dG9tOi4wMDAxcHQ7CisJbXNvLXBhZ2luYXRpb246d2lkb3ctb3JwaGFuOworCWZvbnQtc2l6ZTo4LjBwdDsKKwlmb250LWZhbWlseTpUYWhvbWE7CisJbXNvLWZhcmVhc3QtZm9udC1mYW1pbHk6IlRpbWVzIE5ldyBSb21hbiI7fQorQHBhZ2UgU2VjdGlvbjEKKwl7c2l6ZTo4LjVpbiAxMS4waW47CisJbWFyZ2luOjEuMGluIDEuMjVpbiAxLjBpbiAxLjI1aW47CisJbXNvLWhlYWRlci1tYXJnaW46LjVpbjsKKwltc28tZm9vdGVyLW1hcmdpbjouNWluOworCW1zby1wYXBlci1zb3VyY2U6MDt9CitkaXYuU2VjdGlvbjEKKwl7cGFnZTpTZWN0aW9uMTt9CistLT4KKzwvc3R5bGU+Cis8L2hlYWQ+CisKKzxib2R5IGxhbmc9RU4tVVMgc3R5bGU9J3RhYi1pbnRlcnZhbDouNWluJz4KKworPGRpdiBjbGFzcz1TZWN0aW9uMT4KKworPHAgYWxpZ249Y2VudGVyIHN0eWxlPSd0ZXh0LWFsaWduOmNlbnRlcic+PGI+RWNsaXBzZSBQdWJsaWMgTGljZW5zZSAtIHYgMS4wPC9iPgorPC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+VEhFIEFDQ09NUEFOWUlORyBQUk9HUkFNIElTIFBST1ZJREVEIFVOREVSCitUSEUgVEVSTVMgT0YgVEhJUyBFQ0xJUFNFIFBVQkxJQyBMSUNFTlNFICgmcXVvdDtBR1JFRU1FTlQmcXVvdDspLiBBTlkgVVNFLAorUkVQUk9EVUNUSU9OIE9SIERJU1RSSUJVVElPTiBPRiBUSEUgUFJPR1JBTSBDT05TVElUVVRFUyBSRUNJUElFTlQnUyBBQ0NFUFRBTkNFCitPRiBUSElTIEFHUkVFTUVOVC48L3NwYW4+IDwvcD4KKworPHA+PGI+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPjEuIERFRklOSVRJT05TPC9zcGFuPjwvYj4gPC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+JnF1b3Q7Q29udHJpYnV0aW9uJnF1b3Q7IG1lYW5zOjwvc3Bhbj4gPC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5hKQoraW4gdGhlIGNhc2Ugb2YgdGhlIGluaXRpYWwgQ29udHJpYnV0b3IsIHRoZSBpbml0aWFsIGNvZGUgYW5kIGRvY3VtZW50YXRpb24KK2Rpc3RyaWJ1dGVkIHVuZGVyIHRoaXMgQWdyZWVtZW50LCBhbmQ8YnIgY2xlYXI9bGVmdD4KK2IpIGluIHRoZSBjYXNlIG9mIGVhY2ggc3Vic2VxdWVudCBDb250cmlidXRvcjo8L3NwYW4+PC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5pKQorY2hhbmdlcyB0byB0aGUgUHJvZ3JhbSwgYW5kPC9zcGFuPjwvcD4KKworPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+aWkpCithZGRpdGlvbnMgdG8gdGhlIFByb2dyYW07PC9zcGFuPjwvcD4KKworPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+d2hlcmUKK3N1Y2ggY2hhbmdlcyBhbmQvb3IgYWRkaXRpb25zIHRvIHRoZSBQcm9ncmFtIG9yaWdpbmF0ZSBmcm9tIGFuZCBhcmUgZGlzdHJpYnV0ZWQKK2J5IHRoYXQgcGFydGljdWxhciBDb250cmlidXRvci4gQSBDb250cmlidXRpb24gJ29yaWdpbmF0ZXMnIGZyb20gYSBDb250cmlidXRvcgoraWYgaXQgd2FzIGFkZGVkIHRvIHRoZSBQcm9ncmFtIGJ5IHN1Y2ggQ29udHJpYnV0b3IgaXRzZWxmIG9yIGFueW9uZSBhY3Rpbmcgb24KK3N1Y2ggQ29udHJpYnV0b3IncyBiZWhhbGYuIENvbnRyaWJ1dGlvbnMgZG8gbm90IGluY2x1ZGUgYWRkaXRpb25zIHRvIHRoZQorUHJvZ3JhbSB3aGljaDogKGkpIGFyZSBzZXBhcmF0ZSBtb2R1bGVzIG9mIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIGluIGNvbmp1bmN0aW9uCit3aXRoIHRoZSBQcm9ncmFtIHVuZGVyIHRoZWlyIG93biBsaWNlbnNlIGFncmVlbWVudCwgYW5kIChpaSkgYXJlIG5vdCBkZXJpdmF0aXZlCit3b3JrcyBvZiB0aGUgUHJvZ3JhbS4gPC9zcGFuPjwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPiZxdW90O0NvbnRyaWJ1dG9yJnF1b3Q7IG1lYW5zIGFueSBwZXJzb24gb3IKK2VudGl0eSB0aGF0IGRpc3RyaWJ1dGVzIHRoZSBQcm9ncmFtLjwvc3Bhbj4gPC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+JnF1b3Q7TGljZW5zZWQgUGF0ZW50cyAmcXVvdDsgbWVhbiBwYXRlbnQKK2NsYWltcyBsaWNlbnNhYmxlIGJ5IGEgQ29udHJpYnV0b3Igd2hpY2ggYXJlIG5lY2Vzc2FyaWx5IGluZnJpbmdlZCBieSB0aGUgdXNlCitvciBzYWxlIG9mIGl0cyBDb250cmlidXRpb24gYWxvbmUgb3Igd2hlbiBjb21iaW5lZCB3aXRoIHRoZSBQcm9ncmFtLiA8L3NwYW4+PC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+JnF1b3Q7UHJvZ3JhbSZxdW90OyBtZWFucyB0aGUgQ29udHJpYnV0aW9ucworZGlzdHJpYnV0ZWQgaW4gYWNjb3JkYW5jZSB3aXRoIHRoaXMgQWdyZWVtZW50Ljwvc3Bhbj4gPC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+JnF1b3Q7UmVjaXBpZW50JnF1b3Q7IG1lYW5zIGFueW9uZSB3aG8KK3JlY2VpdmVzIHRoZSBQcm9ncmFtIHVuZGVyIHRoaXMgQWdyZWVtZW50LCBpbmNsdWRpbmcgYWxsIENvbnRyaWJ1dG9ycy48L3NwYW4+IDwvcD4KKworPHA+PGI+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPjIuIEdSQU5UIE9GIFJJR0hUUzwvc3Bhbj48L2I+IDwvcD4KKworPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YSkKK1N1YmplY3QgdG8gdGhlIHRlcm1zIG9mIHRoaXMgQWdyZWVtZW50LCBlYWNoIENvbnRyaWJ1dG9yIGhlcmVieSBncmFudHMgUmVjaXBpZW50CithIG5vbi1leGNsdXNpdmUsIHdvcmxkd2lkZSwgcm95YWx0eS1mcmVlIGNvcHlyaWdodCBsaWNlbnNlIHRvPHNwYW4KK3N0eWxlPSdjb2xvcjpyZWQnPiA8L3NwYW4+cmVwcm9kdWNlLCBwcmVwYXJlIGRlcml2YXRpdmUgd29ya3Mgb2YsIHB1YmxpY2x5CitkaXNwbGF5LCBwdWJsaWNseSBwZXJmb3JtLCBkaXN0cmlidXRlIGFuZCBzdWJsaWNlbnNlIHRoZSBDb250cmlidXRpb24gb2Ygc3VjaAorQ29udHJpYnV0b3IsIGlmIGFueSwgYW5kIHN1Y2ggZGVyaXZhdGl2ZSB3b3JrcywgaW4gc291cmNlIGNvZGUgYW5kIG9iamVjdCBjb2RlCitmb3JtLjwvc3Bhbj48L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmIpCitTdWJqZWN0IHRvIHRoZSB0ZXJtcyBvZiB0aGlzIEFncmVlbWVudCwgZWFjaCBDb250cmlidXRvciBoZXJlYnkgZ3JhbnRzCitSZWNpcGllbnQgYSBub24tZXhjbHVzaXZlLCB3b3JsZHdpZGUsPHNwYW4gc3R5bGU9J2NvbG9yOmdyZWVuJz4gPC9zcGFuPnJveWFsdHktZnJlZQorcGF0ZW50IGxpY2Vuc2UgdW5kZXIgTGljZW5zZWQgUGF0ZW50cyB0byBtYWtlLCB1c2UsIHNlbGwsIG9mZmVyIHRvIHNlbGwsIGltcG9ydAorYW5kIG90aGVyd2lzZSB0cmFuc2ZlciB0aGUgQ29udHJpYnV0aW9uIG9mIHN1Y2ggQ29udHJpYnV0b3IsIGlmIGFueSwgaW4gc291cmNlCitjb2RlIGFuZCBvYmplY3QgY29kZSBmb3JtLiBUaGlzIHBhdGVudCBsaWNlbnNlIHNoYWxsIGFwcGx5IHRvIHRoZSBjb21iaW5hdGlvbgorb2YgdGhlIENvbnRyaWJ1dGlvbiBhbmQgdGhlIFByb2dyYW0gaWYsIGF0IHRoZSB0aW1lIHRoZSBDb250cmlidXRpb24gaXMgYWRkZWQKK2J5IHRoZSBDb250cmlidXRvciwgc3VjaCBhZGRpdGlvbiBvZiB0aGUgQ29udHJpYnV0aW9uIGNhdXNlcyBzdWNoIGNvbWJpbmF0aW9uCit0byBiZSBjb3ZlcmVkIGJ5IHRoZSBMaWNlbnNlZCBQYXRlbnRzLiBUaGUgcGF0ZW50IGxpY2Vuc2Ugc2hhbGwgbm90IGFwcGx5IHRvCithbnkgb3RoZXIgY29tYmluYXRpb25zIHdoaWNoIGluY2x1ZGUgdGhlIENvbnRyaWJ1dGlvbi4gTm8gaGFyZHdhcmUgcGVyIHNlIGlzCitsaWNlbnNlZCBoZXJldW5kZXIuIDwvc3Bhbj48L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmMpCitSZWNpcGllbnQgdW5kZXJzdGFuZHMgdGhhdCBhbHRob3VnaCBlYWNoIENvbnRyaWJ1dG9yIGdyYW50cyB0aGUgbGljZW5zZXMgdG8gaXRzCitDb250cmlidXRpb25zIHNldCBmb3J0aCBoZXJlaW4sIG5vIGFzc3VyYW5jZXMgYXJlIHByb3ZpZGVkIGJ5IGFueSBDb250cmlidXRvcgordGhhdCB0aGUgUHJvZ3JhbSBkb2VzIG5vdCBpbmZyaW5nZSB0aGUgcGF0ZW50IG9yIG90aGVyIGludGVsbGVjdHVhbCBwcm9wZXJ0eQorcmlnaHRzIG9mIGFueSBvdGhlciBlbnRpdHkuIEVhY2ggQ29udHJpYnV0b3IgZGlzY2xhaW1zIGFueSBsaWFiaWxpdHkgdG8gUmVjaXBpZW50Citmb3IgY2xhaW1zIGJyb3VnaHQgYnkgYW55IG90aGVyIGVudGl0eSBiYXNlZCBvbiBpbmZyaW5nZW1lbnQgb2YgaW50ZWxsZWN0dWFsCitwcm9wZXJ0eSByaWdodHMgb3Igb3RoZXJ3aXNlLiBBcyBhIGNvbmRpdGlvbiB0byBleGVyY2lzaW5nIHRoZSByaWdodHMgYW5kCitsaWNlbnNlcyBncmFudGVkIGhlcmV1bmRlciwgZWFjaCBSZWNpcGllbnQgaGVyZWJ5IGFzc3VtZXMgc29sZSByZXNwb25zaWJpbGl0eQordG8gc2VjdXJlIGFueSBvdGhlciBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIG5lZWRlZCwgaWYgYW55LiBGb3IgZXhhbXBsZSwKK2lmIGEgdGhpcmQgcGFydHkgcGF0ZW50IGxpY2Vuc2UgaXMgcmVxdWlyZWQgdG8gYWxsb3cgUmVjaXBpZW50IHRvIGRpc3RyaWJ1dGUKK3RoZSBQcm9ncmFtLCBpdCBpcyBSZWNpcGllbnQncyByZXNwb25zaWJpbGl0eSB0byBhY3F1aXJlIHRoYXQgbGljZW5zZSBiZWZvcmUKK2Rpc3RyaWJ1dGluZyB0aGUgUHJvZ3JhbS48L3NwYW4+PC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5kKQorRWFjaCBDb250cmlidXRvciByZXByZXNlbnRzIHRoYXQgdG8gaXRzIGtub3dsZWRnZSBpdCBoYXMgc3VmZmljaWVudCBjb3B5cmlnaHQKK3JpZ2h0cyBpbiBpdHMgQ29udHJpYnV0aW9uLCBpZiBhbnksIHRvIGdyYW50IHRoZSBjb3B5cmlnaHQgbGljZW5zZSBzZXQgZm9ydGggaW4KK3RoaXMgQWdyZWVtZW50LiA8L3NwYW4+PC9wPgorCis8cD48Yj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+My4gUkVRVUlSRU1FTlRTPC9zcGFuPjwvYj4gPC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+QSBDb250cmlidXRvciBtYXkgY2hvb3NlIHRvIGRpc3RyaWJ1dGUgdGhlCitQcm9ncmFtIGluIG9iamVjdCBjb2RlIGZvcm0gdW5kZXIgaXRzIG93biBsaWNlbnNlIGFncmVlbWVudCwgcHJvdmlkZWQgdGhhdDo8L3NwYW4+Cis8L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmEpCitpdCBjb21wbGllcyB3aXRoIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGlzIEFncmVlbWVudDsgYW5kPC9zcGFuPjwvcD4KKworPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YikKK2l0cyBsaWNlbnNlIGFncmVlbWVudDo8L3NwYW4+PC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5pKQorZWZmZWN0aXZlbHkgZGlzY2xhaW1zIG9uIGJlaGFsZiBvZiBhbGwgQ29udHJpYnV0b3JzIGFsbCB3YXJyYW50aWVzIGFuZAorY29uZGl0aW9ucywgZXhwcmVzcyBhbmQgaW1wbGllZCwgaW5jbHVkaW5nIHdhcnJhbnRpZXMgb3IgY29uZGl0aW9ucyBvZiB0aXRsZQorYW5kIG5vbi1pbmZyaW5nZW1lbnQsIGFuZCBpbXBsaWVkIHdhcnJhbnRpZXMgb3IgY29uZGl0aW9ucyBvZiBtZXJjaGFudGFiaWxpdHkKK2FuZCBmaXRuZXNzIGZvciBhIHBhcnRpY3VsYXIgcHVycG9zZTsgPC9zcGFuPjwvcD4KKworPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+aWkpCitlZmZlY3RpdmVseSBleGNsdWRlcyBvbiBiZWhhbGYgb2YgYWxsIENvbnRyaWJ1dG9ycyBhbGwgbGlhYmlsaXR5IGZvciBkYW1hZ2VzLAoraW5jbHVkaW5nIGRpcmVjdCwgaW5kaXJlY3QsIHNwZWNpYWwsIGluY2lkZW50YWwgYW5kIGNvbnNlcXVlbnRpYWwgZGFtYWdlcywgc3VjaAorYXMgbG9zdCBwcm9maXRzOyA8L3NwYW4+PC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5paWkpCitzdGF0ZXMgdGhhdCBhbnkgcHJvdmlzaW9ucyB3aGljaCBkaWZmZXIgZnJvbSB0aGlzIEFncmVlbWVudCBhcmUgb2ZmZXJlZCBieSB0aGF0CitDb250cmlidXRvciBhbG9uZSBhbmQgbm90IGJ5IGFueSBvdGhlciBwYXJ0eTsgYW5kPC9zcGFuPjwvcD4KKworPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+aXYpCitzdGF0ZXMgdGhhdCBzb3VyY2UgY29kZSBmb3IgdGhlIFByb2dyYW0gaXMgYXZhaWxhYmxlIGZyb20gc3VjaCBDb250cmlidXRvciwgYW5kCitpbmZvcm1zIGxpY2Vuc2VlcyBob3cgdG8gb2J0YWluIGl0IGluIGEgcmVhc29uYWJsZSBtYW5uZXIgb24gb3IgdGhyb3VnaCBhCittZWRpdW0gY3VzdG9tYXJpbHkgdXNlZCBmb3Igc29mdHdhcmUgZXhjaGFuZ2UuPHNwYW4gc3R5bGU9J2NvbG9yOmJsdWUnPiA8L3NwYW4+PC9zcGFuPjwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPldoZW4gdGhlIFByb2dyYW0gaXMgbWFkZSBhdmFpbGFibGUgaW4gc291cmNlCitjb2RlIGZvcm06PC9zcGFuPiA8L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmEpCitpdCBtdXN0IGJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoaXMgQWdyZWVtZW50OyBhbmQgPC9zcGFuPjwvcD4KKworPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YikgYQorY29weSBvZiB0aGlzIEFncmVlbWVudCBtdXN0IGJlIGluY2x1ZGVkIHdpdGggZWFjaCBjb3B5IG9mIHRoZSBQcm9ncmFtLiA8L3NwYW4+PC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+Q29udHJpYnV0b3JzIG1heSBub3QgcmVtb3ZlIG9yIGFsdGVyIGFueQorY29weXJpZ2h0IG5vdGljZXMgY29udGFpbmVkIHdpdGhpbiB0aGUgUHJvZ3JhbS4gPC9zcGFuPjwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkVhY2ggQ29udHJpYnV0b3IgbXVzdCBpZGVudGlmeSBpdHNlbGYgYXMgdGhlCitvcmlnaW5hdG9yIG9mIGl0cyBDb250cmlidXRpb24sIGlmIGFueSwgaW4gYSBtYW5uZXIgdGhhdCByZWFzb25hYmx5IGFsbG93cworc3Vic2VxdWVudCBSZWNpcGllbnRzIHRvIGlkZW50aWZ5IHRoZSBvcmlnaW5hdG9yIG9mIHRoZSBDb250cmlidXRpb24uIDwvc3Bhbj48L3A+CisKKzxwPjxiPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz40LiBDT01NRVJDSUFMIERJU1RSSUJVVElPTjwvc3Bhbj48L2I+IDwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkNvbW1lcmNpYWwgZGlzdHJpYnV0b3JzIG9mIHNvZnR3YXJlIG1heQorYWNjZXB0IGNlcnRhaW4gcmVzcG9uc2liaWxpdGllcyB3aXRoIHJlc3BlY3QgdG8gZW5kIHVzZXJzLCBidXNpbmVzcyBwYXJ0bmVycworYW5kIHRoZSBsaWtlLiBXaGlsZSB0aGlzIGxpY2Vuc2UgaXMgaW50ZW5kZWQgdG8gZmFjaWxpdGF0ZSB0aGUgY29tbWVyY2lhbCB1c2UKK29mIHRoZSBQcm9ncmFtLCB0aGUgQ29udHJpYnV0b3Igd2hvIGluY2x1ZGVzIHRoZSBQcm9ncmFtIGluIGEgY29tbWVyY2lhbAorcHJvZHVjdCBvZmZlcmluZyBzaG91bGQgZG8gc28gaW4gYSBtYW5uZXIgd2hpY2ggZG9lcyBub3QgY3JlYXRlIHBvdGVudGlhbAorbGlhYmlsaXR5IGZvciBvdGhlciBDb250cmlidXRvcnMuIFRoZXJlZm9yZSwgaWYgYSBDb250cmlidXRvciBpbmNsdWRlcyB0aGUKK1Byb2dyYW0gaW4gYSBjb21tZXJjaWFsIHByb2R1Y3Qgb2ZmZXJpbmcsIHN1Y2ggQ29udHJpYnV0b3IgKCZxdW90O0NvbW1lcmNpYWwKK0NvbnRyaWJ1dG9yJnF1b3Q7KSBoZXJlYnkgYWdyZWVzIHRvIGRlZmVuZCBhbmQgaW5kZW1uaWZ5IGV2ZXJ5IG90aGVyCitDb250cmlidXRvciAoJnF1b3Q7SW5kZW1uaWZpZWQgQ29udHJpYnV0b3ImcXVvdDspIGFnYWluc3QgYW55IGxvc3NlcywgZGFtYWdlcyBhbmQKK2Nvc3RzIChjb2xsZWN0aXZlbHkgJnF1b3Q7TG9zc2VzJnF1b3Q7KSBhcmlzaW5nIGZyb20gY2xhaW1zLCBsYXdzdWl0cyBhbmQgb3RoZXIKK2xlZ2FsIGFjdGlvbnMgYnJvdWdodCBieSBhIHRoaXJkIHBhcnR5IGFnYWluc3QgdGhlIEluZGVtbmlmaWVkIENvbnRyaWJ1dG9yIHRvCit0aGUgZXh0ZW50IGNhdXNlZCBieSB0aGUgYWN0cyBvciBvbWlzc2lvbnMgb2Ygc3VjaCBDb21tZXJjaWFsIENvbnRyaWJ1dG9yIGluCitjb25uZWN0aW9uIHdpdGggaXRzIGRpc3RyaWJ1dGlvbiBvZiB0aGUgUHJvZ3JhbSBpbiBhIGNvbW1lcmNpYWwgcHJvZHVjdAorb2ZmZXJpbmcuIFRoZSBvYmxpZ2F0aW9ucyBpbiB0aGlzIHNlY3Rpb24gZG8gbm90IGFwcGx5IHRvIGFueSBjbGFpbXMgb3IgTG9zc2VzCityZWxhdGluZyB0byBhbnkgYWN0dWFsIG9yIGFsbGVnZWQgaW50ZWxsZWN0dWFsIHByb3BlcnR5IGluZnJpbmdlbWVudC4gSW4gb3JkZXIKK3RvIHF1YWxpZnksIGFuIEluZGVtbmlmaWVkIENvbnRyaWJ1dG9yIG11c3Q6IGEpIHByb21wdGx5IG5vdGlmeSB0aGUgQ29tbWVyY2lhbAorQ29udHJpYnV0b3IgaW4gd3JpdGluZyBvZiBzdWNoIGNsYWltLCBhbmQgYikgYWxsb3cgdGhlIENvbW1lcmNpYWwgQ29udHJpYnV0b3IKK3RvIGNvbnRyb2wsIGFuZCBjb29wZXJhdGUgd2l0aCB0aGUgQ29tbWVyY2lhbCBDb250cmlidXRvciBpbiwgdGhlIGRlZmVuc2UgYW5kCithbnkgcmVsYXRlZCBzZXR0bGVtZW50IG5lZ290aWF0aW9ucy4gVGhlIEluZGVtbmlmaWVkIENvbnRyaWJ1dG9yIG1heSBwYXJ0aWNpcGF0ZQoraW4gYW55IHN1Y2ggY2xhaW0gYXQgaXRzIG93biBleHBlbnNlLjwvc3Bhbj4gPC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+Rm9yIGV4YW1wbGUsIGEgQ29udHJpYnV0b3IgbWlnaHQgaW5jbHVkZSB0aGUKK1Byb2dyYW0gaW4gYSBjb21tZXJjaWFsIHByb2R1Y3Qgb2ZmZXJpbmcsIFByb2R1Y3QgWC4gVGhhdCBDb250cmlidXRvciBpcyB0aGVuIGEKK0NvbW1lcmNpYWwgQ29udHJpYnV0b3IuIElmIHRoYXQgQ29tbWVyY2lhbCBDb250cmlidXRvciB0aGVuIG1ha2VzIHBlcmZvcm1hbmNlCitjbGFpbXMsIG9yIG9mZmVycyB3YXJyYW50aWVzIHJlbGF0ZWQgdG8gUHJvZHVjdCBYLCB0aG9zZSBwZXJmb3JtYW5jZSBjbGFpbXMgYW5kCit3YXJyYW50aWVzIGFyZSBzdWNoIENvbW1lcmNpYWwgQ29udHJpYnV0b3IncyByZXNwb25zaWJpbGl0eSBhbG9uZS4gVW5kZXIgdGhpcworc2VjdGlvbiwgdGhlIENvbW1lcmNpYWwgQ29udHJpYnV0b3Igd291bGQgaGF2ZSB0byBkZWZlbmQgY2xhaW1zIGFnYWluc3QgdGhlCitvdGhlciBDb250cmlidXRvcnMgcmVsYXRlZCB0byB0aG9zZSBwZXJmb3JtYW5jZSBjbGFpbXMgYW5kIHdhcnJhbnRpZXMsIGFuZCBpZiBhCitjb3VydCByZXF1aXJlcyBhbnkgb3RoZXIgQ29udHJpYnV0b3IgdG8gcGF5IGFueSBkYW1hZ2VzIGFzIGEgcmVzdWx0LCB0aGUKK0NvbW1lcmNpYWwgQ29udHJpYnV0b3IgbXVzdCBwYXkgdGhvc2UgZGFtYWdlcy48L3NwYW4+IDwvcD4KKworPHA+PGI+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPjUuIE5PIFdBUlJBTlRZPC9zcGFuPjwvYj4gPC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+RVhDRVBUIEFTIEVYUFJFU1NMWSBTRVQgRk9SVEggSU4gVEhJUworQUdSRUVNRU5ULCBUSEUgUFJPR1JBTSBJUyBQUk9WSURFRCBPTiBBTiAmcXVvdDtBUyBJUyZxdW90OyBCQVNJUywgV0lUSE9VVAorV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBFSVRIRVIgRVhQUkVTUyBPUiBJTVBMSUVEIElOQ0xVRElORywKK1dJVEhPVVQgTElNSVRBVElPTiwgQU5ZIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBUSVRMRSwgTk9OLUlORlJJTkdFTUVOVCwKK01FUkNIQU5UQUJJTElUWSBPUiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gRWFjaCBSZWNpcGllbnQgaXMgc29sZWx5CityZXNwb25zaWJsZSBmb3IgZGV0ZXJtaW5pbmcgdGhlIGFwcHJvcHJpYXRlbmVzcyBvZiB1c2luZyBhbmQgZGlzdHJpYnV0aW5nIHRoZQorUHJvZ3JhbSBhbmQgYXNzdW1lcyBhbGwgcmlza3MgYXNzb2NpYXRlZCB3aXRoIGl0cyBleGVyY2lzZSBvZiByaWdodHMgdW5kZXIgdGhpcworQWdyZWVtZW50ICwgaW5jbHVkaW5nIGJ1dCBub3QgbGltaXRlZCB0byB0aGUgcmlza3MgYW5kIGNvc3RzIG9mIHByb2dyYW0gZXJyb3JzLAorY29tcGxpYW5jZSB3aXRoIGFwcGxpY2FibGUgbGF3cywgZGFtYWdlIHRvIG9yIGxvc3Mgb2YgZGF0YSwgcHJvZ3JhbXMgb3IKK2VxdWlwbWVudCwgYW5kIHVuYXZhaWxhYmlsaXR5IG9yIGludGVycnVwdGlvbiBvZiBvcGVyYXRpb25zLiA8L3NwYW4+PC9wPgorCis8cD48Yj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+Ni4gRElTQ0xBSU1FUiBPRiBMSUFCSUxJVFk8L3NwYW4+PC9iPiA8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5FWENFUFQgQVMgRVhQUkVTU0xZIFNFVCBGT1JUSCBJTiBUSElTCitBR1JFRU1FTlQsIE5FSVRIRVIgUkVDSVBJRU5UIE5PUiBBTlkgQ09OVFJJQlVUT1JTIFNIQUxMIEhBVkUgQU5ZIExJQUJJTElUWSBGT1IKK0FOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworKElOQ0xVRElORyBXSVRIT1VUIExJTUlUQVRJT04gTE9TVCBQUk9GSVRTKSwgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKK09GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HCitORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9SIERJU1RSSUJVVElPTiBPRgorVEhFIFBST0dSQU0gT1IgVEhFIEVYRVJDSVNFIE9GIEFOWSBSSUdIVFMgR1JBTlRFRCBIRVJFVU5ERVIsIEVWRU4gSUYgQURWSVNFRCBPRgorVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFUy48L3NwYW4+IDwvcD4KKworPHA+PGI+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPjcuIEdFTkVSQUw8L3NwYW4+PC9iPiA8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5JZiBhbnkgcHJvdmlzaW9uIG9mIHRoaXMgQWdyZWVtZW50IGlzIGludmFsaWQKK29yIHVuZW5mb3JjZWFibGUgdW5kZXIgYXBwbGljYWJsZSBsYXcsIGl0IHNoYWxsIG5vdCBhZmZlY3QgdGhlIHZhbGlkaXR5IG9yCitlbmZvcmNlYWJpbGl0eSBvZiB0aGUgcmVtYWluZGVyIG9mIHRoZSB0ZXJtcyBvZiB0aGlzIEFncmVlbWVudCwgYW5kIHdpdGhvdXQKK2Z1cnRoZXIgYWN0aW9uIGJ5IHRoZSBwYXJ0aWVzIGhlcmV0bywgc3VjaCBwcm92aXNpb24gc2hhbGwgYmUgcmVmb3JtZWQgdG8gdGhlCittaW5pbXVtIGV4dGVudCBuZWNlc3NhcnkgdG8gbWFrZSBzdWNoIHByb3Zpc2lvbiB2YWxpZCBhbmQgZW5mb3JjZWFibGUuPC9zcGFuPiA8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5JZiBSZWNpcGllbnQgaW5zdGl0dXRlcyBwYXRlbnQgbGl0aWdhdGlvbgorYWdhaW5zdCBhbnkgZW50aXR5IChpbmNsdWRpbmcgYSBjcm9zcy1jbGFpbSBvciBjb3VudGVyY2xhaW0gaW4gYSBsYXdzdWl0KQorYWxsZWdpbmcgdGhhdCB0aGUgUHJvZ3JhbSBpdHNlbGYgKGV4Y2x1ZGluZyBjb21iaW5hdGlvbnMgb2YgdGhlIFByb2dyYW0gd2l0aAorb3RoZXIgc29mdHdhcmUgb3IgaGFyZHdhcmUpIGluZnJpbmdlcyBzdWNoIFJlY2lwaWVudCdzIHBhdGVudChzKSwgdGhlbiBzdWNoCitSZWNpcGllbnQncyByaWdodHMgZ3JhbnRlZCB1bmRlciBTZWN0aW9uIDIoYikgc2hhbGwgdGVybWluYXRlIGFzIG9mIHRoZSBkYXRlCitzdWNoIGxpdGlnYXRpb24gaXMgZmlsZWQuIDwvc3Bhbj48L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5BbGwgUmVjaXBpZW50J3MgcmlnaHRzIHVuZGVyIHRoaXMgQWdyZWVtZW50CitzaGFsbCB0ZXJtaW5hdGUgaWYgaXQgZmFpbHMgdG8gY29tcGx5IHdpdGggYW55IG9mIHRoZSBtYXRlcmlhbCB0ZXJtcyBvcgorY29uZGl0aW9ucyBvZiB0aGlzIEFncmVlbWVudCBhbmQgZG9lcyBub3QgY3VyZSBzdWNoIGZhaWx1cmUgaW4gYSByZWFzb25hYmxlCitwZXJpb2Qgb2YgdGltZSBhZnRlciBiZWNvbWluZyBhd2FyZSBvZiBzdWNoIG5vbmNvbXBsaWFuY2UuIElmIGFsbCBSZWNpcGllbnQncworcmlnaHRzIHVuZGVyIHRoaXMgQWdyZWVtZW50IHRlcm1pbmF0ZSwgUmVjaXBpZW50IGFncmVlcyB0byBjZWFzZSB1c2UgYW5kCitkaXN0cmlidXRpb24gb2YgdGhlIFByb2dyYW0gYXMgc29vbiBhcyByZWFzb25hYmx5IHByYWN0aWNhYmxlLiBIb3dldmVyLAorUmVjaXBpZW50J3Mgb2JsaWdhdGlvbnMgdW5kZXIgdGhpcyBBZ3JlZW1lbnQgYW5kIGFueSBsaWNlbnNlcyBncmFudGVkIGJ5CitSZWNpcGllbnQgcmVsYXRpbmcgdG8gdGhlIFByb2dyYW0gc2hhbGwgY29udGludWUgYW5kIHN1cnZpdmUuIDwvc3Bhbj48L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5FdmVyeW9uZSBpcyBwZXJtaXR0ZWQgdG8gY29weSBhbmQgZGlzdHJpYnV0ZQorY29waWVzIG9mIHRoaXMgQWdyZWVtZW50LCBidXQgaW4gb3JkZXIgdG8gYXZvaWQgaW5jb25zaXN0ZW5jeSB0aGUgQWdyZWVtZW50IGlzCitjb3B5cmlnaHRlZCBhbmQgbWF5IG9ubHkgYmUgbW9kaWZpZWQgaW4gdGhlIGZvbGxvd2luZyBtYW5uZXIuIFRoZSBBZ3JlZW1lbnQKK1N0ZXdhcmQgcmVzZXJ2ZXMgdGhlIHJpZ2h0IHRvIHB1Ymxpc2ggbmV3IHZlcnNpb25zIChpbmNsdWRpbmcgcmV2aXNpb25zKSBvZgordGhpcyBBZ3JlZW1lbnQgZnJvbSB0aW1lIHRvIHRpbWUuIE5vIG9uZSBvdGhlciB0aGFuIHRoZSBBZ3JlZW1lbnQgU3Rld2FyZCBoYXMKK3RoZSByaWdodCB0byBtb2RpZnkgdGhpcyBBZ3JlZW1lbnQuIFRoZSBFY2xpcHNlIEZvdW5kYXRpb24gaXMgdGhlIGluaXRpYWwKK0FncmVlbWVudCBTdGV3YXJkLiBUaGUgRWNsaXBzZSBGb3VuZGF0aW9uIG1heSBhc3NpZ24gdGhlIHJlc3BvbnNpYmlsaXR5IHRvCitzZXJ2ZSBhcyB0aGUgQWdyZWVtZW50IFN0ZXdhcmQgdG8gYSBzdWl0YWJsZSBzZXBhcmF0ZSBlbnRpdHkuIEVhY2ggbmV3IHZlcnNpb24KK29mIHRoZSBBZ3JlZW1lbnQgd2lsbCBiZSBnaXZlbiBhIGRpc3Rpbmd1aXNoaW5nIHZlcnNpb24gbnVtYmVyLiBUaGUgUHJvZ3JhbQorKGluY2x1ZGluZyBDb250cmlidXRpb25zKSBtYXkgYWx3YXlzIGJlIGRpc3RyaWJ1dGVkIHN1YmplY3QgdG8gdGhlIHZlcnNpb24gb2YKK3RoZSBBZ3JlZW1lbnQgdW5kZXIgd2hpY2ggaXQgd2FzIHJlY2VpdmVkLiBJbiBhZGRpdGlvbiwgYWZ0ZXIgYSBuZXcgdmVyc2lvbiBvZgordGhlIEFncmVlbWVudCBpcyBwdWJsaXNoZWQsIENvbnRyaWJ1dG9yIG1heSBlbGVjdCB0byBkaXN0cmlidXRlIHRoZSBQcm9ncmFtCisoaW5jbHVkaW5nIGl0cyBDb250cmlidXRpb25zKSB1bmRlciB0aGUgbmV3IHZlcnNpb24uIEV4Y2VwdCBhcyBleHByZXNzbHkgc3RhdGVkCitpbiBTZWN0aW9ucyAyKGEpIGFuZCAyKGIpIGFib3ZlLCBSZWNpcGllbnQgcmVjZWl2ZXMgbm8gcmlnaHRzIG9yIGxpY2Vuc2VzIHRvCit0aGUgaW50ZWxsZWN0dWFsIHByb3BlcnR5IG9mIGFueSBDb250cmlidXRvciB1bmRlciB0aGlzIEFncmVlbWVudCwgd2hldGhlcgorZXhwcmVzc2x5LCBieSBpbXBsaWNhdGlvbiwgZXN0b3BwZWwgb3Igb3RoZXJ3aXNlLiBBbGwgcmlnaHRzIGluIHRoZSBQcm9ncmFtIG5vdAorZXhwcmVzc2x5IGdyYW50ZWQgdW5kZXIgdGhpcyBBZ3JlZW1lbnQgYXJlIHJlc2VydmVkLjwvc3Bhbj4gPC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+VGhpcyBBZ3JlZW1lbnQgaXMgZ292ZXJuZWQgYnkgdGhlIGxhd3Mgb2YgdGhlCitTdGF0ZSBvZiBOZXcgWW9yayBhbmQgdGhlIGludGVsbGVjdHVhbCBwcm9wZXJ0eSBsYXdzIG9mIHRoZSBVbml0ZWQgU3RhdGVzIG9mCitBbWVyaWNhLiBObyBwYXJ0eSB0byB0aGlzIEFncmVlbWVudCB3aWxsIGJyaW5nIGEgbGVnYWwgYWN0aW9uIHVuZGVyIHRoaXMKK0FncmVlbWVudCBtb3JlIHRoYW4gb25lIHllYXIgYWZ0ZXIgdGhlIGNhdXNlIG9mIGFjdGlvbiBhcm9zZS4gRWFjaCBwYXJ0eSB3YWl2ZXMKK2l0cyByaWdodHMgdG8gYSBqdXJ5IHRyaWFsIGluIGFueSByZXN1bHRpbmcgbGl0aWdhdGlvbi48L3NwYW4+IDwvcD4KKworPHAgY2xhc3M9TXNvTm9ybWFsPjwhW2lmICFzdXBwb3J0RW1wdHlQYXJhc10+Jm5ic3A7PCFbZW5kaWZdPjxvOnA+PC9vOnA+PC9wPgorCis8L2Rpdj4KKworPC9ib2R5PgorCis8L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLnRyYW5zcG9ydGF0aW9uLmZlYXR1cmUvZmVhdHVyZS5wcm9wZXJ0aWVzIGIvZmVhdHVyZXMvb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLnRyYW5zcG9ydGF0aW9uLmZlYXR1cmUvZmVhdHVyZS5wcm9wZXJ0aWVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI0YjYzZDYKLS0tIC9kZXYvbnVsbAorKysgYi9mZWF0dXJlcy9vcmcuZWNsaXBzZS5zdGVtLmRhdGEudHJhbnNwb3J0YXRpb24uZmVhdHVyZS9mZWF0dXJlLnByb3BlcnRpZXMKQEAgLTAsMCArMSwxNzQgQEAKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQ29weXJpZ2h0IChjKSAyMDExIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorIyBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisjIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorIyB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorIyBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorIyAKKyMgQ29udHJpYnV0b3JzOgorIyAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIGZlYXR1cmUucHJvcGVydGllcworIyBjb250YWlucyBleHRlcm5hbGl6ZWQgc3RyaW5ncyBmb3IgZmVhdHVyZS54bWwKKyMgIiVmb28iIGluIGZlYXR1cmUueG1sIGNvcnJlc3BvbmRzIHRvIHRoZSBrZXkgImZvbyIgaW4gdGhpcyBmaWxlCisjIGphdmEuaW8uUHJvcGVydGllcyBmaWxlIChJU08gODg1OS0xIHdpdGggIlwiIGVzY2FwZXMpCisjIFRoaXMgZmlsZSBzaG91bGQgYmUgdHJhbnNsYXRlZC4KKworIyAiZmVhdHVyZU5hbWUiIHByb3BlcnR5IC0gbmFtZSBvZiB0aGUgZmVhdHVyZQorZmVhdHVyZU5hbWU9U1RFTSBUcmFuc3BvcnRhdGlvbiBEYXRhCisKKyMgInByb3ZpZGVyTmFtZSIgcHJvcGVydHkgLSBuYW1lIG9mIHRoZSBjb21wYW55IHRoYXQgcHJvdmlkZXMgdGhlIGZlYXR1cmUKK3Byb3ZpZGVyTmFtZT1FY2xpcHNlLm9yZworCisjICJ1cGRhdGVTaXRlTmFtZSIgcHJvcGVydHkgLSBsYWJlbCBmb3IgdGhlIHVwZGF0ZSBzaXRlCit1cGRhdGVTaXRlTmFtZT1TVEVNIFVwZGF0ZXMKKworIyAic2Vjb25kYXJ5U2l0ZU5hbWUiIHByb3BlcnR5IC0gbGFiZWwgZm9yIHRoZSBzZWNvbmRhcnkgdXBkYXRlIHNpdGUKKyNzZWNvbmRhcnlVcGRhdGVTaXRlTmFtZT1TVEVNIFVwZGF0ZXMKKworIyAiZGVzY3JpcHRpb24iIHByb3BlcnR5IC0gZGVzY3JpcHRpb24gb2YgdGhlIGZlYXR1cmUKK2Rlc2NyaXB0aW9uPURhdGEgYWJvdXQgdHJhbnNwb3J0YXRpb24gdmVjdG9ycywgaW5jbHVkaW5nIGF1dG9tb2JpbGUgXAorcm9hZHMgYW5kIGFpciB0cmFuc2l0IHJvdXRlcywgZm9yIHZhcmlvdXMgY291bnRyaWVzCisKKyMgImNvcHlyaWdodCIgcHJvcGVydHkgLSB0ZXh0IG9mIHRoZSAiRmVhdHVyZSBVcGRhdGUgQ29weXJpZ2h0IgorY29weXJpZ2h0PVwKK0NvcHlyaWdodCAoYykgMjAwNy0yMDExIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLlxuXAorQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFsc1xuXAorYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wXG5cCit3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdFxuXAoraHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWxcblwKK1xuXAorQ29udHJpYnV0b3JzOlxuXAorICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvblxuCisjIyMjIyMjIyMjIyMjIyMjIGVuZCBvZiBjb3B5cmlnaHQgcHJvcGVydHkgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyMgImxpY2Vuc2VVUkwiIHByb3BlcnR5IC0gVVJMIG9mIHRoZSAiRmVhdHVyZSBMaWNlbnNlIgorIyBkbyBub3QgdHJhbnNsYXRlIHZhbHVlIC0ganVzdCBjaGFuZ2UgdG8gcG9pbnQgdG8gYSBsb2NhbGUtc3BlY2lmaWMgSFRNTCBwYWdlCitsaWNlbnNlVVJMPWxpY2Vuc2UuaHRtbAorCisjICJsaWNlbnNlIiBwcm9wZXJ0eSAtIHRleHQgb2YgdGhlICJGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlIgorIyBzaG91bGQgYmUgcGxhaW4gdGV4dCB2ZXJzaW9uIG9mIGxpY2Vuc2UgYWdyZWVtZW50IHBvaW50ZWQgdG8gYmUgImxpY2Vuc2VVUkwiCitsaWNlbnNlPVwKK0VjbGlwc2UgRm91bmRhdGlvbiBTb2Z0d2FyZSBVc2VyIEFncmVlbWVudFxuXAorQXByaWwgMTQsIDIwMTBcblwKK1xuXAorVXNhZ2UgT2YgQ29udGVudFxuXAorXG5cCitUSEUgRUNMSVBTRSBGT1VOREFUSU9OIE1BS0VTIEFWQUlMQUJMRSBTT0ZUV0FSRSwgRE9DVU1FTlRBVElPTiwgSU5GT1JNQVRJT04gQU5EL09SXG5cCitPVEhFUiBNQVRFUklBTFMgRk9SIE9QRU4gU09VUkNFIFBST0pFQ1RTIChDT0xMRUNUSVZFTFkgIkNPTlRFTlQiKS5cblwKK1VTRSBPRiBUSEUgQ09OVEVOVCBJUyBHT1ZFUk5FRCBCWSBUSEUgVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgVEhJU1xuXAorQUdSRUVNRU5UIEFORC9PUiBUSEUgVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgTElDRU5TRSBBR1JFRU1FTlRTIE9SXG5cCitOT1RJQ0VTIElORElDQVRFRCBPUiBSRUZFUkVOQ0VEIEJFTE9XLiAgQlkgVVNJTkcgVEhFIENPTlRFTlQsIFlPVVxuXAorQUdSRUUgVEhBVCBZT1VSIFVTRSBPRiBUSEUgQ09OVEVOVCBJUyBHT1ZFUk5FRCBCWSBUSElTIEFHUkVFTUVOVFxuXAorQU5EL09SIFRIRSBURVJNUyBBTkQgQ09ORElUSU9OUyBPRiBBTlkgQVBQTElDQUJMRSBMSUNFTlNFIEFHUkVFTUVOVFNcblwKK09SIE5PVElDRVMgSU5ESUNBVEVEIE9SIFJFRkVSRU5DRUQgQkVMT1cuICBJRiBZT1UgRE8gTk9UIEFHUkVFIFRPIFRIRVxuXAorVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgVEhJUyBBR1JFRU1FTlQgQU5EIFRIRSBURVJNUyBBTkQgQ09ORElUSU9OU1xuXAorT0YgQU5ZIEFQUExJQ0FCTEUgTElDRU5TRSBBR1JFRU1FTlRTIE9SIE5PVElDRVMgSU5ESUNBVEVEIE9SIFJFRkVSRU5DRURcblwKK0JFTE9XLCBUSEVOIFlPVSBNQVkgTk9UIFVTRSBUSEUgQ09OVEVOVC5cblwKK1xuXAorQXBwbGljYWJsZSBMaWNlbnNlc1xuXAorXG5cCitVbmxlc3Mgb3RoZXJ3aXNlIGluZGljYXRlZCwgYWxsIENvbnRlbnQgbWFkZSBhdmFpbGFibGUgYnkgdGhlXG5cCitFY2xpcHNlIEZvdW5kYXRpb24gaXMgcHJvdmlkZWQgdG8geW91IHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZlxuXAordGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjAgKCJFUEwiKS4gQSBjb3B5IG9mIHRoZSBFUEwgaXNcblwKK3Byb3ZpZGVkIHdpdGggdGhpcyBDb250ZW50IGFuZCBpcyBhbHNvIGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbC5cblwKK0ZvciBwdXJwb3NlcyBvZiB0aGUgRVBMLCAiUHJvZ3JhbSIgd2lsbCBtZWFuIHRoZSBDb250ZW50LlxuXAorXG5cCitDb250ZW50IGluY2x1ZGVzLCBidXQgaXMgbm90IGxpbWl0ZWQgdG8sIHNvdXJjZSBjb2RlLCBvYmplY3QgY29kZSxcblwKK2RvY3VtZW50YXRpb24gYW5kIG90aGVyIGZpbGVzIG1haW50YWluZWQgaW4gdGhlIEVjbGlwc2UgRm91bmRhdGlvbiBzb3VyY2UgY29kZVxuXAorcmVwb3NpdG9yeSAoIlJlcG9zaXRvcnkiKSBpbiBzb2Z0d2FyZSBtb2R1bGVzICgiTW9kdWxlcyIpIGFuZCBtYWRlIGF2YWlsYWJsZVxuXAorYXMgZG93bmxvYWRhYmxlIGFyY2hpdmVzICgiRG93bmxvYWRzIikuXG5cCitcblwKKyAgICAgICAtIENvbnRlbnQgbWF5IGJlIHN0cnVjdHVyZWQgYW5kIHBhY2thZ2VkIGludG8gbW9kdWxlcyB0byBmYWNpbGl0YXRlIGRlbGl2ZXJpbmcsXG5cCisgICAgICAgICBleHRlbmRpbmcsIGFuZCB1cGdyYWRpbmcgdGhlIENvbnRlbnQuIFR5cGljYWwgbW9kdWxlcyBtYXkgaW5jbHVkZSBwbHVnLWlucyAoIlBsdWctaW5zIiksXG5cCisgICAgICAgICBwbHVnLWluIGZyYWdtZW50cyAoIkZyYWdtZW50cyIpLCBhbmQgZmVhdHVyZXMgKCJGZWF0dXJlcyIpLlxuXAorICAgICAgIC0gRWFjaCBQbHVnLWluIG9yIEZyYWdtZW50IG1heSBiZSBwYWNrYWdlZCBhcyBhIHN1Yi1kaXJlY3Rvcnkgb3IgSkFSIChKYXZhKFRNKSBBUmNoaXZlKVxuXAorICAgICAgICAgaW4gYSBkaXJlY3RvcnkgbmFtZWQgInBsdWdpbnMiLlxuXAorICAgICAgIC0gQSBGZWF0dXJlIGlzIGEgYnVuZGxlIG9mIG9uZSBvciBtb3JlIFBsdWctaW5zIGFuZC9vciBGcmFnbWVudHMgYW5kIGFzc29jaWF0ZWQgbWF0ZXJpYWwuXG5cCisgICAgICAgICBFYWNoIEZlYXR1cmUgbWF5IGJlIHBhY2thZ2VkIGFzIGEgc3ViLWRpcmVjdG9yeSBpbiBhIGRpcmVjdG9yeSBuYW1lZCAiZmVhdHVyZXMiLlxuXAorICAgICAgICAgV2l0aGluIGEgRmVhdHVyZSwgZmlsZXMgbmFtZWQgImZlYXR1cmUueG1sIiBtYXkgY29udGFpbiBhIGxpc3Qgb2YgdGhlIG5hbWVzIGFuZCB2ZXJzaW9uXG5cCisgICAgICAgICBudW1iZXJzIG9mIHRoZSBQbHVnLWlucyBhbmQvb3IgRnJhZ21lbnRzIGFzc29jaWF0ZWQgd2l0aCB0aGF0IEZlYXR1cmUuXG5cCisgICAgICAgLSBGZWF0dXJlcyBtYXkgYWxzbyBpbmNsdWRlIG90aGVyIEZlYXR1cmVzICgiSW5jbHVkZWQgRmVhdHVyZXMiKS4gV2l0aGluIGEgRmVhdHVyZSwgZmlsZXNcblwKKyAgICAgICAgIG5hbWVkICJmZWF0dXJlLnhtbCIgbWF5IGNvbnRhaW4gYSBsaXN0IG9mIHRoZSBuYW1lcyBhbmQgdmVyc2lvbiBudW1iZXJzIG9mIEluY2x1ZGVkIEZlYXR1cmVzLlxuXAorXG5cCitUaGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgZ292ZXJuaW5nIFBsdWctaW5zIGFuZCBGcmFnbWVudHMgc2hvdWxkIGJlXG5cCitjb250YWluZWQgaW4gZmlsZXMgbmFtZWQgImFib3V0Lmh0bWwiICgiQWJvdXRzIikuIFRoZSB0ZXJtcyBhbmRcblwKK2NvbmRpdGlvbnMgZ292ZXJuaW5nIEZlYXR1cmVzIGFuZCBJbmNsdWRlZCBGZWF0dXJlcyBzaG91bGQgYmUgY29udGFpbmVkXG5cCitpbiBmaWxlcyBuYW1lZCAibGljZW5zZS5odG1sIiAoIkZlYXR1cmUgTGljZW5zZXMiKS4gQWJvdXRzIGFuZCBGZWF0dXJlXG5cCitMaWNlbnNlcyBtYXkgYmUgbG9jYXRlZCBpbiBhbnkgZGlyZWN0b3J5IG9mIGEgRG93bmxvYWQgb3IgTW9kdWxlXG5cCitpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0byB0aGUgZm9sbG93aW5nIGxvY2F0aW9uczpcblwKK1xuXAorICAgICAgIC0gVGhlIHRvcC1sZXZlbCAocm9vdCkgZGlyZWN0b3J5XG5cCisgICAgICAgLSBQbHVnLWluIGFuZCBGcmFnbWVudCBkaXJlY3Rvcmllc1xuXAorICAgICAgIC0gSW5zaWRlIFBsdWctaW5zIGFuZCBGcmFnbWVudHMgcGFja2FnZWQgYXMgSkFSc1xuXAorICAgICAgIC0gU3ViLWRpcmVjdG9yaWVzIG9mIHRoZSBkaXJlY3RvcnkgbmFtZWQgInNyYyIgb2YgY2VydGFpbiBQbHVnLWluc1xuXAorICAgICAgIC0gRmVhdHVyZSBkaXJlY3Rvcmllc1xuXAorXG5cCitOb3RlOiBpZiBhIEZlYXR1cmUgbWFkZSBhdmFpbGFibGUgYnkgdGhlIEVjbGlwc2UgRm91bmRhdGlvbiBpcyBpbnN0YWxsZWQgdXNpbmcgdGhlXG5cCitQcm92aXNpb25pbmcgVGVjaG5vbG9neSAoYXMgZGVmaW5lZCBiZWxvdyksIHlvdSBtdXN0IGFncmVlIHRvIGEgbGljZW5zZSAoIkZlYXR1cmUgXG5cCitVcGRhdGUgTGljZW5zZSIpIGR1cmluZyB0aGUgaW5zdGFsbGF0aW9uIHByb2Nlc3MuIElmIHRoZSBGZWF0dXJlIGNvbnRhaW5zXG5cCitJbmNsdWRlZCBGZWF0dXJlcywgdGhlIEZlYXR1cmUgVXBkYXRlIExpY2Vuc2Ugc2hvdWxkIGVpdGhlciBwcm92aWRlIHlvdVxuXAord2l0aCB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgZ292ZXJuaW5nIHRoZSBJbmNsdWRlZCBGZWF0dXJlcyBvciBpbmZvcm1cblwKK3lvdSB3aGVyZSB5b3UgY2FuIGxvY2F0ZSB0aGVtLiBGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlcyBtYXkgYmUgZm91bmQgaW5cblwKK3RoZSAibGljZW5zZSIgcHJvcGVydHkgb2YgZmlsZXMgbmFtZWQgImZlYXR1cmUucHJvcGVydGllcyIgZm91bmQgd2l0aGluIGEgRmVhdHVyZS5cblwKK1N1Y2ggQWJvdXRzLCBGZWF0dXJlIExpY2Vuc2VzLCBhbmQgRmVhdHVyZSBVcGRhdGUgTGljZW5zZXMgY29udGFpbiB0aGVcblwKK3Rlcm1zIGFuZCBjb25kaXRpb25zIChvciByZWZlcmVuY2VzIHRvIHN1Y2ggdGVybXMgYW5kIGNvbmRpdGlvbnMpIHRoYXRcblwKK2dvdmVybiB5b3VyIHVzZSBvZiB0aGUgYXNzb2NpYXRlZCBDb250ZW50IGluIHRoYXQgZGlyZWN0b3J5LlxuXAorXG5cCitUSEUgQUJPVVRTLCBGRUFUVVJFIExJQ0VOU0VTLCBBTkQgRkVBVFVSRSBVUERBVEUgTElDRU5TRVMgTUFZIFJFRkVSXG5cCitUTyBUSEUgRVBMIE9SIE9USEVSIExJQ0VOU0UgQUdSRUVNRU5UUywgTk9USUNFUyBPUiBURVJNUyBBTkQgQ09ORElUSU9OUy5cblwKK1NPTUUgT0YgVEhFU0UgT1RIRVIgTElDRU5TRSBBR1JFRU1FTlRTIE1BWSBJTkNMVURFIChCVVQgQVJFIE5PVCBMSU1JVEVEIFRPKTpcblwKK1xuXAorICAgICAgIC0gQ29tbW9uIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4wIChhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9jcGwtdjEwLmh0bWwpXG5cCisgICAgICAgLSBBcGFjaGUgU29mdHdhcmUgTGljZW5zZSAxLjEgKGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRSlcblwKKyAgICAgICAtIEFwYWNoZSBTb2Z0d2FyZSBMaWNlbnNlIDIuMCAoYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMClcblwKKyAgICAgICAtIE1ldHJvIExpbmsgUHVibGljIExpY2Vuc2UgMS4wMCAoYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cub3Blbmdyb3VwLm9yZy9vcGVubW90aWYvc3VwcG9ydGVycy9tZXRyb2xpbmsvbGljZW5zZS5odG1sKVxuXAorICAgICAgIC0gTW96aWxsYSBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMSAoYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cubW96aWxsYS5vcmcvTVBML01QTC0xLjEuaHRtbClcblwKK1xuXAorSVQgSVMgWU9VUiBPQkxJR0FUSU9OIFRPIFJFQUQgQU5EIEFDQ0VQVCBBTEwgU1VDSCBURVJNUyBBTkQgQ09ORElUSU9OUyBQUklPUlxuXAorVE8gVVNFIE9GIFRIRSBDT05URU5ULiBJZiBubyBBYm91dCwgRmVhdHVyZSBMaWNlbnNlLCBvciBGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlXG5cCitpcyBwcm92aWRlZCwgcGxlYXNlIGNvbnRhY3QgdGhlIEVjbGlwc2UgRm91bmRhdGlvbiB0byBkZXRlcm1pbmUgd2hhdCB0ZXJtcyBhbmQgY29uZGl0aW9uc1xuXAorZ292ZXJuIHRoYXQgcGFydGljdWxhciBDb250ZW50LlxuXAorXG5cCitcblxVc2Ugb2YgUHJvdmlzaW9uaW5nIFRlY2hub2xvZ3lcblwKK1xuXAorVGhlIEVjbGlwc2UgRm91bmRhdGlvbiBtYWtlcyBhdmFpbGFibGUgcHJvdmlzaW9uaW5nIHNvZnR3YXJlLCBleGFtcGxlcyBvZiB3aGljaCBpbmNsdWRlLFxuXAorYnV0IGFyZSBub3QgbGltaXRlZCB0bywgcDIgYW5kIHRoZSBFY2xpcHNlIFVwZGF0ZSBNYW5hZ2VyICgiUHJvdmlzaW9uaW5nIFRlY2hub2xvZ3kiKSBmb3JcblwKK3RoZSBwdXJwb3NlIG9mIGFsbG93aW5nIHVzZXJzIHRvIGluc3RhbGwgc29mdHdhcmUsIGRvY3VtZW50YXRpb24sIGluZm9ybWF0aW9uIGFuZC9vclxuXAorb3RoZXIgbWF0ZXJpYWxzIChjb2xsZWN0aXZlbHkgIkluc3RhbGxhYmxlIFNvZnR3YXJlIikuIFRoaXMgY2FwYWJpbGl0eSBpcyBwcm92aWRlZCB3aXRoXG5cCit0aGUgaW50ZW50IG9mIGFsbG93aW5nIHN1Y2ggdXNlcnMgdG8gaW5zdGFsbCwgZXh0ZW5kIGFuZCB1cGRhdGUgRWNsaXBzZS1iYXNlZCBwcm9kdWN0cy5cblwKK0luZm9ybWF0aW9uIGFib3V0IHBhY2thZ2luZyBJbnN0YWxsYWJsZSBTb2Z0d2FyZSBpcyBhdmFpbGFibGUgYXRcblwKK2h0dHA6Ly9lY2xpcHNlLm9yZy9lcXVpbm94L3AyL3JlcG9zaXRvcnlfcGFja2FnaW5nLmh0bWwgKCJTcGVjaWZpY2F0aW9uIikuXG5cCitcblwKK1lvdSBtYXkgdXNlIFByb3Zpc2lvbmluZyBUZWNobm9sb2d5IHRvIGFsbG93IG90aGVyIHBhcnRpZXMgdG8gaW5zdGFsbCBJbnN0YWxsYWJsZSBTb2Z0d2FyZS5cblwKK1lvdSBzaGFsbCBiZSByZXNwb25zaWJsZSBmb3IgZW5hYmxpbmcgdGhlIGFwcGxpY2FibGUgbGljZW5zZSBhZ3JlZW1lbnRzIHJlbGF0aW5nIHRvIHRoZVxuXAorSW5zdGFsbGFibGUgU29mdHdhcmUgdG8gYmUgcHJlc2VudGVkIHRvLCBhbmQgYWNjZXB0ZWQgYnksIHRoZSB1c2VycyBvZiB0aGUgUHJvdmlzaW9uaW5nIFRlY2hub2xvZ3lcblwKK2luIGFjY29yZGFuY2Ugd2l0aCB0aGUgU3BlY2lmaWNhdGlvbi4gQnkgdXNpbmcgUHJvdmlzaW9uaW5nIFRlY2hub2xvZ3kgaW4gc3VjaCBhIG1hbm5lciBhbmRcblwKK21ha2luZyBpdCBhdmFpbGFibGUgaW4gYWNjb3JkYW5jZSB3aXRoIHRoZSBTcGVjaWZpY2F0aW9uLCB5b3UgZnVydGhlciBhY2tub3dsZWRnZSB5b3VyXG5cCithZ3JlZW1lbnQgdG8sIGFuZCB0aGUgYWNxdWlzaXRpb24gb2YgYWxsIG5lY2Vzc2FyeSByaWdodHMgdG8gcGVybWl0IHRoZSBmb2xsb3dpbmc6XG5cCitcblwKKyAgICAgICAxLiBBIHNlcmllcyBvZiBhY3Rpb25zIG1heSBvY2N1ciAoIlByb3Zpc2lvbmluZyBQcm9jZXNzIikgaW4gd2hpY2ggYSB1c2VyIG1heSBleGVjdXRlXG5cCisgICAgICAgICAgdGhlIFByb3Zpc2lvbmluZyBUZWNobm9sb2d5IG9uIGEgbWFjaGluZSAoIlRhcmdldCBNYWNoaW5lIikgd2l0aCB0aGUgaW50ZW50IG9mIGluc3RhbGxpbmcsXG5cCisgICAgICAgICAgZXh0ZW5kaW5nIG9yIHVwZGF0aW5nIHRoZSBmdW5jdGlvbmFsaXR5IG9mIGFuIEVjbGlwc2UtYmFzZWQgcHJvZHVjdC5cblwKKyAgICAgICAyLiBEdXJpbmcgdGhlIFByb3Zpc2lvbmluZyBQcm9jZXNzLCB0aGUgUHJvdmlzaW9uaW5nIFRlY2hub2xvZ3kgbWF5IGNhdXNlIHRoaXJkIHBhcnR5XG5cCisgICAgICAgICAgSW5zdGFsbGFibGUgU29mdHdhcmUgb3IgYSBwb3J0aW9uIHRoZXJlb2YgdG8gYmUgYWNjZXNzZWQgYW5kIGNvcGllZCB0byB0aGUgVGFyZ2V0IE1hY2hpbmUuXG5cCisgICAgICAgMy4gUHVyc3VhbnQgdG8gdGhlIFNwZWNpZmljYXRpb24sIHlvdSB3aWxsIHByb3ZpZGUgdG8gdGhlIHVzZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIHRoYXRcblwKKyAgICAgICAgICBnb3Zlcm4gdGhlIHVzZSBvZiB0aGUgSW5zdGFsbGFibGUgU29mdHdhcmUgKCJJbnN0YWxsYWJsZSBTb2Z0d2FyZSBBZ3JlZW1lbnQiKSBhbmQgc3VjaFxuXAorICAgICAgICAgIEluc3RhbGxhYmxlIFNvZnR3YXJlIEFncmVlbWVudCBzaGFsbCBiZSBhY2Nlc3NlZCBmcm9tIHRoZSBUYXJnZXQgTWFjaGluZSBpbiBhY2NvcmRhbmNlXG5cCisgICAgICAgICAgd2l0aCB0aGUgU3BlY2lmaWNhdGlvbi4gU3VjaCBJbnN0YWxsYWJsZSBTb2Z0d2FyZSBBZ3JlZW1lbnQgbXVzdCBpbmZvcm0gdGhlIHVzZXIgb2YgdGhlXG5cCisgICAgICAgICAgdGVybXMgYW5kIGNvbmRpdGlvbnMgdGhhdCBnb3Zlcm4gdGhlIEluc3RhbGxhYmxlIFNvZnR3YXJlIGFuZCBtdXN0IHNvbGljaXQgYWNjZXB0YW5jZSBieVxuXAorICAgICAgICAgIHRoZSBlbmQgdXNlciBpbiB0aGUgbWFubmVyIHByZXNjcmliZWQgaW4gc3VjaCBJbnN0YWxsYWJsZSBTb2Z0d2FyZSBBZ3JlZW1lbnQuIFVwb24gc3VjaFxuXAorICAgICAgICAgIGluZGljYXRpb24gb2YgYWdyZWVtZW50IGJ5IHRoZSB1c2VyLCB0aGUgcHJvdmlzaW9uaW5nIFRlY2hub2xvZ3kgd2lsbCBjb21wbGV0ZSBpbnN0YWxsYXRpb25cblwKKyAgICAgICAgICBvZiB0aGUgSW5zdGFsbGFibGUgU29mdHdhcmUuXG5cCitcblwKK0NyeXB0b2dyYXBoeVxuXAorXG5cCitDb250ZW50IG1heSBjb250YWluIGVuY3J5cHRpb24gc29mdHdhcmUuIFRoZSBjb3VudHJ5IGluIHdoaWNoIHlvdSBhcmVcblwKK2N1cnJlbnRseSBtYXkgaGF2ZSByZXN0cmljdGlvbnMgb24gdGhlIGltcG9ydCwgcG9zc2Vzc2lvbiwgYW5kIHVzZSxcblwKK2FuZC9vciByZS1leHBvcnQgdG8gYW5vdGhlciBjb3VudHJ5LCBvZiBlbmNyeXB0aW9uIHNvZnR3YXJlLiBCRUZPUkVcblwKK3VzaW5nIGFueSBlbmNyeXB0aW9uIHNvZnR3YXJlLCBwbGVhc2UgY2hlY2sgdGhlIGNvdW50cnkncyBsYXdzLFxuXAorcmVndWxhdGlvbnMgYW5kIHBvbGljaWVzIGNvbmNlcm5pbmcgdGhlIGltcG9ydCwgcG9zc2Vzc2lvbiwgb3IgdXNlLCBhbmRcblwKK3JlLWV4cG9ydCBvZiBlbmNyeXB0aW9uIHNvZnR3YXJlLCB0byBzZWUgaWYgdGhpcyBpcyBwZXJtaXR0ZWQuXG5cCitcblwKK0phdmEgYW5kIGFsbCBKYXZhLWJhc2VkIHRyYWRlbWFya3MgYXJlIHRyYWRlbWFya3Mgb2YgT3JhY2xlIENvcnBvcmF0aW9uIGluIHRoZSBVbml0ZWQgU3RhdGVzLCBvdGhlciBjb3VudHJpZXMsIG9yIGJvdGguXG4KKyMjIyMjIyMjIyMjIGVuZCBvZiBsaWNlbnNlIHByb3BlcnR5ICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS50cmFuc3BvcnRhdGlvbi5mZWF0dXJlL2ZlYXR1cmUueG1sIGIvZmVhdHVyZXMvb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLnRyYW5zcG9ydGF0aW9uLmZlYXR1cmUvZmVhdHVyZS54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTY1Y2Y1ZAotLS0gL2Rldi9udWxsCisrKyBiL2ZlYXR1cmVzL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS50cmFuc3BvcnRhdGlvbi5mZWF0dXJlL2ZlYXR1cmUueG1sCkBAIC0wLDAgKzEsMzYgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8ZmVhdHVyZQorICAgICAgaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uZGF0YS50cmFuc3BvcnRhdGlvbi5mZWF0dXJlIgorICAgICAgbGFiZWw9IiVmZWF0dXJlTmFtZSIKKyAgICAgIHZlcnNpb249IjEuMi4xIgorICAgICAgcHJvdmlkZXItbmFtZT0iJXByb3ZpZGVyTmFtZSI+CisKKyAgIDxkZXNjcmlwdGlvbj4KKyAgICAgICVkZXNjcmlwdGlvbgorICAgPC9kZXNjcmlwdGlvbj4KKworICAgPGNvcHlyaWdodD4KKyAgICAgICVjb3B5cmlnaHQKKyAgIDwvY29weXJpZ2h0PgorCisgICA8bGljZW5zZSB1cmw9IiVsaWNlbnNlVVJMIj4KKyAgICAgICVsaWNlbnNlCisgICA8L2xpY2Vuc2U+CisKKyAgIDx1cmw+CisgICAgICA8dXBkYXRlIGxhYmVsPSIldXBkYXRlU2l0ZU5hbWUiIHVybD0iaHR0cDovL2Rvd25sb2FkLmVjbGlwc2Uub3JnL3N0ZW0vdXBkYXRlLXNpdGUvIi8+CisgICA8L3VybD4KKworICAgPHJlcXVpcmVzPgorICAgICAgPGltcG9ydCBwbHVnaW49Im9yZy5lY2xpcHNlLmNvcmUucnVudGltZSIvPgorICAgICAgPGltcG9ydCBwbHVnaW49Im9yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkiLz4KKyAgIDwvcmVxdWlyZXM+CisKKyAgIDxwbHVnaW4KKyAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5LmluZnJhc3RydWN0dXJlLnRyYW5zcG9ydGF0aW9uIgorICAgICAgICAgZG93bmxvYWQtc2l6ZT0iMCIKKyAgICAgICAgIGluc3RhbGwtc2l6ZT0iMCIKKyAgICAgICAgIHZlcnNpb249IjAuMC4wIgorICAgICAgICAgdW5wYWNrPSJmYWxzZSIvPgorCis8L2ZlYXR1cmU+CmRpZmYgLS1naXQgYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS5zdGVtLmRhdGEudHJhbnNwb3J0YXRpb24uZmVhdHVyZS9saWNlbnNlLmh0bWwgYi9mZWF0dXJlcy9vcmcuZWNsaXBzZS5zdGVtLmRhdGEudHJhbnNwb3J0YXRpb24uZmVhdHVyZS9saWNlbnNlLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzE4NGNhMwotLS0gL2Rldi9udWxsCisrKyBiL2ZlYXR1cmVzL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS50cmFuc3BvcnRhdGlvbi5mZWF0dXJlL2xpY2Vuc2UuaHRtbApAQCAtMCwwICsxLDEwNyBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iSVNPLTg4NTktMSIgPz4KKzwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgWEhUTUwgMS4wIFN0cmljdC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbDEvRFREL3hodG1sMS1zdHJpY3QuZHRkIj4KKzxodG1sIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIj4KKzxoZWFkPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9SVNPLTg4NTktMSIgLz4KKzx0aXRsZT5FY2xpcHNlIEZvdW5kYXRpb24gU29mdHdhcmUgVXNlciBBZ3JlZW1lbnQ8L3RpdGxlPgorPC9oZWFkPgorCis8Ym9keSBsYW5nPSJFTi1VUyI+Cis8aDI+RWNsaXBzZSBGb3VuZGF0aW9uIFNvZnR3YXJlIFVzZXIgQWdyZWVtZW50PC9oMj4KKzxwPkFwcmlsIDE0LCAyMDEwPC9wPgorCis8aDM+VXNhZ2UgT2YgQ29udGVudDwvaDM+CisKKzxwPlRIRSBFQ0xJUFNFIEZPVU5EQVRJT04gTUFLRVMgQVZBSUxBQkxFIFNPRlRXQVJFLCBET0NVTUVOVEFUSU9OLCBJTkZPUk1BVElPTiBBTkQvT1IgT1RIRVIgTUFURVJJQUxTIEZPUiBPUEVOIFNPVVJDRSBQUk9KRUNUUworICAgKENPTExFQ1RJVkVMWSAmcXVvdDtDT05URU5UJnF1b3Q7KS4gIFVTRSBPRiBUSEUgQ09OVEVOVCBJUyBHT1ZFUk5FRCBCWSBUSEUgVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgVEhJUyBBR1JFRU1FTlQgQU5EL09SIFRIRSBURVJNUyBBTkQKKyAgIENPTkRJVElPTlMgT0YgTElDRU5TRSBBR1JFRU1FTlRTIE9SIE5PVElDRVMgSU5ESUNBVEVEIE9SIFJFRkVSRU5DRUQgQkVMT1cuICBCWSBVU0lORyBUSEUgQ09OVEVOVCwgWU9VIEFHUkVFIFRIQVQgWU9VUiBVU0UKKyAgIE9GIFRIRSBDT05URU5UIElTIEdPVkVSTkVEIEJZIFRISVMgQUdSRUVNRU5UIEFORC9PUiBUSEUgVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgQU5ZIEFQUExJQ0FCTEUgTElDRU5TRSBBR1JFRU1FTlRTIE9SCisgICBOT1RJQ0VTIElORElDQVRFRCBPUiBSRUZFUkVOQ0VEIEJFTE9XLiAgSUYgWU9VIERPIE5PVCBBR1JFRSBUTyBUSEUgVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgVEhJUyBBR1JFRU1FTlQgQU5EIFRIRSBURVJNUyBBTkQKKyAgIENPTkRJVElPTlMgT0YgQU5ZIEFQUExJQ0FCTEUgTElDRU5TRSBBR1JFRU1FTlRTIE9SIE5PVElDRVMgSU5ESUNBVEVEIE9SIFJFRkVSRU5DRUQgQkVMT1csIFRIRU4gWU9VIE1BWSBOT1QgVVNFIFRIRSBDT05URU5ULjwvcD4KKworPGgzPkFwcGxpY2FibGUgTGljZW5zZXM8L2gzPgorCis8cD5Vbmxlc3Mgb3RoZXJ3aXNlIGluZGljYXRlZCwgYWxsIENvbnRlbnQgbWFkZSBhdmFpbGFibGUgYnkgdGhlIEVjbGlwc2UgRm91bmRhdGlvbiBpcyBwcm92aWRlZCB0byB5b3UgdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4wCisgICAoJnF1b3Q7RVBMJnF1b3Q7KS4gIEEgY29weSBvZiB0aGUgRVBMIGlzIHByb3ZpZGVkIHdpdGggdGhpcyBDb250ZW50IGFuZCBpcyBhbHNvIGF2YWlsYWJsZSBhdCA8YSBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbCI+aHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWw8L2E+LgorICAgRm9yIHB1cnBvc2VzIG9mIHRoZSBFUEwsICZxdW90O1Byb2dyYW0mcXVvdDsgd2lsbCBtZWFuIHRoZSBDb250ZW50LjwvcD4KKworPHA+Q29udGVudCBpbmNsdWRlcywgYnV0IGlzIG5vdCBsaW1pdGVkIHRvLCBzb3VyY2UgY29kZSwgb2JqZWN0IGNvZGUsIGRvY3VtZW50YXRpb24gYW5kIG90aGVyIGZpbGVzIG1haW50YWluZWQgaW4gdGhlIEVjbGlwc2UgRm91bmRhdGlvbiBzb3VyY2UgY29kZQorICAgcmVwb3NpdG9yeSAoJnF1b3Q7UmVwb3NpdG9yeSZxdW90OykgaW4gc29mdHdhcmUgbW9kdWxlcyAoJnF1b3Q7TW9kdWxlcyZxdW90OykgYW5kIG1hZGUgYXZhaWxhYmxlIGFzIGRvd25sb2FkYWJsZSBhcmNoaXZlcyAoJnF1b3Q7RG93bmxvYWRzJnF1b3Q7KS48L3A+CisKKzx1bD4KKyAgICAgICA8bGk+Q29udGVudCBtYXkgYmUgc3RydWN0dXJlZCBhbmQgcGFja2FnZWQgaW50byBtb2R1bGVzIHRvIGZhY2lsaXRhdGUgZGVsaXZlcmluZywgZXh0ZW5kaW5nLCBhbmQgdXBncmFkaW5nIHRoZSBDb250ZW50LiAgVHlwaWNhbCBtb2R1bGVzIG1heSBpbmNsdWRlIHBsdWctaW5zICgmcXVvdDtQbHVnLWlucyZxdW90OyksIHBsdWctaW4gZnJhZ21lbnRzICgmcXVvdDtGcmFnbWVudHMmcXVvdDspLCBhbmQgZmVhdHVyZXMgKCZxdW90O0ZlYXR1cmVzJnF1b3Q7KS48L2xpPgorICAgICAgIDxsaT5FYWNoIFBsdWctaW4gb3IgRnJhZ21lbnQgbWF5IGJlIHBhY2thZ2VkIGFzIGEgc3ViLWRpcmVjdG9yeSBvciBKQVIgKEphdmEmdHJhZGU7IEFSY2hpdmUpIGluIGEgZGlyZWN0b3J5IG5hbWVkICZxdW90O3BsdWdpbnMmcXVvdDsuPC9saT4KKyAgICAgICA8bGk+QSBGZWF0dXJlIGlzIGEgYnVuZGxlIG9mIG9uZSBvciBtb3JlIFBsdWctaW5zIGFuZC9vciBGcmFnbWVudHMgYW5kIGFzc29jaWF0ZWQgbWF0ZXJpYWwuICBFYWNoIEZlYXR1cmUgbWF5IGJlIHBhY2thZ2VkIGFzIGEgc3ViLWRpcmVjdG9yeSBpbiBhIGRpcmVjdG9yeSBuYW1lZCAmcXVvdDtmZWF0dXJlcyZxdW90Oy4gIFdpdGhpbiBhIEZlYXR1cmUsIGZpbGVzIG5hbWVkICZxdW90O2ZlYXR1cmUueG1sJnF1b3Q7IG1heSBjb250YWluIGEgbGlzdCBvZiB0aGUgbmFtZXMgYW5kIHZlcnNpb24gbnVtYmVycyBvZiB0aGUgUGx1Zy1pbnMKKyAgICAgIGFuZC9vciBGcmFnbWVudHMgYXNzb2NpYXRlZCB3aXRoIHRoYXQgRmVhdHVyZS48L2xpPgorICAgICAgIDxsaT5GZWF0dXJlcyBtYXkgYWxzbyBpbmNsdWRlIG90aGVyIEZlYXR1cmVzICgmcXVvdDtJbmNsdWRlZCBGZWF0dXJlcyZxdW90OykuIFdpdGhpbiBhIEZlYXR1cmUsIGZpbGVzIG5hbWVkICZxdW90O2ZlYXR1cmUueG1sJnF1b3Q7IG1heSBjb250YWluIGEgbGlzdCBvZiB0aGUgbmFtZXMgYW5kIHZlcnNpb24gbnVtYmVycyBvZiBJbmNsdWRlZCBGZWF0dXJlcy48L2xpPgorPC91bD4KKworPHA+VGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIGdvdmVybmluZyBQbHVnLWlucyBhbmQgRnJhZ21lbnRzIHNob3VsZCBiZSBjb250YWluZWQgaW4gZmlsZXMgbmFtZWQgJnF1b3Q7YWJvdXQuaHRtbCZxdW90OyAoJnF1b3Q7QWJvdXRzJnF1b3Q7KS4gVGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIGdvdmVybmluZyBGZWF0dXJlcyBhbmQKK0luY2x1ZGVkIEZlYXR1cmVzIHNob3VsZCBiZSBjb250YWluZWQgaW4gZmlsZXMgbmFtZWQgJnF1b3Q7bGljZW5zZS5odG1sJnF1b3Q7ICgmcXVvdDtGZWF0dXJlIExpY2Vuc2VzJnF1b3Q7KS4gIEFib3V0cyBhbmQgRmVhdHVyZSBMaWNlbnNlcyBtYXkgYmUgbG9jYXRlZCBpbiBhbnkgZGlyZWN0b3J5IG9mIGEgRG93bmxvYWQgb3IgTW9kdWxlCitpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0byB0aGUgZm9sbG93aW5nIGxvY2F0aW9uczo8L3A+CisKKzx1bD4KKyAgICAgICA8bGk+VGhlIHRvcC1sZXZlbCAocm9vdCkgZGlyZWN0b3J5PC9saT4KKyAgICAgICA8bGk+UGx1Zy1pbiBhbmQgRnJhZ21lbnQgZGlyZWN0b3JpZXM8L2xpPgorICAgICAgIDxsaT5JbnNpZGUgUGx1Zy1pbnMgYW5kIEZyYWdtZW50cyBwYWNrYWdlZCBhcyBKQVJzPC9saT4KKyAgICAgICA8bGk+U3ViLWRpcmVjdG9yaWVzIG9mIHRoZSBkaXJlY3RvcnkgbmFtZWQgJnF1b3Q7c3JjJnF1b3Q7IG9mIGNlcnRhaW4gUGx1Zy1pbnM8L2xpPgorICAgICAgIDxsaT5GZWF0dXJlIGRpcmVjdG9yaWVzPC9saT4KKzwvdWw+CisKKzxwPk5vdGU6IGlmIGEgRmVhdHVyZSBtYWRlIGF2YWlsYWJsZSBieSB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uIGlzIGluc3RhbGxlZCB1c2luZyB0aGUgUHJvdmlzaW9uaW5nIFRlY2hub2xvZ3kgKGFzIGRlZmluZWQgYmVsb3cpLCB5b3UgbXVzdCBhZ3JlZSB0byBhIGxpY2Vuc2UgKCZxdW90O0ZlYXR1cmUgVXBkYXRlIExpY2Vuc2UmcXVvdDspIGR1cmluZyB0aGUKK2luc3RhbGxhdGlvbiBwcm9jZXNzLiAgSWYgdGhlIEZlYXR1cmUgY29udGFpbnMgSW5jbHVkZWQgRmVhdHVyZXMsIHRoZSBGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlIHNob3VsZCBlaXRoZXIgcHJvdmlkZSB5b3Ugd2l0aCB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgZ292ZXJuaW5nIHRoZSBJbmNsdWRlZCBGZWF0dXJlcyBvcgoraW5mb3JtIHlvdSB3aGVyZSB5b3UgY2FuIGxvY2F0ZSB0aGVtLiAgRmVhdHVyZSBVcGRhdGUgTGljZW5zZXMgbWF5IGJlIGZvdW5kIGluIHRoZSAmcXVvdDtsaWNlbnNlJnF1b3Q7IHByb3BlcnR5IG9mIGZpbGVzIG5hbWVkICZxdW90O2ZlYXR1cmUucHJvcGVydGllcyZxdW90OyBmb3VuZCB3aXRoaW4gYSBGZWF0dXJlLgorU3VjaCBBYm91dHMsIEZlYXR1cmUgTGljZW5zZXMsIGFuZCBGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlcyBjb250YWluIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyAob3IgcmVmZXJlbmNlcyB0byBzdWNoIHRlcm1zIGFuZCBjb25kaXRpb25zKSB0aGF0IGdvdmVybiB5b3VyIHVzZSBvZiB0aGUgYXNzb2NpYXRlZCBDb250ZW50IGluCit0aGF0IGRpcmVjdG9yeS48L3A+CisKKzxwPlRIRSBBQk9VVFMsIEZFQVRVUkUgTElDRU5TRVMsIEFORCBGRUFUVVJFIFVQREFURSBMSUNFTlNFUyBNQVkgUkVGRVIgVE8gVEhFIEVQTCBPUiBPVEhFUiBMSUNFTlNFIEFHUkVFTUVOVFMsIE5PVElDRVMgT1IgVEVSTVMgQU5EIENPTkRJVElPTlMuICBTT01FIE9GIFRIRVNFCitPVEhFUiBMSUNFTlNFIEFHUkVFTUVOVFMgTUFZIElOQ0xVREUgKEJVVCBBUkUgTk9UIExJTUlURUQgVE8pOjwvcD4KKworPHVsPgorICAgICAgIDxsaT5Db21tb24gUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjAgKGF2YWlsYWJsZSBhdCA8YSBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2NwbC12MTAuaHRtbCI+aHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9jcGwtdjEwLmh0bWw8L2E+KTwvbGk+CisgICAgICAgPGxpPkFwYWNoZSBTb2Z0d2FyZSBMaWNlbnNlIDEuMSAoYXZhaWxhYmxlIGF0IDxhIGhyZWY9Imh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFIj5odHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRTwvYT4pPC9saT4KKyAgICAgICA8bGk+QXBhY2hlIFNvZnR3YXJlIExpY2Vuc2UgMi4wIChhdmFpbGFibGUgYXQgPGEgaHJlZj0iaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wIj5odHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjA8L2E+KTwvbGk+CisgICAgICAgPGxpPk1ldHJvIExpbmsgUHVibGljIExpY2Vuc2UgMS4wMCAoYXZhaWxhYmxlIGF0IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbmdyb3VwLm9yZy9vcGVubW90aWYvc3VwcG9ydGVycy9tZXRyb2xpbmsvbGljZW5zZS5odG1sIj5odHRwOi8vd3d3Lm9wZW5ncm91cC5vcmcvb3Blbm1vdGlmL3N1cHBvcnRlcnMvbWV0cm9saW5rL2xpY2Vuc2UuaHRtbDwvYT4pPC9saT4KKyAgICAgICA8bGk+TW96aWxsYSBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMSAoYXZhaWxhYmxlIGF0IDxhIGhyZWY9Imh0dHA6Ly93d3cubW96aWxsYS5vcmcvTVBML01QTC0xLjEuaHRtbCI+aHR0cDovL3d3dy5tb3ppbGxhLm9yZy9NUEwvTVBMLTEuMS5odG1sPC9hPik8L2xpPgorPC91bD4KKworPHA+SVQgSVMgWU9VUiBPQkxJR0FUSU9OIFRPIFJFQUQgQU5EIEFDQ0VQVCBBTEwgU1VDSCBURVJNUyBBTkQgQ09ORElUSU9OUyBQUklPUiBUTyBVU0UgT0YgVEhFIENPTlRFTlQuICBJZiBubyBBYm91dCwgRmVhdHVyZSBMaWNlbnNlLCBvciBGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlIGlzIHByb3ZpZGVkLCBwbGVhc2UKK2NvbnRhY3QgdGhlIEVjbGlwc2UgRm91bmRhdGlvbiB0byBkZXRlcm1pbmUgd2hhdCB0ZXJtcyBhbmQgY29uZGl0aW9ucyBnb3Zlcm4gdGhhdCBwYXJ0aWN1bGFyIENvbnRlbnQuPC9wPgorCisKKzxoMz5Vc2Ugb2YgUHJvdmlzaW9uaW5nIFRlY2hub2xvZ3k8L2gzPgorCis8cD5UaGUgRWNsaXBzZSBGb3VuZGF0aW9uIG1ha2VzIGF2YWlsYWJsZSBwcm92aXNpb25pbmcgc29mdHdhcmUsIGV4YW1wbGVzIG9mIHdoaWNoIGluY2x1ZGUsIGJ1dCBhcmUgbm90IGxpbWl0ZWQgdG8sIHAyIGFuZCB0aGUgRWNsaXBzZQorICAgVXBkYXRlIE1hbmFnZXIgKCZxdW90O1Byb3Zpc2lvbmluZyBUZWNobm9sb2d5JnF1b3Q7KSBmb3IgdGhlIHB1cnBvc2Ugb2YgYWxsb3dpbmcgdXNlcnMgdG8gaW5zdGFsbCBzb2Z0d2FyZSwgZG9jdW1lbnRhdGlvbiwgaW5mb3JtYXRpb24gYW5kL29yCisgICBvdGhlciBtYXRlcmlhbHMgKGNvbGxlY3RpdmVseSAmcXVvdDtJbnN0YWxsYWJsZSBTb2Z0d2FyZSZxdW90OykuIFRoaXMgY2FwYWJpbGl0eSBpcyBwcm92aWRlZCB3aXRoIHRoZSBpbnRlbnQgb2YgYWxsb3dpbmcgc3VjaCB1c2VycyB0bworICAgaW5zdGFsbCwgZXh0ZW5kIGFuZCB1cGRhdGUgRWNsaXBzZS1iYXNlZCBwcm9kdWN0cy4gSW5mb3JtYXRpb24gYWJvdXQgcGFja2FnaW5nIEluc3RhbGxhYmxlIFNvZnR3YXJlIGlzIGF2YWlsYWJsZSBhdCA8YQorICAgICAgIGhyZWY9Imh0dHA6Ly9lY2xpcHNlLm9yZy9lcXVpbm94L3AyL3JlcG9zaXRvcnlfcGFja2FnaW5nLmh0bWwiPmh0dHA6Ly9lY2xpcHNlLm9yZy9lcXVpbm94L3AyL3JlcG9zaXRvcnlfcGFja2FnaW5nLmh0bWw8L2E+CisgICAoJnF1b3Q7U3BlY2lmaWNhdGlvbiZxdW90OykuPC9wPgorCis8cD5Zb3UgbWF5IHVzZSBQcm92aXNpb25pbmcgVGVjaG5vbG9neSB0byBhbGxvdyBvdGhlciBwYXJ0aWVzIHRvIGluc3RhbGwgSW5zdGFsbGFibGUgU29mdHdhcmUuIFlvdSBzaGFsbCBiZSByZXNwb25zaWJsZSBmb3IgZW5hYmxpbmcgdGhlCisgICBhcHBsaWNhYmxlIGxpY2Vuc2UgYWdyZWVtZW50cyByZWxhdGluZyB0byB0aGUgSW5zdGFsbGFibGUgU29mdHdhcmUgdG8gYmUgcHJlc2VudGVkIHRvLCBhbmQgYWNjZXB0ZWQgYnksIHRoZSB1c2VycyBvZiB0aGUgUHJvdmlzaW9uaW5nIFRlY2hub2xvZ3kKKyAgIGluIGFjY29yZGFuY2Ugd2l0aCB0aGUgU3BlY2lmaWNhdGlvbi4gQnkgdXNpbmcgUHJvdmlzaW9uaW5nIFRlY2hub2xvZ3kgaW4gc3VjaCBhIG1hbm5lciBhbmQgbWFraW5nIGl0IGF2YWlsYWJsZSBpbiBhY2NvcmRhbmNlIHdpdGggdGhlCisgICBTcGVjaWZpY2F0aW9uLCB5b3UgZnVydGhlciBhY2tub3dsZWRnZSB5b3VyIGFncmVlbWVudCB0bywgYW5kIHRoZSBhY3F1aXNpdGlvbiBvZiBhbGwgbmVjZXNzYXJ5IHJpZ2h0cyB0byBwZXJtaXQgdGhlIGZvbGxvd2luZzo8L3A+CisKKzxvbD4KKyAgICAgICA8bGk+QSBzZXJpZXMgb2YgYWN0aW9ucyBtYXkgb2NjdXIgKCZxdW90O1Byb3Zpc2lvbmluZyBQcm9jZXNzJnF1b3Q7KSBpbiB3aGljaCBhIHVzZXIgbWF5IGV4ZWN1dGUgdGhlIFByb3Zpc2lvbmluZyBUZWNobm9sb2d5CisgICAgICAgb24gYSBtYWNoaW5lICgmcXVvdDtUYXJnZXQgTWFjaGluZSZxdW90Oykgd2l0aCB0aGUgaW50ZW50IG9mIGluc3RhbGxpbmcsIGV4dGVuZGluZyBvciB1cGRhdGluZyB0aGUgZnVuY3Rpb25hbGl0eSBvZiBhbiBFY2xpcHNlLWJhc2VkCisgICAgICAgcHJvZHVjdC48L2xpPgorICAgICAgIDxsaT5EdXJpbmcgdGhlIFByb3Zpc2lvbmluZyBQcm9jZXNzLCB0aGUgUHJvdmlzaW9uaW5nIFRlY2hub2xvZ3kgbWF5IGNhdXNlIHRoaXJkIHBhcnR5IEluc3RhbGxhYmxlIFNvZnR3YXJlIG9yIGEgcG9ydGlvbiB0aGVyZW9mIHRvIGJlCisgICAgICAgYWNjZXNzZWQgYW5kIGNvcGllZCB0byB0aGUgVGFyZ2V0IE1hY2hpbmUuPC9saT4KKyAgICAgICA8bGk+UHVyc3VhbnQgdG8gdGhlIFNwZWNpZmljYXRpb24sIHlvdSB3aWxsIHByb3ZpZGUgdG8gdGhlIHVzZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIHRoYXQgZ292ZXJuIHRoZSB1c2Ugb2YgdGhlIEluc3RhbGxhYmxlCisgICAgICAgU29mdHdhcmUgKCZxdW90O0luc3RhbGxhYmxlIFNvZnR3YXJlIEFncmVlbWVudCZxdW90OykgYW5kIHN1Y2ggSW5zdGFsbGFibGUgU29mdHdhcmUgQWdyZWVtZW50IHNoYWxsIGJlIGFjY2Vzc2VkIGZyb20gdGhlIFRhcmdldAorICAgICAgIE1hY2hpbmUgaW4gYWNjb3JkYW5jZSB3aXRoIHRoZSBTcGVjaWZpY2F0aW9uLiBTdWNoIEluc3RhbGxhYmxlIFNvZnR3YXJlIEFncmVlbWVudCBtdXN0IGluZm9ybSB0aGUgdXNlciBvZiB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgdGhhdCBnb3Zlcm4KKyAgICAgICB0aGUgSW5zdGFsbGFibGUgU29mdHdhcmUgYW5kIG11c3Qgc29saWNpdCBhY2NlcHRhbmNlIGJ5IHRoZSBlbmQgdXNlciBpbiB0aGUgbWFubmVyIHByZXNjcmliZWQgaW4gc3VjaCBJbnN0YWxsYWJsZSBTb2Z0d2FyZSBBZ3JlZW1lbnQuIFVwb24gc3VjaAorICAgICAgIGluZGljYXRpb24gb2YgYWdyZWVtZW50IGJ5IHRoZSB1c2VyLCB0aGUgcHJvdmlzaW9uaW5nIFRlY2hub2xvZ3kgd2lsbCBjb21wbGV0ZSBpbnN0YWxsYXRpb24gb2YgdGhlIEluc3RhbGxhYmxlIFNvZnR3YXJlLjwvbGk+Cis8L29sPgorCis8aDM+Q3J5cHRvZ3JhcGh5PC9oMz4KKworPHA+Q29udGVudCBtYXkgY29udGFpbiBlbmNyeXB0aW9uIHNvZnR3YXJlLiBUaGUgY291bnRyeSBpbiB3aGljaCB5b3UgYXJlIGN1cnJlbnRseSBtYXkgaGF2ZSByZXN0cmljdGlvbnMgb24gdGhlIGltcG9ydCwgcG9zc2Vzc2lvbiwgYW5kIHVzZSwgYW5kL29yIHJlLWV4cG9ydCB0bworICAgYW5vdGhlciBjb3VudHJ5LCBvZiBlbmNyeXB0aW9uIHNvZnR3YXJlLiBCRUZPUkUgdXNpbmcgYW55IGVuY3J5cHRpb24gc29mdHdhcmUsIHBsZWFzZSBjaGVjayB0aGUgY291bnRyeSdzIGxhd3MsIHJlZ3VsYXRpb25zIGFuZCBwb2xpY2llcyBjb25jZXJuaW5nIHRoZSBpbXBvcnQsCisgICBwb3NzZXNzaW9uLCBvciB1c2UsIGFuZCByZS1leHBvcnQgb2YgZW5jcnlwdGlvbiBzb2Z0d2FyZSwgdG8gc2VlIGlmIHRoaXMgaXMgcGVybWl0dGVkLjwvcD4KKworPHA+PHNtYWxsPkphdmEgYW5kIGFsbCBKYXZhLWJhc2VkIHRyYWRlbWFya3MgYXJlIHRyYWRlbWFya3Mgb2YgT3JhY2xlIENvcnBvcmF0aW9uIGluIHRoZSBVbml0ZWQgU3RhdGVzLCBvdGhlciBjb3VudHJpZXMsIG9yIGJvdGguPC9zbWFsbD48L3A+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS5zdGVtLmRpc3RyaWJ1dGVkLmZlYXR1cmUvLnByb2plY3QgYi9mZWF0dXJlcy9vcmcuZWNsaXBzZS5zdGVtLmRpc3RyaWJ1dGVkLmZlYXR1cmUvLnByb2plY3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWI1MGUyMgotLS0gL2Rldi9udWxsCisrKyBiL2ZlYXR1cmVzL29yZy5lY2xpcHNlLnN0ZW0uZGlzdHJpYnV0ZWQuZmVhdHVyZS8ucHJvamVjdApAQCAtMCwwICsxLDE3IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPHByb2plY3REZXNjcmlwdGlvbj4KKwk8bmFtZT5vcmcuZWNsaXBzZS5zdGVtLmRpc3RyaWJ1dGVkLmZlYXR1cmU8L25hbWU+CisJPGNvbW1lbnQ+PC9jb21tZW50PgorCTxwcm9qZWN0cz4KKwk8L3Byb2plY3RzPgorCTxidWlsZFNwZWM+CisJCTxidWlsZENvbW1hbmQ+CisJCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuRmVhdHVyZUJ1aWxkZXI8L25hbWU+CisJCQk8YXJndW1lbnRzPgorCQkJPC9hcmd1bWVudHM+CisJCTwvYnVpbGRDb21tYW5kPgorCTwvYnVpbGRTcGVjPgorCTxuYXR1cmVzPgorCQk8bmF0dXJlPm9yZy5lY2xpcHNlLnBkZS5GZWF0dXJlTmF0dXJlPC9uYXR1cmU+CisJPC9uYXR1cmVzPgorPC9wcm9qZWN0RGVzY3JpcHRpb24+CmRpZmYgLS1naXQgYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS5zdGVtLmRpc3RyaWJ1dGVkLmZlYXR1cmUvYnVpbGQucHJvcGVydGllcyBiL2ZlYXR1cmVzL29yZy5lY2xpcHNlLnN0ZW0uZGlzdHJpYnV0ZWQuZmVhdHVyZS9idWlsZC5wcm9wZXJ0aWVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI3NGFmODYKLS0tIC9kZXYvbnVsbAorKysgYi9mZWF0dXJlcy9vcmcuZWNsaXBzZS5zdGVtLmRpc3RyaWJ1dGVkLmZlYXR1cmUvYnVpbGQucHJvcGVydGllcwpAQCAtMCwwICsxLDQgQEAKK2Jpbi5pbmNsdWRlcyA9IGZlYXR1cmUueG1sLFwKKyAgICAgICAgICAgICAgIGZlYXR1cmUucHJvcGVydGllcyxcCisgICAgICAgICAgICAgICBlcGwtdjEwLmh0bWwsXAorICAgICAgICAgICAgICAgbGljZW5zZS5odG1sCmRpZmYgLS1naXQgYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS5zdGVtLmRpc3RyaWJ1dGVkLmZlYXR1cmUvZXBsLXYxMC5odG1sIGIvZmVhdHVyZXMvb3JnLmVjbGlwc2Uuc3RlbS5kaXN0cmlidXRlZC5mZWF0dXJlL2VwbC12MTAuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZDRiMTk2Ci0tLSAvZGV2L251bGwKKysrIGIvZmVhdHVyZXMvb3JnLmVjbGlwc2Uuc3RlbS5kaXN0cmlidXRlZC5mZWF0dXJlL2VwbC12MTAuaHRtbApAQCAtMCwwICsxLDMyOCBAQAorPGh0bWwgeG1sbnM6bz0idXJuOnNjaGVtYXMtbWljcm9zb2Z0LWNvbTpvZmZpY2U6b2ZmaWNlIgoreG1sbnM6dz0idXJuOnNjaGVtYXMtbWljcm9zb2Z0LWNvbTpvZmZpY2U6d29yZCIKK3htbG5zPSJodHRwOi8vd3d3LnczLm9yZy9UUi9SRUMtaHRtbDQwIj4KKworPGhlYWQ+Cis8bWV0YSBodHRwLWVxdWl2PUNvbnRlbnQtVHlwZSBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9d2luZG93cy0xMjUyIj4KKzxtZXRhIG5hbWU9UHJvZ0lkIGNvbnRlbnQ9V29yZC5Eb2N1bWVudD4KKzxtZXRhIG5hbWU9R2VuZXJhdG9yIGNvbnRlbnQ9Ik1pY3Jvc29mdCBXb3JkIDkiPgorPG1ldGEgbmFtZT1PcmlnaW5hdG9yIGNvbnRlbnQ9Ik1pY3Jvc29mdCBXb3JkIDkiPgorPGxpbmsgcmVsPUZpbGUtTGlzdAoraHJlZj0iLi9FY2xpcHNlJTIwRVBMJTIwMjAwM18xMV8xMCUyMEZpbmFsX2ZpbGVzL2ZpbGVsaXN0LnhtbCI+Cis8dGl0bGU+RWNsaXBzZSBQdWJsaWMgTGljZW5zZSAtIFZlcnNpb24gMS4wPC90aXRsZT4KKzwhLS1baWYgZ3RlIG1zbyA5XT48eG1sPgorIDxvOkRvY3VtZW50UHJvcGVydGllcz4KKyAgPG86UmV2aXNpb24+MjwvbzpSZXZpc2lvbj4KKyAgPG86VG90YWxUaW1lPjM8L286VG90YWxUaW1lPgorICA8bzpDcmVhdGVkPjIwMDQtMDMtMDVUMjM6MDM6MDBaPC9vOkNyZWF0ZWQ+CisgIDxvOkxhc3RTYXZlZD4yMDA0LTAzLTA1VDIzOjAzOjAwWjwvbzpMYXN0U2F2ZWQ+CisgIDxvOlBhZ2VzPjQ8L286UGFnZXM+CisgIDxvOldvcmRzPjE2MjY8L286V29yZHM+CisgIDxvOkNoYXJhY3RlcnM+OTI3MDwvbzpDaGFyYWN0ZXJzPgorICAgPG86TGluZXM+Nzc8L286TGluZXM+CisgIDxvOlBhcmFncmFwaHM+MTg8L286UGFyYWdyYXBocz4KKyAgPG86Q2hhcmFjdGVyc1dpdGhTcGFjZXM+MTEzODQ8L286Q2hhcmFjdGVyc1dpdGhTcGFjZXM+CisgIDxvOlZlcnNpb24+OS40NDAyPC9vOlZlcnNpb24+CisgPC9vOkRvY3VtZW50UHJvcGVydGllcz4KKzwveG1sPjwhW2VuZGlmXS0tPjwhLS1baWYgZ3RlIG1zbyA5XT48eG1sPgorIDx3OldvcmREb2N1bWVudD4KKyAgPHc6VHJhY2tSZXZpc2lvbnMvPgorIDwvdzpXb3JkRG9jdW1lbnQ+Cis8L3htbD48IVtlbmRpZl0tLT4KKzxzdHlsZT4KKzwhLS0KKyAvKiBGb250IERlZmluaXRpb25zICovCitAZm9udC1mYWNlCisJe2ZvbnQtZmFtaWx5OlRhaG9tYTsKKwlwYW5vc2UtMToyIDExIDYgNCAzIDUgNCA0IDIgNDsKKwltc28tZm9udC1jaGFyc2V0OjA7CisJbXNvLWdlbmVyaWMtZm9udC1mYW1pbHk6c3dpc3M7CisJbXNvLWZvbnQtcGl0Y2g6dmFyaWFibGU7CisJbXNvLWZvbnQtc2lnbmF0dXJlOjU1MzY3OTQ5NSAtMjE0NzQ4MzY0OCA4IDAgNjYwNDcgMDt9CisgLyogU3R5bGUgRGVmaW5pdGlvbnMgKi8KK3AuTXNvTm9ybWFsLCBsaS5Nc29Ob3JtYWwsIGRpdi5Nc29Ob3JtYWwKKwl7bXNvLXN0eWxlLXBhcmVudDoiIjsKKwltYXJnaW46MGluOworCW1hcmdpbi1ib3R0b206LjAwMDFwdDsKKwltc28tcGFnaW5hdGlvbjp3aWRvdy1vcnBoYW47CisJZm9udC1zaXplOjEyLjBwdDsKKwlmb250LWZhbWlseToiVGltZXMgTmV3IFJvbWFuIjsKKwltc28tZmFyZWFzdC1mb250LWZhbWlseToiVGltZXMgTmV3IFJvbWFuIjt9CitwCisJe21hcmdpbi1yaWdodDowaW47CisJbXNvLW1hcmdpbi10b3AtYWx0OmF1dG87CisJbXNvLW1hcmdpbi1ib3R0b20tYWx0OmF1dG87CisJbWFyZ2luLWxlZnQ6MGluOworCW1zby1wYWdpbmF0aW9uOndpZG93LW9ycGhhbjsKKwlmb250LXNpemU6MTIuMHB0OworCWZvbnQtZmFtaWx5OiJUaW1lcyBOZXcgUm9tYW4iOworCW1zby1mYXJlYXN0LWZvbnQtZmFtaWx5OiJUaW1lcyBOZXcgUm9tYW4iO30KK3AuQmFsbG9vblRleHQsIGxpLkJhbGxvb25UZXh0LCBkaXYuQmFsbG9vblRleHQKKwl7bXNvLXN0eWxlLW5hbWU6IkJhbGxvb24gVGV4dCI7CisJbWFyZ2luOjBpbjsKKwltYXJnaW4tYm90dG9tOi4wMDAxcHQ7CisJbXNvLXBhZ2luYXRpb246d2lkb3ctb3JwaGFuOworCWZvbnQtc2l6ZTo4LjBwdDsKKwlmb250LWZhbWlseTpUYWhvbWE7CisJbXNvLWZhcmVhc3QtZm9udC1mYW1pbHk6IlRpbWVzIE5ldyBSb21hbiI7fQorQHBhZ2UgU2VjdGlvbjEKKwl7c2l6ZTo4LjVpbiAxMS4waW47CisJbWFyZ2luOjEuMGluIDEuMjVpbiAxLjBpbiAxLjI1aW47CisJbXNvLWhlYWRlci1tYXJnaW46LjVpbjsKKwltc28tZm9vdGVyLW1hcmdpbjouNWluOworCW1zby1wYXBlci1zb3VyY2U6MDt9CitkaXYuU2VjdGlvbjEKKwl7cGFnZTpTZWN0aW9uMTt9CistLT4KKzwvc3R5bGU+Cis8L2hlYWQ+CisKKzxib2R5IGxhbmc9RU4tVVMgc3R5bGU9J3RhYi1pbnRlcnZhbDouNWluJz4KKworPGRpdiBjbGFzcz1TZWN0aW9uMT4KKworPHAgYWxpZ249Y2VudGVyIHN0eWxlPSd0ZXh0LWFsaWduOmNlbnRlcic+PGI+RWNsaXBzZSBQdWJsaWMgTGljZW5zZSAtIHYgMS4wPC9iPgorPC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+VEhFIEFDQ09NUEFOWUlORyBQUk9HUkFNIElTIFBST1ZJREVEIFVOREVSCitUSEUgVEVSTVMgT0YgVEhJUyBFQ0xJUFNFIFBVQkxJQyBMSUNFTlNFICgmcXVvdDtBR1JFRU1FTlQmcXVvdDspLiBBTlkgVVNFLAorUkVQUk9EVUNUSU9OIE9SIERJU1RSSUJVVElPTiBPRiBUSEUgUFJPR1JBTSBDT05TVElUVVRFUyBSRUNJUElFTlQnUyBBQ0NFUFRBTkNFCitPRiBUSElTIEFHUkVFTUVOVC48L3NwYW4+IDwvcD4KKworPHA+PGI+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPjEuIERFRklOSVRJT05TPC9zcGFuPjwvYj4gPC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+JnF1b3Q7Q29udHJpYnV0aW9uJnF1b3Q7IG1lYW5zOjwvc3Bhbj4gPC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5hKQoraW4gdGhlIGNhc2Ugb2YgdGhlIGluaXRpYWwgQ29udHJpYnV0b3IsIHRoZSBpbml0aWFsIGNvZGUgYW5kIGRvY3VtZW50YXRpb24KK2Rpc3RyaWJ1dGVkIHVuZGVyIHRoaXMgQWdyZWVtZW50LCBhbmQ8YnIgY2xlYXI9bGVmdD4KK2IpIGluIHRoZSBjYXNlIG9mIGVhY2ggc3Vic2VxdWVudCBDb250cmlidXRvcjo8L3NwYW4+PC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5pKQorY2hhbmdlcyB0byB0aGUgUHJvZ3JhbSwgYW5kPC9zcGFuPjwvcD4KKworPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+aWkpCithZGRpdGlvbnMgdG8gdGhlIFByb2dyYW07PC9zcGFuPjwvcD4KKworPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+d2hlcmUKK3N1Y2ggY2hhbmdlcyBhbmQvb3IgYWRkaXRpb25zIHRvIHRoZSBQcm9ncmFtIG9yaWdpbmF0ZSBmcm9tIGFuZCBhcmUgZGlzdHJpYnV0ZWQKK2J5IHRoYXQgcGFydGljdWxhciBDb250cmlidXRvci4gQSBDb250cmlidXRpb24gJ29yaWdpbmF0ZXMnIGZyb20gYSBDb250cmlidXRvcgoraWYgaXQgd2FzIGFkZGVkIHRvIHRoZSBQcm9ncmFtIGJ5IHN1Y2ggQ29udHJpYnV0b3IgaXRzZWxmIG9yIGFueW9uZSBhY3Rpbmcgb24KK3N1Y2ggQ29udHJpYnV0b3IncyBiZWhhbGYuIENvbnRyaWJ1dGlvbnMgZG8gbm90IGluY2x1ZGUgYWRkaXRpb25zIHRvIHRoZQorUHJvZ3JhbSB3aGljaDogKGkpIGFyZSBzZXBhcmF0ZSBtb2R1bGVzIG9mIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIGluIGNvbmp1bmN0aW9uCit3aXRoIHRoZSBQcm9ncmFtIHVuZGVyIHRoZWlyIG93biBsaWNlbnNlIGFncmVlbWVudCwgYW5kIChpaSkgYXJlIG5vdCBkZXJpdmF0aXZlCit3b3JrcyBvZiB0aGUgUHJvZ3JhbS4gPC9zcGFuPjwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPiZxdW90O0NvbnRyaWJ1dG9yJnF1b3Q7IG1lYW5zIGFueSBwZXJzb24gb3IKK2VudGl0eSB0aGF0IGRpc3RyaWJ1dGVzIHRoZSBQcm9ncmFtLjwvc3Bhbj4gPC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+JnF1b3Q7TGljZW5zZWQgUGF0ZW50cyAmcXVvdDsgbWVhbiBwYXRlbnQKK2NsYWltcyBsaWNlbnNhYmxlIGJ5IGEgQ29udHJpYnV0b3Igd2hpY2ggYXJlIG5lY2Vzc2FyaWx5IGluZnJpbmdlZCBieSB0aGUgdXNlCitvciBzYWxlIG9mIGl0cyBDb250cmlidXRpb24gYWxvbmUgb3Igd2hlbiBjb21iaW5lZCB3aXRoIHRoZSBQcm9ncmFtLiA8L3NwYW4+PC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+JnF1b3Q7UHJvZ3JhbSZxdW90OyBtZWFucyB0aGUgQ29udHJpYnV0aW9ucworZGlzdHJpYnV0ZWQgaW4gYWNjb3JkYW5jZSB3aXRoIHRoaXMgQWdyZWVtZW50Ljwvc3Bhbj4gPC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+JnF1b3Q7UmVjaXBpZW50JnF1b3Q7IG1lYW5zIGFueW9uZSB3aG8KK3JlY2VpdmVzIHRoZSBQcm9ncmFtIHVuZGVyIHRoaXMgQWdyZWVtZW50LCBpbmNsdWRpbmcgYWxsIENvbnRyaWJ1dG9ycy48L3NwYW4+IDwvcD4KKworPHA+PGI+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPjIuIEdSQU5UIE9GIFJJR0hUUzwvc3Bhbj48L2I+IDwvcD4KKworPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YSkKK1N1YmplY3QgdG8gdGhlIHRlcm1zIG9mIHRoaXMgQWdyZWVtZW50LCBlYWNoIENvbnRyaWJ1dG9yIGhlcmVieSBncmFudHMgUmVjaXBpZW50CithIG5vbi1leGNsdXNpdmUsIHdvcmxkd2lkZSwgcm95YWx0eS1mcmVlIGNvcHlyaWdodCBsaWNlbnNlIHRvPHNwYW4KK3N0eWxlPSdjb2xvcjpyZWQnPiA8L3NwYW4+cmVwcm9kdWNlLCBwcmVwYXJlIGRlcml2YXRpdmUgd29ya3Mgb2YsIHB1YmxpY2x5CitkaXNwbGF5LCBwdWJsaWNseSBwZXJmb3JtLCBkaXN0cmlidXRlIGFuZCBzdWJsaWNlbnNlIHRoZSBDb250cmlidXRpb24gb2Ygc3VjaAorQ29udHJpYnV0b3IsIGlmIGFueSwgYW5kIHN1Y2ggZGVyaXZhdGl2ZSB3b3JrcywgaW4gc291cmNlIGNvZGUgYW5kIG9iamVjdCBjb2RlCitmb3JtLjwvc3Bhbj48L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmIpCitTdWJqZWN0IHRvIHRoZSB0ZXJtcyBvZiB0aGlzIEFncmVlbWVudCwgZWFjaCBDb250cmlidXRvciBoZXJlYnkgZ3JhbnRzCitSZWNpcGllbnQgYSBub24tZXhjbHVzaXZlLCB3b3JsZHdpZGUsPHNwYW4gc3R5bGU9J2NvbG9yOmdyZWVuJz4gPC9zcGFuPnJveWFsdHktZnJlZQorcGF0ZW50IGxpY2Vuc2UgdW5kZXIgTGljZW5zZWQgUGF0ZW50cyB0byBtYWtlLCB1c2UsIHNlbGwsIG9mZmVyIHRvIHNlbGwsIGltcG9ydAorYW5kIG90aGVyd2lzZSB0cmFuc2ZlciB0aGUgQ29udHJpYnV0aW9uIG9mIHN1Y2ggQ29udHJpYnV0b3IsIGlmIGFueSwgaW4gc291cmNlCitjb2RlIGFuZCBvYmplY3QgY29kZSBmb3JtLiBUaGlzIHBhdGVudCBsaWNlbnNlIHNoYWxsIGFwcGx5IHRvIHRoZSBjb21iaW5hdGlvbgorb2YgdGhlIENvbnRyaWJ1dGlvbiBhbmQgdGhlIFByb2dyYW0gaWYsIGF0IHRoZSB0aW1lIHRoZSBDb250cmlidXRpb24gaXMgYWRkZWQKK2J5IHRoZSBDb250cmlidXRvciwgc3VjaCBhZGRpdGlvbiBvZiB0aGUgQ29udHJpYnV0aW9uIGNhdXNlcyBzdWNoIGNvbWJpbmF0aW9uCit0byBiZSBjb3ZlcmVkIGJ5IHRoZSBMaWNlbnNlZCBQYXRlbnRzLiBUaGUgcGF0ZW50IGxpY2Vuc2Ugc2hhbGwgbm90IGFwcGx5IHRvCithbnkgb3RoZXIgY29tYmluYXRpb25zIHdoaWNoIGluY2x1ZGUgdGhlIENvbnRyaWJ1dGlvbi4gTm8gaGFyZHdhcmUgcGVyIHNlIGlzCitsaWNlbnNlZCBoZXJldW5kZXIuIDwvc3Bhbj48L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmMpCitSZWNpcGllbnQgdW5kZXJzdGFuZHMgdGhhdCBhbHRob3VnaCBlYWNoIENvbnRyaWJ1dG9yIGdyYW50cyB0aGUgbGljZW5zZXMgdG8gaXRzCitDb250cmlidXRpb25zIHNldCBmb3J0aCBoZXJlaW4sIG5vIGFzc3VyYW5jZXMgYXJlIHByb3ZpZGVkIGJ5IGFueSBDb250cmlidXRvcgordGhhdCB0aGUgUHJvZ3JhbSBkb2VzIG5vdCBpbmZyaW5nZSB0aGUgcGF0ZW50IG9yIG90aGVyIGludGVsbGVjdHVhbCBwcm9wZXJ0eQorcmlnaHRzIG9mIGFueSBvdGhlciBlbnRpdHkuIEVhY2ggQ29udHJpYnV0b3IgZGlzY2xhaW1zIGFueSBsaWFiaWxpdHkgdG8gUmVjaXBpZW50Citmb3IgY2xhaW1zIGJyb3VnaHQgYnkgYW55IG90aGVyIGVudGl0eSBiYXNlZCBvbiBpbmZyaW5nZW1lbnQgb2YgaW50ZWxsZWN0dWFsCitwcm9wZXJ0eSByaWdodHMgb3Igb3RoZXJ3aXNlLiBBcyBhIGNvbmRpdGlvbiB0byBleGVyY2lzaW5nIHRoZSByaWdodHMgYW5kCitsaWNlbnNlcyBncmFudGVkIGhlcmV1bmRlciwgZWFjaCBSZWNpcGllbnQgaGVyZWJ5IGFzc3VtZXMgc29sZSByZXNwb25zaWJpbGl0eQordG8gc2VjdXJlIGFueSBvdGhlciBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIG5lZWRlZCwgaWYgYW55LiBGb3IgZXhhbXBsZSwKK2lmIGEgdGhpcmQgcGFydHkgcGF0ZW50IGxpY2Vuc2UgaXMgcmVxdWlyZWQgdG8gYWxsb3cgUmVjaXBpZW50IHRvIGRpc3RyaWJ1dGUKK3RoZSBQcm9ncmFtLCBpdCBpcyBSZWNpcGllbnQncyByZXNwb25zaWJpbGl0eSB0byBhY3F1aXJlIHRoYXQgbGljZW5zZSBiZWZvcmUKK2Rpc3RyaWJ1dGluZyB0aGUgUHJvZ3JhbS48L3NwYW4+PC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5kKQorRWFjaCBDb250cmlidXRvciByZXByZXNlbnRzIHRoYXQgdG8gaXRzIGtub3dsZWRnZSBpdCBoYXMgc3VmZmljaWVudCBjb3B5cmlnaHQKK3JpZ2h0cyBpbiBpdHMgQ29udHJpYnV0aW9uLCBpZiBhbnksIHRvIGdyYW50IHRoZSBjb3B5cmlnaHQgbGljZW5zZSBzZXQgZm9ydGggaW4KK3RoaXMgQWdyZWVtZW50LiA8L3NwYW4+PC9wPgorCis8cD48Yj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+My4gUkVRVUlSRU1FTlRTPC9zcGFuPjwvYj4gPC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+QSBDb250cmlidXRvciBtYXkgY2hvb3NlIHRvIGRpc3RyaWJ1dGUgdGhlCitQcm9ncmFtIGluIG9iamVjdCBjb2RlIGZvcm0gdW5kZXIgaXRzIG93biBsaWNlbnNlIGFncmVlbWVudCwgcHJvdmlkZWQgdGhhdDo8L3NwYW4+Cis8L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmEpCitpdCBjb21wbGllcyB3aXRoIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGlzIEFncmVlbWVudDsgYW5kPC9zcGFuPjwvcD4KKworPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YikKK2l0cyBsaWNlbnNlIGFncmVlbWVudDo8L3NwYW4+PC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5pKQorZWZmZWN0aXZlbHkgZGlzY2xhaW1zIG9uIGJlaGFsZiBvZiBhbGwgQ29udHJpYnV0b3JzIGFsbCB3YXJyYW50aWVzIGFuZAorY29uZGl0aW9ucywgZXhwcmVzcyBhbmQgaW1wbGllZCwgaW5jbHVkaW5nIHdhcnJhbnRpZXMgb3IgY29uZGl0aW9ucyBvZiB0aXRsZQorYW5kIG5vbi1pbmZyaW5nZW1lbnQsIGFuZCBpbXBsaWVkIHdhcnJhbnRpZXMgb3IgY29uZGl0aW9ucyBvZiBtZXJjaGFudGFiaWxpdHkKK2FuZCBmaXRuZXNzIGZvciBhIHBhcnRpY3VsYXIgcHVycG9zZTsgPC9zcGFuPjwvcD4KKworPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+aWkpCitlZmZlY3RpdmVseSBleGNsdWRlcyBvbiBiZWhhbGYgb2YgYWxsIENvbnRyaWJ1dG9ycyBhbGwgbGlhYmlsaXR5IGZvciBkYW1hZ2VzLAoraW5jbHVkaW5nIGRpcmVjdCwgaW5kaXJlY3QsIHNwZWNpYWwsIGluY2lkZW50YWwgYW5kIGNvbnNlcXVlbnRpYWwgZGFtYWdlcywgc3VjaAorYXMgbG9zdCBwcm9maXRzOyA8L3NwYW4+PC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5paWkpCitzdGF0ZXMgdGhhdCBhbnkgcHJvdmlzaW9ucyB3aGljaCBkaWZmZXIgZnJvbSB0aGlzIEFncmVlbWVudCBhcmUgb2ZmZXJlZCBieSB0aGF0CitDb250cmlidXRvciBhbG9uZSBhbmQgbm90IGJ5IGFueSBvdGhlciBwYXJ0eTsgYW5kPC9zcGFuPjwvcD4KKworPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+aXYpCitzdGF0ZXMgdGhhdCBzb3VyY2UgY29kZSBmb3IgdGhlIFByb2dyYW0gaXMgYXZhaWxhYmxlIGZyb20gc3VjaCBDb250cmlidXRvciwgYW5kCitpbmZvcm1zIGxpY2Vuc2VlcyBob3cgdG8gb2J0YWluIGl0IGluIGEgcmVhc29uYWJsZSBtYW5uZXIgb24gb3IgdGhyb3VnaCBhCittZWRpdW0gY3VzdG9tYXJpbHkgdXNlZCBmb3Igc29mdHdhcmUgZXhjaGFuZ2UuPHNwYW4gc3R5bGU9J2NvbG9yOmJsdWUnPiA8L3NwYW4+PC9zcGFuPjwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPldoZW4gdGhlIFByb2dyYW0gaXMgbWFkZSBhdmFpbGFibGUgaW4gc291cmNlCitjb2RlIGZvcm06PC9zcGFuPiA8L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmEpCitpdCBtdXN0IGJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoaXMgQWdyZWVtZW50OyBhbmQgPC9zcGFuPjwvcD4KKworPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YikgYQorY29weSBvZiB0aGlzIEFncmVlbWVudCBtdXN0IGJlIGluY2x1ZGVkIHdpdGggZWFjaCBjb3B5IG9mIHRoZSBQcm9ncmFtLiA8L3NwYW4+PC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+Q29udHJpYnV0b3JzIG1heSBub3QgcmVtb3ZlIG9yIGFsdGVyIGFueQorY29weXJpZ2h0IG5vdGljZXMgY29udGFpbmVkIHdpdGhpbiB0aGUgUHJvZ3JhbS4gPC9zcGFuPjwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkVhY2ggQ29udHJpYnV0b3IgbXVzdCBpZGVudGlmeSBpdHNlbGYgYXMgdGhlCitvcmlnaW5hdG9yIG9mIGl0cyBDb250cmlidXRpb24sIGlmIGFueSwgaW4gYSBtYW5uZXIgdGhhdCByZWFzb25hYmx5IGFsbG93cworc3Vic2VxdWVudCBSZWNpcGllbnRzIHRvIGlkZW50aWZ5IHRoZSBvcmlnaW5hdG9yIG9mIHRoZSBDb250cmlidXRpb24uIDwvc3Bhbj48L3A+CisKKzxwPjxiPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz40LiBDT01NRVJDSUFMIERJU1RSSUJVVElPTjwvc3Bhbj48L2I+IDwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkNvbW1lcmNpYWwgZGlzdHJpYnV0b3JzIG9mIHNvZnR3YXJlIG1heQorYWNjZXB0IGNlcnRhaW4gcmVzcG9uc2liaWxpdGllcyB3aXRoIHJlc3BlY3QgdG8gZW5kIHVzZXJzLCBidXNpbmVzcyBwYXJ0bmVycworYW5kIHRoZSBsaWtlLiBXaGlsZSB0aGlzIGxpY2Vuc2UgaXMgaW50ZW5kZWQgdG8gZmFjaWxpdGF0ZSB0aGUgY29tbWVyY2lhbCB1c2UKK29mIHRoZSBQcm9ncmFtLCB0aGUgQ29udHJpYnV0b3Igd2hvIGluY2x1ZGVzIHRoZSBQcm9ncmFtIGluIGEgY29tbWVyY2lhbAorcHJvZHVjdCBvZmZlcmluZyBzaG91bGQgZG8gc28gaW4gYSBtYW5uZXIgd2hpY2ggZG9lcyBub3QgY3JlYXRlIHBvdGVudGlhbAorbGlhYmlsaXR5IGZvciBvdGhlciBDb250cmlidXRvcnMuIFRoZXJlZm9yZSwgaWYgYSBDb250cmlidXRvciBpbmNsdWRlcyB0aGUKK1Byb2dyYW0gaW4gYSBjb21tZXJjaWFsIHByb2R1Y3Qgb2ZmZXJpbmcsIHN1Y2ggQ29udHJpYnV0b3IgKCZxdW90O0NvbW1lcmNpYWwKK0NvbnRyaWJ1dG9yJnF1b3Q7KSBoZXJlYnkgYWdyZWVzIHRvIGRlZmVuZCBhbmQgaW5kZW1uaWZ5IGV2ZXJ5IG90aGVyCitDb250cmlidXRvciAoJnF1b3Q7SW5kZW1uaWZpZWQgQ29udHJpYnV0b3ImcXVvdDspIGFnYWluc3QgYW55IGxvc3NlcywgZGFtYWdlcyBhbmQKK2Nvc3RzIChjb2xsZWN0aXZlbHkgJnF1b3Q7TG9zc2VzJnF1b3Q7KSBhcmlzaW5nIGZyb20gY2xhaW1zLCBsYXdzdWl0cyBhbmQgb3RoZXIKK2xlZ2FsIGFjdGlvbnMgYnJvdWdodCBieSBhIHRoaXJkIHBhcnR5IGFnYWluc3QgdGhlIEluZGVtbmlmaWVkIENvbnRyaWJ1dG9yIHRvCit0aGUgZXh0ZW50IGNhdXNlZCBieSB0aGUgYWN0cyBvciBvbWlzc2lvbnMgb2Ygc3VjaCBDb21tZXJjaWFsIENvbnRyaWJ1dG9yIGluCitjb25uZWN0aW9uIHdpdGggaXRzIGRpc3RyaWJ1dGlvbiBvZiB0aGUgUHJvZ3JhbSBpbiBhIGNvbW1lcmNpYWwgcHJvZHVjdAorb2ZmZXJpbmcuIFRoZSBvYmxpZ2F0aW9ucyBpbiB0aGlzIHNlY3Rpb24gZG8gbm90IGFwcGx5IHRvIGFueSBjbGFpbXMgb3IgTG9zc2VzCityZWxhdGluZyB0byBhbnkgYWN0dWFsIG9yIGFsbGVnZWQgaW50ZWxsZWN0dWFsIHByb3BlcnR5IGluZnJpbmdlbWVudC4gSW4gb3JkZXIKK3RvIHF1YWxpZnksIGFuIEluZGVtbmlmaWVkIENvbnRyaWJ1dG9yIG11c3Q6IGEpIHByb21wdGx5IG5vdGlmeSB0aGUgQ29tbWVyY2lhbAorQ29udHJpYnV0b3IgaW4gd3JpdGluZyBvZiBzdWNoIGNsYWltLCBhbmQgYikgYWxsb3cgdGhlIENvbW1lcmNpYWwgQ29udHJpYnV0b3IKK3RvIGNvbnRyb2wsIGFuZCBjb29wZXJhdGUgd2l0aCB0aGUgQ29tbWVyY2lhbCBDb250cmlidXRvciBpbiwgdGhlIGRlZmVuc2UgYW5kCithbnkgcmVsYXRlZCBzZXR0bGVtZW50IG5lZ290aWF0aW9ucy4gVGhlIEluZGVtbmlmaWVkIENvbnRyaWJ1dG9yIG1heSBwYXJ0aWNpcGF0ZQoraW4gYW55IHN1Y2ggY2xhaW0gYXQgaXRzIG93biBleHBlbnNlLjwvc3Bhbj4gPC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+Rm9yIGV4YW1wbGUsIGEgQ29udHJpYnV0b3IgbWlnaHQgaW5jbHVkZSB0aGUKK1Byb2dyYW0gaW4gYSBjb21tZXJjaWFsIHByb2R1Y3Qgb2ZmZXJpbmcsIFByb2R1Y3QgWC4gVGhhdCBDb250cmlidXRvciBpcyB0aGVuIGEKK0NvbW1lcmNpYWwgQ29udHJpYnV0b3IuIElmIHRoYXQgQ29tbWVyY2lhbCBDb250cmlidXRvciB0aGVuIG1ha2VzIHBlcmZvcm1hbmNlCitjbGFpbXMsIG9yIG9mZmVycyB3YXJyYW50aWVzIHJlbGF0ZWQgdG8gUHJvZHVjdCBYLCB0aG9zZSBwZXJmb3JtYW5jZSBjbGFpbXMgYW5kCit3YXJyYW50aWVzIGFyZSBzdWNoIENvbW1lcmNpYWwgQ29udHJpYnV0b3IncyByZXNwb25zaWJpbGl0eSBhbG9uZS4gVW5kZXIgdGhpcworc2VjdGlvbiwgdGhlIENvbW1lcmNpYWwgQ29udHJpYnV0b3Igd291bGQgaGF2ZSB0byBkZWZlbmQgY2xhaW1zIGFnYWluc3QgdGhlCitvdGhlciBDb250cmlidXRvcnMgcmVsYXRlZCB0byB0aG9zZSBwZXJmb3JtYW5jZSBjbGFpbXMgYW5kIHdhcnJhbnRpZXMsIGFuZCBpZiBhCitjb3VydCByZXF1aXJlcyBhbnkgb3RoZXIgQ29udHJpYnV0b3IgdG8gcGF5IGFueSBkYW1hZ2VzIGFzIGEgcmVzdWx0LCB0aGUKK0NvbW1lcmNpYWwgQ29udHJpYnV0b3IgbXVzdCBwYXkgdGhvc2UgZGFtYWdlcy48L3NwYW4+IDwvcD4KKworPHA+PGI+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPjUuIE5PIFdBUlJBTlRZPC9zcGFuPjwvYj4gPC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+RVhDRVBUIEFTIEVYUFJFU1NMWSBTRVQgRk9SVEggSU4gVEhJUworQUdSRUVNRU5ULCBUSEUgUFJPR1JBTSBJUyBQUk9WSURFRCBPTiBBTiAmcXVvdDtBUyBJUyZxdW90OyBCQVNJUywgV0lUSE9VVAorV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBFSVRIRVIgRVhQUkVTUyBPUiBJTVBMSUVEIElOQ0xVRElORywKK1dJVEhPVVQgTElNSVRBVElPTiwgQU5ZIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBUSVRMRSwgTk9OLUlORlJJTkdFTUVOVCwKK01FUkNIQU5UQUJJTElUWSBPUiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gRWFjaCBSZWNpcGllbnQgaXMgc29sZWx5CityZXNwb25zaWJsZSBmb3IgZGV0ZXJtaW5pbmcgdGhlIGFwcHJvcHJpYXRlbmVzcyBvZiB1c2luZyBhbmQgZGlzdHJpYnV0aW5nIHRoZQorUHJvZ3JhbSBhbmQgYXNzdW1lcyBhbGwgcmlza3MgYXNzb2NpYXRlZCB3aXRoIGl0cyBleGVyY2lzZSBvZiByaWdodHMgdW5kZXIgdGhpcworQWdyZWVtZW50ICwgaW5jbHVkaW5nIGJ1dCBub3QgbGltaXRlZCB0byB0aGUgcmlza3MgYW5kIGNvc3RzIG9mIHByb2dyYW0gZXJyb3JzLAorY29tcGxpYW5jZSB3aXRoIGFwcGxpY2FibGUgbGF3cywgZGFtYWdlIHRvIG9yIGxvc3Mgb2YgZGF0YSwgcHJvZ3JhbXMgb3IKK2VxdWlwbWVudCwgYW5kIHVuYXZhaWxhYmlsaXR5IG9yIGludGVycnVwdGlvbiBvZiBvcGVyYXRpb25zLiA8L3NwYW4+PC9wPgorCis8cD48Yj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+Ni4gRElTQ0xBSU1FUiBPRiBMSUFCSUxJVFk8L3NwYW4+PC9iPiA8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5FWENFUFQgQVMgRVhQUkVTU0xZIFNFVCBGT1JUSCBJTiBUSElTCitBR1JFRU1FTlQsIE5FSVRIRVIgUkVDSVBJRU5UIE5PUiBBTlkgQ09OVFJJQlVUT1JTIFNIQUxMIEhBVkUgQU5ZIExJQUJJTElUWSBGT1IKK0FOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworKElOQ0xVRElORyBXSVRIT1VUIExJTUlUQVRJT04gTE9TVCBQUk9GSVRTKSwgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKK09GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HCitORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9SIERJU1RSSUJVVElPTiBPRgorVEhFIFBST0dSQU0gT1IgVEhFIEVYRVJDSVNFIE9GIEFOWSBSSUdIVFMgR1JBTlRFRCBIRVJFVU5ERVIsIEVWRU4gSUYgQURWSVNFRCBPRgorVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFUy48L3NwYW4+IDwvcD4KKworPHA+PGI+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPjcuIEdFTkVSQUw8L3NwYW4+PC9iPiA8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5JZiBhbnkgcHJvdmlzaW9uIG9mIHRoaXMgQWdyZWVtZW50IGlzIGludmFsaWQKK29yIHVuZW5mb3JjZWFibGUgdW5kZXIgYXBwbGljYWJsZSBsYXcsIGl0IHNoYWxsIG5vdCBhZmZlY3QgdGhlIHZhbGlkaXR5IG9yCitlbmZvcmNlYWJpbGl0eSBvZiB0aGUgcmVtYWluZGVyIG9mIHRoZSB0ZXJtcyBvZiB0aGlzIEFncmVlbWVudCwgYW5kIHdpdGhvdXQKK2Z1cnRoZXIgYWN0aW9uIGJ5IHRoZSBwYXJ0aWVzIGhlcmV0bywgc3VjaCBwcm92aXNpb24gc2hhbGwgYmUgcmVmb3JtZWQgdG8gdGhlCittaW5pbXVtIGV4dGVudCBuZWNlc3NhcnkgdG8gbWFrZSBzdWNoIHByb3Zpc2lvbiB2YWxpZCBhbmQgZW5mb3JjZWFibGUuPC9zcGFuPiA8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5JZiBSZWNpcGllbnQgaW5zdGl0dXRlcyBwYXRlbnQgbGl0aWdhdGlvbgorYWdhaW5zdCBhbnkgZW50aXR5IChpbmNsdWRpbmcgYSBjcm9zcy1jbGFpbSBvciBjb3VudGVyY2xhaW0gaW4gYSBsYXdzdWl0KQorYWxsZWdpbmcgdGhhdCB0aGUgUHJvZ3JhbSBpdHNlbGYgKGV4Y2x1ZGluZyBjb21iaW5hdGlvbnMgb2YgdGhlIFByb2dyYW0gd2l0aAorb3RoZXIgc29mdHdhcmUgb3IgaGFyZHdhcmUpIGluZnJpbmdlcyBzdWNoIFJlY2lwaWVudCdzIHBhdGVudChzKSwgdGhlbiBzdWNoCitSZWNpcGllbnQncyByaWdodHMgZ3JhbnRlZCB1bmRlciBTZWN0aW9uIDIoYikgc2hhbGwgdGVybWluYXRlIGFzIG9mIHRoZSBkYXRlCitzdWNoIGxpdGlnYXRpb24gaXMgZmlsZWQuIDwvc3Bhbj48L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5BbGwgUmVjaXBpZW50J3MgcmlnaHRzIHVuZGVyIHRoaXMgQWdyZWVtZW50CitzaGFsbCB0ZXJtaW5hdGUgaWYgaXQgZmFpbHMgdG8gY29tcGx5IHdpdGggYW55IG9mIHRoZSBtYXRlcmlhbCB0ZXJtcyBvcgorY29uZGl0aW9ucyBvZiB0aGlzIEFncmVlbWVudCBhbmQgZG9lcyBub3QgY3VyZSBzdWNoIGZhaWx1cmUgaW4gYSByZWFzb25hYmxlCitwZXJpb2Qgb2YgdGltZSBhZnRlciBiZWNvbWluZyBhd2FyZSBvZiBzdWNoIG5vbmNvbXBsaWFuY2UuIElmIGFsbCBSZWNpcGllbnQncworcmlnaHRzIHVuZGVyIHRoaXMgQWdyZWVtZW50IHRlcm1pbmF0ZSwgUmVjaXBpZW50IGFncmVlcyB0byBjZWFzZSB1c2UgYW5kCitkaXN0cmlidXRpb24gb2YgdGhlIFByb2dyYW0gYXMgc29vbiBhcyByZWFzb25hYmx5IHByYWN0aWNhYmxlLiBIb3dldmVyLAorUmVjaXBpZW50J3Mgb2JsaWdhdGlvbnMgdW5kZXIgdGhpcyBBZ3JlZW1lbnQgYW5kIGFueSBsaWNlbnNlcyBncmFudGVkIGJ5CitSZWNpcGllbnQgcmVsYXRpbmcgdG8gdGhlIFByb2dyYW0gc2hhbGwgY29udGludWUgYW5kIHN1cnZpdmUuIDwvc3Bhbj48L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5FdmVyeW9uZSBpcyBwZXJtaXR0ZWQgdG8gY29weSBhbmQgZGlzdHJpYnV0ZQorY29waWVzIG9mIHRoaXMgQWdyZWVtZW50LCBidXQgaW4gb3JkZXIgdG8gYXZvaWQgaW5jb25zaXN0ZW5jeSB0aGUgQWdyZWVtZW50IGlzCitjb3B5cmlnaHRlZCBhbmQgbWF5IG9ubHkgYmUgbW9kaWZpZWQgaW4gdGhlIGZvbGxvd2luZyBtYW5uZXIuIFRoZSBBZ3JlZW1lbnQKK1N0ZXdhcmQgcmVzZXJ2ZXMgdGhlIHJpZ2h0IHRvIHB1Ymxpc2ggbmV3IHZlcnNpb25zIChpbmNsdWRpbmcgcmV2aXNpb25zKSBvZgordGhpcyBBZ3JlZW1lbnQgZnJvbSB0aW1lIHRvIHRpbWUuIE5vIG9uZSBvdGhlciB0aGFuIHRoZSBBZ3JlZW1lbnQgU3Rld2FyZCBoYXMKK3RoZSByaWdodCB0byBtb2RpZnkgdGhpcyBBZ3JlZW1lbnQuIFRoZSBFY2xpcHNlIEZvdW5kYXRpb24gaXMgdGhlIGluaXRpYWwKK0FncmVlbWVudCBTdGV3YXJkLiBUaGUgRWNsaXBzZSBGb3VuZGF0aW9uIG1heSBhc3NpZ24gdGhlIHJlc3BvbnNpYmlsaXR5IHRvCitzZXJ2ZSBhcyB0aGUgQWdyZWVtZW50IFN0ZXdhcmQgdG8gYSBzdWl0YWJsZSBzZXBhcmF0ZSBlbnRpdHkuIEVhY2ggbmV3IHZlcnNpb24KK29mIHRoZSBBZ3JlZW1lbnQgd2lsbCBiZSBnaXZlbiBhIGRpc3Rpbmd1aXNoaW5nIHZlcnNpb24gbnVtYmVyLiBUaGUgUHJvZ3JhbQorKGluY2x1ZGluZyBDb250cmlidXRpb25zKSBtYXkgYWx3YXlzIGJlIGRpc3RyaWJ1dGVkIHN1YmplY3QgdG8gdGhlIHZlcnNpb24gb2YKK3RoZSBBZ3JlZW1lbnQgdW5kZXIgd2hpY2ggaXQgd2FzIHJlY2VpdmVkLiBJbiBhZGRpdGlvbiwgYWZ0ZXIgYSBuZXcgdmVyc2lvbiBvZgordGhlIEFncmVlbWVudCBpcyBwdWJsaXNoZWQsIENvbnRyaWJ1dG9yIG1heSBlbGVjdCB0byBkaXN0cmlidXRlIHRoZSBQcm9ncmFtCisoaW5jbHVkaW5nIGl0cyBDb250cmlidXRpb25zKSB1bmRlciB0aGUgbmV3IHZlcnNpb24uIEV4Y2VwdCBhcyBleHByZXNzbHkgc3RhdGVkCitpbiBTZWN0aW9ucyAyKGEpIGFuZCAyKGIpIGFib3ZlLCBSZWNpcGllbnQgcmVjZWl2ZXMgbm8gcmlnaHRzIG9yIGxpY2Vuc2VzIHRvCit0aGUgaW50ZWxsZWN0dWFsIHByb3BlcnR5IG9mIGFueSBDb250cmlidXRvciB1bmRlciB0aGlzIEFncmVlbWVudCwgd2hldGhlcgorZXhwcmVzc2x5LCBieSBpbXBsaWNhdGlvbiwgZXN0b3BwZWwgb3Igb3RoZXJ3aXNlLiBBbGwgcmlnaHRzIGluIHRoZSBQcm9ncmFtIG5vdAorZXhwcmVzc2x5IGdyYW50ZWQgdW5kZXIgdGhpcyBBZ3JlZW1lbnQgYXJlIHJlc2VydmVkLjwvc3Bhbj4gPC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+VGhpcyBBZ3JlZW1lbnQgaXMgZ292ZXJuZWQgYnkgdGhlIGxhd3Mgb2YgdGhlCitTdGF0ZSBvZiBOZXcgWW9yayBhbmQgdGhlIGludGVsbGVjdHVhbCBwcm9wZXJ0eSBsYXdzIG9mIHRoZSBVbml0ZWQgU3RhdGVzIG9mCitBbWVyaWNhLiBObyBwYXJ0eSB0byB0aGlzIEFncmVlbWVudCB3aWxsIGJyaW5nIGEgbGVnYWwgYWN0aW9uIHVuZGVyIHRoaXMKK0FncmVlbWVudCBtb3JlIHRoYW4gb25lIHllYXIgYWZ0ZXIgdGhlIGNhdXNlIG9mIGFjdGlvbiBhcm9zZS4gRWFjaCBwYXJ0eSB3YWl2ZXMKK2l0cyByaWdodHMgdG8gYSBqdXJ5IHRyaWFsIGluIGFueSByZXN1bHRpbmcgbGl0aWdhdGlvbi48L3NwYW4+IDwvcD4KKworPHAgY2xhc3M9TXNvTm9ybWFsPjwhW2lmICFzdXBwb3J0RW1wdHlQYXJhc10+Jm5ic3A7PCFbZW5kaWZdPjxvOnA+PC9vOnA+PC9wPgorCis8L2Rpdj4KKworPC9ib2R5PgorCis8L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uuc3RlbS5kaXN0cmlidXRlZC5mZWF0dXJlL2ZlYXR1cmUucHJvcGVydGllcyBiL2ZlYXR1cmVzL29yZy5lY2xpcHNlLnN0ZW0uZGlzdHJpYnV0ZWQuZmVhdHVyZS9mZWF0dXJlLnByb3BlcnRpZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGFjNzg1MAotLS0gL2Rldi9udWxsCisrKyBiL2ZlYXR1cmVzL29yZy5lY2xpcHNlLnN0ZW0uZGlzdHJpYnV0ZWQuZmVhdHVyZS9mZWF0dXJlLnByb3BlcnRpZXMKQEAgLTAsMCArMSwxNzQgQEAKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQ29weXJpZ2h0IChjKSAyMDExIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorIyBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisjIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorIyB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorIyBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorIyAKKyMgQ29udHJpYnV0b3JzOgorIyAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIGZlYXR1cmUucHJvcGVydGllcworIyBjb250YWlucyBleHRlcm5hbGl6ZWQgc3RyaW5ncyBmb3IgZmVhdHVyZS54bWwKKyMgIiVmb28iIGluIGZlYXR1cmUueG1sIGNvcnJlc3BvbmRzIHRvIHRoZSBrZXkgImZvbyIgaW4gdGhpcyBmaWxlCisjIGphdmEuaW8uUHJvcGVydGllcyBmaWxlIChJU08gODg1OS0xIHdpdGggIlwiIGVzY2FwZXMpCisjIFRoaXMgZmlsZSBzaG91bGQgYmUgdHJhbnNsYXRlZC4KKworIyAiZmVhdHVyZU5hbWUiIHByb3BlcnR5IC0gbmFtZSBvZiB0aGUgZmVhdHVyZQorZmVhdHVyZU5hbWU9U1RFTSBEaXN0cmlidXRlZCBTaW11bGF0aW9uIENvbnRyb2xsZXIKKworIyAicHJvdmlkZXJOYW1lIiBwcm9wZXJ0eSAtIG5hbWUgb2YgdGhlIGNvbXBhbnkgdGhhdCBwcm92aWRlcyB0aGUgZmVhdHVyZQorcHJvdmlkZXJOYW1lPUVjbGlwc2Uub3JnCisKKyMgInVwZGF0ZVNpdGVOYW1lIiBwcm9wZXJ0eSAtIGxhYmVsIGZvciB0aGUgdXBkYXRlIHNpdGUKK3VwZGF0ZVNpdGVOYW1lPVNURU0gVXBkYXRlcworCisjICJzZWNvbmRhcnlTaXRlTmFtZSIgcHJvcGVydHkgLSBsYWJlbCBmb3IgdGhlIHNlY29uZGFyeSB1cGRhdGUgc2l0ZQorI3NlY29uZGFyeVVwZGF0ZVNpdGVOYW1lPVNURU0gVXBkYXRlcworCisjICJkZXNjcmlwdGlvbiIgcHJvcGVydHkgLSBkZXNjcmlwdGlvbiBvZiB0aGUgZmVhdHVyZQorZGVzY3JpcHRpb249RW5hYmxlcyBkaXN0cmlidXRpb24gb2Ygc2ltdWxhdGlvbnMgYWNyb3NzIFwKK211bHRpcGxlIFNURU0gaW5zdGFuY2VzLCBpbmNsdWRpbmcgY3Jvc3Mtc2VydmVyLgorCisjICJjb3B5cmlnaHQiIHByb3BlcnR5IC0gdGV4dCBvZiB0aGUgIkZlYXR1cmUgVXBkYXRlIENvcHlyaWdodCIKK2NvcHlyaWdodD1cCitDb3B5cmlnaHQgKGMpIDIwMDctMjAxMSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy5cblwKK0FsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHNcblwKK2FyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMFxuXAord2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXRcblwKK2h0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sXG5cCitcblwKK0NvbnRyaWJ1dG9yczpcblwKKyAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb25cbgorIyMjIyMjIyMjIyMjIyMjIyBlbmQgb2YgY29weXJpZ2h0IHByb3BlcnR5ICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisjICJsaWNlbnNlVVJMIiBwcm9wZXJ0eSAtIFVSTCBvZiB0aGUgIkZlYXR1cmUgTGljZW5zZSIKKyMgZG8gbm90IHRyYW5zbGF0ZSB2YWx1ZSAtIGp1c3QgY2hhbmdlIHRvIHBvaW50IHRvIGEgbG9jYWxlLXNwZWNpZmljIEhUTUwgcGFnZQorbGljZW5zZVVSTD1saWNlbnNlLmh0bWwKKworIyAibGljZW5zZSIgcHJvcGVydHkgLSB0ZXh0IG9mIHRoZSAiRmVhdHVyZSBVcGRhdGUgTGljZW5zZSIKKyMgc2hvdWxkIGJlIHBsYWluIHRleHQgdmVyc2lvbiBvZiBsaWNlbnNlIGFncmVlbWVudCBwb2ludGVkIHRvIGJlICJsaWNlbnNlVVJMIgorbGljZW5zZT1cCitFY2xpcHNlIEZvdW5kYXRpb24gU29mdHdhcmUgVXNlciBBZ3JlZW1lbnRcblwKK0FwcmlsIDE0LCAyMDEwXG5cCitcblwKK1VzYWdlIE9mIENvbnRlbnRcblwKK1xuXAorVEhFIEVDTElQU0UgRk9VTkRBVElPTiBNQUtFUyBBVkFJTEFCTEUgU09GVFdBUkUsIERPQ1VNRU5UQVRJT04sIElORk9STUFUSU9OIEFORC9PUlxuXAorT1RIRVIgTUFURVJJQUxTIEZPUiBPUEVOIFNPVVJDRSBQUk9KRUNUUyAoQ09MTEVDVElWRUxZICJDT05URU5UIikuXG5cCitVU0UgT0YgVEhFIENPTlRFTlQgSVMgR09WRVJORUQgQlkgVEhFIFRFUk1TIEFORCBDT05ESVRJT05TIE9GIFRISVNcblwKK0FHUkVFTUVOVCBBTkQvT1IgVEhFIFRFUk1TIEFORCBDT05ESVRJT05TIE9GIExJQ0VOU0UgQUdSRUVNRU5UUyBPUlxuXAorTk9USUNFUyBJTkRJQ0FURUQgT1IgUkVGRVJFTkNFRCBCRUxPVy4gIEJZIFVTSU5HIFRIRSBDT05URU5ULCBZT1VcblwKK0FHUkVFIFRIQVQgWU9VUiBVU0UgT0YgVEhFIENPTlRFTlQgSVMgR09WRVJORUQgQlkgVEhJUyBBR1JFRU1FTlRcblwKK0FORC9PUiBUSEUgVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgQU5ZIEFQUExJQ0FCTEUgTElDRU5TRSBBR1JFRU1FTlRTXG5cCitPUiBOT1RJQ0VTIElORElDQVRFRCBPUiBSRUZFUkVOQ0VEIEJFTE9XLiAgSUYgWU9VIERPIE5PVCBBR1JFRSBUTyBUSEVcblwKK1RFUk1TIEFORCBDT05ESVRJT05TIE9GIFRISVMgQUdSRUVNRU5UIEFORCBUSEUgVEVSTVMgQU5EIENPTkRJVElPTlNcblwKK09GIEFOWSBBUFBMSUNBQkxFIExJQ0VOU0UgQUdSRUVNRU5UUyBPUiBOT1RJQ0VTIElORElDQVRFRCBPUiBSRUZFUkVOQ0VEXG5cCitCRUxPVywgVEhFTiBZT1UgTUFZIE5PVCBVU0UgVEhFIENPTlRFTlQuXG5cCitcblwKK0FwcGxpY2FibGUgTGljZW5zZXNcblwKK1xuXAorVW5sZXNzIG90aGVyd2lzZSBpbmRpY2F0ZWQsIGFsbCBDb250ZW50IG1hZGUgYXZhaWxhYmxlIGJ5IHRoZVxuXAorRWNsaXBzZSBGb3VuZGF0aW9uIGlzIHByb3ZpZGVkIHRvIHlvdSB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2ZcblwKK3RoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4wICgiRVBMIikuIEEgY29weSBvZiB0aGUgRVBMIGlzXG5cCitwcm92aWRlZCB3aXRoIHRoaXMgQ29udGVudCBhbmQgaXMgYWxzbyBhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwuXG5cCitGb3IgcHVycG9zZXMgb2YgdGhlIEVQTCwgIlByb2dyYW0iIHdpbGwgbWVhbiB0aGUgQ29udGVudC5cblwKK1xuXAorQ29udGVudCBpbmNsdWRlcywgYnV0IGlzIG5vdCBsaW1pdGVkIHRvLCBzb3VyY2UgY29kZSwgb2JqZWN0IGNvZGUsXG5cCitkb2N1bWVudGF0aW9uIGFuZCBvdGhlciBmaWxlcyBtYWludGFpbmVkIGluIHRoZSBFY2xpcHNlIEZvdW5kYXRpb24gc291cmNlIGNvZGVcblwKK3JlcG9zaXRvcnkgKCJSZXBvc2l0b3J5IikgaW4gc29mdHdhcmUgbW9kdWxlcyAoIk1vZHVsZXMiKSBhbmQgbWFkZSBhdmFpbGFibGVcblwKK2FzIGRvd25sb2FkYWJsZSBhcmNoaXZlcyAoIkRvd25sb2FkcyIpLlxuXAorXG5cCisgICAgICAgLSBDb250ZW50IG1heSBiZSBzdHJ1Y3R1cmVkIGFuZCBwYWNrYWdlZCBpbnRvIG1vZHVsZXMgdG8gZmFjaWxpdGF0ZSBkZWxpdmVyaW5nLFxuXAorICAgICAgICAgZXh0ZW5kaW5nLCBhbmQgdXBncmFkaW5nIHRoZSBDb250ZW50LiBUeXBpY2FsIG1vZHVsZXMgbWF5IGluY2x1ZGUgcGx1Zy1pbnMgKCJQbHVnLWlucyIpLFxuXAorICAgICAgICAgcGx1Zy1pbiBmcmFnbWVudHMgKCJGcmFnbWVudHMiKSwgYW5kIGZlYXR1cmVzICgiRmVhdHVyZXMiKS5cblwKKyAgICAgICAtIEVhY2ggUGx1Zy1pbiBvciBGcmFnbWVudCBtYXkgYmUgcGFja2FnZWQgYXMgYSBzdWItZGlyZWN0b3J5IG9yIEpBUiAoSmF2YShUTSkgQVJjaGl2ZSlcblwKKyAgICAgICAgIGluIGEgZGlyZWN0b3J5IG5hbWVkICJwbHVnaW5zIi5cblwKKyAgICAgICAtIEEgRmVhdHVyZSBpcyBhIGJ1bmRsZSBvZiBvbmUgb3IgbW9yZSBQbHVnLWlucyBhbmQvb3IgRnJhZ21lbnRzIGFuZCBhc3NvY2lhdGVkIG1hdGVyaWFsLlxuXAorICAgICAgICAgRWFjaCBGZWF0dXJlIG1heSBiZSBwYWNrYWdlZCBhcyBhIHN1Yi1kaXJlY3RvcnkgaW4gYSBkaXJlY3RvcnkgbmFtZWQgImZlYXR1cmVzIi5cblwKKyAgICAgICAgIFdpdGhpbiBhIEZlYXR1cmUsIGZpbGVzIG5hbWVkICJmZWF0dXJlLnhtbCIgbWF5IGNvbnRhaW4gYSBsaXN0IG9mIHRoZSBuYW1lcyBhbmQgdmVyc2lvblxuXAorICAgICAgICAgbnVtYmVycyBvZiB0aGUgUGx1Zy1pbnMgYW5kL29yIEZyYWdtZW50cyBhc3NvY2lhdGVkIHdpdGggdGhhdCBGZWF0dXJlLlxuXAorICAgICAgIC0gRmVhdHVyZXMgbWF5IGFsc28gaW5jbHVkZSBvdGhlciBGZWF0dXJlcyAoIkluY2x1ZGVkIEZlYXR1cmVzIikuIFdpdGhpbiBhIEZlYXR1cmUsIGZpbGVzXG5cCisgICAgICAgICBuYW1lZCAiZmVhdHVyZS54bWwiIG1heSBjb250YWluIGEgbGlzdCBvZiB0aGUgbmFtZXMgYW5kIHZlcnNpb24gbnVtYmVycyBvZiBJbmNsdWRlZCBGZWF0dXJlcy5cblwKK1xuXAorVGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIGdvdmVybmluZyBQbHVnLWlucyBhbmQgRnJhZ21lbnRzIHNob3VsZCBiZVxuXAorY29udGFpbmVkIGluIGZpbGVzIG5hbWVkICJhYm91dC5odG1sIiAoIkFib3V0cyIpLiBUaGUgdGVybXMgYW5kXG5cCitjb25kaXRpb25zIGdvdmVybmluZyBGZWF0dXJlcyBhbmQgSW5jbHVkZWQgRmVhdHVyZXMgc2hvdWxkIGJlIGNvbnRhaW5lZFxuXAoraW4gZmlsZXMgbmFtZWQgImxpY2Vuc2UuaHRtbCIgKCJGZWF0dXJlIExpY2Vuc2VzIikuIEFib3V0cyBhbmQgRmVhdHVyZVxuXAorTGljZW5zZXMgbWF5IGJlIGxvY2F0ZWQgaW4gYW55IGRpcmVjdG9yeSBvZiBhIERvd25sb2FkIG9yIE1vZHVsZVxuXAoraW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG8gdGhlIGZvbGxvd2luZyBsb2NhdGlvbnM6XG5cCitcblwKKyAgICAgICAtIFRoZSB0b3AtbGV2ZWwgKHJvb3QpIGRpcmVjdG9yeVxuXAorICAgICAgIC0gUGx1Zy1pbiBhbmQgRnJhZ21lbnQgZGlyZWN0b3JpZXNcblwKKyAgICAgICAtIEluc2lkZSBQbHVnLWlucyBhbmQgRnJhZ21lbnRzIHBhY2thZ2VkIGFzIEpBUnNcblwKKyAgICAgICAtIFN1Yi1kaXJlY3RvcmllcyBvZiB0aGUgZGlyZWN0b3J5IG5hbWVkICJzcmMiIG9mIGNlcnRhaW4gUGx1Zy1pbnNcblwKKyAgICAgICAtIEZlYXR1cmUgZGlyZWN0b3JpZXNcblwKK1xuXAorTm90ZTogaWYgYSBGZWF0dXJlIG1hZGUgYXZhaWxhYmxlIGJ5IHRoZSBFY2xpcHNlIEZvdW5kYXRpb24gaXMgaW5zdGFsbGVkIHVzaW5nIHRoZVxuXAorUHJvdmlzaW9uaW5nIFRlY2hub2xvZ3kgKGFzIGRlZmluZWQgYmVsb3cpLCB5b3UgbXVzdCBhZ3JlZSB0byBhIGxpY2Vuc2UgKCJGZWF0dXJlIFxuXAorVXBkYXRlIExpY2Vuc2UiKSBkdXJpbmcgdGhlIGluc3RhbGxhdGlvbiBwcm9jZXNzLiBJZiB0aGUgRmVhdHVyZSBjb250YWluc1xuXAorSW5jbHVkZWQgRmVhdHVyZXMsIHRoZSBGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlIHNob3VsZCBlaXRoZXIgcHJvdmlkZSB5b3VcblwKK3dpdGggdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIGdvdmVybmluZyB0aGUgSW5jbHVkZWQgRmVhdHVyZXMgb3IgaW5mb3JtXG5cCit5b3Ugd2hlcmUgeW91IGNhbiBsb2NhdGUgdGhlbS4gRmVhdHVyZSBVcGRhdGUgTGljZW5zZXMgbWF5IGJlIGZvdW5kIGluXG5cCit0aGUgImxpY2Vuc2UiIHByb3BlcnR5IG9mIGZpbGVzIG5hbWVkICJmZWF0dXJlLnByb3BlcnRpZXMiIGZvdW5kIHdpdGhpbiBhIEZlYXR1cmUuXG5cCitTdWNoIEFib3V0cywgRmVhdHVyZSBMaWNlbnNlcywgYW5kIEZlYXR1cmUgVXBkYXRlIExpY2Vuc2VzIGNvbnRhaW4gdGhlXG5cCit0ZXJtcyBhbmQgY29uZGl0aW9ucyAob3IgcmVmZXJlbmNlcyB0byBzdWNoIHRlcm1zIGFuZCBjb25kaXRpb25zKSB0aGF0XG5cCitnb3Zlcm4geW91ciB1c2Ugb2YgdGhlIGFzc29jaWF0ZWQgQ29udGVudCBpbiB0aGF0IGRpcmVjdG9yeS5cblwKK1xuXAorVEhFIEFCT1VUUywgRkVBVFVSRSBMSUNFTlNFUywgQU5EIEZFQVRVUkUgVVBEQVRFIExJQ0VOU0VTIE1BWSBSRUZFUlxuXAorVE8gVEhFIEVQTCBPUiBPVEhFUiBMSUNFTlNFIEFHUkVFTUVOVFMsIE5PVElDRVMgT1IgVEVSTVMgQU5EIENPTkRJVElPTlMuXG5cCitTT01FIE9GIFRIRVNFIE9USEVSIExJQ0VOU0UgQUdSRUVNRU5UUyBNQVkgSU5DTFVERSAoQlVUIEFSRSBOT1QgTElNSVRFRCBUTyk6XG5cCitcblwKKyAgICAgICAtIENvbW1vbiBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMCAoYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvY3BsLXYxMC5odG1sKVxuXAorICAgICAgIC0gQXBhY2hlIFNvZnR3YXJlIExpY2Vuc2UgMS4xIChhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UpXG5cCisgICAgICAgLSBBcGFjaGUgU29mdHdhcmUgTGljZW5zZSAyLjAgKGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjApXG5cCisgICAgICAgLSBNZXRybyBMaW5rIFB1YmxpYyBMaWNlbnNlIDEuMDAgKGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3Lm9wZW5ncm91cC5vcmcvb3Blbm1vdGlmL3N1cHBvcnRlcnMvbWV0cm9saW5rL2xpY2Vuc2UuaHRtbClcblwKKyAgICAgICAtIE1vemlsbGEgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjEgKGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3Lm1vemlsbGEub3JnL01QTC9NUEwtMS4xLmh0bWwpXG5cCitcblwKK0lUIElTIFlPVVIgT0JMSUdBVElPTiBUTyBSRUFEIEFORCBBQ0NFUFQgQUxMIFNVQ0ggVEVSTVMgQU5EIENPTkRJVElPTlMgUFJJT1JcblwKK1RPIFVTRSBPRiBUSEUgQ09OVEVOVC4gSWYgbm8gQWJvdXQsIEZlYXR1cmUgTGljZW5zZSwgb3IgRmVhdHVyZSBVcGRhdGUgTGljZW5zZVxuXAoraXMgcHJvdmlkZWQsIHBsZWFzZSBjb250YWN0IHRoZSBFY2xpcHNlIEZvdW5kYXRpb24gdG8gZGV0ZXJtaW5lIHdoYXQgdGVybXMgYW5kIGNvbmRpdGlvbnNcblwKK2dvdmVybiB0aGF0IHBhcnRpY3VsYXIgQ29udGVudC5cblwKK1xuXAorXG5cVXNlIG9mIFByb3Zpc2lvbmluZyBUZWNobm9sb2d5XG5cCitcblwKK1RoZSBFY2xpcHNlIEZvdW5kYXRpb24gbWFrZXMgYXZhaWxhYmxlIHByb3Zpc2lvbmluZyBzb2Z0d2FyZSwgZXhhbXBsZXMgb2Ygd2hpY2ggaW5jbHVkZSxcblwKK2J1dCBhcmUgbm90IGxpbWl0ZWQgdG8sIHAyIGFuZCB0aGUgRWNsaXBzZSBVcGRhdGUgTWFuYWdlciAoIlByb3Zpc2lvbmluZyBUZWNobm9sb2d5IikgZm9yXG5cCit0aGUgcHVycG9zZSBvZiBhbGxvd2luZyB1c2VycyB0byBpbnN0YWxsIHNvZnR3YXJlLCBkb2N1bWVudGF0aW9uLCBpbmZvcm1hdGlvbiBhbmQvb3JcblwKK290aGVyIG1hdGVyaWFscyAoY29sbGVjdGl2ZWx5ICJJbnN0YWxsYWJsZSBTb2Z0d2FyZSIpLiBUaGlzIGNhcGFiaWxpdHkgaXMgcHJvdmlkZWQgd2l0aFxuXAordGhlIGludGVudCBvZiBhbGxvd2luZyBzdWNoIHVzZXJzIHRvIGluc3RhbGwsIGV4dGVuZCBhbmQgdXBkYXRlIEVjbGlwc2UtYmFzZWQgcHJvZHVjdHMuXG5cCitJbmZvcm1hdGlvbiBhYm91dCBwYWNrYWdpbmcgSW5zdGFsbGFibGUgU29mdHdhcmUgaXMgYXZhaWxhYmxlIGF0XG5cCitodHRwOi8vZWNsaXBzZS5vcmcvZXF1aW5veC9wMi9yZXBvc2l0b3J5X3BhY2thZ2luZy5odG1sICgiU3BlY2lmaWNhdGlvbiIpLlxuXAorXG5cCitZb3UgbWF5IHVzZSBQcm92aXNpb25pbmcgVGVjaG5vbG9neSB0byBhbGxvdyBvdGhlciBwYXJ0aWVzIHRvIGluc3RhbGwgSW5zdGFsbGFibGUgU29mdHdhcmUuXG5cCitZb3Ugc2hhbGwgYmUgcmVzcG9uc2libGUgZm9yIGVuYWJsaW5nIHRoZSBhcHBsaWNhYmxlIGxpY2Vuc2UgYWdyZWVtZW50cyByZWxhdGluZyB0byB0aGVcblwKK0luc3RhbGxhYmxlIFNvZnR3YXJlIHRvIGJlIHByZXNlbnRlZCB0bywgYW5kIGFjY2VwdGVkIGJ5LCB0aGUgdXNlcnMgb2YgdGhlIFByb3Zpc2lvbmluZyBUZWNobm9sb2d5XG5cCitpbiBhY2NvcmRhbmNlIHdpdGggdGhlIFNwZWNpZmljYXRpb24uIEJ5IHVzaW5nIFByb3Zpc2lvbmluZyBUZWNobm9sb2d5IGluIHN1Y2ggYSBtYW5uZXIgYW5kXG5cCittYWtpbmcgaXQgYXZhaWxhYmxlIGluIGFjY29yZGFuY2Ugd2l0aCB0aGUgU3BlY2lmaWNhdGlvbiwgeW91IGZ1cnRoZXIgYWNrbm93bGVkZ2UgeW91clxuXAorYWdyZWVtZW50IHRvLCBhbmQgdGhlIGFjcXVpc2l0aW9uIG9mIGFsbCBuZWNlc3NhcnkgcmlnaHRzIHRvIHBlcm1pdCB0aGUgZm9sbG93aW5nOlxuXAorXG5cCisgICAgICAgMS4gQSBzZXJpZXMgb2YgYWN0aW9ucyBtYXkgb2NjdXIgKCJQcm92aXNpb25pbmcgUHJvY2VzcyIpIGluIHdoaWNoIGEgdXNlciBtYXkgZXhlY3V0ZVxuXAorICAgICAgICAgIHRoZSBQcm92aXNpb25pbmcgVGVjaG5vbG9neSBvbiBhIG1hY2hpbmUgKCJUYXJnZXQgTWFjaGluZSIpIHdpdGggdGhlIGludGVudCBvZiBpbnN0YWxsaW5nLFxuXAorICAgICAgICAgIGV4dGVuZGluZyBvciB1cGRhdGluZyB0aGUgZnVuY3Rpb25hbGl0eSBvZiBhbiBFY2xpcHNlLWJhc2VkIHByb2R1Y3QuXG5cCisgICAgICAgMi4gRHVyaW5nIHRoZSBQcm92aXNpb25pbmcgUHJvY2VzcywgdGhlIFByb3Zpc2lvbmluZyBUZWNobm9sb2d5IG1heSBjYXVzZSB0aGlyZCBwYXJ0eVxuXAorICAgICAgICAgIEluc3RhbGxhYmxlIFNvZnR3YXJlIG9yIGEgcG9ydGlvbiB0aGVyZW9mIHRvIGJlIGFjY2Vzc2VkIGFuZCBjb3BpZWQgdG8gdGhlIFRhcmdldCBNYWNoaW5lLlxuXAorICAgICAgIDMuIFB1cnN1YW50IHRvIHRoZSBTcGVjaWZpY2F0aW9uLCB5b3Ugd2lsbCBwcm92aWRlIHRvIHRoZSB1c2VyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyB0aGF0XG5cCisgICAgICAgICAgZ292ZXJuIHRoZSB1c2Ugb2YgdGhlIEluc3RhbGxhYmxlIFNvZnR3YXJlICgiSW5zdGFsbGFibGUgU29mdHdhcmUgQWdyZWVtZW50IikgYW5kIHN1Y2hcblwKKyAgICAgICAgICBJbnN0YWxsYWJsZSBTb2Z0d2FyZSBBZ3JlZW1lbnQgc2hhbGwgYmUgYWNjZXNzZWQgZnJvbSB0aGUgVGFyZ2V0IE1hY2hpbmUgaW4gYWNjb3JkYW5jZVxuXAorICAgICAgICAgIHdpdGggdGhlIFNwZWNpZmljYXRpb24uIFN1Y2ggSW5zdGFsbGFibGUgU29mdHdhcmUgQWdyZWVtZW50IG11c3QgaW5mb3JtIHRoZSB1c2VyIG9mIHRoZVxuXAorICAgICAgICAgIHRlcm1zIGFuZCBjb25kaXRpb25zIHRoYXQgZ292ZXJuIHRoZSBJbnN0YWxsYWJsZSBTb2Z0d2FyZSBhbmQgbXVzdCBzb2xpY2l0IGFjY2VwdGFuY2UgYnlcblwKKyAgICAgICAgICB0aGUgZW5kIHVzZXIgaW4gdGhlIG1hbm5lciBwcmVzY3JpYmVkIGluIHN1Y2ggSW5zdGFsbGFibGUgU29mdHdhcmUgQWdyZWVtZW50LiBVcG9uIHN1Y2hcblwKKyAgICAgICAgICBpbmRpY2F0aW9uIG9mIGFncmVlbWVudCBieSB0aGUgdXNlciwgdGhlIHByb3Zpc2lvbmluZyBUZWNobm9sb2d5IHdpbGwgY29tcGxldGUgaW5zdGFsbGF0aW9uXG5cCisgICAgICAgICAgb2YgdGhlIEluc3RhbGxhYmxlIFNvZnR3YXJlLlxuXAorXG5cCitDcnlwdG9ncmFwaHlcblwKK1xuXAorQ29udGVudCBtYXkgY29udGFpbiBlbmNyeXB0aW9uIHNvZnR3YXJlLiBUaGUgY291bnRyeSBpbiB3aGljaCB5b3UgYXJlXG5cCitjdXJyZW50bHkgbWF5IGhhdmUgcmVzdHJpY3Rpb25zIG9uIHRoZSBpbXBvcnQsIHBvc3Nlc3Npb24sIGFuZCB1c2UsXG5cCithbmQvb3IgcmUtZXhwb3J0IHRvIGFub3RoZXIgY291bnRyeSwgb2YgZW5jcnlwdGlvbiBzb2Z0d2FyZS4gQkVGT1JFXG5cCit1c2luZyBhbnkgZW5jcnlwdGlvbiBzb2Z0d2FyZSwgcGxlYXNlIGNoZWNrIHRoZSBjb3VudHJ5J3MgbGF3cyxcblwKK3JlZ3VsYXRpb25zIGFuZCBwb2xpY2llcyBjb25jZXJuaW5nIHRoZSBpbXBvcnQsIHBvc3Nlc3Npb24sIG9yIHVzZSwgYW5kXG5cCityZS1leHBvcnQgb2YgZW5jcnlwdGlvbiBzb2Z0d2FyZSwgdG8gc2VlIGlmIHRoaXMgaXMgcGVybWl0dGVkLlxuXAorXG5cCitKYXZhIGFuZCBhbGwgSmF2YS1iYXNlZCB0cmFkZW1hcmtzIGFyZSB0cmFkZW1hcmtzIG9mIE9yYWNsZSBDb3Jwb3JhdGlvbiBpbiB0aGUgVW5pdGVkIFN0YXRlcywgb3RoZXIgY291bnRyaWVzLCBvciBib3RoLlxuCisjIyMjIyMjIyMjIyBlbmQgb2YgbGljZW5zZSBwcm9wZXJ0eSAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS5zdGVtLmRpc3RyaWJ1dGVkLmZlYXR1cmUvZmVhdHVyZS54bWwgYi9mZWF0dXJlcy9vcmcuZWNsaXBzZS5zdGVtLmRpc3RyaWJ1dGVkLmZlYXR1cmUvZmVhdHVyZS54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmJlMDEwZgotLS0gL2Rldi9udWxsCisrKyBiL2ZlYXR1cmVzL29yZy5lY2xpcHNlLnN0ZW0uZGlzdHJpYnV0ZWQuZmVhdHVyZS9mZWF0dXJlLnhtbApAQCAtMCwwICsxLDQyIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPGZlYXR1cmUKKyAgICAgIGlkPSJvcmcuZWNsaXBzZS5zdGVtLmRpc3RyaWJ1dGVkLmZlYXR1cmUiCisgICAgICBsYWJlbD0iJWZlYXR1cmVOYW1lIgorICAgICAgdmVyc2lvbj0iMS4yLjEiCisgICAgICBwcm92aWRlci1uYW1lPSIlcHJvdmlkZXJOYW1lIj4KKworICAgPGRlc2NyaXB0aW9uPgorICAgICAgJWRlc2NyaXB0aW9uCisgICA8L2Rlc2NyaXB0aW9uPgorCisgICA8Y29weXJpZ2h0PgorICAgICAgJWNvcHlyaWdodAorICAgPC9jb3B5cmlnaHQ+CisKKyAgIDxsaWNlbnNlIHVybD0iJWxpY2Vuc2VVUkwiPgorICAgICAgJWxpY2Vuc2UKKyAgIDwvbGljZW5zZT4KKworICAgPHVybD4KKyAgICAgIDx1cGRhdGUgbGFiZWw9IiV1cGRhdGVTaXRlTmFtZSIgdXJsPSJodHRwOi8vZG93bmxvYWQuZWNsaXBzZS5vcmcvc3RlbS91cGRhdGUtc2l0ZS8iLz4KKyAgIDwvdXJsPgorCisgICA8cmVxdWlyZXM+CisgICAgICA8aW1wb3J0IHBsdWdpbj0ib3JnLmVjbGlwc2UudWkiLz4KKyAgICAgIDxpbXBvcnQgcGx1Z2luPSJvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUiLz4KKyAgICAgIDxpbXBvcnQgcGx1Z2luPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUiLz4KKyAgICAgIDxpbXBvcnQgcGx1Z2luPSJvcmcuZWNsaXBzZS5zdGVtLmpvYnMiLz4KKyAgICAgIDxpbXBvcnQgcGx1Z2luPSJvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zIi8+CisgICAgICA8aW1wb3J0IHBsdWdpbj0ib3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzIi8+CisgICAgICA8aW1wb3J0IHBsdWdpbj0ib3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzIi8+CisgICAgICA8aW1wb3J0IHBsdWdpbj0ib3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeSIvPgorICAgPC9yZXF1aXJlcz4KKworICAgPHBsdWdpbgorICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhzeW5jaHJvbml6ZXIiCisgICAgICAgICBkb3dubG9hZC1zaXplPSIwIgorICAgICAgICAgaW5zdGFsbC1zaXplPSIwIgorICAgICAgICAgdmVyc2lvbj0iMC4wLjAiCisgICAgICAgICB1bnBhY2s9ImZhbHNlIi8+CisKKzwvZmVhdHVyZT4KZGlmZiAtLWdpdCBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLnN0ZW0uZGlzdHJpYnV0ZWQuZmVhdHVyZS9saWNlbnNlLmh0bWwgYi9mZWF0dXJlcy9vcmcuZWNsaXBzZS5zdGVtLmRpc3RyaWJ1dGVkLmZlYXR1cmUvbGljZW5zZS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMxODRjYTMKLS0tIC9kZXYvbnVsbAorKysgYi9mZWF0dXJlcy9vcmcuZWNsaXBzZS5zdGVtLmRpc3RyaWJ1dGVkLmZlYXR1cmUvbGljZW5zZS5odG1sCkBAIC0wLDAgKzEsMTA3IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJJU08tODg1OS0xIiA/PgorPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBYSFRNTCAxLjAgU3RyaWN0Ly9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sMS9EVEQveGh0bWwxLXN0cmljdC5kdGQiPgorPGh0bWwgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiPgorPGhlYWQ+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0xIiAvPgorPHRpdGxlPkVjbGlwc2UgRm91bmRhdGlvbiBTb2Z0d2FyZSBVc2VyIEFncmVlbWVudDwvdGl0bGU+Cis8L2hlYWQ+CisKKzxib2R5IGxhbmc9IkVOLVVTIj4KKzxoMj5FY2xpcHNlIEZvdW5kYXRpb24gU29mdHdhcmUgVXNlciBBZ3JlZW1lbnQ8L2gyPgorPHA+QXByaWwgMTQsIDIwMTA8L3A+CisKKzxoMz5Vc2FnZSBPZiBDb250ZW50PC9oMz4KKworPHA+VEhFIEVDTElQU0UgRk9VTkRBVElPTiBNQUtFUyBBVkFJTEFCTEUgU09GVFdBUkUsIERPQ1VNRU5UQVRJT04sIElORk9STUFUSU9OIEFORC9PUiBPVEhFUiBNQVRFUklBTFMgRk9SIE9QRU4gU09VUkNFIFBST0pFQ1RTCisgICAoQ09MTEVDVElWRUxZICZxdW90O0NPTlRFTlQmcXVvdDspLiAgVVNFIE9GIFRIRSBDT05URU5UIElTIEdPVkVSTkVEIEJZIFRIRSBURVJNUyBBTkQgQ09ORElUSU9OUyBPRiBUSElTIEFHUkVFTUVOVCBBTkQvT1IgVEhFIFRFUk1TIEFORAorICAgQ09ORElUSU9OUyBPRiBMSUNFTlNFIEFHUkVFTUVOVFMgT1IgTk9USUNFUyBJTkRJQ0FURUQgT1IgUkVGRVJFTkNFRCBCRUxPVy4gIEJZIFVTSU5HIFRIRSBDT05URU5ULCBZT1UgQUdSRUUgVEhBVCBZT1VSIFVTRQorICAgT0YgVEhFIENPTlRFTlQgSVMgR09WRVJORUQgQlkgVEhJUyBBR1JFRU1FTlQgQU5EL09SIFRIRSBURVJNUyBBTkQgQ09ORElUSU9OUyBPRiBBTlkgQVBQTElDQUJMRSBMSUNFTlNFIEFHUkVFTUVOVFMgT1IKKyAgIE5PVElDRVMgSU5ESUNBVEVEIE9SIFJFRkVSRU5DRUQgQkVMT1cuICBJRiBZT1UgRE8gTk9UIEFHUkVFIFRPIFRIRSBURVJNUyBBTkQgQ09ORElUSU9OUyBPRiBUSElTIEFHUkVFTUVOVCBBTkQgVEhFIFRFUk1TIEFORAorICAgQ09ORElUSU9OUyBPRiBBTlkgQVBQTElDQUJMRSBMSUNFTlNFIEFHUkVFTUVOVFMgT1IgTk9USUNFUyBJTkRJQ0FURUQgT1IgUkVGRVJFTkNFRCBCRUxPVywgVEhFTiBZT1UgTUFZIE5PVCBVU0UgVEhFIENPTlRFTlQuPC9wPgorCis8aDM+QXBwbGljYWJsZSBMaWNlbnNlczwvaDM+CisKKzxwPlVubGVzcyBvdGhlcndpc2UgaW5kaWNhdGVkLCBhbGwgQ29udGVudCBtYWRlIGF2YWlsYWJsZSBieSB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uIGlzIHByb3ZpZGVkIHRvIHlvdSB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjAKKyAgICgmcXVvdDtFUEwmcXVvdDspLiAgQSBjb3B5IG9mIHRoZSBFUEwgaXMgcHJvdmlkZWQgd2l0aCB0aGlzIENvbnRlbnQgYW5kIGlzIGFsc28gYXZhaWxhYmxlIGF0IDxhIGhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sIj5odHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbDwvYT4uCisgICBGb3IgcHVycG9zZXMgb2YgdGhlIEVQTCwgJnF1b3Q7UHJvZ3JhbSZxdW90OyB3aWxsIG1lYW4gdGhlIENvbnRlbnQuPC9wPgorCis8cD5Db250ZW50IGluY2x1ZGVzLCBidXQgaXMgbm90IGxpbWl0ZWQgdG8sIHNvdXJjZSBjb2RlLCBvYmplY3QgY29kZSwgZG9jdW1lbnRhdGlvbiBhbmQgb3RoZXIgZmlsZXMgbWFpbnRhaW5lZCBpbiB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uIHNvdXJjZSBjb2RlCisgICByZXBvc2l0b3J5ICgmcXVvdDtSZXBvc2l0b3J5JnF1b3Q7KSBpbiBzb2Z0d2FyZSBtb2R1bGVzICgmcXVvdDtNb2R1bGVzJnF1b3Q7KSBhbmQgbWFkZSBhdmFpbGFibGUgYXMgZG93bmxvYWRhYmxlIGFyY2hpdmVzICgmcXVvdDtEb3dubG9hZHMmcXVvdDspLjwvcD4KKworPHVsPgorICAgICAgIDxsaT5Db250ZW50IG1heSBiZSBzdHJ1Y3R1cmVkIGFuZCBwYWNrYWdlZCBpbnRvIG1vZHVsZXMgdG8gZmFjaWxpdGF0ZSBkZWxpdmVyaW5nLCBleHRlbmRpbmcsIGFuZCB1cGdyYWRpbmcgdGhlIENvbnRlbnQuICBUeXBpY2FsIG1vZHVsZXMgbWF5IGluY2x1ZGUgcGx1Zy1pbnMgKCZxdW90O1BsdWctaW5zJnF1b3Q7KSwgcGx1Zy1pbiBmcmFnbWVudHMgKCZxdW90O0ZyYWdtZW50cyZxdW90OyksIGFuZCBmZWF0dXJlcyAoJnF1b3Q7RmVhdHVyZXMmcXVvdDspLjwvbGk+CisgICAgICAgPGxpPkVhY2ggUGx1Zy1pbiBvciBGcmFnbWVudCBtYXkgYmUgcGFja2FnZWQgYXMgYSBzdWItZGlyZWN0b3J5IG9yIEpBUiAoSmF2YSZ0cmFkZTsgQVJjaGl2ZSkgaW4gYSBkaXJlY3RvcnkgbmFtZWQgJnF1b3Q7cGx1Z2lucyZxdW90Oy48L2xpPgorICAgICAgIDxsaT5BIEZlYXR1cmUgaXMgYSBidW5kbGUgb2Ygb25lIG9yIG1vcmUgUGx1Zy1pbnMgYW5kL29yIEZyYWdtZW50cyBhbmQgYXNzb2NpYXRlZCBtYXRlcmlhbC4gIEVhY2ggRmVhdHVyZSBtYXkgYmUgcGFja2FnZWQgYXMgYSBzdWItZGlyZWN0b3J5IGluIGEgZGlyZWN0b3J5IG5hbWVkICZxdW90O2ZlYXR1cmVzJnF1b3Q7LiAgV2l0aGluIGEgRmVhdHVyZSwgZmlsZXMgbmFtZWQgJnF1b3Q7ZmVhdHVyZS54bWwmcXVvdDsgbWF5IGNvbnRhaW4gYSBsaXN0IG9mIHRoZSBuYW1lcyBhbmQgdmVyc2lvbiBudW1iZXJzIG9mIHRoZSBQbHVnLWlucworICAgICAgYW5kL29yIEZyYWdtZW50cyBhc3NvY2lhdGVkIHdpdGggdGhhdCBGZWF0dXJlLjwvbGk+CisgICAgICAgPGxpPkZlYXR1cmVzIG1heSBhbHNvIGluY2x1ZGUgb3RoZXIgRmVhdHVyZXMgKCZxdW90O0luY2x1ZGVkIEZlYXR1cmVzJnF1b3Q7KS4gV2l0aGluIGEgRmVhdHVyZSwgZmlsZXMgbmFtZWQgJnF1b3Q7ZmVhdHVyZS54bWwmcXVvdDsgbWF5IGNvbnRhaW4gYSBsaXN0IG9mIHRoZSBuYW1lcyBhbmQgdmVyc2lvbiBudW1iZXJzIG9mIEluY2x1ZGVkIEZlYXR1cmVzLjwvbGk+Cis8L3VsPgorCis8cD5UaGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgZ292ZXJuaW5nIFBsdWctaW5zIGFuZCBGcmFnbWVudHMgc2hvdWxkIGJlIGNvbnRhaW5lZCBpbiBmaWxlcyBuYW1lZCAmcXVvdDthYm91dC5odG1sJnF1b3Q7ICgmcXVvdDtBYm91dHMmcXVvdDspLiBUaGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgZ292ZXJuaW5nIEZlYXR1cmVzIGFuZAorSW5jbHVkZWQgRmVhdHVyZXMgc2hvdWxkIGJlIGNvbnRhaW5lZCBpbiBmaWxlcyBuYW1lZCAmcXVvdDtsaWNlbnNlLmh0bWwmcXVvdDsgKCZxdW90O0ZlYXR1cmUgTGljZW5zZXMmcXVvdDspLiAgQWJvdXRzIGFuZCBGZWF0dXJlIExpY2Vuc2VzIG1heSBiZSBsb2NhdGVkIGluIGFueSBkaXJlY3Rvcnkgb2YgYSBEb3dubG9hZCBvciBNb2R1bGUKK2luY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvIHRoZSBmb2xsb3dpbmcgbG9jYXRpb25zOjwvcD4KKworPHVsPgorICAgICAgIDxsaT5UaGUgdG9wLWxldmVsIChyb290KSBkaXJlY3Rvcnk8L2xpPgorICAgICAgIDxsaT5QbHVnLWluIGFuZCBGcmFnbWVudCBkaXJlY3RvcmllczwvbGk+CisgICAgICAgPGxpPkluc2lkZSBQbHVnLWlucyBhbmQgRnJhZ21lbnRzIHBhY2thZ2VkIGFzIEpBUnM8L2xpPgorICAgICAgIDxsaT5TdWItZGlyZWN0b3JpZXMgb2YgdGhlIGRpcmVjdG9yeSBuYW1lZCAmcXVvdDtzcmMmcXVvdDsgb2YgY2VydGFpbiBQbHVnLWluczwvbGk+CisgICAgICAgPGxpPkZlYXR1cmUgZGlyZWN0b3JpZXM8L2xpPgorPC91bD4KKworPHA+Tm90ZTogaWYgYSBGZWF0dXJlIG1hZGUgYXZhaWxhYmxlIGJ5IHRoZSBFY2xpcHNlIEZvdW5kYXRpb24gaXMgaW5zdGFsbGVkIHVzaW5nIHRoZSBQcm92aXNpb25pbmcgVGVjaG5vbG9neSAoYXMgZGVmaW5lZCBiZWxvdyksIHlvdSBtdXN0IGFncmVlIHRvIGEgbGljZW5zZSAoJnF1b3Q7RmVhdHVyZSBVcGRhdGUgTGljZW5zZSZxdW90OykgZHVyaW5nIHRoZQoraW5zdGFsbGF0aW9uIHByb2Nlc3MuICBJZiB0aGUgRmVhdHVyZSBjb250YWlucyBJbmNsdWRlZCBGZWF0dXJlcywgdGhlIEZlYXR1cmUgVXBkYXRlIExpY2Vuc2Ugc2hvdWxkIGVpdGhlciBwcm92aWRlIHlvdSB3aXRoIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBnb3Zlcm5pbmcgdGhlIEluY2x1ZGVkIEZlYXR1cmVzIG9yCitpbmZvcm0geW91IHdoZXJlIHlvdSBjYW4gbG9jYXRlIHRoZW0uICBGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlcyBtYXkgYmUgZm91bmQgaW4gdGhlICZxdW90O2xpY2Vuc2UmcXVvdDsgcHJvcGVydHkgb2YgZmlsZXMgbmFtZWQgJnF1b3Q7ZmVhdHVyZS5wcm9wZXJ0aWVzJnF1b3Q7IGZvdW5kIHdpdGhpbiBhIEZlYXR1cmUuCitTdWNoIEFib3V0cywgRmVhdHVyZSBMaWNlbnNlcywgYW5kIEZlYXR1cmUgVXBkYXRlIExpY2Vuc2VzIGNvbnRhaW4gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIChvciByZWZlcmVuY2VzIHRvIHN1Y2ggdGVybXMgYW5kIGNvbmRpdGlvbnMpIHRoYXQgZ292ZXJuIHlvdXIgdXNlIG9mIHRoZSBhc3NvY2lhdGVkIENvbnRlbnQgaW4KK3RoYXQgZGlyZWN0b3J5LjwvcD4KKworPHA+VEhFIEFCT1VUUywgRkVBVFVSRSBMSUNFTlNFUywgQU5EIEZFQVRVUkUgVVBEQVRFIExJQ0VOU0VTIE1BWSBSRUZFUiBUTyBUSEUgRVBMIE9SIE9USEVSIExJQ0VOU0UgQUdSRUVNRU5UUywgTk9USUNFUyBPUiBURVJNUyBBTkQgQ09ORElUSU9OUy4gIFNPTUUgT0YgVEhFU0UKK09USEVSIExJQ0VOU0UgQUdSRUVNRU5UUyBNQVkgSU5DTFVERSAoQlVUIEFSRSBOT1QgTElNSVRFRCBUTyk6PC9wPgorCis8dWw+CisgICAgICAgPGxpPkNvbW1vbiBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMCAoYXZhaWxhYmxlIGF0IDxhIGhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvY3BsLXYxMC5odG1sIj5odHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2NwbC12MTAuaHRtbDwvYT4pPC9saT4KKyAgICAgICA8bGk+QXBhY2hlIFNvZnR3YXJlIExpY2Vuc2UgMS4xIChhdmFpbGFibGUgYXQgPGEgaHJlZj0iaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UiPmh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFPC9hPik8L2xpPgorICAgICAgIDxsaT5BcGFjaGUgU29mdHdhcmUgTGljZW5zZSAyLjAgKGF2YWlsYWJsZSBhdCA8YSBocmVmPSJodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAiPmh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMDwvYT4pPC9saT4KKyAgICAgICA8bGk+TWV0cm8gTGluayBQdWJsaWMgTGljZW5zZSAxLjAwIChhdmFpbGFibGUgYXQgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuZ3JvdXAub3JnL29wZW5tb3RpZi9zdXBwb3J0ZXJzL21ldHJvbGluay9saWNlbnNlLmh0bWwiPmh0dHA6Ly93d3cub3Blbmdyb3VwLm9yZy9vcGVubW90aWYvc3VwcG9ydGVycy9tZXRyb2xpbmsvbGljZW5zZS5odG1sPC9hPik8L2xpPgorICAgICAgIDxsaT5Nb3ppbGxhIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4xIChhdmFpbGFibGUgYXQgPGEgaHJlZj0iaHR0cDovL3d3dy5tb3ppbGxhLm9yZy9NUEwvTVBMLTEuMS5odG1sIj5odHRwOi8vd3d3Lm1vemlsbGEub3JnL01QTC9NUEwtMS4xLmh0bWw8L2E+KTwvbGk+Cis8L3VsPgorCis8cD5JVCBJUyBZT1VSIE9CTElHQVRJT04gVE8gUkVBRCBBTkQgQUNDRVBUIEFMTCBTVUNIIFRFUk1TIEFORCBDT05ESVRJT05TIFBSSU9SIFRPIFVTRSBPRiBUSEUgQ09OVEVOVC4gIElmIG5vIEFib3V0LCBGZWF0dXJlIExpY2Vuc2UsIG9yIEZlYXR1cmUgVXBkYXRlIExpY2Vuc2UgaXMgcHJvdmlkZWQsIHBsZWFzZQorY29udGFjdCB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uIHRvIGRldGVybWluZSB3aGF0IHRlcm1zIGFuZCBjb25kaXRpb25zIGdvdmVybiB0aGF0IHBhcnRpY3VsYXIgQ29udGVudC48L3A+CisKKworPGgzPlVzZSBvZiBQcm92aXNpb25pbmcgVGVjaG5vbG9neTwvaDM+CisKKzxwPlRoZSBFY2xpcHNlIEZvdW5kYXRpb24gbWFrZXMgYXZhaWxhYmxlIHByb3Zpc2lvbmluZyBzb2Z0d2FyZSwgZXhhbXBsZXMgb2Ygd2hpY2ggaW5jbHVkZSwgYnV0IGFyZSBub3QgbGltaXRlZCB0bywgcDIgYW5kIHRoZSBFY2xpcHNlCisgICBVcGRhdGUgTWFuYWdlciAoJnF1b3Q7UHJvdmlzaW9uaW5nIFRlY2hub2xvZ3kmcXVvdDspIGZvciB0aGUgcHVycG9zZSBvZiBhbGxvd2luZyB1c2VycyB0byBpbnN0YWxsIHNvZnR3YXJlLCBkb2N1bWVudGF0aW9uLCBpbmZvcm1hdGlvbiBhbmQvb3IKKyAgIG90aGVyIG1hdGVyaWFscyAoY29sbGVjdGl2ZWx5ICZxdW90O0luc3RhbGxhYmxlIFNvZnR3YXJlJnF1b3Q7KS4gVGhpcyBjYXBhYmlsaXR5IGlzIHByb3ZpZGVkIHdpdGggdGhlIGludGVudCBvZiBhbGxvd2luZyBzdWNoIHVzZXJzIHRvCisgICBpbnN0YWxsLCBleHRlbmQgYW5kIHVwZGF0ZSBFY2xpcHNlLWJhc2VkIHByb2R1Y3RzLiBJbmZvcm1hdGlvbiBhYm91dCBwYWNrYWdpbmcgSW5zdGFsbGFibGUgU29mdHdhcmUgaXMgYXZhaWxhYmxlIGF0IDxhCisgICAgICAgaHJlZj0iaHR0cDovL2VjbGlwc2Uub3JnL2VxdWlub3gvcDIvcmVwb3NpdG9yeV9wYWNrYWdpbmcuaHRtbCI+aHR0cDovL2VjbGlwc2Uub3JnL2VxdWlub3gvcDIvcmVwb3NpdG9yeV9wYWNrYWdpbmcuaHRtbDwvYT4KKyAgICgmcXVvdDtTcGVjaWZpY2F0aW9uJnF1b3Q7KS48L3A+CisKKzxwPllvdSBtYXkgdXNlIFByb3Zpc2lvbmluZyBUZWNobm9sb2d5IHRvIGFsbG93IG90aGVyIHBhcnRpZXMgdG8gaW5zdGFsbCBJbnN0YWxsYWJsZSBTb2Z0d2FyZS4gWW91IHNoYWxsIGJlIHJlc3BvbnNpYmxlIGZvciBlbmFibGluZyB0aGUKKyAgIGFwcGxpY2FibGUgbGljZW5zZSBhZ3JlZW1lbnRzIHJlbGF0aW5nIHRvIHRoZSBJbnN0YWxsYWJsZSBTb2Z0d2FyZSB0byBiZSBwcmVzZW50ZWQgdG8sIGFuZCBhY2NlcHRlZCBieSwgdGhlIHVzZXJzIG9mIHRoZSBQcm92aXNpb25pbmcgVGVjaG5vbG9neQorICAgaW4gYWNjb3JkYW5jZSB3aXRoIHRoZSBTcGVjaWZpY2F0aW9uLiBCeSB1c2luZyBQcm92aXNpb25pbmcgVGVjaG5vbG9neSBpbiBzdWNoIGEgbWFubmVyIGFuZCBtYWtpbmcgaXQgYXZhaWxhYmxlIGluIGFjY29yZGFuY2Ugd2l0aCB0aGUKKyAgIFNwZWNpZmljYXRpb24sIHlvdSBmdXJ0aGVyIGFja25vd2xlZGdlIHlvdXIgYWdyZWVtZW50IHRvLCBhbmQgdGhlIGFjcXVpc2l0aW9uIG9mIGFsbCBuZWNlc3NhcnkgcmlnaHRzIHRvIHBlcm1pdCB0aGUgZm9sbG93aW5nOjwvcD4KKworPG9sPgorICAgICAgIDxsaT5BIHNlcmllcyBvZiBhY3Rpb25zIG1heSBvY2N1ciAoJnF1b3Q7UHJvdmlzaW9uaW5nIFByb2Nlc3MmcXVvdDspIGluIHdoaWNoIGEgdXNlciBtYXkgZXhlY3V0ZSB0aGUgUHJvdmlzaW9uaW5nIFRlY2hub2xvZ3kKKyAgICAgICBvbiBhIG1hY2hpbmUgKCZxdW90O1RhcmdldCBNYWNoaW5lJnF1b3Q7KSB3aXRoIHRoZSBpbnRlbnQgb2YgaW5zdGFsbGluZywgZXh0ZW5kaW5nIG9yIHVwZGF0aW5nIHRoZSBmdW5jdGlvbmFsaXR5IG9mIGFuIEVjbGlwc2UtYmFzZWQKKyAgICAgICBwcm9kdWN0LjwvbGk+CisgICAgICAgPGxpPkR1cmluZyB0aGUgUHJvdmlzaW9uaW5nIFByb2Nlc3MsIHRoZSBQcm92aXNpb25pbmcgVGVjaG5vbG9neSBtYXkgY2F1c2UgdGhpcmQgcGFydHkgSW5zdGFsbGFibGUgU29mdHdhcmUgb3IgYSBwb3J0aW9uIHRoZXJlb2YgdG8gYmUKKyAgICAgICBhY2Nlc3NlZCBhbmQgY29waWVkIHRvIHRoZSBUYXJnZXQgTWFjaGluZS48L2xpPgorICAgICAgIDxsaT5QdXJzdWFudCB0byB0aGUgU3BlY2lmaWNhdGlvbiwgeW91IHdpbGwgcHJvdmlkZSB0byB0aGUgdXNlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgdGhhdCBnb3Zlcm4gdGhlIHVzZSBvZiB0aGUgSW5zdGFsbGFibGUKKyAgICAgICBTb2Z0d2FyZSAoJnF1b3Q7SW5zdGFsbGFibGUgU29mdHdhcmUgQWdyZWVtZW50JnF1b3Q7KSBhbmQgc3VjaCBJbnN0YWxsYWJsZSBTb2Z0d2FyZSBBZ3JlZW1lbnQgc2hhbGwgYmUgYWNjZXNzZWQgZnJvbSB0aGUgVGFyZ2V0CisgICAgICAgTWFjaGluZSBpbiBhY2NvcmRhbmNlIHdpdGggdGhlIFNwZWNpZmljYXRpb24uIFN1Y2ggSW5zdGFsbGFibGUgU29mdHdhcmUgQWdyZWVtZW50IG11c3QgaW5mb3JtIHRoZSB1c2VyIG9mIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyB0aGF0IGdvdmVybgorICAgICAgIHRoZSBJbnN0YWxsYWJsZSBTb2Z0d2FyZSBhbmQgbXVzdCBzb2xpY2l0IGFjY2VwdGFuY2UgYnkgdGhlIGVuZCB1c2VyIGluIHRoZSBtYW5uZXIgcHJlc2NyaWJlZCBpbiBzdWNoIEluc3RhbGxhYmxlIFNvZnR3YXJlIEFncmVlbWVudC4gVXBvbiBzdWNoCisgICAgICAgaW5kaWNhdGlvbiBvZiBhZ3JlZW1lbnQgYnkgdGhlIHVzZXIsIHRoZSBwcm92aXNpb25pbmcgVGVjaG5vbG9neSB3aWxsIGNvbXBsZXRlIGluc3RhbGxhdGlvbiBvZiB0aGUgSW5zdGFsbGFibGUgU29mdHdhcmUuPC9saT4KKzwvb2w+CisKKzxoMz5DcnlwdG9ncmFwaHk8L2gzPgorCis8cD5Db250ZW50IG1heSBjb250YWluIGVuY3J5cHRpb24gc29mdHdhcmUuIFRoZSBjb3VudHJ5IGluIHdoaWNoIHlvdSBhcmUgY3VycmVudGx5IG1heSBoYXZlIHJlc3RyaWN0aW9ucyBvbiB0aGUgaW1wb3J0LCBwb3NzZXNzaW9uLCBhbmQgdXNlLCBhbmQvb3IgcmUtZXhwb3J0IHRvCisgICBhbm90aGVyIGNvdW50cnksIG9mIGVuY3J5cHRpb24gc29mdHdhcmUuIEJFRk9SRSB1c2luZyBhbnkgZW5jcnlwdGlvbiBzb2Z0d2FyZSwgcGxlYXNlIGNoZWNrIHRoZSBjb3VudHJ5J3MgbGF3cywgcmVndWxhdGlvbnMgYW5kIHBvbGljaWVzIGNvbmNlcm5pbmcgdGhlIGltcG9ydCwKKyAgIHBvc3Nlc3Npb24sIG9yIHVzZSwgYW5kIHJlLWV4cG9ydCBvZiBlbmNyeXB0aW9uIHNvZnR3YXJlLCB0byBzZWUgaWYgdGhpcyBpcyBwZXJtaXR0ZWQuPC9wPgorCis8cD48c21hbGw+SmF2YSBhbmQgYWxsIEphdmEtYmFzZWQgdHJhZGVtYXJrcyBhcmUgdHJhZGVtYXJrcyBvZiBPcmFjbGUgQ29ycG9yYXRpb24gaW4gdGhlIFVuaXRlZCBTdGF0ZXMsIG90aGVyIGNvdW50cmllcywgb3IgYm90aC48L3NtYWxsPjwvcD4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLnN0ZW0uZmVhdHVyZS8ucHJvamVjdCBiL2ZlYXR1cmVzL29yZy5lY2xpcHNlLnN0ZW0uZmVhdHVyZS8ucHJvamVjdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMTA5ODA4Ci0tLSAvZGV2L251bGwKKysrIGIvZmVhdHVyZXMvb3JnLmVjbGlwc2Uuc3RlbS5mZWF0dXJlLy5wcm9qZWN0CkBAIC0wLDAgKzEsMTcgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8cHJvamVjdERlc2NyaXB0aW9uPgorCTxuYW1lPm9yZy5lY2xpcHNlLnN0ZW0uZmVhdHVyZTwvbmFtZT4KKwk8Y29tbWVudD48L2NvbW1lbnQ+CisJPHByb2plY3RzPgorCTwvcHJvamVjdHM+CisJPGJ1aWxkU3BlYz4KKwkJPGJ1aWxkQ29tbWFuZD4KKwkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5GZWF0dXJlQnVpbGRlcjwvbmFtZT4KKwkJCTxhcmd1bWVudHM+CisJCQk8L2FyZ3VtZW50cz4KKwkJPC9idWlsZENvbW1hbmQ+CisJPC9idWlsZFNwZWM+CisJPG5hdHVyZXM+CisJCTxuYXR1cmU+b3JnLmVjbGlwc2UucGRlLkZlYXR1cmVOYXR1cmU8L25hdHVyZT4KKwk8L25hdHVyZXM+Cis8L3Byb2plY3REZXNjcmlwdGlvbj4KZGlmZiAtLWdpdCBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLnN0ZW0uZmVhdHVyZS9idWlsZC5wcm9wZXJ0aWVzIGIvZmVhdHVyZXMvb3JnLmVjbGlwc2Uuc3RlbS5mZWF0dXJlL2J1aWxkLnByb3BlcnRpZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjc0YWY4NgotLS0gL2Rldi9udWxsCisrKyBiL2ZlYXR1cmVzL29yZy5lY2xpcHNlLnN0ZW0uZmVhdHVyZS9idWlsZC5wcm9wZXJ0aWVzCkBAIC0wLDAgKzEsNCBAQAorYmluLmluY2x1ZGVzID0gZmVhdHVyZS54bWwsXAorICAgICAgICAgICAgICAgZmVhdHVyZS5wcm9wZXJ0aWVzLFwKKyAgICAgICAgICAgICAgIGVwbC12MTAuaHRtbCxcCisgICAgICAgICAgICAgICBsaWNlbnNlLmh0bWwKZGlmZiAtLWdpdCBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLnN0ZW0uZmVhdHVyZS9lcGwtdjEwLmh0bWwgYi9mZWF0dXJlcy9vcmcuZWNsaXBzZS5zdGVtLmZlYXR1cmUvZXBsLXYxMC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVkNGIxOTYKLS0tIC9kZXYvbnVsbAorKysgYi9mZWF0dXJlcy9vcmcuZWNsaXBzZS5zdGVtLmZlYXR1cmUvZXBsLXYxMC5odG1sCkBAIC0wLDAgKzEsMzI4IEBACis8aHRtbCB4bWxuczpvPSJ1cm46c2NoZW1hcy1taWNyb3NvZnQtY29tOm9mZmljZTpvZmZpY2UiCit4bWxuczp3PSJ1cm46c2NoZW1hcy1taWNyb3NvZnQtY29tOm9mZmljZTp3b3JkIgoreG1sbnM9Imh0dHA6Ly93d3cudzMub3JnL1RSL1JFQy1odG1sNDAiPgorCis8aGVhZD4KKzxtZXRhIGh0dHAtZXF1aXY9Q29udGVudC1UeXBlIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD13aW5kb3dzLTEyNTIiPgorPG1ldGEgbmFtZT1Qcm9nSWQgY29udGVudD1Xb3JkLkRvY3VtZW50PgorPG1ldGEgbmFtZT1HZW5lcmF0b3IgY29udGVudD0iTWljcm9zb2Z0IFdvcmQgOSI+Cis8bWV0YSBuYW1lPU9yaWdpbmF0b3IgY29udGVudD0iTWljcm9zb2Z0IFdvcmQgOSI+Cis8bGluayByZWw9RmlsZS1MaXN0CitocmVmPSIuL0VjbGlwc2UlMjBFUEwlMjAyMDAzXzExXzEwJTIwRmluYWxfZmlsZXMvZmlsZWxpc3QueG1sIj4KKzx0aXRsZT5FY2xpcHNlIFB1YmxpYyBMaWNlbnNlIC0gVmVyc2lvbiAxLjA8L3RpdGxlPgorPCEtLVtpZiBndGUgbXNvIDldPjx4bWw+CisgPG86RG9jdW1lbnRQcm9wZXJ0aWVzPgorICA8bzpSZXZpc2lvbj4yPC9vOlJldmlzaW9uPgorICA8bzpUb3RhbFRpbWU+MzwvbzpUb3RhbFRpbWU+CisgIDxvOkNyZWF0ZWQ+MjAwNC0wMy0wNVQyMzowMzowMFo8L286Q3JlYXRlZD4KKyAgPG86TGFzdFNhdmVkPjIwMDQtMDMtMDVUMjM6MDM6MDBaPC9vOkxhc3RTYXZlZD4KKyAgPG86UGFnZXM+NDwvbzpQYWdlcz4KKyAgPG86V29yZHM+MTYyNjwvbzpXb3Jkcz4KKyAgPG86Q2hhcmFjdGVycz45MjcwPC9vOkNoYXJhY3RlcnM+CisgICA8bzpMaW5lcz43NzwvbzpMaW5lcz4KKyAgPG86UGFyYWdyYXBocz4xODwvbzpQYXJhZ3JhcGhzPgorICA8bzpDaGFyYWN0ZXJzV2l0aFNwYWNlcz4xMTM4NDwvbzpDaGFyYWN0ZXJzV2l0aFNwYWNlcz4KKyAgPG86VmVyc2lvbj45LjQ0MDI8L286VmVyc2lvbj4KKyA8L286RG9jdW1lbnRQcm9wZXJ0aWVzPgorPC94bWw+PCFbZW5kaWZdLS0+PCEtLVtpZiBndGUgbXNvIDldPjx4bWw+CisgPHc6V29yZERvY3VtZW50PgorICA8dzpUcmFja1JldmlzaW9ucy8+CisgPC93OldvcmREb2N1bWVudD4KKzwveG1sPjwhW2VuZGlmXS0tPgorPHN0eWxlPgorPCEtLQorIC8qIEZvbnQgRGVmaW5pdGlvbnMgKi8KK0Bmb250LWZhY2UKKwl7Zm9udC1mYW1pbHk6VGFob21hOworCXBhbm9zZS0xOjIgMTEgNiA0IDMgNSA0IDQgMiA0OworCW1zby1mb250LWNoYXJzZXQ6MDsKKwltc28tZ2VuZXJpYy1mb250LWZhbWlseTpzd2lzczsKKwltc28tZm9udC1waXRjaDp2YXJpYWJsZTsKKwltc28tZm9udC1zaWduYXR1cmU6NTUzNjc5NDk1IC0yMTQ3NDgzNjQ4IDggMCA2NjA0NyAwO30KKyAvKiBTdHlsZSBEZWZpbml0aW9ucyAqLworcC5Nc29Ob3JtYWwsIGxpLk1zb05vcm1hbCwgZGl2Lk1zb05vcm1hbAorCXttc28tc3R5bGUtcGFyZW50OiIiOworCW1hcmdpbjowaW47CisJbWFyZ2luLWJvdHRvbTouMDAwMXB0OworCW1zby1wYWdpbmF0aW9uOndpZG93LW9ycGhhbjsKKwlmb250LXNpemU6MTIuMHB0OworCWZvbnQtZmFtaWx5OiJUaW1lcyBOZXcgUm9tYW4iOworCW1zby1mYXJlYXN0LWZvbnQtZmFtaWx5OiJUaW1lcyBOZXcgUm9tYW4iO30KK3AKKwl7bWFyZ2luLXJpZ2h0OjBpbjsKKwltc28tbWFyZ2luLXRvcC1hbHQ6YXV0bzsKKwltc28tbWFyZ2luLWJvdHRvbS1hbHQ6YXV0bzsKKwltYXJnaW4tbGVmdDowaW47CisJbXNvLXBhZ2luYXRpb246d2lkb3ctb3JwaGFuOworCWZvbnQtc2l6ZToxMi4wcHQ7CisJZm9udC1mYW1pbHk6IlRpbWVzIE5ldyBSb21hbiI7CisJbXNvLWZhcmVhc3QtZm9udC1mYW1pbHk6IlRpbWVzIE5ldyBSb21hbiI7fQorcC5CYWxsb29uVGV4dCwgbGkuQmFsbG9vblRleHQsIGRpdi5CYWxsb29uVGV4dAorCXttc28tc3R5bGUtbmFtZToiQmFsbG9vbiBUZXh0IjsKKwltYXJnaW46MGluOworCW1hcmdpbi1ib3R0b206LjAwMDFwdDsKKwltc28tcGFnaW5hdGlvbjp3aWRvdy1vcnBoYW47CisJZm9udC1zaXplOjguMHB0OworCWZvbnQtZmFtaWx5OlRhaG9tYTsKKwltc28tZmFyZWFzdC1mb250LWZhbWlseToiVGltZXMgTmV3IFJvbWFuIjt9CitAcGFnZSBTZWN0aW9uMQorCXtzaXplOjguNWluIDExLjBpbjsKKwltYXJnaW46MS4waW4gMS4yNWluIDEuMGluIDEuMjVpbjsKKwltc28taGVhZGVyLW1hcmdpbjouNWluOworCW1zby1mb290ZXItbWFyZ2luOi41aW47CisJbXNvLXBhcGVyLXNvdXJjZTowO30KK2Rpdi5TZWN0aW9uMQorCXtwYWdlOlNlY3Rpb24xO30KKy0tPgorPC9zdHlsZT4KKzwvaGVhZD4KKworPGJvZHkgbGFuZz1FTi1VUyBzdHlsZT0ndGFiLWludGVydmFsOi41aW4nPgorCis8ZGl2IGNsYXNzPVNlY3Rpb24xPgorCis8cCBhbGlnbj1jZW50ZXIgc3R5bGU9J3RleHQtYWxpZ246Y2VudGVyJz48Yj5FY2xpcHNlIFB1YmxpYyBMaWNlbnNlIC0gdiAxLjA8L2I+Cis8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5USEUgQUNDT01QQU5ZSU5HIFBST0dSQU0gSVMgUFJPVklERUQgVU5ERVIKK1RIRSBURVJNUyBPRiBUSElTIEVDTElQU0UgUFVCTElDIExJQ0VOU0UgKCZxdW90O0FHUkVFTUVOVCZxdW90OykuIEFOWSBVU0UsCitSRVBST0RVQ1RJT04gT1IgRElTVFJJQlVUSU9OIE9GIFRIRSBQUk9HUkFNIENPTlNUSVRVVEVTIFJFQ0lQSUVOVCdTIEFDQ0VQVEFOQ0UKK09GIFRISVMgQUdSRUVNRU5ULjwvc3Bhbj4gPC9wPgorCis8cD48Yj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+MS4gREVGSU5JVElPTlM8L3NwYW4+PC9iPiA8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4mcXVvdDtDb250cmlidXRpb24mcXVvdDsgbWVhbnM6PC9zcGFuPiA8L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmEpCitpbiB0aGUgY2FzZSBvZiB0aGUgaW5pdGlhbCBDb250cmlidXRvciwgdGhlIGluaXRpYWwgY29kZSBhbmQgZG9jdW1lbnRhdGlvbgorZGlzdHJpYnV0ZWQgdW5kZXIgdGhpcyBBZ3JlZW1lbnQsIGFuZDxiciBjbGVhcj1sZWZ0PgorYikgaW4gdGhlIGNhc2Ugb2YgZWFjaCBzdWJzZXF1ZW50IENvbnRyaWJ1dG9yOjwvc3Bhbj48L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmkpCitjaGFuZ2VzIHRvIHRoZSBQcm9ncmFtLCBhbmQ8L3NwYW4+PC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5paSkKK2FkZGl0aW9ucyB0byB0aGUgUHJvZ3JhbTs8L3NwYW4+PC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz53aGVyZQorc3VjaCBjaGFuZ2VzIGFuZC9vciBhZGRpdGlvbnMgdG8gdGhlIFByb2dyYW0gb3JpZ2luYXRlIGZyb20gYW5kIGFyZSBkaXN0cmlidXRlZAorYnkgdGhhdCBwYXJ0aWN1bGFyIENvbnRyaWJ1dG9yLiBBIENvbnRyaWJ1dGlvbiAnb3JpZ2luYXRlcycgZnJvbSBhIENvbnRyaWJ1dG9yCitpZiBpdCB3YXMgYWRkZWQgdG8gdGhlIFByb2dyYW0gYnkgc3VjaCBDb250cmlidXRvciBpdHNlbGYgb3IgYW55b25lIGFjdGluZyBvbgorc3VjaCBDb250cmlidXRvcidzIGJlaGFsZi4gQ29udHJpYnV0aW9ucyBkbyBub3QgaW5jbHVkZSBhZGRpdGlvbnMgdG8gdGhlCitQcm9ncmFtIHdoaWNoOiAoaSkgYXJlIHNlcGFyYXRlIG1vZHVsZXMgb2Ygc29mdHdhcmUgZGlzdHJpYnV0ZWQgaW4gY29uanVuY3Rpb24KK3dpdGggdGhlIFByb2dyYW0gdW5kZXIgdGhlaXIgb3duIGxpY2Vuc2UgYWdyZWVtZW50LCBhbmQgKGlpKSBhcmUgbm90IGRlcml2YXRpdmUKK3dvcmtzIG9mIHRoZSBQcm9ncmFtLiA8L3NwYW4+PC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+JnF1b3Q7Q29udHJpYnV0b3ImcXVvdDsgbWVhbnMgYW55IHBlcnNvbiBvcgorZW50aXR5IHRoYXQgZGlzdHJpYnV0ZXMgdGhlIFByb2dyYW0uPC9zcGFuPiA8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4mcXVvdDtMaWNlbnNlZCBQYXRlbnRzICZxdW90OyBtZWFuIHBhdGVudAorY2xhaW1zIGxpY2Vuc2FibGUgYnkgYSBDb250cmlidXRvciB3aGljaCBhcmUgbmVjZXNzYXJpbHkgaW5mcmluZ2VkIGJ5IHRoZSB1c2UKK29yIHNhbGUgb2YgaXRzIENvbnRyaWJ1dGlvbiBhbG9uZSBvciB3aGVuIGNvbWJpbmVkIHdpdGggdGhlIFByb2dyYW0uIDwvc3Bhbj48L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4mcXVvdDtQcm9ncmFtJnF1b3Q7IG1lYW5zIHRoZSBDb250cmlidXRpb25zCitkaXN0cmlidXRlZCBpbiBhY2NvcmRhbmNlIHdpdGggdGhpcyBBZ3JlZW1lbnQuPC9zcGFuPiA8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4mcXVvdDtSZWNpcGllbnQmcXVvdDsgbWVhbnMgYW55b25lIHdobworcmVjZWl2ZXMgdGhlIFByb2dyYW0gdW5kZXIgdGhpcyBBZ3JlZW1lbnQsIGluY2x1ZGluZyBhbGwgQ29udHJpYnV0b3JzLjwvc3Bhbj4gPC9wPgorCis8cD48Yj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+Mi4gR1JBTlQgT0YgUklHSFRTPC9zcGFuPjwvYj4gPC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5hKQorU3ViamVjdCB0byB0aGUgdGVybXMgb2YgdGhpcyBBZ3JlZW1lbnQsIGVhY2ggQ29udHJpYnV0b3IgaGVyZWJ5IGdyYW50cyBSZWNpcGllbnQKK2Egbm9uLWV4Y2x1c2l2ZSwgd29ybGR3aWRlLCByb3lhbHR5LWZyZWUgY29weXJpZ2h0IGxpY2Vuc2UgdG88c3Bhbgorc3R5bGU9J2NvbG9yOnJlZCc+IDwvc3Bhbj5yZXByb2R1Y2UsIHByZXBhcmUgZGVyaXZhdGl2ZSB3b3JrcyBvZiwgcHVibGljbHkKK2Rpc3BsYXksIHB1YmxpY2x5IHBlcmZvcm0sIGRpc3RyaWJ1dGUgYW5kIHN1YmxpY2Vuc2UgdGhlIENvbnRyaWJ1dGlvbiBvZiBzdWNoCitDb250cmlidXRvciwgaWYgYW55LCBhbmQgc3VjaCBkZXJpdmF0aXZlIHdvcmtzLCBpbiBzb3VyY2UgY29kZSBhbmQgb2JqZWN0IGNvZGUKK2Zvcm0uPC9zcGFuPjwvcD4KKworPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YikKK1N1YmplY3QgdG8gdGhlIHRlcm1zIG9mIHRoaXMgQWdyZWVtZW50LCBlYWNoIENvbnRyaWJ1dG9yIGhlcmVieSBncmFudHMKK1JlY2lwaWVudCBhIG5vbi1leGNsdXNpdmUsIHdvcmxkd2lkZSw8c3BhbiBzdHlsZT0nY29sb3I6Z3JlZW4nPiA8L3NwYW4+cm95YWx0eS1mcmVlCitwYXRlbnQgbGljZW5zZSB1bmRlciBMaWNlbnNlZCBQYXRlbnRzIHRvIG1ha2UsIHVzZSwgc2VsbCwgb2ZmZXIgdG8gc2VsbCwgaW1wb3J0CithbmQgb3RoZXJ3aXNlIHRyYW5zZmVyIHRoZSBDb250cmlidXRpb24gb2Ygc3VjaCBDb250cmlidXRvciwgaWYgYW55LCBpbiBzb3VyY2UKK2NvZGUgYW5kIG9iamVjdCBjb2RlIGZvcm0uIFRoaXMgcGF0ZW50IGxpY2Vuc2Ugc2hhbGwgYXBwbHkgdG8gdGhlIGNvbWJpbmF0aW9uCitvZiB0aGUgQ29udHJpYnV0aW9uIGFuZCB0aGUgUHJvZ3JhbSBpZiwgYXQgdGhlIHRpbWUgdGhlIENvbnRyaWJ1dGlvbiBpcyBhZGRlZAorYnkgdGhlIENvbnRyaWJ1dG9yLCBzdWNoIGFkZGl0aW9uIG9mIHRoZSBDb250cmlidXRpb24gY2F1c2VzIHN1Y2ggY29tYmluYXRpb24KK3RvIGJlIGNvdmVyZWQgYnkgdGhlIExpY2Vuc2VkIFBhdGVudHMuIFRoZSBwYXRlbnQgbGljZW5zZSBzaGFsbCBub3QgYXBwbHkgdG8KK2FueSBvdGhlciBjb21iaW5hdGlvbnMgd2hpY2ggaW5jbHVkZSB0aGUgQ29udHJpYnV0aW9uLiBObyBoYXJkd2FyZSBwZXIgc2UgaXMKK2xpY2Vuc2VkIGhlcmV1bmRlci4gPC9zcGFuPjwvcD4KKworPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YykKK1JlY2lwaWVudCB1bmRlcnN0YW5kcyB0aGF0IGFsdGhvdWdoIGVhY2ggQ29udHJpYnV0b3IgZ3JhbnRzIHRoZSBsaWNlbnNlcyB0byBpdHMKK0NvbnRyaWJ1dGlvbnMgc2V0IGZvcnRoIGhlcmVpbiwgbm8gYXNzdXJhbmNlcyBhcmUgcHJvdmlkZWQgYnkgYW55IENvbnRyaWJ1dG9yCit0aGF0IHRoZSBQcm9ncmFtIGRvZXMgbm90IGluZnJpbmdlIHRoZSBwYXRlbnQgb3Igb3RoZXIgaW50ZWxsZWN0dWFsIHByb3BlcnR5CityaWdodHMgb2YgYW55IG90aGVyIGVudGl0eS4gRWFjaCBDb250cmlidXRvciBkaXNjbGFpbXMgYW55IGxpYWJpbGl0eSB0byBSZWNpcGllbnQKK2ZvciBjbGFpbXMgYnJvdWdodCBieSBhbnkgb3RoZXIgZW50aXR5IGJhc2VkIG9uIGluZnJpbmdlbWVudCBvZiBpbnRlbGxlY3R1YWwKK3Byb3BlcnR5IHJpZ2h0cyBvciBvdGhlcndpc2UuIEFzIGEgY29uZGl0aW9uIHRvIGV4ZXJjaXNpbmcgdGhlIHJpZ2h0cyBhbmQKK2xpY2Vuc2VzIGdyYW50ZWQgaGVyZXVuZGVyLCBlYWNoIFJlY2lwaWVudCBoZXJlYnkgYXNzdW1lcyBzb2xlIHJlc3BvbnNpYmlsaXR5Cit0byBzZWN1cmUgYW55IG90aGVyIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgbmVlZGVkLCBpZiBhbnkuIEZvciBleGFtcGxlLAoraWYgYSB0aGlyZCBwYXJ0eSBwYXRlbnQgbGljZW5zZSBpcyByZXF1aXJlZCB0byBhbGxvdyBSZWNpcGllbnQgdG8gZGlzdHJpYnV0ZQordGhlIFByb2dyYW0sIGl0IGlzIFJlY2lwaWVudCdzIHJlc3BvbnNpYmlsaXR5IHRvIGFjcXVpcmUgdGhhdCBsaWNlbnNlIGJlZm9yZQorZGlzdHJpYnV0aW5nIHRoZSBQcm9ncmFtLjwvc3Bhbj48L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmQpCitFYWNoIENvbnRyaWJ1dG9yIHJlcHJlc2VudHMgdGhhdCB0byBpdHMga25vd2xlZGdlIGl0IGhhcyBzdWZmaWNpZW50IGNvcHlyaWdodAorcmlnaHRzIGluIGl0cyBDb250cmlidXRpb24sIGlmIGFueSwgdG8gZ3JhbnQgdGhlIGNvcHlyaWdodCBsaWNlbnNlIHNldCBmb3J0aCBpbgordGhpcyBBZ3JlZW1lbnQuIDwvc3Bhbj48L3A+CisKKzxwPjxiPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4zLiBSRVFVSVJFTUVOVFM8L3NwYW4+PC9iPiA8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5BIENvbnRyaWJ1dG9yIG1heSBjaG9vc2UgdG8gZGlzdHJpYnV0ZSB0aGUKK1Byb2dyYW0gaW4gb2JqZWN0IGNvZGUgZm9ybSB1bmRlciBpdHMgb3duIGxpY2Vuc2UgYWdyZWVtZW50LCBwcm92aWRlZCB0aGF0Ojwvc3Bhbj4KKzwvcD4KKworPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YSkKK2l0IGNvbXBsaWVzIHdpdGggdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoaXMgQWdyZWVtZW50OyBhbmQ8L3NwYW4+PC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5iKQoraXRzIGxpY2Vuc2UgYWdyZWVtZW50Ojwvc3Bhbj48L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmkpCitlZmZlY3RpdmVseSBkaXNjbGFpbXMgb24gYmVoYWxmIG9mIGFsbCBDb250cmlidXRvcnMgYWxsIHdhcnJhbnRpZXMgYW5kCitjb25kaXRpb25zLCBleHByZXNzIGFuZCBpbXBsaWVkLCBpbmNsdWRpbmcgd2FycmFudGllcyBvciBjb25kaXRpb25zIG9mIHRpdGxlCithbmQgbm9uLWluZnJpbmdlbWVudCwgYW5kIGltcGxpZWQgd2FycmFudGllcyBvciBjb25kaXRpb25zIG9mIG1lcmNoYW50YWJpbGl0eQorYW5kIGZpdG5lc3MgZm9yIGEgcGFydGljdWxhciBwdXJwb3NlOyA8L3NwYW4+PC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5paSkKK2VmZmVjdGl2ZWx5IGV4Y2x1ZGVzIG9uIGJlaGFsZiBvZiBhbGwgQ29udHJpYnV0b3JzIGFsbCBsaWFiaWxpdHkgZm9yIGRhbWFnZXMsCitpbmNsdWRpbmcgZGlyZWN0LCBpbmRpcmVjdCwgc3BlY2lhbCwgaW5jaWRlbnRhbCBhbmQgY29uc2VxdWVudGlhbCBkYW1hZ2VzLCBzdWNoCithcyBsb3N0IHByb2ZpdHM7IDwvc3Bhbj48L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmlpaSkKK3N0YXRlcyB0aGF0IGFueSBwcm92aXNpb25zIHdoaWNoIGRpZmZlciBmcm9tIHRoaXMgQWdyZWVtZW50IGFyZSBvZmZlcmVkIGJ5IHRoYXQKK0NvbnRyaWJ1dG9yIGFsb25lIGFuZCBub3QgYnkgYW55IG90aGVyIHBhcnR5OyBhbmQ8L3NwYW4+PC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5pdikKK3N0YXRlcyB0aGF0IHNvdXJjZSBjb2RlIGZvciB0aGUgUHJvZ3JhbSBpcyBhdmFpbGFibGUgZnJvbSBzdWNoIENvbnRyaWJ1dG9yLCBhbmQKK2luZm9ybXMgbGljZW5zZWVzIGhvdyB0byBvYnRhaW4gaXQgaW4gYSByZWFzb25hYmxlIG1hbm5lciBvbiBvciB0aHJvdWdoIGEKK21lZGl1bSBjdXN0b21hcmlseSB1c2VkIGZvciBzb2Z0d2FyZSBleGNoYW5nZS48c3BhbiBzdHlsZT0nY29sb3I6Ymx1ZSc+IDwvc3Bhbj48L3NwYW4+PC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+V2hlbiB0aGUgUHJvZ3JhbSBpcyBtYWRlIGF2YWlsYWJsZSBpbiBzb3VyY2UKK2NvZGUgZm9ybTo8L3NwYW4+IDwvcD4KKworPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YSkKK2l0IG11c3QgYmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhpcyBBZ3JlZW1lbnQ7IGFuZCA8L3NwYW4+PC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5iKSBhCitjb3B5IG9mIHRoaXMgQWdyZWVtZW50IG11c3QgYmUgaW5jbHVkZWQgd2l0aCBlYWNoIGNvcHkgb2YgdGhlIFByb2dyYW0uIDwvc3Bhbj48L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5Db250cmlidXRvcnMgbWF5IG5vdCByZW1vdmUgb3IgYWx0ZXIgYW55Citjb3B5cmlnaHQgbm90aWNlcyBjb250YWluZWQgd2l0aGluIHRoZSBQcm9ncmFtLiA8L3NwYW4+PC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+RWFjaCBDb250cmlidXRvciBtdXN0IGlkZW50aWZ5IGl0c2VsZiBhcyB0aGUKK29yaWdpbmF0b3Igb2YgaXRzIENvbnRyaWJ1dGlvbiwgaWYgYW55LCBpbiBhIG1hbm5lciB0aGF0IHJlYXNvbmFibHkgYWxsb3dzCitzdWJzZXF1ZW50IFJlY2lwaWVudHMgdG8gaWRlbnRpZnkgdGhlIG9yaWdpbmF0b3Igb2YgdGhlIENvbnRyaWJ1dGlvbi4gPC9zcGFuPjwvcD4KKworPHA+PGI+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPjQuIENPTU1FUkNJQUwgRElTVFJJQlVUSU9OPC9zcGFuPjwvYj4gPC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+Q29tbWVyY2lhbCBkaXN0cmlidXRvcnMgb2Ygc29mdHdhcmUgbWF5CithY2NlcHQgY2VydGFpbiByZXNwb25zaWJpbGl0aWVzIHdpdGggcmVzcGVjdCB0byBlbmQgdXNlcnMsIGJ1c2luZXNzIHBhcnRuZXJzCithbmQgdGhlIGxpa2UuIFdoaWxlIHRoaXMgbGljZW5zZSBpcyBpbnRlbmRlZCB0byBmYWNpbGl0YXRlIHRoZSBjb21tZXJjaWFsIHVzZQorb2YgdGhlIFByb2dyYW0sIHRoZSBDb250cmlidXRvciB3aG8gaW5jbHVkZXMgdGhlIFByb2dyYW0gaW4gYSBjb21tZXJjaWFsCitwcm9kdWN0IG9mZmVyaW5nIHNob3VsZCBkbyBzbyBpbiBhIG1hbm5lciB3aGljaCBkb2VzIG5vdCBjcmVhdGUgcG90ZW50aWFsCitsaWFiaWxpdHkgZm9yIG90aGVyIENvbnRyaWJ1dG9ycy4gVGhlcmVmb3JlLCBpZiBhIENvbnRyaWJ1dG9yIGluY2x1ZGVzIHRoZQorUHJvZ3JhbSBpbiBhIGNvbW1lcmNpYWwgcHJvZHVjdCBvZmZlcmluZywgc3VjaCBDb250cmlidXRvciAoJnF1b3Q7Q29tbWVyY2lhbAorQ29udHJpYnV0b3ImcXVvdDspIGhlcmVieSBhZ3JlZXMgdG8gZGVmZW5kIGFuZCBpbmRlbW5pZnkgZXZlcnkgb3RoZXIKK0NvbnRyaWJ1dG9yICgmcXVvdDtJbmRlbW5pZmllZCBDb250cmlidXRvciZxdW90OykgYWdhaW5zdCBhbnkgbG9zc2VzLCBkYW1hZ2VzIGFuZAorY29zdHMgKGNvbGxlY3RpdmVseSAmcXVvdDtMb3NzZXMmcXVvdDspIGFyaXNpbmcgZnJvbSBjbGFpbXMsIGxhd3N1aXRzIGFuZCBvdGhlcgorbGVnYWwgYWN0aW9ucyBicm91Z2h0IGJ5IGEgdGhpcmQgcGFydHkgYWdhaW5zdCB0aGUgSW5kZW1uaWZpZWQgQ29udHJpYnV0b3IgdG8KK3RoZSBleHRlbnQgY2F1c2VkIGJ5IHRoZSBhY3RzIG9yIG9taXNzaW9ucyBvZiBzdWNoIENvbW1lcmNpYWwgQ29udHJpYnV0b3IgaW4KK2Nvbm5lY3Rpb24gd2l0aCBpdHMgZGlzdHJpYnV0aW9uIG9mIHRoZSBQcm9ncmFtIGluIGEgY29tbWVyY2lhbCBwcm9kdWN0CitvZmZlcmluZy4gVGhlIG9ibGlnYXRpb25zIGluIHRoaXMgc2VjdGlvbiBkbyBub3QgYXBwbHkgdG8gYW55IGNsYWltcyBvciBMb3NzZXMKK3JlbGF0aW5nIHRvIGFueSBhY3R1YWwgb3IgYWxsZWdlZCBpbnRlbGxlY3R1YWwgcHJvcGVydHkgaW5mcmluZ2VtZW50LiBJbiBvcmRlcgordG8gcXVhbGlmeSwgYW4gSW5kZW1uaWZpZWQgQ29udHJpYnV0b3IgbXVzdDogYSkgcHJvbXB0bHkgbm90aWZ5IHRoZSBDb21tZXJjaWFsCitDb250cmlidXRvciBpbiB3cml0aW5nIG9mIHN1Y2ggY2xhaW0sIGFuZCBiKSBhbGxvdyB0aGUgQ29tbWVyY2lhbCBDb250cmlidXRvcgordG8gY29udHJvbCwgYW5kIGNvb3BlcmF0ZSB3aXRoIHRoZSBDb21tZXJjaWFsIENvbnRyaWJ1dG9yIGluLCB0aGUgZGVmZW5zZSBhbmQKK2FueSByZWxhdGVkIHNldHRsZW1lbnQgbmVnb3RpYXRpb25zLiBUaGUgSW5kZW1uaWZpZWQgQ29udHJpYnV0b3IgbWF5IHBhcnRpY2lwYXRlCitpbiBhbnkgc3VjaCBjbGFpbSBhdCBpdHMgb3duIGV4cGVuc2UuPC9zcGFuPiA8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5Gb3IgZXhhbXBsZSwgYSBDb250cmlidXRvciBtaWdodCBpbmNsdWRlIHRoZQorUHJvZ3JhbSBpbiBhIGNvbW1lcmNpYWwgcHJvZHVjdCBvZmZlcmluZywgUHJvZHVjdCBYLiBUaGF0IENvbnRyaWJ1dG9yIGlzIHRoZW4gYQorQ29tbWVyY2lhbCBDb250cmlidXRvci4gSWYgdGhhdCBDb21tZXJjaWFsIENvbnRyaWJ1dG9yIHRoZW4gbWFrZXMgcGVyZm9ybWFuY2UKK2NsYWltcywgb3Igb2ZmZXJzIHdhcnJhbnRpZXMgcmVsYXRlZCB0byBQcm9kdWN0IFgsIHRob3NlIHBlcmZvcm1hbmNlIGNsYWltcyBhbmQKK3dhcnJhbnRpZXMgYXJlIHN1Y2ggQ29tbWVyY2lhbCBDb250cmlidXRvcidzIHJlc3BvbnNpYmlsaXR5IGFsb25lLiBVbmRlciB0aGlzCitzZWN0aW9uLCB0aGUgQ29tbWVyY2lhbCBDb250cmlidXRvciB3b3VsZCBoYXZlIHRvIGRlZmVuZCBjbGFpbXMgYWdhaW5zdCB0aGUKK290aGVyIENvbnRyaWJ1dG9ycyByZWxhdGVkIHRvIHRob3NlIHBlcmZvcm1hbmNlIGNsYWltcyBhbmQgd2FycmFudGllcywgYW5kIGlmIGEKK2NvdXJ0IHJlcXVpcmVzIGFueSBvdGhlciBDb250cmlidXRvciB0byBwYXkgYW55IGRhbWFnZXMgYXMgYSByZXN1bHQsIHRoZQorQ29tbWVyY2lhbCBDb250cmlidXRvciBtdXN0IHBheSB0aG9zZSBkYW1hZ2VzLjwvc3Bhbj4gPC9wPgorCis8cD48Yj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+NS4gTk8gV0FSUkFOVFk8L3NwYW4+PC9iPiA8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5FWENFUFQgQVMgRVhQUkVTU0xZIFNFVCBGT1JUSCBJTiBUSElTCitBR1JFRU1FTlQsIFRIRSBQUk9HUkFNIElTIFBST1ZJREVEIE9OIEFOICZxdW90O0FTIElTJnF1b3Q7IEJBU0lTLCBXSVRIT1VUCitXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIEVJVEhFUiBFWFBSRVNTIE9SIElNUExJRUQgSU5DTFVESU5HLAorV0lUSE9VVCBMSU1JVEFUSU9OLCBBTlkgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIFRJVExFLCBOT04tSU5GUklOR0VNRU5ULAorTUVSQ0hBTlRBQklMSVRZIE9SIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBFYWNoIFJlY2lwaWVudCBpcyBzb2xlbHkKK3Jlc3BvbnNpYmxlIGZvciBkZXRlcm1pbmluZyB0aGUgYXBwcm9wcmlhdGVuZXNzIG9mIHVzaW5nIGFuZCBkaXN0cmlidXRpbmcgdGhlCitQcm9ncmFtIGFuZCBhc3N1bWVzIGFsbCByaXNrcyBhc3NvY2lhdGVkIHdpdGggaXRzIGV4ZXJjaXNlIG9mIHJpZ2h0cyB1bmRlciB0aGlzCitBZ3JlZW1lbnQgLCBpbmNsdWRpbmcgYnV0IG5vdCBsaW1pdGVkIHRvIHRoZSByaXNrcyBhbmQgY29zdHMgb2YgcHJvZ3JhbSBlcnJvcnMsCitjb21wbGlhbmNlIHdpdGggYXBwbGljYWJsZSBsYXdzLCBkYW1hZ2UgdG8gb3IgbG9zcyBvZiBkYXRhLCBwcm9ncmFtcyBvcgorZXF1aXBtZW50LCBhbmQgdW5hdmFpbGFiaWxpdHkgb3IgaW50ZXJydXB0aW9uIG9mIG9wZXJhdGlvbnMuIDwvc3Bhbj48L3A+CisKKzxwPjxiPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz42LiBESVNDTEFJTUVSIE9GIExJQUJJTElUWTwvc3Bhbj48L2I+IDwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkVYQ0VQVCBBUyBFWFBSRVNTTFkgU0VUIEZPUlRIIElOIFRISVMKK0FHUkVFTUVOVCwgTkVJVEhFUiBSRUNJUElFTlQgTk9SIEFOWSBDT05UUklCVVRPUlMgU0hBTEwgSEFWRSBBTlkgTElBQklMSVRZIEZPUgorQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisoSU5DTFVESU5HIFdJVEhPVVQgTElNSVRBVElPTiBMT1NUIFBST0ZJVFMpLCBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcKK05FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT1IgRElTVFJJQlVUSU9OIE9GCitUSEUgUFJPR1JBTSBPUiBUSEUgRVhFUkNJU0UgT0YgQU5ZIFJJR0hUUyBHUkFOVEVEIEhFUkVVTkRFUiwgRVZFTiBJRiBBRFZJU0VEIE9GCitUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLjwvc3Bhbj4gPC9wPgorCis8cD48Yj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+Ny4gR0VORVJBTDwvc3Bhbj48L2I+IDwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPklmIGFueSBwcm92aXNpb24gb2YgdGhpcyBBZ3JlZW1lbnQgaXMgaW52YWxpZAorb3IgdW5lbmZvcmNlYWJsZSB1bmRlciBhcHBsaWNhYmxlIGxhdywgaXQgc2hhbGwgbm90IGFmZmVjdCB0aGUgdmFsaWRpdHkgb3IKK2VuZm9yY2VhYmlsaXR5IG9mIHRoZSByZW1haW5kZXIgb2YgdGhlIHRlcm1zIG9mIHRoaXMgQWdyZWVtZW50LCBhbmQgd2l0aG91dAorZnVydGhlciBhY3Rpb24gYnkgdGhlIHBhcnRpZXMgaGVyZXRvLCBzdWNoIHByb3Zpc2lvbiBzaGFsbCBiZSByZWZvcm1lZCB0byB0aGUKK21pbmltdW0gZXh0ZW50IG5lY2Vzc2FyeSB0byBtYWtlIHN1Y2ggcHJvdmlzaW9uIHZhbGlkIGFuZCBlbmZvcmNlYWJsZS48L3NwYW4+IDwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPklmIFJlY2lwaWVudCBpbnN0aXR1dGVzIHBhdGVudCBsaXRpZ2F0aW9uCithZ2FpbnN0IGFueSBlbnRpdHkgKGluY2x1ZGluZyBhIGNyb3NzLWNsYWltIG9yIGNvdW50ZXJjbGFpbSBpbiBhIGxhd3N1aXQpCithbGxlZ2luZyB0aGF0IHRoZSBQcm9ncmFtIGl0c2VsZiAoZXhjbHVkaW5nIGNvbWJpbmF0aW9ucyBvZiB0aGUgUHJvZ3JhbSB3aXRoCitvdGhlciBzb2Z0d2FyZSBvciBoYXJkd2FyZSkgaW5mcmluZ2VzIHN1Y2ggUmVjaXBpZW50J3MgcGF0ZW50KHMpLCB0aGVuIHN1Y2gKK1JlY2lwaWVudCdzIHJpZ2h0cyBncmFudGVkIHVuZGVyIFNlY3Rpb24gMihiKSBzaGFsbCB0ZXJtaW5hdGUgYXMgb2YgdGhlIGRhdGUKK3N1Y2ggbGl0aWdhdGlvbiBpcyBmaWxlZC4gPC9zcGFuPjwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkFsbCBSZWNpcGllbnQncyByaWdodHMgdW5kZXIgdGhpcyBBZ3JlZW1lbnQKK3NoYWxsIHRlcm1pbmF0ZSBpZiBpdCBmYWlscyB0byBjb21wbHkgd2l0aCBhbnkgb2YgdGhlIG1hdGVyaWFsIHRlcm1zIG9yCitjb25kaXRpb25zIG9mIHRoaXMgQWdyZWVtZW50IGFuZCBkb2VzIG5vdCBjdXJlIHN1Y2ggZmFpbHVyZSBpbiBhIHJlYXNvbmFibGUKK3BlcmlvZCBvZiB0aW1lIGFmdGVyIGJlY29taW5nIGF3YXJlIG9mIHN1Y2ggbm9uY29tcGxpYW5jZS4gSWYgYWxsIFJlY2lwaWVudCdzCityaWdodHMgdW5kZXIgdGhpcyBBZ3JlZW1lbnQgdGVybWluYXRlLCBSZWNpcGllbnQgYWdyZWVzIHRvIGNlYXNlIHVzZSBhbmQKK2Rpc3RyaWJ1dGlvbiBvZiB0aGUgUHJvZ3JhbSBhcyBzb29uIGFzIHJlYXNvbmFibHkgcHJhY3RpY2FibGUuIEhvd2V2ZXIsCitSZWNpcGllbnQncyBvYmxpZ2F0aW9ucyB1bmRlciB0aGlzIEFncmVlbWVudCBhbmQgYW55IGxpY2Vuc2VzIGdyYW50ZWQgYnkKK1JlY2lwaWVudCByZWxhdGluZyB0byB0aGUgUHJvZ3JhbSBzaGFsbCBjb250aW51ZSBhbmQgc3Vydml2ZS4gPC9zcGFuPjwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkV2ZXJ5b25lIGlzIHBlcm1pdHRlZCB0byBjb3B5IGFuZCBkaXN0cmlidXRlCitjb3BpZXMgb2YgdGhpcyBBZ3JlZW1lbnQsIGJ1dCBpbiBvcmRlciB0byBhdm9pZCBpbmNvbnNpc3RlbmN5IHRoZSBBZ3JlZW1lbnQgaXMKK2NvcHlyaWdodGVkIGFuZCBtYXkgb25seSBiZSBtb2RpZmllZCBpbiB0aGUgZm9sbG93aW5nIG1hbm5lci4gVGhlIEFncmVlbWVudAorU3Rld2FyZCByZXNlcnZlcyB0aGUgcmlnaHQgdG8gcHVibGlzaCBuZXcgdmVyc2lvbnMgKGluY2x1ZGluZyByZXZpc2lvbnMpIG9mCit0aGlzIEFncmVlbWVudCBmcm9tIHRpbWUgdG8gdGltZS4gTm8gb25lIG90aGVyIHRoYW4gdGhlIEFncmVlbWVudCBTdGV3YXJkIGhhcwordGhlIHJpZ2h0IHRvIG1vZGlmeSB0aGlzIEFncmVlbWVudC4gVGhlIEVjbGlwc2UgRm91bmRhdGlvbiBpcyB0aGUgaW5pdGlhbAorQWdyZWVtZW50IFN0ZXdhcmQuIFRoZSBFY2xpcHNlIEZvdW5kYXRpb24gbWF5IGFzc2lnbiB0aGUgcmVzcG9uc2liaWxpdHkgdG8KK3NlcnZlIGFzIHRoZSBBZ3JlZW1lbnQgU3Rld2FyZCB0byBhIHN1aXRhYmxlIHNlcGFyYXRlIGVudGl0eS4gRWFjaCBuZXcgdmVyc2lvbgorb2YgdGhlIEFncmVlbWVudCB3aWxsIGJlIGdpdmVuIGEgZGlzdGluZ3Vpc2hpbmcgdmVyc2lvbiBudW1iZXIuIFRoZSBQcm9ncmFtCisoaW5jbHVkaW5nIENvbnRyaWJ1dGlvbnMpIG1heSBhbHdheXMgYmUgZGlzdHJpYnV0ZWQgc3ViamVjdCB0byB0aGUgdmVyc2lvbiBvZgordGhlIEFncmVlbWVudCB1bmRlciB3aGljaCBpdCB3YXMgcmVjZWl2ZWQuIEluIGFkZGl0aW9uLCBhZnRlciBhIG5ldyB2ZXJzaW9uIG9mCit0aGUgQWdyZWVtZW50IGlzIHB1Ymxpc2hlZCwgQ29udHJpYnV0b3IgbWF5IGVsZWN0IHRvIGRpc3RyaWJ1dGUgdGhlIFByb2dyYW0KKyhpbmNsdWRpbmcgaXRzIENvbnRyaWJ1dGlvbnMpIHVuZGVyIHRoZSBuZXcgdmVyc2lvbi4gRXhjZXB0IGFzIGV4cHJlc3NseSBzdGF0ZWQKK2luIFNlY3Rpb25zIDIoYSkgYW5kIDIoYikgYWJvdmUsIFJlY2lwaWVudCByZWNlaXZlcyBubyByaWdodHMgb3IgbGljZW5zZXMgdG8KK3RoZSBpbnRlbGxlY3R1YWwgcHJvcGVydHkgb2YgYW55IENvbnRyaWJ1dG9yIHVuZGVyIHRoaXMgQWdyZWVtZW50LCB3aGV0aGVyCitleHByZXNzbHksIGJ5IGltcGxpY2F0aW9uLCBlc3RvcHBlbCBvciBvdGhlcndpc2UuIEFsbCByaWdodHMgaW4gdGhlIFByb2dyYW0gbm90CitleHByZXNzbHkgZ3JhbnRlZCB1bmRlciB0aGlzIEFncmVlbWVudCBhcmUgcmVzZXJ2ZWQuPC9zcGFuPiA8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5UaGlzIEFncmVlbWVudCBpcyBnb3Zlcm5lZCBieSB0aGUgbGF3cyBvZiB0aGUKK1N0YXRlIG9mIE5ldyBZb3JrIGFuZCB0aGUgaW50ZWxsZWN0dWFsIHByb3BlcnR5IGxhd3Mgb2YgdGhlIFVuaXRlZCBTdGF0ZXMgb2YKK0FtZXJpY2EuIE5vIHBhcnR5IHRvIHRoaXMgQWdyZWVtZW50IHdpbGwgYnJpbmcgYSBsZWdhbCBhY3Rpb24gdW5kZXIgdGhpcworQWdyZWVtZW50IG1vcmUgdGhhbiBvbmUgeWVhciBhZnRlciB0aGUgY2F1c2Ugb2YgYWN0aW9uIGFyb3NlLiBFYWNoIHBhcnR5IHdhaXZlcworaXRzIHJpZ2h0cyB0byBhIGp1cnkgdHJpYWwgaW4gYW55IHJlc3VsdGluZyBsaXRpZ2F0aW9uLjwvc3Bhbj4gPC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWw+PCFbaWYgIXN1cHBvcnRFbXB0eVBhcmFzXT4mbmJzcDs8IVtlbmRpZl0+PG86cD48L286cD48L3A+CisKKzwvZGl2PgorCis8L2JvZHk+CisKKzwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS5zdGVtLmZlYXR1cmUvZmVhdHVyZS5wcm9wZXJ0aWVzIGIvZmVhdHVyZXMvb3JnLmVjbGlwc2Uuc3RlbS5mZWF0dXJlL2ZlYXR1cmUucHJvcGVydGllcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZGE4NWExCi0tLSAvZGV2L251bGwKKysrIGIvZmVhdHVyZXMvb3JnLmVjbGlwc2Uuc3RlbS5mZWF0dXJlL2ZlYXR1cmUucHJvcGVydGllcwpAQCAtMCwwICsxLDE3NiBAQAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBDb3B5cmlnaHQgKGMpIDIwMTEgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisjIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisjIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisjIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisjIAorIyBDb250cmlidXRvcnM6CisjICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgZmVhdHVyZS5wcm9wZXJ0aWVzCisjIGNvbnRhaW5zIGV4dGVybmFsaXplZCBzdHJpbmdzIGZvciBmZWF0dXJlLnhtbAorIyAiJWZvbyIgaW4gZmVhdHVyZS54bWwgY29ycmVzcG9uZHMgdG8gdGhlIGtleSAiZm9vIiBpbiB0aGlzIGZpbGUKKyMgamF2YS5pby5Qcm9wZXJ0aWVzIGZpbGUgKElTTyA4ODU5LTEgd2l0aCAiXCIgZXNjYXBlcykKKyMgVGhpcyBmaWxlIHNob3VsZCBiZSB0cmFuc2xhdGVkLgorCisjICJmZWF0dXJlTmFtZSIgcHJvcGVydHkgLSBuYW1lIG9mIHRoZSBmZWF0dXJlCitmZWF0dXJlTmFtZT1TVEVNIC0gU3BhdGlvdGVtcG9yYWwgRXBpZGVtaW9sb2dpY2FsIE1vZGVsZXIKKworIyAicHJvdmlkZXJOYW1lIiBwcm9wZXJ0eSAtIG5hbWUgb2YgdGhlIGNvbXBhbnkgdGhhdCBwcm92aWRlcyB0aGUgZmVhdHVyZQorcHJvdmlkZXJOYW1lPUVjbGlwc2Uub3JnCisKKyMgInVwZGF0ZVNpdGVOYW1lIiBwcm9wZXJ0eSAtIGxhYmVsIGZvciB0aGUgdXBkYXRlIHNpdGUKK3VwZGF0ZVNpdGVOYW1lPVNURU0gVXBkYXRlcworCisjICJzZWNvbmRhcnlTaXRlTmFtZSIgcHJvcGVydHkgLSBsYWJlbCBmb3IgdGhlIHNlY29uZGFyeSB1cGRhdGUgc2l0ZQorI3NlY29uZGFyeVVwZGF0ZVNpdGVOYW1lPVNURU0gVXBkYXRlcworCisjICJkZXNjcmlwdGlvbiIgcHJvcGVydHkgLSBkZXNjcmlwdGlvbiBvZiB0aGUgZmVhdHVyZQorZGVzY3JpcHRpb249XAorU1RFTSAtIFNwYXRpb3RlbXBvcmFsIEVwaWRlbWlvbG9naWNhbCBNb2RlbGVyLiBUaGUgU1RFTSB0b29sIFwKK2lzIGRlc2lnbmVkIHRvIGhlbHAgc2NpZW50aXN0cyBhbmQgcHVibGljIGhlYWx0aCBvZmZpY2lhbHMgXAorY3JlYXRlIGFuZCB1c2Ugc3BhdGlhbCBhbmQgdGVtcG9yYWwgbW9kZWxzIG9mIGVtZXJnaW5nIGluZmVjdGlvdXMgZGlzZWFzZXMuCisKKyMgImNvcHlyaWdodCIgcHJvcGVydHkgLSB0ZXh0IG9mIHRoZSAiRmVhdHVyZSBVcGRhdGUgQ29weXJpZ2h0IgorY29weXJpZ2h0PVwKK0NvcHlyaWdodCAoYykgMjAwNy0yMDExIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLlxuXAorQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFsc1xuXAorYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wXG5cCit3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdFxuXAoraHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWxcblwKK1xuXAorQ29udHJpYnV0b3JzOlxuXAorICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvblxuCisjIyMjIyMjIyMjIyMjIyMjIGVuZCBvZiBjb3B5cmlnaHQgcHJvcGVydHkgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyMgImxpY2Vuc2VVUkwiIHByb3BlcnR5IC0gVVJMIG9mIHRoZSAiRmVhdHVyZSBMaWNlbnNlIgorIyBkbyBub3QgdHJhbnNsYXRlIHZhbHVlIC0ganVzdCBjaGFuZ2UgdG8gcG9pbnQgdG8gYSBsb2NhbGUtc3BlY2lmaWMgSFRNTCBwYWdlCitsaWNlbnNlVVJMPWxpY2Vuc2UuaHRtbAorCisjICJsaWNlbnNlIiBwcm9wZXJ0eSAtIHRleHQgb2YgdGhlICJGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlIgorIyBzaG91bGQgYmUgcGxhaW4gdGV4dCB2ZXJzaW9uIG9mIGxpY2Vuc2UgYWdyZWVtZW50IHBvaW50ZWQgdG8gYmUgImxpY2Vuc2VVUkwiCitsaWNlbnNlPVwKK0VjbGlwc2UgRm91bmRhdGlvbiBTb2Z0d2FyZSBVc2VyIEFncmVlbWVudFxuXAorQXByaWwgMTQsIDIwMTBcblwKK1xuXAorVXNhZ2UgT2YgQ29udGVudFxuXAorXG5cCitUSEUgRUNMSVBTRSBGT1VOREFUSU9OIE1BS0VTIEFWQUlMQUJMRSBTT0ZUV0FSRSwgRE9DVU1FTlRBVElPTiwgSU5GT1JNQVRJT04gQU5EL09SXG5cCitPVEhFUiBNQVRFUklBTFMgRk9SIE9QRU4gU09VUkNFIFBST0pFQ1RTIChDT0xMRUNUSVZFTFkgIkNPTlRFTlQiKS5cblwKK1VTRSBPRiBUSEUgQ09OVEVOVCBJUyBHT1ZFUk5FRCBCWSBUSEUgVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgVEhJU1xuXAorQUdSRUVNRU5UIEFORC9PUiBUSEUgVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgTElDRU5TRSBBR1JFRU1FTlRTIE9SXG5cCitOT1RJQ0VTIElORElDQVRFRCBPUiBSRUZFUkVOQ0VEIEJFTE9XLiAgQlkgVVNJTkcgVEhFIENPTlRFTlQsIFlPVVxuXAorQUdSRUUgVEhBVCBZT1VSIFVTRSBPRiBUSEUgQ09OVEVOVCBJUyBHT1ZFUk5FRCBCWSBUSElTIEFHUkVFTUVOVFxuXAorQU5EL09SIFRIRSBURVJNUyBBTkQgQ09ORElUSU9OUyBPRiBBTlkgQVBQTElDQUJMRSBMSUNFTlNFIEFHUkVFTUVOVFNcblwKK09SIE5PVElDRVMgSU5ESUNBVEVEIE9SIFJFRkVSRU5DRUQgQkVMT1cuICBJRiBZT1UgRE8gTk9UIEFHUkVFIFRPIFRIRVxuXAorVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgVEhJUyBBR1JFRU1FTlQgQU5EIFRIRSBURVJNUyBBTkQgQ09ORElUSU9OU1xuXAorT0YgQU5ZIEFQUExJQ0FCTEUgTElDRU5TRSBBR1JFRU1FTlRTIE9SIE5PVElDRVMgSU5ESUNBVEVEIE9SIFJFRkVSRU5DRURcblwKK0JFTE9XLCBUSEVOIFlPVSBNQVkgTk9UIFVTRSBUSEUgQ09OVEVOVC5cblwKK1xuXAorQXBwbGljYWJsZSBMaWNlbnNlc1xuXAorXG5cCitVbmxlc3Mgb3RoZXJ3aXNlIGluZGljYXRlZCwgYWxsIENvbnRlbnQgbWFkZSBhdmFpbGFibGUgYnkgdGhlXG5cCitFY2xpcHNlIEZvdW5kYXRpb24gaXMgcHJvdmlkZWQgdG8geW91IHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZlxuXAordGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjAgKCJFUEwiKS4gQSBjb3B5IG9mIHRoZSBFUEwgaXNcblwKK3Byb3ZpZGVkIHdpdGggdGhpcyBDb250ZW50IGFuZCBpcyBhbHNvIGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbC5cblwKK0ZvciBwdXJwb3NlcyBvZiB0aGUgRVBMLCAiUHJvZ3JhbSIgd2lsbCBtZWFuIHRoZSBDb250ZW50LlxuXAorXG5cCitDb250ZW50IGluY2x1ZGVzLCBidXQgaXMgbm90IGxpbWl0ZWQgdG8sIHNvdXJjZSBjb2RlLCBvYmplY3QgY29kZSxcblwKK2RvY3VtZW50YXRpb24gYW5kIG90aGVyIGZpbGVzIG1haW50YWluZWQgaW4gdGhlIEVjbGlwc2UgRm91bmRhdGlvbiBzb3VyY2UgY29kZVxuXAorcmVwb3NpdG9yeSAoIlJlcG9zaXRvcnkiKSBpbiBzb2Z0d2FyZSBtb2R1bGVzICgiTW9kdWxlcyIpIGFuZCBtYWRlIGF2YWlsYWJsZVxuXAorYXMgZG93bmxvYWRhYmxlIGFyY2hpdmVzICgiRG93bmxvYWRzIikuXG5cCitcblwKKyAgICAgICAtIENvbnRlbnQgbWF5IGJlIHN0cnVjdHVyZWQgYW5kIHBhY2thZ2VkIGludG8gbW9kdWxlcyB0byBmYWNpbGl0YXRlIGRlbGl2ZXJpbmcsXG5cCisgICAgICAgICBleHRlbmRpbmcsIGFuZCB1cGdyYWRpbmcgdGhlIENvbnRlbnQuIFR5cGljYWwgbW9kdWxlcyBtYXkgaW5jbHVkZSBwbHVnLWlucyAoIlBsdWctaW5zIiksXG5cCisgICAgICAgICBwbHVnLWluIGZyYWdtZW50cyAoIkZyYWdtZW50cyIpLCBhbmQgZmVhdHVyZXMgKCJGZWF0dXJlcyIpLlxuXAorICAgICAgIC0gRWFjaCBQbHVnLWluIG9yIEZyYWdtZW50IG1heSBiZSBwYWNrYWdlZCBhcyBhIHN1Yi1kaXJlY3Rvcnkgb3IgSkFSIChKYXZhKFRNKSBBUmNoaXZlKVxuXAorICAgICAgICAgaW4gYSBkaXJlY3RvcnkgbmFtZWQgInBsdWdpbnMiLlxuXAorICAgICAgIC0gQSBGZWF0dXJlIGlzIGEgYnVuZGxlIG9mIG9uZSBvciBtb3JlIFBsdWctaW5zIGFuZC9vciBGcmFnbWVudHMgYW5kIGFzc29jaWF0ZWQgbWF0ZXJpYWwuXG5cCisgICAgICAgICBFYWNoIEZlYXR1cmUgbWF5IGJlIHBhY2thZ2VkIGFzIGEgc3ViLWRpcmVjdG9yeSBpbiBhIGRpcmVjdG9yeSBuYW1lZCAiZmVhdHVyZXMiLlxuXAorICAgICAgICAgV2l0aGluIGEgRmVhdHVyZSwgZmlsZXMgbmFtZWQgImZlYXR1cmUueG1sIiBtYXkgY29udGFpbiBhIGxpc3Qgb2YgdGhlIG5hbWVzIGFuZCB2ZXJzaW9uXG5cCisgICAgICAgICBudW1iZXJzIG9mIHRoZSBQbHVnLWlucyBhbmQvb3IgRnJhZ21lbnRzIGFzc29jaWF0ZWQgd2l0aCB0aGF0IEZlYXR1cmUuXG5cCisgICAgICAgLSBGZWF0dXJlcyBtYXkgYWxzbyBpbmNsdWRlIG90aGVyIEZlYXR1cmVzICgiSW5jbHVkZWQgRmVhdHVyZXMiKS4gV2l0aGluIGEgRmVhdHVyZSwgZmlsZXNcblwKKyAgICAgICAgIG5hbWVkICJmZWF0dXJlLnhtbCIgbWF5IGNvbnRhaW4gYSBsaXN0IG9mIHRoZSBuYW1lcyBhbmQgdmVyc2lvbiBudW1iZXJzIG9mIEluY2x1ZGVkIEZlYXR1cmVzLlxuXAorXG5cCitUaGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgZ292ZXJuaW5nIFBsdWctaW5zIGFuZCBGcmFnbWVudHMgc2hvdWxkIGJlXG5cCitjb250YWluZWQgaW4gZmlsZXMgbmFtZWQgImFib3V0Lmh0bWwiICgiQWJvdXRzIikuIFRoZSB0ZXJtcyBhbmRcblwKK2NvbmRpdGlvbnMgZ292ZXJuaW5nIEZlYXR1cmVzIGFuZCBJbmNsdWRlZCBGZWF0dXJlcyBzaG91bGQgYmUgY29udGFpbmVkXG5cCitpbiBmaWxlcyBuYW1lZCAibGljZW5zZS5odG1sIiAoIkZlYXR1cmUgTGljZW5zZXMiKS4gQWJvdXRzIGFuZCBGZWF0dXJlXG5cCitMaWNlbnNlcyBtYXkgYmUgbG9jYXRlZCBpbiBhbnkgZGlyZWN0b3J5IG9mIGEgRG93bmxvYWQgb3IgTW9kdWxlXG5cCitpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0byB0aGUgZm9sbG93aW5nIGxvY2F0aW9uczpcblwKK1xuXAorICAgICAgIC0gVGhlIHRvcC1sZXZlbCAocm9vdCkgZGlyZWN0b3J5XG5cCisgICAgICAgLSBQbHVnLWluIGFuZCBGcmFnbWVudCBkaXJlY3Rvcmllc1xuXAorICAgICAgIC0gSW5zaWRlIFBsdWctaW5zIGFuZCBGcmFnbWVudHMgcGFja2FnZWQgYXMgSkFSc1xuXAorICAgICAgIC0gU3ViLWRpcmVjdG9yaWVzIG9mIHRoZSBkaXJlY3RvcnkgbmFtZWQgInNyYyIgb2YgY2VydGFpbiBQbHVnLWluc1xuXAorICAgICAgIC0gRmVhdHVyZSBkaXJlY3Rvcmllc1xuXAorXG5cCitOb3RlOiBpZiBhIEZlYXR1cmUgbWFkZSBhdmFpbGFibGUgYnkgdGhlIEVjbGlwc2UgRm91bmRhdGlvbiBpcyBpbnN0YWxsZWQgdXNpbmcgdGhlXG5cCitQcm92aXNpb25pbmcgVGVjaG5vbG9neSAoYXMgZGVmaW5lZCBiZWxvdyksIHlvdSBtdXN0IGFncmVlIHRvIGEgbGljZW5zZSAoIkZlYXR1cmUgXG5cCitVcGRhdGUgTGljZW5zZSIpIGR1cmluZyB0aGUgaW5zdGFsbGF0aW9uIHByb2Nlc3MuIElmIHRoZSBGZWF0dXJlIGNvbnRhaW5zXG5cCitJbmNsdWRlZCBGZWF0dXJlcywgdGhlIEZlYXR1cmUgVXBkYXRlIExpY2Vuc2Ugc2hvdWxkIGVpdGhlciBwcm92aWRlIHlvdVxuXAord2l0aCB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgZ292ZXJuaW5nIHRoZSBJbmNsdWRlZCBGZWF0dXJlcyBvciBpbmZvcm1cblwKK3lvdSB3aGVyZSB5b3UgY2FuIGxvY2F0ZSB0aGVtLiBGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlcyBtYXkgYmUgZm91bmQgaW5cblwKK3RoZSAibGljZW5zZSIgcHJvcGVydHkgb2YgZmlsZXMgbmFtZWQgImZlYXR1cmUucHJvcGVydGllcyIgZm91bmQgd2l0aGluIGEgRmVhdHVyZS5cblwKK1N1Y2ggQWJvdXRzLCBGZWF0dXJlIExpY2Vuc2VzLCBhbmQgRmVhdHVyZSBVcGRhdGUgTGljZW5zZXMgY29udGFpbiB0aGVcblwKK3Rlcm1zIGFuZCBjb25kaXRpb25zIChvciByZWZlcmVuY2VzIHRvIHN1Y2ggdGVybXMgYW5kIGNvbmRpdGlvbnMpIHRoYXRcblwKK2dvdmVybiB5b3VyIHVzZSBvZiB0aGUgYXNzb2NpYXRlZCBDb250ZW50IGluIHRoYXQgZGlyZWN0b3J5LlxuXAorXG5cCitUSEUgQUJPVVRTLCBGRUFUVVJFIExJQ0VOU0VTLCBBTkQgRkVBVFVSRSBVUERBVEUgTElDRU5TRVMgTUFZIFJFRkVSXG5cCitUTyBUSEUgRVBMIE9SIE9USEVSIExJQ0VOU0UgQUdSRUVNRU5UUywgTk9USUNFUyBPUiBURVJNUyBBTkQgQ09ORElUSU9OUy5cblwKK1NPTUUgT0YgVEhFU0UgT1RIRVIgTElDRU5TRSBBR1JFRU1FTlRTIE1BWSBJTkNMVURFIChCVVQgQVJFIE5PVCBMSU1JVEVEIFRPKTpcblwKK1xuXAorICAgICAgIC0gQ29tbW9uIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4wIChhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9jcGwtdjEwLmh0bWwpXG5cCisgICAgICAgLSBBcGFjaGUgU29mdHdhcmUgTGljZW5zZSAxLjEgKGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRSlcblwKKyAgICAgICAtIEFwYWNoZSBTb2Z0d2FyZSBMaWNlbnNlIDIuMCAoYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMClcblwKKyAgICAgICAtIE1ldHJvIExpbmsgUHVibGljIExpY2Vuc2UgMS4wMCAoYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cub3Blbmdyb3VwLm9yZy9vcGVubW90aWYvc3VwcG9ydGVycy9tZXRyb2xpbmsvbGljZW5zZS5odG1sKVxuXAorICAgICAgIC0gTW96aWxsYSBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMSAoYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cubW96aWxsYS5vcmcvTVBML01QTC0xLjEuaHRtbClcblwKK1xuXAorSVQgSVMgWU9VUiBPQkxJR0FUSU9OIFRPIFJFQUQgQU5EIEFDQ0VQVCBBTEwgU1VDSCBURVJNUyBBTkQgQ09ORElUSU9OUyBQUklPUlxuXAorVE8gVVNFIE9GIFRIRSBDT05URU5ULiBJZiBubyBBYm91dCwgRmVhdHVyZSBMaWNlbnNlLCBvciBGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlXG5cCitpcyBwcm92aWRlZCwgcGxlYXNlIGNvbnRhY3QgdGhlIEVjbGlwc2UgRm91bmRhdGlvbiB0byBkZXRlcm1pbmUgd2hhdCB0ZXJtcyBhbmQgY29uZGl0aW9uc1xuXAorZ292ZXJuIHRoYXQgcGFydGljdWxhciBDb250ZW50LlxuXAorXG5cCitcblxVc2Ugb2YgUHJvdmlzaW9uaW5nIFRlY2hub2xvZ3lcblwKK1xuXAorVGhlIEVjbGlwc2UgRm91bmRhdGlvbiBtYWtlcyBhdmFpbGFibGUgcHJvdmlzaW9uaW5nIHNvZnR3YXJlLCBleGFtcGxlcyBvZiB3aGljaCBpbmNsdWRlLFxuXAorYnV0IGFyZSBub3QgbGltaXRlZCB0bywgcDIgYW5kIHRoZSBFY2xpcHNlIFVwZGF0ZSBNYW5hZ2VyICgiUHJvdmlzaW9uaW5nIFRlY2hub2xvZ3kiKSBmb3JcblwKK3RoZSBwdXJwb3NlIG9mIGFsbG93aW5nIHVzZXJzIHRvIGluc3RhbGwgc29mdHdhcmUsIGRvY3VtZW50YXRpb24sIGluZm9ybWF0aW9uIGFuZC9vclxuXAorb3RoZXIgbWF0ZXJpYWxzIChjb2xsZWN0aXZlbHkgIkluc3RhbGxhYmxlIFNvZnR3YXJlIikuIFRoaXMgY2FwYWJpbGl0eSBpcyBwcm92aWRlZCB3aXRoXG5cCit0aGUgaW50ZW50IG9mIGFsbG93aW5nIHN1Y2ggdXNlcnMgdG8gaW5zdGFsbCwgZXh0ZW5kIGFuZCB1cGRhdGUgRWNsaXBzZS1iYXNlZCBwcm9kdWN0cy5cblwKK0luZm9ybWF0aW9uIGFib3V0IHBhY2thZ2luZyBJbnN0YWxsYWJsZSBTb2Z0d2FyZSBpcyBhdmFpbGFibGUgYXRcblwKK2h0dHA6Ly9lY2xpcHNlLm9yZy9lcXVpbm94L3AyL3JlcG9zaXRvcnlfcGFja2FnaW5nLmh0bWwgKCJTcGVjaWZpY2F0aW9uIikuXG5cCitcblwKK1lvdSBtYXkgdXNlIFByb3Zpc2lvbmluZyBUZWNobm9sb2d5IHRvIGFsbG93IG90aGVyIHBhcnRpZXMgdG8gaW5zdGFsbCBJbnN0YWxsYWJsZSBTb2Z0d2FyZS5cblwKK1lvdSBzaGFsbCBiZSByZXNwb25zaWJsZSBmb3IgZW5hYmxpbmcgdGhlIGFwcGxpY2FibGUgbGljZW5zZSBhZ3JlZW1lbnRzIHJlbGF0aW5nIHRvIHRoZVxuXAorSW5zdGFsbGFibGUgU29mdHdhcmUgdG8gYmUgcHJlc2VudGVkIHRvLCBhbmQgYWNjZXB0ZWQgYnksIHRoZSB1c2VycyBvZiB0aGUgUHJvdmlzaW9uaW5nIFRlY2hub2xvZ3lcblwKK2luIGFjY29yZGFuY2Ugd2l0aCB0aGUgU3BlY2lmaWNhdGlvbi4gQnkgdXNpbmcgUHJvdmlzaW9uaW5nIFRlY2hub2xvZ3kgaW4gc3VjaCBhIG1hbm5lciBhbmRcblwKK21ha2luZyBpdCBhdmFpbGFibGUgaW4gYWNjb3JkYW5jZSB3aXRoIHRoZSBTcGVjaWZpY2F0aW9uLCB5b3UgZnVydGhlciBhY2tub3dsZWRnZSB5b3VyXG5cCithZ3JlZW1lbnQgdG8sIGFuZCB0aGUgYWNxdWlzaXRpb24gb2YgYWxsIG5lY2Vzc2FyeSByaWdodHMgdG8gcGVybWl0IHRoZSBmb2xsb3dpbmc6XG5cCitcblwKKyAgICAgICAxLiBBIHNlcmllcyBvZiBhY3Rpb25zIG1heSBvY2N1ciAoIlByb3Zpc2lvbmluZyBQcm9jZXNzIikgaW4gd2hpY2ggYSB1c2VyIG1heSBleGVjdXRlXG5cCisgICAgICAgICAgdGhlIFByb3Zpc2lvbmluZyBUZWNobm9sb2d5IG9uIGEgbWFjaGluZSAoIlRhcmdldCBNYWNoaW5lIikgd2l0aCB0aGUgaW50ZW50IG9mIGluc3RhbGxpbmcsXG5cCisgICAgICAgICAgZXh0ZW5kaW5nIG9yIHVwZGF0aW5nIHRoZSBmdW5jdGlvbmFsaXR5IG9mIGFuIEVjbGlwc2UtYmFzZWQgcHJvZHVjdC5cblwKKyAgICAgICAyLiBEdXJpbmcgdGhlIFByb3Zpc2lvbmluZyBQcm9jZXNzLCB0aGUgUHJvdmlzaW9uaW5nIFRlY2hub2xvZ3kgbWF5IGNhdXNlIHRoaXJkIHBhcnR5XG5cCisgICAgICAgICAgSW5zdGFsbGFibGUgU29mdHdhcmUgb3IgYSBwb3J0aW9uIHRoZXJlb2YgdG8gYmUgYWNjZXNzZWQgYW5kIGNvcGllZCB0byB0aGUgVGFyZ2V0IE1hY2hpbmUuXG5cCisgICAgICAgMy4gUHVyc3VhbnQgdG8gdGhlIFNwZWNpZmljYXRpb24sIHlvdSB3aWxsIHByb3ZpZGUgdG8gdGhlIHVzZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIHRoYXRcblwKKyAgICAgICAgICBnb3Zlcm4gdGhlIHVzZSBvZiB0aGUgSW5zdGFsbGFibGUgU29mdHdhcmUgKCJJbnN0YWxsYWJsZSBTb2Z0d2FyZSBBZ3JlZW1lbnQiKSBhbmQgc3VjaFxuXAorICAgICAgICAgIEluc3RhbGxhYmxlIFNvZnR3YXJlIEFncmVlbWVudCBzaGFsbCBiZSBhY2Nlc3NlZCBmcm9tIHRoZSBUYXJnZXQgTWFjaGluZSBpbiBhY2NvcmRhbmNlXG5cCisgICAgICAgICAgd2l0aCB0aGUgU3BlY2lmaWNhdGlvbi4gU3VjaCBJbnN0YWxsYWJsZSBTb2Z0d2FyZSBBZ3JlZW1lbnQgbXVzdCBpbmZvcm0gdGhlIHVzZXIgb2YgdGhlXG5cCisgICAgICAgICAgdGVybXMgYW5kIGNvbmRpdGlvbnMgdGhhdCBnb3Zlcm4gdGhlIEluc3RhbGxhYmxlIFNvZnR3YXJlIGFuZCBtdXN0IHNvbGljaXQgYWNjZXB0YW5jZSBieVxuXAorICAgICAgICAgIHRoZSBlbmQgdXNlciBpbiB0aGUgbWFubmVyIHByZXNjcmliZWQgaW4gc3VjaCBJbnN0YWxsYWJsZSBTb2Z0d2FyZSBBZ3JlZW1lbnQuIFVwb24gc3VjaFxuXAorICAgICAgICAgIGluZGljYXRpb24gb2YgYWdyZWVtZW50IGJ5IHRoZSB1c2VyLCB0aGUgcHJvdmlzaW9uaW5nIFRlY2hub2xvZ3kgd2lsbCBjb21wbGV0ZSBpbnN0YWxsYXRpb25cblwKKyAgICAgICAgICBvZiB0aGUgSW5zdGFsbGFibGUgU29mdHdhcmUuXG5cCitcblwKK0NyeXB0b2dyYXBoeVxuXAorXG5cCitDb250ZW50IG1heSBjb250YWluIGVuY3J5cHRpb24gc29mdHdhcmUuIFRoZSBjb3VudHJ5IGluIHdoaWNoIHlvdSBhcmVcblwKK2N1cnJlbnRseSBtYXkgaGF2ZSByZXN0cmljdGlvbnMgb24gdGhlIGltcG9ydCwgcG9zc2Vzc2lvbiwgYW5kIHVzZSxcblwKK2FuZC9vciByZS1leHBvcnQgdG8gYW5vdGhlciBjb3VudHJ5LCBvZiBlbmNyeXB0aW9uIHNvZnR3YXJlLiBCRUZPUkVcblwKK3VzaW5nIGFueSBlbmNyeXB0aW9uIHNvZnR3YXJlLCBwbGVhc2UgY2hlY2sgdGhlIGNvdW50cnkncyBsYXdzLFxuXAorcmVndWxhdGlvbnMgYW5kIHBvbGljaWVzIGNvbmNlcm5pbmcgdGhlIGltcG9ydCwgcG9zc2Vzc2lvbiwgb3IgdXNlLCBhbmRcblwKK3JlLWV4cG9ydCBvZiBlbmNyeXB0aW9uIHNvZnR3YXJlLCB0byBzZWUgaWYgdGhpcyBpcyBwZXJtaXR0ZWQuXG5cCitcblwKK0phdmEgYW5kIGFsbCBKYXZhLWJhc2VkIHRyYWRlbWFya3MgYXJlIHRyYWRlbWFya3Mgb2YgT3JhY2xlIENvcnBvcmF0aW9uIGluIHRoZSBVbml0ZWQgU3RhdGVzLCBvdGhlciBjb3VudHJpZXMsIG9yIGJvdGguXG4KKyMjIyMjIyMjIyMjIGVuZCBvZiBsaWNlbnNlIHByb3BlcnR5ICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLnN0ZW0uZmVhdHVyZS9mZWF0dXJlLnhtbCBiL2ZlYXR1cmVzL29yZy5lY2xpcHNlLnN0ZW0uZmVhdHVyZS9mZWF0dXJlLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45M2IzNTZmCi0tLSAvZGV2L251bGwKKysrIGIvZmVhdHVyZXMvb3JnLmVjbGlwc2Uuc3RlbS5mZWF0dXJlL2ZlYXR1cmUueG1sCkBAIC0wLDAgKzEsMzYgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8ZmVhdHVyZQorICAgICAgaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uZmVhdHVyZSIKKyAgICAgIGxhYmVsPSIlZmVhdHVyZU5hbWUiCisgICAgICB2ZXJzaW9uPSIxLjIuMSIKKyAgICAgIHByb3ZpZGVyLW5hbWU9IiVwcm92aWRlck5hbWUiPgorCisgICA8ZGVzY3JpcHRpb24+CisgICAgICAlZGVzY3JpcHRpb24KKyAgIDwvZGVzY3JpcHRpb24+CisKKyAgIDxjb3B5cmlnaHQ+CisgICAgICAlY29weXJpZ2h0CisgICA8L2NvcHlyaWdodD4KKworICAgPGxpY2Vuc2UgdXJsPSIlbGljZW5zZVVSTCI+CisgICAgICAlbGljZW5zZQorICAgPC9saWNlbnNlPgorCisgICA8dXJsPgorICAgICAgPHVwZGF0ZSBsYWJlbD0iJXVwZGF0ZVNpdGVOYW1lIiB1cmw9Imh0dHA6Ly9kb3dubG9hZC5lY2xpcHNlLm9yZy9zdGVtL3VwZGF0ZS1zaXRlLyIvPgorICAgPC91cmw+CisKKyAgIDxpbmNsdWRlcworICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLnN0ZW0ucHJvZHVjdC5mZWF0dXJlIgorICAgICAgICAgdmVyc2lvbj0iMC4wLjAiLz4KKworICAgPGluY2x1ZGVzCisgICAgICAgICBpZD0ib3JnLmVjbGlwc2Uuc3RlbS5pbnRlcm5hbC5kYXRhLmZlYXR1cmUiCisgICAgICAgICB2ZXJzaW9uPSIwLjAuMCIvPgorCisgICA8aW5jbHVkZXMKKyAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmZlYXR1cmUiCisgICAgICAgICB2ZXJzaW9uPSIwLjAuMCIvPgorCis8L2ZlYXR1cmU+CmRpZmYgLS1naXQgYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS5zdGVtLmZlYXR1cmUvbGljZW5zZS5odG1sIGIvZmVhdHVyZXMvb3JnLmVjbGlwc2Uuc3RlbS5mZWF0dXJlL2xpY2Vuc2UuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMTg0Y2EzCi0tLSAvZGV2L251bGwKKysrIGIvZmVhdHVyZXMvb3JnLmVjbGlwc2Uuc3RlbS5mZWF0dXJlL2xpY2Vuc2UuaHRtbApAQCAtMCwwICsxLDEwNyBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iSVNPLTg4NTktMSIgPz4KKzwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgWEhUTUwgMS4wIFN0cmljdC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbDEvRFREL3hodG1sMS1zdHJpY3QuZHRkIj4KKzxodG1sIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIj4KKzxoZWFkPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9SVNPLTg4NTktMSIgLz4KKzx0aXRsZT5FY2xpcHNlIEZvdW5kYXRpb24gU29mdHdhcmUgVXNlciBBZ3JlZW1lbnQ8L3RpdGxlPgorPC9oZWFkPgorCis8Ym9keSBsYW5nPSJFTi1VUyI+Cis8aDI+RWNsaXBzZSBGb3VuZGF0aW9uIFNvZnR3YXJlIFVzZXIgQWdyZWVtZW50PC9oMj4KKzxwPkFwcmlsIDE0LCAyMDEwPC9wPgorCis8aDM+VXNhZ2UgT2YgQ29udGVudDwvaDM+CisKKzxwPlRIRSBFQ0xJUFNFIEZPVU5EQVRJT04gTUFLRVMgQVZBSUxBQkxFIFNPRlRXQVJFLCBET0NVTUVOVEFUSU9OLCBJTkZPUk1BVElPTiBBTkQvT1IgT1RIRVIgTUFURVJJQUxTIEZPUiBPUEVOIFNPVVJDRSBQUk9KRUNUUworICAgKENPTExFQ1RJVkVMWSAmcXVvdDtDT05URU5UJnF1b3Q7KS4gIFVTRSBPRiBUSEUgQ09OVEVOVCBJUyBHT1ZFUk5FRCBCWSBUSEUgVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgVEhJUyBBR1JFRU1FTlQgQU5EL09SIFRIRSBURVJNUyBBTkQKKyAgIENPTkRJVElPTlMgT0YgTElDRU5TRSBBR1JFRU1FTlRTIE9SIE5PVElDRVMgSU5ESUNBVEVEIE9SIFJFRkVSRU5DRUQgQkVMT1cuICBCWSBVU0lORyBUSEUgQ09OVEVOVCwgWU9VIEFHUkVFIFRIQVQgWU9VUiBVU0UKKyAgIE9GIFRIRSBDT05URU5UIElTIEdPVkVSTkVEIEJZIFRISVMgQUdSRUVNRU5UIEFORC9PUiBUSEUgVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgQU5ZIEFQUExJQ0FCTEUgTElDRU5TRSBBR1JFRU1FTlRTIE9SCisgICBOT1RJQ0VTIElORElDQVRFRCBPUiBSRUZFUkVOQ0VEIEJFTE9XLiAgSUYgWU9VIERPIE5PVCBBR1JFRSBUTyBUSEUgVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgVEhJUyBBR1JFRU1FTlQgQU5EIFRIRSBURVJNUyBBTkQKKyAgIENPTkRJVElPTlMgT0YgQU5ZIEFQUExJQ0FCTEUgTElDRU5TRSBBR1JFRU1FTlRTIE9SIE5PVElDRVMgSU5ESUNBVEVEIE9SIFJFRkVSRU5DRUQgQkVMT1csIFRIRU4gWU9VIE1BWSBOT1QgVVNFIFRIRSBDT05URU5ULjwvcD4KKworPGgzPkFwcGxpY2FibGUgTGljZW5zZXM8L2gzPgorCis8cD5Vbmxlc3Mgb3RoZXJ3aXNlIGluZGljYXRlZCwgYWxsIENvbnRlbnQgbWFkZSBhdmFpbGFibGUgYnkgdGhlIEVjbGlwc2UgRm91bmRhdGlvbiBpcyBwcm92aWRlZCB0byB5b3UgdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4wCisgICAoJnF1b3Q7RVBMJnF1b3Q7KS4gIEEgY29weSBvZiB0aGUgRVBMIGlzIHByb3ZpZGVkIHdpdGggdGhpcyBDb250ZW50IGFuZCBpcyBhbHNvIGF2YWlsYWJsZSBhdCA8YSBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbCI+aHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWw8L2E+LgorICAgRm9yIHB1cnBvc2VzIG9mIHRoZSBFUEwsICZxdW90O1Byb2dyYW0mcXVvdDsgd2lsbCBtZWFuIHRoZSBDb250ZW50LjwvcD4KKworPHA+Q29udGVudCBpbmNsdWRlcywgYnV0IGlzIG5vdCBsaW1pdGVkIHRvLCBzb3VyY2UgY29kZSwgb2JqZWN0IGNvZGUsIGRvY3VtZW50YXRpb24gYW5kIG90aGVyIGZpbGVzIG1haW50YWluZWQgaW4gdGhlIEVjbGlwc2UgRm91bmRhdGlvbiBzb3VyY2UgY29kZQorICAgcmVwb3NpdG9yeSAoJnF1b3Q7UmVwb3NpdG9yeSZxdW90OykgaW4gc29mdHdhcmUgbW9kdWxlcyAoJnF1b3Q7TW9kdWxlcyZxdW90OykgYW5kIG1hZGUgYXZhaWxhYmxlIGFzIGRvd25sb2FkYWJsZSBhcmNoaXZlcyAoJnF1b3Q7RG93bmxvYWRzJnF1b3Q7KS48L3A+CisKKzx1bD4KKyAgICAgICA8bGk+Q29udGVudCBtYXkgYmUgc3RydWN0dXJlZCBhbmQgcGFja2FnZWQgaW50byBtb2R1bGVzIHRvIGZhY2lsaXRhdGUgZGVsaXZlcmluZywgZXh0ZW5kaW5nLCBhbmQgdXBncmFkaW5nIHRoZSBDb250ZW50LiAgVHlwaWNhbCBtb2R1bGVzIG1heSBpbmNsdWRlIHBsdWctaW5zICgmcXVvdDtQbHVnLWlucyZxdW90OyksIHBsdWctaW4gZnJhZ21lbnRzICgmcXVvdDtGcmFnbWVudHMmcXVvdDspLCBhbmQgZmVhdHVyZXMgKCZxdW90O0ZlYXR1cmVzJnF1b3Q7KS48L2xpPgorICAgICAgIDxsaT5FYWNoIFBsdWctaW4gb3IgRnJhZ21lbnQgbWF5IGJlIHBhY2thZ2VkIGFzIGEgc3ViLWRpcmVjdG9yeSBvciBKQVIgKEphdmEmdHJhZGU7IEFSY2hpdmUpIGluIGEgZGlyZWN0b3J5IG5hbWVkICZxdW90O3BsdWdpbnMmcXVvdDsuPC9saT4KKyAgICAgICA8bGk+QSBGZWF0dXJlIGlzIGEgYnVuZGxlIG9mIG9uZSBvciBtb3JlIFBsdWctaW5zIGFuZC9vciBGcmFnbWVudHMgYW5kIGFzc29jaWF0ZWQgbWF0ZXJpYWwuICBFYWNoIEZlYXR1cmUgbWF5IGJlIHBhY2thZ2VkIGFzIGEgc3ViLWRpcmVjdG9yeSBpbiBhIGRpcmVjdG9yeSBuYW1lZCAmcXVvdDtmZWF0dXJlcyZxdW90Oy4gIFdpdGhpbiBhIEZlYXR1cmUsIGZpbGVzIG5hbWVkICZxdW90O2ZlYXR1cmUueG1sJnF1b3Q7IG1heSBjb250YWluIGEgbGlzdCBvZiB0aGUgbmFtZXMgYW5kIHZlcnNpb24gbnVtYmVycyBvZiB0aGUgUGx1Zy1pbnMKKyAgICAgIGFuZC9vciBGcmFnbWVudHMgYXNzb2NpYXRlZCB3aXRoIHRoYXQgRmVhdHVyZS48L2xpPgorICAgICAgIDxsaT5GZWF0dXJlcyBtYXkgYWxzbyBpbmNsdWRlIG90aGVyIEZlYXR1cmVzICgmcXVvdDtJbmNsdWRlZCBGZWF0dXJlcyZxdW90OykuIFdpdGhpbiBhIEZlYXR1cmUsIGZpbGVzIG5hbWVkICZxdW90O2ZlYXR1cmUueG1sJnF1b3Q7IG1heSBjb250YWluIGEgbGlzdCBvZiB0aGUgbmFtZXMgYW5kIHZlcnNpb24gbnVtYmVycyBvZiBJbmNsdWRlZCBGZWF0dXJlcy48L2xpPgorPC91bD4KKworPHA+VGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIGdvdmVybmluZyBQbHVnLWlucyBhbmQgRnJhZ21lbnRzIHNob3VsZCBiZSBjb250YWluZWQgaW4gZmlsZXMgbmFtZWQgJnF1b3Q7YWJvdXQuaHRtbCZxdW90OyAoJnF1b3Q7QWJvdXRzJnF1b3Q7KS4gVGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIGdvdmVybmluZyBGZWF0dXJlcyBhbmQKK0luY2x1ZGVkIEZlYXR1cmVzIHNob3VsZCBiZSBjb250YWluZWQgaW4gZmlsZXMgbmFtZWQgJnF1b3Q7bGljZW5zZS5odG1sJnF1b3Q7ICgmcXVvdDtGZWF0dXJlIExpY2Vuc2VzJnF1b3Q7KS4gIEFib3V0cyBhbmQgRmVhdHVyZSBMaWNlbnNlcyBtYXkgYmUgbG9jYXRlZCBpbiBhbnkgZGlyZWN0b3J5IG9mIGEgRG93bmxvYWQgb3IgTW9kdWxlCitpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0byB0aGUgZm9sbG93aW5nIGxvY2F0aW9uczo8L3A+CisKKzx1bD4KKyAgICAgICA8bGk+VGhlIHRvcC1sZXZlbCAocm9vdCkgZGlyZWN0b3J5PC9saT4KKyAgICAgICA8bGk+UGx1Zy1pbiBhbmQgRnJhZ21lbnQgZGlyZWN0b3JpZXM8L2xpPgorICAgICAgIDxsaT5JbnNpZGUgUGx1Zy1pbnMgYW5kIEZyYWdtZW50cyBwYWNrYWdlZCBhcyBKQVJzPC9saT4KKyAgICAgICA8bGk+U3ViLWRpcmVjdG9yaWVzIG9mIHRoZSBkaXJlY3RvcnkgbmFtZWQgJnF1b3Q7c3JjJnF1b3Q7IG9mIGNlcnRhaW4gUGx1Zy1pbnM8L2xpPgorICAgICAgIDxsaT5GZWF0dXJlIGRpcmVjdG9yaWVzPC9saT4KKzwvdWw+CisKKzxwPk5vdGU6IGlmIGEgRmVhdHVyZSBtYWRlIGF2YWlsYWJsZSBieSB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uIGlzIGluc3RhbGxlZCB1c2luZyB0aGUgUHJvdmlzaW9uaW5nIFRlY2hub2xvZ3kgKGFzIGRlZmluZWQgYmVsb3cpLCB5b3UgbXVzdCBhZ3JlZSB0byBhIGxpY2Vuc2UgKCZxdW90O0ZlYXR1cmUgVXBkYXRlIExpY2Vuc2UmcXVvdDspIGR1cmluZyB0aGUKK2luc3RhbGxhdGlvbiBwcm9jZXNzLiAgSWYgdGhlIEZlYXR1cmUgY29udGFpbnMgSW5jbHVkZWQgRmVhdHVyZXMsIHRoZSBGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlIHNob3VsZCBlaXRoZXIgcHJvdmlkZSB5b3Ugd2l0aCB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgZ292ZXJuaW5nIHRoZSBJbmNsdWRlZCBGZWF0dXJlcyBvcgoraW5mb3JtIHlvdSB3aGVyZSB5b3UgY2FuIGxvY2F0ZSB0aGVtLiAgRmVhdHVyZSBVcGRhdGUgTGljZW5zZXMgbWF5IGJlIGZvdW5kIGluIHRoZSAmcXVvdDtsaWNlbnNlJnF1b3Q7IHByb3BlcnR5IG9mIGZpbGVzIG5hbWVkICZxdW90O2ZlYXR1cmUucHJvcGVydGllcyZxdW90OyBmb3VuZCB3aXRoaW4gYSBGZWF0dXJlLgorU3VjaCBBYm91dHMsIEZlYXR1cmUgTGljZW5zZXMsIGFuZCBGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlcyBjb250YWluIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyAob3IgcmVmZXJlbmNlcyB0byBzdWNoIHRlcm1zIGFuZCBjb25kaXRpb25zKSB0aGF0IGdvdmVybiB5b3VyIHVzZSBvZiB0aGUgYXNzb2NpYXRlZCBDb250ZW50IGluCit0aGF0IGRpcmVjdG9yeS48L3A+CisKKzxwPlRIRSBBQk9VVFMsIEZFQVRVUkUgTElDRU5TRVMsIEFORCBGRUFUVVJFIFVQREFURSBMSUNFTlNFUyBNQVkgUkVGRVIgVE8gVEhFIEVQTCBPUiBPVEhFUiBMSUNFTlNFIEFHUkVFTUVOVFMsIE5PVElDRVMgT1IgVEVSTVMgQU5EIENPTkRJVElPTlMuICBTT01FIE9GIFRIRVNFCitPVEhFUiBMSUNFTlNFIEFHUkVFTUVOVFMgTUFZIElOQ0xVREUgKEJVVCBBUkUgTk9UIExJTUlURUQgVE8pOjwvcD4KKworPHVsPgorICAgICAgIDxsaT5Db21tb24gUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjAgKGF2YWlsYWJsZSBhdCA8YSBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2NwbC12MTAuaHRtbCI+aHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9jcGwtdjEwLmh0bWw8L2E+KTwvbGk+CisgICAgICAgPGxpPkFwYWNoZSBTb2Z0d2FyZSBMaWNlbnNlIDEuMSAoYXZhaWxhYmxlIGF0IDxhIGhyZWY9Imh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFIj5odHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRTwvYT4pPC9saT4KKyAgICAgICA8bGk+QXBhY2hlIFNvZnR3YXJlIExpY2Vuc2UgMi4wIChhdmFpbGFibGUgYXQgPGEgaHJlZj0iaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wIj5odHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjA8L2E+KTwvbGk+CisgICAgICAgPGxpPk1ldHJvIExpbmsgUHVibGljIExpY2Vuc2UgMS4wMCAoYXZhaWxhYmxlIGF0IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbmdyb3VwLm9yZy9vcGVubW90aWYvc3VwcG9ydGVycy9tZXRyb2xpbmsvbGljZW5zZS5odG1sIj5odHRwOi8vd3d3Lm9wZW5ncm91cC5vcmcvb3Blbm1vdGlmL3N1cHBvcnRlcnMvbWV0cm9saW5rL2xpY2Vuc2UuaHRtbDwvYT4pPC9saT4KKyAgICAgICA8bGk+TW96aWxsYSBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMSAoYXZhaWxhYmxlIGF0IDxhIGhyZWY9Imh0dHA6Ly93d3cubW96aWxsYS5vcmcvTVBML01QTC0xLjEuaHRtbCI+aHR0cDovL3d3dy5tb3ppbGxhLm9yZy9NUEwvTVBMLTEuMS5odG1sPC9hPik8L2xpPgorPC91bD4KKworPHA+SVQgSVMgWU9VUiBPQkxJR0FUSU9OIFRPIFJFQUQgQU5EIEFDQ0VQVCBBTEwgU1VDSCBURVJNUyBBTkQgQ09ORElUSU9OUyBQUklPUiBUTyBVU0UgT0YgVEhFIENPTlRFTlQuICBJZiBubyBBYm91dCwgRmVhdHVyZSBMaWNlbnNlLCBvciBGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlIGlzIHByb3ZpZGVkLCBwbGVhc2UKK2NvbnRhY3QgdGhlIEVjbGlwc2UgRm91bmRhdGlvbiB0byBkZXRlcm1pbmUgd2hhdCB0ZXJtcyBhbmQgY29uZGl0aW9ucyBnb3Zlcm4gdGhhdCBwYXJ0aWN1bGFyIENvbnRlbnQuPC9wPgorCisKKzxoMz5Vc2Ugb2YgUHJvdmlzaW9uaW5nIFRlY2hub2xvZ3k8L2gzPgorCis8cD5UaGUgRWNsaXBzZSBGb3VuZGF0aW9uIG1ha2VzIGF2YWlsYWJsZSBwcm92aXNpb25pbmcgc29mdHdhcmUsIGV4YW1wbGVzIG9mIHdoaWNoIGluY2x1ZGUsIGJ1dCBhcmUgbm90IGxpbWl0ZWQgdG8sIHAyIGFuZCB0aGUgRWNsaXBzZQorICAgVXBkYXRlIE1hbmFnZXIgKCZxdW90O1Byb3Zpc2lvbmluZyBUZWNobm9sb2d5JnF1b3Q7KSBmb3IgdGhlIHB1cnBvc2Ugb2YgYWxsb3dpbmcgdXNlcnMgdG8gaW5zdGFsbCBzb2Z0d2FyZSwgZG9jdW1lbnRhdGlvbiwgaW5mb3JtYXRpb24gYW5kL29yCisgICBvdGhlciBtYXRlcmlhbHMgKGNvbGxlY3RpdmVseSAmcXVvdDtJbnN0YWxsYWJsZSBTb2Z0d2FyZSZxdW90OykuIFRoaXMgY2FwYWJpbGl0eSBpcyBwcm92aWRlZCB3aXRoIHRoZSBpbnRlbnQgb2YgYWxsb3dpbmcgc3VjaCB1c2VycyB0bworICAgaW5zdGFsbCwgZXh0ZW5kIGFuZCB1cGRhdGUgRWNsaXBzZS1iYXNlZCBwcm9kdWN0cy4gSW5mb3JtYXRpb24gYWJvdXQgcGFja2FnaW5nIEluc3RhbGxhYmxlIFNvZnR3YXJlIGlzIGF2YWlsYWJsZSBhdCA8YQorICAgICAgIGhyZWY9Imh0dHA6Ly9lY2xpcHNlLm9yZy9lcXVpbm94L3AyL3JlcG9zaXRvcnlfcGFja2FnaW5nLmh0bWwiPmh0dHA6Ly9lY2xpcHNlLm9yZy9lcXVpbm94L3AyL3JlcG9zaXRvcnlfcGFja2FnaW5nLmh0bWw8L2E+CisgICAoJnF1b3Q7U3BlY2lmaWNhdGlvbiZxdW90OykuPC9wPgorCis8cD5Zb3UgbWF5IHVzZSBQcm92aXNpb25pbmcgVGVjaG5vbG9neSB0byBhbGxvdyBvdGhlciBwYXJ0aWVzIHRvIGluc3RhbGwgSW5zdGFsbGFibGUgU29mdHdhcmUuIFlvdSBzaGFsbCBiZSByZXNwb25zaWJsZSBmb3IgZW5hYmxpbmcgdGhlCisgICBhcHBsaWNhYmxlIGxpY2Vuc2UgYWdyZWVtZW50cyByZWxhdGluZyB0byB0aGUgSW5zdGFsbGFibGUgU29mdHdhcmUgdG8gYmUgcHJlc2VudGVkIHRvLCBhbmQgYWNjZXB0ZWQgYnksIHRoZSB1c2VycyBvZiB0aGUgUHJvdmlzaW9uaW5nIFRlY2hub2xvZ3kKKyAgIGluIGFjY29yZGFuY2Ugd2l0aCB0aGUgU3BlY2lmaWNhdGlvbi4gQnkgdXNpbmcgUHJvdmlzaW9uaW5nIFRlY2hub2xvZ3kgaW4gc3VjaCBhIG1hbm5lciBhbmQgbWFraW5nIGl0IGF2YWlsYWJsZSBpbiBhY2NvcmRhbmNlIHdpdGggdGhlCisgICBTcGVjaWZpY2F0aW9uLCB5b3UgZnVydGhlciBhY2tub3dsZWRnZSB5b3VyIGFncmVlbWVudCB0bywgYW5kIHRoZSBhY3F1aXNpdGlvbiBvZiBhbGwgbmVjZXNzYXJ5IHJpZ2h0cyB0byBwZXJtaXQgdGhlIGZvbGxvd2luZzo8L3A+CisKKzxvbD4KKyAgICAgICA8bGk+QSBzZXJpZXMgb2YgYWN0aW9ucyBtYXkgb2NjdXIgKCZxdW90O1Byb3Zpc2lvbmluZyBQcm9jZXNzJnF1b3Q7KSBpbiB3aGljaCBhIHVzZXIgbWF5IGV4ZWN1dGUgdGhlIFByb3Zpc2lvbmluZyBUZWNobm9sb2d5CisgICAgICAgb24gYSBtYWNoaW5lICgmcXVvdDtUYXJnZXQgTWFjaGluZSZxdW90Oykgd2l0aCB0aGUgaW50ZW50IG9mIGluc3RhbGxpbmcsIGV4dGVuZGluZyBvciB1cGRhdGluZyB0aGUgZnVuY3Rpb25hbGl0eSBvZiBhbiBFY2xpcHNlLWJhc2VkCisgICAgICAgcHJvZHVjdC48L2xpPgorICAgICAgIDxsaT5EdXJpbmcgdGhlIFByb3Zpc2lvbmluZyBQcm9jZXNzLCB0aGUgUHJvdmlzaW9uaW5nIFRlY2hub2xvZ3kgbWF5IGNhdXNlIHRoaXJkIHBhcnR5IEluc3RhbGxhYmxlIFNvZnR3YXJlIG9yIGEgcG9ydGlvbiB0aGVyZW9mIHRvIGJlCisgICAgICAgYWNjZXNzZWQgYW5kIGNvcGllZCB0byB0aGUgVGFyZ2V0IE1hY2hpbmUuPC9saT4KKyAgICAgICA8bGk+UHVyc3VhbnQgdG8gdGhlIFNwZWNpZmljYXRpb24sIHlvdSB3aWxsIHByb3ZpZGUgdG8gdGhlIHVzZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIHRoYXQgZ292ZXJuIHRoZSB1c2Ugb2YgdGhlIEluc3RhbGxhYmxlCisgICAgICAgU29mdHdhcmUgKCZxdW90O0luc3RhbGxhYmxlIFNvZnR3YXJlIEFncmVlbWVudCZxdW90OykgYW5kIHN1Y2ggSW5zdGFsbGFibGUgU29mdHdhcmUgQWdyZWVtZW50IHNoYWxsIGJlIGFjY2Vzc2VkIGZyb20gdGhlIFRhcmdldAorICAgICAgIE1hY2hpbmUgaW4gYWNjb3JkYW5jZSB3aXRoIHRoZSBTcGVjaWZpY2F0aW9uLiBTdWNoIEluc3RhbGxhYmxlIFNvZnR3YXJlIEFncmVlbWVudCBtdXN0IGluZm9ybSB0aGUgdXNlciBvZiB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgdGhhdCBnb3Zlcm4KKyAgICAgICB0aGUgSW5zdGFsbGFibGUgU29mdHdhcmUgYW5kIG11c3Qgc29saWNpdCBhY2NlcHRhbmNlIGJ5IHRoZSBlbmQgdXNlciBpbiB0aGUgbWFubmVyIHByZXNjcmliZWQgaW4gc3VjaCBJbnN0YWxsYWJsZSBTb2Z0d2FyZSBBZ3JlZW1lbnQuIFVwb24gc3VjaAorICAgICAgIGluZGljYXRpb24gb2YgYWdyZWVtZW50IGJ5IHRoZSB1c2VyLCB0aGUgcHJvdmlzaW9uaW5nIFRlY2hub2xvZ3kgd2lsbCBjb21wbGV0ZSBpbnN0YWxsYXRpb24gb2YgdGhlIEluc3RhbGxhYmxlIFNvZnR3YXJlLjwvbGk+Cis8L29sPgorCis8aDM+Q3J5cHRvZ3JhcGh5PC9oMz4KKworPHA+Q29udGVudCBtYXkgY29udGFpbiBlbmNyeXB0aW9uIHNvZnR3YXJlLiBUaGUgY291bnRyeSBpbiB3aGljaCB5b3UgYXJlIGN1cnJlbnRseSBtYXkgaGF2ZSByZXN0cmljdGlvbnMgb24gdGhlIGltcG9ydCwgcG9zc2Vzc2lvbiwgYW5kIHVzZSwgYW5kL29yIHJlLWV4cG9ydCB0bworICAgYW5vdGhlciBjb3VudHJ5LCBvZiBlbmNyeXB0aW9uIHNvZnR3YXJlLiBCRUZPUkUgdXNpbmcgYW55IGVuY3J5cHRpb24gc29mdHdhcmUsIHBsZWFzZSBjaGVjayB0aGUgY291bnRyeSdzIGxhd3MsIHJlZ3VsYXRpb25zIGFuZCBwb2xpY2llcyBjb25jZXJuaW5nIHRoZSBpbXBvcnQsCisgICBwb3NzZXNzaW9uLCBvciB1c2UsIGFuZCByZS1leHBvcnQgb2YgZW5jcnlwdGlvbiBzb2Z0d2FyZSwgdG8gc2VlIGlmIHRoaXMgaXMgcGVybWl0dGVkLjwvcD4KKworPHA+PHNtYWxsPkphdmEgYW5kIGFsbCBKYXZhLWJhc2VkIHRyYWRlbWFya3MgYXJlIHRyYWRlbWFya3Mgb2YgT3JhY2xlIENvcnBvcmF0aW9uIGluIHRoZSBVbml0ZWQgU3RhdGVzLCBvdGhlciBjb3VudHJpZXMsIG9yIGJvdGguPC9zbWFsbD48L3A+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS5zdGVtLmludGVybmFsLmRhdGEuZmVhdHVyZS8ucHJvamVjdCBiL2ZlYXR1cmVzL29yZy5lY2xpcHNlLnN0ZW0uaW50ZXJuYWwuZGF0YS5mZWF0dXJlLy5wcm9qZWN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI4ZjFlZmIKLS0tIC9kZXYvbnVsbAorKysgYi9mZWF0dXJlcy9vcmcuZWNsaXBzZS5zdGVtLmludGVybmFsLmRhdGEuZmVhdHVyZS8ucHJvamVjdApAQCAtMCwwICsxLDE3IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPHByb2plY3REZXNjcmlwdGlvbj4KKwk8bmFtZT5vcmcuZWNsaXBzZS5zdGVtLmludGVybmFsLmRhdGEuZmVhdHVyZTwvbmFtZT4KKwk8Y29tbWVudD48L2NvbW1lbnQ+CisJPHByb2plY3RzPgorCTwvcHJvamVjdHM+CisJPGJ1aWxkU3BlYz4KKwkJPGJ1aWxkQ29tbWFuZD4KKwkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5GZWF0dXJlQnVpbGRlcjwvbmFtZT4KKwkJCTxhcmd1bWVudHM+CisJCQk8L2FyZ3VtZW50cz4KKwkJPC9idWlsZENvbW1hbmQ+CisJPC9idWlsZFNwZWM+CisJPG5hdHVyZXM+CisJCTxuYXR1cmU+b3JnLmVjbGlwc2UucGRlLkZlYXR1cmVOYXR1cmU8L25hdHVyZT4KKwk8L25hdHVyZXM+Cis8L3Byb2plY3REZXNjcmlwdGlvbj4KZGlmZiAtLWdpdCBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLnN0ZW0uaW50ZXJuYWwuZGF0YS5mZWF0dXJlL2J1aWxkLnByb3BlcnRpZXMgYi9mZWF0dXJlcy9vcmcuZWNsaXBzZS5zdGVtLmludGVybmFsLmRhdGEuZmVhdHVyZS9idWlsZC5wcm9wZXJ0aWVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI3NGFmODYKLS0tIC9kZXYvbnVsbAorKysgYi9mZWF0dXJlcy9vcmcuZWNsaXBzZS5zdGVtLmludGVybmFsLmRhdGEuZmVhdHVyZS9idWlsZC5wcm9wZXJ0aWVzCkBAIC0wLDAgKzEsNCBAQAorYmluLmluY2x1ZGVzID0gZmVhdHVyZS54bWwsXAorICAgICAgICAgICAgICAgZmVhdHVyZS5wcm9wZXJ0aWVzLFwKKyAgICAgICAgICAgICAgIGVwbC12MTAuaHRtbCxcCisgICAgICAgICAgICAgICBsaWNlbnNlLmh0bWwKZGlmZiAtLWdpdCBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLnN0ZW0uaW50ZXJuYWwuZGF0YS5mZWF0dXJlL2VwbC12MTAuaHRtbCBiL2ZlYXR1cmVzL29yZy5lY2xpcHNlLnN0ZW0uaW50ZXJuYWwuZGF0YS5mZWF0dXJlL2VwbC12MTAuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZDRiMTk2Ci0tLSAvZGV2L251bGwKKysrIGIvZmVhdHVyZXMvb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcm5hbC5kYXRhLmZlYXR1cmUvZXBsLXYxMC5odG1sCkBAIC0wLDAgKzEsMzI4IEBACis8aHRtbCB4bWxuczpvPSJ1cm46c2NoZW1hcy1taWNyb3NvZnQtY29tOm9mZmljZTpvZmZpY2UiCit4bWxuczp3PSJ1cm46c2NoZW1hcy1taWNyb3NvZnQtY29tOm9mZmljZTp3b3JkIgoreG1sbnM9Imh0dHA6Ly93d3cudzMub3JnL1RSL1JFQy1odG1sNDAiPgorCis8aGVhZD4KKzxtZXRhIGh0dHAtZXF1aXY9Q29udGVudC1UeXBlIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD13aW5kb3dzLTEyNTIiPgorPG1ldGEgbmFtZT1Qcm9nSWQgY29udGVudD1Xb3JkLkRvY3VtZW50PgorPG1ldGEgbmFtZT1HZW5lcmF0b3IgY29udGVudD0iTWljcm9zb2Z0IFdvcmQgOSI+Cis8bWV0YSBuYW1lPU9yaWdpbmF0b3IgY29udGVudD0iTWljcm9zb2Z0IFdvcmQgOSI+Cis8bGluayByZWw9RmlsZS1MaXN0CitocmVmPSIuL0VjbGlwc2UlMjBFUEwlMjAyMDAzXzExXzEwJTIwRmluYWxfZmlsZXMvZmlsZWxpc3QueG1sIj4KKzx0aXRsZT5FY2xpcHNlIFB1YmxpYyBMaWNlbnNlIC0gVmVyc2lvbiAxLjA8L3RpdGxlPgorPCEtLVtpZiBndGUgbXNvIDldPjx4bWw+CisgPG86RG9jdW1lbnRQcm9wZXJ0aWVzPgorICA8bzpSZXZpc2lvbj4yPC9vOlJldmlzaW9uPgorICA8bzpUb3RhbFRpbWU+MzwvbzpUb3RhbFRpbWU+CisgIDxvOkNyZWF0ZWQ+MjAwNC0wMy0wNVQyMzowMzowMFo8L286Q3JlYXRlZD4KKyAgPG86TGFzdFNhdmVkPjIwMDQtMDMtMDVUMjM6MDM6MDBaPC9vOkxhc3RTYXZlZD4KKyAgPG86UGFnZXM+NDwvbzpQYWdlcz4KKyAgPG86V29yZHM+MTYyNjwvbzpXb3Jkcz4KKyAgPG86Q2hhcmFjdGVycz45MjcwPC9vOkNoYXJhY3RlcnM+CisgICA8bzpMaW5lcz43NzwvbzpMaW5lcz4KKyAgPG86UGFyYWdyYXBocz4xODwvbzpQYXJhZ3JhcGhzPgorICA8bzpDaGFyYWN0ZXJzV2l0aFNwYWNlcz4xMTM4NDwvbzpDaGFyYWN0ZXJzV2l0aFNwYWNlcz4KKyAgPG86VmVyc2lvbj45LjQ0MDI8L286VmVyc2lvbj4KKyA8L286RG9jdW1lbnRQcm9wZXJ0aWVzPgorPC94bWw+PCFbZW5kaWZdLS0+PCEtLVtpZiBndGUgbXNvIDldPjx4bWw+CisgPHc6V29yZERvY3VtZW50PgorICA8dzpUcmFja1JldmlzaW9ucy8+CisgPC93OldvcmREb2N1bWVudD4KKzwveG1sPjwhW2VuZGlmXS0tPgorPHN0eWxlPgorPCEtLQorIC8qIEZvbnQgRGVmaW5pdGlvbnMgKi8KK0Bmb250LWZhY2UKKwl7Zm9udC1mYW1pbHk6VGFob21hOworCXBhbm9zZS0xOjIgMTEgNiA0IDMgNSA0IDQgMiA0OworCW1zby1mb250LWNoYXJzZXQ6MDsKKwltc28tZ2VuZXJpYy1mb250LWZhbWlseTpzd2lzczsKKwltc28tZm9udC1waXRjaDp2YXJpYWJsZTsKKwltc28tZm9udC1zaWduYXR1cmU6NTUzNjc5NDk1IC0yMTQ3NDgzNjQ4IDggMCA2NjA0NyAwO30KKyAvKiBTdHlsZSBEZWZpbml0aW9ucyAqLworcC5Nc29Ob3JtYWwsIGxpLk1zb05vcm1hbCwgZGl2Lk1zb05vcm1hbAorCXttc28tc3R5bGUtcGFyZW50OiIiOworCW1hcmdpbjowaW47CisJbWFyZ2luLWJvdHRvbTouMDAwMXB0OworCW1zby1wYWdpbmF0aW9uOndpZG93LW9ycGhhbjsKKwlmb250LXNpemU6MTIuMHB0OworCWZvbnQtZmFtaWx5OiJUaW1lcyBOZXcgUm9tYW4iOworCW1zby1mYXJlYXN0LWZvbnQtZmFtaWx5OiJUaW1lcyBOZXcgUm9tYW4iO30KK3AKKwl7bWFyZ2luLXJpZ2h0OjBpbjsKKwltc28tbWFyZ2luLXRvcC1hbHQ6YXV0bzsKKwltc28tbWFyZ2luLWJvdHRvbS1hbHQ6YXV0bzsKKwltYXJnaW4tbGVmdDowaW47CisJbXNvLXBhZ2luYXRpb246d2lkb3ctb3JwaGFuOworCWZvbnQtc2l6ZToxMi4wcHQ7CisJZm9udC1mYW1pbHk6IlRpbWVzIE5ldyBSb21hbiI7CisJbXNvLWZhcmVhc3QtZm9udC1mYW1pbHk6IlRpbWVzIE5ldyBSb21hbiI7fQorcC5CYWxsb29uVGV4dCwgbGkuQmFsbG9vblRleHQsIGRpdi5CYWxsb29uVGV4dAorCXttc28tc3R5bGUtbmFtZToiQmFsbG9vbiBUZXh0IjsKKwltYXJnaW46MGluOworCW1hcmdpbi1ib3R0b206LjAwMDFwdDsKKwltc28tcGFnaW5hdGlvbjp3aWRvdy1vcnBoYW47CisJZm9udC1zaXplOjguMHB0OworCWZvbnQtZmFtaWx5OlRhaG9tYTsKKwltc28tZmFyZWFzdC1mb250LWZhbWlseToiVGltZXMgTmV3IFJvbWFuIjt9CitAcGFnZSBTZWN0aW9uMQorCXtzaXplOjguNWluIDExLjBpbjsKKwltYXJnaW46MS4waW4gMS4yNWluIDEuMGluIDEuMjVpbjsKKwltc28taGVhZGVyLW1hcmdpbjouNWluOworCW1zby1mb290ZXItbWFyZ2luOi41aW47CisJbXNvLXBhcGVyLXNvdXJjZTowO30KK2Rpdi5TZWN0aW9uMQorCXtwYWdlOlNlY3Rpb24xO30KKy0tPgorPC9zdHlsZT4KKzwvaGVhZD4KKworPGJvZHkgbGFuZz1FTi1VUyBzdHlsZT0ndGFiLWludGVydmFsOi41aW4nPgorCis8ZGl2IGNsYXNzPVNlY3Rpb24xPgorCis8cCBhbGlnbj1jZW50ZXIgc3R5bGU9J3RleHQtYWxpZ246Y2VudGVyJz48Yj5FY2xpcHNlIFB1YmxpYyBMaWNlbnNlIC0gdiAxLjA8L2I+Cis8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5USEUgQUNDT01QQU5ZSU5HIFBST0dSQU0gSVMgUFJPVklERUQgVU5ERVIKK1RIRSBURVJNUyBPRiBUSElTIEVDTElQU0UgUFVCTElDIExJQ0VOU0UgKCZxdW90O0FHUkVFTUVOVCZxdW90OykuIEFOWSBVU0UsCitSRVBST0RVQ1RJT04gT1IgRElTVFJJQlVUSU9OIE9GIFRIRSBQUk9HUkFNIENPTlNUSVRVVEVTIFJFQ0lQSUVOVCdTIEFDQ0VQVEFOQ0UKK09GIFRISVMgQUdSRUVNRU5ULjwvc3Bhbj4gPC9wPgorCis8cD48Yj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+MS4gREVGSU5JVElPTlM8L3NwYW4+PC9iPiA8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4mcXVvdDtDb250cmlidXRpb24mcXVvdDsgbWVhbnM6PC9zcGFuPiA8L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmEpCitpbiB0aGUgY2FzZSBvZiB0aGUgaW5pdGlhbCBDb250cmlidXRvciwgdGhlIGluaXRpYWwgY29kZSBhbmQgZG9jdW1lbnRhdGlvbgorZGlzdHJpYnV0ZWQgdW5kZXIgdGhpcyBBZ3JlZW1lbnQsIGFuZDxiciBjbGVhcj1sZWZ0PgorYikgaW4gdGhlIGNhc2Ugb2YgZWFjaCBzdWJzZXF1ZW50IENvbnRyaWJ1dG9yOjwvc3Bhbj48L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmkpCitjaGFuZ2VzIHRvIHRoZSBQcm9ncmFtLCBhbmQ8L3NwYW4+PC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5paSkKK2FkZGl0aW9ucyB0byB0aGUgUHJvZ3JhbTs8L3NwYW4+PC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz53aGVyZQorc3VjaCBjaGFuZ2VzIGFuZC9vciBhZGRpdGlvbnMgdG8gdGhlIFByb2dyYW0gb3JpZ2luYXRlIGZyb20gYW5kIGFyZSBkaXN0cmlidXRlZAorYnkgdGhhdCBwYXJ0aWN1bGFyIENvbnRyaWJ1dG9yLiBBIENvbnRyaWJ1dGlvbiAnb3JpZ2luYXRlcycgZnJvbSBhIENvbnRyaWJ1dG9yCitpZiBpdCB3YXMgYWRkZWQgdG8gdGhlIFByb2dyYW0gYnkgc3VjaCBDb250cmlidXRvciBpdHNlbGYgb3IgYW55b25lIGFjdGluZyBvbgorc3VjaCBDb250cmlidXRvcidzIGJlaGFsZi4gQ29udHJpYnV0aW9ucyBkbyBub3QgaW5jbHVkZSBhZGRpdGlvbnMgdG8gdGhlCitQcm9ncmFtIHdoaWNoOiAoaSkgYXJlIHNlcGFyYXRlIG1vZHVsZXMgb2Ygc29mdHdhcmUgZGlzdHJpYnV0ZWQgaW4gY29uanVuY3Rpb24KK3dpdGggdGhlIFByb2dyYW0gdW5kZXIgdGhlaXIgb3duIGxpY2Vuc2UgYWdyZWVtZW50LCBhbmQgKGlpKSBhcmUgbm90IGRlcml2YXRpdmUKK3dvcmtzIG9mIHRoZSBQcm9ncmFtLiA8L3NwYW4+PC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+JnF1b3Q7Q29udHJpYnV0b3ImcXVvdDsgbWVhbnMgYW55IHBlcnNvbiBvcgorZW50aXR5IHRoYXQgZGlzdHJpYnV0ZXMgdGhlIFByb2dyYW0uPC9zcGFuPiA8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4mcXVvdDtMaWNlbnNlZCBQYXRlbnRzICZxdW90OyBtZWFuIHBhdGVudAorY2xhaW1zIGxpY2Vuc2FibGUgYnkgYSBDb250cmlidXRvciB3aGljaCBhcmUgbmVjZXNzYXJpbHkgaW5mcmluZ2VkIGJ5IHRoZSB1c2UKK29yIHNhbGUgb2YgaXRzIENvbnRyaWJ1dGlvbiBhbG9uZSBvciB3aGVuIGNvbWJpbmVkIHdpdGggdGhlIFByb2dyYW0uIDwvc3Bhbj48L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4mcXVvdDtQcm9ncmFtJnF1b3Q7IG1lYW5zIHRoZSBDb250cmlidXRpb25zCitkaXN0cmlidXRlZCBpbiBhY2NvcmRhbmNlIHdpdGggdGhpcyBBZ3JlZW1lbnQuPC9zcGFuPiA8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4mcXVvdDtSZWNpcGllbnQmcXVvdDsgbWVhbnMgYW55b25lIHdobworcmVjZWl2ZXMgdGhlIFByb2dyYW0gdW5kZXIgdGhpcyBBZ3JlZW1lbnQsIGluY2x1ZGluZyBhbGwgQ29udHJpYnV0b3JzLjwvc3Bhbj4gPC9wPgorCis8cD48Yj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+Mi4gR1JBTlQgT0YgUklHSFRTPC9zcGFuPjwvYj4gPC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5hKQorU3ViamVjdCB0byB0aGUgdGVybXMgb2YgdGhpcyBBZ3JlZW1lbnQsIGVhY2ggQ29udHJpYnV0b3IgaGVyZWJ5IGdyYW50cyBSZWNpcGllbnQKK2Egbm9uLWV4Y2x1c2l2ZSwgd29ybGR3aWRlLCByb3lhbHR5LWZyZWUgY29weXJpZ2h0IGxpY2Vuc2UgdG88c3Bhbgorc3R5bGU9J2NvbG9yOnJlZCc+IDwvc3Bhbj5yZXByb2R1Y2UsIHByZXBhcmUgZGVyaXZhdGl2ZSB3b3JrcyBvZiwgcHVibGljbHkKK2Rpc3BsYXksIHB1YmxpY2x5IHBlcmZvcm0sIGRpc3RyaWJ1dGUgYW5kIHN1YmxpY2Vuc2UgdGhlIENvbnRyaWJ1dGlvbiBvZiBzdWNoCitDb250cmlidXRvciwgaWYgYW55LCBhbmQgc3VjaCBkZXJpdmF0aXZlIHdvcmtzLCBpbiBzb3VyY2UgY29kZSBhbmQgb2JqZWN0IGNvZGUKK2Zvcm0uPC9zcGFuPjwvcD4KKworPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YikKK1N1YmplY3QgdG8gdGhlIHRlcm1zIG9mIHRoaXMgQWdyZWVtZW50LCBlYWNoIENvbnRyaWJ1dG9yIGhlcmVieSBncmFudHMKK1JlY2lwaWVudCBhIG5vbi1leGNsdXNpdmUsIHdvcmxkd2lkZSw8c3BhbiBzdHlsZT0nY29sb3I6Z3JlZW4nPiA8L3NwYW4+cm95YWx0eS1mcmVlCitwYXRlbnQgbGljZW5zZSB1bmRlciBMaWNlbnNlZCBQYXRlbnRzIHRvIG1ha2UsIHVzZSwgc2VsbCwgb2ZmZXIgdG8gc2VsbCwgaW1wb3J0CithbmQgb3RoZXJ3aXNlIHRyYW5zZmVyIHRoZSBDb250cmlidXRpb24gb2Ygc3VjaCBDb250cmlidXRvciwgaWYgYW55LCBpbiBzb3VyY2UKK2NvZGUgYW5kIG9iamVjdCBjb2RlIGZvcm0uIFRoaXMgcGF0ZW50IGxpY2Vuc2Ugc2hhbGwgYXBwbHkgdG8gdGhlIGNvbWJpbmF0aW9uCitvZiB0aGUgQ29udHJpYnV0aW9uIGFuZCB0aGUgUHJvZ3JhbSBpZiwgYXQgdGhlIHRpbWUgdGhlIENvbnRyaWJ1dGlvbiBpcyBhZGRlZAorYnkgdGhlIENvbnRyaWJ1dG9yLCBzdWNoIGFkZGl0aW9uIG9mIHRoZSBDb250cmlidXRpb24gY2F1c2VzIHN1Y2ggY29tYmluYXRpb24KK3RvIGJlIGNvdmVyZWQgYnkgdGhlIExpY2Vuc2VkIFBhdGVudHMuIFRoZSBwYXRlbnQgbGljZW5zZSBzaGFsbCBub3QgYXBwbHkgdG8KK2FueSBvdGhlciBjb21iaW5hdGlvbnMgd2hpY2ggaW5jbHVkZSB0aGUgQ29udHJpYnV0aW9uLiBObyBoYXJkd2FyZSBwZXIgc2UgaXMKK2xpY2Vuc2VkIGhlcmV1bmRlci4gPC9zcGFuPjwvcD4KKworPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YykKK1JlY2lwaWVudCB1bmRlcnN0YW5kcyB0aGF0IGFsdGhvdWdoIGVhY2ggQ29udHJpYnV0b3IgZ3JhbnRzIHRoZSBsaWNlbnNlcyB0byBpdHMKK0NvbnRyaWJ1dGlvbnMgc2V0IGZvcnRoIGhlcmVpbiwgbm8gYXNzdXJhbmNlcyBhcmUgcHJvdmlkZWQgYnkgYW55IENvbnRyaWJ1dG9yCit0aGF0IHRoZSBQcm9ncmFtIGRvZXMgbm90IGluZnJpbmdlIHRoZSBwYXRlbnQgb3Igb3RoZXIgaW50ZWxsZWN0dWFsIHByb3BlcnR5CityaWdodHMgb2YgYW55IG90aGVyIGVudGl0eS4gRWFjaCBDb250cmlidXRvciBkaXNjbGFpbXMgYW55IGxpYWJpbGl0eSB0byBSZWNpcGllbnQKK2ZvciBjbGFpbXMgYnJvdWdodCBieSBhbnkgb3RoZXIgZW50aXR5IGJhc2VkIG9uIGluZnJpbmdlbWVudCBvZiBpbnRlbGxlY3R1YWwKK3Byb3BlcnR5IHJpZ2h0cyBvciBvdGhlcndpc2UuIEFzIGEgY29uZGl0aW9uIHRvIGV4ZXJjaXNpbmcgdGhlIHJpZ2h0cyBhbmQKK2xpY2Vuc2VzIGdyYW50ZWQgaGVyZXVuZGVyLCBlYWNoIFJlY2lwaWVudCBoZXJlYnkgYXNzdW1lcyBzb2xlIHJlc3BvbnNpYmlsaXR5Cit0byBzZWN1cmUgYW55IG90aGVyIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgbmVlZGVkLCBpZiBhbnkuIEZvciBleGFtcGxlLAoraWYgYSB0aGlyZCBwYXJ0eSBwYXRlbnQgbGljZW5zZSBpcyByZXF1aXJlZCB0byBhbGxvdyBSZWNpcGllbnQgdG8gZGlzdHJpYnV0ZQordGhlIFByb2dyYW0sIGl0IGlzIFJlY2lwaWVudCdzIHJlc3BvbnNpYmlsaXR5IHRvIGFjcXVpcmUgdGhhdCBsaWNlbnNlIGJlZm9yZQorZGlzdHJpYnV0aW5nIHRoZSBQcm9ncmFtLjwvc3Bhbj48L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmQpCitFYWNoIENvbnRyaWJ1dG9yIHJlcHJlc2VudHMgdGhhdCB0byBpdHMga25vd2xlZGdlIGl0IGhhcyBzdWZmaWNpZW50IGNvcHlyaWdodAorcmlnaHRzIGluIGl0cyBDb250cmlidXRpb24sIGlmIGFueSwgdG8gZ3JhbnQgdGhlIGNvcHlyaWdodCBsaWNlbnNlIHNldCBmb3J0aCBpbgordGhpcyBBZ3JlZW1lbnQuIDwvc3Bhbj48L3A+CisKKzxwPjxiPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4zLiBSRVFVSVJFTUVOVFM8L3NwYW4+PC9iPiA8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5BIENvbnRyaWJ1dG9yIG1heSBjaG9vc2UgdG8gZGlzdHJpYnV0ZSB0aGUKK1Byb2dyYW0gaW4gb2JqZWN0IGNvZGUgZm9ybSB1bmRlciBpdHMgb3duIGxpY2Vuc2UgYWdyZWVtZW50LCBwcm92aWRlZCB0aGF0Ojwvc3Bhbj4KKzwvcD4KKworPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YSkKK2l0IGNvbXBsaWVzIHdpdGggdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoaXMgQWdyZWVtZW50OyBhbmQ8L3NwYW4+PC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5iKQoraXRzIGxpY2Vuc2UgYWdyZWVtZW50Ojwvc3Bhbj48L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmkpCitlZmZlY3RpdmVseSBkaXNjbGFpbXMgb24gYmVoYWxmIG9mIGFsbCBDb250cmlidXRvcnMgYWxsIHdhcnJhbnRpZXMgYW5kCitjb25kaXRpb25zLCBleHByZXNzIGFuZCBpbXBsaWVkLCBpbmNsdWRpbmcgd2FycmFudGllcyBvciBjb25kaXRpb25zIG9mIHRpdGxlCithbmQgbm9uLWluZnJpbmdlbWVudCwgYW5kIGltcGxpZWQgd2FycmFudGllcyBvciBjb25kaXRpb25zIG9mIG1lcmNoYW50YWJpbGl0eQorYW5kIGZpdG5lc3MgZm9yIGEgcGFydGljdWxhciBwdXJwb3NlOyA8L3NwYW4+PC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5paSkKK2VmZmVjdGl2ZWx5IGV4Y2x1ZGVzIG9uIGJlaGFsZiBvZiBhbGwgQ29udHJpYnV0b3JzIGFsbCBsaWFiaWxpdHkgZm9yIGRhbWFnZXMsCitpbmNsdWRpbmcgZGlyZWN0LCBpbmRpcmVjdCwgc3BlY2lhbCwgaW5jaWRlbnRhbCBhbmQgY29uc2VxdWVudGlhbCBkYW1hZ2VzLCBzdWNoCithcyBsb3N0IHByb2ZpdHM7IDwvc3Bhbj48L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmlpaSkKK3N0YXRlcyB0aGF0IGFueSBwcm92aXNpb25zIHdoaWNoIGRpZmZlciBmcm9tIHRoaXMgQWdyZWVtZW50IGFyZSBvZmZlcmVkIGJ5IHRoYXQKK0NvbnRyaWJ1dG9yIGFsb25lIGFuZCBub3QgYnkgYW55IG90aGVyIHBhcnR5OyBhbmQ8L3NwYW4+PC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5pdikKK3N0YXRlcyB0aGF0IHNvdXJjZSBjb2RlIGZvciB0aGUgUHJvZ3JhbSBpcyBhdmFpbGFibGUgZnJvbSBzdWNoIENvbnRyaWJ1dG9yLCBhbmQKK2luZm9ybXMgbGljZW5zZWVzIGhvdyB0byBvYnRhaW4gaXQgaW4gYSByZWFzb25hYmxlIG1hbm5lciBvbiBvciB0aHJvdWdoIGEKK21lZGl1bSBjdXN0b21hcmlseSB1c2VkIGZvciBzb2Z0d2FyZSBleGNoYW5nZS48c3BhbiBzdHlsZT0nY29sb3I6Ymx1ZSc+IDwvc3Bhbj48L3NwYW4+PC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+V2hlbiB0aGUgUHJvZ3JhbSBpcyBtYWRlIGF2YWlsYWJsZSBpbiBzb3VyY2UKK2NvZGUgZm9ybTo8L3NwYW4+IDwvcD4KKworPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YSkKK2l0IG11c3QgYmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhpcyBBZ3JlZW1lbnQ7IGFuZCA8L3NwYW4+PC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5iKSBhCitjb3B5IG9mIHRoaXMgQWdyZWVtZW50IG11c3QgYmUgaW5jbHVkZWQgd2l0aCBlYWNoIGNvcHkgb2YgdGhlIFByb2dyYW0uIDwvc3Bhbj48L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5Db250cmlidXRvcnMgbWF5IG5vdCByZW1vdmUgb3IgYWx0ZXIgYW55Citjb3B5cmlnaHQgbm90aWNlcyBjb250YWluZWQgd2l0aGluIHRoZSBQcm9ncmFtLiA8L3NwYW4+PC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+RWFjaCBDb250cmlidXRvciBtdXN0IGlkZW50aWZ5IGl0c2VsZiBhcyB0aGUKK29yaWdpbmF0b3Igb2YgaXRzIENvbnRyaWJ1dGlvbiwgaWYgYW55LCBpbiBhIG1hbm5lciB0aGF0IHJlYXNvbmFibHkgYWxsb3dzCitzdWJzZXF1ZW50IFJlY2lwaWVudHMgdG8gaWRlbnRpZnkgdGhlIG9yaWdpbmF0b3Igb2YgdGhlIENvbnRyaWJ1dGlvbi4gPC9zcGFuPjwvcD4KKworPHA+PGI+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPjQuIENPTU1FUkNJQUwgRElTVFJJQlVUSU9OPC9zcGFuPjwvYj4gPC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+Q29tbWVyY2lhbCBkaXN0cmlidXRvcnMgb2Ygc29mdHdhcmUgbWF5CithY2NlcHQgY2VydGFpbiByZXNwb25zaWJpbGl0aWVzIHdpdGggcmVzcGVjdCB0byBlbmQgdXNlcnMsIGJ1c2luZXNzIHBhcnRuZXJzCithbmQgdGhlIGxpa2UuIFdoaWxlIHRoaXMgbGljZW5zZSBpcyBpbnRlbmRlZCB0byBmYWNpbGl0YXRlIHRoZSBjb21tZXJjaWFsIHVzZQorb2YgdGhlIFByb2dyYW0sIHRoZSBDb250cmlidXRvciB3aG8gaW5jbHVkZXMgdGhlIFByb2dyYW0gaW4gYSBjb21tZXJjaWFsCitwcm9kdWN0IG9mZmVyaW5nIHNob3VsZCBkbyBzbyBpbiBhIG1hbm5lciB3aGljaCBkb2VzIG5vdCBjcmVhdGUgcG90ZW50aWFsCitsaWFiaWxpdHkgZm9yIG90aGVyIENvbnRyaWJ1dG9ycy4gVGhlcmVmb3JlLCBpZiBhIENvbnRyaWJ1dG9yIGluY2x1ZGVzIHRoZQorUHJvZ3JhbSBpbiBhIGNvbW1lcmNpYWwgcHJvZHVjdCBvZmZlcmluZywgc3VjaCBDb250cmlidXRvciAoJnF1b3Q7Q29tbWVyY2lhbAorQ29udHJpYnV0b3ImcXVvdDspIGhlcmVieSBhZ3JlZXMgdG8gZGVmZW5kIGFuZCBpbmRlbW5pZnkgZXZlcnkgb3RoZXIKK0NvbnRyaWJ1dG9yICgmcXVvdDtJbmRlbW5pZmllZCBDb250cmlidXRvciZxdW90OykgYWdhaW5zdCBhbnkgbG9zc2VzLCBkYW1hZ2VzIGFuZAorY29zdHMgKGNvbGxlY3RpdmVseSAmcXVvdDtMb3NzZXMmcXVvdDspIGFyaXNpbmcgZnJvbSBjbGFpbXMsIGxhd3N1aXRzIGFuZCBvdGhlcgorbGVnYWwgYWN0aW9ucyBicm91Z2h0IGJ5IGEgdGhpcmQgcGFydHkgYWdhaW5zdCB0aGUgSW5kZW1uaWZpZWQgQ29udHJpYnV0b3IgdG8KK3RoZSBleHRlbnQgY2F1c2VkIGJ5IHRoZSBhY3RzIG9yIG9taXNzaW9ucyBvZiBzdWNoIENvbW1lcmNpYWwgQ29udHJpYnV0b3IgaW4KK2Nvbm5lY3Rpb24gd2l0aCBpdHMgZGlzdHJpYnV0aW9uIG9mIHRoZSBQcm9ncmFtIGluIGEgY29tbWVyY2lhbCBwcm9kdWN0CitvZmZlcmluZy4gVGhlIG9ibGlnYXRpb25zIGluIHRoaXMgc2VjdGlvbiBkbyBub3QgYXBwbHkgdG8gYW55IGNsYWltcyBvciBMb3NzZXMKK3JlbGF0aW5nIHRvIGFueSBhY3R1YWwgb3IgYWxsZWdlZCBpbnRlbGxlY3R1YWwgcHJvcGVydHkgaW5mcmluZ2VtZW50LiBJbiBvcmRlcgordG8gcXVhbGlmeSwgYW4gSW5kZW1uaWZpZWQgQ29udHJpYnV0b3IgbXVzdDogYSkgcHJvbXB0bHkgbm90aWZ5IHRoZSBDb21tZXJjaWFsCitDb250cmlidXRvciBpbiB3cml0aW5nIG9mIHN1Y2ggY2xhaW0sIGFuZCBiKSBhbGxvdyB0aGUgQ29tbWVyY2lhbCBDb250cmlidXRvcgordG8gY29udHJvbCwgYW5kIGNvb3BlcmF0ZSB3aXRoIHRoZSBDb21tZXJjaWFsIENvbnRyaWJ1dG9yIGluLCB0aGUgZGVmZW5zZSBhbmQKK2FueSByZWxhdGVkIHNldHRsZW1lbnQgbmVnb3RpYXRpb25zLiBUaGUgSW5kZW1uaWZpZWQgQ29udHJpYnV0b3IgbWF5IHBhcnRpY2lwYXRlCitpbiBhbnkgc3VjaCBjbGFpbSBhdCBpdHMgb3duIGV4cGVuc2UuPC9zcGFuPiA8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5Gb3IgZXhhbXBsZSwgYSBDb250cmlidXRvciBtaWdodCBpbmNsdWRlIHRoZQorUHJvZ3JhbSBpbiBhIGNvbW1lcmNpYWwgcHJvZHVjdCBvZmZlcmluZywgUHJvZHVjdCBYLiBUaGF0IENvbnRyaWJ1dG9yIGlzIHRoZW4gYQorQ29tbWVyY2lhbCBDb250cmlidXRvci4gSWYgdGhhdCBDb21tZXJjaWFsIENvbnRyaWJ1dG9yIHRoZW4gbWFrZXMgcGVyZm9ybWFuY2UKK2NsYWltcywgb3Igb2ZmZXJzIHdhcnJhbnRpZXMgcmVsYXRlZCB0byBQcm9kdWN0IFgsIHRob3NlIHBlcmZvcm1hbmNlIGNsYWltcyBhbmQKK3dhcnJhbnRpZXMgYXJlIHN1Y2ggQ29tbWVyY2lhbCBDb250cmlidXRvcidzIHJlc3BvbnNpYmlsaXR5IGFsb25lLiBVbmRlciB0aGlzCitzZWN0aW9uLCB0aGUgQ29tbWVyY2lhbCBDb250cmlidXRvciB3b3VsZCBoYXZlIHRvIGRlZmVuZCBjbGFpbXMgYWdhaW5zdCB0aGUKK290aGVyIENvbnRyaWJ1dG9ycyByZWxhdGVkIHRvIHRob3NlIHBlcmZvcm1hbmNlIGNsYWltcyBhbmQgd2FycmFudGllcywgYW5kIGlmIGEKK2NvdXJ0IHJlcXVpcmVzIGFueSBvdGhlciBDb250cmlidXRvciB0byBwYXkgYW55IGRhbWFnZXMgYXMgYSByZXN1bHQsIHRoZQorQ29tbWVyY2lhbCBDb250cmlidXRvciBtdXN0IHBheSB0aG9zZSBkYW1hZ2VzLjwvc3Bhbj4gPC9wPgorCis8cD48Yj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+NS4gTk8gV0FSUkFOVFk8L3NwYW4+PC9iPiA8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5FWENFUFQgQVMgRVhQUkVTU0xZIFNFVCBGT1JUSCBJTiBUSElTCitBR1JFRU1FTlQsIFRIRSBQUk9HUkFNIElTIFBST1ZJREVEIE9OIEFOICZxdW90O0FTIElTJnF1b3Q7IEJBU0lTLCBXSVRIT1VUCitXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIEVJVEhFUiBFWFBSRVNTIE9SIElNUExJRUQgSU5DTFVESU5HLAorV0lUSE9VVCBMSU1JVEFUSU9OLCBBTlkgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIFRJVExFLCBOT04tSU5GUklOR0VNRU5ULAorTUVSQ0hBTlRBQklMSVRZIE9SIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBFYWNoIFJlY2lwaWVudCBpcyBzb2xlbHkKK3Jlc3BvbnNpYmxlIGZvciBkZXRlcm1pbmluZyB0aGUgYXBwcm9wcmlhdGVuZXNzIG9mIHVzaW5nIGFuZCBkaXN0cmlidXRpbmcgdGhlCitQcm9ncmFtIGFuZCBhc3N1bWVzIGFsbCByaXNrcyBhc3NvY2lhdGVkIHdpdGggaXRzIGV4ZXJjaXNlIG9mIHJpZ2h0cyB1bmRlciB0aGlzCitBZ3JlZW1lbnQgLCBpbmNsdWRpbmcgYnV0IG5vdCBsaW1pdGVkIHRvIHRoZSByaXNrcyBhbmQgY29zdHMgb2YgcHJvZ3JhbSBlcnJvcnMsCitjb21wbGlhbmNlIHdpdGggYXBwbGljYWJsZSBsYXdzLCBkYW1hZ2UgdG8gb3IgbG9zcyBvZiBkYXRhLCBwcm9ncmFtcyBvcgorZXF1aXBtZW50LCBhbmQgdW5hdmFpbGFiaWxpdHkgb3IgaW50ZXJydXB0aW9uIG9mIG9wZXJhdGlvbnMuIDwvc3Bhbj48L3A+CisKKzxwPjxiPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz42LiBESVNDTEFJTUVSIE9GIExJQUJJTElUWTwvc3Bhbj48L2I+IDwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkVYQ0VQVCBBUyBFWFBSRVNTTFkgU0VUIEZPUlRIIElOIFRISVMKK0FHUkVFTUVOVCwgTkVJVEhFUiBSRUNJUElFTlQgTk9SIEFOWSBDT05UUklCVVRPUlMgU0hBTEwgSEFWRSBBTlkgTElBQklMSVRZIEZPUgorQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisoSU5DTFVESU5HIFdJVEhPVVQgTElNSVRBVElPTiBMT1NUIFBST0ZJVFMpLCBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcKK05FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT1IgRElTVFJJQlVUSU9OIE9GCitUSEUgUFJPR1JBTSBPUiBUSEUgRVhFUkNJU0UgT0YgQU5ZIFJJR0hUUyBHUkFOVEVEIEhFUkVVTkRFUiwgRVZFTiBJRiBBRFZJU0VEIE9GCitUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLjwvc3Bhbj4gPC9wPgorCis8cD48Yj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+Ny4gR0VORVJBTDwvc3Bhbj48L2I+IDwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPklmIGFueSBwcm92aXNpb24gb2YgdGhpcyBBZ3JlZW1lbnQgaXMgaW52YWxpZAorb3IgdW5lbmZvcmNlYWJsZSB1bmRlciBhcHBsaWNhYmxlIGxhdywgaXQgc2hhbGwgbm90IGFmZmVjdCB0aGUgdmFsaWRpdHkgb3IKK2VuZm9yY2VhYmlsaXR5IG9mIHRoZSByZW1haW5kZXIgb2YgdGhlIHRlcm1zIG9mIHRoaXMgQWdyZWVtZW50LCBhbmQgd2l0aG91dAorZnVydGhlciBhY3Rpb24gYnkgdGhlIHBhcnRpZXMgaGVyZXRvLCBzdWNoIHByb3Zpc2lvbiBzaGFsbCBiZSByZWZvcm1lZCB0byB0aGUKK21pbmltdW0gZXh0ZW50IG5lY2Vzc2FyeSB0byBtYWtlIHN1Y2ggcHJvdmlzaW9uIHZhbGlkIGFuZCBlbmZvcmNlYWJsZS48L3NwYW4+IDwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPklmIFJlY2lwaWVudCBpbnN0aXR1dGVzIHBhdGVudCBsaXRpZ2F0aW9uCithZ2FpbnN0IGFueSBlbnRpdHkgKGluY2x1ZGluZyBhIGNyb3NzLWNsYWltIG9yIGNvdW50ZXJjbGFpbSBpbiBhIGxhd3N1aXQpCithbGxlZ2luZyB0aGF0IHRoZSBQcm9ncmFtIGl0c2VsZiAoZXhjbHVkaW5nIGNvbWJpbmF0aW9ucyBvZiB0aGUgUHJvZ3JhbSB3aXRoCitvdGhlciBzb2Z0d2FyZSBvciBoYXJkd2FyZSkgaW5mcmluZ2VzIHN1Y2ggUmVjaXBpZW50J3MgcGF0ZW50KHMpLCB0aGVuIHN1Y2gKK1JlY2lwaWVudCdzIHJpZ2h0cyBncmFudGVkIHVuZGVyIFNlY3Rpb24gMihiKSBzaGFsbCB0ZXJtaW5hdGUgYXMgb2YgdGhlIGRhdGUKK3N1Y2ggbGl0aWdhdGlvbiBpcyBmaWxlZC4gPC9zcGFuPjwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkFsbCBSZWNpcGllbnQncyByaWdodHMgdW5kZXIgdGhpcyBBZ3JlZW1lbnQKK3NoYWxsIHRlcm1pbmF0ZSBpZiBpdCBmYWlscyB0byBjb21wbHkgd2l0aCBhbnkgb2YgdGhlIG1hdGVyaWFsIHRlcm1zIG9yCitjb25kaXRpb25zIG9mIHRoaXMgQWdyZWVtZW50IGFuZCBkb2VzIG5vdCBjdXJlIHN1Y2ggZmFpbHVyZSBpbiBhIHJlYXNvbmFibGUKK3BlcmlvZCBvZiB0aW1lIGFmdGVyIGJlY29taW5nIGF3YXJlIG9mIHN1Y2ggbm9uY29tcGxpYW5jZS4gSWYgYWxsIFJlY2lwaWVudCdzCityaWdodHMgdW5kZXIgdGhpcyBBZ3JlZW1lbnQgdGVybWluYXRlLCBSZWNpcGllbnQgYWdyZWVzIHRvIGNlYXNlIHVzZSBhbmQKK2Rpc3RyaWJ1dGlvbiBvZiB0aGUgUHJvZ3JhbSBhcyBzb29uIGFzIHJlYXNvbmFibHkgcHJhY3RpY2FibGUuIEhvd2V2ZXIsCitSZWNpcGllbnQncyBvYmxpZ2F0aW9ucyB1bmRlciB0aGlzIEFncmVlbWVudCBhbmQgYW55IGxpY2Vuc2VzIGdyYW50ZWQgYnkKK1JlY2lwaWVudCByZWxhdGluZyB0byB0aGUgUHJvZ3JhbSBzaGFsbCBjb250aW51ZSBhbmQgc3Vydml2ZS4gPC9zcGFuPjwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkV2ZXJ5b25lIGlzIHBlcm1pdHRlZCB0byBjb3B5IGFuZCBkaXN0cmlidXRlCitjb3BpZXMgb2YgdGhpcyBBZ3JlZW1lbnQsIGJ1dCBpbiBvcmRlciB0byBhdm9pZCBpbmNvbnNpc3RlbmN5IHRoZSBBZ3JlZW1lbnQgaXMKK2NvcHlyaWdodGVkIGFuZCBtYXkgb25seSBiZSBtb2RpZmllZCBpbiB0aGUgZm9sbG93aW5nIG1hbm5lci4gVGhlIEFncmVlbWVudAorU3Rld2FyZCByZXNlcnZlcyB0aGUgcmlnaHQgdG8gcHVibGlzaCBuZXcgdmVyc2lvbnMgKGluY2x1ZGluZyByZXZpc2lvbnMpIG9mCit0aGlzIEFncmVlbWVudCBmcm9tIHRpbWUgdG8gdGltZS4gTm8gb25lIG90aGVyIHRoYW4gdGhlIEFncmVlbWVudCBTdGV3YXJkIGhhcwordGhlIHJpZ2h0IHRvIG1vZGlmeSB0aGlzIEFncmVlbWVudC4gVGhlIEVjbGlwc2UgRm91bmRhdGlvbiBpcyB0aGUgaW5pdGlhbAorQWdyZWVtZW50IFN0ZXdhcmQuIFRoZSBFY2xpcHNlIEZvdW5kYXRpb24gbWF5IGFzc2lnbiB0aGUgcmVzcG9uc2liaWxpdHkgdG8KK3NlcnZlIGFzIHRoZSBBZ3JlZW1lbnQgU3Rld2FyZCB0byBhIHN1aXRhYmxlIHNlcGFyYXRlIGVudGl0eS4gRWFjaCBuZXcgdmVyc2lvbgorb2YgdGhlIEFncmVlbWVudCB3aWxsIGJlIGdpdmVuIGEgZGlzdGluZ3Vpc2hpbmcgdmVyc2lvbiBudW1iZXIuIFRoZSBQcm9ncmFtCisoaW5jbHVkaW5nIENvbnRyaWJ1dGlvbnMpIG1heSBhbHdheXMgYmUgZGlzdHJpYnV0ZWQgc3ViamVjdCB0byB0aGUgdmVyc2lvbiBvZgordGhlIEFncmVlbWVudCB1bmRlciB3aGljaCBpdCB3YXMgcmVjZWl2ZWQuIEluIGFkZGl0aW9uLCBhZnRlciBhIG5ldyB2ZXJzaW9uIG9mCit0aGUgQWdyZWVtZW50IGlzIHB1Ymxpc2hlZCwgQ29udHJpYnV0b3IgbWF5IGVsZWN0IHRvIGRpc3RyaWJ1dGUgdGhlIFByb2dyYW0KKyhpbmNsdWRpbmcgaXRzIENvbnRyaWJ1dGlvbnMpIHVuZGVyIHRoZSBuZXcgdmVyc2lvbi4gRXhjZXB0IGFzIGV4cHJlc3NseSBzdGF0ZWQKK2luIFNlY3Rpb25zIDIoYSkgYW5kIDIoYikgYWJvdmUsIFJlY2lwaWVudCByZWNlaXZlcyBubyByaWdodHMgb3IgbGljZW5zZXMgdG8KK3RoZSBpbnRlbGxlY3R1YWwgcHJvcGVydHkgb2YgYW55IENvbnRyaWJ1dG9yIHVuZGVyIHRoaXMgQWdyZWVtZW50LCB3aGV0aGVyCitleHByZXNzbHksIGJ5IGltcGxpY2F0aW9uLCBlc3RvcHBlbCBvciBvdGhlcndpc2UuIEFsbCByaWdodHMgaW4gdGhlIFByb2dyYW0gbm90CitleHByZXNzbHkgZ3JhbnRlZCB1bmRlciB0aGlzIEFncmVlbWVudCBhcmUgcmVzZXJ2ZWQuPC9zcGFuPiA8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5UaGlzIEFncmVlbWVudCBpcyBnb3Zlcm5lZCBieSB0aGUgbGF3cyBvZiB0aGUKK1N0YXRlIG9mIE5ldyBZb3JrIGFuZCB0aGUgaW50ZWxsZWN0dWFsIHByb3BlcnR5IGxhd3Mgb2YgdGhlIFVuaXRlZCBTdGF0ZXMgb2YKK0FtZXJpY2EuIE5vIHBhcnR5IHRvIHRoaXMgQWdyZWVtZW50IHdpbGwgYnJpbmcgYSBsZWdhbCBhY3Rpb24gdW5kZXIgdGhpcworQWdyZWVtZW50IG1vcmUgdGhhbiBvbmUgeWVhciBhZnRlciB0aGUgY2F1c2Ugb2YgYWN0aW9uIGFyb3NlLiBFYWNoIHBhcnR5IHdhaXZlcworaXRzIHJpZ2h0cyB0byBhIGp1cnkgdHJpYWwgaW4gYW55IHJlc3VsdGluZyBsaXRpZ2F0aW9uLjwvc3Bhbj4gPC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWw+PCFbaWYgIXN1cHBvcnRFbXB0eVBhcmFzXT4mbmJzcDs8IVtlbmRpZl0+PG86cD48L286cD48L3A+CisKKzwvZGl2PgorCis8L2JvZHk+CisKKzwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS5zdGVtLmludGVybmFsLmRhdGEuZmVhdHVyZS9mZWF0dXJlLnByb3BlcnRpZXMgYi9mZWF0dXJlcy9vcmcuZWNsaXBzZS5zdGVtLmludGVybmFsLmRhdGEuZmVhdHVyZS9mZWF0dXJlLnByb3BlcnRpZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzNkMmVkMwotLS0gL2Rldi9udWxsCisrKyBiL2ZlYXR1cmVzL29yZy5lY2xpcHNlLnN0ZW0uaW50ZXJuYWwuZGF0YS5mZWF0dXJlL2ZlYXR1cmUucHJvcGVydGllcwpAQCAtMCwwICsxLDE3NSBAQAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBDb3B5cmlnaHQgKGMpIDIwMTEgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisjIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisjIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisjIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisjIAorIyBDb250cmlidXRvcnM6CisjICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgZmVhdHVyZS5wcm9wZXJ0aWVzCisjIGNvbnRhaW5zIGV4dGVybmFsaXplZCBzdHJpbmdzIGZvciBmZWF0dXJlLnhtbAorIyAiJWZvbyIgaW4gZmVhdHVyZS54bWwgY29ycmVzcG9uZHMgdG8gdGhlIGtleSAiZm9vIiBpbiB0aGlzIGZpbGUKKyMgamF2YS5pby5Qcm9wZXJ0aWVzIGZpbGUgKElTTyA4ODU5LTEgd2l0aCAiXCIgZXNjYXBlcykKKyMgVGhpcyBmaWxlIHNob3VsZCBiZSB0cmFuc2xhdGVkLgorCisjICJmZWF0dXJlTmFtZSIgcHJvcGVydHkgLSBuYW1lIG9mIHRoZSBmZWF0dXJlCitmZWF0dXJlTmFtZT1TcGF0aW90ZW1wb3JhbCBFcGlkZW1pb2xvZ2ljYWwgTW9kZWxlciBJbnRlcm5hbCBEYXRhIENvbXBpbGVyCisKKyMgInByb3ZpZGVyTmFtZSIgcHJvcGVydHkgLSBuYW1lIG9mIHRoZSBjb21wYW55IHRoYXQgcHJvdmlkZXMgdGhlIGZlYXR1cmUKK3Byb3ZpZGVyTmFtZT1FY2xpcHNlLm9yZworCisjICJ1cGRhdGVTaXRlTmFtZSIgcHJvcGVydHkgLSBsYWJlbCBmb3IgdGhlIHVwZGF0ZSBzaXRlCit1cGRhdGVTaXRlTmFtZT1TVEVNIFVwZGF0ZXMKKworIyAic2Vjb25kYXJ5U2l0ZU5hbWUiIHByb3BlcnR5IC0gbGFiZWwgZm9yIHRoZSBzZWNvbmRhcnkgdXBkYXRlIHNpdGUKKyNzZWNvbmRhcnlVcGRhdGVTaXRlTmFtZT1TVEVNIFVwZGF0ZXMKKworIyAiZGVzY3JpcHRpb24iIHByb3BlcnR5IC0gZGVzY3JpcHRpb24gb2YgdGhlIGZlYXR1cmUKK2Rlc2NyaXB0aW9uPVJhdyBkYXRhIGFuZCBhc3NvY2lhdGVkIHRvb2xzIGZvciBnZW5lcmF0aW5nIFNURU0gXAorYXJ0aWZhY3RzIChncmFwaHMsIG1vZGVscywgc2NlbmFyaW9zLCBldGMpIGZyb20gdGhlIHJhdyBkYXRhIFwKK2ZvciBkaXN0cmlidXRpb24uCisKKyMgImNvcHlyaWdodCIgcHJvcGVydHkgLSB0ZXh0IG9mIHRoZSAiRmVhdHVyZSBVcGRhdGUgQ29weXJpZ2h0IgorY29weXJpZ2h0PVwKK0NvcHlyaWdodCAoYykgMjAwNy0yMDExIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLlxuXAorQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFsc1xuXAorYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wXG5cCit3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdFxuXAoraHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWxcblwKK1xuXAorQ29udHJpYnV0b3JzOlxuXAorICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvblxuCisjIyMjIyMjIyMjIyMjIyMjIGVuZCBvZiBjb3B5cmlnaHQgcHJvcGVydHkgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyMgImxpY2Vuc2VVUkwiIHByb3BlcnR5IC0gVVJMIG9mIHRoZSAiRmVhdHVyZSBMaWNlbnNlIgorIyBkbyBub3QgdHJhbnNsYXRlIHZhbHVlIC0ganVzdCBjaGFuZ2UgdG8gcG9pbnQgdG8gYSBsb2NhbGUtc3BlY2lmaWMgSFRNTCBwYWdlCitsaWNlbnNlVVJMPWxpY2Vuc2UuaHRtbAorCisjICJsaWNlbnNlIiBwcm9wZXJ0eSAtIHRleHQgb2YgdGhlICJGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlIgorIyBzaG91bGQgYmUgcGxhaW4gdGV4dCB2ZXJzaW9uIG9mIGxpY2Vuc2UgYWdyZWVtZW50IHBvaW50ZWQgdG8gYmUgImxpY2Vuc2VVUkwiCitsaWNlbnNlPVwKK0VjbGlwc2UgRm91bmRhdGlvbiBTb2Z0d2FyZSBVc2VyIEFncmVlbWVudFxuXAorQXByaWwgMTQsIDIwMTBcblwKK1xuXAorVXNhZ2UgT2YgQ29udGVudFxuXAorXG5cCitUSEUgRUNMSVBTRSBGT1VOREFUSU9OIE1BS0VTIEFWQUlMQUJMRSBTT0ZUV0FSRSwgRE9DVU1FTlRBVElPTiwgSU5GT1JNQVRJT04gQU5EL09SXG5cCitPVEhFUiBNQVRFUklBTFMgRk9SIE9QRU4gU09VUkNFIFBST0pFQ1RTIChDT0xMRUNUSVZFTFkgIkNPTlRFTlQiKS5cblwKK1VTRSBPRiBUSEUgQ09OVEVOVCBJUyBHT1ZFUk5FRCBCWSBUSEUgVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgVEhJU1xuXAorQUdSRUVNRU5UIEFORC9PUiBUSEUgVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgTElDRU5TRSBBR1JFRU1FTlRTIE9SXG5cCitOT1RJQ0VTIElORElDQVRFRCBPUiBSRUZFUkVOQ0VEIEJFTE9XLiAgQlkgVVNJTkcgVEhFIENPTlRFTlQsIFlPVVxuXAorQUdSRUUgVEhBVCBZT1VSIFVTRSBPRiBUSEUgQ09OVEVOVCBJUyBHT1ZFUk5FRCBCWSBUSElTIEFHUkVFTUVOVFxuXAorQU5EL09SIFRIRSBURVJNUyBBTkQgQ09ORElUSU9OUyBPRiBBTlkgQVBQTElDQUJMRSBMSUNFTlNFIEFHUkVFTUVOVFNcblwKK09SIE5PVElDRVMgSU5ESUNBVEVEIE9SIFJFRkVSRU5DRUQgQkVMT1cuICBJRiBZT1UgRE8gTk9UIEFHUkVFIFRPIFRIRVxuXAorVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgVEhJUyBBR1JFRU1FTlQgQU5EIFRIRSBURVJNUyBBTkQgQ09ORElUSU9OU1xuXAorT0YgQU5ZIEFQUExJQ0FCTEUgTElDRU5TRSBBR1JFRU1FTlRTIE9SIE5PVElDRVMgSU5ESUNBVEVEIE9SIFJFRkVSRU5DRURcblwKK0JFTE9XLCBUSEVOIFlPVSBNQVkgTk9UIFVTRSBUSEUgQ09OVEVOVC5cblwKK1xuXAorQXBwbGljYWJsZSBMaWNlbnNlc1xuXAorXG5cCitVbmxlc3Mgb3RoZXJ3aXNlIGluZGljYXRlZCwgYWxsIENvbnRlbnQgbWFkZSBhdmFpbGFibGUgYnkgdGhlXG5cCitFY2xpcHNlIEZvdW5kYXRpb24gaXMgcHJvdmlkZWQgdG8geW91IHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZlxuXAordGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjAgKCJFUEwiKS4gQSBjb3B5IG9mIHRoZSBFUEwgaXNcblwKK3Byb3ZpZGVkIHdpdGggdGhpcyBDb250ZW50IGFuZCBpcyBhbHNvIGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbC5cblwKK0ZvciBwdXJwb3NlcyBvZiB0aGUgRVBMLCAiUHJvZ3JhbSIgd2lsbCBtZWFuIHRoZSBDb250ZW50LlxuXAorXG5cCitDb250ZW50IGluY2x1ZGVzLCBidXQgaXMgbm90IGxpbWl0ZWQgdG8sIHNvdXJjZSBjb2RlLCBvYmplY3QgY29kZSxcblwKK2RvY3VtZW50YXRpb24gYW5kIG90aGVyIGZpbGVzIG1haW50YWluZWQgaW4gdGhlIEVjbGlwc2UgRm91bmRhdGlvbiBzb3VyY2UgY29kZVxuXAorcmVwb3NpdG9yeSAoIlJlcG9zaXRvcnkiKSBpbiBzb2Z0d2FyZSBtb2R1bGVzICgiTW9kdWxlcyIpIGFuZCBtYWRlIGF2YWlsYWJsZVxuXAorYXMgZG93bmxvYWRhYmxlIGFyY2hpdmVzICgiRG93bmxvYWRzIikuXG5cCitcblwKKyAgICAgICAtIENvbnRlbnQgbWF5IGJlIHN0cnVjdHVyZWQgYW5kIHBhY2thZ2VkIGludG8gbW9kdWxlcyB0byBmYWNpbGl0YXRlIGRlbGl2ZXJpbmcsXG5cCisgICAgICAgICBleHRlbmRpbmcsIGFuZCB1cGdyYWRpbmcgdGhlIENvbnRlbnQuIFR5cGljYWwgbW9kdWxlcyBtYXkgaW5jbHVkZSBwbHVnLWlucyAoIlBsdWctaW5zIiksXG5cCisgICAgICAgICBwbHVnLWluIGZyYWdtZW50cyAoIkZyYWdtZW50cyIpLCBhbmQgZmVhdHVyZXMgKCJGZWF0dXJlcyIpLlxuXAorICAgICAgIC0gRWFjaCBQbHVnLWluIG9yIEZyYWdtZW50IG1heSBiZSBwYWNrYWdlZCBhcyBhIHN1Yi1kaXJlY3Rvcnkgb3IgSkFSIChKYXZhKFRNKSBBUmNoaXZlKVxuXAorICAgICAgICAgaW4gYSBkaXJlY3RvcnkgbmFtZWQgInBsdWdpbnMiLlxuXAorICAgICAgIC0gQSBGZWF0dXJlIGlzIGEgYnVuZGxlIG9mIG9uZSBvciBtb3JlIFBsdWctaW5zIGFuZC9vciBGcmFnbWVudHMgYW5kIGFzc29jaWF0ZWQgbWF0ZXJpYWwuXG5cCisgICAgICAgICBFYWNoIEZlYXR1cmUgbWF5IGJlIHBhY2thZ2VkIGFzIGEgc3ViLWRpcmVjdG9yeSBpbiBhIGRpcmVjdG9yeSBuYW1lZCAiZmVhdHVyZXMiLlxuXAorICAgICAgICAgV2l0aGluIGEgRmVhdHVyZSwgZmlsZXMgbmFtZWQgImZlYXR1cmUueG1sIiBtYXkgY29udGFpbiBhIGxpc3Qgb2YgdGhlIG5hbWVzIGFuZCB2ZXJzaW9uXG5cCisgICAgICAgICBudW1iZXJzIG9mIHRoZSBQbHVnLWlucyBhbmQvb3IgRnJhZ21lbnRzIGFzc29jaWF0ZWQgd2l0aCB0aGF0IEZlYXR1cmUuXG5cCisgICAgICAgLSBGZWF0dXJlcyBtYXkgYWxzbyBpbmNsdWRlIG90aGVyIEZlYXR1cmVzICgiSW5jbHVkZWQgRmVhdHVyZXMiKS4gV2l0aGluIGEgRmVhdHVyZSwgZmlsZXNcblwKKyAgICAgICAgIG5hbWVkICJmZWF0dXJlLnhtbCIgbWF5IGNvbnRhaW4gYSBsaXN0IG9mIHRoZSBuYW1lcyBhbmQgdmVyc2lvbiBudW1iZXJzIG9mIEluY2x1ZGVkIEZlYXR1cmVzLlxuXAorXG5cCitUaGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgZ292ZXJuaW5nIFBsdWctaW5zIGFuZCBGcmFnbWVudHMgc2hvdWxkIGJlXG5cCitjb250YWluZWQgaW4gZmlsZXMgbmFtZWQgImFib3V0Lmh0bWwiICgiQWJvdXRzIikuIFRoZSB0ZXJtcyBhbmRcblwKK2NvbmRpdGlvbnMgZ292ZXJuaW5nIEZlYXR1cmVzIGFuZCBJbmNsdWRlZCBGZWF0dXJlcyBzaG91bGQgYmUgY29udGFpbmVkXG5cCitpbiBmaWxlcyBuYW1lZCAibGljZW5zZS5odG1sIiAoIkZlYXR1cmUgTGljZW5zZXMiKS4gQWJvdXRzIGFuZCBGZWF0dXJlXG5cCitMaWNlbnNlcyBtYXkgYmUgbG9jYXRlZCBpbiBhbnkgZGlyZWN0b3J5IG9mIGEgRG93bmxvYWQgb3IgTW9kdWxlXG5cCitpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0byB0aGUgZm9sbG93aW5nIGxvY2F0aW9uczpcblwKK1xuXAorICAgICAgIC0gVGhlIHRvcC1sZXZlbCAocm9vdCkgZGlyZWN0b3J5XG5cCisgICAgICAgLSBQbHVnLWluIGFuZCBGcmFnbWVudCBkaXJlY3Rvcmllc1xuXAorICAgICAgIC0gSW5zaWRlIFBsdWctaW5zIGFuZCBGcmFnbWVudHMgcGFja2FnZWQgYXMgSkFSc1xuXAorICAgICAgIC0gU3ViLWRpcmVjdG9yaWVzIG9mIHRoZSBkaXJlY3RvcnkgbmFtZWQgInNyYyIgb2YgY2VydGFpbiBQbHVnLWluc1xuXAorICAgICAgIC0gRmVhdHVyZSBkaXJlY3Rvcmllc1xuXAorXG5cCitOb3RlOiBpZiBhIEZlYXR1cmUgbWFkZSBhdmFpbGFibGUgYnkgdGhlIEVjbGlwc2UgRm91bmRhdGlvbiBpcyBpbnN0YWxsZWQgdXNpbmcgdGhlXG5cCitQcm92aXNpb25pbmcgVGVjaG5vbG9neSAoYXMgZGVmaW5lZCBiZWxvdyksIHlvdSBtdXN0IGFncmVlIHRvIGEgbGljZW5zZSAoIkZlYXR1cmUgXG5cCitVcGRhdGUgTGljZW5zZSIpIGR1cmluZyB0aGUgaW5zdGFsbGF0aW9uIHByb2Nlc3MuIElmIHRoZSBGZWF0dXJlIGNvbnRhaW5zXG5cCitJbmNsdWRlZCBGZWF0dXJlcywgdGhlIEZlYXR1cmUgVXBkYXRlIExpY2Vuc2Ugc2hvdWxkIGVpdGhlciBwcm92aWRlIHlvdVxuXAord2l0aCB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgZ292ZXJuaW5nIHRoZSBJbmNsdWRlZCBGZWF0dXJlcyBvciBpbmZvcm1cblwKK3lvdSB3aGVyZSB5b3UgY2FuIGxvY2F0ZSB0aGVtLiBGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlcyBtYXkgYmUgZm91bmQgaW5cblwKK3RoZSAibGljZW5zZSIgcHJvcGVydHkgb2YgZmlsZXMgbmFtZWQgImZlYXR1cmUucHJvcGVydGllcyIgZm91bmQgd2l0aGluIGEgRmVhdHVyZS5cblwKK1N1Y2ggQWJvdXRzLCBGZWF0dXJlIExpY2Vuc2VzLCBhbmQgRmVhdHVyZSBVcGRhdGUgTGljZW5zZXMgY29udGFpbiB0aGVcblwKK3Rlcm1zIGFuZCBjb25kaXRpb25zIChvciByZWZlcmVuY2VzIHRvIHN1Y2ggdGVybXMgYW5kIGNvbmRpdGlvbnMpIHRoYXRcblwKK2dvdmVybiB5b3VyIHVzZSBvZiB0aGUgYXNzb2NpYXRlZCBDb250ZW50IGluIHRoYXQgZGlyZWN0b3J5LlxuXAorXG5cCitUSEUgQUJPVVRTLCBGRUFUVVJFIExJQ0VOU0VTLCBBTkQgRkVBVFVSRSBVUERBVEUgTElDRU5TRVMgTUFZIFJFRkVSXG5cCitUTyBUSEUgRVBMIE9SIE9USEVSIExJQ0VOU0UgQUdSRUVNRU5UUywgTk9USUNFUyBPUiBURVJNUyBBTkQgQ09ORElUSU9OUy5cblwKK1NPTUUgT0YgVEhFU0UgT1RIRVIgTElDRU5TRSBBR1JFRU1FTlRTIE1BWSBJTkNMVURFIChCVVQgQVJFIE5PVCBMSU1JVEVEIFRPKTpcblwKK1xuXAorICAgICAgIC0gQ29tbW9uIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4wIChhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9jcGwtdjEwLmh0bWwpXG5cCisgICAgICAgLSBBcGFjaGUgU29mdHdhcmUgTGljZW5zZSAxLjEgKGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRSlcblwKKyAgICAgICAtIEFwYWNoZSBTb2Z0d2FyZSBMaWNlbnNlIDIuMCAoYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMClcblwKKyAgICAgICAtIE1ldHJvIExpbmsgUHVibGljIExpY2Vuc2UgMS4wMCAoYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cub3Blbmdyb3VwLm9yZy9vcGVubW90aWYvc3VwcG9ydGVycy9tZXRyb2xpbmsvbGljZW5zZS5odG1sKVxuXAorICAgICAgIC0gTW96aWxsYSBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMSAoYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cubW96aWxsYS5vcmcvTVBML01QTC0xLjEuaHRtbClcblwKK1xuXAorSVQgSVMgWU9VUiBPQkxJR0FUSU9OIFRPIFJFQUQgQU5EIEFDQ0VQVCBBTEwgU1VDSCBURVJNUyBBTkQgQ09ORElUSU9OUyBQUklPUlxuXAorVE8gVVNFIE9GIFRIRSBDT05URU5ULiBJZiBubyBBYm91dCwgRmVhdHVyZSBMaWNlbnNlLCBvciBGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlXG5cCitpcyBwcm92aWRlZCwgcGxlYXNlIGNvbnRhY3QgdGhlIEVjbGlwc2UgRm91bmRhdGlvbiB0byBkZXRlcm1pbmUgd2hhdCB0ZXJtcyBhbmQgY29uZGl0aW9uc1xuXAorZ292ZXJuIHRoYXQgcGFydGljdWxhciBDb250ZW50LlxuXAorXG5cCitcblxVc2Ugb2YgUHJvdmlzaW9uaW5nIFRlY2hub2xvZ3lcblwKK1xuXAorVGhlIEVjbGlwc2UgRm91bmRhdGlvbiBtYWtlcyBhdmFpbGFibGUgcHJvdmlzaW9uaW5nIHNvZnR3YXJlLCBleGFtcGxlcyBvZiB3aGljaCBpbmNsdWRlLFxuXAorYnV0IGFyZSBub3QgbGltaXRlZCB0bywgcDIgYW5kIHRoZSBFY2xpcHNlIFVwZGF0ZSBNYW5hZ2VyICgiUHJvdmlzaW9uaW5nIFRlY2hub2xvZ3kiKSBmb3JcblwKK3RoZSBwdXJwb3NlIG9mIGFsbG93aW5nIHVzZXJzIHRvIGluc3RhbGwgc29mdHdhcmUsIGRvY3VtZW50YXRpb24sIGluZm9ybWF0aW9uIGFuZC9vclxuXAorb3RoZXIgbWF0ZXJpYWxzIChjb2xsZWN0aXZlbHkgIkluc3RhbGxhYmxlIFNvZnR3YXJlIikuIFRoaXMgY2FwYWJpbGl0eSBpcyBwcm92aWRlZCB3aXRoXG5cCit0aGUgaW50ZW50IG9mIGFsbG93aW5nIHN1Y2ggdXNlcnMgdG8gaW5zdGFsbCwgZXh0ZW5kIGFuZCB1cGRhdGUgRWNsaXBzZS1iYXNlZCBwcm9kdWN0cy5cblwKK0luZm9ybWF0aW9uIGFib3V0IHBhY2thZ2luZyBJbnN0YWxsYWJsZSBTb2Z0d2FyZSBpcyBhdmFpbGFibGUgYXRcblwKK2h0dHA6Ly9lY2xpcHNlLm9yZy9lcXVpbm94L3AyL3JlcG9zaXRvcnlfcGFja2FnaW5nLmh0bWwgKCJTcGVjaWZpY2F0aW9uIikuXG5cCitcblwKK1lvdSBtYXkgdXNlIFByb3Zpc2lvbmluZyBUZWNobm9sb2d5IHRvIGFsbG93IG90aGVyIHBhcnRpZXMgdG8gaW5zdGFsbCBJbnN0YWxsYWJsZSBTb2Z0d2FyZS5cblwKK1lvdSBzaGFsbCBiZSByZXNwb25zaWJsZSBmb3IgZW5hYmxpbmcgdGhlIGFwcGxpY2FibGUgbGljZW5zZSBhZ3JlZW1lbnRzIHJlbGF0aW5nIHRvIHRoZVxuXAorSW5zdGFsbGFibGUgU29mdHdhcmUgdG8gYmUgcHJlc2VudGVkIHRvLCBhbmQgYWNjZXB0ZWQgYnksIHRoZSB1c2VycyBvZiB0aGUgUHJvdmlzaW9uaW5nIFRlY2hub2xvZ3lcblwKK2luIGFjY29yZGFuY2Ugd2l0aCB0aGUgU3BlY2lmaWNhdGlvbi4gQnkgdXNpbmcgUHJvdmlzaW9uaW5nIFRlY2hub2xvZ3kgaW4gc3VjaCBhIG1hbm5lciBhbmRcblwKK21ha2luZyBpdCBhdmFpbGFibGUgaW4gYWNjb3JkYW5jZSB3aXRoIHRoZSBTcGVjaWZpY2F0aW9uLCB5b3UgZnVydGhlciBhY2tub3dsZWRnZSB5b3VyXG5cCithZ3JlZW1lbnQgdG8sIGFuZCB0aGUgYWNxdWlzaXRpb24gb2YgYWxsIG5lY2Vzc2FyeSByaWdodHMgdG8gcGVybWl0IHRoZSBmb2xsb3dpbmc6XG5cCitcblwKKyAgICAgICAxLiBBIHNlcmllcyBvZiBhY3Rpb25zIG1heSBvY2N1ciAoIlByb3Zpc2lvbmluZyBQcm9jZXNzIikgaW4gd2hpY2ggYSB1c2VyIG1heSBleGVjdXRlXG5cCisgICAgICAgICAgdGhlIFByb3Zpc2lvbmluZyBUZWNobm9sb2d5IG9uIGEgbWFjaGluZSAoIlRhcmdldCBNYWNoaW5lIikgd2l0aCB0aGUgaW50ZW50IG9mIGluc3RhbGxpbmcsXG5cCisgICAgICAgICAgZXh0ZW5kaW5nIG9yIHVwZGF0aW5nIHRoZSBmdW5jdGlvbmFsaXR5IG9mIGFuIEVjbGlwc2UtYmFzZWQgcHJvZHVjdC5cblwKKyAgICAgICAyLiBEdXJpbmcgdGhlIFByb3Zpc2lvbmluZyBQcm9jZXNzLCB0aGUgUHJvdmlzaW9uaW5nIFRlY2hub2xvZ3kgbWF5IGNhdXNlIHRoaXJkIHBhcnR5XG5cCisgICAgICAgICAgSW5zdGFsbGFibGUgU29mdHdhcmUgb3IgYSBwb3J0aW9uIHRoZXJlb2YgdG8gYmUgYWNjZXNzZWQgYW5kIGNvcGllZCB0byB0aGUgVGFyZ2V0IE1hY2hpbmUuXG5cCisgICAgICAgMy4gUHVyc3VhbnQgdG8gdGhlIFNwZWNpZmljYXRpb24sIHlvdSB3aWxsIHByb3ZpZGUgdG8gdGhlIHVzZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIHRoYXRcblwKKyAgICAgICAgICBnb3Zlcm4gdGhlIHVzZSBvZiB0aGUgSW5zdGFsbGFibGUgU29mdHdhcmUgKCJJbnN0YWxsYWJsZSBTb2Z0d2FyZSBBZ3JlZW1lbnQiKSBhbmQgc3VjaFxuXAorICAgICAgICAgIEluc3RhbGxhYmxlIFNvZnR3YXJlIEFncmVlbWVudCBzaGFsbCBiZSBhY2Nlc3NlZCBmcm9tIHRoZSBUYXJnZXQgTWFjaGluZSBpbiBhY2NvcmRhbmNlXG5cCisgICAgICAgICAgd2l0aCB0aGUgU3BlY2lmaWNhdGlvbi4gU3VjaCBJbnN0YWxsYWJsZSBTb2Z0d2FyZSBBZ3JlZW1lbnQgbXVzdCBpbmZvcm0gdGhlIHVzZXIgb2YgdGhlXG5cCisgICAgICAgICAgdGVybXMgYW5kIGNvbmRpdGlvbnMgdGhhdCBnb3Zlcm4gdGhlIEluc3RhbGxhYmxlIFNvZnR3YXJlIGFuZCBtdXN0IHNvbGljaXQgYWNjZXB0YW5jZSBieVxuXAorICAgICAgICAgIHRoZSBlbmQgdXNlciBpbiB0aGUgbWFubmVyIHByZXNjcmliZWQgaW4gc3VjaCBJbnN0YWxsYWJsZSBTb2Z0d2FyZSBBZ3JlZW1lbnQuIFVwb24gc3VjaFxuXAorICAgICAgICAgIGluZGljYXRpb24gb2YgYWdyZWVtZW50IGJ5IHRoZSB1c2VyLCB0aGUgcHJvdmlzaW9uaW5nIFRlY2hub2xvZ3kgd2lsbCBjb21wbGV0ZSBpbnN0YWxsYXRpb25cblwKKyAgICAgICAgICBvZiB0aGUgSW5zdGFsbGFibGUgU29mdHdhcmUuXG5cCitcblwKK0NyeXB0b2dyYXBoeVxuXAorXG5cCitDb250ZW50IG1heSBjb250YWluIGVuY3J5cHRpb24gc29mdHdhcmUuIFRoZSBjb3VudHJ5IGluIHdoaWNoIHlvdSBhcmVcblwKK2N1cnJlbnRseSBtYXkgaGF2ZSByZXN0cmljdGlvbnMgb24gdGhlIGltcG9ydCwgcG9zc2Vzc2lvbiwgYW5kIHVzZSxcblwKK2FuZC9vciByZS1leHBvcnQgdG8gYW5vdGhlciBjb3VudHJ5LCBvZiBlbmNyeXB0aW9uIHNvZnR3YXJlLiBCRUZPUkVcblwKK3VzaW5nIGFueSBlbmNyeXB0aW9uIHNvZnR3YXJlLCBwbGVhc2UgY2hlY2sgdGhlIGNvdW50cnkncyBsYXdzLFxuXAorcmVndWxhdGlvbnMgYW5kIHBvbGljaWVzIGNvbmNlcm5pbmcgdGhlIGltcG9ydCwgcG9zc2Vzc2lvbiwgb3IgdXNlLCBhbmRcblwKK3JlLWV4cG9ydCBvZiBlbmNyeXB0aW9uIHNvZnR3YXJlLCB0byBzZWUgaWYgdGhpcyBpcyBwZXJtaXR0ZWQuXG5cCitcblwKK0phdmEgYW5kIGFsbCBKYXZhLWJhc2VkIHRyYWRlbWFya3MgYXJlIHRyYWRlbWFya3Mgb2YgT3JhY2xlIENvcnBvcmF0aW9uIGluIHRoZSBVbml0ZWQgU3RhdGVzLCBvdGhlciBjb3VudHJpZXMsIG9yIGJvdGguXG4KKyMjIyMjIyMjIyMjIGVuZCBvZiBsaWNlbnNlIHByb3BlcnR5ICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLnN0ZW0uaW50ZXJuYWwuZGF0YS5mZWF0dXJlL2ZlYXR1cmUueG1sIGIvZmVhdHVyZXMvb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcm5hbC5kYXRhLmZlYXR1cmUvZmVhdHVyZS54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjMyYWU0MQotLS0gL2Rldi9udWxsCisrKyBiL2ZlYXR1cmVzL29yZy5lY2xpcHNlLnN0ZW0uaW50ZXJuYWwuZGF0YS5mZWF0dXJlL2ZlYXR1cmUueG1sCkBAIC0wLDAgKzEsMTA3IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPGZlYXR1cmUKKyAgICAgIGlkPSJvcmcuZWNsaXBzZS5zdGVtLmludGVybmFsLmRhdGEuZmVhdHVyZSIKKyAgICAgIGxhYmVsPSIlZmVhdHVyZU5hbWUiCisgICAgICB2ZXJzaW9uPSIxLjIuMSIKKyAgICAgIHByb3ZpZGVyLW5hbWU9IiVwcm92aWRlck5hbWUiPgorCisgICA8ZGVzY3JpcHRpb24+CisgICAgICAlZGVzY3JpcHRpb24KKyAgIDwvZGVzY3JpcHRpb24+CisKKyAgIDxjb3B5cmlnaHQ+CisgICAgICAlY29weXJpZ2h0CisgICA8L2NvcHlyaWdodD4KKworICAgPGxpY2Vuc2UgdXJsPSIlbGljZW5zZVVSTCI+CisgICAgICAlbGljZW5zZQorICAgPC9saWNlbnNlPgorCisgICA8dXJsPgorICAgICAgPHVwZGF0ZSBsYWJlbD0iJXVwZGF0ZVNpdGVOYW1lIiB1cmw9Imh0dHA6Ly9kb3dubG9hZC5lY2xpcHNlLm9yZy9zdGVtL3VwZGF0ZS1zaXRlLyIvPgorICAgPC91cmw+CisKKyAgIDxyZXF1aXJlcz4KKyAgICAgIDxpbXBvcnQgcGx1Z2luPSJvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUiLz4KKyAgICAgIDxpbXBvcnQgcGx1Z2luPSJvcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5Ii8+CisgICAgICA8aW1wb3J0IHBsdWdpbj0ib3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzIi8+CisgICAgICA8aW1wb3J0IHBsdWdpbj0ib3JnLmVjbGlwc2Uuc3RlbS50cmFuc3BvcnQiLz4KKyAgICAgIDxpbXBvcnQgcGx1Z2luPSJvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zIi8+CisgICAgICA8aW1wb3J0IHBsdWdpbj0ib3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS5pbmZyYXN0cnVjdHVyZS50cmFuc3BvcnRhdGlvbiIvPgorICAgICAgPGltcG9ydCBwbHVnaW49Im9yZy5lY2xpcHNlLmVtZi5lY29yZSIvPgorICAgICAgPGltcG9ydCBwbHVnaW49Im9yZy5lY2xpcHNlLmVtZi5lY29yZS54bWkiLz4KKyAgICAgIDxpbXBvcnQgcGx1Z2luPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUiLz4KKyAgICAgIDxpbXBvcnQgcGx1Z2luPSJvcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5Lm1vZGVscyIvPgorICAgICAgPGltcG9ydCBwbHVnaW49Im9yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkucG9wdWxhdGlvbi5odW1hbiIvPgorICAgICAgPGltcG9ydCBwbHVnaW49Im9yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkucG9wdWxhdGlvbi5odW1hbi5tb2RlbHMiLz4KKyAgICAgIDxpbXBvcnQgcGx1Z2luPSJvcmcuZWNsaXBzZS5zdGVtLmRhdGEuZGlzZWFzZW1vZGVscy5tb2RlbHMiLz4KKyAgICAgIDxpbXBvcnQgcGx1Z2luPSJvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMiLz4KKyAgICAgIDxpbXBvcnQgcGx1Z2luPSJvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2VzIi8+CisgICAgICA8aW1wb3J0IHBsdWdpbj0ib3JnLmVjbGlwc2UuZW1mLmNvbW1vbiIvPgorICAgICAgPGltcG9ydCBwbHVnaW49Im9yZy5lY2xpcHNlLnN0ZW0uZGF0YS5kaXNlYXNlbW9kZWxzLnNjZW5hcmlvcyIvPgorICAgPC9yZXF1aXJlcz4KKworICAgPHBsdWdpbgorICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uaW50ZXJuYWwuZGF0YSIKKyAgICAgICAgIGRvd25sb2FkLXNpemU9IjAiCisgICAgICAgICBpbnN0YWxsLXNpemU9IjAiCisgICAgICAgICB2ZXJzaW9uPSIwLjAuMCIKKyAgICAgICAgIHVucGFjaz0iZmFsc2UiLz4KKworICAgPHBsdWdpbgorICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uaW50ZXJuYWwuZGF0YS5nZW9ncmFwaHkiCisgICAgICAgICBkb3dubG9hZC1zaXplPSIwIgorICAgICAgICAgaW5zdGFsbC1zaXplPSIwIgorICAgICAgICAgdmVyc2lvbj0iMC4wLjAiCisgICAgICAgICB1bnBhY2s9ImZhbHNlIi8+CisKKyAgIDxwbHVnaW4KKyAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5zdGVtLmludGVybmFsLmRhdGEuZ2VvZ3JhcGh5LmluZnJhc3RydWN0dXJlLnRyYW5zcG9ydGF0aW9uIgorICAgICAgICAgZG93bmxvYWQtc2l6ZT0iMCIKKyAgICAgICAgIGluc3RhbGwtc2l6ZT0iMCIKKyAgICAgICAgIHZlcnNpb249IjAuMC4wIgorICAgICAgICAgdW5wYWNrPSJmYWxzZSIvPgorCisgICA8cGx1Z2luCisgICAgICAgICBpZD0ib3JnLmVjbGlwc2Uuc3RlbS5pbnRlcm5hbC5kYXRhLmdlb2dyYXBoeS5tb2RlbHMiCisgICAgICAgICBkb3dubG9hZC1zaXplPSIwIgorICAgICAgICAgaW5zdGFsbC1zaXplPSIwIgorICAgICAgICAgdmVyc2lvbj0iMC4wLjAiCisgICAgICAgICB1bnBhY2s9ImZhbHNlIi8+CisKKyAgIDxwbHVnaW4KKyAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5zdGVtLmludGVybmFsLmRhdGEuZ2VvZ3JhcGh5LnBvcHVsYXRpb24iCisgICAgICAgICBkb3dubG9hZC1zaXplPSIwIgorICAgICAgICAgaW5zdGFsbC1zaXplPSIwIgorICAgICAgICAgdmVyc2lvbj0iMC4wLjAiCisgICAgICAgICB1bnBhY2s9ImZhbHNlIi8+CisKKyAgIDxwbHVnaW4KKyAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5zdGVtLmludGVybmFsLmRhdGEuZ2VvZ3JhcGh5LnBvcHVsYXRpb24uaHVtYW4iCisgICAgICAgICBkb3dubG9hZC1zaXplPSIwIgorICAgICAgICAgaW5zdGFsbC1zaXplPSIwIgorICAgICAgICAgdmVyc2lvbj0iMC4wLjAiCisgICAgICAgICB1bnBhY2s9ImZhbHNlIi8+CisKKyAgIDxwbHVnaW4KKyAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5zdGVtLmludGVybmFsLmRhdGEuZ2VvZ3JhcGh5LnBvcHVsYXRpb24uaHVtYW4ubW9kZWxzIgorICAgICAgICAgZG93bmxvYWQtc2l6ZT0iMCIKKyAgICAgICAgIGluc3RhbGwtc2l6ZT0iMCIKKyAgICAgICAgIHZlcnNpb249IjAuMC4wIgorICAgICAgICAgdW5wYWNrPSJmYWxzZSIvPgorCisgICA8cGx1Z2luCisgICAgICAgICBpZD0ib3JnLmVjbGlwc2Uuc3RlbS5pbnRlcm5hbC5kaXNlYXNlbW9kZWxzLm1vZGVscyIKKyAgICAgICAgIGRvd25sb2FkLXNpemU9IjAiCisgICAgICAgICBpbnN0YWxsLXNpemU9IjAiCisgICAgICAgICB2ZXJzaW9uPSIwLjAuMCIKKyAgICAgICAgIHVucGFjaz0iZmFsc2UiLz4KKworICAgPHBsdWdpbgorICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uaW50ZXJuYWwuZGlzZWFzZW1vZGVscy5zY2VuYXJpb3MiCisgICAgICAgICBkb3dubG9hZC1zaXplPSIwIgorICAgICAgICAgaW5zdGFsbC1zaXplPSIwIgorICAgICAgICAgdmVyc2lvbj0iMC4wLjAiCisgICAgICAgICB1bnBhY2s9ImZhbHNlIi8+CisKKzwvZmVhdHVyZT4KZGlmZiAtLWdpdCBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLnN0ZW0uaW50ZXJuYWwuZGF0YS5mZWF0dXJlL2xpY2Vuc2UuaHRtbCBiL2ZlYXR1cmVzL29yZy5lY2xpcHNlLnN0ZW0uaW50ZXJuYWwuZGF0YS5mZWF0dXJlL2xpY2Vuc2UuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMTg0Y2EzCi0tLSAvZGV2L251bGwKKysrIGIvZmVhdHVyZXMvb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcm5hbC5kYXRhLmZlYXR1cmUvbGljZW5zZS5odG1sCkBAIC0wLDAgKzEsMTA3IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJJU08tODg1OS0xIiA/PgorPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBYSFRNTCAxLjAgU3RyaWN0Ly9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sMS9EVEQveGh0bWwxLXN0cmljdC5kdGQiPgorPGh0bWwgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiPgorPGhlYWQ+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0xIiAvPgorPHRpdGxlPkVjbGlwc2UgRm91bmRhdGlvbiBTb2Z0d2FyZSBVc2VyIEFncmVlbWVudDwvdGl0bGU+Cis8L2hlYWQ+CisKKzxib2R5IGxhbmc9IkVOLVVTIj4KKzxoMj5FY2xpcHNlIEZvdW5kYXRpb24gU29mdHdhcmUgVXNlciBBZ3JlZW1lbnQ8L2gyPgorPHA+QXByaWwgMTQsIDIwMTA8L3A+CisKKzxoMz5Vc2FnZSBPZiBDb250ZW50PC9oMz4KKworPHA+VEhFIEVDTElQU0UgRk9VTkRBVElPTiBNQUtFUyBBVkFJTEFCTEUgU09GVFdBUkUsIERPQ1VNRU5UQVRJT04sIElORk9STUFUSU9OIEFORC9PUiBPVEhFUiBNQVRFUklBTFMgRk9SIE9QRU4gU09VUkNFIFBST0pFQ1RTCisgICAoQ09MTEVDVElWRUxZICZxdW90O0NPTlRFTlQmcXVvdDspLiAgVVNFIE9GIFRIRSBDT05URU5UIElTIEdPVkVSTkVEIEJZIFRIRSBURVJNUyBBTkQgQ09ORElUSU9OUyBPRiBUSElTIEFHUkVFTUVOVCBBTkQvT1IgVEhFIFRFUk1TIEFORAorICAgQ09ORElUSU9OUyBPRiBMSUNFTlNFIEFHUkVFTUVOVFMgT1IgTk9USUNFUyBJTkRJQ0FURUQgT1IgUkVGRVJFTkNFRCBCRUxPVy4gIEJZIFVTSU5HIFRIRSBDT05URU5ULCBZT1UgQUdSRUUgVEhBVCBZT1VSIFVTRQorICAgT0YgVEhFIENPTlRFTlQgSVMgR09WRVJORUQgQlkgVEhJUyBBR1JFRU1FTlQgQU5EL09SIFRIRSBURVJNUyBBTkQgQ09ORElUSU9OUyBPRiBBTlkgQVBQTElDQUJMRSBMSUNFTlNFIEFHUkVFTUVOVFMgT1IKKyAgIE5PVElDRVMgSU5ESUNBVEVEIE9SIFJFRkVSRU5DRUQgQkVMT1cuICBJRiBZT1UgRE8gTk9UIEFHUkVFIFRPIFRIRSBURVJNUyBBTkQgQ09ORElUSU9OUyBPRiBUSElTIEFHUkVFTUVOVCBBTkQgVEhFIFRFUk1TIEFORAorICAgQ09ORElUSU9OUyBPRiBBTlkgQVBQTElDQUJMRSBMSUNFTlNFIEFHUkVFTUVOVFMgT1IgTk9USUNFUyBJTkRJQ0FURUQgT1IgUkVGRVJFTkNFRCBCRUxPVywgVEhFTiBZT1UgTUFZIE5PVCBVU0UgVEhFIENPTlRFTlQuPC9wPgorCis8aDM+QXBwbGljYWJsZSBMaWNlbnNlczwvaDM+CisKKzxwPlVubGVzcyBvdGhlcndpc2UgaW5kaWNhdGVkLCBhbGwgQ29udGVudCBtYWRlIGF2YWlsYWJsZSBieSB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uIGlzIHByb3ZpZGVkIHRvIHlvdSB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjAKKyAgICgmcXVvdDtFUEwmcXVvdDspLiAgQSBjb3B5IG9mIHRoZSBFUEwgaXMgcHJvdmlkZWQgd2l0aCB0aGlzIENvbnRlbnQgYW5kIGlzIGFsc28gYXZhaWxhYmxlIGF0IDxhIGhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sIj5odHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbDwvYT4uCisgICBGb3IgcHVycG9zZXMgb2YgdGhlIEVQTCwgJnF1b3Q7UHJvZ3JhbSZxdW90OyB3aWxsIG1lYW4gdGhlIENvbnRlbnQuPC9wPgorCis8cD5Db250ZW50IGluY2x1ZGVzLCBidXQgaXMgbm90IGxpbWl0ZWQgdG8sIHNvdXJjZSBjb2RlLCBvYmplY3QgY29kZSwgZG9jdW1lbnRhdGlvbiBhbmQgb3RoZXIgZmlsZXMgbWFpbnRhaW5lZCBpbiB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uIHNvdXJjZSBjb2RlCisgICByZXBvc2l0b3J5ICgmcXVvdDtSZXBvc2l0b3J5JnF1b3Q7KSBpbiBzb2Z0d2FyZSBtb2R1bGVzICgmcXVvdDtNb2R1bGVzJnF1b3Q7KSBhbmQgbWFkZSBhdmFpbGFibGUgYXMgZG93bmxvYWRhYmxlIGFyY2hpdmVzICgmcXVvdDtEb3dubG9hZHMmcXVvdDspLjwvcD4KKworPHVsPgorICAgICAgIDxsaT5Db250ZW50IG1heSBiZSBzdHJ1Y3R1cmVkIGFuZCBwYWNrYWdlZCBpbnRvIG1vZHVsZXMgdG8gZmFjaWxpdGF0ZSBkZWxpdmVyaW5nLCBleHRlbmRpbmcsIGFuZCB1cGdyYWRpbmcgdGhlIENvbnRlbnQuICBUeXBpY2FsIG1vZHVsZXMgbWF5IGluY2x1ZGUgcGx1Zy1pbnMgKCZxdW90O1BsdWctaW5zJnF1b3Q7KSwgcGx1Zy1pbiBmcmFnbWVudHMgKCZxdW90O0ZyYWdtZW50cyZxdW90OyksIGFuZCBmZWF0dXJlcyAoJnF1b3Q7RmVhdHVyZXMmcXVvdDspLjwvbGk+CisgICAgICAgPGxpPkVhY2ggUGx1Zy1pbiBvciBGcmFnbWVudCBtYXkgYmUgcGFja2FnZWQgYXMgYSBzdWItZGlyZWN0b3J5IG9yIEpBUiAoSmF2YSZ0cmFkZTsgQVJjaGl2ZSkgaW4gYSBkaXJlY3RvcnkgbmFtZWQgJnF1b3Q7cGx1Z2lucyZxdW90Oy48L2xpPgorICAgICAgIDxsaT5BIEZlYXR1cmUgaXMgYSBidW5kbGUgb2Ygb25lIG9yIG1vcmUgUGx1Zy1pbnMgYW5kL29yIEZyYWdtZW50cyBhbmQgYXNzb2NpYXRlZCBtYXRlcmlhbC4gIEVhY2ggRmVhdHVyZSBtYXkgYmUgcGFja2FnZWQgYXMgYSBzdWItZGlyZWN0b3J5IGluIGEgZGlyZWN0b3J5IG5hbWVkICZxdW90O2ZlYXR1cmVzJnF1b3Q7LiAgV2l0aGluIGEgRmVhdHVyZSwgZmlsZXMgbmFtZWQgJnF1b3Q7ZmVhdHVyZS54bWwmcXVvdDsgbWF5IGNvbnRhaW4gYSBsaXN0IG9mIHRoZSBuYW1lcyBhbmQgdmVyc2lvbiBudW1iZXJzIG9mIHRoZSBQbHVnLWlucworICAgICAgYW5kL29yIEZyYWdtZW50cyBhc3NvY2lhdGVkIHdpdGggdGhhdCBGZWF0dXJlLjwvbGk+CisgICAgICAgPGxpPkZlYXR1cmVzIG1heSBhbHNvIGluY2x1ZGUgb3RoZXIgRmVhdHVyZXMgKCZxdW90O0luY2x1ZGVkIEZlYXR1cmVzJnF1b3Q7KS4gV2l0aGluIGEgRmVhdHVyZSwgZmlsZXMgbmFtZWQgJnF1b3Q7ZmVhdHVyZS54bWwmcXVvdDsgbWF5IGNvbnRhaW4gYSBsaXN0IG9mIHRoZSBuYW1lcyBhbmQgdmVyc2lvbiBudW1iZXJzIG9mIEluY2x1ZGVkIEZlYXR1cmVzLjwvbGk+Cis8L3VsPgorCis8cD5UaGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgZ292ZXJuaW5nIFBsdWctaW5zIGFuZCBGcmFnbWVudHMgc2hvdWxkIGJlIGNvbnRhaW5lZCBpbiBmaWxlcyBuYW1lZCAmcXVvdDthYm91dC5odG1sJnF1b3Q7ICgmcXVvdDtBYm91dHMmcXVvdDspLiBUaGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgZ292ZXJuaW5nIEZlYXR1cmVzIGFuZAorSW5jbHVkZWQgRmVhdHVyZXMgc2hvdWxkIGJlIGNvbnRhaW5lZCBpbiBmaWxlcyBuYW1lZCAmcXVvdDtsaWNlbnNlLmh0bWwmcXVvdDsgKCZxdW90O0ZlYXR1cmUgTGljZW5zZXMmcXVvdDspLiAgQWJvdXRzIGFuZCBGZWF0dXJlIExpY2Vuc2VzIG1heSBiZSBsb2NhdGVkIGluIGFueSBkaXJlY3Rvcnkgb2YgYSBEb3dubG9hZCBvciBNb2R1bGUKK2luY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvIHRoZSBmb2xsb3dpbmcgbG9jYXRpb25zOjwvcD4KKworPHVsPgorICAgICAgIDxsaT5UaGUgdG9wLWxldmVsIChyb290KSBkaXJlY3Rvcnk8L2xpPgorICAgICAgIDxsaT5QbHVnLWluIGFuZCBGcmFnbWVudCBkaXJlY3RvcmllczwvbGk+CisgICAgICAgPGxpPkluc2lkZSBQbHVnLWlucyBhbmQgRnJhZ21lbnRzIHBhY2thZ2VkIGFzIEpBUnM8L2xpPgorICAgICAgIDxsaT5TdWItZGlyZWN0b3JpZXMgb2YgdGhlIGRpcmVjdG9yeSBuYW1lZCAmcXVvdDtzcmMmcXVvdDsgb2YgY2VydGFpbiBQbHVnLWluczwvbGk+CisgICAgICAgPGxpPkZlYXR1cmUgZGlyZWN0b3JpZXM8L2xpPgorPC91bD4KKworPHA+Tm90ZTogaWYgYSBGZWF0dXJlIG1hZGUgYXZhaWxhYmxlIGJ5IHRoZSBFY2xpcHNlIEZvdW5kYXRpb24gaXMgaW5zdGFsbGVkIHVzaW5nIHRoZSBQcm92aXNpb25pbmcgVGVjaG5vbG9neSAoYXMgZGVmaW5lZCBiZWxvdyksIHlvdSBtdXN0IGFncmVlIHRvIGEgbGljZW5zZSAoJnF1b3Q7RmVhdHVyZSBVcGRhdGUgTGljZW5zZSZxdW90OykgZHVyaW5nIHRoZQoraW5zdGFsbGF0aW9uIHByb2Nlc3MuICBJZiB0aGUgRmVhdHVyZSBjb250YWlucyBJbmNsdWRlZCBGZWF0dXJlcywgdGhlIEZlYXR1cmUgVXBkYXRlIExpY2Vuc2Ugc2hvdWxkIGVpdGhlciBwcm92aWRlIHlvdSB3aXRoIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBnb3Zlcm5pbmcgdGhlIEluY2x1ZGVkIEZlYXR1cmVzIG9yCitpbmZvcm0geW91IHdoZXJlIHlvdSBjYW4gbG9jYXRlIHRoZW0uICBGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlcyBtYXkgYmUgZm91bmQgaW4gdGhlICZxdW90O2xpY2Vuc2UmcXVvdDsgcHJvcGVydHkgb2YgZmlsZXMgbmFtZWQgJnF1b3Q7ZmVhdHVyZS5wcm9wZXJ0aWVzJnF1b3Q7IGZvdW5kIHdpdGhpbiBhIEZlYXR1cmUuCitTdWNoIEFib3V0cywgRmVhdHVyZSBMaWNlbnNlcywgYW5kIEZlYXR1cmUgVXBkYXRlIExpY2Vuc2VzIGNvbnRhaW4gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIChvciByZWZlcmVuY2VzIHRvIHN1Y2ggdGVybXMgYW5kIGNvbmRpdGlvbnMpIHRoYXQgZ292ZXJuIHlvdXIgdXNlIG9mIHRoZSBhc3NvY2lhdGVkIENvbnRlbnQgaW4KK3RoYXQgZGlyZWN0b3J5LjwvcD4KKworPHA+VEhFIEFCT1VUUywgRkVBVFVSRSBMSUNFTlNFUywgQU5EIEZFQVRVUkUgVVBEQVRFIExJQ0VOU0VTIE1BWSBSRUZFUiBUTyBUSEUgRVBMIE9SIE9USEVSIExJQ0VOU0UgQUdSRUVNRU5UUywgTk9USUNFUyBPUiBURVJNUyBBTkQgQ09ORElUSU9OUy4gIFNPTUUgT0YgVEhFU0UKK09USEVSIExJQ0VOU0UgQUdSRUVNRU5UUyBNQVkgSU5DTFVERSAoQlVUIEFSRSBOT1QgTElNSVRFRCBUTyk6PC9wPgorCis8dWw+CisgICAgICAgPGxpPkNvbW1vbiBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMCAoYXZhaWxhYmxlIGF0IDxhIGhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvY3BsLXYxMC5odG1sIj5odHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2NwbC12MTAuaHRtbDwvYT4pPC9saT4KKyAgICAgICA8bGk+QXBhY2hlIFNvZnR3YXJlIExpY2Vuc2UgMS4xIChhdmFpbGFibGUgYXQgPGEgaHJlZj0iaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UiPmh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFPC9hPik8L2xpPgorICAgICAgIDxsaT5BcGFjaGUgU29mdHdhcmUgTGljZW5zZSAyLjAgKGF2YWlsYWJsZSBhdCA8YSBocmVmPSJodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAiPmh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMDwvYT4pPC9saT4KKyAgICAgICA8bGk+TWV0cm8gTGluayBQdWJsaWMgTGljZW5zZSAxLjAwIChhdmFpbGFibGUgYXQgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuZ3JvdXAub3JnL29wZW5tb3RpZi9zdXBwb3J0ZXJzL21ldHJvbGluay9saWNlbnNlLmh0bWwiPmh0dHA6Ly93d3cub3Blbmdyb3VwLm9yZy9vcGVubW90aWYvc3VwcG9ydGVycy9tZXRyb2xpbmsvbGljZW5zZS5odG1sPC9hPik8L2xpPgorICAgICAgIDxsaT5Nb3ppbGxhIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4xIChhdmFpbGFibGUgYXQgPGEgaHJlZj0iaHR0cDovL3d3dy5tb3ppbGxhLm9yZy9NUEwvTVBMLTEuMS5odG1sIj5odHRwOi8vd3d3Lm1vemlsbGEub3JnL01QTC9NUEwtMS4xLmh0bWw8L2E+KTwvbGk+Cis8L3VsPgorCis8cD5JVCBJUyBZT1VSIE9CTElHQVRJT04gVE8gUkVBRCBBTkQgQUNDRVBUIEFMTCBTVUNIIFRFUk1TIEFORCBDT05ESVRJT05TIFBSSU9SIFRPIFVTRSBPRiBUSEUgQ09OVEVOVC4gIElmIG5vIEFib3V0LCBGZWF0dXJlIExpY2Vuc2UsIG9yIEZlYXR1cmUgVXBkYXRlIExpY2Vuc2UgaXMgcHJvdmlkZWQsIHBsZWFzZQorY29udGFjdCB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uIHRvIGRldGVybWluZSB3aGF0IHRlcm1zIGFuZCBjb25kaXRpb25zIGdvdmVybiB0aGF0IHBhcnRpY3VsYXIgQ29udGVudC48L3A+CisKKworPGgzPlVzZSBvZiBQcm92aXNpb25pbmcgVGVjaG5vbG9neTwvaDM+CisKKzxwPlRoZSBFY2xpcHNlIEZvdW5kYXRpb24gbWFrZXMgYXZhaWxhYmxlIHByb3Zpc2lvbmluZyBzb2Z0d2FyZSwgZXhhbXBsZXMgb2Ygd2hpY2ggaW5jbHVkZSwgYnV0IGFyZSBub3QgbGltaXRlZCB0bywgcDIgYW5kIHRoZSBFY2xpcHNlCisgICBVcGRhdGUgTWFuYWdlciAoJnF1b3Q7UHJvdmlzaW9uaW5nIFRlY2hub2xvZ3kmcXVvdDspIGZvciB0aGUgcHVycG9zZSBvZiBhbGxvd2luZyB1c2VycyB0byBpbnN0YWxsIHNvZnR3YXJlLCBkb2N1bWVudGF0aW9uLCBpbmZvcm1hdGlvbiBhbmQvb3IKKyAgIG90aGVyIG1hdGVyaWFscyAoY29sbGVjdGl2ZWx5ICZxdW90O0luc3RhbGxhYmxlIFNvZnR3YXJlJnF1b3Q7KS4gVGhpcyBjYXBhYmlsaXR5IGlzIHByb3ZpZGVkIHdpdGggdGhlIGludGVudCBvZiBhbGxvd2luZyBzdWNoIHVzZXJzIHRvCisgICBpbnN0YWxsLCBleHRlbmQgYW5kIHVwZGF0ZSBFY2xpcHNlLWJhc2VkIHByb2R1Y3RzLiBJbmZvcm1hdGlvbiBhYm91dCBwYWNrYWdpbmcgSW5zdGFsbGFibGUgU29mdHdhcmUgaXMgYXZhaWxhYmxlIGF0IDxhCisgICAgICAgaHJlZj0iaHR0cDovL2VjbGlwc2Uub3JnL2VxdWlub3gvcDIvcmVwb3NpdG9yeV9wYWNrYWdpbmcuaHRtbCI+aHR0cDovL2VjbGlwc2Uub3JnL2VxdWlub3gvcDIvcmVwb3NpdG9yeV9wYWNrYWdpbmcuaHRtbDwvYT4KKyAgICgmcXVvdDtTcGVjaWZpY2F0aW9uJnF1b3Q7KS48L3A+CisKKzxwPllvdSBtYXkgdXNlIFByb3Zpc2lvbmluZyBUZWNobm9sb2d5IHRvIGFsbG93IG90aGVyIHBhcnRpZXMgdG8gaW5zdGFsbCBJbnN0YWxsYWJsZSBTb2Z0d2FyZS4gWW91IHNoYWxsIGJlIHJlc3BvbnNpYmxlIGZvciBlbmFibGluZyB0aGUKKyAgIGFwcGxpY2FibGUgbGljZW5zZSBhZ3JlZW1lbnRzIHJlbGF0aW5nIHRvIHRoZSBJbnN0YWxsYWJsZSBTb2Z0d2FyZSB0byBiZSBwcmVzZW50ZWQgdG8sIGFuZCBhY2NlcHRlZCBieSwgdGhlIHVzZXJzIG9mIHRoZSBQcm92aXNpb25pbmcgVGVjaG5vbG9neQorICAgaW4gYWNjb3JkYW5jZSB3aXRoIHRoZSBTcGVjaWZpY2F0aW9uLiBCeSB1c2luZyBQcm92aXNpb25pbmcgVGVjaG5vbG9neSBpbiBzdWNoIGEgbWFubmVyIGFuZCBtYWtpbmcgaXQgYXZhaWxhYmxlIGluIGFjY29yZGFuY2Ugd2l0aCB0aGUKKyAgIFNwZWNpZmljYXRpb24sIHlvdSBmdXJ0aGVyIGFja25vd2xlZGdlIHlvdXIgYWdyZWVtZW50IHRvLCBhbmQgdGhlIGFjcXVpc2l0aW9uIG9mIGFsbCBuZWNlc3NhcnkgcmlnaHRzIHRvIHBlcm1pdCB0aGUgZm9sbG93aW5nOjwvcD4KKworPG9sPgorICAgICAgIDxsaT5BIHNlcmllcyBvZiBhY3Rpb25zIG1heSBvY2N1ciAoJnF1b3Q7UHJvdmlzaW9uaW5nIFByb2Nlc3MmcXVvdDspIGluIHdoaWNoIGEgdXNlciBtYXkgZXhlY3V0ZSB0aGUgUHJvdmlzaW9uaW5nIFRlY2hub2xvZ3kKKyAgICAgICBvbiBhIG1hY2hpbmUgKCZxdW90O1RhcmdldCBNYWNoaW5lJnF1b3Q7KSB3aXRoIHRoZSBpbnRlbnQgb2YgaW5zdGFsbGluZywgZXh0ZW5kaW5nIG9yIHVwZGF0aW5nIHRoZSBmdW5jdGlvbmFsaXR5IG9mIGFuIEVjbGlwc2UtYmFzZWQKKyAgICAgICBwcm9kdWN0LjwvbGk+CisgICAgICAgPGxpPkR1cmluZyB0aGUgUHJvdmlzaW9uaW5nIFByb2Nlc3MsIHRoZSBQcm92aXNpb25pbmcgVGVjaG5vbG9neSBtYXkgY2F1c2UgdGhpcmQgcGFydHkgSW5zdGFsbGFibGUgU29mdHdhcmUgb3IgYSBwb3J0aW9uIHRoZXJlb2YgdG8gYmUKKyAgICAgICBhY2Nlc3NlZCBhbmQgY29waWVkIHRvIHRoZSBUYXJnZXQgTWFjaGluZS48L2xpPgorICAgICAgIDxsaT5QdXJzdWFudCB0byB0aGUgU3BlY2lmaWNhdGlvbiwgeW91IHdpbGwgcHJvdmlkZSB0byB0aGUgdXNlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgdGhhdCBnb3Zlcm4gdGhlIHVzZSBvZiB0aGUgSW5zdGFsbGFibGUKKyAgICAgICBTb2Z0d2FyZSAoJnF1b3Q7SW5zdGFsbGFibGUgU29mdHdhcmUgQWdyZWVtZW50JnF1b3Q7KSBhbmQgc3VjaCBJbnN0YWxsYWJsZSBTb2Z0d2FyZSBBZ3JlZW1lbnQgc2hhbGwgYmUgYWNjZXNzZWQgZnJvbSB0aGUgVGFyZ2V0CisgICAgICAgTWFjaGluZSBpbiBhY2NvcmRhbmNlIHdpdGggdGhlIFNwZWNpZmljYXRpb24uIFN1Y2ggSW5zdGFsbGFibGUgU29mdHdhcmUgQWdyZWVtZW50IG11c3QgaW5mb3JtIHRoZSB1c2VyIG9mIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyB0aGF0IGdvdmVybgorICAgICAgIHRoZSBJbnN0YWxsYWJsZSBTb2Z0d2FyZSBhbmQgbXVzdCBzb2xpY2l0IGFjY2VwdGFuY2UgYnkgdGhlIGVuZCB1c2VyIGluIHRoZSBtYW5uZXIgcHJlc2NyaWJlZCBpbiBzdWNoIEluc3RhbGxhYmxlIFNvZnR3YXJlIEFncmVlbWVudC4gVXBvbiBzdWNoCisgICAgICAgaW5kaWNhdGlvbiBvZiBhZ3JlZW1lbnQgYnkgdGhlIHVzZXIsIHRoZSBwcm92aXNpb25pbmcgVGVjaG5vbG9neSB3aWxsIGNvbXBsZXRlIGluc3RhbGxhdGlvbiBvZiB0aGUgSW5zdGFsbGFibGUgU29mdHdhcmUuPC9saT4KKzwvb2w+CisKKzxoMz5DcnlwdG9ncmFwaHk8L2gzPgorCis8cD5Db250ZW50IG1heSBjb250YWluIGVuY3J5cHRpb24gc29mdHdhcmUuIFRoZSBjb3VudHJ5IGluIHdoaWNoIHlvdSBhcmUgY3VycmVudGx5IG1heSBoYXZlIHJlc3RyaWN0aW9ucyBvbiB0aGUgaW1wb3J0LCBwb3NzZXNzaW9uLCBhbmQgdXNlLCBhbmQvb3IgcmUtZXhwb3J0IHRvCisgICBhbm90aGVyIGNvdW50cnksIG9mIGVuY3J5cHRpb24gc29mdHdhcmUuIEJFRk9SRSB1c2luZyBhbnkgZW5jcnlwdGlvbiBzb2Z0d2FyZSwgcGxlYXNlIGNoZWNrIHRoZSBjb3VudHJ5J3MgbGF3cywgcmVndWxhdGlvbnMgYW5kIHBvbGljaWVzIGNvbmNlcm5pbmcgdGhlIGltcG9ydCwKKyAgIHBvc3Nlc3Npb24sIG9yIHVzZSwgYW5kIHJlLWV4cG9ydCBvZiBlbmNyeXB0aW9uIHNvZnR3YXJlLCB0byBzZWUgaWYgdGhpcyBpcyBwZXJtaXR0ZWQuPC9wPgorCis8cD48c21hbGw+SmF2YSBhbmQgYWxsIEphdmEtYmFzZWQgdHJhZGVtYXJrcyBhcmUgdHJhZGVtYXJrcyBvZiBPcmFjbGUgQ29ycG9yYXRpb24gaW4gdGhlIFVuaXRlZCBTdGF0ZXMsIG90aGVyIGNvdW50cmllcywgb3IgYm90aC48L3NtYWxsPjwvcD4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLnN0ZW0ubW9kZWxzLmVwaWRlbWlvbG9neS5mZWF0dXJlLy5wcm9qZWN0IGIvZmVhdHVyZXMvb3JnLmVjbGlwc2Uuc3RlbS5tb2RlbHMuZXBpZGVtaW9sb2d5LmZlYXR1cmUvLnByb2plY3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTFjMTJmNQotLS0gL2Rldi9udWxsCisrKyBiL2ZlYXR1cmVzL29yZy5lY2xpcHNlLnN0ZW0ubW9kZWxzLmVwaWRlbWlvbG9neS5mZWF0dXJlLy5wcm9qZWN0CkBAIC0wLDAgKzEsMTcgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8cHJvamVjdERlc2NyaXB0aW9uPgorCTxuYW1lPm9yZy5lY2xpcHNlLnN0ZW0ubW9kZWxzLmVwaWRlbWlvbG9neS5mZWF0dXJlPC9uYW1lPgorCTxjb21tZW50PjwvY29tbWVudD4KKwk8cHJvamVjdHM+CisJPC9wcm9qZWN0cz4KKwk8YnVpbGRTcGVjPgorCQk8YnVpbGRDb21tYW5kPgorCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLkZlYXR1cmVCdWlsZGVyPC9uYW1lPgorCQkJPGFyZ3VtZW50cz4KKwkJCTwvYXJndW1lbnRzPgorCQk8L2J1aWxkQ29tbWFuZD4KKwk8L2J1aWxkU3BlYz4KKwk8bmF0dXJlcz4KKwkJPG5hdHVyZT5vcmcuZWNsaXBzZS5wZGUuRmVhdHVyZU5hdHVyZTwvbmF0dXJlPgorCTwvbmF0dXJlcz4KKzwvcHJvamVjdERlc2NyaXB0aW9uPgpkaWZmIC0tZ2l0IGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uuc3RlbS5tb2RlbHMuZXBpZGVtaW9sb2d5LmZlYXR1cmUvYnVpbGQucHJvcGVydGllcyBiL2ZlYXR1cmVzL29yZy5lY2xpcHNlLnN0ZW0ubW9kZWxzLmVwaWRlbWlvbG9neS5mZWF0dXJlL2J1aWxkLnByb3BlcnRpZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjc0YWY4NgotLS0gL2Rldi9udWxsCisrKyBiL2ZlYXR1cmVzL29yZy5lY2xpcHNlLnN0ZW0ubW9kZWxzLmVwaWRlbWlvbG9neS5mZWF0dXJlL2J1aWxkLnByb3BlcnRpZXMKQEAgLTAsMCArMSw0IEBACitiaW4uaW5jbHVkZXMgPSBmZWF0dXJlLnhtbCxcCisgICAgICAgICAgICAgICBmZWF0dXJlLnByb3BlcnRpZXMsXAorICAgICAgICAgICAgICAgZXBsLXYxMC5odG1sLFwKKyAgICAgICAgICAgICAgIGxpY2Vuc2UuaHRtbApkaWZmIC0tZ2l0IGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uuc3RlbS5tb2RlbHMuZXBpZGVtaW9sb2d5LmZlYXR1cmUvZXBsLXYxMC5odG1sIGIvZmVhdHVyZXMvb3JnLmVjbGlwc2Uuc3RlbS5tb2RlbHMuZXBpZGVtaW9sb2d5LmZlYXR1cmUvZXBsLXYxMC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVkNGIxOTYKLS0tIC9kZXYvbnVsbAorKysgYi9mZWF0dXJlcy9vcmcuZWNsaXBzZS5zdGVtLm1vZGVscy5lcGlkZW1pb2xvZ3kuZmVhdHVyZS9lcGwtdjEwLmh0bWwKQEAgLTAsMCArMSwzMjggQEAKKzxodG1sIHhtbG5zOm89InVybjpzY2hlbWFzLW1pY3Jvc29mdC1jb206b2ZmaWNlOm9mZmljZSIKK3htbG5zOnc9InVybjpzY2hlbWFzLW1pY3Jvc29mdC1jb206b2ZmaWNlOndvcmQiCit4bWxucz0iaHR0cDovL3d3dy53My5vcmcvVFIvUkVDLWh0bWw0MCI+CisKKzxoZWFkPgorPG1ldGEgaHR0cC1lcXVpdj1Db250ZW50LVR5cGUgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PXdpbmRvd3MtMTI1MiI+Cis8bWV0YSBuYW1lPVByb2dJZCBjb250ZW50PVdvcmQuRG9jdW1lbnQ+Cis8bWV0YSBuYW1lPUdlbmVyYXRvciBjb250ZW50PSJNaWNyb3NvZnQgV29yZCA5Ij4KKzxtZXRhIG5hbWU9T3JpZ2luYXRvciBjb250ZW50PSJNaWNyb3NvZnQgV29yZCA5Ij4KKzxsaW5rIHJlbD1GaWxlLUxpc3QKK2hyZWY9Ii4vRWNsaXBzZSUyMEVQTCUyMDIwMDNfMTFfMTAlMjBGaW5hbF9maWxlcy9maWxlbGlzdC54bWwiPgorPHRpdGxlPkVjbGlwc2UgUHVibGljIExpY2Vuc2UgLSBWZXJzaW9uIDEuMDwvdGl0bGU+Cis8IS0tW2lmIGd0ZSBtc28gOV0+PHhtbD4KKyA8bzpEb2N1bWVudFByb3BlcnRpZXM+CisgIDxvOlJldmlzaW9uPjI8L286UmV2aXNpb24+CisgIDxvOlRvdGFsVGltZT4zPC9vOlRvdGFsVGltZT4KKyAgPG86Q3JlYXRlZD4yMDA0LTAzLTA1VDIzOjAzOjAwWjwvbzpDcmVhdGVkPgorICA8bzpMYXN0U2F2ZWQ+MjAwNC0wMy0wNVQyMzowMzowMFo8L286TGFzdFNhdmVkPgorICA8bzpQYWdlcz40PC9vOlBhZ2VzPgorICA8bzpXb3Jkcz4xNjI2PC9vOldvcmRzPgorICA8bzpDaGFyYWN0ZXJzPjkyNzA8L286Q2hhcmFjdGVycz4KKyAgIDxvOkxpbmVzPjc3PC9vOkxpbmVzPgorICA8bzpQYXJhZ3JhcGhzPjE4PC9vOlBhcmFncmFwaHM+CisgIDxvOkNoYXJhY3RlcnNXaXRoU3BhY2VzPjExMzg0PC9vOkNoYXJhY3RlcnNXaXRoU3BhY2VzPgorICA8bzpWZXJzaW9uPjkuNDQwMjwvbzpWZXJzaW9uPgorIDwvbzpEb2N1bWVudFByb3BlcnRpZXM+Cis8L3htbD48IVtlbmRpZl0tLT48IS0tW2lmIGd0ZSBtc28gOV0+PHhtbD4KKyA8dzpXb3JkRG9jdW1lbnQ+CisgIDx3OlRyYWNrUmV2aXNpb25zLz4KKyA8L3c6V29yZERvY3VtZW50PgorPC94bWw+PCFbZW5kaWZdLS0+Cis8c3R5bGU+Cis8IS0tCisgLyogRm9udCBEZWZpbml0aW9ucyAqLworQGZvbnQtZmFjZQorCXtmb250LWZhbWlseTpUYWhvbWE7CisJcGFub3NlLTE6MiAxMSA2IDQgMyA1IDQgNCAyIDQ7CisJbXNvLWZvbnQtY2hhcnNldDowOworCW1zby1nZW5lcmljLWZvbnQtZmFtaWx5OnN3aXNzOworCW1zby1mb250LXBpdGNoOnZhcmlhYmxlOworCW1zby1mb250LXNpZ25hdHVyZTo1NTM2Nzk0OTUgLTIxNDc0ODM2NDggOCAwIDY2MDQ3IDA7fQorIC8qIFN0eWxlIERlZmluaXRpb25zICovCitwLk1zb05vcm1hbCwgbGkuTXNvTm9ybWFsLCBkaXYuTXNvTm9ybWFsCisJe21zby1zdHlsZS1wYXJlbnQ6IiI7CisJbWFyZ2luOjBpbjsKKwltYXJnaW4tYm90dG9tOi4wMDAxcHQ7CisJbXNvLXBhZ2luYXRpb246d2lkb3ctb3JwaGFuOworCWZvbnQtc2l6ZToxMi4wcHQ7CisJZm9udC1mYW1pbHk6IlRpbWVzIE5ldyBSb21hbiI7CisJbXNvLWZhcmVhc3QtZm9udC1mYW1pbHk6IlRpbWVzIE5ldyBSb21hbiI7fQorcAorCXttYXJnaW4tcmlnaHQ6MGluOworCW1zby1tYXJnaW4tdG9wLWFsdDphdXRvOworCW1zby1tYXJnaW4tYm90dG9tLWFsdDphdXRvOworCW1hcmdpbi1sZWZ0OjBpbjsKKwltc28tcGFnaW5hdGlvbjp3aWRvdy1vcnBoYW47CisJZm9udC1zaXplOjEyLjBwdDsKKwlmb250LWZhbWlseToiVGltZXMgTmV3IFJvbWFuIjsKKwltc28tZmFyZWFzdC1mb250LWZhbWlseToiVGltZXMgTmV3IFJvbWFuIjt9CitwLkJhbGxvb25UZXh0LCBsaS5CYWxsb29uVGV4dCwgZGl2LkJhbGxvb25UZXh0CisJe21zby1zdHlsZS1uYW1lOiJCYWxsb29uIFRleHQiOworCW1hcmdpbjowaW47CisJbWFyZ2luLWJvdHRvbTouMDAwMXB0OworCW1zby1wYWdpbmF0aW9uOndpZG93LW9ycGhhbjsKKwlmb250LXNpemU6OC4wcHQ7CisJZm9udC1mYW1pbHk6VGFob21hOworCW1zby1mYXJlYXN0LWZvbnQtZmFtaWx5OiJUaW1lcyBOZXcgUm9tYW4iO30KK0BwYWdlIFNlY3Rpb24xCisJe3NpemU6OC41aW4gMTEuMGluOworCW1hcmdpbjoxLjBpbiAxLjI1aW4gMS4waW4gMS4yNWluOworCW1zby1oZWFkZXItbWFyZ2luOi41aW47CisJbXNvLWZvb3Rlci1tYXJnaW46LjVpbjsKKwltc28tcGFwZXItc291cmNlOjA7fQorZGl2LlNlY3Rpb24xCisJe3BhZ2U6U2VjdGlvbjE7fQorLS0+Cis8L3N0eWxlPgorPC9oZWFkPgorCis8Ym9keSBsYW5nPUVOLVVTIHN0eWxlPSd0YWItaW50ZXJ2YWw6LjVpbic+CisKKzxkaXYgY2xhc3M9U2VjdGlvbjE+CisKKzxwIGFsaWduPWNlbnRlciBzdHlsZT0ndGV4dC1hbGlnbjpjZW50ZXInPjxiPkVjbGlwc2UgUHVibGljIExpY2Vuc2UgLSB2IDEuMDwvYj4KKzwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPlRIRSBBQ0NPTVBBTllJTkcgUFJPR1JBTSBJUyBQUk9WSURFRCBVTkRFUgorVEhFIFRFUk1TIE9GIFRISVMgRUNMSVBTRSBQVUJMSUMgTElDRU5TRSAoJnF1b3Q7QUdSRUVNRU5UJnF1b3Q7KS4gQU5ZIFVTRSwKK1JFUFJPRFVDVElPTiBPUiBESVNUUklCVVRJT04gT0YgVEhFIFBST0dSQU0gQ09OU1RJVFVURVMgUkVDSVBJRU5UJ1MgQUNDRVBUQU5DRQorT0YgVEhJUyBBR1JFRU1FTlQuPC9zcGFuPiA8L3A+CisKKzxwPjxiPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4xLiBERUZJTklUSU9OUzwvc3Bhbj48L2I+IDwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPiZxdW90O0NvbnRyaWJ1dGlvbiZxdW90OyBtZWFuczo8L3NwYW4+IDwvcD4KKworPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YSkKK2luIHRoZSBjYXNlIG9mIHRoZSBpbml0aWFsIENvbnRyaWJ1dG9yLCB0aGUgaW5pdGlhbCBjb2RlIGFuZCBkb2N1bWVudGF0aW9uCitkaXN0cmlidXRlZCB1bmRlciB0aGlzIEFncmVlbWVudCwgYW5kPGJyIGNsZWFyPWxlZnQ+CitiKSBpbiB0aGUgY2FzZSBvZiBlYWNoIHN1YnNlcXVlbnQgQ29udHJpYnV0b3I6PC9zcGFuPjwvcD4KKworPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+aSkKK2NoYW5nZXMgdG8gdGhlIFByb2dyYW0sIGFuZDwvc3Bhbj48L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmlpKQorYWRkaXRpb25zIHRvIHRoZSBQcm9ncmFtOzwvc3Bhbj48L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPndoZXJlCitzdWNoIGNoYW5nZXMgYW5kL29yIGFkZGl0aW9ucyB0byB0aGUgUHJvZ3JhbSBvcmlnaW5hdGUgZnJvbSBhbmQgYXJlIGRpc3RyaWJ1dGVkCitieSB0aGF0IHBhcnRpY3VsYXIgQ29udHJpYnV0b3IuIEEgQ29udHJpYnV0aW9uICdvcmlnaW5hdGVzJyBmcm9tIGEgQ29udHJpYnV0b3IKK2lmIGl0IHdhcyBhZGRlZCB0byB0aGUgUHJvZ3JhbSBieSBzdWNoIENvbnRyaWJ1dG9yIGl0c2VsZiBvciBhbnlvbmUgYWN0aW5nIG9uCitzdWNoIENvbnRyaWJ1dG9yJ3MgYmVoYWxmLiBDb250cmlidXRpb25zIGRvIG5vdCBpbmNsdWRlIGFkZGl0aW9ucyB0byB0aGUKK1Byb2dyYW0gd2hpY2g6IChpKSBhcmUgc2VwYXJhdGUgbW9kdWxlcyBvZiBzb2Z0d2FyZSBkaXN0cmlidXRlZCBpbiBjb25qdW5jdGlvbgord2l0aCB0aGUgUHJvZ3JhbSB1bmRlciB0aGVpciBvd24gbGljZW5zZSBhZ3JlZW1lbnQsIGFuZCAoaWkpIGFyZSBub3QgZGVyaXZhdGl2ZQord29ya3Mgb2YgdGhlIFByb2dyYW0uIDwvc3Bhbj48L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4mcXVvdDtDb250cmlidXRvciZxdW90OyBtZWFucyBhbnkgcGVyc29uIG9yCitlbnRpdHkgdGhhdCBkaXN0cmlidXRlcyB0aGUgUHJvZ3JhbS48L3NwYW4+IDwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPiZxdW90O0xpY2Vuc2VkIFBhdGVudHMgJnF1b3Q7IG1lYW4gcGF0ZW50CitjbGFpbXMgbGljZW5zYWJsZSBieSBhIENvbnRyaWJ1dG9yIHdoaWNoIGFyZSBuZWNlc3NhcmlseSBpbmZyaW5nZWQgYnkgdGhlIHVzZQorb3Igc2FsZSBvZiBpdHMgQ29udHJpYnV0aW9uIGFsb25lIG9yIHdoZW4gY29tYmluZWQgd2l0aCB0aGUgUHJvZ3JhbS4gPC9zcGFuPjwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPiZxdW90O1Byb2dyYW0mcXVvdDsgbWVhbnMgdGhlIENvbnRyaWJ1dGlvbnMKK2Rpc3RyaWJ1dGVkIGluIGFjY29yZGFuY2Ugd2l0aCB0aGlzIEFncmVlbWVudC48L3NwYW4+IDwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPiZxdW90O1JlY2lwaWVudCZxdW90OyBtZWFucyBhbnlvbmUgd2hvCityZWNlaXZlcyB0aGUgUHJvZ3JhbSB1bmRlciB0aGlzIEFncmVlbWVudCwgaW5jbHVkaW5nIGFsbCBDb250cmlidXRvcnMuPC9zcGFuPiA8L3A+CisKKzxwPjxiPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4yLiBHUkFOVCBPRiBSSUdIVFM8L3NwYW4+PC9iPiA8L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmEpCitTdWJqZWN0IHRvIHRoZSB0ZXJtcyBvZiB0aGlzIEFncmVlbWVudCwgZWFjaCBDb250cmlidXRvciBoZXJlYnkgZ3JhbnRzIFJlY2lwaWVudAorYSBub24tZXhjbHVzaXZlLCB3b3JsZHdpZGUsIHJveWFsdHktZnJlZSBjb3B5cmlnaHQgbGljZW5zZSB0bzxzcGFuCitzdHlsZT0nY29sb3I6cmVkJz4gPC9zcGFuPnJlcHJvZHVjZSwgcHJlcGFyZSBkZXJpdmF0aXZlIHdvcmtzIG9mLCBwdWJsaWNseQorZGlzcGxheSwgcHVibGljbHkgcGVyZm9ybSwgZGlzdHJpYnV0ZSBhbmQgc3VibGljZW5zZSB0aGUgQ29udHJpYnV0aW9uIG9mIHN1Y2gKK0NvbnRyaWJ1dG9yLCBpZiBhbnksIGFuZCBzdWNoIGRlcml2YXRpdmUgd29ya3MsIGluIHNvdXJjZSBjb2RlIGFuZCBvYmplY3QgY29kZQorZm9ybS48L3NwYW4+PC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5iKQorU3ViamVjdCB0byB0aGUgdGVybXMgb2YgdGhpcyBBZ3JlZW1lbnQsIGVhY2ggQ29udHJpYnV0b3IgaGVyZWJ5IGdyYW50cworUmVjaXBpZW50IGEgbm9uLWV4Y2x1c2l2ZSwgd29ybGR3aWRlLDxzcGFuIHN0eWxlPSdjb2xvcjpncmVlbic+IDwvc3Bhbj5yb3lhbHR5LWZyZWUKK3BhdGVudCBsaWNlbnNlIHVuZGVyIExpY2Vuc2VkIFBhdGVudHMgdG8gbWFrZSwgdXNlLCBzZWxsLCBvZmZlciB0byBzZWxsLCBpbXBvcnQKK2FuZCBvdGhlcndpc2UgdHJhbnNmZXIgdGhlIENvbnRyaWJ1dGlvbiBvZiBzdWNoIENvbnRyaWJ1dG9yLCBpZiBhbnksIGluIHNvdXJjZQorY29kZSBhbmQgb2JqZWN0IGNvZGUgZm9ybS4gVGhpcyBwYXRlbnQgbGljZW5zZSBzaGFsbCBhcHBseSB0byB0aGUgY29tYmluYXRpb24KK29mIHRoZSBDb250cmlidXRpb24gYW5kIHRoZSBQcm9ncmFtIGlmLCBhdCB0aGUgdGltZSB0aGUgQ29udHJpYnV0aW9uIGlzIGFkZGVkCitieSB0aGUgQ29udHJpYnV0b3IsIHN1Y2ggYWRkaXRpb24gb2YgdGhlIENvbnRyaWJ1dGlvbiBjYXVzZXMgc3VjaCBjb21iaW5hdGlvbgordG8gYmUgY292ZXJlZCBieSB0aGUgTGljZW5zZWQgUGF0ZW50cy4gVGhlIHBhdGVudCBsaWNlbnNlIHNoYWxsIG5vdCBhcHBseSB0bworYW55IG90aGVyIGNvbWJpbmF0aW9ucyB3aGljaCBpbmNsdWRlIHRoZSBDb250cmlidXRpb24uIE5vIGhhcmR3YXJlIHBlciBzZSBpcworbGljZW5zZWQgaGVyZXVuZGVyLiA8L3NwYW4+PC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5jKQorUmVjaXBpZW50IHVuZGVyc3RhbmRzIHRoYXQgYWx0aG91Z2ggZWFjaCBDb250cmlidXRvciBncmFudHMgdGhlIGxpY2Vuc2VzIHRvIGl0cworQ29udHJpYnV0aW9ucyBzZXQgZm9ydGggaGVyZWluLCBubyBhc3N1cmFuY2VzIGFyZSBwcm92aWRlZCBieSBhbnkgQ29udHJpYnV0b3IKK3RoYXQgdGhlIFByb2dyYW0gZG9lcyBub3QgaW5mcmluZ2UgdGhlIHBhdGVudCBvciBvdGhlciBpbnRlbGxlY3R1YWwgcHJvcGVydHkKK3JpZ2h0cyBvZiBhbnkgb3RoZXIgZW50aXR5LiBFYWNoIENvbnRyaWJ1dG9yIGRpc2NsYWltcyBhbnkgbGlhYmlsaXR5IHRvIFJlY2lwaWVudAorZm9yIGNsYWltcyBicm91Z2h0IGJ5IGFueSBvdGhlciBlbnRpdHkgYmFzZWQgb24gaW5mcmluZ2VtZW50IG9mIGludGVsbGVjdHVhbAorcHJvcGVydHkgcmlnaHRzIG9yIG90aGVyd2lzZS4gQXMgYSBjb25kaXRpb24gdG8gZXhlcmNpc2luZyB0aGUgcmlnaHRzIGFuZAorbGljZW5zZXMgZ3JhbnRlZCBoZXJldW5kZXIsIGVhY2ggUmVjaXBpZW50IGhlcmVieSBhc3N1bWVzIHNvbGUgcmVzcG9uc2liaWxpdHkKK3RvIHNlY3VyZSBhbnkgb3RoZXIgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBuZWVkZWQsIGlmIGFueS4gRm9yIGV4YW1wbGUsCitpZiBhIHRoaXJkIHBhcnR5IHBhdGVudCBsaWNlbnNlIGlzIHJlcXVpcmVkIHRvIGFsbG93IFJlY2lwaWVudCB0byBkaXN0cmlidXRlCit0aGUgUHJvZ3JhbSwgaXQgaXMgUmVjaXBpZW50J3MgcmVzcG9uc2liaWxpdHkgdG8gYWNxdWlyZSB0aGF0IGxpY2Vuc2UgYmVmb3JlCitkaXN0cmlidXRpbmcgdGhlIFByb2dyYW0uPC9zcGFuPjwvcD4KKworPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+ZCkKK0VhY2ggQ29udHJpYnV0b3IgcmVwcmVzZW50cyB0aGF0IHRvIGl0cyBrbm93bGVkZ2UgaXQgaGFzIHN1ZmZpY2llbnQgY29weXJpZ2h0CityaWdodHMgaW4gaXRzIENvbnRyaWJ1dGlvbiwgaWYgYW55LCB0byBncmFudCB0aGUgY29weXJpZ2h0IGxpY2Vuc2Ugc2V0IGZvcnRoIGluCit0aGlzIEFncmVlbWVudC4gPC9zcGFuPjwvcD4KKworPHA+PGI+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPjMuIFJFUVVJUkVNRU5UUzwvc3Bhbj48L2I+IDwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkEgQ29udHJpYnV0b3IgbWF5IGNob29zZSB0byBkaXN0cmlidXRlIHRoZQorUHJvZ3JhbSBpbiBvYmplY3QgY29kZSBmb3JtIHVuZGVyIGl0cyBvd24gbGljZW5zZSBhZ3JlZW1lbnQsIHByb3ZpZGVkIHRoYXQ6PC9zcGFuPgorPC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5hKQoraXQgY29tcGxpZXMgd2l0aCB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhpcyBBZ3JlZW1lbnQ7IGFuZDwvc3Bhbj48L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmIpCitpdHMgbGljZW5zZSBhZ3JlZW1lbnQ6PC9zcGFuPjwvcD4KKworPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+aSkKK2VmZmVjdGl2ZWx5IGRpc2NsYWltcyBvbiBiZWhhbGYgb2YgYWxsIENvbnRyaWJ1dG9ycyBhbGwgd2FycmFudGllcyBhbmQKK2NvbmRpdGlvbnMsIGV4cHJlc3MgYW5kIGltcGxpZWQsIGluY2x1ZGluZyB3YXJyYW50aWVzIG9yIGNvbmRpdGlvbnMgb2YgdGl0bGUKK2FuZCBub24taW5mcmluZ2VtZW50LCBhbmQgaW1wbGllZCB3YXJyYW50aWVzIG9yIGNvbmRpdGlvbnMgb2YgbWVyY2hhbnRhYmlsaXR5CithbmQgZml0bmVzcyBmb3IgYSBwYXJ0aWN1bGFyIHB1cnBvc2U7IDwvc3Bhbj48L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmlpKQorZWZmZWN0aXZlbHkgZXhjbHVkZXMgb24gYmVoYWxmIG9mIGFsbCBDb250cmlidXRvcnMgYWxsIGxpYWJpbGl0eSBmb3IgZGFtYWdlcywKK2luY2x1ZGluZyBkaXJlY3QsIGluZGlyZWN0LCBzcGVjaWFsLCBpbmNpZGVudGFsIGFuZCBjb25zZXF1ZW50aWFsIGRhbWFnZXMsIHN1Y2gKK2FzIGxvc3QgcHJvZml0czsgPC9zcGFuPjwvcD4KKworPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+aWlpKQorc3RhdGVzIHRoYXQgYW55IHByb3Zpc2lvbnMgd2hpY2ggZGlmZmVyIGZyb20gdGhpcyBBZ3JlZW1lbnQgYXJlIG9mZmVyZWQgYnkgdGhhdAorQ29udHJpYnV0b3IgYWxvbmUgYW5kIG5vdCBieSBhbnkgb3RoZXIgcGFydHk7IGFuZDwvc3Bhbj48L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPml2KQorc3RhdGVzIHRoYXQgc291cmNlIGNvZGUgZm9yIHRoZSBQcm9ncmFtIGlzIGF2YWlsYWJsZSBmcm9tIHN1Y2ggQ29udHJpYnV0b3IsIGFuZAoraW5mb3JtcyBsaWNlbnNlZXMgaG93IHRvIG9idGFpbiBpdCBpbiBhIHJlYXNvbmFibGUgbWFubmVyIG9uIG9yIHRocm91Z2ggYQorbWVkaXVtIGN1c3RvbWFyaWx5IHVzZWQgZm9yIHNvZnR3YXJlIGV4Y2hhbmdlLjxzcGFuIHN0eWxlPSdjb2xvcjpibHVlJz4gPC9zcGFuPjwvc3Bhbj48L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5XaGVuIHRoZSBQcm9ncmFtIGlzIG1hZGUgYXZhaWxhYmxlIGluIHNvdXJjZQorY29kZSBmb3JtOjwvc3Bhbj4gPC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5hKQoraXQgbXVzdCBiZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGlzIEFncmVlbWVudDsgYW5kIDwvc3Bhbj48L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmIpIGEKK2NvcHkgb2YgdGhpcyBBZ3JlZW1lbnQgbXVzdCBiZSBpbmNsdWRlZCB3aXRoIGVhY2ggY29weSBvZiB0aGUgUHJvZ3JhbS4gPC9zcGFuPjwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkNvbnRyaWJ1dG9ycyBtYXkgbm90IHJlbW92ZSBvciBhbHRlciBhbnkKK2NvcHlyaWdodCBub3RpY2VzIGNvbnRhaW5lZCB3aXRoaW4gdGhlIFByb2dyYW0uIDwvc3Bhbj48L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5FYWNoIENvbnRyaWJ1dG9yIG11c3QgaWRlbnRpZnkgaXRzZWxmIGFzIHRoZQorb3JpZ2luYXRvciBvZiBpdHMgQ29udHJpYnV0aW9uLCBpZiBhbnksIGluIGEgbWFubmVyIHRoYXQgcmVhc29uYWJseSBhbGxvd3MKK3N1YnNlcXVlbnQgUmVjaXBpZW50cyB0byBpZGVudGlmeSB0aGUgb3JpZ2luYXRvciBvZiB0aGUgQ29udHJpYnV0aW9uLiA8L3NwYW4+PC9wPgorCis8cD48Yj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+NC4gQ09NTUVSQ0lBTCBESVNUUklCVVRJT048L3NwYW4+PC9iPiA8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5Db21tZXJjaWFsIGRpc3RyaWJ1dG9ycyBvZiBzb2Z0d2FyZSBtYXkKK2FjY2VwdCBjZXJ0YWluIHJlc3BvbnNpYmlsaXRpZXMgd2l0aCByZXNwZWN0IHRvIGVuZCB1c2VycywgYnVzaW5lc3MgcGFydG5lcnMKK2FuZCB0aGUgbGlrZS4gV2hpbGUgdGhpcyBsaWNlbnNlIGlzIGludGVuZGVkIHRvIGZhY2lsaXRhdGUgdGhlIGNvbW1lcmNpYWwgdXNlCitvZiB0aGUgUHJvZ3JhbSwgdGhlIENvbnRyaWJ1dG9yIHdobyBpbmNsdWRlcyB0aGUgUHJvZ3JhbSBpbiBhIGNvbW1lcmNpYWwKK3Byb2R1Y3Qgb2ZmZXJpbmcgc2hvdWxkIGRvIHNvIGluIGEgbWFubmVyIHdoaWNoIGRvZXMgbm90IGNyZWF0ZSBwb3RlbnRpYWwKK2xpYWJpbGl0eSBmb3Igb3RoZXIgQ29udHJpYnV0b3JzLiBUaGVyZWZvcmUsIGlmIGEgQ29udHJpYnV0b3IgaW5jbHVkZXMgdGhlCitQcm9ncmFtIGluIGEgY29tbWVyY2lhbCBwcm9kdWN0IG9mZmVyaW5nLCBzdWNoIENvbnRyaWJ1dG9yICgmcXVvdDtDb21tZXJjaWFsCitDb250cmlidXRvciZxdW90OykgaGVyZWJ5IGFncmVlcyB0byBkZWZlbmQgYW5kIGluZGVtbmlmeSBldmVyeSBvdGhlcgorQ29udHJpYnV0b3IgKCZxdW90O0luZGVtbmlmaWVkIENvbnRyaWJ1dG9yJnF1b3Q7KSBhZ2FpbnN0IGFueSBsb3NzZXMsIGRhbWFnZXMgYW5kCitjb3N0cyAoY29sbGVjdGl2ZWx5ICZxdW90O0xvc3NlcyZxdW90OykgYXJpc2luZyBmcm9tIGNsYWltcywgbGF3c3VpdHMgYW5kIG90aGVyCitsZWdhbCBhY3Rpb25zIGJyb3VnaHQgYnkgYSB0aGlyZCBwYXJ0eSBhZ2FpbnN0IHRoZSBJbmRlbW5pZmllZCBDb250cmlidXRvciB0bwordGhlIGV4dGVudCBjYXVzZWQgYnkgdGhlIGFjdHMgb3Igb21pc3Npb25zIG9mIHN1Y2ggQ29tbWVyY2lhbCBDb250cmlidXRvciBpbgorY29ubmVjdGlvbiB3aXRoIGl0cyBkaXN0cmlidXRpb24gb2YgdGhlIFByb2dyYW0gaW4gYSBjb21tZXJjaWFsIHByb2R1Y3QKK29mZmVyaW5nLiBUaGUgb2JsaWdhdGlvbnMgaW4gdGhpcyBzZWN0aW9uIGRvIG5vdCBhcHBseSB0byBhbnkgY2xhaW1zIG9yIExvc3NlcworcmVsYXRpbmcgdG8gYW55IGFjdHVhbCBvciBhbGxlZ2VkIGludGVsbGVjdHVhbCBwcm9wZXJ0eSBpbmZyaW5nZW1lbnQuIEluIG9yZGVyCit0byBxdWFsaWZ5LCBhbiBJbmRlbW5pZmllZCBDb250cmlidXRvciBtdXN0OiBhKSBwcm9tcHRseSBub3RpZnkgdGhlIENvbW1lcmNpYWwKK0NvbnRyaWJ1dG9yIGluIHdyaXRpbmcgb2Ygc3VjaCBjbGFpbSwgYW5kIGIpIGFsbG93IHRoZSBDb21tZXJjaWFsIENvbnRyaWJ1dG9yCit0byBjb250cm9sLCBhbmQgY29vcGVyYXRlIHdpdGggdGhlIENvbW1lcmNpYWwgQ29udHJpYnV0b3IgaW4sIHRoZSBkZWZlbnNlIGFuZAorYW55IHJlbGF0ZWQgc2V0dGxlbWVudCBuZWdvdGlhdGlvbnMuIFRoZSBJbmRlbW5pZmllZCBDb250cmlidXRvciBtYXkgcGFydGljaXBhdGUKK2luIGFueSBzdWNoIGNsYWltIGF0IGl0cyBvd24gZXhwZW5zZS48L3NwYW4+IDwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkZvciBleGFtcGxlLCBhIENvbnRyaWJ1dG9yIG1pZ2h0IGluY2x1ZGUgdGhlCitQcm9ncmFtIGluIGEgY29tbWVyY2lhbCBwcm9kdWN0IG9mZmVyaW5nLCBQcm9kdWN0IFguIFRoYXQgQ29udHJpYnV0b3IgaXMgdGhlbiBhCitDb21tZXJjaWFsIENvbnRyaWJ1dG9yLiBJZiB0aGF0IENvbW1lcmNpYWwgQ29udHJpYnV0b3IgdGhlbiBtYWtlcyBwZXJmb3JtYW5jZQorY2xhaW1zLCBvciBvZmZlcnMgd2FycmFudGllcyByZWxhdGVkIHRvIFByb2R1Y3QgWCwgdGhvc2UgcGVyZm9ybWFuY2UgY2xhaW1zIGFuZAord2FycmFudGllcyBhcmUgc3VjaCBDb21tZXJjaWFsIENvbnRyaWJ1dG9yJ3MgcmVzcG9uc2liaWxpdHkgYWxvbmUuIFVuZGVyIHRoaXMKK3NlY3Rpb24sIHRoZSBDb21tZXJjaWFsIENvbnRyaWJ1dG9yIHdvdWxkIGhhdmUgdG8gZGVmZW5kIGNsYWltcyBhZ2FpbnN0IHRoZQorb3RoZXIgQ29udHJpYnV0b3JzIHJlbGF0ZWQgdG8gdGhvc2UgcGVyZm9ybWFuY2UgY2xhaW1zIGFuZCB3YXJyYW50aWVzLCBhbmQgaWYgYQorY291cnQgcmVxdWlyZXMgYW55IG90aGVyIENvbnRyaWJ1dG9yIHRvIHBheSBhbnkgZGFtYWdlcyBhcyBhIHJlc3VsdCwgdGhlCitDb21tZXJjaWFsIENvbnRyaWJ1dG9yIG11c3QgcGF5IHRob3NlIGRhbWFnZXMuPC9zcGFuPiA8L3A+CisKKzxwPjxiPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz41LiBOTyBXQVJSQU5UWTwvc3Bhbj48L2I+IDwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkVYQ0VQVCBBUyBFWFBSRVNTTFkgU0VUIEZPUlRIIElOIFRISVMKK0FHUkVFTUVOVCwgVEhFIFBST0dSQU0gSVMgUFJPVklERUQgT04gQU4gJnF1b3Q7QVMgSVMmcXVvdDsgQkFTSVMsIFdJVEhPVVQKK1dBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgRUlUSEVSIEVYUFJFU1MgT1IgSU1QTElFRCBJTkNMVURJTkcsCitXSVRIT1VUIExJTUlUQVRJT04sIEFOWSBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgVElUTEUsIE5PTi1JTkZSSU5HRU1FTlQsCitNRVJDSEFOVEFCSUxJVFkgT1IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIEVhY2ggUmVjaXBpZW50IGlzIHNvbGVseQorcmVzcG9uc2libGUgZm9yIGRldGVybWluaW5nIHRoZSBhcHByb3ByaWF0ZW5lc3Mgb2YgdXNpbmcgYW5kIGRpc3RyaWJ1dGluZyB0aGUKK1Byb2dyYW0gYW5kIGFzc3VtZXMgYWxsIHJpc2tzIGFzc29jaWF0ZWQgd2l0aCBpdHMgZXhlcmNpc2Ugb2YgcmlnaHRzIHVuZGVyIHRoaXMKK0FncmVlbWVudCAsIGluY2x1ZGluZyBidXQgbm90IGxpbWl0ZWQgdG8gdGhlIHJpc2tzIGFuZCBjb3N0cyBvZiBwcm9ncmFtIGVycm9ycywKK2NvbXBsaWFuY2Ugd2l0aCBhcHBsaWNhYmxlIGxhd3MsIGRhbWFnZSB0byBvciBsb3NzIG9mIGRhdGEsIHByb2dyYW1zIG9yCitlcXVpcG1lbnQsIGFuZCB1bmF2YWlsYWJpbGl0eSBvciBpbnRlcnJ1cHRpb24gb2Ygb3BlcmF0aW9ucy4gPC9zcGFuPjwvcD4KKworPHA+PGI+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPjYuIERJU0NMQUlNRVIgT0YgTElBQklMSVRZPC9zcGFuPjwvYj4gPC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+RVhDRVBUIEFTIEVYUFJFU1NMWSBTRVQgRk9SVEggSU4gVEhJUworQUdSRUVNRU5ULCBORUlUSEVSIFJFQ0lQSUVOVCBOT1IgQU5ZIENPTlRSSUJVVE9SUyBTSEFMTCBIQVZFIEFOWSBMSUFCSUxJVFkgRk9SCitBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyhJTkNMVURJTkcgV0lUSE9VVCBMSU1JVEFUSU9OIExPU1QgUFJPRklUUyksIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCitPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORworTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPUiBESVNUUklCVVRJT04gT0YKK1RIRSBQUk9HUkFNIE9SIFRIRSBFWEVSQ0lTRSBPRiBBTlkgUklHSFRTIEdSQU5URUQgSEVSRVVOREVSLCBFVkVOIElGIEFEVklTRUQgT0YKK1RIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRVMuPC9zcGFuPiA8L3A+CisKKzxwPjxiPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz43LiBHRU5FUkFMPC9zcGFuPjwvYj4gPC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+SWYgYW55IHByb3Zpc2lvbiBvZiB0aGlzIEFncmVlbWVudCBpcyBpbnZhbGlkCitvciB1bmVuZm9yY2VhYmxlIHVuZGVyIGFwcGxpY2FibGUgbGF3LCBpdCBzaGFsbCBub3QgYWZmZWN0IHRoZSB2YWxpZGl0eSBvcgorZW5mb3JjZWFiaWxpdHkgb2YgdGhlIHJlbWFpbmRlciBvZiB0aGUgdGVybXMgb2YgdGhpcyBBZ3JlZW1lbnQsIGFuZCB3aXRob3V0CitmdXJ0aGVyIGFjdGlvbiBieSB0aGUgcGFydGllcyBoZXJldG8sIHN1Y2ggcHJvdmlzaW9uIHNoYWxsIGJlIHJlZm9ybWVkIHRvIHRoZQorbWluaW11bSBleHRlbnQgbmVjZXNzYXJ5IHRvIG1ha2Ugc3VjaCBwcm92aXNpb24gdmFsaWQgYW5kIGVuZm9yY2VhYmxlLjwvc3Bhbj4gPC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+SWYgUmVjaXBpZW50IGluc3RpdHV0ZXMgcGF0ZW50IGxpdGlnYXRpb24KK2FnYWluc3QgYW55IGVudGl0eSAoaW5jbHVkaW5nIGEgY3Jvc3MtY2xhaW0gb3IgY291bnRlcmNsYWltIGluIGEgbGF3c3VpdCkKK2FsbGVnaW5nIHRoYXQgdGhlIFByb2dyYW0gaXRzZWxmIChleGNsdWRpbmcgY29tYmluYXRpb25zIG9mIHRoZSBQcm9ncmFtIHdpdGgKK290aGVyIHNvZnR3YXJlIG9yIGhhcmR3YXJlKSBpbmZyaW5nZXMgc3VjaCBSZWNpcGllbnQncyBwYXRlbnQocyksIHRoZW4gc3VjaAorUmVjaXBpZW50J3MgcmlnaHRzIGdyYW50ZWQgdW5kZXIgU2VjdGlvbiAyKGIpIHNoYWxsIHRlcm1pbmF0ZSBhcyBvZiB0aGUgZGF0ZQorc3VjaCBsaXRpZ2F0aW9uIGlzIGZpbGVkLiA8L3NwYW4+PC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+QWxsIFJlY2lwaWVudCdzIHJpZ2h0cyB1bmRlciB0aGlzIEFncmVlbWVudAorc2hhbGwgdGVybWluYXRlIGlmIGl0IGZhaWxzIHRvIGNvbXBseSB3aXRoIGFueSBvZiB0aGUgbWF0ZXJpYWwgdGVybXMgb3IKK2NvbmRpdGlvbnMgb2YgdGhpcyBBZ3JlZW1lbnQgYW5kIGRvZXMgbm90IGN1cmUgc3VjaCBmYWlsdXJlIGluIGEgcmVhc29uYWJsZQorcGVyaW9kIG9mIHRpbWUgYWZ0ZXIgYmVjb21pbmcgYXdhcmUgb2Ygc3VjaCBub25jb21wbGlhbmNlLiBJZiBhbGwgUmVjaXBpZW50J3MKK3JpZ2h0cyB1bmRlciB0aGlzIEFncmVlbWVudCB0ZXJtaW5hdGUsIFJlY2lwaWVudCBhZ3JlZXMgdG8gY2Vhc2UgdXNlIGFuZAorZGlzdHJpYnV0aW9uIG9mIHRoZSBQcm9ncmFtIGFzIHNvb24gYXMgcmVhc29uYWJseSBwcmFjdGljYWJsZS4gSG93ZXZlciwKK1JlY2lwaWVudCdzIG9ibGlnYXRpb25zIHVuZGVyIHRoaXMgQWdyZWVtZW50IGFuZCBhbnkgbGljZW5zZXMgZ3JhbnRlZCBieQorUmVjaXBpZW50IHJlbGF0aW5nIHRvIHRoZSBQcm9ncmFtIHNoYWxsIGNvbnRpbnVlIGFuZCBzdXJ2aXZlLiA8L3NwYW4+PC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+RXZlcnlvbmUgaXMgcGVybWl0dGVkIHRvIGNvcHkgYW5kIGRpc3RyaWJ1dGUKK2NvcGllcyBvZiB0aGlzIEFncmVlbWVudCwgYnV0IGluIG9yZGVyIHRvIGF2b2lkIGluY29uc2lzdGVuY3kgdGhlIEFncmVlbWVudCBpcworY29weXJpZ2h0ZWQgYW5kIG1heSBvbmx5IGJlIG1vZGlmaWVkIGluIHRoZSBmb2xsb3dpbmcgbWFubmVyLiBUaGUgQWdyZWVtZW50CitTdGV3YXJkIHJlc2VydmVzIHRoZSByaWdodCB0byBwdWJsaXNoIG5ldyB2ZXJzaW9ucyAoaW5jbHVkaW5nIHJldmlzaW9ucykgb2YKK3RoaXMgQWdyZWVtZW50IGZyb20gdGltZSB0byB0aW1lLiBObyBvbmUgb3RoZXIgdGhhbiB0aGUgQWdyZWVtZW50IFN0ZXdhcmQgaGFzCit0aGUgcmlnaHQgdG8gbW9kaWZ5IHRoaXMgQWdyZWVtZW50LiBUaGUgRWNsaXBzZSBGb3VuZGF0aW9uIGlzIHRoZSBpbml0aWFsCitBZ3JlZW1lbnQgU3Rld2FyZC4gVGhlIEVjbGlwc2UgRm91bmRhdGlvbiBtYXkgYXNzaWduIHRoZSByZXNwb25zaWJpbGl0eSB0bworc2VydmUgYXMgdGhlIEFncmVlbWVudCBTdGV3YXJkIHRvIGEgc3VpdGFibGUgc2VwYXJhdGUgZW50aXR5LiBFYWNoIG5ldyB2ZXJzaW9uCitvZiB0aGUgQWdyZWVtZW50IHdpbGwgYmUgZ2l2ZW4gYSBkaXN0aW5ndWlzaGluZyB2ZXJzaW9uIG51bWJlci4gVGhlIFByb2dyYW0KKyhpbmNsdWRpbmcgQ29udHJpYnV0aW9ucykgbWF5IGFsd2F5cyBiZSBkaXN0cmlidXRlZCBzdWJqZWN0IHRvIHRoZSB2ZXJzaW9uIG9mCit0aGUgQWdyZWVtZW50IHVuZGVyIHdoaWNoIGl0IHdhcyByZWNlaXZlZC4gSW4gYWRkaXRpb24sIGFmdGVyIGEgbmV3IHZlcnNpb24gb2YKK3RoZSBBZ3JlZW1lbnQgaXMgcHVibGlzaGVkLCBDb250cmlidXRvciBtYXkgZWxlY3QgdG8gZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbQorKGluY2x1ZGluZyBpdHMgQ29udHJpYnV0aW9ucykgdW5kZXIgdGhlIG5ldyB2ZXJzaW9uLiBFeGNlcHQgYXMgZXhwcmVzc2x5IHN0YXRlZAoraW4gU2VjdGlvbnMgMihhKSBhbmQgMihiKSBhYm92ZSwgUmVjaXBpZW50IHJlY2VpdmVzIG5vIHJpZ2h0cyBvciBsaWNlbnNlcyB0bwordGhlIGludGVsbGVjdHVhbCBwcm9wZXJ0eSBvZiBhbnkgQ29udHJpYnV0b3IgdW5kZXIgdGhpcyBBZ3JlZW1lbnQsIHdoZXRoZXIKK2V4cHJlc3NseSwgYnkgaW1wbGljYXRpb24sIGVzdG9wcGVsIG9yIG90aGVyd2lzZS4gQWxsIHJpZ2h0cyBpbiB0aGUgUHJvZ3JhbSBub3QKK2V4cHJlc3NseSBncmFudGVkIHVuZGVyIHRoaXMgQWdyZWVtZW50IGFyZSByZXNlcnZlZC48L3NwYW4+IDwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPlRoaXMgQWdyZWVtZW50IGlzIGdvdmVybmVkIGJ5IHRoZSBsYXdzIG9mIHRoZQorU3RhdGUgb2YgTmV3IFlvcmsgYW5kIHRoZSBpbnRlbGxlY3R1YWwgcHJvcGVydHkgbGF3cyBvZiB0aGUgVW5pdGVkIFN0YXRlcyBvZgorQW1lcmljYS4gTm8gcGFydHkgdG8gdGhpcyBBZ3JlZW1lbnQgd2lsbCBicmluZyBhIGxlZ2FsIGFjdGlvbiB1bmRlciB0aGlzCitBZ3JlZW1lbnQgbW9yZSB0aGFuIG9uZSB5ZWFyIGFmdGVyIHRoZSBjYXVzZSBvZiBhY3Rpb24gYXJvc2UuIEVhY2ggcGFydHkgd2FpdmVzCitpdHMgcmlnaHRzIHRvIGEganVyeSB0cmlhbCBpbiBhbnkgcmVzdWx0aW5nIGxpdGlnYXRpb24uPC9zcGFuPiA8L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbD48IVtpZiAhc3VwcG9ydEVtcHR5UGFyYXNdPiZuYnNwOzwhW2VuZGlmXT48bzpwPjwvbzpwPjwvcD4KKworPC9kaXY+CisKKzwvYm9keT4KKworPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLnN0ZW0ubW9kZWxzLmVwaWRlbWlvbG9neS5mZWF0dXJlL2ZlYXR1cmUucHJvcGVydGllcyBiL2ZlYXR1cmVzL29yZy5lY2xpcHNlLnN0ZW0ubW9kZWxzLmVwaWRlbWlvbG9neS5mZWF0dXJlL2ZlYXR1cmUucHJvcGVydGllcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YzE1YmRiCi0tLSAvZGV2L251bGwKKysrIGIvZmVhdHVyZXMvb3JnLmVjbGlwc2Uuc3RlbS5tb2RlbHMuZXBpZGVtaW9sb2d5LmZlYXR1cmUvZmVhdHVyZS5wcm9wZXJ0aWVzCkBAIC0wLDAgKzEsMTc0IEBACisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIENvcHlyaWdodCAoYykgMjAxMSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyMgQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworIyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyMgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyMgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyMgCisjIENvbnRyaWJ1dG9yczoKKyMgICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBmZWF0dXJlLnByb3BlcnRpZXMKKyMgY29udGFpbnMgZXh0ZXJuYWxpemVkIHN0cmluZ3MgZm9yIGZlYXR1cmUueG1sCisjICIlZm9vIiBpbiBmZWF0dXJlLnhtbCBjb3JyZXNwb25kcyB0byB0aGUga2V5ICJmb28iIGluIHRoaXMgZmlsZQorIyBqYXZhLmlvLlByb3BlcnRpZXMgZmlsZSAoSVNPIDg4NTktMSB3aXRoICJcIiBlc2NhcGVzKQorIyBUaGlzIGZpbGUgc2hvdWxkIGJlIHRyYW5zbGF0ZWQuCisKKyMgImZlYXR1cmVOYW1lIiBwcm9wZXJ0eSAtIG5hbWUgb2YgdGhlIGZlYXR1cmUKK2ZlYXR1cmVOYW1lPVNURU0gRXBpZGVtaW9sb2dpY2FsIE1vZGVsIEZyYW1ld29yaworCisjICJwcm92aWRlck5hbWUiIHByb3BlcnR5IC0gbmFtZSBvZiB0aGUgY29tcGFueSB0aGF0IHByb3ZpZGVzIHRoZSBmZWF0dXJlCitwcm92aWRlck5hbWU9RWNsaXBzZS5vcmcKKworIyAidXBkYXRlU2l0ZU5hbWUiIHByb3BlcnR5IC0gbGFiZWwgZm9yIHRoZSB1cGRhdGUgc2l0ZQordXBkYXRlU2l0ZU5hbWU9U1RFTSBVcGRhdGVzCisKKyMgInNlY29uZGFyeVNpdGVOYW1lIiBwcm9wZXJ0eSAtIGxhYmVsIGZvciB0aGUgc2Vjb25kYXJ5IHVwZGF0ZSBzaXRlCisjc2Vjb25kYXJ5VXBkYXRlU2l0ZU5hbWU9U1RFTSBVcGRhdGVzCisKKyMgImRlc2NyaXB0aW9uIiBwcm9wZXJ0eSAtIGRlc2NyaXB0aW9uIG9mIHRoZSBmZWF0dXJlCitkZXNjcmlwdGlvbj1GcmFtZXdvcmsgZm9yIGNyZWF0aW5nIGVwaWRlbWlvbG9naWNhbCBtb2RlbHMgaW5jbHVkaW5nXAorZXhhbXBsZSBkaXNlYXNlIG1vZGVscworCisjICJjb3B5cmlnaHQiIHByb3BlcnR5IC0gdGV4dCBvZiB0aGUgIkZlYXR1cmUgVXBkYXRlIENvcHlyaWdodCIKK2NvcHlyaWdodD1cCitDb3B5cmlnaHQgKGMpIDIwMDctMjAxMSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy5cblwKK0FsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHNcblwKK2FyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMFxuXAord2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXRcblwKK2h0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sXG5cCitcblwKK0NvbnRyaWJ1dG9yczpcblwKKyAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb25cbgorIyMjIyMjIyMjIyMjIyMjIyBlbmQgb2YgY29weXJpZ2h0IHByb3BlcnR5ICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisjICJsaWNlbnNlVVJMIiBwcm9wZXJ0eSAtIFVSTCBvZiB0aGUgIkZlYXR1cmUgTGljZW5zZSIKKyMgZG8gbm90IHRyYW5zbGF0ZSB2YWx1ZSAtIGp1c3QgY2hhbmdlIHRvIHBvaW50IHRvIGEgbG9jYWxlLXNwZWNpZmljIEhUTUwgcGFnZQorbGljZW5zZVVSTD1saWNlbnNlLmh0bWwKKworIyAibGljZW5zZSIgcHJvcGVydHkgLSB0ZXh0IG9mIHRoZSAiRmVhdHVyZSBVcGRhdGUgTGljZW5zZSIKKyMgc2hvdWxkIGJlIHBsYWluIHRleHQgdmVyc2lvbiBvZiBsaWNlbnNlIGFncmVlbWVudCBwb2ludGVkIHRvIGJlICJsaWNlbnNlVVJMIgorbGljZW5zZT1cCitFY2xpcHNlIEZvdW5kYXRpb24gU29mdHdhcmUgVXNlciBBZ3JlZW1lbnRcblwKK0FwcmlsIDE0LCAyMDEwXG5cCitcblwKK1VzYWdlIE9mIENvbnRlbnRcblwKK1xuXAorVEhFIEVDTElQU0UgRk9VTkRBVElPTiBNQUtFUyBBVkFJTEFCTEUgU09GVFdBUkUsIERPQ1VNRU5UQVRJT04sIElORk9STUFUSU9OIEFORC9PUlxuXAorT1RIRVIgTUFURVJJQUxTIEZPUiBPUEVOIFNPVVJDRSBQUk9KRUNUUyAoQ09MTEVDVElWRUxZICJDT05URU5UIikuXG5cCitVU0UgT0YgVEhFIENPTlRFTlQgSVMgR09WRVJORUQgQlkgVEhFIFRFUk1TIEFORCBDT05ESVRJT05TIE9GIFRISVNcblwKK0FHUkVFTUVOVCBBTkQvT1IgVEhFIFRFUk1TIEFORCBDT05ESVRJT05TIE9GIExJQ0VOU0UgQUdSRUVNRU5UUyBPUlxuXAorTk9USUNFUyBJTkRJQ0FURUQgT1IgUkVGRVJFTkNFRCBCRUxPVy4gIEJZIFVTSU5HIFRIRSBDT05URU5ULCBZT1VcblwKK0FHUkVFIFRIQVQgWU9VUiBVU0UgT0YgVEhFIENPTlRFTlQgSVMgR09WRVJORUQgQlkgVEhJUyBBR1JFRU1FTlRcblwKK0FORC9PUiBUSEUgVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgQU5ZIEFQUExJQ0FCTEUgTElDRU5TRSBBR1JFRU1FTlRTXG5cCitPUiBOT1RJQ0VTIElORElDQVRFRCBPUiBSRUZFUkVOQ0VEIEJFTE9XLiAgSUYgWU9VIERPIE5PVCBBR1JFRSBUTyBUSEVcblwKK1RFUk1TIEFORCBDT05ESVRJT05TIE9GIFRISVMgQUdSRUVNRU5UIEFORCBUSEUgVEVSTVMgQU5EIENPTkRJVElPTlNcblwKK09GIEFOWSBBUFBMSUNBQkxFIExJQ0VOU0UgQUdSRUVNRU5UUyBPUiBOT1RJQ0VTIElORElDQVRFRCBPUiBSRUZFUkVOQ0VEXG5cCitCRUxPVywgVEhFTiBZT1UgTUFZIE5PVCBVU0UgVEhFIENPTlRFTlQuXG5cCitcblwKK0FwcGxpY2FibGUgTGljZW5zZXNcblwKK1xuXAorVW5sZXNzIG90aGVyd2lzZSBpbmRpY2F0ZWQsIGFsbCBDb250ZW50IG1hZGUgYXZhaWxhYmxlIGJ5IHRoZVxuXAorRWNsaXBzZSBGb3VuZGF0aW9uIGlzIHByb3ZpZGVkIHRvIHlvdSB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2ZcblwKK3RoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4wICgiRVBMIikuIEEgY29weSBvZiB0aGUgRVBMIGlzXG5cCitwcm92aWRlZCB3aXRoIHRoaXMgQ29udGVudCBhbmQgaXMgYWxzbyBhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwuXG5cCitGb3IgcHVycG9zZXMgb2YgdGhlIEVQTCwgIlByb2dyYW0iIHdpbGwgbWVhbiB0aGUgQ29udGVudC5cblwKK1xuXAorQ29udGVudCBpbmNsdWRlcywgYnV0IGlzIG5vdCBsaW1pdGVkIHRvLCBzb3VyY2UgY29kZSwgb2JqZWN0IGNvZGUsXG5cCitkb2N1bWVudGF0aW9uIGFuZCBvdGhlciBmaWxlcyBtYWludGFpbmVkIGluIHRoZSBFY2xpcHNlIEZvdW5kYXRpb24gc291cmNlIGNvZGVcblwKK3JlcG9zaXRvcnkgKCJSZXBvc2l0b3J5IikgaW4gc29mdHdhcmUgbW9kdWxlcyAoIk1vZHVsZXMiKSBhbmQgbWFkZSBhdmFpbGFibGVcblwKK2FzIGRvd25sb2FkYWJsZSBhcmNoaXZlcyAoIkRvd25sb2FkcyIpLlxuXAorXG5cCisgICAgICAgLSBDb250ZW50IG1heSBiZSBzdHJ1Y3R1cmVkIGFuZCBwYWNrYWdlZCBpbnRvIG1vZHVsZXMgdG8gZmFjaWxpdGF0ZSBkZWxpdmVyaW5nLFxuXAorICAgICAgICAgZXh0ZW5kaW5nLCBhbmQgdXBncmFkaW5nIHRoZSBDb250ZW50LiBUeXBpY2FsIG1vZHVsZXMgbWF5IGluY2x1ZGUgcGx1Zy1pbnMgKCJQbHVnLWlucyIpLFxuXAorICAgICAgICAgcGx1Zy1pbiBmcmFnbWVudHMgKCJGcmFnbWVudHMiKSwgYW5kIGZlYXR1cmVzICgiRmVhdHVyZXMiKS5cblwKKyAgICAgICAtIEVhY2ggUGx1Zy1pbiBvciBGcmFnbWVudCBtYXkgYmUgcGFja2FnZWQgYXMgYSBzdWItZGlyZWN0b3J5IG9yIEpBUiAoSmF2YShUTSkgQVJjaGl2ZSlcblwKKyAgICAgICAgIGluIGEgZGlyZWN0b3J5IG5hbWVkICJwbHVnaW5zIi5cblwKKyAgICAgICAtIEEgRmVhdHVyZSBpcyBhIGJ1bmRsZSBvZiBvbmUgb3IgbW9yZSBQbHVnLWlucyBhbmQvb3IgRnJhZ21lbnRzIGFuZCBhc3NvY2lhdGVkIG1hdGVyaWFsLlxuXAorICAgICAgICAgRWFjaCBGZWF0dXJlIG1heSBiZSBwYWNrYWdlZCBhcyBhIHN1Yi1kaXJlY3RvcnkgaW4gYSBkaXJlY3RvcnkgbmFtZWQgImZlYXR1cmVzIi5cblwKKyAgICAgICAgIFdpdGhpbiBhIEZlYXR1cmUsIGZpbGVzIG5hbWVkICJmZWF0dXJlLnhtbCIgbWF5IGNvbnRhaW4gYSBsaXN0IG9mIHRoZSBuYW1lcyBhbmQgdmVyc2lvblxuXAorICAgICAgICAgbnVtYmVycyBvZiB0aGUgUGx1Zy1pbnMgYW5kL29yIEZyYWdtZW50cyBhc3NvY2lhdGVkIHdpdGggdGhhdCBGZWF0dXJlLlxuXAorICAgICAgIC0gRmVhdHVyZXMgbWF5IGFsc28gaW5jbHVkZSBvdGhlciBGZWF0dXJlcyAoIkluY2x1ZGVkIEZlYXR1cmVzIikuIFdpdGhpbiBhIEZlYXR1cmUsIGZpbGVzXG5cCisgICAgICAgICBuYW1lZCAiZmVhdHVyZS54bWwiIG1heSBjb250YWluIGEgbGlzdCBvZiB0aGUgbmFtZXMgYW5kIHZlcnNpb24gbnVtYmVycyBvZiBJbmNsdWRlZCBGZWF0dXJlcy5cblwKK1xuXAorVGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIGdvdmVybmluZyBQbHVnLWlucyBhbmQgRnJhZ21lbnRzIHNob3VsZCBiZVxuXAorY29udGFpbmVkIGluIGZpbGVzIG5hbWVkICJhYm91dC5odG1sIiAoIkFib3V0cyIpLiBUaGUgdGVybXMgYW5kXG5cCitjb25kaXRpb25zIGdvdmVybmluZyBGZWF0dXJlcyBhbmQgSW5jbHVkZWQgRmVhdHVyZXMgc2hvdWxkIGJlIGNvbnRhaW5lZFxuXAoraW4gZmlsZXMgbmFtZWQgImxpY2Vuc2UuaHRtbCIgKCJGZWF0dXJlIExpY2Vuc2VzIikuIEFib3V0cyBhbmQgRmVhdHVyZVxuXAorTGljZW5zZXMgbWF5IGJlIGxvY2F0ZWQgaW4gYW55IGRpcmVjdG9yeSBvZiBhIERvd25sb2FkIG9yIE1vZHVsZVxuXAoraW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG8gdGhlIGZvbGxvd2luZyBsb2NhdGlvbnM6XG5cCitcblwKKyAgICAgICAtIFRoZSB0b3AtbGV2ZWwgKHJvb3QpIGRpcmVjdG9yeVxuXAorICAgICAgIC0gUGx1Zy1pbiBhbmQgRnJhZ21lbnQgZGlyZWN0b3JpZXNcblwKKyAgICAgICAtIEluc2lkZSBQbHVnLWlucyBhbmQgRnJhZ21lbnRzIHBhY2thZ2VkIGFzIEpBUnNcblwKKyAgICAgICAtIFN1Yi1kaXJlY3RvcmllcyBvZiB0aGUgZGlyZWN0b3J5IG5hbWVkICJzcmMiIG9mIGNlcnRhaW4gUGx1Zy1pbnNcblwKKyAgICAgICAtIEZlYXR1cmUgZGlyZWN0b3JpZXNcblwKK1xuXAorTm90ZTogaWYgYSBGZWF0dXJlIG1hZGUgYXZhaWxhYmxlIGJ5IHRoZSBFY2xpcHNlIEZvdW5kYXRpb24gaXMgaW5zdGFsbGVkIHVzaW5nIHRoZVxuXAorUHJvdmlzaW9uaW5nIFRlY2hub2xvZ3kgKGFzIGRlZmluZWQgYmVsb3cpLCB5b3UgbXVzdCBhZ3JlZSB0byBhIGxpY2Vuc2UgKCJGZWF0dXJlIFxuXAorVXBkYXRlIExpY2Vuc2UiKSBkdXJpbmcgdGhlIGluc3RhbGxhdGlvbiBwcm9jZXNzLiBJZiB0aGUgRmVhdHVyZSBjb250YWluc1xuXAorSW5jbHVkZWQgRmVhdHVyZXMsIHRoZSBGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlIHNob3VsZCBlaXRoZXIgcHJvdmlkZSB5b3VcblwKK3dpdGggdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIGdvdmVybmluZyB0aGUgSW5jbHVkZWQgRmVhdHVyZXMgb3IgaW5mb3JtXG5cCit5b3Ugd2hlcmUgeW91IGNhbiBsb2NhdGUgdGhlbS4gRmVhdHVyZSBVcGRhdGUgTGljZW5zZXMgbWF5IGJlIGZvdW5kIGluXG5cCit0aGUgImxpY2Vuc2UiIHByb3BlcnR5IG9mIGZpbGVzIG5hbWVkICJmZWF0dXJlLnByb3BlcnRpZXMiIGZvdW5kIHdpdGhpbiBhIEZlYXR1cmUuXG5cCitTdWNoIEFib3V0cywgRmVhdHVyZSBMaWNlbnNlcywgYW5kIEZlYXR1cmUgVXBkYXRlIExpY2Vuc2VzIGNvbnRhaW4gdGhlXG5cCit0ZXJtcyBhbmQgY29uZGl0aW9ucyAob3IgcmVmZXJlbmNlcyB0byBzdWNoIHRlcm1zIGFuZCBjb25kaXRpb25zKSB0aGF0XG5cCitnb3Zlcm4geW91ciB1c2Ugb2YgdGhlIGFzc29jaWF0ZWQgQ29udGVudCBpbiB0aGF0IGRpcmVjdG9yeS5cblwKK1xuXAorVEhFIEFCT1VUUywgRkVBVFVSRSBMSUNFTlNFUywgQU5EIEZFQVRVUkUgVVBEQVRFIExJQ0VOU0VTIE1BWSBSRUZFUlxuXAorVE8gVEhFIEVQTCBPUiBPVEhFUiBMSUNFTlNFIEFHUkVFTUVOVFMsIE5PVElDRVMgT1IgVEVSTVMgQU5EIENPTkRJVElPTlMuXG5cCitTT01FIE9GIFRIRVNFIE9USEVSIExJQ0VOU0UgQUdSRUVNRU5UUyBNQVkgSU5DTFVERSAoQlVUIEFSRSBOT1QgTElNSVRFRCBUTyk6XG5cCitcblwKKyAgICAgICAtIENvbW1vbiBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMCAoYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvY3BsLXYxMC5odG1sKVxuXAorICAgICAgIC0gQXBhY2hlIFNvZnR3YXJlIExpY2Vuc2UgMS4xIChhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UpXG5cCisgICAgICAgLSBBcGFjaGUgU29mdHdhcmUgTGljZW5zZSAyLjAgKGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjApXG5cCisgICAgICAgLSBNZXRybyBMaW5rIFB1YmxpYyBMaWNlbnNlIDEuMDAgKGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3Lm9wZW5ncm91cC5vcmcvb3Blbm1vdGlmL3N1cHBvcnRlcnMvbWV0cm9saW5rL2xpY2Vuc2UuaHRtbClcblwKKyAgICAgICAtIE1vemlsbGEgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjEgKGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3Lm1vemlsbGEub3JnL01QTC9NUEwtMS4xLmh0bWwpXG5cCitcblwKK0lUIElTIFlPVVIgT0JMSUdBVElPTiBUTyBSRUFEIEFORCBBQ0NFUFQgQUxMIFNVQ0ggVEVSTVMgQU5EIENPTkRJVElPTlMgUFJJT1JcblwKK1RPIFVTRSBPRiBUSEUgQ09OVEVOVC4gSWYgbm8gQWJvdXQsIEZlYXR1cmUgTGljZW5zZSwgb3IgRmVhdHVyZSBVcGRhdGUgTGljZW5zZVxuXAoraXMgcHJvdmlkZWQsIHBsZWFzZSBjb250YWN0IHRoZSBFY2xpcHNlIEZvdW5kYXRpb24gdG8gZGV0ZXJtaW5lIHdoYXQgdGVybXMgYW5kIGNvbmRpdGlvbnNcblwKK2dvdmVybiB0aGF0IHBhcnRpY3VsYXIgQ29udGVudC5cblwKK1xuXAorXG5cVXNlIG9mIFByb3Zpc2lvbmluZyBUZWNobm9sb2d5XG5cCitcblwKK1RoZSBFY2xpcHNlIEZvdW5kYXRpb24gbWFrZXMgYXZhaWxhYmxlIHByb3Zpc2lvbmluZyBzb2Z0d2FyZSwgZXhhbXBsZXMgb2Ygd2hpY2ggaW5jbHVkZSxcblwKK2J1dCBhcmUgbm90IGxpbWl0ZWQgdG8sIHAyIGFuZCB0aGUgRWNsaXBzZSBVcGRhdGUgTWFuYWdlciAoIlByb3Zpc2lvbmluZyBUZWNobm9sb2d5IikgZm9yXG5cCit0aGUgcHVycG9zZSBvZiBhbGxvd2luZyB1c2VycyB0byBpbnN0YWxsIHNvZnR3YXJlLCBkb2N1bWVudGF0aW9uLCBpbmZvcm1hdGlvbiBhbmQvb3JcblwKK290aGVyIG1hdGVyaWFscyAoY29sbGVjdGl2ZWx5ICJJbnN0YWxsYWJsZSBTb2Z0d2FyZSIpLiBUaGlzIGNhcGFiaWxpdHkgaXMgcHJvdmlkZWQgd2l0aFxuXAordGhlIGludGVudCBvZiBhbGxvd2luZyBzdWNoIHVzZXJzIHRvIGluc3RhbGwsIGV4dGVuZCBhbmQgdXBkYXRlIEVjbGlwc2UtYmFzZWQgcHJvZHVjdHMuXG5cCitJbmZvcm1hdGlvbiBhYm91dCBwYWNrYWdpbmcgSW5zdGFsbGFibGUgU29mdHdhcmUgaXMgYXZhaWxhYmxlIGF0XG5cCitodHRwOi8vZWNsaXBzZS5vcmcvZXF1aW5veC9wMi9yZXBvc2l0b3J5X3BhY2thZ2luZy5odG1sICgiU3BlY2lmaWNhdGlvbiIpLlxuXAorXG5cCitZb3UgbWF5IHVzZSBQcm92aXNpb25pbmcgVGVjaG5vbG9neSB0byBhbGxvdyBvdGhlciBwYXJ0aWVzIHRvIGluc3RhbGwgSW5zdGFsbGFibGUgU29mdHdhcmUuXG5cCitZb3Ugc2hhbGwgYmUgcmVzcG9uc2libGUgZm9yIGVuYWJsaW5nIHRoZSBhcHBsaWNhYmxlIGxpY2Vuc2UgYWdyZWVtZW50cyByZWxhdGluZyB0byB0aGVcblwKK0luc3RhbGxhYmxlIFNvZnR3YXJlIHRvIGJlIHByZXNlbnRlZCB0bywgYW5kIGFjY2VwdGVkIGJ5LCB0aGUgdXNlcnMgb2YgdGhlIFByb3Zpc2lvbmluZyBUZWNobm9sb2d5XG5cCitpbiBhY2NvcmRhbmNlIHdpdGggdGhlIFNwZWNpZmljYXRpb24uIEJ5IHVzaW5nIFByb3Zpc2lvbmluZyBUZWNobm9sb2d5IGluIHN1Y2ggYSBtYW5uZXIgYW5kXG5cCittYWtpbmcgaXQgYXZhaWxhYmxlIGluIGFjY29yZGFuY2Ugd2l0aCB0aGUgU3BlY2lmaWNhdGlvbiwgeW91IGZ1cnRoZXIgYWNrbm93bGVkZ2UgeW91clxuXAorYWdyZWVtZW50IHRvLCBhbmQgdGhlIGFjcXVpc2l0aW9uIG9mIGFsbCBuZWNlc3NhcnkgcmlnaHRzIHRvIHBlcm1pdCB0aGUgZm9sbG93aW5nOlxuXAorXG5cCisgICAgICAgMS4gQSBzZXJpZXMgb2YgYWN0aW9ucyBtYXkgb2NjdXIgKCJQcm92aXNpb25pbmcgUHJvY2VzcyIpIGluIHdoaWNoIGEgdXNlciBtYXkgZXhlY3V0ZVxuXAorICAgICAgICAgIHRoZSBQcm92aXNpb25pbmcgVGVjaG5vbG9neSBvbiBhIG1hY2hpbmUgKCJUYXJnZXQgTWFjaGluZSIpIHdpdGggdGhlIGludGVudCBvZiBpbnN0YWxsaW5nLFxuXAorICAgICAgICAgIGV4dGVuZGluZyBvciB1cGRhdGluZyB0aGUgZnVuY3Rpb25hbGl0eSBvZiBhbiBFY2xpcHNlLWJhc2VkIHByb2R1Y3QuXG5cCisgICAgICAgMi4gRHVyaW5nIHRoZSBQcm92aXNpb25pbmcgUHJvY2VzcywgdGhlIFByb3Zpc2lvbmluZyBUZWNobm9sb2d5IG1heSBjYXVzZSB0aGlyZCBwYXJ0eVxuXAorICAgICAgICAgIEluc3RhbGxhYmxlIFNvZnR3YXJlIG9yIGEgcG9ydGlvbiB0aGVyZW9mIHRvIGJlIGFjY2Vzc2VkIGFuZCBjb3BpZWQgdG8gdGhlIFRhcmdldCBNYWNoaW5lLlxuXAorICAgICAgIDMuIFB1cnN1YW50IHRvIHRoZSBTcGVjaWZpY2F0aW9uLCB5b3Ugd2lsbCBwcm92aWRlIHRvIHRoZSB1c2VyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyB0aGF0XG5cCisgICAgICAgICAgZ292ZXJuIHRoZSB1c2Ugb2YgdGhlIEluc3RhbGxhYmxlIFNvZnR3YXJlICgiSW5zdGFsbGFibGUgU29mdHdhcmUgQWdyZWVtZW50IikgYW5kIHN1Y2hcblwKKyAgICAgICAgICBJbnN0YWxsYWJsZSBTb2Z0d2FyZSBBZ3JlZW1lbnQgc2hhbGwgYmUgYWNjZXNzZWQgZnJvbSB0aGUgVGFyZ2V0IE1hY2hpbmUgaW4gYWNjb3JkYW5jZVxuXAorICAgICAgICAgIHdpdGggdGhlIFNwZWNpZmljYXRpb24uIFN1Y2ggSW5zdGFsbGFibGUgU29mdHdhcmUgQWdyZWVtZW50IG11c3QgaW5mb3JtIHRoZSB1c2VyIG9mIHRoZVxuXAorICAgICAgICAgIHRlcm1zIGFuZCBjb25kaXRpb25zIHRoYXQgZ292ZXJuIHRoZSBJbnN0YWxsYWJsZSBTb2Z0d2FyZSBhbmQgbXVzdCBzb2xpY2l0IGFjY2VwdGFuY2UgYnlcblwKKyAgICAgICAgICB0aGUgZW5kIHVzZXIgaW4gdGhlIG1hbm5lciBwcmVzY3JpYmVkIGluIHN1Y2ggSW5zdGFsbGFibGUgU29mdHdhcmUgQWdyZWVtZW50LiBVcG9uIHN1Y2hcblwKKyAgICAgICAgICBpbmRpY2F0aW9uIG9mIGFncmVlbWVudCBieSB0aGUgdXNlciwgdGhlIHByb3Zpc2lvbmluZyBUZWNobm9sb2d5IHdpbGwgY29tcGxldGUgaW5zdGFsbGF0aW9uXG5cCisgICAgICAgICAgb2YgdGhlIEluc3RhbGxhYmxlIFNvZnR3YXJlLlxuXAorXG5cCitDcnlwdG9ncmFwaHlcblwKK1xuXAorQ29udGVudCBtYXkgY29udGFpbiBlbmNyeXB0aW9uIHNvZnR3YXJlLiBUaGUgY291bnRyeSBpbiB3aGljaCB5b3UgYXJlXG5cCitjdXJyZW50bHkgbWF5IGhhdmUgcmVzdHJpY3Rpb25zIG9uIHRoZSBpbXBvcnQsIHBvc3Nlc3Npb24sIGFuZCB1c2UsXG5cCithbmQvb3IgcmUtZXhwb3J0IHRvIGFub3RoZXIgY291bnRyeSwgb2YgZW5jcnlwdGlvbiBzb2Z0d2FyZS4gQkVGT1JFXG5cCit1c2luZyBhbnkgZW5jcnlwdGlvbiBzb2Z0d2FyZSwgcGxlYXNlIGNoZWNrIHRoZSBjb3VudHJ5J3MgbGF3cyxcblwKK3JlZ3VsYXRpb25zIGFuZCBwb2xpY2llcyBjb25jZXJuaW5nIHRoZSBpbXBvcnQsIHBvc3Nlc3Npb24sIG9yIHVzZSwgYW5kXG5cCityZS1leHBvcnQgb2YgZW5jcnlwdGlvbiBzb2Z0d2FyZSwgdG8gc2VlIGlmIHRoaXMgaXMgcGVybWl0dGVkLlxuXAorXG5cCitKYXZhIGFuZCBhbGwgSmF2YS1iYXNlZCB0cmFkZW1hcmtzIGFyZSB0cmFkZW1hcmtzIG9mIE9yYWNsZSBDb3Jwb3JhdGlvbiBpbiB0aGUgVW5pdGVkIFN0YXRlcywgb3RoZXIgY291bnRyaWVzLCBvciBib3RoLlxuCisjIyMjIyMjIyMjIyBlbmQgb2YgbGljZW5zZSBwcm9wZXJ0eSAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS5zdGVtLm1vZGVscy5lcGlkZW1pb2xvZ3kuZmVhdHVyZS9mZWF0dXJlLnhtbCBiL2ZlYXR1cmVzL29yZy5lY2xpcHNlLnN0ZW0ubW9kZWxzLmVwaWRlbWlvbG9neS5mZWF0dXJlL2ZlYXR1cmUueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA3YzE3OWYKLS0tIC9kZXYvbnVsbAorKysgYi9mZWF0dXJlcy9vcmcuZWNsaXBzZS5zdGVtLm1vZGVscy5lcGlkZW1pb2xvZ3kuZmVhdHVyZS9mZWF0dXJlLnhtbApAQCAtMCwwICsxLDE5NiBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxmZWF0dXJlCisgICAgICBpZD0ib3JnLmVjbGlwc2Uuc3RlbS5tb2RlbHMuZXBpZGVtaW9sb2d5LmZlYXR1cmUiCisgICAgICBsYWJlbD0iJWZlYXR1cmVOYW1lIgorICAgICAgdmVyc2lvbj0iMS4yLjEiCisgICAgICBwcm92aWRlci1uYW1lPSIlcHJvdmlkZXJOYW1lIj4KKworICAgPGRlc2NyaXB0aW9uPgorICAgICAgJWRlc2NyaXB0aW9uCisgICA8L2Rlc2NyaXB0aW9uPgorCisgICA8Y29weXJpZ2h0PgorICAgICAgJWNvcHlyaWdodAorICAgPC9jb3B5cmlnaHQ+CisKKyAgIDxsaWNlbnNlIHVybD0iJWxpY2Vuc2VVUkwiPgorICAgICAgJWxpY2Vuc2UKKyAgIDwvbGljZW5zZT4KKworICAgPHVybD4KKyAgICAgIDx1cGRhdGUgbGFiZWw9IiV1cGRhdGVTaXRlTmFtZSIgdXJsPSJodHRwOi8vZG93bmxvYWQuZWNsaXBzZS5vcmcvc3RlbS91cGRhdGUtc2l0ZS8iLz4KKyAgIDwvdXJsPgorCisgICA8cmVxdWlyZXM+CisgICAgICA8aW1wb3J0IHBsdWdpbj0ib3JnLmVjbGlwc2UuY29yZS5ydW50aW1lIi8+CisgICAgICA8aW1wb3J0IHBsdWdpbj0ib3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucyIvPgorICAgICAgPGltcG9ydCBwbHVnaW49Im9yZy5lY2xpcHNlLnN0ZW0udHJhbnNwb3J0Ii8+CisgICAgICA8aW1wb3J0IHBsdWdpbj0ib3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzIi8+CisgICAgICA8aW1wb3J0IHBsdWdpbj0ib3JnLmVjbGlwc2UuZW1mLmVjb3JlLmVkaXQiIHZlcnNpb249IjIuNi4wIiBtYXRjaD0iZ3JlYXRlck9yRXF1YWwiLz4KKyAgICAgIDxpbXBvcnQgcGx1Z2luPSJvcmcuZWNsaXBzZS5zdGVtLnVpIi8+CisgICAgICA8aW1wb3J0IHBsdWdpbj0ib3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeSIvPgorICAgICAgPGltcG9ydCBwbHVnaW49Im9yZy5lY2xpcHNlLnVpLm5hdmlnYXRvciIvPgorICAgICAgPGltcG9ydCBwbHVnaW49Im9yZy5lY2xpcHNlLnVpLm5hdmlnYXRvci5yZXNvdXJjZXMiLz4KKyAgICAgIDxpbXBvcnQgcGx1Z2luPSJvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzIi8+CisgICAgICA8aW1wb3J0IHBsdWdpbj0ib3JnLmVjbGlwc2UuZW1mLmVjb3JlIi8+CisgICAgICA8aW1wb3J0IHBsdWdpbj0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlIi8+CisgICAgICA8aW1wb3J0IHBsdWdpbj0ib3JnLmVjbGlwc2UuZW1mLmVkaXQiLz4KKyAgICAgIDxpbXBvcnQgcGx1Z2luPSJvcmcuZWNsaXBzZS5zdGVtLnV0aWwuYW5hbHlzaXMiLz4KKyAgICAgIDxpbXBvcnQgcGx1Z2luPSJvcmcuZWNsaXBzZS5lbWYuZWNvcmUuZWRpdCIgdmVyc2lvbj0iMi41LjAiIG1hdGNoPSJncmVhdGVyT3JFcXVhbCIvPgorICAgICAgPGltcG9ydCBwbHVnaW49Im9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzIi8+CisgICAgICA8aW1wb3J0IHBsdWdpbj0ib3JnLmVjbGlwc2UuZW1mLmVjb3JlLnhtaSIvPgorICAgICAgPGltcG9ydCBwbHVnaW49Im9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpIi8+CisgICAgICA8aW1wb3J0IHBsdWdpbj0ib3JnLmVjbGlwc2UudWkuaWRlIi8+CisgICAgICA8aW1wb3J0IHBsdWdpbj0ib3JnLmVjbGlwc2Uuc3RlbS51dGlsLmxvZ2dlcnMiLz4KKyAgICAgIDxpbXBvcnQgcGx1Z2luPSJvcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMiIHZlcnNpb249IjEuMS4wIiBtYXRjaD0iZ3JlYXRlck9yRXF1YWwiLz4KKyAgICAgIDxpbXBvcnQgcGx1Z2luPSJvcmcuZWNsaXBzZS5zdGVtLnVpIiB2ZXJzaW9uPSIxLjEuMCIgbWF0Y2g9ImdyZWF0ZXJPckVxdWFsIi8+CisgICA8L3JlcXVpcmVzPgorCisgICA8cGx1Z2luCisgICAgICAgICBpZD0ib3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmRpc2Vhc2Vtb2RlbHMubW9kZWxzIgorICAgICAgICAgZG93bmxvYWQtc2l6ZT0iMCIKKyAgICAgICAgIGluc3RhbGwtc2l6ZT0iMCIKKyAgICAgICAgIHZlcnNpb249IjAuMC4wIgorICAgICAgICAgdW5wYWNrPSJmYWxzZSIvPgorCisgICA8cGx1Z2luCisgICAgICAgICBpZD0ib3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmRpc2Vhc2Vtb2RlbHMuc2NlbmFyaW9zIgorICAgICAgICAgZG93bmxvYWQtc2l6ZT0iMCIKKyAgICAgICAgIGluc3RhbGwtc2l6ZT0iMCIKKyAgICAgICAgIHZlcnNpb249IjAuMC4wIgorICAgICAgICAgdW5wYWNrPSJmYWxzZSIvPgorCisgICA8cGx1Z2luCisgICAgICAgICBpZD0ib3JnLmVjbGlwc2Uuc3RlbS51aS5pbnRlcnZlbnRpb25zIgorICAgICAgICAgZG93bmxvYWQtc2l6ZT0iMCIKKyAgICAgICAgIGluc3RhbGwtc2l6ZT0iMCIKKyAgICAgICAgIHZlcnNpb249IjAuMC4wIgorICAgICAgICAgdW5wYWNrPSJmYWxzZSIvPgorCisgICA8cGx1Z2luCisgICAgICAgICBpZD0ib3JnLmVjbGlwc2Uuc3RlbS5pbnRlcnZlbnRpb25zIgorICAgICAgICAgZG93bmxvYWQtc2l6ZT0iMCIKKyAgICAgICAgIGluc3RhbGwtc2l6ZT0iMCIKKyAgICAgICAgIHZlcnNpb249IjAuMC4wIgorICAgICAgICAgdW5wYWNrPSJmYWxzZSIvPgorCisgICA8cGx1Z2luCisgICAgICAgICBpZD0ib3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzIgorICAgICAgICAgZG93bmxvYWQtc2l6ZT0iMCIKKyAgICAgICAgIGluc3RhbGwtc2l6ZT0iMCIKKyAgICAgICAgIHZlcnNpb249IjAuMC4wIgorICAgICAgICAgdW5wYWNrPSJmYWxzZSIvPgorCisgICA8cGx1Z2luCisgICAgICAgICBpZD0ib3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlcyIKKyAgICAgICAgIGRvd25sb2FkLXNpemU9IjAiCisgICAgICAgICBpbnN0YWxsLXNpemU9IjAiCisgICAgICAgICB2ZXJzaW9uPSIwLjAuMCIKKyAgICAgICAgIHVucGFjaz0iZmFsc2UiLz4KKworICAgPHBsdWdpbgorICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscyIKKyAgICAgICAgIGRvd25sb2FkLXNpemU9IjAiCisgICAgICAgICBpbnN0YWxsLXNpemU9IjAiCisgICAgICAgICB2ZXJzaW9uPSIwLjAuMCIKKyAgICAgICAgIHVucGFjaz0iZmFsc2UiLz4KKworICAgPHBsdWdpbgorICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leGFtcGxlIgorICAgICAgICAgZG93bmxvYWQtc2l6ZT0iMCIKKyAgICAgICAgIGluc3RhbGwtc2l6ZT0iMCIKKyAgICAgICAgIHZlcnNpb249IjAuMC4wIgorICAgICAgICAgdW5wYWNrPSJmYWxzZSIvPgorCisgICA8cGx1Z2luCisgICAgICAgICBpZD0ib3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4cGVyaW1lbnRhbCIKKyAgICAgICAgIGRvd25sb2FkLXNpemU9IjAiCisgICAgICAgICBpbnN0YWxsLXNpemU9IjAiCisgICAgICAgICB2ZXJzaW9uPSIwLjAuMCIKKyAgICAgICAgIHVucGFjaz0iZmFsc2UiLz4KKworICAgPHBsdWdpbgorICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leHRlcm5hbGRhdGFzb3VyY2UiCisgICAgICAgICBkb3dubG9hZC1zaXplPSIwIgorICAgICAgICAgaW5zdGFsbC1zaXplPSIwIgorICAgICAgICAgdmVyc2lvbj0iMC4wLjAiCisgICAgICAgICB1bnBhY2s9ImZhbHNlIi8+CisKKyAgIDxwbHVnaW4KKyAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZm9yY2luZyIKKyAgICAgICAgIGRvd25sb2FkLXNpemU9IjAiCisgICAgICAgICBpbnN0YWxsLXNpemU9IjAiCisgICAgICAgICB2ZXJzaW9uPSIwLjAuMCIKKyAgICAgICAgIHVucGFjaz0iZmFsc2UiLz4KKworICAgPHBsdWdpbgorICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5nbG9iYWxpbmZsdWVuemFtb2RlbCIKKyAgICAgICAgIGRvd25sb2FkLXNpemU9IjAiCisgICAgICAgICBpbnN0YWxsLXNpemU9IjAiCisgICAgICAgICB2ZXJzaW9uPSIwLjAuMCIKKyAgICAgICAgIHVucGFjaz0iZmFsc2UiLz4KKworICAgPHBsdWdpbgorICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5tdWx0aXBvcHVsYXRpb24iCisgICAgICAgICBkb3dubG9hZC1zaXplPSIwIgorICAgICAgICAgaW5zdGFsbC1zaXplPSIwIgorICAgICAgICAgdmVyc2lvbj0iMC4wLjAiCisgICAgICAgICB1bnBhY2s9ImZhbHNlIi8+CisKKyAgIDxwbHVnaW4KKyAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yIgorICAgICAgICAgZG93bmxvYWQtc2l6ZT0iMCIKKyAgICAgICAgIGluc3RhbGwtc2l6ZT0iMCIKKyAgICAgICAgIHZlcnNpb249IjAuMC4wIgorICAgICAgICAgdW5wYWNrPSJmYWxzZSIvPgorCisgICA8cGx1Z2luCisgICAgICAgICBpZD0ib3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzLmV4YW1wbGUiCisgICAgICAgICBkb3dubG9hZC1zaXplPSIwIgorICAgICAgICAgaW5zdGFsbC1zaXplPSIwIgorICAgICAgICAgdmVyc2lvbj0iMC4wLjAiCisgICAgICAgICB1bnBhY2s9ImZhbHNlIi8+CisKKyAgIDxwbHVnaW4KKyAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMuZXhwZXJpbWVudGFsIgorICAgICAgICAgZG93bmxvYWQtc2l6ZT0iMCIKKyAgICAgICAgIGluc3RhbGwtc2l6ZT0iMCIKKyAgICAgICAgIHZlcnNpb249IjAuMC4wIgorICAgICAgICAgdW5wYWNrPSJmYWxzZSIvPgorCisgICA8cGx1Z2luCisgICAgICAgICBpZD0ib3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzLmV4dGVybmFsZGF0YXNvdXJjZSIKKyAgICAgICAgIGRvd25sb2FkLXNpemU9IjAiCisgICAgICAgICBpbnN0YWxsLXNpemU9IjAiCisgICAgICAgICB2ZXJzaW9uPSIwLjAuMCIKKyAgICAgICAgIHVucGFjaz0iZmFsc2UiLz4KKworICAgPHBsdWdpbgorICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy5tdWx0aXBvcHVsYXRpb24iCisgICAgICAgICBkb3dubG9hZC1zaXplPSIwIgorICAgICAgICAgaW5zdGFsbC1zaXplPSIwIgorICAgICAgICAgdmVyc2lvbj0iMC4wLjAiCisgICAgICAgICB1bnBhY2s9ImZhbHNlIi8+CisKKyAgIDxwbHVnaW4KKyAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMudmVjdG9yIgorICAgICAgICAgZG93bmxvYWQtc2l6ZT0iMCIKKyAgICAgICAgIGluc3RhbGwtc2l6ZT0iMCIKKyAgICAgICAgIHZlcnNpb249IjAuMC4wIgorICAgICAgICAgdW5wYWNrPSJmYWxzZSIvPgorCisgICA8cGx1Z2luCisgICAgICAgICBpZD0ib3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzLmZvcmNpbmciCisgICAgICAgICBkb3dubG9hZC1zaXplPSIwIgorICAgICAgICAgaW5zdGFsbC1zaXplPSIwIgorICAgICAgICAgdmVyc2lvbj0iMC4wLjAiCisgICAgICAgICB1bnBhY2s9ImZhbHNlIi8+CisKKyAgIDxwbHVnaW4KKyAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMuZ2xvYmFsaW5mbHVlbnphbW9kZWwiCisgICAgICAgICBkb3dubG9hZC1zaXplPSIwIgorICAgICAgICAgaW5zdGFsbC1zaXplPSIwIgorICAgICAgICAgdmVyc2lvbj0iMC4wLjAiCisgICAgICAgICB1bnBhY2s9ImZhbHNlIi8+CisKKzwvZmVhdHVyZT4KZGlmZiAtLWdpdCBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLnN0ZW0ubW9kZWxzLmVwaWRlbWlvbG9neS5mZWF0dXJlL2xpY2Vuc2UuaHRtbCBiL2ZlYXR1cmVzL29yZy5lY2xpcHNlLnN0ZW0ubW9kZWxzLmVwaWRlbWlvbG9neS5mZWF0dXJlL2xpY2Vuc2UuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMTg0Y2EzCi0tLSAvZGV2L251bGwKKysrIGIvZmVhdHVyZXMvb3JnLmVjbGlwc2Uuc3RlbS5tb2RlbHMuZXBpZGVtaW9sb2d5LmZlYXR1cmUvbGljZW5zZS5odG1sCkBAIC0wLDAgKzEsMTA3IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJJU08tODg1OS0xIiA/PgorPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBYSFRNTCAxLjAgU3RyaWN0Ly9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sMS9EVEQveGh0bWwxLXN0cmljdC5kdGQiPgorPGh0bWwgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiPgorPGhlYWQ+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0xIiAvPgorPHRpdGxlPkVjbGlwc2UgRm91bmRhdGlvbiBTb2Z0d2FyZSBVc2VyIEFncmVlbWVudDwvdGl0bGU+Cis8L2hlYWQ+CisKKzxib2R5IGxhbmc9IkVOLVVTIj4KKzxoMj5FY2xpcHNlIEZvdW5kYXRpb24gU29mdHdhcmUgVXNlciBBZ3JlZW1lbnQ8L2gyPgorPHA+QXByaWwgMTQsIDIwMTA8L3A+CisKKzxoMz5Vc2FnZSBPZiBDb250ZW50PC9oMz4KKworPHA+VEhFIEVDTElQU0UgRk9VTkRBVElPTiBNQUtFUyBBVkFJTEFCTEUgU09GVFdBUkUsIERPQ1VNRU5UQVRJT04sIElORk9STUFUSU9OIEFORC9PUiBPVEhFUiBNQVRFUklBTFMgRk9SIE9QRU4gU09VUkNFIFBST0pFQ1RTCisgICAoQ09MTEVDVElWRUxZICZxdW90O0NPTlRFTlQmcXVvdDspLiAgVVNFIE9GIFRIRSBDT05URU5UIElTIEdPVkVSTkVEIEJZIFRIRSBURVJNUyBBTkQgQ09ORElUSU9OUyBPRiBUSElTIEFHUkVFTUVOVCBBTkQvT1IgVEhFIFRFUk1TIEFORAorICAgQ09ORElUSU9OUyBPRiBMSUNFTlNFIEFHUkVFTUVOVFMgT1IgTk9USUNFUyBJTkRJQ0FURUQgT1IgUkVGRVJFTkNFRCBCRUxPVy4gIEJZIFVTSU5HIFRIRSBDT05URU5ULCBZT1UgQUdSRUUgVEhBVCBZT1VSIFVTRQorICAgT0YgVEhFIENPTlRFTlQgSVMgR09WRVJORUQgQlkgVEhJUyBBR1JFRU1FTlQgQU5EL09SIFRIRSBURVJNUyBBTkQgQ09ORElUSU9OUyBPRiBBTlkgQVBQTElDQUJMRSBMSUNFTlNFIEFHUkVFTUVOVFMgT1IKKyAgIE5PVElDRVMgSU5ESUNBVEVEIE9SIFJFRkVSRU5DRUQgQkVMT1cuICBJRiBZT1UgRE8gTk9UIEFHUkVFIFRPIFRIRSBURVJNUyBBTkQgQ09ORElUSU9OUyBPRiBUSElTIEFHUkVFTUVOVCBBTkQgVEhFIFRFUk1TIEFORAorICAgQ09ORElUSU9OUyBPRiBBTlkgQVBQTElDQUJMRSBMSUNFTlNFIEFHUkVFTUVOVFMgT1IgTk9USUNFUyBJTkRJQ0FURUQgT1IgUkVGRVJFTkNFRCBCRUxPVywgVEhFTiBZT1UgTUFZIE5PVCBVU0UgVEhFIENPTlRFTlQuPC9wPgorCis8aDM+QXBwbGljYWJsZSBMaWNlbnNlczwvaDM+CisKKzxwPlVubGVzcyBvdGhlcndpc2UgaW5kaWNhdGVkLCBhbGwgQ29udGVudCBtYWRlIGF2YWlsYWJsZSBieSB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uIGlzIHByb3ZpZGVkIHRvIHlvdSB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjAKKyAgICgmcXVvdDtFUEwmcXVvdDspLiAgQSBjb3B5IG9mIHRoZSBFUEwgaXMgcHJvdmlkZWQgd2l0aCB0aGlzIENvbnRlbnQgYW5kIGlzIGFsc28gYXZhaWxhYmxlIGF0IDxhIGhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sIj5odHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbDwvYT4uCisgICBGb3IgcHVycG9zZXMgb2YgdGhlIEVQTCwgJnF1b3Q7UHJvZ3JhbSZxdW90OyB3aWxsIG1lYW4gdGhlIENvbnRlbnQuPC9wPgorCis8cD5Db250ZW50IGluY2x1ZGVzLCBidXQgaXMgbm90IGxpbWl0ZWQgdG8sIHNvdXJjZSBjb2RlLCBvYmplY3QgY29kZSwgZG9jdW1lbnRhdGlvbiBhbmQgb3RoZXIgZmlsZXMgbWFpbnRhaW5lZCBpbiB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uIHNvdXJjZSBjb2RlCisgICByZXBvc2l0b3J5ICgmcXVvdDtSZXBvc2l0b3J5JnF1b3Q7KSBpbiBzb2Z0d2FyZSBtb2R1bGVzICgmcXVvdDtNb2R1bGVzJnF1b3Q7KSBhbmQgbWFkZSBhdmFpbGFibGUgYXMgZG93bmxvYWRhYmxlIGFyY2hpdmVzICgmcXVvdDtEb3dubG9hZHMmcXVvdDspLjwvcD4KKworPHVsPgorICAgICAgIDxsaT5Db250ZW50IG1heSBiZSBzdHJ1Y3R1cmVkIGFuZCBwYWNrYWdlZCBpbnRvIG1vZHVsZXMgdG8gZmFjaWxpdGF0ZSBkZWxpdmVyaW5nLCBleHRlbmRpbmcsIGFuZCB1cGdyYWRpbmcgdGhlIENvbnRlbnQuICBUeXBpY2FsIG1vZHVsZXMgbWF5IGluY2x1ZGUgcGx1Zy1pbnMgKCZxdW90O1BsdWctaW5zJnF1b3Q7KSwgcGx1Zy1pbiBmcmFnbWVudHMgKCZxdW90O0ZyYWdtZW50cyZxdW90OyksIGFuZCBmZWF0dXJlcyAoJnF1b3Q7RmVhdHVyZXMmcXVvdDspLjwvbGk+CisgICAgICAgPGxpPkVhY2ggUGx1Zy1pbiBvciBGcmFnbWVudCBtYXkgYmUgcGFja2FnZWQgYXMgYSBzdWItZGlyZWN0b3J5IG9yIEpBUiAoSmF2YSZ0cmFkZTsgQVJjaGl2ZSkgaW4gYSBkaXJlY3RvcnkgbmFtZWQgJnF1b3Q7cGx1Z2lucyZxdW90Oy48L2xpPgorICAgICAgIDxsaT5BIEZlYXR1cmUgaXMgYSBidW5kbGUgb2Ygb25lIG9yIG1vcmUgUGx1Zy1pbnMgYW5kL29yIEZyYWdtZW50cyBhbmQgYXNzb2NpYXRlZCBtYXRlcmlhbC4gIEVhY2ggRmVhdHVyZSBtYXkgYmUgcGFja2FnZWQgYXMgYSBzdWItZGlyZWN0b3J5IGluIGEgZGlyZWN0b3J5IG5hbWVkICZxdW90O2ZlYXR1cmVzJnF1b3Q7LiAgV2l0aGluIGEgRmVhdHVyZSwgZmlsZXMgbmFtZWQgJnF1b3Q7ZmVhdHVyZS54bWwmcXVvdDsgbWF5IGNvbnRhaW4gYSBsaXN0IG9mIHRoZSBuYW1lcyBhbmQgdmVyc2lvbiBudW1iZXJzIG9mIHRoZSBQbHVnLWlucworICAgICAgYW5kL29yIEZyYWdtZW50cyBhc3NvY2lhdGVkIHdpdGggdGhhdCBGZWF0dXJlLjwvbGk+CisgICAgICAgPGxpPkZlYXR1cmVzIG1heSBhbHNvIGluY2x1ZGUgb3RoZXIgRmVhdHVyZXMgKCZxdW90O0luY2x1ZGVkIEZlYXR1cmVzJnF1b3Q7KS4gV2l0aGluIGEgRmVhdHVyZSwgZmlsZXMgbmFtZWQgJnF1b3Q7ZmVhdHVyZS54bWwmcXVvdDsgbWF5IGNvbnRhaW4gYSBsaXN0IG9mIHRoZSBuYW1lcyBhbmQgdmVyc2lvbiBudW1iZXJzIG9mIEluY2x1ZGVkIEZlYXR1cmVzLjwvbGk+Cis8L3VsPgorCis8cD5UaGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgZ292ZXJuaW5nIFBsdWctaW5zIGFuZCBGcmFnbWVudHMgc2hvdWxkIGJlIGNvbnRhaW5lZCBpbiBmaWxlcyBuYW1lZCAmcXVvdDthYm91dC5odG1sJnF1b3Q7ICgmcXVvdDtBYm91dHMmcXVvdDspLiBUaGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgZ292ZXJuaW5nIEZlYXR1cmVzIGFuZAorSW5jbHVkZWQgRmVhdHVyZXMgc2hvdWxkIGJlIGNvbnRhaW5lZCBpbiBmaWxlcyBuYW1lZCAmcXVvdDtsaWNlbnNlLmh0bWwmcXVvdDsgKCZxdW90O0ZlYXR1cmUgTGljZW5zZXMmcXVvdDspLiAgQWJvdXRzIGFuZCBGZWF0dXJlIExpY2Vuc2VzIG1heSBiZSBsb2NhdGVkIGluIGFueSBkaXJlY3Rvcnkgb2YgYSBEb3dubG9hZCBvciBNb2R1bGUKK2luY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvIHRoZSBmb2xsb3dpbmcgbG9jYXRpb25zOjwvcD4KKworPHVsPgorICAgICAgIDxsaT5UaGUgdG9wLWxldmVsIChyb290KSBkaXJlY3Rvcnk8L2xpPgorICAgICAgIDxsaT5QbHVnLWluIGFuZCBGcmFnbWVudCBkaXJlY3RvcmllczwvbGk+CisgICAgICAgPGxpPkluc2lkZSBQbHVnLWlucyBhbmQgRnJhZ21lbnRzIHBhY2thZ2VkIGFzIEpBUnM8L2xpPgorICAgICAgIDxsaT5TdWItZGlyZWN0b3JpZXMgb2YgdGhlIGRpcmVjdG9yeSBuYW1lZCAmcXVvdDtzcmMmcXVvdDsgb2YgY2VydGFpbiBQbHVnLWluczwvbGk+CisgICAgICAgPGxpPkZlYXR1cmUgZGlyZWN0b3JpZXM8L2xpPgorPC91bD4KKworPHA+Tm90ZTogaWYgYSBGZWF0dXJlIG1hZGUgYXZhaWxhYmxlIGJ5IHRoZSBFY2xpcHNlIEZvdW5kYXRpb24gaXMgaW5zdGFsbGVkIHVzaW5nIHRoZSBQcm92aXNpb25pbmcgVGVjaG5vbG9neSAoYXMgZGVmaW5lZCBiZWxvdyksIHlvdSBtdXN0IGFncmVlIHRvIGEgbGljZW5zZSAoJnF1b3Q7RmVhdHVyZSBVcGRhdGUgTGljZW5zZSZxdW90OykgZHVyaW5nIHRoZQoraW5zdGFsbGF0aW9uIHByb2Nlc3MuICBJZiB0aGUgRmVhdHVyZSBjb250YWlucyBJbmNsdWRlZCBGZWF0dXJlcywgdGhlIEZlYXR1cmUgVXBkYXRlIExpY2Vuc2Ugc2hvdWxkIGVpdGhlciBwcm92aWRlIHlvdSB3aXRoIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBnb3Zlcm5pbmcgdGhlIEluY2x1ZGVkIEZlYXR1cmVzIG9yCitpbmZvcm0geW91IHdoZXJlIHlvdSBjYW4gbG9jYXRlIHRoZW0uICBGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlcyBtYXkgYmUgZm91bmQgaW4gdGhlICZxdW90O2xpY2Vuc2UmcXVvdDsgcHJvcGVydHkgb2YgZmlsZXMgbmFtZWQgJnF1b3Q7ZmVhdHVyZS5wcm9wZXJ0aWVzJnF1b3Q7IGZvdW5kIHdpdGhpbiBhIEZlYXR1cmUuCitTdWNoIEFib3V0cywgRmVhdHVyZSBMaWNlbnNlcywgYW5kIEZlYXR1cmUgVXBkYXRlIExpY2Vuc2VzIGNvbnRhaW4gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIChvciByZWZlcmVuY2VzIHRvIHN1Y2ggdGVybXMgYW5kIGNvbmRpdGlvbnMpIHRoYXQgZ292ZXJuIHlvdXIgdXNlIG9mIHRoZSBhc3NvY2lhdGVkIENvbnRlbnQgaW4KK3RoYXQgZGlyZWN0b3J5LjwvcD4KKworPHA+VEhFIEFCT1VUUywgRkVBVFVSRSBMSUNFTlNFUywgQU5EIEZFQVRVUkUgVVBEQVRFIExJQ0VOU0VTIE1BWSBSRUZFUiBUTyBUSEUgRVBMIE9SIE9USEVSIExJQ0VOU0UgQUdSRUVNRU5UUywgTk9USUNFUyBPUiBURVJNUyBBTkQgQ09ORElUSU9OUy4gIFNPTUUgT0YgVEhFU0UKK09USEVSIExJQ0VOU0UgQUdSRUVNRU5UUyBNQVkgSU5DTFVERSAoQlVUIEFSRSBOT1QgTElNSVRFRCBUTyk6PC9wPgorCis8dWw+CisgICAgICAgPGxpPkNvbW1vbiBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMCAoYXZhaWxhYmxlIGF0IDxhIGhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvY3BsLXYxMC5odG1sIj5odHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2NwbC12MTAuaHRtbDwvYT4pPC9saT4KKyAgICAgICA8bGk+QXBhY2hlIFNvZnR3YXJlIExpY2Vuc2UgMS4xIChhdmFpbGFibGUgYXQgPGEgaHJlZj0iaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UiPmh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFPC9hPik8L2xpPgorICAgICAgIDxsaT5BcGFjaGUgU29mdHdhcmUgTGljZW5zZSAyLjAgKGF2YWlsYWJsZSBhdCA8YSBocmVmPSJodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAiPmh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMDwvYT4pPC9saT4KKyAgICAgICA8bGk+TWV0cm8gTGluayBQdWJsaWMgTGljZW5zZSAxLjAwIChhdmFpbGFibGUgYXQgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuZ3JvdXAub3JnL29wZW5tb3RpZi9zdXBwb3J0ZXJzL21ldHJvbGluay9saWNlbnNlLmh0bWwiPmh0dHA6Ly93d3cub3Blbmdyb3VwLm9yZy9vcGVubW90aWYvc3VwcG9ydGVycy9tZXRyb2xpbmsvbGljZW5zZS5odG1sPC9hPik8L2xpPgorICAgICAgIDxsaT5Nb3ppbGxhIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4xIChhdmFpbGFibGUgYXQgPGEgaHJlZj0iaHR0cDovL3d3dy5tb3ppbGxhLm9yZy9NUEwvTVBMLTEuMS5odG1sIj5odHRwOi8vd3d3Lm1vemlsbGEub3JnL01QTC9NUEwtMS4xLmh0bWw8L2E+KTwvbGk+Cis8L3VsPgorCis8cD5JVCBJUyBZT1VSIE9CTElHQVRJT04gVE8gUkVBRCBBTkQgQUNDRVBUIEFMTCBTVUNIIFRFUk1TIEFORCBDT05ESVRJT05TIFBSSU9SIFRPIFVTRSBPRiBUSEUgQ09OVEVOVC4gIElmIG5vIEFib3V0LCBGZWF0dXJlIExpY2Vuc2UsIG9yIEZlYXR1cmUgVXBkYXRlIExpY2Vuc2UgaXMgcHJvdmlkZWQsIHBsZWFzZQorY29udGFjdCB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uIHRvIGRldGVybWluZSB3aGF0IHRlcm1zIGFuZCBjb25kaXRpb25zIGdvdmVybiB0aGF0IHBhcnRpY3VsYXIgQ29udGVudC48L3A+CisKKworPGgzPlVzZSBvZiBQcm92aXNpb25pbmcgVGVjaG5vbG9neTwvaDM+CisKKzxwPlRoZSBFY2xpcHNlIEZvdW5kYXRpb24gbWFrZXMgYXZhaWxhYmxlIHByb3Zpc2lvbmluZyBzb2Z0d2FyZSwgZXhhbXBsZXMgb2Ygd2hpY2ggaW5jbHVkZSwgYnV0IGFyZSBub3QgbGltaXRlZCB0bywgcDIgYW5kIHRoZSBFY2xpcHNlCisgICBVcGRhdGUgTWFuYWdlciAoJnF1b3Q7UHJvdmlzaW9uaW5nIFRlY2hub2xvZ3kmcXVvdDspIGZvciB0aGUgcHVycG9zZSBvZiBhbGxvd2luZyB1c2VycyB0byBpbnN0YWxsIHNvZnR3YXJlLCBkb2N1bWVudGF0aW9uLCBpbmZvcm1hdGlvbiBhbmQvb3IKKyAgIG90aGVyIG1hdGVyaWFscyAoY29sbGVjdGl2ZWx5ICZxdW90O0luc3RhbGxhYmxlIFNvZnR3YXJlJnF1b3Q7KS4gVGhpcyBjYXBhYmlsaXR5IGlzIHByb3ZpZGVkIHdpdGggdGhlIGludGVudCBvZiBhbGxvd2luZyBzdWNoIHVzZXJzIHRvCisgICBpbnN0YWxsLCBleHRlbmQgYW5kIHVwZGF0ZSBFY2xpcHNlLWJhc2VkIHByb2R1Y3RzLiBJbmZvcm1hdGlvbiBhYm91dCBwYWNrYWdpbmcgSW5zdGFsbGFibGUgU29mdHdhcmUgaXMgYXZhaWxhYmxlIGF0IDxhCisgICAgICAgaHJlZj0iaHR0cDovL2VjbGlwc2Uub3JnL2VxdWlub3gvcDIvcmVwb3NpdG9yeV9wYWNrYWdpbmcuaHRtbCI+aHR0cDovL2VjbGlwc2Uub3JnL2VxdWlub3gvcDIvcmVwb3NpdG9yeV9wYWNrYWdpbmcuaHRtbDwvYT4KKyAgICgmcXVvdDtTcGVjaWZpY2F0aW9uJnF1b3Q7KS48L3A+CisKKzxwPllvdSBtYXkgdXNlIFByb3Zpc2lvbmluZyBUZWNobm9sb2d5IHRvIGFsbG93IG90aGVyIHBhcnRpZXMgdG8gaW5zdGFsbCBJbnN0YWxsYWJsZSBTb2Z0d2FyZS4gWW91IHNoYWxsIGJlIHJlc3BvbnNpYmxlIGZvciBlbmFibGluZyB0aGUKKyAgIGFwcGxpY2FibGUgbGljZW5zZSBhZ3JlZW1lbnRzIHJlbGF0aW5nIHRvIHRoZSBJbnN0YWxsYWJsZSBTb2Z0d2FyZSB0byBiZSBwcmVzZW50ZWQgdG8sIGFuZCBhY2NlcHRlZCBieSwgdGhlIHVzZXJzIG9mIHRoZSBQcm92aXNpb25pbmcgVGVjaG5vbG9neQorICAgaW4gYWNjb3JkYW5jZSB3aXRoIHRoZSBTcGVjaWZpY2F0aW9uLiBCeSB1c2luZyBQcm92aXNpb25pbmcgVGVjaG5vbG9neSBpbiBzdWNoIGEgbWFubmVyIGFuZCBtYWtpbmcgaXQgYXZhaWxhYmxlIGluIGFjY29yZGFuY2Ugd2l0aCB0aGUKKyAgIFNwZWNpZmljYXRpb24sIHlvdSBmdXJ0aGVyIGFja25vd2xlZGdlIHlvdXIgYWdyZWVtZW50IHRvLCBhbmQgdGhlIGFjcXVpc2l0aW9uIG9mIGFsbCBuZWNlc3NhcnkgcmlnaHRzIHRvIHBlcm1pdCB0aGUgZm9sbG93aW5nOjwvcD4KKworPG9sPgorICAgICAgIDxsaT5BIHNlcmllcyBvZiBhY3Rpb25zIG1heSBvY2N1ciAoJnF1b3Q7UHJvdmlzaW9uaW5nIFByb2Nlc3MmcXVvdDspIGluIHdoaWNoIGEgdXNlciBtYXkgZXhlY3V0ZSB0aGUgUHJvdmlzaW9uaW5nIFRlY2hub2xvZ3kKKyAgICAgICBvbiBhIG1hY2hpbmUgKCZxdW90O1RhcmdldCBNYWNoaW5lJnF1b3Q7KSB3aXRoIHRoZSBpbnRlbnQgb2YgaW5zdGFsbGluZywgZXh0ZW5kaW5nIG9yIHVwZGF0aW5nIHRoZSBmdW5jdGlvbmFsaXR5IG9mIGFuIEVjbGlwc2UtYmFzZWQKKyAgICAgICBwcm9kdWN0LjwvbGk+CisgICAgICAgPGxpPkR1cmluZyB0aGUgUHJvdmlzaW9uaW5nIFByb2Nlc3MsIHRoZSBQcm92aXNpb25pbmcgVGVjaG5vbG9neSBtYXkgY2F1c2UgdGhpcmQgcGFydHkgSW5zdGFsbGFibGUgU29mdHdhcmUgb3IgYSBwb3J0aW9uIHRoZXJlb2YgdG8gYmUKKyAgICAgICBhY2Nlc3NlZCBhbmQgY29waWVkIHRvIHRoZSBUYXJnZXQgTWFjaGluZS48L2xpPgorICAgICAgIDxsaT5QdXJzdWFudCB0byB0aGUgU3BlY2lmaWNhdGlvbiwgeW91IHdpbGwgcHJvdmlkZSB0byB0aGUgdXNlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgdGhhdCBnb3Zlcm4gdGhlIHVzZSBvZiB0aGUgSW5zdGFsbGFibGUKKyAgICAgICBTb2Z0d2FyZSAoJnF1b3Q7SW5zdGFsbGFibGUgU29mdHdhcmUgQWdyZWVtZW50JnF1b3Q7KSBhbmQgc3VjaCBJbnN0YWxsYWJsZSBTb2Z0d2FyZSBBZ3JlZW1lbnQgc2hhbGwgYmUgYWNjZXNzZWQgZnJvbSB0aGUgVGFyZ2V0CisgICAgICAgTWFjaGluZSBpbiBhY2NvcmRhbmNlIHdpdGggdGhlIFNwZWNpZmljYXRpb24uIFN1Y2ggSW5zdGFsbGFibGUgU29mdHdhcmUgQWdyZWVtZW50IG11c3QgaW5mb3JtIHRoZSB1c2VyIG9mIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyB0aGF0IGdvdmVybgorICAgICAgIHRoZSBJbnN0YWxsYWJsZSBTb2Z0d2FyZSBhbmQgbXVzdCBzb2xpY2l0IGFjY2VwdGFuY2UgYnkgdGhlIGVuZCB1c2VyIGluIHRoZSBtYW5uZXIgcHJlc2NyaWJlZCBpbiBzdWNoIEluc3RhbGxhYmxlIFNvZnR3YXJlIEFncmVlbWVudC4gVXBvbiBzdWNoCisgICAgICAgaW5kaWNhdGlvbiBvZiBhZ3JlZW1lbnQgYnkgdGhlIHVzZXIsIHRoZSBwcm92aXNpb25pbmcgVGVjaG5vbG9neSB3aWxsIGNvbXBsZXRlIGluc3RhbGxhdGlvbiBvZiB0aGUgSW5zdGFsbGFibGUgU29mdHdhcmUuPC9saT4KKzwvb2w+CisKKzxoMz5DcnlwdG9ncmFwaHk8L2gzPgorCis8cD5Db250ZW50IG1heSBjb250YWluIGVuY3J5cHRpb24gc29mdHdhcmUuIFRoZSBjb3VudHJ5IGluIHdoaWNoIHlvdSBhcmUgY3VycmVudGx5IG1heSBoYXZlIHJlc3RyaWN0aW9ucyBvbiB0aGUgaW1wb3J0LCBwb3NzZXNzaW9uLCBhbmQgdXNlLCBhbmQvb3IgcmUtZXhwb3J0IHRvCisgICBhbm90aGVyIGNvdW50cnksIG9mIGVuY3J5cHRpb24gc29mdHdhcmUuIEJFRk9SRSB1c2luZyBhbnkgZW5jcnlwdGlvbiBzb2Z0d2FyZSwgcGxlYXNlIGNoZWNrIHRoZSBjb3VudHJ5J3MgbGF3cywgcmVndWxhdGlvbnMgYW5kIHBvbGljaWVzIGNvbmNlcm5pbmcgdGhlIGltcG9ydCwKKyAgIHBvc3Nlc3Npb24sIG9yIHVzZSwgYW5kIHJlLWV4cG9ydCBvZiBlbmNyeXB0aW9uIHNvZnR3YXJlLCB0byBzZWUgaWYgdGhpcyBpcyBwZXJtaXR0ZWQuPC9wPgorCis8cD48c21hbGw+SmF2YSBhbmQgYWxsIEphdmEtYmFzZWQgdHJhZGVtYXJrcyBhcmUgdHJhZGVtYXJrcyBvZiBPcmFjbGUgQ29ycG9yYXRpb24gaW4gdGhlIFVuaXRlZCBTdGF0ZXMsIG90aGVyIGNvdW50cmllcywgb3IgYm90aC48L3NtYWxsPjwvcD4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLnN0ZW0ubW9kZWxzLnBvcHVsYXRpb24uZmVhdHVyZS8ucHJvamVjdCBiL2ZlYXR1cmVzL29yZy5lY2xpcHNlLnN0ZW0ubW9kZWxzLnBvcHVsYXRpb24uZmVhdHVyZS8ucHJvamVjdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMGU2ZDVkCi0tLSAvZGV2L251bGwKKysrIGIvZmVhdHVyZXMvb3JnLmVjbGlwc2Uuc3RlbS5tb2RlbHMucG9wdWxhdGlvbi5mZWF0dXJlLy5wcm9qZWN0CkBAIC0wLDAgKzEsMTcgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8cHJvamVjdERlc2NyaXB0aW9uPgorCTxuYW1lPm9yZy5lY2xpcHNlLnN0ZW0ubW9kZWxzLnBvcHVsYXRpb24uZmVhdHVyZTwvbmFtZT4KKwk8Y29tbWVudD48L2NvbW1lbnQ+CisJPHByb2plY3RzPgorCTwvcHJvamVjdHM+CisJPGJ1aWxkU3BlYz4KKwkJPGJ1aWxkQ29tbWFuZD4KKwkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5GZWF0dXJlQnVpbGRlcjwvbmFtZT4KKwkJCTxhcmd1bWVudHM+CisJCQk8L2FyZ3VtZW50cz4KKwkJPC9idWlsZENvbW1hbmQ+CisJPC9idWlsZFNwZWM+CisJPG5hdHVyZXM+CisJCTxuYXR1cmU+b3JnLmVjbGlwc2UucGRlLkZlYXR1cmVOYXR1cmU8L25hdHVyZT4KKwk8L25hdHVyZXM+Cis8L3Byb2plY3REZXNjcmlwdGlvbj4KZGlmZiAtLWdpdCBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLnN0ZW0ubW9kZWxzLnBvcHVsYXRpb24uZmVhdHVyZS9idWlsZC5wcm9wZXJ0aWVzIGIvZmVhdHVyZXMvb3JnLmVjbGlwc2Uuc3RlbS5tb2RlbHMucG9wdWxhdGlvbi5mZWF0dXJlL2J1aWxkLnByb3BlcnRpZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjc0YWY4NgotLS0gL2Rldi9udWxsCisrKyBiL2ZlYXR1cmVzL29yZy5lY2xpcHNlLnN0ZW0ubW9kZWxzLnBvcHVsYXRpb24uZmVhdHVyZS9idWlsZC5wcm9wZXJ0aWVzCkBAIC0wLDAgKzEsNCBAQAorYmluLmluY2x1ZGVzID0gZmVhdHVyZS54bWwsXAorICAgICAgICAgICAgICAgZmVhdHVyZS5wcm9wZXJ0aWVzLFwKKyAgICAgICAgICAgICAgIGVwbC12MTAuaHRtbCxcCisgICAgICAgICAgICAgICBsaWNlbnNlLmh0bWwKZGlmZiAtLWdpdCBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLnN0ZW0ubW9kZWxzLnBvcHVsYXRpb24uZmVhdHVyZS9lcGwtdjEwLmh0bWwgYi9mZWF0dXJlcy9vcmcuZWNsaXBzZS5zdGVtLm1vZGVscy5wb3B1bGF0aW9uLmZlYXR1cmUvZXBsLXYxMC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVkNGIxOTYKLS0tIC9kZXYvbnVsbAorKysgYi9mZWF0dXJlcy9vcmcuZWNsaXBzZS5zdGVtLm1vZGVscy5wb3B1bGF0aW9uLmZlYXR1cmUvZXBsLXYxMC5odG1sCkBAIC0wLDAgKzEsMzI4IEBACis8aHRtbCB4bWxuczpvPSJ1cm46c2NoZW1hcy1taWNyb3NvZnQtY29tOm9mZmljZTpvZmZpY2UiCit4bWxuczp3PSJ1cm46c2NoZW1hcy1taWNyb3NvZnQtY29tOm9mZmljZTp3b3JkIgoreG1sbnM9Imh0dHA6Ly93d3cudzMub3JnL1RSL1JFQy1odG1sNDAiPgorCis8aGVhZD4KKzxtZXRhIGh0dHAtZXF1aXY9Q29udGVudC1UeXBlIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD13aW5kb3dzLTEyNTIiPgorPG1ldGEgbmFtZT1Qcm9nSWQgY29udGVudD1Xb3JkLkRvY3VtZW50PgorPG1ldGEgbmFtZT1HZW5lcmF0b3IgY29udGVudD0iTWljcm9zb2Z0IFdvcmQgOSI+Cis8bWV0YSBuYW1lPU9yaWdpbmF0b3IgY29udGVudD0iTWljcm9zb2Z0IFdvcmQgOSI+Cis8bGluayByZWw9RmlsZS1MaXN0CitocmVmPSIuL0VjbGlwc2UlMjBFUEwlMjAyMDAzXzExXzEwJTIwRmluYWxfZmlsZXMvZmlsZWxpc3QueG1sIj4KKzx0aXRsZT5FY2xpcHNlIFB1YmxpYyBMaWNlbnNlIC0gVmVyc2lvbiAxLjA8L3RpdGxlPgorPCEtLVtpZiBndGUgbXNvIDldPjx4bWw+CisgPG86RG9jdW1lbnRQcm9wZXJ0aWVzPgorICA8bzpSZXZpc2lvbj4yPC9vOlJldmlzaW9uPgorICA8bzpUb3RhbFRpbWU+MzwvbzpUb3RhbFRpbWU+CisgIDxvOkNyZWF0ZWQ+MjAwNC0wMy0wNVQyMzowMzowMFo8L286Q3JlYXRlZD4KKyAgPG86TGFzdFNhdmVkPjIwMDQtMDMtMDVUMjM6MDM6MDBaPC9vOkxhc3RTYXZlZD4KKyAgPG86UGFnZXM+NDwvbzpQYWdlcz4KKyAgPG86V29yZHM+MTYyNjwvbzpXb3Jkcz4KKyAgPG86Q2hhcmFjdGVycz45MjcwPC9vOkNoYXJhY3RlcnM+CisgICA8bzpMaW5lcz43NzwvbzpMaW5lcz4KKyAgPG86UGFyYWdyYXBocz4xODwvbzpQYXJhZ3JhcGhzPgorICA8bzpDaGFyYWN0ZXJzV2l0aFNwYWNlcz4xMTM4NDwvbzpDaGFyYWN0ZXJzV2l0aFNwYWNlcz4KKyAgPG86VmVyc2lvbj45LjQ0MDI8L286VmVyc2lvbj4KKyA8L286RG9jdW1lbnRQcm9wZXJ0aWVzPgorPC94bWw+PCFbZW5kaWZdLS0+PCEtLVtpZiBndGUgbXNvIDldPjx4bWw+CisgPHc6V29yZERvY3VtZW50PgorICA8dzpUcmFja1JldmlzaW9ucy8+CisgPC93OldvcmREb2N1bWVudD4KKzwveG1sPjwhW2VuZGlmXS0tPgorPHN0eWxlPgorPCEtLQorIC8qIEZvbnQgRGVmaW5pdGlvbnMgKi8KK0Bmb250LWZhY2UKKwl7Zm9udC1mYW1pbHk6VGFob21hOworCXBhbm9zZS0xOjIgMTEgNiA0IDMgNSA0IDQgMiA0OworCW1zby1mb250LWNoYXJzZXQ6MDsKKwltc28tZ2VuZXJpYy1mb250LWZhbWlseTpzd2lzczsKKwltc28tZm9udC1waXRjaDp2YXJpYWJsZTsKKwltc28tZm9udC1zaWduYXR1cmU6NTUzNjc5NDk1IC0yMTQ3NDgzNjQ4IDggMCA2NjA0NyAwO30KKyAvKiBTdHlsZSBEZWZpbml0aW9ucyAqLworcC5Nc29Ob3JtYWwsIGxpLk1zb05vcm1hbCwgZGl2Lk1zb05vcm1hbAorCXttc28tc3R5bGUtcGFyZW50OiIiOworCW1hcmdpbjowaW47CisJbWFyZ2luLWJvdHRvbTouMDAwMXB0OworCW1zby1wYWdpbmF0aW9uOndpZG93LW9ycGhhbjsKKwlmb250LXNpemU6MTIuMHB0OworCWZvbnQtZmFtaWx5OiJUaW1lcyBOZXcgUm9tYW4iOworCW1zby1mYXJlYXN0LWZvbnQtZmFtaWx5OiJUaW1lcyBOZXcgUm9tYW4iO30KK3AKKwl7bWFyZ2luLXJpZ2h0OjBpbjsKKwltc28tbWFyZ2luLXRvcC1hbHQ6YXV0bzsKKwltc28tbWFyZ2luLWJvdHRvbS1hbHQ6YXV0bzsKKwltYXJnaW4tbGVmdDowaW47CisJbXNvLXBhZ2luYXRpb246d2lkb3ctb3JwaGFuOworCWZvbnQtc2l6ZToxMi4wcHQ7CisJZm9udC1mYW1pbHk6IlRpbWVzIE5ldyBSb21hbiI7CisJbXNvLWZhcmVhc3QtZm9udC1mYW1pbHk6IlRpbWVzIE5ldyBSb21hbiI7fQorcC5CYWxsb29uVGV4dCwgbGkuQmFsbG9vblRleHQsIGRpdi5CYWxsb29uVGV4dAorCXttc28tc3R5bGUtbmFtZToiQmFsbG9vbiBUZXh0IjsKKwltYXJnaW46MGluOworCW1hcmdpbi1ib3R0b206LjAwMDFwdDsKKwltc28tcGFnaW5hdGlvbjp3aWRvdy1vcnBoYW47CisJZm9udC1zaXplOjguMHB0OworCWZvbnQtZmFtaWx5OlRhaG9tYTsKKwltc28tZmFyZWFzdC1mb250LWZhbWlseToiVGltZXMgTmV3IFJvbWFuIjt9CitAcGFnZSBTZWN0aW9uMQorCXtzaXplOjguNWluIDExLjBpbjsKKwltYXJnaW46MS4waW4gMS4yNWluIDEuMGluIDEuMjVpbjsKKwltc28taGVhZGVyLW1hcmdpbjouNWluOworCW1zby1mb290ZXItbWFyZ2luOi41aW47CisJbXNvLXBhcGVyLXNvdXJjZTowO30KK2Rpdi5TZWN0aW9uMQorCXtwYWdlOlNlY3Rpb24xO30KKy0tPgorPC9zdHlsZT4KKzwvaGVhZD4KKworPGJvZHkgbGFuZz1FTi1VUyBzdHlsZT0ndGFiLWludGVydmFsOi41aW4nPgorCis8ZGl2IGNsYXNzPVNlY3Rpb24xPgorCis8cCBhbGlnbj1jZW50ZXIgc3R5bGU9J3RleHQtYWxpZ246Y2VudGVyJz48Yj5FY2xpcHNlIFB1YmxpYyBMaWNlbnNlIC0gdiAxLjA8L2I+Cis8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5USEUgQUNDT01QQU5ZSU5HIFBST0dSQU0gSVMgUFJPVklERUQgVU5ERVIKK1RIRSBURVJNUyBPRiBUSElTIEVDTElQU0UgUFVCTElDIExJQ0VOU0UgKCZxdW90O0FHUkVFTUVOVCZxdW90OykuIEFOWSBVU0UsCitSRVBST0RVQ1RJT04gT1IgRElTVFJJQlVUSU9OIE9GIFRIRSBQUk9HUkFNIENPTlNUSVRVVEVTIFJFQ0lQSUVOVCdTIEFDQ0VQVEFOQ0UKK09GIFRISVMgQUdSRUVNRU5ULjwvc3Bhbj4gPC9wPgorCis8cD48Yj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+MS4gREVGSU5JVElPTlM8L3NwYW4+PC9iPiA8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4mcXVvdDtDb250cmlidXRpb24mcXVvdDsgbWVhbnM6PC9zcGFuPiA8L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmEpCitpbiB0aGUgY2FzZSBvZiB0aGUgaW5pdGlhbCBDb250cmlidXRvciwgdGhlIGluaXRpYWwgY29kZSBhbmQgZG9jdW1lbnRhdGlvbgorZGlzdHJpYnV0ZWQgdW5kZXIgdGhpcyBBZ3JlZW1lbnQsIGFuZDxiciBjbGVhcj1sZWZ0PgorYikgaW4gdGhlIGNhc2Ugb2YgZWFjaCBzdWJzZXF1ZW50IENvbnRyaWJ1dG9yOjwvc3Bhbj48L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmkpCitjaGFuZ2VzIHRvIHRoZSBQcm9ncmFtLCBhbmQ8L3NwYW4+PC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5paSkKK2FkZGl0aW9ucyB0byB0aGUgUHJvZ3JhbTs8L3NwYW4+PC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz53aGVyZQorc3VjaCBjaGFuZ2VzIGFuZC9vciBhZGRpdGlvbnMgdG8gdGhlIFByb2dyYW0gb3JpZ2luYXRlIGZyb20gYW5kIGFyZSBkaXN0cmlidXRlZAorYnkgdGhhdCBwYXJ0aWN1bGFyIENvbnRyaWJ1dG9yLiBBIENvbnRyaWJ1dGlvbiAnb3JpZ2luYXRlcycgZnJvbSBhIENvbnRyaWJ1dG9yCitpZiBpdCB3YXMgYWRkZWQgdG8gdGhlIFByb2dyYW0gYnkgc3VjaCBDb250cmlidXRvciBpdHNlbGYgb3IgYW55b25lIGFjdGluZyBvbgorc3VjaCBDb250cmlidXRvcidzIGJlaGFsZi4gQ29udHJpYnV0aW9ucyBkbyBub3QgaW5jbHVkZSBhZGRpdGlvbnMgdG8gdGhlCitQcm9ncmFtIHdoaWNoOiAoaSkgYXJlIHNlcGFyYXRlIG1vZHVsZXMgb2Ygc29mdHdhcmUgZGlzdHJpYnV0ZWQgaW4gY29uanVuY3Rpb24KK3dpdGggdGhlIFByb2dyYW0gdW5kZXIgdGhlaXIgb3duIGxpY2Vuc2UgYWdyZWVtZW50LCBhbmQgKGlpKSBhcmUgbm90IGRlcml2YXRpdmUKK3dvcmtzIG9mIHRoZSBQcm9ncmFtLiA8L3NwYW4+PC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+JnF1b3Q7Q29udHJpYnV0b3ImcXVvdDsgbWVhbnMgYW55IHBlcnNvbiBvcgorZW50aXR5IHRoYXQgZGlzdHJpYnV0ZXMgdGhlIFByb2dyYW0uPC9zcGFuPiA8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4mcXVvdDtMaWNlbnNlZCBQYXRlbnRzICZxdW90OyBtZWFuIHBhdGVudAorY2xhaW1zIGxpY2Vuc2FibGUgYnkgYSBDb250cmlidXRvciB3aGljaCBhcmUgbmVjZXNzYXJpbHkgaW5mcmluZ2VkIGJ5IHRoZSB1c2UKK29yIHNhbGUgb2YgaXRzIENvbnRyaWJ1dGlvbiBhbG9uZSBvciB3aGVuIGNvbWJpbmVkIHdpdGggdGhlIFByb2dyYW0uIDwvc3Bhbj48L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4mcXVvdDtQcm9ncmFtJnF1b3Q7IG1lYW5zIHRoZSBDb250cmlidXRpb25zCitkaXN0cmlidXRlZCBpbiBhY2NvcmRhbmNlIHdpdGggdGhpcyBBZ3JlZW1lbnQuPC9zcGFuPiA8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4mcXVvdDtSZWNpcGllbnQmcXVvdDsgbWVhbnMgYW55b25lIHdobworcmVjZWl2ZXMgdGhlIFByb2dyYW0gdW5kZXIgdGhpcyBBZ3JlZW1lbnQsIGluY2x1ZGluZyBhbGwgQ29udHJpYnV0b3JzLjwvc3Bhbj4gPC9wPgorCis8cD48Yj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+Mi4gR1JBTlQgT0YgUklHSFRTPC9zcGFuPjwvYj4gPC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5hKQorU3ViamVjdCB0byB0aGUgdGVybXMgb2YgdGhpcyBBZ3JlZW1lbnQsIGVhY2ggQ29udHJpYnV0b3IgaGVyZWJ5IGdyYW50cyBSZWNpcGllbnQKK2Egbm9uLWV4Y2x1c2l2ZSwgd29ybGR3aWRlLCByb3lhbHR5LWZyZWUgY29weXJpZ2h0IGxpY2Vuc2UgdG88c3Bhbgorc3R5bGU9J2NvbG9yOnJlZCc+IDwvc3Bhbj5yZXByb2R1Y2UsIHByZXBhcmUgZGVyaXZhdGl2ZSB3b3JrcyBvZiwgcHVibGljbHkKK2Rpc3BsYXksIHB1YmxpY2x5IHBlcmZvcm0sIGRpc3RyaWJ1dGUgYW5kIHN1YmxpY2Vuc2UgdGhlIENvbnRyaWJ1dGlvbiBvZiBzdWNoCitDb250cmlidXRvciwgaWYgYW55LCBhbmQgc3VjaCBkZXJpdmF0aXZlIHdvcmtzLCBpbiBzb3VyY2UgY29kZSBhbmQgb2JqZWN0IGNvZGUKK2Zvcm0uPC9zcGFuPjwvcD4KKworPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YikKK1N1YmplY3QgdG8gdGhlIHRlcm1zIG9mIHRoaXMgQWdyZWVtZW50LCBlYWNoIENvbnRyaWJ1dG9yIGhlcmVieSBncmFudHMKK1JlY2lwaWVudCBhIG5vbi1leGNsdXNpdmUsIHdvcmxkd2lkZSw8c3BhbiBzdHlsZT0nY29sb3I6Z3JlZW4nPiA8L3NwYW4+cm95YWx0eS1mcmVlCitwYXRlbnQgbGljZW5zZSB1bmRlciBMaWNlbnNlZCBQYXRlbnRzIHRvIG1ha2UsIHVzZSwgc2VsbCwgb2ZmZXIgdG8gc2VsbCwgaW1wb3J0CithbmQgb3RoZXJ3aXNlIHRyYW5zZmVyIHRoZSBDb250cmlidXRpb24gb2Ygc3VjaCBDb250cmlidXRvciwgaWYgYW55LCBpbiBzb3VyY2UKK2NvZGUgYW5kIG9iamVjdCBjb2RlIGZvcm0uIFRoaXMgcGF0ZW50IGxpY2Vuc2Ugc2hhbGwgYXBwbHkgdG8gdGhlIGNvbWJpbmF0aW9uCitvZiB0aGUgQ29udHJpYnV0aW9uIGFuZCB0aGUgUHJvZ3JhbSBpZiwgYXQgdGhlIHRpbWUgdGhlIENvbnRyaWJ1dGlvbiBpcyBhZGRlZAorYnkgdGhlIENvbnRyaWJ1dG9yLCBzdWNoIGFkZGl0aW9uIG9mIHRoZSBDb250cmlidXRpb24gY2F1c2VzIHN1Y2ggY29tYmluYXRpb24KK3RvIGJlIGNvdmVyZWQgYnkgdGhlIExpY2Vuc2VkIFBhdGVudHMuIFRoZSBwYXRlbnQgbGljZW5zZSBzaGFsbCBub3QgYXBwbHkgdG8KK2FueSBvdGhlciBjb21iaW5hdGlvbnMgd2hpY2ggaW5jbHVkZSB0aGUgQ29udHJpYnV0aW9uLiBObyBoYXJkd2FyZSBwZXIgc2UgaXMKK2xpY2Vuc2VkIGhlcmV1bmRlci4gPC9zcGFuPjwvcD4KKworPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YykKK1JlY2lwaWVudCB1bmRlcnN0YW5kcyB0aGF0IGFsdGhvdWdoIGVhY2ggQ29udHJpYnV0b3IgZ3JhbnRzIHRoZSBsaWNlbnNlcyB0byBpdHMKK0NvbnRyaWJ1dGlvbnMgc2V0IGZvcnRoIGhlcmVpbiwgbm8gYXNzdXJhbmNlcyBhcmUgcHJvdmlkZWQgYnkgYW55IENvbnRyaWJ1dG9yCit0aGF0IHRoZSBQcm9ncmFtIGRvZXMgbm90IGluZnJpbmdlIHRoZSBwYXRlbnQgb3Igb3RoZXIgaW50ZWxsZWN0dWFsIHByb3BlcnR5CityaWdodHMgb2YgYW55IG90aGVyIGVudGl0eS4gRWFjaCBDb250cmlidXRvciBkaXNjbGFpbXMgYW55IGxpYWJpbGl0eSB0byBSZWNpcGllbnQKK2ZvciBjbGFpbXMgYnJvdWdodCBieSBhbnkgb3RoZXIgZW50aXR5IGJhc2VkIG9uIGluZnJpbmdlbWVudCBvZiBpbnRlbGxlY3R1YWwKK3Byb3BlcnR5IHJpZ2h0cyBvciBvdGhlcndpc2UuIEFzIGEgY29uZGl0aW9uIHRvIGV4ZXJjaXNpbmcgdGhlIHJpZ2h0cyBhbmQKK2xpY2Vuc2VzIGdyYW50ZWQgaGVyZXVuZGVyLCBlYWNoIFJlY2lwaWVudCBoZXJlYnkgYXNzdW1lcyBzb2xlIHJlc3BvbnNpYmlsaXR5Cit0byBzZWN1cmUgYW55IG90aGVyIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgbmVlZGVkLCBpZiBhbnkuIEZvciBleGFtcGxlLAoraWYgYSB0aGlyZCBwYXJ0eSBwYXRlbnQgbGljZW5zZSBpcyByZXF1aXJlZCB0byBhbGxvdyBSZWNpcGllbnQgdG8gZGlzdHJpYnV0ZQordGhlIFByb2dyYW0sIGl0IGlzIFJlY2lwaWVudCdzIHJlc3BvbnNpYmlsaXR5IHRvIGFjcXVpcmUgdGhhdCBsaWNlbnNlIGJlZm9yZQorZGlzdHJpYnV0aW5nIHRoZSBQcm9ncmFtLjwvc3Bhbj48L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmQpCitFYWNoIENvbnRyaWJ1dG9yIHJlcHJlc2VudHMgdGhhdCB0byBpdHMga25vd2xlZGdlIGl0IGhhcyBzdWZmaWNpZW50IGNvcHlyaWdodAorcmlnaHRzIGluIGl0cyBDb250cmlidXRpb24sIGlmIGFueSwgdG8gZ3JhbnQgdGhlIGNvcHlyaWdodCBsaWNlbnNlIHNldCBmb3J0aCBpbgordGhpcyBBZ3JlZW1lbnQuIDwvc3Bhbj48L3A+CisKKzxwPjxiPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4zLiBSRVFVSVJFTUVOVFM8L3NwYW4+PC9iPiA8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5BIENvbnRyaWJ1dG9yIG1heSBjaG9vc2UgdG8gZGlzdHJpYnV0ZSB0aGUKK1Byb2dyYW0gaW4gb2JqZWN0IGNvZGUgZm9ybSB1bmRlciBpdHMgb3duIGxpY2Vuc2UgYWdyZWVtZW50LCBwcm92aWRlZCB0aGF0Ojwvc3Bhbj4KKzwvcD4KKworPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YSkKK2l0IGNvbXBsaWVzIHdpdGggdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoaXMgQWdyZWVtZW50OyBhbmQ8L3NwYW4+PC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5iKQoraXRzIGxpY2Vuc2UgYWdyZWVtZW50Ojwvc3Bhbj48L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmkpCitlZmZlY3RpdmVseSBkaXNjbGFpbXMgb24gYmVoYWxmIG9mIGFsbCBDb250cmlidXRvcnMgYWxsIHdhcnJhbnRpZXMgYW5kCitjb25kaXRpb25zLCBleHByZXNzIGFuZCBpbXBsaWVkLCBpbmNsdWRpbmcgd2FycmFudGllcyBvciBjb25kaXRpb25zIG9mIHRpdGxlCithbmQgbm9uLWluZnJpbmdlbWVudCwgYW5kIGltcGxpZWQgd2FycmFudGllcyBvciBjb25kaXRpb25zIG9mIG1lcmNoYW50YWJpbGl0eQorYW5kIGZpdG5lc3MgZm9yIGEgcGFydGljdWxhciBwdXJwb3NlOyA8L3NwYW4+PC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5paSkKK2VmZmVjdGl2ZWx5IGV4Y2x1ZGVzIG9uIGJlaGFsZiBvZiBhbGwgQ29udHJpYnV0b3JzIGFsbCBsaWFiaWxpdHkgZm9yIGRhbWFnZXMsCitpbmNsdWRpbmcgZGlyZWN0LCBpbmRpcmVjdCwgc3BlY2lhbCwgaW5jaWRlbnRhbCBhbmQgY29uc2VxdWVudGlhbCBkYW1hZ2VzLCBzdWNoCithcyBsb3N0IHByb2ZpdHM7IDwvc3Bhbj48L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmlpaSkKK3N0YXRlcyB0aGF0IGFueSBwcm92aXNpb25zIHdoaWNoIGRpZmZlciBmcm9tIHRoaXMgQWdyZWVtZW50IGFyZSBvZmZlcmVkIGJ5IHRoYXQKK0NvbnRyaWJ1dG9yIGFsb25lIGFuZCBub3QgYnkgYW55IG90aGVyIHBhcnR5OyBhbmQ8L3NwYW4+PC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5pdikKK3N0YXRlcyB0aGF0IHNvdXJjZSBjb2RlIGZvciB0aGUgUHJvZ3JhbSBpcyBhdmFpbGFibGUgZnJvbSBzdWNoIENvbnRyaWJ1dG9yLCBhbmQKK2luZm9ybXMgbGljZW5zZWVzIGhvdyB0byBvYnRhaW4gaXQgaW4gYSByZWFzb25hYmxlIG1hbm5lciBvbiBvciB0aHJvdWdoIGEKK21lZGl1bSBjdXN0b21hcmlseSB1c2VkIGZvciBzb2Z0d2FyZSBleGNoYW5nZS48c3BhbiBzdHlsZT0nY29sb3I6Ymx1ZSc+IDwvc3Bhbj48L3NwYW4+PC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+V2hlbiB0aGUgUHJvZ3JhbSBpcyBtYWRlIGF2YWlsYWJsZSBpbiBzb3VyY2UKK2NvZGUgZm9ybTo8L3NwYW4+IDwvcD4KKworPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YSkKK2l0IG11c3QgYmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhpcyBBZ3JlZW1lbnQ7IGFuZCA8L3NwYW4+PC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5iKSBhCitjb3B5IG9mIHRoaXMgQWdyZWVtZW50IG11c3QgYmUgaW5jbHVkZWQgd2l0aCBlYWNoIGNvcHkgb2YgdGhlIFByb2dyYW0uIDwvc3Bhbj48L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5Db250cmlidXRvcnMgbWF5IG5vdCByZW1vdmUgb3IgYWx0ZXIgYW55Citjb3B5cmlnaHQgbm90aWNlcyBjb250YWluZWQgd2l0aGluIHRoZSBQcm9ncmFtLiA8L3NwYW4+PC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+RWFjaCBDb250cmlidXRvciBtdXN0IGlkZW50aWZ5IGl0c2VsZiBhcyB0aGUKK29yaWdpbmF0b3Igb2YgaXRzIENvbnRyaWJ1dGlvbiwgaWYgYW55LCBpbiBhIG1hbm5lciB0aGF0IHJlYXNvbmFibHkgYWxsb3dzCitzdWJzZXF1ZW50IFJlY2lwaWVudHMgdG8gaWRlbnRpZnkgdGhlIG9yaWdpbmF0b3Igb2YgdGhlIENvbnRyaWJ1dGlvbi4gPC9zcGFuPjwvcD4KKworPHA+PGI+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPjQuIENPTU1FUkNJQUwgRElTVFJJQlVUSU9OPC9zcGFuPjwvYj4gPC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+Q29tbWVyY2lhbCBkaXN0cmlidXRvcnMgb2Ygc29mdHdhcmUgbWF5CithY2NlcHQgY2VydGFpbiByZXNwb25zaWJpbGl0aWVzIHdpdGggcmVzcGVjdCB0byBlbmQgdXNlcnMsIGJ1c2luZXNzIHBhcnRuZXJzCithbmQgdGhlIGxpa2UuIFdoaWxlIHRoaXMgbGljZW5zZSBpcyBpbnRlbmRlZCB0byBmYWNpbGl0YXRlIHRoZSBjb21tZXJjaWFsIHVzZQorb2YgdGhlIFByb2dyYW0sIHRoZSBDb250cmlidXRvciB3aG8gaW5jbHVkZXMgdGhlIFByb2dyYW0gaW4gYSBjb21tZXJjaWFsCitwcm9kdWN0IG9mZmVyaW5nIHNob3VsZCBkbyBzbyBpbiBhIG1hbm5lciB3aGljaCBkb2VzIG5vdCBjcmVhdGUgcG90ZW50aWFsCitsaWFiaWxpdHkgZm9yIG90aGVyIENvbnRyaWJ1dG9ycy4gVGhlcmVmb3JlLCBpZiBhIENvbnRyaWJ1dG9yIGluY2x1ZGVzIHRoZQorUHJvZ3JhbSBpbiBhIGNvbW1lcmNpYWwgcHJvZHVjdCBvZmZlcmluZywgc3VjaCBDb250cmlidXRvciAoJnF1b3Q7Q29tbWVyY2lhbAorQ29udHJpYnV0b3ImcXVvdDspIGhlcmVieSBhZ3JlZXMgdG8gZGVmZW5kIGFuZCBpbmRlbW5pZnkgZXZlcnkgb3RoZXIKK0NvbnRyaWJ1dG9yICgmcXVvdDtJbmRlbW5pZmllZCBDb250cmlidXRvciZxdW90OykgYWdhaW5zdCBhbnkgbG9zc2VzLCBkYW1hZ2VzIGFuZAorY29zdHMgKGNvbGxlY3RpdmVseSAmcXVvdDtMb3NzZXMmcXVvdDspIGFyaXNpbmcgZnJvbSBjbGFpbXMsIGxhd3N1aXRzIGFuZCBvdGhlcgorbGVnYWwgYWN0aW9ucyBicm91Z2h0IGJ5IGEgdGhpcmQgcGFydHkgYWdhaW5zdCB0aGUgSW5kZW1uaWZpZWQgQ29udHJpYnV0b3IgdG8KK3RoZSBleHRlbnQgY2F1c2VkIGJ5IHRoZSBhY3RzIG9yIG9taXNzaW9ucyBvZiBzdWNoIENvbW1lcmNpYWwgQ29udHJpYnV0b3IgaW4KK2Nvbm5lY3Rpb24gd2l0aCBpdHMgZGlzdHJpYnV0aW9uIG9mIHRoZSBQcm9ncmFtIGluIGEgY29tbWVyY2lhbCBwcm9kdWN0CitvZmZlcmluZy4gVGhlIG9ibGlnYXRpb25zIGluIHRoaXMgc2VjdGlvbiBkbyBub3QgYXBwbHkgdG8gYW55IGNsYWltcyBvciBMb3NzZXMKK3JlbGF0aW5nIHRvIGFueSBhY3R1YWwgb3IgYWxsZWdlZCBpbnRlbGxlY3R1YWwgcHJvcGVydHkgaW5mcmluZ2VtZW50LiBJbiBvcmRlcgordG8gcXVhbGlmeSwgYW4gSW5kZW1uaWZpZWQgQ29udHJpYnV0b3IgbXVzdDogYSkgcHJvbXB0bHkgbm90aWZ5IHRoZSBDb21tZXJjaWFsCitDb250cmlidXRvciBpbiB3cml0aW5nIG9mIHN1Y2ggY2xhaW0sIGFuZCBiKSBhbGxvdyB0aGUgQ29tbWVyY2lhbCBDb250cmlidXRvcgordG8gY29udHJvbCwgYW5kIGNvb3BlcmF0ZSB3aXRoIHRoZSBDb21tZXJjaWFsIENvbnRyaWJ1dG9yIGluLCB0aGUgZGVmZW5zZSBhbmQKK2FueSByZWxhdGVkIHNldHRsZW1lbnQgbmVnb3RpYXRpb25zLiBUaGUgSW5kZW1uaWZpZWQgQ29udHJpYnV0b3IgbWF5IHBhcnRpY2lwYXRlCitpbiBhbnkgc3VjaCBjbGFpbSBhdCBpdHMgb3duIGV4cGVuc2UuPC9zcGFuPiA8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5Gb3IgZXhhbXBsZSwgYSBDb250cmlidXRvciBtaWdodCBpbmNsdWRlIHRoZQorUHJvZ3JhbSBpbiBhIGNvbW1lcmNpYWwgcHJvZHVjdCBvZmZlcmluZywgUHJvZHVjdCBYLiBUaGF0IENvbnRyaWJ1dG9yIGlzIHRoZW4gYQorQ29tbWVyY2lhbCBDb250cmlidXRvci4gSWYgdGhhdCBDb21tZXJjaWFsIENvbnRyaWJ1dG9yIHRoZW4gbWFrZXMgcGVyZm9ybWFuY2UKK2NsYWltcywgb3Igb2ZmZXJzIHdhcnJhbnRpZXMgcmVsYXRlZCB0byBQcm9kdWN0IFgsIHRob3NlIHBlcmZvcm1hbmNlIGNsYWltcyBhbmQKK3dhcnJhbnRpZXMgYXJlIHN1Y2ggQ29tbWVyY2lhbCBDb250cmlidXRvcidzIHJlc3BvbnNpYmlsaXR5IGFsb25lLiBVbmRlciB0aGlzCitzZWN0aW9uLCB0aGUgQ29tbWVyY2lhbCBDb250cmlidXRvciB3b3VsZCBoYXZlIHRvIGRlZmVuZCBjbGFpbXMgYWdhaW5zdCB0aGUKK290aGVyIENvbnRyaWJ1dG9ycyByZWxhdGVkIHRvIHRob3NlIHBlcmZvcm1hbmNlIGNsYWltcyBhbmQgd2FycmFudGllcywgYW5kIGlmIGEKK2NvdXJ0IHJlcXVpcmVzIGFueSBvdGhlciBDb250cmlidXRvciB0byBwYXkgYW55IGRhbWFnZXMgYXMgYSByZXN1bHQsIHRoZQorQ29tbWVyY2lhbCBDb250cmlidXRvciBtdXN0IHBheSB0aG9zZSBkYW1hZ2VzLjwvc3Bhbj4gPC9wPgorCis8cD48Yj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+NS4gTk8gV0FSUkFOVFk8L3NwYW4+PC9iPiA8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5FWENFUFQgQVMgRVhQUkVTU0xZIFNFVCBGT1JUSCBJTiBUSElTCitBR1JFRU1FTlQsIFRIRSBQUk9HUkFNIElTIFBST1ZJREVEIE9OIEFOICZxdW90O0FTIElTJnF1b3Q7IEJBU0lTLCBXSVRIT1VUCitXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIEVJVEhFUiBFWFBSRVNTIE9SIElNUExJRUQgSU5DTFVESU5HLAorV0lUSE9VVCBMSU1JVEFUSU9OLCBBTlkgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIFRJVExFLCBOT04tSU5GUklOR0VNRU5ULAorTUVSQ0hBTlRBQklMSVRZIE9SIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBFYWNoIFJlY2lwaWVudCBpcyBzb2xlbHkKK3Jlc3BvbnNpYmxlIGZvciBkZXRlcm1pbmluZyB0aGUgYXBwcm9wcmlhdGVuZXNzIG9mIHVzaW5nIGFuZCBkaXN0cmlidXRpbmcgdGhlCitQcm9ncmFtIGFuZCBhc3N1bWVzIGFsbCByaXNrcyBhc3NvY2lhdGVkIHdpdGggaXRzIGV4ZXJjaXNlIG9mIHJpZ2h0cyB1bmRlciB0aGlzCitBZ3JlZW1lbnQgLCBpbmNsdWRpbmcgYnV0IG5vdCBsaW1pdGVkIHRvIHRoZSByaXNrcyBhbmQgY29zdHMgb2YgcHJvZ3JhbSBlcnJvcnMsCitjb21wbGlhbmNlIHdpdGggYXBwbGljYWJsZSBsYXdzLCBkYW1hZ2UgdG8gb3IgbG9zcyBvZiBkYXRhLCBwcm9ncmFtcyBvcgorZXF1aXBtZW50LCBhbmQgdW5hdmFpbGFiaWxpdHkgb3IgaW50ZXJydXB0aW9uIG9mIG9wZXJhdGlvbnMuIDwvc3Bhbj48L3A+CisKKzxwPjxiPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz42LiBESVNDTEFJTUVSIE9GIExJQUJJTElUWTwvc3Bhbj48L2I+IDwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkVYQ0VQVCBBUyBFWFBSRVNTTFkgU0VUIEZPUlRIIElOIFRISVMKK0FHUkVFTUVOVCwgTkVJVEhFUiBSRUNJUElFTlQgTk9SIEFOWSBDT05UUklCVVRPUlMgU0hBTEwgSEFWRSBBTlkgTElBQklMSVRZIEZPUgorQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisoSU5DTFVESU5HIFdJVEhPVVQgTElNSVRBVElPTiBMT1NUIFBST0ZJVFMpLCBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcKK05FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT1IgRElTVFJJQlVUSU9OIE9GCitUSEUgUFJPR1JBTSBPUiBUSEUgRVhFUkNJU0UgT0YgQU5ZIFJJR0hUUyBHUkFOVEVEIEhFUkVVTkRFUiwgRVZFTiBJRiBBRFZJU0VEIE9GCitUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLjwvc3Bhbj4gPC9wPgorCis8cD48Yj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+Ny4gR0VORVJBTDwvc3Bhbj48L2I+IDwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPklmIGFueSBwcm92aXNpb24gb2YgdGhpcyBBZ3JlZW1lbnQgaXMgaW52YWxpZAorb3IgdW5lbmZvcmNlYWJsZSB1bmRlciBhcHBsaWNhYmxlIGxhdywgaXQgc2hhbGwgbm90IGFmZmVjdCB0aGUgdmFsaWRpdHkgb3IKK2VuZm9yY2VhYmlsaXR5IG9mIHRoZSByZW1haW5kZXIgb2YgdGhlIHRlcm1zIG9mIHRoaXMgQWdyZWVtZW50LCBhbmQgd2l0aG91dAorZnVydGhlciBhY3Rpb24gYnkgdGhlIHBhcnRpZXMgaGVyZXRvLCBzdWNoIHByb3Zpc2lvbiBzaGFsbCBiZSByZWZvcm1lZCB0byB0aGUKK21pbmltdW0gZXh0ZW50IG5lY2Vzc2FyeSB0byBtYWtlIHN1Y2ggcHJvdmlzaW9uIHZhbGlkIGFuZCBlbmZvcmNlYWJsZS48L3NwYW4+IDwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPklmIFJlY2lwaWVudCBpbnN0aXR1dGVzIHBhdGVudCBsaXRpZ2F0aW9uCithZ2FpbnN0IGFueSBlbnRpdHkgKGluY2x1ZGluZyBhIGNyb3NzLWNsYWltIG9yIGNvdW50ZXJjbGFpbSBpbiBhIGxhd3N1aXQpCithbGxlZ2luZyB0aGF0IHRoZSBQcm9ncmFtIGl0c2VsZiAoZXhjbHVkaW5nIGNvbWJpbmF0aW9ucyBvZiB0aGUgUHJvZ3JhbSB3aXRoCitvdGhlciBzb2Z0d2FyZSBvciBoYXJkd2FyZSkgaW5mcmluZ2VzIHN1Y2ggUmVjaXBpZW50J3MgcGF0ZW50KHMpLCB0aGVuIHN1Y2gKK1JlY2lwaWVudCdzIHJpZ2h0cyBncmFudGVkIHVuZGVyIFNlY3Rpb24gMihiKSBzaGFsbCB0ZXJtaW5hdGUgYXMgb2YgdGhlIGRhdGUKK3N1Y2ggbGl0aWdhdGlvbiBpcyBmaWxlZC4gPC9zcGFuPjwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkFsbCBSZWNpcGllbnQncyByaWdodHMgdW5kZXIgdGhpcyBBZ3JlZW1lbnQKK3NoYWxsIHRlcm1pbmF0ZSBpZiBpdCBmYWlscyB0byBjb21wbHkgd2l0aCBhbnkgb2YgdGhlIG1hdGVyaWFsIHRlcm1zIG9yCitjb25kaXRpb25zIG9mIHRoaXMgQWdyZWVtZW50IGFuZCBkb2VzIG5vdCBjdXJlIHN1Y2ggZmFpbHVyZSBpbiBhIHJlYXNvbmFibGUKK3BlcmlvZCBvZiB0aW1lIGFmdGVyIGJlY29taW5nIGF3YXJlIG9mIHN1Y2ggbm9uY29tcGxpYW5jZS4gSWYgYWxsIFJlY2lwaWVudCdzCityaWdodHMgdW5kZXIgdGhpcyBBZ3JlZW1lbnQgdGVybWluYXRlLCBSZWNpcGllbnQgYWdyZWVzIHRvIGNlYXNlIHVzZSBhbmQKK2Rpc3RyaWJ1dGlvbiBvZiB0aGUgUHJvZ3JhbSBhcyBzb29uIGFzIHJlYXNvbmFibHkgcHJhY3RpY2FibGUuIEhvd2V2ZXIsCitSZWNpcGllbnQncyBvYmxpZ2F0aW9ucyB1bmRlciB0aGlzIEFncmVlbWVudCBhbmQgYW55IGxpY2Vuc2VzIGdyYW50ZWQgYnkKK1JlY2lwaWVudCByZWxhdGluZyB0byB0aGUgUHJvZ3JhbSBzaGFsbCBjb250aW51ZSBhbmQgc3Vydml2ZS4gPC9zcGFuPjwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkV2ZXJ5b25lIGlzIHBlcm1pdHRlZCB0byBjb3B5IGFuZCBkaXN0cmlidXRlCitjb3BpZXMgb2YgdGhpcyBBZ3JlZW1lbnQsIGJ1dCBpbiBvcmRlciB0byBhdm9pZCBpbmNvbnNpc3RlbmN5IHRoZSBBZ3JlZW1lbnQgaXMKK2NvcHlyaWdodGVkIGFuZCBtYXkgb25seSBiZSBtb2RpZmllZCBpbiB0aGUgZm9sbG93aW5nIG1hbm5lci4gVGhlIEFncmVlbWVudAorU3Rld2FyZCByZXNlcnZlcyB0aGUgcmlnaHQgdG8gcHVibGlzaCBuZXcgdmVyc2lvbnMgKGluY2x1ZGluZyByZXZpc2lvbnMpIG9mCit0aGlzIEFncmVlbWVudCBmcm9tIHRpbWUgdG8gdGltZS4gTm8gb25lIG90aGVyIHRoYW4gdGhlIEFncmVlbWVudCBTdGV3YXJkIGhhcwordGhlIHJpZ2h0IHRvIG1vZGlmeSB0aGlzIEFncmVlbWVudC4gVGhlIEVjbGlwc2UgRm91bmRhdGlvbiBpcyB0aGUgaW5pdGlhbAorQWdyZWVtZW50IFN0ZXdhcmQuIFRoZSBFY2xpcHNlIEZvdW5kYXRpb24gbWF5IGFzc2lnbiB0aGUgcmVzcG9uc2liaWxpdHkgdG8KK3NlcnZlIGFzIHRoZSBBZ3JlZW1lbnQgU3Rld2FyZCB0byBhIHN1aXRhYmxlIHNlcGFyYXRlIGVudGl0eS4gRWFjaCBuZXcgdmVyc2lvbgorb2YgdGhlIEFncmVlbWVudCB3aWxsIGJlIGdpdmVuIGEgZGlzdGluZ3Vpc2hpbmcgdmVyc2lvbiBudW1iZXIuIFRoZSBQcm9ncmFtCisoaW5jbHVkaW5nIENvbnRyaWJ1dGlvbnMpIG1heSBhbHdheXMgYmUgZGlzdHJpYnV0ZWQgc3ViamVjdCB0byB0aGUgdmVyc2lvbiBvZgordGhlIEFncmVlbWVudCB1bmRlciB3aGljaCBpdCB3YXMgcmVjZWl2ZWQuIEluIGFkZGl0aW9uLCBhZnRlciBhIG5ldyB2ZXJzaW9uIG9mCit0aGUgQWdyZWVtZW50IGlzIHB1Ymxpc2hlZCwgQ29udHJpYnV0b3IgbWF5IGVsZWN0IHRvIGRpc3RyaWJ1dGUgdGhlIFByb2dyYW0KKyhpbmNsdWRpbmcgaXRzIENvbnRyaWJ1dGlvbnMpIHVuZGVyIHRoZSBuZXcgdmVyc2lvbi4gRXhjZXB0IGFzIGV4cHJlc3NseSBzdGF0ZWQKK2luIFNlY3Rpb25zIDIoYSkgYW5kIDIoYikgYWJvdmUsIFJlY2lwaWVudCByZWNlaXZlcyBubyByaWdodHMgb3IgbGljZW5zZXMgdG8KK3RoZSBpbnRlbGxlY3R1YWwgcHJvcGVydHkgb2YgYW55IENvbnRyaWJ1dG9yIHVuZGVyIHRoaXMgQWdyZWVtZW50LCB3aGV0aGVyCitleHByZXNzbHksIGJ5IGltcGxpY2F0aW9uLCBlc3RvcHBlbCBvciBvdGhlcndpc2UuIEFsbCByaWdodHMgaW4gdGhlIFByb2dyYW0gbm90CitleHByZXNzbHkgZ3JhbnRlZCB1bmRlciB0aGlzIEFncmVlbWVudCBhcmUgcmVzZXJ2ZWQuPC9zcGFuPiA8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5UaGlzIEFncmVlbWVudCBpcyBnb3Zlcm5lZCBieSB0aGUgbGF3cyBvZiB0aGUKK1N0YXRlIG9mIE5ldyBZb3JrIGFuZCB0aGUgaW50ZWxsZWN0dWFsIHByb3BlcnR5IGxhd3Mgb2YgdGhlIFVuaXRlZCBTdGF0ZXMgb2YKK0FtZXJpY2EuIE5vIHBhcnR5IHRvIHRoaXMgQWdyZWVtZW50IHdpbGwgYnJpbmcgYSBsZWdhbCBhY3Rpb24gdW5kZXIgdGhpcworQWdyZWVtZW50IG1vcmUgdGhhbiBvbmUgeWVhciBhZnRlciB0aGUgY2F1c2Ugb2YgYWN0aW9uIGFyb3NlLiBFYWNoIHBhcnR5IHdhaXZlcworaXRzIHJpZ2h0cyB0byBhIGp1cnkgdHJpYWwgaW4gYW55IHJlc3VsdGluZyBsaXRpZ2F0aW9uLjwvc3Bhbj4gPC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWw+PCFbaWYgIXN1cHBvcnRFbXB0eVBhcmFzXT4mbmJzcDs8IVtlbmRpZl0+PG86cD48L286cD48L3A+CisKKzwvZGl2PgorCis8L2JvZHk+CisKKzwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS5zdGVtLm1vZGVscy5wb3B1bGF0aW9uLmZlYXR1cmUvZmVhdHVyZS5wcm9wZXJ0aWVzIGIvZmVhdHVyZXMvb3JnLmVjbGlwc2Uuc3RlbS5tb2RlbHMucG9wdWxhdGlvbi5mZWF0dXJlL2ZlYXR1cmUucHJvcGVydGllcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NDY4YjIwCi0tLSAvZGV2L251bGwKKysrIGIvZmVhdHVyZXMvb3JnLmVjbGlwc2Uuc3RlbS5tb2RlbHMucG9wdWxhdGlvbi5mZWF0dXJlL2ZlYXR1cmUucHJvcGVydGllcwpAQCAtMCwwICsxLDE3NSBAQAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBDb3B5cmlnaHQgKGMpIDIwMTEgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisjIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisjIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisjIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisjIAorIyBDb250cmlidXRvcnM6CisjICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgZmVhdHVyZS5wcm9wZXJ0aWVzCisjIGNvbnRhaW5zIGV4dGVybmFsaXplZCBzdHJpbmdzIGZvciBmZWF0dXJlLnhtbAorIyAiJWZvbyIgaW4gZmVhdHVyZS54bWwgY29ycmVzcG9uZHMgdG8gdGhlIGtleSAiZm9vIiBpbiB0aGlzIGZpbGUKKyMgamF2YS5pby5Qcm9wZXJ0aWVzIGZpbGUgKElTTyA4ODU5LTEgd2l0aCAiXCIgZXNjYXBlcykKKyMgVGhpcyBmaWxlIHNob3VsZCBiZSB0cmFuc2xhdGVkLgorCisjICJmZWF0dXJlTmFtZSIgcHJvcGVydHkgLSBuYW1lIG9mIHRoZSBmZWF0dXJlCitmZWF0dXJlTmFtZT1TVEVNIFBvcHVsYXRpb24gTW9kZWwgRnJhbWV3b3JrCisKKyMgInByb3ZpZGVyTmFtZSIgcHJvcGVydHkgLSBuYW1lIG9mIHRoZSBjb21wYW55IHRoYXQgcHJvdmlkZXMgdGhlIGZlYXR1cmUKK3Byb3ZpZGVyTmFtZT1FY2xpcHNlLm9yZworCisjICJ1cGRhdGVTaXRlTmFtZSIgcHJvcGVydHkgLSBsYWJlbCBmb3IgdGhlIHVwZGF0ZSBzaXRlCit1cGRhdGVTaXRlTmFtZT1TVEVNIFVwZGF0ZXMKKworIyAic2Vjb25kYXJ5U2l0ZU5hbWUiIHByb3BlcnR5IC0gbGFiZWwgZm9yIHRoZSBzZWNvbmRhcnkgdXBkYXRlIHNpdGUKKyNzZWNvbmRhcnlVcGRhdGVTaXRlTmFtZT1TVEVNIFVwZGF0ZXMKKworIyAiZGVzY3JpcHRpb24iIHByb3BlcnR5IC0gZGVzY3JpcHRpb24gb2YgdGhlIGZlYXR1cmUKK2Rlc2NyaXB0aW9uPUZyYW1ld29yayBmb3IgY3JlYXRpbmcgcG9wdWxhdGlvbiBtb2RlbHMgaW5jbHVkaW5nXAorZXhhbXBsZSBtb2RlbHMKKworCisjICJjb3B5cmlnaHQiIHByb3BlcnR5IC0gdGV4dCBvZiB0aGUgIkZlYXR1cmUgVXBkYXRlIENvcHlyaWdodCIKK2NvcHlyaWdodD1cCitDb3B5cmlnaHQgKGMpIDIwMDctMjAxMSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy5cblwKK0FsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHNcblwKK2FyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMFxuXAord2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXRcblwKK2h0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sXG5cCitcblwKK0NvbnRyaWJ1dG9yczpcblwKKyAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb25cbgorIyMjIyMjIyMjIyMjIyMjIyBlbmQgb2YgY29weXJpZ2h0IHByb3BlcnR5ICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisjICJsaWNlbnNlVVJMIiBwcm9wZXJ0eSAtIFVSTCBvZiB0aGUgIkZlYXR1cmUgTGljZW5zZSIKKyMgZG8gbm90IHRyYW5zbGF0ZSB2YWx1ZSAtIGp1c3QgY2hhbmdlIHRvIHBvaW50IHRvIGEgbG9jYWxlLXNwZWNpZmljIEhUTUwgcGFnZQorbGljZW5zZVVSTD1saWNlbnNlLmh0bWwKKworIyAibGljZW5zZSIgcHJvcGVydHkgLSB0ZXh0IG9mIHRoZSAiRmVhdHVyZSBVcGRhdGUgTGljZW5zZSIKKyMgc2hvdWxkIGJlIHBsYWluIHRleHQgdmVyc2lvbiBvZiBsaWNlbnNlIGFncmVlbWVudCBwb2ludGVkIHRvIGJlICJsaWNlbnNlVVJMIgorbGljZW5zZT1cCitFY2xpcHNlIEZvdW5kYXRpb24gU29mdHdhcmUgVXNlciBBZ3JlZW1lbnRcblwKK0FwcmlsIDE0LCAyMDEwXG5cCitcblwKK1VzYWdlIE9mIENvbnRlbnRcblwKK1xuXAorVEhFIEVDTElQU0UgRk9VTkRBVElPTiBNQUtFUyBBVkFJTEFCTEUgU09GVFdBUkUsIERPQ1VNRU5UQVRJT04sIElORk9STUFUSU9OIEFORC9PUlxuXAorT1RIRVIgTUFURVJJQUxTIEZPUiBPUEVOIFNPVVJDRSBQUk9KRUNUUyAoQ09MTEVDVElWRUxZICJDT05URU5UIikuXG5cCitVU0UgT0YgVEhFIENPTlRFTlQgSVMgR09WRVJORUQgQlkgVEhFIFRFUk1TIEFORCBDT05ESVRJT05TIE9GIFRISVNcblwKK0FHUkVFTUVOVCBBTkQvT1IgVEhFIFRFUk1TIEFORCBDT05ESVRJT05TIE9GIExJQ0VOU0UgQUdSRUVNRU5UUyBPUlxuXAorTk9USUNFUyBJTkRJQ0FURUQgT1IgUkVGRVJFTkNFRCBCRUxPVy4gIEJZIFVTSU5HIFRIRSBDT05URU5ULCBZT1VcblwKK0FHUkVFIFRIQVQgWU9VUiBVU0UgT0YgVEhFIENPTlRFTlQgSVMgR09WRVJORUQgQlkgVEhJUyBBR1JFRU1FTlRcblwKK0FORC9PUiBUSEUgVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgQU5ZIEFQUExJQ0FCTEUgTElDRU5TRSBBR1JFRU1FTlRTXG5cCitPUiBOT1RJQ0VTIElORElDQVRFRCBPUiBSRUZFUkVOQ0VEIEJFTE9XLiAgSUYgWU9VIERPIE5PVCBBR1JFRSBUTyBUSEVcblwKK1RFUk1TIEFORCBDT05ESVRJT05TIE9GIFRISVMgQUdSRUVNRU5UIEFORCBUSEUgVEVSTVMgQU5EIENPTkRJVElPTlNcblwKK09GIEFOWSBBUFBMSUNBQkxFIExJQ0VOU0UgQUdSRUVNRU5UUyBPUiBOT1RJQ0VTIElORElDQVRFRCBPUiBSRUZFUkVOQ0VEXG5cCitCRUxPVywgVEhFTiBZT1UgTUFZIE5PVCBVU0UgVEhFIENPTlRFTlQuXG5cCitcblwKK0FwcGxpY2FibGUgTGljZW5zZXNcblwKK1xuXAorVW5sZXNzIG90aGVyd2lzZSBpbmRpY2F0ZWQsIGFsbCBDb250ZW50IG1hZGUgYXZhaWxhYmxlIGJ5IHRoZVxuXAorRWNsaXBzZSBGb3VuZGF0aW9uIGlzIHByb3ZpZGVkIHRvIHlvdSB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2ZcblwKK3RoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4wICgiRVBMIikuIEEgY29weSBvZiB0aGUgRVBMIGlzXG5cCitwcm92aWRlZCB3aXRoIHRoaXMgQ29udGVudCBhbmQgaXMgYWxzbyBhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwuXG5cCitGb3IgcHVycG9zZXMgb2YgdGhlIEVQTCwgIlByb2dyYW0iIHdpbGwgbWVhbiB0aGUgQ29udGVudC5cblwKK1xuXAorQ29udGVudCBpbmNsdWRlcywgYnV0IGlzIG5vdCBsaW1pdGVkIHRvLCBzb3VyY2UgY29kZSwgb2JqZWN0IGNvZGUsXG5cCitkb2N1bWVudGF0aW9uIGFuZCBvdGhlciBmaWxlcyBtYWludGFpbmVkIGluIHRoZSBFY2xpcHNlIEZvdW5kYXRpb24gc291cmNlIGNvZGVcblwKK3JlcG9zaXRvcnkgKCJSZXBvc2l0b3J5IikgaW4gc29mdHdhcmUgbW9kdWxlcyAoIk1vZHVsZXMiKSBhbmQgbWFkZSBhdmFpbGFibGVcblwKK2FzIGRvd25sb2FkYWJsZSBhcmNoaXZlcyAoIkRvd25sb2FkcyIpLlxuXAorXG5cCisgICAgICAgLSBDb250ZW50IG1heSBiZSBzdHJ1Y3R1cmVkIGFuZCBwYWNrYWdlZCBpbnRvIG1vZHVsZXMgdG8gZmFjaWxpdGF0ZSBkZWxpdmVyaW5nLFxuXAorICAgICAgICAgZXh0ZW5kaW5nLCBhbmQgdXBncmFkaW5nIHRoZSBDb250ZW50LiBUeXBpY2FsIG1vZHVsZXMgbWF5IGluY2x1ZGUgcGx1Zy1pbnMgKCJQbHVnLWlucyIpLFxuXAorICAgICAgICAgcGx1Zy1pbiBmcmFnbWVudHMgKCJGcmFnbWVudHMiKSwgYW5kIGZlYXR1cmVzICgiRmVhdHVyZXMiKS5cblwKKyAgICAgICAtIEVhY2ggUGx1Zy1pbiBvciBGcmFnbWVudCBtYXkgYmUgcGFja2FnZWQgYXMgYSBzdWItZGlyZWN0b3J5IG9yIEpBUiAoSmF2YShUTSkgQVJjaGl2ZSlcblwKKyAgICAgICAgIGluIGEgZGlyZWN0b3J5IG5hbWVkICJwbHVnaW5zIi5cblwKKyAgICAgICAtIEEgRmVhdHVyZSBpcyBhIGJ1bmRsZSBvZiBvbmUgb3IgbW9yZSBQbHVnLWlucyBhbmQvb3IgRnJhZ21lbnRzIGFuZCBhc3NvY2lhdGVkIG1hdGVyaWFsLlxuXAorICAgICAgICAgRWFjaCBGZWF0dXJlIG1heSBiZSBwYWNrYWdlZCBhcyBhIHN1Yi1kaXJlY3RvcnkgaW4gYSBkaXJlY3RvcnkgbmFtZWQgImZlYXR1cmVzIi5cblwKKyAgICAgICAgIFdpdGhpbiBhIEZlYXR1cmUsIGZpbGVzIG5hbWVkICJmZWF0dXJlLnhtbCIgbWF5IGNvbnRhaW4gYSBsaXN0IG9mIHRoZSBuYW1lcyBhbmQgdmVyc2lvblxuXAorICAgICAgICAgbnVtYmVycyBvZiB0aGUgUGx1Zy1pbnMgYW5kL29yIEZyYWdtZW50cyBhc3NvY2lhdGVkIHdpdGggdGhhdCBGZWF0dXJlLlxuXAorICAgICAgIC0gRmVhdHVyZXMgbWF5IGFsc28gaW5jbHVkZSBvdGhlciBGZWF0dXJlcyAoIkluY2x1ZGVkIEZlYXR1cmVzIikuIFdpdGhpbiBhIEZlYXR1cmUsIGZpbGVzXG5cCisgICAgICAgICBuYW1lZCAiZmVhdHVyZS54bWwiIG1heSBjb250YWluIGEgbGlzdCBvZiB0aGUgbmFtZXMgYW5kIHZlcnNpb24gbnVtYmVycyBvZiBJbmNsdWRlZCBGZWF0dXJlcy5cblwKK1xuXAorVGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIGdvdmVybmluZyBQbHVnLWlucyBhbmQgRnJhZ21lbnRzIHNob3VsZCBiZVxuXAorY29udGFpbmVkIGluIGZpbGVzIG5hbWVkICJhYm91dC5odG1sIiAoIkFib3V0cyIpLiBUaGUgdGVybXMgYW5kXG5cCitjb25kaXRpb25zIGdvdmVybmluZyBGZWF0dXJlcyBhbmQgSW5jbHVkZWQgRmVhdHVyZXMgc2hvdWxkIGJlIGNvbnRhaW5lZFxuXAoraW4gZmlsZXMgbmFtZWQgImxpY2Vuc2UuaHRtbCIgKCJGZWF0dXJlIExpY2Vuc2VzIikuIEFib3V0cyBhbmQgRmVhdHVyZVxuXAorTGljZW5zZXMgbWF5IGJlIGxvY2F0ZWQgaW4gYW55IGRpcmVjdG9yeSBvZiBhIERvd25sb2FkIG9yIE1vZHVsZVxuXAoraW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG8gdGhlIGZvbGxvd2luZyBsb2NhdGlvbnM6XG5cCitcblwKKyAgICAgICAtIFRoZSB0b3AtbGV2ZWwgKHJvb3QpIGRpcmVjdG9yeVxuXAorICAgICAgIC0gUGx1Zy1pbiBhbmQgRnJhZ21lbnQgZGlyZWN0b3JpZXNcblwKKyAgICAgICAtIEluc2lkZSBQbHVnLWlucyBhbmQgRnJhZ21lbnRzIHBhY2thZ2VkIGFzIEpBUnNcblwKKyAgICAgICAtIFN1Yi1kaXJlY3RvcmllcyBvZiB0aGUgZGlyZWN0b3J5IG5hbWVkICJzcmMiIG9mIGNlcnRhaW4gUGx1Zy1pbnNcblwKKyAgICAgICAtIEZlYXR1cmUgZGlyZWN0b3JpZXNcblwKK1xuXAorTm90ZTogaWYgYSBGZWF0dXJlIG1hZGUgYXZhaWxhYmxlIGJ5IHRoZSBFY2xpcHNlIEZvdW5kYXRpb24gaXMgaW5zdGFsbGVkIHVzaW5nIHRoZVxuXAorUHJvdmlzaW9uaW5nIFRlY2hub2xvZ3kgKGFzIGRlZmluZWQgYmVsb3cpLCB5b3UgbXVzdCBhZ3JlZSB0byBhIGxpY2Vuc2UgKCJGZWF0dXJlIFxuXAorVXBkYXRlIExpY2Vuc2UiKSBkdXJpbmcgdGhlIGluc3RhbGxhdGlvbiBwcm9jZXNzLiBJZiB0aGUgRmVhdHVyZSBjb250YWluc1xuXAorSW5jbHVkZWQgRmVhdHVyZXMsIHRoZSBGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlIHNob3VsZCBlaXRoZXIgcHJvdmlkZSB5b3VcblwKK3dpdGggdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIGdvdmVybmluZyB0aGUgSW5jbHVkZWQgRmVhdHVyZXMgb3IgaW5mb3JtXG5cCit5b3Ugd2hlcmUgeW91IGNhbiBsb2NhdGUgdGhlbS4gRmVhdHVyZSBVcGRhdGUgTGljZW5zZXMgbWF5IGJlIGZvdW5kIGluXG5cCit0aGUgImxpY2Vuc2UiIHByb3BlcnR5IG9mIGZpbGVzIG5hbWVkICJmZWF0dXJlLnByb3BlcnRpZXMiIGZvdW5kIHdpdGhpbiBhIEZlYXR1cmUuXG5cCitTdWNoIEFib3V0cywgRmVhdHVyZSBMaWNlbnNlcywgYW5kIEZlYXR1cmUgVXBkYXRlIExpY2Vuc2VzIGNvbnRhaW4gdGhlXG5cCit0ZXJtcyBhbmQgY29uZGl0aW9ucyAob3IgcmVmZXJlbmNlcyB0byBzdWNoIHRlcm1zIGFuZCBjb25kaXRpb25zKSB0aGF0XG5cCitnb3Zlcm4geW91ciB1c2Ugb2YgdGhlIGFzc29jaWF0ZWQgQ29udGVudCBpbiB0aGF0IGRpcmVjdG9yeS5cblwKK1xuXAorVEhFIEFCT1VUUywgRkVBVFVSRSBMSUNFTlNFUywgQU5EIEZFQVRVUkUgVVBEQVRFIExJQ0VOU0VTIE1BWSBSRUZFUlxuXAorVE8gVEhFIEVQTCBPUiBPVEhFUiBMSUNFTlNFIEFHUkVFTUVOVFMsIE5PVElDRVMgT1IgVEVSTVMgQU5EIENPTkRJVElPTlMuXG5cCitTT01FIE9GIFRIRVNFIE9USEVSIExJQ0VOU0UgQUdSRUVNRU5UUyBNQVkgSU5DTFVERSAoQlVUIEFSRSBOT1QgTElNSVRFRCBUTyk6XG5cCitcblwKKyAgICAgICAtIENvbW1vbiBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMCAoYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvY3BsLXYxMC5odG1sKVxuXAorICAgICAgIC0gQXBhY2hlIFNvZnR3YXJlIExpY2Vuc2UgMS4xIChhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UpXG5cCisgICAgICAgLSBBcGFjaGUgU29mdHdhcmUgTGljZW5zZSAyLjAgKGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjApXG5cCisgICAgICAgLSBNZXRybyBMaW5rIFB1YmxpYyBMaWNlbnNlIDEuMDAgKGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3Lm9wZW5ncm91cC5vcmcvb3Blbm1vdGlmL3N1cHBvcnRlcnMvbWV0cm9saW5rL2xpY2Vuc2UuaHRtbClcblwKKyAgICAgICAtIE1vemlsbGEgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjEgKGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3Lm1vemlsbGEub3JnL01QTC9NUEwtMS4xLmh0bWwpXG5cCitcblwKK0lUIElTIFlPVVIgT0JMSUdBVElPTiBUTyBSRUFEIEFORCBBQ0NFUFQgQUxMIFNVQ0ggVEVSTVMgQU5EIENPTkRJVElPTlMgUFJJT1JcblwKK1RPIFVTRSBPRiBUSEUgQ09OVEVOVC4gSWYgbm8gQWJvdXQsIEZlYXR1cmUgTGljZW5zZSwgb3IgRmVhdHVyZSBVcGRhdGUgTGljZW5zZVxuXAoraXMgcHJvdmlkZWQsIHBsZWFzZSBjb250YWN0IHRoZSBFY2xpcHNlIEZvdW5kYXRpb24gdG8gZGV0ZXJtaW5lIHdoYXQgdGVybXMgYW5kIGNvbmRpdGlvbnNcblwKK2dvdmVybiB0aGF0IHBhcnRpY3VsYXIgQ29udGVudC5cblwKK1xuXAorXG5cVXNlIG9mIFByb3Zpc2lvbmluZyBUZWNobm9sb2d5XG5cCitcblwKK1RoZSBFY2xpcHNlIEZvdW5kYXRpb24gbWFrZXMgYXZhaWxhYmxlIHByb3Zpc2lvbmluZyBzb2Z0d2FyZSwgZXhhbXBsZXMgb2Ygd2hpY2ggaW5jbHVkZSxcblwKK2J1dCBhcmUgbm90IGxpbWl0ZWQgdG8sIHAyIGFuZCB0aGUgRWNsaXBzZSBVcGRhdGUgTWFuYWdlciAoIlByb3Zpc2lvbmluZyBUZWNobm9sb2d5IikgZm9yXG5cCit0aGUgcHVycG9zZSBvZiBhbGxvd2luZyB1c2VycyB0byBpbnN0YWxsIHNvZnR3YXJlLCBkb2N1bWVudGF0aW9uLCBpbmZvcm1hdGlvbiBhbmQvb3JcblwKK290aGVyIG1hdGVyaWFscyAoY29sbGVjdGl2ZWx5ICJJbnN0YWxsYWJsZSBTb2Z0d2FyZSIpLiBUaGlzIGNhcGFiaWxpdHkgaXMgcHJvdmlkZWQgd2l0aFxuXAordGhlIGludGVudCBvZiBhbGxvd2luZyBzdWNoIHVzZXJzIHRvIGluc3RhbGwsIGV4dGVuZCBhbmQgdXBkYXRlIEVjbGlwc2UtYmFzZWQgcHJvZHVjdHMuXG5cCitJbmZvcm1hdGlvbiBhYm91dCBwYWNrYWdpbmcgSW5zdGFsbGFibGUgU29mdHdhcmUgaXMgYXZhaWxhYmxlIGF0XG5cCitodHRwOi8vZWNsaXBzZS5vcmcvZXF1aW5veC9wMi9yZXBvc2l0b3J5X3BhY2thZ2luZy5odG1sICgiU3BlY2lmaWNhdGlvbiIpLlxuXAorXG5cCitZb3UgbWF5IHVzZSBQcm92aXNpb25pbmcgVGVjaG5vbG9neSB0byBhbGxvdyBvdGhlciBwYXJ0aWVzIHRvIGluc3RhbGwgSW5zdGFsbGFibGUgU29mdHdhcmUuXG5cCitZb3Ugc2hhbGwgYmUgcmVzcG9uc2libGUgZm9yIGVuYWJsaW5nIHRoZSBhcHBsaWNhYmxlIGxpY2Vuc2UgYWdyZWVtZW50cyByZWxhdGluZyB0byB0aGVcblwKK0luc3RhbGxhYmxlIFNvZnR3YXJlIHRvIGJlIHByZXNlbnRlZCB0bywgYW5kIGFjY2VwdGVkIGJ5LCB0aGUgdXNlcnMgb2YgdGhlIFByb3Zpc2lvbmluZyBUZWNobm9sb2d5XG5cCitpbiBhY2NvcmRhbmNlIHdpdGggdGhlIFNwZWNpZmljYXRpb24uIEJ5IHVzaW5nIFByb3Zpc2lvbmluZyBUZWNobm9sb2d5IGluIHN1Y2ggYSBtYW5uZXIgYW5kXG5cCittYWtpbmcgaXQgYXZhaWxhYmxlIGluIGFjY29yZGFuY2Ugd2l0aCB0aGUgU3BlY2lmaWNhdGlvbiwgeW91IGZ1cnRoZXIgYWNrbm93bGVkZ2UgeW91clxuXAorYWdyZWVtZW50IHRvLCBhbmQgdGhlIGFjcXVpc2l0aW9uIG9mIGFsbCBuZWNlc3NhcnkgcmlnaHRzIHRvIHBlcm1pdCB0aGUgZm9sbG93aW5nOlxuXAorXG5cCisgICAgICAgMS4gQSBzZXJpZXMgb2YgYWN0aW9ucyBtYXkgb2NjdXIgKCJQcm92aXNpb25pbmcgUHJvY2VzcyIpIGluIHdoaWNoIGEgdXNlciBtYXkgZXhlY3V0ZVxuXAorICAgICAgICAgIHRoZSBQcm92aXNpb25pbmcgVGVjaG5vbG9neSBvbiBhIG1hY2hpbmUgKCJUYXJnZXQgTWFjaGluZSIpIHdpdGggdGhlIGludGVudCBvZiBpbnN0YWxsaW5nLFxuXAorICAgICAgICAgIGV4dGVuZGluZyBvciB1cGRhdGluZyB0aGUgZnVuY3Rpb25hbGl0eSBvZiBhbiBFY2xpcHNlLWJhc2VkIHByb2R1Y3QuXG5cCisgICAgICAgMi4gRHVyaW5nIHRoZSBQcm92aXNpb25pbmcgUHJvY2VzcywgdGhlIFByb3Zpc2lvbmluZyBUZWNobm9sb2d5IG1heSBjYXVzZSB0aGlyZCBwYXJ0eVxuXAorICAgICAgICAgIEluc3RhbGxhYmxlIFNvZnR3YXJlIG9yIGEgcG9ydGlvbiB0aGVyZW9mIHRvIGJlIGFjY2Vzc2VkIGFuZCBjb3BpZWQgdG8gdGhlIFRhcmdldCBNYWNoaW5lLlxuXAorICAgICAgIDMuIFB1cnN1YW50IHRvIHRoZSBTcGVjaWZpY2F0aW9uLCB5b3Ugd2lsbCBwcm92aWRlIHRvIHRoZSB1c2VyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyB0aGF0XG5cCisgICAgICAgICAgZ292ZXJuIHRoZSB1c2Ugb2YgdGhlIEluc3RhbGxhYmxlIFNvZnR3YXJlICgiSW5zdGFsbGFibGUgU29mdHdhcmUgQWdyZWVtZW50IikgYW5kIHN1Y2hcblwKKyAgICAgICAgICBJbnN0YWxsYWJsZSBTb2Z0d2FyZSBBZ3JlZW1lbnQgc2hhbGwgYmUgYWNjZXNzZWQgZnJvbSB0aGUgVGFyZ2V0IE1hY2hpbmUgaW4gYWNjb3JkYW5jZVxuXAorICAgICAgICAgIHdpdGggdGhlIFNwZWNpZmljYXRpb24uIFN1Y2ggSW5zdGFsbGFibGUgU29mdHdhcmUgQWdyZWVtZW50IG11c3QgaW5mb3JtIHRoZSB1c2VyIG9mIHRoZVxuXAorICAgICAgICAgIHRlcm1zIGFuZCBjb25kaXRpb25zIHRoYXQgZ292ZXJuIHRoZSBJbnN0YWxsYWJsZSBTb2Z0d2FyZSBhbmQgbXVzdCBzb2xpY2l0IGFjY2VwdGFuY2UgYnlcblwKKyAgICAgICAgICB0aGUgZW5kIHVzZXIgaW4gdGhlIG1hbm5lciBwcmVzY3JpYmVkIGluIHN1Y2ggSW5zdGFsbGFibGUgU29mdHdhcmUgQWdyZWVtZW50LiBVcG9uIHN1Y2hcblwKKyAgICAgICAgICBpbmRpY2F0aW9uIG9mIGFncmVlbWVudCBieSB0aGUgdXNlciwgdGhlIHByb3Zpc2lvbmluZyBUZWNobm9sb2d5IHdpbGwgY29tcGxldGUgaW5zdGFsbGF0aW9uXG5cCisgICAgICAgICAgb2YgdGhlIEluc3RhbGxhYmxlIFNvZnR3YXJlLlxuXAorXG5cCitDcnlwdG9ncmFwaHlcblwKK1xuXAorQ29udGVudCBtYXkgY29udGFpbiBlbmNyeXB0aW9uIHNvZnR3YXJlLiBUaGUgY291bnRyeSBpbiB3aGljaCB5b3UgYXJlXG5cCitjdXJyZW50bHkgbWF5IGhhdmUgcmVzdHJpY3Rpb25zIG9uIHRoZSBpbXBvcnQsIHBvc3Nlc3Npb24sIGFuZCB1c2UsXG5cCithbmQvb3IgcmUtZXhwb3J0IHRvIGFub3RoZXIgY291bnRyeSwgb2YgZW5jcnlwdGlvbiBzb2Z0d2FyZS4gQkVGT1JFXG5cCit1c2luZyBhbnkgZW5jcnlwdGlvbiBzb2Z0d2FyZSwgcGxlYXNlIGNoZWNrIHRoZSBjb3VudHJ5J3MgbGF3cyxcblwKK3JlZ3VsYXRpb25zIGFuZCBwb2xpY2llcyBjb25jZXJuaW5nIHRoZSBpbXBvcnQsIHBvc3Nlc3Npb24sIG9yIHVzZSwgYW5kXG5cCityZS1leHBvcnQgb2YgZW5jcnlwdGlvbiBzb2Z0d2FyZSwgdG8gc2VlIGlmIHRoaXMgaXMgcGVybWl0dGVkLlxuXAorXG5cCitKYXZhIGFuZCBhbGwgSmF2YS1iYXNlZCB0cmFkZW1hcmtzIGFyZSB0cmFkZW1hcmtzIG9mIE9yYWNsZSBDb3Jwb3JhdGlvbiBpbiB0aGUgVW5pdGVkIFN0YXRlcywgb3RoZXIgY291bnRyaWVzLCBvciBib3RoLlxuCisjIyMjIyMjIyMjIyBlbmQgb2YgbGljZW5zZSBwcm9wZXJ0eSAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS5zdGVtLm1vZGVscy5wb3B1bGF0aW9uLmZlYXR1cmUvZmVhdHVyZS54bWwgYi9mZWF0dXJlcy9vcmcuZWNsaXBzZS5zdGVtLm1vZGVscy5wb3B1bGF0aW9uLmZlYXR1cmUvZmVhdHVyZS54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODVhYWM2MQotLS0gL2Rldi9udWxsCisrKyBiL2ZlYXR1cmVzL29yZy5lY2xpcHNlLnN0ZW0ubW9kZWxzLnBvcHVsYXRpb24uZmVhdHVyZS9mZWF0dXJlLnhtbApAQCAtMCwwICsxLDUzIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPGZlYXR1cmUKKyAgICAgIGlkPSJvcmcuZWNsaXBzZS5zdGVtLm1vZGVscy5wb3B1bGF0aW9uLmZlYXR1cmUiCisgICAgICBsYWJlbD0iJWZlYXR1cmVOYW1lIgorICAgICAgdmVyc2lvbj0iMS4yLjEiCisgICAgICBwcm92aWRlci1uYW1lPSIlcHJvdmlkZXJOYW1lIj4KKworICAgPGRlc2NyaXB0aW9uPgorICAgICAgJWRlc2NyaXB0aW9uCisgICA8L2Rlc2NyaXB0aW9uPgorCisgICA8Y29weXJpZ2h0PgorICAgICAgJWNvcHlyaWdodAorICAgPC9jb3B5cmlnaHQ+CisKKyAgIDxsaWNlbnNlIHVybD0iJWxpY2Vuc2VVUkwiPgorICAgICAgJWxpY2Vuc2UKKyAgIDwvbGljZW5zZT4KKworICAgPHVybD4KKyAgICAgIDx1cGRhdGUgbGFiZWw9IiV1cGRhdGVTaXRlTmFtZSIgdXJsPSJodHRwOi8vZG93bmxvYWQuZWNsaXBzZS5vcmcvc3RlbS91cGRhdGUtc2l0ZS8iLz4KKyAgIDwvdXJsPgorCisgICA8cmVxdWlyZXM+CisgICAgICA8aW1wb3J0IHBsdWdpbj0ib3JnLmVjbGlwc2UuY29yZS5ydW50aW1lIi8+CisgICAgICA8aW1wb3J0IHBsdWdpbj0ib3JnLmVjbGlwc2UuZW1mLmVjb3JlIi8+CisgICAgICA8aW1wb3J0IHBsdWdpbj0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlIi8+CisgICAgICA8aW1wb3J0IHBsdWdpbj0ib3JnLmVjbGlwc2UuZW1mLmVjb3JlLmVkaXQiLz4KKyAgICAgIDxpbXBvcnQgcGx1Z2luPSJvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zIi8+CisgICAgICA8aW1wb3J0IHBsdWdpbj0ib3JnLmVjbGlwc2Uuc3RlbS50cmFuc3BvcnQiLz4KKyAgICAgIDxpbXBvcnQgcGx1Z2luPSJvcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5Ii8+CisgICAgICA8aW1wb3J0IHBsdWdpbj0ib3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMiLz4KKyAgICAgIDxpbXBvcnQgcGx1Z2luPSJvcmcuZWNsaXBzZS5lbWYuZWNvcmUueG1pIi8+CisgICAgICA8aW1wb3J0IHBsdWdpbj0ib3JnLmVjbGlwc2UuZW1mLmVkaXQudWkiLz4KKyAgICAgIDxpbXBvcnQgcGx1Z2luPSJvcmcuZWNsaXBzZS51aS5pZGUiLz4KKyAgICAgIDxpbXBvcnQgcGx1Z2luPSJvcmcuZWNsaXBzZS5zdGVtLnVpIi8+CisgICA8L3JlcXVpcmVzPgorCisgICA8cGx1Z2luCisgICAgICAgICBpZD0ib3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzIgorICAgICAgICAgZG93bmxvYWQtc2l6ZT0iMCIKKyAgICAgICAgIGluc3RhbGwtc2l6ZT0iMCIKKyAgICAgICAgIHZlcnNpb249IjAuMC4wIgorICAgICAgICAgdW5wYWNrPSJmYWxzZSIvPgorCisgICA8cGx1Z2luCisgICAgICAgICBpZD0ib3JnLmVjbGlwc2Uuc3RlbS51aS5wb3B1bGF0aW9ubW9kZWxzIgorICAgICAgICAgZG93bmxvYWQtc2l6ZT0iMCIKKyAgICAgICAgIGluc3RhbGwtc2l6ZT0iMCIKKyAgICAgICAgIHZlcnNpb249IjAuMC4wIgorICAgICAgICAgdW5wYWNrPSJmYWxzZSIvPgorCis8L2ZlYXR1cmU+CmRpZmYgLS1naXQgYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS5zdGVtLm1vZGVscy5wb3B1bGF0aW9uLmZlYXR1cmUvbGljZW5zZS5odG1sIGIvZmVhdHVyZXMvb3JnLmVjbGlwc2Uuc3RlbS5tb2RlbHMucG9wdWxhdGlvbi5mZWF0dXJlL2xpY2Vuc2UuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMTg0Y2EzCi0tLSAvZGV2L251bGwKKysrIGIvZmVhdHVyZXMvb3JnLmVjbGlwc2Uuc3RlbS5tb2RlbHMucG9wdWxhdGlvbi5mZWF0dXJlL2xpY2Vuc2UuaHRtbApAQCAtMCwwICsxLDEwNyBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iSVNPLTg4NTktMSIgPz4KKzwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgWEhUTUwgMS4wIFN0cmljdC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbDEvRFREL3hodG1sMS1zdHJpY3QuZHRkIj4KKzxodG1sIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIj4KKzxoZWFkPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9SVNPLTg4NTktMSIgLz4KKzx0aXRsZT5FY2xpcHNlIEZvdW5kYXRpb24gU29mdHdhcmUgVXNlciBBZ3JlZW1lbnQ8L3RpdGxlPgorPC9oZWFkPgorCis8Ym9keSBsYW5nPSJFTi1VUyI+Cis8aDI+RWNsaXBzZSBGb3VuZGF0aW9uIFNvZnR3YXJlIFVzZXIgQWdyZWVtZW50PC9oMj4KKzxwPkFwcmlsIDE0LCAyMDEwPC9wPgorCis8aDM+VXNhZ2UgT2YgQ29udGVudDwvaDM+CisKKzxwPlRIRSBFQ0xJUFNFIEZPVU5EQVRJT04gTUFLRVMgQVZBSUxBQkxFIFNPRlRXQVJFLCBET0NVTUVOVEFUSU9OLCBJTkZPUk1BVElPTiBBTkQvT1IgT1RIRVIgTUFURVJJQUxTIEZPUiBPUEVOIFNPVVJDRSBQUk9KRUNUUworICAgKENPTExFQ1RJVkVMWSAmcXVvdDtDT05URU5UJnF1b3Q7KS4gIFVTRSBPRiBUSEUgQ09OVEVOVCBJUyBHT1ZFUk5FRCBCWSBUSEUgVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgVEhJUyBBR1JFRU1FTlQgQU5EL09SIFRIRSBURVJNUyBBTkQKKyAgIENPTkRJVElPTlMgT0YgTElDRU5TRSBBR1JFRU1FTlRTIE9SIE5PVElDRVMgSU5ESUNBVEVEIE9SIFJFRkVSRU5DRUQgQkVMT1cuICBCWSBVU0lORyBUSEUgQ09OVEVOVCwgWU9VIEFHUkVFIFRIQVQgWU9VUiBVU0UKKyAgIE9GIFRIRSBDT05URU5UIElTIEdPVkVSTkVEIEJZIFRISVMgQUdSRUVNRU5UIEFORC9PUiBUSEUgVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgQU5ZIEFQUExJQ0FCTEUgTElDRU5TRSBBR1JFRU1FTlRTIE9SCisgICBOT1RJQ0VTIElORElDQVRFRCBPUiBSRUZFUkVOQ0VEIEJFTE9XLiAgSUYgWU9VIERPIE5PVCBBR1JFRSBUTyBUSEUgVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgVEhJUyBBR1JFRU1FTlQgQU5EIFRIRSBURVJNUyBBTkQKKyAgIENPTkRJVElPTlMgT0YgQU5ZIEFQUExJQ0FCTEUgTElDRU5TRSBBR1JFRU1FTlRTIE9SIE5PVElDRVMgSU5ESUNBVEVEIE9SIFJFRkVSRU5DRUQgQkVMT1csIFRIRU4gWU9VIE1BWSBOT1QgVVNFIFRIRSBDT05URU5ULjwvcD4KKworPGgzPkFwcGxpY2FibGUgTGljZW5zZXM8L2gzPgorCis8cD5Vbmxlc3Mgb3RoZXJ3aXNlIGluZGljYXRlZCwgYWxsIENvbnRlbnQgbWFkZSBhdmFpbGFibGUgYnkgdGhlIEVjbGlwc2UgRm91bmRhdGlvbiBpcyBwcm92aWRlZCB0byB5b3UgdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4wCisgICAoJnF1b3Q7RVBMJnF1b3Q7KS4gIEEgY29weSBvZiB0aGUgRVBMIGlzIHByb3ZpZGVkIHdpdGggdGhpcyBDb250ZW50IGFuZCBpcyBhbHNvIGF2YWlsYWJsZSBhdCA8YSBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbCI+aHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWw8L2E+LgorICAgRm9yIHB1cnBvc2VzIG9mIHRoZSBFUEwsICZxdW90O1Byb2dyYW0mcXVvdDsgd2lsbCBtZWFuIHRoZSBDb250ZW50LjwvcD4KKworPHA+Q29udGVudCBpbmNsdWRlcywgYnV0IGlzIG5vdCBsaW1pdGVkIHRvLCBzb3VyY2UgY29kZSwgb2JqZWN0IGNvZGUsIGRvY3VtZW50YXRpb24gYW5kIG90aGVyIGZpbGVzIG1haW50YWluZWQgaW4gdGhlIEVjbGlwc2UgRm91bmRhdGlvbiBzb3VyY2UgY29kZQorICAgcmVwb3NpdG9yeSAoJnF1b3Q7UmVwb3NpdG9yeSZxdW90OykgaW4gc29mdHdhcmUgbW9kdWxlcyAoJnF1b3Q7TW9kdWxlcyZxdW90OykgYW5kIG1hZGUgYXZhaWxhYmxlIGFzIGRvd25sb2FkYWJsZSBhcmNoaXZlcyAoJnF1b3Q7RG93bmxvYWRzJnF1b3Q7KS48L3A+CisKKzx1bD4KKyAgICAgICA8bGk+Q29udGVudCBtYXkgYmUgc3RydWN0dXJlZCBhbmQgcGFja2FnZWQgaW50byBtb2R1bGVzIHRvIGZhY2lsaXRhdGUgZGVsaXZlcmluZywgZXh0ZW5kaW5nLCBhbmQgdXBncmFkaW5nIHRoZSBDb250ZW50LiAgVHlwaWNhbCBtb2R1bGVzIG1heSBpbmNsdWRlIHBsdWctaW5zICgmcXVvdDtQbHVnLWlucyZxdW90OyksIHBsdWctaW4gZnJhZ21lbnRzICgmcXVvdDtGcmFnbWVudHMmcXVvdDspLCBhbmQgZmVhdHVyZXMgKCZxdW90O0ZlYXR1cmVzJnF1b3Q7KS48L2xpPgorICAgICAgIDxsaT5FYWNoIFBsdWctaW4gb3IgRnJhZ21lbnQgbWF5IGJlIHBhY2thZ2VkIGFzIGEgc3ViLWRpcmVjdG9yeSBvciBKQVIgKEphdmEmdHJhZGU7IEFSY2hpdmUpIGluIGEgZGlyZWN0b3J5IG5hbWVkICZxdW90O3BsdWdpbnMmcXVvdDsuPC9saT4KKyAgICAgICA8bGk+QSBGZWF0dXJlIGlzIGEgYnVuZGxlIG9mIG9uZSBvciBtb3JlIFBsdWctaW5zIGFuZC9vciBGcmFnbWVudHMgYW5kIGFzc29jaWF0ZWQgbWF0ZXJpYWwuICBFYWNoIEZlYXR1cmUgbWF5IGJlIHBhY2thZ2VkIGFzIGEgc3ViLWRpcmVjdG9yeSBpbiBhIGRpcmVjdG9yeSBuYW1lZCAmcXVvdDtmZWF0dXJlcyZxdW90Oy4gIFdpdGhpbiBhIEZlYXR1cmUsIGZpbGVzIG5hbWVkICZxdW90O2ZlYXR1cmUueG1sJnF1b3Q7IG1heSBjb250YWluIGEgbGlzdCBvZiB0aGUgbmFtZXMgYW5kIHZlcnNpb24gbnVtYmVycyBvZiB0aGUgUGx1Zy1pbnMKKyAgICAgIGFuZC9vciBGcmFnbWVudHMgYXNzb2NpYXRlZCB3aXRoIHRoYXQgRmVhdHVyZS48L2xpPgorICAgICAgIDxsaT5GZWF0dXJlcyBtYXkgYWxzbyBpbmNsdWRlIG90aGVyIEZlYXR1cmVzICgmcXVvdDtJbmNsdWRlZCBGZWF0dXJlcyZxdW90OykuIFdpdGhpbiBhIEZlYXR1cmUsIGZpbGVzIG5hbWVkICZxdW90O2ZlYXR1cmUueG1sJnF1b3Q7IG1heSBjb250YWluIGEgbGlzdCBvZiB0aGUgbmFtZXMgYW5kIHZlcnNpb24gbnVtYmVycyBvZiBJbmNsdWRlZCBGZWF0dXJlcy48L2xpPgorPC91bD4KKworPHA+VGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIGdvdmVybmluZyBQbHVnLWlucyBhbmQgRnJhZ21lbnRzIHNob3VsZCBiZSBjb250YWluZWQgaW4gZmlsZXMgbmFtZWQgJnF1b3Q7YWJvdXQuaHRtbCZxdW90OyAoJnF1b3Q7QWJvdXRzJnF1b3Q7KS4gVGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIGdvdmVybmluZyBGZWF0dXJlcyBhbmQKK0luY2x1ZGVkIEZlYXR1cmVzIHNob3VsZCBiZSBjb250YWluZWQgaW4gZmlsZXMgbmFtZWQgJnF1b3Q7bGljZW5zZS5odG1sJnF1b3Q7ICgmcXVvdDtGZWF0dXJlIExpY2Vuc2VzJnF1b3Q7KS4gIEFib3V0cyBhbmQgRmVhdHVyZSBMaWNlbnNlcyBtYXkgYmUgbG9jYXRlZCBpbiBhbnkgZGlyZWN0b3J5IG9mIGEgRG93bmxvYWQgb3IgTW9kdWxlCitpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0byB0aGUgZm9sbG93aW5nIGxvY2F0aW9uczo8L3A+CisKKzx1bD4KKyAgICAgICA8bGk+VGhlIHRvcC1sZXZlbCAocm9vdCkgZGlyZWN0b3J5PC9saT4KKyAgICAgICA8bGk+UGx1Zy1pbiBhbmQgRnJhZ21lbnQgZGlyZWN0b3JpZXM8L2xpPgorICAgICAgIDxsaT5JbnNpZGUgUGx1Zy1pbnMgYW5kIEZyYWdtZW50cyBwYWNrYWdlZCBhcyBKQVJzPC9saT4KKyAgICAgICA8bGk+U3ViLWRpcmVjdG9yaWVzIG9mIHRoZSBkaXJlY3RvcnkgbmFtZWQgJnF1b3Q7c3JjJnF1b3Q7IG9mIGNlcnRhaW4gUGx1Zy1pbnM8L2xpPgorICAgICAgIDxsaT5GZWF0dXJlIGRpcmVjdG9yaWVzPC9saT4KKzwvdWw+CisKKzxwPk5vdGU6IGlmIGEgRmVhdHVyZSBtYWRlIGF2YWlsYWJsZSBieSB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uIGlzIGluc3RhbGxlZCB1c2luZyB0aGUgUHJvdmlzaW9uaW5nIFRlY2hub2xvZ3kgKGFzIGRlZmluZWQgYmVsb3cpLCB5b3UgbXVzdCBhZ3JlZSB0byBhIGxpY2Vuc2UgKCZxdW90O0ZlYXR1cmUgVXBkYXRlIExpY2Vuc2UmcXVvdDspIGR1cmluZyB0aGUKK2luc3RhbGxhdGlvbiBwcm9jZXNzLiAgSWYgdGhlIEZlYXR1cmUgY29udGFpbnMgSW5jbHVkZWQgRmVhdHVyZXMsIHRoZSBGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlIHNob3VsZCBlaXRoZXIgcHJvdmlkZSB5b3Ugd2l0aCB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgZ292ZXJuaW5nIHRoZSBJbmNsdWRlZCBGZWF0dXJlcyBvcgoraW5mb3JtIHlvdSB3aGVyZSB5b3UgY2FuIGxvY2F0ZSB0aGVtLiAgRmVhdHVyZSBVcGRhdGUgTGljZW5zZXMgbWF5IGJlIGZvdW5kIGluIHRoZSAmcXVvdDtsaWNlbnNlJnF1b3Q7IHByb3BlcnR5IG9mIGZpbGVzIG5hbWVkICZxdW90O2ZlYXR1cmUucHJvcGVydGllcyZxdW90OyBmb3VuZCB3aXRoaW4gYSBGZWF0dXJlLgorU3VjaCBBYm91dHMsIEZlYXR1cmUgTGljZW5zZXMsIGFuZCBGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlcyBjb250YWluIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyAob3IgcmVmZXJlbmNlcyB0byBzdWNoIHRlcm1zIGFuZCBjb25kaXRpb25zKSB0aGF0IGdvdmVybiB5b3VyIHVzZSBvZiB0aGUgYXNzb2NpYXRlZCBDb250ZW50IGluCit0aGF0IGRpcmVjdG9yeS48L3A+CisKKzxwPlRIRSBBQk9VVFMsIEZFQVRVUkUgTElDRU5TRVMsIEFORCBGRUFUVVJFIFVQREFURSBMSUNFTlNFUyBNQVkgUkVGRVIgVE8gVEhFIEVQTCBPUiBPVEhFUiBMSUNFTlNFIEFHUkVFTUVOVFMsIE5PVElDRVMgT1IgVEVSTVMgQU5EIENPTkRJVElPTlMuICBTT01FIE9GIFRIRVNFCitPVEhFUiBMSUNFTlNFIEFHUkVFTUVOVFMgTUFZIElOQ0xVREUgKEJVVCBBUkUgTk9UIExJTUlURUQgVE8pOjwvcD4KKworPHVsPgorICAgICAgIDxsaT5Db21tb24gUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjAgKGF2YWlsYWJsZSBhdCA8YSBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2NwbC12MTAuaHRtbCI+aHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9jcGwtdjEwLmh0bWw8L2E+KTwvbGk+CisgICAgICAgPGxpPkFwYWNoZSBTb2Z0d2FyZSBMaWNlbnNlIDEuMSAoYXZhaWxhYmxlIGF0IDxhIGhyZWY9Imh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFIj5odHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRTwvYT4pPC9saT4KKyAgICAgICA8bGk+QXBhY2hlIFNvZnR3YXJlIExpY2Vuc2UgMi4wIChhdmFpbGFibGUgYXQgPGEgaHJlZj0iaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wIj5odHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjA8L2E+KTwvbGk+CisgICAgICAgPGxpPk1ldHJvIExpbmsgUHVibGljIExpY2Vuc2UgMS4wMCAoYXZhaWxhYmxlIGF0IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbmdyb3VwLm9yZy9vcGVubW90aWYvc3VwcG9ydGVycy9tZXRyb2xpbmsvbGljZW5zZS5odG1sIj5odHRwOi8vd3d3Lm9wZW5ncm91cC5vcmcvb3Blbm1vdGlmL3N1cHBvcnRlcnMvbWV0cm9saW5rL2xpY2Vuc2UuaHRtbDwvYT4pPC9saT4KKyAgICAgICA8bGk+TW96aWxsYSBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMSAoYXZhaWxhYmxlIGF0IDxhIGhyZWY9Imh0dHA6Ly93d3cubW96aWxsYS5vcmcvTVBML01QTC0xLjEuaHRtbCI+aHR0cDovL3d3dy5tb3ppbGxhLm9yZy9NUEwvTVBMLTEuMS5odG1sPC9hPik8L2xpPgorPC91bD4KKworPHA+SVQgSVMgWU9VUiBPQkxJR0FUSU9OIFRPIFJFQUQgQU5EIEFDQ0VQVCBBTEwgU1VDSCBURVJNUyBBTkQgQ09ORElUSU9OUyBQUklPUiBUTyBVU0UgT0YgVEhFIENPTlRFTlQuICBJZiBubyBBYm91dCwgRmVhdHVyZSBMaWNlbnNlLCBvciBGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlIGlzIHByb3ZpZGVkLCBwbGVhc2UKK2NvbnRhY3QgdGhlIEVjbGlwc2UgRm91bmRhdGlvbiB0byBkZXRlcm1pbmUgd2hhdCB0ZXJtcyBhbmQgY29uZGl0aW9ucyBnb3Zlcm4gdGhhdCBwYXJ0aWN1bGFyIENvbnRlbnQuPC9wPgorCisKKzxoMz5Vc2Ugb2YgUHJvdmlzaW9uaW5nIFRlY2hub2xvZ3k8L2gzPgorCis8cD5UaGUgRWNsaXBzZSBGb3VuZGF0aW9uIG1ha2VzIGF2YWlsYWJsZSBwcm92aXNpb25pbmcgc29mdHdhcmUsIGV4YW1wbGVzIG9mIHdoaWNoIGluY2x1ZGUsIGJ1dCBhcmUgbm90IGxpbWl0ZWQgdG8sIHAyIGFuZCB0aGUgRWNsaXBzZQorICAgVXBkYXRlIE1hbmFnZXIgKCZxdW90O1Byb3Zpc2lvbmluZyBUZWNobm9sb2d5JnF1b3Q7KSBmb3IgdGhlIHB1cnBvc2Ugb2YgYWxsb3dpbmcgdXNlcnMgdG8gaW5zdGFsbCBzb2Z0d2FyZSwgZG9jdW1lbnRhdGlvbiwgaW5mb3JtYXRpb24gYW5kL29yCisgICBvdGhlciBtYXRlcmlhbHMgKGNvbGxlY3RpdmVseSAmcXVvdDtJbnN0YWxsYWJsZSBTb2Z0d2FyZSZxdW90OykuIFRoaXMgY2FwYWJpbGl0eSBpcyBwcm92aWRlZCB3aXRoIHRoZSBpbnRlbnQgb2YgYWxsb3dpbmcgc3VjaCB1c2VycyB0bworICAgaW5zdGFsbCwgZXh0ZW5kIGFuZCB1cGRhdGUgRWNsaXBzZS1iYXNlZCBwcm9kdWN0cy4gSW5mb3JtYXRpb24gYWJvdXQgcGFja2FnaW5nIEluc3RhbGxhYmxlIFNvZnR3YXJlIGlzIGF2YWlsYWJsZSBhdCA8YQorICAgICAgIGhyZWY9Imh0dHA6Ly9lY2xpcHNlLm9yZy9lcXVpbm94L3AyL3JlcG9zaXRvcnlfcGFja2FnaW5nLmh0bWwiPmh0dHA6Ly9lY2xpcHNlLm9yZy9lcXVpbm94L3AyL3JlcG9zaXRvcnlfcGFja2FnaW5nLmh0bWw8L2E+CisgICAoJnF1b3Q7U3BlY2lmaWNhdGlvbiZxdW90OykuPC9wPgorCis8cD5Zb3UgbWF5IHVzZSBQcm92aXNpb25pbmcgVGVjaG5vbG9neSB0byBhbGxvdyBvdGhlciBwYXJ0aWVzIHRvIGluc3RhbGwgSW5zdGFsbGFibGUgU29mdHdhcmUuIFlvdSBzaGFsbCBiZSByZXNwb25zaWJsZSBmb3IgZW5hYmxpbmcgdGhlCisgICBhcHBsaWNhYmxlIGxpY2Vuc2UgYWdyZWVtZW50cyByZWxhdGluZyB0byB0aGUgSW5zdGFsbGFibGUgU29mdHdhcmUgdG8gYmUgcHJlc2VudGVkIHRvLCBhbmQgYWNjZXB0ZWQgYnksIHRoZSB1c2VycyBvZiB0aGUgUHJvdmlzaW9uaW5nIFRlY2hub2xvZ3kKKyAgIGluIGFjY29yZGFuY2Ugd2l0aCB0aGUgU3BlY2lmaWNhdGlvbi4gQnkgdXNpbmcgUHJvdmlzaW9uaW5nIFRlY2hub2xvZ3kgaW4gc3VjaCBhIG1hbm5lciBhbmQgbWFraW5nIGl0IGF2YWlsYWJsZSBpbiBhY2NvcmRhbmNlIHdpdGggdGhlCisgICBTcGVjaWZpY2F0aW9uLCB5b3UgZnVydGhlciBhY2tub3dsZWRnZSB5b3VyIGFncmVlbWVudCB0bywgYW5kIHRoZSBhY3F1aXNpdGlvbiBvZiBhbGwgbmVjZXNzYXJ5IHJpZ2h0cyB0byBwZXJtaXQgdGhlIGZvbGxvd2luZzo8L3A+CisKKzxvbD4KKyAgICAgICA8bGk+QSBzZXJpZXMgb2YgYWN0aW9ucyBtYXkgb2NjdXIgKCZxdW90O1Byb3Zpc2lvbmluZyBQcm9jZXNzJnF1b3Q7KSBpbiB3aGljaCBhIHVzZXIgbWF5IGV4ZWN1dGUgdGhlIFByb3Zpc2lvbmluZyBUZWNobm9sb2d5CisgICAgICAgb24gYSBtYWNoaW5lICgmcXVvdDtUYXJnZXQgTWFjaGluZSZxdW90Oykgd2l0aCB0aGUgaW50ZW50IG9mIGluc3RhbGxpbmcsIGV4dGVuZGluZyBvciB1cGRhdGluZyB0aGUgZnVuY3Rpb25hbGl0eSBvZiBhbiBFY2xpcHNlLWJhc2VkCisgICAgICAgcHJvZHVjdC48L2xpPgorICAgICAgIDxsaT5EdXJpbmcgdGhlIFByb3Zpc2lvbmluZyBQcm9jZXNzLCB0aGUgUHJvdmlzaW9uaW5nIFRlY2hub2xvZ3kgbWF5IGNhdXNlIHRoaXJkIHBhcnR5IEluc3RhbGxhYmxlIFNvZnR3YXJlIG9yIGEgcG9ydGlvbiB0aGVyZW9mIHRvIGJlCisgICAgICAgYWNjZXNzZWQgYW5kIGNvcGllZCB0byB0aGUgVGFyZ2V0IE1hY2hpbmUuPC9saT4KKyAgICAgICA8bGk+UHVyc3VhbnQgdG8gdGhlIFNwZWNpZmljYXRpb24sIHlvdSB3aWxsIHByb3ZpZGUgdG8gdGhlIHVzZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIHRoYXQgZ292ZXJuIHRoZSB1c2Ugb2YgdGhlIEluc3RhbGxhYmxlCisgICAgICAgU29mdHdhcmUgKCZxdW90O0luc3RhbGxhYmxlIFNvZnR3YXJlIEFncmVlbWVudCZxdW90OykgYW5kIHN1Y2ggSW5zdGFsbGFibGUgU29mdHdhcmUgQWdyZWVtZW50IHNoYWxsIGJlIGFjY2Vzc2VkIGZyb20gdGhlIFRhcmdldAorICAgICAgIE1hY2hpbmUgaW4gYWNjb3JkYW5jZSB3aXRoIHRoZSBTcGVjaWZpY2F0aW9uLiBTdWNoIEluc3RhbGxhYmxlIFNvZnR3YXJlIEFncmVlbWVudCBtdXN0IGluZm9ybSB0aGUgdXNlciBvZiB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgdGhhdCBnb3Zlcm4KKyAgICAgICB0aGUgSW5zdGFsbGFibGUgU29mdHdhcmUgYW5kIG11c3Qgc29saWNpdCBhY2NlcHRhbmNlIGJ5IHRoZSBlbmQgdXNlciBpbiB0aGUgbWFubmVyIHByZXNjcmliZWQgaW4gc3VjaCBJbnN0YWxsYWJsZSBTb2Z0d2FyZSBBZ3JlZW1lbnQuIFVwb24gc3VjaAorICAgICAgIGluZGljYXRpb24gb2YgYWdyZWVtZW50IGJ5IHRoZSB1c2VyLCB0aGUgcHJvdmlzaW9uaW5nIFRlY2hub2xvZ3kgd2lsbCBjb21wbGV0ZSBpbnN0YWxsYXRpb24gb2YgdGhlIEluc3RhbGxhYmxlIFNvZnR3YXJlLjwvbGk+Cis8L29sPgorCis8aDM+Q3J5cHRvZ3JhcGh5PC9oMz4KKworPHA+Q29udGVudCBtYXkgY29udGFpbiBlbmNyeXB0aW9uIHNvZnR3YXJlLiBUaGUgY291bnRyeSBpbiB3aGljaCB5b3UgYXJlIGN1cnJlbnRseSBtYXkgaGF2ZSByZXN0cmljdGlvbnMgb24gdGhlIGltcG9ydCwgcG9zc2Vzc2lvbiwgYW5kIHVzZSwgYW5kL29yIHJlLWV4cG9ydCB0bworICAgYW5vdGhlciBjb3VudHJ5LCBvZiBlbmNyeXB0aW9uIHNvZnR3YXJlLiBCRUZPUkUgdXNpbmcgYW55IGVuY3J5cHRpb24gc29mdHdhcmUsIHBsZWFzZSBjaGVjayB0aGUgY291bnRyeSdzIGxhd3MsIHJlZ3VsYXRpb25zIGFuZCBwb2xpY2llcyBjb25jZXJuaW5nIHRoZSBpbXBvcnQsCisgICBwb3NzZXNzaW9uLCBvciB1c2UsIGFuZCByZS1leHBvcnQgb2YgZW5jcnlwdGlvbiBzb2Z0d2FyZSwgdG8gc2VlIGlmIHRoaXMgaXMgcGVybWl0dGVkLjwvcD4KKworPHA+PHNtYWxsPkphdmEgYW5kIGFsbCBKYXZhLWJhc2VkIHRyYWRlbWFya3MgYXJlIHRyYWRlbWFya3Mgb2YgT3JhY2xlIENvcnBvcmF0aW9uIGluIHRoZSBVbml0ZWQgU3RhdGVzLCBvdGhlciBjb3VudHJpZXMsIG9yIGJvdGguPC9zbWFsbD48L3A+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS5zdGVtLnByb2R1Y3QuZmVhdHVyZS8ucHJvamVjdCBiL2ZlYXR1cmVzL29yZy5lY2xpcHNlLnN0ZW0ucHJvZHVjdC5mZWF0dXJlLy5wcm9qZWN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYzYmRhMjIKLS0tIC9kZXYvbnVsbAorKysgYi9mZWF0dXJlcy9vcmcuZWNsaXBzZS5zdGVtLnByb2R1Y3QuZmVhdHVyZS8ucHJvamVjdApAQCAtMCwwICsxLDE3IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPHByb2plY3REZXNjcmlwdGlvbj4KKwk8bmFtZT5vcmcuZWNsaXBzZS5zdGVtLnByb2R1Y3QuZmVhdHVyZTwvbmFtZT4KKwk8Y29tbWVudD48L2NvbW1lbnQ+CisJPHByb2plY3RzPgorCTwvcHJvamVjdHM+CisJPGJ1aWxkU3BlYz4KKwkJPGJ1aWxkQ29tbWFuZD4KKwkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5GZWF0dXJlQnVpbGRlcjwvbmFtZT4KKwkJCTxhcmd1bWVudHM+CisJCQk8L2FyZ3VtZW50cz4KKwkJPC9idWlsZENvbW1hbmQ+CisJPC9idWlsZFNwZWM+CisJPG5hdHVyZXM+CisJCTxuYXR1cmU+b3JnLmVjbGlwc2UucGRlLkZlYXR1cmVOYXR1cmU8L25hdHVyZT4KKwk8L25hdHVyZXM+Cis8L3Byb2plY3REZXNjcmlwdGlvbj4KZGlmZiAtLWdpdCBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLnN0ZW0ucHJvZHVjdC5mZWF0dXJlL2J1aWxkLnByb3BlcnRpZXMgYi9mZWF0dXJlcy9vcmcuZWNsaXBzZS5zdGVtLnByb2R1Y3QuZmVhdHVyZS9idWlsZC5wcm9wZXJ0aWVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI3NGFmODYKLS0tIC9kZXYvbnVsbAorKysgYi9mZWF0dXJlcy9vcmcuZWNsaXBzZS5zdGVtLnByb2R1Y3QuZmVhdHVyZS9idWlsZC5wcm9wZXJ0aWVzCkBAIC0wLDAgKzEsNCBAQAorYmluLmluY2x1ZGVzID0gZmVhdHVyZS54bWwsXAorICAgICAgICAgICAgICAgZmVhdHVyZS5wcm9wZXJ0aWVzLFwKKyAgICAgICAgICAgICAgIGVwbC12MTAuaHRtbCxcCisgICAgICAgICAgICAgICBsaWNlbnNlLmh0bWwKZGlmZiAtLWdpdCBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLnN0ZW0ucHJvZHVjdC5mZWF0dXJlL2VwbC12MTAuaHRtbCBiL2ZlYXR1cmVzL29yZy5lY2xpcHNlLnN0ZW0ucHJvZHVjdC5mZWF0dXJlL2VwbC12MTAuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZDRiMTk2Ci0tLSAvZGV2L251bGwKKysrIGIvZmVhdHVyZXMvb3JnLmVjbGlwc2Uuc3RlbS5wcm9kdWN0LmZlYXR1cmUvZXBsLXYxMC5odG1sCkBAIC0wLDAgKzEsMzI4IEBACis8aHRtbCB4bWxuczpvPSJ1cm46c2NoZW1hcy1taWNyb3NvZnQtY29tOm9mZmljZTpvZmZpY2UiCit4bWxuczp3PSJ1cm46c2NoZW1hcy1taWNyb3NvZnQtY29tOm9mZmljZTp3b3JkIgoreG1sbnM9Imh0dHA6Ly93d3cudzMub3JnL1RSL1JFQy1odG1sNDAiPgorCis8aGVhZD4KKzxtZXRhIGh0dHAtZXF1aXY9Q29udGVudC1UeXBlIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD13aW5kb3dzLTEyNTIiPgorPG1ldGEgbmFtZT1Qcm9nSWQgY29udGVudD1Xb3JkLkRvY3VtZW50PgorPG1ldGEgbmFtZT1HZW5lcmF0b3IgY29udGVudD0iTWljcm9zb2Z0IFdvcmQgOSI+Cis8bWV0YSBuYW1lPU9yaWdpbmF0b3IgY29udGVudD0iTWljcm9zb2Z0IFdvcmQgOSI+Cis8bGluayByZWw9RmlsZS1MaXN0CitocmVmPSIuL0VjbGlwc2UlMjBFUEwlMjAyMDAzXzExXzEwJTIwRmluYWxfZmlsZXMvZmlsZWxpc3QueG1sIj4KKzx0aXRsZT5FY2xpcHNlIFB1YmxpYyBMaWNlbnNlIC0gVmVyc2lvbiAxLjA8L3RpdGxlPgorPCEtLVtpZiBndGUgbXNvIDldPjx4bWw+CisgPG86RG9jdW1lbnRQcm9wZXJ0aWVzPgorICA8bzpSZXZpc2lvbj4yPC9vOlJldmlzaW9uPgorICA8bzpUb3RhbFRpbWU+MzwvbzpUb3RhbFRpbWU+CisgIDxvOkNyZWF0ZWQ+MjAwNC0wMy0wNVQyMzowMzowMFo8L286Q3JlYXRlZD4KKyAgPG86TGFzdFNhdmVkPjIwMDQtMDMtMDVUMjM6MDM6MDBaPC9vOkxhc3RTYXZlZD4KKyAgPG86UGFnZXM+NDwvbzpQYWdlcz4KKyAgPG86V29yZHM+MTYyNjwvbzpXb3Jkcz4KKyAgPG86Q2hhcmFjdGVycz45MjcwPC9vOkNoYXJhY3RlcnM+CisgICA8bzpMaW5lcz43NzwvbzpMaW5lcz4KKyAgPG86UGFyYWdyYXBocz4xODwvbzpQYXJhZ3JhcGhzPgorICA8bzpDaGFyYWN0ZXJzV2l0aFNwYWNlcz4xMTM4NDwvbzpDaGFyYWN0ZXJzV2l0aFNwYWNlcz4KKyAgPG86VmVyc2lvbj45LjQ0MDI8L286VmVyc2lvbj4KKyA8L286RG9jdW1lbnRQcm9wZXJ0aWVzPgorPC94bWw+PCFbZW5kaWZdLS0+PCEtLVtpZiBndGUgbXNvIDldPjx4bWw+CisgPHc6V29yZERvY3VtZW50PgorICA8dzpUcmFja1JldmlzaW9ucy8+CisgPC93OldvcmREb2N1bWVudD4KKzwveG1sPjwhW2VuZGlmXS0tPgorPHN0eWxlPgorPCEtLQorIC8qIEZvbnQgRGVmaW5pdGlvbnMgKi8KK0Bmb250LWZhY2UKKwl7Zm9udC1mYW1pbHk6VGFob21hOworCXBhbm9zZS0xOjIgMTEgNiA0IDMgNSA0IDQgMiA0OworCW1zby1mb250LWNoYXJzZXQ6MDsKKwltc28tZ2VuZXJpYy1mb250LWZhbWlseTpzd2lzczsKKwltc28tZm9udC1waXRjaDp2YXJpYWJsZTsKKwltc28tZm9udC1zaWduYXR1cmU6NTUzNjc5NDk1IC0yMTQ3NDgzNjQ4IDggMCA2NjA0NyAwO30KKyAvKiBTdHlsZSBEZWZpbml0aW9ucyAqLworcC5Nc29Ob3JtYWwsIGxpLk1zb05vcm1hbCwgZGl2Lk1zb05vcm1hbAorCXttc28tc3R5bGUtcGFyZW50OiIiOworCW1hcmdpbjowaW47CisJbWFyZ2luLWJvdHRvbTouMDAwMXB0OworCW1zby1wYWdpbmF0aW9uOndpZG93LW9ycGhhbjsKKwlmb250LXNpemU6MTIuMHB0OworCWZvbnQtZmFtaWx5OiJUaW1lcyBOZXcgUm9tYW4iOworCW1zby1mYXJlYXN0LWZvbnQtZmFtaWx5OiJUaW1lcyBOZXcgUm9tYW4iO30KK3AKKwl7bWFyZ2luLXJpZ2h0OjBpbjsKKwltc28tbWFyZ2luLXRvcC1hbHQ6YXV0bzsKKwltc28tbWFyZ2luLWJvdHRvbS1hbHQ6YXV0bzsKKwltYXJnaW4tbGVmdDowaW47CisJbXNvLXBhZ2luYXRpb246d2lkb3ctb3JwaGFuOworCWZvbnQtc2l6ZToxMi4wcHQ7CisJZm9udC1mYW1pbHk6IlRpbWVzIE5ldyBSb21hbiI7CisJbXNvLWZhcmVhc3QtZm9udC1mYW1pbHk6IlRpbWVzIE5ldyBSb21hbiI7fQorcC5CYWxsb29uVGV4dCwgbGkuQmFsbG9vblRleHQsIGRpdi5CYWxsb29uVGV4dAorCXttc28tc3R5bGUtbmFtZToiQmFsbG9vbiBUZXh0IjsKKwltYXJnaW46MGluOworCW1hcmdpbi1ib3R0b206LjAwMDFwdDsKKwltc28tcGFnaW5hdGlvbjp3aWRvdy1vcnBoYW47CisJZm9udC1zaXplOjguMHB0OworCWZvbnQtZmFtaWx5OlRhaG9tYTsKKwltc28tZmFyZWFzdC1mb250LWZhbWlseToiVGltZXMgTmV3IFJvbWFuIjt9CitAcGFnZSBTZWN0aW9uMQorCXtzaXplOjguNWluIDExLjBpbjsKKwltYXJnaW46MS4waW4gMS4yNWluIDEuMGluIDEuMjVpbjsKKwltc28taGVhZGVyLW1hcmdpbjouNWluOworCW1zby1mb290ZXItbWFyZ2luOi41aW47CisJbXNvLXBhcGVyLXNvdXJjZTowO30KK2Rpdi5TZWN0aW9uMQorCXtwYWdlOlNlY3Rpb24xO30KKy0tPgorPC9zdHlsZT4KKzwvaGVhZD4KKworPGJvZHkgbGFuZz1FTi1VUyBzdHlsZT0ndGFiLWludGVydmFsOi41aW4nPgorCis8ZGl2IGNsYXNzPVNlY3Rpb24xPgorCis8cCBhbGlnbj1jZW50ZXIgc3R5bGU9J3RleHQtYWxpZ246Y2VudGVyJz48Yj5FY2xpcHNlIFB1YmxpYyBMaWNlbnNlIC0gdiAxLjA8L2I+Cis8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5USEUgQUNDT01QQU5ZSU5HIFBST0dSQU0gSVMgUFJPVklERUQgVU5ERVIKK1RIRSBURVJNUyBPRiBUSElTIEVDTElQU0UgUFVCTElDIExJQ0VOU0UgKCZxdW90O0FHUkVFTUVOVCZxdW90OykuIEFOWSBVU0UsCitSRVBST0RVQ1RJT04gT1IgRElTVFJJQlVUSU9OIE9GIFRIRSBQUk9HUkFNIENPTlNUSVRVVEVTIFJFQ0lQSUVOVCdTIEFDQ0VQVEFOQ0UKK09GIFRISVMgQUdSRUVNRU5ULjwvc3Bhbj4gPC9wPgorCis8cD48Yj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+MS4gREVGSU5JVElPTlM8L3NwYW4+PC9iPiA8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4mcXVvdDtDb250cmlidXRpb24mcXVvdDsgbWVhbnM6PC9zcGFuPiA8L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmEpCitpbiB0aGUgY2FzZSBvZiB0aGUgaW5pdGlhbCBDb250cmlidXRvciwgdGhlIGluaXRpYWwgY29kZSBhbmQgZG9jdW1lbnRhdGlvbgorZGlzdHJpYnV0ZWQgdW5kZXIgdGhpcyBBZ3JlZW1lbnQsIGFuZDxiciBjbGVhcj1sZWZ0PgorYikgaW4gdGhlIGNhc2Ugb2YgZWFjaCBzdWJzZXF1ZW50IENvbnRyaWJ1dG9yOjwvc3Bhbj48L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmkpCitjaGFuZ2VzIHRvIHRoZSBQcm9ncmFtLCBhbmQ8L3NwYW4+PC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5paSkKK2FkZGl0aW9ucyB0byB0aGUgUHJvZ3JhbTs8L3NwYW4+PC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz53aGVyZQorc3VjaCBjaGFuZ2VzIGFuZC9vciBhZGRpdGlvbnMgdG8gdGhlIFByb2dyYW0gb3JpZ2luYXRlIGZyb20gYW5kIGFyZSBkaXN0cmlidXRlZAorYnkgdGhhdCBwYXJ0aWN1bGFyIENvbnRyaWJ1dG9yLiBBIENvbnRyaWJ1dGlvbiAnb3JpZ2luYXRlcycgZnJvbSBhIENvbnRyaWJ1dG9yCitpZiBpdCB3YXMgYWRkZWQgdG8gdGhlIFByb2dyYW0gYnkgc3VjaCBDb250cmlidXRvciBpdHNlbGYgb3IgYW55b25lIGFjdGluZyBvbgorc3VjaCBDb250cmlidXRvcidzIGJlaGFsZi4gQ29udHJpYnV0aW9ucyBkbyBub3QgaW5jbHVkZSBhZGRpdGlvbnMgdG8gdGhlCitQcm9ncmFtIHdoaWNoOiAoaSkgYXJlIHNlcGFyYXRlIG1vZHVsZXMgb2Ygc29mdHdhcmUgZGlzdHJpYnV0ZWQgaW4gY29uanVuY3Rpb24KK3dpdGggdGhlIFByb2dyYW0gdW5kZXIgdGhlaXIgb3duIGxpY2Vuc2UgYWdyZWVtZW50LCBhbmQgKGlpKSBhcmUgbm90IGRlcml2YXRpdmUKK3dvcmtzIG9mIHRoZSBQcm9ncmFtLiA8L3NwYW4+PC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+JnF1b3Q7Q29udHJpYnV0b3ImcXVvdDsgbWVhbnMgYW55IHBlcnNvbiBvcgorZW50aXR5IHRoYXQgZGlzdHJpYnV0ZXMgdGhlIFByb2dyYW0uPC9zcGFuPiA8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4mcXVvdDtMaWNlbnNlZCBQYXRlbnRzICZxdW90OyBtZWFuIHBhdGVudAorY2xhaW1zIGxpY2Vuc2FibGUgYnkgYSBDb250cmlidXRvciB3aGljaCBhcmUgbmVjZXNzYXJpbHkgaW5mcmluZ2VkIGJ5IHRoZSB1c2UKK29yIHNhbGUgb2YgaXRzIENvbnRyaWJ1dGlvbiBhbG9uZSBvciB3aGVuIGNvbWJpbmVkIHdpdGggdGhlIFByb2dyYW0uIDwvc3Bhbj48L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4mcXVvdDtQcm9ncmFtJnF1b3Q7IG1lYW5zIHRoZSBDb250cmlidXRpb25zCitkaXN0cmlidXRlZCBpbiBhY2NvcmRhbmNlIHdpdGggdGhpcyBBZ3JlZW1lbnQuPC9zcGFuPiA8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4mcXVvdDtSZWNpcGllbnQmcXVvdDsgbWVhbnMgYW55b25lIHdobworcmVjZWl2ZXMgdGhlIFByb2dyYW0gdW5kZXIgdGhpcyBBZ3JlZW1lbnQsIGluY2x1ZGluZyBhbGwgQ29udHJpYnV0b3JzLjwvc3Bhbj4gPC9wPgorCis8cD48Yj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+Mi4gR1JBTlQgT0YgUklHSFRTPC9zcGFuPjwvYj4gPC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5hKQorU3ViamVjdCB0byB0aGUgdGVybXMgb2YgdGhpcyBBZ3JlZW1lbnQsIGVhY2ggQ29udHJpYnV0b3IgaGVyZWJ5IGdyYW50cyBSZWNpcGllbnQKK2Egbm9uLWV4Y2x1c2l2ZSwgd29ybGR3aWRlLCByb3lhbHR5LWZyZWUgY29weXJpZ2h0IGxpY2Vuc2UgdG88c3Bhbgorc3R5bGU9J2NvbG9yOnJlZCc+IDwvc3Bhbj5yZXByb2R1Y2UsIHByZXBhcmUgZGVyaXZhdGl2ZSB3b3JrcyBvZiwgcHVibGljbHkKK2Rpc3BsYXksIHB1YmxpY2x5IHBlcmZvcm0sIGRpc3RyaWJ1dGUgYW5kIHN1YmxpY2Vuc2UgdGhlIENvbnRyaWJ1dGlvbiBvZiBzdWNoCitDb250cmlidXRvciwgaWYgYW55LCBhbmQgc3VjaCBkZXJpdmF0aXZlIHdvcmtzLCBpbiBzb3VyY2UgY29kZSBhbmQgb2JqZWN0IGNvZGUKK2Zvcm0uPC9zcGFuPjwvcD4KKworPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YikKK1N1YmplY3QgdG8gdGhlIHRlcm1zIG9mIHRoaXMgQWdyZWVtZW50LCBlYWNoIENvbnRyaWJ1dG9yIGhlcmVieSBncmFudHMKK1JlY2lwaWVudCBhIG5vbi1leGNsdXNpdmUsIHdvcmxkd2lkZSw8c3BhbiBzdHlsZT0nY29sb3I6Z3JlZW4nPiA8L3NwYW4+cm95YWx0eS1mcmVlCitwYXRlbnQgbGljZW5zZSB1bmRlciBMaWNlbnNlZCBQYXRlbnRzIHRvIG1ha2UsIHVzZSwgc2VsbCwgb2ZmZXIgdG8gc2VsbCwgaW1wb3J0CithbmQgb3RoZXJ3aXNlIHRyYW5zZmVyIHRoZSBDb250cmlidXRpb24gb2Ygc3VjaCBDb250cmlidXRvciwgaWYgYW55LCBpbiBzb3VyY2UKK2NvZGUgYW5kIG9iamVjdCBjb2RlIGZvcm0uIFRoaXMgcGF0ZW50IGxpY2Vuc2Ugc2hhbGwgYXBwbHkgdG8gdGhlIGNvbWJpbmF0aW9uCitvZiB0aGUgQ29udHJpYnV0aW9uIGFuZCB0aGUgUHJvZ3JhbSBpZiwgYXQgdGhlIHRpbWUgdGhlIENvbnRyaWJ1dGlvbiBpcyBhZGRlZAorYnkgdGhlIENvbnRyaWJ1dG9yLCBzdWNoIGFkZGl0aW9uIG9mIHRoZSBDb250cmlidXRpb24gY2F1c2VzIHN1Y2ggY29tYmluYXRpb24KK3RvIGJlIGNvdmVyZWQgYnkgdGhlIExpY2Vuc2VkIFBhdGVudHMuIFRoZSBwYXRlbnQgbGljZW5zZSBzaGFsbCBub3QgYXBwbHkgdG8KK2FueSBvdGhlciBjb21iaW5hdGlvbnMgd2hpY2ggaW5jbHVkZSB0aGUgQ29udHJpYnV0aW9uLiBObyBoYXJkd2FyZSBwZXIgc2UgaXMKK2xpY2Vuc2VkIGhlcmV1bmRlci4gPC9zcGFuPjwvcD4KKworPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YykKK1JlY2lwaWVudCB1bmRlcnN0YW5kcyB0aGF0IGFsdGhvdWdoIGVhY2ggQ29udHJpYnV0b3IgZ3JhbnRzIHRoZSBsaWNlbnNlcyB0byBpdHMKK0NvbnRyaWJ1dGlvbnMgc2V0IGZvcnRoIGhlcmVpbiwgbm8gYXNzdXJhbmNlcyBhcmUgcHJvdmlkZWQgYnkgYW55IENvbnRyaWJ1dG9yCit0aGF0IHRoZSBQcm9ncmFtIGRvZXMgbm90IGluZnJpbmdlIHRoZSBwYXRlbnQgb3Igb3RoZXIgaW50ZWxsZWN0dWFsIHByb3BlcnR5CityaWdodHMgb2YgYW55IG90aGVyIGVudGl0eS4gRWFjaCBDb250cmlidXRvciBkaXNjbGFpbXMgYW55IGxpYWJpbGl0eSB0byBSZWNpcGllbnQKK2ZvciBjbGFpbXMgYnJvdWdodCBieSBhbnkgb3RoZXIgZW50aXR5IGJhc2VkIG9uIGluZnJpbmdlbWVudCBvZiBpbnRlbGxlY3R1YWwKK3Byb3BlcnR5IHJpZ2h0cyBvciBvdGhlcndpc2UuIEFzIGEgY29uZGl0aW9uIHRvIGV4ZXJjaXNpbmcgdGhlIHJpZ2h0cyBhbmQKK2xpY2Vuc2VzIGdyYW50ZWQgaGVyZXVuZGVyLCBlYWNoIFJlY2lwaWVudCBoZXJlYnkgYXNzdW1lcyBzb2xlIHJlc3BvbnNpYmlsaXR5Cit0byBzZWN1cmUgYW55IG90aGVyIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgbmVlZGVkLCBpZiBhbnkuIEZvciBleGFtcGxlLAoraWYgYSB0aGlyZCBwYXJ0eSBwYXRlbnQgbGljZW5zZSBpcyByZXF1aXJlZCB0byBhbGxvdyBSZWNpcGllbnQgdG8gZGlzdHJpYnV0ZQordGhlIFByb2dyYW0sIGl0IGlzIFJlY2lwaWVudCdzIHJlc3BvbnNpYmlsaXR5IHRvIGFjcXVpcmUgdGhhdCBsaWNlbnNlIGJlZm9yZQorZGlzdHJpYnV0aW5nIHRoZSBQcm9ncmFtLjwvc3Bhbj48L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmQpCitFYWNoIENvbnRyaWJ1dG9yIHJlcHJlc2VudHMgdGhhdCB0byBpdHMga25vd2xlZGdlIGl0IGhhcyBzdWZmaWNpZW50IGNvcHlyaWdodAorcmlnaHRzIGluIGl0cyBDb250cmlidXRpb24sIGlmIGFueSwgdG8gZ3JhbnQgdGhlIGNvcHlyaWdodCBsaWNlbnNlIHNldCBmb3J0aCBpbgordGhpcyBBZ3JlZW1lbnQuIDwvc3Bhbj48L3A+CisKKzxwPjxiPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4zLiBSRVFVSVJFTUVOVFM8L3NwYW4+PC9iPiA8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5BIENvbnRyaWJ1dG9yIG1heSBjaG9vc2UgdG8gZGlzdHJpYnV0ZSB0aGUKK1Byb2dyYW0gaW4gb2JqZWN0IGNvZGUgZm9ybSB1bmRlciBpdHMgb3duIGxpY2Vuc2UgYWdyZWVtZW50LCBwcm92aWRlZCB0aGF0Ojwvc3Bhbj4KKzwvcD4KKworPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YSkKK2l0IGNvbXBsaWVzIHdpdGggdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoaXMgQWdyZWVtZW50OyBhbmQ8L3NwYW4+PC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5iKQoraXRzIGxpY2Vuc2UgYWdyZWVtZW50Ojwvc3Bhbj48L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmkpCitlZmZlY3RpdmVseSBkaXNjbGFpbXMgb24gYmVoYWxmIG9mIGFsbCBDb250cmlidXRvcnMgYWxsIHdhcnJhbnRpZXMgYW5kCitjb25kaXRpb25zLCBleHByZXNzIGFuZCBpbXBsaWVkLCBpbmNsdWRpbmcgd2FycmFudGllcyBvciBjb25kaXRpb25zIG9mIHRpdGxlCithbmQgbm9uLWluZnJpbmdlbWVudCwgYW5kIGltcGxpZWQgd2FycmFudGllcyBvciBjb25kaXRpb25zIG9mIG1lcmNoYW50YWJpbGl0eQorYW5kIGZpdG5lc3MgZm9yIGEgcGFydGljdWxhciBwdXJwb3NlOyA8L3NwYW4+PC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5paSkKK2VmZmVjdGl2ZWx5IGV4Y2x1ZGVzIG9uIGJlaGFsZiBvZiBhbGwgQ29udHJpYnV0b3JzIGFsbCBsaWFiaWxpdHkgZm9yIGRhbWFnZXMsCitpbmNsdWRpbmcgZGlyZWN0LCBpbmRpcmVjdCwgc3BlY2lhbCwgaW5jaWRlbnRhbCBhbmQgY29uc2VxdWVudGlhbCBkYW1hZ2VzLCBzdWNoCithcyBsb3N0IHByb2ZpdHM7IDwvc3Bhbj48L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmlpaSkKK3N0YXRlcyB0aGF0IGFueSBwcm92aXNpb25zIHdoaWNoIGRpZmZlciBmcm9tIHRoaXMgQWdyZWVtZW50IGFyZSBvZmZlcmVkIGJ5IHRoYXQKK0NvbnRyaWJ1dG9yIGFsb25lIGFuZCBub3QgYnkgYW55IG90aGVyIHBhcnR5OyBhbmQ8L3NwYW4+PC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5pdikKK3N0YXRlcyB0aGF0IHNvdXJjZSBjb2RlIGZvciB0aGUgUHJvZ3JhbSBpcyBhdmFpbGFibGUgZnJvbSBzdWNoIENvbnRyaWJ1dG9yLCBhbmQKK2luZm9ybXMgbGljZW5zZWVzIGhvdyB0byBvYnRhaW4gaXQgaW4gYSByZWFzb25hYmxlIG1hbm5lciBvbiBvciB0aHJvdWdoIGEKK21lZGl1bSBjdXN0b21hcmlseSB1c2VkIGZvciBzb2Z0d2FyZSBleGNoYW5nZS48c3BhbiBzdHlsZT0nY29sb3I6Ymx1ZSc+IDwvc3Bhbj48L3NwYW4+PC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+V2hlbiB0aGUgUHJvZ3JhbSBpcyBtYWRlIGF2YWlsYWJsZSBpbiBzb3VyY2UKK2NvZGUgZm9ybTo8L3NwYW4+IDwvcD4KKworPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YSkKK2l0IG11c3QgYmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhpcyBBZ3JlZW1lbnQ7IGFuZCA8L3NwYW4+PC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5iKSBhCitjb3B5IG9mIHRoaXMgQWdyZWVtZW50IG11c3QgYmUgaW5jbHVkZWQgd2l0aCBlYWNoIGNvcHkgb2YgdGhlIFByb2dyYW0uIDwvc3Bhbj48L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5Db250cmlidXRvcnMgbWF5IG5vdCByZW1vdmUgb3IgYWx0ZXIgYW55Citjb3B5cmlnaHQgbm90aWNlcyBjb250YWluZWQgd2l0aGluIHRoZSBQcm9ncmFtLiA8L3NwYW4+PC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+RWFjaCBDb250cmlidXRvciBtdXN0IGlkZW50aWZ5IGl0c2VsZiBhcyB0aGUKK29yaWdpbmF0b3Igb2YgaXRzIENvbnRyaWJ1dGlvbiwgaWYgYW55LCBpbiBhIG1hbm5lciB0aGF0IHJlYXNvbmFibHkgYWxsb3dzCitzdWJzZXF1ZW50IFJlY2lwaWVudHMgdG8gaWRlbnRpZnkgdGhlIG9yaWdpbmF0b3Igb2YgdGhlIENvbnRyaWJ1dGlvbi4gPC9zcGFuPjwvcD4KKworPHA+PGI+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPjQuIENPTU1FUkNJQUwgRElTVFJJQlVUSU9OPC9zcGFuPjwvYj4gPC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+Q29tbWVyY2lhbCBkaXN0cmlidXRvcnMgb2Ygc29mdHdhcmUgbWF5CithY2NlcHQgY2VydGFpbiByZXNwb25zaWJpbGl0aWVzIHdpdGggcmVzcGVjdCB0byBlbmQgdXNlcnMsIGJ1c2luZXNzIHBhcnRuZXJzCithbmQgdGhlIGxpa2UuIFdoaWxlIHRoaXMgbGljZW5zZSBpcyBpbnRlbmRlZCB0byBmYWNpbGl0YXRlIHRoZSBjb21tZXJjaWFsIHVzZQorb2YgdGhlIFByb2dyYW0sIHRoZSBDb250cmlidXRvciB3aG8gaW5jbHVkZXMgdGhlIFByb2dyYW0gaW4gYSBjb21tZXJjaWFsCitwcm9kdWN0IG9mZmVyaW5nIHNob3VsZCBkbyBzbyBpbiBhIG1hbm5lciB3aGljaCBkb2VzIG5vdCBjcmVhdGUgcG90ZW50aWFsCitsaWFiaWxpdHkgZm9yIG90aGVyIENvbnRyaWJ1dG9ycy4gVGhlcmVmb3JlLCBpZiBhIENvbnRyaWJ1dG9yIGluY2x1ZGVzIHRoZQorUHJvZ3JhbSBpbiBhIGNvbW1lcmNpYWwgcHJvZHVjdCBvZmZlcmluZywgc3VjaCBDb250cmlidXRvciAoJnF1b3Q7Q29tbWVyY2lhbAorQ29udHJpYnV0b3ImcXVvdDspIGhlcmVieSBhZ3JlZXMgdG8gZGVmZW5kIGFuZCBpbmRlbW5pZnkgZXZlcnkgb3RoZXIKK0NvbnRyaWJ1dG9yICgmcXVvdDtJbmRlbW5pZmllZCBDb250cmlidXRvciZxdW90OykgYWdhaW5zdCBhbnkgbG9zc2VzLCBkYW1hZ2VzIGFuZAorY29zdHMgKGNvbGxlY3RpdmVseSAmcXVvdDtMb3NzZXMmcXVvdDspIGFyaXNpbmcgZnJvbSBjbGFpbXMsIGxhd3N1aXRzIGFuZCBvdGhlcgorbGVnYWwgYWN0aW9ucyBicm91Z2h0IGJ5IGEgdGhpcmQgcGFydHkgYWdhaW5zdCB0aGUgSW5kZW1uaWZpZWQgQ29udHJpYnV0b3IgdG8KK3RoZSBleHRlbnQgY2F1c2VkIGJ5IHRoZSBhY3RzIG9yIG9taXNzaW9ucyBvZiBzdWNoIENvbW1lcmNpYWwgQ29udHJpYnV0b3IgaW4KK2Nvbm5lY3Rpb24gd2l0aCBpdHMgZGlzdHJpYnV0aW9uIG9mIHRoZSBQcm9ncmFtIGluIGEgY29tbWVyY2lhbCBwcm9kdWN0CitvZmZlcmluZy4gVGhlIG9ibGlnYXRpb25zIGluIHRoaXMgc2VjdGlvbiBkbyBub3QgYXBwbHkgdG8gYW55IGNsYWltcyBvciBMb3NzZXMKK3JlbGF0aW5nIHRvIGFueSBhY3R1YWwgb3IgYWxsZWdlZCBpbnRlbGxlY3R1YWwgcHJvcGVydHkgaW5mcmluZ2VtZW50LiBJbiBvcmRlcgordG8gcXVhbGlmeSwgYW4gSW5kZW1uaWZpZWQgQ29udHJpYnV0b3IgbXVzdDogYSkgcHJvbXB0bHkgbm90aWZ5IHRoZSBDb21tZXJjaWFsCitDb250cmlidXRvciBpbiB3cml0aW5nIG9mIHN1Y2ggY2xhaW0sIGFuZCBiKSBhbGxvdyB0aGUgQ29tbWVyY2lhbCBDb250cmlidXRvcgordG8gY29udHJvbCwgYW5kIGNvb3BlcmF0ZSB3aXRoIHRoZSBDb21tZXJjaWFsIENvbnRyaWJ1dG9yIGluLCB0aGUgZGVmZW5zZSBhbmQKK2FueSByZWxhdGVkIHNldHRsZW1lbnQgbmVnb3RpYXRpb25zLiBUaGUgSW5kZW1uaWZpZWQgQ29udHJpYnV0b3IgbWF5IHBhcnRpY2lwYXRlCitpbiBhbnkgc3VjaCBjbGFpbSBhdCBpdHMgb3duIGV4cGVuc2UuPC9zcGFuPiA8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5Gb3IgZXhhbXBsZSwgYSBDb250cmlidXRvciBtaWdodCBpbmNsdWRlIHRoZQorUHJvZ3JhbSBpbiBhIGNvbW1lcmNpYWwgcHJvZHVjdCBvZmZlcmluZywgUHJvZHVjdCBYLiBUaGF0IENvbnRyaWJ1dG9yIGlzIHRoZW4gYQorQ29tbWVyY2lhbCBDb250cmlidXRvci4gSWYgdGhhdCBDb21tZXJjaWFsIENvbnRyaWJ1dG9yIHRoZW4gbWFrZXMgcGVyZm9ybWFuY2UKK2NsYWltcywgb3Igb2ZmZXJzIHdhcnJhbnRpZXMgcmVsYXRlZCB0byBQcm9kdWN0IFgsIHRob3NlIHBlcmZvcm1hbmNlIGNsYWltcyBhbmQKK3dhcnJhbnRpZXMgYXJlIHN1Y2ggQ29tbWVyY2lhbCBDb250cmlidXRvcidzIHJlc3BvbnNpYmlsaXR5IGFsb25lLiBVbmRlciB0aGlzCitzZWN0aW9uLCB0aGUgQ29tbWVyY2lhbCBDb250cmlidXRvciB3b3VsZCBoYXZlIHRvIGRlZmVuZCBjbGFpbXMgYWdhaW5zdCB0aGUKK290aGVyIENvbnRyaWJ1dG9ycyByZWxhdGVkIHRvIHRob3NlIHBlcmZvcm1hbmNlIGNsYWltcyBhbmQgd2FycmFudGllcywgYW5kIGlmIGEKK2NvdXJ0IHJlcXVpcmVzIGFueSBvdGhlciBDb250cmlidXRvciB0byBwYXkgYW55IGRhbWFnZXMgYXMgYSByZXN1bHQsIHRoZQorQ29tbWVyY2lhbCBDb250cmlidXRvciBtdXN0IHBheSB0aG9zZSBkYW1hZ2VzLjwvc3Bhbj4gPC9wPgorCis8cD48Yj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+NS4gTk8gV0FSUkFOVFk8L3NwYW4+PC9iPiA8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5FWENFUFQgQVMgRVhQUkVTU0xZIFNFVCBGT1JUSCBJTiBUSElTCitBR1JFRU1FTlQsIFRIRSBQUk9HUkFNIElTIFBST1ZJREVEIE9OIEFOICZxdW90O0FTIElTJnF1b3Q7IEJBU0lTLCBXSVRIT1VUCitXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIEVJVEhFUiBFWFBSRVNTIE9SIElNUExJRUQgSU5DTFVESU5HLAorV0lUSE9VVCBMSU1JVEFUSU9OLCBBTlkgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIFRJVExFLCBOT04tSU5GUklOR0VNRU5ULAorTUVSQ0hBTlRBQklMSVRZIE9SIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBFYWNoIFJlY2lwaWVudCBpcyBzb2xlbHkKK3Jlc3BvbnNpYmxlIGZvciBkZXRlcm1pbmluZyB0aGUgYXBwcm9wcmlhdGVuZXNzIG9mIHVzaW5nIGFuZCBkaXN0cmlidXRpbmcgdGhlCitQcm9ncmFtIGFuZCBhc3N1bWVzIGFsbCByaXNrcyBhc3NvY2lhdGVkIHdpdGggaXRzIGV4ZXJjaXNlIG9mIHJpZ2h0cyB1bmRlciB0aGlzCitBZ3JlZW1lbnQgLCBpbmNsdWRpbmcgYnV0IG5vdCBsaW1pdGVkIHRvIHRoZSByaXNrcyBhbmQgY29zdHMgb2YgcHJvZ3JhbSBlcnJvcnMsCitjb21wbGlhbmNlIHdpdGggYXBwbGljYWJsZSBsYXdzLCBkYW1hZ2UgdG8gb3IgbG9zcyBvZiBkYXRhLCBwcm9ncmFtcyBvcgorZXF1aXBtZW50LCBhbmQgdW5hdmFpbGFiaWxpdHkgb3IgaW50ZXJydXB0aW9uIG9mIG9wZXJhdGlvbnMuIDwvc3Bhbj48L3A+CisKKzxwPjxiPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz42LiBESVNDTEFJTUVSIE9GIExJQUJJTElUWTwvc3Bhbj48L2I+IDwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkVYQ0VQVCBBUyBFWFBSRVNTTFkgU0VUIEZPUlRIIElOIFRISVMKK0FHUkVFTUVOVCwgTkVJVEhFUiBSRUNJUElFTlQgTk9SIEFOWSBDT05UUklCVVRPUlMgU0hBTEwgSEFWRSBBTlkgTElBQklMSVRZIEZPUgorQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisoSU5DTFVESU5HIFdJVEhPVVQgTElNSVRBVElPTiBMT1NUIFBST0ZJVFMpLCBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcKK05FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT1IgRElTVFJJQlVUSU9OIE9GCitUSEUgUFJPR1JBTSBPUiBUSEUgRVhFUkNJU0UgT0YgQU5ZIFJJR0hUUyBHUkFOVEVEIEhFUkVVTkRFUiwgRVZFTiBJRiBBRFZJU0VEIE9GCitUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLjwvc3Bhbj4gPC9wPgorCis8cD48Yj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+Ny4gR0VORVJBTDwvc3Bhbj48L2I+IDwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPklmIGFueSBwcm92aXNpb24gb2YgdGhpcyBBZ3JlZW1lbnQgaXMgaW52YWxpZAorb3IgdW5lbmZvcmNlYWJsZSB1bmRlciBhcHBsaWNhYmxlIGxhdywgaXQgc2hhbGwgbm90IGFmZmVjdCB0aGUgdmFsaWRpdHkgb3IKK2VuZm9yY2VhYmlsaXR5IG9mIHRoZSByZW1haW5kZXIgb2YgdGhlIHRlcm1zIG9mIHRoaXMgQWdyZWVtZW50LCBhbmQgd2l0aG91dAorZnVydGhlciBhY3Rpb24gYnkgdGhlIHBhcnRpZXMgaGVyZXRvLCBzdWNoIHByb3Zpc2lvbiBzaGFsbCBiZSByZWZvcm1lZCB0byB0aGUKK21pbmltdW0gZXh0ZW50IG5lY2Vzc2FyeSB0byBtYWtlIHN1Y2ggcHJvdmlzaW9uIHZhbGlkIGFuZCBlbmZvcmNlYWJsZS48L3NwYW4+IDwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPklmIFJlY2lwaWVudCBpbnN0aXR1dGVzIHBhdGVudCBsaXRpZ2F0aW9uCithZ2FpbnN0IGFueSBlbnRpdHkgKGluY2x1ZGluZyBhIGNyb3NzLWNsYWltIG9yIGNvdW50ZXJjbGFpbSBpbiBhIGxhd3N1aXQpCithbGxlZ2luZyB0aGF0IHRoZSBQcm9ncmFtIGl0c2VsZiAoZXhjbHVkaW5nIGNvbWJpbmF0aW9ucyBvZiB0aGUgUHJvZ3JhbSB3aXRoCitvdGhlciBzb2Z0d2FyZSBvciBoYXJkd2FyZSkgaW5mcmluZ2VzIHN1Y2ggUmVjaXBpZW50J3MgcGF0ZW50KHMpLCB0aGVuIHN1Y2gKK1JlY2lwaWVudCdzIHJpZ2h0cyBncmFudGVkIHVuZGVyIFNlY3Rpb24gMihiKSBzaGFsbCB0ZXJtaW5hdGUgYXMgb2YgdGhlIGRhdGUKK3N1Y2ggbGl0aWdhdGlvbiBpcyBmaWxlZC4gPC9zcGFuPjwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkFsbCBSZWNpcGllbnQncyByaWdodHMgdW5kZXIgdGhpcyBBZ3JlZW1lbnQKK3NoYWxsIHRlcm1pbmF0ZSBpZiBpdCBmYWlscyB0byBjb21wbHkgd2l0aCBhbnkgb2YgdGhlIG1hdGVyaWFsIHRlcm1zIG9yCitjb25kaXRpb25zIG9mIHRoaXMgQWdyZWVtZW50IGFuZCBkb2VzIG5vdCBjdXJlIHN1Y2ggZmFpbHVyZSBpbiBhIHJlYXNvbmFibGUKK3BlcmlvZCBvZiB0aW1lIGFmdGVyIGJlY29taW5nIGF3YXJlIG9mIHN1Y2ggbm9uY29tcGxpYW5jZS4gSWYgYWxsIFJlY2lwaWVudCdzCityaWdodHMgdW5kZXIgdGhpcyBBZ3JlZW1lbnQgdGVybWluYXRlLCBSZWNpcGllbnQgYWdyZWVzIHRvIGNlYXNlIHVzZSBhbmQKK2Rpc3RyaWJ1dGlvbiBvZiB0aGUgUHJvZ3JhbSBhcyBzb29uIGFzIHJlYXNvbmFibHkgcHJhY3RpY2FibGUuIEhvd2V2ZXIsCitSZWNpcGllbnQncyBvYmxpZ2F0aW9ucyB1bmRlciB0aGlzIEFncmVlbWVudCBhbmQgYW55IGxpY2Vuc2VzIGdyYW50ZWQgYnkKK1JlY2lwaWVudCByZWxhdGluZyB0byB0aGUgUHJvZ3JhbSBzaGFsbCBjb250aW51ZSBhbmQgc3Vydml2ZS4gPC9zcGFuPjwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkV2ZXJ5b25lIGlzIHBlcm1pdHRlZCB0byBjb3B5IGFuZCBkaXN0cmlidXRlCitjb3BpZXMgb2YgdGhpcyBBZ3JlZW1lbnQsIGJ1dCBpbiBvcmRlciB0byBhdm9pZCBpbmNvbnNpc3RlbmN5IHRoZSBBZ3JlZW1lbnQgaXMKK2NvcHlyaWdodGVkIGFuZCBtYXkgb25seSBiZSBtb2RpZmllZCBpbiB0aGUgZm9sbG93aW5nIG1hbm5lci4gVGhlIEFncmVlbWVudAorU3Rld2FyZCByZXNlcnZlcyB0aGUgcmlnaHQgdG8gcHVibGlzaCBuZXcgdmVyc2lvbnMgKGluY2x1ZGluZyByZXZpc2lvbnMpIG9mCit0aGlzIEFncmVlbWVudCBmcm9tIHRpbWUgdG8gdGltZS4gTm8gb25lIG90aGVyIHRoYW4gdGhlIEFncmVlbWVudCBTdGV3YXJkIGhhcwordGhlIHJpZ2h0IHRvIG1vZGlmeSB0aGlzIEFncmVlbWVudC4gVGhlIEVjbGlwc2UgRm91bmRhdGlvbiBpcyB0aGUgaW5pdGlhbAorQWdyZWVtZW50IFN0ZXdhcmQuIFRoZSBFY2xpcHNlIEZvdW5kYXRpb24gbWF5IGFzc2lnbiB0aGUgcmVzcG9uc2liaWxpdHkgdG8KK3NlcnZlIGFzIHRoZSBBZ3JlZW1lbnQgU3Rld2FyZCB0byBhIHN1aXRhYmxlIHNlcGFyYXRlIGVudGl0eS4gRWFjaCBuZXcgdmVyc2lvbgorb2YgdGhlIEFncmVlbWVudCB3aWxsIGJlIGdpdmVuIGEgZGlzdGluZ3Vpc2hpbmcgdmVyc2lvbiBudW1iZXIuIFRoZSBQcm9ncmFtCisoaW5jbHVkaW5nIENvbnRyaWJ1dGlvbnMpIG1heSBhbHdheXMgYmUgZGlzdHJpYnV0ZWQgc3ViamVjdCB0byB0aGUgdmVyc2lvbiBvZgordGhlIEFncmVlbWVudCB1bmRlciB3aGljaCBpdCB3YXMgcmVjZWl2ZWQuIEluIGFkZGl0aW9uLCBhZnRlciBhIG5ldyB2ZXJzaW9uIG9mCit0aGUgQWdyZWVtZW50IGlzIHB1Ymxpc2hlZCwgQ29udHJpYnV0b3IgbWF5IGVsZWN0IHRvIGRpc3RyaWJ1dGUgdGhlIFByb2dyYW0KKyhpbmNsdWRpbmcgaXRzIENvbnRyaWJ1dGlvbnMpIHVuZGVyIHRoZSBuZXcgdmVyc2lvbi4gRXhjZXB0IGFzIGV4cHJlc3NseSBzdGF0ZWQKK2luIFNlY3Rpb25zIDIoYSkgYW5kIDIoYikgYWJvdmUsIFJlY2lwaWVudCByZWNlaXZlcyBubyByaWdodHMgb3IgbGljZW5zZXMgdG8KK3RoZSBpbnRlbGxlY3R1YWwgcHJvcGVydHkgb2YgYW55IENvbnRyaWJ1dG9yIHVuZGVyIHRoaXMgQWdyZWVtZW50LCB3aGV0aGVyCitleHByZXNzbHksIGJ5IGltcGxpY2F0aW9uLCBlc3RvcHBlbCBvciBvdGhlcndpc2UuIEFsbCByaWdodHMgaW4gdGhlIFByb2dyYW0gbm90CitleHByZXNzbHkgZ3JhbnRlZCB1bmRlciB0aGlzIEFncmVlbWVudCBhcmUgcmVzZXJ2ZWQuPC9zcGFuPiA8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5UaGlzIEFncmVlbWVudCBpcyBnb3Zlcm5lZCBieSB0aGUgbGF3cyBvZiB0aGUKK1N0YXRlIG9mIE5ldyBZb3JrIGFuZCB0aGUgaW50ZWxsZWN0dWFsIHByb3BlcnR5IGxhd3Mgb2YgdGhlIFVuaXRlZCBTdGF0ZXMgb2YKK0FtZXJpY2EuIE5vIHBhcnR5IHRvIHRoaXMgQWdyZWVtZW50IHdpbGwgYnJpbmcgYSBsZWdhbCBhY3Rpb24gdW5kZXIgdGhpcworQWdyZWVtZW50IG1vcmUgdGhhbiBvbmUgeWVhciBhZnRlciB0aGUgY2F1c2Ugb2YgYWN0aW9uIGFyb3NlLiBFYWNoIHBhcnR5IHdhaXZlcworaXRzIHJpZ2h0cyB0byBhIGp1cnkgdHJpYWwgaW4gYW55IHJlc3VsdGluZyBsaXRpZ2F0aW9uLjwvc3Bhbj4gPC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWw+PCFbaWYgIXN1cHBvcnRFbXB0eVBhcmFzXT4mbmJzcDs8IVtlbmRpZl0+PG86cD48L286cD48L3A+CisKKzwvZGl2PgorCis8L2JvZHk+CisKKzwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS5zdGVtLnByb2R1Y3QuZmVhdHVyZS9mZWF0dXJlLnByb3BlcnRpZXMgYi9mZWF0dXJlcy9vcmcuZWNsaXBzZS5zdGVtLnByb2R1Y3QuZmVhdHVyZS9mZWF0dXJlLnByb3BlcnRpZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2RhODVhMQotLS0gL2Rldi9udWxsCisrKyBiL2ZlYXR1cmVzL29yZy5lY2xpcHNlLnN0ZW0ucHJvZHVjdC5mZWF0dXJlL2ZlYXR1cmUucHJvcGVydGllcwpAQCAtMCwwICsxLDE3NiBAQAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBDb3B5cmlnaHQgKGMpIDIwMTEgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisjIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisjIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisjIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisjIAorIyBDb250cmlidXRvcnM6CisjICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgZmVhdHVyZS5wcm9wZXJ0aWVzCisjIGNvbnRhaW5zIGV4dGVybmFsaXplZCBzdHJpbmdzIGZvciBmZWF0dXJlLnhtbAorIyAiJWZvbyIgaW4gZmVhdHVyZS54bWwgY29ycmVzcG9uZHMgdG8gdGhlIGtleSAiZm9vIiBpbiB0aGlzIGZpbGUKKyMgamF2YS5pby5Qcm9wZXJ0aWVzIGZpbGUgKElTTyA4ODU5LTEgd2l0aCAiXCIgZXNjYXBlcykKKyMgVGhpcyBmaWxlIHNob3VsZCBiZSB0cmFuc2xhdGVkLgorCisjICJmZWF0dXJlTmFtZSIgcHJvcGVydHkgLSBuYW1lIG9mIHRoZSBmZWF0dXJlCitmZWF0dXJlTmFtZT1TVEVNIC0gU3BhdGlvdGVtcG9yYWwgRXBpZGVtaW9sb2dpY2FsIE1vZGVsZXIKKworIyAicHJvdmlkZXJOYW1lIiBwcm9wZXJ0eSAtIG5hbWUgb2YgdGhlIGNvbXBhbnkgdGhhdCBwcm92aWRlcyB0aGUgZmVhdHVyZQorcHJvdmlkZXJOYW1lPUVjbGlwc2Uub3JnCisKKyMgInVwZGF0ZVNpdGVOYW1lIiBwcm9wZXJ0eSAtIGxhYmVsIGZvciB0aGUgdXBkYXRlIHNpdGUKK3VwZGF0ZVNpdGVOYW1lPVNURU0gVXBkYXRlcworCisjICJzZWNvbmRhcnlTaXRlTmFtZSIgcHJvcGVydHkgLSBsYWJlbCBmb3IgdGhlIHNlY29uZGFyeSB1cGRhdGUgc2l0ZQorI3NlY29uZGFyeVVwZGF0ZVNpdGVOYW1lPVNURU0gVXBkYXRlcworCisjICJkZXNjcmlwdGlvbiIgcHJvcGVydHkgLSBkZXNjcmlwdGlvbiBvZiB0aGUgZmVhdHVyZQorZGVzY3JpcHRpb249XAorU1RFTSAtIFNwYXRpb3RlbXBvcmFsIEVwaWRlbWlvbG9naWNhbCBNb2RlbGVyLiBUaGUgU1RFTSB0b29sIFwKK2lzIGRlc2lnbmVkIHRvIGhlbHAgc2NpZW50aXN0cyBhbmQgcHVibGljIGhlYWx0aCBvZmZpY2lhbHMgXAorY3JlYXRlIGFuZCB1c2Ugc3BhdGlhbCBhbmQgdGVtcG9yYWwgbW9kZWxzIG9mIGVtZXJnaW5nIGluZmVjdGlvdXMgZGlzZWFzZXMuCisKKyMgImNvcHlyaWdodCIgcHJvcGVydHkgLSB0ZXh0IG9mIHRoZSAiRmVhdHVyZSBVcGRhdGUgQ29weXJpZ2h0IgorY29weXJpZ2h0PVwKK0NvcHlyaWdodCAoYykgMjAwNy0yMDExIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLlxuXAorQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFsc1xuXAorYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wXG5cCit3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdFxuXAoraHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWxcblwKK1xuXAorQ29udHJpYnV0b3JzOlxuXAorICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvblxuCisjIyMjIyMjIyMjIyMjIyMjIGVuZCBvZiBjb3B5cmlnaHQgcHJvcGVydHkgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyMgImxpY2Vuc2VVUkwiIHByb3BlcnR5IC0gVVJMIG9mIHRoZSAiRmVhdHVyZSBMaWNlbnNlIgorIyBkbyBub3QgdHJhbnNsYXRlIHZhbHVlIC0ganVzdCBjaGFuZ2UgdG8gcG9pbnQgdG8gYSBsb2NhbGUtc3BlY2lmaWMgSFRNTCBwYWdlCitsaWNlbnNlVVJMPWxpY2Vuc2UuaHRtbAorCisjICJsaWNlbnNlIiBwcm9wZXJ0eSAtIHRleHQgb2YgdGhlICJGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlIgorIyBzaG91bGQgYmUgcGxhaW4gdGV4dCB2ZXJzaW9uIG9mIGxpY2Vuc2UgYWdyZWVtZW50IHBvaW50ZWQgdG8gYmUgImxpY2Vuc2VVUkwiCitsaWNlbnNlPVwKK0VjbGlwc2UgRm91bmRhdGlvbiBTb2Z0d2FyZSBVc2VyIEFncmVlbWVudFxuXAorQXByaWwgMTQsIDIwMTBcblwKK1xuXAorVXNhZ2UgT2YgQ29udGVudFxuXAorXG5cCitUSEUgRUNMSVBTRSBGT1VOREFUSU9OIE1BS0VTIEFWQUlMQUJMRSBTT0ZUV0FSRSwgRE9DVU1FTlRBVElPTiwgSU5GT1JNQVRJT04gQU5EL09SXG5cCitPVEhFUiBNQVRFUklBTFMgRk9SIE9QRU4gU09VUkNFIFBST0pFQ1RTIChDT0xMRUNUSVZFTFkgIkNPTlRFTlQiKS5cblwKK1VTRSBPRiBUSEUgQ09OVEVOVCBJUyBHT1ZFUk5FRCBCWSBUSEUgVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgVEhJU1xuXAorQUdSRUVNRU5UIEFORC9PUiBUSEUgVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgTElDRU5TRSBBR1JFRU1FTlRTIE9SXG5cCitOT1RJQ0VTIElORElDQVRFRCBPUiBSRUZFUkVOQ0VEIEJFTE9XLiAgQlkgVVNJTkcgVEhFIENPTlRFTlQsIFlPVVxuXAorQUdSRUUgVEhBVCBZT1VSIFVTRSBPRiBUSEUgQ09OVEVOVCBJUyBHT1ZFUk5FRCBCWSBUSElTIEFHUkVFTUVOVFxuXAorQU5EL09SIFRIRSBURVJNUyBBTkQgQ09ORElUSU9OUyBPRiBBTlkgQVBQTElDQUJMRSBMSUNFTlNFIEFHUkVFTUVOVFNcblwKK09SIE5PVElDRVMgSU5ESUNBVEVEIE9SIFJFRkVSRU5DRUQgQkVMT1cuICBJRiBZT1UgRE8gTk9UIEFHUkVFIFRPIFRIRVxuXAorVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgVEhJUyBBR1JFRU1FTlQgQU5EIFRIRSBURVJNUyBBTkQgQ09ORElUSU9OU1xuXAorT0YgQU5ZIEFQUExJQ0FCTEUgTElDRU5TRSBBR1JFRU1FTlRTIE9SIE5PVElDRVMgSU5ESUNBVEVEIE9SIFJFRkVSRU5DRURcblwKK0JFTE9XLCBUSEVOIFlPVSBNQVkgTk9UIFVTRSBUSEUgQ09OVEVOVC5cblwKK1xuXAorQXBwbGljYWJsZSBMaWNlbnNlc1xuXAorXG5cCitVbmxlc3Mgb3RoZXJ3aXNlIGluZGljYXRlZCwgYWxsIENvbnRlbnQgbWFkZSBhdmFpbGFibGUgYnkgdGhlXG5cCitFY2xpcHNlIEZvdW5kYXRpb24gaXMgcHJvdmlkZWQgdG8geW91IHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZlxuXAordGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjAgKCJFUEwiKS4gQSBjb3B5IG9mIHRoZSBFUEwgaXNcblwKK3Byb3ZpZGVkIHdpdGggdGhpcyBDb250ZW50IGFuZCBpcyBhbHNvIGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbC5cblwKK0ZvciBwdXJwb3NlcyBvZiB0aGUgRVBMLCAiUHJvZ3JhbSIgd2lsbCBtZWFuIHRoZSBDb250ZW50LlxuXAorXG5cCitDb250ZW50IGluY2x1ZGVzLCBidXQgaXMgbm90IGxpbWl0ZWQgdG8sIHNvdXJjZSBjb2RlLCBvYmplY3QgY29kZSxcblwKK2RvY3VtZW50YXRpb24gYW5kIG90aGVyIGZpbGVzIG1haW50YWluZWQgaW4gdGhlIEVjbGlwc2UgRm91bmRhdGlvbiBzb3VyY2UgY29kZVxuXAorcmVwb3NpdG9yeSAoIlJlcG9zaXRvcnkiKSBpbiBzb2Z0d2FyZSBtb2R1bGVzICgiTW9kdWxlcyIpIGFuZCBtYWRlIGF2YWlsYWJsZVxuXAorYXMgZG93bmxvYWRhYmxlIGFyY2hpdmVzICgiRG93bmxvYWRzIikuXG5cCitcblwKKyAgICAgICAtIENvbnRlbnQgbWF5IGJlIHN0cnVjdHVyZWQgYW5kIHBhY2thZ2VkIGludG8gbW9kdWxlcyB0byBmYWNpbGl0YXRlIGRlbGl2ZXJpbmcsXG5cCisgICAgICAgICBleHRlbmRpbmcsIGFuZCB1cGdyYWRpbmcgdGhlIENvbnRlbnQuIFR5cGljYWwgbW9kdWxlcyBtYXkgaW5jbHVkZSBwbHVnLWlucyAoIlBsdWctaW5zIiksXG5cCisgICAgICAgICBwbHVnLWluIGZyYWdtZW50cyAoIkZyYWdtZW50cyIpLCBhbmQgZmVhdHVyZXMgKCJGZWF0dXJlcyIpLlxuXAorICAgICAgIC0gRWFjaCBQbHVnLWluIG9yIEZyYWdtZW50IG1heSBiZSBwYWNrYWdlZCBhcyBhIHN1Yi1kaXJlY3Rvcnkgb3IgSkFSIChKYXZhKFRNKSBBUmNoaXZlKVxuXAorICAgICAgICAgaW4gYSBkaXJlY3RvcnkgbmFtZWQgInBsdWdpbnMiLlxuXAorICAgICAgIC0gQSBGZWF0dXJlIGlzIGEgYnVuZGxlIG9mIG9uZSBvciBtb3JlIFBsdWctaW5zIGFuZC9vciBGcmFnbWVudHMgYW5kIGFzc29jaWF0ZWQgbWF0ZXJpYWwuXG5cCisgICAgICAgICBFYWNoIEZlYXR1cmUgbWF5IGJlIHBhY2thZ2VkIGFzIGEgc3ViLWRpcmVjdG9yeSBpbiBhIGRpcmVjdG9yeSBuYW1lZCAiZmVhdHVyZXMiLlxuXAorICAgICAgICAgV2l0aGluIGEgRmVhdHVyZSwgZmlsZXMgbmFtZWQgImZlYXR1cmUueG1sIiBtYXkgY29udGFpbiBhIGxpc3Qgb2YgdGhlIG5hbWVzIGFuZCB2ZXJzaW9uXG5cCisgICAgICAgICBudW1iZXJzIG9mIHRoZSBQbHVnLWlucyBhbmQvb3IgRnJhZ21lbnRzIGFzc29jaWF0ZWQgd2l0aCB0aGF0IEZlYXR1cmUuXG5cCisgICAgICAgLSBGZWF0dXJlcyBtYXkgYWxzbyBpbmNsdWRlIG90aGVyIEZlYXR1cmVzICgiSW5jbHVkZWQgRmVhdHVyZXMiKS4gV2l0aGluIGEgRmVhdHVyZSwgZmlsZXNcblwKKyAgICAgICAgIG5hbWVkICJmZWF0dXJlLnhtbCIgbWF5IGNvbnRhaW4gYSBsaXN0IG9mIHRoZSBuYW1lcyBhbmQgdmVyc2lvbiBudW1iZXJzIG9mIEluY2x1ZGVkIEZlYXR1cmVzLlxuXAorXG5cCitUaGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgZ292ZXJuaW5nIFBsdWctaW5zIGFuZCBGcmFnbWVudHMgc2hvdWxkIGJlXG5cCitjb250YWluZWQgaW4gZmlsZXMgbmFtZWQgImFib3V0Lmh0bWwiICgiQWJvdXRzIikuIFRoZSB0ZXJtcyBhbmRcblwKK2NvbmRpdGlvbnMgZ292ZXJuaW5nIEZlYXR1cmVzIGFuZCBJbmNsdWRlZCBGZWF0dXJlcyBzaG91bGQgYmUgY29udGFpbmVkXG5cCitpbiBmaWxlcyBuYW1lZCAibGljZW5zZS5odG1sIiAoIkZlYXR1cmUgTGljZW5zZXMiKS4gQWJvdXRzIGFuZCBGZWF0dXJlXG5cCitMaWNlbnNlcyBtYXkgYmUgbG9jYXRlZCBpbiBhbnkgZGlyZWN0b3J5IG9mIGEgRG93bmxvYWQgb3IgTW9kdWxlXG5cCitpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0byB0aGUgZm9sbG93aW5nIGxvY2F0aW9uczpcblwKK1xuXAorICAgICAgIC0gVGhlIHRvcC1sZXZlbCAocm9vdCkgZGlyZWN0b3J5XG5cCisgICAgICAgLSBQbHVnLWluIGFuZCBGcmFnbWVudCBkaXJlY3Rvcmllc1xuXAorICAgICAgIC0gSW5zaWRlIFBsdWctaW5zIGFuZCBGcmFnbWVudHMgcGFja2FnZWQgYXMgSkFSc1xuXAorICAgICAgIC0gU3ViLWRpcmVjdG9yaWVzIG9mIHRoZSBkaXJlY3RvcnkgbmFtZWQgInNyYyIgb2YgY2VydGFpbiBQbHVnLWluc1xuXAorICAgICAgIC0gRmVhdHVyZSBkaXJlY3Rvcmllc1xuXAorXG5cCitOb3RlOiBpZiBhIEZlYXR1cmUgbWFkZSBhdmFpbGFibGUgYnkgdGhlIEVjbGlwc2UgRm91bmRhdGlvbiBpcyBpbnN0YWxsZWQgdXNpbmcgdGhlXG5cCitQcm92aXNpb25pbmcgVGVjaG5vbG9neSAoYXMgZGVmaW5lZCBiZWxvdyksIHlvdSBtdXN0IGFncmVlIHRvIGEgbGljZW5zZSAoIkZlYXR1cmUgXG5cCitVcGRhdGUgTGljZW5zZSIpIGR1cmluZyB0aGUgaW5zdGFsbGF0aW9uIHByb2Nlc3MuIElmIHRoZSBGZWF0dXJlIGNvbnRhaW5zXG5cCitJbmNsdWRlZCBGZWF0dXJlcywgdGhlIEZlYXR1cmUgVXBkYXRlIExpY2Vuc2Ugc2hvdWxkIGVpdGhlciBwcm92aWRlIHlvdVxuXAord2l0aCB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgZ292ZXJuaW5nIHRoZSBJbmNsdWRlZCBGZWF0dXJlcyBvciBpbmZvcm1cblwKK3lvdSB3aGVyZSB5b3UgY2FuIGxvY2F0ZSB0aGVtLiBGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlcyBtYXkgYmUgZm91bmQgaW5cblwKK3RoZSAibGljZW5zZSIgcHJvcGVydHkgb2YgZmlsZXMgbmFtZWQgImZlYXR1cmUucHJvcGVydGllcyIgZm91bmQgd2l0aGluIGEgRmVhdHVyZS5cblwKK1N1Y2ggQWJvdXRzLCBGZWF0dXJlIExpY2Vuc2VzLCBhbmQgRmVhdHVyZSBVcGRhdGUgTGljZW5zZXMgY29udGFpbiB0aGVcblwKK3Rlcm1zIGFuZCBjb25kaXRpb25zIChvciByZWZlcmVuY2VzIHRvIHN1Y2ggdGVybXMgYW5kIGNvbmRpdGlvbnMpIHRoYXRcblwKK2dvdmVybiB5b3VyIHVzZSBvZiB0aGUgYXNzb2NpYXRlZCBDb250ZW50IGluIHRoYXQgZGlyZWN0b3J5LlxuXAorXG5cCitUSEUgQUJPVVRTLCBGRUFUVVJFIExJQ0VOU0VTLCBBTkQgRkVBVFVSRSBVUERBVEUgTElDRU5TRVMgTUFZIFJFRkVSXG5cCitUTyBUSEUgRVBMIE9SIE9USEVSIExJQ0VOU0UgQUdSRUVNRU5UUywgTk9USUNFUyBPUiBURVJNUyBBTkQgQ09ORElUSU9OUy5cblwKK1NPTUUgT0YgVEhFU0UgT1RIRVIgTElDRU5TRSBBR1JFRU1FTlRTIE1BWSBJTkNMVURFIChCVVQgQVJFIE5PVCBMSU1JVEVEIFRPKTpcblwKK1xuXAorICAgICAgIC0gQ29tbW9uIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4wIChhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9jcGwtdjEwLmh0bWwpXG5cCisgICAgICAgLSBBcGFjaGUgU29mdHdhcmUgTGljZW5zZSAxLjEgKGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRSlcblwKKyAgICAgICAtIEFwYWNoZSBTb2Z0d2FyZSBMaWNlbnNlIDIuMCAoYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMClcblwKKyAgICAgICAtIE1ldHJvIExpbmsgUHVibGljIExpY2Vuc2UgMS4wMCAoYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cub3Blbmdyb3VwLm9yZy9vcGVubW90aWYvc3VwcG9ydGVycy9tZXRyb2xpbmsvbGljZW5zZS5odG1sKVxuXAorICAgICAgIC0gTW96aWxsYSBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMSAoYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cubW96aWxsYS5vcmcvTVBML01QTC0xLjEuaHRtbClcblwKK1xuXAorSVQgSVMgWU9VUiBPQkxJR0FUSU9OIFRPIFJFQUQgQU5EIEFDQ0VQVCBBTEwgU1VDSCBURVJNUyBBTkQgQ09ORElUSU9OUyBQUklPUlxuXAorVE8gVVNFIE9GIFRIRSBDT05URU5ULiBJZiBubyBBYm91dCwgRmVhdHVyZSBMaWNlbnNlLCBvciBGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlXG5cCitpcyBwcm92aWRlZCwgcGxlYXNlIGNvbnRhY3QgdGhlIEVjbGlwc2UgRm91bmRhdGlvbiB0byBkZXRlcm1pbmUgd2hhdCB0ZXJtcyBhbmQgY29uZGl0aW9uc1xuXAorZ292ZXJuIHRoYXQgcGFydGljdWxhciBDb250ZW50LlxuXAorXG5cCitcblxVc2Ugb2YgUHJvdmlzaW9uaW5nIFRlY2hub2xvZ3lcblwKK1xuXAorVGhlIEVjbGlwc2UgRm91bmRhdGlvbiBtYWtlcyBhdmFpbGFibGUgcHJvdmlzaW9uaW5nIHNvZnR3YXJlLCBleGFtcGxlcyBvZiB3aGljaCBpbmNsdWRlLFxuXAorYnV0IGFyZSBub3QgbGltaXRlZCB0bywgcDIgYW5kIHRoZSBFY2xpcHNlIFVwZGF0ZSBNYW5hZ2VyICgiUHJvdmlzaW9uaW5nIFRlY2hub2xvZ3kiKSBmb3JcblwKK3RoZSBwdXJwb3NlIG9mIGFsbG93aW5nIHVzZXJzIHRvIGluc3RhbGwgc29mdHdhcmUsIGRvY3VtZW50YXRpb24sIGluZm9ybWF0aW9uIGFuZC9vclxuXAorb3RoZXIgbWF0ZXJpYWxzIChjb2xsZWN0aXZlbHkgIkluc3RhbGxhYmxlIFNvZnR3YXJlIikuIFRoaXMgY2FwYWJpbGl0eSBpcyBwcm92aWRlZCB3aXRoXG5cCit0aGUgaW50ZW50IG9mIGFsbG93aW5nIHN1Y2ggdXNlcnMgdG8gaW5zdGFsbCwgZXh0ZW5kIGFuZCB1cGRhdGUgRWNsaXBzZS1iYXNlZCBwcm9kdWN0cy5cblwKK0luZm9ybWF0aW9uIGFib3V0IHBhY2thZ2luZyBJbnN0YWxsYWJsZSBTb2Z0d2FyZSBpcyBhdmFpbGFibGUgYXRcblwKK2h0dHA6Ly9lY2xpcHNlLm9yZy9lcXVpbm94L3AyL3JlcG9zaXRvcnlfcGFja2FnaW5nLmh0bWwgKCJTcGVjaWZpY2F0aW9uIikuXG5cCitcblwKK1lvdSBtYXkgdXNlIFByb3Zpc2lvbmluZyBUZWNobm9sb2d5IHRvIGFsbG93IG90aGVyIHBhcnRpZXMgdG8gaW5zdGFsbCBJbnN0YWxsYWJsZSBTb2Z0d2FyZS5cblwKK1lvdSBzaGFsbCBiZSByZXNwb25zaWJsZSBmb3IgZW5hYmxpbmcgdGhlIGFwcGxpY2FibGUgbGljZW5zZSBhZ3JlZW1lbnRzIHJlbGF0aW5nIHRvIHRoZVxuXAorSW5zdGFsbGFibGUgU29mdHdhcmUgdG8gYmUgcHJlc2VudGVkIHRvLCBhbmQgYWNjZXB0ZWQgYnksIHRoZSB1c2VycyBvZiB0aGUgUHJvdmlzaW9uaW5nIFRlY2hub2xvZ3lcblwKK2luIGFjY29yZGFuY2Ugd2l0aCB0aGUgU3BlY2lmaWNhdGlvbi4gQnkgdXNpbmcgUHJvdmlzaW9uaW5nIFRlY2hub2xvZ3kgaW4gc3VjaCBhIG1hbm5lciBhbmRcblwKK21ha2luZyBpdCBhdmFpbGFibGUgaW4gYWNjb3JkYW5jZSB3aXRoIHRoZSBTcGVjaWZpY2F0aW9uLCB5b3UgZnVydGhlciBhY2tub3dsZWRnZSB5b3VyXG5cCithZ3JlZW1lbnQgdG8sIGFuZCB0aGUgYWNxdWlzaXRpb24gb2YgYWxsIG5lY2Vzc2FyeSByaWdodHMgdG8gcGVybWl0IHRoZSBmb2xsb3dpbmc6XG5cCitcblwKKyAgICAgICAxLiBBIHNlcmllcyBvZiBhY3Rpb25zIG1heSBvY2N1ciAoIlByb3Zpc2lvbmluZyBQcm9jZXNzIikgaW4gd2hpY2ggYSB1c2VyIG1heSBleGVjdXRlXG5cCisgICAgICAgICAgdGhlIFByb3Zpc2lvbmluZyBUZWNobm9sb2d5IG9uIGEgbWFjaGluZSAoIlRhcmdldCBNYWNoaW5lIikgd2l0aCB0aGUgaW50ZW50IG9mIGluc3RhbGxpbmcsXG5cCisgICAgICAgICAgZXh0ZW5kaW5nIG9yIHVwZGF0aW5nIHRoZSBmdW5jdGlvbmFsaXR5IG9mIGFuIEVjbGlwc2UtYmFzZWQgcHJvZHVjdC5cblwKKyAgICAgICAyLiBEdXJpbmcgdGhlIFByb3Zpc2lvbmluZyBQcm9jZXNzLCB0aGUgUHJvdmlzaW9uaW5nIFRlY2hub2xvZ3kgbWF5IGNhdXNlIHRoaXJkIHBhcnR5XG5cCisgICAgICAgICAgSW5zdGFsbGFibGUgU29mdHdhcmUgb3IgYSBwb3J0aW9uIHRoZXJlb2YgdG8gYmUgYWNjZXNzZWQgYW5kIGNvcGllZCB0byB0aGUgVGFyZ2V0IE1hY2hpbmUuXG5cCisgICAgICAgMy4gUHVyc3VhbnQgdG8gdGhlIFNwZWNpZmljYXRpb24sIHlvdSB3aWxsIHByb3ZpZGUgdG8gdGhlIHVzZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIHRoYXRcblwKKyAgICAgICAgICBnb3Zlcm4gdGhlIHVzZSBvZiB0aGUgSW5zdGFsbGFibGUgU29mdHdhcmUgKCJJbnN0YWxsYWJsZSBTb2Z0d2FyZSBBZ3JlZW1lbnQiKSBhbmQgc3VjaFxuXAorICAgICAgICAgIEluc3RhbGxhYmxlIFNvZnR3YXJlIEFncmVlbWVudCBzaGFsbCBiZSBhY2Nlc3NlZCBmcm9tIHRoZSBUYXJnZXQgTWFjaGluZSBpbiBhY2NvcmRhbmNlXG5cCisgICAgICAgICAgd2l0aCB0aGUgU3BlY2lmaWNhdGlvbi4gU3VjaCBJbnN0YWxsYWJsZSBTb2Z0d2FyZSBBZ3JlZW1lbnQgbXVzdCBpbmZvcm0gdGhlIHVzZXIgb2YgdGhlXG5cCisgICAgICAgICAgdGVybXMgYW5kIGNvbmRpdGlvbnMgdGhhdCBnb3Zlcm4gdGhlIEluc3RhbGxhYmxlIFNvZnR3YXJlIGFuZCBtdXN0IHNvbGljaXQgYWNjZXB0YW5jZSBieVxuXAorICAgICAgICAgIHRoZSBlbmQgdXNlciBpbiB0aGUgbWFubmVyIHByZXNjcmliZWQgaW4gc3VjaCBJbnN0YWxsYWJsZSBTb2Z0d2FyZSBBZ3JlZW1lbnQuIFVwb24gc3VjaFxuXAorICAgICAgICAgIGluZGljYXRpb24gb2YgYWdyZWVtZW50IGJ5IHRoZSB1c2VyLCB0aGUgcHJvdmlzaW9uaW5nIFRlY2hub2xvZ3kgd2lsbCBjb21wbGV0ZSBpbnN0YWxsYXRpb25cblwKKyAgICAgICAgICBvZiB0aGUgSW5zdGFsbGFibGUgU29mdHdhcmUuXG5cCitcblwKK0NyeXB0b2dyYXBoeVxuXAorXG5cCitDb250ZW50IG1heSBjb250YWluIGVuY3J5cHRpb24gc29mdHdhcmUuIFRoZSBjb3VudHJ5IGluIHdoaWNoIHlvdSBhcmVcblwKK2N1cnJlbnRseSBtYXkgaGF2ZSByZXN0cmljdGlvbnMgb24gdGhlIGltcG9ydCwgcG9zc2Vzc2lvbiwgYW5kIHVzZSxcblwKK2FuZC9vciByZS1leHBvcnQgdG8gYW5vdGhlciBjb3VudHJ5LCBvZiBlbmNyeXB0aW9uIHNvZnR3YXJlLiBCRUZPUkVcblwKK3VzaW5nIGFueSBlbmNyeXB0aW9uIHNvZnR3YXJlLCBwbGVhc2UgY2hlY2sgdGhlIGNvdW50cnkncyBsYXdzLFxuXAorcmVndWxhdGlvbnMgYW5kIHBvbGljaWVzIGNvbmNlcm5pbmcgdGhlIGltcG9ydCwgcG9zc2Vzc2lvbiwgb3IgdXNlLCBhbmRcblwKK3JlLWV4cG9ydCBvZiBlbmNyeXB0aW9uIHNvZnR3YXJlLCB0byBzZWUgaWYgdGhpcyBpcyBwZXJtaXR0ZWQuXG5cCitcblwKK0phdmEgYW5kIGFsbCBKYXZhLWJhc2VkIHRyYWRlbWFya3MgYXJlIHRyYWRlbWFya3Mgb2YgT3JhY2xlIENvcnBvcmF0aW9uIGluIHRoZSBVbml0ZWQgU3RhdGVzLCBvdGhlciBjb3VudHJpZXMsIG9yIGJvdGguXG4KKyMjIyMjIyMjIyMjIGVuZCBvZiBsaWNlbnNlIHByb3BlcnR5ICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLnN0ZW0ucHJvZHVjdC5mZWF0dXJlL2ZlYXR1cmUueG1sIGIvZmVhdHVyZXMvb3JnLmVjbGlwc2Uuc3RlbS5wcm9kdWN0LmZlYXR1cmUvZmVhdHVyZS54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTNmYTcyNAotLS0gL2Rldi9udWxsCisrKyBiL2ZlYXR1cmVzL29yZy5lY2xpcHNlLnN0ZW0ucHJvZHVjdC5mZWF0dXJlL2ZlYXR1cmUueG1sCkBAIC0wLDAgKzEsMjA5IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPGZlYXR1cmUKKyAgICAgIGlkPSJvcmcuZWNsaXBzZS5zdGVtLnByb2R1Y3QuZmVhdHVyZSIKKyAgICAgIGxhYmVsPSIlZmVhdHVyZU5hbWUiCisgICAgICB2ZXJzaW9uPSIxLjIuMSIKKyAgICAgIHByb3ZpZGVyLW5hbWU9IiVwcm92aWRlck5hbWUiPgorCisgICA8ZGVzY3JpcHRpb24+CisgICAgICAlZGVzY3JpcHRpb24KKyAgIDwvZGVzY3JpcHRpb24+CisKKyAgIDxjb3B5cmlnaHQ+CisgICAgICAlY29weXJpZ2h0CisgICA8L2NvcHlyaWdodD4KKworICAgPGxpY2Vuc2UgdXJsPSIlbGljZW5zZVVSTCI+CisgICAgICAlbGljZW5zZQorICAgPC9saWNlbnNlPgorCisgICA8dXJsPgorICAgICAgPHVwZGF0ZSBsYWJlbD0iJXVwZGF0ZVNpdGVOYW1lIiB1cmw9Imh0dHA6Ly9kb3dubG9hZC5lY2xpcHNlLm9yZy9zdGVtL3VwZGF0ZS1zaXRlLyIvPgorICAgPC91cmw+CisKKyAgIDxpbmNsdWRlcworICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLnJjcCIKKyAgICAgICAgIHZlcnNpb249IjAuMC4wIi8+CisKKyAgIDxpbmNsdWRlcworICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLmVxdWlub3guZXhlY3V0YWJsZSIKKyAgICAgICAgIHZlcnNpb249IjAuMC4wIi8+CisKKyAgIDxpbmNsdWRlcworICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLmVxdWlub3gucDIudXNlci51aSIKKyAgICAgICAgIHZlcnNpb249IjAuMC4wIi8+CisKKyAgIDxpbmNsdWRlcworICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLnBsYXRmb3JtIgorICAgICAgICAgdmVyc2lvbj0iMC4wLjAiLz4KKworICAgPGluY2x1ZGVzCisgICAgICAgICBpZD0ib3JnLmVjbGlwc2UuemVzdCIKKyAgICAgICAgIHZlcnNpb249IjAuMC4wIi8+CisKKyAgIDxpbmNsdWRlcworICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5mZWF0dXJlIgorICAgICAgICAgdmVyc2lvbj0iMC4wLjAiLz4KKworICAgPGluY2x1ZGVzCisgICAgICAgICBpZD0ib3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS5mZWF0dXJlIgorICAgICAgICAgdmVyc2lvbj0iMC4wLjAiLz4KKworICAgPGluY2x1ZGVzCisgICAgICAgICBpZD0ib3JnLmVjbGlwc2Uuc3RlbS5kYXRhLnBvcHVsYXRpb24uaHVtYW4uZmVhdHVyZSIKKyAgICAgICAgIHZlcnNpb249IjAuMC4wIi8+CisKKyAgIDxpbmNsdWRlcworICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uZGF0YS50cmFuc3BvcnRhdGlvbi5mZWF0dXJlIgorICAgICAgICAgdmVyc2lvbj0iMC4wLjAiLz4KKworICAgPGluY2x1ZGVzCisgICAgICAgICBpZD0ib3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5mZWF0dXJlIgorICAgICAgICAgdmVyc2lvbj0iMC4wLjAiLz4KKworICAgPGluY2x1ZGVzCisgICAgICAgICBpZD0ib3JnLmVjbGlwc2Uuc3RlbS5kaXN0cmlidXRlZC5mZWF0dXJlIgorICAgICAgICAgdmVyc2lvbj0iMC4wLjAiLz4KKworICAgPGluY2x1ZGVzCisgICAgICAgICBpZD0ib3JnLmVjbGlwc2Uuc3RlbS5tb2RlbHMuZXBpZGVtaW9sb2d5LmZlYXR1cmUiCisgICAgICAgICB2ZXJzaW9uPSIwLjAuMCIvPgorCisgICA8aW5jbHVkZXMKKyAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5zdGVtLm1vZGVscy5wb3B1bGF0aW9uLmZlYXR1cmUiCisgICAgICAgICB2ZXJzaW9uPSIwLjAuMCIvPgorCisgICA8cmVxdWlyZXM+CisgICAgICA8aW1wb3J0IHBsdWdpbj0ib3JnLmFwYWNoZS5jb21tb25zLmNvZGVjIiB2ZXJzaW9uPSIxLjMuMCIgbWF0Y2g9ImNvbXBhdGlibGUiLz4KKyAgICAgIDxpbXBvcnQgcGx1Z2luPSJvcmcuZWNsaXBzZS5zd3QiIHZlcnNpb249IjMuMi4wIiBtYXRjaD0iY29tcGF0aWJsZSIvPgorICAgICAgPGltcG9ydCBwbHVnaW49Im9yZy5lY2xpcHNlLmJpcnQuY2hhcnQuZW5naW5lIiB2ZXJzaW9uPSIyLjEuMCIgbWF0Y2g9ImNvbXBhdGlibGUiLz4KKyAgICAgIDxpbXBvcnQgcGx1Z2luPSJvcmcuZWNsaXBzZS5lbWYuZWNvcmUiIHZlcnNpb249IjIuMi4wIiBtYXRjaD0iY29tcGF0aWJsZSIvPgorICAgICAgPGltcG9ydCBwbHVnaW49Im9yZy5lY2xpcHNlLmVtZi5lY29yZS54bWkiIHZlcnNpb249IjIuMi4wIiBtYXRjaD0iY29tcGF0aWJsZSIvPgorICAgICAgPGltcG9ydCBwbHVnaW49Im9yZy5lY2xpcHNlLmJpcnQuY29yZSIgdmVyc2lvbj0iMi4xLjAiIG1hdGNoPSJjb21wYXRpYmxlIi8+CisgICAgICA8aW1wb3J0IHBsdWdpbj0ib3JnLmVjbGlwc2UuY29yZS5ydW50aW1lIiB2ZXJzaW9uPSIzLjIuMCIgbWF0Y2g9ImNvbXBhdGlibGUiLz4KKyAgICAgIDxpbXBvcnQgcGx1Z2luPSJvcmcubW96aWxsYS5qYXZhc2NyaXB0IiB2ZXJzaW9uPSIxLjYuMCIgbWF0Y2g9ImNvbXBhdGlibGUiLz4KKyAgICAgIDxpbXBvcnQgcGx1Z2luPSJvcmcuZWNsaXBzZS5qZmFjZSIgdmVyc2lvbj0iMy4yLjAiIG1hdGNoPSJjb21wYXRpYmxlIi8+CisgICAgICA8aW1wb3J0IHBsdWdpbj0ib3JnLmVjbGlwc2UuY29yZS5ydW50aW1lIiB2ZXJzaW9uPSIzLjYuMCIgbWF0Y2g9ImNvbXBhdGlibGUiLz4KKyAgICAgIDxpbXBvcnQgcGx1Z2luPSJvcmcuZWNsaXBzZS51aSIgdmVyc2lvbj0iMy42LjAiIG1hdGNoPSJjb21wYXRpYmxlIi8+CisgICAgICA8aW1wb3J0IHBsdWdpbj0ib3JnLmVjbGlwc2UuZW1mLmNvbW1vbiIgdmVyc2lvbj0iMi42LjAiIG1hdGNoPSJjb21wYXRpYmxlIi8+CisgICAgICA8aW1wb3J0IHBsdWdpbj0ib3JnLmVjbGlwc2UuZW1mLmVjb3JlIiB2ZXJzaW9uPSIyLjYuMCIgbWF0Y2g9ImNvbXBhdGlibGUiLz4KKyAgICAgIDxpbXBvcnQgcGx1Z2luPSJvcmcuZWNsaXBzZS5lbWYuZWRpdCIgdmVyc2lvbj0iMi42LjAiIG1hdGNoPSJjb21wYXRpYmxlIi8+CisgICAgICA8aW1wb3J0IHBsdWdpbj0ib3JnLmVjbGlwc2UudWkudmlld3MiIHZlcnNpb249IjMuNS4wIiBtYXRjaD0iY29tcGF0aWJsZSIvPgorICAgICAgPGltcG9ydCBwbHVnaW49Im9yZy5lY2xpcHNlLnVpLndvcmtiZW5jaCIgdmVyc2lvbj0iMy42LjAiIG1hdGNoPSJjb21wYXRpYmxlIi8+CisgICAgICA8aW1wb3J0IHBsdWdpbj0ib3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51aSIgdmVyc2lvbj0iMi42LjAiIG1hdGNoPSJjb21wYXRpYmxlIi8+CisgICAgICA8aW1wb3J0IHBsdWdpbj0iY29tLmlibS5pY3UiLz4KKyAgIDwvcmVxdWlyZXM+CisKKyAgIDxwbHVnaW4KKyAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5iaXJ0LmNoYXJ0LmRldmljZS5zd3QiCisgICAgICAgICBkb3dubG9hZC1zaXplPSIwIgorICAgICAgICAgaW5zdGFsbC1zaXplPSIwIgorICAgICAgICAgdmVyc2lvbj0iMC4wLjAiCisgICAgICAgICB1bnBhY2s9ImZhbHNlIi8+CisKKyAgIDxwbHVnaW4KKyAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5iaXJ0LmNoYXJ0LmVuZ2luZSIKKyAgICAgICAgIGRvd25sb2FkLXNpemU9IjAiCisgICAgICAgICBpbnN0YWxsLXNpemU9IjAiCisgICAgICAgICB2ZXJzaW9uPSIwLjAuMCIKKyAgICAgICAgIHVucGFjaz0iZmFsc2UiLz4KKworICAgPHBsdWdpbgorICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLmJpcnQuY2hhcnQuZW5naW5lLmV4dGVuc2lvbiIKKyAgICAgICAgIGRvd25sb2FkLXNpemU9IjAiCisgICAgICAgICBpbnN0YWxsLXNpemU9IjAiCisgICAgICAgICB2ZXJzaW9uPSIwLjAuMCIKKyAgICAgICAgIHVucGFjaz0iZmFsc2UiLz4KKworICAgPHBsdWdpbgorICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLmJpcnQuY29yZSIKKyAgICAgICAgIGRvd25sb2FkLXNpemU9IjAiCisgICAgICAgICBpbnN0YWxsLXNpemU9IjAiCisgICAgICAgICB2ZXJzaW9uPSIwLjAuMCIKKyAgICAgICAgIHVucGFjaz0iZmFsc2UiLz4KKworICAgPHBsdWdpbgorICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLmJpcnQuY29yZS51aSIKKyAgICAgICAgIGRvd25sb2FkLXNpemU9IjAiCisgICAgICAgICBpbnN0YWxsLXNpemU9IjAiCisgICAgICAgICB2ZXJzaW9uPSIwLjAuMCIKKyAgICAgICAgIHVucGFjaz0iZmFsc2UiLz4KKworICAgPHBsdWdpbgorICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLmVtZi5jb21tb24iCisgICAgICAgICBkb3dubG9hZC1zaXplPSIwIgorICAgICAgICAgaW5zdGFsbC1zaXplPSIwIgorICAgICAgICAgdmVyc2lvbj0iMC4wLjAiCisgICAgICAgICB1bnBhY2s9ImZhbHNlIi8+CisKKyAgIDxwbHVnaW4KKyAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnVpIgorICAgICAgICAgZG93bmxvYWQtc2l6ZT0iMCIKKyAgICAgICAgIGluc3RhbGwtc2l6ZT0iMCIKKyAgICAgICAgIHZlcnNpb249IjAuMC4wIgorICAgICAgICAgdW5wYWNrPSJmYWxzZSIvPgorCisgICA8cGx1Z2luCisgICAgICAgICBpZD0ib3JnLmVjbGlwc2UuZW1mLmVjb3JlIgorICAgICAgICAgZG93bmxvYWQtc2l6ZT0iMCIKKyAgICAgICAgIGluc3RhbGwtc2l6ZT0iMCIKKyAgICAgICAgIHZlcnNpb249IjAuMC4wIgorICAgICAgICAgdW5wYWNrPSJmYWxzZSIvPgorCisgICA8cGx1Z2luCisgICAgICAgICBpZD0ib3JnLmVjbGlwc2UuZW1mLmVjb3JlLmNoYW5nZSIKKyAgICAgICAgIGRvd25sb2FkLXNpemU9IjAiCisgICAgICAgICBpbnN0YWxsLXNpemU9IjAiCisgICAgICAgICB2ZXJzaW9uPSIwLjAuMCIKKyAgICAgICAgIHVucGFjaz0iZmFsc2UiLz4KKworICAgPHBsdWdpbgorICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLmVtZi5lY29yZS5lZGl0IgorICAgICAgICAgZG93bmxvYWQtc2l6ZT0iMCIKKyAgICAgICAgIGluc3RhbGwtc2l6ZT0iMCIKKyAgICAgICAgIHZlcnNpb249IjAuMC4wIgorICAgICAgICAgdW5wYWNrPSJmYWxzZSIvPgorCisgICA8cGx1Z2luCisgICAgICAgICBpZD0ib3JnLmVjbGlwc2UuZW1mLmVjb3JlLnhtaSIKKyAgICAgICAgIGRvd25sb2FkLXNpemU9IjAiCisgICAgICAgICBpbnN0YWxsLXNpemU9IjAiCisgICAgICAgICB2ZXJzaW9uPSIwLjAuMCIKKyAgICAgICAgIHVucGFjaz0iZmFsc2UiLz4KKworICAgPHBsdWdpbgorICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLmVtZi5lZGl0IgorICAgICAgICAgZG93bmxvYWQtc2l6ZT0iMCIKKyAgICAgICAgIGluc3RhbGwtc2l6ZT0iMCIKKyAgICAgICAgIHZlcnNpb249IjAuMC4wIgorICAgICAgICAgdW5wYWNrPSJmYWxzZSIvPgorCisgICA8cGx1Z2luCisgICAgICAgICBpZD0ib3JnLmVjbGlwc2UuZW1mLmVkaXQudWkiCisgICAgICAgICBkb3dubG9hZC1zaXplPSIwIgorICAgICAgICAgaW5zdGFsbC1zaXplPSIwIgorICAgICAgICAgdmVyc2lvbj0iMC4wLjAiCisgICAgICAgICB1bnBhY2s9ImZhbHNlIi8+CisKKyAgIDxwbHVnaW4KKyAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS51aS52aWV3cy5sb2ciCisgICAgICAgICBkb3dubG9hZC1zaXplPSIwIgorICAgICAgICAgaW5zdGFsbC1zaXplPSIwIgorICAgICAgICAgdmVyc2lvbj0iMC4wLjAiCisgICAgICAgICB1bnBhY2s9ImZhbHNlIi8+CisKKyAgIDxwbHVnaW4KKyAgICAgICAgIGlkPSJvcmcubW96aWxsYS5qYXZhc2NyaXB0IgorICAgICAgICAgZG93bmxvYWQtc2l6ZT0iMCIKKyAgICAgICAgIGluc3RhbGwtc2l6ZT0iMCIKKyAgICAgICAgIHZlcnNpb249IjAuMC4wIgorICAgICAgICAgdW5wYWNrPSJmYWxzZSIvPgorCisgICA8cGx1Z2luCisgICAgICAgICBpZD0ib3JnLmFwYWNoZS5jb21tb25zLm1hdGgiCisgICAgICAgICBkb3dubG9hZC1zaXplPSIwIgorICAgICAgICAgaW5zdGFsbC1zaXplPSIwIgorICAgICAgICAgdmVyc2lvbj0iMC4wLjAiCisgICAgICAgICB1bnBhY2s9ImZhbHNlIi8+CisKKzwvZmVhdHVyZT4KZGlmZiAtLWdpdCBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLnN0ZW0ucHJvZHVjdC5mZWF0dXJlL2xpY2Vuc2UuaHRtbCBiL2ZlYXR1cmVzL29yZy5lY2xpcHNlLnN0ZW0ucHJvZHVjdC5mZWF0dXJlL2xpY2Vuc2UuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMTg0Y2EzCi0tLSAvZGV2L251bGwKKysrIGIvZmVhdHVyZXMvb3JnLmVjbGlwc2Uuc3RlbS5wcm9kdWN0LmZlYXR1cmUvbGljZW5zZS5odG1sCkBAIC0wLDAgKzEsMTA3IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJJU08tODg1OS0xIiA/PgorPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBYSFRNTCAxLjAgU3RyaWN0Ly9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sMS9EVEQveGh0bWwxLXN0cmljdC5kdGQiPgorPGh0bWwgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiPgorPGhlYWQ+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0xIiAvPgorPHRpdGxlPkVjbGlwc2UgRm91bmRhdGlvbiBTb2Z0d2FyZSBVc2VyIEFncmVlbWVudDwvdGl0bGU+Cis8L2hlYWQ+CisKKzxib2R5IGxhbmc9IkVOLVVTIj4KKzxoMj5FY2xpcHNlIEZvdW5kYXRpb24gU29mdHdhcmUgVXNlciBBZ3JlZW1lbnQ8L2gyPgorPHA+QXByaWwgMTQsIDIwMTA8L3A+CisKKzxoMz5Vc2FnZSBPZiBDb250ZW50PC9oMz4KKworPHA+VEhFIEVDTElQU0UgRk9VTkRBVElPTiBNQUtFUyBBVkFJTEFCTEUgU09GVFdBUkUsIERPQ1VNRU5UQVRJT04sIElORk9STUFUSU9OIEFORC9PUiBPVEhFUiBNQVRFUklBTFMgRk9SIE9QRU4gU09VUkNFIFBST0pFQ1RTCisgICAoQ09MTEVDVElWRUxZICZxdW90O0NPTlRFTlQmcXVvdDspLiAgVVNFIE9GIFRIRSBDT05URU5UIElTIEdPVkVSTkVEIEJZIFRIRSBURVJNUyBBTkQgQ09ORElUSU9OUyBPRiBUSElTIEFHUkVFTUVOVCBBTkQvT1IgVEhFIFRFUk1TIEFORAorICAgQ09ORElUSU9OUyBPRiBMSUNFTlNFIEFHUkVFTUVOVFMgT1IgTk9USUNFUyBJTkRJQ0FURUQgT1IgUkVGRVJFTkNFRCBCRUxPVy4gIEJZIFVTSU5HIFRIRSBDT05URU5ULCBZT1UgQUdSRUUgVEhBVCBZT1VSIFVTRQorICAgT0YgVEhFIENPTlRFTlQgSVMgR09WRVJORUQgQlkgVEhJUyBBR1JFRU1FTlQgQU5EL09SIFRIRSBURVJNUyBBTkQgQ09ORElUSU9OUyBPRiBBTlkgQVBQTElDQUJMRSBMSUNFTlNFIEFHUkVFTUVOVFMgT1IKKyAgIE5PVElDRVMgSU5ESUNBVEVEIE9SIFJFRkVSRU5DRUQgQkVMT1cuICBJRiBZT1UgRE8gTk9UIEFHUkVFIFRPIFRIRSBURVJNUyBBTkQgQ09ORElUSU9OUyBPRiBUSElTIEFHUkVFTUVOVCBBTkQgVEhFIFRFUk1TIEFORAorICAgQ09ORElUSU9OUyBPRiBBTlkgQVBQTElDQUJMRSBMSUNFTlNFIEFHUkVFTUVOVFMgT1IgTk9USUNFUyBJTkRJQ0FURUQgT1IgUkVGRVJFTkNFRCBCRUxPVywgVEhFTiBZT1UgTUFZIE5PVCBVU0UgVEhFIENPTlRFTlQuPC9wPgorCis8aDM+QXBwbGljYWJsZSBMaWNlbnNlczwvaDM+CisKKzxwPlVubGVzcyBvdGhlcndpc2UgaW5kaWNhdGVkLCBhbGwgQ29udGVudCBtYWRlIGF2YWlsYWJsZSBieSB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uIGlzIHByb3ZpZGVkIHRvIHlvdSB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjAKKyAgICgmcXVvdDtFUEwmcXVvdDspLiAgQSBjb3B5IG9mIHRoZSBFUEwgaXMgcHJvdmlkZWQgd2l0aCB0aGlzIENvbnRlbnQgYW5kIGlzIGFsc28gYXZhaWxhYmxlIGF0IDxhIGhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sIj5odHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbDwvYT4uCisgICBGb3IgcHVycG9zZXMgb2YgdGhlIEVQTCwgJnF1b3Q7UHJvZ3JhbSZxdW90OyB3aWxsIG1lYW4gdGhlIENvbnRlbnQuPC9wPgorCis8cD5Db250ZW50IGluY2x1ZGVzLCBidXQgaXMgbm90IGxpbWl0ZWQgdG8sIHNvdXJjZSBjb2RlLCBvYmplY3QgY29kZSwgZG9jdW1lbnRhdGlvbiBhbmQgb3RoZXIgZmlsZXMgbWFpbnRhaW5lZCBpbiB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uIHNvdXJjZSBjb2RlCisgICByZXBvc2l0b3J5ICgmcXVvdDtSZXBvc2l0b3J5JnF1b3Q7KSBpbiBzb2Z0d2FyZSBtb2R1bGVzICgmcXVvdDtNb2R1bGVzJnF1b3Q7KSBhbmQgbWFkZSBhdmFpbGFibGUgYXMgZG93bmxvYWRhYmxlIGFyY2hpdmVzICgmcXVvdDtEb3dubG9hZHMmcXVvdDspLjwvcD4KKworPHVsPgorICAgICAgIDxsaT5Db250ZW50IG1heSBiZSBzdHJ1Y3R1cmVkIGFuZCBwYWNrYWdlZCBpbnRvIG1vZHVsZXMgdG8gZmFjaWxpdGF0ZSBkZWxpdmVyaW5nLCBleHRlbmRpbmcsIGFuZCB1cGdyYWRpbmcgdGhlIENvbnRlbnQuICBUeXBpY2FsIG1vZHVsZXMgbWF5IGluY2x1ZGUgcGx1Zy1pbnMgKCZxdW90O1BsdWctaW5zJnF1b3Q7KSwgcGx1Zy1pbiBmcmFnbWVudHMgKCZxdW90O0ZyYWdtZW50cyZxdW90OyksIGFuZCBmZWF0dXJlcyAoJnF1b3Q7RmVhdHVyZXMmcXVvdDspLjwvbGk+CisgICAgICAgPGxpPkVhY2ggUGx1Zy1pbiBvciBGcmFnbWVudCBtYXkgYmUgcGFja2FnZWQgYXMgYSBzdWItZGlyZWN0b3J5IG9yIEpBUiAoSmF2YSZ0cmFkZTsgQVJjaGl2ZSkgaW4gYSBkaXJlY3RvcnkgbmFtZWQgJnF1b3Q7cGx1Z2lucyZxdW90Oy48L2xpPgorICAgICAgIDxsaT5BIEZlYXR1cmUgaXMgYSBidW5kbGUgb2Ygb25lIG9yIG1vcmUgUGx1Zy1pbnMgYW5kL29yIEZyYWdtZW50cyBhbmQgYXNzb2NpYXRlZCBtYXRlcmlhbC4gIEVhY2ggRmVhdHVyZSBtYXkgYmUgcGFja2FnZWQgYXMgYSBzdWItZGlyZWN0b3J5IGluIGEgZGlyZWN0b3J5IG5hbWVkICZxdW90O2ZlYXR1cmVzJnF1b3Q7LiAgV2l0aGluIGEgRmVhdHVyZSwgZmlsZXMgbmFtZWQgJnF1b3Q7ZmVhdHVyZS54bWwmcXVvdDsgbWF5IGNvbnRhaW4gYSBsaXN0IG9mIHRoZSBuYW1lcyBhbmQgdmVyc2lvbiBudW1iZXJzIG9mIHRoZSBQbHVnLWlucworICAgICAgYW5kL29yIEZyYWdtZW50cyBhc3NvY2lhdGVkIHdpdGggdGhhdCBGZWF0dXJlLjwvbGk+CisgICAgICAgPGxpPkZlYXR1cmVzIG1heSBhbHNvIGluY2x1ZGUgb3RoZXIgRmVhdHVyZXMgKCZxdW90O0luY2x1ZGVkIEZlYXR1cmVzJnF1b3Q7KS4gV2l0aGluIGEgRmVhdHVyZSwgZmlsZXMgbmFtZWQgJnF1b3Q7ZmVhdHVyZS54bWwmcXVvdDsgbWF5IGNvbnRhaW4gYSBsaXN0IG9mIHRoZSBuYW1lcyBhbmQgdmVyc2lvbiBudW1iZXJzIG9mIEluY2x1ZGVkIEZlYXR1cmVzLjwvbGk+Cis8L3VsPgorCis8cD5UaGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgZ292ZXJuaW5nIFBsdWctaW5zIGFuZCBGcmFnbWVudHMgc2hvdWxkIGJlIGNvbnRhaW5lZCBpbiBmaWxlcyBuYW1lZCAmcXVvdDthYm91dC5odG1sJnF1b3Q7ICgmcXVvdDtBYm91dHMmcXVvdDspLiBUaGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgZ292ZXJuaW5nIEZlYXR1cmVzIGFuZAorSW5jbHVkZWQgRmVhdHVyZXMgc2hvdWxkIGJlIGNvbnRhaW5lZCBpbiBmaWxlcyBuYW1lZCAmcXVvdDtsaWNlbnNlLmh0bWwmcXVvdDsgKCZxdW90O0ZlYXR1cmUgTGljZW5zZXMmcXVvdDspLiAgQWJvdXRzIGFuZCBGZWF0dXJlIExpY2Vuc2VzIG1heSBiZSBsb2NhdGVkIGluIGFueSBkaXJlY3Rvcnkgb2YgYSBEb3dubG9hZCBvciBNb2R1bGUKK2luY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvIHRoZSBmb2xsb3dpbmcgbG9jYXRpb25zOjwvcD4KKworPHVsPgorICAgICAgIDxsaT5UaGUgdG9wLWxldmVsIChyb290KSBkaXJlY3Rvcnk8L2xpPgorICAgICAgIDxsaT5QbHVnLWluIGFuZCBGcmFnbWVudCBkaXJlY3RvcmllczwvbGk+CisgICAgICAgPGxpPkluc2lkZSBQbHVnLWlucyBhbmQgRnJhZ21lbnRzIHBhY2thZ2VkIGFzIEpBUnM8L2xpPgorICAgICAgIDxsaT5TdWItZGlyZWN0b3JpZXMgb2YgdGhlIGRpcmVjdG9yeSBuYW1lZCAmcXVvdDtzcmMmcXVvdDsgb2YgY2VydGFpbiBQbHVnLWluczwvbGk+CisgICAgICAgPGxpPkZlYXR1cmUgZGlyZWN0b3JpZXM8L2xpPgorPC91bD4KKworPHA+Tm90ZTogaWYgYSBGZWF0dXJlIG1hZGUgYXZhaWxhYmxlIGJ5IHRoZSBFY2xpcHNlIEZvdW5kYXRpb24gaXMgaW5zdGFsbGVkIHVzaW5nIHRoZSBQcm92aXNpb25pbmcgVGVjaG5vbG9neSAoYXMgZGVmaW5lZCBiZWxvdyksIHlvdSBtdXN0IGFncmVlIHRvIGEgbGljZW5zZSAoJnF1b3Q7RmVhdHVyZSBVcGRhdGUgTGljZW5zZSZxdW90OykgZHVyaW5nIHRoZQoraW5zdGFsbGF0aW9uIHByb2Nlc3MuICBJZiB0aGUgRmVhdHVyZSBjb250YWlucyBJbmNsdWRlZCBGZWF0dXJlcywgdGhlIEZlYXR1cmUgVXBkYXRlIExpY2Vuc2Ugc2hvdWxkIGVpdGhlciBwcm92aWRlIHlvdSB3aXRoIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBnb3Zlcm5pbmcgdGhlIEluY2x1ZGVkIEZlYXR1cmVzIG9yCitpbmZvcm0geW91IHdoZXJlIHlvdSBjYW4gbG9jYXRlIHRoZW0uICBGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlcyBtYXkgYmUgZm91bmQgaW4gdGhlICZxdW90O2xpY2Vuc2UmcXVvdDsgcHJvcGVydHkgb2YgZmlsZXMgbmFtZWQgJnF1b3Q7ZmVhdHVyZS5wcm9wZXJ0aWVzJnF1b3Q7IGZvdW5kIHdpdGhpbiBhIEZlYXR1cmUuCitTdWNoIEFib3V0cywgRmVhdHVyZSBMaWNlbnNlcywgYW5kIEZlYXR1cmUgVXBkYXRlIExpY2Vuc2VzIGNvbnRhaW4gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIChvciByZWZlcmVuY2VzIHRvIHN1Y2ggdGVybXMgYW5kIGNvbmRpdGlvbnMpIHRoYXQgZ292ZXJuIHlvdXIgdXNlIG9mIHRoZSBhc3NvY2lhdGVkIENvbnRlbnQgaW4KK3RoYXQgZGlyZWN0b3J5LjwvcD4KKworPHA+VEhFIEFCT1VUUywgRkVBVFVSRSBMSUNFTlNFUywgQU5EIEZFQVRVUkUgVVBEQVRFIExJQ0VOU0VTIE1BWSBSRUZFUiBUTyBUSEUgRVBMIE9SIE9USEVSIExJQ0VOU0UgQUdSRUVNRU5UUywgTk9USUNFUyBPUiBURVJNUyBBTkQgQ09ORElUSU9OUy4gIFNPTUUgT0YgVEhFU0UKK09USEVSIExJQ0VOU0UgQUdSRUVNRU5UUyBNQVkgSU5DTFVERSAoQlVUIEFSRSBOT1QgTElNSVRFRCBUTyk6PC9wPgorCis8dWw+CisgICAgICAgPGxpPkNvbW1vbiBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMCAoYXZhaWxhYmxlIGF0IDxhIGhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvY3BsLXYxMC5odG1sIj5odHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2NwbC12MTAuaHRtbDwvYT4pPC9saT4KKyAgICAgICA8bGk+QXBhY2hlIFNvZnR3YXJlIExpY2Vuc2UgMS4xIChhdmFpbGFibGUgYXQgPGEgaHJlZj0iaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UiPmh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFPC9hPik8L2xpPgorICAgICAgIDxsaT5BcGFjaGUgU29mdHdhcmUgTGljZW5zZSAyLjAgKGF2YWlsYWJsZSBhdCA8YSBocmVmPSJodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAiPmh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMDwvYT4pPC9saT4KKyAgICAgICA8bGk+TWV0cm8gTGluayBQdWJsaWMgTGljZW5zZSAxLjAwIChhdmFpbGFibGUgYXQgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuZ3JvdXAub3JnL29wZW5tb3RpZi9zdXBwb3J0ZXJzL21ldHJvbGluay9saWNlbnNlLmh0bWwiPmh0dHA6Ly93d3cub3Blbmdyb3VwLm9yZy9vcGVubW90aWYvc3VwcG9ydGVycy9tZXRyb2xpbmsvbGljZW5zZS5odG1sPC9hPik8L2xpPgorICAgICAgIDxsaT5Nb3ppbGxhIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4xIChhdmFpbGFibGUgYXQgPGEgaHJlZj0iaHR0cDovL3d3dy5tb3ppbGxhLm9yZy9NUEwvTVBMLTEuMS5odG1sIj5odHRwOi8vd3d3Lm1vemlsbGEub3JnL01QTC9NUEwtMS4xLmh0bWw8L2E+KTwvbGk+Cis8L3VsPgorCis8cD5JVCBJUyBZT1VSIE9CTElHQVRJT04gVE8gUkVBRCBBTkQgQUNDRVBUIEFMTCBTVUNIIFRFUk1TIEFORCBDT05ESVRJT05TIFBSSU9SIFRPIFVTRSBPRiBUSEUgQ09OVEVOVC4gIElmIG5vIEFib3V0LCBGZWF0dXJlIExpY2Vuc2UsIG9yIEZlYXR1cmUgVXBkYXRlIExpY2Vuc2UgaXMgcHJvdmlkZWQsIHBsZWFzZQorY29udGFjdCB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uIHRvIGRldGVybWluZSB3aGF0IHRlcm1zIGFuZCBjb25kaXRpb25zIGdvdmVybiB0aGF0IHBhcnRpY3VsYXIgQ29udGVudC48L3A+CisKKworPGgzPlVzZSBvZiBQcm92aXNpb25pbmcgVGVjaG5vbG9neTwvaDM+CisKKzxwPlRoZSBFY2xpcHNlIEZvdW5kYXRpb24gbWFrZXMgYXZhaWxhYmxlIHByb3Zpc2lvbmluZyBzb2Z0d2FyZSwgZXhhbXBsZXMgb2Ygd2hpY2ggaW5jbHVkZSwgYnV0IGFyZSBub3QgbGltaXRlZCB0bywgcDIgYW5kIHRoZSBFY2xpcHNlCisgICBVcGRhdGUgTWFuYWdlciAoJnF1b3Q7UHJvdmlzaW9uaW5nIFRlY2hub2xvZ3kmcXVvdDspIGZvciB0aGUgcHVycG9zZSBvZiBhbGxvd2luZyB1c2VycyB0byBpbnN0YWxsIHNvZnR3YXJlLCBkb2N1bWVudGF0aW9uLCBpbmZvcm1hdGlvbiBhbmQvb3IKKyAgIG90aGVyIG1hdGVyaWFscyAoY29sbGVjdGl2ZWx5ICZxdW90O0luc3RhbGxhYmxlIFNvZnR3YXJlJnF1b3Q7KS4gVGhpcyBjYXBhYmlsaXR5IGlzIHByb3ZpZGVkIHdpdGggdGhlIGludGVudCBvZiBhbGxvd2luZyBzdWNoIHVzZXJzIHRvCisgICBpbnN0YWxsLCBleHRlbmQgYW5kIHVwZGF0ZSBFY2xpcHNlLWJhc2VkIHByb2R1Y3RzLiBJbmZvcm1hdGlvbiBhYm91dCBwYWNrYWdpbmcgSW5zdGFsbGFibGUgU29mdHdhcmUgaXMgYXZhaWxhYmxlIGF0IDxhCisgICAgICAgaHJlZj0iaHR0cDovL2VjbGlwc2Uub3JnL2VxdWlub3gvcDIvcmVwb3NpdG9yeV9wYWNrYWdpbmcuaHRtbCI+aHR0cDovL2VjbGlwc2Uub3JnL2VxdWlub3gvcDIvcmVwb3NpdG9yeV9wYWNrYWdpbmcuaHRtbDwvYT4KKyAgICgmcXVvdDtTcGVjaWZpY2F0aW9uJnF1b3Q7KS48L3A+CisKKzxwPllvdSBtYXkgdXNlIFByb3Zpc2lvbmluZyBUZWNobm9sb2d5IHRvIGFsbG93IG90aGVyIHBhcnRpZXMgdG8gaW5zdGFsbCBJbnN0YWxsYWJsZSBTb2Z0d2FyZS4gWW91IHNoYWxsIGJlIHJlc3BvbnNpYmxlIGZvciBlbmFibGluZyB0aGUKKyAgIGFwcGxpY2FibGUgbGljZW5zZSBhZ3JlZW1lbnRzIHJlbGF0aW5nIHRvIHRoZSBJbnN0YWxsYWJsZSBTb2Z0d2FyZSB0byBiZSBwcmVzZW50ZWQgdG8sIGFuZCBhY2NlcHRlZCBieSwgdGhlIHVzZXJzIG9mIHRoZSBQcm92aXNpb25pbmcgVGVjaG5vbG9neQorICAgaW4gYWNjb3JkYW5jZSB3aXRoIHRoZSBTcGVjaWZpY2F0aW9uLiBCeSB1c2luZyBQcm92aXNpb25pbmcgVGVjaG5vbG9neSBpbiBzdWNoIGEgbWFubmVyIGFuZCBtYWtpbmcgaXQgYXZhaWxhYmxlIGluIGFjY29yZGFuY2Ugd2l0aCB0aGUKKyAgIFNwZWNpZmljYXRpb24sIHlvdSBmdXJ0aGVyIGFja25vd2xlZGdlIHlvdXIgYWdyZWVtZW50IHRvLCBhbmQgdGhlIGFjcXVpc2l0aW9uIG9mIGFsbCBuZWNlc3NhcnkgcmlnaHRzIHRvIHBlcm1pdCB0aGUgZm9sbG93aW5nOjwvcD4KKworPG9sPgorICAgICAgIDxsaT5BIHNlcmllcyBvZiBhY3Rpb25zIG1heSBvY2N1ciAoJnF1b3Q7UHJvdmlzaW9uaW5nIFByb2Nlc3MmcXVvdDspIGluIHdoaWNoIGEgdXNlciBtYXkgZXhlY3V0ZSB0aGUgUHJvdmlzaW9uaW5nIFRlY2hub2xvZ3kKKyAgICAgICBvbiBhIG1hY2hpbmUgKCZxdW90O1RhcmdldCBNYWNoaW5lJnF1b3Q7KSB3aXRoIHRoZSBpbnRlbnQgb2YgaW5zdGFsbGluZywgZXh0ZW5kaW5nIG9yIHVwZGF0aW5nIHRoZSBmdW5jdGlvbmFsaXR5IG9mIGFuIEVjbGlwc2UtYmFzZWQKKyAgICAgICBwcm9kdWN0LjwvbGk+CisgICAgICAgPGxpPkR1cmluZyB0aGUgUHJvdmlzaW9uaW5nIFByb2Nlc3MsIHRoZSBQcm92aXNpb25pbmcgVGVjaG5vbG9neSBtYXkgY2F1c2UgdGhpcmQgcGFydHkgSW5zdGFsbGFibGUgU29mdHdhcmUgb3IgYSBwb3J0aW9uIHRoZXJlb2YgdG8gYmUKKyAgICAgICBhY2Nlc3NlZCBhbmQgY29waWVkIHRvIHRoZSBUYXJnZXQgTWFjaGluZS48L2xpPgorICAgICAgIDxsaT5QdXJzdWFudCB0byB0aGUgU3BlY2lmaWNhdGlvbiwgeW91IHdpbGwgcHJvdmlkZSB0byB0aGUgdXNlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgdGhhdCBnb3Zlcm4gdGhlIHVzZSBvZiB0aGUgSW5zdGFsbGFibGUKKyAgICAgICBTb2Z0d2FyZSAoJnF1b3Q7SW5zdGFsbGFibGUgU29mdHdhcmUgQWdyZWVtZW50JnF1b3Q7KSBhbmQgc3VjaCBJbnN0YWxsYWJsZSBTb2Z0d2FyZSBBZ3JlZW1lbnQgc2hhbGwgYmUgYWNjZXNzZWQgZnJvbSB0aGUgVGFyZ2V0CisgICAgICAgTWFjaGluZSBpbiBhY2NvcmRhbmNlIHdpdGggdGhlIFNwZWNpZmljYXRpb24uIFN1Y2ggSW5zdGFsbGFibGUgU29mdHdhcmUgQWdyZWVtZW50IG11c3QgaW5mb3JtIHRoZSB1c2VyIG9mIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyB0aGF0IGdvdmVybgorICAgICAgIHRoZSBJbnN0YWxsYWJsZSBTb2Z0d2FyZSBhbmQgbXVzdCBzb2xpY2l0IGFjY2VwdGFuY2UgYnkgdGhlIGVuZCB1c2VyIGluIHRoZSBtYW5uZXIgcHJlc2NyaWJlZCBpbiBzdWNoIEluc3RhbGxhYmxlIFNvZnR3YXJlIEFncmVlbWVudC4gVXBvbiBzdWNoCisgICAgICAgaW5kaWNhdGlvbiBvZiBhZ3JlZW1lbnQgYnkgdGhlIHVzZXIsIHRoZSBwcm92aXNpb25pbmcgVGVjaG5vbG9neSB3aWxsIGNvbXBsZXRlIGluc3RhbGxhdGlvbiBvZiB0aGUgSW5zdGFsbGFibGUgU29mdHdhcmUuPC9saT4KKzwvb2w+CisKKzxoMz5DcnlwdG9ncmFwaHk8L2gzPgorCis8cD5Db250ZW50IG1heSBjb250YWluIGVuY3J5cHRpb24gc29mdHdhcmUuIFRoZSBjb3VudHJ5IGluIHdoaWNoIHlvdSBhcmUgY3VycmVudGx5IG1heSBoYXZlIHJlc3RyaWN0aW9ucyBvbiB0aGUgaW1wb3J0LCBwb3NzZXNzaW9uLCBhbmQgdXNlLCBhbmQvb3IgcmUtZXhwb3J0IHRvCisgICBhbm90aGVyIGNvdW50cnksIG9mIGVuY3J5cHRpb24gc29mdHdhcmUuIEJFRk9SRSB1c2luZyBhbnkgZW5jcnlwdGlvbiBzb2Z0d2FyZSwgcGxlYXNlIGNoZWNrIHRoZSBjb3VudHJ5J3MgbGF3cywgcmVndWxhdGlvbnMgYW5kIHBvbGljaWVzIGNvbmNlcm5pbmcgdGhlIGltcG9ydCwKKyAgIHBvc3Nlc3Npb24sIG9yIHVzZSwgYW5kIHJlLWV4cG9ydCBvZiBlbmNyeXB0aW9uIHNvZnR3YXJlLCB0byBzZWUgaWYgdGhpcyBpcyBwZXJtaXR0ZWQuPC9wPgorCis8cD48c21hbGw+SmF2YSBhbmQgYWxsIEphdmEtYmFzZWQgdHJhZGVtYXJrcyBhcmUgdHJhZGVtYXJrcyBvZiBPcmFjbGUgQ29ycG9yYXRpb24gaW4gdGhlIFVuaXRlZCBTdGF0ZXMsIG90aGVyIGNvdW50cmllcywgb3IgYm90aC48L3NtYWxsPjwvcD4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZmVhdHVyZS8ucHJvamVjdCBiL2ZlYXR1cmVzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZmVhdHVyZS8ucHJvamVjdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZmYyZjI3Ci0tLSAvZGV2L251bGwKKysrIGIvZmVhdHVyZXMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5mZWF0dXJlLy5wcm9qZWN0CkBAIC0wLDAgKzEsMTcgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8cHJvamVjdERlc2NyaXB0aW9uPgorCTxuYW1lPm9yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZmVhdHVyZTwvbmFtZT4KKwk8Y29tbWVudD48L2NvbW1lbnQ+CisJPHByb2plY3RzPgorCTwvcHJvamVjdHM+CisJPGJ1aWxkU3BlYz4KKwkJPGJ1aWxkQ29tbWFuZD4KKwkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5GZWF0dXJlQnVpbGRlcjwvbmFtZT4KKwkJCTxhcmd1bWVudHM+CisJCQk8L2FyZ3VtZW50cz4KKwkJPC9idWlsZENvbW1hbmQ+CisJPC9idWlsZFNwZWM+CisJPG5hdHVyZXM+CisJCTxuYXR1cmU+b3JnLmVjbGlwc2UucGRlLkZlYXR1cmVOYXR1cmU8L25hdHVyZT4KKwk8L25hdHVyZXM+Cis8L3Byb2plY3REZXNjcmlwdGlvbj4KZGlmZiAtLWdpdCBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZmVhdHVyZS9idWlsZC5wcm9wZXJ0aWVzIGIvZmVhdHVyZXMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5mZWF0dXJlL2J1aWxkLnByb3BlcnRpZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjc0YWY4NgotLS0gL2Rldi9udWxsCisrKyBiL2ZlYXR1cmVzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZmVhdHVyZS9idWlsZC5wcm9wZXJ0aWVzCkBAIC0wLDAgKzEsNCBAQAorYmluLmluY2x1ZGVzID0gZmVhdHVyZS54bWwsXAorICAgICAgICAgICAgICAgZmVhdHVyZS5wcm9wZXJ0aWVzLFwKKyAgICAgICAgICAgICAgIGVwbC12MTAuaHRtbCxcCisgICAgICAgICAgICAgICBsaWNlbnNlLmh0bWwKZGlmZiAtLWdpdCBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZmVhdHVyZS9lcGwtdjEwLmh0bWwgYi9mZWF0dXJlcy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmZlYXR1cmUvZXBsLXYxMC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVkNGIxOTYKLS0tIC9kZXYvbnVsbAorKysgYi9mZWF0dXJlcy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmZlYXR1cmUvZXBsLXYxMC5odG1sCkBAIC0wLDAgKzEsMzI4IEBACis8aHRtbCB4bWxuczpvPSJ1cm46c2NoZW1hcy1taWNyb3NvZnQtY29tOm9mZmljZTpvZmZpY2UiCit4bWxuczp3PSJ1cm46c2NoZW1hcy1taWNyb3NvZnQtY29tOm9mZmljZTp3b3JkIgoreG1sbnM9Imh0dHA6Ly93d3cudzMub3JnL1RSL1JFQy1odG1sNDAiPgorCis8aGVhZD4KKzxtZXRhIGh0dHAtZXF1aXY9Q29udGVudC1UeXBlIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD13aW5kb3dzLTEyNTIiPgorPG1ldGEgbmFtZT1Qcm9nSWQgY29udGVudD1Xb3JkLkRvY3VtZW50PgorPG1ldGEgbmFtZT1HZW5lcmF0b3IgY29udGVudD0iTWljcm9zb2Z0IFdvcmQgOSI+Cis8bWV0YSBuYW1lPU9yaWdpbmF0b3IgY29udGVudD0iTWljcm9zb2Z0IFdvcmQgOSI+Cis8bGluayByZWw9RmlsZS1MaXN0CitocmVmPSIuL0VjbGlwc2UlMjBFUEwlMjAyMDAzXzExXzEwJTIwRmluYWxfZmlsZXMvZmlsZWxpc3QueG1sIj4KKzx0aXRsZT5FY2xpcHNlIFB1YmxpYyBMaWNlbnNlIC0gVmVyc2lvbiAxLjA8L3RpdGxlPgorPCEtLVtpZiBndGUgbXNvIDldPjx4bWw+CisgPG86RG9jdW1lbnRQcm9wZXJ0aWVzPgorICA8bzpSZXZpc2lvbj4yPC9vOlJldmlzaW9uPgorICA8bzpUb3RhbFRpbWU+MzwvbzpUb3RhbFRpbWU+CisgIDxvOkNyZWF0ZWQ+MjAwNC0wMy0wNVQyMzowMzowMFo8L286Q3JlYXRlZD4KKyAgPG86TGFzdFNhdmVkPjIwMDQtMDMtMDVUMjM6MDM6MDBaPC9vOkxhc3RTYXZlZD4KKyAgPG86UGFnZXM+NDwvbzpQYWdlcz4KKyAgPG86V29yZHM+MTYyNjwvbzpXb3Jkcz4KKyAgPG86Q2hhcmFjdGVycz45MjcwPC9vOkNoYXJhY3RlcnM+CisgICA8bzpMaW5lcz43NzwvbzpMaW5lcz4KKyAgPG86UGFyYWdyYXBocz4xODwvbzpQYXJhZ3JhcGhzPgorICA8bzpDaGFyYWN0ZXJzV2l0aFNwYWNlcz4xMTM4NDwvbzpDaGFyYWN0ZXJzV2l0aFNwYWNlcz4KKyAgPG86VmVyc2lvbj45LjQ0MDI8L286VmVyc2lvbj4KKyA8L286RG9jdW1lbnRQcm9wZXJ0aWVzPgorPC94bWw+PCFbZW5kaWZdLS0+PCEtLVtpZiBndGUgbXNvIDldPjx4bWw+CisgPHc6V29yZERvY3VtZW50PgorICA8dzpUcmFja1JldmlzaW9ucy8+CisgPC93OldvcmREb2N1bWVudD4KKzwveG1sPjwhW2VuZGlmXS0tPgorPHN0eWxlPgorPCEtLQorIC8qIEZvbnQgRGVmaW5pdGlvbnMgKi8KK0Bmb250LWZhY2UKKwl7Zm9udC1mYW1pbHk6VGFob21hOworCXBhbm9zZS0xOjIgMTEgNiA0IDMgNSA0IDQgMiA0OworCW1zby1mb250LWNoYXJzZXQ6MDsKKwltc28tZ2VuZXJpYy1mb250LWZhbWlseTpzd2lzczsKKwltc28tZm9udC1waXRjaDp2YXJpYWJsZTsKKwltc28tZm9udC1zaWduYXR1cmU6NTUzNjc5NDk1IC0yMTQ3NDgzNjQ4IDggMCA2NjA0NyAwO30KKyAvKiBTdHlsZSBEZWZpbml0aW9ucyAqLworcC5Nc29Ob3JtYWwsIGxpLk1zb05vcm1hbCwgZGl2Lk1zb05vcm1hbAorCXttc28tc3R5bGUtcGFyZW50OiIiOworCW1hcmdpbjowaW47CisJbWFyZ2luLWJvdHRvbTouMDAwMXB0OworCW1zby1wYWdpbmF0aW9uOndpZG93LW9ycGhhbjsKKwlmb250LXNpemU6MTIuMHB0OworCWZvbnQtZmFtaWx5OiJUaW1lcyBOZXcgUm9tYW4iOworCW1zby1mYXJlYXN0LWZvbnQtZmFtaWx5OiJUaW1lcyBOZXcgUm9tYW4iO30KK3AKKwl7bWFyZ2luLXJpZ2h0OjBpbjsKKwltc28tbWFyZ2luLXRvcC1hbHQ6YXV0bzsKKwltc28tbWFyZ2luLWJvdHRvbS1hbHQ6YXV0bzsKKwltYXJnaW4tbGVmdDowaW47CisJbXNvLXBhZ2luYXRpb246d2lkb3ctb3JwaGFuOworCWZvbnQtc2l6ZToxMi4wcHQ7CisJZm9udC1mYW1pbHk6IlRpbWVzIE5ldyBSb21hbiI7CisJbXNvLWZhcmVhc3QtZm9udC1mYW1pbHk6IlRpbWVzIE5ldyBSb21hbiI7fQorcC5CYWxsb29uVGV4dCwgbGkuQmFsbG9vblRleHQsIGRpdi5CYWxsb29uVGV4dAorCXttc28tc3R5bGUtbmFtZToiQmFsbG9vbiBUZXh0IjsKKwltYXJnaW46MGluOworCW1hcmdpbi1ib3R0b206LjAwMDFwdDsKKwltc28tcGFnaW5hdGlvbjp3aWRvdy1vcnBoYW47CisJZm9udC1zaXplOjguMHB0OworCWZvbnQtZmFtaWx5OlRhaG9tYTsKKwltc28tZmFyZWFzdC1mb250LWZhbWlseToiVGltZXMgTmV3IFJvbWFuIjt9CitAcGFnZSBTZWN0aW9uMQorCXtzaXplOjguNWluIDExLjBpbjsKKwltYXJnaW46MS4waW4gMS4yNWluIDEuMGluIDEuMjVpbjsKKwltc28taGVhZGVyLW1hcmdpbjouNWluOworCW1zby1mb290ZXItbWFyZ2luOi41aW47CisJbXNvLXBhcGVyLXNvdXJjZTowO30KK2Rpdi5TZWN0aW9uMQorCXtwYWdlOlNlY3Rpb24xO30KKy0tPgorPC9zdHlsZT4KKzwvaGVhZD4KKworPGJvZHkgbGFuZz1FTi1VUyBzdHlsZT0ndGFiLWludGVydmFsOi41aW4nPgorCis8ZGl2IGNsYXNzPVNlY3Rpb24xPgorCis8cCBhbGlnbj1jZW50ZXIgc3R5bGU9J3RleHQtYWxpZ246Y2VudGVyJz48Yj5FY2xpcHNlIFB1YmxpYyBMaWNlbnNlIC0gdiAxLjA8L2I+Cis8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5USEUgQUNDT01QQU5ZSU5HIFBST0dSQU0gSVMgUFJPVklERUQgVU5ERVIKK1RIRSBURVJNUyBPRiBUSElTIEVDTElQU0UgUFVCTElDIExJQ0VOU0UgKCZxdW90O0FHUkVFTUVOVCZxdW90OykuIEFOWSBVU0UsCitSRVBST0RVQ1RJT04gT1IgRElTVFJJQlVUSU9OIE9GIFRIRSBQUk9HUkFNIENPTlNUSVRVVEVTIFJFQ0lQSUVOVCdTIEFDQ0VQVEFOQ0UKK09GIFRISVMgQUdSRUVNRU5ULjwvc3Bhbj4gPC9wPgorCis8cD48Yj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+MS4gREVGSU5JVElPTlM8L3NwYW4+PC9iPiA8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4mcXVvdDtDb250cmlidXRpb24mcXVvdDsgbWVhbnM6PC9zcGFuPiA8L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmEpCitpbiB0aGUgY2FzZSBvZiB0aGUgaW5pdGlhbCBDb250cmlidXRvciwgdGhlIGluaXRpYWwgY29kZSBhbmQgZG9jdW1lbnRhdGlvbgorZGlzdHJpYnV0ZWQgdW5kZXIgdGhpcyBBZ3JlZW1lbnQsIGFuZDxiciBjbGVhcj1sZWZ0PgorYikgaW4gdGhlIGNhc2Ugb2YgZWFjaCBzdWJzZXF1ZW50IENvbnRyaWJ1dG9yOjwvc3Bhbj48L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmkpCitjaGFuZ2VzIHRvIHRoZSBQcm9ncmFtLCBhbmQ8L3NwYW4+PC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5paSkKK2FkZGl0aW9ucyB0byB0aGUgUHJvZ3JhbTs8L3NwYW4+PC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz53aGVyZQorc3VjaCBjaGFuZ2VzIGFuZC9vciBhZGRpdGlvbnMgdG8gdGhlIFByb2dyYW0gb3JpZ2luYXRlIGZyb20gYW5kIGFyZSBkaXN0cmlidXRlZAorYnkgdGhhdCBwYXJ0aWN1bGFyIENvbnRyaWJ1dG9yLiBBIENvbnRyaWJ1dGlvbiAnb3JpZ2luYXRlcycgZnJvbSBhIENvbnRyaWJ1dG9yCitpZiBpdCB3YXMgYWRkZWQgdG8gdGhlIFByb2dyYW0gYnkgc3VjaCBDb250cmlidXRvciBpdHNlbGYgb3IgYW55b25lIGFjdGluZyBvbgorc3VjaCBDb250cmlidXRvcidzIGJlaGFsZi4gQ29udHJpYnV0aW9ucyBkbyBub3QgaW5jbHVkZSBhZGRpdGlvbnMgdG8gdGhlCitQcm9ncmFtIHdoaWNoOiAoaSkgYXJlIHNlcGFyYXRlIG1vZHVsZXMgb2Ygc29mdHdhcmUgZGlzdHJpYnV0ZWQgaW4gY29uanVuY3Rpb24KK3dpdGggdGhlIFByb2dyYW0gdW5kZXIgdGhlaXIgb3duIGxpY2Vuc2UgYWdyZWVtZW50LCBhbmQgKGlpKSBhcmUgbm90IGRlcml2YXRpdmUKK3dvcmtzIG9mIHRoZSBQcm9ncmFtLiA8L3NwYW4+PC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+JnF1b3Q7Q29udHJpYnV0b3ImcXVvdDsgbWVhbnMgYW55IHBlcnNvbiBvcgorZW50aXR5IHRoYXQgZGlzdHJpYnV0ZXMgdGhlIFByb2dyYW0uPC9zcGFuPiA8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4mcXVvdDtMaWNlbnNlZCBQYXRlbnRzICZxdW90OyBtZWFuIHBhdGVudAorY2xhaW1zIGxpY2Vuc2FibGUgYnkgYSBDb250cmlidXRvciB3aGljaCBhcmUgbmVjZXNzYXJpbHkgaW5mcmluZ2VkIGJ5IHRoZSB1c2UKK29yIHNhbGUgb2YgaXRzIENvbnRyaWJ1dGlvbiBhbG9uZSBvciB3aGVuIGNvbWJpbmVkIHdpdGggdGhlIFByb2dyYW0uIDwvc3Bhbj48L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4mcXVvdDtQcm9ncmFtJnF1b3Q7IG1lYW5zIHRoZSBDb250cmlidXRpb25zCitkaXN0cmlidXRlZCBpbiBhY2NvcmRhbmNlIHdpdGggdGhpcyBBZ3JlZW1lbnQuPC9zcGFuPiA8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4mcXVvdDtSZWNpcGllbnQmcXVvdDsgbWVhbnMgYW55b25lIHdobworcmVjZWl2ZXMgdGhlIFByb2dyYW0gdW5kZXIgdGhpcyBBZ3JlZW1lbnQsIGluY2x1ZGluZyBhbGwgQ29udHJpYnV0b3JzLjwvc3Bhbj4gPC9wPgorCis8cD48Yj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+Mi4gR1JBTlQgT0YgUklHSFRTPC9zcGFuPjwvYj4gPC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5hKQorU3ViamVjdCB0byB0aGUgdGVybXMgb2YgdGhpcyBBZ3JlZW1lbnQsIGVhY2ggQ29udHJpYnV0b3IgaGVyZWJ5IGdyYW50cyBSZWNpcGllbnQKK2Egbm9uLWV4Y2x1c2l2ZSwgd29ybGR3aWRlLCByb3lhbHR5LWZyZWUgY29weXJpZ2h0IGxpY2Vuc2UgdG88c3Bhbgorc3R5bGU9J2NvbG9yOnJlZCc+IDwvc3Bhbj5yZXByb2R1Y2UsIHByZXBhcmUgZGVyaXZhdGl2ZSB3b3JrcyBvZiwgcHVibGljbHkKK2Rpc3BsYXksIHB1YmxpY2x5IHBlcmZvcm0sIGRpc3RyaWJ1dGUgYW5kIHN1YmxpY2Vuc2UgdGhlIENvbnRyaWJ1dGlvbiBvZiBzdWNoCitDb250cmlidXRvciwgaWYgYW55LCBhbmQgc3VjaCBkZXJpdmF0aXZlIHdvcmtzLCBpbiBzb3VyY2UgY29kZSBhbmQgb2JqZWN0IGNvZGUKK2Zvcm0uPC9zcGFuPjwvcD4KKworPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YikKK1N1YmplY3QgdG8gdGhlIHRlcm1zIG9mIHRoaXMgQWdyZWVtZW50LCBlYWNoIENvbnRyaWJ1dG9yIGhlcmVieSBncmFudHMKK1JlY2lwaWVudCBhIG5vbi1leGNsdXNpdmUsIHdvcmxkd2lkZSw8c3BhbiBzdHlsZT0nY29sb3I6Z3JlZW4nPiA8L3NwYW4+cm95YWx0eS1mcmVlCitwYXRlbnQgbGljZW5zZSB1bmRlciBMaWNlbnNlZCBQYXRlbnRzIHRvIG1ha2UsIHVzZSwgc2VsbCwgb2ZmZXIgdG8gc2VsbCwgaW1wb3J0CithbmQgb3RoZXJ3aXNlIHRyYW5zZmVyIHRoZSBDb250cmlidXRpb24gb2Ygc3VjaCBDb250cmlidXRvciwgaWYgYW55LCBpbiBzb3VyY2UKK2NvZGUgYW5kIG9iamVjdCBjb2RlIGZvcm0uIFRoaXMgcGF0ZW50IGxpY2Vuc2Ugc2hhbGwgYXBwbHkgdG8gdGhlIGNvbWJpbmF0aW9uCitvZiB0aGUgQ29udHJpYnV0aW9uIGFuZCB0aGUgUHJvZ3JhbSBpZiwgYXQgdGhlIHRpbWUgdGhlIENvbnRyaWJ1dGlvbiBpcyBhZGRlZAorYnkgdGhlIENvbnRyaWJ1dG9yLCBzdWNoIGFkZGl0aW9uIG9mIHRoZSBDb250cmlidXRpb24gY2F1c2VzIHN1Y2ggY29tYmluYXRpb24KK3RvIGJlIGNvdmVyZWQgYnkgdGhlIExpY2Vuc2VkIFBhdGVudHMuIFRoZSBwYXRlbnQgbGljZW5zZSBzaGFsbCBub3QgYXBwbHkgdG8KK2FueSBvdGhlciBjb21iaW5hdGlvbnMgd2hpY2ggaW5jbHVkZSB0aGUgQ29udHJpYnV0aW9uLiBObyBoYXJkd2FyZSBwZXIgc2UgaXMKK2xpY2Vuc2VkIGhlcmV1bmRlci4gPC9zcGFuPjwvcD4KKworPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YykKK1JlY2lwaWVudCB1bmRlcnN0YW5kcyB0aGF0IGFsdGhvdWdoIGVhY2ggQ29udHJpYnV0b3IgZ3JhbnRzIHRoZSBsaWNlbnNlcyB0byBpdHMKK0NvbnRyaWJ1dGlvbnMgc2V0IGZvcnRoIGhlcmVpbiwgbm8gYXNzdXJhbmNlcyBhcmUgcHJvdmlkZWQgYnkgYW55IENvbnRyaWJ1dG9yCit0aGF0IHRoZSBQcm9ncmFtIGRvZXMgbm90IGluZnJpbmdlIHRoZSBwYXRlbnQgb3Igb3RoZXIgaW50ZWxsZWN0dWFsIHByb3BlcnR5CityaWdodHMgb2YgYW55IG90aGVyIGVudGl0eS4gRWFjaCBDb250cmlidXRvciBkaXNjbGFpbXMgYW55IGxpYWJpbGl0eSB0byBSZWNpcGllbnQKK2ZvciBjbGFpbXMgYnJvdWdodCBieSBhbnkgb3RoZXIgZW50aXR5IGJhc2VkIG9uIGluZnJpbmdlbWVudCBvZiBpbnRlbGxlY3R1YWwKK3Byb3BlcnR5IHJpZ2h0cyBvciBvdGhlcndpc2UuIEFzIGEgY29uZGl0aW9uIHRvIGV4ZXJjaXNpbmcgdGhlIHJpZ2h0cyBhbmQKK2xpY2Vuc2VzIGdyYW50ZWQgaGVyZXVuZGVyLCBlYWNoIFJlY2lwaWVudCBoZXJlYnkgYXNzdW1lcyBzb2xlIHJlc3BvbnNpYmlsaXR5Cit0byBzZWN1cmUgYW55IG90aGVyIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgbmVlZGVkLCBpZiBhbnkuIEZvciBleGFtcGxlLAoraWYgYSB0aGlyZCBwYXJ0eSBwYXRlbnQgbGljZW5zZSBpcyByZXF1aXJlZCB0byBhbGxvdyBSZWNpcGllbnQgdG8gZGlzdHJpYnV0ZQordGhlIFByb2dyYW0sIGl0IGlzIFJlY2lwaWVudCdzIHJlc3BvbnNpYmlsaXR5IHRvIGFjcXVpcmUgdGhhdCBsaWNlbnNlIGJlZm9yZQorZGlzdHJpYnV0aW5nIHRoZSBQcm9ncmFtLjwvc3Bhbj48L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmQpCitFYWNoIENvbnRyaWJ1dG9yIHJlcHJlc2VudHMgdGhhdCB0byBpdHMga25vd2xlZGdlIGl0IGhhcyBzdWZmaWNpZW50IGNvcHlyaWdodAorcmlnaHRzIGluIGl0cyBDb250cmlidXRpb24sIGlmIGFueSwgdG8gZ3JhbnQgdGhlIGNvcHlyaWdodCBsaWNlbnNlIHNldCBmb3J0aCBpbgordGhpcyBBZ3JlZW1lbnQuIDwvc3Bhbj48L3A+CisKKzxwPjxiPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4zLiBSRVFVSVJFTUVOVFM8L3NwYW4+PC9iPiA8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5BIENvbnRyaWJ1dG9yIG1heSBjaG9vc2UgdG8gZGlzdHJpYnV0ZSB0aGUKK1Byb2dyYW0gaW4gb2JqZWN0IGNvZGUgZm9ybSB1bmRlciBpdHMgb3duIGxpY2Vuc2UgYWdyZWVtZW50LCBwcm92aWRlZCB0aGF0Ojwvc3Bhbj4KKzwvcD4KKworPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YSkKK2l0IGNvbXBsaWVzIHdpdGggdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoaXMgQWdyZWVtZW50OyBhbmQ8L3NwYW4+PC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5iKQoraXRzIGxpY2Vuc2UgYWdyZWVtZW50Ojwvc3Bhbj48L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmkpCitlZmZlY3RpdmVseSBkaXNjbGFpbXMgb24gYmVoYWxmIG9mIGFsbCBDb250cmlidXRvcnMgYWxsIHdhcnJhbnRpZXMgYW5kCitjb25kaXRpb25zLCBleHByZXNzIGFuZCBpbXBsaWVkLCBpbmNsdWRpbmcgd2FycmFudGllcyBvciBjb25kaXRpb25zIG9mIHRpdGxlCithbmQgbm9uLWluZnJpbmdlbWVudCwgYW5kIGltcGxpZWQgd2FycmFudGllcyBvciBjb25kaXRpb25zIG9mIG1lcmNoYW50YWJpbGl0eQorYW5kIGZpdG5lc3MgZm9yIGEgcGFydGljdWxhciBwdXJwb3NlOyA8L3NwYW4+PC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5paSkKK2VmZmVjdGl2ZWx5IGV4Y2x1ZGVzIG9uIGJlaGFsZiBvZiBhbGwgQ29udHJpYnV0b3JzIGFsbCBsaWFiaWxpdHkgZm9yIGRhbWFnZXMsCitpbmNsdWRpbmcgZGlyZWN0LCBpbmRpcmVjdCwgc3BlY2lhbCwgaW5jaWRlbnRhbCBhbmQgY29uc2VxdWVudGlhbCBkYW1hZ2VzLCBzdWNoCithcyBsb3N0IHByb2ZpdHM7IDwvc3Bhbj48L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmlpaSkKK3N0YXRlcyB0aGF0IGFueSBwcm92aXNpb25zIHdoaWNoIGRpZmZlciBmcm9tIHRoaXMgQWdyZWVtZW50IGFyZSBvZmZlcmVkIGJ5IHRoYXQKK0NvbnRyaWJ1dG9yIGFsb25lIGFuZCBub3QgYnkgYW55IG90aGVyIHBhcnR5OyBhbmQ8L3NwYW4+PC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5pdikKK3N0YXRlcyB0aGF0IHNvdXJjZSBjb2RlIGZvciB0aGUgUHJvZ3JhbSBpcyBhdmFpbGFibGUgZnJvbSBzdWNoIENvbnRyaWJ1dG9yLCBhbmQKK2luZm9ybXMgbGljZW5zZWVzIGhvdyB0byBvYnRhaW4gaXQgaW4gYSByZWFzb25hYmxlIG1hbm5lciBvbiBvciB0aHJvdWdoIGEKK21lZGl1bSBjdXN0b21hcmlseSB1c2VkIGZvciBzb2Z0d2FyZSBleGNoYW5nZS48c3BhbiBzdHlsZT0nY29sb3I6Ymx1ZSc+IDwvc3Bhbj48L3NwYW4+PC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+V2hlbiB0aGUgUHJvZ3JhbSBpcyBtYWRlIGF2YWlsYWJsZSBpbiBzb3VyY2UKK2NvZGUgZm9ybTo8L3NwYW4+IDwvcD4KKworPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YSkKK2l0IG11c3QgYmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhpcyBBZ3JlZW1lbnQ7IGFuZCA8L3NwYW4+PC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5iKSBhCitjb3B5IG9mIHRoaXMgQWdyZWVtZW50IG11c3QgYmUgaW5jbHVkZWQgd2l0aCBlYWNoIGNvcHkgb2YgdGhlIFByb2dyYW0uIDwvc3Bhbj48L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5Db250cmlidXRvcnMgbWF5IG5vdCByZW1vdmUgb3IgYWx0ZXIgYW55Citjb3B5cmlnaHQgbm90aWNlcyBjb250YWluZWQgd2l0aGluIHRoZSBQcm9ncmFtLiA8L3NwYW4+PC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+RWFjaCBDb250cmlidXRvciBtdXN0IGlkZW50aWZ5IGl0c2VsZiBhcyB0aGUKK29yaWdpbmF0b3Igb2YgaXRzIENvbnRyaWJ1dGlvbiwgaWYgYW55LCBpbiBhIG1hbm5lciB0aGF0IHJlYXNvbmFibHkgYWxsb3dzCitzdWJzZXF1ZW50IFJlY2lwaWVudHMgdG8gaWRlbnRpZnkgdGhlIG9yaWdpbmF0b3Igb2YgdGhlIENvbnRyaWJ1dGlvbi4gPC9zcGFuPjwvcD4KKworPHA+PGI+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPjQuIENPTU1FUkNJQUwgRElTVFJJQlVUSU9OPC9zcGFuPjwvYj4gPC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+Q29tbWVyY2lhbCBkaXN0cmlidXRvcnMgb2Ygc29mdHdhcmUgbWF5CithY2NlcHQgY2VydGFpbiByZXNwb25zaWJpbGl0aWVzIHdpdGggcmVzcGVjdCB0byBlbmQgdXNlcnMsIGJ1c2luZXNzIHBhcnRuZXJzCithbmQgdGhlIGxpa2UuIFdoaWxlIHRoaXMgbGljZW5zZSBpcyBpbnRlbmRlZCB0byBmYWNpbGl0YXRlIHRoZSBjb21tZXJjaWFsIHVzZQorb2YgdGhlIFByb2dyYW0sIHRoZSBDb250cmlidXRvciB3aG8gaW5jbHVkZXMgdGhlIFByb2dyYW0gaW4gYSBjb21tZXJjaWFsCitwcm9kdWN0IG9mZmVyaW5nIHNob3VsZCBkbyBzbyBpbiBhIG1hbm5lciB3aGljaCBkb2VzIG5vdCBjcmVhdGUgcG90ZW50aWFsCitsaWFiaWxpdHkgZm9yIG90aGVyIENvbnRyaWJ1dG9ycy4gVGhlcmVmb3JlLCBpZiBhIENvbnRyaWJ1dG9yIGluY2x1ZGVzIHRoZQorUHJvZ3JhbSBpbiBhIGNvbW1lcmNpYWwgcHJvZHVjdCBvZmZlcmluZywgc3VjaCBDb250cmlidXRvciAoJnF1b3Q7Q29tbWVyY2lhbAorQ29udHJpYnV0b3ImcXVvdDspIGhlcmVieSBhZ3JlZXMgdG8gZGVmZW5kIGFuZCBpbmRlbW5pZnkgZXZlcnkgb3RoZXIKK0NvbnRyaWJ1dG9yICgmcXVvdDtJbmRlbW5pZmllZCBDb250cmlidXRvciZxdW90OykgYWdhaW5zdCBhbnkgbG9zc2VzLCBkYW1hZ2VzIGFuZAorY29zdHMgKGNvbGxlY3RpdmVseSAmcXVvdDtMb3NzZXMmcXVvdDspIGFyaXNpbmcgZnJvbSBjbGFpbXMsIGxhd3N1aXRzIGFuZCBvdGhlcgorbGVnYWwgYWN0aW9ucyBicm91Z2h0IGJ5IGEgdGhpcmQgcGFydHkgYWdhaW5zdCB0aGUgSW5kZW1uaWZpZWQgQ29udHJpYnV0b3IgdG8KK3RoZSBleHRlbnQgY2F1c2VkIGJ5IHRoZSBhY3RzIG9yIG9taXNzaW9ucyBvZiBzdWNoIENvbW1lcmNpYWwgQ29udHJpYnV0b3IgaW4KK2Nvbm5lY3Rpb24gd2l0aCBpdHMgZGlzdHJpYnV0aW9uIG9mIHRoZSBQcm9ncmFtIGluIGEgY29tbWVyY2lhbCBwcm9kdWN0CitvZmZlcmluZy4gVGhlIG9ibGlnYXRpb25zIGluIHRoaXMgc2VjdGlvbiBkbyBub3QgYXBwbHkgdG8gYW55IGNsYWltcyBvciBMb3NzZXMKK3JlbGF0aW5nIHRvIGFueSBhY3R1YWwgb3IgYWxsZWdlZCBpbnRlbGxlY3R1YWwgcHJvcGVydHkgaW5mcmluZ2VtZW50LiBJbiBvcmRlcgordG8gcXVhbGlmeSwgYW4gSW5kZW1uaWZpZWQgQ29udHJpYnV0b3IgbXVzdDogYSkgcHJvbXB0bHkgbm90aWZ5IHRoZSBDb21tZXJjaWFsCitDb250cmlidXRvciBpbiB3cml0aW5nIG9mIHN1Y2ggY2xhaW0sIGFuZCBiKSBhbGxvdyB0aGUgQ29tbWVyY2lhbCBDb250cmlidXRvcgordG8gY29udHJvbCwgYW5kIGNvb3BlcmF0ZSB3aXRoIHRoZSBDb21tZXJjaWFsIENvbnRyaWJ1dG9yIGluLCB0aGUgZGVmZW5zZSBhbmQKK2FueSByZWxhdGVkIHNldHRsZW1lbnQgbmVnb3RpYXRpb25zLiBUaGUgSW5kZW1uaWZpZWQgQ29udHJpYnV0b3IgbWF5IHBhcnRpY2lwYXRlCitpbiBhbnkgc3VjaCBjbGFpbSBhdCBpdHMgb3duIGV4cGVuc2UuPC9zcGFuPiA8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5Gb3IgZXhhbXBsZSwgYSBDb250cmlidXRvciBtaWdodCBpbmNsdWRlIHRoZQorUHJvZ3JhbSBpbiBhIGNvbW1lcmNpYWwgcHJvZHVjdCBvZmZlcmluZywgUHJvZHVjdCBYLiBUaGF0IENvbnRyaWJ1dG9yIGlzIHRoZW4gYQorQ29tbWVyY2lhbCBDb250cmlidXRvci4gSWYgdGhhdCBDb21tZXJjaWFsIENvbnRyaWJ1dG9yIHRoZW4gbWFrZXMgcGVyZm9ybWFuY2UKK2NsYWltcywgb3Igb2ZmZXJzIHdhcnJhbnRpZXMgcmVsYXRlZCB0byBQcm9kdWN0IFgsIHRob3NlIHBlcmZvcm1hbmNlIGNsYWltcyBhbmQKK3dhcnJhbnRpZXMgYXJlIHN1Y2ggQ29tbWVyY2lhbCBDb250cmlidXRvcidzIHJlc3BvbnNpYmlsaXR5IGFsb25lLiBVbmRlciB0aGlzCitzZWN0aW9uLCB0aGUgQ29tbWVyY2lhbCBDb250cmlidXRvciB3b3VsZCBoYXZlIHRvIGRlZmVuZCBjbGFpbXMgYWdhaW5zdCB0aGUKK290aGVyIENvbnRyaWJ1dG9ycyByZWxhdGVkIHRvIHRob3NlIHBlcmZvcm1hbmNlIGNsYWltcyBhbmQgd2FycmFudGllcywgYW5kIGlmIGEKK2NvdXJ0IHJlcXVpcmVzIGFueSBvdGhlciBDb250cmlidXRvciB0byBwYXkgYW55IGRhbWFnZXMgYXMgYSByZXN1bHQsIHRoZQorQ29tbWVyY2lhbCBDb250cmlidXRvciBtdXN0IHBheSB0aG9zZSBkYW1hZ2VzLjwvc3Bhbj4gPC9wPgorCis8cD48Yj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+NS4gTk8gV0FSUkFOVFk8L3NwYW4+PC9iPiA8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5FWENFUFQgQVMgRVhQUkVTU0xZIFNFVCBGT1JUSCBJTiBUSElTCitBR1JFRU1FTlQsIFRIRSBQUk9HUkFNIElTIFBST1ZJREVEIE9OIEFOICZxdW90O0FTIElTJnF1b3Q7IEJBU0lTLCBXSVRIT1VUCitXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIEVJVEhFUiBFWFBSRVNTIE9SIElNUExJRUQgSU5DTFVESU5HLAorV0lUSE9VVCBMSU1JVEFUSU9OLCBBTlkgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIFRJVExFLCBOT04tSU5GUklOR0VNRU5ULAorTUVSQ0hBTlRBQklMSVRZIE9SIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBFYWNoIFJlY2lwaWVudCBpcyBzb2xlbHkKK3Jlc3BvbnNpYmxlIGZvciBkZXRlcm1pbmluZyB0aGUgYXBwcm9wcmlhdGVuZXNzIG9mIHVzaW5nIGFuZCBkaXN0cmlidXRpbmcgdGhlCitQcm9ncmFtIGFuZCBhc3N1bWVzIGFsbCByaXNrcyBhc3NvY2lhdGVkIHdpdGggaXRzIGV4ZXJjaXNlIG9mIHJpZ2h0cyB1bmRlciB0aGlzCitBZ3JlZW1lbnQgLCBpbmNsdWRpbmcgYnV0IG5vdCBsaW1pdGVkIHRvIHRoZSByaXNrcyBhbmQgY29zdHMgb2YgcHJvZ3JhbSBlcnJvcnMsCitjb21wbGlhbmNlIHdpdGggYXBwbGljYWJsZSBsYXdzLCBkYW1hZ2UgdG8gb3IgbG9zcyBvZiBkYXRhLCBwcm9ncmFtcyBvcgorZXF1aXBtZW50LCBhbmQgdW5hdmFpbGFiaWxpdHkgb3IgaW50ZXJydXB0aW9uIG9mIG9wZXJhdGlvbnMuIDwvc3Bhbj48L3A+CisKKzxwPjxiPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz42LiBESVNDTEFJTUVSIE9GIExJQUJJTElUWTwvc3Bhbj48L2I+IDwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkVYQ0VQVCBBUyBFWFBSRVNTTFkgU0VUIEZPUlRIIElOIFRISVMKK0FHUkVFTUVOVCwgTkVJVEhFUiBSRUNJUElFTlQgTk9SIEFOWSBDT05UUklCVVRPUlMgU0hBTEwgSEFWRSBBTlkgTElBQklMSVRZIEZPUgorQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisoSU5DTFVESU5HIFdJVEhPVVQgTElNSVRBVElPTiBMT1NUIFBST0ZJVFMpLCBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcKK05FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT1IgRElTVFJJQlVUSU9OIE9GCitUSEUgUFJPR1JBTSBPUiBUSEUgRVhFUkNJU0UgT0YgQU5ZIFJJR0hUUyBHUkFOVEVEIEhFUkVVTkRFUiwgRVZFTiBJRiBBRFZJU0VEIE9GCitUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLjwvc3Bhbj4gPC9wPgorCis8cD48Yj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+Ny4gR0VORVJBTDwvc3Bhbj48L2I+IDwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPklmIGFueSBwcm92aXNpb24gb2YgdGhpcyBBZ3JlZW1lbnQgaXMgaW52YWxpZAorb3IgdW5lbmZvcmNlYWJsZSB1bmRlciBhcHBsaWNhYmxlIGxhdywgaXQgc2hhbGwgbm90IGFmZmVjdCB0aGUgdmFsaWRpdHkgb3IKK2VuZm9yY2VhYmlsaXR5IG9mIHRoZSByZW1haW5kZXIgb2YgdGhlIHRlcm1zIG9mIHRoaXMgQWdyZWVtZW50LCBhbmQgd2l0aG91dAorZnVydGhlciBhY3Rpb24gYnkgdGhlIHBhcnRpZXMgaGVyZXRvLCBzdWNoIHByb3Zpc2lvbiBzaGFsbCBiZSByZWZvcm1lZCB0byB0aGUKK21pbmltdW0gZXh0ZW50IG5lY2Vzc2FyeSB0byBtYWtlIHN1Y2ggcHJvdmlzaW9uIHZhbGlkIGFuZCBlbmZvcmNlYWJsZS48L3NwYW4+IDwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPklmIFJlY2lwaWVudCBpbnN0aXR1dGVzIHBhdGVudCBsaXRpZ2F0aW9uCithZ2FpbnN0IGFueSBlbnRpdHkgKGluY2x1ZGluZyBhIGNyb3NzLWNsYWltIG9yIGNvdW50ZXJjbGFpbSBpbiBhIGxhd3N1aXQpCithbGxlZ2luZyB0aGF0IHRoZSBQcm9ncmFtIGl0c2VsZiAoZXhjbHVkaW5nIGNvbWJpbmF0aW9ucyBvZiB0aGUgUHJvZ3JhbSB3aXRoCitvdGhlciBzb2Z0d2FyZSBvciBoYXJkd2FyZSkgaW5mcmluZ2VzIHN1Y2ggUmVjaXBpZW50J3MgcGF0ZW50KHMpLCB0aGVuIHN1Y2gKK1JlY2lwaWVudCdzIHJpZ2h0cyBncmFudGVkIHVuZGVyIFNlY3Rpb24gMihiKSBzaGFsbCB0ZXJtaW5hdGUgYXMgb2YgdGhlIGRhdGUKK3N1Y2ggbGl0aWdhdGlvbiBpcyBmaWxlZC4gPC9zcGFuPjwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkFsbCBSZWNpcGllbnQncyByaWdodHMgdW5kZXIgdGhpcyBBZ3JlZW1lbnQKK3NoYWxsIHRlcm1pbmF0ZSBpZiBpdCBmYWlscyB0byBjb21wbHkgd2l0aCBhbnkgb2YgdGhlIG1hdGVyaWFsIHRlcm1zIG9yCitjb25kaXRpb25zIG9mIHRoaXMgQWdyZWVtZW50IGFuZCBkb2VzIG5vdCBjdXJlIHN1Y2ggZmFpbHVyZSBpbiBhIHJlYXNvbmFibGUKK3BlcmlvZCBvZiB0aW1lIGFmdGVyIGJlY29taW5nIGF3YXJlIG9mIHN1Y2ggbm9uY29tcGxpYW5jZS4gSWYgYWxsIFJlY2lwaWVudCdzCityaWdodHMgdW5kZXIgdGhpcyBBZ3JlZW1lbnQgdGVybWluYXRlLCBSZWNpcGllbnQgYWdyZWVzIHRvIGNlYXNlIHVzZSBhbmQKK2Rpc3RyaWJ1dGlvbiBvZiB0aGUgUHJvZ3JhbSBhcyBzb29uIGFzIHJlYXNvbmFibHkgcHJhY3RpY2FibGUuIEhvd2V2ZXIsCitSZWNpcGllbnQncyBvYmxpZ2F0aW9ucyB1bmRlciB0aGlzIEFncmVlbWVudCBhbmQgYW55IGxpY2Vuc2VzIGdyYW50ZWQgYnkKK1JlY2lwaWVudCByZWxhdGluZyB0byB0aGUgUHJvZ3JhbSBzaGFsbCBjb250aW51ZSBhbmQgc3Vydml2ZS4gPC9zcGFuPjwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkV2ZXJ5b25lIGlzIHBlcm1pdHRlZCB0byBjb3B5IGFuZCBkaXN0cmlidXRlCitjb3BpZXMgb2YgdGhpcyBBZ3JlZW1lbnQsIGJ1dCBpbiBvcmRlciB0byBhdm9pZCBpbmNvbnNpc3RlbmN5IHRoZSBBZ3JlZW1lbnQgaXMKK2NvcHlyaWdodGVkIGFuZCBtYXkgb25seSBiZSBtb2RpZmllZCBpbiB0aGUgZm9sbG93aW5nIG1hbm5lci4gVGhlIEFncmVlbWVudAorU3Rld2FyZCByZXNlcnZlcyB0aGUgcmlnaHQgdG8gcHVibGlzaCBuZXcgdmVyc2lvbnMgKGluY2x1ZGluZyByZXZpc2lvbnMpIG9mCit0aGlzIEFncmVlbWVudCBmcm9tIHRpbWUgdG8gdGltZS4gTm8gb25lIG90aGVyIHRoYW4gdGhlIEFncmVlbWVudCBTdGV3YXJkIGhhcwordGhlIHJpZ2h0IHRvIG1vZGlmeSB0aGlzIEFncmVlbWVudC4gVGhlIEVjbGlwc2UgRm91bmRhdGlvbiBpcyB0aGUgaW5pdGlhbAorQWdyZWVtZW50IFN0ZXdhcmQuIFRoZSBFY2xpcHNlIEZvdW5kYXRpb24gbWF5IGFzc2lnbiB0aGUgcmVzcG9uc2liaWxpdHkgdG8KK3NlcnZlIGFzIHRoZSBBZ3JlZW1lbnQgU3Rld2FyZCB0byBhIHN1aXRhYmxlIHNlcGFyYXRlIGVudGl0eS4gRWFjaCBuZXcgdmVyc2lvbgorb2YgdGhlIEFncmVlbWVudCB3aWxsIGJlIGdpdmVuIGEgZGlzdGluZ3Vpc2hpbmcgdmVyc2lvbiBudW1iZXIuIFRoZSBQcm9ncmFtCisoaW5jbHVkaW5nIENvbnRyaWJ1dGlvbnMpIG1heSBhbHdheXMgYmUgZGlzdHJpYnV0ZWQgc3ViamVjdCB0byB0aGUgdmVyc2lvbiBvZgordGhlIEFncmVlbWVudCB1bmRlciB3aGljaCBpdCB3YXMgcmVjZWl2ZWQuIEluIGFkZGl0aW9uLCBhZnRlciBhIG5ldyB2ZXJzaW9uIG9mCit0aGUgQWdyZWVtZW50IGlzIHB1Ymxpc2hlZCwgQ29udHJpYnV0b3IgbWF5IGVsZWN0IHRvIGRpc3RyaWJ1dGUgdGhlIFByb2dyYW0KKyhpbmNsdWRpbmcgaXRzIENvbnRyaWJ1dGlvbnMpIHVuZGVyIHRoZSBuZXcgdmVyc2lvbi4gRXhjZXB0IGFzIGV4cHJlc3NseSBzdGF0ZWQKK2luIFNlY3Rpb25zIDIoYSkgYW5kIDIoYikgYWJvdmUsIFJlY2lwaWVudCByZWNlaXZlcyBubyByaWdodHMgb3IgbGljZW5zZXMgdG8KK3RoZSBpbnRlbGxlY3R1YWwgcHJvcGVydHkgb2YgYW55IENvbnRyaWJ1dG9yIHVuZGVyIHRoaXMgQWdyZWVtZW50LCB3aGV0aGVyCitleHByZXNzbHksIGJ5IGltcGxpY2F0aW9uLCBlc3RvcHBlbCBvciBvdGhlcndpc2UuIEFsbCByaWdodHMgaW4gdGhlIFByb2dyYW0gbm90CitleHByZXNzbHkgZ3JhbnRlZCB1bmRlciB0aGlzIEFncmVlbWVudCBhcmUgcmVzZXJ2ZWQuPC9zcGFuPiA8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5UaGlzIEFncmVlbWVudCBpcyBnb3Zlcm5lZCBieSB0aGUgbGF3cyBvZiB0aGUKK1N0YXRlIG9mIE5ldyBZb3JrIGFuZCB0aGUgaW50ZWxsZWN0dWFsIHByb3BlcnR5IGxhd3Mgb2YgdGhlIFVuaXRlZCBTdGF0ZXMgb2YKK0FtZXJpY2EuIE5vIHBhcnR5IHRvIHRoaXMgQWdyZWVtZW50IHdpbGwgYnJpbmcgYSBsZWdhbCBhY3Rpb24gdW5kZXIgdGhpcworQWdyZWVtZW50IG1vcmUgdGhhbiBvbmUgeWVhciBhZnRlciB0aGUgY2F1c2Ugb2YgYWN0aW9uIGFyb3NlLiBFYWNoIHBhcnR5IHdhaXZlcworaXRzIHJpZ2h0cyB0byBhIGp1cnkgdHJpYWwgaW4gYW55IHJlc3VsdGluZyBsaXRpZ2F0aW9uLjwvc3Bhbj4gPC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWw+PCFbaWYgIXN1cHBvcnRFbXB0eVBhcmFzXT4mbmJzcDs8IVtlbmRpZl0+PG86cD48L286cD48L3A+CisKKzwvZGl2PgorCis8L2JvZHk+CisKKzwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmZlYXR1cmUvZmVhdHVyZS5wcm9wZXJ0aWVzIGIvZmVhdHVyZXMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5mZWF0dXJlL2ZlYXR1cmUucHJvcGVydGllcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZTQ4MWI0Ci0tLSAvZGV2L251bGwKKysrIGIvZmVhdHVyZXMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5mZWF0dXJlL2ZlYXR1cmUucHJvcGVydGllcwpAQCAtMCwwICsxLDE3MyBAQAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBDb3B5cmlnaHQgKGMpIDIwMTEgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisjIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisjIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisjIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisjIAorIyBDb250cmlidXRvcnM6CisjICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgZmVhdHVyZS5wcm9wZXJ0aWVzCisjIGNvbnRhaW5zIGV4dGVybmFsaXplZCBzdHJpbmdzIGZvciBmZWF0dXJlLnhtbAorIyAiJWZvbyIgaW4gZmVhdHVyZS54bWwgY29ycmVzcG9uZHMgdG8gdGhlIGtleSAiZm9vIiBpbiB0aGlzIGZpbGUKKyMgamF2YS5pby5Qcm9wZXJ0aWVzIGZpbGUgKElTTyA4ODU5LTEgd2l0aCAiXCIgZXNjYXBlcykKKyMgVGhpcyBmaWxlIHNob3VsZCBiZSB0cmFuc2xhdGVkLgorCisjICJmZWF0dXJlTmFtZSIgcHJvcGVydHkgLSBuYW1lIG9mIHRoZSBmZWF0dXJlCitmZWF0dXJlTmFtZT1TVEVNIFVuaXQgYW5kIEludGVncmF0aW9uIFRlc3QgQ2FzZXMKKworIyAicHJvdmlkZXJOYW1lIiBwcm9wZXJ0eSAtIG5hbWUgb2YgdGhlIGNvbXBhbnkgdGhhdCBwcm92aWRlcyB0aGUgZmVhdHVyZQorcHJvdmlkZXJOYW1lPUVjbGlwc2Uub3JnCisKKyMgInVwZGF0ZVNpdGVOYW1lIiBwcm9wZXJ0eSAtIGxhYmVsIGZvciB0aGUgdXBkYXRlIHNpdGUKK3VwZGF0ZVNpdGVOYW1lPVNURU0gVXBkYXRlcworCisjICJzZWNvbmRhcnlTaXRlTmFtZSIgcHJvcGVydHkgLSBsYWJlbCBmb3IgdGhlIHNlY29uZGFyeSB1cGRhdGUgc2l0ZQorI3NlY29uZGFyeVVwZGF0ZVNpdGVOYW1lPVNURU0gVXBkYXRlcworCisjICJkZXNjcmlwdGlvbiIgcHJvcGVydHkgLSBkZXNjcmlwdGlvbiBvZiB0aGUgZmVhdHVyZQorZGVzY3JpcHRpb249VW5pdCBhbmQgaW50ZWdyYXRpb24gdGVzdHMgZm9yIFNURU0KKworIyAiY29weXJpZ2h0IiBwcm9wZXJ0eSAtIHRleHQgb2YgdGhlICJGZWF0dXJlIFVwZGF0ZSBDb3B5cmlnaHQiCitjb3B5cmlnaHQ9XAorQ29weXJpZ2h0IChjKSAyMDA3LTIwMTEgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuXG5cCitBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzXG5cCithcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjBcblwKK3doaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0XG5cCitodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbFxuXAorXG5cCitDb250cmlidXRvcnM6XG5cCisgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uXG4KKyMjIyMjIyMjIyMjIyMjIyMgZW5kIG9mIGNvcHlyaWdodCBwcm9wZXJ0eSAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworIyAibGljZW5zZVVSTCIgcHJvcGVydHkgLSBVUkwgb2YgdGhlICJGZWF0dXJlIExpY2Vuc2UiCisjIGRvIG5vdCB0cmFuc2xhdGUgdmFsdWUgLSBqdXN0IGNoYW5nZSB0byBwb2ludCB0byBhIGxvY2FsZS1zcGVjaWZpYyBIVE1MIHBhZ2UKK2xpY2Vuc2VVUkw9bGljZW5zZS5odG1sCisKKyMgImxpY2Vuc2UiIHByb3BlcnR5IC0gdGV4dCBvZiB0aGUgIkZlYXR1cmUgVXBkYXRlIExpY2Vuc2UiCisjIHNob3VsZCBiZSBwbGFpbiB0ZXh0IHZlcnNpb24gb2YgbGljZW5zZSBhZ3JlZW1lbnQgcG9pbnRlZCB0byBiZSAibGljZW5zZVVSTCIKK2xpY2Vuc2U9XAorRWNsaXBzZSBGb3VuZGF0aW9uIFNvZnR3YXJlIFVzZXIgQWdyZWVtZW50XG5cCitBcHJpbCAxNCwgMjAxMFxuXAorXG5cCitVc2FnZSBPZiBDb250ZW50XG5cCitcblwKK1RIRSBFQ0xJUFNFIEZPVU5EQVRJT04gTUFLRVMgQVZBSUxBQkxFIFNPRlRXQVJFLCBET0NVTUVOVEFUSU9OLCBJTkZPUk1BVElPTiBBTkQvT1JcblwKK09USEVSIE1BVEVSSUFMUyBGT1IgT1BFTiBTT1VSQ0UgUFJPSkVDVFMgKENPTExFQ1RJVkVMWSAiQ09OVEVOVCIpLlxuXAorVVNFIE9GIFRIRSBDT05URU5UIElTIEdPVkVSTkVEIEJZIFRIRSBURVJNUyBBTkQgQ09ORElUSU9OUyBPRiBUSElTXG5cCitBR1JFRU1FTlQgQU5EL09SIFRIRSBURVJNUyBBTkQgQ09ORElUSU9OUyBPRiBMSUNFTlNFIEFHUkVFTUVOVFMgT1JcblwKK05PVElDRVMgSU5ESUNBVEVEIE9SIFJFRkVSRU5DRUQgQkVMT1cuICBCWSBVU0lORyBUSEUgQ09OVEVOVCwgWU9VXG5cCitBR1JFRSBUSEFUIFlPVVIgVVNFIE9GIFRIRSBDT05URU5UIElTIEdPVkVSTkVEIEJZIFRISVMgQUdSRUVNRU5UXG5cCitBTkQvT1IgVEhFIFRFUk1TIEFORCBDT05ESVRJT05TIE9GIEFOWSBBUFBMSUNBQkxFIExJQ0VOU0UgQUdSRUVNRU5UU1xuXAorT1IgTk9USUNFUyBJTkRJQ0FURUQgT1IgUkVGRVJFTkNFRCBCRUxPVy4gIElGIFlPVSBETyBOT1QgQUdSRUUgVE8gVEhFXG5cCitURVJNUyBBTkQgQ09ORElUSU9OUyBPRiBUSElTIEFHUkVFTUVOVCBBTkQgVEhFIFRFUk1TIEFORCBDT05ESVRJT05TXG5cCitPRiBBTlkgQVBQTElDQUJMRSBMSUNFTlNFIEFHUkVFTUVOVFMgT1IgTk9USUNFUyBJTkRJQ0FURUQgT1IgUkVGRVJFTkNFRFxuXAorQkVMT1csIFRIRU4gWU9VIE1BWSBOT1QgVVNFIFRIRSBDT05URU5ULlxuXAorXG5cCitBcHBsaWNhYmxlIExpY2Vuc2VzXG5cCitcblwKK1VubGVzcyBvdGhlcndpc2UgaW5kaWNhdGVkLCBhbGwgQ29udGVudCBtYWRlIGF2YWlsYWJsZSBieSB0aGVcblwKK0VjbGlwc2UgRm91bmRhdGlvbiBpcyBwcm92aWRlZCB0byB5b3UgdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mXG5cCit0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMCAoIkVQTCIpLiBBIGNvcHkgb2YgdGhlIEVQTCBpc1xuXAorcHJvdmlkZWQgd2l0aCB0aGlzIENvbnRlbnQgYW5kIGlzIGFsc28gYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sLlxuXAorRm9yIHB1cnBvc2VzIG9mIHRoZSBFUEwsICJQcm9ncmFtIiB3aWxsIG1lYW4gdGhlIENvbnRlbnQuXG5cCitcblwKK0NvbnRlbnQgaW5jbHVkZXMsIGJ1dCBpcyBub3QgbGltaXRlZCB0bywgc291cmNlIGNvZGUsIG9iamVjdCBjb2RlLFxuXAorZG9jdW1lbnRhdGlvbiBhbmQgb3RoZXIgZmlsZXMgbWFpbnRhaW5lZCBpbiB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uIHNvdXJjZSBjb2RlXG5cCityZXBvc2l0b3J5ICgiUmVwb3NpdG9yeSIpIGluIHNvZnR3YXJlIG1vZHVsZXMgKCJNb2R1bGVzIikgYW5kIG1hZGUgYXZhaWxhYmxlXG5cCithcyBkb3dubG9hZGFibGUgYXJjaGl2ZXMgKCJEb3dubG9hZHMiKS5cblwKK1xuXAorICAgICAgIC0gQ29udGVudCBtYXkgYmUgc3RydWN0dXJlZCBhbmQgcGFja2FnZWQgaW50byBtb2R1bGVzIHRvIGZhY2lsaXRhdGUgZGVsaXZlcmluZyxcblwKKyAgICAgICAgIGV4dGVuZGluZywgYW5kIHVwZ3JhZGluZyB0aGUgQ29udGVudC4gVHlwaWNhbCBtb2R1bGVzIG1heSBpbmNsdWRlIHBsdWctaW5zICgiUGx1Zy1pbnMiKSxcblwKKyAgICAgICAgIHBsdWctaW4gZnJhZ21lbnRzICgiRnJhZ21lbnRzIiksIGFuZCBmZWF0dXJlcyAoIkZlYXR1cmVzIikuXG5cCisgICAgICAgLSBFYWNoIFBsdWctaW4gb3IgRnJhZ21lbnQgbWF5IGJlIHBhY2thZ2VkIGFzIGEgc3ViLWRpcmVjdG9yeSBvciBKQVIgKEphdmEoVE0pIEFSY2hpdmUpXG5cCisgICAgICAgICBpbiBhIGRpcmVjdG9yeSBuYW1lZCAicGx1Z2lucyIuXG5cCisgICAgICAgLSBBIEZlYXR1cmUgaXMgYSBidW5kbGUgb2Ygb25lIG9yIG1vcmUgUGx1Zy1pbnMgYW5kL29yIEZyYWdtZW50cyBhbmQgYXNzb2NpYXRlZCBtYXRlcmlhbC5cblwKKyAgICAgICAgIEVhY2ggRmVhdHVyZSBtYXkgYmUgcGFja2FnZWQgYXMgYSBzdWItZGlyZWN0b3J5IGluIGEgZGlyZWN0b3J5IG5hbWVkICJmZWF0dXJlcyIuXG5cCisgICAgICAgICBXaXRoaW4gYSBGZWF0dXJlLCBmaWxlcyBuYW1lZCAiZmVhdHVyZS54bWwiIG1heSBjb250YWluIGEgbGlzdCBvZiB0aGUgbmFtZXMgYW5kIHZlcnNpb25cblwKKyAgICAgICAgIG51bWJlcnMgb2YgdGhlIFBsdWctaW5zIGFuZC9vciBGcmFnbWVudHMgYXNzb2NpYXRlZCB3aXRoIHRoYXQgRmVhdHVyZS5cblwKKyAgICAgICAtIEZlYXR1cmVzIG1heSBhbHNvIGluY2x1ZGUgb3RoZXIgRmVhdHVyZXMgKCJJbmNsdWRlZCBGZWF0dXJlcyIpLiBXaXRoaW4gYSBGZWF0dXJlLCBmaWxlc1xuXAorICAgICAgICAgbmFtZWQgImZlYXR1cmUueG1sIiBtYXkgY29udGFpbiBhIGxpc3Qgb2YgdGhlIG5hbWVzIGFuZCB2ZXJzaW9uIG51bWJlcnMgb2YgSW5jbHVkZWQgRmVhdHVyZXMuXG5cCitcblwKK1RoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBnb3Zlcm5pbmcgUGx1Zy1pbnMgYW5kIEZyYWdtZW50cyBzaG91bGQgYmVcblwKK2NvbnRhaW5lZCBpbiBmaWxlcyBuYW1lZCAiYWJvdXQuaHRtbCIgKCJBYm91dHMiKS4gVGhlIHRlcm1zIGFuZFxuXAorY29uZGl0aW9ucyBnb3Zlcm5pbmcgRmVhdHVyZXMgYW5kIEluY2x1ZGVkIEZlYXR1cmVzIHNob3VsZCBiZSBjb250YWluZWRcblwKK2luIGZpbGVzIG5hbWVkICJsaWNlbnNlLmh0bWwiICgiRmVhdHVyZSBMaWNlbnNlcyIpLiBBYm91dHMgYW5kIEZlYXR1cmVcblwKK0xpY2Vuc2VzIG1heSBiZSBsb2NhdGVkIGluIGFueSBkaXJlY3Rvcnkgb2YgYSBEb3dubG9hZCBvciBNb2R1bGVcblwKK2luY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvIHRoZSBmb2xsb3dpbmcgbG9jYXRpb25zOlxuXAorXG5cCisgICAgICAgLSBUaGUgdG9wLWxldmVsIChyb290KSBkaXJlY3RvcnlcblwKKyAgICAgICAtIFBsdWctaW4gYW5kIEZyYWdtZW50IGRpcmVjdG9yaWVzXG5cCisgICAgICAgLSBJbnNpZGUgUGx1Zy1pbnMgYW5kIEZyYWdtZW50cyBwYWNrYWdlZCBhcyBKQVJzXG5cCisgICAgICAgLSBTdWItZGlyZWN0b3JpZXMgb2YgdGhlIGRpcmVjdG9yeSBuYW1lZCAic3JjIiBvZiBjZXJ0YWluIFBsdWctaW5zXG5cCisgICAgICAgLSBGZWF0dXJlIGRpcmVjdG9yaWVzXG5cCitcblwKK05vdGU6IGlmIGEgRmVhdHVyZSBtYWRlIGF2YWlsYWJsZSBieSB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uIGlzIGluc3RhbGxlZCB1c2luZyB0aGVcblwKK1Byb3Zpc2lvbmluZyBUZWNobm9sb2d5IChhcyBkZWZpbmVkIGJlbG93KSwgeW91IG11c3QgYWdyZWUgdG8gYSBsaWNlbnNlICgiRmVhdHVyZSBcblwKK1VwZGF0ZSBMaWNlbnNlIikgZHVyaW5nIHRoZSBpbnN0YWxsYXRpb24gcHJvY2Vzcy4gSWYgdGhlIEZlYXR1cmUgY29udGFpbnNcblwKK0luY2x1ZGVkIEZlYXR1cmVzLCB0aGUgRmVhdHVyZSBVcGRhdGUgTGljZW5zZSBzaG91bGQgZWl0aGVyIHByb3ZpZGUgeW91XG5cCit3aXRoIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBnb3Zlcm5pbmcgdGhlIEluY2x1ZGVkIEZlYXR1cmVzIG9yIGluZm9ybVxuXAoreW91IHdoZXJlIHlvdSBjYW4gbG9jYXRlIHRoZW0uIEZlYXR1cmUgVXBkYXRlIExpY2Vuc2VzIG1heSBiZSBmb3VuZCBpblxuXAordGhlICJsaWNlbnNlIiBwcm9wZXJ0eSBvZiBmaWxlcyBuYW1lZCAiZmVhdHVyZS5wcm9wZXJ0aWVzIiBmb3VuZCB3aXRoaW4gYSBGZWF0dXJlLlxuXAorU3VjaCBBYm91dHMsIEZlYXR1cmUgTGljZW5zZXMsIGFuZCBGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlcyBjb250YWluIHRoZVxuXAordGVybXMgYW5kIGNvbmRpdGlvbnMgKG9yIHJlZmVyZW5jZXMgdG8gc3VjaCB0ZXJtcyBhbmQgY29uZGl0aW9ucykgdGhhdFxuXAorZ292ZXJuIHlvdXIgdXNlIG9mIHRoZSBhc3NvY2lhdGVkIENvbnRlbnQgaW4gdGhhdCBkaXJlY3RvcnkuXG5cCitcblwKK1RIRSBBQk9VVFMsIEZFQVRVUkUgTElDRU5TRVMsIEFORCBGRUFUVVJFIFVQREFURSBMSUNFTlNFUyBNQVkgUkVGRVJcblwKK1RPIFRIRSBFUEwgT1IgT1RIRVIgTElDRU5TRSBBR1JFRU1FTlRTLCBOT1RJQ0VTIE9SIFRFUk1TIEFORCBDT05ESVRJT05TLlxuXAorU09NRSBPRiBUSEVTRSBPVEhFUiBMSUNFTlNFIEFHUkVFTUVOVFMgTUFZIElOQ0xVREUgKEJVVCBBUkUgTk9UIExJTUlURUQgVE8pOlxuXAorXG5cCisgICAgICAgLSBDb21tb24gUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjAgKGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2NwbC12MTAuaHRtbClcblwKKyAgICAgICAtIEFwYWNoZSBTb2Z0d2FyZSBMaWNlbnNlIDEuMSAoYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFKVxuXAorICAgICAgIC0gQXBhY2hlIFNvZnR3YXJlIExpY2Vuc2UgMi4wIChhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wKVxuXAorICAgICAgIC0gTWV0cm8gTGluayBQdWJsaWMgTGljZW5zZSAxLjAwIChhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5vcGVuZ3JvdXAub3JnL29wZW5tb3RpZi9zdXBwb3J0ZXJzL21ldHJvbGluay9saWNlbnNlLmh0bWwpXG5cCisgICAgICAgLSBNb3ppbGxhIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4xIChhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5tb3ppbGxhLm9yZy9NUEwvTVBMLTEuMS5odG1sKVxuXAorXG5cCitJVCBJUyBZT1VSIE9CTElHQVRJT04gVE8gUkVBRCBBTkQgQUNDRVBUIEFMTCBTVUNIIFRFUk1TIEFORCBDT05ESVRJT05TIFBSSU9SXG5cCitUTyBVU0UgT0YgVEhFIENPTlRFTlQuIElmIG5vIEFib3V0LCBGZWF0dXJlIExpY2Vuc2UsIG9yIEZlYXR1cmUgVXBkYXRlIExpY2Vuc2VcblwKK2lzIHByb3ZpZGVkLCBwbGVhc2UgY29udGFjdCB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uIHRvIGRldGVybWluZSB3aGF0IHRlcm1zIGFuZCBjb25kaXRpb25zXG5cCitnb3Zlcm4gdGhhdCBwYXJ0aWN1bGFyIENvbnRlbnQuXG5cCitcblwKK1xuXFVzZSBvZiBQcm92aXNpb25pbmcgVGVjaG5vbG9neVxuXAorXG5cCitUaGUgRWNsaXBzZSBGb3VuZGF0aW9uIG1ha2VzIGF2YWlsYWJsZSBwcm92aXNpb25pbmcgc29mdHdhcmUsIGV4YW1wbGVzIG9mIHdoaWNoIGluY2x1ZGUsXG5cCitidXQgYXJlIG5vdCBsaW1pdGVkIHRvLCBwMiBhbmQgdGhlIEVjbGlwc2UgVXBkYXRlIE1hbmFnZXIgKCJQcm92aXNpb25pbmcgVGVjaG5vbG9neSIpIGZvclxuXAordGhlIHB1cnBvc2Ugb2YgYWxsb3dpbmcgdXNlcnMgdG8gaW5zdGFsbCBzb2Z0d2FyZSwgZG9jdW1lbnRhdGlvbiwgaW5mb3JtYXRpb24gYW5kL29yXG5cCitvdGhlciBtYXRlcmlhbHMgKGNvbGxlY3RpdmVseSAiSW5zdGFsbGFibGUgU29mdHdhcmUiKS4gVGhpcyBjYXBhYmlsaXR5IGlzIHByb3ZpZGVkIHdpdGhcblwKK3RoZSBpbnRlbnQgb2YgYWxsb3dpbmcgc3VjaCB1c2VycyB0byBpbnN0YWxsLCBleHRlbmQgYW5kIHVwZGF0ZSBFY2xpcHNlLWJhc2VkIHByb2R1Y3RzLlxuXAorSW5mb3JtYXRpb24gYWJvdXQgcGFja2FnaW5nIEluc3RhbGxhYmxlIFNvZnR3YXJlIGlzIGF2YWlsYWJsZSBhdFxuXAoraHR0cDovL2VjbGlwc2Uub3JnL2VxdWlub3gvcDIvcmVwb3NpdG9yeV9wYWNrYWdpbmcuaHRtbCAoIlNwZWNpZmljYXRpb24iKS5cblwKK1xuXAorWW91IG1heSB1c2UgUHJvdmlzaW9uaW5nIFRlY2hub2xvZ3kgdG8gYWxsb3cgb3RoZXIgcGFydGllcyB0byBpbnN0YWxsIEluc3RhbGxhYmxlIFNvZnR3YXJlLlxuXAorWW91IHNoYWxsIGJlIHJlc3BvbnNpYmxlIGZvciBlbmFibGluZyB0aGUgYXBwbGljYWJsZSBsaWNlbnNlIGFncmVlbWVudHMgcmVsYXRpbmcgdG8gdGhlXG5cCitJbnN0YWxsYWJsZSBTb2Z0d2FyZSB0byBiZSBwcmVzZW50ZWQgdG8sIGFuZCBhY2NlcHRlZCBieSwgdGhlIHVzZXJzIG9mIHRoZSBQcm92aXNpb25pbmcgVGVjaG5vbG9neVxuXAoraW4gYWNjb3JkYW5jZSB3aXRoIHRoZSBTcGVjaWZpY2F0aW9uLiBCeSB1c2luZyBQcm92aXNpb25pbmcgVGVjaG5vbG9neSBpbiBzdWNoIGEgbWFubmVyIGFuZFxuXAorbWFraW5nIGl0IGF2YWlsYWJsZSBpbiBhY2NvcmRhbmNlIHdpdGggdGhlIFNwZWNpZmljYXRpb24sIHlvdSBmdXJ0aGVyIGFja25vd2xlZGdlIHlvdXJcblwKK2FncmVlbWVudCB0bywgYW5kIHRoZSBhY3F1aXNpdGlvbiBvZiBhbGwgbmVjZXNzYXJ5IHJpZ2h0cyB0byBwZXJtaXQgdGhlIGZvbGxvd2luZzpcblwKK1xuXAorICAgICAgIDEuIEEgc2VyaWVzIG9mIGFjdGlvbnMgbWF5IG9jY3VyICgiUHJvdmlzaW9uaW5nIFByb2Nlc3MiKSBpbiB3aGljaCBhIHVzZXIgbWF5IGV4ZWN1dGVcblwKKyAgICAgICAgICB0aGUgUHJvdmlzaW9uaW5nIFRlY2hub2xvZ3kgb24gYSBtYWNoaW5lICgiVGFyZ2V0IE1hY2hpbmUiKSB3aXRoIHRoZSBpbnRlbnQgb2YgaW5zdGFsbGluZyxcblwKKyAgICAgICAgICBleHRlbmRpbmcgb3IgdXBkYXRpbmcgdGhlIGZ1bmN0aW9uYWxpdHkgb2YgYW4gRWNsaXBzZS1iYXNlZCBwcm9kdWN0LlxuXAorICAgICAgIDIuIER1cmluZyB0aGUgUHJvdmlzaW9uaW5nIFByb2Nlc3MsIHRoZSBQcm92aXNpb25pbmcgVGVjaG5vbG9neSBtYXkgY2F1c2UgdGhpcmQgcGFydHlcblwKKyAgICAgICAgICBJbnN0YWxsYWJsZSBTb2Z0d2FyZSBvciBhIHBvcnRpb24gdGhlcmVvZiB0byBiZSBhY2Nlc3NlZCBhbmQgY29waWVkIHRvIHRoZSBUYXJnZXQgTWFjaGluZS5cblwKKyAgICAgICAzLiBQdXJzdWFudCB0byB0aGUgU3BlY2lmaWNhdGlvbiwgeW91IHdpbGwgcHJvdmlkZSB0byB0aGUgdXNlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgdGhhdFxuXAorICAgICAgICAgIGdvdmVybiB0aGUgdXNlIG9mIHRoZSBJbnN0YWxsYWJsZSBTb2Z0d2FyZSAoIkluc3RhbGxhYmxlIFNvZnR3YXJlIEFncmVlbWVudCIpIGFuZCBzdWNoXG5cCisgICAgICAgICAgSW5zdGFsbGFibGUgU29mdHdhcmUgQWdyZWVtZW50IHNoYWxsIGJlIGFjY2Vzc2VkIGZyb20gdGhlIFRhcmdldCBNYWNoaW5lIGluIGFjY29yZGFuY2VcblwKKyAgICAgICAgICB3aXRoIHRoZSBTcGVjaWZpY2F0aW9uLiBTdWNoIEluc3RhbGxhYmxlIFNvZnR3YXJlIEFncmVlbWVudCBtdXN0IGluZm9ybSB0aGUgdXNlciBvZiB0aGVcblwKKyAgICAgICAgICB0ZXJtcyBhbmQgY29uZGl0aW9ucyB0aGF0IGdvdmVybiB0aGUgSW5zdGFsbGFibGUgU29mdHdhcmUgYW5kIG11c3Qgc29saWNpdCBhY2NlcHRhbmNlIGJ5XG5cCisgICAgICAgICAgdGhlIGVuZCB1c2VyIGluIHRoZSBtYW5uZXIgcHJlc2NyaWJlZCBpbiBzdWNoIEluc3RhbGxhYmxlIFNvZnR3YXJlIEFncmVlbWVudC4gVXBvbiBzdWNoXG5cCisgICAgICAgICAgaW5kaWNhdGlvbiBvZiBhZ3JlZW1lbnQgYnkgdGhlIHVzZXIsIHRoZSBwcm92aXNpb25pbmcgVGVjaG5vbG9neSB3aWxsIGNvbXBsZXRlIGluc3RhbGxhdGlvblxuXAorICAgICAgICAgIG9mIHRoZSBJbnN0YWxsYWJsZSBTb2Z0d2FyZS5cblwKK1xuXAorQ3J5cHRvZ3JhcGh5XG5cCitcblwKK0NvbnRlbnQgbWF5IGNvbnRhaW4gZW5jcnlwdGlvbiBzb2Z0d2FyZS4gVGhlIGNvdW50cnkgaW4gd2hpY2ggeW91IGFyZVxuXAorY3VycmVudGx5IG1heSBoYXZlIHJlc3RyaWN0aW9ucyBvbiB0aGUgaW1wb3J0LCBwb3NzZXNzaW9uLCBhbmQgdXNlLFxuXAorYW5kL29yIHJlLWV4cG9ydCB0byBhbm90aGVyIGNvdW50cnksIG9mIGVuY3J5cHRpb24gc29mdHdhcmUuIEJFRk9SRVxuXAordXNpbmcgYW55IGVuY3J5cHRpb24gc29mdHdhcmUsIHBsZWFzZSBjaGVjayB0aGUgY291bnRyeSdzIGxhd3MsXG5cCityZWd1bGF0aW9ucyBhbmQgcG9saWNpZXMgY29uY2VybmluZyB0aGUgaW1wb3J0LCBwb3NzZXNzaW9uLCBvciB1c2UsIGFuZFxuXAorcmUtZXhwb3J0IG9mIGVuY3J5cHRpb24gc29mdHdhcmUsIHRvIHNlZSBpZiB0aGlzIGlzIHBlcm1pdHRlZC5cblwKK1xuXAorSmF2YSBhbmQgYWxsIEphdmEtYmFzZWQgdHJhZGVtYXJrcyBhcmUgdHJhZGVtYXJrcyBvZiBPcmFjbGUgQ29ycG9yYXRpb24gaW4gdGhlIFVuaXRlZCBTdGF0ZXMsIG90aGVyIGNvdW50cmllcywgb3IgYm90aC5cbgorIyMjIyMjIyMjIyMgZW5kIG9mIGxpY2Vuc2UgcHJvcGVydHkgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5mZWF0dXJlL2ZlYXR1cmUueG1sIGIvZmVhdHVyZXMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5mZWF0dXJlL2ZlYXR1cmUueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVkNGQxMTkKLS0tIC9kZXYvbnVsbAorKysgYi9mZWF0dXJlcy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmZlYXR1cmUvZmVhdHVyZS54bWwKQEAgLTAsMCArMSwxNjggQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8ZmVhdHVyZQorICAgICAgaWQ9Im9yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZmVhdHVyZSIKKyAgICAgIGxhYmVsPSIlZmVhdHVyZU5hbWUiCisgICAgICB2ZXJzaW9uPSIxLjIuMSIKKyAgICAgIHByb3ZpZGVyLW5hbWU9IiVwcm92aWRlck5hbWUiPgorCisgICA8ZGVzY3JpcHRpb24+CisgICAgICAlZGVzY3JpcHRpb24KKyAgIDwvZGVzY3JpcHRpb24+CisKKyAgIDxjb3B5cmlnaHQ+CisgICAgICAlY29weXJpZ2h0CisgICA8L2NvcHlyaWdodD4KKworICAgPGxpY2Vuc2UgdXJsPSIlbGljZW5zZVVSTCI+CisgICAgICAlbGljZW5zZQorICAgPC9saWNlbnNlPgorCisgICA8dXJsPgorICAgICAgPHVwZGF0ZSBsYWJlbD0iJXVwZGF0ZVNpdGVOYW1lIiB1cmw9Imh0dHA6Ly9kb3dubG9hZC5lY2xpcHNlLm9yZy9zdGVtL3VwZGF0ZS1zaXRlLyIvPgorICAgPC91cmw+CisKKyAgIDxyZXF1aXJlcz4KKyAgICAgIDxpbXBvcnQgcGx1Z2luPSJvcmcuZWNsaXBzZS5lbWYuZWNvcmUiLz4KKyAgICAgIDxpbXBvcnQgcGx1Z2luPSJvcmcuanVuaXQiLz4KKyAgICAgIDxpbXBvcnQgcGx1Z2luPSJvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzIi8+CisgICAgICA8aW1wb3J0IHBsdWdpbj0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlIi8+CisgICAgICA8aW1wb3J0IHBsdWdpbj0ib3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5hdXRvbWF0aWNleHBlcmltZW50Ii8+CisgICAgICA8aW1wb3J0IHBsdWdpbj0ib3JnLmVjbGlwc2UuY29yZS5ydW50aW1lIi8+CisgICAgICA8aW1wb3J0IHBsdWdpbj0ib3JnLmVjbGlwc2Uuc3RlbS5zb2x2ZXJzLmZkIi8+CisgICAgICA8aW1wb3J0IHBsdWdpbj0ib3JnLmVjbGlwc2Uuc3RlbS5qb2JzIiB2ZXJzaW9uPSIxLjEuMCIgbWF0Y2g9ImdyZWF0ZXJPckVxdWFsIi8+CisgICAgICA8aW1wb3J0IHBsdWdpbj0ib3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzIiB2ZXJzaW9uPSIxLjEuMCIgbWF0Y2g9ImdyZWF0ZXJPckVxdWFsIi8+CisgICAgICA8aW1wb3J0IHBsdWdpbj0ib3JnLmVjbGlwc2Uuc3RlbS51dGlsLmxvZ2dlcnMiIHZlcnNpb249IjEuMS4wIiBtYXRjaD0iZ3JlYXRlck9yRXF1YWwiLz4KKyAgICAgIDxpbXBvcnQgcGx1Z2luPSJvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzIiB2ZXJzaW9uPSIxLjEuMCIgbWF0Y2g9ImdyZWF0ZXJPckVxdWFsIi8+CisgICAgICA8aW1wb3J0IHBsdWdpbj0ib3JnLmVjbGlwc2Uuc3RlbS51aSIvPgorICAgICAgPGltcG9ydCBwbHVnaW49Im9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzIi8+CisgICAgICA8aW1wb3J0IHBsdWdpbj0ib3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucyIvPgorICAgICAgPGltcG9ydCBwbHVnaW49Im9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5mb3JjaW5nIi8+CisgICAgICA8aW1wb3J0IHBsdWdpbj0ib3JnLmVjbGlwc2UuZW1mLmVjb3JlLnhtaSIvPgorICAgICAgPGltcG9ydCBwbHVnaW49Im9yZy5lY2xpcHNlLnVpIi8+CisgICAgICA8aW1wb3J0IHBsdWdpbj0ib3JnLmVjbGlwc2Uuc3RlbS51aS5ncmFwaGVkaXRvciIgdmVyc2lvbj0iMS4xLjEiIG1hdGNoPSJncmVhdGVyT3JFcXVhbCIvPgorICAgICAgPGltcG9ydCBwbHVnaW49Im9yZy5lY2xpcHNlLmVtZi5jb21tb24iLz4KKyAgICAgIDxpbXBvcnQgcGx1Z2luPSJvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMiLz4KKyAgICAgIDxpbXBvcnQgcGx1Z2luPSJvcmcuZWNsaXBzZS5zdGVtLnNvbHZlcnMuZmQiIHZlcnNpb249IjEuMS4wIiBtYXRjaD0iZ3JlYXRlck9yRXF1YWwiLz4KKyAgICAgIDxpbXBvcnQgcGx1Z2luPSJvcmcuZWNsaXBzZS5zdGVtLnRyYW5zcG9ydCIvPgorICAgICAgPGltcG9ydCBwbHVnaW49Im9yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkiLz4KKyAgICAgIDxpbXBvcnQgcGx1Z2luPSJvcmcuZWNsaXBzZS5zdGVtLnVpLmdlIi8+CisgICAgICA8aW1wb3J0IHBsdWdpbj0ib3JnLmVjbGlwc2UuaGVscC51aSIvPgorICAgICAgPGltcG9ydCBwbHVnaW49Im9yZy5lY2xpcHNlLmVtZi5lY29yZS5lZGl0Ii8+CisgICAgICA8aW1wb3J0IHBsdWdpbj0ib3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4dGVybmFsZGF0YXNvdXJjZSIvPgorICAgPC9yZXF1aXJlcz4KKworICAgPHBsdWdpbgorICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLnN0ZW0udGVzdHMuYXV0b21hdGljZXhwZXJpbWVudCIKKyAgICAgICAgIGRvd25sb2FkLXNpemU9IjAiCisgICAgICAgICBpbnN0YWxsLXNpemU9IjAiCisgICAgICAgICB2ZXJzaW9uPSIwLjAuMCIvPgorCisgICA8cGx1Z2luCisgICAgICAgICBpZD0ib3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlIgorICAgICAgICAgZG93bmxvYWQtc2l6ZT0iMCIKKyAgICAgICAgIGluc3RhbGwtc2l6ZT0iMCIKKyAgICAgICAgIHZlcnNpb249IjAuMC4wIgorICAgICAgICAgdW5wYWNrPSJmYWxzZSIvPgorCisgICA8cGx1Z2luCisgICAgICAgICBpZD0ib3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kZWZpbml0aW9ucyIKKyAgICAgICAgIGRvd25sb2FkLXNpemU9IjAiCisgICAgICAgICBpbnN0YWxsLXNpemU9IjAiCisgICAgICAgICB2ZXJzaW9uPSIwLjAuMCIvPgorCisgICA8cGx1Z2luCisgICAgICAgICBpZD0ib3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kaXNlYXNlbW9kZWxzIgorICAgICAgICAgZG93bmxvYWQtc2l6ZT0iMCIKKyAgICAgICAgIGluc3RhbGwtc2l6ZT0iMCIKKyAgICAgICAgIHZlcnNpb249IjAuMC4wIi8+CisKKyAgIDxwbHVnaW4KKyAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRpc2Vhc2Vtb2RlbHMuZm9yY2luZyIKKyAgICAgICAgIGRvd25sb2FkLXNpemU9IjAiCisgICAgICAgICBpbnN0YWxsLXNpemU9IjAiCisgICAgICAgICB2ZXJzaW9uPSIwLjAuMCIvPgorCisgICA8cGx1Z2luCisgICAgICAgICBpZD0ib3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5ncmFwaGVkaXRvciIKKyAgICAgICAgIGRvd25sb2FkLXNpemU9IjAiCisgICAgICAgICBpbnN0YWxsLXNpemU9IjAiCisgICAgICAgICB2ZXJzaW9uPSIwLjAuMCIvPgorCisgICA8cGx1Z2luCisgICAgICAgICBpZD0ib3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5qb2JzIgorICAgICAgICAgZG93bmxvYWQtc2l6ZT0iMCIKKyAgICAgICAgIGluc3RhbGwtc2l6ZT0iMCIKKyAgICAgICAgIHZlcnNpb249IjAuMC4wIi8+CisKKyAgIDxwbHVnaW4KKyAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnBvcHVsYXRpb25tb2RlbHMiCisgICAgICAgICBkb3dubG9hZC1zaXplPSIwIgorICAgICAgICAgaW5zdGFsbC1zaXplPSIwIgorICAgICAgICAgdmVyc2lvbj0iMC4wLjAiLz4KKworICAgPHBsdWdpbgorICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLnN0ZW0udGVzdHMudHJhbnNwb3J0IgorICAgICAgICAgZG93bmxvYWQtc2l6ZT0iMCIKKyAgICAgICAgIGluc3RhbGwtc2l6ZT0iMCIKKyAgICAgICAgIHZlcnNpb249IjAuMC4wIi8+CisKKyAgIDxwbHVnaW4KKyAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnVpIgorICAgICAgICAgZG93bmxvYWQtc2l6ZT0iMCIKKyAgICAgICAgIGluc3RhbGwtc2l6ZT0iMCIKKyAgICAgICAgIHZlcnNpb249IjAuMC4wIi8+CisKKyAgIDxwbHVnaW4KKyAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnVpLmdlIgorICAgICAgICAgZG93bmxvYWQtc2l6ZT0iMCIKKyAgICAgICAgIGluc3RhbGwtc2l6ZT0iMCIKKyAgICAgICAgIHZlcnNpb249IjAuMC4wIi8+CisKKyAgIDxwbHVnaW4KKyAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwiCisgICAgICAgICBkb3dubG9hZC1zaXplPSIwIgorICAgICAgICAgaW5zdGFsbC1zaXplPSIwIgorICAgICAgICAgdmVyc2lvbj0iMC4wLjAiLz4KKworICAgPHBsdWdpbgorICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGlzZWFzZW1vZGVscy5leHRlcm5hbGRhdGFzb3VyY2UiCisgICAgICAgICBkb3dubG9hZC1zaXplPSIwIgorICAgICAgICAgaW5zdGFsbC1zaXplPSIwIgorICAgICAgICAgdmVyc2lvbj0iMC4wLjAiLz4KKworICAgPHBsdWdpbgorICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGlzZWFzZW1vZGVscy5leGFtcGxlIgorICAgICAgICAgZG93bmxvYWQtc2l6ZT0iMCIKKyAgICAgICAgIGluc3RhbGwtc2l6ZT0iMCIKKyAgICAgICAgIHZlcnNpb249IjAuMC4wIgorICAgICAgICAgdW5wYWNrPSJmYWxzZSIvPgorCisgICA8cGx1Z2luCisgICAgICAgICBpZD0ib3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kaXNlYXNlbW9kZWxzLmV4cGVyaW1lbnRhbCIKKyAgICAgICAgIGRvd25sb2FkLXNpemU9IjAiCisgICAgICAgICBpbnN0YWxsLXNpemU9IjAiCisgICAgICAgICB2ZXJzaW9uPSIwLjAuMCIKKyAgICAgICAgIHVucGFjaz0iZmFsc2UiLz4KKworICAgPHBsdWdpbgorICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGlzZWFzZW1vZGVscy5tdWx0aXBvcHVsYXRpb24iCisgICAgICAgICBkb3dubG9hZC1zaXplPSIwIgorICAgICAgICAgaW5zdGFsbC1zaXplPSIwIgorICAgICAgICAgdmVyc2lvbj0iMC4wLjAiCisgICAgICAgICB1bnBhY2s9ImZhbHNlIi8+CisKKyAgIDxwbHVnaW4KKyAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmdyYXBoZ2VuZXJhdG9ycyIKKyAgICAgICAgIGRvd25sb2FkLXNpemU9IjAiCisgICAgICAgICBpbnN0YWxsLXNpemU9IjAiCisgICAgICAgICB2ZXJzaW9uPSIwLjAuMCIKKyAgICAgICAgIHVucGFjaz0iZmFsc2UiLz4KKworICAgPHBsdWdpbgorICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLnN0ZW0udGVzdHMuaW50ZXJuYWwuZGF0YSIKKyAgICAgICAgIGRvd25sb2FkLXNpemU9IjAiCisgICAgICAgICBpbnN0YWxsLXNpemU9IjAiCisgICAgICAgICB2ZXJzaW9uPSIwLjAuMCIKKyAgICAgICAgIHVucGFjaz0iZmFsc2UiLz4KKworPC9mZWF0dXJlPgpkaWZmIC0tZ2l0IGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5mZWF0dXJlL2xpY2Vuc2UuaHRtbCBiL2ZlYXR1cmVzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZmVhdHVyZS9saWNlbnNlLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzE4NGNhMwotLS0gL2Rldi9udWxsCisrKyBiL2ZlYXR1cmVzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZmVhdHVyZS9saWNlbnNlLmh0bWwKQEAgLTAsMCArMSwxMDcgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IklTTy04ODU5LTEiID8+Cis8IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIFhIVE1MIDEuMCBTdHJpY3QvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwxL0RURC94aHRtbDEtc3RyaWN0LmR0ZCI+Cis8aHRtbCB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCI+Cis8aGVhZD4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTEiIC8+Cis8dGl0bGU+RWNsaXBzZSBGb3VuZGF0aW9uIFNvZnR3YXJlIFVzZXIgQWdyZWVtZW50PC90aXRsZT4KKzwvaGVhZD4KKworPGJvZHkgbGFuZz0iRU4tVVMiPgorPGgyPkVjbGlwc2UgRm91bmRhdGlvbiBTb2Z0d2FyZSBVc2VyIEFncmVlbWVudDwvaDI+Cis8cD5BcHJpbCAxNCwgMjAxMDwvcD4KKworPGgzPlVzYWdlIE9mIENvbnRlbnQ8L2gzPgorCis8cD5USEUgRUNMSVBTRSBGT1VOREFUSU9OIE1BS0VTIEFWQUlMQUJMRSBTT0ZUV0FSRSwgRE9DVU1FTlRBVElPTiwgSU5GT1JNQVRJT04gQU5EL09SIE9USEVSIE1BVEVSSUFMUyBGT1IgT1BFTiBTT1VSQ0UgUFJPSkVDVFMKKyAgIChDT0xMRUNUSVZFTFkgJnF1b3Q7Q09OVEVOVCZxdW90OykuICBVU0UgT0YgVEhFIENPTlRFTlQgSVMgR09WRVJORUQgQlkgVEhFIFRFUk1TIEFORCBDT05ESVRJT05TIE9GIFRISVMgQUdSRUVNRU5UIEFORC9PUiBUSEUgVEVSTVMgQU5ECisgICBDT05ESVRJT05TIE9GIExJQ0VOU0UgQUdSRUVNRU5UUyBPUiBOT1RJQ0VTIElORElDQVRFRCBPUiBSRUZFUkVOQ0VEIEJFTE9XLiAgQlkgVVNJTkcgVEhFIENPTlRFTlQsIFlPVSBBR1JFRSBUSEFUIFlPVVIgVVNFCisgICBPRiBUSEUgQ09OVEVOVCBJUyBHT1ZFUk5FRCBCWSBUSElTIEFHUkVFTUVOVCBBTkQvT1IgVEhFIFRFUk1TIEFORCBDT05ESVRJT05TIE9GIEFOWSBBUFBMSUNBQkxFIExJQ0VOU0UgQUdSRUVNRU5UUyBPUgorICAgTk9USUNFUyBJTkRJQ0FURUQgT1IgUkVGRVJFTkNFRCBCRUxPVy4gIElGIFlPVSBETyBOT1QgQUdSRUUgVE8gVEhFIFRFUk1TIEFORCBDT05ESVRJT05TIE9GIFRISVMgQUdSRUVNRU5UIEFORCBUSEUgVEVSTVMgQU5ECisgICBDT05ESVRJT05TIE9GIEFOWSBBUFBMSUNBQkxFIExJQ0VOU0UgQUdSRUVNRU5UUyBPUiBOT1RJQ0VTIElORElDQVRFRCBPUiBSRUZFUkVOQ0VEIEJFTE9XLCBUSEVOIFlPVSBNQVkgTk9UIFVTRSBUSEUgQ09OVEVOVC48L3A+CisKKzxoMz5BcHBsaWNhYmxlIExpY2Vuc2VzPC9oMz4KKworPHA+VW5sZXNzIG90aGVyd2lzZSBpbmRpY2F0ZWQsIGFsbCBDb250ZW50IG1hZGUgYXZhaWxhYmxlIGJ5IHRoZSBFY2xpcHNlIEZvdW5kYXRpb24gaXMgcHJvdmlkZWQgdG8geW91IHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMAorICAgKCZxdW90O0VQTCZxdW90OykuICBBIGNvcHkgb2YgdGhlIEVQTCBpcyBwcm92aWRlZCB3aXRoIHRoaXMgQ29udGVudCBhbmQgaXMgYWxzbyBhdmFpbGFibGUgYXQgPGEgaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwiPmh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sPC9hPi4KKyAgIEZvciBwdXJwb3NlcyBvZiB0aGUgRVBMLCAmcXVvdDtQcm9ncmFtJnF1b3Q7IHdpbGwgbWVhbiB0aGUgQ29udGVudC48L3A+CisKKzxwPkNvbnRlbnQgaW5jbHVkZXMsIGJ1dCBpcyBub3QgbGltaXRlZCB0bywgc291cmNlIGNvZGUsIG9iamVjdCBjb2RlLCBkb2N1bWVudGF0aW9uIGFuZCBvdGhlciBmaWxlcyBtYWludGFpbmVkIGluIHRoZSBFY2xpcHNlIEZvdW5kYXRpb24gc291cmNlIGNvZGUKKyAgIHJlcG9zaXRvcnkgKCZxdW90O1JlcG9zaXRvcnkmcXVvdDspIGluIHNvZnR3YXJlIG1vZHVsZXMgKCZxdW90O01vZHVsZXMmcXVvdDspIGFuZCBtYWRlIGF2YWlsYWJsZSBhcyBkb3dubG9hZGFibGUgYXJjaGl2ZXMgKCZxdW90O0Rvd25sb2FkcyZxdW90OykuPC9wPgorCis8dWw+CisgICAgICAgPGxpPkNvbnRlbnQgbWF5IGJlIHN0cnVjdHVyZWQgYW5kIHBhY2thZ2VkIGludG8gbW9kdWxlcyB0byBmYWNpbGl0YXRlIGRlbGl2ZXJpbmcsIGV4dGVuZGluZywgYW5kIHVwZ3JhZGluZyB0aGUgQ29udGVudC4gIFR5cGljYWwgbW9kdWxlcyBtYXkgaW5jbHVkZSBwbHVnLWlucyAoJnF1b3Q7UGx1Zy1pbnMmcXVvdDspLCBwbHVnLWluIGZyYWdtZW50cyAoJnF1b3Q7RnJhZ21lbnRzJnF1b3Q7KSwgYW5kIGZlYXR1cmVzICgmcXVvdDtGZWF0dXJlcyZxdW90OykuPC9saT4KKyAgICAgICA8bGk+RWFjaCBQbHVnLWluIG9yIEZyYWdtZW50IG1heSBiZSBwYWNrYWdlZCBhcyBhIHN1Yi1kaXJlY3Rvcnkgb3IgSkFSIChKYXZhJnRyYWRlOyBBUmNoaXZlKSBpbiBhIGRpcmVjdG9yeSBuYW1lZCAmcXVvdDtwbHVnaW5zJnF1b3Q7LjwvbGk+CisgICAgICAgPGxpPkEgRmVhdHVyZSBpcyBhIGJ1bmRsZSBvZiBvbmUgb3IgbW9yZSBQbHVnLWlucyBhbmQvb3IgRnJhZ21lbnRzIGFuZCBhc3NvY2lhdGVkIG1hdGVyaWFsLiAgRWFjaCBGZWF0dXJlIG1heSBiZSBwYWNrYWdlZCBhcyBhIHN1Yi1kaXJlY3RvcnkgaW4gYSBkaXJlY3RvcnkgbmFtZWQgJnF1b3Q7ZmVhdHVyZXMmcXVvdDsuICBXaXRoaW4gYSBGZWF0dXJlLCBmaWxlcyBuYW1lZCAmcXVvdDtmZWF0dXJlLnhtbCZxdW90OyBtYXkgY29udGFpbiBhIGxpc3Qgb2YgdGhlIG5hbWVzIGFuZCB2ZXJzaW9uIG51bWJlcnMgb2YgdGhlIFBsdWctaW5zCisgICAgICBhbmQvb3IgRnJhZ21lbnRzIGFzc29jaWF0ZWQgd2l0aCB0aGF0IEZlYXR1cmUuPC9saT4KKyAgICAgICA8bGk+RmVhdHVyZXMgbWF5IGFsc28gaW5jbHVkZSBvdGhlciBGZWF0dXJlcyAoJnF1b3Q7SW5jbHVkZWQgRmVhdHVyZXMmcXVvdDspLiBXaXRoaW4gYSBGZWF0dXJlLCBmaWxlcyBuYW1lZCAmcXVvdDtmZWF0dXJlLnhtbCZxdW90OyBtYXkgY29udGFpbiBhIGxpc3Qgb2YgdGhlIG5hbWVzIGFuZCB2ZXJzaW9uIG51bWJlcnMgb2YgSW5jbHVkZWQgRmVhdHVyZXMuPC9saT4KKzwvdWw+CisKKzxwPlRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBnb3Zlcm5pbmcgUGx1Zy1pbnMgYW5kIEZyYWdtZW50cyBzaG91bGQgYmUgY29udGFpbmVkIGluIGZpbGVzIG5hbWVkICZxdW90O2Fib3V0Lmh0bWwmcXVvdDsgKCZxdW90O0Fib3V0cyZxdW90OykuIFRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBnb3Zlcm5pbmcgRmVhdHVyZXMgYW5kCitJbmNsdWRlZCBGZWF0dXJlcyBzaG91bGQgYmUgY29udGFpbmVkIGluIGZpbGVzIG5hbWVkICZxdW90O2xpY2Vuc2UuaHRtbCZxdW90OyAoJnF1b3Q7RmVhdHVyZSBMaWNlbnNlcyZxdW90OykuICBBYm91dHMgYW5kIEZlYXR1cmUgTGljZW5zZXMgbWF5IGJlIGxvY2F0ZWQgaW4gYW55IGRpcmVjdG9yeSBvZiBhIERvd25sb2FkIG9yIE1vZHVsZQoraW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG8gdGhlIGZvbGxvd2luZyBsb2NhdGlvbnM6PC9wPgorCis8dWw+CisgICAgICAgPGxpPlRoZSB0b3AtbGV2ZWwgKHJvb3QpIGRpcmVjdG9yeTwvbGk+CisgICAgICAgPGxpPlBsdWctaW4gYW5kIEZyYWdtZW50IGRpcmVjdG9yaWVzPC9saT4KKyAgICAgICA8bGk+SW5zaWRlIFBsdWctaW5zIGFuZCBGcmFnbWVudHMgcGFja2FnZWQgYXMgSkFSczwvbGk+CisgICAgICAgPGxpPlN1Yi1kaXJlY3RvcmllcyBvZiB0aGUgZGlyZWN0b3J5IG5hbWVkICZxdW90O3NyYyZxdW90OyBvZiBjZXJ0YWluIFBsdWctaW5zPC9saT4KKyAgICAgICA8bGk+RmVhdHVyZSBkaXJlY3RvcmllczwvbGk+Cis8L3VsPgorCis8cD5Ob3RlOiBpZiBhIEZlYXR1cmUgbWFkZSBhdmFpbGFibGUgYnkgdGhlIEVjbGlwc2UgRm91bmRhdGlvbiBpcyBpbnN0YWxsZWQgdXNpbmcgdGhlIFByb3Zpc2lvbmluZyBUZWNobm9sb2d5IChhcyBkZWZpbmVkIGJlbG93KSwgeW91IG11c3QgYWdyZWUgdG8gYSBsaWNlbnNlICgmcXVvdDtGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlJnF1b3Q7KSBkdXJpbmcgdGhlCitpbnN0YWxsYXRpb24gcHJvY2Vzcy4gIElmIHRoZSBGZWF0dXJlIGNvbnRhaW5zIEluY2x1ZGVkIEZlYXR1cmVzLCB0aGUgRmVhdHVyZSBVcGRhdGUgTGljZW5zZSBzaG91bGQgZWl0aGVyIHByb3ZpZGUgeW91IHdpdGggdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIGdvdmVybmluZyB0aGUgSW5jbHVkZWQgRmVhdHVyZXMgb3IKK2luZm9ybSB5b3Ugd2hlcmUgeW91IGNhbiBsb2NhdGUgdGhlbS4gIEZlYXR1cmUgVXBkYXRlIExpY2Vuc2VzIG1heSBiZSBmb3VuZCBpbiB0aGUgJnF1b3Q7bGljZW5zZSZxdW90OyBwcm9wZXJ0eSBvZiBmaWxlcyBuYW1lZCAmcXVvdDtmZWF0dXJlLnByb3BlcnRpZXMmcXVvdDsgZm91bmQgd2l0aGluIGEgRmVhdHVyZS4KK1N1Y2ggQWJvdXRzLCBGZWF0dXJlIExpY2Vuc2VzLCBhbmQgRmVhdHVyZSBVcGRhdGUgTGljZW5zZXMgY29udGFpbiB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgKG9yIHJlZmVyZW5jZXMgdG8gc3VjaCB0ZXJtcyBhbmQgY29uZGl0aW9ucykgdGhhdCBnb3Zlcm4geW91ciB1c2Ugb2YgdGhlIGFzc29jaWF0ZWQgQ29udGVudCBpbgordGhhdCBkaXJlY3RvcnkuPC9wPgorCis8cD5USEUgQUJPVVRTLCBGRUFUVVJFIExJQ0VOU0VTLCBBTkQgRkVBVFVSRSBVUERBVEUgTElDRU5TRVMgTUFZIFJFRkVSIFRPIFRIRSBFUEwgT1IgT1RIRVIgTElDRU5TRSBBR1JFRU1FTlRTLCBOT1RJQ0VTIE9SIFRFUk1TIEFORCBDT05ESVRJT05TLiAgU09NRSBPRiBUSEVTRQorT1RIRVIgTElDRU5TRSBBR1JFRU1FTlRTIE1BWSBJTkNMVURFIChCVVQgQVJFIE5PVCBMSU1JVEVEIFRPKTo8L3A+CisKKzx1bD4KKyAgICAgICA8bGk+Q29tbW9uIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4wIChhdmFpbGFibGUgYXQgPGEgaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9jcGwtdjEwLmh0bWwiPmh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvY3BsLXYxMC5odG1sPC9hPik8L2xpPgorICAgICAgIDxsaT5BcGFjaGUgU29mdHdhcmUgTGljZW5zZSAxLjEgKGF2YWlsYWJsZSBhdCA8YSBocmVmPSJodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRSI+aHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0U8L2E+KTwvbGk+CisgICAgICAgPGxpPkFwYWNoZSBTb2Z0d2FyZSBMaWNlbnNlIDIuMCAoYXZhaWxhYmxlIGF0IDxhIGhyZWY9Imh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMCI+aHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wPC9hPik8L2xpPgorICAgICAgIDxsaT5NZXRybyBMaW5rIFB1YmxpYyBMaWNlbnNlIDEuMDAgKGF2YWlsYWJsZSBhdCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW5ncm91cC5vcmcvb3Blbm1vdGlmL3N1cHBvcnRlcnMvbWV0cm9saW5rL2xpY2Vuc2UuaHRtbCI+aHR0cDovL3d3dy5vcGVuZ3JvdXAub3JnL29wZW5tb3RpZi9zdXBwb3J0ZXJzL21ldHJvbGluay9saWNlbnNlLmh0bWw8L2E+KTwvbGk+CisgICAgICAgPGxpPk1vemlsbGEgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjEgKGF2YWlsYWJsZSBhdCA8YSBocmVmPSJodHRwOi8vd3d3Lm1vemlsbGEub3JnL01QTC9NUEwtMS4xLmh0bWwiPmh0dHA6Ly93d3cubW96aWxsYS5vcmcvTVBML01QTC0xLjEuaHRtbDwvYT4pPC9saT4KKzwvdWw+CisKKzxwPklUIElTIFlPVVIgT0JMSUdBVElPTiBUTyBSRUFEIEFORCBBQ0NFUFQgQUxMIFNVQ0ggVEVSTVMgQU5EIENPTkRJVElPTlMgUFJJT1IgVE8gVVNFIE9GIFRIRSBDT05URU5ULiAgSWYgbm8gQWJvdXQsIEZlYXR1cmUgTGljZW5zZSwgb3IgRmVhdHVyZSBVcGRhdGUgTGljZW5zZSBpcyBwcm92aWRlZCwgcGxlYXNlCitjb250YWN0IHRoZSBFY2xpcHNlIEZvdW5kYXRpb24gdG8gZGV0ZXJtaW5lIHdoYXQgdGVybXMgYW5kIGNvbmRpdGlvbnMgZ292ZXJuIHRoYXQgcGFydGljdWxhciBDb250ZW50LjwvcD4KKworCis8aDM+VXNlIG9mIFByb3Zpc2lvbmluZyBUZWNobm9sb2d5PC9oMz4KKworPHA+VGhlIEVjbGlwc2UgRm91bmRhdGlvbiBtYWtlcyBhdmFpbGFibGUgcHJvdmlzaW9uaW5nIHNvZnR3YXJlLCBleGFtcGxlcyBvZiB3aGljaCBpbmNsdWRlLCBidXQgYXJlIG5vdCBsaW1pdGVkIHRvLCBwMiBhbmQgdGhlIEVjbGlwc2UKKyAgIFVwZGF0ZSBNYW5hZ2VyICgmcXVvdDtQcm92aXNpb25pbmcgVGVjaG5vbG9neSZxdW90OykgZm9yIHRoZSBwdXJwb3NlIG9mIGFsbG93aW5nIHVzZXJzIHRvIGluc3RhbGwgc29mdHdhcmUsIGRvY3VtZW50YXRpb24sIGluZm9ybWF0aW9uIGFuZC9vcgorICAgb3RoZXIgbWF0ZXJpYWxzIChjb2xsZWN0aXZlbHkgJnF1b3Q7SW5zdGFsbGFibGUgU29mdHdhcmUmcXVvdDspLiBUaGlzIGNhcGFiaWxpdHkgaXMgcHJvdmlkZWQgd2l0aCB0aGUgaW50ZW50IG9mIGFsbG93aW5nIHN1Y2ggdXNlcnMgdG8KKyAgIGluc3RhbGwsIGV4dGVuZCBhbmQgdXBkYXRlIEVjbGlwc2UtYmFzZWQgcHJvZHVjdHMuIEluZm9ybWF0aW9uIGFib3V0IHBhY2thZ2luZyBJbnN0YWxsYWJsZSBTb2Z0d2FyZSBpcyBhdmFpbGFibGUgYXQgPGEKKyAgICAgICBocmVmPSJodHRwOi8vZWNsaXBzZS5vcmcvZXF1aW5veC9wMi9yZXBvc2l0b3J5X3BhY2thZ2luZy5odG1sIj5odHRwOi8vZWNsaXBzZS5vcmcvZXF1aW5veC9wMi9yZXBvc2l0b3J5X3BhY2thZ2luZy5odG1sPC9hPgorICAgKCZxdW90O1NwZWNpZmljYXRpb24mcXVvdDspLjwvcD4KKworPHA+WW91IG1heSB1c2UgUHJvdmlzaW9uaW5nIFRlY2hub2xvZ3kgdG8gYWxsb3cgb3RoZXIgcGFydGllcyB0byBpbnN0YWxsIEluc3RhbGxhYmxlIFNvZnR3YXJlLiBZb3Ugc2hhbGwgYmUgcmVzcG9uc2libGUgZm9yIGVuYWJsaW5nIHRoZQorICAgYXBwbGljYWJsZSBsaWNlbnNlIGFncmVlbWVudHMgcmVsYXRpbmcgdG8gdGhlIEluc3RhbGxhYmxlIFNvZnR3YXJlIHRvIGJlIHByZXNlbnRlZCB0bywgYW5kIGFjY2VwdGVkIGJ5LCB0aGUgdXNlcnMgb2YgdGhlIFByb3Zpc2lvbmluZyBUZWNobm9sb2d5CisgICBpbiBhY2NvcmRhbmNlIHdpdGggdGhlIFNwZWNpZmljYXRpb24uIEJ5IHVzaW5nIFByb3Zpc2lvbmluZyBUZWNobm9sb2d5IGluIHN1Y2ggYSBtYW5uZXIgYW5kIG1ha2luZyBpdCBhdmFpbGFibGUgaW4gYWNjb3JkYW5jZSB3aXRoIHRoZQorICAgU3BlY2lmaWNhdGlvbiwgeW91IGZ1cnRoZXIgYWNrbm93bGVkZ2UgeW91ciBhZ3JlZW1lbnQgdG8sIGFuZCB0aGUgYWNxdWlzaXRpb24gb2YgYWxsIG5lY2Vzc2FyeSByaWdodHMgdG8gcGVybWl0IHRoZSBmb2xsb3dpbmc6PC9wPgorCis8b2w+CisgICAgICAgPGxpPkEgc2VyaWVzIG9mIGFjdGlvbnMgbWF5IG9jY3VyICgmcXVvdDtQcm92aXNpb25pbmcgUHJvY2VzcyZxdW90OykgaW4gd2hpY2ggYSB1c2VyIG1heSBleGVjdXRlIHRoZSBQcm92aXNpb25pbmcgVGVjaG5vbG9neQorICAgICAgIG9uIGEgbWFjaGluZSAoJnF1b3Q7VGFyZ2V0IE1hY2hpbmUmcXVvdDspIHdpdGggdGhlIGludGVudCBvZiBpbnN0YWxsaW5nLCBleHRlbmRpbmcgb3IgdXBkYXRpbmcgdGhlIGZ1bmN0aW9uYWxpdHkgb2YgYW4gRWNsaXBzZS1iYXNlZAorICAgICAgIHByb2R1Y3QuPC9saT4KKyAgICAgICA8bGk+RHVyaW5nIHRoZSBQcm92aXNpb25pbmcgUHJvY2VzcywgdGhlIFByb3Zpc2lvbmluZyBUZWNobm9sb2d5IG1heSBjYXVzZSB0aGlyZCBwYXJ0eSBJbnN0YWxsYWJsZSBTb2Z0d2FyZSBvciBhIHBvcnRpb24gdGhlcmVvZiB0byBiZQorICAgICAgIGFjY2Vzc2VkIGFuZCBjb3BpZWQgdG8gdGhlIFRhcmdldCBNYWNoaW5lLjwvbGk+CisgICAgICAgPGxpPlB1cnN1YW50IHRvIHRoZSBTcGVjaWZpY2F0aW9uLCB5b3Ugd2lsbCBwcm92aWRlIHRvIHRoZSB1c2VyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyB0aGF0IGdvdmVybiB0aGUgdXNlIG9mIHRoZSBJbnN0YWxsYWJsZQorICAgICAgIFNvZnR3YXJlICgmcXVvdDtJbnN0YWxsYWJsZSBTb2Z0d2FyZSBBZ3JlZW1lbnQmcXVvdDspIGFuZCBzdWNoIEluc3RhbGxhYmxlIFNvZnR3YXJlIEFncmVlbWVudCBzaGFsbCBiZSBhY2Nlc3NlZCBmcm9tIHRoZSBUYXJnZXQKKyAgICAgICBNYWNoaW5lIGluIGFjY29yZGFuY2Ugd2l0aCB0aGUgU3BlY2lmaWNhdGlvbi4gU3VjaCBJbnN0YWxsYWJsZSBTb2Z0d2FyZSBBZ3JlZW1lbnQgbXVzdCBpbmZvcm0gdGhlIHVzZXIgb2YgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIHRoYXQgZ292ZXJuCisgICAgICAgdGhlIEluc3RhbGxhYmxlIFNvZnR3YXJlIGFuZCBtdXN0IHNvbGljaXQgYWNjZXB0YW5jZSBieSB0aGUgZW5kIHVzZXIgaW4gdGhlIG1hbm5lciBwcmVzY3JpYmVkIGluIHN1Y2ggSW5zdGFsbGFibGUgU29mdHdhcmUgQWdyZWVtZW50LiBVcG9uIHN1Y2gKKyAgICAgICBpbmRpY2F0aW9uIG9mIGFncmVlbWVudCBieSB0aGUgdXNlciwgdGhlIHByb3Zpc2lvbmluZyBUZWNobm9sb2d5IHdpbGwgY29tcGxldGUgaW5zdGFsbGF0aW9uIG9mIHRoZSBJbnN0YWxsYWJsZSBTb2Z0d2FyZS48L2xpPgorPC9vbD4KKworPGgzPkNyeXB0b2dyYXBoeTwvaDM+CisKKzxwPkNvbnRlbnQgbWF5IGNvbnRhaW4gZW5jcnlwdGlvbiBzb2Z0d2FyZS4gVGhlIGNvdW50cnkgaW4gd2hpY2ggeW91IGFyZSBjdXJyZW50bHkgbWF5IGhhdmUgcmVzdHJpY3Rpb25zIG9uIHRoZSBpbXBvcnQsIHBvc3Nlc3Npb24sIGFuZCB1c2UsIGFuZC9vciByZS1leHBvcnQgdG8KKyAgIGFub3RoZXIgY291bnRyeSwgb2YgZW5jcnlwdGlvbiBzb2Z0d2FyZS4gQkVGT1JFIHVzaW5nIGFueSBlbmNyeXB0aW9uIHNvZnR3YXJlLCBwbGVhc2UgY2hlY2sgdGhlIGNvdW50cnkncyBsYXdzLCByZWd1bGF0aW9ucyBhbmQgcG9saWNpZXMgY29uY2VybmluZyB0aGUgaW1wb3J0LAorICAgcG9zc2Vzc2lvbiwgb3IgdXNlLCBhbmQgcmUtZXhwb3J0IG9mIGVuY3J5cHRpb24gc29mdHdhcmUsIHRvIHNlZSBpZiB0aGlzIGlzIHBlcm1pdHRlZC48L3A+CisKKzxwPjxzbWFsbD5KYXZhIGFuZCBhbGwgSmF2YS1iYXNlZCB0cmFkZW1hcmtzIGFyZSB0cmFkZW1hcmtzIG9mIE9yYWNsZSBDb3Jwb3JhdGlvbiBpbiB0aGUgVW5pdGVkIFN0YXRlcywgb3RoZXIgY291bnRyaWVzLCBvciBib3RoLjwvc21hbGw+PC9wPgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZGlzZWFzZW1vZGVscy5tb2RlbHMvLmNsYXNzcGF0aCBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmRpc2Vhc2Vtb2RlbHMubW9kZWxzLy5jbGFzc3BhdGgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzA0ZTg2MQotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmRpc2Vhc2Vtb2RlbHMubW9kZWxzLy5jbGFzc3BhdGgKQEAgLTAsMCArMSw3IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPGNsYXNzcGF0aD4KKwk8Y2xhc3NwYXRoZW50cnkga2luZD0ic3JjIiBwYXRoPSJzcmMiLz4KKwk8Y2xhc3NwYXRoZW50cnkga2luZD0iY29uIiBwYXRoPSJvcmcuZWNsaXBzZS5qZHQubGF1bmNoaW5nLkpSRV9DT05UQUlORVIvb3JnLmVjbGlwc2UuamR0LmludGVybmFsLmRlYnVnLnVpLmxhdW5jaGVyLlN0YW5kYXJkVk1UeXBlL0oyU0UtMS41Ii8+CisJPGNsYXNzcGF0aGVudHJ5IGtpbmQ9ImNvbiIgcGF0aD0ib3JnLmVjbGlwc2UucGRlLmNvcmUucmVxdWlyZWRQbHVnaW5zIi8+CisJPGNsYXNzcGF0aGVudHJ5IGtpbmQ9Im91dHB1dCIgcGF0aD0iYmluIi8+Cis8L2NsYXNzcGF0aD4KZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmRpc2Vhc2Vtb2RlbHMubW9kZWxzLy5jdnNpZ25vcmUgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5kaXNlYXNlbW9kZWxzLm1vZGVscy8uY3ZzaWdub3JlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhkNjY4NWIKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5kaXNlYXNlbW9kZWxzLm1vZGVscy8uY3ZzaWdub3JlCkBAIC0wLDAgKzEsMyBAQAorcmVzb3VyY2VzCitwbHVnaW4ucHJvcGVydGllcworcGx1Z2luLnhtbApkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZGlzZWFzZW1vZGVscy5tb2RlbHMvLnByb2plY3QgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5kaXNlYXNlbW9kZWxzLm1vZGVscy8ucHJvamVjdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NjM4YjBmCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZGlzZWFzZW1vZGVscy5tb2RlbHMvLnByb2plY3QKQEAgLTAsMCArMSwyOCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxwcm9qZWN0RGVzY3JpcHRpb24+CisJPG5hbWU+b3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmRpc2Vhc2Vtb2RlbHMubW9kZWxzPC9uYW1lPgorCTxjb21tZW50PjwvY29tbWVudD4KKwk8cHJvamVjdHM+CisJPC9wcm9qZWN0cz4KKwk8YnVpbGRTcGVjPgorCQk8YnVpbGRDb21tYW5kPgorCQkJPG5hbWU+b3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YWJ1aWxkZXI8L25hbWU+CisJCQk8YXJndW1lbnRzPgorCQkJPC9hcmd1bWVudHM+CisJCTwvYnVpbGRDb21tYW5kPgorCQk8YnVpbGRDb21tYW5kPgorCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLk1hbmlmZXN0QnVpbGRlcjwvbmFtZT4KKwkJCTxhcmd1bWVudHM+CisJCQk8L2FyZ3VtZW50cz4KKwkJPC9idWlsZENvbW1hbmQ+CisJCTxidWlsZENvbW1hbmQ+CisJCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuU2NoZW1hQnVpbGRlcjwvbmFtZT4KKwkJCTxhcmd1bWVudHM+CisJCQk8L2FyZ3VtZW50cz4KKwkJPC9idWlsZENvbW1hbmQ+CisJPC9idWlsZFNwZWM+CisJPG5hdHVyZXM+CisJCTxuYXR1cmU+b3JnLmVjbGlwc2UucGRlLlBsdWdpbk5hdHVyZTwvbmF0dXJlPgorCQk8bmF0dXJlPm9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFuYXR1cmU8L25hdHVyZT4KKwk8L25hdHVyZXM+Cis8L3Byb2plY3REZXNjcmlwdGlvbj4KZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmRpc2Vhc2Vtb2RlbHMubW9kZWxzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmRpc2Vhc2Vtb2RlbHMubW9kZWxzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iODc2ZThlCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZGlzZWFzZW1vZGVscy5tb2RlbHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzCkBAIC0wLDAgKzEsMjEgQEAKKyNUdWUgU2VwIDAxIDE3OjAwOjQxIEVEVCAyMDA5CitlY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29kZWdlbi5pbmxpbmVKc3JCeXRlY29kZT1lbmFibGVkCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb2RlZ2VuLnRhcmdldFBsYXRmb3JtPTEuNQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29tcGxpYW5jZT0xLjUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmRvYy5jb21tZW50LnN1cHBvcnQ9ZGlzYWJsZWQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uYXNzZXJ0SWRlbnRpZmllcj1lcnJvcgorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5lbnVtSWRlbnRpZmllcj1lcnJvcgorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbnZhbGlkSmF2YWRvYz13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmludmFsaWRKYXZhZG9jVGFncz1lbmFibGVkCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmludmFsaWRKYXZhZG9jVGFnc0RlcHJlY2F0ZWRSZWY9ZW5hYmxlZAorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbnZhbGlkSmF2YWRvY1RhZ3NOb3RWaXNpYmxlUmVmPWVuYWJsZWQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW52YWxpZEphdmFkb2NUYWdzVmlzaWJpbGl0eT1wdWJsaWMKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0phdmFkb2NDb21tZW50cz13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdKYXZhZG9jQ29tbWVudHNPdmVycmlkaW5nPWVuYWJsZWQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0phdmFkb2NDb21tZW50c1Zpc2liaWxpdHk9cHVibGljCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdKYXZhZG9jVGFnRGVzY3JpcHRpb249cmV0dXJuX3RhZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nSmF2YWRvY1RhZ3M9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nSmF2YWRvY1RhZ3NPdmVycmlkaW5nPWVuYWJsZWQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0phdmFkb2NUYWdzVmlzaWJpbGl0eT1wdWJsaWMKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnNvdXJjZT0xLjUKZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmRpc2Vhc2Vtb2RlbHMubW9kZWxzL01FVEEtSU5GL01BTklGRVNULk1GIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZGlzZWFzZW1vZGVscy5tb2RlbHMvTUVUQS1JTkYvTUFOSUZFU1QuTUYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDU0Yzk5ZQotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmRpc2Vhc2Vtb2RlbHMubW9kZWxzL01FVEEtSU5GL01BTklGRVNULk1GCkBAIC0wLDAgKzEsMTAgQEAKK01hbmlmZXN0LVZlcnNpb246IDEuMAorQnVuZGxlLU1hbmlmZXN0VmVyc2lvbjogMgorQnVuZGxlLU5hbWU6IEdlbmVyYXRlZCBEaXNlYXNlIE1vZGVscyBQbHVnLWluCitCdW5kbGUtU3ltYm9saWNOYW1lOiBvcmcuZWNsaXBzZS5zdGVtLmRhdGEuZGlzZWFzZW1vZGVscy5tb2RlbHM7c2luZ2xldG9uOj10cnVlCitCdW5kbGUtVmVyc2lvbjogMS4yLjEKK0J1bmRsZS1BY3RpdmF0b3I6IG9yZy5lY2xpcHNlLnN0ZW0uZGF0YS5kaXNlYXNlbW9kZWxzLm1vZGVscy5BY3RpdmF0b3IKK1JlcXVpcmUtQnVuZGxlOiBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUKK0J1bmRsZS1SZXF1aXJlZEV4ZWN1dGlvbkVudmlyb25tZW50OiBKMlNFLTEuNQorRXhwb3J0LVBhY2thZ2U6IG9yZy5lY2xpcHNlLnN0ZW0uZGF0YS5kaXNlYXNlbW9kZWxzLm1vZGVscworQnVuZGxlLVZlbmRvcjogRWNsaXBzZS5vcmcKZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmRpc2Vhc2Vtb2RlbHMubW9kZWxzL2J1aWxkLnByb3BlcnRpZXMgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5kaXNlYXNlbW9kZWxzLm1vZGVscy9idWlsZC5wcm9wZXJ0aWVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEwY2JjMWIKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5kaXNlYXNlbW9kZWxzLm1vZGVscy9idWlsZC5wcm9wZXJ0aWVzCkBAIC0wLDAgKzEsOCBAQAorc291cmNlLi4gPSBzcmMvCitvdXRwdXQuLiA9IGJpbi8KK2Jpbi5pbmNsdWRlcyA9IE1FVEEtSU5GLyxcCisgICAgICAgICAgICAgICAuLFwKKyAgICAgICAgICAgICAgIHJlc291cmNlcy8sXAorICAgICAgICAgICAgICAgcGx1Z2luLnhtbCxcCisgICAgICAgICAgICAgICBwbHVnaW4ucHJvcGVydGllcworc3JjLmluY2x1ZGVzID0gcmVzb3VyY2VzLwpkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZGlzZWFzZW1vZGVscy5tb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGF0YS9kaXNlYXNlbW9kZWxzL21vZGVscy9BY3RpdmF0b3IuamF2YSBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmRpc2Vhc2Vtb2RlbHMubW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RhdGEvZGlzZWFzZW1vZGVscy9tb2RlbHMvQWN0aXZhdG9yLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2UzOWU4OAotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmRpc2Vhc2Vtb2RlbHMubW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RhdGEvZGlzZWFzZW1vZGVscy9tb2RlbHMvQWN0aXZhdG9yLmphdmEKQEAgLTAsMCArMSw2NSBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRhdGEuZGlzZWFzZW1vZGVscy5tb2RlbHM7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDkgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBsdWdpbjsKK2ltcG9ydCBvcmcub3NnaS5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dDsKKworLyoqCisgKiBUaGUgYWN0aXZhdG9yIGNsYXNzIGNvbnRyb2xzIHRoZSBwbHVnLWluIGxpZmUgY3ljbGUKKyAqLworQFN1cHByZXNzV2FybmluZ3MoImFsbCIpCitwdWJsaWMgY2xhc3MgQWN0aXZhdG9yIGV4dGVuZHMgUGx1Z2luIHsKKworCS8qKgorCSAqIFRoZSBwbHVnLWluIElECisJICovIAorCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFBMVUdJTl9JRCA9ICJvcmcuZWNsaXBzZS5zdGVtLmRhdGEuZGlzZWFzZW1vZGVscy5tb2RlbHMiOyAvLyROT04tTkxTLTEkCisKKwkvLyBUaGUgc2hhcmVkIGluc3RhbmNlCisJcHJpdmF0ZSBzdGF0aWMgQWN0aXZhdG9yIHBsdWdpbjsKKwkKKwkvKioKKwkgKiBUaGUgY29uc3RydWN0b3IKKwkgKi8KKwlwdWJsaWMgQWN0aXZhdG9yKCkgeworCX0KKworCS8qCisJICogQHNlZSBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGx1Z2lucyNzdGFydChvcmcub3NnaS5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBzdGFydChCdW5kbGVDb250ZXh0IGNvbnRleHQpIHRocm93cyBFeGNlcHRpb24geworCQlzdXBlci5zdGFydChjb250ZXh0KTsKKwkJcGx1Z2luID0gdGhpczsKKwl9CisKKwkvKgorCSAqIChub24tSmF2YWRvYykKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QbHVnaW4jc3RvcChvcmcub3NnaS5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBzdG9wKEJ1bmRsZUNvbnRleHQgY29udGV4dCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCXBsdWdpbiA9IG51bGw7CisJCXN1cGVyLnN0b3AoY29udGV4dCk7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgc2hhcmVkIGluc3RhbmNlCisJICoKKwkgKiBAcmV0dXJuIHRoZSBzaGFyZWQgaW5zdGFuY2UKKwkgKi8KKwlwdWJsaWMgc3RhdGljIEFjdGl2YXRvciBnZXREZWZhdWx0KCkgeworCQlyZXR1cm4gcGx1Z2luOworCX0KKworfSAvLyBBY3RpdmF0b3IKZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmRpc2Vhc2Vtb2RlbHMuc2NlbmFyaW9zLy5jbGFzc3BhdGggYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5kaXNlYXNlbW9kZWxzLnNjZW5hcmlvcy8uY2xhc3NwYXRoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMwNGU4NjEKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5kaXNlYXNlbW9kZWxzLnNjZW5hcmlvcy8uY2xhc3NwYXRoCkBAIC0wLDAgKzEsNyBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxjbGFzc3BhdGg+CisJPGNsYXNzcGF0aGVudHJ5IGtpbmQ9InNyYyIgcGF0aD0ic3JjIi8+CisJPGNsYXNzcGF0aGVudHJ5IGtpbmQ9ImNvbiIgcGF0aD0ib3JnLmVjbGlwc2UuamR0LmxhdW5jaGluZy5KUkVfQ09OVEFJTkVSL29yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC5kZWJ1Zy51aS5sYXVuY2hlci5TdGFuZGFyZFZNVHlwZS9KMlNFLTEuNSIvPgorCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJjb24iIHBhdGg9Im9yZy5lY2xpcHNlLnBkZS5jb3JlLnJlcXVpcmVkUGx1Z2lucyIvPgorCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJvdXRwdXQiIHBhdGg9ImJpbiIvPgorPC9jbGFzc3BhdGg+CmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5kaXNlYXNlbW9kZWxzLnNjZW5hcmlvcy8uY3ZzaWdub3JlIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZGlzZWFzZW1vZGVscy5zY2VuYXJpb3MvLmN2c2lnbm9yZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZDY2ODViCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZGlzZWFzZW1vZGVscy5zY2VuYXJpb3MvLmN2c2lnbm9yZQpAQCAtMCwwICsxLDMgQEAKK3Jlc291cmNlcworcGx1Z2luLnByb3BlcnRpZXMKK3BsdWdpbi54bWwKZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmRpc2Vhc2Vtb2RlbHMuc2NlbmFyaW9zLy5wcm9qZWN0IGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZGlzZWFzZW1vZGVscy5zY2VuYXJpb3MvLnByb2plY3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2U3NTFmZAotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmRpc2Vhc2Vtb2RlbHMuc2NlbmFyaW9zLy5wcm9qZWN0CkBAIC0wLDAgKzEsMjggQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8cHJvamVjdERlc2NyaXB0aW9uPgorCTxuYW1lPm9yZy5lY2xpcHNlLnN0ZW0uZGF0YS5kaXNlYXNlbW9kZWxzLnNjZW5hcmlvczwvbmFtZT4KKwk8Y29tbWVudD48L2NvbW1lbnQ+CisJPHByb2plY3RzPgorCTwvcHJvamVjdHM+CisJPGJ1aWxkU3BlYz4KKwkJPGJ1aWxkQ29tbWFuZD4KKwkJCTxuYW1lPm9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFidWlsZGVyPC9uYW1lPgorCQkJPGFyZ3VtZW50cz4KKwkJCTwvYXJndW1lbnRzPgorCQk8L2J1aWxkQ29tbWFuZD4KKwkJPGJ1aWxkQ29tbWFuZD4KKwkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5NYW5pZmVzdEJ1aWxkZXI8L25hbWU+CisJCQk8YXJndW1lbnRzPgorCQkJPC9hcmd1bWVudHM+CisJCTwvYnVpbGRDb21tYW5kPgorCQk8YnVpbGRDb21tYW5kPgorCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLlNjaGVtYUJ1aWxkZXI8L25hbWU+CisJCQk8YXJndW1lbnRzPgorCQkJPC9hcmd1bWVudHM+CisJCTwvYnVpbGRDb21tYW5kPgorCTwvYnVpbGRTcGVjPgorCTxuYXR1cmVzPgorCQk8bmF0dXJlPm9yZy5lY2xpcHNlLnBkZS5QbHVnaW5OYXR1cmU8L25hdHVyZT4KKwkJPG5hdHVyZT5vcmcuZWNsaXBzZS5qZHQuY29yZS5qYXZhbmF0dXJlPC9uYXR1cmU+CisJPC9uYXR1cmVzPgorPC9wcm9qZWN0RGVzY3JpcHRpb24+CmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5kaXNlYXNlbW9kZWxzLnNjZW5hcmlvcy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5kaXNlYXNlbW9kZWxzLnNjZW5hcmlvcy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjdhZTM0OAotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmRpc2Vhc2Vtb2RlbHMuc2NlbmFyaW9zLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcwpAQCAtMCwwICsxLDIxIEBACisjVHVlIFNlcCAwMSAxNzowMTowMiBFRFQgMjAwOQorZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvZGVnZW4uaW5saW5lSnNyQnl0ZWNvZGU9ZW5hYmxlZAorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29kZWdlbi50YXJnZXRQbGF0Zm9ybT0xLjUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvbXBsaWFuY2U9MS41CitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5kb2MuY29tbWVudC5zdXBwb3J0PWRpc2FibGVkCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmFzc2VydElkZW50aWZpZXI9ZXJyb3IKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZW51bUlkZW50aWZpZXI9ZXJyb3IKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW52YWxpZEphdmFkb2M9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbnZhbGlkSmF2YWRvY1RhZ3M9ZW5hYmxlZAorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbnZhbGlkSmF2YWRvY1RhZ3NEZXByZWNhdGVkUmVmPWVuYWJsZWQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW52YWxpZEphdmFkb2NUYWdzTm90VmlzaWJsZVJlZj1lbmFibGVkCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmludmFsaWRKYXZhZG9jVGFnc1Zpc2liaWxpdHk9cHVibGljCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdKYXZhZG9jQ29tbWVudHM9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nSmF2YWRvY0NvbW1lbnRzT3ZlcnJpZGluZz1lbmFibGVkCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdKYXZhZG9jQ29tbWVudHNWaXNpYmlsaXR5PXB1YmxpYworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nSmF2YWRvY1RhZ0Rlc2NyaXB0aW9uPXJldHVybl90YWcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0phdmFkb2NUYWdzPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0phdmFkb2NUYWdzT3ZlcnJpZGluZz1lbmFibGVkCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdKYXZhZG9jVGFnc1Zpc2liaWxpdHk9cHVibGljCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5zb3VyY2U9MS41CmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5kaXNlYXNlbW9kZWxzLnNjZW5hcmlvcy9NRVRBLUlORi9NQU5JRkVTVC5NRiBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmRpc2Vhc2Vtb2RlbHMuc2NlbmFyaW9zL01FVEEtSU5GL01BTklGRVNULk1GCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc5Njc3ZDgKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5kaXNlYXNlbW9kZWxzLnNjZW5hcmlvcy9NRVRBLUlORi9NQU5JRkVTVC5NRgpAQCAtMCwwICsxLDEyIEBACitNYW5pZmVzdC1WZXJzaW9uOiAxLjAKK0J1bmRsZS1NYW5pZmVzdFZlcnNpb246IDIKK0J1bmRsZS1OYW1lOiBHZW5lcmF0ZWQgRGlzZWFzZSBNb2RlbCBTY2VuYXJpb3MgUGx1Zy1pbgorQnVuZGxlLVN5bWJvbGljTmFtZTogb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmRpc2Vhc2Vtb2RlbHMuc2NlbmFyaW9zO3NpbmdsZXRvbjo9dHJ1ZQorQnVuZGxlLVZlcnNpb246IDEuMi4xCitCdW5kbGUtTG9jYWxpemF0aW9uOiBwbHVnaW4KK0J1bmRsZS1BY3RpdmF0b3I6IG9yZy5lY2xpcHNlLnN0ZW0uZGF0YS5kaXNlYXNlbW9kZWxzLnNjZW5hcmlvcy5BY3RpdmF0b3IKK1JlcXVpcmUtQnVuZGxlOiBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUKK0J1bmRsZS1SZXF1aXJlZEV4ZWN1dGlvbkVudmlyb25tZW50OiBKMlNFLTEuNQorQnVuZGxlLUFjdGl2YXRpb25Qb2xpY3k6IGxhenkKK0V4cG9ydC1QYWNrYWdlOiBvcmcuZWNsaXBzZS5zdGVtLmRhdGEuZGlzZWFzZW1vZGVscy5zY2VuYXJpb3MKK0J1bmRsZS1WZW5kb3I6IEVjbGlwc2Uub3JnCmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5kaXNlYXNlbW9kZWxzLnNjZW5hcmlvcy9idWlsZC5wcm9wZXJ0aWVzIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZGlzZWFzZW1vZGVscy5zY2VuYXJpb3MvYnVpbGQucHJvcGVydGllcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMGNiYzFiCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZGlzZWFzZW1vZGVscy5zY2VuYXJpb3MvYnVpbGQucHJvcGVydGllcwpAQCAtMCwwICsxLDggQEAKK3NvdXJjZS4uID0gc3JjLworb3V0cHV0Li4gPSBiaW4vCitiaW4uaW5jbHVkZXMgPSBNRVRBLUlORi8sXAorICAgICAgICAgICAgICAgLixcCisgICAgICAgICAgICAgICByZXNvdXJjZXMvLFwKKyAgICAgICAgICAgICAgIHBsdWdpbi54bWwsXAorICAgICAgICAgICAgICAgcGx1Z2luLnByb3BlcnRpZXMKK3NyYy5pbmNsdWRlcyA9IHJlc291cmNlcy8KZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmRpc2Vhc2Vtb2RlbHMuc2NlbmFyaW9zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RhdGEvZGlzZWFzZW1vZGVscy9zY2VuYXJpb3MvQWN0aXZhdG9yLmphdmEgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5kaXNlYXNlbW9kZWxzLnNjZW5hcmlvcy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kYXRhL2Rpc2Vhc2Vtb2RlbHMvc2NlbmFyaW9zL0FjdGl2YXRvci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdlMjA0MmQKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5kaXNlYXNlbW9kZWxzLnNjZW5hcmlvcy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kYXRhL2Rpc2Vhc2Vtb2RlbHMvc2NlbmFyaW9zL0FjdGl2YXRvci5qYXZhCkBAIC0wLDAgKzEsNjggQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmRpc2Vhc2Vtb2RlbHMuc2NlbmFyaW9zOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA5IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QbHVnaW47CitpbXBvcnQgb3JnLm9zZ2kuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHQ7CisKKy8qKgorICogVGhlIGFjdGl2YXRvciBjbGFzcyBjb250cm9scyB0aGUgcGx1Zy1pbiBsaWZlIGN5Y2xlCisgKi8KK0BTdXBwcmVzc1dhcm5pbmdzKCJhbGwiKQorcHVibGljIGNsYXNzIEFjdGl2YXRvciBleHRlbmRzIFBsdWdpbiB7CisKKwkvKioKKwkgKiBUaGUgcGx1Zy1pbiBJRAorCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFBMVUdJTl9JRCA9ICJvcmcuZWNsaXBzZS5zdGVtLmRhdGEuZGlzZWFzZW1vZGVscy5zY2VuYXJpb3MiOyAvLyROT04tTkxTLTEkCisKKwkvLyBUaGUgc2hhcmVkIGluc3RhbmNlCisJcHJpdmF0ZSBzdGF0aWMgQWN0aXZhdG9yIHBsdWdpbjsKKworCS8qKgorCSAqIFRoZSBjb25zdHJ1Y3RvcgorCSAqLworCXB1YmxpYyBBY3RpdmF0b3IoKSB7CisJfQorCisJLyoKKwkgKiBAc2VlCisJICogb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBsdWdpbnMjc3RhcnQob3JnLm9zZ2kuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHQpCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgc3RhcnQoQnVuZGxlQ29udGV4dCBjb250ZXh0KSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJc3VwZXIuc3RhcnQoY29udGV4dCk7CisJCXBsdWdpbiA9IHRoaXM7CisJfQorCisJLyoKKwkgKiAobm9uLUphdmFkb2MpCisJICogCisJICogQHNlZQorCSAqIG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QbHVnaW4jc3RvcChvcmcub3NnaS5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBzdG9wKEJ1bmRsZUNvbnRleHQgY29udGV4dCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCXBsdWdpbiA9IG51bGw7CisJCXN1cGVyLnN0b3AoY29udGV4dCk7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgc2hhcmVkIGluc3RhbmNlCisJICogCisJICogQHJldHVybiB0aGUgc2hhcmVkIGluc3RhbmNlCisJICovCisJcHVibGljIHN0YXRpYyBBY3RpdmF0b3IgZ2V0RGVmYXVsdCgpIHsKKwkJcmV0dXJuIHBsdWdpbjsKKwl9CisKK30KZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4YW1wbGUvLmNsYXNzcGF0aCBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4YW1wbGUvLmNsYXNzcGF0aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMDRlODYxCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXhhbXBsZS8uY2xhc3NwYXRoCkBAIC0wLDAgKzEsNyBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxjbGFzc3BhdGg+CisJPGNsYXNzcGF0aGVudHJ5IGtpbmQ9InNyYyIgcGF0aD0ic3JjIi8+CisJPGNsYXNzcGF0aGVudHJ5IGtpbmQ9ImNvbiIgcGF0aD0ib3JnLmVjbGlwc2UuamR0LmxhdW5jaGluZy5KUkVfQ09OVEFJTkVSL29yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC5kZWJ1Zy51aS5sYXVuY2hlci5TdGFuZGFyZFZNVHlwZS9KMlNFLTEuNSIvPgorCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJjb24iIHBhdGg9Im9yZy5lY2xpcHNlLnBkZS5jb3JlLnJlcXVpcmVkUGx1Z2lucyIvPgorCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJvdXRwdXQiIHBhdGg9ImJpbiIvPgorPC9jbGFzc3BhdGg+CmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leGFtcGxlLy5jdnNpZ25vcmUgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leGFtcGxlLy5jdnNpZ25vcmUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGUyN2JlNwotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4YW1wbGUvLmN2c2lnbm9yZQpAQCAtMCwwICsxIEBACit0ZXh0CmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leGFtcGxlLy5wcm9qZWN0IGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXhhbXBsZS8ucHJvamVjdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNDVhZWQwCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXhhbXBsZS8ucHJvamVjdApAQCAtMCwwICsxLDI4IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPHByb2plY3REZXNjcmlwdGlvbj4KKwk8bmFtZT5vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXhhbXBsZTwvbmFtZT4KKwk8Y29tbWVudD48L2NvbW1lbnQ+CisJPHByb2plY3RzPgorCTwvcHJvamVjdHM+CisJPGJ1aWxkU3BlYz4KKwkJPGJ1aWxkQ29tbWFuZD4KKwkJCTxuYW1lPm9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFidWlsZGVyPC9uYW1lPgorCQkJPGFyZ3VtZW50cz4KKwkJCTwvYXJndW1lbnRzPgorCQk8L2J1aWxkQ29tbWFuZD4KKwkJPGJ1aWxkQ29tbWFuZD4KKwkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5NYW5pZmVzdEJ1aWxkZXI8L25hbWU+CisJCQk8YXJndW1lbnRzPgorCQkJPC9hcmd1bWVudHM+CisJCTwvYnVpbGRDb21tYW5kPgorCQk8YnVpbGRDb21tYW5kPgorCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLlNjaGVtYUJ1aWxkZXI8L25hbWU+CisJCQk8YXJndW1lbnRzPgorCQkJPC9hcmd1bWVudHM+CisJCTwvYnVpbGRDb21tYW5kPgorCTwvYnVpbGRTcGVjPgorCTxuYXR1cmVzPgorCQk8bmF0dXJlPm9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFuYXR1cmU8L25hdHVyZT4KKwkJPG5hdHVyZT5vcmcuZWNsaXBzZS5wZGUuUGx1Z2luTmF0dXJlPC9uYXR1cmU+CisJPC9uYXR1cmVzPgorPC9wcm9qZWN0RGVzY3JpcHRpb24+CmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leGFtcGxlLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4YW1wbGUvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU3MTk3MDAKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leGFtcGxlLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcwpAQCAtMCwwICsxLDc4IEBACisjVHVlIE5vdiAyNyAxOToxMTowMSBQU1QgMjAwNworZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvZGVnZW4uaW5saW5lSnNyQnl0ZWNvZGU9ZW5hYmxlZAorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29kZWdlbi50YXJnZXRQbGF0Zm9ybT0xLjUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvZGVnZW4udW51c2VkTG9jYWw9cHJlc2VydmUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvbXBsaWFuY2U9MS41CitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5kZWJ1Zy5saW5lTnVtYmVyPWdlbmVyYXRlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5kZWJ1Zy5sb2NhbFZhcmlhYmxlPWdlbmVyYXRlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5kZWJ1Zy5zb3VyY2VGaWxlPWdlbmVyYXRlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5kb2MuY29tbWVudC5zdXBwb3J0PWRpc2FibGVkCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmFubm90YXRpb25TdXBlckludGVyZmFjZT13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmFzc2VydElkZW50aWZpZXI9ZXJyb3IKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uYXV0b2JveGluZz13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRlcHJlY2F0aW9uPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZGVwcmVjYXRpb25JbkRlcHJlY2F0ZWRDb2RlPWRpc2FibGVkCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRlcHJlY2F0aW9uV2hlbk92ZXJyaWRpbmdEZXByZWNhdGVkTWV0aG9kPWRpc2FibGVkCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRpc2NvdXJhZ2VkUmVmZXJlbmNlPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZW1wdHlTdGF0ZW1lbnQ9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5lbnVtSWRlbnRpZmllcj1lcnJvcgorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5mYWxsdGhyb3VnaENhc2U9aWdub3JlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZhdGFsT3B0aW9uYWxFcnJvcj1lbmFibGVkCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZpZWxkSGlkaW5nPWlnbm9yZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5maW5hbFBhcmFtZXRlckJvdW5kPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZmluYWxseUJsb2NrTm90Q29tcGxldGluZ05vcm1hbGx5PXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZm9yYmlkZGVuUmVmZXJlbmNlPWVycm9yCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmhpZGRlbkNhdGNoQmxvY2s9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbmNvbXBhdGlibGVOb25Jbmhlcml0ZWRJbnRlcmZhY2VNZXRob2Q9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbmNvbXBsZXRlRW51bVN3aXRjaD1pZ25vcmUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW5kaXJlY3RTdGF0aWNBY2Nlc3M9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbnZhbGlkSmF2YWRvYz13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmludmFsaWRKYXZhZG9jVGFncz1lbmFibGVkCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmludmFsaWRKYXZhZG9jVGFnc0RlcHJlY2F0ZWRSZWY9ZW5hYmxlZAorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbnZhbGlkSmF2YWRvY1RhZ3NOb3RWaXNpYmxlUmVmPWVuYWJsZWQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW52YWxpZEphdmFkb2NUYWdzVmlzaWJpbGl0eT1wdWJsaWMKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubG9jYWxWYXJpYWJsZUhpZGluZz1pZ25vcmUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWV0aG9kV2l0aENvbnN0cnVjdG9yTmFtZT13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdEZXByZWNhdGVkQW5ub3RhdGlvbj13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdKYXZhZG9jQ29tbWVudHM9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nSmF2YWRvY0NvbW1lbnRzT3ZlcnJpZGluZz1lbmFibGVkCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdKYXZhZG9jQ29tbWVudHNWaXNpYmlsaXR5PXB1YmxpYworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nSmF2YWRvY1RhZ3M9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nSmF2YWRvY1RhZ3NPdmVycmlkaW5nPWVuYWJsZWQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0phdmFkb2NUYWdzVmlzaWJpbGl0eT1wdWJsaWMKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ092ZXJyaWRlQW5ub3RhdGlvbj1pZ25vcmUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ1NlcmlhbFZlcnNpb249d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5ub0VmZmVjdEFzc2lnbm1lbnQ9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5ub0ltcGxpY2l0U3RyaW5nQ29udmVyc2lvbj13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm5vbkV4dGVybmFsaXplZFN0cmluZ0xpdGVyYWw9aWdub3JlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm51bGxSZWZlcmVuY2U9aWdub3JlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm92ZXJyaWRpbmdQYWNrYWdlRGVmYXVsdE1ldGhvZD13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnBhcmFtZXRlckFzc2lnbm1lbnQ9aWdub3JlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnBvc3NpYmxlQWNjaWRlbnRhbEJvb2xlYW5Bc3NpZ25tZW50PXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ucG90ZW50aWFsTnVsbFJlZmVyZW5jZT1pZ25vcmUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ucmF3VHlwZVJlZmVyZW5jZT13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnJlZHVuZGFudE51bGxDaGVjaz1pZ25vcmUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uc3BlY2lhbFBhcmFtZXRlckhpZGluZ0ZpZWxkPWRpc2FibGVkCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnN0YXRpY0FjY2Vzc1JlY2VpdmVyPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uc3VwcHJlc3NXYXJuaW5ncz1lbmFibGVkCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnN5bnRoZXRpY0FjY2Vzc0VtdWxhdGlvbj13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnR5cGVQYXJhbWV0ZXJIaWRpbmc9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bmNoZWNrZWRUeXBlT3BlcmF0aW9uPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5kb2N1bWVudGVkRW1wdHlCbG9jaz1pZ25vcmUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5oYW5kbGVkV2FybmluZ1Rva2VuPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5uZWNlc3NhcnlFbHNlPWlnbm9yZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bm5lY2Vzc2FyeVR5cGVDaGVjaz13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVucXVhbGlmaWVkRmllbGRBY2Nlc3M9aWdub3JlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZERlY2xhcmVkVGhyb3duRXhjZXB0aW9uPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkRGVjbGFyZWRUaHJvd25FeGNlcHRpb25XaGVuT3ZlcnJpZGluZz1lbmFibGVkCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZEltcG9ydD1pZ25vcmUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkTGFiZWw9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRMb2NhbD1pZ25vcmUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkUGFyYW1ldGVyPWlnbm9yZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRQYXJhbWV0ZXJJbmNsdWRlRG9jQ29tbWVudFJlZmVyZW5jZT1lbmFibGVkCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZFBhcmFtZXRlcldoZW5JbXBsZW1lbnRpbmdBYnN0cmFjdD1lbmFibGVkCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZFBhcmFtZXRlcldoZW5PdmVycmlkaW5nQ29uY3JldGU9ZW5hYmxlZAorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRQcml2YXRlTWVtYmVyPWlnbm9yZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS52YXJhcmdzQXJndW1lbnROZWVkQ2FzdD13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5zb3VyY2U9MS41CmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leGFtcGxlL01FVEEtSU5GL01BTklGRVNULk1GIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXhhbXBsZS9NRVRBLUlORi9NQU5JRkVTVC5NRgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYjRkMjMyCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXhhbXBsZS9NRVRBLUlORi9NQU5JRkVTVC5NRgpAQCAtMCwwICsxLDM5IEBACitNYW5pZmVzdC1WZXJzaW9uOiAxLjAKK0J1bmRsZS1NYW5pZmVzdFZlcnNpb246IDIKK0J1bmRsZS1OYW1lOiAlcGx1Z2luTmFtZQorQnVuZGxlLVN5bWJvbGljTmFtZTogb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4YW1wbGU7c2luZ2xldG9uOj10cnVlCitCdW5kbGUtVmVyc2lvbjogMS4yLjEKK0J1bmRsZS1DbGFzc1BhdGg6IC4KK0J1bmRsZS1BY3RpdmF0b3I6IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leGFtcGxlLnByb3ZpZGVyLkV4YW1wbGVFZGl0UGx1Z2luJEltcGxlbWVudGF0aW9uCitCdW5kbGUtVmVuZG9yOiAlcHJvdmlkZXJOYW1lCitCdW5kbGUtTG9jYWxpemF0aW9uOiBwbHVnaW4KK0J1bmRsZS1SZXF1aXJlZEV4ZWN1dGlvbkVudmlyb25tZW50OiBKMlNFLTEuNQorUmVxdWlyZS1CdW5kbGU6IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZSwKKyBvcmcuZWNsaXBzZS5lbWYuZWNvcmU7dmlzaWJpbGl0eTo9cmVleHBvcnQsCisgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzO3Zpc2liaWxpdHk6PXJlZXhwb3J0LAorIG9yZy5lY2xpcHNlLnN0ZW0uY29yZTt2aXNpYmlsaXR5Oj1yZWV4cG9ydCwKKyBvcmcuZWNsaXBzZS5lbWYuZWRpdDt2aXNpYmlsaXR5Oj1yZWV4cG9ydAorQnVuZGxlLUFjdGl2YXRpb25Qb2xpY3k6IGxhenkKK0V4cG9ydC1QYWNrYWdlOiBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXhhbXBsZTt1c2VzOj0ib3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLG9yZy5lY2xpcHNlLmVtZi5lY29yZSIsCisgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4YW1wbGUuaW1wbDsKKyAgdXNlczo9Im9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZCwKKyAgIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leGFtcGxlLAorICAgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLmltcGwsCisgICBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuaW1wbCwKKyAgIG9yZy5lY2xpcHNlLmVtZi5lY29yZSIsCisgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4YW1wbGUucHJvdmlkZXI7CisgIHVzZXM6PSJvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXhhbXBsZS51dGlsLAorICAgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbiwKKyAgIG9yZy5lY2xpcHNlLmVtZi5jb21tb24udWksCisgICBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQucHJvdmlkZXIsCisgICBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeSwKKyAgIG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLAorICAgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsIiwKKyBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXhhbXBsZS51dGlsOworICB1c2VzOj0ib3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuaW1wbCwKKyAgIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZCwKKyAgIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leGFtcGxlLAorICAgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnksCisgICBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwsCisgICBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLAorICAgb3JnLmVjbGlwc2UuZW1mLmVjb3JlIgpkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXhhbXBsZS9idWlsZC5wcm9wZXJ0aWVzIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXhhbXBsZS9idWlsZC5wcm9wZXJ0aWVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlmYmYzYjkKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leGFtcGxlL2J1aWxkLnByb3BlcnRpZXMKQEAgLTAsMCArMSwxOCBAQAorIyA8Y29weXJpZ2h0PgorIyA8L2NvcHlyaWdodD4KKyMKKyMgJElkJAorCitiaW4uaW5jbHVkZXMgPSAuLFwKKyAgICAgICAgICAgICAgIGljb25zLyxcCisgICAgICAgICAgICAgICBNRVRBLUlORi8sXAorICAgICAgICAgICAgICAgcGx1Z2luLnhtbCxcCisgICAgICAgICAgICAgICBwbHVnaW4ucHJvcGVydGllcyxcCisgICAgICAgICAgICAgICBlcGwtdjEwLmh0bWwsXAorICAgICAgICAgICAgICAgbm90aWNlLmh0bWwsXAorICAgICAgICAgICAgICAgcGx1Z2luX2RlLnByb3BlcnRpZXMsXAorICAgICAgICAgICAgICAgcGx1Z2luX2tyLnByb3BlcnRpZXMsXAorICAgICAgICAgICAgICAgcGx1Z2luX3poLnByb3BlcnRpZXMKK2phcnMuY29tcGlsZS5vcmRlciA9IC4KK3NvdXJjZS4uID0gc3JjLworb3V0cHV0Li4gPSBiaW4vCmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leGFtcGxlL2VwbC12MTAuaHRtbCBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4YW1wbGUvZXBsLXYxMC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVkNGIxOTYKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leGFtcGxlL2VwbC12MTAuaHRtbApAQCAtMCwwICsxLDMyOCBAQAorPGh0bWwgeG1sbnM6bz0idXJuOnNjaGVtYXMtbWljcm9zb2Z0LWNvbTpvZmZpY2U6b2ZmaWNlIgoreG1sbnM6dz0idXJuOnNjaGVtYXMtbWljcm9zb2Z0LWNvbTpvZmZpY2U6d29yZCIKK3htbG5zPSJodHRwOi8vd3d3LnczLm9yZy9UUi9SRUMtaHRtbDQwIj4KKworPGhlYWQ+Cis8bWV0YSBodHRwLWVxdWl2PUNvbnRlbnQtVHlwZSBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9d2luZG93cy0xMjUyIj4KKzxtZXRhIG5hbWU9UHJvZ0lkIGNvbnRlbnQ9V29yZC5Eb2N1bWVudD4KKzxtZXRhIG5hbWU9R2VuZXJhdG9yIGNvbnRlbnQ9Ik1pY3Jvc29mdCBXb3JkIDkiPgorPG1ldGEgbmFtZT1PcmlnaW5hdG9yIGNvbnRlbnQ9Ik1pY3Jvc29mdCBXb3JkIDkiPgorPGxpbmsgcmVsPUZpbGUtTGlzdAoraHJlZj0iLi9FY2xpcHNlJTIwRVBMJTIwMjAwM18xMV8xMCUyMEZpbmFsX2ZpbGVzL2ZpbGVsaXN0LnhtbCI+Cis8dGl0bGU+RWNsaXBzZSBQdWJsaWMgTGljZW5zZSAtIFZlcnNpb24gMS4wPC90aXRsZT4KKzwhLS1baWYgZ3RlIG1zbyA5XT48eG1sPgorIDxvOkRvY3VtZW50UHJvcGVydGllcz4KKyAgPG86UmV2aXNpb24+MjwvbzpSZXZpc2lvbj4KKyAgPG86VG90YWxUaW1lPjM8L286VG90YWxUaW1lPgorICA8bzpDcmVhdGVkPjIwMDQtMDMtMDVUMjM6MDM6MDBaPC9vOkNyZWF0ZWQ+CisgIDxvOkxhc3RTYXZlZD4yMDA0LTAzLTA1VDIzOjAzOjAwWjwvbzpMYXN0U2F2ZWQ+CisgIDxvOlBhZ2VzPjQ8L286UGFnZXM+CisgIDxvOldvcmRzPjE2MjY8L286V29yZHM+CisgIDxvOkNoYXJhY3RlcnM+OTI3MDwvbzpDaGFyYWN0ZXJzPgorICAgPG86TGluZXM+Nzc8L286TGluZXM+CisgIDxvOlBhcmFncmFwaHM+MTg8L286UGFyYWdyYXBocz4KKyAgPG86Q2hhcmFjdGVyc1dpdGhTcGFjZXM+MTEzODQ8L286Q2hhcmFjdGVyc1dpdGhTcGFjZXM+CisgIDxvOlZlcnNpb24+OS40NDAyPC9vOlZlcnNpb24+CisgPC9vOkRvY3VtZW50UHJvcGVydGllcz4KKzwveG1sPjwhW2VuZGlmXS0tPjwhLS1baWYgZ3RlIG1zbyA5XT48eG1sPgorIDx3OldvcmREb2N1bWVudD4KKyAgPHc6VHJhY2tSZXZpc2lvbnMvPgorIDwvdzpXb3JkRG9jdW1lbnQ+Cis8L3htbD48IVtlbmRpZl0tLT4KKzxzdHlsZT4KKzwhLS0KKyAvKiBGb250IERlZmluaXRpb25zICovCitAZm9udC1mYWNlCisJe2ZvbnQtZmFtaWx5OlRhaG9tYTsKKwlwYW5vc2UtMToyIDExIDYgNCAzIDUgNCA0IDIgNDsKKwltc28tZm9udC1jaGFyc2V0OjA7CisJbXNvLWdlbmVyaWMtZm9udC1mYW1pbHk6c3dpc3M7CisJbXNvLWZvbnQtcGl0Y2g6dmFyaWFibGU7CisJbXNvLWZvbnQtc2lnbmF0dXJlOjU1MzY3OTQ5NSAtMjE0NzQ4MzY0OCA4IDAgNjYwNDcgMDt9CisgLyogU3R5bGUgRGVmaW5pdGlvbnMgKi8KK3AuTXNvTm9ybWFsLCBsaS5Nc29Ob3JtYWwsIGRpdi5Nc29Ob3JtYWwKKwl7bXNvLXN0eWxlLXBhcmVudDoiIjsKKwltYXJnaW46MGluOworCW1hcmdpbi1ib3R0b206LjAwMDFwdDsKKwltc28tcGFnaW5hdGlvbjp3aWRvdy1vcnBoYW47CisJZm9udC1zaXplOjEyLjBwdDsKKwlmb250LWZhbWlseToiVGltZXMgTmV3IFJvbWFuIjsKKwltc28tZmFyZWFzdC1mb250LWZhbWlseToiVGltZXMgTmV3IFJvbWFuIjt9CitwCisJe21hcmdpbi1yaWdodDowaW47CisJbXNvLW1hcmdpbi10b3AtYWx0OmF1dG87CisJbXNvLW1hcmdpbi1ib3R0b20tYWx0OmF1dG87CisJbWFyZ2luLWxlZnQ6MGluOworCW1zby1wYWdpbmF0aW9uOndpZG93LW9ycGhhbjsKKwlmb250LXNpemU6MTIuMHB0OworCWZvbnQtZmFtaWx5OiJUaW1lcyBOZXcgUm9tYW4iOworCW1zby1mYXJlYXN0LWZvbnQtZmFtaWx5OiJUaW1lcyBOZXcgUm9tYW4iO30KK3AuQmFsbG9vblRleHQsIGxpLkJhbGxvb25UZXh0LCBkaXYuQmFsbG9vblRleHQKKwl7bXNvLXN0eWxlLW5hbWU6IkJhbGxvb24gVGV4dCI7CisJbWFyZ2luOjBpbjsKKwltYXJnaW4tYm90dG9tOi4wMDAxcHQ7CisJbXNvLXBhZ2luYXRpb246d2lkb3ctb3JwaGFuOworCWZvbnQtc2l6ZTo4LjBwdDsKKwlmb250LWZhbWlseTpUYWhvbWE7CisJbXNvLWZhcmVhc3QtZm9udC1mYW1pbHk6IlRpbWVzIE5ldyBSb21hbiI7fQorQHBhZ2UgU2VjdGlvbjEKKwl7c2l6ZTo4LjVpbiAxMS4waW47CisJbWFyZ2luOjEuMGluIDEuMjVpbiAxLjBpbiAxLjI1aW47CisJbXNvLWhlYWRlci1tYXJnaW46LjVpbjsKKwltc28tZm9vdGVyLW1hcmdpbjouNWluOworCW1zby1wYXBlci1zb3VyY2U6MDt9CitkaXYuU2VjdGlvbjEKKwl7cGFnZTpTZWN0aW9uMTt9CistLT4KKzwvc3R5bGU+Cis8L2hlYWQ+CisKKzxib2R5IGxhbmc9RU4tVVMgc3R5bGU9J3RhYi1pbnRlcnZhbDouNWluJz4KKworPGRpdiBjbGFzcz1TZWN0aW9uMT4KKworPHAgYWxpZ249Y2VudGVyIHN0eWxlPSd0ZXh0LWFsaWduOmNlbnRlcic+PGI+RWNsaXBzZSBQdWJsaWMgTGljZW5zZSAtIHYgMS4wPC9iPgorPC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+VEhFIEFDQ09NUEFOWUlORyBQUk9HUkFNIElTIFBST1ZJREVEIFVOREVSCitUSEUgVEVSTVMgT0YgVEhJUyBFQ0xJUFNFIFBVQkxJQyBMSUNFTlNFICgmcXVvdDtBR1JFRU1FTlQmcXVvdDspLiBBTlkgVVNFLAorUkVQUk9EVUNUSU9OIE9SIERJU1RSSUJVVElPTiBPRiBUSEUgUFJPR1JBTSBDT05TVElUVVRFUyBSRUNJUElFTlQnUyBBQ0NFUFRBTkNFCitPRiBUSElTIEFHUkVFTUVOVC48L3NwYW4+IDwvcD4KKworPHA+PGI+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPjEuIERFRklOSVRJT05TPC9zcGFuPjwvYj4gPC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+JnF1b3Q7Q29udHJpYnV0aW9uJnF1b3Q7IG1lYW5zOjwvc3Bhbj4gPC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5hKQoraW4gdGhlIGNhc2Ugb2YgdGhlIGluaXRpYWwgQ29udHJpYnV0b3IsIHRoZSBpbml0aWFsIGNvZGUgYW5kIGRvY3VtZW50YXRpb24KK2Rpc3RyaWJ1dGVkIHVuZGVyIHRoaXMgQWdyZWVtZW50LCBhbmQ8YnIgY2xlYXI9bGVmdD4KK2IpIGluIHRoZSBjYXNlIG9mIGVhY2ggc3Vic2VxdWVudCBDb250cmlidXRvcjo8L3NwYW4+PC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5pKQorY2hhbmdlcyB0byB0aGUgUHJvZ3JhbSwgYW5kPC9zcGFuPjwvcD4KKworPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+aWkpCithZGRpdGlvbnMgdG8gdGhlIFByb2dyYW07PC9zcGFuPjwvcD4KKworPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+d2hlcmUKK3N1Y2ggY2hhbmdlcyBhbmQvb3IgYWRkaXRpb25zIHRvIHRoZSBQcm9ncmFtIG9yaWdpbmF0ZSBmcm9tIGFuZCBhcmUgZGlzdHJpYnV0ZWQKK2J5IHRoYXQgcGFydGljdWxhciBDb250cmlidXRvci4gQSBDb250cmlidXRpb24gJ29yaWdpbmF0ZXMnIGZyb20gYSBDb250cmlidXRvcgoraWYgaXQgd2FzIGFkZGVkIHRvIHRoZSBQcm9ncmFtIGJ5IHN1Y2ggQ29udHJpYnV0b3IgaXRzZWxmIG9yIGFueW9uZSBhY3Rpbmcgb24KK3N1Y2ggQ29udHJpYnV0b3IncyBiZWhhbGYuIENvbnRyaWJ1dGlvbnMgZG8gbm90IGluY2x1ZGUgYWRkaXRpb25zIHRvIHRoZQorUHJvZ3JhbSB3aGljaDogKGkpIGFyZSBzZXBhcmF0ZSBtb2R1bGVzIG9mIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIGluIGNvbmp1bmN0aW9uCit3aXRoIHRoZSBQcm9ncmFtIHVuZGVyIHRoZWlyIG93biBsaWNlbnNlIGFncmVlbWVudCwgYW5kIChpaSkgYXJlIG5vdCBkZXJpdmF0aXZlCit3b3JrcyBvZiB0aGUgUHJvZ3JhbS4gPC9zcGFuPjwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPiZxdW90O0NvbnRyaWJ1dG9yJnF1b3Q7IG1lYW5zIGFueSBwZXJzb24gb3IKK2VudGl0eSB0aGF0IGRpc3RyaWJ1dGVzIHRoZSBQcm9ncmFtLjwvc3Bhbj4gPC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+JnF1b3Q7TGljZW5zZWQgUGF0ZW50cyAmcXVvdDsgbWVhbiBwYXRlbnQKK2NsYWltcyBsaWNlbnNhYmxlIGJ5IGEgQ29udHJpYnV0b3Igd2hpY2ggYXJlIG5lY2Vzc2FyaWx5IGluZnJpbmdlZCBieSB0aGUgdXNlCitvciBzYWxlIG9mIGl0cyBDb250cmlidXRpb24gYWxvbmUgb3Igd2hlbiBjb21iaW5lZCB3aXRoIHRoZSBQcm9ncmFtLiA8L3NwYW4+PC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+JnF1b3Q7UHJvZ3JhbSZxdW90OyBtZWFucyB0aGUgQ29udHJpYnV0aW9ucworZGlzdHJpYnV0ZWQgaW4gYWNjb3JkYW5jZSB3aXRoIHRoaXMgQWdyZWVtZW50Ljwvc3Bhbj4gPC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+JnF1b3Q7UmVjaXBpZW50JnF1b3Q7IG1lYW5zIGFueW9uZSB3aG8KK3JlY2VpdmVzIHRoZSBQcm9ncmFtIHVuZGVyIHRoaXMgQWdyZWVtZW50LCBpbmNsdWRpbmcgYWxsIENvbnRyaWJ1dG9ycy48L3NwYW4+IDwvcD4KKworPHA+PGI+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPjIuIEdSQU5UIE9GIFJJR0hUUzwvc3Bhbj48L2I+IDwvcD4KKworPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YSkKK1N1YmplY3QgdG8gdGhlIHRlcm1zIG9mIHRoaXMgQWdyZWVtZW50LCBlYWNoIENvbnRyaWJ1dG9yIGhlcmVieSBncmFudHMgUmVjaXBpZW50CithIG5vbi1leGNsdXNpdmUsIHdvcmxkd2lkZSwgcm95YWx0eS1mcmVlIGNvcHlyaWdodCBsaWNlbnNlIHRvPHNwYW4KK3N0eWxlPSdjb2xvcjpyZWQnPiA8L3NwYW4+cmVwcm9kdWNlLCBwcmVwYXJlIGRlcml2YXRpdmUgd29ya3Mgb2YsIHB1YmxpY2x5CitkaXNwbGF5LCBwdWJsaWNseSBwZXJmb3JtLCBkaXN0cmlidXRlIGFuZCBzdWJsaWNlbnNlIHRoZSBDb250cmlidXRpb24gb2Ygc3VjaAorQ29udHJpYnV0b3IsIGlmIGFueSwgYW5kIHN1Y2ggZGVyaXZhdGl2ZSB3b3JrcywgaW4gc291cmNlIGNvZGUgYW5kIG9iamVjdCBjb2RlCitmb3JtLjwvc3Bhbj48L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmIpCitTdWJqZWN0IHRvIHRoZSB0ZXJtcyBvZiB0aGlzIEFncmVlbWVudCwgZWFjaCBDb250cmlidXRvciBoZXJlYnkgZ3JhbnRzCitSZWNpcGllbnQgYSBub24tZXhjbHVzaXZlLCB3b3JsZHdpZGUsPHNwYW4gc3R5bGU9J2NvbG9yOmdyZWVuJz4gPC9zcGFuPnJveWFsdHktZnJlZQorcGF0ZW50IGxpY2Vuc2UgdW5kZXIgTGljZW5zZWQgUGF0ZW50cyB0byBtYWtlLCB1c2UsIHNlbGwsIG9mZmVyIHRvIHNlbGwsIGltcG9ydAorYW5kIG90aGVyd2lzZSB0cmFuc2ZlciB0aGUgQ29udHJpYnV0aW9uIG9mIHN1Y2ggQ29udHJpYnV0b3IsIGlmIGFueSwgaW4gc291cmNlCitjb2RlIGFuZCBvYmplY3QgY29kZSBmb3JtLiBUaGlzIHBhdGVudCBsaWNlbnNlIHNoYWxsIGFwcGx5IHRvIHRoZSBjb21iaW5hdGlvbgorb2YgdGhlIENvbnRyaWJ1dGlvbiBhbmQgdGhlIFByb2dyYW0gaWYsIGF0IHRoZSB0aW1lIHRoZSBDb250cmlidXRpb24gaXMgYWRkZWQKK2J5IHRoZSBDb250cmlidXRvciwgc3VjaCBhZGRpdGlvbiBvZiB0aGUgQ29udHJpYnV0aW9uIGNhdXNlcyBzdWNoIGNvbWJpbmF0aW9uCit0byBiZSBjb3ZlcmVkIGJ5IHRoZSBMaWNlbnNlZCBQYXRlbnRzLiBUaGUgcGF0ZW50IGxpY2Vuc2Ugc2hhbGwgbm90IGFwcGx5IHRvCithbnkgb3RoZXIgY29tYmluYXRpb25zIHdoaWNoIGluY2x1ZGUgdGhlIENvbnRyaWJ1dGlvbi4gTm8gaGFyZHdhcmUgcGVyIHNlIGlzCitsaWNlbnNlZCBoZXJldW5kZXIuIDwvc3Bhbj48L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmMpCitSZWNpcGllbnQgdW5kZXJzdGFuZHMgdGhhdCBhbHRob3VnaCBlYWNoIENvbnRyaWJ1dG9yIGdyYW50cyB0aGUgbGljZW5zZXMgdG8gaXRzCitDb250cmlidXRpb25zIHNldCBmb3J0aCBoZXJlaW4sIG5vIGFzc3VyYW5jZXMgYXJlIHByb3ZpZGVkIGJ5IGFueSBDb250cmlidXRvcgordGhhdCB0aGUgUHJvZ3JhbSBkb2VzIG5vdCBpbmZyaW5nZSB0aGUgcGF0ZW50IG9yIG90aGVyIGludGVsbGVjdHVhbCBwcm9wZXJ0eQorcmlnaHRzIG9mIGFueSBvdGhlciBlbnRpdHkuIEVhY2ggQ29udHJpYnV0b3IgZGlzY2xhaW1zIGFueSBsaWFiaWxpdHkgdG8gUmVjaXBpZW50Citmb3IgY2xhaW1zIGJyb3VnaHQgYnkgYW55IG90aGVyIGVudGl0eSBiYXNlZCBvbiBpbmZyaW5nZW1lbnQgb2YgaW50ZWxsZWN0dWFsCitwcm9wZXJ0eSByaWdodHMgb3Igb3RoZXJ3aXNlLiBBcyBhIGNvbmRpdGlvbiB0byBleGVyY2lzaW5nIHRoZSByaWdodHMgYW5kCitsaWNlbnNlcyBncmFudGVkIGhlcmV1bmRlciwgZWFjaCBSZWNpcGllbnQgaGVyZWJ5IGFzc3VtZXMgc29sZSByZXNwb25zaWJpbGl0eQordG8gc2VjdXJlIGFueSBvdGhlciBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIG5lZWRlZCwgaWYgYW55LiBGb3IgZXhhbXBsZSwKK2lmIGEgdGhpcmQgcGFydHkgcGF0ZW50IGxpY2Vuc2UgaXMgcmVxdWlyZWQgdG8gYWxsb3cgUmVjaXBpZW50IHRvIGRpc3RyaWJ1dGUKK3RoZSBQcm9ncmFtLCBpdCBpcyBSZWNpcGllbnQncyByZXNwb25zaWJpbGl0eSB0byBhY3F1aXJlIHRoYXQgbGljZW5zZSBiZWZvcmUKK2Rpc3RyaWJ1dGluZyB0aGUgUHJvZ3JhbS48L3NwYW4+PC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5kKQorRWFjaCBDb250cmlidXRvciByZXByZXNlbnRzIHRoYXQgdG8gaXRzIGtub3dsZWRnZSBpdCBoYXMgc3VmZmljaWVudCBjb3B5cmlnaHQKK3JpZ2h0cyBpbiBpdHMgQ29udHJpYnV0aW9uLCBpZiBhbnksIHRvIGdyYW50IHRoZSBjb3B5cmlnaHQgbGljZW5zZSBzZXQgZm9ydGggaW4KK3RoaXMgQWdyZWVtZW50LiA8L3NwYW4+PC9wPgorCis8cD48Yj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+My4gUkVRVUlSRU1FTlRTPC9zcGFuPjwvYj4gPC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+QSBDb250cmlidXRvciBtYXkgY2hvb3NlIHRvIGRpc3RyaWJ1dGUgdGhlCitQcm9ncmFtIGluIG9iamVjdCBjb2RlIGZvcm0gdW5kZXIgaXRzIG93biBsaWNlbnNlIGFncmVlbWVudCwgcHJvdmlkZWQgdGhhdDo8L3NwYW4+Cis8L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmEpCitpdCBjb21wbGllcyB3aXRoIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGlzIEFncmVlbWVudDsgYW5kPC9zcGFuPjwvcD4KKworPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YikKK2l0cyBsaWNlbnNlIGFncmVlbWVudDo8L3NwYW4+PC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5pKQorZWZmZWN0aXZlbHkgZGlzY2xhaW1zIG9uIGJlaGFsZiBvZiBhbGwgQ29udHJpYnV0b3JzIGFsbCB3YXJyYW50aWVzIGFuZAorY29uZGl0aW9ucywgZXhwcmVzcyBhbmQgaW1wbGllZCwgaW5jbHVkaW5nIHdhcnJhbnRpZXMgb3IgY29uZGl0aW9ucyBvZiB0aXRsZQorYW5kIG5vbi1pbmZyaW5nZW1lbnQsIGFuZCBpbXBsaWVkIHdhcnJhbnRpZXMgb3IgY29uZGl0aW9ucyBvZiBtZXJjaGFudGFiaWxpdHkKK2FuZCBmaXRuZXNzIGZvciBhIHBhcnRpY3VsYXIgcHVycG9zZTsgPC9zcGFuPjwvcD4KKworPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+aWkpCitlZmZlY3RpdmVseSBleGNsdWRlcyBvbiBiZWhhbGYgb2YgYWxsIENvbnRyaWJ1dG9ycyBhbGwgbGlhYmlsaXR5IGZvciBkYW1hZ2VzLAoraW5jbHVkaW5nIGRpcmVjdCwgaW5kaXJlY3QsIHNwZWNpYWwsIGluY2lkZW50YWwgYW5kIGNvbnNlcXVlbnRpYWwgZGFtYWdlcywgc3VjaAorYXMgbG9zdCBwcm9maXRzOyA8L3NwYW4+PC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5paWkpCitzdGF0ZXMgdGhhdCBhbnkgcHJvdmlzaW9ucyB3aGljaCBkaWZmZXIgZnJvbSB0aGlzIEFncmVlbWVudCBhcmUgb2ZmZXJlZCBieSB0aGF0CitDb250cmlidXRvciBhbG9uZSBhbmQgbm90IGJ5IGFueSBvdGhlciBwYXJ0eTsgYW5kPC9zcGFuPjwvcD4KKworPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+aXYpCitzdGF0ZXMgdGhhdCBzb3VyY2UgY29kZSBmb3IgdGhlIFByb2dyYW0gaXMgYXZhaWxhYmxlIGZyb20gc3VjaCBDb250cmlidXRvciwgYW5kCitpbmZvcm1zIGxpY2Vuc2VlcyBob3cgdG8gb2J0YWluIGl0IGluIGEgcmVhc29uYWJsZSBtYW5uZXIgb24gb3IgdGhyb3VnaCBhCittZWRpdW0gY3VzdG9tYXJpbHkgdXNlZCBmb3Igc29mdHdhcmUgZXhjaGFuZ2UuPHNwYW4gc3R5bGU9J2NvbG9yOmJsdWUnPiA8L3NwYW4+PC9zcGFuPjwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPldoZW4gdGhlIFByb2dyYW0gaXMgbWFkZSBhdmFpbGFibGUgaW4gc291cmNlCitjb2RlIGZvcm06PC9zcGFuPiA8L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmEpCitpdCBtdXN0IGJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoaXMgQWdyZWVtZW50OyBhbmQgPC9zcGFuPjwvcD4KKworPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YikgYQorY29weSBvZiB0aGlzIEFncmVlbWVudCBtdXN0IGJlIGluY2x1ZGVkIHdpdGggZWFjaCBjb3B5IG9mIHRoZSBQcm9ncmFtLiA8L3NwYW4+PC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+Q29udHJpYnV0b3JzIG1heSBub3QgcmVtb3ZlIG9yIGFsdGVyIGFueQorY29weXJpZ2h0IG5vdGljZXMgY29udGFpbmVkIHdpdGhpbiB0aGUgUHJvZ3JhbS4gPC9zcGFuPjwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkVhY2ggQ29udHJpYnV0b3IgbXVzdCBpZGVudGlmeSBpdHNlbGYgYXMgdGhlCitvcmlnaW5hdG9yIG9mIGl0cyBDb250cmlidXRpb24sIGlmIGFueSwgaW4gYSBtYW5uZXIgdGhhdCByZWFzb25hYmx5IGFsbG93cworc3Vic2VxdWVudCBSZWNpcGllbnRzIHRvIGlkZW50aWZ5IHRoZSBvcmlnaW5hdG9yIG9mIHRoZSBDb250cmlidXRpb24uIDwvc3Bhbj48L3A+CisKKzxwPjxiPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz40LiBDT01NRVJDSUFMIERJU1RSSUJVVElPTjwvc3Bhbj48L2I+IDwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkNvbW1lcmNpYWwgZGlzdHJpYnV0b3JzIG9mIHNvZnR3YXJlIG1heQorYWNjZXB0IGNlcnRhaW4gcmVzcG9uc2liaWxpdGllcyB3aXRoIHJlc3BlY3QgdG8gZW5kIHVzZXJzLCBidXNpbmVzcyBwYXJ0bmVycworYW5kIHRoZSBsaWtlLiBXaGlsZSB0aGlzIGxpY2Vuc2UgaXMgaW50ZW5kZWQgdG8gZmFjaWxpdGF0ZSB0aGUgY29tbWVyY2lhbCB1c2UKK29mIHRoZSBQcm9ncmFtLCB0aGUgQ29udHJpYnV0b3Igd2hvIGluY2x1ZGVzIHRoZSBQcm9ncmFtIGluIGEgY29tbWVyY2lhbAorcHJvZHVjdCBvZmZlcmluZyBzaG91bGQgZG8gc28gaW4gYSBtYW5uZXIgd2hpY2ggZG9lcyBub3QgY3JlYXRlIHBvdGVudGlhbAorbGlhYmlsaXR5IGZvciBvdGhlciBDb250cmlidXRvcnMuIFRoZXJlZm9yZSwgaWYgYSBDb250cmlidXRvciBpbmNsdWRlcyB0aGUKK1Byb2dyYW0gaW4gYSBjb21tZXJjaWFsIHByb2R1Y3Qgb2ZmZXJpbmcsIHN1Y2ggQ29udHJpYnV0b3IgKCZxdW90O0NvbW1lcmNpYWwKK0NvbnRyaWJ1dG9yJnF1b3Q7KSBoZXJlYnkgYWdyZWVzIHRvIGRlZmVuZCBhbmQgaW5kZW1uaWZ5IGV2ZXJ5IG90aGVyCitDb250cmlidXRvciAoJnF1b3Q7SW5kZW1uaWZpZWQgQ29udHJpYnV0b3ImcXVvdDspIGFnYWluc3QgYW55IGxvc3NlcywgZGFtYWdlcyBhbmQKK2Nvc3RzIChjb2xsZWN0aXZlbHkgJnF1b3Q7TG9zc2VzJnF1b3Q7KSBhcmlzaW5nIGZyb20gY2xhaW1zLCBsYXdzdWl0cyBhbmQgb3RoZXIKK2xlZ2FsIGFjdGlvbnMgYnJvdWdodCBieSBhIHRoaXJkIHBhcnR5IGFnYWluc3QgdGhlIEluZGVtbmlmaWVkIENvbnRyaWJ1dG9yIHRvCit0aGUgZXh0ZW50IGNhdXNlZCBieSB0aGUgYWN0cyBvciBvbWlzc2lvbnMgb2Ygc3VjaCBDb21tZXJjaWFsIENvbnRyaWJ1dG9yIGluCitjb25uZWN0aW9uIHdpdGggaXRzIGRpc3RyaWJ1dGlvbiBvZiB0aGUgUHJvZ3JhbSBpbiBhIGNvbW1lcmNpYWwgcHJvZHVjdAorb2ZmZXJpbmcuIFRoZSBvYmxpZ2F0aW9ucyBpbiB0aGlzIHNlY3Rpb24gZG8gbm90IGFwcGx5IHRvIGFueSBjbGFpbXMgb3IgTG9zc2VzCityZWxhdGluZyB0byBhbnkgYWN0dWFsIG9yIGFsbGVnZWQgaW50ZWxsZWN0dWFsIHByb3BlcnR5IGluZnJpbmdlbWVudC4gSW4gb3JkZXIKK3RvIHF1YWxpZnksIGFuIEluZGVtbmlmaWVkIENvbnRyaWJ1dG9yIG11c3Q6IGEpIHByb21wdGx5IG5vdGlmeSB0aGUgQ29tbWVyY2lhbAorQ29udHJpYnV0b3IgaW4gd3JpdGluZyBvZiBzdWNoIGNsYWltLCBhbmQgYikgYWxsb3cgdGhlIENvbW1lcmNpYWwgQ29udHJpYnV0b3IKK3RvIGNvbnRyb2wsIGFuZCBjb29wZXJhdGUgd2l0aCB0aGUgQ29tbWVyY2lhbCBDb250cmlidXRvciBpbiwgdGhlIGRlZmVuc2UgYW5kCithbnkgcmVsYXRlZCBzZXR0bGVtZW50IG5lZ290aWF0aW9ucy4gVGhlIEluZGVtbmlmaWVkIENvbnRyaWJ1dG9yIG1heSBwYXJ0aWNpcGF0ZQoraW4gYW55IHN1Y2ggY2xhaW0gYXQgaXRzIG93biBleHBlbnNlLjwvc3Bhbj4gPC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+Rm9yIGV4YW1wbGUsIGEgQ29udHJpYnV0b3IgbWlnaHQgaW5jbHVkZSB0aGUKK1Byb2dyYW0gaW4gYSBjb21tZXJjaWFsIHByb2R1Y3Qgb2ZmZXJpbmcsIFByb2R1Y3QgWC4gVGhhdCBDb250cmlidXRvciBpcyB0aGVuIGEKK0NvbW1lcmNpYWwgQ29udHJpYnV0b3IuIElmIHRoYXQgQ29tbWVyY2lhbCBDb250cmlidXRvciB0aGVuIG1ha2VzIHBlcmZvcm1hbmNlCitjbGFpbXMsIG9yIG9mZmVycyB3YXJyYW50aWVzIHJlbGF0ZWQgdG8gUHJvZHVjdCBYLCB0aG9zZSBwZXJmb3JtYW5jZSBjbGFpbXMgYW5kCit3YXJyYW50aWVzIGFyZSBzdWNoIENvbW1lcmNpYWwgQ29udHJpYnV0b3IncyByZXNwb25zaWJpbGl0eSBhbG9uZS4gVW5kZXIgdGhpcworc2VjdGlvbiwgdGhlIENvbW1lcmNpYWwgQ29udHJpYnV0b3Igd291bGQgaGF2ZSB0byBkZWZlbmQgY2xhaW1zIGFnYWluc3QgdGhlCitvdGhlciBDb250cmlidXRvcnMgcmVsYXRlZCB0byB0aG9zZSBwZXJmb3JtYW5jZSBjbGFpbXMgYW5kIHdhcnJhbnRpZXMsIGFuZCBpZiBhCitjb3VydCByZXF1aXJlcyBhbnkgb3RoZXIgQ29udHJpYnV0b3IgdG8gcGF5IGFueSBkYW1hZ2VzIGFzIGEgcmVzdWx0LCB0aGUKK0NvbW1lcmNpYWwgQ29udHJpYnV0b3IgbXVzdCBwYXkgdGhvc2UgZGFtYWdlcy48L3NwYW4+IDwvcD4KKworPHA+PGI+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPjUuIE5PIFdBUlJBTlRZPC9zcGFuPjwvYj4gPC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+RVhDRVBUIEFTIEVYUFJFU1NMWSBTRVQgRk9SVEggSU4gVEhJUworQUdSRUVNRU5ULCBUSEUgUFJPR1JBTSBJUyBQUk9WSURFRCBPTiBBTiAmcXVvdDtBUyBJUyZxdW90OyBCQVNJUywgV0lUSE9VVAorV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBFSVRIRVIgRVhQUkVTUyBPUiBJTVBMSUVEIElOQ0xVRElORywKK1dJVEhPVVQgTElNSVRBVElPTiwgQU5ZIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBUSVRMRSwgTk9OLUlORlJJTkdFTUVOVCwKK01FUkNIQU5UQUJJTElUWSBPUiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gRWFjaCBSZWNpcGllbnQgaXMgc29sZWx5CityZXNwb25zaWJsZSBmb3IgZGV0ZXJtaW5pbmcgdGhlIGFwcHJvcHJpYXRlbmVzcyBvZiB1c2luZyBhbmQgZGlzdHJpYnV0aW5nIHRoZQorUHJvZ3JhbSBhbmQgYXNzdW1lcyBhbGwgcmlza3MgYXNzb2NpYXRlZCB3aXRoIGl0cyBleGVyY2lzZSBvZiByaWdodHMgdW5kZXIgdGhpcworQWdyZWVtZW50ICwgaW5jbHVkaW5nIGJ1dCBub3QgbGltaXRlZCB0byB0aGUgcmlza3MgYW5kIGNvc3RzIG9mIHByb2dyYW0gZXJyb3JzLAorY29tcGxpYW5jZSB3aXRoIGFwcGxpY2FibGUgbGF3cywgZGFtYWdlIHRvIG9yIGxvc3Mgb2YgZGF0YSwgcHJvZ3JhbXMgb3IKK2VxdWlwbWVudCwgYW5kIHVuYXZhaWxhYmlsaXR5IG9yIGludGVycnVwdGlvbiBvZiBvcGVyYXRpb25zLiA8L3NwYW4+PC9wPgorCis8cD48Yj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+Ni4gRElTQ0xBSU1FUiBPRiBMSUFCSUxJVFk8L3NwYW4+PC9iPiA8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5FWENFUFQgQVMgRVhQUkVTU0xZIFNFVCBGT1JUSCBJTiBUSElTCitBR1JFRU1FTlQsIE5FSVRIRVIgUkVDSVBJRU5UIE5PUiBBTlkgQ09OVFJJQlVUT1JTIFNIQUxMIEhBVkUgQU5ZIExJQUJJTElUWSBGT1IKK0FOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworKElOQ0xVRElORyBXSVRIT1VUIExJTUlUQVRJT04gTE9TVCBQUk9GSVRTKSwgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKK09GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HCitORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9SIERJU1RSSUJVVElPTiBPRgorVEhFIFBST0dSQU0gT1IgVEhFIEVYRVJDSVNFIE9GIEFOWSBSSUdIVFMgR1JBTlRFRCBIRVJFVU5ERVIsIEVWRU4gSUYgQURWSVNFRCBPRgorVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFUy48L3NwYW4+IDwvcD4KKworPHA+PGI+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPjcuIEdFTkVSQUw8L3NwYW4+PC9iPiA8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5JZiBhbnkgcHJvdmlzaW9uIG9mIHRoaXMgQWdyZWVtZW50IGlzIGludmFsaWQKK29yIHVuZW5mb3JjZWFibGUgdW5kZXIgYXBwbGljYWJsZSBsYXcsIGl0IHNoYWxsIG5vdCBhZmZlY3QgdGhlIHZhbGlkaXR5IG9yCitlbmZvcmNlYWJpbGl0eSBvZiB0aGUgcmVtYWluZGVyIG9mIHRoZSB0ZXJtcyBvZiB0aGlzIEFncmVlbWVudCwgYW5kIHdpdGhvdXQKK2Z1cnRoZXIgYWN0aW9uIGJ5IHRoZSBwYXJ0aWVzIGhlcmV0bywgc3VjaCBwcm92aXNpb24gc2hhbGwgYmUgcmVmb3JtZWQgdG8gdGhlCittaW5pbXVtIGV4dGVudCBuZWNlc3NhcnkgdG8gbWFrZSBzdWNoIHByb3Zpc2lvbiB2YWxpZCBhbmQgZW5mb3JjZWFibGUuPC9zcGFuPiA8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5JZiBSZWNpcGllbnQgaW5zdGl0dXRlcyBwYXRlbnQgbGl0aWdhdGlvbgorYWdhaW5zdCBhbnkgZW50aXR5IChpbmNsdWRpbmcgYSBjcm9zcy1jbGFpbSBvciBjb3VudGVyY2xhaW0gaW4gYSBsYXdzdWl0KQorYWxsZWdpbmcgdGhhdCB0aGUgUHJvZ3JhbSBpdHNlbGYgKGV4Y2x1ZGluZyBjb21iaW5hdGlvbnMgb2YgdGhlIFByb2dyYW0gd2l0aAorb3RoZXIgc29mdHdhcmUgb3IgaGFyZHdhcmUpIGluZnJpbmdlcyBzdWNoIFJlY2lwaWVudCdzIHBhdGVudChzKSwgdGhlbiBzdWNoCitSZWNpcGllbnQncyByaWdodHMgZ3JhbnRlZCB1bmRlciBTZWN0aW9uIDIoYikgc2hhbGwgdGVybWluYXRlIGFzIG9mIHRoZSBkYXRlCitzdWNoIGxpdGlnYXRpb24gaXMgZmlsZWQuIDwvc3Bhbj48L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5BbGwgUmVjaXBpZW50J3MgcmlnaHRzIHVuZGVyIHRoaXMgQWdyZWVtZW50CitzaGFsbCB0ZXJtaW5hdGUgaWYgaXQgZmFpbHMgdG8gY29tcGx5IHdpdGggYW55IG9mIHRoZSBtYXRlcmlhbCB0ZXJtcyBvcgorY29uZGl0aW9ucyBvZiB0aGlzIEFncmVlbWVudCBhbmQgZG9lcyBub3QgY3VyZSBzdWNoIGZhaWx1cmUgaW4gYSByZWFzb25hYmxlCitwZXJpb2Qgb2YgdGltZSBhZnRlciBiZWNvbWluZyBhd2FyZSBvZiBzdWNoIG5vbmNvbXBsaWFuY2UuIElmIGFsbCBSZWNpcGllbnQncworcmlnaHRzIHVuZGVyIHRoaXMgQWdyZWVtZW50IHRlcm1pbmF0ZSwgUmVjaXBpZW50IGFncmVlcyB0byBjZWFzZSB1c2UgYW5kCitkaXN0cmlidXRpb24gb2YgdGhlIFByb2dyYW0gYXMgc29vbiBhcyByZWFzb25hYmx5IHByYWN0aWNhYmxlLiBIb3dldmVyLAorUmVjaXBpZW50J3Mgb2JsaWdhdGlvbnMgdW5kZXIgdGhpcyBBZ3JlZW1lbnQgYW5kIGFueSBsaWNlbnNlcyBncmFudGVkIGJ5CitSZWNpcGllbnQgcmVsYXRpbmcgdG8gdGhlIFByb2dyYW0gc2hhbGwgY29udGludWUgYW5kIHN1cnZpdmUuIDwvc3Bhbj48L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5FdmVyeW9uZSBpcyBwZXJtaXR0ZWQgdG8gY29weSBhbmQgZGlzdHJpYnV0ZQorY29waWVzIG9mIHRoaXMgQWdyZWVtZW50LCBidXQgaW4gb3JkZXIgdG8gYXZvaWQgaW5jb25zaXN0ZW5jeSB0aGUgQWdyZWVtZW50IGlzCitjb3B5cmlnaHRlZCBhbmQgbWF5IG9ubHkgYmUgbW9kaWZpZWQgaW4gdGhlIGZvbGxvd2luZyBtYW5uZXIuIFRoZSBBZ3JlZW1lbnQKK1N0ZXdhcmQgcmVzZXJ2ZXMgdGhlIHJpZ2h0IHRvIHB1Ymxpc2ggbmV3IHZlcnNpb25zIChpbmNsdWRpbmcgcmV2aXNpb25zKSBvZgordGhpcyBBZ3JlZW1lbnQgZnJvbSB0aW1lIHRvIHRpbWUuIE5vIG9uZSBvdGhlciB0aGFuIHRoZSBBZ3JlZW1lbnQgU3Rld2FyZCBoYXMKK3RoZSByaWdodCB0byBtb2RpZnkgdGhpcyBBZ3JlZW1lbnQuIFRoZSBFY2xpcHNlIEZvdW5kYXRpb24gaXMgdGhlIGluaXRpYWwKK0FncmVlbWVudCBTdGV3YXJkLiBUaGUgRWNsaXBzZSBGb3VuZGF0aW9uIG1heSBhc3NpZ24gdGhlIHJlc3BvbnNpYmlsaXR5IHRvCitzZXJ2ZSBhcyB0aGUgQWdyZWVtZW50IFN0ZXdhcmQgdG8gYSBzdWl0YWJsZSBzZXBhcmF0ZSBlbnRpdHkuIEVhY2ggbmV3IHZlcnNpb24KK29mIHRoZSBBZ3JlZW1lbnQgd2lsbCBiZSBnaXZlbiBhIGRpc3Rpbmd1aXNoaW5nIHZlcnNpb24gbnVtYmVyLiBUaGUgUHJvZ3JhbQorKGluY2x1ZGluZyBDb250cmlidXRpb25zKSBtYXkgYWx3YXlzIGJlIGRpc3RyaWJ1dGVkIHN1YmplY3QgdG8gdGhlIHZlcnNpb24gb2YKK3RoZSBBZ3JlZW1lbnQgdW5kZXIgd2hpY2ggaXQgd2FzIHJlY2VpdmVkLiBJbiBhZGRpdGlvbiwgYWZ0ZXIgYSBuZXcgdmVyc2lvbiBvZgordGhlIEFncmVlbWVudCBpcyBwdWJsaXNoZWQsIENvbnRyaWJ1dG9yIG1heSBlbGVjdCB0byBkaXN0cmlidXRlIHRoZSBQcm9ncmFtCisoaW5jbHVkaW5nIGl0cyBDb250cmlidXRpb25zKSB1bmRlciB0aGUgbmV3IHZlcnNpb24uIEV4Y2VwdCBhcyBleHByZXNzbHkgc3RhdGVkCitpbiBTZWN0aW9ucyAyKGEpIGFuZCAyKGIpIGFib3ZlLCBSZWNpcGllbnQgcmVjZWl2ZXMgbm8gcmlnaHRzIG9yIGxpY2Vuc2VzIHRvCit0aGUgaW50ZWxsZWN0dWFsIHByb3BlcnR5IG9mIGFueSBDb250cmlidXRvciB1bmRlciB0aGlzIEFncmVlbWVudCwgd2hldGhlcgorZXhwcmVzc2x5LCBieSBpbXBsaWNhdGlvbiwgZXN0b3BwZWwgb3Igb3RoZXJ3aXNlLiBBbGwgcmlnaHRzIGluIHRoZSBQcm9ncmFtIG5vdAorZXhwcmVzc2x5IGdyYW50ZWQgdW5kZXIgdGhpcyBBZ3JlZW1lbnQgYXJlIHJlc2VydmVkLjwvc3Bhbj4gPC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+VGhpcyBBZ3JlZW1lbnQgaXMgZ292ZXJuZWQgYnkgdGhlIGxhd3Mgb2YgdGhlCitTdGF0ZSBvZiBOZXcgWW9yayBhbmQgdGhlIGludGVsbGVjdHVhbCBwcm9wZXJ0eSBsYXdzIG9mIHRoZSBVbml0ZWQgU3RhdGVzIG9mCitBbWVyaWNhLiBObyBwYXJ0eSB0byB0aGlzIEFncmVlbWVudCB3aWxsIGJyaW5nIGEgbGVnYWwgYWN0aW9uIHVuZGVyIHRoaXMKK0FncmVlbWVudCBtb3JlIHRoYW4gb25lIHllYXIgYWZ0ZXIgdGhlIGNhdXNlIG9mIGFjdGlvbiBhcm9zZS4gRWFjaCBwYXJ0eSB3YWl2ZXMKK2l0cyByaWdodHMgdG8gYSBqdXJ5IHRyaWFsIGluIGFueSByZXN1bHRpbmcgbGl0aWdhdGlvbi48L3NwYW4+IDwvcD4KKworPHAgY2xhc3M9TXNvTm9ybWFsPjwhW2lmICFzdXBwb3J0RW1wdHlQYXJhc10+Jm5ic3A7PCFbZW5kaWZdPjxvOnA+PC9vOnA+PC9wPgorCis8L2Rpdj4KKworPC9ib2R5PgorCis8L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXhhbXBsZS9pY29ucy9mdWxsL29iajE2L0V4YW1wbGVEaXNlYXNlTW9kZWwuZ2lmIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXhhbXBsZS9pY29ucy9mdWxsL29iajE2L0V4YW1wbGVEaXNlYXNlTW9kZWwuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE3MjlhMDQKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leGFtcGxlL2ljb25zL2Z1bGwvb2JqMTYvRXhhbXBsZURpc2Vhc2VNb2RlbC5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXhhbXBsZS9pY29ucy9mdWxsL29iajE2L0V4YW1wbGVNb2RlbEZpbGUuZ2lmIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXhhbXBsZS9pY29ucy9mdWxsL29iajE2L0V4YW1wbGVNb2RlbEZpbGUuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVkMzA5ZWYKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leGFtcGxlL2ljb25zL2Z1bGwvb2JqMTYvRXhhbXBsZU1vZGVsRmlsZS5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXhhbXBsZS9pY29ucy9mdWxsL29iajE2L0V4cGVyaW1lbnRhbERpc2Vhc2VNb2RlbC5naWYgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leGFtcGxlL2ljb25zL2Z1bGwvb2JqMTYvRXhwZXJpbWVudGFsRGlzZWFzZU1vZGVsLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMzhmYjhkCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXhhbXBsZS9pY29ucy9mdWxsL29iajE2L0V4cGVyaW1lbnRhbERpc2Vhc2VNb2RlbC5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXhhbXBsZS9pY29ucy9mdWxsL3dpemJhbi9OZXdFeGFtcGxlLmdpZiBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4YW1wbGUvaWNvbnMvZnVsbC93aXpiYW4vTmV3RXhhbXBsZS5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTdkZTQ0MQotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4YW1wbGUvaWNvbnMvZnVsbC93aXpiYW4vTmV3RXhhbXBsZS5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXhhbXBsZS9tb2RlbC9leGFtcGxlLmVjb3JlIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXhhbXBsZS9tb2RlbC9leGFtcGxlLmVjb3JlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZjMTJmNDcKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leGFtcGxlL21vZGVsL2V4YW1wbGUuZWNvcmUKQEAgLTAsMCArMSwxOCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxlY29yZTpFUGFja2FnZSB4bWk6dmVyc2lvbj0iMi4wIgorICAgIHhtbG5zOnhtaT0iaHR0cDovL3d3dy5vbWcub3JnL1hNSSIgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIKKyAgICB4bWxuczplY29yZT0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9lbWYvMjAwMi9FY29yZSIgbmFtZT0iZXhhbXBsZSIKKyAgICBuc1VSST0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvZXhhbXBsZS5lY29yZSIgbnNQcmVmaXg9Im9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leGFtcGxlIj4KKyAgPGVDbGFzc2lmaWVycyB4c2k6dHlwZT0iZWNvcmU6RUNsYXNzIiBuYW1lPSJFeGFtcGxlRGlzZWFzZU1vZGVsIiBlU3VwZXJUeXBlcz0iLi4vLi4vb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL21vZGVsL3N0YW5kYXJkLmVjb3JlIy8vU3RvY2hhc3RpY1NJUkRpc2Vhc2VNb2RlbCI+CisgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVBdHRyaWJ1dGUiIG5hbWU9InNlYXNvbmFsTW9kdWxhdGlvbkV4cG9uZW50IgorICAgICAgICBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIHBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2UuZW1mLmVjb3JlL21vZGVsL0Vjb3JlLmVjb3JlIy8vRURvdWJsZSIKKyAgICAgICAgZGVmYXVsdFZhbHVlTGl0ZXJhbD0iMi4wIi8+CisgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVBdHRyaWJ1dGUiIG5hbWU9Im1vZHVsYXRpb25QZXJpb2QiIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9lbWYvMjAwMi9FY29yZSMvL0VEb3VibGUiCisgICAgICAgIGRlZmF1bHRWYWx1ZUxpdGVyYWw9IjM2NS4yNTYzNjMwNTEiLz4KKyAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0ibW9kdWxhdGlvblBoYXNlU2hpZnQiIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9lbWYvMjAwMi9FY29yZSMvL0VEb3VibGUiCisgICAgICAgIGRlZmF1bHRWYWx1ZUxpdGVyYWw9IjAuMCIvPgorICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJzZWFzb25hbE1vZHVsYXRpb25GbG9vciIKKyAgICAgICAgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLmVtZi5lY29yZS9tb2RlbC9FY29yZS5lY29yZSMvL0VEb3VibGUiCisgICAgICAgIGRlZmF1bHRWYWx1ZUxpdGVyYWw9IjAuNiIvPgorICA8L2VDbGFzc2lmaWVycz4KKzwvZWNvcmU6RVBhY2thZ2U+CmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leGFtcGxlL21vZGVsL2V4YW1wbGUuZ2VubW9kZWwgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leGFtcGxlL21vZGVsL2V4YW1wbGUuZ2VubW9kZWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTgxNmQ4NQotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4YW1wbGUvbW9kZWwvZXhhbXBsZS5nZW5tb2RlbApAQCAtMCwwICsxLDIzIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPGdlbm1vZGVsOkdlbk1vZGVsIHhtaTp2ZXJzaW9uPSIyLjAiCisgICAgeG1sbnM6eG1pPSJodHRwOi8vd3d3Lm9tZy5vcmcvWE1JIiB4bWxuczplY29yZT0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9lbWYvMjAwMi9FY29yZSIKKyAgICB4bWxuczpnZW5tb2RlbD0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9lbWYvMjAwMi9HZW5Nb2RlbCIgbW9kZWxEaXJlY3Rvcnk9Ii9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXhhbXBsZS9zcmMiCisgICAgZWRpdERpcmVjdG9yeT0iL29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leGFtcGxlL3NyYyIgZWRpdG9yRGlyZWN0b3J5PSIvb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzLmV4YW1wbGUvc3JjIgorICAgIG1vZGVsUGx1Z2luSUQ9Im9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leGFtcGxlIiBtb2RlbE5hbWU9IkV4YW1wbGUiIGVkaXRQbHVnaW5DbGFzcz0ib3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4YW1wbGUucHJvdmlkZXIuRXhhbXBsZUVkaXRQbHVnaW4iCisgICAgZWRpdG9yUGx1Z2luQ2xhc3M9Im9yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy5leGFtcGxlLnByZXNlbnRhdGlvbi5FeGFtcGxlRWRpdG9yUGx1Z2luIgorICAgIG5vbk5MU01hcmtlcnM9InRydWUiIHRlc3RzRGlyZWN0b3J5PSIvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kaXNlYXNlbW9kZWxzLmV4YW1wbGUvc3JjIgorICAgIGltcG9ydGVySUQ9Im9yZy5lY2xpcHNlLmVtZi5pbXBvcnRlci5lY29yZSIgY29tcGxpYW5jZUxldmVsPSI1LjAiIGNvcHlyaWdodEZpZWxkcz0iZmFsc2UiCisgICAgZWRpdFBsdWdpbklEPSJvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXhhbXBsZSIgZWRpdG9yUGx1Z2luSUQ9Im9yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy5leGFtcGxlLmVkaXRvciIKKyAgICB0ZXN0c1BsdWdpbklEPSJvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRpc2Vhc2Vtb2RlbHMuZXhhbXBsZSIgdXNlZEdlblBhY2thZ2VzPSIuLi8uLi9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMvbW9kZWwvZGlzZWFzZW1vZGVscy5nZW5tb2RlbCMvL3N0YW5kYXJkIC4uLy4uL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9tb2RlbC9jb3JlLmdlbm1vZGVsIy8vY29tbW9uIC4uLy4uL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9tb2RlbC9jb3JlLmdlbm1vZGVsIy8vbW9kZWwgLi4vLi4vb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL21vZGVsL2NvcmUuZ2VubW9kZWwjLy9ncmFwaCAuLi8uLi9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvbW9kZWwvY29yZS5nZW5tb2RlbCMvL21vZGlmaWVyIHBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2UuZW1mLmVjb3JlL21vZGVsL0Vjb3JlLmdlbm1vZGVsIy8vZWNvcmUgLi4vLi4vb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL21vZGVsL2NvcmUuZ2VubW9kZWwjLy9zY2VuYXJpbyAuLi8uLi9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvbW9kZWwvY29yZS5nZW5tb2RlbCMvL3NlcXVlbmNlciAuLi8uLi9vcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zL21vZGVsL2RlZmluaXRpb25zLmdlbm1vZGVsIy8vbGFiZWxzIC4uLy4uL29yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy9tb2RlbC9zdGFuZGFyZC5nZW5tb2RlbCMvL3N0YW5kYXJkIC4uLy4uL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9tb2RlbC9jb3JlLmdlbm1vZGVsIy8vc29sdmVyIj4KKyAgPGZvcmVpZ25Nb2RlbD5leGFtcGxlLmVjb3JlPC9mb3JlaWduTW9kZWw+CisgIDxnZW5QYWNrYWdlcyBwcmVmaXg9IkV4YW1wbGUiIGJhc2VQYWNrYWdlPSJvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMiIGRpc3Bvc2FibGVQcm92aWRlckZhY3Rvcnk9InRydWUiCisgICAgICBnZW5lcmF0ZUV4YW1wbGVDbGFzcz0iZmFsc2UiIG11bHRpcGxlRWRpdG9yUGFnZXM9ImZhbHNlIiBnZW5lcmF0ZU1vZGVsV2l6YXJkPSJmYWxzZSIKKyAgICAgIGVjb3JlUGFja2FnZT0iZXhhbXBsZS5lY29yZSMvIj4KKyAgICA8Z2VuQ2xhc3NlcyBlY29yZUNsYXNzPSJleGFtcGxlLmVjb3JlIy8vRXhhbXBsZURpc2Vhc2VNb2RlbCI+CisgICAgICA8Z2VuRmVhdHVyZXMgY3JlYXRlQ2hpbGQ9ImZhbHNlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVBdHRyaWJ1dGUgZXhhbXBsZS5lY29yZSMvL0V4YW1wbGVEaXNlYXNlTW9kZWwvc2Vhc29uYWxNb2R1bGF0aW9uRXhwb25lbnQiLz4KKyAgICAgIDxnZW5GZWF0dXJlcyBjcmVhdGVDaGlsZD0iZmFsc2UiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RUF0dHJpYnV0ZSBleGFtcGxlLmVjb3JlIy8vRXhhbXBsZURpc2Vhc2VNb2RlbC9tb2R1bGF0aW9uUGVyaW9kIi8+CisgICAgICA8Z2VuRmVhdHVyZXMgY3JlYXRlQ2hpbGQ9ImZhbHNlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVBdHRyaWJ1dGUgZXhhbXBsZS5lY29yZSMvL0V4YW1wbGVEaXNlYXNlTW9kZWwvbW9kdWxhdGlvblBoYXNlU2hpZnQiLz4KKyAgICAgIDxnZW5GZWF0dXJlcyBjcmVhdGVDaGlsZD0iZmFsc2UiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RUF0dHJpYnV0ZSBleGFtcGxlLmVjb3JlIy8vRXhhbXBsZURpc2Vhc2VNb2RlbC9zZWFzb25hbE1vZHVsYXRpb25GbG9vciIvPgorICAgIDwvZ2VuQ2xhc3Nlcz4KKyAgPC9nZW5QYWNrYWdlcz4KKzwvZ2VubW9kZWw6R2VuTW9kZWw+CmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leGFtcGxlL25vdGljZS5odG1sIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXhhbXBsZS9ub3RpY2UuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNmFmOTY2Ci0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXhhbXBsZS9ub3RpY2UuaHRtbApAQCAtMCwwICsxLDc5IEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wLy9FTiI+Cis8aHRtbD4KKzxoZWFkPgorPG1ldGEgaHR0cC1lcXVpdj1Db250ZW50LVR5cGUgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PWlzby04ODU5LTEiPgorPHRpdGxlPkVjbGlwc2Uub3JnIFNvZnR3YXJlIFVzZXIgQWdyZWVtZW50PC90aXRsZT4KKzwvaGVhZD4KKworPGJvZHkgbGFuZz0iRU4tVVMiIGxpbms9Ymx1ZSB2bGluaz1wdXJwbGU+Cis8aDI+RWNsaXBzZSBGb3VuZGF0aW9uIFNvZnR3YXJlIFVzZXIgQWdyZWVtZW50PC9oMj4KKzxwPk1hcmNoIDE3LCAyMDA1PC9wPgorCis8aDM+VXNhZ2UgT2YgQ29udGVudDwvaDM+CisKKzxwPlRIRSBFQ0xJUFNFIEZPVU5EQVRJT04gTUFLRVMgQVZBSUxBQkxFIFNPRlRXQVJFLCBET0NVTUVOVEFUSU9OLCBJTkZPUk1BVElPTiBBTkQvT1IgT1RIRVIgTUFURVJJQUxTIEZPUiBPUEVOIFNPVVJDRSBQUk9KRUNUUworICAgKENPTExFQ1RJVkVMWSAmcXVvdDtDT05URU5UJnF1b3Q7KS4gIFVTRSBPRiBUSEUgQ09OVEVOVCBJUyBHT1ZFUk5FRCBCWSBUSEUgVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgVEhJUyBBR1JFRU1FTlQgQU5EL09SIFRIRSBURVJNUyBBTkQKKyAgIENPTkRJVElPTlMgT0YgTElDRU5TRSBBR1JFRU1FTlRTIE9SIE5PVElDRVMgSU5ESUNBVEVEIE9SIFJFRkVSRU5DRUQgQkVMT1cuICBCWSBVU0lORyBUSEUgQ09OVEVOVCwgWU9VIEFHUkVFIFRIQVQgWU9VUiBVU0UKKyAgIE9GIFRIRSBDT05URU5UIElTIEdPVkVSTkVEIEJZIFRISVMgQUdSRUVNRU5UIEFORC9PUiBUSEUgVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgQU5ZIEFQUExJQ0FCTEUgTElDRU5TRSBBR1JFRU1FTlRTIE9SCisgICBOT1RJQ0VTIElORElDQVRFRCBPUiBSRUZFUkVOQ0VEIEJFTE9XLiAgSUYgWU9VIERPIE5PVCBBR1JFRSBUTyBUSEUgVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgVEhJUyBBR1JFRU1FTlQgQU5EIFRIRSBURVJNUyBBTkQKKyAgIENPTkRJVElPTlMgT0YgQU5ZIEFQUExJQ0FCTEUgTElDRU5TRSBBR1JFRU1FTlRTIE9SIE5PVElDRVMgSU5ESUNBVEVEIE9SIFJFRkVSRU5DRUQgQkVMT1csIFRIRU4gWU9VIE1BWSBOT1QgVVNFIFRIRSBDT05URU5ULjwvcD4KKyAgIAorPGgzPkFwcGxpY2FibGUgTGljZW5zZXM8L2gzPiAgIAorICAgCis8cD5Vbmxlc3Mgb3RoZXJ3aXNlIGluZGljYXRlZCwgYWxsIENvbnRlbnQgbWFkZSBhdmFpbGFibGUgYnkgdGhlIEVjbGlwc2UgRm91bmRhdGlvbiBpcyBwcm92aWRlZCB0byB5b3UgdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4wCisgICAoJnF1b3Q7RVBMJnF1b3Q7KS4gIEEgY29weSBvZiB0aGUgRVBMIGlzIHByb3ZpZGVkIHdpdGggdGhpcyBDb250ZW50IGFuZCBpcyBhbHNvIGF2YWlsYWJsZSBhdCA8YSBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbCI+aHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWw8L2E+LgorICAgRm9yIHB1cnBvc2VzIG9mIHRoZSBFUEwsICZxdW90O1Byb2dyYW0mcXVvdDsgd2lsbCBtZWFuIHRoZSBDb250ZW50LjwvcD4KKworPHA+Q29udGVudCBpbmNsdWRlcywgYnV0IGlzIG5vdCBsaW1pdGVkIHRvLCBzb3VyY2UgY29kZSwgb2JqZWN0IGNvZGUsIGRvY3VtZW50YXRpb24gYW5kIG90aGVyIGZpbGVzIG1haW50YWluZWQgaW4gdGhlIEVjbGlwc2Uub3JnIENWUyByZXBvc2l0b3J5ICgmcXVvdDtSZXBvc2l0b3J5JnF1b3Q7KSBpbiBDVlMKKyAgIG1vZHVsZXMgKCZxdW90O01vZHVsZXMmcXVvdDspIGFuZCBtYWRlIGF2YWlsYWJsZSBhcyBkb3dubG9hZGFibGUgYXJjaGl2ZXMgKCZxdW90O0Rvd25sb2FkcyZxdW90OykuPC9wPgorICAgCis8dWw+CisJPGxpPkNvbnRlbnQgbWF5IGJlIHN0cnVjdHVyZWQgYW5kIHBhY2thZ2VkIGludG8gbW9kdWxlcyB0byBmYWNpbGl0YXRlIGRlbGl2ZXJpbmcsIGV4dGVuZGluZywgYW5kIHVwZ3JhZGluZyB0aGUgQ29udGVudC4gIFR5cGljYWwgbW9kdWxlcyBtYXkgaW5jbHVkZSBwbHVnLWlucyAoJnF1b3Q7UGx1Zy1pbnMmcXVvdDspLCBwbHVnLWluIGZyYWdtZW50cyAoJnF1b3Q7RnJhZ21lbnRzJnF1b3Q7KSwgYW5kIGZlYXR1cmVzICgmcXVvdDtGZWF0dXJlcyZxdW90OykuPC9saT4KKwk8bGk+RWFjaCBQbHVnLWluIG9yIEZyYWdtZW50IG1heSBiZSBwYWNrYWdlZCBhcyBhIHN1Yi1kaXJlY3Rvcnkgb3IgSkFSIChKYXZhJnRyYWRlOyBBUmNoaXZlKSBpbiBhIGRpcmVjdG9yeSBuYW1lZCAmcXVvdDtwbHVnaW5zJnF1b3Q7LjwvbGk+CisJPGxpPkEgRmVhdHVyZSBpcyBhIGJ1bmRsZSBvZiBvbmUgb3IgbW9yZSBQbHVnLWlucyBhbmQvb3IgRnJhZ21lbnRzIGFuZCBhc3NvY2lhdGVkIG1hdGVyaWFsLiAgRWFjaCBGZWF0dXJlIG1heSBiZSBwYWNrYWdlZCBhcyBhIHN1Yi1kaXJlY3RvcnkgaW4gYSBkaXJlY3RvcnkgbmFtZWQgJnF1b3Q7ZmVhdHVyZXMmcXVvdDsuICBXaXRoaW4gYSBGZWF0dXJlLCBmaWxlcyBuYW1lZCAmcXVvdDtmZWF0dXJlLnhtbCZxdW90OyBtYXkgY29udGFpbiBhIGxpc3Qgb2YgdGhlIG5hbWVzIGFuZCB2ZXJzaW9uIG51bWJlcnMgb2YgdGhlIFBsdWctaW5zCisgICAgICBhbmQvb3IgRnJhZ21lbnRzIGFzc29jaWF0ZWQgd2l0aCB0aGF0IEZlYXR1cmUuPC9saT4KKwk8bGk+RmVhdHVyZXMgbWF5IGFsc28gaW5jbHVkZSBvdGhlciBGZWF0dXJlcyAoJnF1b3Q7SW5jbHVkZWQgRmVhdHVyZXMmcXVvdDspLiBXaXRoaW4gYSBGZWF0dXJlLCBmaWxlcyBuYW1lZCAmcXVvdDtmZWF0dXJlLnhtbCZxdW90OyBtYXkgY29udGFpbiBhIGxpc3Qgb2YgdGhlIG5hbWVzIGFuZCB2ZXJzaW9uIG51bWJlcnMgb2YgSW5jbHVkZWQgRmVhdHVyZXMuPC9saT4KKzwvdWw+ICAgCisgCis8cD5UaGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgZ292ZXJuaW5nIFBsdWctaW5zIGFuZCBGcmFnbWVudHMgc2hvdWxkIGJlIGNvbnRhaW5lZCBpbiBmaWxlcyBuYW1lZCAmcXVvdDthYm91dC5odG1sJnF1b3Q7ICgmcXVvdDtBYm91dHMmcXVvdDspLiBUaGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgZ292ZXJuaW5nIEZlYXR1cmVzIGFuZAorSW5jbHVkZWQgRmVhdHVyZXMgc2hvdWxkIGJlIGNvbnRhaW5lZCBpbiBmaWxlcyBuYW1lZCAmcXVvdDtsaWNlbnNlLmh0bWwmcXVvdDsgKCZxdW90O0ZlYXR1cmUgTGljZW5zZXMmcXVvdDspLiAgQWJvdXRzIGFuZCBGZWF0dXJlIExpY2Vuc2VzIG1heSBiZSBsb2NhdGVkIGluIGFueSBkaXJlY3Rvcnkgb2YgYSBEb3dubG9hZCBvciBNb2R1bGUKK2luY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvIHRoZSBmb2xsb3dpbmcgbG9jYXRpb25zOjwvcD4KKworPHVsPgorCTxsaT5UaGUgdG9wLWxldmVsIChyb290KSBkaXJlY3Rvcnk8L2xpPgorCTxsaT5QbHVnLWluIGFuZCBGcmFnbWVudCBkaXJlY3RvcmllczwvbGk+CisJPGxpPkluc2lkZSBQbHVnLWlucyBhbmQgRnJhZ21lbnRzIHBhY2thZ2VkIGFzIEpBUnM8L2xpPgorCTxsaT5TdWItZGlyZWN0b3JpZXMgb2YgdGhlIGRpcmVjdG9yeSBuYW1lZCAmcXVvdDtzcmMmcXVvdDsgb2YgY2VydGFpbiBQbHVnLWluczwvbGk+CisJPGxpPkZlYXR1cmUgZGlyZWN0b3JpZXM8L2xpPgorPC91bD4KKwkJCis8cD5Ob3RlOiBpZiBhIEZlYXR1cmUgbWFkZSBhdmFpbGFibGUgYnkgdGhlIEVjbGlwc2UgRm91bmRhdGlvbiBpcyBpbnN0YWxsZWQgdXNpbmcgdGhlIEVjbGlwc2UgVXBkYXRlIE1hbmFnZXIsIHlvdSBtdXN0IGFncmVlIHRvIGEgbGljZW5zZSAoJnF1b3Q7RmVhdHVyZSBVcGRhdGUgTGljZW5zZSZxdW90OykgZHVyaW5nIHRoZQoraW5zdGFsbGF0aW9uIHByb2Nlc3MuICBJZiB0aGUgRmVhdHVyZSBjb250YWlucyBJbmNsdWRlZCBGZWF0dXJlcywgdGhlIEZlYXR1cmUgVXBkYXRlIExpY2Vuc2Ugc2hvdWxkIGVpdGhlciBwcm92aWRlIHlvdSB3aXRoIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBnb3Zlcm5pbmcgdGhlIEluY2x1ZGVkIEZlYXR1cmVzIG9yCitpbmZvcm0geW91IHdoZXJlIHlvdSBjYW4gbG9jYXRlIHRoZW0uICBGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlcyBtYXkgYmUgZm91bmQgaW4gdGhlICZxdW90O2xpY2Vuc2UmcXVvdDsgcHJvcGVydHkgb2YgZmlsZXMgbmFtZWQgJnF1b3Q7ZmVhdHVyZS5wcm9wZXJ0aWVzJnF1b3Q7IGZvdW5kIHdpdGhpbiBhIEZlYXR1cmUuCitTdWNoIEFib3V0cywgRmVhdHVyZSBMaWNlbnNlcywgYW5kIEZlYXR1cmUgVXBkYXRlIExpY2Vuc2VzIGNvbnRhaW4gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIChvciByZWZlcmVuY2VzIHRvIHN1Y2ggdGVybXMgYW5kIGNvbmRpdGlvbnMpIHRoYXQgZ292ZXJuIHlvdXIgdXNlIG9mIHRoZSBhc3NvY2lhdGVkIENvbnRlbnQgaW4KK3RoYXQgZGlyZWN0b3J5LjwvcD4KKworPHA+VEhFIEFCT1VUUywgRkVBVFVSRSBMSUNFTlNFUywgQU5EIEZFQVRVUkUgVVBEQVRFIExJQ0VOU0VTIE1BWSBSRUZFUiBUTyBUSEUgRVBMIE9SIE9USEVSIExJQ0VOU0UgQUdSRUVNRU5UUywgTk9USUNFUyBPUiBURVJNUyBBTkQgQ09ORElUSU9OUy4gIFNPTUUgT0YgVEhFU0UKK09USEVSIExJQ0VOU0UgQUdSRUVNRU5UUyBNQVkgSU5DTFVERSAoQlVUIEFSRSBOT1QgTElNSVRFRCBUTyk6PC9wPgorCis8dWw+CisJPGxpPkNvbW1vbiBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMCAoYXZhaWxhYmxlIGF0IDxhIGhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvY3BsLXYxMC5odG1sIj5odHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2NwbC12MTAuaHRtbDwvYT4pPC9saT4KKwk8bGk+QXBhY2hlIFNvZnR3YXJlIExpY2Vuc2UgMS4xIChhdmFpbGFibGUgYXQgPGEgaHJlZj0iaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UiPmh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFPC9hPik8L2xpPgorCTxsaT5BcGFjaGUgU29mdHdhcmUgTGljZW5zZSAyLjAgKGF2YWlsYWJsZSBhdCA8YSBocmVmPSJodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAiPmh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMDwvYT4pPC9saT4KKwk8bGk+SUJNIFB1YmxpYyBMaWNlbnNlIDEuMCAoYXZhaWxhYmxlIGF0IDxhIGhyZWY9Imh0dHA6Ly9vc3Muc29mdHdhcmUuaWJtLmNvbS9kZXZlbG9wZXJ3b3Jrcy9vcGVuc291cmNlL2xpY2Vuc2UxMC5odG1sIj5odHRwOi8vb3NzLnNvZnR3YXJlLmlibS5jb20vZGV2ZWxvcGVyd29ya3Mvb3BlbnNvdXJjZS9saWNlbnNlMTAuaHRtbDwvYT4pPC9saT4JCisJPGxpPk1ldHJvIExpbmsgUHVibGljIExpY2Vuc2UgMS4wMCAoYXZhaWxhYmxlIGF0IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbmdyb3VwLm9yZy9vcGVubW90aWYvc3VwcG9ydGVycy9tZXRyb2xpbmsvbGljZW5zZS5odG1sIj5odHRwOi8vd3d3Lm9wZW5ncm91cC5vcmcvb3Blbm1vdGlmL3N1cHBvcnRlcnMvbWV0cm9saW5rL2xpY2Vuc2UuaHRtbDwvYT4pPC9saT4KKwk8bGk+TW96aWxsYSBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMSAoYXZhaWxhYmxlIGF0IDxhIGhyZWY9Imh0dHA6Ly93d3cubW96aWxsYS5vcmcvTVBML01QTC0xLjEuaHRtbCI+aHR0cDovL3d3dy5tb3ppbGxhLm9yZy9NUEwvTVBMLTEuMS5odG1sPC9hPik8L2xpPgorPC91bD4KKworPHA+SVQgSVMgWU9VUiBPQkxJR0FUSU9OIFRPIFJFQUQgQU5EIEFDQ0VQVCBBTEwgU1VDSCBURVJNUyBBTkQgQ09ORElUSU9OUyBQUklPUiBUTyBVU0UgT0YgVEhFIENPTlRFTlQuICBJZiBubyBBYm91dCwgRmVhdHVyZSBMaWNlbnNlLCBvciBGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlIGlzIHByb3ZpZGVkLCBwbGVhc2UKK2NvbnRhY3QgdGhlIEVjbGlwc2UgRm91bmRhdGlvbiB0byBkZXRlcm1pbmUgd2hhdCB0ZXJtcyBhbmQgY29uZGl0aW9ucyBnb3Zlcm4gdGhhdCBwYXJ0aWN1bGFyIENvbnRlbnQuPC9wPgorCis8aDM+Q3J5cHRvZ3JhcGh5PC9oMz4KKworPHA+Q29udGVudCBtYXkgY29udGFpbiBlbmNyeXB0aW9uIHNvZnR3YXJlLiBUaGUgY291bnRyeSBpbiB3aGljaCB5b3UgYXJlIGN1cnJlbnRseSBtYXkgaGF2ZSByZXN0cmljdGlvbnMgb24gdGhlIGltcG9ydCwgcG9zc2Vzc2lvbiwgYW5kIHVzZSwgYW5kL29yIHJlLWV4cG9ydCB0bworICAgYW5vdGhlciBjb3VudHJ5LCBvZiBlbmNyeXB0aW9uIHNvZnR3YXJlLiBCRUZPUkUgdXNpbmcgYW55IGVuY3J5cHRpb24gc29mdHdhcmUsIHBsZWFzZSBjaGVjayB0aGUgY291bnRyeSdzIGxhd3MsIHJlZ3VsYXRpb25zIGFuZCBwb2xpY2llcyBjb25jZXJuaW5nIHRoZSBpbXBvcnQsCisgICBwb3NzZXNzaW9uLCBvciB1c2UsIGFuZCByZS1leHBvcnQgb2YgZW5jcnlwdGlvbiBzb2Z0d2FyZSwgdG8gc2VlIGlmIHRoaXMgaXMgcGVybWl0dGVkLjwvcD4KKyAgIAorPHNtYWxsPkphdmEgYW5kIGFsbCBKYXZhLWJhc2VkIHRyYWRlbWFya3MgYXJlIHRyYWRlbWFya3Mgb2YgU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiBpbiB0aGUgVW5pdGVkIFN0YXRlcywgb3RoZXIgY291bnRyaWVzLCBvciBib3RoLjwvc21hbGw+ICAgCis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leGFtcGxlL3BsdWdpbi5wcm9wZXJ0aWVzIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXhhbXBsZS9wbHVnaW4ucHJvcGVydGllcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ODUzMmVmCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXhhbXBsZS9wbHVnaW4ucHJvcGVydGllcwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leGFtcGxlL3BsdWdpbi54bWwgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leGFtcGxlL3BsdWdpbi54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTg2ODE1MwotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4YW1wbGUvcGx1Z2luLnhtbApAQCAtMCwwICsxLDQ3IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPD9lY2xpcHNlIHZlcnNpb249IjMuMCI/PgorCis8IS0tCisgPGNvcHlyaWdodD4KKyA8L2NvcHlyaWdodD4KKworICRJZCQKKy0tPgorCis8cGx1Z2luPgorICAgIAorICA8ZXh0ZW5zaW9uIHBvaW50PSJvcmcuZWNsaXBzZS5lbWYuZWRpdC5pdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yaWVzIj4KKyAgICA8ZmFjdG9yeSAKKyAgICAgICB1cmkgPSAiaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvZXhhbXBsZS5lY29yZSIgCisgICAgICAgY2xhc3MgPSAib3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4YW1wbGUucHJvdmlkZXIuRXhhbXBsZUl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5IiAKKyAgICAgICBzdXBwb3J0ZWRUeXBlcyA9IAorICAgICAgICAgIm9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklFZGl0aW5nRG9tYWluSXRlbVByb3ZpZGVyCisgICAgICAgICAgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVN0cnVjdHVyZWRJdGVtQ29udGVudFByb3ZpZGVyCisgICAgICAgICAgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVRyZWVJdGVtQ29udGVudFByb3ZpZGVyCisgICAgICAgICAgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1MYWJlbFByb3ZpZGVyCisgICAgICAgICAgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1Qcm9wZXJ0eVNvdXJjZSIgLz4KKyAgPC9leHRlbnNpb24+CisKKyAgPGV4dGVuc2lvbiBwb2ludD0ib3JnLmVjbGlwc2UuZW1mLmVjb3JlLmdlbmVyYXRlZF9wYWNrYWdlIj4KKyAgICA8cGFja2FnZQorICAgICAgIHVyaSA9ICJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9leGFtcGxlLmVjb3JlIgorICAgICAgIGNsYXNzID0gIm9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leGFtcGxlLkV4YW1wbGVQYWNrYWdlIgorICAgICAgIGdlbk1vZGVsID0gIm1vZGVsL2V4YW1wbGUuZ2VubW9kZWwiIC8+IAorICA8L2V4dGVuc2lvbj4KKyAgPGV4dGVuc2lvbgorICAgICAgICBwb2ludD0ib3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmRpc2Vhc2Vtb2RlbCI+CisgICAgIDxjbGFzc2RlZgorICAgICAgICAgICBjbGFzcz0ib3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4YW1wbGUuaW1wbC5FeGFtcGxlRGlzZWFzZU1vZGVsSW1wbCI+CisgICAgIDwvY2xhc3NkZWY+CisgICAgIDxkdWJsaW5fY29yZQorICAgICAgICAgICBjcmVhdG9yPSIlZGNfY3JlYXRvcl9rYXVmbWFuIgorICAgICAgICAgICBkZXNjcmlwdGlvbj0iJWRjX2Rlc2NfRXhfU19TRUlSIgorICAgICAgICAgICBpZGVudGlmaWVyPSIlZGNfaWRlbnRpZXIiCisgICAgICAgICAgIHNvdXJjZT0iJWRjX1NPVVJDRSIKKyAgICAgICAgICAgdGl0bGU9IiVkY190aXRsZV9FeF9TX1NFSVIiCisgICAgICAgICAgIGxpY2Vuc2U9IiVkY19saWNlbnNlIgorICAgICAgICAgICBwdWJsaXNoZXI9IiVkY19wdWJsaXNoZXIiPgorICAgICA8L2R1Ymxpbl9jb3JlPgorICA8L2V4dGVuc2lvbj4KKworPC9wbHVnaW4+CmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leGFtcGxlL3BsdWdpbl9kZS5wcm9wZXJ0aWVzIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXhhbXBsZS9wbHVnaW5fZGUucHJvcGVydGllcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NDljZGE2Ci0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXhhbXBsZS9wbHVnaW5fZGUucHJvcGVydGllcwpAQCAtMCwwICsxLDExMCBAQAorIy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjICogQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorIyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyMgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyMgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorIyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisjICoKKyMgKiBDb250cmlidXRvcnM6CisjICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorIyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisjIFRvIGNvZGUgZGV2ZWxvcGVyOgorIyAgIERvIE5PVCBjaGFuZ2UgdGhlIHByb3BlcnRpZXMgYmV0d2VlbiB0aGlzIGxpbmUgYW5kIHRoZQorIyAgICIlJSUgRU5EIE9GIFRSQU5TTEFURUQgUFJPUEVSVElFUyAlJSUiIGxpbmUuCisjICAgTWFrZSBhIG5ldyBwcm9wZXJ0eSBuYW1lLCBhcHBlbmQgdG8gdGhlIGVuZCBvZiB0aGUgZmlsZSBhbmQgY2hhbmdlCisjICAgdGhlIGNvZGUgdG8gdXNlIHRoZSBuZXcgcHJvcGVydHkuCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyMgJSUlIEVORCBPRiBUUkFOU0xBVEVEIFBST1BFUlRJRVMgJSUlCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK3BsdWdpbk5hbWU9U1RFTSBCZWlzcGllbC1LcmFua2hlaXRzbW9kZWxsCitwcm92aWRlck5hbWU9RWNsaXBzZS5vcmcKKworIyBEdWJsaW4gQ29yZQorZGNfY3JlYXRvcl9rYXVmbWFuPUthdWZtYW4KK2RjX2Rlc2NfRXhfU19TRUlSPUV4cGVyaW1lbnRlbGxlcyBzdG9jaGFzdGlzY2hlcyBTRUlSLUtyYW5raGVpdHNtb2RlbGwKK2RjX3RpdGxlX0V4X1NfU0VJUj1FeHBlcmltZW50ZWxsZXMgU0VJUi1LcmFua2hlaXRzbW9kZWxsCitkY19pZGVudGllcj1TVEVNIEtyYW5raGVpdHNtb2RlbGwKK2RjX3B1Ymxpc2hlcj1EaWUgRWNsaXBzZSBGb3VuZGF0aW9uCitkY19saWNlbnNlPUVjbGlwc2UgUHVibGljIExpY2Vuc2UgKEVQTCkKK2RjX1NPVVJDRT1odHRwOi8vd2lraS5lY2xpcHNlLm9yZy9JbnRyb2R1Y3Rpb25fdG9fQ29tcGFydG1lbnRfTW9kZWxzICh1bmQgUmVmZXJlbnplbiBnaWJ0IGVzLWluKQorCitfVUlfQ3JlYXRlQ2hpbGRfdGV4dD17MH0KK19VSV9DcmVhdGVDaGlsZF90ZXh0Mj17MX0gezB9CitfVUlfQ3JlYXRlQ2hpbGRfdGV4dDM9ezF9CitfVUlfQ3JlYXRlQ2hpbGRfdG9vbHRpcD1OZXVlcyB7MH0gdW50ZXIgezF9IEZlYXR1cmUgZXJzdGVsbGVuCitfVUlfQ3JlYXRlQ2hpbGRfZGVzY3JpcHRpb249TmV1ZXMgS2luZCB2b20gVHlwIHswfSBmXHUwMGZjciBkYXMgezF9IE1lcmttYWwgZGVyIGF1c2dld1x1MDBlNGhsdGVuIHsyfSBlcnN0ZWxsZW4KK19VSV9DcmVhdGVTaWJsaW5nX2Rlc2NyaXB0aW9uPU5ldWVzIEdlc2Nod2lzdGVydGVpbCB2b20gVHlwIHswfSBmXHUwMGZjciBkZW4gYXVzZ2V3XHUwMGU0aGx0ZW4gezJ9IHVudGVyIGRlbSB7MX0gTWVya21hbCBkZXMgRWx0ZXJudGVpbCBlcnN0ZWxsZW4KKworX1VJX1Byb3BlcnR5RGVzY3JpcHRvcl9kZXNjcmlwdGlvbj17MH0gdm9uIHsxfQorCitfVUlfRXhwZXJpbWVudGFsRGlzZWFzZU1vZGVsX3R5cGU9RXhwZXJpbWVudGVsbGVzIEtyYW5raGVpdHNtb2RlbGwKK19VSV9Vbmtub3duX3R5cGU9T2JqZWt0CisKK19VSV9Vbmtub3duX2RhdGF0eXBlPVdlcnQKKworX1VJX1Vua25vd25fZmVhdHVyZT1OaWNodCBzcGV6aWZpemllcnQKKworX1VJX0V4YW1wbGVEaXNlYXNlTW9kZWxfdHlwZT1LcmFua2hlaXRzbW9kZWxsCitfVUlfRXhhbXBsZUVkaXRvcl9tZW51PSZFeGFtcGxlIEVkaXRvcgorCitfVUlfQ3JlYXRlQ2hpbGRfbWVudV9pdGVtPSZOZXcgQ2hpbGQKK19VSV9DcmVhdGVTaWJsaW5nX21lbnVfaXRlbT1OJmV1ZXMgR2VzY2h3aXN0ZXJ0ZWlsCisKK19VSV9TaG93UHJvcGVydGllc1ZpZXdfbWVudV9pdGVtPVNob3cgJiBQcm9wZXJ0aWVzIFZpZXcKK19VSV9SZWZyZXNoVmlld2VyX21lbnVfaXRlbT0mUmVmcmVzaAorCitfVUlfU2VsZWN0aW9uUGFnZV9sYWJlbD1BdXN3YWhsCitfVUlfUGFyZW50UGFnZV9sYWJlbD1FbHRlcm50ZWlsCitfVUlfTGlzdFBhZ2VfbGFiZWw9TGlzdGUKK19VSV9UcmVlUGFnZV9sYWJlbD1CYXVtCitfVUlfVGFibGVQYWdlX2xhYmVsPVRhYmVsbGUKK19VSV9UcmVlV2l0aENvbHVtbnNQYWdlX2xhYmVsPUJhdW0gbWl0IFNwYWx0ZW4KK19VSV9PYmplY3RDb2x1bW5fbGFiZWw9T2JqZWt0CitfVUlfU2VsZkNvbHVtbl9sYWJlbD1TZWxic3QKKworX1VJX05vT2JqZWN0U2VsZWN0ZWQ9TmljaHRzIGF1c2dld1x1MDBlNGhsdAorX1VJX1NpbmdsZU9iamVjdFNlbGVjdGVkPUF1c2dld1x1MDBlNGhsdGVzIE9iamVrdDogezB9CitfVUlfTXVsdGlPYmplY3RTZWxlY3RlZD1BdXNnZXdcdTAwZTRobHRlIHswfSBPYmpla3RlCisKK19VSV9PcGVuRWRpdG9yRXJyb3JfbGFiZWw9RWRpdG9yIFx1MDBmNmZmbmVuCisKK19VSV9XaXphcmRfY2F0ZWdvcnk9QmVpc3BpZWwgRU1GIE1vZGVsbCBFcnN0ZWxsdW5nc2Fzc2lzdGVudAorCitfVUlfQ3JlYXRlTW9kZWxFcnJvcl9tZXNzYWdlPUF1ZmdldHJldGVuZSBQcm9ibGVtZSBpbiBkZXIgRGF0ZWkgInswfSIKKworX1VJX0V4YW1wbGVNb2RlbFdpemFyZF9sYWJlbD1CZWlzcGllbCBNb2RlbGwKK19VSV9FeGFtcGxlTW9kZWxXaXphcmRfZGVzY3JpcHRpb249TmV1ZXMgQmVpc3BpZWwtTW9kZWxsIGVyc3RlbGxlbgorCitfVUlfRXhhbXBsZUVkaXRvcl9sYWJlbD1CZWlzcGllbCBNb2RlbGwtRWRpdG9yCisKK19VSV9FeGFtcGxlRWRpdG9yRmlsZW5hbWVEZWZhdWx0QmFzZT1NZWluCitfVUlfRXhhbXBsZUVkaXRvckZpbGVuYW1lRXh0ZW5zaW9uPUJlaXNwaWVsCisKK19VSV9XaXphcmRfbGFiZWw9TmV1CisKK19XQVJOX0ZpbGVuYW1lRXh0ZW5zaW9uPURlciBEYXRlaW5hbWUgbXVzcyBhdWYgIi57MH0iIGVuZGVuCisKK19VSV9Nb2RlbE9iamVjdD0mTW9kZWwgT2JqZWN0CitfVUlfWE1MRW5jb2Rpbmc9JlhNTCBFbmNvZGluZworX1VJX1hNTEVuY29kaW5nQ2hvaWNlcz1VVEYtOCBBU0NJSSBVVEYtMTYgVVRGLTE2QkUgVVRGLTE2TEUgSVNPLTg4NTktMQorX1VJX1dpemFyZF9pbml0aWFsX29iamVjdF9kZXNjcmlwdGlvbj1adSBlcnpldWdlbmRlcyBNb2RlbGxvYmpla3Qgd1x1MDBlNGhsZW4KKworX1VJX0ZpbGVDb25mbGljdF9sYWJlbD1EYXRlaWtvbmZsaWt0CitfV0FSTl9GaWxlQ29uZmxpY3Q9RXMgZ2lidCBuaWNodCBnZXNwZWljaGVydGUgXHUwMGM0bmRlcnVuZ2VuLCBkaWUgS29uZmxpa3RlIG1pdCBcdTAwYzRuZGVydW5nZW4gYXVcdTAwZGZlcmhhbGIgZGVzIEVkaXRvcnMgZXJ6ZXVnZW4uIE1cdTAwZjZjaHRlbiBTaWUgZGllIFx1MDBjNG5kZXJ1bmdlbiBpbSBFZGl0b3IgdmVyd2VyZmVuPworCitfVUlfRXhhbXBsZURpc2Vhc2VNb2RlbF9zZWFzb25hbE1vZHVsYXRpb25fZmVhdHVyZT1TYWlzb25hbGUgTW9kdWxhdGlvbgorX1VJX0V4YW1wbGVEaXNlYXNlTW9kZWxfbW9kdWxhdGlvblBlcmlvZF9mZWF0dXJlPU1vZHVsYXRpb25zcGVyaW9kZQorX1VJX0V4YW1wbGVEaXNlYXNlTW9kZWxfbW9kdWxhdGlvblBoYXNlU2hpZl9mZWF0dXJlPVBoYXNlbnZlcnNjaGllYnVuZyBkZXIgTW9kdWxhdGlvbgorX1VJX0V4YW1wbGVFZGl0b3JGaWxlbmFtZUV4dGVuc2lvbnM9QmVpc3BpZWwKKworX1dBUk5fRmlsZW5hbWVFeHRlbnNpb25zPURlciBEYXRlaW5hbWUgbXVzcyBlaW5lIGRlciBmb2xnZW5kZW4gRW5kdW5nZW4gaGFiZW46IHswfQorCitfVUlfRXhhbXBsZURpc2Vhc2VNb2RlbF9tb2R1bGF0aW9uUGhhc2VTaGlmdF9mZWF0dXJlPVBoYXNlbnZlcnNjaGllYnVuZyBkZXIgTW9kdWxhdGlvbgorX1VJX0V4YW1wbGVEaXNlYXNlTW9kZWxfc2Vhc29uYWxNb2R1bGF0aW9uVGhyZXNob2xkX2ZlYXR1cmU9U2Fpc29uYWxlIE1vZHVsYXRpb25zZ3Jlbnp3ZXJ0CitfVUlfRXhhbXBsZURpc2Vhc2VNb2RlbF9zZWFzb25hbE1vZHVsYXRpb25FeHBvbmVudF9mZWF0dXJlPVNhaXNvbmFsZXIgTW9kdWxhdGlvbnNleHBvbmVudAorX1VJX0V4YW1wbGVEaXNlYXNlTW9kZWxfc2Vhc29uYWxNb2R1bGF0aW9uRmxvb3JfZmVhdHVyZT1TYWlzb25hbGUgTW9kdWxhdGlvbnMtVW50ZXJncmVuemUKZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4YW1wbGUvcGx1Z2luX2tyLnByb3BlcnRpZXMgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leGFtcGxlL3BsdWdpbl9rci5wcm9wZXJ0aWVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMyZWZjZTkKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leGFtcGxlL3BsdWdpbl9rci5wcm9wZXJ0aWVzCkBAIC0wLDAgKzEsMTEwIEBACisjLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyMgKiBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisjICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworIyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorIyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisjICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyMgKgorIyAqIENvbnRyaWJ1dG9yczoKKyMgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisjICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyMgVG8gY29kZSBkZXZlbG9wZXI6CisjICAgRG8gTk9UIGNoYW5nZSB0aGUgcHJvcGVydGllcyBiZXR3ZWVuIHRoaXMgbGluZSBhbmQgdGhlCisjICAgIiUlJSBFTkQgT0YgVFJBTlNMQVRFRCBQUk9QRVJUSUVTICUlJSIgbGluZS4KKyMgICBNYWtlIGEgbmV3IHByb3BlcnR5IG5hbWUsIGFwcGVuZCB0byB0aGUgZW5kIG9mIHRoZSBmaWxlIGFuZCBjaGFuZ2UKKyMgICB0aGUgY29kZSB0byB1c2UgdGhlIG5ldyBwcm9wZXJ0eS4KKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorIyAlJSUgRU5EIE9GIFRSQU5TTEFURUQgUFJPUEVSVElFUyAlJSUKKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworcGx1Z2luTmFtZT1TVEVNIFx1YzYwOCBcdWM5YzhcdWJjZDEgXHViYWE4XHViMzc4Citwcm92aWRlck5hbWU9RWNsaXBzZS5vcmcKKworIyBEdWJsaW4gQ29yZQorZGNfY3JlYXRvcl9rYXVmbWFuPVx1Y2U3NFx1ZDUwNFx1YjllOAorZGNfZGVzY19FeF9TX1NFSVI9XHVjMmU0XHVkNWQ4IFNFSVJcdWM3NTggXHVkNjU1XHViOTYwXHVjODAxIFx1YzljOFx1YmNkMSBcdWJhYThcdWIzNzgKK2RjX3RpdGxlX0V4X1NfU0VJUj1cdWMyZTRcdWQ1ZDggU0VJUiBcdWM5YzhcdWJjZDEgXHViYWE4XHViMzc4CitkY19pZGVudGllcj1TVEVNIFx1YzljOFx1YmNkMSBcdWJhYThcdWIzNzgKK2RjX3B1Ymxpc2hlcj1cdWM3NzRcdWQwNzRcdWI5YmRcdWMyYTQgXHVjN2FjXHViMmU4CitkY19saWNlbnNlPVx1Yzc3NFx1ZDA3NFx1YjliZFx1YzJhNCBcdWFjZjVcdWM2YTkgXHVjMGFjXHVjNmE5IFx1ZDVjOFx1YWMwMFx1YzExYyAoRVBMKQorZGNfU09VUkNFPWh0dHA6Ly93aWtpLmVjbGlwc2Uub3JnL0ludHJvZHVjdGlvbl90b19Db21wYXJ0bWVudF9Nb2RlbHMgKFx1YWRmOFx1YjlhY1x1YWNlMCBcdWNjMzhcdWFjZTAgXHViYjM4XHVkNWNjXHVjNWQwXHVjMTFjKQorCitfVUlfQ3JlYXRlQ2hpbGRfdGV4dD17MH0KK19VSV9DcmVhdGVDaGlsZF90ZXh0Mj17MX0gezB9CitfVUlfQ3JlYXRlQ2hpbGRfdGV4dDM9ezF9CitfVUlfQ3JlYXRlQ2hpbGRfdG9vbHRpcD17MX0gXHVhZTMwXHViMmE1IFx1ZDU1OFx1YzVkMCBcdWMwYzggezB9IFx1YjljY1x1YjRlNFx1YWUzMAorX1VJX0NyZWF0ZUNoaWxkX2Rlc2NyaXB0aW9uPVx1YzEyMFx1ZDBkZFx1ZDU1YyB7Mn1cdWM3NTggezF9IFx1YWUzMFx1YjJhNVx1YzVkMCBcdWIzMDBcdWQ1NWMgXHVkNjE1XHVjMmRkIHswfVx1Yzc1OCBcdWMwYzhcdWI4NWNcdWM2YjQgQ2hpbGRcdWI5N2MgXHViOWNjXHViNGVkXHViMmM4XHViMmU0LgorX1VJX0NyZWF0ZVNpYmxpbmdfZGVzY3JpcHRpb249XHViZDgwXHViYWE4XHVjNzU4IFx1YzEyMFx1ZDBkZFx1YjQxYyB7Mn1cdWM1ZDBcdWMxMWMgezF9IFx1YWUzMFx1YjJhNVx1YzVkMCBcdWIzMDBcdWQ1NWMgXHVkNjE1XHVjMmRkIHswfVx1Yzc1OCBcdWMwYzhcdWI4NWNcdWM2YjQgXHVkNjE1XHVjODFjXHViOTdjIFx1YjljY1x1YjRlZFx1YjJjOFx1YjJlNC4KKworX1VJX1Byb3BlcnR5RGVzY3JpcHRvcl9kZXNjcmlwdGlvbj17MX0gXHVjOTExIHswfQorCitfVUlfRXhwZXJpbWVudGFsRGlzZWFzZU1vZGVsX3R5cGU9XHVjMmU0XHVkNWQ4IFx1YzljOFx1YmNkMSBcdWJhYThcdWIzNzgKK19VSV9Vbmtub3duX3R5cGU9XHVhYzFjXHVjY2I0CisKK19VSV9Vbmtub3duX2RhdGF0eXBlPVx1YWMxMgorCitfVUlfVW5rbm93bl9mZWF0dXJlPVx1YzljMFx1YzgxNVx1YjQxOFx1YzljMCBcdWM1NGFcdWM3NGMKKworX1VJX0V4YW1wbGVEaXNlYXNlTW9kZWxfdHlwZT1cdWM5YzhcdWJjZDEgXHViYWE4XHViMzc4CitfVUlfRXhhbXBsZUVkaXRvcl9tZW51PSZFeGFtcGxlIEVkaXRvcgorCitfVUlfQ3JlYXRlQ2hpbGRfbWVudV9pdGVtPSZOZXcgQ2hpbGQKK19VSV9DcmVhdGVTaWJsaW5nX21lbnVfaXRlbT1OJiAgXHVkNjE1XHVjODFjIFx1Yzc5MFx1YjllNAorCitfVUlfU2hvd1Byb3BlcnRpZXNWaWV3X21lbnVfaXRlbT1cdWQ0NWNcdWMyZGMgXHViYzBmIFx1YzE4ZFx1YzEzMVx1YmNmNFx1YWUzMAorX1VJX1JlZnJlc2hWaWV3ZXJfbWVudV9pdGVtPSZSZWZyZXNoCisKK19VSV9TZWxlY3Rpb25QYWdlX2xhYmVsPVx1YzEyMFx1ZDBkZAorX1VJX1BhcmVudFBhZ2VfbGFiZWw9XHViZDgwXHViYWE4CitfVUlfTGlzdFBhZ2VfbGFiZWw9XHViYWE5XHViODVkCitfVUlfVHJlZVBhZ2VfbGFiZWw9XHViMDk4XHViYjM0CitfVUlfVGFibGVQYWdlX2xhYmVsPVx1ZDE0Y1x1Yzc3NFx1YmUxNAorX1VJX1RyZWVXaXRoQ29sdW1uc1BhZ2VfbGFiZWw9XHViMDk4XHViYjM0XHVjNjQwIFx1YzVmNAorX1VJX09iamVjdENvbHVtbl9sYWJlbD1cdWFjMWNcdWNjYjQKK19VSV9TZWxmQ29sdW1uX2xhYmVsPVx1YzE0MFx1ZDUwNAorCitfVUlfTm9PYmplY3RTZWxlY3RlZD1cdWM1NDRcdWJiMzRcdWFjODNcdWIzYzQgXHVjNTQ4IFx1YzEyMFx1ZDBkZFx1ZDU2OAorX1VJX1NpbmdsZU9iamVjdFNlbGVjdGVkPVx1YzEyMFx1ZDBkZFx1ZDU1YyBcdWFjMWRcdWNjYjQgOiB7MH0KK19VSV9NdWx0aU9iamVjdFNlbGVjdGVkPVx1YzEyMFx1ZDBkZFx1YjQxYyB7MH0gXHVhYzFkXHVjY2I0CisKK19VSV9PcGVuRWRpdG9yRXJyb3JfbGFiZWw9XHVjNjI0XHVkNTA4IFx1YzVkMFx1YjUxNFx1ZDEzMAorCitfVUlfV2l6YXJkX2NhdGVnb3J5PVx1YzYwOFx1YzgxYyBFTUYgXHViYWE4XHViMzc4IFx1YzBkZFx1YzEzMSBcdWI5YzhcdWJjOTVcdWMwYWMKKworX1VJX0NyZWF0ZU1vZGVsRXJyb3JfbWVzc2FnZT1cdWQzMGNcdWM3N2MgJ3swfSAiXHVjNWQwXHVjMTFjIFx1YmIzOFx1YzgxYyBcdWJjMWNcdWMwZGQKKworX1VJX0V4YW1wbGVNb2RlbFdpemFyZF9sYWJlbD1cdWM2MDhcdWM4MWMgXHViYWE4XHViMzc4CitfVUlfRXhhbXBsZU1vZGVsV2l6YXJkX2Rlc2NyaXB0aW9uPVx1YzBjOFx1Yjg1Y1x1YzZiNCBcdWM2MDhcdWM4MWMgXHViYWE4XHViMzc4IFx1YjljY1x1YjRlNFx1YWUzMAorCitfVUlfRXhhbXBsZUVkaXRvcl9sYWJlbD1cdWM2MDhcdWM4MWMgXHViYWE4XHViMzc4IFx1ZDNiOFx1YzlkMVx1YWUzMAorCitfVUlfRXhhbXBsZUVkaXRvckZpbGVuYW1lRGVmYXVsdEJhc2U9XHViMDk4XHVjNzU4CitfVUlfRXhhbXBsZUVkaXRvckZpbGVuYW1lRXh0ZW5zaW9uPVx1YzYwOAorCitfVUlfV2l6YXJkX2xhYmVsPVx1YzBjOFx1Yjg1Y1x1YzZiNAorCitfV0FSTl9GaWxlbmFtZUV4dGVuc2lvbj1cdWQzMGNcdWM3N2MgXHVjNzc0XHViOTg0XHVjNzQwICIuezB9Ilx1Yjg1YyBcdWIwNWRcdWIwOThcdWM1N2NcdWQ1NjguIAorCitfVUlfTW9kZWxPYmplY3Q9Jk1vZGVsIE9iamVjdAorX1VJX1hNTEVuY29kaW5nPSZYTUwgRW5jb2RpbmcKK19VSV9YTUxFbmNvZGluZ0Nob2ljZXM9VVRGIC0gOCBBU0NJSSBVVEYgLSAxNiBVVEYgLSAxNkJFIFVURiAtIDE2TEUgSVNPIC0gODg1OSAtIDEKK19VSV9XaXphcmRfaW5pdGlhbF9vYmplY3RfZGVzY3JpcHRpb249XHVjMGRkXHVjMTMxXHVkNTYwIFx1YmFhOFx1YjM3OCBcdWFjMWNcdWNjYjQgXHVjMTIwXHVkMGRkCisKK19VSV9GaWxlQ29uZmxpY3RfbGFiZWw9XHVkMzBjXHVjNzdjIFx1Y2RhOVx1YjNjYworX1dBUk5fRmlsZUNvbmZsaWN0PVx1YzgwMFx1YzdhNVx1YjQxOFx1YzljMCBcdWM1NGFcdWM3NDAgXHVjMGFjXHVkNTZkXHViNGU0XHVjNzc0IFx1ZDNiOFx1YzlkMVx1YWUzMCBcdWM2NzhcdWJkODBcdWM3NTggXHViY2MwXHVhY2JkIFx1YzBhY1x1ZDU2ZFx1YjRlNFx1YWNmYyBcdWNkYTlcdWIzY2NcdWQ1NjguIFx1Yzc3NCBcdWQzYjhcdWM5ZDFcdWFlMzBcdWM3NTggXHViY2MwXHVhY2JkIFx1YzBhY1x1ZDU2ZFx1YjRlNFx1Yzc0NCBcdWNkZThcdWMxOGMgXHVkNTU4XHVjMmRjXHVhY2EwXHVjMmI1XHViMmM4XHVhZTRjPworCitfVUlfRXhhbXBsZURpc2Vhc2VNb2RlbF9zZWFzb25hbE1vZHVsYXRpb25fZmVhdHVyZT1cdWFjYzRcdWM4MDggXHViY2MwXHVjODcwCitfVUlfRXhhbXBsZURpc2Vhc2VNb2RlbF9tb2R1bGF0aW9uUGVyaW9kX2ZlYXR1cmU9XHViY2MwXHVjODcwIFx1YWUzMFx1YWMwNAorX1VJX0V4YW1wbGVEaXNlYXNlTW9kZWxfbW9kdWxhdGlvblBoYXNlU2hpZl9mZWF0dXJlPVx1YmNjMFx1Yzg3MCBcdWIyZThcdWFjYzQgXHVjODA0XHVjNzc0CitfVUlfRXhhbXBsZUVkaXRvckZpbGVuYW1lRXh0ZW5zaW9ucz1cdWM2MDgKKworX1dBUk5fRmlsZW5hbWVFeHRlbnNpb25zPVx1ZDMwY1x1Yzc3YyBcdWM3NzRcdWI5ODRcdWM3NDAgXHViMmU0XHVjNzRjIFx1ZDY1NVx1YzdhNVx1Yzc5MCBcdWM5MTEgXHVkNTU4XHViMDk4XHViOTdjIFx1YWMwMFx1YzgzOFx1YzU3Y1x1ZDU2OCA6IHswfQorCitfVUlfRXhhbXBsZURpc2Vhc2VNb2RlbF9tb2R1bGF0aW9uUGhhc2VTaGlmdF9mZWF0dXJlPVx1YmNjMFx1Yzg3MCBcdWIyZThcdWFjYzQgXHVjODA0XHVjNzc0CitfVUlfRXhhbXBsZURpc2Vhc2VNb2RlbF9zZWFzb25hbE1vZHVsYXRpb25UaHJlc2hvbGRfZmVhdHVyZT1cdWFjYzRcdWM4MDggXHViY2MwXHVjODcwIFx1Yzc4NFx1YWNjNFx1YWMxMgorX1VJX0V4YW1wbGVEaXNlYXNlTW9kZWxfc2Vhc29uYWxNb2R1bGF0aW9uRXhwb25lbnRfZmVhdHVyZT1cdWFjYzRcdWM4MDggXHViY2MwXHVjODcwIFx1YzljMFx1YzIxOAorX1VJX0V4YW1wbGVEaXNlYXNlTW9kZWxfc2Vhc29uYWxNb2R1bGF0aW9uRmxvb3JfZmVhdHVyZT1cdWFjYzRcdWM4MDggXHViY2MwXHVjODcwIFx1Y2Q1Y1x1YzgwMFx1YWMxMgpkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXhhbXBsZS9wbHVnaW5femgucHJvcGVydGllcyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4YW1wbGUvcGx1Z2luX3poLnByb3BlcnRpZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTk4ZjY4NwotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4YW1wbGUvcGx1Z2luX3poLnByb3BlcnRpZXMKQEAgLTAsMCArMSwxMTAgQEAKKyMvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIyAqIENvcHlyaWdodCAoYykgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyMgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisjICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisjICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyMgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorIyAqCisjICogQ29udHJpYnV0b3JzOgorIyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorIyBUbyBjb2RlIGRldmVsb3BlcjoKKyMgICBEbyBOT1QgY2hhbmdlIHRoZSBwcm9wZXJ0aWVzIGJldHdlZW4gdGhpcyBsaW5lIGFuZCB0aGUKKyMgICAiJSUlIEVORCBPRiBUUkFOU0xBVEVEIFBST1BFUlRJRVMgJSUlIiBsaW5lLgorIyAgIE1ha2UgYSBuZXcgcHJvcGVydHkgbmFtZSwgYXBwZW5kIHRvIHRoZSBlbmQgb2YgdGhlIGZpbGUgYW5kIGNoYW5nZQorIyAgIHRoZSBjb2RlIHRvIHVzZSB0aGUgbmV3IHByb3BlcnR5LgorIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisjICUlJSBFTkQgT0YgVFJBTlNMQVRFRCBQUk9QRVJUSUVTICUlJQorIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitwbHVnaW5OYW1lPVNURU1cdTRmOGJcdTc1YmVcdTc1YzVcdTZhMjFcdTU3OGIKK3Byb3ZpZGVyTmFtZT1FY2xpcHNlLm9yZworCisjIER1YmxpbiBDb3JlCitkY19jcmVhdG9yX2thdWZtYW49S2F1Zm1hbgorZGNfZGVzY19FeF9TX1NFSVI9XHU1YjllXHU5YThjXHU2MDI3U0VJUlx1OTY4Zlx1NjczYVx1NzViZVx1NzVjNVx1NmEyMVx1NTc4YgorZGNfdGl0bGVfRXhfU19TRUlSPVx1NWI5ZVx1OWE4Y1x1NjAyN1NFSVJcdTc1YmVcdTc1YzVcdTZhMjFcdTU3OGIKK2RjX2lkZW50aWVyPVNURU1cdTc1YmVcdTc1YzVcdTZhMjFcdTU3OGIKK2RjX3B1Ymxpc2hlcj1FY2xpcHNlXHU1N2ZhXHU5MWQxXHU0ZjFhCitkY19saWNlbnNlPUVjbGlwc2VcdTUxNmNcdTUxNzFcdThiYjhcdTUzZWZcdWZmMDhFUExcdWZmMDkKK2RjX1NPVVJDRT1odHRwOi8vd2lraS5lY2xpcHNlLm9yZy9JbnRyb2R1Y3Rpb25fdG9fQ29tcGFydG1lbnRfTW9kZWxzXHVmZjA4XHU1NDhjXHU1M2MyXHU4MDAzXHU4ZDQ0XHU2NTk5XHU0ZTJkXHVmZjA5CisKK19VSV9DcmVhdGVDaGlsZF90ZXh0PXswfQorX1VJX0NyZWF0ZUNoaWxkX3RleHQyPXsxfSB7MH0KK19VSV9DcmVhdGVDaGlsZF90ZXh0Mz17MX0KK19VSV9DcmVhdGVDaGlsZF90b29sdGlwPVx1NTIxYlx1NWVmYVx1NTcyOHsxfSB7MH1cdTY1YjBcdTUyOWZcdTgwZmQKK19VSV9DcmVhdGVDaGlsZF9kZXNjcmlwdGlvbj1cdTRlM2FcdTkwMDlcdTViOWFcdTc2ODR7Mn1cdTc2ODR7MX1cdTcyNzlcdTYwMjdcdTY3NjVcdTUyMWJcdTVlZmFcdTRlMDBcdTRlMmFcdTY1YjBcdTc2ODR7MH1cdTViNTBcdTdjN2IKK19VSV9DcmVhdGVTaWJsaW5nX2Rlc2NyaXB0aW9uPVx1NTcyOHsxfVx1NzY4NFx1NzIzNlx1OTZjNlx1NGUyZFx1NGUzYVx1OTAwOVx1NWI5YVx1NzY4NHsyfVx1Njc2NVx1NTIxYlx1NWVmYVx1NGUwMFx1NGUyYXswfVx1N2M3Ylx1NTc4Ylx1NzY4NFx1NjViMFx1NzY4NFx1NTE0NFx1NWYxZlx1N2M3YgorCitfVUlfUHJvcGVydHlEZXNjcmlwdG9yX2Rlc2NyaXB0aW9uPXswfVx1NGVjZVx1NWM1ZXsxfQorCitfVUlfRXhwZXJpbWVudGFsRGlzZWFzZU1vZGVsX3R5cGU9XHU1YjllXHU5YThjXHU3NWJlXHU3NWM1XHU2YTIxXHU1NzhiCitfVUlfVW5rbm93bl90eXBlPVx1NWJmOVx1OGM2MQorCitfVUlfVW5rbm93bl9kYXRhdHlwZT1cdTRlZjdcdTUwM2MKKworX1VJX1Vua25vd25fZmVhdHVyZT1cdTY3MmFcdTYzMDdcdTViOWEKKworX1VJX0V4YW1wbGVEaXNlYXNlTW9kZWxfdHlwZT1cdTc1YmVcdTc1YzVcdTZhMjFcdTU3OGIKK19VSV9FeGFtcGxlRWRpdG9yX21lbnU9JkV4YW1wbGUgRWRpdG9yCisKK19VSV9DcmVhdGVDaGlsZF9tZW51X2l0ZW09Jk5ldyBDaGlsZAorX1VJX0NyZWF0ZVNpYmxpbmdfbWVudV9pdGVtPVx1NjViMFx1NzUxZlx1NjIxMFx1NGUwMFx1NGUyYVx1NTE0NFx1NWYxZlx1N2M3YgorCitfVUlfU2hvd1Byb3BlcnRpZXNWaWV3X21lbnVfaXRlbT1cdTY2M2VcdTc5M2FcdTU0OGNcdTVjNWVcdTYwMjdcdTY3ZTVcdTc3MGIKK19VSV9SZWZyZXNoVmlld2VyX21lbnVfaXRlbT0mUmVmcmVzaAorCitfVUlfU2VsZWN0aW9uUGFnZV9sYWJlbD1cdTkwMDlcdTYyZTkKK19VSV9QYXJlbnRQYWdlX2xhYmVsPVx1NWJiNlx1OTU3ZgorX1VJX0xpc3RQYWdlX2xhYmVsPVx1NzZlZVx1NWY1NQorX1VJX1RyZWVQYWdlX2xhYmVsPVx1NjgxMQorX1VJX1RhYmxlUGFnZV9sYWJlbD1cdTg4NjgKK19VSV9UcmVlV2l0aENvbHVtbnNQYWdlX2xhYmVsPVx1NTIwNlx1NTIxN1x1NzY4NFx1NjgxMQorX1VJX09iamVjdENvbHVtbl9sYWJlbD1cdTViZjlcdThjNjEKK19VSV9TZWxmQ29sdW1uX2xhYmVsPVx1ODFlYVx1NWRmMQorCitfVUlfTm9PYmplY3RTZWxlY3RlZD1cdTY1ZTBcdTkwMDlcdTViOWFcdTUxODVcdTViYjkKK19VSV9TaW5nbGVPYmplY3RTZWxlY3RlZD1cdTkwMDlcdTYyZTlcdTViZjlcdThjNjFcdWZmMWF7MH0KK19VSV9NdWx0aU9iamVjdFNlbGVjdGVkPVx1OTAwOVx1NjJlOXswfVx1NWJmOVx1OGM2MQorCitfVUlfT3BlbkVkaXRvckVycm9yX2xhYmVsPVx1NjI1M1x1NWYwMFx1N2YxNlx1OGY5MVx1NTY2OAorCitfVUlfV2l6YXJkX2NhdGVnb3J5PVx1NGY4Ylx1NTk4MkVNRlx1NmEyMVx1NTc4Ylx1NTIxYlx1NWVmYVx1NTQxMVx1NWJmYworCitfVUlfQ3JlYXRlTW9kZWxFcnJvcl9tZXNzYWdlPVx1NTcyOFx1NjU4N1x1NGVmNlx1MjAxY3swfVx1MjAxZFx1NGUyZFx1OTA0N1x1NTIzMFx1NzY4NFx1OTVlZVx1OTg5OAorCitfVUlfRXhhbXBsZU1vZGVsV2l6YXJkX2xhYmVsPVx1NzkzYVx1NGY4Ylx1NmEyMVx1NTc4YgorX1VJX0V4YW1wbGVNb2RlbFdpemFyZF9kZXNjcmlwdGlvbj1cdTUyMWJcdTVlZmFcdTRlMDBcdTRlMmFcdTY1YjBcdTc2ODRcdTc5M2FcdTRmOGJcdTZhMjFcdTU3OGIKKworX1VJX0V4YW1wbGVFZGl0b3JfbGFiZWw9XHU2YTIxXHU1NzhiXHU3ZjE2XHU4ZjkxXHU1NjY4XHU3OTNhXHU0ZjhiCisKK19VSV9FeGFtcGxlRWRpdG9yRmlsZW5hbWVEZWZhdWx0QmFzZT1cdTYyMTFcdTc2ODQKK19VSV9FeGFtcGxlRWRpdG9yRmlsZW5hbWVFeHRlbnNpb249XHU0ZjhiXHU1OTgyCisKK19VSV9XaXphcmRfbGFiZWw9XHU2NWIwXHU1ZWZhCisKK19XQVJOX0ZpbGVuYW1lRXh0ZW5zaW9uPVx1NjU4N1x1NGVmNlx1NTQwZFx1NWZjNVx1OTg3Ylx1NGVlNSd7MH0gJydcdTdlZDNcdTVjM2UKKworX1VJX01vZGVsT2JqZWN0PSZNb2RlbCBPYmplY3QKK19VSV9YTUxFbmNvZGluZz0mWE1MIEVuY29kaW5nCitfVUlfWE1MRW5jb2RpbmdDaG9pY2VzPVVURi04IEFTQ0lJIFVURi0xNiBVVEYtMTZCRSBVVEYtMTZMRSBJU08tODg1OS0xCitfVUlfV2l6YXJkX2luaXRpYWxfb2JqZWN0X2Rlc2NyaXB0aW9uPVx1OTAwOVx1NjJlOVx1NTIxYlx1NWVmYVx1NGUwMFx1NGUyYVx1NmEyMVx1NTc4Ylx1NWJmOVx1OGM2MQorCitfVUlfRmlsZUNvbmZsaWN0X2xhYmVsPVx1NjU4N1x1NGVmNlx1NTFiMlx1N2E4MQorX1dBUk5fRmlsZUNvbmZsaWN0PVx1NjcwOVx1NjcyYVx1NGZkZFx1NWI1OFx1NzY4NFx1NjZmNFx1NjUzOVx1NGUwZVx1N2YxNlx1OGY5MVx1NTY2OFx1NTkxNlx1NzY4NFx1NjZmNFx1NjUzOVx1NTFiMlx1N2E4MVx1MzAwMlx1NGY2MFx1NjBmM1x1NjUzZVx1NWYwM1x1OGZkOVx1NGUyYVx1N2YxNlx1OGY5MVx1NTY2OFx1NzY4NFx1NjZmNFx1NjUzOVx1NTQxN1x1ZmYxZgorCitfVUlfRXhhbXBsZURpc2Vhc2VNb2RlbF9zZWFzb25hbE1vZHVsYXRpb25fZmVhdHVyZT1cdTViNjNcdTgyODJcdTYwMjdcdThjMDNcdTUyMzYKK19VSV9FeGFtcGxlRGlzZWFzZU1vZGVsX21vZHVsYXRpb25QZXJpb2RfZmVhdHVyZT1cdThjMDNcdTUyMzZcdTU0NjhcdTY3MWYKK19VSV9FeGFtcGxlRGlzZWFzZU1vZGVsX21vZHVsYXRpb25QaGFzZVNoaWZfZmVhdHVyZT1cdThjMDNcdTUyMzZcdTc2ZjhcdTc5ZmIKK19VSV9FeGFtcGxlRWRpdG9yRmlsZW5hbWVFeHRlbnNpb25zPVx1NGY4Ylx1NTk4MgorCitfV0FSTl9GaWxlbmFtZUV4dGVuc2lvbnM9XHU2NTg3XHU0ZWY2XHU1NDBkXHU1ZmM1XHU5ODdiXHU1MTc3XHU2NzA5XHU0ZWU1XHU0ZTBiXHU2MjY5XHU1YzU1XHU1NDBkXHU0ZTRiXHU0ZTAwXHVmZjFhezB9CisKK19VSV9FeGFtcGxlRGlzZWFzZU1vZGVsX21vZHVsYXRpb25QaGFzZVNoaWZ0X2ZlYXR1cmU9XHU4YzAzXHU1MjM2XHU3NmY4XHU3OWZiCitfVUlfRXhhbXBsZURpc2Vhc2VNb2RlbF9zZWFzb25hbE1vZHVsYXRpb25UaHJlc2hvbGRfZmVhdHVyZT1cdTViNjNcdTgyODJcdTYwMjdcdThjMDNcdTUyMzZcdTk2MDhcdTUwM2MKK19VSV9FeGFtcGxlRGlzZWFzZU1vZGVsX3NlYXNvbmFsTW9kdWxhdGlvbkV4cG9uZW50X2ZlYXR1cmU9XHU1YjYzXHU4MjgyXHU2MDI3XHU4YzAzXHU1MjM2XHU2MzA3XHU2NTcwCitfVUlfRXhhbXBsZURpc2Vhc2VNb2RlbF9zZWFzb25hbE1vZHVsYXRpb25GbG9vcl9mZWF0dXJlPVx1NWI2M1x1ODI4Mlx1NjAyN1x1OGMwM1x1NTIzNlx1NWU5NVx1NWM0MgpkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXhhbXBsZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL2V4YW1wbGUvRXhhbXBsZURpc2Vhc2VNb2RlbC5qYXZhIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXhhbXBsZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL2V4YW1wbGUvRXhhbXBsZURpc2Vhc2VNb2RlbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBmYWZlYTEKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leGFtcGxlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvZXhhbXBsZS9FeGFtcGxlRGlzZWFzZU1vZGVsLmphdmEKQEAgLTAsMCArMSwxMDggQEAKKy8vIEV4YW1wbGVEaXNlYXNlTW9kZWwuamF2YQorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXhhbXBsZTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RvY2hhc3RpY1NJUkRpc2Vhc2VNb2RlbDsKKworLyoqCisgKiBUaGlzIGludGVyZmFjZSBpcyBhbiBFTUYgTW9kZWwuCisgKiAKKyAqIEBtb2RlbAorICovCitwdWJsaWMgaW50ZXJmYWNlIEV4YW1wbGVEaXNlYXNlTW9kZWwgZXh0ZW5kcyBTdG9jaGFzdGljU0lSRGlzZWFzZU1vZGVsIHsKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5TZWFzb25hbCBNb2R1bGF0aW9uIEV4cG9uZW50PC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogVGhlIGRlZmF1bHQgdmFsdWUgaXMgPGNvZGU+IjIuMCI8L2NvZGU+LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPHA+CisJICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+U2Vhc29uYWwgTW9kdWxhdGlvbiBFeHBvbmVudDwvZW0+JyBhdHRyaWJ1dGUgaXNuJ3QgY2xlYXIsCisJICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLgorCSAqIDwvcD4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5TZWFzb25hbCBNb2R1bGF0aW9uIEV4cG9uZW50PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiBAc2VlICNzZXRTZWFzb25hbE1vZHVsYXRpb25FeHBvbmVudChkb3VibGUpCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXhhbXBsZS5FeGFtcGxlUGFja2FnZSNnZXRFeGFtcGxlRGlzZWFzZU1vZGVsX1NlYXNvbmFsTW9kdWxhdGlvbkV4cG9uZW50KCkKKwkgKiBAbW9kZWwgZGVmYXVsdD0iMi4wIgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlkb3VibGUgZ2V0U2Vhc29uYWxNb2R1bGF0aW9uRXhwb25lbnQoKTsKKworCS8qKgorCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leGFtcGxlLkV4YW1wbGVEaXNlYXNlTW9kZWwjZ2V0U2Vhc29uYWxNb2R1bGF0aW9uRXhwb25lbnQgPGVtPlNlYXNvbmFsIE1vZHVsYXRpb24gRXhwb25lbnQ8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPlNlYXNvbmFsIE1vZHVsYXRpb24gRXhwb25lbnQ8L2VtPicgYXR0cmlidXRlLgorCSAqIEBzZWUgI2dldFNlYXNvbmFsTW9kdWxhdGlvbkV4cG9uZW50KCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJdm9pZCBzZXRTZWFzb25hbE1vZHVsYXRpb25FeHBvbmVudChkb3VibGUgdmFsdWUpOworCisJLyoqCisJICogQHJldHVybiB0aGUgZGVmYXVsdCBtb2R1bGF0aW9uIHBlcmlvZCBpcyAxIHllYXIuIFRoaXMgZGVmYXVsdCB2YWx1ZSBhc3N1bWVzIHRpbWUgc3RlcHMgaW4gZGF5cy4gTm90ZSB0aGF0IG9uZSB5ZWFyID0gMzY1LjI1NjM2MzA1MSBkYXlzIAorCSAqIEBtb2RlbCBkZWZhdWx0PSIzNjUuMjU2MzYzMDUxIgorCSAqLworCWRvdWJsZSBnZXRNb2R1bGF0aW9uUGVyaW9kKCk7CisJCisJLyoqCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4YW1wbGUuRXhhbXBsZURpc2Vhc2VNb2RlbCNnZXRNb2R1bGF0aW9uUGVyaW9kIDxlbT5Nb2R1bGF0aW9uIFBlcmlvZDwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+TW9kdWxhdGlvbiBQZXJpb2Q8L2VtPicgYXR0cmlidXRlLgorCSAqIEBzZWUgI2dldE1vZHVsYXRpb25QZXJpb2QoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwl2b2lkIHNldE1vZHVsYXRpb25QZXJpb2QoZG91YmxlIHZhbHVlKTsKKworCS8qKgorCSAqIEByZXR1cm4gdGhlIG1vZHVsYXRpb24gcGhhc2Ugc2hpZnQgc2hpZnQuIAorCSAqIEBtb2RlbCBkZWZhdWx0PSIwLjAiCisJICovCisJZG91YmxlIGdldE1vZHVsYXRpb25QaGFzZVNoaWZ0KCk7CisKKwkvKioKKwkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXhhbXBsZS5FeGFtcGxlRGlzZWFzZU1vZGVsI2dldE1vZHVsYXRpb25QaGFzZVNoaWZ0IDxlbT5Nb2R1bGF0aW9uIFBoYXNlIFNoaWZ0PC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5Nb2R1bGF0aW9uIFBoYXNlIFNoaWZ0PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiBAc2VlICNnZXRNb2R1bGF0aW9uUGhhc2VTaGlmdCgpCisJICogQGdlbmVyYXRlZAorCSAqLworCXZvaWQgc2V0TW9kdWxhdGlvblBoYXNlU2hpZnQoZG91YmxlIHZhbHVlKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPlNlYXNvbmFsIE1vZHVsYXRpb24gRmxvb3I8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyA8Y29kZT4iMC42IjwvY29kZT4uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8cD4KKwkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5TZWFzb25hbCBNb2R1bGF0aW9uIEZsb29yPC9lbT4nIGF0dHJpYnV0ZSBpc24ndCBjbGVhciwKKwkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uCisJICogPC9wPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPlNlYXNvbmFsIE1vZHVsYXRpb24gRmxvb3I8L2VtPicgYXR0cmlidXRlLgorCSAqIEBzZWUgI3NldFNlYXNvbmFsTW9kdWxhdGlvbkZsb29yKGRvdWJsZSkKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leGFtcGxlLkV4YW1wbGVQYWNrYWdlI2dldEV4YW1wbGVEaXNlYXNlTW9kZWxfU2Vhc29uYWxNb2R1bGF0aW9uRmxvb3IoKQorCSAqIEBtb2RlbCBkZWZhdWx0PSIwLjYiCisJICogQGdlbmVyYXRlZAorCSAqLworCWRvdWJsZSBnZXRTZWFzb25hbE1vZHVsYXRpb25GbG9vcigpOworCisJLyoqCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4YW1wbGUuRXhhbXBsZURpc2Vhc2VNb2RlbCNnZXRTZWFzb25hbE1vZHVsYXRpb25GbG9vciA8ZW0+U2Vhc29uYWwgTW9kdWxhdGlvbiBGbG9vcjwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+U2Vhc29uYWwgTW9kdWxhdGlvbiBGbG9vcjwvZW0+JyBhdHRyaWJ1dGUuCisJICogQHNlZSAjZ2V0U2Vhc29uYWxNb2R1bGF0aW9uRmxvb3IoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwl2b2lkIHNldFNlYXNvbmFsTW9kdWxhdGlvbkZsb29yKGRvdWJsZSB2YWx1ZSk7Cit9IC8vIEV4YW1wbGVEaXNlYXNlTW9kZWwKZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4YW1wbGUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9leGFtcGxlL0V4YW1wbGVGYWN0b3J5LmphdmEgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leGFtcGxlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvZXhhbXBsZS9FeGFtcGxlRmFjdG9yeS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhlMjQ2MjYKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leGFtcGxlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvZXhhbXBsZS9FeGFtcGxlRmFjdG9yeS5qYXZhCkBAIC0wLDAgKzEsNTEgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4YW1wbGU7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVGYWN0b3J5OworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiBUaGUgPGI+RmFjdG9yeTwvYj4gZm9yIHRoZSBtb2RlbC4KKyAqIEl0IHByb3ZpZGVzIGEgY3JlYXRlIG1ldGhvZCBmb3IgZWFjaCBub24tYWJzdHJhY3QgY2xhc3Mgb2YgdGhlIG1vZGVsLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leGFtcGxlLkV4YW1wbGVQYWNrYWdlCisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBpbnRlcmZhY2UgRXhhbXBsZUZhY3RvcnkgZXh0ZW5kcyBFRmFjdG9yeSB7CisJLyoqCisJICogVGhlIHNpbmdsZXRvbiBpbnN0YW5jZSBvZiB0aGUgZmFjdG9yeS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFeGFtcGxlRmFjdG9yeSBlSU5TVEFOQ0UgPSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXhhbXBsZS5pbXBsLkV4YW1wbGVGYWN0b3J5SW1wbC5pbml0KCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPkRpc2Vhc2UgTW9kZWw8L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPkRpc2Vhc2UgTW9kZWw8L2VtPicuCisJICogQGdlbmVyYXRlZAorCSAqLworCUV4YW1wbGVEaXNlYXNlTW9kZWwgY3JlYXRlRXhhbXBsZURpc2Vhc2VNb2RlbCgpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgcGFja2FnZSBzdXBwb3J0ZWQgYnkgdGhpcyBmYWN0b3J5LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgcGFja2FnZSBzdXBwb3J0ZWQgYnkgdGhpcyBmYWN0b3J5LgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFeGFtcGxlUGFja2FnZSBnZXRFeGFtcGxlUGFja2FnZSgpOworCit9IC8vRXhhbXBsZUZhY3RvcnkKZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4YW1wbGUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9leGFtcGxlL0V4YW1wbGVQYWNrYWdlLmphdmEgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leGFtcGxlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvZXhhbXBsZS9FeGFtcGxlUGFja2FnZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdhZGFmZmEKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leGFtcGxlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvZXhhbXBsZS9FeGFtcGxlUGFja2FnZS5qYXZhCkBAIC0wLDAgKzEsNDU1IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leGFtcGxlOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA3LCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQXR0cmlidXRlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZFBhY2thZ2U7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIFRoZSA8Yj5QYWNrYWdlPC9iPiBmb3IgdGhlIG1vZGVsLgorICogSXQgY29udGFpbnMgYWNjZXNzb3JzIGZvciB0aGUgbWV0YSBvYmplY3RzIHRvIHJlcHJlc2VudAorICogPHVsPgorICogICA8bGk+ZWFjaCBjbGFzcyw8L2xpPgorICogICA8bGk+ZWFjaCBmZWF0dXJlIG9mIGVhY2ggY2xhc3MsPC9saT4KKyAqICAgPGxpPmVhY2ggZW51bSw8L2xpPgorICogICA8bGk+YW5kIGVhY2ggZGF0YSB0eXBlPC9saT4KKyAqIDwvdWw+CisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4YW1wbGUuRXhhbXBsZUZhY3RvcnkKKyAqIEBtb2RlbCBraW5kPSJwYWNrYWdlIgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgaW50ZXJmYWNlIEV4YW1wbGVQYWNrYWdlIGV4dGVuZHMgRVBhY2thZ2UgeworCS8qKgorCSAqIFRoZSBwYWNrYWdlIG5hbWUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJU3RyaW5nIGVOQU1FID0gImV4YW1wbGUiOworCisJLyoqCisJICogVGhlIHBhY2thZ2UgbmFtZXNwYWNlIFVSSS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlTdHJpbmcgZU5TX1VSSSA9ICJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9leGFtcGxlLmVjb3JlIjsKKworCS8qKgorCSAqIFRoZSBwYWNrYWdlIG5hbWVzcGFjZSBuYW1lLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCVN0cmluZyBlTlNfUFJFRklYID0gIm9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leGFtcGxlIjsKKworCS8qKgorCSAqIFRoZSBzaW5nbGV0b24gaW5zdGFuY2Ugb2YgdGhlIHBhY2thZ2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRXhhbXBsZVBhY2thZ2UgZUlOU1RBTkNFID0gb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4YW1wbGUuaW1wbC5FeGFtcGxlUGFja2FnZUltcGwuaW5pdCgpOworCisJLyoqCisJICogVGhlIG1ldGEgb2JqZWN0IGlkIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXhhbXBsZS5pbXBsLkV4YW1wbGVEaXNlYXNlTW9kZWxJbXBsIDxlbT5EaXNlYXNlIE1vZGVsPC9lbT59JyBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4YW1wbGUuaW1wbC5FeGFtcGxlRGlzZWFzZU1vZGVsSW1wbAorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4YW1wbGUuaW1wbC5FeGFtcGxlUGFja2FnZUltcGwjZ2V0RXhhbXBsZURpc2Vhc2VNb2RlbCgpCisJICogQGdlbmVyYXRlZAorCSAqLworCWludCBFWEFNUExFX0RJU0VBU0VfTU9ERUwgPSAwOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlVSSTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IEVYQU1QTEVfRElTRUFTRV9NT0RFTF9fVVJJID0gU3RhbmRhcmRQYWNrYWdlLlNUT0NIQVNUSUNfU0lSX0RJU0VBU0VfTU9ERUxfX1VSSTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5UeXBlIFVSSTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IEVYQU1QTEVfRElTRUFTRV9NT0RFTF9fVFlQRV9VUkkgPSBTdGFuZGFyZFBhY2thZ2UuU1RPQ0hBU1RJQ19TSVJfRElTRUFTRV9NT0RFTF9fVFlQRV9VUkk7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RHVibGluIENvcmU8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBFWEFNUExFX0RJU0VBU0VfTU9ERUxfX0RVQkxJTl9DT1JFID0gU3RhbmRhcmRQYWNrYWdlLlNUT0NIQVNUSUNfU0lSX0RJU0VBU0VfTU9ERUxfX0RVQkxJTl9DT1JFOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkxhYmVscyBUbyBVcGRhdGU8L2I+PC9lbT4nIHJlZmVyZW5jZSBsaXN0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IEVYQU1QTEVfRElTRUFTRV9NT0RFTF9fTEFCRUxTX1RPX1VQREFURSA9IFN0YW5kYXJkUGFja2FnZS5TVE9DSEFTVElDX1NJUl9ESVNFQVNFX01PREVMX19MQUJFTFNfVE9fVVBEQVRFOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkdyYXBoPC9iPjwvZW0+JyBjb250YWluZXIgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IEVYQU1QTEVfRElTRUFTRV9NT0RFTF9fR1JBUEggPSBTdGFuZGFyZFBhY2thZ2UuU1RPQ0hBU1RJQ19TSVJfRElTRUFTRV9NT0RFTF9fR1JBUEg7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RW5hYmxlZDwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IEVYQU1QTEVfRElTRUFTRV9NT0RFTF9fRU5BQkxFRCA9IFN0YW5kYXJkUGFja2FnZS5TVE9DSEFTVElDX1NJUl9ESVNFQVNFX01PREVMX19FTkFCTEVEOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkdyYXBoIERlY29yYXRlZDwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IEVYQU1QTEVfRElTRUFTRV9NT0RFTF9fR1JBUEhfREVDT1JBVEVEID0gU3RhbmRhcmRQYWNrYWdlLlNUT0NIQVNUSUNfU0lSX0RJU0VBU0VfTU9ERUxfX0dSQVBIX0RFQ09SQVRFRDsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5Qcm9ncmVzczwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IEVYQU1QTEVfRElTRUFTRV9NT0RFTF9fUFJPR1JFU1MgPSBTdGFuZGFyZFBhY2thZ2UuU1RPQ0hBU1RJQ19TSVJfRElTRUFTRV9NT0RFTF9fUFJPR1JFU1M7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+UG9wdWxhdGlvbiBJZGVudGlmaWVyPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgRVhBTVBMRV9ESVNFQVNFX01PREVMX19QT1BVTEFUSU9OX0lERU5USUZJRVIgPSBTdGFuZGFyZFBhY2thZ2UuU1RPQ0hBU1RJQ19TSVJfRElTRUFTRV9NT0RFTF9fUE9QVUxBVElPTl9JREVOVElGSUVSOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlRpbWUgUGVyaW9kPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgRVhBTVBMRV9ESVNFQVNFX01PREVMX19USU1FX1BFUklPRCA9IFN0YW5kYXJkUGFja2FnZS5TVE9DSEFTVElDX1NJUl9ESVNFQVNFX01PREVMX19USU1FX1BFUklPRDsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5EaXNlYXNlIE5hbWU8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBFWEFNUExFX0RJU0VBU0VfTU9ERUxfX0RJU0VBU0VfTkFNRSA9IFN0YW5kYXJkUGFja2FnZS5TVE9DSEFTVElDX1NJUl9ESVNFQVNFX01PREVMX19ESVNFQVNFX05BTUU7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RmluaXRlIERpZmZlcmVuY2U8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBFWEFNUExFX0RJU0VBU0VfTU9ERUxfX0ZJTklURV9ESUZGRVJFTkNFID0gU3RhbmRhcmRQYWNrYWdlLlNUT0NIQVNUSUNfU0lSX0RJU0VBU0VfTU9ERUxfX0ZJTklURV9ESUZGRVJFTkNFOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkZyZXF1ZW5jeSBEZXBlbmRlbnQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBFWEFNUExFX0RJU0VBU0VfTU9ERUxfX0ZSRVFVRU5DWV9ERVBFTkRFTlQgPSBTdGFuZGFyZFBhY2thZ2UuU1RPQ0hBU1RJQ19TSVJfRElTRUFTRV9NT0RFTF9fRlJFUVVFTkNZX0RFUEVOREVOVDsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5SZWZlcmVuY2UgUG9wdWxhdGlvbiBEZW5zaXR5PC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgRVhBTVBMRV9ESVNFQVNFX01PREVMX19SRUZFUkVOQ0VfUE9QVUxBVElPTl9ERU5TSVRZID0gU3RhbmRhcmRQYWNrYWdlLlNUT0NIQVNUSUNfU0lSX0RJU0VBU0VfTU9ERUxfX1JFRkVSRU5DRV9QT1BVTEFUSU9OX0RFTlNJVFk7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+Um9hZCBOZXR3b3JrIEluZmVjdGlvdXMgUHJvcG9ydGlvbjwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IEVYQU1QTEVfRElTRUFTRV9NT0RFTF9fUk9BRF9ORVRXT1JLX0lORkVDVElPVVNfUFJPUE9SVElPTiA9IFN0YW5kYXJkUGFja2FnZS5TVE9DSEFTVElDX1NJUl9ESVNFQVNFX01PREVMX19ST0FEX05FVFdPUktfSU5GRUNUSU9VU19QUk9QT1JUSU9OOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkNoYXJhY3RlcmlzdGljIE1peGluZyBEaXN0YW5jZTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IEVYQU1QTEVfRElTRUFTRV9NT0RFTF9fQ0hBUkFDVEVSSVNUSUNfTUlYSU5HX0RJU1RBTkNFID0gU3RhbmRhcmRQYWNrYWdlLlNUT0NIQVNUSUNfU0lSX0RJU0VBU0VfTU9ERUxfX0NIQVJBQ1RFUklTVElDX01JWElOR19ESVNUQU5DRTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5UcmFuc21pc3Npb24gUmF0ZTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IEVYQU1QTEVfRElTRUFTRV9NT0RFTF9fVFJBTlNNSVNTSU9OX1JBVEUgPSBTdGFuZGFyZFBhY2thZ2UuU1RPQ0hBU1RJQ19TSVJfRElTRUFTRV9NT0RFTF9fVFJBTlNNSVNTSU9OX1JBVEU7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+Tm9uIExpbmVhcml0eSBDb2VmZmljaWVudDwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IEVYQU1QTEVfRElTRUFTRV9NT0RFTF9fTk9OX0xJTkVBUklUWV9DT0VGRklDSUVOVCA9IFN0YW5kYXJkUGFja2FnZS5TVE9DSEFTVElDX1NJUl9ESVNFQVNFX01PREVMX19OT05fTElORUFSSVRZX0NPRUZGSUNJRU5UOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlJlY292ZXJ5IFJhdGU8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBFWEFNUExFX0RJU0VBU0VfTU9ERUxfX1JFQ09WRVJZX1JBVEUgPSBTdGFuZGFyZFBhY2thZ2UuU1RPQ0hBU1RJQ19TSVJfRElTRUFTRV9NT0RFTF9fUkVDT1ZFUllfUkFURTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5JbmZlY3Rpb3VzIE1vcnRhbGl0eSBSYXRlPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgRVhBTVBMRV9ESVNFQVNFX01PREVMX19JTkZFQ1RJT1VTX01PUlRBTElUWV9SQVRFID0gU3RhbmRhcmRQYWNrYWdlLlNUT0NIQVNUSUNfU0lSX0RJU0VBU0VfTU9ERUxfX0lORkVDVElPVVNfTU9SVEFMSVRZX1JBVEU7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+SW1tdW5pdHkgTG9zcyBSYXRlPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgRVhBTVBMRV9ESVNFQVNFX01PREVMX19JTU1VTklUWV9MT1NTX1JBVEUgPSBTdGFuZGFyZFBhY2thZ2UuU1RPQ0hBU1RJQ19TSVJfRElTRUFTRV9NT0RFTF9fSU1NVU5JVFlfTE9TU19SQVRFOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlNlZWQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBFWEFNUExFX0RJU0VBU0VfTU9ERUxfX1NFRUQgPSBTdGFuZGFyZFBhY2thZ2UuU1RPQ0hBU1RJQ19TSVJfRElTRUFTRV9NT0RFTF9fU0VFRDsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5SYW5kb20gR2VuZXJhdG9yPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgRVhBTVBMRV9ESVNFQVNFX01PREVMX19SQU5ET01fR0VORVJBVE9SID0gU3RhbmRhcmRQYWNrYWdlLlNUT0NIQVNUSUNfU0lSX0RJU0VBU0VfTU9ERUxfX1JBTkRPTV9HRU5FUkFUT1I7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+R2FpbjwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IEVYQU1QTEVfRElTRUFTRV9NT0RFTF9fR0FJTiA9IFN0YW5kYXJkUGFja2FnZS5TVE9DSEFTVElDX1NJUl9ESVNFQVNFX01PREVMX19HQUlOOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlNlYXNvbmFsIE1vZHVsYXRpb24gRXhwb25lbnQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBFWEFNUExFX0RJU0VBU0VfTU9ERUxfX1NFQVNPTkFMX01PRFVMQVRJT05fRVhQT05FTlQgPSBTdGFuZGFyZFBhY2thZ2UuU1RPQ0hBU1RJQ19TSVJfRElTRUFTRV9NT0RFTF9GRUFUVVJFX0NPVU5UICsgMDsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5Nb2R1bGF0aW9uIFBlcmlvZDwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IEVYQU1QTEVfRElTRUFTRV9NT0RFTF9fTU9EVUxBVElPTl9QRVJJT0QgPSBTdGFuZGFyZFBhY2thZ2UuU1RPQ0hBU1RJQ19TSVJfRElTRUFTRV9NT0RFTF9GRUFUVVJFX0NPVU5UICsgMTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5Nb2R1bGF0aW9uIFBoYXNlIFNoaWZ0PC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgRVhBTVBMRV9ESVNFQVNFX01PREVMX19NT0RVTEFUSU9OX1BIQVNFX1NISUZUID0gU3RhbmRhcmRQYWNrYWdlLlNUT0NIQVNUSUNfU0lSX0RJU0VBU0VfTU9ERUxfRkVBVFVSRV9DT1VOVCArIDI7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+U2Vhc29uYWwgTW9kdWxhdGlvbiBGbG9vcjwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IEVYQU1QTEVfRElTRUFTRV9NT0RFTF9fU0VBU09OQUxfTU9EVUxBVElPTl9GTE9PUiA9IFN0YW5kYXJkUGFja2FnZS5TVE9DSEFTVElDX1NJUl9ESVNFQVNFX01PREVMX0ZFQVRVUkVfQ09VTlQgKyAzOworCisJLyoqCisJICogVGhlIG51bWJlciBvZiBzdHJ1Y3R1cmFsIGZlYXR1cmVzIG9mIHRoZSAnPGVtPkRpc2Vhc2UgTW9kZWw8L2VtPicgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgRVhBTVBMRV9ESVNFQVNFX01PREVMX0ZFQVRVUkVfQ09VTlQgPSBTdGFuZGFyZFBhY2thZ2UuU1RPQ0hBU1RJQ19TSVJfRElTRUFTRV9NT0RFTF9GRUFUVVJFX0NPVU5UICsgNDsKKworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4YW1wbGUuRXhhbXBsZURpc2Vhc2VNb2RlbCA8ZW0+RGlzZWFzZSBNb2RlbDwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJzxlbT5EaXNlYXNlIE1vZGVsPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4YW1wbGUuRXhhbXBsZURpc2Vhc2VNb2RlbAorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQ2xhc3MgZ2V0RXhhbXBsZURpc2Vhc2VNb2RlbCgpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXhhbXBsZS5FeGFtcGxlRGlzZWFzZU1vZGVsI2dldFNlYXNvbmFsTW9kdWxhdGlvbkV4cG9uZW50IDxlbT5TZWFzb25hbCBNb2R1bGF0aW9uIEV4cG9uZW50PC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+U2Vhc29uYWwgTW9kdWxhdGlvbiBFeHBvbmVudDwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leGFtcGxlLkV4YW1wbGVEaXNlYXNlTW9kZWwjZ2V0U2Vhc29uYWxNb2R1bGF0aW9uRXhwb25lbnQoKQorCSAqIEBzZWUgI2dldEV4YW1wbGVEaXNlYXNlTW9kZWwoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQXR0cmlidXRlIGdldEV4YW1wbGVEaXNlYXNlTW9kZWxfU2Vhc29uYWxNb2R1bGF0aW9uRXhwb25lbnQoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4YW1wbGUuRXhhbXBsZURpc2Vhc2VNb2RlbCNnZXRNb2R1bGF0aW9uUGVyaW9kIDxlbT5Nb2R1bGF0aW9uIFBlcmlvZDwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPGVtPk1vZHVsYXRpb24gUGVyaW9kPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4YW1wbGUuRXhhbXBsZURpc2Vhc2VNb2RlbCNnZXRNb2R1bGF0aW9uUGVyaW9kKCkKKwkgKiBAc2VlICNnZXRFeGFtcGxlRGlzZWFzZU1vZGVsKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUF0dHJpYnV0ZSBnZXRFeGFtcGxlRGlzZWFzZU1vZGVsX01vZHVsYXRpb25QZXJpb2QoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4YW1wbGUuRXhhbXBsZURpc2Vhc2VNb2RlbCNnZXRNb2R1bGF0aW9uUGhhc2VTaGlmdCA8ZW0+TW9kdWxhdGlvbiBQaGFzZSBTaGlmdDwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPGVtPk1vZHVsYXRpb24gUGhhc2UgU2hpZnQ8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXhhbXBsZS5FeGFtcGxlRGlzZWFzZU1vZGVsI2dldE1vZHVsYXRpb25QaGFzZVNoaWZ0KCkKKwkgKiBAc2VlICNnZXRFeGFtcGxlRGlzZWFzZU1vZGVsKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUF0dHJpYnV0ZSBnZXRFeGFtcGxlRGlzZWFzZU1vZGVsX01vZHVsYXRpb25QaGFzZVNoaWZ0KCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leGFtcGxlLkV4YW1wbGVEaXNlYXNlTW9kZWwjZ2V0U2Vhc29uYWxNb2R1bGF0aW9uRmxvb3IgPGVtPlNlYXNvbmFsIE1vZHVsYXRpb24gRmxvb3I8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxlbT5TZWFzb25hbCBNb2R1bGF0aW9uIEZsb29yPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4YW1wbGUuRXhhbXBsZURpc2Vhc2VNb2RlbCNnZXRTZWFzb25hbE1vZHVsYXRpb25GbG9vcigpCisJICogQHNlZSAjZ2V0RXhhbXBsZURpc2Vhc2VNb2RlbCgpCisJICogQGdlbmVyYXRlZAorCSAqLworCUVBdHRyaWJ1dGUgZ2V0RXhhbXBsZURpc2Vhc2VNb2RlbF9TZWFzb25hbE1vZHVsYXRpb25GbG9vcigpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgZmFjdG9yeSB0aGF0IGNyZWF0ZXMgdGhlIGluc3RhbmNlcyBvZiB0aGUgbW9kZWwuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBmYWN0b3J5IHRoYXQgY3JlYXRlcyB0aGUgaW5zdGFuY2VzIG9mIHRoZSBtb2RlbC4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRXhhbXBsZUZhY3RvcnkgZ2V0RXhhbXBsZUZhY3RvcnkoKTsKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogRGVmaW5lcyBsaXRlcmFscyBmb3IgdGhlIG1ldGEgb2JqZWN0cyB0aGF0IHJlcHJlc2VudAorCSAqIDx1bD4KKwkgKiAgIDxsaT5lYWNoIGNsYXNzLDwvbGk+CisJICogICA8bGk+ZWFjaCBmZWF0dXJlIG9mIGVhY2ggY2xhc3MsPC9saT4KKwkgKiAgIDxsaT5lYWNoIGVudW0sPC9saT4KKwkgKiAgIDxsaT5hbmQgZWFjaCBkYXRhIHR5cGU8L2xpPgorCSAqIDwvdWw+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCWludGVyZmFjZSBMaXRlcmFscyB7CisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4YW1wbGUuaW1wbC5FeGFtcGxlRGlzZWFzZU1vZGVsSW1wbCA8ZW0+RGlzZWFzZSBNb2RlbDwvZW0+fScgY2xhc3MuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leGFtcGxlLmltcGwuRXhhbXBsZURpc2Vhc2VNb2RlbEltcGwKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXhhbXBsZS5pbXBsLkV4YW1wbGVQYWNrYWdlSW1wbCNnZXRFeGFtcGxlRGlzZWFzZU1vZGVsKCkKKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUNsYXNzIEVYQU1QTEVfRElTRUFTRV9NT0RFTCA9IGVJTlNUQU5DRS5nZXRFeGFtcGxlRGlzZWFzZU1vZGVsKCk7CisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+U2Vhc29uYWwgTW9kdWxhdGlvbiBFeHBvbmVudDwvYj48L2VtPicgYXR0cmlidXRlIGZlYXR1cmUuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQXR0cmlidXRlIEVYQU1QTEVfRElTRUFTRV9NT0RFTF9fU0VBU09OQUxfTU9EVUxBVElPTl9FWFBPTkVOVCA9IGVJTlNUQU5DRS5nZXRFeGFtcGxlRGlzZWFzZU1vZGVsX1NlYXNvbmFsTW9kdWxhdGlvbkV4cG9uZW50KCk7CisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+TW9kdWxhdGlvbiBQZXJpb2Q8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUF0dHJpYnV0ZSBFWEFNUExFX0RJU0VBU0VfTU9ERUxfX01PRFVMQVRJT05fUEVSSU9EID0gZUlOU1RBTkNFLmdldEV4YW1wbGVEaXNlYXNlTW9kZWxfTW9kdWxhdGlvblBlcmlvZCgpOworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPk1vZHVsYXRpb24gUGhhc2UgU2hpZnQ8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUF0dHJpYnV0ZSBFWEFNUExFX0RJU0VBU0VfTU9ERUxfX01PRFVMQVRJT05fUEhBU0VfU0hJRlQgPSBlSU5TVEFOQ0UuZ2V0RXhhbXBsZURpc2Vhc2VNb2RlbF9Nb2R1bGF0aW9uUGhhc2VTaGlmdCgpOworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPlNlYXNvbmFsIE1vZHVsYXRpb24gRmxvb3I8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUF0dHJpYnV0ZSBFWEFNUExFX0RJU0VBU0VfTU9ERUxfX1NFQVNPTkFMX01PRFVMQVRJT05fRkxPT1IgPSBlSU5TVEFOQ0UuZ2V0RXhhbXBsZURpc2Vhc2VNb2RlbF9TZWFzb25hbE1vZHVsYXRpb25GbG9vcigpOworCisJfQorCit9IC8vRXhhbXBsZVBhY2thZ2UKZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4YW1wbGUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9leGFtcGxlL2ltcGwvRXhhbXBsZURpc2Vhc2VNb2RlbEltcGwuamF2YSBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4YW1wbGUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9leGFtcGxlL2ltcGwvRXhhbXBsZURpc2Vhc2VNb2RlbEltcGwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMzI0MGJhCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXhhbXBsZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL2V4YW1wbGUvaW1wbC9FeGFtcGxlRGlzZWFzZU1vZGVsSW1wbC5qYXZhCkBAIC0wLDAgKzEsNDc5IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leGFtcGxlLmltcGw7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLmltcGwuRU5vdGlmaWNhdGlvbkltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLlNURU1UaW1lOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leGFtcGxlLkV4YW1wbGVEaXNlYXNlTW9kZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4YW1wbGUuRXhhbXBsZVBhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLkRpc2Vhc2VNb2RlbExhYmVsVmFsdWU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlNJTGFiZWxWYWx1ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU0lSTGFiZWxWYWx1ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbFZhbHVlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5pbXBsLlNJUkxhYmVsVmFsdWVJbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5pbXBsLlN0b2NoYXN0aWNTSVJEaXNlYXNlTW9kZWxJbXBsOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiBBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+RGlzZWFzZSBNb2RlbDwvYj48L2VtPicuCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIDxwPgorICogVGhlIGZvbGxvd2luZyBmZWF0dXJlcyBhcmUgaW1wbGVtZW50ZWQ6CisgKiA8dWw+CisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4YW1wbGUuaW1wbC5FeGFtcGxlRGlzZWFzZU1vZGVsSW1wbCNnZXRTZWFzb25hbE1vZHVsYXRpb25FeHBvbmVudCA8ZW0+U2Vhc29uYWwgTW9kdWxhdGlvbiBFeHBvbmVudDwvZW0+fTwvbGk+CisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4YW1wbGUuaW1wbC5FeGFtcGxlRGlzZWFzZU1vZGVsSW1wbCNnZXRNb2R1bGF0aW9uUGVyaW9kIDxlbT5Nb2R1bGF0aW9uIFBlcmlvZDwvZW0+fTwvbGk+CisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4YW1wbGUuaW1wbC5FeGFtcGxlRGlzZWFzZU1vZGVsSW1wbCNnZXRNb2R1bGF0aW9uUGhhc2VTaGlmdCA8ZW0+TW9kdWxhdGlvbiBQaGFzZSBTaGlmdDwvZW0+fTwvbGk+CisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4YW1wbGUuaW1wbC5FeGFtcGxlRGlzZWFzZU1vZGVsSW1wbCNnZXRTZWFzb25hbE1vZHVsYXRpb25GbG9vciA8ZW0+U2Vhc29uYWwgTW9kdWxhdGlvbiBGbG9vcjwvZW0+fTwvbGk+CisgKiA8L3VsPgorICogPC9wPgorICoKKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIEV4YW1wbGVEaXNlYXNlTW9kZWxJbXBsIGV4dGVuZHMgU3RvY2hhc3RpY1NJUkRpc2Vhc2VNb2RlbEltcGwgaW1wbGVtZW50cyBFeGFtcGxlRGlzZWFzZU1vZGVsIHsKKwkKKwkvKioKKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0U2Vhc29uYWxNb2R1bGF0aW9uRXhwb25lbnQoKSA8ZW0+U2Vhc29uYWwgTW9kdWxhdGlvbiBFeHBvbmVudDwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZ2V0U2Vhc29uYWxNb2R1bGF0aW9uRXhwb25lbnQoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgZG91YmxlIFNFQVNPTkFMX01PRFVMQVRJT05fRVhQT05FTlRfRURFRkFVTFQgPSAyLjA7CisJLyoqCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0U2Vhc29uYWxNb2R1bGF0aW9uRXhwb25lbnQoKSA8ZW0+U2Vhc29uYWwgTW9kdWxhdGlvbiBFeHBvbmVudDwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZ2V0U2Vhc29uYWxNb2R1bGF0aW9uRXhwb25lbnQoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBkb3VibGUgc2Vhc29uYWxNb2R1bGF0aW9uRXhwb25lbnQgPSBTRUFTT05BTF9NT0RVTEFUSU9OX0VYUE9ORU5UX0VERUZBVUxUOworCS8qKgorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRNb2R1bGF0aW9uUGVyaW9kKCkgPGVtPk1vZHVsYXRpb24gUGVyaW9kPC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNnZXRNb2R1bGF0aW9uUGVyaW9kKCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIGRvdWJsZSBNT0RVTEFUSU9OX1BFUklPRF9FREVGQVVMVCA9IDM2NS4yNTYzNjMwNTE7CisJLyoqCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0TW9kdWxhdGlvblBlcmlvZCgpIDxlbT5Nb2R1bGF0aW9uIFBlcmlvZDwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZ2V0TW9kdWxhdGlvblBlcmlvZCgpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIGRvdWJsZSBtb2R1bGF0aW9uUGVyaW9kID0gTU9EVUxBVElPTl9QRVJJT0RfRURFRkFVTFQ7CisJLyoqCisJICogVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldE1vZHVsYXRpb25QaGFzZVNoaWZ0KCkgPGVtPk1vZHVsYXRpb24gUGhhc2UgU2hpZnQ8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI2dldE1vZHVsYXRpb25QaGFzZVNoaWZ0KCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIGRvdWJsZSBNT0RVTEFUSU9OX1BIQVNFX1NISUZUX0VERUZBVUxUID0gMC4wOworCS8qKgorCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldE1vZHVsYXRpb25QaGFzZVNoaWZ0KCkgPGVtPk1vZHVsYXRpb24gUGhhc2UgU2hpZnQ8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI2dldE1vZHVsYXRpb25QaGFzZVNoaWZ0KCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgZG91YmxlIG1vZHVsYXRpb25QaGFzZVNoaWZ0ID0gTU9EVUxBVElPTl9QSEFTRV9TSElGVF9FREVGQVVMVDsKKwkvKioKKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0U2Vhc29uYWxNb2R1bGF0aW9uRmxvb3IoKSA8ZW0+U2Vhc29uYWwgTW9kdWxhdGlvbiBGbG9vcjwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZ2V0U2Vhc29uYWxNb2R1bGF0aW9uRmxvb3IoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgZG91YmxlIFNFQVNPTkFMX01PRFVMQVRJT05fRkxPT1JfRURFRkFVTFQgPSAwLjY7CisJLyoqCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0U2Vhc29uYWxNb2R1bGF0aW9uRmxvb3IoKSA8ZW0+U2Vhc29uYWwgTW9kdWxhdGlvbiBGbG9vcjwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZ2V0U2Vhc29uYWxNb2R1bGF0aW9uRmxvb3IoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBkb3VibGUgc2Vhc29uYWxNb2R1bGF0aW9uRmxvb3IgPSBTRUFTT05BTF9NT0RVTEFUSU9OX0ZMT09SX0VERUZBVUxUOworCS8qKgorCSAqIGEgZmFsc2UgKEhpZGRlbikgdGltZSBjb3VudGVyIHVzZWQgZm9yIHRoaXMgdG95IGV4YW1wbGUKKwkgKi8KKwkvL3ByaXZhdGUgZG91YmxlIGZhbHNlSGlkZGVuVGltZUV4YW1wbGUgPSAwLjA7CisJCisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgZG91YmxlIE1JTExJU19QRVJfREFZID0gMTAwMC4wKjYwLjAqNjAuMCoyNC4wOworCXByaXZhdGUgc3RhdGljIGZpbmFsIGRvdWJsZSBNSUxMSVNfUEVSX1lFQVIgPSBNSUxMSVNfUEVSX0RBWSozNjUuMjU2MzYzMDUxOworCQorCQorCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlwdWJsaWMgRXhhbXBsZURpc2Vhc2VNb2RlbEltcGwoKSB7CisJCXN1cGVyKCk7CisJfQorCQorCQorCS8qKgorCSAqIFRvIGNyZWF0ZSBhIHVzZXIgZGVmaW5lZCAoZXhwZXJpbWVudGFsKSBkaXNlYXNlIG1vZGUsIHRoZSB1c2VyIG1heSB3aXNoIAorCSAqIHRvIGV4dGVuZCB0aGUgZXhpc3RpbmcgbW9kZWxzIGJ1dCBzaW1wbHkgb3ZlcnJpZGUgdHdvIG1ldGhvZHMuCisJICogY29tcHV0ZURpc2Vhc2VEZWx0YXMoKSBzZXRzIHRoZSB3b3JrIGZsb3cgZm9yIHRoZSBtb2RlbC4gVGhlIGZvbGxvd2luZyBleGFtcGxlCisJICogaXMgZGVyaXZlZCBmcm9tIHRoZSBzdGFuZGFyZCBjb2RlIGZvciBhbGwgYnVpbGQgaW4gbW9kZWxzIGJ1dCBpbiB0aGUgbGluZSBiZWxvdworCSAqIHdoZXJlIHdlIGRlZmluZSBmaW5hbCAiZG91YmxlIHRyYW5zbWlzaW9uUmF0ZSIgd2Ugc2hvdyBhbmQgZXhhbXBsZSBtb2RpZmljYXRpb24KKwkgKiB3aGVyZSBhIHBlcmlvZGljIGZvcmNpbmcgZmFjdG9yIHsgc2luKGZyZXEqdCkgfSBpcyBhZGRlZCB0byB0aGUgY29kZSBhcyBhbiBleGFtcGxlCisJICogbW9kaWZpY2F0aW9uLgorCSAqIAorCSAqIEBwYXJhbSB0aW1lCisJICogCQkJICBjdXJyZW50IHRpbWUKKwkgKiBAcGFyYW0gY3VycmVudFN0YXRlCisJICogICAgICAgICAgICB0aGUgY3VycmVudCBzdGF0ZSBvZiB0aGUgcG9wdWxhdGlvbgorCSAqIEBwYXJhbSBkaXNlYXNlTGFiZWwKKwkgKiAgICAgICAgICAgIHRoZSBkaXNlYXNlIGxhYmVsIGZvciB3aGljaCB0aGUgc3RhdGUgdHJhbnNpdGlvbnMgYXJlIGJlaW5nCisJICogICAgICAgICAgICBjb21wdXRlZC4KKwkgKiBAcGFyYW0gdGltZURlbHRhCisJICogICAgICAgICAgICB0aGUgdGltZSBwZXJpb2QgKG1pbGxpc2Vjb25kcykgb3ZlciB3aGljaCB0aGUgcG9wdWxhdGlvbgorCSAqICAgICAgICAgICAgbWVtYmVycyB0cmFuc2l0aW9uIHRvIG5ldyBzdGF0ZXMgICAgICAgICAgCisJICogQHJldHVybiBhIGRpc2Vhc2Ugc3RhdGUgbGFiZWwgdmFsdWUgdGhhdCBjb250YWlucyB0aGUgbnVtYmVyIG9mCisJICogICAgICAgICBkZWx0YSBjaGFuZ2VzIGluIGVhY2ggZGlzZWFzZSBzdGF0ZQorCSAqIAorCSAqIFVzZXJzIGNhbiBtb2RpZnkgdGhlIG1ldGhvZCBiZWxvdyB0byBjcmVhdGUgdGhlaXIgb3duIG1vZGVsLgorCSAqIAorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLmltcGwuU0lJbXBsI2NvbXB1dGVEaXNlYXNlRGVsdGFzKFN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZSwKKwkgKiAgICAgIFN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWwsIGxvbmcpCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIFN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZSBjb21wdXRlRGlzZWFzZURlbHRhcygKKwkJCWZpbmFsIFNURU1UaW1lIHRpbWUsCisJCQlmaW5hbCBTdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsVmFsdWUgY3VycmVudFN0YXRlLAorCQkJZmluYWwgU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbCBkaXNlYXNlTGFiZWwsIGZpbmFsIGxvbmcgdGltZURlbHRhLCBEaXNlYXNlTW9kZWxMYWJlbFZhbHVlIHJldHVyblZhbHVlKSB7CitmaW5hbCBTSVJMYWJlbFZhbHVlIGN1cnJlbnRTSVIgPSAoU0lSTGFiZWxWYWx1ZSkgY3VycmVudFN0YXRlOworCQkKKwkJZG91YmxlIGN1cnJlbnRNaWxsaXMgPSB0aW1lLmdldFRpbWUoKS5nZXRUaW1lKCk7CisJCWRvdWJsZSBzZWFzb25hbE1vZHVsYXRpb25FeHBvbmVudCA9IGdldFNlYXNvbmFsTW9kdWxhdGlvbkV4cG9uZW50KCk7CisJCWRvdWJsZSBzZWFzb25hbE1vZHVsYXRpb25GbG9vciA9IGdldFNlYXNvbmFsTW9kdWxhdGlvbkZsb29yKCk7CisJCWRvdWJsZSBwaGFzZSA9IGdldE1vZHVsYXRpb25QaGFzZVNoaWZ0KCk7CQorCQlkb3VibGUgbW9kdWxhdGlvbiA9IHNlYXNvbmFsTW9kdWxhdGlvbkZsb29yICsgKDEtc2Vhc29uYWxNb2R1bGF0aW9uRmxvb3IpKk1hdGgucG93KE1hdGguYWJzKE1hdGguc2luKHBoYXNlICsgTWF0aC5QSSpjdXJyZW50TWlsbGlzLyhnZXRNb2R1bGF0aW9uUGVyaW9kKCkqTUlMTElTX1BFUl9EQVkpKSksIHNlYXNvbmFsTW9kdWxhdGlvbkV4cG9uZW50KTsKKwkJCisJCS8vIFRoaXMgaXMgYmV0YSoKKwkJZG91YmxlIHRyYW5zbWlzc2lvblJhdGUgPSBtb2R1bGF0aW9uICogKGdldEFkanVzdGVkVHJhbnNtaXNzaW9uUmF0ZSh0aW1lRGVsdGEpKTsKKworCQlpZighdGhpcy5pc0ZyZXF1ZW5jeURlcGVuZGVudCgpKSAgdHJhbnNtaXNzaW9uUmF0ZSAqPSBnZXRUcmFuc21pc3Npb25SYXRlU2NhbGVGYWN0b3IoZGlzZWFzZUxhYmVsKTsKKwkJCisJCS8vIFRoZSBlZmZlY3RpdmUgSW5mZWN0aW91cyBwb3B1bGF0aW9uICBpcyBhIGRpbWVuc2lvbmxlcyBudW1iZXIgbm9ybWFsaXplIGJ5IHRvdGFsCisJCS8vIHBvcHVsYXRpb24gdXNlZCBpbiB0ZWggY29tcHV0YXRpb24gb2YgYmV0cypTKmkgd2hlcmUgaSA9IEllZmZlY3RpdmUvUG9wLgorCQkvLyBUaGlzIGluY2x1ZGVzIGEgY29ycmVjdGlvbiB0byB0aGUgY3VycmVudAorCQkvLyBpbmZlY3Rpb3VzIHBvcHVsYXRpb24gKEllZmZlY3RpdmUpIGJhc2VkIG9uIHRoZSBjb25zZXJ2ZWQgZXhjaGFuZ2Ugb2YgcGVvcGxlIChjaXJjdWxhdGlvbikKKwkJLy8gYmV0d2VlbiByZWdpb25zLiBOb3RlIHRoYXQgdGhpcyBpcyBubyB0aGUgImFycml2YWxzIiBhbmQgImRlcGFydHVyZXMiIHdoaWNoIGFyZQorCQkvLyBhIGRpZmZlcmVudCBwcm9jZXNzLgorCQlmaW5hbCBkb3VibGUgZWZmZWN0aXZlSW5mZWN0aW91cyA9IGdldE5vcm1hbGl6ZWRFZmZlY3RpdmVJbmZlY3Rpb3VzKGRpc2Vhc2VMYWJlbC5nZXROb2RlKCksIGRpc2Vhc2VMYWJlbCwgY3VycmVudFNJUi5nZXRJKCkpOworCisJCS8qCisJCSAqIENvbXB1dGUgc3RhdGUgdHJhbnNpdGlvbnMKKwkJICogCisJCSAqIFJlZ2FyZGluZyBjb21wdXRpbmcgdGhlIG51bWJlciBvZiB0cmFuc2l0aW9ucyBmcm9tIFN1c2NlcHRpYmxlIHRvIEV4cG9zZWQ6CisJCSAqIEluIGEgbGluZWFyIG1vZGVsIHRoZSAiZWZmZWN0aXZlIiBudW1iZXIgb2YgaW5mZWN0aW91cyBwZW9wbGUgaXMganVzdAorCQkgKiB0aGUgbnVtYmVyIG9mIGluZmVjdGlvdXMgcGVvcGxlIEluIGEgbm9ubGluZWFyIG1vZGVsIHdlIGhhdmUgYQorCQkgKiBub25MaW5lYXJpdHkgZXhwb25lbnQgdGhhdCBpcyA+IDEgdGhpcyBtb2RlbHMgdGhlIGVmZmVjdCBvZiBpbW11bmUKKwkJICogc3lzdGVtIHNhdHVyYXRpb24gd2hlbiBTdXNjZXB0aWJsZSBwZW9wbGUgYXJlIGV4cG9zZWQgdG8gbGFyZ2UKKwkJICogbnVtYmVycyBvZiBpbmZlY3Rpb3VzIHBlb3BsZS4gdGhlbiB0aGUgImVmZmVjdGl2ZSIgbnVtYmVyIG9mCisJCSAqIGluZmVjdGlvdXMgcGVvcGxlIGlzIElebm9uTGluZWFyaXR5IGV4cG9uZW50IHRvIGFsbG93IGZvciBlaXRoZXIKKwkJICogbGluZWFyIG9yIG5vbmxpbmVhciBtb2RlbHMgd2UgYWx3YXlzIGNhbGN1bGF0ZSBJXm5vbkxpbmVhcml0eQorCQkgKiBleHBvbmVudCBhbmQgYWxsb3cgbm9uTGluZWFyaXR5IGV4cG9uZW50ID49IDEuMAorCQkgKi8KKwkJZG91YmxlIG51bWJlck9mSW5mZWN0ZWRUb1JlY292ZXJlZCA9IGdldEFkanVzdGVkUmVjb3ZlcnlSYXRlKHRpbWVEZWx0YSkKKwkJKiBjdXJyZW50U0lSLmdldEkoKTsKKwkJZG91YmxlIG51bWJlck9mUmVjb3ZlcmVkVG9TdXNjZXB0aWJsZSA9IGdldEFkanVzdGVkSW1tdW5pdHlMb3NzUmF0ZSh0aW1lRGVsdGEpCisJCSogY3VycmVudFNJUi5nZXRSKCk7CisJCS8vIE5lZWQgdG8gY2hlY2tlZCB3aGF0IGRvIGRvIGhlcmUuIElmIG5vbiBsaW5lYXIgY29lZmZpY2llbnQgaXMgbm90IDEgYW5kCisJCS8vIHRoZSBlZmZlY3RpdmUgaW5mZWN0aW91cyBpcyBuZWdhdGl2ZSAod2hpY2ggaXMgcG9zc2libGUpLCB3aGF0IGRvIGRvPyAKKwkJLy8gTGV0J3MgZmFsbCBiYWNrIG9uIHRoZSBsaW5lYXIgbWV0aG9kIGZvciBub3cuCisJCWRvdWJsZSBudW1iZXJPZlN1c2NlcHRpYmxlVG9JbmZlY3RlZCA9IDAuMDsKKwkJaWYoZ2V0Tm9uTGluZWFyaXR5Q29lZmZpY2llbnQoKSAhPSAxLjAgJiYgZWZmZWN0aXZlSW5mZWN0aW91cyA+PSAwLjApCisJCQludW1iZXJPZlN1c2NlcHRpYmxlVG9JbmZlY3RlZCA9IHRyYW5zbWlzc2lvblJhdGUKKwkJCSogY3VycmVudFNJUi5nZXRTKCkqIE1hdGgucG93KGVmZmVjdGl2ZUluZmVjdGlvdXMsIGdldE5vbkxpbmVhcml0eUNvZWZmaWNpZW50KCkpOworCQllbHNlCisJCQludW1iZXJPZlN1c2NlcHRpYmxlVG9JbmZlY3RlZCA9IHRyYW5zbWlzc2lvblJhdGUKKwkJCSogY3VycmVudFNJUi5nZXRTKCkqIGVmZmVjdGl2ZUluZmVjdGlvdXM7CisJCQorCQkvLyBEZXRlcm1pbmUgZGVsdGEgUworCQlmaW5hbCBkb3VibGUgZGVsdGFTID0gbnVtYmVyT2ZSZWNvdmVyZWRUb1N1c2NlcHRpYmxlIC0gbnVtYmVyT2ZTdXNjZXB0aWJsZVRvSW5mZWN0ZWQ7CisJCQkvLyBEZXRlcm1pbmUgZGVsdGEgSQorCQlmaW5hbCBkb3VibGUgZGVsdGFJID0gbnVtYmVyT2ZTdXNjZXB0aWJsZVRvSW5mZWN0ZWQtIG51bWJlck9mSW5mZWN0ZWRUb1JlY292ZXJlZDsKKwkJLy8gRGV0ZXJtaW5lIGRlbHRhIFIKKwkJZmluYWwgZG91YmxlIGRlbHRhUiA9IG51bWJlck9mSW5mZWN0ZWRUb1JlY292ZXJlZCAtIG51bWJlck9mUmVjb3ZlcmVkVG9TdXNjZXB0aWJsZTsKKwkJCisJCVNJUkxhYmVsVmFsdWVJbXBsIHJldCA9IChTSVJMYWJlbFZhbHVlSW1wbClyZXR1cm5WYWx1ZTsKKwkJcmV0LnNldFMoZGVsdGFTKTsKKwkJcmV0LnNldEkoZGVsdGFJKTsKKwkJcmV0LnNldEluY2lkZW5jZShudW1iZXJPZkluZmVjdGVkVG9SZWNvdmVyZWQpOworCQlyZXQuc2V0UihkZWx0YVIpOworCQlyZXQuc2V0RGlzZWFzZURlYXRocygwKTsKKwkJcmV0dXJuIHJldDsKKwkJCisJfSAvLyBjb21wdXRlVHJhbnNpdGlvbnMKKworCQorCQorCS8qKgorCSAqIE1vZGVsU3BlY2lmaWNBZGp1c3RtZW50cyBmb3IgYSBTdG9jaGFzdGljIG1vZGVsIGFkZHMgbm9pc2UgdG8gb3IgYWRqdXN0cyAKKwkgKiB0aGUgZGlzZWFzZSBzdGF0ZSB0cmFuc2l0aW9uIHZhbHVlcyBieSBtdWx0aXBseWluZworCSAqIHRoZSBhZGRpdGlvbnMgYnkgYSByYW5kb20gdmFyaWFibGUgciB+ICgxKy8teCkgd2l0aCB4IHNtYWxsLgorCSAqIFRoZSByZXF1aXJlbWVudHMgdGhhdCBubyBtb3JlIGluZGl2aWR1YWxzIGNhbiBiZSBtb3ZlZCBmcm9tIGEgc3RhdGUgdGhhbiBhcmUKKwkgKiBhbHJlYWR5IGluIHRoYXQgc3RhdGUgaXMgc3RpbGwgZW5mb3JjZWQuCisJICogCisJICovCisJcHVibGljIHZvaWQgZG9Nb2RlbFNwZWNpZmljQWRqdXN0bWVudHMoCisJCQlmaW5hbCBTdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsVmFsdWUgc3RhdGUpIHsKKwkJCWZpbmFsIFNJTGFiZWxWYWx1ZSBjdXJyZW50U0kgPSAoU0lMYWJlbFZhbHVlKSBzdGF0ZTsKKwkJCWRvdWJsZSBvbGRJID0gY3VycmVudFNJLmdldEkoKTsKKwkJCWRvdWJsZSBJbm9pc3kgPSBjdXJyZW50U0kuZ2V0SSgpKiBjb21wdXRlTm9pc2UoKTsKKwkJCWRvdWJsZSBjaGFuZ2UgPSBvbGRJLUlub2lzeTsKKwkJCWN1cnJlbnRTSS5zZXRJKElub2lzeSk7CisJCQlkb3VibGUgbmV3UyA9IGN1cnJlbnRTSS5nZXRTKCkgKyBjaGFuZ2U7CisJCQlpZihuZXdTIDwgMC4wKSB7CisJCQkJLy8gTmVlZCB0byByZXNjYWxlCisJCQkJZG91YmxlIHNjYWxlID0gKGN1cnJlbnRTSS5nZXRTKCkgKyBuZXdTKSAvIGN1cnJlbnRTSS5nZXRTKCk7CisJCQkJY3VycmVudFNJLnNldEkoSW5vaXN5KnNjYWxlKTsKKwkJCX0gZWxzZSAgY3VycmVudFNJLnNldFMobmV3Uyk7CisJCQlyZXR1cm47CisJfSAvLyBkb01vZGVsU3BlY2lmaWNBZGp1c3RtZW50cworCQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIEVDbGFzcyBlU3RhdGljQ2xhc3MoKSB7CisJCXJldHVybiBFeGFtcGxlUGFja2FnZS5MaXRlcmFscy5FWEFNUExFX0RJU0VBU0VfTU9ERUw7CisJfQorCisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgZG91YmxlIGdldFNlYXNvbmFsTW9kdWxhdGlvbkV4cG9uZW50KCkgeworCQlyZXR1cm4gc2Vhc29uYWxNb2R1bGF0aW9uRXhwb25lbnQ7CisJfQorCisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRTZWFzb25hbE1vZHVsYXRpb25FeHBvbmVudChkb3VibGUgbmV3U2Vhc29uYWxNb2R1bGF0aW9uRXhwb25lbnQpIHsKKwkJZG91YmxlIG9sZFNlYXNvbmFsTW9kdWxhdGlvbkV4cG9uZW50ID0gc2Vhc29uYWxNb2R1bGF0aW9uRXhwb25lbnQ7CisJCXNlYXNvbmFsTW9kdWxhdGlvbkV4cG9uZW50ID0gbmV3U2Vhc29uYWxNb2R1bGF0aW9uRXhwb25lbnQ7CisJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkKKwkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIEV4YW1wbGVQYWNrYWdlLkVYQU1QTEVfRElTRUFTRV9NT0RFTF9fU0VBU09OQUxfTU9EVUxBVElPTl9FWFBPTkVOVCwgb2xkU2Vhc29uYWxNb2R1bGF0aW9uRXhwb25lbnQsIHNlYXNvbmFsTW9kdWxhdGlvbkV4cG9uZW50KSk7CisJfQorCisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgZG91YmxlIGdldE1vZHVsYXRpb25QZXJpb2QoKSB7CisJCXJldHVybiBtb2R1bGF0aW9uUGVyaW9kOworCX0KKworCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgc2V0TW9kdWxhdGlvblBlcmlvZChkb3VibGUgbmV3TW9kdWxhdGlvblBlcmlvZCkgeworCQlkb3VibGUgb2xkTW9kdWxhdGlvblBlcmlvZCA9IG1vZHVsYXRpb25QZXJpb2Q7CisJCW1vZHVsYXRpb25QZXJpb2QgPSBuZXdNb2R1bGF0aW9uUGVyaW9kOworCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpCisJCQllTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBFeGFtcGxlUGFja2FnZS5FWEFNUExFX0RJU0VBU0VfTU9ERUxfX01PRFVMQVRJT05fUEVSSU9ELCBvbGRNb2R1bGF0aW9uUGVyaW9kLCBtb2R1bGF0aW9uUGVyaW9kKSk7CisJfQorCisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgZG91YmxlIGdldE1vZHVsYXRpb25QaGFzZVNoaWZ0KCkgeworCQlyZXR1cm4gbW9kdWxhdGlvblBoYXNlU2hpZnQ7CisJfQorCisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRNb2R1bGF0aW9uUGhhc2VTaGlmdChkb3VibGUgbmV3TW9kdWxhdGlvblBoYXNlU2hpZnQpIHsKKwkJZG91YmxlIG9sZE1vZHVsYXRpb25QaGFzZVNoaWZ0ID0gbW9kdWxhdGlvblBoYXNlU2hpZnQ7CisJCW1vZHVsYXRpb25QaGFzZVNoaWZ0ID0gbmV3TW9kdWxhdGlvblBoYXNlU2hpZnQ7CisJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkKKwkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIEV4YW1wbGVQYWNrYWdlLkVYQU1QTEVfRElTRUFTRV9NT0RFTF9fTU9EVUxBVElPTl9QSEFTRV9TSElGVCwgb2xkTW9kdWxhdGlvblBoYXNlU2hpZnQsIG1vZHVsYXRpb25QaGFzZVNoaWZ0KSk7CisJfQorCisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgZG91YmxlIGdldFNlYXNvbmFsTW9kdWxhdGlvbkZsb29yKCkgeworCQlyZXR1cm4gc2Vhc29uYWxNb2R1bGF0aW9uRmxvb3I7CisJfQorCisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRTZWFzb25hbE1vZHVsYXRpb25GbG9vcihkb3VibGUgbmV3U2Vhc29uYWxNb2R1bGF0aW9uRmxvb3IpIHsKKwkJZG91YmxlIG9sZFNlYXNvbmFsTW9kdWxhdGlvbkZsb29yID0gc2Vhc29uYWxNb2R1bGF0aW9uRmxvb3I7CisJCXNlYXNvbmFsTW9kdWxhdGlvbkZsb29yID0gbmV3U2Vhc29uYWxNb2R1bGF0aW9uRmxvb3I7CisJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkKKwkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIEV4YW1wbGVQYWNrYWdlLkVYQU1QTEVfRElTRUFTRV9NT0RFTF9fU0VBU09OQUxfTU9EVUxBVElPTl9GTE9PUiwgb2xkU2Vhc29uYWxNb2R1bGF0aW9uRmxvb3IsIHNlYXNvbmFsTW9kdWxhdGlvbkZsb29yKSk7CisJfQorCisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgT2JqZWN0IGVHZXQoaW50IGZlYXR1cmVJRCwgYm9vbGVhbiByZXNvbHZlLCBib29sZWFuIGNvcmVUeXBlKSB7CisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7CisJCQljYXNlIEV4YW1wbGVQYWNrYWdlLkVYQU1QTEVfRElTRUFTRV9NT0RFTF9fU0VBU09OQUxfTU9EVUxBVElPTl9FWFBPTkVOVDoKKwkJCQlyZXR1cm4gZ2V0U2Vhc29uYWxNb2R1bGF0aW9uRXhwb25lbnQoKTsKKwkJCWNhc2UgRXhhbXBsZVBhY2thZ2UuRVhBTVBMRV9ESVNFQVNFX01PREVMX19NT0RVTEFUSU9OX1BFUklPRDoKKwkJCQlyZXR1cm4gZ2V0TW9kdWxhdGlvblBlcmlvZCgpOworCQkJY2FzZSBFeGFtcGxlUGFja2FnZS5FWEFNUExFX0RJU0VBU0VfTU9ERUxfX01PRFVMQVRJT05fUEhBU0VfU0hJRlQ6CisJCQkJcmV0dXJuIGdldE1vZHVsYXRpb25QaGFzZVNoaWZ0KCk7CisJCQljYXNlIEV4YW1wbGVQYWNrYWdlLkVYQU1QTEVfRElTRUFTRV9NT0RFTF9fU0VBU09OQUxfTU9EVUxBVElPTl9GTE9PUjoKKwkJCQlyZXR1cm4gZ2V0U2Vhc29uYWxNb2R1bGF0aW9uRmxvb3IoKTsKKwkJfQorCQlyZXR1cm4gc3VwZXIuZUdldChmZWF0dXJlSUQsIHJlc29sdmUsIGNvcmVUeXBlKTsKKwl9CisKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGVTZXQoaW50IGZlYXR1cmVJRCwgT2JqZWN0IG5ld1ZhbHVlKSB7CisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7CisJCQljYXNlIEV4YW1wbGVQYWNrYWdlLkVYQU1QTEVfRElTRUFTRV9NT0RFTF9fU0VBU09OQUxfTU9EVUxBVElPTl9FWFBPTkVOVDoKKwkJCQlzZXRTZWFzb25hbE1vZHVsYXRpb25FeHBvbmVudCgoRG91YmxlKW5ld1ZhbHVlKTsKKwkJCQlyZXR1cm47CisJCQljYXNlIEV4YW1wbGVQYWNrYWdlLkVYQU1QTEVfRElTRUFTRV9NT0RFTF9fTU9EVUxBVElPTl9QRVJJT0Q6CisJCQkJc2V0TW9kdWxhdGlvblBlcmlvZCgoRG91YmxlKW5ld1ZhbHVlKTsKKwkJCQlyZXR1cm47CisJCQljYXNlIEV4YW1wbGVQYWNrYWdlLkVYQU1QTEVfRElTRUFTRV9NT0RFTF9fTU9EVUxBVElPTl9QSEFTRV9TSElGVDoKKwkJCQlzZXRNb2R1bGF0aW9uUGhhc2VTaGlmdCgoRG91YmxlKW5ld1ZhbHVlKTsKKwkJCQlyZXR1cm47CisJCQljYXNlIEV4YW1wbGVQYWNrYWdlLkVYQU1QTEVfRElTRUFTRV9NT0RFTF9fU0VBU09OQUxfTU9EVUxBVElPTl9GTE9PUjoKKwkJCQlzZXRTZWFzb25hbE1vZHVsYXRpb25GbG9vcigoRG91YmxlKW5ld1ZhbHVlKTsKKwkJCQlyZXR1cm47CisJCX0KKwkJc3VwZXIuZVNldChmZWF0dXJlSUQsIG5ld1ZhbHVlKTsKKwl9CisKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGVVbnNldChpbnQgZmVhdHVyZUlEKSB7CisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7CisJCQljYXNlIEV4YW1wbGVQYWNrYWdlLkVYQU1QTEVfRElTRUFTRV9NT0RFTF9fU0VBU09OQUxfTU9EVUxBVElPTl9FWFBPTkVOVDoKKwkJCQlzZXRTZWFzb25hbE1vZHVsYXRpb25FeHBvbmVudChTRUFTT05BTF9NT0RVTEFUSU9OX0VYUE9ORU5UX0VERUZBVUxUKTsKKwkJCQlyZXR1cm47CisJCQljYXNlIEV4YW1wbGVQYWNrYWdlLkVYQU1QTEVfRElTRUFTRV9NT0RFTF9fTU9EVUxBVElPTl9QRVJJT0Q6CisJCQkJc2V0TW9kdWxhdGlvblBlcmlvZChNT0RVTEFUSU9OX1BFUklPRF9FREVGQVVMVCk7CisJCQkJcmV0dXJuOworCQkJY2FzZSBFeGFtcGxlUGFja2FnZS5FWEFNUExFX0RJU0VBU0VfTU9ERUxfX01PRFVMQVRJT05fUEhBU0VfU0hJRlQ6CisJCQkJc2V0TW9kdWxhdGlvblBoYXNlU2hpZnQoTU9EVUxBVElPTl9QSEFTRV9TSElGVF9FREVGQVVMVCk7CisJCQkJcmV0dXJuOworCQkJY2FzZSBFeGFtcGxlUGFja2FnZS5FWEFNUExFX0RJU0VBU0VfTU9ERUxfX1NFQVNPTkFMX01PRFVMQVRJT05fRkxPT1I6CisJCQkJc2V0U2Vhc29uYWxNb2R1bGF0aW9uRmxvb3IoU0VBU09OQUxfTU9EVUxBVElPTl9GTE9PUl9FREVGQVVMVCk7CisJCQkJcmV0dXJuOworCQl9CisJCXN1cGVyLmVVbnNldChmZWF0dXJlSUQpOworCX0KKworCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIGJvb2xlYW4gZUlzU2V0KGludCBmZWF0dXJlSUQpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJCWNhc2UgRXhhbXBsZVBhY2thZ2UuRVhBTVBMRV9ESVNFQVNFX01PREVMX19TRUFTT05BTF9NT0RVTEFUSU9OX0VYUE9ORU5UOgorCQkJCXJldHVybiBzZWFzb25hbE1vZHVsYXRpb25FeHBvbmVudCAhPSBTRUFTT05BTF9NT0RVTEFUSU9OX0VYUE9ORU5UX0VERUZBVUxUOworCQkJY2FzZSBFeGFtcGxlUGFja2FnZS5FWEFNUExFX0RJU0VBU0VfTU9ERUxfX01PRFVMQVRJT05fUEVSSU9EOgorCQkJCXJldHVybiBtb2R1bGF0aW9uUGVyaW9kICE9IE1PRFVMQVRJT05fUEVSSU9EX0VERUZBVUxUOworCQkJY2FzZSBFeGFtcGxlUGFja2FnZS5FWEFNUExFX0RJU0VBU0VfTU9ERUxfX01PRFVMQVRJT05fUEhBU0VfU0hJRlQ6CisJCQkJcmV0dXJuIG1vZHVsYXRpb25QaGFzZVNoaWZ0ICE9IE1PRFVMQVRJT05fUEhBU0VfU0hJRlRfRURFRkFVTFQ7CisJCQljYXNlIEV4YW1wbGVQYWNrYWdlLkVYQU1QTEVfRElTRUFTRV9NT0RFTF9fU0VBU09OQUxfTU9EVUxBVElPTl9GTE9PUjoKKwkJCQlyZXR1cm4gc2Vhc29uYWxNb2R1bGF0aW9uRmxvb3IgIT0gU0VBU09OQUxfTU9EVUxBVElPTl9GTE9PUl9FREVGQVVMVDsKKwkJfQorCQlyZXR1cm4gc3VwZXIuZUlzU2V0KGZlYXR1cmVJRCk7CisJfQorCisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkgeworCQlpZiAoZUlzUHJveHkoKSkgcmV0dXJuIHN1cGVyLnRvU3RyaW5nKCk7CisKKwkJU3RyaW5nQnVmZmVyIHJlc3VsdCA9IG5ldyBTdHJpbmdCdWZmZXIoc3VwZXIudG9TdHJpbmcoKSk7CisJCXJlc3VsdC5hcHBlbmQoIiAoc2Vhc29uYWxNb2R1bGF0aW9uRXhwb25lbnQ6ICIpOyAvLyROT04tTkxTLTEkCisJCXJlc3VsdC5hcHBlbmQoc2Vhc29uYWxNb2R1bGF0aW9uRXhwb25lbnQpOworCQlyZXN1bHQuYXBwZW5kKCIsIG1vZHVsYXRpb25QZXJpb2Q6ICIpOyAvLyROT04tTkxTLTEkCisJCXJlc3VsdC5hcHBlbmQobW9kdWxhdGlvblBlcmlvZCk7CisJCXJlc3VsdC5hcHBlbmQoIiwgbW9kdWxhdGlvblBoYXNlU2hpZnQ6ICIpOyAvLyROT04tTkxTLTEkCisJCXJlc3VsdC5hcHBlbmQobW9kdWxhdGlvblBoYXNlU2hpZnQpOworCQlyZXN1bHQuYXBwZW5kKCIsIHNlYXNvbmFsTW9kdWxhdGlvbkZsb29yOiAiKTsgLy8kTk9OLU5MUy0xJAorCQlyZXN1bHQuYXBwZW5kKHNlYXNvbmFsTW9kdWxhdGlvbkZsb29yKTsKKwkJcmVzdWx0LmFwcGVuZCgnKScpOworCQlyZXR1cm4gcmVzdWx0LnRvU3RyaW5nKCk7CisJfQorCit9IC8vRXhhbXBsZURpc2Vhc2VNb2RlbEltcGwKZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4YW1wbGUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9leGFtcGxlL2ltcGwvRXhhbXBsZUZhY3RvcnlJbXBsLmphdmEgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leGFtcGxlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvZXhhbXBsZS9pbXBsL0V4YW1wbGVGYWN0b3J5SW1wbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNhN2Q0YTEKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leGFtcGxlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvZXhhbXBsZS9pbXBsL0V4YW1wbGVGYWN0b3J5SW1wbC5qYXZhCkBAIC0wLDAgKzEsMTA0IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leGFtcGxlLmltcGw7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDcsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzczsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRVBhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLmltcGwuRUZhY3RvcnlJbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5wbHVnaW4uRWNvcmVQbHVnaW47CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4YW1wbGUuKjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXhhbXBsZS5FeGFtcGxlRGlzZWFzZU1vZGVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leGFtcGxlLkV4YW1wbGVGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leGFtcGxlLkV4YW1wbGVQYWNrYWdlOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiBBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgbW9kZWwgPGI+RmFjdG9yeTwvYj4uCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIEV4YW1wbGVGYWN0b3J5SW1wbCBleHRlbmRzIEVGYWN0b3J5SW1wbCBpbXBsZW1lbnRzIEV4YW1wbGVGYWN0b3J5IHsKKwkvKioKKwkgKiBDcmVhdGVzIHRoZSBkZWZhdWx0IGZhY3RvcnkgaW1wbGVtZW50YXRpb24uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHN0YXRpYyBFeGFtcGxlRmFjdG9yeSBpbml0KCkgeworCQl0cnkgeworCQkJRXhhbXBsZUZhY3RvcnkgdGhlRXhhbXBsZUZhY3RvcnkgPSAoRXhhbXBsZUZhY3RvcnkpRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RUZhY3RvcnkoImh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL2V4YW1wbGUuZWNvcmUiKTsgLy8kTk9OLU5MUy0xJCAKKwkJCWlmICh0aGVFeGFtcGxlRmFjdG9yeSAhPSBudWxsKSB7CisJCQkJcmV0dXJuIHRoZUV4YW1wbGVGYWN0b3J5OworCQkJfQorCQl9CisJCWNhdGNoIChFeGNlcHRpb24gZXhjZXB0aW9uKSB7CisJCQlFY29yZVBsdWdpbi5JTlNUQU5DRS5sb2coZXhjZXB0aW9uKTsKKwkJfQorCQlyZXR1cm4gbmV3IEV4YW1wbGVGYWN0b3J5SW1wbCgpOworCX0KKworCS8qKgorCSAqIENyZWF0ZXMgYW4gaW5zdGFuY2Ugb2YgdGhlIGZhY3RvcnkuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEV4YW1wbGVGYWN0b3J5SW1wbCgpIHsKKwkJc3VwZXIoKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgRU9iamVjdCBjcmVhdGUoRUNsYXNzIGVDbGFzcykgeworCQlzd2l0Y2ggKGVDbGFzcy5nZXRDbGFzc2lmaWVySUQoKSkgeworCQkJY2FzZSBFeGFtcGxlUGFja2FnZS5FWEFNUExFX0RJU0VBU0VfTU9ERUw6IHJldHVybiBjcmVhdGVFeGFtcGxlRGlzZWFzZU1vZGVsKCk7CisJCQlkZWZhdWx0OgorCQkJCXRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIlRoZSBjbGFzcyAnIiArIGVDbGFzcy5nZXROYW1lKCkgKyAiJyBpcyBub3QgYSB2YWxpZCBjbGFzc2lmaWVyIik7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAorCQl9CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEV4YW1wbGVEaXNlYXNlTW9kZWwgY3JlYXRlRXhhbXBsZURpc2Vhc2VNb2RlbCgpIHsKKwkJRXhhbXBsZURpc2Vhc2VNb2RlbEltcGwgZXhhbXBsZURpc2Vhc2VNb2RlbCA9IG5ldyBFeGFtcGxlRGlzZWFzZU1vZGVsSW1wbCgpOworCQlyZXR1cm4gZXhhbXBsZURpc2Vhc2VNb2RlbDsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRXhhbXBsZVBhY2thZ2UgZ2V0RXhhbXBsZVBhY2thZ2UoKSB7CisJCXJldHVybiAoRXhhbXBsZVBhY2thZ2UpZ2V0RVBhY2thZ2UoKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBkZXByZWNhdGVkCisJICogQGdlbmVyYXRlZAorCSAqLworCUBEZXByZWNhdGVkCisJcHVibGljIHN0YXRpYyBFeGFtcGxlUGFja2FnZSBnZXRQYWNrYWdlKCkgeworCQlyZXR1cm4gRXhhbXBsZVBhY2thZ2UuZUlOU1RBTkNFOworCX0KKworfSAvL0V4YW1wbGVGYWN0b3J5SW1wbApkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXhhbXBsZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL2V4YW1wbGUvaW1wbC9FeGFtcGxlUGFja2FnZUltcGwuamF2YSBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4YW1wbGUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9leGFtcGxlL2ltcGwvRXhhbXBsZVBhY2thZ2VJbXBsLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjFmZDFhNgotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4YW1wbGUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9leGFtcGxlL2ltcGwvRXhhbXBsZVBhY2thZ2VJbXBsLmphdmEKQEAgLTAsMCArMSwyMjkgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4YW1wbGUuaW1wbDsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNywgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUF0dHJpYnV0ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRWNvcmVQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5pbXBsLkVQYWNrYWdlSW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubG9nZ2VyLkxvZ2dlclBhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4YW1wbGUuRXhhbXBsZURpc2Vhc2VNb2RlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXhhbXBsZS5FeGFtcGxlRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXhhbXBsZS5FeGFtcGxlUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmRQYWNrYWdlOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiBBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgbW9kZWwgPGI+UGFja2FnZTwvYj4uCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIEV4YW1wbGVQYWNrYWdlSW1wbCBleHRlbmRzIEVQYWNrYWdlSW1wbCBpbXBsZW1lbnRzIEV4YW1wbGVQYWNrYWdlIHsKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcml2YXRlIEVDbGFzcyBleGFtcGxlRGlzZWFzZU1vZGVsRUNsYXNzID0gbnVsbDsKKworCS8qKgorCSAqIENyZWF0ZXMgYW4gaW5zdGFuY2Ugb2YgdGhlIG1vZGVsIDxiPlBhY2thZ2U8L2I+LCByZWdpc3RlcmVkIHdpdGgKKwkgKiB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVQYWNrYWdlLlJlZ2lzdHJ5IEVQYWNrYWdlLlJlZ2lzdHJ5fSBieSB0aGUgcGFja2FnZQorCSAqIHBhY2thZ2UgVVJJIHZhbHVlLgorCSAqIDxwPk5vdGU6IHRoZSBjb3JyZWN0IHdheSB0byBjcmVhdGUgdGhlIHBhY2thZ2UgaXMgdmlhIHRoZSBzdGF0aWMKKwkgKiBmYWN0b3J5IG1ldGhvZCB7QGxpbmsgI2luaXQgaW5pdCgpfSwgd2hpY2ggYWxzbyBwZXJmb3JtcworCSAqIGluaXRpYWxpemF0aW9uIG9mIHRoZSBwYWNrYWdlLCBvciByZXR1cm5zIHRoZSByZWdpc3RlcmVkIHBhY2thZ2UsCisJICogaWYgb25lIGFscmVhZHkgZXhpc3RzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRVBhY2thZ2UuUmVnaXN0cnkKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leGFtcGxlLkV4YW1wbGVQYWNrYWdlI2VOU19VUkkKKwkgKiBAc2VlICNpbml0KCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJpdmF0ZSBFeGFtcGxlUGFja2FnZUltcGwoKSB7CisJCXN1cGVyKGVOU19VUkksIEV4YW1wbGVGYWN0b3J5LmVJTlNUQU5DRSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJpdmF0ZSBzdGF0aWMgYm9vbGVhbiBpc0luaXRlZCA9IGZhbHNlOworCisJLyoqCisJICogQ3JlYXRlcywgcmVnaXN0ZXJzLCBhbmQgaW5pdGlhbGl6ZXMgdGhlIDxiPlBhY2thZ2U8L2I+IGZvciB0aGlzIG1vZGVsLCBhbmQgZm9yIGFueSBvdGhlcnMgdXBvbiB3aGljaCBpdCBkZXBlbmRzLgorCSAqIAorCSAqIDxwPlRoaXMgbWV0aG9kIGlzIHVzZWQgdG8gaW5pdGlhbGl6ZSB7QGxpbmsgRXhhbXBsZVBhY2thZ2UjZUlOU1RBTkNFfSB3aGVuIHRoYXQgZmllbGQgaXMgYWNjZXNzZWQuCisJICogQ2xpZW50cyBzaG91bGQgbm90IGludm9rZSBpdCBkaXJlY3RseS4gSW5zdGVhZCwgdGhleSBzaG91bGQgc2ltcGx5IGFjY2VzcyB0aGF0IGZpZWxkIHRvIG9idGFpbiB0aGUgcGFja2FnZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI2VOU19VUkkKKwkgKiBAc2VlICNjcmVhdGVQYWNrYWdlQ29udGVudHMoKQorCSAqIEBzZWUgI2luaXRpYWxpemVQYWNrYWdlQ29udGVudHMoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgc3RhdGljIEV4YW1wbGVQYWNrYWdlIGluaXQoKSB7CisJCWlmIChpc0luaXRlZCkgcmV0dXJuIChFeGFtcGxlUGFja2FnZSlFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShFeGFtcGxlUGFja2FnZS5lTlNfVVJJKTsKKworCQkvLyBPYnRhaW4gb3IgY3JlYXRlIGFuZCByZWdpc3RlciBwYWNrYWdlCisJCUV4YW1wbGVQYWNrYWdlSW1wbCB0aGVFeGFtcGxlUGFja2FnZSA9IChFeGFtcGxlUGFja2FnZUltcGwpKEVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldChlTlNfVVJJKSBpbnN0YW5jZW9mIEV4YW1wbGVQYWNrYWdlSW1wbCA/IEVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldChlTlNfVVJJKSA6IG5ldyBFeGFtcGxlUGFja2FnZUltcGwoKSk7CisKKwkJaXNJbml0ZWQgPSB0cnVlOworCisJCS8vIEluaXRpYWxpemUgc2ltcGxlIGRlcGVuZGVuY2llcworCQlTdGFuZGFyZFBhY2thZ2UuZUlOU1RBTkNFLmVDbGFzcygpOworCQlMb2dnZXJQYWNrYWdlLmVJTlNUQU5DRS5lQ2xhc3MoKTsKKworCQkvLyBDcmVhdGUgcGFja2FnZSBtZXRhLWRhdGEgb2JqZWN0cworCQl0aGVFeGFtcGxlUGFja2FnZS5jcmVhdGVQYWNrYWdlQ29udGVudHMoKTsKKworCQkvLyBJbml0aWFsaXplIGNyZWF0ZWQgbWV0YS1kYXRhCisJCXRoZUV4YW1wbGVQYWNrYWdlLmluaXRpYWxpemVQYWNrYWdlQ29udGVudHMoKTsKKworCQkvLyBNYXJrIG1ldGEtZGF0YSB0byBpbmRpY2F0ZSBpdCBjYW4ndCBiZSBjaGFuZ2VkCisJCXRoZUV4YW1wbGVQYWNrYWdlLmZyZWV6ZSgpOworCisgIAorCQkvLyBVcGRhdGUgdGhlIHJlZ2lzdHJ5IGFuZCByZXR1cm4gdGhlIHBhY2thZ2UKKwkJRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UucHV0KEV4YW1wbGVQYWNrYWdlLmVOU19VUkksIHRoZUV4YW1wbGVQYWNrYWdlKTsKKwkJcmV0dXJuIHRoZUV4YW1wbGVQYWNrYWdlOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQ2xhc3MgZ2V0RXhhbXBsZURpc2Vhc2VNb2RlbCgpIHsKKwkJcmV0dXJuIGV4YW1wbGVEaXNlYXNlTW9kZWxFQ2xhc3M7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVBdHRyaWJ1dGUgZ2V0RXhhbXBsZURpc2Vhc2VNb2RlbF9TZWFzb25hbE1vZHVsYXRpb25FeHBvbmVudCgpIHsKKwkJcmV0dXJuIChFQXR0cmlidXRlKWV4YW1wbGVEaXNlYXNlTW9kZWxFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgwKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUF0dHJpYnV0ZSBnZXRFeGFtcGxlRGlzZWFzZU1vZGVsX01vZHVsYXRpb25QZXJpb2QoKSB7CisJCXJldHVybiAoRUF0dHJpYnV0ZSlleGFtcGxlRGlzZWFzZU1vZGVsRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVBdHRyaWJ1dGUgZ2V0RXhhbXBsZURpc2Vhc2VNb2RlbF9Nb2R1bGF0aW9uUGhhc2VTaGlmdCgpIHsKKwkJcmV0dXJuIChFQXR0cmlidXRlKWV4YW1wbGVEaXNlYXNlTW9kZWxFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgyKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUF0dHJpYnV0ZSBnZXRFeGFtcGxlRGlzZWFzZU1vZGVsX1NlYXNvbmFsTW9kdWxhdGlvbkZsb29yKCkgeworCQlyZXR1cm4gKEVBdHRyaWJ1dGUpZXhhbXBsZURpc2Vhc2VNb2RlbEVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDMpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFeGFtcGxlRmFjdG9yeSBnZXRFeGFtcGxlRmFjdG9yeSgpIHsKKwkJcmV0dXJuIChFeGFtcGxlRmFjdG9yeSlnZXRFRmFjdG9yeUluc3RhbmNlKCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJpdmF0ZSBib29sZWFuIGlzQ3JlYXRlZCA9IGZhbHNlOworCisJLyoqCisJICogQ3JlYXRlcyB0aGUgbWV0YS1tb2RlbCBvYmplY3RzIGZvciB0aGUgcGFja2FnZS4gIFRoaXMgbWV0aG9kIGlzCisJICogZ3VhcmRlZCB0byBoYXZlIG5vIGFmZmVjdCBvbiBhbnkgaW52b2NhdGlvbiBidXQgaXRzIGZpcnN0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIGNyZWF0ZVBhY2thZ2VDb250ZW50cygpIHsKKwkJaWYgKGlzQ3JlYXRlZCkgcmV0dXJuOworCQlpc0NyZWF0ZWQgPSB0cnVlOworCisJCS8vIENyZWF0ZSBjbGFzc2VzIGFuZCB0aGVpciBmZWF0dXJlcworCQlleGFtcGxlRGlzZWFzZU1vZGVsRUNsYXNzID0gY3JlYXRlRUNsYXNzKEVYQU1QTEVfRElTRUFTRV9NT0RFTCk7CisJCWNyZWF0ZUVBdHRyaWJ1dGUoZXhhbXBsZURpc2Vhc2VNb2RlbEVDbGFzcywgRVhBTVBMRV9ESVNFQVNFX01PREVMX19TRUFTT05BTF9NT0RVTEFUSU9OX0VYUE9ORU5UKTsKKwkJY3JlYXRlRUF0dHJpYnV0ZShleGFtcGxlRGlzZWFzZU1vZGVsRUNsYXNzLCBFWEFNUExFX0RJU0VBU0VfTU9ERUxfX01PRFVMQVRJT05fUEVSSU9EKTsKKwkJY3JlYXRlRUF0dHJpYnV0ZShleGFtcGxlRGlzZWFzZU1vZGVsRUNsYXNzLCBFWEFNUExFX0RJU0VBU0VfTU9ERUxfX01PRFVMQVRJT05fUEhBU0VfU0hJRlQpOworCQljcmVhdGVFQXR0cmlidXRlKGV4YW1wbGVEaXNlYXNlTW9kZWxFQ2xhc3MsIEVYQU1QTEVfRElTRUFTRV9NT0RFTF9fU0VBU09OQUxfTU9EVUxBVElPTl9GTE9PUik7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJpdmF0ZSBib29sZWFuIGlzSW5pdGlhbGl6ZWQgPSBmYWxzZTsKKworCS8qKgorCSAqIENvbXBsZXRlIHRoZSBpbml0aWFsaXphdGlvbiBvZiB0aGUgcGFja2FnZSBhbmQgaXRzIG1ldGEtbW9kZWwuICBUaGlzCisJICogbWV0aG9kIGlzIGd1YXJkZWQgdG8gaGF2ZSBubyBhZmZlY3Qgb24gYW55IGludm9jYXRpb24gYnV0IGl0cyBmaXJzdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBpbml0aWFsaXplUGFja2FnZUNvbnRlbnRzKCkgeworCQlpZiAoaXNJbml0aWFsaXplZCkgcmV0dXJuOworCQlpc0luaXRpYWxpemVkID0gdHJ1ZTsKKworCQkvLyBJbml0aWFsaXplIHBhY2thZ2UKKwkJc2V0TmFtZShlTkFNRSk7CisJCXNldE5zUHJlZml4KGVOU19QUkVGSVgpOworCQlzZXROc1VSSShlTlNfVVJJKTsKKworCQkvLyBPYnRhaW4gb3RoZXIgZGVwZW5kZW50IHBhY2thZ2VzCisJCVN0YW5kYXJkUGFja2FnZSB0aGVTdGFuZGFyZFBhY2thZ2UgPSAoU3RhbmRhcmRQYWNrYWdlKUVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVQYWNrYWdlKFN0YW5kYXJkUGFja2FnZS5lTlNfVVJJKTsKKwkJRWNvcmVQYWNrYWdlIHRoZUVjb3JlUGFja2FnZSA9IChFY29yZVBhY2thZ2UpRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RVBhY2thZ2UoRWNvcmVQYWNrYWdlLmVOU19VUkkpOworCisJCS8vIENyZWF0ZSB0eXBlIHBhcmFtZXRlcnMKKworCQkvLyBTZXQgYm91bmRzIGZvciB0eXBlIHBhcmFtZXRlcnMKKworCQkvLyBBZGQgc3VwZXJ0eXBlcyB0byBjbGFzc2VzCisJCWV4YW1wbGVEaXNlYXNlTW9kZWxFQ2xhc3MuZ2V0RVN1cGVyVHlwZXMoKS5hZGQodGhlU3RhbmRhcmRQYWNrYWdlLmdldFN0b2NoYXN0aWNTSVJEaXNlYXNlTW9kZWwoKSk7CisKKwkJLy8gSW5pdGlhbGl6ZSBjbGFzc2VzIGFuZCBmZWF0dXJlczsgYWRkIG9wZXJhdGlvbnMgYW5kIHBhcmFtZXRlcnMKKwkJaW5pdEVDbGFzcyhleGFtcGxlRGlzZWFzZU1vZGVsRUNsYXNzLCBFeGFtcGxlRGlzZWFzZU1vZGVsLmNsYXNzLCAiRXhhbXBsZURpc2Vhc2VNb2RlbCIsICFJU19BQlNUUkFDVCwgIUlTX0lOVEVSRkFDRSwgSVNfR0VORVJBVEVEX0lOU1RBTkNFX0NMQVNTKTsgLy8kTk9OLU5MUy0xJAorCQlpbml0RUF0dHJpYnV0ZShnZXRFeGFtcGxlRGlzZWFzZU1vZGVsX1NlYXNvbmFsTW9kdWxhdGlvbkV4cG9uZW50KCksIHRoZUVjb3JlUGFja2FnZS5nZXRFRG91YmxlKCksICJzZWFzb25hbE1vZHVsYXRpb25FeHBvbmVudCIsICIyLjAiLCAwLCAxLCBFeGFtcGxlRGlzZWFzZU1vZGVsLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKKwkJaW5pdEVBdHRyaWJ1dGUoZ2V0RXhhbXBsZURpc2Vhc2VNb2RlbF9Nb2R1bGF0aW9uUGVyaW9kKCksIGVjb3JlUGFja2FnZS5nZXRFRG91YmxlKCksICJtb2R1bGF0aW9uUGVyaW9kIiwgIjM2NS4yNTYzNjMwNTEiLCAwLCAxLCBFeGFtcGxlRGlzZWFzZU1vZGVsLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKKwkJaW5pdEVBdHRyaWJ1dGUoZ2V0RXhhbXBsZURpc2Vhc2VNb2RlbF9Nb2R1bGF0aW9uUGhhc2VTaGlmdCgpLCBlY29yZVBhY2thZ2UuZ2V0RURvdWJsZSgpLCAibW9kdWxhdGlvblBoYXNlU2hpZnQiLCAiMC4wIiwgMCwgMSwgRXhhbXBsZURpc2Vhc2VNb2RlbC5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCisJCWluaXRFQXR0cmlidXRlKGdldEV4YW1wbGVEaXNlYXNlTW9kZWxfU2Vhc29uYWxNb2R1bGF0aW9uRmxvb3IoKSwgdGhlRWNvcmVQYWNrYWdlLmdldEVEb3VibGUoKSwgInNlYXNvbmFsTW9kdWxhdGlvbkZsb29yIiwgIjAuNiIsIDAsIDEsIEV4YW1wbGVEaXNlYXNlTW9kZWwuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAorCisJCS8vIENyZWF0ZSByZXNvdXJjZQorCQljcmVhdGVSZXNvdXJjZShlTlNfVVJJKTsKKwl9CisKK30gLy9FeGFtcGxlUGFja2FnZUltcGwKZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4YW1wbGUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9leGFtcGxlL3Byb3ZpZGVyL0V4YW1wbGVEaXNlYXNlTW9kZWxJdGVtUHJvdmlkZXIuamF2YSBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4YW1wbGUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9leGFtcGxlL3Byb3ZpZGVyL0V4YW1wbGVEaXNlYXNlTW9kZWxJdGVtUHJvdmlkZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNTBmYTI3Ci0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXhhbXBsZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL2V4YW1wbGUvcHJvdmlkZXIvRXhhbXBsZURpc2Vhc2VNb2RlbEl0ZW1Qcm92aWRlci5qYXZhCkBAIC0wLDAgKzEsMjQ2IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leGFtcGxlLnByb3ZpZGVyOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA5IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCitpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5BZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlJlc291cmNlTG9jYXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5Db21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklFZGl0aW5nRG9tYWluSXRlbVByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtTGFiZWxQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbVByb3BlcnR5RGVzY3JpcHRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbVByb3BlcnR5U291cmNlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklTdHJ1Y3R1cmVkSXRlbUNvbnRlbnRQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JVHJlZUl0ZW1Db250ZW50UHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSXRlbVByb3BlcnR5RGVzY3JpcHRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5WaWV3ZXJOb3RpZmljYXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4YW1wbGUuRXhhbXBsZURpc2Vhc2VNb2RlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXhhbXBsZS5FeGFtcGxlUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQucHJvdmlkZXIuU3RvY2hhc3RpY1NJUkRpc2Vhc2VNb2RlbEl0ZW1Qcm92aWRlcjsKKworLyoqCisgKiBUaGlzIGlzIHRoZSBpdGVtIHByb3ZpZGVyIGFkYXB0ZXIgZm9yIGEge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leGFtcGxlLkV4YW1wbGVEaXNlYXNlTW9kZWx9IG9iamVjdC4KKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIEV4YW1wbGVEaXNlYXNlTW9kZWxJdGVtUHJvdmlkZXIKKwlleHRlbmRzIFN0b2NoYXN0aWNTSVJEaXNlYXNlTW9kZWxJdGVtUHJvdmlkZXIKKwlpbXBsZW1lbnRzCisJCUlFZGl0aW5nRG9tYWluSXRlbVByb3ZpZGVyLAorCQlJU3RydWN0dXJlZEl0ZW1Db250ZW50UHJvdmlkZXIsCisJCUlUcmVlSXRlbUNvbnRlbnRQcm92aWRlciwKKwkJSUl0ZW1MYWJlbFByb3ZpZGVyLAorCQlJSXRlbVByb3BlcnR5U291cmNlIHsKKwkvKioKKwkgKiBUaGlzIGNvbnN0cnVjdHMgYW4gaW5zdGFuY2UgZnJvbSBhIGZhY3RvcnkgYW5kIGEgbm90aWZpZXIuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEV4YW1wbGVEaXNlYXNlTW9kZWxJdGVtUHJvdmlkZXIoQWRhcHRlckZhY3RvcnkgYWRhcHRlckZhY3RvcnkpIHsKKwkJc3VwZXIoYWRhcHRlckZhY3RvcnkpOworCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyB0aGUgcHJvcGVydHkgZGVzY3JpcHRvcnMgZm9yIHRoZSBhZGFwdGVkIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBMaXN0PElJdGVtUHJvcGVydHlEZXNjcmlwdG9yPiBnZXRQcm9wZXJ0eURlc2NyaXB0b3JzKE9iamVjdCBvYmplY3QpIHsKKwkJaWYgKGl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzID09IG51bGwpIHsKKwkJCXN1cGVyLmdldFByb3BlcnR5RGVzY3JpcHRvcnMob2JqZWN0KTsKKworCQkJYWRkU2Vhc29uYWxNb2R1bGF0aW9uRXhwb25lbnRQcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0KTsKKwkJCWFkZE1vZHVsYXRpb25QZXJpb2RQcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0KTsKKwkJCWFkZE1vZHVsYXRpb25QaGFzZVNoaWZ0UHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCk7CisJCQlhZGRTZWFzb25hbE1vZHVsYXRpb25GbG9vclByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QpOworCQl9CisJCXJldHVybiBpdGVtUHJvcGVydHlEZXNjcmlwdG9yczsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFkZHMgYSBwcm9wZXJ0eSBkZXNjcmlwdG9yIGZvciB0aGUgU2Vhc29uYWwgTW9kdWxhdGlvbiBFeHBvbmVudCBmZWF0dXJlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIGFkZFNlYXNvbmFsTW9kdWxhdGlvbkV4cG9uZW50UHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdCBvYmplY3QpIHsKKwkJaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMuYWRkCisJCQkoY3JlYXRlSXRlbVByb3BlcnR5RGVzY3JpcHRvcgorCQkJCSgoKENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnkpYWRhcHRlckZhY3RvcnkpLmdldFJvb3RBZGFwdGVyRmFjdG9yeSgpLAorCQkJCSBnZXRSZXNvdXJjZUxvY2F0b3IoKSwKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfRXhhbXBsZURpc2Vhc2VNb2RlbF9zZWFzb25hbE1vZHVsYXRpb25FeHBvbmVudF9mZWF0dXJlIiksIC8vJE5PTi1OTFMtMSQKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfUHJvcGVydHlEZXNjcmlwdG9yX2Rlc2NyaXB0aW9uIiwgIl9VSV9FeGFtcGxlRGlzZWFzZU1vZGVsX3NlYXNvbmFsTW9kdWxhdGlvbkV4cG9uZW50X2ZlYXR1cmUiLCAiX1VJX0V4YW1wbGVEaXNlYXNlTW9kZWxfdHlwZSIpLCAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQgLy8kTk9OLU5MUy0zJAorCQkJCSBFeGFtcGxlUGFja2FnZS5MaXRlcmFscy5FWEFNUExFX0RJU0VBU0VfTU9ERUxfX1NFQVNPTkFMX01PRFVMQVRJT05fRVhQT05FTlQsCisJCQkJIHRydWUsCisJCQkJIGZhbHNlLAorCQkJCSBmYWxzZSwKKwkJCQkgSXRlbVByb3BlcnR5RGVzY3JpcHRvci5SRUFMX1ZBTFVFX0lNQUdFLAorCQkJCSBudWxsLAorCQkJCSBudWxsKSk7CisJfQorCisJLyoqCisJICogVGhpcyBhZGRzIGEgcHJvcGVydHkgZGVzY3JpcHRvciBmb3IgdGhlIE1vZHVsYXRpb24gUGVyaW9kIGZlYXR1cmUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgYWRkTW9kdWxhdGlvblBlcmlvZFByb3BlcnR5RGVzY3JpcHRvcihPYmplY3Qgb2JqZWN0KSB7CisJCWl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzLmFkZAorCQkJKGNyZWF0ZUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IKKwkJCQkoKChDb21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5KWFkYXB0ZXJGYWN0b3J5KS5nZXRSb290QWRhcHRlckZhY3RvcnkoKSwKKwkJCQkgZ2V0UmVzb3VyY2VMb2NhdG9yKCksCisJCQkJIGdldFN0cmluZygiX1VJX0V4YW1wbGVEaXNlYXNlTW9kZWxfbW9kdWxhdGlvblBlcmlvZF9mZWF0dXJlIiksIC8vJE5PTi1OTFMtMSQKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfUHJvcGVydHlEZXNjcmlwdG9yX2Rlc2NyaXB0aW9uIiwgIl9VSV9FeGFtcGxlRGlzZWFzZU1vZGVsX21vZHVsYXRpb25QZXJpb2RfZmVhdHVyZSIsICJfVUlfRXhhbXBsZURpc2Vhc2VNb2RlbF90eXBlIiksIC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJCAvLyROT04tTkxTLTMkCisJCQkJIEV4YW1wbGVQYWNrYWdlLkxpdGVyYWxzLkVYQU1QTEVfRElTRUFTRV9NT0RFTF9fTU9EVUxBVElPTl9QRVJJT0QsCisJCQkJIHRydWUsCisJCQkJIGZhbHNlLAorCQkJCSBmYWxzZSwKKwkJCQkgSXRlbVByb3BlcnR5RGVzY3JpcHRvci5SRUFMX1ZBTFVFX0lNQUdFLAorCQkJCSBudWxsLAorCQkJCSBudWxsKSk7CisJfQorCisJLyoqCisJICogVGhpcyBhZGRzIGEgcHJvcGVydHkgZGVzY3JpcHRvciBmb3IgdGhlIE1vZHVsYXRpb24gUGhhc2UgU2hpZnQgZmVhdHVyZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBhZGRNb2R1bGF0aW9uUGhhc2VTaGlmdFByb3BlcnR5RGVzY3JpcHRvcihPYmplY3Qgb2JqZWN0KSB7CisJCWl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzLmFkZAorCQkJKGNyZWF0ZUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IKKwkJCQkoKChDb21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5KWFkYXB0ZXJGYWN0b3J5KS5nZXRSb290QWRhcHRlckZhY3RvcnkoKSwKKwkJCQkgZ2V0UmVzb3VyY2VMb2NhdG9yKCksCisJCQkJIGdldFN0cmluZygiX1VJX0V4YW1wbGVEaXNlYXNlTW9kZWxfbW9kdWxhdGlvblBoYXNlU2hpZnRfZmVhdHVyZSIpLCAvLyROT04tTkxTLTEkCisJCQkJIGdldFN0cmluZygiX1VJX1Byb3BlcnR5RGVzY3JpcHRvcl9kZXNjcmlwdGlvbiIsICJfVUlfRXhhbXBsZURpc2Vhc2VNb2RlbF9tb2R1bGF0aW9uUGhhc2VTaGlmdF9mZWF0dXJlIiwgIl9VSV9FeGFtcGxlRGlzZWFzZU1vZGVsX3R5cGUiKSwgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkIC8vJE5PTi1OTFMtMyQKKwkJCQkgRXhhbXBsZVBhY2thZ2UuTGl0ZXJhbHMuRVhBTVBMRV9ESVNFQVNFX01PREVMX19NT0RVTEFUSU9OX1BIQVNFX1NISUZULAorCQkJCSB0cnVlLAorCQkJCSBmYWxzZSwKKwkJCQkgZmFsc2UsCisJCQkJIEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IuUkVBTF9WQUxVRV9JTUFHRSwKKwkJCQkgbnVsbCwKKwkJCQkgbnVsbCkpOworCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyBhIHByb3BlcnR5IGRlc2NyaXB0b3IgZm9yIHRoZSBTZWFzb25hbCBNb2R1bGF0aW9uIEZsb29yIGZlYXR1cmUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgYWRkU2Vhc29uYWxNb2R1bGF0aW9uRmxvb3JQcm9wZXJ0eURlc2NyaXB0b3IoT2JqZWN0IG9iamVjdCkgeworCQlpdGVtUHJvcGVydHlEZXNjcmlwdG9ycy5hZGQKKwkJCShjcmVhdGVJdGVtUHJvcGVydHlEZXNjcmlwdG9yCisJCQkJKCgoQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSlhZGFwdGVyRmFjdG9yeSkuZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCksCisJCQkJIGdldFJlc291cmNlTG9jYXRvcigpLAorCQkJCSBnZXRTdHJpbmcoIl9VSV9FeGFtcGxlRGlzZWFzZU1vZGVsX3NlYXNvbmFsTW9kdWxhdGlvbkZsb29yX2ZlYXR1cmUiKSwgLy8kTk9OLU5MUy0xJAorCQkJCSBnZXRTdHJpbmcoIl9VSV9Qcm9wZXJ0eURlc2NyaXB0b3JfZGVzY3JpcHRpb24iLCAiX1VJX0V4YW1wbGVEaXNlYXNlTW9kZWxfc2Vhc29uYWxNb2R1bGF0aW9uRmxvb3JfZmVhdHVyZSIsICJfVUlfRXhhbXBsZURpc2Vhc2VNb2RlbF90eXBlIiksIC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJCAvLyROT04tTkxTLTMkCisJCQkJIEV4YW1wbGVQYWNrYWdlLkxpdGVyYWxzLkVYQU1QTEVfRElTRUFTRV9NT0RFTF9fU0VBU09OQUxfTU9EVUxBVElPTl9GTE9PUiwKKwkJCQkgdHJ1ZSwKKwkJCQkgZmFsc2UsCisJCQkJIGZhbHNlLAorCQkJCSBJdGVtUHJvcGVydHlEZXNjcmlwdG9yLlJFQUxfVkFMVUVfSU1BR0UsCisJCQkJIG51bGwsCisJCQkJIG51bGwpKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgRXhhbXBsZURpc2Vhc2VNb2RlbC5naWYuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIE9iamVjdCBnZXRJbWFnZShPYmplY3Qgb2JqZWN0KSB7CisJCXJldHVybiBvdmVybGF5SW1hZ2Uob2JqZWN0LCBnZXRSZXNvdXJjZUxvY2F0b3IoKS5nZXRJbWFnZSgiZnVsbC9vYmoxNi9FeGFtcGxlRGlzZWFzZU1vZGVsIikpOyAvLyROT04tTkxTLTEkCisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIHRoZSBsYWJlbCB0ZXh0IGZvciB0aGUgYWRhcHRlZCBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIFN0cmluZyBnZXRUZXh0KE9iamVjdCBvYmplY3QpIHsKKwkJcmV0dXJuIHN1cGVyLmdldFRleHQob2JqZWN0KTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgdGhlIGxhYmVsIHRleHQgZm9yIHRoZSBhZGFwdGVkIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBTdHJpbmcgZ2V0VGV4dEdlbihPYmplY3Qgb2JqZWN0KSB7CisJCVN0cmluZyBsYWJlbCA9ICgoRXhhbXBsZURpc2Vhc2VNb2RlbClvYmplY3QpLmdldERpc2Vhc2VOYW1lKCk7CisJCXJldHVybiBsYWJlbCA9PSBudWxsIHx8IGxhYmVsLmxlbmd0aCgpID09IDAgPworCQkJZ2V0U3RyaW5nKCJfVUlfRXhhbXBsZURpc2Vhc2VNb2RlbF90eXBlIikgOiAvLyROT04tTkxTLTEkCisJCQlnZXRTdHJpbmcoIl9VSV9FeGFtcGxlRGlzZWFzZU1vZGVsX3R5cGUiKSArICIgIiArIGxhYmVsOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKKwl9CisJCisJLyoqCisJICogVGhpcyBoYW5kbGVzIG1vZGVsIG5vdGlmaWNhdGlvbnMgYnkgY2FsbGluZyB7QGxpbmsgI3VwZGF0ZUNoaWxkcmVufSB0byB1cGRhdGUgYW55IGNhY2hlZAorCSAqIGNoaWxkcmVuIGFuZCBieSBjcmVhdGluZyBhIHZpZXdlciBub3RpZmljYXRpb24sIHdoaWNoIGl0IHBhc3NlcyB0byB7QGxpbmsgI2ZpcmVOb3RpZnlDaGFuZ2VkfS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBub3RpZnlDaGFuZ2VkKE5vdGlmaWNhdGlvbiBub3RpZmljYXRpb24pIHsKKwkJdXBkYXRlQ2hpbGRyZW4obm90aWZpY2F0aW9uKTsKKworCQlzd2l0Y2ggKG5vdGlmaWNhdGlvbi5nZXRGZWF0dXJlSUQoRXhhbXBsZURpc2Vhc2VNb2RlbC5jbGFzcykpIHsKKwkJCWNhc2UgRXhhbXBsZVBhY2thZ2UuRVhBTVBMRV9ESVNFQVNFX01PREVMX19TRUFTT05BTF9NT0RVTEFUSU9OX0VYUE9ORU5UOgorCQkJY2FzZSBFeGFtcGxlUGFja2FnZS5FWEFNUExFX0RJU0VBU0VfTU9ERUxfX01PRFVMQVRJT05fUEVSSU9EOgorCQkJY2FzZSBFeGFtcGxlUGFja2FnZS5FWEFNUExFX0RJU0VBU0VfTU9ERUxfX01PRFVMQVRJT05fUEhBU0VfU0hJRlQ6CisJCQljYXNlIEV4YW1wbGVQYWNrYWdlLkVYQU1QTEVfRElTRUFTRV9NT0RFTF9fU0VBU09OQUxfTU9EVUxBVElPTl9GTE9PUjoKKwkJCQlmaXJlTm90aWZ5Q2hhbmdlZChuZXcgVmlld2VyTm90aWZpY2F0aW9uKG5vdGlmaWNhdGlvbiwgbm90aWZpY2F0aW9uLmdldE5vdGlmaWVyKCksIGZhbHNlLCB0cnVlKSk7CisJCQkJcmV0dXJuOworCQl9CisJCXN1cGVyLm5vdGlmeUNoYW5nZWQobm90aWZpY2F0aW9uKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFkZHMge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lZGl0LmNvbW1hbmQuQ29tbWFuZFBhcmFtZXRlcn1zIGRlc2NyaWJpbmcgdGhlIGNoaWxkcmVuCisJICogdGhhdCBjYW4gYmUgY3JlYXRlZCB1bmRlciB0aGlzIG9iamVjdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgdm9pZCBjb2xsZWN0TmV3Q2hpbGREZXNjcmlwdG9ycyhDb2xsZWN0aW9uPE9iamVjdD4gbmV3Q2hpbGREZXNjcmlwdG9ycywgT2JqZWN0IG9iamVjdCkgeworCQlzdXBlci5jb2xsZWN0TmV3Q2hpbGREZXNjcmlwdG9ycyhuZXdDaGlsZERlc2NyaXB0b3JzLCBvYmplY3QpOworCX0KKworCS8qKgorCSAqIFJldHVybiB0aGUgcmVzb3VyY2UgbG9jYXRvciBmb3IgdGhpcyBpdGVtIHByb3ZpZGVyJ3MgcmVzb3VyY2VzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBSZXNvdXJjZUxvY2F0b3IgZ2V0UmVzb3VyY2VMb2NhdG9yKCkgeworCQlyZXR1cm4gRXhhbXBsZUVkaXRQbHVnaW4uSU5TVEFOQ0U7CisJfQorCit9CmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leGFtcGxlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvZXhhbXBsZS9wcm92aWRlci9FeGFtcGxlRWRpdFBsdWdpbi5qYXZhIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXhhbXBsZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL2V4YW1wbGUvcHJvdmlkZXIvRXhhbXBsZUVkaXRQbHVnaW4uamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZmUwNDQ5Ci0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXhhbXBsZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL2V4YW1wbGUvcHJvdmlkZXIvRXhhbXBsZUVkaXRQbHVnaW4uamF2YQpAQCAtMCwwICsxLDEwNSBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXhhbXBsZS5wcm92aWRlcjsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLkVNRlBsdWdpbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuUmVzb3VyY2VMb2NhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24ucHJvdmlkZXIuQ29yZUVkaXRQbHVnaW47CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5lZGdlcy5wcm92aWRlci5EZWZpbml0aW9uc0VkaXRQbHVnaW47CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLnByb3ZpZGVyLkRpc2Vhc2Vtb2RlbHNFZGl0UGx1Z2luOworCisvKioKKyAqIFRoaXMgaXMgdGhlIGNlbnRyYWwgc2luZ2xldG9uIGZvciB0aGUgRXhhbXBsZSBlZGl0IHBsdWdpbi4KKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGZpbmFsIGNsYXNzIEV4YW1wbGVFZGl0UGx1Z2luIGV4dGVuZHMgRU1GUGx1Z2luIHsKKwkvKioKKwkgKiBLZWVwIHRyYWNrIG9mIHRoZSBzaW5nbGV0b24uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBFeGFtcGxlRWRpdFBsdWdpbiBJTlNUQU5DRSA9IG5ldyBFeGFtcGxlRWRpdFBsdWdpbigpOworCQorCS8qKgorCSAqIEtlZXAgdHJhY2sgb2YgdGhlIHNpbmdsZXRvbi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcml2YXRlIHN0YXRpYyBJbXBsZW1lbnRhdGlvbiBwbHVnaW47CisKKwkvKioKKwkgKiBDcmVhdGUgdGhlIGluc3RhbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlwdWJsaWMgRXhhbXBsZUVkaXRQbHVnaW4oKSB7CisJCXN1cGVyCisJCQkobmV3IFJlc291cmNlTG9jYXRvciBbXSB7CisJCQkJRGlzZWFzZW1vZGVsc0VkaXRQbHVnaW4uSU5TVEFOQ0UsCisJCQkJQ29yZUVkaXRQbHVnaW4uSU5TVEFOQ0UsCisJCQkJLy9FY29yZUVkaXRQbHVnaW4uSU5TVEFOQ0UsCisJCQkJRGVmaW5pdGlvbnNFZGl0UGx1Z2luLklOU1RBTkNFLAorCQkJfSk7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgc2luZ2xldG9uIGluc3RhbmNlIG9mIHRoZSBFY2xpcHNlIHBsdWdpbi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIHNpbmdsZXRvbiBpbnN0YW5jZS4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIFJlc291cmNlTG9jYXRvciBnZXRQbHVnaW5SZXNvdXJjZUxvY2F0b3IoKSB7CisJCXJldHVybiBwbHVnaW47CisJfQorCQorCS8qKgorCSAqIFJldHVybnMgdGhlIHNpbmdsZXRvbiBpbnN0YW5jZSBvZiB0aGUgRWNsaXBzZSBwbHVnaW4uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBzaW5nbGV0b24gaW5zdGFuY2UuCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBzdGF0aWMgSW1wbGVtZW50YXRpb24gZ2V0UGx1Z2luKCkgeworCQlyZXR1cm4gcGx1Z2luOworCX0KKwkKKwkvKioKKwkgKiBUaGUgYWN0dWFsIGltcGxlbWVudGF0aW9uIG9mIHRoZSBFY2xpcHNlIDxiPlBsdWdpbjwvYj4uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHN0YXRpYyBjbGFzcyBJbXBsZW1lbnRhdGlvbiBleHRlbmRzIEVjbGlwc2VQbHVnaW4geworCQkvKioKKwkJICogQ3JlYXRlcyBhbiBpbnN0YW5jZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUBTdXBwcmVzc1dhcm5pbmdzKCJzeW50aGV0aWMtYWNjZXNzIikKKwkJcHVibGljIEltcGxlbWVudGF0aW9uKCkgeworCQkJc3VwZXIoKTsKKworCQkJLy8gUmVtZW1iZXIgdGhlIHN0YXRpYyBpbnN0YW5jZS4KKwkJCS8vCisJCQlwbHVnaW4gPSB0aGlzOworCQl9CisJfQorCit9CmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leGFtcGxlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvZXhhbXBsZS9wcm92aWRlci9FeGFtcGxlSXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkuamF2YSBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4YW1wbGUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9leGFtcGxlL3Byb3ZpZGVyL0V4YW1wbGVJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkzMDg3ZjEKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leGFtcGxlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvZXhhbXBsZS9wcm92aWRlci9FeGFtcGxlSXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkuamF2YQpAQCAtMCwwICsxLDIwNiBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXhhbXBsZS5wcm92aWRlcjsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OworaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuQWRhcHRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuQ2hhbmdlTm90aWZpZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5Db21wb3NlZEFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklDaGFuZ2VOb3RpZmllcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JRGlzcG9zYWJsZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JRWRpdGluZ0RvbWFpbkl0ZW1Qcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbUxhYmVsUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1Qcm9wZXJ0eVNvdXJjZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JTm90aWZ5Q2hhbmdlZExpc3RlbmVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklTdHJ1Y3R1cmVkSXRlbUNvbnRlbnRQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JVHJlZUl0ZW1Db250ZW50UHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4YW1wbGUudXRpbC5FeGFtcGxlQWRhcHRlckZhY3Rvcnk7CisKKy8qKgorICogVGhpcyBpcyB0aGUgZmFjdG9yeSB0aGF0IGlzIHVzZWQgdG8gcHJvdmlkZSB0aGUgaW50ZXJmYWNlcyBuZWVkZWQgdG8gc3VwcG9ydCBWaWV3ZXJzLgorICogVGhlIGFkYXB0ZXJzIGdlbmVyYXRlZCBieSB0aGlzIGZhY3RvcnkgY29udmVydCBFTUYgYWRhcHRlciBub3RpZmljYXRpb25zIGludG8gY2FsbHMgdG8ge0BsaW5rICNmaXJlTm90aWZ5Q2hhbmdlZCBmaXJlTm90aWZ5Q2hhbmdlZH0uCisgKiBUaGUgYWRhcHRlcnMgYWxzbyBzdXBwb3J0IEVjbGlwc2UgcHJvcGVydHkgc2hlZXRzLgorICogTm90ZSB0aGF0IG1vc3Qgb2YgdGhlIGFkYXB0ZXJzIGFyZSBzaGFyZWQgYW1vbmcgbXVsdGlwbGUgaW5zdGFuY2VzLgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgRXhhbXBsZUl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5IGV4dGVuZHMgRXhhbXBsZUFkYXB0ZXJGYWN0b3J5IGltcGxlbWVudHMgQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSwgSUNoYW5nZU5vdGlmaWVyLCBJRGlzcG9zYWJsZSB7CisJLyoqCisJICogVGhpcyBrZWVwcyB0cmFjayBvZiB0aGUgcm9vdCBhZGFwdGVyIGZhY3RvcnkgdGhhdCBkZWxlZ2F0ZXMgdG8gdGhpcyBhZGFwdGVyIGZhY3RvcnkuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIENvbXBvc2VkQWRhcHRlckZhY3RvcnkgcGFyZW50QWRhcHRlckZhY3Rvcnk7CisKKwkvKioKKwkgKiBUaGlzIGlzIHVzZWQgdG8gaW1wbGVtZW50IHtAbGluayBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JQ2hhbmdlTm90aWZpZXJ9LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBJQ2hhbmdlTm90aWZpZXIgY2hhbmdlTm90aWZpZXIgPSBuZXcgQ2hhbmdlTm90aWZpZXIoKTsKKworCS8qKgorCSAqIFRoaXMga2VlcHMgdHJhY2sgb2YgYWxsIHRoZSBzdXBwb3J0ZWQgdHlwZXMgY2hlY2tlZCBieSB7QGxpbmsgI2lzRmFjdG9yeUZvclR5cGUgaXNGYWN0b3J5Rm9yVHlwZX0uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIENvbGxlY3Rpb248T2JqZWN0PiBzdXBwb3J0ZWRUeXBlcyA9IG5ldyBBcnJheUxpc3Q8T2JqZWN0PigpOworCisJLyoqCisJICogVGhpcyBjb25zdHJ1Y3RzIGFuIGluc3RhbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFeGFtcGxlSXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkoKSB7CisJCXN1cHBvcnRlZFR5cGVzLmFkZChJRWRpdGluZ0RvbWFpbkl0ZW1Qcm92aWRlci5jbGFzcyk7CisJCXN1cHBvcnRlZFR5cGVzLmFkZChJU3RydWN0dXJlZEl0ZW1Db250ZW50UHJvdmlkZXIuY2xhc3MpOworCQlzdXBwb3J0ZWRUeXBlcy5hZGQoSVRyZWVJdGVtQ29udGVudFByb3ZpZGVyLmNsYXNzKTsKKwkJc3VwcG9ydGVkVHlwZXMuYWRkKElJdGVtTGFiZWxQcm92aWRlci5jbGFzcyk7CisJCXN1cHBvcnRlZFR5cGVzLmFkZChJSXRlbVByb3BlcnR5U291cmNlLmNsYXNzKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGtlZXBzIHRyYWNrIG9mIHRoZSBvbmUgYWRhcHRlciB1c2VkIGZvciBhbGwge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leGFtcGxlLkV4YW1wbGVEaXNlYXNlTW9kZWx9IGluc3RhbmNlcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgRXhhbXBsZURpc2Vhc2VNb2RlbEl0ZW1Qcm92aWRlciBleGFtcGxlRGlzZWFzZU1vZGVsSXRlbVByb3ZpZGVyOworCisJLyoqCisJICogVGhpcyBjcmVhdGVzIGFuIGFkYXB0ZXIgZm9yIGEge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leGFtcGxlLkV4YW1wbGVEaXNlYXNlTW9kZWx9LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZUV4YW1wbGVEaXNlYXNlTW9kZWxBZGFwdGVyKCkgeworCQlpZiAoZXhhbXBsZURpc2Vhc2VNb2RlbEl0ZW1Qcm92aWRlciA9PSBudWxsKSB7CisJCQlleGFtcGxlRGlzZWFzZU1vZGVsSXRlbVByb3ZpZGVyID0gbmV3IEV4YW1wbGVEaXNlYXNlTW9kZWxJdGVtUHJvdmlkZXIodGhpcyk7CisJCX0KKworCQlyZXR1cm4gZXhhbXBsZURpc2Vhc2VNb2RlbEl0ZW1Qcm92aWRlcjsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgdGhlIHJvb3QgYWRhcHRlciBmYWN0b3J5IHRoYXQgY29udGFpbnMgdGhpcyBmYWN0b3J5LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBDb21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5IGdldFJvb3RBZGFwdGVyRmFjdG9yeSgpIHsKKwkJcmV0dXJuIHBhcmVudEFkYXB0ZXJGYWN0b3J5ID09IG51bGwgPyB0aGlzIDogcGFyZW50QWRhcHRlckZhY3RvcnkuZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCk7CisJfQorCisJLyoqCisJICogVGhpcyBzZXRzIHRoZSBjb21wb3NlZCBhZGFwdGVyIGZhY3RvcnkgdGhhdCBjb250YWlucyB0aGlzIGZhY3RvcnkuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgc2V0UGFyZW50QWRhcHRlckZhY3RvcnkoQ29tcG9zZWRBZGFwdGVyRmFjdG9yeSBwYXJlbnRBZGFwdGVyRmFjdG9yeSkgeworCQl0aGlzLnBhcmVudEFkYXB0ZXJGYWN0b3J5ID0gcGFyZW50QWRhcHRlckZhY3Rvcnk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIGJvb2xlYW4gaXNGYWN0b3J5Rm9yVHlwZShPYmplY3QgdHlwZSkgeworCQlyZXR1cm4gc3VwcG9ydGVkVHlwZXMuY29udGFpbnModHlwZSkgfHwgc3VwZXIuaXNGYWN0b3J5Rm9yVHlwZSh0eXBlKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGltcGxlbWVudGF0aW9uIHN1YnN0aXR1dGVzIHRoZSBmYWN0b3J5IGl0c2VsZiBhcyB0aGUga2V5IGZvciB0aGUgYWRhcHRlci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgQWRhcHRlciBhZGFwdChOb3RpZmllciBub3RpZmllciwgT2JqZWN0IHR5cGUpIHsKKwkJcmV0dXJuIHN1cGVyLmFkYXB0KG5vdGlmaWVyLCB0aGlzKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgT2JqZWN0IGFkYXB0KE9iamVjdCBvYmplY3QsIE9iamVjdCB0eXBlKSB7CisJCWlmIChpc0ZhY3RvcnlGb3JUeXBlKHR5cGUpKSB7CisJCQlPYmplY3QgYWRhcHRlciA9IHN1cGVyLmFkYXB0KG9iamVjdCwgdHlwZSk7CisJCQlpZiAoISh0eXBlIGluc3RhbmNlb2YgQ2xhc3M8Pz4pIHx8ICgoKENsYXNzPD8+KXR5cGUpLmlzSW5zdGFuY2UoYWRhcHRlcikpKSB7CisJCQkJcmV0dXJuIGFkYXB0ZXI7CisJCQl9CisJCX0KKworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFkZHMgYSBsaXN0ZW5lci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBhZGRMaXN0ZW5lcihJTm90aWZ5Q2hhbmdlZExpc3RlbmVyIG5vdGlmeUNoYW5nZWRMaXN0ZW5lcikgeworCQljaGFuZ2VOb3RpZmllci5hZGRMaXN0ZW5lcihub3RpZnlDaGFuZ2VkTGlzdGVuZXIpOworCX0KKworCS8qKgorCSAqIFRoaXMgcmVtb3ZlcyBhIGxpc3RlbmVyLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIHJlbW92ZUxpc3RlbmVyKElOb3RpZnlDaGFuZ2VkTGlzdGVuZXIgbm90aWZ5Q2hhbmdlZExpc3RlbmVyKSB7CisJCWNoYW5nZU5vdGlmaWVyLnJlbW92ZUxpc3RlbmVyKG5vdGlmeUNoYW5nZWRMaXN0ZW5lcik7CisJfQorCisJLyoqCisJICogVGhpcyBkZWxlZ2F0ZXMgdG8ge0BsaW5rICNjaGFuZ2VOb3RpZmllcn0gYW5kIHRvIHtAbGluayAjcGFyZW50QWRhcHRlckZhY3Rvcnl9LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIGZpcmVOb3RpZnlDaGFuZ2VkKE5vdGlmaWNhdGlvbiBub3RpZmljYXRpb24pIHsKKwkJY2hhbmdlTm90aWZpZXIuZmlyZU5vdGlmeUNoYW5nZWQobm90aWZpY2F0aW9uKTsKKworCQlpZiAocGFyZW50QWRhcHRlckZhY3RvcnkgIT0gbnVsbCkgeworCQkJcGFyZW50QWRhcHRlckZhY3RvcnkuZmlyZU5vdGlmeUNoYW5nZWQobm90aWZpY2F0aW9uKTsKKwkJfQorCX0KKworCS8qKgorCSAqIFRoaXMgZGlzcG9zZXMgYWxsIG9mIHRoZSBpdGVtIHByb3ZpZGVycyBjcmVhdGVkIGJ5IHRoaXMgZmFjdG9yeS4gCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgZGlzcG9zZSgpIHsKKwkJaWYgKGV4YW1wbGVEaXNlYXNlTW9kZWxJdGVtUHJvdmlkZXIgIT0gbnVsbCkgZXhhbXBsZURpc2Vhc2VNb2RlbEl0ZW1Qcm92aWRlci5kaXNwb3NlKCk7CisJfQorCit9CmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leGFtcGxlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvZXhhbXBsZS91dGlsL0V4YW1wbGVBZGFwdGVyRmFjdG9yeS5qYXZhIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXhhbXBsZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL2V4YW1wbGUvdXRpbC9FeGFtcGxlQWRhcHRlckZhY3RvcnkuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ODU5OTQzCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXhhbXBsZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL2V4YW1wbGUvdXRpbC9FeGFtcGxlQWRhcHRlckZhY3RvcnkuamF2YQpAQCAtMCwwICsxLDM5MyBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXhhbXBsZS51dGlsOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA3LCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LkFkYXB0ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuaW1wbC5BZGFwdGVyRmFjdG9yeUltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3Q7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5JZGVudGlmaWFibGU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5TYW5pdHlDaGVja2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5EZWNvcmF0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLkludGVncmF0aW9uRGVjb3JhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5Ob2RlRGVjb3JhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5Nb2RpZmlhYmxlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leGFtcGxlLio7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4YW1wbGUuRXhhbXBsZURpc2Vhc2VNb2RlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXhhbXBsZS5FeGFtcGxlUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuRGlzZWFzZU1vZGVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TSTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU0lSOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZERpc2Vhc2VNb2RlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmRTdG9jaGFzdGljRGlzZWFzZU1vZGVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdG9jaGFzdGljRGlzZWFzZU1vZGVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdG9jaGFzdGljU0lSRGlzZWFzZU1vZGVsOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiBUaGUgPGI+QWRhcHRlciBGYWN0b3J5PC9iPiBmb3IgdGhlIG1vZGVsLgorICogSXQgcHJvdmlkZXMgYW4gYWRhcHRlciA8Y29kZT5jcmVhdGVYWFg8L2NvZGU+IG1ldGhvZCBmb3IgZWFjaCBjbGFzcyBvZiB0aGUgbW9kZWwuCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4YW1wbGUuRXhhbXBsZVBhY2thZ2UKKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIEV4YW1wbGVBZGFwdGVyRmFjdG9yeSBleHRlbmRzIEFkYXB0ZXJGYWN0b3J5SW1wbCB7CisJLyoqCisJICogVGhlIGNhY2hlZCBtb2RlbCBwYWNrYWdlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBzdGF0aWMgRXhhbXBsZVBhY2thZ2UgbW9kZWxQYWNrYWdlOworCisJLyoqCisJICogQ3JlYXRlcyBhbiBpbnN0YW5jZSBvZiB0aGUgYWRhcHRlciBmYWN0b3J5LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFeGFtcGxlQWRhcHRlckZhY3RvcnkoKSB7CisJCWlmIChtb2RlbFBhY2thZ2UgPT0gbnVsbCkgeworCQkJbW9kZWxQYWNrYWdlID0gRXhhbXBsZVBhY2thZ2UuZUlOU1RBTkNFOworCQl9CisJfQorCisJLyoqCisJICogUmV0dXJucyB3aGV0aGVyIHRoaXMgZmFjdG9yeSBpcyBhcHBsaWNhYmxlIGZvciB0aGUgdHlwZSBvZiB0aGUgb2JqZWN0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIDxjb2RlPnRydWU8L2NvZGU+IGlmIHRoZSBvYmplY3QgaXMgZWl0aGVyIHRoZSBtb2RlbCdzIHBhY2thZ2Ugb3IgaXMgYW4gaW5zdGFuY2Ugb2JqZWN0IG9mIHRoZSBtb2RlbC4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHdoZXRoZXIgdGhpcyBmYWN0b3J5IGlzIGFwcGxpY2FibGUgZm9yIHRoZSB0eXBlIG9mIHRoZSBvYmplY3QuCisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBib29sZWFuIGlzRmFjdG9yeUZvclR5cGUoT2JqZWN0IG9iamVjdCkgeworCQlpZiAob2JqZWN0ID09IG1vZGVsUGFja2FnZSkgeworCQkJcmV0dXJuIHRydWU7CisJCX0KKwkJaWYgKG9iamVjdCBpbnN0YW5jZW9mIEVPYmplY3QpIHsKKwkJCXJldHVybiAoKEVPYmplY3Qpb2JqZWN0KS5lQ2xhc3MoKS5nZXRFUGFja2FnZSgpID09IG1vZGVsUGFja2FnZTsKKwkJfQorCQlyZXR1cm4gZmFsc2U7CisJfQorCisJLyoqCisJICogVGhlIHN3aXRjaCB0aGF0IGRlbGVnYXRlcyB0byB0aGUgPGNvZGU+Y3JlYXRlWFhYPC9jb2RlPiBtZXRob2RzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBFeGFtcGxlU3dpdGNoPEFkYXB0ZXI+IG1vZGVsU3dpdGNoID0KKwkJbmV3IEV4YW1wbGVTd2l0Y2g8QWRhcHRlcj4oKSB7CisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyBBZGFwdGVyIGNhc2VFeGFtcGxlRGlzZWFzZU1vZGVsKEV4YW1wbGVEaXNlYXNlTW9kZWwgb2JqZWN0KSB7CisJCQkJcmV0dXJuIGNyZWF0ZUV4YW1wbGVEaXNlYXNlTW9kZWxBZGFwdGVyKCk7CisJCQl9CisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyA8VD4gQWRhcHRlciBjYXNlQ29tcGFyYWJsZShDb21wYXJhYmxlPFQ+IG9iamVjdCkgeworCQkJCXJldHVybiBjcmVhdGVDb21wYXJhYmxlQWRhcHRlcigpOworCQkJfQorCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgQWRhcHRlciBjYXNlU2FuaXR5Q2hlY2tlcihTYW5pdHlDaGVja2VyIG9iamVjdCkgeworCQkJCXJldHVybiBjcmVhdGVTYW5pdHlDaGVja2VyQWRhcHRlcigpOworCQkJfQorCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgQWRhcHRlciBjYXNlSWRlbnRpZmlhYmxlKElkZW50aWZpYWJsZSBvYmplY3QpIHsKKwkJCQlyZXR1cm4gY3JlYXRlSWRlbnRpZmlhYmxlQWRhcHRlcigpOworCQkJfQorCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgQWRhcHRlciBjYXNlRGVjb3JhdG9yKERlY29yYXRvciBvYmplY3QpIHsKKwkJCQlyZXR1cm4gY3JlYXRlRGVjb3JhdG9yQWRhcHRlcigpOworCQkJfQorCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgQWRhcHRlciBjYXNlTm9kZURlY29yYXRvcihOb2RlRGVjb3JhdG9yIG9iamVjdCkgeworCQkJCXJldHVybiBjcmVhdGVOb2RlRGVjb3JhdG9yQWRhcHRlcigpOworCQkJfQorCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgQWRhcHRlciBjYXNlSW50ZWdyYXRpb25EZWNvcmF0b3IoSW50ZWdyYXRpb25EZWNvcmF0b3Igb2JqZWN0KSB7CisJCQkJcmV0dXJuIGNyZWF0ZUludGVncmF0aW9uRGVjb3JhdG9yQWRhcHRlcigpOworCQkJfQorCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgQWRhcHRlciBjYXNlTW9kaWZpYWJsZShNb2RpZmlhYmxlIG9iamVjdCkgeworCQkJCXJldHVybiBjcmVhdGVNb2RpZmlhYmxlQWRhcHRlcigpOworCQkJfQorCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgQWRhcHRlciBjYXNlRGlzZWFzZU1vZGVsKERpc2Vhc2VNb2RlbCBvYmplY3QpIHsKKwkJCQlyZXR1cm4gY3JlYXRlRGlzZWFzZU1vZGVsQWRhcHRlcigpOworCQkJfQorCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgQWRhcHRlciBjYXNlU3RhbmRhcmREaXNlYXNlTW9kZWwoU3RhbmRhcmREaXNlYXNlTW9kZWwgb2JqZWN0KSB7CisJCQkJcmV0dXJuIGNyZWF0ZVN0YW5kYXJkRGlzZWFzZU1vZGVsQWRhcHRlcigpOworCQkJfQorCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgQWRhcHRlciBjYXNlU0koU0kgb2JqZWN0KSB7CisJCQkJcmV0dXJuIGNyZWF0ZVNJQWRhcHRlcigpOworCQkJfQorCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgQWRhcHRlciBjYXNlU0lSKFNJUiBvYmplY3QpIHsKKwkJCQlyZXR1cm4gY3JlYXRlU0lSQWRhcHRlcigpOworCQkJfQorCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgQWRhcHRlciBjYXNlU3RvY2hhc3RpY0Rpc2Vhc2VNb2RlbChTdG9jaGFzdGljRGlzZWFzZU1vZGVsIG9iamVjdCkgeworCQkJCXJldHVybiBjcmVhdGVTdG9jaGFzdGljRGlzZWFzZU1vZGVsQWRhcHRlcigpOworCQkJfQorCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgQWRhcHRlciBjYXNlU3RhbmRhcmRTdG9jaGFzdGljRGlzZWFzZU1vZGVsKFN0YW5kYXJkU3RvY2hhc3RpY0Rpc2Vhc2VNb2RlbCBvYmplY3QpIHsKKwkJCQlyZXR1cm4gY3JlYXRlU3RhbmRhcmRTdG9jaGFzdGljRGlzZWFzZU1vZGVsQWRhcHRlcigpOworCQkJfQorCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgQWRhcHRlciBjYXNlU3RvY2hhc3RpY1NJUkRpc2Vhc2VNb2RlbChTdG9jaGFzdGljU0lSRGlzZWFzZU1vZGVsIG9iamVjdCkgeworCQkJCXJldHVybiBjcmVhdGVTdG9jaGFzdGljU0lSRGlzZWFzZU1vZGVsQWRhcHRlcigpOworCQkJfQorCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgQWRhcHRlciBkZWZhdWx0Q2FzZShFT2JqZWN0IG9iamVjdCkgeworCQkJCXJldHVybiBjcmVhdGVFT2JqZWN0QWRhcHRlcigpOworCQkJfQorCQl9OworCisJLyoqCisJICogQ3JlYXRlcyBhbiBhZGFwdGVyIGZvciB0aGUgPGNvZGU+dGFyZ2V0PC9jb2RlPi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSB0YXJnZXQgdGhlIG9iamVjdCB0byBhZGFwdC4KKwkgKiBAcmV0dXJuIHRoZSBhZGFwdGVyIGZvciB0aGUgPGNvZGU+dGFyZ2V0PC9jb2RlPi4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlQWRhcHRlcihOb3RpZmllciB0YXJnZXQpIHsKKwkJcmV0dXJuIG1vZGVsU3dpdGNoLmRvU3dpdGNoKChFT2JqZWN0KXRhcmdldCk7CisJfQorCisKKwkvKioKKwkgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leGFtcGxlLkV4YW1wbGVEaXNlYXNlTW9kZWwgPGVtPkRpc2Vhc2UgTW9kZWw8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOworCSAqIGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZSB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5LgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4YW1wbGUuRXhhbXBsZURpc2Vhc2VNb2RlbAorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVFeGFtcGxlRGlzZWFzZU1vZGVsQWRhcHRlcigpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBqYXZhLmxhbmcuQ29tcGFyYWJsZSA8ZW0+Q29tcGFyYWJsZTwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7CisJICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCisJICogQHNlZSBqYXZhLmxhbmcuQ29tcGFyYWJsZQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVDb21wYXJhYmxlQWRhcHRlcigpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLklkZW50aWZpYWJsZSA8ZW0+SWRlbnRpZmlhYmxlPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsKKwkgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uSWRlbnRpZmlhYmxlCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZUlkZW50aWZpYWJsZUFkYXB0ZXIoKSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLkRlY29yYXRvciA8ZW0+RGVjb3JhdG9yPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsKKwkgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5EZWNvcmF0b3IKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlRGVjb3JhdG9yQWRhcHRlcigpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuTm9kZURlY29yYXRvciA8ZW0+Tm9kZSBEZWNvcmF0b3I8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOworCSAqIGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZSB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5LgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLk5vZGVEZWNvcmF0b3IKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlTm9kZURlY29yYXRvckFkYXB0ZXIoKSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5TYW5pdHlDaGVja2VyIDxlbT5TYW5pdHkgQ2hlY2tlcjwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7CisJICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLlNhbml0eUNoZWNrZXIKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlU2FuaXR5Q2hlY2tlckFkYXB0ZXIoKSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLk1vZGlmaWFibGUgPGVtPk1vZGlmaWFibGU8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOworCSAqIGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZSB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5LgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLk1vZGlmaWFibGUKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlTW9kaWZpYWJsZUFkYXB0ZXIoKSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLkRpc2Vhc2VNb2RlbCA8ZW0+RGlzZWFzZSBNb2RlbDwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7CisJICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuRGlzZWFzZU1vZGVsCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZURpc2Vhc2VNb2RlbEFkYXB0ZXIoKSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLkludGVncmF0aW9uRGVjb3JhdG9yIDxlbT5JbnRlZ3JhdGlvbiBEZWNvcmF0b3I8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOworCSAqIGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZSB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5LgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLkludGVncmF0aW9uRGVjb3JhdG9yCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZUludGVncmF0aW9uRGVjb3JhdG9yQWRhcHRlcigpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmREaXNlYXNlTW9kZWwgPGVtPkRpc2Vhc2UgTW9kZWw8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOworCSAqIGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZSB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5LgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkRGlzZWFzZU1vZGVsCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZVN0YW5kYXJkRGlzZWFzZU1vZGVsQWRhcHRlcigpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU0kgPGVtPlNJPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsKKwkgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TSQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVTSUFkYXB0ZXIoKSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlNJUiA8ZW0+U0lSPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsKKwkgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TSVIKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlU0lSQWRhcHRlcigpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RvY2hhc3RpY0Rpc2Vhc2VNb2RlbCA8ZW0+U3RvY2hhc3RpYyBEaXNlYXNlIE1vZGVsPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsKKwkgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdG9jaGFzdGljRGlzZWFzZU1vZGVsCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZVN0b2NoYXN0aWNEaXNlYXNlTW9kZWxBZGFwdGVyKCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZFN0b2NoYXN0aWNEaXNlYXNlTW9kZWwgPGVtPlN0b2NoYXN0aWMgRGlzZWFzZSBNb2RlbDwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7CisJICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmRTdG9jaGFzdGljRGlzZWFzZU1vZGVsCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZVN0YW5kYXJkU3RvY2hhc3RpY0Rpc2Vhc2VNb2RlbEFkYXB0ZXIoKSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlN0b2NoYXN0aWNTSVJEaXNlYXNlTW9kZWwgPGVtPlN0b2NoYXN0aWMgU0lSIERpc2Vhc2UgTW9kZWw8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOworCSAqIGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZSB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5LgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlN0b2NoYXN0aWNTSVJEaXNlYXNlTW9kZWwKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlU3RvY2hhc3RpY1NJUkRpc2Vhc2VNb2RlbEFkYXB0ZXIoKSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgdGhlIGRlZmF1bHQgY2FzZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwuCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZUVPYmplY3RBZGFwdGVyKCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKK30gLy9FeGFtcGxlQWRhcHRlckZhY3RvcnkKZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4YW1wbGUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9leGFtcGxlL3V0aWwvRXhhbXBsZVN3aXRjaC5qYXZhIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXhhbXBsZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL2V4YW1wbGUvdXRpbC9FeGFtcGxlU3dpdGNoLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWNkODY1YQotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4YW1wbGUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9leGFtcGxlL3V0aWwvRXhhbXBsZVN3aXRjaC5qYXZhCkBAIC0wLDAgKzEsMzczIEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leGFtcGxlLnV0aWw7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uSWRlbnRpZmlhYmxlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uU2FuaXR5Q2hlY2tlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuRGVjb3JhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5JbnRlZ3JhdGlvbkRlY29yYXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuTm9kZURlY29yYXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuTW9kaWZpYWJsZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXhhbXBsZS4qOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leGFtcGxlLkV4YW1wbGVEaXNlYXNlTW9kZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4YW1wbGUuRXhhbXBsZVBhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLkRpc2Vhc2VNb2RlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU0k7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlNJUjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmREaXNlYXNlTW9kZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkU3RvY2hhc3RpY0Rpc2Vhc2VNb2RlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RvY2hhc3RpY0Rpc2Vhc2VNb2RlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RvY2hhc3RpY1NJUkRpc2Vhc2VNb2RlbDsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogVGhlIDxiPlN3aXRjaDwvYj4gZm9yIHRoZSBtb2RlbCdzIGluaGVyaXRhbmNlIGhpZXJhcmNoeS4KKyAqIEl0IHN1cHBvcnRzIHRoZSBjYWxsIHtAbGluayAjZG9Td2l0Y2goRU9iamVjdCkgZG9Td2l0Y2gob2JqZWN0KX0KKyAqIHRvIGludm9rZSB0aGUgPGNvZGU+Y2FzZVhYWDwvY29kZT4gbWV0aG9kIGZvciBlYWNoIGNsYXNzIG9mIHRoZSBtb2RlbCwKKyAqIHN0YXJ0aW5nIHdpdGggdGhlIGFjdHVhbCBjbGFzcyBvZiB0aGUgb2JqZWN0CisgKiBhbmQgcHJvY2VlZGluZyB1cCB0aGUgaW5oZXJpdGFuY2UgaGllcmFyY2h5CisgKiB1bnRpbCBhIG5vbi1udWxsIHJlc3VsdCBpcyByZXR1cm5lZCwKKyAqIHdoaWNoIGlzIHRoZSByZXN1bHQgb2YgdGhlIHN3aXRjaC4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXhhbXBsZS5FeGFtcGxlUGFja2FnZQorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgRXhhbXBsZVN3aXRjaDxUMT4geworCS8qKgorCSAqIFRoZSBjYWNoZWQgbW9kZWwgcGFja2FnZQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBzdGF0aWMgRXhhbXBsZVBhY2thZ2UgbW9kZWxQYWNrYWdlOworCisJLyoqCisJICogQ3JlYXRlcyBhbiBpbnN0YW5jZSBvZiB0aGUgc3dpdGNoLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFeGFtcGxlU3dpdGNoKCkgeworCQlpZiAobW9kZWxQYWNrYWdlID09IG51bGwpIHsKKwkJCW1vZGVsUGFja2FnZSA9IEV4YW1wbGVQYWNrYWdlLmVJTlNUQU5DRTsKKwkJfQorCX0KKworCS8qKgorCSAqIENhbGxzIDxjb2RlPmNhc2VYWFg8L2NvZGU+IGZvciBlYWNoIGNsYXNzIG9mIHRoZSBtb2RlbCB1bnRpbCBvbmUgcmV0dXJucyBhIG5vbiBudWxsIHJlc3VsdDsgaXQgeWllbGRzIHRoYXQgcmVzdWx0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgZmlyc3Qgbm9uLW51bGwgcmVzdWx0IHJldHVybmVkIGJ5IGEgPGNvZGU+Y2FzZVhYWDwvY29kZT4gY2FsbC4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFQxIGRvU3dpdGNoKEVPYmplY3QgdGhlRU9iamVjdCkgeworCQlyZXR1cm4gZG9Td2l0Y2godGhlRU9iamVjdC5lQ2xhc3MoKSwgdGhlRU9iamVjdCk7CisJfQorCisJLyoqCisJICogQ2FsbHMgPGNvZGU+Y2FzZVhYWDwvY29kZT4gZm9yIGVhY2ggY2xhc3Mgb2YgdGhlIG1vZGVsIHVudGlsIG9uZSByZXR1cm5zIGEgbm9uIG51bGwgcmVzdWx0OyBpdCB5aWVsZHMgdGhhdCByZXN1bHQuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBmaXJzdCBub24tbnVsbCByZXN1bHQgcmV0dXJuZWQgYnkgYSA8Y29kZT5jYXNlWFhYPC9jb2RlPiBjYWxsLgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgVDEgZG9Td2l0Y2goRUNsYXNzIHRoZUVDbGFzcywgRU9iamVjdCB0aGVFT2JqZWN0KSB7CisJCWlmICh0aGVFQ2xhc3MuZUNvbnRhaW5lcigpID09IG1vZGVsUGFja2FnZSkgeworCQkJcmV0dXJuIGRvU3dpdGNoKHRoZUVDbGFzcy5nZXRDbGFzc2lmaWVySUQoKSwgdGhlRU9iamVjdCk7CisJCX0KKwkJZWxzZSB7CisJCQlMaXN0PEVDbGFzcz4gZVN1cGVyVHlwZXMgPSB0aGVFQ2xhc3MuZ2V0RVN1cGVyVHlwZXMoKTsKKwkJCXJldHVybgorCQkJCWVTdXBlclR5cGVzLmlzRW1wdHkoKSA/CisJCQkJCWRlZmF1bHRDYXNlKHRoZUVPYmplY3QpIDoKKwkJCQkJZG9Td2l0Y2goZVN1cGVyVHlwZXMuZ2V0KDApLCB0aGVFT2JqZWN0KTsKKwkJfQorCX0KKworCS8qKgorCSAqIENhbGxzIDxjb2RlPmNhc2VYWFg8L2NvZGU+IGZvciBlYWNoIGNsYXNzIG9mIHRoZSBtb2RlbCB1bnRpbCBvbmUgcmV0dXJucyBhIG5vbiBudWxsIHJlc3VsdDsgaXQgeWllbGRzIHRoYXQgcmVzdWx0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgZmlyc3Qgbm9uLW51bGwgcmVzdWx0IHJldHVybmVkIGJ5IGEgPGNvZGU+Y2FzZVhYWDwvY29kZT4gY2FsbC4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIFQxIGRvU3dpdGNoKGludCBjbGFzc2lmaWVySUQsIEVPYmplY3QgdGhlRU9iamVjdCkgeworCQlzd2l0Y2ggKGNsYXNzaWZpZXJJRCkgeworCQkJY2FzZSBFeGFtcGxlUGFja2FnZS5FWEFNUExFX0RJU0VBU0VfTU9ERUw6IHsKKwkJCQlFeGFtcGxlRGlzZWFzZU1vZGVsIGV4YW1wbGVEaXNlYXNlTW9kZWwgPSAoRXhhbXBsZURpc2Vhc2VNb2RlbCl0aGVFT2JqZWN0OworCQkJCVQxIHJlc3VsdCA9IGNhc2VFeGFtcGxlRGlzZWFzZU1vZGVsKGV4YW1wbGVEaXNlYXNlTW9kZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZVN0b2NoYXN0aWNTSVJEaXNlYXNlTW9kZWwoZXhhbXBsZURpc2Vhc2VNb2RlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlU0lSKGV4YW1wbGVEaXNlYXNlTW9kZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZVN0YW5kYXJkU3RvY2hhc3RpY0Rpc2Vhc2VNb2RlbChleGFtcGxlRGlzZWFzZU1vZGVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VTSShleGFtcGxlRGlzZWFzZU1vZGVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VTdG9jaGFzdGljRGlzZWFzZU1vZGVsKGV4YW1wbGVEaXNlYXNlTW9kZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZVN0YW5kYXJkRGlzZWFzZU1vZGVsKGV4YW1wbGVEaXNlYXNlTW9kZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZURpc2Vhc2VNb2RlbChleGFtcGxlRGlzZWFzZU1vZGVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VJbnRlZ3JhdGlvbkRlY29yYXRvcihleGFtcGxlRGlzZWFzZU1vZGVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VNb2RpZmlhYmxlKGV4YW1wbGVEaXNlYXNlTW9kZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZU5vZGVEZWNvcmF0b3IoZXhhbXBsZURpc2Vhc2VNb2RlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlRGVjb3JhdG9yKGV4YW1wbGVEaXNlYXNlTW9kZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZUlkZW50aWZpYWJsZShleGFtcGxlRGlzZWFzZU1vZGVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VDb21wYXJhYmxlKGV4YW1wbGVEaXNlYXNlTW9kZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZVNhbml0eUNoZWNrZXIoZXhhbXBsZURpc2Vhc2VNb2RlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBkZWZhdWx0Q2FzZSh0aGVFT2JqZWN0KTsKKwkJCQlyZXR1cm4gcmVzdWx0OworCQkJfQorCQkJZGVmYXVsdDogcmV0dXJuIGRlZmF1bHRDYXNlKHRoZUVPYmplY3QpOworCQl9CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+RGlzZWFzZSBNb2RlbDwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOworCSAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgorCSAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkRpc2Vhc2UgTW9kZWw8L2VtPicuCisJICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBUMSBjYXNlRXhhbXBsZURpc2Vhc2VNb2RlbChFeGFtcGxlRGlzZWFzZU1vZGVsIG9iamVjdCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5Db21wYXJhYmxlPC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7CisJICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCisJICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+Q29tcGFyYWJsZTwvZW0+Jy4KKwkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIDxUPiBUMSBjYXNlQ29tcGFyYWJsZShDb21wYXJhYmxlPFQ+IG9iamVjdCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5JZGVudGlmaWFibGU8L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsKKwkgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KKwkgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5JZGVudGlmaWFibGU8L2VtPicuCisJICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBUMSBjYXNlSWRlbnRpZmlhYmxlKElkZW50aWZpYWJsZSBvYmplY3QpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+RGVjb3JhdG9yPC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7CisJICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCisJICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+RGVjb3JhdG9yPC9lbT4nLgorCSAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVDEgY2FzZURlY29yYXRvcihEZWNvcmF0b3Igb2JqZWN0KSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPk5vZGUgRGVjb3JhdG9yPC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7CisJICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCisJICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+Tm9kZSBEZWNvcmF0b3I8L2VtPicuCisJICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBUMSBjYXNlTm9kZURlY29yYXRvcihOb2RlRGVjb3JhdG9yIG9iamVjdCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5TYW5pdHkgQ2hlY2tlcjwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOworCSAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgorCSAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPlNhbml0eSBDaGVja2VyPC9lbT4nLgorCSAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVDEgY2FzZVNhbml0eUNoZWNrZXIoU2FuaXR5Q2hlY2tlciBvYmplY3QpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+TW9kaWZpYWJsZTwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOworCSAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgorCSAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPk1vZGlmaWFibGU8L2VtPicuCisJICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBUMSBjYXNlTW9kaWZpYWJsZShNb2RpZmlhYmxlIG9iamVjdCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5EaXNlYXNlIE1vZGVsPC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7CisJICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCisJICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+RGlzZWFzZSBNb2RlbDwvZW0+Jy4KKwkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFQxIGNhc2VEaXNlYXNlTW9kZWwoRGlzZWFzZU1vZGVsIG9iamVjdCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5JbnRlZ3JhdGlvbiBEZWNvcmF0b3I8L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsKKwkgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KKwkgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5JbnRlZ3JhdGlvbiBEZWNvcmF0b3I8L2VtPicuCisJICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBUMSBjYXNlSW50ZWdyYXRpb25EZWNvcmF0b3IoSW50ZWdyYXRpb25EZWNvcmF0b3Igb2JqZWN0KSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkRpc2Vhc2UgTW9kZWw8L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsKKwkgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KKwkgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5EaXNlYXNlIE1vZGVsPC9lbT4nLgorCSAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVDEgY2FzZVN0YW5kYXJkRGlzZWFzZU1vZGVsKFN0YW5kYXJkRGlzZWFzZU1vZGVsIG9iamVjdCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5TSTwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOworCSAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgorCSAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPlNJPC9lbT4nLgorCSAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVDEgY2FzZVNJKFNJIG9iamVjdCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5TSVI8L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsKKwkgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KKwkgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5TSVI8L2VtPicuCisJICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBUMSBjYXNlU0lSKFNJUiBvYmplY3QpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+U3RvY2hhc3RpYyBEaXNlYXNlIE1vZGVsPC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7CisJICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCisJICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+U3RvY2hhc3RpYyBEaXNlYXNlIE1vZGVsPC9lbT4nLgorCSAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVDEgY2FzZVN0b2NoYXN0aWNEaXNlYXNlTW9kZWwoU3RvY2hhc3RpY0Rpc2Vhc2VNb2RlbCBvYmplY3QpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+U3RvY2hhc3RpYyBEaXNlYXNlIE1vZGVsPC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7CisJICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCisJICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+U3RvY2hhc3RpYyBEaXNlYXNlIE1vZGVsPC9lbT4nLgorCSAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVDEgY2FzZVN0YW5kYXJkU3RvY2hhc3RpY0Rpc2Vhc2VNb2RlbChTdGFuZGFyZFN0b2NoYXN0aWNEaXNlYXNlTW9kZWwgb2JqZWN0KSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPlN0b2NoYXN0aWMgU0lSIERpc2Vhc2UgTW9kZWw8L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsKKwkgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KKwkgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5TdG9jaGFzdGljIFNJUiBEaXNlYXNlIE1vZGVsPC9lbT4nLgorCSAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVDEgY2FzZVN0b2NoYXN0aWNTSVJEaXNlYXNlTW9kZWwoU3RvY2hhc3RpY1NJUkRpc2Vhc2VNb2RlbCBvYmplY3QpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+RU9iamVjdDwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOworCSAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLCBidXQgdGhpcyBpcyB0aGUgbGFzdCBjYXNlIGFueXdheS4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KKwkgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5FT2JqZWN0PC9lbT4nLgorCSAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVDEgZGVmYXVsdENhc2UoRU9iamVjdCBvYmplY3QpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCit9IC8vRXhhbXBsZVN3aXRjaApkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXhwZXJpbWVudGFsLy5jbGFzc3BhdGggYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leHBlcmltZW50YWwvLmNsYXNzcGF0aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMDRlODYxCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXhwZXJpbWVudGFsLy5jbGFzc3BhdGgKQEAgLTAsMCArMSw3IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPGNsYXNzcGF0aD4KKwk8Y2xhc3NwYXRoZW50cnkga2luZD0ic3JjIiBwYXRoPSJzcmMiLz4KKwk8Y2xhc3NwYXRoZW50cnkga2luZD0iY29uIiBwYXRoPSJvcmcuZWNsaXBzZS5qZHQubGF1bmNoaW5nLkpSRV9DT05UQUlORVIvb3JnLmVjbGlwc2UuamR0LmludGVybmFsLmRlYnVnLnVpLmxhdW5jaGVyLlN0YW5kYXJkVk1UeXBlL0oyU0UtMS41Ii8+CisJPGNsYXNzcGF0aGVudHJ5IGtpbmQ9ImNvbiIgcGF0aD0ib3JnLmVjbGlwc2UucGRlLmNvcmUucmVxdWlyZWRQbHVnaW5zIi8+CisJPGNsYXNzcGF0aGVudHJ5IGtpbmQ9Im91dHB1dCIgcGF0aD0iYmluIi8+Cis8L2NsYXNzcGF0aD4KZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4cGVyaW1lbnRhbC8ucHJvamVjdCBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4cGVyaW1lbnRhbC8ucHJvamVjdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMjk0NjQyCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXhwZXJpbWVudGFsLy5wcm9qZWN0CkBAIC0wLDAgKzEsMjggQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8cHJvamVjdERlc2NyaXB0aW9uPgorCTxuYW1lPm9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leHBlcmltZW50YWw8L25hbWU+CisJPGNvbW1lbnQ+PC9jb21tZW50PgorCTxwcm9qZWN0cz4KKwk8L3Byb2plY3RzPgorCTxidWlsZFNwZWM+CisJCTxidWlsZENvbW1hbmQ+CisJCQk8bmFtZT5vcmcuZWNsaXBzZS5qZHQuY29yZS5qYXZhYnVpbGRlcjwvbmFtZT4KKwkJCTxhcmd1bWVudHM+CisJCQk8L2FyZ3VtZW50cz4KKwkJPC9idWlsZENvbW1hbmQ+CisJCTxidWlsZENvbW1hbmQ+CisJCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuTWFuaWZlc3RCdWlsZGVyPC9uYW1lPgorCQkJPGFyZ3VtZW50cz4KKwkJCTwvYXJndW1lbnRzPgorCQk8L2J1aWxkQ29tbWFuZD4KKwkJPGJ1aWxkQ29tbWFuZD4KKwkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5TY2hlbWFCdWlsZGVyPC9uYW1lPgorCQkJPGFyZ3VtZW50cz4KKwkJCTwvYXJndW1lbnRzPgorCQk8L2J1aWxkQ29tbWFuZD4KKwk8L2J1aWxkU3BlYz4KKwk8bmF0dXJlcz4KKwkJPG5hdHVyZT5vcmcuZWNsaXBzZS5qZHQuY29yZS5qYXZhbmF0dXJlPC9uYXR1cmU+CisJCTxuYXR1cmU+b3JnLmVjbGlwc2UucGRlLlBsdWdpbk5hdHVyZTwvbmF0dXJlPgorCTwvbmF0dXJlcz4KKzwvcHJvamVjdERlc2NyaXB0aW9uPgpkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXhwZXJpbWVudGFsLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4cGVyaW1lbnRhbC8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTZjM2E2OAotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4cGVyaW1lbnRhbC8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMKQEAgLTAsMCArMSwxNSBAQAorI1R1ZSBTZXAgMDEgMTY6NTc6NTYgRURUIDIwMDkKK2VjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5kb2MuY29tbWVudC5zdXBwb3J0PWRpc2FibGVkCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmludmFsaWRKYXZhZG9jPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW52YWxpZEphdmFkb2NUYWdzPWVuYWJsZWQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW52YWxpZEphdmFkb2NUYWdzRGVwcmVjYXRlZFJlZj1lbmFibGVkCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmludmFsaWRKYXZhZG9jVGFnc05vdFZpc2libGVSZWY9ZW5hYmxlZAorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbnZhbGlkSmF2YWRvY1RhZ3NWaXNpYmlsaXR5PXB1YmxpYworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nSmF2YWRvY0NvbW1lbnRzPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0phdmFkb2NDb21tZW50c092ZXJyaWRpbmc9ZW5hYmxlZAorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nSmF2YWRvY0NvbW1lbnRzVmlzaWJpbGl0eT1wdWJsaWMKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0phdmFkb2NUYWdEZXNjcmlwdGlvbj1yZXR1cm5fdGFnCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdKYXZhZG9jVGFncz13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdKYXZhZG9jVGFnc092ZXJyaWRpbmc9ZW5hYmxlZAorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nSmF2YWRvY1RhZ3NWaXNpYmlsaXR5PXB1YmxpYwpkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXhwZXJpbWVudGFsL01FVEEtSU5GL01BTklGRVNULk1GIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXhwZXJpbWVudGFsL01FVEEtSU5GL01BTklGRVNULk1GCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI1MjFjMWYKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leHBlcmltZW50YWwvTUVUQS1JTkYvTUFOSUZFU1QuTUYKQEAgLTAsMCArMSw0MCBAQAorTWFuaWZlc3QtVmVyc2lvbjogMS4wCitCdW5kbGUtTWFuaWZlc3RWZXJzaW9uOiAyCitCdW5kbGUtTmFtZTogJXBsdWdpbk5hbWUKK0J1bmRsZS1TeW1ib2xpY05hbWU6IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leHBlcmltZW50YWw7IHNpbmdsZXRvbjo9dHJ1ZQorQnVuZGxlLVZlcnNpb246IDEuMi4xCitCdW5kbGUtQ2xhc3NQYXRoOiAuCitCdW5kbGUtQWN0aXZhdG9yOiBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXhwZXJpbWVudGFsLnByb3ZpZGVyLkV4cGVyaW1lbnRhbEVkaXRQbHVnaW4kSW1wbGVtZW50YXRpb24KK0J1bmRsZS1WZW5kb3I6ICVwcm92aWRlck5hbWUKK0J1bmRsZS1Mb2NhbGl6YXRpb246IHBsdWdpbgorQnVuZGxlLVJlcXVpcmVkRXhlY3V0aW9uRW52aXJvbm1lbnQ6IEoyU0UtMS41CitFeHBvcnQtUGFja2FnZTogb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4cGVyaW1lbnRhbDt1c2VzOj0ib3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLG9yZy5lY2xpcHNlLmVtZi5lY29yZSIsCisgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4cGVyaW1lbnRhbC5pbXBsOworICB1c2VzOj0ib3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLAorICAgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLmltcGwsCisgICBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXhwZXJpbWVudGFsLAorICAgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLmltcGwsCisgICBvcmcuZWNsaXBzZS5lbWYuZWNvcmUiLAorIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leHBlcmltZW50YWwucHJvdmlkZXI7CisgIHVzZXM6PSJvcmcuZWNsaXBzZS5lbWYuY29tbW9uLAorICAgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4cGVyaW1lbnRhbC51dGlsLAorICAgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLnByb3ZpZGVyLAorICAgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnksCisgICBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlciwKKyAgIG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbCIsCisgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4cGVyaW1lbnRhbC51dGlsOworICB1c2VzOj0ib3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuaW1wbCwKKyAgIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZCwKKyAgIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leHBlcmltZW50YWwsCisgICBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeSwKKyAgIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbCwKKyAgIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24sCisgICBvcmcuZWNsaXBzZS5lbWYuZWNvcmUiCitSZXF1aXJlLUJ1bmRsZTogb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLAorIG9yZy5lY2xpcHNlLmVtZi5lY29yZTt2aXNpYmlsaXR5Oj1yZWV4cG9ydCwKKyBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHM7dmlzaWJpbGl0eTo9cmVleHBvcnQsCisgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlO3Zpc2liaWxpdHk6PXJlZXhwb3J0LAorIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnM7dmlzaWJpbGl0eTo9cmVleHBvcnQsCisgb3JnLmVjbGlwc2UuZW1mLmVkaXQ7dmlzaWJpbGl0eTo9cmVleHBvcnQsCisgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLmVkaXQKK0J1bmRsZS1BY3RpdmF0aW9uUG9saWN5OiBsYXp5CmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leHBlcmltZW50YWwvYnVpbGQucHJvcGVydGllcyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4cGVyaW1lbnRhbC9idWlsZC5wcm9wZXJ0aWVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFmNWYxODMKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leHBlcmltZW50YWwvYnVpbGQucHJvcGVydGllcwpAQCAtMCwwICsxLDE2IEBACisjIDxjb3B5cmlnaHQ+CisjIDwvY29weXJpZ2h0PgorIworIyAkSWQkCisKK2Jpbi5pbmNsdWRlcyA9IC4sXAorICAgICAgICAgICAgICAgaWNvbnMvLFwKKyAgICAgICAgICAgICAgIE1FVEEtSU5GLyxcCisgICAgICAgICAgICAgICBwbHVnaW4ueG1sLFwKKyAgICAgICAgICAgICAgIHBsdWdpbi5wcm9wZXJ0aWVzLFwKKyAgICAgICAgICAgICAgIHBsdWdpbl9kZS5wcm9wZXJ0aWVzLFwKKyAgICAgICAgICAgICAgIHBsdWdpbl9rci5wcm9wZXJ0aWVzLFwKKyAgICAgICAgICAgICAgIHBsdWdpbl96aC5wcm9wZXJ0aWVzCitqYXJzLmNvbXBpbGUub3JkZXIgPSAuCitzb3VyY2UuLiA9IHNyYy8KK291dHB1dC4uID0gYmluLwpkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXhwZXJpbWVudGFsL2ljb25zL2Z1bGwvb2JqMTYvUGVyY29sYXRpb25EaXNlYXNlTW9kZWwuZ2lmIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXhwZXJpbWVudGFsL2ljb25zL2Z1bGwvb2JqMTYvUGVyY29sYXRpb25EaXNlYXNlTW9kZWwuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJhZGFhYjAKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leHBlcmltZW50YWwvaWNvbnMvZnVsbC9vYmoxNi9QZXJjb2xhdGlvbkRpc2Vhc2VNb2RlbC5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXhwZXJpbWVudGFsL2ljb25zL2Z1bGwvb2JqMTYvUGVyY3VsYXRpb25EaXNlYXNlTW9kZWwuZ2lmIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXhwZXJpbWVudGFsL2ljb25zL2Z1bGwvb2JqMTYvUGVyY3VsYXRpb25EaXNlYXNlTW9kZWwuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMzOGZiOGQKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leHBlcmltZW50YWwvaWNvbnMvZnVsbC9vYmoxNi9QZXJjdWxhdGlvbkRpc2Vhc2VNb2RlbC5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXhwZXJpbWVudGFsL2ljb25zL2Z1bGwvb2JqMTYvVEJEaXNlYXNlTW9kZWwuZ2lmIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXhwZXJpbWVudGFsL2ljb25zL2Z1bGwvb2JqMTYvVEJEaXNlYXNlTW9kZWwuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQyMGVlZTEKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leHBlcmltZW50YWwvaWNvbnMvZnVsbC9vYmoxNi9UQkRpc2Vhc2VNb2RlbC5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXhwZXJpbWVudGFsL2ljb25zL2Z1bGwvb2JqMTYvVEJEaXNlYXNlTW9kZWxMYWJlbC5naWYgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leHBlcmltZW50YWwvaWNvbnMvZnVsbC9vYmoxNi9UQkRpc2Vhc2VNb2RlbExhYmVsLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44M2FmYjliCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXhwZXJpbWVudGFsL2ljb25zL2Z1bGwvb2JqMTYvVEJEaXNlYXNlTW9kZWxMYWJlbC5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXhwZXJpbWVudGFsL2ljb25zL2Z1bGwvb2JqMTYvVEJEaXNlYXNlTW9kZWxMYWJlbFZhbHVlLmdpZiBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4cGVyaW1lbnRhbC9pY29ucy9mdWxsL29iajE2L1RCRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZS5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTBkMjIyOQotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4cGVyaW1lbnRhbC9pY29ucy9mdWxsL29iajE2L1RCRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZS5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXhwZXJpbWVudGFsL21vZGVsL2V4cGVyaW1lbnRhbC5lY29yZSBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4cGVyaW1lbnRhbC9tb2RlbC9leHBlcmltZW50YWwuZWNvcmUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGVjNjgzOQotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4cGVyaW1lbnRhbC9tb2RlbC9leHBlcmltZW50YWwuZWNvcmUKQEAgLTAsMCArMSwxNSBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4NCis8ZWNvcmU6RVBhY2thZ2UgeG1pOnZlcnNpb249IjIuMCINCisgICAgeG1sbnM6eG1pPSJodHRwOi8vd3d3Lm9tZy5vcmcvWE1JIiB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIg0KKyAgICB4bWxuczplY29yZT0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9lbWYvMjAwMi9FY29yZSIgbmFtZT0iZXhwZXJpbWVudGFsIg0KKyAgICBuc1VSST0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvZXhwZXJpbWVudGFsLmVjb3JlIiBuc1ByZWZpeD0ib3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4cGVyaW1lbnRhbCI+DQorICA8ZUNsYXNzaWZpZXJzIHhzaTp0eXBlPSJlY29yZTpFQ2xhc3MiIG5hbWU9IlBlcmNvbGF0aW9uRGlzZWFzZU1vZGVsIiBlU3VwZXJUeXBlcz0iLi4vLi4vb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL21vZGVsL3N0YW5kYXJkLmVjb3JlIy8vU3RvY2hhc3RpY1NFSVJEaXNlYXNlTW9kZWwiLz4NCisgIDxlQ2xhc3NpZmllcnMgeHNpOnR5cGU9ImVjb3JlOkVDbGFzcyIgbmFtZT0iVEJEaXNlYXNlTW9kZWxMYWJlbCIgZVN1cGVyVHlwZXM9Ii4uLy4uL29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy9tb2RlbC9zdGFuZGFyZC5lY29yZSMvL1N0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWwiLz4NCisgIDxlQ2xhc3NpZmllcnMgeHNpOnR5cGU9ImVjb3JlOkVDbGFzcyIgbmFtZT0iVEJEaXNlYXNlTW9kZWxMYWJlbFZhbHVlIiBlU3VwZXJUeXBlcz0iLi4vLi4vb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL21vZGVsL3N0YW5kYXJkLmVjb3JlIy8vU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbFZhbHVlIj4NCisgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVBdHRyaWJ1dGUiIG5hbWU9ImlsIiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIHBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2UuZW1mLmVjb3JlL21vZGVsL0Vjb3JlLmVjb3JlIy8vRURvdWJsZSINCisgICAgICAgIGRlZmF1bHRWYWx1ZUxpdGVyYWw9IjAuMCIvPg0KKyAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0iaWEiIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgcGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5lbWYuZWNvcmUvbW9kZWwvRWNvcmUuZWNvcmUjLy9FRG91YmxlIg0KKyAgICAgICAgZGVmYXVsdFZhbHVlTGl0ZXJhbD0iMC4wIi8+DQorICA8L2VDbGFzc2lmaWVycz4NCisgIDxlQ2xhc3NpZmllcnMgeHNpOnR5cGU9ImVjb3JlOkVDbGFzcyIgbmFtZT0iVEJEaXNlYXNlTW9kZWwiIGVTdXBlclR5cGVzPSIuLi8uLi9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMvbW9kZWwvc3RhbmRhcmQuZWNvcmUjLy9TdGFuZGFyZERpc2Vhc2VNb2RlbCIvPg0KKzwvZWNvcmU6RVBhY2thZ2U+DQpkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXhwZXJpbWVudGFsL21vZGVsL2V4cGVyaW1lbnRhbC5nZW5tb2RlbCBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4cGVyaW1lbnRhbC9tb2RlbC9leHBlcmltZW50YWwuZ2VubW9kZWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZThkODJiNwotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4cGVyaW1lbnRhbC9tb2RlbC9leHBlcmltZW50YWwuZ2VubW9kZWwKQEAgLTAsMCArMSwyNiBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxnZW5tb2RlbDpHZW5Nb2RlbCB4bWk6dmVyc2lvbj0iMi4wIgorICAgIHhtbG5zOnhtaT0iaHR0cDovL3d3dy5vbWcub3JnL1hNSSIgeG1sbnM6ZWNvcmU9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDIvRWNvcmUiCisgICAgeG1sbnM6Z2VubW9kZWw9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDIvR2VuTW9kZWwiIG1vZGVsRGlyZWN0b3J5PSIvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4cGVyaW1lbnRhbC9zcmMiCisgICAgZWRpdERpcmVjdG9yeT0iL29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leHBlcmltZW50YWwvc3JjIiBlZGl0b3JEaXJlY3Rvcnk9Ii9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMuZXhwZXJpbWVudGFsL3NyYyIKKyAgICBtb2RlbFBsdWdpbklEPSJvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXhwZXJpbWVudGFsIiBtb2RlbE5hbWU9IkV4cGVyaW1lbnRhbCIKKyAgICB0ZXN0c0RpcmVjdG9yeT0iL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGlzZWFzZW1vZGVscy5leHBlcmltZW50YWwvc3JjIiB0ZXN0U3VpdGVDbGFzcz0ib3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kaXNlYXNlbW9kZWxzLmV4cGVyaW1lbnRhbC5FeHBlcmltZW50YWxBbGxUZXN0cyIKKyAgICBpbXBvcnRlcklEPSJvcmcuZWNsaXBzZS5lbWYuaW1wb3J0ZXIuZWNvcmUiIGNvbXBsaWFuY2VMZXZlbD0iNS4wIiBlZGl0b3JQbHVnaW5JRD0ib3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzLmV4cGVyaW1lbnRhbCIKKyAgICB0ZXN0c1BsdWdpbklEPSJvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRpc2Vhc2Vtb2RlbHMuZXhwZXJpbWVudGFsIiB1c2VkR2VuUGFja2FnZXM9Ii4uLy4uL29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy9tb2RlbC9kaXNlYXNlbW9kZWxzLmdlbm1vZGVsIy8vc3RhbmRhcmQgLi4vLi4vb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL21vZGVsL2NvcmUuZ2VubW9kZWwjLy9jb21tb24gLi4vLi4vb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL21vZGVsL2NvcmUuZ2VubW9kZWwjLy9tb2RlbCAuLi8uLi9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvbW9kZWwvY29yZS5nZW5tb2RlbCMvL2dyYXBoIC4uLy4uL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvbW9kZWwvZGVmaW5pdGlvbnMuZ2VubW9kZWwjLy9sYWJlbHMgLi4vLi4vb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL21vZGVsL2NvcmUuZ2VubW9kZWwjLy9tb2RpZmllciBwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLmVtZi5lY29yZS9tb2RlbC9FY29yZS5nZW5tb2RlbCMvL2Vjb3JlIC4uLy4uL29yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy9tb2RlbC9zdGFuZGFyZC5nZW5tb2RlbCMvL3N0YW5kYXJkIC4uLy4uL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9tb2RlbC9jb3JlLmdlbm1vZGVsIy8vc2NlbmFyaW8gLi4vLi4vb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL21vZGVsL2NvcmUuZ2VubW9kZWwjLy9zZXF1ZW5jZXIgLi4vLi4vb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL21vZGVsL2NvcmUuZ2VubW9kZWwjLy9zb2x2ZXIiPgorICA8Zm9yZWlnbk1vZGVsPmV4cGVyaW1lbnRhbC5lY29yZTwvZm9yZWlnbk1vZGVsPgorICA8Z2VuUGFja2FnZXMgcHJlZml4PSJFeHBlcmltZW50YWwiIGJhc2VQYWNrYWdlPSJvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMiCisgICAgICBkaXNwb3NhYmxlUHJvdmlkZXJGYWN0b3J5PSJ0cnVlIiBlY29yZVBhY2thZ2U9ImV4cGVyaW1lbnRhbC5lY29yZSMvIj4KKyAgICA8Z2VuQ2xhc3NlcyBlY29yZUNsYXNzPSJleHBlcmltZW50YWwuZWNvcmUjLy9QZXJjb2xhdGlvbkRpc2Vhc2VNb2RlbCIvPgorICAgIDxnZW5DbGFzc2VzIGVjb3JlQ2xhc3M9ImV4cGVyaW1lbnRhbC5lY29yZSMvL1RCRGlzZWFzZU1vZGVsTGFiZWwiPgorICAgICAgPGdlbkZlYXR1cmVzIG5vdGlmeT0iZmFsc2UiIGNyZWF0ZUNoaWxkPSJmYWxzZSIgcHJvcGVydHlTb3J0Q2hvaWNlcz0idHJ1ZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFUmVmZXJlbmNlIGV4cGVyaW1lbnRhbC5lY29yZSMvL1RCRGlzZWFzZU1vZGVsTGFiZWwvcHJvYmVWYWx1ZSIvPgorICAgICAgPGdlbkZlYXR1cmVzIG5vdGlmeT0iZmFsc2UiIGNyZWF0ZUNoaWxkPSJmYWxzZSIgcHJvcGVydHlTb3J0Q2hvaWNlcz0idHJ1ZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFUmVmZXJlbmNlIGV4cGVyaW1lbnRhbC5lY29yZSMvL1RCRGlzZWFzZU1vZGVsTGFiZWwvZGVsdGFWYWx1ZSIvPgorICAgICAgPGdlbkZlYXR1cmVzIG5vdGlmeT0iZmFsc2UiIGNyZWF0ZUNoaWxkPSJmYWxzZSIgcHJvcGVydHlTb3J0Q2hvaWNlcz0idHJ1ZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFUmVmZXJlbmNlIGV4cGVyaW1lbnRhbC5lY29yZSMvL1RCRGlzZWFzZU1vZGVsTGFiZWwvdGVtcFZhbHVlIi8+CisgICAgICA8Z2VuRmVhdHVyZXMgbm90aWZ5PSJmYWxzZSIgY3JlYXRlQ2hpbGQ9ImZhbHNlIiBwcm9wZXJ0eVNvcnRDaG9pY2VzPSJ0cnVlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVSZWZlcmVuY2UgZXhwZXJpbWVudGFsLmVjb3JlIy8vVEJEaXNlYXNlTW9kZWxMYWJlbC9lcnJvclNjYWxlIi8+CisgICAgPC9nZW5DbGFzc2VzPgorICAgIDxnZW5DbGFzc2VzIGVjb3JlQ2xhc3M9ImV4cGVyaW1lbnRhbC5lY29yZSMvL1RCRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZSI+CisgICAgICA8Z2VuRmVhdHVyZXMgY3JlYXRlQ2hpbGQ9ImZhbHNlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVBdHRyaWJ1dGUgZXhwZXJpbWVudGFsLmVjb3JlIy8vVEJEaXNlYXNlTW9kZWxMYWJlbFZhbHVlL2lsIi8+CisgICAgICA8Z2VuRmVhdHVyZXMgY3JlYXRlQ2hpbGQ9ImZhbHNlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVBdHRyaWJ1dGUgZXhwZXJpbWVudGFsLmVjb3JlIy8vVEJEaXNlYXNlTW9kZWxMYWJlbFZhbHVlL2lhIi8+CisgICAgPC9nZW5DbGFzc2VzPgorICAgIDxnZW5DbGFzc2VzIGVjb3JlQ2xhc3M9ImV4cGVyaW1lbnRhbC5lY29yZSMvL1RCRGlzZWFzZU1vZGVsIi8+CisgIDwvZ2VuUGFja2FnZXM+Cis8L2dlbm1vZGVsOkdlbk1vZGVsPgpkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXhwZXJpbWVudGFsL3BsdWdpbi5wcm9wZXJ0aWVzIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXhwZXJpbWVudGFsL3BsdWdpbi5wcm9wZXJ0aWVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE0NWI4YjcKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leHBlcmltZW50YWwvcGx1Z2luLnByb3BlcnRpZXMKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXhwZXJpbWVudGFsL3BsdWdpbi54bWwgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leHBlcmltZW50YWwvcGx1Z2luLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYTZkYzE4Ci0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXhwZXJpbWVudGFsL3BsdWdpbi54bWwKQEAgLTAsMCArMSw2MSBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzw/ZWNsaXBzZSB2ZXJzaW9uPSIzLjAiPz4KKworPCEtLQorIDxjb3B5cmlnaHQ+CisgPC9jb3B5cmlnaHQ+CisKKyAkSWQkCistLT4KKworPHBsdWdpbj4KKyAgICAKKyAgPGV4dGVuc2lvbiBwb2ludD0ib3JnLmVjbGlwc2UuZW1mLmVkaXQuaXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcmllcyI+CisgICAgPGZhY3RvcnkgCisgICAgICAgdXJpID0gImh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL2V4cGVyaW1lbnRhbC5lY29yZSIgCisgICAgICAgY2xhc3MgPSAib3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4cGVyaW1lbnRhbC5wcm92aWRlci5FeHBlcmltZW50YWxJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSIgCisgICAgICAgc3VwcG9ydGVkVHlwZXMgPSAKKyAgICAgICAgICJvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JRWRpdGluZ0RvbWFpbkl0ZW1Qcm92aWRlcgorICAgICAgICAgIG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklTdHJ1Y3R1cmVkSXRlbUNvbnRlbnRQcm92aWRlcgorICAgICAgICAgIG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklUcmVlSXRlbUNvbnRlbnRQcm92aWRlcgorICAgICAgICAgIG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtTGFiZWxQcm92aWRlcgorICAgICAgICAgIG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtUHJvcGVydHlTb3VyY2UiIC8+CisgIDwvZXh0ZW5zaW9uPgorCisgIDxleHRlbnNpb24gcG9pbnQ9Im9yZy5lY2xpcHNlLmVtZi5lY29yZS5nZW5lcmF0ZWRfcGFja2FnZSI+CisgICAgPHBhY2thZ2UKKyAgICAgICB1cmkgPSAiaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvZXhwZXJpbWVudGFsLmVjb3JlIgorICAgICAgIGNsYXNzID0gIm9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leHBlcmltZW50YWwuRXhwZXJpbWVudGFsUGFja2FnZSIKKyAgICAgICBnZW5Nb2RlbCA9ICJtb2RlbC9leHBlcmltZW50YWwuZ2VubW9kZWwiIC8+IAorICA8L2V4dGVuc2lvbj4KKyAgPGV4dGVuc2lvbgorICAgICAgICBwb2ludD0ib3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmRpc2Vhc2Vtb2RlbCI+CisgICAgIDxjbGFzc2RlZgorICAgICAgICAgICBjbGFzcz0ib3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4cGVyaW1lbnRhbC5pbXBsLlBlcmNvbGF0aW9uRGlzZWFzZU1vZGVsSW1wbCI+CisgICAgIDwvY2xhc3NkZWY+CisgICAgIDxkdWJsaW5fY29yZQorICAgICAgICAgICBjcmVhdG9yPSIlZGNfY3JlYXRvcl9rYXVmbWFuIgorICAgICAgICAgICBkZXNjcmlwdGlvbj0iJWRjX3RpdGxlX1NQIgorICAgICAgICAgICBpZGVudGlmaWVyPSIlZGNfaWRlbnRpZXIiCisgICAgICAgICAgIGxpY2Vuc2U9IiVkY19saWNlbnNlIgorICAgICAgICAgICBwdWJsaXNoZXI9IiVkY19wdWJsaXNoZXIiCisgICAgICAgICAgIHNvdXJjZT0iJWRjX1NPVVJDRSIKKyAgICAgICAgICAgdGl0bGU9IiVkY190aXRsZV9TUCI+CisgICAgIDwvZHVibGluX2NvcmU+CisgIDwvZXh0ZW5zaW9uPgorPGV4dGVuc2lvbgorICAgICAgICBwb2ludD0ib3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmRpc2Vhc2Vtb2RlbCI+CisgICAgIDxjbGFzc2RlZgorICAgICAgICAgICBjbGFzcz0ib3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4cGVyaW1lbnRhbC5pbXBsLlRCRGlzZWFzZU1vZGVsSW1wbCI+CisgICAgIDwvY2xhc3NkZWY+CisgICAgIDxkdWJsaW5fY29yZQorICAgICAgICAgICBjcmVhdG9yPSIlZGNfY3JlYXRvcl9lZGx1bmQiCisgICAgICAgICAgIGRlc2NyaXB0aW9uPSIlZGNfZGVzY3JfVEIiCisgICAgICAgICAgIGlkZW50aWZpZXI9IiVkY19pZGVudGllciIKKyAgICAgICAgICAgbGljZW5zZT0iJWRjX2xpY2Vuc2UiCisgICAgICAgICAgIHB1Ymxpc2hlcj0iJWRjX3B1Ymxpc2hlciIKKyAgICAgICAgICAgc291cmNlPSIlZGNfU09VUkNFIgorICAgICAgICAgICB0aXRsZT0iJWRjX3RpdGxlX1RCIj4KKyAgICAgPC9kdWJsaW5fY29yZT4KKyAgPC9leHRlbnNpb24+Cis8L3BsdWdpbj4KZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4cGVyaW1lbnRhbC9wbHVnaW5fZGUucHJvcGVydGllcyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4cGVyaW1lbnRhbC9wbHVnaW5fZGUucHJvcGVydGllcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMDViMjI2Ci0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXhwZXJpbWVudGFsL3BsdWdpbl9kZS5wcm9wZXJ0aWVzCkBAIC0wLDAgKzEsNTggQEAKKyMgPGNvcHlyaWdodD4KKyMgPC9jb3B5cmlnaHQ+CisjCisjICRJZCQKKworIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorIyBUbyBjb2RlIGRldmVsb3BlcjoKKyMgICBEbyBOT1QgY2hhbmdlIHRoZSBwcm9wZXJ0aWVzIGJldHdlZW4gdGhpcyBsaW5lIGFuZCB0aGUKKyMgICAiJSUlIEVORCBPRiBUUkFOU0xBVEVEIFBST1BFUlRJRVMgJSUlIiBsaW5lLgorIyAgIE1ha2UgYSBuZXcgcHJvcGVydHkgbmFtZSwgYXBwZW5kIHRvIHRoZSBlbmQgb2YgdGhlIGZpbGUgYW5kIGNoYW5nZQorIyAgIHRoZSBjb2RlIHRvIHVzZSB0aGUgbmV3IHByb3BlcnR5LgorIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisjICUlJSBFTkQgT0YgVFJBTlNMQVRFRCBQUk9QRVJUSUVTICUlJQorIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitwbHVnaW5OYW1lPVNURU0gRXhwZXJpbWVudGVsbGVzIEtyYW5raGVpdHNtb2RlbGwKK3Byb3ZpZGVyTmFtZT1FY2xpcHNlLm9yZworZGNfY3JlYXRvcl9zdGVtdGVhbT1TVEVNIFRlYW0KK2RjX2NyZWF0b3JfZWRsdW5kPUVkbHVuZAorZGNfY3JlYXRvcl9rYXVmbWFuPUthdWZtYW4KK2RjX2lkZW50aWVyPVNURU0gS3JhbmtoZWl0c21vZGVsbAorZGNfcHVibGlzaGVyPURpZSBFY2xpcHNlIEZvdW5kYXRpb24KK2RjX2xpY2Vuc2U9RWNsaXBzZSBQdWJsaWMgTGljZW5zZSAoRVBMKQorZGNfU09VUkNFPWh0dHA6Ly93aWtpLmVjbGlwc2Uub3JnL0ludHJvZHVjdGlvbl90b19Db21wYXJ0bWVudF9Nb2RlbHMgKHVuZCBSZWZlcmVuemVuIGdpYnQgZXMtaW4pCitkY19kZXNjcl9UQj1CZWlzcGllbCBUQi1LcmFua2hlaXRzbW9kZWxsCitkY190aXRsZV9UQj1UQi1LcmFua2hlaXRzbW9kZWxsCitkY19kZXNjcl9TUD1CZWlzcGllbCBzdG9jaGFzdGlzY2hlcyBEdXJjaGZsdXNzLVNFSVItS3JhbmtoZWl0c21vZGVsbAorZGNfdGl0bGVfU1A9UGVya29sYXRpb25zLUtyYW5raGVpdHNtb2RlbGwKKworCitfVUlfQ3JlYXRlQ2hpbGRfdGV4dD17MH0KK19VSV9DcmVhdGVDaGlsZF90ZXh0Mj17MX0gezB9CitfVUlfQ3JlYXRlQ2hpbGRfdGV4dDM9ezF9CitfVUlfQ3JlYXRlQ2hpbGRfdG9vbHRpcD1OZXVlcyB7MH0gdW50ZXIgezF9IEZlYXR1cmUgZXJzdGVsbGVuCitfVUlfQ3JlYXRlQ2hpbGRfZGVzY3JpcHRpb249TmV1ZXMgS2luZCB2b20gVHlwIHswfSBmXHUwMGZjciBkYXMgezF9IE1lcmttYWwgZGVyIGF1c2dld1x1MDBlNGhsdGVuIHsyfSBlcnN0ZWxsZW4KK19VSV9DcmVhdGVTaWJsaW5nX2Rlc2NyaXB0aW9uPU5ldWVzIEdlc2Nod2lzdGVydGVpbCB2b20gVHlwIHswfSBmXHUwMGZjciBkZW4gYXVzZ2V3XHUwMGU0aGx0ZW4gezJ9IHVudGVyIGRlbSB7MX0gTWVya21hbCBkZXMgRWx0ZXJudGVpbCBlcnN0ZWxsZW4KKworX1VJX1Byb3BlcnR5RGVzY3JpcHRvcl9kZXNjcmlwdGlvbj17MH0gdm9uIHsxfQorCitfVUlfUGVyY29sYXRpb25EaXNlYXNlTW9kZWxfdHlwZT1QZXJrb2xhdGlvbnMtS3JhbmtoZWl0c21vZGVsbAorX1VJX1Vua25vd25fdHlwZT1PYmpla3QKKworX1VJX1Vua25vd25fZGF0YXR5cGU9V2VydAorCitfVUlfVW5rbm93bl9mZWF0dXJlPU5pY2h0IHNwZXppZml6aWVydAorCitfVUlfUGVyY3VsYXRpb25EaXNlYXNlTW9kZWxfdHlwZT1QZXJrb2xhdGlvbnMtS3JhbmtoZWl0c21vZGVsbAorX1VJX1RCRGlzZWFzZU1vZGVsTGFiZWxfdHlwZT1UQi1LcmFua2hlaXRzbW9kZWxsLUxhYmVsCitfVUlfVEJEaXNlYXNlTW9kZWxMYWJlbFZhbHVlX3R5cGU9VEItS3JhbmtoZWl0c21vZGVsbC1MYWJlbC1XZXJ0CitfVUlfVEJEaXNlYXNlTW9kZWxMYWJlbF9wcm9iZVZhbHVlX2ZlYXR1cmU9UHJvYmUtV2VydAorX1VJX1RCRGlzZWFzZU1vZGVsTGFiZWxfZGVsdGFWYWx1ZV9mZWF0dXJlPURlbHRhLVdlcnQKK19VSV9UQkRpc2Vhc2VNb2RlbExhYmVsX3RlbXBWYWx1ZV9mZWF0dXJlPVRlbXAtV2VydAorX1VJX1RCRGlzZWFzZU1vZGVsTGFiZWxfZXJyb3JTY2FsZV9mZWF0dXJlPUdyXHUwMGY2XHUwMGRmZW5vcmRudW5nIGRlcyBGZWhsZXJzCitfVUlfVEJEaXNlYXNlTW9kZWxMYWJlbFZhbHVlX2lsX2ZlYXR1cmU9SWwKK19VSV9UQkRpc2Vhc2VNb2RlbExhYmVsVmFsdWVfaWFfZmVhdHVyZT1JYQorX1VJX1RCRGlzZWFzZU1vZGVsX3R5cGU9VEItS3JhbmtoZWl0c21vZGVsbApkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXhwZXJpbWVudGFsL3BsdWdpbl9rci5wcm9wZXJ0aWVzIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXhwZXJpbWVudGFsL3BsdWdpbl9rci5wcm9wZXJ0aWVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE4Y2U3MzAKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leHBlcmltZW50YWwvcGx1Z2luX2tyLnByb3BlcnRpZXMKQEAgLTAsMCArMSw1OCBAQAorIyA8Y29weXJpZ2h0PgorIyA8L2NvcHlyaWdodD4KKyMKKyMgJElkJAorCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisjIFRvIGNvZGUgZGV2ZWxvcGVyOgorIyAgIERvIE5PVCBjaGFuZ2UgdGhlIHByb3BlcnRpZXMgYmV0d2VlbiB0aGlzIGxpbmUgYW5kIHRoZQorIyAgICIlJSUgRU5EIE9GIFRSQU5TTEFURUQgUFJPUEVSVElFUyAlJSUiIGxpbmUuCisjICAgTWFrZSBhIG5ldyBwcm9wZXJ0eSBuYW1lLCBhcHBlbmQgdG8gdGhlIGVuZCBvZiB0aGUgZmlsZSBhbmQgY2hhbmdlCisjICAgdGhlIGNvZGUgdG8gdXNlIHRoZSBuZXcgcHJvcGVydHkuCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyMgJSUlIEVORCBPRiBUUkFOU0xBVEVEIFBST1BFUlRJRVMgJSUlCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK3BsdWdpbk5hbWU9U1RFTSBcdWMyZTRcdWQ1ZDggXHVjOWM4XHViY2QxIFx1YmFhOFx1YjM3OAorcHJvdmlkZXJOYW1lPUVjbGlwc2Uub3JnCitkY19jcmVhdG9yX3N0ZW10ZWFtPVNURU0gXHVkMzAwCitkY19jcmVhdG9yX2VkbHVuZD1cdWM1ZDBcdWI0ZTRcdWI3ZjBcdWI0ZGMKK2RjX2NyZWF0b3Jfa2F1Zm1hbj1cdWNlNzRcdWQ1MDRcdWI5ZTgKK2RjX2lkZW50aWVyPVNURU0gXHVjOWM4XHViY2QxIFx1YmFhOFx1YjM3OAorZGNfcHVibGlzaGVyPVx1Yzc3NFx1ZDA3NFx1YjliZFx1YzJhNCBcdWM3YWNcdWIyZTgKK2RjX2xpY2Vuc2U9XHVjNzc0XHVkMDc0XHViOWJkXHVjMmE0IFx1YWNmNVx1YzZhOSBcdWMwYWNcdWM2YTkgXHVkNWM4XHVhYzAwXHVjMTFjIChFUEwpCitkY19TT1VSQ0U9aHR0cDovL3dpa2kuZWNsaXBzZS5vcmcvSW50cm9kdWN0aW9uX3RvX0NvbXBhcnRtZW50X01vZGVscyAoXHVhZGY4XHViOWFjXHVhY2UwIFx1Y2MzOFx1YWNlMCBcdWJiMzhcdWQ1Y2NcdWM1ZDBcdWMxMWMpCitkY19kZXNjcl9UQj1cdWM2MDhcdWM4MWMgXHVhY2IwXHVkNTc1IFx1YzljOFx1YmNkMSBcdWJhYThcdWIzNzgKK2RjX3RpdGxlX1RCPVRCIFx1YzljOFx1YmNkMSBcdWJhYThcdWIzNzgKK2RjX2Rlc2NyX1NQPVx1YzYwOFx1YzgxYyBcdWM1ZWNcdWFjZmNcdWM3NTggU0VJUlx1Yzc1OCBcdWQ2NTVcdWI5NjBcdWM4MDEgXHVjOWM4XHViY2QxIFx1YmFhOFx1YjM3OAorZGNfdGl0bGVfU1A9XHVjNWVjXHVhY2ZjIFx1YzljOFx1YmNkMSBcdWJhYThcdWIzNzgKKworCitfVUlfQ3JlYXRlQ2hpbGRfdGV4dD17MH0KK19VSV9DcmVhdGVDaGlsZF90ZXh0Mj17MX0gezB9CitfVUlfQ3JlYXRlQ2hpbGRfdGV4dDM9ezF9CitfVUlfQ3JlYXRlQ2hpbGRfdG9vbHRpcD17MX0gXHVhZTMwXHViMmE1IFx1ZDU1OFx1YzVkMCBcdWMwYzggezB9IFx1YjljY1x1YjRlNFx1YWUzMAorX1VJX0NyZWF0ZUNoaWxkX2Rlc2NyaXB0aW9uPVx1YzEyMFx1ZDBkZFx1ZDU1YyB7Mn1cdWM3NTggezF9IFx1YWUzMFx1YjJhNVx1YzVkMCBcdWIzMDBcdWQ1NWMgXHVkNjE1XHVjMmRkIHswfVx1Yzc1OCBcdWMwYzhcdWI4NWNcdWM2YjQgQ2hpbGRcdWI5N2MgXHViOWNjXHViNGVkXHViMmM4XHViMmU0LgorX1VJX0NyZWF0ZVNpYmxpbmdfZGVzY3JpcHRpb249XHViZDgwXHViYWE4XHVjNzU4IFx1YzEyMFx1ZDBkZFx1YjQxYyB7Mn1cdWM1ZDBcdWMxMWMgezF9IFx1YWUzMFx1YjJhNVx1YzVkMCBcdWIzMDBcdWQ1NWMgXHVkNjE1XHVjMmRkIHswfVx1Yzc1OCBcdWMwYzhcdWI4NWNcdWM2YjQgXHVkNjE1XHVjODFjXHViOTdjIFx1YjljY1x1YjRlZFx1YjJjOFx1YjJlNC4KKworX1VJX1Byb3BlcnR5RGVzY3JpcHRvcl9kZXNjcmlwdGlvbj17MX0gXHVjOTExIHswfQorCitfVUlfUGVyY29sYXRpb25EaXNlYXNlTW9kZWxfdHlwZT1cdWM1ZWNcdWFjZmMgXHVjOWM4XHViY2QxIFx1YmFhOFx1YjM3OAorX1VJX1Vua25vd25fdHlwZT1cdWFjMWNcdWNjYjQKKworX1VJX1Vua25vd25fZGF0YXR5cGU9XHVhYzEyCisKK19VSV9Vbmtub3duX2ZlYXR1cmU9XHVjOWMwXHVjODE1XHViNDE4XHVjOWMwIFx1YzU0YVx1Yzc0YworCitfVUlfUGVyY3VsYXRpb25EaXNlYXNlTW9kZWxfdHlwZT1cdWM1ZWNcdWFjZmMgXHVjOWM4XHViY2QxIFx1YmFhOFx1YjM3OAorX1VJX1RCRGlzZWFzZU1vZGVsTGFiZWxfdHlwZT1UQiBcdWM5YzhcdWJjZDEgXHViYWE4XHViMzc4IFx1Yjc3Y1x1YmNhOAorX1VJX1RCRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZV90eXBlPVRCIFx1YzljOFx1YmNkMSBcdWJhYThcdWIzNzggXHViNzdjXHViY2E4IFx1YWMxMgorX1VJX1RCRGlzZWFzZU1vZGVsTGFiZWxfcHJvYmVWYWx1ZV9mZWF0dXJlPVx1ZDBkMFx1YzBjOVx1Yzc5MCBcdWFjMTIKK19VSV9UQkRpc2Vhc2VNb2RlbExhYmVsX2RlbHRhVmFsdWVfZmVhdHVyZT1cdWIzNzhcdWQwYzAgXHVhYzEyCitfVUlfVEJEaXNlYXNlTW9kZWxMYWJlbF90ZW1wVmFsdWVfZmVhdHVyZT1cdWM2MjhcdWIzYzQgXHVhYzEyCitfVUlfVEJEaXNlYXNlTW9kZWxMYWJlbF9lcnJvclNjYWxlX2ZlYXR1cmU9XHVjNjI0XHViOTU4IFx1YzJhNFx1Y2YwMFx1Yzc3YworX1VJX1RCRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZV9pbF9mZWF0dXJlPUlsCitfVUlfVEJEaXNlYXNlTW9kZWxMYWJlbFZhbHVlX2lhX2ZlYXR1cmU9SUEKK19VSV9UQkRpc2Vhc2VNb2RlbF90eXBlPVRCIFx1YzljOFx1YmNkMSBcdWJhYThcdWIzNzgKZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4cGVyaW1lbnRhbC9wbHVnaW5femgucHJvcGVydGllcyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4cGVyaW1lbnRhbC9wbHVnaW5femgucHJvcGVydGllcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMDQzZWE2Ci0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXhwZXJpbWVudGFsL3BsdWdpbl96aC5wcm9wZXJ0aWVzCkBAIC0wLDAgKzEsNTggQEAKKyMgPGNvcHlyaWdodD4KKyMgPC9jb3B5cmlnaHQ+CisjCisjICRJZCQKKworIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorIyBUbyBjb2RlIGRldmVsb3BlcjoKKyMgICBEbyBOT1QgY2hhbmdlIHRoZSBwcm9wZXJ0aWVzIGJldHdlZW4gdGhpcyBsaW5lIGFuZCB0aGUKKyMgICAiJSUlIEVORCBPRiBUUkFOU0xBVEVEIFBST1BFUlRJRVMgJSUlIiBsaW5lLgorIyAgIE1ha2UgYSBuZXcgcHJvcGVydHkgbmFtZSwgYXBwZW5kIHRvIHRoZSBlbmQgb2YgdGhlIGZpbGUgYW5kIGNoYW5nZQorIyAgIHRoZSBjb2RlIHRvIHVzZSB0aGUgbmV3IHByb3BlcnR5LgorIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisjICUlJSBFTkQgT0YgVFJBTlNMQVRFRCBQUk9QRVJUSUVTICUlJQorIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitwbHVnaW5OYW1lPVNURU1cdTViOWVcdTlhOGNcdTc1YmVcdTc1YzVcdTZhMjFcdTU3OGIKK3Byb3ZpZGVyTmFtZT1FY2xpcHNlLm9yZworZGNfY3JlYXRvcl9zdGVtdGVhbT1TVEVNXHU1NmUyXHU5NjFmCitkY19jcmVhdG9yX2VkbHVuZD1FZGx1bmQKK2RjX2NyZWF0b3Jfa2F1Zm1hbj1LYXVmbWFuCitkY19pZGVudGllcj1TVEVNXHU3NWJlXHU3NWM1XHU2YTIxXHU1NzhiCitkY19wdWJsaXNoZXI9RWNsaXBzZVx1NTdmYVx1OTFkMVx1NGYxYQorZGNfbGljZW5zZT1FY2xpcHNlXHU1MTZjXHU1MTcxXHU4YmI4XHU1M2VmXHVmZjA4RVBMXHVmZjA5CitkY19TT1VSQ0U9aHR0cDovL3dpa2kuZWNsaXBzZS5vcmcvSW50cm9kdWN0aW9uX3RvX0NvbXBhcnRtZW50X01vZGVsc1x1ZmYwOFx1NTQ4Y1x1NTNjMlx1ODAwM1x1OGQ0NFx1NjU5OVx1NGUyZFx1ZmYwOQorZGNfZGVzY3JfVEI9XHU4MzAzXHU0ZjhiXHU4MGJhXHU3ZWQzXHU2ODM4XHU3NWM1XHU2YTIxXHU1NzhiCitkY190aXRsZV9UQj1cdTgwYmFcdTdlZDNcdTY4MzhcdTc1YzVcdTZhMjFcdTU3OGIKK2RjX2Rlc2NyX1NQPVx1NmUxN1x1OTAwZlx1NTc4YlNFSVJcdTk2OGZcdTY3M2FcdTc1YmVcdTc1YzVcdTZhMjFcdTU3OGJcdTgzMDNcdTRmOGIKK2RjX3RpdGxlX1NQPVx1NmUxN1x1NmQ0MVx1NzViZVx1NzVjNVx1NmEyMVx1NTc4YgorCisKK19VSV9DcmVhdGVDaGlsZF90ZXh0PXswfQorX1VJX0NyZWF0ZUNoaWxkX3RleHQyPXsxfSB7MH0KK19VSV9DcmVhdGVDaGlsZF90ZXh0Mz17MX0KK19VSV9DcmVhdGVDaGlsZF90b29sdGlwPVx1NTIxYlx1NWVmYVx1NTcyOHsxfSB7MH1cdTY1YjBcdTUyOWZcdTgwZmQKK19VSV9DcmVhdGVDaGlsZF9kZXNjcmlwdGlvbj1cdTRlM2FcdTkwMDlcdTViOWFcdTc2ODR7Mn1cdTc2ODR7MX1cdTcyNzlcdTYwMjdcdTY3NjVcdTUyMWJcdTVlZmFcdTRlMDBcdTRlMmFcdTY1YjBcdTc2ODR7MH1cdTViNTBcdTdjN2IKK19VSV9DcmVhdGVTaWJsaW5nX2Rlc2NyaXB0aW9uPVx1NTcyOHsxfVx1NzY4NFx1NzIzNlx1OTZjNlx1NGUyZFx1NGUzYVx1OTAwOVx1NWI5YVx1NzY4NHsyfVx1Njc2NVx1NTIxYlx1NWVmYVx1NGUwMFx1NGUyYXswfVx1N2M3Ylx1NTc4Ylx1NzY4NFx1NjViMFx1NzY4NFx1NTE0NFx1NWYxZlx1N2M3YgorCitfVUlfUHJvcGVydHlEZXNjcmlwdG9yX2Rlc2NyaXB0aW9uPXswfVx1NGVjZVx1NWM1ZXsxfQorCitfVUlfUGVyY29sYXRpb25EaXNlYXNlTW9kZWxfdHlwZT1cdTZlMTdcdTZkNDFcdTc1YmVcdTc1YzVcdTZhMjFcdTU3OGIKK19VSV9Vbmtub3duX3R5cGU9XHU1YmY5XHU4YzYxCisKK19VSV9Vbmtub3duX2RhdGF0eXBlPVx1NGVmN1x1NTAzYworCitfVUlfVW5rbm93bl9mZWF0dXJlPVx1NjcyYVx1NjMwN1x1NWI5YQorCitfVUlfUGVyY3VsYXRpb25EaXNlYXNlTW9kZWxfdHlwZT1cdTZlMTdcdTZkNDFcdTc1YmVcdTc1YzVcdTZhMjFcdTU3OGIKK19VSV9UQkRpc2Vhc2VNb2RlbExhYmVsX3R5cGU9XHU4MGJhXHU3ZWQzXHU2ODM4XHU3NWM1XHU2YTIxXHU1NzhiXHU2ODA3XHU3YjdlCitfVUlfVEJEaXNlYXNlTW9kZWxMYWJlbFZhbHVlX3R5cGU9XHU4MGJhXHU3ZWQzXHU2ODM4XHU3NWM1XHU2YTIxXHU1NzhiXHU2ODA3XHU3YjdlXHU1MDNjCitfVUlfVEJEaXNlYXNlTW9kZWxMYWJlbF9wcm9iZVZhbHVlX2ZlYXR1cmU9XHU2ZDRiXHU4YmQ1XHU2ODA3XHU3YjdlCitfVUlfVEJEaXNlYXNlTW9kZWxMYWJlbF9kZWx0YVZhbHVlX2ZlYXR1cmU9XHU1ZGVlXHU1MDNjCitfVUlfVEJEaXNlYXNlTW9kZWxMYWJlbF90ZW1wVmFsdWVfZmVhdHVyZT1cdTZlMjlcdTVlYTZcdTUwM2MKK19VSV9UQkRpc2Vhc2VNb2RlbExhYmVsX2Vycm9yU2NhbGVfZmVhdHVyZT1cdTk1MTlcdThiZWZcdTg5YzRcdTZhMjEKK19VSV9UQkRpc2Vhc2VNb2RlbExhYmVsVmFsdWVfaWxfZmVhdHVyZT18fAorX1VJX1RCRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZV9pYV9mZWF0dXJlPUlBCitfVUlfVEJEaXNlYXNlTW9kZWxfdHlwZT1cdTgwYmFcdTdlZDNcdTY4MzhcdTc1YzVcdTZhMjFcdTU3OGIKZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4cGVyaW1lbnRhbC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL2V4cGVyaW1lbnRhbC9DZWxsdWxhckF1dG9tYXRhTW9kZWxMYWJlbC5qYXZhIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXhwZXJpbWVudGFsL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvZXhwZXJpbWVudGFsL0NlbGx1bGFyQXV0b21hdGFNb2RlbExhYmVsLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmFkMzZlZQotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4cGVyaW1lbnRhbC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL2V4cGVyaW1lbnRhbC9DZWxsdWxhckF1dG9tYXRhTW9kZWxMYWJlbC5qYXZhCkBAIC0wLDAgKzEsNzEgQEAKKy8vIENlbGx1bGFyQXV0b21hdGFNb2RlbExhYmVsLmphdmEKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4cGVyaW1lbnRhbDsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuVVJJOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5TVEVNVVJJOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5EeW5hbWljTm9kZUxhYmVsOworCisvKioKKyAqIFRoaXMgaW50ZXJmYWNlIGRlZmluZXMgYSBjbGFzcyBpbiBhbiBFTUYgbW9kZWwgZm9yIGFuIFNURU0gRGlzZWFzZSBtb2RlbAorICogbGFiZWwuIEl0IGlzIHRoZSB0b3AtbGV2ZWwgZGlzZWFzZSBtb2RlbCwgYWxsIG90aGVyIGRpc2Vhc2UgbW9kZWwgbGFiZWxzCisgKiBkZXJpdmUgZnJvbSB0aGlzIGNsYXNzLgorICogCisgKiBAbW9kZWwgYWJzdHJhY3Q9InRydWUiCisgKi8KK3B1YmxpYyBpbnRlcmZhY2UgQ2VsbHVsYXJBdXRvbWF0YU1vZGVsTGFiZWwgZXh0ZW5kcyBEeW5hbWljTm9kZUxhYmVsIHsKKworCS8qKgorCSAqIFRoaXMgaXMgdGhlIHRvcC1sZXZlbCBzZWdtZW50IGZvciBhbGwgdHlwZSBVUkkncyBmb3IgZGlzZWFzZSBtb2RlbAorCSAqIGxhYmVscy4KKwkgKi8KKwlTdHJpbmcgVVJJX1RZUEVfRElTRUFTRV9NT0RFTF9MQUJFTF9TRUdNRU5UID0gVVJJX1RZUEVfRFlOQU1JQ19MQUJFTF9TRUdNRU5UCisJCQkrICIvZGlzZWFzZW1vZGVsIjsgLy8kTk9OLU5MUy0xJAorCisJLyoqCisJICogVGhpcyBpcyB0aGUgdHlwZSBVUkkgZm9yIGRpc2Vhc2UgbW9kZWwgbGFiZWxzCisJICovCisJVVJJIFVSSV9UWVBFX1NJUl9MQUJFTCA9IFNURU1VUkkKKwkJCS5jcmVhdGVUeXBlVVJJKFVSSV9UWVBFX0RJU0VBU0VfTU9ERUxfTEFCRUxfU0VHTUVOVCk7CisKKwkKKworCS8qKgorCSAqIEByZXR1cm4gdGhlIGRpc2Vhc2UgbW9kZWwgc3RhdGUgYXNzb2NpYXRlZCB3aXRoIHRoaXMgbGFiZWwgKGlmIGFueSkuCisJICogQG1vZGVsIGNvbnRhaW5tZW50PSJ0cnVlIiBvcHBvc2l0ZT0ibGFiZWwiCisJICovCisJQ2VsbHVsYXJBdXRvbWF0YU1vZGVsU3RhdGUgZ2V0Q2VsbHVsYXJBdXRvbWF0YU1vZGVsU3RhdGUoKTsKKworCS8qKgorCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPkRpc2Vhc2UgTW9kZWwgU3RhdGU8L2VtPiBjb250YWlubWVudCByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+RGlzZWFzZSBNb2RlbCBTdGF0ZTwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UuCisJICogQGdlbmVyYXRlZAorCSAqLworCXZvaWQgc2V0Q2VsbHVsYXJBdXRvbWF0YU1vZGVsU3RhdGUoQ2VsbHVsYXJBdXRvbWF0YU1vZGVsU3RhdGUgdmFsdWUpOworCisJCisJCisJCisJLyoqCisJICogQHJldHVybiB0aGUgY3VycmVudCBTSSBsYWJlbCB2YWx1ZQorCSAqIEBtb2RlbCB2b2xhdGlsZT0idHJ1ZSIgY2hhbmdlYWJsZT0iZmFsc2UiIHJlc29sdmVQcm94aWVzPSJmYWxzZSIKKwkgKi8KKwlDZWxsdWxhckF1dG9tYXRhTW9kZWxMYWJlbFZhbHVlIGdldEN1cnJlbnRDZWxsdWxhckF1dG9tYXRhTW9kZWxMYWJlbFZhbHVlKCk7CisKKwkvKioKKwkgKiBAcmV0dXJuIHRoZSBuZXh0IFNJIGxhYmVsIHZhbHVlCisJICogQG1vZGVsIHZvbGF0aWxlPSJ0cnVlIiBjaGFuZ2VhYmxlPSJmYWxzZSIgcmVzb2x2ZVByb3hpZXM9ImZhbHNlIgorCSAqLworCUNlbGx1bGFyQXV0b21hdGFNb2RlbExhYmVsVmFsdWUgZ2V0TmV4dENlbGx1bGFyQXV0b21hdGFNb2RlbExhYmVsVmFsdWUoKTsKK30gLy8gQ2VsbHVsYXJBdXRvbWF0YU1vZGVsTGFiZWwKZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4cGVyaW1lbnRhbC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL2V4cGVyaW1lbnRhbC9DZWxsdWxhckF1dG9tYXRhTW9kZWxMYWJlbFZhbHVlLmphdmEgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leHBlcmltZW50YWwvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9leHBlcmltZW50YWwvQ2VsbHVsYXJBdXRvbWF0YU1vZGVsTGFiZWxWYWx1ZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRhOGFhZGUKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leHBlcmltZW50YWwvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9leHBlcmltZW50YWwvQ2VsbHVsYXJBdXRvbWF0YU1vZGVsTGFiZWxWYWx1ZS5qYXZhCkBAIC0wLDAgKzEsNjcgQEAKKy8vIENlbGx1bGFyQXV0b21hdGFNb2RlbExhYmVsVmFsdWUuamF2YQorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXhwZXJpbWVudGFsOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5MYWJlbFZhbHVlOworCisvKioKKyAqIFRoaXMgaW50ZXJmYWNlIGRlZmluZXMgYSBjbGFzcyBpbiBhbiBFTUYgbW9kZWwgZm9yIGFuIGRpc2Vhc2UgbW9kZWwgbGFiZWwKKyAqIHZhbHVlLiBUaGUgdmFsdWVzIG9mIHRoaXMgbGFiZWwgcmVjb3JkIHRoZSBudW1iZXIgb2YgcG9wdWxhdGlvbiBtZW1iZXJzIHdobworICogaGF2ZSBiZWVuICJib3JuIiBhbmQgd2hvIGhhdmUgImRpZWQiLgorICogCisgKiBAbW9kZWwgYWJzdHJhY3Q9InRydWUiCisgKi8KKworcHVibGljIGludGVyZmFjZSBDZWxsdWxhckF1dG9tYXRhTW9kZWxMYWJlbFZhbHVlIGV4dGVuZHMgTGFiZWxWYWx1ZSB7CisKKwkKKwkKKwkvKioKKwkgKiBAcmV0dXJuIHRoZSBnZW5vbWUgcHJvcGVydHkgCisJICogQG1vZGVsIGRlZmF1bHQ9IjAiCisJICovCisJZG91YmxlIGdldEdlbm9tZSgpOworCisJLyoqCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlIDxlbT5HZW5vbWU8L2VtPiBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+QmlydGhzPC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJdm9pZCBzZXRHZW5vbWUoU3RyaW5nIHZhbHVlKTsKKworCisJLyoqCisJICogU2V0IHRoZSB2YWx1ZSBvZiB0aGlzIGRpc2Vhc2UgbW9kZWwgbGFiZWwgdG8gYmUgdGhlIHNhbWUgYXMgdGhlIHZhbHVlCisJICogCisJICogQHBhcmFtIHZhbHVlCisJICogICAgICAgICAgICB0aGUgbmV3IHZhbHVlIGZvciB0aGlzIGRpc2Vhc2UgbW9kZWwgdmFsdWUKKwkgKiBAcmV0dXJuIHRoaXMgaW5zdGFuY2Ugd2l0aCB0aGUgbmV3IHZhbHVlcworCSAqIAorCSAqIEBtb2RlbCB2b2xhdGlsZT0idHJ1ZSIgdHJhbnNpZW50PSJ0cnVlIiBjaGFuZ2VhYmxlPSJmYWxzZSIKKwkgKi8KKwlDZWxsdWxhckF1dG9tYXRhTW9kZWxMYWJlbFZhbHVlIHNldChmaW5hbCBDZWxsdWxhckF1dG9tYXRhTW9kZWxMYWJlbFZhbHVlIHZhbHVlKTsKKworCS8qKgorCSAqIEFkZCB0aGUgdmFsdWUgb2YgdGhpcyBkaXNlYXNlIG1vZGVsIGxhYmVsIHRvIHRoZSB2YWx1ZQorCSAqIAorCSAqIEBwYXJhbSB2YWx1ZQorCSAqICAgICAgICAgICAgdGhlIHZhbHVlIHRvIGJlIGFkZGVkIHRvIHRoaXMgZGlzZWFzZSBtb2RlbCB2YWx1ZQorCSAqIEByZXR1cm4gdGhpcyBpbnN0YW5jZSB3aXRoIHRoZSBzdW0gb2YgdmFsdWVzCisJICogCisJICogQG1vZGVsIHZvbGF0aWxlPSJ0cnVlIiB0cmFuc2llbnQ9InRydWUiIGNoYW5nZWFibGU9ImZhbHNlIgorCSAqLworCUNlbGx1bGFyQXV0b21hdGFNb2RlbExhYmVsVmFsdWUgYWRkKGZpbmFsIENlbGx1bGFyQXV0b21hdGFNb2RlbExhYmVsVmFsdWUgdmFsdWUpOworCisJCit9IC8vIENlbGx1bGFyQXV0b21hdGFNb2RlbExhYmVsVmFsdWUKZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4cGVyaW1lbnRhbC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL2V4cGVyaW1lbnRhbC9DZWxsdWxhckF1dG9tYXRhTW9kZWxTdGF0ZS5qYXZhIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXhwZXJpbWVudGFsL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvZXhwZXJpbWVudGFsL0NlbGx1bGFyQXV0b21hdGFNb2RlbFN0YXRlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2M4MzU2YgotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4cGVyaW1lbnRhbC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL2V4cGVyaW1lbnRhbC9DZWxsdWxhckF1dG9tYXRhTW9kZWxTdGF0ZS5qYXZhCkBAIC0wLDAgKzEsNDkgQEAKKy8vIENlbGx1bGFyQXV0b21hdGFNb2RlbFN0YXRlLmphdmEKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4cGVyaW1lbnRhbDsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLlNhbml0eUNoZWNrZXI7CisKKy8qKgorICogVGhpcyBpbnRlcmZhY2UgZGVmaW5lcyBhIGNsYXNzIGluIGFuIEVNRiBtb2RlbCB0aGF0IGNvbnRhaW5zIHN0YXRlCisgKiBpbmZvcm1hdGlvbiBmb3IgYSBTVEVNIGNlbGx1bGFyIGF1dG9tYXRhIG1vZGVsJ3MgY29tcHV0YXRpb25zIGZyb20gb25lIHNpbXVsYXRpb24gY3ljbGUKKyAqIHRvIGFub3RoZXIuIFRoZSBiYXNpYyBpZGVhIGlzIHRoYXQgdGhlIGNlbGx1bGFyIGF1dG9tYXRhIG1vZGVsIGNhbiBzdG9yZSBzdGF0ZQorICogaW5mb3JtYXRpb24gaW4gYW4gaW5zdGFuY2UgYW5kIGF0dGFjaCBpdCB0byBhIGNlbGx1bGFyIGF1dG9tYXRhIG1vZGVsIGxhYmVsIHN1Y2ggdGhhdAorICogd2hlbiBpdCByZXZpc2l0cyB0aGUgbGFiZWwgdG8gY29tcHV0ZSBpdHMgdmFsdWUgaXQgY2FuIHJlZmVyIHRvIHRoZSBzdGF0ZQorICogaW5mb3JtYXRpb24gdG8gYXMgcGFydCBvZiBpdHMgY29tcHV0YXRpb24uIEZvciBpbnN0YW5jZSwgaWYgdGhlIHZhbHVlIG9mCisgKiBhIGxhYmVsIGlzIGRlcGVuZGVudCBvbiB0aGUgdmFsdWVzIG9mIG90aGVyIGxhYmVscywgcmVmZXJlbmNlcyB0byB0aG9zZQorICogbGFiZWxzIGNvdWxkIGJlICJjYWNoZWQiIGluIHRoZSBzdGF0ZSBpbnN0YW5jZSBhbmQgbm90IHJlY29tcHV0ZWQgZm9yIGVhY2gKKyAqIGN5Y2xlLgorICogCisgKiBAbW9kZWwgYWJzdHJhY3Q9InRydWUiCisgKiBAaW1wbGVtZW50cyBTYW5pdHlDaGVja2VyCisgKi8KK3B1YmxpYyBpbnRlcmZhY2UgQ2VsbHVsYXJBdXRvbWF0YU1vZGVsU3RhdGUgZXh0ZW5kcyBFT2JqZWN0LCBTYW5pdHlDaGVja2VyIHsKKworCS8qKgorCSAqIEByZXR1cm4gdGhlIGxhYmVsIGFzc29jaWF0ZWQgd2l0aCB0aGUgc3RhdGUgaW5mb3JtYXRpb24KKwkgKiBAbW9kZWwKKwkgKi8KKwlDZWxsdWxhckF1dG9tYXRhTW9kZWxMYWJlbCBnZXRMYWJlbCgpOworCisJLyoqCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4cGVyaW1lbnRhbC5DZWxsdWxhckF1dG9tYXRhTW9kZWxTdGF0ZSNnZXRMYWJlbCA8ZW0+TGFiZWw8L2VtPn0nIGNvbnRhaW5lciByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+TGFiZWw8L2VtPicgY29udGFpbmVyIHJlZmVyZW5jZS4KKwkgKiBAc2VlICNnZXRMYWJlbCgpCisJICogQGdlbmVyYXRlZAorCSAqLworCXZvaWQgc2V0TGFiZWwoQ2VsbHVsYXJBdXRvbWF0YU1vZGVsTGFiZWwgdmFsdWUpOworCit9Ly8gQ2VsbHVsYXJBdXRvbWF0YU1vZGVsU3RhdGUKZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4cGVyaW1lbnRhbC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL2V4cGVyaW1lbnRhbC9DZWxsdWxhckRpc2Vhc2VNb2RlbC5qYXZhIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXhwZXJpbWVudGFsL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvZXhwZXJpbWVudGFsL0NlbGx1bGFyRGlzZWFzZU1vZGVsLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTJlZWZiNQotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4cGVyaW1lbnRhbC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL2V4cGVyaW1lbnRhbC9DZWxsdWxhckRpc2Vhc2VNb2RlbC5qYXZhCkBAIC0wLDAgKzEsMjQgQEAKKy8vIENlbGx1bGFyRGlzZWFzZU1vZGVsLmphdmEKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4cGVyaW1lbnRhbDsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmREaXNlYXNlTW9kZWw7CisKKy8qKgorICogVGhpcyBpbnRlcmZhY2UgaXMgYW4gRU1GIE1vZGVsLgorICogCisgKiBAbW9kZWwKKyAqLworcHVibGljIGludGVyZmFjZSBDZWxsdWxhckRpc2Vhc2VNb2RlbCBleHRlbmRzIFN0YW5kYXJkRGlzZWFzZU1vZGVsIHsKKwkvLyBOb3RoaW5nCit9IC8vIENlbGx1bGFyRGlzZWFzZU1vZGVsCmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leHBlcmltZW50YWwvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9leHBlcmltZW50YWwvRXhwZXJpbWVudGFsRmFjdG9yeS5qYXZhIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXhwZXJpbWVudGFsL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvZXhwZXJpbWVudGFsL0V4cGVyaW1lbnRhbEZhY3RvcnkuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYWZmYmFjCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXhwZXJpbWVudGFsL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvZXhwZXJpbWVudGFsL0V4cGVyaW1lbnRhbEZhY3RvcnkuamF2YQpAQCAtMCwwICsxLDc4IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leHBlcmltZW50YWw7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDkgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVGYWN0b3J5OworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiBUaGUgPGI+RmFjdG9yeTwvYj4gZm9yIHRoZSBtb2RlbC4KKyAqIEl0IHByb3ZpZGVzIGEgY3JlYXRlIG1ldGhvZCBmb3IgZWFjaCBub24tYWJzdHJhY3QgY2xhc3Mgb2YgdGhlIG1vZGVsLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leHBlcmltZW50YWwuRXhwZXJpbWVudGFsUGFja2FnZQorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgaW50ZXJmYWNlIEV4cGVyaW1lbnRhbEZhY3RvcnkgZXh0ZW5kcyBFRmFjdG9yeSB7CisJLyoqCisJICogVGhlIHNpbmdsZXRvbiBpbnN0YW5jZSBvZiB0aGUgZmFjdG9yeS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFeHBlcmltZW50YWxGYWN0b3J5IGVJTlNUQU5DRSA9IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leHBlcmltZW50YWwuaW1wbC5FeHBlcmltZW50YWxGYWN0b3J5SW1wbC5pbml0KCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPlBlcmNvbGF0aW9uIERpc2Vhc2UgTW9kZWw8L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPlBlcmNvbGF0aW9uIERpc2Vhc2UgTW9kZWw8L2VtPicuCisJICogQGdlbmVyYXRlZAorCSAqLworCVBlcmNvbGF0aW9uRGlzZWFzZU1vZGVsIGNyZWF0ZVBlcmNvbGF0aW9uRGlzZWFzZU1vZGVsKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPlRCIERpc2Vhc2UgTW9kZWwgTGFiZWw8L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPlRCIERpc2Vhc2UgTW9kZWwgTGFiZWw8L2VtPicuCisJICogQGdlbmVyYXRlZAorCSAqLworCVRCRGlzZWFzZU1vZGVsTGFiZWwgY3JlYXRlVEJEaXNlYXNlTW9kZWxMYWJlbCgpOworCisJLyoqCisJICogUmV0dXJucyBhIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5UQiBEaXNlYXNlIE1vZGVsIExhYmVsIFZhbHVlPC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiBhIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5UQiBEaXNlYXNlIE1vZGVsIExhYmVsIFZhbHVlPC9lbT4nLgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlUQkRpc2Vhc2VNb2RlbExhYmVsVmFsdWUgY3JlYXRlVEJEaXNlYXNlTW9kZWxMYWJlbFZhbHVlKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPlRCIERpc2Vhc2UgTW9kZWw8L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPlRCIERpc2Vhc2UgTW9kZWw8L2VtPicuCisJICogQGdlbmVyYXRlZAorCSAqLworCVRCRGlzZWFzZU1vZGVsIGNyZWF0ZVRCRGlzZWFzZU1vZGVsKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBwYWNrYWdlIHN1cHBvcnRlZCBieSB0aGlzIGZhY3RvcnkuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBwYWNrYWdlIHN1cHBvcnRlZCBieSB0aGlzIGZhY3RvcnkuCisJICogQGdlbmVyYXRlZAorCSAqLworCUV4cGVyaW1lbnRhbFBhY2thZ2UgZ2V0RXhwZXJpbWVudGFsUGFja2FnZSgpOworCit9IC8vRXhwZXJpbWVudGFsRmFjdG9yeQpkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXhwZXJpbWVudGFsL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvZXhwZXJpbWVudGFsL0V4cGVyaW1lbnRhbFBhY2thZ2UuamF2YSBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4cGVyaW1lbnRhbC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL2V4cGVyaW1lbnRhbC9FeHBlcmltZW50YWxQYWNrYWdlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2JlYmZkNgotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4cGVyaW1lbnRhbC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL2V4cGVyaW1lbnRhbC9FeHBlcmltZW50YWxQYWNrYWdlLmphdmEKQEAgLTAsMCArMSw4NzkgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4cGVyaW1lbnRhbDsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUF0dHJpYnV0ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRVJlZmVyZW5jZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmRQYWNrYWdlOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiBUaGUgPGI+UGFja2FnZTwvYj4gZm9yIHRoZSBtb2RlbC4KKyAqIEl0IGNvbnRhaW5zIGFjY2Vzc29ycyBmb3IgdGhlIG1ldGEgb2JqZWN0cyB0byByZXByZXNlbnQKKyAqIDx1bD4KKyAqICAgPGxpPmVhY2ggY2xhc3MsPC9saT4KKyAqICAgPGxpPmVhY2ggZmVhdHVyZSBvZiBlYWNoIGNsYXNzLDwvbGk+CisgKiAgIDxsaT5lYWNoIGVudW0sPC9saT4KKyAqICAgPGxpPmFuZCBlYWNoIGRhdGEgdHlwZTwvbGk+CisgKiA8L3VsPgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leHBlcmltZW50YWwuRXhwZXJpbWVudGFsRmFjdG9yeQorICogQG1vZGVsIGtpbmQ9InBhY2thZ2UiCisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBpbnRlcmZhY2UgRXhwZXJpbWVudGFsUGFja2FnZSBleHRlbmRzIEVQYWNrYWdlIHsKKwkvKioKKwkgKiBUaGUgcGFja2FnZSBuYW1lLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCVN0cmluZyBlTkFNRSA9ICJleHBlcmltZW50YWwiOworCisJLyoqCisJICogVGhlIHBhY2thZ2UgbmFtZXNwYWNlIFVSSS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlTdHJpbmcgZU5TX1VSSSA9ICJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9leHBlcmltZW50YWwuZWNvcmUiOworCisJLyoqCisJICogVGhlIHBhY2thZ2UgbmFtZXNwYWNlIG5hbWUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJU3RyaW5nIGVOU19QUkVGSVggPSAib3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4cGVyaW1lbnRhbCI7CisKKwkvKioKKwkgKiBUaGUgc2luZ2xldG9uIGluc3RhbmNlIG9mIHRoZSBwYWNrYWdlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUV4cGVyaW1lbnRhbFBhY2thZ2UgZUlOU1RBTkNFID0gb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4cGVyaW1lbnRhbC5pbXBsLkV4cGVyaW1lbnRhbFBhY2thZ2VJbXBsLmluaXQoKTsKKworCS8qKgorCSAqIFRoZSBtZXRhIG9iamVjdCBpZCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4cGVyaW1lbnRhbC5pbXBsLlBlcmNvbGF0aW9uRGlzZWFzZU1vZGVsSW1wbCA8ZW0+UGVyY29sYXRpb24gRGlzZWFzZSBNb2RlbDwvZW0+fScgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leHBlcmltZW50YWwuaW1wbC5QZXJjb2xhdGlvbkRpc2Vhc2VNb2RlbEltcGwKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leHBlcmltZW50YWwuaW1wbC5FeHBlcmltZW50YWxQYWNrYWdlSW1wbCNnZXRQZXJjb2xhdGlvbkRpc2Vhc2VNb2RlbCgpCisJICogQGdlbmVyYXRlZAorCSAqLworCWludCBQRVJDT0xBVElPTl9ESVNFQVNFX01PREVMID0gMDsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5VUkk8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBQRVJDT0xBVElPTl9ESVNFQVNFX01PREVMX19VUkkgPSBTdGFuZGFyZFBhY2thZ2UuU1RPQ0hBU1RJQ19TRUlSX0RJU0VBU0VfTU9ERUxfX1VSSTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5UeXBlIFVSSTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFBFUkNPTEFUSU9OX0RJU0VBU0VfTU9ERUxfX1RZUEVfVVJJID0gU3RhbmRhcmRQYWNrYWdlLlNUT0NIQVNUSUNfU0VJUl9ESVNFQVNFX01PREVMX19UWVBFX1VSSTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5EdWJsaW4gQ29yZTwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFBFUkNPTEFUSU9OX0RJU0VBU0VfTU9ERUxfX0RVQkxJTl9DT1JFID0gU3RhbmRhcmRQYWNrYWdlLlNUT0NIQVNUSUNfU0VJUl9ESVNFQVNFX01PREVMX19EVUJMSU5fQ09SRTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5MYWJlbHMgVG8gVXBkYXRlPC9iPjwvZW0+JyByZWZlcmVuY2UgbGlzdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBQRVJDT0xBVElPTl9ESVNFQVNFX01PREVMX19MQUJFTFNfVE9fVVBEQVRFID0gU3RhbmRhcmRQYWNrYWdlLlNUT0NIQVNUSUNfU0VJUl9ESVNFQVNFX01PREVMX19MQUJFTFNfVE9fVVBEQVRFOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkdyYXBoPC9iPjwvZW0+JyBjb250YWluZXIgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFBFUkNPTEFUSU9OX0RJU0VBU0VfTU9ERUxfX0dSQVBIID0gU3RhbmRhcmRQYWNrYWdlLlNUT0NIQVNUSUNfU0VJUl9ESVNFQVNFX01PREVMX19HUkFQSDsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5FbmFibGVkPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgUEVSQ09MQVRJT05fRElTRUFTRV9NT0RFTF9fRU5BQkxFRCA9IFN0YW5kYXJkUGFja2FnZS5TVE9DSEFTVElDX1NFSVJfRElTRUFTRV9NT0RFTF9fRU5BQkxFRDsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5HcmFwaCBEZWNvcmF0ZWQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBQRVJDT0xBVElPTl9ESVNFQVNFX01PREVMX19HUkFQSF9ERUNPUkFURUQgPSBTdGFuZGFyZFBhY2thZ2UuU1RPQ0hBU1RJQ19TRUlSX0RJU0VBU0VfTU9ERUxfX0dSQVBIX0RFQ09SQVRFRDsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5Qcm9ncmVzczwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFBFUkNPTEFUSU9OX0RJU0VBU0VfTU9ERUxfX1BST0dSRVNTID0gU3RhbmRhcmRQYWNrYWdlLlNUT0NIQVNUSUNfU0VJUl9ESVNFQVNFX01PREVMX19QUk9HUkVTUzsKKworCQorCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5Qb3B1bGF0aW9uIElkZW50aWZpZXI8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBQRVJDT0xBVElPTl9ESVNFQVNFX01PREVMX19QT1BVTEFUSU9OX0lERU5USUZJRVIgPSBTdGFuZGFyZFBhY2thZ2UuU1RPQ0hBU1RJQ19TRUlSX0RJU0VBU0VfTU9ERUxfX1BPUFVMQVRJT05fSURFTlRJRklFUjsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5UaW1lIFBlcmlvZDwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFBFUkNPTEFUSU9OX0RJU0VBU0VfTU9ERUxfX1RJTUVfUEVSSU9EID0gU3RhbmRhcmRQYWNrYWdlLlNUT0NIQVNUSUNfU0VJUl9ESVNFQVNFX01PREVMX19USU1FX1BFUklPRDsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5EaXNlYXNlIE5hbWU8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBQRVJDT0xBVElPTl9ESVNFQVNFX01PREVMX19ESVNFQVNFX05BTUUgPSBTdGFuZGFyZFBhY2thZ2UuU1RPQ0hBU1RJQ19TRUlSX0RJU0VBU0VfTU9ERUxfX0RJU0VBU0VfTkFNRTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5GaW5pdGUgRGlmZmVyZW5jZTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFBFUkNPTEFUSU9OX0RJU0VBU0VfTU9ERUxfX0ZJTklURV9ESUZGRVJFTkNFID0gU3RhbmRhcmRQYWNrYWdlLlNUT0NIQVNUSUNfU0VJUl9ESVNFQVNFX01PREVMX19GSU5JVEVfRElGRkVSRU5DRTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5GcmVxdWVuY3kgRGVwZW5kZW50PC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgUEVSQ09MQVRJT05fRElTRUFTRV9NT0RFTF9fRlJFUVVFTkNZX0RFUEVOREVOVCA9IFN0YW5kYXJkUGFja2FnZS5TVE9DSEFTVElDX1NFSVJfRElTRUFTRV9NT0RFTF9fRlJFUVVFTkNZX0RFUEVOREVOVDsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5SZWZlcmVuY2UgUG9wdWxhdGlvbiBEZW5zaXR5PC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgUEVSQ09MQVRJT05fRElTRUFTRV9NT0RFTF9fUkVGRVJFTkNFX1BPUFVMQVRJT05fREVOU0lUWSA9IFN0YW5kYXJkUGFja2FnZS5TVE9DSEFTVElDX1NFSVJfRElTRUFTRV9NT0RFTF9fUkVGRVJFTkNFX1BPUFVMQVRJT05fREVOU0lUWTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5Sb2FkIE5ldHdvcmsgSW5mZWN0aW91cyBQcm9wb3J0aW9uPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgUEVSQ09MQVRJT05fRElTRUFTRV9NT0RFTF9fUk9BRF9ORVRXT1JLX0lORkVDVElPVVNfUFJPUE9SVElPTiA9IFN0YW5kYXJkUGFja2FnZS5TVE9DSEFTVElDX1NFSVJfRElTRUFTRV9NT0RFTF9fUk9BRF9ORVRXT1JLX0lORkVDVElPVVNfUFJPUE9SVElPTjsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5DaGFyYWN0ZXJpc3RpYyBNaXhpbmcgRGlzdGFuY2U8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBQRVJDT0xBVElPTl9ESVNFQVNFX01PREVMX19DSEFSQUNURVJJU1RJQ19NSVhJTkdfRElTVEFOQ0UgPSBTdGFuZGFyZFBhY2thZ2UuU1RPQ0hBU1RJQ19TRUlSX0RJU0VBU0VfTU9ERUxfX0NIQVJBQ1RFUklTVElDX01JWElOR19ESVNUQU5DRTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5UcmFuc21pc3Npb24gUmF0ZTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFBFUkNPTEFUSU9OX0RJU0VBU0VfTU9ERUxfX1RSQU5TTUlTU0lPTl9SQVRFID0gU3RhbmRhcmRQYWNrYWdlLlNUT0NIQVNUSUNfU0VJUl9ESVNFQVNFX01PREVMX19UUkFOU01JU1NJT05fUkFURTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5Ob24gTGluZWFyaXR5IENvZWZmaWNpZW50PC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgUEVSQ09MQVRJT05fRElTRUFTRV9NT0RFTF9fTk9OX0xJTkVBUklUWV9DT0VGRklDSUVOVCA9IFN0YW5kYXJkUGFja2FnZS5TVE9DSEFTVElDX1NFSVJfRElTRUFTRV9NT0RFTF9fTk9OX0xJTkVBUklUWV9DT0VGRklDSUVOVDsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5SZWNvdmVyeSBSYXRlPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgUEVSQ09MQVRJT05fRElTRUFTRV9NT0RFTF9fUkVDT1ZFUllfUkFURSA9IFN0YW5kYXJkUGFja2FnZS5TVE9DSEFTVElDX1NFSVJfRElTRUFTRV9NT0RFTF9fUkVDT1ZFUllfUkFURTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5JbmZlY3Rpb3VzIE1vcnRhbGl0eSBSYXRlPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgUEVSQ09MQVRJT05fRElTRUFTRV9NT0RFTF9fSU5GRUNUSU9VU19NT1JUQUxJVFlfUkFURSA9IFN0YW5kYXJkUGFja2FnZS5TVE9DSEFTVElDX1NFSVJfRElTRUFTRV9NT0RFTF9fSU5GRUNUSU9VU19NT1JUQUxJVFlfUkFURTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5JbW11bml0eSBMb3NzIFJhdGU8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBQRVJDT0xBVElPTl9ESVNFQVNFX01PREVMX19JTU1VTklUWV9MT1NTX1JBVEUgPSBTdGFuZGFyZFBhY2thZ2UuU1RPQ0hBU1RJQ19TRUlSX0RJU0VBU0VfTU9ERUxfX0lNTVVOSVRZX0xPU1NfUkFURTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5JbmN1YmF0aW9uIFJhdGU8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBQRVJDT0xBVElPTl9ESVNFQVNFX01PREVMX19JTkNVQkFUSU9OX1JBVEUgPSBTdGFuZGFyZFBhY2thZ2UuU1RPQ0hBU1RJQ19TRUlSX0RJU0VBU0VfTU9ERUxfX0lOQ1VCQVRJT05fUkFURTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5TZWVkPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgUEVSQ09MQVRJT05fRElTRUFTRV9NT0RFTF9fU0VFRCA9IFN0YW5kYXJkUGFja2FnZS5TVE9DSEFTVElDX1NFSVJfRElTRUFTRV9NT0RFTF9fU0VFRDsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5SYW5kb20gR2VuZXJhdG9yPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgUEVSQ09MQVRJT05fRElTRUFTRV9NT0RFTF9fUkFORE9NX0dFTkVSQVRPUiA9IFN0YW5kYXJkUGFja2FnZS5TVE9DSEFTVElDX1NFSVJfRElTRUFTRV9NT0RFTF9fUkFORE9NX0dFTkVSQVRPUjsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5HYWluPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgUEVSQ09MQVRJT05fRElTRUFTRV9NT0RFTF9fR0FJTiA9IFN0YW5kYXJkUGFja2FnZS5TVE9DSEFTVElDX1NFSVJfRElTRUFTRV9NT0RFTF9fR0FJTjsKKworCS8qKgorCSAqIFRoZSBudW1iZXIgb2Ygc3RydWN0dXJhbCBmZWF0dXJlcyBvZiB0aGUgJzxlbT5QZXJjb2xhdGlvbiBEaXNlYXNlIE1vZGVsPC9lbT4nIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFBFUkNPTEFUSU9OX0RJU0VBU0VfTU9ERUxfRkVBVFVSRV9DT1VOVCA9IFN0YW5kYXJkUGFja2FnZS5TVE9DSEFTVElDX1NFSVJfRElTRUFTRV9NT0RFTF9GRUFUVVJFX0NPVU5UICsgMDsKKworCS8qKgorCSAqIFRoZSBtZXRhIG9iamVjdCBpZCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4cGVyaW1lbnRhbC5pbXBsLlRCRGlzZWFzZU1vZGVsTGFiZWxJbXBsIDxlbT5UQiBEaXNlYXNlIE1vZGVsIExhYmVsPC9lbT59JyBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4cGVyaW1lbnRhbC5pbXBsLlRCRGlzZWFzZU1vZGVsTGFiZWxJbXBsCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXhwZXJpbWVudGFsLmltcGwuRXhwZXJpbWVudGFsUGFja2FnZUltcGwjZ2V0VEJEaXNlYXNlTW9kZWxMYWJlbCgpCisJICogQGdlbmVyYXRlZAorCSAqLworCWludCBUQl9ESVNFQVNFX01PREVMX0xBQkVMID0gMTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5VUkk8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBUQl9ESVNFQVNFX01PREVMX0xBQkVMX19VUkkgPSBTdGFuZGFyZFBhY2thZ2UuU1RBTkRBUkRfRElTRUFTRV9NT0RFTF9MQUJFTF9fVVJJOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlR5cGUgVVJJPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgVEJfRElTRUFTRV9NT0RFTF9MQUJFTF9fVFlQRV9VUkkgPSBTdGFuZGFyZFBhY2thZ2UuU1RBTkRBUkRfRElTRUFTRV9NT0RFTF9MQUJFTF9fVFlQRV9VUkk7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RHVibGluIENvcmU8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBUQl9ESVNFQVNFX01PREVMX0xBQkVMX19EVUJMSU5fQ09SRSA9IFN0YW5kYXJkUGFja2FnZS5TVEFOREFSRF9ESVNFQVNFX01PREVMX0xBQkVMX19EVUJMSU5fQ09SRTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5VUkkgT2YgSWRlbnRpZmlhYmxlIFRvIEJlIExhYmVsZWQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBUQl9ESVNFQVNFX01PREVMX0xBQkVMX19VUklfT0ZfSURFTlRJRklBQkxFX1RPX0JFX0xBQkVMRUQgPSBTdGFuZGFyZFBhY2thZ2UuU1RBTkRBUkRfRElTRUFTRV9NT0RFTF9MQUJFTF9fVVJJX09GX0lERU5USUZJQUJMRV9UT19CRV9MQUJFTEVEOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkN1cnJlbnQgVmFsdWU8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBUQl9ESVNFQVNFX01PREVMX0xBQkVMX19DVVJSRU5UX1ZBTFVFID0gU3RhbmRhcmRQYWNrYWdlLlNUQU5EQVJEX0RJU0VBU0VfTU9ERUxfTEFCRUxfX0NVUlJFTlRfVkFMVUU7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+SWRlbnRpZmlhYmxlPC9iPjwvZW0+JyByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgVEJfRElTRUFTRV9NT0RFTF9MQUJFTF9fSURFTlRJRklBQkxFID0gU3RhbmRhcmRQYWNrYWdlLlNUQU5EQVJEX0RJU0VBU0VfTU9ERUxfTEFCRUxfX0lERU5USUZJQUJMRTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5OZXh0IFZhbHVlIFZhbGlkPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgVEJfRElTRUFTRV9NT0RFTF9MQUJFTF9fTkVYVF9WQUxVRV9WQUxJRCA9IFN0YW5kYXJkUGFja2FnZS5TVEFOREFSRF9ESVNFQVNFX01PREVMX0xBQkVMX19ORVhUX1ZBTFVFX1ZBTElEOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPk5leHQgVmFsdWU8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBUQl9ESVNFQVNFX01PREVMX0xBQkVMX19ORVhUX1ZBTFVFID0gU3RhbmRhcmRQYWNrYWdlLlNUQU5EQVJEX0RJU0VBU0VfTU9ERUxfTEFCRUxfX05FWFRfVkFMVUU7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RGVjb3JhdG9yPC9iPjwvZW0+JyByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgVEJfRElTRUFTRV9NT0RFTF9MQUJFTF9fREVDT1JBVE9SID0gU3RhbmRhcmRQYWNrYWdlLlNUQU5EQVJEX0RJU0VBU0VfTU9ERUxfTEFCRUxfX0RFQ09SQVRPUjsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5Ob2RlPC9iPjwvZW0+JyByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgVEJfRElTRUFTRV9NT0RFTF9MQUJFTF9fTk9ERSA9IFN0YW5kYXJkUGFja2FnZS5TVEFOREFSRF9ESVNFQVNFX01PREVMX0xBQkVMX19OT0RFOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkRlbHRhIFZhbHVlPC9iPjwvZW0+JyByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgVEJfRElTRUFTRV9NT0RFTF9MQUJFTF9fREVMVEFfVkFMVUUgPSBTdGFuZGFyZFBhY2thZ2UuU1RBTkRBUkRfRElTRUFTRV9NT0RFTF9MQUJFTF9fREVMVEFfVkFMVUU7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VGVtcCBWYWx1ZTwvYj48L2VtPicgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFRCX0RJU0VBU0VfTU9ERUxfTEFCRUxfX1RFTVBfVkFMVUUgPSBTdGFuZGFyZFBhY2thZ2UuU1RBTkRBUkRfRElTRUFTRV9NT0RFTF9MQUJFTF9fVEVNUF9WQUxVRTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5Qcm9iZSBWYWx1ZTwvYj48L2VtPicgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFRCX0RJU0VBU0VfTU9ERUxfTEFCRUxfX1BST0JFX1ZBTFVFID0gU3RhbmRhcmRQYWNrYWdlLlNUQU5EQVJEX0RJU0VBU0VfTU9ERUxfTEFCRUxfX1BST0JFX1ZBTFVFOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkVycm9yIFNjYWxlPC9iPjwvZW0+JyByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgVEJfRElTRUFTRV9NT0RFTF9MQUJFTF9fRVJST1JfU0NBTEUgPSBTdGFuZGFyZFBhY2thZ2UuU1RBTkRBUkRfRElTRUFTRV9NT0RFTF9MQUJFTF9fRVJST1JfU0NBTEU7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+SWRlbnRpZmllcjwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFRCX0RJU0VBU0VfTU9ERUxfTEFCRUxfX0lERU5USUZJRVIgPSBTdGFuZGFyZFBhY2thZ2UuU1RBTkRBUkRfRElTRUFTRV9NT0RFTF9MQUJFTF9fSURFTlRJRklFUjsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5Qb3B1bGF0aW9uIExhYmVsPC9iPjwvZW0+JyByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgVEJfRElTRUFTRV9NT0RFTF9MQUJFTF9fUE9QVUxBVElPTl9MQUJFTCA9IFN0YW5kYXJkUGFja2FnZS5TVEFOREFSRF9ESVNFQVNFX01PREVMX0xBQkVMX19QT1BVTEFUSU9OX0xBQkVMOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlBvcHVsYXRpb24gTW9kZWwgTGFiZWw8L2I+PC9lbT4nIHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBUQl9ESVNFQVNFX01PREVMX0xBQkVMX19QT1BVTEFUSU9OX01PREVMX0xBQkVMID0gU3RhbmRhcmRQYWNrYWdlLlNUQU5EQVJEX0RJU0VBU0VfTU9ERUxfTEFCRUxfX1BPUFVMQVRJT05fTU9ERUxfTEFCRUw7CisKKwkvKioKKwkgKiBUaGUgbnVtYmVyIG9mIHN0cnVjdHVyYWwgZmVhdHVyZXMgb2YgdGhlICc8ZW0+VEIgRGlzZWFzZSBNb2RlbCBMYWJlbDwvZW0+JyBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBUQl9ESVNFQVNFX01PREVMX0xBQkVMX0ZFQVRVUkVfQ09VTlQgPSBTdGFuZGFyZFBhY2thZ2UuU1RBTkRBUkRfRElTRUFTRV9NT0RFTF9MQUJFTF9GRUFUVVJFX0NPVU5UICsgMDsKKworCisJLyoqCisJICogVGhlIG1ldGEgb2JqZWN0IGlkIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXhwZXJpbWVudGFsLmltcGwuVEJEaXNlYXNlTW9kZWxMYWJlbFZhbHVlSW1wbCA8ZW0+VEIgRGlzZWFzZSBNb2RlbCBMYWJlbCBWYWx1ZTwvZW0+fScgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leHBlcmltZW50YWwuaW1wbC5UQkRpc2Vhc2VNb2RlbExhYmVsVmFsdWVJbXBsCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXhwZXJpbWVudGFsLmltcGwuRXhwZXJpbWVudGFsUGFja2FnZUltcGwjZ2V0VEJEaXNlYXNlTW9kZWxMYWJlbFZhbHVlKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJaW50IFRCX0RJU0VBU0VfTU9ERUxfTEFCRUxfVkFMVUUgPSAyOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkFycml2YWxzPC9iPjwvZW0+JyByZWZlcmVuY2UgbGlzdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBUQl9ESVNFQVNFX01PREVMX0xBQkVMX1ZBTFVFX19BUlJJVkFMUyA9IFN0YW5kYXJkUGFja2FnZS5TVEFOREFSRF9ESVNFQVNFX01PREVMX0xBQkVMX1ZBTFVFX19BUlJJVkFMUzsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5EZXBhcnR1cmVzPC9iPjwvZW0+JyByZWZlcmVuY2UgbGlzdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBUQl9ESVNFQVNFX01PREVMX0xBQkVMX1ZBTFVFX19ERVBBUlRVUkVTID0gU3RhbmRhcmRQYWNrYWdlLlNUQU5EQVJEX0RJU0VBU0VfTU9ERUxfTEFCRUxfVkFMVUVfX0RFUEFSVFVSRVM7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+UG9wdWxhdGlvbiBDb3VudDwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFRCX0RJU0VBU0VfTU9ERUxfTEFCRUxfVkFMVUVfX1BPUFVMQVRJT05fQ09VTlQgPSBTdGFuZGFyZFBhY2thZ2UuU1RBTkRBUkRfRElTRUFTRV9NT0RFTF9MQUJFTF9WQUxVRV9fUE9QVUxBVElPTl9DT1VOVDsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5TPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgVEJfRElTRUFTRV9NT0RFTF9MQUJFTF9WQUxVRV9fUyA9IFN0YW5kYXJkUGFja2FnZS5TVEFOREFSRF9ESVNFQVNFX01PREVMX0xBQkVMX1ZBTFVFX19TOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkluY2lkZW5jZTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFRCX0RJU0VBU0VfTU9ERUxfTEFCRUxfVkFMVUVfX0lOQ0lERU5DRSA9IFN0YW5kYXJkUGFja2FnZS5TVEFOREFSRF9ESVNFQVNFX01PREVMX0xBQkVMX1ZBTFVFX19JTkNJREVOQ0U7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RGlzZWFzZSBEZWF0aHM8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBUQl9ESVNFQVNFX01PREVMX0xBQkVMX1ZBTFVFX19ESVNFQVNFX0RFQVRIUyA9IFN0YW5kYXJkUGFja2FnZS5TVEFOREFSRF9ESVNFQVNFX01PREVMX0xBQkVMX1ZBTFVFX19ESVNFQVNFX0RFQVRIUzsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5JbDwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFRCX0RJU0VBU0VfTU9ERUxfTEFCRUxfVkFMVUVfX0lMID0gU3RhbmRhcmRQYWNrYWdlLlNUQU5EQVJEX0RJU0VBU0VfTU9ERUxfTEFCRUxfVkFMVUVfRkVBVFVSRV9DT1VOVCArIDA7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+SWE8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBUQl9ESVNFQVNFX01PREVMX0xBQkVMX1ZBTFVFX19JQSA9IFN0YW5kYXJkUGFja2FnZS5TVEFOREFSRF9ESVNFQVNFX01PREVMX0xBQkVMX1ZBTFVFX0ZFQVRVUkVfQ09VTlQgKyAxOworCisJLyoqCisJICogVGhlIG51bWJlciBvZiBzdHJ1Y3R1cmFsIGZlYXR1cmVzIG9mIHRoZSAnPGVtPlRCIERpc2Vhc2UgTW9kZWwgTGFiZWwgVmFsdWU8L2VtPicgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgVEJfRElTRUFTRV9NT0RFTF9MQUJFTF9WQUxVRV9GRUFUVVJFX0NPVU5UID0gU3RhbmRhcmRQYWNrYWdlLlNUQU5EQVJEX0RJU0VBU0VfTU9ERUxfTEFCRUxfVkFMVUVfRkVBVFVSRV9DT1VOVCArIDI7CisKKworCS8qKgorCSAqIFRoZSBtZXRhIG9iamVjdCBpZCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4cGVyaW1lbnRhbC5pbXBsLlRCRGlzZWFzZU1vZGVsSW1wbCA8ZW0+VEIgRGlzZWFzZSBNb2RlbDwvZW0+fScgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leHBlcmltZW50YWwuaW1wbC5UQkRpc2Vhc2VNb2RlbEltcGwKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leHBlcmltZW50YWwuaW1wbC5FeHBlcmltZW50YWxQYWNrYWdlSW1wbCNnZXRUQkRpc2Vhc2VNb2RlbCgpCisJICogQGdlbmVyYXRlZAorCSAqLworCWludCBUQl9ESVNFQVNFX01PREVMID0gMzsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5VUkk8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBUQl9ESVNFQVNFX01PREVMX19VUkkgPSBTdGFuZGFyZFBhY2thZ2UuU1RBTkRBUkRfRElTRUFTRV9NT0RFTF9fVVJJOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlR5cGUgVVJJPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgVEJfRElTRUFTRV9NT0RFTF9fVFlQRV9VUkkgPSBTdGFuZGFyZFBhY2thZ2UuU1RBTkRBUkRfRElTRUFTRV9NT0RFTF9fVFlQRV9VUkk7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RHVibGluIENvcmU8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBUQl9ESVNFQVNFX01PREVMX19EVUJMSU5fQ09SRSA9IFN0YW5kYXJkUGFja2FnZS5TVEFOREFSRF9ESVNFQVNFX01PREVMX19EVUJMSU5fQ09SRTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5MYWJlbHMgVG8gVXBkYXRlPC9iPjwvZW0+JyByZWZlcmVuY2UgbGlzdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBUQl9ESVNFQVNFX01PREVMX19MQUJFTFNfVE9fVVBEQVRFID0gU3RhbmRhcmRQYWNrYWdlLlNUQU5EQVJEX0RJU0VBU0VfTU9ERUxfX0xBQkVMU19UT19VUERBVEU7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+R3JhcGg8L2I+PC9lbT4nIGNvbnRhaW5lciByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgVEJfRElTRUFTRV9NT0RFTF9fR1JBUEggPSBTdGFuZGFyZFBhY2thZ2UuU1RBTkRBUkRfRElTRUFTRV9NT0RFTF9fR1JBUEg7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RW5hYmxlZDwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFRCX0RJU0VBU0VfTU9ERUxfX0VOQUJMRUQgPSBTdGFuZGFyZFBhY2thZ2UuU1RBTkRBUkRfRElTRUFTRV9NT0RFTF9fRU5BQkxFRDsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5HcmFwaCBEZWNvcmF0ZWQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBUQl9ESVNFQVNFX01PREVMX19HUkFQSF9ERUNPUkFURUQgPSBTdGFuZGFyZFBhY2thZ2UuU1RBTkRBUkRfRElTRUFTRV9NT0RFTF9fR1JBUEhfREVDT1JBVEVEOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlByb2dyZXNzPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgVEJfRElTRUFTRV9NT0RFTF9fUFJPR1JFU1MgPSBTdGFuZGFyZFBhY2thZ2UuU1RBTkRBUkRfRElTRUFTRV9NT0RFTF9fUFJPR1JFU1M7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+UG9wdWxhdGlvbiBJZGVudGlmaWVyPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgVEJfRElTRUFTRV9NT0RFTF9fUE9QVUxBVElPTl9JREVOVElGSUVSID0gU3RhbmRhcmRQYWNrYWdlLlNUQU5EQVJEX0RJU0VBU0VfTU9ERUxfX1BPUFVMQVRJT05fSURFTlRJRklFUjsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5UaW1lIFBlcmlvZDwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFRCX0RJU0VBU0VfTU9ERUxfX1RJTUVfUEVSSU9EID0gU3RhbmRhcmRQYWNrYWdlLlNUQU5EQVJEX0RJU0VBU0VfTU9ERUxfX1RJTUVfUEVSSU9EOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkRpc2Vhc2UgTmFtZTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFRCX0RJU0VBU0VfTU9ERUxfX0RJU0VBU0VfTkFNRSA9IFN0YW5kYXJkUGFja2FnZS5TVEFOREFSRF9ESVNFQVNFX01PREVMX19ESVNFQVNFX05BTUU7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RmluaXRlIERpZmZlcmVuY2U8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBUQl9ESVNFQVNFX01PREVMX19GSU5JVEVfRElGRkVSRU5DRSA9IFN0YW5kYXJkUGFja2FnZS5TVEFOREFSRF9ESVNFQVNFX01PREVMX19GSU5JVEVfRElGRkVSRU5DRTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5GcmVxdWVuY3kgRGVwZW5kZW50PC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgVEJfRElTRUFTRV9NT0RFTF9fRlJFUVVFTkNZX0RFUEVOREVOVCA9IFN0YW5kYXJkUGFja2FnZS5TVEFOREFSRF9ESVNFQVNFX01PREVMX19GUkVRVUVOQ1lfREVQRU5ERU5UOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlJlZmVyZW5jZSBQb3B1bGF0aW9uIERlbnNpdHk8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBUQl9ESVNFQVNFX01PREVMX19SRUZFUkVOQ0VfUE9QVUxBVElPTl9ERU5TSVRZID0gU3RhbmRhcmRQYWNrYWdlLlNUQU5EQVJEX0RJU0VBU0VfTU9ERUxfX1JFRkVSRU5DRV9QT1BVTEFUSU9OX0RFTlNJVFk7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+Um9hZCBOZXR3b3JrIEluZmVjdGlvdXMgUHJvcG9ydGlvbjwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFRCX0RJU0VBU0VfTU9ERUxfX1JPQURfTkVUV09SS19JTkZFQ1RJT1VTX1BST1BPUlRJT04gPSBTdGFuZGFyZFBhY2thZ2UuU1RBTkRBUkRfRElTRUFTRV9NT0RFTF9fUk9BRF9ORVRXT1JLX0lORkVDVElPVVNfUFJPUE9SVElPTjsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5DaGFyYWN0ZXJpc3RpYyBNaXhpbmcgRGlzdGFuY2U8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBUQl9ESVNFQVNFX01PREVMX19DSEFSQUNURVJJU1RJQ19NSVhJTkdfRElTVEFOQ0UgPSBTdGFuZGFyZFBhY2thZ2UuU1RBTkRBUkRfRElTRUFTRV9NT0RFTF9fQ0hBUkFDVEVSSVNUSUNfTUlYSU5HX0RJU1RBTkNFOworCisJLyoqCisJICogVGhlIG51bWJlciBvZiBzdHJ1Y3R1cmFsIGZlYXR1cmVzIG9mIHRoZSAnPGVtPlRCIERpc2Vhc2UgTW9kZWw8L2VtPicgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgVEJfRElTRUFTRV9NT0RFTF9GRUFUVVJFX0NPVU5UID0gU3RhbmRhcmRQYWNrYWdlLlNUQU5EQVJEX0RJU0VBU0VfTU9ERUxfRkVBVFVSRV9DT1VOVCArIDA7CisKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leHBlcmltZW50YWwuUGVyY29sYXRpb25EaXNlYXNlTW9kZWwgPGVtPlBlcmNvbGF0aW9uIERpc2Vhc2UgTW9kZWw8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICc8ZW0+UGVyY29sYXRpb24gRGlzZWFzZSBNb2RlbDwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leHBlcmltZW50YWwuUGVyY29sYXRpb25EaXNlYXNlTW9kZWwKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUNsYXNzIGdldFBlcmNvbGF0aW9uRGlzZWFzZU1vZGVsKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXhwZXJpbWVudGFsLlRCRGlzZWFzZU1vZGVsTGFiZWwgPGVtPlRCIERpc2Vhc2UgTW9kZWwgTGFiZWw8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICc8ZW0+VEIgRGlzZWFzZSBNb2RlbCBMYWJlbDwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leHBlcmltZW50YWwuVEJEaXNlYXNlTW9kZWxMYWJlbAorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQ2xhc3MgZ2V0VEJEaXNlYXNlTW9kZWxMYWJlbCgpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4cGVyaW1lbnRhbC5UQkRpc2Vhc2VNb2RlbExhYmVsVmFsdWUgPGVtPlRCIERpc2Vhc2UgTW9kZWwgTGFiZWwgVmFsdWU8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICc8ZW0+VEIgRGlzZWFzZSBNb2RlbCBMYWJlbCBWYWx1ZTwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leHBlcmltZW50YWwuVEJEaXNlYXNlTW9kZWxMYWJlbFZhbHVlCisJICogQGdlbmVyYXRlZAorCSAqLworCUVDbGFzcyBnZXRUQkRpc2Vhc2VNb2RlbExhYmVsVmFsdWUoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4cGVyaW1lbnRhbC5UQkRpc2Vhc2VNb2RlbExhYmVsVmFsdWUjZ2V0SWwgPGVtPklsPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+SWw8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXhwZXJpbWVudGFsLlRCRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZSNnZXRJbCgpCisJICogQHNlZSAjZ2V0VEJEaXNlYXNlTW9kZWxMYWJlbFZhbHVlKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUF0dHJpYnV0ZSBnZXRUQkRpc2Vhc2VNb2RlbExhYmVsVmFsdWVfSWwoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4cGVyaW1lbnRhbC5UQkRpc2Vhc2VNb2RlbExhYmVsVmFsdWUjZ2V0SWEgPGVtPklhPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+SWE8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXhwZXJpbWVudGFsLlRCRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZSNnZXRJYSgpCisJICogQHNlZSAjZ2V0VEJEaXNlYXNlTW9kZWxMYWJlbFZhbHVlKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUF0dHJpYnV0ZSBnZXRUQkRpc2Vhc2VNb2RlbExhYmVsVmFsdWVfSWEoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leHBlcmltZW50YWwuVEJEaXNlYXNlTW9kZWwgPGVtPlRCIERpc2Vhc2UgTW9kZWw8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICc8ZW0+VEIgRGlzZWFzZSBNb2RlbDwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leHBlcmltZW50YWwuVEJEaXNlYXNlTW9kZWwKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUNsYXNzIGdldFRCRGlzZWFzZU1vZGVsKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBmYWN0b3J5IHRoYXQgY3JlYXRlcyB0aGUgaW5zdGFuY2VzIG9mIHRoZSBtb2RlbC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIGZhY3RvcnkgdGhhdCBjcmVhdGVzIHRoZSBpbnN0YW5jZXMgb2YgdGhlIG1vZGVsLgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFeHBlcmltZW50YWxGYWN0b3J5IGdldEV4cGVyaW1lbnRhbEZhY3RvcnkoKTsKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogRGVmaW5lcyBsaXRlcmFscyBmb3IgdGhlIG1ldGEgb2JqZWN0cyB0aGF0IHJlcHJlc2VudAorCSAqIDx1bD4KKwkgKiAgIDxsaT5lYWNoIGNsYXNzLDwvbGk+CisJICogICA8bGk+ZWFjaCBmZWF0dXJlIG9mIGVhY2ggY2xhc3MsPC9saT4KKwkgKiAgIDxsaT5lYWNoIGVudW0sPC9saT4KKwkgKiAgIDxsaT5hbmQgZWFjaCBkYXRhIHR5cGU8L2xpPgorCSAqIDwvdWw+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCWludGVyZmFjZSBMaXRlcmFscyB7CisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4cGVyaW1lbnRhbC5pbXBsLlBlcmNvbGF0aW9uRGlzZWFzZU1vZGVsSW1wbCA8ZW0+UGVyY29sYXRpb24gRGlzZWFzZSBNb2RlbDwvZW0+fScgY2xhc3MuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leHBlcmltZW50YWwuaW1wbC5QZXJjb2xhdGlvbkRpc2Vhc2VNb2RlbEltcGwKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXhwZXJpbWVudGFsLmltcGwuRXhwZXJpbWVudGFsUGFja2FnZUltcGwjZ2V0UGVyY29sYXRpb25EaXNlYXNlTW9kZWwoKQorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQ2xhc3MgUEVSQ09MQVRJT05fRElTRUFTRV9NT0RFTCA9IGVJTlNUQU5DRS5nZXRQZXJjb2xhdGlvbkRpc2Vhc2VNb2RlbCgpOworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leHBlcmltZW50YWwuaW1wbC5UQkRpc2Vhc2VNb2RlbExhYmVsSW1wbCA8ZW0+VEIgRGlzZWFzZSBNb2RlbCBMYWJlbDwvZW0+fScgY2xhc3MuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leHBlcmltZW50YWwuaW1wbC5UQkRpc2Vhc2VNb2RlbExhYmVsSW1wbAorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leHBlcmltZW50YWwuaW1wbC5FeHBlcmltZW50YWxQYWNrYWdlSW1wbCNnZXRUQkRpc2Vhc2VNb2RlbExhYmVsKCkKKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUNsYXNzIFRCX0RJU0VBU0VfTU9ERUxfTEFCRUwgPSBlSU5TVEFOQ0UuZ2V0VEJEaXNlYXNlTW9kZWxMYWJlbCgpOworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leHBlcmltZW50YWwuaW1wbC5UQkRpc2Vhc2VNb2RlbExhYmVsVmFsdWVJbXBsIDxlbT5UQiBEaXNlYXNlIE1vZGVsIExhYmVsIFZhbHVlPC9lbT59JyBjbGFzcy4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4cGVyaW1lbnRhbC5pbXBsLlRCRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZUltcGwKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXhwZXJpbWVudGFsLmltcGwuRXhwZXJpbWVudGFsUGFja2FnZUltcGwjZ2V0VEJEaXNlYXNlTW9kZWxMYWJlbFZhbHVlKCkKKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUNsYXNzIFRCX0RJU0VBU0VfTU9ERUxfTEFCRUxfVkFMVUUgPSBlSU5TVEFOQ0UuZ2V0VEJEaXNlYXNlTW9kZWxMYWJlbFZhbHVlKCk7CisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+SWw8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUF0dHJpYnV0ZSBUQl9ESVNFQVNFX01PREVMX0xBQkVMX1ZBTFVFX19JTCA9IGVJTlNUQU5DRS5nZXRUQkRpc2Vhc2VNb2RlbExhYmVsVmFsdWVfSWwoKTsKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5JYTwvYj48L2VtPicgYXR0cmlidXRlIGZlYXR1cmUuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQXR0cmlidXRlIFRCX0RJU0VBU0VfTU9ERUxfTEFCRUxfVkFMVUVfX0lBID0gZUlOU1RBTkNFLmdldFRCRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZV9JYSgpOworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leHBlcmltZW50YWwuaW1wbC5UQkRpc2Vhc2VNb2RlbEltcGwgPGVtPlRCIERpc2Vhc2UgTW9kZWw8L2VtPn0nIGNsYXNzLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXhwZXJpbWVudGFsLmltcGwuVEJEaXNlYXNlTW9kZWxJbXBsCisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4cGVyaW1lbnRhbC5pbXBsLkV4cGVyaW1lbnRhbFBhY2thZ2VJbXBsI2dldFRCRGlzZWFzZU1vZGVsKCkKKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUNsYXNzIFRCX0RJU0VBU0VfTU9ERUwgPSBlSU5TVEFOQ0UuZ2V0VEJEaXNlYXNlTW9kZWwoKTsKKworCX0KKworfSAvL0V4cGVyaW1lbnRhbFBhY2thZ2UKZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4cGVyaW1lbnRhbC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL2V4cGVyaW1lbnRhbC9QZXJjb2xhdGlvbkRpc2Vhc2VNb2RlbC5qYXZhIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXhwZXJpbWVudGFsL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvZXhwZXJpbWVudGFsL1BlcmNvbGF0aW9uRGlzZWFzZU1vZGVsLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTY5YmM5ZgotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4cGVyaW1lbnRhbC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL2V4cGVyaW1lbnRhbC9QZXJjb2xhdGlvbkRpc2Vhc2VNb2RlbC5qYXZhCkBAIC0wLDAgKzEsMjQgQEAKKy8vIFBlcmNvbGF0aW9uRGlzZWFzZU1vZGVsLmphdmEKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4cGVyaW1lbnRhbDsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RvY2hhc3RpY1NFSVJEaXNlYXNlTW9kZWw7CisKKy8qKgorICogVGhpcyBpbnRlcmZhY2UgaXMgYW4gRU1GIE1vZGVsLgorICogCisgKiBAbW9kZWwKKyAqLworcHVibGljIGludGVyZmFjZSBQZXJjb2xhdGlvbkRpc2Vhc2VNb2RlbCBleHRlbmRzIFN0b2NoYXN0aWNTRUlSRGlzZWFzZU1vZGVsIHsKKwkvLyBOb3RoaW5nCit9IC8vIFBlcmNvbGF0aW9uRGlzZWFzZU1vZGVsCmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leHBlcmltZW50YWwvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9leHBlcmltZW50YWwvVEJEaXNlYXNlTW9kZWwuamF2YSBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4cGVyaW1lbnRhbC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL2V4cGVyaW1lbnRhbC9UQkRpc2Vhc2VNb2RlbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJhZTNhM2YKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leHBlcmltZW50YWwvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9leHBlcmltZW50YWwvVEJEaXNlYXNlTW9kZWwuamF2YQpAQCAtMCwwICsxLDI3IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leHBlcmltZW50YWw7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIAorICogQ29weXJpZ2h0IChjKSAyMDExIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiAKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdCAKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sIAorICogCisgKiBDb250cmlidXRvcnM6IAorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiAKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkRGlzZWFzZU1vZGVsOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiBBIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5UQiBEaXNlYXNlIE1vZGVsPC9iPjwvZW0+Jy4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICoKKyAqCisgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leHBlcmltZW50YWwuRXhwZXJpbWVudGFsUGFja2FnZSNnZXRUQkRpc2Vhc2VNb2RlbCgpCisgKiBAbW9kZWwKKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGludGVyZmFjZSBUQkRpc2Vhc2VNb2RlbCBleHRlbmRzIFN0YW5kYXJkRGlzZWFzZU1vZGVsIHsKK30gLy8gVEJEaXNlYXNlTW9kZWwKZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4cGVyaW1lbnRhbC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL2V4cGVyaW1lbnRhbC9UQkRpc2Vhc2VNb2RlbExhYmVsLmphdmEgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leHBlcmltZW50YWwvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9leHBlcmltZW50YWwvVEJEaXNlYXNlTW9kZWxMYWJlbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNlNGE2NGQKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leHBlcmltZW50YWwvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9leHBlcmltZW50YWwvVEJEaXNlYXNlTW9kZWxMYWJlbC5qYXZhCkBAIC0wLDAgKzEsMjcgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4cGVyaW1lbnRhbDsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogCisgKiBDb3B5cmlnaHQgKGMpIDIwMTEgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuIAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyAKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0IAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwgCisgKiAKKyAqIENvbnRyaWJ1dG9yczogCisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbDsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogQSByZXByZXNlbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+VEIgRGlzZWFzZSBNb2RlbCBMYWJlbDwvYj48L2VtPicuCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqCisgKgorICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXhwZXJpbWVudGFsLkV4cGVyaW1lbnRhbFBhY2thZ2UjZ2V0VEJEaXNlYXNlTW9kZWxMYWJlbCgpCisgKiBAbW9kZWwKKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGludGVyZmFjZSBUQkRpc2Vhc2VNb2RlbExhYmVsIGV4dGVuZHMgU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbCB7Cit9IC8vIFRCRGlzZWFzZU1vZGVsTGFiZWwKZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4cGVyaW1lbnRhbC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL2V4cGVyaW1lbnRhbC9UQkRpc2Vhc2VNb2RlbExhYmVsVmFsdWUuamF2YSBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4cGVyaW1lbnRhbC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL2V4cGVyaW1lbnRhbC9UQkRpc2Vhc2VNb2RlbExhYmVsVmFsdWUuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYzBhZDk3Ci0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXhwZXJpbWVudGFsL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvZXhwZXJpbWVudGFsL1RCRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZS5qYXZhCkBAIC0wLDAgKzEsODggQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4cGVyaW1lbnRhbDsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogCisgKiBDb3B5cmlnaHQgKGMpIDIwMTEgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuIAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyAKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0IAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwgCisgKiAKKyAqIENvbnRyaWJ1dG9yczogCisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbFZhbHVlOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiBBIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5UQiBEaXNlYXNlIE1vZGVsIExhYmVsIFZhbHVlPC9iPjwvZW0+Jy4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICoKKyAqIDxwPgorICogVGhlIGZvbGxvd2luZyBmZWF0dXJlcyBhcmUgc3VwcG9ydGVkOgorICogPHVsPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leHBlcmltZW50YWwuVEJEaXNlYXNlTW9kZWxMYWJlbFZhbHVlI2dldElsIDxlbT5JbDwvZW0+fTwvbGk+CisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4cGVyaW1lbnRhbC5UQkRpc2Vhc2VNb2RlbExhYmVsVmFsdWUjZ2V0SWEgPGVtPklhPC9lbT59PC9saT4KKyAqIDwvdWw+CisgKiA8L3A+CisgKgorICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXhwZXJpbWVudGFsLkV4cGVyaW1lbnRhbFBhY2thZ2UjZ2V0VEJEaXNlYXNlTW9kZWxMYWJlbFZhbHVlKCkKKyAqIEBtb2RlbAorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgaW50ZXJmYWNlIFRCRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZSBleHRlbmRzIFN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZSB7CisJLyoqCisJICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+SWw8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyA8Y29kZT4iMC4wIjwvY29kZT4uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8cD4KKwkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5JbDwvZW0+JyBhdHRyaWJ1dGUgaXNuJ3QgY2xlYXIsCisJICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLgorCSAqIDwvcD4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5JbDwvZW0+JyBhdHRyaWJ1dGUuCisJICogQHNlZSAjc2V0SWwoZG91YmxlKQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4cGVyaW1lbnRhbC5FeHBlcmltZW50YWxQYWNrYWdlI2dldFRCRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZV9JbCgpCisJICogQG1vZGVsIGRlZmF1bHQ9IjAuMCIKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJZG91YmxlIGdldElsKCk7CisKKwkvKioKKwkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXhwZXJpbWVudGFsLlRCRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZSNnZXRJbCA8ZW0+SWw8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPklsPC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiBAc2VlICNnZXRJbCgpCisJICogQGdlbmVyYXRlZAorCSAqLworCXZvaWQgc2V0SWwoZG91YmxlIHZhbHVlKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPklhPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogVGhlIGRlZmF1bHQgdmFsdWUgaXMgPGNvZGU+IjAuMCI8L2NvZGU+LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPHA+CisJICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+SWE8L2VtPicgYXR0cmlidXRlIGlzbid0IGNsZWFyLAorCSAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4KKwkgKiA8L3A+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+SWE8L2VtPicgYXR0cmlidXRlLgorCSAqIEBzZWUgI3NldElhKGRvdWJsZSkKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leHBlcmltZW50YWwuRXhwZXJpbWVudGFsUGFja2FnZSNnZXRUQkRpc2Vhc2VNb2RlbExhYmVsVmFsdWVfSWEoKQorCSAqIEBtb2RlbCBkZWZhdWx0PSIwLjAiCisJICogQGdlbmVyYXRlZAorCSAqLworCWRvdWJsZSBnZXRJYSgpOworCisJLyoqCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4cGVyaW1lbnRhbC5UQkRpc2Vhc2VNb2RlbExhYmVsVmFsdWUjZ2V0SWEgPGVtPklhPC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5JYTwvZW0+JyBhdHRyaWJ1dGUuCisJICogQHNlZSAjZ2V0SWEoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwl2b2lkIHNldElhKGRvdWJsZSB2YWx1ZSk7CisKK30gLy8gVEJEaXNlYXNlTW9kZWxMYWJlbFZhbHVlCmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leHBlcmltZW50YWwvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9leHBlcmltZW50YWwvaW1wbC9DZWxsdWxhckRpc2Vhc2VNb2RlbEltcGwuamF2YSBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4cGVyaW1lbnRhbC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL2V4cGVyaW1lbnRhbC9pbXBsL0NlbGx1bGFyRGlzZWFzZU1vZGVsSW1wbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNlZDVkMjQKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leHBlcmltZW50YWwvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9leHBlcmltZW50YWwvaW1wbC9DZWxsdWxhckRpc2Vhc2VNb2RlbEltcGwuamF2YQpAQCAtMCwwICsxLDE1NCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4cGVyaW1lbnRhbC5pbXBsOworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzczsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguTGFiZWxWYWx1ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuU1RFTVRpbWU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4cGVyaW1lbnRhbC5DZWxsdWxhckRpc2Vhc2VNb2RlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXhwZXJpbWVudGFsLkV4cGVyaW1lbnRhbFBhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLkRpc2Vhc2VNb2RlbExhYmVsVmFsdWU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlNJTGFiZWxWYWx1ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbFZhbHVlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5pbXBsLlNJSW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuaW1wbC5TSUxhYmVsVmFsdWVJbXBsOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiBBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+UGVyY29sYXRpb24gRGlzZWFzZSBNb2RlbDwvYj48L2VtPicuCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIDxwPgorICogPC9wPgorICoKKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIENlbGx1bGFyRGlzZWFzZU1vZGVsSW1wbCBleHRlbmRzIFNJSW1wbCBpbXBsZW1lbnRzIENlbGx1bGFyRGlzZWFzZU1vZGVsIHsKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQ2VsbHVsYXJEaXNlYXNlTW9kZWxJbXBsKCkgeworCQlzdXBlcigpOworCX0KKworCS8vTG9nRGlzZWFzZVN0YXRlIGxkcyA9IG51bGw7CisJLy9pbnQgaWNvdW50ID0gMDsKKwkKKwkKKwkKKwkvKioKKwkgKiAKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5pbXBsLlNJSW1wbCNjb21wdXRlRGlzZWFzZURlbHRhcyhvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuU1RFTVRpbWUsIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsVmFsdWUsIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsLCBsb25nKQorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBTdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsVmFsdWUgY29tcHV0ZURpc2Vhc2VEZWx0YXMoCisJCQlmaW5hbCBTVEVNVGltZSB0aW1lLAorCQkJZmluYWwgU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbFZhbHVlIGN1cnJlbnRTdGF0ZSwKKwkJCWZpbmFsIFN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWwgZGlzZWFzZUxhYmVsLCBmaW5hbCBsb25nIHRpbWVEZWx0YSwgRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZSByZXR1cm5WYWx1ZSkgeworCQkKKwkJZmluYWwgU0lMYWJlbFZhbHVlIGN1cnJlbnRTSSA9IChTSUxhYmVsVmFsdWUpIGN1cnJlbnRTdGF0ZTsKKwkJCisJCS8vIFRoaXMgaXMgYmV0YSoKKwkJZmluYWwgZG91YmxlIHRyYW5zbWlzc2lvblJhdGUgPSAoZ2V0QWRqdXN0ZWRUcmFuc21pc3Npb25SYXRlKHRpbWVEZWx0YSkKKwkJCQkqIGdldFRyYW5zbWlzc2lvblJhdGVTY2FsZUZhY3RvcihkaXNlYXNlTGFiZWwpKTsKKwkJCQkKKwkJCisJCS8vIFRoZSBlZmZlY3RpdmUgSW5mZWN0aW91cyBwb3B1bGF0aW9uICBpcyBhIGRpbWVuc2lvbmxlcyBudW1iZXIgbm9ybWFsaXplIGJ5IHRvdGFsCisJCS8vIHBvcHVsYXRpb24gdXNlZCBpbiB0ZWggY29tcHV0YXRpb24gb2YgYmV0cypTKmkgd2hlcmUgaSA9IEllZmZlY3RpdmUvUG9wLgorCQkvLyBUaGlzIGluY2x1ZGVzIGEgY29ycmVjdGlvbiB0byB0aGUgY3VycmVudAorCQkvLyBpbmZlY3Rpb3VzIHBvcHVsYXRpb24gKEllZmZlY3RpdmUpIGJhc2VkIG9uIHRoZSBjb25zZXJ2ZWQgZXhjaGFuZ2Ugb2YgcGVvcGxlIChjaXJjdWxhdGlvbikKKwkJLy8gYmV0d2VlbiByZWdpb25zLiBOb3RlIHRoYXQgdGhpcyBpcyBubyB0aGUgImFycml2YWxzIiBhbmQgImRlcGFydHVyZXMiIHdoaWNoIGFyZQorCQkvLyBhIGRpZmZlcmVudCBwcm9jZXNzLgorCQlmaW5hbCBkb3VibGUgZWZmZWN0aXZlSW5mZWN0aW91cyA9IGdldE5vcm1hbGl6ZWRFZmZlY3RpdmVJbmZlY3Rpb3VzKGRpc2Vhc2VMYWJlbC5nZXROb2RlKCksIGRpc2Vhc2VMYWJlbCwgY3VycmVudFNJLmdldEkoKSk7CisKKwkJLyoKKwkJICogQ29tcHV0ZSBzdGF0ZSB0cmFuc2l0aW9ucworCQkgKiAKKwkJICogUmVnYXJkaW5nIGNvbXB1dGluZyB0aGUgbnVtYmVyIG9mIHRyYW5zaXRpb25zIGZyb20gU3VzY2VwdGlibGUgdG8gRXhwb3NlZDoKKwkJICogSW4gYSBsaW5lYXIgbW9kZWwgdGhlICJlZmZlY3RpdmUiIG51bWJlciBvZiBpbmZlY3Rpb3VzIHBlb3BsZSBpcyBqdXN0CisJCSAqIHRoZSBudW1iZXIgb2YgaW5mZWN0aW91cyBwZW9wbGUgSW4gYSBub25saW5lYXIgbW9kZWwgd2UgaGF2ZSBhCisJCSAqIG5vbkxpbmVhcml0eSBleHBvbmVudCB0aGF0IGlzID4gMSB0aGlzIG1vZGVscyB0aGUgZWZmZWN0IG9mIGltbXVuZQorCQkgKiBzeXN0ZW0gc2F0dXJhdGlvbiB3aGVuIFN1c2NlcHRpYmxlIHBlb3BsZSBhcmUgZXhwb3NlZCB0byBsYXJnZQorCQkgKiBudW1iZXJzIG9mIGluZmVjdGlvdXMgcGVvcGxlLiB0aGVuIHRoZSAiZWZmZWN0aXZlIiBudW1iZXIgb2YKKwkJICogaW5mZWN0aW91cyBwZW9wbGUgaXMgSV5ub25MaW5lYXJpdHkgZXhwb25lbnQgdG8gYWxsb3cgZm9yIGVpdGhlcgorCQkgKiBsaW5lYXIgb3Igbm9ubGluZWFyIG1vZGVscyB3ZSBhbHdheXMgY2FsY3VsYXRlIElebm9uTGluZWFyaXR5CisJCSAqIGV4cG9uZW50IGFuZCBhbGxvdyBub25MaW5lYXJpdHkgZXhwb25lbnQgPj0gMS4wCisJCSAqLworCQkKKwkJZG91YmxlIG51bWJlck9mU3VzY2VwdGlibGVUb0luZmVjdGVkID0gdHJhbnNtaXNzaW9uUmF0ZQorCQkqIGN1cnJlbnRTSS5nZXRTKCkqIE1hdGgucG93KGVmZmVjdGl2ZUluZmVjdGlvdXMsIGdldE5vbkxpbmVhcml0eUNvZWZmaWNpZW50KCkpOworCQkKKwkJLy8gQ29tcHV0ZSB0aGUgbnVtYmVyIG9mIHJlY292ZXJpbmcgImluZmVjdGlvdXMiIHRoYXQgYmVjb21lICJyZWNvdmVyZWQiCisJCS8vIHRoaXMgaXMgcmVzY2FsZWQgYnkgdGhlIHN1cnZpdmluZyBJIHBvcHVsYXRpb24gIHNvIHdlIGRvbid0IG1vdmUgcGVvcGxlIHRoYXQKKwkJLy8gYXJlIGFscmVhZHkgZGVhZC4KKwkJZG91YmxlIG51bWJlck9mSW5mZWN0ZWRUb1N1c2NlcHRpYmxlID0gZ2V0QWRqdXN0ZWRSZWNvdmVyeVJhdGUodGltZURlbHRhKQorCQkJCSogY3VycmVudFNJLmdldEkoKTsKKwkJCisKKwkJCisJCS8vIERldGVybWluZSBkZWx0YSBTCisJCWZpbmFsIGRvdWJsZSBkZWx0YVMgPSAtIG51bWJlck9mU3VzY2VwdGlibGVUb0luZmVjdGVkICsgbnVtYmVyT2ZJbmZlY3RlZFRvU3VzY2VwdGlibGU7CisJCS8vIERldGVybWluZSBkZWx0YSBJCisJCWZpbmFsIGRvdWJsZSBkZWx0YUkgPSBudW1iZXJPZlN1c2NlcHRpYmxlVG9JbmZlY3RlZCAtIG51bWJlck9mSW5mZWN0ZWRUb1N1c2NlcHRpYmxlOwkKKwkJCisJCVNJTGFiZWxWYWx1ZUltcGwgcmV0ID0gKFNJTGFiZWxWYWx1ZUltcGwpcmV0dXJuVmFsdWU7CisJCXJldC5zZXRTKGRlbHRhUyk7CisJCXJldC5zZXRJKGRlbHRhSSk7CisJCXJldC5zZXRJbmNpZGVuY2UobnVtYmVyT2ZTdXNjZXB0aWJsZVRvSW5mZWN0ZWQpOworCQlyZXQuc2V0RGlzZWFzZURlYXRocygwLjApOworCQlyZXR1cm4gcmV0OworCX0gLy8gY29tcHV0ZURpc2Vhc2VEZWx0YXMKKwkKKwkKKwkKKwkKKwkvKioKKwkgKiBNb2RlbFNwZWNpZmljQWRqdXN0bWVudHMgZm9yIGEgU3RvY2hhc3RpYyBtb2RlbCBhZGRzIG5vaXNlIHRvIG9yIGFkanVzdHMgCisJICogdGhlIGRpc2Vhc2Ugc3RhdGUgdHJhbnNpdGlvbiB2YWx1ZXMgYnkgbXVsdGlwbHlpbmcKKwkgKiB0aGUgYWRkaXRpb25zIGJ5IGEgcmFuZG9tIHZhcmlhYmxlIHIgfiAoMSsvLXgpIHdpdGggeCBzbWFsbC4KKwkgKiBUaGUgcmVxdWlyZW1lbnRzIHRoYXQgbm8gbW9yZSBpbmRpdmlkdWFscyBjYW4gYmUgbW92ZWQgZnJvbSBhIHN0YXRlIHRoYW4gYXJlCisJICogYWxyZWFkeSBpbiB0aGF0IHN0YXRlIGlzIHN0aWxsIGVuZm9yY2VkLgorCSAqIAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGRvTW9kZWxTcGVjaWZpY0FkanVzdG1lbnRzKAorCQkJZmluYWwgU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbFZhbHVlIGN1cnJlbnRTdGF0ZSkgeworCisJCisJCXJldHVybjsKKwkJCisJfSAvLyBkb01vZGVsU3BlY2lmaWNBZGp1c3RtZW50cworCQorCQorCQorCQorCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCBFQ2xhc3MgZVN0YXRpY0NsYXNzKCkgeworCQlyZXR1cm4gRXhwZXJpbWVudGFsUGFja2FnZS5MaXRlcmFscy5QRVJDT0xBVElPTl9ESVNFQVNFX01PREVMOworCX0KKworCXB1YmxpYyB2b2lkIGRvTW9kZWxTcGVjaWZpY0FkanVzdG1lbnRzKExhYmVsVmFsdWUgbGFiZWwpIHsKKwkJLy8gTm90aGluZworCX0KKwkKKwlAT3ZlcnJpZGUKKwlwdWJsaWMgYm9vbGVhbiBpc0RldGVybWluaXN0aWMoKSB7CisJCXJldHVybiB0cnVlOworCX0KK30gLy9DZWxsdWxhckRpc2Vhc2VNb2RlbEltcGwKZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4cGVyaW1lbnRhbC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL2V4cGVyaW1lbnRhbC9pbXBsL0V4cGVyaW1lbnRhbEZhY3RvcnlJbXBsLmphdmEgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leHBlcmltZW50YWwvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9leHBlcmltZW50YWwvaW1wbC9FeHBlcmltZW50YWxGYWN0b3J5SW1wbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMzYWIwMWMKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leHBlcmltZW50YWwvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9leHBlcmltZW50YWwvaW1wbC9FeHBlcmltZW50YWxGYWN0b3J5SW1wbC5qYXZhCkBAIC0wLDAgKzEsMTQwIEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leHBlcmltZW50YWwuaW1wbDsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuaW1wbC5FRmFjdG9yeUltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnBsdWdpbi5FY29yZVBsdWdpbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXhwZXJpbWVudGFsLio7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4cGVyaW1lbnRhbC5FeHBlcmltZW50YWxGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leHBlcmltZW50YWwuRXhwZXJpbWVudGFsUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXhwZXJpbWVudGFsLlBlcmNvbGF0aW9uRGlzZWFzZU1vZGVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leHBlcmltZW50YWwuVEJEaXNlYXNlTW9kZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4cGVyaW1lbnRhbC5UQkRpc2Vhc2VNb2RlbExhYmVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leHBlcmltZW50YWwuVEJEaXNlYXNlTW9kZWxMYWJlbFZhbHVlOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiBBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgbW9kZWwgPGI+RmFjdG9yeTwvYj4uCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIEV4cGVyaW1lbnRhbEZhY3RvcnlJbXBsIGV4dGVuZHMgRUZhY3RvcnlJbXBsIGltcGxlbWVudHMgRXhwZXJpbWVudGFsRmFjdG9yeSB7CisJLyoqCisJICogQ3JlYXRlcyB0aGUgZGVmYXVsdCBmYWN0b3J5IGltcGxlbWVudGF0aW9uLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBzdGF0aWMgRXhwZXJpbWVudGFsRmFjdG9yeSBpbml0KCkgeworCQl0cnkgeworCQkJRXhwZXJpbWVudGFsRmFjdG9yeSB0aGVFeHBlcmltZW50YWxGYWN0b3J5ID0gKEV4cGVyaW1lbnRhbEZhY3RvcnkpRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RUZhY3RvcnkoImh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL2V4cGVyaW1lbnRhbC5lY29yZSIpOyAKKwkJCWlmICh0aGVFeHBlcmltZW50YWxGYWN0b3J5ICE9IG51bGwpIHsKKwkJCQlyZXR1cm4gdGhlRXhwZXJpbWVudGFsRmFjdG9yeTsKKwkJCX0KKwkJfQorCQljYXRjaCAoRXhjZXB0aW9uIGV4Y2VwdGlvbikgeworCQkJRWNvcmVQbHVnaW4uSU5TVEFOQ0UubG9nKGV4Y2VwdGlvbik7CisJCX0KKwkJcmV0dXJuIG5ldyBFeHBlcmltZW50YWxGYWN0b3J5SW1wbCgpOworCX0KKworCS8qKgorCSAqIENyZWF0ZXMgYW4gaW5zdGFuY2Ugb2YgdGhlIGZhY3RvcnkuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEV4cGVyaW1lbnRhbEZhY3RvcnlJbXBsKCkgeworCQlzdXBlcigpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBFT2JqZWN0IGNyZWF0ZShFQ2xhc3MgZUNsYXNzKSB7CisJCXN3aXRjaCAoZUNsYXNzLmdldENsYXNzaWZpZXJJRCgpKSB7CisJCQljYXNlIEV4cGVyaW1lbnRhbFBhY2thZ2UuUEVSQ09MQVRJT05fRElTRUFTRV9NT0RFTDogcmV0dXJuIGNyZWF0ZVBlcmNvbGF0aW9uRGlzZWFzZU1vZGVsKCk7CisJCQljYXNlIEV4cGVyaW1lbnRhbFBhY2thZ2UuVEJfRElTRUFTRV9NT0RFTF9MQUJFTDogcmV0dXJuIGNyZWF0ZVRCRGlzZWFzZU1vZGVsTGFiZWwoKTsKKwkJCWNhc2UgRXhwZXJpbWVudGFsUGFja2FnZS5UQl9ESVNFQVNFX01PREVMX0xBQkVMX1ZBTFVFOiByZXR1cm4gY3JlYXRlVEJEaXNlYXNlTW9kZWxMYWJlbFZhbHVlKCk7CisJCQljYXNlIEV4cGVyaW1lbnRhbFBhY2thZ2UuVEJfRElTRUFTRV9NT0RFTDogcmV0dXJuIGNyZWF0ZVRCRGlzZWFzZU1vZGVsKCk7CisJCQlkZWZhdWx0OgorCQkJCXRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIlRoZSBjbGFzcyAnIiArIGVDbGFzcy5nZXROYW1lKCkgKyAiJyBpcyBub3QgYSB2YWxpZCBjbGFzc2lmaWVyIik7CisJCX0KKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgUGVyY29sYXRpb25EaXNlYXNlTW9kZWwgY3JlYXRlUGVyY29sYXRpb25EaXNlYXNlTW9kZWwoKSB7CisJCVBlcmNvbGF0aW9uRGlzZWFzZU1vZGVsSW1wbCBwZXJjb2xhdGlvbkRpc2Vhc2VNb2RlbCA9IG5ldyBQZXJjb2xhdGlvbkRpc2Vhc2VNb2RlbEltcGwoKTsKKwkJcmV0dXJuIHBlcmNvbGF0aW9uRGlzZWFzZU1vZGVsOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBUQkRpc2Vhc2VNb2RlbExhYmVsIGNyZWF0ZVRCRGlzZWFzZU1vZGVsTGFiZWwoKSB7CisJCVRCRGlzZWFzZU1vZGVsTGFiZWxJbXBsIHRiRGlzZWFzZU1vZGVsTGFiZWwgPSBuZXcgVEJEaXNlYXNlTW9kZWxMYWJlbEltcGwoKTsKKwkJcmV0dXJuIHRiRGlzZWFzZU1vZGVsTGFiZWw7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFRCRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZSBjcmVhdGVUQkRpc2Vhc2VNb2RlbExhYmVsVmFsdWUoKSB7CisJCVRCRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZUltcGwgdGJEaXNlYXNlTW9kZWxMYWJlbFZhbHVlID0gbmV3IFRCRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZUltcGwoKTsKKwkJcmV0dXJuIHRiRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVEJEaXNlYXNlTW9kZWwgY3JlYXRlVEJEaXNlYXNlTW9kZWwoKSB7CisJCVRCRGlzZWFzZU1vZGVsSW1wbCB0YkRpc2Vhc2VNb2RlbCA9IG5ldyBUQkRpc2Vhc2VNb2RlbEltcGwoKTsKKwkJcmV0dXJuIHRiRGlzZWFzZU1vZGVsOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFeHBlcmltZW50YWxQYWNrYWdlIGdldEV4cGVyaW1lbnRhbFBhY2thZ2UoKSB7CisJCXJldHVybiAoRXhwZXJpbWVudGFsUGFja2FnZSlnZXRFUGFja2FnZSgpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGRlcHJlY2F0ZWQKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQERlcHJlY2F0ZWQKKwlwdWJsaWMgc3RhdGljIEV4cGVyaW1lbnRhbFBhY2thZ2UgZ2V0UGFja2FnZSgpIHsKKwkJcmV0dXJuIEV4cGVyaW1lbnRhbFBhY2thZ2UuZUlOU1RBTkNFOworCX0KKworfSAvL0V4cGVyaW1lbnRhbEZhY3RvcnlJbXBsCmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leHBlcmltZW50YWwvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9leHBlcmltZW50YWwvaW1wbC9FeHBlcmltZW50YWxQYWNrYWdlSW1wbC5qYXZhIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXhwZXJpbWVudGFsL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvZXhwZXJpbWVudGFsL2ltcGwvRXhwZXJpbWVudGFsUGFja2FnZUltcGwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yODQxNmFmCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXhwZXJpbWVudGFsL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvZXhwZXJpbWVudGFsL2ltcGwvRXhwZXJpbWVudGFsUGFja2FnZUltcGwuamF2YQpAQCAtMCwwICsxLDI3MCBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXhwZXJpbWVudGFsLmltcGw7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDkgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVBdHRyaWJ1dGU7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzczsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRVBhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVSZWZlcmVuY2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVjb3JlUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuaW1wbC5FUGFja2FnZUltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmxvZ2dlci5Mb2dnZXJQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leHBlcmltZW50YWwuRXhwZXJpbWVudGFsRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXhwZXJpbWVudGFsLkV4cGVyaW1lbnRhbFBhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4cGVyaW1lbnRhbC5QZXJjb2xhdGlvbkRpc2Vhc2VNb2RlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXhwZXJpbWVudGFsLlRCRGlzZWFzZU1vZGVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leHBlcmltZW50YWwuVEJEaXNlYXNlTW9kZWxMYWJlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXhwZXJpbWVudGFsLlRCRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmRQYWNrYWdlOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiBBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgbW9kZWwgPGI+UGFja2FnZTwvYj4uCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIEV4cGVyaW1lbnRhbFBhY2thZ2VJbXBsIGV4dGVuZHMgRVBhY2thZ2VJbXBsIGltcGxlbWVudHMgRXhwZXJpbWVudGFsUGFja2FnZSB7CisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJpdmF0ZSBFQ2xhc3MgcGVyY29sYXRpb25EaXNlYXNlTW9kZWxFQ2xhc3MgPSBudWxsOworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByaXZhdGUgRUNsYXNzIHRiRGlzZWFzZU1vZGVsTGFiZWxFQ2xhc3MgPSBudWxsOworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByaXZhdGUgRUNsYXNzIHRiRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZUVDbGFzcyA9IG51bGw7CisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJpdmF0ZSBFQ2xhc3MgdGJEaXNlYXNlTW9kZWxFQ2xhc3MgPSBudWxsOworCS8qKgorCSAqIENyZWF0ZXMgYW4gaW5zdGFuY2Ugb2YgdGhlIG1vZGVsIDxiPlBhY2thZ2U8L2I+LCByZWdpc3RlcmVkIHdpdGgKKwkgKiB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVQYWNrYWdlLlJlZ2lzdHJ5IEVQYWNrYWdlLlJlZ2lzdHJ5fSBieSB0aGUgcGFja2FnZQorCSAqIHBhY2thZ2UgVVJJIHZhbHVlLgorCSAqIDxwPk5vdGU6IHRoZSBjb3JyZWN0IHdheSB0byBjcmVhdGUgdGhlIHBhY2thZ2UgaXMgdmlhIHRoZSBzdGF0aWMKKwkgKiBmYWN0b3J5IG1ldGhvZCB7QGxpbmsgI2luaXQgaW5pdCgpfSwgd2hpY2ggYWxzbyBwZXJmb3JtcworCSAqIGluaXRpYWxpemF0aW9uIG9mIHRoZSBwYWNrYWdlLCBvciByZXR1cm5zIHRoZSByZWdpc3RlcmVkIHBhY2thZ2UsCisJICogaWYgb25lIGFscmVhZHkgZXhpc3RzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRVBhY2thZ2UuUmVnaXN0cnkKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leHBlcmltZW50YWwuRXhwZXJpbWVudGFsUGFja2FnZSNlTlNfVVJJCisJICogQHNlZSAjaW5pdCgpCisJICogQGdlbmVyYXRlZAorCSAqLworCXByaXZhdGUgRXhwZXJpbWVudGFsUGFja2FnZUltcGwoKSB7CisJCXN1cGVyKGVOU19VUkksIEV4cGVyaW1lbnRhbEZhY3RvcnkuZUlOU1RBTkNFKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcml2YXRlIHN0YXRpYyBib29sZWFuIGlzSW5pdGVkID0gZmFsc2U7CisKKwkvKioKKwkgKiBDcmVhdGVzLCByZWdpc3RlcnMsIGFuZCBpbml0aWFsaXplcyB0aGUgPGI+UGFja2FnZTwvYj4gZm9yIHRoaXMgbW9kZWwsIGFuZCBmb3IgYW55IG90aGVycyB1cG9uIHdoaWNoIGl0IGRlcGVuZHMuCisJICogCisJICogPHA+VGhpcyBtZXRob2QgaXMgdXNlZCB0byBpbml0aWFsaXplIHtAbGluayBFeHBlcmltZW50YWxQYWNrYWdlI2VJTlNUQU5DRX0gd2hlbiB0aGF0IGZpZWxkIGlzIGFjY2Vzc2VkLgorCSAqIENsaWVudHMgc2hvdWxkIG5vdCBpbnZva2UgaXQgZGlyZWN0bHkuIEluc3RlYWQsIHRoZXkgc2hvdWxkIHNpbXBseSBhY2Nlc3MgdGhhdCBmaWVsZCB0byBvYnRhaW4gdGhlIHBhY2thZ2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNlTlNfVVJJCisJICogQHNlZSAjY3JlYXRlUGFja2FnZUNvbnRlbnRzKCkKKwkgKiBAc2VlICNpbml0aWFsaXplUGFja2FnZUNvbnRlbnRzKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHN0YXRpYyBFeHBlcmltZW50YWxQYWNrYWdlIGluaXQoKSB7CisJCWlmIChpc0luaXRlZCkgcmV0dXJuIChFeHBlcmltZW50YWxQYWNrYWdlKUVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVQYWNrYWdlKEV4cGVyaW1lbnRhbFBhY2thZ2UuZU5TX1VSSSk7CisKKwkJLy8gT2J0YWluIG9yIGNyZWF0ZSBhbmQgcmVnaXN0ZXIgcGFja2FnZQorCQlFeHBlcmltZW50YWxQYWNrYWdlSW1wbCB0aGVFeHBlcmltZW50YWxQYWNrYWdlID0gKEV4cGVyaW1lbnRhbFBhY2thZ2VJbXBsKShFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXQoZU5TX1VSSSkgaW5zdGFuY2VvZiBFeHBlcmltZW50YWxQYWNrYWdlSW1wbCA/IEVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldChlTlNfVVJJKSA6IG5ldyBFeHBlcmltZW50YWxQYWNrYWdlSW1wbCgpKTsKKworCQlpc0luaXRlZCA9IHRydWU7CisKKwkJLy8gSW5pdGlhbGl6ZSBzaW1wbGUgZGVwZW5kZW5jaWVzCisJCVN0YW5kYXJkUGFja2FnZS5lSU5TVEFOQ0UuZUNsYXNzKCk7CisJCUxvZ2dlclBhY2thZ2UuZUlOU1RBTkNFLmVDbGFzcygpOworCisJCS8vIENyZWF0ZSBwYWNrYWdlIG1ldGEtZGF0YSBvYmplY3RzCisJCXRoZUV4cGVyaW1lbnRhbFBhY2thZ2UuY3JlYXRlUGFja2FnZUNvbnRlbnRzKCk7CisKKwkJLy8gSW5pdGlhbGl6ZSBjcmVhdGVkIG1ldGEtZGF0YQorCQl0aGVFeHBlcmltZW50YWxQYWNrYWdlLmluaXRpYWxpemVQYWNrYWdlQ29udGVudHMoKTsKKworCQkvLyBNYXJrIG1ldGEtZGF0YSB0byBpbmRpY2F0ZSBpdCBjYW4ndCBiZSBjaGFuZ2VkCisJCXRoZUV4cGVyaW1lbnRhbFBhY2thZ2UuZnJlZXplKCk7CisKKyAgCisJCS8vIFVwZGF0ZSB0aGUgcmVnaXN0cnkgYW5kIHJldHVybiB0aGUgcGFja2FnZQorCQlFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5wdXQoRXhwZXJpbWVudGFsUGFja2FnZS5lTlNfVVJJLCB0aGVFeHBlcmltZW50YWxQYWNrYWdlKTsKKwkJcmV0dXJuIHRoZUV4cGVyaW1lbnRhbFBhY2thZ2U7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVDbGFzcyBnZXRQZXJjb2xhdGlvbkRpc2Vhc2VNb2RlbCgpIHsKKwkJcmV0dXJuIHBlcmNvbGF0aW9uRGlzZWFzZU1vZGVsRUNsYXNzOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQ2xhc3MgZ2V0VEJEaXNlYXNlTW9kZWxMYWJlbCgpIHsKKwkJcmV0dXJuIHRiRGlzZWFzZU1vZGVsTGFiZWxFQ2xhc3M7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVDbGFzcyBnZXRUQkRpc2Vhc2VNb2RlbExhYmVsVmFsdWUoKSB7CisJCXJldHVybiB0YkRpc2Vhc2VNb2RlbExhYmVsVmFsdWVFQ2xhc3M7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVBdHRyaWJ1dGUgZ2V0VEJEaXNlYXNlTW9kZWxMYWJlbFZhbHVlX0lsKCkgeworCQlyZXR1cm4gKEVBdHRyaWJ1dGUpdGJEaXNlYXNlTW9kZWxMYWJlbFZhbHVlRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVBdHRyaWJ1dGUgZ2V0VEJEaXNlYXNlTW9kZWxMYWJlbFZhbHVlX0lhKCkgeworCQlyZXR1cm4gKEVBdHRyaWJ1dGUpdGJEaXNlYXNlTW9kZWxMYWJlbFZhbHVlRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVDbGFzcyBnZXRUQkRpc2Vhc2VNb2RlbCgpIHsKKwkJcmV0dXJuIHRiRGlzZWFzZU1vZGVsRUNsYXNzOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFeHBlcmltZW50YWxGYWN0b3J5IGdldEV4cGVyaW1lbnRhbEZhY3RvcnkoKSB7CisJCXJldHVybiAoRXhwZXJpbWVudGFsRmFjdG9yeSlnZXRFRmFjdG9yeUluc3RhbmNlKCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJpdmF0ZSBib29sZWFuIGlzQ3JlYXRlZCA9IGZhbHNlOworCisJLyoqCisJICogQ3JlYXRlcyB0aGUgbWV0YS1tb2RlbCBvYmplY3RzIGZvciB0aGUgcGFja2FnZS4gIFRoaXMgbWV0aG9kIGlzCisJICogZ3VhcmRlZCB0byBoYXZlIG5vIGFmZmVjdCBvbiBhbnkgaW52b2NhdGlvbiBidXQgaXRzIGZpcnN0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIGNyZWF0ZVBhY2thZ2VDb250ZW50cygpIHsKKwkJaWYgKGlzQ3JlYXRlZCkgcmV0dXJuOworCQlpc0NyZWF0ZWQgPSB0cnVlOworCisJCS8vIENyZWF0ZSBjbGFzc2VzIGFuZCB0aGVpciBmZWF0dXJlcworCQlwZXJjb2xhdGlvbkRpc2Vhc2VNb2RlbEVDbGFzcyA9IGNyZWF0ZUVDbGFzcyhQRVJDT0xBVElPTl9ESVNFQVNFX01PREVMKTsKKworCQl0YkRpc2Vhc2VNb2RlbExhYmVsRUNsYXNzID0gY3JlYXRlRUNsYXNzKFRCX0RJU0VBU0VfTU9ERUxfTEFCRUwpOworCisJCXRiRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZUVDbGFzcyA9IGNyZWF0ZUVDbGFzcyhUQl9ESVNFQVNFX01PREVMX0xBQkVMX1ZBTFVFKTsKKwkJY3JlYXRlRUF0dHJpYnV0ZSh0YkRpc2Vhc2VNb2RlbExhYmVsVmFsdWVFQ2xhc3MsIFRCX0RJU0VBU0VfTU9ERUxfTEFCRUxfVkFMVUVfX0lMKTsKKwkJY3JlYXRlRUF0dHJpYnV0ZSh0YkRpc2Vhc2VNb2RlbExhYmVsVmFsdWVFQ2xhc3MsIFRCX0RJU0VBU0VfTU9ERUxfTEFCRUxfVkFMVUVfX0lBKTsKKworCQl0YkRpc2Vhc2VNb2RlbEVDbGFzcyA9IGNyZWF0ZUVDbGFzcyhUQl9ESVNFQVNFX01PREVMKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcml2YXRlIGJvb2xlYW4gaXNJbml0aWFsaXplZCA9IGZhbHNlOworCisJLyoqCisJICogQ29tcGxldGUgdGhlIGluaXRpYWxpemF0aW9uIG9mIHRoZSBwYWNrYWdlIGFuZCBpdHMgbWV0YS1tb2RlbC4gIFRoaXMKKwkgKiBtZXRob2QgaXMgZ3VhcmRlZCB0byBoYXZlIG5vIGFmZmVjdCBvbiBhbnkgaW52b2NhdGlvbiBidXQgaXRzIGZpcnN0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIGluaXRpYWxpemVQYWNrYWdlQ29udGVudHMoKSB7CisJCWlmIChpc0luaXRpYWxpemVkKSByZXR1cm47CisJCWlzSW5pdGlhbGl6ZWQgPSB0cnVlOworCisJCS8vIEluaXRpYWxpemUgcGFja2FnZQorCQlzZXROYW1lKGVOQU1FKTsKKwkJc2V0TnNQcmVmaXgoZU5TX1BSRUZJWCk7CisJCXNldE5zVVJJKGVOU19VUkkpOworCisJCS8vIE9idGFpbiBvdGhlciBkZXBlbmRlbnQgcGFja2FnZXMKKwkJU3RhbmRhcmRQYWNrYWdlIHRoZVN0YW5kYXJkUGFja2FnZSA9IChTdGFuZGFyZFBhY2thZ2UpRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RVBhY2thZ2UoU3RhbmRhcmRQYWNrYWdlLmVOU19VUkkpOworCQlFY29yZVBhY2thZ2UgdGhlRWNvcmVQYWNrYWdlID0gKEVjb3JlUGFja2FnZSlFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShFY29yZVBhY2thZ2UuZU5TX1VSSSk7CisKKwkJLy8gQ3JlYXRlIHR5cGUgcGFyYW1ldGVycworCisJCS8vIFNldCBib3VuZHMgZm9yIHR5cGUgcGFyYW1ldGVycworCisJCS8vIEFkZCBzdXBlcnR5cGVzIHRvIGNsYXNzZXMKKwkJcGVyY29sYXRpb25EaXNlYXNlTW9kZWxFQ2xhc3MuZ2V0RVN1cGVyVHlwZXMoKS5hZGQodGhlU3RhbmRhcmRQYWNrYWdlLmdldFN0b2NoYXN0aWNTRUlSRGlzZWFzZU1vZGVsKCkpOworCQl0YkRpc2Vhc2VNb2RlbExhYmVsRUNsYXNzLmdldEVTdXBlclR5cGVzKCkuYWRkKHRoZVN0YW5kYXJkUGFja2FnZS5nZXRTdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsKCkpOworCQl0YkRpc2Vhc2VNb2RlbExhYmVsVmFsdWVFQ2xhc3MuZ2V0RVN1cGVyVHlwZXMoKS5hZGQodGhlU3RhbmRhcmRQYWNrYWdlLmdldFN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZSgpKTsKKwkJdGJEaXNlYXNlTW9kZWxFQ2xhc3MuZ2V0RVN1cGVyVHlwZXMoKS5hZGQodGhlU3RhbmRhcmRQYWNrYWdlLmdldFN0YW5kYXJkRGlzZWFzZU1vZGVsKCkpOworCisJCS8vIEluaXRpYWxpemUgY2xhc3NlcyBhbmQgZmVhdHVyZXM7IGFkZCBvcGVyYXRpb25zIGFuZCBwYXJhbWV0ZXJzCisJCWluaXRFQ2xhc3MocGVyY29sYXRpb25EaXNlYXNlTW9kZWxFQ2xhc3MsIFBlcmNvbGF0aW9uRGlzZWFzZU1vZGVsLmNsYXNzLCAiUGVyY29sYXRpb25EaXNlYXNlTW9kZWwiLCAhSVNfQUJTVFJBQ1QsICFJU19JTlRFUkZBQ0UsIElTX0dFTkVSQVRFRF9JTlNUQU5DRV9DTEFTUyk7CisKKwkJaW5pdEVDbGFzcyh0YkRpc2Vhc2VNb2RlbExhYmVsRUNsYXNzLCBUQkRpc2Vhc2VNb2RlbExhYmVsLmNsYXNzLCAiVEJEaXNlYXNlTW9kZWxMYWJlbCIsICFJU19BQlNUUkFDVCwgIUlTX0lOVEVSRkFDRSwgSVNfR0VORVJBVEVEX0lOU1RBTkNFX0NMQVNTKTsKKworCQlpbml0RUNsYXNzKHRiRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZUVDbGFzcywgVEJEaXNlYXNlTW9kZWxMYWJlbFZhbHVlLmNsYXNzLCAiVEJEaXNlYXNlTW9kZWxMYWJlbFZhbHVlIiwgIUlTX0FCU1RSQUNULCAhSVNfSU5URVJGQUNFLCBJU19HRU5FUkFURURfSU5TVEFOQ0VfQ0xBU1MpOworCQlpbml0RUF0dHJpYnV0ZShnZXRUQkRpc2Vhc2VNb2RlbExhYmVsVmFsdWVfSWwoKSwgdGhlRWNvcmVQYWNrYWdlLmdldEVEb3VibGUoKSwgImlsIiwgIjAuMCIsIDAsIDEsIFRCRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZS5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsKKwkJaW5pdEVBdHRyaWJ1dGUoZ2V0VEJEaXNlYXNlTW9kZWxMYWJlbFZhbHVlX0lhKCksIHRoZUVjb3JlUGFja2FnZS5nZXRFRG91YmxlKCksICJpYSIsICIwLjAiLCAwLCAxLCBUQkRpc2Vhc2VNb2RlbExhYmVsVmFsdWUuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7CisKKwkJaW5pdEVDbGFzcyh0YkRpc2Vhc2VNb2RlbEVDbGFzcywgVEJEaXNlYXNlTW9kZWwuY2xhc3MsICJUQkRpc2Vhc2VNb2RlbCIsICFJU19BQlNUUkFDVCwgIUlTX0lOVEVSRkFDRSwgSVNfR0VORVJBVEVEX0lOU1RBTkNFX0NMQVNTKTsKKworCQkvLyBDcmVhdGUgcmVzb3VyY2UKKwkJY3JlYXRlUmVzb3VyY2UoZU5TX1VSSSk7CisJfQorCit9IC8vRXhwZXJpbWVudGFsUGFja2FnZUltcGwKZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4cGVyaW1lbnRhbC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL2V4cGVyaW1lbnRhbC9pbXBsL0xvZ0Rpc2Vhc2VTdGF0ZS5qYXZhIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXhwZXJpbWVudGFsL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvZXhwZXJpbWVudGFsL2ltcGwvTG9nRGlzZWFzZVN0YXRlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTc1MDk0YgotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4cGVyaW1lbnRhbC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL2V4cGVyaW1lbnRhbC9pbXBsL0xvZ0Rpc2Vhc2VTdGF0ZS5qYXZhCkBAIC0wLDAgKzEsNjggQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4cGVyaW1lbnRhbC5pbXBsOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA5IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGphdmEuaW8uRmlsZVdyaXRlcjsKK2ltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOworCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLkFjdGl2YXRvcjsKKworY2xhc3MgTG9nRGlzZWFzZVN0YXRlIHsKKworCXByaXZhdGUgc3RhdGljIEZpbGVXcml0ZXIgZnc7CisKKwkvKioKKwkgKiBDb25zdHJ1Y3RvcgorCSAqIEBwYXJhbSBmaWxlTmFtZQorCSAqLworCXB1YmxpYyBMb2dEaXNlYXNlU3RhdGUoU3RyaW5nIGZpbGVOYW1lKSB7CisJCXRyeSB7CisJCQlmdyA9IG5ldyBGaWxlV3JpdGVyKGZpbGVOYW1lKTsKKwkJfSBjYXRjaCAoSU9FeGNlcHRpb24gZSkgeworCQkJQWN0aXZhdG9yLmxvZ0luZm9ybWF0aW9uKCJFcnJvciBjcmVhdGluZyBmaWxlIHdyaXRlciAiK2UuZ2V0TWVzc2FnZSgpLGUpOworCQkJZS5wcmludFN0YWNrVHJhY2UoKTsKKwkJCS8vU3lzdGVtLmV4aXQoMSk7CisJCX0KKwl9CisKKworCS8qKgorCSAqIHdyaXRlIHN0cmluZworCSAqIEBwYXJhbSBzdHIKKwkgKi8KKwlwdWJsaWMgdm9pZCB3cml0ZShTdHJpbmcgc3RyKSB7CisJCXRyeSB7CisJCQkvL1N5c3RlbS5vdXQucHJpbnQoc3RyKTsKKwkJCWZ3LndyaXRlKHN0cik7IAorCQl9IGNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7CisJCQlBY3RpdmF0b3IubG9nSW5mb3JtYXRpb24oIkVycm9yIHdyaXRpbmcgdG8gZmlsZSB3cml0ZXIgIixlKTsKKwkJCWUucHJpbnRTdGFja1RyYWNlKCk7CisJCQkvL1N5c3RlbS5leGl0KDEpOworCQl9Ly8gdHJ5CisJfSAvLyB3cml0ZQorCisJLyoqCisJICogY2xvc2UKKwkgKi8KKwlwdWJsaWMgc3RhdGljIHZvaWQgY2xvc2UoKSB7CisKKwkJdHJ5IHsKKwkJCWZ3LmZsdXNoKCk7CisJCQlmdy5jbG9zZSgpOworCQl9IGNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7CisJCQlBY3RpdmF0b3IubG9nSW5mb3JtYXRpb24oIkVycm9yIGNsb3NpbmcgZmlsZSB3cml0ZXIgIixlKTsKKwkJCWUucHJpbnRTdGFja1RyYWNlKCk7CisJCX0vLyB0cnkKKwl9CisKKworfSAvLyBMb2dEaXNlYXNlU3RhdGUKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leHBlcmltZW50YWwvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9leHBlcmltZW50YWwvaW1wbC9QZXJjb2xhdGlvbkRpc2Vhc2VNb2RlbEltcGwuamF2YSBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4cGVyaW1lbnRhbC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL2V4cGVyaW1lbnRhbC9pbXBsL1BlcmNvbGF0aW9uRGlzZWFzZU1vZGVsSW1wbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJmZDYwYTcKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leHBlcmltZW50YWwvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9leHBlcmltZW50YWwvaW1wbC9QZXJjb2xhdGlvbkRpc2Vhc2VNb2RlbEltcGwuamF2YQpAQCAtMCwwICsxLDI0NCBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXhwZXJpbWVudGFsLmltcGw7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDkgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzczsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuU1RFTVRpbWU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4cGVyaW1lbnRhbC5FeHBlcmltZW50YWxQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leHBlcmltZW50YWwuUGVyY29sYXRpb25EaXNlYXNlTW9kZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLkRpc2Vhc2VNb2RlbExhYmVsVmFsdWU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlNFSVJMYWJlbFZhbHVlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TSUxhYmVsVmFsdWU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuaW1wbC5TRUlSTGFiZWxWYWx1ZUltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLmltcGwuU3RvY2hhc3RpY1NFSVJEaXNlYXNlTW9kZWxJbXBsOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiBBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+UGVyY29sYXRpb24gRGlzZWFzZSBNb2RlbDwvYj48L2VtPicuCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIDxwPgorICogPC9wPgorICoKKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIFBlcmNvbGF0aW9uRGlzZWFzZU1vZGVsSW1wbCBleHRlbmRzIFN0b2NoYXN0aWNTRUlSRGlzZWFzZU1vZGVsSW1wbCBpbXBsZW1lbnRzIFBlcmNvbGF0aW9uRGlzZWFzZU1vZGVsIHsKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJcHVibGljIFBlcmNvbGF0aW9uRGlzZWFzZU1vZGVsSW1wbCgpIHsKKwkJc3VwZXIoKTsKKwl9CisKKwlMb2dEaXNlYXNlU3RhdGUgbGRzID0gbnVsbDsKKwlpbnQgaWNvdW50ID0gMDsKKwlzdGF0aWMgYm9vbGVhbiBsb2dDb21wbGV0ZSA9IGZhbHNlOworCisJCisJLyoqCisJICogCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuaW1wbC5TRUlSSW1wbCNjb21wdXRlRGlzZWFzZURlbHRhcyhvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuU1RFTVRpbWUsIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsVmFsdWUsIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsLCBsb25nKQorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBTdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsVmFsdWUgY29tcHV0ZURpc2Vhc2VEZWx0YXMoCisJCQlmaW5hbCBTVEVNVGltZSB0aW1lLAorCQkJZmluYWwgU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbFZhbHVlIGN1cnJlbnRTdGF0ZSwKKwkJCWZpbmFsIFN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWwgZGlzZWFzZUxhYmVsLCBmaW5hbCBsb25nIHRpbWVEZWx0YSwgRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZSByZXR1cm5WYWx1ZSkgeworCQlmaW5hbCBTRUlSTGFiZWxWYWx1ZSBjdXJyZW50U0VJUiA9IChTRUlSTGFiZWxWYWx1ZSkgY3VycmVudFN0YXRlOworCisJCS8vIFRoaXMgaXMgYmV0YSogVGhlIGVmZmVjdGl2ZSB0cmFuc21pc3Npb24gcmF0ZSBjb25zdGFudCAobm9ybWFsaXplZCkKKwkJZmluYWwgZG91YmxlIHRyYW5zbWlzaW9uUmF0ZSA9IGdldEFkanVzdGVkVHJhbnNtaXNzaW9uUmF0ZSh0aW1lRGVsdGEpCisJCQkJKiBnZXRUcmFuc21pc3Npb25SYXRlU2NhbGVGYWN0b3IoZGlzZWFzZUxhYmVsKTsKKwkJCisJCQorCQkvKgorCQkgKiBUaGlzIE11c3QgYmVjb21lIGEgcGFyYW1ldGVyCisJCSAqLworCQlmaW5hbCBkb3VibGUgQ1JJVElDQUxfU1VTQ0VQVElCTEUgPSAwLjI1OworCQkKKwkJLyoKKyAgICAgICAgICogNCkgQ29tcHV0ZSB0aGUgIkxvY2FsIFRyYW5zbWlzc2lvbiBDb2VmZmljaWVudCIKKyAgICAgICAgICogCisgICAgICAgICAqIFRoZSAoTm9ybWFsaXplZCkgIkxvY2FsIFRyYW5zbWlzc2lvbiBDb2VmZmljaWVudCIgZGVwZW5kcyB1cG9uIHRoZQorICAgICAgICAgKiBkaXNlYXNlJ3Mgc3BlY2lmaWVkIHRyYW5zbWlzc2lvbiBjb2VmZmljaWVudCwgYnV0IGl0IHNjYWxlcyB3aXRoIHRoZQorICAgICAgICAgKiBsb2NhbCBwb3B1bGF0aW9uIGRlbnNpdHkuIFRoaXMgcmVzY2FsaW5nIG9yICJub3JtYWxpemF0aW9uIiBpcyBkb25lCisgICAgICAgICAqIGJ5IHRoZSBjdXJyZW50Q291bnR5LmdldFRyYW5zU2NhbGVGYWN0b3IoKSBtZXRob2QuCisgICAgICAgICAqLworCQkKKwkJZG91YmxlIGRlbiA9IGN1cnJlbnRTRUlSLmdldFBvcHVsYXRpb25Db3VudCgpOworCisJCWRvdWJsZSBzZSA9ICAoY3VycmVudFNFSVIuZ2V0UygpKyBjdXJyZW50U0VJUi5nZXRFKCkrIGN1cnJlbnRTRUlSLmdldEkoKSkgLyBkZW47CisgICAgICAgIC8vZG91YmxlIHNlID0gIChjdXJyZW50U0VJUi5nZXRTKCkrIGN1cnJlbnRTRUlSLmdldEUoKSkgLyBkZW47CisgICAgICAgIC8vZG91YmxlIHNlID0gIGN1cnJlbnRTRUlSLmdldFMoKSAvIGRlbjsKKyAgICAgICAgZG91YmxlIHBlcmNGYWN0ID0gMS4wOworICAgICAgICBkb3VibGUgbG9jYWxUcmFuc21pc2lvbkNvZWZmaWNpZW50ID0gMC4wOworICAgICAgICAKKyAgICAgICAgCisgICAgICAgIC8qCisgICAgICAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICAgICAgICogVEhJUyBJUyBXSEVSRSBXRSBBREQgVEhFIFBFUkNPTEFUSU9OIFRIUkVTSE9MRCBUTyBUSEUgTU9ERUwgKioqKgorICAgICAgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAgICAgICAqLyAKKyAgICAgICAgLy8gaWYgYWJvdmUgcGVyY29sYXRpb24gdGhyZXNob2xkCisgICAgICAgIGlmIChzZSA+PSBDUklUSUNBTF9TVVNDRVBUSUJMRSkgeworCQkJLy8gbm93IHdlIHB1dCBpbiBwZXJjb2xhdGlvbgorCQkJZG91YmxlIHBlcmNOdW0gPSBzZSAtIENSSVRJQ0FMX1NVU0NFUFRJQkxFOworCQkJaWYgKHBlcmNOdW0gPD0gMC4wKQorCQkJCXBlcmNOdW0gPSAwLjA7IC8vIHNob3VsZCBuZXZlciBoYXBwZW4KKwkJCS8vIE5vcm1hbGl6YXRpb24gKHNvIGFsbCBwZXJjb2xhdGlvbiBmbiB0ZXJtcyBtYXggYXQgMS4wCisJCQlkb3VibGUgcGVyY05vcm0gPSAxLjAgLSBDUklUSUNBTF9TVVNDRVBUSUJMRTsKKwkJCS8qCisJCQkgKiBnZXROb25MaW5lYXJpdHlDb2VmZmljaWVudCgpIHVzZWQgZGlmZmVyZW50bHkgaGVyZS4uLi4KKwkJCSAqLworCQkJcGVyY0ZhY3QgPSBNYXRoLnBvdygocGVyY051bSAvIHBlcmNOb3JtKSwgZ2V0Tm9uTGluZWFyaXR5Q29lZmZpY2llbnQoKSk7CisJCQkvLyBUSEUgVFJBTlNNSVNTSU9OIENPRUYgQUJPVkUgQ1JJVElDQUwgUE9JTlQKKwkJCWxvY2FsVHJhbnNtaXNpb25Db2VmZmljaWVudCA9IHRyYW5zbWlzaW9uUmF0ZSAqIHBlcmNGYWN0OworCQl9IGVsc2UgeworCQkJbG9jYWxUcmFuc21pc2lvbkNvZWZmaWNpZW50ID0gMC4wOworCQkJLy8vL0VMU0UgYWRkIGFuIGV4cG9uZW50aWFsIHRhaWwKKwkJCS8vZG91YmxlIG51bSA9IC0xLjAgKiBNYXRoLmFicyhDUklUSUNBTF9TVVNDRVBUSUJMRSAtIHNpKTsKKwkJCS8vbnVtICo9ICgyMC4wIC8gbm9uTGluZWFyaXR5RXhwb25lbnQpOworCQkJLy8vL1RIRSBUUkFOU01JU1NJT04gQ09FRiBCRUxPVyBDUklUSUNBTCBQT0lOVAorCQkJLy9sb2NhbFRyYW5zbWlzaW9uQ29lZmZpY2llbnQgPSAuMDIqTWF0aC5leHAobnVtKTsKKwkJCS8vLy9BY3RpdmF0b3IubG9nSW5mb3JtYXRpb24oInM9ICIrc2krIiBiZXRhPSAiK2xvY2FsVHJhbnNtaXNpb25Db2VmZmljaWVudCk7CisJCX0KKyAgICAgICAgLyoKKyAgICAgICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICAgICAgICogRU5EIFBFUkNPTEFUSU9OIFRIUkVTSE9MRCBDT0RFICoqKioKKyAgICAgICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICAgICAgICovIAorICAgICAgICAKKwkJCisJCWlmIChsZHM9PW51bGwpIHsKKwkJCWludCBpbmMgPSAoaW50KSAodGhpcy5nZXRJbmN1YmF0aW9uUmF0ZSgpKjEwMC4wKTsKKwkJCWludCBiZXRhID0gKGludCkgKHRoaXMuZ2V0VHJhbnNtaXNzaW9uUmF0ZSgpKjEwMC4wKTsKKwkJCWludCByZWMgPSAoaW50KSAodGhpcy5nZXRSZWNvdmVyeVJhdGUoKSoxMDAuMCk7CisJCQlpbnQgaW1sb3NzID0gKGludCkgKHRoaXMuZ2V0SW1tdW5pdHlMb3NzUmF0ZSgpKjEwMDAuMCk7CisJCQkKKwkJCWxkcyA9IG5ldyBMb2dEaXNlYXNlU3RhdGUoIi4vdGltZWxvZ0kiK2luYysiQiIrYmV0YSsiaWwiK2ltbG9zcysiciIrcmVjKyIudHh0Iik7CisJCX0KKwkJCisJCQorCQlkb3VibGUgcGQgPSAxLjAgLyBjdXJyZW50U0VJUi5nZXRQb3B1bGF0aW9uQ291bnQoKTsKKwkJU3RyaW5nIHN0ciA9IGljb3VudCsiLCAiK2N1cnJlbnRTRUlSLmdldFMoKSAqIHBkICsiLCAiK2N1cnJlbnRTRUlSLmdldEUoKSogcGQgKyAiLCAiICsgY3VycmVudFNFSVIuZ2V0SSgpKiBwZCArICIsICIgKyBjdXJyZW50U0VJUi5nZXRSKCkqIHBkICsgIlxuIjsKKyAgICAgICAgCisJCWlmIChpY291bnQgPD0gNTAwKSB7CisJCQlsZHMud3JpdGUoc3RyKTsKKwkJCWljb3VudCsrOworCQl9CisgICAgICAgIAorCQlpZiAoaWNvdW50ID09IDUwMSkgeworCQkJaWYgKCghbG9nQ29tcGxldGUpICYmIChsZHMgIT0gbnVsbCkpIHsKKwkJCQlMb2dEaXNlYXNlU3RhdGUuY2xvc2UoKTsKKwkJCQlsb2dDb21wbGV0ZSA9IHRydWU7CisJCQl9CisJCX0KKyAgICAgIAorCQkvLyBBY3RpdmF0b3IubG9nSW5mb3JtYXRpb24oIiBzaSA9ICIrc2krIiBzdHIgPSAiK3N0ciApOworCQkKKwkJLy8gVGhlIGVmZmVjdGl2ZSBJbmZlY3Rpb3VzIHBvcHVsYXRpb24gIGlzIGEgZGltZW5zaW9ubGVzcyBudW1iZXIgbm9ybWFsaXplIGJ5IHRvdGFsCisJCS8vIHBvcHVsYXRpb24gdXNlZCBpbiB0aGUgY29tcHV0YXRpb24gb2YgYmV0cypTKmkgd2hlcmUgaSA9IEl7ZWZmZWN0aXZlfS9Qb3AuCisJCS8vIFRoaXMgaW5jbHVkZXMgYSBjb3JyZWN0aW9uIHRvIHRoZSBjdXJyZW50CisJCS8vIGluZmVjdGlvdXMgcG9wdWxhdGlvbiAoSXtlZmZlY3RpdmV9KSBiYXNlZCBvbiB0aGUgY29uc2VydmVkIGV4Y2hhbmdlIG9mIHBlb3BsZSAoY2lyY3VsYXRpb24pCisJCS8vIGJldHdlZW4gcmVnaW9ucy4gTm90ZSB0aGF0IHRoaXMgaXMgbm8gdGhlICJhcnJpdmFscyIgYW5kICJkZXBhcnR1cmVzIiB3aGljaCBhcmUKKwkJLy8gYSBkaWZmZXJlbnQgcHJvY2Vzcy4KKwkJZmluYWwgZG91YmxlIGVmZmVjdGl2ZUluZmVjdGlvdXMgPSBnZXROb3JtYWxpemVkRWZmZWN0aXZlSW5mZWN0aW91cyhkaXNlYXNlTGFiZWwuZ2V0Tm9kZSgpLCBkaXNlYXNlTGFiZWwsIGN1cnJlbnRTRUlSLmdldEkoKSk7CisKKwkJCisJCS8vIENvbXB1dGUgdGhlIG51bWJlciBvZiByZWNvdmVyaW5nICJpbmZlY3Rpb3VzIiB0aGF0IGJlY29tZSAicmVjb3ZlcmVkIgorCQlkb3VibGUgbnVtYmVyT2ZJbmZlY3RlZFRvUmVjb3ZlcmVkID0gZ2V0QWRqdXN0ZWRSZWNvdmVyeVJhdGUodGltZURlbHRhKQorCQkJCSogY3VycmVudFNFSVIuZ2V0SSgpOworCisJCS8vIENvbXB1dGUgdGhlIG51bWJlciBvZiAicmVjb3ZlcmVkIiB0aGF0IGxvc2UgdGhlaXIgaW1tdW5pdHkgYW5kCisJCS8vIGJlY29tZSAic3VzY2VwdGlibGUiCisJCWRvdWJsZSBudW1iZXJPZlJlY292ZXJlZFRvU3VzY2VwdGlibGUgPSBnZXRBZGp1c3RlZEltbXVuaXR5TG9zc1JhdGUodGltZURlbHRhKQorCQkJCSogY3VycmVudFNFSVIuZ2V0UigpOworCisJCS8qCisJCSAqIENvbXB1dGUgdGhlIG51bWJlciBvZiB0cmFuc2l0aW9ucyBmcm9tIFN1c2NlcHRpYmxlIHRvIEV4cG9zZWQKKwkJICogCisJCSAqIEluIGEgbGluZWFyIG1vZGVsIHRoZSAiZWZmZWN0aXZlIiBudW1iZXIgb2YgaW5mZWN0aW91cyBwZW9wbGUgaXMganVzdAorCQkgKiB0aGUgbnVtYmVyIG9mIGluZmVjdGlvdXMgcGVvcGxlIEluIGEgbm9ubGluZWFyIG1vZGVsIHdlIGhhdmUgYQorCQkgKiBub25MaW5lYXJpdHkgZXhwb25lbnQgdGhhdCBpcyA+IDEgdGhpcyBtb2RlbHMgdGhlIGVmZmVjdCBvZiBpbW11bmUKKwkJICogc3lzdGVtIHNhdHVyYXRpb24gd2hlbiBTdXNjZXB0aWJsZSBwZW9wbGUgYXJlIGV4cG9zZWQgdG8gbGFyZ2UKKwkJICogbnVtYmVycyBvZiBpbmZlY3Rpb3VzIHBlb3BsZS4gdGhlbiB0aGUgImVmZmVjdGl2ZSIgbnVtYmVyIG9mCisJCSAqIGluZmVjdGlvdXMgcGVvcGxlIGlzIElebm9uTGluZWFyaXR5IGV4cG9uZW50IHRvIGFsbG93IGZvciBlaXRoZXIKKwkJICogbGluZWFyIG9yIG5vbmxpbmVhciBtb2RlbHMgd2UgYWx3YXlzIGNhbGN1bGF0ZSBJXm5vbkxpbmVhcml0eQorCQkgKiBleHBvbmVudCBhbmQgYWxsb3cgbm9uTGluZWFyaXR5IGV4cG9uZW50ID49IDEuMAorCQkgKi8KKworCQlkb3VibGUgbnVtYmVyT2ZTdXNjZXB0aWJsZVRvRXhwb3NlZCA9IGxvY2FsVHJhbnNtaXNpb25Db2VmZmljaWVudAorCQkJCSogY3VycmVudFNFSVIuZ2V0UygpCisJCQkJKiBlZmZlY3RpdmVJbmZlY3Rpb3VzOworCisJCS8vIENvbXB1dGUgdGhlIG51bWJlciBvZiAiZXhwb3NlZCIgdGhhdCBiZWNvbWUgImluZmVjdGlvdXMiCisJCWRvdWJsZSBudW1iZXJPZkV4cG9zZWRUb0luZmVjdGlvdXMgPSBnZXRBZGp1c3RlZEluY3ViYXRpb25SYXRlKHRpbWVEZWx0YSkKKwkJCQkqIGN1cnJlbnRTRUlSLmdldEUoKTsKKwkJCisJCQorCQlmaW5hbCBkb3VibGUgZGVsdGFTID0gbnVtYmVyT2ZSZWNvdmVyZWRUb1N1c2NlcHRpYmxlIC0gbnVtYmVyT2ZTdXNjZXB0aWJsZVRvRXhwb3NlZDsKKwkJZmluYWwgZG91YmxlIGRlbHRhRSA9IG51bWJlck9mU3VzY2VwdGlibGVUb0V4cG9zZWQgLSBudW1iZXJPZkV4cG9zZWRUb0luZmVjdGlvdXM7CisJCWZpbmFsIGRvdWJsZSBkZWx0YUkgPSBudW1iZXJPZkV4cG9zZWRUb0luZmVjdGlvdXMgLSBudW1iZXJPZkluZmVjdGVkVG9SZWNvdmVyZWQ7CisJCWZpbmFsIGRvdWJsZSBkZWx0YVIgPSBudW1iZXJPZkluZmVjdGVkVG9SZWNvdmVyZWQgLSBudW1iZXJPZlJlY292ZXJlZFRvU3VzY2VwdGlibGU7CisJCQorCQlTRUlSTGFiZWxWYWx1ZUltcGwgcmV0ID0gKFNFSVJMYWJlbFZhbHVlSW1wbClyZXR1cm5WYWx1ZTsKKwkJcmV0LnNldFMoZGVsdGFTKTsKKwkJcmV0LnNldEUoZGVsdGFFKTsKKwkJcmV0LnNldEkoZGVsdGFJKTsKKwkJcmV0LnNldEluY2lkZW5jZShudW1iZXJPZlN1c2NlcHRpYmxlVG9FeHBvc2VkKTsKKwkJcmV0LnNldFIoZGVsdGFSKTsKKwkJcmV0LnNldERpc2Vhc2VEZWF0aHMoMCk7CisJCXJldHVybiByZXQ7CisJCisJfSAvLyBjb21wdXRlRGlzZWFzZURlbHRhcworCQorCS8qKgorCSAqIE1vZGVsU3BlY2lmaWNBZGp1c3RtZW50cyBmb3IgYSBTdG9jaGFzdGljIG1vZGVsIGFkZHMgbm9pc2UgdG8gb3IgYWRqdXN0cyAKKwkgKiB0aGUgZGlzZWFzZSBzdGF0ZSB0cmFuc2l0aW9uIHZhbHVlcyBieSBtdWx0aXBseWluZworCSAqIHRoZSBhZGRpdGlvbnMgYnkgYSByYW5kb20gdmFyaWFibGUgciB+ICgxKy8teCkgd2l0aCB4IHNtYWxsLgorCSAqIFRoZSByZXF1aXJlbWVudHMgdGhhdCBubyBtb3JlIGluZGl2aWR1YWxzIGNhbiBiZSBtb3ZlZCBmcm9tIGEgc3RhdGUgdGhhbiBhcmUKKwkgKiBhbHJlYWR5IGluIHRoYXQgc3RhdGUgaXMgc3RpbGwgZW5mb3JjZWQuCisJICogCisJICovCisJcHVibGljIHZvaWQgZG9Nb2RlbFNwZWNpZmljQWRqdXN0bWVudHMoCisJCQlmaW5hbCBTdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsVmFsdWUgc3RhdGUpIHsKKwkJCWZpbmFsIFNJTGFiZWxWYWx1ZSBjdXJyZW50U0kgPSAoU0lMYWJlbFZhbHVlKSBzdGF0ZTsKKwkJCWRvdWJsZSBvbGRJID0gY3VycmVudFNJLmdldEkoKTsKKwkJCWRvdWJsZSBJbm9pc3kgPSBjdXJyZW50U0kuZ2V0SSgpKiBjb21wdXRlTm9pc2UoKTsKKwkJCWRvdWJsZSBjaGFuZ2UgPSBvbGRJLUlub2lzeTsKKwkJCWN1cnJlbnRTSS5zZXRJKElub2lzeSk7CisJCQlkb3VibGUgbmV3UyA9IGN1cnJlbnRTSS5nZXRTKCkgKyBjaGFuZ2U7CisJCQlpZihuZXdTIDwgMC4wKSB7CisJCQkJLy8gTmVlZCB0byByZXNjYWxlCisJCQkJZG91YmxlIHNjYWxlID0gKGN1cnJlbnRTSS5nZXRTKCkgKyBuZXdTKSAvIGN1cnJlbnRTSS5nZXRTKCk7CisJCQkJY3VycmVudFNJLnNldEkoSW5vaXN5KnNjYWxlKTsKKwkJCX0gZWxzZSAgY3VycmVudFNJLnNldFMobmV3Uyk7CisJCQlyZXR1cm47CisJfSAvLyBkb01vZGVsU3BlY2lmaWNBZGp1c3RtZW50cworCQorCQorCQorCQorCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCBFQ2xhc3MgZVN0YXRpY0NsYXNzKCkgeworCQlyZXR1cm4gRXhwZXJpbWVudGFsUGFja2FnZS5MaXRlcmFscy5QRVJDT0xBVElPTl9ESVNFQVNFX01PREVMOworCX0KKworfSAvL1BlcmNvbGF0aW9uRGlzZWFzZU1vZGVsSW1wbApkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXhwZXJpbWVudGFsL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvZXhwZXJpbWVudGFsL2ltcGwvVEJEaXNlYXNlTW9kZWxJbXBsLmphdmEgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leHBlcmltZW50YWwvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9leHBlcmltZW50YWwvaW1wbC9UQkRpc2Vhc2VNb2RlbEltcGwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNzk0MzFkCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXhwZXJpbWVudGFsL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvZXhwZXJpbWVudGFsL2ltcGwvVEJEaXNlYXNlTW9kZWxJbXBsLmphdmEKQEAgLTAsMCArMSwxMDggQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4cGVyaW1lbnRhbC5pbXBsOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAKKyAqIENvcHlyaWdodCAoYykgMjAxMSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4gCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIAorICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wIAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQgCisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbCAKKyAqIAorICogQ29udHJpYnV0b3JzOiAKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkxhYmVsVmFsdWU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLlNURU1UaW1lOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leHBlcmltZW50YWwuRXhwZXJpbWVudGFsRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXhwZXJpbWVudGFsLkV4cGVyaW1lbnRhbFBhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4cGVyaW1lbnRhbC5UQkRpc2Vhc2VNb2RlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXhwZXJpbWVudGFsLlRCRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuRGlzZWFzZU1vZGVsTGFiZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLkRpc2Vhc2VNb2RlbExhYmVsVmFsdWU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLkluZmVjdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TSUluZmVjdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsVmFsdWU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuaW1wbC5TdGFuZGFyZERpc2Vhc2VNb2RlbEltcGw7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIEFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5UQiBEaXNlYXNlIE1vZGVsPC9iPjwvZW0+Jy4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogPHA+CisgKiA8L3A+CisgKgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgVEJEaXNlYXNlTW9kZWxJbXBsIGV4dGVuZHMgU3RhbmRhcmREaXNlYXNlTW9kZWxJbXBsIGltcGxlbWVudHMgVEJEaXNlYXNlTW9kZWwgeworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlwdWJsaWMgVEJEaXNlYXNlTW9kZWxJbXBsKCkgeworCQlzdXBlcigpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCBFQ2xhc3MgZVN0YXRpY0NsYXNzKCkgeworCQlyZXR1cm4gRXhwZXJpbWVudGFsUGFja2FnZS5MaXRlcmFscy5UQl9ESVNFQVNFX01PREVMOworCX0KKworCXB1YmxpYyB2b2lkIGRvTW9kZWxTcGVjaWZpY0FkanVzdG1lbnRzKExhYmVsVmFsdWUgbGFiZWwpIHsKKwkJLy8gVE9ETyBBdXRvLWdlbmVyYXRlZCBtZXRob2Qgc3R1YgorCQkKKwl9CisKKwlAT3ZlcnJpZGUKKwlwdWJsaWMgU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbFZhbHVlIGNvbXB1dGVEaXNlYXNlRGVsdGFzKFNURU1UaW1lIHRpbWUsCisJCQlTdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsVmFsdWUgY3VycmVudFN0YXRlLAorCQkJU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbCBkaXNlYXNlTGFiZWwsIGxvbmcgdGltZURlbHRhLAorCQkJRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZSByZXR1cm5WYWx1ZSkgeworCQkvLyBKdXN0IGhhcmQgY29kZSB0aGUgcGFyYW1ldGVycyBmb3Igbm93CisJCQorCQlkb3VibGUgYmV0YSA9IDAuNDsgLy8gVHJhbnNtaXNzaW9uIHJhdGU7CisJCWRvdWJsZSBwID0gMC42OyAvLyBQcm9iYWJpbGl0eSB0aGF0IGEgbmV3IGluZmVjdGlvbiBiZWNvbWVzIGFjdGl2ZSBpbmZlY3Rpb24uICgxLXApIGlzIHByb2JhYmlsaXR5IHRoYXQgaXQgYmVjb21lcyBsYXRlbnQKKwkJCisJCQorCQlUQkRpc2Vhc2VNb2RlbExhYmVsVmFsdWUgdGJkZWx0YSA9IChUQkRpc2Vhc2VNb2RlbExhYmVsVmFsdWUpcmV0dXJuVmFsdWU7CisJCVRCRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZSB0YmN1cnIgPSAoVEJEaXNlYXNlTW9kZWxMYWJlbFZhbHVlKWN1cnJlbnRTdGF0ZTsKKwkJCisJCWRvdWJsZSBTID0gdGJjdXJyLmdldFMoKTsKKwkJCisJCWRvdWJsZSBpYUVmZiA9IGdldE5vcm1hbGl6ZWRFZmZlY3RpdmVJbmZlY3Rpb3VzKGRpc2Vhc2VMYWJlbC5nZXROb2RlKCksIGRpc2Vhc2VMYWJlbCwgdGJjdXJyLmdldElhKCksIEV4cGVyaW1lbnRhbFBhY2thZ2UuTGl0ZXJhbHMuVEJfRElTRUFTRV9NT0RFTF9MQUJFTF9WQUxVRV9fSUEpOworCQl0YmRlbHRhLnNldElhKGJldGEqUypwKmlhRWZmKTsKKwkJdGJkZWx0YS5zZXRJbChiZXRhKlMqKDEtcCkqaWFFZmYpOworCQkKKwkJZG91YmxlIGluY2lkZW5jZSA9IGJldGEqUyp0YmN1cnIuZ2V0SWEoKSAvIHRiY3Vyci5nZXRQb3B1bGF0aW9uQ291bnQoKTsKKwkJdGJkZWx0YS5zZXRTKC1pbmNpZGVuY2UpOworCQl0YmRlbHRhLnNldEluY2lkZW5jZShpbmNpZGVuY2UpOworCQlyZXR1cm4gKFN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZSlyZXR1cm5WYWx1ZTsKKwl9CisKKwlAT3ZlcnJpZGUKKwlwdWJsaWMgRGlzZWFzZU1vZGVsTGFiZWwgY3JlYXRlRGlzZWFzZU1vZGVsTGFiZWwoU3RyaW5nIHBvcHVsYXRpb25JZGVudGlmaWVyKSB7CisJCXJldHVybiBFeHBlcmltZW50YWxGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVUQkRpc2Vhc2VNb2RlbExhYmVsKCk7CisJfQorCisJQE92ZXJyaWRlCisJcHVibGljIERpc2Vhc2VNb2RlbExhYmVsVmFsdWUgY3JlYXRlRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZShTdHJpbmcgcG9wdWxhdGlvbklkZW50aWZpZXIpIHsKKwkJcmV0dXJuIEV4cGVyaW1lbnRhbEZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZVRCRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZSgpOworCX0KKworCUBPdmVycmlkZQorCXB1YmxpYyBJbmZlY3RvciBjcmVhdGVJbmZlY3RvcigpIHsKKwkJU0lJbmZlY3RvciByZXRWYWx1ZSA9IFN0YW5kYXJkRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlU0lJbmZlY3RvcigpOworCQlyZXRWYWx1ZS5zZXREaXNlYXNlTmFtZSh0aGlzLmdldERpc2Vhc2VOYW1lKCkpOworCQlyZXRWYWx1ZS5zZXRQb3B1bGF0aW9uSWRlbnRpZmllcihnZXRQb3B1bGF0aW9uSWRlbnRpZmllcigpKTsKKwkJcmV0dXJuIHJldFZhbHVlOworCX0KKworfSAvL1RCRGlzZWFzZU1vZGVsSW1wbApkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXhwZXJpbWVudGFsL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvZXhwZXJpbWVudGFsL2ltcGwvVEJEaXNlYXNlTW9kZWxMYWJlbEltcGwuamF2YSBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4cGVyaW1lbnRhbC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL2V4cGVyaW1lbnRhbC9pbXBsL1RCRGlzZWFzZU1vZGVsTGFiZWxJbXBsLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWJkY2IyOAotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4cGVyaW1lbnRhbC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL2V4cGVyaW1lbnRhbC9pbXBsL1RCRGlzZWFzZU1vZGVsTGFiZWxJbXBsLmphdmEKQEAgLTAsMCArMSw2MiBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXhwZXJpbWVudGFsLmltcGw7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIAorICogQ29weXJpZ2h0IChjKSAyMDExIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiAKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdCAKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sIAorICogCisgKiBDb250cmlidXRvcnM6IAorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiAKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzczsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXhwZXJpbWVudGFsLkV4cGVyaW1lbnRhbEZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4cGVyaW1lbnRhbC5FeHBlcmltZW50YWxQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leHBlcmltZW50YWwuVEJEaXNlYXNlTW9kZWxMYWJlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXhwZXJpbWVudGFsLlRCRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuaW1wbC5TdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsSW1wbDsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiBBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICcKKyAqIDxlbT48Yj5UQiBEaXNlYXNlIE1vZGVsIExhYmVsPC9iPjwvZW0+Jy4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiA8cD4KKyAqIDwvcD4KKyAqIAorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgVEJEaXNlYXNlTW9kZWxMYWJlbEltcGwgZXh0ZW5kcyBTdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsSW1wbAorCQlpbXBsZW1lbnRzIFRCRGlzZWFzZU1vZGVsTGFiZWwgeworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJcHJvdGVjdGVkIFRCRGlzZWFzZU1vZGVsTGFiZWxJbXBsKCkgeworCQlzdXBlcigpOworCQlzZXRDdXJyZW50VmFsdWUoRXhwZXJpbWVudGFsRmFjdG9yeS5lSU5TVEFOQ0UKKwkJCQkuY3JlYXRlVEJEaXNlYXNlTW9kZWxMYWJlbFZhbHVlKCkpOworCQlzZXROZXh0VmFsdWUoRXhwZXJpbWVudGFsRmFjdG9yeS5lSU5TVEFOQ0UKKwkJCQkuY3JlYXRlVEJEaXNlYXNlTW9kZWxMYWJlbFZhbHVlKCkpOworCQlzZXRUZW1wVmFsdWUoRXhwZXJpbWVudGFsRmFjdG9yeS5lSU5TVEFOQ0UKKwkJCQkuY3JlYXRlVEJEaXNlYXNlTW9kZWxMYWJlbFZhbHVlKCkpOworCQlzZXRQcm9iZVZhbHVlKEV4cGVyaW1lbnRhbEZhY3RvcnkuZUlOU1RBTkNFCisJCQkJLmNyZWF0ZVRCRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZSgpKTsKKwkJc2V0RXJyb3JTY2FsZShFeHBlcmltZW50YWxGYWN0b3J5LmVJTlNUQU5DRQorCQkJCS5jcmVhdGVUQkRpc2Vhc2VNb2RlbExhYmVsVmFsdWUoKSk7CisJCXNldERlbHRhVmFsdWUoRXhwZXJpbWVudGFsRmFjdG9yeS5lSU5TVEFOQ0UKKwkJCQkuY3JlYXRlVEJEaXNlYXNlTW9kZWxMYWJlbFZhbHVlKCkpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgRUNsYXNzIGVTdGF0aWNDbGFzcygpIHsKKwkJcmV0dXJuIEV4cGVyaW1lbnRhbFBhY2thZ2UuTGl0ZXJhbHMuVEJfRElTRUFTRV9NT0RFTF9MQUJFTDsKKwl9CisKK30gLy8gVEJEaXNlYXNlTW9kZWxMYWJlbEltcGwKZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4cGVyaW1lbnRhbC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL2V4cGVyaW1lbnRhbC9pbXBsL1RCRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZUltcGwuamF2YSBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4cGVyaW1lbnRhbC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL2V4cGVyaW1lbnRhbC9pbXBsL1RCRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZUltcGwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZWYwYjg3Ci0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXhwZXJpbWVudGFsL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvZXhwZXJpbWVudGFsL2ltcGwvVEJEaXNlYXNlTW9kZWxMYWJlbFZhbHVlSW1wbC5qYXZhCkBAIC0wLDAgKzEsMjIzIEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leHBlcmltZW50YWwuaW1wbDsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogCisgKiBDb3B5cmlnaHQgKGMpIDIwMTEgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuIAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyAKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0IAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwgCisgKiAKKyAqIENvbnRyaWJ1dG9yczogCisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzczsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuaW1wbC5FTm90aWZpY2F0aW9uSW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXhwZXJpbWVudGFsLkV4cGVyaW1lbnRhbFBhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4cGVyaW1lbnRhbC5UQkRpc2Vhc2VNb2RlbExhYmVsVmFsdWU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLmltcGwuU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbFZhbHVlSW1wbDsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPlRCIERpc2Vhc2UgTW9kZWwgTGFiZWwgVmFsdWU8L2I+PC9lbT4nLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiA8cD4KKyAqIFRoZSBmb2xsb3dpbmcgZmVhdHVyZXMgYXJlIGltcGxlbWVudGVkOgorICogPHVsPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leHBlcmltZW50YWwuaW1wbC5UQkRpc2Vhc2VNb2RlbExhYmVsVmFsdWVJbXBsI2dldElsIDxlbT5JbDwvZW0+fTwvbGk+CisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4cGVyaW1lbnRhbC5pbXBsLlRCRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZUltcGwjZ2V0SWEgPGVtPklhPC9lbT59PC9saT4KKyAqIDwvdWw+CisgKiA8L3A+CisgKgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgVEJEaXNlYXNlTW9kZWxMYWJlbFZhbHVlSW1wbCBleHRlbmRzIFN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZUltcGwgaW1wbGVtZW50cyBUQkRpc2Vhc2VNb2RlbExhYmVsVmFsdWUgeworCS8qKgorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRJbCgpIDxlbT5JbDwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZ2V0SWwoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgZG91YmxlIElMX0VERUZBVUxUID0gMC4wOworCisJLyoqCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0SWwoKSA8ZW0+SWw8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI2dldElsKCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgZG91YmxlIGlsID0gSUxfRURFRkFVTFQ7CisKKwkvKioKKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0SWEoKSA8ZW0+SWE8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI2dldElhKCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIGRvdWJsZSBJQV9FREVGQVVMVCA9IDAuMDsKKworCS8qKgorCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldElhKCkgPGVtPklhPC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNnZXRJYSgpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIGRvdWJsZSBpYSA9IElBX0VERUZBVUxUOworCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIFRCRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZUltcGwoKSB7CisJCXN1cGVyKCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIEVDbGFzcyBlU3RhdGljQ2xhc3MoKSB7CisJCXJldHVybiBFeHBlcmltZW50YWxQYWNrYWdlLkxpdGVyYWxzLlRCX0RJU0VBU0VfTU9ERUxfTEFCRUxfVkFMVUU7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIGRvdWJsZSBnZXRJbCgpIHsKKwkJcmV0dXJuIGlsOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIHNldElsKGRvdWJsZSBuZXdJbCkgeworCQlkb3VibGUgb2xkSWwgPSBpbDsKKwkJaWwgPSBuZXdJbDsKKwkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQorCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgRXhwZXJpbWVudGFsUGFja2FnZS5UQl9ESVNFQVNFX01PREVMX0xBQkVMX1ZBTFVFX19JTCwgb2xkSWwsIGlsKSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIGRvdWJsZSBnZXRJYSgpIHsKKwkJcmV0dXJuIGlhOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIHNldElhKGRvdWJsZSBuZXdJYSkgeworCQlkb3VibGUgb2xkSWEgPSBpYTsKKwkJaWEgPSBuZXdJYTsKKwkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQorCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgRXhwZXJpbWVudGFsUGFja2FnZS5UQl9ESVNFQVNFX01PREVMX0xBQkVMX1ZBTFVFX19JQSwgb2xkSWEsIGlhKSk7CisJfQorCQorCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBPYmplY3QgZUdldChpbnQgZmVhdHVyZUlELCBib29sZWFuIHJlc29sdmUsIGJvb2xlYW4gY29yZVR5cGUpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJCWNhc2UgRXhwZXJpbWVudGFsUGFja2FnZS5UQl9ESVNFQVNFX01PREVMX0xBQkVMX1ZBTFVFX19JTDoKKwkJCQlyZXR1cm4gZ2V0SWwoKTsKKwkJCWNhc2UgRXhwZXJpbWVudGFsUGFja2FnZS5UQl9ESVNFQVNFX01PREVMX0xBQkVMX1ZBTFVFX19JQToKKwkJCQlyZXR1cm4gZ2V0SWEoKTsKKwkJfQorCQlyZXR1cm4gc3VwZXIuZUdldChmZWF0dXJlSUQsIHJlc29sdmUsIGNvcmVUeXBlKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBlU2V0KGludCBmZWF0dXJlSUQsIE9iamVjdCBuZXdWYWx1ZSkgeworCQlzd2l0Y2ggKGZlYXR1cmVJRCkgeworCQkJY2FzZSBFeHBlcmltZW50YWxQYWNrYWdlLlRCX0RJU0VBU0VfTU9ERUxfTEFCRUxfVkFMVUVfX0lMOgorCQkJCXNldElsKChEb3VibGUpbmV3VmFsdWUpOworCQkJCXJldHVybjsKKwkJCWNhc2UgRXhwZXJpbWVudGFsUGFja2FnZS5UQl9ESVNFQVNFX01PREVMX0xBQkVMX1ZBTFVFX19JQToKKwkJCQlzZXRJYSgoRG91YmxlKW5ld1ZhbHVlKTsKKwkJCQlyZXR1cm47CisJCX0KKwkJc3VwZXIuZVNldChmZWF0dXJlSUQsIG5ld1ZhbHVlKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBlVW5zZXQoaW50IGZlYXR1cmVJRCkgeworCQlzd2l0Y2ggKGZlYXR1cmVJRCkgeworCQkJY2FzZSBFeHBlcmltZW50YWxQYWNrYWdlLlRCX0RJU0VBU0VfTU9ERUxfTEFCRUxfVkFMVUVfX0lMOgorCQkJCXNldElsKElMX0VERUZBVUxUKTsKKwkJCQlyZXR1cm47CisJCQljYXNlIEV4cGVyaW1lbnRhbFBhY2thZ2UuVEJfRElTRUFTRV9NT0RFTF9MQUJFTF9WQUxVRV9fSUE6CisJCQkJc2V0SWEoSUFfRURFRkFVTFQpOworCQkJCXJldHVybjsKKwkJfQorCQlzdXBlci5lVW5zZXQoZmVhdHVyZUlEKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgYm9vbGVhbiBlSXNTZXQoaW50IGZlYXR1cmVJRCkgeworCQlzd2l0Y2ggKGZlYXR1cmVJRCkgeworCQkJY2FzZSBFeHBlcmltZW50YWxQYWNrYWdlLlRCX0RJU0VBU0VfTU9ERUxfTEFCRUxfVkFMVUVfX0lMOgorCQkJCXJldHVybiBpbCAhPSBJTF9FREVGQVVMVDsKKwkJCWNhc2UgRXhwZXJpbWVudGFsUGFja2FnZS5UQl9ESVNFQVNFX01PREVMX0xBQkVMX1ZBTFVFX19JQToKKwkJCQlyZXR1cm4gaWEgIT0gSUFfRURFRkFVTFQ7CisJCX0KKwkJcmV0dXJuIHN1cGVyLmVJc1NldChmZWF0dXJlSUQpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKSB7CisJCWlmIChlSXNQcm94eSgpKSByZXR1cm4gc3VwZXIudG9TdHJpbmcoKTsKKworCQlTdHJpbmdCdWZmZXIgcmVzdWx0ID0gbmV3IFN0cmluZ0J1ZmZlcihzdXBlci50b1N0cmluZygpKTsKKwkJcmVzdWx0LmFwcGVuZCgiIChpbDogIik7CisJCXJlc3VsdC5hcHBlbmQoaWwpOworCQlyZXN1bHQuYXBwZW5kKCIsIGlhOiAiKTsKKwkJcmVzdWx0LmFwcGVuZChpYSk7CisJCXJlc3VsdC5hcHBlbmQoJyknKTsKKwkJcmV0dXJuIHJlc3VsdC50b1N0cmluZygpOworCX0KKworfSAvL1RCRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZUltcGwKZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4cGVyaW1lbnRhbC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL2V4cGVyaW1lbnRhbC9wcm92aWRlci9DZWxsdWxhckRpc2Vhc2VNb2RlbEl0ZW1Qcm92aWRlci5qYXZhIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXhwZXJpbWVudGFsL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvZXhwZXJpbWVudGFsL3Byb3ZpZGVyL0NlbGx1bGFyRGlzZWFzZU1vZGVsSXRlbVByb3ZpZGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjJmY2E0MwotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4cGVyaW1lbnRhbC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL2V4cGVyaW1lbnRhbC9wcm92aWRlci9DZWxsdWxhckRpc2Vhc2VNb2RlbEl0ZW1Qcm92aWRlci5qYXZhCkBAIC0wLDAgKzEsMTQyIEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leHBlcmltZW50YWwucHJvdmlkZXI7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDkgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LkFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuUmVzb3VyY2VMb2NhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklFZGl0aW5nRG9tYWluSXRlbVByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtTGFiZWxQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbVByb3BlcnR5RGVzY3JpcHRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbVByb3BlcnR5U291cmNlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklTdHJ1Y3R1cmVkSXRlbUNvbnRlbnRQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JVHJlZUl0ZW1Db250ZW50UHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4cGVyaW1lbnRhbC5DZWxsdWxhckRpc2Vhc2VNb2RlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQucHJvdmlkZXIuU3RvY2hhc3RpY1NFSVJEaXNlYXNlTW9kZWxJdGVtUHJvdmlkZXI7CisKKy8qKgorICogVGhpcyBpcyB0aGUgaXRlbSBwcm92aWRlciBhZGFwdGVyIGZvciBhIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXhwZXJpbWVudGFsLkNlbGx1bGFyRGlzZWFzZU1vZGVsfSBvYmplY3QuCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBDZWxsdWxhckRpc2Vhc2VNb2RlbEl0ZW1Qcm92aWRlcgorCWV4dGVuZHMgU3RvY2hhc3RpY1NFSVJEaXNlYXNlTW9kZWxJdGVtUHJvdmlkZXIKKwlpbXBsZW1lbnRzCQorCQlJRWRpdGluZ0RvbWFpbkl0ZW1Qcm92aWRlciwJCisJCUlTdHJ1Y3R1cmVkSXRlbUNvbnRlbnRQcm92aWRlciwJCisJCUlUcmVlSXRlbUNvbnRlbnRQcm92aWRlciwJCisJCUlJdGVtTGFiZWxQcm92aWRlciwJCisJCUlJdGVtUHJvcGVydHlTb3VyY2UgeworCS8qKgorCSAqIFRoaXMgY29uc3RydWN0cyBhbiBpbnN0YW5jZSBmcm9tIGEgZmFjdG9yeSBhbmQgYSBub3RpZmllci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSBhZGFwdGVyRmFjdG9yeSAKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIENlbGx1bGFyRGlzZWFzZU1vZGVsSXRlbVByb3ZpZGVyKEFkYXB0ZXJGYWN0b3J5IGFkYXB0ZXJGYWN0b3J5KSB7CisJCXN1cGVyKGFkYXB0ZXJGYWN0b3J5KTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgdGhlIHByb3BlcnR5IGRlc2NyaXB0b3JzIGZvciB0aGUgYWRhcHRlZCBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgTGlzdDxJSXRlbVByb3BlcnR5RGVzY3JpcHRvcj4gZ2V0UHJvcGVydHlEZXNjcmlwdG9ycyhPYmplY3Qgb2JqZWN0KSB7CisJCWlmIChpdGVtUHJvcGVydHlEZXNjcmlwdG9ycyA9PSBudWxsKSB7CisJCQlzdXBlci5nZXRQcm9wZXJ0eURlc2NyaXB0b3JzKG9iamVjdCk7CisKKwkJfQorCQlyZXR1cm4gaXRlbVByb3BlcnR5RGVzY3JpcHRvcnM7CisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIENlbGx1bGFyRGlzZWFzZU1vZGVsLmdpZi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgT2JqZWN0IGdldEltYWdlKE9iamVjdCBvYmplY3QpIHsKKwkJcmV0dXJuIG92ZXJsYXlJbWFnZShvYmplY3QsIGdldFJlc291cmNlTG9jYXRvcigpLmdldEltYWdlKCJmdWxsL29iajE2L0NlbGx1bGFyRGlzZWFzZU1vZGVsIikpOworCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyB0aGUgbGFiZWwgdGV4dCBmb3IgdGhlIGFkYXB0ZWQgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBTdHJpbmcgZ2V0VGV4dChPYmplY3Qgb2JqZWN0KSB7CisJCXJldHVybiBzdXBlci5nZXRUZXh0KG9iamVjdCk7CisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIHRoZSBsYWJlbCB0ZXh0IGZvciB0aGUgYWRhcHRlZCBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgU3RyaW5nIGdldFRleHRHZW4oT2JqZWN0IG9iamVjdCkgeworCQlTdHJpbmcgbGFiZWwgPSAoKENlbGx1bGFyRGlzZWFzZU1vZGVsKW9iamVjdCkuZ2V0RGlzZWFzZU5hbWUoKTsKKwkJcmV0dXJuIGxhYmVsID09IG51bGwgfHwgbGFiZWwubGVuZ3RoKCkgPT0gMCA/CisJCQlnZXRTdHJpbmcoIl9VSV9DZWxsdWxhckRpc2Vhc2VNb2RlbF90eXBlIikgOgorCQkJZ2V0U3RyaW5nKCJfVUlfQ2VsbHVsYXJEaXNlYXNlTW9kZWxfdHlwZSIpICsgIiAiICsgbGFiZWw7CisJfQorCQorCS8qKgorCSAqIFRoaXMgaGFuZGxlcyBtb2RlbCBub3RpZmljYXRpb25zIGJ5IGNhbGxpbmcgdG8gdXBkYXRlIGFueSBjYWNoZWQKKwkgKiBjaGlsZHJlbiBhbmQgYnkgY3JlYXRpbmcgYSB2aWV3ZXIgbm90aWZpY2F0aW9uLCB3aGljaCBpdCBwYXNzZXMgdG8gLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIG5vdGlmeUNoYW5nZWQoTm90aWZpY2F0aW9uIG5vdGlmaWNhdGlvbikgeworCQl1cGRhdGVDaGlsZHJlbihub3RpZmljYXRpb24pOworCQlzdXBlci5ub3RpZnlDaGFuZ2VkKG5vdGlmaWNhdGlvbik7CisJfQorCisJLyoqCisJICogVGhpcyBhZGRzIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuZWRpdC5jb21tYW5kLkNvbW1hbmRQYXJhbWV0ZXJ9cyBkZXNjcmliaW5nIHRoZSBjaGlsZHJlbgorCSAqIHRoYXQgY2FuIGJlIGNyZWF0ZWQgdW5kZXIgdGhpcyBvYmplY3QuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgY29sbGVjdE5ld0NoaWxkRGVzY3JpcHRvcnMoQ29sbGVjdGlvbjxPYmplY3Q+IG5ld0NoaWxkRGVzY3JpcHRvcnMsIE9iamVjdCBvYmplY3QpIHsKKwkJc3VwZXIuY29sbGVjdE5ld0NoaWxkRGVzY3JpcHRvcnMobmV3Q2hpbGREZXNjcmlwdG9ycywgb2JqZWN0KTsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm4gdGhlIHJlc291cmNlIGxvY2F0b3IgZm9yIHRoaXMgaXRlbSBwcm92aWRlcidzIHJlc291cmNlcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgUmVzb3VyY2VMb2NhdG9yIGdldFJlc291cmNlTG9jYXRvcigpIHsKKwkJcmV0dXJuIEV4cGVyaW1lbnRhbEVkaXRQbHVnaW4uSU5TVEFOQ0U7CisJfQorCit9CmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leHBlcmltZW50YWwvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9leHBlcmltZW50YWwvcHJvdmlkZXIvRXhwZXJpbWVudGFsRWRpdFBsdWdpbi5qYXZhIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXhwZXJpbWVudGFsL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvZXhwZXJpbWVudGFsL3Byb3ZpZGVyL0V4cGVyaW1lbnRhbEVkaXRQbHVnaW4uamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYzZkMzRjCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXhwZXJpbWVudGFsL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvZXhwZXJpbWVudGFsL3Byb3ZpZGVyL0V4cGVyaW1lbnRhbEVkaXRQbHVnaW4uamF2YQpAQCAtMCwwICsxLDEwNyBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXhwZXJpbWVudGFsLnByb3ZpZGVyOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA5IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24uRU1GUGx1Z2luOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5SZXNvdXJjZUxvY2F0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnByb3ZpZGVyLkVjb3JlRWRpdFBsdWdpbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLnByb3ZpZGVyLkNvcmVFZGl0UGx1Z2luOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuZWRnZXMucHJvdmlkZXIuRGVmaW5pdGlvbnNFZGl0UGx1Z2luOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5wcm92aWRlci5EaXNlYXNlbW9kZWxzRWRpdFBsdWdpbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQucHJvdmlkZXIuU3RhbmRhcmRFZGl0UGx1Z2luOworCisvKioKKyAqIFRoaXMgaXMgdGhlIGNlbnRyYWwgc2luZ2xldG9uIGZvciB0aGUgRXhwZXJpbWVudGFsIGVkaXQgcGx1Z2luLgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgZmluYWwgY2xhc3MgRXhwZXJpbWVudGFsRWRpdFBsdWdpbiBleHRlbmRzIEVNRlBsdWdpbiB7CisJLyoqCisJICogS2VlcCB0cmFjayBvZiB0aGUgc2luZ2xldG9uLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgRXhwZXJpbWVudGFsRWRpdFBsdWdpbiBJTlNUQU5DRSA9IG5ldyBFeHBlcmltZW50YWxFZGl0UGx1Z2luKCk7CisKKwkvKioKKwkgKiBLZWVwIHRyYWNrIG9mIHRoZSBzaW5nbGV0b24uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJpdmF0ZSBzdGF0aWMgSW1wbGVtZW50YXRpb24gcGx1Z2luOworCisJLyoqCisJICogQ3JlYXRlIHRoZSBpbnN0YW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRXhwZXJpbWVudGFsRWRpdFBsdWdpbigpIHsKKwkJc3VwZXIKKwkJICAobmV3IFJlc291cmNlTG9jYXRvciBbXSB7CisJCSAgICAgRGlzZWFzZW1vZGVsc0VkaXRQbHVnaW4uSU5TVEFOQ0UsCisJCSAgICAgQ29yZUVkaXRQbHVnaW4uSU5TVEFOQ0UsCisJCSAgICAgRGVmaW5pdGlvbnNFZGl0UGx1Z2luLklOU1RBTkNFLAorCQkgICAgIEVjb3JlRWRpdFBsdWdpbi5JTlNUQU5DRSwKKwkJICAgICBTdGFuZGFyZEVkaXRQbHVnaW4uSU5TVEFOQ0UsCisJCSAgIH0pOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIHNpbmdsZXRvbiBpbnN0YW5jZSBvZiB0aGUgRWNsaXBzZSBwbHVnaW4uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBzaW5nbGV0b24gaW5zdGFuY2UuCisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBSZXNvdXJjZUxvY2F0b3IgZ2V0UGx1Z2luUmVzb3VyY2VMb2NhdG9yKCkgeworCQlyZXR1cm4gcGx1Z2luOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIHNpbmdsZXRvbiBpbnN0YW5jZSBvZiB0aGUgRWNsaXBzZSBwbHVnaW4uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBzaW5nbGV0b24gaW5zdGFuY2UuCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBzdGF0aWMgSW1wbGVtZW50YXRpb24gZ2V0UGx1Z2luKCkgeworCQlyZXR1cm4gcGx1Z2luOworCX0KKworCS8qKgorCSAqIFRoZSBhY3R1YWwgaW1wbGVtZW50YXRpb24gb2YgdGhlIEVjbGlwc2UgPGI+UGx1Z2luPC9iPi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGNsYXNzIEltcGxlbWVudGF0aW9uIGV4dGVuZHMgRWNsaXBzZVBsdWdpbiB7CisJCS8qKgorCQkgKiBDcmVhdGVzIGFuIGluc3RhbmNlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJcHVibGljIEltcGxlbWVudGF0aW9uKCkgeworCQkJc3VwZXIoKTsKKworCQkJLy8gUmVtZW1iZXIgdGhlIHN0YXRpYyBpbnN0YW5jZS4KKwkJCS8vCisJCQlwbHVnaW4gPSB0aGlzOworCQl9CisJfQorCit9CmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leHBlcmltZW50YWwvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9leHBlcmltZW50YWwvcHJvdmlkZXIvRXhwZXJpbWVudGFsSXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkuamF2YSBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4cGVyaW1lbnRhbC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL2V4cGVyaW1lbnRhbC9wcm92aWRlci9FeHBlcmltZW50YWxJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYzMzQ1MzIKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leHBlcmltZW50YWwvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9leHBlcmltZW50YWwvcHJvdmlkZXIvRXhwZXJpbWVudGFsSXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkuamF2YQpAQCAtMCwwICsxLDI3OCBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXhwZXJpbWVudGFsLnByb3ZpZGVyOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA5IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7CitpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5BZGFwdGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmllcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5DaGFuZ2VOb3RpZmllcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5Db21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkNvbXBvc2VkQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUNoYW5nZU5vdGlmaWVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklEaXNwb3NhYmxlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklFZGl0aW5nRG9tYWluSXRlbVByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtTGFiZWxQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbVByb3BlcnR5U291cmNlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklOb3RpZnlDaGFuZ2VkTGlzdGVuZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVN0cnVjdHVyZWRJdGVtQ29udGVudFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklUcmVlSXRlbUNvbnRlbnRQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXhwZXJpbWVudGFsLnV0aWwuRXhwZXJpbWVudGFsQWRhcHRlckZhY3Rvcnk7CisKKy8qKgorICogVGhpcyBpcyB0aGUgZmFjdG9yeSB0aGF0IGlzIHVzZWQgdG8gcHJvdmlkZSB0aGUgaW50ZXJmYWNlcyBuZWVkZWQgdG8gc3VwcG9ydCBWaWV3ZXJzLgorICogVGhlIGFkYXB0ZXJzIGdlbmVyYXRlZCBieSB0aGlzIGZhY3RvcnkgY29udmVydCBFTUYgYWRhcHRlciBub3RpZmljYXRpb25zIGludG8gY2FsbHMgdG8ge0BsaW5rICNmaXJlTm90aWZ5Q2hhbmdlZCBmaXJlTm90aWZ5Q2hhbmdlZH0uCisgKiBUaGUgYWRhcHRlcnMgYWxzbyBzdXBwb3J0IEVjbGlwc2UgcHJvcGVydHkgc2hlZXRzLgorICogTm90ZSB0aGF0IG1vc3Qgb2YgdGhlIGFkYXB0ZXJzIGFyZSBzaGFyZWQgYW1vbmcgbXVsdGlwbGUgaW5zdGFuY2VzLgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgRXhwZXJpbWVudGFsSXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkgZXh0ZW5kcyBFeHBlcmltZW50YWxBZGFwdGVyRmFjdG9yeSBpbXBsZW1lbnRzIENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnksIElDaGFuZ2VOb3RpZmllciwgSURpc3Bvc2FibGUgeworCS8qKgorCSAqIFRoaXMga2VlcHMgdHJhY2sgb2YgdGhlIHJvb3QgYWRhcHRlciBmYWN0b3J5IHRoYXQgZGVsZWdhdGVzIHRvIHRoaXMgYWRhcHRlciBmYWN0b3J5LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBDb21wb3NlZEFkYXB0ZXJGYWN0b3J5IHBhcmVudEFkYXB0ZXJGYWN0b3J5OworCisJLyoqCisJICogVGhpcyBpcyB1c2VkIHRvIGltcGxlbWVudCB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUNoYW5nZU5vdGlmaWVyfS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgSUNoYW5nZU5vdGlmaWVyIGNoYW5nZU5vdGlmaWVyID0gbmV3IENoYW5nZU5vdGlmaWVyKCk7CisKKwkvKioKKwkgKiBUaGlzIGtlZXBzIHRyYWNrIG9mIGFsbCB0aGUgc3VwcG9ydGVkIHR5cGVzIGNoZWNrZWQgYnkge0BsaW5rICNpc0ZhY3RvcnlGb3JUeXBlIGlzRmFjdG9yeUZvclR5cGV9LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBDb2xsZWN0aW9uPE9iamVjdD4gc3VwcG9ydGVkVHlwZXMgPSBuZXcgQXJyYXlMaXN0PE9iamVjdD4oKTsKKworCS8qKgorCSAqIFRoaXMgY29uc3RydWN0cyBhbiBpbnN0YW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRXhwZXJpbWVudGFsSXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkoKSB7CisJCXN1cHBvcnRlZFR5cGVzLmFkZChJRWRpdGluZ0RvbWFpbkl0ZW1Qcm92aWRlci5jbGFzcyk7CisJCXN1cHBvcnRlZFR5cGVzLmFkZChJU3RydWN0dXJlZEl0ZW1Db250ZW50UHJvdmlkZXIuY2xhc3MpOworCQlzdXBwb3J0ZWRUeXBlcy5hZGQoSVRyZWVJdGVtQ29udGVudFByb3ZpZGVyLmNsYXNzKTsKKwkJc3VwcG9ydGVkVHlwZXMuYWRkKElJdGVtTGFiZWxQcm92aWRlci5jbGFzcyk7CisJCXN1cHBvcnRlZFR5cGVzLmFkZChJSXRlbVByb3BlcnR5U291cmNlLmNsYXNzKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGtlZXBzIHRyYWNrIG9mIHRoZSBvbmUgYWRhcHRlciB1c2VkIGZvciBhbGwge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leHBlcmltZW50YWwuUGVyY29sYXRpb25EaXNlYXNlTW9kZWx9IGluc3RhbmNlcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgUGVyY29sYXRpb25EaXNlYXNlTW9kZWxJdGVtUHJvdmlkZXIgcGVyY29sYXRpb25EaXNlYXNlTW9kZWxJdGVtUHJvdmlkZXI7CisKKwkvKioKKwkgKiBUaGlzIGNyZWF0ZXMgYW4gYWRhcHRlciBmb3IgYSB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4cGVyaW1lbnRhbC5QZXJjb2xhdGlvbkRpc2Vhc2VNb2RlbH0uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlUGVyY29sYXRpb25EaXNlYXNlTW9kZWxBZGFwdGVyKCkgeworCQlpZiAocGVyY29sYXRpb25EaXNlYXNlTW9kZWxJdGVtUHJvdmlkZXIgPT0gbnVsbCkgeworCQkJcGVyY29sYXRpb25EaXNlYXNlTW9kZWxJdGVtUHJvdmlkZXIgPSBuZXcgUGVyY29sYXRpb25EaXNlYXNlTW9kZWxJdGVtUHJvdmlkZXIodGhpcyk7CisJCX0KKworCQlyZXR1cm4gcGVyY29sYXRpb25EaXNlYXNlTW9kZWxJdGVtUHJvdmlkZXI7CisJfQorCisJLyoqCisJICogVGhpcyBrZWVwcyB0cmFjayBvZiB0aGUgb25lIGFkYXB0ZXIgdXNlZCBmb3IgYWxsIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXhwZXJpbWVudGFsLlRCRGlzZWFzZU1vZGVsTGFiZWx9IGluc3RhbmNlcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgVEJEaXNlYXNlTW9kZWxMYWJlbEl0ZW1Qcm92aWRlciB0YkRpc2Vhc2VNb2RlbExhYmVsSXRlbVByb3ZpZGVyOworCisJLyoqCisJICogVGhpcyBjcmVhdGVzIGFuIGFkYXB0ZXIgZm9yIGEge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leHBlcmltZW50YWwuVEJEaXNlYXNlTW9kZWxMYWJlbH0uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlVEJEaXNlYXNlTW9kZWxMYWJlbEFkYXB0ZXIoKSB7CisJCWlmICh0YkRpc2Vhc2VNb2RlbExhYmVsSXRlbVByb3ZpZGVyID09IG51bGwpIHsKKwkJCXRiRGlzZWFzZU1vZGVsTGFiZWxJdGVtUHJvdmlkZXIgPSBuZXcgVEJEaXNlYXNlTW9kZWxMYWJlbEl0ZW1Qcm92aWRlcih0aGlzKTsKKwkJfQorCisJCXJldHVybiB0YkRpc2Vhc2VNb2RlbExhYmVsSXRlbVByb3ZpZGVyOworCX0KKworCS8qKgorCSAqIFRoaXMga2VlcHMgdHJhY2sgb2YgdGhlIG9uZSBhZGFwdGVyIHVzZWQgZm9yIGFsbCB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4cGVyaW1lbnRhbC5UQkRpc2Vhc2VNb2RlbExhYmVsVmFsdWV9IGluc3RhbmNlcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgVEJEaXNlYXNlTW9kZWxMYWJlbFZhbHVlSXRlbVByb3ZpZGVyIHRiRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZUl0ZW1Qcm92aWRlcjsKKworCS8qKgorCSAqIFRoaXMgY3JlYXRlcyBhbiBhZGFwdGVyIGZvciBhIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXhwZXJpbWVudGFsLlRCRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZX0uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlVEJEaXNlYXNlTW9kZWxMYWJlbFZhbHVlQWRhcHRlcigpIHsKKwkJaWYgKHRiRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZUl0ZW1Qcm92aWRlciA9PSBudWxsKSB7CisJCQl0YkRpc2Vhc2VNb2RlbExhYmVsVmFsdWVJdGVtUHJvdmlkZXIgPSBuZXcgVEJEaXNlYXNlTW9kZWxMYWJlbFZhbHVlSXRlbVByb3ZpZGVyKHRoaXMpOworCQl9CisKKwkJcmV0dXJuIHRiRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZUl0ZW1Qcm92aWRlcjsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGtlZXBzIHRyYWNrIG9mIHRoZSBvbmUgYWRhcHRlciB1c2VkIGZvciBhbGwge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leHBlcmltZW50YWwuVEJEaXNlYXNlTW9kZWx9IGluc3RhbmNlcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgVEJEaXNlYXNlTW9kZWxJdGVtUHJvdmlkZXIgdGJEaXNlYXNlTW9kZWxJdGVtUHJvdmlkZXI7CisKKwkvKioKKwkgKiBUaGlzIGNyZWF0ZXMgYW4gYWRhcHRlciBmb3IgYSB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4cGVyaW1lbnRhbC5UQkRpc2Vhc2VNb2RlbH0uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlVEJEaXNlYXNlTW9kZWxBZGFwdGVyKCkgeworCQlpZiAodGJEaXNlYXNlTW9kZWxJdGVtUHJvdmlkZXIgPT0gbnVsbCkgeworCQkJdGJEaXNlYXNlTW9kZWxJdGVtUHJvdmlkZXIgPSBuZXcgVEJEaXNlYXNlTW9kZWxJdGVtUHJvdmlkZXIodGhpcyk7CisJCX0KKworCQlyZXR1cm4gdGJEaXNlYXNlTW9kZWxJdGVtUHJvdmlkZXI7CisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIHRoZSByb290IGFkYXB0ZXIgZmFjdG9yeSB0aGF0IGNvbnRhaW5zIHRoaXMgZmFjdG9yeS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSBnZXRSb290QWRhcHRlckZhY3RvcnkoKSB7CisJCXJldHVybiBwYXJlbnRBZGFwdGVyRmFjdG9yeSA9PSBudWxsID8gdGhpcyA6IHBhcmVudEFkYXB0ZXJGYWN0b3J5LmdldFJvb3RBZGFwdGVyRmFjdG9yeSgpOworCX0KKworCS8qKgorCSAqIFRoaXMgc2V0cyB0aGUgY29tcG9zZWQgYWRhcHRlciBmYWN0b3J5IHRoYXQgY29udGFpbnMgdGhpcyBmYWN0b3J5LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIHNldFBhcmVudEFkYXB0ZXJGYWN0b3J5KENvbXBvc2VkQWRhcHRlckZhY3RvcnkgcGFyZW50QWRhcHRlckZhY3RvcnkpIHsKKwkJdGhpcy5wYXJlbnRBZGFwdGVyRmFjdG9yeSA9IHBhcmVudEFkYXB0ZXJGYWN0b3J5OworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBib29sZWFuIGlzRmFjdG9yeUZvclR5cGUoT2JqZWN0IHR5cGUpIHsKKwkJcmV0dXJuIHN1cHBvcnRlZFR5cGVzLmNvbnRhaW5zKHR5cGUpIHx8IHN1cGVyLmlzRmFjdG9yeUZvclR5cGUodHlwZSk7CisJfQorCisJLyoqCisJICogVGhpcyBpbXBsZW1lbnRhdGlvbiBzdWJzdGl0dXRlcyB0aGUgZmFjdG9yeSBpdHNlbGYgYXMgdGhlIGtleSBmb3IgdGhlIGFkYXB0ZXIuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIEFkYXB0ZXIgYWRhcHQoTm90aWZpZXIgbm90aWZpZXIsIE9iamVjdCB0eXBlKSB7CisJCXJldHVybiBzdXBlci5hZGFwdChub3RpZmllciwgdGhpcyk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIE9iamVjdCBhZGFwdChPYmplY3Qgb2JqZWN0LCBPYmplY3QgdHlwZSkgeworCQlpZiAoaXNGYWN0b3J5Rm9yVHlwZSh0eXBlKSkgeworCQkJT2JqZWN0IGFkYXB0ZXIgPSBzdXBlci5hZGFwdChvYmplY3QsIHR5cGUpOworCQkJaWYgKCEodHlwZSBpbnN0YW5jZW9mIENsYXNzPD8+KSB8fCAoKChDbGFzczw/Pil0eXBlKS5pc0luc3RhbmNlKGFkYXB0ZXIpKSkgeworCQkJCXJldHVybiBhZGFwdGVyOworCQkJfQorCQl9CisKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogVGhpcyBhZGRzIGEgbGlzdGVuZXIuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgYWRkTGlzdGVuZXIoSU5vdGlmeUNoYW5nZWRMaXN0ZW5lciBub3RpZnlDaGFuZ2VkTGlzdGVuZXIpIHsKKwkJY2hhbmdlTm90aWZpZXIuYWRkTGlzdGVuZXIobm90aWZ5Q2hhbmdlZExpc3RlbmVyKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHJlbW92ZXMgYSBsaXN0ZW5lci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCByZW1vdmVMaXN0ZW5lcihJTm90aWZ5Q2hhbmdlZExpc3RlbmVyIG5vdGlmeUNoYW5nZWRMaXN0ZW5lcikgeworCQljaGFuZ2VOb3RpZmllci5yZW1vdmVMaXN0ZW5lcihub3RpZnlDaGFuZ2VkTGlzdGVuZXIpOworCX0KKworCS8qKgorCSAqIFRoaXMgZGVsZWdhdGVzIHRvIHtAbGluayAjY2hhbmdlTm90aWZpZXJ9IGFuZCB0byB7QGxpbmsgI3BhcmVudEFkYXB0ZXJGYWN0b3J5fS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBmaXJlTm90aWZ5Q2hhbmdlZChOb3RpZmljYXRpb24gbm90aWZpY2F0aW9uKSB7CisJCWNoYW5nZU5vdGlmaWVyLmZpcmVOb3RpZnlDaGFuZ2VkKG5vdGlmaWNhdGlvbik7CisKKwkJaWYgKHBhcmVudEFkYXB0ZXJGYWN0b3J5ICE9IG51bGwpIHsKKwkJCXBhcmVudEFkYXB0ZXJGYWN0b3J5LmZpcmVOb3RpZnlDaGFuZ2VkKG5vdGlmaWNhdGlvbik7CisJCX0KKwl9CisKKwkvKioKKwkgKiBUaGlzIGRpc3Bvc2VzIGFsbCBvZiB0aGUgaXRlbSBwcm92aWRlcnMgY3JlYXRlZCBieSB0aGlzIGZhY3RvcnkuIAorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIGRpc3Bvc2UoKSB7CisJCWlmIChwZXJjb2xhdGlvbkRpc2Vhc2VNb2RlbEl0ZW1Qcm92aWRlciAhPSBudWxsKSBwZXJjb2xhdGlvbkRpc2Vhc2VNb2RlbEl0ZW1Qcm92aWRlci5kaXNwb3NlKCk7CisJCWlmICh0YkRpc2Vhc2VNb2RlbExhYmVsSXRlbVByb3ZpZGVyICE9IG51bGwpIHRiRGlzZWFzZU1vZGVsTGFiZWxJdGVtUHJvdmlkZXIuZGlzcG9zZSgpOworCQlpZiAodGJEaXNlYXNlTW9kZWxMYWJlbFZhbHVlSXRlbVByb3ZpZGVyICE9IG51bGwpIHRiRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZUl0ZW1Qcm92aWRlci5kaXNwb3NlKCk7CisJCWlmICh0YkRpc2Vhc2VNb2RlbEl0ZW1Qcm92aWRlciAhPSBudWxsKSB0YkRpc2Vhc2VNb2RlbEl0ZW1Qcm92aWRlci5kaXNwb3NlKCk7CisJfQorCit9CmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leHBlcmltZW50YWwvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9leHBlcmltZW50YWwvcHJvdmlkZXIvUGVyY29sYXRpb25EaXNlYXNlTW9kZWxJdGVtUHJvdmlkZXIuamF2YSBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4cGVyaW1lbnRhbC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL2V4cGVyaW1lbnRhbC9wcm92aWRlci9QZXJjb2xhdGlvbkRpc2Vhc2VNb2RlbEl0ZW1Qcm92aWRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFkODgyZTAKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leHBlcmltZW50YWwvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9leHBlcmltZW50YWwvcHJvdmlkZXIvUGVyY29sYXRpb25EaXNlYXNlTW9kZWxJdGVtUHJvdmlkZXIuamF2YQpAQCAtMCwwICsxLDE1MyBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXhwZXJpbWVudGFsLnByb3ZpZGVyOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA5IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCitpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5BZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlJlc291cmNlTG9jYXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JRWRpdGluZ0RvbWFpbkl0ZW1Qcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbUxhYmVsUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1Qcm9wZXJ0eVNvdXJjZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JU3RydWN0dXJlZEl0ZW1Db250ZW50UHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVRyZWVJdGVtQ29udGVudFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leHBlcmltZW50YWwuUGVyY29sYXRpb25EaXNlYXNlTW9kZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLnByb3ZpZGVyLlN0b2NoYXN0aWNTRUlSRGlzZWFzZU1vZGVsSXRlbVByb3ZpZGVyOworCisvKioKKyAqIFRoaXMgaXMgdGhlIGl0ZW0gcHJvdmlkZXIgYWRhcHRlciBmb3IgYSB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4cGVyaW1lbnRhbC5QZXJjb2xhdGlvbkRpc2Vhc2VNb2RlbH0gb2JqZWN0LgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgUGVyY29sYXRpb25EaXNlYXNlTW9kZWxJdGVtUHJvdmlkZXIKKwlleHRlbmRzIFN0b2NoYXN0aWNTRUlSRGlzZWFzZU1vZGVsSXRlbVByb3ZpZGVyCisJaW1wbGVtZW50cwkKKwkJSUVkaXRpbmdEb21haW5JdGVtUHJvdmlkZXIsCQorCQlJU3RydWN0dXJlZEl0ZW1Db250ZW50UHJvdmlkZXIsCQorCQlJVHJlZUl0ZW1Db250ZW50UHJvdmlkZXIsCQorCQlJSXRlbUxhYmVsUHJvdmlkZXIsCQorCQlJSXRlbVByb3BlcnR5U291cmNlIHsKKwkvKioKKwkgKiBUaGlzIGNvbnN0cnVjdHMgYW4gaW5zdGFuY2UgZnJvbSBhIGZhY3RvcnkgYW5kIGEgbm90aWZpZXIuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFBlcmNvbGF0aW9uRGlzZWFzZU1vZGVsSXRlbVByb3ZpZGVyKEFkYXB0ZXJGYWN0b3J5IGFkYXB0ZXJGYWN0b3J5KSB7CisJCXN1cGVyKGFkYXB0ZXJGYWN0b3J5KTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgdGhlIHByb3BlcnR5IGRlc2NyaXB0b3JzIGZvciB0aGUgYWRhcHRlZCBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgTGlzdDxJSXRlbVByb3BlcnR5RGVzY3JpcHRvcj4gZ2V0UHJvcGVydHlEZXNjcmlwdG9ycyhPYmplY3Qgb2JqZWN0KSB7CisJCWlmIChpdGVtUHJvcGVydHlEZXNjcmlwdG9ycyA9PSBudWxsKSB7CisJCQlzdXBlci5nZXRQcm9wZXJ0eURlc2NyaXB0b3JzKG9iamVjdCk7CisKKwkJfQorCQlyZXR1cm4gaXRlbVByb3BlcnR5RGVzY3JpcHRvcnM7CisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIFBlcmNvbGF0aW9uRGlzZWFzZU1vZGVsLmdpZi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIE9iamVjdCBnZXRJbWFnZShPYmplY3Qgb2JqZWN0KSB7CisJCXJldHVybiBzdXBlci5nZXRJbWFnZShvYmplY3QpOworCX0KKwkKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgUGVyY29sYXRpb25EaXNlYXNlTW9kZWwuZ2lmLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogQHBhcmFtIG9iamVjdCAKKwkgKiBAcmV0dXJuIAorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgT2JqZWN0IGdldEltYWdlR2VuKE9iamVjdCBvYmplY3QpIHsKKwkJcmV0dXJuIG92ZXJsYXlJbWFnZShvYmplY3QsIGdldFJlc291cmNlTG9jYXRvcigpLmdldEltYWdlKCJmdWxsL29iajE2L1BlcmNvbGF0aW9uRGlzZWFzZU1vZGVsIikpOworCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyB0aGUgbGFiZWwgdGV4dCBmb3IgdGhlIGFkYXB0ZWQgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBTdHJpbmcgZ2V0VGV4dChPYmplY3Qgb2JqZWN0KSB7CisJCXJldHVybiBzdXBlci5nZXRUZXh0KG9iamVjdCk7CisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIHRoZSBsYWJlbCB0ZXh0IGZvciB0aGUgYWRhcHRlZCBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgU3RyaW5nIGdldFRleHRHZW4oT2JqZWN0IG9iamVjdCkgeworCQlTdHJpbmcgbGFiZWwgPSAoKFBlcmNvbGF0aW9uRGlzZWFzZU1vZGVsKW9iamVjdCkuZ2V0RGlzZWFzZU5hbWUoKTsKKwkJcmV0dXJuIGxhYmVsID09IG51bGwgfHwgbGFiZWwubGVuZ3RoKCkgPT0gMCA/CisJCQlnZXRTdHJpbmcoIl9VSV9QZXJjb2xhdGlvbkRpc2Vhc2VNb2RlbF90eXBlIikgOgorCQkJZ2V0U3RyaW5nKCJfVUlfUGVyY29sYXRpb25EaXNlYXNlTW9kZWxfdHlwZSIpICsgIiAiICsgbGFiZWw7CisJfQorCQorCS8qKgorCSAqIFRoaXMgaGFuZGxlcyBtb2RlbCBub3RpZmljYXRpb25zIGJ5IGNhbGxpbmcge0BsaW5rICN1cGRhdGVDaGlsZHJlbn0gdG8gdXBkYXRlIGFueSBjYWNoZWQKKwkgKiBjaGlsZHJlbiBhbmQgYnkgY3JlYXRpbmcgYSB2aWV3ZXIgbm90aWZpY2F0aW9uLCB3aGljaCBpdCBwYXNzZXMgdG8ge0BsaW5rICNmaXJlTm90aWZ5Q2hhbmdlZH0uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgbm90aWZ5Q2hhbmdlZChOb3RpZmljYXRpb24gbm90aWZpY2F0aW9uKSB7CisJCXVwZGF0ZUNoaWxkcmVuKG5vdGlmaWNhdGlvbik7CisJCXN1cGVyLm5vdGlmeUNoYW5nZWQobm90aWZpY2F0aW9uKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFkZHMge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lZGl0LmNvbW1hbmQuQ29tbWFuZFBhcmFtZXRlcn1zIGRlc2NyaWJpbmcgdGhlIGNoaWxkcmVuCisJICogdGhhdCBjYW4gYmUgY3JlYXRlZCB1bmRlciB0aGlzIG9iamVjdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgdm9pZCBjb2xsZWN0TmV3Q2hpbGREZXNjcmlwdG9ycyhDb2xsZWN0aW9uPE9iamVjdD4gbmV3Q2hpbGREZXNjcmlwdG9ycywgT2JqZWN0IG9iamVjdCkgeworCQlzdXBlci5jb2xsZWN0TmV3Q2hpbGREZXNjcmlwdG9ycyhuZXdDaGlsZERlc2NyaXB0b3JzLCBvYmplY3QpOworCX0KKworCS8qKgorCSAqIFJldHVybiB0aGUgcmVzb3VyY2UgbG9jYXRvciBmb3IgdGhpcyBpdGVtIHByb3ZpZGVyJ3MgcmVzb3VyY2VzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBSZXNvdXJjZUxvY2F0b3IgZ2V0UmVzb3VyY2VMb2NhdG9yKCkgeworCQlyZXR1cm4gRXhwZXJpbWVudGFsRWRpdFBsdWdpbi5JTlNUQU5DRTsKKwl9CisKK30KZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4cGVyaW1lbnRhbC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL2V4cGVyaW1lbnRhbC9wcm92aWRlci9UQkRpc2Vhc2VNb2RlbEl0ZW1Qcm92aWRlci5qYXZhIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXhwZXJpbWVudGFsL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvZXhwZXJpbWVudGFsL3Byb3ZpZGVyL1RCRGlzZWFzZU1vZGVsSXRlbVByb3ZpZGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2FiNmZjNQotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4cGVyaW1lbnRhbC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL2V4cGVyaW1lbnRhbC9wcm92aWRlci9UQkRpc2Vhc2VNb2RlbEl0ZW1Qcm92aWRlci5qYXZhCkBAIC0wLDAgKzEsMTMwIEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leHBlcmltZW50YWwucHJvdmlkZXI7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIAorICogQ29weXJpZ2h0IChjKSAyMDExIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiAKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdCAKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sIAorICogCisgKiBDb250cmlidXRvcnM6IAorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiAKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LkFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuUmVzb3VyY2VMb2NhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklFZGl0aW5nRG9tYWluSXRlbVByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtTGFiZWxQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbVByb3BlcnR5RGVzY3JpcHRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbVByb3BlcnR5U291cmNlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklTdHJ1Y3R1cmVkSXRlbUNvbnRlbnRQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JVHJlZUl0ZW1Db250ZW50UHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4cGVyaW1lbnRhbC5UQkRpc2Vhc2VNb2RlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQucHJvdmlkZXIuU3RhbmRhcmREaXNlYXNlTW9kZWxJdGVtUHJvdmlkZXI7CisKKy8qKgorICogVGhpcyBpcyB0aGUgaXRlbSBwcm92aWRlciBhZGFwdGVyIGZvciBhIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXhwZXJpbWVudGFsLlRCRGlzZWFzZU1vZGVsfSBvYmplY3QuCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBUQkRpc2Vhc2VNb2RlbEl0ZW1Qcm92aWRlcgorCWV4dGVuZHMgU3RhbmRhcmREaXNlYXNlTW9kZWxJdGVtUHJvdmlkZXIKKwlpbXBsZW1lbnRzCisJCUlFZGl0aW5nRG9tYWluSXRlbVByb3ZpZGVyLAorCQlJU3RydWN0dXJlZEl0ZW1Db250ZW50UHJvdmlkZXIsCisJCUlUcmVlSXRlbUNvbnRlbnRQcm92aWRlciwKKwkJSUl0ZW1MYWJlbFByb3ZpZGVyLAorCQlJSXRlbVByb3BlcnR5U291cmNlIHsKKwkvKioKKwkgKiBUaGlzIGNvbnN0cnVjdHMgYW4gaW5zdGFuY2UgZnJvbSBhIGZhY3RvcnkgYW5kIGEgbm90aWZpZXIuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFRCRGlzZWFzZU1vZGVsSXRlbVByb3ZpZGVyKEFkYXB0ZXJGYWN0b3J5IGFkYXB0ZXJGYWN0b3J5KSB7CisJCXN1cGVyKGFkYXB0ZXJGYWN0b3J5KTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgdGhlIHByb3BlcnR5IGRlc2NyaXB0b3JzIGZvciB0aGUgYWRhcHRlZCBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgTGlzdDxJSXRlbVByb3BlcnR5RGVzY3JpcHRvcj4gZ2V0UHJvcGVydHlEZXNjcmlwdG9ycyhPYmplY3Qgb2JqZWN0KSB7CisJCWlmIChpdGVtUHJvcGVydHlEZXNjcmlwdG9ycyA9PSBudWxsKSB7CisJCQlzdXBlci5nZXRQcm9wZXJ0eURlc2NyaXB0b3JzKG9iamVjdCk7CisKKwkJfQorCQlyZXR1cm4gaXRlbVByb3BlcnR5RGVzY3JpcHRvcnM7CisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIFRCRGlzZWFzZU1vZGVsLmdpZi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgT2JqZWN0IGdldEltYWdlKE9iamVjdCBvYmplY3QpIHsKKwkJcmV0dXJuIG92ZXJsYXlJbWFnZShvYmplY3QsIGdldFJlc291cmNlTG9jYXRvcigpLmdldEltYWdlKCJmdWxsL29iajE2L1RCRGlzZWFzZU1vZGVsIikpOworCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyB0aGUgbGFiZWwgdGV4dCBmb3IgdGhlIGFkYXB0ZWQgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIFN0cmluZyBnZXRUZXh0KE9iamVjdCBvYmplY3QpIHsKKwkJU3RyaW5nIGxhYmVsID0gKChUQkRpc2Vhc2VNb2RlbClvYmplY3QpLmdldERpc2Vhc2VOYW1lKCk7CisJCXJldHVybiBsYWJlbCA9PSBudWxsIHx8IGxhYmVsLmxlbmd0aCgpID09IDAgPworCQkJZ2V0U3RyaW5nKCJfVUlfVEJEaXNlYXNlTW9kZWxfdHlwZSIpIDoKKwkJCWdldFN0cmluZygiX1VJX1RCRGlzZWFzZU1vZGVsX3R5cGUiKSArICIgIiArIGxhYmVsOworCX0KKworCS8qKgorCSAqIFRoaXMgaGFuZGxlcyBtb2RlbCBub3RpZmljYXRpb25zIGJ5IGNhbGxpbmcge0BsaW5rICN1cGRhdGVDaGlsZHJlbn0gdG8gdXBkYXRlIGFueSBjYWNoZWQKKwkgKiBjaGlsZHJlbiBhbmQgYnkgY3JlYXRpbmcgYSB2aWV3ZXIgbm90aWZpY2F0aW9uLCB3aGljaCBpdCBwYXNzZXMgdG8ge0BsaW5rICNmaXJlTm90aWZ5Q2hhbmdlZH0uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgbm90aWZ5Q2hhbmdlZChOb3RpZmljYXRpb24gbm90aWZpY2F0aW9uKSB7CisJCXVwZGF0ZUNoaWxkcmVuKG5vdGlmaWNhdGlvbik7CisJCXN1cGVyLm5vdGlmeUNoYW5nZWQobm90aWZpY2F0aW9uKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFkZHMge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lZGl0LmNvbW1hbmQuQ29tbWFuZFBhcmFtZXRlcn1zIGRlc2NyaWJpbmcgdGhlIGNoaWxkcmVuCisJICogdGhhdCBjYW4gYmUgY3JlYXRlZCB1bmRlciB0aGlzIG9iamVjdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgdm9pZCBjb2xsZWN0TmV3Q2hpbGREZXNjcmlwdG9ycyhDb2xsZWN0aW9uPE9iamVjdD4gbmV3Q2hpbGREZXNjcmlwdG9ycywgT2JqZWN0IG9iamVjdCkgeworCQlzdXBlci5jb2xsZWN0TmV3Q2hpbGREZXNjcmlwdG9ycyhuZXdDaGlsZERlc2NyaXB0b3JzLCBvYmplY3QpOworCX0KKworCS8qKgorCSAqIFJldHVybiB0aGUgcmVzb3VyY2UgbG9jYXRvciBmb3IgdGhpcyBpdGVtIHByb3ZpZGVyJ3MgcmVzb3VyY2VzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBSZXNvdXJjZUxvY2F0b3IgZ2V0UmVzb3VyY2VMb2NhdG9yKCkgeworCQlyZXR1cm4gRXhwZXJpbWVudGFsRWRpdFBsdWdpbi5JTlNUQU5DRTsKKwl9CisKK30KZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4cGVyaW1lbnRhbC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL2V4cGVyaW1lbnRhbC9wcm92aWRlci9UQkRpc2Vhc2VNb2RlbExhYmVsSXRlbVByb3ZpZGVyLmphdmEgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leHBlcmltZW50YWwvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9leHBlcmltZW50YWwvcHJvdmlkZXIvVEJEaXNlYXNlTW9kZWxMYWJlbEl0ZW1Qcm92aWRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQzMmRkNGYKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leHBlcmltZW50YWwvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9leHBlcmltZW50YWwvcHJvdmlkZXIvVEJEaXNlYXNlTW9kZWxMYWJlbEl0ZW1Qcm92aWRlci5qYXZhCkBAIC0wLDAgKzEsMTMzIEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leHBlcmltZW50YWwucHJvdmlkZXI7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIAorICogQ29weXJpZ2h0IChjKSAyMDExIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiAKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdCAKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sIAorICogCisgKiBDb250cmlidXRvcnM6IAorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiAKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5BZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlJlc291cmNlTG9jYXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuVVJJOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkNvbXBvc2VhYmxlQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUVkaXRpbmdEb21haW5JdGVtUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1MYWJlbFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtUHJvcGVydHlEZXNjcmlwdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtUHJvcGVydHlTb3VyY2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVN0cnVjdHVyZWRJdGVtQ29udGVudFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklUcmVlSXRlbUNvbnRlbnRQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXhwZXJpbWVudGFsLkV4cGVyaW1lbnRhbFBhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4cGVyaW1lbnRhbC5UQkRpc2Vhc2VNb2RlbExhYmVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5wcm92aWRlci5TdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsSXRlbVByb3ZpZGVyOworCisvKioKKyAqIFRoaXMgaXMgdGhlIGl0ZW0gcHJvdmlkZXIgYWRhcHRlciBmb3IgYSB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4cGVyaW1lbnRhbC5UQkRpc2Vhc2VNb2RlbExhYmVsfSBvYmplY3QuCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBUQkRpc2Vhc2VNb2RlbExhYmVsSXRlbVByb3ZpZGVyCisJZXh0ZW5kcyBTdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsSXRlbVByb3ZpZGVyCisJaW1wbGVtZW50cworCQlJRWRpdGluZ0RvbWFpbkl0ZW1Qcm92aWRlciwKKwkJSVN0cnVjdHVyZWRJdGVtQ29udGVudFByb3ZpZGVyLAorCQlJVHJlZUl0ZW1Db250ZW50UHJvdmlkZXIsCisJCUlJdGVtTGFiZWxQcm92aWRlciwKKwkJSUl0ZW1Qcm9wZXJ0eVNvdXJjZSB7CisJLyoqCisJICogVGhpcyBjb25zdHJ1Y3RzIGFuIGluc3RhbmNlIGZyb20gYSBmYWN0b3J5IGFuZCBhIG5vdGlmaWVyLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBUQkRpc2Vhc2VNb2RlbExhYmVsSXRlbVByb3ZpZGVyKEFkYXB0ZXJGYWN0b3J5IGFkYXB0ZXJGYWN0b3J5KSB7CisJCXN1cGVyKGFkYXB0ZXJGYWN0b3J5KTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgdGhlIHByb3BlcnR5IGRlc2NyaXB0b3JzIGZvciB0aGUgYWRhcHRlZCBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgTGlzdDxJSXRlbVByb3BlcnR5RGVzY3JpcHRvcj4gZ2V0UHJvcGVydHlEZXNjcmlwdG9ycyhPYmplY3Qgb2JqZWN0KSB7CisJCWlmIChpdGVtUHJvcGVydHlEZXNjcmlwdG9ycyA9PSBudWxsKSB7CisJCQlzdXBlci5nZXRQcm9wZXJ0eURlc2NyaXB0b3JzKG9iamVjdCk7CisKKwkJfQorCQlyZXR1cm4gaXRlbVByb3BlcnR5RGVzY3JpcHRvcnM7CisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIFRCRGlzZWFzZU1vZGVsTGFiZWwuZ2lmLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBPYmplY3QgZ2V0SW1hZ2UoT2JqZWN0IG9iamVjdCkgeworCQlyZXR1cm4gb3ZlcmxheUltYWdlKG9iamVjdCwgZ2V0UmVzb3VyY2VMb2NhdG9yKCkuZ2V0SW1hZ2UoImZ1bGwvb2JqMTYvVEJEaXNlYXNlTW9kZWxMYWJlbCIpKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgdGhlIGxhYmVsIHRleHQgZm9yIHRoZSBhZGFwdGVkIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBTdHJpbmcgZ2V0VGV4dChPYmplY3Qgb2JqZWN0KSB7CisJCVVSSSBsYWJlbFZhbHVlID0gKChUQkRpc2Vhc2VNb2RlbExhYmVsKW9iamVjdCkuZ2V0VVJJKCk7CisJCVN0cmluZyBsYWJlbCA9IGxhYmVsVmFsdWUgPT0gbnVsbCA/IG51bGwgOiBsYWJlbFZhbHVlLnRvU3RyaW5nKCk7CisJCXJldHVybiBsYWJlbCA9PSBudWxsIHx8IGxhYmVsLmxlbmd0aCgpID09IDAgPworCQkJZ2V0U3RyaW5nKCJfVUlfVEJEaXNlYXNlTW9kZWxMYWJlbF90eXBlIikgOgorCQkJZ2V0U3RyaW5nKCJfVUlfVEJEaXNlYXNlTW9kZWxMYWJlbF90eXBlIikgKyAiICIgKyBsYWJlbDsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGhhbmRsZXMgbW9kZWwgbm90aWZpY2F0aW9ucyBieSBjYWxsaW5nIHtAbGluayAjdXBkYXRlQ2hpbGRyZW59IHRvIHVwZGF0ZSBhbnkgY2FjaGVkCisJICogY2hpbGRyZW4gYW5kIGJ5IGNyZWF0aW5nIGEgdmlld2VyIG5vdGlmaWNhdGlvbiwgd2hpY2ggaXQgcGFzc2VzIHRvIHtAbGluayAjZmlyZU5vdGlmeUNoYW5nZWR9LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIG5vdGlmeUNoYW5nZWQoTm90aWZpY2F0aW9uIG5vdGlmaWNhdGlvbikgeworCQl1cGRhdGVDaGlsZHJlbihub3RpZmljYXRpb24pOworCQlzdXBlci5ub3RpZnlDaGFuZ2VkKG5vdGlmaWNhdGlvbik7CisJfQorCisJLyoqCisJICogVGhpcyBhZGRzIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuZWRpdC5jb21tYW5kLkNvbW1hbmRQYXJhbWV0ZXJ9cyBkZXNjcmliaW5nIHRoZSBjaGlsZHJlbgorCSAqIHRoYXQgY2FuIGJlIGNyZWF0ZWQgdW5kZXIgdGhpcyBvYmplY3QuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgY29sbGVjdE5ld0NoaWxkRGVzY3JpcHRvcnMoQ29sbGVjdGlvbjxPYmplY3Q+IG5ld0NoaWxkRGVzY3JpcHRvcnMsIE9iamVjdCBvYmplY3QpIHsKKwkJc3VwZXIuY29sbGVjdE5ld0NoaWxkRGVzY3JpcHRvcnMobmV3Q2hpbGREZXNjcmlwdG9ycywgb2JqZWN0KTsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm4gdGhlIHJlc291cmNlIGxvY2F0b3IgZm9yIHRoaXMgaXRlbSBwcm92aWRlcidzIHJlc291cmNlcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgUmVzb3VyY2VMb2NhdG9yIGdldFJlc291cmNlTG9jYXRvcigpIHsKKwkJcmV0dXJuIEV4cGVyaW1lbnRhbEVkaXRQbHVnaW4uSU5TVEFOQ0U7CisJfQorCit9CmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leHBlcmltZW50YWwvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9leHBlcmltZW50YWwvcHJvdmlkZXIvVEJEaXNlYXNlTW9kZWxMYWJlbFZhbHVlSXRlbVByb3ZpZGVyLmphdmEgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leHBlcmltZW50YWwvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9leHBlcmltZW50YWwvcHJvdmlkZXIvVEJEaXNlYXNlTW9kZWxMYWJlbFZhbHVlSXRlbVByb3ZpZGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTFiYzk5ZgotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4cGVyaW1lbnRhbC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL2V4cGVyaW1lbnRhbC9wcm92aWRlci9UQkRpc2Vhc2VNb2RlbExhYmVsVmFsdWVJdGVtUHJvdmlkZXIuamF2YQpAQCAtMCwwICsxLDE4NCBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXhwZXJpbWVudGFsLnByb3ZpZGVyOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAKKyAqIENvcHlyaWdodCAoYykgMjAxMSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4gCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIAorICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wIAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQgCisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbCAKKyAqIAorICogQ29udHJpYnV0b3JzOiAKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOworaW1wb3J0IGphdmEudXRpbC5MaXN0OworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5SZXNvdXJjZUxvY2F0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JRWRpdGluZ0RvbWFpbkl0ZW1Qcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbUxhYmVsUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1Qcm9wZXJ0eVNvdXJjZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JU3RydWN0dXJlZEl0ZW1Db250ZW50UHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVRyZWVJdGVtQ29udGVudFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuVmlld2VyTm90aWZpY2F0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leHBlcmltZW50YWwuRXhwZXJpbWVudGFsUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXhwZXJpbWVudGFsLlRCRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQucHJvdmlkZXIuU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbFZhbHVlSXRlbVByb3ZpZGVyOworCisvKioKKyAqIFRoaXMgaXMgdGhlIGl0ZW0gcHJvdmlkZXIgYWRhcHRlciBmb3IgYSB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4cGVyaW1lbnRhbC5UQkRpc2Vhc2VNb2RlbExhYmVsVmFsdWV9IG9iamVjdC4KKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIFRCRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZUl0ZW1Qcm92aWRlcgorCWV4dGVuZHMgU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbFZhbHVlSXRlbVByb3ZpZGVyCisJaW1wbGVtZW50cworCQlJRWRpdGluZ0RvbWFpbkl0ZW1Qcm92aWRlciwKKwkJSVN0cnVjdHVyZWRJdGVtQ29udGVudFByb3ZpZGVyLAorCQlJVHJlZUl0ZW1Db250ZW50UHJvdmlkZXIsCisJCUlJdGVtTGFiZWxQcm92aWRlciwKKwkJSUl0ZW1Qcm9wZXJ0eVNvdXJjZSB7CisJLyoqCisJICogVGhpcyBjb25zdHJ1Y3RzIGFuIGluc3RhbmNlIGZyb20gYSBmYWN0b3J5IGFuZCBhIG5vdGlmaWVyLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBUQkRpc2Vhc2VNb2RlbExhYmVsVmFsdWVJdGVtUHJvdmlkZXIoQWRhcHRlckZhY3RvcnkgYWRhcHRlckZhY3RvcnkpIHsKKwkJc3VwZXIoYWRhcHRlckZhY3RvcnkpOworCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyB0aGUgcHJvcGVydHkgZGVzY3JpcHRvcnMgZm9yIHRoZSBhZGFwdGVkIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBMaXN0PElJdGVtUHJvcGVydHlEZXNjcmlwdG9yPiBnZXRQcm9wZXJ0eURlc2NyaXB0b3JzKE9iamVjdCBvYmplY3QpIHsKKwkJaWYgKGl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzID09IG51bGwpIHsKKwkJCXN1cGVyLmdldFByb3BlcnR5RGVzY3JpcHRvcnMob2JqZWN0KTsKKworCQkJYWRkSWxQcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0KTsKKwkJCWFkZElhUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCk7CisJCX0KKwkJcmV0dXJuIGl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzOworCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyBhIHByb3BlcnR5IGRlc2NyaXB0b3IgZm9yIHRoZSBJbCBmZWF0dXJlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIGFkZElsUHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdCBvYmplY3QpIHsKKwkJaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMuYWRkCisJCQkoY3JlYXRlSXRlbVByb3BlcnR5RGVzY3JpcHRvcgorCQkJCSgoKENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnkpYWRhcHRlckZhY3RvcnkpLmdldFJvb3RBZGFwdGVyRmFjdG9yeSgpLAorCQkJCSBnZXRSZXNvdXJjZUxvY2F0b3IoKSwKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfVEJEaXNlYXNlTW9kZWxMYWJlbFZhbHVlX2lsX2ZlYXR1cmUiKSwKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfUHJvcGVydHlEZXNjcmlwdG9yX2Rlc2NyaXB0aW9uIiwgIl9VSV9UQkRpc2Vhc2VNb2RlbExhYmVsVmFsdWVfaWxfZmVhdHVyZSIsICJfVUlfVEJEaXNlYXNlTW9kZWxMYWJlbFZhbHVlX3R5cGUiKSwKKwkJCQkgRXhwZXJpbWVudGFsUGFja2FnZS5MaXRlcmFscy5UQl9ESVNFQVNFX01PREVMX0xBQkVMX1ZBTFVFX19JTCwKKwkJCQkgdHJ1ZSwKKwkJCQkgZmFsc2UsCisJCQkJIGZhbHNlLAorCQkJCSBJdGVtUHJvcGVydHlEZXNjcmlwdG9yLlJFQUxfVkFMVUVfSU1BR0UsCisJCQkJIG51bGwsCisJCQkJIG51bGwpKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFkZHMgYSBwcm9wZXJ0eSBkZXNjcmlwdG9yIGZvciB0aGUgSWEgZmVhdHVyZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBhZGRJYVByb3BlcnR5RGVzY3JpcHRvcihPYmplY3Qgb2JqZWN0KSB7CisJCWl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzLmFkZAorCQkJKGNyZWF0ZUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IKKwkJCQkoKChDb21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5KWFkYXB0ZXJGYWN0b3J5KS5nZXRSb290QWRhcHRlckZhY3RvcnkoKSwKKwkJCQkgZ2V0UmVzb3VyY2VMb2NhdG9yKCksCisJCQkJIGdldFN0cmluZygiX1VJX1RCRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZV9pYV9mZWF0dXJlIiksCisJCQkJIGdldFN0cmluZygiX1VJX1Byb3BlcnR5RGVzY3JpcHRvcl9kZXNjcmlwdGlvbiIsICJfVUlfVEJEaXNlYXNlTW9kZWxMYWJlbFZhbHVlX2lhX2ZlYXR1cmUiLCAiX1VJX1RCRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZV90eXBlIiksCisJCQkJIEV4cGVyaW1lbnRhbFBhY2thZ2UuTGl0ZXJhbHMuVEJfRElTRUFTRV9NT0RFTF9MQUJFTF9WQUxVRV9fSUEsCisJCQkJIHRydWUsCisJCQkJIGZhbHNlLAorCQkJCSBmYWxzZSwKKwkJCQkgSXRlbVByb3BlcnR5RGVzY3JpcHRvci5SRUFMX1ZBTFVFX0lNQUdFLAorCQkJCSBudWxsLAorCQkJCSBudWxsKSk7CisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIFRCRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZS5naWYuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIE9iamVjdCBnZXRJbWFnZShPYmplY3Qgb2JqZWN0KSB7CisJCXJldHVybiBvdmVybGF5SW1hZ2Uob2JqZWN0LCBnZXRSZXNvdXJjZUxvY2F0b3IoKS5nZXRJbWFnZSgiZnVsbC9vYmoxNi9UQkRpc2Vhc2VNb2RlbExhYmVsVmFsdWUiKSk7CisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIHRoZSBsYWJlbCB0ZXh0IGZvciB0aGUgYWRhcHRlZCBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgU3RyaW5nIGdldFRleHQoT2JqZWN0IG9iamVjdCkgeworCQlUQkRpc2Vhc2VNb2RlbExhYmVsVmFsdWUgdGJEaXNlYXNlTW9kZWxMYWJlbFZhbHVlID0gKFRCRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZSlvYmplY3Q7CisJCXJldHVybiBnZXRTdHJpbmcoIl9VSV9UQkRpc2Vhc2VNb2RlbExhYmVsVmFsdWVfdHlwZSIpICsgIiAiICsgdGJEaXNlYXNlTW9kZWxMYWJlbFZhbHVlLmdldFBvcHVsYXRpb25Db3VudCgpOworCX0KKworCS8qKgorCSAqIFRoaXMgaGFuZGxlcyBtb2RlbCBub3RpZmljYXRpb25zIGJ5IGNhbGxpbmcge0BsaW5rICN1cGRhdGVDaGlsZHJlbn0gdG8gdXBkYXRlIGFueSBjYWNoZWQKKwkgKiBjaGlsZHJlbiBhbmQgYnkgY3JlYXRpbmcgYSB2aWV3ZXIgbm90aWZpY2F0aW9uLCB3aGljaCBpdCBwYXNzZXMgdG8ge0BsaW5rICNmaXJlTm90aWZ5Q2hhbmdlZH0uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgbm90aWZ5Q2hhbmdlZChOb3RpZmljYXRpb24gbm90aWZpY2F0aW9uKSB7CisJCXVwZGF0ZUNoaWxkcmVuKG5vdGlmaWNhdGlvbik7CisKKwkJc3dpdGNoIChub3RpZmljYXRpb24uZ2V0RmVhdHVyZUlEKFRCRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZS5jbGFzcykpIHsKKwkJCWNhc2UgRXhwZXJpbWVudGFsUGFja2FnZS5UQl9ESVNFQVNFX01PREVMX0xBQkVMX1ZBTFVFX19JTDoKKwkJCWNhc2UgRXhwZXJpbWVudGFsUGFja2FnZS5UQl9ESVNFQVNFX01PREVMX0xBQkVMX1ZBTFVFX19JQToKKwkJCQlmaXJlTm90aWZ5Q2hhbmdlZChuZXcgVmlld2VyTm90aWZpY2F0aW9uKG5vdGlmaWNhdGlvbiwgbm90aWZpY2F0aW9uLmdldE5vdGlmaWVyKCksIGZhbHNlLCB0cnVlKSk7CisJCQkJcmV0dXJuOworCQl9CisJCXN1cGVyLm5vdGlmeUNoYW5nZWQobm90aWZpY2F0aW9uKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFkZHMge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lZGl0LmNvbW1hbmQuQ29tbWFuZFBhcmFtZXRlcn1zIGRlc2NyaWJpbmcgdGhlIGNoaWxkcmVuCisJICogdGhhdCBjYW4gYmUgY3JlYXRlZCB1bmRlciB0aGlzIG9iamVjdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgdm9pZCBjb2xsZWN0TmV3Q2hpbGREZXNjcmlwdG9ycyhDb2xsZWN0aW9uPE9iamVjdD4gbmV3Q2hpbGREZXNjcmlwdG9ycywgT2JqZWN0IG9iamVjdCkgeworCQlzdXBlci5jb2xsZWN0TmV3Q2hpbGREZXNjcmlwdG9ycyhuZXdDaGlsZERlc2NyaXB0b3JzLCBvYmplY3QpOworCX0KKworCS8qKgorCSAqIFJldHVybiB0aGUgcmVzb3VyY2UgbG9jYXRvciBmb3IgdGhpcyBpdGVtIHByb3ZpZGVyJ3MgcmVzb3VyY2VzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBSZXNvdXJjZUxvY2F0b3IgZ2V0UmVzb3VyY2VMb2NhdG9yKCkgeworCQlyZXR1cm4gRXhwZXJpbWVudGFsRWRpdFBsdWdpbi5JTlNUQU5DRTsKKwl9CisKK30KZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4cGVyaW1lbnRhbC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL2V4cGVyaW1lbnRhbC91dGlsL0V4cGVyaW1lbnRhbEFkYXB0ZXJGYWN0b3J5LmphdmEgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leHBlcmltZW50YWwvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9leHBlcmltZW50YWwvdXRpbC9FeHBlcmltZW50YWxBZGFwdGVyRmFjdG9yeS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNjOWJlYmQKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leHBlcmltZW50YWwvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9leHBlcmltZW50YWwvdXRpbC9FeHBlcmltZW50YWxBZGFwdGVyRmFjdG9yeS5qYXZhCkBAIC0wLDAgKzEsNjY4IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leHBlcmltZW50YWwudXRpbDsKKworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuQWRhcHRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmllcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5pbXBsLkFkYXB0ZXJGYWN0b3J5SW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLklkZW50aWZpYWJsZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLlNhbml0eUNoZWNrZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkR5bmFtaWNMYWJlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguRHluYW1pY05vZGVMYWJlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguSW50ZWdyYXRpb25MYWJlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguSW50ZWdyYXRpb25MYWJlbFZhbHVlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5MYWJlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguTGFiZWxWYWx1ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguTm9kZUxhYmVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5EZWNvcmF0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLkludGVncmF0aW9uRGVjb3JhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5Ob2RlRGVjb3JhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5Nb2RpZmlhYmxlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leHBlcmltZW50YWwuKjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXhwZXJpbWVudGFsLkV4cGVyaW1lbnRhbFBhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4cGVyaW1lbnRhbC5QZXJjb2xhdGlvbkRpc2Vhc2VNb2RlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXhwZXJpbWVudGFsLlRCRGlzZWFzZU1vZGVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leHBlcmltZW50YWwuVEJEaXNlYXNlTW9kZWxMYWJlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXhwZXJpbWVudGFsLlRCRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuRGlzZWFzZU1vZGVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5EaXNlYXNlTW9kZWxMYWJlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU0VJUjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU0k7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlNJUjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmREaXNlYXNlTW9kZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmRTdG9jaGFzdGljRGlzZWFzZU1vZGVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdG9jaGFzdGljRGlzZWFzZU1vZGVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdG9jaGFzdGljU0VJUkRpc2Vhc2VNb2RlbDsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogVGhlIDxiPkFkYXB0ZXIgRmFjdG9yeTwvYj4gZm9yIHRoZSBtb2RlbC4KKyAqIEl0IHByb3ZpZGVzIGFuIGFkYXB0ZXIgPGNvZGU+Y3JlYXRlWFhYPC9jb2RlPiBtZXRob2QgZm9yIGVhY2ggY2xhc3Mgb2YgdGhlIG1vZGVsLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leHBlcmltZW50YWwuRXhwZXJpbWVudGFsUGFja2FnZQorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgRXhwZXJpbWVudGFsQWRhcHRlckZhY3RvcnkgZXh0ZW5kcyBBZGFwdGVyRmFjdG9yeUltcGwgeworCS8qKgorCSAqIFRoZSBjYWNoZWQgbW9kZWwgcGFja2FnZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgc3RhdGljIEV4cGVyaW1lbnRhbFBhY2thZ2UgbW9kZWxQYWNrYWdlOworCisJLyoqCisJICogQ3JlYXRlcyBhbiBpbnN0YW5jZSBvZiB0aGUgYWRhcHRlciBmYWN0b3J5LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFeHBlcmltZW50YWxBZGFwdGVyRmFjdG9yeSgpIHsKKwkJaWYgKG1vZGVsUGFja2FnZSA9PSBudWxsKSB7CisJCQltb2RlbFBhY2thZ2UgPSBFeHBlcmltZW50YWxQYWNrYWdlLmVJTlNUQU5DRTsKKwkJfQorCX0KKworCS8qKgorCSAqIFJldHVybnMgd2hldGhlciB0aGlzIGZhY3RvcnkgaXMgYXBwbGljYWJsZSBmb3IgdGhlIHR5cGUgb2YgdGhlIG9iamVjdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyA8Y29kZT50cnVlPC9jb2RlPiBpZiB0aGUgb2JqZWN0IGlzIGVpdGhlciB0aGUgbW9kZWwncyBwYWNrYWdlIG9yIGlzIGFuIGluc3RhbmNlIG9iamVjdCBvZiB0aGUgbW9kZWwuCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB3aGV0aGVyIHRoaXMgZmFjdG9yeSBpcyBhcHBsaWNhYmxlIGZvciB0aGUgdHlwZSBvZiB0aGUgb2JqZWN0LgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgYm9vbGVhbiBpc0ZhY3RvcnlGb3JUeXBlKE9iamVjdCBvYmplY3QpIHsKKwkJaWYgKG9iamVjdCA9PSBtb2RlbFBhY2thZ2UpIHsKKwkJCXJldHVybiB0cnVlOworCQl9CisJCWlmIChvYmplY3QgaW5zdGFuY2VvZiBFT2JqZWN0KSB7CisJCQlyZXR1cm4gKChFT2JqZWN0KW9iamVjdCkuZUNsYXNzKCkuZ2V0RVBhY2thZ2UoKSA9PSBtb2RlbFBhY2thZ2U7CisJCX0KKwkJcmV0dXJuIGZhbHNlOworCX0KKworCS8qKgorCSAqIFRoZSBzd2l0Y2ggdGhhdCBkZWxlZ2F0ZXMgdG8gdGhlIDxjb2RlPmNyZWF0ZVhYWDwvY29kZT4gbWV0aG9kcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgRXhwZXJpbWVudGFsU3dpdGNoPEFkYXB0ZXI+IG1vZGVsU3dpdGNoID0KKwkJbmV3IEV4cGVyaW1lbnRhbFN3aXRjaDxBZGFwdGVyPigpIHsKKwkJCUBPdmVycmlkZQorCQkJcHVibGljIEFkYXB0ZXIgY2FzZVBlcmNvbGF0aW9uRGlzZWFzZU1vZGVsKFBlcmNvbGF0aW9uRGlzZWFzZU1vZGVsIG9iamVjdCkgeworCQkJCXJldHVybiBjcmVhdGVQZXJjb2xhdGlvbkRpc2Vhc2VNb2RlbEFkYXB0ZXIoKTsKKwkJCX0KKwkJCUBPdmVycmlkZQorCQkJcHVibGljIEFkYXB0ZXIgY2FzZVRCRGlzZWFzZU1vZGVsTGFiZWwoVEJEaXNlYXNlTW9kZWxMYWJlbCBvYmplY3QpIHsKKwkJCQlyZXR1cm4gY3JlYXRlVEJEaXNlYXNlTW9kZWxMYWJlbEFkYXB0ZXIoKTsKKwkJCX0KKwkJCUBPdmVycmlkZQorCQkJcHVibGljIEFkYXB0ZXIgY2FzZVRCRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZShUQkRpc2Vhc2VNb2RlbExhYmVsVmFsdWUgb2JqZWN0KSB7CisJCQkJcmV0dXJuIGNyZWF0ZVRCRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZUFkYXB0ZXIoKTsKKwkJCX0KKwkJCUBPdmVycmlkZQorCQkJcHVibGljIEFkYXB0ZXIgY2FzZVRCRGlzZWFzZU1vZGVsKFRCRGlzZWFzZU1vZGVsIG9iamVjdCkgeworCQkJCXJldHVybiBjcmVhdGVUQkRpc2Vhc2VNb2RlbEFkYXB0ZXIoKTsKKwkJCX0KKwkJCUBPdmVycmlkZQorCQkJcHVibGljIDxUPiBBZGFwdGVyIGNhc2VDb21wYXJhYmxlKENvbXBhcmFibGU8VD4gb2JqZWN0KSB7CisJCQkJcmV0dXJuIGNyZWF0ZUNvbXBhcmFibGVBZGFwdGVyKCk7CisJCQl9CisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyBBZGFwdGVyIGNhc2VTYW5pdHlDaGVja2VyKFNhbml0eUNoZWNrZXIgb2JqZWN0KSB7CisJCQkJcmV0dXJuIGNyZWF0ZVNhbml0eUNoZWNrZXJBZGFwdGVyKCk7CisJCQl9CisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyBBZGFwdGVyIGNhc2VJZGVudGlmaWFibGUoSWRlbnRpZmlhYmxlIG9iamVjdCkgeworCQkJCXJldHVybiBjcmVhdGVJZGVudGlmaWFibGVBZGFwdGVyKCk7CisJCQl9CisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyBBZGFwdGVyIGNhc2VEZWNvcmF0b3IoRGVjb3JhdG9yIG9iamVjdCkgeworCQkJCXJldHVybiBjcmVhdGVEZWNvcmF0b3JBZGFwdGVyKCk7CisJCQl9CisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyBBZGFwdGVyIGNhc2VOb2RlRGVjb3JhdG9yKE5vZGVEZWNvcmF0b3Igb2JqZWN0KSB7CisJCQkJcmV0dXJuIGNyZWF0ZU5vZGVEZWNvcmF0b3JBZGFwdGVyKCk7CisJCQl9CisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyBBZGFwdGVyIGNhc2VJbnRlZ3JhdGlvbkRlY29yYXRvcihJbnRlZ3JhdGlvbkRlY29yYXRvciBvYmplY3QpIHsKKwkJCQlyZXR1cm4gY3JlYXRlSW50ZWdyYXRpb25EZWNvcmF0b3JBZGFwdGVyKCk7CisJCQl9CisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyBBZGFwdGVyIGNhc2VNb2RpZmlhYmxlKE1vZGlmaWFibGUgb2JqZWN0KSB7CisJCQkJcmV0dXJuIGNyZWF0ZU1vZGlmaWFibGVBZGFwdGVyKCk7CisJCQl9CisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyBBZGFwdGVyIGNhc2VEaXNlYXNlTW9kZWwoRGlzZWFzZU1vZGVsIG9iamVjdCkgeworCQkJCXJldHVybiBjcmVhdGVEaXNlYXNlTW9kZWxBZGFwdGVyKCk7CisJCQl9CisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyBBZGFwdGVyIGNhc2VTdGFuZGFyZERpc2Vhc2VNb2RlbChTdGFuZGFyZERpc2Vhc2VNb2RlbCBvYmplY3QpIHsKKwkJCQlyZXR1cm4gY3JlYXRlU3RhbmRhcmREaXNlYXNlTW9kZWxBZGFwdGVyKCk7CisJCQl9CisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyBBZGFwdGVyIGNhc2VTSShTSSBvYmplY3QpIHsKKwkJCQlyZXR1cm4gY3JlYXRlU0lBZGFwdGVyKCk7CisJCQl9CisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyBBZGFwdGVyIGNhc2VTSVIoU0lSIG9iamVjdCkgeworCQkJCXJldHVybiBjcmVhdGVTSVJBZGFwdGVyKCk7CisJCQl9CisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyBBZGFwdGVyIGNhc2VTRUlSKFNFSVIgb2JqZWN0KSB7CisJCQkJcmV0dXJuIGNyZWF0ZVNFSVJBZGFwdGVyKCk7CisJCQl9CisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyBBZGFwdGVyIGNhc2VTdG9jaGFzdGljRGlzZWFzZU1vZGVsKFN0b2NoYXN0aWNEaXNlYXNlTW9kZWwgb2JqZWN0KSB7CisJCQkJcmV0dXJuIGNyZWF0ZVN0b2NoYXN0aWNEaXNlYXNlTW9kZWxBZGFwdGVyKCk7CisJCQl9CisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyBBZGFwdGVyIGNhc2VTdGFuZGFyZFN0b2NoYXN0aWNEaXNlYXNlTW9kZWwoU3RhbmRhcmRTdG9jaGFzdGljRGlzZWFzZU1vZGVsIG9iamVjdCkgeworCQkJCXJldHVybiBjcmVhdGVTdGFuZGFyZFN0b2NoYXN0aWNEaXNlYXNlTW9kZWxBZGFwdGVyKCk7CisJCQl9CisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyBBZGFwdGVyIGNhc2VTdG9jaGFzdGljU0VJUkRpc2Vhc2VNb2RlbChTdG9jaGFzdGljU0VJUkRpc2Vhc2VNb2RlbCBvYmplY3QpIHsKKwkJCQlyZXR1cm4gY3JlYXRlU3RvY2hhc3RpY1NFSVJEaXNlYXNlTW9kZWxBZGFwdGVyKCk7CisJCQl9CisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyBBZGFwdGVyIGNhc2VMYWJlbChMYWJlbCBvYmplY3QpIHsKKwkJCQlyZXR1cm4gY3JlYXRlTGFiZWxBZGFwdGVyKCk7CisJCQl9CisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyBBZGFwdGVyIGNhc2VEeW5hbWljTGFiZWwoRHluYW1pY0xhYmVsIG9iamVjdCkgeworCQkJCXJldHVybiBjcmVhdGVEeW5hbWljTGFiZWxBZGFwdGVyKCk7CisJCQl9CisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyBBZGFwdGVyIGNhc2VOb2RlTGFiZWwoTm9kZUxhYmVsIG9iamVjdCkgeworCQkJCXJldHVybiBjcmVhdGVOb2RlTGFiZWxBZGFwdGVyKCk7CisJCQl9CisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyBBZGFwdGVyIGNhc2VEeW5hbWljTm9kZUxhYmVsKER5bmFtaWNOb2RlTGFiZWwgb2JqZWN0KSB7CisJCQkJcmV0dXJuIGNyZWF0ZUR5bmFtaWNOb2RlTGFiZWxBZGFwdGVyKCk7CisJCQl9CisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyBBZGFwdGVyIGNhc2VJbnRlZ3JhdGlvbkxhYmVsKEludGVncmF0aW9uTGFiZWwgb2JqZWN0KSB7CisJCQkJcmV0dXJuIGNyZWF0ZUludGVncmF0aW9uTGFiZWxBZGFwdGVyKCk7CisJCQl9CisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyBBZGFwdGVyIGNhc2VEaXNlYXNlTW9kZWxMYWJlbChEaXNlYXNlTW9kZWxMYWJlbCBvYmplY3QpIHsKKwkJCQlyZXR1cm4gY3JlYXRlRGlzZWFzZU1vZGVsTGFiZWxBZGFwdGVyKCk7CisJCQl9CisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyBBZGFwdGVyIGNhc2VTdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsKFN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWwgb2JqZWN0KSB7CisJCQkJcmV0dXJuIGNyZWF0ZVN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWxBZGFwdGVyKCk7CisJCQl9CisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyBBZGFwdGVyIGNhc2VMYWJlbFZhbHVlKExhYmVsVmFsdWUgb2JqZWN0KSB7CisJCQkJcmV0dXJuIGNyZWF0ZUxhYmVsVmFsdWVBZGFwdGVyKCk7CisJCQl9CisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyBBZGFwdGVyIGNhc2VJbnRlZ3JhdGlvbkxhYmVsVmFsdWUoSW50ZWdyYXRpb25MYWJlbFZhbHVlIG9iamVjdCkgeworCQkJCXJldHVybiBjcmVhdGVJbnRlZ3JhdGlvbkxhYmVsVmFsdWVBZGFwdGVyKCk7CisJCQl9CisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyBBZGFwdGVyIGNhc2VEaXNlYXNlTW9kZWxMYWJlbFZhbHVlKERpc2Vhc2VNb2RlbExhYmVsVmFsdWUgb2JqZWN0KSB7CisJCQkJcmV0dXJuIGNyZWF0ZURpc2Vhc2VNb2RlbExhYmVsVmFsdWVBZGFwdGVyKCk7CisJCQl9CisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyBBZGFwdGVyIGNhc2VTdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsVmFsdWUoU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbFZhbHVlIG9iamVjdCkgeworCQkJCXJldHVybiBjcmVhdGVTdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsVmFsdWVBZGFwdGVyKCk7CisJCQl9CisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyBBZGFwdGVyIGRlZmF1bHRDYXNlKEVPYmplY3Qgb2JqZWN0KSB7CisJCQkJcmV0dXJuIGNyZWF0ZUVPYmplY3RBZGFwdGVyKCk7CisJCQl9CisJCX07CisKKwkvKioKKwkgKiBDcmVhdGVzIGFuIGFkYXB0ZXIgZm9yIHRoZSA8Y29kZT50YXJnZXQ8L2NvZGU+LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIHRhcmdldCB0aGUgb2JqZWN0IHRvIGFkYXB0LgorCSAqIEByZXR1cm4gdGhlIGFkYXB0ZXIgZm9yIHRoZSA8Y29kZT50YXJnZXQ8L2NvZGU+LgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVBZGFwdGVyKE5vdGlmaWVyIHRhcmdldCkgeworCQlyZXR1cm4gbW9kZWxTd2l0Y2guZG9Td2l0Y2goKEVPYmplY3QpdGFyZ2V0KTsKKwl9CisKKworCS8qKgorCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4cGVyaW1lbnRhbC5QZXJjb2xhdGlvbkRpc2Vhc2VNb2RlbCA8ZW0+UGVyY29sYXRpb24gRGlzZWFzZSBNb2RlbDwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7CisJICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXhwZXJpbWVudGFsLlBlcmNvbGF0aW9uRGlzZWFzZU1vZGVsCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZVBlcmNvbGF0aW9uRGlzZWFzZU1vZGVsQWRhcHRlcigpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXhwZXJpbWVudGFsLlRCRGlzZWFzZU1vZGVsTGFiZWwgPGVtPlRCIERpc2Vhc2UgTW9kZWwgTGFiZWw8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOworCSAqIGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZSB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5LgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4cGVyaW1lbnRhbC5UQkRpc2Vhc2VNb2RlbExhYmVsCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZVRCRGlzZWFzZU1vZGVsTGFiZWxBZGFwdGVyKCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leHBlcmltZW50YWwuVEJEaXNlYXNlTW9kZWxMYWJlbFZhbHVlIDxlbT5UQiBEaXNlYXNlIE1vZGVsIExhYmVsIFZhbHVlPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsKKwkgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leHBlcmltZW50YWwuVEJEaXNlYXNlTW9kZWxMYWJlbFZhbHVlCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZVRCRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZUFkYXB0ZXIoKSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4cGVyaW1lbnRhbC5UQkRpc2Vhc2VNb2RlbCA8ZW0+VEIgRGlzZWFzZSBNb2RlbDwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7CisJICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXhwZXJpbWVudGFsLlRCRGlzZWFzZU1vZGVsCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZVRCRGlzZWFzZU1vZGVsQWRhcHRlcigpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBqYXZhLmxhbmcuQ29tcGFyYWJsZSA8ZW0+Q29tcGFyYWJsZTwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7CisJICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCisJICogQHNlZSBqYXZhLmxhbmcuQ29tcGFyYWJsZQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVDb21wYXJhYmxlQWRhcHRlcigpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLklkZW50aWZpYWJsZSA8ZW0+SWRlbnRpZmlhYmxlPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsKKwkgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uSWRlbnRpZmlhYmxlCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZUlkZW50aWZpYWJsZUFkYXB0ZXIoKSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLkRlY29yYXRvciA8ZW0+RGVjb3JhdG9yPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsKKwkgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5EZWNvcmF0b3IKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlRGVjb3JhdG9yQWRhcHRlcigpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuTm9kZURlY29yYXRvciA8ZW0+Tm9kZSBEZWNvcmF0b3I8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOworCSAqIGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZSB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5LgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLk5vZGVEZWNvcmF0b3IKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlTm9kZURlY29yYXRvckFkYXB0ZXIoKSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5TYW5pdHlDaGVja2VyIDxlbT5TYW5pdHkgQ2hlY2tlcjwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7CisJICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLlNhbml0eUNoZWNrZXIKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlU2FuaXR5Q2hlY2tlckFkYXB0ZXIoKSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLk1vZGlmaWFibGUgPGVtPk1vZGlmaWFibGU8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOworCSAqIGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZSB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5LgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLk1vZGlmaWFibGUKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlTW9kaWZpYWJsZUFkYXB0ZXIoKSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLkRpc2Vhc2VNb2RlbCA8ZW0+RGlzZWFzZSBNb2RlbDwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7CisJICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuRGlzZWFzZU1vZGVsCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZURpc2Vhc2VNb2RlbEFkYXB0ZXIoKSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLkludGVncmF0aW9uRGVjb3JhdG9yIDxlbT5JbnRlZ3JhdGlvbiBEZWNvcmF0b3I8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOworCSAqIGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZSB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5LgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLkludGVncmF0aW9uRGVjb3JhdG9yCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZUludGVncmF0aW9uRGVjb3JhdG9yQWRhcHRlcigpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmREaXNlYXNlTW9kZWwgPGVtPkRpc2Vhc2UgTW9kZWw8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOworCSAqIGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZSB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5LgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkRGlzZWFzZU1vZGVsCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZVN0YW5kYXJkRGlzZWFzZU1vZGVsQWRhcHRlcigpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU0kgPGVtPlNJPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsKKwkgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TSQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVTSUFkYXB0ZXIoKSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlNJUiA8ZW0+U0lSPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsKKwkgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TSVIKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlU0lSQWRhcHRlcigpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU0VJUiA8ZW0+U0VJUjwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7CisJICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU0VJUgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVTRUlSQWRhcHRlcigpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RvY2hhc3RpY0Rpc2Vhc2VNb2RlbCA8ZW0+U3RvY2hhc3RpYyBEaXNlYXNlIE1vZGVsPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsKKwkgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdG9jaGFzdGljRGlzZWFzZU1vZGVsCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZVN0b2NoYXN0aWNEaXNlYXNlTW9kZWxBZGFwdGVyKCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZFN0b2NoYXN0aWNEaXNlYXNlTW9kZWwgPGVtPlN0b2NoYXN0aWMgRGlzZWFzZSBNb2RlbDwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7CisJICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmRTdG9jaGFzdGljRGlzZWFzZU1vZGVsCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZVN0YW5kYXJkU3RvY2hhc3RpY0Rpc2Vhc2VNb2RlbEFkYXB0ZXIoKSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlN0b2NoYXN0aWNTRUlSRGlzZWFzZU1vZGVsIDxlbT5TdG9jaGFzdGljIFNFSVIgRGlzZWFzZSBNb2RlbDwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7CisJICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RvY2hhc3RpY1NFSVJEaXNlYXNlTW9kZWwKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlU3RvY2hhc3RpY1NFSVJEaXNlYXNlTW9kZWxBZGFwdGVyKCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5MYWJlbCA8ZW0+TGFiZWw8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOworCSAqIGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZSB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5LgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkxhYmVsCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZUxhYmVsQWRhcHRlcigpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguRHluYW1pY0xhYmVsIDxlbT5EeW5hbWljIExhYmVsPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsKKwkgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5EeW5hbWljTGFiZWwKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlRHluYW1pY0xhYmVsQWRhcHRlcigpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguTm9kZUxhYmVsIDxlbT5Ob2RlIExhYmVsPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsKKwkgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5Ob2RlTGFiZWwKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlTm9kZUxhYmVsQWRhcHRlcigpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguRHluYW1pY05vZGVMYWJlbCA8ZW0+RHluYW1pYyBOb2RlIExhYmVsPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsKKwkgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5EeW5hbWljTm9kZUxhYmVsCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZUR5bmFtaWNOb2RlTGFiZWxBZGFwdGVyKCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5EaXNlYXNlTW9kZWxMYWJlbCA8ZW0+RGlzZWFzZSBNb2RlbCBMYWJlbDwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7CisJICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuRGlzZWFzZU1vZGVsTGFiZWwKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlRGlzZWFzZU1vZGVsTGFiZWxBZGFwdGVyKCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5JbnRlZ3JhdGlvbkxhYmVsIDxlbT5JbnRlZ3JhdGlvbiBMYWJlbDwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7CisJICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguSW50ZWdyYXRpb25MYWJlbAorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVJbnRlZ3JhdGlvbkxhYmVsQWRhcHRlcigpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbCA8ZW0+RGlzZWFzZSBNb2RlbCBMYWJlbDwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7CisJICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbAorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVTdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsQWRhcHRlcigpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguTGFiZWxWYWx1ZSA8ZW0+TGFiZWwgVmFsdWU8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOworCSAqIGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZSB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5LgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkxhYmVsVmFsdWUKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlTGFiZWxWYWx1ZUFkYXB0ZXIoKSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkludGVncmF0aW9uTGFiZWxWYWx1ZSA8ZW0+SW50ZWdyYXRpb24gTGFiZWwgVmFsdWU8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOworCSAqIGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZSB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5LgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkludGVncmF0aW9uTGFiZWxWYWx1ZQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVJbnRlZ3JhdGlvbkxhYmVsVmFsdWVBZGFwdGVyKCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5EaXNlYXNlTW9kZWxMYWJlbFZhbHVlIDxlbT5EaXNlYXNlIE1vZGVsIExhYmVsIFZhbHVlPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsKKwkgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5EaXNlYXNlTW9kZWxMYWJlbFZhbHVlCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZURpc2Vhc2VNb2RlbExhYmVsVmFsdWVBZGFwdGVyKCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsVmFsdWUgPGVtPkRpc2Vhc2UgTW9kZWwgTGFiZWwgVmFsdWU8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOworCSAqIGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZSB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5LgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVTdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsVmFsdWVBZGFwdGVyKCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIHRoZSBkZWZhdWx0IGNhc2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsLgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVFT2JqZWN0QWRhcHRlcigpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCit9IC8vRXhwZXJpbWVudGFsQWRhcHRlckZhY3RvcnkKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leHBlcmltZW50YWwvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9leHBlcmltZW50YWwvdXRpbC9FeHBlcmltZW50YWxTd2l0Y2guamF2YSBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4cGVyaW1lbnRhbC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL2V4cGVyaW1lbnRhbC91dGlsL0V4cGVyaW1lbnRhbFN3aXRjaC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM2ZjNkMjgKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leHBlcmltZW50YWwvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9leHBlcmltZW50YWwvdXRpbC9FeHBlcmltZW50YWxTd2l0Y2guamF2YQpAQCAtMCwwICsxLDY0NiBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXhwZXJpbWVudGFsLnV0aWw7CisKKworaW1wb3J0IGphdmEudXRpbC5MaXN0OworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzczsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLklkZW50aWZpYWJsZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLlNhbml0eUNoZWNrZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkR5bmFtaWNMYWJlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguRHluYW1pY05vZGVMYWJlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguSW50ZWdyYXRpb25MYWJlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguSW50ZWdyYXRpb25MYWJlbFZhbHVlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5MYWJlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguTGFiZWxWYWx1ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguTm9kZUxhYmVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5EZWNvcmF0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLkludGVncmF0aW9uRGVjb3JhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5Ob2RlRGVjb3JhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5Nb2RpZmlhYmxlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leHBlcmltZW50YWwuKjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXhwZXJpbWVudGFsLkV4cGVyaW1lbnRhbFBhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4cGVyaW1lbnRhbC5QZXJjb2xhdGlvbkRpc2Vhc2VNb2RlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXhwZXJpbWVudGFsLlRCRGlzZWFzZU1vZGVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leHBlcmltZW50YWwuVEJEaXNlYXNlTW9kZWxMYWJlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXhwZXJpbWVudGFsLlRCRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuRGlzZWFzZU1vZGVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5EaXNlYXNlTW9kZWxMYWJlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU0VJUjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU0k7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlNJUjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmREaXNlYXNlTW9kZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmRTdG9jaGFzdGljRGlzZWFzZU1vZGVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdG9jaGFzdGljRGlzZWFzZU1vZGVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdG9jaGFzdGljU0VJUkRpc2Vhc2VNb2RlbDsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogVGhlIDxiPlN3aXRjaDwvYj4gZm9yIHRoZSBtb2RlbCdzIGluaGVyaXRhbmNlIGhpZXJhcmNoeS4KKyAqIEl0IHN1cHBvcnRzIHRoZSBjYWxsIHtAbGluayAjZG9Td2l0Y2goRU9iamVjdCkgZG9Td2l0Y2gob2JqZWN0KX0KKyAqIHRvIGludm9rZSB0aGUgPGNvZGU+Y2FzZVhYWDwvY29kZT4gbWV0aG9kIGZvciBlYWNoIGNsYXNzIG9mIHRoZSBtb2RlbCwKKyAqIHN0YXJ0aW5nIHdpdGggdGhlIGFjdHVhbCBjbGFzcyBvZiB0aGUgb2JqZWN0CisgKiBhbmQgcHJvY2VlZGluZyB1cCB0aGUgaW5oZXJpdGFuY2UgaGllcmFyY2h5CisgKiB1bnRpbCBhIG5vbi1udWxsIHJlc3VsdCBpcyByZXR1cm5lZCwKKyAqIHdoaWNoIGlzIHRoZSByZXN1bHQgb2YgdGhlIHN3aXRjaC4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXhwZXJpbWVudGFsLkV4cGVyaW1lbnRhbFBhY2thZ2UKKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIEV4cGVyaW1lbnRhbFN3aXRjaDxUMT4geworCS8qKgorCSAqIFRoZSBjYWNoZWQgbW9kZWwgcGFja2FnZQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBzdGF0aWMgRXhwZXJpbWVudGFsUGFja2FnZSBtb2RlbFBhY2thZ2U7CisKKwkvKioKKwkgKiBDcmVhdGVzIGFuIGluc3RhbmNlIG9mIHRoZSBzd2l0Y2guCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEV4cGVyaW1lbnRhbFN3aXRjaCgpIHsKKwkJaWYgKG1vZGVsUGFja2FnZSA9PSBudWxsKSB7CisJCQltb2RlbFBhY2thZ2UgPSBFeHBlcmltZW50YWxQYWNrYWdlLmVJTlNUQU5DRTsKKwkJfQorCX0KKworCS8qKgorCSAqIENhbGxzIDxjb2RlPmNhc2VYWFg8L2NvZGU+IGZvciBlYWNoIGNsYXNzIG9mIHRoZSBtb2RlbCB1bnRpbCBvbmUgcmV0dXJucyBhIG5vbiBudWxsIHJlc3VsdDsgaXQgeWllbGRzIHRoYXQgcmVzdWx0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgZmlyc3Qgbm9uLW51bGwgcmVzdWx0IHJldHVybmVkIGJ5IGEgPGNvZGU+Y2FzZVhYWDwvY29kZT4gY2FsbC4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFQxIGRvU3dpdGNoKEVPYmplY3QgdGhlRU9iamVjdCkgeworCQlyZXR1cm4gZG9Td2l0Y2godGhlRU9iamVjdC5lQ2xhc3MoKSwgdGhlRU9iamVjdCk7CisJfQorCisJLyoqCisJICogQ2FsbHMgPGNvZGU+Y2FzZVhYWDwvY29kZT4gZm9yIGVhY2ggY2xhc3Mgb2YgdGhlIG1vZGVsIHVudGlsIG9uZSByZXR1cm5zIGEgbm9uIG51bGwgcmVzdWx0OyBpdCB5aWVsZHMgdGhhdCByZXN1bHQuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBmaXJzdCBub24tbnVsbCByZXN1bHQgcmV0dXJuZWQgYnkgYSA8Y29kZT5jYXNlWFhYPC9jb2RlPiBjYWxsLgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgVDEgZG9Td2l0Y2goRUNsYXNzIHRoZUVDbGFzcywgRU9iamVjdCB0aGVFT2JqZWN0KSB7CisJCWlmICh0aGVFQ2xhc3MuZUNvbnRhaW5lcigpID09IG1vZGVsUGFja2FnZSkgeworCQkJcmV0dXJuIGRvU3dpdGNoKHRoZUVDbGFzcy5nZXRDbGFzc2lmaWVySUQoKSwgdGhlRU9iamVjdCk7CisJCX0KKwkJZWxzZSB7CisJCQlMaXN0PEVDbGFzcz4gZVN1cGVyVHlwZXMgPSB0aGVFQ2xhc3MuZ2V0RVN1cGVyVHlwZXMoKTsKKwkJCXJldHVybgorCQkJCWVTdXBlclR5cGVzLmlzRW1wdHkoKSA/CisJCQkJCWRlZmF1bHRDYXNlKHRoZUVPYmplY3QpIDoKKwkJCQkJZG9Td2l0Y2goZVN1cGVyVHlwZXMuZ2V0KDApLCB0aGVFT2JqZWN0KTsKKwkJfQorCX0KKworCS8qKgorCSAqIENhbGxzIDxjb2RlPmNhc2VYWFg8L2NvZGU+IGZvciBlYWNoIGNsYXNzIG9mIHRoZSBtb2RlbCB1bnRpbCBvbmUgcmV0dXJucyBhIG5vbiBudWxsIHJlc3VsdDsgaXQgeWllbGRzIHRoYXQgcmVzdWx0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgZmlyc3Qgbm9uLW51bGwgcmVzdWx0IHJldHVybmVkIGJ5IGEgPGNvZGU+Y2FzZVhYWDwvY29kZT4gY2FsbC4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIFQxIGRvU3dpdGNoKGludCBjbGFzc2lmaWVySUQsIEVPYmplY3QgdGhlRU9iamVjdCkgeworCQlzd2l0Y2ggKGNsYXNzaWZpZXJJRCkgeworCQkJY2FzZSBFeHBlcmltZW50YWxQYWNrYWdlLlBFUkNPTEFUSU9OX0RJU0VBU0VfTU9ERUw6IHsKKwkJCQlQZXJjb2xhdGlvbkRpc2Vhc2VNb2RlbCBwZXJjb2xhdGlvbkRpc2Vhc2VNb2RlbCA9IChQZXJjb2xhdGlvbkRpc2Vhc2VNb2RlbCl0aGVFT2JqZWN0OworCQkJCVQxIHJlc3VsdCA9IGNhc2VQZXJjb2xhdGlvbkRpc2Vhc2VNb2RlbChwZXJjb2xhdGlvbkRpc2Vhc2VNb2RlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlU3RvY2hhc3RpY1NFSVJEaXNlYXNlTW9kZWwocGVyY29sYXRpb25EaXNlYXNlTW9kZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZVNFSVIocGVyY29sYXRpb25EaXNlYXNlTW9kZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZVN0YW5kYXJkU3RvY2hhc3RpY0Rpc2Vhc2VNb2RlbChwZXJjb2xhdGlvbkRpc2Vhc2VNb2RlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlU0lSKHBlcmNvbGF0aW9uRGlzZWFzZU1vZGVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VTdG9jaGFzdGljRGlzZWFzZU1vZGVsKHBlcmNvbGF0aW9uRGlzZWFzZU1vZGVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VTSShwZXJjb2xhdGlvbkRpc2Vhc2VNb2RlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlU3RhbmRhcmREaXNlYXNlTW9kZWwocGVyY29sYXRpb25EaXNlYXNlTW9kZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZURpc2Vhc2VNb2RlbChwZXJjb2xhdGlvbkRpc2Vhc2VNb2RlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlSW50ZWdyYXRpb25EZWNvcmF0b3IocGVyY29sYXRpb25EaXNlYXNlTW9kZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZU1vZGlmaWFibGUocGVyY29sYXRpb25EaXNlYXNlTW9kZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZU5vZGVEZWNvcmF0b3IocGVyY29sYXRpb25EaXNlYXNlTW9kZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZURlY29yYXRvcihwZXJjb2xhdGlvbkRpc2Vhc2VNb2RlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlSWRlbnRpZmlhYmxlKHBlcmNvbGF0aW9uRGlzZWFzZU1vZGVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VDb21wYXJhYmxlKHBlcmNvbGF0aW9uRGlzZWFzZU1vZGVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VTYW5pdHlDaGVja2VyKHBlcmNvbGF0aW9uRGlzZWFzZU1vZGVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGRlZmF1bHRDYXNlKHRoZUVPYmplY3QpOworCQkJCXJldHVybiByZXN1bHQ7CisJCQl9CisJCQljYXNlIEV4cGVyaW1lbnRhbFBhY2thZ2UuVEJfRElTRUFTRV9NT0RFTF9MQUJFTDogeworCQkJCVRCRGlzZWFzZU1vZGVsTGFiZWwgdGJEaXNlYXNlTW9kZWxMYWJlbCA9IChUQkRpc2Vhc2VNb2RlbExhYmVsKXRoZUVPYmplY3Q7CisJCQkJVDEgcmVzdWx0ID0gY2FzZVRCRGlzZWFzZU1vZGVsTGFiZWwodGJEaXNlYXNlTW9kZWxMYWJlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbCh0YkRpc2Vhc2VNb2RlbExhYmVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VEaXNlYXNlTW9kZWxMYWJlbCh0YkRpc2Vhc2VNb2RlbExhYmVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VJbnRlZ3JhdGlvbkxhYmVsKHRiRGlzZWFzZU1vZGVsTGFiZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZUR5bmFtaWNOb2RlTGFiZWwodGJEaXNlYXNlTW9kZWxMYWJlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlRHluYW1pY0xhYmVsKHRiRGlzZWFzZU1vZGVsTGFiZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZU5vZGVMYWJlbCh0YkRpc2Vhc2VNb2RlbExhYmVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VMYWJlbCh0YkRpc2Vhc2VNb2RlbExhYmVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VJZGVudGlmaWFibGUodGJEaXNlYXNlTW9kZWxMYWJlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlQ29tcGFyYWJsZSh0YkRpc2Vhc2VNb2RlbExhYmVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VTYW5pdHlDaGVja2VyKHRiRGlzZWFzZU1vZGVsTGFiZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gZGVmYXVsdENhc2UodGhlRU9iamVjdCk7CisJCQkJcmV0dXJuIHJlc3VsdDsKKwkJCX0KKwkJCWNhc2UgRXhwZXJpbWVudGFsUGFja2FnZS5UQl9ESVNFQVNFX01PREVMX0xBQkVMX1ZBTFVFOiB7CisJCQkJVEJEaXNlYXNlTW9kZWxMYWJlbFZhbHVlIHRiRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZSA9IChUQkRpc2Vhc2VNb2RlbExhYmVsVmFsdWUpdGhlRU9iamVjdDsKKwkJCQlUMSByZXN1bHQgPSBjYXNlVEJEaXNlYXNlTW9kZWxMYWJlbFZhbHVlKHRiRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZSk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbFZhbHVlKHRiRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZSk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZSh0YkRpc2Vhc2VNb2RlbExhYmVsVmFsdWUpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZUludGVncmF0aW9uTGFiZWxWYWx1ZSh0YkRpc2Vhc2VNb2RlbExhYmVsVmFsdWUpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZUxhYmVsVmFsdWUodGJEaXNlYXNlTW9kZWxMYWJlbFZhbHVlKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VTYW5pdHlDaGVja2VyKHRiRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZSk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBkZWZhdWx0Q2FzZSh0aGVFT2JqZWN0KTsKKwkJCQlyZXR1cm4gcmVzdWx0OworCQkJfQorCQkJY2FzZSBFeHBlcmltZW50YWxQYWNrYWdlLlRCX0RJU0VBU0VfTU9ERUw6IHsKKwkJCQlUQkRpc2Vhc2VNb2RlbCB0YkRpc2Vhc2VNb2RlbCA9IChUQkRpc2Vhc2VNb2RlbCl0aGVFT2JqZWN0OworCQkJCVQxIHJlc3VsdCA9IGNhc2VUQkRpc2Vhc2VNb2RlbCh0YkRpc2Vhc2VNb2RlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlU3RhbmRhcmREaXNlYXNlTW9kZWwodGJEaXNlYXNlTW9kZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZURpc2Vhc2VNb2RlbCh0YkRpc2Vhc2VNb2RlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlSW50ZWdyYXRpb25EZWNvcmF0b3IodGJEaXNlYXNlTW9kZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZU1vZGlmaWFibGUodGJEaXNlYXNlTW9kZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZU5vZGVEZWNvcmF0b3IodGJEaXNlYXNlTW9kZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZURlY29yYXRvcih0YkRpc2Vhc2VNb2RlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlSWRlbnRpZmlhYmxlKHRiRGlzZWFzZU1vZGVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VDb21wYXJhYmxlKHRiRGlzZWFzZU1vZGVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VTYW5pdHlDaGVja2VyKHRiRGlzZWFzZU1vZGVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGRlZmF1bHRDYXNlKHRoZUVPYmplY3QpOworCQkJCXJldHVybiByZXN1bHQ7CisJCQl9CisJCQlkZWZhdWx0OiByZXR1cm4gZGVmYXVsdENhc2UodGhlRU9iamVjdCk7CisJCX0KKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5QZXJjb2xhdGlvbiBEaXNlYXNlIE1vZGVsPC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7CisJICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCisJICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+UGVyY29sYXRpb24gRGlzZWFzZSBNb2RlbDwvZW0+Jy4KKwkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFQxIGNhc2VQZXJjb2xhdGlvbkRpc2Vhc2VNb2RlbChQZXJjb2xhdGlvbkRpc2Vhc2VNb2RlbCBvYmplY3QpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+VEIgRGlzZWFzZSBNb2RlbCBMYWJlbDwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOworCSAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgorCSAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPlRCIERpc2Vhc2UgTW9kZWwgTGFiZWw8L2VtPicuCisJICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBUMSBjYXNlVEJEaXNlYXNlTW9kZWxMYWJlbChUQkRpc2Vhc2VNb2RlbExhYmVsIG9iamVjdCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5UQiBEaXNlYXNlIE1vZGVsIExhYmVsIFZhbHVlPC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7CisJICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCisJICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+VEIgRGlzZWFzZSBNb2RlbCBMYWJlbCBWYWx1ZTwvZW0+Jy4KKwkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFQxIGNhc2VUQkRpc2Vhc2VNb2RlbExhYmVsVmFsdWUoVEJEaXNlYXNlTW9kZWxMYWJlbFZhbHVlIG9iamVjdCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5UQiBEaXNlYXNlIE1vZGVsPC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7CisJICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCisJICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+VEIgRGlzZWFzZSBNb2RlbDwvZW0+Jy4KKwkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFQxIGNhc2VUQkRpc2Vhc2VNb2RlbChUQkRpc2Vhc2VNb2RlbCBvYmplY3QpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+Q29tcGFyYWJsZTwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOworCSAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgorCSAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkNvbXBhcmFibGU8L2VtPicuCisJICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyA8VD4gVDEgY2FzZUNvbXBhcmFibGUoQ29tcGFyYWJsZTxUPiBvYmplY3QpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+SWRlbnRpZmlhYmxlPC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7CisJICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCisJICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+SWRlbnRpZmlhYmxlPC9lbT4nLgorCSAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVDEgY2FzZUlkZW50aWZpYWJsZShJZGVudGlmaWFibGUgb2JqZWN0KSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkRlY29yYXRvcjwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOworCSAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgorCSAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkRlY29yYXRvcjwvZW0+Jy4KKwkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFQxIGNhc2VEZWNvcmF0b3IoRGVjb3JhdG9yIG9iamVjdCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5Ob2RlIERlY29yYXRvcjwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOworCSAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgorCSAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPk5vZGUgRGVjb3JhdG9yPC9lbT4nLgorCSAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVDEgY2FzZU5vZGVEZWNvcmF0b3IoTm9kZURlY29yYXRvciBvYmplY3QpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+U2FuaXR5IENoZWNrZXI8L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsKKwkgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KKwkgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5TYW5pdHkgQ2hlY2tlcjwvZW0+Jy4KKwkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFQxIGNhc2VTYW5pdHlDaGVja2VyKFNhbml0eUNoZWNrZXIgb2JqZWN0KSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPk1vZGlmaWFibGU8L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsKKwkgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KKwkgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5Nb2RpZmlhYmxlPC9lbT4nLgorCSAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVDEgY2FzZU1vZGlmaWFibGUoTW9kaWZpYWJsZSBvYmplY3QpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+RGlzZWFzZSBNb2RlbDwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOworCSAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgorCSAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkRpc2Vhc2UgTW9kZWw8L2VtPicuCisJICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBUMSBjYXNlRGlzZWFzZU1vZGVsKERpc2Vhc2VNb2RlbCBvYmplY3QpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+SW50ZWdyYXRpb24gRGVjb3JhdG9yPC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7CisJICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCisJICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+SW50ZWdyYXRpb24gRGVjb3JhdG9yPC9lbT4nLgorCSAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVDEgY2FzZUludGVncmF0aW9uRGVjb3JhdG9yKEludGVncmF0aW9uRGVjb3JhdG9yIG9iamVjdCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5EaXNlYXNlIE1vZGVsPC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7CisJICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCisJICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+RGlzZWFzZSBNb2RlbDwvZW0+Jy4KKwkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFQxIGNhc2VTdGFuZGFyZERpc2Vhc2VNb2RlbChTdGFuZGFyZERpc2Vhc2VNb2RlbCBvYmplY3QpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+U0k8L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsKKwkgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KKwkgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5TSTwvZW0+Jy4KKwkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFQxIGNhc2VTSShTSSBvYmplY3QpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+U0lSPC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7CisJICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCisJICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+U0lSPC9lbT4nLgorCSAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVDEgY2FzZVNJUihTSVIgb2JqZWN0KSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPlNFSVI8L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsKKwkgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KKwkgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5TRUlSPC9lbT4nLgorCSAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVDEgY2FzZVNFSVIoU0VJUiBvYmplY3QpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+U3RvY2hhc3RpYyBEaXNlYXNlIE1vZGVsPC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7CisJICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCisJICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+U3RvY2hhc3RpYyBEaXNlYXNlIE1vZGVsPC9lbT4nLgorCSAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVDEgY2FzZVN0b2NoYXN0aWNEaXNlYXNlTW9kZWwoU3RvY2hhc3RpY0Rpc2Vhc2VNb2RlbCBvYmplY3QpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+U3RvY2hhc3RpYyBEaXNlYXNlIE1vZGVsPC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7CisJICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCisJICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+U3RvY2hhc3RpYyBEaXNlYXNlIE1vZGVsPC9lbT4nLgorCSAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVDEgY2FzZVN0YW5kYXJkU3RvY2hhc3RpY0Rpc2Vhc2VNb2RlbChTdGFuZGFyZFN0b2NoYXN0aWNEaXNlYXNlTW9kZWwgb2JqZWN0KSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPlN0b2NoYXN0aWMgU0VJUiBEaXNlYXNlIE1vZGVsPC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7CisJICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCisJICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+U3RvY2hhc3RpYyBTRUlSIERpc2Vhc2UgTW9kZWw8L2VtPicuCisJICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBUMSBjYXNlU3RvY2hhc3RpY1NFSVJEaXNlYXNlTW9kZWwoU3RvY2hhc3RpY1NFSVJEaXNlYXNlTW9kZWwgb2JqZWN0KSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkxhYmVsPC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7CisJICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCisJICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+TGFiZWw8L2VtPicuCisJICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBUMSBjYXNlTGFiZWwoTGFiZWwgb2JqZWN0KSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkR5bmFtaWMgTGFiZWw8L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsKKwkgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KKwkgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5EeW5hbWljIExhYmVsPC9lbT4nLgorCSAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVDEgY2FzZUR5bmFtaWNMYWJlbChEeW5hbWljTGFiZWwgb2JqZWN0KSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPk5vZGUgTGFiZWw8L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsKKwkgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KKwkgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5Ob2RlIExhYmVsPC9lbT4nLgorCSAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVDEgY2FzZU5vZGVMYWJlbChOb2RlTGFiZWwgb2JqZWN0KSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkR5bmFtaWMgTm9kZSBMYWJlbDwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOworCSAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgorCSAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkR5bmFtaWMgTm9kZSBMYWJlbDwvZW0+Jy4KKwkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFQxIGNhc2VEeW5hbWljTm9kZUxhYmVsKER5bmFtaWNOb2RlTGFiZWwgb2JqZWN0KSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkRpc2Vhc2UgTW9kZWwgTGFiZWw8L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsKKwkgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KKwkgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5EaXNlYXNlIE1vZGVsIExhYmVsPC9lbT4nLgorCSAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVDEgY2FzZURpc2Vhc2VNb2RlbExhYmVsKERpc2Vhc2VNb2RlbExhYmVsIG9iamVjdCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5JbnRlZ3JhdGlvbiBMYWJlbDwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOworCSAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgorCSAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkludGVncmF0aW9uIExhYmVsPC9lbT4nLgorCSAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVDEgY2FzZUludGVncmF0aW9uTGFiZWwoSW50ZWdyYXRpb25MYWJlbCBvYmplY3QpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+RGlzZWFzZSBNb2RlbCBMYWJlbDwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOworCSAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgorCSAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkRpc2Vhc2UgTW9kZWwgTGFiZWw8L2VtPicuCisJICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBUMSBjYXNlU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbChTdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsIG9iamVjdCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5MYWJlbCBWYWx1ZTwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOworCSAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgorCSAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkxhYmVsIFZhbHVlPC9lbT4nLgorCSAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVDEgY2FzZUxhYmVsVmFsdWUoTGFiZWxWYWx1ZSBvYmplY3QpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+SW50ZWdyYXRpb24gTGFiZWwgVmFsdWU8L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsKKwkgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KKwkgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5JbnRlZ3JhdGlvbiBMYWJlbCBWYWx1ZTwvZW0+Jy4KKwkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFQxIGNhc2VJbnRlZ3JhdGlvbkxhYmVsVmFsdWUoSW50ZWdyYXRpb25MYWJlbFZhbHVlIG9iamVjdCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5EaXNlYXNlIE1vZGVsIExhYmVsIFZhbHVlPC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7CisJICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCisJICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+RGlzZWFzZSBNb2RlbCBMYWJlbCBWYWx1ZTwvZW0+Jy4KKwkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFQxIGNhc2VEaXNlYXNlTW9kZWxMYWJlbFZhbHVlKERpc2Vhc2VNb2RlbExhYmVsVmFsdWUgb2JqZWN0KSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkRpc2Vhc2UgTW9kZWwgTGFiZWwgVmFsdWU8L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsKKwkgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KKwkgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5EaXNlYXNlIE1vZGVsIExhYmVsIFZhbHVlPC9lbT4nLgorCSAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVDEgY2FzZVN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZShTdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsVmFsdWUgb2JqZWN0KSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkVPYmplY3Q8L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsKKwkgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaCwgYnV0IHRoaXMgaXMgdGhlIGxhc3QgY2FzZSBhbnl3YXkuCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCisJICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+RU9iamVjdDwvZW0+Jy4KKwkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFQxIGRlZmF1bHRDYXNlKEVPYmplY3Qgb2JqZWN0KSB7CisJCXJldHVybiBudWxsOworCX0KKworfSAvL0V4cGVyaW1lbnRhbFN3aXRjaApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4dGVybmFsZGF0YXNvdXJjZS8uY2xhc3NwYXRoIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXh0ZXJuYWxkYXRhc291cmNlLy5jbGFzc3BhdGgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzA0ZTg2MQotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4dGVybmFsZGF0YXNvdXJjZS8uY2xhc3NwYXRoCkBAIC0wLDAgKzEsNyBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxjbGFzc3BhdGg+CisJPGNsYXNzcGF0aGVudHJ5IGtpbmQ9InNyYyIgcGF0aD0ic3JjIi8+CisJPGNsYXNzcGF0aGVudHJ5IGtpbmQ9ImNvbiIgcGF0aD0ib3JnLmVjbGlwc2UuamR0LmxhdW5jaGluZy5KUkVfQ09OVEFJTkVSL29yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC5kZWJ1Zy51aS5sYXVuY2hlci5TdGFuZGFyZFZNVHlwZS9KMlNFLTEuNSIvPgorCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJjb24iIHBhdGg9Im9yZy5lY2xpcHNlLnBkZS5jb3JlLnJlcXVpcmVkUGx1Z2lucyIvPgorCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJvdXRwdXQiIHBhdGg9ImJpbiIvPgorPC9jbGFzc3BhdGg+CmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leHRlcm5hbGRhdGFzb3VyY2UvLnByb2plY3QgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leHRlcm5hbGRhdGFzb3VyY2UvLnByb2plY3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGE3ODI4NQotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4dGVybmFsZGF0YXNvdXJjZS8ucHJvamVjdApAQCAtMCwwICsxLDI4IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPHByb2plY3REZXNjcmlwdGlvbj4KKwk8bmFtZT5vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXh0ZXJuYWxkYXRhc291cmNlPC9uYW1lPgorCTxjb21tZW50PjwvY29tbWVudD4KKwk8cHJvamVjdHM+CisJPC9wcm9qZWN0cz4KKwk8YnVpbGRTcGVjPgorCQk8YnVpbGRDb21tYW5kPgorCQkJPG5hbWU+b3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YWJ1aWxkZXI8L25hbWU+CisJCQk8YXJndW1lbnRzPgorCQkJPC9hcmd1bWVudHM+CisJCTwvYnVpbGRDb21tYW5kPgorCQk8YnVpbGRDb21tYW5kPgorCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLk1hbmlmZXN0QnVpbGRlcjwvbmFtZT4KKwkJCTxhcmd1bWVudHM+CisJCQk8L2FyZ3VtZW50cz4KKwkJPC9idWlsZENvbW1hbmQ+CisJCTxidWlsZENvbW1hbmQ+CisJCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuU2NoZW1hQnVpbGRlcjwvbmFtZT4KKwkJCTxhcmd1bWVudHM+CisJCQk8L2FyZ3VtZW50cz4KKwkJPC9idWlsZENvbW1hbmQ+CisJPC9idWlsZFNwZWM+CisJPG5hdHVyZXM+CisJCTxuYXR1cmU+b3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YW5hdHVyZTwvbmF0dXJlPgorCQk8bmF0dXJlPm9yZy5lY2xpcHNlLnBkZS5QbHVnaW5OYXR1cmU8L25hdHVyZT4KKwk8L25hdHVyZXM+Cis8L3Byb2plY3REZXNjcmlwdGlvbj4KZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4dGVybmFsZGF0YXNvdXJjZS8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leHRlcm5hbGRhdGFzb3VyY2UvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkxMWYyZGEKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leHRlcm5hbGRhdGFzb3VyY2UvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzCkBAIC0wLDAgKzEsNzggQEAKKyNUdWUgU2VwIDIzIDA5OjM1OjEyIEVEVCAyMDA4CitlY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29kZWdlbi5pbmxpbmVKc3JCeXRlY29kZT1lbmFibGVkCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb2RlZ2VuLnRhcmdldFBsYXRmb3JtPTEuNQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29kZWdlbi51bnVzZWRMb2NhbD1wcmVzZXJ2ZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29tcGxpYW5jZT0xLjUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmRlYnVnLmxpbmVOdW1iZXI9Z2VuZXJhdGUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmRlYnVnLmxvY2FsVmFyaWFibGU9Z2VuZXJhdGUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmRlYnVnLnNvdXJjZUZpbGU9Z2VuZXJhdGUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmRvYy5jb21tZW50LnN1cHBvcnQ9ZGlzYWJsZWQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uYW5ub3RhdGlvblN1cGVySW50ZXJmYWNlPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uYXNzZXJ0SWRlbnRpZmllcj1lcnJvcgorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5hdXRvYm94aW5nPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZGVwcmVjYXRpb249d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5kZXByZWNhdGlvbkluRGVwcmVjYXRlZENvZGU9ZGlzYWJsZWQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZGVwcmVjYXRpb25XaGVuT3ZlcnJpZGluZ0RlcHJlY2F0ZWRNZXRob2Q9ZGlzYWJsZWQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZGlzY291cmFnZWRSZWZlcmVuY2U9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5lbXB0eVN0YXRlbWVudD13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmVudW1JZGVudGlmaWVyPWVycm9yCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZhbGx0aHJvdWdoQ2FzZT1pZ25vcmUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZmF0YWxPcHRpb25hbEVycm9yPWVuYWJsZWQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZmllbGRIaWRpbmc9aWdub3JlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZpbmFsUGFyYW1ldGVyQm91bmQ9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5maW5hbGx5QmxvY2tOb3RDb21wbGV0aW5nTm9ybWFsbHk9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5mb3JiaWRkZW5SZWZlcmVuY2U9ZXJyb3IKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaGlkZGVuQ2F0Y2hCbG9jaz13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmluY29tcGF0aWJsZU5vbkluaGVyaXRlZEludGVyZmFjZU1ldGhvZD13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmluY29tcGxldGVFbnVtU3dpdGNoPWlnbm9yZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbmRpcmVjdFN0YXRpY0FjY2Vzcz13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmludmFsaWRKYXZhZG9jPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW52YWxpZEphdmFkb2NUYWdzPWVuYWJsZWQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW52YWxpZEphdmFkb2NUYWdzRGVwcmVjYXRlZFJlZj1lbmFibGVkCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmludmFsaWRKYXZhZG9jVGFnc05vdFZpc2libGVSZWY9ZW5hYmxlZAorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbnZhbGlkSmF2YWRvY1RhZ3NWaXNpYmlsaXR5PXB1YmxpYworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5sb2NhbFZhcmlhYmxlSGlkaW5nPWlnbm9yZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5tZXRob2RXaXRoQ29uc3RydWN0b3JOYW1lPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0RlcHJlY2F0ZWRBbm5vdGF0aW9uPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0phdmFkb2NDb21tZW50cz13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdKYXZhZG9jQ29tbWVudHNPdmVycmlkaW5nPWVuYWJsZWQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0phdmFkb2NDb21tZW50c1Zpc2liaWxpdHk9cHVibGljCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdKYXZhZG9jVGFncz13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdKYXZhZG9jVGFnc092ZXJyaWRpbmc9ZW5hYmxlZAorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nSmF2YWRvY1RhZ3NWaXNpYmlsaXR5PXB1YmxpYworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nT3ZlcnJpZGVBbm5vdGF0aW9uPWlnbm9yZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nU2VyaWFsVmVyc2lvbj13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm5vRWZmZWN0QXNzaWdubWVudD13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm5vSW1wbGljaXRTdHJpbmdDb252ZXJzaW9uPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubm9uRXh0ZXJuYWxpemVkU3RyaW5nTGl0ZXJhbD1pZ25vcmUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubnVsbFJlZmVyZW5jZT1pZ25vcmUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ub3ZlcnJpZGluZ1BhY2thZ2VEZWZhdWx0TWV0aG9kPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ucGFyYW1ldGVyQXNzaWdubWVudD1pZ25vcmUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ucG9zc2libGVBY2NpZGVudGFsQm9vbGVhbkFzc2lnbm1lbnQ9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5wb3RlbnRpYWxOdWxsUmVmZXJlbmNlPWlnbm9yZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5yYXdUeXBlUmVmZXJlbmNlPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ucmVkdW5kYW50TnVsbENoZWNrPWlnbm9yZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5zcGVjaWFsUGFyYW1ldGVySGlkaW5nRmllbGQ9ZGlzYWJsZWQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uc3RhdGljQWNjZXNzUmVjZWl2ZXI9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5zdXBwcmVzc1dhcm5pbmdzPWVuYWJsZWQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uc3ludGhldGljQWNjZXNzRW11bGF0aW9uPWlnbm9yZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS50eXBlUGFyYW1ldGVySGlkaW5nPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5jaGVja2VkVHlwZU9wZXJhdGlvbj13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVuZG9jdW1lbnRlZEVtcHR5QmxvY2s9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bmhhbmRsZWRXYXJuaW5nVG9rZW49d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bm5lY2Vzc2FyeUVsc2U9aWdub3JlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVubmVjZXNzYXJ5VHlwZUNoZWNrPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5xdWFsaWZpZWRGaWVsZEFjY2Vzcz1pZ25vcmUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkRGVjbGFyZWRUaHJvd25FeGNlcHRpb249d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWREZWNsYXJlZFRocm93bkV4Y2VwdGlvbldoZW5PdmVycmlkaW5nPWVuYWJsZWQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkSW1wb3J0PXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkTGFiZWw9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRMb2NhbD1pZ25vcmUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkUGFyYW1ldGVyPWlnbm9yZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRQYXJhbWV0ZXJJbmNsdWRlRG9jQ29tbWVudFJlZmVyZW5jZT1lbmFibGVkCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZFBhcmFtZXRlcldoZW5JbXBsZW1lbnRpbmdBYnN0cmFjdD1lbmFibGVkCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZFBhcmFtZXRlcldoZW5PdmVycmlkaW5nQ29uY3JldGU9ZW5hYmxlZAorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRQcml2YXRlTWVtYmVyPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udmFyYXJnc0FyZ3VtZW50TmVlZENhc3Q9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuc291cmNlPTEuNQpkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXh0ZXJuYWxkYXRhc291cmNlL01FVEEtSU5GL01BTklGRVNULk1GIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXh0ZXJuYWxkYXRhc291cmNlL01FVEEtSU5GL01BTklGRVNULk1GCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNhY2JmMDIKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leHRlcm5hbGRhdGFzb3VyY2UvTUVUQS1JTkYvTUFOSUZFU1QuTUYKQEAgLTAsMCArMSw0NSBAQAorTWFuaWZlc3QtVmVyc2lvbjogMS4wCitCdW5kbGUtTWFuaWZlc3RWZXJzaW9uOiAyCitCdW5kbGUtTmFtZTogJXBsdWdpbk5hbWUKK0J1bmRsZS1TeW1ib2xpY05hbWU6IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leHRlcm5hbGRhdGFzb3VyY2U7c2luZ2xldG9uOj10cnVlCitCdW5kbGUtVmVyc2lvbjogMS4yLjEKK0J1bmRsZS1DbGFzc1BhdGg6IC4KK0J1bmRsZS1BY3RpdmF0b3I6IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leHRlcm5hbGRhdGFzb3VyY2UucHJvdmlkZXIuRXh0ZXJuYWxEYXRhU291cmNlRWRpdFBsdWdpbiRJbXBsZW1lbnRhdGlvbgorQnVuZGxlLVZlbmRvcjogJXByb3ZpZGVyTmFtZQorQnVuZGxlLUxvY2FsaXphdGlvbjogcGx1Z2luCitCdW5kbGUtUmVxdWlyZWRFeGVjdXRpb25FbnZpcm9ubWVudDogSjJTRS0xLjUKK1JlcXVpcmUtQnVuZGxlOiBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUsCisgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzO3Zpc2liaWxpdHk6PXJlZXhwb3J0LAorIG9yZy5lY2xpcHNlLmVtZi5lY29yZTt2aXNpYmlsaXR5Oj1yZWV4cG9ydCwKKyAgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlO3Zpc2liaWxpdHk6PXJlZXhwb3J0LAorIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnM7dmlzaWJpbGl0eTo9cmVleHBvcnQsCisgb3JnLmVjbGlwc2UuZW1mLmVkaXQ7dmlzaWJpbGl0eTo9cmVleHBvcnQsCisgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLmVkaXQsCisgb3JnLmVjbGlwc2Uuc3RlbS51dGlsLmFuYWx5c2lzLAorIG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMKK0J1bmRsZS1BY3RpdmF0aW9uUG9saWN5OiBsYXp5CitFeHBvcnQtUGFja2FnZTogb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4dGVybmFsZGF0YXNvdXJjZTt1c2VzOj0ib3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLG9yZy5lY2xpcHNlLmVtZi5lY29yZSIsCisgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4dGVybmFsZGF0YXNvdXJjZS5pbXBsOworICB1c2VzOj0ib3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLAorICAgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLmltcGwsCisgICBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXh0ZXJuYWxkYXRhc291cmNlLAorICAgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLmltcGwsCisgICBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwsCisgICBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cywKKyAgIG9yZy5lY2xpcHNlLmVtZi5lY29yZSIsCisgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4dGVybmFsZGF0YXNvdXJjZS5wcm92aWRlcjsKKyAgdXNlczo9Im9yZy5lY2xpcHNlLmVtZi5jb21tb24sCisgICBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnVpLAorICAgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLnByb3ZpZGVyLAorICAgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnksCisgICBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlciwKKyAgIG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbCwKKyAgIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leHRlcm5hbGRhdGFzb3VyY2UudXRpbCIsCisgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4dGVybmFsZGF0YXNvdXJjZS51dGlsOworICB1c2VzOj0ib3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLAorICAgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuaW1wbCwKKyAgIG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LAorICAgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLAorICAgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbiwKKyAgIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leHRlcm5hbGRhdGFzb3VyY2UsCisgICBvcmcuZWNsaXBzZS5lbWYuZWNvcmUiCmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leHRlcm5hbGRhdGFzb3VyY2UvYnVpbGQucHJvcGVydGllcyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4dGVybmFsZGF0YXNvdXJjZS9idWlsZC5wcm9wZXJ0aWVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY3MTMyZGMKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leHRlcm5hbGRhdGFzb3VyY2UvYnVpbGQucHJvcGVydGllcwpAQCAtMCwwICsxLDE2IEBACisjIDxjb3B5cmlnaHQ+CisjIDwvY29weXJpZ2h0PgorIworIyAkSWQ6IGJ1aWxkLnByb3BlcnRpZXMsdiAxLjEgMjAwOC8wMy8xOCAwNDo0ODozOCBqa2F1Zm1hbiBFeHAgJAorCitiaW4uaW5jbHVkZXMgPSAuLFwKKyAgICAgICAgICAgICAgIGljb25zLyxcCisgICAgICAgICAgICAgICBNRVRBLUlORi8sXAorICAgICAgICAgICAgICAgcGx1Z2luLnhtbCxcCisgICAgICAgICAgICAgICBwbHVnaW4ucHJvcGVydGllcyxcCisgICAgICAgICAgICAgICBwbHVnaW5fZGUucHJvcGVydGllcyxcCisgICAgICAgICAgICAgICBwbHVnaW5fa3IucHJvcGVydGllcyxcCisgICAgICAgICAgICAgICBwbHVnaW5femgucHJvcGVydGllcworamFycy5jb21waWxlLm9yZGVyID0gLgorc291cmNlLi4gPSBzcmMvCitvdXRwdXQuLiA9IGJpbi8KZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4dGVybmFsZGF0YXNvdXJjZS9pY29ucy9mdWxsL2N1c3RvbW9iajE2L0V4dGVybmFsRGF0YVNvdXJjZURpc2Vhc2VNb2RlbC5naWYgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leHRlcm5hbGRhdGFzb3VyY2UvaWNvbnMvZnVsbC9jdXN0b21vYmoxNi9FeHRlcm5hbERhdGFTb3VyY2VEaXNlYXNlTW9kZWwuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRlNDA0ZTQKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leHRlcm5hbGRhdGFzb3VyY2UvaWNvbnMvZnVsbC9jdXN0b21vYmoxNi9FeHRlcm5hbERhdGFTb3VyY2VEaXNlYXNlTW9kZWwuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4dGVybmFsZGF0YXNvdXJjZS9pY29ucy9mdWxsL29iajE2L0V4cGVyaW1lbnRhbERpc2Vhc2VNb2RlbC5naWYgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leHRlcm5hbGRhdGFzb3VyY2UvaWNvbnMvZnVsbC9vYmoxNi9FeHBlcmltZW50YWxEaXNlYXNlTW9kZWwuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMzOGZiOGQKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leHRlcm5hbGRhdGFzb3VyY2UvaWNvbnMvZnVsbC9vYmoxNi9FeHBlcmltZW50YWxEaXNlYXNlTW9kZWwuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4dGVybmFsZGF0YXNvdXJjZS9pY29ucy9mdWxsL29iajE2L0V4dGVybmFsRGF0YVNvdXJjZURpc2Vhc2VNb2RlbC5naWYgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leHRlcm5hbGRhdGFzb3VyY2UvaWNvbnMvZnVsbC9vYmoxNi9FeHRlcm5hbERhdGFTb3VyY2VEaXNlYXNlTW9kZWwuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEzNmUzYjIKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leHRlcm5hbGRhdGFzb3VyY2UvaWNvbnMvZnVsbC9vYmoxNi9FeHRlcm5hbERhdGFTb3VyY2VEaXNlYXNlTW9kZWwuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4dGVybmFsZGF0YXNvdXJjZS9pY29ucy9mdWxsL29iajE2L0V4dGVybmFsRGF0YVNvdXJjZU1vZGVsRmlsZS5naWYgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leHRlcm5hbGRhdGFzb3VyY2UvaWNvbnMvZnVsbC9vYmoxNi9FeHRlcm5hbERhdGFTb3VyY2VNb2RlbEZpbGUuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhhOTQ0MTAKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leHRlcm5hbGRhdGFzb3VyY2UvaWNvbnMvZnVsbC9vYmoxNi9FeHRlcm5hbERhdGFTb3VyY2VNb2RlbEZpbGUuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4dGVybmFsZGF0YXNvdXJjZS9pY29ucy9mdWxsL3dpemJhbi9OZXdFeHRlcm5hbERhdGFTb3VyY2UuZ2lmIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXh0ZXJuYWxkYXRhc291cmNlL2ljb25zL2Z1bGwvd2l6YmFuL05ld0V4dGVybmFsRGF0YVNvdXJjZS5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTJjOGI3NQotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4dGVybmFsZGF0YXNvdXJjZS9pY29ucy9mdWxsL3dpemJhbi9OZXdFeHRlcm5hbERhdGFTb3VyY2UuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4dGVybmFsZGF0YXNvdXJjZS9tb2RlbC9FeHRlcm5hbERhdGFTb3VyY2UuZ2VubW9kZWwgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leHRlcm5hbGRhdGFzb3VyY2UvbW9kZWwvRXh0ZXJuYWxEYXRhU291cmNlLmdlbm1vZGVsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE4ODlhZTkKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leHRlcm5hbGRhdGFzb3VyY2UvbW9kZWwvRXh0ZXJuYWxEYXRhU291cmNlLmdlbm1vZGVsCkBAIC0wLDAgKzEsMTggQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8Z2VubW9kZWw6R2VuTW9kZWwgeG1pOnZlcnNpb249IjIuMCIKKyAgICB4bWxuczp4bWk9Imh0dHA6Ly93d3cub21nLm9yZy9YTUkiIHhtbG5zOmVjb3JlPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2VtZi8yMDAyL0Vjb3JlIgorICAgIHhtbG5zOmdlbm1vZGVsPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2VtZi8yMDAyL0dlbk1vZGVsIiBtb2RlbERpcmVjdG9yeT0iL29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leHRlcm5hbGRhdGFzb3VyY2Uvc3JjIgorICAgIGVkaXREaXJlY3Rvcnk9Ii9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXh0ZXJuYWxkYXRhc291cmNlL3NyYyIgZWRpdG9yRGlyZWN0b3J5PSIvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4dGVybmFsZGF0YXNvdXJjZS9zcmMiCisgICAgbW9kZWxQbHVnaW5JRD0ib3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4dGVybmFsZGF0YXNvdXJjZSIgbW9kZWxOYW1lPSJFeHRlcm5hbERhdGFTb3VyY2UiCisgICAgbm9uTkxTTWFya2Vycz0idHJ1ZSIgdGVzdHNEaXJlY3Rvcnk9Ii9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRpc2Vhc2Vtb2RlbHMuZXh0ZXJuYWxkYXRhc291cmNlL3NyYyIKKyAgICBpbXBvcnRlcklEPSJvcmcuZWNsaXBzZS5lbWYuaW1wb3J0ZXIuZWNvcmUiIGNvbXBsaWFuY2VMZXZlbD0iNS4wIiBjb3B5cmlnaHRGaWVsZHM9ImZhbHNlIgorICAgIHVzZWRHZW5QYWNrYWdlcz0iLi4vLi4vb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL21vZGVsL2Rpc2Vhc2Vtb2RlbHMuZ2VubW9kZWwjLy9zdGFuZGFyZCAuLi8uLi9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvbW9kZWwvY29yZS5nZW5tb2RlbCMvL2NvbW1vbiAuLi8uLi9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvbW9kZWwvY29yZS5nZW5tb2RlbCMvL21vZGVsIC4uLy4uL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9tb2RlbC9jb3JlLmdlbm1vZGVsIy8vZ3JhcGggLi4vLi4vb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy9tb2RlbC9kZWZpbml0aW9ucy5nZW5tb2RlbCMvL2xhYmVscyAuLi8uLi9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvbW9kZWwvY29yZS5nZW5tb2RlbCMvL21vZGlmaWVyIHBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2UuZW1mLmVjb3JlL21vZGVsL0Vjb3JlLmdlbm1vZGVsIy8vZWNvcmUgLi4vLi4vb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL21vZGVsL2NvcmUuZ2VubW9kZWwjLy9zY2VuYXJpbyAuLi8uLi9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvbW9kZWwvY29yZS5nZW5tb2RlbCMvL3NlcXVlbmNlciAuLi8uLi9vcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMvbW9kZWwvc3RhbmRhcmQuZ2VubW9kZWwjLy9zdGFuZGFyZCAuLi8uLi9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvbW9kZWwvY29yZS5nZW5tb2RlbCMvL3NvbHZlciI+CisgIDxmb3JlaWduTW9kZWw+ZXh0ZXJuYWxkYXRhc291cmNlLmVjb3JlPC9mb3JlaWduTW9kZWw+CisgIDxnZW5QYWNrYWdlcyBwcmVmaXg9IkV4dGVybmFsRGF0YVNvdXJjZSIgYmFzZVBhY2thZ2U9Im9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscyIKKyAgICAgIGRpc3Bvc2FibGVQcm92aWRlckZhY3Rvcnk9InRydWUiIG11bHRpcGxlRWRpdG9yUGFnZXM9ImZhbHNlIiBlY29yZVBhY2thZ2U9ImV4dGVybmFsZGF0YXNvdXJjZS5lY29yZSMvIj4KKyAgICA8Z2VuQ2xhc3NlcyBlY29yZUNsYXNzPSJleHRlcm5hbGRhdGFzb3VyY2UuZWNvcmUjLy9FeHRlcm5hbERhdGFTb3VyY2VEaXNlYXNlTW9kZWwiPgorICAgICAgPGdlbkZlYXR1cmVzIGNyZWF0ZUNoaWxkPSJmYWxzZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFQXR0cmlidXRlIGV4dGVybmFsZGF0YXNvdXJjZS5lY29yZSMvL0V4dGVybmFsRGF0YVNvdXJjZURpc2Vhc2VNb2RlbC9kYXRhUGF0aCIvPgorICAgICAgPGdlbkZlYXR1cmVzIHByb3BlcnR5PSJOb25lIiBjcmVhdGVDaGlsZD0iZmFsc2UiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RUF0dHJpYnV0ZSBleHRlcm5hbGRhdGFzb3VyY2UuZWNvcmUjLy9FeHRlcm5hbERhdGFTb3VyY2VEaXNlYXNlTW9kZWwvZGlzZWFzZVR5cGUiLz4KKyAgICA8L2dlbkNsYXNzZXM+CisgIDwvZ2VuUGFja2FnZXM+Cis8L2dlbm1vZGVsOkdlbk1vZGVsPgpkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXh0ZXJuYWxkYXRhc291cmNlL21vZGVsL2V4dGVybmFsZGF0YXNvdXJjZS5lY29yZSBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4dGVybmFsZGF0YXNvdXJjZS9tb2RlbC9leHRlcm5hbGRhdGFzb3VyY2UuZWNvcmUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmYzM2VmNwotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4dGVybmFsZGF0YXNvdXJjZS9tb2RlbC9leHRlcm5hbGRhdGFzb3VyY2UuZWNvcmUKQEAgLTAsMCArMSwxMCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxlY29yZTpFUGFja2FnZSB4bWk6dmVyc2lvbj0iMi4wIgorICAgIHhtbG5zOnhtaT0iaHR0cDovL3d3dy5vbWcub3JnL1hNSSIgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIKKyAgICB4bWxuczplY29yZT0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9lbWYvMjAwMi9FY29yZSIgbmFtZT0iZXh0ZXJuYWxkYXRhc291cmNlIgorICAgIG5zVVJJPSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9leHRlcm5hbGRhdGFzb3VyY2UuZWNvcmUiIG5zUHJlZml4PSJvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXh0ZXJuYWxkYXRhc291cmNlIj4KKyAgPGVDbGFzc2lmaWVycyB4c2k6dHlwZT0iZWNvcmU6RUNsYXNzIiBuYW1lPSJFeHRlcm5hbERhdGFTb3VyY2VEaXNlYXNlTW9kZWwiIGVTdXBlclR5cGVzPSIuLi8uLi9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMvbW9kZWwvc3RhbmRhcmQuZWNvcmUjLy9TdGFuZGFyZERpc2Vhc2VNb2RlbCI+CisgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVBdHRyaWJ1dGUiIG5hbWU9ImRhdGFQYXRoIiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDIvRWNvcmUjLy9FU3RyaW5nIi8+CisgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVBdHRyaWJ1dGUiIG5hbWU9ImRpc2Vhc2VUeXBlIiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDIvRWNvcmUjLy9FU3RyaW5nIi8+CisgIDwvZUNsYXNzaWZpZXJzPgorPC9lY29yZTpFUGFja2FnZT4KZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4dGVybmFsZGF0YXNvdXJjZS9wbHVnaW4ucHJvcGVydGllcyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4dGVybmFsZGF0YXNvdXJjZS9wbHVnaW4ucHJvcGVydGllcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZjI0NmZlCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXh0ZXJuYWxkYXRhc291cmNlL3BsdWdpbi5wcm9wZXJ0aWVzCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4dGVybmFsZGF0YXNvdXJjZS9wbHVnaW4ueG1sIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXh0ZXJuYWxkYXRhc291cmNlL3BsdWdpbi54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzUzOTJmYwotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4dGVybmFsZGF0YXNvdXJjZS9wbHVnaW4ueG1sCkBAIC0wLDAgKzEsNDcgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8P2VjbGlwc2UgdmVyc2lvbj0iMy4wIj8+CisKKzwhLS0KKyA8Y29weXJpZ2h0PgorIDwvY29weXJpZ2h0PgorCisgJElkOiBwbHVnaW4ueG1sLHYgMS4xIDIwMDgvMDMvMTggMDQ6NDg6MzggamthdWZtYW4gRXhwICQKKy0tPgorCis8cGx1Z2luPgorICAgIAorICA8ZXh0ZW5zaW9uIHBvaW50PSJvcmcuZWNsaXBzZS5lbWYuZWRpdC5pdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yaWVzIj4KKyAgICA8ZmFjdG9yeSAKKyAgICAgICB1cmkgPSAiaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvZXh0ZXJuYWxkYXRhc291cmNlLmVjb3JlIiAKKyAgICAgICBjbGFzcyA9ICJvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXh0ZXJuYWxkYXRhc291cmNlLnByb3ZpZGVyLkV4dGVybmFsRGF0YVNvdXJjZUl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5IiAKKyAgICAgICBzdXBwb3J0ZWRUeXBlcyA9IAorICAgICAgICAgIm9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklFZGl0aW5nRG9tYWluSXRlbVByb3ZpZGVyCisgICAgICAgICAgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVN0cnVjdHVyZWRJdGVtQ29udGVudFByb3ZpZGVyCisgICAgICAgICAgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVRyZWVJdGVtQ29udGVudFByb3ZpZGVyCisgICAgICAgICAgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1MYWJlbFByb3ZpZGVyCisgICAgICAgICAgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1Qcm9wZXJ0eVNvdXJjZSIgLz4KKyAgPC9leHRlbnNpb24+CisKKyAgPGV4dGVuc2lvbiBwb2ludD0ib3JnLmVjbGlwc2UuZW1mLmVjb3JlLmdlbmVyYXRlZF9wYWNrYWdlIj4KKyAgICA8cGFja2FnZQorICAgICAgIHVyaSA9ICJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9leHRlcm5hbGRhdGFzb3VyY2UuZWNvcmUiCisgICAgICAgY2xhc3MgPSAib3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4dGVybmFsZGF0YXNvdXJjZS5FeHRlcm5hbERhdGFTb3VyY2VQYWNrYWdlIgorICAgICAgIGdlbk1vZGVsID0gIm1vZGVsL2V4dGVybmFsZGF0YXNvdXJjZS5nZW5tb2RlbCIgLz4gCisgIDwvZXh0ZW5zaW9uPgorICA8ZXh0ZW5zaW9uCisgICAgICAgIHBvaW50PSJvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZGlzZWFzZW1vZGVsIj4KKyAgICAgPGNsYXNzZGVmCisgICAgICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXh0ZXJuYWxkYXRhc291cmNlLmltcGwuRXh0ZXJuYWxEYXRhU291cmNlRGlzZWFzZU1vZGVsSW1wbCI+CisgICAgIDwvY2xhc3NkZWY+CisgICAgIDxkdWJsaW5fY29yZQorICAgICAgICAgICBjcmVhdG9yPSIlZGNfY3JlYXRvcl9rYXVmbWFuIgorICAgICAgICAgICBkZXNjcmlwdGlvbj0iJWRjX2Rlc2NfRV9TX1NFSVIiCisgICAgICAgICAgIGlkZW50aWZpZXI9IiVkY19pZGVudGllciIKKyAgICAgICAgICAgbGljZW5zZT0iJWRjX2xpY2Vuc2UiCisgICAgICAgICAgIHB1Ymxpc2hlcj0iJWRjX3B1Ymxpc2hlciIKKyAgICAgICAgICAgc291cmNlPSIlZGNfU09VUkNFIgorICAgICAgICAgICB0aXRsZT0iJWRjX3RpdGxlX0VfU19TRUlSIj4KKyAgICAgPC9kdWJsaW5fY29yZT4KKyAgPC9leHRlbnNpb24+CisKKzwvcGx1Z2luPgpkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXh0ZXJuYWxkYXRhc291cmNlL3BsdWdpbl9kZS5wcm9wZXJ0aWVzIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXh0ZXJuYWxkYXRhc291cmNlL3BsdWdpbl9kZS5wcm9wZXJ0aWVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRlNzkyMWIKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leHRlcm5hbGRhdGFzb3VyY2UvcGx1Z2luX2RlLnByb3BlcnRpZXMKQEAgLTAsMCArMSwxMDQgQEAKKyMvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIyAqIENvcHlyaWdodCAoYykgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyMgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisjICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisjICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyMgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorIyAqCisjICogQ29udHJpYnV0b3JzOgorIyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorIyBUbyBjb2RlIGRldmVsb3BlcjoKKyMgICBEbyBOT1QgY2hhbmdlIHRoZSBwcm9wZXJ0aWVzIGJldHdlZW4gdGhpcyBsaW5lIGFuZCB0aGUKKyMgICAiJSUlIEVORCBPRiBUUkFOU0xBVEVEIFBST1BFUlRJRVMgJSUlIiBsaW5lLgorIyAgIE1ha2UgYSBuZXcgcHJvcGVydHkgbmFtZSwgYXBwZW5kIHRvIHRoZSBlbmQgb2YgdGhlIGZpbGUgYW5kIGNoYW5nZQorIyAgIHRoZSBjb2RlIHRvIHVzZSB0aGUgbmV3IHByb3BlcnR5LgorIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisjICUlJSBFTkQgT0YgVFJBTlNMQVRFRCBQUk9QRVJUSUVTICUlJQorIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitwbHVnaW5OYW1lPVNURU0gRXh0ZXJuZS1EYXRlbnF1ZWxsZS1LcmFua2hlaXRzbW9kZWxsCitwcm92aWRlck5hbWU9RWNsaXBzZS5vcmcKKworIyBEdWJsaW4gQ29yZQorZGNfY3JlYXRvcl9rYXVmbWFuPUthdWZtYW4KK2RjX2lkZW50aWVyPVNURU0gV2llZGVyZ2FiZSBLcmFua2hlaXRzbW9kZWxsCitkY19wdWJsaXNoZXI9RGllIEVjbGlwc2UgRm91bmRhdGlvbgorZGNfbGljZW5zZT1FY2xpcHNlIFB1YmxpYyBMaWNlbnNlIChFUEwpCitkY19TT1VSQ0U9S2VpbmUgUXVlbGxlLiBEaWVzIGlzdCBrZWluIE1vZGVsbC4gU3BpZWx0IEtyYW5raGVpdHNkYXRlbiBvZGVyIEF1c2dhYmUgdm9uIGFuZGVyZW4gTW9kZWxsZW4gYWIuCitkY19kZXNjX0VfU19TRUlSPURpZSBFeHRlcm5lLURhdGVucXVlbGxlLUtyYW5raGVpdHNtb2RlbGwgc3BpZWx0IGRpZSBLcmFua2hlaXRzZGF0ZW4gb2RlciBkaWUgQXVzZ2FiZSB2b24gYW5kZXJlbiBNb2RlbGxlbiBhYgorZGNfdGl0bGVfRV9TX1NFSVI9RXh0ZXJuZXMgRGF0ZW5xdWVsbGVuIFBsYXliYWNrCisKK19VSV9DcmVhdGVDaGlsZF90ZXh0PXswfQorX1VJX0NyZWF0ZUNoaWxkX3RleHQyPXsxfSB7MH0KK19VSV9DcmVhdGVDaGlsZF90ZXh0Mz17MX0KK19VSV9DcmVhdGVDaGlsZF90b29sdGlwPU5ldWVzIHswfSB1bnRlciB7MX0gRmVhdHVyZSBlcnN0ZWxsZW4KK19VSV9DcmVhdGVDaGlsZF9kZXNjcmlwdGlvbj1OZXVlcyBLaW5kIHZvbSBUeXAgezB9IGZcdTAwZmNyIGRhcyB7MX0gTWVya21hbCBkZXIgYXVzZ2V3XHUwMGU0aGx0ZW4gezJ9IGVyc3RlbGxlbgorX1VJX0NyZWF0ZVNpYmxpbmdfZGVzY3JpcHRpb249TmV1ZXMgR2VzY2h3aXN0ZXJ0ZWlsIHZvbSBUeXAgezB9IGZcdTAwZmNyIGRlbiBhdXNnZXdcdTAwZTRobHRlbiB7Mn0gdW50ZXIgZGVtIHsxfSBNZXJrbWFsIGRlcyBFbHRlcm50ZWlsIGVyc3RlbGxlbgorCitfVUlfUHJvcGVydHlEZXNjcmlwdG9yX2Rlc2NyaXB0aW9uPXswfSB2b24gezF9CisKK19VSV9FeHRlcm5hbERhdGFTb3VyY2VEaXNlYXNlTW9kZWxfdHlwZT1FeHRlcm4tRGF0ZW5xdWVsbGUtS3JhbmtoZWl0c21vZGVsbAorX1VJX1Vua25vd25fdHlwZT1PYmpla3QKKworX1VJX1Vua25vd25fZGF0YXR5cGU9V2VydAorCitfVUlfVW5rbm93bl9mZWF0dXJlPU5pY2h0IHNwZXppZml6aWVydAorCitfVUlfRXh0ZXJuYWxEYXRhU291cmNlRWRpdG9yX21lbnU9JkV4dGVybmFsRGF0YVNvdXJjZSBFZGl0b3IKKworX1VJX0NyZWF0ZUNoaWxkX21lbnVfaXRlbT0mTmV3IENoaWxkCitfVUlfQ3JlYXRlU2libGluZ19tZW51X2l0ZW09TiZldWVzIEdlc2Nod2lzdGVydGVpbAorCitfVUlfU2hvd1Byb3BlcnRpZXNWaWV3X21lbnVfaXRlbT1TaG93ICYgUHJvcGVydGllcyBWaWV3CitfVUlfUmVmcmVzaFZpZXdlcl9tZW51X2l0ZW09JlJlZnJlc2gKKworX1VJX1NlbGVjdGlvblBhZ2VfbGFiZWw9QXVzd2FobAorX1VJX1BhcmVudFBhZ2VfbGFiZWw9RWx0ZXJudGVpbAorX1VJX0xpc3RQYWdlX2xhYmVsPUxpc3RlCitfVUlfVHJlZVBhZ2VfbGFiZWw9QmF1bQorX1VJX1RhYmxlUGFnZV9sYWJlbD1UYWJlbGxlCitfVUlfVHJlZVdpdGhDb2x1bW5zUGFnZV9sYWJlbD1CYXVtIG1pdCBTcGFsdGVuCitfVUlfT2JqZWN0Q29sdW1uX2xhYmVsPU9iamVrdAorX1VJX1NlbGZDb2x1bW5fbGFiZWw9U2VsYnN0CisKK19VSV9Ob09iamVjdFNlbGVjdGVkPU5pY2h0cyBhdXNnZXdcdTAwZTRobHQKK19VSV9TaW5nbGVPYmplY3RTZWxlY3RlZD1BdXNnZXdcdTAwZTRobHRlcyBPYmpla3Q6IHswfQorX1VJX011bHRpT2JqZWN0U2VsZWN0ZWQ9QXVzZ2V3XHUwMGU0aGx0ZSB7MH0gT2JqZWt0ZQorCitfVUlfT3BlbkVkaXRvckVycm9yX2xhYmVsPUVkaXRvciBcdTAwZjZmZm5lbgorCitfVUlfV2l6YXJkX2NhdGVnb3J5PUJlaXNwaWVsIEVNRiBNb2RlbGwgRXJzdGVsbHVuZ3Nhc3Npc3RlbnQKKworX1VJX0NyZWF0ZU1vZGVsRXJyb3JfbWVzc2FnZT1BdWZnZXRyZXRlbmUgUHJvYmxlbWUgaW4gZGVyIERhdGVpICJ7MH0iCisKK19VSV9FeHRlcm5hbERhdGFTb3VyY2VNb2RlbFdpemFyZF9sYWJlbD1FeHRlcm4tRGF0ZW5xdWVsbGUtTW9kZWxsCitfVUlfRXh0ZXJuYWxEYXRhU291cmNlTW9kZWxXaXphcmRfZGVzY3JpcHRpb249TmV1ZXMgRXh0ZXJuYWxEYXRhU291cmNlLU1vZGVsbCBlcnN0ZWxsZW4KKworX1VJX0V4dGVybmFsRGF0YVNvdXJjZUVkaXRvcl9sYWJlbD1FeHRlcm4tRGF0ZW5xdWVsbGUtTW9kZWxsZWRpdG9yCisKK19VSV9FeHRlcm5hbERhdGFTb3VyY2VFZGl0b3JGaWxlbmFtZURlZmF1bHRCYXNlPU1laW4KK19VSV9FeHRlcm5hbERhdGFTb3VyY2VFZGl0b3JGaWxlbmFtZUV4dGVuc2lvbj1FeHRlcm5lIERhdGVucXVlbGxlCisKK19VSV9XaXphcmRfbGFiZWw9TmV1CisKK19XQVJOX0ZpbGVuYW1lRXh0ZW5zaW9uPURlciBEYXRlaW5hbWUgbXVzcyBhdWYgIi57MH0iIGVuZGVuCisKK19VSV9Nb2RlbE9iamVjdD0mTW9kZWwgT2JqZWN0CitfVUlfWE1MRW5jb2Rpbmc9JlhNTCBFbmNvZGluZworX1VJX1hNTEVuY29kaW5nQ2hvaWNlcz1VVEYtOCBBU0NJSSBVVEYtMTYgVVRGLTE2QkUgVVRGLTE2TEUgSVNPLTg4NTktMQorX1VJX1dpemFyZF9pbml0aWFsX29iamVjdF9kZXNjcmlwdGlvbj1adSBlcnpldWdlbmRlcyBNb2RlbGxvYmpla3Qgd1x1MDBlNGhsZW4KKworX1VJX0ZpbGVDb25mbGljdF9sYWJlbD1EYXRlaWtvbmZsaWt0CitfV0FSTl9GaWxlQ29uZmxpY3Q9RXMgZ2lidCBuaWNodCBnZXNwZWljaGVydGUgXHUwMGM0bmRlcnVuZ2VuLCBkaWUgS29uZmxpa3RlIG1pdCBcdTAwYzRuZGVydW5nZW4gYXVcdTAwZGZlcmhhbGIgZGVzIEVkaXRvcnMgZXJ6ZXVnZW4uIE1cdTAwZjZjaHRlbiBTaWUgZGllIFx1MDBjNG5kZXJ1bmdlbiBpbSBFZGl0b3IgdmVyd2VyZmVuPworCitfVUlfRXh0ZXJuYWxEYXRhU291cmNlRGlzZWFzZU1vZGVsX2RhdGFQYXRoX2ZlYXR1cmU9RGF0ZW5wZmFkCitfVUlfRXh0ZXJuYWxEYXRhU291cmNlRGlzZWFzZU1vZGVsX2Rpc2Vhc2VUeXBlX2ZlYXR1cmU9QXJ0IGRlciBLcmFua2hlaXQKK19VSV9FeHRlcm5hbERhdGFTb3VyY2VFZGl0b3JGaWxlbmFtZUV4dGVuc2lvbnM9RXh0ZXJuZSBEYXRlbnF1ZWxsZQorCitfV0FSTl9GaWxlbmFtZUV4dGVuc2lvbnM9RGVyIERhdGVpbmFtZSBtdXNzIGVpbmUgZGVyIGZvbGdlbmRlbiBFbmR1bmdlbiBoYWJlbjogezB9CisKZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4dGVybmFsZGF0YXNvdXJjZS9wbHVnaW5fa3IucHJvcGVydGllcyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4dGVybmFsZGF0YXNvdXJjZS9wbHVnaW5fa3IucHJvcGVydGllcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YzQ0MDIwCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXh0ZXJuYWxkYXRhc291cmNlL3BsdWdpbl9rci5wcm9wZXJ0aWVzCkBAIC0wLDAgKzEsMTA0IEBACisjLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyMgKiBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisjICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworIyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorIyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisjICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyMgKgorIyAqIENvbnRyaWJ1dG9yczoKKyMgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisjICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyMgVG8gY29kZSBkZXZlbG9wZXI6CisjICAgRG8gTk9UIGNoYW5nZSB0aGUgcHJvcGVydGllcyBiZXR3ZWVuIHRoaXMgbGluZSBhbmQgdGhlCisjICAgIiUlJSBFTkQgT0YgVFJBTlNMQVRFRCBQUk9QRVJUSUVTICUlJSIgbGluZS4KKyMgICBNYWtlIGEgbmV3IHByb3BlcnR5IG5hbWUsIGFwcGVuZCB0byB0aGUgZW5kIG9mIHRoZSBmaWxlIGFuZCBjaGFuZ2UKKyMgICB0aGUgY29kZSB0byB1c2UgdGhlIG5ldyBwcm9wZXJ0eS4KKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorIyAlJSUgRU5EIE9GIFRSQU5TTEFURUQgUFJPUEVSVElFUyAlJSUKKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworcGx1Z2luTmFtZT1TVEVNIFx1YzY3OFx1YmQ4MCBcdWIzNzBcdWM3NzRcdWQxMzAgXHVjNmQwXHViY2Y4IFx1YzljOFx1YmNkMSBcdWJhYThcdWIzNzgKK3Byb3ZpZGVyTmFtZT1FY2xpcHNlLm9yZworCisjIER1YmxpbiBDb3JlCitkY19jcmVhdG9yX2thdWZtYW49XHVjZTc0XHVkNTA0XHViOWU4CitkY19pZGVudGllcj1TVEVNIFx1YzdhY1x1YzBkZCBcdWM5YzhcdWJjZDEgXHViYWE4XHViMzc4CitkY19wdWJsaXNoZXI9XHVjNzc0XHVkMDc0XHViOWJkXHVjMmE0IFx1YzdhY1x1YjJlOAorZGNfbGljZW5zZT1cdWM3NzRcdWQwNzRcdWI5YmRcdWMyYTQgXHVhY2Y1XHVjNmE5IFx1YzBhY1x1YzZhOSBcdWQ1YzhcdWFjMDBcdWMxMWMgKEVQTCkKK2RjX1NPVVJDRT1cdWMxOGNcdWMyYTQgXHVjNWM2XHVjNzRjLiBcdWM3NzRcdWIyOTQgXHViYWE4XHViMzc4XHVjNzc0IFx1YzU0NFx1YjJkOC4gXHVjOWM4XHViY2QxIFx1YjM3MFx1Yzc3NFx1ZDEzMCBcdWI2MTBcdWIyOTQgXHViMmU0XHViOTc4IFx1YmFhOFx1YjM3OFx1Yzc1OCBcdWNkOWNcdWI4MjVcdWM3NDQgXHVjN2FjXHVjMGRkCitkY19kZXNjX0VfU19TRUlSPVx1YzY3OFx1YmQ4MCBcdWIzNzBcdWM3NzRcdWQxMzAgXHVjNmQwXHViY2Y4IFx1YzljOFx1YmNkMSBcdWJhYThcdWIzNzhcdWM3NDAgXHViMmU0XHVjMmRjIFx1YzljOFx1YmNkMSBcdWIzNzBcdWM3NzRcdWQxMzAgXHViNjEwXHViMjk0IFx1YjJlNFx1Yjk3OCBcdWJhYThcdWIzNzhcdWM3NTggXHVjZDljXHViODI1XHVjNzQ0IFx1YjJmNFx1YjJmOVx1ZDU2OAorZGNfdGl0bGVfRV9TX1NFSVI9XHVjNjc4XHViZDgwIFx1YjM3MFx1Yzc3NFx1ZDEzMCBcdWMxOGNcdWMyYTQgXHVjN2FjXHVjMGRkCisKK19VSV9DcmVhdGVDaGlsZF90ZXh0PXswfQorX1VJX0NyZWF0ZUNoaWxkX3RleHQyPXsxfSB7MH0KK19VSV9DcmVhdGVDaGlsZF90ZXh0Mz17MX0KK19VSV9DcmVhdGVDaGlsZF90b29sdGlwPXsxfSBcdWFlMzBcdWIyYTUgXHVkNTU4XHVjNWQwIFx1YzBjOCB7MH0gXHViOWNjXHViNGU0XHVhZTMwCitfVUlfQ3JlYXRlQ2hpbGRfZGVzY3JpcHRpb249XHVjMTIwXHVkMGRkXHVkNTVjIHsyfVx1Yzc1OCB7MX0gXHVhZTMwXHViMmE1XHVjNWQwIFx1YjMwMFx1ZDU1YyBcdWQ2MTVcdWMyZGQgezB9XHVjNzU4IFx1YzBjOFx1Yjg1Y1x1YzZiNCBDaGlsZFx1Yjk3YyBcdWI5Y2NcdWI0ZWRcdWIyYzhcdWIyZTQuCitfVUlfQ3JlYXRlU2libGluZ19kZXNjcmlwdGlvbj1cdWJkODBcdWJhYThcdWM3NTggXHVjMTIwXHVkMGRkXHViNDFjIHsyfVx1YzVkMFx1YzExYyB7MX0gXHVhZTMwXHViMmE1XHVjNWQwIFx1YjMwMFx1ZDU1YyBcdWQ2MTVcdWMyZGQgezB9XHVjNzU4IFx1YzBjOFx1Yjg1Y1x1YzZiNCBcdWQ2MTVcdWM4MWNcdWI5N2MgXHViOWNjXHViNGVkXHViMmM4XHViMmU0LgorCitfVUlfUHJvcGVydHlEZXNjcmlwdG9yX2Rlc2NyaXB0aW9uPXsxfSBcdWM5MTEgezB9CisKK19VSV9FeHRlcm5hbERhdGFTb3VyY2VEaXNlYXNlTW9kZWxfdHlwZT1cdWM5YzhcdWJjZDEgXHViYWE4XHViMzc4IFx1YzY3OFx1YmQ4MFx1YjM3MFx1Yzc3NFx1ZDEzMFx1YzE4Y1x1YzJhNAorX1VJX1Vua25vd25fdHlwZT1cdWFjMWNcdWNjYjQKKworX1VJX1Vua25vd25fZGF0YXR5cGU9XHVhYzEyCisKK19VSV9Vbmtub3duX2ZlYXR1cmU9XHVjOWMwXHVjODE1XHViNDE4XHVjOWMwIFx1YzU0YVx1Yzc0YworCitfVUlfRXh0ZXJuYWxEYXRhU291cmNlRWRpdG9yX21lbnU9JkV4dGVybmFsRGF0YVNvdXJjZSBFZGl0b3IKKworX1VJX0NyZWF0ZUNoaWxkX21lbnVfaXRlbT0mTmV3IENoaWxkCitfVUlfQ3JlYXRlU2libGluZ19tZW51X2l0ZW09TiYgIFx1ZDYxNVx1YzgxYyBcdWM3OTBcdWI5ZTQKKworX1VJX1Nob3dQcm9wZXJ0aWVzVmlld19tZW51X2l0ZW09XHVkNDVjXHVjMmRjIFx1YmMwZiBcdWMxOGRcdWMxMzFcdWJjZjRcdWFlMzAKK19VSV9SZWZyZXNoVmlld2VyX21lbnVfaXRlbT0mUmVmcmVzaAorCitfVUlfU2VsZWN0aW9uUGFnZV9sYWJlbD1cdWMxMjBcdWQwZGQKK19VSV9QYXJlbnRQYWdlX2xhYmVsPVx1YmQ4MFx1YmFhOAorX1VJX0xpc3RQYWdlX2xhYmVsPVx1YmFhOVx1Yjg1ZAorX1VJX1RyZWVQYWdlX2xhYmVsPVx1YjA5OFx1YmIzNAorX1VJX1RhYmxlUGFnZV9sYWJlbD1cdWQxNGNcdWM3NzRcdWJlMTQKK19VSV9UcmVlV2l0aENvbHVtbnNQYWdlX2xhYmVsPVx1YjA5OFx1YmIzNFx1YzY0MCBcdWM1ZjQKK19VSV9PYmplY3RDb2x1bW5fbGFiZWw9XHVhYzFjXHVjY2I0CitfVUlfU2VsZkNvbHVtbl9sYWJlbD1cdWMxNDBcdWQ1MDQKKworX1VJX05vT2JqZWN0U2VsZWN0ZWQ9XHVjNTQ0XHViYjM0XHVhYzgzXHViM2M0IFx1YzU0OCBcdWMxMjBcdWQwZGRcdWQ1NjgKK19VSV9TaW5nbGVPYmplY3RTZWxlY3RlZD1cdWMxMjBcdWQwZGRcdWQ1NWMgXHVhYzFkXHVjY2I0IDogezB9CitfVUlfTXVsdGlPYmplY3RTZWxlY3RlZD1cdWMxMjBcdWQwZGRcdWI0MWMgezB9IFx1YWMxZFx1Y2NiNAorCitfVUlfT3BlbkVkaXRvckVycm9yX2xhYmVsPVx1YzYyNFx1ZDUwOCBcdWM1ZDBcdWI1MTRcdWQxMzAKKworX1VJX1dpemFyZF9jYXRlZ29yeT1cdWM2MDhcdWM4MWMgRU1GIFx1YmFhOFx1YjM3OCBcdWMwZGRcdWMxMzEgXHViOWM4XHViYzk1XHVjMGFjCisKK19VSV9DcmVhdGVNb2RlbEVycm9yX21lc3NhZ2U9XHVkMzBjXHVjNzdjICd7MH0gIlx1YzVkMFx1YzExYyBcdWJiMzhcdWM4MWMgXHViYzFjXHVjMGRkCisKK19VSV9FeHRlcm5hbERhdGFTb3VyY2VNb2RlbFdpemFyZF9sYWJlbD1cdWJhYThcdWIzNzggXHVjNjc4XHViZDgwXHViMzcwXHVjNzc0XHVkMTMwXHVjMThjXHVjMmE0CitfVUlfRXh0ZXJuYWxEYXRhU291cmNlTW9kZWxXaXphcmRfZGVzY3JpcHRpb249XHVjMGM4XHViODVjXHVjNmI0IFx1YzY3OFx1YmQ4MFx1YjM3MFx1Yzc3NFx1ZDEzMFx1YzE4Y1x1YzJhNCBcdWJhYThcdWIzNzggXHViOWNjXHViNGU0XHVhZTMwCisKK19VSV9FeHRlcm5hbERhdGFTb3VyY2VFZGl0b3JfbGFiZWw9XHViYWE4XHViMzc4IFx1ZDNiOFx1YzlkMVx1YWUzMFx1Yjk3YyBcdWM2NzhcdWJkODBcdWIzNzBcdWM3NzRcdWQxMzBcdWMxOGNcdWMyYTQKKworX1VJX0V4dGVybmFsRGF0YVNvdXJjZUVkaXRvckZpbGVuYW1lRGVmYXVsdEJhc2U9XHViMDk4XHVjNzU4CitfVUlfRXh0ZXJuYWxEYXRhU291cmNlRWRpdG9yRmlsZW5hbWVFeHRlbnNpb249XHVjNjc4XHViZDgwXHViMzcwXHVjNzc0XHVkMTMwXHVjMThjXHVjMmE0CisKK19VSV9XaXphcmRfbGFiZWw9XHVjMGM4XHViODVjXHVjNmI0CisKK19XQVJOX0ZpbGVuYW1lRXh0ZW5zaW9uPVx1ZDMwY1x1Yzc3YyBcdWM3NzRcdWI5ODRcdWM3NDAgIi57MH0iXHViODVjIFx1YjA1ZFx1YjA5OFx1YzU3Y1x1ZDU2OC4gCisKK19VSV9Nb2RlbE9iamVjdD0mTW9kZWwgT2JqZWN0CitfVUlfWE1MRW5jb2Rpbmc9JlhNTCBFbmNvZGluZworX1VJX1hNTEVuY29kaW5nQ2hvaWNlcz1VVEYgLSA4IEFTQ0lJIFVURiAtIDE2IFVURiAtIDE2QkUgVVRGIC0gMTZMRSBJU08gLSA4ODU5IC0gMQorX1VJX1dpemFyZF9pbml0aWFsX29iamVjdF9kZXNjcmlwdGlvbj1cdWMwZGRcdWMxMzFcdWQ1NjAgXHViYWE4XHViMzc4IFx1YWMxY1x1Y2NiNCBcdWMxMjBcdWQwZGQKKworX1VJX0ZpbGVDb25mbGljdF9sYWJlbD1cdWQzMGNcdWM3N2MgXHVjZGE5XHViM2NjCitfV0FSTl9GaWxlQ29uZmxpY3Q9XHVjODAwXHVjN2E1XHViNDE4XHVjOWMwIFx1YzU0YVx1Yzc0MCBcdWMwYWNcdWQ1NmRcdWI0ZTRcdWM3NzQgXHVkM2I4XHVjOWQxXHVhZTMwIFx1YzY3OFx1YmQ4MFx1Yzc1OCBcdWJjYzBcdWFjYmQgXHVjMGFjXHVkNTZkXHViNGU0XHVhY2ZjIFx1Y2RhOVx1YjNjY1x1ZDU2OC4gXHVjNzc0IFx1ZDNiOFx1YzlkMVx1YWUzMFx1Yzc1OCBcdWJjYzBcdWFjYmQgXHVjMGFjXHVkNTZkXHViNGU0XHVjNzQ0IFx1Y2RlOFx1YzE4YyBcdWQ1NThcdWMyZGNcdWFjYTBcdWMyYjVcdWIyYzhcdWFlNGM/CisKK19VSV9FeHRlcm5hbERhdGFTb3VyY2VEaXNlYXNlTW9kZWxfZGF0YVBhdGhfZmVhdHVyZT1cdWIzNzBcdWM3NzRcdWQxMzAgXHVhY2JkXHViODVjCitfVUlfRXh0ZXJuYWxEYXRhU291cmNlRGlzZWFzZU1vZGVsX2Rpc2Vhc2VUeXBlX2ZlYXR1cmU9XHVjOWM4XHViY2QxIFx1YzcyMFx1ZDYxNQorX1VJX0V4dGVybmFsRGF0YVNvdXJjZUVkaXRvckZpbGVuYW1lRXh0ZW5zaW9ucz1cdWM2NzhcdWJkODBcdWIzNzBcdWM3NzRcdWQxMzBcdWMxOGNcdWMyYTQKKworX1dBUk5fRmlsZW5hbWVFeHRlbnNpb25zPVx1ZDMwY1x1Yzc3YyBcdWM3NzRcdWI5ODRcdWM3NDAgXHViMmU0XHVjNzRjIFx1ZDY1NVx1YzdhNVx1Yzc5MCBcdWM5MTEgXHVkNTU4XHViMDk4XHViOTdjIFx1YWMwMFx1YzgzOFx1YzU3Y1x1ZDU2OCA6IHswfQorCmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leHRlcm5hbGRhdGFzb3VyY2UvcGx1Z2luX3poLnByb3BlcnRpZXMgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leHRlcm5hbGRhdGFzb3VyY2UvcGx1Z2luX3poLnByb3BlcnRpZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGZiM2NlNgotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4dGVybmFsZGF0YXNvdXJjZS9wbHVnaW5femgucHJvcGVydGllcwpAQCAtMCwwICsxLDEwNCBAQAorIy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjICogQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorIyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyMgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyMgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorIyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisjICoKKyMgKiBDb250cmlidXRvcnM6CisjICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorIyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisjIFRvIGNvZGUgZGV2ZWxvcGVyOgorIyAgIERvIE5PVCBjaGFuZ2UgdGhlIHByb3BlcnRpZXMgYmV0d2VlbiB0aGlzIGxpbmUgYW5kIHRoZQorIyAgICIlJSUgRU5EIE9GIFRSQU5TTEFURUQgUFJPUEVSVElFUyAlJSUiIGxpbmUuCisjICAgTWFrZSBhIG5ldyBwcm9wZXJ0eSBuYW1lLCBhcHBlbmQgdG8gdGhlIGVuZCBvZiB0aGUgZmlsZSBhbmQgY2hhbmdlCisjICAgdGhlIGNvZGUgdG8gdXNlIHRoZSBuZXcgcHJvcGVydHkuCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyMgJSUlIEVORCBPRiBUUkFOU0xBVEVEIFBST1BFUlRJRVMgJSUlCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK3BsdWdpbk5hbWU9U1RFTVx1NTkxNlx1OTBlOFx1NjU3MFx1NjM2ZVx1NmU5MFx1NzViZVx1NzVjNVx1NmEyMVx1NTc4YgorcHJvdmlkZXJOYW1lPUVjbGlwc2Uub3JnCisKKyMgRHVibGluIENvcmUKK2RjX2NyZWF0b3Jfa2F1Zm1hbj1LYXVmbWFuCitkY19pZGVudGllcj1TVEVNXHU3NWJlXHU3NWM1XHU1NmRlXHU2NTNlXHU2YTIxXHU1NzhiCitkY19wdWJsaXNoZXI9RWNsaXBzZVx1NTdmYVx1OTFkMVx1NGYxYQorZGNfbGljZW5zZT1FY2xpcHNlXHU1MTZjXHU1MTcxXHU4YmI4XHU1M2VmXHVmZjA4RVBMXHVmZjA5CitkY19TT1VSQ0U9XHU2Y2ExXHU2NzA5XHU2NzY1XHU2ZTkwXHUzMDAyXHU4ZmQ5XHU0ZTBkXHU2NjJmXHU0ZTAwXHU0ZTJhXHU2YTIxXHU1NzhiXHUzMDAyXHU0ZWU1XHU1MjRkXHU3NWJlXHU3NWM1XHU3Njg0XHU2NTcwXHU2MzZlXHU2MjE2XHU1MTc2XHU0ZWQ2XHU2YTIxXHU1NzhiXHU3Njg0XHU4ZjkzXHU1MWZhCitkY19kZXNjX0VfU19TRUlSPVx1NTkxNlx1OTBlOFx1NjU3MFx1NjM2ZVx1NmU5MFx1NzViZVx1NzVjNVx1NmEyMVx1NTc4Ylx1NTZkZVx1NjUzZVx1NzViZVx1NzVjNVx1NjU3MFx1NjM2ZVx1NjIxNlx1ODAwNVx1NTE3Nlx1NGVkNlx1NmEyMVx1NTc4Ylx1NzY4NFx1OGY5M1x1NTFmYQorZGNfdGl0bGVfRV9TX1NFSVI9XHU1OTE2XHU5MGU4XHU2NTcwXHU2MzZlXHU2ZTkwXHU2NGFkXHU2NTNlCisKK19VSV9DcmVhdGVDaGlsZF90ZXh0PXswfQorX1VJX0NyZWF0ZUNoaWxkX3RleHQyPXsxfSB7MH0KK19VSV9DcmVhdGVDaGlsZF90ZXh0Mz17MX0KK19VSV9DcmVhdGVDaGlsZF90b29sdGlwPVx1NTIxYlx1NWVmYVx1NTcyOHsxfSB7MH1cdTY1YjBcdTUyOWZcdTgwZmQKK19VSV9DcmVhdGVDaGlsZF9kZXNjcmlwdGlvbj1cdTRlM2FcdTkwMDlcdTViOWFcdTc2ODR7Mn1cdTc2ODR7MX1cdTcyNzlcdTYwMjdcdTY3NjVcdTUyMWJcdTVlZmFcdTRlMDBcdTRlMmFcdTY1YjBcdTc2ODR7MH1cdTViNTBcdTdjN2IKK19VSV9DcmVhdGVTaWJsaW5nX2Rlc2NyaXB0aW9uPVx1NTcyOHsxfVx1NzY4NFx1NzIzNlx1OTZjNlx1NGUyZFx1NGUzYVx1OTAwOVx1NWI5YVx1NzY4NHsyfVx1Njc2NVx1NTIxYlx1NWVmYVx1NGUwMFx1NGUyYXswfVx1N2M3Ylx1NTc4Ylx1NzY4NFx1NjViMFx1NzY4NFx1NTE0NFx1NWYxZlx1N2M3YgorCitfVUlfUHJvcGVydHlEZXNjcmlwdG9yX2Rlc2NyaXB0aW9uPXswfVx1NGVjZVx1NWM1ZXsxfQorCitfVUlfRXh0ZXJuYWxEYXRhU291cmNlRGlzZWFzZU1vZGVsX3R5cGU9XHU1OTE2XHU5MGU4XHU2NTcwXHU2MzZlXHU2ZTkwXHU3NWJlXHU3NWM1XHU2YTIxXHU1NzhiCitfVUlfVW5rbm93bl90eXBlPVx1NWJmOVx1OGM2MQorCitfVUlfVW5rbm93bl9kYXRhdHlwZT1cdTRlZjdcdTUwM2MKKworX1VJX1Vua25vd25fZmVhdHVyZT1cdTY3MmFcdTYzMDdcdTViOWEKKworX1VJX0V4dGVybmFsRGF0YVNvdXJjZUVkaXRvcl9tZW51PSZFeHRlcm5hbERhdGFTb3VyY2UgRWRpdG9yCisKK19VSV9DcmVhdGVDaGlsZF9tZW51X2l0ZW09Jk5ldyBDaGlsZAorX1VJX0NyZWF0ZVNpYmxpbmdfbWVudV9pdGVtPVx1NjViMFx1NzUxZlx1NjIxMFx1NGUwMFx1NGUyYVx1NTE0NFx1NWYxZlx1N2M3YgorCitfVUlfU2hvd1Byb3BlcnRpZXNWaWV3X21lbnVfaXRlbT1cdTY2M2VcdTc5M2FcdTU0OGNcdTVjNWVcdTYwMjdcdTY3ZTVcdTc3MGIKK19VSV9SZWZyZXNoVmlld2VyX21lbnVfaXRlbT0mUmVmcmVzaAorCitfVUlfU2VsZWN0aW9uUGFnZV9sYWJlbD1cdTkwMDlcdTYyZTkKK19VSV9QYXJlbnRQYWdlX2xhYmVsPVx1NWJiNlx1OTU3ZgorX1VJX0xpc3RQYWdlX2xhYmVsPVx1NzZlZVx1NWY1NQorX1VJX1RyZWVQYWdlX2xhYmVsPVx1NjgxMQorX1VJX1RhYmxlUGFnZV9sYWJlbD1cdTg4NjgKK19VSV9UcmVlV2l0aENvbHVtbnNQYWdlX2xhYmVsPVx1NTIwNlx1NTIxN1x1NzY4NFx1NjgxMQorX1VJX09iamVjdENvbHVtbl9sYWJlbD1cdTViZjlcdThjNjEKK19VSV9TZWxmQ29sdW1uX2xhYmVsPVx1ODFlYVx1NWRmMQorCitfVUlfTm9PYmplY3RTZWxlY3RlZD1cdTY1ZTBcdTkwMDlcdTViOWFcdTUxODVcdTViYjkKK19VSV9TaW5nbGVPYmplY3RTZWxlY3RlZD1cdTkwMDlcdTYyZTlcdTViZjlcdThjNjFcdWZmMWF7MH0KK19VSV9NdWx0aU9iamVjdFNlbGVjdGVkPVx1OTAwOVx1NjJlOXswfVx1NWJmOVx1OGM2MQorCitfVUlfT3BlbkVkaXRvckVycm9yX2xhYmVsPVx1NjI1M1x1NWYwMFx1N2YxNlx1OGY5MVx1NTY2OAorCitfVUlfV2l6YXJkX2NhdGVnb3J5PVx1NGY4Ylx1NTk4MkVNRlx1NmEyMVx1NTc4Ylx1NTIxYlx1NWVmYVx1NTQxMVx1NWJmYworCitfVUlfQ3JlYXRlTW9kZWxFcnJvcl9tZXNzYWdlPVx1NTcyOFx1NjU4N1x1NGVmNlx1MjAxY3swfVx1MjAxZFx1NGUyZFx1OTA0N1x1NTIzMFx1NzY4NFx1OTVlZVx1OTg5OAorCitfVUlfRXh0ZXJuYWxEYXRhU291cmNlTW9kZWxXaXphcmRfbGFiZWw9XHU1OTE2XHU5MGU4XHU2NTcwXHU2MzZlXHU2ZTkwXHU2YTIxXHU1NzhiCitfVUlfRXh0ZXJuYWxEYXRhU291cmNlTW9kZWxXaXphcmRfZGVzY3JpcHRpb249XHU1MjFiXHU1ZWZhXHU0ZTAwXHU0ZTJhXHU2NWIwXHU3Njg0XHU1OTE2XHU5MGU4XHU2NTcwXHU2MzZlXHU2ZTkwXHU2YTIxXHU1NzhiCisKK19VSV9FeHRlcm5hbERhdGFTb3VyY2VFZGl0b3JfbGFiZWw9XHU1OTE2XHU5MGU4XHU2NTcwXHU2MzZlXHU2ZTkwXHU2YTIxXHU1NzhiXHU3ZjE2XHU4ZjkxXHU1NjY4CisKK19VSV9FeHRlcm5hbERhdGFTb3VyY2VFZGl0b3JGaWxlbmFtZURlZmF1bHRCYXNlPVx1NjIxMVx1NzY4NAorX1VJX0V4dGVybmFsRGF0YVNvdXJjZUVkaXRvckZpbGVuYW1lRXh0ZW5zaW9uPVx1NTkxNlx1OTBlOFx1NjU3MFx1NjM2ZVx1NmU5MAorCitfVUlfV2l6YXJkX2xhYmVsPVx1NjViMFx1NWVmYQorCitfV0FSTl9GaWxlbmFtZUV4dGVuc2lvbj1cdTY1ODdcdTRlZjZcdTU0MGRcdTVmYzVcdTk4N2JcdTRlZTUnezB9ICcnXHU3ZWQzXHU1YzNlCisKK19VSV9Nb2RlbE9iamVjdD0mTW9kZWwgT2JqZWN0CitfVUlfWE1MRW5jb2Rpbmc9JlhNTCBFbmNvZGluZworX1VJX1hNTEVuY29kaW5nQ2hvaWNlcz1VVEYtOCBBU0NJSSBVVEYtMTYgVVRGLTE2QkUgVVRGLTE2TEUgSVNPLTg4NTktMQorX1VJX1dpemFyZF9pbml0aWFsX29iamVjdF9kZXNjcmlwdGlvbj1cdTkwMDlcdTYyZTlcdTUyMWJcdTVlZmFcdTRlMDBcdTRlMmFcdTZhMjFcdTU3OGJcdTViZjlcdThjNjEKKworX1VJX0ZpbGVDb25mbGljdF9sYWJlbD1cdTY1ODdcdTRlZjZcdTUxYjJcdTdhODEKK19XQVJOX0ZpbGVDb25mbGljdD1cdTY3MDlcdTY3MmFcdTRmZGRcdTViNThcdTc2ODRcdTY2ZjRcdTY1MzlcdTRlMGVcdTdmMTZcdThmOTFcdTU2NjhcdTU5MTZcdTc2ODRcdTY2ZjRcdTY1MzlcdTUxYjJcdTdhODFcdTMwMDJcdTRmNjBcdTYwZjNcdTY1M2VcdTVmMDNcdThmZDlcdTRlMmFcdTdmMTZcdThmOTFcdTU2NjhcdTc2ODRcdTY2ZjRcdTY1MzlcdTU0MTdcdWZmMWYKKworX1VJX0V4dGVybmFsRGF0YVNvdXJjZURpc2Vhc2VNb2RlbF9kYXRhUGF0aF9mZWF0dXJlPVx1NjU3MFx1NjM2ZVx1OGRlZlx1NWY4NAorX1VJX0V4dGVybmFsRGF0YVNvdXJjZURpc2Vhc2VNb2RlbF9kaXNlYXNlVHlwZV9mZWF0dXJlPVx1NzViZVx1NzVjNVx1NzljZFx1N2M3YgorX1VJX0V4dGVybmFsRGF0YVNvdXJjZUVkaXRvckZpbGVuYW1lRXh0ZW5zaW9ucz1cdTU5MTZcdTkwZThcdTY1NzBcdTYzNmVcdTZlOTAKKworX1dBUk5fRmlsZW5hbWVFeHRlbnNpb25zPVx1NjU4N1x1NGVmNlx1NTQwZFx1NWZjNVx1OTg3Ylx1NTE3N1x1NjcwOVx1NGVlNVx1NGUwYlx1NjI2OVx1NWM1NVx1NTQwZFx1NGU0Ylx1NGUwMFx1ZmYxYXswfQorCmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leHRlcm5hbGRhdGFzb3VyY2Uvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9leHRlcm5hbGRhdGFzb3VyY2UvRXh0ZXJuYWxEYXRhU291cmNlRGlzZWFzZU1vZGVsLmphdmEgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leHRlcm5hbGRhdGFzb3VyY2Uvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9leHRlcm5hbGRhdGFzb3VyY2UvRXh0ZXJuYWxEYXRhU291cmNlRGlzZWFzZU1vZGVsLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjViMGFhOQotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4dGVybmFsZGF0YXNvdXJjZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL2V4dGVybmFsZGF0YXNvdXJjZS9FeHRlcm5hbERhdGFTb3VyY2VEaXNlYXNlTW9kZWwuamF2YQpAQCAtMCwwICsxLDEyNSBAQAorLy8gRXh0ZXJuYWxEYXRhU291cmNlRGlzZWFzZU1vZGVsLmphdmENCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leHRlcm5hbGRhdGFzb3VyY2U7DQorDQorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisgKiBDb3B5cmlnaHQgKGMpIDIwMDcsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuDQorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscw0KKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMA0KKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0DQorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwNCisgKg0KKyAqIENvbnRyaWJ1dG9yczoNCisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uDQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQorDQorDQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZERpc2Vhc2VNb2RlbDsNCitpbXBvcnQgamF2YS5pby5GaWxlOw0KKw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVBhdGg7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5BY3RpdmF0b3I7DQorDQorLyoqDQorICogVGhpcyBpbnRlcmZhY2UgaXMgYW4gRU1GIE1vZGVsLg0KKyAqIA0KKyAqIEBtb2RlbA0KKyAqLw0KK3B1YmxpYyBpbnRlcmZhY2UgRXh0ZXJuYWxEYXRhU291cmNlRGlzZWFzZU1vZGVsIGV4dGVuZHMgU3RhbmRhcmREaXNlYXNlTW9kZWwgew0KKw0KKw0KKwkvKioNCisgICAgICogZGVmYXVsdCB0eXBlIG9mIGRhdGEgdG8gaW5wdXQNCisgICAgICovDQorCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIElNUE9SVF9UWVBFX1NJID0gIlNJIjsNCisJLyoqDQorICAgICAqIGRlZmF1bHQgdHlwZSBvZiBkYXRhIHRvIGlucHV0DQorICAgICAqLw0KKwlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBJTVBPUlRfVFlQRV9TSVIgPSAiU0lSIjsNCisJLyoqDQorICAgICAqIGRlZmF1bHQgdHlwZSBvZiBkYXRhIHRvIGlucHV0DQorICAgICAqLw0KKwlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBJTVBPUlRfVFlQRV9TRUlSID0gIlNFSVIiOw0KKwkNCisJLyoqDQorCSAqIFRoaXMgaXMgdGhlIERlZmF1bHQgUk9PVCBmb2xkZXIgZm9yIEltcG9ydCBmaWxlcy4NCisJICogVGhlIFVzZXIgY2FuIGNoYW5nZSB0aGlzIGJ1dCBieSBkZWZhdWx0LCBhbmQgZm9yIHRlc3RpbmcsDQorCSAqIGRhdGEgd2lsbCBiZSBpbiBzdWItZm9sZGVycyBvZiB0aGUgZGlzZWFzZSBtb2RlbCBwbHVnLWluIHJ1bnRpbWUgcHJlZmVyZW5jZXMNCisJICovDQorCXB1YmxpYyBzdGF0aWMgZmluYWwgSVBhdGggUEFUSCA9IEFjdGl2YXRvci5nZXREZWZhdWx0KCkuZ2V0U3RhdGVMb2NhdGlvbigpOw0KKw0KKwkvKioNCisJICogcGF0aCBzZXBhcmF0b3INCisJICovDQorCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIHNlcCA9IEZpbGUuc2VwYXJhdG9yOw0KKwkNCisJLyoqDQorCSAqIFRoaXMgaXMgdGhlIERlZmF1bHQgZm9sZGVyIGZvciBJbXBvcnQgZmlsZXMuDQorCSAqIFRoZSBVc2VyIGNhbiBjaGFuZ2UgdGhpcyBidXQgYnkgZGVmYXVsdCwgYW5kIGZvciB0ZXN0aW5nLA0KKwkgKiBkYXRhIHdpbGwgYmUgaW4gc3ViLWZvbGRlcnMgb2YgdGhlIGRpc2Vhc2UgbW9kZWwgcGx1Zy1pbiBydW50aW1lIHByZWZlcmVuY2VzDQorCSAqLw0KKwlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBQTEFZQkFDS19TVUJESVIgPSBzZXArImNzdiIrc2VwKyJJbXBvcnQiOw0KKwkNCisJLyoqDQorCSAqIFRoaXMgaXMgdGhlIERlZmF1bHQgZGlyZWN0b3J5IGZvciBJbXBvcnQgZmlsZXMuDQorCSAqIFRoZSBVc2VyIGNhbiBjaGFuZ2UgdGhpcyBidXQgYnkgZGVmYXVsdCwgYW5kIGZvciB0ZXN0aW5nLA0KKwkgKiBkYXRhIHdpbGwgYmUgaW4gc3ViLWZvbGRlcnMgb2YgdGhlIGRpc2Vhc2UgbW9kZWwgcGx1Zy1pbiBydW50aW1lIHByZWZlcmVuY2VzDQorCSAqLwkNCisJcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgREVGQVVMVF9ESVIgPSBQQVRILnRvT1NTdHJpbmcoKSArIFBMQVlCQUNLX1NVQkRJUitzZXA7DQorCQ0KKwkvKioNCisJICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+RGF0YSBQYXRoPC9iPjwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDxwPg0KKwkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5EYXRhIFBhdGg8L2VtPicgYXR0cmlidXRlIGlzbid0IGNsZWFyLA0KKwkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uDQorCSAqIDwvcD4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPkRhdGEgUGF0aDwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIEBzZWUgI3NldERhdGFQYXRoKFN0cmluZykNCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXh0ZXJuYWxkYXRhc291cmNlLkV4dGVybmFsRGF0YVNvdXJjZVBhY2thZ2UjZ2V0RXh0ZXJuYWxEYXRhU291cmNlRGlzZWFzZU1vZGVsX0RhdGFQYXRoKCkNCisJICogQG1vZGVsDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCVN0cmluZyBnZXREYXRhUGF0aCgpOw0KKw0KKwkvKioNCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4dGVybmFsZGF0YXNvdXJjZS5FeHRlcm5hbERhdGFTb3VyY2VEaXNlYXNlTW9kZWwjZ2V0RGF0YVBhdGggPGVtPkRhdGEgUGF0aDwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+RGF0YSBQYXRoPC9lbT4nIGF0dHJpYnV0ZS4NCisJICogQHNlZSAjZ2V0RGF0YVBhdGgoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwl2b2lkIHNldERhdGFQYXRoKFN0cmluZyB2YWx1ZSk7DQorDQorCS8qKg0KKwkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5EaXNlYXNlIFR5cGU8L2I+PC9lbT4nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPHA+DQorCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPkRpc2Vhc2UgVHlwZTwvZW0+JyBhdHRyaWJ1dGUgaXNuJ3QgY2xlYXIsDQorCSAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4NCisJICogPC9wPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+RGlzZWFzZSBUeXBlPC9lbT4nIGF0dHJpYnV0ZS4NCisJICogQHNlZSAjc2V0RGlzZWFzZVR5cGUoU3RyaW5nKQ0KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leHRlcm5hbGRhdGFzb3VyY2UuRXh0ZXJuYWxEYXRhU291cmNlUGFja2FnZSNnZXRFeHRlcm5hbERhdGFTb3VyY2VEaXNlYXNlTW9kZWxfRGlzZWFzZVR5cGUoKQ0KKwkgKiBAbW9kZWwNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJU3RyaW5nIGdldERpc2Vhc2VUeXBlKCk7DQorDQorCS8qKg0KKwkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXh0ZXJuYWxkYXRhc291cmNlLkV4dGVybmFsRGF0YVNvdXJjZURpc2Vhc2VNb2RlbCNnZXREaXNlYXNlVHlwZSA8ZW0+RGlzZWFzZSBUeXBlPC9lbT59JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5EaXNlYXNlIFR5cGU8L2VtPicgYXR0cmlidXRlLg0KKwkgKiBAc2VlICNnZXREaXNlYXNlVHlwZSgpDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXZvaWQgc2V0RGlzZWFzZVR5cGUoU3RyaW5nIHZhbHVlKTsJDQorDQorCQ0KKwkNCisJDQorCQ0KK30gLy8gRXh0ZXJuYWxEYXRhU291cmNlRGlzZWFzZU1vZGVsDQpkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXh0ZXJuYWxkYXRhc291cmNlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvZXh0ZXJuYWxkYXRhc291cmNlL0V4dGVybmFsRGF0YVNvdXJjZUZhY3RvcnkuamF2YSBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4dGVybmFsZGF0YXNvdXJjZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL2V4dGVybmFsZGF0YXNvdXJjZS9FeHRlcm5hbERhdGFTb3VyY2VGYWN0b3J5LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjM4NWFhYwotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4dGVybmFsZGF0YXNvdXJjZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL2V4dGVybmFsZGF0YXNvdXJjZS9FeHRlcm5hbERhdGFTb3VyY2VGYWN0b3J5LmphdmEKQEAgLTAsMCArMSw1MiBAQAorLy8gRXh0ZXJuYWxEYXRhU291cmNlRmFjdG9yeQorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXh0ZXJuYWxkYXRhc291cmNlOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA3LCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FRmFjdG9yeTsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogVGhlIDxiPkZhY3Rvcnk8L2I+IGZvciB0aGUgbW9kZWwuCisgKiBJdCBwcm92aWRlcyBhIGNyZWF0ZSBtZXRob2QgZm9yIGVhY2ggbm9uLWFic3RyYWN0IGNsYXNzIG9mIHRoZSBtb2RlbC4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXh0ZXJuYWxkYXRhc291cmNlLkV4dGVybmFsRGF0YVNvdXJjZVBhY2thZ2UKKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGludGVyZmFjZSBFeHRlcm5hbERhdGFTb3VyY2VGYWN0b3J5IGV4dGVuZHMgRUZhY3RvcnkgeworCS8qKgorCSAqIFRoZSBzaW5nbGV0b24gaW5zdGFuY2Ugb2YgdGhlIGZhY3RvcnkuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRXh0ZXJuYWxEYXRhU291cmNlRmFjdG9yeSBlSU5TVEFOQ0UgPSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXh0ZXJuYWxkYXRhc291cmNlLmltcGwuRXh0ZXJuYWxEYXRhU291cmNlRmFjdG9yeUltcGwuaW5pdCgpOworCisJLyoqCisJICogUmV0dXJucyBhIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5EaXNlYXNlIE1vZGVsPC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiBhIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5EaXNlYXNlIE1vZGVsPC9lbT4nLgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFeHRlcm5hbERhdGFTb3VyY2VEaXNlYXNlTW9kZWwgY3JlYXRlRXh0ZXJuYWxEYXRhU291cmNlRGlzZWFzZU1vZGVsKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBwYWNrYWdlIHN1cHBvcnRlZCBieSB0aGlzIGZhY3RvcnkuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBwYWNrYWdlIHN1cHBvcnRlZCBieSB0aGlzIGZhY3RvcnkuCisJICogQGdlbmVyYXRlZAorCSAqLworCUV4dGVybmFsRGF0YVNvdXJjZVBhY2thZ2UgZ2V0RXh0ZXJuYWxEYXRhU291cmNlUGFja2FnZSgpOworCit9IC8vRXh0ZXJuYWxEYXRhU291cmNlRmFjdG9yeQpkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXh0ZXJuYWxkYXRhc291cmNlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvZXh0ZXJuYWxkYXRhc291cmNlL0V4dGVybmFsRGF0YVNvdXJjZVBhY2thZ2UuamF2YSBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4dGVybmFsZGF0YXNvdXJjZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL2V4dGVybmFsZGF0YXNvdXJjZS9FeHRlcm5hbERhdGFTb3VyY2VQYWNrYWdlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGM4NDE3MQotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4dGVybmFsZGF0YXNvdXJjZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL2V4dGVybmFsZGF0YXNvdXJjZS9FeHRlcm5hbERhdGFTb3VyY2VQYWNrYWdlLmphdmEKQEAgLTAsMCArMSwzMzIgQEAKKy8vIEV4dGVybmFsRGF0YVNvdXJjZVBhY2thZ2UgCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leHRlcm5hbGRhdGFzb3VyY2U7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDcsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVBdHRyaWJ1dGU7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzczsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRVBhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkUGFja2FnZTsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogVGhlIDxiPlBhY2thZ2U8L2I+IGZvciB0aGUgbW9kZWwuCisgKiBJdCBjb250YWlucyBhY2Nlc3NvcnMgZm9yIHRoZSBtZXRhIG9iamVjdHMgdG8gcmVwcmVzZW50CisgKiA8dWw+CisgKiAgIDxsaT5lYWNoIGNsYXNzLDwvbGk+CisgKiAgIDxsaT5lYWNoIGZlYXR1cmUgb2YgZWFjaCBjbGFzcyw8L2xpPgorICogICA8bGk+ZWFjaCBlbnVtLDwvbGk+CisgKiAgIDxsaT5hbmQgZWFjaCBkYXRhIHR5cGU8L2xpPgorICogPC91bD4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXh0ZXJuYWxkYXRhc291cmNlLkV4dGVybmFsRGF0YVNvdXJjZUZhY3RvcnkKKyAqIEBtb2RlbCBraW5kPSJwYWNrYWdlIgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgaW50ZXJmYWNlIEV4dGVybmFsRGF0YVNvdXJjZVBhY2thZ2UgZXh0ZW5kcyBFUGFja2FnZSB7CisJLyoqCisJICogVGhlIHBhY2thZ2UgbmFtZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlTdHJpbmcgZU5BTUUgPSAiZXh0ZXJuYWxkYXRhc291cmNlIjsKKworCS8qKgorCSAqIFRoZSBwYWNrYWdlIG5hbWVzcGFjZSBVUkkuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJU3RyaW5nIGVOU19VUkkgPSAiaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvZXh0ZXJuYWxkYXRhc291cmNlLmVjb3JlIjsKKworCS8qKgorCSAqIFRoZSBwYWNrYWdlIG5hbWVzcGFjZSBuYW1lLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCVN0cmluZyBlTlNfUFJFRklYID0gIm9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leHRlcm5hbGRhdGFzb3VyY2UiOworCisJLyoqCisJICogVGhlIHNpbmdsZXRvbiBpbnN0YW5jZSBvZiB0aGUgcGFja2FnZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFeHRlcm5hbERhdGFTb3VyY2VQYWNrYWdlIGVJTlNUQU5DRSA9IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leHRlcm5hbGRhdGFzb3VyY2UuaW1wbC5FeHRlcm5hbERhdGFTb3VyY2VQYWNrYWdlSW1wbC5pbml0KCk7CisKKwkvKioKKwkgKiBUaGUgbWV0YSBvYmplY3QgaWQgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leHRlcm5hbGRhdGFzb3VyY2UuaW1wbC5FeHRlcm5hbERhdGFTb3VyY2VEaXNlYXNlTW9kZWxJbXBsIDxlbT5EaXNlYXNlIE1vZGVsPC9lbT59JyBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4dGVybmFsZGF0YXNvdXJjZS5pbXBsLkV4dGVybmFsRGF0YVNvdXJjZURpc2Vhc2VNb2RlbEltcGwKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leHRlcm5hbGRhdGFzb3VyY2UuaW1wbC5FeHRlcm5hbERhdGFTb3VyY2VQYWNrYWdlSW1wbCNnZXRFeHRlcm5hbERhdGFTb3VyY2VEaXNlYXNlTW9kZWwoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlpbnQgRVhURVJOQUxfREFUQV9TT1VSQ0VfRElTRUFTRV9NT0RFTCA9IDA7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VVJJPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgRVhURVJOQUxfREFUQV9TT1VSQ0VfRElTRUFTRV9NT0RFTF9fVVJJID0gU3RhbmRhcmRQYWNrYWdlLlNUQU5EQVJEX0RJU0VBU0VfTU9ERUxfX1VSSTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5UeXBlIFVSSTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IEVYVEVSTkFMX0RBVEFfU09VUkNFX0RJU0VBU0VfTU9ERUxfX1RZUEVfVVJJID0gU3RhbmRhcmRQYWNrYWdlLlNUQU5EQVJEX0RJU0VBU0VfTU9ERUxfX1RZUEVfVVJJOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkR1YmxpbiBDb3JlPC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgRVhURVJOQUxfREFUQV9TT1VSQ0VfRElTRUFTRV9NT0RFTF9fRFVCTElOX0NPUkUgPSBTdGFuZGFyZFBhY2thZ2UuU1RBTkRBUkRfRElTRUFTRV9NT0RFTF9fRFVCTElOX0NPUkU7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+TGFiZWxzIFRvIFVwZGF0ZTwvYj48L2VtPicgcmVmZXJlbmNlIGxpc3QuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgRVhURVJOQUxfREFUQV9TT1VSQ0VfRElTRUFTRV9NT0RFTF9fTEFCRUxTX1RPX1VQREFURSA9IFN0YW5kYXJkUGFja2FnZS5TVEFOREFSRF9ESVNFQVNFX01PREVMX19MQUJFTFNfVE9fVVBEQVRFOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkdyYXBoPC9iPjwvZW0+JyBjb250YWluZXIgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IEVYVEVSTkFMX0RBVEFfU09VUkNFX0RJU0VBU0VfTU9ERUxfX0dSQVBIID0gU3RhbmRhcmRQYWNrYWdlLlNUQU5EQVJEX0RJU0VBU0VfTU9ERUxfX0dSQVBIOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkVuYWJsZWQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBFWFRFUk5BTF9EQVRBX1NPVVJDRV9ESVNFQVNFX01PREVMX19FTkFCTEVEID0gU3RhbmRhcmRQYWNrYWdlLlNUQU5EQVJEX0RJU0VBU0VfTU9ERUxfX0VOQUJMRUQ7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+R3JhcGggRGVjb3JhdGVkPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgRVhURVJOQUxfREFUQV9TT1VSQ0VfRElTRUFTRV9NT0RFTF9fR1JBUEhfREVDT1JBVEVEID0gU3RhbmRhcmRQYWNrYWdlLlNUQU5EQVJEX0RJU0VBU0VfTU9ERUxfX0dSQVBIX0RFQ09SQVRFRDsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5Qcm9ncmVzczwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IEVYVEVSTkFMX0RBVEFfU09VUkNFX0RJU0VBU0VfTU9ERUxfX1BST0dSRVNTID0gU3RhbmRhcmRQYWNrYWdlLlNUQU5EQVJEX0RJU0VBU0VfTU9ERUxfX1BST0dSRVNTOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlBvcHVsYXRpb24gSWRlbnRpZmllcjwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IEVYVEVSTkFMX0RBVEFfU09VUkNFX0RJU0VBU0VfTU9ERUxfX1BPUFVMQVRJT05fSURFTlRJRklFUiA9IFN0YW5kYXJkUGFja2FnZS5TVEFOREFSRF9ESVNFQVNFX01PREVMX19QT1BVTEFUSU9OX0lERU5USUZJRVI7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VGltZSBQZXJpb2Q8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBFWFRFUk5BTF9EQVRBX1NPVVJDRV9ESVNFQVNFX01PREVMX19USU1FX1BFUklPRCA9IFN0YW5kYXJkUGFja2FnZS5TVEFOREFSRF9ESVNFQVNFX01PREVMX19USU1FX1BFUklPRDsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5EaXNlYXNlIE5hbWU8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBFWFRFUk5BTF9EQVRBX1NPVVJDRV9ESVNFQVNFX01PREVMX19ESVNFQVNFX05BTUUgPSBTdGFuZGFyZFBhY2thZ2UuU1RBTkRBUkRfRElTRUFTRV9NT0RFTF9fRElTRUFTRV9OQU1FOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkZpbml0ZSBEaWZmZXJlbmNlPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgRVhURVJOQUxfREFUQV9TT1VSQ0VfRElTRUFTRV9NT0RFTF9fRklOSVRFX0RJRkZFUkVOQ0UgPSBTdGFuZGFyZFBhY2thZ2UuU1RBTkRBUkRfRElTRUFTRV9NT0RFTF9fRklOSVRFX0RJRkZFUkVOQ0U7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RnJlcXVlbmN5IERlcGVuZGVudDwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IEVYVEVSTkFMX0RBVEFfU09VUkNFX0RJU0VBU0VfTU9ERUxfX0ZSRVFVRU5DWV9ERVBFTkRFTlQgPSBTdGFuZGFyZFBhY2thZ2UuU1RBTkRBUkRfRElTRUFTRV9NT0RFTF9fRlJFUVVFTkNZX0RFUEVOREVOVDsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5SZWZlcmVuY2UgUG9wdWxhdGlvbiBEZW5zaXR5PC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgRVhURVJOQUxfREFUQV9TT1VSQ0VfRElTRUFTRV9NT0RFTF9fUkVGRVJFTkNFX1BPUFVMQVRJT05fREVOU0lUWSA9IFN0YW5kYXJkUGFja2FnZS5TVEFOREFSRF9ESVNFQVNFX01PREVMX19SRUZFUkVOQ0VfUE9QVUxBVElPTl9ERU5TSVRZOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlJvYWQgTmV0d29yayBJbmZlY3Rpb3VzIFByb3BvcnRpb248L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBFWFRFUk5BTF9EQVRBX1NPVVJDRV9ESVNFQVNFX01PREVMX19ST0FEX05FVFdPUktfSU5GRUNUSU9VU19QUk9QT1JUSU9OID0gU3RhbmRhcmRQYWNrYWdlLlNUQU5EQVJEX0RJU0VBU0VfTU9ERUxfX1JPQURfTkVUV09SS19JTkZFQ1RJT1VTX1BST1BPUlRJT047CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+Q2hhcmFjdGVyaXN0aWMgTWl4aW5nIERpc3RhbmNlPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgRVhURVJOQUxfREFUQV9TT1VSQ0VfRElTRUFTRV9NT0RFTF9fQ0hBUkFDVEVSSVNUSUNfTUlYSU5HX0RJU1RBTkNFID0gU3RhbmRhcmRQYWNrYWdlLlNUQU5EQVJEX0RJU0VBU0VfTU9ERUxfX0NIQVJBQ1RFUklTVElDX01JWElOR19ESVNUQU5DRTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5EYXRhIFBhdGg8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBFWFRFUk5BTF9EQVRBX1NPVVJDRV9ESVNFQVNFX01PREVMX19EQVRBX1BBVEggPSBTdGFuZGFyZFBhY2thZ2UuU1RBTkRBUkRfRElTRUFTRV9NT0RFTF9GRUFUVVJFX0NPVU5UICsgMDsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5EaXNlYXNlIFR5cGU8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBFWFRFUk5BTF9EQVRBX1NPVVJDRV9ESVNFQVNFX01PREVMX19ESVNFQVNFX1RZUEUgPSBTdGFuZGFyZFBhY2thZ2UuU1RBTkRBUkRfRElTRUFTRV9NT0RFTF9GRUFUVVJFX0NPVU5UICsgMTsKKworCS8qKgorCSAqIFRoZSBudW1iZXIgb2Ygc3RydWN0dXJhbCBmZWF0dXJlcyBvZiB0aGUgJzxlbT5EaXNlYXNlIE1vZGVsPC9lbT4nIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IEVYVEVSTkFMX0RBVEFfU09VUkNFX0RJU0VBU0VfTU9ERUxfRkVBVFVSRV9DT1VOVCA9IFN0YW5kYXJkUGFja2FnZS5TVEFOREFSRF9ESVNFQVNFX01PREVMX0ZFQVRVUkVfQ09VTlQgKyAyOworCisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXh0ZXJuYWxkYXRhc291cmNlLkV4dGVybmFsRGF0YVNvdXJjZURpc2Vhc2VNb2RlbCA8ZW0+RGlzZWFzZSBNb2RlbDwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJzxlbT5EaXNlYXNlIE1vZGVsPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4dGVybmFsZGF0YXNvdXJjZS5FeHRlcm5hbERhdGFTb3VyY2VEaXNlYXNlTW9kZWwKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUNsYXNzIGdldEV4dGVybmFsRGF0YVNvdXJjZURpc2Vhc2VNb2RlbCgpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXh0ZXJuYWxkYXRhc291cmNlLkV4dGVybmFsRGF0YVNvdXJjZURpc2Vhc2VNb2RlbCNnZXREYXRhUGF0aCA8ZW0+RGF0YSBQYXRoPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+RGF0YSBQYXRoPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4dGVybmFsZGF0YXNvdXJjZS5FeHRlcm5hbERhdGFTb3VyY2VEaXNlYXNlTW9kZWwjZ2V0RGF0YVBhdGgoKQorCSAqIEBzZWUgI2dldEV4dGVybmFsRGF0YVNvdXJjZURpc2Vhc2VNb2RlbCgpCisJICogQGdlbmVyYXRlZAorCSAqLworCUVBdHRyaWJ1dGUgZ2V0RXh0ZXJuYWxEYXRhU291cmNlRGlzZWFzZU1vZGVsX0RhdGFQYXRoKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leHRlcm5hbGRhdGFzb3VyY2UuRXh0ZXJuYWxEYXRhU291cmNlRGlzZWFzZU1vZGVsI2dldERpc2Vhc2VUeXBlIDxlbT5EaXNlYXNlIFR5cGU8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxlbT5EaXNlYXNlIFR5cGU8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXh0ZXJuYWxkYXRhc291cmNlLkV4dGVybmFsRGF0YVNvdXJjZURpc2Vhc2VNb2RlbCNnZXREaXNlYXNlVHlwZSgpCisJICogQHNlZSAjZ2V0RXh0ZXJuYWxEYXRhU291cmNlRGlzZWFzZU1vZGVsKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUF0dHJpYnV0ZSBnZXRFeHRlcm5hbERhdGFTb3VyY2VEaXNlYXNlTW9kZWxfRGlzZWFzZVR5cGUoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIGZhY3RvcnkgdGhhdCBjcmVhdGVzIHRoZSBpbnN0YW5jZXMgb2YgdGhlIG1vZGVsLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgZmFjdG9yeSB0aGF0IGNyZWF0ZXMgdGhlIGluc3RhbmNlcyBvZiB0aGUgbW9kZWwuCisJICogQGdlbmVyYXRlZAorCSAqLworCUV4dGVybmFsRGF0YVNvdXJjZUZhY3RvcnkgZ2V0RXh0ZXJuYWxEYXRhU291cmNlRmFjdG9yeSgpOworCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBEZWZpbmVzIGxpdGVyYWxzIGZvciB0aGUgbWV0YSBvYmplY3RzIHRoYXQgcmVwcmVzZW50CisJICogPHVsPgorCSAqICAgPGxpPmVhY2ggY2xhc3MsPC9saT4KKwkgKiAgIDxsaT5lYWNoIGZlYXR1cmUgb2YgZWFjaCBjbGFzcyw8L2xpPgorCSAqICAgPGxpPmVhY2ggZW51bSw8L2xpPgorCSAqICAgPGxpPmFuZCBlYWNoIGRhdGEgdHlwZTwvbGk+CisJICogPC91bD4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJaW50ZXJmYWNlIExpdGVyYWxzIHsKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXh0ZXJuYWxkYXRhc291cmNlLmltcGwuRXh0ZXJuYWxEYXRhU291cmNlRGlzZWFzZU1vZGVsSW1wbCA8ZW0+RGlzZWFzZSBNb2RlbDwvZW0+fScgY2xhc3MuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leHRlcm5hbGRhdGFzb3VyY2UuaW1wbC5FeHRlcm5hbERhdGFTb3VyY2VEaXNlYXNlTW9kZWxJbXBsCisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4dGVybmFsZGF0YXNvdXJjZS5pbXBsLkV4dGVybmFsRGF0YVNvdXJjZVBhY2thZ2VJbXBsI2dldEV4dGVybmFsRGF0YVNvdXJjZURpc2Vhc2VNb2RlbCgpCisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVDbGFzcyBFWFRFUk5BTF9EQVRBX1NPVVJDRV9ESVNFQVNFX01PREVMID0gZUlOU1RBTkNFLmdldEV4dGVybmFsRGF0YVNvdXJjZURpc2Vhc2VNb2RlbCgpOworCisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+RGF0YSBQYXRoPC9iPjwvZW0+JyBhdHRyaWJ1dGUgZmVhdHVyZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVBdHRyaWJ1dGUgRVhURVJOQUxfREFUQV9TT1VSQ0VfRElTRUFTRV9NT0RFTF9fREFUQV9QQVRIID0gZUlOU1RBTkNFLmdldEV4dGVybmFsRGF0YVNvdXJjZURpc2Vhc2VNb2RlbF9EYXRhUGF0aCgpOworCisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+RGlzZWFzZSBUeXBlPC9iPjwvZW0+JyBhdHRyaWJ1dGUgZmVhdHVyZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVBdHRyaWJ1dGUgRVhURVJOQUxfREFUQV9TT1VSQ0VfRElTRUFTRV9NT0RFTF9fRElTRUFTRV9UWVBFID0gZUlOU1RBTkNFLmdldEV4dGVybmFsRGF0YVNvdXJjZURpc2Vhc2VNb2RlbF9EaXNlYXNlVHlwZSgpOworCisJfQorCit9IC8vRXh0ZXJuYWxEYXRhU291cmNlUGFja2FnZQpkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXh0ZXJuYWxkYXRhc291cmNlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvZXh0ZXJuYWxkYXRhc291cmNlL2ltcGwvRXh0ZXJuYWxEYXRhU291cmNlRGlzZWFzZU1vZGVsSW1wbC5qYXZhIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXh0ZXJuYWxkYXRhc291cmNlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvZXh0ZXJuYWxkYXRhc291cmNlL2ltcGwvRXh0ZXJuYWxEYXRhU291cmNlRGlzZWFzZU1vZGVsSW1wbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYyNWM2N2UKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leHRlcm5hbGRhdGFzb3VyY2Uvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9leHRlcm5hbGRhdGFzb3VyY2UvaW1wbC9FeHRlcm5hbERhdGFTb3VyY2VEaXNlYXNlTW9kZWxJbXBsLmphdmEKQEAgLTAsMCArMSw4MjEgQEAKKy8vIEV4dGVybmFsRGF0YVNvdXJjZURpc2Vhc2VNb2RlbEltcGwNCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leHRlcm5hbGRhdGFzb3VyY2UuaW1wbDsNCisNCisNCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyAqIENvcHlyaWdodCAoYykgMjAwNywgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4NCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzDQorICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wDQorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQNCisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbA0KKyAqDQorICogQ29udHJpYnV0b3JzOg0KKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24NCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCisNCitpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsNCitpbXBvcnQgamF2YS51dGlsLkhhc2hTZXQ7DQoraW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsNCitpbXBvcnQgamF2YS51dGlsLkxpc3Q7DQoraW1wb3J0IGphdmEudXRpbC5TZXQ7DQorDQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLkVMaXN0Ow0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuaW1wbC5FTm90aWZpY2F0aW9uSW1wbDsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtUHJvcGVydHlTb3VyY2U7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLnByb3ZpZGVyLlByb3BlcnR5U291cmNlOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLlNjZW5hcmlvSW5pdGlhbGl6YXRpb25FeGNlcHRpb247DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMudXRpbC5DU1ZTY2VuYXJpb1N0cmVhbWVyOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuVXRpbGl0eTsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5JZGVudGlmaWFibGU7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5EeW5hbWljTGFiZWw7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5MYWJlbFZhbHVlOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguTm9kZUxhYmVsOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuU1RFTVRpbWU7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLkFyZWFMYWJlbDsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuUG9wdWxhdGlvbkxhYmVsOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuQWN0aXZhdG9yOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXh0ZXJuYWxkYXRhc291cmNlLkV4dGVybmFsRGF0YVNvdXJjZURpc2Vhc2VNb2RlbDsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4dGVybmFsZGF0YXNvdXJjZS5FeHRlcm5hbERhdGFTb3VyY2VQYWNrYWdlOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuaW1wbC5TdGFuZGFyZERpc2Vhc2VNb2RlbEltcGw7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5EaXNlYXNlTW9kZWxMYWJlbDsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLkRpc2Vhc2VNb2RlbExhYmVsVmFsdWU7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5JbmZlY3RvcjsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlNFSVJMYWJlbFZhbHVlOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU0lMYWJlbFZhbHVlOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU0lSTGFiZWxWYWx1ZTsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWw7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsVmFsdWU7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZEZhY3Rvcnk7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZFBhY2thZ2U7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5pbXBsLlNFSVJMYWJlbFZhbHVlSW1wbDsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLmltcGwuU0lMYWJlbFZhbHVlSW1wbDsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLmltcGwuU0lSTGFiZWxWYWx1ZUltcGw7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5wcm92aWRlci5TdGFuZGFyZEl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5Ow0KKw0KKw0KKy8qKg0KKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorICogQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPkRpc2Vhc2UgTW9kZWw8L2I+PC9lbT4nLg0KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKyAqIDxwPg0KKyAqIFRoZSBmb2xsb3dpbmcgZmVhdHVyZXMgYXJlIGltcGxlbWVudGVkOg0KKyAqIDx1bD4NCisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4dGVybmFsZGF0YXNvdXJjZS5pbXBsLkV4dGVybmFsRGF0YVNvdXJjZURpc2Vhc2VNb2RlbEltcGwjZ2V0RGF0YVBhdGggPGVtPkRhdGEgUGF0aDwvZW0+fTwvbGk+DQorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leHRlcm5hbGRhdGFzb3VyY2UuaW1wbC5FeHRlcm5hbERhdGFTb3VyY2VEaXNlYXNlTW9kZWxJbXBsI2dldERpc2Vhc2VUeXBlIDxlbT5EaXNlYXNlIFR5cGU8L2VtPn08L2xpPg0KKyAqIDwvdWw+DQorICogPC9wPg0KKyAqDQorICogQGdlbmVyYXRlZA0KKyAqLw0KK3B1YmxpYyBjbGFzcyBFeHRlcm5hbERhdGFTb3VyY2VEaXNlYXNlTW9kZWxJbXBsIGV4dGVuZHMgU3RhbmRhcmREaXNlYXNlTW9kZWxJbXBsIGltcGxlbWVudHMgRXh0ZXJuYWxEYXRhU291cmNlRGlzZWFzZU1vZGVsIHsNCisNCisJLyoqDQorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXREYXRhUGF0aCgpIDxlbT5EYXRhIFBhdGg8L2VtPn0nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBzZWUgI2dldERhdGFQYXRoKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBTdHJpbmcgREFUQV9QQVRIX0VERUZBVUxUID0gbnVsbDsNCisJLyoqDQorCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldERhdGFQYXRoKCkgPGVtPkRhdGEgUGF0aDwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHNlZSAjZ2V0RGF0YVBhdGgoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqIEBvcmRlcmVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgU3RyaW5nIGRhdGFQYXRoID0gREFUQV9QQVRIX0VERUZBVUxUOw0KKw0KKwkvL3ByaXZhdGUgZmluYWwgc3RhdGljIFN0cmluZyBVUklfUFJFRklYX1BBVFRFUk4gPSAiZ2VvL3JlZ2lvbi8iOw0KKw0KKwkvKioNCisJICogVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldERpc2Vhc2VUeXBlKCkgPGVtPkRpc2Vhc2UgVHlwZTwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHNlZSAjZ2V0RGlzZWFzZVR5cGUoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqIEBvcmRlcmVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIFN0cmluZyBESVNFQVNFX1RZUEVfRURFRkFVTFQgPSBudWxsOw0KKwkvKioNCisJICogVGhpcyBwcmVmaXggcHJlY2VkZXMgdGhlIG5vZGUgaWQgYW5kIG11c3QgYmUgcmVtb3ZlZCBpbiB0aGUgDQorCSAqIGZpbHRlckZpbGVuYW1lIG1ldGhvZCB0byBhdXRvLWdlbmVyYXRlIHRoZSBvdXRwdXQgZmlsZSBuYW1lLg0KKwkgKi8NCisJcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgTE9DQVRJT05JRF9QUkVGSVggPSAiL25vZGUvZ2VvL3JlZ2lvbi8iOw0KKw0KKw0KKwkvKioNCisJICogRGlyZWN0b3J5IGNvbnRhaW5pbmcgdGhlIHNjZW5hcmlvIHRvIGltcG9ydCBhbmQgcGxheSBiYWNrDQorCSAqLw0KKwlwdWJsaWMgU3RyaW5nIGRpck5hbWUgPSBERUZBVUxUX0RJUjsNCisNCisJLyoqDQorCSAqIGEgZmFsc2UgKEhpZGRlbikgdGltZSBjb3VudGVyIHVzZWQgZm9yIHRoaXMgdG95IGV4YW1wbGUNCisJICovDQorCXByaXZhdGUgaW50IGZpbGVMaW5lQ291bnRlciA9IDA7DQorDQorCXByb3RlY3RlZCBTZXQ8U3RyaW5nPiBTX0tFWV9TRVQgPSBuZXcgSGFzaFNldDxTdHJpbmc+KCk7DQorCXByb3RlY3RlZCBTZXQ8U3RyaW5nPiBFX0tFWV9TRVQgPSBuZXcgSGFzaFNldDxTdHJpbmc+KCk7DQorCXByb3RlY3RlZCBTZXQ8U3RyaW5nPiBJX0tFWV9TRVQgPSBuZXcgSGFzaFNldDxTdHJpbmc+KCk7CQ0KKwlwcm90ZWN0ZWQgU2V0PFN0cmluZz4gUl9LRVlfU0VUID0gbmV3IEhhc2hTZXQ8U3RyaW5nPigpOw0KKwlwcm90ZWN0ZWQgU2V0PFN0cmluZz4gSU5DSURFTkNFX0tFWV9TRVQgPSBuZXcgSGFzaFNldDxTdHJpbmc+KCk7DQorCQ0KKwlwdWJsaWMgc3RhdGljIFN0cmluZyBsYWJlbFMgID0gbnVsbCA7DQorCXB1YmxpYyBzdGF0aWMgU3RyaW5nIGxhYmVsRSAgPSBudWxsIDsNCisJcHVibGljIHN0YXRpYyBTdHJpbmcgbGFiZWxJID0gbnVsbCA7ICAvLyBmb3IgZGlzcGxheSBvbmx5DQorCXB1YmxpYyBzdGF0aWMgU3RyaW5nIGxhYmVsUiAgPSBudWxsIDsNCisJcHVibGljIHN0YXRpYyBTdHJpbmcgbGFiZWxJbmNpZGVuY2UgPSBudWxsOw0KKwkNCisNCisJLy8gV2UgbmVlZCB0aGlzIHRvIGRldGVybWluZSB3aGVuIGEgc2ltdWxhdGlvbiBpcyByZXN0YXJ0ZWQgc28gd2UgDQorCS8vIGNhbiByZXNldCB0aGUgZmlsZSBsaW5lIGNvdW50ZXIuIEFsc28gbmVlZGVkIHRvIGtlZXAgdHJhY2sgb2YgdGhlIGxpbmUgbnVtYmVyIGluIHRoZSBmaWxlDQorCXByaXZhdGUgU1RFTVRpbWUgZmlyc3RTVEVNVGltZSA9IG51bGw7DQorCQ0KKwkvLyBUaGUgc3RyZWFtZXINCisJDQorCUNTVlNjZW5hcmlvU3RyZWFtZXIgc3RyZWFtZXI7DQorCQ0KKwkvKioNCisJICogbm90IHVzZWQNCisJICovDQorCXByaXZhdGUgZG91YmxlIHRvdGFsUG9wdWxhdGlvbkNvdW50ID0gMC4wOw0KKwlwcml2YXRlIGRvdWJsZSB0b3RhbEFyZWEgPSAwLjA7DQorDQorCXByaXZhdGUgU3RyaW5nIGRpc2Vhc2VUeXBlOw0KKw0KKwkNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkIE5PVA0KKwkgKi8NCisJcHVibGljIEV4dGVybmFsRGF0YVNvdXJjZURpc2Vhc2VNb2RlbEltcGwoKSB7DQorCQlzdXBlcigpOw0KKwl9DQorDQorDQorDQorDQorCS8qKg0KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5pbXBsLkRlY29yYXRvckltcGwjdXBkYXRlTGFiZWxzKG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5HcmFwaCwNCisJICogICAgICBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuU1RFTVRpbWUpDQorCSAqLw0KKwlAT3ZlcnJpZGUNCisJcHVibGljIHZvaWQgdXBkYXRlTGFiZWxzKGZpbmFsIFNURU1UaW1lIHRpbWUsIGZpbmFsIGxvbmcgdGltZURlbHRhLCBpbnQgY3ljbGUpIHsNCisNCisNCisJCS8vIE1BRCAxMC8yOS8yMDA5DQorCQkvLyBDb21tZW50ZWQgb3V0IGNvZGUsIG1vdmVkIHRvICJjYWxjdWxhdGVEZWx0YSIgZm9yIEludGVncmF0aW9uRGVjb3JhdG9yLg0KKwkJLy8gTm90IHN1cmUgd2hhdCB1cGRhdGVzIG5lZWQgdG8gaGFwcGVuIHRvICJ1cGRhdGVMYWJlbHMiLg0KKw0KKwkJLyoNCisJCS8vIEl0ZXJhdGUgdGhyb3VnaCBlYWNoIG9mIHRoZSBsYWJlbHMgd2UgbmVlZCB0byB1cGRhdGUuDQorCQlmb3IgKGZpbmFsIEl0ZXJhdG9yPER5bmFtaWNMYWJlbD4gY3VycmVudFN0YXRlTGFiZWxJdGVyID0gZ2V0TGFiZWxzVG9VcGRhdGUoKQ0KKwkJCQkuaXRlcmF0b3IoKTsgY3VycmVudFN0YXRlTGFiZWxJdGVyLmhhc05leHQoKTspIHsNCisJCQlmaW5hbCBTdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsIGRpc2Vhc2VMYWJlbCA9IChTdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsKSBjdXJyZW50U3RhdGVMYWJlbEl0ZXINCisJCQkJCS5uZXh0KCk7DQorDQorCQkJYXNzZXJ0IGRpc2Vhc2VMYWJlbC5nZXRQb3B1bGF0aW9uTGFiZWwoKS5nZXRQb3B1bGF0aW9uSWRlbnRpZmllcigpDQorCQkJCQkuZXF1YWxzKGdldFBvcHVsYXRpb25JZGVudGlmaWVyKCkpOw0KKw0KKwkJCS8vIFRoaXMgaXMgdGhlIGN1cnJlbnQgc3RhdGUgb2YgdGhlIGRpc2Vhc2UgZm9yIHRoaXMgbGFiZWwNCisJCQlmaW5hbCBTdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsVmFsdWUgY3VycmVudFN0YXRlID0gKFN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZSlkaXNlYXNlTGFiZWwNCisJCQkJCS5nZXRDdXJyZW50VmFsdWUoKTsNCisNCisNCisJCQkvLyAyKSBDb21wdXRlIHRoZSBzdGF0ZSB0cmFuc2l0aW9ucw0KKwkJCWZpbmFsIFN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZSBudWxsQWRkaXRpb25zID0gaW1wb3J0RGlzZWFzZURhdGEoY3VycmVudFN0YXRlLCBkaXNlYXNlTGFiZWwsIHRpbWUsIHRpbWVEZWx0YSk7DQorDQorDQorCQkJLy8gVGhpcyB3aWxsIGJlIHRoZSBzdGF0ZSB0aGF0IHdlIGNvbXB1dGUuDQorCQkJZmluYWwgU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbFZhbHVlIG5leHRTdGF0ZSA9IChTdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsVmFsdWUpZGlzZWFzZUxhYmVsLmdldE5leHRWYWx1ZSgpOw0KKw0KKwkJCS8vIEluaXRpYWxpemUgdGhlIG5leHQgc3RhdGUgZnJvbSB0aGUgY3VycmVudCBzdGF0ZSBhbmQgdGhlbiB3ZSdsbA0KKwkJCS8vIG1ha2UgdGhlIGNoYW5nZXMgdG8gdGhhdC4NCisJCQluZXh0U3RhdGUuc2V0KGN1cnJlbnRTdGF0ZSk7DQorDQorDQorDQorCQkJYXNzZXJ0IG5leHRTdGF0ZS5zYW5lKCk6ImRpc2Vhc2Ugc3RhdGUgaXMgaW5zYW5lIGFmdGVyIHN1YnRyYWN0aW5nIGRlYXRoczogIituZXh0U3RhdGUudG9TdHJpbmcoKTsNCisNCisNCisJCQkvLyBUaGUgbmV4dCB2YWx1ZSBpcyB2YWxpZCBub3cuDQorCQkJZGlzZWFzZUxhYmVsLnNldE5leHRWYWx1ZVZhbGlkKHRydWUpOw0KKw0KKw0KKwkJfSAvLyBmb3INCisJCSsrZmlsZUxpbmVDb3VudGVyOw0KKwkJICovDQorCX0gLy8gdXBkYXRlTGFiZWxzDQorDQorCS8qKg0KKwkgKiBnZXQgdGhlIGNvbnN0YW50cyB3aGljaCBpZGVudGlmeSB0aGUgZGlzZWFzZSBsYWJlbCBzdGF0ZSB2YXJpYWJsZXMNCisJICogQHBhcmFtIGRpc2Vhc2VMYWJlbA0KKwkgKi8NCisJcHJpdmF0ZSBzdGF0aWMgdm9pZCBzZXRQcm9wZXJ0eUxhYmVscygpIHsNCisJCVNFSVJMYWJlbFZhbHVlIGRpc2Vhc2VMYWJlbCA9IChTRUlSTGFiZWxWYWx1ZSkgU3RhbmRhcmRGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVTRUlSTGFiZWwoKS5nZXRDdXJyZW50VmFsdWUoKTsNCisJCVN0YW5kYXJkSXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkgaXRlbVByb3ZpZGVyRmFjdG9yeSA9IG5ldyBTdGFuZGFyZEl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5KCk7DQorCQlJSXRlbVByb3BlcnR5U291cmNlIHByb3BlcnR5U291cmNlID0gKElJdGVtUHJvcGVydHlTb3VyY2UpIGl0ZW1Qcm92aWRlckZhY3RvcnkuYWRhcHQoZGlzZWFzZUxhYmVsLCBQcm9wZXJ0eVNvdXJjZS5jbGFzcyk7DQorCQlMaXN0PElJdGVtUHJvcGVydHlEZXNjcmlwdG9yPiBwcm9wZXJ0aWVzID0gcHJvcGVydHlTb3VyY2UuZ2V0UHJvcGVydHlEZXNjcmlwdG9ycyhudWxsKTsNCisNCisJCUlJdGVtUHJvcGVydHlEZXNjcmlwdG9yIHByb3BlcnR5UyA9IHByb3BlcnRpZXMuZ2V0KFN0YW5kYXJkUGFja2FnZS5TRUlSX0xBQkVMX1ZBTFVFX19TKTsNCisJCUlJdGVtUHJvcGVydHlEZXNjcmlwdG9yIHByb3BlcnR5RSA9IHByb3BlcnRpZXMuZ2V0KFN0YW5kYXJkUGFja2FnZS5TRUlSX0xBQkVMX1ZBTFVFX19FKTsNCisJCUlJdGVtUHJvcGVydHlEZXNjcmlwdG9yIHByb3BlcnR5SSA9IHByb3BlcnRpZXMuZ2V0KFN0YW5kYXJkUGFja2FnZS5TRUlSX0xBQkVMX1ZBTFVFX19JKTsNCisJCUlJdGVtUHJvcGVydHlEZXNjcmlwdG9yIHByb3BlcnR5UiA9IHByb3BlcnRpZXMuZ2V0KFN0YW5kYXJkUGFja2FnZS5TRUlSX0xBQkVMX1ZBTFVFX19SKTsNCisJCUlJdGVtUHJvcGVydHlEZXNjcmlwdG9yIHByb3BlcnR5SW5jaWRlbmNlID0gcHJvcGVydGllcy5nZXQoU3RhbmRhcmRQYWNrYWdlLlNFSVJfTEFCRUxfVkFMVUVfX0lOQ0lERU5DRSk7DQorCQlsYWJlbFMgPSBwcm9wZXJ0eVMuZ2V0RGlzcGxheU5hbWUocHJvcGVydHlTKTsNCisJCWxhYmVsRSA9IHByb3BlcnR5RS5nZXREaXNwbGF5TmFtZShwcm9wZXJ0eUUpOw0KKwkJbGFiZWxJID0gcHJvcGVydHlJLmdldERpc3BsYXlOYW1lKHByb3BlcnR5SSk7DQorCQlsYWJlbFIgPSBwcm9wZXJ0eVIuZ2V0RGlzcGxheU5hbWUocHJvcGVydHlSKTsNCisJCWxhYmVsSW5jaWRlbmNlID0gcHJvcGVydHlJbmNpZGVuY2UuZ2V0RGlzcGxheU5hbWUocHJvcGVydHlJbmNpZGVuY2UpOw0KKwl9Ly8gc2V0UHJvcGVydHlMYWJlbHMNCisNCisJDQorLyoqDQorICogDQorICovDQorCXByaXZhdGUgc3luY2hyb25pemVkIHZvaWQgc2V0dXBTdHJlYW1pbmcoKSB7DQorCQlpZihzdHJlYW1lciA9PSBudWxsKSB7DQorCQkJdHJ5IHsNCisJCQkJc3RyZWFtZXIgPSBuZXcgQ1NWU2NlbmFyaW9TdHJlYW1lcih0aGlzLmRhdGFQYXRoKTsNCisJCQkJc3RyZWFtZXIucHJlcGFyZUZvclN0cmVhbWluZygtMSk7DQorCQkJCS8vIFNldCB0aGUgZGlzZWFzZSB0eXBlIGhlcmUgc2luY2Ugd2UgZG9uJ3QgbmVlZCB0aGF0DQorCQkJCS8vIGlucHV0IGZyb20gdGhlIGVuZC11c2VyIGFueSBsb25nZXINCisJCQkJdGhpcy5kaXNlYXNlVHlwZSA9IHN0cmVhbWVyLmdldFR5cGUoKS5uYW1lKCk7DQorCQkJCXRoaXMuU19LRVlfU0VUID0gc3RyZWFtZXIuZ2V0c0tleVNldCgpOw0KKwkJCQl0aGlzLkVfS0VZX1NFVCA9IHN0cmVhbWVyLmdldGVLZXlTZXQoKTsNCisJCQkJdGhpcy5JX0tFWV9TRVQgPSBzdHJlYW1lci5nZXRpS2V5U2V0KCk7DQorCQkJCXRoaXMuUl9LRVlfU0VUID0gc3RyZWFtZXIuZ2V0cktleVNldCgpOw0KKwkJCQl0aGlzLklOQ0lERU5DRV9LRVlfU0VUID0gc3RyZWFtZXIuZ2V0SW5jaWRlbmNlS2V5U2V0KCk7DQorCQkJfSBjYXRjaChTY2VuYXJpb0luaXRpYWxpemF0aW9uRXhjZXB0aW9uIHNpZSkgew0KKwkJCQlBY3RpdmF0b3IubG9nRXJyb3IoIkVycm9yIHJlYWRpbmcgc2NlbmFyaW8gZmlsZXMiLCBzaWUpOw0KKwkJCX0gY2F0Y2goSU9FeGNlcHRpb24gaW9lKSB7DQorCQkJCUFjdGl2YXRvci5sb2dFcnJvcigiSU9FeGNlcHRvcG4gcmVhZGluZyBzY2VuYXJpbyBmaWxlcyIsIGlvZSk7DQorCQkJfQ0KKwkJfQ0KKwl9DQorDQorCS8qKg0KKwkgKiANCisJICogVGhpcyBtZXRob2QgcmVhZHMgdGhlIG5leHQgc3RhdGUgZGF0YSBmcm9tIHRoZSBleHRlcm5hbCBkYXRhRmlsZQ0KKwkgKiANCisJICogQHBhcmFtIGRlbHRhU3RhdGUNCisJICogQHBhcmFtIGRpc2Vhc2VMYWJlbA0KKwkgKiBAcGFyYW0gdGltZQ0KKwkgKiBAcGFyYW0gdGltZURlbHRhDQorCSAqIEBwYXJhbSBzdHJlYW1OZXh0Um93IFRydWUgaWYgd2Ugc2hvdWxkIGZldGNoIHRoZSBuZXh0IHJvdyBmcm9tIHN0cmVhbQ0KKwkgKiBAcmV0dXJuDQorCSAqLw0KKwlwdWJsaWMgU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbFZhbHVlIGltcG9ydERpc2Vhc2VEYXRhKA0KKwkJCWZpbmFsIFN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZSBkZWx0YVN0YXRlLA0KKwkJCWZpbmFsIFN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWwgZGlzZWFzZUxhYmVsLCANCisJCQlmaW5hbCBTVEVNVGltZSB0aW1lLCANCisJCQlmaW5hbCBsb25nIHRpbWVEZWx0YSwNCisJCQlib29sZWFuIHN0cmVhbU5leHRSb3cpIHsNCisNCisJCXRyeSB7DQorCQkJDQorCQkJLy8gV2lsbCBvbmx5IGJlIHNldCB1cCBmaXJzdCB0aW1lIGNhbGxlZA0KKwkJCXNldHVwU3RyZWFtaW5nKCk7DQorCQkJDQorCQkJaWYobGFiZWxTPT1udWxsKSBzZXRQcm9wZXJ0eUxhYmVscygpOw0KKwkNCisJCQkvLyBUT0RPDQorCQkJLy8gdGhlIGZpbGVuYW1lIGFjdHVhbGx5IGNvbWVzIGZyb20gdGhlIG5vZGUgaXRzZWxmDQorCQkJLy8gd2UgbmVlZCB0byByZWdlbiB0aGUgY29kZSB3aXRoIGEgc2NlbmFyaW9EaXJlY3RvcnkgDQorCQkJLy8gc3BlY2lmaWNhdGlvbiBhcyBldmVyeSBub2RlIG1hcHMgdG8gYSBkaWZmZXJlbnQgZGF0YSBmaWxlLiBmb3Igbm93IHdlIHdpbGwgdGVzdA0KKwkJCS8vIHdpdGggb25seSBvbmUgbm9kZSBhbmQgb25lIGZpbGUNCisJCQkvLyBuZWVkIGEgbWFwIG9mIG1hcHMga2V5ZWQgYnkgbG9jYXRpb24gbmFtZQ0KKwkNCisJDQorCQkJSWRlbnRpZmlhYmxlIGlkZW50ID0gZGlzZWFzZUxhYmVsLmdldElkZW50aWZpYWJsZSgpOw0KKwkJCVN0cmluZyBmaWxlTmFtZSA9IGlkZW50LmdldFVSSSgpLnRvU3RyaW5nKCk7DQorCQkJaW50IGxhc3QgPSBmaWxlTmFtZS5sYXN0SW5kZXhPZihMT0NBVElPTklEX1BSRUZJWCk7DQorCQkJbGFzdCArPSBMT0NBVElPTklEX1BSRUZJWC5sZW5ndGgoKTsNCisJCQlTdHJpbmcgbG9jYXRpb24gPSBmaWxlTmFtZS5zdWJzdHJpbmcobGFzdCxmaWxlTmFtZS5sZW5ndGgoKSk7DQorCQ0KKwkJCWludCBhZG1pbkxldmVsID0gVXRpbGl0eS5rZXlMZXZlbChsb2NhdGlvbik7DQorCQkJDQorCQkJDQorCQkJLy8gaWYgbm8gZGF0YQ0KKwkvKgkJaWYoKGRhdGE9PW51bGwpfHwoZGF0YS5zaXplKCkgPT0gMCkpIHsNCisJCQkJLy8gbm8gZGF0YSBmb3IgbG9jYXRpb24gaW4gcXVlc3Rpb25zDQorCQkJCWlmIChkaXNlYXNlVHlwZS5lcXVhbHMoSU1QT1JUX1RZUEVfU0kpKSB7DQorCQkJCQlyZXR1cm4gbmV3IFNJTGFiZWxWYWx1ZUltcGwoMC4wICwgMC4wLCAwLjAsIDAuMCk7DQorCQkJCX0gZWxzZSBpZiAoZGlzZWFzZVR5cGUuZXF1YWxzKElNUE9SVF9UWVBFX1NJUikpIHsNCisJCQkJCXJldHVybiBuZXcgU0lSTGFiZWxWYWx1ZUltcGwoMC4wLCAwLjAgLCAwLjAsIDAuMCwgMC4wKTsNCisJCQkJfSBlbHNlIGlmIChkaXNlYXNlVHlwZS5lcXVhbHMoSU1QT1JUX1RZUEVfU0VJUikpIHsNCisJCQkJCXJldHVybiBuZXcgU0VJUkxhYmVsVmFsdWVJbXBsKCAwLjAsIDAuMCwgMC4wICwgMC4wLCAwLjAsIDAuMCk7DQorCQkJCX0gZWxzZSB7DQorCQkJCQl0aHJvdyBuZXcgVW5zdXBwb3J0ZWRPcGVyYXRpb25FeGNlcHRpb24oIkV4dGVybmFsRGF0YVNvdXJjZSBJbnZhbGlkIFR5cGUgIitkaXNlYXNlVHlwZSsiIG11c3QgYmUgU0ksIFNJUiwgb3IgU0VJUiIpOw0KKwkJCQl9DQorCQkJfQ0KKwkqLw0KKwkJCS8vIEpISyBOb3RlczogSE9XIERPIEkgR0VUIFRIRSBDVVJSRU5UIFNURVA/Pw0KKwkJCS8vICANCisJCQkvLyBub2RlID4+IGdyYXBoDQorCQkJLy8gZ3JhcGggPj4gc2NlbmFyaW8gdXNpbmcgU2ltdWxhdGlvbk1hbmdlciBtZXRob2QNCisJCQkvLyBTaW11bGF0aW9uTWFuZ2VyLmdldE1hbmdlcigpDQorCQkJLy8gdGhlbiBjYWxsIG1hbmFnZXIubWFwR3JhcGhUb1NpbXVsYXRpb24oZmluYWwgR3JhcGggZ3JhcGgpIHsNCisJCQkvLyB0byBnZXQgdGhlIHJ2aHAgeW91IGp1c3QgaGF2ZSB0byBhZGFwdCBpdCBhZ2Fpbi4NCisJDQorCQkJLy8gY3N2IGRpc2Vhc2VzIHJlYWQgZnJvbSBmaWxlIGtub3cgdGhlaXIgb3duDQorCQkJLy8gdGltZSBwZXJpb2QgcHJvcGVydHkgaW4gbWlsbGlzZWNzDQorCQkJLy8gVGhpcyBtZXRob2QgaXMgY2FsbGVkIGJ5ICJ1cGRhdGVMYWJlbHMiDQorCQkJLy8gc2hvdWxkIHJlYWxseSBvdmVycmlkZSB0aGF0IGluc3RlYWQgZm8gY29tcHV0ZSB0cmFuc2l0aW9ucw0KKwkJCS8vIHVwZGF0ZUxhYmVscyBoYXMgdGhlIFRJTUUuDQorCQ0KKwkJCS8vIFRPRE8NCisJCQkvLyByZW1vdmUgZmlsdGVyIGluIFN0YW5kYXJkUmVsYXRpdmVWYWx1ZVByb3ZpZGVyQWRhcHRlckZhY3RvcnkgDQorCQkJLy8gd2hpY2ggaXMgcHJldmVudGluZyBkaXNlYXNlIGRlYXRocyBmcm9tIGJlaW5nIGxvZ2dlZC4NCisJCQkvLyBtZXRob2QgaXMgU3RhbmRhcmRSZWxhdGl2ZVZhbHVlUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSBMaXN0PElJdGVtUHJvcGVydHlEZXNjcmlwdG9yPiBnZXRQcm9wZXJ0aWVzKCkNCisJDQorCQkJZG91YmxlIGRlbHRhUyAgPSAwLjA7DQorCQkJZG91YmxlIGRlbHRhRSAgPSAwLjA7DQorCQkJZG91YmxlIGRlbHRhSSA9IDAuMDsNCisJCQlkb3VibGUgZGVsdGFSICA9IDAuMDsNCisJCQlkb3VibGUgaW5jaWRlbmNlID0gMC4wOw0KKwkNCisJCQlTdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsVmFsdWUgY3VycmVudFZhbHVlID0gKFN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZSlkaXNlYXNlTGFiZWwuZ2V0Q3VycmVudFZhbHVlKCk7DQorCQkJLy8JCVN0cmluZyBpZCA9IGlkZW50LmdldFVSSSgpLnRvU3RyaW5nKCk7DQorCQkJLy8JCWludCBzdHJ0ID0gaWQuaW5kZXhPZihVUklfUFJFRklYX1BBVFRFUk4pOw0KKwkJCS8vCQlpZihzdHJ0Pj0wKSB7DQorCQkJLy8JCQlpZCA9IGlkLnN1YnN0cmluZyhzdHJ0K1VSSV9QUkVGSVhfUEFUVEVSTi5sZW5ndGgoKSxpZC5sZW5ndGgoKSk7DQorCQkJLy8JCX0NCisJDQorCQkJLy8JCWlmKChkYXRhSW5zdGFuY2UhPW51bGwpJiYoZGF0YUluc3RhbmNlLmluc3RhbmNlLmNvbnRhaW5zS2V5KGlkKSkpIHsNCisJDQorCQkJLy9pZihkYXRhSW5zdGFuY2UhPW51bGwpIHsNCisJCQkvLyBjb21wdXRlIHRoZSBjaGFuZ2VzDQorCQkJaWYoYWRtaW5MZXZlbCA+IC0xKSB7DQorCQkJCUxpc3Q8RG91YmxlPmRhdGEgPSBudWxsOw0KKwkJCQlpZihzdHJlYW1lci5nZXRDdXJyZW50Um93KGFkbWluTGV2ZWwsIGxhYmVsUykgPCBmaWxlTGluZUNvdW50ZXIpDQorCQkJCQlkYXRhID0gc3RyZWFtZXIuc3RyZWFtUm93KGFkbWluTGV2ZWwsIGxhYmVsUyk7DQorCQkJCWVsc2UgZGF0YSA9IHN0cmVhbWVyLmdldExhc3RGZXRjaGVkUm93KGFkbWluTGV2ZWwsIGxhYmVsUyk7DQorCQkJCQ0KKwkJCQlpbnQgcG9zID0gc3RyZWFtZXIuZ2V0RGF0YVBvc2l0aW9uKGFkbWluTGV2ZWwsIGxvY2F0aW9uKTsNCisJCQkJDQorCQkJCWlmKGRhdGEgIT0gbnVsbCAmJiBwb3MgPj0wKSB7DQorCQkJCQlkb3VibGUgZCA9IGRhdGEuZ2V0KHBvcyk7DQorCQkJCQlkZWx0YVMgPSBkIC0gY3VycmVudFZhbHVlLmdldFMoKTsNCisJCQkJfS8vIFMgDQorCQkNCisJCQkJLy8gSW5jaWRlbmNlDQorCQkJCWlmKHN0cmVhbWVyLmdldEN1cnJlbnRSb3coYWRtaW5MZXZlbCwgbGFiZWxJbmNpZGVuY2UpIDwgZmlsZUxpbmVDb3VudGVyKQ0KKwkJCQkJZGF0YSA9IHN0cmVhbWVyLnN0cmVhbVJvdyhhZG1pbkxldmVsLCBsYWJlbEluY2lkZW5jZSk7DQorCQkJCWVsc2UgZGF0YSA9IHN0cmVhbWVyLmdldExhc3RGZXRjaGVkUm93KGFkbWluTGV2ZWwsIGxhYmVsSW5jaWRlbmNlKTsNCisJCQkJDQorCQkJCWlmKGRhdGEgIT0gbnVsbCAmJiBwb3MgPj0wKSB7DQorCQkJCQlkb3VibGUgZCA9IGRhdGEuZ2V0KHBvcyk7DQorCQkJCQlpbmNpZGVuY2UgPSBkOw0KKwkJCQl9Ly8gUyANCisJCQkJDQorCQkJCWlmIChkaXNlYXNlVHlwZS5lcXVhbHMoSU1QT1JUX1RZUEVfU0VJUikpIHsNCisJCQkJCWlmKHN0cmVhbWVyLmdldEN1cnJlbnRSb3coYWRtaW5MZXZlbCwgbGFiZWxFKSA8IGZpbGVMaW5lQ291bnRlcikNCisJCQkJCQlkYXRhID0gc3RyZWFtZXIuc3RyZWFtUm93KGFkbWluTGV2ZWwsIGxhYmVsRSk7DQorCQkJCQllbHNlIGRhdGEgPSBzdHJlYW1lci5nZXRMYXN0RmV0Y2hlZFJvdyhhZG1pbkxldmVsLCBsYWJlbEUpOw0KKwkJCQkJaWYoZGF0YSAhPSBudWxsICYmIHBvcyA+PTApIHsNCisJCQkJCQlkb3VibGUgZCA9IGRhdGEuZ2V0KHBvcyk7DQorCQkJCQkJZGVsdGFFID0gZC0gKChTRUlSTGFiZWxWYWx1ZSljdXJyZW50VmFsdWUpLmdldEUoKTsNCisJCQkJCX0vLyBFDQorCQkJCX0NCisJCQkJDQorCQkJCS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLw0KKwkJCQkvLyBJDQorCQkJCS8vIE1heSBiZSBtb3JlIHRoYW4gb25lIHR5cGUgb2YgSSBzdGF0ZSAoSWEsIElsLCBldGMpDQorCQkJCS8vIGZvciBub3cganVzdCBhZGQgdGhlbSBhbGwgdXANCisJCQkJLy8NCisJCQkJaW50IG51bUlzdGF0ZXMgPSBJX0tFWV9TRVQuc2l6ZSgpOw0KKwkJCQlpZihJX0tFWV9TRVQhPW51bGwpIHsNCisJCQkJCUl0ZXJhdG9yPFN0cmluZz4gaXRlciA9IElfS0VZX1NFVC5pdGVyYXRvcigpOw0KKwkJCQkJZG91YmxlIGRJID0gMDsNCisJCQkJCXdoaWxlKGl0ZXIuaGFzTmV4dCgpKSB7DQorCQkJCQkJU3RyaW5nIGlLZXkgPSBpdGVyLm5leHQoKTsNCisJCQkJCQlpZihzdHJlYW1lci5nZXRDdXJyZW50Um93KGFkbWluTGV2ZWwsIGlLZXkpIDwgZmlsZUxpbmVDb3VudGVyKQ0KKwkJCQkJCQlkYXRhID0gc3RyZWFtZXIuc3RyZWFtUm93KGFkbWluTGV2ZWwsIGlLZXkpOw0KKwkJCQkJCWVsc2UgZGF0YSA9IHN0cmVhbWVyLmdldExhc3RGZXRjaGVkUm93KGFkbWluTGV2ZWwsIGlLZXkpOw0KKwkJDQorCQkJCQkJaWYoZGF0YSAhPSBudWxsICYmIHBvcyA+PTApIHsJDQorCQkJCQkJCWRvdWJsZSBkID0gZGF0YS5nZXQocG9zKTsNCisJCQkJCQkJZEkgKz0gZDsNCisJCQkJCQl9DQorCQkJCQl9DQorCQkJCQlkZWx0YUkgPSBkSSAtICgoU0lMYWJlbFZhbHVlKWN1cnJlbnRWYWx1ZSkuZ2V0SSgpOw0KKwkJCQl9IGVsc2Ugew0KKwkJCQkJQWN0aXZhdG9yLmxvZ0luZm9ybWF0aW9uKCJJIEtleXMgYXJlIGFsbCBOdWxsICEhIik7DQorCQkJCX0NCisJCQkJLy9pDQorCQkJCS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLw0KKwkJCQkNCisJCQ0KKwkJCQlpZiAoZGlzZWFzZVR5cGUuZXF1YWxzKElNUE9SVF9UWVBFX1NJUikgfHwgZGlzZWFzZVR5cGUuZXF1YWxzKElNUE9SVF9UWVBFX1NFSVIpKSB7DQorCQkJCQlpZihzdHJlYW1lci5nZXRDdXJyZW50Um93KGFkbWluTGV2ZWwsIGxhYmVsUikgPCBmaWxlTGluZUNvdW50ZXIpDQorCQkJCQkJZGF0YSA9IHN0cmVhbWVyLnN0cmVhbVJvdyhhZG1pbkxldmVsLCBsYWJlbFIpOw0KKwkJCQkJZWxzZSBkYXRhID0gc3RyZWFtZXIuZ2V0TGFzdEZldGNoZWRSb3coYWRtaW5MZXZlbCwgbGFiZWxSKTsNCisJCQ0KKwkJCQkJaWYoZGF0YSAhPSBudWxsICYmIHBvcyA+PTApIHsNCisJCQkJCQlkb3VibGUgZCA9IGRhdGEuZ2V0KHBvcyk7DQorCQkJCQkJZGVsdGFSID0gZCAtICgoU0lSTGFiZWxWYWx1ZSljdXJyZW50VmFsdWUpLmdldFIoKTsNCisJCQkJCX0vLyBSDQorCQkJCX0NCisJCQl9IC8vIGFkbWluIGxldmVsID4gLTENCisJCQkNCisJCQlpZiAoZGlzZWFzZVR5cGUuZXF1YWxzKElNUE9SVF9UWVBFX1NJKSkgew0KKwkJCQkoKFNJTGFiZWxWYWx1ZSlkZWx0YVN0YXRlKS5zZXRTKGRlbHRhUyk7DQorCQkJCSgoU0lMYWJlbFZhbHVlKWRlbHRhU3RhdGUpLnNldEkoZGVsdGFJKTsNCisJCQkJKChTSUxhYmVsVmFsdWUpZGVsdGFTdGF0ZSkuc2V0SW5jaWRlbmNlKGluY2lkZW5jZSk7DQorCQkJCXJldHVybiBuZXcgU0lMYWJlbFZhbHVlSW1wbCggMC4wICwgMC4wLCAwLjAsIDAuMCk7DQorCQkJfSBlbHNlIGlmIChkaXNlYXNlVHlwZS5lcXVhbHMoSU1QT1JUX1RZUEVfU0lSKSkgew0KKwkJCQkoKFNJUkxhYmVsVmFsdWUpZGVsdGFTdGF0ZSkuc2V0UyhkZWx0YVMpOw0KKwkJCQkoKFNJUkxhYmVsVmFsdWUpZGVsdGFTdGF0ZSkuc2V0SShkZWx0YUkpOw0KKwkJCQkoKFNJUkxhYmVsVmFsdWUpZGVsdGFTdGF0ZSkuc2V0UihkZWx0YVIpOw0KKwkJCQkoKFNJUkxhYmVsVmFsdWUpZGVsdGFTdGF0ZSkuc2V0SW5jaWRlbmNlKGluY2lkZW5jZSk7DQorCQkJCXJldHVybiBuZXcgU0lSTGFiZWxWYWx1ZUltcGwoMC4wLCAwLjAgLCAwLjAsIDAuMCwgMC4wKTsNCisJCQl9IGVsc2UgaWYgKGRpc2Vhc2VUeXBlLmVxdWFscyhJTVBPUlRfVFlQRV9TRUlSKSkgew0KKwkJCQkoKFNFSVJMYWJlbFZhbHVlKWRlbHRhU3RhdGUpLnNldFMoZGVsdGFTKTsNCisJCQkJKChTRUlSTGFiZWxWYWx1ZSlkZWx0YVN0YXRlKS5zZXRFKGRlbHRhRSk7DQorCQkJCSgoU0VJUkxhYmVsVmFsdWUpZGVsdGFTdGF0ZSkuc2V0SShkZWx0YUkpOw0KKwkJCQkoKFNFSVJMYWJlbFZhbHVlKWRlbHRhU3RhdGUpLnNldFIoZGVsdGFSKTsNCisJCQkJKChTRUlSTGFiZWxWYWx1ZSlkZWx0YVN0YXRlKS5zZXRJbmNpZGVuY2UoaW5jaWRlbmNlKTsNCisJCQkJcmV0dXJuIG5ldyBTRUlSTGFiZWxWYWx1ZUltcGwoMC4wLCAwLjAsIDAuMCAsIDAuMCwgMC4wLCAwLjApOw0KKwkJCX0gZWxzZSB7DQorCQkJCXRocm93IG5ldyBVbnN1cHBvcnRlZE9wZXJhdGlvbkV4Y2VwdGlvbigiRXh0ZXJuYWxEYXRhU291cmNlIEludmFsaWQgVHlwZSAiK2Rpc2Vhc2VUeXBlKyIgbXVzdCBiZSBTSSwgU0lSLCBvciBTRUlSIik7DQorCQkJfQ0KKwkJCS8vCQl9ZWxzZSB7DQorCQkJLy8JCQkvLyBpZiBkYXRhID09IG51bGwNCisJCQkvLwkJCS8vIG5vIGRhdGEgZm9yIGxvY2F0aW9uIGluIHF1ZXN0aW9ucw0KKwkJCS8vCQkJaWYgKGRpc2Vhc2VUeXBlLmVxdWFscyhJTVBPUlRfVFlQRV9TSSkpIHsNCisJCQkvLwkJCQlyZXR1cm4gbmV3IFNJTGFiZWxWYWx1ZUltcGwoMC4wICwgMC4wLCAwLjAsIDAuMCk7DQorCQkJLy8JCQl9IGVsc2UgaWYgKGRpc2Vhc2VUeXBlLmVxdWFscyhJTVBPUlRfVFlQRV9TSVIpKSB7DQorCQkJLy8JCQkJcmV0dXJuIG5ldyBTSVJMYWJlbFZhbHVlSW1wbCgwLjAsIDAuMCAsIDAuMCwgMC4wLCAwLjApOw0KKwkJCS8vCQkJfSBlbHNlIGlmIChkaXNlYXNlVHlwZS5lcXVhbHMoSU1QT1JUX1RZUEVfU0VJUikpIHsNCisJCQkvLwkJCQlyZXR1cm4gbmV3IFNFSVJMYWJlbFZhbHVlSW1wbCggMC4wLCAwLjAsIDAuMCAsIDAuMCwgMC4wLCAwLjApOw0KKwkJCS8vCQkJfSBlbHNlIHsNCisJCQkvLwkJCQl0aHJvdyBuZXcgVW5zdXBwb3J0ZWRPcGVyYXRpb25FeGNlcHRpb24oIkV4dGVybmFsRGF0YVNvdXJjZSBJbnZhbGlkIFR5cGUgIitkaXNlYXNlVHlwZSsiIG11c3QgYmUgU0ksIFNJUiwgb3IgU0VJUiIpOw0KKwkJCS8vCQkJfQ0KKwkJCS8vCQl9DQorDQorCQl9IGNhdGNoKElPRXhjZXB0aW9uIGlvZSkgew0KKwkJCUFjdGl2YXRvci5sb2dFcnJvcigiRXhjZXB0aW9uIHN0cmVhbWluZyBkYXRhIiwgaW9lKTsNCisJCX0NCisJCXJldHVybiBudWxsOw0KKwl9IC8vIGltcG9ydERpc2Vhc2VEYXRhDQorDQorDQorCS8qKg0KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5pbXBsLkRpc2Vhc2VNb2RlbEltcGwjY3JlYXRlRGlzZWFzZU1vZGVsTGFiZWwoKQ0KKwkgKi8NCisJQE92ZXJyaWRlDQorCXB1YmxpYyBEaXNlYXNlTW9kZWxMYWJlbCBjcmVhdGVEaXNlYXNlTW9kZWxMYWJlbChTdHJpbmcgcG9wdWxhdGlvbklkZW50aWZpZXIpIHsNCisJCWlmIChkaXNlYXNlVHlwZT09SU1QT1JUX1RZUEVfU0kpIHJldHVybiBTdGFuZGFyZEZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZVNJTGFiZWwoKTsNCisJCWlmIChkaXNlYXNlVHlwZT09SU1QT1JUX1RZUEVfU0lSKSByZXR1cm4gU3RhbmRhcmRGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVTSVJMYWJlbCgpOw0KKwkJLy8gZWxzZSBkZWZhdWx0DQorCQlyZXR1cm4gU3RhbmRhcmRGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVTRUlSTGFiZWwoKTsNCisJfSAvLyBjcmVhdGVEaXNlYXNlTW9kZWxMYWJlbA0KKw0KKwkvKioNCisJICogDQorCSAqLw0KKwlAT3ZlcnJpZGUNCisJcHVibGljIERpc2Vhc2VNb2RlbExhYmVsVmFsdWUgY3JlYXRlRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZShTdHJpbmcgcG9wdWxhdGlvbklkZW50aWZpZXIpIHsNCisJCWlmKGRpc2Vhc2VUeXBlPT1JTVBPUlRfVFlQRV9TSSkgcmV0dXJuIFN0YW5kYXJkRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlU0lMYWJlbFZhbHVlKCk7DQorCQlpZihkaXNlYXNlVHlwZT09SU1QT1JUX1RZUEVfU0lSKSByZXR1cm4gU3RhbmRhcmRGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVTSVJMYWJlbFZhbHVlKCk7DQorCQlyZXR1cm4gU3RhbmRhcmRGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVTRUlSTGFiZWxWYWx1ZSgpOw0KKwl9IC8vIGNyZWF0ZURpc2Vhc2VNb2RlbExhYmVsVmFsdWUNCisNCisJDQorCS8qKg0KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5pbXBsLkRpc2Vhc2VNb2RlbEltcGwjY3JlYXRlSW5mZWN0b3IoKQ0KKwkgKi8NCisJQE92ZXJyaWRlDQorCXB1YmxpYyBJbmZlY3RvciBjcmVhdGVJbmZlY3RvcigpIHsNCisJCXRocm93IG5ldyBVbnN1cHBvcnRlZE9wZXJhdGlvbkV4Y2VwdGlvbigpOw0KKwl9IC8vIGNyZWF0ZUluZmVjdG9yDQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogDQorCSAqIEBnZW5lcmF0ZWQgTk9UDQorCSAqLw0KKwlwdWJsaWMgdm9pZCBhZGRUb1RvdGFsQXJlYShkb3VibGUgYXJlYSkgew0KKwkJdG90YWxBcmVhICs9IGFyZWE7DQorCX0gLy8gYWRkVG9Ub3RhbEFyZWENCisNCisNCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiANCisJICogQGdlbmVyYXRlZCBOT1QNCisJICovDQorCXB1YmxpYyB2b2lkIGFkZFRvVG90YWxQb3B1bGF0aW9uQ291bnQoZG91YmxlIHBvcHVsYXRpb25Db3VudCkgew0KKwkJdG90YWxQb3B1bGF0aW9uQ291bnQgKz0gcG9wdWxhdGlvbkNvdW50Ow0KKwl9IC8vIGFkZFRvVG90YWxQb3B1bGF0aW9uQ291bnQNCisNCisJLyoqDQorCSAqIEBwYXJhbSBwb3B1bGF0aW9uTGFiZWwNCisJICogICAgICAgICAgICB0aGUgcG9wdWxhdGlvbiBsYWJlbCB0aGF0IGxhYmVscyB0aGUgbm9kZQ0KKwkgKiBAcmV0dXJuIHRoZSBhcmVhIG9mIHRoZSBub2RlIGFzc29jaWF0ZWQgd2l0aCB0aGUgbGFiZWwNCisJICovDQorCXB1YmxpYyBkb3VibGUgZ2V0QXJlYShmaW5hbCBQb3B1bGF0aW9uTGFiZWwgcG9wdWxhdGlvbkxhYmVsKSB7DQorCQlkb3VibGUgcmV0VmFsdWUgPSAwLjA7DQorDQorCQkvLyBUaGUgcG9wdWxhdGlvbiBsYWJlbCBjb3VsZCBoYXZlIGFuIGFyZWEgc3BlY2lmaWVkIGZvciB0aGUgcG9wdWxhdGlvbg0KKwkJLy8gdGhhdCB3ZSBzaG91bGQgdXNlIGluc3RlYWQgb2YgdGhlIGFyZWEgb2YgdGhlIHJlZ2lvbiBsYWJlbGVkIGJ5IHRoZQ0KKwkJLy8gcG9wdWxhdGlvbiBsYWJlbC4gVGhpcyB2YWx1ZSB3b3VsZCBiZSBzcGVjaWZpZWQgaWYgdGhlIHBvcHVsYXRpb24gd2FzDQorCQkvLyBkZW5zZWx5IHBhY2tlZCBpbnRvIGEgc21hbGwgYXJlYSBvZiB0aGUgbGFyZ2VyIHJlZ2lvbiwgZm9yIGluc3RhbmNlDQorCQkvLyBsaWtlIGEgY2l0eSBpbiBhbiBvdGhlcndpc2UgbGFyZ2UgZGVzZXJ0Lg0KKw0KKwkJcmV0VmFsdWUgPSBwb3B1bGF0aW9uTGFiZWwuZ2V0UG9wdWxhdGVkQXJlYSgpOw0KKw0KKwkJLy8gSXMgdGhlcmUgYW4gYXJlYSBzcGVjaWZpZWQgZm9yIHRoZSBwb3B1bGF0aW9uPw0KKwkJaWYgKHJldFZhbHVlID09IDAuMCkgew0KKwkJCS8vIE5vDQorCQkJLy8gT2ssIGdvIGZpbmQgdGhlIGFyZWEgbGFiZWwgYW5kIHJldHVybiB0aGUgYXJlYSBvZiB0aGUgcmVnaW9uDQorCQkJZm9yIChmaW5hbCBJdGVyYXRvcjxOb2RlTGFiZWw+IGxhYmVsSXRlciA9IHBvcHVsYXRpb25MYWJlbC5nZXROb2RlKCkNCisJCQkJCS5nZXRMYWJlbHMoKS5pdGVyYXRvcigpOyBsYWJlbEl0ZXIuaGFzTmV4dCgpOykgew0KKwkJCQlmaW5hbCBOb2RlTGFiZWwgbm9kZUxhYmVsID0gbGFiZWxJdGVyLm5leHQoKTsNCisJCQkJLy8gSXMgdGhpcyBhbiBhcmVhIGxhYmVsPw0KKwkJCQlpZiAobm9kZUxhYmVsIGluc3RhbmNlb2YgQXJlYUxhYmVsKSB7DQorCQkJCQkvLyBZZXMNCisJCQkJCWZpbmFsIEFyZWFMYWJlbCBhcmVhTGFiZWwgPSAoQXJlYUxhYmVsKSBub2RlTGFiZWw7DQorCQkJCQlyZXRWYWx1ZSA9IGFyZWFMYWJlbC5nZXRDdXJyZW50QXJlYVZhbHVlKCkuZ2V0QXJlYSgpOw0KKwkJCQkJYnJlYWs7DQorCQkJCX0NCisJCQl9IC8vIGZvcg0KKwkJfSAvLyBJZiBubyBwb3B1bGF0aW9uIGFyZWEgc3BlY2lmaWVkDQorDQorCQlyZXR1cm4gcmV0VmFsdWU7DQorCX0gLy8gZ2V0QXJlYQ0KKw0KKw0KKwkvKioNCisJICogQHBhcmFtIHBvcHVsYXRpb25MYWJlbA0KKwkgKiBAcGFyYW0gYXJlYQ0KKwkgKi8NCisJcHJpdmF0ZSB2b2lkIHJlcG9ydEJhZEFyZWFWYWx1ZShmaW5hbCBQb3B1bGF0aW9uTGFiZWwgcG9wdWxhdGlvbkxhYmVsLA0KKwkJCWRvdWJsZSBhcmVhKSB7DQorCQkvLyBUaGUgYmFkIHZhbHVlIGNvdWxkIGJlIHNwZWNpZmllZCBmb3IgdGhlIG5vZGUgb3IgYmUgYW4gb3ZlcmlkZQ0KKwkJLy8gdmFsdWUgc3BlY2lmaWVkIGZvciB0aGUgcG9wdWxhdGlvbi4NCisJCS8vIElzIHRoZSBiYWQgdmFsdWUgZnJvbSB0aGUgbm9kZT8NCisJCWlmIChwb3B1bGF0aW9uTGFiZWwuZ2V0UG9wdWxhdGVkQXJlYSgpID09IDAuMCkgew0KKwkJCS8vIFllcw0KKwkJCUFjdGl2YXRvci5sb2dFcnJvcigiVGhlIGFyZWEgdmFsdWUgb2YgXCIiICsgYXJlYQ0KKwkJCQkJKyAiXCIgc3BlY2lmaWVkIGZvciBcIiINCisJCQkJCSsgcG9wdWxhdGlvbkxhYmVsLmdldE5vZGUoKS50b1N0cmluZygpDQorCQkJCQkrICJcIiBpcyBub3QgZ3JlYXRlciB0aGFuIHplcm8gKDAuMCkiLCBudWxsKTsNCisJCX0gLy8gaWYgYmFkIHZhbHVlIGZvciBub2RlIGFyZWENCisJCWVsc2Ugew0KKwkJCUFjdGl2YXRvci5sb2dFcnJvcigiVGhlIGFyZWEgdmFsdWUgb2YgXCIiICsgYXJlYQ0KKwkJCQkJKyAiXCIgc3BlY2lmaWVkIGZvciB0aGUgcG9wdWxhdGlvbiBcIiINCisJCQkJCSsgcG9wdWxhdGlvbkxhYmVsLmdldE5hbWUoKSArICJcIiBmb3IgdGhlIHJlZ2lvbiBcIiINCisJCQkJCSsgcG9wdWxhdGlvbkxhYmVsLmdldE5vZGUoKS50b1N0cmluZygpDQorCQkJCQkrICJcIiBpcyBub3QgZ3JlYXRlciB0aGFuIHplcm8gKDAuMCkiLCBudWxsKTsNCisJCX0NCisJfSAvLyByZXBvcnRCYWRBcmVhVmFsdWUNCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlAT3ZlcnJpZGUNCisJcHJvdGVjdGVkIEVDbGFzcyBlU3RhdGljQ2xhc3MoKSB7DQorCQlyZXR1cm4gRXh0ZXJuYWxEYXRhU291cmNlUGFja2FnZS5MaXRlcmFscy5FWFRFUk5BTF9EQVRBX1NPVVJDRV9ESVNFQVNFX01PREVMOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIFN0cmluZyBnZXREYXRhUGF0aCgpIHsNCisJCXJldHVybiBkYXRhUGF0aDsNCisJfQ0KKw0KKw0KKw0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyB2b2lkIHNldERhdGFQYXRoKFN0cmluZyBuZXdEYXRhUGF0aCkgew0KKwkJU3RyaW5nIG9sZERhdGFQYXRoID0gZGF0YVBhdGg7DQorCQlkYXRhUGF0aCA9IG5ld0RhdGFQYXRoOw0KKwkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQ0KKwkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIEV4dGVybmFsRGF0YVNvdXJjZVBhY2thZ2UuRVhURVJOQUxfREFUQV9TT1VSQ0VfRElTRUFTRV9NT0RFTF9fREFUQV9QQVRILCBvbGREYXRhUGF0aCwgZGF0YVBhdGgpKTsNCisJfQ0KKw0KKw0KKw0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBTdHJpbmcgZ2V0RGlzZWFzZVR5cGUoKSB7DQorCQlyZXR1cm4gZGlzZWFzZVR5cGU7DQorCX0NCisNCisNCisNCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgdm9pZCBzZXREaXNlYXNlVHlwZShTdHJpbmcgbmV3RGlzZWFzZVR5cGUpIHsNCisJCVN0cmluZyBvbGREaXNlYXNlVHlwZSA9IGRpc2Vhc2VUeXBlOw0KKwkJZGlzZWFzZVR5cGUgPSBuZXdEaXNlYXNlVHlwZTsNCisJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkNCisJCQllTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBFeHRlcm5hbERhdGFTb3VyY2VQYWNrYWdlLkVYVEVSTkFMX0RBVEFfU09VUkNFX0RJU0VBU0VfTU9ERUxfX0RJU0VBU0VfVFlQRSwgb2xkRGlzZWFzZVR5cGUsIGRpc2Vhc2VUeXBlKSk7DQorCX0NCisNCisNCisNCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlAT3ZlcnJpZGUNCisJcHVibGljIE9iamVjdCBlR2V0KGludCBmZWF0dXJlSUQsIGJvb2xlYW4gcmVzb2x2ZSwgYm9vbGVhbiBjb3JlVHlwZSkgew0KKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsNCisJCQljYXNlIEV4dGVybmFsRGF0YVNvdXJjZVBhY2thZ2UuRVhURVJOQUxfREFUQV9TT1VSQ0VfRElTRUFTRV9NT0RFTF9fREFUQV9QQVRIOg0KKwkJCQlyZXR1cm4gZ2V0RGF0YVBhdGgoKTsNCisJCQljYXNlIEV4dGVybmFsRGF0YVNvdXJjZVBhY2thZ2UuRVhURVJOQUxfREFUQV9TT1VSQ0VfRElTRUFTRV9NT0RFTF9fRElTRUFTRV9UWVBFOg0KKwkJCQlyZXR1cm4gZ2V0RGlzZWFzZVR5cGUoKTsNCisJCX0NCisJCXJldHVybiBzdXBlci5lR2V0KGZlYXR1cmVJRCwgcmVzb2x2ZSwgY29yZVR5cGUpOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJQE92ZXJyaWRlDQorCXB1YmxpYyB2b2lkIGVTZXQoaW50IGZlYXR1cmVJRCwgT2JqZWN0IG5ld1ZhbHVlKSB7DQorCQlzd2l0Y2ggKGZlYXR1cmVJRCkgew0KKwkJCWNhc2UgRXh0ZXJuYWxEYXRhU291cmNlUGFja2FnZS5FWFRFUk5BTF9EQVRBX1NPVVJDRV9ESVNFQVNFX01PREVMX19EQVRBX1BBVEg6DQorCQkJCXNldERhdGFQYXRoKChTdHJpbmcpbmV3VmFsdWUpOw0KKwkJCQlyZXR1cm47DQorCQkJY2FzZSBFeHRlcm5hbERhdGFTb3VyY2VQYWNrYWdlLkVYVEVSTkFMX0RBVEFfU09VUkNFX0RJU0VBU0VfTU9ERUxfX0RJU0VBU0VfVFlQRToNCisJCQkJc2V0RGlzZWFzZVR5cGUoKFN0cmluZyluZXdWYWx1ZSk7DQorCQkJCXJldHVybjsNCisJCX0NCisJCXN1cGVyLmVTZXQoZmVhdHVyZUlELCBuZXdWYWx1ZSk7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlAT3ZlcnJpZGUNCisJcHVibGljIHZvaWQgZVVuc2V0KGludCBmZWF0dXJlSUQpIHsNCisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7DQorCQkJY2FzZSBFeHRlcm5hbERhdGFTb3VyY2VQYWNrYWdlLkVYVEVSTkFMX0RBVEFfU09VUkNFX0RJU0VBU0VfTU9ERUxfX0RBVEFfUEFUSDoNCisJCQkJc2V0RGF0YVBhdGgoREFUQV9QQVRIX0VERUZBVUxUKTsNCisJCQkJcmV0dXJuOw0KKwkJCWNhc2UgRXh0ZXJuYWxEYXRhU291cmNlUGFja2FnZS5FWFRFUk5BTF9EQVRBX1NPVVJDRV9ESVNFQVNFX01PREVMX19ESVNFQVNFX1RZUEU6DQorCQkJCXNldERpc2Vhc2VUeXBlKERJU0VBU0VfVFlQRV9FREVGQVVMVCk7DQorCQkJCXJldHVybjsNCisJCX0NCisJCXN1cGVyLmVVbnNldChmZWF0dXJlSUQpOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJQE92ZXJyaWRlDQorCXB1YmxpYyBib29sZWFuIGVJc1NldChpbnQgZmVhdHVyZUlEKSB7DQorCQlzd2l0Y2ggKGZlYXR1cmVJRCkgew0KKwkJCWNhc2UgRXh0ZXJuYWxEYXRhU291cmNlUGFja2FnZS5FWFRFUk5BTF9EQVRBX1NPVVJDRV9ESVNFQVNFX01PREVMX19EQVRBX1BBVEg6DQorCQkJCXJldHVybiBEQVRBX1BBVEhfRURFRkFVTFQgPT0gbnVsbCA/IGRhdGFQYXRoICE9IG51bGwgOiAhREFUQV9QQVRIX0VERUZBVUxULmVxdWFscyhkYXRhUGF0aCk7DQorCQkJY2FzZSBFeHRlcm5hbERhdGFTb3VyY2VQYWNrYWdlLkVYVEVSTkFMX0RBVEFfU09VUkNFX0RJU0VBU0VfTU9ERUxfX0RJU0VBU0VfVFlQRToNCisJCQkJcmV0dXJuIERJU0VBU0VfVFlQRV9FREVGQVVMVCA9PSBudWxsID8gZGlzZWFzZVR5cGUgIT0gbnVsbCA6ICFESVNFQVNFX1RZUEVfRURFRkFVTFQuZXF1YWxzKGRpc2Vhc2VUeXBlKTsNCisJCX0NCisJCXJldHVybiBzdXBlci5lSXNTZXQoZmVhdHVyZUlEKTsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCUBPdmVycmlkZQ0KKwlwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkgew0KKwkJaWYgKGVJc1Byb3h5KCkpIHJldHVybiBzdXBlci50b1N0cmluZygpOw0KKw0KKwkJU3RyaW5nQnVmZmVyIHJlc3VsdCA9IG5ldyBTdHJpbmdCdWZmZXIoc3VwZXIudG9TdHJpbmcoKSk7DQorCQlyZXN1bHQuYXBwZW5kKCIgKGRhdGFQYXRoOiAiKTsgLy8kTk9OLU5MUy0xJA0KKwkJcmVzdWx0LmFwcGVuZChkYXRhUGF0aCk7DQorCQlyZXN1bHQuYXBwZW5kKCIsIGRpc2Vhc2VUeXBlOiAiKTsgLy8kTk9OLU5MUy0xJA0KKwkJcmVzdWx0LmFwcGVuZChkaXNlYXNlVHlwZSk7DQorCQlyZXN1bHQuYXBwZW5kKCcpJyk7DQorCQlyZXR1cm4gcmVzdWx0LnRvU3RyaW5nKCk7DQorCX0NCisNCisNCisJLyoqDQorCSAqICBTaW5jZSBkYXRhIGlzIHJlYWQgZnJvbSBhIGZpbGUgd2UgZG9uJ3QgaGF2ZSB0byB0YWtlIGludG8gYWNjb3VudA0KKwkgKiAgIGJpcnRoL2RlYXRocyBldGMgZnJvbSBvdGhlciBkZWNvcmF0b3JzLCB0aGUgZGF0YSBpcyBhbHJlYWR5IHN1cHBvc2VkDQorCSAqCSB0byBoYW5kbGUgdGhhdC4NCisJICovDQorDQorCXB1YmxpYyB2b2lkIGFwcGx5RXh0ZXJuYWxEZWx0YXMoU1RFTVRpbWUgdGltZSwgbG9uZyB0aW1lRGVsdGEsDQorCQkJRUxpc3Q8RHluYW1pY0xhYmVsPiBsYWJlbHMpIHsNCisJCS8vIE5vdGhpbmcgdG8gZG8uDQorDQorCX0NCisNCisNCisJcHVibGljIHN5bmNocm9uaXplZCB2b2lkIGNhbGN1bGF0ZURlbHRhKFNURU1UaW1lIHRpbWUsIGxvbmcgdGltZURlbHRhLA0KKwkJCUVMaXN0PER5bmFtaWNMYWJlbD4gbGFiZWxzKSB7DQorDQorCQkNCisJCWlmKGZpcnN0U1RFTVRpbWUgPT0gbnVsbCB8fCB0aW1lLmdldFRpbWUoKS5lcXVhbHMoZmlyc3RTVEVNVGltZS5nZXRUaW1lKCkpKQ0KKwkJCWZpbGVMaW5lQ291bnRlciA9IDA7DQorCQllbHNlDQorCQkJZmlsZUxpbmVDb3VudGVyID0gKGludCkoKHRpbWUuZ2V0VGltZSgpLmdldFRpbWUoKSAtIGZpcnN0U1RFTVRpbWUuZ2V0VGltZSgpLmdldFRpbWUoKSkgLyB0aW1lRGVsdGEpOw0KKw0KKwkJaWYoZmlyc3RTVEVNVGltZSA9PSBudWxsKSBmaXJzdFNURU1UaW1lID0gdGltZTsNCisNCisJCS8vIEl0ZXJhdGUgdGhyb3VnaCBlYWNoIG9mIHRoZSBsYWJlbHMgd2UgbmVlZCB0byB1cGRhdGUuDQorCQlib29sZWFuIGZpcnN0TGFiZWwgPSB0cnVlOw0KKwkJZm9yIChmaW5hbCBEeW5hbWljTGFiZWwgZHluTGFiZWwgOiBsYWJlbHMpIHsNCisJCQlmaW5hbCBTdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsIGRpc2Vhc2VMYWJlbCA9IChTdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsKSBkeW5MYWJlbDsNCisNCisNCisNCisJCQlhc3NlcnQgZGlzZWFzZUxhYmVsLmdldFBvcHVsYXRpb25MYWJlbCgpLmdldFBvcHVsYXRpb25JZGVudGlmaWVyKCkNCisJCQkuZXF1YWxzKGdldFBvcHVsYXRpb25JZGVudGlmaWVyKCkpOw0KKw0KKwkJCS8vIFRoaXMgaXMgdGhlIGN1cnJlbnQgc3RhdGUgb2YgdGhlIGRpc2Vhc2UgZm9yIHRoaXMgbGFiZWwNCisJCQlmaW5hbCBTdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsVmFsdWUgZGVsdGFTdGF0ZSA9IChTdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsVmFsdWUpZGlzZWFzZUxhYmVsDQorCQkJLmdldERlbHRhVmFsdWUoKTsNCisNCisNCisJCQkvLyAyKSBUaGlzIHdpbGwgc2V0IHRoZSBkZWx0YQ0KKwkJCWZpbmFsIFN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZSBudWxsQWRkaXRpb25zID0gaW1wb3J0RGlzZWFzZURhdGEoZGVsdGFTdGF0ZSwgZGlzZWFzZUxhYmVsLCB0aW1lLCB0aW1lRGVsdGEsIGZpcnN0TGFiZWwpOw0KKw0KKw0KKwkJCS8vIFRoaXMgd2lsbCBiZSB0aGUgc3RhdGUgdGhhdCB3ZSBjb21wdXRlLg0KKwkJCS8vCQkJZmluYWwgU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbFZhbHVlIG5leHRTdGF0ZSA9IChTdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsVmFsdWUpZGlzZWFzZUxhYmVsLmdldE5leHRWYWx1ZSgpOw0KKw0KKwkJCS8vIEluaXRpYWxpemUgdGhlIG5leHQgc3RhdGUgZnJvbSB0aGUgY3VycmVudCBzdGF0ZSBhbmQgdGhlbiB3ZSdsbA0KKwkJCS8vIG1ha2UgdGhlIGNoYW5nZXMgdG8gdGhhdC4NCisJCQkvLyBuZXh0U3RhdGUuc2V0KGN1cnJlbnRTdGF0ZSk7DQorDQorDQorDQorCQkJLy8JCQlhc3NlcnQgbmV4dFN0YXRlLnNhbmUoKToiZGlzZWFzZSBzdGF0ZSBpcyBpbnNhbmUgYWZ0ZXIgc3VidHJhY3RpbmcgZGVhdGhzOiAiK25leHRTdGF0ZS50b1N0cmluZygpOw0KKw0KKw0KKwkJCS8vIFRoZSBuZXh0IHZhbHVlIGlzIHZhbGlkIG5vdy4NCisJCQkvLwkJCWRpc2Vhc2VMYWJlbC5zZXROZXh0VmFsdWVWYWxpZCh0cnVlKTsNCisNCisJCQlmaXJzdExhYmVsID0gZmFsc2U7DQorCQl9IC8vIGZvcg0KKwl9DQorDQorDQorDQorDQorCXB1YmxpYyB2b2lkIGRvTW9kZWxTcGVjaWZpY0FkanVzdG1lbnRzKExhYmVsVmFsdWUgbGFiZWwpIHsNCisJCS8vIFRPRE8gQXV0by1nZW5lcmF0ZWQgbWV0aG9kIHN0dWINCisNCisJfQ0KKw0KKw0KKwlwdWJsaWMgYm9vbGVhbiBpc0RldGVybWluaXN0aWMoKSB7DQorCQlyZXR1cm4gdHJ1ZTsNCisJfQ0KKw0KKw0KKw0KKw0KKw0KKwlAT3ZlcnJpZGUNCisJcHVibGljIFN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZSBjb21wdXRlRGlzZWFzZURlbHRhcyhTVEVNVGltZSB0aW1lLA0KKwkJCVN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZSBjdXJyZW50U3RhdGUsDQorCQkJU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbCBkaXNlYXNlTGFiZWwsIGxvbmcgdGltZURlbHRhLA0KKwkJCURpc2Vhc2VNb2RlbExhYmVsVmFsdWUgcmV0dXJuVmFsdWUpIHsNCisJCS8vIE5vdGhpbmcgdG8gZG8NCisJCXJldHVybiAoU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbFZhbHVlKXJldHVyblZhbHVlOw0KKwl9DQorDQorfSAvL0V4dGVybmFsRGF0YVNvdXJjZURpc2Vhc2VNb2RlbEltcGwNCmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leHRlcm5hbGRhdGFzb3VyY2Uvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9leHRlcm5hbGRhdGFzb3VyY2UvaW1wbC9FeHRlcm5hbERhdGFTb3VyY2VGYWN0b3J5SW1wbC5qYXZhIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXh0ZXJuYWxkYXRhc291cmNlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvZXh0ZXJuYWxkYXRhc291cmNlL2ltcGwvRXh0ZXJuYWxEYXRhU291cmNlRmFjdG9yeUltcGwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZDI5NmI0Ci0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXh0ZXJuYWxkYXRhc291cmNlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvZXh0ZXJuYWxkYXRhc291cmNlL2ltcGwvRXh0ZXJuYWxEYXRhU291cmNlRmFjdG9yeUltcGwuamF2YQpAQCAtMCwwICsxLDEwNSBAQAorLy8gRXh0ZXJuYWxEYXRhU291cmNlRmFjdG9yeUltcGwgCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leHRlcm5hbGRhdGFzb3VyY2UuaW1wbDsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNywgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuaW1wbC5FRmFjdG9yeUltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnBsdWdpbi5FY29yZVBsdWdpbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXh0ZXJuYWxkYXRhc291cmNlLio7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4dGVybmFsZGF0YXNvdXJjZS5FeHRlcm5hbERhdGFTb3VyY2VEaXNlYXNlTW9kZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4dGVybmFsZGF0YXNvdXJjZS5FeHRlcm5hbERhdGFTb3VyY2VGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leHRlcm5hbGRhdGFzb3VyY2UuRXh0ZXJuYWxEYXRhU291cmNlUGFja2FnZTsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIG1vZGVsIDxiPkZhY3Rvcnk8L2I+LgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBFeHRlcm5hbERhdGFTb3VyY2VGYWN0b3J5SW1wbCBleHRlbmRzIEVGYWN0b3J5SW1wbCBpbXBsZW1lbnRzIEV4dGVybmFsRGF0YVNvdXJjZUZhY3RvcnkgeworCS8qKgorCSAqIENyZWF0ZXMgdGhlIGRlZmF1bHQgZmFjdG9yeSBpbXBsZW1lbnRhdGlvbi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgc3RhdGljIEV4dGVybmFsRGF0YVNvdXJjZUZhY3RvcnkgaW5pdCgpIHsKKwkJdHJ5IHsKKwkJCUV4dGVybmFsRGF0YVNvdXJjZUZhY3RvcnkgdGhlRXh0ZXJuYWxEYXRhU291cmNlRmFjdG9yeSA9IChFeHRlcm5hbERhdGFTb3VyY2VGYWN0b3J5KUVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVGYWN0b3J5KCJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9leHRlcm5hbGRhdGFzb3VyY2UuZWNvcmUiKTsgLy8kTk9OLU5MUy0xJCAKKwkJCWlmICh0aGVFeHRlcm5hbERhdGFTb3VyY2VGYWN0b3J5ICE9IG51bGwpIHsKKwkJCQlyZXR1cm4gdGhlRXh0ZXJuYWxEYXRhU291cmNlRmFjdG9yeTsKKwkJCX0KKwkJfQorCQljYXRjaCAoRXhjZXB0aW9uIGV4Y2VwdGlvbikgeworCQkJRWNvcmVQbHVnaW4uSU5TVEFOQ0UubG9nKGV4Y2VwdGlvbik7CisJCX0KKwkJcmV0dXJuIG5ldyBFeHRlcm5hbERhdGFTb3VyY2VGYWN0b3J5SW1wbCgpOworCX0KKworCS8qKgorCSAqIENyZWF0ZXMgYW4gaW5zdGFuY2Ugb2YgdGhlIGZhY3RvcnkuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEV4dGVybmFsRGF0YVNvdXJjZUZhY3RvcnlJbXBsKCkgeworCQlzdXBlcigpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBFT2JqZWN0IGNyZWF0ZShFQ2xhc3MgZUNsYXNzKSB7CisJCXN3aXRjaCAoZUNsYXNzLmdldENsYXNzaWZpZXJJRCgpKSB7CisJCQljYXNlIEV4dGVybmFsRGF0YVNvdXJjZVBhY2thZ2UuRVhURVJOQUxfREFUQV9TT1VSQ0VfRElTRUFTRV9NT0RFTDogcmV0dXJuIGNyZWF0ZUV4dGVybmFsRGF0YVNvdXJjZURpc2Vhc2VNb2RlbCgpOworCQkJZGVmYXVsdDoKKwkJCQl0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJUaGUgY2xhc3MgJyIgKyBlQ2xhc3MuZ2V0TmFtZSgpICsgIicgaXMgbm90IGEgdmFsaWQgY2xhc3NpZmllciIpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKKwkJfQorCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFeHRlcm5hbERhdGFTb3VyY2VEaXNlYXNlTW9kZWwgY3JlYXRlRXh0ZXJuYWxEYXRhU291cmNlRGlzZWFzZU1vZGVsKCkgeworCQlFeHRlcm5hbERhdGFTb3VyY2VEaXNlYXNlTW9kZWxJbXBsIGV4dGVybmFsRGF0YVNvdXJjZURpc2Vhc2VNb2RlbCA9IG5ldyBFeHRlcm5hbERhdGFTb3VyY2VEaXNlYXNlTW9kZWxJbXBsKCk7CisJCXJldHVybiBleHRlcm5hbERhdGFTb3VyY2VEaXNlYXNlTW9kZWw7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEV4dGVybmFsRGF0YVNvdXJjZVBhY2thZ2UgZ2V0RXh0ZXJuYWxEYXRhU291cmNlUGFja2FnZSgpIHsKKwkJcmV0dXJuIChFeHRlcm5hbERhdGFTb3VyY2VQYWNrYWdlKWdldEVQYWNrYWdlKCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZGVwcmVjYXRlZAorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlARGVwcmVjYXRlZAorCXB1YmxpYyBzdGF0aWMgRXh0ZXJuYWxEYXRhU291cmNlUGFja2FnZSBnZXRQYWNrYWdlKCkgeworCQlyZXR1cm4gRXh0ZXJuYWxEYXRhU291cmNlUGFja2FnZS5lSU5TVEFOQ0U7CisJfQorCit9IC8vRXh0ZXJuYWxEYXRhU291cmNlRmFjdG9yeUltcGwKZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4dGVybmFsZGF0YXNvdXJjZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL2V4dGVybmFsZGF0YXNvdXJjZS9pbXBsL0V4dGVybmFsRGF0YVNvdXJjZVBhY2thZ2VJbXBsLmphdmEgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leHRlcm5hbGRhdGFzb3VyY2Uvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9leHRlcm5hbGRhdGFzb3VyY2UvaW1wbC9FeHRlcm5hbERhdGFTb3VyY2VQYWNrYWdlSW1wbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIyN2U5MDEKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leHRlcm5hbGRhdGFzb3VyY2Uvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9leHRlcm5hbGRhdGFzb3VyY2UvaW1wbC9FeHRlcm5hbERhdGFTb3VyY2VQYWNrYWdlSW1wbC5qYXZhCkBAIC0wLDAgKzEsMjA2IEBACisvLyBFeHRlcm5hbERhdGFTb3VyY2VQYWNrYWdlSW1wbAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXh0ZXJuYWxkYXRhc291cmNlLmltcGw7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDcsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVBdHRyaWJ1dGU7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzczsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRVBhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLmltcGwuRVBhY2thZ2VJbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5sb2dnZXIuTG9nZ2VyUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXh0ZXJuYWxkYXRhc291cmNlLkV4dGVybmFsRGF0YVNvdXJjZURpc2Vhc2VNb2RlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXh0ZXJuYWxkYXRhc291cmNlLkV4dGVybmFsRGF0YVNvdXJjZUZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4dGVybmFsZGF0YXNvdXJjZS5FeHRlcm5hbERhdGFTb3VyY2VQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZFBhY2thZ2U7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIEFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBtb2RlbCA8Yj5QYWNrYWdlPC9iPi4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgRXh0ZXJuYWxEYXRhU291cmNlUGFja2FnZUltcGwgZXh0ZW5kcyBFUGFja2FnZUltcGwgaW1wbGVtZW50cyBFeHRlcm5hbERhdGFTb3VyY2VQYWNrYWdlIHsKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcml2YXRlIEVDbGFzcyBleHRlcm5hbERhdGFTb3VyY2VEaXNlYXNlTW9kZWxFQ2xhc3MgPSBudWxsOworCisJLyoqCisJICogQ3JlYXRlcyBhbiBpbnN0YW5jZSBvZiB0aGUgbW9kZWwgPGI+UGFja2FnZTwvYj4sIHJlZ2lzdGVyZWQgd2l0aAorCSAqIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRVBhY2thZ2UuUmVnaXN0cnkgRVBhY2thZ2UuUmVnaXN0cnl9IGJ5IHRoZSBwYWNrYWdlCisJICogcGFja2FnZSBVUkkgdmFsdWUuCisJICogPHA+Tm90ZTogdGhlIGNvcnJlY3Qgd2F5IHRvIGNyZWF0ZSB0aGUgcGFja2FnZSBpcyB2aWEgdGhlIHN0YXRpYworCSAqIGZhY3RvcnkgbWV0aG9kIHtAbGluayAjaW5pdCBpbml0KCl9LCB3aGljaCBhbHNvIHBlcmZvcm1zCisJICogaW5pdGlhbGl6YXRpb24gb2YgdGhlIHBhY2thZ2UsIG9yIHJldHVybnMgdGhlIHJlZ2lzdGVyZWQgcGFja2FnZSwKKwkgKiBpZiBvbmUgYWxyZWFkeSBleGlzdHMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FUGFja2FnZS5SZWdpc3RyeQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4dGVybmFsZGF0YXNvdXJjZS5FeHRlcm5hbERhdGFTb3VyY2VQYWNrYWdlI2VOU19VUkkKKwkgKiBAc2VlICNpbml0KCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJpdmF0ZSBFeHRlcm5hbERhdGFTb3VyY2VQYWNrYWdlSW1wbCgpIHsKKwkJc3VwZXIoZU5TX1VSSSwgRXh0ZXJuYWxEYXRhU291cmNlRmFjdG9yeS5lSU5TVEFOQ0UpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByaXZhdGUgc3RhdGljIGJvb2xlYW4gaXNJbml0ZWQgPSBmYWxzZTsKKworCS8qKgorCSAqIENyZWF0ZXMsIHJlZ2lzdGVycywgYW5kIGluaXRpYWxpemVzIHRoZSA8Yj5QYWNrYWdlPC9iPiBmb3IgdGhpcyBtb2RlbCwgYW5kIGZvciBhbnkgb3RoZXJzIHVwb24gd2hpY2ggaXQgZGVwZW5kcy4KKwkgKiAKKwkgKiA8cD5UaGlzIG1ldGhvZCBpcyB1c2VkIHRvIGluaXRpYWxpemUge0BsaW5rIEV4dGVybmFsRGF0YVNvdXJjZVBhY2thZ2UjZUlOU1RBTkNFfSB3aGVuIHRoYXQgZmllbGQgaXMgYWNjZXNzZWQuCisJICogQ2xpZW50cyBzaG91bGQgbm90IGludm9rZSBpdCBkaXJlY3RseS4gSW5zdGVhZCwgdGhleSBzaG91bGQgc2ltcGx5IGFjY2VzcyB0aGF0IGZpZWxkIHRvIG9idGFpbiB0aGUgcGFja2FnZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI2VOU19VUkkKKwkgKiBAc2VlICNjcmVhdGVQYWNrYWdlQ29udGVudHMoKQorCSAqIEBzZWUgI2luaXRpYWxpemVQYWNrYWdlQ29udGVudHMoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgc3RhdGljIEV4dGVybmFsRGF0YVNvdXJjZVBhY2thZ2UgaW5pdCgpIHsKKwkJaWYgKGlzSW5pdGVkKSByZXR1cm4gKEV4dGVybmFsRGF0YVNvdXJjZVBhY2thZ2UpRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RVBhY2thZ2UoRXh0ZXJuYWxEYXRhU291cmNlUGFja2FnZS5lTlNfVVJJKTsKKworCQkvLyBPYnRhaW4gb3IgY3JlYXRlIGFuZCByZWdpc3RlciBwYWNrYWdlCisJCUV4dGVybmFsRGF0YVNvdXJjZVBhY2thZ2VJbXBsIHRoZUV4dGVybmFsRGF0YVNvdXJjZVBhY2thZ2UgPSAoRXh0ZXJuYWxEYXRhU291cmNlUGFja2FnZUltcGwpKEVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldChlTlNfVVJJKSBpbnN0YW5jZW9mIEV4dGVybmFsRGF0YVNvdXJjZVBhY2thZ2VJbXBsID8gRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0KGVOU19VUkkpIDogbmV3IEV4dGVybmFsRGF0YVNvdXJjZVBhY2thZ2VJbXBsKCkpOworCisJCWlzSW5pdGVkID0gdHJ1ZTsKKworCQkvLyBJbml0aWFsaXplIHNpbXBsZSBkZXBlbmRlbmNpZXMKKwkJU3RhbmRhcmRQYWNrYWdlLmVJTlNUQU5DRS5lQ2xhc3MoKTsKKwkJTG9nZ2VyUGFja2FnZS5lSU5TVEFOQ0UuZUNsYXNzKCk7CisKKwkJLy8gQ3JlYXRlIHBhY2thZ2UgbWV0YS1kYXRhIG9iamVjdHMKKwkJdGhlRXh0ZXJuYWxEYXRhU291cmNlUGFja2FnZS5jcmVhdGVQYWNrYWdlQ29udGVudHMoKTsKKworCQkvLyBJbml0aWFsaXplIGNyZWF0ZWQgbWV0YS1kYXRhCisJCXRoZUV4dGVybmFsRGF0YVNvdXJjZVBhY2thZ2UuaW5pdGlhbGl6ZVBhY2thZ2VDb250ZW50cygpOworCisJCS8vIE1hcmsgbWV0YS1kYXRhIHRvIGluZGljYXRlIGl0IGNhbid0IGJlIGNoYW5nZWQKKwkJdGhlRXh0ZXJuYWxEYXRhU291cmNlUGFja2FnZS5mcmVlemUoKTsKKworICAKKwkJLy8gVXBkYXRlIHRoZSByZWdpc3RyeSBhbmQgcmV0dXJuIHRoZSBwYWNrYWdlCisJCUVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLnB1dChFeHRlcm5hbERhdGFTb3VyY2VQYWNrYWdlLmVOU19VUkksIHRoZUV4dGVybmFsRGF0YVNvdXJjZVBhY2thZ2UpOworCQlyZXR1cm4gdGhlRXh0ZXJuYWxEYXRhU291cmNlUGFja2FnZTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUNsYXNzIGdldEV4dGVybmFsRGF0YVNvdXJjZURpc2Vhc2VNb2RlbCgpIHsKKwkJcmV0dXJuIGV4dGVybmFsRGF0YVNvdXJjZURpc2Vhc2VNb2RlbEVDbGFzczsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUF0dHJpYnV0ZSBnZXRFeHRlcm5hbERhdGFTb3VyY2VEaXNlYXNlTW9kZWxfRGF0YVBhdGgoKSB7CisJCXJldHVybiAoRUF0dHJpYnV0ZSlleHRlcm5hbERhdGFTb3VyY2VEaXNlYXNlTW9kZWxFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgwKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUF0dHJpYnV0ZSBnZXRFeHRlcm5hbERhdGFTb3VyY2VEaXNlYXNlTW9kZWxfRGlzZWFzZVR5cGUoKSB7CisJCXJldHVybiAoRUF0dHJpYnV0ZSlleHRlcm5hbERhdGFTb3VyY2VEaXNlYXNlTW9kZWxFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgxKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRXh0ZXJuYWxEYXRhU291cmNlRmFjdG9yeSBnZXRFeHRlcm5hbERhdGFTb3VyY2VGYWN0b3J5KCkgeworCQlyZXR1cm4gKEV4dGVybmFsRGF0YVNvdXJjZUZhY3RvcnkpZ2V0RUZhY3RvcnlJbnN0YW5jZSgpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByaXZhdGUgYm9vbGVhbiBpc0NyZWF0ZWQgPSBmYWxzZTsKKworCS8qKgorCSAqIENyZWF0ZXMgdGhlIG1ldGEtbW9kZWwgb2JqZWN0cyBmb3IgdGhlIHBhY2thZ2UuICBUaGlzIG1ldGhvZCBpcworCSAqIGd1YXJkZWQgdG8gaGF2ZSBubyBhZmZlY3Qgb24gYW55IGludm9jYXRpb24gYnV0IGl0cyBmaXJzdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBjcmVhdGVQYWNrYWdlQ29udGVudHMoKSB7CisJCWlmIChpc0NyZWF0ZWQpIHJldHVybjsKKwkJaXNDcmVhdGVkID0gdHJ1ZTsKKworCQkvLyBDcmVhdGUgY2xhc3NlcyBhbmQgdGhlaXIgZmVhdHVyZXMKKwkJZXh0ZXJuYWxEYXRhU291cmNlRGlzZWFzZU1vZGVsRUNsYXNzID0gY3JlYXRlRUNsYXNzKEVYVEVSTkFMX0RBVEFfU09VUkNFX0RJU0VBU0VfTU9ERUwpOworCQljcmVhdGVFQXR0cmlidXRlKGV4dGVybmFsRGF0YVNvdXJjZURpc2Vhc2VNb2RlbEVDbGFzcywgRVhURVJOQUxfREFUQV9TT1VSQ0VfRElTRUFTRV9NT0RFTF9fREFUQV9QQVRIKTsKKwkJY3JlYXRlRUF0dHJpYnV0ZShleHRlcm5hbERhdGFTb3VyY2VEaXNlYXNlTW9kZWxFQ2xhc3MsIEVYVEVSTkFMX0RBVEFfU09VUkNFX0RJU0VBU0VfTU9ERUxfX0RJU0VBU0VfVFlQRSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJpdmF0ZSBib29sZWFuIGlzSW5pdGlhbGl6ZWQgPSBmYWxzZTsKKworCS8qKgorCSAqIENvbXBsZXRlIHRoZSBpbml0aWFsaXphdGlvbiBvZiB0aGUgcGFja2FnZSBhbmQgaXRzIG1ldGEtbW9kZWwuICBUaGlzCisJICogbWV0aG9kIGlzIGd1YXJkZWQgdG8gaGF2ZSBubyBhZmZlY3Qgb24gYW55IGludm9jYXRpb24gYnV0IGl0cyBmaXJzdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBpbml0aWFsaXplUGFja2FnZUNvbnRlbnRzKCkgeworCQlpZiAoaXNJbml0aWFsaXplZCkgcmV0dXJuOworCQlpc0luaXRpYWxpemVkID0gdHJ1ZTsKKworCQkvLyBJbml0aWFsaXplIHBhY2thZ2UKKwkJc2V0TmFtZShlTkFNRSk7CisJCXNldE5zUHJlZml4KGVOU19QUkVGSVgpOworCQlzZXROc1VSSShlTlNfVVJJKTsKKworCQkvLyBPYnRhaW4gb3RoZXIgZGVwZW5kZW50IHBhY2thZ2VzCisJCVN0YW5kYXJkUGFja2FnZSB0aGVTdGFuZGFyZFBhY2thZ2UgPSAoU3RhbmRhcmRQYWNrYWdlKUVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVQYWNrYWdlKFN0YW5kYXJkUGFja2FnZS5lTlNfVVJJKTsKKworCQkvLyBDcmVhdGUgdHlwZSBwYXJhbWV0ZXJzCisKKwkJLy8gU2V0IGJvdW5kcyBmb3IgdHlwZSBwYXJhbWV0ZXJzCisKKwkJLy8gQWRkIHN1cGVydHlwZXMgdG8gY2xhc3NlcworCQlleHRlcm5hbERhdGFTb3VyY2VEaXNlYXNlTW9kZWxFQ2xhc3MuZ2V0RVN1cGVyVHlwZXMoKS5hZGQodGhlU3RhbmRhcmRQYWNrYWdlLmdldFN0YW5kYXJkRGlzZWFzZU1vZGVsKCkpOworCisJCS8vIEluaXRpYWxpemUgY2xhc3NlcyBhbmQgZmVhdHVyZXM7IGFkZCBvcGVyYXRpb25zIGFuZCBwYXJhbWV0ZXJzCisJCWluaXRFQ2xhc3MoZXh0ZXJuYWxEYXRhU291cmNlRGlzZWFzZU1vZGVsRUNsYXNzLCBFeHRlcm5hbERhdGFTb3VyY2VEaXNlYXNlTW9kZWwuY2xhc3MsICJFeHRlcm5hbERhdGFTb3VyY2VEaXNlYXNlTW9kZWwiLCAhSVNfQUJTVFJBQ1QsICFJU19JTlRFUkZBQ0UsIElTX0dFTkVSQVRFRF9JTlNUQU5DRV9DTEFTUyk7IC8vJE5PTi1OTFMtMSQKKwkJaW5pdEVBdHRyaWJ1dGUoZ2V0RXh0ZXJuYWxEYXRhU291cmNlRGlzZWFzZU1vZGVsX0RhdGFQYXRoKCksIGVjb3JlUGFja2FnZS5nZXRFU3RyaW5nKCksICJkYXRhUGF0aCIsIG51bGwsIDAsIDEsIEV4dGVybmFsRGF0YVNvdXJjZURpc2Vhc2VNb2RlbC5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsgLy8kTk9OLU5MUy0xJAorCQlpbml0RUF0dHJpYnV0ZShnZXRFeHRlcm5hbERhdGFTb3VyY2VEaXNlYXNlTW9kZWxfRGlzZWFzZVR5cGUoKSwgZWNvcmVQYWNrYWdlLmdldEVTdHJpbmcoKSwgImRpc2Vhc2VUeXBlIiwgbnVsbCwgMCwgMSwgRXh0ZXJuYWxEYXRhU291cmNlRGlzZWFzZU1vZGVsLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOyAvLyROT04tTkxTLTEkCisKKwkJLy8gQ3JlYXRlIHJlc291cmNlCisJCWNyZWF0ZVJlc291cmNlKGVOU19VUkkpOworCX0KKworfSAvL0V4dGVybmFsRGF0YVNvdXJjZVBhY2thZ2VJbXBsCmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leHRlcm5hbGRhdGFzb3VyY2Uvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9leHRlcm5hbGRhdGFzb3VyY2UvcHJlc2VudGF0aW9uL0V4dGVybmFsRGF0YVNvdXJjZUFjdGlvbkJhckNvbnRyaWJ1dG9yLmphdmEgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leHRlcm5hbGRhdGFzb3VyY2Uvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9leHRlcm5hbGRhdGFzb3VyY2UvcHJlc2VudGF0aW9uL0V4dGVybmFsRGF0YVNvdXJjZUFjdGlvbkJhckNvbnRyaWJ1dG9yLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDJlMTg0MQotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4dGVybmFsZGF0YXNvdXJjZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL2V4dGVybmFsZGF0YXNvdXJjZS9wcmVzZW50YXRpb24vRXh0ZXJuYWxEYXRhU291cmNlQWN0aW9uQmFyQ29udHJpYnV0b3IuamF2YQpAQCAtMCwwICsxLDQzMCBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXh0ZXJuYWxkYXRhc291cmNlLnByZXNlbnRhdGlvbjsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogCisgKiBDb3B5cmlnaHQgKGMpIDIwMTEgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuIAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyAKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0IAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwgCisgKiAKKyAqIENvbnRyaWJ1dG9yczogCisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OworaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51aS52aWV3ZXIuSVZpZXdlclByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LmRvbWFpbi5FZGl0aW5nRG9tYWluOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LmRvbWFpbi5JRWRpdGluZ0RvbWFpblByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmFjdGlvbi5Db250cm9sQWN0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmFjdGlvbi5DcmVhdGVDaGlsZEFjdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5hY3Rpb24uQ3JlYXRlU2libGluZ0FjdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5hY3Rpb24uRWRpdGluZ0RvbWFpbkFjdGlvbkJhckNvbnRyaWJ1dG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmFjdGlvbi5Mb2FkUmVzb3VyY2VBY3Rpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkuYWN0aW9uLlZhbGlkYXRlQWN0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5BY3Rpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLkFjdGlvbkNvbnRyaWJ1dGlvbkl0ZW07CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklBY3Rpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklDb250cmlidXRpb25JdGVtOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JQ29udHJpYnV0aW9uTWFuYWdlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSU1lbnVMaXN0ZW5lcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSU1lbnVNYW5hZ2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JVG9vbEJhck1hbmFnZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLk1lbnVNYW5hZ2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5TZXBhcmF0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLlN1YkNvbnRyaWJ1dGlvbkl0ZW07CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb25Qcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTdHJ1Y3R1cmVkU2VsZWN0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuU2VsZWN0aW9uQ2hhbmdlZEV2ZW50OworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuVmlld2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leHRlcm5hbGRhdGFzb3VyY2UucHJvdmlkZXIuRXh0ZXJuYWxEYXRhU291cmNlRWRpdFBsdWdpbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5JRWRpdG9yUGFydDsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5QYXJ0SW5pdEV4Y2VwdGlvbjsKKworLyoqCisgKiBUaGlzIGlzIHRoZSBhY3Rpb24gYmFyIGNvbnRyaWJ1dG9yIGZvciB0aGUgRXh0ZXJuYWxEYXRhU291cmNlIG1vZGVsIGVkaXRvci4KKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIEV4dGVybmFsRGF0YVNvdXJjZUFjdGlvbkJhckNvbnRyaWJ1dG9yCisJZXh0ZW5kcyBFZGl0aW5nRG9tYWluQWN0aW9uQmFyQ29udHJpYnV0b3IKKwlpbXBsZW1lbnRzIElTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIgeworCS8qKgorCSAqIFRoaXMga2VlcHMgdHJhY2sgb2YgdGhlIGFjdGl2ZSBlZGl0b3IuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIElFZGl0b3JQYXJ0IGFjdGl2ZUVkaXRvclBhcnQ7CisKKwkvKioKKwkgKiBUaGlzIGtlZXBzIHRyYWNrIG9mIHRoZSBjdXJyZW50IHNlbGVjdGlvbiBwcm92aWRlci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgSVNlbGVjdGlvblByb3ZpZGVyIHNlbGVjdGlvblByb3ZpZGVyOworCisJLyoqCisJICogVGhpcyBhY3Rpb24gb3BlbnMgdGhlIFByb3BlcnRpZXMgdmlldy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgSUFjdGlvbiBzaG93UHJvcGVydGllc1ZpZXdBY3Rpb24gPQorCQluZXcgQWN0aW9uKEV4dGVybmFsRGF0YVNvdXJjZUVkaXRQbHVnaW4uSU5TVEFOQ0UuZ2V0U3RyaW5nKCJfVUlfU2hvd1Byb3BlcnRpZXNWaWV3X21lbnVfaXRlbSIpKSAvLyROT04tTkxTLTEkCisJCXsKKwkJCUBPdmVycmlkZQorCQkJcHVibGljIHZvaWQgcnVuKCkgeworCQkJCXRyeSB7CisJCQkJCWdldFBhZ2UoKS5zaG93Vmlldygib3JnLmVjbGlwc2UudWkudmlld3MuUHJvcGVydHlTaGVldCIpOyAvLyROT04tTkxTLTEkCisJCQkJfQorCQkJCWNhdGNoIChQYXJ0SW5pdEV4Y2VwdGlvbiBleGNlcHRpb24pIHsKKwkJCQkJRXh0ZXJuYWxEYXRhU291cmNlRWRpdFBsdWdpbi5JTlNUQU5DRS5sb2coZXhjZXB0aW9uKTsKKwkJCQl9CisJCQl9CisJCX07CisKKwkvKioKKwkgKiBUaGlzIGFjdGlvbiByZWZyZXNoZXMgdGhlIHZpZXdlciBvZiB0aGUgY3VycmVudCBlZGl0b3IgaWYgdGhlIGVkaXRvcgorCSAqIGltcGxlbWVudHMge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5jb21tb24udWkudmlld2VyLklWaWV3ZXJQcm92aWRlcn0uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIElBY3Rpb24gcmVmcmVzaFZpZXdlckFjdGlvbiA9CisJCW5ldyBBY3Rpb24oRXh0ZXJuYWxEYXRhU291cmNlRWRpdFBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoIl9VSV9SZWZyZXNoVmlld2VyX21lbnVfaXRlbSIpKSAvLyROT04tTkxTLTEkCisJCXsKKwkJCUBPdmVycmlkZQorCQkJcHVibGljIGJvb2xlYW4gaXNFbmFibGVkKCkgeworCQkJCXJldHVybiBhY3RpdmVFZGl0b3JQYXJ0IGluc3RhbmNlb2YgSVZpZXdlclByb3ZpZGVyOworCQkJfQorCisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyB2b2lkIHJ1bigpIHsKKwkJCQlpZiAoYWN0aXZlRWRpdG9yUGFydCBpbnN0YW5jZW9mIElWaWV3ZXJQcm92aWRlcikgeworCQkJCQlWaWV3ZXIgdmlld2VyID0gKChJVmlld2VyUHJvdmlkZXIpYWN0aXZlRWRpdG9yUGFydCkuZ2V0Vmlld2VyKCk7CisJCQkJCWlmICh2aWV3ZXIgIT0gbnVsbCkgeworCQkJCQkJdmlld2VyLnJlZnJlc2goKTsKKwkJCQkJfQorCQkJCX0KKwkJCX0KKwkJfTsKKworCS8qKgorCSAqIFRoaXMgd2lsbCBjb250YWluIG9uZSB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkuYWN0aW9uLkNyZWF0ZUNoaWxkQWN0aW9ufSBjb3JyZXNwb25kaW5nIHRvIGVhY2ggZGVzY3JpcHRvcgorCSAqIGdlbmVyYXRlZCBmb3IgdGhlIGN1cnJlbnQgc2VsZWN0aW9uIGJ5IHRoZSBpdGVtIHByb3ZpZGVyLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBDb2xsZWN0aW9uPElBY3Rpb24+IGNyZWF0ZUNoaWxkQWN0aW9uczsKKworCS8qKgorCSAqIFRoaXMgaXMgdGhlIG1lbnUgbWFuYWdlciBpbnRvIHdoaWNoIG1lbnUgY29udHJpYnV0aW9uIGl0ZW1zIHNob3VsZCBiZSBhZGRlZCBmb3IgQ3JlYXRlQ2hpbGQgYWN0aW9ucy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgSU1lbnVNYW5hZ2VyIGNyZWF0ZUNoaWxkTWVudU1hbmFnZXI7CisKKwkvKioKKwkgKiBUaGlzIHdpbGwgY29udGFpbiBvbmUge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmFjdGlvbi5DcmVhdGVTaWJsaW5nQWN0aW9ufSBjb3JyZXNwb25kaW5nIHRvIGVhY2ggZGVzY3JpcHRvcgorCSAqIGdlbmVyYXRlZCBmb3IgdGhlIGN1cnJlbnQgc2VsZWN0aW9uIGJ5IHRoZSBpdGVtIHByb3ZpZGVyLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBDb2xsZWN0aW9uPElBY3Rpb24+IGNyZWF0ZVNpYmxpbmdBY3Rpb25zOworCisJLyoqCisJICogVGhpcyBpcyB0aGUgbWVudSBtYW5hZ2VyIGludG8gd2hpY2ggbWVudSBjb250cmlidXRpb24gaXRlbXMgc2hvdWxkIGJlIGFkZGVkIGZvciBDcmVhdGVTaWJsaW5nIGFjdGlvbnMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIElNZW51TWFuYWdlciBjcmVhdGVTaWJsaW5nTWVudU1hbmFnZXI7CisKKwkvKioKKwkgKiBUaGlzIGNyZWF0ZXMgYW4gaW5zdGFuY2Ugb2YgdGhlIGNvbnRyaWJ1dG9yLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFeHRlcm5hbERhdGFTb3VyY2VBY3Rpb25CYXJDb250cmlidXRvcigpIHsKKwkJc3VwZXIoQURESVRJT05TX0xBU1RfU1RZTEUpOworCQlsb2FkUmVzb3VyY2VBY3Rpb24gPSBuZXcgTG9hZFJlc291cmNlQWN0aW9uKCk7CisJCXZhbGlkYXRlQWN0aW9uID0gbmV3IFZhbGlkYXRlQWN0aW9uKCk7CisJCWNvbnRyb2xBY3Rpb24gPSBuZXcgQ29udHJvbEFjdGlvbigpOworCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyBTZXBhcmF0b3JzIGZvciBlZGl0b3IgYWRkaXRpb25zIHRvIHRoZSB0b29sIGJhci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBjb250cmlidXRlVG9Ub29sQmFyKElUb29sQmFyTWFuYWdlciB0b29sQmFyTWFuYWdlcikgeworCQl0b29sQmFyTWFuYWdlci5hZGQobmV3IFNlcGFyYXRvcigiZXh0ZXJuYWxkYXRhc291cmNlLXNldHRpbmdzIikpOyAvLyROT04tTkxTLTEkCisJCXRvb2xCYXJNYW5hZ2VyLmFkZChuZXcgU2VwYXJhdG9yKCJleHRlcm5hbGRhdGFzb3VyY2UtYWRkaXRpb25zIikpOyAvLyROT04tTkxTLTEkCisJfQorCisJLyoqCisJICogVGhpcyBhZGRzIHRvIHRoZSBtZW51IGJhciBhIG1lbnUgYW5kIHNvbWUgc2VwYXJhdG9ycyBmb3IgZWRpdG9yIGFkZGl0aW9ucywKKwkgKiBhcyB3ZWxsIGFzIHRoZSBzdWItbWVudXMgZm9yIG9iamVjdCBjcmVhdGlvbiBpdGVtcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBjb250cmlidXRlVG9NZW51KElNZW51TWFuYWdlciBtZW51TWFuYWdlcikgeworCQlzdXBlci5jb250cmlidXRlVG9NZW51KG1lbnVNYW5hZ2VyKTsKKworCQlJTWVudU1hbmFnZXIgc3VibWVudU1hbmFnZXIgPSBuZXcgTWVudU1hbmFnZXIoRXh0ZXJuYWxEYXRhU291cmNlRWRpdFBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoIl9VSV9FeHRlcm5hbERhdGFTb3VyY2VFZGl0b3JfbWVudSIpLCAib3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4dGVybmFsZGF0YXNvdXJjZU1lbnVJRCIpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKKwkJbWVudU1hbmFnZXIuaW5zZXJ0QWZ0ZXIoImFkZGl0aW9ucyIsIHN1Ym1lbnVNYW5hZ2VyKTsgLy8kTk9OLU5MUy0xJAorCQlzdWJtZW51TWFuYWdlci5hZGQobmV3IFNlcGFyYXRvcigic2V0dGluZ3MiKSk7IC8vJE5PTi1OTFMtMSQKKwkJc3VibWVudU1hbmFnZXIuYWRkKG5ldyBTZXBhcmF0b3IoImFjdGlvbnMiKSk7IC8vJE5PTi1OTFMtMSQKKwkJc3VibWVudU1hbmFnZXIuYWRkKG5ldyBTZXBhcmF0b3IoImFkZGl0aW9ucyIpKTsgLy8kTk9OLU5MUy0xJAorCQlzdWJtZW51TWFuYWdlci5hZGQobmV3IFNlcGFyYXRvcigiYWRkaXRpb25zLWVuZCIpKTsgLy8kTk9OLU5MUy0xJAorCisJCS8vIFByZXBhcmUgZm9yIENyZWF0ZUNoaWxkIGl0ZW0gYWRkaXRpb24gb3IgcmVtb3ZhbC4KKwkJLy8KKwkJY3JlYXRlQ2hpbGRNZW51TWFuYWdlciA9IG5ldyBNZW51TWFuYWdlcihFeHRlcm5hbERhdGFTb3VyY2VFZGl0UGx1Z2luLklOU1RBTkNFLmdldFN0cmluZygiX1VJX0NyZWF0ZUNoaWxkX21lbnVfaXRlbSIpKTsgLy8kTk9OLU5MUy0xJAorCQlzdWJtZW51TWFuYWdlci5pbnNlcnRCZWZvcmUoImFkZGl0aW9ucyIsIGNyZWF0ZUNoaWxkTWVudU1hbmFnZXIpOyAvLyROT04tTkxTLTEkCisKKwkJLy8gUHJlcGFyZSBmb3IgQ3JlYXRlU2libGluZyBpdGVtIGFkZGl0aW9uIG9yIHJlbW92YWwuCisJCS8vCisJCWNyZWF0ZVNpYmxpbmdNZW51TWFuYWdlciA9IG5ldyBNZW51TWFuYWdlcihFeHRlcm5hbERhdGFTb3VyY2VFZGl0UGx1Z2luLklOU1RBTkNFLmdldFN0cmluZygiX1VJX0NyZWF0ZVNpYmxpbmdfbWVudV9pdGVtIikpOyAvLyROT04tTkxTLTEkCisJCXN1Ym1lbnVNYW5hZ2VyLmluc2VydEJlZm9yZSgiYWRkaXRpb25zIiwgY3JlYXRlU2libGluZ01lbnVNYW5hZ2VyKTsgLy8kTk9OLU5MUy0xJAorCisJCS8vIEZvcmNlIGFuIHVwZGF0ZSBiZWNhdXNlIEVjbGlwc2UgaGlkZXMgZW1wdHkgbWVudXMgbm93LgorCQkvLworCQlzdWJtZW51TWFuYWdlci5hZGRNZW51TGlzdGVuZXIKKwkJCShuZXcgSU1lbnVMaXN0ZW5lcigpIHsKKwkJCQkgcHVibGljIHZvaWQgbWVudUFib3V0VG9TaG93KElNZW51TWFuYWdlciBtZW51TWFuYWdlcikgeworCQkJCQkgbWVudU1hbmFnZXIudXBkYXRlQWxsKHRydWUpOworCQkJCSB9CisJCQkgfSk7CisKKwkJYWRkR2xvYmFsQWN0aW9ucyhzdWJtZW51TWFuYWdlcik7CisJfQorCisJLyoqCisJICogV2hlbiB0aGUgYWN0aXZlIGVkaXRvciBjaGFuZ2VzLCB0aGlzIHJlbWVtYmVycyB0aGUgY2hhbmdlIGFuZCByZWdpc3RlcnMgd2l0aCBpdCBhcyBhIHNlbGVjdGlvbiBwcm92aWRlci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBzZXRBY3RpdmVFZGl0b3IoSUVkaXRvclBhcnQgcGFydCkgeworCQlzdXBlci5zZXRBY3RpdmVFZGl0b3IocGFydCk7CisJCWFjdGl2ZUVkaXRvclBhcnQgPSBwYXJ0OworCisJCS8vIFN3aXRjaCB0byB0aGUgbmV3IHNlbGVjdGlvbiBwcm92aWRlci4KKwkJLy8KKwkJaWYgKHNlbGVjdGlvblByb3ZpZGVyICE9IG51bGwpIHsKKwkJCXNlbGVjdGlvblByb3ZpZGVyLnJlbW92ZVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcih0aGlzKTsKKwkJfQorCQlpZiAocGFydCA9PSBudWxsKSB7CisJCQlzZWxlY3Rpb25Qcm92aWRlciA9IG51bGw7CisJCX0KKwkJZWxzZSB7CisJCQlzZWxlY3Rpb25Qcm92aWRlciA9IHBhcnQuZ2V0U2l0ZSgpLmdldFNlbGVjdGlvblByb3ZpZGVyKCk7CisJCQlzZWxlY3Rpb25Qcm92aWRlci5hZGRTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIodGhpcyk7CisKKwkJCS8vIEZha2UgYSBzZWxlY3Rpb24gY2hhbmdlZCBldmVudCB0byB1cGRhdGUgdGhlIG1lbnVzLgorCQkJLy8KKwkJCWlmIChzZWxlY3Rpb25Qcm92aWRlci5nZXRTZWxlY3Rpb24oKSAhPSBudWxsKSB7CisJCQkJc2VsZWN0aW9uQ2hhbmdlZChuZXcgU2VsZWN0aW9uQ2hhbmdlZEV2ZW50KHNlbGVjdGlvblByb3ZpZGVyLCBzZWxlY3Rpb25Qcm92aWRlci5nZXRTZWxlY3Rpb24oKSkpOworCQkJfQorCQl9CisJfQorCisJLyoqCisJICogVGhpcyBpbXBsZW1lbnRzIHtAbGluayBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXJ9LAorCSAqIGhhbmRsaW5nIHtAbGluayBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlNlbGVjdGlvbkNoYW5nZWRFdmVudH1zIGJ5IHF1ZXJ5aW5nIGZvciB0aGUgY2hpbGRyZW4gYW5kIHNpYmxpbmdzCisJICogdGhhdCBjYW4gYmUgYWRkZWQgdG8gdGhlIHNlbGVjdGVkIG9iamVjdCBhbmQgdXBkYXRpbmcgdGhlIG1lbnVzIGFjY29yZGluZ2x5LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIHNlbGVjdGlvbkNoYW5nZWQoU2VsZWN0aW9uQ2hhbmdlZEV2ZW50IGV2ZW50KSB7CisJCS8vIFJlbW92ZSBhbnkgbWVudSBpdGVtcyBmb3Igb2xkIHNlbGVjdGlvbi4KKwkJLy8KKwkJaWYgKGNyZWF0ZUNoaWxkTWVudU1hbmFnZXIgIT0gbnVsbCkgeworCQkJZGVwb3B1bGF0ZU1hbmFnZXIoY3JlYXRlQ2hpbGRNZW51TWFuYWdlciwgY3JlYXRlQ2hpbGRBY3Rpb25zKTsKKwkJfQorCQlpZiAoY3JlYXRlU2libGluZ01lbnVNYW5hZ2VyICE9IG51bGwpIHsKKwkJCWRlcG9wdWxhdGVNYW5hZ2VyKGNyZWF0ZVNpYmxpbmdNZW51TWFuYWdlciwgY3JlYXRlU2libGluZ0FjdGlvbnMpOworCQl9CisKKwkJLy8gUXVlcnkgdGhlIG5ldyBzZWxlY3Rpb24gZm9yIGFwcHJvcHJpYXRlIG5ldyBjaGlsZC9zaWJsaW5nIGRlc2NyaXB0b3JzCisJCS8vCisJCUNvbGxlY3Rpb248Pz4gbmV3Q2hpbGREZXNjcmlwdG9ycyA9IG51bGw7CisJCUNvbGxlY3Rpb248Pz4gbmV3U2libGluZ0Rlc2NyaXB0b3JzID0gbnVsbDsKKworCQlJU2VsZWN0aW9uIHNlbGVjdGlvbiA9IGV2ZW50LmdldFNlbGVjdGlvbigpOworCQlpZiAoc2VsZWN0aW9uIGluc3RhbmNlb2YgSVN0cnVjdHVyZWRTZWxlY3Rpb24gJiYgKChJU3RydWN0dXJlZFNlbGVjdGlvbilzZWxlY3Rpb24pLnNpemUoKSA9PSAxKSB7CisJCQlPYmplY3Qgb2JqZWN0ID0gKChJU3RydWN0dXJlZFNlbGVjdGlvbilzZWxlY3Rpb24pLmdldEZpcnN0RWxlbWVudCgpOworCisJCQlFZGl0aW5nRG9tYWluIGRvbWFpbiA9ICgoSUVkaXRpbmdEb21haW5Qcm92aWRlcilhY3RpdmVFZGl0b3JQYXJ0KS5nZXRFZGl0aW5nRG9tYWluKCk7CisKKwkJCW5ld0NoaWxkRGVzY3JpcHRvcnMgPSBkb21haW4uZ2V0TmV3Q2hpbGREZXNjcmlwdG9ycyhvYmplY3QsIG51bGwpOworCQkJbmV3U2libGluZ0Rlc2NyaXB0b3JzID0gZG9tYWluLmdldE5ld0NoaWxkRGVzY3JpcHRvcnMobnVsbCwgb2JqZWN0KTsKKwkJfQorCisJCS8vIEdlbmVyYXRlIGFjdGlvbnMgZm9yIHNlbGVjdGlvbjsgcG9wdWxhdGUgYW5kIHJlZHJhdyB0aGUgbWVudXMuCisJCS8vCisJCWNyZWF0ZUNoaWxkQWN0aW9ucyA9IGdlbmVyYXRlQ3JlYXRlQ2hpbGRBY3Rpb25zKG5ld0NoaWxkRGVzY3JpcHRvcnMsIHNlbGVjdGlvbik7CisJCWNyZWF0ZVNpYmxpbmdBY3Rpb25zID0gZ2VuZXJhdGVDcmVhdGVTaWJsaW5nQWN0aW9ucyhuZXdTaWJsaW5nRGVzY3JpcHRvcnMsIHNlbGVjdGlvbik7CisKKwkJaWYgKGNyZWF0ZUNoaWxkTWVudU1hbmFnZXIgIT0gbnVsbCkgeworCQkJcG9wdWxhdGVNYW5hZ2VyKGNyZWF0ZUNoaWxkTWVudU1hbmFnZXIsIGNyZWF0ZUNoaWxkQWN0aW9ucywgbnVsbCk7CisJCQljcmVhdGVDaGlsZE1lbnVNYW5hZ2VyLnVwZGF0ZSh0cnVlKTsKKwkJfQorCQlpZiAoY3JlYXRlU2libGluZ01lbnVNYW5hZ2VyICE9IG51bGwpIHsKKwkJCXBvcHVsYXRlTWFuYWdlcihjcmVhdGVTaWJsaW5nTWVudU1hbmFnZXIsIGNyZWF0ZVNpYmxpbmdBY3Rpb25zLCBudWxsKTsKKwkJCWNyZWF0ZVNpYmxpbmdNZW51TWFuYWdlci51cGRhdGUodHJ1ZSk7CisJCX0KKwl9CisKKwkvKioKKwkgKiBUaGlzIGdlbmVyYXRlcyBhIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5hY3Rpb24uQ3JlYXRlQ2hpbGRBY3Rpb259IGZvciBlYWNoIG9iamVjdCBpbiA8Y29kZT5kZXNjcmlwdG9yczwvY29kZT4sCisJICogYW5kIHJldHVybnMgdGhlIGNvbGxlY3Rpb24gb2YgdGhlc2UgYWN0aW9ucy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgQ29sbGVjdGlvbjxJQWN0aW9uPiBnZW5lcmF0ZUNyZWF0ZUNoaWxkQWN0aW9ucyhDb2xsZWN0aW9uPD8+IGRlc2NyaXB0b3JzLCBJU2VsZWN0aW9uIHNlbGVjdGlvbikgeworCQlDb2xsZWN0aW9uPElBY3Rpb24+IGFjdGlvbnMgPSBuZXcgQXJyYXlMaXN0PElBY3Rpb24+KCk7CisJCWlmIChkZXNjcmlwdG9ycyAhPSBudWxsKSB7CisJCQlmb3IgKE9iamVjdCBkZXNjcmlwdG9yIDogZGVzY3JpcHRvcnMpIHsKKwkJCQlhY3Rpb25zLmFkZChuZXcgQ3JlYXRlQ2hpbGRBY3Rpb24oYWN0aXZlRWRpdG9yUGFydCwgc2VsZWN0aW9uLCBkZXNjcmlwdG9yKSk7CisJCQl9CisJCX0KKwkJcmV0dXJuIGFjdGlvbnM7CisJfQorCisJLyoqCisJICogVGhpcyBnZW5lcmF0ZXMgYSB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkuYWN0aW9uLkNyZWF0ZVNpYmxpbmdBY3Rpb259IGZvciBlYWNoIG9iamVjdCBpbiA8Y29kZT5kZXNjcmlwdG9yczwvY29kZT4sCisJICogYW5kIHJldHVybnMgdGhlIGNvbGxlY3Rpb24gb2YgdGhlc2UgYWN0aW9ucy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgQ29sbGVjdGlvbjxJQWN0aW9uPiBnZW5lcmF0ZUNyZWF0ZVNpYmxpbmdBY3Rpb25zKENvbGxlY3Rpb248Pz4gZGVzY3JpcHRvcnMsIElTZWxlY3Rpb24gc2VsZWN0aW9uKSB7CisJCUNvbGxlY3Rpb248SUFjdGlvbj4gYWN0aW9ucyA9IG5ldyBBcnJheUxpc3Q8SUFjdGlvbj4oKTsKKwkJaWYgKGRlc2NyaXB0b3JzICE9IG51bGwpIHsKKwkJCWZvciAoT2JqZWN0IGRlc2NyaXB0b3IgOiBkZXNjcmlwdG9ycykgeworCQkJCWFjdGlvbnMuYWRkKG5ldyBDcmVhdGVTaWJsaW5nQWN0aW9uKGFjdGl2ZUVkaXRvclBhcnQsIHNlbGVjdGlvbiwgZGVzY3JpcHRvcikpOworCQkJfQorCQl9CisJCXJldHVybiBhY3Rpb25zOworCX0KKworCS8qKgorCSAqIFRoaXMgcG9wdWxhdGVzIHRoZSBzcGVjaWZpZWQgPGNvZGU+bWFuYWdlcjwvY29kZT4gd2l0aCB7QGxpbmsgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLkFjdGlvbkNvbnRyaWJ1dGlvbkl0ZW19cworCSAqIGJhc2VkIG9uIHRoZSB7QGxpbmsgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklBY3Rpb259cyBjb250YWluZWQgaW4gdGhlIDxjb2RlPmFjdGlvbnM8L2NvZGU+IGNvbGxlY3Rpb24sCisJICogYnkgaW5zZXJ0aW5nIHRoZW0gYmVmb3JlIHRoZSBzcGVjaWZpZWQgY29udHJpYnV0aW9uIGl0ZW0gPGNvZGU+Y29udHJpYnV0aW9uSUQ8L2NvZGU+LgorCSAqIElmIDxjb2RlPmNvbnRyaWJ1dGlvbklEPC9jb2RlPiBpcyA8Y29kZT5udWxsPC9jb2RlPiwgdGhleSBhcmUgc2ltcGx5IGFkZGVkLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIHBvcHVsYXRlTWFuYWdlcihJQ29udHJpYnV0aW9uTWFuYWdlciBtYW5hZ2VyLCBDb2xsZWN0aW9uPD8gZXh0ZW5kcyBJQWN0aW9uPiBhY3Rpb25zLCBTdHJpbmcgY29udHJpYnV0aW9uSUQpIHsKKwkJaWYgKGFjdGlvbnMgIT0gbnVsbCkgeworCQkJZm9yIChJQWN0aW9uIGFjdGlvbiA6IGFjdGlvbnMpIHsKKwkJCQlpZiAoY29udHJpYnV0aW9uSUQgIT0gbnVsbCkgeworCQkJCQltYW5hZ2VyLmluc2VydEJlZm9yZShjb250cmlidXRpb25JRCwgYWN0aW9uKTsKKwkJCQl9CisJCQkJZWxzZSB7CisJCQkJCW1hbmFnZXIuYWRkKGFjdGlvbik7CisJCQkJfQorCQkJfQorCQl9CisJfQorCQkKKwkvKioKKwkgKiBUaGlzIHJlbW92ZXMgZnJvbSB0aGUgc3BlY2lmaWVkIDxjb2RlPm1hbmFnZXI8L2NvZGU+IGFsbCB7QGxpbmsgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLkFjdGlvbkNvbnRyaWJ1dGlvbkl0ZW19cworCSAqIGJhc2VkIG9uIHRoZSB7QGxpbmsgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklBY3Rpb259cyBjb250YWluZWQgaW4gdGhlIDxjb2RlPmFjdGlvbnM8L2NvZGU+IGNvbGxlY3Rpb24uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgZGVwb3B1bGF0ZU1hbmFnZXIoSUNvbnRyaWJ1dGlvbk1hbmFnZXIgbWFuYWdlciwgQ29sbGVjdGlvbjw/IGV4dGVuZHMgSUFjdGlvbj4gYWN0aW9ucykgeworCQlpZiAoYWN0aW9ucyAhPSBudWxsKSB7CisJCQlJQ29udHJpYnV0aW9uSXRlbVtdIGl0ZW1zID0gbWFuYWdlci5nZXRJdGVtcygpOworCQkJZm9yIChpbnQgaSA9IDA7IGkgPCBpdGVtcy5sZW5ndGg7IGkrKykgeworCQkJCS8vIExvb2sgaW50byBTdWJDb250cmlidXRpb25JdGVtcworCQkJCS8vCisJCQkJSUNvbnRyaWJ1dGlvbkl0ZW0gY29udHJpYnV0aW9uSXRlbSA9IGl0ZW1zW2ldOworCQkJCXdoaWxlIChjb250cmlidXRpb25JdGVtIGluc3RhbmNlb2YgU3ViQ29udHJpYnV0aW9uSXRlbSkgeworCQkJCQljb250cmlidXRpb25JdGVtID0gKChTdWJDb250cmlidXRpb25JdGVtKWNvbnRyaWJ1dGlvbkl0ZW0pLmdldElubmVySXRlbSgpOworCQkJCX0KKworCQkJCS8vIERlbGV0ZSB0aGUgQWN0aW9uQ29udHJpYnV0aW9uSXRlbXMgd2l0aCBtYXRjaGluZyBhY3Rpb24uCisJCQkJLy8KKwkJCQlpZiAoY29udHJpYnV0aW9uSXRlbSBpbnN0YW5jZW9mIEFjdGlvbkNvbnRyaWJ1dGlvbkl0ZW0pIHsKKwkJCQkJSUFjdGlvbiBhY3Rpb24gPSAoKEFjdGlvbkNvbnRyaWJ1dGlvbkl0ZW0pY29udHJpYnV0aW9uSXRlbSkuZ2V0QWN0aW9uKCk7CisJCQkJCWlmIChhY3Rpb25zLmNvbnRhaW5zKGFjdGlvbikpIHsKKwkJCQkJCW1hbmFnZXIucmVtb3ZlKGNvbnRyaWJ1dGlvbkl0ZW0pOworCQkJCQl9CisJCQkJfQorCQkJfQorCQl9CisJfQorCisJLyoqCisJICogVGhpcyBwb3B1bGF0ZXMgdGhlIHBvcC11cCBtZW51IGJlZm9yZSBpdCBhcHBlYXJzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIG1lbnVBYm91dFRvU2hvdyhJTWVudU1hbmFnZXIgbWVudU1hbmFnZXIpIHsKKwkJc3VwZXIubWVudUFib3V0VG9TaG93KG1lbnVNYW5hZ2VyKTsKKwkJTWVudU1hbmFnZXIgc3VibWVudU1hbmFnZXIgPSBudWxsOworCisJCXN1Ym1lbnVNYW5hZ2VyID0gbmV3IE1lbnVNYW5hZ2VyKEV4dGVybmFsRGF0YVNvdXJjZUVkaXRQbHVnaW4uSU5TVEFOQ0UuZ2V0U3RyaW5nKCJfVUlfQ3JlYXRlQ2hpbGRfbWVudV9pdGVtIikpOyAvLyROT04tTkxTLTEkCisJCXBvcHVsYXRlTWFuYWdlcihzdWJtZW51TWFuYWdlciwgY3JlYXRlQ2hpbGRBY3Rpb25zLCBudWxsKTsKKwkJbWVudU1hbmFnZXIuaW5zZXJ0QmVmb3JlKCJlZGl0Iiwgc3VibWVudU1hbmFnZXIpOyAvLyROT04tTkxTLTEkCisKKwkJc3VibWVudU1hbmFnZXIgPSBuZXcgTWVudU1hbmFnZXIoRXh0ZXJuYWxEYXRhU291cmNlRWRpdFBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoIl9VSV9DcmVhdGVTaWJsaW5nX21lbnVfaXRlbSIpKTsgLy8kTk9OLU5MUy0xJAorCQlwb3B1bGF0ZU1hbmFnZXIoc3VibWVudU1hbmFnZXIsIGNyZWF0ZVNpYmxpbmdBY3Rpb25zLCBudWxsKTsKKwkJbWVudU1hbmFnZXIuaW5zZXJ0QmVmb3JlKCJlZGl0Iiwgc3VibWVudU1hbmFnZXIpOyAvLyROT04tTkxTLTEkCisJfQorCisJLyoqCisJICogVGhpcyBpbnNlcnRzIGdsb2JhbCBhY3Rpb25zIGJlZm9yZSB0aGUgImFkZGl0aW9ucy1lbmQiIHNlcGFyYXRvci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgdm9pZCBhZGRHbG9iYWxBY3Rpb25zKElNZW51TWFuYWdlciBtZW51TWFuYWdlcikgeworCQltZW51TWFuYWdlci5pbnNlcnRBZnRlcigiYWRkaXRpb25zLWVuZCIsIG5ldyBTZXBhcmF0b3IoInVpLWFjdGlvbnMiKSk7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAorCQltZW51TWFuYWdlci5pbnNlcnRBZnRlcigidWktYWN0aW9ucyIsIHNob3dQcm9wZXJ0aWVzVmlld0FjdGlvbik7IC8vJE5PTi1OTFMtMSQKKworCQlyZWZyZXNoVmlld2VyQWN0aW9uLnNldEVuYWJsZWQocmVmcmVzaFZpZXdlckFjdGlvbi5pc0VuYWJsZWQoKSk7CQkKKwkJbWVudU1hbmFnZXIuaW5zZXJ0QWZ0ZXIoInVpLWFjdGlvbnMiLCByZWZyZXNoVmlld2VyQWN0aW9uKTsgLy8kTk9OLU5MUy0xJAorCisJCXN1cGVyLmFkZEdsb2JhbEFjdGlvbnMobWVudU1hbmFnZXIpOworCX0KKworCS8qKgorCSAqIFRoaXMgZW5zdXJlcyB0aGF0IGEgZGVsZXRlIGFjdGlvbiB3aWxsIGNsZWFuIHVwIGFsbCByZWZlcmVuY2VzIHRvIGRlbGV0ZWQgb2JqZWN0cy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgYm9vbGVhbiByZW1vdmVBbGxSZWZlcmVuY2VzT25EZWxldGUoKSB7CisJCXJldHVybiB0cnVlOworCX0KKworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4dGVybmFsZGF0YXNvdXJjZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL2V4dGVybmFsZGF0YXNvdXJjZS9wcmVzZW50YXRpb24vRXh0ZXJuYWxEYXRhU291cmNlRWRpdG9yLmphdmEgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leHRlcm5hbGRhdGFzb3VyY2Uvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9leHRlcm5hbGRhdGFzb3VyY2UvcHJlc2VudGF0aW9uL0V4dGVybmFsRGF0YVNvdXJjZUVkaXRvci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJmNWM4ZmEKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leHRlcm5hbGRhdGFzb3VyY2Uvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9leHRlcm5hbGRhdGFzb3VyY2UvcHJlc2VudGF0aW9uL0V4dGVybmFsRGF0YVNvdXJjZUVkaXRvci5qYXZhCkBAIC0wLDAgKzEsMTUzMSBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXh0ZXJuYWxkYXRhc291cmNlLnByZXNlbnRhdGlvbjsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogCisgKiBDb3B5cmlnaHQgKGMpIDIwMTEgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuIAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyAKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0IAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwgCisgKiAKKyAqIENvbnRyaWJ1dG9yczogCisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOworaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW07CitpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbnM7CitpbXBvcnQgamF2YS51dGlsLkV2ZW50T2JqZWN0OworaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOworaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKK2ltcG9ydCBqYXZhLnV0aWwuTGlua2VkSGFzaE1hcDsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuTWFwOworCitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUZpbGU7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSU1hcmtlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUmVzb3VyY2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVJlc291cmNlQ2hhbmdlRXZlbnQ7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVJlc291cmNlQ2hhbmdlTGlzdGVuZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVJlc291cmNlRGVsdGE7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVJlc291cmNlRGVsdGFWaXNpdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLlJlc291cmNlc1BsdWdpbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQ29yZUV4Y2VwdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVBhdGg7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQcm9ncmVzc01vbml0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLk51bGxQcm9ncmVzc01vbml0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5jb21tYW5kLkJhc2ljQ29tbWFuZFN0YWNrOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24uY29tbWFuZC5Db21tYW5kOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24uY29tbWFuZC5Db21tYW5kU3RhY2s7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5jb21tYW5kLkNvbW1hbmRTdGFja0xpc3RlbmVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LkFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnVpLk1hcmtlckhlbHBlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnVpLmVkaXRvci5Qcm9ibGVtRWRpdG9yUGFydDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnVpLnZpZXdlci5JVmlld2VyUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLkJhc2ljRGlhZ25vc3RpYzsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuRGlhZ25vc3RpYzsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuVVJJOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FVmFsaWRhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5wcm92aWRlci5FY29yZUl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5yZXNvdXJjZS5SZXNvdXJjZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUucmVzb3VyY2UuUmVzb3VyY2VTZXQ7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnV0aWwuRUNvbnRlbnRBZGFwdGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS51dGlsLkVjb3JlVXRpbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5kb21haW4uQWRhcHRlckZhY3RvcnlFZGl0aW5nRG9tYWluOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LmRvbWFpbi5FZGl0aW5nRG9tYWluOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LmRvbWFpbi5JRWRpdGluZ0RvbWFpblByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkFkYXB0ZXJGYWN0b3J5SXRlbURlbGVnYXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5Db21wb3NlZEFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLlJlZmxlY3RpdmVJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5yZXNvdXJjZS5SZXNvdXJjZUl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmFjdGlvbi5FZGl0aW5nRG9tYWluQWN0aW9uQmFyQ29udHJpYnV0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkuY2VsbGVkaXRvci5BZGFwdGVyRmFjdG9yeVRyZWVFZGl0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkuZG5kLkVkaXRpbmdEb21haW5WaWV3ZXJEcm9wQWRhcHRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5kbmQuTG9jYWxUcmFuc2ZlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5kbmQuVmlld2VyRHJhZ0FkYXB0ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkucHJvdmlkZXIuQWRhcHRlckZhY3RvcnlDb250ZW50UHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkucHJvdmlkZXIuQWRhcHRlckZhY3RvcnlMYWJlbFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLnByb3ZpZGVyLlVud3JhcHBpbmdTZWxlY3Rpb25Qcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS51dGlsLkVkaXRVSU1hcmtlckhlbHBlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS51dGlsLkVkaXRVSVV0aWw7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkudmlldy5FeHRlbmRlZFByb3BlcnR5U2hlZXRQYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JTWVudUxpc3RlbmVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JTWVudU1hbmFnZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklTdGF0dXNMaW5lTWFuYWdlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSVRvb2xCYXJNYW5hZ2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5NZW51TWFuYWdlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uU2VwYXJhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmRpYWxvZ3MuTWVzc2FnZURpYWxvZzsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5kaWFsb2dzLlByb2dyZXNzTW9uaXRvckRpYWxvZzsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvblByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVN0cnVjdHVyZWRTZWxlY3Rpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5TZWxlY3Rpb25DaGFuZ2VkRXZlbnQ7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5TdHJ1Y3R1cmVkU2VsZWN0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuU3RydWN0dXJlZFZpZXdlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlRyZWVWaWV3ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5WaWV3ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5wcm92aWRlci5Db21tb25JdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGgucHJvdmlkZXIuR3JhcGhJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubG9nZ2VyLnByb3ZpZGVyLkxvZ2dlckl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5wcm92aWRlci5Nb2RlbEl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5wcm92aWRlci5Nb2RpZmllckl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zY2VuYXJpby5wcm92aWRlci5TY2VuYXJpb0l0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zZXF1ZW5jZXIucHJvdmlkZXIuU2VxdWVuY2VySXRlbVByb3ZpZGVyQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNvbHZlci5wcm92aWRlci5Tb2x2ZXJJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5wcm92aWRlci5MYWJlbHNJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXh0ZXJuYWxkYXRhc291cmNlLnByb3ZpZGVyLkV4dGVybmFsRGF0YVNvdXJjZUVkaXRQbHVnaW47CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4dGVybmFsZGF0YXNvdXJjZS5wcm92aWRlci5FeHRlcm5hbERhdGFTb3VyY2VJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQucHJvdmlkZXIuU3RhbmRhcmRJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuU1dUOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5jdXN0b20uQ1RhYkZvbGRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZG5kLkRORDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZG5kLlRyYW5zZmVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuQ29udHJvbEFkYXB0ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5Db250cm9sRXZlbnQ7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmdyYXBoaWNzLlBvaW50OworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5NZW51OworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlRyZWU7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuSUFjdGlvbkJhcnM7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuSUVkaXRvcklucHV0OworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklFZGl0b3JQYXJ0OworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklFZGl0b3JTaXRlOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklQYXJ0TGlzdGVuZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaFBhcnQ7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuUGFydEluaXRFeGNlcHRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuYWN0aW9ucy5Xb3Jrc3BhY2VNb2RpZnlPcGVyYXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuZGlhbG9ncy5TYXZlQXNEaWFsb2c7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuaWRlLklHb3RvTWFya2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLnBhcnQuRmlsZUVkaXRvcklucHV0OworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLnBhcnQuTXVsdGlQYWdlRWRpdG9yUGFydDsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS52aWV3cy5jb250ZW50b3V0bGluZS5Db250ZW50T3V0bGluZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS52aWV3cy5jb250ZW50b3V0bGluZS5Db250ZW50T3V0bGluZVBhZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkudmlld3MuY29udGVudG91dGxpbmUuSUNvbnRlbnRPdXRsaW5lUGFnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS52aWV3cy5wcm9wZXJ0aWVzLklQcm9wZXJ0eVNoZWV0UGFnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS52aWV3cy5wcm9wZXJ0aWVzLlByb3BlcnR5U2hlZXQ7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkudmlld3MucHJvcGVydGllcy5Qcm9wZXJ0eVNoZWV0UGFnZTsKKworCisvKioKKyAqIFRoaXMgaXMgYW4gZXhhbXBsZSBvZiBhIEV4dGVybmFsRGF0YVNvdXJjZSBtb2RlbCBlZGl0b3IuCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBFeHRlcm5hbERhdGFTb3VyY2VFZGl0b3IKKwlleHRlbmRzIE11bHRpUGFnZUVkaXRvclBhcnQKKwlpbXBsZW1lbnRzIElFZGl0aW5nRG9tYWluUHJvdmlkZXIsIElTZWxlY3Rpb25Qcm92aWRlciwgSU1lbnVMaXN0ZW5lciwgSVZpZXdlclByb3ZpZGVyLCBJR290b01hcmtlciB7CisJLyoqCisJICogVGhpcyBrZWVwcyB0cmFjayBvZiB0aGUgZWRpdGluZyBkb21haW4gdGhhdCBpcyB1c2VkIHRvIHRyYWNrIGFsbCBjaGFuZ2VzIHRvIHRoZSBtb2RlbC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgQWRhcHRlckZhY3RvcnlFZGl0aW5nRG9tYWluIGVkaXRpbmdEb21haW47CisKKwkvKioKKwkgKiBUaGlzIGlzIHRoZSBvbmUgYWRhcHRlciBmYWN0b3J5IHVzZWQgZm9yIHByb3ZpZGluZyB2aWV3cyBvZiB0aGUgbW9kZWwuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIENvbXBvc2VkQWRhcHRlckZhY3RvcnkgYWRhcHRlckZhY3Rvcnk7CisKKwkvKioKKwkgKiBUaGlzIGlzIHRoZSBjb250ZW50IG91dGxpbmUgcGFnZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgSUNvbnRlbnRPdXRsaW5lUGFnZSBjb250ZW50T3V0bGluZVBhZ2U7CisKKwkvKioKKwkgKiBUaGlzIGlzIGEga2x1ZGdlLi4uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIElTdGF0dXNMaW5lTWFuYWdlciBjb250ZW50T3V0bGluZVN0YXR1c0xpbmVNYW5hZ2VyOworCisJLyoqCisJICogVGhpcyBpcyB0aGUgY29udGVudCBvdXRsaW5lIHBhZ2UncyB2aWV3ZXIuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIFRyZWVWaWV3ZXIgY29udGVudE91dGxpbmVWaWV3ZXI7CisKKwkvKioKKwkgKiBUaGlzIGlzIHRoZSBwcm9wZXJ0eSBzaGVldCBwYWdlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBQcm9wZXJ0eVNoZWV0UGFnZSBwcm9wZXJ0eVNoZWV0UGFnZTsKKworCS8qKgorCSAqIFRoaXMgaXMgdGhlIHZpZXdlciB0aGF0IHNoYWRvd3MgdGhlIHNlbGVjdGlvbiBpbiB0aGUgY29udGVudCBvdXRsaW5lLgorCSAqIFRoZSBwYXJlbnQgcmVsYXRpb24gbXVzdCBiZSBjb3JyZWN0bHkgZGVmaW5lZCBmb3IgdGhpcyB0byB3b3JrLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBUcmVlVmlld2VyIHNlbGVjdGlvblZpZXdlcjsKKworCS8qKgorCSAqIFRoaXMga2VlcHMgdHJhY2sgb2YgdGhlIGFjdGl2ZSBjb250ZW50IHZpZXdlciwgd2hpY2ggbWF5IGJlIGVpdGhlciBvbmUgb2YgdGhlIHZpZXdlcnMgaW4gdGhlIHBhZ2VzIG9yIHRoZSBjb250ZW50IG91dGxpbmUgdmlld2VyLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBWaWV3ZXIgY3VycmVudFZpZXdlcjsKKworCS8qKgorCSAqIFRoaXMgbGlzdGVucyB0byB3aGljaCBldmVyIHZpZXdlciBpcyBhY3RpdmUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIElTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIgc2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyOworCisJLyoqCisJICogVGhpcyBrZWVwcyB0cmFjayBvZiBhbGwgdGhlIHtAbGluayBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXJ9cyB0aGF0IGFyZSBsaXN0ZW5pbmcgdG8gdGhpcyBlZGl0b3IuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIENvbGxlY3Rpb248SVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcj4gc2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVycyA9IG5ldyBBcnJheUxpc3Q8SVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcj4oKTsKKworCS8qKgorCSAqIFRoaXMga2VlcHMgdHJhY2sgb2YgdGhlIHNlbGVjdGlvbiBvZiB0aGUgZWRpdG9yIGFzIGEgd2hvbGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIElTZWxlY3Rpb24gZWRpdG9yU2VsZWN0aW9uID0gU3RydWN0dXJlZFNlbGVjdGlvbi5FTVBUWTsKKworCS8qKgorCSAqIFRoZSBNYXJrZXJIZWxwZXIgaXMgcmVzcG9uc2libGUgZm9yIGNyZWF0aW5nIHdvcmtzcGFjZSByZXNvdXJjZSBtYXJrZXJzIHByZXNlbnRlZAorCSAqIGluIEVjbGlwc2UncyBQcm9ibGVtcyBWaWV3LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBNYXJrZXJIZWxwZXIgbWFya2VySGVscGVyID0gbmV3IEVkaXRVSU1hcmtlckhlbHBlcigpOworCisJLyoqCisJICogVGhpcyBsaXN0ZW5zIGZvciB3aGVuIHRoZSBvdXRsaW5lIGJlY29tZXMgYWN0aXZlCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIElQYXJ0TGlzdGVuZXIgcGFydExpc3RlbmVyID0KKwkJbmV3IElQYXJ0TGlzdGVuZXIoKSB7CisJCQlwdWJsaWMgdm9pZCBwYXJ0QWN0aXZhdGVkKElXb3JrYmVuY2hQYXJ0IHApIHsKKwkJCQlpZiAocCBpbnN0YW5jZW9mIENvbnRlbnRPdXRsaW5lKSB7CisJCQkJCWlmICgoKENvbnRlbnRPdXRsaW5lKXApLmdldEN1cnJlbnRQYWdlKCkgPT0gY29udGVudE91dGxpbmVQYWdlKSB7CisJCQkJCQlnZXRBY3Rpb25CYXJDb250cmlidXRvcigpLnNldEFjdGl2ZUVkaXRvcihFeHRlcm5hbERhdGFTb3VyY2VFZGl0b3IudGhpcyk7CisKKwkJCQkJCXNldEN1cnJlbnRWaWV3ZXIoY29udGVudE91dGxpbmVWaWV3ZXIpOworCQkJCQl9CisJCQkJfQorCQkJCWVsc2UgaWYgKHAgaW5zdGFuY2VvZiBQcm9wZXJ0eVNoZWV0KSB7CisJCQkJCWlmICgoKFByb3BlcnR5U2hlZXQpcCkuZ2V0Q3VycmVudFBhZ2UoKSA9PSBwcm9wZXJ0eVNoZWV0UGFnZSkgeworCQkJCQkJZ2V0QWN0aW9uQmFyQ29udHJpYnV0b3IoKS5zZXRBY3RpdmVFZGl0b3IoRXh0ZXJuYWxEYXRhU291cmNlRWRpdG9yLnRoaXMpOworCQkJCQkJaGFuZGxlQWN0aXZhdGUoKTsKKwkJCQkJfQorCQkJCX0KKwkJCQllbHNlIGlmIChwID09IEV4dGVybmFsRGF0YVNvdXJjZUVkaXRvci50aGlzKSB7CisJCQkJCWhhbmRsZUFjdGl2YXRlKCk7CisJCQkJfQorCQkJfQorCQkJcHVibGljIHZvaWQgcGFydEJyb3VnaHRUb1RvcChJV29ya2JlbmNoUGFydCBwKSB7CisJCQkJLy8gSWdub3JlLgorCQkJfQorCQkJcHVibGljIHZvaWQgcGFydENsb3NlZChJV29ya2JlbmNoUGFydCBwKSB7CisJCQkJLy8gSWdub3JlLgorCQkJfQorCQkJcHVibGljIHZvaWQgcGFydERlYWN0aXZhdGVkKElXb3JrYmVuY2hQYXJ0IHApIHsKKwkJCQkvLyBJZ25vcmUuCisJCQl9CisJCQlwdWJsaWMgdm9pZCBwYXJ0T3BlbmVkKElXb3JrYmVuY2hQYXJ0IHApIHsKKwkJCQkvLyBJZ25vcmUuCisJCQl9CisJCX07CisKKwkvKioKKwkgKiBSZXNvdXJjZXMgdGhhdCBoYXZlIGJlZW4gcmVtb3ZlZCBzaW5jZSBsYXN0IGFjdGl2YXRpb24uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIENvbGxlY3Rpb248UmVzb3VyY2U+IHJlbW92ZWRSZXNvdXJjZXMgPSBuZXcgQXJyYXlMaXN0PFJlc291cmNlPigpOworCisJLyoqCisJICogUmVzb3VyY2VzIHRoYXQgaGF2ZSBiZWVuIGNoYW5nZWQgc2luY2UgbGFzdCBhY3RpdmF0aW9uLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBDb2xsZWN0aW9uPFJlc291cmNlPiBjaGFuZ2VkUmVzb3VyY2VzID0gbmV3IEFycmF5TGlzdDxSZXNvdXJjZT4oKTsKKworCS8qKgorCSAqIFJlc291cmNlcyB0aGF0IGhhdmUgYmVlbiBzYXZlZC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgQ29sbGVjdGlvbjxSZXNvdXJjZT4gc2F2ZWRSZXNvdXJjZXMgPSBuZXcgQXJyYXlMaXN0PFJlc291cmNlPigpOworCisJLyoqCisJICogTWFwIHRvIHN0b3JlIHRoZSBkaWFnbm9zdGljIGFzc29jaWF0ZWQgd2l0aCBhIHJlc291cmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBNYXA8UmVzb3VyY2UsIERpYWdub3N0aWM+IHJlc291cmNlVG9EaWFnbm9zdGljTWFwID0gbmV3IExpbmtlZEhhc2hNYXA8UmVzb3VyY2UsIERpYWdub3N0aWM+KCk7CisKKwkvKioKKwkgKiBDb250cm9scyB3aGV0aGVyIHRoZSBwcm9ibGVtIGluZGljYXRpb24gc2hvdWxkIGJlIHVwZGF0ZWQuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIGJvb2xlYW4gdXBkYXRlUHJvYmxlbUluZGljYXRpb24gPSB0cnVlOworCisJLyoqCisJICogQWRhcHRlciB1c2VkIHRvIHVwZGF0ZSB0aGUgcHJvYmxlbSBpbmRpY2F0aW9uIHdoZW4gcmVzb3VyY2VzIGFyZSBkZW1hbmRlZCBsb2FkZWQuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIEVDb250ZW50QWRhcHRlciBwcm9ibGVtSW5kaWNhdGlvbkFkYXB0ZXIgPSAKKwkJbmV3IEVDb250ZW50QWRhcHRlcigpIHsKKwkJCUBPdmVycmlkZQorCQkJcHVibGljIHZvaWQgbm90aWZ5Q2hhbmdlZChOb3RpZmljYXRpb24gbm90aWZpY2F0aW9uKSB7CisJCQkJaWYgKG5vdGlmaWNhdGlvbi5nZXROb3RpZmllcigpIGluc3RhbmNlb2YgUmVzb3VyY2UpIHsKKwkJCQkJc3dpdGNoIChub3RpZmljYXRpb24uZ2V0RmVhdHVyZUlEKFJlc291cmNlLmNsYXNzKSkgeworCQkJCQkJY2FzZSBSZXNvdXJjZS5SRVNPVVJDRV9fSVNfTE9BREVEOgorCQkJCQkJY2FzZSBSZXNvdXJjZS5SRVNPVVJDRV9fRVJST1JTOgorCQkJCQkJY2FzZSBSZXNvdXJjZS5SRVNPVVJDRV9fV0FSTklOR1M6IHsKKwkJCQkJCQlSZXNvdXJjZSByZXNvdXJjZSA9IChSZXNvdXJjZSlub3RpZmljYXRpb24uZ2V0Tm90aWZpZXIoKTsKKwkJCQkJCQlEaWFnbm9zdGljIGRpYWdub3N0aWMgPSBhbmFseXplUmVzb3VyY2VQcm9ibGVtcyhyZXNvdXJjZSwgbnVsbCk7CisJCQkJCQkJaWYgKGRpYWdub3N0aWMuZ2V0U2V2ZXJpdHkoKSAhPSBEaWFnbm9zdGljLk9LKSB7CisJCQkJCQkJCXJlc291cmNlVG9EaWFnbm9zdGljTWFwLnB1dChyZXNvdXJjZSwgZGlhZ25vc3RpYyk7CisJCQkJCQkJfQorCQkJCQkJCWVsc2UgeworCQkJCQkJCQlyZXNvdXJjZVRvRGlhZ25vc3RpY01hcC5yZW1vdmUocmVzb3VyY2UpOworCQkJCQkJCX0KKworCQkJCQkJCWlmICh1cGRhdGVQcm9ibGVtSW5kaWNhdGlvbikgeworCQkJCQkJCQlnZXRTaXRlKCkuZ2V0U2hlbGwoKS5nZXREaXNwbGF5KCkuYXN5bmNFeGVjCisJCQkJCQkJCQkobmV3IFJ1bm5hYmxlKCkgeworCQkJCQkJCQkJCSBwdWJsaWMgdm9pZCBydW4oKSB7CisJCQkJCQkJCQkJCSB1cGRhdGVQcm9ibGVtSW5kaWNhdGlvbigpOworCQkJCQkJCQkJCSB9CisJCQkJCQkJCQkgfSk7CisJCQkJCQkJfQorCQkJCQkJCWJyZWFrOworCQkJCQkJfQorCQkJCQl9CisJCQkJfQorCQkJCWVsc2UgeworCQkJCQlzdXBlci5ub3RpZnlDaGFuZ2VkKG5vdGlmaWNhdGlvbik7CisJCQkJfQorCQkJfQorCisJCQlAT3ZlcnJpZGUKKwkJCXByb3RlY3RlZCB2b2lkIHNldFRhcmdldChSZXNvdXJjZSB0YXJnZXQpIHsKKwkJCQliYXNpY1NldFRhcmdldCh0YXJnZXQpOworCQkJfQorCisJCQlAT3ZlcnJpZGUKKwkJCXByb3RlY3RlZCB2b2lkIHVuc2V0VGFyZ2V0KFJlc291cmNlIHRhcmdldCkgeworCQkJCWJhc2ljVW5zZXRUYXJnZXQodGFyZ2V0KTsKKwkJCX0KKwkJfTsKKworCS8qKgorCSAqIFRoaXMgbGlzdGVucyBmb3Igd29ya3NwYWNlIGNoYW5nZXMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIElSZXNvdXJjZUNoYW5nZUxpc3RlbmVyIHJlc291cmNlQ2hhbmdlTGlzdGVuZXIgPQorCQluZXcgSVJlc291cmNlQ2hhbmdlTGlzdGVuZXIoKSB7CisJCQlwdWJsaWMgdm9pZCByZXNvdXJjZUNoYW5nZWQoSVJlc291cmNlQ2hhbmdlRXZlbnQgZXZlbnQpIHsKKwkJCQlJUmVzb3VyY2VEZWx0YSBkZWx0YSA9IGV2ZW50LmdldERlbHRhKCk7CisJCQkJdHJ5IHsKKwkJCQkJY2xhc3MgUmVzb3VyY2VEZWx0YVZpc2l0b3IgaW1wbGVtZW50cyBJUmVzb3VyY2VEZWx0YVZpc2l0b3IgeworCQkJCQkJcHJvdGVjdGVkIFJlc291cmNlU2V0IHJlc291cmNlU2V0ID0gZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpOworCQkJCQkJcHJvdGVjdGVkIENvbGxlY3Rpb248UmVzb3VyY2U+IGNoYW5nZWRSZXNvdXJjZXMgPSBuZXcgQXJyYXlMaXN0PFJlc291cmNlPigpOworCQkJCQkJcHJvdGVjdGVkIENvbGxlY3Rpb248UmVzb3VyY2U+IHJlbW92ZWRSZXNvdXJjZXMgPSBuZXcgQXJyYXlMaXN0PFJlc291cmNlPigpOworCisJCQkJCQlwdWJsaWMgYm9vbGVhbiB2aXNpdChJUmVzb3VyY2VEZWx0YSBkZWx0YSkgeworCQkJCQkJCWlmIChkZWx0YS5nZXRSZXNvdXJjZSgpLmdldFR5cGUoKSA9PSBJUmVzb3VyY2UuRklMRSkgeworCQkJCQkJCQlpZiAoZGVsdGEuZ2V0S2luZCgpID09IElSZXNvdXJjZURlbHRhLlJFTU9WRUQgfHwKKwkJCQkJCQkJICAgIGRlbHRhLmdldEtpbmQoKSA9PSBJUmVzb3VyY2VEZWx0YS5DSEFOR0VEICYmIGRlbHRhLmdldEZsYWdzKCkgIT0gSVJlc291cmNlRGVsdGEuTUFSS0VSUykgeworCQkJCQkJCQkJUmVzb3VyY2UgcmVzb3VyY2UgPSByZXNvdXJjZVNldC5nZXRSZXNvdXJjZShVUkkuY3JlYXRlUGxhdGZvcm1SZXNvdXJjZVVSSShkZWx0YS5nZXRGdWxsUGF0aCgpLnRvU3RyaW5nKCksIHRydWUpLCBmYWxzZSk7CisJCQkJCQkJCQlpZiAocmVzb3VyY2UgIT0gbnVsbCkgeworCQkJCQkJCQkJCWlmIChkZWx0YS5nZXRLaW5kKCkgPT0gSVJlc291cmNlRGVsdGEuUkVNT1ZFRCkgeworCQkJCQkJCQkJCQlyZW1vdmVkUmVzb3VyY2VzLmFkZChyZXNvdXJjZSk7CisJCQkJCQkJCQkJfQorCQkJCQkJCQkJCWVsc2UgaWYgKCFzYXZlZFJlc291cmNlcy5yZW1vdmUocmVzb3VyY2UpKSB7CisJCQkJCQkJCQkJCWNoYW5nZWRSZXNvdXJjZXMuYWRkKHJlc291cmNlKTsKKwkJCQkJCQkJCQl9CisJCQkJCQkJCQl9CisJCQkJCQkJCX0KKwkJCQkJCQl9CisKKwkJCQkJCQlyZXR1cm4gdHJ1ZTsKKwkJCQkJCX0KKworCQkJCQkJcHVibGljIENvbGxlY3Rpb248UmVzb3VyY2U+IGdldENoYW5nZWRSZXNvdXJjZXMoKSB7CisJCQkJCQkJcmV0dXJuIGNoYW5nZWRSZXNvdXJjZXM7CisJCQkJCQl9CisKKwkJCQkJCXB1YmxpYyBDb2xsZWN0aW9uPFJlc291cmNlPiBnZXRSZW1vdmVkUmVzb3VyY2VzKCkgeworCQkJCQkJCXJldHVybiByZW1vdmVkUmVzb3VyY2VzOworCQkJCQkJfQorCQkJCQl9CisKKwkJCQkJZmluYWwgUmVzb3VyY2VEZWx0YVZpc2l0b3IgdmlzaXRvciA9IG5ldyBSZXNvdXJjZURlbHRhVmlzaXRvcigpOworCQkJCQlkZWx0YS5hY2NlcHQodmlzaXRvcik7CisKKwkJCQkJaWYgKCF2aXNpdG9yLmdldFJlbW92ZWRSZXNvdXJjZXMoKS5pc0VtcHR5KCkpIHsKKwkJCQkJCWdldFNpdGUoKS5nZXRTaGVsbCgpLmdldERpc3BsYXkoKS5hc3luY0V4ZWMKKwkJCQkJCQkobmV3IFJ1bm5hYmxlKCkgeworCQkJCQkJCQkgcHVibGljIHZvaWQgcnVuKCkgeworCQkJCQkJCQkJIHJlbW92ZWRSZXNvdXJjZXMuYWRkQWxsKHZpc2l0b3IuZ2V0UmVtb3ZlZFJlc291cmNlcygpKTsKKwkJCQkJCQkJCSBpZiAoIWlzRGlydHkoKSkgeworCQkJCQkJCQkJCSBnZXRTaXRlKCkuZ2V0UGFnZSgpLmNsb3NlRWRpdG9yKEV4dGVybmFsRGF0YVNvdXJjZUVkaXRvci50aGlzLCBmYWxzZSk7CisJCQkJCQkJCQkgfQorCQkJCQkJCQkgfQorCQkJCQkJCSB9KTsKKwkJCQkJfQorCisJCQkJCWlmICghdmlzaXRvci5nZXRDaGFuZ2VkUmVzb3VyY2VzKCkuaXNFbXB0eSgpKSB7CisJCQkJCQlnZXRTaXRlKCkuZ2V0U2hlbGwoKS5nZXREaXNwbGF5KCkuYXN5bmNFeGVjCisJCQkJCQkJKG5ldyBSdW5uYWJsZSgpIHsKKwkJCQkJCQkJIHB1YmxpYyB2b2lkIHJ1bigpIHsKKwkJCQkJCQkJCSBjaGFuZ2VkUmVzb3VyY2VzLmFkZEFsbCh2aXNpdG9yLmdldENoYW5nZWRSZXNvdXJjZXMoKSk7CisJCQkJCQkJCQkgaWYgKGdldFNpdGUoKS5nZXRQYWdlKCkuZ2V0QWN0aXZlRWRpdG9yKCkgPT0gRXh0ZXJuYWxEYXRhU291cmNlRWRpdG9yLnRoaXMpIHsKKwkJCQkJCQkJCQkgaGFuZGxlQWN0aXZhdGUoKTsKKwkJCQkJCQkJCSB9CisJCQkJCQkJCSB9CisJCQkJCQkJIH0pOworCQkJCQl9CisJCQkJfQorCQkJCWNhdGNoIChDb3JlRXhjZXB0aW9uIGV4Y2VwdGlvbikgeworCQkJCQlFeHRlcm5hbERhdGFTb3VyY2VFZGl0UGx1Z2luLklOU1RBTkNFLmxvZyhleGNlcHRpb24pOworCQkJCX0KKwkJCX0KKwkJfTsKKworCS8qKgorCSAqIEhhbmRsZXMgYWN0aXZhdGlvbiBvZiB0aGUgZWRpdG9yIG9yIGl0J3MgYXNzb2NpYXRlZCB2aWV3cy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBoYW5kbGVBY3RpdmF0ZSgpIHsKKwkJLy8gUmVjb21wdXRlIHRoZSByZWFkIG9ubHkgc3RhdGUuCisJCS8vCisJCWlmIChlZGl0aW5nRG9tYWluLmdldFJlc291cmNlVG9SZWFkT25seU1hcCgpICE9IG51bGwpIHsKKwkJICBlZGl0aW5nRG9tYWluLmdldFJlc291cmNlVG9SZWFkT25seU1hcCgpLmNsZWFyKCk7CisKKwkJICAvLyBSZWZyZXNoIGFueSBhY3Rpb25zIHRoYXQgbWF5IGJlY29tZSBlbmFibGVkIG9yIGRpc2FibGVkLgorCQkgIC8vCisJCSAgc2V0U2VsZWN0aW9uKGdldFNlbGVjdGlvbigpKTsKKwkJfQorCisJCWlmICghcmVtb3ZlZFJlc291cmNlcy5pc0VtcHR5KCkpIHsKKwkJCWlmIChoYW5kbGVEaXJ0eUNvbmZsaWN0KCkpIHsKKwkJCQlnZXRTaXRlKCkuZ2V0UGFnZSgpLmNsb3NlRWRpdG9yKEV4dGVybmFsRGF0YVNvdXJjZUVkaXRvci50aGlzLCBmYWxzZSk7CisJCQl9CisJCQllbHNlIHsKKwkJCQlyZW1vdmVkUmVzb3VyY2VzLmNsZWFyKCk7CisJCQkJY2hhbmdlZFJlc291cmNlcy5jbGVhcigpOworCQkJCXNhdmVkUmVzb3VyY2VzLmNsZWFyKCk7CisJCQl9CisJCX0KKwkJZWxzZSBpZiAoIWNoYW5nZWRSZXNvdXJjZXMuaXNFbXB0eSgpKSB7CisJCQljaGFuZ2VkUmVzb3VyY2VzLnJlbW92ZUFsbChzYXZlZFJlc291cmNlcyk7CisJCQloYW5kbGVDaGFuZ2VkUmVzb3VyY2VzKCk7CisJCQljaGFuZ2VkUmVzb3VyY2VzLmNsZWFyKCk7CisJCQlzYXZlZFJlc291cmNlcy5jbGVhcigpOworCQl9CisJfQorCisJLyoqCisJICogSGFuZGxlcyB3aGF0IHRvIGRvIHdpdGggY2hhbmdlZCByZXNvdXJjZXMgb24gYWN0aXZhdGlvbi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBoYW5kbGVDaGFuZ2VkUmVzb3VyY2VzKCkgeworCQlpZiAoIWNoYW5nZWRSZXNvdXJjZXMuaXNFbXB0eSgpICYmICghaXNEaXJ0eSgpIHx8IGhhbmRsZURpcnR5Q29uZmxpY3QoKSkpIHsKKwkJCWlmIChpc0RpcnR5KCkpIHsKKwkJCQljaGFuZ2VkUmVzb3VyY2VzLmFkZEFsbChlZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkuZ2V0UmVzb3VyY2VzKCkpOworCQkJfQorCQkJZWRpdGluZ0RvbWFpbi5nZXRDb21tYW5kU3RhY2soKS5mbHVzaCgpOworCisJCQl1cGRhdGVQcm9ibGVtSW5kaWNhdGlvbiA9IGZhbHNlOworCQkJZm9yIChSZXNvdXJjZSByZXNvdXJjZSA6IGNoYW5nZWRSZXNvdXJjZXMpIHsKKwkJCQlpZiAocmVzb3VyY2UuaXNMb2FkZWQoKSkgeworCQkJCQlyZXNvdXJjZS51bmxvYWQoKTsKKwkJCQkJdHJ5IHsKKwkJCQkJCXJlc291cmNlLmxvYWQoQ29sbGVjdGlvbnMuRU1QVFlfTUFQKTsKKwkJCQkJfQorCQkJCQljYXRjaCAoSU9FeGNlcHRpb24gZXhjZXB0aW9uKSB7CisJCQkJCQlpZiAoIXJlc291cmNlVG9EaWFnbm9zdGljTWFwLmNvbnRhaW5zS2V5KHJlc291cmNlKSkgeworCQkJCQkJCXJlc291cmNlVG9EaWFnbm9zdGljTWFwLnB1dChyZXNvdXJjZSwgYW5hbHl6ZVJlc291cmNlUHJvYmxlbXMocmVzb3VyY2UsIGV4Y2VwdGlvbikpOworCQkJCQkJfQorCQkJCQl9CisJCQkJfQorCQkJfQorCisJCQlpZiAoQWRhcHRlckZhY3RvcnlFZGl0aW5nRG9tYWluLmlzU3RhbGUoZWRpdG9yU2VsZWN0aW9uKSkgeworCQkJCXNldFNlbGVjdGlvbihTdHJ1Y3R1cmVkU2VsZWN0aW9uLkVNUFRZKTsKKwkJCX0KKworCQkJdXBkYXRlUHJvYmxlbUluZGljYXRpb24gPSB0cnVlOworCQkJdXBkYXRlUHJvYmxlbUluZGljYXRpb24oKTsKKwkJfQorCX0KKyAgCisJLyoqCisJICogVXBkYXRlcyB0aGUgcHJvYmxlbXMgaW5kaWNhdGlvbiB3aXRoIHRoZSBpbmZvcm1hdGlvbiBkZXNjcmliZWQgaW4gdGhlIHNwZWNpZmllZCBkaWFnbm9zdGljLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIHVwZGF0ZVByb2JsZW1JbmRpY2F0aW9uKCkgeworCQlpZiAodXBkYXRlUHJvYmxlbUluZGljYXRpb24pIHsKKwkJCUJhc2ljRGlhZ25vc3RpYyBkaWFnbm9zdGljID0KKwkJCQluZXcgQmFzaWNEaWFnbm9zdGljCisJCQkJCShEaWFnbm9zdGljLk9LLAorCQkJCQkgIm9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leHRlcm5hbGRhdGFzb3VyY2UiLCAvLyROT04tTkxTLTEkCisJCQkJCSAwLAorCQkJCQkgbnVsbCwKKwkJCQkJIG5ldyBPYmplY3QgW10geyBlZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkgfSk7CisJCQlmb3IgKERpYWdub3N0aWMgY2hpbGREaWFnbm9zdGljIDogcmVzb3VyY2VUb0RpYWdub3N0aWNNYXAudmFsdWVzKCkpIHsKKwkJCQlpZiAoY2hpbGREaWFnbm9zdGljLmdldFNldmVyaXR5KCkgIT0gRGlhZ25vc3RpYy5PSykgeworCQkJCQlkaWFnbm9zdGljLmFkZChjaGlsZERpYWdub3N0aWMpOworCQkJCX0KKwkJCX0KKworCQkJaW50IGxhc3RFZGl0b3JQYWdlID0gZ2V0UGFnZUNvdW50KCkgLSAxOworCQkJaWYgKGxhc3RFZGl0b3JQYWdlID49IDAgJiYgZ2V0RWRpdG9yKGxhc3RFZGl0b3JQYWdlKSBpbnN0YW5jZW9mIFByb2JsZW1FZGl0b3JQYXJ0KSB7CisJCQkJKChQcm9ibGVtRWRpdG9yUGFydClnZXRFZGl0b3IobGFzdEVkaXRvclBhZ2UpKS5zZXREaWFnbm9zdGljKGRpYWdub3N0aWMpOworCQkJCWlmIChkaWFnbm9zdGljLmdldFNldmVyaXR5KCkgIT0gRGlhZ25vc3RpYy5PSykgeworCQkJCQlzZXRBY3RpdmVQYWdlKGxhc3RFZGl0b3JQYWdlKTsKKwkJCQl9CisJCQl9CisJCQllbHNlIGlmIChkaWFnbm9zdGljLmdldFNldmVyaXR5KCkgIT0gRGlhZ25vc3RpYy5PSykgeworCQkJCVByb2JsZW1FZGl0b3JQYXJ0IHByb2JsZW1FZGl0b3JQYXJ0ID0gbmV3IFByb2JsZW1FZGl0b3JQYXJ0KCk7CisJCQkJcHJvYmxlbUVkaXRvclBhcnQuc2V0RGlhZ25vc3RpYyhkaWFnbm9zdGljKTsKKwkJCQlwcm9ibGVtRWRpdG9yUGFydC5zZXRNYXJrZXJIZWxwZXIobWFya2VySGVscGVyKTsKKwkJCQl0cnkgeworCQkJCQlhZGRQYWdlKCsrbGFzdEVkaXRvclBhZ2UsIHByb2JsZW1FZGl0b3JQYXJ0LCBnZXRFZGl0b3JJbnB1dCgpKTsKKwkJCQkJc2V0UGFnZVRleHQobGFzdEVkaXRvclBhZ2UsIHByb2JsZW1FZGl0b3JQYXJ0LmdldFBhcnROYW1lKCkpOworCQkJCQlzZXRBY3RpdmVQYWdlKGxhc3RFZGl0b3JQYWdlKTsKKwkJCQkJc2hvd1RhYnMoKTsKKwkJCQl9CisJCQkJY2F0Y2ggKFBhcnRJbml0RXhjZXB0aW9uIGV4Y2VwdGlvbikgeworCQkJCQlFeHRlcm5hbERhdGFTb3VyY2VFZGl0UGx1Z2luLklOU1RBTkNFLmxvZyhleGNlcHRpb24pOworCQkJCX0KKwkJCX0KKworCQkJaWYgKG1hcmtlckhlbHBlci5oYXNNYXJrZXJzKGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKSkpIHsKKwkJCQltYXJrZXJIZWxwZXIuZGVsZXRlTWFya2VycyhlZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkpOworCQkJCWlmIChkaWFnbm9zdGljLmdldFNldmVyaXR5KCkgIT0gRGlhZ25vc3RpYy5PSykgeworCQkJCQl0cnkgeworCQkJCQkJbWFya2VySGVscGVyLmNyZWF0ZU1hcmtlcnMoZGlhZ25vc3RpYyk7CisJCQkJCX0KKwkJCQkJY2F0Y2ggKENvcmVFeGNlcHRpb24gZXhjZXB0aW9uKSB7CisJCQkJCQlFeHRlcm5hbERhdGFTb3VyY2VFZGl0UGx1Z2luLklOU1RBTkNFLmxvZyhleGNlcHRpb24pOworCQkJCQl9CisJCQkJfQorCQkJfQorCQl9CisJfQorCisJLyoqCisJICogU2hvd3MgYSBkaWFsb2cgdGhhdCBhc2tzIGlmIGNvbmZsaWN0aW5nIGNoYW5nZXMgc2hvdWxkIGJlIGRpc2NhcmRlZC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgYm9vbGVhbiBoYW5kbGVEaXJ0eUNvbmZsaWN0KCkgeworCQlyZXR1cm4KKwkJCU1lc3NhZ2VEaWFsb2cub3BlblF1ZXN0aW9uCisJCQkJKGdldFNpdGUoKS5nZXRTaGVsbCgpLAorCQkJCSBnZXRTdHJpbmcoIl9VSV9GaWxlQ29uZmxpY3RfbGFiZWwiKSwgLy8kTk9OLU5MUy0xJAorCQkJCSBnZXRTdHJpbmcoIl9XQVJOX0ZpbGVDb25mbGljdCIpKTsgLy8kTk9OLU5MUy0xJAorCX0KKworCS8qKgorCSAqIFRoaXMgY3JlYXRlcyBhIG1vZGVsIGVkaXRvci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRXh0ZXJuYWxEYXRhU291cmNlRWRpdG9yKCkgeworCQlzdXBlcigpOworCQlpbml0aWFsaXplRWRpdGluZ0RvbWFpbigpOworCX0KKworCS8qKgorCSAqIFRoaXMgc2V0cyB1cCB0aGUgZWRpdGluZyBkb21haW4gZm9yIHRoZSBtb2RlbCBlZGl0b3IuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgaW5pdGlhbGl6ZUVkaXRpbmdEb21haW4oKSB7CisJCS8vIENyZWF0ZSBhbiBhZGFwdGVyIGZhY3RvcnkgdGhhdCB5aWVsZHMgaXRlbSBwcm92aWRlcnMuCisJCS8vCisJCWFkYXB0ZXJGYWN0b3J5ID0gbmV3IENvbXBvc2VkQWRhcHRlckZhY3RvcnkoQ29tcG9zZWRBZGFwdGVyRmFjdG9yeS5EZXNjcmlwdG9yLlJlZ2lzdHJ5LklOU1RBTkNFKTsKKworCQlhZGFwdGVyRmFjdG9yeS5hZGRBZGFwdGVyRmFjdG9yeShuZXcgUmVzb3VyY2VJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSgpKTsKKwkJYWRhcHRlckZhY3RvcnkuYWRkQWRhcHRlckZhY3RvcnkobmV3IEV4dGVybmFsRGF0YVNvdXJjZUl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5KCkpOworCQlhZGFwdGVyRmFjdG9yeS5hZGRBZGFwdGVyRmFjdG9yeShuZXcgU3RhbmRhcmRJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSgpKTsKKwkJYWRhcHRlckZhY3RvcnkuYWRkQWRhcHRlckZhY3RvcnkobmV3IENvbW1vbkl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5KCkpOworCQlhZGFwdGVyRmFjdG9yeS5hZGRBZGFwdGVyRmFjdG9yeShuZXcgTW9kZWxJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSgpKTsKKwkJYWRhcHRlckZhY3RvcnkuYWRkQWRhcHRlckZhY3RvcnkobmV3IEdyYXBoSXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkoKSk7CisJCWFkYXB0ZXJGYWN0b3J5LmFkZEFkYXB0ZXJGYWN0b3J5KG5ldyBMYWJlbHNJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSgpKTsKKwkJYWRhcHRlckZhY3RvcnkuYWRkQWRhcHRlckZhY3RvcnkobmV3IE1vZGlmaWVySXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkoKSk7CisJCWFkYXB0ZXJGYWN0b3J5LmFkZEFkYXB0ZXJGYWN0b3J5KG5ldyBFY29yZUl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5KCkpOworCQlhZGFwdGVyRmFjdG9yeS5hZGRBZGFwdGVyRmFjdG9yeShuZXcgU2NlbmFyaW9JdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSgpKTsKKwkJYWRhcHRlckZhY3RvcnkuYWRkQWRhcHRlckZhY3RvcnkobmV3IFNlcXVlbmNlckl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5KCkpOworCQlhZGFwdGVyRmFjdG9yeS5hZGRBZGFwdGVyRmFjdG9yeShuZXcgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLnByb3ZpZGVyLlN0YW5kYXJkSXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkoKSk7CisJCWFkYXB0ZXJGYWN0b3J5LmFkZEFkYXB0ZXJGYWN0b3J5KG5ldyBTb2x2ZXJJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSgpKTsKKwkJYWRhcHRlckZhY3RvcnkuYWRkQWRhcHRlckZhY3RvcnkobmV3IExvZ2dlckl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5KCkpOworCQlhZGFwdGVyRmFjdG9yeS5hZGRBZGFwdGVyRmFjdG9yeShuZXcgUmVmbGVjdGl2ZUl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5KCkpOworCisJCS8vIENyZWF0ZSB0aGUgY29tbWFuZCBzdGFjayB0aGF0IHdpbGwgbm90aWZ5IHRoaXMgZWRpdG9yIGFzIGNvbW1hbmRzIGFyZSBleGVjdXRlZC4KKwkJLy8KKwkJQmFzaWNDb21tYW5kU3RhY2sgY29tbWFuZFN0YWNrID0gbmV3IEJhc2ljQ29tbWFuZFN0YWNrKCk7CisKKwkJLy8gQWRkIGEgbGlzdGVuZXIgdG8gc2V0IHRoZSBtb3N0IHJlY2VudCBjb21tYW5kJ3MgYWZmZWN0ZWQgb2JqZWN0cyB0byBiZSB0aGUgc2VsZWN0aW9uIG9mIHRoZSB2aWV3ZXIgd2l0aCBmb2N1cy4KKwkJLy8KKwkJY29tbWFuZFN0YWNrLmFkZENvbW1hbmRTdGFja0xpc3RlbmVyCisJCQkobmV3IENvbW1hbmRTdGFja0xpc3RlbmVyKCkgeworCQkJCSBwdWJsaWMgdm9pZCBjb21tYW5kU3RhY2tDaGFuZ2VkKGZpbmFsIEV2ZW50T2JqZWN0IGV2ZW50KSB7CisJCQkJCSBnZXRDb250YWluZXIoKS5nZXREaXNwbGF5KCkuYXN5bmNFeGVjCisJCQkJCQkgKG5ldyBSdW5uYWJsZSgpIHsKKwkJCQkJCQkgIHB1YmxpYyB2b2lkIHJ1bigpIHsKKwkJCQkJCQkJICBmaXJlUHJvcGVydHlDaGFuZ2UoSUVkaXRvclBhcnQuUFJPUF9ESVJUWSk7CisKKwkJCQkJCQkJICAvLyBUcnkgdG8gc2VsZWN0IHRoZSBhZmZlY3RlZCBvYmplY3RzLgorCQkJCQkJCQkgIC8vCisJCQkJCQkJCSAgQ29tbWFuZCBtb3N0UmVjZW50Q29tbWFuZCA9ICgoQ29tbWFuZFN0YWNrKWV2ZW50LmdldFNvdXJjZSgpKS5nZXRNb3N0UmVjZW50Q29tbWFuZCgpOworCQkJCQkJCQkgIGlmIChtb3N0UmVjZW50Q29tbWFuZCAhPSBudWxsKSB7CisJCQkJCQkJCQkgIHNldFNlbGVjdGlvblRvVmlld2VyKG1vc3RSZWNlbnRDb21tYW5kLmdldEFmZmVjdGVkT2JqZWN0cygpKTsKKwkJCQkJCQkJICB9CisJCQkJCQkJCSAgaWYgKHByb3BlcnR5U2hlZXRQYWdlICE9IG51bGwgJiYgIXByb3BlcnR5U2hlZXRQYWdlLmdldENvbnRyb2woKS5pc0Rpc3Bvc2VkKCkpIHsKKwkJCQkJCQkJCSAgcHJvcGVydHlTaGVldFBhZ2UucmVmcmVzaCgpOworCQkJCQkJCQkgIH0KKwkJCQkJCQkgIH0KKwkJCQkJCSAgfSk7CisJCQkJIH0KKwkJCSB9KTsKKworCQkvLyBDcmVhdGUgdGhlIGVkaXRpbmcgZG9tYWluIHdpdGggYSBzcGVjaWFsIGNvbW1hbmQgc3RhY2suCisJCS8vCisJCWVkaXRpbmdEb21haW4gPSBuZXcgQWRhcHRlckZhY3RvcnlFZGl0aW5nRG9tYWluKGFkYXB0ZXJGYWN0b3J5LCBjb21tYW5kU3RhY2ssIG5ldyBIYXNoTWFwPFJlc291cmNlLCBCb29sZWFuPigpKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGlzIGhlcmUgZm9yIHRoZSBsaXN0ZW5lciB0byBiZSBhYmxlIHRvIGNhbGwgaXQuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJCQlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgdm9pZCBmaXJlUHJvcGVydHlDaGFuZ2UoaW50IGFjdGlvbikgeworCQlzdXBlci5maXJlUHJvcGVydHlDaGFuZ2UoYWN0aW9uKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHNldHMgdGhlIHNlbGVjdGlvbiBpbnRvIHdoaWNoZXZlciB2aWV3ZXIgaXMgYWN0aXZlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIHNldFNlbGVjdGlvblRvVmlld2VyKENvbGxlY3Rpb248Pz4gY29sbGVjdGlvbikgeworCQlmaW5hbCBDb2xsZWN0aW9uPD8+IHRoZVNlbGVjdGlvbiA9IGNvbGxlY3Rpb247CisJCS8vIE1ha2Ugc3VyZSBpdCdzIG9rYXkuCisJCS8vCisJCWlmICh0aGVTZWxlY3Rpb24gIT0gbnVsbCAmJiAhdGhlU2VsZWN0aW9uLmlzRW1wdHkoKSkgeworCQkJUnVubmFibGUgcnVubmFibGUgPQorCQkJCW5ldyBSdW5uYWJsZSgpIHsKKwkJCQkJcHVibGljIHZvaWQgcnVuKCkgeworCQkJCQkJLy8gVHJ5IHRvIHNlbGVjdCB0aGUgaXRlbXMgaW4gdGhlIGN1cnJlbnQgY29udGVudCB2aWV3ZXIgb2YgdGhlIGVkaXRvci4KKwkJCQkJCS8vCisJCQkJCQlpZiAoY3VycmVudFZpZXdlciAhPSBudWxsKSB7CisJCQkJCQkJY3VycmVudFZpZXdlci5zZXRTZWxlY3Rpb24obmV3IFN0cnVjdHVyZWRTZWxlY3Rpb24odGhlU2VsZWN0aW9uLnRvQXJyYXkoKSksIHRydWUpOworCQkJCQkJfQorCQkJCQl9CisJCQkJfTsKKwkJCWdldFNpdGUoKS5nZXRTaGVsbCgpLmdldERpc3BsYXkoKS5hc3luY0V4ZWMocnVubmFibGUpOworCQl9CisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIHRoZSBlZGl0aW5nIGRvbWFpbiBhcyByZXF1aXJlZCBieSB0aGUge0BsaW5rIElFZGl0aW5nRG9tYWluUHJvdmlkZXJ9IGludGVyZmFjZS4KKwkgKiBUaGlzIGlzIGltcG9ydGFudCBmb3IgaW1wbGVtZW50aW5nIHRoZSBzdGF0aWMgbWV0aG9kcyBvZiB7QGxpbmsgQWRhcHRlckZhY3RvcnlFZGl0aW5nRG9tYWlufQorCSAqIGFuZCBmb3Igc3VwcG9ydGluZyB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkuYWN0aW9uLkNvbW1hbmRBY3Rpb259LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFZGl0aW5nRG9tYWluIGdldEVkaXRpbmdEb21haW4oKSB7CisJCXJldHVybiBlZGl0aW5nRG9tYWluOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBjbGFzcyBSZXZlcnNlQWRhcHRlckZhY3RvcnlDb250ZW50UHJvdmlkZXIgZXh0ZW5kcyBBZGFwdGVyRmFjdG9yeUNvbnRlbnRQcm92aWRlciB7CisJCS8qKgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJcHVibGljIFJldmVyc2VBZGFwdGVyRmFjdG9yeUNvbnRlbnRQcm92aWRlcihBZGFwdGVyRmFjdG9yeSBhZGFwdGVyRmFjdG9yeSkgeworCQkJc3VwZXIoYWRhcHRlckZhY3RvcnkpOworCQl9CisKKwkJLyoqCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlAT3ZlcnJpZGUKKwkJcHVibGljIE9iamVjdCBbXSBnZXRFbGVtZW50cyhPYmplY3Qgb2JqZWN0KSB7CisJCQlPYmplY3QgcGFyZW50ID0gc3VwZXIuZ2V0UGFyZW50KG9iamVjdCk7CisJCQlyZXR1cm4gKHBhcmVudCA9PSBudWxsID8gQ29sbGVjdGlvbnMuRU1QVFlfU0VUIDogQ29sbGVjdGlvbnMuc2luZ2xldG9uKHBhcmVudCkpLnRvQXJyYXkoKTsKKwkJfQorCisJCS8qKgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJQE92ZXJyaWRlCisJCXB1YmxpYyBPYmplY3QgW10gZ2V0Q2hpbGRyZW4oT2JqZWN0IG9iamVjdCkgeworCQkJT2JqZWN0IHBhcmVudCA9IHN1cGVyLmdldFBhcmVudChvYmplY3QpOworCQkJcmV0dXJuIChwYXJlbnQgPT0gbnVsbCA/IENvbGxlY3Rpb25zLkVNUFRZX1NFVCA6IENvbGxlY3Rpb25zLnNpbmdsZXRvbihwYXJlbnQpKS50b0FycmF5KCk7CisJCX0KKworCQkvKioKKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUBPdmVycmlkZQorCQlwdWJsaWMgYm9vbGVhbiBoYXNDaGlsZHJlbihPYmplY3Qgb2JqZWN0KSB7CisJCQlPYmplY3QgcGFyZW50ID0gc3VwZXIuZ2V0UGFyZW50KG9iamVjdCk7CisJCQlyZXR1cm4gcGFyZW50ICE9IG51bGw7CisJCX0KKworCQkvKioKKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUBPdmVycmlkZQorCQlwdWJsaWMgT2JqZWN0IGdldFBhcmVudChPYmplY3Qgb2JqZWN0KSB7CisJCQlyZXR1cm4gbnVsbDsKKwkJfQorCX0KKworCS8qKgorCSAqIFRoaXMgbWFrZXMgc3VyZSB0aGF0IG9uZSBjb250ZW50IHZpZXdlciwgZWl0aGVyIGZvciB0aGUgY3VycmVudCBwYWdlIG9yIHRoZSBvdXRsaW5lIHZpZXcsIGlmIGl0IGhhcyBmb2N1cywKKwkgKiBpcyB0aGUgY3VycmVudCBvbmUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgc2V0Q3VycmVudFZpZXdlcihWaWV3ZXIgdmlld2VyKSB7CisJCS8vIElmIGl0IGlzIGNoYW5naW5nLi4uCisJCS8vCisJCWlmIChjdXJyZW50Vmlld2VyICE9IHZpZXdlcikgeworCQkJaWYgKHNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lciA9PSBudWxsKSB7CisJCQkJLy8gQ3JlYXRlIHRoZSBsaXN0ZW5lciBvbiBkZW1hbmQuCisJCQkJLy8KKwkJCQlzZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIgPQorCQkJCQluZXcgSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcigpIHsKKwkJCQkJCS8vIFRoaXMganVzdCBub3RpZmllcyB0aG9zZSB0aGluZ3MgdGhhdCBhcmUgYWZmZWN0ZWQgYnkgdGhlIHNlY3Rpb24uCisJCQkJCQkvLworCQkJCQkJcHVibGljIHZvaWQgc2VsZWN0aW9uQ2hhbmdlZChTZWxlY3Rpb25DaGFuZ2VkRXZlbnQgc2VsZWN0aW9uQ2hhbmdlZEV2ZW50KSB7CisJCQkJCQkJc2V0U2VsZWN0aW9uKHNlbGVjdGlvbkNoYW5nZWRFdmVudC5nZXRTZWxlY3Rpb24oKSk7CisJCQkJCQl9CisJCQkJCX07CisJCQl9CisKKwkJCS8vIFN0b3AgbGlzdGVuaW5nIHRvIHRoZSBvbGQgb25lLgorCQkJLy8KKwkJCWlmIChjdXJyZW50Vmlld2VyICE9IG51bGwpIHsKKwkJCQljdXJyZW50Vmlld2VyLnJlbW92ZVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcihzZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIpOworCQkJfQorCisJCQkvLyBTdGFydCBsaXN0ZW5pbmcgdG8gdGhlIG5ldyBvbmUuCisJCQkvLworCQkJaWYgKHZpZXdlciAhPSBudWxsKSB7CisJCQkJdmlld2VyLmFkZFNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcihzZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIpOworCQkJfQorCisJCQkvLyBSZW1lbWJlciBpdC4KKwkJCS8vCisJCQljdXJyZW50Vmlld2VyID0gdmlld2VyOworCisJCQkvLyBTZXQgdGhlIGVkaXRvcnMgc2VsZWN0aW9uIGJhc2VkIG9uIHRoZSBjdXJyZW50IHZpZXdlcidzIHNlbGVjdGlvbi4KKwkJCS8vCisJCQlzZXRTZWxlY3Rpb24oY3VycmVudFZpZXdlciA9PSBudWxsID8gU3RydWN0dXJlZFNlbGVjdGlvbi5FTVBUWSA6IGN1cnJlbnRWaWV3ZXIuZ2V0U2VsZWN0aW9uKCkpOworCQl9CisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIHRoZSB2aWV3ZXIgYXMgcmVxdWlyZWQgYnkgdGhlIHtAbGluayBJVmlld2VyUHJvdmlkZXJ9IGludGVyZmFjZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVmlld2VyIGdldFZpZXdlcigpIHsKKwkJcmV0dXJuIGN1cnJlbnRWaWV3ZXI7CisJfQorCisJLyoqCisJICogVGhpcyBjcmVhdGVzIGEgY29udGV4dCBtZW51IGZvciB0aGUgdmlld2VyIGFuZCBhZGRzIGEgbGlzdGVuZXIgYXMgd2VsbCByZWdpc3RlcmluZyB0aGUgbWVudSBmb3IgZXh0ZW5zaW9uLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIGNyZWF0ZUNvbnRleHRNZW51Rm9yKFN0cnVjdHVyZWRWaWV3ZXIgdmlld2VyKSB7CisJCU1lbnVNYW5hZ2VyIGNvbnRleHRNZW51ID0gbmV3IE1lbnVNYW5hZ2VyKCIjUG9wVXAiKTsgLy8kTk9OLU5MUy0xJAorCQljb250ZXh0TWVudS5hZGQobmV3IFNlcGFyYXRvcigiYWRkaXRpb25zIikpOyAvLyROT04tTkxTLTEkCisJCWNvbnRleHRNZW51LnNldFJlbW92ZUFsbFdoZW5TaG93bih0cnVlKTsKKwkJY29udGV4dE1lbnUuYWRkTWVudUxpc3RlbmVyKHRoaXMpOworCQlNZW51IG1lbnU9IGNvbnRleHRNZW51LmNyZWF0ZUNvbnRleHRNZW51KHZpZXdlci5nZXRDb250cm9sKCkpOworCQl2aWV3ZXIuZ2V0Q29udHJvbCgpLnNldE1lbnUobWVudSk7CisJCWdldFNpdGUoKS5yZWdpc3RlckNvbnRleHRNZW51KGNvbnRleHRNZW51LCBuZXcgVW53cmFwcGluZ1NlbGVjdGlvblByb3ZpZGVyKHZpZXdlcikpOworCisJCWludCBkbmRPcGVyYXRpb25zID0gRE5ELkRST1BfQ09QWSB8IERORC5EUk9QX01PVkUgfCBETkQuRFJPUF9MSU5LOworCQlUcmFuc2ZlcltdIHRyYW5zZmVycyA9IG5ldyBUcmFuc2ZlcltdIHsgTG9jYWxUcmFuc2Zlci5nZXRJbnN0YW5jZSgpIH07CisJCXZpZXdlci5hZGREcmFnU3VwcG9ydChkbmRPcGVyYXRpb25zLCB0cmFuc2ZlcnMsIG5ldyBWaWV3ZXJEcmFnQWRhcHRlcih2aWV3ZXIpKTsKKwkJdmlld2VyLmFkZERyb3BTdXBwb3J0KGRuZE9wZXJhdGlvbnMsIHRyYW5zZmVycywgbmV3IEVkaXRpbmdEb21haW5WaWV3ZXJEcm9wQWRhcHRlcihlZGl0aW5nRG9tYWluLCB2aWV3ZXIpKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGlzIHRoZSBtZXRob2QgY2FsbGVkIHRvIGxvYWQgYSByZXNvdXJjZSBpbnRvIHRoZSBlZGl0aW5nIGRvbWFpbidzIHJlc291cmNlIHNldCBiYXNlZCBvbiB0aGUgZWRpdG9yJ3MgaW5wdXQuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgY3JlYXRlTW9kZWwoKSB7CisJCVVSSSByZXNvdXJjZVVSSSA9IEVkaXRVSVV0aWwuZ2V0VVJJKGdldEVkaXRvcklucHV0KCkpOworCQlFeGNlcHRpb24gZXhjZXB0aW9uID0gbnVsbDsKKwkJUmVzb3VyY2UgcmVzb3VyY2UgPSBudWxsOworCQl0cnkgeworCQkJLy8gTG9hZCB0aGUgcmVzb3VyY2UgdGhyb3VnaCB0aGUgZWRpdGluZyBkb21haW4uCisJCQkvLworCQkJcmVzb3VyY2UgPSBlZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkuZ2V0UmVzb3VyY2UocmVzb3VyY2VVUkksIHRydWUpOworCQl9CisJCWNhdGNoIChFeGNlcHRpb24gZSkgeworCQkJZXhjZXB0aW9uID0gZTsKKwkJCXJlc291cmNlID0gZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpLmdldFJlc291cmNlKHJlc291cmNlVVJJLCBmYWxzZSk7CisJCX0KKworCQlEaWFnbm9zdGljIGRpYWdub3N0aWMgPSBhbmFseXplUmVzb3VyY2VQcm9ibGVtcyhyZXNvdXJjZSwgZXhjZXB0aW9uKTsKKwkJaWYgKGRpYWdub3N0aWMuZ2V0U2V2ZXJpdHkoKSAhPSBEaWFnbm9zdGljLk9LKSB7CisJCQlyZXNvdXJjZVRvRGlhZ25vc3RpY01hcC5wdXQocmVzb3VyY2UsICBhbmFseXplUmVzb3VyY2VQcm9ibGVtcyhyZXNvdXJjZSwgZXhjZXB0aW9uKSk7CisJCX0KKwkJZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpLmVBZGFwdGVycygpLmFkZChwcm9ibGVtSW5kaWNhdGlvbkFkYXB0ZXIpOworCX0KKworCS8qKgorCSAqIFJldHVybnMgYSBkaWFnbm9zdGljIGRlc2NyaWJpbmcgdGhlIGVycm9ycyBhbmQgd2FybmluZ3MgbGlzdGVkIGluIHRoZSByZXNvdXJjZQorCSAqIGFuZCB0aGUgc3BlY2lmaWVkIGV4Y2VwdGlvbiAoaWYgYW55KS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRGlhZ25vc3RpYyBhbmFseXplUmVzb3VyY2VQcm9ibGVtcyhSZXNvdXJjZSByZXNvdXJjZSwgRXhjZXB0aW9uIGV4Y2VwdGlvbikgeworCQlpZiAoIXJlc291cmNlLmdldEVycm9ycygpLmlzRW1wdHkoKSB8fCAhcmVzb3VyY2UuZ2V0V2FybmluZ3MoKS5pc0VtcHR5KCkpIHsKKwkJCUJhc2ljRGlhZ25vc3RpYyBiYXNpY0RpYWdub3N0aWMgPQorCQkJCW5ldyBCYXNpY0RpYWdub3N0aWMKKwkJCQkJKERpYWdub3N0aWMuRVJST1IsCisJCQkJCSAib3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4dGVybmFsZGF0YXNvdXJjZSIsIC8vJE5PTi1OTFMtMSQKKwkJCQkJIDAsCisJCQkJCSBnZXRTdHJpbmcoIl9VSV9DcmVhdGVNb2RlbEVycm9yX21lc3NhZ2UiLCByZXNvdXJjZS5nZXRVUkkoKSksIC8vJE5PTi1OTFMtMSQKKwkJCQkJIG5ldyBPYmplY3QgW10geyBleGNlcHRpb24gPT0gbnVsbCA/IChPYmplY3QpcmVzb3VyY2UgOiBleGNlcHRpb24gfSk7CisJCQliYXNpY0RpYWdub3N0aWMubWVyZ2UoRWNvcmVVdGlsLmNvbXB1dGVEaWFnbm9zdGljKHJlc291cmNlLCB0cnVlKSk7CisJCQlyZXR1cm4gYmFzaWNEaWFnbm9zdGljOworCQl9CisJCWVsc2UgaWYgKGV4Y2VwdGlvbiAhPSBudWxsKSB7CisJCQlyZXR1cm4KKwkJCQluZXcgQmFzaWNEaWFnbm9zdGljCisJCQkJCShEaWFnbm9zdGljLkVSUk9SLAorCQkJCQkgIm9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leHRlcm5hbGRhdGFzb3VyY2UiLCAvLyROT04tTkxTLTEkCisJCQkJCSAwLAorCQkJCQkgZ2V0U3RyaW5nKCJfVUlfQ3JlYXRlTW9kZWxFcnJvcl9tZXNzYWdlIiwgcmVzb3VyY2UuZ2V0VVJJKCkpLCAvLyROT04tTkxTLTEkCisJCQkJCSBuZXcgT2JqZWN0W10geyBleGNlcHRpb24gfSk7CisJCX0KKwkJZWxzZSB7CisJCQlyZXR1cm4gRGlhZ25vc3RpYy5PS19JTlNUQU5DRTsKKwkJfQorCX0KKworCS8qKgorCSAqIFRoaXMgaXMgdGhlIG1ldGhvZCB1c2VkIGJ5IHRoZSBmcmFtZXdvcmsgdG8gaW5zdGFsbCB5b3VyIG93biBjb250cm9scy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBjcmVhdGVQYWdlcygpIHsKKwkJLy8gQ3JlYXRlcyB0aGUgbW9kZWwgZnJvbSB0aGUgZWRpdG9yIGlucHV0CisJCS8vCisJCWNyZWF0ZU1vZGVsKCk7CisKKwkJLy8gT25seSBjcmVhdGVzIHRoZSBvdGhlciBwYWdlcyBpZiB0aGVyZSBpcyBzb21ldGhpbmcgdGhhdCBjYW4gYmUgZWRpdGVkCisJCS8vCisJCWlmICghZ2V0RWRpdGluZ0RvbWFpbigpLmdldFJlc291cmNlU2V0KCkuZ2V0UmVzb3VyY2VzKCkuaXNFbXB0eSgpKSB7CisJCQkvLyBDcmVhdGUgYSBwYWdlIGZvciB0aGUgc2VsZWN0aW9uIHRyZWUgdmlldy4KKwkJCS8vCisJCQlUcmVlIHRyZWUgPSBuZXcgVHJlZShnZXRDb250YWluZXIoKSwgU1dULk1VTFRJKTsKKwkJCXNlbGVjdGlvblZpZXdlciA9IG5ldyBUcmVlVmlld2VyKHRyZWUpOworCQkJc2V0Q3VycmVudFZpZXdlcihzZWxlY3Rpb25WaWV3ZXIpOworCisJCQlzZWxlY3Rpb25WaWV3ZXIuc2V0Q29udGVudFByb3ZpZGVyKG5ldyBBZGFwdGVyRmFjdG9yeUNvbnRlbnRQcm92aWRlcihhZGFwdGVyRmFjdG9yeSkpOworCQkJc2VsZWN0aW9uVmlld2VyLnNldExhYmVsUHJvdmlkZXIobmV3IEFkYXB0ZXJGYWN0b3J5TGFiZWxQcm92aWRlcihhZGFwdGVyRmFjdG9yeSkpOworCQkJc2VsZWN0aW9uVmlld2VyLnNldElucHV0KGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKSk7CisJCQlzZWxlY3Rpb25WaWV3ZXIuc2V0U2VsZWN0aW9uKG5ldyBTdHJ1Y3R1cmVkU2VsZWN0aW9uKGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKS5nZXRSZXNvdXJjZXMoKS5nZXQoMCkpLCB0cnVlKTsKKworCQkJbmV3IEFkYXB0ZXJGYWN0b3J5VHJlZUVkaXRvcihzZWxlY3Rpb25WaWV3ZXIuZ2V0VHJlZSgpLCBhZGFwdGVyRmFjdG9yeSk7CisKKwkJCWNyZWF0ZUNvbnRleHRNZW51Rm9yKHNlbGVjdGlvblZpZXdlcik7CisJCQlpbnQgcGFnZUluZGV4ID0gYWRkUGFnZSh0cmVlKTsKKwkJCXNldFBhZ2VUZXh0KHBhZ2VJbmRleCwgZ2V0U3RyaW5nKCJfVUlfU2VsZWN0aW9uUGFnZV9sYWJlbCIpKTsgLy8kTk9OLU5MUy0xJAorCisJCQlnZXRTaXRlKCkuZ2V0U2hlbGwoKS5nZXREaXNwbGF5KCkuYXN5bmNFeGVjCisJCQkJKG5ldyBSdW5uYWJsZSgpIHsKKwkJCQkJIHB1YmxpYyB2b2lkIHJ1bigpIHsKKwkJCQkJCSBzZXRBY3RpdmVQYWdlKDApOworCQkJCQkgfQorCQkJCSB9KTsKKwkJfQorCisJCS8vIEVuc3VyZXMgdGhhdCB0aGlzIGVkaXRvciB3aWxsIG9ubHkgZGlzcGxheSB0aGUgcGFnZSdzIHRhYgorCQkvLyBhcmVhIGlmIHRoZXJlIGFyZSBtb3JlIHRoYW4gb25lIHBhZ2UKKwkJLy8KKwkJZ2V0Q29udGFpbmVyKCkuYWRkQ29udHJvbExpc3RlbmVyCisJCQkobmV3IENvbnRyb2xBZGFwdGVyKCkgeworCQkJCWJvb2xlYW4gZ3VhcmQgPSBmYWxzZTsKKwkJCQlAT3ZlcnJpZGUKKwkJCQlwdWJsaWMgdm9pZCBjb250cm9sUmVzaXplZChDb250cm9sRXZlbnQgZXZlbnQpIHsKKwkJCQkJaWYgKCFndWFyZCkgeworCQkJCQkJZ3VhcmQgPSB0cnVlOworCQkJCQkJaGlkZVRhYnMoKTsKKwkJCQkJCWd1YXJkID0gZmFsc2U7CisJCQkJCX0KKwkJCQl9CisJCQkgfSk7CisKKwkJZ2V0U2l0ZSgpLmdldFNoZWxsKCkuZ2V0RGlzcGxheSgpLmFzeW5jRXhlYworCQkJKG5ldyBSdW5uYWJsZSgpIHsKKwkJCQkgcHVibGljIHZvaWQgcnVuKCkgeworCQkJCQkgdXBkYXRlUHJvYmxlbUluZGljYXRpb24oKTsKKwkJCQkgfQorCQkJIH0pOworCX0KKworCS8qKgorCSAqIElmIHRoZXJlIGlzIGp1c3Qgb25lIHBhZ2UgaW4gdGhlIG11bHRpLXBhZ2UgZWRpdG9yIHBhcnQsCisJICogdGhpcyBoaWRlcyB0aGUgc2luZ2xlIHRhYiBhdCB0aGUgYm90dG9tLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIGhpZGVUYWJzKCkgeworCQlpZiAoZ2V0UGFnZUNvdW50KCkgPD0gMSkgeworCQkJc2V0UGFnZVRleHQoMCwgIiIpOyAvLyROT04tTkxTLTEkCisJCQlpZiAoZ2V0Q29udGFpbmVyKCkgaW5zdGFuY2VvZiBDVGFiRm9sZGVyKSB7CisJCQkJKChDVGFiRm9sZGVyKWdldENvbnRhaW5lcigpKS5zZXRUYWJIZWlnaHQoMSk7CisJCQkJUG9pbnQgcG9pbnQgPSBnZXRDb250YWluZXIoKS5nZXRTaXplKCk7CisJCQkJZ2V0Q29udGFpbmVyKCkuc2V0U2l6ZShwb2ludC54LCBwb2ludC55ICsgNik7CisJCQl9CisJCX0KKwl9CisKKwkvKioKKwkgKiBJZiB0aGVyZSBpcyBtb3JlIHRoYW4gb25lIHBhZ2UgaW4gdGhlIG11bHRpLXBhZ2UgZWRpdG9yIHBhcnQsCisJICogdGhpcyBzaG93cyB0aGUgdGFicyBhdCB0aGUgYm90dG9tLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIHNob3dUYWJzKCkgeworCQlpZiAoZ2V0UGFnZUNvdW50KCkgPiAxKSB7CisJCQlzZXRQYWdlVGV4dCgwLCBnZXRTdHJpbmcoIl9VSV9TZWxlY3Rpb25QYWdlX2xhYmVsIikpOyAvLyROT04tTkxTLTEkCisJCQlpZiAoZ2V0Q29udGFpbmVyKCkgaW5zdGFuY2VvZiBDVGFiRm9sZGVyKSB7CisJCQkJKChDVGFiRm9sZGVyKWdldENvbnRhaW5lcigpKS5zZXRUYWJIZWlnaHQoU1dULkRFRkFVTFQpOworCQkJCVBvaW50IHBvaW50ID0gZ2V0Q29udGFpbmVyKCkuZ2V0U2l6ZSgpOworCQkJCWdldENvbnRhaW5lcigpLnNldFNpemUocG9pbnQueCwgcG9pbnQueSAtIDYpOworCQkJfQorCQl9CisJfQorCisJLyoqCisJICogVGhpcyBpcyB1c2VkIHRvIHRyYWNrIHRoZSBhY3RpdmUgdmlld2VyLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIHBhZ2VDaGFuZ2UoaW50IHBhZ2VJbmRleCkgeworCQlzdXBlci5wYWdlQ2hhbmdlKHBhZ2VJbmRleCk7CisKKwkJaWYgKGNvbnRlbnRPdXRsaW5lUGFnZSAhPSBudWxsKSB7CisJCQloYW5kbGVDb250ZW50T3V0bGluZVNlbGVjdGlvbihjb250ZW50T3V0bGluZVBhZ2UuZ2V0U2VsZWN0aW9uKCkpOworCQl9CisJfQorCisJLyoqCisJICogVGhpcyBpcyBob3cgdGhlIGZyYW1ld29yayBkZXRlcm1pbmVzIHdoaWNoIGludGVyZmFjZXMgd2UgaW1wbGVtZW50LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBTdXBwcmVzc1dhcm5pbmdzKCJyYXd0eXBlcyIpCisJQE92ZXJyaWRlCisJcHVibGljIE9iamVjdCBnZXRBZGFwdGVyKENsYXNzIGtleSkgeworCQlpZiAoa2V5LmVxdWFscyhJQ29udGVudE91dGxpbmVQYWdlLmNsYXNzKSkgeworCQkJcmV0dXJuIHNob3dPdXRsaW5lVmlldygpID8gZ2V0Q29udGVudE91dGxpbmVQYWdlKCkgOiBudWxsOworCQl9CisJCWVsc2UgaWYgKGtleS5lcXVhbHMoSVByb3BlcnR5U2hlZXRQYWdlLmNsYXNzKSkgeworCQkJcmV0dXJuIGdldFByb3BlcnR5U2hlZXRQYWdlKCk7CisJCX0KKwkJZWxzZSBpZiAoa2V5LmVxdWFscyhJR290b01hcmtlci5jbGFzcykpIHsKKwkJCXJldHVybiB0aGlzOworCQl9CisJCWVsc2UgeworCQkJcmV0dXJuIHN1cGVyLmdldEFkYXB0ZXIoa2V5KTsKKwkJfQorCX0KKworCS8qKgorCSAqIFRoaXMgYWNjZXNzZXMgYSBjYWNoZWQgdmVyc2lvbiBvZiB0aGUgY29udGVudCBvdXRsaW5lci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgSUNvbnRlbnRPdXRsaW5lUGFnZSBnZXRDb250ZW50T3V0bGluZVBhZ2UoKSB7CisJCWlmIChjb250ZW50T3V0bGluZVBhZ2UgPT0gbnVsbCkgeworCQkJLy8gVGhlIGNvbnRlbnQgb3V0bGluZSBpcyBqdXN0IGEgdHJlZS4KKwkJCS8vCisJCQljbGFzcyBNeUNvbnRlbnRPdXRsaW5lUGFnZSBleHRlbmRzIENvbnRlbnRPdXRsaW5lUGFnZSB7CisJCQkJQE92ZXJyaWRlCisJCQkJcHVibGljIHZvaWQgY3JlYXRlQ29udHJvbChDb21wb3NpdGUgcGFyZW50KSB7CisJCQkJCXN1cGVyLmNyZWF0ZUNvbnRyb2wocGFyZW50KTsKKwkJCQkJY29udGVudE91dGxpbmVWaWV3ZXIgPSBnZXRUcmVlVmlld2VyKCk7CisJCQkJCWNvbnRlbnRPdXRsaW5lVmlld2VyLmFkZFNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcih0aGlzKTsKKworCQkJCQkvLyBTZXQgdXAgdGhlIHRyZWUgdmlld2VyLgorCQkJCQkvLworCQkJCQljb250ZW50T3V0bGluZVZpZXdlci5zZXRDb250ZW50UHJvdmlkZXIobmV3IEFkYXB0ZXJGYWN0b3J5Q29udGVudFByb3ZpZGVyKGFkYXB0ZXJGYWN0b3J5KSk7CisJCQkJCWNvbnRlbnRPdXRsaW5lVmlld2VyLnNldExhYmVsUHJvdmlkZXIobmV3IEFkYXB0ZXJGYWN0b3J5TGFiZWxQcm92aWRlcihhZGFwdGVyRmFjdG9yeSkpOworCQkJCQljb250ZW50T3V0bGluZVZpZXdlci5zZXRJbnB1dChlZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkpOworCisJCQkJCS8vIE1ha2Ugc3VyZSBvdXIgcG9wdXBzIHdvcmsuCisJCQkJCS8vCisJCQkJCWNyZWF0ZUNvbnRleHRNZW51Rm9yKGNvbnRlbnRPdXRsaW5lVmlld2VyKTsKKworCQkJCQlpZiAoIWVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKS5nZXRSZXNvdXJjZXMoKS5pc0VtcHR5KCkpIHsKKwkJCQkJICAvLyBTZWxlY3QgdGhlIHJvb3Qgb2JqZWN0IGluIHRoZSB2aWV3LgorCQkJCQkgIC8vCisJCQkJCSAgY29udGVudE91dGxpbmVWaWV3ZXIuc2V0U2VsZWN0aW9uKG5ldyBTdHJ1Y3R1cmVkU2VsZWN0aW9uKGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKS5nZXRSZXNvdXJjZXMoKS5nZXQoMCkpLCB0cnVlKTsKKwkJCQkJfQorCQkJCX0KKworCQkJCUBPdmVycmlkZQorCQkJCXB1YmxpYyB2b2lkIG1ha2VDb250cmlidXRpb25zKElNZW51TWFuYWdlciBtZW51TWFuYWdlciwgSVRvb2xCYXJNYW5hZ2VyIHRvb2xCYXJNYW5hZ2VyLCBJU3RhdHVzTGluZU1hbmFnZXIgc3RhdHVzTGluZU1hbmFnZXIpIHsKKwkJCQkJc3VwZXIubWFrZUNvbnRyaWJ1dGlvbnMobWVudU1hbmFnZXIsIHRvb2xCYXJNYW5hZ2VyLCBzdGF0dXNMaW5lTWFuYWdlcik7CisJCQkJCWNvbnRlbnRPdXRsaW5lU3RhdHVzTGluZU1hbmFnZXIgPSBzdGF0dXNMaW5lTWFuYWdlcjsKKwkJCQl9CisKKwkJCQlAT3ZlcnJpZGUKKwkJCQlwdWJsaWMgdm9pZCBzZXRBY3Rpb25CYXJzKElBY3Rpb25CYXJzIGFjdGlvbkJhcnMpIHsKKwkJCQkJc3VwZXIuc2V0QWN0aW9uQmFycyhhY3Rpb25CYXJzKTsKKwkJCQkJZ2V0QWN0aW9uQmFyQ29udHJpYnV0b3IoKS5zaGFyZUdsb2JhbEFjdGlvbnModGhpcywgYWN0aW9uQmFycyk7CisJCQkJfQorCQkJfQorCisJCQljb250ZW50T3V0bGluZVBhZ2UgPSBuZXcgTXlDb250ZW50T3V0bGluZVBhZ2UoKTsKKworCQkJLy8gTGlzdGVuIHRvIHNlbGVjdGlvbiBzbyB0aGF0IHdlIGNhbiBoYW5kbGUgaXQgaXMgYSBzcGVjaWFsIHdheS4KKwkJCS8vCisJCQljb250ZW50T3V0bGluZVBhZ2UuYWRkU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyCisJCQkJKG5ldyBJU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyKCkgeworCQkJCQkgLy8gVGhpcyBlbnN1cmVzIHRoYXQgd2UgaGFuZGxlIHNlbGVjdGlvbnMgY29ycmVjdGx5LgorCQkJCQkgLy8KKwkJCQkJIHB1YmxpYyB2b2lkIHNlbGVjdGlvbkNoYW5nZWQoU2VsZWN0aW9uQ2hhbmdlZEV2ZW50IGV2ZW50KSB7CisJCQkJCQkgaGFuZGxlQ29udGVudE91dGxpbmVTZWxlY3Rpb24oZXZlbnQuZ2V0U2VsZWN0aW9uKCkpOworCQkJCQkgfQorCQkJCSB9KTsKKwkJfQorCisJCXJldHVybiBjb250ZW50T3V0bGluZVBhZ2U7CisJfQorCisJLyoqCisJICogVGhpcyBhY2Nlc3NlcyBhIGNhY2hlZCB2ZXJzaW9uIG9mIHRoZSBwcm9wZXJ0eSBzaGVldC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgSVByb3BlcnR5U2hlZXRQYWdlIGdldFByb3BlcnR5U2hlZXRQYWdlKCkgeworCQlpZiAocHJvcGVydHlTaGVldFBhZ2UgPT0gbnVsbCkgeworCQkJcHJvcGVydHlTaGVldFBhZ2UgPQorCQkJCW5ldyBFeHRlbmRlZFByb3BlcnR5U2hlZXRQYWdlKGVkaXRpbmdEb21haW4pIHsKKwkJCQkJQE92ZXJyaWRlCisJCQkJCXB1YmxpYyB2b2lkIHNldFNlbGVjdGlvblRvVmlld2VyKExpc3Q8Pz4gc2VsZWN0aW9uKSB7CisJCQkJCQlFeHRlcm5hbERhdGFTb3VyY2VFZGl0b3IudGhpcy5zZXRTZWxlY3Rpb25Ub1ZpZXdlcihzZWxlY3Rpb24pOworCQkJCQkJRXh0ZXJuYWxEYXRhU291cmNlRWRpdG9yLnRoaXMuc2V0Rm9jdXMoKTsKKwkJCQkJfQorCisJCQkJCUBPdmVycmlkZQorCQkJCQlwdWJsaWMgdm9pZCBzZXRBY3Rpb25CYXJzKElBY3Rpb25CYXJzIGFjdGlvbkJhcnMpIHsKKwkJCQkJCXN1cGVyLnNldEFjdGlvbkJhcnMoYWN0aW9uQmFycyk7CisJCQkJCQlnZXRBY3Rpb25CYXJDb250cmlidXRvcigpLnNoYXJlR2xvYmFsQWN0aW9ucyh0aGlzLCBhY3Rpb25CYXJzKTsKKwkJCQkJfQorCQkJCX07CisJCQlwcm9wZXJ0eVNoZWV0UGFnZS5zZXRQcm9wZXJ0eVNvdXJjZVByb3ZpZGVyKG5ldyBBZGFwdGVyRmFjdG9yeUNvbnRlbnRQcm92aWRlcihhZGFwdGVyRmFjdG9yeSkpOworCQl9CisKKwkJcmV0dXJuIHByb3BlcnR5U2hlZXRQYWdlOworCX0KKworCS8qKgorCSAqIFRoaXMgZGVhbHMgd2l0aCBob3cgd2Ugd2FudCBzZWxlY3Rpb24gaW4gdGhlIG91dGxpbmVyIHRvIGFmZmVjdCB0aGUgb3RoZXIgdmlld3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgaGFuZGxlQ29udGVudE91dGxpbmVTZWxlY3Rpb24oSVNlbGVjdGlvbiBzZWxlY3Rpb24pIHsKKwkJaWYgKHNlbGVjdGlvblZpZXdlciAhPSBudWxsICYmICFzZWxlY3Rpb24uaXNFbXB0eSgpICYmIHNlbGVjdGlvbiBpbnN0YW5jZW9mIElTdHJ1Y3R1cmVkU2VsZWN0aW9uKSB7CisJCQlJdGVyYXRvcjw/PiBzZWxlY3RlZEVsZW1lbnRzID0gKChJU3RydWN0dXJlZFNlbGVjdGlvbilzZWxlY3Rpb24pLml0ZXJhdG9yKCk7CisJCQlpZiAoc2VsZWN0ZWRFbGVtZW50cy5oYXNOZXh0KCkpIHsKKwkJCQkvLyBHZXQgdGhlIGZpcnN0IHNlbGVjdGVkIGVsZW1lbnQuCisJCQkJLy8KKwkJCQlPYmplY3Qgc2VsZWN0ZWRFbGVtZW50ID0gc2VsZWN0ZWRFbGVtZW50cy5uZXh0KCk7CisKKwkJCQlBcnJheUxpc3Q8T2JqZWN0PiBzZWxlY3Rpb25MaXN0ID0gbmV3IEFycmF5TGlzdDxPYmplY3Q+KCk7CisJCQkJc2VsZWN0aW9uTGlzdC5hZGQoc2VsZWN0ZWRFbGVtZW50KTsKKwkJCQl3aGlsZSAoc2VsZWN0ZWRFbGVtZW50cy5oYXNOZXh0KCkpIHsKKwkJCQkJc2VsZWN0aW9uTGlzdC5hZGQoc2VsZWN0ZWRFbGVtZW50cy5uZXh0KCkpOworCQkJCX0KKworCQkJCS8vIFNldCB0aGUgc2VsZWN0aW9uIHRvIHRoZSB3aWRnZXQuCisJCQkJLy8KKwkJCQlzZWxlY3Rpb25WaWV3ZXIuc2V0U2VsZWN0aW9uKG5ldyBTdHJ1Y3R1cmVkU2VsZWN0aW9uKHNlbGVjdGlvbkxpc3QpKTsKKwkJCX0KKwkJfQorCX0KKworCS8qKgorCSAqIFRoaXMgaXMgZm9yIGltcGxlbWVudGluZyB7QGxpbmsgSUVkaXRvclBhcnR9IGFuZCBzaW1wbHkgdGVzdHMgdGhlIGNvbW1hbmQgc3RhY2suCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIGJvb2xlYW4gaXNEaXJ0eSgpIHsKKwkJcmV0dXJuICgoQmFzaWNDb21tYW5kU3RhY2spZWRpdGluZ0RvbWFpbi5nZXRDb21tYW5kU3RhY2soKSkuaXNTYXZlTmVlZGVkKCk7CisJfQorCisJLyoqCisJICogVGhpcyBpcyBmb3IgaW1wbGVtZW50aW5nIHtAbGluayBJRWRpdG9yUGFydH0gYW5kIHNpbXBseSBzYXZlcyB0aGUgbW9kZWwgZmlsZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBkb1NhdmUoSVByb2dyZXNzTW9uaXRvciBwcm9ncmVzc01vbml0b3IpIHsKKwkJLy8gU2F2ZSBvbmx5IHJlc291cmNlcyB0aGF0IGhhdmUgYWN0dWFsbHkgY2hhbmdlZC4KKwkJLy8KKwkJZmluYWwgTWFwPE9iamVjdCwgT2JqZWN0PiBzYXZlT3B0aW9ucyA9IG5ldyBIYXNoTWFwPE9iamVjdCwgT2JqZWN0PigpOworCQlzYXZlT3B0aW9ucy5wdXQoUmVzb3VyY2UuT1BUSU9OX1NBVkVfT05MWV9JRl9DSEFOR0VELCBSZXNvdXJjZS5PUFRJT05fU0FWRV9PTkxZX0lGX0NIQU5HRURfTUVNT1JZX0JVRkZFUik7CisKKwkJLy8gRG8gdGhlIHdvcmsgd2l0aGluIGFuIG9wZXJhdGlvbiBiZWNhdXNlIHRoaXMgaXMgYSBsb25nIHJ1bm5pbmcgYWN0aXZpdHkgdGhhdCBtb2RpZmllcyB0aGUgd29ya2JlbmNoLgorCQkvLworCQlXb3Jrc3BhY2VNb2RpZnlPcGVyYXRpb24gb3BlcmF0aW9uID0KKwkJCW5ldyBXb3Jrc3BhY2VNb2RpZnlPcGVyYXRpb24oKSB7CisJCQkJLy8gVGhpcyBpcyB0aGUgbWV0aG9kIHRoYXQgZ2V0cyBpbnZva2VkIHdoZW4gdGhlIG9wZXJhdGlvbiBydW5zLgorCQkJCS8vCisJCQkJQE92ZXJyaWRlCisJCQkJcHVibGljIHZvaWQgZXhlY3V0ZShJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IpIHsKKwkJCQkJLy8gU2F2ZSB0aGUgcmVzb3VyY2VzIHRvIHRoZSBmaWxlIHN5c3RlbS4KKwkJCQkJLy8KKwkJCQkJYm9vbGVhbiBmaXJzdCA9IHRydWU7CisJCQkJCWZvciAoUmVzb3VyY2UgcmVzb3VyY2UgOiBlZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkuZ2V0UmVzb3VyY2VzKCkpIHsKKwkJCQkJCWlmICgoZmlyc3QgfHwgIXJlc291cmNlLmdldENvbnRlbnRzKCkuaXNFbXB0eSgpIHx8IGlzUGVyc2lzdGVkKHJlc291cmNlKSkgJiYgIWVkaXRpbmdEb21haW4uaXNSZWFkT25seShyZXNvdXJjZSkpIHsKKwkJCQkJCQl0cnkgeworCQkJCQkJCQlsb25nIHRpbWVTdGFtcCA9IHJlc291cmNlLmdldFRpbWVTdGFtcCgpOworCQkJCQkJCQlyZXNvdXJjZS5zYXZlKHNhdmVPcHRpb25zKTsKKwkJCQkJCQkJaWYgKHJlc291cmNlLmdldFRpbWVTdGFtcCgpICE9IHRpbWVTdGFtcCkgeworCQkJCQkJCQkJc2F2ZWRSZXNvdXJjZXMuYWRkKHJlc291cmNlKTsKKwkJCQkJCQkJfQorCQkJCQkJCX0KKwkJCQkJCQljYXRjaCAoRXhjZXB0aW9uIGV4Y2VwdGlvbikgeworCQkJCQkJCQlyZXNvdXJjZVRvRGlhZ25vc3RpY01hcC5wdXQocmVzb3VyY2UsIGFuYWx5emVSZXNvdXJjZVByb2JsZW1zKHJlc291cmNlLCBleGNlcHRpb24pKTsKKwkJCQkJCQl9CisJCQkJCQkJZmlyc3QgPSBmYWxzZTsKKwkJCQkJCX0KKwkJCQkJfQorCQkJCX0KKwkJCX07CisKKwkJdXBkYXRlUHJvYmxlbUluZGljYXRpb24gPSBmYWxzZTsKKwkJdHJ5IHsKKwkJCS8vIFRoaXMgcnVucyB0aGUgb3B0aW9ucywgYW5kIHNob3dzIHByb2dyZXNzLgorCQkJLy8KKwkJCW5ldyBQcm9ncmVzc01vbml0b3JEaWFsb2coZ2V0U2l0ZSgpLmdldFNoZWxsKCkpLnJ1bih0cnVlLCBmYWxzZSwgb3BlcmF0aW9uKTsKKworCQkJLy8gUmVmcmVzaCB0aGUgbmVjZXNzYXJ5IHN0YXRlLgorCQkJLy8KKwkJCSgoQmFzaWNDb21tYW5kU3RhY2spZWRpdGluZ0RvbWFpbi5nZXRDb21tYW5kU3RhY2soKSkuc2F2ZUlzRG9uZSgpOworCQkJZmlyZVByb3BlcnR5Q2hhbmdlKElFZGl0b3JQYXJ0LlBST1BfRElSVFkpOworCQl9CisJCWNhdGNoIChFeGNlcHRpb24gZXhjZXB0aW9uKSB7CisJCQkvLyBTb21ldGhpbmcgd2VudCB3cm9uZyB0aGF0IHNob3VsZG4ndC4KKwkJCS8vCisJCQlFeHRlcm5hbERhdGFTb3VyY2VFZGl0UGx1Z2luLklOU1RBTkNFLmxvZyhleGNlcHRpb24pOworCQl9CisJCXVwZGF0ZVByb2JsZW1JbmRpY2F0aW9uID0gdHJ1ZTsKKwkJdXBkYXRlUHJvYmxlbUluZGljYXRpb24oKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgd2hldGhlciBzb21ldGhpbmcgaGFzIGJlZW4gcGVyc2lzdGVkIHRvIHRoZSBVUkkgb2YgdGhlIHNwZWNpZmllZCByZXNvdXJjZS4KKwkgKiBUaGUgaW1wbGVtZW50YXRpb24gdXNlcyB0aGUgVVJJIGNvbnZlcnRlciBmcm9tIHRoZSBlZGl0b3IncyByZXNvdXJjZSBzZXQgdG8gdHJ5IHRvIG9wZW4gYW4gaW5wdXQgc3RyZWFtLiAKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgYm9vbGVhbiBpc1BlcnNpc3RlZChSZXNvdXJjZSByZXNvdXJjZSkgeworCQlib29sZWFuIHJlc3VsdCA9IGZhbHNlOworCQl0cnkgeworCQkJSW5wdXRTdHJlYW0gc3RyZWFtID0gZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpLmdldFVSSUNvbnZlcnRlcigpLmNyZWF0ZUlucHV0U3RyZWFtKHJlc291cmNlLmdldFVSSSgpKTsKKwkJCWlmIChzdHJlYW0gIT0gbnVsbCkgeworCQkJCXJlc3VsdCA9IHRydWU7CisJCQkJc3RyZWFtLmNsb3NlKCk7CisJCQl9CisJCX0KKwkJY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKKwkJCS8vIElnbm9yZQorCQl9CisJCXJldHVybiByZXN1bHQ7CisJfQorCisJLyoqCisJICogVGhpcyBhbHdheXMgcmV0dXJucyB0cnVlIGJlY2F1c2UgaXQgaXMgbm90IGN1cnJlbnRseSBzdXBwb3J0ZWQuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIGJvb2xlYW4gaXNTYXZlQXNBbGxvd2VkKCkgeworCQlyZXR1cm4gdHJ1ZTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFsc28gY2hhbmdlcyB0aGUgZWRpdG9yJ3MgaW5wdXQuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgZG9TYXZlQXMoKSB7CisJCVNhdmVBc0RpYWxvZyBzYXZlQXNEaWFsb2cgPSBuZXcgU2F2ZUFzRGlhbG9nKGdldFNpdGUoKS5nZXRTaGVsbCgpKTsKKwkJc2F2ZUFzRGlhbG9nLm9wZW4oKTsKKwkJSVBhdGggcGF0aCA9IHNhdmVBc0RpYWxvZy5nZXRSZXN1bHQoKTsKKwkJaWYgKHBhdGggIT0gbnVsbCkgeworCQkJSUZpbGUgZmlsZSA9IFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5nZXRSb290KCkuZ2V0RmlsZShwYXRoKTsKKwkJCWlmIChmaWxlICE9IG51bGwpIHsKKwkJCQlkb1NhdmVBcyhVUkkuY3JlYXRlUGxhdGZvcm1SZXNvdXJjZVVSSShmaWxlLmdldEZ1bGxQYXRoKCkudG9TdHJpbmcoKSwgdHJ1ZSksIG5ldyBGaWxlRWRpdG9ySW5wdXQoZmlsZSkpOworCQkJfQorCQl9CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgZG9TYXZlQXMoVVJJIHVyaSwgSUVkaXRvcklucHV0IGVkaXRvcklucHV0KSB7CisJCShlZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkuZ2V0UmVzb3VyY2VzKCkuZ2V0KDApKS5zZXRVUkkodXJpKTsKKwkJc2V0SW5wdXRXaXRoTm90aWZ5KGVkaXRvcklucHV0KTsKKwkJc2V0UGFydE5hbWUoZWRpdG9ySW5wdXQuZ2V0TmFtZSgpKTsKKwkJSVByb2dyZXNzTW9uaXRvciBwcm9ncmVzc01vbml0b3IgPQorCQkJZ2V0QWN0aW9uQmFycygpLmdldFN0YXR1c0xpbmVNYW5hZ2VyKCkgIT0gbnVsbCA/CisJCQkJZ2V0QWN0aW9uQmFycygpLmdldFN0YXR1c0xpbmVNYW5hZ2VyKCkuZ2V0UHJvZ3Jlc3NNb25pdG9yKCkgOgorCQkJCW5ldyBOdWxsUHJvZ3Jlc3NNb25pdG9yKCk7CisJCWRvU2F2ZShwcm9ncmVzc01vbml0b3IpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIGdvdG9NYXJrZXIoSU1hcmtlciBtYXJrZXIpIHsKKwkJdHJ5IHsKKwkJCWlmIChtYXJrZXIuZ2V0VHlwZSgpLmVxdWFscyhFVmFsaWRhdG9yLk1BUktFUikpIHsKKwkJCQlTdHJpbmcgdXJpQXR0cmlidXRlID0gbWFya2VyLmdldEF0dHJpYnV0ZShFVmFsaWRhdG9yLlVSSV9BVFRSSUJVVEUsIG51bGwpOworCQkJCWlmICh1cmlBdHRyaWJ1dGUgIT0gbnVsbCkgeworCQkJCQlVUkkgdXJpID0gVVJJLmNyZWF0ZVVSSSh1cmlBdHRyaWJ1dGUpOworCQkJCQlFT2JqZWN0IGVPYmplY3QgPSBlZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkuZ2V0RU9iamVjdCh1cmksIHRydWUpOworCQkJCQlpZiAoZU9iamVjdCAhPSBudWxsKSB7CisJCQkJCSAgc2V0U2VsZWN0aW9uVG9WaWV3ZXIoQ29sbGVjdGlvbnMuc2luZ2xldG9uKGVkaXRpbmdEb21haW4uZ2V0V3JhcHBlcihlT2JqZWN0KSkpOworCQkJCQl9CisJCQkJfQorCQkJfQorCQl9CisJCWNhdGNoIChDb3JlRXhjZXB0aW9uIGV4Y2VwdGlvbikgeworCQkJRXh0ZXJuYWxEYXRhU291cmNlRWRpdFBsdWdpbi5JTlNUQU5DRS5sb2coZXhjZXB0aW9uKTsKKwkJfQorCX0KKworCS8qKgorCSAqIFRoaXMgaXMgY2FsbGVkIGR1cmluZyBzdGFydHVwLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGluaXQoSUVkaXRvclNpdGUgc2l0ZSwgSUVkaXRvcklucHV0IGVkaXRvcklucHV0KSB7CisJCXNldFNpdGUoc2l0ZSk7CisJCXNldElucHV0V2l0aE5vdGlmeShlZGl0b3JJbnB1dCk7CisJCXNldFBhcnROYW1lKGVkaXRvcklucHV0LmdldE5hbWUoKSk7CisJCXNpdGUuc2V0U2VsZWN0aW9uUHJvdmlkZXIodGhpcyk7CisJCXNpdGUuZ2V0UGFnZSgpLmFkZFBhcnRMaXN0ZW5lcihwYXJ0TGlzdGVuZXIpOworCQlSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuYWRkUmVzb3VyY2VDaGFuZ2VMaXN0ZW5lcihyZXNvdXJjZUNoYW5nZUxpc3RlbmVyLCBJUmVzb3VyY2VDaGFuZ2VFdmVudC5QT1NUX0NIQU5HRSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgc2V0Rm9jdXMoKSB7CisJCWdldENvbnRyb2woZ2V0QWN0aXZlUGFnZSgpKS5zZXRGb2N1cygpOworCX0KKworCS8qKgorCSAqIFRoaXMgaW1wbGVtZW50cyB7QGxpbmsgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uUHJvdmlkZXJ9LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIGFkZFNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcihJU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyIGxpc3RlbmVyKSB7CisJCXNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcnMuYWRkKGxpc3RlbmVyKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGltcGxlbWVudHMge0BsaW5rIG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvblByb3ZpZGVyfS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCByZW1vdmVTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIoSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lciBsaXN0ZW5lcikgeworCQlzZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXJzLnJlbW92ZShsaXN0ZW5lcik7CisJfQorCisJLyoqCisJICogVGhpcyBpbXBsZW1lbnRzIHtAbGluayBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb25Qcm92aWRlcn0gdG8gcmV0dXJuIHRoaXMgZWRpdG9yJ3Mgb3ZlcmFsbCBzZWxlY3Rpb24uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIElTZWxlY3Rpb24gZ2V0U2VsZWN0aW9uKCkgeworCQlyZXR1cm4gZWRpdG9yU2VsZWN0aW9uOworCX0KKworCS8qKgorCSAqIFRoaXMgaW1wbGVtZW50cyB7QGxpbmsgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uUHJvdmlkZXJ9IHRvIHNldCB0aGlzIGVkaXRvcidzIG92ZXJhbGwgc2VsZWN0aW9uLgorCSAqIENhbGxpbmcgdGhpcyByZXN1bHQgd2lsbCBub3RpZnkgdGhlIGxpc3RlbmVycy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRTZWxlY3Rpb24oSVNlbGVjdGlvbiBzZWxlY3Rpb24pIHsKKwkJZWRpdG9yU2VsZWN0aW9uID0gc2VsZWN0aW9uOworCisJCWZvciAoSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lciBsaXN0ZW5lciA6IHNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcnMpIHsKKwkJCWxpc3RlbmVyLnNlbGVjdGlvbkNoYW5nZWQobmV3IFNlbGVjdGlvbkNoYW5nZWRFdmVudCh0aGlzLCBzZWxlY3Rpb24pKTsKKwkJfQorCQlzZXRTdGF0dXNMaW5lTWFuYWdlcihzZWxlY3Rpb24pOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIHNldFN0YXR1c0xpbmVNYW5hZ2VyKElTZWxlY3Rpb24gc2VsZWN0aW9uKSB7CisJCUlTdGF0dXNMaW5lTWFuYWdlciBzdGF0dXNMaW5lTWFuYWdlciA9IGN1cnJlbnRWaWV3ZXIgIT0gbnVsbCAmJiBjdXJyZW50Vmlld2VyID09IGNvbnRlbnRPdXRsaW5lVmlld2VyID8KKwkJCWNvbnRlbnRPdXRsaW5lU3RhdHVzTGluZU1hbmFnZXIgOiBnZXRBY3Rpb25CYXJzKCkuZ2V0U3RhdHVzTGluZU1hbmFnZXIoKTsKKworCQlpZiAoc3RhdHVzTGluZU1hbmFnZXIgIT0gbnVsbCkgeworCQkJaWYgKHNlbGVjdGlvbiBpbnN0YW5jZW9mIElTdHJ1Y3R1cmVkU2VsZWN0aW9uKSB7CisJCQkJQ29sbGVjdGlvbjw/PiBjb2xsZWN0aW9uID0gKChJU3RydWN0dXJlZFNlbGVjdGlvbilzZWxlY3Rpb24pLnRvTGlzdCgpOworCQkJCXN3aXRjaCAoY29sbGVjdGlvbi5zaXplKCkpIHsKKwkJCQkJY2FzZSAwOiB7CisJCQkJCQlzdGF0dXNMaW5lTWFuYWdlci5zZXRNZXNzYWdlKGdldFN0cmluZygiX1VJX05vT2JqZWN0U2VsZWN0ZWQiKSk7IC8vJE5PTi1OTFMtMSQKKwkJCQkJCWJyZWFrOworCQkJCQl9CisJCQkJCWNhc2UgMTogeworCQkJCQkJU3RyaW5nIHRleHQgPSBuZXcgQWRhcHRlckZhY3RvcnlJdGVtRGVsZWdhdG9yKGFkYXB0ZXJGYWN0b3J5KS5nZXRUZXh0KGNvbGxlY3Rpb24uaXRlcmF0b3IoKS5uZXh0KCkpOworCQkJCQkJc3RhdHVzTGluZU1hbmFnZXIuc2V0TWVzc2FnZShnZXRTdHJpbmcoIl9VSV9TaW5nbGVPYmplY3RTZWxlY3RlZCIsIHRleHQpKTsgLy8kTk9OLU5MUy0xJAorCQkJCQkJYnJlYWs7CisJCQkJCX0KKwkJCQkJZGVmYXVsdDogeworCQkJCQkJc3RhdHVzTGluZU1hbmFnZXIuc2V0TWVzc2FnZShnZXRTdHJpbmcoIl9VSV9NdWx0aU9iamVjdFNlbGVjdGVkIiwgSW50ZWdlci50b1N0cmluZyhjb2xsZWN0aW9uLnNpemUoKSkpKTsgLy8kTk9OLU5MUy0xJAorCQkJCQkJYnJlYWs7CisJCQkJCX0KKwkJCQl9CisJCQl9CisJCQllbHNlIHsKKwkJCQlzdGF0dXNMaW5lTWFuYWdlci5zZXRNZXNzYWdlKCIiKTsgLy8kTk9OLU5MUy0xJAorCQkJfQorCQl9CisJfQorCisJLyoqCisJICogVGhpcyBsb29rcyB1cCBhIHN0cmluZyBpbiB0aGUgcGx1Z2luJ3MgcGx1Z2luLnByb3BlcnRpZXMgZmlsZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcml2YXRlIHN0YXRpYyBTdHJpbmcgZ2V0U3RyaW5nKFN0cmluZyBrZXkpIHsKKwkJcmV0dXJuIEV4dGVybmFsRGF0YVNvdXJjZUVkaXRQbHVnaW4uSU5TVEFOQ0UuZ2V0U3RyaW5nKGtleSk7CisJfQorCisJLyoqCisJICogVGhpcyBsb29rcyB1cCBhIHN0cmluZyBpbiBwbHVnaW4ucHJvcGVydGllcywgbWFraW5nIGEgc3Vic3RpdHV0aW9uLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByaXZhdGUgc3RhdGljIFN0cmluZyBnZXRTdHJpbmcoU3RyaW5nIGtleSwgT2JqZWN0IHMxKSB7CisJCXJldHVybiBFeHRlcm5hbERhdGFTb3VyY2VFZGl0UGx1Z2luLklOU1RBTkNFLmdldFN0cmluZyhrZXksIG5ldyBPYmplY3QgW10geyBzMSB9KTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGltcGxlbWVudHMge0BsaW5rIG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JTWVudUxpc3RlbmVyfSB0byBoZWxwIGZpbGwgdGhlIGNvbnRleHQgbWVudXMgd2l0aCBjb250cmlidXRpb25zIGZyb20gdGhlIEVkaXQgbWVudS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBtZW51QWJvdXRUb1Nob3coSU1lbnVNYW5hZ2VyIG1lbnVNYW5hZ2VyKSB7CisJCSgoSU1lbnVMaXN0ZW5lcilnZXRFZGl0b3JTaXRlKCkuZ2V0QWN0aW9uQmFyQ29udHJpYnV0b3IoKSkubWVudUFib3V0VG9TaG93KG1lbnVNYW5hZ2VyKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRWRpdGluZ0RvbWFpbkFjdGlvbkJhckNvbnRyaWJ1dG9yIGdldEFjdGlvbkJhckNvbnRyaWJ1dG9yKCkgeworCQlyZXR1cm4gKEVkaXRpbmdEb21haW5BY3Rpb25CYXJDb250cmlidXRvcilnZXRFZGl0b3JTaXRlKCkuZ2V0QWN0aW9uQmFyQ29udHJpYnV0b3IoKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgSUFjdGlvbkJhcnMgZ2V0QWN0aW9uQmFycygpIHsKKwkJcmV0dXJuIGdldEFjdGlvbkJhckNvbnRyaWJ1dG9yKCkuZ2V0QWN0aW9uQmFycygpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBBZGFwdGVyRmFjdG9yeSBnZXRBZGFwdGVyRmFjdG9yeSgpIHsKKwkJcmV0dXJuIGFkYXB0ZXJGYWN0b3J5OworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGRpc3Bvc2UoKSB7CisJCXVwZGF0ZVByb2JsZW1JbmRpY2F0aW9uID0gZmFsc2U7CisKKwkJUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLnJlbW92ZVJlc291cmNlQ2hhbmdlTGlzdGVuZXIocmVzb3VyY2VDaGFuZ2VMaXN0ZW5lcik7CisKKwkJZ2V0U2l0ZSgpLmdldFBhZ2UoKS5yZW1vdmVQYXJ0TGlzdGVuZXIocGFydExpc3RlbmVyKTsKKworCQlhZGFwdGVyRmFjdG9yeS5kaXNwb3NlKCk7CisKKwkJaWYgKGdldEFjdGlvbkJhckNvbnRyaWJ1dG9yKCkuZ2V0QWN0aXZlRWRpdG9yKCkgPT0gdGhpcykgeworCQkJZ2V0QWN0aW9uQmFyQ29udHJpYnV0b3IoKS5zZXRBY3RpdmVFZGl0b3IobnVsbCk7CisJCX0KKworCQlpZiAocHJvcGVydHlTaGVldFBhZ2UgIT0gbnVsbCkgeworCQkJcHJvcGVydHlTaGVldFBhZ2UuZGlzcG9zZSgpOworCQl9CisKKwkJaWYgKGNvbnRlbnRPdXRsaW5lUGFnZSAhPSBudWxsKSB7CisJCQljb250ZW50T3V0bGluZVBhZ2UuZGlzcG9zZSgpOworCQl9CisKKwkJc3VwZXIuZGlzcG9zZSgpOworCX0KKworCS8qKgorCSAqIFJldHVybnMgd2hldGhlciB0aGUgb3V0bGluZSB2aWV3IHNob3VsZCBiZSBwcmVzZW50ZWQgdG8gdGhlIHVzZXIuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIGJvb2xlYW4gc2hvd091dGxpbmVWaWV3KCkgeworCQlyZXR1cm4gZmFsc2U7CisJfQorfQpkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXh0ZXJuYWxkYXRhc291cmNlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvZXh0ZXJuYWxkYXRhc291cmNlL3ByZXNlbnRhdGlvbi9FeHRlcm5hbERhdGFTb3VyY2VNb2RlbFdpemFyZC5qYXZhIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXh0ZXJuYWxkYXRhc291cmNlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvZXh0ZXJuYWxkYXRhc291cmNlL3ByZXNlbnRhdGlvbi9FeHRlcm5hbERhdGFTb3VyY2VNb2RlbFdpemFyZC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNhOWJjYTAKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leHRlcm5hbGRhdGFzb3VyY2Uvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9leHRlcm5hbGRhdGFzb3VyY2UvcHJlc2VudGF0aW9uL0V4dGVybmFsRGF0YVNvdXJjZU1vZGVsV2l6YXJkLmphdmEKQEAgLTAsMCArMSw2MTEgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4dGVybmFsZGF0YXNvdXJjZS5wcmVzZW50YXRpb247CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIAorICogQ29weXJpZ2h0IChjKSAyMDExIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiAKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdCAKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sIAorICogCisgKiBDb250cmlidXRvcnM6IAorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiAKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlzOworaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOworaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uczsKK2ltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuTWFwOworaW1wb3J0IGphdmEudXRpbC5NaXNzaW5nUmVzb3VyY2VFeGNlcHRpb247CitpbXBvcnQgamF2YS51dGlsLlN0cmluZ1Rva2VuaXplcjsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklDb250YWluZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUZpbGU7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUZvbGRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUmVzb3VyY2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuUmVzb3VyY2VzUGx1Z2luOworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUHJvZ3Jlc3NNb25pdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QYXRoOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24uQ29tbW9uUGx1Z2luOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5VUkk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzczsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzaWZpZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3Q7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnJlc291cmNlLlJlc291cmNlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5yZXNvdXJjZS5SZXNvdXJjZVNldDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUucmVzb3VyY2UuaW1wbC5SZXNvdXJjZVNldEltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnhtaS5YTUxSZXNvdXJjZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5wcm92aWRlci5FeHRlbmRlZEltYWdlUmVnaXN0cnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuZGlhbG9ncy5NZXNzYWdlRGlhbG9nOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTdHJ1Y3R1cmVkU2VsZWN0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuU3RydWN0dXJlZFNlbGVjdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS53aXphcmQuV2l6YXJkOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLndpemFyZC5XaXphcmRQYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leHRlcm5hbGRhdGFzb3VyY2UuRXh0ZXJuYWxEYXRhU291cmNlRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXh0ZXJuYWxkYXRhc291cmNlLkV4dGVybmFsRGF0YVNvdXJjZVBhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4dGVybmFsZGF0YXNvdXJjZS5wcm92aWRlci5FeHRlcm5hbERhdGFTb3VyY2VFZGl0UGx1Z2luOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5TV1Q7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5Nb2RpZnlFdmVudDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLk1vZGlmeUxpc3RlbmVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5sYXlvdXQuR3JpZERhdGE7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5HcmlkTGF5b3V0OworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbWJvOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5MYWJlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5JTmV3V2l6YXJkOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2g7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaFBhZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaFBhcnQ7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaFdpbmRvdzsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5QYXJ0SW5pdEV4Y2VwdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5hY3Rpb25zLldvcmtzcGFjZU1vZGlmeU9wZXJhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5kaWFsb2dzLldpemFyZE5ld0ZpbGVDcmVhdGlvblBhZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkucGFydC5GaWxlRWRpdG9ySW5wdXQ7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkucGFydC5JU2V0U2VsZWN0aW9uVGFyZ2V0OworCisKKy8qKgorICogVGhpcyBpcyBhIHNpbXBsZSB3aXphcmQgZm9yIGNyZWF0aW5nIGEgbmV3IG1vZGVsIGZpbGUuCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBFeHRlcm5hbERhdGFTb3VyY2VNb2RlbFdpemFyZCBleHRlbmRzIFdpemFyZCBpbXBsZW1lbnRzIElOZXdXaXphcmQgeworCS8qKgorCSAqIFRoZSBzdXBwb3J0ZWQgZXh0ZW5zaW9ucyBmb3IgY3JlYXRlZCBmaWxlcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIExpc3Q8U3RyaW5nPiBGSUxFX0VYVEVOU0lPTlMgPQorCQlDb2xsZWN0aW9ucy51bm1vZGlmaWFibGVMaXN0KEFycmF5cy5hc0xpc3QoRXh0ZXJuYWxEYXRhU291cmNlRWRpdFBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoIl9VSV9FeHRlcm5hbERhdGFTb3VyY2VFZGl0b3JGaWxlbmFtZUV4dGVuc2lvbnMiKS5zcGxpdCgiXFxzKixcXHMqIikpKTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCisKKwkvKioKKwkgKiBBIGZvcm1hdHRlZCBsaXN0IG9mIHN1cHBvcnRlZCBmaWxlIGV4dGVuc2lvbnMsIHN1aXRhYmxlIGZvciBkaXNwbGF5LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEZPUk1BVFRFRF9GSUxFX0VYVEVOU0lPTlMgPQorCQlFeHRlcm5hbERhdGFTb3VyY2VFZGl0UGx1Z2luLklOU1RBTkNFLmdldFN0cmluZygiX1VJX0V4dGVybmFsRGF0YVNvdXJjZUVkaXRvckZpbGVuYW1lRXh0ZW5zaW9ucyIpLnJlcGxhY2VBbGwoIlxccyosXFxzKiIsICIsICIpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQgLy8kTk9OLU5MUy0zJAorCisJLyoqCisJICogVGhpcyBjYWNoZXMgYW4gaW5zdGFuY2Ugb2YgdGhlIG1vZGVsIHBhY2thZ2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIEV4dGVybmFsRGF0YVNvdXJjZVBhY2thZ2UgZXh0ZXJuYWxEYXRhU291cmNlUGFja2FnZSA9IEV4dGVybmFsRGF0YVNvdXJjZVBhY2thZ2UuZUlOU1RBTkNFOworCisJLyoqCisJICogVGhpcyBjYWNoZXMgYW4gaW5zdGFuY2Ugb2YgdGhlIG1vZGVsIGZhY3RvcnkuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIEV4dGVybmFsRGF0YVNvdXJjZUZhY3RvcnkgZXh0ZXJuYWxEYXRhU291cmNlRmFjdG9yeSA9IGV4dGVybmFsRGF0YVNvdXJjZVBhY2thZ2UuZ2V0RXh0ZXJuYWxEYXRhU291cmNlRmFjdG9yeSgpOworCisJLyoqCisJICogVGhpcyBpcyB0aGUgZmlsZSBjcmVhdGlvbiBwYWdlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBFeHRlcm5hbERhdGFTb3VyY2VNb2RlbFdpemFyZE5ld0ZpbGVDcmVhdGlvblBhZ2UgbmV3RmlsZUNyZWF0aW9uUGFnZTsKKworCS8qKgorCSAqIFRoaXMgaXMgdGhlIGluaXRpYWwgb2JqZWN0IGNyZWF0aW9uIHBhZ2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIEV4dGVybmFsRGF0YVNvdXJjZU1vZGVsV2l6YXJkSW5pdGlhbE9iamVjdENyZWF0aW9uUGFnZSBpbml0aWFsT2JqZWN0Q3JlYXRpb25QYWdlOworCisJLyoqCisJICogUmVtZW1iZXIgdGhlIHNlbGVjdGlvbiBkdXJpbmcgaW5pdGlhbGl6YXRpb24gZm9yIHBvcHVsYXRpbmcgdGhlIGRlZmF1bHQgY29udGFpbmVyLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBJU3RydWN0dXJlZFNlbGVjdGlvbiBzZWxlY3Rpb247CisKKwkvKioKKwkgKiBSZW1lbWJlciB0aGUgd29ya2JlbmNoIGR1cmluZyBpbml0aWFsaXphdGlvbi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgSVdvcmtiZW5jaCB3b3JrYmVuY2g7CisKKwkvKioKKwkgKiBDYWNoZXMgdGhlIG5hbWVzIG9mIHRoZSB0eXBlcyB0aGF0IGNhbiBiZSBjcmVhdGVkIGFzIHRoZSByb290IG9iamVjdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgTGlzdDxTdHJpbmc+IGluaXRpYWxPYmplY3ROYW1lczsKKworCS8qKgorCSAqIFRoaXMganVzdCByZWNvcmRzIHRoZSBpbmZvcm1hdGlvbi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBpbml0KElXb3JrYmVuY2ggd29ya2JlbmNoLCBJU3RydWN0dXJlZFNlbGVjdGlvbiBzZWxlY3Rpb24pIHsKKwkJdGhpcy53b3JrYmVuY2ggPSB3b3JrYmVuY2g7CisJCXRoaXMuc2VsZWN0aW9uID0gc2VsZWN0aW9uOworCQlzZXRXaW5kb3dUaXRsZShFeHRlcm5hbERhdGFTb3VyY2VFZGl0UGx1Z2luLklOU1RBTkNFLmdldFN0cmluZygiX1VJX1dpemFyZF9sYWJlbCIpKTsgLy8kTk9OLU5MUy0xJAorCQlzZXREZWZhdWx0UGFnZUltYWdlRGVzY3JpcHRvcihFeHRlbmRlZEltYWdlUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0SW1hZ2VEZXNjcmlwdG9yKEV4dGVybmFsRGF0YVNvdXJjZUVkaXRQbHVnaW4uSU5TVEFOQ0UuZ2V0SW1hZ2UoImZ1bGwvd2l6YmFuL05ld0V4dGVybmFsRGF0YVNvdXJjZSIpKSk7IC8vJE5PTi1OTFMtMSQKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBuYW1lcyBvZiB0aGUgdHlwZXMgdGhhdCBjYW4gYmUgY3JlYXRlZCBhcyB0aGUgcm9vdCBvYmplY3QuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIENvbGxlY3Rpb248U3RyaW5nPiBnZXRJbml0aWFsT2JqZWN0TmFtZXMoKSB7CisJCWlmIChpbml0aWFsT2JqZWN0TmFtZXMgPT0gbnVsbCkgeworCQkJaW5pdGlhbE9iamVjdE5hbWVzID0gbmV3IEFycmF5TGlzdDxTdHJpbmc+KCk7CisJCQlmb3IgKEVDbGFzc2lmaWVyIGVDbGFzc2lmaWVyIDogZXh0ZXJuYWxEYXRhU291cmNlUGFja2FnZS5nZXRFQ2xhc3NpZmllcnMoKSkgeworCQkJCWlmIChlQ2xhc3NpZmllciBpbnN0YW5jZW9mIEVDbGFzcykgeworCQkJCQlFQ2xhc3MgZUNsYXNzID0gKEVDbGFzcyllQ2xhc3NpZmllcjsKKwkJCQkJaWYgKCFlQ2xhc3MuaXNBYnN0cmFjdCgpKSB7CisJCQkJCQlpbml0aWFsT2JqZWN0TmFtZXMuYWRkKGVDbGFzcy5nZXROYW1lKCkpOworCQkJCQl9CisJCQkJfQorCQkJfQorCQkJQ29sbGVjdGlvbnMuc29ydChpbml0aWFsT2JqZWN0TmFtZXMsIENvbW1vblBsdWdpbi5JTlNUQU5DRS5nZXRDb21wYXJhdG9yKCkpOworCQl9CisJCXJldHVybiBpbml0aWFsT2JqZWN0TmFtZXM7CisJfQorCisJLyoqCisJICogQ3JlYXRlIGEgbmV3IG1vZGVsLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBFT2JqZWN0IGNyZWF0ZUluaXRpYWxNb2RlbCgpIHsKKwkJRUNsYXNzIGVDbGFzcyA9IChFQ2xhc3MpZXh0ZXJuYWxEYXRhU291cmNlUGFja2FnZS5nZXRFQ2xhc3NpZmllcihpbml0aWFsT2JqZWN0Q3JlYXRpb25QYWdlLmdldEluaXRpYWxPYmplY3ROYW1lKCkpOworCQlFT2JqZWN0IHJvb3RPYmplY3QgPSBleHRlcm5hbERhdGFTb3VyY2VGYWN0b3J5LmNyZWF0ZShlQ2xhc3MpOworCQlyZXR1cm4gcm9vdE9iamVjdDsKKwl9CisKKwkvKioKKwkgKiBEbyB0aGUgd29yayBhZnRlciBldmVyeXRoaW5nIGlzIHNwZWNpZmllZC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgYm9vbGVhbiBwZXJmb3JtRmluaXNoKCkgeworCQl0cnkgeworCQkJLy8gUmVtZW1iZXIgdGhlIGZpbGUuCisJCQkvLworCQkJZmluYWwgSUZpbGUgbW9kZWxGaWxlID0gZ2V0TW9kZWxGaWxlKCk7CisKKwkJCS8vIERvIHRoZSB3b3JrIHdpdGhpbiBhbiBvcGVyYXRpb24uCisJCQkvLworCQkJV29ya3NwYWNlTW9kaWZ5T3BlcmF0aW9uIG9wZXJhdGlvbiA9CisJCQkJbmV3IFdvcmtzcGFjZU1vZGlmeU9wZXJhdGlvbigpIHsKKwkJCQkJQE92ZXJyaWRlCisJCQkJCXByb3RlY3RlZCB2b2lkIGV4ZWN1dGUoSVByb2dyZXNzTW9uaXRvciBwcm9ncmVzc01vbml0b3IpIHsKKwkJCQkJCXRyeSB7CisJCQkJCQkJLy8gQ3JlYXRlIGEgcmVzb3VyY2Ugc2V0CisJCQkJCQkJLy8KKwkJCQkJCQlSZXNvdXJjZVNldCByZXNvdXJjZVNldCA9IG5ldyBSZXNvdXJjZVNldEltcGwoKTsKKworCQkJCQkJCS8vIEdldCB0aGUgVVJJIG9mIHRoZSBtb2RlbCBmaWxlLgorCQkJCQkJCS8vCisJCQkJCQkJVVJJIGZpbGVVUkkgPSBVUkkuY3JlYXRlUGxhdGZvcm1SZXNvdXJjZVVSSShtb2RlbEZpbGUuZ2V0RnVsbFBhdGgoKS50b1N0cmluZygpLCB0cnVlKTsKKworCQkJCQkJCS8vIENyZWF0ZSBhIHJlc291cmNlIGZvciB0aGlzIGZpbGUuCisJCQkJCQkJLy8KKwkJCQkJCQlSZXNvdXJjZSByZXNvdXJjZSA9IHJlc291cmNlU2V0LmNyZWF0ZVJlc291cmNlKGZpbGVVUkkpOworCisJCQkJCQkJLy8gQWRkIHRoZSBpbml0aWFsIG1vZGVsIG9iamVjdCB0byB0aGUgY29udGVudHMuCisJCQkJCQkJLy8KKwkJCQkJCQlFT2JqZWN0IHJvb3RPYmplY3QgPSBjcmVhdGVJbml0aWFsTW9kZWwoKTsKKwkJCQkJCQlpZiAocm9vdE9iamVjdCAhPSBudWxsKSB7CisJCQkJCQkJCXJlc291cmNlLmdldENvbnRlbnRzKCkuYWRkKHJvb3RPYmplY3QpOworCQkJCQkJCX0KKworCQkJCQkJCS8vIFNhdmUgdGhlIGNvbnRlbnRzIG9mIHRoZSByZXNvdXJjZSB0byB0aGUgZmlsZSBzeXN0ZW0uCisJCQkJCQkJLy8KKwkJCQkJCQlNYXA8T2JqZWN0LCBPYmplY3Q+IG9wdGlvbnMgPSBuZXcgSGFzaE1hcDxPYmplY3QsIE9iamVjdD4oKTsKKwkJCQkJCQlvcHRpb25zLnB1dChYTUxSZXNvdXJjZS5PUFRJT05fRU5DT0RJTkcsIGluaXRpYWxPYmplY3RDcmVhdGlvblBhZ2UuZ2V0RW5jb2RpbmcoKSk7CisJCQkJCQkJcmVzb3VyY2Uuc2F2ZShvcHRpb25zKTsKKwkJCQkJCX0KKwkJCQkJCWNhdGNoIChFeGNlcHRpb24gZXhjZXB0aW9uKSB7CisJCQkJCQkJRXh0ZXJuYWxEYXRhU291cmNlRWRpdFBsdWdpbi5JTlNUQU5DRS5sb2coZXhjZXB0aW9uKTsKKwkJCQkJCX0KKwkJCQkJCWZpbmFsbHkgeworCQkJCQkJCXByb2dyZXNzTW9uaXRvci5kb25lKCk7CisJCQkJCQl9CisJCQkJCX0KKwkJCQl9OworCisJCQlnZXRDb250YWluZXIoKS5ydW4oZmFsc2UsIGZhbHNlLCBvcGVyYXRpb24pOworCisJCQkvLyBTZWxlY3QgdGhlIG5ldyBmaWxlIHJlc291cmNlIGluIHRoZSBjdXJyZW50IHZpZXcuCisJCQkvLworCQkJSVdvcmtiZW5jaFdpbmRvdyB3b3JrYmVuY2hXaW5kb3cgPSB3b3JrYmVuY2guZ2V0QWN0aXZlV29ya2JlbmNoV2luZG93KCk7CisJCQlJV29ya2JlbmNoUGFnZSBwYWdlID0gd29ya2JlbmNoV2luZG93LmdldEFjdGl2ZVBhZ2UoKTsKKwkJCWZpbmFsIElXb3JrYmVuY2hQYXJ0IGFjdGl2ZVBhcnQgPSBwYWdlLmdldEFjdGl2ZVBhcnQoKTsKKwkJCWlmIChhY3RpdmVQYXJ0IGluc3RhbmNlb2YgSVNldFNlbGVjdGlvblRhcmdldCkgeworCQkJCWZpbmFsIElTZWxlY3Rpb24gdGFyZ2V0U2VsZWN0aW9uID0gbmV3IFN0cnVjdHVyZWRTZWxlY3Rpb24obW9kZWxGaWxlKTsKKwkJCQlnZXRTaGVsbCgpLmdldERpc3BsYXkoKS5hc3luY0V4ZWMKKwkJCQkJKG5ldyBSdW5uYWJsZSgpIHsKKwkJCQkJCSBwdWJsaWMgdm9pZCBydW4oKSB7CisJCQkJCQkJICgoSVNldFNlbGVjdGlvblRhcmdldClhY3RpdmVQYXJ0KS5zZWxlY3RSZXZlYWwodGFyZ2V0U2VsZWN0aW9uKTsKKwkJCQkJCSB9CisJCQkJCSB9KTsKKwkJCX0KKworCQkJLy8gT3BlbiBhbiBlZGl0b3Igb24gdGhlIG5ldyBmaWxlLgorCQkJLy8KKwkJCXRyeSB7CisJCQkJcGFnZS5vcGVuRWRpdG9yCisJCQkJCShuZXcgRmlsZUVkaXRvcklucHV0KG1vZGVsRmlsZSksCisJCQkJCSB3b3JrYmVuY2guZ2V0RWRpdG9yUmVnaXN0cnkoKS5nZXREZWZhdWx0RWRpdG9yKG1vZGVsRmlsZS5nZXRGdWxsUGF0aCgpLnRvU3RyaW5nKCkpLmdldElkKCkpOwkJCQkJIAkgCisJCQl9CisJCQljYXRjaCAoUGFydEluaXRFeGNlcHRpb24gZXhjZXB0aW9uKSB7CisJCQkJTWVzc2FnZURpYWxvZy5vcGVuRXJyb3Iod29ya2JlbmNoV2luZG93LmdldFNoZWxsKCksIEV4dGVybmFsRGF0YVNvdXJjZUVkaXRQbHVnaW4uSU5TVEFOQ0UuZ2V0U3RyaW5nKCJfVUlfT3BlbkVkaXRvckVycm9yX2xhYmVsIiksIGV4Y2VwdGlvbi5nZXRNZXNzYWdlKCkpOyAvLyROT04tTkxTLTEkCisJCQkJcmV0dXJuIGZhbHNlOworCQkJfQorCisJCQlyZXR1cm4gdHJ1ZTsKKwkJfQorCQljYXRjaCAoRXhjZXB0aW9uIGV4Y2VwdGlvbikgeworCQkJRXh0ZXJuYWxEYXRhU291cmNlRWRpdFBsdWdpbi5JTlNUQU5DRS5sb2coZXhjZXB0aW9uKTsKKwkJCXJldHVybiBmYWxzZTsKKwkJfQorCX0KKworCS8qKgorCSAqIFRoaXMgaXMgdGhlIG9uZSBwYWdlIG9mIHRoZSB3aXphcmQuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIGNsYXNzIEV4dGVybmFsRGF0YVNvdXJjZU1vZGVsV2l6YXJkTmV3RmlsZUNyZWF0aW9uUGFnZSBleHRlbmRzIFdpemFyZE5ld0ZpbGVDcmVhdGlvblBhZ2UgeworCQkvKioKKwkJICogUGFzcyBpbiB0aGUgc2VsZWN0aW9uLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJcHVibGljIEV4dGVybmFsRGF0YVNvdXJjZU1vZGVsV2l6YXJkTmV3RmlsZUNyZWF0aW9uUGFnZShTdHJpbmcgcGFnZUlkLCBJU3RydWN0dXJlZFNlbGVjdGlvbiBzZWxlY3Rpb24pIHsKKwkJCXN1cGVyKHBhZ2VJZCwgc2VsZWN0aW9uKTsKKwkJfQorCisJCS8qKgorCQkgKiBUaGUgZnJhbWV3b3JrIGNhbGxzIHRoaXMgdG8gc2VlIGlmIHRoZSBmaWxlIGlzIGNvcnJlY3QuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlAT3ZlcnJpZGUKKwkJcHJvdGVjdGVkIGJvb2xlYW4gdmFsaWRhdGVQYWdlKCkgeworCQkJaWYgKHN1cGVyLnZhbGlkYXRlUGFnZSgpKSB7CisJCQkJU3RyaW5nIGV4dGVuc2lvbiA9IG5ldyBQYXRoKGdldEZpbGVOYW1lKCkpLmdldEZpbGVFeHRlbnNpb24oKTsKKwkJCQlpZiAoZXh0ZW5zaW9uID09IG51bGwgfHwgIUZJTEVfRVhURU5TSU9OUy5jb250YWlucyhleHRlbnNpb24pKSB7CisJCQkJCVN0cmluZyBrZXkgPSBGSUxFX0VYVEVOU0lPTlMuc2l6ZSgpID4gMSA/ICJfV0FSTl9GaWxlbmFtZUV4dGVuc2lvbnMiIDogIl9XQVJOX0ZpbGVuYW1lRXh0ZW5zaW9uIjsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCisJCQkJCXNldEVycm9yTWVzc2FnZShFeHRlcm5hbERhdGFTb3VyY2VFZGl0UGx1Z2luLklOU1RBTkNFLmdldFN0cmluZyhrZXksIG5ldyBPYmplY3QgW10geyBGT1JNQVRURURfRklMRV9FWFRFTlNJT05TIH0pKTsKKwkJCQkJcmV0dXJuIGZhbHNlOworCQkJCX0KKwkJCQlyZXR1cm4gdHJ1ZTsKKwkJCX0KKwkJCXJldHVybiBmYWxzZTsKKwkJfQorCisJCS8qKgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJcHVibGljIElGaWxlIGdldE1vZGVsRmlsZSgpIHsKKwkJCXJldHVybiBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuZ2V0Um9vdCgpLmdldEZpbGUoZ2V0Q29udGFpbmVyRnVsbFBhdGgoKS5hcHBlbmQoZ2V0RmlsZU5hbWUoKSkpOworCQl9CisJfQorCisJLyoqCisJICogVGhpcyBpcyB0aGUgcGFnZSB3aGVyZSB0aGUgdHlwZSBvZiBvYmplY3QgdG8gY3JlYXRlIGlzIHNlbGVjdGVkLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBjbGFzcyBFeHRlcm5hbERhdGFTb3VyY2VNb2RlbFdpemFyZEluaXRpYWxPYmplY3RDcmVhdGlvblBhZ2UgZXh0ZW5kcyBXaXphcmRQYWdlIHsKKwkJLyoqCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlwcm90ZWN0ZWQgQ29tYm8gaW5pdGlhbE9iamVjdEZpZWxkOworCisJCS8qKgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKi8KKwkJcHJvdGVjdGVkIExpc3Q8U3RyaW5nPiBlbmNvZGluZ3M7CisKKwkJLyoqCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlwcm90ZWN0ZWQgQ29tYm8gZW5jb2RpbmdGaWVsZDsKKworCQkvKioKKwkJICogUGFzcyBpbiB0aGUgc2VsZWN0aW9uLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJcHVibGljIEV4dGVybmFsRGF0YVNvdXJjZU1vZGVsV2l6YXJkSW5pdGlhbE9iamVjdENyZWF0aW9uUGFnZShTdHJpbmcgcGFnZUlkKSB7CisJCQlzdXBlcihwYWdlSWQpOworCQl9CisKKwkJLyoqCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlwdWJsaWMgdm9pZCBjcmVhdGVDb250cm9sKENvbXBvc2l0ZSBwYXJlbnQpIHsKKwkJCUNvbXBvc2l0ZSBjb21wb3NpdGUgPSBuZXcgQ29tcG9zaXRlKHBhcmVudCwgU1dULk5PTkUpOyB7CisJCQkJR3JpZExheW91dCBsYXlvdXQgPSBuZXcgR3JpZExheW91dCgpOworCQkJCWxheW91dC5udW1Db2x1bW5zID0gMTsKKwkJCQlsYXlvdXQudmVydGljYWxTcGFjaW5nID0gMTI7CisJCQkJY29tcG9zaXRlLnNldExheW91dChsYXlvdXQpOworCisJCQkJR3JpZERhdGEgZGF0YSA9IG5ldyBHcmlkRGF0YSgpOworCQkJCWRhdGEudmVydGljYWxBbGlnbm1lbnQgPSBHcmlkRGF0YS5GSUxMOworCQkJCWRhdGEuZ3JhYkV4Y2Vzc1ZlcnRpY2FsU3BhY2UgPSB0cnVlOworCQkJCWRhdGEuaG9yaXpvbnRhbEFsaWdubWVudCA9IEdyaWREYXRhLkZJTEw7CisJCQkJY29tcG9zaXRlLnNldExheW91dERhdGEoZGF0YSk7CisJCQl9CisKKwkJCUxhYmVsIGNvbnRhaW5lckxhYmVsID0gbmV3IExhYmVsKGNvbXBvc2l0ZSwgU1dULkxFRlQpOworCQkJeworCQkJCWNvbnRhaW5lckxhYmVsLnNldFRleHQoRXh0ZXJuYWxEYXRhU291cmNlRWRpdFBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoIl9VSV9Nb2RlbE9iamVjdCIpKTsgLy8kTk9OLU5MUy0xJAorCisJCQkJR3JpZERhdGEgZGF0YSA9IG5ldyBHcmlkRGF0YSgpOworCQkJCWRhdGEuaG9yaXpvbnRhbEFsaWdubWVudCA9IEdyaWREYXRhLkZJTEw7CisJCQkJY29udGFpbmVyTGFiZWwuc2V0TGF5b3V0RGF0YShkYXRhKTsKKwkJCX0KKworCQkJaW5pdGlhbE9iamVjdEZpZWxkID0gbmV3IENvbWJvKGNvbXBvc2l0ZSwgU1dULkJPUkRFUik7CisJCQl7CisJCQkJR3JpZERhdGEgZGF0YSA9IG5ldyBHcmlkRGF0YSgpOworCQkJCWRhdGEuaG9yaXpvbnRhbEFsaWdubWVudCA9IEdyaWREYXRhLkZJTEw7CisJCQkJZGF0YS5ncmFiRXhjZXNzSG9yaXpvbnRhbFNwYWNlID0gdHJ1ZTsKKwkJCQlpbml0aWFsT2JqZWN0RmllbGQuc2V0TGF5b3V0RGF0YShkYXRhKTsKKwkJCX0KKworCQkJZm9yIChTdHJpbmcgb2JqZWN0TmFtZSA6IGdldEluaXRpYWxPYmplY3ROYW1lcygpKSB7CisJCQkJaW5pdGlhbE9iamVjdEZpZWxkLmFkZChnZXRMYWJlbChvYmplY3ROYW1lKSk7CisJCQl9CisKKwkJCWlmIChpbml0aWFsT2JqZWN0RmllbGQuZ2V0SXRlbUNvdW50KCkgPT0gMSkgeworCQkJCWluaXRpYWxPYmplY3RGaWVsZC5zZWxlY3QoMCk7CisJCQl9CisJCQlpbml0aWFsT2JqZWN0RmllbGQuYWRkTW9kaWZ5TGlzdGVuZXIodmFsaWRhdG9yKTsKKworCQkJTGFiZWwgZW5jb2RpbmdMYWJlbCA9IG5ldyBMYWJlbChjb21wb3NpdGUsIFNXVC5MRUZUKTsKKwkJCXsKKwkJCQllbmNvZGluZ0xhYmVsLnNldFRleHQoRXh0ZXJuYWxEYXRhU291cmNlRWRpdFBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoIl9VSV9YTUxFbmNvZGluZyIpKTsgLy8kTk9OLU5MUy0xJAorCisJCQkJR3JpZERhdGEgZGF0YSA9IG5ldyBHcmlkRGF0YSgpOworCQkJCWRhdGEuaG9yaXpvbnRhbEFsaWdubWVudCA9IEdyaWREYXRhLkZJTEw7CisJCQkJZW5jb2RpbmdMYWJlbC5zZXRMYXlvdXREYXRhKGRhdGEpOworCQkJfQorCQkJZW5jb2RpbmdGaWVsZCA9IG5ldyBDb21ibyhjb21wb3NpdGUsIFNXVC5CT1JERVIpOworCQkJeworCQkJCUdyaWREYXRhIGRhdGEgPSBuZXcgR3JpZERhdGEoKTsKKwkJCQlkYXRhLmhvcml6b250YWxBbGlnbm1lbnQgPSBHcmlkRGF0YS5GSUxMOworCQkJCWRhdGEuZ3JhYkV4Y2Vzc0hvcml6b250YWxTcGFjZSA9IHRydWU7CisJCQkJZW5jb2RpbmdGaWVsZC5zZXRMYXlvdXREYXRhKGRhdGEpOworCQkJfQorCisJCQlmb3IgKFN0cmluZyBlbmNvZGluZyA6IGdldEVuY29kaW5ncygpKSB7CisJCQkJZW5jb2RpbmdGaWVsZC5hZGQoZW5jb2RpbmcpOworCQkJfQorCisJCQllbmNvZGluZ0ZpZWxkLnNlbGVjdCgwKTsKKwkJCWVuY29kaW5nRmllbGQuYWRkTW9kaWZ5TGlzdGVuZXIodmFsaWRhdG9yKTsKKworCQkJc2V0UGFnZUNvbXBsZXRlKHZhbGlkYXRlUGFnZSgpKTsKKwkJCXNldENvbnRyb2woY29tcG9zaXRlKTsKKwkJfQorCisJCS8qKgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJcHJvdGVjdGVkIE1vZGlmeUxpc3RlbmVyIHZhbGlkYXRvciA9CisJCQluZXcgTW9kaWZ5TGlzdGVuZXIoKSB7CisJCQkJcHVibGljIHZvaWQgbW9kaWZ5VGV4dChNb2RpZnlFdmVudCBlKSB7CisJCQkJCXNldFBhZ2VDb21wbGV0ZSh2YWxpZGF0ZVBhZ2UoKSk7CisJCQkJfQorCQkJfTsKKworCQkvKioKKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCXByb3RlY3RlZCBib29sZWFuIHZhbGlkYXRlUGFnZSgpIHsKKwkJCXJldHVybiBnZXRJbml0aWFsT2JqZWN0TmFtZSgpICE9IG51bGwgJiYgZ2V0RW5jb2RpbmdzKCkuY29udGFpbnMoZW5jb2RpbmdGaWVsZC5nZXRUZXh0KCkpOworCQl9CisKKwkJLyoqCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlAT3ZlcnJpZGUKKwkJcHVibGljIHZvaWQgc2V0VmlzaWJsZShib29sZWFuIHZpc2libGUpIHsKKwkJCXN1cGVyLnNldFZpc2libGUodmlzaWJsZSk7CisJCQlpZiAodmlzaWJsZSkgeworCQkJCWlmIChpbml0aWFsT2JqZWN0RmllbGQuZ2V0SXRlbUNvdW50KCkgPT0gMSkgeworCQkJCQlpbml0aWFsT2JqZWN0RmllbGQuY2xlYXJTZWxlY3Rpb24oKTsKKwkJCQkJZW5jb2RpbmdGaWVsZC5zZXRGb2N1cygpOworCQkJCX0KKwkJCQllbHNlIHsKKwkJCQkJZW5jb2RpbmdGaWVsZC5jbGVhclNlbGVjdGlvbigpOworCQkJCQlpbml0aWFsT2JqZWN0RmllbGQuc2V0Rm9jdXMoKTsKKwkJCQl9CisJCQl9CisJCX0KKworCQkvKioKKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCXB1YmxpYyBTdHJpbmcgZ2V0SW5pdGlhbE9iamVjdE5hbWUoKSB7CisJCQlTdHJpbmcgbGFiZWwgPSBpbml0aWFsT2JqZWN0RmllbGQuZ2V0VGV4dCgpOworCisJCQlmb3IgKFN0cmluZyBuYW1lIDogZ2V0SW5pdGlhbE9iamVjdE5hbWVzKCkpIHsKKwkJCQlpZiAoZ2V0TGFiZWwobmFtZSkuZXF1YWxzKGxhYmVsKSkgeworCQkJCQlyZXR1cm4gbmFtZTsKKwkJCQl9CisJCQl9CisJCQlyZXR1cm4gbnVsbDsKKwkJfQorCisJCS8qKgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJcHVibGljIFN0cmluZyBnZXRFbmNvZGluZygpIHsKKwkJCXJldHVybiBlbmNvZGluZ0ZpZWxkLmdldFRleHQoKTsKKwkJfQorCisJCS8qKgorCQkgKiBSZXR1cm5zIHRoZSBsYWJlbCBmb3IgdGhlIHNwZWNpZmllZCB0eXBlIG5hbWUuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlwcm90ZWN0ZWQgU3RyaW5nIGdldExhYmVsKFN0cmluZyB0eXBlTmFtZSkgeworCQkJdHJ5IHsKKwkJCQlyZXR1cm4gRXh0ZXJuYWxEYXRhU291cmNlRWRpdFBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoIl9VSV8iICsgdHlwZU5hbWUgKyAiX3R5cGUiKTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCisJCQl9CisJCQljYXRjaChNaXNzaW5nUmVzb3VyY2VFeGNlcHRpb24gbXJlKSB7CisJCQkJRXh0ZXJuYWxEYXRhU291cmNlRWRpdFBsdWdpbi5JTlNUQU5DRS5sb2cobXJlKTsKKwkJCX0KKwkJCXJldHVybiB0eXBlTmFtZTsKKwkJfQorCisJCS8qKgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJcHJvdGVjdGVkIENvbGxlY3Rpb248U3RyaW5nPiBnZXRFbmNvZGluZ3MoKSB7CisJCQlpZiAoZW5jb2RpbmdzID09IG51bGwpIHsKKwkJCQllbmNvZGluZ3MgPSBuZXcgQXJyYXlMaXN0PFN0cmluZz4oKTsKKwkJCQlmb3IgKFN0cmluZ1Rva2VuaXplciBzdHJpbmdUb2tlbml6ZXIgPSBuZXcgU3RyaW5nVG9rZW5pemVyKEV4dGVybmFsRGF0YVNvdXJjZUVkaXRQbHVnaW4uSU5TVEFOQ0UuZ2V0U3RyaW5nKCJfVUlfWE1MRW5jb2RpbmdDaG9pY2VzIikpOyBzdHJpbmdUb2tlbml6ZXIuaGFzTW9yZVRva2VucygpOyApIC8vJE5PTi1OTFMtMSQKKwkJCQl7CisJCQkJCWVuY29kaW5ncy5hZGQoc3RyaW5nVG9rZW5pemVyLm5leHRUb2tlbigpKTsKKwkJCQl9CisJCQl9CisJCQlyZXR1cm4gZW5jb2RpbmdzOworCQl9CisJfQorCisJLyoqCisJICogVGhlIGZyYW1ld29yayBjYWxscyB0aGlzIHRvIGNyZWF0ZSB0aGUgY29udGVudHMgb2YgdGhlIHdpemFyZC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwkJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgYWRkUGFnZXMoKSB7CisJCS8vIENyZWF0ZSBhIHBhZ2UsIHNldCB0aGUgdGl0bGUsIGFuZCB0aGUgaW5pdGlhbCBtb2RlbCBmaWxlIG5hbWUuCisJCS8vCisJCW5ld0ZpbGVDcmVhdGlvblBhZ2UgPSBuZXcgRXh0ZXJuYWxEYXRhU291cmNlTW9kZWxXaXphcmROZXdGaWxlQ3JlYXRpb25QYWdlKCJXaGF0ZXZlciIsIHNlbGVjdGlvbik7IC8vJE5PTi1OTFMtMSQKKwkJbmV3RmlsZUNyZWF0aW9uUGFnZS5zZXRUaXRsZShFeHRlcm5hbERhdGFTb3VyY2VFZGl0UGx1Z2luLklOU1RBTkNFLmdldFN0cmluZygiX1VJX0V4dGVybmFsRGF0YVNvdXJjZU1vZGVsV2l6YXJkX2xhYmVsIikpOyAvLyROT04tTkxTLTEkCisJCW5ld0ZpbGVDcmVhdGlvblBhZ2Uuc2V0RGVzY3JpcHRpb24oRXh0ZXJuYWxEYXRhU291cmNlRWRpdFBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoIl9VSV9FeHRlcm5hbERhdGFTb3VyY2VNb2RlbFdpemFyZF9kZXNjcmlwdGlvbiIpKTsgLy8kTk9OLU5MUy0xJAorCQluZXdGaWxlQ3JlYXRpb25QYWdlLnNldEZpbGVOYW1lKEV4dGVybmFsRGF0YVNvdXJjZUVkaXRQbHVnaW4uSU5TVEFOQ0UuZ2V0U3RyaW5nKCJfVUlfRXh0ZXJuYWxEYXRhU291cmNlRWRpdG9yRmlsZW5hbWVEZWZhdWx0QmFzZSIpICsgIi4iICsgRklMRV9FWFRFTlNJT05TLmdldCgwKSk7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAorCQlhZGRQYWdlKG5ld0ZpbGVDcmVhdGlvblBhZ2UpOworCisJCS8vIFRyeSBhbmQgZ2V0IHRoZSByZXNvdXJjZSBzZWxlY3Rpb24gdG8gZGV0ZXJtaW5lIGEgY3VycmVudCBkaXJlY3RvcnkgZm9yIHRoZSBmaWxlIGRpYWxvZy4KKwkJLy8KKwkJaWYgKHNlbGVjdGlvbiAhPSBudWxsICYmICFzZWxlY3Rpb24uaXNFbXB0eSgpKSB7CisJCQkvLyBHZXQgdGhlIHJlc291cmNlLi4uCisJCQkvLworCQkJT2JqZWN0IHNlbGVjdGVkRWxlbWVudCA9IHNlbGVjdGlvbi5pdGVyYXRvcigpLm5leHQoKTsKKwkJCWlmIChzZWxlY3RlZEVsZW1lbnQgaW5zdGFuY2VvZiBJUmVzb3VyY2UpIHsKKwkJCQkvLyBHZXQgdGhlIHJlc291cmNlIHBhcmVudCwgaWYgaXRzIGEgZmlsZS4KKwkJCQkvLworCQkJCUlSZXNvdXJjZSBzZWxlY3RlZFJlc291cmNlID0gKElSZXNvdXJjZSlzZWxlY3RlZEVsZW1lbnQ7CisJCQkJaWYgKHNlbGVjdGVkUmVzb3VyY2UuZ2V0VHlwZSgpID09IElSZXNvdXJjZS5GSUxFKSB7CisJCQkJCXNlbGVjdGVkUmVzb3VyY2UgPSBzZWxlY3RlZFJlc291cmNlLmdldFBhcmVudCgpOworCQkJCX0KKworCQkJCS8vIFRoaXMgZ2l2ZXMgdXMgYSBkaXJlY3RvcnkuLi4KKwkJCQkvLworCQkJCWlmIChzZWxlY3RlZFJlc291cmNlIGluc3RhbmNlb2YgSUZvbGRlciB8fCBzZWxlY3RlZFJlc291cmNlIGluc3RhbmNlb2YgSVByb2plY3QpIHsKKwkJCQkJLy8gU2V0IHRoaXMgZm9yIHRoZSBjb250YWluZXIuCisJCQkJCS8vCisJCQkJCW5ld0ZpbGVDcmVhdGlvblBhZ2Uuc2V0Q29udGFpbmVyRnVsbFBhdGgoc2VsZWN0ZWRSZXNvdXJjZS5nZXRGdWxsUGF0aCgpKTsKKworCQkJCQkvLyBNYWtlIHVwIGEgdW5pcXVlIG5ldyBuYW1lIGhlcmUuCisJCQkJCS8vCisJCQkJCVN0cmluZyBkZWZhdWx0TW9kZWxCYXNlRmlsZW5hbWUgPSBFeHRlcm5hbERhdGFTb3VyY2VFZGl0UGx1Z2luLklOU1RBTkNFLmdldFN0cmluZygiX1VJX0V4dGVybmFsRGF0YVNvdXJjZUVkaXRvckZpbGVuYW1lRGVmYXVsdEJhc2UiKTsgLy8kTk9OLU5MUy0xJAorCQkJCQlTdHJpbmcgZGVmYXVsdE1vZGVsRmlsZW5hbWVFeHRlbnNpb24gPSBGSUxFX0VYVEVOU0lPTlMuZ2V0KDApOworCQkJCQlTdHJpbmcgbW9kZWxGaWxlbmFtZSA9IGRlZmF1bHRNb2RlbEJhc2VGaWxlbmFtZSArICIuIiArIGRlZmF1bHRNb2RlbEZpbGVuYW1lRXh0ZW5zaW9uOyAvLyROT04tTkxTLTEkCisJCQkJCWZvciAoaW50IGkgPSAxOyAoKElDb250YWluZXIpc2VsZWN0ZWRSZXNvdXJjZSkuZmluZE1lbWJlcihtb2RlbEZpbGVuYW1lKSAhPSBudWxsOyArK2kpIHsKKwkJCQkJCW1vZGVsRmlsZW5hbWUgPSBkZWZhdWx0TW9kZWxCYXNlRmlsZW5hbWUgKyBpICsgIi4iICsgZGVmYXVsdE1vZGVsRmlsZW5hbWVFeHRlbnNpb247IC8vJE5PTi1OTFMtMSQKKwkJCQkJfQorCQkJCQluZXdGaWxlQ3JlYXRpb25QYWdlLnNldEZpbGVOYW1lKG1vZGVsRmlsZW5hbWUpOworCQkJCX0KKwkJCX0KKwkJfQorCQlpbml0aWFsT2JqZWN0Q3JlYXRpb25QYWdlID0gbmV3IEV4dGVybmFsRGF0YVNvdXJjZU1vZGVsV2l6YXJkSW5pdGlhbE9iamVjdENyZWF0aW9uUGFnZSgiV2hhdGV2ZXIyIik7IC8vJE5PTi1OTFMtMSQKKwkJaW5pdGlhbE9iamVjdENyZWF0aW9uUGFnZS5zZXRUaXRsZShFeHRlcm5hbERhdGFTb3VyY2VFZGl0UGx1Z2luLklOU1RBTkNFLmdldFN0cmluZygiX1VJX0V4dGVybmFsRGF0YVNvdXJjZU1vZGVsV2l6YXJkX2xhYmVsIikpOyAvLyROT04tTkxTLTEkCisJCWluaXRpYWxPYmplY3RDcmVhdGlvblBhZ2Uuc2V0RGVzY3JpcHRpb24oRXh0ZXJuYWxEYXRhU291cmNlRWRpdFBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoIl9VSV9XaXphcmRfaW5pdGlhbF9vYmplY3RfZGVzY3JpcHRpb24iKSk7IC8vJE5PTi1OTFMtMSQKKwkJYWRkUGFnZShpbml0aWFsT2JqZWN0Q3JlYXRpb25QYWdlKTsKKwl9CisKKwkvKioKKwkgKiBHZXQgdGhlIGZpbGUgZnJvbSB0aGUgcGFnZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgSUZpbGUgZ2V0TW9kZWxGaWxlKCkgeworCQlyZXR1cm4gbmV3RmlsZUNyZWF0aW9uUGFnZS5nZXRNb2RlbEZpbGUoKTsKKwl9CisKK30KZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4dGVybmFsZGF0YXNvdXJjZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL2V4dGVybmFsZGF0YXNvdXJjZS9wcm92aWRlci9FeHRlcm5hbERhdGFTb3VyY2VEaXNlYXNlTW9kZWxJdGVtUHJvdmlkZXIuamF2YSBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4dGVybmFsZGF0YXNvdXJjZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL2V4dGVybmFsZGF0YXNvdXJjZS9wcm92aWRlci9FeHRlcm5hbERhdGFTb3VyY2VEaXNlYXNlTW9kZWxJdGVtUHJvdmlkZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYjQ2MmJmCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXh0ZXJuYWxkYXRhc291cmNlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvZXh0ZXJuYWxkYXRhc291cmNlL3Byb3ZpZGVyL0V4dGVybmFsRGF0YVNvdXJjZURpc2Vhc2VNb2RlbEl0ZW1Qcm92aWRlci5qYXZhCkBAIC0wLDAgKzEsMTc1IEBACisvLyBFeHRlcm5hbERhdGFTb3VyY2VEaXNlYXNlTW9kZWxJdGVtUHJvdmlkZXIKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4dGVybmFsZGF0YXNvdXJjZS5wcm92aWRlcjsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNywgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LkFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuUmVzb3VyY2VMb2NhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkNvbXBvc2VhYmxlQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUVkaXRpbmdEb21haW5JdGVtUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1MYWJlbFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtUHJvcGVydHlEZXNjcmlwdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtUHJvcGVydHlTb3VyY2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVN0cnVjdHVyZWRJdGVtQ29udGVudFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklUcmVlSXRlbUNvbnRlbnRQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JdGVtUHJvcGVydHlEZXNjcmlwdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLlZpZXdlck5vdGlmaWNhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXh0ZXJuYWxkYXRhc291cmNlLkV4dGVybmFsRGF0YVNvdXJjZURpc2Vhc2VNb2RlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXh0ZXJuYWxkYXRhc291cmNlLkV4dGVybmFsRGF0YVNvdXJjZVBhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLnByb3ZpZGVyLlN0YW5kYXJkRGlzZWFzZU1vZGVsSXRlbVByb3ZpZGVyOworCisvKioKKyAqIFRoaXMgaXMgdGhlIGl0ZW0gcHJvdmlkZXIgYWRhcHRlciBmb3IgYSB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4dGVybmFsZGF0YXNvdXJjZS5FeHRlcm5hbERhdGFTb3VyY2VEaXNlYXNlTW9kZWx9IG9iamVjdC4KKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIEV4dGVybmFsRGF0YVNvdXJjZURpc2Vhc2VNb2RlbEl0ZW1Qcm92aWRlcgorCWV4dGVuZHMgU3RhbmRhcmREaXNlYXNlTW9kZWxJdGVtUHJvdmlkZXIKKwlpbXBsZW1lbnRzCQorCQlJRWRpdGluZ0RvbWFpbkl0ZW1Qcm92aWRlciwJCisJCUlTdHJ1Y3R1cmVkSXRlbUNvbnRlbnRQcm92aWRlciwJCisJCUlUcmVlSXRlbUNvbnRlbnRQcm92aWRlciwJCisJCUlJdGVtTGFiZWxQcm92aWRlciwJCisJCUlJdGVtUHJvcGVydHlTb3VyY2UgeworCS8qKgorCSAqIFRoaXMgY29uc3RydWN0cyBhbiBpbnN0YW5jZSBmcm9tIGEgZmFjdG9yeSBhbmQgYSBub3RpZmllci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRXh0ZXJuYWxEYXRhU291cmNlRGlzZWFzZU1vZGVsSXRlbVByb3ZpZGVyKEFkYXB0ZXJGYWN0b3J5IGFkYXB0ZXJGYWN0b3J5KSB7CisJCXN1cGVyKGFkYXB0ZXJGYWN0b3J5KTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgdGhlIHByb3BlcnR5IGRlc2NyaXB0b3JzIGZvciB0aGUgYWRhcHRlZCBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgTGlzdDxJSXRlbVByb3BlcnR5RGVzY3JpcHRvcj4gZ2V0UHJvcGVydHlEZXNjcmlwdG9ycyhPYmplY3Qgb2JqZWN0KSB7CisJCWlmIChpdGVtUHJvcGVydHlEZXNjcmlwdG9ycyA9PSBudWxsKSB7CisJCQlzdXBlci5nZXRQcm9wZXJ0eURlc2NyaXB0b3JzKG9iamVjdCk7CisKKwkJCWFkZERhdGFQYXRoUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCk7CisJCX0KKwkJcmV0dXJuIGl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzOworCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyBhIHByb3BlcnR5IGRlc2NyaXB0b3IgZm9yIHRoZSBEYXRhIFBhdGggZmVhdHVyZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBhZGREYXRhUGF0aFByb3BlcnR5RGVzY3JpcHRvcihPYmplY3Qgb2JqZWN0KSB7CisJCWl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzLmFkZAorCQkJKGNyZWF0ZUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IKKwkJCQkoKChDb21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5KWFkYXB0ZXJGYWN0b3J5KS5nZXRSb290QWRhcHRlckZhY3RvcnkoKSwKKwkJCQkgZ2V0UmVzb3VyY2VMb2NhdG9yKCksCisJCQkJIGdldFN0cmluZygiX1VJX0V4dGVybmFsRGF0YVNvdXJjZURpc2Vhc2VNb2RlbF9kYXRhUGF0aF9mZWF0dXJlIiksIC8vJE5PTi1OTFMtMSQKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfUHJvcGVydHlEZXNjcmlwdG9yX2Rlc2NyaXB0aW9uIiwgIl9VSV9FeHRlcm5hbERhdGFTb3VyY2VEaXNlYXNlTW9kZWxfZGF0YVBhdGhfZmVhdHVyZSIsICJfVUlfRXh0ZXJuYWxEYXRhU291cmNlRGlzZWFzZU1vZGVsX3R5cGUiKSwgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkIC8vJE5PTi1OTFMtMyQKKwkJCQkgRXh0ZXJuYWxEYXRhU291cmNlUGFja2FnZS5MaXRlcmFscy5FWFRFUk5BTF9EQVRBX1NPVVJDRV9ESVNFQVNFX01PREVMX19EQVRBX1BBVEgsCisJCQkJIHRydWUsCisJCQkJIGZhbHNlLAorCQkJCSBmYWxzZSwKKwkJCQkgSXRlbVByb3BlcnR5RGVzY3JpcHRvci5HRU5FUklDX1ZBTFVFX0lNQUdFLAorCQkJCSBudWxsLAorCQkJCSBudWxsKSk7CisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIEV4dGVybmFsRGF0YVNvdXJjZURpc2Vhc2VNb2RlbC5naWYuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIE9iamVjdCBnZXRJbWFnZShPYmplY3Qgb2JqZWN0KSB7CisJCXJldHVybiBvdmVybGF5SW1hZ2Uob2JqZWN0LCBnZXRSZXNvdXJjZUxvY2F0b3IoKS5nZXRJbWFnZSgiZnVsbC9vYmoxNi9FeHRlcm5hbERhdGFTb3VyY2VEaXNlYXNlTW9kZWwiKSk7IC8vJE5PTi1OTFMtMSQKKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgdGhlIGxhYmVsIHRleHQgZm9yIHRoZSBhZGFwdGVkIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgU3RyaW5nIGdldFRleHQoT2JqZWN0IG9iamVjdCkgeworCQlyZXR1cm4gc3VwZXIuZ2V0VGV4dChvYmplY3QpOworCX0KKwkKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgdGhlIGxhYmVsIHRleHQgZm9yIHRoZSBhZGFwdGVkIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBTdHJpbmcgZ2V0VGV4dEdlbihPYmplY3Qgb2JqZWN0KSB7CisJCVN0cmluZyBsYWJlbCA9ICgoRXh0ZXJuYWxEYXRhU291cmNlRGlzZWFzZU1vZGVsKW9iamVjdCkuZ2V0RGlzZWFzZU5hbWUoKTsKKwkJcmV0dXJuIGxhYmVsID09IG51bGwgfHwgbGFiZWwubGVuZ3RoKCkgPT0gMCA/CisJCQlnZXRTdHJpbmcoIl9VSV9FeHRlcm5hbERhdGFTb3VyY2VEaXNlYXNlTW9kZWxfdHlwZSIpIDogLy8kTk9OLU5MUy0xJAorCQkJZ2V0U3RyaW5nKCJfVUlfRXh0ZXJuYWxEYXRhU291cmNlRGlzZWFzZU1vZGVsX3R5cGUiKSArICIgIiArIGxhYmVsOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKKwl9CQkJCQorCisJLyoqCisJICogVGhpcyBoYW5kbGVzIG1vZGVsIG5vdGlmaWNhdGlvbnMgYnkgY2FsbGluZyB7QGxpbmsgI3VwZGF0ZUNoaWxkcmVufSB0byB1cGRhdGUgYW55IGNhY2hlZAorCSAqIGNoaWxkcmVuIGFuZCBieSBjcmVhdGluZyBhIHZpZXdlciBub3RpZmljYXRpb24sIHdoaWNoIGl0IHBhc3NlcyB0byB7QGxpbmsgI2ZpcmVOb3RpZnlDaGFuZ2VkfS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBub3RpZnlDaGFuZ2VkKE5vdGlmaWNhdGlvbiBub3RpZmljYXRpb24pIHsKKwkJdXBkYXRlQ2hpbGRyZW4obm90aWZpY2F0aW9uKTsKKworCQlzd2l0Y2ggKG5vdGlmaWNhdGlvbi5nZXRGZWF0dXJlSUQoRXh0ZXJuYWxEYXRhU291cmNlRGlzZWFzZU1vZGVsLmNsYXNzKSkgeworCQkJY2FzZSBFeHRlcm5hbERhdGFTb3VyY2VQYWNrYWdlLkVYVEVSTkFMX0RBVEFfU09VUkNFX0RJU0VBU0VfTU9ERUxfX0RBVEFfUEFUSDoKKwkJCWNhc2UgRXh0ZXJuYWxEYXRhU291cmNlUGFja2FnZS5FWFRFUk5BTF9EQVRBX1NPVVJDRV9ESVNFQVNFX01PREVMX19ESVNFQVNFX1RZUEU6CisJCQkJZmlyZU5vdGlmeUNoYW5nZWQobmV3IFZpZXdlck5vdGlmaWNhdGlvbihub3RpZmljYXRpb24sIG5vdGlmaWNhdGlvbi5nZXROb3RpZmllcigpLCBmYWxzZSwgdHJ1ZSkpOworCQkJCXJldHVybjsKKwkJfQorCQlzdXBlci5ub3RpZnlDaGFuZ2VkKG5vdGlmaWNhdGlvbik7CisJfQorCisJLyoqCisJICogVGhpcyBhZGRzIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuZWRpdC5jb21tYW5kLkNvbW1hbmRQYXJhbWV0ZXJ9cyBkZXNjcmliaW5nIHRoZSBjaGlsZHJlbgorCSAqIHRoYXQgY2FuIGJlIGNyZWF0ZWQgdW5kZXIgdGhpcyBvYmplY3QuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgY29sbGVjdE5ld0NoaWxkRGVzY3JpcHRvcnMoQ29sbGVjdGlvbjxPYmplY3Q+IG5ld0NoaWxkRGVzY3JpcHRvcnMsIE9iamVjdCBvYmplY3QpIHsKKwkJc3VwZXIuY29sbGVjdE5ld0NoaWxkRGVzY3JpcHRvcnMobmV3Q2hpbGREZXNjcmlwdG9ycywgb2JqZWN0KTsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm4gdGhlIHJlc291cmNlIGxvY2F0b3IgZm9yIHRoaXMgaXRlbSBwcm92aWRlcidzIHJlc291cmNlcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgUmVzb3VyY2VMb2NhdG9yIGdldFJlc291cmNlTG9jYXRvcigpIHsKKwkJcmV0dXJuIEV4dGVybmFsRGF0YVNvdXJjZUVkaXRQbHVnaW4uSU5TVEFOQ0U7CisJfQorCit9CmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leHRlcm5hbGRhdGFzb3VyY2Uvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9leHRlcm5hbGRhdGFzb3VyY2UvcHJvdmlkZXIvRXh0ZXJuYWxEYXRhU291cmNlRWRpdFBsdWdpbi5qYXZhIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXh0ZXJuYWxkYXRhc291cmNlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvZXh0ZXJuYWxkYXRhc291cmNlL3Byb3ZpZGVyL0V4dGVybmFsRGF0YVNvdXJjZUVkaXRQbHVnaW4uamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNWYwZTk1Ci0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXh0ZXJuYWxkYXRhc291cmNlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvZXh0ZXJuYWxkYXRhc291cmNlL3Byb3ZpZGVyL0V4dGVybmFsRGF0YVNvdXJjZUVkaXRQbHVnaW4uamF2YQpAQCAtMCwwICsxLDEwOSBAQAorLy8gRXh0ZXJuYWxEYXRhU291cmNlRWRpdFBsdWdpbgorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXh0ZXJuYWxkYXRhc291cmNlLnByb3ZpZGVyOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA3LCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24uRU1GUGx1Z2luOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udWkuRWNsaXBzZVVJUGx1Z2luOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5SZXNvdXJjZUxvY2F0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnByb3ZpZGVyLkVjb3JlRWRpdFBsdWdpbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLnByb3ZpZGVyLkNvcmVFZGl0UGx1Z2luOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuZWRnZXMucHJvdmlkZXIuRGVmaW5pdGlvbnNFZGl0UGx1Z2luOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5wcm92aWRlci5EaXNlYXNlbW9kZWxzRWRpdFBsdWdpbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQucHJvdmlkZXIuU3RhbmRhcmRFZGl0UGx1Z2luOworCisvKioKKyAqIFRoaXMgaXMgdGhlIGNlbnRyYWwgc2luZ2xldG9uIGZvciB0aGUgRXh0ZXJuYWxEYXRhU291cmNlIGVkaXRvciBwbHVnaW4uCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBmaW5hbCBjbGFzcyBFeHRlcm5hbERhdGFTb3VyY2VFZGl0UGx1Z2luIGV4dGVuZHMgRU1GUGx1Z2luIHsKKwkvKioKKwkgKiBLZWVwIHRyYWNrIG9mIHRoZSBzaW5nbGV0b24uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBFeHRlcm5hbERhdGFTb3VyY2VFZGl0UGx1Z2luIElOU1RBTkNFID0gbmV3IEV4dGVybmFsRGF0YVNvdXJjZUVkaXRQbHVnaW4oKTsKKwkKKwkvKioKKwkgKiBLZWVwIHRyYWNrIG9mIHRoZSBzaW5nbGV0b24uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJpdmF0ZSBzdGF0aWMgSW1wbGVtZW50YXRpb24gcGx1Z2luOworCisJLyoqCisJICogQ3JlYXRlIHRoZSBpbnN0YW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRXh0ZXJuYWxEYXRhU291cmNlRWRpdFBsdWdpbigpIHsKKwkJc3VwZXIKKwkJCShuZXcgUmVzb3VyY2VMb2NhdG9yIFtdIHsKKwkJCQlEaXNlYXNlbW9kZWxzRWRpdFBsdWdpbi5JTlNUQU5DRSwKKwkJCQlDb3JlRWRpdFBsdWdpbi5JTlNUQU5DRSwKKwkJCQlEZWZpbml0aW9uc0VkaXRQbHVnaW4uSU5TVEFOQ0UsCisJCQkJRWNvcmVFZGl0UGx1Z2luLklOU1RBTkNFLAorCQkJCVN0YW5kYXJkRWRpdFBsdWdpbi5JTlNUQU5DRSwKKwkJCX0pOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIHNpbmdsZXRvbiBpbnN0YW5jZSBvZiB0aGUgRWNsaXBzZSBwbHVnaW4uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBzaW5nbGV0b24gaW5zdGFuY2UuCisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBSZXNvdXJjZUxvY2F0b3IgZ2V0UGx1Z2luUmVzb3VyY2VMb2NhdG9yKCkgeworCQlyZXR1cm4gcGx1Z2luOworCX0KKwkKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBzaW5nbGV0b24gaW5zdGFuY2Ugb2YgdGhlIEVjbGlwc2UgcGx1Z2luLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgc2luZ2xldG9uIGluc3RhbmNlLgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgc3RhdGljIEltcGxlbWVudGF0aW9uIGdldFBsdWdpbigpIHsKKwkJcmV0dXJuIHBsdWdpbjsKKwl9CisJCisJLyoqCisJICogVGhlIGFjdHVhbCBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgRWNsaXBzZSA8Yj5QbHVnaW48L2I+LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBzdGF0aWMgY2xhc3MgSW1wbGVtZW50YXRpb24gZXh0ZW5kcyBFY2xpcHNlVUlQbHVnaW4geworCQkvKioKKwkJICogQ3JlYXRlcyBhbiBpbnN0YW5jZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCXB1YmxpYyBJbXBsZW1lbnRhdGlvbigpIHsKKwkJCXN1cGVyKCk7CisJCisJCQkvLyBSZW1lbWJlciB0aGUgc3RhdGljIGluc3RhbmNlLgorCQkJLy8KKwkJCXBsdWdpbiA9IHRoaXM7CisJCX0KKwl9CisKK30KZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4dGVybmFsZGF0YXNvdXJjZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL2V4dGVybmFsZGF0YXNvdXJjZS9wcm92aWRlci9FeHRlcm5hbERhdGFTb3VyY2VJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeS5qYXZhIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXh0ZXJuYWxkYXRhc291cmNlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvZXh0ZXJuYWxkYXRhc291cmNlL3Byb3ZpZGVyL0V4dGVybmFsRGF0YVNvdXJjZUl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2I5ODBhOAotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4dGVybmFsZGF0YXNvdXJjZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL2V4dGVybmFsZGF0YXNvdXJjZS9wcm92aWRlci9FeHRlcm5hbERhdGFTb3VyY2VJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeS5qYXZhCkBAIC0wLDAgKzEsMjA5IEBACisvLyBFeHRlcm5hbERhdGFTb3VyY2VJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeQorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXh0ZXJuYWxkYXRhc291cmNlLnByb3ZpZGVyOworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDcsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LkFkYXB0ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkNoYW5nZU5vdGlmaWVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkNvbXBvc2VhYmxlQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuQ29tcG9zZWRBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JQ2hhbmdlTm90aWZpZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSURpc3Bvc2FibGU7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUVkaXRpbmdEb21haW5JdGVtUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1MYWJlbFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtUHJvcGVydHlTb3VyY2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSU5vdGlmeUNoYW5nZWRMaXN0ZW5lcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JU3RydWN0dXJlZEl0ZW1Db250ZW50UHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVRyZWVJdGVtQ29udGVudFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leHRlcm5hbGRhdGFzb3VyY2UudXRpbC5FeHRlcm5hbERhdGFTb3VyY2VBZGFwdGVyRmFjdG9yeTsKKworLyoqCisgKiBUaGlzIGlzIHRoZSBmYWN0b3J5IHRoYXQgaXMgdXNlZCB0byBwcm92aWRlIHRoZSBpbnRlcmZhY2VzIG5lZWRlZCB0byBzdXBwb3J0IFZpZXdlcnMuCisgKiBUaGUgYWRhcHRlcnMgZ2VuZXJhdGVkIGJ5IHRoaXMgZmFjdG9yeSBjb252ZXJ0IEVNRiBhZGFwdGVyIG5vdGlmaWNhdGlvbnMgaW50byBjYWxscyB0byB7QGxpbmsgI2ZpcmVOb3RpZnlDaGFuZ2VkIGZpcmVOb3RpZnlDaGFuZ2VkfS4KKyAqIFRoZSBhZGFwdGVycyBhbHNvIHN1cHBvcnQgRWNsaXBzZSBwcm9wZXJ0eSBzaGVldHMuCisgKiBOb3RlIHRoYXQgbW9zdCBvZiB0aGUgYWRhcHRlcnMgYXJlIHNoYXJlZCBhbW9uZyBtdWx0aXBsZSBpbnN0YW5jZXMuCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK0BTdXBwcmVzc1dhcm5pbmdzKCJhbGwiKQorcHVibGljIGNsYXNzIEV4dGVybmFsRGF0YVNvdXJjZUl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5IGV4dGVuZHMgRXh0ZXJuYWxEYXRhU291cmNlQWRhcHRlckZhY3RvcnkgaW1wbGVtZW50cyBDb21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5LCBJQ2hhbmdlTm90aWZpZXIsIElEaXNwb3NhYmxlIHsKKwkvKioKKwkgKiBUaGlzIGtlZXBzIHRyYWNrIG9mIHRoZSByb290IGFkYXB0ZXIgZmFjdG9yeSB0aGF0IGRlbGVnYXRlcyB0byB0aGlzIGFkYXB0ZXIgZmFjdG9yeS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgQ29tcG9zZWRBZGFwdGVyRmFjdG9yeSBwYXJlbnRBZGFwdGVyRmFjdG9yeTsKKworCS8qKgorCSAqIFRoaXMgaXMgdXNlZCB0byBpbXBsZW1lbnQge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklDaGFuZ2VOb3RpZmllcn0uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIElDaGFuZ2VOb3RpZmllciBjaGFuZ2VOb3RpZmllciA9IG5ldyBDaGFuZ2VOb3RpZmllcigpOworCisJLyoqCisJICogVGhpcyBrZWVwcyB0cmFjayBvZiBhbGwgdGhlIHN1cHBvcnRlZCB0eXBlcyBjaGVja2VkIGJ5IHtAbGluayAjaXNGYWN0b3J5Rm9yVHlwZSBpc0ZhY3RvcnlGb3JUeXBlfS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgQ29sbGVjdGlvbjxPYmplY3Q+IHN1cHBvcnRlZFR5cGVzID0gbmV3IEFycmF5TGlzdDxPYmplY3Q+KCk7CisKKwkvKioKKwkgKiBUaGlzIGNvbnN0cnVjdHMgYW4gaW5zdGFuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEV4dGVybmFsRGF0YVNvdXJjZUl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5KCkgeworCQlzdXBwb3J0ZWRUeXBlcy5hZGQoSUVkaXRpbmdEb21haW5JdGVtUHJvdmlkZXIuY2xhc3MpOworCQlzdXBwb3J0ZWRUeXBlcy5hZGQoSVN0cnVjdHVyZWRJdGVtQ29udGVudFByb3ZpZGVyLmNsYXNzKTsKKwkJc3VwcG9ydGVkVHlwZXMuYWRkKElUcmVlSXRlbUNvbnRlbnRQcm92aWRlci5jbGFzcyk7CisJCXN1cHBvcnRlZFR5cGVzLmFkZChJSXRlbUxhYmVsUHJvdmlkZXIuY2xhc3MpOworCQlzdXBwb3J0ZWRUeXBlcy5hZGQoSUl0ZW1Qcm9wZXJ0eVNvdXJjZS5jbGFzcyk7CisJfQorCisJLyoqCisJICogVGhpcyBrZWVwcyB0cmFjayBvZiB0aGUgb25lIGFkYXB0ZXIgdXNlZCBmb3IgYWxsIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXh0ZXJuYWxkYXRhc291cmNlLkV4dGVybmFsRGF0YVNvdXJjZURpc2Vhc2VNb2RlbH0gaW5zdGFuY2VzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBFeHRlcm5hbERhdGFTb3VyY2VEaXNlYXNlTW9kZWxJdGVtUHJvdmlkZXIgZXh0ZXJuYWxEYXRhU291cmNlRGlzZWFzZU1vZGVsSXRlbVByb3ZpZGVyOworCisJLyoqCisJICogVGhpcyBjcmVhdGVzIGFuIGFkYXB0ZXIgZm9yIGEge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leHRlcm5hbGRhdGFzb3VyY2UuRXh0ZXJuYWxEYXRhU291cmNlRGlzZWFzZU1vZGVsfS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVFeHRlcm5hbERhdGFTb3VyY2VEaXNlYXNlTW9kZWxBZGFwdGVyKCkgeworCQlpZiAoZXh0ZXJuYWxEYXRhU291cmNlRGlzZWFzZU1vZGVsSXRlbVByb3ZpZGVyID09IG51bGwpIHsKKwkJCWV4dGVybmFsRGF0YVNvdXJjZURpc2Vhc2VNb2RlbEl0ZW1Qcm92aWRlciA9IG5ldyBFeHRlcm5hbERhdGFTb3VyY2VEaXNlYXNlTW9kZWxJdGVtUHJvdmlkZXIodGhpcyk7CisJCX0KKworCQlyZXR1cm4gZXh0ZXJuYWxEYXRhU291cmNlRGlzZWFzZU1vZGVsSXRlbVByb3ZpZGVyOworCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyB0aGUgcm9vdCBhZGFwdGVyIGZhY3RvcnkgdGhhdCBjb250YWlucyB0aGlzIGZhY3RvcnkuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnkgZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCkgeworCQlyZXR1cm4gcGFyZW50QWRhcHRlckZhY3RvcnkgPT0gbnVsbCA/IHRoaXMgOiBwYXJlbnRBZGFwdGVyRmFjdG9yeS5nZXRSb290QWRhcHRlckZhY3RvcnkoKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHNldHMgdGhlIGNvbXBvc2VkIGFkYXB0ZXIgZmFjdG9yeSB0aGF0IGNvbnRhaW5zIHRoaXMgZmFjdG9yeS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRQYXJlbnRBZGFwdGVyRmFjdG9yeShDb21wb3NlZEFkYXB0ZXJGYWN0b3J5IHBhcmVudEFkYXB0ZXJGYWN0b3J5KSB7CisJCXRoaXMucGFyZW50QWRhcHRlckZhY3RvcnkgPSBwYXJlbnRBZGFwdGVyRmFjdG9yeTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgYm9vbGVhbiBpc0ZhY3RvcnlGb3JUeXBlKE9iamVjdCB0eXBlKSB7CisJCXJldHVybiBzdXBwb3J0ZWRUeXBlcy5jb250YWlucyh0eXBlKSB8fCBzdXBlci5pc0ZhY3RvcnlGb3JUeXBlKHR5cGUpOworCX0KKworCS8qKgorCSAqIFRoaXMgaW1wbGVtZW50YXRpb24gc3Vic3RpdHV0ZXMgdGhlIGZhY3RvcnkgaXRzZWxmIGFzIHRoZSBrZXkgZm9yIHRoZSBhZGFwdGVyLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBBZGFwdGVyIGFkYXB0KE5vdGlmaWVyIG5vdGlmaWVyLCBPYmplY3QgdHlwZSkgeworCQlyZXR1cm4gc3VwZXIuYWRhcHQobm90aWZpZXIsIHRoaXMpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBPYmplY3QgYWRhcHQoT2JqZWN0IG9iamVjdCwgT2JqZWN0IHR5cGUpIHsKKwkJaWYgKGlzRmFjdG9yeUZvclR5cGUodHlwZSkpIHsKKwkJCU9iamVjdCBhZGFwdGVyID0gc3VwZXIuYWRhcHQob2JqZWN0LCB0eXBlKTsKKwkJCWlmICghKHR5cGUgaW5zdGFuY2VvZiBDbGFzczw/PikgfHwgKCgoQ2xhc3M8Pz4pdHlwZSkuaXNJbnN0YW5jZShhZGFwdGVyKSkpIHsKKwkJCQlyZXR1cm4gYWRhcHRlcjsKKwkJCX0KKwkJfQorCisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyBhIGxpc3RlbmVyLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIGFkZExpc3RlbmVyKElOb3RpZnlDaGFuZ2VkTGlzdGVuZXIgbm90aWZ5Q2hhbmdlZExpc3RlbmVyKSB7CisJCWNoYW5nZU5vdGlmaWVyLmFkZExpc3RlbmVyKG5vdGlmeUNoYW5nZWRMaXN0ZW5lcik7CisJfQorCisJLyoqCisJICogVGhpcyByZW1vdmVzIGEgbGlzdGVuZXIuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgcmVtb3ZlTGlzdGVuZXIoSU5vdGlmeUNoYW5nZWRMaXN0ZW5lciBub3RpZnlDaGFuZ2VkTGlzdGVuZXIpIHsKKwkJY2hhbmdlTm90aWZpZXIucmVtb3ZlTGlzdGVuZXIobm90aWZ5Q2hhbmdlZExpc3RlbmVyKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGRlbGVnYXRlcyB0byB7QGxpbmsgI2NoYW5nZU5vdGlmaWVyfSBhbmQgdG8ge0BsaW5rICNwYXJlbnRBZGFwdGVyRmFjdG9yeX0uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgZmlyZU5vdGlmeUNoYW5nZWQoTm90aWZpY2F0aW9uIG5vdGlmaWNhdGlvbikgeworCQljaGFuZ2VOb3RpZmllci5maXJlTm90aWZ5Q2hhbmdlZChub3RpZmljYXRpb24pOworCisJCWlmIChwYXJlbnRBZGFwdGVyRmFjdG9yeSAhPSBudWxsKSB7CisJCQlwYXJlbnRBZGFwdGVyRmFjdG9yeS5maXJlTm90aWZ5Q2hhbmdlZChub3RpZmljYXRpb24pOworCQl9CisJfQorCisJLyoqCisJICogVGhpcyBkaXNwb3NlcyBhbGwgb2YgdGhlIGl0ZW0gcHJvdmlkZXJzIGNyZWF0ZWQgYnkgdGhpcyBmYWN0b3J5LiAKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBkaXNwb3NlKCkgeworCQlpZiAoZXh0ZXJuYWxEYXRhU291cmNlRGlzZWFzZU1vZGVsSXRlbVByb3ZpZGVyICE9IG51bGwpIGV4dGVybmFsRGF0YVNvdXJjZURpc2Vhc2VNb2RlbEl0ZW1Qcm92aWRlci5kaXNwb3NlKCk7CisJfQorCit9CmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leHRlcm5hbGRhdGFzb3VyY2Uvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9leHRlcm5hbGRhdGFzb3VyY2UvdXRpbC9FeHRlcm5hbERhdGFTb3VyY2VBZGFwdGVyRmFjdG9yeS5qYXZhIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXh0ZXJuYWxkYXRhc291cmNlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvZXh0ZXJuYWxkYXRhc291cmNlL3V0aWwvRXh0ZXJuYWxEYXRhU291cmNlQWRhcHRlckZhY3RvcnkuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YmNiZTQxCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXh0ZXJuYWxkYXRhc291cmNlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvZXh0ZXJuYWxkYXRhc291cmNlL3V0aWwvRXh0ZXJuYWxEYXRhU291cmNlQWRhcHRlckZhY3RvcnkuamF2YQpAQCAtMCwwICsxLDI5OSBAQAorLy8gRXh0ZXJuYWxEYXRhU291cmNlQWRhcHRlckZhY3RvcnkKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4dGVybmFsZGF0YXNvdXJjZS51dGlsOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA3LCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LkFkYXB0ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuaW1wbC5BZGFwdGVyRmFjdG9yeUltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3Q7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5JZGVudGlmaWFibGU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5TYW5pdHlDaGVja2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5EZWNvcmF0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLkludGVncmF0aW9uRGVjb3JhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5Ob2RlRGVjb3JhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5Nb2RpZmlhYmxlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leHRlcm5hbGRhdGFzb3VyY2UuKjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXh0ZXJuYWxkYXRhc291cmNlLkV4dGVybmFsRGF0YVNvdXJjZURpc2Vhc2VNb2RlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXh0ZXJuYWxkYXRhc291cmNlLkV4dGVybmFsRGF0YVNvdXJjZVBhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLkRpc2Vhc2VNb2RlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmREaXNlYXNlTW9kZWw7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIFRoZSA8Yj5BZGFwdGVyIEZhY3Rvcnk8L2I+IGZvciB0aGUgbW9kZWwuCisgKiBJdCBwcm92aWRlcyBhbiBhZGFwdGVyIDxjb2RlPmNyZWF0ZVhYWDwvY29kZT4gbWV0aG9kIGZvciBlYWNoIGNsYXNzIG9mIHRoZSBtb2RlbC4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXh0ZXJuYWxkYXRhc291cmNlLkV4dGVybmFsRGF0YVNvdXJjZVBhY2thZ2UKKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIEV4dGVybmFsRGF0YVNvdXJjZUFkYXB0ZXJGYWN0b3J5IGV4dGVuZHMgQWRhcHRlckZhY3RvcnlJbXBsIHsKKwkvKioKKwkgKiBUaGUgY2FjaGVkIG1vZGVsIHBhY2thZ2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHN0YXRpYyBFeHRlcm5hbERhdGFTb3VyY2VQYWNrYWdlIG1vZGVsUGFja2FnZTsKKworCS8qKgorCSAqIENyZWF0ZXMgYW4gaW5zdGFuY2Ugb2YgdGhlIGFkYXB0ZXIgZmFjdG9yeS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRXh0ZXJuYWxEYXRhU291cmNlQWRhcHRlckZhY3RvcnkoKSB7CisJCWlmIChtb2RlbFBhY2thZ2UgPT0gbnVsbCkgeworCQkJbW9kZWxQYWNrYWdlID0gRXh0ZXJuYWxEYXRhU291cmNlUGFja2FnZS5lSU5TVEFOQ0U7CisJCX0KKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHdoZXRoZXIgdGhpcyBmYWN0b3J5IGlzIGFwcGxpY2FibGUgZm9yIHRoZSB0eXBlIG9mIHRoZSBvYmplY3QuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgPGNvZGU+dHJ1ZTwvY29kZT4gaWYgdGhlIG9iamVjdCBpcyBlaXRoZXIgdGhlIG1vZGVsJ3MgcGFja2FnZSBvciBpcyBhbiBpbnN0YW5jZSBvYmplY3Qgb2YgdGhlIG1vZGVsLgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gd2hldGhlciB0aGlzIGZhY3RvcnkgaXMgYXBwbGljYWJsZSBmb3IgdGhlIHR5cGUgb2YgdGhlIG9iamVjdC4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIGJvb2xlYW4gaXNGYWN0b3J5Rm9yVHlwZShPYmplY3Qgb2JqZWN0KSB7CisJCWlmIChvYmplY3QgPT0gbW9kZWxQYWNrYWdlKSB7CisJCQlyZXR1cm4gdHJ1ZTsKKwkJfQorCQlpZiAob2JqZWN0IGluc3RhbmNlb2YgRU9iamVjdCkgeworCQkJcmV0dXJuICgoRU9iamVjdClvYmplY3QpLmVDbGFzcygpLmdldEVQYWNrYWdlKCkgPT0gbW9kZWxQYWNrYWdlOworCQl9CisJCXJldHVybiBmYWxzZTsKKwl9CisKKwkvKioKKwkgKiBUaGUgc3dpdGNoIHRoYXQgZGVsZWdhdGVzIHRvIHRoZSA8Y29kZT5jcmVhdGVYWFg8L2NvZGU+IG1ldGhvZHMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIEV4dGVybmFsRGF0YVNvdXJjZVN3aXRjaDxBZGFwdGVyPiBtb2RlbFN3aXRjaCA9CisJCW5ldyBFeHRlcm5hbERhdGFTb3VyY2VTd2l0Y2g8QWRhcHRlcj4oKSB7CisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyBBZGFwdGVyIGNhc2VFeHRlcm5hbERhdGFTb3VyY2VEaXNlYXNlTW9kZWwoRXh0ZXJuYWxEYXRhU291cmNlRGlzZWFzZU1vZGVsIG9iamVjdCkgeworCQkJCXJldHVybiBjcmVhdGVFeHRlcm5hbERhdGFTb3VyY2VEaXNlYXNlTW9kZWxBZGFwdGVyKCk7CisJCQl9CisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyA8VD4gQWRhcHRlciBjYXNlQ29tcGFyYWJsZShDb21wYXJhYmxlPFQ+IG9iamVjdCkgeworCQkJCXJldHVybiBjcmVhdGVDb21wYXJhYmxlQWRhcHRlcigpOworCQkJfQorCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgQWRhcHRlciBjYXNlU2FuaXR5Q2hlY2tlcihTYW5pdHlDaGVja2VyIG9iamVjdCkgeworCQkJCXJldHVybiBjcmVhdGVTYW5pdHlDaGVja2VyQWRhcHRlcigpOworCQkJfQorCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgQWRhcHRlciBjYXNlSWRlbnRpZmlhYmxlKElkZW50aWZpYWJsZSBvYmplY3QpIHsKKwkJCQlyZXR1cm4gY3JlYXRlSWRlbnRpZmlhYmxlQWRhcHRlcigpOworCQkJfQorCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgQWRhcHRlciBjYXNlRGVjb3JhdG9yKERlY29yYXRvciBvYmplY3QpIHsKKwkJCQlyZXR1cm4gY3JlYXRlRGVjb3JhdG9yQWRhcHRlcigpOworCQkJfQorCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgQWRhcHRlciBjYXNlTm9kZURlY29yYXRvcihOb2RlRGVjb3JhdG9yIG9iamVjdCkgeworCQkJCXJldHVybiBjcmVhdGVOb2RlRGVjb3JhdG9yQWRhcHRlcigpOworCQkJfQorCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgQWRhcHRlciBjYXNlSW50ZWdyYXRpb25EZWNvcmF0b3IoSW50ZWdyYXRpb25EZWNvcmF0b3Igb2JqZWN0KSB7CisJCQkJcmV0dXJuIGNyZWF0ZUludGVncmF0aW9uRGVjb3JhdG9yQWRhcHRlcigpOworCQkJfQorCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgQWRhcHRlciBjYXNlTW9kaWZpYWJsZShNb2RpZmlhYmxlIG9iamVjdCkgeworCQkJCXJldHVybiBjcmVhdGVNb2RpZmlhYmxlQWRhcHRlcigpOworCQkJfQorCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgQWRhcHRlciBjYXNlRGlzZWFzZU1vZGVsKERpc2Vhc2VNb2RlbCBvYmplY3QpIHsKKwkJCQlyZXR1cm4gY3JlYXRlRGlzZWFzZU1vZGVsQWRhcHRlcigpOworCQkJfQorCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgQWRhcHRlciBjYXNlU3RhbmRhcmREaXNlYXNlTW9kZWwoU3RhbmRhcmREaXNlYXNlTW9kZWwgb2JqZWN0KSB7CisJCQkJcmV0dXJuIGNyZWF0ZVN0YW5kYXJkRGlzZWFzZU1vZGVsQWRhcHRlcigpOworCQkJfQorCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgQWRhcHRlciBkZWZhdWx0Q2FzZShFT2JqZWN0IG9iamVjdCkgeworCQkJCXJldHVybiBjcmVhdGVFT2JqZWN0QWRhcHRlcigpOworCQkJfQorCQl9OworCisJLyoqCisJICogQ3JlYXRlcyBhbiBhZGFwdGVyIGZvciB0aGUgPGNvZGU+dGFyZ2V0PC9jb2RlPi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSB0YXJnZXQgdGhlIG9iamVjdCB0byBhZGFwdC4KKwkgKiBAcmV0dXJuIHRoZSBhZGFwdGVyIGZvciB0aGUgPGNvZGU+dGFyZ2V0PC9jb2RlPi4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlQWRhcHRlcihOb3RpZmllciB0YXJnZXQpIHsKKwkJcmV0dXJuIG1vZGVsU3dpdGNoLmRvU3dpdGNoKChFT2JqZWN0KXRhcmdldCk7CisJfQorCisKKwkvKioKKwkgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leHRlcm5hbGRhdGFzb3VyY2UuRXh0ZXJuYWxEYXRhU291cmNlRGlzZWFzZU1vZGVsIDxlbT5EaXNlYXNlIE1vZGVsPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsKKwkgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leHRlcm5hbGRhdGFzb3VyY2UuRXh0ZXJuYWxEYXRhU291cmNlRGlzZWFzZU1vZGVsCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZUV4dGVybmFsRGF0YVNvdXJjZURpc2Vhc2VNb2RlbEFkYXB0ZXIoKSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgamF2YS5sYW5nLkNvbXBhcmFibGUgPGVtPkNvbXBhcmFibGU8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOworCSAqIGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZSB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5LgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgorCSAqIEBzZWUgamF2YS5sYW5nLkNvbXBhcmFibGUKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlQ29tcGFyYWJsZUFkYXB0ZXIoKSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5JZGVudGlmaWFibGUgPGVtPklkZW50aWZpYWJsZTwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7CisJICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLklkZW50aWZpYWJsZQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVJZGVudGlmaWFibGVBZGFwdGVyKCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5EZWNvcmF0b3IgPGVtPkRlY29yYXRvcjwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7CisJICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuRGVjb3JhdG9yCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZURlY29yYXRvckFkYXB0ZXIoKSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLk5vZGVEZWNvcmF0b3IgPGVtPk5vZGUgRGVjb3JhdG9yPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsKKwkgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5Ob2RlRGVjb3JhdG9yCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZU5vZGVEZWNvcmF0b3JBZGFwdGVyKCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uU2FuaXR5Q2hlY2tlciA8ZW0+U2FuaXR5IENoZWNrZXI8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOworCSAqIGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZSB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5LgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5TYW5pdHlDaGVja2VyCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZVNhbml0eUNoZWNrZXJBZGFwdGVyKCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5Nb2RpZmlhYmxlIDxlbT5Nb2RpZmlhYmxlPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsKKwkgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5Nb2RpZmlhYmxlCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZU1vZGlmaWFibGVBZGFwdGVyKCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5EaXNlYXNlTW9kZWwgPGVtPkRpc2Vhc2UgTW9kZWw8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOworCSAqIGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZSB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5LgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLkRpc2Vhc2VNb2RlbAorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVEaXNlYXNlTW9kZWxBZGFwdGVyKCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5JbnRlZ3JhdGlvbkRlY29yYXRvciA8ZW0+SW50ZWdyYXRpb24gRGVjb3JhdG9yPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsKKwkgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5JbnRlZ3JhdGlvbkRlY29yYXRvcgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVJbnRlZ3JhdGlvbkRlY29yYXRvckFkYXB0ZXIoKSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkRGlzZWFzZU1vZGVsIDxlbT5EaXNlYXNlIE1vZGVsPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsKKwkgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZERpc2Vhc2VNb2RlbAorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVTdGFuZGFyZERpc2Vhc2VNb2RlbEFkYXB0ZXIoKSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgdGhlIGRlZmF1bHQgY2FzZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwuCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZUVPYmplY3RBZGFwdGVyKCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKK30gLy9FeHRlcm5hbERhdGFTb3VyY2VBZGFwdGVyRmFjdG9yeQpkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXh0ZXJuYWxkYXRhc291cmNlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvZXh0ZXJuYWxkYXRhc291cmNlL3V0aWwvRXh0ZXJuYWxEYXRhU291cmNlU3dpdGNoLmphdmEgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leHRlcm5hbGRhdGFzb3VyY2Uvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9leHRlcm5hbGRhdGFzb3VyY2UvdXRpbC9FeHRlcm5hbERhdGFTb3VyY2VTd2l0Y2guamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MzdiNzlhCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXh0ZXJuYWxkYXRhc291cmNlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvZXh0ZXJuYWxkYXRhc291cmNlL3V0aWwvRXh0ZXJuYWxEYXRhU291cmNlU3dpdGNoLmphdmEKQEAgLTAsMCArMSwyODkgQEAKKy8vIEV4dGVybmFsRGF0YVNvdXJjZVN3aXRjaAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXh0ZXJuYWxkYXRhc291cmNlLnV0aWw7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDcsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uSWRlbnRpZmlhYmxlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uU2FuaXR5Q2hlY2tlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuRGVjb3JhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5JbnRlZ3JhdGlvbkRlY29yYXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuTm9kZURlY29yYXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuTW9kaWZpYWJsZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXh0ZXJuYWxkYXRhc291cmNlLio7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4dGVybmFsZGF0YXNvdXJjZS5FeHRlcm5hbERhdGFTb3VyY2VEaXNlYXNlTW9kZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4dGVybmFsZGF0YXNvdXJjZS5FeHRlcm5hbERhdGFTb3VyY2VQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5EaXNlYXNlTW9kZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkRGlzZWFzZU1vZGVsOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiBUaGUgPGI+U3dpdGNoPC9iPiBmb3IgdGhlIG1vZGVsJ3MgaW5oZXJpdGFuY2UgaGllcmFyY2h5LgorICogSXQgc3VwcG9ydHMgdGhlIGNhbGwge0BsaW5rICNkb1N3aXRjaChFT2JqZWN0KSBkb1N3aXRjaChvYmplY3QpfQorICogdG8gaW52b2tlIHRoZSA8Y29kZT5jYXNlWFhYPC9jb2RlPiBtZXRob2QgZm9yIGVhY2ggY2xhc3Mgb2YgdGhlIG1vZGVsLAorICogc3RhcnRpbmcgd2l0aCB0aGUgYWN0dWFsIGNsYXNzIG9mIHRoZSBvYmplY3QKKyAqIGFuZCBwcm9jZWVkaW5nIHVwIHRoZSBpbmhlcml0YW5jZSBoaWVyYXJjaHkKKyAqIHVudGlsIGEgbm9uLW51bGwgcmVzdWx0IGlzIHJldHVybmVkLAorICogd2hpY2ggaXMgdGhlIHJlc3VsdCBvZiB0aGUgc3dpdGNoLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leHRlcm5hbGRhdGFzb3VyY2UuRXh0ZXJuYWxEYXRhU291cmNlUGFja2FnZQorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgRXh0ZXJuYWxEYXRhU291cmNlU3dpdGNoPFQxPiB7CisJLyoqCisJICogVGhlIGNhY2hlZCBtb2RlbCBwYWNrYWdlCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHN0YXRpYyBFeHRlcm5hbERhdGFTb3VyY2VQYWNrYWdlIG1vZGVsUGFja2FnZTsKKworCS8qKgorCSAqIENyZWF0ZXMgYW4gaW5zdGFuY2Ugb2YgdGhlIHN3aXRjaC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRXh0ZXJuYWxEYXRhU291cmNlU3dpdGNoKCkgeworCQlpZiAobW9kZWxQYWNrYWdlID09IG51bGwpIHsKKwkJCW1vZGVsUGFja2FnZSA9IEV4dGVybmFsRGF0YVNvdXJjZVBhY2thZ2UuZUlOU1RBTkNFOworCQl9CisJfQorCisJLyoqCisJICogQ2FsbHMgPGNvZGU+Y2FzZVhYWDwvY29kZT4gZm9yIGVhY2ggY2xhc3Mgb2YgdGhlIG1vZGVsIHVudGlsIG9uZSByZXR1cm5zIGEgbm9uIG51bGwgcmVzdWx0OyBpdCB5aWVsZHMgdGhhdCByZXN1bHQuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBmaXJzdCBub24tbnVsbCByZXN1bHQgcmV0dXJuZWQgYnkgYSA8Y29kZT5jYXNlWFhYPC9jb2RlPiBjYWxsLgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVDEgZG9Td2l0Y2goRU9iamVjdCB0aGVFT2JqZWN0KSB7CisJCXJldHVybiBkb1N3aXRjaCh0aGVFT2JqZWN0LmVDbGFzcygpLCB0aGVFT2JqZWN0KTsKKwl9CisKKwkvKioKKwkgKiBDYWxscyA8Y29kZT5jYXNlWFhYPC9jb2RlPiBmb3IgZWFjaCBjbGFzcyBvZiB0aGUgbW9kZWwgdW50aWwgb25lIHJldHVybnMgYSBub24gbnVsbCByZXN1bHQ7IGl0IHlpZWxkcyB0aGF0IHJlc3VsdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIGZpcnN0IG5vbi1udWxsIHJlc3VsdCByZXR1cm5lZCBieSBhIDxjb2RlPmNhc2VYWFg8L2NvZGU+IGNhbGwuCisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBUMSBkb1N3aXRjaChFQ2xhc3MgdGhlRUNsYXNzLCBFT2JqZWN0IHRoZUVPYmplY3QpIHsKKwkJaWYgKHRoZUVDbGFzcy5lQ29udGFpbmVyKCkgPT0gbW9kZWxQYWNrYWdlKSB7CisJCQlyZXR1cm4gZG9Td2l0Y2godGhlRUNsYXNzLmdldENsYXNzaWZpZXJJRCgpLCB0aGVFT2JqZWN0KTsKKwkJfQorCQllbHNlIHsKKwkJCUxpc3Q8RUNsYXNzPiBlU3VwZXJUeXBlcyA9IHRoZUVDbGFzcy5nZXRFU3VwZXJUeXBlcygpOworCQkJcmV0dXJuCisJCQkJZVN1cGVyVHlwZXMuaXNFbXB0eSgpID8KKwkJCQkJZGVmYXVsdENhc2UodGhlRU9iamVjdCkgOgorCQkJCQlkb1N3aXRjaChlU3VwZXJUeXBlcy5nZXQoMCksIHRoZUVPYmplY3QpOworCQl9CisJfQorCisJLyoqCisJICogQ2FsbHMgPGNvZGU+Y2FzZVhYWDwvY29kZT4gZm9yIGVhY2ggY2xhc3Mgb2YgdGhlIG1vZGVsIHVudGlsIG9uZSByZXR1cm5zIGEgbm9uIG51bGwgcmVzdWx0OyBpdCB5aWVsZHMgdGhhdCByZXN1bHQuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBmaXJzdCBub24tbnVsbCByZXN1bHQgcmV0dXJuZWQgYnkgYSA8Y29kZT5jYXNlWFhYPC9jb2RlPiBjYWxsLgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgVDEgZG9Td2l0Y2goaW50IGNsYXNzaWZpZXJJRCwgRU9iamVjdCB0aGVFT2JqZWN0KSB7CisJCXN3aXRjaCAoY2xhc3NpZmllcklEKSB7CisJCQljYXNlIEV4dGVybmFsRGF0YVNvdXJjZVBhY2thZ2UuRVhURVJOQUxfREFUQV9TT1VSQ0VfRElTRUFTRV9NT0RFTDogeworCQkJCUV4dGVybmFsRGF0YVNvdXJjZURpc2Vhc2VNb2RlbCBleHRlcm5hbERhdGFTb3VyY2VEaXNlYXNlTW9kZWwgPSAoRXh0ZXJuYWxEYXRhU291cmNlRGlzZWFzZU1vZGVsKXRoZUVPYmplY3Q7CisJCQkJVDEgcmVzdWx0ID0gY2FzZUV4dGVybmFsRGF0YVNvdXJjZURpc2Vhc2VNb2RlbChleHRlcm5hbERhdGFTb3VyY2VEaXNlYXNlTW9kZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZVN0YW5kYXJkRGlzZWFzZU1vZGVsKGV4dGVybmFsRGF0YVNvdXJjZURpc2Vhc2VNb2RlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlRGlzZWFzZU1vZGVsKGV4dGVybmFsRGF0YVNvdXJjZURpc2Vhc2VNb2RlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlSW50ZWdyYXRpb25EZWNvcmF0b3IoZXh0ZXJuYWxEYXRhU291cmNlRGlzZWFzZU1vZGVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VNb2RpZmlhYmxlKGV4dGVybmFsRGF0YVNvdXJjZURpc2Vhc2VNb2RlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlTm9kZURlY29yYXRvcihleHRlcm5hbERhdGFTb3VyY2VEaXNlYXNlTW9kZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZURlY29yYXRvcihleHRlcm5hbERhdGFTb3VyY2VEaXNlYXNlTW9kZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZUlkZW50aWZpYWJsZShleHRlcm5hbERhdGFTb3VyY2VEaXNlYXNlTW9kZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZUNvbXBhcmFibGUoZXh0ZXJuYWxEYXRhU291cmNlRGlzZWFzZU1vZGVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VTYW5pdHlDaGVja2VyKGV4dGVybmFsRGF0YVNvdXJjZURpc2Vhc2VNb2RlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBkZWZhdWx0Q2FzZSh0aGVFT2JqZWN0KTsKKwkJCQlyZXR1cm4gcmVzdWx0OworCQkJfQorCQkJZGVmYXVsdDogcmV0dXJuIGRlZmF1bHRDYXNlKHRoZUVPYmplY3QpOworCQl9CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+RGlzZWFzZSBNb2RlbDwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOworCSAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgorCSAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkRpc2Vhc2UgTW9kZWw8L2VtPicuCisJICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBUMSBjYXNlRXh0ZXJuYWxEYXRhU291cmNlRGlzZWFzZU1vZGVsKEV4dGVybmFsRGF0YVNvdXJjZURpc2Vhc2VNb2RlbCBvYmplY3QpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+Q29tcGFyYWJsZTwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOworCSAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgorCSAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkNvbXBhcmFibGU8L2VtPicuCisJICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyA8VD4gVDEgY2FzZUNvbXBhcmFibGUoQ29tcGFyYWJsZTxUPiBvYmplY3QpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+SWRlbnRpZmlhYmxlPC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7CisJICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCisJICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+SWRlbnRpZmlhYmxlPC9lbT4nLgorCSAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVDEgY2FzZUlkZW50aWZpYWJsZShJZGVudGlmaWFibGUgb2JqZWN0KSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkRlY29yYXRvcjwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOworCSAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgorCSAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkRlY29yYXRvcjwvZW0+Jy4KKwkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFQxIGNhc2VEZWNvcmF0b3IoRGVjb3JhdG9yIG9iamVjdCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5Ob2RlIERlY29yYXRvcjwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOworCSAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgorCSAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPk5vZGUgRGVjb3JhdG9yPC9lbT4nLgorCSAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVDEgY2FzZU5vZGVEZWNvcmF0b3IoTm9kZURlY29yYXRvciBvYmplY3QpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+U2FuaXR5IENoZWNrZXI8L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsKKwkgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KKwkgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5TYW5pdHkgQ2hlY2tlcjwvZW0+Jy4KKwkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFQxIGNhc2VTYW5pdHlDaGVja2VyKFNhbml0eUNoZWNrZXIgb2JqZWN0KSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPk1vZGlmaWFibGU8L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsKKwkgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KKwkgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5Nb2RpZmlhYmxlPC9lbT4nLgorCSAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVDEgY2FzZU1vZGlmaWFibGUoTW9kaWZpYWJsZSBvYmplY3QpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+RGlzZWFzZSBNb2RlbDwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOworCSAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgorCSAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkRpc2Vhc2UgTW9kZWw8L2VtPicuCisJICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBUMSBjYXNlRGlzZWFzZU1vZGVsKERpc2Vhc2VNb2RlbCBvYmplY3QpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+SW50ZWdyYXRpb24gRGVjb3JhdG9yPC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7CisJICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCisJICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+SW50ZWdyYXRpb24gRGVjb3JhdG9yPC9lbT4nLgorCSAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVDEgY2FzZUludGVncmF0aW9uRGVjb3JhdG9yKEludGVncmF0aW9uRGVjb3JhdG9yIG9iamVjdCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5EaXNlYXNlIE1vZGVsPC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7CisJICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCisJICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+RGlzZWFzZSBNb2RlbDwvZW0+Jy4KKwkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFQxIGNhc2VTdGFuZGFyZERpc2Vhc2VNb2RlbChTdGFuZGFyZERpc2Vhc2VNb2RlbCBvYmplY3QpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+RU9iamVjdDwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOworCSAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLCBidXQgdGhpcyBpcyB0aGUgbGFzdCBjYXNlIGFueXdheS4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KKwkgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5FT2JqZWN0PC9lbT4nLgorCSAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVDEgZGVmYXVsdENhc2UoRU9iamVjdCBvYmplY3QpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCit9IC8vRXh0ZXJuYWxEYXRhU291cmNlU3dpdGNoCmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5mb3JjaW5nLy5jbGFzc3BhdGggYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5mb3JjaW5nLy5jbGFzc3BhdGgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzA0ZTg2MQotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmZvcmNpbmcvLmNsYXNzcGF0aApAQCAtMCwwICsxLDcgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8Y2xhc3NwYXRoPgorCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJzcmMiIHBhdGg9InNyYyIvPgorCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJjb24iIHBhdGg9Im9yZy5lY2xpcHNlLmpkdC5sYXVuY2hpbmcuSlJFX0NPTlRBSU5FUi9vcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwuZGVidWcudWkubGF1bmNoZXIuU3RhbmRhcmRWTVR5cGUvSjJTRS0xLjUiLz4KKwk8Y2xhc3NwYXRoZW50cnkga2luZD0iY29uIiBwYXRoPSJvcmcuZWNsaXBzZS5wZGUuY29yZS5yZXF1aXJlZFBsdWdpbnMiLz4KKwk8Y2xhc3NwYXRoZW50cnkga2luZD0ib3V0cHV0IiBwYXRoPSJiaW4iLz4KKzwvY2xhc3NwYXRoPgpkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZm9yY2luZy8ucHJvamVjdCBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmZvcmNpbmcvLnByb2plY3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmM1Y2JkMAotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmZvcmNpbmcvLnByb2plY3QKQEAgLTAsMCArMSwyOCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxwcm9qZWN0RGVzY3JpcHRpb24+CisJPG5hbWU+b3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmZvcmNpbmc8L25hbWU+CisJPGNvbW1lbnQ+PC9jb21tZW50PgorCTxwcm9qZWN0cz4KKwk8L3Byb2plY3RzPgorCTxidWlsZFNwZWM+CisJCTxidWlsZENvbW1hbmQ+CisJCQk8bmFtZT5vcmcuZWNsaXBzZS5qZHQuY29yZS5qYXZhYnVpbGRlcjwvbmFtZT4KKwkJCTxhcmd1bWVudHM+CisJCQk8L2FyZ3VtZW50cz4KKwkJPC9idWlsZENvbW1hbmQ+CisJCTxidWlsZENvbW1hbmQ+CisJCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuTWFuaWZlc3RCdWlsZGVyPC9uYW1lPgorCQkJPGFyZ3VtZW50cz4KKwkJCTwvYXJndW1lbnRzPgorCQk8L2J1aWxkQ29tbWFuZD4KKwkJPGJ1aWxkQ29tbWFuZD4KKwkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5TY2hlbWFCdWlsZGVyPC9uYW1lPgorCQkJPGFyZ3VtZW50cz4KKwkJCTwvYXJndW1lbnRzPgorCQk8L2J1aWxkQ29tbWFuZD4KKwk8L2J1aWxkU3BlYz4KKwk8bmF0dXJlcz4KKwkJPG5hdHVyZT5vcmcuZWNsaXBzZS5qZHQuY29yZS5qYXZhbmF0dXJlPC9uYXR1cmU+CisJCTxuYXR1cmU+b3JnLmVjbGlwc2UucGRlLlBsdWdpbk5hdHVyZTwvbmF0dXJlPgorCTwvbmF0dXJlcz4KKzwvcHJvamVjdERlc2NyaXB0aW9uPgpkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZm9yY2luZy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5mb3JjaW5nLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42Njk4MmE4Ci0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZm9yY2luZy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMKQEAgLTAsMCArMSwxNSBAQAorI1R1ZSBTZXAgMDEgMTY6NTQ6NTcgRURUIDIwMDkKK2VjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5kb2MuY29tbWVudC5zdXBwb3J0PWRpc2FibGVkCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmludmFsaWRKYXZhZG9jPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW52YWxpZEphdmFkb2NUYWdzPWVuYWJsZWQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW52YWxpZEphdmFkb2NUYWdzRGVwcmVjYXRlZFJlZj1lbmFibGVkCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmludmFsaWRKYXZhZG9jVGFnc05vdFZpc2libGVSZWY9ZW5hYmxlZAorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbnZhbGlkSmF2YWRvY1RhZ3NWaXNpYmlsaXR5PXB1YmxpYworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nSmF2YWRvY0NvbW1lbnRzPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0phdmFkb2NDb21tZW50c092ZXJyaWRpbmc9ZW5hYmxlZAorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nSmF2YWRvY0NvbW1lbnRzVmlzaWJpbGl0eT1wdWJsaWMKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0phdmFkb2NUYWdEZXNjcmlwdGlvbj1yZXR1cm5fdGFnCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdKYXZhZG9jVGFncz13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdKYXZhZG9jVGFnc092ZXJyaWRpbmc9ZW5hYmxlZAorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nSmF2YWRvY1RhZ3NWaXNpYmlsaXR5PXB1YmxpYwpkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZm9yY2luZy9NRVRBLUlORi9NQU5JRkVTVC5NRiBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmZvcmNpbmcvTUVUQS1JTkYvTUFOSUZFU1QuTUYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWQxYmM5MgotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmZvcmNpbmcvTUVUQS1JTkYvTUFOSUZFU1QuTUYKQEAgLTAsMCArMSwyMyBAQAorTWFuaWZlc3QtVmVyc2lvbjogMS4wCitCdW5kbGUtTWFuaWZlc3RWZXJzaW9uOiAyCitCdW5kbGUtTmFtZTogJXBsdWdpbk5hbWUKK0J1bmRsZS1TeW1ib2xpY05hbWU6IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5mb3JjaW5nO3NpbmdsZXRvbjo9dHJ1ZQorQnVuZGxlLVZlcnNpb246IDEuMi4xCitCdW5kbGUtQ2xhc3NQYXRoOiAuCitCdW5kbGUtQWN0aXZhdG9yOiBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZm9yY2luZy5wcm92aWRlci5Gb3JjaW5nRWRpdFBsdWdpbiRJbXBsZW1lbnRhdGlvbgorQnVuZGxlLVZlbmRvcjogJXByb3ZpZGVyTmFtZQorQnVuZGxlLUxvY2FsaXphdGlvbjogcGx1Z2luCitCdW5kbGUtUmVxdWlyZWRFeGVjdXRpb25FbnZpcm9ubWVudDogSjJTRS0xLjUKK0V4cG9ydC1QYWNrYWdlOiBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZm9yY2luZywKKyBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZm9yY2luZy5pbXBsLAorIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5mb3JjaW5nLnByb3ZpZGVyLAorIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5mb3JjaW5nLnV0aWwKK1JlcXVpcmUtQnVuZGxlOiBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUsCisgb3JnLmVjbGlwc2UuZW1mLmVjb3JlO3Zpc2liaWxpdHk6PXJlZXhwb3J0LAorIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVsczt2aXNpYmlsaXR5Oj1yZWV4cG9ydCwKKyBvcmcuZWNsaXBzZS5zdGVtLmNvcmU7dmlzaWJpbGl0eTo9cmVleHBvcnQsCisgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9uczt2aXNpYmlsaXR5Oj1yZWV4cG9ydCwKKyBvcmcuZWNsaXBzZS5lbWYuZWRpdDt2aXNpYmlsaXR5Oj1yZWV4cG9ydCwKKyBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuZWRpdDt2aXNpYmlsaXR5Oj1yZWV4cG9ydCwKKyBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHM7dmlzaWJpbGl0eTo9cmVleHBvcnQKK0J1bmRsZS1BY3RpdmF0aW9uUG9saWN5OiBsYXp5CmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5mb3JjaW5nL2J1aWxkLnByb3BlcnRpZXMgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5mb3JjaW5nL2J1aWxkLnByb3BlcnRpZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTc3NGVlZgotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmZvcmNpbmcvYnVpbGQucHJvcGVydGllcwpAQCAtMCwwICsxLDE3IEBACisKKyMgPGNvcHlyaWdodD4KKyMgPC9jb3B5cmlnaHQ+CisjCisjICRJZDogYnVpbGQucHJvcGVydGllcyx2IDEuMSAyMDA5LzAzLzEzIDAwOjA1OjQ5IHNlZGx1bmQgRXhwICQKKworYmluLmluY2x1ZGVzID0gLixcCisgICAgICAgICAgICAgICBpY29ucy8sXAorICAgICAgICAgICAgICAgTUVUQS1JTkYvLFwKKyAgICAgICAgICAgICAgIHBsdWdpbi54bWwsXAorICAgICAgICAgICAgICAgcGx1Z2luLnByb3BlcnRpZXMsXAorICAgICAgICAgICAgICAgcGx1Z2luX2RlLnByb3BlcnRpZXMsXAorICAgICAgICAgICAgICAgcGx1Z2luX2tyLnByb3BlcnRpZXMsXAorICAgICAgICAgICAgICAgcGx1Z2luX3poLnByb3BlcnRpZXMKK2phcnMuY29tcGlsZS5vcmRlciA9IC4KK3NvdXJjZS4uID0gc3JjLworb3V0cHV0Li4gPSBiaW4vCmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5mb3JjaW5nL2ljb25zL2Z1bGwvb2JqMTYvRXhhbXBsZURpc2Vhc2VNb2RlbC5naWYgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5mb3JjaW5nL2ljb25zL2Z1bGwvb2JqMTYvRXhhbXBsZURpc2Vhc2VNb2RlbC5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTcyOWEwNAotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmZvcmNpbmcvaWNvbnMvZnVsbC9vYmoxNi9FeGFtcGxlRGlzZWFzZU1vZGVsLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5mb3JjaW5nL2ljb25zL2Z1bGwvb2JqMTYvRXhhbXBsZU1vZGVsRmlsZS5naWYgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5mb3JjaW5nL2ljb25zL2Z1bGwvb2JqMTYvRXhhbXBsZU1vZGVsRmlsZS5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWQzMDllZgotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmZvcmNpbmcvaWNvbnMvZnVsbC9vYmoxNi9FeGFtcGxlTW9kZWxGaWxlLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5mb3JjaW5nL2ljb25zL2Z1bGwvb2JqMTYvRXhwZXJpbWVudGFsRGlzZWFzZU1vZGVsLmdpZiBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmZvcmNpbmcvaWNvbnMvZnVsbC9vYmoxNi9FeHBlcmltZW50YWxEaXNlYXNlTW9kZWwuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMzOGZiOGQKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5mb3JjaW5nL2ljb25zL2Z1bGwvb2JqMTYvRXhwZXJpbWVudGFsRGlzZWFzZU1vZGVsLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5mb3JjaW5nL2ljb25zL2Z1bGwvb2JqMTYvRm9yY2luZ0Rpc2Vhc2VNb2RlbC5naWYgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5mb3JjaW5nL2ljb25zL2Z1bGwvb2JqMTYvRm9yY2luZ0Rpc2Vhc2VNb2RlbC5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGU0MDRlNAotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmZvcmNpbmcvaWNvbnMvZnVsbC9vYmoxNi9Gb3JjaW5nRGlzZWFzZU1vZGVsLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5mb3JjaW5nL2ljb25zL2Z1bGwvb2JqMTYvR2F1c3NpYW4yRm9yY2luZ0Rpc2Vhc2VNb2RlbC5naWYgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5mb3JjaW5nL2ljb25zL2Z1bGwvb2JqMTYvR2F1c3NpYW4yRm9yY2luZ0Rpc2Vhc2VNb2RlbC5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODNhZmI5YgotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmZvcmNpbmcvaWNvbnMvZnVsbC9vYmoxNi9HYXVzc2lhbjJGb3JjaW5nRGlzZWFzZU1vZGVsLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5mb3JjaW5nL2ljb25zL2Z1bGwvb2JqMTYvR2F1c3NpYW4zRm9yY2luZ0Rpc2Vhc2VNb2RlbC5naWYgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5mb3JjaW5nL2ljb25zL2Z1bGwvb2JqMTYvR2F1c3NpYW4zRm9yY2luZ0Rpc2Vhc2VNb2RlbC5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjgwNDFkMgotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmZvcmNpbmcvaWNvbnMvZnVsbC9vYmoxNi9HYXVzc2lhbjNGb3JjaW5nRGlzZWFzZU1vZGVsLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5mb3JjaW5nL2ljb25zL2Z1bGwvb2JqMTYvR2F1c3NpYW5Gb3JjaW5nRGlzZWFzZU1vZGVsLmdpZiBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmZvcmNpbmcvaWNvbnMvZnVsbC9vYmoxNi9HYXVzc2lhbkZvcmNpbmdEaXNlYXNlTW9kZWwuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRlNDA0ZTQKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5mb3JjaW5nL2ljb25zL2Z1bGwvb2JqMTYvR2F1c3NpYW5Gb3JjaW5nRGlzZWFzZU1vZGVsLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5mb3JjaW5nL2ljb25zL2Z1bGwvd2l6YmFuL05ld0V4YW1wbGUuZ2lmIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZm9yY2luZy9pY29ucy9mdWxsL3dpemJhbi9OZXdFeGFtcGxlLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45N2RlNDQxCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZm9yY2luZy9pY29ucy9mdWxsL3dpemJhbi9OZXdFeGFtcGxlLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5mb3JjaW5nL21vZGVsL2ZvcmNpbmcuZWNvcmUgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5mb3JjaW5nL21vZGVsL2ZvcmNpbmcuZWNvcmUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzc2N2Y0YgotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmZvcmNpbmcvbW9kZWwvZm9yY2luZy5lY29yZQpAQCAtMCwwICsxLDQ4IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/Pg0KKzxlY29yZTpFUGFja2FnZSB4bWk6dmVyc2lvbj0iMi4wIg0KKyAgICB4bWxuczp4bWk9Imh0dHA6Ly93d3cub21nLm9yZy9YTUkiIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiDQorICAgIHhtbG5zOmVjb3JlPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2VtZi8yMDAyL0Vjb3JlIiBuYW1lPSJmb3JjaW5nIg0KKyAgICBuc1VSST0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvZm9yY2luZy5lY29yZSIgbnNQcmVmaXg9Im9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5mb3JjaW5nIj4NCisgIDxlQ2xhc3NpZmllcnMgeHNpOnR5cGU9ImVjb3JlOkVDbGFzcyIgbmFtZT0iRm9yY2luZ0Rpc2Vhc2VNb2RlbCIgZVN1cGVyVHlwZXM9Ii4uLy4uL29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy9tb2RlbC9zdGFuZGFyZC5lY29yZSMvL1N0b2NoYXN0aWNTSVJEaXNlYXNlTW9kZWwiPg0KKyAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0ibW9kdWxhdGlvbkV4cG9uZW50IiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIHBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2UuZW1mLmVjb3JlL21vZGVsL0Vjb3JlLmVjb3JlIy8vRURvdWJsZSINCisgICAgICAgIGRlZmF1bHRWYWx1ZUxpdGVyYWw9IjIuMCIvPg0KKyAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0ibW9kdWxhdGlvblBlcmlvZCIgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2VtZi8yMDAyL0Vjb3JlIy8vRURvdWJsZSINCisgICAgICAgIGRlZmF1bHRWYWx1ZUxpdGVyYWw9IjM2NS4yNTYzNjMwNTEiLz4NCisgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVBdHRyaWJ1dGUiIG5hbWU9Im1vZHVsYXRpb25QaGFzZVNoaWZ0IiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDIvRWNvcmUjLy9FRG91YmxlIg0KKyAgICAgICAgZGVmYXVsdFZhbHVlTGl0ZXJhbD0iMC4wIi8+DQorICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJtb2R1bGF0aW9uRmxvb3IiIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgcGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5lbWYuZWNvcmUvbW9kZWwvRWNvcmUuZWNvcmUjLy9FRG91YmxlIg0KKyAgICAgICAgZGVmYXVsdFZhbHVlTGl0ZXJhbD0iMC42Ii8+DQorICA8L2VDbGFzc2lmaWVycz4NCisgIDxlQ2xhc3NpZmllcnMgeHNpOnR5cGU9ImVjb3JlOkVDbGFzcyIgbmFtZT0iR2F1c3NpYW5Gb3JjaW5nRGlzZWFzZU1vZGVsIiBlU3VwZXJUeXBlcz0iLi4vLi4vb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL21vZGVsL3N0YW5kYXJkLmVjb3JlIy8vU3RvY2hhc3RpY1NJUkRpc2Vhc2VNb2RlbCI+DQorICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJzaWdtYTIiIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9lbWYvMjAwMi9FY29yZSMvL0VEb3VibGUiDQorICAgICAgICBkZWZhdWx0VmFsdWVMaXRlcmFsPSIxMDAiLz4NCisgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVBdHRyaWJ1dGUiIG5hbWU9Im1vZHVsYXRpb25QZXJpb2QiIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9lbWYvMjAwMi9FY29yZSMvL0VEb3VibGUiDQorICAgICAgICBkZWZhdWx0VmFsdWVMaXRlcmFsPSIzNjUuMjUiLz4NCisgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVBdHRyaWJ1dGUiIG5hbWU9Im1vZHVsYXRpb25QaGFzZVNoaWZ0IiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDIvRWNvcmUjLy9FRG91YmxlIg0KKyAgICAgICAgZGVmYXVsdFZhbHVlTGl0ZXJhbD0iMCIvPg0KKyAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0ibW9kdWxhdGlvbkZsb29yIiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDIvRWNvcmUjLy9FRG91YmxlIg0KKyAgICAgICAgZGVmYXVsdFZhbHVlTGl0ZXJhbD0iMC42Ii8+DQorICA8L2VDbGFzc2lmaWVycz4NCisgIDxlQ2xhc3NpZmllcnMgeHNpOnR5cGU9ImVjb3JlOkVDbGFzcyIgbmFtZT0iR2F1c3NpYW4yRm9yY2luZ0Rpc2Vhc2VNb2RlbCIgZVN1cGVyVHlwZXM9IiMvL0dhdXNzaWFuRm9yY2luZ0Rpc2Vhc2VNb2RlbCI+DQorICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJzaWdtYTJfMiIgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLmVtZi5lY29yZS9tb2RlbC9FY29yZS5lY29yZSMvL0VEb3VibGUiDQorICAgICAgICBkZWZhdWx0VmFsdWVMaXRlcmFsPSIxMDAiLz4NCisgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVBdHRyaWJ1dGUiIG5hbWU9ImF0dDEiIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgcGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5lbWYuZWNvcmUvbW9kZWwvRWNvcmUuZWNvcmUjLy9FRG91YmxlIg0KKyAgICAgICAgZGVmYXVsdFZhbHVlTGl0ZXJhbD0iMS4wIi8+DQorICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJhdHQyIiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIHBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2UuZW1mLmVjb3JlL21vZGVsL0Vjb3JlLmVjb3JlIy8vRURvdWJsZSINCisgICAgICAgIGRlZmF1bHRWYWx1ZUxpdGVyYWw9IjEuMCIvPg0KKyAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0iYXR0MyIgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLmVtZi5lY29yZS9tb2RlbC9FY29yZS5lY29yZSMvL0VEb3VibGUiDQorICAgICAgICBkZWZhdWx0VmFsdWVMaXRlcmFsPSIxLjAiLz4NCisgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVBdHRyaWJ1dGUiIG5hbWU9ImF0dDQiIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgcGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5lbWYuZWNvcmUvbW9kZWwvRWNvcmUuZWNvcmUjLy9FRG91YmxlIg0KKyAgICAgICAgZGVmYXVsdFZhbHVlTGl0ZXJhbD0iMS4wIi8+DQorICA8L2VDbGFzc2lmaWVycz4NCisgIDxlQ2xhc3NpZmllcnMgeHNpOnR5cGU9ImVjb3JlOkVDbGFzcyIgbmFtZT0iR2F1c3NpYW4zRm9yY2luZ0Rpc2Vhc2VNb2RlbCIgZVN1cGVyVHlwZXM9IiMvL0dhdXNzaWFuMkZvcmNpbmdEaXNlYXNlTW9kZWwiPg0KKyAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0ic2lnbWEyXzMiIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgcGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5lbWYuZWNvcmUvbW9kZWwvRWNvcmUuZWNvcmUjLy9FRG91YmxlIg0KKyAgICAgICAgZGVmYXVsdFZhbHVlTGl0ZXJhbD0iMTAwIi8+DQorICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJ0cmFuc21pc3Npb25SYXRlMiIgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLmVtZi5lY29yZS9tb2RlbC9FY29yZS5lY29yZSMvL0VEb3VibGUiDQorICAgICAgICBkZWZhdWx0VmFsdWVMaXRlcmFsPSIwLjAiLz4NCisgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVBdHRyaWJ1dGUiIG5hbWU9InRyYW5zbWlzc2lvblJhdGUzIiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIHBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2UuZW1mLmVjb3JlL21vZGVsL0Vjb3JlLmVjb3JlIy8vRURvdWJsZSINCisgICAgICAgIGRlZmF1bHRWYWx1ZUxpdGVyYWw9IjAuMCIvPg0KKyAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0ibW9kdWxhdGlvbkZsb29yXzIiIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgcGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5lbWYuZWNvcmUvbW9kZWwvRWNvcmUuZWNvcmUjLy9FRG91YmxlIg0KKyAgICAgICAgZGVmYXVsdFZhbHVlTGl0ZXJhbD0iMC42Ii8+DQorICA8L2VDbGFzc2lmaWVycz4NCis8L2Vjb3JlOkVQYWNrYWdlPg0KZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmZvcmNpbmcvbW9kZWwvZm9yY2luZy5nZW5tb2RlbCBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmZvcmNpbmcvbW9kZWwvZm9yY2luZy5nZW5tb2RlbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ODZjMGExCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZm9yY2luZy9tb2RlbC9mb3JjaW5nLmdlbm1vZGVsCkBAIC0wLDAgKzEsNDYgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8Z2VubW9kZWw6R2VuTW9kZWwgeG1pOnZlcnNpb249IjIuMCIKKyAgICB4bWxuczp4bWk9Imh0dHA6Ly93d3cub21nLm9yZy9YTUkiIHhtbG5zOmVjb3JlPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2VtZi8yMDAyL0Vjb3JlIgorICAgIHhtbG5zOmdlbm1vZGVsPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2VtZi8yMDAyL0dlbk1vZGVsIiBtb2RlbERpcmVjdG9yeT0iL29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5mb3JjaW5nL3NyYyIKKyAgICBlZGl0RGlyZWN0b3J5PSIvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmZvcmNpbmcvc3JjIiBlZGl0b3JEaXJlY3Rvcnk9Ii9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMuZm9yY2luZy9zcmMiCisgICAgbW9kZWxQbHVnaW5JRD0ib3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmZvcmNpbmciIG1vZGVsTmFtZT0iRm9yY2luZyIgZWRpdFBsdWdpbkNsYXNzPSJvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZm9yY2luZy5wcm92aWRlci5Gb3JjaW5nRWRpdFBsdWdpbiIKKyAgICBlZGl0b3JQbHVnaW5DbGFzcz0ib3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzLmZvcmNpbmcucHJlc2VudGF0aW9uLkZvcmNpbmdFZGl0b3JQbHVnaW4iCisgICAgbm9uTkxTTWFya2Vycz0idHJ1ZSIgdGVzdHNEaXJlY3Rvcnk9Ii9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRpc2Vhc2Vtb2RlbHMuZm9yY2luZy9zcmMiCisgICAgaW1wb3J0ZXJJRD0ib3JnLmVjbGlwc2UuZW1mLmltcG9ydGVyLmVjb3JlIiBjb21wbGlhbmNlTGV2ZWw9IjUuMCIgY29weXJpZ2h0RmllbGRzPSJmYWxzZSIKKyAgICBlZGl0UGx1Z2luSUQ9Im9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5mb3JjaW5nIiBlZGl0b3JQbHVnaW5JRD0ib3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzLmZvcmNpbmcuZWRpdG9yIgorICAgIHRlc3RzUGx1Z2luSUQ9Im9yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGlzZWFzZW1vZGVscy5mb3JjaW5nIiB1c2VkR2VuUGFja2FnZXM9Ii4uLy4uL29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy9tb2RlbC9kaXNlYXNlbW9kZWxzLmdlbm1vZGVsIy8vc3RhbmRhcmQgLi4vLi4vb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL21vZGVsL2NvcmUuZ2VubW9kZWwjLy9jb21tb24gLi4vLi4vb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL21vZGVsL2NvcmUuZ2VubW9kZWwjLy9tb2RlbCAuLi8uLi9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvbW9kZWwvY29yZS5nZW5tb2RlbCMvL2dyYXBoIC4uLy4uL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9tb2RlbC9jb3JlLmdlbm1vZGVsIy8vbW9kaWZpZXIgcGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5lbWYuZWNvcmUvbW9kZWwvRWNvcmUuZ2VubW9kZWwjLy9lY29yZSAuLi8uLi9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvbW9kZWwvY29yZS5nZW5tb2RlbCMvL3NjZW5hcmlvIC4uLy4uL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9tb2RlbC9jb3JlLmdlbm1vZGVsIy8vc2VxdWVuY2VyIC4uLy4uL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvbW9kZWwvZGVmaW5pdGlvbnMuZ2VubW9kZWwjLy9sYWJlbHMgLi4vLi4vb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzL21vZGVsL3N0YW5kYXJkLmdlbm1vZGVsIy8vc3RhbmRhcmQgLi4vLi4vb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL21vZGVsL2NvcmUuZ2VubW9kZWwjLy9zb2x2ZXIiPgorICA8Zm9yZWlnbk1vZGVsPmZvcmNpbmcuZWNvcmU8L2ZvcmVpZ25Nb2RlbD4KKyAgPGdlblBhY2thZ2VzIHByZWZpeD0iRm9yY2luZyIgYmFzZVBhY2thZ2U9Im9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscyIgZGlzcG9zYWJsZVByb3ZpZGVyRmFjdG9yeT0idHJ1ZSIKKyAgICAgIGdlbmVyYXRlRXhhbXBsZUNsYXNzPSJmYWxzZSIgbXVsdGlwbGVFZGl0b3JQYWdlcz0iZmFsc2UiIGdlbmVyYXRlTW9kZWxXaXphcmQ9ImZhbHNlIgorICAgICAgZWNvcmVQYWNrYWdlPSJmb3JjaW5nLmVjb3JlIy8iPgorICAgIDxnZW5DbGFzc2VzIGVjb3JlQ2xhc3M9ImZvcmNpbmcuZWNvcmUjLy9Gb3JjaW5nRGlzZWFzZU1vZGVsIj4KKyAgICAgIDxnZW5GZWF0dXJlcyBjcmVhdGVDaGlsZD0iZmFsc2UiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RUF0dHJpYnV0ZSBmb3JjaW5nLmVjb3JlIy8vRm9yY2luZ0Rpc2Vhc2VNb2RlbC9zZWFzb25hbE1vZHVsYXRpb25FeHBvbmVudCIvPgorICAgICAgPGdlbkZlYXR1cmVzIGNyZWF0ZUNoaWxkPSJmYWxzZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFQXR0cmlidXRlIGZvcmNpbmcuZWNvcmUjLy9Gb3JjaW5nRGlzZWFzZU1vZGVsL21vZHVsYXRpb25QZXJpb2QiLz4KKyAgICAgIDxnZW5GZWF0dXJlcyBjcmVhdGVDaGlsZD0iZmFsc2UiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RUF0dHJpYnV0ZSBmb3JjaW5nLmVjb3JlIy8vRm9yY2luZ0Rpc2Vhc2VNb2RlbC9tb2R1bGF0aW9uUGhhc2VTaGlmdCIvPgorICAgICAgPGdlbkZlYXR1cmVzIGNyZWF0ZUNoaWxkPSJmYWxzZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFQXR0cmlidXRlIGZvcmNpbmcuZWNvcmUjLy9Gb3JjaW5nRGlzZWFzZU1vZGVsL3NlYXNvbmFsTW9kdWxhdGlvbkZsb29yIi8+CisgICAgPC9nZW5DbGFzc2VzPgorICAgIDxnZW5DbGFzc2VzIGVjb3JlQ2xhc3M9ImZvcmNpbmcuZWNvcmUjLy9HYXVzc2lhbkZvcmNpbmdEaXNlYXNlTW9kZWwiPgorICAgICAgPGdlbkZlYXR1cmVzIGNyZWF0ZUNoaWxkPSJmYWxzZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFQXR0cmlidXRlIGZvcmNpbmcuZWNvcmUjLy9HYXVzc2lhbkZvcmNpbmdEaXNlYXNlTW9kZWwvc2lnbWEyIi8+CisgICAgICA8Z2VuRmVhdHVyZXMgY3JlYXRlQ2hpbGQ9ImZhbHNlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVBdHRyaWJ1dGUgZm9yY2luZy5lY29yZSMvL0dhdXNzaWFuRm9yY2luZ0Rpc2Vhc2VNb2RlbC9tb2R1bGF0aW9uUGVyaW9kIi8+CisgICAgICA8Z2VuRmVhdHVyZXMgY3JlYXRlQ2hpbGQ9ImZhbHNlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVBdHRyaWJ1dGUgZm9yY2luZy5lY29yZSMvL0dhdXNzaWFuRm9yY2luZ0Rpc2Vhc2VNb2RlbC9tb2R1bGF0aW9uUGhhc2VTaGlmdCIvPgorICAgICAgPGdlbkZlYXR1cmVzIGNyZWF0ZUNoaWxkPSJmYWxzZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFQXR0cmlidXRlIGZvcmNpbmcuZWNvcmUjLy9HYXVzc2lhbkZvcmNpbmdEaXNlYXNlTW9kZWwvbW9kdWxhdGlvbkZsb29yIi8+CisgICAgPC9nZW5DbGFzc2VzPgorICAgIDxnZW5DbGFzc2VzIGVjb3JlQ2xhc3M9ImZvcmNpbmcuZWNvcmUjLy9HYXVzc2lhbjJGb3JjaW5nRGlzZWFzZU1vZGVsIj4KKyAgICAgIDxnZW5GZWF0dXJlcyBjcmVhdGVDaGlsZD0iZmFsc2UiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RUF0dHJpYnV0ZSBmb3JjaW5nLmVjb3JlIy8vR2F1c3NpYW4yRm9yY2luZ0Rpc2Vhc2VNb2RlbC9zaWdtYTJfMiIvPgorICAgICAgPGdlbkZlYXR1cmVzIGNyZWF0ZUNoaWxkPSJmYWxzZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFQXR0cmlidXRlIGZvcmNpbmcuZWNvcmUjLy9HYXVzc2lhbjJGb3JjaW5nRGlzZWFzZU1vZGVsL3NpZ21hMiIvPgorICAgICAgPGdlbkZlYXR1cmVzIGNyZWF0ZUNoaWxkPSJmYWxzZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFQXR0cmlidXRlIGZvcmNpbmcuZWNvcmUjLy9HYXVzc2lhbjJGb3JjaW5nRGlzZWFzZU1vZGVsL21vZHVsYXRpb25QZXJpb2QiLz4KKyAgICAgIDxnZW5GZWF0dXJlcyBjcmVhdGVDaGlsZD0iZmFsc2UiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RUF0dHJpYnV0ZSBmb3JjaW5nLmVjb3JlIy8vR2F1c3NpYW4yRm9yY2luZ0Rpc2Vhc2VNb2RlbC9tb2R1bGF0aW9uUGhhc2VTaGlmdCIvPgorICAgICAgPGdlbkZlYXR1cmVzIGNyZWF0ZUNoaWxkPSJmYWxzZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFQXR0cmlidXRlIGZvcmNpbmcuZWNvcmUjLy9HYXVzc2lhbjJGb3JjaW5nRGlzZWFzZU1vZGVsL21vZHVsYXRpb25GbG9vciIvPgorICAgICAgPGdlbkZlYXR1cmVzIGNyZWF0ZUNoaWxkPSJmYWxzZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFQXR0cmlidXRlIGZvcmNpbmcuZWNvcmUjLy9HYXVzc2lhbjJGb3JjaW5nRGlzZWFzZU1vZGVsL2F0dDEiLz4KKyAgICAgIDxnZW5GZWF0dXJlcyBjcmVhdGVDaGlsZD0iZmFsc2UiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RUF0dHJpYnV0ZSBmb3JjaW5nLmVjb3JlIy8vR2F1c3NpYW4yRm9yY2luZ0Rpc2Vhc2VNb2RlbC9hdHQyIi8+CisgICAgICA8Z2VuRmVhdHVyZXMgY3JlYXRlQ2hpbGQ9ImZhbHNlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVBdHRyaWJ1dGUgZm9yY2luZy5lY29yZSMvL0dhdXNzaWFuMkZvcmNpbmdEaXNlYXNlTW9kZWwvYXR0MyIvPgorICAgICAgPGdlbkZlYXR1cmVzIGNyZWF0ZUNoaWxkPSJmYWxzZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFQXR0cmlidXRlIGZvcmNpbmcuZWNvcmUjLy9HYXVzc2lhbjJGb3JjaW5nRGlzZWFzZU1vZGVsL2F0dDQiLz4KKyAgICA8L2dlbkNsYXNzZXM+CisgICAgPGdlbkNsYXNzZXMgZWNvcmVDbGFzcz0iZm9yY2luZy5lY29yZSMvL0dhdXNzaWFuM0ZvcmNpbmdEaXNlYXNlTW9kZWwiPgorICAgICAgPGdlbkZlYXR1cmVzIGNyZWF0ZUNoaWxkPSJmYWxzZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFQXR0cmlidXRlIGZvcmNpbmcuZWNvcmUjLy9HYXVzc2lhbjNGb3JjaW5nRGlzZWFzZU1vZGVsL3NpZ21hMl8zIi8+CisgICAgICA8Z2VuRmVhdHVyZXMgY3JlYXRlQ2hpbGQ9ImZhbHNlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVBdHRyaWJ1dGUgZm9yY2luZy5lY29yZSMvL0dhdXNzaWFuM0ZvcmNpbmdEaXNlYXNlTW9kZWwvdHJhbnNtaXNzaW9uUmF0ZTIiLz4KKyAgICAgIDxnZW5GZWF0dXJlcyBjcmVhdGVDaGlsZD0iZmFsc2UiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RUF0dHJpYnV0ZSBmb3JjaW5nLmVjb3JlIy8vR2F1c3NpYW4zRm9yY2luZ0Rpc2Vhc2VNb2RlbC90cmFuc21pc3Npb25SYXRlMyIvPgorICAgICAgPGdlbkZlYXR1cmVzIGNyZWF0ZUNoaWxkPSJmYWxzZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFQXR0cmlidXRlIGZvcmNpbmcuZWNvcmUjLy9HYXVzc2lhbjNGb3JjaW5nRGlzZWFzZU1vZGVsL21vZHVsYXRpb25GbG9vcl8yIi8+CisgICAgPC9nZW5DbGFzc2VzPgorICA8L2dlblBhY2thZ2VzPgorPC9nZW5tb2RlbDpHZW5Nb2RlbD4KZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmZvcmNpbmcvcGx1Z2luLnByb3BlcnRpZXMgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5mb3JjaW5nL3BsdWdpbi5wcm9wZXJ0aWVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJmMzA0YzYKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5mb3JjaW5nL3BsdWdpbi5wcm9wZXJ0aWVzCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmZvcmNpbmcvcGx1Z2luLnhtbCBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmZvcmNpbmcvcGx1Z2luLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMGQwMWM2Ci0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZm9yY2luZy9wbHVnaW4ueG1sCkBAIC0wLDAgKzEsNzYgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8P2VjbGlwc2UgdmVyc2lvbj0iMy4wIj8+CisKKzwhLS0KKyA8Y29weXJpZ2h0PgorIDwvY29weXJpZ2h0PgorCisgJElkOiBwbHVnaW4ueG1sLHYgMS4xIDIwMDkvMDMvMTMgMDA6MDU6NDkgc2VkbHVuZCBFeHAgJAorLS0+CisKKzxwbHVnaW4+CisgICAgCisgIDxleHRlbnNpb24gcG9pbnQ9Im9yZy5lY2xpcHNlLmVtZi5lZGl0Lml0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3JpZXMiPgorICAgIDxmYWN0b3J5IAorICAgICAgIHVyaSA9ICJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9mb3JjaW5nLmVjb3JlIiAKKyAgICAgICBjbGFzcyA9ICJvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZm9yY2luZy5wcm92aWRlci5Gb3JjaW5nSXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkiIAorICAgICAgIHN1cHBvcnRlZFR5cGVzID0gCisgICAgICAgICAib3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUVkaXRpbmdEb21haW5JdGVtUHJvdmlkZXIKKyAgICAgICAgICBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JU3RydWN0dXJlZEl0ZW1Db250ZW50UHJvdmlkZXIKKyAgICAgICAgICBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JVHJlZUl0ZW1Db250ZW50UHJvdmlkZXIKKyAgICAgICAgICBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbUxhYmVsUHJvdmlkZXIKKyAgICAgICAgICBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbVByb3BlcnR5U291cmNlIiAvPgorICA8L2V4dGVuc2lvbj4KKworICA8ZXh0ZW5zaW9uIHBvaW50PSJvcmcuZWNsaXBzZS5lbWYuZWNvcmUuZ2VuZXJhdGVkX3BhY2thZ2UiPgorICAgIDxwYWNrYWdlCisgICAgICAgdXJpID0gImh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL2ZvcmNpbmcuZWNvcmUiCisgICAgICAgY2xhc3MgPSAib3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmZvcmNpbmcuRm9yY2luZ1BhY2thZ2UiCisgICAgICAgZ2VuTW9kZWwgPSAibW9kZWwvZm9yY2luZy5nZW5tb2RlbCIgLz4gCisgIDwvZXh0ZW5zaW9uPgorICA8ZXh0ZW5zaW9uCisgICAgICAgIHBvaW50PSJvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZGlzZWFzZW1vZGVsIj4KKyAgICAgPGNsYXNzZGVmCisgICAgICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZm9yY2luZy5pbXBsLkZvcmNpbmdEaXNlYXNlTW9kZWxJbXBsIj4KKyAgICAgPC9jbGFzc2RlZj4KKyAgICAgPGR1Ymxpbl9jb3JlCisgICAgICAgICAgIGNyZWF0b3I9IiVkY19jcmVhdG9yX2VkbHVuZCIKKyAgICAgICAgICAgZGVzY3JpcHRpb249IiVkY19kZXNjX0ZvcmNpbmdfU19TRUlSIgorICAgICAgICAgICBpZGVudGlmaWVyPSIlZGNfaWRlbnRpZXIiCisgICAgICAgICAgIGxpY2Vuc2U9IiVkY19saWNlbnNlIgorICAgICAgICAgICBwdWJsaXNoZXI9IiVkY19wdWJsaXNoZXIiCisgICAgICAgICAgIHNvdXJjZT0iJWRjX1NPVVJDRSIKKyAgICAgICAgICAgdGl0bGU9IiVkY190aXRsZV9Gb3JjaW5nX1NfU0VJUiI+CisgICAgIDwvZHVibGluX2NvcmU+CisgIDwvZXh0ZW5zaW9uPgorCTxleHRlbnNpb24KKyAgICAgICAgcG9pbnQ9Im9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5kaXNlYXNlbW9kZWwiPgorICAgICA8Y2xhc3NkZWYKKyAgICAgICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5mb3JjaW5nLmltcGwuR2F1c3NpYW5Gb3JjaW5nRGlzZWFzZU1vZGVsSW1wbCI+CisgICAgIDwvY2xhc3NkZWY+CisgICAgIDxkdWJsaW5fY29yZQorICAgICAgICAgICBjcmVhdG9yPSIlZGNfY3JlYXRvcl9lZGx1bmQiCisgICAgICAgICAgIGRlc2NyaXB0aW9uPSIlZGNfZGVzY19Gb3JjaW5nX0dfU19TRUlSIgorICAgICAgICAgICBpZGVudGlmaWVyPSIlZGNfaWRlbnRpZXIiCisgICAgICAgICAgIGxpY2Vuc2U9IiVkY19saWNlbnNlIgorICAgICAgICAgICBwdWJsaXNoZXI9IiVkY19wdWJsaXNoZXIiCisgICAgICAgICAgIHNvdXJjZT0iJWRjX1NPVVJDRSIKKyAgICAgICAgICAgdGl0bGU9IiVkY190aXRsZV9Gb3JjaW5nX0dfU19TRUlSIj4KKyAgICAgPC9kdWJsaW5fY29yZT4KKyAgPC9leHRlbnNpb24+CisgIDxleHRlbnNpb24KKyAgICAgICAgcG9pbnQ9Im9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5kaXNlYXNlbW9kZWwiPgorICAgICA8Y2xhc3NkZWYKKyAgICAgICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5mb3JjaW5nLmltcGwuR2F1c3NpYW4zRm9yY2luZ0Rpc2Vhc2VNb2RlbEltcGwiPgorICAgICA8L2NsYXNzZGVmPgorICAgICA8ZHVibGluX2NvcmUKKyAgICAgICAgICAgY3JlYXRvcj0iJWRjX2NyZWF0b3JfZWRsdW5kIgorICAgICAgICAgICBkZXNjcmlwdGlvbj0iJWRjX2Rlc2NfRm9yY2luZ19BR19TX1NFSVIiCisgICAgICAgICAgIGlkZW50aWZpZXI9IiVkY19pZGVudGllciIKKyAgICAgICAgICAgbGljZW5zZT0iJWRjX2xpY2Vuc2UiCisgICAgICAgICAgIHB1Ymxpc2hlcj0iJWRjX3B1Ymxpc2hlciIKKyAgICAgICAgICAgc291cmNlPSIlZGNfU09VUkNFIgorICAgICAgICAgICB0aXRsZT0iJWRjX3RpdGxlX0ZvcmNpbmdfQUdfU19TRUlSIj4KKyAgICAgPC9kdWJsaW5fY29yZT4KKyAgPC9leHRlbnNpb24+Cis8L3BsdWdpbj4KZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmZvcmNpbmcvcGx1Z2luX2RlLnByb3BlcnRpZXMgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5mb3JjaW5nL3BsdWdpbl9kZS5wcm9wZXJ0aWVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk3NzcxZjEKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5mb3JjaW5nL3BsdWdpbl9kZS5wcm9wZXJ0aWVzCkBAIC0wLDAgKzEsMTQ1IEBACisjLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyMgKiBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisjICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworIyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorIyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisjICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyMgKgorIyAqIENvbnRyaWJ1dG9yczoKKyMgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisjICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyMgVG8gY29kZSBkZXZlbG9wZXI6CisjICAgRG8gTk9UIGNoYW5nZSB0aGUgcHJvcGVydGllcyBiZXR3ZWVuIHRoaXMgbGluZSBhbmQgdGhlCisjICAgIiUlJSBFTkQgT0YgVFJBTlNMQVRFRCBQUk9QRVJUSUVTICUlJSIgbGluZS4KKyMgICBNYWtlIGEgbmV3IHByb3BlcnR5IG5hbWUsIGFwcGVuZCB0byB0aGUgZW5kIG9mIHRoZSBmaWxlIGFuZCBjaGFuZ2UKKyMgICB0aGUgY29kZSB0byB1c2UgdGhlIG5ldyBwcm9wZXJ0eS4KKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorIyAlJSUgRU5EIE9GIFRSQU5TTEFURUQgUFJPUEVSVElFUyAlJSUKKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworcGx1Z2luTmFtZT1TVEVNIEZvcmNpbmctS3JhbmtoZWl0c21vZGVsbAorcHJvdmlkZXJOYW1lPUVjbGlwc2Uub3JnCisKKyMgRHVibGluIENvcmUKK2RjX2NyZWF0b3JfZWRsdW5kPUVkbHVuZAorZGNfaWRlbnRpZXI9U1RFTSBXaWVkZXJnYWJlIEtyYW5raGVpdHNtb2RlbGwKK2RjX3B1Ymxpc2hlcj1EaWUgRWNsaXBzZSBGb3VuZGF0aW9uCitkY19saWNlbnNlPUVjbGlwc2UgUHVibGljIExpY2Vuc2UgKEVQTCkKK2RjX3RpdGxlX0ZvcmNpbmdfU19TRUlSPVNhaXNvbmFsZSBLcmFua2hlaXQKK2RjX3RpdGxlX0ZvcmNpbmdfR19TX1NFSVI9U2Fpc29uYWxlIEdhdVx1MDBkZi1LcmFua2hlaXQKK2RjX3RpdGxlX0ZvcmNpbmdfQUdfU19TRUlSPVNhaXNvbmFsZSBBbHQuR2F1XHUwMGRmLUtyYW5raGVpdAorZGNfZGVzY19Gb3JjaW5nX1NfU0VJUj1TYWlzb25hbGVzIEZvcmNpbmctS3JhbmtoZWl0c21vZGVsbAorZGNfZGVzY19Gb3JjaW5nX0dfU19TRUlSPVNhaXNvbmFsZXMgS3JhbmtoZWl0c21vZGVsbCBtaXQgR2F1XHUwMGRmLUZvcmNpbmcKK2RjX2Rlc2NfRm9yY2luZ19BR19TX1NFSVI9U2Fpc29uYWxlcyBLcmFua2hlaXRzbW9kZWxsIG1pdCBhbHRlcm5pZXJlbmRlbSBHYXVcdTAwZGYtRm9yY2luZworCitkY190aXRsZV9FX1NfU0VJUj1TYWlzb25hbGVzIEZvcmNpbmctU0lSLUtyYW5raGVpdHNtb2RlbGwKK2RjX1NPVVJDRT1odHRwOi8vd2lraS5lY2xpcHNlLm9yZy9JbnRyb2R1Y3Rpb25fdG9fQ29tcGFydG1lbnRfTW9kZWxzICh1bmQgUmVmZXJlbnplbiBnaWJ0IGVzLWluKQorCitfVUlfQ3JlYXRlQ2hpbGRfdGV4dD17MH0KK19VSV9DcmVhdGVDaGlsZF90ZXh0Mj17MX0gezB9CitfVUlfQ3JlYXRlQ2hpbGRfdGV4dDM9ezF9CitfVUlfQ3JlYXRlQ2hpbGRfdG9vbHRpcD1OZXVlcyB7MH0gdW50ZXIgezF9IEZlYXR1cmUgZXJzdGVsbGVuCitfVUlfQ3JlYXRlQ2hpbGRfZGVzY3JpcHRpb249TmV1ZXMgS2luZCB2b20gVHlwIHswfSBmXHUwMGZjciBkYXMgezF9IE1lcmttYWwgZGVyIGF1c2dld1x1MDBlNGhsdGVuIHsyfSBlcnN0ZWxsZW4KK19VSV9DcmVhdGVTaWJsaW5nX2Rlc2NyaXB0aW9uPU5ldWVzIEdlc2Nod2lzdGVydGVpbCB2b20gVHlwIHswfSBmXHUwMGZjciBkZW4gYXVzZ2V3XHUwMGU0aGx0ZW4gezJ9IHVudGVyIGRlbSB7MX0gTWVya21hbCBkZXMgRWx0ZXJudGVpbCBlcnN0ZWxsZW4KKworX1VJX1Byb3BlcnR5RGVzY3JpcHRvcl9kZXNjcmlwdGlvbj17MH0gdm9uIHsxfQorCitfVUlfRXhwZXJpbWVudGFsRGlzZWFzZU1vZGVsX3R5cGU9RXhwZXJpbWVudGVsbGVzIEtyYW5raGVpdHNtb2RlbGwKK19VSV9Vbmtub3duX3R5cGU9T2JqZWt0CisKK19VSV9Vbmtub3duX2RhdGF0eXBlPVdlcnQKKworX1VJX1Vua25vd25fZmVhdHVyZT1OaWNodCBzcGV6aWZpemllcnQKKworX1VJX0V4YW1wbGVEaXNlYXNlTW9kZWxfdHlwZT1LcmFua2hlaXRzbW9kZWxsCitfVUlfRXhhbXBsZUVkaXRvcl9tZW51PSZFeGFtcGxlIEVkaXRvcgorCitfVUlfQ3JlYXRlQ2hpbGRfbWVudV9pdGVtPSZOZXcgQ2hpbGQKK19VSV9DcmVhdGVTaWJsaW5nX21lbnVfaXRlbT1OJmV1ZXMgR2VzY2h3aXN0ZXJ0ZWlsCisKK19VSV9TaG93UHJvcGVydGllc1ZpZXdfbWVudV9pdGVtPVNob3cgJiBQcm9wZXJ0aWVzIFZpZXcKK19VSV9SZWZyZXNoVmlld2VyX21lbnVfaXRlbT0mUmVmcmVzaAorCitfVUlfU2VsZWN0aW9uUGFnZV9sYWJlbD1BdXN3YWhsCitfVUlfUGFyZW50UGFnZV9sYWJlbD1FbHRlcm50ZWlsCitfVUlfTGlzdFBhZ2VfbGFiZWw9TGlzdGUKK19VSV9UcmVlUGFnZV9sYWJlbD1CYXVtCitfVUlfVGFibGVQYWdlX2xhYmVsPVRhYmVsbGUKK19VSV9UcmVlV2l0aENvbHVtbnNQYWdlX2xhYmVsPUJhdW0gbWl0IFNwYWx0ZW4KK19VSV9PYmplY3RDb2x1bW5fbGFiZWw9T2JqZWt0CitfVUlfU2VsZkNvbHVtbl9sYWJlbD1TZWxic3QKKworX1VJX05vT2JqZWN0U2VsZWN0ZWQ9TmljaHRzIGF1c2dld1x1MDBlNGhsdAorX1VJX1NpbmdsZU9iamVjdFNlbGVjdGVkPUF1c2dld1x1MDBlNGhsdGVzIE9iamVrdDogezB9CitfVUlfTXVsdGlPYmplY3RTZWxlY3RlZD1BdXNnZXdcdTAwZTRobHRlIHswfSBPYmpla3RlCisKK19VSV9PcGVuRWRpdG9yRXJyb3JfbGFiZWw9RWRpdG9yIFx1MDBmNmZmbmVuCisKK19VSV9XaXphcmRfY2F0ZWdvcnk9QmVpc3BpZWwgRU1GIE1vZGVsbCBFcnN0ZWxsdW5nc2Fzc2lzdGVudAorCitfVUlfQ3JlYXRlTW9kZWxFcnJvcl9tZXNzYWdlPUF1ZmdldHJldGVuZSBQcm9ibGVtZSBpbiBkZXIgRGF0ZWkgInswfSIKKworX1VJX0V4YW1wbGVNb2RlbFdpemFyZF9sYWJlbD1CZWlzcGllbCBNb2RlbGwKK19VSV9FeGFtcGxlTW9kZWxXaXphcmRfZGVzY3JpcHRpb249TmV1ZXMgQmVpc3BpZWwtTW9kZWxsIGVyc3RlbGxlbgorCitfVUlfRXhhbXBsZUVkaXRvcl9sYWJlbD1CZWlzcGllbCBNb2RlbGwtRWRpdG9yCisKK19VSV9FeGFtcGxlRWRpdG9yRmlsZW5hbWVEZWZhdWx0QmFzZT1NZWluCitfVUlfRXhhbXBsZUVkaXRvckZpbGVuYW1lRXh0ZW5zaW9uPUJlaXNwaWVsCisKK19VSV9XaXphcmRfbGFiZWw9TmV1CisKK19XQVJOX0ZpbGVuYW1lRXh0ZW5zaW9uPURlciBEYXRlaW5hbWUgbXVzcyBhdWYgIi57MH0iIGVuZGVuCisKK19VSV9Nb2RlbE9iamVjdD0mTW9kZWwgT2JqZWN0CitfVUlfWE1MRW5jb2Rpbmc9JlhNTCBFbmNvZGluZworX1VJX1hNTEVuY29kaW5nQ2hvaWNlcz1VVEYtOCBBU0NJSSBVVEYtMTYgVVRGLTE2QkUgVVRGLTE2TEUgSVNPLTg4NTktMQorX1VJX1dpemFyZF9pbml0aWFsX29iamVjdF9kZXNjcmlwdGlvbj1adSBlcnpldWdlbmRlcyBNb2RlbGxvYmpla3Qgd1x1MDBlNGhsZW4KKworX1VJX0ZpbGVDb25mbGljdF9sYWJlbD1EYXRlaWtvbmZsaWt0CitfV0FSTl9GaWxlQ29uZmxpY3Q9RXMgZ2lidCBuaWNodCBnZXNwZWljaGVydGUgXHUwMGM0bmRlcnVuZ2VuLCBkaWUgS29uZmxpa3RlIG1pdCBcdTAwYzRuZGVydW5nZW4gYXVcdTAwZGZlcmhhbGIgZGVzIEVkaXRvcnMgZXJ6ZXVnZW4uIE1cdTAwZjZjaHRlbiBTaWUgZGllIFx1MDBjNG5kZXJ1bmdlbiBpbSBFZGl0b3IgdmVyd2VyZmVuPworCitfVUlfRXhhbXBsZURpc2Vhc2VNb2RlbF9zZWFzb25hbE1vZHVsYXRpb25fZmVhdHVyZT1TYWlzb25hbGUgTW9kdWxhdGlvbgorX1VJX0V4YW1wbGVEaXNlYXNlTW9kZWxfbW9kdWxhdGlvblBlcmlvZF9mZWF0dXJlPU1vZHVsYXRpb25zcGVyaW9kZQorX1VJX0V4YW1wbGVEaXNlYXNlTW9kZWxfbW9kdWxhdGlvblBoYXNlU2hpZl9mZWF0dXJlPVBoYXNlbnZlcnNjaGllYnVuZyBkZXIgTW9kdWxhdGlvbgorX1VJX0V4YW1wbGVFZGl0b3JGaWxlbmFtZUV4dGVuc2lvbnM9QmVpc3BpZWwKKworX1dBUk5fRmlsZW5hbWVFeHRlbnNpb25zPURlciBEYXRlaW5hbWUgbXVzcyBlaW5lIGRlciBmb2xnZW5kZW4gRW5kdW5nZW4gaGFiZW46IHswfQorCitfVUlfRXhhbXBsZURpc2Vhc2VNb2RlbF9tb2R1bGF0aW9uUGhhc2VTaGlmdF9mZWF0dXJlPVBoYXNlbnZlcnNjaGllYnVuZyBkZXIgTW9kdWxhdGlvbgorX1VJX0V4YW1wbGVEaXNlYXNlTW9kZWxfc2Vhc29uYWxNb2R1bGF0aW9uVGhyZXNob2xkX2ZlYXR1cmU9U2Fpc29uYWxlIE1vZHVsYXRpb25zZ3Jlbnp3ZXJ0CitfVUlfRXhhbXBsZURpc2Vhc2VNb2RlbF9zZWFzb25hbE1vZHVsYXRpb25FeHBvbmVudF9mZWF0dXJlPVNhaXNvbmFsZXIgTW9kdWxhdGlvbnNleHBvbmVudAorX1VJX0V4YW1wbGVEaXNlYXNlTW9kZWxfc2Vhc29uYWxNb2R1bGF0aW9uRmxvb3JfZmVhdHVyZT1TYWlzb25hbGUgTW9kdWxhdGlvbnMtVW50ZXJncmVuemUKK19VSV9Gb3JjaW5nRGlzZWFzZU1vZGVsX3R5cGU9S3JhbmtoZWl0c21vZGVsbAorX1VJX0ZvcmNpbmdEaXNlYXNlTW9kZWxfc2Vhc29uYWxNb2R1bGF0aW9uRXhwb25lbnRfZmVhdHVyZT1TYWlzb25hbGVyIE1vZHVsYXRpb25zZXhwb25lbnQKK19VSV9Gb3JjaW5nRGlzZWFzZU1vZGVsX21vZHVsYXRpb25QZXJpb2RfZmVhdHVyZT1Nb2R1bGF0aW9uc3BlcmlvZGUKK19VSV9Gb3JjaW5nRGlzZWFzZU1vZGVsX21vZHVsYXRpb25QaGFzZVNoaWZ0X2ZlYXR1cmU9UGhhc2VudmVyc2NoaWVidW5nIGRlciBNb2R1bGF0aW9uCitfVUlfRm9yY2luZ0Rpc2Vhc2VNb2RlbF9zZWFzb25hbE1vZHVsYXRpb25GbG9vcl9mZWF0dXJlPVNhaXNvbmFsZSBNb2R1bGF0aW9ucy1VbnRlcmdyZW56ZQorX1VJX0ZvcmNpbmdEaXNlYXNlTW9kZWxfYXR0ZW51YXRpb25fZmVhdHVyZT1EXHUwMGU0bXBmdW5nCitfVUlfR2F1c3NpYW5Gb3JjaW5nRGlzZWFzZU1vZGVsX3R5cGU9R2F1XHUwMGRmLUZvcmNpbmctS3JhbmtoZWl0c21vZGVsbAorX1VJX0dhdXNzaWFuRm9yY2luZ0Rpc2Vhc2VNb2RlbF9zaWdtYTJfZmVhdHVyZT1TaWdtYTIKK19VSV9HYXVzc2lhbkZvcmNpbmdEaXNlYXNlTW9kZWxfbXVfZmVhdHVyZT1NdQorX1VJX0dhdXNzaWFuRm9yY2luZ0Rpc2Vhc2VNb2RlbF9tb2R1bGF0aW9uUGVyaW9kX2ZlYXR1cmU9TW9kdWxhdGlvbnNwZXJpb2RlCitfVUlfR2F1c3NpYW5Gb3JjaW5nRGlzZWFzZU1vZGVsX21vZHVsYXRpb25QaGFzZVNoaWZ0X2ZlYXR1cmU9UGhhc2VudmVyc2NoaWVidW5nIGRlciBNb2R1bGF0aW9uCitfVUlfR2F1c3NpYW5Gb3JjaW5nRGlzZWFzZU1vZGVsX21vZHVsYXRpb25GbG9vcl9mZWF0dXJlPU1vZHVsYXRpb25zdW50ZXJncmVuemUKK19VSV9HYXVzc2lhbjJGb3JjaW5nRGlzZWFzZU1vZGVsX3R5cGU9R2F1XHUwMGRmMi1Gb3JjaW5nLUtyYW5raGVpdHNtb2RlbGwKK19VSV9HYXVzc2lhbjJGb3JjaW5nRGlzZWFzZU1vZGVsX3NpZ21hMl8yX2ZlYXR1cmU9U2lnbWEyIDIKK19VSV9HYXVzc2lhbjJGb3JjaW5nRGlzZWFzZU1vZGVsX3NpZ21hMl9mZWF0dXJlPVNpZ21hMgorX1VJX0dhdXNzaWFuMkZvcmNpbmdEaXNlYXNlTW9kZWxfbW9kdWxhdGlvblBlcmlvZF9mZWF0dXJlPU1vZHVsYXRpb25zcGVyaW9kZQorX1VJX0dhdXNzaWFuMkZvcmNpbmdEaXNlYXNlTW9kZWxfbW9kdWxhdGlvblBoYXNlU2hpZnRfZmVhdHVyZT1QaGFzZW52ZXJzY2hpZWJ1bmcgZGVyIE1vZHVsYXRpb24KK19VSV9HYXVzc2lhbjJGb3JjaW5nRGlzZWFzZU1vZGVsX21vZHVsYXRpb25GbG9vcl9mZWF0dXJlPU1vZHVsYXRpb25zdW50ZXJncmVuemUKK19VSV9HYXVzc2lhbjJGb3JjaW5nRGlzZWFzZU1vZGVsX2F0dDFfZmVhdHVyZT1BVFQxCitfVUlfR2F1c3NpYW4yRm9yY2luZ0Rpc2Vhc2VNb2RlbF9hdHQyX2ZlYXR1cmU9QXR0MgorX1VJX0dhdXNzaWFuMkZvcmNpbmdEaXNlYXNlTW9kZWxfYXR0M19mZWF0dXJlPUF0dDMKK19VSV9HYXVzc2lhbjJGb3JjaW5nRGlzZWFzZU1vZGVsX2F0dDRfZmVhdHVyZT1BdHQ0CitfVUlfR2F1c3NpYW4zRm9yY2luZ0Rpc2Vhc2VNb2RlbF90eXBlPUdhdVx1MDBkZjMtRm9yY2luZy1LcmFua2hlaXRzbW9kZWxsCitfVUlfR2F1c3NpYW4zRm9yY2luZ0Rpc2Vhc2VNb2RlbF9zaWdtYTJfM19mZWF0dXJlPVNpZ21hMiAzCitfVUlfR2F1c3NpYW4zRm9yY2luZ0Rpc2Vhc2VNb2RlbF90cmFuc21pc3Npb25SYXRlMl9mZWF0dXJlPVx1MDBkY2JlcnRyYWd1bmdzcmF0ZSAyCitfVUlfR2F1c3NpYW4zRm9yY2luZ0Rpc2Vhc2VNb2RlbF90cmFuc21pc3Npb25SYXRlM19mZWF0dXJlPVx1MDBkY2JlcnRyYWd1bmdzcmF0ZSAzCitfVUlfR2F1c3NpYW4zRm9yY2luZ0Rpc2Vhc2VNb2RlbF9tb2R1bGF0aW9uRmxvb3JfMl9mZWF0dXJlPU1vZHVsYXRpb25zdW50ZXJncmVuemUgMgorX1VJX0ZvcmNpbmdEaXNlYXNlTW9kZWxfbW9kdWxhdGlvbkV4cG9uZW50X2ZlYXR1cmU9TW9kdWxhdGlvbiBFeHBvbmVudAorX1VJX0ZvcmNpbmdEaXNlYXNlTW9kZWxfbW9kdWxhdGlvbkZsb29yX2ZlYXR1cmU9TW9kdWxhdGlvbnN1bnRlcmdyZW56ZQpkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZm9yY2luZy9wbHVnaW5fa3IucHJvcGVydGllcyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmZvcmNpbmcvcGx1Z2luX2tyLnByb3BlcnRpZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGZkZmEzMgotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmZvcmNpbmcvcGx1Z2luX2tyLnByb3BlcnRpZXMKQEAgLTAsMCArMSwxNDUgQEAKKyMvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIyAqIENvcHlyaWdodCAoYykgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyMgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisjICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisjICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyMgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorIyAqCisjICogQ29udHJpYnV0b3JzOgorIyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorIyBUbyBjb2RlIGRldmVsb3BlcjoKKyMgICBEbyBOT1QgY2hhbmdlIHRoZSBwcm9wZXJ0aWVzIGJldHdlZW4gdGhpcyBsaW5lIGFuZCB0aGUKKyMgICAiJSUlIEVORCBPRiBUUkFOU0xBVEVEIFBST1BFUlRJRVMgJSUlIiBsaW5lLgorIyAgIE1ha2UgYSBuZXcgcHJvcGVydHkgbmFtZSwgYXBwZW5kIHRvIHRoZSBlbmQgb2YgdGhlIGZpbGUgYW5kIGNoYW5nZQorIyAgIHRoZSBjb2RlIHRvIHVzZSB0aGUgbmV3IHByb3BlcnR5LgorIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisjICUlJSBFTkQgT0YgVFJBTlNMQVRFRCBQUk9QRVJUSUVTICUlJQorIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitwbHVnaW5OYW1lPVNURU0gXHVhYzE1XHVjODFjIFx1YzljOFx1YmNkMSBcdWJhYThcdWIzNzgKK3Byb3ZpZGVyTmFtZT1FY2xpcHNlLm9yZworCisjIER1YmxpbiBDb3JlCitkY19jcmVhdG9yX2VkbHVuZD1cdWM1ZDBcdWI0ZTRcdWI3ZjBcdWI0ZGMKK2RjX2lkZW50aWVyPVNURU0gXHVjN2FjXHVjMGRkIFx1YzljOFx1YmNkMSBcdWJhYThcdWIzNzgKK2RjX3B1Ymxpc2hlcj1cdWM3NzRcdWQwNzRcdWI5YmRcdWMyYTQgXHVjN2FjXHViMmU4CitkY19saWNlbnNlPVx1Yzc3NFx1ZDA3NFx1YjliZFx1YzJhNCBcdWFjZjVcdWM2YTkgXHVjMGFjXHVjNmE5IFx1ZDVjOFx1YWMwMFx1YzExYyAoRVBMKQorZGNfdGl0bGVfRm9yY2luZ19TX1NFSVI9XHVhY2M0XHVjODA4IFx1YzljOFx1YmNkMQorZGNfdGl0bGVfRm9yY2luZ19HX1NfU0VJUj1cdWFjYzRcdWM4MDggR2F1c2lhbiBcdWM5YzhcdWJjZDEKK2RjX3RpdGxlX0ZvcmNpbmdfQUdfU19TRUlSPVx1YWNjNFx1YzgwOCBBbHQuR2F1c3NpYW4gXHVjOWM4XHViY2QxCitkY19kZXNjX0ZvcmNpbmdfU19TRUlSPVx1YWNjNFx1YzgwOCBcdWFjMTVcdWM4MWMgXHVjOWM4XHViY2QxIFx1YmFhOFx1YjM3OAorZGNfZGVzY19Gb3JjaW5nX0dfU19TRUlSPUdhdXNpYW4gXHVhYzE1XHVjODFjIFx1YzgwMVx1YzZhOVx1ZDU1YyBcdWFjYzRcdWM4MDggXHVjOWM4XHViY2QxIFx1YmFhOFx1YjM3OAorZGNfZGVzY19Gb3JjaW5nX0FHX1NfU0VJUj1cdWIzMDBcdWNjYjQgR2F1c2lhbiBcdWFjMTVcdWM4MWMgXHVjODAxXHVjNmE5XHVkNTVjIFx1YWNjNFx1YzgwOCBcdWM5YzhcdWJjZDEgXHViYWE4XHViMzc4CisKK2RjX3RpdGxlX0VfU19TRUlSPVx1YWNjNFx1YzgwOCBcdWFjMTVcdWM4MWMgU0lSIFx1YzljOFx1YmNkMSBcdWJhYThcdWIzNzgKK2RjX1NPVVJDRT1odHRwOi8vd2lraS5lY2xpcHNlLm9yZy9JbnRyb2R1Y3Rpb25fdG9fQ29tcGFydG1lbnRfTW9kZWxzIChcdWFkZjhcdWI5YWNcdWFjZTAgXHVjYzM4XHVhY2UwIFx1YmIzOFx1ZDVjY1x1YzVkMFx1YzExYykKKworX1VJX0NyZWF0ZUNoaWxkX3RleHQ9ezB9CitfVUlfQ3JlYXRlQ2hpbGRfdGV4dDI9ezF9IHswfQorX1VJX0NyZWF0ZUNoaWxkX3RleHQzPXsxfQorX1VJX0NyZWF0ZUNoaWxkX3Rvb2x0aXA9ezF9IFx1YWUzMFx1YjJhNSBcdWQ1NThcdWM1ZDAgXHVjMGM4IHswfSBcdWI5Y2NcdWI0ZTRcdWFlMzAKK19VSV9DcmVhdGVDaGlsZF9kZXNjcmlwdGlvbj1cdWMxMjBcdWQwZGRcdWQ1NWMgezJ9XHVjNzU4IHsxfSBcdWFlMzBcdWIyYTVcdWM1ZDAgXHViMzAwXHVkNTVjIFx1ZDYxNVx1YzJkZCB7MH1cdWM3NTggXHVjMGM4XHViODVjXHVjNmI0IENoaWxkXHViOTdjIFx1YjljY1x1YjRlZFx1YjJjOFx1YjJlNC4KK19VSV9DcmVhdGVTaWJsaW5nX2Rlc2NyaXB0aW9uPVx1YmQ4MFx1YmFhOFx1Yzc1OCBcdWMxMjBcdWQwZGRcdWI0MWMgezJ9XHVjNWQwXHVjMTFjIHsxfSBcdWFlMzBcdWIyYTVcdWM1ZDAgXHViMzAwXHVkNTVjIFx1ZDYxNVx1YzJkZCB7MH1cdWM3NTggXHVjMGM4XHViODVjXHVjNmI0IFx1ZDYxNVx1YzgxY1x1Yjk3YyBcdWI5Y2NcdWI0ZWRcdWIyYzhcdWIyZTQuCisKK19VSV9Qcm9wZXJ0eURlc2NyaXB0b3JfZGVzY3JpcHRpb249ezF9IFx1YzkxMSB7MH0KKworX1VJX0V4cGVyaW1lbnRhbERpc2Vhc2VNb2RlbF90eXBlPVx1YzJlNFx1ZDVkOCBcdWM5YzhcdWJjZDEgXHViYWE4XHViMzc4CitfVUlfVW5rbm93bl90eXBlPVx1YWMxY1x1Y2NiNAorCitfVUlfVW5rbm93bl9kYXRhdHlwZT1cdWFjMTIKKworX1VJX1Vua25vd25fZmVhdHVyZT1cdWM5YzBcdWM4MTVcdWI0MThcdWM5YzAgXHVjNTRhXHVjNzRjCisKK19VSV9FeGFtcGxlRGlzZWFzZU1vZGVsX3R5cGU9XHVjOWM4XHViY2QxIFx1YmFhOFx1YjM3OAorX1VJX0V4YW1wbGVFZGl0b3JfbWVudT0mRXhhbXBsZSBFZGl0b3IKKworX1VJX0NyZWF0ZUNoaWxkX21lbnVfaXRlbT0mTmV3IENoaWxkCitfVUlfQ3JlYXRlU2libGluZ19tZW51X2l0ZW09TiYgIFx1ZDYxNVx1YzgxYyBcdWM3OTBcdWI5ZTQKKworX1VJX1Nob3dQcm9wZXJ0aWVzVmlld19tZW51X2l0ZW09XHVkNDVjXHVjMmRjIFx1YmMwZiBcdWMxOGRcdWMxMzFcdWJjZjRcdWFlMzAKK19VSV9SZWZyZXNoVmlld2VyX21lbnVfaXRlbT0mUmVmcmVzaAorCitfVUlfU2VsZWN0aW9uUGFnZV9sYWJlbD1cdWMxMjBcdWQwZGQKK19VSV9QYXJlbnRQYWdlX2xhYmVsPVx1YmQ4MFx1YmFhOAorX1VJX0xpc3RQYWdlX2xhYmVsPVx1YmFhOVx1Yjg1ZAorX1VJX1RyZWVQYWdlX2xhYmVsPVx1YjA5OFx1YmIzNAorX1VJX1RhYmxlUGFnZV9sYWJlbD1cdWQxNGNcdWM3NzRcdWJlMTQKK19VSV9UcmVlV2l0aENvbHVtbnNQYWdlX2xhYmVsPVx1YjA5OFx1YmIzNFx1YzY0MCBcdWM1ZjQKK19VSV9PYmplY3RDb2x1bW5fbGFiZWw9XHVhYzFjXHVjY2I0CitfVUlfU2VsZkNvbHVtbl9sYWJlbD1cdWMxNDBcdWQ1MDQKKworX1VJX05vT2JqZWN0U2VsZWN0ZWQ9XHVjNTQ0XHViYjM0XHVhYzgzXHViM2M0IFx1YzU0OCBcdWMxMjBcdWQwZGRcdWQ1NjgKK19VSV9TaW5nbGVPYmplY3RTZWxlY3RlZD1cdWMxMjBcdWQwZGRcdWQ1NWMgXHVhYzFkXHVjY2I0IDogezB9CitfVUlfTXVsdGlPYmplY3RTZWxlY3RlZD1cdWMxMjBcdWQwZGRcdWI0MWMgezB9IFx1YWMxZFx1Y2NiNAorCitfVUlfT3BlbkVkaXRvckVycm9yX2xhYmVsPVx1YzYyNFx1ZDUwOCBcdWM1ZDBcdWI1MTRcdWQxMzAKKworX1VJX1dpemFyZF9jYXRlZ29yeT1cdWM2MDhcdWM4MWMgRU1GIFx1YmFhOFx1YjM3OCBcdWMwZGRcdWMxMzEgXHViOWM4XHViYzk1XHVjMGFjCisKK19VSV9DcmVhdGVNb2RlbEVycm9yX21lc3NhZ2U9XHVkMzBjXHVjNzdjICd7MH0gIlx1YzVkMFx1YzExYyBcdWJiMzhcdWM4MWMgXHViYzFjXHVjMGRkCisKK19VSV9FeGFtcGxlTW9kZWxXaXphcmRfbGFiZWw9XHVjNjA4XHVjODFjIFx1YmFhOFx1YjM3OAorX1VJX0V4YW1wbGVNb2RlbFdpemFyZF9kZXNjcmlwdGlvbj1cdWMwYzhcdWI4NWNcdWM2YjQgXHVjNjA4XHVjODFjIFx1YmFhOFx1YjM3OCBcdWI5Y2NcdWI0ZTRcdWFlMzAKKworX1VJX0V4YW1wbGVFZGl0b3JfbGFiZWw9XHVjNjA4XHVjODFjIFx1YmFhOFx1YjM3OCBcdWQzYjhcdWM5ZDFcdWFlMzAKKworX1VJX0V4YW1wbGVFZGl0b3JGaWxlbmFtZURlZmF1bHRCYXNlPVx1YjA5OFx1Yzc1OAorX1VJX0V4YW1wbGVFZGl0b3JGaWxlbmFtZUV4dGVuc2lvbj1cdWM2MDgKKworX1VJX1dpemFyZF9sYWJlbD1cdWMwYzhcdWI4NWNcdWM2YjQKKworX1dBUk5fRmlsZW5hbWVFeHRlbnNpb249XHVkMzBjXHVjNzdjIFx1Yzc3NFx1Yjk4NFx1Yzc0MCAiLnswfSJcdWI4NWMgXHViMDVkXHViMDk4XHVjNTdjXHVkNTY4LiAKKworX1VJX01vZGVsT2JqZWN0PSZNb2RlbCBPYmplY3QKK19VSV9YTUxFbmNvZGluZz0mWE1MIEVuY29kaW5nCitfVUlfWE1MRW5jb2RpbmdDaG9pY2VzPVVURiAtIDggQVNDSUkgVVRGIC0gMTYgVVRGIC0gMTZCRSBVVEYgLSAxNkxFIElTTyAtIDg4NTkgLSAxCitfVUlfV2l6YXJkX2luaXRpYWxfb2JqZWN0X2Rlc2NyaXB0aW9uPVx1YzBkZFx1YzEzMVx1ZDU2MCBcdWJhYThcdWIzNzggXHVhYzFjXHVjY2I0IFx1YzEyMFx1ZDBkZAorCitfVUlfRmlsZUNvbmZsaWN0X2xhYmVsPVx1ZDMwY1x1Yzc3YyBcdWNkYTlcdWIzY2MKK19XQVJOX0ZpbGVDb25mbGljdD1cdWM4MDBcdWM3YTVcdWI0MThcdWM5YzAgXHVjNTRhXHVjNzQwIFx1YzBhY1x1ZDU2ZFx1YjRlNFx1Yzc3NCBcdWQzYjhcdWM5ZDFcdWFlMzAgXHVjNjc4XHViZDgwXHVjNzU4IFx1YmNjMFx1YWNiZCBcdWMwYWNcdWQ1NmRcdWI0ZTRcdWFjZmMgXHVjZGE5XHViM2NjXHVkNTY4LiBcdWM3NzQgXHVkM2I4XHVjOWQxXHVhZTMwXHVjNzU4IFx1YmNjMFx1YWNiZCBcdWMwYWNcdWQ1NmRcdWI0ZTRcdWM3NDQgXHVjZGU4XHVjMThjIFx1ZDU1OFx1YzJkY1x1YWNhMFx1YzJiNVx1YjJjOFx1YWU0Yz8KKworX1VJX0V4YW1wbGVEaXNlYXNlTW9kZWxfc2Vhc29uYWxNb2R1bGF0aW9uX2ZlYXR1cmU9XHVhY2M0XHVjODA4IFx1YmNjMFx1Yzg3MAorX1VJX0V4YW1wbGVEaXNlYXNlTW9kZWxfbW9kdWxhdGlvblBlcmlvZF9mZWF0dXJlPVx1YmNjMFx1Yzg3MCBcdWFlMzBcdWFjMDQKK19VSV9FeGFtcGxlRGlzZWFzZU1vZGVsX21vZHVsYXRpb25QaGFzZVNoaWZfZmVhdHVyZT1cdWJjYzBcdWM4NzAgXHViMmU4XHVhY2M0IFx1YzgwNFx1Yzc3NAorX1VJX0V4YW1wbGVFZGl0b3JGaWxlbmFtZUV4dGVuc2lvbnM9XHVjNjA4CisKK19XQVJOX0ZpbGVuYW1lRXh0ZW5zaW9ucz1cdWQzMGNcdWM3N2MgXHVjNzc0XHViOTg0XHVjNzQwIFx1YjJlNFx1Yzc0YyBcdWQ2NTVcdWM3YTVcdWM3OTAgXHVjOTExIFx1ZDU1OFx1YjA5OFx1Yjk3YyBcdWFjMDBcdWM4MzhcdWM1N2NcdWQ1NjggOiB7MH0KKworX1VJX0V4YW1wbGVEaXNlYXNlTW9kZWxfbW9kdWxhdGlvblBoYXNlU2hpZnRfZmVhdHVyZT1cdWJjYzBcdWM4NzAgXHViMmU4XHVhY2M0IFx1YzgwNFx1Yzc3NAorX1VJX0V4YW1wbGVEaXNlYXNlTW9kZWxfc2Vhc29uYWxNb2R1bGF0aW9uVGhyZXNob2xkX2ZlYXR1cmU9XHVhY2M0XHVjODA4IFx1YmNjMFx1Yzg3MCBcdWM3ODRcdWFjYzRcdWFjMTIKK19VSV9FeGFtcGxlRGlzZWFzZU1vZGVsX3NlYXNvbmFsTW9kdWxhdGlvbkV4cG9uZW50X2ZlYXR1cmU9XHVhY2M0XHVjODA4IFx1YmNjMFx1Yzg3MCBcdWM5YzBcdWMyMTgKK19VSV9FeGFtcGxlRGlzZWFzZU1vZGVsX3NlYXNvbmFsTW9kdWxhdGlvbkZsb29yX2ZlYXR1cmU9XHVhY2M0XHVjODA4IFx1YmNjMFx1Yzg3MCBcdWNkNWNcdWM4MDBcdWFjMTIKK19VSV9Gb3JjaW5nRGlzZWFzZU1vZGVsX3R5cGU9XHVjOWM4XHViY2QxIFx1YmFhOFx1YjM3OAorX1VJX0ZvcmNpbmdEaXNlYXNlTW9kZWxfc2Vhc29uYWxNb2R1bGF0aW9uRXhwb25lbnRfZmVhdHVyZT1cdWFjYzRcdWM4MDggXHViY2MwXHVjODcwIFx1YzljMFx1YzIxOAorX1VJX0ZvcmNpbmdEaXNlYXNlTW9kZWxfbW9kdWxhdGlvblBlcmlvZF9mZWF0dXJlPVx1YmNjMFx1Yzg3MCBcdWFlMzBcdWFjMDQKK19VSV9Gb3JjaW5nRGlzZWFzZU1vZGVsX21vZHVsYXRpb25QaGFzZVNoaWZ0X2ZlYXR1cmU9XHViY2MwXHVjODcwIFx1YjJlOFx1YWNjNCBcdWM4MDRcdWM3NzQKK19VSV9Gb3JjaW5nRGlzZWFzZU1vZGVsX3NlYXNvbmFsTW9kdWxhdGlvbkZsb29yX2ZlYXR1cmU9XHVhY2M0XHVjODA4IFx1YmNjMFx1Yzg3MCBcdWNkNWNcdWM4MDBcdWFjMTIKK19VSV9Gb3JjaW5nRGlzZWFzZU1vZGVsX2F0dGVudWF0aW9uX2ZlYXR1cmU9XHVhYzEwXHVjMWUwCitfVUlfR2F1c3NpYW5Gb3JjaW5nRGlzZWFzZU1vZGVsX3R5cGU9XHVhYzAwXHVjNmIwXHVjMmE0IFx1YWMxNVx1YzgxYyBcdWM5YzhcdWJjZDEgXHViYWE4XHViMzc4CitfVUlfR2F1c3NpYW5Gb3JjaW5nRGlzZWFzZU1vZGVsX3NpZ21hMl9mZWF0dXJlPVNpZ21hMgorX1VJX0dhdXNzaWFuRm9yY2luZ0Rpc2Vhc2VNb2RlbF9tdV9mZWF0dXJlPU11CitfVUlfR2F1c3NpYW5Gb3JjaW5nRGlzZWFzZU1vZGVsX21vZHVsYXRpb25QZXJpb2RfZmVhdHVyZT1cdWJjYzBcdWM4NzAgXHVhZTMwXHVhYzA0CitfVUlfR2F1c3NpYW5Gb3JjaW5nRGlzZWFzZU1vZGVsX21vZHVsYXRpb25QaGFzZVNoaWZ0X2ZlYXR1cmU9XHViY2MwXHVjODcwIFx1YjJlOFx1YWNjNCBcdWM4MDRcdWM3NzQKK19VSV9HYXVzc2lhbkZvcmNpbmdEaXNlYXNlTW9kZWxfbW9kdWxhdGlvbkZsb29yX2ZlYXR1cmU9XHViY2MwXHVjODcwIFx1Y2UzNQorX1VJX0dhdXNzaWFuMkZvcmNpbmdEaXNlYXNlTW9kZWxfdHlwZT1cdWFjMDBcdWM2YjBcdWMyYTQyIFx1YWMxNVx1YzgxYyBcdWM5YzhcdWJjZDEgXHViYWE4XHViMzc4CitfVUlfR2F1c3NpYW4yRm9yY2luZ0Rpc2Vhc2VNb2RlbF9zaWdtYTJfMl9mZWF0dXJlPVNpZ21hMiAyCitfVUlfR2F1c3NpYW4yRm9yY2luZ0Rpc2Vhc2VNb2RlbF9zaWdtYTJfZmVhdHVyZT1TaWdtYTIKK19VSV9HYXVzc2lhbjJGb3JjaW5nRGlzZWFzZU1vZGVsX21vZHVsYXRpb25QZXJpb2RfZmVhdHVyZT1cdWJjYzBcdWM4NzAgXHVhZTMwXHVhYzA0CitfVUlfR2F1c3NpYW4yRm9yY2luZ0Rpc2Vhc2VNb2RlbF9tb2R1bGF0aW9uUGhhc2VTaGlmdF9mZWF0dXJlPVx1YmNjMFx1Yzg3MCBcdWIyZThcdWFjYzQgXHVjODA0XHVjNzc0CitfVUlfR2F1c3NpYW4yRm9yY2luZ0Rpc2Vhc2VNb2RlbF9tb2R1bGF0aW9uRmxvb3JfZmVhdHVyZT1cdWJjYzBcdWM4NzAgXHVjZTM1CitfVUlfR2F1c3NpYW4yRm9yY2luZ0Rpc2Vhc2VNb2RlbF9hdHQxX2ZlYXR1cmU9QXR0MQorX1VJX0dhdXNzaWFuMkZvcmNpbmdEaXNlYXNlTW9kZWxfYXR0Ml9mZWF0dXJlPUF0dDIKK19VSV9HYXVzc2lhbjJGb3JjaW5nRGlzZWFzZU1vZGVsX2F0dDNfZmVhdHVyZT1BdHQzCitfVUlfR2F1c3NpYW4yRm9yY2luZ0Rpc2Vhc2VNb2RlbF9hdHQ0X2ZlYXR1cmU9QXR0NAorX1VJX0dhdXNzaWFuM0ZvcmNpbmdEaXNlYXNlTW9kZWxfdHlwZT1cdWFjMDBcdWM2YjBcdWMyYTQzIFx1YWMxNVx1YzgxYyBcdWM5YzhcdWJjZDEgXHViYWE4XHViMzc4CitfVUlfR2F1c3NpYW4zRm9yY2luZ0Rpc2Vhc2VNb2RlbF9zaWdtYTJfM19mZWF0dXJlPVNpZ21hMiAzCitfVUlfR2F1c3NpYW4zRm9yY2luZ0Rpc2Vhc2VNb2RlbF90cmFuc21pc3Npb25SYXRlMl9mZWF0dXJlPVx1YzgwNFx1YzFhMSBSYXRlMgorX1VJX0dhdXNzaWFuM0ZvcmNpbmdEaXNlYXNlTW9kZWxfdHJhbnNtaXNzaW9uUmF0ZTNfZmVhdHVyZT1cdWM4MDRcdWMxYTEgUmF0ZTMKK19VSV9HYXVzc2lhbjNGb3JjaW5nRGlzZWFzZU1vZGVsX21vZHVsYXRpb25GbG9vcl8yX2ZlYXR1cmU9XHViY2MwXHVjODcwIFx1Y2UzNSAyCitfVUlfRm9yY2luZ0Rpc2Vhc2VNb2RlbF9tb2R1bGF0aW9uRXhwb25lbnRfZmVhdHVyZT1Nb2R1bGF0aW9uIEV4cG9uZW50CitfVUlfRm9yY2luZ0Rpc2Vhc2VNb2RlbF9tb2R1bGF0aW9uRmxvb3JfZmVhdHVyZT1cdWJjYzBcdWM4NzAgXHVjZTM1CmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5mb3JjaW5nL3BsdWdpbl96aC5wcm9wZXJ0aWVzIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZm9yY2luZy9wbHVnaW5femgucHJvcGVydGllcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYzRjYmRmCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZm9yY2luZy9wbHVnaW5femgucHJvcGVydGllcwpAQCAtMCwwICsxLDE0MyBAQAorIy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjICogQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorIyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyMgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyMgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorIyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisjICoKKyMgKiBDb250cmlidXRvcnM6CisjICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorIyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisjIFRvIGNvZGUgZGV2ZWxvcGVyOgorIyAgIERvIE5PVCBjaGFuZ2UgdGhlIHByb3BlcnRpZXMgYmV0d2VlbiB0aGlzIGxpbmUgYW5kIHRoZQorIyAgICIlJSUgRU5EIE9GIFRSQU5TTEFURUQgUFJPUEVSVElFUyAlJSUiIGxpbmUuCisjICAgTWFrZSBhIG5ldyBwcm9wZXJ0eSBuYW1lLCBhcHBlbmQgdG8gdGhlIGVuZCBvZiB0aGUgZmlsZSBhbmQgY2hhbmdlCisjICAgdGhlIGNvZGUgdG8gdXNlIHRoZSBuZXcgcHJvcGVydHkuCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyMgJSUlIEVORCBPRiBUUkFOU0xBVEVEIFBST1BFUlRJRVMgJSUlCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK3BsdWdpbk5hbWU9U1RFTVx1NWYzYVx1NTIzNlx1NzViZVx1NzVjNVx1NmEyMVx1NTc4YgorcHJvdmlkZXJOYW1lPUVjbGlwc2Uub3JnCisKKyMgRHVibGluIENvcmUKK2RjX2NyZWF0b3JfZWRsdW5kPUVkbHVuZAorZGNfaWRlbnRpZXI9U1RFTVx1NzViZVx1NzVjNVx1NTZkZVx1NjUzZVx1NmEyMVx1NTc4YgorZGNfcHVibGlzaGVyPUVjbGlwc2VcdTU3ZmFcdTkxZDFcdTRmMWEKK2RjX2xpY2Vuc2U9RWNsaXBzZVx1NTE2Y1x1NTE3MVx1OGJiOFx1NTNlZlx1ZmYwOEVQTFx1ZmYwOQorZGNfdGl0bGVfRm9yY2luZ19TX1NFSVI9XHU1YjYzXHU4MjgyXHU2MDI3XHU3NWJlXHU3NWM1CitkY190aXRsZV9Gb3JjaW5nX0dfU19TRUlSPVx1OWFkOFx1NjVhZlx1NWI2M1x1ODI4Mlx1NjAyN1x1NzViZVx1NzVjNQorZGNfdGl0bGVfRm9yY2luZ19BR19TX1NFSVI9XHU1YjYzXHU4MjgyXHU2MDI3XHU1OTA3XHU3NTI4XHU3Njg0XHU5YWQ4XHU2NWFmXHU3NWJlXHU3NWM1CitkY19kZXNjX0ZvcmNpbmdfU19TRUlSPVx1NWI2M1x1ODI4Mlx1NjAyN1x1NWYzYVx1NTIzNlx1NzViZVx1NzVjNVx1NmEyMVx1NTc4YgorZGNfZGVzY19Gb3JjaW5nX0dfU19TRUlSPVx1NjcwOVx1OWFkOFx1NjVhZlx1NWYzYVx1NTIzNlx1NzY4NFx1NWI2M1x1ODI4Mlx1NjAyN1x1NzViZVx1NzVjNVx1NmEyMVx1NTc4YgorZGNfZGVzY19Gb3JjaW5nX0FHX1NfU0VJUj1cdTY3MDlcdTU5MDdcdTc1MjhcdTc2ODRcdTlhZDhcdTY1YWZcdTVmM2FcdTUyMzZcdTc2ODRcdTViNjNcdTgyODJcdTYwMjdcdTc1YmVcdTc1YzVcdTZhMjFcdTU3OGIKKworZGNfdGl0bGVfRV9TX1NFSVI9XHU1YjYzXHU4MjgyXHU2MDI3XHU1ZjNhXHU1MjM2U0lSXHU3NWJlXHU3NWM1XHU2YTIxXHU1NzhiCitkY19TT1VSQ0U9aHR0cDovL3dpa2kuZWNsaXBzZS5vcmcvSW50cm9kdWN0aW9uX3RvX0NvbXBhcnRtZW50X01vZGVsc1x1ZmYwOFx1NTQ4Y1x1NTNjMlx1ODAwM1x1OGQ0NFx1NjU5OVx1NGUyZFx1ZmYwOQorCitfVUlfQ3JlYXRlQ2hpbGRfdGV4dD17MH0KK19VSV9DcmVhdGVDaGlsZF90ZXh0Mj17MX0gezB9CitfVUlfQ3JlYXRlQ2hpbGRfdGV4dDM9ezF9CitfVUlfQ3JlYXRlQ2hpbGRfdG9vbHRpcD1cdTUyMWJcdTVlZmFcdTU3Mjh7MX0gezB9XHU2NWIwXHU1MjlmXHU4MGZkCitfVUlfQ3JlYXRlQ2hpbGRfZGVzY3JpcHRpb249XHU0ZTNhXHU5MDA5XHU1YjlhXHU3Njg0ezJ9XHU3Njg0ezF9XHU3Mjc5XHU2MDI3XHU2NzY1XHU1MjFiXHU1ZWZhXHU0ZTAwXHU0ZTJhXHU2NWIwXHU3Njg0ezB9XHU1YjUwXHU3YzdiCitfVUlfQ3JlYXRlU2libGluZ19kZXNjcmlwdGlvbj1cdTU3Mjh7MX1cdTc2ODRcdTcyMzZcdTk2YzZcdTRlMmRcdTRlM2FcdTkwMDlcdTViOWFcdTc2ODR7Mn1cdTY3NjVcdTUyMWJcdTVlZmFcdTRlMDBcdTRlMmF7MH1cdTdjN2JcdTU3OGJcdTc2ODRcdTY1YjBcdTc2ODRcdTUxNDRcdTVmMWZcdTdjN2IKKworX1VJX1Byb3BlcnR5RGVzY3JpcHRvcl9kZXNjcmlwdGlvbj17MH1cdTRlY2VcdTVjNWV7MX0KKworX1VJX0V4cGVyaW1lbnRhbERpc2Vhc2VNb2RlbF90eXBlPVx1NWI5ZVx1OWE4Y1x1NzViZVx1NzVjNVx1NmEyMVx1NTc4YgorX1VJX1Vua25vd25fdHlwZT1cdTViZjlcdThjNjEKKworX1VJX1Vua25vd25fZGF0YXR5cGU9XHU0ZWY3XHU1MDNjCisKK19VSV9Vbmtub3duX2ZlYXR1cmU9XHU2NzJhXHU2MzA3XHU1YjlhCisKK19VSV9FeGFtcGxlRGlzZWFzZU1vZGVsX3R5cGU9XHU3NWJlXHU3NWM1XHU2YTIxXHU1NzhiCitfVUlfRXhhbXBsZUVkaXRvcl9tZW51PSZFeGFtcGxlIEVkaXRvcgorCitfVUlfQ3JlYXRlQ2hpbGRfbWVudV9pdGVtPSZOZXcgQ2hpbGQKK19VSV9DcmVhdGVTaWJsaW5nX21lbnVfaXRlbT1cdTY1YjBcdTc1MWZcdTYyMTBcdTRlMDBcdTRlMmFcdTUxNDRcdTVmMWZcdTdjN2IKKworX1VJX1Nob3dQcm9wZXJ0aWVzVmlld19tZW51X2l0ZW09XHU2NjNlXHU3OTNhXHU1NDhjXHU1YzVlXHU2MDI3XHU2N2U1XHU3NzBiCitfVUlfUmVmcmVzaFZpZXdlcl9tZW51X2l0ZW09JlJlZnJlc2gKKworX1VJX1NlbGVjdGlvblBhZ2VfbGFiZWw9XHU5MDA5XHU2MmU5CitfVUlfUGFyZW50UGFnZV9sYWJlbD1cdTViYjZcdTk1N2YKK19VSV9MaXN0UGFnZV9sYWJlbD1cdTc2ZWVcdTVmNTUKK19VSV9UcmVlUGFnZV9sYWJlbD1cdTY4MTEKK19VSV9UYWJsZVBhZ2VfbGFiZWw9XHU4ODY4CitfVUlfVHJlZVdpdGhDb2x1bW5zUGFnZV9sYWJlbD1cdTUyMDZcdTUyMTdcdTc2ODRcdTY4MTEKK19VSV9PYmplY3RDb2x1bW5fbGFiZWw9XHU1YmY5XHU4YzYxCitfVUlfU2VsZkNvbHVtbl9sYWJlbD1cdTgxZWFcdTVkZjEKKworX1VJX05vT2JqZWN0U2VsZWN0ZWQ9XHU2NWUwXHU5MDA5XHU1YjlhXHU1MTg1XHU1YmI5CitfVUlfU2luZ2xlT2JqZWN0U2VsZWN0ZWQ9XHU5MDA5XHU2MmU5XHU1YmY5XHU4YzYxXHVmZjFhezB9CitfVUlfTXVsdGlPYmplY3RTZWxlY3RlZD1cdTkwMDlcdTYyZTl7MH1cdTViZjlcdThjNjEKKworX1VJX09wZW5FZGl0b3JFcnJvcl9sYWJlbD1cdTYyNTNcdTVmMDBcdTdmMTZcdThmOTFcdTU2NjgKKworX1VJX1dpemFyZF9jYXRlZ29yeT1cdTRmOGJcdTU5ODJFTUZcdTZhMjFcdTU3OGJcdTUyMWJcdTVlZmFcdTU0MTFcdTViZmMKKworX1VJX0NyZWF0ZU1vZGVsRXJyb3JfbWVzc2FnZT1cdTU3MjhcdTY1ODdcdTRlZjZcdTIwMWN7MH1cdTIwMWRcdTRlMmRcdTkwNDdcdTUyMzBcdTc2ODRcdTk1ZWVcdTk4OTgKKworX1VJX0V4YW1wbGVNb2RlbFdpemFyZF9sYWJlbD1cdTc5M2FcdTRmOGJcdTZhMjFcdTU3OGIKK19VSV9FeGFtcGxlTW9kZWxXaXphcmRfZGVzY3JpcHRpb249XHU1MjFiXHU1ZWZhXHU0ZTAwXHU0ZTJhXHU2NWIwXHU3Njg0XHU3OTNhXHU0ZjhiXHU2YTIxXHU1NzhiCisKK19VSV9FeGFtcGxlRWRpdG9yX2xhYmVsPVx1NmEyMVx1NTc4Ylx1N2YxNlx1OGY5MVx1NTY2OFx1NzkzYVx1NGY4YgorCitfVUlfRXhhbXBsZUVkaXRvckZpbGVuYW1lRGVmYXVsdEJhc2U9XHU2MjExXHU3Njg0CitfVUlfRXhhbXBsZUVkaXRvckZpbGVuYW1lRXh0ZW5zaW9uPVx1NGY4Ylx1NTk4MgorCitfVUlfV2l6YXJkX2xhYmVsPVx1NjViMFx1NWVmYQorCitfV0FSTl9GaWxlbmFtZUV4dGVuc2lvbj1cdTY1ODdcdTRlZjZcdTU0MGRcdTVmYzVcdTk4N2JcdTRlZTUnezB9ICcnXHU3ZWQzXHU1YzNlCisKK19VSV9Nb2RlbE9iamVjdD0mTW9kZWwgT2JqZWN0CitfVUlfWE1MRW5jb2Rpbmc9JlhNTCBFbmNvZGluZworX1VJX1hNTEVuY29kaW5nQ2hvaWNlcz1VVEYtOCBBU0NJSSBVVEYtMTYgVVRGLTE2QkUgVVRGLTE2TEUgSVNPLTg4NTktMQorX1VJX1dpemFyZF9pbml0aWFsX29iamVjdF9kZXNjcmlwdGlvbj1cdTkwMDlcdTYyZTlcdTUyMWJcdTVlZmFcdTRlMDBcdTRlMmFcdTZhMjFcdTU3OGJcdTViZjlcdThjNjEKKworX1VJX0ZpbGVDb25mbGljdF9sYWJlbD1cdTY1ODdcdTRlZjZcdTUxYjJcdTdhODEKK19XQVJOX0ZpbGVDb25mbGljdD1cdTY3MDlcdTY3MmFcdTRmZGRcdTViNThcdTc2ODRcdTY2ZjRcdTY1MzlcdTRlMGVcdTdmMTZcdThmOTFcdTU2NjhcdTU5MTZcdTc2ODRcdTY2ZjRcdTY1MzlcdTUxYjJcdTdhODFcdTMwMDJcdTRmNjBcdTYwZjNcdTY1M2VcdTVmMDNcdThmZDlcdTRlMmFcdTdmMTZcdThmOTFcdTU2NjhcdTc2ODRcdTY2ZjRcdTY1MzlcdTU0MTdcdWZmMWYKKworX1VJX0V4YW1wbGVEaXNlYXNlTW9kZWxfc2Vhc29uYWxNb2R1bGF0aW9uX2ZlYXR1cmU9XHU1YjYzXHU4MjgyXHU2MDI3XHU4YzAzXHU1MjM2CitfVUlfRXhhbXBsZURpc2Vhc2VNb2RlbF9tb2R1bGF0aW9uUGVyaW9kX2ZlYXR1cmU9XHU4YzAzXHU1MjM2XHU1NDY4XHU2NzFmCitfVUlfRXhhbXBsZURpc2Vhc2VNb2RlbF9tb2R1bGF0aW9uUGhhc2VTaGlmX2ZlYXR1cmU9XHU4YzAzXHU1MjM2XHU3NmY4XHU3OWZiCitfVUlfRXhhbXBsZUVkaXRvckZpbGVuYW1lRXh0ZW5zaW9ucz1cdTRmOGJcdTU5ODIKKworX1dBUk5fRmlsZW5hbWVFeHRlbnNpb25zPVx1NjU4N1x1NGVmNlx1NTQwZFx1NWZjNVx1OTg3Ylx1NTE3N1x1NjcwOVx1NGVlNVx1NGUwYlx1NjI2OVx1NWM1NVx1NTQwZFx1NGU0Ylx1NGUwMFx1ZmYxYXswfQorCitfVUlfRXhhbXBsZURpc2Vhc2VNb2RlbF9tb2R1bGF0aW9uUGhhc2VTaGlmdF9mZWF0dXJlPVx1OGMwM1x1NTIzNlx1NzZmOFx1NzlmYgorX1VJX0V4YW1wbGVEaXNlYXNlTW9kZWxfc2Vhc29uYWxNb2R1bGF0aW9uVGhyZXNob2xkX2ZlYXR1cmU9XHU1YjYzXHU4MjgyXHU2MDI3XHU4YzAzXHU1MjM2XHU5NjA4XHU1MDNjCitfVUlfRXhhbXBsZURpc2Vhc2VNb2RlbF9zZWFzb25hbE1vZHVsYXRpb25FeHBvbmVudF9mZWF0dXJlPVx1NWI2M1x1ODI4Mlx1NjAyN1x1OGMwM1x1NTIzNlx1NjMwN1x1NjU3MAorX1VJX0V4YW1wbGVEaXNlYXNlTW9kZWxfc2Vhc29uYWxNb2R1bGF0aW9uRmxvb3JfZmVhdHVyZT1cdTViNjNcdTgyODJcdTYwMjdcdThjMDNcdTUyMzZcdTVlOTVcdTVjNDIKK19VSV9Gb3JjaW5nRGlzZWFzZU1vZGVsX3R5cGU9XHU3NWJlXHU3NWM1XHU2YTIxXHU1NzhiCitfVUlfRm9yY2luZ0Rpc2Vhc2VNb2RlbF9zZWFzb25hbE1vZHVsYXRpb25FeHBvbmVudF9mZWF0dXJlPVx1NWI2M1x1ODI4Mlx1NjAyN1x1OGMwM1x1NTIzNlx1NjMwN1x1NjU3MAorX1VJX0ZvcmNpbmdEaXNlYXNlTW9kZWxfbW9kdWxhdGlvblBlcmlvZF9mZWF0dXJlPVx1OGMwM1x1NTIzNlx1NTQ2OFx1NjcxZgorX1VJX0ZvcmNpbmdEaXNlYXNlTW9kZWxfbW9kdWxhdGlvblBoYXNlU2hpZnRfZmVhdHVyZT1cdThjMDNcdTUyMzZcdTc2ZjhcdTc5ZmIKK19VSV9Gb3JjaW5nRGlzZWFzZU1vZGVsX3NlYXNvbmFsTW9kdWxhdGlvbkZsb29yX2ZlYXR1cmU9XHU1YjYzXHU4MjgyXHU2MDI3XHU4YzAzXHU1MjM2XHU1ZTk1XHU1YzQyCitfVUlfRm9yY2luZ0Rpc2Vhc2VNb2RlbF9hdHRlbnVhdGlvbl9mZWF0dXJlPVx1ODg3MFx1NTFjZgorX1VJX0dhdXNzaWFuRm9yY2luZ0Rpc2Vhc2VNb2RlbF90eXBlPVx1OWFkOFx1NjVhZlx1NWYzYVx1NTIzNlx1NzViZVx1NzVjNVx1NmEyMVx1NTc4YgorX1VJX0dhdXNzaWFuRm9yY2luZ0Rpc2Vhc2VNb2RlbF9zaWdtYTJfZmVhdHVyZT1TaWdtYTIKK19VSV9HYXVzc2lhbkZvcmNpbmdEaXNlYXNlTW9kZWxfbXVfZmVhdHVyZT0mTXU7CitfVUlfR2F1c3NpYW5Gb3JjaW5nRGlzZWFzZU1vZGVsX21vZHVsYXRpb25QZXJpb2RfZmVhdHVyZT1cdThjMDNcdTUyMzZcdTU0NjhcdTY3MWYKK19VSV9HYXVzc2lhbkZvcmNpbmdEaXNlYXNlTW9kZWxfbW9kdWxhdGlvblBoYXNlU2hpZnRfZmVhdHVyZT1cdThjMDNcdTUyMzZcdTc2ZjhcdTc5ZmIKK19VSV9HYXVzc2lhbkZvcmNpbmdEaXNlYXNlTW9kZWxfbW9kdWxhdGlvbkZsb29yX2ZlYXR1cmU9XHU4YzAzXHU1MjM2XHU1YzQyCitfVUlfR2F1c3NpYW4yRm9yY2luZ0Rpc2Vhc2VNb2RlbF90eXBlPVx1OWFkOFx1NjVhZjJcdTVmM2FcdTUyMzZcdTc1YmVcdTc1YzVcdTZhMjFcdTU3OGIKK19VSV9HYXVzc2lhbjJGb3JjaW5nRGlzZWFzZU1vZGVsX3NpZ21hMl8yX2ZlYXR1cmU9U2lnbWEyIDIKK19VSV9HYXVzc2lhbjJGb3JjaW5nRGlzZWFzZU1vZGVsX3NpZ21hMl9mZWF0dXJlPVNpZ21hMgorX1VJX0dhdXNzaWFuMkZvcmNpbmdEaXNlYXNlTW9kZWxfbW9kdWxhdGlvblBlcmlvZF9mZWF0dXJlPVx1OGMwM1x1NTIzNlx1NTQ2OFx1NjcxZgorX1VJX0dhdXNzaWFuMkZvcmNpbmdEaXNlYXNlTW9kZWxfbW9kdWxhdGlvblBoYXNlU2hpZnRfZmVhdHVyZT1cdThjMDNcdTUyMzZcdTc2ZjhcdTc5ZmIKK19VSV9HYXVzc2lhbjJGb3JjaW5nRGlzZWFzZU1vZGVsX21vZHVsYXRpb25GbG9vcl9mZWF0dXJlPVx1OGMwM1x1NTIzNlx1NWM0MgorX1VJX0dhdXNzaWFuMkZvcmNpbmdEaXNlYXNlTW9kZWxfYXR0MV9mZWF0dXJlPVx1NzI3OVx1NWY4MTEKK19VSV9HYXVzc2lhbjJGb3JjaW5nRGlzZWFzZU1vZGVsX2F0dDJfZmVhdHVyZT1cdTcyNzlcdTVmODEyCitfVUlfR2F1c3NpYW4yRm9yY2luZ0Rpc2Vhc2VNb2RlbF9hdHQzX2ZlYXR1cmU9XHU3Mjc5XHU1ZjgxMworX1VJX0dhdXNzaWFuMkZvcmNpbmdEaXNlYXNlTW9kZWxfYXR0NF9mZWF0dXJlPVx1NzI3OVx1NWY4MTQKK19VSV9HYXVzc2lhbjNGb3JjaW5nRGlzZWFzZU1vZGVsX3R5cGU9XHU5YWQ4XHU2NWFmM1x1NWYzYVx1NTIzNlx1NzViZVx1NzVjNVx1NmEyMVx1NTc4YgorX1VJX0dhdXNzaWFuM0ZvcmNpbmdEaXNlYXNlTW9kZWxfc2lnbWEyXzNfZmVhdHVyZT1TaWdtYTIgMworX1VJX0dhdXNzaWFuM0ZvcmNpbmdEaXNlYXNlTW9kZWxfdHJhbnNtaXNzaW9uUmF0ZTJfZmVhdHVyZT1cdTRmMjBcdThmOTNcdTczODcyCitfVUlfR2F1c3NpYW4zRm9yY2luZ0Rpc2Vhc2VNb2RlbF90cmFuc21pc3Npb25SYXRlM19mZWF0dXJlPVx1NGYyMFx1OGY5M1x1NzM4NzMKK19VSV9HYXVzc2lhbjNGb3JjaW5nRGlzZWFzZU1vZGVsX21vZHVsYXRpb25GbG9vcl8yX2ZlYXR1cmU9XHU4YzAzXHU1MjM2XHU1YzQyMgpkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZm9yY2luZy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL2ZvcmNpbmcvRm9yY2luZ0Rpc2Vhc2VNb2RlbC5qYXZhIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZm9yY2luZy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL2ZvcmNpbmcvRm9yY2luZ0Rpc2Vhc2VNb2RlbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU4OTZiZmEKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5mb3JjaW5nL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvZm9yY2luZy9Gb3JjaW5nRGlzZWFzZU1vZGVsLmphdmEKQEAgLTAsMCArMSwxMDggQEAKKy8vIEV4YW1wbGVEaXNlYXNlTW9kZWwuamF2YQorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZm9yY2luZzsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RvY2hhc3RpY1NJUkRpc2Vhc2VNb2RlbDsKKworLyoqCisgKiBUaGlzIGludGVyZmFjZSBpcyBhbiBFTUYgTW9kZWwuCisgKiAKKyAqIEBtb2RlbAorICovCitwdWJsaWMgaW50ZXJmYWNlIEZvcmNpbmdEaXNlYXNlTW9kZWwgZXh0ZW5kcyBTdG9jaGFzdGljU0lSRGlzZWFzZU1vZGVsIHsKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5Nb2R1bGF0aW9uIEV4cG9uZW50PC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogVGhlIGRlZmF1bHQgdmFsdWUgaXMgPGNvZGU+IjIuMCI8L2NvZGU+LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPHA+CisJICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+TW9kdWxhdGlvbiBFeHBvbmVudDwvZW0+JyBhdHRyaWJ1dGUgaXNuJ3QgY2xlYXIsCisJICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLgorCSAqIDwvcD4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5Nb2R1bGF0aW9uIEV4cG9uZW50PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiBAc2VlICNzZXRNb2R1bGF0aW9uRXhwb25lbnQoZG91YmxlKQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmZvcmNpbmcuRm9yY2luZ1BhY2thZ2UjZ2V0Rm9yY2luZ0Rpc2Vhc2VNb2RlbF9Nb2R1bGF0aW9uRXhwb25lbnQoKQorCSAqIEBtb2RlbCBkZWZhdWx0PSIyLjAiCisJICogQGdlbmVyYXRlZAorCSAqLworCWRvdWJsZSBnZXRNb2R1bGF0aW9uRXhwb25lbnQoKTsKKworCS8qKgorCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5mb3JjaW5nLkZvcmNpbmdEaXNlYXNlTW9kZWwjZ2V0TW9kdWxhdGlvbkV4cG9uZW50IDxlbT5Nb2R1bGF0aW9uIEV4cG9uZW50PC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5Nb2R1bGF0aW9uIEV4cG9uZW50PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiBAc2VlICNnZXRNb2R1bGF0aW9uRXhwb25lbnQoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwl2b2lkIHNldE1vZHVsYXRpb25FeHBvbmVudChkb3VibGUgdmFsdWUpOworCisJLyoqCisJICogQHJldHVybiB0aGUgZGVmYXVsdCBtb2R1bGF0aW9uIHBlcmlvZCBpcyAxIHllYXIuIFRoaXMgZGVmYXVsdCB2YWx1ZSBhc3N1bWVzIHRpbWUgc3RlcHMgaW4gZGF5cy4gTm90ZSB0aGF0IG9uZSB5ZWFyID0gMzY1LjI1NjM2MzA1MSBkYXlzIAorCSAqIEBtb2RlbCBkZWZhdWx0PSIzNjUuMjU2MzYzMDUxIgorCSAqLworCWRvdWJsZSBnZXRNb2R1bGF0aW9uUGVyaW9kKCk7CisJCisJLyoqCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmZvcmNpbmcuRm9yY2luZ0Rpc2Vhc2VNb2RlbCNnZXRNb2R1bGF0aW9uUGVyaW9kIDxlbT5Nb2R1bGF0aW9uIFBlcmlvZDwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+TW9kdWxhdGlvbiBQZXJpb2Q8L2VtPicgYXR0cmlidXRlLgorCSAqIEBzZWUgI2dldE1vZHVsYXRpb25QZXJpb2QoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwl2b2lkIHNldE1vZHVsYXRpb25QZXJpb2QoZG91YmxlIHZhbHVlKTsKKworCS8qKgorCSAqIEByZXR1cm4gdGhlIG1vZHVsYXRpb24gcGhhc2Ugc2hpZnQgc2hpZnQuIAorCSAqIEBtb2RlbCBkZWZhdWx0PSIwLjAiCisJICovCisJZG91YmxlIGdldE1vZHVsYXRpb25QaGFzZVNoaWZ0KCk7CisKKwkvKioKKwkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZm9yY2luZy5Gb3JjaW5nRGlzZWFzZU1vZGVsI2dldE1vZHVsYXRpb25QaGFzZVNoaWZ0IDxlbT5Nb2R1bGF0aW9uIFBoYXNlIFNoaWZ0PC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5Nb2R1bGF0aW9uIFBoYXNlIFNoaWZ0PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiBAc2VlICNnZXRNb2R1bGF0aW9uUGhhc2VTaGlmdCgpCisJICogQGdlbmVyYXRlZAorCSAqLworCXZvaWQgc2V0TW9kdWxhdGlvblBoYXNlU2hpZnQoZG91YmxlIHZhbHVlKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPk1vZHVsYXRpb24gRmxvb3I8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyA8Y29kZT4iMC42IjwvY29kZT4uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8cD4KKwkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5Nb2R1bGF0aW9uIEZsb29yPC9lbT4nIGF0dHJpYnV0ZSBpc24ndCBjbGVhciwKKwkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uCisJICogPC9wPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPk1vZHVsYXRpb24gRmxvb3I8L2VtPicgYXR0cmlidXRlLgorCSAqIEBzZWUgI3NldE1vZHVsYXRpb25GbG9vcihkb3VibGUpCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZm9yY2luZy5Gb3JjaW5nUGFja2FnZSNnZXRGb3JjaW5nRGlzZWFzZU1vZGVsX01vZHVsYXRpb25GbG9vcigpCisJICogQG1vZGVsIGRlZmF1bHQ9IjAuNiIKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJZG91YmxlIGdldE1vZHVsYXRpb25GbG9vcigpOworCisJLyoqCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmZvcmNpbmcuRm9yY2luZ0Rpc2Vhc2VNb2RlbCNnZXRNb2R1bGF0aW9uRmxvb3IgPGVtPk1vZHVsYXRpb24gRmxvb3I8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPk1vZHVsYXRpb24gRmxvb3I8L2VtPicgYXR0cmlidXRlLgorCSAqIEBzZWUgI2dldE1vZHVsYXRpb25GbG9vcigpCisJICogQGdlbmVyYXRlZAorCSAqLworCXZvaWQgc2V0TW9kdWxhdGlvbkZsb29yKGRvdWJsZSB2YWx1ZSk7Cit9IC8vIEV4YW1wbGVEaXNlYXNlTW9kZWwKZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmZvcmNpbmcvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9mb3JjaW5nL0ZvcmNpbmdGYWN0b3J5LmphdmEgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5mb3JjaW5nL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvZm9yY2luZy9Gb3JjaW5nRmFjdG9yeS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcxMzEyMDAKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5mb3JjaW5nL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvZm9yY2luZy9Gb3JjaW5nRmFjdG9yeS5qYXZhCkBAIC0wLDAgKzEsNzggQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmZvcmNpbmc7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVGYWN0b3J5OworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiBUaGUgPGI+RmFjdG9yeTwvYj4gZm9yIHRoZSBtb2RlbC4KKyAqIEl0IHByb3ZpZGVzIGEgY3JlYXRlIG1ldGhvZCBmb3IgZWFjaCBub24tYWJzdHJhY3QgY2xhc3Mgb2YgdGhlIG1vZGVsLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5mb3JjaW5nLkZvcmNpbmdQYWNrYWdlCisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBpbnRlcmZhY2UgRm9yY2luZ0ZhY3RvcnkgZXh0ZW5kcyBFRmFjdG9yeSB7CisJLyoqCisJICogVGhlIHNpbmdsZXRvbiBpbnN0YW5jZSBvZiB0aGUgZmFjdG9yeS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlGb3JjaW5nRmFjdG9yeSBlSU5TVEFOQ0UgPSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZm9yY2luZy5pbXBsLkZvcmNpbmdGYWN0b3J5SW1wbC5pbml0KCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPkRpc2Vhc2UgTW9kZWw8L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPkRpc2Vhc2UgTW9kZWw8L2VtPicuCisJICogQGdlbmVyYXRlZAorCSAqLworCUZvcmNpbmdEaXNlYXNlTW9kZWwgY3JlYXRlRm9yY2luZ0Rpc2Vhc2VNb2RlbCgpOworCisJLyoqCisJICogUmV0dXJucyBhIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5HYXVzc2lhbiBGb3JjaW5nIERpc2Vhc2UgTW9kZWw8L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPkdhdXNzaWFuIEZvcmNpbmcgRGlzZWFzZSBNb2RlbDwvZW0+Jy4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJR2F1c3NpYW5Gb3JjaW5nRGlzZWFzZU1vZGVsIGNyZWF0ZUdhdXNzaWFuRm9yY2luZ0Rpc2Vhc2VNb2RlbCgpOworCisJLyoqCisJICogUmV0dXJucyBhIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5HYXVzc2lhbjIgRm9yY2luZyBEaXNlYXNlIE1vZGVsPC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiBhIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5HYXVzc2lhbjIgRm9yY2luZyBEaXNlYXNlIE1vZGVsPC9lbT4nLgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlHYXVzc2lhbjJGb3JjaW5nRGlzZWFzZU1vZGVsIGNyZWF0ZUdhdXNzaWFuMkZvcmNpbmdEaXNlYXNlTW9kZWwoKTsKKworCS8qKgorCSAqIFJldHVybnMgYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+R2F1c3NpYW4zIEZvcmNpbmcgRGlzZWFzZSBNb2RlbDwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+R2F1c3NpYW4zIEZvcmNpbmcgRGlzZWFzZSBNb2RlbDwvZW0+Jy4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJR2F1c3NpYW4zRm9yY2luZ0Rpc2Vhc2VNb2RlbCBjcmVhdGVHYXVzc2lhbjNGb3JjaW5nRGlzZWFzZU1vZGVsKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBwYWNrYWdlIHN1cHBvcnRlZCBieSB0aGlzIGZhY3RvcnkuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBwYWNrYWdlIHN1cHBvcnRlZCBieSB0aGlzIGZhY3RvcnkuCisJICogQGdlbmVyYXRlZAorCSAqLworCUZvcmNpbmdQYWNrYWdlIGdldEZvcmNpbmdQYWNrYWdlKCk7CisKK30gLy9FeGFtcGxlRmFjdG9yeQpkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZm9yY2luZy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL2ZvcmNpbmcvRm9yY2luZ1BhY2thZ2UuamF2YSBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmZvcmNpbmcvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9mb3JjaW5nL0ZvcmNpbmdQYWNrYWdlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTAwZDYyMAotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmZvcmNpbmcvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9mb3JjaW5nL0ZvcmNpbmdQYWNrYWdlLmphdmEKQEAgLTAsMCArMSwxNjkwIEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5mb3JjaW5nOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA3LCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQXR0cmlidXRlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZFBhY2thZ2U7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIFRoZSA8Yj5QYWNrYWdlPC9iPiBmb3IgdGhlIG1vZGVsLgorICogSXQgY29udGFpbnMgYWNjZXNzb3JzIGZvciB0aGUgbWV0YSBvYmplY3RzIHRvIHJlcHJlc2VudAorICogPHVsPgorICogICA8bGk+ZWFjaCBjbGFzcyw8L2xpPgorICogICA8bGk+ZWFjaCBmZWF0dXJlIG9mIGVhY2ggY2xhc3MsPC9saT4KKyAqICAgPGxpPmVhY2ggZW51bSw8L2xpPgorICogICA8bGk+YW5kIGVhY2ggZGF0YSB0eXBlPC9saT4KKyAqIDwvdWw+CisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmZvcmNpbmcuRm9yY2luZ0ZhY3RvcnkKKyAqIEBtb2RlbCBraW5kPSJwYWNrYWdlIgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgaW50ZXJmYWNlIEZvcmNpbmdQYWNrYWdlIGV4dGVuZHMgRVBhY2thZ2UgeworCS8qKgorCSAqIFRoZSBwYWNrYWdlIG5hbWUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJU3RyaW5nIGVOQU1FID0gImZvcmNpbmciOworCisJLyoqCisJICogVGhlIHBhY2thZ2UgbmFtZXNwYWNlIFVSSS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlTdHJpbmcgZU5TX1VSSSA9ICJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9mb3JjaW5nLmVjb3JlIjsKKworCS8qKgorCSAqIFRoZSBwYWNrYWdlIG5hbWVzcGFjZSBuYW1lLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCVN0cmluZyBlTlNfUFJFRklYID0gIm9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5mb3JjaW5nIjsKKworCS8qKgorCSAqIFRoZSBzaW5nbGV0b24gaW5zdGFuY2Ugb2YgdGhlIHBhY2thZ2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRm9yY2luZ1BhY2thZ2UgZUlOU1RBTkNFID0gb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmZvcmNpbmcuaW1wbC5Gb3JjaW5nUGFja2FnZUltcGwuaW5pdCgpOworCisJLyoqCisJICogVGhlIG1ldGEgb2JqZWN0IGlkIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZm9yY2luZy5pbXBsLkZvcmNpbmdEaXNlYXNlTW9kZWxJbXBsIDxlbT5EaXNlYXNlIE1vZGVsPC9lbT59JyBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmZvcmNpbmcuaW1wbC5Gb3JjaW5nRGlzZWFzZU1vZGVsSW1wbAorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmZvcmNpbmcuaW1wbC5Gb3JjaW5nUGFja2FnZUltcGwjZ2V0Rm9yY2luZ0Rpc2Vhc2VNb2RlbCgpCisJICogQGdlbmVyYXRlZAorCSAqLworCWludCBGT1JDSU5HX0RJU0VBU0VfTU9ERUwgPSAwOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlVSSTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IEZPUkNJTkdfRElTRUFTRV9NT0RFTF9fVVJJID0gU3RhbmRhcmRQYWNrYWdlLlNUT0NIQVNUSUNfU0lSX0RJU0VBU0VfTU9ERUxfX1VSSTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5UeXBlIFVSSTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IEZPUkNJTkdfRElTRUFTRV9NT0RFTF9fVFlQRV9VUkkgPSBTdGFuZGFyZFBhY2thZ2UuU1RPQ0hBU1RJQ19TSVJfRElTRUFTRV9NT0RFTF9fVFlQRV9VUkk7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RHVibGluIENvcmU8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBGT1JDSU5HX0RJU0VBU0VfTU9ERUxfX0RVQkxJTl9DT1JFID0gU3RhbmRhcmRQYWNrYWdlLlNUT0NIQVNUSUNfU0lSX0RJU0VBU0VfTU9ERUxfX0RVQkxJTl9DT1JFOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkxhYmVscyBUbyBVcGRhdGU8L2I+PC9lbT4nIHJlZmVyZW5jZSBsaXN0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IEZPUkNJTkdfRElTRUFTRV9NT0RFTF9fTEFCRUxTX1RPX1VQREFURSA9IFN0YW5kYXJkUGFja2FnZS5TVE9DSEFTVElDX1NJUl9ESVNFQVNFX01PREVMX19MQUJFTFNfVE9fVVBEQVRFOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkdyYXBoPC9iPjwvZW0+JyBjb250YWluZXIgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IEZPUkNJTkdfRElTRUFTRV9NT0RFTF9fR1JBUEggPSBTdGFuZGFyZFBhY2thZ2UuU1RPQ0hBU1RJQ19TSVJfRElTRUFTRV9NT0RFTF9fR1JBUEg7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RW5hYmxlZDwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IEZPUkNJTkdfRElTRUFTRV9NT0RFTF9fRU5BQkxFRCA9IFN0YW5kYXJkUGFja2FnZS5TVE9DSEFTVElDX1NJUl9ESVNFQVNFX01PREVMX19FTkFCTEVEOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkdyYXBoIERlY29yYXRlZDwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IEZPUkNJTkdfRElTRUFTRV9NT0RFTF9fR1JBUEhfREVDT1JBVEVEID0gU3RhbmRhcmRQYWNrYWdlLlNUT0NIQVNUSUNfU0lSX0RJU0VBU0VfTU9ERUxfX0dSQVBIX0RFQ09SQVRFRDsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5Qcm9ncmVzczwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IEZPUkNJTkdfRElTRUFTRV9NT0RFTF9fUFJPR1JFU1MgPSBTdGFuZGFyZFBhY2thZ2UuU1RPQ0hBU1RJQ19TSVJfRElTRUFTRV9NT0RFTF9fUFJPR1JFU1M7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+UG9wdWxhdGlvbiBJZGVudGlmaWVyPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgRk9SQ0lOR19ESVNFQVNFX01PREVMX19QT1BVTEFUSU9OX0lERU5USUZJRVIgPSBTdGFuZGFyZFBhY2thZ2UuU1RPQ0hBU1RJQ19TSVJfRElTRUFTRV9NT0RFTF9fUE9QVUxBVElPTl9JREVOVElGSUVSOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlRpbWUgUGVyaW9kPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgRk9SQ0lOR19ESVNFQVNFX01PREVMX19USU1FX1BFUklPRCA9IFN0YW5kYXJkUGFja2FnZS5TVE9DSEFTVElDX1NJUl9ESVNFQVNFX01PREVMX19USU1FX1BFUklPRDsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5EaXNlYXNlIE5hbWU8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBGT1JDSU5HX0RJU0VBU0VfTU9ERUxfX0RJU0VBU0VfTkFNRSA9IFN0YW5kYXJkUGFja2FnZS5TVE9DSEFTVElDX1NJUl9ESVNFQVNFX01PREVMX19ESVNFQVNFX05BTUU7CisKKwkKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RmluaXRlIERpZmZlcmVuY2U8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBGT1JDSU5HX0RJU0VBU0VfTU9ERUxfX0ZJTklURV9ESUZGRVJFTkNFID0gU3RhbmRhcmRQYWNrYWdlLlNUT0NIQVNUSUNfU0lSX0RJU0VBU0VfTU9ERUxfX0ZJTklURV9ESUZGRVJFTkNFOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkZyZXF1ZW5jeSBEZXBlbmRlbnQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBGT1JDSU5HX0RJU0VBU0VfTU9ERUxfX0ZSRVFVRU5DWV9ERVBFTkRFTlQgPSBTdGFuZGFyZFBhY2thZ2UuU1RPQ0hBU1RJQ19TSVJfRElTRUFTRV9NT0RFTF9fRlJFUVVFTkNZX0RFUEVOREVOVDsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5SZWZlcmVuY2UgUG9wdWxhdGlvbiBEZW5zaXR5PC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgRk9SQ0lOR19ESVNFQVNFX01PREVMX19SRUZFUkVOQ0VfUE9QVUxBVElPTl9ERU5TSVRZID0gU3RhbmRhcmRQYWNrYWdlLlNUT0NIQVNUSUNfU0lSX0RJU0VBU0VfTU9ERUxfX1JFRkVSRU5DRV9QT1BVTEFUSU9OX0RFTlNJVFk7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+Um9hZCBOZXR3b3JrIEluZmVjdGlvdXMgUHJvcG9ydGlvbjwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IEZPUkNJTkdfRElTRUFTRV9NT0RFTF9fUk9BRF9ORVRXT1JLX0lORkVDVElPVVNfUFJPUE9SVElPTiA9IFN0YW5kYXJkUGFja2FnZS5TVE9DSEFTVElDX1NJUl9ESVNFQVNFX01PREVMX19ST0FEX05FVFdPUktfSU5GRUNUSU9VU19QUk9QT1JUSU9OOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkNoYXJhY3RlcmlzdGljIE1peGluZyBEaXN0YW5jZTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IEZPUkNJTkdfRElTRUFTRV9NT0RFTF9fQ0hBUkFDVEVSSVNUSUNfTUlYSU5HX0RJU1RBTkNFID0gU3RhbmRhcmRQYWNrYWdlLlNUT0NIQVNUSUNfU0lSX0RJU0VBU0VfTU9ERUxfX0NIQVJBQ1RFUklTVElDX01JWElOR19ESVNUQU5DRTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5UcmFuc21pc3Npb24gUmF0ZTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IEZPUkNJTkdfRElTRUFTRV9NT0RFTF9fVFJBTlNNSVNTSU9OX1JBVEUgPSBTdGFuZGFyZFBhY2thZ2UuU1RPQ0hBU1RJQ19TSVJfRElTRUFTRV9NT0RFTF9fVFJBTlNNSVNTSU9OX1JBVEU7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+Tm9uIExpbmVhcml0eSBDb2VmZmljaWVudDwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IEZPUkNJTkdfRElTRUFTRV9NT0RFTF9fTk9OX0xJTkVBUklUWV9DT0VGRklDSUVOVCA9IFN0YW5kYXJkUGFja2FnZS5TVE9DSEFTVElDX1NJUl9ESVNFQVNFX01PREVMX19OT05fTElORUFSSVRZX0NPRUZGSUNJRU5UOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlJlY292ZXJ5IFJhdGU8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBGT1JDSU5HX0RJU0VBU0VfTU9ERUxfX1JFQ09WRVJZX1JBVEUgPSBTdGFuZGFyZFBhY2thZ2UuU1RPQ0hBU1RJQ19TSVJfRElTRUFTRV9NT0RFTF9fUkVDT1ZFUllfUkFURTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5JbmZlY3Rpb3VzIE1vcnRhbGl0eSBSYXRlPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgRk9SQ0lOR19ESVNFQVNFX01PREVMX19JTkZFQ1RJT1VTX01PUlRBTElUWV9SQVRFID0gU3RhbmRhcmRQYWNrYWdlLlNUT0NIQVNUSUNfU0lSX0RJU0VBU0VfTU9ERUxfX0lORkVDVElPVVNfTU9SVEFMSVRZX1JBVEU7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+SW1tdW5pdHkgTG9zcyBSYXRlPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgRk9SQ0lOR19ESVNFQVNFX01PREVMX19JTU1VTklUWV9MT1NTX1JBVEUgPSBTdGFuZGFyZFBhY2thZ2UuU1RPQ0hBU1RJQ19TSVJfRElTRUFTRV9NT0RFTF9fSU1NVU5JVFlfTE9TU19SQVRFOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlNlZWQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBGT1JDSU5HX0RJU0VBU0VfTU9ERUxfX1NFRUQgPSBTdGFuZGFyZFBhY2thZ2UuU1RPQ0hBU1RJQ19TSVJfRElTRUFTRV9NT0RFTF9fU0VFRDsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5SYW5kb20gR2VuZXJhdG9yPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgRk9SQ0lOR19ESVNFQVNFX01PREVMX19SQU5ET01fR0VORVJBVE9SID0gU3RhbmRhcmRQYWNrYWdlLlNUT0NIQVNUSUNfU0lSX0RJU0VBU0VfTU9ERUxfX1JBTkRPTV9HRU5FUkFUT1I7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+R2FpbjwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IEZPUkNJTkdfRElTRUFTRV9NT0RFTF9fR0FJTiA9IFN0YW5kYXJkUGFja2FnZS5TVE9DSEFTVElDX1NJUl9ESVNFQVNFX01PREVMX19HQUlOOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPk1vZHVsYXRpb24gRXhwb25lbnQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBGT1JDSU5HX0RJU0VBU0VfTU9ERUxfX01PRFVMQVRJT05fRVhQT05FTlQgPSBTdGFuZGFyZFBhY2thZ2UuU1RPQ0hBU1RJQ19TSVJfRElTRUFTRV9NT0RFTF9GRUFUVVJFX0NPVU5UICsgMDsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5Nb2R1bGF0aW9uIFBlcmlvZDwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IEZPUkNJTkdfRElTRUFTRV9NT0RFTF9fTU9EVUxBVElPTl9QRVJJT0QgPSBTdGFuZGFyZFBhY2thZ2UuU1RPQ0hBU1RJQ19TSVJfRElTRUFTRV9NT0RFTF9GRUFUVVJFX0NPVU5UICsgMTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5Nb2R1bGF0aW9uIFBoYXNlIFNoaWZ0PC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgRk9SQ0lOR19ESVNFQVNFX01PREVMX19NT0RVTEFUSU9OX1BIQVNFX1NISUZUID0gU3RhbmRhcmRQYWNrYWdlLlNUT0NIQVNUSUNfU0lSX0RJU0VBU0VfTU9ERUxfRkVBVFVSRV9DT1VOVCArIDI7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+TW9kdWxhdGlvbiBGbG9vcjwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IEZPUkNJTkdfRElTRUFTRV9NT0RFTF9fTU9EVUxBVElPTl9GTE9PUiA9IFN0YW5kYXJkUGFja2FnZS5TVE9DSEFTVElDX1NJUl9ESVNFQVNFX01PREVMX0ZFQVRVUkVfQ09VTlQgKyAzOworCisJLyoqCisJICogVGhlIG51bWJlciBvZiBzdHJ1Y3R1cmFsIGZlYXR1cmVzIG9mIHRoZSAnPGVtPkRpc2Vhc2UgTW9kZWw8L2VtPicgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgRk9SQ0lOR19ESVNFQVNFX01PREVMX0ZFQVRVUkVfQ09VTlQgPSBTdGFuZGFyZFBhY2thZ2UuU1RPQ0hBU1RJQ19TSVJfRElTRUFTRV9NT0RFTF9GRUFUVVJFX0NPVU5UICsgNDsKKworCisJLyoqCisJICogVGhlIG1ldGEgb2JqZWN0IGlkIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZm9yY2luZy5pbXBsLkdhdXNzaWFuRm9yY2luZ0Rpc2Vhc2VNb2RlbEltcGwgPGVtPkdhdXNzaWFuIEZvcmNpbmcgRGlzZWFzZSBNb2RlbDwvZW0+fScgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5mb3JjaW5nLmltcGwuR2F1c3NpYW5Gb3JjaW5nRGlzZWFzZU1vZGVsSW1wbAorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmZvcmNpbmcuaW1wbC5Gb3JjaW5nUGFja2FnZUltcGwjZ2V0R2F1c3NpYW5Gb3JjaW5nRGlzZWFzZU1vZGVsKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJaW50IEdBVVNTSUFOX0ZPUkNJTkdfRElTRUFTRV9NT0RFTCA9IDE7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VVJJPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgR0FVU1NJQU5fRk9SQ0lOR19ESVNFQVNFX01PREVMX19VUkkgPSBTdGFuZGFyZFBhY2thZ2UuU1RPQ0hBU1RJQ19TSVJfRElTRUFTRV9NT0RFTF9fVVJJOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlR5cGUgVVJJPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgR0FVU1NJQU5fRk9SQ0lOR19ESVNFQVNFX01PREVMX19UWVBFX1VSSSA9IFN0YW5kYXJkUGFja2FnZS5TVE9DSEFTVElDX1NJUl9ESVNFQVNFX01PREVMX19UWVBFX1VSSTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5EdWJsaW4gQ29yZTwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IEdBVVNTSUFOX0ZPUkNJTkdfRElTRUFTRV9NT0RFTF9fRFVCTElOX0NPUkUgPSBTdGFuZGFyZFBhY2thZ2UuU1RPQ0hBU1RJQ19TSVJfRElTRUFTRV9NT0RFTF9fRFVCTElOX0NPUkU7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+TGFiZWxzIFRvIFVwZGF0ZTwvYj48L2VtPicgcmVmZXJlbmNlIGxpc3QuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgR0FVU1NJQU5fRk9SQ0lOR19ESVNFQVNFX01PREVMX19MQUJFTFNfVE9fVVBEQVRFID0gU3RhbmRhcmRQYWNrYWdlLlNUT0NIQVNUSUNfU0lSX0RJU0VBU0VfTU9ERUxfX0xBQkVMU19UT19VUERBVEU7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+R3JhcGg8L2I+PC9lbT4nIGNvbnRhaW5lciByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgR0FVU1NJQU5fRk9SQ0lOR19ESVNFQVNFX01PREVMX19HUkFQSCA9IFN0YW5kYXJkUGFja2FnZS5TVE9DSEFTVElDX1NJUl9ESVNFQVNFX01PREVMX19HUkFQSDsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5FbmFibGVkPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgR0FVU1NJQU5fRk9SQ0lOR19ESVNFQVNFX01PREVMX19FTkFCTEVEID0gU3RhbmRhcmRQYWNrYWdlLlNUT0NIQVNUSUNfU0lSX0RJU0VBU0VfTU9ERUxfX0VOQUJMRUQ7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+R3JhcGggRGVjb3JhdGVkPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgR0FVU1NJQU5fRk9SQ0lOR19ESVNFQVNFX01PREVMX19HUkFQSF9ERUNPUkFURUQgPSBTdGFuZGFyZFBhY2thZ2UuU1RPQ0hBU1RJQ19TSVJfRElTRUFTRV9NT0RFTF9fR1JBUEhfREVDT1JBVEVEOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlByb2dyZXNzPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgR0FVU1NJQU5fRk9SQ0lOR19ESVNFQVNFX01PREVMX19QUk9HUkVTUyA9IFN0YW5kYXJkUGFja2FnZS5TVE9DSEFTVElDX1NJUl9ESVNFQVNFX01PREVMX19QUk9HUkVTUzsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5Qb3B1bGF0aW9uIElkZW50aWZpZXI8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBHQVVTU0lBTl9GT1JDSU5HX0RJU0VBU0VfTU9ERUxfX1BPUFVMQVRJT05fSURFTlRJRklFUiA9IFN0YW5kYXJkUGFja2FnZS5TVE9DSEFTVElDX1NJUl9ESVNFQVNFX01PREVMX19QT1BVTEFUSU9OX0lERU5USUZJRVI7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VGltZSBQZXJpb2Q8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBHQVVTU0lBTl9GT1JDSU5HX0RJU0VBU0VfTU9ERUxfX1RJTUVfUEVSSU9EID0gU3RhbmRhcmRQYWNrYWdlLlNUT0NIQVNUSUNfU0lSX0RJU0VBU0VfTU9ERUxfX1RJTUVfUEVSSU9EOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkRpc2Vhc2UgTmFtZTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IEdBVVNTSUFOX0ZPUkNJTkdfRElTRUFTRV9NT0RFTF9fRElTRUFTRV9OQU1FID0gU3RhbmRhcmRQYWNrYWdlLlNUT0NIQVNUSUNfU0lSX0RJU0VBU0VfTU9ERUxfX0RJU0VBU0VfTkFNRTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5GaW5pdGUgRGlmZmVyZW5jZTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IEdBVVNTSUFOX0ZPUkNJTkdfRElTRUFTRV9NT0RFTF9fRklOSVRFX0RJRkZFUkVOQ0UgPSBTdGFuZGFyZFBhY2thZ2UuU1RPQ0hBU1RJQ19TSVJfRElTRUFTRV9NT0RFTF9fRklOSVRFX0RJRkZFUkVOQ0U7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RnJlcXVlbmN5IERlcGVuZGVudDwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IEdBVVNTSUFOX0ZPUkNJTkdfRElTRUFTRV9NT0RFTF9fRlJFUVVFTkNZX0RFUEVOREVOVCA9IFN0YW5kYXJkUGFja2FnZS5TVE9DSEFTVElDX1NJUl9ESVNFQVNFX01PREVMX19GUkVRVUVOQ1lfREVQRU5ERU5UOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlJlZmVyZW5jZSBQb3B1bGF0aW9uIERlbnNpdHk8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBHQVVTU0lBTl9GT1JDSU5HX0RJU0VBU0VfTU9ERUxfX1JFRkVSRU5DRV9QT1BVTEFUSU9OX0RFTlNJVFkgPSBTdGFuZGFyZFBhY2thZ2UuU1RPQ0hBU1RJQ19TSVJfRElTRUFTRV9NT0RFTF9fUkVGRVJFTkNFX1BPUFVMQVRJT05fREVOU0lUWTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5Sb2FkIE5ldHdvcmsgSW5mZWN0aW91cyBQcm9wb3J0aW9uPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgR0FVU1NJQU5fRk9SQ0lOR19ESVNFQVNFX01PREVMX19ST0FEX05FVFdPUktfSU5GRUNUSU9VU19QUk9QT1JUSU9OID0gU3RhbmRhcmRQYWNrYWdlLlNUT0NIQVNUSUNfU0lSX0RJU0VBU0VfTU9ERUxfX1JPQURfTkVUV09SS19JTkZFQ1RJT1VTX1BST1BPUlRJT047CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+Q2hhcmFjdGVyaXN0aWMgTWl4aW5nIERpc3RhbmNlPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgR0FVU1NJQU5fRk9SQ0lOR19ESVNFQVNFX01PREVMX19DSEFSQUNURVJJU1RJQ19NSVhJTkdfRElTVEFOQ0UgPSBTdGFuZGFyZFBhY2thZ2UuU1RPQ0hBU1RJQ19TSVJfRElTRUFTRV9NT0RFTF9fQ0hBUkFDVEVSSVNUSUNfTUlYSU5HX0RJU1RBTkNFOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlRyYW5zbWlzc2lvbiBSYXRlPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgR0FVU1NJQU5fRk9SQ0lOR19ESVNFQVNFX01PREVMX19UUkFOU01JU1NJT05fUkFURSA9IFN0YW5kYXJkUGFja2FnZS5TVE9DSEFTVElDX1NJUl9ESVNFQVNFX01PREVMX19UUkFOU01JU1NJT05fUkFURTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5Ob24gTGluZWFyaXR5IENvZWZmaWNpZW50PC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgR0FVU1NJQU5fRk9SQ0lOR19ESVNFQVNFX01PREVMX19OT05fTElORUFSSVRZX0NPRUZGSUNJRU5UID0gU3RhbmRhcmRQYWNrYWdlLlNUT0NIQVNUSUNfU0lSX0RJU0VBU0VfTU9ERUxfX05PTl9MSU5FQVJJVFlfQ09FRkZJQ0lFTlQ7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+UmVjb3ZlcnkgUmF0ZTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IEdBVVNTSUFOX0ZPUkNJTkdfRElTRUFTRV9NT0RFTF9fUkVDT1ZFUllfUkFURSA9IFN0YW5kYXJkUGFja2FnZS5TVE9DSEFTVElDX1NJUl9ESVNFQVNFX01PREVMX19SRUNPVkVSWV9SQVRFOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkluZmVjdGlvdXMgTW9ydGFsaXR5IFJhdGU8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBHQVVTU0lBTl9GT1JDSU5HX0RJU0VBU0VfTU9ERUxfX0lORkVDVElPVVNfTU9SVEFMSVRZX1JBVEUgPSBTdGFuZGFyZFBhY2thZ2UuU1RPQ0hBU1RJQ19TSVJfRElTRUFTRV9NT0RFTF9fSU5GRUNUSU9VU19NT1JUQUxJVFlfUkFURTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5JbW11bml0eSBMb3NzIFJhdGU8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBHQVVTU0lBTl9GT1JDSU5HX0RJU0VBU0VfTU9ERUxfX0lNTVVOSVRZX0xPU1NfUkFURSA9IFN0YW5kYXJkUGFja2FnZS5TVE9DSEFTVElDX1NJUl9ESVNFQVNFX01PREVMX19JTU1VTklUWV9MT1NTX1JBVEU7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+U2VlZDwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IEdBVVNTSUFOX0ZPUkNJTkdfRElTRUFTRV9NT0RFTF9fU0VFRCA9IFN0YW5kYXJkUGFja2FnZS5TVE9DSEFTVElDX1NJUl9ESVNFQVNFX01PREVMX19TRUVEOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlJhbmRvbSBHZW5lcmF0b3I8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBHQVVTU0lBTl9GT1JDSU5HX0RJU0VBU0VfTU9ERUxfX1JBTkRPTV9HRU5FUkFUT1IgPSBTdGFuZGFyZFBhY2thZ2UuU1RPQ0hBU1RJQ19TSVJfRElTRUFTRV9NT0RFTF9fUkFORE9NX0dFTkVSQVRPUjsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5HYWluPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgR0FVU1NJQU5fRk9SQ0lOR19ESVNFQVNFX01PREVMX19HQUlOID0gU3RhbmRhcmRQYWNrYWdlLlNUT0NIQVNUSUNfU0lSX0RJU0VBU0VfTU9ERUxfX0dBSU47CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+U2lnbWEyPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgR0FVU1NJQU5fRk9SQ0lOR19ESVNFQVNFX01PREVMX19TSUdNQTIgPSBTdGFuZGFyZFBhY2thZ2UuU1RPQ0hBU1RJQ19TSVJfRElTRUFTRV9NT0RFTF9GRUFUVVJFX0NPVU5UICsgMDsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5Nb2R1bGF0aW9uIFBlcmlvZDwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IEdBVVNTSUFOX0ZPUkNJTkdfRElTRUFTRV9NT0RFTF9fTU9EVUxBVElPTl9QRVJJT0QgPSBTdGFuZGFyZFBhY2thZ2UuU1RPQ0hBU1RJQ19TSVJfRElTRUFTRV9NT0RFTF9GRUFUVVJFX0NPVU5UICsgMTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5Nb2R1bGF0aW9uIFBoYXNlIFNoaWZ0PC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgR0FVU1NJQU5fRk9SQ0lOR19ESVNFQVNFX01PREVMX19NT0RVTEFUSU9OX1BIQVNFX1NISUZUID0gU3RhbmRhcmRQYWNrYWdlLlNUT0NIQVNUSUNfU0lSX0RJU0VBU0VfTU9ERUxfRkVBVFVSRV9DT1VOVCArIDI7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+TW9kdWxhdGlvbiBGbG9vcjwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IEdBVVNTSUFOX0ZPUkNJTkdfRElTRUFTRV9NT0RFTF9fTU9EVUxBVElPTl9GTE9PUiA9IFN0YW5kYXJkUGFja2FnZS5TVE9DSEFTVElDX1NJUl9ESVNFQVNFX01PREVMX0ZFQVRVUkVfQ09VTlQgKyAzOworCisJLyoqCisJICogVGhlIG51bWJlciBvZiBzdHJ1Y3R1cmFsIGZlYXR1cmVzIG9mIHRoZSAnPGVtPkdhdXNzaWFuIEZvcmNpbmcgRGlzZWFzZSBNb2RlbDwvZW0+JyBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBHQVVTU0lBTl9GT1JDSU5HX0RJU0VBU0VfTU9ERUxfRkVBVFVSRV9DT1VOVCA9IFN0YW5kYXJkUGFja2FnZS5TVE9DSEFTVElDX1NJUl9ESVNFQVNFX01PREVMX0ZFQVRVUkVfQ09VTlQgKyA0OworCisKKwkvKioKKwkgKiBUaGUgbWV0YSBvYmplY3QgaWQgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5mb3JjaW5nLmltcGwuR2F1c3NpYW4yRm9yY2luZ0Rpc2Vhc2VNb2RlbEltcGwgPGVtPkdhdXNzaWFuMiBGb3JjaW5nIERpc2Vhc2UgTW9kZWw8L2VtPn0nIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZm9yY2luZy5pbXBsLkdhdXNzaWFuMkZvcmNpbmdEaXNlYXNlTW9kZWxJbXBsCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZm9yY2luZy5pbXBsLkZvcmNpbmdQYWNrYWdlSW1wbCNnZXRHYXVzc2lhbjJGb3JjaW5nRGlzZWFzZU1vZGVsKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJaW50IEdBVVNTSUFOMl9GT1JDSU5HX0RJU0VBU0VfTU9ERUwgPSAyOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlVSSTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IEdBVVNTSUFOMl9GT1JDSU5HX0RJU0VBU0VfTU9ERUxfX1VSSSA9IEdBVVNTSUFOX0ZPUkNJTkdfRElTRUFTRV9NT0RFTF9fVVJJOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlR5cGUgVVJJPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgR0FVU1NJQU4yX0ZPUkNJTkdfRElTRUFTRV9NT0RFTF9fVFlQRV9VUkkgPSBHQVVTU0lBTl9GT1JDSU5HX0RJU0VBU0VfTU9ERUxfX1RZUEVfVVJJOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkR1YmxpbiBDb3JlPC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgR0FVU1NJQU4yX0ZPUkNJTkdfRElTRUFTRV9NT0RFTF9fRFVCTElOX0NPUkUgPSBHQVVTU0lBTl9GT1JDSU5HX0RJU0VBU0VfTU9ERUxfX0RVQkxJTl9DT1JFOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkxhYmVscyBUbyBVcGRhdGU8L2I+PC9lbT4nIHJlZmVyZW5jZSBsaXN0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IEdBVVNTSUFOMl9GT1JDSU5HX0RJU0VBU0VfTU9ERUxfX0xBQkVMU19UT19VUERBVEUgPSBHQVVTU0lBTl9GT1JDSU5HX0RJU0VBU0VfTU9ERUxfX0xBQkVMU19UT19VUERBVEU7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+R3JhcGg8L2I+PC9lbT4nIGNvbnRhaW5lciByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgR0FVU1NJQU4yX0ZPUkNJTkdfRElTRUFTRV9NT0RFTF9fR1JBUEggPSBHQVVTU0lBTl9GT1JDSU5HX0RJU0VBU0VfTU9ERUxfX0dSQVBIOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkVuYWJsZWQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBHQVVTU0lBTjJfRk9SQ0lOR19ESVNFQVNFX01PREVMX19FTkFCTEVEID0gR0FVU1NJQU5fRk9SQ0lOR19ESVNFQVNFX01PREVMX19FTkFCTEVEOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkdyYXBoIERlY29yYXRlZDwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IEdBVVNTSUFOMl9GT1JDSU5HX0RJU0VBU0VfTU9ERUxfX0dSQVBIX0RFQ09SQVRFRCA9IEdBVVNTSUFOX0ZPUkNJTkdfRElTRUFTRV9NT0RFTF9fR1JBUEhfREVDT1JBVEVEOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlByb2dyZXNzPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgR0FVU1NJQU4yX0ZPUkNJTkdfRElTRUFTRV9NT0RFTF9fUFJPR1JFU1MgPSBHQVVTU0lBTl9GT1JDSU5HX0RJU0VBU0VfTU9ERUxfX1BST0dSRVNTOworCisJCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlBvcHVsYXRpb24gSWRlbnRpZmllcjwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IEdBVVNTSUFOMl9GT1JDSU5HX0RJU0VBU0VfTU9ERUxfX1BPUFVMQVRJT05fSURFTlRJRklFUiA9IEdBVVNTSUFOX0ZPUkNJTkdfRElTRUFTRV9NT0RFTF9fUE9QVUxBVElPTl9JREVOVElGSUVSOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlRpbWUgUGVyaW9kPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgR0FVU1NJQU4yX0ZPUkNJTkdfRElTRUFTRV9NT0RFTF9fVElNRV9QRVJJT0QgPSBHQVVTU0lBTl9GT1JDSU5HX0RJU0VBU0VfTU9ERUxfX1RJTUVfUEVSSU9EOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkRpc2Vhc2UgTmFtZTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IEdBVVNTSUFOMl9GT1JDSU5HX0RJU0VBU0VfTU9ERUxfX0RJU0VBU0VfTkFNRSA9IEdBVVNTSUFOX0ZPUkNJTkdfRElTRUFTRV9NT0RFTF9fRElTRUFTRV9OQU1FOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkZpbml0ZSBEaWZmZXJlbmNlPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgR0FVU1NJQU4yX0ZPUkNJTkdfRElTRUFTRV9NT0RFTF9fRklOSVRFX0RJRkZFUkVOQ0UgPSBHQVVTU0lBTl9GT1JDSU5HX0RJU0VBU0VfTU9ERUxfX0ZJTklURV9ESUZGRVJFTkNFOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkZyZXF1ZW5jeSBEZXBlbmRlbnQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBHQVVTU0lBTjJfRk9SQ0lOR19ESVNFQVNFX01PREVMX19GUkVRVUVOQ1lfREVQRU5ERU5UID0gR0FVU1NJQU5fRk9SQ0lOR19ESVNFQVNFX01PREVMX19GUkVRVUVOQ1lfREVQRU5ERU5UOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlJlZmVyZW5jZSBQb3B1bGF0aW9uIERlbnNpdHk8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBHQVVTU0lBTjJfRk9SQ0lOR19ESVNFQVNFX01PREVMX19SRUZFUkVOQ0VfUE9QVUxBVElPTl9ERU5TSVRZID0gR0FVU1NJQU5fRk9SQ0lOR19ESVNFQVNFX01PREVMX19SRUZFUkVOQ0VfUE9QVUxBVElPTl9ERU5TSVRZOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlJvYWQgTmV0d29yayBJbmZlY3Rpb3VzIFByb3BvcnRpb248L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBHQVVTU0lBTjJfRk9SQ0lOR19ESVNFQVNFX01PREVMX19ST0FEX05FVFdPUktfSU5GRUNUSU9VU19QUk9QT1JUSU9OID0gR0FVU1NJQU5fRk9SQ0lOR19ESVNFQVNFX01PREVMX19ST0FEX05FVFdPUktfSU5GRUNUSU9VU19QUk9QT1JUSU9OOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkNoYXJhY3RlcmlzdGljIE1peGluZyBEaXN0YW5jZTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IEdBVVNTSUFOMl9GT1JDSU5HX0RJU0VBU0VfTU9ERUxfX0NIQVJBQ1RFUklTVElDX01JWElOR19ESVNUQU5DRSA9IEdBVVNTSUFOX0ZPUkNJTkdfRElTRUFTRV9NT0RFTF9fQ0hBUkFDVEVSSVNUSUNfTUlYSU5HX0RJU1RBTkNFOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlRyYW5zbWlzc2lvbiBSYXRlPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgR0FVU1NJQU4yX0ZPUkNJTkdfRElTRUFTRV9NT0RFTF9fVFJBTlNNSVNTSU9OX1JBVEUgPSBHQVVTU0lBTl9GT1JDSU5HX0RJU0VBU0VfTU9ERUxfX1RSQU5TTUlTU0lPTl9SQVRFOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPk5vbiBMaW5lYXJpdHkgQ29lZmZpY2llbnQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBHQVVTU0lBTjJfRk9SQ0lOR19ESVNFQVNFX01PREVMX19OT05fTElORUFSSVRZX0NPRUZGSUNJRU5UID0gR0FVU1NJQU5fRk9SQ0lOR19ESVNFQVNFX01PREVMX19OT05fTElORUFSSVRZX0NPRUZGSUNJRU5UOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlJlY292ZXJ5IFJhdGU8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBHQVVTU0lBTjJfRk9SQ0lOR19ESVNFQVNFX01PREVMX19SRUNPVkVSWV9SQVRFID0gR0FVU1NJQU5fRk9SQ0lOR19ESVNFQVNFX01PREVMX19SRUNPVkVSWV9SQVRFOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkluZmVjdGlvdXMgTW9ydGFsaXR5IFJhdGU8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBHQVVTU0lBTjJfRk9SQ0lOR19ESVNFQVNFX01PREVMX19JTkZFQ1RJT1VTX01PUlRBTElUWV9SQVRFID0gR0FVU1NJQU5fRk9SQ0lOR19ESVNFQVNFX01PREVMX19JTkZFQ1RJT1VTX01PUlRBTElUWV9SQVRFOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkltbXVuaXR5IExvc3MgUmF0ZTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IEdBVVNTSUFOMl9GT1JDSU5HX0RJU0VBU0VfTU9ERUxfX0lNTVVOSVRZX0xPU1NfUkFURSA9IEdBVVNTSUFOX0ZPUkNJTkdfRElTRUFTRV9NT0RFTF9fSU1NVU5JVFlfTE9TU19SQVRFOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlNlZWQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBHQVVTU0lBTjJfRk9SQ0lOR19ESVNFQVNFX01PREVMX19TRUVEID0gR0FVU1NJQU5fRk9SQ0lOR19ESVNFQVNFX01PREVMX19TRUVEOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlJhbmRvbSBHZW5lcmF0b3I8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBHQVVTU0lBTjJfRk9SQ0lOR19ESVNFQVNFX01PREVMX19SQU5ET01fR0VORVJBVE9SID0gR0FVU1NJQU5fRk9SQ0lOR19ESVNFQVNFX01PREVMX19SQU5ET01fR0VORVJBVE9SOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkdhaW48L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBHQVVTU0lBTjJfRk9SQ0lOR19ESVNFQVNFX01PREVMX19HQUlOID0gR0FVU1NJQU5fRk9SQ0lOR19ESVNFQVNFX01PREVMX19HQUlOOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlNpZ21hMjwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IEdBVVNTSUFOMl9GT1JDSU5HX0RJU0VBU0VfTU9ERUxfX1NJR01BMiA9IEdBVVNTSUFOX0ZPUkNJTkdfRElTRUFTRV9NT0RFTF9fU0lHTUEyOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPk1vZHVsYXRpb24gUGVyaW9kPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgR0FVU1NJQU4yX0ZPUkNJTkdfRElTRUFTRV9NT0RFTF9fTU9EVUxBVElPTl9QRVJJT0QgPSBHQVVTU0lBTl9GT1JDSU5HX0RJU0VBU0VfTU9ERUxfX01PRFVMQVRJT05fUEVSSU9EOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPk1vZHVsYXRpb24gUGhhc2UgU2hpZnQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBHQVVTU0lBTjJfRk9SQ0lOR19ESVNFQVNFX01PREVMX19NT0RVTEFUSU9OX1BIQVNFX1NISUZUID0gR0FVU1NJQU5fRk9SQ0lOR19ESVNFQVNFX01PREVMX19NT0RVTEFUSU9OX1BIQVNFX1NISUZUOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPk1vZHVsYXRpb24gRmxvb3I8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBHQVVTU0lBTjJfRk9SQ0lOR19ESVNFQVNFX01PREVMX19NT0RVTEFUSU9OX0ZMT09SID0gR0FVU1NJQU5fRk9SQ0lOR19ESVNFQVNFX01PREVMX19NT0RVTEFUSU9OX0ZMT09SOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlNpZ21hMiAyPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgR0FVU1NJQU4yX0ZPUkNJTkdfRElTRUFTRV9NT0RFTF9fU0lHTUEyXzIgPSBHQVVTU0lBTl9GT1JDSU5HX0RJU0VBU0VfTU9ERUxfRkVBVFVSRV9DT1VOVCArIDA7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+QXR0MTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IEdBVVNTSUFOMl9GT1JDSU5HX0RJU0VBU0VfTU9ERUxfX0FUVDEgPSBHQVVTU0lBTl9GT1JDSU5HX0RJU0VBU0VfTU9ERUxfRkVBVFVSRV9DT1VOVCArIDE7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+QXR0MjwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IEdBVVNTSUFOMl9GT1JDSU5HX0RJU0VBU0VfTU9ERUxfX0FUVDIgPSBHQVVTU0lBTl9GT1JDSU5HX0RJU0VBU0VfTU9ERUxfRkVBVFVSRV9DT1VOVCArIDI7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+QXR0MzwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IEdBVVNTSUFOMl9GT1JDSU5HX0RJU0VBU0VfTU9ERUxfX0FUVDMgPSBHQVVTU0lBTl9GT1JDSU5HX0RJU0VBU0VfTU9ERUxfRkVBVFVSRV9DT1VOVCArIDM7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+QXR0NDwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IEdBVVNTSUFOMl9GT1JDSU5HX0RJU0VBU0VfTU9ERUxfX0FUVDQgPSBHQVVTU0lBTl9GT1JDSU5HX0RJU0VBU0VfTU9ERUxfRkVBVFVSRV9DT1VOVCArIDQ7CisKKwkvKioKKwkgKiBUaGUgbnVtYmVyIG9mIHN0cnVjdHVyYWwgZmVhdHVyZXMgb2YgdGhlICc8ZW0+R2F1c3NpYW4yIEZvcmNpbmcgRGlzZWFzZSBNb2RlbDwvZW0+JyBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBHQVVTU0lBTjJfRk9SQ0lOR19ESVNFQVNFX01PREVMX0ZFQVRVUkVfQ09VTlQgPSBHQVVTU0lBTl9GT1JDSU5HX0RJU0VBU0VfTU9ERUxfRkVBVFVSRV9DT1VOVCArIDU7CisKKworCS8qKgorCSAqIFRoZSBtZXRhIG9iamVjdCBpZCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmZvcmNpbmcuaW1wbC5HYXVzc2lhbjNGb3JjaW5nRGlzZWFzZU1vZGVsSW1wbCA8ZW0+R2F1c3NpYW4zIEZvcmNpbmcgRGlzZWFzZSBNb2RlbDwvZW0+fScgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5mb3JjaW5nLmltcGwuR2F1c3NpYW4zRm9yY2luZ0Rpc2Vhc2VNb2RlbEltcGwKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5mb3JjaW5nLmltcGwuRm9yY2luZ1BhY2thZ2VJbXBsI2dldEdhdXNzaWFuM0ZvcmNpbmdEaXNlYXNlTW9kZWwoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlpbnQgR0FVU1NJQU4zX0ZPUkNJTkdfRElTRUFTRV9NT0RFTCA9IDM7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VVJJPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgR0FVU1NJQU4zX0ZPUkNJTkdfRElTRUFTRV9NT0RFTF9fVVJJID0gR0FVU1NJQU4yX0ZPUkNJTkdfRElTRUFTRV9NT0RFTF9fVVJJOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlR5cGUgVVJJPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgR0FVU1NJQU4zX0ZPUkNJTkdfRElTRUFTRV9NT0RFTF9fVFlQRV9VUkkgPSBHQVVTU0lBTjJfRk9SQ0lOR19ESVNFQVNFX01PREVMX19UWVBFX1VSSTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5EdWJsaW4gQ29yZTwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IEdBVVNTSUFOM19GT1JDSU5HX0RJU0VBU0VfTU9ERUxfX0RVQkxJTl9DT1JFID0gR0FVU1NJQU4yX0ZPUkNJTkdfRElTRUFTRV9NT0RFTF9fRFVCTElOX0NPUkU7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+TGFiZWxzIFRvIFVwZGF0ZTwvYj48L2VtPicgcmVmZXJlbmNlIGxpc3QuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgR0FVU1NJQU4zX0ZPUkNJTkdfRElTRUFTRV9NT0RFTF9fTEFCRUxTX1RPX1VQREFURSA9IEdBVVNTSUFOMl9GT1JDSU5HX0RJU0VBU0VfTU9ERUxfX0xBQkVMU19UT19VUERBVEU7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+R3JhcGg8L2I+PC9lbT4nIGNvbnRhaW5lciByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgR0FVU1NJQU4zX0ZPUkNJTkdfRElTRUFTRV9NT0RFTF9fR1JBUEggPSBHQVVTU0lBTjJfRk9SQ0lOR19ESVNFQVNFX01PREVMX19HUkFQSDsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5FbmFibGVkPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgR0FVU1NJQU4zX0ZPUkNJTkdfRElTRUFTRV9NT0RFTF9fRU5BQkxFRCA9IEdBVVNTSUFOMl9GT1JDSU5HX0RJU0VBU0VfTU9ERUxfX0VOQUJMRUQ7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+R3JhcGggRGVjb3JhdGVkPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgR0FVU1NJQU4zX0ZPUkNJTkdfRElTRUFTRV9NT0RFTF9fR1JBUEhfREVDT1JBVEVEID0gR0FVU1NJQU4yX0ZPUkNJTkdfRElTRUFTRV9NT0RFTF9fR1JBUEhfREVDT1JBVEVEOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlByb2dyZXNzPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgR0FVU1NJQU4zX0ZPUkNJTkdfRElTRUFTRV9NT0RFTF9fUFJPR1JFU1MgPSBHQVVTU0lBTjJfRk9SQ0lOR19ESVNFQVNFX01PREVMX19QUk9HUkVTUzsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5Qb3B1bGF0aW9uIElkZW50aWZpZXI8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBHQVVTU0lBTjNfRk9SQ0lOR19ESVNFQVNFX01PREVMX19QT1BVTEFUSU9OX0lERU5USUZJRVIgPSBHQVVTU0lBTjJfRk9SQ0lOR19ESVNFQVNFX01PREVMX19QT1BVTEFUSU9OX0lERU5USUZJRVI7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VGltZSBQZXJpb2Q8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBHQVVTU0lBTjNfRk9SQ0lOR19ESVNFQVNFX01PREVMX19USU1FX1BFUklPRCA9IEdBVVNTSUFOMl9GT1JDSU5HX0RJU0VBU0VfTU9ERUxfX1RJTUVfUEVSSU9EOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkRpc2Vhc2UgTmFtZTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IEdBVVNTSUFOM19GT1JDSU5HX0RJU0VBU0VfTU9ERUxfX0RJU0VBU0VfTkFNRSA9IEdBVVNTSUFOMl9GT1JDSU5HX0RJU0VBU0VfTU9ERUxfX0RJU0VBU0VfTkFNRTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5GaW5pdGUgRGlmZmVyZW5jZTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IEdBVVNTSUFOM19GT1JDSU5HX0RJU0VBU0VfTU9ERUxfX0ZJTklURV9ESUZGRVJFTkNFID0gR0FVU1NJQU4yX0ZPUkNJTkdfRElTRUFTRV9NT0RFTF9fRklOSVRFX0RJRkZFUkVOQ0U7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RnJlcXVlbmN5IERlcGVuZGVudDwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IEdBVVNTSUFOM19GT1JDSU5HX0RJU0VBU0VfTU9ERUxfX0ZSRVFVRU5DWV9ERVBFTkRFTlQgPSBHQVVTU0lBTjJfRk9SQ0lOR19ESVNFQVNFX01PREVMX19GUkVRVUVOQ1lfREVQRU5ERU5UOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlJlZmVyZW5jZSBQb3B1bGF0aW9uIERlbnNpdHk8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBHQVVTU0lBTjNfRk9SQ0lOR19ESVNFQVNFX01PREVMX19SRUZFUkVOQ0VfUE9QVUxBVElPTl9ERU5TSVRZID0gR0FVU1NJQU4yX0ZPUkNJTkdfRElTRUFTRV9NT0RFTF9fUkVGRVJFTkNFX1BPUFVMQVRJT05fREVOU0lUWTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5Sb2FkIE5ldHdvcmsgSW5mZWN0aW91cyBQcm9wb3J0aW9uPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgR0FVU1NJQU4zX0ZPUkNJTkdfRElTRUFTRV9NT0RFTF9fUk9BRF9ORVRXT1JLX0lORkVDVElPVVNfUFJPUE9SVElPTiA9IEdBVVNTSUFOMl9GT1JDSU5HX0RJU0VBU0VfTU9ERUxfX1JPQURfTkVUV09SS19JTkZFQ1RJT1VTX1BST1BPUlRJT047CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+Q2hhcmFjdGVyaXN0aWMgTWl4aW5nIERpc3RhbmNlPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgR0FVU1NJQU4zX0ZPUkNJTkdfRElTRUFTRV9NT0RFTF9fQ0hBUkFDVEVSSVNUSUNfTUlYSU5HX0RJU1RBTkNFID0gR0FVU1NJQU4yX0ZPUkNJTkdfRElTRUFTRV9NT0RFTF9fQ0hBUkFDVEVSSVNUSUNfTUlYSU5HX0RJU1RBTkNFOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlRyYW5zbWlzc2lvbiBSYXRlPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgR0FVU1NJQU4zX0ZPUkNJTkdfRElTRUFTRV9NT0RFTF9fVFJBTlNNSVNTSU9OX1JBVEUgPSBHQVVTU0lBTjJfRk9SQ0lOR19ESVNFQVNFX01PREVMX19UUkFOU01JU1NJT05fUkFURTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5Ob24gTGluZWFyaXR5IENvZWZmaWNpZW50PC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgR0FVU1NJQU4zX0ZPUkNJTkdfRElTRUFTRV9NT0RFTF9fTk9OX0xJTkVBUklUWV9DT0VGRklDSUVOVCA9IEdBVVNTSUFOMl9GT1JDSU5HX0RJU0VBU0VfTU9ERUxfX05PTl9MSU5FQVJJVFlfQ09FRkZJQ0lFTlQ7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+UmVjb3ZlcnkgUmF0ZTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IEdBVVNTSUFOM19GT1JDSU5HX0RJU0VBU0VfTU9ERUxfX1JFQ09WRVJZX1JBVEUgPSBHQVVTU0lBTjJfRk9SQ0lOR19ESVNFQVNFX01PREVMX19SRUNPVkVSWV9SQVRFOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkluZmVjdGlvdXMgTW9ydGFsaXR5IFJhdGU8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBHQVVTU0lBTjNfRk9SQ0lOR19ESVNFQVNFX01PREVMX19JTkZFQ1RJT1VTX01PUlRBTElUWV9SQVRFID0gR0FVU1NJQU4yX0ZPUkNJTkdfRElTRUFTRV9NT0RFTF9fSU5GRUNUSU9VU19NT1JUQUxJVFlfUkFURTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5JbW11bml0eSBMb3NzIFJhdGU8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBHQVVTU0lBTjNfRk9SQ0lOR19ESVNFQVNFX01PREVMX19JTU1VTklUWV9MT1NTX1JBVEUgPSBHQVVTU0lBTjJfRk9SQ0lOR19ESVNFQVNFX01PREVMX19JTU1VTklUWV9MT1NTX1JBVEU7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+U2VlZDwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IEdBVVNTSUFOM19GT1JDSU5HX0RJU0VBU0VfTU9ERUxfX1NFRUQgPSBHQVVTU0lBTjJfRk9SQ0lOR19ESVNFQVNFX01PREVMX19TRUVEOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlJhbmRvbSBHZW5lcmF0b3I8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBHQVVTU0lBTjNfRk9SQ0lOR19ESVNFQVNFX01PREVMX19SQU5ET01fR0VORVJBVE9SID0gR0FVU1NJQU4yX0ZPUkNJTkdfRElTRUFTRV9NT0RFTF9fUkFORE9NX0dFTkVSQVRPUjsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5HYWluPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgR0FVU1NJQU4zX0ZPUkNJTkdfRElTRUFTRV9NT0RFTF9fR0FJTiA9IEdBVVNTSUFOMl9GT1JDSU5HX0RJU0VBU0VfTU9ERUxfX0dBSU47CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+U2lnbWEyPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgR0FVU1NJQU4zX0ZPUkNJTkdfRElTRUFTRV9NT0RFTF9fU0lHTUEyID0gR0FVU1NJQU4yX0ZPUkNJTkdfRElTRUFTRV9NT0RFTF9fU0lHTUEyOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPk1vZHVsYXRpb24gUGVyaW9kPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgR0FVU1NJQU4zX0ZPUkNJTkdfRElTRUFTRV9NT0RFTF9fTU9EVUxBVElPTl9QRVJJT0QgPSBHQVVTU0lBTjJfRk9SQ0lOR19ESVNFQVNFX01PREVMX19NT0RVTEFUSU9OX1BFUklPRDsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5Nb2R1bGF0aW9uIFBoYXNlIFNoaWZ0PC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgR0FVU1NJQU4zX0ZPUkNJTkdfRElTRUFTRV9NT0RFTF9fTU9EVUxBVElPTl9QSEFTRV9TSElGVCA9IEdBVVNTSUFOMl9GT1JDSU5HX0RJU0VBU0VfTU9ERUxfX01PRFVMQVRJT05fUEhBU0VfU0hJRlQ7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+TW9kdWxhdGlvbiBGbG9vcjwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IEdBVVNTSUFOM19GT1JDSU5HX0RJU0VBU0VfTU9ERUxfX01PRFVMQVRJT05fRkxPT1IgPSBHQVVTU0lBTjJfRk9SQ0lOR19ESVNFQVNFX01PREVMX19NT0RVTEFUSU9OX0ZMT09SOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlNpZ21hMiAyPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgR0FVU1NJQU4zX0ZPUkNJTkdfRElTRUFTRV9NT0RFTF9fU0lHTUEyXzIgPSBHQVVTU0lBTjJfRk9SQ0lOR19ESVNFQVNFX01PREVMX19TSUdNQTJfMjsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5BdHQxPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgR0FVU1NJQU4zX0ZPUkNJTkdfRElTRUFTRV9NT0RFTF9fQVRUMSA9IEdBVVNTSUFOMl9GT1JDSU5HX0RJU0VBU0VfTU9ERUxfX0FUVDE7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+QXR0MjwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IEdBVVNTSUFOM19GT1JDSU5HX0RJU0VBU0VfTU9ERUxfX0FUVDIgPSBHQVVTU0lBTjJfRk9SQ0lOR19ESVNFQVNFX01PREVMX19BVFQyOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkF0dDM8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBHQVVTU0lBTjNfRk9SQ0lOR19ESVNFQVNFX01PREVMX19BVFQzID0gR0FVU1NJQU4yX0ZPUkNJTkdfRElTRUFTRV9NT0RFTF9fQVRUMzsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5BdHQ0PC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgR0FVU1NJQU4zX0ZPUkNJTkdfRElTRUFTRV9NT0RFTF9fQVRUNCA9IEdBVVNTSUFOMl9GT1JDSU5HX0RJU0VBU0VfTU9ERUxfX0FUVDQ7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+U2lnbWEyIDM8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBHQVVTU0lBTjNfRk9SQ0lOR19ESVNFQVNFX01PREVMX19TSUdNQTJfMyA9IEdBVVNTSUFOMl9GT1JDSU5HX0RJU0VBU0VfTU9ERUxfRkVBVFVSRV9DT1VOVCArIDA7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VHJhbnNtaXNzaW9uIFJhdGUyPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgR0FVU1NJQU4zX0ZPUkNJTkdfRElTRUFTRV9NT0RFTF9fVFJBTlNNSVNTSU9OX1JBVEUyID0gR0FVU1NJQU4yX0ZPUkNJTkdfRElTRUFTRV9NT0RFTF9GRUFUVVJFX0NPVU5UICsgMTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5UcmFuc21pc3Npb24gUmF0ZTM8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBHQVVTU0lBTjNfRk9SQ0lOR19ESVNFQVNFX01PREVMX19UUkFOU01JU1NJT05fUkFURTMgPSBHQVVTU0lBTjJfRk9SQ0lOR19ESVNFQVNFX01PREVMX0ZFQVRVUkVfQ09VTlQgKyAyOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPk1vZHVsYXRpb24gRmxvb3IgMjwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IEdBVVNTSUFOM19GT1JDSU5HX0RJU0VBU0VfTU9ERUxfX01PRFVMQVRJT05fRkxPT1JfMiA9IEdBVVNTSUFOMl9GT1JDSU5HX0RJU0VBU0VfTU9ERUxfRkVBVFVSRV9DT1VOVCArIDM7CisKKwkvKioKKwkgKiBUaGUgbnVtYmVyIG9mIHN0cnVjdHVyYWwgZmVhdHVyZXMgb2YgdGhlICc8ZW0+R2F1c3NpYW4zIEZvcmNpbmcgRGlzZWFzZSBNb2RlbDwvZW0+JyBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBHQVVTU0lBTjNfRk9SQ0lOR19ESVNFQVNFX01PREVMX0ZFQVRVUkVfQ09VTlQgPSBHQVVTU0lBTjJfRk9SQ0lOR19ESVNFQVNFX01PREVMX0ZFQVRVUkVfQ09VTlQgKyA0OworCisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZm9yY2luZy5Gb3JjaW5nRGlzZWFzZU1vZGVsIDxlbT5EaXNlYXNlIE1vZGVsPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAnPGVtPkRpc2Vhc2UgTW9kZWw8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZm9yY2luZy5Gb3JjaW5nRGlzZWFzZU1vZGVsCisJICogQGdlbmVyYXRlZAorCSAqLworCUVDbGFzcyBnZXRGb3JjaW5nRGlzZWFzZU1vZGVsKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5mb3JjaW5nLkZvcmNpbmdEaXNlYXNlTW9kZWwjZ2V0TW9kdWxhdGlvbkV4cG9uZW50IDxlbT5Nb2R1bGF0aW9uIEV4cG9uZW50PC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+TW9kdWxhdGlvbiBFeHBvbmVudDwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5mb3JjaW5nLkZvcmNpbmdEaXNlYXNlTW9kZWwjZ2V0TW9kdWxhdGlvbkV4cG9uZW50KCkKKwkgKiBAc2VlICNnZXRGb3JjaW5nRGlzZWFzZU1vZGVsKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUF0dHJpYnV0ZSBnZXRGb3JjaW5nRGlzZWFzZU1vZGVsX01vZHVsYXRpb25FeHBvbmVudCgpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZm9yY2luZy5Gb3JjaW5nRGlzZWFzZU1vZGVsI2dldE1vZHVsYXRpb25QZXJpb2QgPGVtPk1vZHVsYXRpb24gUGVyaW9kPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+TW9kdWxhdGlvbiBQZXJpb2Q8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZm9yY2luZy5Gb3JjaW5nRGlzZWFzZU1vZGVsI2dldE1vZHVsYXRpb25QZXJpb2QoKQorCSAqIEBzZWUgI2dldEZvcmNpbmdEaXNlYXNlTW9kZWwoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQXR0cmlidXRlIGdldEZvcmNpbmdEaXNlYXNlTW9kZWxfTW9kdWxhdGlvblBlcmlvZCgpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZm9yY2luZy5Gb3JjaW5nRGlzZWFzZU1vZGVsI2dldE1vZHVsYXRpb25QaGFzZVNoaWZ0IDxlbT5Nb2R1bGF0aW9uIFBoYXNlIFNoaWZ0PC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+TW9kdWxhdGlvbiBQaGFzZSBTaGlmdDwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5mb3JjaW5nLkZvcmNpbmdEaXNlYXNlTW9kZWwjZ2V0TW9kdWxhdGlvblBoYXNlU2hpZnQoKQorCSAqIEBzZWUgI2dldEZvcmNpbmdEaXNlYXNlTW9kZWwoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQXR0cmlidXRlIGdldEZvcmNpbmdEaXNlYXNlTW9kZWxfTW9kdWxhdGlvblBoYXNlU2hpZnQoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmZvcmNpbmcuRm9yY2luZ0Rpc2Vhc2VNb2RlbCNnZXRNb2R1bGF0aW9uRmxvb3IgPGVtPk1vZHVsYXRpb24gRmxvb3I8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxlbT5Nb2R1bGF0aW9uIEZsb29yPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmZvcmNpbmcuRm9yY2luZ0Rpc2Vhc2VNb2RlbCNnZXRNb2R1bGF0aW9uRmxvb3IoKQorCSAqIEBzZWUgI2dldEZvcmNpbmdEaXNlYXNlTW9kZWwoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQXR0cmlidXRlIGdldEZvcmNpbmdEaXNlYXNlTW9kZWxfTW9kdWxhdGlvbkZsb29yKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZm9yY2luZy5HYXVzc2lhbkZvcmNpbmdEaXNlYXNlTW9kZWwgPGVtPkdhdXNzaWFuIEZvcmNpbmcgRGlzZWFzZSBNb2RlbDwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJzxlbT5HYXVzc2lhbiBGb3JjaW5nIERpc2Vhc2UgTW9kZWw8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZm9yY2luZy5HYXVzc2lhbkZvcmNpbmdEaXNlYXNlTW9kZWwKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUNsYXNzIGdldEdhdXNzaWFuRm9yY2luZ0Rpc2Vhc2VNb2RlbCgpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZm9yY2luZy5HYXVzc2lhbkZvcmNpbmdEaXNlYXNlTW9kZWwjZ2V0U2lnbWEyIDxlbT5TaWdtYTI8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxlbT5TaWdtYTI8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZm9yY2luZy5HYXVzc2lhbkZvcmNpbmdEaXNlYXNlTW9kZWwjZ2V0U2lnbWEyKCkKKwkgKiBAc2VlICNnZXRHYXVzc2lhbkZvcmNpbmdEaXNlYXNlTW9kZWwoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQXR0cmlidXRlIGdldEdhdXNzaWFuRm9yY2luZ0Rpc2Vhc2VNb2RlbF9TaWdtYTIoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmZvcmNpbmcuR2F1c3NpYW5Gb3JjaW5nRGlzZWFzZU1vZGVsI2dldE1vZHVsYXRpb25QZXJpb2QgPGVtPk1vZHVsYXRpb24gUGVyaW9kPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+TW9kdWxhdGlvbiBQZXJpb2Q8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZm9yY2luZy5HYXVzc2lhbkZvcmNpbmdEaXNlYXNlTW9kZWwjZ2V0TW9kdWxhdGlvblBlcmlvZCgpCisJICogQHNlZSAjZ2V0R2F1c3NpYW5Gb3JjaW5nRGlzZWFzZU1vZGVsKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUF0dHJpYnV0ZSBnZXRHYXVzc2lhbkZvcmNpbmdEaXNlYXNlTW9kZWxfTW9kdWxhdGlvblBlcmlvZCgpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZm9yY2luZy5HYXVzc2lhbkZvcmNpbmdEaXNlYXNlTW9kZWwjZ2V0TW9kdWxhdGlvblBoYXNlU2hpZnQgPGVtPk1vZHVsYXRpb24gUGhhc2UgU2hpZnQ8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxlbT5Nb2R1bGF0aW9uIFBoYXNlIFNoaWZ0PC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmZvcmNpbmcuR2F1c3NpYW5Gb3JjaW5nRGlzZWFzZU1vZGVsI2dldE1vZHVsYXRpb25QaGFzZVNoaWZ0KCkKKwkgKiBAc2VlICNnZXRHYXVzc2lhbkZvcmNpbmdEaXNlYXNlTW9kZWwoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQXR0cmlidXRlIGdldEdhdXNzaWFuRm9yY2luZ0Rpc2Vhc2VNb2RlbF9Nb2R1bGF0aW9uUGhhc2VTaGlmdCgpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZm9yY2luZy5HYXVzc2lhbkZvcmNpbmdEaXNlYXNlTW9kZWwjZ2V0TW9kdWxhdGlvbkZsb29yIDxlbT5Nb2R1bGF0aW9uIEZsb29yPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+TW9kdWxhdGlvbiBGbG9vcjwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5mb3JjaW5nLkdhdXNzaWFuRm9yY2luZ0Rpc2Vhc2VNb2RlbCNnZXRNb2R1bGF0aW9uRmxvb3IoKQorCSAqIEBzZWUgI2dldEdhdXNzaWFuRm9yY2luZ0Rpc2Vhc2VNb2RlbCgpCisJICogQGdlbmVyYXRlZAorCSAqLworCUVBdHRyaWJ1dGUgZ2V0R2F1c3NpYW5Gb3JjaW5nRGlzZWFzZU1vZGVsX01vZHVsYXRpb25GbG9vcigpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmZvcmNpbmcuR2F1c3NpYW4yRm9yY2luZ0Rpc2Vhc2VNb2RlbCA8ZW0+R2F1c3NpYW4yIEZvcmNpbmcgRGlzZWFzZSBNb2RlbDwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJzxlbT5HYXVzc2lhbjIgRm9yY2luZyBEaXNlYXNlIE1vZGVsPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmZvcmNpbmcuR2F1c3NpYW4yRm9yY2luZ0Rpc2Vhc2VNb2RlbAorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQ2xhc3MgZ2V0R2F1c3NpYW4yRm9yY2luZ0Rpc2Vhc2VNb2RlbCgpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZm9yY2luZy5HYXVzc2lhbjJGb3JjaW5nRGlzZWFzZU1vZGVsI2dldFNpZ21hMl8yIDxlbT5TaWdtYTIgMjwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPGVtPlNpZ21hMiAyPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmZvcmNpbmcuR2F1c3NpYW4yRm9yY2luZ0Rpc2Vhc2VNb2RlbCNnZXRTaWdtYTJfMigpCisJICogQHNlZSAjZ2V0R2F1c3NpYW4yRm9yY2luZ0Rpc2Vhc2VNb2RlbCgpCisJICogQGdlbmVyYXRlZAorCSAqLworCUVBdHRyaWJ1dGUgZ2V0R2F1c3NpYW4yRm9yY2luZ0Rpc2Vhc2VNb2RlbF9TaWdtYTJfMigpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZm9yY2luZy5HYXVzc2lhbjJGb3JjaW5nRGlzZWFzZU1vZGVsI2dldEF0dDEgPGVtPkF0dDE8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxlbT5BdHQxPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmZvcmNpbmcuR2F1c3NpYW4yRm9yY2luZ0Rpc2Vhc2VNb2RlbCNnZXRBdHQxKCkKKwkgKiBAc2VlICNnZXRHYXVzc2lhbjJGb3JjaW5nRGlzZWFzZU1vZGVsKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUF0dHJpYnV0ZSBnZXRHYXVzc2lhbjJGb3JjaW5nRGlzZWFzZU1vZGVsX0F0dDEoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmZvcmNpbmcuR2F1c3NpYW4yRm9yY2luZ0Rpc2Vhc2VNb2RlbCNnZXRBdHQyIDxlbT5BdHQyPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+QXR0MjwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5mb3JjaW5nLkdhdXNzaWFuMkZvcmNpbmdEaXNlYXNlTW9kZWwjZ2V0QXR0MigpCisJICogQHNlZSAjZ2V0R2F1c3NpYW4yRm9yY2luZ0Rpc2Vhc2VNb2RlbCgpCisJICogQGdlbmVyYXRlZAorCSAqLworCUVBdHRyaWJ1dGUgZ2V0R2F1c3NpYW4yRm9yY2luZ0Rpc2Vhc2VNb2RlbF9BdHQyKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5mb3JjaW5nLkdhdXNzaWFuMkZvcmNpbmdEaXNlYXNlTW9kZWwjZ2V0QXR0MyA8ZW0+QXR0MzwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPGVtPkF0dDM8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZm9yY2luZy5HYXVzc2lhbjJGb3JjaW5nRGlzZWFzZU1vZGVsI2dldEF0dDMoKQorCSAqIEBzZWUgI2dldEdhdXNzaWFuMkZvcmNpbmdEaXNlYXNlTW9kZWwoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQXR0cmlidXRlIGdldEdhdXNzaWFuMkZvcmNpbmdEaXNlYXNlTW9kZWxfQXR0MygpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZm9yY2luZy5HYXVzc2lhbjJGb3JjaW5nRGlzZWFzZU1vZGVsI2dldEF0dDQgPGVtPkF0dDQ8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxlbT5BdHQ0PC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmZvcmNpbmcuR2F1c3NpYW4yRm9yY2luZ0Rpc2Vhc2VNb2RlbCNnZXRBdHQ0KCkKKwkgKiBAc2VlICNnZXRHYXVzc2lhbjJGb3JjaW5nRGlzZWFzZU1vZGVsKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUF0dHJpYnV0ZSBnZXRHYXVzc2lhbjJGb3JjaW5nRGlzZWFzZU1vZGVsX0F0dDQoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5mb3JjaW5nLkdhdXNzaWFuM0ZvcmNpbmdEaXNlYXNlTW9kZWwgPGVtPkdhdXNzaWFuMyBGb3JjaW5nIERpc2Vhc2UgTW9kZWw8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICc8ZW0+R2F1c3NpYW4zIEZvcmNpbmcgRGlzZWFzZSBNb2RlbDwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5mb3JjaW5nLkdhdXNzaWFuM0ZvcmNpbmdEaXNlYXNlTW9kZWwKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUNsYXNzIGdldEdhdXNzaWFuM0ZvcmNpbmdEaXNlYXNlTW9kZWwoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmZvcmNpbmcuR2F1c3NpYW4zRm9yY2luZ0Rpc2Vhc2VNb2RlbCNnZXRTaWdtYTJfMyA8ZW0+U2lnbWEyIDM8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxlbT5TaWdtYTIgMzwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5mb3JjaW5nLkdhdXNzaWFuM0ZvcmNpbmdEaXNlYXNlTW9kZWwjZ2V0U2lnbWEyXzMoKQorCSAqIEBzZWUgI2dldEdhdXNzaWFuM0ZvcmNpbmdEaXNlYXNlTW9kZWwoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQXR0cmlidXRlIGdldEdhdXNzaWFuM0ZvcmNpbmdEaXNlYXNlTW9kZWxfU2lnbWEyXzMoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmZvcmNpbmcuR2F1c3NpYW4zRm9yY2luZ0Rpc2Vhc2VNb2RlbCNnZXRUcmFuc21pc3Npb25SYXRlMiA8ZW0+VHJhbnNtaXNzaW9uIFJhdGUyPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+VHJhbnNtaXNzaW9uIFJhdGUyPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmZvcmNpbmcuR2F1c3NpYW4zRm9yY2luZ0Rpc2Vhc2VNb2RlbCNnZXRUcmFuc21pc3Npb25SYXRlMigpCisJICogQHNlZSAjZ2V0R2F1c3NpYW4zRm9yY2luZ0Rpc2Vhc2VNb2RlbCgpCisJICogQGdlbmVyYXRlZAorCSAqLworCUVBdHRyaWJ1dGUgZ2V0R2F1c3NpYW4zRm9yY2luZ0Rpc2Vhc2VNb2RlbF9UcmFuc21pc3Npb25SYXRlMigpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZm9yY2luZy5HYXVzc2lhbjNGb3JjaW5nRGlzZWFzZU1vZGVsI2dldFRyYW5zbWlzc2lvblJhdGUzIDxlbT5UcmFuc21pc3Npb24gUmF0ZTM8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxlbT5UcmFuc21pc3Npb24gUmF0ZTM8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZm9yY2luZy5HYXVzc2lhbjNGb3JjaW5nRGlzZWFzZU1vZGVsI2dldFRyYW5zbWlzc2lvblJhdGUzKCkKKwkgKiBAc2VlICNnZXRHYXVzc2lhbjNGb3JjaW5nRGlzZWFzZU1vZGVsKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUF0dHJpYnV0ZSBnZXRHYXVzc2lhbjNGb3JjaW5nRGlzZWFzZU1vZGVsX1RyYW5zbWlzc2lvblJhdGUzKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5mb3JjaW5nLkdhdXNzaWFuM0ZvcmNpbmdEaXNlYXNlTW9kZWwjZ2V0TW9kdWxhdGlvbkZsb29yXzIgPGVtPk1vZHVsYXRpb24gRmxvb3IgMjwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPGVtPk1vZHVsYXRpb24gRmxvb3IgMjwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5mb3JjaW5nLkdhdXNzaWFuM0ZvcmNpbmdEaXNlYXNlTW9kZWwjZ2V0TW9kdWxhdGlvbkZsb29yXzIoKQorCSAqIEBzZWUgI2dldEdhdXNzaWFuM0ZvcmNpbmdEaXNlYXNlTW9kZWwoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQXR0cmlidXRlIGdldEdhdXNzaWFuM0ZvcmNpbmdEaXNlYXNlTW9kZWxfTW9kdWxhdGlvbkZsb29yXzIoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIGZhY3RvcnkgdGhhdCBjcmVhdGVzIHRoZSBpbnN0YW5jZXMgb2YgdGhlIG1vZGVsLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgZmFjdG9yeSB0aGF0IGNyZWF0ZXMgdGhlIGluc3RhbmNlcyBvZiB0aGUgbW9kZWwuCisJICogQGdlbmVyYXRlZAorCSAqLworCUZvcmNpbmdGYWN0b3J5IGdldEZvcmNpbmdGYWN0b3J5KCk7CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIERlZmluZXMgbGl0ZXJhbHMgZm9yIHRoZSBtZXRhIG9iamVjdHMgdGhhdCByZXByZXNlbnQKKwkgKiA8dWw+CisJICogICA8bGk+ZWFjaCBjbGFzcyw8L2xpPgorCSAqICAgPGxpPmVhY2ggZmVhdHVyZSBvZiBlYWNoIGNsYXNzLDwvbGk+CisJICogICA8bGk+ZWFjaCBlbnVtLDwvbGk+CisJICogICA8bGk+YW5kIGVhY2ggZGF0YSB0eXBlPC9saT4KKwkgKiA8L3VsPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlpbnRlcmZhY2UgTGl0ZXJhbHMgeworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5mb3JjaW5nLmltcGwuRm9yY2luZ0Rpc2Vhc2VNb2RlbEltcGwgPGVtPkRpc2Vhc2UgTW9kZWw8L2VtPn0nIGNsYXNzLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZm9yY2luZy5pbXBsLkZvcmNpbmdEaXNlYXNlTW9kZWxJbXBsCisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmZvcmNpbmcuaW1wbC5Gb3JjaW5nUGFja2FnZUltcGwjZ2V0Rm9yY2luZ0Rpc2Vhc2VNb2RlbCgpCisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVDbGFzcyBGT1JDSU5HX0RJU0VBU0VfTU9ERUwgPSBlSU5TVEFOQ0UuZ2V0Rm9yY2luZ0Rpc2Vhc2VNb2RlbCgpOworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPk1vZHVsYXRpb24gRXhwb25lbnQ8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUF0dHJpYnV0ZSBGT1JDSU5HX0RJU0VBU0VfTU9ERUxfX01PRFVMQVRJT05fRVhQT05FTlQgPSBlSU5TVEFOQ0UuZ2V0Rm9yY2luZ0Rpc2Vhc2VNb2RlbF9Nb2R1bGF0aW9uRXhwb25lbnQoKTsKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5Nb2R1bGF0aW9uIFBlcmlvZDwvYj48L2VtPicgYXR0cmlidXRlIGZlYXR1cmUuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQXR0cmlidXRlIEZPUkNJTkdfRElTRUFTRV9NT0RFTF9fTU9EVUxBVElPTl9QRVJJT0QgPSBlSU5TVEFOQ0UuZ2V0Rm9yY2luZ0Rpc2Vhc2VNb2RlbF9Nb2R1bGF0aW9uUGVyaW9kKCk7CisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+TW9kdWxhdGlvbiBQaGFzZSBTaGlmdDwvYj48L2VtPicgYXR0cmlidXRlIGZlYXR1cmUuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQXR0cmlidXRlIEZPUkNJTkdfRElTRUFTRV9NT0RFTF9fTU9EVUxBVElPTl9QSEFTRV9TSElGVCA9IGVJTlNUQU5DRS5nZXRGb3JjaW5nRGlzZWFzZU1vZGVsX01vZHVsYXRpb25QaGFzZVNoaWZ0KCk7CisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+TW9kdWxhdGlvbiBGbG9vcjwvYj48L2VtPicgYXR0cmlidXRlIGZlYXR1cmUuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQXR0cmlidXRlIEZPUkNJTkdfRElTRUFTRV9NT0RFTF9fTU9EVUxBVElPTl9GTE9PUiA9IGVJTlNUQU5DRS5nZXRGb3JjaW5nRGlzZWFzZU1vZGVsX01vZHVsYXRpb25GbG9vcigpOworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5mb3JjaW5nLmltcGwuR2F1c3NpYW5Gb3JjaW5nRGlzZWFzZU1vZGVsSW1wbCA8ZW0+R2F1c3NpYW4gRm9yY2luZyBEaXNlYXNlIE1vZGVsPC9lbT59JyBjbGFzcy4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmZvcmNpbmcuaW1wbC5HYXVzc2lhbkZvcmNpbmdEaXNlYXNlTW9kZWxJbXBsCisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmZvcmNpbmcuaW1wbC5Gb3JjaW5nUGFja2FnZUltcGwjZ2V0R2F1c3NpYW5Gb3JjaW5nRGlzZWFzZU1vZGVsKCkKKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUNsYXNzIEdBVVNTSUFOX0ZPUkNJTkdfRElTRUFTRV9NT0RFTCA9IGVJTlNUQU5DRS5nZXRHYXVzc2lhbkZvcmNpbmdEaXNlYXNlTW9kZWwoKTsKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5TaWdtYTI8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUF0dHJpYnV0ZSBHQVVTU0lBTl9GT1JDSU5HX0RJU0VBU0VfTU9ERUxfX1NJR01BMiA9IGVJTlNUQU5DRS5nZXRHYXVzc2lhbkZvcmNpbmdEaXNlYXNlTW9kZWxfU2lnbWEyKCk7CisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+TW9kdWxhdGlvbiBQZXJpb2Q8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUF0dHJpYnV0ZSBHQVVTU0lBTl9GT1JDSU5HX0RJU0VBU0VfTU9ERUxfX01PRFVMQVRJT05fUEVSSU9EID0gZUlOU1RBTkNFLmdldEdhdXNzaWFuRm9yY2luZ0Rpc2Vhc2VNb2RlbF9Nb2R1bGF0aW9uUGVyaW9kKCk7CisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+TW9kdWxhdGlvbiBQaGFzZSBTaGlmdDwvYj48L2VtPicgYXR0cmlidXRlIGZlYXR1cmUuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQXR0cmlidXRlIEdBVVNTSUFOX0ZPUkNJTkdfRElTRUFTRV9NT0RFTF9fTU9EVUxBVElPTl9QSEFTRV9TSElGVCA9IGVJTlNUQU5DRS5nZXRHYXVzc2lhbkZvcmNpbmdEaXNlYXNlTW9kZWxfTW9kdWxhdGlvblBoYXNlU2hpZnQoKTsKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5Nb2R1bGF0aW9uIEZsb29yPC9iPjwvZW0+JyBhdHRyaWJ1dGUgZmVhdHVyZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVBdHRyaWJ1dGUgR0FVU1NJQU5fRk9SQ0lOR19ESVNFQVNFX01PREVMX19NT0RVTEFUSU9OX0ZMT09SID0gZUlOU1RBTkNFLmdldEdhdXNzaWFuRm9yY2luZ0Rpc2Vhc2VNb2RlbF9Nb2R1bGF0aW9uRmxvb3IoKTsKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZm9yY2luZy5pbXBsLkdhdXNzaWFuMkZvcmNpbmdEaXNlYXNlTW9kZWxJbXBsIDxlbT5HYXVzc2lhbjIgRm9yY2luZyBEaXNlYXNlIE1vZGVsPC9lbT59JyBjbGFzcy4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmZvcmNpbmcuaW1wbC5HYXVzc2lhbjJGb3JjaW5nRGlzZWFzZU1vZGVsSW1wbAorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5mb3JjaW5nLmltcGwuRm9yY2luZ1BhY2thZ2VJbXBsI2dldEdhdXNzaWFuMkZvcmNpbmdEaXNlYXNlTW9kZWwoKQorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQ2xhc3MgR0FVU1NJQU4yX0ZPUkNJTkdfRElTRUFTRV9NT0RFTCA9IGVJTlNUQU5DRS5nZXRHYXVzc2lhbjJGb3JjaW5nRGlzZWFzZU1vZGVsKCk7CisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+U2lnbWEyIDI8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUF0dHJpYnV0ZSBHQVVTU0lBTjJfRk9SQ0lOR19ESVNFQVNFX01PREVMX19TSUdNQTJfMiA9IGVJTlNUQU5DRS5nZXRHYXVzc2lhbjJGb3JjaW5nRGlzZWFzZU1vZGVsX1NpZ21hMl8yKCk7CisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+QXR0MTwvYj48L2VtPicgYXR0cmlidXRlIGZlYXR1cmUuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQXR0cmlidXRlIEdBVVNTSUFOMl9GT1JDSU5HX0RJU0VBU0VfTU9ERUxfX0FUVDEgPSBlSU5TVEFOQ0UuZ2V0R2F1c3NpYW4yRm9yY2luZ0Rpc2Vhc2VNb2RlbF9BdHQxKCk7CisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+QXR0MjwvYj48L2VtPicgYXR0cmlidXRlIGZlYXR1cmUuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQXR0cmlidXRlIEdBVVNTSUFOMl9GT1JDSU5HX0RJU0VBU0VfTU9ERUxfX0FUVDIgPSBlSU5TVEFOQ0UuZ2V0R2F1c3NpYW4yRm9yY2luZ0Rpc2Vhc2VNb2RlbF9BdHQyKCk7CisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+QXR0MzwvYj48L2VtPicgYXR0cmlidXRlIGZlYXR1cmUuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQXR0cmlidXRlIEdBVVNTSUFOMl9GT1JDSU5HX0RJU0VBU0VfTU9ERUxfX0FUVDMgPSBlSU5TVEFOQ0UuZ2V0R2F1c3NpYW4yRm9yY2luZ0Rpc2Vhc2VNb2RlbF9BdHQzKCk7CisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+QXR0NDwvYj48L2VtPicgYXR0cmlidXRlIGZlYXR1cmUuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQXR0cmlidXRlIEdBVVNTSUFOMl9GT1JDSU5HX0RJU0VBU0VfTU9ERUxfX0FUVDQgPSBlSU5TVEFOQ0UuZ2V0R2F1c3NpYW4yRm9yY2luZ0Rpc2Vhc2VNb2RlbF9BdHQ0KCk7CisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmZvcmNpbmcuaW1wbC5HYXVzc2lhbjNGb3JjaW5nRGlzZWFzZU1vZGVsSW1wbCA8ZW0+R2F1c3NpYW4zIEZvcmNpbmcgRGlzZWFzZSBNb2RlbDwvZW0+fScgY2xhc3MuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5mb3JjaW5nLmltcGwuR2F1c3NpYW4zRm9yY2luZ0Rpc2Vhc2VNb2RlbEltcGwKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZm9yY2luZy5pbXBsLkZvcmNpbmdQYWNrYWdlSW1wbCNnZXRHYXVzc2lhbjNGb3JjaW5nRGlzZWFzZU1vZGVsKCkKKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUNsYXNzIEdBVVNTSUFOM19GT1JDSU5HX0RJU0VBU0VfTU9ERUwgPSBlSU5TVEFOQ0UuZ2V0R2F1c3NpYW4zRm9yY2luZ0Rpc2Vhc2VNb2RlbCgpOworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPlNpZ21hMiAzPC9iPjwvZW0+JyBhdHRyaWJ1dGUgZmVhdHVyZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVBdHRyaWJ1dGUgR0FVU1NJQU4zX0ZPUkNJTkdfRElTRUFTRV9NT0RFTF9fU0lHTUEyXzMgPSBlSU5TVEFOQ0UuZ2V0R2F1c3NpYW4zRm9yY2luZ0Rpc2Vhc2VNb2RlbF9TaWdtYTJfMygpOworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPlRyYW5zbWlzc2lvbiBSYXRlMjwvYj48L2VtPicgYXR0cmlidXRlIGZlYXR1cmUuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQXR0cmlidXRlIEdBVVNTSUFOM19GT1JDSU5HX0RJU0VBU0VfTU9ERUxfX1RSQU5TTUlTU0lPTl9SQVRFMiA9IGVJTlNUQU5DRS5nZXRHYXVzc2lhbjNGb3JjaW5nRGlzZWFzZU1vZGVsX1RyYW5zbWlzc2lvblJhdGUyKCk7CisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+VHJhbnNtaXNzaW9uIFJhdGUzPC9iPjwvZW0+JyBhdHRyaWJ1dGUgZmVhdHVyZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVBdHRyaWJ1dGUgR0FVU1NJQU4zX0ZPUkNJTkdfRElTRUFTRV9NT0RFTF9fVFJBTlNNSVNTSU9OX1JBVEUzID0gZUlOU1RBTkNFLmdldEdhdXNzaWFuM0ZvcmNpbmdEaXNlYXNlTW9kZWxfVHJhbnNtaXNzaW9uUmF0ZTMoKTsKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5Nb2R1bGF0aW9uIEZsb29yIDI8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUF0dHJpYnV0ZSBHQVVTU0lBTjNfRk9SQ0lOR19ESVNFQVNFX01PREVMX19NT0RVTEFUSU9OX0ZMT09SXzIgPSBlSU5TVEFOQ0UuZ2V0R2F1c3NpYW4zRm9yY2luZ0Rpc2Vhc2VNb2RlbF9Nb2R1bGF0aW9uRmxvb3JfMigpOworCisJfQorCit9IC8vRXhhbXBsZVBhY2thZ2UKZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmZvcmNpbmcvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9mb3JjaW5nL0dhdXNzaWFuMkZvcmNpbmdEaXNlYXNlTW9kZWwuamF2YSBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmZvcmNpbmcvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9mb3JjaW5nL0dhdXNzaWFuMkZvcmNpbmdEaXNlYXNlTW9kZWwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYTk3NzdiCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZm9yY2luZy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL2ZvcmNpbmcvR2F1c3NpYW4yRm9yY2luZ0Rpc2Vhc2VNb2RlbC5qYXZhCkBAIC0wLDAgKzEsMTY5IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5mb3JjaW5nOworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAxMCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIEEgcmVwcmVzZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPkdhdXNzaWFuMiBGb3JjaW5nIERpc2Vhc2UgTW9kZWw8L2I+PC9lbT4nLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKgorICogPHA+CisgKiBUaGUgZm9sbG93aW5nIGZlYXR1cmVzIGFyZSBzdXBwb3J0ZWQ6CisgKiA8dWw+CisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmZvcmNpbmcuR2F1c3NpYW4yRm9yY2luZ0Rpc2Vhc2VNb2RlbCNnZXRTaWdtYTJfMiA8ZW0+U2lnbWEyIDI8L2VtPn08L2xpPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5mb3JjaW5nLkdhdXNzaWFuMkZvcmNpbmdEaXNlYXNlTW9kZWwjZ2V0QXR0MSA8ZW0+QXR0MTwvZW0+fTwvbGk+CisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmZvcmNpbmcuR2F1c3NpYW4yRm9yY2luZ0Rpc2Vhc2VNb2RlbCNnZXRBdHQyIDxlbT5BdHQyPC9lbT59PC9saT4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZm9yY2luZy5HYXVzc2lhbjJGb3JjaW5nRGlzZWFzZU1vZGVsI2dldEF0dDMgPGVtPkF0dDM8L2VtPn08L2xpPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5mb3JjaW5nLkdhdXNzaWFuMkZvcmNpbmdEaXNlYXNlTW9kZWwjZ2V0QXR0NCA8ZW0+QXR0NDwvZW0+fTwvbGk+CisgKiA8L3VsPgorICogPC9wPgorICoKKyAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmZvcmNpbmcuRm9yY2luZ1BhY2thZ2UjZ2V0R2F1c3NpYW4yRm9yY2luZ0Rpc2Vhc2VNb2RlbCgpCisgKiBAbW9kZWwKKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGludGVyZmFjZSBHYXVzc2lhbjJGb3JjaW5nRGlzZWFzZU1vZGVsIGV4dGVuZHMgR2F1c3NpYW5Gb3JjaW5nRGlzZWFzZU1vZGVsIHsKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5TaWdtYTIgMjwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIGlzIDxjb2RlPiIxMDAiPC9jb2RlPi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDxwPgorCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPlNpZ21hMiAyPC9lbT4nIGF0dHJpYnV0ZSBpc24ndCBjbGVhciwKKwkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uCisJICogPC9wPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPlNpZ21hMiAyPC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiBAc2VlICNzZXRTaWdtYTJfMihkb3VibGUpCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZm9yY2luZy5Gb3JjaW5nUGFja2FnZSNnZXRHYXVzc2lhbjJGb3JjaW5nRGlzZWFzZU1vZGVsX1NpZ21hMl8yKCkKKwkgKiBAbW9kZWwgZGVmYXVsdD0iMTAwIgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlkb3VibGUgZ2V0U2lnbWEyXzIoKTsKKworCS8qKgorCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5mb3JjaW5nLkdhdXNzaWFuMkZvcmNpbmdEaXNlYXNlTW9kZWwjZ2V0U2lnbWEyXzIgPGVtPlNpZ21hMiAyPC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5TaWdtYTIgMjwvZW0+JyBhdHRyaWJ1dGUuCisJICogQHNlZSAjZ2V0U2lnbWEyXzIoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwl2b2lkIHNldFNpZ21hMl8yKGRvdWJsZSB2YWx1ZSk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5BdHQxPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogVGhlIGRlZmF1bHQgdmFsdWUgaXMgPGNvZGU+IjEuMCI8L2NvZGU+LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPHA+CisJICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+QXR0MTwvZW0+JyBhdHRyaWJ1dGUgaXNuJ3QgY2xlYXIsCisJICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLgorCSAqIDwvcD4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5BdHQxPC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiBAc2VlICNzZXRBdHQxKGRvdWJsZSkKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5mb3JjaW5nLkZvcmNpbmdQYWNrYWdlI2dldEdhdXNzaWFuMkZvcmNpbmdEaXNlYXNlTW9kZWxfQXR0MSgpCisJICogQG1vZGVsIGRlZmF1bHQ9IjEuMCIKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJZG91YmxlIGdldEF0dDEoKTsKKworCS8qKgorCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5mb3JjaW5nLkdhdXNzaWFuMkZvcmNpbmdEaXNlYXNlTW9kZWwjZ2V0QXR0MSA8ZW0+QXR0MTwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+QXR0MTwvZW0+JyBhdHRyaWJ1dGUuCisJICogQHNlZSAjZ2V0QXR0MSgpCisJICogQGdlbmVyYXRlZAorCSAqLworCXZvaWQgc2V0QXR0MShkb3VibGUgdmFsdWUpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+QXR0MjwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIGlzIDxjb2RlPiIxLjAiPC9jb2RlPi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDxwPgorCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPkF0dDI8L2VtPicgYXR0cmlidXRlIGlzbid0IGNsZWFyLAorCSAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4KKwkgKiA8L3A+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+QXR0MjwvZW0+JyBhdHRyaWJ1dGUuCisJICogQHNlZSAjc2V0QXR0Mihkb3VibGUpCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZm9yY2luZy5Gb3JjaW5nUGFja2FnZSNnZXRHYXVzc2lhbjJGb3JjaW5nRGlzZWFzZU1vZGVsX0F0dDIoKQorCSAqIEBtb2RlbCBkZWZhdWx0PSIxLjAiCisJICogQGdlbmVyYXRlZAorCSAqLworCWRvdWJsZSBnZXRBdHQyKCk7CisKKwkvKioKKwkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZm9yY2luZy5HYXVzc2lhbjJGb3JjaW5nRGlzZWFzZU1vZGVsI2dldEF0dDIgPGVtPkF0dDI8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPkF0dDI8L2VtPicgYXR0cmlidXRlLgorCSAqIEBzZWUgI2dldEF0dDIoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwl2b2lkIHNldEF0dDIoZG91YmxlIHZhbHVlKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPkF0dDM8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyA8Y29kZT4iMS4wIjwvY29kZT4uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8cD4KKwkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5BdHQzPC9lbT4nIGF0dHJpYnV0ZSBpc24ndCBjbGVhciwKKwkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uCisJICogPC9wPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPkF0dDM8L2VtPicgYXR0cmlidXRlLgorCSAqIEBzZWUgI3NldEF0dDMoZG91YmxlKQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmZvcmNpbmcuRm9yY2luZ1BhY2thZ2UjZ2V0R2F1c3NpYW4yRm9yY2luZ0Rpc2Vhc2VNb2RlbF9BdHQzKCkKKwkgKiBAbW9kZWwgZGVmYXVsdD0iMS4wIgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlkb3VibGUgZ2V0QXR0MygpOworCisJLyoqCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmZvcmNpbmcuR2F1c3NpYW4yRm9yY2luZ0Rpc2Vhc2VNb2RlbCNnZXRBdHQzIDxlbT5BdHQzPC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5BdHQzPC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiBAc2VlICNnZXRBdHQzKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJdm9pZCBzZXRBdHQzKGRvdWJsZSB2YWx1ZSk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5BdHQ0PC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogVGhlIGRlZmF1bHQgdmFsdWUgaXMgPGNvZGU+IjEuMCI8L2NvZGU+LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPHA+CisJICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+QXR0NDwvZW0+JyBhdHRyaWJ1dGUgaXNuJ3QgY2xlYXIsCisJICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLgorCSAqIDwvcD4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5BdHQ0PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiBAc2VlICNzZXRBdHQ0KGRvdWJsZSkKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5mb3JjaW5nLkZvcmNpbmdQYWNrYWdlI2dldEdhdXNzaWFuMkZvcmNpbmdEaXNlYXNlTW9kZWxfQXR0NCgpCisJICogQG1vZGVsIGRlZmF1bHQ9IjEuMCIKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJZG91YmxlIGdldEF0dDQoKTsKKworCS8qKgorCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5mb3JjaW5nLkdhdXNzaWFuMkZvcmNpbmdEaXNlYXNlTW9kZWwjZ2V0QXR0NCA8ZW0+QXR0NDwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+QXR0NDwvZW0+JyBhdHRyaWJ1dGUuCisJICogQHNlZSAjZ2V0QXR0NCgpCisJICogQGdlbmVyYXRlZAorCSAqLworCXZvaWQgc2V0QXR0NChkb3VibGUgdmFsdWUpOworCit9IC8vIEdhdXNzaWFuMkZvcmNpbmdEaXNlYXNlTW9kZWwKZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmZvcmNpbmcvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9mb3JjaW5nL0dhdXNzaWFuM0ZvcmNpbmdEaXNlYXNlTW9kZWwuamF2YSBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmZvcmNpbmcvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9mb3JjaW5nL0dhdXNzaWFuM0ZvcmNpbmdEaXNlYXNlTW9kZWwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MmNkOTVjCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZm9yY2luZy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL2ZvcmNpbmcvR2F1c3NpYW4zRm9yY2luZ0Rpc2Vhc2VNb2RlbC5qYXZhCkBAIC0wLDAgKzEsMTQyIEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5mb3JjaW5nOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDEwIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogQSByZXByZXNlbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+R2F1c3NpYW4zIEZvcmNpbmcgRGlzZWFzZSBNb2RlbDwvYj48L2VtPicuCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqCisgKiA8cD4KKyAqIFRoZSBmb2xsb3dpbmcgZmVhdHVyZXMgYXJlIHN1cHBvcnRlZDoKKyAqIDx1bD4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZm9yY2luZy5HYXVzc2lhbjNGb3JjaW5nRGlzZWFzZU1vZGVsI2dldFNpZ21hMl8zIDxlbT5TaWdtYTIgMzwvZW0+fTwvbGk+CisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmZvcmNpbmcuR2F1c3NpYW4zRm9yY2luZ0Rpc2Vhc2VNb2RlbCNnZXRUcmFuc21pc3Npb25SYXRlMiA8ZW0+VHJhbnNtaXNzaW9uIFJhdGUyPC9lbT59PC9saT4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZm9yY2luZy5HYXVzc2lhbjNGb3JjaW5nRGlzZWFzZU1vZGVsI2dldFRyYW5zbWlzc2lvblJhdGUzIDxlbT5UcmFuc21pc3Npb24gUmF0ZTM8L2VtPn08L2xpPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5mb3JjaW5nLkdhdXNzaWFuM0ZvcmNpbmdEaXNlYXNlTW9kZWwjZ2V0TW9kdWxhdGlvbkZsb29yXzIgPGVtPk1vZHVsYXRpb24gRmxvb3IgMjwvZW0+fTwvbGk+CisgKiA8L3VsPgorICogPC9wPgorICoKKyAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmZvcmNpbmcuRm9yY2luZ1BhY2thZ2UjZ2V0R2F1c3NpYW4zRm9yY2luZ0Rpc2Vhc2VNb2RlbCgpCisgKiBAbW9kZWwKKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGludGVyZmFjZSBHYXVzc2lhbjNGb3JjaW5nRGlzZWFzZU1vZGVsIGV4dGVuZHMgR2F1c3NpYW4yRm9yY2luZ0Rpc2Vhc2VNb2RlbCB7CisJLyoqCisJICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+U2lnbWEyIDM8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyA8Y29kZT4iMTAwIjwvY29kZT4uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8cD4KKwkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5TaWdtYTIgMzwvZW0+JyBhdHRyaWJ1dGUgaXNuJ3QgY2xlYXIsCisJICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLgorCSAqIDwvcD4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5TaWdtYTIgMzwvZW0+JyBhdHRyaWJ1dGUuCisJICogQHNlZSAjc2V0U2lnbWEyXzMoZG91YmxlKQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmZvcmNpbmcuRm9yY2luZ1BhY2thZ2UjZ2V0R2F1c3NpYW4zRm9yY2luZ0Rpc2Vhc2VNb2RlbF9TaWdtYTJfMygpCisJICogQG1vZGVsIGRlZmF1bHQ9IjEwMCIKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJZG91YmxlIGdldFNpZ21hMl8zKCk7CisKKwkvKioKKwkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZm9yY2luZy5HYXVzc2lhbjNGb3JjaW5nRGlzZWFzZU1vZGVsI2dldFNpZ21hMl8zIDxlbT5TaWdtYTIgMzwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+U2lnbWEyIDM8L2VtPicgYXR0cmlidXRlLgorCSAqIEBzZWUgI2dldFNpZ21hMl8zKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJdm9pZCBzZXRTaWdtYTJfMyhkb3VibGUgdmFsdWUpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+VHJhbnNtaXNzaW9uIFJhdGUyPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogVGhlIGRlZmF1bHQgdmFsdWUgaXMgPGNvZGU+IjAuMCI8L2NvZGU+LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPHA+CisJICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+VHJhbnNtaXNzaW9uIFJhdGUyPC9lbT4nIGF0dHJpYnV0ZSBpc24ndCBjbGVhciwKKwkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uCisJICogPC9wPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPlRyYW5zbWlzc2lvbiBSYXRlMjwvZW0+JyBhdHRyaWJ1dGUuCisJICogQHNlZSAjc2V0VHJhbnNtaXNzaW9uUmF0ZTIoZG91YmxlKQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmZvcmNpbmcuRm9yY2luZ1BhY2thZ2UjZ2V0R2F1c3NpYW4zRm9yY2luZ0Rpc2Vhc2VNb2RlbF9UcmFuc21pc3Npb25SYXRlMigpCisJICogQG1vZGVsIGRlZmF1bHQ9IjAuMCIKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJZG91YmxlIGdldFRyYW5zbWlzc2lvblJhdGUyKCk7CisKKwkvKioKKwkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZm9yY2luZy5HYXVzc2lhbjNGb3JjaW5nRGlzZWFzZU1vZGVsI2dldFRyYW5zbWlzc2lvblJhdGUyIDxlbT5UcmFuc21pc3Npb24gUmF0ZTI8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPlRyYW5zbWlzc2lvbiBSYXRlMjwvZW0+JyBhdHRyaWJ1dGUuCisJICogQHNlZSAjZ2V0VHJhbnNtaXNzaW9uUmF0ZTIoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwl2b2lkIHNldFRyYW5zbWlzc2lvblJhdGUyKGRvdWJsZSB2YWx1ZSk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5UcmFuc21pc3Npb24gUmF0ZTM8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyA8Y29kZT4iMC4wIjwvY29kZT4uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8cD4KKwkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5UcmFuc21pc3Npb24gUmF0ZTM8L2VtPicgYXR0cmlidXRlIGlzbid0IGNsZWFyLAorCSAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4KKwkgKiA8L3A+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+VHJhbnNtaXNzaW9uIFJhdGUzPC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiBAc2VlICNzZXRUcmFuc21pc3Npb25SYXRlMyhkb3VibGUpCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZm9yY2luZy5Gb3JjaW5nUGFja2FnZSNnZXRHYXVzc2lhbjNGb3JjaW5nRGlzZWFzZU1vZGVsX1RyYW5zbWlzc2lvblJhdGUzKCkKKwkgKiBAbW9kZWwgZGVmYXVsdD0iMC4wIgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlkb3VibGUgZ2V0VHJhbnNtaXNzaW9uUmF0ZTMoKTsKKworCS8qKgorCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5mb3JjaW5nLkdhdXNzaWFuM0ZvcmNpbmdEaXNlYXNlTW9kZWwjZ2V0VHJhbnNtaXNzaW9uUmF0ZTMgPGVtPlRyYW5zbWlzc2lvbiBSYXRlMzwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+VHJhbnNtaXNzaW9uIFJhdGUzPC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiBAc2VlICNnZXRUcmFuc21pc3Npb25SYXRlMygpCisJICogQGdlbmVyYXRlZAorCSAqLworCXZvaWQgc2V0VHJhbnNtaXNzaW9uUmF0ZTMoZG91YmxlIHZhbHVlKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPk1vZHVsYXRpb24gRmxvb3IgMjwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIGlzIDxjb2RlPiIwLjYiPC9jb2RlPi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDxwPgorCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPk1vZHVsYXRpb24gRmxvb3IgMjwvZW0+JyBhdHRyaWJ1dGUgaXNuJ3QgY2xlYXIsCisJICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLgorCSAqIDwvcD4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5Nb2R1bGF0aW9uIEZsb29yIDI8L2VtPicgYXR0cmlidXRlLgorCSAqIEBzZWUgI3NldE1vZHVsYXRpb25GbG9vcl8yKGRvdWJsZSkKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5mb3JjaW5nLkZvcmNpbmdQYWNrYWdlI2dldEdhdXNzaWFuM0ZvcmNpbmdEaXNlYXNlTW9kZWxfTW9kdWxhdGlvbkZsb29yXzIoKQorCSAqIEBtb2RlbCBkZWZhdWx0PSIwLjYiCisJICogQGdlbmVyYXRlZAorCSAqLworCWRvdWJsZSBnZXRNb2R1bGF0aW9uRmxvb3JfMigpOworCisJLyoqCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmZvcmNpbmcuR2F1c3NpYW4zRm9yY2luZ0Rpc2Vhc2VNb2RlbCNnZXRNb2R1bGF0aW9uRmxvb3JfMiA8ZW0+TW9kdWxhdGlvbiBGbG9vciAyPC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5Nb2R1bGF0aW9uIEZsb29yIDI8L2VtPicgYXR0cmlidXRlLgorCSAqIEBzZWUgI2dldE1vZHVsYXRpb25GbG9vcl8yKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJdm9pZCBzZXRNb2R1bGF0aW9uRmxvb3JfMihkb3VibGUgdmFsdWUpOworCit9IC8vIEdhdXNzaWFuM0ZvcmNpbmdEaXNlYXNlTW9kZWwKZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmZvcmNpbmcvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9mb3JjaW5nL0dhdXNzaWFuRm9yY2luZ0Rpc2Vhc2VNb2RlbC5qYXZhIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZm9yY2luZy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL2ZvcmNpbmcvR2F1c3NpYW5Gb3JjaW5nRGlzZWFzZU1vZGVsLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2IzMTcxNAotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmZvcmNpbmcvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9mb3JjaW5nL0dhdXNzaWFuRm9yY2luZ0Rpc2Vhc2VNb2RlbC5qYXZhCkBAIC0wLDAgKzEsMTQzIEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5mb3JjaW5nOworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAxMCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RvY2hhc3RpY1NJUkRpc2Vhc2VNb2RlbDsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogQSByZXByZXNlbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+R2F1c3NpYW4gRm9yY2luZyBEaXNlYXNlIE1vZGVsPC9iPjwvZW0+Jy4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICoKKyAqIDxwPgorICogVGhlIGZvbGxvd2luZyBmZWF0dXJlcyBhcmUgc3VwcG9ydGVkOgorICogPHVsPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5mb3JjaW5nLkdhdXNzaWFuRm9yY2luZ0Rpc2Vhc2VNb2RlbCNnZXRTaWdtYTIgPGVtPlNpZ21hMjwvZW0+fTwvbGk+CisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmZvcmNpbmcuR2F1c3NpYW5Gb3JjaW5nRGlzZWFzZU1vZGVsI2dldE1vZHVsYXRpb25QZXJpb2QgPGVtPk1vZHVsYXRpb24gUGVyaW9kPC9lbT59PC9saT4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZm9yY2luZy5HYXVzc2lhbkZvcmNpbmdEaXNlYXNlTW9kZWwjZ2V0TW9kdWxhdGlvblBoYXNlU2hpZnQgPGVtPk1vZHVsYXRpb24gUGhhc2UgU2hpZnQ8L2VtPn08L2xpPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5mb3JjaW5nLkdhdXNzaWFuRm9yY2luZ0Rpc2Vhc2VNb2RlbCNnZXRNb2R1bGF0aW9uRmxvb3IgPGVtPk1vZHVsYXRpb24gRmxvb3I8L2VtPn08L2xpPgorICogPC91bD4KKyAqIDwvcD4KKyAqCisgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5mb3JjaW5nLkZvcmNpbmdQYWNrYWdlI2dldEdhdXNzaWFuRm9yY2luZ0Rpc2Vhc2VNb2RlbCgpCisgKiBAbW9kZWwKKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGludGVyZmFjZSBHYXVzc2lhbkZvcmNpbmdEaXNlYXNlTW9kZWwgZXh0ZW5kcyBTdG9jaGFzdGljU0lSRGlzZWFzZU1vZGVsIHsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPlNpZ21hMjwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIGlzIDxjb2RlPiIxMDAiPC9jb2RlPi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDxwPgorCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPlNpZ21hMjwvZW0+JyBhdHRyaWJ1dGUgaXNuJ3QgY2xlYXIsCisJICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLgorCSAqIDwvcD4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5TaWdtYTI8L2VtPicgYXR0cmlidXRlLgorCSAqIEBzZWUgI3NldFNpZ21hMihkb3VibGUpCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZm9yY2luZy5Gb3JjaW5nUGFja2FnZSNnZXRHYXVzc2lhbkZvcmNpbmdEaXNlYXNlTW9kZWxfU2lnbWEyKCkKKwkgKiBAbW9kZWwgZGVmYXVsdD0iMTAwIgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlkb3VibGUgZ2V0U2lnbWEyKCk7CisKKwkvKioKKwkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZm9yY2luZy5HYXVzc2lhbkZvcmNpbmdEaXNlYXNlTW9kZWwjZ2V0U2lnbWEyIDxlbT5TaWdtYTI8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPlNpZ21hMjwvZW0+JyBhdHRyaWJ1dGUuCisJICogQHNlZSAjZ2V0U2lnbWEyKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJdm9pZCBzZXRTaWdtYTIoZG91YmxlIHZhbHVlKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPk1vZHVsYXRpb24gUGVyaW9kPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogVGhlIGRlZmF1bHQgdmFsdWUgaXMgPGNvZGU+IjM2NS4yNSI8L2NvZGU+LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPHA+CisJICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+TW9kdWxhdGlvbiBQZXJpb2Q8L2VtPicgYXR0cmlidXRlIGlzbid0IGNsZWFyLAorCSAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4KKwkgKiA8L3A+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+TW9kdWxhdGlvbiBQZXJpb2Q8L2VtPicgYXR0cmlidXRlLgorCSAqIEBzZWUgI3NldE1vZHVsYXRpb25QZXJpb2QoZG91YmxlKQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmZvcmNpbmcuRm9yY2luZ1BhY2thZ2UjZ2V0R2F1c3NpYW5Gb3JjaW5nRGlzZWFzZU1vZGVsX01vZHVsYXRpb25QZXJpb2QoKQorCSAqIEBtb2RlbCBkZWZhdWx0PSIzNjUuMjUiCisJICogQGdlbmVyYXRlZAorCSAqLworCWRvdWJsZSBnZXRNb2R1bGF0aW9uUGVyaW9kKCk7CisKKwkvKioKKwkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZm9yY2luZy5HYXVzc2lhbkZvcmNpbmdEaXNlYXNlTW9kZWwjZ2V0TW9kdWxhdGlvblBlcmlvZCA8ZW0+TW9kdWxhdGlvbiBQZXJpb2Q8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPk1vZHVsYXRpb24gUGVyaW9kPC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiBAc2VlICNnZXRNb2R1bGF0aW9uUGVyaW9kKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJdm9pZCBzZXRNb2R1bGF0aW9uUGVyaW9kKGRvdWJsZSB2YWx1ZSk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5Nb2R1bGF0aW9uIFBoYXNlIFNoaWZ0PC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogVGhlIGRlZmF1bHQgdmFsdWUgaXMgPGNvZGU+IjAiPC9jb2RlPi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDxwPgorCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPk1vZHVsYXRpb24gUGhhc2UgU2hpZnQ8L2VtPicgYXR0cmlidXRlIGlzbid0IGNsZWFyLAorCSAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4KKwkgKiA8L3A+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+TW9kdWxhdGlvbiBQaGFzZSBTaGlmdDwvZW0+JyBhdHRyaWJ1dGUuCisJICogQHNlZSAjc2V0TW9kdWxhdGlvblBoYXNlU2hpZnQoZG91YmxlKQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmZvcmNpbmcuRm9yY2luZ1BhY2thZ2UjZ2V0R2F1c3NpYW5Gb3JjaW5nRGlzZWFzZU1vZGVsX01vZHVsYXRpb25QaGFzZVNoaWZ0KCkKKwkgKiBAbW9kZWwgZGVmYXVsdD0iMCIKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJZG91YmxlIGdldE1vZHVsYXRpb25QaGFzZVNoaWZ0KCk7CisKKwkvKioKKwkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZm9yY2luZy5HYXVzc2lhbkZvcmNpbmdEaXNlYXNlTW9kZWwjZ2V0TW9kdWxhdGlvblBoYXNlU2hpZnQgPGVtPk1vZHVsYXRpb24gUGhhc2UgU2hpZnQ8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPk1vZHVsYXRpb24gUGhhc2UgU2hpZnQ8L2VtPicgYXR0cmlidXRlLgorCSAqIEBzZWUgI2dldE1vZHVsYXRpb25QaGFzZVNoaWZ0KCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJdm9pZCBzZXRNb2R1bGF0aW9uUGhhc2VTaGlmdChkb3VibGUgdmFsdWUpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+TW9kdWxhdGlvbiBGbG9vcjwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIGlzIDxjb2RlPiIwLjYiPC9jb2RlPi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDxwPgorCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPk1vZHVsYXRpb24gRmxvb3I8L2VtPicgYXR0cmlidXRlIGlzbid0IGNsZWFyLAorCSAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4KKwkgKiA8L3A+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+TW9kdWxhdGlvbiBGbG9vcjwvZW0+JyBhdHRyaWJ1dGUuCisJICogQHNlZSAjc2V0TW9kdWxhdGlvbkZsb29yKGRvdWJsZSkKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5mb3JjaW5nLkZvcmNpbmdQYWNrYWdlI2dldEdhdXNzaWFuRm9yY2luZ0Rpc2Vhc2VNb2RlbF9Nb2R1bGF0aW9uRmxvb3IoKQorCSAqIEBtb2RlbCBkZWZhdWx0PSIwLjYiCisJICogQGdlbmVyYXRlZAorCSAqLworCWRvdWJsZSBnZXRNb2R1bGF0aW9uRmxvb3IoKTsKKworCS8qKgorCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5mb3JjaW5nLkdhdXNzaWFuRm9yY2luZ0Rpc2Vhc2VNb2RlbCNnZXRNb2R1bGF0aW9uRmxvb3IgPGVtPk1vZHVsYXRpb24gRmxvb3I8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPk1vZHVsYXRpb24gRmxvb3I8L2VtPicgYXR0cmlidXRlLgorCSAqIEBzZWUgI2dldE1vZHVsYXRpb25GbG9vcigpCisJICogQGdlbmVyYXRlZAorCSAqLworCXZvaWQgc2V0TW9kdWxhdGlvbkZsb29yKGRvdWJsZSB2YWx1ZSk7Cit9IC8vIEdhdXNzaWFuRm9yY2luZ0Rpc2Vhc2VNb2RlbApkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZm9yY2luZy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL2ZvcmNpbmcvaW1wbC9Gb3JjaW5nRGlzZWFzZU1vZGVsSW1wbC5qYXZhIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZm9yY2luZy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL2ZvcmNpbmcvaW1wbC9Gb3JjaW5nRGlzZWFzZU1vZGVsSW1wbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQxNjIxOGQKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5mb3JjaW5nL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvZm9yY2luZy9pbXBsL0ZvcmNpbmdEaXNlYXNlTW9kZWxJbXBsLmphdmEKQEAgLTAsMCArMSw0OTMgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmZvcmNpbmcuaW1wbDsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqYXZhLnV0aWwuQ2FsZW5kYXI7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzczsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuaW1wbC5FTm90aWZpY2F0aW9uSW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuU1RFTVRpbWU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmZvcmNpbmcuRm9yY2luZ0Rpc2Vhc2VNb2RlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZm9yY2luZy5Gb3JjaW5nUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU0lMYWJlbFZhbHVlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TSVJMYWJlbFZhbHVlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsVmFsdWU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLmltcGwuU0lSTGFiZWxWYWx1ZUltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLmltcGwuU3RvY2hhc3RpY1NJUkRpc2Vhc2VNb2RlbEltcGw7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIEFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5EaXNlYXNlIE1vZGVsPC9iPjwvZW0+Jy4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogPHA+CisgKiBUaGUgZm9sbG93aW5nIGZlYXR1cmVzIGFyZSBpbXBsZW1lbnRlZDoKKyAqIDx1bD4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZm9yY2luZy5pbXBsLkZvcmNpbmdEaXNlYXNlTW9kZWxJbXBsI2dldE1vZHVsYXRpb25FeHBvbmVudCA8ZW0+TW9kdWxhdGlvbiBFeHBvbmVudDwvZW0+fTwvbGk+CisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmZvcmNpbmcuaW1wbC5Gb3JjaW5nRGlzZWFzZU1vZGVsSW1wbCNnZXRNb2R1bGF0aW9uUGVyaW9kIDxlbT5Nb2R1bGF0aW9uIFBlcmlvZDwvZW0+fTwvbGk+CisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmZvcmNpbmcuaW1wbC5Gb3JjaW5nRGlzZWFzZU1vZGVsSW1wbCNnZXRNb2R1bGF0aW9uUGhhc2VTaGlmdCA8ZW0+TW9kdWxhdGlvbiBQaGFzZSBTaGlmdDwvZW0+fTwvbGk+CisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmZvcmNpbmcuaW1wbC5Gb3JjaW5nRGlzZWFzZU1vZGVsSW1wbCNnZXRNb2R1bGF0aW9uRmxvb3IgPGVtPk1vZHVsYXRpb24gRmxvb3I8L2VtPn08L2xpPgorICogPC91bD4KKyAqIDwvcD4KKyAqCisgKiBAZ2VuZXJhdGVkCisgKi8KK0BTdXBwcmVzc1dhcm5pbmdzKCJib3hpbmciKQorcHVibGljIGNsYXNzIEZvcmNpbmdEaXNlYXNlTW9kZWxJbXBsIGV4dGVuZHMgU3RvY2hhc3RpY1NJUkRpc2Vhc2VNb2RlbEltcGwgaW1wbGVtZW50cyBGb3JjaW5nRGlzZWFzZU1vZGVsIHsKKwkKKwkvKioKKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0TW9kdWxhdGlvbkV4cG9uZW50KCkgPGVtPk1vZHVsYXRpb24gRXhwb25lbnQ8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI2dldE1vZHVsYXRpb25FeHBvbmVudCgpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBkb3VibGUgTU9EVUxBVElPTl9FWFBPTkVOVF9FREVGQVVMVCA9IDIuMDsKKwkvKioKKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRNb2R1bGF0aW9uRXhwb25lbnQoKSA8ZW0+TW9kdWxhdGlvbiBFeHBvbmVudDwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZ2V0TW9kdWxhdGlvbkV4cG9uZW50KCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgZG91YmxlIG1vZHVsYXRpb25FeHBvbmVudCA9IE1PRFVMQVRJT05fRVhQT05FTlRfRURFRkFVTFQ7CisJLyoqCisJICogVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldE1vZHVsYXRpb25QZXJpb2QoKSA8ZW0+TW9kdWxhdGlvbiBQZXJpb2Q8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI2dldE1vZHVsYXRpb25QZXJpb2QoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgZG91YmxlIE1PRFVMQVRJT05fUEVSSU9EX0VERUZBVUxUID0gMzY1LjI1NjM2MzA1MTsKKwkvKioKKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRNb2R1bGF0aW9uUGVyaW9kKCkgPGVtPk1vZHVsYXRpb24gUGVyaW9kPC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNnZXRNb2R1bGF0aW9uUGVyaW9kKCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgZG91YmxlIG1vZHVsYXRpb25QZXJpb2QgPSBNT0RVTEFUSU9OX1BFUklPRF9FREVGQVVMVDsKKwkvKioKKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0TW9kdWxhdGlvblBoYXNlU2hpZnQoKSA8ZW0+TW9kdWxhdGlvbiBQaGFzZSBTaGlmdDwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZ2V0TW9kdWxhdGlvblBoYXNlU2hpZnQoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgZG91YmxlIE1PRFVMQVRJT05fUEhBU0VfU0hJRlRfRURFRkFVTFQgPSAwLjA7CisJLyoqCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0TW9kdWxhdGlvblBoYXNlU2hpZnQoKSA8ZW0+TW9kdWxhdGlvbiBQaGFzZSBTaGlmdDwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZ2V0TW9kdWxhdGlvblBoYXNlU2hpZnQoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBkb3VibGUgbW9kdWxhdGlvblBoYXNlU2hpZnQgPSBNT0RVTEFUSU9OX1BIQVNFX1NISUZUX0VERUZBVUxUOworCS8qKgorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRNb2R1bGF0aW9uRmxvb3IoKSA8ZW0+TW9kdWxhdGlvbiBGbG9vcjwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZ2V0TW9kdWxhdGlvbkZsb29yKCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIGRvdWJsZSBNT0RVTEFUSU9OX0ZMT09SX0VERUZBVUxUID0gMC42OworCS8qKgorCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldE1vZHVsYXRpb25GbG9vcigpIDxlbT5Nb2R1bGF0aW9uIEZsb29yPC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNnZXRNb2R1bGF0aW9uRmxvb3IoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBkb3VibGUgbW9kdWxhdGlvbkZsb29yID0gTU9EVUxBVElPTl9GTE9PUl9FREVGQVVMVDsKKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBkb3VibGUgTUlMTElTX1BFUl9EQVkgPSAxMDAwLjAqNjAuMCo2MC4wKjI0LjA7CisJCisJcHJpdmF0ZSBmaW5hbCBDYWxlbmRhciBjYWxlbmRhciA9IENhbGVuZGFyLmdldEluc3RhbmNlKCk7CisJCisJCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCXB1YmxpYyBGb3JjaW5nRGlzZWFzZU1vZGVsSW1wbCgpIHsKKwkJc3VwZXIoKTsKKwl9CisJCisJCisJLyoqCisJICogVG8gY3JlYXRlIGEgdXNlciBkZWZpbmVkIChleHBlcmltZW50YWwpIGRpc2Vhc2UgbW9kZSwgdGhlIHVzZXIgbWF5IHdpc2ggCisJICogdG8gZXh0ZW5kIHRoZSBleGlzdGluZyBtb2RlbHMgYnV0IHNpbXBseSBvdmVycmlkZSB0d28gbWV0aG9kcy4KKwkgKiBjb21wdXRlRGlzZWFzZURlbHRhcygpIHNldHMgdGhlIHdvcmsgZmxvdyBmb3IgdGhlIG1vZGVsLiBUaGUgZm9sbG93aW5nIGV4YW1wbGUKKwkgKiBpcyBkZXJpdmVkIGZyb20gdGhlIHN0YW5kYXJkIGNvZGUgZm9yIGFsbCBidWlsZCBpbiBtb2RlbHMgYnV0IGluIHRoZSBsaW5lIGJlbG93CisJICogd2hlcmUgd2UgZGVmaW5lIGZpbmFsICJkb3VibGUgdHJhbnNtaXNpb25SYXRlIiB3ZSBzaG93IGFuZCBleGFtcGxlIG1vZGlmaWNhdGlvbgorCSAqIHdoZXJlIGEgcGVyaW9kaWMgZm9yY2luZyBmYWN0b3IgeyBzaW4oZnJlcSp0KSB9IGlzIGFkZGVkIHRvIHRoZSBjb2RlIGFzIGFuIGV4YW1wbGUKKwkgKiBtb2RpZmljYXRpb24uCisJICogCisJICogQHBhcmFtIHRpbWUKKwkgKiAJCQkgIGN1cnJlbnQgdGltZQorCSAqIEBwYXJhbSBjdXJyZW50U3RhdGUKKwkgKiAgICAgICAgICAgIHRoZSBjdXJyZW50IHN0YXRlIG9mIHRoZSBwb3B1bGF0aW9uCisJICogQHBhcmFtIGRpc2Vhc2VMYWJlbAorCSAqICAgICAgICAgICAgdGhlIGRpc2Vhc2UgbGFiZWwgZm9yIHdoaWNoIHRoZSBzdGF0ZSB0cmFuc2l0aW9ucyBhcmUgYmVpbmcKKwkgKiAgICAgICAgICAgIGNvbXB1dGVkLgorCSAqIEBwYXJhbSB0aW1lRGVsdGEKKwkgKiAgICAgICAgICAgIHRoZSB0aW1lIHBlcmlvZCAobWlsbGlzZWNvbmRzKSBvdmVyIHdoaWNoIHRoZSBwb3B1bGF0aW9uCisJICogICAgICAgICAgICBtZW1iZXJzIHRyYW5zaXRpb24gdG8gbmV3IHN0YXRlcyAgICAgICAgICAKKwkgKiBAcmV0dXJuIGEgZGlzZWFzZSBzdGF0ZSBsYWJlbCB2YWx1ZSB0aGF0IGNvbnRhaW5zIHRoZSBudW1iZXIgb2YKKwkgKiAgICAgICAgIGRlbHRhIGNoYW5nZXMgaW4gZWFjaCBkaXNlYXNlIHN0YXRlCisJICogCisJICogVXNlcnMgY2FuIG1vZGlmeSB0aGUgbWV0aG9kIGJlbG93IHRvIGNyZWF0ZSB0aGVpciBvd24gbW9kZWwuCisJICogCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuaW1wbC5TSUltcGwjY29tcHV0ZURpc2Vhc2VEZWx0YXMoU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbFZhbHVlLAorCSAqICAgICAgU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbCwgbG9uZykKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbFZhbHVlIGNvbXB1dGVEaXNlYXNlRGVsdGFzKAorCQkJZmluYWwgU1RFTVRpbWUgdGltZSwKKwkJCWZpbmFsIFN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZSBjdXJyZW50U3RhdGUsCisJCQlmaW5hbCBTdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsIGRpc2Vhc2VMYWJlbCwgZmluYWwgbG9uZyB0aW1lRGVsdGEsIERpc2Vhc2VNb2RlbExhYmVsVmFsdWUgcmV0dXJuVmFsdWUpIHsKK2ZpbmFsIFNJUkxhYmVsVmFsdWUgY3VycmVudFNJUiA9IChTSVJMYWJlbFZhbHVlKSBjdXJyZW50U3RhdGU7CisJCQorCQlkb3VibGUgY3VycmVudE1pbGxpcyA9IHRpbWUuZ2V0VGltZSgpLmdldFRpbWUoKTsKKwkJZG91YmxlIHNlYXNvbmFsTW9kdWxhdGlvbkV4cG9uZW50ID0gZ2V0TW9kdWxhdGlvbkV4cG9uZW50KCk7CisJCWRvdWJsZSBzZWFzb25hbE1vZHVsYXRpb25GbG9vciA9IGdldE1vZHVsYXRpb25GbG9vcigpOworCQlkb3VibGUgbW9kdWxhdGlvblBlcmlvZCA9IGdldE1vZHVsYXRpb25QZXJpb2QoKTsKKwkJZG91YmxlIHBoYXNlID0gZ2V0TW9kdWxhdGlvblBoYXNlU2hpZnQoKTsJCisJCQkJCisJCS8vIEdldCB0aGUgeWVhciB0aGF0IG1hdGNoZXMgdGhlIHBoYXNlIHNoaWZ0LiAtcGkvMiBpcyAtbW9kdWxhdGlvblBlcmlvZC8yLCBwaS8yIGlzIG1vZHVsYXRpb25QZXJpb2QvMgorCQlsb25nIGFkanVzdGVkTWlsbGlzZWNzRm9yUGhhc2VTaGZ0ID0gKGxvbmcpKGN1cnJlbnRNaWxsaXMgKyBtb2R1bGF0aW9uUGVyaW9kKk1JTExJU19QRVJfREFZKnBoYXNlLygyLjAqTWF0aC5QSS8yLjApKTsKKwkJCisJCS8vaW50IHllYXI9MDsKKwkJLy8gU2hhcmVkIGNhbGVuZGFyIG9iamVjdCBub3QgdGhyZWFkIHNhZmUKKwkJc3luY2hyb25pemVkKGNhbGVuZGFyKSB7CisJCQljYWxlbmRhci5zZXRUaW1lSW5NaWxsaXMoYWRqdXN0ZWRNaWxsaXNlY3NGb3JQaGFzZVNoZnQpOworCQkJLy95ZWFyID0gY2FsZW5kYXIuZ2V0KENhbGVuZGFyLllFQVIpOworCQl9CisJCQorCQkKKwkJZG91YmxlIG1vZHVsYXRpb24gPSBzZWFzb25hbE1vZHVsYXRpb25GbG9vciArICgxLXNlYXNvbmFsTW9kdWxhdGlvbkZsb29yKSpNYXRoLnBvdyhNYXRoLmFicyhNYXRoLnNpbihwaGFzZSArIE1hdGguUEkqY3VycmVudE1pbGxpcy8obW9kdWxhdGlvblBlcmlvZCpNSUxMSVNfUEVSX0RBWSkpKSwgc2Vhc29uYWxNb2R1bGF0aW9uRXhwb25lbnQpOworCQkKKwkJCisJCQorCQkvLyBUaGlzIGlzIGJldGEqCisJCWRvdWJsZSB0cmFuc21pc3Npb25SYXRlID0gbW9kdWxhdGlvbiAqIChnZXRBZGp1c3RlZFRyYW5zbWlzc2lvblJhdGUodGltZURlbHRhKSk7CisKKwkJaWYoIXRoaXMuaXNGcmVxdWVuY3lEZXBlbmRlbnQoKSkgIHRyYW5zbWlzc2lvblJhdGUgKj0gZ2V0VHJhbnNtaXNzaW9uUmF0ZVNjYWxlRmFjdG9yKGRpc2Vhc2VMYWJlbCk7CisJCQorCQkvLyBUaGUgZWZmZWN0aXZlIEluZmVjdGlvdXMgcG9wdWxhdGlvbiAgaXMgYSBkaW1lbnNpb25sZXMgbnVtYmVyIG5vcm1hbGl6ZSBieSB0b3RhbAorCQkvLyBwb3B1bGF0aW9uIHVzZWQgaW4gdGVoIGNvbXB1dGF0aW9uIG9mIGJldHMqUyppIHdoZXJlIGkgPSBJZWZmZWN0aXZlL1BvcC4KKwkJLy8gVGhpcyBpbmNsdWRlcyBhIGNvcnJlY3Rpb24gdG8gdGhlIGN1cnJlbnQKKwkJLy8gaW5mZWN0aW91cyBwb3B1bGF0aW9uIChJZWZmZWN0aXZlKSBiYXNlZCBvbiB0aGUgY29uc2VydmVkIGV4Y2hhbmdlIG9mIHBlb3BsZSAoY2lyY3VsYXRpb24pCisJCS8vIGJldHdlZW4gcmVnaW9ucy4gTm90ZSB0aGF0IHRoaXMgaXMgbm8gdGhlICJhcnJpdmFscyIgYW5kICJkZXBhcnR1cmVzIiB3aGljaCBhcmUKKwkJLy8gYSBkaWZmZXJlbnQgcHJvY2Vzcy4KKwkJZmluYWwgZG91YmxlIGVmZmVjdGl2ZUluZmVjdGlvdXMgPSBnZXROb3JtYWxpemVkRWZmZWN0aXZlSW5mZWN0aW91cyhkaXNlYXNlTGFiZWwuZ2V0Tm9kZSgpLCBkaXNlYXNlTGFiZWwsIGN1cnJlbnRTSVIuZ2V0SSgpKTsKKworCQkvKgorCQkgKiBDb21wdXRlIHN0YXRlIHRyYW5zaXRpb25zCisJCSAqIAorCQkgKiBSZWdhcmRpbmcgY29tcHV0aW5nIHRoZSBudW1iZXIgb2YgdHJhbnNpdGlvbnMgZnJvbSBTdXNjZXB0aWJsZSB0byBFeHBvc2VkOgorCQkgKiBJbiBhIGxpbmVhciBtb2RlbCB0aGUgImVmZmVjdGl2ZSIgbnVtYmVyIG9mIGluZmVjdGlvdXMgcGVvcGxlIGlzIGp1c3QKKwkJICogdGhlIG51bWJlciBvZiBpbmZlY3Rpb3VzIHBlb3BsZSBJbiBhIG5vbmxpbmVhciBtb2RlbCB3ZSBoYXZlIGEKKwkJICogbm9uTGluZWFyaXR5IGV4cG9uZW50IHRoYXQgaXMgPiAxIHRoaXMgbW9kZWxzIHRoZSBlZmZlY3Qgb2YgaW1tdW5lCisJCSAqIHN5c3RlbSBzYXR1cmF0aW9uIHdoZW4gU3VzY2VwdGlibGUgcGVvcGxlIGFyZSBleHBvc2VkIHRvIGxhcmdlCisJCSAqIG51bWJlcnMgb2YgaW5mZWN0aW91cyBwZW9wbGUuIHRoZW4gdGhlICJlZmZlY3RpdmUiIG51bWJlciBvZgorCQkgKiBpbmZlY3Rpb3VzIHBlb3BsZSBpcyBJXm5vbkxpbmVhcml0eSBleHBvbmVudCB0byBhbGxvdyBmb3IgZWl0aGVyCisJCSAqIGxpbmVhciBvciBub25saW5lYXIgbW9kZWxzIHdlIGFsd2F5cyBjYWxjdWxhdGUgSV5ub25MaW5lYXJpdHkKKwkJICogZXhwb25lbnQgYW5kIGFsbG93IG5vbkxpbmVhcml0eSBleHBvbmVudCA+PSAxLjAKKwkJICovCisJCWRvdWJsZSBudW1iZXJPZkluZmVjdGVkVG9SZWNvdmVyZWQgPSBnZXRBZGp1c3RlZFJlY292ZXJ5UmF0ZSh0aW1lRGVsdGEpCisJCSogY3VycmVudFNJUi5nZXRJKCk7CisJCWRvdWJsZSBudW1iZXJPZlJlY292ZXJlZFRvU3VzY2VwdGlibGUgPSBnZXRBZGp1c3RlZEltbXVuaXR5TG9zc1JhdGUodGltZURlbHRhKQorCQkqIGN1cnJlbnRTSVIuZ2V0UigpOworCQkvLyBOZWVkIHRvIGNoZWNrZWQgd2hhdCBkbyBkbyBoZXJlLiBJZiBub24gbGluZWFyIGNvZWZmaWNpZW50IGlzIG5vdCAxIGFuZAorCQkvLyB0aGUgZWZmZWN0aXZlIGluZmVjdGlvdXMgaXMgbmVnYXRpdmUgKHdoaWNoIGlzIHBvc3NpYmxlKSwgd2hhdCBkbyBkbz8gCisJCS8vIExldCdzIGZhbGwgYmFjayBvbiB0aGUgbGluZWFyIG1ldGhvZCBmb3Igbm93LgorCQlkb3VibGUgbnVtYmVyT2ZTdXNjZXB0aWJsZVRvSW5mZWN0ZWQgPSAwLjA7CisJCWlmKGdldE5vbkxpbmVhcml0eUNvZWZmaWNpZW50KCkgIT0gMS4wICYmIGVmZmVjdGl2ZUluZmVjdGlvdXMgPj0gMC4wKQorCQkJbnVtYmVyT2ZTdXNjZXB0aWJsZVRvSW5mZWN0ZWQgPSB0cmFuc21pc3Npb25SYXRlCisJCQkqIGN1cnJlbnRTSVIuZ2V0UygpKiBNYXRoLnBvdyhlZmZlY3RpdmVJbmZlY3Rpb3VzLCBnZXROb25MaW5lYXJpdHlDb2VmZmljaWVudCgpKTsKKwkJZWxzZQorCQkJbnVtYmVyT2ZTdXNjZXB0aWJsZVRvSW5mZWN0ZWQgPSB0cmFuc21pc3Npb25SYXRlCisJCQkqIGN1cnJlbnRTSVIuZ2V0UygpKiBlZmZlY3RpdmVJbmZlY3Rpb3VzOworCQkKKwkJCisJCS8vIERldGVybWluZSBkZWx0YSBTCisJCWZpbmFsIGRvdWJsZSBkZWx0YVMgPSBudW1iZXJPZlJlY292ZXJlZFRvU3VzY2VwdGlibGUgLSBudW1iZXJPZlN1c2NlcHRpYmxlVG9JbmZlY3RlZDsKKwkJCS8vIERldGVybWluZSBkZWx0YSBJCisJCWZpbmFsIGRvdWJsZSBkZWx0YUkgPSBudW1iZXJPZlN1c2NlcHRpYmxlVG9JbmZlY3RlZC0gbnVtYmVyT2ZJbmZlY3RlZFRvUmVjb3ZlcmVkOworCQkvLyBEZXRlcm1pbmUgZGVsdGEgUgorCQlmaW5hbCBkb3VibGUgZGVsdGFSID0gbnVtYmVyT2ZJbmZlY3RlZFRvUmVjb3ZlcmVkIC0gbnVtYmVyT2ZSZWNvdmVyZWRUb1N1c2NlcHRpYmxlOworCQkKKwkJU0lSTGFiZWxWYWx1ZUltcGwgcmV0ID0gKFNJUkxhYmVsVmFsdWVJbXBsKXJldHVyblZhbHVlOworCQlyZXQuc2V0UyhkZWx0YVMpOworCQlyZXQuc2V0SShkZWx0YUkpOworCQlyZXQuc2V0SW5jaWRlbmNlKG51bWJlck9mSW5mZWN0ZWRUb1JlY292ZXJlZCk7CisJCXJldC5zZXRSKGRlbHRhUik7CisJCXJldC5zZXREaXNlYXNlRGVhdGhzKDApOworCQlyZXR1cm4gcmV0OworCX0gLy8gY29tcHV0ZVRyYW5zaXRpb25zCisKKwkKKwkKKwkvKioKKwkgKiBNb2RlbFNwZWNpZmljQWRqdXN0bWVudHMgZm9yIGEgU3RvY2hhc3RpYyBtb2RlbCBhZGRzIG5vaXNlIHRvIG9yIGFkanVzdHMgCisJICogdGhlIGRpc2Vhc2Ugc3RhdGUgdHJhbnNpdGlvbiB2YWx1ZXMgYnkgbXVsdGlwbHlpbmcKKwkgKiB0aGUgYWRkaXRpb25zIGJ5IGEgcmFuZG9tIHZhcmlhYmxlIHIgfiAoMSsvLXgpIHdpdGggeCBzbWFsbC4KKwkgKiBUaGUgcmVxdWlyZW1lbnRzIHRoYXQgbm8gbW9yZSBpbmRpdmlkdWFscyBjYW4gYmUgbW92ZWQgZnJvbSBhIHN0YXRlIHRoYW4gYXJlCisJICogYWxyZWFkeSBpbiB0aGF0IHN0YXRlIGlzIHN0aWxsIGVuZm9yY2VkLgorCSAqIAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGRvTW9kZWxTcGVjaWZpY0FkanVzdG1lbnRzKAorCQkJZmluYWwgU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbFZhbHVlIHN0YXRlKSB7CisJCQlmaW5hbCBTSUxhYmVsVmFsdWUgY3VycmVudFNJID0gKFNJTGFiZWxWYWx1ZSkgc3RhdGU7CisJCQlkb3VibGUgb2xkSSA9IGN1cnJlbnRTSS5nZXRJKCk7CisJCQlkb3VibGUgSW5vaXN5ID0gY3VycmVudFNJLmdldEkoKSogY29tcHV0ZU5vaXNlKCk7CisJCQlkb3VibGUgY2hhbmdlID0gb2xkSS1Jbm9pc3k7CisJCQljdXJyZW50U0kuc2V0SShJbm9pc3kpOworCQkJZG91YmxlIG5ld1MgPSBjdXJyZW50U0kuZ2V0UygpICsgY2hhbmdlOworCQkJaWYobmV3UyA8IDAuMCkgeworCQkJCS8vIE5lZWQgdG8gcmVzY2FsZQorCQkJCWRvdWJsZSBzY2FsZSA9IChjdXJyZW50U0kuZ2V0UygpICsgbmV3UykgLyBjdXJyZW50U0kuZ2V0UygpOworCQkJCWN1cnJlbnRTSS5zZXRJKElub2lzeSpzY2FsZSk7CisJCQl9IGVsc2UgIGN1cnJlbnRTSS5zZXRTKG5ld1MpOworCQkJcmV0dXJuOworCX0gLy8gZG9Nb2RlbFNwZWNpZmljQWRqdXN0bWVudHMKKwkKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgRUNsYXNzIGVTdGF0aWNDbGFzcygpIHsKKwkJcmV0dXJuIEZvcmNpbmdQYWNrYWdlLkxpdGVyYWxzLkZPUkNJTkdfRElTRUFTRV9NT0RFTDsKKwl9CisKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBkb3VibGUgZ2V0TW9kdWxhdGlvbkV4cG9uZW50KCkgeworCQlyZXR1cm4gbW9kdWxhdGlvbkV4cG9uZW50OworCX0KKworCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgc2V0TW9kdWxhdGlvbkV4cG9uZW50KGRvdWJsZSBuZXdNb2R1bGF0aW9uRXhwb25lbnQpIHsKKwkJZG91YmxlIG9sZE1vZHVsYXRpb25FeHBvbmVudCA9IG1vZHVsYXRpb25FeHBvbmVudDsKKwkJbW9kdWxhdGlvbkV4cG9uZW50ID0gbmV3TW9kdWxhdGlvbkV4cG9uZW50OworCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpCisJCQllTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBGb3JjaW5nUGFja2FnZS5GT1JDSU5HX0RJU0VBU0VfTU9ERUxfX01PRFVMQVRJT05fRVhQT05FTlQsIG9sZE1vZHVsYXRpb25FeHBvbmVudCwgbW9kdWxhdGlvbkV4cG9uZW50KSk7CisJfQorCisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgZG91YmxlIGdldE1vZHVsYXRpb25QZXJpb2QoKSB7CisJCXJldHVybiBtb2R1bGF0aW9uUGVyaW9kOworCX0KKworCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgc2V0TW9kdWxhdGlvblBlcmlvZChkb3VibGUgbmV3TW9kdWxhdGlvblBlcmlvZCkgeworCQlkb3VibGUgb2xkTW9kdWxhdGlvblBlcmlvZCA9IG1vZHVsYXRpb25QZXJpb2Q7CisJCW1vZHVsYXRpb25QZXJpb2QgPSBuZXdNb2R1bGF0aW9uUGVyaW9kOworCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpCisJCQllTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBGb3JjaW5nUGFja2FnZS5GT1JDSU5HX0RJU0VBU0VfTU9ERUxfX01PRFVMQVRJT05fUEVSSU9ELCBvbGRNb2R1bGF0aW9uUGVyaW9kLCBtb2R1bGF0aW9uUGVyaW9kKSk7CisJfQorCisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgZG91YmxlIGdldE1vZHVsYXRpb25QaGFzZVNoaWZ0KCkgeworCQlyZXR1cm4gbW9kdWxhdGlvblBoYXNlU2hpZnQ7CisJfQorCisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRNb2R1bGF0aW9uUGhhc2VTaGlmdChkb3VibGUgbmV3TW9kdWxhdGlvblBoYXNlU2hpZnQpIHsKKwkJZG91YmxlIG9sZE1vZHVsYXRpb25QaGFzZVNoaWZ0ID0gbW9kdWxhdGlvblBoYXNlU2hpZnQ7CisJCW1vZHVsYXRpb25QaGFzZVNoaWZ0ID0gbmV3TW9kdWxhdGlvblBoYXNlU2hpZnQ7CisJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkKKwkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIEZvcmNpbmdQYWNrYWdlLkZPUkNJTkdfRElTRUFTRV9NT0RFTF9fTU9EVUxBVElPTl9QSEFTRV9TSElGVCwgb2xkTW9kdWxhdGlvblBoYXNlU2hpZnQsIG1vZHVsYXRpb25QaGFzZVNoaWZ0KSk7CisJfQorCisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgZG91YmxlIGdldE1vZHVsYXRpb25GbG9vcigpIHsKKwkJcmV0dXJuIG1vZHVsYXRpb25GbG9vcjsKKwl9CisKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIHNldE1vZHVsYXRpb25GbG9vcihkb3VibGUgbmV3TW9kdWxhdGlvbkZsb29yKSB7CisJCWRvdWJsZSBvbGRNb2R1bGF0aW9uRmxvb3IgPSBtb2R1bGF0aW9uRmxvb3I7CisJCW1vZHVsYXRpb25GbG9vciA9IG5ld01vZHVsYXRpb25GbG9vcjsKKwkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQorCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgRm9yY2luZ1BhY2thZ2UuRk9SQ0lOR19ESVNFQVNFX01PREVMX19NT0RVTEFUSU9OX0ZMT09SLCBvbGRNb2R1bGF0aW9uRmxvb3IsIG1vZHVsYXRpb25GbG9vcikpOworCX0KKworCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIE9iamVjdCBlR2V0KGludCBmZWF0dXJlSUQsIGJvb2xlYW4gcmVzb2x2ZSwgYm9vbGVhbiBjb3JlVHlwZSkgeworCQlzd2l0Y2ggKGZlYXR1cmVJRCkgeworCQkJY2FzZSBGb3JjaW5nUGFja2FnZS5GT1JDSU5HX0RJU0VBU0VfTU9ERUxfX01PRFVMQVRJT05fRVhQT05FTlQ6CisJCQkJcmV0dXJuIGdldE1vZHVsYXRpb25FeHBvbmVudCgpOworCQkJY2FzZSBGb3JjaW5nUGFja2FnZS5GT1JDSU5HX0RJU0VBU0VfTU9ERUxfX01PRFVMQVRJT05fUEVSSU9EOgorCQkJCXJldHVybiBnZXRNb2R1bGF0aW9uUGVyaW9kKCk7CisJCQljYXNlIEZvcmNpbmdQYWNrYWdlLkZPUkNJTkdfRElTRUFTRV9NT0RFTF9fTU9EVUxBVElPTl9QSEFTRV9TSElGVDoKKwkJCQlyZXR1cm4gZ2V0TW9kdWxhdGlvblBoYXNlU2hpZnQoKTsKKwkJCWNhc2UgRm9yY2luZ1BhY2thZ2UuRk9SQ0lOR19ESVNFQVNFX01PREVMX19NT0RVTEFUSU9OX0ZMT09SOgorCQkJCXJldHVybiBnZXRNb2R1bGF0aW9uRmxvb3IoKTsKKwkJfQorCQlyZXR1cm4gc3VwZXIuZUdldChmZWF0dXJlSUQsIHJlc29sdmUsIGNvcmVUeXBlKTsKKwl9CisKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGVTZXQoaW50IGZlYXR1cmVJRCwgT2JqZWN0IG5ld1ZhbHVlKSB7CisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7CisJCQljYXNlIEZvcmNpbmdQYWNrYWdlLkZPUkNJTkdfRElTRUFTRV9NT0RFTF9fTU9EVUxBVElPTl9FWFBPTkVOVDoKKwkJCQlzZXRNb2R1bGF0aW9uRXhwb25lbnQoKERvdWJsZSluZXdWYWx1ZSk7CisJCQkJcmV0dXJuOworCQkJY2FzZSBGb3JjaW5nUGFja2FnZS5GT1JDSU5HX0RJU0VBU0VfTU9ERUxfX01PRFVMQVRJT05fUEVSSU9EOgorCQkJCXNldE1vZHVsYXRpb25QZXJpb2QoKERvdWJsZSluZXdWYWx1ZSk7CisJCQkJcmV0dXJuOworCQkJY2FzZSBGb3JjaW5nUGFja2FnZS5GT1JDSU5HX0RJU0VBU0VfTU9ERUxfX01PRFVMQVRJT05fUEhBU0VfU0hJRlQ6CisJCQkJc2V0TW9kdWxhdGlvblBoYXNlU2hpZnQoKERvdWJsZSluZXdWYWx1ZSk7CisJCQkJcmV0dXJuOworCQkJY2FzZSBGb3JjaW5nUGFja2FnZS5GT1JDSU5HX0RJU0VBU0VfTU9ERUxfX01PRFVMQVRJT05fRkxPT1I6CisJCQkJc2V0TW9kdWxhdGlvbkZsb29yKChEb3VibGUpbmV3VmFsdWUpOworCQkJCXJldHVybjsKKwkJfQorCQlzdXBlci5lU2V0KGZlYXR1cmVJRCwgbmV3VmFsdWUpOworCX0KKworCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgZVVuc2V0KGludCBmZWF0dXJlSUQpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJCWNhc2UgRm9yY2luZ1BhY2thZ2UuRk9SQ0lOR19ESVNFQVNFX01PREVMX19NT0RVTEFUSU9OX0VYUE9ORU5UOgorCQkJCXNldE1vZHVsYXRpb25FeHBvbmVudChNT0RVTEFUSU9OX0VYUE9ORU5UX0VERUZBVUxUKTsKKwkJCQlyZXR1cm47CisJCQljYXNlIEZvcmNpbmdQYWNrYWdlLkZPUkNJTkdfRElTRUFTRV9NT0RFTF9fTU9EVUxBVElPTl9QRVJJT0Q6CisJCQkJc2V0TW9kdWxhdGlvblBlcmlvZChNT0RVTEFUSU9OX1BFUklPRF9FREVGQVVMVCk7CisJCQkJcmV0dXJuOworCQkJY2FzZSBGb3JjaW5nUGFja2FnZS5GT1JDSU5HX0RJU0VBU0VfTU9ERUxfX01PRFVMQVRJT05fUEhBU0VfU0hJRlQ6CisJCQkJc2V0TW9kdWxhdGlvblBoYXNlU2hpZnQoTU9EVUxBVElPTl9QSEFTRV9TSElGVF9FREVGQVVMVCk7CisJCQkJcmV0dXJuOworCQkJY2FzZSBGb3JjaW5nUGFja2FnZS5GT1JDSU5HX0RJU0VBU0VfTU9ERUxfX01PRFVMQVRJT05fRkxPT1I6CisJCQkJc2V0TW9kdWxhdGlvbkZsb29yKE1PRFVMQVRJT05fRkxPT1JfRURFRkFVTFQpOworCQkJCXJldHVybjsKKwkJfQorCQlzdXBlci5lVW5zZXQoZmVhdHVyZUlEKTsKKwl9CisKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBib29sZWFuIGVJc1NldChpbnQgZmVhdHVyZUlEKSB7CisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7CisJCQljYXNlIEZvcmNpbmdQYWNrYWdlLkZPUkNJTkdfRElTRUFTRV9NT0RFTF9fTU9EVUxBVElPTl9FWFBPTkVOVDoKKwkJCQlyZXR1cm4gbW9kdWxhdGlvbkV4cG9uZW50ICE9IE1PRFVMQVRJT05fRVhQT05FTlRfRURFRkFVTFQ7CisJCQljYXNlIEZvcmNpbmdQYWNrYWdlLkZPUkNJTkdfRElTRUFTRV9NT0RFTF9fTU9EVUxBVElPTl9QRVJJT0Q6CisJCQkJcmV0dXJuIG1vZHVsYXRpb25QZXJpb2QgIT0gTU9EVUxBVElPTl9QRVJJT0RfRURFRkFVTFQ7CisJCQljYXNlIEZvcmNpbmdQYWNrYWdlLkZPUkNJTkdfRElTRUFTRV9NT0RFTF9fTU9EVUxBVElPTl9QSEFTRV9TSElGVDoKKwkJCQlyZXR1cm4gbW9kdWxhdGlvblBoYXNlU2hpZnQgIT0gTU9EVUxBVElPTl9QSEFTRV9TSElGVF9FREVGQVVMVDsKKwkJCWNhc2UgRm9yY2luZ1BhY2thZ2UuRk9SQ0lOR19ESVNFQVNFX01PREVMX19NT0RVTEFUSU9OX0ZMT09SOgorCQkJCXJldHVybiBtb2R1bGF0aW9uRmxvb3IgIT0gTU9EVUxBVElPTl9GTE9PUl9FREVGQVVMVDsKKwkJfQorCQlyZXR1cm4gc3VwZXIuZUlzU2V0KGZlYXR1cmVJRCk7CisJfQorCisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkgeworCQlpZiAoZUlzUHJveHkoKSkgcmV0dXJuIHN1cGVyLnRvU3RyaW5nKCk7CisKKwkJU3RyaW5nQnVmZmVyIHJlc3VsdCA9IG5ldyBTdHJpbmdCdWZmZXIoc3VwZXIudG9TdHJpbmcoKSk7CisJCXJlc3VsdC5hcHBlbmQoIiAobW9kdWxhdGlvbkV4cG9uZW50OiAiKTsgLy8kTk9OLU5MUy0xJAorCQlyZXN1bHQuYXBwZW5kKG1vZHVsYXRpb25FeHBvbmVudCk7CisJCXJlc3VsdC5hcHBlbmQoIiwgbW9kdWxhdGlvblBlcmlvZDogIik7IC8vJE5PTi1OTFMtMSQKKwkJcmVzdWx0LmFwcGVuZChtb2R1bGF0aW9uUGVyaW9kKTsKKwkJcmVzdWx0LmFwcGVuZCgiLCBtb2R1bGF0aW9uUGhhc2VTaGlmdDogIik7IC8vJE5PTi1OTFMtMSQKKwkJcmVzdWx0LmFwcGVuZChtb2R1bGF0aW9uUGhhc2VTaGlmdCk7CisJCXJlc3VsdC5hcHBlbmQoIiwgbW9kdWxhdGlvbkZsb29yOiAiKTsgLy8kTk9OLU5MUy0xJAorCQlyZXN1bHQuYXBwZW5kKG1vZHVsYXRpb25GbG9vcik7CisJCXJlc3VsdC5hcHBlbmQoJyknKTsKKwkJcmV0dXJuIHJlc3VsdC50b1N0cmluZygpOworCX0KKworfSAvL0ZvcmNpbmdEaXNlYXNlTW9kZWxJbXBsCmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5mb3JjaW5nL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvZm9yY2luZy9pbXBsL0ZvcmNpbmdGYWN0b3J5SW1wbC5qYXZhIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZm9yY2luZy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL2ZvcmNpbmcvaW1wbC9Gb3JjaW5nRmFjdG9yeUltcGwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iODVhMDZmCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZm9yY2luZy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL2ZvcmNpbmcvaW1wbC9Gb3JjaW5nRmFjdG9yeUltcGwuamF2YQpAQCAtMCwwICsxLDE0MCBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZm9yY2luZy5pbXBsOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA3LCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3Q7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5pbXBsLkVGYWN0b3J5SW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUucGx1Z2luLkVjb3JlUGx1Z2luOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5mb3JjaW5nLio7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmZvcmNpbmcuRm9yY2luZ0Rpc2Vhc2VNb2RlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZm9yY2luZy5Gb3JjaW5nRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZm9yY2luZy5Gb3JjaW5nUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZm9yY2luZy5HYXVzc2lhbjJGb3JjaW5nRGlzZWFzZU1vZGVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5mb3JjaW5nLkdhdXNzaWFuM0ZvcmNpbmdEaXNlYXNlTW9kZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmZvcmNpbmcuR2F1c3NpYW5Gb3JjaW5nRGlzZWFzZU1vZGVsOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiBBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgbW9kZWwgPGI+RmFjdG9yeTwvYj4uCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIEZvcmNpbmdGYWN0b3J5SW1wbCBleHRlbmRzIEVGYWN0b3J5SW1wbCBpbXBsZW1lbnRzIEZvcmNpbmdGYWN0b3J5IHsKKwkvKioKKwkgKiBDcmVhdGVzIHRoZSBkZWZhdWx0IGZhY3RvcnkgaW1wbGVtZW50YXRpb24uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHN0YXRpYyBGb3JjaW5nRmFjdG9yeSBpbml0KCkgeworCQl0cnkgeworCQkJRm9yY2luZ0ZhY3RvcnkgdGhlRm9yY2luZ0ZhY3RvcnkgPSAoRm9yY2luZ0ZhY3RvcnkpRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RUZhY3RvcnkoImh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL2ZvcmNpbmcuZWNvcmUiKTsgLy8kTk9OLU5MUy0xJCAKKwkJCWlmICh0aGVGb3JjaW5nRmFjdG9yeSAhPSBudWxsKSB7CisJCQkJcmV0dXJuIHRoZUZvcmNpbmdGYWN0b3J5OworCQkJfQorCQl9CisJCWNhdGNoIChFeGNlcHRpb24gZXhjZXB0aW9uKSB7CisJCQlFY29yZVBsdWdpbi5JTlNUQU5DRS5sb2coZXhjZXB0aW9uKTsKKwkJfQorCQlyZXR1cm4gbmV3IEZvcmNpbmdGYWN0b3J5SW1wbCgpOworCX0KKworCS8qKgorCSAqIENyZWF0ZXMgYW4gaW5zdGFuY2Ugb2YgdGhlIGZhY3RvcnkuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEZvcmNpbmdGYWN0b3J5SW1wbCgpIHsKKwkJc3VwZXIoKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgRU9iamVjdCBjcmVhdGUoRUNsYXNzIGVDbGFzcykgeworCQlzd2l0Y2ggKGVDbGFzcy5nZXRDbGFzc2lmaWVySUQoKSkgeworCQkJY2FzZSBGb3JjaW5nUGFja2FnZS5GT1JDSU5HX0RJU0VBU0VfTU9ERUw6IHJldHVybiBjcmVhdGVGb3JjaW5nRGlzZWFzZU1vZGVsKCk7CisJCQljYXNlIEZvcmNpbmdQYWNrYWdlLkdBVVNTSUFOX0ZPUkNJTkdfRElTRUFTRV9NT0RFTDogcmV0dXJuIGNyZWF0ZUdhdXNzaWFuRm9yY2luZ0Rpc2Vhc2VNb2RlbCgpOworCQkJY2FzZSBGb3JjaW5nUGFja2FnZS5HQVVTU0lBTjJfRk9SQ0lOR19ESVNFQVNFX01PREVMOiByZXR1cm4gY3JlYXRlR2F1c3NpYW4yRm9yY2luZ0Rpc2Vhc2VNb2RlbCgpOworCQkJY2FzZSBGb3JjaW5nUGFja2FnZS5HQVVTU0lBTjNfRk9SQ0lOR19ESVNFQVNFX01PREVMOiByZXR1cm4gY3JlYXRlR2F1c3NpYW4zRm9yY2luZ0Rpc2Vhc2VNb2RlbCgpOworCQkJZGVmYXVsdDoKKwkJCQl0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJUaGUgY2xhc3MgJyIgKyBlQ2xhc3MuZ2V0TmFtZSgpICsgIicgaXMgbm90IGEgdmFsaWQgY2xhc3NpZmllciIpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKKwkJfQorCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBGb3JjaW5nRGlzZWFzZU1vZGVsIGNyZWF0ZUZvcmNpbmdEaXNlYXNlTW9kZWwoKSB7CisJCUZvcmNpbmdEaXNlYXNlTW9kZWxJbXBsIGZvcmNpbmdEaXNlYXNlTW9kZWwgPSBuZXcgRm9yY2luZ0Rpc2Vhc2VNb2RlbEltcGwoKTsKKwkJcmV0dXJuIGZvcmNpbmdEaXNlYXNlTW9kZWw7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEdhdXNzaWFuRm9yY2luZ0Rpc2Vhc2VNb2RlbCBjcmVhdGVHYXVzc2lhbkZvcmNpbmdEaXNlYXNlTW9kZWwoKSB7CisJCUdhdXNzaWFuRm9yY2luZ0Rpc2Vhc2VNb2RlbEltcGwgZ2F1c3NpYW5Gb3JjaW5nRGlzZWFzZU1vZGVsID0gbmV3IEdhdXNzaWFuRm9yY2luZ0Rpc2Vhc2VNb2RlbEltcGwoKTsKKwkJcmV0dXJuIGdhdXNzaWFuRm9yY2luZ0Rpc2Vhc2VNb2RlbDsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgR2F1c3NpYW4yRm9yY2luZ0Rpc2Vhc2VNb2RlbCBjcmVhdGVHYXVzc2lhbjJGb3JjaW5nRGlzZWFzZU1vZGVsKCkgeworCQlHYXVzc2lhbjJGb3JjaW5nRGlzZWFzZU1vZGVsSW1wbCBnYXVzc2lhbjJGb3JjaW5nRGlzZWFzZU1vZGVsID0gbmV3IEdhdXNzaWFuMkZvcmNpbmdEaXNlYXNlTW9kZWxJbXBsKCk7CisJCXJldHVybiBnYXVzc2lhbjJGb3JjaW5nRGlzZWFzZU1vZGVsOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBHYXVzc2lhbjNGb3JjaW5nRGlzZWFzZU1vZGVsIGNyZWF0ZUdhdXNzaWFuM0ZvcmNpbmdEaXNlYXNlTW9kZWwoKSB7CisJCUdhdXNzaWFuM0ZvcmNpbmdEaXNlYXNlTW9kZWxJbXBsIGdhdXNzaWFuM0ZvcmNpbmdEaXNlYXNlTW9kZWwgPSBuZXcgR2F1c3NpYW4zRm9yY2luZ0Rpc2Vhc2VNb2RlbEltcGwoKTsKKwkJcmV0dXJuIGdhdXNzaWFuM0ZvcmNpbmdEaXNlYXNlTW9kZWw7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEZvcmNpbmdQYWNrYWdlIGdldEZvcmNpbmdQYWNrYWdlKCkgeworCQlyZXR1cm4gKEZvcmNpbmdQYWNrYWdlKWdldEVQYWNrYWdlKCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZGVwcmVjYXRlZAorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlARGVwcmVjYXRlZAorCXB1YmxpYyBzdGF0aWMgRm9yY2luZ1BhY2thZ2UgZ2V0UGFja2FnZSgpIHsKKwkJcmV0dXJuIEZvcmNpbmdQYWNrYWdlLmVJTlNUQU5DRTsKKwl9CisKK30gLy9FeGFtcGxlRmFjdG9yeUltcGwKZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmZvcmNpbmcvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9mb3JjaW5nL2ltcGwvRm9yY2luZ1BhY2thZ2VJbXBsLmphdmEgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5mb3JjaW5nL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvZm9yY2luZy9pbXBsL0ZvcmNpbmdQYWNrYWdlSW1wbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcyNWNkODUKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5mb3JjaW5nL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvZm9yY2luZy9pbXBsL0ZvcmNpbmdQYWNrYWdlSW1wbC5qYXZhCkBAIC0wLDAgKzEsNDM0IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5mb3JjaW5nLmltcGw7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDcsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVBdHRyaWJ1dGU7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzczsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRVBhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVjb3JlUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuaW1wbC5FUGFja2FnZUltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmxvZ2dlci5Mb2dnZXJQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5mb3JjaW5nLkZvcmNpbmdEaXNlYXNlTW9kZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmZvcmNpbmcuRm9yY2luZ0ZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmZvcmNpbmcuRm9yY2luZ1BhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmZvcmNpbmcuR2F1c3NpYW4yRm9yY2luZ0Rpc2Vhc2VNb2RlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZm9yY2luZy5HYXVzc2lhbjNGb3JjaW5nRGlzZWFzZU1vZGVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5mb3JjaW5nLkdhdXNzaWFuRm9yY2luZ0Rpc2Vhc2VNb2RlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmRQYWNrYWdlOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiBBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgbW9kZWwgPGI+UGFja2FnZTwvYj4uCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIEZvcmNpbmdQYWNrYWdlSW1wbCBleHRlbmRzIEVQYWNrYWdlSW1wbCBpbXBsZW1lbnRzIEZvcmNpbmdQYWNrYWdlIHsKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcml2YXRlIEVDbGFzcyBmb3JjaW5nRGlzZWFzZU1vZGVsRUNsYXNzID0gbnVsbDsKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcml2YXRlIEVDbGFzcyBnYXVzc2lhbkZvcmNpbmdEaXNlYXNlTW9kZWxFQ2xhc3MgPSBudWxsOworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByaXZhdGUgRUNsYXNzIGdhdXNzaWFuMkZvcmNpbmdEaXNlYXNlTW9kZWxFQ2xhc3MgPSBudWxsOworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByaXZhdGUgRUNsYXNzIGdhdXNzaWFuM0ZvcmNpbmdEaXNlYXNlTW9kZWxFQ2xhc3MgPSBudWxsOworCS8qKgorCSAqIENyZWF0ZXMgYW4gaW5zdGFuY2Ugb2YgdGhlIG1vZGVsIDxiPlBhY2thZ2U8L2I+LCByZWdpc3RlcmVkIHdpdGgKKwkgKiB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVQYWNrYWdlLlJlZ2lzdHJ5IEVQYWNrYWdlLlJlZ2lzdHJ5fSBieSB0aGUgcGFja2FnZQorCSAqIHBhY2thZ2UgVVJJIHZhbHVlLgorCSAqIDxwPk5vdGU6IHRoZSBjb3JyZWN0IHdheSB0byBjcmVhdGUgdGhlIHBhY2thZ2UgaXMgdmlhIHRoZSBzdGF0aWMKKwkgKiBmYWN0b3J5IG1ldGhvZCB7QGxpbmsgI2luaXQgaW5pdCgpfSwgd2hpY2ggYWxzbyBwZXJmb3JtcworCSAqIGluaXRpYWxpemF0aW9uIG9mIHRoZSBwYWNrYWdlLCBvciByZXR1cm5zIHRoZSByZWdpc3RlcmVkIHBhY2thZ2UsCisJICogaWYgb25lIGFscmVhZHkgZXhpc3RzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRVBhY2thZ2UuUmVnaXN0cnkKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5mb3JjaW5nLkZvcmNpbmdQYWNrYWdlI2VOU19VUkkKKwkgKiBAc2VlICNpbml0KCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJpdmF0ZSBGb3JjaW5nUGFja2FnZUltcGwoKSB7CisJCXN1cGVyKGVOU19VUkksIEZvcmNpbmdGYWN0b3J5LmVJTlNUQU5DRSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJpdmF0ZSBzdGF0aWMgYm9vbGVhbiBpc0luaXRlZCA9IGZhbHNlOworCisJLyoqCisJICogQ3JlYXRlcywgcmVnaXN0ZXJzLCBhbmQgaW5pdGlhbGl6ZXMgdGhlIDxiPlBhY2thZ2U8L2I+IGZvciB0aGlzIG1vZGVsLCBhbmQgZm9yIGFueSBvdGhlcnMgdXBvbiB3aGljaCBpdCBkZXBlbmRzLgorCSAqIAorCSAqIDxwPlRoaXMgbWV0aG9kIGlzIHVzZWQgdG8gaW5pdGlhbGl6ZSB7QGxpbmsgRm9yY2luZ1BhY2thZ2UjZUlOU1RBTkNFfSB3aGVuIHRoYXQgZmllbGQgaXMgYWNjZXNzZWQuCisJICogQ2xpZW50cyBzaG91bGQgbm90IGludm9rZSBpdCBkaXJlY3RseS4gSW5zdGVhZCwgdGhleSBzaG91bGQgc2ltcGx5IGFjY2VzcyB0aGF0IGZpZWxkIHRvIG9idGFpbiB0aGUgcGFja2FnZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI2VOU19VUkkKKwkgKiBAc2VlICNjcmVhdGVQYWNrYWdlQ29udGVudHMoKQorCSAqIEBzZWUgI2luaXRpYWxpemVQYWNrYWdlQ29udGVudHMoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgc3RhdGljIEZvcmNpbmdQYWNrYWdlIGluaXQoKSB7CisJCWlmIChpc0luaXRlZCkgcmV0dXJuIChGb3JjaW5nUGFja2FnZSlFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShGb3JjaW5nUGFja2FnZS5lTlNfVVJJKTsKKworCQkvLyBPYnRhaW4gb3IgY3JlYXRlIGFuZCByZWdpc3RlciBwYWNrYWdlCisJCUZvcmNpbmdQYWNrYWdlSW1wbCB0aGVGb3JjaW5nUGFja2FnZSA9IChGb3JjaW5nUGFja2FnZUltcGwpKEVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldChlTlNfVVJJKSBpbnN0YW5jZW9mIEZvcmNpbmdQYWNrYWdlSW1wbCA/IEVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldChlTlNfVVJJKSA6IG5ldyBGb3JjaW5nUGFja2FnZUltcGwoKSk7CisKKwkJaXNJbml0ZWQgPSB0cnVlOworCisJCS8vIEluaXRpYWxpemUgc2ltcGxlIGRlcGVuZGVuY2llcworCQlTdGFuZGFyZFBhY2thZ2UuZUlOU1RBTkNFLmVDbGFzcygpOworCQlMb2dnZXJQYWNrYWdlLmVJTlNUQU5DRS5lQ2xhc3MoKTsKKworCQkvLyBDcmVhdGUgcGFja2FnZSBtZXRhLWRhdGEgb2JqZWN0cworCQl0aGVGb3JjaW5nUGFja2FnZS5jcmVhdGVQYWNrYWdlQ29udGVudHMoKTsKKworCQkvLyBJbml0aWFsaXplIGNyZWF0ZWQgbWV0YS1kYXRhCisJCXRoZUZvcmNpbmdQYWNrYWdlLmluaXRpYWxpemVQYWNrYWdlQ29udGVudHMoKTsKKworCQkvLyBNYXJrIG1ldGEtZGF0YSB0byBpbmRpY2F0ZSBpdCBjYW4ndCBiZSBjaGFuZ2VkCisJCXRoZUZvcmNpbmdQYWNrYWdlLmZyZWV6ZSgpOworCisgIAorCQkvLyBVcGRhdGUgdGhlIHJlZ2lzdHJ5IGFuZCByZXR1cm4gdGhlIHBhY2thZ2UKKwkJRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UucHV0KEZvcmNpbmdQYWNrYWdlLmVOU19VUkksIHRoZUZvcmNpbmdQYWNrYWdlKTsKKwkJcmV0dXJuIHRoZUZvcmNpbmdQYWNrYWdlOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQ2xhc3MgZ2V0Rm9yY2luZ0Rpc2Vhc2VNb2RlbCgpIHsKKwkJcmV0dXJuIGZvcmNpbmdEaXNlYXNlTW9kZWxFQ2xhc3M7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVBdHRyaWJ1dGUgZ2V0Rm9yY2luZ0Rpc2Vhc2VNb2RlbF9Nb2R1bGF0aW9uRXhwb25lbnQoKSB7CisJCXJldHVybiAoRUF0dHJpYnV0ZSlmb3JjaW5nRGlzZWFzZU1vZGVsRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVBdHRyaWJ1dGUgZ2V0Rm9yY2luZ0Rpc2Vhc2VNb2RlbF9Nb2R1bGF0aW9uUGVyaW9kKCkgeworCQlyZXR1cm4gKEVBdHRyaWJ1dGUpZm9yY2luZ0Rpc2Vhc2VNb2RlbEVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDEpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQXR0cmlidXRlIGdldEZvcmNpbmdEaXNlYXNlTW9kZWxfTW9kdWxhdGlvblBoYXNlU2hpZnQoKSB7CisJCXJldHVybiAoRUF0dHJpYnV0ZSlmb3JjaW5nRGlzZWFzZU1vZGVsRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMik7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVBdHRyaWJ1dGUgZ2V0Rm9yY2luZ0Rpc2Vhc2VNb2RlbF9Nb2R1bGF0aW9uRmxvb3IoKSB7CisJCXJldHVybiAoRUF0dHJpYnV0ZSlmb3JjaW5nRGlzZWFzZU1vZGVsRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMyk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVDbGFzcyBnZXRHYXVzc2lhbkZvcmNpbmdEaXNlYXNlTW9kZWwoKSB7CisJCXJldHVybiBnYXVzc2lhbkZvcmNpbmdEaXNlYXNlTW9kZWxFQ2xhc3M7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVBdHRyaWJ1dGUgZ2V0R2F1c3NpYW5Gb3JjaW5nRGlzZWFzZU1vZGVsX1NpZ21hMigpIHsKKwkJcmV0dXJuIChFQXR0cmlidXRlKWdhdXNzaWFuRm9yY2luZ0Rpc2Vhc2VNb2RlbEVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDApOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQXR0cmlidXRlIGdldEdhdXNzaWFuRm9yY2luZ0Rpc2Vhc2VNb2RlbF9Nb2R1bGF0aW9uUGVyaW9kKCkgeworCQlyZXR1cm4gKEVBdHRyaWJ1dGUpZ2F1c3NpYW5Gb3JjaW5nRGlzZWFzZU1vZGVsRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVBdHRyaWJ1dGUgZ2V0R2F1c3NpYW5Gb3JjaW5nRGlzZWFzZU1vZGVsX01vZHVsYXRpb25QaGFzZVNoaWZ0KCkgeworCQlyZXR1cm4gKEVBdHRyaWJ1dGUpZ2F1c3NpYW5Gb3JjaW5nRGlzZWFzZU1vZGVsRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMik7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVBdHRyaWJ1dGUgZ2V0R2F1c3NpYW5Gb3JjaW5nRGlzZWFzZU1vZGVsX01vZHVsYXRpb25GbG9vcigpIHsKKwkJcmV0dXJuIChFQXR0cmlidXRlKWdhdXNzaWFuRm9yY2luZ0Rpc2Vhc2VNb2RlbEVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDMpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQ2xhc3MgZ2V0R2F1c3NpYW4yRm9yY2luZ0Rpc2Vhc2VNb2RlbCgpIHsKKwkJcmV0dXJuIGdhdXNzaWFuMkZvcmNpbmdEaXNlYXNlTW9kZWxFQ2xhc3M7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVBdHRyaWJ1dGUgZ2V0R2F1c3NpYW4yRm9yY2luZ0Rpc2Vhc2VNb2RlbF9TaWdtYTJfMigpIHsKKwkJcmV0dXJuIChFQXR0cmlidXRlKWdhdXNzaWFuMkZvcmNpbmdEaXNlYXNlTW9kZWxFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgwKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUF0dHJpYnV0ZSBnZXRHYXVzc2lhbjJGb3JjaW5nRGlzZWFzZU1vZGVsX0F0dDEoKSB7CisJCXJldHVybiAoRUF0dHJpYnV0ZSlnYXVzc2lhbjJGb3JjaW5nRGlzZWFzZU1vZGVsRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVBdHRyaWJ1dGUgZ2V0R2F1c3NpYW4yRm9yY2luZ0Rpc2Vhc2VNb2RlbF9BdHQyKCkgeworCQlyZXR1cm4gKEVBdHRyaWJ1dGUpZ2F1c3NpYW4yRm9yY2luZ0Rpc2Vhc2VNb2RlbEVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDIpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQXR0cmlidXRlIGdldEdhdXNzaWFuMkZvcmNpbmdEaXNlYXNlTW9kZWxfQXR0MygpIHsKKwkJcmV0dXJuIChFQXR0cmlidXRlKWdhdXNzaWFuMkZvcmNpbmdEaXNlYXNlTW9kZWxFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgzKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUF0dHJpYnV0ZSBnZXRHYXVzc2lhbjJGb3JjaW5nRGlzZWFzZU1vZGVsX0F0dDQoKSB7CisJCXJldHVybiAoRUF0dHJpYnV0ZSlnYXVzc2lhbjJGb3JjaW5nRGlzZWFzZU1vZGVsRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoNCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVDbGFzcyBnZXRHYXVzc2lhbjNGb3JjaW5nRGlzZWFzZU1vZGVsKCkgeworCQlyZXR1cm4gZ2F1c3NpYW4zRm9yY2luZ0Rpc2Vhc2VNb2RlbEVDbGFzczsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUF0dHJpYnV0ZSBnZXRHYXVzc2lhbjNGb3JjaW5nRGlzZWFzZU1vZGVsX1NpZ21hMl8zKCkgeworCQlyZXR1cm4gKEVBdHRyaWJ1dGUpZ2F1c3NpYW4zRm9yY2luZ0Rpc2Vhc2VNb2RlbEVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDApOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQXR0cmlidXRlIGdldEdhdXNzaWFuM0ZvcmNpbmdEaXNlYXNlTW9kZWxfVHJhbnNtaXNzaW9uUmF0ZTIoKSB7CisJCXJldHVybiAoRUF0dHJpYnV0ZSlnYXVzc2lhbjNGb3JjaW5nRGlzZWFzZU1vZGVsRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVBdHRyaWJ1dGUgZ2V0R2F1c3NpYW4zRm9yY2luZ0Rpc2Vhc2VNb2RlbF9UcmFuc21pc3Npb25SYXRlMygpIHsKKwkJcmV0dXJuIChFQXR0cmlidXRlKWdhdXNzaWFuM0ZvcmNpbmdEaXNlYXNlTW9kZWxFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgyKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUF0dHJpYnV0ZSBnZXRHYXVzc2lhbjNGb3JjaW5nRGlzZWFzZU1vZGVsX01vZHVsYXRpb25GbG9vcl8yKCkgeworCQlyZXR1cm4gKEVBdHRyaWJ1dGUpZ2F1c3NpYW4zRm9yY2luZ0Rpc2Vhc2VNb2RlbEVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDMpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBGb3JjaW5nRmFjdG9yeSBnZXRGb3JjaW5nRmFjdG9yeSgpIHsKKwkJcmV0dXJuIChGb3JjaW5nRmFjdG9yeSlnZXRFRmFjdG9yeUluc3RhbmNlKCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJpdmF0ZSBib29sZWFuIGlzQ3JlYXRlZCA9IGZhbHNlOworCisJLyoqCisJICogQ3JlYXRlcyB0aGUgbWV0YS1tb2RlbCBvYmplY3RzIGZvciB0aGUgcGFja2FnZS4gIFRoaXMgbWV0aG9kIGlzCisJICogZ3VhcmRlZCB0byBoYXZlIG5vIGFmZmVjdCBvbiBhbnkgaW52b2NhdGlvbiBidXQgaXRzIGZpcnN0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIGNyZWF0ZVBhY2thZ2VDb250ZW50cygpIHsKKwkJaWYgKGlzQ3JlYXRlZCkgcmV0dXJuOworCQlpc0NyZWF0ZWQgPSB0cnVlOworCisJCS8vIENyZWF0ZSBjbGFzc2VzIGFuZCB0aGVpciBmZWF0dXJlcworCQlmb3JjaW5nRGlzZWFzZU1vZGVsRUNsYXNzID0gY3JlYXRlRUNsYXNzKEZPUkNJTkdfRElTRUFTRV9NT0RFTCk7CisJCWNyZWF0ZUVBdHRyaWJ1dGUoZm9yY2luZ0Rpc2Vhc2VNb2RlbEVDbGFzcywgRk9SQ0lOR19ESVNFQVNFX01PREVMX19NT0RVTEFUSU9OX0VYUE9ORU5UKTsKKwkJY3JlYXRlRUF0dHJpYnV0ZShmb3JjaW5nRGlzZWFzZU1vZGVsRUNsYXNzLCBGT1JDSU5HX0RJU0VBU0VfTU9ERUxfX01PRFVMQVRJT05fUEVSSU9EKTsKKwkJY3JlYXRlRUF0dHJpYnV0ZShmb3JjaW5nRGlzZWFzZU1vZGVsRUNsYXNzLCBGT1JDSU5HX0RJU0VBU0VfTU9ERUxfX01PRFVMQVRJT05fUEhBU0VfU0hJRlQpOworCQljcmVhdGVFQXR0cmlidXRlKGZvcmNpbmdEaXNlYXNlTW9kZWxFQ2xhc3MsIEZPUkNJTkdfRElTRUFTRV9NT0RFTF9fTU9EVUxBVElPTl9GTE9PUik7CisKKwkJZ2F1c3NpYW5Gb3JjaW5nRGlzZWFzZU1vZGVsRUNsYXNzID0gY3JlYXRlRUNsYXNzKEdBVVNTSUFOX0ZPUkNJTkdfRElTRUFTRV9NT0RFTCk7CisJCWNyZWF0ZUVBdHRyaWJ1dGUoZ2F1c3NpYW5Gb3JjaW5nRGlzZWFzZU1vZGVsRUNsYXNzLCBHQVVTU0lBTl9GT1JDSU5HX0RJU0VBU0VfTU9ERUxfX1NJR01BMik7CisJCWNyZWF0ZUVBdHRyaWJ1dGUoZ2F1c3NpYW5Gb3JjaW5nRGlzZWFzZU1vZGVsRUNsYXNzLCBHQVVTU0lBTl9GT1JDSU5HX0RJU0VBU0VfTU9ERUxfX01PRFVMQVRJT05fUEVSSU9EKTsKKwkJY3JlYXRlRUF0dHJpYnV0ZShnYXVzc2lhbkZvcmNpbmdEaXNlYXNlTW9kZWxFQ2xhc3MsIEdBVVNTSUFOX0ZPUkNJTkdfRElTRUFTRV9NT0RFTF9fTU9EVUxBVElPTl9QSEFTRV9TSElGVCk7CisJCWNyZWF0ZUVBdHRyaWJ1dGUoZ2F1c3NpYW5Gb3JjaW5nRGlzZWFzZU1vZGVsRUNsYXNzLCBHQVVTU0lBTl9GT1JDSU5HX0RJU0VBU0VfTU9ERUxfX01PRFVMQVRJT05fRkxPT1IpOworCisJCWdhdXNzaWFuMkZvcmNpbmdEaXNlYXNlTW9kZWxFQ2xhc3MgPSBjcmVhdGVFQ2xhc3MoR0FVU1NJQU4yX0ZPUkNJTkdfRElTRUFTRV9NT0RFTCk7CisJCWNyZWF0ZUVBdHRyaWJ1dGUoZ2F1c3NpYW4yRm9yY2luZ0Rpc2Vhc2VNb2RlbEVDbGFzcywgR0FVU1NJQU4yX0ZPUkNJTkdfRElTRUFTRV9NT0RFTF9fU0lHTUEyXzIpOworCQljcmVhdGVFQXR0cmlidXRlKGdhdXNzaWFuMkZvcmNpbmdEaXNlYXNlTW9kZWxFQ2xhc3MsIEdBVVNTSUFOMl9GT1JDSU5HX0RJU0VBU0VfTU9ERUxfX0FUVDEpOworCQljcmVhdGVFQXR0cmlidXRlKGdhdXNzaWFuMkZvcmNpbmdEaXNlYXNlTW9kZWxFQ2xhc3MsIEdBVVNTSUFOMl9GT1JDSU5HX0RJU0VBU0VfTU9ERUxfX0FUVDIpOworCQljcmVhdGVFQXR0cmlidXRlKGdhdXNzaWFuMkZvcmNpbmdEaXNlYXNlTW9kZWxFQ2xhc3MsIEdBVVNTSUFOMl9GT1JDSU5HX0RJU0VBU0VfTU9ERUxfX0FUVDMpOworCQljcmVhdGVFQXR0cmlidXRlKGdhdXNzaWFuMkZvcmNpbmdEaXNlYXNlTW9kZWxFQ2xhc3MsIEdBVVNTSUFOMl9GT1JDSU5HX0RJU0VBU0VfTU9ERUxfX0FUVDQpOworCisJCWdhdXNzaWFuM0ZvcmNpbmdEaXNlYXNlTW9kZWxFQ2xhc3MgPSBjcmVhdGVFQ2xhc3MoR0FVU1NJQU4zX0ZPUkNJTkdfRElTRUFTRV9NT0RFTCk7CisJCWNyZWF0ZUVBdHRyaWJ1dGUoZ2F1c3NpYW4zRm9yY2luZ0Rpc2Vhc2VNb2RlbEVDbGFzcywgR0FVU1NJQU4zX0ZPUkNJTkdfRElTRUFTRV9NT0RFTF9fU0lHTUEyXzMpOworCQljcmVhdGVFQXR0cmlidXRlKGdhdXNzaWFuM0ZvcmNpbmdEaXNlYXNlTW9kZWxFQ2xhc3MsIEdBVVNTSUFOM19GT1JDSU5HX0RJU0VBU0VfTU9ERUxfX1RSQU5TTUlTU0lPTl9SQVRFMik7CisJCWNyZWF0ZUVBdHRyaWJ1dGUoZ2F1c3NpYW4zRm9yY2luZ0Rpc2Vhc2VNb2RlbEVDbGFzcywgR0FVU1NJQU4zX0ZPUkNJTkdfRElTRUFTRV9NT0RFTF9fVFJBTlNNSVNTSU9OX1JBVEUzKTsKKwkJY3JlYXRlRUF0dHJpYnV0ZShnYXVzc2lhbjNGb3JjaW5nRGlzZWFzZU1vZGVsRUNsYXNzLCBHQVVTU0lBTjNfRk9SQ0lOR19ESVNFQVNFX01PREVMX19NT0RVTEFUSU9OX0ZMT09SXzIpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByaXZhdGUgYm9vbGVhbiBpc0luaXRpYWxpemVkID0gZmFsc2U7CisKKwkvKioKKwkgKiBDb21wbGV0ZSB0aGUgaW5pdGlhbGl6YXRpb24gb2YgdGhlIHBhY2thZ2UgYW5kIGl0cyBtZXRhLW1vZGVsLiAgVGhpcworCSAqIG1ldGhvZCBpcyBndWFyZGVkIHRvIGhhdmUgbm8gYWZmZWN0IG9uIGFueSBpbnZvY2F0aW9uIGJ1dCBpdHMgZmlyc3QuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgaW5pdGlhbGl6ZVBhY2thZ2VDb250ZW50cygpIHsKKwkJaWYgKGlzSW5pdGlhbGl6ZWQpIHJldHVybjsKKwkJaXNJbml0aWFsaXplZCA9IHRydWU7CisKKwkJLy8gSW5pdGlhbGl6ZSBwYWNrYWdlCisJCXNldE5hbWUoZU5BTUUpOworCQlzZXROc1ByZWZpeChlTlNfUFJFRklYKTsKKwkJc2V0TnNVUkkoZU5TX1VSSSk7CisKKwkJLy8gT2J0YWluIG90aGVyIGRlcGVuZGVudCBwYWNrYWdlcworCQlTdGFuZGFyZFBhY2thZ2UgdGhlU3RhbmRhcmRQYWNrYWdlID0gKFN0YW5kYXJkUGFja2FnZSlFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShTdGFuZGFyZFBhY2thZ2UuZU5TX1VSSSk7CisJCUVjb3JlUGFja2FnZSB0aGVFY29yZVBhY2thZ2UgPSAoRWNvcmVQYWNrYWdlKUVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVQYWNrYWdlKEVjb3JlUGFja2FnZS5lTlNfVVJJKTsKKworCQkvLyBDcmVhdGUgdHlwZSBwYXJhbWV0ZXJzCisKKwkJLy8gU2V0IGJvdW5kcyBmb3IgdHlwZSBwYXJhbWV0ZXJzCisKKwkJLy8gQWRkIHN1cGVydHlwZXMgdG8gY2xhc3NlcworCQlmb3JjaW5nRGlzZWFzZU1vZGVsRUNsYXNzLmdldEVTdXBlclR5cGVzKCkuYWRkKHRoZVN0YW5kYXJkUGFja2FnZS5nZXRTdG9jaGFzdGljU0lSRGlzZWFzZU1vZGVsKCkpOworCQlnYXVzc2lhbkZvcmNpbmdEaXNlYXNlTW9kZWxFQ2xhc3MuZ2V0RVN1cGVyVHlwZXMoKS5hZGQodGhlU3RhbmRhcmRQYWNrYWdlLmdldFN0b2NoYXN0aWNTSVJEaXNlYXNlTW9kZWwoKSk7CisJCWdhdXNzaWFuMkZvcmNpbmdEaXNlYXNlTW9kZWxFQ2xhc3MuZ2V0RVN1cGVyVHlwZXMoKS5hZGQodGhpcy5nZXRHYXVzc2lhbkZvcmNpbmdEaXNlYXNlTW9kZWwoKSk7CisJCWdhdXNzaWFuM0ZvcmNpbmdEaXNlYXNlTW9kZWxFQ2xhc3MuZ2V0RVN1cGVyVHlwZXMoKS5hZGQodGhpcy5nZXRHYXVzc2lhbjJGb3JjaW5nRGlzZWFzZU1vZGVsKCkpOworCisJCS8vIEluaXRpYWxpemUgY2xhc3NlcyBhbmQgZmVhdHVyZXM7IGFkZCBvcGVyYXRpb25zIGFuZCBwYXJhbWV0ZXJzCisJCWluaXRFQ2xhc3MoZm9yY2luZ0Rpc2Vhc2VNb2RlbEVDbGFzcywgRm9yY2luZ0Rpc2Vhc2VNb2RlbC5jbGFzcywgIkZvcmNpbmdEaXNlYXNlTW9kZWwiLCAhSVNfQUJTVFJBQ1QsICFJU19JTlRFUkZBQ0UsIElTX0dFTkVSQVRFRF9JTlNUQU5DRV9DTEFTUyk7IC8vJE5PTi1OTFMtMSQKKwkJaW5pdEVBdHRyaWJ1dGUoZ2V0Rm9yY2luZ0Rpc2Vhc2VNb2RlbF9Nb2R1bGF0aW9uRXhwb25lbnQoKSwgdGhlRWNvcmVQYWNrYWdlLmdldEVEb3VibGUoKSwgIm1vZHVsYXRpb25FeHBvbmVudCIsICIyLjAiLCAwLCAxLCBGb3JjaW5nRGlzZWFzZU1vZGVsLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKKwkJaW5pdEVBdHRyaWJ1dGUoZ2V0Rm9yY2luZ0Rpc2Vhc2VNb2RlbF9Nb2R1bGF0aW9uUGVyaW9kKCksIGVjb3JlUGFja2FnZS5nZXRFRG91YmxlKCksICJtb2R1bGF0aW9uUGVyaW9kIiwgIjM2NS4yNTYzNjMwNTEiLCAwLCAxLCBGb3JjaW5nRGlzZWFzZU1vZGVsLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKKwkJaW5pdEVBdHRyaWJ1dGUoZ2V0Rm9yY2luZ0Rpc2Vhc2VNb2RlbF9Nb2R1bGF0aW9uUGhhc2VTaGlmdCgpLCBlY29yZVBhY2thZ2UuZ2V0RURvdWJsZSgpLCAibW9kdWxhdGlvblBoYXNlU2hpZnQiLCAiMC4wIiwgMCwgMSwgRm9yY2luZ0Rpc2Vhc2VNb2RlbC5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCisJCWluaXRFQXR0cmlidXRlKGdldEZvcmNpbmdEaXNlYXNlTW9kZWxfTW9kdWxhdGlvbkZsb29yKCksIHRoZUVjb3JlUGFja2FnZS5nZXRFRG91YmxlKCksICJtb2R1bGF0aW9uRmxvb3IiLCAiMC42IiwgMCwgMSwgRm9yY2luZ0Rpc2Vhc2VNb2RlbC5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCisKKwkJaW5pdEVDbGFzcyhnYXVzc2lhbkZvcmNpbmdEaXNlYXNlTW9kZWxFQ2xhc3MsIEdhdXNzaWFuRm9yY2luZ0Rpc2Vhc2VNb2RlbC5jbGFzcywgIkdhdXNzaWFuRm9yY2luZ0Rpc2Vhc2VNb2RlbCIsICFJU19BQlNUUkFDVCwgIUlTX0lOVEVSRkFDRSwgSVNfR0VORVJBVEVEX0lOU1RBTkNFX0NMQVNTKTsgLy8kTk9OLU5MUy0xJAorCQlpbml0RUF0dHJpYnV0ZShnZXRHYXVzc2lhbkZvcmNpbmdEaXNlYXNlTW9kZWxfU2lnbWEyKCksIGVjb3JlUGFja2FnZS5nZXRFRG91YmxlKCksICJzaWdtYTIiLCAiMTAwIiwgMCwgMSwgR2F1c3NpYW5Gb3JjaW5nRGlzZWFzZU1vZGVsLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKKwkJaW5pdEVBdHRyaWJ1dGUoZ2V0R2F1c3NpYW5Gb3JjaW5nRGlzZWFzZU1vZGVsX01vZHVsYXRpb25QZXJpb2QoKSwgZWNvcmVQYWNrYWdlLmdldEVEb3VibGUoKSwgIm1vZHVsYXRpb25QZXJpb2QiLCAiMzY1LjI1IiwgMCwgMSwgR2F1c3NpYW5Gb3JjaW5nRGlzZWFzZU1vZGVsLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKKwkJaW5pdEVBdHRyaWJ1dGUoZ2V0R2F1c3NpYW5Gb3JjaW5nRGlzZWFzZU1vZGVsX01vZHVsYXRpb25QaGFzZVNoaWZ0KCksIGVjb3JlUGFja2FnZS5nZXRFRG91YmxlKCksICJtb2R1bGF0aW9uUGhhc2VTaGlmdCIsICIwIiwgMCwgMSwgR2F1c3NpYW5Gb3JjaW5nRGlzZWFzZU1vZGVsLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKKwkJaW5pdEVBdHRyaWJ1dGUoZ2V0R2F1c3NpYW5Gb3JjaW5nRGlzZWFzZU1vZGVsX01vZHVsYXRpb25GbG9vcigpLCBlY29yZVBhY2thZ2UuZ2V0RURvdWJsZSgpLCAibW9kdWxhdGlvbkZsb29yIiwgIjAuNiIsIDAsIDEsIEdhdXNzaWFuRm9yY2luZ0Rpc2Vhc2VNb2RlbC5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCisKKwkJaW5pdEVDbGFzcyhnYXVzc2lhbjJGb3JjaW5nRGlzZWFzZU1vZGVsRUNsYXNzLCBHYXVzc2lhbjJGb3JjaW5nRGlzZWFzZU1vZGVsLmNsYXNzLCAiR2F1c3NpYW4yRm9yY2luZ0Rpc2Vhc2VNb2RlbCIsICFJU19BQlNUUkFDVCwgIUlTX0lOVEVSRkFDRSwgSVNfR0VORVJBVEVEX0lOU1RBTkNFX0NMQVNTKTsgLy8kTk9OLU5MUy0xJAorCQlpbml0RUF0dHJpYnV0ZShnZXRHYXVzc2lhbjJGb3JjaW5nRGlzZWFzZU1vZGVsX1NpZ21hMl8yKCksIHRoZUVjb3JlUGFja2FnZS5nZXRFRG91YmxlKCksICJzaWdtYTJfMiIsICIxMDAiLCAwLCAxLCBHYXVzc2lhbjJGb3JjaW5nRGlzZWFzZU1vZGVsLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKKwkJaW5pdEVBdHRyaWJ1dGUoZ2V0R2F1c3NpYW4yRm9yY2luZ0Rpc2Vhc2VNb2RlbF9BdHQxKCksIHRoZUVjb3JlUGFja2FnZS5nZXRFRG91YmxlKCksICJhdHQxIiwgIjEuMCIsIDAsIDEsIEdhdXNzaWFuMkZvcmNpbmdEaXNlYXNlTW9kZWwuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAorCQlpbml0RUF0dHJpYnV0ZShnZXRHYXVzc2lhbjJGb3JjaW5nRGlzZWFzZU1vZGVsX0F0dDIoKSwgdGhlRWNvcmVQYWNrYWdlLmdldEVEb3VibGUoKSwgImF0dDIiLCAiMS4wIiwgMCwgMSwgR2F1c3NpYW4yRm9yY2luZ0Rpc2Vhc2VNb2RlbC5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCisJCWluaXRFQXR0cmlidXRlKGdldEdhdXNzaWFuMkZvcmNpbmdEaXNlYXNlTW9kZWxfQXR0MygpLCB0aGVFY29yZVBhY2thZ2UuZ2V0RURvdWJsZSgpLCAiYXR0MyIsICIxLjAiLCAwLCAxLCBHYXVzc2lhbjJGb3JjaW5nRGlzZWFzZU1vZGVsLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKKwkJaW5pdEVBdHRyaWJ1dGUoZ2V0R2F1c3NpYW4yRm9yY2luZ0Rpc2Vhc2VNb2RlbF9BdHQ0KCksIHRoZUVjb3JlUGFja2FnZS5nZXRFRG91YmxlKCksICJhdHQ0IiwgIjEuMCIsIDAsIDEsIEdhdXNzaWFuMkZvcmNpbmdEaXNlYXNlTW9kZWwuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAorCisJCWluaXRFQ2xhc3MoZ2F1c3NpYW4zRm9yY2luZ0Rpc2Vhc2VNb2RlbEVDbGFzcywgR2F1c3NpYW4zRm9yY2luZ0Rpc2Vhc2VNb2RlbC5jbGFzcywgIkdhdXNzaWFuM0ZvcmNpbmdEaXNlYXNlTW9kZWwiLCAhSVNfQUJTVFJBQ1QsICFJU19JTlRFUkZBQ0UsIElTX0dFTkVSQVRFRF9JTlNUQU5DRV9DTEFTUyk7IC8vJE5PTi1OTFMtMSQKKwkJaW5pdEVBdHRyaWJ1dGUoZ2V0R2F1c3NpYW4zRm9yY2luZ0Rpc2Vhc2VNb2RlbF9TaWdtYTJfMygpLCB0aGVFY29yZVBhY2thZ2UuZ2V0RURvdWJsZSgpLCAic2lnbWEyXzMiLCAiMTAwIiwgMCwgMSwgR2F1c3NpYW4zRm9yY2luZ0Rpc2Vhc2VNb2RlbC5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCisJCWluaXRFQXR0cmlidXRlKGdldEdhdXNzaWFuM0ZvcmNpbmdEaXNlYXNlTW9kZWxfVHJhbnNtaXNzaW9uUmF0ZTIoKSwgdGhlRWNvcmVQYWNrYWdlLmdldEVEb3VibGUoKSwgInRyYW5zbWlzc2lvblJhdGUyIiwgIjAuMCIsIDAsIDEsIEdhdXNzaWFuM0ZvcmNpbmdEaXNlYXNlTW9kZWwuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAorCQlpbml0RUF0dHJpYnV0ZShnZXRHYXVzc2lhbjNGb3JjaW5nRGlzZWFzZU1vZGVsX1RyYW5zbWlzc2lvblJhdGUzKCksIHRoZUVjb3JlUGFja2FnZS5nZXRFRG91YmxlKCksICJ0cmFuc21pc3Npb25SYXRlMyIsICIwLjAiLCAwLCAxLCBHYXVzc2lhbjNGb3JjaW5nRGlzZWFzZU1vZGVsLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKKwkJaW5pdEVBdHRyaWJ1dGUoZ2V0R2F1c3NpYW4zRm9yY2luZ0Rpc2Vhc2VNb2RlbF9Nb2R1bGF0aW9uRmxvb3JfMigpLCB0aGVFY29yZVBhY2thZ2UuZ2V0RURvdWJsZSgpLCAibW9kdWxhdGlvbkZsb29yXzIiLCAiMC42IiwgMCwgMSwgR2F1c3NpYW4zRm9yY2luZ0Rpc2Vhc2VNb2RlbC5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCisKKwkJLy8gQ3JlYXRlIHJlc291cmNlCisJCWNyZWF0ZVJlc291cmNlKGVOU19VUkkpOworCX0KKworfSAvL0V4YW1wbGVQYWNrYWdlSW1wbApkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZm9yY2luZy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL2ZvcmNpbmcvaW1wbC9HYXVzc2lhbjJGb3JjaW5nRGlzZWFzZU1vZGVsSW1wbC5qYXZhIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZm9yY2luZy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL2ZvcmNpbmcvaW1wbC9HYXVzc2lhbjJGb3JjaW5nRGlzZWFzZU1vZGVsSW1wbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJiY2M0YjcKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5mb3JjaW5nL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvZm9yY2luZy9pbXBsL0dhdXNzaWFuMkZvcmNpbmdEaXNlYXNlTW9kZWxJbXBsLmphdmEKQEAgLTAsMCArMSw1MzggQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmZvcmNpbmcuaW1wbDsKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTAgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgamF2YS5pby5GaWxlV3JpdGVyOworaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7CitpbXBvcnQgamF2YS51dGlsLkNhbGVuZGFyOworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLmltcGwuRU5vdGlmaWNhdGlvbkltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLlNURU1UaW1lOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5mb3JjaW5nLkZvcmNpbmdQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5mb3JjaW5nLkdhdXNzaWFuMkZvcmNpbmdEaXNlYXNlTW9kZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLkRpc2Vhc2VNb2RlbExhYmVsVmFsdWU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlNJTGFiZWxWYWx1ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU0lSTGFiZWxWYWx1ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbFZhbHVlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5pbXBsLlNJUkxhYmVsVmFsdWVJbXBsOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiBBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+R2F1c3NpYW4yIEZvcmNpbmcgRGlzZWFzZSBNb2RlbDwvYj48L2VtPicuCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIDxwPgorICogVGhlIGZvbGxvd2luZyBmZWF0dXJlcyBhcmUgaW1wbGVtZW50ZWQ6CisgKiA8dWw+CisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmZvcmNpbmcuaW1wbC5HYXVzc2lhbjJGb3JjaW5nRGlzZWFzZU1vZGVsSW1wbCNnZXRTaWdtYTJfMiA8ZW0+U2lnbWEyIDI8L2VtPn08L2xpPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5mb3JjaW5nLmltcGwuR2F1c3NpYW4yRm9yY2luZ0Rpc2Vhc2VNb2RlbEltcGwjZ2V0QXR0MSA8ZW0+QXR0MTwvZW0+fTwvbGk+CisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmZvcmNpbmcuaW1wbC5HYXVzc2lhbjJGb3JjaW5nRGlzZWFzZU1vZGVsSW1wbCNnZXRBdHQyIDxlbT5BdHQyPC9lbT59PC9saT4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZm9yY2luZy5pbXBsLkdhdXNzaWFuMkZvcmNpbmdEaXNlYXNlTW9kZWxJbXBsI2dldEF0dDMgPGVtPkF0dDM8L2VtPn08L2xpPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5mb3JjaW5nLmltcGwuR2F1c3NpYW4yRm9yY2luZ0Rpc2Vhc2VNb2RlbEltcGwjZ2V0QXR0NCA8ZW0+QXR0NDwvZW0+fTwvbGk+CisgKiA8L3VsPgorICogPC9wPgorICoKKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIEdhdXNzaWFuMkZvcmNpbmdEaXNlYXNlTW9kZWxJbXBsIGV4dGVuZHMgR2F1c3NpYW5Gb3JjaW5nRGlzZWFzZU1vZGVsSW1wbCBpbXBsZW1lbnRzIEdhdXNzaWFuMkZvcmNpbmdEaXNlYXNlTW9kZWwgeworCS8qKgorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRTaWdtYTJfMigpIDxlbT5TaWdtYTIgMjwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZ2V0U2lnbWEyXzIoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgZG91YmxlIFNJR01BMl8yX0VERUZBVUxUID0gMTAwLjA7CisKKwkvKioKKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRTaWdtYTJfMigpIDxlbT5TaWdtYTIgMjwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZ2V0U2lnbWEyXzIoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBkb3VibGUgc2lnbWEyXzIgPSBTSUdNQTJfMl9FREVGQVVMVDsKKworCS8qKgorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRBdHQxKCkgPGVtPkF0dDE8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI2dldEF0dDEoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgZG91YmxlIEFUVDFfRURFRkFVTFQgPSAxLjA7CisKKwkvKioKKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRBdHQxKCkgPGVtPkF0dDE8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI2dldEF0dDEoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBkb3VibGUgYXR0MSA9IEFUVDFfRURFRkFVTFQ7CisKKwkvKioKKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0QXR0MigpIDxlbT5BdHQyPC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNnZXRBdHQyKCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIGRvdWJsZSBBVFQyX0VERUZBVUxUID0gMS4wOworCisJLyoqCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0QXR0MigpIDxlbT5BdHQyPC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNnZXRBdHQyKCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgZG91YmxlIGF0dDIgPSBBVFQyX0VERUZBVUxUOworCisJLyoqCisJICogVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldEF0dDMoKSA8ZW0+QXR0MzwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZ2V0QXR0MygpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBkb3VibGUgQVRUM19FREVGQVVMVCA9IDEuMDsKKworCS8qKgorCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldEF0dDMoKSA8ZW0+QXR0MzwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZ2V0QXR0MygpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIGRvdWJsZSBhdHQzID0gQVRUM19FREVGQVVMVDsKKworCS8qKgorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRBdHQ0KCkgPGVtPkF0dDQ8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI2dldEF0dDQoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgZG91YmxlIEFUVDRfRURFRkFVTFQgPSAxLjA7CisKKwkvKioKKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRBdHQ0KCkgPGVtPkF0dDQ8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI2dldEF0dDQoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBkb3VibGUgYXR0NCA9IEFUVDRfRURFRkFVTFQ7CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJcHVibGljIEdhdXNzaWFuMkZvcmNpbmdEaXNlYXNlTW9kZWxJbXBsKCkgeworCQlzdXBlcigpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCBFQ2xhc3MgZVN0YXRpY0NsYXNzKCkgeworCQlyZXR1cm4gRm9yY2luZ1BhY2thZ2UuTGl0ZXJhbHMuR0FVU1NJQU4yX0ZPUkNJTkdfRElTRUFTRV9NT0RFTDsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgZG91YmxlIGdldFNpZ21hMl8yKCkgeworCQlyZXR1cm4gc2lnbWEyXzI7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgc2V0U2lnbWEyXzIoZG91YmxlIG5ld1NpZ21hMl8yKSB7CisJCWRvdWJsZSBvbGRTaWdtYTJfMiA9IHNpZ21hMl8yOworCQlzaWdtYTJfMiA9IG5ld1NpZ21hMl8yOworCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpCisJCQllTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBGb3JjaW5nUGFja2FnZS5HQVVTU0lBTjJfRk9SQ0lOR19ESVNFQVNFX01PREVMX19TSUdNQTJfMiwgb2xkU2lnbWEyXzIsIHNpZ21hMl8yKSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIGRvdWJsZSBnZXRBdHQxKCkgeworCQlyZXR1cm4gYXR0MTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRBdHQxKGRvdWJsZSBuZXdBdHQxKSB7CisJCWRvdWJsZSBvbGRBdHQxID0gYXR0MTsKKwkJYXR0MSA9IG5ld0F0dDE7CisJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkKKwkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIEZvcmNpbmdQYWNrYWdlLkdBVVNTSUFOMl9GT1JDSU5HX0RJU0VBU0VfTU9ERUxfX0FUVDEsIG9sZEF0dDEsIGF0dDEpKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgZG91YmxlIGdldEF0dDIoKSB7CisJCXJldHVybiBhdHQyOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIHNldEF0dDIoZG91YmxlIG5ld0F0dDIpIHsKKwkJZG91YmxlIG9sZEF0dDIgPSBhdHQyOworCQlhdHQyID0gbmV3QXR0MjsKKwkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQorCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgRm9yY2luZ1BhY2thZ2UuR0FVU1NJQU4yX0ZPUkNJTkdfRElTRUFTRV9NT0RFTF9fQVRUMiwgb2xkQXR0MiwgYXR0MikpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBkb3VibGUgZ2V0QXR0MygpIHsKKwkJcmV0dXJuIGF0dDM7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgc2V0QXR0Myhkb3VibGUgbmV3QXR0MykgeworCQlkb3VibGUgb2xkQXR0MyA9IGF0dDM7CisJCWF0dDMgPSBuZXdBdHQzOworCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpCisJCQllTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBGb3JjaW5nUGFja2FnZS5HQVVTU0lBTjJfRk9SQ0lOR19ESVNFQVNFX01PREVMX19BVFQzLCBvbGRBdHQzLCBhdHQzKSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIGRvdWJsZSBnZXRBdHQ0KCkgeworCQlyZXR1cm4gYXR0NDsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRBdHQ0KGRvdWJsZSBuZXdBdHQ0KSB7CisJCWRvdWJsZSBvbGRBdHQ0ID0gYXR0NDsKKwkJYXR0NCA9IG5ld0F0dDQ7CisJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkKKwkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIEZvcmNpbmdQYWNrYWdlLkdBVVNTSUFOMl9GT1JDSU5HX0RJU0VBU0VfTU9ERUxfX0FUVDQsIG9sZEF0dDQsIGF0dDQpKTsKKwl9CisKKwlwcml2YXRlIExvbmcgZmlyc3RUaW1lID0gbmV3IExvbmcoTG9uZy5NQVhfVkFMVUUpOworCXByaXZhdGUgQ2FsZW5kYXIgY2FsZW5kYXIgPSBDYWxlbmRhci5nZXRJbnN0YW5jZSgpOworCXByaXZhdGUgQ2FsZW5kYXIgY2FsZW5kYXIyID0gQ2FsZW5kYXIuZ2V0SW5zdGFuY2UoKTsKKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBkb3VibGUgTUlMTElTX1BFUl9EQVkgPSAxMDAwLjAqNjAuMCo2MC4wKjI0LjA7CisKKwlwcml2YXRlIEFycmF5TGlzdDxMb25nPiB3cml0dGVkVGltZXMgPSBuZXcgQXJyYXlMaXN0PExvbmc+KCk7CisJcHJpdmF0ZSBGaWxlV3JpdGVyIGZ3OworCUBPdmVycmlkZQorCXB1YmxpYyBTdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsVmFsdWUgY29tcHV0ZURpc2Vhc2VEZWx0YXMoCisJCQlmaW5hbCBTVEVNVGltZSB0aW1lLAorCQkJZmluYWwgU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbFZhbHVlIGN1cnJlbnRTdGF0ZSwKKwkJCWZpbmFsIFN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWwgZGlzZWFzZUxhYmVsLCBmaW5hbCBsb25nIHRpbWVEZWx0YSwgRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZSByZXR1cm5WYWx1ZSkgeworZmluYWwgU0lSTGFiZWxWYWx1ZSBjdXJyZW50U0lSID0gKFNJUkxhYmVsVmFsdWUpIGN1cnJlbnRTdGF0ZTsKKwkJCisJCWxvbmcgY3VycmVudE1pbGxpcyA9IHRpbWUuZ2V0VGltZSgpLmdldFRpbWUoKTsKKwkJZG91YmxlIHNlYXNvbmFsTW9kdWxhdGlvbkZsb29yID0gZ2V0TW9kdWxhdGlvbkZsb29yKCk7CisJCWRvdWJsZSBtb2R1bGF0aW9uUGVyaW9kID0gZ2V0TW9kdWxhdGlvblBlcmlvZCgpOworCQlkb3VibGUgcGhhc2UgPSBnZXRNb2R1bGF0aW9uUGhhc2VTaGlmdCgpOwkKKwkJZG91YmxlIHNpZ21hMiA9IGdldFNpZ21hMigpOworCQlkb3VibGUgc2lnbWEyXzIgPSBnZXRTaWdtYTJfMigpOworCQkKKwkJc3luY2hyb25pemVkKHRoaXMpIHsKKwkJCWlmKGZpcnN0VGltZS5sb25nVmFsdWUoKSA9PSBMb25nLk1BWF9WQUxVRSkKKwkJCQlmaXJzdFRpbWUgPSBMb25nLnZhbHVlT2YodGltZS5nZXRUaW1lKCkuZ2V0VGltZSgpKTsKKwkJfQorCQkKKwkJLy8gR2V0IHRoZSBkYXkgZnJvbSB0aW1lIGFuZCBhZGp1c3QgZm9yIHRoZSBwaGFzZQkKKwkJZG91YmxlIGRheT0wOworCQkvLyBTaGFyZWQgY2FsZW5kYXIgb2JqZWN0IG5vdCB0aHJlYWQgc2FmZQorCQlzeW5jaHJvbml6ZWQoY2FsZW5kYXIpIHsKKwkJCWNhbGVuZGFyLnNldFRpbWVJbk1pbGxpcyhjdXJyZW50TWlsbGlzKTsKKwkJCWNhbGVuZGFyMi5zZXRUaW1lSW5NaWxsaXMoZmlyc3RUaW1lLmxvbmdWYWx1ZSgpKTsKKwkJCWRheSA9IChjYWxlbmRhci5nZXRUaW1lSW5NaWxsaXMoKSAtIGNhbGVuZGFyMi5nZXRUaW1lSW5NaWxsaXMoKSkvTUlMTElTX1BFUl9EQVk7CisJCX0KKwkJCisJCQorCQlkb3VibGUgbXUxID0gcGhhc2U7CisJCWRvdWJsZSBtdTIgPSBwaGFzZSArIG1vZHVsYXRpb25QZXJpb2Q7CisJCQorCQlkb3VibGUgbW9kdWxhdGlvbjEgPSAoMS9NYXRoLnNxcnQoMipNYXRoLlBJKnNpZ21hMikpKk1hdGguZXhwKC0oTWF0aC5wb3coZGF5LW11MSwyKSkvKDIqc2lnbWEyKSk7CQkJCQkJCisJCWRvdWJsZSBtb2R1bGF0aW9uMiA9ICgxL01hdGguc3FydCgyKk1hdGguUEkqc2lnbWEyXzIpKSpNYXRoLmV4cCgtKE1hdGgucG93KGRheS1tdTIsMikpLygyKnNpZ21hMl8yKSk7CisJCQorCQkvLyBUaGlzIGlzIGJldGEqCisJCWRvdWJsZSB0cmFuc21pc3Npb25SYXRlID0gc2Vhc29uYWxNb2R1bGF0aW9uRmxvb3IgKyAoZ2V0QWRqdXN0ZWRUcmFuc21pc3Npb25SYXRlKHRpbWVEZWx0YSkpICogKG1vZHVsYXRpb24xK21vZHVsYXRpb24yKTsKKworCQlpZihkYXkgPj0gMTE2ICYmIGRheSA8PSAxMTkpIC8vIEFwcmlsIDI0IC0gMjcKKwkJCXRyYW5zbWlzc2lvblJhdGUgPSB0cmFuc21pc3Npb25SYXRlICogdGhpcy5nZXRBdHQxKCk7CisJCWVsc2UgCWlmKGRheSA+PSAxMjAgJiYgZGF5IDw9IDEyNykgLy8gQXByaWwgMjggLSBNYXkgNQorCQkJdHJhbnNtaXNzaW9uUmF0ZSA9IHRyYW5zbWlzc2lvblJhdGUgKiB0aGlzLmdldEF0dDIoKTsKKwkJZWxzZSBpZihkYXkgPj0gMTI4ICYmIGRheSA8PSAxMzIpIC8vIE1heSA2IC0gTWF5IDEwCisJCQl0cmFuc21pc3Npb25SYXRlID0gdHJhbnNtaXNzaW9uUmF0ZSAqIHRoaXMuZ2V0QXR0MygpOworCQkKKwkJc3luY2hyb25pemVkKHdyaXR0ZWRUaW1lcykgeworCQkJaWYoIXdyaXR0ZWRUaW1lcy5jb250YWlucyh0aW1lLmdldFRpbWUoKS5nZXRUaW1lKCkpKSB7CisJCQkJdHJ5IHsKKwkJCQlpZihmdyA9PSBudWxsKSBmdyA9IG5ldyBGaWxlV3JpdGVyKCJiZXRhLmNzdiIpOworCQkJCWZ3LndyaXRlKHRpbWUuZ2V0VGltZSgpLmdldFRpbWUoKSsiLCIrdHJhbnNtaXNzaW9uUmF0ZSsiXG4iKTsKKwkJCQl9IGNhdGNoKEV4Y2VwdGlvbiBlKSB7CisJCQkJCWUucHJpbnRTdGFja1RyYWNlKCk7CisJCQkJfQorCQkJCXdyaXR0ZWRUaW1lcy5hZGQodGltZS5nZXRUaW1lKCkuZ2V0VGltZSgpKTsKKwkJCX0KKwkJfQorCQkKKwkJaWYoIXRoaXMuaXNGcmVxdWVuY3lEZXBlbmRlbnQoKSkgIHRyYW5zbWlzc2lvblJhdGUgKj0gZ2V0VHJhbnNtaXNzaW9uUmF0ZVNjYWxlRmFjdG9yKGRpc2Vhc2VMYWJlbCk7CisJCQorCQkvLyBUaGUgZWZmZWN0aXZlIEluZmVjdGlvdXMgcG9wdWxhdGlvbiAgaXMgYSBkaW1lbnNpb25sZXMgbnVtYmVyIG5vcm1hbGl6ZSBieSB0b3RhbAorCQkvLyBwb3B1bGF0aW9uIHVzZWQgaW4gdGVoIGNvbXB1dGF0aW9uIG9mIGJldHMqUyppIHdoZXJlIGkgPSBJZWZmZWN0aXZlL1BvcC4KKwkJLy8gVGhpcyBpbmNsdWRlcyBhIGNvcnJlY3Rpb24gdG8gdGhlIGN1cnJlbnQKKwkJLy8gaW5mZWN0aW91cyBwb3B1bGF0aW9uIChJZWZmZWN0aXZlKSBiYXNlZCBvbiB0aGUgY29uc2VydmVkIGV4Y2hhbmdlIG9mIHBlb3BsZSAoY2lyY3VsYXRpb24pCisJCS8vIGJldHdlZW4gcmVnaW9ucy4gTm90ZSB0aGF0IHRoaXMgaXMgbm8gdGhlICJhcnJpdmFscyIgYW5kICJkZXBhcnR1cmVzIiB3aGljaCBhcmUKKwkJLy8gYSBkaWZmZXJlbnQgcHJvY2Vzcy4KKwkJZmluYWwgZG91YmxlIGVmZmVjdGl2ZUluZmVjdGlvdXMgPSBnZXROb3JtYWxpemVkRWZmZWN0aXZlSW5mZWN0aW91cyhkaXNlYXNlTGFiZWwuZ2V0Tm9kZSgpLCBkaXNlYXNlTGFiZWwsIGN1cnJlbnRTSVIuZ2V0SSgpKTsKKworCQkvKgorCQkgKiBDb21wdXRlIHN0YXRlIHRyYW5zaXRpb25zCisJCSAqIAorCQkgKiBSZWdhcmRpbmcgY29tcHV0aW5nIHRoZSBudW1iZXIgb2YgdHJhbnNpdGlvbnMgZnJvbSBTdXNjZXB0aWJsZSB0byBFeHBvc2VkOgorCQkgKiBJbiBhIGxpbmVhciBtb2RlbCB0aGUgImVmZmVjdGl2ZSIgbnVtYmVyIG9mIGluZmVjdGlvdXMgcGVvcGxlIGlzIGp1c3QKKwkJICogdGhlIG51bWJlciBvZiBpbmZlY3Rpb3VzIHBlb3BsZSBJbiBhIG5vbmxpbmVhciBtb2RlbCB3ZSBoYXZlIGEKKwkJICogbm9uTGluZWFyaXR5IGV4cG9uZW50IHRoYXQgaXMgPiAxIHRoaXMgbW9kZWxzIHRoZSBlZmZlY3Qgb2YgaW1tdW5lCisJCSAqIHN5c3RlbSBzYXR1cmF0aW9uIHdoZW4gU3VzY2VwdGlibGUgcGVvcGxlIGFyZSBleHBvc2VkIHRvIGxhcmdlCisJCSAqIG51bWJlcnMgb2YgaW5mZWN0aW91cyBwZW9wbGUuIHRoZW4gdGhlICJlZmZlY3RpdmUiIG51bWJlciBvZgorCQkgKiBpbmZlY3Rpb3VzIHBlb3BsZSBpcyBJXm5vbkxpbmVhcml0eSBleHBvbmVudCB0byBhbGxvdyBmb3IgZWl0aGVyCisJCSAqIGxpbmVhciBvciBub25saW5lYXIgbW9kZWxzIHdlIGFsd2F5cyBjYWxjdWxhdGUgSV5ub25MaW5lYXJpdHkKKwkJICogZXhwb25lbnQgYW5kIGFsbG93IG5vbkxpbmVhcml0eSBleHBvbmVudCA+PSAxLjAKKwkJICovCisJCWRvdWJsZSBudW1iZXJPZkluZmVjdGVkVG9SZWNvdmVyZWQgPSBnZXRBZGp1c3RlZFJlY292ZXJ5UmF0ZSh0aW1lRGVsdGEpCisJCSogY3VycmVudFNJUi5nZXRJKCk7CisJCWRvdWJsZSBudW1iZXJPZlJlY292ZXJlZFRvU3VzY2VwdGlibGUgPSBnZXRBZGp1c3RlZEltbXVuaXR5TG9zc1JhdGUodGltZURlbHRhKQorCQkqIGN1cnJlbnRTSVIuZ2V0UigpOworCQkvLyBOZWVkIHRvIGNoZWNrZWQgd2hhdCBkbyBkbyBoZXJlLiBJZiBub24gbGluZWFyIGNvZWZmaWNpZW50IGlzIG5vdCAxIGFuZAorCQkvLyB0aGUgZWZmZWN0aXZlIGluZmVjdGlvdXMgaXMgbmVnYXRpdmUgKHdoaWNoIGlzIHBvc3NpYmxlKSwgd2hhdCBkbyBkbz8gCisJCS8vIExldCdzIGZhbGwgYmFjayBvbiB0aGUgbGluZWFyIG1ldGhvZCBmb3Igbm93LgorCQlkb3VibGUgbnVtYmVyT2ZTdXNjZXB0aWJsZVRvSW5mZWN0ZWQgPSAwLjA7CisJCWlmKGdldE5vbkxpbmVhcml0eUNvZWZmaWNpZW50KCkgIT0gMS4wICYmIGVmZmVjdGl2ZUluZmVjdGlvdXMgPj0gMC4wKQorCQkJbnVtYmVyT2ZTdXNjZXB0aWJsZVRvSW5mZWN0ZWQgPSB0cmFuc21pc3Npb25SYXRlCisJCQkqIGN1cnJlbnRTSVIuZ2V0UygpKiBNYXRoLnBvdyhlZmZlY3RpdmVJbmZlY3Rpb3VzLCBnZXROb25MaW5lYXJpdHlDb2VmZmljaWVudCgpKTsKKwkJZWxzZQorCQkJbnVtYmVyT2ZTdXNjZXB0aWJsZVRvSW5mZWN0ZWQgPSB0cmFuc21pc3Npb25SYXRlCisJCQkqIGN1cnJlbnRTSVIuZ2V0UygpKiBlZmZlY3RpdmVJbmZlY3Rpb3VzOworCQkKKwkJCisJCS8vIERldGVybWluZSBkZWx0YSBTCisJCWZpbmFsIGRvdWJsZSBkZWx0YVMgPSBudW1iZXJPZlJlY292ZXJlZFRvU3VzY2VwdGlibGUgLSBudW1iZXJPZlN1c2NlcHRpYmxlVG9JbmZlY3RlZDsKKwkJCS8vIERldGVybWluZSBkZWx0YSBJCisJCWZpbmFsIGRvdWJsZSBkZWx0YUkgPSBudW1iZXJPZlN1c2NlcHRpYmxlVG9JbmZlY3RlZC0gbnVtYmVyT2ZJbmZlY3RlZFRvUmVjb3ZlcmVkOworCQkvLyBEZXRlcm1pbmUgZGVsdGEgUgorCQlmaW5hbCBkb3VibGUgZGVsdGFSID0gbnVtYmVyT2ZJbmZlY3RlZFRvUmVjb3ZlcmVkIC0gbnVtYmVyT2ZSZWNvdmVyZWRUb1N1c2NlcHRpYmxlOworCQkKKwkJU0lSTGFiZWxWYWx1ZUltcGwgcmV0ID0gKFNJUkxhYmVsVmFsdWVJbXBsKXJldHVyblZhbHVlOworCQlyZXQuc2V0UyhkZWx0YVMpOworCQlyZXQuc2V0SShkZWx0YUkpOworCQlyZXQuc2V0SW5jaWRlbmNlKG51bWJlck9mSW5mZWN0ZWRUb1JlY292ZXJlZCk7CisJCXJldC5zZXRSKGRlbHRhUik7CisJCXJldC5zZXREaXNlYXNlRGVhdGhzKDApOworCQlyZXR1cm4gcmV0OworCX0gLy8gY29tcHV0ZVRyYW5zaXRpb25zCisJCisJLyoqCisJICogTW9kZWxTcGVjaWZpY0FkanVzdG1lbnRzIGZvciBhIFN0b2NoYXN0aWMgbW9kZWwgYWRkcyBub2lzZSB0byBvciBhZGp1c3RzIAorCSAqIHRoZSBkaXNlYXNlIHN0YXRlIHRyYW5zaXRpb24gdmFsdWVzIGJ5IG11bHRpcGx5aW5nCisJICogdGhlIGFkZGl0aW9ucyBieSBhIHJhbmRvbSB2YXJpYWJsZSByIH4gKDErLy14KSB3aXRoIHggc21hbGwuCisJICogVGhlIHJlcXVpcmVtZW50cyB0aGF0IG5vIG1vcmUgaW5kaXZpZHVhbHMgY2FuIGJlIG1vdmVkIGZyb20gYSBzdGF0ZSB0aGFuIGFyZQorCSAqIGFscmVhZHkgaW4gdGhhdCBzdGF0ZSBpcyBzdGlsbCBlbmZvcmNlZC4KKwkgKiAKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBkb01vZGVsU3BlY2lmaWNBZGp1c3RtZW50cygKKwkJCWZpbmFsIFN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZSBzdGF0ZSkgeworCQkJZmluYWwgU0lMYWJlbFZhbHVlIGN1cnJlbnRTSSA9IChTSUxhYmVsVmFsdWUpIHN0YXRlOworCQkJZG91YmxlIG9sZEkgPSBjdXJyZW50U0kuZ2V0SSgpOworCQkJZG91YmxlIElub2lzeSA9IGN1cnJlbnRTSS5nZXRJKCkqIGNvbXB1dGVOb2lzZSgpOworCQkJZG91YmxlIGNoYW5nZSA9IG9sZEktSW5vaXN5OworCQkJY3VycmVudFNJLnNldEkoSW5vaXN5KTsKKwkJCWRvdWJsZSBuZXdTID0gY3VycmVudFNJLmdldFMoKSArIGNoYW5nZTsKKwkJCWlmKG5ld1MgPCAwLjApIHsKKwkJCQkvLyBOZWVkIHRvIHJlc2NhbGUKKwkJCQlkb3VibGUgc2NhbGUgPSAoY3VycmVudFNJLmdldFMoKSArIG5ld1MpIC8gY3VycmVudFNJLmdldFMoKTsKKwkJCQljdXJyZW50U0kuc2V0SShJbm9pc3kqc2NhbGUpOworCQkJfSBlbHNlICBjdXJyZW50U0kuc2V0UyhuZXdTKTsKKwkJCXJldHVybjsKKwl9IC8vIGRvTW9kZWxTcGVjaWZpY0FkanVzdG1lbnRzCisJCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIE9iamVjdCBlR2V0KGludCBmZWF0dXJlSUQsIGJvb2xlYW4gcmVzb2x2ZSwgYm9vbGVhbiBjb3JlVHlwZSkgeworCQlzd2l0Y2ggKGZlYXR1cmVJRCkgeworCQkJY2FzZSBGb3JjaW5nUGFja2FnZS5HQVVTU0lBTjJfRk9SQ0lOR19ESVNFQVNFX01PREVMX19TSUdNQTJfMjoKKwkJCQlyZXR1cm4gZ2V0U2lnbWEyXzIoKTsKKwkJCWNhc2UgRm9yY2luZ1BhY2thZ2UuR0FVU1NJQU4yX0ZPUkNJTkdfRElTRUFTRV9NT0RFTF9fQVRUMToKKwkJCQlyZXR1cm4gZ2V0QXR0MSgpOworCQkJY2FzZSBGb3JjaW5nUGFja2FnZS5HQVVTU0lBTjJfRk9SQ0lOR19ESVNFQVNFX01PREVMX19BVFQyOgorCQkJCXJldHVybiBnZXRBdHQyKCk7CisJCQljYXNlIEZvcmNpbmdQYWNrYWdlLkdBVVNTSUFOMl9GT1JDSU5HX0RJU0VBU0VfTU9ERUxfX0FUVDM6CisJCQkJcmV0dXJuIGdldEF0dDMoKTsKKwkJCWNhc2UgRm9yY2luZ1BhY2thZ2UuR0FVU1NJQU4yX0ZPUkNJTkdfRElTRUFTRV9NT0RFTF9fQVRUNDoKKwkJCQlyZXR1cm4gZ2V0QXR0NCgpOworCQl9CisJCXJldHVybiBzdXBlci5lR2V0KGZlYXR1cmVJRCwgcmVzb2x2ZSwgY29yZVR5cGUpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGVTZXQoaW50IGZlYXR1cmVJRCwgT2JqZWN0IG5ld1ZhbHVlKSB7CisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7CisJCQljYXNlIEZvcmNpbmdQYWNrYWdlLkdBVVNTSUFOMl9GT1JDSU5HX0RJU0VBU0VfTU9ERUxfX1NJR01BMl8yOgorCQkJCXNldFNpZ21hMl8yKChEb3VibGUpbmV3VmFsdWUpOworCQkJCXJldHVybjsKKwkJCWNhc2UgRm9yY2luZ1BhY2thZ2UuR0FVU1NJQU4yX0ZPUkNJTkdfRElTRUFTRV9NT0RFTF9fQVRUMToKKwkJCQlzZXRBdHQxKChEb3VibGUpbmV3VmFsdWUpOworCQkJCXJldHVybjsKKwkJCWNhc2UgRm9yY2luZ1BhY2thZ2UuR0FVU1NJQU4yX0ZPUkNJTkdfRElTRUFTRV9NT0RFTF9fQVRUMjoKKwkJCQlzZXRBdHQyKChEb3VibGUpbmV3VmFsdWUpOworCQkJCXJldHVybjsKKwkJCWNhc2UgRm9yY2luZ1BhY2thZ2UuR0FVU1NJQU4yX0ZPUkNJTkdfRElTRUFTRV9NT0RFTF9fQVRUMzoKKwkJCQlzZXRBdHQzKChEb3VibGUpbmV3VmFsdWUpOworCQkJCXJldHVybjsKKwkJCWNhc2UgRm9yY2luZ1BhY2thZ2UuR0FVU1NJQU4yX0ZPUkNJTkdfRElTRUFTRV9NT0RFTF9fQVRUNDoKKwkJCQlzZXRBdHQ0KChEb3VibGUpbmV3VmFsdWUpOworCQkJCXJldHVybjsKKwkJfQorCQlzdXBlci5lU2V0KGZlYXR1cmVJRCwgbmV3VmFsdWUpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGVVbnNldChpbnQgZmVhdHVyZUlEKSB7CisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7CisJCQljYXNlIEZvcmNpbmdQYWNrYWdlLkdBVVNTSUFOMl9GT1JDSU5HX0RJU0VBU0VfTU9ERUxfX1NJR01BMl8yOgorCQkJCXNldFNpZ21hMl8yKFNJR01BMl8yX0VERUZBVUxUKTsKKwkJCQlyZXR1cm47CisJCQljYXNlIEZvcmNpbmdQYWNrYWdlLkdBVVNTSUFOMl9GT1JDSU5HX0RJU0VBU0VfTU9ERUxfX0FUVDE6CisJCQkJc2V0QXR0MShBVFQxX0VERUZBVUxUKTsKKwkJCQlyZXR1cm47CisJCQljYXNlIEZvcmNpbmdQYWNrYWdlLkdBVVNTSUFOMl9GT1JDSU5HX0RJU0VBU0VfTU9ERUxfX0FUVDI6CisJCQkJc2V0QXR0MihBVFQyX0VERUZBVUxUKTsKKwkJCQlyZXR1cm47CisJCQljYXNlIEZvcmNpbmdQYWNrYWdlLkdBVVNTSUFOMl9GT1JDSU5HX0RJU0VBU0VfTU9ERUxfX0FUVDM6CisJCQkJc2V0QXR0MyhBVFQzX0VERUZBVUxUKTsKKwkJCQlyZXR1cm47CisJCQljYXNlIEZvcmNpbmdQYWNrYWdlLkdBVVNTSUFOMl9GT1JDSU5HX0RJU0VBU0VfTU9ERUxfX0FUVDQ6CisJCQkJc2V0QXR0NChBVFQ0X0VERUZBVUxUKTsKKwkJCQlyZXR1cm47CisJCX0KKwkJc3VwZXIuZVVuc2V0KGZlYXR1cmVJRCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIGJvb2xlYW4gZUlzU2V0KGludCBmZWF0dXJlSUQpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJCWNhc2UgRm9yY2luZ1BhY2thZ2UuR0FVU1NJQU4yX0ZPUkNJTkdfRElTRUFTRV9NT0RFTF9fU0lHTUEyXzI6CisJCQkJcmV0dXJuIHNpZ21hMl8yICE9IFNJR01BMl8yX0VERUZBVUxUOworCQkJY2FzZSBGb3JjaW5nUGFja2FnZS5HQVVTU0lBTjJfRk9SQ0lOR19ESVNFQVNFX01PREVMX19BVFQxOgorCQkJCXJldHVybiBhdHQxICE9IEFUVDFfRURFRkFVTFQ7CisJCQljYXNlIEZvcmNpbmdQYWNrYWdlLkdBVVNTSUFOMl9GT1JDSU5HX0RJU0VBU0VfTU9ERUxfX0FUVDI6CisJCQkJcmV0dXJuIGF0dDIgIT0gQVRUMl9FREVGQVVMVDsKKwkJCWNhc2UgRm9yY2luZ1BhY2thZ2UuR0FVU1NJQU4yX0ZPUkNJTkdfRElTRUFTRV9NT0RFTF9fQVRUMzoKKwkJCQlyZXR1cm4gYXR0MyAhPSBBVFQzX0VERUZBVUxUOworCQkJY2FzZSBGb3JjaW5nUGFja2FnZS5HQVVTU0lBTjJfRk9SQ0lOR19ESVNFQVNFX01PREVMX19BVFQ0OgorCQkJCXJldHVybiBhdHQ0ICE9IEFUVDRfRURFRkFVTFQ7CisJCX0KKwkJcmV0dXJuIHN1cGVyLmVJc1NldChmZWF0dXJlSUQpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKSB7CisJCWlmIChlSXNQcm94eSgpKSByZXR1cm4gc3VwZXIudG9TdHJpbmcoKTsKKworCQlTdHJpbmdCdWZmZXIgcmVzdWx0ID0gbmV3IFN0cmluZ0J1ZmZlcihzdXBlci50b1N0cmluZygpKTsKKwkJcmVzdWx0LmFwcGVuZCgiIChzaWdtYTJfMjogIik7IC8vJE5PTi1OTFMtMSQKKwkJcmVzdWx0LmFwcGVuZChzaWdtYTJfMik7CisJCXJlc3VsdC5hcHBlbmQoIiwgYXR0MTogIik7IC8vJE5PTi1OTFMtMSQKKwkJcmVzdWx0LmFwcGVuZChhdHQxKTsKKwkJcmVzdWx0LmFwcGVuZCgiLCBhdHQyOiAiKTsgLy8kTk9OLU5MUy0xJAorCQlyZXN1bHQuYXBwZW5kKGF0dDIpOworCQlyZXN1bHQuYXBwZW5kKCIsIGF0dDM6ICIpOyAvLyROT04tTkxTLTEkCisJCXJlc3VsdC5hcHBlbmQoYXR0Myk7CisJCXJlc3VsdC5hcHBlbmQoIiwgYXR0NDogIik7IC8vJE5PTi1OTFMtMSQKKwkJcmVzdWx0LmFwcGVuZChhdHQ0KTsKKwkJcmVzdWx0LmFwcGVuZCgnKScpOworCQlyZXR1cm4gcmVzdWx0LnRvU3RyaW5nKCk7CisJfQorCit9IC8vR2F1c3NpYW4yRm9yY2luZ0Rpc2Vhc2VNb2RlbEltcGwKZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmZvcmNpbmcvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9mb3JjaW5nL2ltcGwvR2F1c3NpYW4zRm9yY2luZ0Rpc2Vhc2VNb2RlbEltcGwuamF2YSBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmZvcmNpbmcvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9mb3JjaW5nL2ltcGwvR2F1c3NpYW4zRm9yY2luZ0Rpc2Vhc2VNb2RlbEltcGwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMjUzYTBiCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZm9yY2luZy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL2ZvcmNpbmcvaW1wbC9HYXVzc2lhbjNGb3JjaW5nRGlzZWFzZU1vZGVsSW1wbC5qYXZhCkBAIC0wLDAgKzEsNTU4IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5mb3JjaW5nLmltcGw7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTAgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworaW1wb3J0IGphdmEuaW8uRmlsZVdyaXRlcjsKK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OworaW1wb3J0IGphdmEudXRpbC5DYWxlbmRhcjsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5pbXBsLkVOb3RpZmljYXRpb25JbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5TVEVNVGltZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZm9yY2luZy5Gb3JjaW5nUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZm9yY2luZy5HYXVzc2lhbjNGb3JjaW5nRGlzZWFzZU1vZGVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5EaXNlYXNlTW9kZWxMYWJlbFZhbHVlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TSVJMYWJlbFZhbHVlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsVmFsdWU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLmltcGwuU0lSTGFiZWxWYWx1ZUltcGw7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIEFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5HYXVzc2lhbjMgRm9yY2luZyBEaXNlYXNlIE1vZGVsPC9iPjwvZW0+Jy4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogPHA+CisgKiBUaGUgZm9sbG93aW5nIGZlYXR1cmVzIGFyZSBpbXBsZW1lbnRlZDoKKyAqIDx1bD4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZm9yY2luZy5pbXBsLkdhdXNzaWFuM0ZvcmNpbmdEaXNlYXNlTW9kZWxJbXBsI2dldFNpZ21hMl8zIDxlbT5TaWdtYTIgMzwvZW0+fTwvbGk+CisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmZvcmNpbmcuaW1wbC5HYXVzc2lhbjNGb3JjaW5nRGlzZWFzZU1vZGVsSW1wbCNnZXRUcmFuc21pc3Npb25SYXRlMiA8ZW0+VHJhbnNtaXNzaW9uIFJhdGUyPC9lbT59PC9saT4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZm9yY2luZy5pbXBsLkdhdXNzaWFuM0ZvcmNpbmdEaXNlYXNlTW9kZWxJbXBsI2dldFRyYW5zbWlzc2lvblJhdGUzIDxlbT5UcmFuc21pc3Npb24gUmF0ZTM8L2VtPn08L2xpPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5mb3JjaW5nLmltcGwuR2F1c3NpYW4zRm9yY2luZ0Rpc2Vhc2VNb2RlbEltcGwjZ2V0TW9kdWxhdGlvbkZsb29yXzIgPGVtPk1vZHVsYXRpb24gRmxvb3IgMjwvZW0+fTwvbGk+CisgKiA8L3VsPgorICogPC9wPgorICoKKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIEdhdXNzaWFuM0ZvcmNpbmdEaXNlYXNlTW9kZWxJbXBsIGV4dGVuZHMgR2F1c3NpYW4yRm9yY2luZ0Rpc2Vhc2VNb2RlbEltcGwgaW1wbGVtZW50cyBHYXVzc2lhbjNGb3JjaW5nRGlzZWFzZU1vZGVsIHsKKwkvKioKKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0U2lnbWEyXzMoKSA8ZW0+U2lnbWEyIDM8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI2dldFNpZ21hMl8zKCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIGRvdWJsZSBTSUdNQTJfM19FREVGQVVMVCA9IDEwMC4wOworCisJLyoqCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0U2lnbWEyXzMoKSA8ZW0+U2lnbWEyIDM8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI2dldFNpZ21hMl8zKCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgZG91YmxlIHNpZ21hMl8zID0gU0lHTUEyXzNfRURFRkFVTFQ7CisKKwkvKioKKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0VHJhbnNtaXNzaW9uUmF0ZTIoKSA8ZW0+VHJhbnNtaXNzaW9uIFJhdGUyPC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNnZXRUcmFuc21pc3Npb25SYXRlMigpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBkb3VibGUgVFJBTlNNSVNTSU9OX1JBVEUyX0VERUZBVUxUID0gMC4wOworCisJLyoqCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0VHJhbnNtaXNzaW9uUmF0ZTIoKSA8ZW0+VHJhbnNtaXNzaW9uIFJhdGUyPC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNnZXRUcmFuc21pc3Npb25SYXRlMigpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIGRvdWJsZSB0cmFuc21pc3Npb25SYXRlMiA9IFRSQU5TTUlTU0lPTl9SQVRFMl9FREVGQVVMVDsKKworCS8qKgorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRUcmFuc21pc3Npb25SYXRlMygpIDxlbT5UcmFuc21pc3Npb24gUmF0ZTM8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI2dldFRyYW5zbWlzc2lvblJhdGUzKCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIGRvdWJsZSBUUkFOU01JU1NJT05fUkFURTNfRURFRkFVTFQgPSAwLjA7CisKKwkvKioKKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRUcmFuc21pc3Npb25SYXRlMygpIDxlbT5UcmFuc21pc3Npb24gUmF0ZTM8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI2dldFRyYW5zbWlzc2lvblJhdGUzKCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgZG91YmxlIHRyYW5zbWlzc2lvblJhdGUzID0gVFJBTlNNSVNTSU9OX1JBVEUzX0VERUZBVUxUOworCisJLyoqCisJICogVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldE1vZHVsYXRpb25GbG9vcl8yKCkgPGVtPk1vZHVsYXRpb24gRmxvb3IgMjwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZ2V0TW9kdWxhdGlvbkZsb29yXzIoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgZG91YmxlIE1PRFVMQVRJT05fRkxPT1JfMl9FREVGQVVMVCA9IDAuNjsKKworCS8qKgorCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldE1vZHVsYXRpb25GbG9vcl8yKCkgPGVtPk1vZHVsYXRpb24gRmxvb3IgMjwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZ2V0TW9kdWxhdGlvbkZsb29yXzIoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBkb3VibGUgbW9kdWxhdGlvbkZsb29yXzIgPSBNT0RVTEFUSU9OX0ZMT09SXzJfRURFRkFVTFQ7CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJcHVibGljIEdhdXNzaWFuM0ZvcmNpbmdEaXNlYXNlTW9kZWxJbXBsKCkgeworCQlzdXBlcigpOworCX0KKworCXByaXZhdGUgTG9uZyBmaXJzdFRpbWUgPSBuZXcgTG9uZyhMb25nLk1BWF9WQUxVRSk7CisJcHJpdmF0ZSBDYWxlbmRhciBjYWxlbmRhciA9IENhbGVuZGFyLmdldEluc3RhbmNlKCk7CisJcHJpdmF0ZSBDYWxlbmRhciBjYWxlbmRhcjIgPSBDYWxlbmRhci5nZXRJbnN0YW5jZSgpOworCXByaXZhdGUgc3RhdGljIGZpbmFsIGRvdWJsZSBNSUxMSVNfUEVSX0RBWSA9IDEwMDAuMCo2MC4wKjYwLjAqMjQuMDsKKworCXByaXZhdGUgQXJyYXlMaXN0PExvbmc+IHdyaXR0ZWRUaW1lcyA9IG5ldyBBcnJheUxpc3Q8TG9uZz4oKTsKKwlwcml2YXRlIEZpbGVXcml0ZXIgZnc7CisJLy9wcml2YXRlIEZpbGVXcml0ZXIgZncyOworCQorCXByaXZhdGUgc3RhdGljIGZpbmFsIGludCBXSU5ET1dTSVpFID0gNjA7CisJCisJZW51bSBIWVAge0gwLCBIMSwgSDJ9OworCUhZUCBjdXJyZW50SHlwb3RoZXNpcyA9IEhZUC5IMTsKKwkKKwkvLyBwcml2YXRlIGludCBbXSB3aGljaEdhdXNzaWFuID0gezAsIDAsIDAsIDEsIDAsIDIsIDAsIDAsIDIsIDAsIDF9OyAvLyAwPUEvSDNOMiAxPUEvSDFOMSAyPUIKKwlwcml2YXRlIGludCBbXSB3aGljaEdhdXNzaWFuID0gezAsIDAsIDAsIDAsIDAsIDEsIDAsIDAsIDEsIDAsIDB9OyAvLyAwPUEgMT1CCisJCisJQE92ZXJyaWRlCisJcHVibGljIFN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZSBjb21wdXRlRGlzZWFzZURlbHRhcygKKwkJCWZpbmFsIFNURU1UaW1lIHRpbWUsCisJCQlmaW5hbCBTdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsVmFsdWUgY3VycmVudFN0YXRlLAorCQkJZmluYWwgU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbCBkaXNlYXNlTGFiZWwsIGZpbmFsIGxvbmcgdGltZURlbHRhLCBEaXNlYXNlTW9kZWxMYWJlbFZhbHVlIHJldHVyblZhbHVlKSB7CisJCWZpbmFsIFNJUkxhYmVsVmFsdWUgY3VycmVudFNJUiA9IChTSVJMYWJlbFZhbHVlKSBjdXJyZW50U3RhdGU7CisJCQorCQlsb25nIGN1cnJlbnRNaWxsaXMgPSB0aW1lLmdldFRpbWUoKS5nZXRUaW1lKCk7CisJCWRvdWJsZSBtb2R1bGF0aW9uUGVyaW9kID0gZ2V0TW9kdWxhdGlvblBlcmlvZCgpOworCQlkb3VibGUgcGhhc2UgPSBnZXRNb2R1bGF0aW9uUGhhc2VTaGlmdCgpOwkKKwkJZG91YmxlIHNpZ21hMiA9IGdldFNpZ21hMigpOwkJCisJCWRvdWJsZSBzaWdtYTJfMiA9IGdldFNpZ21hMl8yKCk7CisJCQorCQlzeW5jaHJvbml6ZWQodGhpcykgeworCQkJaWYoZmlyc3RUaW1lLmxvbmdWYWx1ZSgpID09IExvbmcuTUFYX1ZBTFVFKQorCQkJCWZpcnN0VGltZSA9IExvbmcudmFsdWVPZih0aW1lLmdldFRpbWUoKS5nZXRUaW1lKCkpOworCQl9CisJCQorCQkvLyBHZXQgdGhlIGRheSBmcm9tIHRpbWUgYW5kIGFkanVzdCBmb3IgdGhlIHBoYXNlCQorCQlkb3VibGUgZGF5PTA7CisJCS8vIFNoYXJlZCBjYWxlbmRhciBvYmplY3Qgbm90IHRocmVhZCBzYWZlCisJCXN5bmNocm9uaXplZChjYWxlbmRhcikgeworCQkJY2FsZW5kYXIuc2V0VGltZUluTWlsbGlzKGN1cnJlbnRNaWxsaXMrKGxvbmcpKHBoYXNlKk1JTExJU19QRVJfREFZKSk7CisJCQljYWxlbmRhcjIuc2V0VGltZUluTWlsbGlzKGZpcnN0VGltZS5sb25nVmFsdWUoKSk7CisJCQlkYXkgPSAoY2FsZW5kYXIuZ2V0VGltZUluTWlsbGlzKCkgLSBjYWxlbmRhcjIuZ2V0VGltZUluTWlsbGlzKCkpL01JTExJU19QRVJfREFZOworCQl9CisJCWludCB5ZWFyID0gKGludCkoZGF5IC8gbW9kdWxhdGlvblBlcmlvZCk7CisJCWludCBuZXh0RGF5WWVhciA9IChpbnQpKChkYXkrMSkgLyBtb2R1bGF0aW9uUGVyaW9kKTsKKwkJCisJCWRvdWJsZSBmZGF5ID0gKChkYXkgJSBtb2R1bGF0aW9uUGVyaW9kKS1tb2R1bGF0aW9uUGVyaW9kLzIuMCkvbW9kdWxhdGlvblBlcmlvZDsKKwkJCisJCWludCBnYXVzc2lhbiA9IHdoaWNoR2F1c3NpYW5beWVhcl07CisKKwkJZG91YmxlIGYxPTA7CisJCXN3aXRjaChjdXJyZW50SHlwb3RoZXNpcykgeworCQkJY2FzZSBIMDoKKwkJCQlmMSA9IChnZXRBZGp1c3RlZFRyYW5zbWlzc2lvblJhdGUoZ2V0VHJhbnNtaXNzaW9uUmF0ZSgpLHRpbWVEZWx0YSkpICAqIChnZXRNb2R1bGF0aW9uRmxvb3IoKSArICgxLWdldE1vZHVsYXRpb25GbG9vcigpKSpNYXRoLmV4cCgtKE1hdGgucG93KGZkYXksMikpLygyKnNpZ21hMikpKTsKKwkJCQlicmVhazsJCisJCQljYXNlIEgxOgorCQkJCWlmKGdhdXNzaWFuID09IDApIHsgLy8gQQorCQkJCQlmMSA9IChnZXRBZGp1c3RlZFRyYW5zbWlzc2lvblJhdGUoZ2V0VHJhbnNtaXNzaW9uUmF0ZSgpLHRpbWVEZWx0YSkpICAqIChnZXRNb2R1bGF0aW9uRmxvb3IoKSArICgxLWdldE1vZHVsYXRpb25GbG9vcigpKSpNYXRoLmV4cCgtKE1hdGgucG93KGZkYXksMikpLygyKnNpZ21hMikpKTsKKwkJCQl9IGVsc2UgaWYoZ2F1c3NpYW4gPT0gMSkgeworCQkJCQlmMSA9IChnZXRBZGp1c3RlZFRyYW5zbWlzc2lvblJhdGUoZ2V0VHJhbnNtaXNzaW9uUmF0ZTIoKSx0aW1lRGVsdGEpKSAgKiAoZ2V0TW9kdWxhdGlvbkZsb29yKCkgKyAoMS1nZXRNb2R1bGF0aW9uRmxvb3IoKSkqTWF0aC5leHAoLShNYXRoLnBvdyhmZGF5LDIpKS8oMipzaWdtYTIpKSk7CisJCQkJfQorCQkJCWJyZWFrOwkKKwkJCWNhc2UgSDI6CisJCQkJaWYoZ2F1c3NpYW4gPT0gMCkgeworCQkJCQlmMSA9IChnZXRBZGp1c3RlZFRyYW5zbWlzc2lvblJhdGUoZ2V0VHJhbnNtaXNzaW9uUmF0ZSgpLHRpbWVEZWx0YSkpICAqIChnZXRNb2R1bGF0aW9uRmxvb3IoKSArICgxLWdldE1vZHVsYXRpb25GbG9vcigpKSpNYXRoLmV4cCgtKE1hdGgucG93KGZkYXksMikpLygyKnNpZ21hMikpKTsKKwkJCQl9IGVsc2UgaWYoZ2F1c3NpYW49PTEpIHsKKwkJCQkJZjEgPSAoZ2V0QWRqdXN0ZWRUcmFuc21pc3Npb25SYXRlKGdldFRyYW5zbWlzc2lvblJhdGUyKCksdGltZURlbHRhKSkgICogKGdldE1vZHVsYXRpb25GbG9vcl8yKCkgKyAoMS1nZXRNb2R1bGF0aW9uRmxvb3JfMigpKSpNYXRoLmV4cCgtKE1hdGgucG93KGZkYXksMikpLygyKnNpZ21hMl8yKSkpOworCQkJCX0KKwkJCQlicmVhazsKKwkJCQkKKwkJCWRlZmF1bHQ6CisJCQkJYnJlYWs7CisJCX0KKwkJCisJCWRvdWJsZSBtb2R1bGF0ZWRUcmFuc21pc3Npb25SYXRlID0gMDsKKwkJLy8gU21vb3RoaW5nCisJCWlmKGRheSAlIG1vZHVsYXRpb25QZXJpb2QgPCBXSU5ET1dTSVpFIHx8IGRheSAlIG1vZHVsYXRpb25QZXJpb2QgPiBtb2R1bGF0aW9uUGVyaW9kLVdJTkRPV1NJWkUpIHsKKwkJCQorCQkJZG91YmxlIHBvczsKKwkJCWRvdWJsZSBmMj0wLCBmMz0wOworCQkJaW50IG5leHRHYXVzc2lhbiA9IDA7CisJCQlpZih5ZWFyID09IHdoaWNoR2F1c3NpYW4ubGVuZ3RoLTEpIG5leHRHYXVzc2lhbiA9IGdhdXNzaWFuOworCQkJZWxzZSBuZXh0R2F1c3NpYW4gPSB3aGljaEdhdXNzaWFuW3llYXIrMV07CisJCQkKKwkJCWludCBwcmV2R2F1c3NpYW4gPSAwOworCQkJaWYoeWVhciA9PSAwKSBwcmV2R2F1c3NpYW4gPSBnYXVzc2lhbjsKKwkJCWVsc2UgcHJldkdhdXNzaWFuID0gd2hpY2hHYXVzc2lhblt5ZWFyLTFdOworCQkJCisJCQlzd2l0Y2goY3VycmVudEh5cG90aGVzaXMpIHsKKwkJCQkKKwkJCQljYXNlIEgwOgorCQkJCQlmMiA9IChnZXRBZGp1c3RlZFRyYW5zbWlzc2lvblJhdGUoZ2V0VHJhbnNtaXNzaW9uUmF0ZSgpLHRpbWVEZWx0YSkpICAqIChnZXRNb2R1bGF0aW9uRmxvb3IoKSArICgxLWdldE1vZHVsYXRpb25GbG9vcigpKSpNYXRoLmV4cCgtKE1hdGgucG93KGZkYXktMSwyKSkvKDIqc2lnbWEyKSkpOworCQkJCQlmMyA9IChnZXRBZGp1c3RlZFRyYW5zbWlzc2lvblJhdGUoZ2V0VHJhbnNtaXNzaW9uUmF0ZSgpLHRpbWVEZWx0YSkpICAqIChnZXRNb2R1bGF0aW9uRmxvb3IoKSArICgxLWdldE1vZHVsYXRpb25GbG9vcigpKSpNYXRoLmV4cCgtKE1hdGgucG93KGZkYXkrMSwyKSkvKDIqc2lnbWEyKSkpOworCQkJCQlicmVhazsJCisJCQkJY2FzZSBIMToKKwkJCQkJaWYobmV4dEdhdXNzaWFuID09IDApCisJCQkJCQlmMiA9IChnZXRBZGp1c3RlZFRyYW5zbWlzc2lvblJhdGUoZ2V0VHJhbnNtaXNzaW9uUmF0ZSgpLHRpbWVEZWx0YSkpICAqIChnZXRNb2R1bGF0aW9uRmxvb3IoKSArICgxLWdldE1vZHVsYXRpb25GbG9vcigpKSpNYXRoLmV4cCgtKE1hdGgucG93KGZkYXktMSwyKSkvKDIqc2lnbWEyKSkpOworCQkJCQllbHNlIGlmKG5leHRHYXVzc2lhbiA9PSAxKSAKKwkJCQkJCWYyID0gKGdldEFkanVzdGVkVHJhbnNtaXNzaW9uUmF0ZShnZXRUcmFuc21pc3Npb25SYXRlMigpLHRpbWVEZWx0YSkpICAqIChnZXRNb2R1bGF0aW9uRmxvb3IoKSArICgxLWdldE1vZHVsYXRpb25GbG9vcigpKSpNYXRoLmV4cCgtKE1hdGgucG93KGZkYXktMSwyKSkvKDIqc2lnbWEyKSkpOworCQkJCQlpZihwcmV2R2F1c3NpYW4gPT0gMCkKKwkJCQkJCWYzID0gKGdldEFkanVzdGVkVHJhbnNtaXNzaW9uUmF0ZShnZXRUcmFuc21pc3Npb25SYXRlKCksdGltZURlbHRhKSkgICogKGdldE1vZHVsYXRpb25GbG9vcigpICsgKDEtZ2V0TW9kdWxhdGlvbkZsb29yKCkpKk1hdGguZXhwKC0oTWF0aC5wb3coZmRheSsxLDIpKS8oMipzaWdtYTIpKSk7CisJCQkJCWVsc2UgaWYocHJldkdhdXNzaWFuID09IDEpCisJCQkJCQlmMyA9IChnZXRBZGp1c3RlZFRyYW5zbWlzc2lvblJhdGUoZ2V0VHJhbnNtaXNzaW9uUmF0ZTIoKSx0aW1lRGVsdGEpKSAgKiAoZ2V0TW9kdWxhdGlvbkZsb29yKCkgKyAoMS1nZXRNb2R1bGF0aW9uRmxvb3IoKSkqTWF0aC5leHAoLShNYXRoLnBvdyhmZGF5KzEsMikpLygyKnNpZ21hMikpKTsJCQkKKwkJCQkJCQkJCQorCQkJCQlicmVhazsJCisJCQkJY2FzZSBIMjoKKwkJCQkJaWYobmV4dEdhdXNzaWFuID09IDApIAorCQkJCQkJZjIgPSAoZ2V0QWRqdXN0ZWRUcmFuc21pc3Npb25SYXRlKGdldFRyYW5zbWlzc2lvblJhdGUoKSx0aW1lRGVsdGEpKSAgKiAoZ2V0TW9kdWxhdGlvbkZsb29yKCkgKyAoMS1nZXRNb2R1bGF0aW9uRmxvb3IoKSkqTWF0aC5leHAoLShNYXRoLnBvdyhmZGF5LTEsMikpLygyKnNpZ21hMikpKTsKKwkJCQkJZWxzZSBpZihuZXh0R2F1c3NpYW4gPT0gMSkgCisJCQkJCQlmMiA9IChnZXRBZGp1c3RlZFRyYW5zbWlzc2lvblJhdGUoZ2V0VHJhbnNtaXNzaW9uUmF0ZTIoKSx0aW1lRGVsdGEpKSAgKiAoZ2V0TW9kdWxhdGlvbkZsb29yXzIoKSArICgxLWdldE1vZHVsYXRpb25GbG9vcl8yKCkpKk1hdGguZXhwKC0oTWF0aC5wb3coZmRheS0xLDIpKS8oMipzaWdtYTJfMikpKTsKKwkJCQkJaWYocHJldkdhdXNzaWFuID09IDApCisJCQkJCQlmMyA9IChnZXRBZGp1c3RlZFRyYW5zbWlzc2lvblJhdGUoZ2V0VHJhbnNtaXNzaW9uUmF0ZSgpLHRpbWVEZWx0YSkpICAqIChnZXRNb2R1bGF0aW9uRmxvb3IoKSArICgxLWdldE1vZHVsYXRpb25GbG9vcigpKSpNYXRoLmV4cCgtKE1hdGgucG93KGZkYXkrMSwyKSkvKDIqc2lnbWEyKSkpOworCQkJCQllbHNlIGlmKHByZXZHYXVzc2lhbiA9PSAxKQorCQkJCQkJZjMgPSAoZ2V0QWRqdXN0ZWRUcmFuc21pc3Npb25SYXRlKGdldFRyYW5zbWlzc2lvblJhdGUyKCksdGltZURlbHRhKSkgICogKGdldE1vZHVsYXRpb25GbG9vcl8yKCkgKyAoMS1nZXRNb2R1bGF0aW9uRmxvb3JfMigpKSpNYXRoLmV4cCgtKE1hdGgucG93KGZkYXkrMSwyKSkvKDIqc2lnbWEyXzIpKSk7CQkJCisJCQkJCWJyZWFrOworCQkJCQorCQkJCWRlZmF1bHQ6CisJCQkJCWJyZWFrOworCQkJfQorCQkJCisJCQlpZigoZGF5ICUgbW9kdWxhdGlvblBlcmlvZCkgPiBtb2R1bGF0aW9uUGVyaW9kIC0gV0lORE9XU0laRSkKKwkJCQlwb3MgPSBXSU5ET1dTSVpFIC0gKG1vZHVsYXRpb25QZXJpb2QgLSAoZGF5ICUgbW9kdWxhdGlvblBlcmlvZCkpOworCQkJZWxzZSBwb3MgPSBXSU5ET1dTSVpFKyhkYXkgJSBtb2R1bGF0aW9uUGVyaW9kKTsKKwkJCQorCQkJcG9zID0gTWF0aC5mbG9vcihwb3MpOworCQkJZG91YmxlIHNtb290aCA9IDA7CisJCQlpZihwb3MgPT0gV0lORE9XU0laRSAmJiBuZXh0RGF5WWVhciA9PSB5ZWFyKQorCQkJCXNtb290aCA9IDAuNSpmMSArIDAuNSpmMzsKKwkJCWVsc2UgaWYocG9zID09IFdJTkRPV1NJWkUgJiYgbmV4dERheVllYXIgPT0geWVhcisxKQorCQkJCXNtb290aCA9IDAuNSpmMSArMC41KmYyOworCQkJZWxzZSBpZiAocG9zIDwgV0lORE9XU0laRSkKKwkJCQlzbW9vdGggPSAoKDIqV0lORE9XU0laRS1wb3MpLygyKldJTkRPV1NJWkUpKSpmMSArIChwb3MvKDIqV0lORE9XU0laRSkpKmYyOworCQkJZWxzZSAKKwkJCQlzbW9vdGggPSAocG9zLygyKldJTkRPV1NJWkUpKSpmMSArICgoMipXSU5ET1dTSVpFLXBvcykvKDIqV0lORE9XU0laRSkpKmYzOworCisJCQltb2R1bGF0ZWRUcmFuc21pc3Npb25SYXRlID0gc21vb3RoOworCQl9ICBlbHNlIHsKKwkJCW1vZHVsYXRlZFRyYW5zbWlzc2lvblJhdGUgPSBmMTsKKwkJfQorCQkKKwkJCisJCQorLy8JCWlmKCF0aGlzLmlzRnJlcXVlbmN5RGVwZW5kZW50KCkpICB0cmFuc21pc3Npb25SYXRlICo9IGdldFRyYW5zbWlzc2lvblJhdGVTY2FsZUZhY3RvcihkaXNlYXNlTGFiZWwpOworCQkKKwkJLy8gcG9wdWxhdGlvbiB1c2VkIGluIHRlaCBjb21wdXRhdGlvbiBvZiBiZXRzKlMqaSB3aGVyZSBpID0gSWVmZmVjdGl2ZS9Qb3AuCisJCS8vIFRoaXMgaW5jbHVkZXMgYSBjb3JyZWN0aW9uIHRvIHRoZSBjdXJyZW50CisJCS8vIGluZmVjdGlvdXMgcG9wdWxhdGlvbiAoSWVmZmVjdGl2ZSkgYmFzZWQgb24gdGhlIGNvbnNlcnZlZCBleGNoYW5nZSBvZiBwZW9wbGUgKGNpcmN1bGF0aW9uKQorCQkvLyBiZXR3ZWVuIHJlZ2lvbnMuIE5vdGUgdGhhdCB0aGlzIGlzIG5vIHRoZSAiYXJyaXZhbHMiIGFuZCAiZGVwYXJ0dXJlcyIgd2hpY2ggYXJlCisJCS8vIGEgZGlmZmVyZW50IHByb2Nlc3MuCisJCWZpbmFsIGRvdWJsZSBlZmZlY3RpdmVJbmZlY3Rpb3VzID0gZ2V0Tm9ybWFsaXplZEVmZmVjdGl2ZUluZmVjdGlvdXMoZGlzZWFzZUxhYmVsLmdldE5vZGUoKSwgZGlzZWFzZUxhYmVsLCBjdXJyZW50U0lSLmdldEkoKSk7CisKKwkJCisJCXN5bmNocm9uaXplZCh3cml0dGVkVGltZXMpIHsKKwkJCWlmKCF3cml0dGVkVGltZXMuY29udGFpbnModGltZS5nZXRUaW1lKCkuZ2V0VGltZSgpKSAmJiBkaXNlYXNlTGFiZWwuZ2V0Tm9kZSgpLmdldFVSSSgpLmxhc3RTZWdtZW50KCkuY29udGFpbnMoIklMLTAzLTExMSIpKSB7CisJCQkJdHJ5IHsKKwkJCQlpZihmdyA9PSBudWxsKSBmdyA9IG5ldyBGaWxlV3JpdGVyKCJiZXRhLmNzdiIpOworLy8JCQkJaWYoZncyID09IG51bGwpIGZ3Mj0gbmV3IEZpbGVXcml0ZXIoInIwLmNzdiIpOworCQkJCWZ3LndyaXRlKHRpbWUuZ2V0VGltZSgpLmdldFRpbWUoKSsiLCIrbW9kdWxhdGVkVHJhbnNtaXNzaW9uUmF0ZSsiXG4iKTsKKy8vCQkJCWZ3Mi53cml0ZSh0aW1lLmdldFRpbWUoKS5nZXRUaW1lKCkrIiwiK3RyYW5zbWlzc2lvblJhdGUrIiwiKygodHJhbnNtaXNzaW9uUmF0ZSAvIGdldEFkanVzdGVkUmVjb3ZlcnlSYXRlKHRpbWVEZWx0YSkpICpjdXJyZW50U0lSLmdldFMoKSAvIGVmZmVjdGl2ZVBvcHVsYXRpb24pKyIsIitnZXRBZGp1c3RlZFJlY292ZXJ5UmF0ZSh0aW1lRGVsdGEpKyIsIitnZXRBZGp1c3RlZEltbXVuaXR5TG9zc1JhdGUodGltZURlbHRhKSsiLCIrZWZmZWN0aXZlSW5mZWN0aW91cysiLCIrY3VycmVudFNJUi5nZXRQb3B1bGF0aW9uQ291bnQoKSsiXG4iKTsKKwkJCQkKKwkJCQlmdy5mbHVzaCgpOworLy8JCQkJZncyLmZsdXNoKCk7CisJCQkJfSBjYXRjaChFeGNlcHRpb24gZSkgeworCQkJCQllLnByaW50U3RhY2tUcmFjZSgpOworCQkJCX0KKwkJCQl3cml0dGVkVGltZXMuYWRkKHRpbWUuZ2V0VGltZSgpLmdldFRpbWUoKSk7CisJCQl9CisJCX0KKwkJCisJCS8qCisJCSAqIENvbXB1dGUgc3RhdGUgdHJhbnNpdGlvbnMKKwkJICogCisJCSAqIFJlZ2FyZGluZyBjb21wdXRpbmcgdGhlIG51bWJlciBvZiB0cmFuc2l0aW9ucyBmcm9tIFN1c2NlcHRpYmxlIHRvIEV4cG9zZWQ6CisJCSAqIEluIGEgbGluZWFyIG1vZGVsIHRoZSAiZWZmZWN0aXZlIiBudW1iZXIgb2YgaW5mZWN0aW91cyBwZW9wbGUgaXMganVzdAorCQkgKiB0aGUgbnVtYmVyIG9mIGluZmVjdGlvdXMgcGVvcGxlIEluIGEgbm9ubGluZWFyIG1vZGVsIHdlIGhhdmUgYQorCQkgKiBub25MaW5lYXJpdHkgZXhwb25lbnQgdGhhdCBpcyA+IDEgdGhpcyBtb2RlbHMgdGhlIGVmZmVjdCBvZiBpbW11bmUKKwkJICogc3lzdGVtIHNhdHVyYXRpb24gd2hlbiBTdXNjZXB0aWJsZSBwZW9wbGUgYXJlIGV4cG9zZWQgdG8gbGFyZ2UKKwkJICogbnVtYmVycyBvZiBpbmZlY3Rpb3VzIHBlb3BsZS4gdGhlbiB0aGUgImVmZmVjdGl2ZSIgbnVtYmVyIG9mCisJCSAqIGluZmVjdGlvdXMgcGVvcGxlIGlzIElebm9uTGluZWFyaXR5IGV4cG9uZW50IHRvIGFsbG93IGZvciBlaXRoZXIKKwkJICogbGluZWFyIG9yIG5vbmxpbmVhciBtb2RlbHMgd2UgYWx3YXlzIGNhbGN1bGF0ZSBJXm5vbkxpbmVhcml0eQorCQkgKiBleHBvbmVudCBhbmQgYWxsb3cgbm9uTGluZWFyaXR5IGV4cG9uZW50ID49IDEuMAorCQkgKi8KKwkJZG91YmxlIG51bWJlck9mSW5mZWN0ZWRUb1JlY292ZXJlZCA9IGdldEFkanVzdGVkUmVjb3ZlcnlSYXRlKHRpbWVEZWx0YSkKKwkJKiBjdXJyZW50U0lSLmdldEkoKTsKKwkJZG91YmxlIG51bWJlck9mUmVjb3ZlcmVkVG9TdXNjZXB0aWJsZSA9IGdldEFkanVzdGVkSW1tdW5pdHlMb3NzUmF0ZSh0aW1lRGVsdGEpCisJCSogY3VycmVudFNJUi5nZXRSKCk7CisJCS8vIE5lZWQgdG8gY2hlY2tlZCB3aGF0IGRvIGRvIGhlcmUuIElmIG5vbiBsaW5lYXIgY29lZmZpY2llbnQgaXMgbm90IDEgYW5kCisJCS8vIHRoZSBlZmZlY3RpdmUgaW5mZWN0aW91cyBpcyBuZWdhdGl2ZSAod2hpY2ggaXMgcG9zc2libGUpLCB3aGF0IGRvIGRvPyAKKwkJLy8gTGV0J3MgZmFsbCBiYWNrIG9uIHRoZSBsaW5lYXIgbWV0aG9kIGZvciBub3cuCisJCWRvdWJsZSBudW1iZXJPZlN1c2NlcHRpYmxlVG9JbmZlY3RlZCA9IDAuMDsKKwkJaWYoZ2V0Tm9uTGluZWFyaXR5Q29lZmZpY2llbnQoKSAhPSAxLjAgJiYgZWZmZWN0aXZlSW5mZWN0aW91cyA+PSAwLjApCisJCQludW1iZXJPZlN1c2NlcHRpYmxlVG9JbmZlY3RlZCA9IG1vZHVsYXRlZFRyYW5zbWlzc2lvblJhdGUKKwkJCSogY3VycmVudFNJUi5nZXRTKCkqIE1hdGgucG93KGVmZmVjdGl2ZUluZmVjdGlvdXMsIGdldE5vbkxpbmVhcml0eUNvZWZmaWNpZW50KCkpOworCQllbHNlCisJCQludW1iZXJPZlN1c2NlcHRpYmxlVG9JbmZlY3RlZCA9IG1vZHVsYXRlZFRyYW5zbWlzc2lvblJhdGUKKwkJCSogY3VycmVudFNJUi5nZXRTKCkqIGVmZmVjdGl2ZUluZmVjdGlvdXM7CisJCQorCQkKKwkJLy8gRGV0ZXJtaW5lIGRlbHRhIFMKKwkJZmluYWwgZG91YmxlIGRlbHRhUyA9IG51bWJlck9mUmVjb3ZlcmVkVG9TdXNjZXB0aWJsZSAtIG51bWJlck9mU3VzY2VwdGlibGVUb0luZmVjdGVkOworCQkJLy8gRGV0ZXJtaW5lIGRlbHRhIEkKKwkJZmluYWwgZG91YmxlIGRlbHRhSSA9IG51bWJlck9mU3VzY2VwdGlibGVUb0luZmVjdGVkLSBudW1iZXJPZkluZmVjdGVkVG9SZWNvdmVyZWQ7CisJCS8vIERldGVybWluZSBkZWx0YSBSCisJCWZpbmFsIGRvdWJsZSBkZWx0YVIgPSBudW1iZXJPZkluZmVjdGVkVG9SZWNvdmVyZWQgLSBudW1iZXJPZlJlY292ZXJlZFRvU3VzY2VwdGlibGU7CisJCQorCQlTSVJMYWJlbFZhbHVlSW1wbCByZXQgPSAoU0lSTGFiZWxWYWx1ZUltcGwpcmV0dXJuVmFsdWU7CisJCXJldC5zZXRTKGRlbHRhUyk7CisJCXJldC5zZXRJKGRlbHRhSSk7CisJCXJldC5zZXRJbmNpZGVuY2UobnVtYmVyT2ZTdXNjZXB0aWJsZVRvSW5mZWN0ZWQpOworCQlyZXQuc2V0UihkZWx0YVIpOworCQlyZXQuc2V0RGlzZWFzZURlYXRocygwKTsKKwkJcmV0dXJuIHJldDsKKwl9IC8vIGNvbXB1dGVUcmFuc2l0aW9ucworCQorCXB1YmxpYyBkb3VibGUgZ2V0QWRqdXN0ZWRUcmFuc21pc3Npb25SYXRlKGRvdWJsZSB0ciwgbG9uZyB0aW1lRGVsdGEpIHsKKwkJcmV0dXJuIHRyCisJCQkJKiAoKGRvdWJsZSkgdGltZURlbHRhIC8gKGRvdWJsZSkgZ2V0VGltZVBlcmlvZCgpKTsKKwl9IC8vIGdldEFkanVzdGVkVHJhbnNtaXNzaW9uUmF0ZQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIEVDbGFzcyBlU3RhdGljQ2xhc3MoKSB7CisJCXJldHVybiBGb3JjaW5nUGFja2FnZS5MaXRlcmFscy5HQVVTU0lBTjNfRk9SQ0lOR19ESVNFQVNFX01PREVMOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBkb3VibGUgZ2V0U2lnbWEyXzMoKSB7CisJCXJldHVybiBzaWdtYTJfMzsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRTaWdtYTJfMyhkb3VibGUgbmV3U2lnbWEyXzMpIHsKKwkJZG91YmxlIG9sZFNpZ21hMl8zID0gc2lnbWEyXzM7CisJCXNpZ21hMl8zID0gbmV3U2lnbWEyXzM7CisJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkKKwkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIEZvcmNpbmdQYWNrYWdlLkdBVVNTSUFOM19GT1JDSU5HX0RJU0VBU0VfTU9ERUxfX1NJR01BMl8zLCBvbGRTaWdtYTJfMywgc2lnbWEyXzMpKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgZG91YmxlIGdldFRyYW5zbWlzc2lvblJhdGUyKCkgeworCQlyZXR1cm4gdHJhbnNtaXNzaW9uUmF0ZTI7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgc2V0VHJhbnNtaXNzaW9uUmF0ZTIoZG91YmxlIG5ld1RyYW5zbWlzc2lvblJhdGUyKSB7CisJCWRvdWJsZSBvbGRUcmFuc21pc3Npb25SYXRlMiA9IHRyYW5zbWlzc2lvblJhdGUyOworCQl0cmFuc21pc3Npb25SYXRlMiA9IG5ld1RyYW5zbWlzc2lvblJhdGUyOworCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpCisJCQllTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBGb3JjaW5nUGFja2FnZS5HQVVTU0lBTjNfRk9SQ0lOR19ESVNFQVNFX01PREVMX19UUkFOU01JU1NJT05fUkFURTIsIG9sZFRyYW5zbWlzc2lvblJhdGUyLCB0cmFuc21pc3Npb25SYXRlMikpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBkb3VibGUgZ2V0VHJhbnNtaXNzaW9uUmF0ZTMoKSB7CisJCXJldHVybiB0cmFuc21pc3Npb25SYXRlMzsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRUcmFuc21pc3Npb25SYXRlMyhkb3VibGUgbmV3VHJhbnNtaXNzaW9uUmF0ZTMpIHsKKwkJZG91YmxlIG9sZFRyYW5zbWlzc2lvblJhdGUzID0gdHJhbnNtaXNzaW9uUmF0ZTM7CisJCXRyYW5zbWlzc2lvblJhdGUzID0gbmV3VHJhbnNtaXNzaW9uUmF0ZTM7CisJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkKKwkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIEZvcmNpbmdQYWNrYWdlLkdBVVNTSUFOM19GT1JDSU5HX0RJU0VBU0VfTU9ERUxfX1RSQU5TTUlTU0lPTl9SQVRFMywgb2xkVHJhbnNtaXNzaW9uUmF0ZTMsIHRyYW5zbWlzc2lvblJhdGUzKSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIGRvdWJsZSBnZXRNb2R1bGF0aW9uRmxvb3JfMigpIHsKKwkJcmV0dXJuIG1vZHVsYXRpb25GbG9vcl8yOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIHNldE1vZHVsYXRpb25GbG9vcl8yKGRvdWJsZSBuZXdNb2R1bGF0aW9uRmxvb3JfMikgeworCQlkb3VibGUgb2xkTW9kdWxhdGlvbkZsb29yXzIgPSBtb2R1bGF0aW9uRmxvb3JfMjsKKwkJbW9kdWxhdGlvbkZsb29yXzIgPSBuZXdNb2R1bGF0aW9uRmxvb3JfMjsKKwkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQorCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgRm9yY2luZ1BhY2thZ2UuR0FVU1NJQU4zX0ZPUkNJTkdfRElTRUFTRV9NT0RFTF9fTU9EVUxBVElPTl9GTE9PUl8yLCBvbGRNb2R1bGF0aW9uRmxvb3JfMiwgbW9kdWxhdGlvbkZsb29yXzIpKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgT2JqZWN0IGVHZXQoaW50IGZlYXR1cmVJRCwgYm9vbGVhbiByZXNvbHZlLCBib29sZWFuIGNvcmVUeXBlKSB7CisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7CisJCQljYXNlIEZvcmNpbmdQYWNrYWdlLkdBVVNTSUFOM19GT1JDSU5HX0RJU0VBU0VfTU9ERUxfX1NJR01BMl8zOgorCQkJCXJldHVybiBnZXRTaWdtYTJfMygpOworCQkJY2FzZSBGb3JjaW5nUGFja2FnZS5HQVVTU0lBTjNfRk9SQ0lOR19ESVNFQVNFX01PREVMX19UUkFOU01JU1NJT05fUkFURTI6CisJCQkJcmV0dXJuIGdldFRyYW5zbWlzc2lvblJhdGUyKCk7CisJCQljYXNlIEZvcmNpbmdQYWNrYWdlLkdBVVNTSUFOM19GT1JDSU5HX0RJU0VBU0VfTU9ERUxfX1RSQU5TTUlTU0lPTl9SQVRFMzoKKwkJCQlyZXR1cm4gZ2V0VHJhbnNtaXNzaW9uUmF0ZTMoKTsKKwkJCWNhc2UgRm9yY2luZ1BhY2thZ2UuR0FVU1NJQU4zX0ZPUkNJTkdfRElTRUFTRV9NT0RFTF9fTU9EVUxBVElPTl9GTE9PUl8yOgorCQkJCXJldHVybiBnZXRNb2R1bGF0aW9uRmxvb3JfMigpOworCQl9CisJCXJldHVybiBzdXBlci5lR2V0KGZlYXR1cmVJRCwgcmVzb2x2ZSwgY29yZVR5cGUpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGVTZXQoaW50IGZlYXR1cmVJRCwgT2JqZWN0IG5ld1ZhbHVlKSB7CisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7CisJCQljYXNlIEZvcmNpbmdQYWNrYWdlLkdBVVNTSUFOM19GT1JDSU5HX0RJU0VBU0VfTU9ERUxfX1NJR01BMl8zOgorCQkJCXNldFNpZ21hMl8zKChEb3VibGUpbmV3VmFsdWUpOworCQkJCXJldHVybjsKKwkJCWNhc2UgRm9yY2luZ1BhY2thZ2UuR0FVU1NJQU4zX0ZPUkNJTkdfRElTRUFTRV9NT0RFTF9fVFJBTlNNSVNTSU9OX1JBVEUyOgorCQkJCXNldFRyYW5zbWlzc2lvblJhdGUyKChEb3VibGUpbmV3VmFsdWUpOworCQkJCXJldHVybjsKKwkJCWNhc2UgRm9yY2luZ1BhY2thZ2UuR0FVU1NJQU4zX0ZPUkNJTkdfRElTRUFTRV9NT0RFTF9fVFJBTlNNSVNTSU9OX1JBVEUzOgorCQkJCXNldFRyYW5zbWlzc2lvblJhdGUzKChEb3VibGUpbmV3VmFsdWUpOworCQkJCXJldHVybjsKKwkJCWNhc2UgRm9yY2luZ1BhY2thZ2UuR0FVU1NJQU4zX0ZPUkNJTkdfRElTRUFTRV9NT0RFTF9fTU9EVUxBVElPTl9GTE9PUl8yOgorCQkJCXNldE1vZHVsYXRpb25GbG9vcl8yKChEb3VibGUpbmV3VmFsdWUpOworCQkJCXJldHVybjsKKwkJfQorCQlzdXBlci5lU2V0KGZlYXR1cmVJRCwgbmV3VmFsdWUpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGVVbnNldChpbnQgZmVhdHVyZUlEKSB7CisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7CisJCQljYXNlIEZvcmNpbmdQYWNrYWdlLkdBVVNTSUFOM19GT1JDSU5HX0RJU0VBU0VfTU9ERUxfX1NJR01BMl8zOgorCQkJCXNldFNpZ21hMl8zKFNJR01BMl8zX0VERUZBVUxUKTsKKwkJCQlyZXR1cm47CisJCQljYXNlIEZvcmNpbmdQYWNrYWdlLkdBVVNTSUFOM19GT1JDSU5HX0RJU0VBU0VfTU9ERUxfX1RSQU5TTUlTU0lPTl9SQVRFMjoKKwkJCQlzZXRUcmFuc21pc3Npb25SYXRlMihUUkFOU01JU1NJT05fUkFURTJfRURFRkFVTFQpOworCQkJCXJldHVybjsKKwkJCWNhc2UgRm9yY2luZ1BhY2thZ2UuR0FVU1NJQU4zX0ZPUkNJTkdfRElTRUFTRV9NT0RFTF9fVFJBTlNNSVNTSU9OX1JBVEUzOgorCQkJCXNldFRyYW5zbWlzc2lvblJhdGUzKFRSQU5TTUlTU0lPTl9SQVRFM19FREVGQVVMVCk7CisJCQkJcmV0dXJuOworCQkJY2FzZSBGb3JjaW5nUGFja2FnZS5HQVVTU0lBTjNfRk9SQ0lOR19ESVNFQVNFX01PREVMX19NT0RVTEFUSU9OX0ZMT09SXzI6CisJCQkJc2V0TW9kdWxhdGlvbkZsb29yXzIoTU9EVUxBVElPTl9GTE9PUl8yX0VERUZBVUxUKTsKKwkJCQlyZXR1cm47CisJCX0KKwkJc3VwZXIuZVVuc2V0KGZlYXR1cmVJRCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIGJvb2xlYW4gZUlzU2V0KGludCBmZWF0dXJlSUQpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJCWNhc2UgRm9yY2luZ1BhY2thZ2UuR0FVU1NJQU4zX0ZPUkNJTkdfRElTRUFTRV9NT0RFTF9fU0lHTUEyXzM6CisJCQkJcmV0dXJuIHNpZ21hMl8zICE9IFNJR01BMl8zX0VERUZBVUxUOworCQkJY2FzZSBGb3JjaW5nUGFja2FnZS5HQVVTU0lBTjNfRk9SQ0lOR19ESVNFQVNFX01PREVMX19UUkFOU01JU1NJT05fUkFURTI6CisJCQkJcmV0dXJuIHRyYW5zbWlzc2lvblJhdGUyICE9IFRSQU5TTUlTU0lPTl9SQVRFMl9FREVGQVVMVDsKKwkJCWNhc2UgRm9yY2luZ1BhY2thZ2UuR0FVU1NJQU4zX0ZPUkNJTkdfRElTRUFTRV9NT0RFTF9fVFJBTlNNSVNTSU9OX1JBVEUzOgorCQkJCXJldHVybiB0cmFuc21pc3Npb25SYXRlMyAhPSBUUkFOU01JU1NJT05fUkFURTNfRURFRkFVTFQ7CisJCQljYXNlIEZvcmNpbmdQYWNrYWdlLkdBVVNTSUFOM19GT1JDSU5HX0RJU0VBU0VfTU9ERUxfX01PRFVMQVRJT05fRkxPT1JfMjoKKwkJCQlyZXR1cm4gbW9kdWxhdGlvbkZsb29yXzIgIT0gTU9EVUxBVElPTl9GTE9PUl8yX0VERUZBVUxUOworCQl9CisJCXJldHVybiBzdXBlci5lSXNTZXQoZmVhdHVyZUlEKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkgeworCQlpZiAoZUlzUHJveHkoKSkgcmV0dXJuIHN1cGVyLnRvU3RyaW5nKCk7CisKKwkJU3RyaW5nQnVmZmVyIHJlc3VsdCA9IG5ldyBTdHJpbmdCdWZmZXIoc3VwZXIudG9TdHJpbmcoKSk7CisJCXJlc3VsdC5hcHBlbmQoIiAoc2lnbWEyXzM6ICIpOyAvLyROT04tTkxTLTEkCisJCXJlc3VsdC5hcHBlbmQoc2lnbWEyXzMpOworCQlyZXN1bHQuYXBwZW5kKCIsIHRyYW5zbWlzc2lvblJhdGUyOiAiKTsgLy8kTk9OLU5MUy0xJAorCQlyZXN1bHQuYXBwZW5kKHRyYW5zbWlzc2lvblJhdGUyKTsKKwkJcmVzdWx0LmFwcGVuZCgiLCB0cmFuc21pc3Npb25SYXRlMzogIik7IC8vJE5PTi1OTFMtMSQKKwkJcmVzdWx0LmFwcGVuZCh0cmFuc21pc3Npb25SYXRlMyk7CisJCXJlc3VsdC5hcHBlbmQoIiwgbW9kdWxhdGlvbkZsb29yXzI6ICIpOyAvLyROT04tTkxTLTEkCisJCXJlc3VsdC5hcHBlbmQobW9kdWxhdGlvbkZsb29yXzIpOworCQlyZXN1bHQuYXBwZW5kKCcpJyk7CisJCXJldHVybiByZXN1bHQudG9TdHJpbmcoKTsKKwl9CisKK30gLy9HYXVzc2lhbjNGb3JjaW5nRGlzZWFzZU1vZGVsSW1wbApkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZm9yY2luZy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL2ZvcmNpbmcvaW1wbC9HYXVzc2lhbkZvcmNpbmdEaXNlYXNlTW9kZWxJbXBsLmphdmEgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5mb3JjaW5nL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvZm9yY2luZy9pbXBsL0dhdXNzaWFuRm9yY2luZ0Rpc2Vhc2VNb2RlbEltcGwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYWVhN2IxCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZm9yY2luZy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL2ZvcmNpbmcvaW1wbC9HYXVzc2lhbkZvcmNpbmdEaXNlYXNlTW9kZWxJbXBsLmphdmEKQEAgLTAsMCArMSw1MzUgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmZvcmNpbmcuaW1wbDsKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTAgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgamF2YS5pby5GaWxlV3JpdGVyOworaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7CitpbXBvcnQgamF2YS51dGlsLkNhbGVuZGFyOworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLmltcGwuRU5vdGlmaWNhdGlvbkltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLlNURU1UaW1lOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5mb3JjaW5nLkZvcmNpbmdQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5mb3JjaW5nLkdhdXNzaWFuRm9yY2luZ0Rpc2Vhc2VNb2RlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU0lMYWJlbFZhbHVlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TSVJMYWJlbFZhbHVlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsVmFsdWU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLmltcGwuU0lSTGFiZWxWYWx1ZUltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLmltcGwuU3RvY2hhc3RpY1NJUkRpc2Vhc2VNb2RlbEltcGw7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIEFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5HYXVzc2lhbiBGb3JjaW5nIERpc2Vhc2UgTW9kZWw8L2I+PC9lbT4nLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiA8cD4KKyAqIFRoZSBmb2xsb3dpbmcgZmVhdHVyZXMgYXJlIGltcGxlbWVudGVkOgorICogPHVsPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5mb3JjaW5nLmltcGwuR2F1c3NpYW5Gb3JjaW5nRGlzZWFzZU1vZGVsSW1wbCNnZXRTaWdtYTIgPGVtPlNpZ21hMjwvZW0+fTwvbGk+CisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmZvcmNpbmcuaW1wbC5HYXVzc2lhbkZvcmNpbmdEaXNlYXNlTW9kZWxJbXBsI2dldE1vZHVsYXRpb25QZXJpb2QgPGVtPk1vZHVsYXRpb24gUGVyaW9kPC9lbT59PC9saT4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZm9yY2luZy5pbXBsLkdhdXNzaWFuRm9yY2luZ0Rpc2Vhc2VNb2RlbEltcGwjZ2V0TW9kdWxhdGlvblBoYXNlU2hpZnQgPGVtPk1vZHVsYXRpb24gUGhhc2UgU2hpZnQ8L2VtPn08L2xpPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5mb3JjaW5nLmltcGwuR2F1c3NpYW5Gb3JjaW5nRGlzZWFzZU1vZGVsSW1wbCNnZXRNb2R1bGF0aW9uRmxvb3IgPGVtPk1vZHVsYXRpb24gRmxvb3I8L2VtPn08L2xpPgorICogPC91bD4KKyAqIDwvcD4KKyAqCisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBHYXVzc2lhbkZvcmNpbmdEaXNlYXNlTW9kZWxJbXBsIGV4dGVuZHMgU3RvY2hhc3RpY1NJUkRpc2Vhc2VNb2RlbEltcGwgaW1wbGVtZW50cyBHYXVzc2lhbkZvcmNpbmdEaXNlYXNlTW9kZWwgeworCS8qKgorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRTaWdtYTIoKSA8ZW0+U2lnbWEyPC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNnZXRTaWdtYTIoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgZG91YmxlIFNJR01BMl9FREVGQVVMVCA9IDEwMC4wOworCS8qKgorCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldFNpZ21hMigpIDxlbT5TaWdtYTI8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI2dldFNpZ21hMigpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIGRvdWJsZSBzaWdtYTIgPSBTSUdNQTJfRURFRkFVTFQ7CisJLyoqCisJICogVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldE1vZHVsYXRpb25QZXJpb2QoKSA8ZW0+TW9kdWxhdGlvbiBQZXJpb2Q8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI2dldE1vZHVsYXRpb25QZXJpb2QoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgZG91YmxlIE1PRFVMQVRJT05fUEVSSU9EX0VERUZBVUxUID0gMzY1LjI1OworCS8qKgorCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldE1vZHVsYXRpb25QZXJpb2QoKSA8ZW0+TW9kdWxhdGlvbiBQZXJpb2Q8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI2dldE1vZHVsYXRpb25QZXJpb2QoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBkb3VibGUgbW9kdWxhdGlvblBlcmlvZCA9IE1PRFVMQVRJT05fUEVSSU9EX0VERUZBVUxUOworCS8qKgorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRNb2R1bGF0aW9uUGhhc2VTaGlmdCgpIDxlbT5Nb2R1bGF0aW9uIFBoYXNlIFNoaWZ0PC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNnZXRNb2R1bGF0aW9uUGhhc2VTaGlmdCgpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBkb3VibGUgTU9EVUxBVElPTl9QSEFTRV9TSElGVF9FREVGQVVMVCA9IDAuMDsKKwkvKioKKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRNb2R1bGF0aW9uUGhhc2VTaGlmdCgpIDxlbT5Nb2R1bGF0aW9uIFBoYXNlIFNoaWZ0PC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNnZXRNb2R1bGF0aW9uUGhhc2VTaGlmdCgpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIGRvdWJsZSBtb2R1bGF0aW9uUGhhc2VTaGlmdCA9IE1PRFVMQVRJT05fUEhBU0VfU0hJRlRfRURFRkFVTFQ7CisJLyoqCisJICogVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldE1vZHVsYXRpb25GbG9vcigpIDxlbT5Nb2R1bGF0aW9uIEZsb29yPC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNnZXRNb2R1bGF0aW9uRmxvb3IoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgZG91YmxlIE1PRFVMQVRJT05fRkxPT1JfRURFRkFVTFQgPSAwLjY7CisJLyoqCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0TW9kdWxhdGlvbkZsb29yKCkgPGVtPk1vZHVsYXRpb24gRmxvb3I8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI2dldE1vZHVsYXRpb25GbG9vcigpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIGRvdWJsZSBtb2R1bGF0aW9uRmxvb3IgPSBNT0RVTEFUSU9OX0ZMT09SX0VERUZBVUxUOworCisJcHJpdmF0ZSBDYWxlbmRhciBjYWxlbmRhciA9IENhbGVuZGFyLmdldEluc3RhbmNlKCk7CisJcHJpdmF0ZSBDYWxlbmRhciBjYWxlbmRhcjIgPSBDYWxlbmRhci5nZXRJbnN0YW5jZSgpOworCXByaXZhdGUgc3RhdGljIGZpbmFsIGRvdWJsZSBNSUxMSVNfUEVSX0RBWSA9IDEwMDAuMCo2MC4wKjYwLjAqMjQuMDsKKwkKKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgV0lORE9XU0laRSA9IDMwOworCQorCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlwdWJsaWMgR2F1c3NpYW5Gb3JjaW5nRGlzZWFzZU1vZGVsSW1wbCgpIHsKKwkJc3VwZXIoKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgRUNsYXNzIGVTdGF0aWNDbGFzcygpIHsKKwkJcmV0dXJuIEZvcmNpbmdQYWNrYWdlLkxpdGVyYWxzLkdBVVNTSUFOX0ZPUkNJTkdfRElTRUFTRV9NT0RFTDsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgZG91YmxlIGdldFNpZ21hMigpIHsKKwkJcmV0dXJuIHNpZ21hMjsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRTaWdtYTIoZG91YmxlIG5ld1NpZ21hMikgeworCQlkb3VibGUgb2xkU2lnbWEyID0gc2lnbWEyOworCQlzaWdtYTIgPSBuZXdTaWdtYTI7CisJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkKKwkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIEZvcmNpbmdQYWNrYWdlLkdBVVNTSUFOX0ZPUkNJTkdfRElTRUFTRV9NT0RFTF9fU0lHTUEyLCBvbGRTaWdtYTIsIHNpZ21hMikpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBkb3VibGUgZ2V0TW9kdWxhdGlvblBlcmlvZCgpIHsKKwkJcmV0dXJuIG1vZHVsYXRpb25QZXJpb2Q7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgc2V0TW9kdWxhdGlvblBlcmlvZChkb3VibGUgbmV3TW9kdWxhdGlvblBlcmlvZCkgeworCQlkb3VibGUgb2xkTW9kdWxhdGlvblBlcmlvZCA9IG1vZHVsYXRpb25QZXJpb2Q7CisJCW1vZHVsYXRpb25QZXJpb2QgPSBuZXdNb2R1bGF0aW9uUGVyaW9kOworCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpCisJCQllTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBGb3JjaW5nUGFja2FnZS5HQVVTU0lBTl9GT1JDSU5HX0RJU0VBU0VfTU9ERUxfX01PRFVMQVRJT05fUEVSSU9ELCBvbGRNb2R1bGF0aW9uUGVyaW9kLCBtb2R1bGF0aW9uUGVyaW9kKSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIGRvdWJsZSBnZXRNb2R1bGF0aW9uUGhhc2VTaGlmdCgpIHsKKwkJcmV0dXJuIG1vZHVsYXRpb25QaGFzZVNoaWZ0OworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIHNldE1vZHVsYXRpb25QaGFzZVNoaWZ0KGRvdWJsZSBuZXdNb2R1bGF0aW9uUGhhc2VTaGlmdCkgeworCQlkb3VibGUgb2xkTW9kdWxhdGlvblBoYXNlU2hpZnQgPSBtb2R1bGF0aW9uUGhhc2VTaGlmdDsKKwkJbW9kdWxhdGlvblBoYXNlU2hpZnQgPSBuZXdNb2R1bGF0aW9uUGhhc2VTaGlmdDsKKwkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQorCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgRm9yY2luZ1BhY2thZ2UuR0FVU1NJQU5fRk9SQ0lOR19ESVNFQVNFX01PREVMX19NT0RVTEFUSU9OX1BIQVNFX1NISUZULCBvbGRNb2R1bGF0aW9uUGhhc2VTaGlmdCwgbW9kdWxhdGlvblBoYXNlU2hpZnQpKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgZG91YmxlIGdldE1vZHVsYXRpb25GbG9vcigpIHsKKwkJcmV0dXJuIG1vZHVsYXRpb25GbG9vcjsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRNb2R1bGF0aW9uRmxvb3IoZG91YmxlIG5ld01vZHVsYXRpb25GbG9vcikgeworCQlkb3VibGUgb2xkTW9kdWxhdGlvbkZsb29yID0gbW9kdWxhdGlvbkZsb29yOworCQltb2R1bGF0aW9uRmxvb3IgPSBuZXdNb2R1bGF0aW9uRmxvb3I7CisJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkKKwkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIEZvcmNpbmdQYWNrYWdlLkdBVVNTSUFOX0ZPUkNJTkdfRElTRUFTRV9NT0RFTF9fTU9EVUxBVElPTl9GTE9PUiwgb2xkTW9kdWxhdGlvbkZsb29yLCBtb2R1bGF0aW9uRmxvb3IpKTsKKwl9CisKKwkvKioKKwkgKiBUbyBjcmVhdGUgYSB1c2VyIGRlZmluZWQgKGV4cGVyaW1lbnRhbCkgZGlzZWFzZSBtb2RlLCB0aGUgdXNlciBtYXkgd2lzaCAKKwkgKiB0byBleHRlbmQgdGhlIGV4aXN0aW5nIG1vZGVscyBidXQgc2ltcGx5IG92ZXJyaWRlIHR3byBtZXRob2RzLgorCSAqIGNvbXB1dGVEaXNlYXNlRGVsdGFzKCkgc2V0cyB0aGUgd29yayBmbG93IGZvciB0aGUgbW9kZWwuIFRoZSBmb2xsb3dpbmcgZXhhbXBsZQorCSAqIGlzIGRlcml2ZWQgZnJvbSB0aGUgc3RhbmRhcmQgY29kZSBmb3IgYWxsIGJ1aWxkIGluIG1vZGVscyBidXQgaW4gdGhlIGxpbmUgYmVsb3cKKwkgKiB3aGVyZSB3ZSBkZWZpbmUgZmluYWwgImRvdWJsZSB0cmFuc21pc2lvblJhdGUiIHdlIHNob3cgYW5kIGV4YW1wbGUgbW9kaWZpY2F0aW9uCisJICogd2hlcmUgYSBwZXJpb2RpYyBmb3JjaW5nIGZhY3RvciB7IHNpbihmcmVxKnQpIH0gaXMgYWRkZWQgdG8gdGhlIGNvZGUgYXMgYW4gZXhhbXBsZQorCSAqIG1vZGlmaWNhdGlvbi4KKwkgKiAKKwkgKiBAcGFyYW0gdGltZQorCSAqIAkJCSAgY3VycmVudCB0aW1lCisJICogQHBhcmFtIGN1cnJlbnRTdGF0ZQorCSAqICAgICAgICAgICAgdGhlIGN1cnJlbnQgc3RhdGUgb2YgdGhlIHBvcHVsYXRpb24KKwkgKiBAcGFyYW0gZGlzZWFzZUxhYmVsCisJICogICAgICAgICAgICB0aGUgZGlzZWFzZSBsYWJlbCBmb3Igd2hpY2ggdGhlIHN0YXRlIHRyYW5zaXRpb25zIGFyZSBiZWluZworCSAqICAgICAgICAgICAgY29tcHV0ZWQuCisJICogQHBhcmFtIHRpbWVEZWx0YQorCSAqICAgICAgICAgICAgdGhlIHRpbWUgcGVyaW9kIChtaWxsaXNlY29uZHMpIG92ZXIgd2hpY2ggdGhlIHBvcHVsYXRpb24KKwkgKiAgICAgICAgICAgIG1lbWJlcnMgdHJhbnNpdGlvbiB0byBuZXcgc3RhdGVzICAgICAgICAgIAorCSAqIEByZXR1cm4gYSBkaXNlYXNlIHN0YXRlIGxhYmVsIHZhbHVlIHRoYXQgY29udGFpbnMgdGhlIG51bWJlciBvZgorCSAqICAgICAgICAgZGVsdGEgY2hhbmdlcyBpbiBlYWNoIGRpc2Vhc2Ugc3RhdGUKKwkgKiAKKwkgKiBVc2VycyBjYW4gbW9kaWZ5IHRoZSBtZXRob2QgYmVsb3cgdG8gY3JlYXRlIHRoZWlyIG93biBtb2RlbC4KKwkgKiAKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5pbXBsLlNJSW1wbCNjb21wdXRlRGlzZWFzZURlbHRhcyhTdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsVmFsdWUsCisJICogICAgICBTdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsLCBsb25nKQorCSAqLworCXByaXZhdGUgQXJyYXlMaXN0PExvbmc+IHdyaXR0ZWRUaW1lcyA9IG5ldyBBcnJheUxpc3Q8TG9uZz4oKTsKKwlwcml2YXRlIEZpbGVXcml0ZXIgZnc7CisJcHJpdmF0ZSBMb25nIGZpcnN0VGltZSA9IG5ldyBMb25nKExvbmcuTUFYX1ZBTFVFKTsKKwlAT3ZlcnJpZGUKKwlwdWJsaWMgU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbFZhbHVlIGNvbXB1dGVEaXNlYXNlRGVsdGFzKAorCQkJZmluYWwgU1RFTVRpbWUgdGltZSwKKwkJCWZpbmFsIFN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZSBjdXJyZW50U3RhdGUsCisJCQlmaW5hbCBTdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsIGRpc2Vhc2VMYWJlbCwgZmluYWwgbG9uZyB0aW1lRGVsdGEsIERpc2Vhc2VNb2RlbExhYmVsVmFsdWUgcmV0dXJuVmFsdWUpIHsKK2ZpbmFsIFNJUkxhYmVsVmFsdWUgY3VycmVudFNJUiA9IChTSVJMYWJlbFZhbHVlKSBjdXJyZW50U3RhdGU7CisJCQorCQlsb25nIGN1cnJlbnRNaWxsaXMgPSB0aW1lLmdldFRpbWUoKS5nZXRUaW1lKCk7CisJCWRvdWJsZSBtb2R1bGF0aW9uUGVyaW9kID0gZ2V0TW9kdWxhdGlvblBlcmlvZCgpOworCQlkb3VibGUgcGhhc2UgPSBnZXRNb2R1bGF0aW9uUGhhc2VTaGlmdCgpOwkKKwkJZG91YmxlIHNpZ21hMiA9IGdldFNpZ21hMigpOwkJCisJCQorCQlzeW5jaHJvbml6ZWQodGhpcykgeworCQkJaWYoZmlyc3RUaW1lLmxvbmdWYWx1ZSgpID09IExvbmcuTUFYX1ZBTFVFKQorCQkJCWZpcnN0VGltZSA9IExvbmcudmFsdWVPZih0aW1lLmdldFRpbWUoKS5nZXRUaW1lKCkpOworCQl9CisJCQorCQkvLyBHZXQgdGhlIGRheSBmcm9tIHRpbWUgYW5kIGFkanVzdCBmb3IgdGhlIHBoYXNlCQorCQlkb3VibGUgZGF5PTA7CisJCS8vIFNoYXJlZCBjYWxlbmRhciBvYmplY3Qgbm90IHRocmVhZCBzYWZlCisJCXN5bmNocm9uaXplZChjYWxlbmRhcikgeworCQkJY2FsZW5kYXIuc2V0VGltZUluTWlsbGlzKGN1cnJlbnRNaWxsaXMrKGxvbmcpKHBoYXNlKk1JTExJU19QRVJfREFZKSk7CisJCQljYWxlbmRhcjIuc2V0VGltZUluTWlsbGlzKGZpcnN0VGltZS5sb25nVmFsdWUoKSk7CisJCQlkYXkgPSAoY2FsZW5kYXIuZ2V0VGltZUluTWlsbGlzKCkgLSBjYWxlbmRhcjIuZ2V0VGltZUluTWlsbGlzKCkpL01JTExJU19QRVJfREFZOworCQkKKwkJfQorCQlkb3VibGUgaW50RGF5ID0gZGF5OworCQlpbnQgeWVhciA9IChpbnQpKGRheSAvIG1vZHVsYXRpb25QZXJpb2QpOworCQlpbnQgbmV4dERheVllYXIgPSAoaW50KSgoZGF5KzEpIC8gbW9kdWxhdGlvblBlcmlvZCk7CisJCQorCQlkb3VibGUgbW9kdWxhdGVkVHJhbnNtaXNzaW9uUmF0ZSA9IDAuMDsKKwkJCisJCS8vIFNtb290aGluZworCQlpZihkYXkgJSBtb2R1bGF0aW9uUGVyaW9kIDwgV0lORE9XU0laRSB8fCBkYXkgJSBtb2R1bGF0aW9uUGVyaW9kID4gbW9kdWxhdGlvblBlcmlvZC1XSU5ET1dTSVpFKSB7CisJCQlkb3VibGUgcG9zOworCQkJZG91YmxlIGZkYXkgPSAoKGRheSAlIG1vZHVsYXRpb25QZXJpb2QpLW1vZHVsYXRpb25QZXJpb2QvMi4wKS9tb2R1bGF0aW9uUGVyaW9kOworCQkJZG91YmxlIGYxID0gKGdldEFkanVzdGVkVHJhbnNtaXNzaW9uUmF0ZSh0aW1lRGVsdGEpKSAgKiAoZ2V0TW9kdWxhdGlvbkZsb29yKCkgKyAoMS1nZXRNb2R1bGF0aW9uRmxvb3IoKSkqTWF0aC5leHAoLShNYXRoLnBvdyhmZGF5LDIpKS8oMipzaWdtYTIpKSk7CisJCQlkb3VibGUgZjIgPSAoZ2V0QWRqdXN0ZWRUcmFuc21pc3Npb25SYXRlKHRpbWVEZWx0YSkpICAqIChnZXRNb2R1bGF0aW9uRmxvb3IoKSArICgxLWdldE1vZHVsYXRpb25GbG9vcigpKSpNYXRoLmV4cCgtKE1hdGgucG93KGZkYXktMSwyKSkvKDIqc2lnbWEyKSkpOworCQkJZG91YmxlIGYzID0gKGdldEFkanVzdGVkVHJhbnNtaXNzaW9uUmF0ZSh0aW1lRGVsdGEpKSAgKiAoZ2V0TW9kdWxhdGlvbkZsb29yKCkgKyAoMS1nZXRNb2R1bGF0aW9uRmxvb3IoKSkqTWF0aC5leHAoLShNYXRoLnBvdyhmZGF5KzEsMikpLygyKnNpZ21hMikpKTsKKworCisJCQlpZigoZGF5ICUgbW9kdWxhdGlvblBlcmlvZCkgPiBtb2R1bGF0aW9uUGVyaW9kIC0gV0lORE9XU0laRSkKKwkJCQlwb3MgPSBXSU5ET1dTSVpFIC0gKG1vZHVsYXRpb25QZXJpb2QgLSAoZGF5ICUgbW9kdWxhdGlvblBlcmlvZCkpOworCQkJZWxzZSBwb3MgPSBXSU5ET1dTSVpFKyhkYXkgJSBtb2R1bGF0aW9uUGVyaW9kKTsKKwkJCQorCQkJcG9zID0gTWF0aC5yb3VuZChwb3MpOworCQkJZG91YmxlIHNtb290aCA9IDA7CisJCQlpZihwb3MgPT0gV0lORE9XU0laRSAmJiBuZXh0RGF5WWVhciA9PSB5ZWFyKQorCQkJCXNtb290aCA9IDAuNSpmMSArIDAuNSpmMzsKKwkJCWVsc2UgaWYocG9zID09IFdJTkRPV1NJWkUgJiYgbmV4dERheVllYXIgPT0geWVhcisxKQorCQkJCXNtb290aCA9IDAuNSpmMSArMC41KmYyOworCQkJZWxzZSBpZiAocG9zIDwgV0lORE9XU0laRSkKKwkJCQlzbW9vdGggPSAoKDIqV0lORE9XU0laRS1wb3MpLygyKldJTkRPV1NJWkUpKSpmMSArIChwb3MvKDIqV0lORE9XU0laRSkpKmYyOworCQkJZWxzZSAKKwkJCQlzbW9vdGggPSAocG9zLygyKldJTkRPV1NJWkUpKSpmMSArICgoMipXSU5ET1dTSVpFLXBvcykvKDIqV0lORE9XU0laRSkpKmYzOworCisJCQltb2R1bGF0ZWRUcmFuc21pc3Npb25SYXRlID0gc21vb3RoOworCQl9IGVsc2UgeworCQkJZG91YmxlIGZkYXkgPSAoKGRheSAlIG1vZHVsYXRpb25QZXJpb2QpLW1vZHVsYXRpb25QZXJpb2QvMi4wKS9tb2R1bGF0aW9uUGVyaW9kOworCQkJbW9kdWxhdGVkVHJhbnNtaXNzaW9uUmF0ZSA9IChnZXRBZGp1c3RlZFRyYW5zbWlzc2lvblJhdGUodGltZURlbHRhKSkgICogKGdldE1vZHVsYXRpb25GbG9vcigpICsgKDEtZ2V0TW9kdWxhdGlvbkZsb29yKCkpKk1hdGguZXhwKC0oTWF0aC5wb3coZmRheSwyKSkvKDIqc2lnbWEyKSkpOworCQl9CisJCQorCisvKgkJaWYoZGlzZWFzZUxhYmVsLmdldE5vZGUoKS5nZXRVUkkoKS50b1N0cmluZygpLmhhc2hDb2RlKCkgJSAyID09IDAgCisJCQkJJiYgKChpbnQpaW50RGF5KSA9PSAzMjg1KQorCQkJCXRyYW5zbWlzc2lvblJhdGUgKj0xMDsKKwkJZWxzZSAKKwkJaWYoZGlzZWFzZUxhYmVsLmdldE5vZGUoKS5nZXRVUkkoKS50b1N0cmluZygpLmhhc2hDb2RlKCkgJSAyID09IDEgCisJCQkmJiAoKGludClpbnREYXkpID09IDMyODUpCQorCQkJCXRyYW5zbWlzc2lvblJhdGUgKj0wLjE7CisqLwkJCisJCQorCQkKKwkJaWYoIXRoaXMuaXNGcmVxdWVuY3lEZXBlbmRlbnQoKSkgIG1vZHVsYXRlZFRyYW5zbWlzc2lvblJhdGUgKj0gZ2V0VHJhbnNtaXNzaW9uUmF0ZVNjYWxlRmFjdG9yKGRpc2Vhc2VMYWJlbCk7CisKKy8qCQlzeW5jaHJvbml6ZWQod3JpdHRlZFRpbWVzKSB7CisJCQlpZighd3JpdHRlZFRpbWVzLmNvbnRhaW5zKHRpbWUuZ2V0VGltZSgpLmdldFRpbWUoKSkpIHsKKwkJCQl0cnkgeworCQkJCWlmKGZ3ID09IG51bGwpIGZ3ID0gbmV3IEZpbGVXcml0ZXIoImJldGEuY3N2Iik7CisJCQkJZncud3JpdGUoKGludClpbnREYXkrIiwiK21vZHVsYXRlZFRyYW5zbWlzc2lvblJhdGUrIlxuIik7CisJCQkJZncuZmx1c2goKTsKKwkJCQl9IGNhdGNoKEV4Y2VwdGlvbiBlKSB7CisJCQkJCWUucHJpbnRTdGFja1RyYWNlKCk7CisJCQkJfQorCQkJCXdyaXR0ZWRUaW1lcy5hZGQodGltZS5nZXRUaW1lKCkuZ2V0VGltZSgpKTsKKwkJCX0KKwkJfQorKi8KKwkJLy8gVGhlIGVmZmVjdGl2ZSBJbmZlY3Rpb3VzIHBvcHVsYXRpb24gIGlzIGEgZGltZW5zaW9ubGVzIG51bWJlciBub3JtYWxpemUgYnkgdG90YWwKKwkJLy8gcG9wdWxhdGlvbiB1c2VkIGluIHRlaCBjb21wdXRhdGlvbiBvZiBiZXRzKlMqaSB3aGVyZSBpID0gSWVmZmVjdGl2ZS9Qb3AuCisJCS8vIFRoaXMgaW5jbHVkZXMgYSBjb3JyZWN0aW9uIHRvIHRoZSBjdXJyZW50CisJCS8vIGluZmVjdGlvdXMgcG9wdWxhdGlvbiAoSWVmZmVjdGl2ZSkgYmFzZWQgb24gdGhlIGNvbnNlcnZlZCBleGNoYW5nZSBvZiBwZW9wbGUgKGNpcmN1bGF0aW9uKQorCQkvLyBiZXR3ZWVuIHJlZ2lvbnMuIE5vdGUgdGhhdCB0aGlzIGlzIG5vIHRoZSAiYXJyaXZhbHMiIGFuZCAiZGVwYXJ0dXJlcyIgd2hpY2ggYXJlCisJCS8vIGEgZGlmZmVyZW50IHByb2Nlc3MuCisJCWZpbmFsIGRvdWJsZSBlZmZlY3RpdmVJbmZlY3Rpb3VzID0gZ2V0Tm9ybWFsaXplZEVmZmVjdGl2ZUluZmVjdGlvdXMoZGlzZWFzZUxhYmVsLmdldE5vZGUoKSwgZGlzZWFzZUxhYmVsLCBjdXJyZW50U0lSLmdldEkoKSk7CisKKwkJLyoKKwkJICogQ29tcHV0ZSBzdGF0ZSB0cmFuc2l0aW9ucworCQkgKiAKKwkJICogUmVnYXJkaW5nIGNvbXB1dGluZyB0aGUgbnVtYmVyIG9mIHRyYW5zaXRpb25zIGZyb20gU3VzY2VwdGlibGUgdG8gRXhwb3NlZDoKKwkJICogSW4gYSBsaW5lYXIgbW9kZWwgdGhlICJlZmZlY3RpdmUiIG51bWJlciBvZiBpbmZlY3Rpb3VzIHBlb3BsZSBpcyBqdXN0CisJCSAqIHRoZSBudW1iZXIgb2YgaW5mZWN0aW91cyBwZW9wbGUgSW4gYSBub25saW5lYXIgbW9kZWwgd2UgaGF2ZSBhCisJCSAqIG5vbkxpbmVhcml0eSBleHBvbmVudCB0aGF0IGlzID4gMSB0aGlzIG1vZGVscyB0aGUgZWZmZWN0IG9mIGltbXVuZQorCQkgKiBzeXN0ZW0gc2F0dXJhdGlvbiB3aGVuIFN1c2NlcHRpYmxlIHBlb3BsZSBhcmUgZXhwb3NlZCB0byBsYXJnZQorCQkgKiBudW1iZXJzIG9mIGluZmVjdGlvdXMgcGVvcGxlLiB0aGVuIHRoZSAiZWZmZWN0aXZlIiBudW1iZXIgb2YKKwkJICogaW5mZWN0aW91cyBwZW9wbGUgaXMgSV5ub25MaW5lYXJpdHkgZXhwb25lbnQgdG8gYWxsb3cgZm9yIGVpdGhlcgorCQkgKiBsaW5lYXIgb3Igbm9ubGluZWFyIG1vZGVscyB3ZSBhbHdheXMgY2FsY3VsYXRlIElebm9uTGluZWFyaXR5CisJCSAqIGV4cG9uZW50IGFuZCBhbGxvdyBub25MaW5lYXJpdHkgZXhwb25lbnQgPj0gMS4wCisJCSAqLworCQlkb3VibGUgbnVtYmVyT2ZJbmZlY3RlZFRvUmVjb3ZlcmVkID0gZ2V0QWRqdXN0ZWRSZWNvdmVyeVJhdGUodGltZURlbHRhKQorCQkqIGN1cnJlbnRTSVIuZ2V0SSgpOworCQlkb3VibGUgbnVtYmVyT2ZSZWNvdmVyZWRUb1N1c2NlcHRpYmxlID0gZ2V0QWRqdXN0ZWRJbW11bml0eUxvc3NSYXRlKHRpbWVEZWx0YSkKKwkJKiBjdXJyZW50U0lSLmdldFIoKTsKKwkJLy8gTmVlZCB0byBjaGVja2VkIHdoYXQgZG8gZG8gaGVyZS4gSWYgbm9uIGxpbmVhciBjb2VmZmljaWVudCBpcyBub3QgMSBhbmQKKwkJLy8gdGhlIGVmZmVjdGl2ZSBpbmZlY3Rpb3VzIGlzIG5lZ2F0aXZlICh3aGljaCBpcyBwb3NzaWJsZSksIHdoYXQgZG8gZG8/IAorCQkvLyBMZXQncyBmYWxsIGJhY2sgb24gdGhlIGxpbmVhciBtZXRob2QgZm9yIG5vdy4KKwkJZG91YmxlIG51bWJlck9mU3VzY2VwdGlibGVUb0luZmVjdGVkID0gMC4wOworCQlpZihnZXROb25MaW5lYXJpdHlDb2VmZmljaWVudCgpICE9IDEuMCAmJiBlZmZlY3RpdmVJbmZlY3Rpb3VzID49IDAuMCkKKwkJCW51bWJlck9mU3VzY2VwdGlibGVUb0luZmVjdGVkID0gbW9kdWxhdGVkVHJhbnNtaXNzaW9uUmF0ZQorCQkJKiBjdXJyZW50U0lSLmdldFMoKSogTWF0aC5wb3coZWZmZWN0aXZlSW5mZWN0aW91cywgZ2V0Tm9uTGluZWFyaXR5Q29lZmZpY2llbnQoKSk7CisJCWVsc2UKKwkJCW51bWJlck9mU3VzY2VwdGlibGVUb0luZmVjdGVkID0gbW9kdWxhdGVkVHJhbnNtaXNzaW9uUmF0ZQorCQkJKiBjdXJyZW50U0lSLmdldFMoKSogZWZmZWN0aXZlSW5mZWN0aW91czsKKwkJCisJCQorCQkvLyBEZXRlcm1pbmUgZGVsdGEgUworCQlmaW5hbCBkb3VibGUgZGVsdGFTID0gbnVtYmVyT2ZSZWNvdmVyZWRUb1N1c2NlcHRpYmxlIC0gbnVtYmVyT2ZTdXNjZXB0aWJsZVRvSW5mZWN0ZWQ7CisJCQkvLyBEZXRlcm1pbmUgZGVsdGEgSQorCQlmaW5hbCBkb3VibGUgZGVsdGFJID0gbnVtYmVyT2ZTdXNjZXB0aWJsZVRvSW5mZWN0ZWQtIG51bWJlck9mSW5mZWN0ZWRUb1JlY292ZXJlZDsKKwkJLy8gRGV0ZXJtaW5lIGRlbHRhIFIKKwkJZmluYWwgZG91YmxlIGRlbHRhUiA9IG51bWJlck9mSW5mZWN0ZWRUb1JlY292ZXJlZCAtIG51bWJlck9mUmVjb3ZlcmVkVG9TdXNjZXB0aWJsZTsKKwkJCisJCVNJUkxhYmVsVmFsdWVJbXBsIHJldCA9IChTSVJMYWJlbFZhbHVlSW1wbClyZXR1cm5WYWx1ZTsKKwkJcmV0LnNldFMoZGVsdGFTKTsKKwkJcmV0LnNldEkoZGVsdGFJKTsKKwkJcmV0LnNldEluY2lkZW5jZShudW1iZXJPZlN1c2NlcHRpYmxlVG9JbmZlY3RlZCk7CisJCXJldC5zZXRSKGRlbHRhUik7CisJCXJldC5zZXREaXNlYXNlRGVhdGhzKDApOworCQlyZXR1cm4gcmV0OworCX0gLy8gY29tcHV0ZVRyYW5zaXRpb25zCisJCisJLyoqCisJICogTW9kZWxTcGVjaWZpY0FkanVzdG1lbnRzIGZvciBhIFN0b2NoYXN0aWMgbW9kZWwgYWRkcyBub2lzZSB0byBvciBhZGp1c3RzIAorCSAqIHRoZSBkaXNlYXNlIHN0YXRlIHRyYW5zaXRpb24gdmFsdWVzIGJ5IG11bHRpcGx5aW5nCisJICogdGhlIGFkZGl0aW9ucyBieSBhIHJhbmRvbSB2YXJpYWJsZSByIH4gKDErLy14KSB3aXRoIHggc21hbGwuCisJICogVGhlIHJlcXVpcmVtZW50cyB0aGF0IG5vIG1vcmUgaW5kaXZpZHVhbHMgY2FuIGJlIG1vdmVkIGZyb20gYSBzdGF0ZSB0aGFuIGFyZQorCSAqIGFscmVhZHkgaW4gdGhhdCBzdGF0ZSBpcyBzdGlsbCBlbmZvcmNlZC4KKwkgKiAKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBkb01vZGVsU3BlY2lmaWNBZGp1c3RtZW50cygKKwkJCWZpbmFsIFN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZSBzdGF0ZSkgeworCQkJZmluYWwgU0lMYWJlbFZhbHVlIGN1cnJlbnRTSSA9IChTSUxhYmVsVmFsdWUpIHN0YXRlOworCQkJZG91YmxlIG9sZEkgPSBjdXJyZW50U0kuZ2V0SSgpOworCQkJZG91YmxlIElub2lzeSA9IGN1cnJlbnRTSS5nZXRJKCkqIGNvbXB1dGVOb2lzZSgpOworCQkJZG91YmxlIGNoYW5nZSA9IG9sZEktSW5vaXN5OworCQkJY3VycmVudFNJLnNldEkoSW5vaXN5KTsKKwkJCWRvdWJsZSBuZXdTID0gY3VycmVudFNJLmdldFMoKSArIGNoYW5nZTsKKwkJCWlmKG5ld1MgPCAwLjApIHsKKwkJCQkvLyBOZWVkIHRvIHJlc2NhbGUKKwkJCQlkb3VibGUgc2NhbGUgPSAoY3VycmVudFNJLmdldFMoKSArIG5ld1MpIC8gY3VycmVudFNJLmdldFMoKTsKKwkJCQljdXJyZW50U0kuc2V0SShJbm9pc3kqc2NhbGUpOworCQkJfSBlbHNlICBjdXJyZW50U0kuc2V0UyhuZXdTKTsKKwkJCXJldHVybjsKKwl9IC8vIGRvTW9kZWxTcGVjaWZpY0FkanVzdG1lbnRzCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIE9iamVjdCBlR2V0KGludCBmZWF0dXJlSUQsIGJvb2xlYW4gcmVzb2x2ZSwgYm9vbGVhbiBjb3JlVHlwZSkgeworCQlzd2l0Y2ggKGZlYXR1cmVJRCkgeworCQkJY2FzZSBGb3JjaW5nUGFja2FnZS5HQVVTU0lBTl9GT1JDSU5HX0RJU0VBU0VfTU9ERUxfX1NJR01BMjoKKwkJCQlyZXR1cm4gZ2V0U2lnbWEyKCk7CisJCQljYXNlIEZvcmNpbmdQYWNrYWdlLkdBVVNTSUFOX0ZPUkNJTkdfRElTRUFTRV9NT0RFTF9fTU9EVUxBVElPTl9QRVJJT0Q6CisJCQkJcmV0dXJuIGdldE1vZHVsYXRpb25QZXJpb2QoKTsKKwkJCWNhc2UgRm9yY2luZ1BhY2thZ2UuR0FVU1NJQU5fRk9SQ0lOR19ESVNFQVNFX01PREVMX19NT0RVTEFUSU9OX1BIQVNFX1NISUZUOgorCQkJCXJldHVybiBnZXRNb2R1bGF0aW9uUGhhc2VTaGlmdCgpOworCQkJY2FzZSBGb3JjaW5nUGFja2FnZS5HQVVTU0lBTl9GT1JDSU5HX0RJU0VBU0VfTU9ERUxfX01PRFVMQVRJT05fRkxPT1I6CisJCQkJcmV0dXJuIGdldE1vZHVsYXRpb25GbG9vcigpOworCQl9CisJCXJldHVybiBzdXBlci5lR2V0KGZlYXR1cmVJRCwgcmVzb2x2ZSwgY29yZVR5cGUpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGVTZXQoaW50IGZlYXR1cmVJRCwgT2JqZWN0IG5ld1ZhbHVlKSB7CisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7CisJCQljYXNlIEZvcmNpbmdQYWNrYWdlLkdBVVNTSUFOX0ZPUkNJTkdfRElTRUFTRV9NT0RFTF9fU0lHTUEyOgorCQkJCXNldFNpZ21hMigoRG91YmxlKW5ld1ZhbHVlKTsKKwkJCQlyZXR1cm47CisJCQljYXNlIEZvcmNpbmdQYWNrYWdlLkdBVVNTSUFOX0ZPUkNJTkdfRElTRUFTRV9NT0RFTF9fTU9EVUxBVElPTl9QRVJJT0Q6CisJCQkJc2V0TW9kdWxhdGlvblBlcmlvZCgoRG91YmxlKW5ld1ZhbHVlKTsKKwkJCQlyZXR1cm47CisJCQljYXNlIEZvcmNpbmdQYWNrYWdlLkdBVVNTSUFOX0ZPUkNJTkdfRElTRUFTRV9NT0RFTF9fTU9EVUxBVElPTl9QSEFTRV9TSElGVDoKKwkJCQlzZXRNb2R1bGF0aW9uUGhhc2VTaGlmdCgoRG91YmxlKW5ld1ZhbHVlKTsKKwkJCQlyZXR1cm47CisJCQljYXNlIEZvcmNpbmdQYWNrYWdlLkdBVVNTSUFOX0ZPUkNJTkdfRElTRUFTRV9NT0RFTF9fTU9EVUxBVElPTl9GTE9PUjoKKwkJCQlzZXRNb2R1bGF0aW9uRmxvb3IoKERvdWJsZSluZXdWYWx1ZSk7CisJCQkJcmV0dXJuOworCQl9CisJCXN1cGVyLmVTZXQoZmVhdHVyZUlELCBuZXdWYWx1ZSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgZVVuc2V0KGludCBmZWF0dXJlSUQpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJCWNhc2UgRm9yY2luZ1BhY2thZ2UuR0FVU1NJQU5fRk9SQ0lOR19ESVNFQVNFX01PREVMX19TSUdNQTI6CisJCQkJc2V0U2lnbWEyKFNJR01BMl9FREVGQVVMVCk7CisJCQkJcmV0dXJuOworCQkJY2FzZSBGb3JjaW5nUGFja2FnZS5HQVVTU0lBTl9GT1JDSU5HX0RJU0VBU0VfTU9ERUxfX01PRFVMQVRJT05fUEVSSU9EOgorCQkJCXNldE1vZHVsYXRpb25QZXJpb2QoTU9EVUxBVElPTl9QRVJJT0RfRURFRkFVTFQpOworCQkJCXJldHVybjsKKwkJCWNhc2UgRm9yY2luZ1BhY2thZ2UuR0FVU1NJQU5fRk9SQ0lOR19ESVNFQVNFX01PREVMX19NT0RVTEFUSU9OX1BIQVNFX1NISUZUOgorCQkJCXNldE1vZHVsYXRpb25QaGFzZVNoaWZ0KE1PRFVMQVRJT05fUEhBU0VfU0hJRlRfRURFRkFVTFQpOworCQkJCXJldHVybjsKKwkJCWNhc2UgRm9yY2luZ1BhY2thZ2UuR0FVU1NJQU5fRk9SQ0lOR19ESVNFQVNFX01PREVMX19NT0RVTEFUSU9OX0ZMT09SOgorCQkJCXNldE1vZHVsYXRpb25GbG9vcihNT0RVTEFUSU9OX0ZMT09SX0VERUZBVUxUKTsKKwkJCQlyZXR1cm47CisJCX0KKwkJc3VwZXIuZVVuc2V0KGZlYXR1cmVJRCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIGJvb2xlYW4gZUlzU2V0KGludCBmZWF0dXJlSUQpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJCWNhc2UgRm9yY2luZ1BhY2thZ2UuR0FVU1NJQU5fRk9SQ0lOR19ESVNFQVNFX01PREVMX19TSUdNQTI6CisJCQkJcmV0dXJuIHNpZ21hMiAhPSBTSUdNQTJfRURFRkFVTFQ7CisJCQljYXNlIEZvcmNpbmdQYWNrYWdlLkdBVVNTSUFOX0ZPUkNJTkdfRElTRUFTRV9NT0RFTF9fTU9EVUxBVElPTl9QRVJJT0Q6CisJCQkJcmV0dXJuIG1vZHVsYXRpb25QZXJpb2QgIT0gTU9EVUxBVElPTl9QRVJJT0RfRURFRkFVTFQ7CisJCQljYXNlIEZvcmNpbmdQYWNrYWdlLkdBVVNTSUFOX0ZPUkNJTkdfRElTRUFTRV9NT0RFTF9fTU9EVUxBVElPTl9QSEFTRV9TSElGVDoKKwkJCQlyZXR1cm4gbW9kdWxhdGlvblBoYXNlU2hpZnQgIT0gTU9EVUxBVElPTl9QSEFTRV9TSElGVF9FREVGQVVMVDsKKwkJCWNhc2UgRm9yY2luZ1BhY2thZ2UuR0FVU1NJQU5fRk9SQ0lOR19ESVNFQVNFX01PREVMX19NT0RVTEFUSU9OX0ZMT09SOgorCQkJCXJldHVybiBtb2R1bGF0aW9uRmxvb3IgIT0gTU9EVUxBVElPTl9GTE9PUl9FREVGQVVMVDsKKwkJfQorCQlyZXR1cm4gc3VwZXIuZUlzU2V0KGZlYXR1cmVJRCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIFN0cmluZyB0b1N0cmluZygpIHsKKwkJaWYgKGVJc1Byb3h5KCkpIHJldHVybiBzdXBlci50b1N0cmluZygpOworCisJCVN0cmluZ0J1ZmZlciByZXN1bHQgPSBuZXcgU3RyaW5nQnVmZmVyKHN1cGVyLnRvU3RyaW5nKCkpOworCQlyZXN1bHQuYXBwZW5kKCIgKHNpZ21hMjogIik7IC8vJE5PTi1OTFMtMSQKKwkJcmVzdWx0LmFwcGVuZChzaWdtYTIpOworCQlyZXN1bHQuYXBwZW5kKCIsIG1vZHVsYXRpb25QZXJpb2Q6ICIpOyAvLyROT04tTkxTLTEkCisJCXJlc3VsdC5hcHBlbmQobW9kdWxhdGlvblBlcmlvZCk7CisJCXJlc3VsdC5hcHBlbmQoIiwgbW9kdWxhdGlvblBoYXNlU2hpZnQ6ICIpOyAvLyROT04tTkxTLTEkCisJCXJlc3VsdC5hcHBlbmQobW9kdWxhdGlvblBoYXNlU2hpZnQpOworCQlyZXN1bHQuYXBwZW5kKCIsIG1vZHVsYXRpb25GbG9vcjogIik7IC8vJE5PTi1OTFMtMSQKKwkJcmVzdWx0LmFwcGVuZChtb2R1bGF0aW9uRmxvb3IpOworCQlyZXN1bHQuYXBwZW5kKCcpJyk7CisJCXJldHVybiByZXN1bHQudG9TdHJpbmcoKTsKKwl9CisKK30gLy9HYXVzc2lhbkZvcmNpbmdEaXNlYXNlTW9kZWxJbXBsCmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5mb3JjaW5nL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvZm9yY2luZy9wcm92aWRlci9Gb3JjaW5nRGlzZWFzZU1vZGVsSXRlbVByb3ZpZGVyLmphdmEgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5mb3JjaW5nL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvZm9yY2luZy9wcm92aWRlci9Gb3JjaW5nRGlzZWFzZU1vZGVsSXRlbVByb3ZpZGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2IxODZiNQotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmZvcmNpbmcvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9mb3JjaW5nL3Byb3ZpZGVyL0ZvcmNpbmdEaXNlYXNlTW9kZWxJdGVtUHJvdmlkZXIuamF2YQpAQCAtMCwwICsxLDI0NyBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZm9yY2luZy5wcm92aWRlcjsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOworaW1wb3J0IGphdmEudXRpbC5MaXN0OworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5SZXNvdXJjZUxvY2F0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JRWRpdGluZ0RvbWFpbkl0ZW1Qcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbUxhYmVsUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1Qcm9wZXJ0eVNvdXJjZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JU3RydWN0dXJlZEl0ZW1Db250ZW50UHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVRyZWVJdGVtQ29udGVudFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuVmlld2VyTm90aWZpY2F0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5mb3JjaW5nLkZvcmNpbmdEaXNlYXNlTW9kZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmZvcmNpbmcuRm9yY2luZ1BhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLnByb3ZpZGVyLlN0b2NoYXN0aWNTSVJEaXNlYXNlTW9kZWxJdGVtUHJvdmlkZXI7CisKKy8qKgorICogVGhpcyBpcyB0aGUgaXRlbSBwcm92aWRlciBhZGFwdGVyIGZvciBhIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZm9yY2luZy5Gb3JjaW5nRGlzZWFzZU1vZGVsfSBvYmplY3QuCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK0BTdXBwcmVzc1dhcm5pbmdzKCJ1bnVzZWQiKSAKK3B1YmxpYyBjbGFzcyBGb3JjaW5nRGlzZWFzZU1vZGVsSXRlbVByb3ZpZGVyCisJZXh0ZW5kcyBTdG9jaGFzdGljU0lSRGlzZWFzZU1vZGVsSXRlbVByb3ZpZGVyCisJaW1wbGVtZW50cworCQlJRWRpdGluZ0RvbWFpbkl0ZW1Qcm92aWRlciwKKwkJSVN0cnVjdHVyZWRJdGVtQ29udGVudFByb3ZpZGVyLAorCQlJVHJlZUl0ZW1Db250ZW50UHJvdmlkZXIsCisJCUlJdGVtTGFiZWxQcm92aWRlciwKKwkJSUl0ZW1Qcm9wZXJ0eVNvdXJjZSB7CisJLyoqCisJICogVGhpcyBjb25zdHJ1Y3RzIGFuIGluc3RhbmNlIGZyb20gYSBmYWN0b3J5IGFuZCBhIG5vdGlmaWVyLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBGb3JjaW5nRGlzZWFzZU1vZGVsSXRlbVByb3ZpZGVyKEFkYXB0ZXJGYWN0b3J5IGFkYXB0ZXJGYWN0b3J5KSB7CisJCXN1cGVyKGFkYXB0ZXJGYWN0b3J5KTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgdGhlIHByb3BlcnR5IGRlc2NyaXB0b3JzIGZvciB0aGUgYWRhcHRlZCBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgTGlzdDxJSXRlbVByb3BlcnR5RGVzY3JpcHRvcj4gZ2V0UHJvcGVydHlEZXNjcmlwdG9ycyhPYmplY3Qgb2JqZWN0KSB7CisJCWlmIChpdGVtUHJvcGVydHlEZXNjcmlwdG9ycyA9PSBudWxsKSB7CisJCQlzdXBlci5nZXRQcm9wZXJ0eURlc2NyaXB0b3JzKG9iamVjdCk7CisKKwkJCWFkZE1vZHVsYXRpb25FeHBvbmVudFByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QpOworCQkJYWRkTW9kdWxhdGlvblBlcmlvZFByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QpOworCQkJYWRkTW9kdWxhdGlvblBoYXNlU2hpZnRQcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0KTsKKwkJCWFkZE1vZHVsYXRpb25GbG9vclByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QpOworCQl9CisJCXJldHVybiBpdGVtUHJvcGVydHlEZXNjcmlwdG9yczsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFkZHMgYSBwcm9wZXJ0eSBkZXNjcmlwdG9yIGZvciB0aGUgTW9kdWxhdGlvbiBFeHBvbmVudCBmZWF0dXJlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIGFkZE1vZHVsYXRpb25FeHBvbmVudFByb3BlcnR5RGVzY3JpcHRvcihPYmplY3Qgb2JqZWN0KSB7CisJCWl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzLmFkZAorCQkJKGNyZWF0ZUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IKKwkJCQkoKChDb21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5KWFkYXB0ZXJGYWN0b3J5KS5nZXRSb290QWRhcHRlckZhY3RvcnkoKSwKKwkJCQkgZ2V0UmVzb3VyY2VMb2NhdG9yKCksCisJCQkJIGdldFN0cmluZygiX1VJX0ZvcmNpbmdEaXNlYXNlTW9kZWxfbW9kdWxhdGlvbkV4cG9uZW50X2ZlYXR1cmUiKSwgLy8kTk9OLU5MUy0xJAorCQkJCSBnZXRTdHJpbmcoIl9VSV9Qcm9wZXJ0eURlc2NyaXB0b3JfZGVzY3JpcHRpb24iLCAiX1VJX0ZvcmNpbmdEaXNlYXNlTW9kZWxfbW9kdWxhdGlvbkV4cG9uZW50X2ZlYXR1cmUiLCAiX1VJX0ZvcmNpbmdEaXNlYXNlTW9kZWxfdHlwZSIpLCAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQgLy8kTk9OLU5MUy0zJAorCQkJCSBGb3JjaW5nUGFja2FnZS5MaXRlcmFscy5GT1JDSU5HX0RJU0VBU0VfTU9ERUxfX01PRFVMQVRJT05fRVhQT05FTlQsCisJCQkJIHRydWUsCisJCQkJIGZhbHNlLAorCQkJCSBmYWxzZSwKKwkJCQkgSXRlbVByb3BlcnR5RGVzY3JpcHRvci5SRUFMX1ZBTFVFX0lNQUdFLAorCQkJCSBudWxsLAorCQkJCSBudWxsKSk7CisJfQorCisJLyoqCisJICogVGhpcyBhZGRzIGEgcHJvcGVydHkgZGVzY3JpcHRvciBmb3IgdGhlIE1vZHVsYXRpb24gUGVyaW9kIGZlYXR1cmUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgYWRkTW9kdWxhdGlvblBlcmlvZFByb3BlcnR5RGVzY3JpcHRvcihPYmplY3Qgb2JqZWN0KSB7CisJCWl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzLmFkZAorCQkJKGNyZWF0ZUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IKKwkJCQkoKChDb21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5KWFkYXB0ZXJGYWN0b3J5KS5nZXRSb290QWRhcHRlckZhY3RvcnkoKSwKKwkJCQkgZ2V0UmVzb3VyY2VMb2NhdG9yKCksCisJCQkJIGdldFN0cmluZygiX1VJX0ZvcmNpbmdEaXNlYXNlTW9kZWxfbW9kdWxhdGlvblBlcmlvZF9mZWF0dXJlIiksIC8vJE5PTi1OTFMtMSQKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfUHJvcGVydHlEZXNjcmlwdG9yX2Rlc2NyaXB0aW9uIiwgIl9VSV9Gb3JjaW5nRGlzZWFzZU1vZGVsX21vZHVsYXRpb25QZXJpb2RfZmVhdHVyZSIsICJfVUlfRm9yY2luZ0Rpc2Vhc2VNb2RlbF90eXBlIiksIC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJCAvLyROT04tTkxTLTMkCisJCQkJIEZvcmNpbmdQYWNrYWdlLkxpdGVyYWxzLkZPUkNJTkdfRElTRUFTRV9NT0RFTF9fTU9EVUxBVElPTl9QRVJJT0QsCisJCQkJIHRydWUsCisJCQkJIGZhbHNlLAorCQkJCSBmYWxzZSwKKwkJCQkgSXRlbVByb3BlcnR5RGVzY3JpcHRvci5SRUFMX1ZBTFVFX0lNQUdFLAorCQkJCSBudWxsLAorCQkJCSBudWxsKSk7CisJfQorCisJLyoqCisJICogVGhpcyBhZGRzIGEgcHJvcGVydHkgZGVzY3JpcHRvciBmb3IgdGhlIE1vZHVsYXRpb24gUGhhc2UgU2hpZnQgZmVhdHVyZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBhZGRNb2R1bGF0aW9uUGhhc2VTaGlmdFByb3BlcnR5RGVzY3JpcHRvcihPYmplY3Qgb2JqZWN0KSB7CisJCWl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzLmFkZAorCQkJKGNyZWF0ZUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IKKwkJCQkoKChDb21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5KWFkYXB0ZXJGYWN0b3J5KS5nZXRSb290QWRhcHRlckZhY3RvcnkoKSwKKwkJCQkgZ2V0UmVzb3VyY2VMb2NhdG9yKCksCisJCQkJIGdldFN0cmluZygiX1VJX0ZvcmNpbmdEaXNlYXNlTW9kZWxfbW9kdWxhdGlvblBoYXNlU2hpZnRfZmVhdHVyZSIpLCAvLyROT04tTkxTLTEkCisJCQkJIGdldFN0cmluZygiX1VJX1Byb3BlcnR5RGVzY3JpcHRvcl9kZXNjcmlwdGlvbiIsICJfVUlfRm9yY2luZ0Rpc2Vhc2VNb2RlbF9tb2R1bGF0aW9uUGhhc2VTaGlmdF9mZWF0dXJlIiwgIl9VSV9Gb3JjaW5nRGlzZWFzZU1vZGVsX3R5cGUiKSwgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkIC8vJE5PTi1OTFMtMyQKKwkJCQkgRm9yY2luZ1BhY2thZ2UuTGl0ZXJhbHMuRk9SQ0lOR19ESVNFQVNFX01PREVMX19NT0RVTEFUSU9OX1BIQVNFX1NISUZULAorCQkJCSB0cnVlLAorCQkJCSBmYWxzZSwKKwkJCQkgZmFsc2UsCisJCQkJIEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IuUkVBTF9WQUxVRV9JTUFHRSwKKwkJCQkgbnVsbCwKKwkJCQkgbnVsbCkpOworCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyBhIHByb3BlcnR5IGRlc2NyaXB0b3IgZm9yIHRoZSBNb2R1bGF0aW9uIEZsb29yIGZlYXR1cmUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgYWRkTW9kdWxhdGlvbkZsb29yUHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdCBvYmplY3QpIHsKKwkJaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMuYWRkCisJCQkoY3JlYXRlSXRlbVByb3BlcnR5RGVzY3JpcHRvcgorCQkJCSgoKENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnkpYWRhcHRlckZhY3RvcnkpLmdldFJvb3RBZGFwdGVyRmFjdG9yeSgpLAorCQkJCSBnZXRSZXNvdXJjZUxvY2F0b3IoKSwKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfRm9yY2luZ0Rpc2Vhc2VNb2RlbF9tb2R1bGF0aW9uRmxvb3JfZmVhdHVyZSIpLCAvLyROT04tTkxTLTEkCisJCQkJIGdldFN0cmluZygiX1VJX1Byb3BlcnR5RGVzY3JpcHRvcl9kZXNjcmlwdGlvbiIsICJfVUlfRm9yY2luZ0Rpc2Vhc2VNb2RlbF9tb2R1bGF0aW9uRmxvb3JfZmVhdHVyZSIsICJfVUlfRm9yY2luZ0Rpc2Vhc2VNb2RlbF90eXBlIiksIC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJCAvLyROT04tTkxTLTMkCisJCQkJIEZvcmNpbmdQYWNrYWdlLkxpdGVyYWxzLkZPUkNJTkdfRElTRUFTRV9NT0RFTF9fTU9EVUxBVElPTl9GTE9PUiwKKwkJCQkgdHJ1ZSwKKwkJCQkgZmFsc2UsCisJCQkJIGZhbHNlLAorCQkJCSBJdGVtUHJvcGVydHlEZXNjcmlwdG9yLlJFQUxfVkFMVUVfSU1BR0UsCisJCQkJIG51bGwsCisJCQkJIG51bGwpKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgRm9yY2luZ0Rpc2Vhc2VNb2RlbC5naWYuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIE9iamVjdCBnZXRJbWFnZShPYmplY3Qgb2JqZWN0KSB7CisJCXJldHVybiBvdmVybGF5SW1hZ2Uob2JqZWN0LCBnZXRSZXNvdXJjZUxvY2F0b3IoKS5nZXRJbWFnZSgiZnVsbC9vYmoxNi9Gb3JjaW5nRGlzZWFzZU1vZGVsIikpOyAvLyROT04tTkxTLTEkCisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIHRoZSBsYWJlbCB0ZXh0IGZvciB0aGUgYWRhcHRlZCBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIFN0cmluZyBnZXRUZXh0KE9iamVjdCBvYmplY3QpIHsKKwkJcmV0dXJuIHN1cGVyLmdldFRleHQob2JqZWN0KTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgdGhlIGxhYmVsIHRleHQgZm9yIHRoZSBhZGFwdGVkIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBTdHJpbmcgZ2V0VGV4dEdlbihPYmplY3Qgb2JqZWN0KSB7CisJCVN0cmluZyBsYWJlbCA9ICgoRm9yY2luZ0Rpc2Vhc2VNb2RlbClvYmplY3QpLmdldERpc2Vhc2VOYW1lKCk7CisJCXJldHVybiBsYWJlbCA9PSBudWxsIHx8IGxhYmVsLmxlbmd0aCgpID09IDAgPworCQkJZ2V0U3RyaW5nKCJfVUlfRm9yY2luZ0Rpc2Vhc2VNb2RlbF90eXBlIikgOiAvLyROT04tTkxTLTEkCisJCQlnZXRTdHJpbmcoIl9VSV9Gb3JjaW5nRGlzZWFzZU1vZGVsX3R5cGUiKSArICIgIiArIGxhYmVsOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKKwl9CisJCisJLyoqCisJICogVGhpcyBoYW5kbGVzIG1vZGVsIG5vdGlmaWNhdGlvbnMgYnkgY2FsbGluZyB7QGxpbmsgI3VwZGF0ZUNoaWxkcmVufSB0byB1cGRhdGUgYW55IGNhY2hlZAorCSAqIGNoaWxkcmVuIGFuZCBieSBjcmVhdGluZyBhIHZpZXdlciBub3RpZmljYXRpb24sIHdoaWNoIGl0IHBhc3NlcyB0byB7QGxpbmsgI2ZpcmVOb3RpZnlDaGFuZ2VkfS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBub3RpZnlDaGFuZ2VkKE5vdGlmaWNhdGlvbiBub3RpZmljYXRpb24pIHsKKwkJdXBkYXRlQ2hpbGRyZW4obm90aWZpY2F0aW9uKTsKKworCQlzd2l0Y2ggKG5vdGlmaWNhdGlvbi5nZXRGZWF0dXJlSUQoRm9yY2luZ0Rpc2Vhc2VNb2RlbC5jbGFzcykpIHsKKwkJCWNhc2UgRm9yY2luZ1BhY2thZ2UuRk9SQ0lOR19ESVNFQVNFX01PREVMX19NT0RVTEFUSU9OX0VYUE9ORU5UOgorCQkJY2FzZSBGb3JjaW5nUGFja2FnZS5GT1JDSU5HX0RJU0VBU0VfTU9ERUxfX01PRFVMQVRJT05fUEVSSU9EOgorCQkJY2FzZSBGb3JjaW5nUGFja2FnZS5GT1JDSU5HX0RJU0VBU0VfTU9ERUxfX01PRFVMQVRJT05fUEhBU0VfU0hJRlQ6CisJCQljYXNlIEZvcmNpbmdQYWNrYWdlLkZPUkNJTkdfRElTRUFTRV9NT0RFTF9fTU9EVUxBVElPTl9GTE9PUjoKKwkJCQlmaXJlTm90aWZ5Q2hhbmdlZChuZXcgVmlld2VyTm90aWZpY2F0aW9uKG5vdGlmaWNhdGlvbiwgbm90aWZpY2F0aW9uLmdldE5vdGlmaWVyKCksIGZhbHNlLCB0cnVlKSk7CisJCQkJcmV0dXJuOworCQl9CisJCXN1cGVyLm5vdGlmeUNoYW5nZWQobm90aWZpY2F0aW9uKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFkZHMge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lZGl0LmNvbW1hbmQuQ29tbWFuZFBhcmFtZXRlcn1zIGRlc2NyaWJpbmcgdGhlIGNoaWxkcmVuCisJICogdGhhdCBjYW4gYmUgY3JlYXRlZCB1bmRlciB0aGlzIG9iamVjdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgdm9pZCBjb2xsZWN0TmV3Q2hpbGREZXNjcmlwdG9ycyhDb2xsZWN0aW9uPE9iamVjdD4gbmV3Q2hpbGREZXNjcmlwdG9ycywgT2JqZWN0IG9iamVjdCkgeworCQlzdXBlci5jb2xsZWN0TmV3Q2hpbGREZXNjcmlwdG9ycyhuZXdDaGlsZERlc2NyaXB0b3JzLCBvYmplY3QpOworCX0KKworCS8qKgorCSAqIFJldHVybiB0aGUgcmVzb3VyY2UgbG9jYXRvciBmb3IgdGhpcyBpdGVtIHByb3ZpZGVyJ3MgcmVzb3VyY2VzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBSZXNvdXJjZUxvY2F0b3IgZ2V0UmVzb3VyY2VMb2NhdG9yKCkgeworCQlyZXR1cm4gRm9yY2luZ0VkaXRQbHVnaW4uSU5TVEFOQ0U7CisJfQorCit9CmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5mb3JjaW5nL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvZm9yY2luZy9wcm92aWRlci9Gb3JjaW5nRWRpdFBsdWdpbi5qYXZhIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZm9yY2luZy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL2ZvcmNpbmcvcHJvdmlkZXIvRm9yY2luZ0VkaXRQbHVnaW4uamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42OGM2MGQ3Ci0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZm9yY2luZy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL2ZvcmNpbmcvcHJvdmlkZXIvRm9yY2luZ0VkaXRQbHVnaW4uamF2YQpAQCAtMCwwICsxLDEwNyBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZm9yY2luZy5wcm92aWRlcjsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLkVNRlBsdWdpbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuUmVzb3VyY2VMb2NhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5wcm92aWRlci5FY29yZUVkaXRQbHVnaW47CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5wcm92aWRlci5Db3JlRWRpdFBsdWdpbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmVkZ2VzLnByb3ZpZGVyLkRlZmluaXRpb25zRWRpdFBsdWdpbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQucHJvdmlkZXIuRGlzZWFzZW1vZGVsc0VkaXRQbHVnaW47CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLnByb3ZpZGVyLlN0YW5kYXJkRWRpdFBsdWdpbjsKKworLyoqCisgKiBUaGlzIGlzIHRoZSBjZW50cmFsIHNpbmdsZXRvbiBmb3IgdGhlIEZvcmNpbmcgZWRpdCBwbHVnaW4uCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBmaW5hbCBjbGFzcyBGb3JjaW5nRWRpdFBsdWdpbiBleHRlbmRzIEVNRlBsdWdpbiB7CisJLyoqCisJICogS2VlcCB0cmFjayBvZiB0aGUgc2luZ2xldG9uLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgRm9yY2luZ0VkaXRQbHVnaW4gSU5TVEFOQ0UgPSBuZXcgRm9yY2luZ0VkaXRQbHVnaW4oKTsKKwkKKwkvKioKKwkgKiBLZWVwIHRyYWNrIG9mIHRoZSBzaW5nbGV0b24uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJpdmF0ZSBzdGF0aWMgSW1wbGVtZW50YXRpb24gcGx1Z2luOworCisJLyoqCisJICogQ3JlYXRlIHRoZSBpbnN0YW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJcHVibGljIEZvcmNpbmdFZGl0UGx1Z2luKCkgeworCQlzdXBlcgorCQkJKG5ldyBSZXNvdXJjZUxvY2F0b3IgW10geworCQkJCURpc2Vhc2Vtb2RlbHNFZGl0UGx1Z2luLklOU1RBTkNFLAorCQkJCUNvcmVFZGl0UGx1Z2luLklOU1RBTkNFLAorCQkJCS8vRWNvcmVFZGl0UGx1Z2luLklOU1RBTkNFLAorCQkJCURlZmluaXRpb25zRWRpdFBsdWdpbi5JTlNUQU5DRSwKKwkJCX0pOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIHNpbmdsZXRvbiBpbnN0YW5jZSBvZiB0aGUgRWNsaXBzZSBwbHVnaW4uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBzaW5nbGV0b24gaW5zdGFuY2UuCisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBSZXNvdXJjZUxvY2F0b3IgZ2V0UGx1Z2luUmVzb3VyY2VMb2NhdG9yKCkgeworCQlyZXR1cm4gcGx1Z2luOworCX0KKwkKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBzaW5nbGV0b24gaW5zdGFuY2Ugb2YgdGhlIEVjbGlwc2UgcGx1Z2luLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgc2luZ2xldG9uIGluc3RhbmNlLgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgc3RhdGljIEltcGxlbWVudGF0aW9uIGdldFBsdWdpbigpIHsKKwkJcmV0dXJuIHBsdWdpbjsKKwl9CisJCisJLyoqCisJICogVGhlIGFjdHVhbCBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgRWNsaXBzZSA8Yj5QbHVnaW48L2I+LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBzdGF0aWMgY2xhc3MgSW1wbGVtZW50YXRpb24gZXh0ZW5kcyBFY2xpcHNlUGx1Z2luIHsKKwkJLyoqCisJCSAqIENyZWF0ZXMgYW4gaW5zdGFuY2UuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlAU3VwcHJlc3NXYXJuaW5ncygic3ludGhldGljLWFjY2VzcyIpCisJCXB1YmxpYyBJbXBsZW1lbnRhdGlvbigpIHsKKwkJCXN1cGVyKCk7CisKKwkJCS8vIFJlbWVtYmVyIHRoZSBzdGF0aWMgaW5zdGFuY2UuCisJCQkvLworCQkJcGx1Z2luID0gdGhpczsKKwkJfQorCX0KKworfQpkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZm9yY2luZy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL2ZvcmNpbmcvcHJvdmlkZXIvRm9yY2luZ0l0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5LmphdmEgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5mb3JjaW5nL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvZm9yY2luZy9wcm92aWRlci9Gb3JjaW5nSXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZjU3ZjliCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZm9yY2luZy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL2ZvcmNpbmcvcHJvdmlkZXIvRm9yY2luZ0l0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5LmphdmEKQEAgLTAsMCArMSwyNzggQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmZvcmNpbmcucHJvdmlkZXI7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LkFkYXB0ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkNoYW5nZU5vdGlmaWVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkNvbXBvc2VhYmxlQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuQ29tcG9zZWRBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JQ2hhbmdlTm90aWZpZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSURpc3Bvc2FibGU7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUVkaXRpbmdEb21haW5JdGVtUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1MYWJlbFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtUHJvcGVydHlTb3VyY2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSU5vdGlmeUNoYW5nZWRMaXN0ZW5lcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JU3RydWN0dXJlZEl0ZW1Db250ZW50UHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVRyZWVJdGVtQ29udGVudFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5mb3JjaW5nLnV0aWwuRm9yY2luZ0FkYXB0ZXJGYWN0b3J5OworCisvKioKKyAqIFRoaXMgaXMgdGhlIGZhY3RvcnkgdGhhdCBpcyB1c2VkIHRvIHByb3ZpZGUgdGhlIGludGVyZmFjZXMgbmVlZGVkIHRvIHN1cHBvcnQgVmlld2Vycy4KKyAqIFRoZSBhZGFwdGVycyBnZW5lcmF0ZWQgYnkgdGhpcyBmYWN0b3J5IGNvbnZlcnQgRU1GIGFkYXB0ZXIgbm90aWZpY2F0aW9ucyBpbnRvIGNhbGxzIHRvIHtAbGluayAjZmlyZU5vdGlmeUNoYW5nZWQgZmlyZU5vdGlmeUNoYW5nZWR9LgorICogVGhlIGFkYXB0ZXJzIGFsc28gc3VwcG9ydCBFY2xpcHNlIHByb3BlcnR5IHNoZWV0cy4KKyAqIE5vdGUgdGhhdCBtb3N0IG9mIHRoZSBhZGFwdGVycyBhcmUgc2hhcmVkIGFtb25nIG11bHRpcGxlIGluc3RhbmNlcy4KKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIEZvcmNpbmdJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSBleHRlbmRzIEZvcmNpbmdBZGFwdGVyRmFjdG9yeSBpbXBsZW1lbnRzIENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnksIElDaGFuZ2VOb3RpZmllciwgSURpc3Bvc2FibGUgeworCS8qKgorCSAqIFRoaXMga2VlcHMgdHJhY2sgb2YgdGhlIHJvb3QgYWRhcHRlciBmYWN0b3J5IHRoYXQgZGVsZWdhdGVzIHRvIHRoaXMgYWRhcHRlciBmYWN0b3J5LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBDb21wb3NlZEFkYXB0ZXJGYWN0b3J5IHBhcmVudEFkYXB0ZXJGYWN0b3J5OworCisJLyoqCisJICogVGhpcyBpcyB1c2VkIHRvIGltcGxlbWVudCB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUNoYW5nZU5vdGlmaWVyfS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgSUNoYW5nZU5vdGlmaWVyIGNoYW5nZU5vdGlmaWVyID0gbmV3IENoYW5nZU5vdGlmaWVyKCk7CisKKwkvKioKKwkgKiBUaGlzIGtlZXBzIHRyYWNrIG9mIGFsbCB0aGUgc3VwcG9ydGVkIHR5cGVzIGNoZWNrZWQgYnkge0BsaW5rICNpc0ZhY3RvcnlGb3JUeXBlIGlzRmFjdG9yeUZvclR5cGV9LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBDb2xsZWN0aW9uPE9iamVjdD4gc3VwcG9ydGVkVHlwZXMgPSBuZXcgQXJyYXlMaXN0PE9iamVjdD4oKTsKKworCS8qKgorCSAqIFRoaXMgY29uc3RydWN0cyBhbiBpbnN0YW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRm9yY2luZ0l0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5KCkgeworCQlzdXBwb3J0ZWRUeXBlcy5hZGQoSUVkaXRpbmdEb21haW5JdGVtUHJvdmlkZXIuY2xhc3MpOworCQlzdXBwb3J0ZWRUeXBlcy5hZGQoSVN0cnVjdHVyZWRJdGVtQ29udGVudFByb3ZpZGVyLmNsYXNzKTsKKwkJc3VwcG9ydGVkVHlwZXMuYWRkKElUcmVlSXRlbUNvbnRlbnRQcm92aWRlci5jbGFzcyk7CisJCXN1cHBvcnRlZFR5cGVzLmFkZChJSXRlbUxhYmVsUHJvdmlkZXIuY2xhc3MpOworCQlzdXBwb3J0ZWRUeXBlcy5hZGQoSUl0ZW1Qcm9wZXJ0eVNvdXJjZS5jbGFzcyk7CisJfQorCisJLyoqCisJICogVGhpcyBrZWVwcyB0cmFjayBvZiB0aGUgb25lIGFkYXB0ZXIgdXNlZCBmb3IgYWxsIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZm9yY2luZy5Gb3JjaW5nRGlzZWFzZU1vZGVsfSBpbnN0YW5jZXMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIEZvcmNpbmdEaXNlYXNlTW9kZWxJdGVtUHJvdmlkZXIgZm9yY2luZ0Rpc2Vhc2VNb2RlbEl0ZW1Qcm92aWRlcjsKKworCS8qKgorCSAqIFRoaXMgY3JlYXRlcyBhbiBhZGFwdGVyIGZvciBhIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZm9yY2luZy5Gb3JjaW5nRGlzZWFzZU1vZGVsfS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVGb3JjaW5nRGlzZWFzZU1vZGVsQWRhcHRlcigpIHsKKwkJaWYgKGZvcmNpbmdEaXNlYXNlTW9kZWxJdGVtUHJvdmlkZXIgPT0gbnVsbCkgeworCQkJZm9yY2luZ0Rpc2Vhc2VNb2RlbEl0ZW1Qcm92aWRlciA9IG5ldyBGb3JjaW5nRGlzZWFzZU1vZGVsSXRlbVByb3ZpZGVyKHRoaXMpOworCQl9CisKKwkJcmV0dXJuIGZvcmNpbmdEaXNlYXNlTW9kZWxJdGVtUHJvdmlkZXI7CisJfQorCisJLyoqCisJICogVGhpcyBrZWVwcyB0cmFjayBvZiB0aGUgb25lIGFkYXB0ZXIgdXNlZCBmb3IgYWxsIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZm9yY2luZy5HYXVzc2lhbkZvcmNpbmdEaXNlYXNlTW9kZWx9IGluc3RhbmNlcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgR2F1c3NpYW5Gb3JjaW5nRGlzZWFzZU1vZGVsSXRlbVByb3ZpZGVyIGdhdXNzaWFuRm9yY2luZ0Rpc2Vhc2VNb2RlbEl0ZW1Qcm92aWRlcjsKKworCS8qKgorCSAqIFRoaXMgY3JlYXRlcyBhbiBhZGFwdGVyIGZvciBhIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZm9yY2luZy5HYXVzc2lhbkZvcmNpbmdEaXNlYXNlTW9kZWx9LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZUdhdXNzaWFuRm9yY2luZ0Rpc2Vhc2VNb2RlbEFkYXB0ZXIoKSB7CisJCWlmIChnYXVzc2lhbkZvcmNpbmdEaXNlYXNlTW9kZWxJdGVtUHJvdmlkZXIgPT0gbnVsbCkgeworCQkJZ2F1c3NpYW5Gb3JjaW5nRGlzZWFzZU1vZGVsSXRlbVByb3ZpZGVyID0gbmV3IEdhdXNzaWFuRm9yY2luZ0Rpc2Vhc2VNb2RlbEl0ZW1Qcm92aWRlcih0aGlzKTsKKwkJfQorCisJCXJldHVybiBnYXVzc2lhbkZvcmNpbmdEaXNlYXNlTW9kZWxJdGVtUHJvdmlkZXI7CisJfQorCisJLyoqCisJICogVGhpcyBrZWVwcyB0cmFjayBvZiB0aGUgb25lIGFkYXB0ZXIgdXNlZCBmb3IgYWxsIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZm9yY2luZy5HYXVzc2lhbjJGb3JjaW5nRGlzZWFzZU1vZGVsfSBpbnN0YW5jZXMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIEdhdXNzaWFuMkZvcmNpbmdEaXNlYXNlTW9kZWxJdGVtUHJvdmlkZXIgZ2F1c3NpYW4yRm9yY2luZ0Rpc2Vhc2VNb2RlbEl0ZW1Qcm92aWRlcjsKKworCS8qKgorCSAqIFRoaXMgY3JlYXRlcyBhbiBhZGFwdGVyIGZvciBhIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZm9yY2luZy5HYXVzc2lhbjJGb3JjaW5nRGlzZWFzZU1vZGVsfS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVHYXVzc2lhbjJGb3JjaW5nRGlzZWFzZU1vZGVsQWRhcHRlcigpIHsKKwkJaWYgKGdhdXNzaWFuMkZvcmNpbmdEaXNlYXNlTW9kZWxJdGVtUHJvdmlkZXIgPT0gbnVsbCkgeworCQkJZ2F1c3NpYW4yRm9yY2luZ0Rpc2Vhc2VNb2RlbEl0ZW1Qcm92aWRlciA9IG5ldyBHYXVzc2lhbjJGb3JjaW5nRGlzZWFzZU1vZGVsSXRlbVByb3ZpZGVyKHRoaXMpOworCQl9CisKKwkJcmV0dXJuIGdhdXNzaWFuMkZvcmNpbmdEaXNlYXNlTW9kZWxJdGVtUHJvdmlkZXI7CisJfQorCisJLyoqCisJICogVGhpcyBrZWVwcyB0cmFjayBvZiB0aGUgb25lIGFkYXB0ZXIgdXNlZCBmb3IgYWxsIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZm9yY2luZy5HYXVzc2lhbjNGb3JjaW5nRGlzZWFzZU1vZGVsfSBpbnN0YW5jZXMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIEdhdXNzaWFuM0ZvcmNpbmdEaXNlYXNlTW9kZWxJdGVtUHJvdmlkZXIgZ2F1c3NpYW4zRm9yY2luZ0Rpc2Vhc2VNb2RlbEl0ZW1Qcm92aWRlcjsKKworCS8qKgorCSAqIFRoaXMgY3JlYXRlcyBhbiBhZGFwdGVyIGZvciBhIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZm9yY2luZy5HYXVzc2lhbjNGb3JjaW5nRGlzZWFzZU1vZGVsfS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVHYXVzc2lhbjNGb3JjaW5nRGlzZWFzZU1vZGVsQWRhcHRlcigpIHsKKwkJaWYgKGdhdXNzaWFuM0ZvcmNpbmdEaXNlYXNlTW9kZWxJdGVtUHJvdmlkZXIgPT0gbnVsbCkgeworCQkJZ2F1c3NpYW4zRm9yY2luZ0Rpc2Vhc2VNb2RlbEl0ZW1Qcm92aWRlciA9IG5ldyBHYXVzc2lhbjNGb3JjaW5nRGlzZWFzZU1vZGVsSXRlbVByb3ZpZGVyKHRoaXMpOworCQl9CisKKwkJcmV0dXJuIGdhdXNzaWFuM0ZvcmNpbmdEaXNlYXNlTW9kZWxJdGVtUHJvdmlkZXI7CisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIHRoZSByb290IGFkYXB0ZXIgZmFjdG9yeSB0aGF0IGNvbnRhaW5zIHRoaXMgZmFjdG9yeS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSBnZXRSb290QWRhcHRlckZhY3RvcnkoKSB7CisJCXJldHVybiBwYXJlbnRBZGFwdGVyRmFjdG9yeSA9PSBudWxsID8gdGhpcyA6IHBhcmVudEFkYXB0ZXJGYWN0b3J5LmdldFJvb3RBZGFwdGVyRmFjdG9yeSgpOworCX0KKworCS8qKgorCSAqIFRoaXMgc2V0cyB0aGUgY29tcG9zZWQgYWRhcHRlciBmYWN0b3J5IHRoYXQgY29udGFpbnMgdGhpcyBmYWN0b3J5LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIHNldFBhcmVudEFkYXB0ZXJGYWN0b3J5KENvbXBvc2VkQWRhcHRlckZhY3RvcnkgcGFyZW50QWRhcHRlckZhY3RvcnkpIHsKKwkJdGhpcy5wYXJlbnRBZGFwdGVyRmFjdG9yeSA9IHBhcmVudEFkYXB0ZXJGYWN0b3J5OworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBib29sZWFuIGlzRmFjdG9yeUZvclR5cGUoT2JqZWN0IHR5cGUpIHsKKwkJcmV0dXJuIHN1cHBvcnRlZFR5cGVzLmNvbnRhaW5zKHR5cGUpIHx8IHN1cGVyLmlzRmFjdG9yeUZvclR5cGUodHlwZSk7CisJfQorCisJLyoqCisJICogVGhpcyBpbXBsZW1lbnRhdGlvbiBzdWJzdGl0dXRlcyB0aGUgZmFjdG9yeSBpdHNlbGYgYXMgdGhlIGtleSBmb3IgdGhlIGFkYXB0ZXIuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIEFkYXB0ZXIgYWRhcHQoTm90aWZpZXIgbm90aWZpZXIsIE9iamVjdCB0eXBlKSB7CisJCXJldHVybiBzdXBlci5hZGFwdChub3RpZmllciwgdGhpcyk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIE9iamVjdCBhZGFwdChPYmplY3Qgb2JqZWN0LCBPYmplY3QgdHlwZSkgeworCQlpZiAoaXNGYWN0b3J5Rm9yVHlwZSh0eXBlKSkgeworCQkJT2JqZWN0IGFkYXB0ZXIgPSBzdXBlci5hZGFwdChvYmplY3QsIHR5cGUpOworCQkJaWYgKCEodHlwZSBpbnN0YW5jZW9mIENsYXNzPD8+KSB8fCAoKChDbGFzczw/Pil0eXBlKS5pc0luc3RhbmNlKGFkYXB0ZXIpKSkgeworCQkJCXJldHVybiBhZGFwdGVyOworCQkJfQorCQl9CisKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogVGhpcyBhZGRzIGEgbGlzdGVuZXIuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgYWRkTGlzdGVuZXIoSU5vdGlmeUNoYW5nZWRMaXN0ZW5lciBub3RpZnlDaGFuZ2VkTGlzdGVuZXIpIHsKKwkJY2hhbmdlTm90aWZpZXIuYWRkTGlzdGVuZXIobm90aWZ5Q2hhbmdlZExpc3RlbmVyKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHJlbW92ZXMgYSBsaXN0ZW5lci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCByZW1vdmVMaXN0ZW5lcihJTm90aWZ5Q2hhbmdlZExpc3RlbmVyIG5vdGlmeUNoYW5nZWRMaXN0ZW5lcikgeworCQljaGFuZ2VOb3RpZmllci5yZW1vdmVMaXN0ZW5lcihub3RpZnlDaGFuZ2VkTGlzdGVuZXIpOworCX0KKworCS8qKgorCSAqIFRoaXMgZGVsZWdhdGVzIHRvIHtAbGluayAjY2hhbmdlTm90aWZpZXJ9IGFuZCB0byB7QGxpbmsgI3BhcmVudEFkYXB0ZXJGYWN0b3J5fS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBmaXJlTm90aWZ5Q2hhbmdlZChOb3RpZmljYXRpb24gbm90aWZpY2F0aW9uKSB7CisJCWNoYW5nZU5vdGlmaWVyLmZpcmVOb3RpZnlDaGFuZ2VkKG5vdGlmaWNhdGlvbik7CisKKwkJaWYgKHBhcmVudEFkYXB0ZXJGYWN0b3J5ICE9IG51bGwpIHsKKwkJCXBhcmVudEFkYXB0ZXJGYWN0b3J5LmZpcmVOb3RpZnlDaGFuZ2VkKG5vdGlmaWNhdGlvbik7CisJCX0KKwl9CisKKwkvKioKKwkgKiBUaGlzIGRpc3Bvc2VzIGFsbCBvZiB0aGUgaXRlbSBwcm92aWRlcnMgY3JlYXRlZCBieSB0aGlzIGZhY3RvcnkuIAorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIGRpc3Bvc2UoKSB7CisJCWlmIChmb3JjaW5nRGlzZWFzZU1vZGVsSXRlbVByb3ZpZGVyICE9IG51bGwpIGZvcmNpbmdEaXNlYXNlTW9kZWxJdGVtUHJvdmlkZXIuZGlzcG9zZSgpOworCQlpZiAoZ2F1c3NpYW5Gb3JjaW5nRGlzZWFzZU1vZGVsSXRlbVByb3ZpZGVyICE9IG51bGwpIGdhdXNzaWFuRm9yY2luZ0Rpc2Vhc2VNb2RlbEl0ZW1Qcm92aWRlci5kaXNwb3NlKCk7CisJCWlmIChnYXVzc2lhbjJGb3JjaW5nRGlzZWFzZU1vZGVsSXRlbVByb3ZpZGVyICE9IG51bGwpIGdhdXNzaWFuMkZvcmNpbmdEaXNlYXNlTW9kZWxJdGVtUHJvdmlkZXIuZGlzcG9zZSgpOworCQlpZiAoZ2F1c3NpYW4zRm9yY2luZ0Rpc2Vhc2VNb2RlbEl0ZW1Qcm92aWRlciAhPSBudWxsKSBnYXVzc2lhbjNGb3JjaW5nRGlzZWFzZU1vZGVsSXRlbVByb3ZpZGVyLmRpc3Bvc2UoKTsKKwl9CisKK30KZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmZvcmNpbmcvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9mb3JjaW5nL3Byb3ZpZGVyL0dhdXNzaWFuMkZvcmNpbmdEaXNlYXNlTW9kZWxJdGVtUHJvdmlkZXIuamF2YSBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmZvcmNpbmcvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9mb3JjaW5nL3Byb3ZpZGVyL0dhdXNzaWFuMkZvcmNpbmdEaXNlYXNlTW9kZWxJdGVtUHJvdmlkZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44Njc4NTg2Ci0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZm9yY2luZy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL2ZvcmNpbmcvcHJvdmlkZXIvR2F1c3NpYW4yRm9yY2luZ0Rpc2Vhc2VNb2RlbEl0ZW1Qcm92aWRlci5qYXZhCkBAIC0wLDAgKzEsMjQyIEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5mb3JjaW5nLnByb3ZpZGVyOworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAxMCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOworaW1wb3J0IGphdmEudXRpbC5MaXN0OworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkNvbXBvc2VhYmxlQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUVkaXRpbmdEb21haW5JdGVtUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1MYWJlbFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtUHJvcGVydHlEZXNjcmlwdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtUHJvcGVydHlTb3VyY2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVN0cnVjdHVyZWRJdGVtQ29udGVudFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklUcmVlSXRlbUNvbnRlbnRQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JdGVtUHJvcGVydHlEZXNjcmlwdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLlZpZXdlck5vdGlmaWNhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZm9yY2luZy5Gb3JjaW5nUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZm9yY2luZy5HYXVzc2lhbjJGb3JjaW5nRGlzZWFzZU1vZGVsOworCisvKioKKyAqIFRoaXMgaXMgdGhlIGl0ZW0gcHJvdmlkZXIgYWRhcHRlciBmb3IgYSB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmZvcmNpbmcuR2F1c3NpYW4yRm9yY2luZ0Rpc2Vhc2VNb2RlbH0gb2JqZWN0LgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgR2F1c3NpYW4yRm9yY2luZ0Rpc2Vhc2VNb2RlbEl0ZW1Qcm92aWRlcgorCWV4dGVuZHMgR2F1c3NpYW5Gb3JjaW5nRGlzZWFzZU1vZGVsSXRlbVByb3ZpZGVyCisJaW1wbGVtZW50cworCQlJRWRpdGluZ0RvbWFpbkl0ZW1Qcm92aWRlciwKKwkJSVN0cnVjdHVyZWRJdGVtQ29udGVudFByb3ZpZGVyLAorCQlJVHJlZUl0ZW1Db250ZW50UHJvdmlkZXIsCisJCUlJdGVtTGFiZWxQcm92aWRlciwKKwkJSUl0ZW1Qcm9wZXJ0eVNvdXJjZSB7CisJLyoqCisJICogVGhpcyBjb25zdHJ1Y3RzIGFuIGluc3RhbmNlIGZyb20gYSBmYWN0b3J5IGFuZCBhIG5vdGlmaWVyLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBHYXVzc2lhbjJGb3JjaW5nRGlzZWFzZU1vZGVsSXRlbVByb3ZpZGVyKEFkYXB0ZXJGYWN0b3J5IGFkYXB0ZXJGYWN0b3J5KSB7CisJCXN1cGVyKGFkYXB0ZXJGYWN0b3J5KTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgdGhlIHByb3BlcnR5IGRlc2NyaXB0b3JzIGZvciB0aGUgYWRhcHRlZCBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgTGlzdDxJSXRlbVByb3BlcnR5RGVzY3JpcHRvcj4gZ2V0UHJvcGVydHlEZXNjcmlwdG9ycyhPYmplY3Qgb2JqZWN0KSB7CisJCWlmIChpdGVtUHJvcGVydHlEZXNjcmlwdG9ycyA9PSBudWxsKSB7CisJCQlzdXBlci5nZXRQcm9wZXJ0eURlc2NyaXB0b3JzKG9iamVjdCk7CisKKwkJCWFkZFNpZ21hMl8yUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCk7CisJCQlhZGRBdHQxUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCk7CisJCQlhZGRBdHQyUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCk7CisJCQlhZGRBdHQzUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCk7CisJCQlhZGRBdHQ0UHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCk7CisJCX0KKwkJcmV0dXJuIGl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzOworCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyBhIHByb3BlcnR5IGRlc2NyaXB0b3IgZm9yIHRoZSBTaWdtYTIgMiBmZWF0dXJlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIGFkZFNpZ21hMl8yUHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdCBvYmplY3QpIHsKKwkJaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMuYWRkCisJCQkoY3JlYXRlSXRlbVByb3BlcnR5RGVzY3JpcHRvcgorCQkJCSgoKENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnkpYWRhcHRlckZhY3RvcnkpLmdldFJvb3RBZGFwdGVyRmFjdG9yeSgpLAorCQkJCSBnZXRSZXNvdXJjZUxvY2F0b3IoKSwKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfR2F1c3NpYW4yRm9yY2luZ0Rpc2Vhc2VNb2RlbF9zaWdtYTJfMl9mZWF0dXJlIiksIC8vJE5PTi1OTFMtMSQKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfUHJvcGVydHlEZXNjcmlwdG9yX2Rlc2NyaXB0aW9uIiwgIl9VSV9HYXVzc2lhbjJGb3JjaW5nRGlzZWFzZU1vZGVsX3NpZ21hMl8yX2ZlYXR1cmUiLCAiX1VJX0dhdXNzaWFuMkZvcmNpbmdEaXNlYXNlTW9kZWxfdHlwZSIpLCAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQgLy8kTk9OLU5MUy0zJAorCQkJCSBGb3JjaW5nUGFja2FnZS5MaXRlcmFscy5HQVVTU0lBTjJfRk9SQ0lOR19ESVNFQVNFX01PREVMX19TSUdNQTJfMiwKKwkJCQkgdHJ1ZSwKKwkJCQkgZmFsc2UsCisJCQkJIGZhbHNlLAorCQkJCSBJdGVtUHJvcGVydHlEZXNjcmlwdG9yLlJFQUxfVkFMVUVfSU1BR0UsCisJCQkJIG51bGwsCisJCQkJIG51bGwpKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFkZHMgYSBwcm9wZXJ0eSBkZXNjcmlwdG9yIGZvciB0aGUgQXR0MSBmZWF0dXJlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIGFkZEF0dDFQcm9wZXJ0eURlc2NyaXB0b3IoT2JqZWN0IG9iamVjdCkgeworCQlpdGVtUHJvcGVydHlEZXNjcmlwdG9ycy5hZGQKKwkJCShjcmVhdGVJdGVtUHJvcGVydHlEZXNjcmlwdG9yCisJCQkJKCgoQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSlhZGFwdGVyRmFjdG9yeSkuZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCksCisJCQkJIGdldFJlc291cmNlTG9jYXRvcigpLAorCQkJCSBnZXRTdHJpbmcoIl9VSV9HYXVzc2lhbjJGb3JjaW5nRGlzZWFzZU1vZGVsX2F0dDFfZmVhdHVyZSIpLCAvLyROT04tTkxTLTEkCisJCQkJIGdldFN0cmluZygiX1VJX1Byb3BlcnR5RGVzY3JpcHRvcl9kZXNjcmlwdGlvbiIsICJfVUlfR2F1c3NpYW4yRm9yY2luZ0Rpc2Vhc2VNb2RlbF9hdHQxX2ZlYXR1cmUiLCAiX1VJX0dhdXNzaWFuMkZvcmNpbmdEaXNlYXNlTW9kZWxfdHlwZSIpLCAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQgLy8kTk9OLU5MUy0zJAorCQkJCSBGb3JjaW5nUGFja2FnZS5MaXRlcmFscy5HQVVTU0lBTjJfRk9SQ0lOR19ESVNFQVNFX01PREVMX19BVFQxLAorCQkJCSB0cnVlLAorCQkJCSBmYWxzZSwKKwkJCQkgZmFsc2UsCisJCQkJIEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IuUkVBTF9WQUxVRV9JTUFHRSwKKwkJCQkgbnVsbCwKKwkJCQkgbnVsbCkpOworCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyBhIHByb3BlcnR5IGRlc2NyaXB0b3IgZm9yIHRoZSBBdHQyIGZlYXR1cmUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgYWRkQXR0MlByb3BlcnR5RGVzY3JpcHRvcihPYmplY3Qgb2JqZWN0KSB7CisJCWl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzLmFkZAorCQkJKGNyZWF0ZUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IKKwkJCQkoKChDb21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5KWFkYXB0ZXJGYWN0b3J5KS5nZXRSb290QWRhcHRlckZhY3RvcnkoKSwKKwkJCQkgZ2V0UmVzb3VyY2VMb2NhdG9yKCksCisJCQkJIGdldFN0cmluZygiX1VJX0dhdXNzaWFuMkZvcmNpbmdEaXNlYXNlTW9kZWxfYXR0Ml9mZWF0dXJlIiksIC8vJE5PTi1OTFMtMSQKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfUHJvcGVydHlEZXNjcmlwdG9yX2Rlc2NyaXB0aW9uIiwgIl9VSV9HYXVzc2lhbjJGb3JjaW5nRGlzZWFzZU1vZGVsX2F0dDJfZmVhdHVyZSIsICJfVUlfR2F1c3NpYW4yRm9yY2luZ0Rpc2Vhc2VNb2RlbF90eXBlIiksIC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJCAvLyROT04tTkxTLTMkCisJCQkJIEZvcmNpbmdQYWNrYWdlLkxpdGVyYWxzLkdBVVNTSUFOMl9GT1JDSU5HX0RJU0VBU0VfTU9ERUxfX0FUVDIsCisJCQkJIHRydWUsCisJCQkJIGZhbHNlLAorCQkJCSBmYWxzZSwKKwkJCQkgSXRlbVByb3BlcnR5RGVzY3JpcHRvci5SRUFMX1ZBTFVFX0lNQUdFLAorCQkJCSBudWxsLAorCQkJCSBudWxsKSk7CisJfQorCisJLyoqCisJICogVGhpcyBhZGRzIGEgcHJvcGVydHkgZGVzY3JpcHRvciBmb3IgdGhlIEF0dDMgZmVhdHVyZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBhZGRBdHQzUHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdCBvYmplY3QpIHsKKwkJaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMuYWRkCisJCQkoY3JlYXRlSXRlbVByb3BlcnR5RGVzY3JpcHRvcgorCQkJCSgoKENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnkpYWRhcHRlckZhY3RvcnkpLmdldFJvb3RBZGFwdGVyRmFjdG9yeSgpLAorCQkJCSBnZXRSZXNvdXJjZUxvY2F0b3IoKSwKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfR2F1c3NpYW4yRm9yY2luZ0Rpc2Vhc2VNb2RlbF9hdHQzX2ZlYXR1cmUiKSwgLy8kTk9OLU5MUy0xJAorCQkJCSBnZXRTdHJpbmcoIl9VSV9Qcm9wZXJ0eURlc2NyaXB0b3JfZGVzY3JpcHRpb24iLCAiX1VJX0dhdXNzaWFuMkZvcmNpbmdEaXNlYXNlTW9kZWxfYXR0M19mZWF0dXJlIiwgIl9VSV9HYXVzc2lhbjJGb3JjaW5nRGlzZWFzZU1vZGVsX3R5cGUiKSwgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkIC8vJE5PTi1OTFMtMyQKKwkJCQkgRm9yY2luZ1BhY2thZ2UuTGl0ZXJhbHMuR0FVU1NJQU4yX0ZPUkNJTkdfRElTRUFTRV9NT0RFTF9fQVRUMywKKwkJCQkgdHJ1ZSwKKwkJCQkgZmFsc2UsCisJCQkJIGZhbHNlLAorCQkJCSBJdGVtUHJvcGVydHlEZXNjcmlwdG9yLlJFQUxfVkFMVUVfSU1BR0UsCisJCQkJIG51bGwsCisJCQkJIG51bGwpKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFkZHMgYSBwcm9wZXJ0eSBkZXNjcmlwdG9yIGZvciB0aGUgQXR0NCBmZWF0dXJlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIGFkZEF0dDRQcm9wZXJ0eURlc2NyaXB0b3IoT2JqZWN0IG9iamVjdCkgeworCQlpdGVtUHJvcGVydHlEZXNjcmlwdG9ycy5hZGQKKwkJCShjcmVhdGVJdGVtUHJvcGVydHlEZXNjcmlwdG9yCisJCQkJKCgoQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSlhZGFwdGVyRmFjdG9yeSkuZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCksCisJCQkJIGdldFJlc291cmNlTG9jYXRvcigpLAorCQkJCSBnZXRTdHJpbmcoIl9VSV9HYXVzc2lhbjJGb3JjaW5nRGlzZWFzZU1vZGVsX2F0dDRfZmVhdHVyZSIpLCAvLyROT04tTkxTLTEkCisJCQkJIGdldFN0cmluZygiX1VJX1Byb3BlcnR5RGVzY3JpcHRvcl9kZXNjcmlwdGlvbiIsICJfVUlfR2F1c3NpYW4yRm9yY2luZ0Rpc2Vhc2VNb2RlbF9hdHQ0X2ZlYXR1cmUiLCAiX1VJX0dhdXNzaWFuMkZvcmNpbmdEaXNlYXNlTW9kZWxfdHlwZSIpLCAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQgLy8kTk9OLU5MUy0zJAorCQkJCSBGb3JjaW5nUGFja2FnZS5MaXRlcmFscy5HQVVTU0lBTjJfRk9SQ0lOR19ESVNFQVNFX01PREVMX19BVFQ0LAorCQkJCSB0cnVlLAorCQkJCSBmYWxzZSwKKwkJCQkgZmFsc2UsCisJCQkJIEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IuUkVBTF9WQUxVRV9JTUFHRSwKKwkJCQkgbnVsbCwKKwkJCQkgbnVsbCkpOworCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyBHYXVzc2lhbjJGb3JjaW5nRGlzZWFzZU1vZGVsLmdpZi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgT2JqZWN0IGdldEltYWdlKE9iamVjdCBvYmplY3QpIHsKKwkJcmV0dXJuIG92ZXJsYXlJbWFnZShvYmplY3QsIGdldFJlc291cmNlTG9jYXRvcigpLmdldEltYWdlKCJmdWxsL29iajE2L0dhdXNzaWFuMkZvcmNpbmdEaXNlYXNlTW9kZWwiKSk7IC8vJE5PTi1OTFMtMSQKKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgdGhlIGxhYmVsIHRleHQgZm9yIHRoZSBhZGFwdGVkIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgU3RyaW5nIGdldFRleHQoT2JqZWN0IG9iamVjdCkgeworCQlyZXR1cm4gc3VwZXIuZ2V0VGV4dChvYmplY3QpOworCX0KKworCS8qKgorCSAqIFRoaXMgaGFuZGxlcyBtb2RlbCBub3RpZmljYXRpb25zIGJ5IGNhbGxpbmcge0BsaW5rICN1cGRhdGVDaGlsZHJlbn0gdG8gdXBkYXRlIGFueSBjYWNoZWQKKwkgKiBjaGlsZHJlbiBhbmQgYnkgY3JlYXRpbmcgYSB2aWV3ZXIgbm90aWZpY2F0aW9uLCB3aGljaCBpdCBwYXNzZXMgdG8ge0BsaW5rICNmaXJlTm90aWZ5Q2hhbmdlZH0uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgbm90aWZ5Q2hhbmdlZChOb3RpZmljYXRpb24gbm90aWZpY2F0aW9uKSB7CisJCXVwZGF0ZUNoaWxkcmVuKG5vdGlmaWNhdGlvbik7CisKKwkJc3dpdGNoIChub3RpZmljYXRpb24uZ2V0RmVhdHVyZUlEKEdhdXNzaWFuMkZvcmNpbmdEaXNlYXNlTW9kZWwuY2xhc3MpKSB7CisJCQljYXNlIEZvcmNpbmdQYWNrYWdlLkdBVVNTSUFOMl9GT1JDSU5HX0RJU0VBU0VfTU9ERUxfX1NJR01BMl8yOgorCQkJY2FzZSBGb3JjaW5nUGFja2FnZS5HQVVTU0lBTjJfRk9SQ0lOR19ESVNFQVNFX01PREVMX19BVFQxOgorCQkJY2FzZSBGb3JjaW5nUGFja2FnZS5HQVVTU0lBTjJfRk9SQ0lOR19ESVNFQVNFX01PREVMX19BVFQyOgorCQkJY2FzZSBGb3JjaW5nUGFja2FnZS5HQVVTU0lBTjJfRk9SQ0lOR19ESVNFQVNFX01PREVMX19BVFQzOgorCQkJY2FzZSBGb3JjaW5nUGFja2FnZS5HQVVTU0lBTjJfRk9SQ0lOR19ESVNFQVNFX01PREVMX19BVFQ0OgorCQkJCWZpcmVOb3RpZnlDaGFuZ2VkKG5ldyBWaWV3ZXJOb3RpZmljYXRpb24obm90aWZpY2F0aW9uLCBub3RpZmljYXRpb24uZ2V0Tm90aWZpZXIoKSwgZmFsc2UsIHRydWUpKTsKKwkJCQlyZXR1cm47CisJCX0KKwkJc3VwZXIubm90aWZ5Q2hhbmdlZChub3RpZmljYXRpb24pOworCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmVkaXQuY29tbWFuZC5Db21tYW5kUGFyYW1ldGVyfXMgZGVzY3JpYmluZyB0aGUgY2hpbGRyZW4KKwkgKiB0aGF0IGNhbiBiZSBjcmVhdGVkIHVuZGVyIHRoaXMgb2JqZWN0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIGNvbGxlY3ROZXdDaGlsZERlc2NyaXB0b3JzKENvbGxlY3Rpb248T2JqZWN0PiBuZXdDaGlsZERlc2NyaXB0b3JzLCBPYmplY3Qgb2JqZWN0KSB7CisJCXN1cGVyLmNvbGxlY3ROZXdDaGlsZERlc2NyaXB0b3JzKG5ld0NoaWxkRGVzY3JpcHRvcnMsIG9iamVjdCk7CisJfQorCit9CmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5mb3JjaW5nL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvZm9yY2luZy9wcm92aWRlci9HYXVzc2lhbjNGb3JjaW5nRGlzZWFzZU1vZGVsSXRlbVByb3ZpZGVyLmphdmEgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5mb3JjaW5nL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvZm9yY2luZy9wcm92aWRlci9HYXVzc2lhbjNGb3JjaW5nRGlzZWFzZU1vZGVsSXRlbVByb3ZpZGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWEzNTkwOAotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmZvcmNpbmcvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9mb3JjaW5nL3Byb3ZpZGVyL0dhdXNzaWFuM0ZvcmNpbmdEaXNlYXNlTW9kZWxJdGVtUHJvdmlkZXIuamF2YQpAQCAtMCwwICsxLDIxOSBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZm9yY2luZy5wcm92aWRlcjsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAxMCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOworaW1wb3J0IGphdmEudXRpbC5MaXN0OworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkNvbXBvc2VhYmxlQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUVkaXRpbmdEb21haW5JdGVtUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1MYWJlbFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtUHJvcGVydHlEZXNjcmlwdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtUHJvcGVydHlTb3VyY2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVN0cnVjdHVyZWRJdGVtQ29udGVudFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklUcmVlSXRlbUNvbnRlbnRQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JdGVtUHJvcGVydHlEZXNjcmlwdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLlZpZXdlck5vdGlmaWNhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZm9yY2luZy5Gb3JjaW5nUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZm9yY2luZy5HYXVzc2lhbjNGb3JjaW5nRGlzZWFzZU1vZGVsOworCisvKioKKyAqIFRoaXMgaXMgdGhlIGl0ZW0gcHJvdmlkZXIgYWRhcHRlciBmb3IgYSB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmZvcmNpbmcuR2F1c3NpYW4zRm9yY2luZ0Rpc2Vhc2VNb2RlbH0gb2JqZWN0LgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgR2F1c3NpYW4zRm9yY2luZ0Rpc2Vhc2VNb2RlbEl0ZW1Qcm92aWRlcgorCWV4dGVuZHMgR2F1c3NpYW4yRm9yY2luZ0Rpc2Vhc2VNb2RlbEl0ZW1Qcm92aWRlcgorCWltcGxlbWVudHMKKwkJSUVkaXRpbmdEb21haW5JdGVtUHJvdmlkZXIsCisJCUlTdHJ1Y3R1cmVkSXRlbUNvbnRlbnRQcm92aWRlciwKKwkJSVRyZWVJdGVtQ29udGVudFByb3ZpZGVyLAorCQlJSXRlbUxhYmVsUHJvdmlkZXIsCisJCUlJdGVtUHJvcGVydHlTb3VyY2UgeworCS8qKgorCSAqIFRoaXMgY29uc3RydWN0cyBhbiBpbnN0YW5jZSBmcm9tIGEgZmFjdG9yeSBhbmQgYSBub3RpZmllci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgR2F1c3NpYW4zRm9yY2luZ0Rpc2Vhc2VNb2RlbEl0ZW1Qcm92aWRlcihBZGFwdGVyRmFjdG9yeSBhZGFwdGVyRmFjdG9yeSkgeworCQlzdXBlcihhZGFwdGVyRmFjdG9yeSk7CisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIHRoZSBwcm9wZXJ0eSBkZXNjcmlwdG9ycyBmb3IgdGhlIGFkYXB0ZWQgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIExpc3Q8SUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I+IGdldFByb3BlcnR5RGVzY3JpcHRvcnMoT2JqZWN0IG9iamVjdCkgeworCQlpZiAoaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMgPT0gbnVsbCkgeworCQkJc3VwZXIuZ2V0UHJvcGVydHlEZXNjcmlwdG9ycyhvYmplY3QpOworCisJCQlhZGRTaWdtYTJfM1Byb3BlcnR5RGVzY3JpcHRvcihvYmplY3QpOworCQkJYWRkVHJhbnNtaXNzaW9uUmF0ZTJQcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0KTsKKwkJCWFkZFRyYW5zbWlzc2lvblJhdGUzUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCk7CisJCQlhZGRNb2R1bGF0aW9uRmxvb3JfMlByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QpOworCQl9CisJCXJldHVybiBpdGVtUHJvcGVydHlEZXNjcmlwdG9yczsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFkZHMgYSBwcm9wZXJ0eSBkZXNjcmlwdG9yIGZvciB0aGUgU2lnbWEyIDMgZmVhdHVyZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBhZGRTaWdtYTJfM1Byb3BlcnR5RGVzY3JpcHRvcihPYmplY3Qgb2JqZWN0KSB7CisJCWl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzLmFkZAorCQkJKGNyZWF0ZUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IKKwkJCQkoKChDb21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5KWFkYXB0ZXJGYWN0b3J5KS5nZXRSb290QWRhcHRlckZhY3RvcnkoKSwKKwkJCQkgZ2V0UmVzb3VyY2VMb2NhdG9yKCksCisJCQkJIGdldFN0cmluZygiX1VJX0dhdXNzaWFuM0ZvcmNpbmdEaXNlYXNlTW9kZWxfc2lnbWEyXzNfZmVhdHVyZSIpLCAvLyROT04tTkxTLTEkCisJCQkJIGdldFN0cmluZygiX1VJX1Byb3BlcnR5RGVzY3JpcHRvcl9kZXNjcmlwdGlvbiIsICJfVUlfR2F1c3NpYW4zRm9yY2luZ0Rpc2Vhc2VNb2RlbF9zaWdtYTJfM19mZWF0dXJlIiwgIl9VSV9HYXVzc2lhbjNGb3JjaW5nRGlzZWFzZU1vZGVsX3R5cGUiKSwgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkIC8vJE5PTi1OTFMtMyQKKwkJCQkgRm9yY2luZ1BhY2thZ2UuTGl0ZXJhbHMuR0FVU1NJQU4zX0ZPUkNJTkdfRElTRUFTRV9NT0RFTF9fU0lHTUEyXzMsCisJCQkJIHRydWUsCisJCQkJIGZhbHNlLAorCQkJCSBmYWxzZSwKKwkJCQkgSXRlbVByb3BlcnR5RGVzY3JpcHRvci5SRUFMX1ZBTFVFX0lNQUdFLAorCQkJCSBudWxsLAorCQkJCSBudWxsKSk7CisJfQorCisJLyoqCisJICogVGhpcyBhZGRzIGEgcHJvcGVydHkgZGVzY3JpcHRvciBmb3IgdGhlIFRyYW5zbWlzc2lvbiBSYXRlMiBmZWF0dXJlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIGFkZFRyYW5zbWlzc2lvblJhdGUyUHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdCBvYmplY3QpIHsKKwkJaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMuYWRkCisJCQkoY3JlYXRlSXRlbVByb3BlcnR5RGVzY3JpcHRvcgorCQkJCSgoKENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnkpYWRhcHRlckZhY3RvcnkpLmdldFJvb3RBZGFwdGVyRmFjdG9yeSgpLAorCQkJCSBnZXRSZXNvdXJjZUxvY2F0b3IoKSwKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfR2F1c3NpYW4zRm9yY2luZ0Rpc2Vhc2VNb2RlbF90cmFuc21pc3Npb25SYXRlMl9mZWF0dXJlIiksIC8vJE5PTi1OTFMtMSQKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfUHJvcGVydHlEZXNjcmlwdG9yX2Rlc2NyaXB0aW9uIiwgIl9VSV9HYXVzc2lhbjNGb3JjaW5nRGlzZWFzZU1vZGVsX3RyYW5zbWlzc2lvblJhdGUyX2ZlYXR1cmUiLCAiX1VJX0dhdXNzaWFuM0ZvcmNpbmdEaXNlYXNlTW9kZWxfdHlwZSIpLCAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQgLy8kTk9OLU5MUy0zJAorCQkJCSBGb3JjaW5nUGFja2FnZS5MaXRlcmFscy5HQVVTU0lBTjNfRk9SQ0lOR19ESVNFQVNFX01PREVMX19UUkFOU01JU1NJT05fUkFURTIsCisJCQkJIHRydWUsCisJCQkJIGZhbHNlLAorCQkJCSBmYWxzZSwKKwkJCQkgSXRlbVByb3BlcnR5RGVzY3JpcHRvci5SRUFMX1ZBTFVFX0lNQUdFLAorCQkJCSBudWxsLAorCQkJCSBudWxsKSk7CisJfQorCisJLyoqCisJICogVGhpcyBhZGRzIGEgcHJvcGVydHkgZGVzY3JpcHRvciBmb3IgdGhlIFRyYW5zbWlzc2lvbiBSYXRlMyBmZWF0dXJlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIGFkZFRyYW5zbWlzc2lvblJhdGUzUHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdCBvYmplY3QpIHsKKwkJaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMuYWRkCisJCQkoY3JlYXRlSXRlbVByb3BlcnR5RGVzY3JpcHRvcgorCQkJCSgoKENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnkpYWRhcHRlckZhY3RvcnkpLmdldFJvb3RBZGFwdGVyRmFjdG9yeSgpLAorCQkJCSBnZXRSZXNvdXJjZUxvY2F0b3IoKSwKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfR2F1c3NpYW4zRm9yY2luZ0Rpc2Vhc2VNb2RlbF90cmFuc21pc3Npb25SYXRlM19mZWF0dXJlIiksIC8vJE5PTi1OTFMtMSQKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfUHJvcGVydHlEZXNjcmlwdG9yX2Rlc2NyaXB0aW9uIiwgIl9VSV9HYXVzc2lhbjNGb3JjaW5nRGlzZWFzZU1vZGVsX3RyYW5zbWlzc2lvblJhdGUzX2ZlYXR1cmUiLCAiX1VJX0dhdXNzaWFuM0ZvcmNpbmdEaXNlYXNlTW9kZWxfdHlwZSIpLCAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQgLy8kTk9OLU5MUy0zJAorCQkJCSBGb3JjaW5nUGFja2FnZS5MaXRlcmFscy5HQVVTU0lBTjNfRk9SQ0lOR19ESVNFQVNFX01PREVMX19UUkFOU01JU1NJT05fUkFURTMsCisJCQkJIHRydWUsCisJCQkJIGZhbHNlLAorCQkJCSBmYWxzZSwKKwkJCQkgSXRlbVByb3BlcnR5RGVzY3JpcHRvci5SRUFMX1ZBTFVFX0lNQUdFLAorCQkJCSBudWxsLAorCQkJCSBudWxsKSk7CisJfQorCisJLyoqCisJICogVGhpcyBhZGRzIGEgcHJvcGVydHkgZGVzY3JpcHRvciBmb3IgdGhlIE1vZHVsYXRpb24gRmxvb3IgMiBmZWF0dXJlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIGFkZE1vZHVsYXRpb25GbG9vcl8yUHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdCBvYmplY3QpIHsKKwkJaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMuYWRkCisJCQkoY3JlYXRlSXRlbVByb3BlcnR5RGVzY3JpcHRvcgorCQkJCSgoKENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnkpYWRhcHRlckZhY3RvcnkpLmdldFJvb3RBZGFwdGVyRmFjdG9yeSgpLAorCQkJCSBnZXRSZXNvdXJjZUxvY2F0b3IoKSwKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfR2F1c3NpYW4zRm9yY2luZ0Rpc2Vhc2VNb2RlbF9tb2R1bGF0aW9uRmxvb3JfMl9mZWF0dXJlIiksIC8vJE5PTi1OTFMtMSQKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfUHJvcGVydHlEZXNjcmlwdG9yX2Rlc2NyaXB0aW9uIiwgIl9VSV9HYXVzc2lhbjNGb3JjaW5nRGlzZWFzZU1vZGVsX21vZHVsYXRpb25GbG9vcl8yX2ZlYXR1cmUiLCAiX1VJX0dhdXNzaWFuM0ZvcmNpbmdEaXNlYXNlTW9kZWxfdHlwZSIpLCAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQgLy8kTk9OLU5MUy0zJAorCQkJCSBGb3JjaW5nUGFja2FnZS5MaXRlcmFscy5HQVVTU0lBTjNfRk9SQ0lOR19ESVNFQVNFX01PREVMX19NT0RVTEFUSU9OX0ZMT09SXzIsCisJCQkJIHRydWUsCisJCQkJIGZhbHNlLAorCQkJCSBmYWxzZSwKKwkJCQkgSXRlbVByb3BlcnR5RGVzY3JpcHRvci5SRUFMX1ZBTFVFX0lNQUdFLAorCQkJCSBudWxsLAorCQkJCSBudWxsKSk7CisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIEdhdXNzaWFuM0ZvcmNpbmdEaXNlYXNlTW9kZWwuZ2lmLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBPYmplY3QgZ2V0SW1hZ2UoT2JqZWN0IG9iamVjdCkgeworCQlyZXR1cm4gb3ZlcmxheUltYWdlKG9iamVjdCwgZ2V0UmVzb3VyY2VMb2NhdG9yKCkuZ2V0SW1hZ2UoImZ1bGwvb2JqMTYvR2F1c3NpYW4zRm9yY2luZ0Rpc2Vhc2VNb2RlbCIpKTsgLy8kTk9OLU5MUy0xJAorCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyB0aGUgbGFiZWwgdGV4dCBmb3IgdGhlIGFkYXB0ZWQgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBTdHJpbmcgZ2V0VGV4dChPYmplY3Qgb2JqZWN0KSB7CisJCXJldHVybiBzdXBlci5nZXRUZXh0KG9iamVjdCk7CisJfQorCisJLyoqCisJICogVGhpcyBoYW5kbGVzIG1vZGVsIG5vdGlmaWNhdGlvbnMgYnkgY2FsbGluZyB7QGxpbmsgI3VwZGF0ZUNoaWxkcmVufSB0byB1cGRhdGUgYW55IGNhY2hlZAorCSAqIGNoaWxkcmVuIGFuZCBieSBjcmVhdGluZyBhIHZpZXdlciBub3RpZmljYXRpb24sIHdoaWNoIGl0IHBhc3NlcyB0byB7QGxpbmsgI2ZpcmVOb3RpZnlDaGFuZ2VkfS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBub3RpZnlDaGFuZ2VkKE5vdGlmaWNhdGlvbiBub3RpZmljYXRpb24pIHsKKwkJdXBkYXRlQ2hpbGRyZW4obm90aWZpY2F0aW9uKTsKKworCQlzd2l0Y2ggKG5vdGlmaWNhdGlvbi5nZXRGZWF0dXJlSUQoR2F1c3NpYW4zRm9yY2luZ0Rpc2Vhc2VNb2RlbC5jbGFzcykpIHsKKwkJCWNhc2UgRm9yY2luZ1BhY2thZ2UuR0FVU1NJQU4zX0ZPUkNJTkdfRElTRUFTRV9NT0RFTF9fU0lHTUEyXzM6CisJCQljYXNlIEZvcmNpbmdQYWNrYWdlLkdBVVNTSUFOM19GT1JDSU5HX0RJU0VBU0VfTU9ERUxfX1RSQU5TTUlTU0lPTl9SQVRFMjoKKwkJCWNhc2UgRm9yY2luZ1BhY2thZ2UuR0FVU1NJQU4zX0ZPUkNJTkdfRElTRUFTRV9NT0RFTF9fVFJBTlNNSVNTSU9OX1JBVEUzOgorCQkJY2FzZSBGb3JjaW5nUGFja2FnZS5HQVVTU0lBTjNfRk9SQ0lOR19ESVNFQVNFX01PREVMX19NT0RVTEFUSU9OX0ZMT09SXzI6CisJCQkJZmlyZU5vdGlmeUNoYW5nZWQobmV3IFZpZXdlck5vdGlmaWNhdGlvbihub3RpZmljYXRpb24sIG5vdGlmaWNhdGlvbi5nZXROb3RpZmllcigpLCBmYWxzZSwgdHJ1ZSkpOworCQkJCXJldHVybjsKKwkJfQorCQlzdXBlci5ub3RpZnlDaGFuZ2VkKG5vdGlmaWNhdGlvbik7CisJfQorCisJLyoqCisJICogVGhpcyBhZGRzIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuZWRpdC5jb21tYW5kLkNvbW1hbmRQYXJhbWV0ZXJ9cyBkZXNjcmliaW5nIHRoZSBjaGlsZHJlbgorCSAqIHRoYXQgY2FuIGJlIGNyZWF0ZWQgdW5kZXIgdGhpcyBvYmplY3QuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgY29sbGVjdE5ld0NoaWxkRGVzY3JpcHRvcnMoQ29sbGVjdGlvbjxPYmplY3Q+IG5ld0NoaWxkRGVzY3JpcHRvcnMsIE9iamVjdCBvYmplY3QpIHsKKwkJc3VwZXIuY29sbGVjdE5ld0NoaWxkRGVzY3JpcHRvcnMobmV3Q2hpbGREZXNjcmlwdG9ycywgb2JqZWN0KTsKKwl9CisKK30KZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmZvcmNpbmcvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9mb3JjaW5nL3Byb3ZpZGVyL0dhdXNzaWFuRm9yY2luZ0Rpc2Vhc2VNb2RlbEl0ZW1Qcm92aWRlci5qYXZhIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZm9yY2luZy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL2ZvcmNpbmcvcHJvdmlkZXIvR2F1c3NpYW5Gb3JjaW5nRGlzZWFzZU1vZGVsSXRlbVByb3ZpZGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2M4YWFlYgotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmZvcmNpbmcvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9mb3JjaW5nL3Byb3ZpZGVyL0dhdXNzaWFuRm9yY2luZ0Rpc2Vhc2VNb2RlbEl0ZW1Qcm92aWRlci5qYXZhCkBAIC0wLDAgKzEsMjQ1IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5mb3JjaW5nLnByb3ZpZGVyOworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAxMCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOworaW1wb3J0IGphdmEudXRpbC5MaXN0OworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5SZXNvdXJjZUxvY2F0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JRWRpdGluZ0RvbWFpbkl0ZW1Qcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbUxhYmVsUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1Qcm9wZXJ0eVNvdXJjZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JU3RydWN0dXJlZEl0ZW1Db250ZW50UHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVRyZWVJdGVtQ29udGVudFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuVmlld2VyTm90aWZpY2F0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5mb3JjaW5nLkZvcmNpbmdQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5mb3JjaW5nLkdhdXNzaWFuRm9yY2luZ0Rpc2Vhc2VNb2RlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQucHJvdmlkZXIuU3RvY2hhc3RpY1NJUkRpc2Vhc2VNb2RlbEl0ZW1Qcm92aWRlcjsKKworLyoqCisgKiBUaGlzIGlzIHRoZSBpdGVtIHByb3ZpZGVyIGFkYXB0ZXIgZm9yIGEge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5mb3JjaW5nLkdhdXNzaWFuRm9yY2luZ0Rpc2Vhc2VNb2RlbH0gb2JqZWN0LgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgR2F1c3NpYW5Gb3JjaW5nRGlzZWFzZU1vZGVsSXRlbVByb3ZpZGVyCisJZXh0ZW5kcyBTdG9jaGFzdGljU0lSRGlzZWFzZU1vZGVsSXRlbVByb3ZpZGVyCisJaW1wbGVtZW50cworCQlJRWRpdGluZ0RvbWFpbkl0ZW1Qcm92aWRlciwKKwkJSVN0cnVjdHVyZWRJdGVtQ29udGVudFByb3ZpZGVyLAorCQlJVHJlZUl0ZW1Db250ZW50UHJvdmlkZXIsCisJCUlJdGVtTGFiZWxQcm92aWRlciwKKwkJSUl0ZW1Qcm9wZXJ0eVNvdXJjZSB7CisJLyoqCisJICogVGhpcyBjb25zdHJ1Y3RzIGFuIGluc3RhbmNlIGZyb20gYSBmYWN0b3J5IGFuZCBhIG5vdGlmaWVyLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBHYXVzc2lhbkZvcmNpbmdEaXNlYXNlTW9kZWxJdGVtUHJvdmlkZXIoQWRhcHRlckZhY3RvcnkgYWRhcHRlckZhY3RvcnkpIHsKKwkJc3VwZXIoYWRhcHRlckZhY3RvcnkpOworCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyB0aGUgcHJvcGVydHkgZGVzY3JpcHRvcnMgZm9yIHRoZSBhZGFwdGVkIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBMaXN0PElJdGVtUHJvcGVydHlEZXNjcmlwdG9yPiBnZXRQcm9wZXJ0eURlc2NyaXB0b3JzKE9iamVjdCBvYmplY3QpIHsKKwkJaWYgKGl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzID09IG51bGwpIHsKKwkJCXN1cGVyLmdldFByb3BlcnR5RGVzY3JpcHRvcnMob2JqZWN0KTsKKworCQkJYWRkU2lnbWEyUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCk7CisJCQlhZGRNb2R1bGF0aW9uUGVyaW9kUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCk7CisJCQlhZGRNb2R1bGF0aW9uUGhhc2VTaGlmdFByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QpOworCQkJYWRkTW9kdWxhdGlvbkZsb29yUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCk7CisJCX0KKwkJcmV0dXJuIGl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzOworCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyBhIHByb3BlcnR5IGRlc2NyaXB0b3IgZm9yIHRoZSBTaWdtYTIgZmVhdHVyZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBhZGRTaWdtYTJQcm9wZXJ0eURlc2NyaXB0b3IoT2JqZWN0IG9iamVjdCkgeworCQlpdGVtUHJvcGVydHlEZXNjcmlwdG9ycy5hZGQKKwkJCShjcmVhdGVJdGVtUHJvcGVydHlEZXNjcmlwdG9yCisJCQkJKCgoQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSlhZGFwdGVyRmFjdG9yeSkuZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCksCisJCQkJIGdldFJlc291cmNlTG9jYXRvcigpLAorCQkJCSBnZXRTdHJpbmcoIl9VSV9HYXVzc2lhbkZvcmNpbmdEaXNlYXNlTW9kZWxfc2lnbWEyX2ZlYXR1cmUiKSwgLy8kTk9OLU5MUy0xJAorCQkJCSBnZXRTdHJpbmcoIl9VSV9Qcm9wZXJ0eURlc2NyaXB0b3JfZGVzY3JpcHRpb24iLCAiX1VJX0dhdXNzaWFuRm9yY2luZ0Rpc2Vhc2VNb2RlbF9zaWdtYTJfZmVhdHVyZSIsICJfVUlfR2F1c3NpYW5Gb3JjaW5nRGlzZWFzZU1vZGVsX3R5cGUiKSwgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkIC8vJE5PTi1OTFMtMyQKKwkJCQkgRm9yY2luZ1BhY2thZ2UuTGl0ZXJhbHMuR0FVU1NJQU5fRk9SQ0lOR19ESVNFQVNFX01PREVMX19TSUdNQTIsCisJCQkJIHRydWUsCisJCQkJIGZhbHNlLAorCQkJCSBmYWxzZSwKKwkJCQkgSXRlbVByb3BlcnR5RGVzY3JpcHRvci5SRUFMX1ZBTFVFX0lNQUdFLAorCQkJCSBudWxsLAorCQkJCSBudWxsKSk7CisJfQorCisJLyoqCisJICogVGhpcyBhZGRzIGEgcHJvcGVydHkgZGVzY3JpcHRvciBmb3IgdGhlIE1vZHVsYXRpb24gUGVyaW9kIGZlYXR1cmUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgYWRkTW9kdWxhdGlvblBlcmlvZFByb3BlcnR5RGVzY3JpcHRvcihPYmplY3Qgb2JqZWN0KSB7CisJCWl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzLmFkZAorCQkJKGNyZWF0ZUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IKKwkJCQkoKChDb21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5KWFkYXB0ZXJGYWN0b3J5KS5nZXRSb290QWRhcHRlckZhY3RvcnkoKSwKKwkJCQkgZ2V0UmVzb3VyY2VMb2NhdG9yKCksCisJCQkJIGdldFN0cmluZygiX1VJX0dhdXNzaWFuRm9yY2luZ0Rpc2Vhc2VNb2RlbF9tb2R1bGF0aW9uUGVyaW9kX2ZlYXR1cmUiKSwgLy8kTk9OLU5MUy0xJAorCQkJCSBnZXRTdHJpbmcoIl9VSV9Qcm9wZXJ0eURlc2NyaXB0b3JfZGVzY3JpcHRpb24iLCAiX1VJX0dhdXNzaWFuRm9yY2luZ0Rpc2Vhc2VNb2RlbF9tb2R1bGF0aW9uUGVyaW9kX2ZlYXR1cmUiLCAiX1VJX0dhdXNzaWFuRm9yY2luZ0Rpc2Vhc2VNb2RlbF90eXBlIiksIC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJCAvLyROT04tTkxTLTMkCisJCQkJIEZvcmNpbmdQYWNrYWdlLkxpdGVyYWxzLkdBVVNTSUFOX0ZPUkNJTkdfRElTRUFTRV9NT0RFTF9fTU9EVUxBVElPTl9QRVJJT0QsCisJCQkJIHRydWUsCisJCQkJIGZhbHNlLAorCQkJCSBmYWxzZSwKKwkJCQkgSXRlbVByb3BlcnR5RGVzY3JpcHRvci5SRUFMX1ZBTFVFX0lNQUdFLAorCQkJCSBudWxsLAorCQkJCSBudWxsKSk7CisJfQorCisJLyoqCisJICogVGhpcyBhZGRzIGEgcHJvcGVydHkgZGVzY3JpcHRvciBmb3IgdGhlIE1vZHVsYXRpb24gUGhhc2UgU2hpZnQgZmVhdHVyZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBhZGRNb2R1bGF0aW9uUGhhc2VTaGlmdFByb3BlcnR5RGVzY3JpcHRvcihPYmplY3Qgb2JqZWN0KSB7CisJCWl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzLmFkZAorCQkJKGNyZWF0ZUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IKKwkJCQkoKChDb21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5KWFkYXB0ZXJGYWN0b3J5KS5nZXRSb290QWRhcHRlckZhY3RvcnkoKSwKKwkJCQkgZ2V0UmVzb3VyY2VMb2NhdG9yKCksCisJCQkJIGdldFN0cmluZygiX1VJX0dhdXNzaWFuRm9yY2luZ0Rpc2Vhc2VNb2RlbF9tb2R1bGF0aW9uUGhhc2VTaGlmdF9mZWF0dXJlIiksIC8vJE5PTi1OTFMtMSQKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfUHJvcGVydHlEZXNjcmlwdG9yX2Rlc2NyaXB0aW9uIiwgIl9VSV9HYXVzc2lhbkZvcmNpbmdEaXNlYXNlTW9kZWxfbW9kdWxhdGlvblBoYXNlU2hpZnRfZmVhdHVyZSIsICJfVUlfR2F1c3NpYW5Gb3JjaW5nRGlzZWFzZU1vZGVsX3R5cGUiKSwgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkIC8vJE5PTi1OTFMtMyQKKwkJCQkgRm9yY2luZ1BhY2thZ2UuTGl0ZXJhbHMuR0FVU1NJQU5fRk9SQ0lOR19ESVNFQVNFX01PREVMX19NT0RVTEFUSU9OX1BIQVNFX1NISUZULAorCQkJCSB0cnVlLAorCQkJCSBmYWxzZSwKKwkJCQkgZmFsc2UsCisJCQkJIEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IuUkVBTF9WQUxVRV9JTUFHRSwKKwkJCQkgbnVsbCwKKwkJCQkgbnVsbCkpOworCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyBhIHByb3BlcnR5IGRlc2NyaXB0b3IgZm9yIHRoZSBNb2R1bGF0aW9uIEZsb29yIGZlYXR1cmUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgYWRkTW9kdWxhdGlvbkZsb29yUHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdCBvYmplY3QpIHsKKwkJaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMuYWRkCisJCQkoY3JlYXRlSXRlbVByb3BlcnR5RGVzY3JpcHRvcgorCQkJCSgoKENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnkpYWRhcHRlckZhY3RvcnkpLmdldFJvb3RBZGFwdGVyRmFjdG9yeSgpLAorCQkJCSBnZXRSZXNvdXJjZUxvY2F0b3IoKSwKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfR2F1c3NpYW5Gb3JjaW5nRGlzZWFzZU1vZGVsX21vZHVsYXRpb25GbG9vcl9mZWF0dXJlIiksIC8vJE5PTi1OTFMtMSQKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfUHJvcGVydHlEZXNjcmlwdG9yX2Rlc2NyaXB0aW9uIiwgIl9VSV9HYXVzc2lhbkZvcmNpbmdEaXNlYXNlTW9kZWxfbW9kdWxhdGlvbkZsb29yX2ZlYXR1cmUiLCAiX1VJX0dhdXNzaWFuRm9yY2luZ0Rpc2Vhc2VNb2RlbF90eXBlIiksIC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJCAvLyROT04tTkxTLTMkCisJCQkJIEZvcmNpbmdQYWNrYWdlLkxpdGVyYWxzLkdBVVNTSUFOX0ZPUkNJTkdfRElTRUFTRV9NT0RFTF9fTU9EVUxBVElPTl9GTE9PUiwKKwkJCQkgdHJ1ZSwKKwkJCQkgZmFsc2UsCisJCQkJIGZhbHNlLAorCQkJCSBJdGVtUHJvcGVydHlEZXNjcmlwdG9yLlJFQUxfVkFMVUVfSU1BR0UsCisJCQkJIG51bGwsCisJCQkJIG51bGwpKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgR2F1c3NpYW5Gb3JjaW5nRGlzZWFzZU1vZGVsLmdpZi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgT2JqZWN0IGdldEltYWdlKE9iamVjdCBvYmplY3QpIHsKKwkJcmV0dXJuIG92ZXJsYXlJbWFnZShvYmplY3QsIGdldFJlc291cmNlTG9jYXRvcigpLmdldEltYWdlKCJmdWxsL29iajE2L0dhdXNzaWFuRm9yY2luZ0Rpc2Vhc2VNb2RlbCIpKTsgLy8kTk9OLU5MUy0xJAorCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyB0aGUgbGFiZWwgdGV4dCBmb3IgdGhlIGFkYXB0ZWQgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBTdHJpbmcgZ2V0VGV4dChPYmplY3Qgb2JqZWN0KSB7CisJCXJldHVybiBzdXBlci5nZXRUZXh0KG9iamVjdCk7CisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIHRoZSBsYWJlbCB0ZXh0IGZvciB0aGUgYWRhcHRlZCBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgU3RyaW5nIGdldFRleHRHZW4oT2JqZWN0IG9iamVjdCkgeworCQlTdHJpbmcgbGFiZWwgPSAoKEdhdXNzaWFuRm9yY2luZ0Rpc2Vhc2VNb2RlbClvYmplY3QpLmdldERpc2Vhc2VOYW1lKCk7CisJCXJldHVybiBsYWJlbCA9PSBudWxsIHx8IGxhYmVsLmxlbmd0aCgpID09IDAgPworCQkJZ2V0U3RyaW5nKCJfVUlfR2F1c3NpYW5Gb3JjaW5nRGlzZWFzZU1vZGVsX3R5cGUiKSA6IC8vJE5PTi1OTFMtMSQKKwkJCWdldFN0cmluZygiX1VJX0dhdXNzaWFuRm9yY2luZ0Rpc2Vhc2VNb2RlbF90eXBlIikgKyAiICIgKyBsYWJlbDsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCisJfQorCQorCS8qKgorCSAqIFRoaXMgaGFuZGxlcyBtb2RlbCBub3RpZmljYXRpb25zIGJ5IGNhbGxpbmcge0BsaW5rICN1cGRhdGVDaGlsZHJlbn0gdG8gdXBkYXRlIGFueSBjYWNoZWQKKwkgKiBjaGlsZHJlbiBhbmQgYnkgY3JlYXRpbmcgYSB2aWV3ZXIgbm90aWZpY2F0aW9uLCB3aGljaCBpdCBwYXNzZXMgdG8ge0BsaW5rICNmaXJlTm90aWZ5Q2hhbmdlZH0uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgbm90aWZ5Q2hhbmdlZChOb3RpZmljYXRpb24gbm90aWZpY2F0aW9uKSB7CisJCXVwZGF0ZUNoaWxkcmVuKG5vdGlmaWNhdGlvbik7CisKKwkJc3dpdGNoIChub3RpZmljYXRpb24uZ2V0RmVhdHVyZUlEKEdhdXNzaWFuRm9yY2luZ0Rpc2Vhc2VNb2RlbC5jbGFzcykpIHsKKwkJCWNhc2UgRm9yY2luZ1BhY2thZ2UuR0FVU1NJQU5fRk9SQ0lOR19ESVNFQVNFX01PREVMX19TSUdNQTI6CisJCQljYXNlIEZvcmNpbmdQYWNrYWdlLkdBVVNTSUFOX0ZPUkNJTkdfRElTRUFTRV9NT0RFTF9fTU9EVUxBVElPTl9QRVJJT0Q6CisJCQljYXNlIEZvcmNpbmdQYWNrYWdlLkdBVVNTSUFOX0ZPUkNJTkdfRElTRUFTRV9NT0RFTF9fTU9EVUxBVElPTl9QSEFTRV9TSElGVDoKKwkJCWNhc2UgRm9yY2luZ1BhY2thZ2UuR0FVU1NJQU5fRk9SQ0lOR19ESVNFQVNFX01PREVMX19NT0RVTEFUSU9OX0ZMT09SOgorCQkJCWZpcmVOb3RpZnlDaGFuZ2VkKG5ldyBWaWV3ZXJOb3RpZmljYXRpb24obm90aWZpY2F0aW9uLCBub3RpZmljYXRpb24uZ2V0Tm90aWZpZXIoKSwgZmFsc2UsIHRydWUpKTsKKwkJCQlyZXR1cm47CisJCX0KKwkJc3VwZXIubm90aWZ5Q2hhbmdlZChub3RpZmljYXRpb24pOworCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmVkaXQuY29tbWFuZC5Db21tYW5kUGFyYW1ldGVyfXMgZGVzY3JpYmluZyB0aGUgY2hpbGRyZW4KKwkgKiB0aGF0IGNhbiBiZSBjcmVhdGVkIHVuZGVyIHRoaXMgb2JqZWN0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIGNvbGxlY3ROZXdDaGlsZERlc2NyaXB0b3JzKENvbGxlY3Rpb248T2JqZWN0PiBuZXdDaGlsZERlc2NyaXB0b3JzLCBPYmplY3Qgb2JqZWN0KSB7CisJCXN1cGVyLmNvbGxlY3ROZXdDaGlsZERlc2NyaXB0b3JzKG5ld0NoaWxkRGVzY3JpcHRvcnMsIG9iamVjdCk7CisJfQorCisJLyoqCisJICogUmV0dXJuIHRoZSByZXNvdXJjZSBsb2NhdG9yIGZvciB0aGlzIGl0ZW0gcHJvdmlkZXIncyByZXNvdXJjZXMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIFJlc291cmNlTG9jYXRvciBnZXRSZXNvdXJjZUxvY2F0b3IoKSB7CisJCXJldHVybiBGb3JjaW5nRWRpdFBsdWdpbi5JTlNUQU5DRTsKKwl9CisKK30KZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmZvcmNpbmcvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9mb3JjaW5nL3V0aWwvRm9yY2luZ0FkYXB0ZXJGYWN0b3J5LmphdmEgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5mb3JjaW5nL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvZm9yY2luZy91dGlsL0ZvcmNpbmdBZGFwdGVyRmFjdG9yeS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ0OGIxMDEKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5mb3JjaW5nL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvZm9yY2luZy91dGlsL0ZvcmNpbmdBZGFwdGVyRmFjdG9yeS5qYXZhCkBAIC0wLDAgKzEsNDUwIEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5mb3JjaW5nLnV0aWw7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDcsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuQWRhcHRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmllcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5pbXBsLkFkYXB0ZXJGYWN0b3J5SW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLklkZW50aWZpYWJsZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLlNhbml0eUNoZWNrZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLkRlY29yYXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuSW50ZWdyYXRpb25EZWNvcmF0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLk5vZGVEZWNvcmF0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLk1vZGlmaWFibGU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmZvcmNpbmcuKjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZm9yY2luZy5Gb3JjaW5nRGlzZWFzZU1vZGVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5mb3JjaW5nLkZvcmNpbmdQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5mb3JjaW5nLkdhdXNzaWFuMkZvcmNpbmdEaXNlYXNlTW9kZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmZvcmNpbmcuR2F1c3NpYW4zRm9yY2luZ0Rpc2Vhc2VNb2RlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZm9yY2luZy5HYXVzc2lhbkZvcmNpbmdEaXNlYXNlTW9kZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLkRpc2Vhc2VNb2RlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU0k7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlNJUjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmREaXNlYXNlTW9kZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkU3RvY2hhc3RpY0Rpc2Vhc2VNb2RlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RvY2hhc3RpY0Rpc2Vhc2VNb2RlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RvY2hhc3RpY1NJUkRpc2Vhc2VNb2RlbDsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogVGhlIDxiPkFkYXB0ZXIgRmFjdG9yeTwvYj4gZm9yIHRoZSBtb2RlbC4KKyAqIEl0IHByb3ZpZGVzIGFuIGFkYXB0ZXIgPGNvZGU+Y3JlYXRlWFhYPC9jb2RlPiBtZXRob2QgZm9yIGVhY2ggY2xhc3Mgb2YgdGhlIG1vZGVsLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5mb3JjaW5nLkZvcmNpbmdQYWNrYWdlCisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBGb3JjaW5nQWRhcHRlckZhY3RvcnkgZXh0ZW5kcyBBZGFwdGVyRmFjdG9yeUltcGwgeworCS8qKgorCSAqIFRoZSBjYWNoZWQgbW9kZWwgcGFja2FnZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgc3RhdGljIEZvcmNpbmdQYWNrYWdlIG1vZGVsUGFja2FnZTsKKworCS8qKgorCSAqIENyZWF0ZXMgYW4gaW5zdGFuY2Ugb2YgdGhlIGFkYXB0ZXIgZmFjdG9yeS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRm9yY2luZ0FkYXB0ZXJGYWN0b3J5KCkgeworCQlpZiAobW9kZWxQYWNrYWdlID09IG51bGwpIHsKKwkJCW1vZGVsUGFja2FnZSA9IEZvcmNpbmdQYWNrYWdlLmVJTlNUQU5DRTsKKwkJfQorCX0KKworCS8qKgorCSAqIFJldHVybnMgd2hldGhlciB0aGlzIGZhY3RvcnkgaXMgYXBwbGljYWJsZSBmb3IgdGhlIHR5cGUgb2YgdGhlIG9iamVjdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyA8Y29kZT50cnVlPC9jb2RlPiBpZiB0aGUgb2JqZWN0IGlzIGVpdGhlciB0aGUgbW9kZWwncyBwYWNrYWdlIG9yIGlzIGFuIGluc3RhbmNlIG9iamVjdCBvZiB0aGUgbW9kZWwuCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB3aGV0aGVyIHRoaXMgZmFjdG9yeSBpcyBhcHBsaWNhYmxlIGZvciB0aGUgdHlwZSBvZiB0aGUgb2JqZWN0LgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgYm9vbGVhbiBpc0ZhY3RvcnlGb3JUeXBlKE9iamVjdCBvYmplY3QpIHsKKwkJaWYgKG9iamVjdCA9PSBtb2RlbFBhY2thZ2UpIHsKKwkJCXJldHVybiB0cnVlOworCQl9CisJCWlmIChvYmplY3QgaW5zdGFuY2VvZiBFT2JqZWN0KSB7CisJCQlyZXR1cm4gKChFT2JqZWN0KW9iamVjdCkuZUNsYXNzKCkuZ2V0RVBhY2thZ2UoKSA9PSBtb2RlbFBhY2thZ2U7CisJCX0KKwkJcmV0dXJuIGZhbHNlOworCX0KKworCS8qKgorCSAqIFRoZSBzd2l0Y2ggdGhhdCBkZWxlZ2F0ZXMgdG8gdGhlIDxjb2RlPmNyZWF0ZVhYWDwvY29kZT4gbWV0aG9kcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgRm9yY2luZ1N3aXRjaDxBZGFwdGVyPiBtb2RlbFN3aXRjaCA9CisJCW5ldyBGb3JjaW5nU3dpdGNoPEFkYXB0ZXI+KCkgeworCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgQWRhcHRlciBjYXNlRm9yY2luZ0Rpc2Vhc2VNb2RlbChGb3JjaW5nRGlzZWFzZU1vZGVsIG9iamVjdCkgeworCQkJCXJldHVybiBjcmVhdGVGb3JjaW5nRGlzZWFzZU1vZGVsQWRhcHRlcigpOworCQkJfQorCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgQWRhcHRlciBjYXNlR2F1c3NpYW5Gb3JjaW5nRGlzZWFzZU1vZGVsKEdhdXNzaWFuRm9yY2luZ0Rpc2Vhc2VNb2RlbCBvYmplY3QpIHsKKwkJCQlyZXR1cm4gY3JlYXRlR2F1c3NpYW5Gb3JjaW5nRGlzZWFzZU1vZGVsQWRhcHRlcigpOworCQkJfQorCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgQWRhcHRlciBjYXNlR2F1c3NpYW4yRm9yY2luZ0Rpc2Vhc2VNb2RlbChHYXVzc2lhbjJGb3JjaW5nRGlzZWFzZU1vZGVsIG9iamVjdCkgeworCQkJCXJldHVybiBjcmVhdGVHYXVzc2lhbjJGb3JjaW5nRGlzZWFzZU1vZGVsQWRhcHRlcigpOworCQkJfQorCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgQWRhcHRlciBjYXNlR2F1c3NpYW4zRm9yY2luZ0Rpc2Vhc2VNb2RlbChHYXVzc2lhbjNGb3JjaW5nRGlzZWFzZU1vZGVsIG9iamVjdCkgeworCQkJCXJldHVybiBjcmVhdGVHYXVzc2lhbjNGb3JjaW5nRGlzZWFzZU1vZGVsQWRhcHRlcigpOworCQkJfQorCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgPFQ+IEFkYXB0ZXIgY2FzZUNvbXBhcmFibGUoQ29tcGFyYWJsZTxUPiBvYmplY3QpIHsKKwkJCQlyZXR1cm4gY3JlYXRlQ29tcGFyYWJsZUFkYXB0ZXIoKTsKKwkJCX0KKwkJCUBPdmVycmlkZQorCQkJcHVibGljIEFkYXB0ZXIgY2FzZVNhbml0eUNoZWNrZXIoU2FuaXR5Q2hlY2tlciBvYmplY3QpIHsKKwkJCQlyZXR1cm4gY3JlYXRlU2FuaXR5Q2hlY2tlckFkYXB0ZXIoKTsKKwkJCX0KKwkJCUBPdmVycmlkZQorCQkJcHVibGljIEFkYXB0ZXIgY2FzZUlkZW50aWZpYWJsZShJZGVudGlmaWFibGUgb2JqZWN0KSB7CisJCQkJcmV0dXJuIGNyZWF0ZUlkZW50aWZpYWJsZUFkYXB0ZXIoKTsKKwkJCX0KKwkJCUBPdmVycmlkZQorCQkJcHVibGljIEFkYXB0ZXIgY2FzZURlY29yYXRvcihEZWNvcmF0b3Igb2JqZWN0KSB7CisJCQkJcmV0dXJuIGNyZWF0ZURlY29yYXRvckFkYXB0ZXIoKTsKKwkJCX0KKwkJCUBPdmVycmlkZQorCQkJcHVibGljIEFkYXB0ZXIgY2FzZU5vZGVEZWNvcmF0b3IoTm9kZURlY29yYXRvciBvYmplY3QpIHsKKwkJCQlyZXR1cm4gY3JlYXRlTm9kZURlY29yYXRvckFkYXB0ZXIoKTsKKwkJCX0KKwkJCUBPdmVycmlkZQorCQkJcHVibGljIEFkYXB0ZXIgY2FzZUludGVncmF0aW9uRGVjb3JhdG9yKEludGVncmF0aW9uRGVjb3JhdG9yIG9iamVjdCkgeworCQkJCXJldHVybiBjcmVhdGVJbnRlZ3JhdGlvbkRlY29yYXRvckFkYXB0ZXIoKTsKKwkJCX0KKwkJCUBPdmVycmlkZQorCQkJcHVibGljIEFkYXB0ZXIgY2FzZU1vZGlmaWFibGUoTW9kaWZpYWJsZSBvYmplY3QpIHsKKwkJCQlyZXR1cm4gY3JlYXRlTW9kaWZpYWJsZUFkYXB0ZXIoKTsKKwkJCX0KKwkJCUBPdmVycmlkZQorCQkJcHVibGljIEFkYXB0ZXIgY2FzZURpc2Vhc2VNb2RlbChEaXNlYXNlTW9kZWwgb2JqZWN0KSB7CisJCQkJcmV0dXJuIGNyZWF0ZURpc2Vhc2VNb2RlbEFkYXB0ZXIoKTsKKwkJCX0KKwkJCUBPdmVycmlkZQorCQkJcHVibGljIEFkYXB0ZXIgY2FzZVN0YW5kYXJkRGlzZWFzZU1vZGVsKFN0YW5kYXJkRGlzZWFzZU1vZGVsIG9iamVjdCkgeworCQkJCXJldHVybiBjcmVhdGVTdGFuZGFyZERpc2Vhc2VNb2RlbEFkYXB0ZXIoKTsKKwkJCX0KKwkJCUBPdmVycmlkZQorCQkJcHVibGljIEFkYXB0ZXIgY2FzZVNJKFNJIG9iamVjdCkgeworCQkJCXJldHVybiBjcmVhdGVTSUFkYXB0ZXIoKTsKKwkJCX0KKwkJCUBPdmVycmlkZQorCQkJcHVibGljIEFkYXB0ZXIgY2FzZVNJUihTSVIgb2JqZWN0KSB7CisJCQkJcmV0dXJuIGNyZWF0ZVNJUkFkYXB0ZXIoKTsKKwkJCX0KKwkJCUBPdmVycmlkZQorCQkJcHVibGljIEFkYXB0ZXIgY2FzZVN0b2NoYXN0aWNEaXNlYXNlTW9kZWwoU3RvY2hhc3RpY0Rpc2Vhc2VNb2RlbCBvYmplY3QpIHsKKwkJCQlyZXR1cm4gY3JlYXRlU3RvY2hhc3RpY0Rpc2Vhc2VNb2RlbEFkYXB0ZXIoKTsKKwkJCX0KKwkJCUBPdmVycmlkZQorCQkJcHVibGljIEFkYXB0ZXIgY2FzZVN0YW5kYXJkU3RvY2hhc3RpY0Rpc2Vhc2VNb2RlbChTdGFuZGFyZFN0b2NoYXN0aWNEaXNlYXNlTW9kZWwgb2JqZWN0KSB7CisJCQkJcmV0dXJuIGNyZWF0ZVN0YW5kYXJkU3RvY2hhc3RpY0Rpc2Vhc2VNb2RlbEFkYXB0ZXIoKTsKKwkJCX0KKwkJCUBPdmVycmlkZQorCQkJcHVibGljIEFkYXB0ZXIgY2FzZVN0b2NoYXN0aWNTSVJEaXNlYXNlTW9kZWwoU3RvY2hhc3RpY1NJUkRpc2Vhc2VNb2RlbCBvYmplY3QpIHsKKwkJCQlyZXR1cm4gY3JlYXRlU3RvY2hhc3RpY1NJUkRpc2Vhc2VNb2RlbEFkYXB0ZXIoKTsKKwkJCX0KKwkJCUBPdmVycmlkZQorCQkJcHVibGljIEFkYXB0ZXIgZGVmYXVsdENhc2UoRU9iamVjdCBvYmplY3QpIHsKKwkJCQlyZXR1cm4gY3JlYXRlRU9iamVjdEFkYXB0ZXIoKTsKKwkJCX0KKwkJfTsKKworCS8qKgorCSAqIENyZWF0ZXMgYW4gYWRhcHRlciBmb3IgdGhlIDxjb2RlPnRhcmdldDwvY29kZT4uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gdGFyZ2V0IHRoZSBvYmplY3QgdG8gYWRhcHQuCisJICogQHJldHVybiB0aGUgYWRhcHRlciBmb3IgdGhlIDxjb2RlPnRhcmdldDwvY29kZT4uCisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZUFkYXB0ZXIoTm90aWZpZXIgdGFyZ2V0KSB7CisJCXJldHVybiBtb2RlbFN3aXRjaC5kb1N3aXRjaCgoRU9iamVjdCl0YXJnZXQpOworCX0KKworCisJLyoqCisJICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZm9yY2luZy5Gb3JjaW5nRGlzZWFzZU1vZGVsIDxlbT5EaXNlYXNlIE1vZGVsPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsKKwkgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5mb3JjaW5nLkZvcmNpbmdEaXNlYXNlTW9kZWwKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlRm9yY2luZ0Rpc2Vhc2VNb2RlbEFkYXB0ZXIoKSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmZvcmNpbmcuR2F1c3NpYW5Gb3JjaW5nRGlzZWFzZU1vZGVsIDxlbT5HYXVzc2lhbiBGb3JjaW5nIERpc2Vhc2UgTW9kZWw8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOworCSAqIGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZSB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5LgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmZvcmNpbmcuR2F1c3NpYW5Gb3JjaW5nRGlzZWFzZU1vZGVsCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZUdhdXNzaWFuRm9yY2luZ0Rpc2Vhc2VNb2RlbEFkYXB0ZXIoKSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmZvcmNpbmcuR2F1c3NpYW4yRm9yY2luZ0Rpc2Vhc2VNb2RlbCA8ZW0+R2F1c3NpYW4yIEZvcmNpbmcgRGlzZWFzZSBNb2RlbDwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7CisJICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZm9yY2luZy5HYXVzc2lhbjJGb3JjaW5nRGlzZWFzZU1vZGVsCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZUdhdXNzaWFuMkZvcmNpbmdEaXNlYXNlTW9kZWxBZGFwdGVyKCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5mb3JjaW5nLkdhdXNzaWFuM0ZvcmNpbmdEaXNlYXNlTW9kZWwgPGVtPkdhdXNzaWFuMyBGb3JjaW5nIERpc2Vhc2UgTW9kZWw8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOworCSAqIGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZSB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5LgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmZvcmNpbmcuR2F1c3NpYW4zRm9yY2luZ0Rpc2Vhc2VNb2RlbAorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVHYXVzc2lhbjNGb3JjaW5nRGlzZWFzZU1vZGVsQWRhcHRlcigpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBqYXZhLmxhbmcuQ29tcGFyYWJsZSA8ZW0+Q29tcGFyYWJsZTwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7CisJICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCisJICogQHNlZSBqYXZhLmxhbmcuQ29tcGFyYWJsZQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVDb21wYXJhYmxlQWRhcHRlcigpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLklkZW50aWZpYWJsZSA8ZW0+SWRlbnRpZmlhYmxlPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsKKwkgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uSWRlbnRpZmlhYmxlCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZUlkZW50aWZpYWJsZUFkYXB0ZXIoKSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLkRlY29yYXRvciA8ZW0+RGVjb3JhdG9yPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsKKwkgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5EZWNvcmF0b3IKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlRGVjb3JhdG9yQWRhcHRlcigpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuTm9kZURlY29yYXRvciA8ZW0+Tm9kZSBEZWNvcmF0b3I8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOworCSAqIGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZSB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5LgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLk5vZGVEZWNvcmF0b3IKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlTm9kZURlY29yYXRvckFkYXB0ZXIoKSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5TYW5pdHlDaGVja2VyIDxlbT5TYW5pdHkgQ2hlY2tlcjwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7CisJICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLlNhbml0eUNoZWNrZXIKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlU2FuaXR5Q2hlY2tlckFkYXB0ZXIoKSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLk1vZGlmaWFibGUgPGVtPk1vZGlmaWFibGU8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOworCSAqIGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZSB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5LgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLk1vZGlmaWFibGUKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlTW9kaWZpYWJsZUFkYXB0ZXIoKSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLkRpc2Vhc2VNb2RlbCA8ZW0+RGlzZWFzZSBNb2RlbDwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7CisJICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuRGlzZWFzZU1vZGVsCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZURpc2Vhc2VNb2RlbEFkYXB0ZXIoKSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLkludGVncmF0aW9uRGVjb3JhdG9yIDxlbT5JbnRlZ3JhdGlvbiBEZWNvcmF0b3I8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOworCSAqIGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZSB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5LgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLkludGVncmF0aW9uRGVjb3JhdG9yCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZUludGVncmF0aW9uRGVjb3JhdG9yQWRhcHRlcigpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmREaXNlYXNlTW9kZWwgPGVtPkRpc2Vhc2UgTW9kZWw8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOworCSAqIGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZSB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5LgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkRGlzZWFzZU1vZGVsCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZVN0YW5kYXJkRGlzZWFzZU1vZGVsQWRhcHRlcigpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU0kgPGVtPlNJPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsKKwkgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TSQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVTSUFkYXB0ZXIoKSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlNJUiA8ZW0+U0lSPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsKKwkgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TSVIKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlU0lSQWRhcHRlcigpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RvY2hhc3RpY0Rpc2Vhc2VNb2RlbCA8ZW0+U3RvY2hhc3RpYyBEaXNlYXNlIE1vZGVsPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsKKwkgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdG9jaGFzdGljRGlzZWFzZU1vZGVsCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZVN0b2NoYXN0aWNEaXNlYXNlTW9kZWxBZGFwdGVyKCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZFN0b2NoYXN0aWNEaXNlYXNlTW9kZWwgPGVtPlN0b2NoYXN0aWMgRGlzZWFzZSBNb2RlbDwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7CisJICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmRTdG9jaGFzdGljRGlzZWFzZU1vZGVsCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZVN0YW5kYXJkU3RvY2hhc3RpY0Rpc2Vhc2VNb2RlbEFkYXB0ZXIoKSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlN0b2NoYXN0aWNTSVJEaXNlYXNlTW9kZWwgPGVtPlN0b2NoYXN0aWMgU0lSIERpc2Vhc2UgTW9kZWw8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOworCSAqIGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZSB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5LgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlN0b2NoYXN0aWNTSVJEaXNlYXNlTW9kZWwKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlU3RvY2hhc3RpY1NJUkRpc2Vhc2VNb2RlbEFkYXB0ZXIoKSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgdGhlIGRlZmF1bHQgY2FzZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwuCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZUVPYmplY3RBZGFwdGVyKCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKK30gLy9FeGFtcGxlQWRhcHRlckZhY3RvcnkKZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmZvcmNpbmcvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9mb3JjaW5nL3V0aWwvRm9yY2luZ1N3aXRjaC5qYXZhIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZm9yY2luZy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL2ZvcmNpbmcvdXRpbC9Gb3JjaW5nU3dpdGNoLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDgyNjk0NAotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmZvcmNpbmcvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9mb3JjaW5nL3V0aWwvRm9yY2luZ1N3aXRjaC5qYXZhCkBAIC0wLDAgKzEsNDg1IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5mb3JjaW5nLnV0aWw7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uSWRlbnRpZmlhYmxlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uU2FuaXR5Q2hlY2tlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuRGVjb3JhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5JbnRlZ3JhdGlvbkRlY29yYXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuTm9kZURlY29yYXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuTW9kaWZpYWJsZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZm9yY2luZy4qOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5mb3JjaW5nLkZvcmNpbmdEaXNlYXNlTW9kZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmZvcmNpbmcuRm9yY2luZ1BhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmZvcmNpbmcuR2F1c3NpYW4yRm9yY2luZ0Rpc2Vhc2VNb2RlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZm9yY2luZy5HYXVzc2lhbjNGb3JjaW5nRGlzZWFzZU1vZGVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5mb3JjaW5nLkdhdXNzaWFuRm9yY2luZ0Rpc2Vhc2VNb2RlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuRGlzZWFzZU1vZGVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TSTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU0lSOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZERpc2Vhc2VNb2RlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmRTdG9jaGFzdGljRGlzZWFzZU1vZGVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdG9jaGFzdGljRGlzZWFzZU1vZGVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdG9jaGFzdGljU0lSRGlzZWFzZU1vZGVsOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiBUaGUgPGI+U3dpdGNoPC9iPiBmb3IgdGhlIG1vZGVsJ3MgaW5oZXJpdGFuY2UgaGllcmFyY2h5LgorICogSXQgc3VwcG9ydHMgdGhlIGNhbGwge0BsaW5rICNkb1N3aXRjaChFT2JqZWN0KSBkb1N3aXRjaChvYmplY3QpfQorICogdG8gaW52b2tlIHRoZSA8Y29kZT5jYXNlWFhYPC9jb2RlPiBtZXRob2QgZm9yIGVhY2ggY2xhc3Mgb2YgdGhlIG1vZGVsLAorICogc3RhcnRpbmcgd2l0aCB0aGUgYWN0dWFsIGNsYXNzIG9mIHRoZSBvYmplY3QKKyAqIGFuZCBwcm9jZWVkaW5nIHVwIHRoZSBpbmhlcml0YW5jZSBoaWVyYXJjaHkKKyAqIHVudGlsIGEgbm9uLW51bGwgcmVzdWx0IGlzIHJldHVybmVkLAorICogd2hpY2ggaXMgdGhlIHJlc3VsdCBvZiB0aGUgc3dpdGNoLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5mb3JjaW5nLkZvcmNpbmdQYWNrYWdlCisgKiBAZ2VuZXJhdGVkCisgKi8KK0BTdXBwcmVzc1dhcm5pbmdzKCJhbGwiKQorcHVibGljIGNsYXNzIEZvcmNpbmdTd2l0Y2g8VDE+IHsKKwkvKioKKwkgKiBUaGUgY2FjaGVkIG1vZGVsIHBhY2thZ2UKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgc3RhdGljIEZvcmNpbmdQYWNrYWdlIG1vZGVsUGFja2FnZTsKKworCS8qKgorCSAqIENyZWF0ZXMgYW4gaW5zdGFuY2Ugb2YgdGhlIHN3aXRjaC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRm9yY2luZ1N3aXRjaCgpIHsKKwkJaWYgKG1vZGVsUGFja2FnZSA9PSBudWxsKSB7CisJCQltb2RlbFBhY2thZ2UgPSBGb3JjaW5nUGFja2FnZS5lSU5TVEFOQ0U7CisJCX0KKwl9CisKKwkvKioKKwkgKiBDYWxscyA8Y29kZT5jYXNlWFhYPC9jb2RlPiBmb3IgZWFjaCBjbGFzcyBvZiB0aGUgbW9kZWwgdW50aWwgb25lIHJldHVybnMgYSBub24gbnVsbCByZXN1bHQ7IGl0IHlpZWxkcyB0aGF0IHJlc3VsdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIGZpcnN0IG5vbi1udWxsIHJlc3VsdCByZXR1cm5lZCBieSBhIDxjb2RlPmNhc2VYWFg8L2NvZGU+IGNhbGwuCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBUMSBkb1N3aXRjaChFT2JqZWN0IHRoZUVPYmplY3QpIHsKKwkJcmV0dXJuIGRvU3dpdGNoKHRoZUVPYmplY3QuZUNsYXNzKCksIHRoZUVPYmplY3QpOworCX0KKworCS8qKgorCSAqIENhbGxzIDxjb2RlPmNhc2VYWFg8L2NvZGU+IGZvciBlYWNoIGNsYXNzIG9mIHRoZSBtb2RlbCB1bnRpbCBvbmUgcmV0dXJucyBhIG5vbiBudWxsIHJlc3VsdDsgaXQgeWllbGRzIHRoYXQgcmVzdWx0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgZmlyc3Qgbm9uLW51bGwgcmVzdWx0IHJldHVybmVkIGJ5IGEgPGNvZGU+Y2FzZVhYWDwvY29kZT4gY2FsbC4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIFQxIGRvU3dpdGNoKEVDbGFzcyB0aGVFQ2xhc3MsIEVPYmplY3QgdGhlRU9iamVjdCkgeworCQlpZiAodGhlRUNsYXNzLmVDb250YWluZXIoKSA9PSBtb2RlbFBhY2thZ2UpIHsKKwkJCXJldHVybiBkb1N3aXRjaCh0aGVFQ2xhc3MuZ2V0Q2xhc3NpZmllcklEKCksIHRoZUVPYmplY3QpOworCQl9CisJCWVsc2UgeworCQkJTGlzdDxFQ2xhc3M+IGVTdXBlclR5cGVzID0gdGhlRUNsYXNzLmdldEVTdXBlclR5cGVzKCk7CisJCQlyZXR1cm4KKwkJCQllU3VwZXJUeXBlcy5pc0VtcHR5KCkgPworCQkJCQlkZWZhdWx0Q2FzZSh0aGVFT2JqZWN0KSA6CisJCQkJCWRvU3dpdGNoKGVTdXBlclR5cGVzLmdldCgwKSwgdGhlRU9iamVjdCk7CisJCX0KKwl9CisKKwkvKioKKwkgKiBDYWxscyA8Y29kZT5jYXNlWFhYPC9jb2RlPiBmb3IgZWFjaCBjbGFzcyBvZiB0aGUgbW9kZWwgdW50aWwgb25lIHJldHVybnMgYSBub24gbnVsbCByZXN1bHQ7IGl0IHlpZWxkcyB0aGF0IHJlc3VsdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIGZpcnN0IG5vbi1udWxsIHJlc3VsdCByZXR1cm5lZCBieSBhIDxjb2RlPmNhc2VYWFg8L2NvZGU+IGNhbGwuCisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBUMSBkb1N3aXRjaChpbnQgY2xhc3NpZmllcklELCBFT2JqZWN0IHRoZUVPYmplY3QpIHsKKwkJc3dpdGNoIChjbGFzc2lmaWVySUQpIHsKKwkJCWNhc2UgRm9yY2luZ1BhY2thZ2UuRk9SQ0lOR19ESVNFQVNFX01PREVMOiB7CisJCQkJRm9yY2luZ0Rpc2Vhc2VNb2RlbCBmb3JjaW5nRGlzZWFzZU1vZGVsID0gKEZvcmNpbmdEaXNlYXNlTW9kZWwpdGhlRU9iamVjdDsKKwkJCQlUMSByZXN1bHQgPSBjYXNlRm9yY2luZ0Rpc2Vhc2VNb2RlbChmb3JjaW5nRGlzZWFzZU1vZGVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VTdG9jaGFzdGljU0lSRGlzZWFzZU1vZGVsKGZvcmNpbmdEaXNlYXNlTW9kZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZVNJUihmb3JjaW5nRGlzZWFzZU1vZGVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VTdGFuZGFyZFN0b2NoYXN0aWNEaXNlYXNlTW9kZWwoZm9yY2luZ0Rpc2Vhc2VNb2RlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlU0koZm9yY2luZ0Rpc2Vhc2VNb2RlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlU3RvY2hhc3RpY0Rpc2Vhc2VNb2RlbChmb3JjaW5nRGlzZWFzZU1vZGVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VTdGFuZGFyZERpc2Vhc2VNb2RlbChmb3JjaW5nRGlzZWFzZU1vZGVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VEaXNlYXNlTW9kZWwoZm9yY2luZ0Rpc2Vhc2VNb2RlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlSW50ZWdyYXRpb25EZWNvcmF0b3IoZm9yY2luZ0Rpc2Vhc2VNb2RlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlTW9kaWZpYWJsZShmb3JjaW5nRGlzZWFzZU1vZGVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VOb2RlRGVjb3JhdG9yKGZvcmNpbmdEaXNlYXNlTW9kZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZURlY29yYXRvcihmb3JjaW5nRGlzZWFzZU1vZGVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VJZGVudGlmaWFibGUoZm9yY2luZ0Rpc2Vhc2VNb2RlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlQ29tcGFyYWJsZShmb3JjaW5nRGlzZWFzZU1vZGVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VTYW5pdHlDaGVja2VyKGZvcmNpbmdEaXNlYXNlTW9kZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gZGVmYXVsdENhc2UodGhlRU9iamVjdCk7CisJCQkJcmV0dXJuIHJlc3VsdDsKKwkJCX0KKwkJCWNhc2UgRm9yY2luZ1BhY2thZ2UuR0FVU1NJQU5fRk9SQ0lOR19ESVNFQVNFX01PREVMOiB7CisJCQkJR2F1c3NpYW5Gb3JjaW5nRGlzZWFzZU1vZGVsIGdhdXNzaWFuRm9yY2luZ0Rpc2Vhc2VNb2RlbCA9IChHYXVzc2lhbkZvcmNpbmdEaXNlYXNlTW9kZWwpdGhlRU9iamVjdDsKKwkJCQlUMSByZXN1bHQgPSBjYXNlR2F1c3NpYW5Gb3JjaW5nRGlzZWFzZU1vZGVsKGdhdXNzaWFuRm9yY2luZ0Rpc2Vhc2VNb2RlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlU3RvY2hhc3RpY1NJUkRpc2Vhc2VNb2RlbChnYXVzc2lhbkZvcmNpbmdEaXNlYXNlTW9kZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZVNJUihnYXVzc2lhbkZvcmNpbmdEaXNlYXNlTW9kZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZVN0YW5kYXJkU3RvY2hhc3RpY0Rpc2Vhc2VNb2RlbChnYXVzc2lhbkZvcmNpbmdEaXNlYXNlTW9kZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZVNJKGdhdXNzaWFuRm9yY2luZ0Rpc2Vhc2VNb2RlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlU3RvY2hhc3RpY0Rpc2Vhc2VNb2RlbChnYXVzc2lhbkZvcmNpbmdEaXNlYXNlTW9kZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZVN0YW5kYXJkRGlzZWFzZU1vZGVsKGdhdXNzaWFuRm9yY2luZ0Rpc2Vhc2VNb2RlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlRGlzZWFzZU1vZGVsKGdhdXNzaWFuRm9yY2luZ0Rpc2Vhc2VNb2RlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlSW50ZWdyYXRpb25EZWNvcmF0b3IoZ2F1c3NpYW5Gb3JjaW5nRGlzZWFzZU1vZGVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VNb2RpZmlhYmxlKGdhdXNzaWFuRm9yY2luZ0Rpc2Vhc2VNb2RlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlTm9kZURlY29yYXRvcihnYXVzc2lhbkZvcmNpbmdEaXNlYXNlTW9kZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZURlY29yYXRvcihnYXVzc2lhbkZvcmNpbmdEaXNlYXNlTW9kZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZUlkZW50aWZpYWJsZShnYXVzc2lhbkZvcmNpbmdEaXNlYXNlTW9kZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZUNvbXBhcmFibGUoZ2F1c3NpYW5Gb3JjaW5nRGlzZWFzZU1vZGVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VTYW5pdHlDaGVja2VyKGdhdXNzaWFuRm9yY2luZ0Rpc2Vhc2VNb2RlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBkZWZhdWx0Q2FzZSh0aGVFT2JqZWN0KTsKKwkJCQlyZXR1cm4gcmVzdWx0OworCQkJfQorCQkJY2FzZSBGb3JjaW5nUGFja2FnZS5HQVVTU0lBTjJfRk9SQ0lOR19ESVNFQVNFX01PREVMOiB7CisJCQkJR2F1c3NpYW4yRm9yY2luZ0Rpc2Vhc2VNb2RlbCBnYXVzc2lhbjJGb3JjaW5nRGlzZWFzZU1vZGVsID0gKEdhdXNzaWFuMkZvcmNpbmdEaXNlYXNlTW9kZWwpdGhlRU9iamVjdDsKKwkJCQlUMSByZXN1bHQgPSBjYXNlR2F1c3NpYW4yRm9yY2luZ0Rpc2Vhc2VNb2RlbChnYXVzc2lhbjJGb3JjaW5nRGlzZWFzZU1vZGVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VHYXVzc2lhbkZvcmNpbmdEaXNlYXNlTW9kZWwoZ2F1c3NpYW4yRm9yY2luZ0Rpc2Vhc2VNb2RlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlU3RvY2hhc3RpY1NJUkRpc2Vhc2VNb2RlbChnYXVzc2lhbjJGb3JjaW5nRGlzZWFzZU1vZGVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VTSVIoZ2F1c3NpYW4yRm9yY2luZ0Rpc2Vhc2VNb2RlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlU3RhbmRhcmRTdG9jaGFzdGljRGlzZWFzZU1vZGVsKGdhdXNzaWFuMkZvcmNpbmdEaXNlYXNlTW9kZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZVNJKGdhdXNzaWFuMkZvcmNpbmdEaXNlYXNlTW9kZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZVN0b2NoYXN0aWNEaXNlYXNlTW9kZWwoZ2F1c3NpYW4yRm9yY2luZ0Rpc2Vhc2VNb2RlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlU3RhbmRhcmREaXNlYXNlTW9kZWwoZ2F1c3NpYW4yRm9yY2luZ0Rpc2Vhc2VNb2RlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlRGlzZWFzZU1vZGVsKGdhdXNzaWFuMkZvcmNpbmdEaXNlYXNlTW9kZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZUludGVncmF0aW9uRGVjb3JhdG9yKGdhdXNzaWFuMkZvcmNpbmdEaXNlYXNlTW9kZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZU1vZGlmaWFibGUoZ2F1c3NpYW4yRm9yY2luZ0Rpc2Vhc2VNb2RlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlTm9kZURlY29yYXRvcihnYXVzc2lhbjJGb3JjaW5nRGlzZWFzZU1vZGVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VEZWNvcmF0b3IoZ2F1c3NpYW4yRm9yY2luZ0Rpc2Vhc2VNb2RlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlSWRlbnRpZmlhYmxlKGdhdXNzaWFuMkZvcmNpbmdEaXNlYXNlTW9kZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZUNvbXBhcmFibGUoZ2F1c3NpYW4yRm9yY2luZ0Rpc2Vhc2VNb2RlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlU2FuaXR5Q2hlY2tlcihnYXVzc2lhbjJGb3JjaW5nRGlzZWFzZU1vZGVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGRlZmF1bHRDYXNlKHRoZUVPYmplY3QpOworCQkJCXJldHVybiByZXN1bHQ7CisJCQl9CisJCQljYXNlIEZvcmNpbmdQYWNrYWdlLkdBVVNTSUFOM19GT1JDSU5HX0RJU0VBU0VfTU9ERUw6IHsKKwkJCQlHYXVzc2lhbjNGb3JjaW5nRGlzZWFzZU1vZGVsIGdhdXNzaWFuM0ZvcmNpbmdEaXNlYXNlTW9kZWwgPSAoR2F1c3NpYW4zRm9yY2luZ0Rpc2Vhc2VNb2RlbCl0aGVFT2JqZWN0OworCQkJCVQxIHJlc3VsdCA9IGNhc2VHYXVzc2lhbjNGb3JjaW5nRGlzZWFzZU1vZGVsKGdhdXNzaWFuM0ZvcmNpbmdEaXNlYXNlTW9kZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZUdhdXNzaWFuMkZvcmNpbmdEaXNlYXNlTW9kZWwoZ2F1c3NpYW4zRm9yY2luZ0Rpc2Vhc2VNb2RlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlR2F1c3NpYW5Gb3JjaW5nRGlzZWFzZU1vZGVsKGdhdXNzaWFuM0ZvcmNpbmdEaXNlYXNlTW9kZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZVN0b2NoYXN0aWNTSVJEaXNlYXNlTW9kZWwoZ2F1c3NpYW4zRm9yY2luZ0Rpc2Vhc2VNb2RlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlU0lSKGdhdXNzaWFuM0ZvcmNpbmdEaXNlYXNlTW9kZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZVN0YW5kYXJkU3RvY2hhc3RpY0Rpc2Vhc2VNb2RlbChnYXVzc2lhbjNGb3JjaW5nRGlzZWFzZU1vZGVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VTSShnYXVzc2lhbjNGb3JjaW5nRGlzZWFzZU1vZGVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VTdG9jaGFzdGljRGlzZWFzZU1vZGVsKGdhdXNzaWFuM0ZvcmNpbmdEaXNlYXNlTW9kZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZVN0YW5kYXJkRGlzZWFzZU1vZGVsKGdhdXNzaWFuM0ZvcmNpbmdEaXNlYXNlTW9kZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZURpc2Vhc2VNb2RlbChnYXVzc2lhbjNGb3JjaW5nRGlzZWFzZU1vZGVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VJbnRlZ3JhdGlvbkRlY29yYXRvcihnYXVzc2lhbjNGb3JjaW5nRGlzZWFzZU1vZGVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VNb2RpZmlhYmxlKGdhdXNzaWFuM0ZvcmNpbmdEaXNlYXNlTW9kZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZU5vZGVEZWNvcmF0b3IoZ2F1c3NpYW4zRm9yY2luZ0Rpc2Vhc2VNb2RlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlRGVjb3JhdG9yKGdhdXNzaWFuM0ZvcmNpbmdEaXNlYXNlTW9kZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZUlkZW50aWZpYWJsZShnYXVzc2lhbjNGb3JjaW5nRGlzZWFzZU1vZGVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VDb21wYXJhYmxlKGdhdXNzaWFuM0ZvcmNpbmdEaXNlYXNlTW9kZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZVNhbml0eUNoZWNrZXIoZ2F1c3NpYW4zRm9yY2luZ0Rpc2Vhc2VNb2RlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBkZWZhdWx0Q2FzZSh0aGVFT2JqZWN0KTsKKwkJCQlyZXR1cm4gcmVzdWx0OworCQkJfQorCQkJZGVmYXVsdDogcmV0dXJuIGRlZmF1bHRDYXNlKHRoZUVPYmplY3QpOworCQl9CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+RGlzZWFzZSBNb2RlbDwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOworCSAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgorCSAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkRpc2Vhc2UgTW9kZWw8L2VtPicuCisJICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBUMSBjYXNlRm9yY2luZ0Rpc2Vhc2VNb2RlbChGb3JjaW5nRGlzZWFzZU1vZGVsIG9iamVjdCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5HYXVzc2lhbiBGb3JjaW5nIERpc2Vhc2UgTW9kZWw8L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsKKwkgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KKwkgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5HYXVzc2lhbiBGb3JjaW5nIERpc2Vhc2UgTW9kZWw8L2VtPicuCisJICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBUMSBjYXNlR2F1c3NpYW5Gb3JjaW5nRGlzZWFzZU1vZGVsKEdhdXNzaWFuRm9yY2luZ0Rpc2Vhc2VNb2RlbCBvYmplY3QpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+R2F1c3NpYW4yIEZvcmNpbmcgRGlzZWFzZSBNb2RlbDwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOworCSAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgorCSAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkdhdXNzaWFuMiBGb3JjaW5nIERpc2Vhc2UgTW9kZWw8L2VtPicuCisJICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBUMSBjYXNlR2F1c3NpYW4yRm9yY2luZ0Rpc2Vhc2VNb2RlbChHYXVzc2lhbjJGb3JjaW5nRGlzZWFzZU1vZGVsIG9iamVjdCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5HYXVzc2lhbjMgRm9yY2luZyBEaXNlYXNlIE1vZGVsPC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7CisJICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCisJICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+R2F1c3NpYW4zIEZvcmNpbmcgRGlzZWFzZSBNb2RlbDwvZW0+Jy4KKwkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFQxIGNhc2VHYXVzc2lhbjNGb3JjaW5nRGlzZWFzZU1vZGVsKEdhdXNzaWFuM0ZvcmNpbmdEaXNlYXNlTW9kZWwgb2JqZWN0KSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkNvbXBhcmFibGU8L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsKKwkgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KKwkgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5Db21wYXJhYmxlPC9lbT4nLgorCSAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgPFQ+IFQxIGNhc2VDb21wYXJhYmxlKENvbXBhcmFibGU8VD4gb2JqZWN0KSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPklkZW50aWZpYWJsZTwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOworCSAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgorCSAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPklkZW50aWZpYWJsZTwvZW0+Jy4KKwkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFQxIGNhc2VJZGVudGlmaWFibGUoSWRlbnRpZmlhYmxlIG9iamVjdCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5EZWNvcmF0b3I8L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsKKwkgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KKwkgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5EZWNvcmF0b3I8L2VtPicuCisJICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBUMSBjYXNlRGVjb3JhdG9yKERlY29yYXRvciBvYmplY3QpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+Tm9kZSBEZWNvcmF0b3I8L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsKKwkgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KKwkgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5Ob2RlIERlY29yYXRvcjwvZW0+Jy4KKwkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFQxIGNhc2VOb2RlRGVjb3JhdG9yKE5vZGVEZWNvcmF0b3Igb2JqZWN0KSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPlNhbml0eSBDaGVja2VyPC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7CisJICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCisJICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+U2FuaXR5IENoZWNrZXI8L2VtPicuCisJICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBUMSBjYXNlU2FuaXR5Q2hlY2tlcihTYW5pdHlDaGVja2VyIG9iamVjdCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5Nb2RpZmlhYmxlPC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7CisJICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCisJICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+TW9kaWZpYWJsZTwvZW0+Jy4KKwkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFQxIGNhc2VNb2RpZmlhYmxlKE1vZGlmaWFibGUgb2JqZWN0KSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkRpc2Vhc2UgTW9kZWw8L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsKKwkgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KKwkgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5EaXNlYXNlIE1vZGVsPC9lbT4nLgorCSAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVDEgY2FzZURpc2Vhc2VNb2RlbChEaXNlYXNlTW9kZWwgb2JqZWN0KSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkludGVncmF0aW9uIERlY29yYXRvcjwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOworCSAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgorCSAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkludGVncmF0aW9uIERlY29yYXRvcjwvZW0+Jy4KKwkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFQxIGNhc2VJbnRlZ3JhdGlvbkRlY29yYXRvcihJbnRlZ3JhdGlvbkRlY29yYXRvciBvYmplY3QpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+RGlzZWFzZSBNb2RlbDwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOworCSAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgorCSAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkRpc2Vhc2UgTW9kZWw8L2VtPicuCisJICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBUMSBjYXNlU3RhbmRhcmREaXNlYXNlTW9kZWwoU3RhbmRhcmREaXNlYXNlTW9kZWwgb2JqZWN0KSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPlNJPC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7CisJICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCisJICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+U0k8L2VtPicuCisJICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBUMSBjYXNlU0koU0kgb2JqZWN0KSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPlNJUjwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOworCSAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgorCSAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPlNJUjwvZW0+Jy4KKwkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFQxIGNhc2VTSVIoU0lSIG9iamVjdCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5TdG9jaGFzdGljIERpc2Vhc2UgTW9kZWw8L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsKKwkgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KKwkgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5TdG9jaGFzdGljIERpc2Vhc2UgTW9kZWw8L2VtPicuCisJICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBUMSBjYXNlU3RvY2hhc3RpY0Rpc2Vhc2VNb2RlbChTdG9jaGFzdGljRGlzZWFzZU1vZGVsIG9iamVjdCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5TdG9jaGFzdGljIERpc2Vhc2UgTW9kZWw8L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsKKwkgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KKwkgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5TdG9jaGFzdGljIERpc2Vhc2UgTW9kZWw8L2VtPicuCisJICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBUMSBjYXNlU3RhbmRhcmRTdG9jaGFzdGljRGlzZWFzZU1vZGVsKFN0YW5kYXJkU3RvY2hhc3RpY0Rpc2Vhc2VNb2RlbCBvYmplY3QpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+U3RvY2hhc3RpYyBTSVIgRGlzZWFzZSBNb2RlbDwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOworCSAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgorCSAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPlN0b2NoYXN0aWMgU0lSIERpc2Vhc2UgTW9kZWw8L2VtPicuCisJICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBUMSBjYXNlU3RvY2hhc3RpY1NJUkRpc2Vhc2VNb2RlbChTdG9jaGFzdGljU0lSRGlzZWFzZU1vZGVsIG9iamVjdCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5FT2JqZWN0PC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7CisJICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2gsIGJ1dCB0aGlzIGlzIHRoZSBsYXN0IGNhc2UgYW55d2F5LgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgorCSAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkVPYmplY3Q8L2VtPicuCisJICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBUMSBkZWZhdWx0Q2FzZShFT2JqZWN0IG9iamVjdCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKK30gLy9FeGFtcGxlU3dpdGNoCmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5nbG9iYWxpbmZsdWVuemFtb2RlbC8uY2xhc3NwYXRoIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZ2xvYmFsaW5mbHVlbnphbW9kZWwvLmNsYXNzcGF0aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NWYwMjRlCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZ2xvYmFsaW5mbHVlbnphbW9kZWwvLmNsYXNzcGF0aApAQCAtMCwwICsxLDcgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+DQorPGNsYXNzcGF0aD4NCisJPGNsYXNzcGF0aGVudHJ5IGtpbmQ9InNyYyIgcGF0aD0ic3JjIi8+DQorCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJjb24iIHBhdGg9Im9yZy5lY2xpcHNlLmpkdC5sYXVuY2hpbmcuSlJFX0NPTlRBSU5FUi9vcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwuZGVidWcudWkubGF1bmNoZXIuU3RhbmRhcmRWTVR5cGUvSjJTRS0xLjUiLz4NCisJPGNsYXNzcGF0aGVudHJ5IGtpbmQ9ImNvbiIgcGF0aD0ib3JnLmVjbGlwc2UucGRlLmNvcmUucmVxdWlyZWRQbHVnaW5zIi8+DQorCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJvdXRwdXQiIHBhdGg9ImJpbiIvPg0KKzwvY2xhc3NwYXRoPg0KZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmdsb2JhbGluZmx1ZW56YW1vZGVsLy5wcm9qZWN0IGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZ2xvYmFsaW5mbHVlbnphbW9kZWwvLnByb2plY3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzhmNjQzMQotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmdsb2JhbGluZmx1ZW56YW1vZGVsLy5wcm9qZWN0CkBAIC0wLDAgKzEsMjggQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+DQorPHByb2plY3REZXNjcmlwdGlvbj4NCisJPG5hbWU+b3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmdsb2JhbGluZmx1ZW56YW1vZGVsPC9uYW1lPg0KKwk8Y29tbWVudD48L2NvbW1lbnQ+DQorCTxwcm9qZWN0cz4NCisJPC9wcm9qZWN0cz4NCisJPGJ1aWxkU3BlYz4NCisJCTxidWlsZENvbW1hbmQ+DQorCQkJPG5hbWU+b3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YWJ1aWxkZXI8L25hbWU+DQorCQkJPGFyZ3VtZW50cz4NCisJCQk8L2FyZ3VtZW50cz4NCisJCTwvYnVpbGRDb21tYW5kPg0KKwkJPGJ1aWxkQ29tbWFuZD4NCisJCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuTWFuaWZlc3RCdWlsZGVyPC9uYW1lPg0KKwkJCTxhcmd1bWVudHM+DQorCQkJPC9hcmd1bWVudHM+DQorCQk8L2J1aWxkQ29tbWFuZD4NCisJCTxidWlsZENvbW1hbmQ+DQorCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLlNjaGVtYUJ1aWxkZXI8L25hbWU+DQorCQkJPGFyZ3VtZW50cz4NCisJCQk8L2FyZ3VtZW50cz4NCisJCTwvYnVpbGRDb21tYW5kPg0KKwk8L2J1aWxkU3BlYz4NCisJPG5hdHVyZXM+DQorCQk8bmF0dXJlPm9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFuYXR1cmU8L25hdHVyZT4NCisJCTxuYXR1cmU+b3JnLmVjbGlwc2UucGRlLlBsdWdpbk5hdHVyZTwvbmF0dXJlPg0KKwk8L25hdHVyZXM+DQorPC9wcm9qZWN0RGVzY3JpcHRpb24+DQpkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZ2xvYmFsaW5mbHVlbnphbW9kZWwvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZ2xvYmFsaW5mbHVlbnphbW9kZWwvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNjMDczOWQKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5nbG9iYWxpbmZsdWVuemFtb2RlbC8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMKQEAgLTAsMCArMSw4IEBACisjV2VkIEp1bCAxNSAxMjowNzoyNCBQRFQgMjAwOQ0KK2VjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xDQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29kZWdlbi5pbmxpbmVKc3JCeXRlY29kZT1lbmFibGVkDQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29kZWdlbi50YXJnZXRQbGF0Zm9ybT0xLjUNCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb21wbGlhbmNlPTEuNQ0KK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uYXNzZXJ0SWRlbnRpZmllcj1lcnJvcg0KK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZW51bUlkZW50aWZpZXI9ZXJyb3INCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5zb3VyY2U9MS41DQpkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZ2xvYmFsaW5mbHVlbnphbW9kZWwvTUVUQS1JTkYvTUFOSUZFU1QuTUYgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5nbG9iYWxpbmZsdWVuemFtb2RlbC9NRVRBLUlORi9NQU5JRkVTVC5NRgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xOWRiMmMxCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZ2xvYmFsaW5mbHVlbnphbW9kZWwvTUVUQS1JTkYvTUFOSUZFU1QuTUYKQEAgLTAsMCArMSwyMyBAQAorTWFuaWZlc3QtVmVyc2lvbjogMS4wDQorQnVuZGxlLU1hbmlmZXN0VmVyc2lvbjogMg0KK0J1bmRsZS1OYW1lOiAlcGx1Z2luTmFtZQ0KK0J1bmRsZS1TeW1ib2xpY05hbWU6IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5nbG9iYWxpbmZsdWVuemFtb2RlbDtzaW5nbGV0b246PXRydWUNCitCdW5kbGUtVmVyc2lvbjogMS4yLjENCitCdW5kbGUtQ2xhc3NQYXRoOiAuDQorQnVuZGxlLUFjdGl2YXRvcjogb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmdsb2JhbGluZmx1ZW56YW1vZGVsLnByb3ZpZGVyLkdsb2JhbGluZmx1ZW56YW1vZGVsRWRpdFBsdWdpbiRJbXBsZW1lbnRhdGlvbg0KK0J1bmRsZS1WZW5kb3I6ICVwcm92aWRlck5hbWUNCitCdW5kbGUtTG9jYWxpemF0aW9uOiBwbHVnaW4NCitCdW5kbGUtUmVxdWlyZWRFeGVjdXRpb25FbnZpcm9ubWVudDogSjJTRS0xLjUNCitFeHBvcnQtUGFja2FnZTogb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmdsb2JhbGluZmx1ZW56YW1vZGVsLA0KKyBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZ2xvYmFsaW5mbHVlbnphbW9kZWwuaW1wbCwNCisgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmdsb2JhbGluZmx1ZW56YW1vZGVsLnByb3ZpZGVyLA0KKyBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZ2xvYmFsaW5mbHVlbnphbW9kZWwudXRpbA0KK1JlcXVpcmUtQnVuZGxlOiBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUsDQorIG9yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHksDQorIG9yZy5lY2xpcHNlLmVtZi5lY29yZTt2aXNpYmlsaXR5Oj1yZWV4cG9ydCwNCisgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzO3Zpc2liaWxpdHk6PXJlZXhwb3J0LA0KKyBvcmcuZWNsaXBzZS5zdGVtLmNvcmU7dmlzaWJpbGl0eTo9cmVleHBvcnQsDQorIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnM7dmlzaWJpbGl0eTo9cmVleHBvcnQsDQorIG9yZy5lY2xpcHNlLmVtZi5lZGl0O3Zpc2liaWxpdHk6PXJlZXhwb3J0LA0KKyBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuZWRpdDt2aXNpYmlsaXR5Oj1yZWV4cG9ydA0KK0J1bmRsZS1BY3RpdmF0aW9uUG9saWN5OiBsYXp5DQpkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZ2xvYmFsaW5mbHVlbnphbW9kZWwvYnVpbGQucHJvcGVydGllcyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmdsb2JhbGluZmx1ZW56YW1vZGVsL2J1aWxkLnByb3BlcnRpZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDJiMGJhZAotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmdsb2JhbGluZmx1ZW56YW1vZGVsL2J1aWxkLnByb3BlcnRpZXMKQEAgLTAsMCArMSwxOCBAQAorDQorIyA8Y29weXJpZ2h0Pg0KKyMgPC9jb3B5cmlnaHQ+DQorIw0KKyMgJElkJA0KKw0KK2Jpbi5pbmNsdWRlcyA9IC4sXA0KKyAgICAgICAgICAgICAgIG1vZGVsLyxcDQorICAgICAgICAgICAgICAgTUVUQS1JTkYvLFwNCisgICAgICAgICAgICAgICBwbHVnaW4ueG1sLFwNCisgICAgICAgICAgICAgICBwbHVnaW4ucHJvcGVydGllcyxcDQorICAgICAgICAgICAgICAgaWNvbnMvLFwNCisgICAgICAgICAgICAgICBwbHVnaW5fZGUucHJvcGVydGllcyxcDQorICAgICAgICAgICAgICAgcGx1Z2luX2tyLnByb3BlcnRpZXMsXA0KKyAgICAgICAgICAgICAgIHBsdWdpbl96aC5wcm9wZXJ0aWVzDQoramFycy5jb21waWxlLm9yZGVyID0gLg0KK3NvdXJjZS4uID0gc3JjLw0KK291dHB1dC4uID0gYmluLw0KZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmdsb2JhbGluZmx1ZW56YW1vZGVsL2ljb25zL2Z1bGwvb2JqMTYvR2xvYmFsSW5mbHVlbnphTW9kZWwuZ2lmIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZ2xvYmFsaW5mbHVlbnphbW9kZWwvaWNvbnMvZnVsbC9vYmoxNi9HbG9iYWxJbmZsdWVuemFNb2RlbC5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGU0MDRlNAotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmdsb2JhbGluZmx1ZW56YW1vZGVsL2ljb25zL2Z1bGwvb2JqMTYvR2xvYmFsSW5mbHVlbnphTW9kZWwuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmdsb2JhbGluZmx1ZW56YW1vZGVsL2ljb25zL2Z1bGwvb2JqMTYvR2xvYmFsaW5mbHVlbnphbW9kZWxNb2RlbEZpbGUuZ2lmIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZ2xvYmFsaW5mbHVlbnphbW9kZWwvaWNvbnMvZnVsbC9vYmoxNi9HbG9iYWxpbmZsdWVuemFtb2RlbE1vZGVsRmlsZS5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjZiNzFlYwotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmdsb2JhbGluZmx1ZW56YW1vZGVsL2ljb25zL2Z1bGwvb2JqMTYvR2xvYmFsaW5mbHVlbnphbW9kZWxNb2RlbEZpbGUuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmdsb2JhbGluZmx1ZW56YW1vZGVsL2ljb25zL2Z1bGwvd2l6YmFuL05ld0dsb2JhbGluZmx1ZW56YW1vZGVsLmdpZiBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmdsb2JhbGluZmx1ZW56YW1vZGVsL2ljb25zL2Z1bGwvd2l6YmFuL05ld0dsb2JhbGluZmx1ZW56YW1vZGVsLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNTc0M2NlCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZ2xvYmFsaW5mbHVlbnphbW9kZWwvaWNvbnMvZnVsbC93aXpiYW4vTmV3R2xvYmFsaW5mbHVlbnphbW9kZWwuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmdsb2JhbGluZmx1ZW56YW1vZGVsL21vZGVsL2dsb2JhbGluZmx1ZW56YW1vZGVsLmVjb3JlIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZ2xvYmFsaW5mbHVlbnphbW9kZWwvbW9kZWwvZ2xvYmFsaW5mbHVlbnphbW9kZWwuZWNvcmUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2U2YmUyYQotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmdsb2JhbGluZmx1ZW56YW1vZGVsL21vZGVsL2dsb2JhbGluZmx1ZW56YW1vZGVsLmVjb3JlCkBAIC0wLDAgKzEsMTggQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8ZWNvcmU6RVBhY2thZ2UgeG1pOnZlcnNpb249IjIuMCIKKyAgICB4bWxuczp4bWk9Imh0dHA6Ly93d3cub21nLm9yZy9YTUkiIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiCisgICAgeG1sbnM6ZWNvcmU9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDIvRWNvcmUiIG5hbWU9Imdsb2JhbGluZmx1ZW56YW1vZGVsIgorICAgIG5zVVJJPSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9nbG9iYWxpbmZsdWVuemFtb2RlbC5lY29yZSIgbnNQcmVmaXg9Im9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5nbG9iYWxpbmZsdWVuemFtb2RlbCI+CisgIDxlQ2xhc3NpZmllcnMgeHNpOnR5cGU9ImVjb3JlOkVDbGFzcyIgbmFtZT0iR2xvYmFsSW5mbHVlbnphTW9kZWwiIGVTdXBlclR5cGVzPSIuLi8uLi9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMvbW9kZWwvc3RhbmRhcmQuZWNvcmUjLy9TdG9jaGFzdGljU0lSRGlzZWFzZU1vZGVsIj4KKyAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0ibGF0aXR1ZGVTaWdtb2lkV2lkdGgiIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9lbWYvMjAwMi9FY29yZSMvL0VEb3VibGUiCisgICAgICAgIGRlZmF1bHRWYWx1ZUxpdGVyYWw9IjQuNTAiLz4KKyAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0ic2Vhc29uYWxNb2R1bGF0aW9uRXhwb25lbnQiCisgICAgICAgIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9lbWYvMjAwMi9FY29yZSMvL0VEb3VibGUiIGRlZmF1bHRWYWx1ZUxpdGVyYWw9IjIuMCIvPgorICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJtb2R1bGF0aW9uUGVyaW9kIiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDIvRWNvcmUjLy9FRG91YmxlIgorICAgICAgICBkZWZhdWx0VmFsdWVMaXRlcmFsPSIzNjUuMjU2MzYzMDUxIi8+CisgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVBdHRyaWJ1dGUiIG5hbWU9Im1vZHVsYXRpb25QaGFzZVNoaWZ0IiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDIvRWNvcmUjLy9FRG91YmxlIgorICAgICAgICBkZWZhdWx0VmFsdWVMaXRlcmFsPSIwLjAiLz4KKyAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0ic2Vhc29uYWxNb2R1bGF0aW9uRmxvb3IiCisgICAgICAgIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9lbWYvMjAwMi9FY29yZSMvL0VEb3VibGUiIGRlZmF1bHRWYWx1ZUxpdGVyYWw9IjAuNiIvPgorICA8L2VDbGFzc2lmaWVycz4KKzwvZWNvcmU6RVBhY2thZ2U+CmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5nbG9iYWxpbmZsdWVuemFtb2RlbC9tb2RlbC9nbG9iYWxpbmZsdWVuemFtb2RlbC5nZW5tb2RlbCBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmdsb2JhbGluZmx1ZW56YW1vZGVsL21vZGVsL2dsb2JhbGluZmx1ZW56YW1vZGVsLmdlbm1vZGVsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNlM2M1MjYKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5nbG9iYWxpbmZsdWVuemFtb2RlbC9tb2RlbC9nbG9iYWxpbmZsdWVuemFtb2RlbC5nZW5tb2RlbApAQCAtMCwwICsxLDI0IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPGdlbm1vZGVsOkdlbk1vZGVsIHhtaTp2ZXJzaW9uPSIyLjAiCisgICAgeG1sbnM6eG1pPSJodHRwOi8vd3d3Lm9tZy5vcmcvWE1JIiB4bWxuczplY29yZT0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9lbWYvMjAwMi9FY29yZSIKKyAgICB4bWxuczpnZW5tb2RlbD0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9lbWYvMjAwMi9HZW5Nb2RlbCIgbW9kZWxEaXJlY3Rvcnk9Ii9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZ2xvYmFsaW5mbHVlbnphbW9kZWwvc3JjIgorICAgIGVkaXREaXJlY3Rvcnk9Ii9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZ2xvYmFsaW5mbHVlbnphbW9kZWwvc3JjIiBlZGl0b3JEaXJlY3Rvcnk9Ii9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMuZ2xvYmFsaW5mbHVlbnphbW9kZWwvc3JjIgorICAgIG1vZGVsUGx1Z2luSUQ9Im9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5nbG9iYWxpbmZsdWVuemFtb2RlbCIgcmVkaXJlY3Rpb249IiIKKyAgICBtb2RlbE5hbWU9Ikdsb2JhbGluZmx1ZW56YW1vZGVsIiBlZGl0b3JQbHVnaW5DbGFzcz0ib3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzLmdsb2JhbGluZmx1ZW56YW1vZGVsLnByZXNlbnRhdGlvbi5HbG9iYWxpbmZsdWVuemFtb2RlbEVkaXRvclBsdWdpbiIKKyAgICB0ZXN0c0RpcmVjdG9yeT0iL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGlzZWFzZW1vZGVscy5nbG9iYWxpbmZsdWVuemFtb2RlbC9zcmMiCisgICAgaW1wb3J0ZXJJRD0ib3JnLmVjbGlwc2UuZW1mLmltcG9ydGVyLmVjb3JlIiBjb21wbGlhbmNlTGV2ZWw9IjYuMCIgY29weXJpZ2h0RmllbGRzPSJmYWxzZSIKKyAgICBwcm92aWRlclJvb3RFeHRlbmRzQ2xhc3M9IiIgZWRpdG9yUGx1Z2luSUQ9Im9yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy5nbG9iYWxpbmZsdWVuemFtb2RlbC5lZGl0b3IiCisgICAgdXNlZEdlblBhY2thZ2VzPSIuLi8uLi9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMvbW9kZWwvZGlzZWFzZW1vZGVscy5nZW5tb2RlbCMvL3N0YW5kYXJkIC4uLy4uL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9tb2RlbC9jb3JlLmdlbm1vZGVsIy8vY29tbW9uIC4uLy4uL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9tb2RlbC9jb3JlLmdlbm1vZGVsIy8vbW9kZWwgLi4vLi4vb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL21vZGVsL2NvcmUuZ2VubW9kZWwjLy9ncmFwaCAuLi8uLi9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvbW9kZWwvY29yZS5nZW5tb2RlbCMvL21vZGlmaWVyIHBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2UuZW1mLmVjb3JlL21vZGVsL0Vjb3JlLmdlbm1vZGVsIy8vZWNvcmUgLi4vLi4vb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL21vZGVsL2NvcmUuZ2VubW9kZWwjLy9zY2VuYXJpbyAuLi8uLi9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvbW9kZWwvY29yZS5nZW5tb2RlbCMvL3NlcXVlbmNlciAuLi8uLi9vcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zL21vZGVsL2RlZmluaXRpb25zLmdlbm1vZGVsIy8vbGFiZWxzIC4uLy4uL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9tb2RlbC9jb3JlLmdlbm1vZGVsIy8vc29sdmVyIC4uLy4uL29yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy9tb2RlbC9zdGFuZGFyZC5nZW5tb2RlbCMvL3N0YW5kYXJkIgorICAgIGludGVyZmFjZU5hbWVQYXR0ZXJuPSIiPgorICA8Zm9yZWlnbk1vZGVsPmdsb2JhbGluZmx1ZW56YW1vZGVsLmVjb3JlPC9mb3JlaWduTW9kZWw+CisgIDxnZW5QYWNrYWdlcyBwcmVmaXg9Ikdsb2JhbGluZmx1ZW56YW1vZGVsIiBiYXNlUGFja2FnZT0ib3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzIgorICAgICAgZGlzcG9zYWJsZVByb3ZpZGVyRmFjdG9yeT0idHJ1ZSIgZWNvcmVQYWNrYWdlPSJnbG9iYWxpbmZsdWVuemFtb2RlbC5lY29yZSMvIj4KKyAgICA8Z2VuQ2xhc3NlcyBlY29yZUNsYXNzPSJnbG9iYWxpbmZsdWVuemFtb2RlbC5lY29yZSMvL0dsb2JhbEluZmx1ZW56YU1vZGVsIj4KKyAgICAgIDxnZW5GZWF0dXJlcyBjcmVhdGVDaGlsZD0iZmFsc2UiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RUF0dHJpYnV0ZSBnbG9iYWxpbmZsdWVuemFtb2RlbC5lY29yZSMvL0dsb2JhbEluZmx1ZW56YU1vZGVsL2xhdGl0dWRlU2lnbW9pZFdpZHRoIi8+CisgICAgICA8Z2VuRmVhdHVyZXMgY3JlYXRlQ2hpbGQ9ImZhbHNlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVBdHRyaWJ1dGUgZ2xvYmFsaW5mbHVlbnphbW9kZWwuZWNvcmUjLy9HbG9iYWxJbmZsdWVuemFNb2RlbC9zZWFzb25hbE1vZHVsYXRpb25FeHBvbmVudCIvPgorICAgICAgPGdlbkZlYXR1cmVzIGNyZWF0ZUNoaWxkPSJmYWxzZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFQXR0cmlidXRlIGdsb2JhbGluZmx1ZW56YW1vZGVsLmVjb3JlIy8vR2xvYmFsSW5mbHVlbnphTW9kZWwvbW9kdWxhdGlvblBlcmlvZCIvPgorICAgICAgPGdlbkZlYXR1cmVzIGNyZWF0ZUNoaWxkPSJmYWxzZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFQXR0cmlidXRlIGdsb2JhbGluZmx1ZW56YW1vZGVsLmVjb3JlIy8vR2xvYmFsSW5mbHVlbnphTW9kZWwvbW9kdWxhdGlvblBoYXNlU2hpZnQiLz4KKyAgICAgIDxnZW5GZWF0dXJlcyBjcmVhdGVDaGlsZD0iZmFsc2UiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RUF0dHJpYnV0ZSBnbG9iYWxpbmZsdWVuemFtb2RlbC5lY29yZSMvL0dsb2JhbEluZmx1ZW56YU1vZGVsL3NlYXNvbmFsTW9kdWxhdGlvbkZsb29yIi8+CisgICAgPC9nZW5DbGFzc2VzPgorICA8L2dlblBhY2thZ2VzPgorPC9nZW5tb2RlbDpHZW5Nb2RlbD4KZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmdsb2JhbGluZmx1ZW56YW1vZGVsL3BsdWdpbi5wcm9wZXJ0aWVzIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZ2xvYmFsaW5mbHVlbnphbW9kZWwvcGx1Z2luLnByb3BlcnRpZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjQ0OGUwZQotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmdsb2JhbGluZmx1ZW56YW1vZGVsL3BsdWdpbi5wcm9wZXJ0aWVzCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmdsb2JhbGluZmx1ZW56YW1vZGVsL3BsdWdpbi54bWwgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5nbG9iYWxpbmZsdWVuemFtb2RlbC9wbHVnaW4ueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ5YTYxYTAKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5nbG9iYWxpbmZsdWVuemFtb2RlbC9wbHVnaW4ueG1sCkBAIC0wLDAgKzEsNDggQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+DQorPD9lY2xpcHNlIHZlcnNpb249IjMuMCI/Pg0KKw0KKzwhLS0NCisgPGNvcHlyaWdodD4NCisgPC9jb3B5cmlnaHQ+DQorDQorICRJZCQNCistLT4NCisNCis8cGx1Z2luPg0KKyAgIDxleHRlbnNpb24NCisgICAgICAgICBwb2ludD0ib3JnLmVjbGlwc2UuZW1mLmVkaXQuaXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcmllcyI+DQorICAgICAgPGZhY3RvcnkNCisgICAgICAgCQl1cmk9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL2dsb2JhbGluZmx1ZW56YW1vZGVsLmVjb3JlIg0KKyAgICAgICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZ2xvYmFsaW5mbHVlbnphbW9kZWwucHJvdmlkZXIuR2xvYmFsaW5mbHVlbnphbW9kZWxJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSINCisgICAgICAgCQlzdXBwb3J0ZWRUeXBlcyA9IA0KKwkJCQkgICAgICAgICAib3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUVkaXRpbmdEb21haW5JdGVtUHJvdmlkZXINCisJCQkJICAgICAgICAgIG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklTdHJ1Y3R1cmVkSXRlbUNvbnRlbnRQcm92aWRlcg0KKwkJCQkgICAgICAgICAgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVRyZWVJdGVtQ29udGVudFByb3ZpZGVyDQorCQkJCSAgICAgICAgICBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbUxhYmVsUHJvdmlkZXINCisJCQkJICAgICAgICAgIG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtUHJvcGVydHlTb3VyY2UiIC8+DQorICAgPC9leHRlbnNpb24+DQorDQorICAgPGV4dGVuc2lvbiBwb2ludD0ib3JnLmVjbGlwc2UuZW1mLmVjb3JlLmdlbmVyYXRlZF9wYWNrYWdlIj4NCisgICAgICA8cGFja2FnZQ0KKyAgICAgICAgICAgIHVyaT0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvZ2xvYmFsaW5mbHVlbnphbW9kZWwuZWNvcmUiDQorICAgICAgICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5nbG9iYWxpbmZsdWVuemFtb2RlbC5HbG9iYWxpbmZsdWVuemFtb2RlbFBhY2thZ2UiDQorICAgICAgICAgICAgZ2VuTW9kZWw9Im1vZGVsL2dsb2JhbGluZmx1ZW56YW1vZGVsLmdlbm1vZGVsIi8+DQorICAgPC9leHRlbnNpb24+DQorICAgPGV4dGVuc2lvbg0KKyAgICAgICAgIHBvaW50PSJvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZGlzZWFzZW1vZGVsIj4NCisgICAgICA8Y2xhc3NkZWYNCisgICAgICAgICAgICBjbGFzcz0ib3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmdsb2JhbGluZmx1ZW56YW1vZGVsLmltcGwuR2xvYmFsSW5mbHVlbnphTW9kZWxJbXBsIj4NCisgICAgICA8L2NsYXNzZGVmPg0KKyAgICAgIDxkdWJsaW5fY29yZQ0KKyAgICAgICAgICAgIGNhdGVnb3J5X2lkPSIvIg0KKyAgICAgICAgICAgIGNyZWF0b3I9IiVkY19jcmVhdG9yX2thdWZtYW4iDQorICAgICAgICAgICAgZGVzY3JpcHRpb249IiVkY19kZXNjcl9HbG9iYWxfSW5mbHVlbnphIg0KKyAgICAgICAgICAgIGlkZW50aWZpZXI9IiVkY19pZGVudGllciINCisgICAgICAgICAgICBzb3VyY2U9IiVkY19TT1VSQ0UiDQorICAgICAgICAgICAgbGljZW5zZT0iJWRjX2xpY2Vuc2UiDQorICAgICAgICAgICAgcHVibGlzaGVyPSIlZGNfcHVibGlzaGVyIg0KKyAgICAgICAgICAgIHRpdGxlPSIlZGNfdGl0bGVfR2xvYmFsX0luZmx1ZW56YSI+DQorICAgICAgPC9kdWJsaW5fY29yZT4NCisgICA8L2V4dGVuc2lvbj4NCisNCis8L3BsdWdpbj4NCmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5nbG9iYWxpbmZsdWVuemFtb2RlbC9wbHVnaW5fZGUucHJvcGVydGllcyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmdsb2JhbGluZmx1ZW56YW1vZGVsL3BsdWdpbl9kZS5wcm9wZXJ0aWVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM4OTc0ZjcKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5nbG9iYWxpbmZsdWVuemFtb2RlbC9wbHVnaW5fZGUucHJvcGVydGllcwpAQCAtMCwwICsxLDkzIEBACisjLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyMgKiBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisjICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworIyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorIyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisjICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyMgKgorIyAqIENvbnRyaWJ1dG9yczoKKyMgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisjICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3BsdWdpbk5hbWU9U1RFTSBHbG9iYWxlcyBJbmZsdWVuemEtS3JhbmtoZWl0c21vZGVsbAorcHJvdmlkZXJOYW1lPUVjbGlwc2Uub3JnCitkY19jcmVhdG9yX2thdWZtYW49SmFtZXMgS2F1Zm1hbgorZGNfaWRlbnRpZXI9U1RFTSBXaWVkZXJnYWJlIEtyYW5raGVpdHNtb2RlbGwKK2RjX3B1Ymxpc2hlcj1EaWUgRWNsaXBzZSBGb3VuZGF0aW9uCitkY19saWNlbnNlPUVjbGlwc2UgUHVibGljIExpY2Vuc2UgKEVQTCkKK2RjX3RpdGxlX0dsb2JhbF9JbmZsdWVuemE9R2xvYmFsZSBJbmZsdWVuemEKK2RjX2Rlc2NyX0dsb2JhbF9JbmZsdWVuemE9RWluIEJlaXNwaWVsIGZcdTAwZmNyIHdlbHR3ZWl0ZSBJbmZsdWVuemEgbWl0IHNhaXNvbmFsZXIgTW9kdWxhdGlvbiBkdXJjaCBCcmVpdGVuZ3JhZCB1bmQgWmVpdAorZGNfU09VUkNFPWh0dHA6Ly93aWtpLmVjbGlwc2Uub3JnL0ludHJvZHVjdGlvbl90b19Db21wYXJ0bWVudF9Nb2RlbHMgKHVuZCBSZWZlcmVuemVuIGdpYnQgZXMtaW4pCisKK19VSV9DcmVhdGVDaGlsZF90ZXh0PXswfQorX1VJX0NyZWF0ZUNoaWxkX3RleHQyPXsxfSB7MH0KK19VSV9DcmVhdGVDaGlsZF90ZXh0Mz17MX0KK19VSV9DcmVhdGVDaGlsZF90b29sdGlwPU5ldWVzIHswfSB1bnRlciB7MX0gRmVhdHVyZSBlcnN0ZWxsZW4KK19VSV9DcmVhdGVDaGlsZF9kZXNjcmlwdGlvbj1OZXVlcyBLaW5kIHZvbSBUeXAgezB9IGZcdTAwZmNyIGRhcyB7MX0gTWVya21hbCBkZXIgYXVzZ2V3XHUwMGU0aGx0ZW4gezJ9IGVyc3RlbGxlbgorX1VJX0NyZWF0ZVNpYmxpbmdfZGVzY3JpcHRpb249TmV1ZXMgR2VzY2h3aXN0ZXJ0ZWlsIHZvbSBUeXAgezB9IGZcdTAwZmNyIGRlbiBhdXNnZXdcdTAwZTRobHRlbiB7Mn0gdW50ZXIgZGVtIHsxfSBNZXJrbWFsIGRlcyBFbHRlcm50ZWlsIGVyc3RlbGxlbgorCitfVUlfUHJvcGVydHlEZXNjcmlwdG9yX2Rlc2NyaXB0aW9uPXswfSB2b24gezF9CisKK19VSV9HbG9iYWxJbmZsdWVuemFNb2RlbF90eXBlPUdsb2JhbGVzIEluZmx1ZW56YW1vZGVsbAorX1VJX1Vua25vd25fdHlwZT1PYmpla3QKKworX1VJX1Vua25vd25fZGF0YXR5cGU9V2VydAorCitfVUlfR2xvYmFsSW5mbHVlbnphTW9kZWxfbGF0aXR1ZGVTaWdtb2lkV2lkdGhfZmVhdHVyZT1CcmVpdGVuZ3JhZCBTaWdtb2lkIEJyZWl0ZQorX1VJX0dsb2JhbEluZmx1ZW56YU1vZGVsX3NlYXNvbmFsTW9kdWxhdGlvbkV4cG9uZW50X2ZlYXR1cmU9U2Fpc29uYWxlciBNb2R1bGF0aW9uc2V4cG9uZW50CitfVUlfR2xvYmFsSW5mbHVlbnphTW9kZWxfbW9kdWxhdGlvblBlcmlvZF9mZWF0dXJlPU1vZHVsYXRpb25zcGVyaW9kZQorX1VJX0dsb2JhbEluZmx1ZW56YU1vZGVsX21vZHVsYXRpb25QaGFzZVNoaWZ0X2ZlYXR1cmU9UGhhc2VudmVyc2NoaWVidW5nIGRlciBNb2R1bGF0aW9uCitfVUlfR2xvYmFsSW5mbHVlbnphTW9kZWxfc2Vhc29uYWxNb2R1bGF0aW9uRmxvb3JfZmVhdHVyZT1TYWlzb25hbGUgTW9kdWxhdGlvbnMtVW50ZXJncmVuemUKK19VSV9HbG9iYWxJbmZsdWVuemFNb2RlbF9hdHRlbnVhdGlvbl9mZWF0dXJlPURcdTAwZTRtcGZ1bmcKK19VSV9Vbmtub3duX2ZlYXR1cmU9TmljaHQgc3BlemlmaXppZXJ0CisKKworX1VJX0dsb2JhbGluZmx1ZW56YW1vZGVsRWRpdG9yX21lbnU9Jkdsb2JhbGluZmx1ZW56YW1vZGVsIEVkaXRvcgorCitfVUlfQ3JlYXRlQ2hpbGRfbWVudV9pdGVtPSZOZXcgQ2hpbGQKK19VSV9DcmVhdGVTaWJsaW5nX21lbnVfaXRlbT1OJmV1ZXMgR2VzY2h3aXN0ZXJ0ZWlsCisKK19VSV9TaG93UHJvcGVydGllc1ZpZXdfbWVudV9pdGVtPVNob3cgJiBQcm9wZXJ0aWVzIFZpZXcKK19VSV9SZWZyZXNoVmlld2VyX21lbnVfaXRlbT0mUmVmcmVzaAorCitfVUlfU2VsZWN0aW9uUGFnZV9sYWJlbD1BdXN3YWhsCitfVUlfUGFyZW50UGFnZV9sYWJlbD1FbHRlcm50ZWlsCitfVUlfTGlzdFBhZ2VfbGFiZWw9TGlzdGUKK19VSV9UcmVlUGFnZV9sYWJlbD1CYXVtCitfVUlfVGFibGVQYWdlX2xhYmVsPVRhYmVsbGUKK19VSV9UcmVlV2l0aENvbHVtbnNQYWdlX2xhYmVsPUJhdW0gbWl0IFNwYWx0ZW4KK19VSV9PYmplY3RDb2x1bW5fbGFiZWw9T2JqZWt0CitfVUlfU2VsZkNvbHVtbl9sYWJlbD1TZWxic3QKKworX1VJX05vT2JqZWN0U2VsZWN0ZWQ9TmljaHRzIGF1c2dld1x1MDBlNGhsdAorX1VJX1NpbmdsZU9iamVjdFNlbGVjdGVkPUF1c2dld1x1MDBlNGhsdGVzIE9iamVrdDogezB9CitfVUlfTXVsdGlPYmplY3RTZWxlY3RlZD1BdXNnZXdcdTAwZTRobHRlIHswfSBPYmpla3RlCisKK19VSV9PcGVuRWRpdG9yRXJyb3JfbGFiZWw9RWRpdG9yIFx1MDBmNmZmbmVuCisKK19VSV9XaXphcmRfY2F0ZWdvcnk9QmVpc3BpZWwgRU1GIE1vZGVsbCBFcnN0ZWxsdW5nc2Fzc2lzdGVudAorCitfVUlfQ3JlYXRlTW9kZWxFcnJvcl9tZXNzYWdlPUF1ZmdldHJldGVuZSBQcm9ibGVtZSBpbiBkZXIgRGF0ZWkgInswfSIKKworX1VJX0dsb2JhbGluZmx1ZW56YW1vZGVsTW9kZWxXaXphcmRfbGFiZWw9R2xvYmFsZXMgSW5mbHVlbnphbW9kZWxsCitfVUlfR2xvYmFsaW5mbHVlbnphbW9kZWxNb2RlbFdpemFyZF9kZXNjcmlwdGlvbj1OZXVlcyBnbG9iYWxlcyBJbmZsdWVuemFtb2RlbGwgZXJzdGVsbGVuCisKK19VSV9HbG9iYWxpbmZsdWVuemFtb2RlbEVkaXRvcl9sYWJlbD1HbG9iYWxlLUluZmx1ZW56YS1Nb2RlbGwtRWRpdG9yCisKK19VSV9HbG9iYWxpbmZsdWVuemFtb2RlbEVkaXRvckZpbGVuYW1lRGVmYXVsdEJhc2U9TWVpbgorX1VJX0dsb2JhbGluZmx1ZW56YW1vZGVsRWRpdG9yRmlsZW5hbWVFeHRlbnNpb25zPUdsb2JhbGVzIEluZmx1ZW56YW1vZGVsbAorCitfVUlfV2l6YXJkX2xhYmVsPU5ldQorCitfV0FSTl9GaWxlbmFtZUV4dGVuc2lvbj1EZXIgRGF0ZWluYW1lIG11c3MgYXVmICIuezB9IiBlbmRlbgorX1dBUk5fRmlsZW5hbWVFeHRlbnNpb25zPURlciBEYXRlaW5hbWUgbXVzcyBlaW5lIGRlciBmb2xnZW5kZW4gRW5kdW5nZW4gaGFiZW46IHswfQorCitfVUlfTW9kZWxPYmplY3Q9Jk1vZGVsIE9iamVjdAorX1VJX1hNTEVuY29kaW5nPSZYTUwgRW5jb2RpbmcKK19VSV9YTUxFbmNvZGluZ0Nob2ljZXM9VVRGLTggQVNDSUkgVVRGLTE2IFVURi0xNkJFIFVURi0xNkxFIElTTy04ODU5LTEKK19VSV9XaXphcmRfaW5pdGlhbF9vYmplY3RfZGVzY3JpcHRpb249WnUgZXJ6ZXVnZW5kZXMgTW9kZWxsb2JqZWt0IHdcdTAwZTRobGVuCisKK19VSV9GaWxlQ29uZmxpY3RfbGFiZWw9RGF0ZWlrb25mbGlrdAorX1dBUk5fRmlsZUNvbmZsaWN0PUVzIGdpYnQgbmljaHQgZ2VzcGVpY2hlcnRlIFx1MDBjNG5kZXJ1bmdlbiwgZGllIEtvbmZsaWt0ZSBtaXQgXHUwMGM0bmRlcnVuZ2VuIGF1XHUwMGRmZXJoYWxiIGRlcyBFZGl0b3JzIGVyemV1Z2VuLiBNXHUwMGY2Y2h0ZW4gU2llIGRpZSBcdTAwYzRuZGVydW5nZW4gaW0gRWRpdG9yIHZlcndlcmZlbj8KKworCmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5nbG9iYWxpbmZsdWVuemFtb2RlbC9wbHVnaW5fa3IucHJvcGVydGllcyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmdsb2JhbGluZmx1ZW56YW1vZGVsL3BsdWdpbl9rci5wcm9wZXJ0aWVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUwZTAyNDcKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5nbG9iYWxpbmZsdWVuemFtb2RlbC9wbHVnaW5fa3IucHJvcGVydGllcwpAQCAtMCwwICsxLDkzIEBACisjLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyMgKiBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisjICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworIyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorIyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisjICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyMgKgorIyAqIENvbnRyaWJ1dG9yczoKKyMgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisjICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3BsdWdpbk5hbWU9U1RFTSBcdWFlMDBcdWI4NWNcdWJjOGMgXHVjNzc4XHVkNTBjXHViOGU4XHVjNWQ0XHVjNzkwIFx1YzljOFx1YmNkMSBcdWJhYThcdWIzNzgKK3Byb3ZpZGVyTmFtZT1FY2xpcHNlLm9yZworZGNfY3JlYXRvcl9rYXVmbWFuPVx1YzgxY1x1Yzc4NFx1YzJhNCBcdWNlNzRcdWQ1MDRcdWI5ZTgKK2RjX2lkZW50aWVyPVNURU0gXHVjN2FjXHVjMGRkIFx1YzljOFx1YmNkMSBcdWJhYThcdWIzNzgKK2RjX3B1Ymxpc2hlcj1cdWM3NzRcdWQwNzRcdWI5YmRcdWMyYTQgXHVjN2FjXHViMmU4CitkY19saWNlbnNlPVx1Yzc3NFx1ZDA3NFx1YjliZFx1YzJhNCBcdWFjZjVcdWM2YTkgXHVjMGFjXHVjNmE5IFx1ZDVjOFx1YWMwMFx1YzExYyAoRVBMKQorZGNfdGl0bGVfR2xvYmFsX0luZmx1ZW56YT1cdWFlMDBcdWI4NWNcdWJjOGMgXHVjNzc4XHVkNTBjXHViOGU4XHVjNWQ0XHVjNzkwCitkY19kZXNjcl9HbG9iYWxfSW5mbHVlbnphPVx1YzcwNFx1YjNjNCwgXHVjMmRjXHVhYzA0XHVjNWQwIFx1YjUzMFx1Yjc3YyBcdWFjYzRcdWM4MDhcdWM3NTggXHViY2MwXHVjODcwXHViOTdjIFx1YmNjMFx1YzIxOFx1Yjg1YyBcdWI0NTQgXHVhZTAwXHViODVjXHViYzhjIFx1Yzc3OFx1ZDUwY1x1YjhlOFx1YzVkNFx1Yzc5MFx1Yzc1OCBcdWM2MDgKK2RjX1NPVVJDRT1odHRwOi8vd2lraS5lY2xpcHNlLm9yZy9JbnRyb2R1Y3Rpb25fdG9fQ29tcGFydG1lbnRfTW9kZWxzIChcdWFkZjhcdWI5YWNcdWFjZTAgXHVjYzM4XHVhY2UwIFx1YmIzOFx1ZDVjY1x1YzVkMFx1YzExYykKKworX1VJX0NyZWF0ZUNoaWxkX3RleHQ9ezB9CitfVUlfQ3JlYXRlQ2hpbGRfdGV4dDI9ezF9IHswfQorX1VJX0NyZWF0ZUNoaWxkX3RleHQzPXsxfQorX1VJX0NyZWF0ZUNoaWxkX3Rvb2x0aXA9ezF9IFx1YWUzMFx1YjJhNSBcdWQ1NThcdWM1ZDAgXHVjMGM4IHswfSBcdWI5Y2NcdWI0ZTRcdWFlMzAKK19VSV9DcmVhdGVDaGlsZF9kZXNjcmlwdGlvbj1cdWMxMjBcdWQwZGRcdWQ1NWMgezJ9XHVjNzU4IHsxfSBcdWFlMzBcdWIyYTVcdWM1ZDAgXHViMzAwXHVkNTVjIFx1ZDYxNVx1YzJkZCB7MH1cdWM3NTggXHVjMGM4XHViODVjXHVjNmI0IENoaWxkXHViOTdjIFx1YjljY1x1YjRlZFx1YjJjOFx1YjJlNC4KK19VSV9DcmVhdGVTaWJsaW5nX2Rlc2NyaXB0aW9uPVx1YmQ4MFx1YmFhOFx1Yzc1OCBcdWMxMjBcdWQwZGRcdWI0MWMgezJ9XHVjNWQwXHVjMTFjIHsxfSBcdWFlMzBcdWIyYTVcdWM1ZDAgXHViMzAwXHVkNTVjIFx1ZDYxNVx1YzJkZCB7MH1cdWM3NTggXHVjMGM4XHViODVjXHVjNmI0IFx1ZDYxNVx1YzgxY1x1Yjk3YyBcdWI5Y2NcdWI0ZWRcdWIyYzhcdWIyZTQuCisKK19VSV9Qcm9wZXJ0eURlc2NyaXB0b3JfZGVzY3JpcHRpb249ezF9IFx1YzkxMSB7MH0KKworX1VJX0dsb2JhbEluZmx1ZW56YU1vZGVsX3R5cGU9XHVhZTAwXHViODVjXHViYzhjIFx1Yzc3OFx1ZDUwY1x1YjhlOFx1YzVkNFx1Yzc5MCBcdWJhYThcdWIzNzgKK19VSV9Vbmtub3duX3R5cGU9XHVhYzFjXHVjY2I0CisKK19VSV9Vbmtub3duX2RhdGF0eXBlPVx1YWMxMgorCitfVUlfR2xvYmFsSW5mbHVlbnphTW9kZWxfbGF0aXR1ZGVTaWdtb2lkV2lkdGhfZmVhdHVyZT1cdWM3MDRcdWIzYzQgU2lnbW9pZCBcdWQzZWQKK19VSV9HbG9iYWxJbmZsdWVuemFNb2RlbF9zZWFzb25hbE1vZHVsYXRpb25FeHBvbmVudF9mZWF0dXJlPVx1YWNjNFx1YzgwOCBcdWJjYzBcdWM4NzAgXHVjOWMwXHVjMjE4CitfVUlfR2xvYmFsSW5mbHVlbnphTW9kZWxfbW9kdWxhdGlvblBlcmlvZF9mZWF0dXJlPVx1YmNjMFx1Yzg3MCBcdWFlMzBcdWFjMDQKK19VSV9HbG9iYWxJbmZsdWVuemFNb2RlbF9tb2R1bGF0aW9uUGhhc2VTaGlmdF9mZWF0dXJlPVx1YmNjMFx1Yzg3MCBcdWIyZThcdWFjYzQgXHVjODA0XHVjNzc0CitfVUlfR2xvYmFsSW5mbHVlbnphTW9kZWxfc2Vhc29uYWxNb2R1bGF0aW9uRmxvb3JfZmVhdHVyZT1cdWFjYzRcdWM4MDggXHViY2MwXHVjODcwIFx1Y2Q1Y1x1YzgwMFx1YWMxMgorX1VJX0dsb2JhbEluZmx1ZW56YU1vZGVsX2F0dGVudWF0aW9uX2ZlYXR1cmU9XHVhYzEwXHVjMWUwCitfVUlfVW5rbm93bl9mZWF0dXJlPVx1YzljMFx1YzgxNVx1YjQxOFx1YzljMCBcdWM1NGFcdWM3NGMKKworCitfVUlfR2xvYmFsaW5mbHVlbnphbW9kZWxFZGl0b3JfbWVudT0mR2xvYmFsaW5mbHVlbnphbW9kZWwgRWRpdG9yCisKK19VSV9DcmVhdGVDaGlsZF9tZW51X2l0ZW09Jk5ldyBDaGlsZAorX1VJX0NyZWF0ZVNpYmxpbmdfbWVudV9pdGVtPU4mICBcdWQ2MTVcdWM4MWMgXHVjNzkwXHViOWU0CisKK19VSV9TaG93UHJvcGVydGllc1ZpZXdfbWVudV9pdGVtPVx1ZDQ1Y1x1YzJkYyBcdWJjMGYgXHVjMThkXHVjMTMxXHViY2Y0XHVhZTMwCitfVUlfUmVmcmVzaFZpZXdlcl9tZW51X2l0ZW09JlJlZnJlc2gKKworX1VJX1NlbGVjdGlvblBhZ2VfbGFiZWw9XHVjMTIwXHVkMGRkCitfVUlfUGFyZW50UGFnZV9sYWJlbD1cdWJkODBcdWJhYTgKK19VSV9MaXN0UGFnZV9sYWJlbD1cdWJhYTlcdWI4NWQKK19VSV9UcmVlUGFnZV9sYWJlbD1cdWIwOThcdWJiMzQKK19VSV9UYWJsZVBhZ2VfbGFiZWw9XHVkMTRjXHVjNzc0XHViZTE0CitfVUlfVHJlZVdpdGhDb2x1bW5zUGFnZV9sYWJlbD1cdWIwOThcdWJiMzRcdWM2NDAgXHVjNWY0CitfVUlfT2JqZWN0Q29sdW1uX2xhYmVsPVx1YWMxY1x1Y2NiNAorX1VJX1NlbGZDb2x1bW5fbGFiZWw9XHVjMTQwXHVkNTA0CisKK19VSV9Ob09iamVjdFNlbGVjdGVkPVx1YzU0NFx1YmIzNFx1YWM4M1x1YjNjNCBcdWM1NDggXHVjMTIwXHVkMGRkXHVkNTY4CitfVUlfU2luZ2xlT2JqZWN0U2VsZWN0ZWQ9XHVjMTIwXHVkMGRkXHVkNTVjIFx1YWMxZFx1Y2NiNCA6IHswfQorX1VJX011bHRpT2JqZWN0U2VsZWN0ZWQ9XHVjMTIwXHVkMGRkXHViNDFjIHswfSBcdWFjMWRcdWNjYjQKKworX1VJX09wZW5FZGl0b3JFcnJvcl9sYWJlbD1cdWM2MjRcdWQ1MDggXHVjNWQwXHViNTE0XHVkMTMwCisKK19VSV9XaXphcmRfY2F0ZWdvcnk9XHVjNjA4XHVjODFjIEVNRiBcdWJhYThcdWIzNzggXHVjMGRkXHVjMTMxIFx1YjljOFx1YmM5NVx1YzBhYworCitfVUlfQ3JlYXRlTW9kZWxFcnJvcl9tZXNzYWdlPVx1ZDMwY1x1Yzc3YyAnezB9ICJcdWM1ZDBcdWMxMWMgXHViYjM4XHVjODFjIFx1YmMxY1x1YzBkZAorCitfVUlfR2xvYmFsaW5mbHVlbnphbW9kZWxNb2RlbFdpemFyZF9sYWJlbD1cdWFlMDBcdWI4NWNcdWJjOGNcdWM3NzhcdWQ1MGNcdWI4ZThcdWM1ZDRcdWM3OTAgXHViYWE4XHViMzc4CitfVUlfR2xvYmFsaW5mbHVlbnphbW9kZWxNb2RlbFdpemFyZF9kZXNjcmlwdGlvbj1cdWMwYzhcdWI4NWNcdWM2YjQgR2xvYmFsaW5mbHVlbnphbW9kZWwgXHViYWE4XHViMzc4IFx1YjljY1x1YjRlNFx1YWUzMAorCitfVUlfR2xvYmFsaW5mbHVlbnphbW9kZWxFZGl0b3JfbGFiZWw9XHVhZTAwXHViODVjXHViYzhjXHVjNzc4XHVkNTBjXHViOGU4XHVjNWQ0XHVjNzkwIFx1YmFhOFx1YjM3OCBcdWQzYjhcdWM5ZDFcdWFlMzAKKworX1VJX0dsb2JhbGluZmx1ZW56YW1vZGVsRWRpdG9yRmlsZW5hbWVEZWZhdWx0QmFzZT1cdWIwOThcdWM3NTgKK19VSV9HbG9iYWxpbmZsdWVuemFtb2RlbEVkaXRvckZpbGVuYW1lRXh0ZW5zaW9ucz1cdWFlMDBcdWI4NWNcdWJjOGNcdWM5YzhcdWJjZDFcdWJhYThcdWIzNzgKKworX1VJX1dpemFyZF9sYWJlbD1cdWMwYzhcdWI4NWNcdWM2YjQKKworX1dBUk5fRmlsZW5hbWVFeHRlbnNpb249XHVkMzBjXHVjNzdjIFx1Yzc3NFx1Yjk4NFx1Yzc0MCAiLnswfSJcdWI4NWMgXHViMDVkXHViMDk4XHVjNTdjXHVkNTY4LgorX1dBUk5fRmlsZW5hbWVFeHRlbnNpb25zPVx1ZDMwY1x1Yzc3YyBcdWM3NzRcdWI5ODRcdWM3NDAgXHViMmU0XHVjNzRjIFx1ZDY1NVx1YzdhNVx1Yzc5MCBcdWM5MTEgXHVkNTU4XHViMDk4XHViOTdjIFx1YWMwMFx1YzgzOFx1YzU3Y1x1ZDU2OCA6IHswfQorCitfVUlfTW9kZWxPYmplY3Q9Jk1vZGVsIE9iamVjdAorX1VJX1hNTEVuY29kaW5nPSZYTUwgRW5jb2RpbmcKK19VSV9YTUxFbmNvZGluZ0Nob2ljZXM9VVRGIC0gOCBBU0NJSSBVVEYgLSAxNiBVVEYgLSAxNkJFIFVURiAtIDE2TEUgSVNPIC0gODg1OSAtIDEKK19VSV9XaXphcmRfaW5pdGlhbF9vYmplY3RfZGVzY3JpcHRpb249XHVjMGRkXHVjMTMxXHVkNTYwIFx1YmFhOFx1YjM3OCBcdWFjMWNcdWNjYjQgXHVjMTIwXHVkMGRkCisKK19VSV9GaWxlQ29uZmxpY3RfbGFiZWw9XHVkMzBjXHVjNzdjIFx1Y2RhOVx1YjNjYworX1dBUk5fRmlsZUNvbmZsaWN0PVx1YzgwMFx1YzdhNVx1YjQxOFx1YzljMCBcdWM1NGFcdWM3NDAgXHVjMGFjXHVkNTZkXHViNGU0XHVjNzc0IFx1ZDNiOFx1YzlkMVx1YWUzMCBcdWM2NzhcdWJkODBcdWM3NTggXHViY2MwXHVhY2JkIFx1YzBhY1x1ZDU2ZFx1YjRlNFx1YWNmYyBcdWNkYTlcdWIzY2NcdWQ1NjguIFx1Yzc3NCBcdWQzYjhcdWM5ZDFcdWFlMzBcdWM3NTggXHViY2MwXHVhY2JkIFx1YzBhY1x1ZDU2ZFx1YjRlNFx1Yzc0NCBcdWNkZThcdWMxOGMgXHVkNTU4XHVjMmRjXHVhY2EwXHVjMmI1XHViMmM4XHVhZTRjPworCisKZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmdsb2JhbGluZmx1ZW56YW1vZGVsL3BsdWdpbl96aC5wcm9wZXJ0aWVzIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZ2xvYmFsaW5mbHVlbnphbW9kZWwvcGx1Z2luX3poLnByb3BlcnRpZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjQ2YzA2MAotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmdsb2JhbGluZmx1ZW56YW1vZGVsL3BsdWdpbl96aC5wcm9wZXJ0aWVzCkBAIC0wLDAgKzEsOTMgQEAKKyMvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIyAqIENvcHlyaWdodCAoYykgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyMgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisjICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisjICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyMgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorIyAqCisjICogQ29udHJpYnV0b3JzOgorIyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworcGx1Z2luTmFtZT1TVEVNXHU1MTY4XHU3NDAzXHU2ZDQxXHU2MTFmXHU3NWJlXHU3NWM1XHU2YTIxXHU1NzhiCitwcm92aWRlck5hbWU9RWNsaXBzZS5vcmcKK2RjX2NyZWF0b3Jfa2F1Zm1hbj1KYW1lcyBLYXVmbWFuCitkY19pZGVudGllcj1TVEVNXHU3NWJlXHU3NWM1XHU1NmRlXHU2NTNlXHU2YTIxXHU1NzhiCitkY19wdWJsaXNoZXI9RWNsaXBzZVx1NTdmYVx1OTFkMVx1NGYxYQorZGNfbGljZW5zZT1FY2xpcHNlXHU1MTZjXHU1MTcxXHU4YmI4XHU1M2VmXHVmZjA4RVBMXHVmZjA5CitkY190aXRsZV9HbG9iYWxfSW5mbHVlbnphPVx1NTE2OFx1NzQwM1x1NmQ0MVx1NjExZgorZGNfZGVzY3JfR2xvYmFsX0luZmx1ZW56YT1cdTRlMDBcdTRlMmFcdTk2OGZcdTdlYWNcdTVlYTZcdTU0OGNcdTY1ZjZcdTk1ZjRcdTUzZDhcdTUzMTZcdTc2ODRcdTViNjNcdTgyODJcdTYwMjdcdTUxNjhcdTc0MDNcdTZkNDFcdTYxMWZcdTc2ODRcdTRmOGJcdTViNTAKK2RjX1NPVVJDRT1odHRwOi8vd2lraS5lY2xpcHNlLm9yZy9JbnRyb2R1Y3Rpb25fdG9fQ29tcGFydG1lbnRfTW9kZWxzXHVmZjA4XHU1NDhjXHU1M2MyXHU4MDAzXHU4ZDQ0XHU2NTk5XHU0ZTJkXHVmZjA5CisKK19VSV9DcmVhdGVDaGlsZF90ZXh0PXswfQorX1VJX0NyZWF0ZUNoaWxkX3RleHQyPXsxfSB7MH0KK19VSV9DcmVhdGVDaGlsZF90ZXh0Mz17MX0KK19VSV9DcmVhdGVDaGlsZF90b29sdGlwPVx1NTIxYlx1NWVmYVx1NTcyOHsxfSB7MH1cdTY1YjBcdTUyOWZcdTgwZmQKK19VSV9DcmVhdGVDaGlsZF9kZXNjcmlwdGlvbj1cdTRlM2FcdTkwMDlcdTViOWFcdTc2ODR7Mn1cdTc2ODR7MX1cdTcyNzlcdTYwMjdcdTY3NjVcdTUyMWJcdTVlZmFcdTRlMDBcdTRlMmFcdTY1YjBcdTc2ODR7MH1cdTViNTBcdTdjN2IKK19VSV9DcmVhdGVTaWJsaW5nX2Rlc2NyaXB0aW9uPVx1NTcyOHsxfVx1NzY4NFx1NzIzNlx1OTZjNlx1NGUyZFx1NGUzYVx1OTAwOVx1NWI5YVx1NzY4NHsyfVx1Njc2NVx1NTIxYlx1NWVmYVx1NGUwMFx1NGUyYXswfVx1N2M3Ylx1NTc4Ylx1NzY4NFx1NjViMFx1NzY4NFx1NTE0NFx1NWYxZlx1N2M3YgorCitfVUlfUHJvcGVydHlEZXNjcmlwdG9yX2Rlc2NyaXB0aW9uPXswfVx1NGVjZVx1NWM1ZXsxfQorCitfVUlfR2xvYmFsSW5mbHVlbnphTW9kZWxfdHlwZT1cdTUxNjhcdTc0MDNcdTZkNDFcdTYxMWZcdTZhMjFcdTU3OGIKK19VSV9Vbmtub3duX3R5cGU9XHU1YmY5XHU4YzYxCisKK19VSV9Vbmtub3duX2RhdGF0eXBlPVx1NGVmN1x1NTAzYworCitfVUlfR2xvYmFsSW5mbHVlbnphTW9kZWxfbGF0aXR1ZGVTaWdtb2lkV2lkdGhfZmVhdHVyZT1cdTdlYWNcdTVlYTZTIFx1NWI1N1x1NWY2Mlx1NzY4NFx1NWJiZFx1NWVhNgorX1VJX0dsb2JhbEluZmx1ZW56YU1vZGVsX3NlYXNvbmFsTW9kdWxhdGlvbkV4cG9uZW50X2ZlYXR1cmU9XHU1YjYzXHU4MjgyXHU2MDI3XHU4YzAzXHU1MjM2XHU2MzA3XHU2NTcwCitfVUlfR2xvYmFsSW5mbHVlbnphTW9kZWxfbW9kdWxhdGlvblBlcmlvZF9mZWF0dXJlPVx1OGMwM1x1NTIzNlx1NTQ2OFx1NjcxZgorX1VJX0dsb2JhbEluZmx1ZW56YU1vZGVsX21vZHVsYXRpb25QaGFzZVNoaWZ0X2ZlYXR1cmU9XHU4YzAzXHU1MjM2XHU3NmY4XHU3OWZiCitfVUlfR2xvYmFsSW5mbHVlbnphTW9kZWxfc2Vhc29uYWxNb2R1bGF0aW9uRmxvb3JfZmVhdHVyZT1cdTViNjNcdTgyODJcdTYwMjdcdThjMDNcdTUyMzZcdTVlOTVcdTVjNDIKK19VSV9HbG9iYWxJbmZsdWVuemFNb2RlbF9hdHRlbnVhdGlvbl9mZWF0dXJlPVx1ODg3MFx1NTFjZgorX1VJX1Vua25vd25fZmVhdHVyZT1cdTY3MmFcdTYzMDdcdTViOWEKKworCitfVUlfR2xvYmFsaW5mbHVlbnphbW9kZWxFZGl0b3JfbWVudT0mR2xvYmFsaW5mbHVlbnphbW9kZWwgRWRpdG9yCisKK19VSV9DcmVhdGVDaGlsZF9tZW51X2l0ZW09Jk5ldyBDaGlsZAorX1VJX0NyZWF0ZVNpYmxpbmdfbWVudV9pdGVtPVx1NjViMFx1NzUxZlx1NjIxMFx1NGUwMFx1NGUyYVx1NTE0NFx1NWYxZlx1N2M3YgorCitfVUlfU2hvd1Byb3BlcnRpZXNWaWV3X21lbnVfaXRlbT1cdTY2M2VcdTc5M2FcdTU0OGNcdTVjNWVcdTYwMjdcdTY3ZTVcdTc3MGIKK19VSV9SZWZyZXNoVmlld2VyX21lbnVfaXRlbT0mUmVmcmVzaAorCitfVUlfU2VsZWN0aW9uUGFnZV9sYWJlbD1cdTkwMDlcdTYyZTkKK19VSV9QYXJlbnRQYWdlX2xhYmVsPVx1NWJiNlx1OTU3ZgorX1VJX0xpc3RQYWdlX2xhYmVsPVx1NzZlZVx1NWY1NQorX1VJX1RyZWVQYWdlX2xhYmVsPVx1NjgxMQorX1VJX1RhYmxlUGFnZV9sYWJlbD1cdTg4NjgKK19VSV9UcmVlV2l0aENvbHVtbnNQYWdlX2xhYmVsPVx1NTIwNlx1NTIxN1x1NzY4NFx1NjgxMQorX1VJX09iamVjdENvbHVtbl9sYWJlbD1cdTViZjlcdThjNjEKK19VSV9TZWxmQ29sdW1uX2xhYmVsPVx1ODFlYVx1NWRmMQorCitfVUlfTm9PYmplY3RTZWxlY3RlZD1cdTY1ZTBcdTkwMDlcdTViOWFcdTUxODVcdTViYjkKK19VSV9TaW5nbGVPYmplY3RTZWxlY3RlZD1cdTkwMDlcdTYyZTlcdTViZjlcdThjNjFcdWZmMWF7MH0KK19VSV9NdWx0aU9iamVjdFNlbGVjdGVkPVx1OTAwOVx1NjJlOXswfVx1NWJmOVx1OGM2MQorCitfVUlfT3BlbkVkaXRvckVycm9yX2xhYmVsPVx1NjI1M1x1NWYwMFx1N2YxNlx1OGY5MVx1NTY2OAorCitfVUlfV2l6YXJkX2NhdGVnb3J5PVx1NGY4Ylx1NTk4MkVNRlx1NmEyMVx1NTc4Ylx1NTIxYlx1NWVmYVx1NTQxMVx1NWJmYworCitfVUlfQ3JlYXRlTW9kZWxFcnJvcl9tZXNzYWdlPVx1NTcyOFx1NjU4N1x1NGVmNlx1MjAxY3swfVx1MjAxZFx1NGUyZFx1OTA0N1x1NTIzMFx1NzY4NFx1OTVlZVx1OTg5OAorCitfVUlfR2xvYmFsaW5mbHVlbnphbW9kZWxNb2RlbFdpemFyZF9sYWJlbD1cdTUxNjhcdTc0MDNcdTZkNDFcdTYxMWZcdTZhMjFcdTU3OGIKK19VSV9HbG9iYWxpbmZsdWVuemFtb2RlbE1vZGVsV2l6YXJkX2Rlc2NyaXB0aW9uPVx1NTIxYlx1NWVmYVx1NGUwMFx1NGUyYVx1NjViMFx1NzY4NFx1NTE2OFx1NzQwM1x1ODMwM1x1NTZmNFx1NmQ0MVx1NjExZlx1NmEyMVx1NTc4YgorCitfVUlfR2xvYmFsaW5mbHVlbnphbW9kZWxFZGl0b3JfbGFiZWw9XHU1MTY4XHU3NDAzXHU2ZDQxXHU2MTFmXHU2YTIxXHU1NzhiXHU3ZjE2XHU4ZjkxXHU1NjY4CisKK19VSV9HbG9iYWxpbmZsdWVuemFtb2RlbEVkaXRvckZpbGVuYW1lRGVmYXVsdEJhc2U9XHU2MjExXHU3Njg0CitfVUlfR2xvYmFsaW5mbHVlbnphbW9kZWxFZGl0b3JGaWxlbmFtZUV4dGVuc2lvbnM9XHU1MTY4XHU3NDAzXHU2MDI3XHU3Njg0XHU2ZDQxXHU2MTFmXHU2YTIxXHU1NzhiCisKK19VSV9XaXphcmRfbGFiZWw9XHU2NWIwXHU1ZWZhCisKK19XQVJOX0ZpbGVuYW1lRXh0ZW5zaW9uPVx1NjU4N1x1NGVmNlx1NTQwZFx1NWZjNVx1OTg3Ylx1NGVlNSd7MH0gJydcdTdlZDNcdTVjM2UKK19XQVJOX0ZpbGVuYW1lRXh0ZW5zaW9ucz1cdTY1ODdcdTRlZjZcdTU0MGRcdTVmYzVcdTk4N2JcdTUxNzdcdTY3MDlcdTRlZTVcdTRlMGJcdTYyNjlcdTVjNTVcdTU0MGRcdTRlNGJcdTRlMDBcdWZmMWF7MH0KKworX1VJX01vZGVsT2JqZWN0PSZNb2RlbCBPYmplY3QKK19VSV9YTUxFbmNvZGluZz0mWE1MIEVuY29kaW5nCitfVUlfWE1MRW5jb2RpbmdDaG9pY2VzPVVURi04IEFTQ0lJIFVURi0xNiBVVEYtMTZCRSBVVEYtMTZMRSBJU08tODg1OS0xCitfVUlfV2l6YXJkX2luaXRpYWxfb2JqZWN0X2Rlc2NyaXB0aW9uPVx1OTAwOVx1NjJlOVx1NTIxYlx1NWVmYVx1NGUwMFx1NGUyYVx1NmEyMVx1NTc4Ylx1NWJmOVx1OGM2MQorCitfVUlfRmlsZUNvbmZsaWN0X2xhYmVsPVx1NjU4N1x1NGVmNlx1NTFiMlx1N2E4MQorX1dBUk5fRmlsZUNvbmZsaWN0PVx1NjcwOVx1NjcyYVx1NGZkZFx1NWI1OFx1NzY4NFx1NjZmNFx1NjUzOVx1NGUwZVx1N2YxNlx1OGY5MVx1NTY2OFx1NTkxNlx1NzY4NFx1NjZmNFx1NjUzOVx1NTFiMlx1N2E4MVx1MzAwMlx1NGY2MFx1NjBmM1x1NjUzZVx1NWYwM1x1OGZkOVx1NGUyYVx1N2YxNlx1OGY5MVx1NTY2OFx1NzY4NFx1NjZmNFx1NjUzOVx1NTQxN1x1ZmYxZgorCisKZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmdsb2JhbGluZmx1ZW56YW1vZGVsL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvZ2xvYmFsaW5mbHVlbnphbW9kZWwvR2xvYmFsSW5mbHVlbnphTW9kZWwuamF2YSBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmdsb2JhbGluZmx1ZW56YW1vZGVsL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvZ2xvYmFsaW5mbHVlbnphbW9kZWwvR2xvYmFsSW5mbHVlbnphTW9kZWwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45N2ExZWEwCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZ2xvYmFsaW5mbHVlbnphbW9kZWwvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9nbG9iYWxpbmZsdWVuemFtb2RlbC9HbG9iYWxJbmZsdWVuemFNb2RlbC5qYXZhCkBAIC0wLDAgKzEsMTUxIEBACisvKioNCisgKiANCisgKi8NCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5nbG9iYWxpbmZsdWVuemFtb2RlbDsNCisNCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyAqIENvcHlyaWdodCAoYykgMjAwOSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4NCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzDQorICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wDQorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQNCisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbA0KKyAqDQorICogQ29udHJpYnV0b3JzOg0KKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24NCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCisNCisNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlN0b2NoYXN0aWNTSVJEaXNlYXNlTW9kZWw7DQorDQorDQorLyoqDQorICogVGhpcyBpbnRlcmZhY2UgaXMgYW4gRU1GIE1vZGVsLg0KKyAqIA0KKyAqIEBtb2RlbA0KKyAqLw0KK3B1YmxpYyBpbnRlcmZhY2UgR2xvYmFsSW5mbHVlbnphTW9kZWwgIGV4dGVuZHMgU3RvY2hhc3RpY1NJUkRpc2Vhc2VNb2RlbCB7DQorDQorCQ0KKy8qKg0KKyAqIExhdGl0dWRlIG9mIHRoZSBUcm9waWMgb2YgQ2FuY2VyIGluIERlZ3JlZXMgKFRyb3BpYyBvZiBDYXByaWNvcm4gaXMgLXZlIG9mIHRoaXMpLg0KKyAqLw0KK3B1YmxpYyBzdGF0aWMgZmluYWwgZG91YmxlIFRST1BJQ19PRl9DQU5DRVJfTEFUSVRVREUgPSAyMy40Mzk0NDQ7DQorDQorDQorLyoqDQorICogVGhlIG1vZHVsYXRpb24gb2YgdGhlIHRyYW5zbWlzc2lvbiBjb2VmZmljaWVudCBvZiBpbmZsdWVuemEgaXMgTGF0aXR1ZGUgZGVwZW5kZW50Lg0KKyAqIFdlIG1vZGVsIHRoaXMgd2l0aCBhIHNpZ21vaWQgZnVuY3Rpb24gdGhhdCBnb2VzIGZyb20gemVybyB0byBvbmUNCisgKiB3aXRoIGNlbnRlciBhdCB0aGUgdHJvcGljIG9mIGNhbmNlciwgYW5kIHRoZSB0cm9waWMgb2YgY2Fwcmljb3JuLg0KKyAqIFRoZSBkZWZhdWx0IHdpZHRoIGZhY3RvciBpcyA0LjUgd2hpY2ggZ2l2ZXMgdGhlIHNpZ21vaWQgYSBzbG9wZSBwcm9wb3J0aW9uYWwgdG8gdGhlIA0KKyAqIG9ic2VydmVkIHZhcmlhdGlvbiBpbiBzZWFzb25hbCBmbHUgZXBpZGVtaWNzIGFzIGEgZnVuY3Rpb24gb2YgbGF0aXR1ZGUgaW4gQnJhemlsLg0KKyAqIFNlZTogaHR0cDovL2FqZS5veGZvcmRqb3VybmFscy5vcmcvY2dpL2NvbnRlbnQvZnVsbC8xNjUvMTIvMTQzNA0KKyAqIA0KKyAqIEFzIG91ciBzaWdtb2lkIHdlIHVzZSB0aGUgYmFzaWMgbG9naXN0aWMgZnVuY3Rpb24gMS8xK2V4cCgteCkgDQorICogc28NCisgKiBTaWdtb2lkIEZ1bmN0aW9uIChsYXQpICA9IFNlYXNvbmFsTW9kdWxhdGlvbkZsb29yLygxLjAgKyBleHAoKFRST1BJQ19PRl9DQU5DRVJfTEFUSVRVREUgLSBhYnMoTGF0KSkuLzQuNSkgKTsNCisgKiBUaGlzIGlzIG5lYXIgemVybyBuZWFyIHRoZSBlcXVhdG9yIGFuZCBnb2VzIHRvIFNlYXNvbmFsTW9kdWxhdGlvbkZsb29yIGFib3ZlIGFuZCBiZWxvdyANCisgKiB0aGUgdHJvcGljcy4NCisgKiANCisgKiBAcmV0dXJuIHRoZSBMYXRpdHVkZSBTaWdtb2lkIHdpZHRoDQorICogQG1vZGVsIGRlZmF1bHQ9IjQuNTAiDQorICovDQorZG91YmxlIGdldExhdGl0dWRlU2lnbW9pZFdpZHRoKCk7DQorDQorLyoqDQorCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5nbG9iYWxpbmZsdWVuemFtb2RlbC5HbG9iYWxJbmZsdWVuemFNb2RlbCNnZXRMYXRpdHVkZVNpZ21vaWRXaWR0aCA8ZW0+TGF0aXR1ZGUgU2lnbW9pZCBXaWR0aDwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+TGF0aXR1ZGUgU2lnbW9pZCBXaWR0aDwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIEBzZWUgI2dldExhdGl0dWRlU2lnbW9pZFdpZHRoKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJdm9pZCBzZXRMYXRpdHVkZVNpZ21vaWRXaWR0aChkb3VibGUgdmFsdWUpOw0KKw0KKy8qKg0KKwkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5TZWFzb25hbCBNb2R1bGF0aW9uIEV4cG9uZW50PC9iPjwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIGlzIDxjb2RlPiIyLjAiPC9jb2RlPi4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisgKiA8cD4NCisgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5TZWFzb25hbCBNb2R1bGF0aW9uIEV4cG9uZW50PC9lbT4nIGF0dHJpYnV0ZSBpc24ndCBjbGVhciwNCisgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uDQorICogPC9wPg0KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5TZWFzb25hbCBNb2R1bGF0aW9uIEV4cG9uZW50PC9lbT4nIGF0dHJpYnV0ZS4NCisJICogQHNlZSAjc2V0U2Vhc29uYWxNb2R1bGF0aW9uRXhwb25lbnQoZG91YmxlKQ0KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5nbG9iYWxpbmZsdWVuemFtb2RlbC5HbG9iYWxpbmZsdWVuemFtb2RlbFBhY2thZ2UjZ2V0R2xvYmFsSW5mbHVlbnphTW9kZWxfU2Vhc29uYWxNb2R1bGF0aW9uRXhwb25lbnQoKQ0KKwkgKiBAbW9kZWwgZGVmYXVsdD0iMi4wIg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KK2RvdWJsZSBnZXRTZWFzb25hbE1vZHVsYXRpb25FeHBvbmVudCgpOw0KKw0KKy8qKg0KKwkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZ2xvYmFsaW5mbHVlbnphbW9kZWwuR2xvYmFsSW5mbHVlbnphTW9kZWwjZ2V0U2Vhc29uYWxNb2R1bGF0aW9uRXhwb25lbnQgPGVtPlNlYXNvbmFsIE1vZHVsYXRpb24gRXhwb25lbnQ8L2VtPn0nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+U2Vhc29uYWwgTW9kdWxhdGlvbiBFeHBvbmVudDwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIEBzZWUgI2dldFNlYXNvbmFsTW9kdWxhdGlvbkV4cG9uZW50KCkNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCit2b2lkIHNldFNlYXNvbmFsTW9kdWxhdGlvbkV4cG9uZW50KGRvdWJsZSB2YWx1ZSk7DQorDQorLyoqDQorICogQHJldHVybiB0aGUgZGVmYXVsdCBtb2R1bGF0aW9uIHBlcmlvZCBpcyAxIHllYXIuIFRoaXMgZGVmYXVsdCB2YWx1ZSBhc3N1bWVzIHRpbWUgc3RlcHMgaW4gZGF5cy4gTm90ZSB0aGF0IG9uZSB5ZWFyID0gMzY1LjI1NjM2MzA1MSBkYXlzIA0KKyAqIEBtb2RlbCBkZWZhdWx0PSIzNjUuMjU2MzYzMDUxIg0KKyAqLw0KK2RvdWJsZSBnZXRNb2R1bGF0aW9uUGVyaW9kKCk7DQorDQorLyoqDQorCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5nbG9iYWxpbmZsdWVuemFtb2RlbC5HbG9iYWxJbmZsdWVuemFNb2RlbCNnZXRNb2R1bGF0aW9uUGVyaW9kIDxlbT5Nb2R1bGF0aW9uIFBlcmlvZDwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5Nb2R1bGF0aW9uIFBlcmlvZDwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIEBzZWUgI2dldE1vZHVsYXRpb25QZXJpb2QoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KK3ZvaWQgc2V0TW9kdWxhdGlvblBlcmlvZChkb3VibGUgdmFsdWUpOw0KKw0KKy8qKg0KKyAqIEByZXR1cm4gdGhlIG1vZHVsYXRpb24gcGhhc2Ugc2hpZnQgc2hpZnQuIA0KKyAqIEBtb2RlbCBkZWZhdWx0PSIwLjAiDQorICovDQorZG91YmxlIGdldE1vZHVsYXRpb25QaGFzZVNoaWZ0KCk7DQorDQorLyoqDQorCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5nbG9iYWxpbmZsdWVuemFtb2RlbC5HbG9iYWxJbmZsdWVuemFNb2RlbCNnZXRNb2R1bGF0aW9uUGhhc2VTaGlmdCA8ZW0+TW9kdWxhdGlvbiBQaGFzZSBTaGlmdDwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5Nb2R1bGF0aW9uIFBoYXNlIFNoaWZ0PC9lbT4nIGF0dHJpYnV0ZS4NCisJICogQHNlZSAjZ2V0TW9kdWxhdGlvblBoYXNlU2hpZnQoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KK3ZvaWQgc2V0TW9kdWxhdGlvblBoYXNlU2hpZnQoZG91YmxlIHZhbHVlKTsNCisNCisvKioNCisJICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+U2Vhc29uYWwgTW9kdWxhdGlvbiBGbG9vcjwvYj48L2VtPicgYXR0cmlidXRlLg0KKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyA8Y29kZT4iMC42IjwvY29kZT4uDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorICogPHA+DQorICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+U2Vhc29uYWwgTW9kdWxhdGlvbiBGbG9vcjwvZW0+JyBhdHRyaWJ1dGUgaXNuJ3QgY2xlYXIsDQorICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLg0KKyAqIDwvcD4NCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+U2Vhc29uYWwgTW9kdWxhdGlvbiBGbG9vcjwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIEBzZWUgI3NldFNlYXNvbmFsTW9kdWxhdGlvbkZsb29yKGRvdWJsZSkNCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZ2xvYmFsaW5mbHVlbnphbW9kZWwuR2xvYmFsaW5mbHVlbnphbW9kZWxQYWNrYWdlI2dldEdsb2JhbEluZmx1ZW56YU1vZGVsX1NlYXNvbmFsTW9kdWxhdGlvbkZsb29yKCkNCisJICogQG1vZGVsIGRlZmF1bHQ9IjAuNiINCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCitkb3VibGUgZ2V0U2Vhc29uYWxNb2R1bGF0aW9uRmxvb3IoKTsNCisNCisvKioNCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmdsb2JhbGluZmx1ZW56YW1vZGVsLkdsb2JhbEluZmx1ZW56YU1vZGVsI2dldFNlYXNvbmFsTW9kdWxhdGlvbkZsb29yIDxlbT5TZWFzb25hbCBNb2R1bGF0aW9uIEZsb29yPC9lbT59JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPlNlYXNvbmFsIE1vZHVsYXRpb24gRmxvb3I8L2VtPicgYXR0cmlidXRlLg0KKwkgKiBAc2VlICNnZXRTZWFzb25hbE1vZHVsYXRpb25GbG9vcigpDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQordm9pZCBzZXRTZWFzb25hbE1vZHVsYXRpb25GbG9vcihkb3VibGUgdmFsdWUpOw0KK30gLy8gR2xvYmFsSW5mbHVlbnphTW9kZWwNCisNCisNCmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5nbG9iYWxpbmZsdWVuemFtb2RlbC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL2dsb2JhbGluZmx1ZW56YW1vZGVsL0dsb2JhbGluZmx1ZW56YW1vZGVsRmFjdG9yeS5qYXZhIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZ2xvYmFsaW5mbHVlbnphbW9kZWwvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9nbG9iYWxpbmZsdWVuemFtb2RlbC9HbG9iYWxpbmZsdWVuemFtb2RlbEZhY3RvcnkuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZDI1NmJhCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZ2xvYmFsaW5mbHVlbnphbW9kZWwvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9nbG9iYWxpbmZsdWVuemFtb2RlbC9HbG9iYWxpbmZsdWVuemFtb2RlbEZhY3RvcnkuamF2YQpAQCAtMCwwICsxLDUxIEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5nbG9iYWxpbmZsdWVuemFtb2RlbDsNCisNCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyAqIENvcHlyaWdodCAoYykgMjAwOSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4NCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzDQorICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wDQorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQNCisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbA0KKyAqDQorICogQ29udHJpYnV0b3JzOg0KKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24NCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCisNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVGYWN0b3J5Ow0KKw0KKy8qKg0KKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorICogVGhlIDxiPkZhY3Rvcnk8L2I+IGZvciB0aGUgbW9kZWwuDQorICogSXQgcHJvdmlkZXMgYSBjcmVhdGUgbWV0aG9kIGZvciBlYWNoIG5vbi1hYnN0cmFjdCBjbGFzcyBvZiB0aGUgbW9kZWwuDQorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZ2xvYmFsaW5mbHVlbnphbW9kZWwuR2xvYmFsaW5mbHVlbnphbW9kZWxQYWNrYWdlDQorICogQGdlbmVyYXRlZA0KKyAqLw0KK3B1YmxpYyBpbnRlcmZhY2UgR2xvYmFsaW5mbHVlbnphbW9kZWxGYWN0b3J5IGV4dGVuZHMgRUZhY3Rvcnkgew0KKwkvKioNCisJICogVGhlIHNpbmdsZXRvbiBpbnN0YW5jZSBvZiB0aGUgZmFjdG9yeS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCUdsb2JhbGluZmx1ZW56YW1vZGVsRmFjdG9yeSBlSU5TVEFOQ0UgPSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZ2xvYmFsaW5mbHVlbnphbW9kZWwuaW1wbC5HbG9iYWxpbmZsdWVuemFtb2RlbEZhY3RvcnlJbXBsLmluaXQoKTsNCisNCisJLyoqDQorCSAqIFJldHVybnMgYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+R2xvYmFsIEluZmx1ZW56YSBNb2RlbDwvZW0+Jy4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEByZXR1cm4gYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+R2xvYmFsIEluZmx1ZW56YSBNb2RlbDwvZW0+Jy4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJR2xvYmFsSW5mbHVlbnphTW9kZWwgY3JlYXRlR2xvYmFsSW5mbHVlbnphTW9kZWwoKTsNCisNCisJLyoqDQorCSAqIFJldHVybnMgdGhlIHBhY2thZ2Ugc3VwcG9ydGVkIGJ5IHRoaXMgZmFjdG9yeS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEByZXR1cm4gdGhlIHBhY2thZ2Ugc3VwcG9ydGVkIGJ5IHRoaXMgZmFjdG9yeS4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJR2xvYmFsaW5mbHVlbnphbW9kZWxQYWNrYWdlIGdldEdsb2JhbGluZmx1ZW56YW1vZGVsUGFja2FnZSgpOw0KKw0KK30gLy9HbG9iYWxpbmZsdWVuemFtb2RlbEZhY3RvcnkNCmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5nbG9iYWxpbmZsdWVuemFtb2RlbC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL2dsb2JhbGluZmx1ZW56YW1vZGVsL0dsb2JhbGluZmx1ZW56YW1vZGVsUGFja2FnZS5qYXZhIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZ2xvYmFsaW5mbHVlbnphbW9kZWwvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9nbG9iYWxpbmZsdWVuemFtb2RlbC9HbG9iYWxpbmZsdWVuemFtb2RlbFBhY2thZ2UuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MWJjZGM5Ci0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZ2xvYmFsaW5mbHVlbnphbW9kZWwvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9nbG9iYWxpbmZsdWVuemFtb2RlbC9HbG9iYWxpbmZsdWVuemFtb2RlbFBhY2thZ2UuamF2YQpAQCAtMCwwICsxLDQ4NyBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZ2xvYmFsaW5mbHVlbnphbW9kZWw7DQorDQorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisgKiBDb3B5cmlnaHQgKGMpIDIwMDkgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuDQorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscw0KKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMA0KKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0DQorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwNCisgKg0KKyAqIENvbnRyaWJ1dG9yczoNCisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uDQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQorDQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQXR0cmlidXRlOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRVBhY2thZ2U7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZFBhY2thZ2U7DQorDQorLyoqDQorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisgKiBUaGUgPGI+UGFja2FnZTwvYj4gZm9yIHRoZSBtb2RlbC4NCisgKiBJdCBjb250YWlucyBhY2Nlc3NvcnMgZm9yIHRoZSBtZXRhIG9iamVjdHMgdG8gcmVwcmVzZW50DQorICogPHVsPg0KKyAqICAgPGxpPmVhY2ggY2xhc3MsPC9saT4NCisgKiAgIDxsaT5lYWNoIGZlYXR1cmUgb2YgZWFjaCBjbGFzcyw8L2xpPg0KKyAqICAgPGxpPmVhY2ggZW51bSw8L2xpPg0KKyAqICAgPGxpPmFuZCBlYWNoIGRhdGEgdHlwZTwvbGk+DQorICogPC91bD4NCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5nbG9iYWxpbmZsdWVuemFtb2RlbC5HbG9iYWxpbmZsdWVuemFtb2RlbEZhY3RvcnkNCisgKiBAbW9kZWwga2luZD0icGFja2FnZSINCisgKiBAZ2VuZXJhdGVkDQorICovDQorcHVibGljIGludGVyZmFjZSBHbG9iYWxpbmZsdWVuemFtb2RlbFBhY2thZ2UgZXh0ZW5kcyBFUGFja2FnZSB7DQorCS8qKg0KKwkgKiBUaGUgcGFja2FnZSBuYW1lLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJU3RyaW5nIGVOQU1FID0gImdsb2JhbGluZmx1ZW56YW1vZGVsIjsNCisNCisJLyoqDQorCSAqIFRoZSBwYWNrYWdlIG5hbWVzcGFjZSBVUkkuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlTdHJpbmcgZU5TX1VSSSA9ICJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9nbG9iYWxpbmZsdWVuemFtb2RlbC5lY29yZSI7DQorDQorCS8qKg0KKwkgKiBUaGUgcGFja2FnZSBuYW1lc3BhY2UgbmFtZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCVN0cmluZyBlTlNfUFJFRklYID0gIm9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5nbG9iYWxpbmZsdWVuemFtb2RlbCI7DQorDQorCS8qKg0KKwkgKiBUaGUgc2luZ2xldG9uIGluc3RhbmNlIG9mIHRoZSBwYWNrYWdlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJR2xvYmFsaW5mbHVlbnphbW9kZWxQYWNrYWdlIGVJTlNUQU5DRSA9IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5nbG9iYWxpbmZsdWVuemFtb2RlbC5pbXBsLkdsb2JhbGluZmx1ZW56YW1vZGVsUGFja2FnZUltcGwuaW5pdCgpOw0KKw0KKwkvKioNCisJICogVGhlIG1ldGEgb2JqZWN0IGlkIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZ2xvYmFsaW5mbHVlbnphbW9kZWwuaW1wbC5HbG9iYWxJbmZsdWVuemFNb2RlbEltcGwgPGVtPkdsb2JhbCBJbmZsdWVuemEgTW9kZWw8L2VtPn0nIGNsYXNzLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZ2xvYmFsaW5mbHVlbnphbW9kZWwuaW1wbC5HbG9iYWxJbmZsdWVuemFNb2RlbEltcGwNCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZ2xvYmFsaW5mbHVlbnphbW9kZWwuaW1wbC5HbG9iYWxpbmZsdWVuemFtb2RlbFBhY2thZ2VJbXBsI2dldEdsb2JhbEluZmx1ZW56YU1vZGVsKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJaW50IEdMT0JBTF9JTkZMVUVOWkFfTU9ERUwgPSAwOw0KKw0KKwkvKioNCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlVSSTwvYj48L2VtPicgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJaW50IEdMT0JBTF9JTkZMVUVOWkFfTU9ERUxfX1VSSSA9IFN0YW5kYXJkUGFja2FnZS5TVE9DSEFTVElDX1NJUl9ESVNFQVNFX01PREVMX19VUkk7DQorDQorCS8qKg0KKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VHlwZSBVUkk8L2I+PC9lbT4nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCWludCBHTE9CQUxfSU5GTFVFTlpBX01PREVMX19UWVBFX1VSSSA9IFN0YW5kYXJkUGFja2FnZS5TVE9DSEFTVElDX1NJUl9ESVNFQVNFX01PREVMX19UWVBFX1VSSTsNCisNCisJLyoqDQorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5EdWJsaW4gQ29yZTwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJaW50IEdMT0JBTF9JTkZMVUVOWkFfTU9ERUxfX0RVQkxJTl9DT1JFID0gU3RhbmRhcmRQYWNrYWdlLlNUT0NIQVNUSUNfU0lSX0RJU0VBU0VfTU9ERUxfX0RVQkxJTl9DT1JFOw0KKw0KKwkvKioNCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkxhYmVscyBUbyBVcGRhdGU8L2I+PC9lbT4nIHJlZmVyZW5jZSBsaXN0Lg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJaW50IEdMT0JBTF9JTkZMVUVOWkFfTU9ERUxfX0xBQkVMU19UT19VUERBVEUgPSBTdGFuZGFyZFBhY2thZ2UuU1RPQ0hBU1RJQ19TSVJfRElTRUFTRV9NT0RFTF9fTEFCRUxTX1RPX1VQREFURTsNCisNCisJLyoqDQorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5HcmFwaDwvYj48L2VtPicgY29udGFpbmVyIHJlZmVyZW5jZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCWludCBHTE9CQUxfSU5GTFVFTlpBX01PREVMX19HUkFQSCA9IFN0YW5kYXJkUGFja2FnZS5TVE9DSEFTVElDX1NJUl9ESVNFQVNFX01PREVMX19HUkFQSDsNCisNCisJLyoqDQorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5FbmFibGVkPC9iPjwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqIEBvcmRlcmVkDQorCSAqLw0KKwlpbnQgR0xPQkFMX0lORkxVRU5aQV9NT0RFTF9fRU5BQkxFRCA9IFN0YW5kYXJkUGFja2FnZS5TVE9DSEFTVElDX1NJUl9ESVNFQVNFX01PREVMX19FTkFCTEVEOw0KKw0KKwkvKioNCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkdyYXBoIERlY29yYXRlZDwvYj48L2VtPicgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJaW50IEdMT0JBTF9JTkZMVUVOWkFfTU9ERUxfX0dSQVBIX0RFQ09SQVRFRCA9IFN0YW5kYXJkUGFja2FnZS5TVE9DSEFTVElDX1NJUl9ESVNFQVNFX01PREVMX19HUkFQSF9ERUNPUkFURUQ7DQorDQorCS8qKg0KKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+UHJvZ3Jlc3M8L2I+PC9lbT4nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCWludCBHTE9CQUxfSU5GTFVFTlpBX01PREVMX19QUk9HUkVTUyA9IFN0YW5kYXJkUGFja2FnZS5TVE9DSEFTVElDX1NJUl9ESVNFQVNFX01PREVMX19QUk9HUkVTUzsNCisNCisJLyoqDQorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5Qb3B1bGF0aW9uIElkZW50aWZpZXI8L2I+PC9lbT4nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCWludCBHTE9CQUxfSU5GTFVFTlpBX01PREVMX19QT1BVTEFUSU9OX0lERU5USUZJRVIgPSBTdGFuZGFyZFBhY2thZ2UuU1RPQ0hBU1RJQ19TSVJfRElTRUFTRV9NT0RFTF9fUE9QVUxBVElPTl9JREVOVElGSUVSOw0KKw0KKwkvKioNCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlRpbWUgUGVyaW9kPC9iPjwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqIEBvcmRlcmVkDQorCSAqLw0KKwlpbnQgR0xPQkFMX0lORkxVRU5aQV9NT0RFTF9fVElNRV9QRVJJT0QgPSBTdGFuZGFyZFBhY2thZ2UuU1RPQ0hBU1RJQ19TSVJfRElTRUFTRV9NT0RFTF9fVElNRV9QRVJJT0Q7DQorDQorCS8qKg0KKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RGlzZWFzZSBOYW1lPC9iPjwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqIEBvcmRlcmVkDQorCSAqLw0KKwlpbnQgR0xPQkFMX0lORkxVRU5aQV9NT0RFTF9fRElTRUFTRV9OQU1FID0gU3RhbmRhcmRQYWNrYWdlLlNUT0NIQVNUSUNfU0lSX0RJU0VBU0VfTU9ERUxfX0RJU0VBU0VfTkFNRTsNCisNCisJLyoqDQorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5GaW5pdGUgRGlmZmVyZW5jZTwvYj48L2VtPicgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJaW50IEdMT0JBTF9JTkZMVUVOWkFfTU9ERUxfX0ZJTklURV9ESUZGRVJFTkNFID0gU3RhbmRhcmRQYWNrYWdlLlNUT0NIQVNUSUNfU0lSX0RJU0VBU0VfTU9ERUxfX0ZJTklURV9ESUZGRVJFTkNFOw0KKw0KKwkvKioNCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkZyZXF1ZW5jeSBEZXBlbmRlbnQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCWludCBHTE9CQUxfSU5GTFVFTlpBX01PREVMX19GUkVRVUVOQ1lfREVQRU5ERU5UID0gU3RhbmRhcmRQYWNrYWdlLlNUT0NIQVNUSUNfU0lSX0RJU0VBU0VfTU9ERUxfX0ZSRVFVRU5DWV9ERVBFTkRFTlQ7DQorDQorCS8qKg0KKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+UmVmZXJlbmNlIFBvcHVsYXRpb24gRGVuc2l0eTwvYj48L2VtPicgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJaW50IEdMT0JBTF9JTkZMVUVOWkFfTU9ERUxfX1JFRkVSRU5DRV9QT1BVTEFUSU9OX0RFTlNJVFkgPSBTdGFuZGFyZFBhY2thZ2UuU1RPQ0hBU1RJQ19TSVJfRElTRUFTRV9NT0RFTF9fUkVGRVJFTkNFX1BPUFVMQVRJT05fREVOU0lUWTsNCisNCisJLyoqDQorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5Sb2FkIE5ldHdvcmsgSW5mZWN0aW91cyBQcm9wb3J0aW9uPC9iPjwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqIEBvcmRlcmVkDQorCSAqLw0KKwlpbnQgR0xPQkFMX0lORkxVRU5aQV9NT0RFTF9fUk9BRF9ORVRXT1JLX0lORkVDVElPVVNfUFJPUE9SVElPTiA9IFN0YW5kYXJkUGFja2FnZS5TVE9DSEFTVElDX1NJUl9ESVNFQVNFX01PREVMX19ST0FEX05FVFdPUktfSU5GRUNUSU9VU19QUk9QT1JUSU9OOw0KKw0KKwkvKioNCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkNoYXJhY3RlcmlzdGljIE1peGluZyBEaXN0YW5jZTwvYj48L2VtPicgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJaW50IEdMT0JBTF9JTkZMVUVOWkFfTU9ERUxfX0NIQVJBQ1RFUklTVElDX01JWElOR19ESVNUQU5DRSA9IFN0YW5kYXJkUGFja2FnZS5TVE9DSEFTVElDX1NJUl9ESVNFQVNFX01PREVMX19DSEFSQUNURVJJU1RJQ19NSVhJTkdfRElTVEFOQ0U7DQorDQorCS8qKg0KKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VHJhbnNtaXNzaW9uIFJhdGU8L2I+PC9lbT4nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCWludCBHTE9CQUxfSU5GTFVFTlpBX01PREVMX19UUkFOU01JU1NJT05fUkFURSA9IFN0YW5kYXJkUGFja2FnZS5TVE9DSEFTVElDX1NJUl9ESVNFQVNFX01PREVMX19UUkFOU01JU1NJT05fUkFURTsNCisNCisJLyoqDQorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5Ob24gTGluZWFyaXR5IENvZWZmaWNpZW50PC9iPjwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqIEBvcmRlcmVkDQorCSAqLw0KKwlpbnQgR0xPQkFMX0lORkxVRU5aQV9NT0RFTF9fTk9OX0xJTkVBUklUWV9DT0VGRklDSUVOVCA9IFN0YW5kYXJkUGFja2FnZS5TVE9DSEFTVElDX1NJUl9ESVNFQVNFX01PREVMX19OT05fTElORUFSSVRZX0NPRUZGSUNJRU5UOw0KKw0KKwkvKioNCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlJlY292ZXJ5IFJhdGU8L2I+PC9lbT4nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCWludCBHTE9CQUxfSU5GTFVFTlpBX01PREVMX19SRUNPVkVSWV9SQVRFID0gU3RhbmRhcmRQYWNrYWdlLlNUT0NIQVNUSUNfU0lSX0RJU0VBU0VfTU9ERUxfX1JFQ09WRVJZX1JBVEU7DQorDQorCS8qKg0KKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+SW5mZWN0aW91cyBNb3J0YWxpdHkgUmF0ZTwvYj48L2VtPicgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJaW50IEdMT0JBTF9JTkZMVUVOWkFfTU9ERUxfX0lORkVDVElPVVNfTU9SVEFMSVRZX1JBVEUgPSBTdGFuZGFyZFBhY2thZ2UuU1RPQ0hBU1RJQ19TSVJfRElTRUFTRV9NT0RFTF9fSU5GRUNUSU9VU19NT1JUQUxJVFlfUkFURTsNCisNCisJLyoqDQorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5JbW11bml0eSBMb3NzIFJhdGU8L2I+PC9lbT4nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCWludCBHTE9CQUxfSU5GTFVFTlpBX01PREVMX19JTU1VTklUWV9MT1NTX1JBVEUgPSBTdGFuZGFyZFBhY2thZ2UuU1RPQ0hBU1RJQ19TSVJfRElTRUFTRV9NT0RFTF9fSU1NVU5JVFlfTE9TU19SQVRFOw0KKw0KKwkvKioNCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlNlZWQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCWludCBHTE9CQUxfSU5GTFVFTlpBX01PREVMX19TRUVEID0gU3RhbmRhcmRQYWNrYWdlLlNUT0NIQVNUSUNfU0lSX0RJU0VBU0VfTU9ERUxfX1NFRUQ7DQorDQorCS8qKg0KKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+UmFuZG9tIEdlbmVyYXRvcjwvYj48L2VtPicgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJaW50IEdMT0JBTF9JTkZMVUVOWkFfTU9ERUxfX1JBTkRPTV9HRU5FUkFUT1IgPSBTdGFuZGFyZFBhY2thZ2UuU1RPQ0hBU1RJQ19TSVJfRElTRUFTRV9NT0RFTF9fUkFORE9NX0dFTkVSQVRPUjsNCisNCisJLyoqDQorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5HYWluPC9iPjwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqIEBvcmRlcmVkDQorCSAqLw0KKwlpbnQgR0xPQkFMX0lORkxVRU5aQV9NT0RFTF9fR0FJTiA9IFN0YW5kYXJkUGFja2FnZS5TVE9DSEFTVElDX1NJUl9ESVNFQVNFX01PREVMX19HQUlOOw0KKw0KKwkvKioNCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkxhdGl0dWRlIFNpZ21vaWQgV2lkdGg8L2I+PC9lbT4nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCWludCBHTE9CQUxfSU5GTFVFTlpBX01PREVMX19MQVRJVFVERV9TSUdNT0lEX1dJRFRIID0gU3RhbmRhcmRQYWNrYWdlLlNUT0NIQVNUSUNfU0lSX0RJU0VBU0VfTU9ERUxfRkVBVFVSRV9DT1VOVCArIDA7DQorDQorCS8qKg0KKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+U2Vhc29uYWwgTW9kdWxhdGlvbiBFeHBvbmVudDwvYj48L2VtPicgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJaW50IEdMT0JBTF9JTkZMVUVOWkFfTU9ERUxfX1NFQVNPTkFMX01PRFVMQVRJT05fRVhQT05FTlQgPSBTdGFuZGFyZFBhY2thZ2UuU1RPQ0hBU1RJQ19TSVJfRElTRUFTRV9NT0RFTF9GRUFUVVJFX0NPVU5UICsgMTsNCisNCisJLyoqDQorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5Nb2R1bGF0aW9uIFBlcmlvZDwvYj48L2VtPicgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJaW50IEdMT0JBTF9JTkZMVUVOWkFfTU9ERUxfX01PRFVMQVRJT05fUEVSSU9EID0gU3RhbmRhcmRQYWNrYWdlLlNUT0NIQVNUSUNfU0lSX0RJU0VBU0VfTU9ERUxfRkVBVFVSRV9DT1VOVCArIDI7DQorDQorCS8qKg0KKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+TW9kdWxhdGlvbiBQaGFzZSBTaGlmdDwvYj48L2VtPicgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJaW50IEdMT0JBTF9JTkZMVUVOWkFfTU9ERUxfX01PRFVMQVRJT05fUEhBU0VfU0hJRlQgPSBTdGFuZGFyZFBhY2thZ2UuU1RPQ0hBU1RJQ19TSVJfRElTRUFTRV9NT0RFTF9GRUFUVVJFX0NPVU5UICsgMzsNCisNCisJLyoqDQorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5TZWFzb25hbCBNb2R1bGF0aW9uIEZsb29yPC9iPjwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqIEBvcmRlcmVkDQorCSAqLw0KKwlpbnQgR0xPQkFMX0lORkxVRU5aQV9NT0RFTF9fU0VBU09OQUxfTU9EVUxBVElPTl9GTE9PUiA9IFN0YW5kYXJkUGFja2FnZS5TVE9DSEFTVElDX1NJUl9ESVNFQVNFX01PREVMX0ZFQVRVUkVfQ09VTlQgKyA0Ow0KKw0KKwkvKioNCisJICogVGhlIG51bWJlciBvZiBzdHJ1Y3R1cmFsIGZlYXR1cmVzIG9mIHRoZSAnPGVtPkdsb2JhbCBJbmZsdWVuemEgTW9kZWw8L2VtPicgY2xhc3MuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqIEBvcmRlcmVkDQorCSAqLw0KKwlpbnQgR0xPQkFMX0lORkxVRU5aQV9NT0RFTF9GRUFUVVJFX0NPVU5UID0gU3RhbmRhcmRQYWNrYWdlLlNUT0NIQVNUSUNfU0lSX0RJU0VBU0VfTU9ERUxfRkVBVFVSRV9DT1VOVCArIDU7DQorDQorDQorCS8qKg0KKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZ2xvYmFsaW5mbHVlbnphbW9kZWwuR2xvYmFsSW5mbHVlbnphTW9kZWwgPGVtPkdsb2JhbCBJbmZsdWVuemEgTW9kZWw8L2VtPn0nLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICc8ZW0+R2xvYmFsIEluZmx1ZW56YSBNb2RlbDwvZW0+Jy4NCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZ2xvYmFsaW5mbHVlbnphbW9kZWwuR2xvYmFsSW5mbHVlbnphTW9kZWwNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJRUNsYXNzIGdldEdsb2JhbEluZmx1ZW56YU1vZGVsKCk7DQorDQorCS8qKg0KKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5nbG9iYWxpbmZsdWVuemFtb2RlbC5HbG9iYWxJbmZsdWVuemFNb2RlbCNnZXRMYXRpdHVkZVNpZ21vaWRXaWR0aCA8ZW0+TGF0aXR1ZGUgU2lnbW9pZCBXaWR0aDwvZW0+fScuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPGVtPkxhdGl0dWRlIFNpZ21vaWQgV2lkdGg8L2VtPicuDQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmdsb2JhbGluZmx1ZW56YW1vZGVsLkdsb2JhbEluZmx1ZW56YU1vZGVsI2dldExhdGl0dWRlU2lnbW9pZFdpZHRoKCkNCisJICogQHNlZSAjZ2V0R2xvYmFsSW5mbHVlbnphTW9kZWwoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlFQXR0cmlidXRlIGdldEdsb2JhbEluZmx1ZW56YU1vZGVsX0xhdGl0dWRlU2lnbW9pZFdpZHRoKCk7DQorDQorCS8qKg0KKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5nbG9iYWxpbmZsdWVuemFtb2RlbC5HbG9iYWxJbmZsdWVuemFNb2RlbCNnZXRTZWFzb25hbE1vZHVsYXRpb25FeHBvbmVudCA8ZW0+U2Vhc29uYWwgTW9kdWxhdGlvbiBFeHBvbmVudDwvZW0+fScuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPGVtPlNlYXNvbmFsIE1vZHVsYXRpb24gRXhwb25lbnQ8L2VtPicuDQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmdsb2JhbGluZmx1ZW56YW1vZGVsLkdsb2JhbEluZmx1ZW56YU1vZGVsI2dldFNlYXNvbmFsTW9kdWxhdGlvbkV4cG9uZW50KCkNCisJICogQHNlZSAjZ2V0R2xvYmFsSW5mbHVlbnphTW9kZWwoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlFQXR0cmlidXRlIGdldEdsb2JhbEluZmx1ZW56YU1vZGVsX1NlYXNvbmFsTW9kdWxhdGlvbkV4cG9uZW50KCk7DQorDQorCS8qKg0KKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5nbG9iYWxpbmZsdWVuemFtb2RlbC5HbG9iYWxJbmZsdWVuemFNb2RlbCNnZXRNb2R1bGF0aW9uUGVyaW9kIDxlbT5Nb2R1bGF0aW9uIFBlcmlvZDwvZW0+fScuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPGVtPk1vZHVsYXRpb24gUGVyaW9kPC9lbT4nLg0KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5nbG9iYWxpbmZsdWVuemFtb2RlbC5HbG9iYWxJbmZsdWVuemFNb2RlbCNnZXRNb2R1bGF0aW9uUGVyaW9kKCkNCisJICogQHNlZSAjZ2V0R2xvYmFsSW5mbHVlbnphTW9kZWwoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlFQXR0cmlidXRlIGdldEdsb2JhbEluZmx1ZW56YU1vZGVsX01vZHVsYXRpb25QZXJpb2QoKTsNCisNCisJLyoqDQorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmdsb2JhbGluZmx1ZW56YW1vZGVsLkdsb2JhbEluZmx1ZW56YU1vZGVsI2dldE1vZHVsYXRpb25QaGFzZVNoaWZ0IDxlbT5Nb2R1bGF0aW9uIFBoYXNlIFNoaWZ0PC9lbT59Jy4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+TW9kdWxhdGlvbiBQaGFzZSBTaGlmdDwvZW0+Jy4NCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZ2xvYmFsaW5mbHVlbnphbW9kZWwuR2xvYmFsSW5mbHVlbnphTW9kZWwjZ2V0TW9kdWxhdGlvblBoYXNlU2hpZnQoKQ0KKwkgKiBAc2VlICNnZXRHbG9iYWxJbmZsdWVuemFNb2RlbCgpDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCUVBdHRyaWJ1dGUgZ2V0R2xvYmFsSW5mbHVlbnphTW9kZWxfTW9kdWxhdGlvblBoYXNlU2hpZnQoKTsNCisNCisJLyoqDQorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmdsb2JhbGluZmx1ZW56YW1vZGVsLkdsb2JhbEluZmx1ZW56YU1vZGVsI2dldFNlYXNvbmFsTW9kdWxhdGlvbkZsb29yIDxlbT5TZWFzb25hbCBNb2R1bGF0aW9uIEZsb29yPC9lbT59Jy4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+U2Vhc29uYWwgTW9kdWxhdGlvbiBGbG9vcjwvZW0+Jy4NCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZ2xvYmFsaW5mbHVlbnphbW9kZWwuR2xvYmFsSW5mbHVlbnphTW9kZWwjZ2V0U2Vhc29uYWxNb2R1bGF0aW9uRmxvb3IoKQ0KKwkgKiBAc2VlICNnZXRHbG9iYWxJbmZsdWVuemFNb2RlbCgpDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCUVBdHRyaWJ1dGUgZ2V0R2xvYmFsSW5mbHVlbnphTW9kZWxfU2Vhc29uYWxNb2R1bGF0aW9uRmxvb3IoKTsNCisNCisJLyoqDQorCSAqIFJldHVybnMgdGhlIGZhY3RvcnkgdGhhdCBjcmVhdGVzIHRoZSBpbnN0YW5jZXMgb2YgdGhlIG1vZGVsLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHJldHVybiB0aGUgZmFjdG9yeSB0aGF0IGNyZWF0ZXMgdGhlIGluc3RhbmNlcyBvZiB0aGUgbW9kZWwuDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCUdsb2JhbGluZmx1ZW56YW1vZGVsRmFjdG9yeSBnZXRHbG9iYWxpbmZsdWVuemFtb2RlbEZhY3RvcnkoKTsNCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIERlZmluZXMgbGl0ZXJhbHMgZm9yIHRoZSBtZXRhIG9iamVjdHMgdGhhdCByZXByZXNlbnQNCisJICogPHVsPg0KKwkgKiAgIDxsaT5lYWNoIGNsYXNzLDwvbGk+DQorCSAqICAgPGxpPmVhY2ggZmVhdHVyZSBvZiBlYWNoIGNsYXNzLDwvbGk+DQorCSAqICAgPGxpPmVhY2ggZW51bSw8L2xpPg0KKwkgKiAgIDxsaT5hbmQgZWFjaCBkYXRhIHR5cGU8L2xpPg0KKwkgKiA8L3VsPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJaW50ZXJmYWNlIExpdGVyYWxzIHsNCisJCS8qKg0KKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5nbG9iYWxpbmZsdWVuemFtb2RlbC5pbXBsLkdsb2JhbEluZmx1ZW56YU1vZGVsSW1wbCA8ZW0+R2xvYmFsIEluZmx1ZW56YSBNb2RlbDwvZW0+fScgY2xhc3MuDQorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5nbG9iYWxpbmZsdWVuemFtb2RlbC5pbXBsLkdsb2JhbEluZmx1ZW56YU1vZGVsSW1wbA0KKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZ2xvYmFsaW5mbHVlbnphbW9kZWwuaW1wbC5HbG9iYWxpbmZsdWVuemFtb2RlbFBhY2thZ2VJbXBsI2dldEdsb2JhbEluZmx1ZW56YU1vZGVsKCkNCisJCSAqIEBnZW5lcmF0ZWQNCisJCSAqLw0KKwkJRUNsYXNzIEdMT0JBTF9JTkZMVUVOWkFfTU9ERUwgPSBlSU5TVEFOQ0UuZ2V0R2xvYmFsSW5mbHVlbnphTW9kZWwoKTsNCisNCisJCS8qKg0KKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPkxhdGl0dWRlIFNpZ21vaWQgV2lkdGg8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlLg0KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkJICogQGdlbmVyYXRlZA0KKwkJICovDQorCQlFQXR0cmlidXRlIEdMT0JBTF9JTkZMVUVOWkFfTU9ERUxfX0xBVElUVURFX1NJR01PSURfV0lEVEggPSBlSU5TVEFOQ0UuZ2V0R2xvYmFsSW5mbHVlbnphTW9kZWxfTGF0aXR1ZGVTaWdtb2lkV2lkdGgoKTsNCisNCisJCS8qKg0KKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPlNlYXNvbmFsIE1vZHVsYXRpb24gRXhwb25lbnQ8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlLg0KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkJICogQGdlbmVyYXRlZA0KKwkJICovDQorCQlFQXR0cmlidXRlIEdMT0JBTF9JTkZMVUVOWkFfTU9ERUxfX1NFQVNPTkFMX01PRFVMQVRJT05fRVhQT05FTlQgPSBlSU5TVEFOQ0UuZ2V0R2xvYmFsSW5mbHVlbnphTW9kZWxfU2Vhc29uYWxNb2R1bGF0aW9uRXhwb25lbnQoKTsNCisNCisJCS8qKg0KKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPk1vZHVsYXRpb24gUGVyaW9kPC9iPjwvZW0+JyBhdHRyaWJ1dGUgZmVhdHVyZS4NCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJCSAqIEBnZW5lcmF0ZWQNCisJCSAqLw0KKwkJRUF0dHJpYnV0ZSBHTE9CQUxfSU5GTFVFTlpBX01PREVMX19NT0RVTEFUSU9OX1BFUklPRCA9IGVJTlNUQU5DRS5nZXRHbG9iYWxJbmZsdWVuemFNb2RlbF9Nb2R1bGF0aW9uUGVyaW9kKCk7DQorDQorCQkvKioNCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5Nb2R1bGF0aW9uIFBoYXNlIFNoaWZ0PC9iPjwvZW0+JyBhdHRyaWJ1dGUgZmVhdHVyZS4NCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJCSAqIEBnZW5lcmF0ZWQNCisJCSAqLw0KKwkJRUF0dHJpYnV0ZSBHTE9CQUxfSU5GTFVFTlpBX01PREVMX19NT0RVTEFUSU9OX1BIQVNFX1NISUZUID0gZUlOU1RBTkNFLmdldEdsb2JhbEluZmx1ZW56YU1vZGVsX01vZHVsYXRpb25QaGFzZVNoaWZ0KCk7DQorDQorCQkvKioNCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5TZWFzb25hbCBNb2R1bGF0aW9uIEZsb29yPC9iPjwvZW0+JyBhdHRyaWJ1dGUgZmVhdHVyZS4NCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJCSAqIEBnZW5lcmF0ZWQNCisJCSAqLw0KKwkJRUF0dHJpYnV0ZSBHTE9CQUxfSU5GTFVFTlpBX01PREVMX19TRUFTT05BTF9NT0RVTEFUSU9OX0ZMT09SID0gZUlOU1RBTkNFLmdldEdsb2JhbEluZmx1ZW56YU1vZGVsX1NlYXNvbmFsTW9kdWxhdGlvbkZsb29yKCk7DQorDQorCX0NCisNCit9IC8vR2xvYmFsaW5mbHVlbnphbW9kZWxQYWNrYWdlDQpkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZ2xvYmFsaW5mbHVlbnphbW9kZWwvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9nbG9iYWxpbmZsdWVuemFtb2RlbC9pbXBsL0dsb2JhbEluZmx1ZW56YU1vZGVsSW1wbC5qYXZhIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZ2xvYmFsaW5mbHVlbnphbW9kZWwvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9nbG9iYWxpbmZsdWVuemFtb2RlbC9pbXBsL0dsb2JhbEluZmx1ZW56YU1vZGVsSW1wbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdlMmJiNWIKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5nbG9iYWxpbmZsdWVuemFtb2RlbC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL2dsb2JhbGluZmx1ZW56YW1vZGVsL2ltcGwvR2xvYmFsSW5mbHVlbnphTW9kZWxJbXBsLmphdmEKQEAgLTAsMCArMSw2MjEgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmdsb2JhbGluZmx1ZW56YW1vZGVsLmltcGw7DQorDQorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisgKiBDb3B5cmlnaHQgKGMpIDIwMDkgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuDQorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscw0KKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMA0KKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0DQorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwNCisgKg0KKyAqIENvbnRyaWJ1dG9yczoNCisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uDQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQorDQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzczsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLmltcGwuRU5vdGlmaWNhdGlvbkltcGw7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5Ob2RlOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuU1RFTVRpbWU7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkuY2VudGVycy5HZW9ncmFwaGljQ2VudGVyczsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5hZGFwdGVycy5zcGF0aWFsLmdlby5MYXRMb25nUHJvdmlkZXI7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuYWRhcHRlcnMuc3BhdGlhbC5nZW8uTGF0TG9uZ1Byb3ZpZGVyQWRhcHRlcjsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5hZGFwdGVycy5zcGF0aWFsLmdlby5MYXRMb25nUHJvdmlkZXJBZGFwdGVyRmFjdG9yeTsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5ub2Rlcy5pbXBsLlJlZ2lvbkltcGw7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5BY3RpdmF0b3I7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5nbG9iYWxpbmZsdWVuemFtb2RlbC5HbG9iYWxJbmZsdWVuemFNb2RlbDsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmdsb2JhbGluZmx1ZW56YW1vZGVsLkdsb2JhbGluZmx1ZW56YW1vZGVsUGFja2FnZTsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLkRpc2Vhc2VNb2RlbExhYmVsVmFsdWU7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TSUxhYmVsVmFsdWU7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TSVJMYWJlbFZhbHVlOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbDsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZTsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLmltcGwuU0lSTGFiZWxWYWx1ZUltcGw7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5pbXBsLlN0b2NoYXN0aWNTSVJEaXNlYXNlTW9kZWxJbXBsOw0KKw0KKy8qKg0KKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorICogQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPkdsb2JhbCBJbmZsdWVuemEgTW9kZWw8L2I+PC9lbT4nLg0KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKyAqIDxwPg0KKyAqIFRoZSBmb2xsb3dpbmcgZmVhdHVyZXMgYXJlIGltcGxlbWVudGVkOg0KKyAqIDx1bD4NCisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmdsb2JhbGluZmx1ZW56YW1vZGVsLmltcGwuR2xvYmFsSW5mbHVlbnphTW9kZWxJbXBsI2dldExhdGl0dWRlU2lnbW9pZFdpZHRoIDxlbT5MYXRpdHVkZSBTaWdtb2lkIFdpZHRoPC9lbT59PC9saT4NCisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmdsb2JhbGluZmx1ZW56YW1vZGVsLmltcGwuR2xvYmFsSW5mbHVlbnphTW9kZWxJbXBsI2dldFNlYXNvbmFsTW9kdWxhdGlvbkV4cG9uZW50IDxlbT5TZWFzb25hbCBNb2R1bGF0aW9uIEV4cG9uZW50PC9lbT59PC9saT4NCisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmdsb2JhbGluZmx1ZW56YW1vZGVsLmltcGwuR2xvYmFsSW5mbHVlbnphTW9kZWxJbXBsI2dldE1vZHVsYXRpb25QZXJpb2QgPGVtPk1vZHVsYXRpb24gUGVyaW9kPC9lbT59PC9saT4NCisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmdsb2JhbGluZmx1ZW56YW1vZGVsLmltcGwuR2xvYmFsSW5mbHVlbnphTW9kZWxJbXBsI2dldE1vZHVsYXRpb25QaGFzZVNoaWZ0IDxlbT5Nb2R1bGF0aW9uIFBoYXNlIFNoaWZ0PC9lbT59PC9saT4NCisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmdsb2JhbGluZmx1ZW56YW1vZGVsLmltcGwuR2xvYmFsSW5mbHVlbnphTW9kZWxJbXBsI2dldFNlYXNvbmFsTW9kdWxhdGlvbkZsb29yIDxlbT5TZWFzb25hbCBNb2R1bGF0aW9uIEZsb29yPC9lbT59PC9saT4NCisgKiA8L3VsPg0KKyAqIDwvcD4NCisgKg0KKyAqIEBnZW5lcmF0ZWQNCisgKi8NCitwdWJsaWMgY2xhc3MgR2xvYmFsSW5mbHVlbnphTW9kZWxJbXBsIGV4dGVuZHMgU3RvY2hhc3RpY1NJUkRpc2Vhc2VNb2RlbEltcGwgaW1wbGVtZW50cyBHbG9iYWxJbmZsdWVuemFNb2RlbCB7DQorDQorCXByaXZhdGUgc3RhdGljIGZpbmFsIGRvdWJsZSBNSUxMSVNfUEVSX0RBWSA9IDEwMDAuMCo2MC4wKjYwLjAqMjQuMDsNCisJDQorCS8qKg0KKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0TGF0aXR1ZGVTaWdtb2lkV2lkdGgoKSA8ZW0+TGF0aXR1ZGUgU2lnbW9pZCBXaWR0aDwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHNlZSAjZ2V0TGF0aXR1ZGVTaWdtb2lkV2lkdGgoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqIEBvcmRlcmVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIGRvdWJsZSBMQVRJVFVERV9TSUdNT0lEX1dJRFRIX0VERUZBVUxUID0gNC41Ow0KKwkNCisJLyoqDQorCSAqIHRoZSBlcXVhdG9yDQorCSAqLw0KKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBkb3VibGUgRVFVQVRPUl9MQVRJVFVERSA9IDAuMDsNCisJDQorDQorCS8qKg0KKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRMYXRpdHVkZVNpZ21vaWRXaWR0aCgpIDxlbT5MYXRpdHVkZSBTaWdtb2lkIFdpZHRoPC9lbT59JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAc2VlICNnZXRMYXRpdHVkZVNpZ21vaWRXaWR0aCgpDQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCXByb3RlY3RlZCBkb3VibGUgbGF0aXR1ZGVTaWdtb2lkV2lkdGggPSBMQVRJVFVERV9TSUdNT0lEX1dJRFRIX0VERUZBVUxUOw0KKw0KKwkvKioNCisJICogVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldFNlYXNvbmFsTW9kdWxhdGlvbkV4cG9uZW50KCkgPGVtPlNlYXNvbmFsIE1vZHVsYXRpb24gRXhwb25lbnQ8L2VtPn0nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBzZWUgI2dldFNlYXNvbmFsTW9kdWxhdGlvbkV4cG9uZW50KCkNCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBkb3VibGUgU0VBU09OQUxfTU9EVUxBVElPTl9FWFBPTkVOVF9FREVGQVVMVCA9IDIuMDsNCisNCisJLyoqDQorCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldFNlYXNvbmFsTW9kdWxhdGlvbkV4cG9uZW50KCkgPGVtPlNlYXNvbmFsIE1vZHVsYXRpb24gRXhwb25lbnQ8L2VtPn0nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBzZWUgI2dldFNlYXNvbmFsTW9kdWxhdGlvbkV4cG9uZW50KCkNCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJcHJvdGVjdGVkIGRvdWJsZSBzZWFzb25hbE1vZHVsYXRpb25FeHBvbmVudCA9IFNFQVNPTkFMX01PRFVMQVRJT05fRVhQT05FTlRfRURFRkFVTFQ7DQorDQorCS8qKg0KKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0TW9kdWxhdGlvblBlcmlvZCgpIDxlbT5Nb2R1bGF0aW9uIFBlcmlvZDwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHNlZSAjZ2V0TW9kdWxhdGlvblBlcmlvZCgpDQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgZG91YmxlIE1PRFVMQVRJT05fUEVSSU9EX0VERUZBVUxUID0gMzY1LjI1NjM2MzA1MTsNCisNCisJLyoqDQorCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldE1vZHVsYXRpb25QZXJpb2QoKSA8ZW0+TW9kdWxhdGlvbiBQZXJpb2Q8L2VtPn0nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBzZWUgI2dldE1vZHVsYXRpb25QZXJpb2QoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqIEBvcmRlcmVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgZG91YmxlIG1vZHVsYXRpb25QZXJpb2QgPSBNT0RVTEFUSU9OX1BFUklPRF9FREVGQVVMVDsNCisNCisJLyoqDQorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRNb2R1bGF0aW9uUGhhc2VTaGlmdCgpIDxlbT5Nb2R1bGF0aW9uIFBoYXNlIFNoaWZ0PC9lbT59JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAc2VlICNnZXRNb2R1bGF0aW9uUGhhc2VTaGlmdCgpDQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgZG91YmxlIE1PRFVMQVRJT05fUEhBU0VfU0hJRlRfRURFRkFVTFQgPSAwLjA7DQorDQorCS8qKg0KKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRNb2R1bGF0aW9uUGhhc2VTaGlmdCgpIDxlbT5Nb2R1bGF0aW9uIFBoYXNlIFNoaWZ0PC9lbT59JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAc2VlICNnZXRNb2R1bGF0aW9uUGhhc2VTaGlmdCgpDQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCXByb3RlY3RlZCBkb3VibGUgbW9kdWxhdGlvblBoYXNlU2hpZnQgPSBNT0RVTEFUSU9OX1BIQVNFX1NISUZUX0VERUZBVUxUOw0KKw0KKwkvKioNCisJICogVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldFNlYXNvbmFsTW9kdWxhdGlvbkZsb29yKCkgPGVtPlNlYXNvbmFsIE1vZHVsYXRpb24gRmxvb3I8L2VtPn0nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBzZWUgI2dldFNlYXNvbmFsTW9kdWxhdGlvbkZsb29yKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBkb3VibGUgU0VBU09OQUxfTU9EVUxBVElPTl9GTE9PUl9FREVGQVVMVCA9IDAuNjsNCisNCisJLyoqDQorCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldFNlYXNvbmFsTW9kdWxhdGlvbkZsb29yKCkgPGVtPlNlYXNvbmFsIE1vZHVsYXRpb24gRmxvb3I8L2VtPn0nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBzZWUgI2dldFNlYXNvbmFsTW9kdWxhdGlvbkZsb29yKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJcHJvdGVjdGVkIGRvdWJsZSBzZWFzb25hbE1vZHVsYXRpb25GbG9vciA9IFNFQVNPTkFMX01PRFVMQVRJT05fRkxPT1JfRURFRkFVTFQ7DQorCQ0KKwlwdWJsaWMgc3RhdGljIGxvbmcgZmlyc3REYXkgPSAtMTsNCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkIE5PVA0KKwkgKi8NCisJcHVibGljIEdsb2JhbEluZmx1ZW56YU1vZGVsSW1wbCgpIHsNCisJCXN1cGVyKCk7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlAT3ZlcnJpZGUNCisJcHJvdGVjdGVkIEVDbGFzcyBlU3RhdGljQ2xhc3MoKSB7DQorCQlyZXR1cm4gR2xvYmFsaW5mbHVlbnphbW9kZWxQYWNrYWdlLkxpdGVyYWxzLkdMT0JBTF9JTkZMVUVOWkFfTU9ERUw7DQorCX0NCisNCisJDQorDQorCS8qKg0KKwkgKiBUbyBtb2RlbCBpbmZsdWVuemEgb24gYSBnbG9iYWwgc2NhbGUsIHRoaXMgbWV0aG9kIHRha2VzIGludG8gYWNjb3VudA0KKwkgKiB0aGUgbW9kdWxhdGlvbiBvZiB0aGUgdHJhbnNtaXNzaW9uIGNvZWZmaWNpZW50IG9mIHRoZSB2aXJ1cyBhcyBhIGZ1bmN0aW9uIG9mIExhdGl0dWRlLg0KKwkgKiBOZWFyIHRoZSB0cm9waWNzIHRoZSB0cmFuc21pc3Npb24gY29lZmZpY2llbnQgaXMgYWxtb3N0IGNvbnN0YW50IChhbmQgYXQgYSB2YWx1ZQ0KKwkgKiBjYWxsZWQgdGhlIFNFQVNPTkFMX01PRFVMQVRJT05fRkxPT1IuDQorCSAqIEFzIG9uZSBtb3ZlZCBpbiBsYXRpdHVkZSBhd2F5IGZyb20gdGhlIHRyb3BpY3MgdGhlIG1vZHVsYXRpb24gKGFuZCBNQVhJTVVNKSBhbXBsaXR1ZGUgb2YgdGhlIA0KKwkgKiB0cmFuc21pc3Npb24gY29lZmZpY2llbnQgaW5jcmVhc2VzLiBXZSBtb2RlbCB0aGlzIHNlYXNvbmFsIGluY3JlYXNlIAkgDQorCSAqIFdlIG1vZGVsIHRoaXMgd2l0aCBhIHNpZ21vaWRhbCBmdW5jdGlvbiB0aGF0IGdvZXMgZnJvbSB6ZXJvIHRvIG9uZQ0KKwkgKiB3aXRoIGNlbnRlciBhdCB0aGUgdHJvcGljIG9mIGNhbmNlciwgYW5kIHRoZSB0cm9waWMgb2YgQ2Fwcmljb3JuLg0KKwkgKiBUaGUgZGVmYXVsdCB3aWR0aCBmYWN0b3IgaXMgNC41IHdoaWNoIGdpdmVzIHRoZSBzaWdtb2lkIGEgc2xvcGUgcHJvcG9ydGlvbmFsIHRvIHRoZSANCisJICogb2JzZXJ2ZWQgdmFyaWF0aW9uIGluIHNlYXNvbmFsIGluZmx1ZW56YSBlcGlkZW1pY3MgYXMgYSBmdW5jdGlvbiBvZiBsYXRpdHVkZSBpbiBCcmF6aWwuDQorCSAqIFNlZTogaHR0cDovL2FqZS5veGZvcmRqb3VybmFscy5vcmcvY2dpL2NvbnRlbnQvZnVsbC8xNjUvMTIvMTQzNA0KKwkgKiANCisJICogQXMgb3VyIHNpZ21vaWQgd2UgdXNlIHRoZSBiYXNpYyBsb2dpc3RpYyBmdW5jdGlvbiAxLzErZXhwKC14KSANCisJICogc28NCisJICogU2lnbW9pZCBGdW5jdGlvbiAobGF0KSAgPSBTZWFzb25hbE1vZHVsYXRpb25GbG9vci8oMS4wICsgZXhwKChUUk9QSUNfT0ZfQ0FOQ0VSX0xBVElUVURFIC0gYWJzKExhdCkpLi80LjUpICk7DQorCSAqIFRoaXMgaXMgbmVhciB6ZXJvIG5lYXIgdGhlIGVxdWF0b3IgYW5kIGdvZXMgdG8gU2Vhc29uYWxNb2R1bGF0aW9uRmxvb3IgYWJvdmUgYW5kIGJlbG93IA0KKwkgKiB0aGUgdHJvcGljcy4NCisJICogDQorCSAqIA0KKwkgKiBAcGFyYW0gdGltZQ0KKwkgKiAJCQkgIGN1cnJlbnQgdGltZQ0KKwkgKiBAcGFyYW0gY3VycmVudFN0YXRlDQorCSAqICAgICAgICAgICAgdGhlIGN1cnJlbnQgc3RhdGUgb2YgdGhlIHBvcHVsYXRpb24NCisJICogQHBhcmFtIGRpc2Vhc2VMYWJlbA0KKwkgKiAgICAgICAgICAgIHRoZSBkaXNlYXNlIGxhYmVsIGZvciB3aGljaCB0aGUgc3RhdGUgdHJhbnNpdGlvbnMgYXJlIGJlaW5nDQorCSAqICAgICAgICAgICAgY29tcHV0ZWQuDQorCSAqIEBwYXJhbSB0aW1lRGVsdGENCisJICogICAgICAgICAgICB0aGUgdGltZSBwZXJpb2QgKG1pbGxpc2Vjb25kcykgb3ZlciB3aGljaCB0aGUgcG9wdWxhdGlvbg0KKwkgKiAgICAgICAgICAgIG1lbWJlcnMgdHJhbnNpdGlvbiB0byBuZXcgc3RhdGVzICAgICAgICAgIA0KKwkgKiBAcmV0dXJuIGEgZGlzZWFzZSBzdGF0ZSBsYWJlbCB2YWx1ZSB0aGF0IGNvbnRhaW5zIHRoZSBudW1iZXIgb2YNCisJICogICAgICAgICBkZWx0YSBjaGFuZ2VzIGluIGVhY2ggZGlzZWFzZSBzdGF0ZQ0KKwkgKiANCisJICogVXNlcnMgY2FuIG1vZGlmeSB0aGUgbWV0aG9kIGJlbG93IHRvIGNyZWF0ZSB0aGVpciBvd24gbW9kZWwuDQorCSAqIA0KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5pbXBsLlNJSW1wbCNjb21wdXRlRGlzZWFzZURlbHRhcyhTdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsVmFsdWUsDQorCSAqICAgICAgU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbCwgbG9uZykNCisJICovDQorCUBPdmVycmlkZQ0KKwlwdWJsaWMgU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbFZhbHVlIGNvbXB1dGVEaXNlYXNlRGVsdGFzKA0KKwkJCWZpbmFsIFNURU1UaW1lIHRpbWUsDQorCQkJZmluYWwgU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbFZhbHVlIGN1cnJlbnRTdGF0ZSwNCisJCQlmaW5hbCBTdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsIGRpc2Vhc2VMYWJlbCwgZmluYWwgbG9uZyB0aW1lRGVsdGEsIERpc2Vhc2VNb2RlbExhYmVsVmFsdWUgcmV0dXJuVmFsdWUpIHsNCisJCQlmaW5hbCBTSVJMYWJlbFZhbHVlIGN1cnJlbnRTSVIgPSAoU0lSTGFiZWxWYWx1ZSkgY3VycmVudFN0YXRlOw0KKwkJDQorCQlsb25nIGN1cnJlbnRNaWxsaXMgPSB0aW1lLmdldFRpbWUoKS5nZXRUaW1lKCk7DQorCQlkb3VibGUgc2Vhc29uYWxNb2R1bGF0aW9uRXhwb25lbnQgPSBnZXRTZWFzb25hbE1vZHVsYXRpb25FeHBvbmVudCgpOw0KKwkJZG91YmxlIHNlYXNvbmFsTW9kdWxhdGlvbkZsb29yID0gZ2V0U2Vhc29uYWxNb2R1bGF0aW9uRmxvb3IoKTsNCisJCWRvdWJsZSBtb2R1bGF0aW9uUGVyaW9kID0gZ2V0TW9kdWxhdGlvblBlcmlvZCgpOw0KKwkJZmluYWwgZG91YmxlIGFic29sdXRlUGhhc2UgPSBnZXRNb2R1bGF0aW9uUGhhc2VTaGlmdCgpOwkNCisJCQ0KKwkJDQorCQkvKioNCisJCSAqIHRoZSBsYXRpdHVkZSBvZiB0aGlzIHJlZ2lvbnMNCisJCSAqLw0KKwkJZG91YmxlIGxhdGl0dWRlID0gRVFVQVRPUl9MQVRJVFVERTsNCisNCisJCQ0KKwkJLyoqDQorCQkgKiB0aGUgY29vcmRpbmF0ZXMgb2YgdGhlIGNlbnRlciBvZiB0aGlzIHJlZ2lvbnMNCisJCSAqLw0KKwkJZG91YmxlW10gbGF0X2xvbmcgPSBudWxsOw0KKwkJDQorCQlpZiAoZmlyc3REYXkgPT0gLTEpIHsNCisJCQlmaXJzdERheSA9IGN1cnJlbnRNaWxsaXM7DQorCQl9DQorCQkNCisJCU5vZGUgbm9kZSA9IGRpc2Vhc2VMYWJlbC5nZXROb2RlKCk7DQorCQkNCisJCWlmKG5vZGUgaW5zdGFuY2VvZiBSZWdpb25JbXBsKSB7DQorCQkJU3RyaW5nIG5vZGVVUkkgPSBub2RlLmdldFVSSSgpLmxhc3RTZWdtZW50KCk7DQorCQkJbGF0X2xvbmcgPSBHZW9ncmFwaGljQ2VudGVycy5nZXRDZW50ZXIobm9kZVVSSSk7DQorCQkJLy8gc3RpbGwgbnVsbD8gQ29tcHV0ZSBpdA0KKwkJCWlmKGxhdF9sb25nPT1udWxsKSB7DQorCQkJCS8vIEdldCB0aGUgbGF0L2xvbmcgb2YgdGhlIGNlbnRlciBvZiB0aGUgbm9kZQ0KKwkJCQlmaW5hbCBMYXRMb25nUHJvdmlkZXJBZGFwdGVyIGxhdExvbmdQcm92aWRlckIgPSAoTGF0TG9uZ1Byb3ZpZGVyQWRhcHRlcikgTGF0TG9uZ1Byb3ZpZGVyQWRhcHRlckZhY3RvcnkuSU5TVEFOQ0UNCisJCQkJCQkuYWRhcHQobm9kZSwgTGF0TG9uZ1Byb3ZpZGVyLmNsYXNzKTsNCisJCQkJbGF0TG9uZ1Byb3ZpZGVyQi5zZXRUYXJnZXQobm9kZSk7DQorCQkJCWxhdF9sb25nID0gbGF0TG9uZ1Byb3ZpZGVyQi5nZXRDZW50ZXIoKTsNCisJCQl9DQorCQkJaWYgKGxhdF9sb25nID09IG51bGwpIHsNCisJCQkJQWN0aXZhdG9yLmxvZ0Vycm9yKCJDYW5ub3QgZmluZCBsYXRpdHVkZSBmb3IgIisgbm9kZVVSSSwgbnVsbCk7DQorCQkJfQ0KKwkJfSBlbHNlIHsNCisJCQlsYXRfbG9uZyA9IG5ldyBkb3VibGVbMl07DQorCQkJbGF0X2xvbmdbMF0gPSBFUVVBVE9SX0xBVElUVURFOw0KKwkJCWxhdF9sb25nWzFdID0gRVFVQVRPUl9MQVRJVFVERTsgLy8gbm90IHVzZWQuIHNldHMgaXQgdG8gMCwwDQorCQl9DQorDQorDQorCQkvLyBnZXQgdGhlIGxhdGl0dWRlDQorCQlpZihsYXRfbG9uZyAhPSBudWxsKSB7DQorCQkJbGF0aXR1ZGUgPSBsYXRfbG9uZ1swXSA7DQorCQl9IA0KKwkJDQorCQkvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLw0KKwkJLy8gY29ycmVjdHMgcGhhc2UgZm9yIG5vcnRoZXJuIHZzIHNvdXRoZXJuIGhlbWlzcGhlcmUNCisJCWRvdWJsZSBwaGFzZSA9IGFic29sdXRlUGhhc2U7DQorCQlpZihsYXRpdHVkZTwwLjApIHBoYXNlICs9IE1hdGguUEkvMi4wOw0KKwkJLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8NCisJCQ0KKwkJDQorCQkvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8NCisJCS8vIG5vdyBjb21wdXRlIHRoZSB0cmFuc21pc3Npb24gcmF0ZQ0KKwkJLy8gd2l0aCB0aGUgc2Vhc29uYWwgZm9yY2luZyBmdW5jdGlvbg0KKwkJLy8gYWRqdXN0ZWQgYnkgbGF0aXR1ZGUNCisJCWRvdWJsZSBsYXRGYWN0b3IgID0gc2Vhc29uYWxNb2R1bGF0aW9uRmxvb3IvKDEuMCArIE1hdGguZXhwKChUUk9QSUNfT0ZfQ0FOQ0VSX0xBVElUVURFIC0gTWF0aC5hYnMobGF0aXR1ZGUpKS9sYXRpdHVkZVNpZ21vaWRXaWR0aCkgKTsNCisJCWxhdEZhY3RvciAqPSBNYXRoLnBvdyhNYXRoLmFicyhNYXRoLmNvcyhwaGFzZSArIE1hdGguUEkqY3VycmVudE1pbGxpcy8obW9kdWxhdGlvblBlcmlvZCpNSUxMSVNfUEVSX0RBWSkpKSwgc2Vhc29uYWxNb2R1bGF0aW9uRXhwb25lbnQpOw0KKwkJZG91YmxlIG1vZHVsYXRpb24gPSAoICgxLjAtKHNlYXNvbmFsTW9kdWxhdGlvbkZsb29yLzIuMCkpICsgKGxhdEZhY3Rvci8yLjApICk7DQorCQkvLyBUaGlzIGlzIGJldGENCisJCWRvdWJsZSB0cmFuc21pc3Npb25SYXRlID0gbW9kdWxhdGlvbiAqIChnZXRBZGp1c3RlZFRyYW5zbWlzc2lvblJhdGUodGltZURlbHRhKSk7DQorCQkvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLw0KKwkJDQorCQkvL0xvZ1dyaXRlci53cml0ZShsYXRpdHVkZSArIiwiKyBNYXRoLnJvdW5kKChjdXJyZW50TWlsbGlzIC0gZmlyc3REYXkpLzg2NDAwMDAwKSArIiwiICsgdHJhbnNtaXNzaW9uUmF0ZSk7DQorCQkNCisJCWlmKCF0aGlzLmlzRnJlcXVlbmN5RGVwZW5kZW50KCkpICB0cmFuc21pc3Npb25SYXRlICo9IGdldFRyYW5zbWlzc2lvblJhdGVTY2FsZUZhY3RvcihkaXNlYXNlTGFiZWwpOw0KKwkJDQorCQkvLyBUaGUgZWZmZWN0aXZlIEluZmVjdGlvdXMgcG9wdWxhdGlvbiAgaXMgYSBkaW1lbnNpb25sZXMgbnVtYmVyIG5vcm1hbGl6ZSBieSB0b3RhbA0KKwkJLy8gcG9wdWxhdGlvbiB1c2VkIGluIHRlaCBjb21wdXRhdGlvbiBvZiBiZXRzKlMqaSB3aGVyZSBpID0gSWVmZmVjdGl2ZS9Qb3AuDQorCQkvLyBUaGlzIGluY2x1ZGVzIGEgY29ycmVjdGlvbiB0byB0aGUgY3VycmVudA0KKwkJLy8gaW5mZWN0aW91cyBwb3B1bGF0aW9uIChJZWZmZWN0aXZlKSBiYXNlZCBvbiB0aGUgY29uc2VydmVkIGV4Y2hhbmdlIG9mIHBlb3BsZSAoY2lyY3VsYXRpb24pDQorCQkvLyBiZXR3ZWVuIHJlZ2lvbnMuIE5vdGUgdGhhdCB0aGlzIGlzIG5vIHRoZSAiYXJyaXZhbHMiIGFuZCAiZGVwYXJ0dXJlcyIgd2hpY2ggYXJlDQorCQkvLyBhIGRpZmZlcmVudCBwcm9jZXNzLg0KKwkJZmluYWwgZG91YmxlIGVmZmVjdGl2ZUluZmVjdGlvdXMgPSBnZXROb3JtYWxpemVkRWZmZWN0aXZlSW5mZWN0aW91cyhkaXNlYXNlTGFiZWwuZ2V0Tm9kZSgpLCBkaXNlYXNlTGFiZWwsIGN1cnJlbnRTSVIuZ2V0SSgpKTsNCisNCisJCS8qDQorCQkgKiBDb21wdXRlIHN0YXRlIHRyYW5zaXRpb25zDQorCQkgKiANCisJCSAqIFJlZ2FyZGluZyBjb21wdXRpbmcgdGhlIG51bWJlciBvZiB0cmFuc2l0aW9ucyBmcm9tIFN1c2NlcHRpYmxlIHRvIEV4cG9zZWQ6DQorCQkgKiBJbiBhIGxpbmVhciBtb2RlbCB0aGUgImVmZmVjdGl2ZSIgbnVtYmVyIG9mIGluZmVjdGlvdXMgcGVvcGxlIGlzIGp1c3QNCisJCSAqIHRoZSBudW1iZXIgb2YgaW5mZWN0aW91cyBwZW9wbGUgSW4gYSBub25saW5lYXIgbW9kZWwgd2UgaGF2ZSBhDQorCQkgKiBub25MaW5lYXJpdHkgZXhwb25lbnQgdGhhdCBpcyA+IDEgdGhpcyBtb2RlbHMgdGhlIGVmZmVjdCBvZiBpbW11bmUNCisJCSAqIHN5c3RlbSBzYXR1cmF0aW9uIHdoZW4gU3VzY2VwdGlibGUgcGVvcGxlIGFyZSBleHBvc2VkIHRvIGxhcmdlDQorCQkgKiBudW1iZXJzIG9mIGluZmVjdGlvdXMgcGVvcGxlLiB0aGVuIHRoZSAiZWZmZWN0aXZlIiBudW1iZXIgb2YNCisJCSAqIGluZmVjdGlvdXMgcGVvcGxlIGlzIElebm9uTGluZWFyaXR5IGV4cG9uZW50IHRvIGFsbG93IGZvciBlaXRoZXINCisJCSAqIGxpbmVhciBvciBub25saW5lYXIgbW9kZWxzIHdlIGFsd2F5cyBjYWxjdWxhdGUgSV5ub25MaW5lYXJpdHkNCisJCSAqIGV4cG9uZW50IGFuZCBhbGxvdyBub25MaW5lYXJpdHkgZXhwb25lbnQgPj0gMS4wDQorCQkgKi8NCisJCWRvdWJsZSBudW1iZXJPZkluZmVjdGVkVG9SZWNvdmVyZWQgPSBnZXRBZGp1c3RlZFJlY292ZXJ5UmF0ZSh0aW1lRGVsdGEpDQorCQkqIGN1cnJlbnRTSVIuZ2V0SSgpOw0KKwkJZG91YmxlIG51bWJlck9mUmVjb3ZlcmVkVG9TdXNjZXB0aWJsZSA9IGdldEFkanVzdGVkSW1tdW5pdHlMb3NzUmF0ZSh0aW1lRGVsdGEpDQorCQkqIGN1cnJlbnRTSVIuZ2V0UigpOw0KKwkJLy8gTmVlZCB0byBjaGVja2VkIHdoYXQgZG8gZG8gaGVyZS4gSWYgbm9uIGxpbmVhciBjb2VmZmljaWVudCBpcyBub3QgMSBhbmQNCisJCS8vIHRoZSBlZmZlY3RpdmUgaW5mZWN0aW91cyBpcyBuZWdhdGl2ZSAod2hpY2ggaXMgcG9zc2libGUpLCB3aGF0IGRvIGRvPyANCisJCS8vIExldCdzIGZhbGwgYmFjayBvbiB0aGUgbGluZWFyIG1ldGhvZCBmb3Igbm93Lg0KKwkJZG91YmxlIG51bWJlck9mU3VzY2VwdGlibGVUb0luZmVjdGVkID0gMC4wOw0KKwkJaWYoZ2V0Tm9uTGluZWFyaXR5Q29lZmZpY2llbnQoKSAhPSAxLjAgJiYgZWZmZWN0aXZlSW5mZWN0aW91cyA+PSAwLjApDQorCQkJbnVtYmVyT2ZTdXNjZXB0aWJsZVRvSW5mZWN0ZWQgPSB0cmFuc21pc3Npb25SYXRlDQorCQkJKiBjdXJyZW50U0lSLmdldFMoKSogTWF0aC5wb3coZWZmZWN0aXZlSW5mZWN0aW91cywgZ2V0Tm9uTGluZWFyaXR5Q29lZmZpY2llbnQoKSk7DQorCQllbHNlDQorCQkJbnVtYmVyT2ZTdXNjZXB0aWJsZVRvSW5mZWN0ZWQgPSB0cmFuc21pc3Npb25SYXRlDQorCQkJKiBjdXJyZW50U0lSLmdldFMoKSogZWZmZWN0aXZlSW5mZWN0aW91czsNCisJCQ0KKwkJLy8gRGV0ZXJtaW5lIGRlbHRhIFMNCisJCWZpbmFsIGRvdWJsZSBkZWx0YVMgPSBudW1iZXJPZlJlY292ZXJlZFRvU3VzY2VwdGlibGUgLSBudW1iZXJPZlN1c2NlcHRpYmxlVG9JbmZlY3RlZDsNCisJCQkvLyBEZXRlcm1pbmUgZGVsdGEgSQ0KKwkJZmluYWwgZG91YmxlIGRlbHRhSSA9IG51bWJlck9mU3VzY2VwdGlibGVUb0luZmVjdGVkLSBudW1iZXJPZkluZmVjdGVkVG9SZWNvdmVyZWQ7DQorCQkvLyBEZXRlcm1pbmUgZGVsdGEgUg0KKwkJZmluYWwgZG91YmxlIGRlbHRhUiA9IG51bWJlck9mSW5mZWN0ZWRUb1JlY292ZXJlZCAtIG51bWJlck9mUmVjb3ZlcmVkVG9TdXNjZXB0aWJsZTsNCisJCQ0KKwkJU0lSTGFiZWxWYWx1ZUltcGwgcmV0ID0gKFNJUkxhYmVsVmFsdWVJbXBsKXJldHVyblZhbHVlOw0KKwkJcmV0LnNldFMoZGVsdGFTKTsNCisJCXJldC5zZXRJKGRlbHRhSSk7DQorCQlyZXQuc2V0SW5jaWRlbmNlKG51bWJlck9mSW5mZWN0ZWRUb1JlY292ZXJlZCk7DQorCQlyZXQuc2V0UihkZWx0YVIpOw0KKwkJcmV0LnNldERpc2Vhc2VEZWF0aHMoMCk7DQorCQlyZXR1cm4gcmV0Ow0KKwl9IC8vIGNvbXB1dGVUcmFuc2l0aW9ucw0KKw0KKwkNCisJDQorCS8qKg0KKwkgKiBNb2RlbFNwZWNpZmljQWRqdXN0bWVudHMgZm9yIGEgU3RvY2hhc3RpYyBtb2RlbCBhZGRzIG5vaXNlIHRvIG9yIGFkanVzdHMgDQorCSAqIHRoZSBkaXNlYXNlIHN0YXRlIHRyYW5zaXRpb24gdmFsdWVzIGJ5IG11bHRpcGx5aW5nDQorCSAqIHRoZSBhZGRpdGlvbnMgYnkgYSByYW5kb20gdmFyaWFibGUgciB+ICgxKy8teCkgd2l0aCB4IHNtYWxsLg0KKwkgKiBUaGUgcmVxdWlyZW1lbnRzIHRoYXQgbm8gbW9yZSBpbmRpdmlkdWFscyBjYW4gYmUgbW92ZWQgZnJvbSBhIHN0YXRlIHRoYW4gYXJlDQorCSAqIGFscmVhZHkgaW4gdGhhdCBzdGF0ZSBpcyBzdGlsbCBlbmZvcmNlZC4NCisJICogDQorCSAqLw0KKwkNCisJcHVibGljIHZvaWQgZG9Nb2RlbFNwZWNpZmljQWRqdXN0bWVudHMoDQorCQkJZmluYWwgU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbFZhbHVlIHN0YXRlKSB7DQorCQkJZmluYWwgU0lMYWJlbFZhbHVlIGN1cnJlbnRTSSA9IChTSUxhYmVsVmFsdWUpIHN0YXRlOw0KKwkJCWRvdWJsZSBpbmNpZGVuY2UgPSAoKFNJTGFiZWxWYWx1ZSlzdGF0ZSkuZ2V0SW5jaWRlbmNlKCk7DQorCQkJZG91YmxlIG5ld0luY2lkZW5jZSA9IGluY2lkZW5jZSpjb21wdXRlTm9pc2UoKTsNCisJCQlkb3VibGUgZGlmZiA9IG5ld0luY2lkZW5jZSAtIGluY2lkZW5jZTsNCisJCQkNCisJCQlkb3VibGUgbmV3SSA9IGN1cnJlbnRTSS5nZXRJKCkgKyBkaWZmOw0KKwkJCWRvdWJsZSBuZXdTID0gY3VycmVudFNJLmdldFMoKSAtIGRpZmY7DQorCQkJaWYobmV3SSA8IDAuMCkgew0KKwkJCQlkb3VibGUgc2NhbGUgPSAoLW5ld0kpIC8gY3VycmVudFNJLmdldEkoKTsNCisJCQkJZGlmZiA9IGRpZmYgKiBzY2FsZTsNCisJCQkJbmV3SSA9IGN1cnJlbnRTSS5nZXRJKCkgKyBkaWZmOyAvLyAwDQorCQkJCW5ld1MgPSBjdXJyZW50U0kuZ2V0UygpIC0gZGlmZjsNCisJCQl9DQorCQkJaWYobmV3UyA8IDAuMCkgew0KKwkJCQlkb3VibGUgc2NhbGUgPSAoLW5ld1MpIC8gY3VycmVudFNJLmdldFMoKTsNCisJCQkJZGlmZiA9IGRpZmYgKiBzY2FsZTsNCisJCQkJbmV3SSA9IGN1cnJlbnRTSS5nZXRJKCkgKyBkaWZmOw0KKwkJCQluZXdTID0gY3VycmVudFNJLmdldFMoKSAtIGRpZmY7IC8vIDANCisJCQl9DQorCQkJbmV3SW5jaWRlbmNlID0gaW5jaWRlbmNlICsgZGlmZjsNCisJCQljdXJyZW50U0kuc2V0UyhuZXdTKTsNCisJCQljdXJyZW50U0kuc2V0SShuZXdJKTsNCisJCQljdXJyZW50U0kuc2V0SW5jaWRlbmNlKG5ld0luY2lkZW5jZSk7DQorCQkJcmV0dXJuOw0KKwl9IC8vIGRvTW9kZWxTcGVjaWZpY0FkanVzdG1lbnRzDQorCQ0KKwkNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgZG91YmxlIGdldExhdGl0dWRlU2lnbW9pZFdpZHRoKCkgew0KKwkJcmV0dXJuIGxhdGl0dWRlU2lnbW9pZFdpZHRoOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIHZvaWQgc2V0TGF0aXR1ZGVTaWdtb2lkV2lkdGgoZG91YmxlIG5ld0xhdGl0dWRlU2lnbW9pZFdpZHRoKSB7DQorCQlkb3VibGUgb2xkTGF0aXR1ZGVTaWdtb2lkV2lkdGggPSBsYXRpdHVkZVNpZ21vaWRXaWR0aDsNCisJCWxhdGl0dWRlU2lnbW9pZFdpZHRoID0gbmV3TGF0aXR1ZGVTaWdtb2lkV2lkdGg7DQorCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpDQorCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgR2xvYmFsaW5mbHVlbnphbW9kZWxQYWNrYWdlLkdMT0JBTF9JTkZMVUVOWkFfTU9ERUxfX0xBVElUVURFX1NJR01PSURfV0lEVEgsIG9sZExhdGl0dWRlU2lnbW9pZFdpZHRoLCBsYXRpdHVkZVNpZ21vaWRXaWR0aCkpOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIGRvdWJsZSBnZXRTZWFzb25hbE1vZHVsYXRpb25FeHBvbmVudCgpIHsNCisJCXJldHVybiBzZWFzb25hbE1vZHVsYXRpb25FeHBvbmVudDsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyB2b2lkIHNldFNlYXNvbmFsTW9kdWxhdGlvbkV4cG9uZW50KGRvdWJsZSBuZXdTZWFzb25hbE1vZHVsYXRpb25FeHBvbmVudCkgew0KKwkJZG91YmxlIG9sZFNlYXNvbmFsTW9kdWxhdGlvbkV4cG9uZW50ID0gc2Vhc29uYWxNb2R1bGF0aW9uRXhwb25lbnQ7DQorCQlzZWFzb25hbE1vZHVsYXRpb25FeHBvbmVudCA9IG5ld1NlYXNvbmFsTW9kdWxhdGlvbkV4cG9uZW50Ow0KKwkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQ0KKwkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIEdsb2JhbGluZmx1ZW56YW1vZGVsUGFja2FnZS5HTE9CQUxfSU5GTFVFTlpBX01PREVMX19TRUFTT05BTF9NT0RVTEFUSU9OX0VYUE9ORU5ULCBvbGRTZWFzb25hbE1vZHVsYXRpb25FeHBvbmVudCwgc2Vhc29uYWxNb2R1bGF0aW9uRXhwb25lbnQpKTsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBkb3VibGUgZ2V0TW9kdWxhdGlvblBlcmlvZCgpIHsNCisJCXJldHVybiBtb2R1bGF0aW9uUGVyaW9kOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIHZvaWQgc2V0TW9kdWxhdGlvblBlcmlvZChkb3VibGUgbmV3TW9kdWxhdGlvblBlcmlvZCkgew0KKwkJZG91YmxlIG9sZE1vZHVsYXRpb25QZXJpb2QgPSBtb2R1bGF0aW9uUGVyaW9kOw0KKwkJbW9kdWxhdGlvblBlcmlvZCA9IG5ld01vZHVsYXRpb25QZXJpb2Q7DQorCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpDQorCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgR2xvYmFsaW5mbHVlbnphbW9kZWxQYWNrYWdlLkdMT0JBTF9JTkZMVUVOWkFfTU9ERUxfX01PRFVMQVRJT05fUEVSSU9ELCBvbGRNb2R1bGF0aW9uUGVyaW9kLCBtb2R1bGF0aW9uUGVyaW9kKSk7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgZG91YmxlIGdldE1vZHVsYXRpb25QaGFzZVNoaWZ0KCkgew0KKwkJcmV0dXJuIG1vZHVsYXRpb25QaGFzZVNoaWZ0Ow0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIHZvaWQgc2V0TW9kdWxhdGlvblBoYXNlU2hpZnQoZG91YmxlIG5ld01vZHVsYXRpb25QaGFzZVNoaWZ0KSB7DQorCQlkb3VibGUgb2xkTW9kdWxhdGlvblBoYXNlU2hpZnQgPSBtb2R1bGF0aW9uUGhhc2VTaGlmdDsNCisJCW1vZHVsYXRpb25QaGFzZVNoaWZ0ID0gbmV3TW9kdWxhdGlvblBoYXNlU2hpZnQ7DQorCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpDQorCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgR2xvYmFsaW5mbHVlbnphbW9kZWxQYWNrYWdlLkdMT0JBTF9JTkZMVUVOWkFfTU9ERUxfX01PRFVMQVRJT05fUEhBU0VfU0hJRlQsIG9sZE1vZHVsYXRpb25QaGFzZVNoaWZ0LCBtb2R1bGF0aW9uUGhhc2VTaGlmdCkpOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIGRvdWJsZSBnZXRTZWFzb25hbE1vZHVsYXRpb25GbG9vcigpIHsNCisJCXJldHVybiBzZWFzb25hbE1vZHVsYXRpb25GbG9vcjsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyB2b2lkIHNldFNlYXNvbmFsTW9kdWxhdGlvbkZsb29yKGRvdWJsZSBuZXdTZWFzb25hbE1vZHVsYXRpb25GbG9vcikgew0KKwkJZG91YmxlIG9sZFNlYXNvbmFsTW9kdWxhdGlvbkZsb29yID0gc2Vhc29uYWxNb2R1bGF0aW9uRmxvb3I7DQorCQlzZWFzb25hbE1vZHVsYXRpb25GbG9vciA9IG5ld1NlYXNvbmFsTW9kdWxhdGlvbkZsb29yOw0KKwkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQ0KKwkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIEdsb2JhbGluZmx1ZW56YW1vZGVsUGFja2FnZS5HTE9CQUxfSU5GTFVFTlpBX01PREVMX19TRUFTT05BTF9NT0RVTEFUSU9OX0ZMT09SLCBvbGRTZWFzb25hbE1vZHVsYXRpb25GbG9vciwgc2Vhc29uYWxNb2R1bGF0aW9uRmxvb3IpKTsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCUBPdmVycmlkZQ0KKwlwdWJsaWMgT2JqZWN0IGVHZXQoaW50IGZlYXR1cmVJRCwgYm9vbGVhbiByZXNvbHZlLCBib29sZWFuIGNvcmVUeXBlKSB7DQorCQlzd2l0Y2ggKGZlYXR1cmVJRCkgew0KKwkJCWNhc2UgR2xvYmFsaW5mbHVlbnphbW9kZWxQYWNrYWdlLkdMT0JBTF9JTkZMVUVOWkFfTU9ERUxfX0xBVElUVURFX1NJR01PSURfV0lEVEg6DQorCQkJCXJldHVybiBnZXRMYXRpdHVkZVNpZ21vaWRXaWR0aCgpOw0KKwkJCWNhc2UgR2xvYmFsaW5mbHVlbnphbW9kZWxQYWNrYWdlLkdMT0JBTF9JTkZMVUVOWkFfTU9ERUxfX1NFQVNPTkFMX01PRFVMQVRJT05fRVhQT05FTlQ6DQorCQkJCXJldHVybiBnZXRTZWFzb25hbE1vZHVsYXRpb25FeHBvbmVudCgpOw0KKwkJCWNhc2UgR2xvYmFsaW5mbHVlbnphbW9kZWxQYWNrYWdlLkdMT0JBTF9JTkZMVUVOWkFfTU9ERUxfX01PRFVMQVRJT05fUEVSSU9EOg0KKwkJCQlyZXR1cm4gZ2V0TW9kdWxhdGlvblBlcmlvZCgpOw0KKwkJCWNhc2UgR2xvYmFsaW5mbHVlbnphbW9kZWxQYWNrYWdlLkdMT0JBTF9JTkZMVUVOWkFfTU9ERUxfX01PRFVMQVRJT05fUEhBU0VfU0hJRlQ6DQorCQkJCXJldHVybiBnZXRNb2R1bGF0aW9uUGhhc2VTaGlmdCgpOw0KKwkJCWNhc2UgR2xvYmFsaW5mbHVlbnphbW9kZWxQYWNrYWdlLkdMT0JBTF9JTkZMVUVOWkFfTU9ERUxfX1NFQVNPTkFMX01PRFVMQVRJT05fRkxPT1I6DQorCQkJCXJldHVybiBnZXRTZWFzb25hbE1vZHVsYXRpb25GbG9vcigpOw0KKwkJfQ0KKwkJcmV0dXJuIHN1cGVyLmVHZXQoZmVhdHVyZUlELCByZXNvbHZlLCBjb3JlVHlwZSk7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlAT3ZlcnJpZGUNCisJcHVibGljIHZvaWQgZVNldChpbnQgZmVhdHVyZUlELCBPYmplY3QgbmV3VmFsdWUpIHsNCisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7DQorCQkJY2FzZSBHbG9iYWxpbmZsdWVuemFtb2RlbFBhY2thZ2UuR0xPQkFMX0lORkxVRU5aQV9NT0RFTF9fTEFUSVRVREVfU0lHTU9JRF9XSURUSDoNCisJCQkJc2V0TGF0aXR1ZGVTaWdtb2lkV2lkdGgoKERvdWJsZSluZXdWYWx1ZSk7DQorCQkJCXJldHVybjsNCisJCQljYXNlIEdsb2JhbGluZmx1ZW56YW1vZGVsUGFja2FnZS5HTE9CQUxfSU5GTFVFTlpBX01PREVMX19TRUFTT05BTF9NT0RVTEFUSU9OX0VYUE9ORU5UOg0KKwkJCQlzZXRTZWFzb25hbE1vZHVsYXRpb25FeHBvbmVudCgoRG91YmxlKW5ld1ZhbHVlKTsNCisJCQkJcmV0dXJuOw0KKwkJCWNhc2UgR2xvYmFsaW5mbHVlbnphbW9kZWxQYWNrYWdlLkdMT0JBTF9JTkZMVUVOWkFfTU9ERUxfX01PRFVMQVRJT05fUEVSSU9EOg0KKwkJCQlzZXRNb2R1bGF0aW9uUGVyaW9kKChEb3VibGUpbmV3VmFsdWUpOw0KKwkJCQlyZXR1cm47DQorCQkJY2FzZSBHbG9iYWxpbmZsdWVuemFtb2RlbFBhY2thZ2UuR0xPQkFMX0lORkxVRU5aQV9NT0RFTF9fTU9EVUxBVElPTl9QSEFTRV9TSElGVDoNCisJCQkJc2V0TW9kdWxhdGlvblBoYXNlU2hpZnQoKERvdWJsZSluZXdWYWx1ZSk7DQorCQkJCXJldHVybjsNCisJCQljYXNlIEdsb2JhbGluZmx1ZW56YW1vZGVsUGFja2FnZS5HTE9CQUxfSU5GTFVFTlpBX01PREVMX19TRUFTT05BTF9NT0RVTEFUSU9OX0ZMT09SOg0KKwkJCQlzZXRTZWFzb25hbE1vZHVsYXRpb25GbG9vcigoRG91YmxlKW5ld1ZhbHVlKTsNCisJCQkJcmV0dXJuOw0KKwkJfQ0KKwkJc3VwZXIuZVNldChmZWF0dXJlSUQsIG5ld1ZhbHVlKTsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCUBPdmVycmlkZQ0KKwlwdWJsaWMgdm9pZCBlVW5zZXQoaW50IGZlYXR1cmVJRCkgew0KKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsNCisJCQljYXNlIEdsb2JhbGluZmx1ZW56YW1vZGVsUGFja2FnZS5HTE9CQUxfSU5GTFVFTlpBX01PREVMX19MQVRJVFVERV9TSUdNT0lEX1dJRFRIOg0KKwkJCQlzZXRMYXRpdHVkZVNpZ21vaWRXaWR0aChMQVRJVFVERV9TSUdNT0lEX1dJRFRIX0VERUZBVUxUKTsNCisJCQkJcmV0dXJuOw0KKwkJCWNhc2UgR2xvYmFsaW5mbHVlbnphbW9kZWxQYWNrYWdlLkdMT0JBTF9JTkZMVUVOWkFfTU9ERUxfX1NFQVNPTkFMX01PRFVMQVRJT05fRVhQT05FTlQ6DQorCQkJCXNldFNlYXNvbmFsTW9kdWxhdGlvbkV4cG9uZW50KFNFQVNPTkFMX01PRFVMQVRJT05fRVhQT05FTlRfRURFRkFVTFQpOw0KKwkJCQlyZXR1cm47DQorCQkJY2FzZSBHbG9iYWxpbmZsdWVuemFtb2RlbFBhY2thZ2UuR0xPQkFMX0lORkxVRU5aQV9NT0RFTF9fTU9EVUxBVElPTl9QRVJJT0Q6DQorCQkJCXNldE1vZHVsYXRpb25QZXJpb2QoTU9EVUxBVElPTl9QRVJJT0RfRURFRkFVTFQpOw0KKwkJCQlyZXR1cm47DQorCQkJY2FzZSBHbG9iYWxpbmZsdWVuemFtb2RlbFBhY2thZ2UuR0xPQkFMX0lORkxVRU5aQV9NT0RFTF9fTU9EVUxBVElPTl9QSEFTRV9TSElGVDoNCisJCQkJc2V0TW9kdWxhdGlvblBoYXNlU2hpZnQoTU9EVUxBVElPTl9QSEFTRV9TSElGVF9FREVGQVVMVCk7DQorCQkJCXJldHVybjsNCisJCQljYXNlIEdsb2JhbGluZmx1ZW56YW1vZGVsUGFja2FnZS5HTE9CQUxfSU5GTFVFTlpBX01PREVMX19TRUFTT05BTF9NT0RVTEFUSU9OX0ZMT09SOg0KKwkJCQlzZXRTZWFzb25hbE1vZHVsYXRpb25GbG9vcihTRUFTT05BTF9NT0RVTEFUSU9OX0ZMT09SX0VERUZBVUxUKTsNCisJCQkJcmV0dXJuOw0KKwkJfQ0KKwkJc3VwZXIuZVVuc2V0KGZlYXR1cmVJRCk7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlAT3ZlcnJpZGUNCisJcHVibGljIGJvb2xlYW4gZUlzU2V0KGludCBmZWF0dXJlSUQpIHsNCisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7DQorCQkJY2FzZSBHbG9iYWxpbmZsdWVuemFtb2RlbFBhY2thZ2UuR0xPQkFMX0lORkxVRU5aQV9NT0RFTF9fTEFUSVRVREVfU0lHTU9JRF9XSURUSDoNCisJCQkJcmV0dXJuIGxhdGl0dWRlU2lnbW9pZFdpZHRoICE9IExBVElUVURFX1NJR01PSURfV0lEVEhfRURFRkFVTFQ7DQorCQkJY2FzZSBHbG9iYWxpbmZsdWVuemFtb2RlbFBhY2thZ2UuR0xPQkFMX0lORkxVRU5aQV9NT0RFTF9fU0VBU09OQUxfTU9EVUxBVElPTl9FWFBPTkVOVDoNCisJCQkJcmV0dXJuIHNlYXNvbmFsTW9kdWxhdGlvbkV4cG9uZW50ICE9IFNFQVNPTkFMX01PRFVMQVRJT05fRVhQT05FTlRfRURFRkFVTFQ7DQorCQkJY2FzZSBHbG9iYWxpbmZsdWVuemFtb2RlbFBhY2thZ2UuR0xPQkFMX0lORkxVRU5aQV9NT0RFTF9fTU9EVUxBVElPTl9QRVJJT0Q6DQorCQkJCXJldHVybiBtb2R1bGF0aW9uUGVyaW9kICE9IE1PRFVMQVRJT05fUEVSSU9EX0VERUZBVUxUOw0KKwkJCWNhc2UgR2xvYmFsaW5mbHVlbnphbW9kZWxQYWNrYWdlLkdMT0JBTF9JTkZMVUVOWkFfTU9ERUxfX01PRFVMQVRJT05fUEhBU0VfU0hJRlQ6DQorCQkJCXJldHVybiBtb2R1bGF0aW9uUGhhc2VTaGlmdCAhPSBNT0RVTEFUSU9OX1BIQVNFX1NISUZUX0VERUZBVUxUOw0KKwkJCWNhc2UgR2xvYmFsaW5mbHVlbnphbW9kZWxQYWNrYWdlLkdMT0JBTF9JTkZMVUVOWkFfTU9ERUxfX1NFQVNPTkFMX01PRFVMQVRJT05fRkxPT1I6DQorCQkJCXJldHVybiBzZWFzb25hbE1vZHVsYXRpb25GbG9vciAhPSBTRUFTT05BTF9NT0RVTEFUSU9OX0ZMT09SX0VERUZBVUxUOw0KKwkJfQ0KKwkJcmV0dXJuIHN1cGVyLmVJc1NldChmZWF0dXJlSUQpOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJQE92ZXJyaWRlDQorCXB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKSB7DQorCQlpZiAoZUlzUHJveHkoKSkgcmV0dXJuIHN1cGVyLnRvU3RyaW5nKCk7DQorDQorCQlTdHJpbmdCdWZmZXIgcmVzdWx0ID0gbmV3IFN0cmluZ0J1ZmZlcihzdXBlci50b1N0cmluZygpKTsNCisJCXJlc3VsdC5hcHBlbmQoIiAobGF0aXR1ZGVTaWdtb2lkV2lkdGg6ICIpOw0KKwkJcmVzdWx0LmFwcGVuZChsYXRpdHVkZVNpZ21vaWRXaWR0aCk7DQorCQlyZXN1bHQuYXBwZW5kKCIsIHNlYXNvbmFsTW9kdWxhdGlvbkV4cG9uZW50OiAiKTsNCisJCXJlc3VsdC5hcHBlbmQoc2Vhc29uYWxNb2R1bGF0aW9uRXhwb25lbnQpOw0KKwkJcmVzdWx0LmFwcGVuZCgiLCBtb2R1bGF0aW9uUGVyaW9kOiAiKTsNCisJCXJlc3VsdC5hcHBlbmQobW9kdWxhdGlvblBlcmlvZCk7DQorCQlyZXN1bHQuYXBwZW5kKCIsIG1vZHVsYXRpb25QaGFzZVNoaWZ0OiAiKTsNCisJCXJlc3VsdC5hcHBlbmQobW9kdWxhdGlvblBoYXNlU2hpZnQpOw0KKwkJcmVzdWx0LmFwcGVuZCgiLCBzZWFzb25hbE1vZHVsYXRpb25GbG9vcjogIik7DQorCQlyZXN1bHQuYXBwZW5kKHNlYXNvbmFsTW9kdWxhdGlvbkZsb29yKTsNCisJCXJlc3VsdC5hcHBlbmQoJyknKTsNCisJCXJldHVybiByZXN1bHQudG9TdHJpbmcoKTsNCisJfQ0KKw0KK30gLy9HbG9iYWxJbmZsdWVuemFNb2RlbEltcGwNCmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5nbG9iYWxpbmZsdWVuemFtb2RlbC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL2dsb2JhbGluZmx1ZW56YW1vZGVsL2ltcGwvR2xvYmFsaW5mbHVlbnphbW9kZWxGYWN0b3J5SW1wbC5qYXZhIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZ2xvYmFsaW5mbHVlbnphbW9kZWwvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9nbG9iYWxpbmZsdWVuemFtb2RlbC9pbXBsL0dsb2JhbGluZmx1ZW56YW1vZGVsRmFjdG9yeUltcGwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNTlmNjNiCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZ2xvYmFsaW5mbHVlbnphbW9kZWwvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9nbG9iYWxpbmZsdWVuemFtb2RlbC9pbXBsL0dsb2JhbGluZmx1ZW56YW1vZGVsRmFjdG9yeUltcGwuamF2YQpAQCAtMCwwICsxLDEwNCBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZ2xvYmFsaW5mbHVlbnphbW9kZWwuaW1wbDsNCisNCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyAqIENvcHlyaWdodCAoYykgMjAwOSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4NCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzDQorICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wDQorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQNCisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbA0KKyAqDQorICogQ29udHJpYnV0b3JzOg0KKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24NCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCisNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzczsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3Q7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FUGFja2FnZTsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLmltcGwuRUZhY3RvcnlJbXBsOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUucGx1Z2luLkVjb3JlUGx1Z2luOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZ2xvYmFsaW5mbHVlbnphbW9kZWwuKjsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmdsb2JhbGluZmx1ZW56YW1vZGVsLkdsb2JhbEluZmx1ZW56YU1vZGVsOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZ2xvYmFsaW5mbHVlbnphbW9kZWwuR2xvYmFsaW5mbHVlbnphbW9kZWxGYWN0b3J5Ow0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZ2xvYmFsaW5mbHVlbnphbW9kZWwuR2xvYmFsaW5mbHVlbnphbW9kZWxQYWNrYWdlOw0KKw0KKy8qKg0KKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorICogQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIG1vZGVsIDxiPkZhY3Rvcnk8L2I+Lg0KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKyAqIEBnZW5lcmF0ZWQNCisgKi8NCitwdWJsaWMgY2xhc3MgR2xvYmFsaW5mbHVlbnphbW9kZWxGYWN0b3J5SW1wbCBleHRlbmRzIEVGYWN0b3J5SW1wbCBpbXBsZW1lbnRzIEdsb2JhbGluZmx1ZW56YW1vZGVsRmFjdG9yeSB7DQorCS8qKg0KKwkgKiBDcmVhdGVzIHRoZSBkZWZhdWx0IGZhY3RvcnkgaW1wbGVtZW50YXRpb24uDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgc3RhdGljIEdsb2JhbGluZmx1ZW56YW1vZGVsRmFjdG9yeSBpbml0KCkgew0KKwkJdHJ5IHsNCisJCQlHbG9iYWxpbmZsdWVuemFtb2RlbEZhY3RvcnkgdGhlR2xvYmFsaW5mbHVlbnphbW9kZWxGYWN0b3J5ID0gKEdsb2JhbGluZmx1ZW56YW1vZGVsRmFjdG9yeSlFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFRmFjdG9yeSgiaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvZ2xvYmFsaW5mbHVlbnphbW9kZWwuZWNvcmUiKTsgDQorCQkJaWYgKHRoZUdsb2JhbGluZmx1ZW56YW1vZGVsRmFjdG9yeSAhPSBudWxsKSB7DQorCQkJCXJldHVybiB0aGVHbG9iYWxpbmZsdWVuemFtb2RlbEZhY3Rvcnk7DQorCQkJfQ0KKwkJfQ0KKwkJY2F0Y2ggKEV4Y2VwdGlvbiBleGNlcHRpb24pIHsNCisJCQlFY29yZVBsdWdpbi5JTlNUQU5DRS5sb2coZXhjZXB0aW9uKTsNCisJCX0NCisJCXJldHVybiBuZXcgR2xvYmFsaW5mbHVlbnphbW9kZWxGYWN0b3J5SW1wbCgpOw0KKwl9DQorDQorCS8qKg0KKwkgKiBDcmVhdGVzIGFuIGluc3RhbmNlIG9mIHRoZSBmYWN0b3J5Lg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIEdsb2JhbGluZmx1ZW56YW1vZGVsRmFjdG9yeUltcGwoKSB7DQorCQlzdXBlcigpOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJQE92ZXJyaWRlDQorCXB1YmxpYyBFT2JqZWN0IGNyZWF0ZShFQ2xhc3MgZUNsYXNzKSB7DQorCQlzd2l0Y2ggKGVDbGFzcy5nZXRDbGFzc2lmaWVySUQoKSkgew0KKwkJCWNhc2UgR2xvYmFsaW5mbHVlbnphbW9kZWxQYWNrYWdlLkdMT0JBTF9JTkZMVUVOWkFfTU9ERUw6IHJldHVybiBjcmVhdGVHbG9iYWxJbmZsdWVuemFNb2RlbCgpOw0KKwkJCWRlZmF1bHQ6DQorCQkJCXRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIlRoZSBjbGFzcyAnIiArIGVDbGFzcy5nZXROYW1lKCkgKyAiJyBpcyBub3QgYSB2YWxpZCBjbGFzc2lmaWVyIik7DQorCQl9DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgR2xvYmFsSW5mbHVlbnphTW9kZWwgY3JlYXRlR2xvYmFsSW5mbHVlbnphTW9kZWwoKSB7DQorCQlHbG9iYWxJbmZsdWVuemFNb2RlbEltcGwgZ2xvYmFsSW5mbHVlbnphTW9kZWwgPSBuZXcgR2xvYmFsSW5mbHVlbnphTW9kZWxJbXBsKCk7DQorCQlyZXR1cm4gZ2xvYmFsSW5mbHVlbnphTW9kZWw7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgR2xvYmFsaW5mbHVlbnphbW9kZWxQYWNrYWdlIGdldEdsb2JhbGluZmx1ZW56YW1vZGVsUGFja2FnZSgpIHsNCisJCXJldHVybiAoR2xvYmFsaW5mbHVlbnphbW9kZWxQYWNrYWdlKWdldEVQYWNrYWdlKCk7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZGVwcmVjYXRlZA0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlARGVwcmVjYXRlZA0KKwlwdWJsaWMgc3RhdGljIEdsb2JhbGluZmx1ZW56YW1vZGVsUGFja2FnZSBnZXRQYWNrYWdlKCkgew0KKwkJcmV0dXJuIEdsb2JhbGluZmx1ZW56YW1vZGVsUGFja2FnZS5lSU5TVEFOQ0U7DQorCX0NCisNCit9IC8vR2xvYmFsaW5mbHVlbnphbW9kZWxGYWN0b3J5SW1wbA0KZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmdsb2JhbGluZmx1ZW56YW1vZGVsL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvZ2xvYmFsaW5mbHVlbnphbW9kZWwvaW1wbC9HbG9iYWxpbmZsdWVuemFtb2RlbFBhY2thZ2VJbXBsLmphdmEgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5nbG9iYWxpbmZsdWVuemFtb2RlbC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL2dsb2JhbGluZmx1ZW56YW1vZGVsL2ltcGwvR2xvYmFsaW5mbHVlbnphbW9kZWxQYWNrYWdlSW1wbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjExNzQxNWUKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5nbG9iYWxpbmZsdWVuemFtb2RlbC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL2dsb2JhbGluZmx1ZW56YW1vZGVsL2ltcGwvR2xvYmFsaW5mbHVlbnphbW9kZWxQYWNrYWdlSW1wbC5qYXZhCkBAIC0wLDAgKzEsMjM4IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5nbG9iYWxpbmZsdWVuemFtb2RlbC5pbXBsOw0KKw0KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorICogQ29weXJpZ2h0IChjKSAyMDA5IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLg0KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMNCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjANCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdA0KKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sDQorICoNCisgKiBDb250cmlidXRvcnM6DQorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbg0KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KKw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUF0dHJpYnV0ZTsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzczsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVQYWNrYWdlOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuaW1wbC5FUGFja2FnZUltcGw7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5sb2dnZXIuTG9nZ2VyUGFja2FnZTsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmdsb2JhbGluZmx1ZW56YW1vZGVsLkdsb2JhbEluZmx1ZW56YU1vZGVsOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZ2xvYmFsaW5mbHVlbnphbW9kZWwuR2xvYmFsaW5mbHVlbnphbW9kZWxGYWN0b3J5Ow0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZ2xvYmFsaW5mbHVlbnphbW9kZWwuR2xvYmFsaW5mbHVlbnphbW9kZWxQYWNrYWdlOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmRQYWNrYWdlOw0KKw0KKy8qKg0KKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorICogQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIG1vZGVsIDxiPlBhY2thZ2U8L2I+Lg0KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKyAqIEBnZW5lcmF0ZWQNCisgKi8NCitwdWJsaWMgY2xhc3MgR2xvYmFsaW5mbHVlbnphbW9kZWxQYWNrYWdlSW1wbCBleHRlbmRzIEVQYWNrYWdlSW1wbCBpbXBsZW1lbnRzIEdsb2JhbGluZmx1ZW56YW1vZGVsUGFja2FnZSB7DQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJpdmF0ZSBFQ2xhc3MgZ2xvYmFsSW5mbHVlbnphTW9kZWxFQ2xhc3MgPSBudWxsOw0KKw0KKwkvKioNCisJICogQ3JlYXRlcyBhbiBpbnN0YW5jZSBvZiB0aGUgbW9kZWwgPGI+UGFja2FnZTwvYj4sIHJlZ2lzdGVyZWQgd2l0aA0KKwkgKiB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVQYWNrYWdlLlJlZ2lzdHJ5IEVQYWNrYWdlLlJlZ2lzdHJ5fSBieSB0aGUgcGFja2FnZQ0KKwkgKiBwYWNrYWdlIFVSSSB2YWx1ZS4NCisJICogPHA+Tm90ZTogdGhlIGNvcnJlY3Qgd2F5IHRvIGNyZWF0ZSB0aGUgcGFja2FnZSBpcyB2aWEgdGhlIHN0YXRpYw0KKwkgKiBmYWN0b3J5IG1ldGhvZCB7QGxpbmsgI2luaXQgaW5pdCgpfSwgd2hpY2ggYWxzbyBwZXJmb3Jtcw0KKwkgKiBpbml0aWFsaXphdGlvbiBvZiB0aGUgcGFja2FnZSwgb3IgcmV0dXJucyB0aGUgcmVnaXN0ZXJlZCBwYWNrYWdlLA0KKwkgKiBpZiBvbmUgYWxyZWFkeSBleGlzdHMuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FUGFja2FnZS5SZWdpc3RyeQ0KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5nbG9iYWxpbmZsdWVuemFtb2RlbC5HbG9iYWxpbmZsdWVuemFtb2RlbFBhY2thZ2UjZU5TX1VSSQ0KKwkgKiBAc2VlICNpbml0KCkNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJpdmF0ZSBHbG9iYWxpbmZsdWVuemFtb2RlbFBhY2thZ2VJbXBsKCkgew0KKwkJc3VwZXIoZU5TX1VSSSwgR2xvYmFsaW5mbHVlbnphbW9kZWxGYWN0b3J5LmVJTlNUQU5DRSk7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcml2YXRlIHN0YXRpYyBib29sZWFuIGlzSW5pdGVkID0gZmFsc2U7DQorDQorCS8qKg0KKwkgKiBDcmVhdGVzLCByZWdpc3RlcnMsIGFuZCBpbml0aWFsaXplcyB0aGUgPGI+UGFja2FnZTwvYj4gZm9yIHRoaXMgbW9kZWwsIGFuZCBmb3IgYW55IG90aGVycyB1cG9uIHdoaWNoIGl0IGRlcGVuZHMuDQorCSAqIA0KKwkgKiA8cD5UaGlzIG1ldGhvZCBpcyB1c2VkIHRvIGluaXRpYWxpemUge0BsaW5rIEdsb2JhbGluZmx1ZW56YW1vZGVsUGFja2FnZSNlSU5TVEFOQ0V9IHdoZW4gdGhhdCBmaWVsZCBpcyBhY2Nlc3NlZC4NCisJICogQ2xpZW50cyBzaG91bGQgbm90IGludm9rZSBpdCBkaXJlY3RseS4gSW5zdGVhZCwgdGhleSBzaG91bGQgc2ltcGx5IGFjY2VzcyB0aGF0IGZpZWxkIHRvIG9idGFpbiB0aGUgcGFja2FnZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBzZWUgI2VOU19VUkkNCisJICogQHNlZSAjY3JlYXRlUGFja2FnZUNvbnRlbnRzKCkNCisJICogQHNlZSAjaW5pdGlhbGl6ZVBhY2thZ2VDb250ZW50cygpDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBzdGF0aWMgR2xvYmFsaW5mbHVlbnphbW9kZWxQYWNrYWdlIGluaXQoKSB7DQorCQlpZiAoaXNJbml0ZWQpIHJldHVybiAoR2xvYmFsaW5mbHVlbnphbW9kZWxQYWNrYWdlKUVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVQYWNrYWdlKEdsb2JhbGluZmx1ZW56YW1vZGVsUGFja2FnZS5lTlNfVVJJKTsNCisNCisJCS8vIE9idGFpbiBvciBjcmVhdGUgYW5kIHJlZ2lzdGVyIHBhY2thZ2UNCisJCUdsb2JhbGluZmx1ZW56YW1vZGVsUGFja2FnZUltcGwgdGhlR2xvYmFsaW5mbHVlbnphbW9kZWxQYWNrYWdlID0gKEdsb2JhbGluZmx1ZW56YW1vZGVsUGFja2FnZUltcGwpKEVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldChlTlNfVVJJKSBpbnN0YW5jZW9mIEdsb2JhbGluZmx1ZW56YW1vZGVsUGFja2FnZUltcGwgPyBFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXQoZU5TX1VSSSkgOiBuZXcgR2xvYmFsaW5mbHVlbnphbW9kZWxQYWNrYWdlSW1wbCgpKTsNCisNCisJCWlzSW5pdGVkID0gdHJ1ZTsNCisNCisJCS8vIEluaXRpYWxpemUgc2ltcGxlIGRlcGVuZGVuY2llcw0KKwkJU3RhbmRhcmRQYWNrYWdlLmVJTlNUQU5DRS5lQ2xhc3MoKTsNCisJCUxvZ2dlclBhY2thZ2UuZUlOU1RBTkNFLmVDbGFzcygpOw0KKw0KKwkJLy8gQ3JlYXRlIHBhY2thZ2UgbWV0YS1kYXRhIG9iamVjdHMNCisJCXRoZUdsb2JhbGluZmx1ZW56YW1vZGVsUGFja2FnZS5jcmVhdGVQYWNrYWdlQ29udGVudHMoKTsNCisNCisJCS8vIEluaXRpYWxpemUgY3JlYXRlZCBtZXRhLWRhdGENCisJCXRoZUdsb2JhbGluZmx1ZW56YW1vZGVsUGFja2FnZS5pbml0aWFsaXplUGFja2FnZUNvbnRlbnRzKCk7DQorDQorCQkvLyBNYXJrIG1ldGEtZGF0YSB0byBpbmRpY2F0ZSBpdCBjYW4ndCBiZSBjaGFuZ2VkDQorCQl0aGVHbG9iYWxpbmZsdWVuemFtb2RlbFBhY2thZ2UuZnJlZXplKCk7DQorDQorICANCisJCS8vIFVwZGF0ZSB0aGUgcmVnaXN0cnkgYW5kIHJldHVybiB0aGUgcGFja2FnZQ0KKwkJRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UucHV0KEdsb2JhbGluZmx1ZW56YW1vZGVsUGFja2FnZS5lTlNfVVJJLCB0aGVHbG9iYWxpbmZsdWVuemFtb2RlbFBhY2thZ2UpOw0KKwkJcmV0dXJuIHRoZUdsb2JhbGluZmx1ZW56YW1vZGVsUGFja2FnZTsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBFQ2xhc3MgZ2V0R2xvYmFsSW5mbHVlbnphTW9kZWwoKSB7DQorCQlyZXR1cm4gZ2xvYmFsSW5mbHVlbnphTW9kZWxFQ2xhc3M7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgRUF0dHJpYnV0ZSBnZXRHbG9iYWxJbmZsdWVuemFNb2RlbF9MYXRpdHVkZVNpZ21vaWRXaWR0aCgpIHsNCisJCXJldHVybiAoRUF0dHJpYnV0ZSlnbG9iYWxJbmZsdWVuemFNb2RlbEVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDApOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIEVBdHRyaWJ1dGUgZ2V0R2xvYmFsSW5mbHVlbnphTW9kZWxfU2Vhc29uYWxNb2R1bGF0aW9uRXhwb25lbnQoKSB7DQorCQlyZXR1cm4gKEVBdHRyaWJ1dGUpZ2xvYmFsSW5mbHVlbnphTW9kZWxFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgxKTsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBFQXR0cmlidXRlIGdldEdsb2JhbEluZmx1ZW56YU1vZGVsX01vZHVsYXRpb25QZXJpb2QoKSB7DQorCQlyZXR1cm4gKEVBdHRyaWJ1dGUpZ2xvYmFsSW5mbHVlbnphTW9kZWxFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgyKTsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBFQXR0cmlidXRlIGdldEdsb2JhbEluZmx1ZW56YU1vZGVsX01vZHVsYXRpb25QaGFzZVNoaWZ0KCkgew0KKwkJcmV0dXJuIChFQXR0cmlidXRlKWdsb2JhbEluZmx1ZW56YU1vZGVsRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMyk7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgRUF0dHJpYnV0ZSBnZXRHbG9iYWxJbmZsdWVuemFNb2RlbF9TZWFzb25hbE1vZHVsYXRpb25GbG9vcigpIHsNCisJCXJldHVybiAoRUF0dHJpYnV0ZSlnbG9iYWxJbmZsdWVuemFNb2RlbEVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDQpOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIEdsb2JhbGluZmx1ZW56YW1vZGVsRmFjdG9yeSBnZXRHbG9iYWxpbmZsdWVuemFtb2RlbEZhY3RvcnkoKSB7DQorCQlyZXR1cm4gKEdsb2JhbGluZmx1ZW56YW1vZGVsRmFjdG9yeSlnZXRFRmFjdG9yeUluc3RhbmNlKCk7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcml2YXRlIGJvb2xlYW4gaXNDcmVhdGVkID0gZmFsc2U7DQorDQorCS8qKg0KKwkgKiBDcmVhdGVzIHRoZSBtZXRhLW1vZGVsIG9iamVjdHMgZm9yIHRoZSBwYWNrYWdlLiAgVGhpcyBtZXRob2QgaXMNCisJICogZ3VhcmRlZCB0byBoYXZlIG5vIGFmZmVjdCBvbiBhbnkgaW52b2NhdGlvbiBidXQgaXRzIGZpcnN0Lg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIHZvaWQgY3JlYXRlUGFja2FnZUNvbnRlbnRzKCkgew0KKwkJaWYgKGlzQ3JlYXRlZCkgcmV0dXJuOw0KKwkJaXNDcmVhdGVkID0gdHJ1ZTsNCisNCisJCS8vIENyZWF0ZSBjbGFzc2VzIGFuZCB0aGVpciBmZWF0dXJlcw0KKwkJZ2xvYmFsSW5mbHVlbnphTW9kZWxFQ2xhc3MgPSBjcmVhdGVFQ2xhc3MoR0xPQkFMX0lORkxVRU5aQV9NT0RFTCk7DQorCQljcmVhdGVFQXR0cmlidXRlKGdsb2JhbEluZmx1ZW56YU1vZGVsRUNsYXNzLCBHTE9CQUxfSU5GTFVFTlpBX01PREVMX19MQVRJVFVERV9TSUdNT0lEX1dJRFRIKTsNCisJCWNyZWF0ZUVBdHRyaWJ1dGUoZ2xvYmFsSW5mbHVlbnphTW9kZWxFQ2xhc3MsIEdMT0JBTF9JTkZMVUVOWkFfTU9ERUxfX1NFQVNPTkFMX01PRFVMQVRJT05fRVhQT05FTlQpOw0KKwkJY3JlYXRlRUF0dHJpYnV0ZShnbG9iYWxJbmZsdWVuemFNb2RlbEVDbGFzcywgR0xPQkFMX0lORkxVRU5aQV9NT0RFTF9fTU9EVUxBVElPTl9QRVJJT0QpOw0KKwkJY3JlYXRlRUF0dHJpYnV0ZShnbG9iYWxJbmZsdWVuemFNb2RlbEVDbGFzcywgR0xPQkFMX0lORkxVRU5aQV9NT0RFTF9fTU9EVUxBVElPTl9QSEFTRV9TSElGVCk7DQorCQljcmVhdGVFQXR0cmlidXRlKGdsb2JhbEluZmx1ZW56YU1vZGVsRUNsYXNzLCBHTE9CQUxfSU5GTFVFTlpBX01PREVMX19TRUFTT05BTF9NT0RVTEFUSU9OX0ZMT09SKTsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByaXZhdGUgYm9vbGVhbiBpc0luaXRpYWxpemVkID0gZmFsc2U7DQorDQorCS8qKg0KKwkgKiBDb21wbGV0ZSB0aGUgaW5pdGlhbGl6YXRpb24gb2YgdGhlIHBhY2thZ2UgYW5kIGl0cyBtZXRhLW1vZGVsLiAgVGhpcw0KKwkgKiBtZXRob2QgaXMgZ3VhcmRlZCB0byBoYXZlIG5vIGFmZmVjdCBvbiBhbnkgaW52b2NhdGlvbiBidXQgaXRzIGZpcnN0Lg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIHZvaWQgaW5pdGlhbGl6ZVBhY2thZ2VDb250ZW50cygpIHsNCisJCWlmIChpc0luaXRpYWxpemVkKSByZXR1cm47DQorCQlpc0luaXRpYWxpemVkID0gdHJ1ZTsNCisNCisJCS8vIEluaXRpYWxpemUgcGFja2FnZQ0KKwkJc2V0TmFtZShlTkFNRSk7DQorCQlzZXROc1ByZWZpeChlTlNfUFJFRklYKTsNCisJCXNldE5zVVJJKGVOU19VUkkpOw0KKw0KKwkJLy8gT2J0YWluIG90aGVyIGRlcGVuZGVudCBwYWNrYWdlcw0KKwkJU3RhbmRhcmRQYWNrYWdlIHRoZVN0YW5kYXJkUGFja2FnZSA9IChTdGFuZGFyZFBhY2thZ2UpRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RVBhY2thZ2UoU3RhbmRhcmRQYWNrYWdlLmVOU19VUkkpOw0KKw0KKwkJLy8gQ3JlYXRlIHR5cGUgcGFyYW1ldGVycw0KKw0KKwkJLy8gU2V0IGJvdW5kcyBmb3IgdHlwZSBwYXJhbWV0ZXJzDQorDQorCQkvLyBBZGQgc3VwZXJ0eXBlcyB0byBjbGFzc2VzDQorCQlnbG9iYWxJbmZsdWVuemFNb2RlbEVDbGFzcy5nZXRFU3VwZXJUeXBlcygpLmFkZCh0aGVTdGFuZGFyZFBhY2thZ2UuZ2V0U3RvY2hhc3RpY1NJUkRpc2Vhc2VNb2RlbCgpKTsNCisNCisJCS8vIEluaXRpYWxpemUgY2xhc3NlcyBhbmQgZmVhdHVyZXM7IGFkZCBvcGVyYXRpb25zIGFuZCBwYXJhbWV0ZXJzDQorCQlpbml0RUNsYXNzKGdsb2JhbEluZmx1ZW56YU1vZGVsRUNsYXNzLCBHbG9iYWxJbmZsdWVuemFNb2RlbC5jbGFzcywgIkdsb2JhbEluZmx1ZW56YU1vZGVsIiwgIUlTX0FCU1RSQUNULCAhSVNfSU5URVJGQUNFLCBJU19HRU5FUkFURURfSU5TVEFOQ0VfQ0xBU1MpOw0KKwkJaW5pdEVBdHRyaWJ1dGUoZ2V0R2xvYmFsSW5mbHVlbnphTW9kZWxfTGF0aXR1ZGVTaWdtb2lkV2lkdGgoKSwgZWNvcmVQYWNrYWdlLmdldEVEb3VibGUoKSwgImxhdGl0dWRlU2lnbW9pZFdpZHRoIiwgIjQuNTAiLCAwLCAxLCBHbG9iYWxJbmZsdWVuemFNb2RlbC5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsNCisJCWluaXRFQXR0cmlidXRlKGdldEdsb2JhbEluZmx1ZW56YU1vZGVsX1NlYXNvbmFsTW9kdWxhdGlvbkV4cG9uZW50KCksIGVjb3JlUGFja2FnZS5nZXRFRG91YmxlKCksICJzZWFzb25hbE1vZHVsYXRpb25FeHBvbmVudCIsICIyLjAiLCAwLCAxLCBHbG9iYWxJbmZsdWVuemFNb2RlbC5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsNCisJCWluaXRFQXR0cmlidXRlKGdldEdsb2JhbEluZmx1ZW56YU1vZGVsX01vZHVsYXRpb25QZXJpb2QoKSwgZWNvcmVQYWNrYWdlLmdldEVEb3VibGUoKSwgIm1vZHVsYXRpb25QZXJpb2QiLCAiMzY1LjI1NjM2MzA1MSIsIDAsIDEsIEdsb2JhbEluZmx1ZW56YU1vZGVsLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOw0KKwkJaW5pdEVBdHRyaWJ1dGUoZ2V0R2xvYmFsSW5mbHVlbnphTW9kZWxfTW9kdWxhdGlvblBoYXNlU2hpZnQoKSwgZWNvcmVQYWNrYWdlLmdldEVEb3VibGUoKSwgIm1vZHVsYXRpb25QaGFzZVNoaWZ0IiwgIjAuMCIsIDAsIDEsIEdsb2JhbEluZmx1ZW56YU1vZGVsLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOw0KKwkJaW5pdEVBdHRyaWJ1dGUoZ2V0R2xvYmFsSW5mbHVlbnphTW9kZWxfU2Vhc29uYWxNb2R1bGF0aW9uRmxvb3IoKSwgZWNvcmVQYWNrYWdlLmdldEVEb3VibGUoKSwgInNlYXNvbmFsTW9kdWxhdGlvbkZsb29yIiwgIjAuNiIsIDAsIDEsIEdsb2JhbEluZmx1ZW56YU1vZGVsLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOw0KKw0KKwkJLy8gQ3JlYXRlIHJlc291cmNlDQorCQljcmVhdGVSZXNvdXJjZShlTlNfVVJJKTsNCisJfQ0KKw0KK30gLy9HbG9iYWxpbmZsdWVuemFtb2RlbFBhY2thZ2VJbXBsDQpkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZ2xvYmFsaW5mbHVlbnphbW9kZWwvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9nbG9iYWxpbmZsdWVuemFtb2RlbC9wcm92aWRlci9HbG9iYWxJbmZsdWVuemFNb2RlbEl0ZW1Qcm92aWRlci5qYXZhIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZ2xvYmFsaW5mbHVlbnphbW9kZWwvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9nbG9iYWxpbmZsdWVuemFtb2RlbC9wcm92aWRlci9HbG9iYWxJbmZsdWVuemFNb2RlbEl0ZW1Qcm92aWRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIxZjY1NzQKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5nbG9iYWxpbmZsdWVuemFtb2RlbC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL2dsb2JhbGluZmx1ZW56YW1vZGVsL3Byb3ZpZGVyL0dsb2JhbEluZmx1ZW56YU1vZGVsSXRlbVByb3ZpZGVyLmphdmEKQEAgLTAsMCArMSwyNzEgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmdsb2JhbGluZmx1ZW56YW1vZGVsLnByb3ZpZGVyOw0KKw0KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorICogQ29weXJpZ2h0IChjKSAyMDA5IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLg0KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMNCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjANCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdA0KKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sDQorICoNCisgKiBDb250cmlidXRvcnM6DQorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbg0KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KKw0KKw0KK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsNCitpbXBvcnQgamF2YS51dGlsLkxpc3Q7DQorDQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LkFkYXB0ZXJGYWN0b3J5Ow0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb247DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5SZXNvdXJjZUxvY2F0b3I7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkNvbXBvc2VhYmxlQWRhcHRlckZhY3Rvcnk7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklFZGl0aW5nRG9tYWluSXRlbVByb3ZpZGVyOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbUxhYmVsUHJvdmlkZXI7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtUHJvcGVydHlEZXNjcmlwdG9yOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbVByb3BlcnR5U291cmNlOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JU3RydWN0dXJlZEl0ZW1Db250ZW50UHJvdmlkZXI7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklUcmVlSXRlbUNvbnRlbnRQcm92aWRlcjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSXRlbVByb3BlcnR5RGVzY3JpcHRvcjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuVmlld2VyTm90aWZpY2F0aW9uOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZ2xvYmFsaW5mbHVlbnphbW9kZWwuR2xvYmFsSW5mbHVlbnphTW9kZWw7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5nbG9iYWxpbmZsdWVuemFtb2RlbC5HbG9iYWxpbmZsdWVuemFtb2RlbFBhY2thZ2U7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5wcm92aWRlci5TdG9jaGFzdGljU0lSRGlzZWFzZU1vZGVsSXRlbVByb3ZpZGVyOw0KKw0KKy8qKg0KKyAqIFRoaXMgaXMgdGhlIGl0ZW0gcHJvdmlkZXIgYWRhcHRlciBmb3IgYSB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmdsb2JhbGluZmx1ZW56YW1vZGVsLkdsb2JhbEluZmx1ZW56YU1vZGVsfSBvYmplY3QuDQorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisgKiBAZ2VuZXJhdGVkDQorICovDQorcHVibGljIGNsYXNzIEdsb2JhbEluZmx1ZW56YU1vZGVsSXRlbVByb3ZpZGVyDQorCWV4dGVuZHMgU3RvY2hhc3RpY1NJUkRpc2Vhc2VNb2RlbEl0ZW1Qcm92aWRlcg0KKwlpbXBsZW1lbnRzDQorCQlJRWRpdGluZ0RvbWFpbkl0ZW1Qcm92aWRlciwNCisJCUlTdHJ1Y3R1cmVkSXRlbUNvbnRlbnRQcm92aWRlciwNCisJCUlUcmVlSXRlbUNvbnRlbnRQcm92aWRlciwNCisJCUlJdGVtTGFiZWxQcm92aWRlciwNCisJCUlJdGVtUHJvcGVydHlTb3VyY2Ugew0KKwkvKioNCisJICogVGhpcyBjb25zdHJ1Y3RzIGFuIGluc3RhbmNlIGZyb20gYSBmYWN0b3J5IGFuZCBhIG5vdGlmaWVyLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIEdsb2JhbEluZmx1ZW56YU1vZGVsSXRlbVByb3ZpZGVyKEFkYXB0ZXJGYWN0b3J5IGFkYXB0ZXJGYWN0b3J5KSB7DQorCQlzdXBlcihhZGFwdGVyRmFjdG9yeSk7DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgcmV0dXJucyB0aGUgcHJvcGVydHkgZGVzY3JpcHRvcnMgZm9yIHRoZSBhZGFwdGVkIGNsYXNzLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJQE92ZXJyaWRlDQorCXB1YmxpYyBMaXN0PElJdGVtUHJvcGVydHlEZXNjcmlwdG9yPiBnZXRQcm9wZXJ0eURlc2NyaXB0b3JzKE9iamVjdCBvYmplY3QpIHsNCisJCWlmIChpdGVtUHJvcGVydHlEZXNjcmlwdG9ycyA9PSBudWxsKSB7DQorCQkJc3VwZXIuZ2V0UHJvcGVydHlEZXNjcmlwdG9ycyhvYmplY3QpOw0KKw0KKwkJCWFkZExhdGl0dWRlU2lnbW9pZFdpZHRoUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCk7DQorCQkJYWRkU2Vhc29uYWxNb2R1bGF0aW9uRXhwb25lbnRQcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0KTsNCisJCQlhZGRNb2R1bGF0aW9uUGVyaW9kUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCk7DQorCQkJYWRkTW9kdWxhdGlvblBoYXNlU2hpZnRQcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0KTsNCisJCQlhZGRTZWFzb25hbE1vZHVsYXRpb25GbG9vclByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QpOw0KKwkJfQ0KKwkJcmV0dXJuIGl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzOw0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIGFkZHMgYSBwcm9wZXJ0eSBkZXNjcmlwdG9yIGZvciB0aGUgTGF0aXR1ZGUgU2lnbW9pZCBXaWR0aCBmZWF0dXJlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIHZvaWQgYWRkTGF0aXR1ZGVTaWdtb2lkV2lkdGhQcm9wZXJ0eURlc2NyaXB0b3IoT2JqZWN0IG9iamVjdCkgew0KKwkJaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMuYWRkDQorCQkJKGNyZWF0ZUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3INCisJCQkJKCgoQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSlhZGFwdGVyRmFjdG9yeSkuZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCksDQorCQkJCSBnZXRSZXNvdXJjZUxvY2F0b3IoKSwNCisJCQkJIGdldFN0cmluZygiX1VJX0dsb2JhbEluZmx1ZW56YU1vZGVsX2xhdGl0dWRlU2lnbW9pZFdpZHRoX2ZlYXR1cmUiKSwNCisJCQkJIGdldFN0cmluZygiX1VJX1Byb3BlcnR5RGVzY3JpcHRvcl9kZXNjcmlwdGlvbiIsICJfVUlfR2xvYmFsSW5mbHVlbnphTW9kZWxfbGF0aXR1ZGVTaWdtb2lkV2lkdGhfZmVhdHVyZSIsICJfVUlfR2xvYmFsSW5mbHVlbnphTW9kZWxfdHlwZSIpLA0KKwkJCQkgR2xvYmFsaW5mbHVlbnphbW9kZWxQYWNrYWdlLkxpdGVyYWxzLkdMT0JBTF9JTkZMVUVOWkFfTU9ERUxfX0xBVElUVURFX1NJR01PSURfV0lEVEgsDQorCQkJCSB0cnVlLA0KKwkJCQkgZmFsc2UsDQorCQkJCSBmYWxzZSwNCisJCQkJIEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IuUkVBTF9WQUxVRV9JTUFHRSwNCisJCQkJIG51bGwsDQorCQkJCSBudWxsKSk7DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgYWRkcyBhIHByb3BlcnR5IGRlc2NyaXB0b3IgZm9yIHRoZSBTZWFzb25hbCBNb2R1bGF0aW9uIEV4cG9uZW50IGZlYXR1cmUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgdm9pZCBhZGRTZWFzb25hbE1vZHVsYXRpb25FeHBvbmVudFByb3BlcnR5RGVzY3JpcHRvcihPYmplY3Qgb2JqZWN0KSB7DQorCQlpdGVtUHJvcGVydHlEZXNjcmlwdG9ycy5hZGQNCisJCQkoY3JlYXRlSXRlbVByb3BlcnR5RGVzY3JpcHRvcg0KKwkJCQkoKChDb21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5KWFkYXB0ZXJGYWN0b3J5KS5nZXRSb290QWRhcHRlckZhY3RvcnkoKSwNCisJCQkJIGdldFJlc291cmNlTG9jYXRvcigpLA0KKwkJCQkgZ2V0U3RyaW5nKCJfVUlfR2xvYmFsSW5mbHVlbnphTW9kZWxfc2Vhc29uYWxNb2R1bGF0aW9uRXhwb25lbnRfZmVhdHVyZSIpLA0KKwkJCQkgZ2V0U3RyaW5nKCJfVUlfUHJvcGVydHlEZXNjcmlwdG9yX2Rlc2NyaXB0aW9uIiwgIl9VSV9HbG9iYWxJbmZsdWVuemFNb2RlbF9zZWFzb25hbE1vZHVsYXRpb25FeHBvbmVudF9mZWF0dXJlIiwgIl9VSV9HbG9iYWxJbmZsdWVuemFNb2RlbF90eXBlIiksDQorCQkJCSBHbG9iYWxpbmZsdWVuemFtb2RlbFBhY2thZ2UuTGl0ZXJhbHMuR0xPQkFMX0lORkxVRU5aQV9NT0RFTF9fU0VBU09OQUxfTU9EVUxBVElPTl9FWFBPTkVOVCwNCisJCQkJIHRydWUsDQorCQkJCSBmYWxzZSwNCisJCQkJIGZhbHNlLA0KKwkJCQkgSXRlbVByb3BlcnR5RGVzY3JpcHRvci5SRUFMX1ZBTFVFX0lNQUdFLA0KKwkJCQkgbnVsbCwNCisJCQkJIG51bGwpKTsNCisJfQ0KKw0KKwkvKioNCisJICogVGhpcyBhZGRzIGEgcHJvcGVydHkgZGVzY3JpcHRvciBmb3IgdGhlIE1vZHVsYXRpb24gUGVyaW9kIGZlYXR1cmUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgdm9pZCBhZGRNb2R1bGF0aW9uUGVyaW9kUHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdCBvYmplY3QpIHsNCisJCWl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzLmFkZA0KKwkJCShjcmVhdGVJdGVtUHJvcGVydHlEZXNjcmlwdG9yDQorCQkJCSgoKENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnkpYWRhcHRlckZhY3RvcnkpLmdldFJvb3RBZGFwdGVyRmFjdG9yeSgpLA0KKwkJCQkgZ2V0UmVzb3VyY2VMb2NhdG9yKCksDQorCQkJCSBnZXRTdHJpbmcoIl9VSV9HbG9iYWxJbmZsdWVuemFNb2RlbF9tb2R1bGF0aW9uUGVyaW9kX2ZlYXR1cmUiKSwNCisJCQkJIGdldFN0cmluZygiX1VJX1Byb3BlcnR5RGVzY3JpcHRvcl9kZXNjcmlwdGlvbiIsICJfVUlfR2xvYmFsSW5mbHVlbnphTW9kZWxfbW9kdWxhdGlvblBlcmlvZF9mZWF0dXJlIiwgIl9VSV9HbG9iYWxJbmZsdWVuemFNb2RlbF90eXBlIiksDQorCQkJCSBHbG9iYWxpbmZsdWVuemFtb2RlbFBhY2thZ2UuTGl0ZXJhbHMuR0xPQkFMX0lORkxVRU5aQV9NT0RFTF9fTU9EVUxBVElPTl9QRVJJT0QsDQorCQkJCSB0cnVlLA0KKwkJCQkgZmFsc2UsDQorCQkJCSBmYWxzZSwNCisJCQkJIEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IuUkVBTF9WQUxVRV9JTUFHRSwNCisJCQkJIG51bGwsDQorCQkJCSBudWxsKSk7DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgYWRkcyBhIHByb3BlcnR5IGRlc2NyaXB0b3IgZm9yIHRoZSBNb2R1bGF0aW9uIFBoYXNlIFNoaWZ0IGZlYXR1cmUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgdm9pZCBhZGRNb2R1bGF0aW9uUGhhc2VTaGlmdFByb3BlcnR5RGVzY3JpcHRvcihPYmplY3Qgb2JqZWN0KSB7DQorCQlpdGVtUHJvcGVydHlEZXNjcmlwdG9ycy5hZGQNCisJCQkoY3JlYXRlSXRlbVByb3BlcnR5RGVzY3JpcHRvcg0KKwkJCQkoKChDb21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5KWFkYXB0ZXJGYWN0b3J5KS5nZXRSb290QWRhcHRlckZhY3RvcnkoKSwNCisJCQkJIGdldFJlc291cmNlTG9jYXRvcigpLA0KKwkJCQkgZ2V0U3RyaW5nKCJfVUlfR2xvYmFsSW5mbHVlbnphTW9kZWxfbW9kdWxhdGlvblBoYXNlU2hpZnRfZmVhdHVyZSIpLA0KKwkJCQkgZ2V0U3RyaW5nKCJfVUlfUHJvcGVydHlEZXNjcmlwdG9yX2Rlc2NyaXB0aW9uIiwgIl9VSV9HbG9iYWxJbmZsdWVuemFNb2RlbF9tb2R1bGF0aW9uUGhhc2VTaGlmdF9mZWF0dXJlIiwgIl9VSV9HbG9iYWxJbmZsdWVuemFNb2RlbF90eXBlIiksDQorCQkJCSBHbG9iYWxpbmZsdWVuemFtb2RlbFBhY2thZ2UuTGl0ZXJhbHMuR0xPQkFMX0lORkxVRU5aQV9NT0RFTF9fTU9EVUxBVElPTl9QSEFTRV9TSElGVCwNCisJCQkJIHRydWUsDQorCQkJCSBmYWxzZSwNCisJCQkJIGZhbHNlLA0KKwkJCQkgSXRlbVByb3BlcnR5RGVzY3JpcHRvci5SRUFMX1ZBTFVFX0lNQUdFLA0KKwkJCQkgbnVsbCwNCisJCQkJIG51bGwpKTsNCisJfQ0KKw0KKwkvKioNCisJICogVGhpcyBhZGRzIGEgcHJvcGVydHkgZGVzY3JpcHRvciBmb3IgdGhlIFNlYXNvbmFsIE1vZHVsYXRpb24gRmxvb3IgZmVhdHVyZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCB2b2lkIGFkZFNlYXNvbmFsTW9kdWxhdGlvbkZsb29yUHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdCBvYmplY3QpIHsNCisJCWl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzLmFkZA0KKwkJCShjcmVhdGVJdGVtUHJvcGVydHlEZXNjcmlwdG9yDQorCQkJCSgoKENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnkpYWRhcHRlckZhY3RvcnkpLmdldFJvb3RBZGFwdGVyRmFjdG9yeSgpLA0KKwkJCQkgZ2V0UmVzb3VyY2VMb2NhdG9yKCksDQorCQkJCSBnZXRTdHJpbmcoIl9VSV9HbG9iYWxJbmZsdWVuemFNb2RlbF9zZWFzb25hbE1vZHVsYXRpb25GbG9vcl9mZWF0dXJlIiksDQorCQkJCSBnZXRTdHJpbmcoIl9VSV9Qcm9wZXJ0eURlc2NyaXB0b3JfZGVzY3JpcHRpb24iLCAiX1VJX0dsb2JhbEluZmx1ZW56YU1vZGVsX3NlYXNvbmFsTW9kdWxhdGlvbkZsb29yX2ZlYXR1cmUiLCAiX1VJX0dsb2JhbEluZmx1ZW56YU1vZGVsX3R5cGUiKSwNCisJCQkJIEdsb2JhbGluZmx1ZW56YW1vZGVsUGFja2FnZS5MaXRlcmFscy5HTE9CQUxfSU5GTFVFTlpBX01PREVMX19TRUFTT05BTF9NT0RVTEFUSU9OX0ZMT09SLA0KKwkJCQkgdHJ1ZSwNCisJCQkJIGZhbHNlLA0KKwkJCQkgZmFsc2UsDQorCQkJCSBJdGVtUHJvcGVydHlEZXNjcmlwdG9yLlJFQUxfVkFMVUVfSU1BR0UsDQorCQkJCSBudWxsLA0KKwkJCQkgbnVsbCkpOw0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIHJldHVybnMgR2xvYmFsSW5mbHVlbnphTW9kZWwuZ2lmLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJQE92ZXJyaWRlDQorCXB1YmxpYyBPYmplY3QgZ2V0SW1hZ2UoT2JqZWN0IG9iamVjdCkgew0KKwkJcmV0dXJuIG92ZXJsYXlJbWFnZShvYmplY3QsIGdldFJlc291cmNlTG9jYXRvcigpLmdldEltYWdlKCJmdWxsL29iajE2L0dsb2JhbEluZmx1ZW56YU1vZGVsIikpOw0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIHJldHVybnMgdGhlIGxhYmVsIHRleHQgZm9yIHRoZSBhZGFwdGVkIGNsYXNzLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZCBOT1QNCisJICovDQorCUBPdmVycmlkZQ0KKwlwdWJsaWMgU3RyaW5nIGdldFRleHQoT2JqZWN0IG9iamVjdCkgew0KKwkJcmV0dXJuIHN1cGVyLmdldFRleHQob2JqZWN0KTsNCisJfQ0KKwkNCisJLyoqDQorCSAqIFRoaXMgcmV0dXJucyB0aGUgbGFiZWwgdGV4dCBmb3IgdGhlIGFkYXB0ZWQgY2xhc3MuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlAT3ZlcnJpZGUNCisJcHVibGljIFN0cmluZyBnZXRUZXh0R2VuKE9iamVjdCBvYmplY3QpIHsNCisJCVN0cmluZyBsYWJlbCA9ICgoR2xvYmFsSW5mbHVlbnphTW9kZWwpb2JqZWN0KS5nZXREaXNlYXNlTmFtZSgpOw0KKwkJcmV0dXJuIGxhYmVsID09IG51bGwgfHwgbGFiZWwubGVuZ3RoKCkgPT0gMCA/DQorCQkJZ2V0U3RyaW5nKCJfVUlfR2xvYmFsSW5mbHVlbnphTW9kZWxfdHlwZSIpIDoNCisJCQlnZXRTdHJpbmcoIl9VSV9HbG9iYWxJbmZsdWVuemFNb2RlbF90eXBlIikgKyAiICIgKyBsYWJlbDsNCisJfQ0KKwkNCisNCisJLyoqDQorCSAqIFRoaXMgaGFuZGxlcyBtb2RlbCBub3RpZmljYXRpb25zIGJ5IGNhbGxpbmcge0BsaW5rICN1cGRhdGVDaGlsZHJlbn0gdG8gdXBkYXRlIGFueSBjYWNoZWQNCisJICogY2hpbGRyZW4gYW5kIGJ5IGNyZWF0aW5nIGEgdmlld2VyIG5vdGlmaWNhdGlvbiwgd2hpY2ggaXQgcGFzc2VzIHRvIHtAbGluayAjZmlyZU5vdGlmeUNoYW5nZWR9Lg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJQE92ZXJyaWRlDQorCXB1YmxpYyB2b2lkIG5vdGlmeUNoYW5nZWQoTm90aWZpY2F0aW9uIG5vdGlmaWNhdGlvbikgew0KKwkJdXBkYXRlQ2hpbGRyZW4obm90aWZpY2F0aW9uKTsNCisNCisJCXN3aXRjaCAobm90aWZpY2F0aW9uLmdldEZlYXR1cmVJRChHbG9iYWxJbmZsdWVuemFNb2RlbC5jbGFzcykpIHsNCisJCQljYXNlIEdsb2JhbGluZmx1ZW56YW1vZGVsUGFja2FnZS5HTE9CQUxfSU5GTFVFTlpBX01PREVMX19MQVRJVFVERV9TSUdNT0lEX1dJRFRIOg0KKwkJCWNhc2UgR2xvYmFsaW5mbHVlbnphbW9kZWxQYWNrYWdlLkdMT0JBTF9JTkZMVUVOWkFfTU9ERUxfX1NFQVNPTkFMX01PRFVMQVRJT05fRVhQT05FTlQ6DQorCQkJY2FzZSBHbG9iYWxpbmZsdWVuemFtb2RlbFBhY2thZ2UuR0xPQkFMX0lORkxVRU5aQV9NT0RFTF9fTU9EVUxBVElPTl9QRVJJT0Q6DQorCQkJY2FzZSBHbG9iYWxpbmZsdWVuemFtb2RlbFBhY2thZ2UuR0xPQkFMX0lORkxVRU5aQV9NT0RFTF9fTU9EVUxBVElPTl9QSEFTRV9TSElGVDoNCisJCQljYXNlIEdsb2JhbGluZmx1ZW56YW1vZGVsUGFja2FnZS5HTE9CQUxfSU5GTFVFTlpBX01PREVMX19TRUFTT05BTF9NT0RVTEFUSU9OX0ZMT09SOg0KKwkJCQlmaXJlTm90aWZ5Q2hhbmdlZChuZXcgVmlld2VyTm90aWZpY2F0aW9uKG5vdGlmaWNhdGlvbiwgbm90aWZpY2F0aW9uLmdldE5vdGlmaWVyKCksIGZhbHNlLCB0cnVlKSk7DQorCQkJCXJldHVybjsNCisJCX0NCisJCXN1cGVyLm5vdGlmeUNoYW5nZWQobm90aWZpY2F0aW9uKTsNCisJfQ0KKw0KKwkvKioNCisJICogVGhpcyBhZGRzIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuZWRpdC5jb21tYW5kLkNvbW1hbmRQYXJhbWV0ZXJ9cyBkZXNjcmliaW5nIHRoZSBjaGlsZHJlbg0KKwkgKiB0aGF0IGNhbiBiZSBjcmVhdGVkIHVuZGVyIHRoaXMgb2JqZWN0Lg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJQE92ZXJyaWRlDQorCXByb3RlY3RlZCB2b2lkIGNvbGxlY3ROZXdDaGlsZERlc2NyaXB0b3JzKENvbGxlY3Rpb248T2JqZWN0PiBuZXdDaGlsZERlc2NyaXB0b3JzLCBPYmplY3Qgb2JqZWN0KSB7DQorCQlzdXBlci5jb2xsZWN0TmV3Q2hpbGREZXNjcmlwdG9ycyhuZXdDaGlsZERlc2NyaXB0b3JzLCBvYmplY3QpOw0KKwl9DQorDQorCS8qKg0KKwkgKiBSZXR1cm4gdGhlIHJlc291cmNlIGxvY2F0b3IgZm9yIHRoaXMgaXRlbSBwcm92aWRlcidzIHJlc291cmNlcy4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCUBPdmVycmlkZQ0KKwlwdWJsaWMgUmVzb3VyY2VMb2NhdG9yIGdldFJlc291cmNlTG9jYXRvcigpIHsNCisJCXJldHVybiBHbG9iYWxpbmZsdWVuemFtb2RlbEVkaXRQbHVnaW4uSU5TVEFOQ0U7DQorCX0NCisNCit9DQpkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZ2xvYmFsaW5mbHVlbnphbW9kZWwvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9nbG9iYWxpbmZsdWVuemFtb2RlbC9wcm92aWRlci9HbG9iYWxpbmZsdWVuemFtb2RlbEVkaXRQbHVnaW4uamF2YSBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmdsb2JhbGluZmx1ZW56YW1vZGVsL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvZ2xvYmFsaW5mbHVlbnphbW9kZWwvcHJvdmlkZXIvR2xvYmFsaW5mbHVlbnphbW9kZWxFZGl0UGx1Z2luLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjg0NTQwOAotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmdsb2JhbGluZmx1ZW56YW1vZGVsL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvZ2xvYmFsaW5mbHVlbnphbW9kZWwvcHJvdmlkZXIvR2xvYmFsaW5mbHVlbnphbW9kZWxFZGl0UGx1Z2luLmphdmEKQEAgLTAsMCArMSwxMDcgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmdsb2JhbGluZmx1ZW56YW1vZGVsLnByb3ZpZGVyOw0KKw0KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorICogQ29weXJpZ2h0IChjKSAyMDA5IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLg0KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMNCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjANCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdA0KKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sDQorICoNCisgKiBDb250cmlidXRvcnM6DQorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbg0KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KKw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLkVNRlBsdWdpbjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlJlc291cmNlTG9jYXRvcjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnByb3ZpZGVyLkVjb3JlRWRpdFBsdWdpbjsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5wcm92aWRlci5Db3JlRWRpdFBsdWdpbjsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5lZGdlcy5wcm92aWRlci5EZWZpbml0aW9uc0VkaXRQbHVnaW47DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5wcm92aWRlci5EaXNlYXNlbW9kZWxzRWRpdFBsdWdpbjsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLnByb3ZpZGVyLlN0YW5kYXJkRWRpdFBsdWdpbjsNCisNCisvKioNCisgKiBUaGlzIGlzIHRoZSBjZW50cmFsIHNpbmdsZXRvbiBmb3IgdGhlIEdsb2JhbGluZmx1ZW56YW1vZGVsIGVkaXQgcGx1Z2luLg0KKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorICogQGdlbmVyYXRlZA0KKyAqLw0KK3B1YmxpYyBmaW5hbCBjbGFzcyBHbG9iYWxpbmZsdWVuemFtb2RlbEVkaXRQbHVnaW4gZXh0ZW5kcyBFTUZQbHVnaW4gew0KKwkvKioNCisJICogS2VlcCB0cmFjayBvZiB0aGUgc2luZ2xldG9uLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIHN0YXRpYyBmaW5hbCBHbG9iYWxpbmZsdWVuemFtb2RlbEVkaXRQbHVnaW4gSU5TVEFOQ0UgPSBuZXcgR2xvYmFsaW5mbHVlbnphbW9kZWxFZGl0UGx1Z2luKCk7DQorDQorCS8qKg0KKwkgKiBLZWVwIHRyYWNrIG9mIHRoZSBzaW5nbGV0b24uDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcml2YXRlIHN0YXRpYyBJbXBsZW1lbnRhdGlvbiBwbHVnaW47DQorDQorCS8qKg0KKwkgKiBDcmVhdGUgdGhlIGluc3RhbmNlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIEdsb2JhbGluZmx1ZW56YW1vZGVsRWRpdFBsdWdpbigpIHsNCisJCXN1cGVyDQorCQkgIChuZXcgUmVzb3VyY2VMb2NhdG9yIFtdIHsNCisJCSAgICAgRGlzZWFzZW1vZGVsc0VkaXRQbHVnaW4uSU5TVEFOQ0UsDQorCQkgICAgIENvcmVFZGl0UGx1Z2luLklOU1RBTkNFLA0KKwkJICAgICBFY29yZUVkaXRQbHVnaW4uSU5TVEFOQ0UsDQorCQkgICAgIERlZmluaXRpb25zRWRpdFBsdWdpbi5JTlNUQU5DRSwNCisJCSAgICAgU3RhbmRhcmRFZGl0UGx1Z2luLklOU1RBTkNFLA0KKwkJICAgfSk7DQorCX0NCisNCisJLyoqDQorCSAqIFJldHVybnMgdGhlIHNpbmdsZXRvbiBpbnN0YW5jZSBvZiB0aGUgRWNsaXBzZSBwbHVnaW4uDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcmV0dXJuIHRoZSBzaW5nbGV0b24gaW5zdGFuY2UuDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCUBPdmVycmlkZQ0KKwlwdWJsaWMgUmVzb3VyY2VMb2NhdG9yIGdldFBsdWdpblJlc291cmNlTG9jYXRvcigpIHsNCisJCXJldHVybiBwbHVnaW47DQorCX0NCisNCisJLyoqDQorCSAqIFJldHVybnMgdGhlIHNpbmdsZXRvbiBpbnN0YW5jZSBvZiB0aGUgRWNsaXBzZSBwbHVnaW4uDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcmV0dXJuIHRoZSBzaW5nbGV0b24gaW5zdGFuY2UuDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBzdGF0aWMgSW1wbGVtZW50YXRpb24gZ2V0UGx1Z2luKCkgew0KKwkJcmV0dXJuIHBsdWdpbjsNCisJfQ0KKw0KKwkvKioNCisJICogVGhlIGFjdHVhbCBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgRWNsaXBzZSA8Yj5QbHVnaW48L2I+Lg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIHN0YXRpYyBjbGFzcyBJbXBsZW1lbnRhdGlvbiBleHRlbmRzIEVjbGlwc2VQbHVnaW4gew0KKwkJLyoqDQorCQkgKiBDcmVhdGVzIGFuIGluc3RhbmNlLg0KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkJICogQGdlbmVyYXRlZA0KKwkJICovDQorCQlwdWJsaWMgSW1wbGVtZW50YXRpb24oKSB7DQorCQkJc3VwZXIoKTsNCisNCisJCQkvLyBSZW1lbWJlciB0aGUgc3RhdGljIGluc3RhbmNlLg0KKwkJCS8vDQorCQkJcGx1Z2luID0gdGhpczsNCisJCX0NCisJfQ0KKw0KK30NCmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5nbG9iYWxpbmZsdWVuemFtb2RlbC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL2dsb2JhbGluZmx1ZW56YW1vZGVsL3Byb3ZpZGVyL0dsb2JhbGluZmx1ZW56YW1vZGVsSXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkuamF2YSBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmdsb2JhbGluZmx1ZW56YW1vZGVsL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvZ2xvYmFsaW5mbHVlbnphbW9kZWwvcHJvdmlkZXIvR2xvYmFsaW5mbHVlbnphbW9kZWxJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk1MjBjMjcKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5nbG9iYWxpbmZsdWVuemFtb2RlbC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL2dsb2JhbGluZmx1ZW56YW1vZGVsL3Byb3ZpZGVyL0dsb2JhbGluZmx1ZW56YW1vZGVsSXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkuamF2YQpAQCAtMCwwICsxLDIwNiBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZ2xvYmFsaW5mbHVlbnphbW9kZWwucHJvdmlkZXI7DQorDQorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisgKiBDb3B5cmlnaHQgKGMpIDIwMDkgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuDQorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscw0KKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMA0KKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0DQorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwNCisgKg0KKyAqIENvbnRyaWJ1dG9yczoNCisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uDQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQorDQoraW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7DQoraW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOw0KKw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5BZGFwdGVyOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb247DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWVyOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5DaGFuZ2VOb3RpZmllcjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeTsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuQ29tcG9zZWRBZGFwdGVyRmFjdG9yeTsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUNoYW5nZU5vdGlmaWVyOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JRGlzcG9zYWJsZTsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUVkaXRpbmdEb21haW5JdGVtUHJvdmlkZXI7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtTGFiZWxQcm92aWRlcjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1Qcm9wZXJ0eVNvdXJjZTsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSU5vdGlmeUNoYW5nZWRMaXN0ZW5lcjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVN0cnVjdHVyZWRJdGVtQ29udGVudFByb3ZpZGVyOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JVHJlZUl0ZW1Db250ZW50UHJvdmlkZXI7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5nbG9iYWxpbmZsdWVuemFtb2RlbC51dGlsLkdsb2JhbGluZmx1ZW56YW1vZGVsQWRhcHRlckZhY3Rvcnk7DQorDQorLyoqDQorICogVGhpcyBpcyB0aGUgZmFjdG9yeSB0aGF0IGlzIHVzZWQgdG8gcHJvdmlkZSB0aGUgaW50ZXJmYWNlcyBuZWVkZWQgdG8gc3VwcG9ydCBWaWV3ZXJzLg0KKyAqIFRoZSBhZGFwdGVycyBnZW5lcmF0ZWQgYnkgdGhpcyBmYWN0b3J5IGNvbnZlcnQgRU1GIGFkYXB0ZXIgbm90aWZpY2F0aW9ucyBpbnRvIGNhbGxzIHRvIHtAbGluayAjZmlyZU5vdGlmeUNoYW5nZWQgZmlyZU5vdGlmeUNoYW5nZWR9Lg0KKyAqIFRoZSBhZGFwdGVycyBhbHNvIHN1cHBvcnQgRWNsaXBzZSBwcm9wZXJ0eSBzaGVldHMuDQorICogTm90ZSB0aGF0IG1vc3Qgb2YgdGhlIGFkYXB0ZXJzIGFyZSBzaGFyZWQgYW1vbmcgbXVsdGlwbGUgaW5zdGFuY2VzLg0KKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorICogQGdlbmVyYXRlZA0KKyAqLw0KK3B1YmxpYyBjbGFzcyBHbG9iYWxpbmZsdWVuemFtb2RlbEl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5IGV4dGVuZHMgR2xvYmFsaW5mbHVlbnphbW9kZWxBZGFwdGVyRmFjdG9yeSBpbXBsZW1lbnRzIENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnksIElDaGFuZ2VOb3RpZmllciwgSURpc3Bvc2FibGUgew0KKwkvKioNCisJICogVGhpcyBrZWVwcyB0cmFjayBvZiB0aGUgcm9vdCBhZGFwdGVyIGZhY3RvcnkgdGhhdCBkZWxlZ2F0ZXMgdG8gdGhpcyBhZGFwdGVyIGZhY3RvcnkuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgQ29tcG9zZWRBZGFwdGVyRmFjdG9yeSBwYXJlbnRBZGFwdGVyRmFjdG9yeTsNCisNCisJLyoqDQorCSAqIFRoaXMgaXMgdXNlZCB0byBpbXBsZW1lbnQge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklDaGFuZ2VOb3RpZmllcn0uDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgSUNoYW5nZU5vdGlmaWVyIGNoYW5nZU5vdGlmaWVyID0gbmV3IENoYW5nZU5vdGlmaWVyKCk7DQorDQorCS8qKg0KKwkgKiBUaGlzIGtlZXBzIHRyYWNrIG9mIGFsbCB0aGUgc3VwcG9ydGVkIHR5cGVzIGNoZWNrZWQgYnkge0BsaW5rICNpc0ZhY3RvcnlGb3JUeXBlIGlzRmFjdG9yeUZvclR5cGV9Lg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIENvbGxlY3Rpb248T2JqZWN0PiBzdXBwb3J0ZWRUeXBlcyA9IG5ldyBBcnJheUxpc3Q8T2JqZWN0PigpOw0KKw0KKwkvKioNCisJICogVGhpcyBjb25zdHJ1Y3RzIGFuIGluc3RhbmNlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIEdsb2JhbGluZmx1ZW56YW1vZGVsSXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkoKSB7DQorCQlzdXBwb3J0ZWRUeXBlcy5hZGQoSUVkaXRpbmdEb21haW5JdGVtUHJvdmlkZXIuY2xhc3MpOw0KKwkJc3VwcG9ydGVkVHlwZXMuYWRkKElTdHJ1Y3R1cmVkSXRlbUNvbnRlbnRQcm92aWRlci5jbGFzcyk7DQorCQlzdXBwb3J0ZWRUeXBlcy5hZGQoSVRyZWVJdGVtQ29udGVudFByb3ZpZGVyLmNsYXNzKTsNCisJCXN1cHBvcnRlZFR5cGVzLmFkZChJSXRlbUxhYmVsUHJvdmlkZXIuY2xhc3MpOw0KKwkJc3VwcG9ydGVkVHlwZXMuYWRkKElJdGVtUHJvcGVydHlTb3VyY2UuY2xhc3MpOw0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIGtlZXBzIHRyYWNrIG9mIHRoZSBvbmUgYWRhcHRlciB1c2VkIGZvciBhbGwge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5nbG9iYWxpbmZsdWVuemFtb2RlbC5HbG9iYWxJbmZsdWVuemFNb2RlbH0gaW5zdGFuY2VzLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIEdsb2JhbEluZmx1ZW56YU1vZGVsSXRlbVByb3ZpZGVyIGdsb2JhbEluZmx1ZW56YU1vZGVsSXRlbVByb3ZpZGVyOw0KKw0KKwkvKioNCisJICogVGhpcyBjcmVhdGVzIGFuIGFkYXB0ZXIgZm9yIGEge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5nbG9iYWxpbmZsdWVuemFtb2RlbC5HbG9iYWxJbmZsdWVuemFNb2RlbH0uDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlAT3ZlcnJpZGUNCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlR2xvYmFsSW5mbHVlbnphTW9kZWxBZGFwdGVyKCkgew0KKwkJaWYgKGdsb2JhbEluZmx1ZW56YU1vZGVsSXRlbVByb3ZpZGVyID09IG51bGwpIHsNCisJCQlnbG9iYWxJbmZsdWVuemFNb2RlbEl0ZW1Qcm92aWRlciA9IG5ldyBHbG9iYWxJbmZsdWVuemFNb2RlbEl0ZW1Qcm92aWRlcih0aGlzKTsNCisJCX0NCisNCisJCXJldHVybiBnbG9iYWxJbmZsdWVuemFNb2RlbEl0ZW1Qcm92aWRlcjsNCisJfQ0KKw0KKwkvKioNCisJICogVGhpcyByZXR1cm5zIHRoZSByb290IGFkYXB0ZXIgZmFjdG9yeSB0aGF0IGNvbnRhaW5zIHRoaXMgZmFjdG9yeS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBDb21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5IGdldFJvb3RBZGFwdGVyRmFjdG9yeSgpIHsNCisJCXJldHVybiBwYXJlbnRBZGFwdGVyRmFjdG9yeSA9PSBudWxsID8gdGhpcyA6IHBhcmVudEFkYXB0ZXJGYWN0b3J5LmdldFJvb3RBZGFwdGVyRmFjdG9yeSgpOw0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIHNldHMgdGhlIGNvbXBvc2VkIGFkYXB0ZXIgZmFjdG9yeSB0aGF0IGNvbnRhaW5zIHRoaXMgZmFjdG9yeS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyB2b2lkIHNldFBhcmVudEFkYXB0ZXJGYWN0b3J5KENvbXBvc2VkQWRhcHRlckZhY3RvcnkgcGFyZW50QWRhcHRlckZhY3RvcnkpIHsNCisJCXRoaXMucGFyZW50QWRhcHRlckZhY3RvcnkgPSBwYXJlbnRBZGFwdGVyRmFjdG9yeTsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCUBPdmVycmlkZQ0KKwlwdWJsaWMgYm9vbGVhbiBpc0ZhY3RvcnlGb3JUeXBlKE9iamVjdCB0eXBlKSB7DQorCQlyZXR1cm4gc3VwcG9ydGVkVHlwZXMuY29udGFpbnModHlwZSkgfHwgc3VwZXIuaXNGYWN0b3J5Rm9yVHlwZSh0eXBlKTsNCisJfQ0KKw0KKwkvKioNCisJICogVGhpcyBpbXBsZW1lbnRhdGlvbiBzdWJzdGl0dXRlcyB0aGUgZmFjdG9yeSBpdHNlbGYgYXMgdGhlIGtleSBmb3IgdGhlIGFkYXB0ZXIuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlAT3ZlcnJpZGUNCisJcHVibGljIEFkYXB0ZXIgYWRhcHQoTm90aWZpZXIgbm90aWZpZXIsIE9iamVjdCB0eXBlKSB7DQorCQlyZXR1cm4gc3VwZXIuYWRhcHQobm90aWZpZXIsIHRoaXMpOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJQE92ZXJyaWRlDQorCXB1YmxpYyBPYmplY3QgYWRhcHQoT2JqZWN0IG9iamVjdCwgT2JqZWN0IHR5cGUpIHsNCisJCWlmIChpc0ZhY3RvcnlGb3JUeXBlKHR5cGUpKSB7DQorCQkJT2JqZWN0IGFkYXB0ZXIgPSBzdXBlci5hZGFwdChvYmplY3QsIHR5cGUpOw0KKwkJCWlmICghKHR5cGUgaW5zdGFuY2VvZiBDbGFzczw/PikgfHwgKCgoQ2xhc3M8Pz4pdHlwZSkuaXNJbnN0YW5jZShhZGFwdGVyKSkpIHsNCisJCQkJcmV0dXJuIGFkYXB0ZXI7DQorCQkJfQ0KKwkJfQ0KKw0KKwkJcmV0dXJuIG51bGw7DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgYWRkcyBhIGxpc3RlbmVyLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIHZvaWQgYWRkTGlzdGVuZXIoSU5vdGlmeUNoYW5nZWRMaXN0ZW5lciBub3RpZnlDaGFuZ2VkTGlzdGVuZXIpIHsNCisJCWNoYW5nZU5vdGlmaWVyLmFkZExpc3RlbmVyKG5vdGlmeUNoYW5nZWRMaXN0ZW5lcik7DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgcmVtb3ZlcyBhIGxpc3RlbmVyLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIHZvaWQgcmVtb3ZlTGlzdGVuZXIoSU5vdGlmeUNoYW5nZWRMaXN0ZW5lciBub3RpZnlDaGFuZ2VkTGlzdGVuZXIpIHsNCisJCWNoYW5nZU5vdGlmaWVyLnJlbW92ZUxpc3RlbmVyKG5vdGlmeUNoYW5nZWRMaXN0ZW5lcik7DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgZGVsZWdhdGVzIHRvIHtAbGluayAjY2hhbmdlTm90aWZpZXJ9IGFuZCB0byB7QGxpbmsgI3BhcmVudEFkYXB0ZXJGYWN0b3J5fS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyB2b2lkIGZpcmVOb3RpZnlDaGFuZ2VkKE5vdGlmaWNhdGlvbiBub3RpZmljYXRpb24pIHsNCisJCWNoYW5nZU5vdGlmaWVyLmZpcmVOb3RpZnlDaGFuZ2VkKG5vdGlmaWNhdGlvbik7DQorDQorCQlpZiAocGFyZW50QWRhcHRlckZhY3RvcnkgIT0gbnVsbCkgew0KKwkJCXBhcmVudEFkYXB0ZXJGYWN0b3J5LmZpcmVOb3RpZnlDaGFuZ2VkKG5vdGlmaWNhdGlvbik7DQorCQl9DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgZGlzcG9zZXMgYWxsIG9mIHRoZSBpdGVtIHByb3ZpZGVycyBjcmVhdGVkIGJ5IHRoaXMgZmFjdG9yeS4gDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgdm9pZCBkaXNwb3NlKCkgew0KKwkJaWYgKGdsb2JhbEluZmx1ZW56YU1vZGVsSXRlbVByb3ZpZGVyICE9IG51bGwpIGdsb2JhbEluZmx1ZW56YU1vZGVsSXRlbVByb3ZpZGVyLmRpc3Bvc2UoKTsNCisJfQ0KKw0KK30NCmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5nbG9iYWxpbmZsdWVuemFtb2RlbC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL2dsb2JhbGluZmx1ZW56YW1vZGVsL3V0aWwvR2xvYmFsaW5mbHVlbnphbW9kZWxBZGFwdGVyRmFjdG9yeS5qYXZhIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZ2xvYmFsaW5mbHVlbnphbW9kZWwvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9nbG9iYWxpbmZsdWVuemFtb2RlbC91dGlsL0dsb2JhbGluZmx1ZW56YW1vZGVsQWRhcHRlckZhY3RvcnkuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yY2VkZDU1Ci0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZ2xvYmFsaW5mbHVlbnphbW9kZWwvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9nbG9iYWxpbmZsdWVuemFtb2RlbC91dGlsL0dsb2JhbGluZmx1ZW56YW1vZGVsQWRhcHRlckZhY3RvcnkuamF2YQpAQCAtMCwwICsxLDM5MyBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZ2xvYmFsaW5mbHVlbnphbW9kZWwudXRpbDsNCisNCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyAqIENvcHlyaWdodCAoYykgMjAwOSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4NCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzDQorICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wDQorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQNCisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbA0KKyAqDQorICogQ29udHJpYnV0b3JzOg0KKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24NCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCisNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuQWRhcHRlcjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpZXI7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LmltcGwuQWRhcHRlckZhY3RvcnlJbXBsOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdDsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5JZGVudGlmaWFibGU7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uU2FuaXR5Q2hlY2tlcjsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLkRlY29yYXRvcjsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLkludGVncmF0aW9uRGVjb3JhdG9yOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuTm9kZURlY29yYXRvcjsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLk1vZGlmaWFibGU7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5nbG9iYWxpbmZsdWVuemFtb2RlbC4qOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZ2xvYmFsaW5mbHVlbnphbW9kZWwuR2xvYmFsSW5mbHVlbnphTW9kZWw7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5nbG9iYWxpbmZsdWVuemFtb2RlbC5HbG9iYWxpbmZsdWVuemFtb2RlbFBhY2thZ2U7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5EaXNlYXNlTW9kZWw7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TSTsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlNJUjsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkRGlzZWFzZU1vZGVsOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmRTdG9jaGFzdGljRGlzZWFzZU1vZGVsOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RvY2hhc3RpY0Rpc2Vhc2VNb2RlbDsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlN0b2NoYXN0aWNTSVJEaXNlYXNlTW9kZWw7DQorDQorLyoqDQorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisgKiBUaGUgPGI+QWRhcHRlciBGYWN0b3J5PC9iPiBmb3IgdGhlIG1vZGVsLg0KKyAqIEl0IHByb3ZpZGVzIGFuIGFkYXB0ZXIgPGNvZGU+Y3JlYXRlWFhYPC9jb2RlPiBtZXRob2QgZm9yIGVhY2ggY2xhc3Mgb2YgdGhlIG1vZGVsLg0KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKyAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmdsb2JhbGluZmx1ZW56YW1vZGVsLkdsb2JhbGluZmx1ZW56YW1vZGVsUGFja2FnZQ0KKyAqIEBnZW5lcmF0ZWQNCisgKi8NCitwdWJsaWMgY2xhc3MgR2xvYmFsaW5mbHVlbnphbW9kZWxBZGFwdGVyRmFjdG9yeSBleHRlbmRzIEFkYXB0ZXJGYWN0b3J5SW1wbCB7DQorCS8qKg0KKwkgKiBUaGUgY2FjaGVkIG1vZGVsIHBhY2thZ2UuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgc3RhdGljIEdsb2JhbGluZmx1ZW56YW1vZGVsUGFja2FnZSBtb2RlbFBhY2thZ2U7DQorDQorCS8qKg0KKwkgKiBDcmVhdGVzIGFuIGluc3RhbmNlIG9mIHRoZSBhZGFwdGVyIGZhY3RvcnkuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgR2xvYmFsaW5mbHVlbnphbW9kZWxBZGFwdGVyRmFjdG9yeSgpIHsNCisJCWlmIChtb2RlbFBhY2thZ2UgPT0gbnVsbCkgew0KKwkJCW1vZGVsUGFja2FnZSA9IEdsb2JhbGluZmx1ZW56YW1vZGVsUGFja2FnZS5lSU5TVEFOQ0U7DQorCQl9DQorCX0NCisNCisJLyoqDQorCSAqIFJldHVybnMgd2hldGhlciB0aGlzIGZhY3RvcnkgaXMgYXBwbGljYWJsZSBmb3IgdGhlIHR5cGUgb2YgdGhlIG9iamVjdC4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIDxjb2RlPnRydWU8L2NvZGU+IGlmIHRoZSBvYmplY3QgaXMgZWl0aGVyIHRoZSBtb2RlbCdzIHBhY2thZ2Ugb3IgaXMgYW4gaW5zdGFuY2Ugb2JqZWN0IG9mIHRoZSBtb2RlbC4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEByZXR1cm4gd2hldGhlciB0aGlzIGZhY3RvcnkgaXMgYXBwbGljYWJsZSBmb3IgdGhlIHR5cGUgb2YgdGhlIG9iamVjdC4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJQE92ZXJyaWRlDQorCXB1YmxpYyBib29sZWFuIGlzRmFjdG9yeUZvclR5cGUoT2JqZWN0IG9iamVjdCkgew0KKwkJaWYgKG9iamVjdCA9PSBtb2RlbFBhY2thZ2UpIHsNCisJCQlyZXR1cm4gdHJ1ZTsNCisJCX0NCisJCWlmIChvYmplY3QgaW5zdGFuY2VvZiBFT2JqZWN0KSB7DQorCQkJcmV0dXJuICgoRU9iamVjdClvYmplY3QpLmVDbGFzcygpLmdldEVQYWNrYWdlKCkgPT0gbW9kZWxQYWNrYWdlOw0KKwkJfQ0KKwkJcmV0dXJuIGZhbHNlOw0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGUgc3dpdGNoIHRoYXQgZGVsZWdhdGVzIHRvIHRoZSA8Y29kZT5jcmVhdGVYWFg8L2NvZGU+IG1ldGhvZHMuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgR2xvYmFsaW5mbHVlbnphbW9kZWxTd2l0Y2g8QWRhcHRlcj4gbW9kZWxTd2l0Y2ggPQ0KKwkJbmV3IEdsb2JhbGluZmx1ZW56YW1vZGVsU3dpdGNoPEFkYXB0ZXI+KCkgew0KKwkJCUBPdmVycmlkZQ0KKwkJCXB1YmxpYyBBZGFwdGVyIGNhc2VHbG9iYWxJbmZsdWVuemFNb2RlbChHbG9iYWxJbmZsdWVuemFNb2RlbCBvYmplY3QpIHsNCisJCQkJcmV0dXJuIGNyZWF0ZUdsb2JhbEluZmx1ZW56YU1vZGVsQWRhcHRlcigpOw0KKwkJCX0NCisJCQlAT3ZlcnJpZGUNCisJCQlwdWJsaWMgPFQ+IEFkYXB0ZXIgY2FzZUNvbXBhcmFibGUoQ29tcGFyYWJsZTxUPiBvYmplY3QpIHsNCisJCQkJcmV0dXJuIGNyZWF0ZUNvbXBhcmFibGVBZGFwdGVyKCk7DQorCQkJfQ0KKwkJCUBPdmVycmlkZQ0KKwkJCXB1YmxpYyBBZGFwdGVyIGNhc2VTYW5pdHlDaGVja2VyKFNhbml0eUNoZWNrZXIgb2JqZWN0KSB7DQorCQkJCXJldHVybiBjcmVhdGVTYW5pdHlDaGVja2VyQWRhcHRlcigpOw0KKwkJCX0NCisJCQlAT3ZlcnJpZGUNCisJCQlwdWJsaWMgQWRhcHRlciBjYXNlSWRlbnRpZmlhYmxlKElkZW50aWZpYWJsZSBvYmplY3QpIHsNCisJCQkJcmV0dXJuIGNyZWF0ZUlkZW50aWZpYWJsZUFkYXB0ZXIoKTsNCisJCQl9DQorCQkJQE92ZXJyaWRlDQorCQkJcHVibGljIEFkYXB0ZXIgY2FzZURlY29yYXRvcihEZWNvcmF0b3Igb2JqZWN0KSB7DQorCQkJCXJldHVybiBjcmVhdGVEZWNvcmF0b3JBZGFwdGVyKCk7DQorCQkJfQ0KKwkJCUBPdmVycmlkZQ0KKwkJCXB1YmxpYyBBZGFwdGVyIGNhc2VOb2RlRGVjb3JhdG9yKE5vZGVEZWNvcmF0b3Igb2JqZWN0KSB7DQorCQkJCXJldHVybiBjcmVhdGVOb2RlRGVjb3JhdG9yQWRhcHRlcigpOw0KKwkJCX0NCisJCQlAT3ZlcnJpZGUNCisJCQlwdWJsaWMgQWRhcHRlciBjYXNlSW50ZWdyYXRpb25EZWNvcmF0b3IoSW50ZWdyYXRpb25EZWNvcmF0b3Igb2JqZWN0KSB7DQorCQkJCXJldHVybiBjcmVhdGVJbnRlZ3JhdGlvbkRlY29yYXRvckFkYXB0ZXIoKTsNCisJCQl9DQorCQkJQE92ZXJyaWRlDQorCQkJcHVibGljIEFkYXB0ZXIgY2FzZU1vZGlmaWFibGUoTW9kaWZpYWJsZSBvYmplY3QpIHsNCisJCQkJcmV0dXJuIGNyZWF0ZU1vZGlmaWFibGVBZGFwdGVyKCk7DQorCQkJfQ0KKwkJCUBPdmVycmlkZQ0KKwkJCXB1YmxpYyBBZGFwdGVyIGNhc2VEaXNlYXNlTW9kZWwoRGlzZWFzZU1vZGVsIG9iamVjdCkgew0KKwkJCQlyZXR1cm4gY3JlYXRlRGlzZWFzZU1vZGVsQWRhcHRlcigpOw0KKwkJCX0NCisJCQlAT3ZlcnJpZGUNCisJCQlwdWJsaWMgQWRhcHRlciBjYXNlU3RhbmRhcmREaXNlYXNlTW9kZWwoU3RhbmRhcmREaXNlYXNlTW9kZWwgb2JqZWN0KSB7DQorCQkJCXJldHVybiBjcmVhdGVTdGFuZGFyZERpc2Vhc2VNb2RlbEFkYXB0ZXIoKTsNCisJCQl9DQorCQkJQE92ZXJyaWRlDQorCQkJcHVibGljIEFkYXB0ZXIgY2FzZVNJKFNJIG9iamVjdCkgew0KKwkJCQlyZXR1cm4gY3JlYXRlU0lBZGFwdGVyKCk7DQorCQkJfQ0KKwkJCUBPdmVycmlkZQ0KKwkJCXB1YmxpYyBBZGFwdGVyIGNhc2VTSVIoU0lSIG9iamVjdCkgew0KKwkJCQlyZXR1cm4gY3JlYXRlU0lSQWRhcHRlcigpOw0KKwkJCX0NCisJCQlAT3ZlcnJpZGUNCisJCQlwdWJsaWMgQWRhcHRlciBjYXNlU3RvY2hhc3RpY0Rpc2Vhc2VNb2RlbChTdG9jaGFzdGljRGlzZWFzZU1vZGVsIG9iamVjdCkgew0KKwkJCQlyZXR1cm4gY3JlYXRlU3RvY2hhc3RpY0Rpc2Vhc2VNb2RlbEFkYXB0ZXIoKTsNCisJCQl9DQorCQkJQE92ZXJyaWRlDQorCQkJcHVibGljIEFkYXB0ZXIgY2FzZVN0YW5kYXJkU3RvY2hhc3RpY0Rpc2Vhc2VNb2RlbChTdGFuZGFyZFN0b2NoYXN0aWNEaXNlYXNlTW9kZWwgb2JqZWN0KSB7DQorCQkJCXJldHVybiBjcmVhdGVTdGFuZGFyZFN0b2NoYXN0aWNEaXNlYXNlTW9kZWxBZGFwdGVyKCk7DQorCQkJfQ0KKwkJCUBPdmVycmlkZQ0KKwkJCXB1YmxpYyBBZGFwdGVyIGNhc2VTdG9jaGFzdGljU0lSRGlzZWFzZU1vZGVsKFN0b2NoYXN0aWNTSVJEaXNlYXNlTW9kZWwgb2JqZWN0KSB7DQorCQkJCXJldHVybiBjcmVhdGVTdG9jaGFzdGljU0lSRGlzZWFzZU1vZGVsQWRhcHRlcigpOw0KKwkJCX0NCisJCQlAT3ZlcnJpZGUNCisJCQlwdWJsaWMgQWRhcHRlciBkZWZhdWx0Q2FzZShFT2JqZWN0IG9iamVjdCkgew0KKwkJCQlyZXR1cm4gY3JlYXRlRU9iamVjdEFkYXB0ZXIoKTsNCisJCQl9DQorCQl9Ow0KKw0KKwkvKioNCisJICogQ3JlYXRlcyBhbiBhZGFwdGVyIGZvciB0aGUgPGNvZGU+dGFyZ2V0PC9jb2RlPi4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBwYXJhbSB0YXJnZXQgdGhlIG9iamVjdCB0byBhZGFwdC4NCisJICogQHJldHVybiB0aGUgYWRhcHRlciBmb3IgdGhlIDxjb2RlPnRhcmdldDwvY29kZT4uDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCUBPdmVycmlkZQ0KKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVBZGFwdGVyKE5vdGlmaWVyIHRhcmdldCkgew0KKwkJcmV0dXJuIG1vZGVsU3dpdGNoLmRvU3dpdGNoKChFT2JqZWN0KXRhcmdldCk7DQorCX0NCisNCisNCisJLyoqDQorCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmdsb2JhbGluZmx1ZW56YW1vZGVsLkdsb2JhbEluZmx1ZW56YU1vZGVsIDxlbT5HbG9iYWwgSW5mbHVlbnphIE1vZGVsPC9lbT59Jy4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOw0KKwkgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLg0KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5nbG9iYWxpbmZsdWVuemFtb2RlbC5HbG9iYWxJbmZsdWVuemFNb2RlbA0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVHbG9iYWxJbmZsdWVuemFNb2RlbEFkYXB0ZXIoKSB7DQorCQlyZXR1cm4gbnVsbDsNCisJfQ0KKw0KKwkvKioNCisJICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBqYXZhLmxhbmcuQ29tcGFyYWJsZSA8ZW0+Q29tcGFyYWJsZTwvZW0+fScuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsNCisJICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuDQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4NCisJICogQHNlZSBqYXZhLmxhbmcuQ29tcGFyYWJsZQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVDb21wYXJhYmxlQWRhcHRlcigpIHsNCisJCXJldHVybiBudWxsOw0KKwl9DQorDQorCS8qKg0KKwkgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uSWRlbnRpZmlhYmxlIDxlbT5JZGVudGlmaWFibGU8L2VtPn0nLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7DQorCSAqIGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZSB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5Lg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuDQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5JZGVudGlmaWFibGUNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlSWRlbnRpZmlhYmxlQWRhcHRlcigpIHsNCisJCXJldHVybiBudWxsOw0KKwl9DQorDQorCS8qKg0KKwkgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5EZWNvcmF0b3IgPGVtPkRlY29yYXRvcjwvZW0+fScuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsNCisJICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuDQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4NCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuRGVjb3JhdG9yDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZURlY29yYXRvckFkYXB0ZXIoKSB7DQorCQlyZXR1cm4gbnVsbDsNCisJfQ0KKw0KKwkvKioNCisJICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuTm9kZURlY29yYXRvciA8ZW0+Tm9kZSBEZWNvcmF0b3I8L2VtPn0nLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7DQorCSAqIGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZSB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5Lg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuDQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLk5vZGVEZWNvcmF0b3INCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlTm9kZURlY29yYXRvckFkYXB0ZXIoKSB7DQorCQlyZXR1cm4gbnVsbDsNCisJfQ0KKw0KKwkvKioNCisJICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLlNhbml0eUNoZWNrZXIgPGVtPlNhbml0eSBDaGVja2VyPC9lbT59Jy4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOw0KKwkgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLg0KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uU2FuaXR5Q2hlY2tlcg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVTYW5pdHlDaGVja2VyQWRhcHRlcigpIHsNCisJCXJldHVybiBudWxsOw0KKwl9DQorDQorCS8qKg0KKwkgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5Nb2RpZmlhYmxlIDxlbT5Nb2RpZmlhYmxlPC9lbT59Jy4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOw0KKwkgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLg0KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5Nb2RpZmlhYmxlDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZU1vZGlmaWFibGVBZGFwdGVyKCkgew0KKwkJcmV0dXJuIG51bGw7DQorCX0NCisNCisJLyoqDQorCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLkRpc2Vhc2VNb2RlbCA8ZW0+RGlzZWFzZSBNb2RlbDwvZW0+fScuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsNCisJICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuDQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4NCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuRGlzZWFzZU1vZGVsDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZURpc2Vhc2VNb2RlbEFkYXB0ZXIoKSB7DQorCQlyZXR1cm4gbnVsbDsNCisJfQ0KKw0KKwkvKioNCisJICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuSW50ZWdyYXRpb25EZWNvcmF0b3IgPGVtPkludGVncmF0aW9uIERlY29yYXRvcjwvZW0+fScuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsNCisJICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuDQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4NCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuSW50ZWdyYXRpb25EZWNvcmF0b3INCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlSW50ZWdyYXRpb25EZWNvcmF0b3JBZGFwdGVyKCkgew0KKwkJcmV0dXJuIG51bGw7DQorCX0NCisNCisJLyoqDQorCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkRGlzZWFzZU1vZGVsIDxlbT5EaXNlYXNlIE1vZGVsPC9lbT59Jy4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOw0KKwkgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLg0KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZERpc2Vhc2VNb2RlbA0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVTdGFuZGFyZERpc2Vhc2VNb2RlbEFkYXB0ZXIoKSB7DQorCQlyZXR1cm4gbnVsbDsNCisJfQ0KKw0KKwkvKioNCisJICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU0kgPGVtPlNJPC9lbT59Jy4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOw0KKwkgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLg0KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TSQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVTSUFkYXB0ZXIoKSB7DQorCQlyZXR1cm4gbnVsbDsNCisJfQ0KKw0KKwkvKioNCisJICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU0lSIDxlbT5TSVI8L2VtPn0nLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7DQorCSAqIGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZSB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5Lg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuDQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlNJUg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVTSVJBZGFwdGVyKCkgew0KKwkJcmV0dXJuIG51bGw7DQorCX0NCisNCisJLyoqDQorCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlN0b2NoYXN0aWNEaXNlYXNlTW9kZWwgPGVtPlN0b2NoYXN0aWMgRGlzZWFzZSBNb2RlbDwvZW0+fScuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsNCisJICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuDQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4NCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RvY2hhc3RpY0Rpc2Vhc2VNb2RlbA0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVTdG9jaGFzdGljRGlzZWFzZU1vZGVsQWRhcHRlcigpIHsNCisJCXJldHVybiBudWxsOw0KKwl9DQorDQorCS8qKg0KKwkgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZFN0b2NoYXN0aWNEaXNlYXNlTW9kZWwgPGVtPlN0b2NoYXN0aWMgRGlzZWFzZSBNb2RlbDwvZW0+fScuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsNCisJICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuDQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4NCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmRTdG9jaGFzdGljRGlzZWFzZU1vZGVsDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZVN0YW5kYXJkU3RvY2hhc3RpY0Rpc2Vhc2VNb2RlbEFkYXB0ZXIoKSB7DQorCQlyZXR1cm4gbnVsbDsNCisJfQ0KKw0KKwkvKioNCisJICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RvY2hhc3RpY1NJUkRpc2Vhc2VNb2RlbCA8ZW0+U3RvY2hhc3RpYyBTSVIgRGlzZWFzZSBNb2RlbDwvZW0+fScuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsNCisJICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuDQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4NCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RvY2hhc3RpY1NJUkRpc2Vhc2VNb2RlbA0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVTdG9jaGFzdGljU0lSRGlzZWFzZU1vZGVsQWRhcHRlcigpIHsNCisJCXJldHVybiBudWxsOw0KKwl9DQorDQorCS8qKg0KKwkgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIHRoZSBkZWZhdWx0IGNhc2UuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwuDQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlRU9iamVjdEFkYXB0ZXIoKSB7DQorCQlyZXR1cm4gbnVsbDsNCisJfQ0KKw0KK30gLy9HbG9iYWxpbmZsdWVuemFtb2RlbEFkYXB0ZXJGYWN0b3J5DQpkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZ2xvYmFsaW5mbHVlbnphbW9kZWwvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9nbG9iYWxpbmZsdWVuemFtb2RlbC91dGlsL0dsb2JhbGluZmx1ZW56YW1vZGVsU3dpdGNoLmphdmEgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5nbG9iYWxpbmZsdWVuemFtb2RlbC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL2dsb2JhbGluZmx1ZW56YW1vZGVsL3V0aWwvR2xvYmFsaW5mbHVlbnphbW9kZWxTd2l0Y2guamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYjEwZDY2Ci0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZ2xvYmFsaW5mbHVlbnphbW9kZWwvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9nbG9iYWxpbmZsdWVuemFtb2RlbC91dGlsL0dsb2JhbGluZmx1ZW56YW1vZGVsU3dpdGNoLmphdmEKQEAgLTAsMCArMSwzNzMgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmdsb2JhbGluZmx1ZW56YW1vZGVsLnV0aWw7DQorDQorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisgKiBDb3B5cmlnaHQgKGMpIDIwMDkgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuDQorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscw0KKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMA0KKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0DQorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwNCisgKg0KKyAqIENvbnRyaWJ1dG9yczoNCisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uDQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQorDQoraW1wb3J0IGphdmEudXRpbC5MaXN0Ow0KKw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdDsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5JZGVudGlmaWFibGU7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uU2FuaXR5Q2hlY2tlcjsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLkRlY29yYXRvcjsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLkludGVncmF0aW9uRGVjb3JhdG9yOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuTm9kZURlY29yYXRvcjsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLk1vZGlmaWFibGU7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5nbG9iYWxpbmZsdWVuemFtb2RlbC4qOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZ2xvYmFsaW5mbHVlbnphbW9kZWwuR2xvYmFsSW5mbHVlbnphTW9kZWw7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5nbG9iYWxpbmZsdWVuemFtb2RlbC5HbG9iYWxpbmZsdWVuemFtb2RlbFBhY2thZ2U7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5EaXNlYXNlTW9kZWw7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TSTsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlNJUjsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkRGlzZWFzZU1vZGVsOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmRTdG9jaGFzdGljRGlzZWFzZU1vZGVsOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RvY2hhc3RpY0Rpc2Vhc2VNb2RlbDsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlN0b2NoYXN0aWNTSVJEaXNlYXNlTW9kZWw7DQorDQorLyoqDQorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisgKiBUaGUgPGI+U3dpdGNoPC9iPiBmb3IgdGhlIG1vZGVsJ3MgaW5oZXJpdGFuY2UgaGllcmFyY2h5Lg0KKyAqIEl0IHN1cHBvcnRzIHRoZSBjYWxsIHtAbGluayAjZG9Td2l0Y2goRU9iamVjdCkgZG9Td2l0Y2gob2JqZWN0KX0NCisgKiB0byBpbnZva2UgdGhlIDxjb2RlPmNhc2VYWFg8L2NvZGU+IG1ldGhvZCBmb3IgZWFjaCBjbGFzcyBvZiB0aGUgbW9kZWwsDQorICogc3RhcnRpbmcgd2l0aCB0aGUgYWN0dWFsIGNsYXNzIG9mIHRoZSBvYmplY3QNCisgKiBhbmQgcHJvY2VlZGluZyB1cCB0aGUgaW5oZXJpdGFuY2UgaGllcmFyY2h5DQorICogdW50aWwgYSBub24tbnVsbCByZXN1bHQgaXMgcmV0dXJuZWQsDQorICogd2hpY2ggaXMgdGhlIHJlc3VsdCBvZiB0aGUgc3dpdGNoLg0KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKyAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmdsb2JhbGluZmx1ZW56YW1vZGVsLkdsb2JhbGluZmx1ZW56YW1vZGVsUGFja2FnZQ0KKyAqIEBnZW5lcmF0ZWQNCisgKi8NCitwdWJsaWMgY2xhc3MgR2xvYmFsaW5mbHVlbnphbW9kZWxTd2l0Y2g8VDE+IHsNCisJLyoqDQorCSAqIFRoZSBjYWNoZWQgbW9kZWwgcGFja2FnZQ0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIHN0YXRpYyBHbG9iYWxpbmZsdWVuemFtb2RlbFBhY2thZ2UgbW9kZWxQYWNrYWdlOw0KKw0KKwkvKioNCisJICogQ3JlYXRlcyBhbiBpbnN0YW5jZSBvZiB0aGUgc3dpdGNoLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIEdsb2JhbGluZmx1ZW56YW1vZGVsU3dpdGNoKCkgew0KKwkJaWYgKG1vZGVsUGFja2FnZSA9PSBudWxsKSB7DQorCQkJbW9kZWxQYWNrYWdlID0gR2xvYmFsaW5mbHVlbnphbW9kZWxQYWNrYWdlLmVJTlNUQU5DRTsNCisJCX0NCisJfQ0KKw0KKwkvKioNCisJICogQ2FsbHMgPGNvZGU+Y2FzZVhYWDwvY29kZT4gZm9yIGVhY2ggY2xhc3Mgb2YgdGhlIG1vZGVsIHVudGlsIG9uZSByZXR1cm5zIGEgbm9uIG51bGwgcmVzdWx0OyBpdCB5aWVsZHMgdGhhdCByZXN1bHQuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcmV0dXJuIHRoZSBmaXJzdCBub24tbnVsbCByZXN1bHQgcmV0dXJuZWQgYnkgYSA8Y29kZT5jYXNlWFhYPC9jb2RlPiBjYWxsLg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgVDEgZG9Td2l0Y2goRU9iamVjdCB0aGVFT2JqZWN0KSB7DQorCQlyZXR1cm4gZG9Td2l0Y2godGhlRU9iamVjdC5lQ2xhc3MoKSwgdGhlRU9iamVjdCk7DQorCX0NCisNCisJLyoqDQorCSAqIENhbGxzIDxjb2RlPmNhc2VYWFg8L2NvZGU+IGZvciBlYWNoIGNsYXNzIG9mIHRoZSBtb2RlbCB1bnRpbCBvbmUgcmV0dXJucyBhIG5vbiBudWxsIHJlc3VsdDsgaXQgeWllbGRzIHRoYXQgcmVzdWx0Lg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHJldHVybiB0aGUgZmlyc3Qgbm9uLW51bGwgcmVzdWx0IHJldHVybmVkIGJ5IGEgPGNvZGU+Y2FzZVhYWDwvY29kZT4gY2FsbC4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIFQxIGRvU3dpdGNoKEVDbGFzcyB0aGVFQ2xhc3MsIEVPYmplY3QgdGhlRU9iamVjdCkgew0KKwkJaWYgKHRoZUVDbGFzcy5lQ29udGFpbmVyKCkgPT0gbW9kZWxQYWNrYWdlKSB7DQorCQkJcmV0dXJuIGRvU3dpdGNoKHRoZUVDbGFzcy5nZXRDbGFzc2lmaWVySUQoKSwgdGhlRU9iamVjdCk7DQorCQl9DQorCQllbHNlIHsNCisJCQlMaXN0PEVDbGFzcz4gZVN1cGVyVHlwZXMgPSB0aGVFQ2xhc3MuZ2V0RVN1cGVyVHlwZXMoKTsNCisJCQlyZXR1cm4NCisJCQkJZVN1cGVyVHlwZXMuaXNFbXB0eSgpID8NCisJCQkJCWRlZmF1bHRDYXNlKHRoZUVPYmplY3QpIDoNCisJCQkJCWRvU3dpdGNoKGVTdXBlclR5cGVzLmdldCgwKSwgdGhlRU9iamVjdCk7DQorCQl9DQorCX0NCisNCisJLyoqDQorCSAqIENhbGxzIDxjb2RlPmNhc2VYWFg8L2NvZGU+IGZvciBlYWNoIGNsYXNzIG9mIHRoZSBtb2RlbCB1bnRpbCBvbmUgcmV0dXJucyBhIG5vbiBudWxsIHJlc3VsdDsgaXQgeWllbGRzIHRoYXQgcmVzdWx0Lg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHJldHVybiB0aGUgZmlyc3Qgbm9uLW51bGwgcmVzdWx0IHJldHVybmVkIGJ5IGEgPGNvZGU+Y2FzZVhYWDwvY29kZT4gY2FsbC4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIFQxIGRvU3dpdGNoKGludCBjbGFzc2lmaWVySUQsIEVPYmplY3QgdGhlRU9iamVjdCkgew0KKwkJc3dpdGNoIChjbGFzc2lmaWVySUQpIHsNCisJCQljYXNlIEdsb2JhbGluZmx1ZW56YW1vZGVsUGFja2FnZS5HTE9CQUxfSU5GTFVFTlpBX01PREVMOiB7DQorCQkJCUdsb2JhbEluZmx1ZW56YU1vZGVsIGdsb2JhbEluZmx1ZW56YU1vZGVsID0gKEdsb2JhbEluZmx1ZW56YU1vZGVsKXRoZUVPYmplY3Q7DQorCQkJCVQxIHJlc3VsdCA9IGNhc2VHbG9iYWxJbmZsdWVuemFNb2RlbChnbG9iYWxJbmZsdWVuemFNb2RlbCk7DQorCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZVN0b2NoYXN0aWNTSVJEaXNlYXNlTW9kZWwoZ2xvYmFsSW5mbHVlbnphTW9kZWwpOw0KKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VTSVIoZ2xvYmFsSW5mbHVlbnphTW9kZWwpOw0KKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VTdGFuZGFyZFN0b2NoYXN0aWNEaXNlYXNlTW9kZWwoZ2xvYmFsSW5mbHVlbnphTW9kZWwpOw0KKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VTSShnbG9iYWxJbmZsdWVuemFNb2RlbCk7DQorCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZVN0b2NoYXN0aWNEaXNlYXNlTW9kZWwoZ2xvYmFsSW5mbHVlbnphTW9kZWwpOw0KKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VTdGFuZGFyZERpc2Vhc2VNb2RlbChnbG9iYWxJbmZsdWVuemFNb2RlbCk7DQorCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZURpc2Vhc2VNb2RlbChnbG9iYWxJbmZsdWVuemFNb2RlbCk7DQorCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZUludGVncmF0aW9uRGVjb3JhdG9yKGdsb2JhbEluZmx1ZW56YU1vZGVsKTsNCisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlTW9kaWZpYWJsZShnbG9iYWxJbmZsdWVuemFNb2RlbCk7DQorCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZU5vZGVEZWNvcmF0b3IoZ2xvYmFsSW5mbHVlbnphTW9kZWwpOw0KKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VEZWNvcmF0b3IoZ2xvYmFsSW5mbHVlbnphTW9kZWwpOw0KKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VJZGVudGlmaWFibGUoZ2xvYmFsSW5mbHVlbnphTW9kZWwpOw0KKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VDb21wYXJhYmxlKGdsb2JhbEluZmx1ZW56YU1vZGVsKTsNCisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlU2FuaXR5Q2hlY2tlcihnbG9iYWxJbmZsdWVuemFNb2RlbCk7DQorCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gZGVmYXVsdENhc2UodGhlRU9iamVjdCk7DQorCQkJCXJldHVybiByZXN1bHQ7DQorCQkJfQ0KKwkJCWRlZmF1bHQ6IHJldHVybiBkZWZhdWx0Q2FzZSh0aGVFT2JqZWN0KTsNCisJCX0NCisJfQ0KKw0KKwkvKioNCisJICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+R2xvYmFsIEluZmx1ZW56YSBNb2RlbDwvZW0+Jy4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7DQorCSAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guDQorCSAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkdsb2JhbCBJbmZsdWVuemEgTW9kZWw8L2VtPicuDQorCSAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgVDEgY2FzZUdsb2JhbEluZmx1ZW56YU1vZGVsKEdsb2JhbEluZmx1ZW56YU1vZGVsIG9iamVjdCkgew0KKwkJcmV0dXJuIG51bGw7DQorCX0NCisNCisJLyoqDQorCSAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkNvbXBhcmFibGU8L2VtPicuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOw0KKwkgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLg0KKwkgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5Db21wYXJhYmxlPC9lbT4nLg0KKwkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIDxUPiBUMSBjYXNlQ29tcGFyYWJsZShDb21wYXJhYmxlPFQ+IG9iamVjdCkgew0KKwkJcmV0dXJuIG51bGw7DQorCX0NCisNCisJLyoqDQorCSAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPklkZW50aWZpYWJsZTwvZW0+Jy4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7DQorCSAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guDQorCSAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPklkZW50aWZpYWJsZTwvZW0+Jy4NCisJICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBUMSBjYXNlSWRlbnRpZmlhYmxlKElkZW50aWZpYWJsZSBvYmplY3QpIHsNCisJCXJldHVybiBudWxsOw0KKwl9DQorDQorCS8qKg0KKwkgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5EZWNvcmF0b3I8L2VtPicuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOw0KKwkgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLg0KKwkgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5EZWNvcmF0b3I8L2VtPicuDQorCSAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgVDEgY2FzZURlY29yYXRvcihEZWNvcmF0b3Igb2JqZWN0KSB7DQorCQlyZXR1cm4gbnVsbDsNCisJfQ0KKw0KKwkvKioNCisJICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+Tm9kZSBEZWNvcmF0b3I8L2VtPicuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOw0KKwkgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLg0KKwkgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5Ob2RlIERlY29yYXRvcjwvZW0+Jy4NCisJICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBUMSBjYXNlTm9kZURlY29yYXRvcihOb2RlRGVjb3JhdG9yIG9iamVjdCkgew0KKwkJcmV0dXJuIG51bGw7DQorCX0NCisNCisJLyoqDQorCSAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPlNhbml0eSBDaGVja2VyPC9lbT4nLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsNCisJICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guDQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4NCisJICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+U2FuaXR5IENoZWNrZXI8L2VtPicuDQorCSAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgVDEgY2FzZVNhbml0eUNoZWNrZXIoU2FuaXR5Q2hlY2tlciBvYmplY3QpIHsNCisJCXJldHVybiBudWxsOw0KKwl9DQorDQorCS8qKg0KKwkgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5Nb2RpZmlhYmxlPC9lbT4nLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsNCisJICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guDQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4NCisJICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+TW9kaWZpYWJsZTwvZW0+Jy4NCisJICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBUMSBjYXNlTW9kaWZpYWJsZShNb2RpZmlhYmxlIG9iamVjdCkgew0KKwkJcmV0dXJuIG51bGw7DQorCX0NCisNCisJLyoqDQorCSAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkRpc2Vhc2UgTW9kZWw8L2VtPicuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOw0KKwkgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLg0KKwkgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5EaXNlYXNlIE1vZGVsPC9lbT4nLg0KKwkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIFQxIGNhc2VEaXNlYXNlTW9kZWwoRGlzZWFzZU1vZGVsIG9iamVjdCkgew0KKwkJcmV0dXJuIG51bGw7DQorCX0NCisNCisJLyoqDQorCSAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkludGVncmF0aW9uIERlY29yYXRvcjwvZW0+Jy4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7DQorCSAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guDQorCSAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkludGVncmF0aW9uIERlY29yYXRvcjwvZW0+Jy4NCisJICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBUMSBjYXNlSW50ZWdyYXRpb25EZWNvcmF0b3IoSW50ZWdyYXRpb25EZWNvcmF0b3Igb2JqZWN0KSB7DQorCQlyZXR1cm4gbnVsbDsNCisJfQ0KKw0KKwkvKioNCisJICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+RGlzZWFzZSBNb2RlbDwvZW0+Jy4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7DQorCSAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guDQorCSAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkRpc2Vhc2UgTW9kZWw8L2VtPicuDQorCSAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgVDEgY2FzZVN0YW5kYXJkRGlzZWFzZU1vZGVsKFN0YW5kYXJkRGlzZWFzZU1vZGVsIG9iamVjdCkgew0KKwkJcmV0dXJuIG51bGw7DQorCX0NCisNCisJLyoqDQorCSAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPlNJPC9lbT4nLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsNCisJICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guDQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4NCisJICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+U0k8L2VtPicuDQorCSAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgVDEgY2FzZVNJKFNJIG9iamVjdCkgew0KKwkJcmV0dXJuIG51bGw7DQorCX0NCisNCisJLyoqDQorCSAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPlNJUjwvZW0+Jy4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7DQorCSAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guDQorCSAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPlNJUjwvZW0+Jy4NCisJICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBUMSBjYXNlU0lSKFNJUiBvYmplY3QpIHsNCisJCXJldHVybiBudWxsOw0KKwl9DQorDQorCS8qKg0KKwkgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5TdG9jaGFzdGljIERpc2Vhc2UgTW9kZWw8L2VtPicuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOw0KKwkgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLg0KKwkgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5TdG9jaGFzdGljIERpc2Vhc2UgTW9kZWw8L2VtPicuDQorCSAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgVDEgY2FzZVN0b2NoYXN0aWNEaXNlYXNlTW9kZWwoU3RvY2hhc3RpY0Rpc2Vhc2VNb2RlbCBvYmplY3QpIHsNCisJCXJldHVybiBudWxsOw0KKwl9DQorDQorCS8qKg0KKwkgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5TdG9jaGFzdGljIERpc2Vhc2UgTW9kZWw8L2VtPicuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOw0KKwkgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLg0KKwkgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5TdG9jaGFzdGljIERpc2Vhc2UgTW9kZWw8L2VtPicuDQorCSAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgVDEgY2FzZVN0YW5kYXJkU3RvY2hhc3RpY0Rpc2Vhc2VNb2RlbChTdGFuZGFyZFN0b2NoYXN0aWNEaXNlYXNlTW9kZWwgb2JqZWN0KSB7DQorCQlyZXR1cm4gbnVsbDsNCisJfQ0KKw0KKwkvKioNCisJICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+U3RvY2hhc3RpYyBTSVIgRGlzZWFzZSBNb2RlbDwvZW0+Jy4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7DQorCSAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guDQorCSAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPlN0b2NoYXN0aWMgU0lSIERpc2Vhc2UgTW9kZWw8L2VtPicuDQorCSAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgVDEgY2FzZVN0b2NoYXN0aWNTSVJEaXNlYXNlTW9kZWwoU3RvY2hhc3RpY1NJUkRpc2Vhc2VNb2RlbCBvYmplY3QpIHsNCisJCXJldHVybiBudWxsOw0KKwl9DQorDQorCS8qKg0KKwkgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5FT2JqZWN0PC9lbT4nLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsNCisJICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2gsIGJ1dCB0aGlzIGlzIHRoZSBsYXN0IGNhc2UgYW55d2F5Lg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guDQorCSAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkVPYmplY3Q8L2VtPicuDQorCSAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgVDEgZGVmYXVsdENhc2UoRU9iamVjdCBvYmplY3QpIHsNCisJCXJldHVybiBudWxsOw0KKwl9DQorDQorfSAvL0dsb2JhbGluZmx1ZW56YW1vZGVsU3dpdGNoDQpkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMubXVsdGlwb3B1bGF0aW9uLy5jbGFzc3BhdGggYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5tdWx0aXBvcHVsYXRpb24vLmNsYXNzcGF0aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMDRlODYxCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMubXVsdGlwb3B1bGF0aW9uLy5jbGFzc3BhdGgKQEAgLTAsMCArMSw3IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPGNsYXNzcGF0aD4KKwk8Y2xhc3NwYXRoZW50cnkga2luZD0ic3JjIiBwYXRoPSJzcmMiLz4KKwk8Y2xhc3NwYXRoZW50cnkga2luZD0iY29uIiBwYXRoPSJvcmcuZWNsaXBzZS5qZHQubGF1bmNoaW5nLkpSRV9DT05UQUlORVIvb3JnLmVjbGlwc2UuamR0LmludGVybmFsLmRlYnVnLnVpLmxhdW5jaGVyLlN0YW5kYXJkVk1UeXBlL0oyU0UtMS41Ii8+CisJPGNsYXNzcGF0aGVudHJ5IGtpbmQ9ImNvbiIgcGF0aD0ib3JnLmVjbGlwc2UucGRlLmNvcmUucmVxdWlyZWRQbHVnaW5zIi8+CisJPGNsYXNzcGF0aGVudHJ5IGtpbmQ9Im91dHB1dCIgcGF0aD0iYmluIi8+Cis8L2NsYXNzcGF0aD4KZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLm11bHRpcG9wdWxhdGlvbi8ucHJvamVjdCBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLm11bHRpcG9wdWxhdGlvbi8ucHJvamVjdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNTI0MjIxCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMubXVsdGlwb3B1bGF0aW9uLy5wcm9qZWN0CkBAIC0wLDAgKzEsMjggQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8cHJvamVjdERlc2NyaXB0aW9uPgorCTxuYW1lPm9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5tdWx0aXBvcHVsYXRpb248L25hbWU+CisJPGNvbW1lbnQ+PC9jb21tZW50PgorCTxwcm9qZWN0cz4KKwk8L3Byb2plY3RzPgorCTxidWlsZFNwZWM+CisJCTxidWlsZENvbW1hbmQ+CisJCQk8bmFtZT5vcmcuZWNsaXBzZS5qZHQuY29yZS5qYXZhYnVpbGRlcjwvbmFtZT4KKwkJCTxhcmd1bWVudHM+CisJCQk8L2FyZ3VtZW50cz4KKwkJPC9idWlsZENvbW1hbmQ+CisJCTxidWlsZENvbW1hbmQ+CisJCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuTWFuaWZlc3RCdWlsZGVyPC9uYW1lPgorCQkJPGFyZ3VtZW50cz4KKwkJCTwvYXJndW1lbnRzPgorCQk8L2J1aWxkQ29tbWFuZD4KKwkJPGJ1aWxkQ29tbWFuZD4KKwkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5TY2hlbWFCdWlsZGVyPC9uYW1lPgorCQkJPGFyZ3VtZW50cz4KKwkJCTwvYXJndW1lbnRzPgorCQk8L2J1aWxkQ29tbWFuZD4KKwk8L2J1aWxkU3BlYz4KKwk8bmF0dXJlcz4KKwkJPG5hdHVyZT5vcmcuZWNsaXBzZS5qZHQuY29yZS5qYXZhbmF0dXJlPC9uYXR1cmU+CisJCTxuYXR1cmU+b3JnLmVjbGlwc2UucGRlLlBsdWdpbk5hdHVyZTwvbmF0dXJlPgorCTwvbmF0dXJlcz4KKzwvcHJvamVjdERlc2NyaXB0aW9uPgpkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMubXVsdGlwb3B1bGF0aW9uLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLm11bHRpcG9wdWxhdGlvbi8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjhjNmVlOQotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLm11bHRpcG9wdWxhdGlvbi8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMKQEAgLTAsMCArMSw4IEBACisjTW9uIEZlYiAyMiAxNTozOTozNSBQU1QgMjAxMAorZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvZGVnZW4uaW5saW5lSnNyQnl0ZWNvZGU9ZW5hYmxlZAorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29kZWdlbi50YXJnZXRQbGF0Zm9ybT0xLjUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvbXBsaWFuY2U9MS41CitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmFzc2VydElkZW50aWZpZXI9ZXJyb3IKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZW51bUlkZW50aWZpZXI9ZXJyb3IKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnNvdXJjZT0xLjUKZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLm11bHRpcG9wdWxhdGlvbi9NRVRBLUlORi9NQU5JRkVTVC5NRiBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLm11bHRpcG9wdWxhdGlvbi9NRVRBLUlORi9NQU5JRkVTVC5NRgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MzA4NWE2Ci0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMubXVsdGlwb3B1bGF0aW9uL01FVEEtSU5GL01BTklGRVNULk1GCkBAIC0wLDAgKzEsNDIgQEAKK01hbmlmZXN0LVZlcnNpb246IDEuMAorQnVuZGxlLU1hbmlmZXN0VmVyc2lvbjogMgorQnVuZGxlLU5hbWU6ICVwbHVnaW5OYW1lCitCdW5kbGUtU3ltYm9saWNOYW1lOiBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMubXVsdGlwb3B1bGF0aW9uO3NpbmdsZXRvbjo9dHJ1ZQorQnVuZGxlLVZlcnNpb246IDEuMi4xCitCdW5kbGUtQ2xhc3NQYXRoOiAuCitCdW5kbGUtVmVuZG9yOiAlcHJvdmlkZXJOYW1lCitCdW5kbGUtTG9jYWxpemF0aW9uOiBwbHVnaW4KK0J1bmRsZS1SZXF1aXJlZEV4ZWN1dGlvbkVudmlyb25tZW50OiBKMlNFLTEuNQorRXhwb3J0LVBhY2thZ2U6IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5tdWx0aXBvcHVsYXRpb247dXNlczo9Im9yZy5lY2xpcHNlLmVtZi5lY29yZSxvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQiLAorIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5tdWx0aXBvcHVsYXRpb24uaW1wbDsKKyAgdXNlczo9Im9yZy5lY2xpcHNlLmVtZi5lY29yZSwKKyAgIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5tdWx0aXBvcHVsYXRpb24sCisgICBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuaW1wbCwKKyAgIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5pbXBsIiwKKyBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMubXVsdGlwb3B1bGF0aW9uLnByb3ZpZGVyOworICB1c2VzOj0ib3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLnByb3ZpZGVyLAorICAgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLAorICAgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbiwKKyAgIG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLAorICAgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnksCisgICBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnVpLAorICAgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLm11bHRpcG9wdWxhdGlvbi51dGlsIiwKKyBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMubXVsdGlwb3B1bGF0aW9uLnV0aWw7CisgIHVzZXM6PSJvcmcuZWNsaXBzZS5lbWYuZWNvcmUsCisgICBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMubXVsdGlwb3B1bGF0aW9uLAorICAgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuaW1wbCwKKyAgIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZCwKKyAgIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllciwKKyAgIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbCwKKyAgIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24sCisgICBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeSIKK1JlcXVpcmUtQnVuZGxlOiBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWU7dmlzaWJpbGl0eTo9cmVleHBvcnQsCisgb3JnLmVjbGlwc2UuZW1mLmVjb3JlO3Zpc2liaWxpdHk6PXJlZXhwb3J0LAorIG9yZy5lY2xpcHNlLmVtZi5lY29yZS5lZGl0O2J1bmRsZS12ZXJzaW9uPSIyLjUuMCI7dmlzaWJpbGl0eTo9cmVleHBvcnQsCisgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzO3Zpc2liaWxpdHk6PXJlZXhwb3J0LAorIG9yZy5lY2xpcHNlLnN0ZW0uY29yZTt2aXNpYmlsaXR5Oj1yZWV4cG9ydCwKKyBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLAorIG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVsczt2aXNpYmlsaXR5Oj1yZWV4cG9ydCwKKyBvcmcuYXBhY2hlLmNvbW1vbnMubWF0aDtidW5kbGUtdmVyc2lvbj0iMi4xLjAiCitCdW5kbGUtQWN0aXZhdGlvblBvbGljeTogbGF6eQorQnVuZGxlLUFjdGl2YXRvcjogb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLm11bHRpcG9wdWxhdGlvbi5BY3RpdmF0b3IKZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLm11bHRpcG9wdWxhdGlvbi9idWlsZC5wcm9wZXJ0aWVzIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMubXVsdGlwb3B1bGF0aW9uL2J1aWxkLnByb3BlcnRpZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGIxZjlkOAotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLm11bHRpcG9wdWxhdGlvbi9idWlsZC5wcm9wZXJ0aWVzCkBAIC0wLDAgKzEsMTggQEAKKworIyA8Y29weXJpZ2h0PgorIyA8L2NvcHlyaWdodD4KKyMKKyMgJElkJAorCitiaW4uaW5jbHVkZXMgPSAuLFwKKyAgICAgICAgICAgICAgIG1vZGVsLyxcCisgICAgICAgICAgICAgICBNRVRBLUlORi8sXAorICAgICAgICAgICAgICAgcGx1Z2luLnhtbCxcCisgICAgICAgICAgICAgICBwbHVnaW4ucHJvcGVydGllcyxcCisgICAgICAgICAgICAgICBpY29ucy8sXAorICAgICAgICAgICAgICAgcGx1Z2luX2tyLnByb3BlcnRpZXMsXAorICAgICAgICAgICAgICAgcGx1Z2luX2RlLnByb3BlcnRpZXMsXAorICAgICAgICAgICAgICAgcGx1Z2luX3poLnByb3BlcnRpZXMKK2phcnMuY29tcGlsZS5vcmRlciA9IC4KK3NvdXJjZS4uID0gc3JjLworb3V0cHV0Li4gPSBiaW4vCmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5tdWx0aXBvcHVsYXRpb24vaWNvbnMvZnVsbC9jdG9vbDE2L0NyZWF0ZU11bHRpUG9wdWxhdGlvblNFSVJEaXNlYXNlTW9kZWxfaW5jdWJhdGlvblJhdGVfRG91YmxlVmFsdWVMaXN0LmdpZiBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLm11bHRpcG9wdWxhdGlvbi9pY29ucy9mdWxsL2N0b29sMTYvQ3JlYXRlTXVsdGlQb3B1bGF0aW9uU0VJUkRpc2Vhc2VNb2RlbF9pbmN1YmF0aW9uUmF0ZV9Eb3VibGVWYWx1ZUxpc3QuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk4MWI3ODcKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5tdWx0aXBvcHVsYXRpb24vaWNvbnMvZnVsbC9jdG9vbDE2L0NyZWF0ZU11bHRpUG9wdWxhdGlvblNFSVJEaXNlYXNlTW9kZWxfaW5jdWJhdGlvblJhdGVfRG91YmxlVmFsdWVMaXN0LmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5tdWx0aXBvcHVsYXRpb24vaWNvbnMvZnVsbC9jdG9vbDE2L0NyZWF0ZU11bHRpUG9wdWxhdGlvblNJRGlzZWFzZU1vZGVsX2luZmVjdGlvdXNNb3J0YWxpdHlSYXRlX0RvdWJsZVZhbHVlTGlzdC5naWYgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5tdWx0aXBvcHVsYXRpb24vaWNvbnMvZnVsbC9jdG9vbDE2L0NyZWF0ZU11bHRpUG9wdWxhdGlvblNJRGlzZWFzZU1vZGVsX2luZmVjdGlvdXNNb3J0YWxpdHlSYXRlX0RvdWJsZVZhbHVlTGlzdC5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmJkZGEzYQotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLm11bHRpcG9wdWxhdGlvbi9pY29ucy9mdWxsL2N0b29sMTYvQ3JlYXRlTXVsdGlQb3B1bGF0aW9uU0lEaXNlYXNlTW9kZWxfaW5mZWN0aW91c01vcnRhbGl0eVJhdGVfRG91YmxlVmFsdWVMaXN0LmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5tdWx0aXBvcHVsYXRpb24vaWNvbnMvZnVsbC9jdG9vbDE2L0NyZWF0ZU11bHRpUG9wdWxhdGlvblNJRGlzZWFzZU1vZGVsX3BvcHVsYXRpb25Hcm91cHNfU3RyaW5nVmFsdWVMaXN0LmdpZiBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLm11bHRpcG9wdWxhdGlvbi9pY29ucy9mdWxsL2N0b29sMTYvQ3JlYXRlTXVsdGlQb3B1bGF0aW9uU0lEaXNlYXNlTW9kZWxfcG9wdWxhdGlvbkdyb3Vwc19TdHJpbmdWYWx1ZUxpc3QuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdiN2Q1ODIKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5tdWx0aXBvcHVsYXRpb24vaWNvbnMvZnVsbC9jdG9vbDE2L0NyZWF0ZU11bHRpUG9wdWxhdGlvblNJRGlzZWFzZU1vZGVsX3BvcHVsYXRpb25Hcm91cHNfU3RyaW5nVmFsdWVMaXN0LmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5tdWx0aXBvcHVsYXRpb24vaWNvbnMvZnVsbC9jdG9vbDE2L0NyZWF0ZU11bHRpUG9wdWxhdGlvblNJRGlzZWFzZU1vZGVsX3JlY292ZXJ5UmF0ZV9Eb3VibGVWYWx1ZUxpc3QuZ2lmIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMubXVsdGlwb3B1bGF0aW9uL2ljb25zL2Z1bGwvY3Rvb2wxNi9DcmVhdGVNdWx0aVBvcHVsYXRpb25TSURpc2Vhc2VNb2RlbF9yZWNvdmVyeVJhdGVfRG91YmxlVmFsdWVMaXN0LmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YmRkYTNhCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMubXVsdGlwb3B1bGF0aW9uL2ljb25zL2Z1bGwvY3Rvb2wxNi9DcmVhdGVNdWx0aVBvcHVsYXRpb25TSURpc2Vhc2VNb2RlbF9yZWNvdmVyeVJhdGVfRG91YmxlVmFsdWVMaXN0LmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5tdWx0aXBvcHVsYXRpb24vaWNvbnMvZnVsbC9jdG9vbDE2L0NyZWF0ZU11bHRpUG9wdWxhdGlvblNJRGlzZWFzZU1vZGVsX3RyYW5zbWlzc2lvblJhdGVfRG91YmxlVmFsdWVNYXRyaXguZ2lmIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMubXVsdGlwb3B1bGF0aW9uL2ljb25zL2Z1bGwvY3Rvb2wxNi9DcmVhdGVNdWx0aVBvcHVsYXRpb25TSURpc2Vhc2VNb2RlbF90cmFuc21pc3Npb25SYXRlX0RvdWJsZVZhbHVlTWF0cml4LmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41OWM0YWRhCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMubXVsdGlwb3B1bGF0aW9uL2ljb25zL2Z1bGwvY3Rvb2wxNi9DcmVhdGVNdWx0aVBvcHVsYXRpb25TSURpc2Vhc2VNb2RlbF90cmFuc21pc3Npb25SYXRlX0RvdWJsZVZhbHVlTWF0cml4LmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5tdWx0aXBvcHVsYXRpb24vaWNvbnMvZnVsbC9jdG9vbDE2L0NyZWF0ZU11bHRpUG9wdWxhdGlvblNJUkRpc2Vhc2VNb2RlbF9pbW11bml0eUxvc3NSYXRlX0RvdWJsZVZhbHVlTGlzdC5naWYgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5tdWx0aXBvcHVsYXRpb24vaWNvbnMvZnVsbC9jdG9vbDE2L0NyZWF0ZU11bHRpUG9wdWxhdGlvblNJUkRpc2Vhc2VNb2RlbF9pbW11bml0eUxvc3NSYXRlX0RvdWJsZVZhbHVlTGlzdC5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2VlZTUyYQotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLm11bHRpcG9wdWxhdGlvbi9pY29ucy9mdWxsL2N0b29sMTYvQ3JlYXRlTXVsdGlQb3B1bGF0aW9uU0lSRGlzZWFzZU1vZGVsX2ltbXVuaXR5TG9zc1JhdGVfRG91YmxlVmFsdWVMaXN0LmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5tdWx0aXBvcHVsYXRpb24vaWNvbnMvZnVsbC9jdG9vbDE2L0NyZWF0ZU11bHRpUG9wdWxhdGlvblNlYXNvbmFsRGlzZWFzZU1vZGVsX21vZHVsYXRpb25Qb2ludHNfRG91YmxlVmFsdWVNYXRyaXguZ2lmIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMubXVsdGlwb3B1bGF0aW9uL2ljb25zL2Z1bGwvY3Rvb2wxNi9DcmVhdGVNdWx0aVBvcHVsYXRpb25TZWFzb25hbERpc2Vhc2VNb2RlbF9tb2R1bGF0aW9uUG9pbnRzX0RvdWJsZVZhbHVlTWF0cml4LmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZjQ1Y2FiCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMubXVsdGlwb3B1bGF0aW9uL2ljb25zL2Z1bGwvY3Rvb2wxNi9DcmVhdGVNdWx0aVBvcHVsYXRpb25TZWFzb25hbERpc2Vhc2VNb2RlbF9tb2R1bGF0aW9uUG9pbnRzX0RvdWJsZVZhbHVlTWF0cml4LmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5tdWx0aXBvcHVsYXRpb24vaWNvbnMvZnVsbC9jdXN0b20xNi9kaXNlYXNlLmdpZiBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLm11bHRpcG9wdWxhdGlvbi9pY29ucy9mdWxsL2N1c3RvbTE2L2Rpc2Vhc2UuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRlNDA0ZTQKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5tdWx0aXBvcHVsYXRpb24vaWNvbnMvZnVsbC9jdXN0b20xNi9kaXNlYXNlLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5tdWx0aXBvcHVsYXRpb24vaWNvbnMvZnVsbC9jdXN0b20xNi9tZGlzZWFzZS5naWYgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5tdWx0aXBvcHVsYXRpb24vaWNvbnMvZnVsbC9jdXN0b20xNi9tZGlzZWFzZS5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDQ2YmJjYgotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLm11bHRpcG9wdWxhdGlvbi9pY29ucy9mdWxsL2N1c3RvbTE2L21kaXNlYXNlLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5tdWx0aXBvcHVsYXRpb24vaWNvbnMvZnVsbC9vYmoxNi9NdWx0aVBvcHVsYXRpb25TRUlSRGlzZWFzZU1vZGVsLmdpZiBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLm11bHRpcG9wdWxhdGlvbi9pY29ucy9mdWxsL29iajE2L011bHRpUG9wdWxhdGlvblNFSVJEaXNlYXNlTW9kZWwuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJlMjI0NjMKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5tdWx0aXBvcHVsYXRpb24vaWNvbnMvZnVsbC9vYmoxNi9NdWx0aVBvcHVsYXRpb25TRUlSRGlzZWFzZU1vZGVsLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5tdWx0aXBvcHVsYXRpb24vaWNvbnMvZnVsbC9vYmoxNi9NdWx0aVBvcHVsYXRpb25TSURpc2Vhc2VNb2RlbC5naWYgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5tdWx0aXBvcHVsYXRpb24vaWNvbnMvZnVsbC9vYmoxNi9NdWx0aVBvcHVsYXRpb25TSURpc2Vhc2VNb2RlbC5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjM2NDNkYQotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLm11bHRpcG9wdWxhdGlvbi9pY29ucy9mdWxsL29iajE2L011bHRpUG9wdWxhdGlvblNJRGlzZWFzZU1vZGVsLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5tdWx0aXBvcHVsYXRpb24vaWNvbnMvZnVsbC9vYmoxNi9NdWx0aVBvcHVsYXRpb25TSVJEaXNlYXNlTW9kZWwuZ2lmIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMubXVsdGlwb3B1bGF0aW9uL2ljb25zL2Z1bGwvb2JqMTYvTXVsdGlQb3B1bGF0aW9uU0lSRGlzZWFzZU1vZGVsLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MzY1OTYwCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMubXVsdGlwb3B1bGF0aW9uL2ljb25zL2Z1bGwvb2JqMTYvTXVsdGlQb3B1bGF0aW9uU0lSRGlzZWFzZU1vZGVsLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5tdWx0aXBvcHVsYXRpb24vaWNvbnMvZnVsbC9vYmoxNi9NdWx0aVBvcHVsYXRpb25TZWFzb25hbERpc2Vhc2VNb2RlbC5naWYgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5tdWx0aXBvcHVsYXRpb24vaWNvbnMvZnVsbC9vYmoxNi9NdWx0aVBvcHVsYXRpb25TZWFzb25hbERpc2Vhc2VNb2RlbC5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTM0NTUxYgotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLm11bHRpcG9wdWxhdGlvbi9pY29ucy9mdWxsL29iajE2L011bHRpUG9wdWxhdGlvblNlYXNvbmFsRGlzZWFzZU1vZGVsLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5tdWx0aXBvcHVsYXRpb24vaWNvbnMvZnVsbC9vYmoxNi9NdWx0aXBvcHVsYXRpb25Nb2RlbEZpbGUuZ2lmIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMubXVsdGlwb3B1bGF0aW9uL2ljb25zL2Z1bGwvb2JqMTYvTXVsdGlwb3B1bGF0aW9uTW9kZWxGaWxlLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZGU1MjIwCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMubXVsdGlwb3B1bGF0aW9uL2ljb25zL2Z1bGwvb2JqMTYvTXVsdGlwb3B1bGF0aW9uTW9kZWxGaWxlLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5tdWx0aXBvcHVsYXRpb24vaWNvbnMvZnVsbC93aXpiYW4vTmV3TXVsdGlwb3B1bGF0aW9uLmdpZiBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLm11bHRpcG9wdWxhdGlvbi9pY29ucy9mdWxsL3dpemJhbi9OZXdNdWx0aXBvcHVsYXRpb24uZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhkMzI0OTcKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5tdWx0aXBvcHVsYXRpb24vaWNvbnMvZnVsbC93aXpiYW4vTmV3TXVsdGlwb3B1bGF0aW9uLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5tdWx0aXBvcHVsYXRpb24vbW9kZWwvbXVsdGlwb3B1bGF0aW9uLmVjb3JlIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMubXVsdGlwb3B1bGF0aW9uL21vZGVsL211bHRpcG9wdWxhdGlvbi5lY29yZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMzM0NTQ0Ci0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMubXVsdGlwb3B1bGF0aW9uL21vZGVsL211bHRpcG9wdWxhdGlvbi5lY29yZQpAQCAtMCwwICsxLDM4IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/Pg0KKzxlY29yZTpFUGFja2FnZSB4bWk6dmVyc2lvbj0iMi4wIg0KKyAgICB4bWxuczp4bWk9Imh0dHA6Ly93d3cub21nLm9yZy9YTUkiIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiDQorICAgIHhtbG5zOmVjb3JlPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2VtZi8yMDAyL0Vjb3JlIiBuYW1lPSJtdWx0aXBvcHVsYXRpb24iDQorICAgIG5zVVJJPSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9tdWx0aXBvcHVsYXRpb24uZWNvcmUiIG5zUHJlZml4PSJvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMubXVsdGlwb3B1bGF0aW9uIj4NCisgIDxlQ2xhc3NpZmllcnMgeHNpOnR5cGU9ImVjb3JlOkVDbGFzcyIgbmFtZT0iTXVsdGlQb3B1bGF0aW9uU0lEaXNlYXNlTW9kZWwiIGVTdXBlclR5cGVzPSIuLi8uLi9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMvbW9kZWwvc3RhbmRhcmQuZWNvcmUjLy9TdGFuZGFyZERpc2Vhc2VNb2RlbCI+DQorICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFUmVmZXJlbmNlIiBuYW1lPSJwb3B1bGF0aW9uR3JvdXBzIiBsb3dlckJvdW5kPSIxIg0KKyAgICAgICAgZVR5cGU9ImVjb3JlOkVDbGFzcyAuLi8uLi9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvbW9kZWwvY29tbW9uLmVjb3JlIy8vU3RyaW5nVmFsdWVMaXN0Ig0KKyAgICAgICAgY29udGFpbm1lbnQ9InRydWUiLz4NCisgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVSZWZlcmVuY2UiIG5hbWU9InRyYW5zbWlzc2lvblJhdGUiIGxvd2VyQm91bmQ9IjEiDQorICAgICAgICBlVHlwZT0iZWNvcmU6RUNsYXNzIC4uLy4uL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9tb2RlbC9jb21tb24uZWNvcmUjLy9Eb3VibGVWYWx1ZU1hdHJpeCINCisgICAgICAgIGNvbnRhaW5tZW50PSJ0cnVlIi8+DQorICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFUmVmZXJlbmNlIiBuYW1lPSJyZWNvdmVyeVJhdGUiIGxvd2VyQm91bmQ9IjEiDQorICAgICAgICBlVHlwZT0iZWNvcmU6RUNsYXNzIC4uLy4uL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9tb2RlbC9jb21tb24uZWNvcmUjLy9Eb3VibGVWYWx1ZUxpc3QiDQorICAgICAgICBjb250YWlubWVudD0idHJ1ZSIvPg0KKyAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RVJlZmVyZW5jZSIgbmFtZT0iaW5mZWN0aW91c01vcnRhbGl0eVJhdGUiDQorICAgICAgICBsb3dlckJvdW5kPSIxIiBlVHlwZT0iZWNvcmU6RUNsYXNzIC4uLy4uL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9tb2RlbC9jb21tb24uZWNvcmUjLy9Eb3VibGVWYWx1ZUxpc3QiDQorICAgICAgICBjb250YWlubWVudD0idHJ1ZSIvPg0KKyAgPC9lQ2xhc3NpZmllcnM+DQorICA8ZUNsYXNzaWZpZXJzIHhzaTp0eXBlPSJlY29yZTpFQ2xhc3MiIG5hbWU9Ik11bHRpUG9wdWxhdGlvblNJUkRpc2Vhc2VNb2RlbCIgZVN1cGVyVHlwZXM9IiMvL011bHRpUG9wdWxhdGlvblNJRGlzZWFzZU1vZGVsIj4NCisgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVSZWZlcmVuY2UiIG5hbWU9ImltbXVuaXR5TG9zc1JhdGUiIGxvd2VyQm91bmQ9IjEiDQorICAgICAgICBlVHlwZT0iZWNvcmU6RUNsYXNzIC4uLy4uL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9tb2RlbC9jb21tb24uZWNvcmUjLy9Eb3VibGVWYWx1ZUxpc3QiDQorICAgICAgICBjb250YWlubWVudD0idHJ1ZSIvPg0KKyAgPC9lQ2xhc3NpZmllcnM+DQorICA8ZUNsYXNzaWZpZXJzIHhzaTp0eXBlPSJlY29yZTpFQ2xhc3MiIG5hbWU9Ik11bHRpUG9wdWxhdGlvblNFSVJEaXNlYXNlTW9kZWwiIGVTdXBlclR5cGVzPSIjLy9NdWx0aVBvcHVsYXRpb25TSVJEaXNlYXNlTW9kZWwiPg0KKyAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RVJlZmVyZW5jZSIgbmFtZT0iaW5jdWJhdGlvblJhdGUiIGxvd2VyQm91bmQ9IjEiDQorICAgICAgICBlVHlwZT0iZWNvcmU6RUNsYXNzIC4uLy4uL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9tb2RlbC9jb21tb24uZWNvcmUjLy9Eb3VibGVWYWx1ZUxpc3QiDQorICAgICAgICBjb250YWlubWVudD0idHJ1ZSIvPg0KKyAgPC9lQ2xhc3NpZmllcnM+DQorICA8ZUNsYXNzaWZpZXJzIHhzaTp0eXBlPSJlY29yZTpFQ2xhc3MiIG5hbWU9Ik11bHRpUG9wdWxhdGlvblNlYXNvbmFsRGlzZWFzZU1vZGVsIg0KKyAgICAgIGVTdXBlclR5cGVzPSIjLy9NdWx0aVBvcHVsYXRpb25TRUlSRGlzZWFzZU1vZGVsIj4NCisgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVSZWZlcmVuY2UiIG5hbWU9Im1vZHVsYXRpb25Qb2ludHMiIGxvd2VyQm91bmQ9IjEiDQorICAgICAgICBlVHlwZT0iZWNvcmU6RUNsYXNzIC4uLy4uL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9tb2RlbC9jb21tb24uZWNvcmUjLy9Eb3VibGVWYWx1ZU1hdHJpeCINCisgICAgICAgIGNvbnRhaW5tZW50PSJ0cnVlIi8+DQorICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJ1c2VTcGxpbmVJbnRlcnBvbGF0aW9uIg0KKyAgICAgICAgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLmVtZi5lY29yZS9tb2RlbC9FY29yZS5lY29yZSMvL0VCb29sZWFuIi8+DQorICA8L2VDbGFzc2lmaWVycz4NCis8L2Vjb3JlOkVQYWNrYWdlPg0KZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLm11bHRpcG9wdWxhdGlvbi9tb2RlbC9tdWx0aXBvcHVsYXRpb24uZ2VubW9kZWwgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5tdWx0aXBvcHVsYXRpb24vbW9kZWwvbXVsdGlwb3B1bGF0aW9uLmdlbm1vZGVsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMwZmI1YWEKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5tdWx0aXBvcHVsYXRpb24vbW9kZWwvbXVsdGlwb3B1bGF0aW9uLmdlbm1vZGVsCkBAIC0wLDAgKzEsMjkgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8Z2VubW9kZWw6R2VuTW9kZWwgeG1pOnZlcnNpb249IjIuMCIKKyAgICB4bWxuczp4bWk9Imh0dHA6Ly93d3cub21nLm9yZy9YTUkiIHhtbG5zOmVjb3JlPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2VtZi8yMDAyL0Vjb3JlIgorICAgIHhtbG5zOmdlbm1vZGVsPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2VtZi8yMDAyL0dlbk1vZGVsIiBtb2RlbERpcmVjdG9yeT0iL29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5tdWx0aXBvcHVsYXRpb24vc3JjIgorICAgIGVkaXREaXJlY3Rvcnk9Ii9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMubXVsdGlwb3B1bGF0aW9uL3NyYyIgZWRpdG9yRGlyZWN0b3J5PSIvb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzLm11bHRpcG9wdWxhdGlvbi9zcmMiCisgICAgbW9kZWxQbHVnaW5JRD0ib3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLm11bHRpcG9wdWxhdGlvbiIgbW9kZWxOYW1lPSJNdWx0aXBvcHVsYXRpb24iCisgICAgdGVzdHNEaXJlY3Rvcnk9Ii9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRpc2Vhc2Vtb2RlbHMubXVsdGlwb3B1bGF0aW9uL3NyYyIgaW1wb3J0ZXJJRD0ib3JnLmVjbGlwc2UuZW1mLmltcG9ydGVyLmVjb3JlIgorICAgIGNvbXBsaWFuY2VMZXZlbD0iNi4wIiBjb3B5cmlnaHRGaWVsZHM9ImZhbHNlIiB1c2VkR2VuUGFja2FnZXM9Ii4uLy4uL29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy9tb2RlbC9kaXNlYXNlbW9kZWxzLmdlbm1vZGVsIy8vc3RhbmRhcmQgLi4vLi4vb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL21vZGVsL2NvcmUuZ2VubW9kZWwjLy9jb21tb24gLi4vLi4vb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL21vZGVsL2NvcmUuZ2VubW9kZWwjLy9tb2RlbCBwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLmVtZi5lY29yZS9tb2RlbC9FY29yZS5nZW5tb2RlbCMvL2Vjb3JlIC4uLy4uL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9tb2RlbC9jb3JlLmdlbm1vZGVsIy8vZ3JhcGggLi4vLi4vb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL21vZGVsL2NvcmUuZ2VubW9kZWwjLy9tb2RpZmllciAuLi8uLi9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvbW9kZWwvY29yZS5nZW5tb2RlbCMvL3NjZW5hcmlvIC4uLy4uL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9tb2RlbC9jb3JlLmdlbm1vZGVsIy8vc2VxdWVuY2VyIC4uLy4uL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9tb2RlbC9jb3JlLmdlbm1vZGVsIy8vc29sdmVyIC4uLy4uL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvbW9kZWwvZGVmaW5pdGlvbnMuZ2VubW9kZWwjLy9sYWJlbHMgLi4vLi4vb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzL21vZGVsL3N0YW5kYXJkLmdlbm1vZGVsIy8vc3RhbmRhcmQiPgorICA8Zm9yZWlnbk1vZGVsPm11bHRpcG9wdWxhdGlvbi5lY29yZTwvZm9yZWlnbk1vZGVsPgorICA8Z2VuUGFja2FnZXMgcHJlZml4PSJNdWx0aXBvcHVsYXRpb24iIGJhc2VQYWNrYWdlPSJvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMiCisgICAgICBkaXNwb3NhYmxlUHJvdmlkZXJGYWN0b3J5PSJ0cnVlIiBlY29yZVBhY2thZ2U9Im11bHRpcG9wdWxhdGlvbi5lY29yZSMvIj4KKyAgICA8Z2VuQ2xhc3NlcyBlY29yZUNsYXNzPSJtdWx0aXBvcHVsYXRpb24uZWNvcmUjLy9NdWx0aVBvcHVsYXRpb25TSURpc2Vhc2VNb2RlbCI+CisgICAgICA8Z2VuRmVhdHVyZXMgY2hpbGRyZW49InRydWUiIGNyZWF0ZUNoaWxkPSJ0cnVlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVSZWZlcmVuY2UgbXVsdGlwb3B1bGF0aW9uLmVjb3JlIy8vTXVsdGlQb3B1bGF0aW9uU0lEaXNlYXNlTW9kZWwvcG9wdWxhdGlvbkdyb3VwcyIvPgorICAgICAgPGdlbkZlYXR1cmVzIGNoaWxkcmVuPSJ0cnVlIiBjcmVhdGVDaGlsZD0idHJ1ZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFUmVmZXJlbmNlIG11bHRpcG9wdWxhdGlvbi5lY29yZSMvL011bHRpUG9wdWxhdGlvblNJRGlzZWFzZU1vZGVsL3RyYW5zbWlzc2lvblJhdGUiLz4KKyAgICAgIDxnZW5GZWF0dXJlcyBjaGlsZHJlbj0idHJ1ZSIgY3JlYXRlQ2hpbGQ9InRydWUiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RVJlZmVyZW5jZSBtdWx0aXBvcHVsYXRpb24uZWNvcmUjLy9NdWx0aVBvcHVsYXRpb25TSURpc2Vhc2VNb2RlbC9yZWNvdmVyeVJhdGUiLz4KKyAgICAgIDxnZW5GZWF0dXJlcyBjaGlsZHJlbj0idHJ1ZSIgY3JlYXRlQ2hpbGQ9InRydWUiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RVJlZmVyZW5jZSBtdWx0aXBvcHVsYXRpb24uZWNvcmUjLy9NdWx0aVBvcHVsYXRpb25TSURpc2Vhc2VNb2RlbC9pbmZlY3Rpb3VzTW9ydGFsaXR5UmF0ZSIvPgorICAgICAgPGdlbkZlYXR1cmVzIHByb3BlcnR5PSJOb25lIiBjcmVhdGVDaGlsZD0iZmFsc2UiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RUF0dHJpYnV0ZSBtdWx0aXBvcHVsYXRpb24uZWNvcmUjLy9NdWx0aVBvcHVsYXRpb25TSURpc2Vhc2VNb2RlbC9waHlzaWNhbGx5QWRqYWNlbnRJbmZlY3Rpb3VzUHJvcG9ydGlvbiIvPgorICAgIDwvZ2VuQ2xhc3Nlcz4KKyAgICA8Z2VuQ2xhc3NlcyBlY29yZUNsYXNzPSJtdWx0aXBvcHVsYXRpb24uZWNvcmUjLy9NdWx0aVBvcHVsYXRpb25TSVJEaXNlYXNlTW9kZWwiPgorICAgICAgPGdlbkZlYXR1cmVzIGNoaWxkcmVuPSJ0cnVlIiBjcmVhdGVDaGlsZD0idHJ1ZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFUmVmZXJlbmNlIG11bHRpcG9wdWxhdGlvbi5lY29yZSMvL011bHRpUG9wdWxhdGlvblNJUkRpc2Vhc2VNb2RlbC9pbW11bml0eUxvc3NSYXRlIi8+CisgICAgPC9nZW5DbGFzc2VzPgorICAgIDxnZW5DbGFzc2VzIGVjb3JlQ2xhc3M9Im11bHRpcG9wdWxhdGlvbi5lY29yZSMvL011bHRpUG9wdWxhdGlvblNFSVJEaXNlYXNlTW9kZWwiPgorICAgICAgPGdlbkZlYXR1cmVzIGNoaWxkcmVuPSJ0cnVlIiBjcmVhdGVDaGlsZD0idHJ1ZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFUmVmZXJlbmNlIG11bHRpcG9wdWxhdGlvbi5lY29yZSMvL011bHRpUG9wdWxhdGlvblNFSVJEaXNlYXNlTW9kZWwvaW5jdWJhdGlvblJhdGUiLz4KKyAgICA8L2dlbkNsYXNzZXM+CisgICAgPGdlbkNsYXNzZXMgZWNvcmVDbGFzcz0ibXVsdGlwb3B1bGF0aW9uLmVjb3JlIy8vTXVsdGlQb3B1bGF0aW9uU2Vhc29uYWxEaXNlYXNlTW9kZWwiPgorICAgICAgPGdlbkZlYXR1cmVzIGNoaWxkcmVuPSJ0cnVlIiBjcmVhdGVDaGlsZD0idHJ1ZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFUmVmZXJlbmNlIG11bHRpcG9wdWxhdGlvbi5lY29yZSMvL011bHRpUG9wdWxhdGlvblNlYXNvbmFsRGlzZWFzZU1vZGVsL21vZHVsYXRpb25Qb2ludHMiLz4KKyAgICA8L2dlbkNsYXNzZXM+CisgIDwvZ2VuUGFja2FnZXM+Cis8L2dlbm1vZGVsOkdlbk1vZGVsPgpkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMubXVsdGlwb3B1bGF0aW9uL3BsdWdpbi5wcm9wZXJ0aWVzIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMubXVsdGlwb3B1bGF0aW9uL3BsdWdpbi5wcm9wZXJ0aWVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYxZGVhYjcKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5tdWx0aXBvcHVsYXRpb24vcGx1Z2luLnByb3BlcnRpZXMKQEAgLTAsMCArMSw5MyBAQAorCisjIDxjb3B5cmlnaHQ+CisjIDwvY29weXJpZ2h0PgorIworIyAkSWQkCisKK3BsdWdpbk5hbWUgPSBNdWx0aXBvcHVsYXRpb24gTW9kZWwKK3Byb3ZpZGVyTmFtZSA9IEVjbGlwc2Uub3JnCitkY19jcmVhdG9yX2VkbHVuZCA9IFN0ZWZhbiBFZGx1bmQKK2RjX2NyZWF0b3Jfa2F1Zm1hbiA9IEphbWVzIEthdWZtYW4KK2RjX2NyZWF0b3JfY3Rob2VucyA9IENocmlzdGlhbiBUaG9lbnMKK2RjX2lkZW50aWVyPVNURU0gcGxheWJhY2sgZGlzZWFzZSBtb2RlbAorZGNfcHVibGlzaGVyID0gVGhlIEVjbGlwc2UgRm91bmRhdGlvbgorZGNfbGljZW5zZSA9IEVjbGlwc2UgUHVibGljIExpY2Vuc2UgKEVQTCkKK2RjX1NPVVJDRSA9IGh0dHA6Ly93aWtpLmVjbGlwc2Uub3JnL0ludHJvZHVjdGlvbl90b19Db21wYXJ0bWVudF9Nb2RlbHMgICAoYW5kIHJlZmVyZW5jZXMgdGhlcmUtaW4pCitkY190aXRsZV9NUF9TSSA9IE11bHRpUG9wdWxhdGlvbiBTSSBEaXNlYXNlIE1vZGVsCitkY19kZXNjcl9NUF9TSSA9IEEgbXVsdGktcG9wdWxhdGlvbiBTSSBkaXNlYXNlIG1vZGVsCitkY190aXRsZV9NUF9TSVIgPSBNdWx0aVBvcHVsYXRpb24gU0lSIERpc2Vhc2UgTW9kZWwKK2RjX2Rlc2NyX01QX1NJUiA9IEEgbXVsdGktcG9wdWxhdGlvbiBTSVIgZGlzZWFzZSBtb2RlbAorZGNfdGl0bGVfTVBfU0VJUiA9IE11bHRpUG9wdWxhdGlvbiBTRUlSIERpc2Vhc2UgTW9kZWwKK2RjX2Rlc2NyX01QX1NFSVIgPSBBIG11bHRpLXBvcHVsYXRpb24gU0VJUiBkaXNlYXNlIG1vZGVsCitkY190aXRsZV9NUF9TRUFTT05BTCA9IE11bHRpUG9wdWxhdGlvbiBTZWFzb25hbCBEaXNlYXNlIE1vZGVsCitkY19kZXNjcl9NUF9TRUFTT05BTCA9IEEgbXVsdGktcG9wdWxhdGlvbiBzZWFzb25hbCBkaXNlYXNlIG1vZGVsCisKK19VSV9DcmVhdGVDaGlsZF90ZXh0ID0gezB9CitfVUlfQ3JlYXRlQ2hpbGRfdGV4dDIgPSB7MX0gezB9CitfVUlfQ3JlYXRlQ2hpbGRfdGV4dDMgPSB7MX0KK19VSV9DcmVhdGVDaGlsZF90b29sdGlwID0gQ3JlYXRlIE5ldyB7MH0gVW5kZXIgezF9IEZlYXR1cmUKK19VSV9DcmVhdGVDaGlsZF9kZXNjcmlwdGlvbiA9IENyZWF0ZSBhIG5ldyBjaGlsZCBvZiB0eXBlIHswfSBmb3IgdGhlIHsxfSBmZWF0dXJlIG9mIHRoZSBzZWxlY3RlZCB7Mn0uCitfVUlfQ3JlYXRlU2libGluZ19kZXNjcmlwdGlvbiA9IENyZWF0ZSBhIG5ldyBzaWJsaW5nIG9mIHR5cGUgezB9IGZvciB0aGUgc2VsZWN0ZWQgezJ9LCB1bmRlciB0aGUgezF9IGZlYXR1cmUgb2YgdGhlaXIgcGFyZW50LgorX1VJX1Byb3BlcnR5RGVzY3JpcHRvcl9kZXNjcmlwdGlvbiA9IFRoZSB7MH0gb2YgdGhlIHsxfQorX1VJX011bHRpUG9wdWxhdGlvblNJRGlzZWFzZU1vZGVsX3R5cGUgPSBNdWx0aSBQb3B1bGF0aW9uIFNJIERpc2Vhc2UgTW9kZWwKK19VSV9Vbmtub3duX3R5cGUgPSBPYmplY3QKK19VSV9Vbmtub3duX2RhdGF0eXBlPSBWYWx1ZQorX1VJX1Vua25vd25fZmVhdHVyZSA9IFVuc3BlY2lmaWVkCitfVUlfTXVsdGlwb3B1bGF0aW9uRWRpdG9yX21lbnUgPSAmTXVsdGlwb3B1bGF0aW9uIEVkaXRvcgorX1VJX0NyZWF0ZUNoaWxkX21lbnVfaXRlbSA9ICZOZXcgQ2hpbGQKK19VSV9DcmVhdGVTaWJsaW5nX21lbnVfaXRlbSA9IE4mZXcgU2libGluZworX1VJX1Nob3dQcm9wZXJ0aWVzVmlld19tZW51X2l0ZW0gPSBTaG93ICZQcm9wZXJ0aWVzIFZpZXcKK19VSV9SZWZyZXNoVmlld2VyX21lbnVfaXRlbSA9ICZSZWZyZXNoCitfVUlfU2VsZWN0aW9uUGFnZV9sYWJlbCA9IFNlbGVjdGlvbgorX1VJX1BhcmVudFBhZ2VfbGFiZWwgPSBQYXJlbnQKK19VSV9MaXN0UGFnZV9sYWJlbCA9IExpc3QKK19VSV9UcmVlUGFnZV9sYWJlbCA9IFRyZWUKK19VSV9UYWJsZVBhZ2VfbGFiZWwgPSBUYWJsZQorX1VJX1RyZWVXaXRoQ29sdW1uc1BhZ2VfbGFiZWwgPSBUcmVlIHdpdGggQ29sdW1ucworX1VJX09iamVjdENvbHVtbl9sYWJlbCA9IE9iamVjdAorX1VJX1NlbGZDb2x1bW5fbGFiZWwgPSBTZWxmCitfVUlfTm9PYmplY3RTZWxlY3RlZCA9IFNlbGVjdGVkIE5vdGhpbmcKK19VSV9TaW5nbGVPYmplY3RTZWxlY3RlZCA9IFNlbGVjdGVkIE9iamVjdDogezB9CitfVUlfTXVsdGlPYmplY3RTZWxlY3RlZCA9IFNlbGVjdGVkIHswfSBPYmplY3RzCitfVUlfT3BlbkVkaXRvckVycm9yX2xhYmVsID0gT3BlbiBFZGl0b3IKK19VSV9XaXphcmRfY2F0ZWdvcnkgPSBFeGFtcGxlIEVNRiBNb2RlbCBDcmVhdGlvbiBXaXphcmRzCitfVUlfQ3JlYXRlTW9kZWxFcnJvcl9tZXNzYWdlID0gUHJvYmxlbXMgZW5jb3VudGVyZWQgaW4gZmlsZSAiezB9IgorX1VJX011bHRpcG9wdWxhdGlvbk1vZGVsV2l6YXJkX2xhYmVsID0gTXVsdGlwb3B1bGF0aW9uIE1vZGVsCitfVUlfTXVsdGlwb3B1bGF0aW9uTW9kZWxXaXphcmRfZGVzY3JpcHRpb24gPSBDcmVhdGUgYSBuZXcgTXVsdGlwb3B1bGF0aW9uIG1vZGVsCitfVUlfTXVsdGlwb3B1bGF0aW9uRWRpdG9yX2xhYmVsID0gTXVsdGlwb3B1bGF0aW9uIE1vZGVsIEVkaXRvcgorX1VJX011bHRpcG9wdWxhdGlvbkVkaXRvckZpbGVuYW1lRGVmYXVsdEJhc2UgPSBNeQorX1VJX011bHRpcG9wdWxhdGlvbkVkaXRvckZpbGVuYW1lRXh0ZW5zaW9ucyA9IG11bHRpcG9wdWxhdGlvbgorX1VJX1dpemFyZF9sYWJlbCA9IE5ldworX1dBUk5fRmlsZW5hbWVFeHRlbnNpb24gPSBUaGUgZmlsZSBuYW1lIG11c3QgZW5kIGluICcnLnswfScnCitfV0FSTl9GaWxlbmFtZUV4dGVuc2lvbnMgPSBUaGUgZmlsZSBuYW1lIG11c3QgaGF2ZSBvbmUgb2YgdGhlIGZvbGxvd2luZyBleHRlbnNpb25zOiB7MH0KK19VSV9Nb2RlbE9iamVjdCA9ICZNb2RlbCBPYmplY3QKK19VSV9YTUxFbmNvZGluZyA9ICZYTUwgRW5jb2RpbmcKK19VSV9YTUxFbmNvZGluZ0Nob2ljZXMgPSBVVEYtOCBBU0NJSSBVVEYtMTYgVVRGLTE2QkUgVVRGLTE2TEUgSVNPLTg4NTktMQorX1VJX1dpemFyZF9pbml0aWFsX29iamVjdF9kZXNjcmlwdGlvbiA9IFNlbGVjdCBhIG1vZGVsIG9iamVjdCB0byBjcmVhdGUKK19VSV9GaWxlQ29uZmxpY3RfbGFiZWwgPSBGaWxlIENvbmZsaWN0CitfV0FSTl9GaWxlQ29uZmxpY3QgPSBUaGVyZSBhcmUgdW5zYXZlZCBjaGFuZ2VzIHRoYXQgY29uZmxpY3Qgd2l0aCBjaGFuZ2VzIG1hZGUgb3V0c2lkZSB0aGUgZWRpdG9yLiAgRG8geW91IHdpc2ggdG8gZGlzY2FyZCB0aGlzIGVkaXRvcidzIGNoYW5nZXM/CitfVUlfTXVsdGlQb3B1bGF0aW9uU0lEaXNlYXNlTW9kZWxfdHJhbnNtaXNzaW9uUmF0ZV9mZWF0dXJlID0gVHJhbnNtaXNzaW9uIFJhdGUKK19VSV9NdWx0aVBvcHVsYXRpb25TSURpc2Vhc2VNb2RlbF9wb3B1bGF0aW9uR3JvdXBzX2ZlYXR1cmUgPSBQb3B1bGF0aW9uIEdyb3VwcworX1VJX011bHRpUG9wdWxhdGlvblNJRGlzZWFzZU1vZGVsX3JlY292ZXJ5UmF0ZV9mZWF0dXJlID0gUmVjb3ZlcnkgUmF0ZQorX1VJX011bHRpUG9wdWxhdGlvblNJRGlzZWFzZU1vZGVsX2luZmVjdGlvdXNNb3J0YWxpdHlSYXRlX2ZlYXR1cmUgPSBJbmZlY3Rpb3VzIE1vcnRhbGl0eSBSYXRlCitfVUlfTXVsdGlQb3B1bGF0aW9uU0lEaXNlYXNlTW9kZWxfcGh5c2ljYWxseUFkamFjZW50SW5mZWN0aW91c1Byb3BvcnRpb25fZmVhdHVyZSA9IFBoeXNpY2FsbHkgQWRqYWNlbnQgSW5mZWN0aW91cyBQcm9wb3J0aW9uCitfVUlfTXVsdGlQb3B1bGF0aW9uU0lEaXNlYXNlTW9kZWxfcm9hZE5ldHdvcmtJbmZlY3Rpb3VzUHJvcG9ydGlvbl9mZWF0dXJlID0gUm9hZCBOZXR3b3JrIEluZmVjdGlvdXMgUHJvcG9ydGlvbgorX1VJX011bHRpUG9wdWxhdGlvblNJUkRpc2Vhc2VNb2RlbF90eXBlID0gTXVsdGkgUG9wdWxhdGlvbiBTSVIgRGlzZWFzZSBNb2RlbAorX1VJX011bHRpUG9wdWxhdGlvblNFSVJEaXNlYXNlTW9kZWxfdHlwZSA9IE11bHRpIFBvcHVsYXRpb24gU0VJUiBEaXNlYXNlIE1vZGVsCitfVUlfTXVsdGlQb3B1bGF0aW9uU0lSRGlzZWFzZU1vZGVsX2ltbXVuaXR5TG9zc1JhdGVfZmVhdHVyZSA9IEltbXVuaXR5IExvc3MgUmF0ZQorX1VJX011bHRpUG9wdWxhdGlvblNFSVJEaXNlYXNlTW9kZWxfaW5jdWJhdGlvblJhdGVfZmVhdHVyZSA9IEluY3ViYXRpb24gUmF0ZQorX1VJX011bHRpUG9wdWxhdGlvblNJRGlzZWFzZU1vZGVsX2NoYXJhY3RlcmlzdGljTWl4aW5nRGlzdGFuY2VfZmVhdHVyZSA9IENoYXJhY3RlcmlzdGljIE1peGluZyBEaXN0YW5jZQorX1VJX011bHRpUG9wdWxhdGlvblNlYXNvbmFsRGlzZWFzZU1vZGVsX3R5cGUgPSBNdWx0aSBQb3B1bGF0aW9uIFNlYXNvbmFsIERpc2Vhc2UgTW9kZWwKK19VSV9Qb2x5bm9taWFsU3BsaW5lRnVuY3Rpb25fdHlwZSA9IFBvbHlub21pYWwgU3BsaW5lIEZ1bmN0aW9uCitfVUlfU3BsaW5lX3R5cGUgPSBTcGxpbmUKK19VSV9NdWx0aVBvcHVsYXRpb25TZWFzb25hbERpc2Vhc2VNb2RlbF9zcGxpbmVfZmVhdHVyZSA9IFNwbGluZQorX1VJX1BvaW50X3R5cGUgPSBQb2ludAorX1VJX011bHRpUG9wdWxhdGlvblNlYXNvbmFsRGlzZWFzZU1vZGVsX3BvaW50c19mZWF0dXJlID0gUG9pbnRzCitfVUlfUG9pbnRfeF9mZWF0dXJlID0gWAorX1VJX1BvaW50X3lfZmVhdHVyZSA9IFkKK19VSV9NdWx0aVBvcHVsYXRpb25TZWFzb25hbERpc2Vhc2VNb2RlbF9tb2R1bGF0aW9uUG9pbnRzX2ZlYXR1cmUgPSBNb2R1bGF0aW9uIFBvaW50cworX1VJX011bHRpUG9wdWxhdGlvblNlYXNvbmFsRGlzZWFzZU1vZGVsX251bWJlck9mTW9kdWxhdGlvblBvaW50c19mZWF0dXJlID0gTnVtYmVyIE9mIE1vZHVsYXRpb24gUG9pbnRzCitfVUlfTXVsdGlQb3B1bGF0aW9uU2Vhc29uYWxEaXNlYXNlTW9kZWxfaW50ZXJwb2xhdGlvblR5cGVfZmVhdHVyZSA9IEludGVycG9sYXRpb24gVHlwZQorX1VJX0ludGVycG9sYXRpb25UeXBlX0xJTkVBUl9JTlRFUlBPTEFUSU9OX2xpdGVyYWwgPSBMSU5FQVJfSU5URVJQT0xBVElPTgorX1VJX0ludGVycG9sYXRpb25UeXBlX1NQTElORV9JTlRFUlBPTEFUSU9OX2xpdGVyYWwgPSBTUExJTkVfSU5URVJQT0xBVElPTgorX1VJX011bHRpUG9wdWxhdGlvblNlYXNvbmFsRGlzZWFzZU1vZGVsX3VzZVNwbGluZUludGVycG9sYXRpb25fZmVhdHVyZSA9IFVzZSBTcGxpbmUgSW50ZXJwb2xhdGlvbgpkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMubXVsdGlwb3B1bGF0aW9uL3BsdWdpbi54bWwgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5tdWx0aXBvcHVsYXRpb24vcGx1Z2luLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZGFmZGNhCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMubXVsdGlwb3B1bGF0aW9uL3BsdWdpbi54bWwKQEAgLTAsMCArMSw5MSBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzw/ZWNsaXBzZSB2ZXJzaW9uPSIzLjQiPz4KKzxwbHVnaW4+CisgICA8ZXh0ZW5zaW9uCisgICAgICAgICBwb2ludD0ib3JnLmVjbGlwc2UuZW1mLmVkaXQuaXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcmllcyI+CisgICAgICA8ZmFjdG9yeQorICAgICAgICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5tdWx0aXBvcHVsYXRpb24ucHJvdmlkZXIuTXVsdGlwb3B1bGF0aW9uSXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkiCisgICAgICAgICAgICBzdXBwb3J0ZWRUeXBlcz0ib3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUVkaXRpbmdEb21haW5JdGVtUHJvdmlkZXIKKyAgICAgICAgCSBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JU3RydWN0dXJlZEl0ZW1Db250ZW50UHJvdmlkZXIKKyAgICAgICAgCSBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JVHJlZUl0ZW1Db250ZW50UHJvdmlkZXIKKyAgICAgICAgCSBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbUxhYmVsUHJvdmlkZXIKKyAgICAgICAgCSBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbVByb3BlcnR5U291cmNlIgorICAgICAgICAgICAgdXJpPSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9tdWx0aXBvcHVsYXRpb24uZWNvcmUiPgorICAgICAgPC9mYWN0b3J5PgorICAgPC9leHRlbnNpb24+CisgICA8ZXh0ZW5zaW9uCisgICAgICAgICBwb2ludD0ib3JnLmVjbGlwc2UuZW1mLmVjb3JlLmdlbmVyYXRlZF9wYWNrYWdlIj4KKyAgICAgIDxwYWNrYWdlCisgICAgICAgICAgICBjbGFzcz0ib3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLm11bHRpcG9wdWxhdGlvbi5NdWx0aXBvcHVsYXRpb25QYWNrYWdlIgorICAgICAgICAgICAgZ2VuTW9kZWw9Im1vZGVsL211bHRpcG9wdWxhdGlvbi5nZW5tb2RlbCIKKyAgICAgICAgICAgIHVyaT0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvbXVsdGlwb3B1bGF0aW9uLmVjb3JlIj4KKyAgICAgIDwvcGFja2FnZT4KKyAgIDwvZXh0ZW5zaW9uPgorICAgPGV4dGVuc2lvbgorICAgICAgICAgcG9pbnQ9Im9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5kaXNlYXNlbW9kZWwiPgorICAgICAgPGNsYXNzZGVmCisgICAgICAgICAgICBjbGFzcz0ib3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLm11bHRpcG9wdWxhdGlvbi5pbXBsLk11bHRpUG9wdWxhdGlvblNJRGlzZWFzZU1vZGVsSW1wbCI+CisgICAgICA8L2NsYXNzZGVmPgorICAgICAgPGR1Ymxpbl9jb3JlCisgICAgICAgICAgICBjYXRlZ29yeV9pZD0iLyIKKyAgICAgICAgICAgIGNyZWF0b3I9IiVkY19jcmVhdG9yX2VkbHVuZCIKKyAgICAgICAgICAgIGlkZW50aWZpZXI9IiVkY19pZGVudGllciIKKyAgICAgICAgICAgIHNvdXJjZT0iJWRjX1NPVVJDRSIKKyAgICAgICAgICAgIGxpY2Vuc2U9IiVkY19saWNlbnNlIgorICAgICAgICAgICAgcHVibGlzaGVyPSIlZGNfcHVibGlzaGVyIgorICAgICAgICAgICAgZGVzY3JpcHRpb249IiVkY19kZXNjcl9NUF9TSSIKKyAgICAgICAgICAgIHRpdGxlPSIlZGNfdGl0bGVfTVBfU0kiPgorICAgICAgPC9kdWJsaW5fY29yZT4KKyAgIDwvZXh0ZW5zaW9uPgorCisgIDxleHRlbnNpb24KKyAgICAgICAgIHBvaW50PSJvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZGlzZWFzZW1vZGVsIj4KKyAgICAgIDxjbGFzc2RlZgorICAgICAgICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5tdWx0aXBvcHVsYXRpb24uaW1wbC5NdWx0aVBvcHVsYXRpb25TSVJEaXNlYXNlTW9kZWxJbXBsIj4KKyAgICAgIDwvY2xhc3NkZWY+CisgICAgICA8ZHVibGluX2NvcmUKKyAgICAgICAgICAgIGNhdGVnb3J5X2lkPSIvIgorICAgICAgICAgICAgY3JlYXRvcj0iJWRjX2NyZWF0b3JfZWRsdW5kIgorICAgICAgICAgICAgaWRlbnRpZmllcj0iJWRjX2lkZW50aWVyIgorICAgICAgICAgICAgc291cmNlPSIlZGNfU09VUkNFIgorICAgICAgICAgICAgbGljZW5zZT0iJWRjX2xpY2Vuc2UiCisgICAgICAgICAgICBwdWJsaXNoZXI9IiVkY19wdWJsaXNoZXIiCisgICAgICAgICAgICBkZXNjcmlwdGlvbj0iJWRjX2Rlc2NyX01QX1NJUiIKKyAgICAgICAgICAgIHRpdGxlPSIlZGNfdGl0bGVfTVBfU0lSIj4KKyAgICAgIDwvZHVibGluX2NvcmU+CisgICA8L2V4dGVuc2lvbj4KKworICA8ZXh0ZW5zaW9uCisgICAgICAgICBwb2ludD0ib3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmRpc2Vhc2Vtb2RlbCI+CisgICAgICA8Y2xhc3NkZWYKKyAgICAgICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMubXVsdGlwb3B1bGF0aW9uLmltcGwuTXVsdGlQb3B1bGF0aW9uU0VJUkRpc2Vhc2VNb2RlbEltcGwiPgorICAgICAgPC9jbGFzc2RlZj4KKyAgICAgIDxkdWJsaW5fY29yZQorICAgICAgICAgICAgY2F0ZWdvcnlfaWQ9Ii8iCisgICAgICAgICAgICBjcmVhdG9yPSIlZGNfY3JlYXRvcl9lZGx1bmQiCisgICAgICAgICAgICBpZGVudGlmaWVyPSIlZGNfaWRlbnRpZXIiCisgICAgICAgICAgICBzb3VyY2U9IiVkY19TT1VSQ0UiCisgICAgICAgICAgICBsaWNlbnNlPSIlZGNfbGljZW5zZSIKKyAgICAgICAgICAgIHB1Ymxpc2hlcj0iJWRjX3B1Ymxpc2hlciIKKyAgICAgICAgICAgIGRlc2NyaXB0aW9uPSIlZGNfZGVzY3JfTVBfU0VJUiIKKyAgICAgICAgICAgIHRpdGxlPSIlZGNfdGl0bGVfTVBfU0VJUiI+CisgICAgICA8L2R1Ymxpbl9jb3JlPgorICAgPC9leHRlbnNpb24+CisgIDxleHRlbnNpb24KKyAgICAgICAgcG9pbnQ9Im9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5kaXNlYXNlbW9kZWwiPgorICAgICA8Y2xhc3NkZWYKKyAgICAgICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5tdWx0aXBvcHVsYXRpb24uaW1wbC5NdWx0aVBvcHVsYXRpb25TZWFzb25hbERpc2Vhc2VNb2RlbEltcGwiPgorICAgICA8L2NsYXNzZGVmPgorICAgICA8ZHVibGluX2NvcmUKKyAgICAgICAgICAgY2F0ZWdvcnlfaWQ9Ii8iCisgICAgICAgICAgIGNyZWF0b3I9IiVkY19jcmVhdG9yX2N0aG9lbnMiCisgICAgICAgICAgIGRlc2NyaXB0aW9uPSIlZGNfZGVzY3JfTVBfU0VBU09OQUwiCisgICAgICAgICAgIGlkZW50aWZpZXI9IiVkY19pZGVudGllciIKKyAgICAgICAgICAgbGljZW5zZT0iJWRjX2xpY2Vuc2UiCisgICAgICAgICAgIHB1Ymxpc2hlcj0iJWRjX3B1Ymxpc2hlciIKKyAgICAgICAgICAgc291cmNlPSIlZGNfU09VUkNFIgorICAgICAgICAgICB0aXRsZT0iJWRjX3RpdGxlX01QX1NFQVNPTkFMIj4KKyAgICAgPC9kdWJsaW5fY29yZT4KKyAgPC9leHRlbnNpb24+CisKKzwvcGx1Z2luPgpkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMubXVsdGlwb3B1bGF0aW9uL3BsdWdpbl9kZS5wcm9wZXJ0aWVzIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMubXVsdGlwb3B1bGF0aW9uL3BsdWdpbl9kZS5wcm9wZXJ0aWVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc3MjQ1YTkKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5tdWx0aXBvcHVsYXRpb24vcGx1Z2luX2RlLnByb3BlcnRpZXMKQEAgLTAsMCArMSw5MyBAQAorCisjIDxjb3B5cmlnaHQ+CisjIDwvY29weXJpZ2h0PgorIworIyAkSWQkCisKK3BsdWdpbk5hbWU9TXVsdGktQmV2XHUwMGY2bGtlcnVuZ3Ntb2RlbGwKK3Byb3ZpZGVyTmFtZT1FY2xpcHNlLm9yZworZGNfY3JlYXRvcl9lZGx1bmQ9U3RlZmFuIEVkbHVuZAorZGNfY3JlYXRvcl9rYXVmbWFuPUphbWVzIEthdWZtYW4KK2RjX2NyZWF0b3JfY3Rob2Vucz1DaHJpc3RpYW4gVGhvZW5zCitkY19pZGVudGllcj1TVEVNIFdpZWRlcmdhYmUgS3JhbmtoZWl0c21vZGVsbAorZGNfcHVibGlzaGVyPURpZSBFY2xpcHNlIEZvdW5kYXRpb24KK2RjX2xpY2Vuc2U9RWNsaXBzZSBQdWJsaWMgTGljZW5zZSAoRVBMKQorZGNfU09VUkNFPWh0dHA6Ly93aWtpLmVjbGlwc2Uub3JnL0ludHJvZHVjdGlvbl90b19Db21wYXJ0bWVudF9Nb2RlbHMgKHVuZCBSZWZlcmVuemVuIGdpYnQgZXMtaW4pCitkY190aXRsZV9NUF9TST1NdWx0aS1CZXZcdTAwZjZsa2VydW5ncy1TSS1LcmFua2hlaXRzbW9kZWxsCitkY19kZXNjcl9NUF9TST1FaW4gU0kgS3JhbmtoZWl0c21vZGVsbCBmXHUwMGZjciB1bnRlcnRlaWx0ZSBCZXZcdTAwZjZsa2VydW5nZW4KK2RjX3RpdGxlX01QX1NJUj1NdWx0aS1CZXZcdTAwZjZsa2VydW5ncy1TSVItS3JhbmtoZWl0c21vZGVsbAorZGNfZGVzY3JfTVBfU0lSPUVpbiBTSVIgS3JhbmtoZWl0c21vZGVsbCBmXHUwMGZjciB1bnRlcnRlaWx0ZSBCZXZcdTAwZjZsa2VydW5nZW4KK2RjX3RpdGxlX01QX1NFSVI9TXVsdGktQmV2XHUwMGY2bGtlcnVuZ3MtU0VJUi1LcmFua2hlaXRzbW9kZWxsCitkY19kZXNjcl9NUF9TRUlSPUVpbiBTRUlSIEtyYW5raGVpdHNtb2RlbGwgZlx1MDBmY3IgdW50ZXJ0ZWlsdGUgQmV2XHUwMGY2bGtlcnVuZ2VuCitkY190aXRsZV9NUF9TRUFTT05BTD1TYWlzb25hbGVzIE11bHRpLUJldlx1MDBmNmxrZXJ1bmdzLUtyYW5raGVpdHNtb2RlbGwKK2RjX2Rlc2NyX01QX1NFQVNPTkFMPUVpbiBzYWlzb25hbGVzIEtyYW5raGVpdHNtb2RlbGwgZlx1MDBmY3IgdW50ZXJ0ZWlsdGUgQmV2XHUwMGY2bGtlcnVuZ2VuCisKK19VSV9DcmVhdGVDaGlsZF90ZXh0PXswfQorX1VJX0NyZWF0ZUNoaWxkX3RleHQyPXsxfSB7MH0KK19VSV9DcmVhdGVDaGlsZF90ZXh0Mz17MX0KK19VSV9DcmVhdGVDaGlsZF90b29sdGlwPU5ldWVzIHswfSB1bnRlciB7MX0gRmVhdHVyZSBlcnN0ZWxsZW4KK19VSV9DcmVhdGVDaGlsZF9kZXNjcmlwdGlvbj1OZXVlcyBLaW5kIHZvbSBUeXAgezB9IGZcdTAwZmNyIGRhcyB7MX0gTWVya21hbCBkZXIgYXVzZ2V3XHUwMGU0aGx0ZW4gezJ9IGVyc3RlbGxlbgorX1VJX0NyZWF0ZVNpYmxpbmdfZGVzY3JpcHRpb249TmV1ZXMgR2VzY2h3aXN0ZXJ0ZWlsIHZvbSBUeXAgezB9IGZcdTAwZmNyIGRlbiBhdXNnZXdcdTAwZTRobHRlbiB7Mn0gdW50ZXIgZGVtIHsxfSBNZXJrbWFsIGRlcyBFbHRlcm50ZWlsIGVyc3RlbGxlbgorX1VJX1Byb3BlcnR5RGVzY3JpcHRvcl9kZXNjcmlwdGlvbj17MH0gdm9uIHsxfQorX1VJX011bHRpUG9wdWxhdGlvblNJRGlzZWFzZU1vZGVsX3R5cGU9TXVsdGktQmV2XHUwMGY2bGtlcnVuZ3MtU0ktS3JhbmtoZWl0c21vZGVsbAorX1VJX1Vua25vd25fdHlwZT1PYmpla3QKK19VSV9Vbmtub3duX2RhdGF0eXBlPVdlcnQKK19VSV9Vbmtub3duX2ZlYXR1cmU9TmljaHQgc3BlemlmaXppZXJ0CitfVUlfTXVsdGlwb3B1bGF0aW9uRWRpdG9yX21lbnU9Jk11bHRpcG9wdWxhdGlvbiBFZGl0b3IKK19VSV9DcmVhdGVDaGlsZF9tZW51X2l0ZW09Jk5ldyBDaGlsZAorX1VJX0NyZWF0ZVNpYmxpbmdfbWVudV9pdGVtPU4mZXVlcyBHZXNjaHdpc3RlcnRlaWwKK19VSV9TaG93UHJvcGVydGllc1ZpZXdfbWVudV9pdGVtPVNob3cgJiBQcm9wZXJ0aWVzIFZpZXcKK19VSV9SZWZyZXNoVmlld2VyX21lbnVfaXRlbT0mUmVmcmVzaAorX1VJX1NlbGVjdGlvblBhZ2VfbGFiZWw9QXVzd2FobAorX1VJX1BhcmVudFBhZ2VfbGFiZWw9RWx0ZXJudGVpbAorX1VJX0xpc3RQYWdlX2xhYmVsPUxpc3RlCitfVUlfVHJlZVBhZ2VfbGFiZWw9QmF1bQorX1VJX1RhYmxlUGFnZV9sYWJlbD1UYWJlbGxlCitfVUlfVHJlZVdpdGhDb2x1bW5zUGFnZV9sYWJlbD1CYXVtIG1pdCBTcGFsdGVuCitfVUlfT2JqZWN0Q29sdW1uX2xhYmVsPU9iamVrdAorX1VJX1NlbGZDb2x1bW5fbGFiZWw9U2VsYnN0CitfVUlfTm9PYmplY3RTZWxlY3RlZD1OaWNodHMgYXVzZ2V3XHUwMGU0aGx0CitfVUlfU2luZ2xlT2JqZWN0U2VsZWN0ZWQ9QXVzZ2V3XHUwMGU0aGx0ZXMgT2JqZWt0OiB7MH0KK19VSV9NdWx0aU9iamVjdFNlbGVjdGVkPUF1c2dld1x1MDBlNGhsdGUgezB9IE9iamVrdGUKK19VSV9PcGVuRWRpdG9yRXJyb3JfbGFiZWw9RWRpdG9yIFx1MDBmNmZmbmVuCitfVUlfV2l6YXJkX2NhdGVnb3J5PUJlaXNwaWVsIEVNRiBNb2RlbGwgRXJzdGVsbHVuZ3Nhc3Npc3RlbnQKK19VSV9DcmVhdGVNb2RlbEVycm9yX21lc3NhZ2U9QXVmZ2V0cmV0ZW5lIFByb2JsZW1lIGluIGRlciBEYXRlaSAiezB9IgorX1VJX011bHRpcG9wdWxhdGlvbk1vZGVsV2l6YXJkX2xhYmVsPU11bHRpLUJldlx1MDBmNmxrZXJ1bmdzbW9kZWxsCitfVUlfTXVsdGlwb3B1bGF0aW9uTW9kZWxXaXphcmRfZGVzY3JpcHRpb249TmV1ZXMgTXVsdGliZXZcdTAwZjZsa2VydW5ncy1Nb2RlbGwgZXJzdGVsbGVuCitfVUlfTXVsdGlwb3B1bGF0aW9uRWRpdG9yX2xhYmVsPU11bHRpLUJldlx1MDBmNmxrZXJ1bmdzbW9kZWxsLUVkaXRvcgorX1VJX011bHRpcG9wdWxhdGlvbkVkaXRvckZpbGVuYW1lRGVmYXVsdEJhc2U9TWVpbgorX1VJX011bHRpcG9wdWxhdGlvbkVkaXRvckZpbGVuYW1lRXh0ZW5zaW9ucz1NdWx0aWJldlx1MDBmNmxrZXJ1bmcKK19VSV9XaXphcmRfbGFiZWw9TmV1CitfV0FSTl9GaWxlbmFtZUV4dGVuc2lvbj1EZXIgRGF0ZWluYW1lIG11c3MgYXVmICIuezB9IiBlbmRlbgorX1dBUk5fRmlsZW5hbWVFeHRlbnNpb25zPURlciBEYXRlaW5hbWUgbXVzcyBlaW5lIGRlciBmb2xnZW5kZW4gRW5kdW5nZW4gaGFiZW46IHswfQorX1VJX01vZGVsT2JqZWN0PSZNb2RlbCBPYmplY3QKK19VSV9YTUxFbmNvZGluZz0mWE1MIEVuY29kaW5nCitfVUlfWE1MRW5jb2RpbmdDaG9pY2VzPVVURi04IEFTQ0lJIFVURi0xNiBVVEYtMTZCRSBVVEYtMTZMRSBJU08tODg1OS0xCitfVUlfV2l6YXJkX2luaXRpYWxfb2JqZWN0X2Rlc2NyaXB0aW9uPVp1IGVyemV1Z2VuZGVzIE1vZGVsbG9iamVrdCB3XHUwMGU0aGxlbgorX1VJX0ZpbGVDb25mbGljdF9sYWJlbD1EYXRlaWtvbmZsaWt0CitfV0FSTl9GaWxlQ29uZmxpY3Q9RXMgZ2lidCBuaWNodCBnZXNwZWljaGVydGUgXHUwMGM0bmRlcnVuZ2VuLCBkaWUgS29uZmxpa3RlIG1pdCBcdTAwYzRuZGVydW5nZW4gYXVcdTAwZGZlcmhhbGIgZGVzIEVkaXRvcnMgZXJ6ZXVnZW4uIE1cdTAwZjZjaHRlbiBTaWUgZGllIFx1MDBjNG5kZXJ1bmdlbiBpbSBFZGl0b3IgdmVyd2VyZmVuPworX1VJX011bHRpUG9wdWxhdGlvblNJRGlzZWFzZU1vZGVsX3RyYW5zbWlzc2lvblJhdGVfZmVhdHVyZT1cdTAwZGNiZXJ0cmFndW5nc3JhdGUKK19VSV9NdWx0aVBvcHVsYXRpb25TSURpc2Vhc2VNb2RlbF9wb3B1bGF0aW9uR3JvdXBzX2ZlYXR1cmU9QmV2XHUwMGY2bGtlcnVuZ3NncnVwcGVuCitfVUlfTXVsdGlQb3B1bGF0aW9uU0lEaXNlYXNlTW9kZWxfcmVjb3ZlcnlSYXRlX2ZlYXR1cmU9R2VuZXN1bmdzcmF0ZQorX1VJX011bHRpUG9wdWxhdGlvblNJRGlzZWFzZU1vZGVsX2luZmVjdGlvdXNNb3J0YWxpdHlSYXRlX2ZlYXR1cmU9SW5mZWt0aVx1MDBmNnNlIE1vcnRhbGl0XHUwMGU0dHNyYXRlCitfVUlfTXVsdGlQb3B1bGF0aW9uU0lEaXNlYXNlTW9kZWxfcGh5c2ljYWxseUFkamFjZW50SW5mZWN0aW91c1Byb3BvcnRpb25fZmVhdHVyZT1SXHUwMGU0dW1saWNoIGJlbmFjaGJhcnRlciBBbnN0ZWNrZW5kZW5hbnRlaWwKK19VSV9NdWx0aVBvcHVsYXRpb25TSURpc2Vhc2VNb2RlbF9yb2FkTmV0d29ya0luZmVjdGlvdXNQcm9wb3J0aW9uX2ZlYXR1cmU9U3RyYVx1MDBkZmVubmV0ei1JbmZla3RpXHUwMGY2c2VyLUFudGVpbAorX1VJX011bHRpUG9wdWxhdGlvblNJUkRpc2Vhc2VNb2RlbF90eXBlPU11bHRpLUJldlx1MDBmNmxrZXJ1bmdzLVNJUi1LcmFua2hlaXRzbW9kZWxsCitfVUlfTXVsdGlQb3B1bGF0aW9uU0VJUkRpc2Vhc2VNb2RlbF90eXBlPU11bHRpLUJldlx1MDBmNmxrZXJ1bmdzLVNFSVItS3JhbmtoZWl0c21vZGVsbAorX1VJX011bHRpUG9wdWxhdGlvblNJUkRpc2Vhc2VNb2RlbF9pbW11bml0eUxvc3NSYXRlX2ZlYXR1cmU9RW50aW1tdW5pc2llcnVuZ3NyYXRlCitfVUlfTXVsdGlQb3B1bGF0aW9uU0VJUkRpc2Vhc2VNb2RlbF9pbmN1YmF0aW9uUmF0ZV9mZWF0dXJlPUlua3ViYXRpb25zcmF0ZQorX1VJX011bHRpUG9wdWxhdGlvblNJRGlzZWFzZU1vZGVsX2NoYXJhY3RlcmlzdGljTWl4aW5nRGlzdGFuY2VfZmVhdHVyZT1DaGFyYWt0ZXJpc3Rpc2NoZSBNaXNjaGVudGZlcm51bmcKK19VSV9NdWx0aVBvcHVsYXRpb25TZWFzb25hbERpc2Vhc2VNb2RlbF90eXBlPVNhaXNvbmFsZXMgTXVsdGktQmV2XHUwMGY2bGtlcnVuZ3MtS3JhbmtoZWl0c21vZGVsbAorX1VJX1BvbHlub21pYWxTcGxpbmVGdW5jdGlvbl90eXBlPVBvbHlub21pYWxlIFNwbGluZS1GdW5rdGlvbgorX1VJX1NwbGluZV90eXBlPVNwbGluZQorX1VJX011bHRpUG9wdWxhdGlvblNlYXNvbmFsRGlzZWFzZU1vZGVsX3NwbGluZV9mZWF0dXJlPVNwbGluZQorX1VJX1BvaW50X3R5cGU9UHVua3QKK19VSV9NdWx0aVBvcHVsYXRpb25TZWFzb25hbERpc2Vhc2VNb2RlbF9wb2ludHNfZmVhdHVyZT1QdW5rdGUKK19VSV9Qb2ludF94X2ZlYXR1cmU9WAorX1VJX1BvaW50X3lfZmVhdHVyZT1ZCitfVUlfTXVsdGlQb3B1bGF0aW9uU2Vhc29uYWxEaXNlYXNlTW9kZWxfbW9kdWxhdGlvblBvaW50c19mZWF0dXJlPU1vZHVsYXRpb25zcHVua3RlCitfVUlfTXVsdGlQb3B1bGF0aW9uU2Vhc29uYWxEaXNlYXNlTW9kZWxfbnVtYmVyT2ZNb2R1bGF0aW9uUG9pbnRzX2ZlYXR1cmU9QW56YWhsIGRlciBNb2R1bGF0aW9uc3B1bmt0ZQorX1VJX011bHRpUG9wdWxhdGlvblNlYXNvbmFsRGlzZWFzZU1vZGVsX2ludGVycG9sYXRpb25UeXBlX2ZlYXR1cmU9SW50ZXJwb2xhdGlvbnNhcnQKK19VSV9JbnRlcnBvbGF0aW9uVHlwZV9MSU5FQVJfSU5URVJQT0xBVElPTl9saXRlcmFsPUxJTkVBUl9JTlRFUlBPTEFUSU9OCitfVUlfSW50ZXJwb2xhdGlvblR5cGVfU1BMSU5FX0lOVEVSUE9MQVRJT05fbGl0ZXJhbD1TUExJTkVfSU5URVJQT0xBVElPTgorX1VJX011bHRpUG9wdWxhdGlvblNlYXNvbmFsRGlzZWFzZU1vZGVsX3VzZVNwbGluZUludGVycG9sYXRpb25fZmVhdHVyZT1Vc2UgU3BsaW5lIEludGVycG9sYXRpb24KZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLm11bHRpcG9wdWxhdGlvbi9wbHVnaW5fa3IucHJvcGVydGllcyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLm11bHRpcG9wdWxhdGlvbi9wbHVnaW5fa3IucHJvcGVydGllcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNDRlMjJiCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMubXVsdGlwb3B1bGF0aW9uL3BsdWdpbl9rci5wcm9wZXJ0aWVzCkBAIC0wLDAgKzEsOTMgQEAKKworIyA8Y29weXJpZ2h0PgorIyA8L2NvcHlyaWdodD4KKyMKKyMgJElkJAorCitwbHVnaW5OYW1lPVx1YmE0MFx1ZDJmMFx1Yzc3OFx1YWQ2YyBcdWJhYThcdWIzNzgKK3Byb3ZpZGVyTmFtZT1FY2xpcHNlLm9yZworZGNfY3JlYXRvcl9lZGx1bmQ9U3RlZmFuIEVkbHVuZAorZGNfY3JlYXRvcl9rYXVmbWFuPVx1YzgxY1x1Yzc4NFx1YzJhNCBcdWNlNzRcdWQ1MDRcdWI5ZTgKK2RjX2NyZWF0b3JfY3Rob2Vucz1cdWFlMzBcdWIzYzVcdWFkNTAgVGhvZW5zCitkY19pZGVudGllcj1TVEVNIFx1YzdhY1x1YzBkZCBcdWM5YzhcdWJjZDEgXHViYWE4XHViMzc4CitkY19wdWJsaXNoZXI9XHVjNzc0XHVkMDc0XHViOWJkXHVjMmE0IFx1YzdhY1x1YjJlOAorZGNfbGljZW5zZT1cdWM3NzRcdWQwNzRcdWI5YmRcdWMyYTQgXHVhY2Y1XHVjNmE5IFx1YzBhY1x1YzZhOSBcdWQ1YzhcdWFjMDBcdWMxMWMgKEVQTCkKK2RjX1NPVVJDRT1odHRwOi8vd2lraS5lY2xpcHNlLm9yZy9JbnRyb2R1Y3Rpb25fdG9fQ29tcGFydG1lbnRfTW9kZWxzIChcdWFkZjhcdWI5YWNcdWFjZTAgXHVjYzM4XHVhY2UwIFx1YmIzOFx1ZDVjY1x1YzVkMFx1YzExYykKK2RjX3RpdGxlX01QX1NJPVx1YmE0MFx1ZDJmMFx1Yzc3OFx1YWQ2YyBTSSBcdWM5YzhcdWJjZDEgXHViYWE4XHViMzc4CitkY19kZXNjcl9NUF9TST1cdWIyZTRcdWMyMTggXHVjNzc4XHVhZDZjIFNJIFx1YzljOFx1YmNkMSBcdWJhYThcdWIzNzgKK2RjX3RpdGxlX01QX1NJUj1cdWJhNDBcdWQyZjBcdWM3NzhcdWFkNmMgU0lSIFx1YzljOFx1YmNkMSBcdWJhYThcdWIzNzgKK2RjX2Rlc2NyX01QX1NJUj1cdWIyZTRcdWMyMTggXHVjNzc4XHVhZDZjIFNJUiBcdWM5YzhcdWJjZDEgXHViYWE4XHViMzc4CitkY190aXRsZV9NUF9TRUlSPVx1YmE0MFx1ZDJmMFx1Yzc3OFx1YWQ2Y1x1Yzc1OCBTRUlSIFx1YzljOFx1YmNkMSBcdWJhYThcdWIzNzgKK2RjX2Rlc2NyX01QX1NFSVI9XHViMmU0XHVjMjE4IFx1Yzc3OFx1YWQ2YyBTSUVSIFx1YzljOFx1YmNkMSBcdWJhYThcdWIzNzgKK2RjX3RpdGxlX01QX1NFQVNPTkFMPVx1YmE0MFx1ZDJmMFx1Yzc3OFx1YWQ2YyBcdWFjYzRcdWM4MDhcdWJjYzQgXHVjOWM4XHViY2QxIFx1YmFhOFx1YjM3OAorZGNfZGVzY3JfTVBfU0VBU09OQUw9XHViMmU0XHVjMjE4IFx1Yzc3OFx1YWQ2YyBcdWFjYzRcdWM4MDggXHVjOWM4XHViY2QxIFx1YmFhOFx1YjM3OAorCitfVUlfQ3JlYXRlQ2hpbGRfdGV4dD17MH0KK19VSV9DcmVhdGVDaGlsZF90ZXh0Mj17MX0gezB9CitfVUlfQ3JlYXRlQ2hpbGRfdGV4dDM9ezF9CitfVUlfQ3JlYXRlQ2hpbGRfdG9vbHRpcD17MX0gXHVhZTMwXHViMmE1IFx1ZDU1OFx1YzVkMCBcdWMwYzggezB9IFx1YjljY1x1YjRlNFx1YWUzMAorX1VJX0NyZWF0ZUNoaWxkX2Rlc2NyaXB0aW9uPVx1YzEyMFx1ZDBkZFx1ZDU1YyB7Mn1cdWM3NTggezF9IFx1YWUzMFx1YjJhNVx1YzVkMCBcdWIzMDBcdWQ1NWMgXHVkNjE1XHVjMmRkIHswfVx1Yzc1OCBcdWMwYzhcdWI4NWNcdWM2YjQgQ2hpbGRcdWI5N2MgXHViOWNjXHViNGVkXHViMmM4XHViMmU0LgorX1VJX0NyZWF0ZVNpYmxpbmdfZGVzY3JpcHRpb249XHViZDgwXHViYWE4XHVjNzU4IFx1YzEyMFx1ZDBkZFx1YjQxYyB7Mn1cdWM1ZDBcdWMxMWMgezF9IFx1YWUzMFx1YjJhNVx1YzVkMCBcdWIzMDBcdWQ1NWMgXHVkNjE1XHVjMmRkIHswfVx1Yzc1OCBcdWMwYzhcdWI4NWNcdWM2YjQgXHVkNjE1XHVjODFjXHViOTdjIFx1YjljY1x1YjRlZFx1YjJjOFx1YjJlNC4KK19VSV9Qcm9wZXJ0eURlc2NyaXB0b3JfZGVzY3JpcHRpb249ezF9IFx1YzkxMSB7MH0KK19VSV9NdWx0aVBvcHVsYXRpb25TSURpc2Vhc2VNb2RlbF90eXBlPVx1YmE0MFx1ZDJmMCBcdWM3NzhcdWFkNmMgU0kgXHVjOWM4XHViY2QxIFx1YmFhOFx1YjM3OAorX1VJX1Vua25vd25fdHlwZT1cdWFjMWNcdWNjYjQKK19VSV9Vbmtub3duX2RhdGF0eXBlPVx1YWMxMgorX1VJX1Vua25vd25fZmVhdHVyZT1cdWM5YzBcdWM4MTVcdWI0MThcdWM5YzAgXHVjNTRhXHVjNzRjCitfVUlfTXVsdGlwb3B1bGF0aW9uRWRpdG9yX21lbnU9Jk11bHRpcG9wdWxhdGlvbiBFZGl0b3IKK19VSV9DcmVhdGVDaGlsZF9tZW51X2l0ZW09Jk5ldyBDaGlsZAorX1VJX0NyZWF0ZVNpYmxpbmdfbWVudV9pdGVtPU4mICBcdWQ2MTVcdWM4MWMgXHVjNzkwXHViOWU0CitfVUlfU2hvd1Byb3BlcnRpZXNWaWV3X21lbnVfaXRlbT1cdWQ0NWNcdWMyZGMgXHViYzBmIFx1YzE4ZFx1YzEzMVx1YmNmNFx1YWUzMAorX1VJX1JlZnJlc2hWaWV3ZXJfbWVudV9pdGVtPSZSZWZyZXNoCitfVUlfU2VsZWN0aW9uUGFnZV9sYWJlbD1cdWMxMjBcdWQwZGQKK19VSV9QYXJlbnRQYWdlX2xhYmVsPVx1YmQ4MFx1YmFhOAorX1VJX0xpc3RQYWdlX2xhYmVsPVx1YmFhOVx1Yjg1ZAorX1VJX1RyZWVQYWdlX2xhYmVsPVx1YjA5OFx1YmIzNAorX1VJX1RhYmxlUGFnZV9sYWJlbD1cdWQxNGNcdWM3NzRcdWJlMTQKK19VSV9UcmVlV2l0aENvbHVtbnNQYWdlX2xhYmVsPVx1YjA5OFx1YmIzNFx1YzY0MCBcdWM1ZjQKK19VSV9PYmplY3RDb2x1bW5fbGFiZWw9XHVhYzFjXHVjY2I0CitfVUlfU2VsZkNvbHVtbl9sYWJlbD1cdWMxNDBcdWQ1MDQKK19VSV9Ob09iamVjdFNlbGVjdGVkPVx1YzU0NFx1YmIzNFx1YWM4M1x1YjNjNCBcdWM1NDggXHVjMTIwXHVkMGRkXHVkNTY4CitfVUlfU2luZ2xlT2JqZWN0U2VsZWN0ZWQ9XHVjMTIwXHVkMGRkXHVkNTVjIFx1YWMxZFx1Y2NiNCA6IHswfQorX1VJX011bHRpT2JqZWN0U2VsZWN0ZWQ9XHVjMTIwXHVkMGRkXHViNDFjIHswfSBcdWFjMWRcdWNjYjQKK19VSV9PcGVuRWRpdG9yRXJyb3JfbGFiZWw9XHVjNjI0XHVkNTA4IFx1YzVkMFx1YjUxNFx1ZDEzMAorX1VJX1dpemFyZF9jYXRlZ29yeT1cdWM2MDhcdWM4MWMgRU1GIFx1YmFhOFx1YjM3OCBcdWMwZGRcdWMxMzEgXHViOWM4XHViYzk1XHVjMGFjCitfVUlfQ3JlYXRlTW9kZWxFcnJvcl9tZXNzYWdlPVx1ZDMwY1x1Yzc3YyAnezB9ICJcdWM1ZDBcdWMxMWMgXHViYjM4XHVjODFjIFx1YmMxY1x1YzBkZAorX1VJX011bHRpcG9wdWxhdGlvbk1vZGVsV2l6YXJkX2xhYmVsPVx1YmE0MFx1ZDJmMFx1Yzc3OFx1YWQ2YyBcdWJhYThcdWIzNzgKK19VSV9NdWx0aXBvcHVsYXRpb25Nb2RlbFdpemFyZF9kZXNjcmlwdGlvbj1cdWMwYzhcdWI4NWNcdWM2YjQgXHViMmU0XHVjMjE4XHVjNzc4XHVhZDZjIFx1YmFhOFx1YjM3OCBcdWI5Y2NcdWI0ZTRcdWFlMzAKK19VSV9NdWx0aXBvcHVsYXRpb25FZGl0b3JfbGFiZWw9XHViYTQwXHVkMmYwXHVjNzc4XHVhZDZjIFx1YmFhOFx1YjM3OCBcdWQzYjhcdWM5ZDFcdWFlMzAKK19VSV9NdWx0aXBvcHVsYXRpb25FZGl0b3JGaWxlbmFtZURlZmF1bHRCYXNlPVx1YjA5OFx1Yzc1OAorX1VJX011bHRpcG9wdWxhdGlvbkVkaXRvckZpbGVuYW1lRXh0ZW5zaW9ucz1cdWIyZTRcdWMyMThcdWM3NzhcdWFkNmMKK19VSV9XaXphcmRfbGFiZWw9XHVjMGM4XHViODVjXHVjNmI0CitfV0FSTl9GaWxlbmFtZUV4dGVuc2lvbj1cdWQzMGNcdWM3N2MgXHVjNzc0XHViOTg0XHVjNzQwICIuezB9Ilx1Yjg1YyBcdWIwNWRcdWIwOThcdWM1N2NcdWQ1NjguCitfV0FSTl9GaWxlbmFtZUV4dGVuc2lvbnM9XHVkMzBjXHVjNzdjIFx1Yzc3NFx1Yjk4NFx1Yzc0MCBcdWIyZTRcdWM3NGMgXHVkNjU1XHVjN2E1XHVjNzkwIFx1YzkxMSBcdWQ1NThcdWIwOThcdWI5N2MgXHVhYzAwXHVjODM4XHVjNTdjXHVkNTY4IDogezB9CitfVUlfTW9kZWxPYmplY3Q9Jk1vZGVsIE9iamVjdAorX1VJX1hNTEVuY29kaW5nPSZYTUwgRW5jb2RpbmcKK19VSV9YTUxFbmNvZGluZ0Nob2ljZXM9VVRGIC0gOCBBU0NJSSBVVEYgLSAxNiBVVEYgLSAxNkJFIFVURiAtIDE2TEUgSVNPIC0gODg1OSAtIDEKK19VSV9XaXphcmRfaW5pdGlhbF9vYmplY3RfZGVzY3JpcHRpb249XHVjMGRkXHVjMTMxXHVkNTYwIFx1YmFhOFx1YjM3OCBcdWFjMWNcdWNjYjQgXHVjMTIwXHVkMGRkCitfVUlfRmlsZUNvbmZsaWN0X2xhYmVsPVx1ZDMwY1x1Yzc3YyBcdWNkYTlcdWIzY2MKK19XQVJOX0ZpbGVDb25mbGljdD1cdWM4MDBcdWM3YTVcdWI0MThcdWM5YzAgXHVjNTRhXHVjNzQwIFx1YzBhY1x1ZDU2ZFx1YjRlNFx1Yzc3NCBcdWQzYjhcdWM5ZDFcdWFlMzAgXHVjNjc4XHViZDgwXHVjNzU4IFx1YmNjMFx1YWNiZCBcdWMwYWNcdWQ1NmRcdWI0ZTRcdWFjZmMgXHVjZGE5XHViM2NjXHVkNTY4LiBcdWM3NzQgXHVkM2I4XHVjOWQxXHVhZTMwXHVjNzU4IFx1YmNjMFx1YWNiZCBcdWMwYWNcdWQ1NmRcdWI0ZTRcdWM3NDQgXHVjZGU4XHVjMThjIFx1ZDU1OFx1YzJkY1x1YWNhMFx1YzJiNVx1YjJjOFx1YWU0Yz8KK19VSV9NdWx0aVBvcHVsYXRpb25TSURpc2Vhc2VNb2RlbF90cmFuc21pc3Npb25SYXRlX2ZlYXR1cmU9XHVjODA0XHVjMWExIFx1YzE4ZFx1YjNjNAorX1VJX011bHRpUG9wdWxhdGlvblNJRGlzZWFzZU1vZGVsX3BvcHVsYXRpb25Hcm91cHNfZmVhdHVyZT1cdWM3NzhcdWFkNmMgXHVhZGY4XHViOGY5CitfVUlfTXVsdGlQb3B1bGF0aW9uU0lEaXNlYXNlTW9kZWxfcmVjb3ZlcnlSYXRlX2ZlYXR1cmU9XHViY2Y1XHVhZDZjIFx1YzE4ZFx1YjNjNAorX1VJX011bHRpUG9wdWxhdGlvblNJRGlzZWFzZU1vZGVsX2luZmVjdGlvdXNNb3J0YWxpdHlSYXRlX2ZlYXR1cmU9XHVjODA0XHVjNWZjIFx1YzBhY1x1YjlkZFx1Yjk2MAorX1VJX011bHRpUG9wdWxhdGlvblNJRGlzZWFzZU1vZGVsX3BoeXNpY2FsbHlBZGphY2VudEluZmVjdGlvdXNQcm9wb3J0aW9uX2ZlYXR1cmU9XHViYjNjXHViOWFjXHVjODAxIFx1Yzc3OFx1YzgxMSBcdWM4MDRcdWM1ZmNcdWMxMzEgXHViZTQ0XHVjNzI4CitfVUlfTXVsdGlQb3B1bGF0aW9uU0lEaXNlYXNlTW9kZWxfcm9hZE5ldHdvcmtJbmZlY3Rpb3VzUHJvcG9ydGlvbl9mZWF0dXJlPVx1YjNjNFx1Yjg1Y1x1YjlkZCBcdWM4MDRcdWM1ZmNcdWMxMzEgXHViZTQ0XHVjNzI4CitfVUlfTXVsdGlQb3B1bGF0aW9uU0lSRGlzZWFzZU1vZGVsX3R5cGU9XHViYTQwXHVkMmYwIFx1Yzc3OFx1YWQ2YyBTSVIgXHVjOWM4XHViY2QxIFx1YmFhOFx1YjM3OAorX1VJX011bHRpUG9wdWxhdGlvblNFSVJEaXNlYXNlTW9kZWxfdHlwZT1cdWJhNDBcdWQyZjAgXHVjNzc4XHVhZDZjIFNFSVIgXHVjOWM4XHViY2QxIFx1YmFhOFx1YjM3OAorX1VJX011bHRpUG9wdWxhdGlvblNJUkRpc2Vhc2VNb2RlbF9pbW11bml0eUxvc3NSYXRlX2ZlYXR1cmU9XHViYTc0XHVjNWVkXHViODI1IFx1YzE5MFx1YzJlNFx1YzcyOAorX1VJX011bHRpUG9wdWxhdGlvblNFSVJEaXNlYXNlTW9kZWxfaW5jdWJhdGlvblJhdGVfZmVhdHVyZT1cdWJkODBcdWQ2NTQgXHVjMThkXHViM2M0CitfVUlfTXVsdGlQb3B1bGF0aW9uU0lEaXNlYXNlTW9kZWxfY2hhcmFjdGVyaXN0aWNNaXhpbmdEaXN0YW5jZV9mZWF0dXJlPVx1ZDJiOVx1YzEzMSBcdWQ2M2NcdWQ1NjkgXHVhYzcwXHViOWFjCitfVUlfTXVsdGlQb3B1bGF0aW9uU2Vhc29uYWxEaXNlYXNlTW9kZWxfdHlwZT1cdWJhNDBcdWQyZjAgXHVjNzc4XHVhZDZjIFx1YWNjNFx1YzgwOFx1YmNjNCBcdWM5YzhcdWJjZDEgXHViYWE4XHViMzc4CitfVUlfUG9seW5vbWlhbFNwbGluZUZ1bmN0aW9uX3R5cGU9XHViMmU0XHVkNTZkXHVjMmRkIFNwbGluZSBcdWFlMzBcdWIyYTUKK19VSV9TcGxpbmVfdHlwZT1TcGxpbmUKK19VSV9NdWx0aVBvcHVsYXRpb25TZWFzb25hbERpc2Vhc2VNb2RlbF9zcGxpbmVfZmVhdHVyZT1TcGxpbmUKK19VSV9Qb2ludF90eXBlPVx1ZDNlY1x1Yzc3OFx1ZDJiOAorX1VJX011bHRpUG9wdWxhdGlvblNlYXNvbmFsRGlzZWFzZU1vZGVsX3BvaW50c19mZWF0dXJlPVx1ZDNlY1x1Yzc3OFx1ZDJiOAorX1VJX1BvaW50X3hfZmVhdHVyZT1YCitfVUlfUG9pbnRfeV9mZWF0dXJlPVkKK19VSV9NdWx0aVBvcHVsYXRpb25TZWFzb25hbERpc2Vhc2VNb2RlbF9tb2R1bGF0aW9uUG9pbnRzX2ZlYXR1cmU9XHViY2MwXHVjODcwIFx1ZDNlY1x1Yzc3OFx1ZDJiOAorX1VJX011bHRpUG9wdWxhdGlvblNlYXNvbmFsRGlzZWFzZU1vZGVsX251bWJlck9mTW9kdWxhdGlvblBvaW50c19mZWF0dXJlPVx1YmNjMFx1Yzg3MCBcdWM5YzBcdWM4MTAgXHViYzg4XHVkNjM4CitfVUlfTXVsdGlQb3B1bGF0aW9uU2Vhc29uYWxEaXNlYXNlTW9kZWxfaW50ZXJwb2xhdGlvblR5cGVfZmVhdHVyZT1cdWJjZjRcdWFjMDQgXHVjNzIwXHVkNjE1CitfVUlfSW50ZXJwb2xhdGlvblR5cGVfTElORUFSX0lOVEVSUE9MQVRJT05fbGl0ZXJhbD1cdWMxMjBcdWQ2MTVfXHViY2Y0XHVhYzA0CitfVUlfSW50ZXJwb2xhdGlvblR5cGVfU1BMSU5FX0lOVEVSUE9MQVRJT05fbGl0ZXJhbD1TUExJTkVfSU5URVJQT0xBVElPTgorX1VJX011bHRpUG9wdWxhdGlvblNlYXNvbmFsRGlzZWFzZU1vZGVsX3VzZVNwbGluZUludGVycG9sYXRpb25fZmVhdHVyZT1Vc2UgU3BsaW5lIEludGVycG9sYXRpb24KZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLm11bHRpcG9wdWxhdGlvbi9wbHVnaW5femgucHJvcGVydGllcyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLm11bHRpcG9wdWxhdGlvbi9wbHVnaW5femgucHJvcGVydGllcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NjhkZDk3Ci0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMubXVsdGlwb3B1bGF0aW9uL3BsdWdpbl96aC5wcm9wZXJ0aWVzCkBAIC0wLDAgKzEsOTMgQEAKKworIyA8Y29weXJpZ2h0PgorIyA8L2NvcHlyaWdodD4KKyMKKyMgJElkJAorCitwbHVnaW5OYW1lPVx1NTkxYVx1NzljZFx1NzljZFx1N2ZhNFx1NmEyMVx1NTc4YgorcHJvdmlkZXJOYW1lPUVjbGlwc2Uub3JnCitkY19jcmVhdG9yX2VkbHVuZD1TdGVmYW4gRWRsdW5kCitkY19jcmVhdG9yX2thdWZtYW49SmFtZXMgS2F1Zm1hbgorZGNfY3JlYXRvcl9jdGhvZW5zPUNocmlzdGlhbiBUaG9lbnMKK2RjX2lkZW50aWVyPVNURU1cdTc1YmVcdTc1YzVcdTU2ZGVcdTY1M2VcdTZhMjFcdTU3OGIKK2RjX3B1Ymxpc2hlcj1FY2xpcHNlXHU1N2ZhXHU5MWQxXHU0ZjFhCitkY19saWNlbnNlPUVjbGlwc2VcdTUxNmNcdTUxNzFcdThiYjhcdTUzZWZcdWZmMDhFUExcdWZmMDkKK2RjX1NPVVJDRT1odHRwOi8vd2lraS5lY2xpcHNlLm9yZy9JbnRyb2R1Y3Rpb25fdG9fQ29tcGFydG1lbnRfTW9kZWxzXHVmZjA4XHU1NDhjXHU1M2MyXHU4MDAzXHU4ZDQ0XHU2NTk5XHU0ZTJkXHVmZjA5CitkY190aXRsZV9NUF9TST1cdTU5MWFcdTc5Y2RcdTc5Y2RcdTdmYTRTSVx1NzViZVx1NzVjNVx1NmEyMVx1NTc4YgorZGNfZGVzY3JfTVBfU0k9XHU0ZTAwXHU0ZTJhXHU1N2ZhXHU0ZThlXHU1OTFhXHU3OWNkXHU3OWNkXHU3ZmE0XHU3Njg0U0lSXHU3NWJlXHU3NWM1XHU2YTIxXHU1NzhiCitkY190aXRsZV9NUF9TSVI9XHU1OTFhXHU3OWNkXHU3OWNkXHU3ZmE0U0lSXHU3NWJlXHU3NWM1XHU2YTIxXHU1NzhiCitkY19kZXNjcl9NUF9TSVI9XHU0ZTAwXHU0ZTJhXHU1N2ZhXHU0ZThlXHU1OTFhXHU3OWNkXHU3OWNkXHU3ZmE0XHU3Njg0U0lSXHU3NWJlXHU3NWM1XHU2YTIxXHU1NzhiCitkY190aXRsZV9NUF9TRUlSPVx1NTkxYVx1NzljZFx1NzljZFx1N2ZhNFNFSVJcdTc1YmVcdTc1YzVcdTZhMjFcdTU3OGIKK2RjX2Rlc2NyX01QX1NFSVI9XHU0ZTAwXHU0ZTJhXHU1N2ZhXHU0ZThlXHU1OTFhXHU3OWNkXHU3OWNkXHU3ZmE0XHU3Njg0U0VJUlx1NzViZVx1NzVjNVx1NmEyMVx1NTc4YgorZGNfdGl0bGVfTVBfU0VBU09OQUw9XHU1OTFhXHU3OWNkXHU3OWNkXHU3ZmE0XHU1YjYzXHU4MjgyXHU2MDI3XHU3NWJlXHU3NWM1XHU2YTIxXHU1NzhiCitkY19kZXNjcl9NUF9TRUFTT05BTD1cdTRlMDBcdTRlMmFcdTU3ZmFcdTRlOGVcdTU5MWFcdTc5Y2RcdTc5Y2RcdTdmYTRcdTc2ODRcdTViNjNcdTgyODJcdTYwMjdcdTc1YmVcdTc1YzVcdTZhMjFcdTU3OGIKKworX1VJX0NyZWF0ZUNoaWxkX3RleHQ9ezB9CitfVUlfQ3JlYXRlQ2hpbGRfdGV4dDI9ezF9IHswfQorX1VJX0NyZWF0ZUNoaWxkX3RleHQzPXsxfQorX1VJX0NyZWF0ZUNoaWxkX3Rvb2x0aXA9XHU1MjFiXHU1ZWZhXHU1NzI4ezF9IHswfVx1NjViMFx1NTI5Zlx1ODBmZAorX1VJX0NyZWF0ZUNoaWxkX2Rlc2NyaXB0aW9uPVx1NGUzYVx1OTAwOVx1NWI5YVx1NzY4NHsyfVx1NzY4NHsxfVx1NzI3OVx1NjAyN1x1Njc2NVx1NTIxYlx1NWVmYVx1NGUwMFx1NGUyYVx1NjViMFx1NzY4NHswfVx1NWI1MFx1N2M3YgorX1VJX0NyZWF0ZVNpYmxpbmdfZGVzY3JpcHRpb249XHU1NzI4ezF9XHU3Njg0XHU3MjM2XHU5NmM2XHU0ZTJkXHU0ZTNhXHU5MDA5XHU1YjlhXHU3Njg0ezJ9XHU2NzY1XHU1MjFiXHU1ZWZhXHU0ZTAwXHU0ZTJhezB9XHU3YzdiXHU1NzhiXHU3Njg0XHU2NWIwXHU3Njg0XHU1MTQ0XHU1ZjFmXHU3YzdiCitfVUlfUHJvcGVydHlEZXNjcmlwdG9yX2Rlc2NyaXB0aW9uPXswfVx1NGVjZVx1NWM1ZXsxfQorX1VJX011bHRpUG9wdWxhdGlvblNJRGlzZWFzZU1vZGVsX3R5cGU9XHU1OTFhXHU3OWNkXHU3OWNkXHU3ZmE0U0lcdTc1YmVcdTc1YzVcdTZhMjFcdTU3OGIKK19VSV9Vbmtub3duX3R5cGU9XHU1YmY5XHU4YzYxCitfVUlfVW5rbm93bl9kYXRhdHlwZT1cdTRlZjdcdTUwM2MKK19VSV9Vbmtub3duX2ZlYXR1cmU9XHU2NzJhXHU2MzA3XHU1YjlhCitfVUlfTXVsdGlwb3B1bGF0aW9uRWRpdG9yX21lbnU9Jk11bHRpcG9wdWxhdGlvbiBFZGl0b3IKK19VSV9DcmVhdGVDaGlsZF9tZW51X2l0ZW09Jk5ldyBDaGlsZAorX1VJX0NyZWF0ZVNpYmxpbmdfbWVudV9pdGVtPVx1NjViMFx1NzUxZlx1NjIxMFx1NGUwMFx1NGUyYVx1NTE0NFx1NWYxZlx1N2M3YgorX1VJX1Nob3dQcm9wZXJ0aWVzVmlld19tZW51X2l0ZW09XHU2NjNlXHU3OTNhXHU1NDhjXHU1YzVlXHU2MDI3XHU2N2U1XHU3NzBiCitfVUlfUmVmcmVzaFZpZXdlcl9tZW51X2l0ZW09JlJlZnJlc2gKK19VSV9TZWxlY3Rpb25QYWdlX2xhYmVsPVx1OTAwOVx1NjJlOQorX1VJX1BhcmVudFBhZ2VfbGFiZWw9XHU1YmI2XHU5NTdmCitfVUlfTGlzdFBhZ2VfbGFiZWw9XHU3NmVlXHU1ZjU1CitfVUlfVHJlZVBhZ2VfbGFiZWw9XHU2ODExCitfVUlfVGFibGVQYWdlX2xhYmVsPVx1ODg2OAorX1VJX1RyZWVXaXRoQ29sdW1uc1BhZ2VfbGFiZWw9XHU1MjA2XHU1MjE3XHU3Njg0XHU2ODExCitfVUlfT2JqZWN0Q29sdW1uX2xhYmVsPVx1NWJmOVx1OGM2MQorX1VJX1NlbGZDb2x1bW5fbGFiZWw9XHU4MWVhXHU1ZGYxCitfVUlfTm9PYmplY3RTZWxlY3RlZD1cdTY1ZTBcdTkwMDlcdTViOWFcdTUxODVcdTViYjkKK19VSV9TaW5nbGVPYmplY3RTZWxlY3RlZD1cdTkwMDlcdTYyZTlcdTViZjlcdThjNjFcdWZmMWF7MH0KK19VSV9NdWx0aU9iamVjdFNlbGVjdGVkPVx1OTAwOVx1NjJlOXswfVx1NWJmOVx1OGM2MQorX1VJX09wZW5FZGl0b3JFcnJvcl9sYWJlbD1cdTYyNTNcdTVmMDBcdTdmMTZcdThmOTFcdTU2NjgKK19VSV9XaXphcmRfY2F0ZWdvcnk9XHU0ZjhiXHU1OTgyRU1GXHU2YTIxXHU1NzhiXHU1MjFiXHU1ZWZhXHU1NDExXHU1YmZjCitfVUlfQ3JlYXRlTW9kZWxFcnJvcl9tZXNzYWdlPVx1NTcyOFx1NjU4N1x1NGVmNlx1MjAxY3swfVx1MjAxZFx1NGUyZFx1OTA0N1x1NTIzMFx1NzY4NFx1OTVlZVx1OTg5OAorX1VJX011bHRpcG9wdWxhdGlvbk1vZGVsV2l6YXJkX2xhYmVsPVx1NTkxYVx1NzljZFx1NzljZFx1N2ZhNFx1NmEyMVx1NTc4YgorX1VJX011bHRpcG9wdWxhdGlvbk1vZGVsV2l6YXJkX2Rlc2NyaXB0aW9uPVx1NTIxYlx1NWVmYVx1NGUwMFx1NGUyYVx1NjViMFx1NzY4NFx1NTkxYVx1N2M3Ylx1NTc4Ylx1NzljZFx1N2ZhNFx1NmEyMVx1NTc4YgorX1VJX011bHRpcG9wdWxhdGlvbkVkaXRvcl9sYWJlbD1cdTU5MWFcdTc5Y2RcdTc5Y2RcdTdmYTRcdTZhMjFcdTU3OGJcdTdmMTZcdThmOTFcdTU2NjgKK19VSV9NdWx0aXBvcHVsYXRpb25FZGl0b3JGaWxlbmFtZURlZmF1bHRCYXNlPVx1NjIxMVx1NzY4NAorX1VJX011bHRpcG9wdWxhdGlvbkVkaXRvckZpbGVuYW1lRXh0ZW5zaW9ucz1cdTU5MWFcdTc5Y2RcdTc5Y2RcdTdmYTRcdTc2ODQKK19VSV9XaXphcmRfbGFiZWw9XHU2NWIwXHU1ZWZhCitfV0FSTl9GaWxlbmFtZUV4dGVuc2lvbj1cdTY1ODdcdTRlZjZcdTU0MGRcdTVmYzVcdTk4N2JcdTRlZTUnezB9ICcnXHU3ZWQzXHU1YzNlCitfV0FSTl9GaWxlbmFtZUV4dGVuc2lvbnM9XHU2NTg3XHU0ZWY2XHU1NDBkXHU1ZmM1XHU5ODdiXHU1MTc3XHU2NzA5XHU0ZWU1XHU0ZTBiXHU2MjY5XHU1YzU1XHU1NDBkXHU0ZTRiXHU0ZTAwXHVmZjFhezB9CitfVUlfTW9kZWxPYmplY3Q9Jk1vZGVsIE9iamVjdAorX1VJX1hNTEVuY29kaW5nPSZYTUwgRW5jb2RpbmcKK19VSV9YTUxFbmNvZGluZ0Nob2ljZXM9VVRGLTggQVNDSUkgVVRGLTE2IFVURi0xNkJFIFVURi0xNkxFIElTTy04ODU5LTEKK19VSV9XaXphcmRfaW5pdGlhbF9vYmplY3RfZGVzY3JpcHRpb249XHU5MDA5XHU2MmU5XHU1MjFiXHU1ZWZhXHU0ZTAwXHU0ZTJhXHU2YTIxXHU1NzhiXHU1YmY5XHU4YzYxCitfVUlfRmlsZUNvbmZsaWN0X2xhYmVsPVx1NjU4N1x1NGVmNlx1NTFiMlx1N2E4MQorX1dBUk5fRmlsZUNvbmZsaWN0PVx1NjcwOVx1NjcyYVx1NGZkZFx1NWI1OFx1NzY4NFx1NjZmNFx1NjUzOVx1NGUwZVx1N2YxNlx1OGY5MVx1NTY2OFx1NTkxNlx1NzY4NFx1NjZmNFx1NjUzOVx1NTFiMlx1N2E4MVx1MzAwMlx1NGY2MFx1NjBmM1x1NjUzZVx1NWYwM1x1OGZkOVx1NGUyYVx1N2YxNlx1OGY5MVx1NTY2OFx1NzY4NFx1NjZmNFx1NjUzOVx1NTQxN1x1ZmYxZgorX1VJX011bHRpUG9wdWxhdGlvblNJRGlzZWFzZU1vZGVsX3RyYW5zbWlzc2lvblJhdGVfZmVhdHVyZT1cdTRmMjBcdThmOTNcdTkwMWZcdTczODcKK19VSV9NdWx0aVBvcHVsYXRpb25TSURpc2Vhc2VNb2RlbF9wb3B1bGF0aW9uR3JvdXBzX2ZlYXR1cmU9XHU3OWNkXHU3ZmE0XHU1MjA2XHU3ZWM0CitfVUlfTXVsdGlQb3B1bGF0aW9uU0lEaXNlYXNlTW9kZWxfcmVjb3ZlcnlSYXRlX2ZlYXR1cmU9XHU1ZWI3XHU1OTBkXHU3Mzg3CitfVUlfTXVsdGlQb3B1bGF0aW9uU0lEaXNlYXNlTW9kZWxfaW5mZWN0aW91c01vcnRhbGl0eVJhdGVfZmVhdHVyZT1cdTRmMjBcdTY3ZDNcdTc1YzVcdTZiN2JcdTRlYTFcdTczODcKK19VSV9NdWx0aVBvcHVsYXRpb25TSURpc2Vhc2VNb2RlbF9waHlzaWNhbGx5QWRqYWNlbnRJbmZlY3Rpb3VzUHJvcG9ydGlvbl9mZWF0dXJlPVx1NWI5ZVx1OTY0NVx1NGUwYVx1NzZmOFx1OTBiYlx1NjExZlx1NjdkM1x1NmJkNFx1NGY4YgorX1VJX011bHRpUG9wdWxhdGlvblNJRGlzZWFzZU1vZGVsX3JvYWROZXR3b3JrSW5mZWN0aW91c1Byb3BvcnRpb25fZmVhdHVyZT1cdTkwMWFcdThmYzdcdThkZWZcdTdmNTFcdTYxMWZcdTY3ZDNcdTc2ODRcdTZiZDRcdTRmOGIKK19VSV9NdWx0aVBvcHVsYXRpb25TSVJEaXNlYXNlTW9kZWxfdHlwZT1cdTU5MWFcdTc5Y2RcdTc5Y2RcdTdmYTRTSVJcdTc1YmVcdTc1YzVcdTZhMjFcdTU3OGIKK19VSV9NdWx0aVBvcHVsYXRpb25TRUlSRGlzZWFzZU1vZGVsX3R5cGU9XHU1OTFhXHU3OWNkXHU3OWNkXHU3ZmE0U0VJUlx1NzViZVx1NzVjNVx1NmEyMVx1NTc4YgorX1VJX011bHRpUG9wdWxhdGlvblNJUkRpc2Vhc2VNb2RlbF9pbW11bml0eUxvc3NSYXRlX2ZlYXR1cmU9XHU1MTRkXHU3NWFiXHU2MzVmXHU1OTMxXHU3Mzg3CitfVUlfTXVsdGlQb3B1bGF0aW9uU0VJUkRpc2Vhc2VNb2RlbF9pbmN1YmF0aW9uUmF0ZV9mZWF0dXJlPVx1NWI3NVx1NTMxNlx1NzM4NworX1VJX011bHRpUG9wdWxhdGlvblNJRGlzZWFzZU1vZGVsX2NoYXJhY3RlcmlzdGljTWl4aW5nRGlzdGFuY2VfZmVhdHVyZT1cdTcyNzlcdTVmODFcdTZkZjdcdTU0MDhcdThkZGRcdTc5YmIKK19VSV9NdWx0aVBvcHVsYXRpb25TZWFzb25hbERpc2Vhc2VNb2RlbF90eXBlPVx1NTkxYVx1NzljZFx1NzljZFx1N2ZhNFx1NWI2M1x1ODI4Mlx1NjAyN1x1NzViZVx1NzVjNVx1NmEyMVx1NTc4YgorX1VJX1BvbHlub21pYWxTcGxpbmVGdW5jdGlvbl90eXBlPVx1NTkxYVx1OTg3OVx1NWYwZlx1NjgzN1x1Njc2MVx1NTFmZFx1NjU3MAorX1VJX1NwbGluZV90eXBlPVx1NjgzN1x1Njc2MVx1NTFmZFx1NjU3MAorX1VJX011bHRpUG9wdWxhdGlvblNlYXNvbmFsRGlzZWFzZU1vZGVsX3NwbGluZV9mZWF0dXJlPVx1NjgzN1x1Njc2MVx1NTFmZFx1NjU3MAorX1VJX1BvaW50X3R5cGU9XHU3MGI5CitfVUlfTXVsdGlQb3B1bGF0aW9uU2Vhc29uYWxEaXNlYXNlTW9kZWxfcG9pbnRzX2ZlYXR1cmU9XHU1OTFhXHU3MGI5CitfVUlfUG9pbnRfeF9mZWF0dXJlPVgKK19VSV9Qb2ludF95X2ZlYXR1cmU9WQorX1VJX011bHRpUG9wdWxhdGlvblNlYXNvbmFsRGlzZWFzZU1vZGVsX21vZHVsYXRpb25Qb2ludHNfZmVhdHVyZT1cdThjMDNcdTUyMzZcdTcwYjkKK19VSV9NdWx0aVBvcHVsYXRpb25TZWFzb25hbERpc2Vhc2VNb2RlbF9udW1iZXJPZk1vZHVsYXRpb25Qb2ludHNfZmVhdHVyZT1cdThjMDNcdTUyMzZcdTcwYjlcdTY1NzBcdTc2ZWUKK19VSV9NdWx0aVBvcHVsYXRpb25TZWFzb25hbERpc2Vhc2VNb2RlbF9pbnRlcnBvbGF0aW9uVHlwZV9mZWF0dXJlPVx1NjNkMlx1ODg2NVx1N2M3Ylx1NTc4YgorX1VJX0ludGVycG9sYXRpb25UeXBlX0xJTkVBUl9JTlRFUlBPTEFUSU9OX2xpdGVyYWw9XHU3ZWJmXHU2MDI3XHU2M2QyXHU1MTY1CitfVUlfSW50ZXJwb2xhdGlvblR5cGVfU1BMSU5FX0lOVEVSUE9MQVRJT05fbGl0ZXJhbD1cdTY4MzdcdTY3NjFcdTUxZmRcdTY1NzBcdTYzZDJcdTUxNjVcdTZjZDUKK19VSV9NdWx0aVBvcHVsYXRpb25TZWFzb25hbERpc2Vhc2VNb2RlbF91c2VTcGxpbmVJbnRlcnBvbGF0aW9uX2ZlYXR1cmU9VXNlIFNwbGluZSBJbnRlcnBvbGF0aW9uCmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5tdWx0aXBvcHVsYXRpb24vc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9tdWx0aXBvcHVsYXRpb24vQWN0aXZhdG9yLmphdmEgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5tdWx0aXBvcHVsYXRpb24vc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9tdWx0aXBvcHVsYXRpb24vQWN0aXZhdG9yLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTRiMGIyOAotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLm11bHRpcG9wdWxhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL211bHRpcG9wdWxhdGlvbi9BY3RpdmF0b3IuamF2YQpAQCAtMCwwICsxLDE0NSBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMubXVsdGlwb3B1bGF0aW9uOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TdGF0dXM7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLkNvbnN0YW50czsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5wbHVnaW4uQWJzdHJhY3RVSVBsdWdpbjsKK2ltcG9ydCBvcmcub3NnaS5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dDsKKworLyoqCisgKiBUaGUgYWN0aXZhdG9yIGNsYXNzIGNvbnRyb2xzIHRoZSBwbHVnLWluIGxpZmUgY3ljbGUKKyAqLworcHVibGljIGNsYXNzIEFjdGl2YXRvciBleHRlbmRzIEFic3RyYWN0VUlQbHVnaW4geworCisJLyoqCisJICogVGhlIHBsdWctaW4gSUQKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBQTFVHSU5fSUQgPSBDb25zdGFudHMuSURfUk9PVCArICIuZGlzZWFzZW1vZGVscy5tdWx0aXBvcHVsYXRpb24iOworCisJLy8gVGhlIHNoYXJlZCBpbnN0YW5jZQorCXByaXZhdGUgc3RhdGljIEFjdGl2YXRvciBwbHVnaW47CisKKwkvKioKKwkgKiBUaGUgY29uc3RydWN0b3IKKwkgKi8KKwlwdWJsaWMgQWN0aXZhdG9yKCkgeworCQlwbHVnaW4gPSB0aGlzOworCX0KKworCS8qKgorCSAqIEBwYXJhbSBjb250ZXh0CisJICogQHRocm93cyBFeGNlcHRpb24KKwkgKi8KKwlwdWJsaWMgdm9pZCBzdGFydChCdW5kbGVDb250ZXh0IGNvbnRleHQpIHRocm93cyBFeGNlcHRpb24geworCQlzdXBlci5zdGFydChjb250ZXh0KTsKKwkJLy8gV2UgY3JlYXRlIHRoZXNlIGluc3RhbmNlcyBzbyB0aGF0IHRoZWlyIGNvbnN0cnVjdG9ycyBydW4gYW5kIHRoZXkKKwkJLy8gdGhlbiBhZGQgdGhlbXNlbHZlcyB0byBhIGNvbGxlY3Rpb24gb2YgZmFjdG9yaWVzIG1haW50YWluZWQgYnkgdGhlCisJCS8vIGZhY3RvcnkgaW50ZXJmYWNlcyB0aGV5IGltcGxlbWVudCByZXNwZWN0aXZlbHkuCQorCX0gLy8gCisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QbHVnaW4jc3RvcChvcmcub3NnaS5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dCkKKwkgKi8KKwlwdWJsaWMgdm9pZCBzdG9wKEJ1bmRsZUNvbnRleHQgY29udGV4dCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCXBsdWdpbiA9IG51bGw7CisJCXN1cGVyLnN0b3AoY29udGV4dCk7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgc2hhcmVkIGluc3RhbmNlCisJICogCisJICogQHJldHVybiB0aGUgc2hhcmVkIGluc3RhbmNlCisJICovCisJcHVibGljIHN0YXRpYyBBY3RpdmF0b3IgZ2V0RGVmYXVsdCgpIHsKKwkJcmV0dXJuIHBsdWdpbjsKKwl9CisKKwkvKioKKwkgKiBMb2cgYW4gZXJyb3IgdG8gdGhlIElMb2cgZm9yIHRoaXMgcGx1Z2luCisJICogCisJICogQHBhcmFtIG1lc3NhZ2UKKwkgKiAgICAgICAgICAgIHRoZSBsb2NhbGl6ZWQgZXJyb3IgbWVzc2FnZSB0ZXh0CisJICogQHBhcmFtIGV4Y2VwdGlvbgorCSAqICAgICAgICAgICAgdGhlIGFzc29jaWF0ZWQgZXhjZXB0aW9uLCBvciBudWxsCisJICovCisJcHVibGljIHN0YXRpYyB2b2lkIGxvZ0Vycm9yKFN0cmluZyBtZXNzYWdlLCBUaHJvd2FibGUgZXhjZXB0aW9uKSB7CisJCS8vIFJ1bm5pbmcgYXMgYSBwbHVnaW4/CisJCWlmIChwbHVnaW4gIT0gbnVsbCkgeworCQkJLy8gWWVzCisJCQlwbHVnaW4uZ2V0TG9nKCkubG9nKAorCQkJCQluZXcgU3RhdHVzKElTdGF0dXMuRVJST1IsIHBsdWdpbi5nZXRCdW5kbGUoKQorCQkJCQkJCS5nZXRTeW1ib2xpY05hbWUoKSwgMCwgbWVzc2FnZSwgZXhjZXB0aW9uKSk7CisJCX0gZWxzZSB7CisJCQlTeXN0ZW0uZXJyLnByaW50bG4obWVzc2FnZSk7CisJCQkvLyBFeGNlcHRpb24/CisJCQlpZiAoZXhjZXB0aW9uICE9IG51bGwpIHsKKwkJCQkvLyBZZXMKKwkJCQlTeXN0ZW0uZXJyLnByaW50bG4oZXhjZXB0aW9uLmdldE1lc3NhZ2UoKSk7CisJCQkJZXhjZXB0aW9uLnByaW50U3RhY2tUcmFjZShTeXN0ZW0uZXJyKTsKKwkJCX0KKwkJfQorCisJfSAvLyBsb2dFcnJvcgorCisJLyoqCisJICogTG9nIGluZm9ybWF0aW9uIHRvIHRoZSBJTG9nIGZvciB0aGlzIHBsdWdpbgorCSAqIAorCSAqIEBwYXJhbSBtZXNzYWdlCisJICogICAgICAgICAgICB0aGUgbG9jYWxpemVkIGluZm9ybWF0aW9uIG1lc3NhZ2UgdGV4dAorCSAqIEBwYXJhbSBleGNlcHRpb24KKwkgKiAgICAgICAgICAgIHRoZSBhc3NvY2lhdGVkIGV4Y2VwdGlvbiwgb3IgbnVsbAorCSAqLworCXB1YmxpYyBzdGF0aWMgdm9pZCBsb2dJbmZvcm1hdGlvbihTdHJpbmcgbWVzc2FnZSwgVGhyb3dhYmxlIGV4Y2VwdGlvbikgeworCQkvLyBEbyB3ZSBoYXZlIGEgcGx1Z2luPworCQlpZiAocGx1Z2luICE9IG51bGwpIHsKKwkJCS8vIFllcworCQkJcGx1Z2luLmdldExvZygpLmxvZygKKwkJCQkJbmV3IFN0YXR1cyhJU3RhdHVzLklORk8sIHBsdWdpbi5nZXRCdW5kbGUoKS5nZXRTeW1ib2xpY05hbWUoKSwKKwkJCQkJCQkwLCBtZXNzYWdlLCBleGNlcHRpb24pKTsKKwkJfQorCQllbHNlIHsKKwkJCS8vIE5vCisJCQlTeXN0ZW0ub3V0LnByaW50bG4obWVzc2FnZSk7CisJCQkvLyBFeGNlcHRpb24/CisJCQlpZiAoZXhjZXB0aW9uICE9IG51bGwpIHsKKwkJCQkvLyBZZXMKKwkJCQlTeXN0ZW0ub3V0LnByaW50bG4oZXhjZXB0aW9uLmdldE1lc3NhZ2UoKSk7CisJCQl9IC8vIGlmIAorCQl9CisJfSAvLyBsb2dJbmZvcm1hdGlvbgorCQorCQorCS8qKgorCSAqIExvZyBpbmZvcm1hdGlvbiB0byB0aGUgSUxvZyBmb3IgdGhpcyBwbHVnaW4KKwkgKiBUaGUgbWV0aG9kIGlzIG92ZXJsb2FkZWQgdG8gYWxsb3cgZm9yIGxvZ0luZm9ybWF0aW9uIHdpdGhvdXQgYW4gZXJyb3IgCisJICogbWV0aG9kIHNldHMgdGhlIGVycm9yIHRvIG51bGwuIFRoaXMgc2hvdWxkIGJlIHVzZWQgaW5zdGVhZCBvZiBTeXN0ZW0ub3V0LnByaW50bG4KKwkgKiB0aHJvdWdob3V0IHRoZSBjb2RlLgorCSAqIEBwYXJhbSBtZXNzYWdlCisJICogICAgICAgICAgICB0aGUgbG9jYWxpemVkIGluZm9ybWF0aW9uIG1lc3NhZ2UgdGV4dAorCSAqCisJICovCisJcHVibGljIHN0YXRpYyB2b2lkIGxvZ0luZm9ybWF0aW9uKFN0cmluZyBtZXNzYWdlKSB7CisJCS8vIERvIHdlIGhhdmUgYSBwbHVnaW4/CisJCWlmIChwbHVnaW4gIT0gbnVsbCkgeworCQkJLy8gWWVzCisJCQlwbHVnaW4uZ2V0TG9nKCkubG9nKAorCQkJCQluZXcgU3RhdHVzKElTdGF0dXMuSU5GTywgcGx1Z2luLmdldEJ1bmRsZSgpLmdldFN5bWJvbGljTmFtZSgpLAorCQkJCQkJCTAsIG1lc3NhZ2UsIG51bGwpKTsKKwkJfQorCQllbHNlIHsKKwkJCS8vIE5vCisJCQlTeXN0ZW0ub3V0LnByaW50bG4obWVzc2FnZSk7CisJCX0KKwl9IC8vIGxvZ0luZm9ybWF0aW9uCit9IC8vIEFjdGl2YXRvcgpkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMubXVsdGlwb3B1bGF0aW9uL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvbXVsdGlwb3B1bGF0aW9uL011bHRpUG9wdWxhdGlvblNFSVJEaXNlYXNlTW9kZWwuamF2YSBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLm11bHRpcG9wdWxhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL211bHRpcG9wdWxhdGlvbi9NdWx0aVBvcHVsYXRpb25TRUlSRGlzZWFzZU1vZGVsLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTVkNzczYQotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLm11bHRpcG9wdWxhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL211bHRpcG9wdWxhdGlvbi9NdWx0aVBvcHVsYXRpb25TRUlSRGlzZWFzZU1vZGVsLmphdmEKQEAgLTAsMCArMSw1OCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOSwyMDEwIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLm11bHRpcG9wdWxhdGlvbjsKKworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uRG91YmxlVmFsdWVMaXN0OworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiBBIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5NdWx0aSBQb3B1bGF0aW9uIFNFSVIgRGlzZWFzZSBNb2RlbDwvYj48L2VtPicuCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqCisgKiA8cD4KKyAqIFRoZSBmb2xsb3dpbmcgZmVhdHVyZXMgYXJlIHN1cHBvcnRlZDoKKyAqIDx1bD4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMubXVsdGlwb3B1bGF0aW9uLk11bHRpUG9wdWxhdGlvblNFSVJEaXNlYXNlTW9kZWwjZ2V0SW5jdWJhdGlvblJhdGUgPGVtPkluY3ViYXRpb24gUmF0ZTwvZW0+fTwvbGk+CisgKiA8L3VsPgorICogPC9wPgorICoKKyAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLm11bHRpcG9wdWxhdGlvbi5NdWx0aXBvcHVsYXRpb25QYWNrYWdlI2dldE11bHRpUG9wdWxhdGlvblNFSVJEaXNlYXNlTW9kZWwoKQorICogQG1vZGVsCisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBpbnRlcmZhY2UgTXVsdGlQb3B1bGF0aW9uU0VJUkRpc2Vhc2VNb2RlbCBleHRlbmRzIE11bHRpUG9wdWxhdGlvblNJUkRpc2Vhc2VNb2RlbCB7CisJLyoqCisJICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+SW5jdWJhdGlvbiBSYXRlPC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8cD4KKwkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5JbmN1YmF0aW9uIFJhdGU8L2VtPicgcmVmZXJlbmNlIGlzbid0IGNsZWFyLAorCSAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4KKwkgKiA8L3A+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+SW5jdWJhdGlvbiBSYXRlPC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZS4KKwkgKiBAc2VlICNzZXRJbmN1YmF0aW9uUmF0ZShEb3VibGVWYWx1ZUxpc3QpCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMubXVsdGlwb3B1bGF0aW9uLk11bHRpcG9wdWxhdGlvblBhY2thZ2UjZ2V0TXVsdGlQb3B1bGF0aW9uU0VJUkRpc2Vhc2VNb2RlbF9JbmN1YmF0aW9uUmF0ZSgpCisJICogQG1vZGVsIGNvbnRhaW5tZW50PSJ0cnVlIiByZXF1aXJlZD0idHJ1ZSIKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRG91YmxlVmFsdWVMaXN0IGdldEluY3ViYXRpb25SYXRlKCk7CisKKwkvKioKKwkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMubXVsdGlwb3B1bGF0aW9uLk11bHRpUG9wdWxhdGlvblNFSVJEaXNlYXNlTW9kZWwjZ2V0SW5jdWJhdGlvblJhdGUgPGVtPkluY3ViYXRpb24gUmF0ZTwvZW0+fScgY29udGFpbm1lbnQgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+SW5jdWJhdGlvbiBSYXRlPC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZS4KKwkgKiBAc2VlICNnZXRJbmN1YmF0aW9uUmF0ZSgpCisJICogQGdlbmVyYXRlZAorCSAqLworCXZvaWQgc2V0SW5jdWJhdGlvblJhdGUoRG91YmxlVmFsdWVMaXN0IHZhbHVlKTsKKworfSAvLyBNdWx0aVBvcHVsYXRpb25TRUlSRGlzZWFzZU1vZGVsCmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5tdWx0aXBvcHVsYXRpb24vc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9tdWx0aXBvcHVsYXRpb24vTXVsdGlQb3B1bGF0aW9uU0lEaXNlYXNlTW9kZWwuamF2YSBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLm11bHRpcG9wdWxhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL211bHRpcG9wdWxhdGlvbi9NdWx0aVBvcHVsYXRpb25TSURpc2Vhc2VNb2RlbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI2NDdkZTkKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5tdWx0aXBvcHVsYXRpb24vc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9tdWx0aXBvcHVsYXRpb24vTXVsdGlQb3B1bGF0aW9uU0lEaXNlYXNlTW9kZWwuamF2YQpAQCAtMCwwICsxLDE0MyBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMubXVsdGlwb3B1bGF0aW9uOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDEwIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uRG91YmxlVmFsdWVMaXN0OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uRG91YmxlVmFsdWVNYXRyaXg7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5TdHJpbmdWYWx1ZUxpc3Q7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkRGlzZWFzZU1vZGVsOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiBBIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5NdWx0aSBQb3B1bGF0aW9uIFNJIERpc2Vhc2UgTW9kZWw8L2I+PC9lbT4nLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKgorICogPHA+CisgKiBUaGUgZm9sbG93aW5nIGZlYXR1cmVzIGFyZSBzdXBwb3J0ZWQ6CisgKiA8dWw+CisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLm11bHRpcG9wdWxhdGlvbi5NdWx0aVBvcHVsYXRpb25TSURpc2Vhc2VNb2RlbCNnZXRQb3B1bGF0aW9uR3JvdXBzIDxlbT5Qb3B1bGF0aW9uIEdyb3VwczwvZW0+fTwvbGk+CisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLm11bHRpcG9wdWxhdGlvbi5NdWx0aVBvcHVsYXRpb25TSURpc2Vhc2VNb2RlbCNnZXRUcmFuc21pc3Npb25SYXRlIDxlbT5UcmFuc21pc3Npb24gUmF0ZTwvZW0+fTwvbGk+CisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLm11bHRpcG9wdWxhdGlvbi5NdWx0aVBvcHVsYXRpb25TSURpc2Vhc2VNb2RlbCNnZXRSZWNvdmVyeVJhdGUgPGVtPlJlY292ZXJ5IFJhdGU8L2VtPn08L2xpPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5tdWx0aXBvcHVsYXRpb24uTXVsdGlQb3B1bGF0aW9uU0lEaXNlYXNlTW9kZWwjZ2V0SW5mZWN0aW91c01vcnRhbGl0eVJhdGUgPGVtPkluZmVjdGlvdXMgTW9ydGFsaXR5IFJhdGU8L2VtPn08L2xpPgorICogPC91bD4KKyAqIDwvcD4KKyAqCisgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5tdWx0aXBvcHVsYXRpb24uTXVsdGlwb3B1bGF0aW9uUGFja2FnZSNnZXRNdWx0aVBvcHVsYXRpb25TSURpc2Vhc2VNb2RlbCgpCisgKiBAbW9kZWwKKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGludGVyZmFjZSBNdWx0aVBvcHVsYXRpb25TSURpc2Vhc2VNb2RlbCBleHRlbmRzIFN0YW5kYXJkRGlzZWFzZU1vZGVsIHsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPlRyYW5zbWlzc2lvbiBSYXRlPC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8cD4KKwkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5UcmFuc21pc3Npb24gUmF0ZTwvZW0+JyBhdHRyaWJ1dGUgaXNuJ3QgY2xlYXIsCisJICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLgorCSAqIDwvcD4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5UcmFuc21pc3Npb24gUmF0ZTwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UuCisJICogQHNlZSAjc2V0VHJhbnNtaXNzaW9uUmF0ZShEb3VibGVWYWx1ZU1hdHJpeCkKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5tdWx0aXBvcHVsYXRpb24uTXVsdGlwb3B1bGF0aW9uUGFja2FnZSNnZXRNdWx0aVBvcHVsYXRpb25TSURpc2Vhc2VNb2RlbF9UcmFuc21pc3Npb25SYXRlKCkKKwkgKiBAbW9kZWwgY29udGFpbm1lbnQ9InRydWUiIHJlcXVpcmVkPSJ0cnVlIgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlEb3VibGVWYWx1ZU1hdHJpeCBnZXRUcmFuc21pc3Npb25SYXRlKCk7CisKKwkvKioKKwkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMubXVsdGlwb3B1bGF0aW9uLk11bHRpUG9wdWxhdGlvblNJRGlzZWFzZU1vZGVsI2dldFRyYW5zbWlzc2lvblJhdGUgPGVtPlRyYW5zbWlzc2lvbiBSYXRlPC9lbT59JyBjb250YWlubWVudCByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5UcmFuc21pc3Npb24gUmF0ZTwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UuCisJICogQHNlZSAjZ2V0VHJhbnNtaXNzaW9uUmF0ZSgpCisJICogQGdlbmVyYXRlZAorCSAqLworCXZvaWQgc2V0VHJhbnNtaXNzaW9uUmF0ZShEb3VibGVWYWx1ZU1hdHJpeCB2YWx1ZSk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5SZWNvdmVyeSBSYXRlPC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8cD4KKwkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5SZWNvdmVyeSBSYXRlPC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBpc24ndCBjbGVhciwKKwkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uCisJICogPC9wPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPlJlY292ZXJ5IFJhdGU8L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlLgorCSAqIEBzZWUgI3NldFJlY292ZXJ5UmF0ZShEb3VibGVWYWx1ZUxpc3QpCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMubXVsdGlwb3B1bGF0aW9uLk11bHRpcG9wdWxhdGlvblBhY2thZ2UjZ2V0TXVsdGlQb3B1bGF0aW9uU0lEaXNlYXNlTW9kZWxfUmVjb3ZlcnlSYXRlKCkKKwkgKiBAbW9kZWwgY29udGFpbm1lbnQ9InRydWUiIHJlcXVpcmVkPSJ0cnVlIgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlEb3VibGVWYWx1ZUxpc3QgZ2V0UmVjb3ZlcnlSYXRlKCk7CisKKwkvKioKKwkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMubXVsdGlwb3B1bGF0aW9uLk11bHRpUG9wdWxhdGlvblNJRGlzZWFzZU1vZGVsI2dldFJlY292ZXJ5UmF0ZSA8ZW0+UmVjb3ZlcnkgUmF0ZTwvZW0+fScgY29udGFpbm1lbnQgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+UmVjb3ZlcnkgUmF0ZTwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UuCisJICogQHNlZSAjZ2V0UmVjb3ZlcnlSYXRlKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJdm9pZCBzZXRSZWNvdmVyeVJhdGUoRG91YmxlVmFsdWVMaXN0IHZhbHVlKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPkluZmVjdGlvdXMgTW9ydGFsaXR5IFJhdGU8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDxwPgorCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPkluZmVjdGlvdXMgTW9ydGFsaXR5IFJhdGU8L2VtPicgcmVmZXJlbmNlIGlzbid0IGNsZWFyLAorCSAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4KKwkgKiA8L3A+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+SW5mZWN0aW91cyBNb3J0YWxpdHkgUmF0ZTwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UuCisJICogQHNlZSAjc2V0SW5mZWN0aW91c01vcnRhbGl0eVJhdGUoRG91YmxlVmFsdWVMaXN0KQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLm11bHRpcG9wdWxhdGlvbi5NdWx0aXBvcHVsYXRpb25QYWNrYWdlI2dldE11bHRpUG9wdWxhdGlvblNJRGlzZWFzZU1vZGVsX0luZmVjdGlvdXNNb3J0YWxpdHlSYXRlKCkKKwkgKiBAbW9kZWwgY29udGFpbm1lbnQ9InRydWUiIHJlcXVpcmVkPSJ0cnVlIgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlEb3VibGVWYWx1ZUxpc3QgZ2V0SW5mZWN0aW91c01vcnRhbGl0eVJhdGUoKTsKKworCS8qKgorCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5tdWx0aXBvcHVsYXRpb24uTXVsdGlQb3B1bGF0aW9uU0lEaXNlYXNlTW9kZWwjZ2V0SW5mZWN0aW91c01vcnRhbGl0eVJhdGUgPGVtPkluZmVjdGlvdXMgTW9ydGFsaXR5IFJhdGU8L2VtPn0nIGNvbnRhaW5tZW50IHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPkluZmVjdGlvdXMgTW9ydGFsaXR5IFJhdGU8L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlLgorCSAqIEBzZWUgI2dldEluZmVjdGlvdXNNb3J0YWxpdHlSYXRlKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJdm9pZCBzZXRJbmZlY3Rpb3VzTW9ydGFsaXR5UmF0ZShEb3VibGVWYWx1ZUxpc3QgdmFsdWUpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+UG9wdWxhdGlvbiBHcm91cHM8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDxwPgorCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPlBvcHVsYXRpb24gR3JvdXBzPC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBpc24ndCBjbGVhciwKKwkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uCisJICogPC9wPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPlBvcHVsYXRpb24gR3JvdXBzPC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZS4KKwkgKiBAc2VlICNzZXRQb3B1bGF0aW9uR3JvdXBzKFN0cmluZ1ZhbHVlTGlzdCkKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5tdWx0aXBvcHVsYXRpb24uTXVsdGlwb3B1bGF0aW9uUGFja2FnZSNnZXRNdWx0aVBvcHVsYXRpb25TSURpc2Vhc2VNb2RlbF9Qb3B1bGF0aW9uR3JvdXBzKCkKKwkgKiBAbW9kZWwgY29udGFpbm1lbnQ9InRydWUiIHJlcXVpcmVkPSJ0cnVlIgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlTdHJpbmdWYWx1ZUxpc3QgZ2V0UG9wdWxhdGlvbkdyb3VwcygpOworCisJLyoqCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLm11bHRpcG9wdWxhdGlvbi5NdWx0aVBvcHVsYXRpb25TSURpc2Vhc2VNb2RlbCNnZXRQb3B1bGF0aW9uR3JvdXBzIDxlbT5Qb3B1bGF0aW9uIEdyb3VwczwvZW0+fScgY29udGFpbm1lbnQgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+UG9wdWxhdGlvbiBHcm91cHM8L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlLgorCSAqIEBzZWUgI2dldFBvcHVsYXRpb25Hcm91cHMoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwl2b2lkIHNldFBvcHVsYXRpb25Hcm91cHMoU3RyaW5nVmFsdWVMaXN0IHZhbHVlKTsKK30gLy8gTXVsdGlQb3B1bGF0aW9uU0lEaXNlYXNlTW9kZWwKZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLm11bHRpcG9wdWxhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL211bHRpcG9wdWxhdGlvbi9NdWx0aVBvcHVsYXRpb25TSVJEaXNlYXNlTW9kZWwuamF2YSBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLm11bHRpcG9wdWxhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL211bHRpcG9wdWxhdGlvbi9NdWx0aVBvcHVsYXRpb25TSVJEaXNlYXNlTW9kZWwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMjU4MWQ5Ci0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMubXVsdGlwb3B1bGF0aW9uL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvbXVsdGlwb3B1bGF0aW9uL011bHRpUG9wdWxhdGlvblNJUkRpc2Vhc2VNb2RlbC5qYXZhCkBAIC0wLDAgKzEsNTggQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDksMjAxMCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5tdWx0aXBvcHVsYXRpb247CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLkRvdWJsZVZhbHVlTGlzdDsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogQSByZXByZXNlbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+TXVsdGkgUG9wdWxhdGlvbiBTSVIgRGlzZWFzZSBNb2RlbDwvYj48L2VtPicuCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqCisgKiA8cD4KKyAqIFRoZSBmb2xsb3dpbmcgZmVhdHVyZXMgYXJlIHN1cHBvcnRlZDoKKyAqIDx1bD4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMubXVsdGlwb3B1bGF0aW9uLk11bHRpUG9wdWxhdGlvblNJUkRpc2Vhc2VNb2RlbCNnZXRJbW11bml0eUxvc3NSYXRlIDxlbT5JbW11bml0eSBMb3NzIFJhdGU8L2VtPn08L2xpPgorICogPC91bD4KKyAqIDwvcD4KKyAqCisgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5tdWx0aXBvcHVsYXRpb24uTXVsdGlwb3B1bGF0aW9uUGFja2FnZSNnZXRNdWx0aVBvcHVsYXRpb25TSVJEaXNlYXNlTW9kZWwoKQorICogQG1vZGVsCisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBpbnRlcmZhY2UgTXVsdGlQb3B1bGF0aW9uU0lSRGlzZWFzZU1vZGVsIGV4dGVuZHMgTXVsdGlQb3B1bGF0aW9uU0lEaXNlYXNlTW9kZWwgeworCS8qKgorCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPkltbXVuaXR5IExvc3MgUmF0ZTwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPHA+CisJICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+SW1tdW5pdHkgTG9zcyBSYXRlPC9lbT4nIHJlZmVyZW5jZSBpc24ndCBjbGVhciwKKwkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uCisJICogPC9wPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPkltbXVuaXR5IExvc3MgUmF0ZTwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UuCisJICogQHNlZSAjc2V0SW1tdW5pdHlMb3NzUmF0ZShEb3VibGVWYWx1ZUxpc3QpCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMubXVsdGlwb3B1bGF0aW9uLk11bHRpcG9wdWxhdGlvblBhY2thZ2UjZ2V0TXVsdGlQb3B1bGF0aW9uU0lSRGlzZWFzZU1vZGVsX0ltbXVuaXR5TG9zc1JhdGUoKQorCSAqIEBtb2RlbCBjb250YWlubWVudD0idHJ1ZSIgcmVxdWlyZWQ9InRydWUiCisJICogQGdlbmVyYXRlZAorCSAqLworCURvdWJsZVZhbHVlTGlzdCBnZXRJbW11bml0eUxvc3NSYXRlKCk7CisKKwkvKioKKwkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMubXVsdGlwb3B1bGF0aW9uLk11bHRpUG9wdWxhdGlvblNJUkRpc2Vhc2VNb2RlbCNnZXRJbW11bml0eUxvc3NSYXRlIDxlbT5JbW11bml0eSBMb3NzIFJhdGU8L2VtPn0nIGNvbnRhaW5tZW50IHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPkltbXVuaXR5IExvc3MgUmF0ZTwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UuCisJICogQHNlZSAjZ2V0SW1tdW5pdHlMb3NzUmF0ZSgpCisJICogQGdlbmVyYXRlZAorCSAqLworCXZvaWQgc2V0SW1tdW5pdHlMb3NzUmF0ZShEb3VibGVWYWx1ZUxpc3QgdmFsdWUpOworCit9IC8vIE11bHRpUG9wdWxhdGlvblNJUkRpc2Vhc2VNb2RlbApkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMubXVsdGlwb3B1bGF0aW9uL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvbXVsdGlwb3B1bGF0aW9uL011bHRpUG9wdWxhdGlvblNlYXNvbmFsRGlzZWFzZU1vZGVsLmphdmEgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5tdWx0aXBvcHVsYXRpb24vc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9tdWx0aXBvcHVsYXRpb24vTXVsdGlQb3B1bGF0aW9uU2Vhc29uYWxEaXNlYXNlTW9kZWwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40Yzc0MWNlCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMubXVsdGlwb3B1bGF0aW9uL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvbXVsdGlwb3B1bGF0aW9uL011bHRpUG9wdWxhdGlvblNlYXNvbmFsRGlzZWFzZU1vZGVsLmphdmEKQEAgLTAsMCArMSw4NiBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMubXVsdGlwb3B1bGF0aW9uOw0KKw0KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIA0KKyAqIENvcHlyaWdodCAoYykgMjAxMSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4gDQorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyANCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgDQorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQgDQorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwgDQorICogDQorICogQ29udHJpYnV0b3JzOiANCisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIA0KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KKw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLkRvdWJsZVZhbHVlTWF0cml4Ow0KKw0KKy8qKg0KKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorICogQSByZXByZXNlbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+TXVsdGkgUG9wdWxhdGlvbiBTZWFzb25hbCBEaXNlYXNlIE1vZGVsPC9iPjwvZW0+Jy4NCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisgKg0KKyAqIDxwPg0KKyAqIFRoZSBmb2xsb3dpbmcgZmVhdHVyZXMgYXJlIHN1cHBvcnRlZDoNCisgKiA8dWw+DQorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5tdWx0aXBvcHVsYXRpb24uTXVsdGlQb3B1bGF0aW9uU2Vhc29uYWxEaXNlYXNlTW9kZWwjZ2V0TW9kdWxhdGlvblBvaW50cyA8ZW0+TW9kdWxhdGlvbiBQb2ludHM8L2VtPn08L2xpPg0KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMubXVsdGlwb3B1bGF0aW9uLk11bHRpUG9wdWxhdGlvblNlYXNvbmFsRGlzZWFzZU1vZGVsI2lzVXNlU3BsaW5lSW50ZXJwb2xhdGlvbiA8ZW0+VXNlIFNwbGluZSBJbnRlcnBvbGF0aW9uPC9lbT59PC9saT4NCisgKiA8L3VsPg0KKyAqIDwvcD4NCisgKg0KKyAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLm11bHRpcG9wdWxhdGlvbi5NdWx0aXBvcHVsYXRpb25QYWNrYWdlI2dldE11bHRpUG9wdWxhdGlvblNlYXNvbmFsRGlzZWFzZU1vZGVsKCkNCisgKiBAbW9kZWwNCisgKiBAZ2VuZXJhdGVkDQorICovDQorcHVibGljIGludGVyZmFjZSBNdWx0aVBvcHVsYXRpb25TZWFzb25hbERpc2Vhc2VNb2RlbCBleHRlbmRzIE11bHRpUG9wdWxhdGlvblNFSVJEaXNlYXNlTW9kZWwgew0KKwkvKioNCisJICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+TW9kdWxhdGlvbiBQb2ludHM8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPHA+DQorCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPk1vZHVsYXRpb24gUG9pbnRzPC9lbT4nIHJlZmVyZW5jZSBpc24ndCBjbGVhciwNCisJICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLg0KKwkgKiA8L3A+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5Nb2R1bGF0aW9uIFBvaW50czwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UuDQorCSAqIEBzZWUgI3NldE1vZHVsYXRpb25Qb2ludHMoRG91YmxlVmFsdWVNYXRyaXgpDQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLm11bHRpcG9wdWxhdGlvbi5NdWx0aXBvcHVsYXRpb25QYWNrYWdlI2dldE11bHRpUG9wdWxhdGlvblNlYXNvbmFsRGlzZWFzZU1vZGVsX01vZHVsYXRpb25Qb2ludHMoKQ0KKwkgKiBAbW9kZWwgY29udGFpbm1lbnQ9InRydWUiIHJlcXVpcmVkPSJ0cnVlIg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlEb3VibGVWYWx1ZU1hdHJpeCBnZXRNb2R1bGF0aW9uUG9pbnRzKCk7DQorDQorCS8qKg0KKwkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMubXVsdGlwb3B1bGF0aW9uLk11bHRpUG9wdWxhdGlvblNlYXNvbmFsRGlzZWFzZU1vZGVsI2dldE1vZHVsYXRpb25Qb2ludHMgPGVtPk1vZHVsYXRpb24gUG9pbnRzPC9lbT59JyBjb250YWlubWVudCByZWZlcmVuY2UuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5Nb2R1bGF0aW9uIFBvaW50czwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UuDQorCSAqIEBzZWUgI2dldE1vZHVsYXRpb25Qb2ludHMoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwl2b2lkIHNldE1vZHVsYXRpb25Qb2ludHMoRG91YmxlVmFsdWVNYXRyaXggdmFsdWUpOw0KKw0KKwkvKioNCisJICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+VXNlIFNwbGluZSBJbnRlcnBvbGF0aW9uPC9iPjwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDxwPg0KKwkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5Vc2UgU3BsaW5lIEludGVycG9sYXRpb248L2VtPicgYXR0cmlidXRlIGlzbid0IGNsZWFyLA0KKwkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uDQorCSAqIDwvcD4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPlVzZSBTcGxpbmUgSW50ZXJwb2xhdGlvbjwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIEBzZWUgI3NldFVzZVNwbGluZUludGVycG9sYXRpb24oYm9vbGVhbikNCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMubXVsdGlwb3B1bGF0aW9uLk11bHRpcG9wdWxhdGlvblBhY2thZ2UjZ2V0TXVsdGlQb3B1bGF0aW9uU2Vhc29uYWxEaXNlYXNlTW9kZWxfVXNlU3BsaW5lSW50ZXJwb2xhdGlvbigpDQorCSAqIEBtb2RlbA0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlib29sZWFuIGlzVXNlU3BsaW5lSW50ZXJwb2xhdGlvbigpOw0KKw0KKwkvKioNCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLm11bHRpcG9wdWxhdGlvbi5NdWx0aVBvcHVsYXRpb25TZWFzb25hbERpc2Vhc2VNb2RlbCNpc1VzZVNwbGluZUludGVycG9sYXRpb24gPGVtPlVzZSBTcGxpbmUgSW50ZXJwb2xhdGlvbjwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+VXNlIFNwbGluZSBJbnRlcnBvbGF0aW9uPC9lbT4nIGF0dHJpYnV0ZS4NCisJICogQHNlZSAjaXNVc2VTcGxpbmVJbnRlcnBvbGF0aW9uKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJdm9pZCBzZXRVc2VTcGxpbmVJbnRlcnBvbGF0aW9uKGJvb2xlYW4gdmFsdWUpOw0KKw0KK30gLy8gTXVsdGlQb3B1bGF0aW9uU2Vhc29uYWxEaXNlYXNlTW9kZWwNCmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5tdWx0aXBvcHVsYXRpb24vc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9tdWx0aXBvcHVsYXRpb24vTXVsdGlwb3B1bGF0aW9uRmFjdG9yeS5qYXZhIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMubXVsdGlwb3B1bGF0aW9uL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvbXVsdGlwb3B1bGF0aW9uL011bHRpcG9wdWxhdGlvbkZhY3RvcnkuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMjQ5NDc5Ci0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMubXVsdGlwb3B1bGF0aW9uL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvbXVsdGlwb3B1bGF0aW9uL011bHRpcG9wdWxhdGlvbkZhY3RvcnkuamF2YQpAQCAtMCwwICsxLDc4IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5tdWx0aXBvcHVsYXRpb247CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTAgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVGYWN0b3J5OworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiBUaGUgPGI+RmFjdG9yeTwvYj4gZm9yIHRoZSBtb2RlbC4KKyAqIEl0IHByb3ZpZGVzIGEgY3JlYXRlIG1ldGhvZCBmb3IgZWFjaCBub24tYWJzdHJhY3QgY2xhc3Mgb2YgdGhlIG1vZGVsLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5tdWx0aXBvcHVsYXRpb24uTXVsdGlwb3B1bGF0aW9uUGFja2FnZQorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgaW50ZXJmYWNlIE11bHRpcG9wdWxhdGlvbkZhY3RvcnkgZXh0ZW5kcyBFRmFjdG9yeSB7CisJLyoqCisJICogVGhlIHNpbmdsZXRvbiBpbnN0YW5jZSBvZiB0aGUgZmFjdG9yeS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlNdWx0aXBvcHVsYXRpb25GYWN0b3J5IGVJTlNUQU5DRSA9IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5tdWx0aXBvcHVsYXRpb24uaW1wbC5NdWx0aXBvcHVsYXRpb25GYWN0b3J5SW1wbC5pbml0KCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPk11bHRpIFBvcHVsYXRpb24gU0kgRGlzZWFzZSBNb2RlbDwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+TXVsdGkgUG9wdWxhdGlvbiBTSSBEaXNlYXNlIE1vZGVsPC9lbT4nLgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlNdWx0aVBvcHVsYXRpb25TSURpc2Vhc2VNb2RlbCBjcmVhdGVNdWx0aVBvcHVsYXRpb25TSURpc2Vhc2VNb2RlbCgpOworCisJLyoqCisJICogUmV0dXJucyBhIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5NdWx0aSBQb3B1bGF0aW9uIFNJUiBEaXNlYXNlIE1vZGVsPC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiBhIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5NdWx0aSBQb3B1bGF0aW9uIFNJUiBEaXNlYXNlIE1vZGVsPC9lbT4nLgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlNdWx0aVBvcHVsYXRpb25TSVJEaXNlYXNlTW9kZWwgY3JlYXRlTXVsdGlQb3B1bGF0aW9uU0lSRGlzZWFzZU1vZGVsKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPk11bHRpIFBvcHVsYXRpb24gU0VJUiBEaXNlYXNlIE1vZGVsPC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiBhIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5NdWx0aSBQb3B1bGF0aW9uIFNFSVIgRGlzZWFzZSBNb2RlbDwvZW0+Jy4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJTXVsdGlQb3B1bGF0aW9uU0VJUkRpc2Vhc2VNb2RlbCBjcmVhdGVNdWx0aVBvcHVsYXRpb25TRUlSRGlzZWFzZU1vZGVsKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPk11bHRpIFBvcHVsYXRpb24gU2Vhc29uYWwgRGlzZWFzZSBNb2RlbDwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+TXVsdGkgUG9wdWxhdGlvbiBTZWFzb25hbCBEaXNlYXNlIE1vZGVsPC9lbT4nLgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlNdWx0aVBvcHVsYXRpb25TZWFzb25hbERpc2Vhc2VNb2RlbCBjcmVhdGVNdWx0aVBvcHVsYXRpb25TZWFzb25hbERpc2Vhc2VNb2RlbCgpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgcGFja2FnZSBzdXBwb3J0ZWQgYnkgdGhpcyBmYWN0b3J5LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgcGFja2FnZSBzdXBwb3J0ZWQgYnkgdGhpcyBmYWN0b3J5LgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlNdWx0aXBvcHVsYXRpb25QYWNrYWdlIGdldE11bHRpcG9wdWxhdGlvblBhY2thZ2UoKTsKKworfSAvL011bHRpcG9wdWxhdGlvbkZhY3RvcnkKZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLm11bHRpcG9wdWxhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL211bHRpcG9wdWxhdGlvbi9NdWx0aXBvcHVsYXRpb25QYWNrYWdlLmphdmEgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5tdWx0aXBvcHVsYXRpb24vc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9tdWx0aXBvcHVsYXRpb24vTXVsdGlwb3B1bGF0aW9uUGFja2FnZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNjZTg3NjAKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5tdWx0aXBvcHVsYXRpb24vc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9tdWx0aXBvcHVsYXRpb24vTXVsdGlwb3B1bGF0aW9uUGFja2FnZS5qYXZhCkBAIC0wLDAgKzEsMTE3NSBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMubXVsdGlwb3B1bGF0aW9uOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDEwIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQXR0cmlidXRlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FUmVmZXJlbmNlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZFBhY2thZ2U7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIFRoZSA8Yj5QYWNrYWdlPC9iPiBmb3IgdGhlIG1vZGVsLgorICogSXQgY29udGFpbnMgYWNjZXNzb3JzIGZvciB0aGUgbWV0YSBvYmplY3RzIHRvIHJlcHJlc2VudAorICogPHVsPgorICogICA8bGk+ZWFjaCBjbGFzcyw8L2xpPgorICogICA8bGk+ZWFjaCBmZWF0dXJlIG9mIGVhY2ggY2xhc3MsPC9saT4KKyAqICAgPGxpPmVhY2ggZW51bSw8L2xpPgorICogICA8bGk+YW5kIGVhY2ggZGF0YSB0eXBlPC9saT4KKyAqIDwvdWw+CisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLm11bHRpcG9wdWxhdGlvbi5NdWx0aXBvcHVsYXRpb25GYWN0b3J5CisgKiBAbW9kZWwga2luZD0icGFja2FnZSIKKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGludGVyZmFjZSBNdWx0aXBvcHVsYXRpb25QYWNrYWdlIGV4dGVuZHMgRVBhY2thZ2UgeworCS8qKgorCSAqIFRoZSBwYWNrYWdlIG5hbWUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJU3RyaW5nIGVOQU1FID0gIm11bHRpcG9wdWxhdGlvbiI7CisKKwkvKioKKwkgKiBUaGUgcGFja2FnZSBuYW1lc3BhY2UgVVJJLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCVN0cmluZyBlTlNfVVJJID0gImh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL211bHRpcG9wdWxhdGlvbi5lY29yZSI7CisKKwkvKioKKwkgKiBUaGUgcGFja2FnZSBuYW1lc3BhY2UgbmFtZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlTdHJpbmcgZU5TX1BSRUZJWCA9ICJvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMubXVsdGlwb3B1bGF0aW9uIjsKKworCS8qKgorCSAqIFRoZSBzaW5nbGV0b24gaW5zdGFuY2Ugb2YgdGhlIHBhY2thZ2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJTXVsdGlwb3B1bGF0aW9uUGFja2FnZSBlSU5TVEFOQ0UgPSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMubXVsdGlwb3B1bGF0aW9uLmltcGwuTXVsdGlwb3B1bGF0aW9uUGFja2FnZUltcGwuaW5pdCgpOworCisJLyoqCisJICogVGhlIG1ldGEgb2JqZWN0IGlkIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMubXVsdGlwb3B1bGF0aW9uLmltcGwuTXVsdGlQb3B1bGF0aW9uU0lEaXNlYXNlTW9kZWxJbXBsIDxlbT5NdWx0aSBQb3B1bGF0aW9uIFNJIERpc2Vhc2UgTW9kZWw8L2VtPn0nIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMubXVsdGlwb3B1bGF0aW9uLmltcGwuTXVsdGlQb3B1bGF0aW9uU0lEaXNlYXNlTW9kZWxJbXBsCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMubXVsdGlwb3B1bGF0aW9uLmltcGwuTXVsdGlwb3B1bGF0aW9uUGFja2FnZUltcGwjZ2V0TXVsdGlQb3B1bGF0aW9uU0lEaXNlYXNlTW9kZWwoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlpbnQgTVVMVElfUE9QVUxBVElPTl9TSV9ESVNFQVNFX01PREVMID0gMDsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5VUkk8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBNVUxUSV9QT1BVTEFUSU9OX1NJX0RJU0VBU0VfTU9ERUxfX1VSSSA9IFN0YW5kYXJkUGFja2FnZS5TVEFOREFSRF9ESVNFQVNFX01PREVMX19VUkk7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VHlwZSBVUkk8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBNVUxUSV9QT1BVTEFUSU9OX1NJX0RJU0VBU0VfTU9ERUxfX1RZUEVfVVJJID0gU3RhbmRhcmRQYWNrYWdlLlNUQU5EQVJEX0RJU0VBU0VfTU9ERUxfX1RZUEVfVVJJOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkR1YmxpbiBDb3JlPC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgTVVMVElfUE9QVUxBVElPTl9TSV9ESVNFQVNFX01PREVMX19EVUJMSU5fQ09SRSA9IFN0YW5kYXJkUGFja2FnZS5TVEFOREFSRF9ESVNFQVNFX01PREVMX19EVUJMSU5fQ09SRTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5MYWJlbHMgVG8gVXBkYXRlPC9iPjwvZW0+JyByZWZlcmVuY2UgbGlzdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBNVUxUSV9QT1BVTEFUSU9OX1NJX0RJU0VBU0VfTU9ERUxfX0xBQkVMU19UT19VUERBVEUgPSBTdGFuZGFyZFBhY2thZ2UuU1RBTkRBUkRfRElTRUFTRV9NT0RFTF9fTEFCRUxTX1RPX1VQREFURTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5HcmFwaDwvYj48L2VtPicgY29udGFpbmVyIHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBNVUxUSV9QT1BVTEFUSU9OX1NJX0RJU0VBU0VfTU9ERUxfX0dSQVBIID0gU3RhbmRhcmRQYWNrYWdlLlNUQU5EQVJEX0RJU0VBU0VfTU9ERUxfX0dSQVBIOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkVuYWJsZWQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBNVUxUSV9QT1BVTEFUSU9OX1NJX0RJU0VBU0VfTU9ERUxfX0VOQUJMRUQgPSBTdGFuZGFyZFBhY2thZ2UuU1RBTkRBUkRfRElTRUFTRV9NT0RFTF9fRU5BQkxFRDsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5HcmFwaCBEZWNvcmF0ZWQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBNVUxUSV9QT1BVTEFUSU9OX1NJX0RJU0VBU0VfTU9ERUxfX0dSQVBIX0RFQ09SQVRFRCA9IFN0YW5kYXJkUGFja2FnZS5TVEFOREFSRF9ESVNFQVNFX01PREVMX19HUkFQSF9ERUNPUkFURUQ7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+UHJvZ3Jlc3M8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBNVUxUSV9QT1BVTEFUSU9OX1NJX0RJU0VBU0VfTU9ERUxfX1BST0dSRVNTID0gU3RhbmRhcmRQYWNrYWdlLlNUQU5EQVJEX0RJU0VBU0VfTU9ERUxfX1BST0dSRVNTOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlBvcHVsYXRpb24gSWRlbnRpZmllcjwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IE1VTFRJX1BPUFVMQVRJT05fU0lfRElTRUFTRV9NT0RFTF9fUE9QVUxBVElPTl9JREVOVElGSUVSID0gU3RhbmRhcmRQYWNrYWdlLlNUQU5EQVJEX0RJU0VBU0VfTU9ERUxfX1BPUFVMQVRJT05fSURFTlRJRklFUjsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5UaW1lIFBlcmlvZDwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IE1VTFRJX1BPUFVMQVRJT05fU0lfRElTRUFTRV9NT0RFTF9fVElNRV9QRVJJT0QgPSBTdGFuZGFyZFBhY2thZ2UuU1RBTkRBUkRfRElTRUFTRV9NT0RFTF9fVElNRV9QRVJJT0Q7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RGlzZWFzZSBOYW1lPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgTVVMVElfUE9QVUxBVElPTl9TSV9ESVNFQVNFX01PREVMX19ESVNFQVNFX05BTUUgPSBTdGFuZGFyZFBhY2thZ2UuU1RBTkRBUkRfRElTRUFTRV9NT0RFTF9fRElTRUFTRV9OQU1FOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkZpbml0ZSBEaWZmZXJlbmNlPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgTVVMVElfUE9QVUxBVElPTl9TSV9ESVNFQVNFX01PREVMX19GSU5JVEVfRElGRkVSRU5DRSA9IFN0YW5kYXJkUGFja2FnZS5TVEFOREFSRF9ESVNFQVNFX01PREVMX19GSU5JVEVfRElGRkVSRU5DRTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5GcmVxdWVuY3kgRGVwZW5kZW50PC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgTVVMVElfUE9QVUxBVElPTl9TSV9ESVNFQVNFX01PREVMX19GUkVRVUVOQ1lfREVQRU5ERU5UID0gU3RhbmRhcmRQYWNrYWdlLlNUQU5EQVJEX0RJU0VBU0VfTU9ERUxfX0ZSRVFVRU5DWV9ERVBFTkRFTlQ7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+UmVmZXJlbmNlIFBvcHVsYXRpb24gRGVuc2l0eTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IE1VTFRJX1BPUFVMQVRJT05fU0lfRElTRUFTRV9NT0RFTF9fUkVGRVJFTkNFX1BPUFVMQVRJT05fREVOU0lUWSA9IFN0YW5kYXJkUGFja2FnZS5TVEFOREFSRF9ESVNFQVNFX01PREVMX19SRUZFUkVOQ0VfUE9QVUxBVElPTl9ERU5TSVRZOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlJvYWQgTmV0d29yayBJbmZlY3Rpb3VzIFByb3BvcnRpb248L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBNVUxUSV9QT1BVTEFUSU9OX1NJX0RJU0VBU0VfTU9ERUxfX1JPQURfTkVUV09SS19JTkZFQ1RJT1VTX1BST1BPUlRJT04gPSBTdGFuZGFyZFBhY2thZ2UuU1RBTkRBUkRfRElTRUFTRV9NT0RFTF9fUk9BRF9ORVRXT1JLX0lORkVDVElPVVNfUFJPUE9SVElPTjsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5DaGFyYWN0ZXJpc3RpYyBNaXhpbmcgRGlzdGFuY2U8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBNVUxUSV9QT1BVTEFUSU9OX1NJX0RJU0VBU0VfTU9ERUxfX0NIQVJBQ1RFUklTVElDX01JWElOR19ESVNUQU5DRSA9IFN0YW5kYXJkUGFja2FnZS5TVEFOREFSRF9ESVNFQVNFX01PREVMX19DSEFSQUNURVJJU1RJQ19NSVhJTkdfRElTVEFOQ0U7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+UG9wdWxhdGlvbiBHcm91cHM8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBNVUxUSV9QT1BVTEFUSU9OX1NJX0RJU0VBU0VfTU9ERUxfX1BPUFVMQVRJT05fR1JPVVBTID0gU3RhbmRhcmRQYWNrYWdlLlNUQU5EQVJEX0RJU0VBU0VfTU9ERUxfRkVBVFVSRV9DT1VOVCArIDA7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VHJhbnNtaXNzaW9uIFJhdGU8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBNVUxUSV9QT1BVTEFUSU9OX1NJX0RJU0VBU0VfTU9ERUxfX1RSQU5TTUlTU0lPTl9SQVRFID0gU3RhbmRhcmRQYWNrYWdlLlNUQU5EQVJEX0RJU0VBU0VfTU9ERUxfRkVBVFVSRV9DT1VOVCArIDE7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+UmVjb3ZlcnkgUmF0ZTwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IE1VTFRJX1BPUFVMQVRJT05fU0lfRElTRUFTRV9NT0RFTF9fUkVDT1ZFUllfUkFURSA9IFN0YW5kYXJkUGFja2FnZS5TVEFOREFSRF9ESVNFQVNFX01PREVMX0ZFQVRVUkVfQ09VTlQgKyAyOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkluZmVjdGlvdXMgTW9ydGFsaXR5IFJhdGU8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBNVUxUSV9QT1BVTEFUSU9OX1NJX0RJU0VBU0VfTU9ERUxfX0lORkVDVElPVVNfTU9SVEFMSVRZX1JBVEUgPSBTdGFuZGFyZFBhY2thZ2UuU1RBTkRBUkRfRElTRUFTRV9NT0RFTF9GRUFUVVJFX0NPVU5UICsgMzsKKworCS8qKgorCSAqIFRoZSBudW1iZXIgb2Ygc3RydWN0dXJhbCBmZWF0dXJlcyBvZiB0aGUgJzxlbT5NdWx0aSBQb3B1bGF0aW9uIFNJIERpc2Vhc2UgTW9kZWw8L2VtPicgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgTVVMVElfUE9QVUxBVElPTl9TSV9ESVNFQVNFX01PREVMX0ZFQVRVUkVfQ09VTlQgPSBTdGFuZGFyZFBhY2thZ2UuU1RBTkRBUkRfRElTRUFTRV9NT0RFTF9GRUFUVVJFX0NPVU5UICsgNDsKKworCisJLyoqCisJICogVGhlIG1ldGEgb2JqZWN0IGlkIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMubXVsdGlwb3B1bGF0aW9uLmltcGwuTXVsdGlQb3B1bGF0aW9uU0lSRGlzZWFzZU1vZGVsSW1wbCA8ZW0+TXVsdGkgUG9wdWxhdGlvbiBTSVIgRGlzZWFzZSBNb2RlbDwvZW0+fScgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5tdWx0aXBvcHVsYXRpb24uaW1wbC5NdWx0aVBvcHVsYXRpb25TSVJEaXNlYXNlTW9kZWxJbXBsCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMubXVsdGlwb3B1bGF0aW9uLmltcGwuTXVsdGlwb3B1bGF0aW9uUGFja2FnZUltcGwjZ2V0TXVsdGlQb3B1bGF0aW9uU0lSRGlzZWFzZU1vZGVsKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJaW50IE1VTFRJX1BPUFVMQVRJT05fU0lSX0RJU0VBU0VfTU9ERUwgPSAxOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlVSSTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IE1VTFRJX1BPUFVMQVRJT05fU0lSX0RJU0VBU0VfTU9ERUxfX1VSSSA9IE1VTFRJX1BPUFVMQVRJT05fU0lfRElTRUFTRV9NT0RFTF9fVVJJOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlR5cGUgVVJJPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgTVVMVElfUE9QVUxBVElPTl9TSVJfRElTRUFTRV9NT0RFTF9fVFlQRV9VUkkgPSBNVUxUSV9QT1BVTEFUSU9OX1NJX0RJU0VBU0VfTU9ERUxfX1RZUEVfVVJJOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkR1YmxpbiBDb3JlPC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgTVVMVElfUE9QVUxBVElPTl9TSVJfRElTRUFTRV9NT0RFTF9fRFVCTElOX0NPUkUgPSBNVUxUSV9QT1BVTEFUSU9OX1NJX0RJU0VBU0VfTU9ERUxfX0RVQkxJTl9DT1JFOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkxhYmVscyBUbyBVcGRhdGU8L2I+PC9lbT4nIHJlZmVyZW5jZSBsaXN0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IE1VTFRJX1BPUFVMQVRJT05fU0lSX0RJU0VBU0VfTU9ERUxfX0xBQkVMU19UT19VUERBVEUgPSBNVUxUSV9QT1BVTEFUSU9OX1NJX0RJU0VBU0VfTU9ERUxfX0xBQkVMU19UT19VUERBVEU7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+R3JhcGg8L2I+PC9lbT4nIGNvbnRhaW5lciByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgTVVMVElfUE9QVUxBVElPTl9TSVJfRElTRUFTRV9NT0RFTF9fR1JBUEggPSBNVUxUSV9QT1BVTEFUSU9OX1NJX0RJU0VBU0VfTU9ERUxfX0dSQVBIOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkVuYWJsZWQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBNVUxUSV9QT1BVTEFUSU9OX1NJUl9ESVNFQVNFX01PREVMX19FTkFCTEVEID0gTVVMVElfUE9QVUxBVElPTl9TSV9ESVNFQVNFX01PREVMX19FTkFCTEVEOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkdyYXBoIERlY29yYXRlZDwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IE1VTFRJX1BPUFVMQVRJT05fU0lSX0RJU0VBU0VfTU9ERUxfX0dSQVBIX0RFQ09SQVRFRCA9IE1VTFRJX1BPUFVMQVRJT05fU0lfRElTRUFTRV9NT0RFTF9fR1JBUEhfREVDT1JBVEVEOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlByb2dyZXNzPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgTVVMVElfUE9QVUxBVElPTl9TSVJfRElTRUFTRV9NT0RFTF9fUFJPR1JFU1MgPSBNVUxUSV9QT1BVTEFUSU9OX1NJX0RJU0VBU0VfTU9ERUxfX1BST0dSRVNTOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlBvcHVsYXRpb24gSWRlbnRpZmllcjwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IE1VTFRJX1BPUFVMQVRJT05fU0lSX0RJU0VBU0VfTU9ERUxfX1BPUFVMQVRJT05fSURFTlRJRklFUiA9IE1VTFRJX1BPUFVMQVRJT05fU0lfRElTRUFTRV9NT0RFTF9fUE9QVUxBVElPTl9JREVOVElGSUVSOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlRpbWUgUGVyaW9kPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgTVVMVElfUE9QVUxBVElPTl9TSVJfRElTRUFTRV9NT0RFTF9fVElNRV9QRVJJT0QgPSBNVUxUSV9QT1BVTEFUSU9OX1NJX0RJU0VBU0VfTU9ERUxfX1RJTUVfUEVSSU9EOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkRpc2Vhc2UgTmFtZTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IE1VTFRJX1BPUFVMQVRJT05fU0lSX0RJU0VBU0VfTU9ERUxfX0RJU0VBU0VfTkFNRSA9IE1VTFRJX1BPUFVMQVRJT05fU0lfRElTRUFTRV9NT0RFTF9fRElTRUFTRV9OQU1FOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkZpbml0ZSBEaWZmZXJlbmNlPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgTVVMVElfUE9QVUxBVElPTl9TSVJfRElTRUFTRV9NT0RFTF9fRklOSVRFX0RJRkZFUkVOQ0UgPSBNVUxUSV9QT1BVTEFUSU9OX1NJX0RJU0VBU0VfTU9ERUxfX0ZJTklURV9ESUZGRVJFTkNFOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkZyZXF1ZW5jeSBEZXBlbmRlbnQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBNVUxUSV9QT1BVTEFUSU9OX1NJUl9ESVNFQVNFX01PREVMX19GUkVRVUVOQ1lfREVQRU5ERU5UID0gTVVMVElfUE9QVUxBVElPTl9TSV9ESVNFQVNFX01PREVMX19GUkVRVUVOQ1lfREVQRU5ERU5UOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlJlZmVyZW5jZSBQb3B1bGF0aW9uIERlbnNpdHk8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBNVUxUSV9QT1BVTEFUSU9OX1NJUl9ESVNFQVNFX01PREVMX19SRUZFUkVOQ0VfUE9QVUxBVElPTl9ERU5TSVRZID0gTVVMVElfUE9QVUxBVElPTl9TSV9ESVNFQVNFX01PREVMX19SRUZFUkVOQ0VfUE9QVUxBVElPTl9ERU5TSVRZOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlJvYWQgTmV0d29yayBJbmZlY3Rpb3VzIFByb3BvcnRpb248L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBNVUxUSV9QT1BVTEFUSU9OX1NJUl9ESVNFQVNFX01PREVMX19ST0FEX05FVFdPUktfSU5GRUNUSU9VU19QUk9QT1JUSU9OID0gTVVMVElfUE9QVUxBVElPTl9TSV9ESVNFQVNFX01PREVMX19ST0FEX05FVFdPUktfSU5GRUNUSU9VU19QUk9QT1JUSU9OOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkNoYXJhY3RlcmlzdGljIE1peGluZyBEaXN0YW5jZTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IE1VTFRJX1BPUFVMQVRJT05fU0lSX0RJU0VBU0VfTU9ERUxfX0NIQVJBQ1RFUklTVElDX01JWElOR19ESVNUQU5DRSA9IE1VTFRJX1BPUFVMQVRJT05fU0lfRElTRUFTRV9NT0RFTF9fQ0hBUkFDVEVSSVNUSUNfTUlYSU5HX0RJU1RBTkNFOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlBvcHVsYXRpb24gR3JvdXBzPC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgTVVMVElfUE9QVUxBVElPTl9TSVJfRElTRUFTRV9NT0RFTF9fUE9QVUxBVElPTl9HUk9VUFMgPSBNVUxUSV9QT1BVTEFUSU9OX1NJX0RJU0VBU0VfTU9ERUxfX1BPUFVMQVRJT05fR1JPVVBTOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlRyYW5zbWlzc2lvbiBSYXRlPC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgTVVMVElfUE9QVUxBVElPTl9TSVJfRElTRUFTRV9NT0RFTF9fVFJBTlNNSVNTSU9OX1JBVEUgPSBNVUxUSV9QT1BVTEFUSU9OX1NJX0RJU0VBU0VfTU9ERUxfX1RSQU5TTUlTU0lPTl9SQVRFOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlJlY292ZXJ5IFJhdGU8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBNVUxUSV9QT1BVTEFUSU9OX1NJUl9ESVNFQVNFX01PREVMX19SRUNPVkVSWV9SQVRFID0gTVVMVElfUE9QVUxBVElPTl9TSV9ESVNFQVNFX01PREVMX19SRUNPVkVSWV9SQVRFOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkluZmVjdGlvdXMgTW9ydGFsaXR5IFJhdGU8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBNVUxUSV9QT1BVTEFUSU9OX1NJUl9ESVNFQVNFX01PREVMX19JTkZFQ1RJT1VTX01PUlRBTElUWV9SQVRFID0gTVVMVElfUE9QVUxBVElPTl9TSV9ESVNFQVNFX01PREVMX19JTkZFQ1RJT1VTX01PUlRBTElUWV9SQVRFOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkltbXVuaXR5IExvc3MgUmF0ZTwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IE1VTFRJX1BPUFVMQVRJT05fU0lSX0RJU0VBU0VfTU9ERUxfX0lNTVVOSVRZX0xPU1NfUkFURSA9IE1VTFRJX1BPUFVMQVRJT05fU0lfRElTRUFTRV9NT0RFTF9GRUFUVVJFX0NPVU5UICsgMDsKKworCS8qKgorCSAqIFRoZSBudW1iZXIgb2Ygc3RydWN0dXJhbCBmZWF0dXJlcyBvZiB0aGUgJzxlbT5NdWx0aSBQb3B1bGF0aW9uIFNJUiBEaXNlYXNlIE1vZGVsPC9lbT4nIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IE1VTFRJX1BPUFVMQVRJT05fU0lSX0RJU0VBU0VfTU9ERUxfRkVBVFVSRV9DT1VOVCA9IE1VTFRJX1BPUFVMQVRJT05fU0lfRElTRUFTRV9NT0RFTF9GRUFUVVJFX0NPVU5UICsgMTsKKworCS8qKgorCSAqIFRoZSBtZXRhIG9iamVjdCBpZCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLm11bHRpcG9wdWxhdGlvbi5pbXBsLk11bHRpUG9wdWxhdGlvblNFSVJEaXNlYXNlTW9kZWxJbXBsIDxlbT5NdWx0aSBQb3B1bGF0aW9uIFNFSVIgRGlzZWFzZSBNb2RlbDwvZW0+fScgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5tdWx0aXBvcHVsYXRpb24uaW1wbC5NdWx0aVBvcHVsYXRpb25TRUlSRGlzZWFzZU1vZGVsSW1wbAorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLm11bHRpcG9wdWxhdGlvbi5pbXBsLk11bHRpcG9wdWxhdGlvblBhY2thZ2VJbXBsI2dldE11bHRpUG9wdWxhdGlvblNFSVJEaXNlYXNlTW9kZWwoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlpbnQgTVVMVElfUE9QVUxBVElPTl9TRUlSX0RJU0VBU0VfTU9ERUwgPSAyOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlVSSTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IE1VTFRJX1BPUFVMQVRJT05fU0VJUl9ESVNFQVNFX01PREVMX19VUkkgPSBNVUxUSV9QT1BVTEFUSU9OX1NJUl9ESVNFQVNFX01PREVMX19VUkk7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VHlwZSBVUkk8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBNVUxUSV9QT1BVTEFUSU9OX1NFSVJfRElTRUFTRV9NT0RFTF9fVFlQRV9VUkkgPSBNVUxUSV9QT1BVTEFUSU9OX1NJUl9ESVNFQVNFX01PREVMX19UWVBFX1VSSTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5EdWJsaW4gQ29yZTwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IE1VTFRJX1BPUFVMQVRJT05fU0VJUl9ESVNFQVNFX01PREVMX19EVUJMSU5fQ09SRSA9IE1VTFRJX1BPUFVMQVRJT05fU0lSX0RJU0VBU0VfTU9ERUxfX0RVQkxJTl9DT1JFOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkxhYmVscyBUbyBVcGRhdGU8L2I+PC9lbT4nIHJlZmVyZW5jZSBsaXN0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IE1VTFRJX1BPUFVMQVRJT05fU0VJUl9ESVNFQVNFX01PREVMX19MQUJFTFNfVE9fVVBEQVRFID0gTVVMVElfUE9QVUxBVElPTl9TSVJfRElTRUFTRV9NT0RFTF9fTEFCRUxTX1RPX1VQREFURTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5HcmFwaDwvYj48L2VtPicgY29udGFpbmVyIHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBNVUxUSV9QT1BVTEFUSU9OX1NFSVJfRElTRUFTRV9NT0RFTF9fR1JBUEggPSBNVUxUSV9QT1BVTEFUSU9OX1NJUl9ESVNFQVNFX01PREVMX19HUkFQSDsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5FbmFibGVkPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgTVVMVElfUE9QVUxBVElPTl9TRUlSX0RJU0VBU0VfTU9ERUxfX0VOQUJMRUQgPSBNVUxUSV9QT1BVTEFUSU9OX1NJUl9ESVNFQVNFX01PREVMX19FTkFCTEVEOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkdyYXBoIERlY29yYXRlZDwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IE1VTFRJX1BPUFVMQVRJT05fU0VJUl9ESVNFQVNFX01PREVMX19HUkFQSF9ERUNPUkFURUQgPSBNVUxUSV9QT1BVTEFUSU9OX1NJUl9ESVNFQVNFX01PREVMX19HUkFQSF9ERUNPUkFURUQ7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+UHJvZ3Jlc3M8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBNVUxUSV9QT1BVTEFUSU9OX1NFSVJfRElTRUFTRV9NT0RFTF9fUFJPR1JFU1MgPSBNVUxUSV9QT1BVTEFUSU9OX1NJUl9ESVNFQVNFX01PREVMX19QUk9HUkVTUzsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5Qb3B1bGF0aW9uIElkZW50aWZpZXI8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBNVUxUSV9QT1BVTEFUSU9OX1NFSVJfRElTRUFTRV9NT0RFTF9fUE9QVUxBVElPTl9JREVOVElGSUVSID0gTVVMVElfUE9QVUxBVElPTl9TSVJfRElTRUFTRV9NT0RFTF9fUE9QVUxBVElPTl9JREVOVElGSUVSOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlRpbWUgUGVyaW9kPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgTVVMVElfUE9QVUxBVElPTl9TRUlSX0RJU0VBU0VfTU9ERUxfX1RJTUVfUEVSSU9EID0gTVVMVElfUE9QVUxBVElPTl9TSVJfRElTRUFTRV9NT0RFTF9fVElNRV9QRVJJT0Q7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RGlzZWFzZSBOYW1lPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgTVVMVElfUE9QVUxBVElPTl9TRUlSX0RJU0VBU0VfTU9ERUxfX0RJU0VBU0VfTkFNRSA9IE1VTFRJX1BPUFVMQVRJT05fU0lSX0RJU0VBU0VfTU9ERUxfX0RJU0VBU0VfTkFNRTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5GaW5pdGUgRGlmZmVyZW5jZTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IE1VTFRJX1BPUFVMQVRJT05fU0VJUl9ESVNFQVNFX01PREVMX19GSU5JVEVfRElGRkVSRU5DRSA9IE1VTFRJX1BPUFVMQVRJT05fU0lSX0RJU0VBU0VfTU9ERUxfX0ZJTklURV9ESUZGRVJFTkNFOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkZyZXF1ZW5jeSBEZXBlbmRlbnQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBNVUxUSV9QT1BVTEFUSU9OX1NFSVJfRElTRUFTRV9NT0RFTF9fRlJFUVVFTkNZX0RFUEVOREVOVCA9IE1VTFRJX1BPUFVMQVRJT05fU0lSX0RJU0VBU0VfTU9ERUxfX0ZSRVFVRU5DWV9ERVBFTkRFTlQ7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+UmVmZXJlbmNlIFBvcHVsYXRpb24gRGVuc2l0eTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IE1VTFRJX1BPUFVMQVRJT05fU0VJUl9ESVNFQVNFX01PREVMX19SRUZFUkVOQ0VfUE9QVUxBVElPTl9ERU5TSVRZID0gTVVMVElfUE9QVUxBVElPTl9TSVJfRElTRUFTRV9NT0RFTF9fUkVGRVJFTkNFX1BPUFVMQVRJT05fREVOU0lUWTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5Sb2FkIE5ldHdvcmsgSW5mZWN0aW91cyBQcm9wb3J0aW9uPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgTVVMVElfUE9QVUxBVElPTl9TRUlSX0RJU0VBU0VfTU9ERUxfX1JPQURfTkVUV09SS19JTkZFQ1RJT1VTX1BST1BPUlRJT04gPSBNVUxUSV9QT1BVTEFUSU9OX1NJUl9ESVNFQVNFX01PREVMX19ST0FEX05FVFdPUktfSU5GRUNUSU9VU19QUk9QT1JUSU9OOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkNoYXJhY3RlcmlzdGljIE1peGluZyBEaXN0YW5jZTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IE1VTFRJX1BPUFVMQVRJT05fU0VJUl9ESVNFQVNFX01PREVMX19DSEFSQUNURVJJU1RJQ19NSVhJTkdfRElTVEFOQ0UgPSBNVUxUSV9QT1BVTEFUSU9OX1NJUl9ESVNFQVNFX01PREVMX19DSEFSQUNURVJJU1RJQ19NSVhJTkdfRElTVEFOQ0U7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+UG9wdWxhdGlvbiBHcm91cHM8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBNVUxUSV9QT1BVTEFUSU9OX1NFSVJfRElTRUFTRV9NT0RFTF9fUE9QVUxBVElPTl9HUk9VUFMgPSBNVUxUSV9QT1BVTEFUSU9OX1NJUl9ESVNFQVNFX01PREVMX19QT1BVTEFUSU9OX0dST1VQUzsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5UcmFuc21pc3Npb24gUmF0ZTwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IE1VTFRJX1BPUFVMQVRJT05fU0VJUl9ESVNFQVNFX01PREVMX19UUkFOU01JU1NJT05fUkFURSA9IE1VTFRJX1BPUFVMQVRJT05fU0lSX0RJU0VBU0VfTU9ERUxfX1RSQU5TTUlTU0lPTl9SQVRFOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlJlY292ZXJ5IFJhdGU8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBNVUxUSV9QT1BVTEFUSU9OX1NFSVJfRElTRUFTRV9NT0RFTF9fUkVDT1ZFUllfUkFURSA9IE1VTFRJX1BPUFVMQVRJT05fU0lSX0RJU0VBU0VfTU9ERUxfX1JFQ09WRVJZX1JBVEU7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+SW5mZWN0aW91cyBNb3J0YWxpdHkgUmF0ZTwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IE1VTFRJX1BPUFVMQVRJT05fU0VJUl9ESVNFQVNFX01PREVMX19JTkZFQ1RJT1VTX01PUlRBTElUWV9SQVRFID0gTVVMVElfUE9QVUxBVElPTl9TSVJfRElTRUFTRV9NT0RFTF9fSU5GRUNUSU9VU19NT1JUQUxJVFlfUkFURTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5JbW11bml0eSBMb3NzIFJhdGU8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBNVUxUSV9QT1BVTEFUSU9OX1NFSVJfRElTRUFTRV9NT0RFTF9fSU1NVU5JVFlfTE9TU19SQVRFID0gTVVMVElfUE9QVUxBVElPTl9TSVJfRElTRUFTRV9NT0RFTF9fSU1NVU5JVFlfTE9TU19SQVRFOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkluY3ViYXRpb24gUmF0ZTwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IE1VTFRJX1BPUFVMQVRJT05fU0VJUl9ESVNFQVNFX01PREVMX19JTkNVQkFUSU9OX1JBVEUgPSBNVUxUSV9QT1BVTEFUSU9OX1NJUl9ESVNFQVNFX01PREVMX0ZFQVRVUkVfQ09VTlQgKyAwOworCisJLyoqCisJICogVGhlIG51bWJlciBvZiBzdHJ1Y3R1cmFsIGZlYXR1cmVzIG9mIHRoZSAnPGVtPk11bHRpIFBvcHVsYXRpb24gU0VJUiBEaXNlYXNlIE1vZGVsPC9lbT4nIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IE1VTFRJX1BPUFVMQVRJT05fU0VJUl9ESVNFQVNFX01PREVMX0ZFQVRVUkVfQ09VTlQgPSBNVUxUSV9QT1BVTEFUSU9OX1NJUl9ESVNFQVNFX01PREVMX0ZFQVRVUkVfQ09VTlQgKyAxOworCisKKwkvKioKKwkgKiBUaGUgbWV0YSBvYmplY3QgaWQgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5tdWx0aXBvcHVsYXRpb24uaW1wbC5NdWx0aVBvcHVsYXRpb25TZWFzb25hbERpc2Vhc2VNb2RlbEltcGwgPGVtPk11bHRpIFBvcHVsYXRpb24gU2Vhc29uYWwgRGlzZWFzZSBNb2RlbDwvZW0+fScgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5tdWx0aXBvcHVsYXRpb24uaW1wbC5NdWx0aVBvcHVsYXRpb25TZWFzb25hbERpc2Vhc2VNb2RlbEltcGwKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5tdWx0aXBvcHVsYXRpb24uaW1wbC5NdWx0aXBvcHVsYXRpb25QYWNrYWdlSW1wbCNnZXRNdWx0aVBvcHVsYXRpb25TZWFzb25hbERpc2Vhc2VNb2RlbCgpCisJICogQGdlbmVyYXRlZAorCSAqLworCWludCBNVUxUSV9QT1BVTEFUSU9OX1NFQVNPTkFMX0RJU0VBU0VfTU9ERUwgPSAzOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlVSSTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IE1VTFRJX1BPUFVMQVRJT05fU0VBU09OQUxfRElTRUFTRV9NT0RFTF9fVVJJID0gTVVMVElfUE9QVUxBVElPTl9TRUlSX0RJU0VBU0VfTU9ERUxfX1VSSTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5UeXBlIFVSSTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IE1VTFRJX1BPUFVMQVRJT05fU0VBU09OQUxfRElTRUFTRV9NT0RFTF9fVFlQRV9VUkkgPSBNVUxUSV9QT1BVTEFUSU9OX1NFSVJfRElTRUFTRV9NT0RFTF9fVFlQRV9VUkk7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RHVibGluIENvcmU8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBNVUxUSV9QT1BVTEFUSU9OX1NFQVNPTkFMX0RJU0VBU0VfTU9ERUxfX0RVQkxJTl9DT1JFID0gTVVMVElfUE9QVUxBVElPTl9TRUlSX0RJU0VBU0VfTU9ERUxfX0RVQkxJTl9DT1JFOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkxhYmVscyBUbyBVcGRhdGU8L2I+PC9lbT4nIHJlZmVyZW5jZSBsaXN0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IE1VTFRJX1BPUFVMQVRJT05fU0VBU09OQUxfRElTRUFTRV9NT0RFTF9fTEFCRUxTX1RPX1VQREFURSA9IE1VTFRJX1BPUFVMQVRJT05fU0VJUl9ESVNFQVNFX01PREVMX19MQUJFTFNfVE9fVVBEQVRFOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkdyYXBoPC9iPjwvZW0+JyBjb250YWluZXIgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IE1VTFRJX1BPUFVMQVRJT05fU0VBU09OQUxfRElTRUFTRV9NT0RFTF9fR1JBUEggPSBNVUxUSV9QT1BVTEFUSU9OX1NFSVJfRElTRUFTRV9NT0RFTF9fR1JBUEg7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RW5hYmxlZDwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IE1VTFRJX1BPUFVMQVRJT05fU0VBU09OQUxfRElTRUFTRV9NT0RFTF9fRU5BQkxFRCA9IE1VTFRJX1BPUFVMQVRJT05fU0VJUl9ESVNFQVNFX01PREVMX19FTkFCTEVEOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkdyYXBoIERlY29yYXRlZDwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IE1VTFRJX1BPUFVMQVRJT05fU0VBU09OQUxfRElTRUFTRV9NT0RFTF9fR1JBUEhfREVDT1JBVEVEID0gTVVMVElfUE9QVUxBVElPTl9TRUlSX0RJU0VBU0VfTU9ERUxfX0dSQVBIX0RFQ09SQVRFRDsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5Qcm9ncmVzczwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IE1VTFRJX1BPUFVMQVRJT05fU0VBU09OQUxfRElTRUFTRV9NT0RFTF9fUFJPR1JFU1MgPSBNVUxUSV9QT1BVTEFUSU9OX1NFSVJfRElTRUFTRV9NT0RFTF9fUFJPR1JFU1M7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+UG9wdWxhdGlvbiBJZGVudGlmaWVyPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgTVVMVElfUE9QVUxBVElPTl9TRUFTT05BTF9ESVNFQVNFX01PREVMX19QT1BVTEFUSU9OX0lERU5USUZJRVIgPSBNVUxUSV9QT1BVTEFUSU9OX1NFSVJfRElTRUFTRV9NT0RFTF9fUE9QVUxBVElPTl9JREVOVElGSUVSOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlRpbWUgUGVyaW9kPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgTVVMVElfUE9QVUxBVElPTl9TRUFTT05BTF9ESVNFQVNFX01PREVMX19USU1FX1BFUklPRCA9IE1VTFRJX1BPUFVMQVRJT05fU0VJUl9ESVNFQVNFX01PREVMX19USU1FX1BFUklPRDsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5EaXNlYXNlIE5hbWU8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBNVUxUSV9QT1BVTEFUSU9OX1NFQVNPTkFMX0RJU0VBU0VfTU9ERUxfX0RJU0VBU0VfTkFNRSA9IE1VTFRJX1BPUFVMQVRJT05fU0VJUl9ESVNFQVNFX01PREVMX19ESVNFQVNFX05BTUU7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RmluaXRlIERpZmZlcmVuY2U8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBNVUxUSV9QT1BVTEFUSU9OX1NFQVNPTkFMX0RJU0VBU0VfTU9ERUxfX0ZJTklURV9ESUZGRVJFTkNFID0gTVVMVElfUE9QVUxBVElPTl9TRUlSX0RJU0VBU0VfTU9ERUxfX0ZJTklURV9ESUZGRVJFTkNFOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkZyZXF1ZW5jeSBEZXBlbmRlbnQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBNVUxUSV9QT1BVTEFUSU9OX1NFQVNPTkFMX0RJU0VBU0VfTU9ERUxfX0ZSRVFVRU5DWV9ERVBFTkRFTlQgPSBNVUxUSV9QT1BVTEFUSU9OX1NFSVJfRElTRUFTRV9NT0RFTF9fRlJFUVVFTkNZX0RFUEVOREVOVDsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5SZWZlcmVuY2UgUG9wdWxhdGlvbiBEZW5zaXR5PC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgTVVMVElfUE9QVUxBVElPTl9TRUFTT05BTF9ESVNFQVNFX01PREVMX19SRUZFUkVOQ0VfUE9QVUxBVElPTl9ERU5TSVRZID0gTVVMVElfUE9QVUxBVElPTl9TRUlSX0RJU0VBU0VfTU9ERUxfX1JFRkVSRU5DRV9QT1BVTEFUSU9OX0RFTlNJVFk7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+Um9hZCBOZXR3b3JrIEluZmVjdGlvdXMgUHJvcG9ydGlvbjwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IE1VTFRJX1BPUFVMQVRJT05fU0VBU09OQUxfRElTRUFTRV9NT0RFTF9fUk9BRF9ORVRXT1JLX0lORkVDVElPVVNfUFJPUE9SVElPTiA9IE1VTFRJX1BPUFVMQVRJT05fU0VJUl9ESVNFQVNFX01PREVMX19ST0FEX05FVFdPUktfSU5GRUNUSU9VU19QUk9QT1JUSU9OOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkNoYXJhY3RlcmlzdGljIE1peGluZyBEaXN0YW5jZTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IE1VTFRJX1BPUFVMQVRJT05fU0VBU09OQUxfRElTRUFTRV9NT0RFTF9fQ0hBUkFDVEVSSVNUSUNfTUlYSU5HX0RJU1RBTkNFID0gTVVMVElfUE9QVUxBVElPTl9TRUlSX0RJU0VBU0VfTU9ERUxfX0NIQVJBQ1RFUklTVElDX01JWElOR19ESVNUQU5DRTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5Qb3B1bGF0aW9uIEdyb3VwczwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IE1VTFRJX1BPUFVMQVRJT05fU0VBU09OQUxfRElTRUFTRV9NT0RFTF9fUE9QVUxBVElPTl9HUk9VUFMgPSBNVUxUSV9QT1BVTEFUSU9OX1NFSVJfRElTRUFTRV9NT0RFTF9fUE9QVUxBVElPTl9HUk9VUFM7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VHJhbnNtaXNzaW9uIFJhdGU8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBNVUxUSV9QT1BVTEFUSU9OX1NFQVNPTkFMX0RJU0VBU0VfTU9ERUxfX1RSQU5TTUlTU0lPTl9SQVRFID0gTVVMVElfUE9QVUxBVElPTl9TRUlSX0RJU0VBU0VfTU9ERUxfX1RSQU5TTUlTU0lPTl9SQVRFOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlJlY292ZXJ5IFJhdGU8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBNVUxUSV9QT1BVTEFUSU9OX1NFQVNPTkFMX0RJU0VBU0VfTU9ERUxfX1JFQ09WRVJZX1JBVEUgPSBNVUxUSV9QT1BVTEFUSU9OX1NFSVJfRElTRUFTRV9NT0RFTF9fUkVDT1ZFUllfUkFURTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5JbmZlY3Rpb3VzIE1vcnRhbGl0eSBSYXRlPC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgTVVMVElfUE9QVUxBVElPTl9TRUFTT05BTF9ESVNFQVNFX01PREVMX19JTkZFQ1RJT1VTX01PUlRBTElUWV9SQVRFID0gTVVMVElfUE9QVUxBVElPTl9TRUlSX0RJU0VBU0VfTU9ERUxfX0lORkVDVElPVVNfTU9SVEFMSVRZX1JBVEU7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+SW1tdW5pdHkgTG9zcyBSYXRlPC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgTVVMVElfUE9QVUxBVElPTl9TRUFTT05BTF9ESVNFQVNFX01PREVMX19JTU1VTklUWV9MT1NTX1JBVEUgPSBNVUxUSV9QT1BVTEFUSU9OX1NFSVJfRElTRUFTRV9NT0RFTF9fSU1NVU5JVFlfTE9TU19SQVRFOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkluY3ViYXRpb24gUmF0ZTwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IE1VTFRJX1BPUFVMQVRJT05fU0VBU09OQUxfRElTRUFTRV9NT0RFTF9fSU5DVUJBVElPTl9SQVRFID0gTVVMVElfUE9QVUxBVElPTl9TRUlSX0RJU0VBU0VfTU9ERUxfX0lOQ1VCQVRJT05fUkFURTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5Nb2R1bGF0aW9uIFBvaW50czwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IE1VTFRJX1BPUFVMQVRJT05fU0VBU09OQUxfRElTRUFTRV9NT0RFTF9fTU9EVUxBVElPTl9QT0lOVFMgPSBNVUxUSV9QT1BVTEFUSU9OX1NFSVJfRElTRUFTRV9NT0RFTF9GRUFUVVJFX0NPVU5UICsgMDsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5Vc2UgU3BsaW5lIEludGVycG9sYXRpb248L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBNVUxUSV9QT1BVTEFUSU9OX1NFQVNPTkFMX0RJU0VBU0VfTU9ERUxfX1VTRV9TUExJTkVfSU5URVJQT0xBVElPTiA9IE1VTFRJX1BPUFVMQVRJT05fU0VJUl9ESVNFQVNFX01PREVMX0ZFQVRVUkVfQ09VTlQgKyAxOworCisJLyoqCisJICogVGhlIG51bWJlciBvZiBzdHJ1Y3R1cmFsIGZlYXR1cmVzIG9mIHRoZSAnPGVtPk11bHRpIFBvcHVsYXRpb24gU2Vhc29uYWwgRGlzZWFzZSBNb2RlbDwvZW0+JyBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBNVUxUSV9QT1BVTEFUSU9OX1NFQVNPTkFMX0RJU0VBU0VfTU9ERUxfRkVBVFVSRV9DT1VOVCA9IE1VTFRJX1BPUFVMQVRJT05fU0VJUl9ESVNFQVNFX01PREVMX0ZFQVRVUkVfQ09VTlQgKyAyOworCisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMubXVsdGlwb3B1bGF0aW9uLk11bHRpUG9wdWxhdGlvblNJRGlzZWFzZU1vZGVsIDxlbT5NdWx0aSBQb3B1bGF0aW9uIFNJIERpc2Vhc2UgTW9kZWw8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICc8ZW0+TXVsdGkgUG9wdWxhdGlvbiBTSSBEaXNlYXNlIE1vZGVsPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLm11bHRpcG9wdWxhdGlvbi5NdWx0aVBvcHVsYXRpb25TSURpc2Vhc2VNb2RlbAorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQ2xhc3MgZ2V0TXVsdGlQb3B1bGF0aW9uU0lEaXNlYXNlTW9kZWwoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgY29udGFpbm1lbnQgcmVmZXJlbmNlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLm11bHRpcG9wdWxhdGlvbi5NdWx0aVBvcHVsYXRpb25TSURpc2Vhc2VNb2RlbCNnZXRUcmFuc21pc3Npb25SYXRlIDxlbT5UcmFuc21pc3Npb24gUmF0ZTwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGNvbnRhaW5tZW50IHJlZmVyZW5jZSAnPGVtPlRyYW5zbWlzc2lvbiBSYXRlPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLm11bHRpcG9wdWxhdGlvbi5NdWx0aVBvcHVsYXRpb25TSURpc2Vhc2VNb2RlbCNnZXRUcmFuc21pc3Npb25SYXRlKCkKKwkgKiBAc2VlICNnZXRNdWx0aVBvcHVsYXRpb25TSURpc2Vhc2VNb2RlbCgpCisJICogQGdlbmVyYXRlZAorCSAqLworCUVSZWZlcmVuY2UgZ2V0TXVsdGlQb3B1bGF0aW9uU0lEaXNlYXNlTW9kZWxfVHJhbnNtaXNzaW9uUmF0ZSgpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBjb250YWlubWVudCByZWZlcmVuY2UgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMubXVsdGlwb3B1bGF0aW9uLk11bHRpUG9wdWxhdGlvblNJRGlzZWFzZU1vZGVsI2dldFJlY292ZXJ5UmF0ZSA8ZW0+UmVjb3ZlcnkgUmF0ZTwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGNvbnRhaW5tZW50IHJlZmVyZW5jZSAnPGVtPlJlY292ZXJ5IFJhdGU8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMubXVsdGlwb3B1bGF0aW9uLk11bHRpUG9wdWxhdGlvblNJRGlzZWFzZU1vZGVsI2dldFJlY292ZXJ5UmF0ZSgpCisJICogQHNlZSAjZ2V0TXVsdGlQb3B1bGF0aW9uU0lEaXNlYXNlTW9kZWwoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFUmVmZXJlbmNlIGdldE11bHRpUG9wdWxhdGlvblNJRGlzZWFzZU1vZGVsX1JlY292ZXJ5UmF0ZSgpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBjb250YWlubWVudCByZWZlcmVuY2UgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMubXVsdGlwb3B1bGF0aW9uLk11bHRpUG9wdWxhdGlvblNJRGlzZWFzZU1vZGVsI2dldEluZmVjdGlvdXNNb3J0YWxpdHlSYXRlIDxlbT5JbmZlY3Rpb3VzIE1vcnRhbGl0eSBSYXRlPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgY29udGFpbm1lbnQgcmVmZXJlbmNlICc8ZW0+SW5mZWN0aW91cyBNb3J0YWxpdHkgUmF0ZTwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5tdWx0aXBvcHVsYXRpb24uTXVsdGlQb3B1bGF0aW9uU0lEaXNlYXNlTW9kZWwjZ2V0SW5mZWN0aW91c01vcnRhbGl0eVJhdGUoKQorCSAqIEBzZWUgI2dldE11bHRpUG9wdWxhdGlvblNJRGlzZWFzZU1vZGVsKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRVJlZmVyZW5jZSBnZXRNdWx0aVBvcHVsYXRpb25TSURpc2Vhc2VNb2RlbF9JbmZlY3Rpb3VzTW9ydGFsaXR5UmF0ZSgpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLm11bHRpcG9wdWxhdGlvbi5NdWx0aVBvcHVsYXRpb25TSVJEaXNlYXNlTW9kZWwgPGVtPk11bHRpIFBvcHVsYXRpb24gU0lSIERpc2Vhc2UgTW9kZWw8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICc8ZW0+TXVsdGkgUG9wdWxhdGlvbiBTSVIgRGlzZWFzZSBNb2RlbDwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5tdWx0aXBvcHVsYXRpb24uTXVsdGlQb3B1bGF0aW9uU0lSRGlzZWFzZU1vZGVsCisJICogQGdlbmVyYXRlZAorCSAqLworCUVDbGFzcyBnZXRNdWx0aVBvcHVsYXRpb25TSVJEaXNlYXNlTW9kZWwoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgY29udGFpbm1lbnQgcmVmZXJlbmNlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLm11bHRpcG9wdWxhdGlvbi5NdWx0aVBvcHVsYXRpb25TSVJEaXNlYXNlTW9kZWwjZ2V0SW1tdW5pdHlMb3NzUmF0ZSA8ZW0+SW1tdW5pdHkgTG9zcyBSYXRlPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgY29udGFpbm1lbnQgcmVmZXJlbmNlICc8ZW0+SW1tdW5pdHkgTG9zcyBSYXRlPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLm11bHRpcG9wdWxhdGlvbi5NdWx0aVBvcHVsYXRpb25TSVJEaXNlYXNlTW9kZWwjZ2V0SW1tdW5pdHlMb3NzUmF0ZSgpCisJICogQHNlZSAjZ2V0TXVsdGlQb3B1bGF0aW9uU0lSRGlzZWFzZU1vZGVsKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRVJlZmVyZW5jZSBnZXRNdWx0aVBvcHVsYXRpb25TSVJEaXNlYXNlTW9kZWxfSW1tdW5pdHlMb3NzUmF0ZSgpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLm11bHRpcG9wdWxhdGlvbi5NdWx0aVBvcHVsYXRpb25TRUlSRGlzZWFzZU1vZGVsIDxlbT5NdWx0aSBQb3B1bGF0aW9uIFNFSVIgRGlzZWFzZSBNb2RlbDwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJzxlbT5NdWx0aSBQb3B1bGF0aW9uIFNFSVIgRGlzZWFzZSBNb2RlbDwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5tdWx0aXBvcHVsYXRpb24uTXVsdGlQb3B1bGF0aW9uU0VJUkRpc2Vhc2VNb2RlbAorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQ2xhc3MgZ2V0TXVsdGlQb3B1bGF0aW9uU0VJUkRpc2Vhc2VNb2RlbCgpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBjb250YWlubWVudCByZWZlcmVuY2UgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMubXVsdGlwb3B1bGF0aW9uLk11bHRpUG9wdWxhdGlvblNFSVJEaXNlYXNlTW9kZWwjZ2V0SW5jdWJhdGlvblJhdGUgPGVtPkluY3ViYXRpb24gUmF0ZTwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGNvbnRhaW5tZW50IHJlZmVyZW5jZSAnPGVtPkluY3ViYXRpb24gUmF0ZTwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5tdWx0aXBvcHVsYXRpb24uTXVsdGlQb3B1bGF0aW9uU0VJUkRpc2Vhc2VNb2RlbCNnZXRJbmN1YmF0aW9uUmF0ZSgpCisJICogQHNlZSAjZ2V0TXVsdGlQb3B1bGF0aW9uU0VJUkRpc2Vhc2VNb2RlbCgpCisJICogQGdlbmVyYXRlZAorCSAqLworCUVSZWZlcmVuY2UgZ2V0TXVsdGlQb3B1bGF0aW9uU0VJUkRpc2Vhc2VNb2RlbF9JbmN1YmF0aW9uUmF0ZSgpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLm11bHRpcG9wdWxhdGlvbi5NdWx0aVBvcHVsYXRpb25TZWFzb25hbERpc2Vhc2VNb2RlbCA8ZW0+TXVsdGkgUG9wdWxhdGlvbiBTZWFzb25hbCBEaXNlYXNlIE1vZGVsPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAnPGVtPk11bHRpIFBvcHVsYXRpb24gU2Vhc29uYWwgRGlzZWFzZSBNb2RlbDwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5tdWx0aXBvcHVsYXRpb24uTXVsdGlQb3B1bGF0aW9uU2Vhc29uYWxEaXNlYXNlTW9kZWwKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUNsYXNzIGdldE11bHRpUG9wdWxhdGlvblNlYXNvbmFsRGlzZWFzZU1vZGVsKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGNvbnRhaW5tZW50IHJlZmVyZW5jZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5tdWx0aXBvcHVsYXRpb24uTXVsdGlQb3B1bGF0aW9uU2Vhc29uYWxEaXNlYXNlTW9kZWwjZ2V0TW9kdWxhdGlvblBvaW50cyA8ZW0+TW9kdWxhdGlvbiBQb2ludHM8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBjb250YWlubWVudCByZWZlcmVuY2UgJzxlbT5Nb2R1bGF0aW9uIFBvaW50czwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5tdWx0aXBvcHVsYXRpb24uTXVsdGlQb3B1bGF0aW9uU2Vhc29uYWxEaXNlYXNlTW9kZWwjZ2V0TW9kdWxhdGlvblBvaW50cygpCisJICogQHNlZSAjZ2V0TXVsdGlQb3B1bGF0aW9uU2Vhc29uYWxEaXNlYXNlTW9kZWwoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFUmVmZXJlbmNlIGdldE11bHRpUG9wdWxhdGlvblNlYXNvbmFsRGlzZWFzZU1vZGVsX01vZHVsYXRpb25Qb2ludHMoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLm11bHRpcG9wdWxhdGlvbi5NdWx0aVBvcHVsYXRpb25TZWFzb25hbERpc2Vhc2VNb2RlbCNpc1VzZVNwbGluZUludGVycG9sYXRpb24gPGVtPlVzZSBTcGxpbmUgSW50ZXJwb2xhdGlvbjwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPGVtPlVzZSBTcGxpbmUgSW50ZXJwb2xhdGlvbjwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5tdWx0aXBvcHVsYXRpb24uTXVsdGlQb3B1bGF0aW9uU2Vhc29uYWxEaXNlYXNlTW9kZWwjaXNVc2VTcGxpbmVJbnRlcnBvbGF0aW9uKCkKKwkgKiBAc2VlICNnZXRNdWx0aVBvcHVsYXRpb25TZWFzb25hbERpc2Vhc2VNb2RlbCgpCisJICogQGdlbmVyYXRlZAorCSAqLworCUVBdHRyaWJ1dGUgZ2V0TXVsdGlQb3B1bGF0aW9uU2Vhc29uYWxEaXNlYXNlTW9kZWxfVXNlU3BsaW5lSW50ZXJwb2xhdGlvbigpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBjb250YWlubWVudCByZWZlcmVuY2UgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMubXVsdGlwb3B1bGF0aW9uLk11bHRpUG9wdWxhdGlvblNJRGlzZWFzZU1vZGVsI2dldFBvcHVsYXRpb25Hcm91cHMgPGVtPlBvcHVsYXRpb24gR3JvdXBzPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgY29udGFpbm1lbnQgcmVmZXJlbmNlICc8ZW0+UG9wdWxhdGlvbiBHcm91cHM8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMubXVsdGlwb3B1bGF0aW9uLk11bHRpUG9wdWxhdGlvblNJRGlzZWFzZU1vZGVsI2dldFBvcHVsYXRpb25Hcm91cHMoKQorCSAqIEBzZWUgI2dldE11bHRpUG9wdWxhdGlvblNJRGlzZWFzZU1vZGVsKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRVJlZmVyZW5jZSBnZXRNdWx0aVBvcHVsYXRpb25TSURpc2Vhc2VNb2RlbF9Qb3B1bGF0aW9uR3JvdXBzKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBmYWN0b3J5IHRoYXQgY3JlYXRlcyB0aGUgaW5zdGFuY2VzIG9mIHRoZSBtb2RlbC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIGZhY3RvcnkgdGhhdCBjcmVhdGVzIHRoZSBpbnN0YW5jZXMgb2YgdGhlIG1vZGVsLgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlNdWx0aXBvcHVsYXRpb25GYWN0b3J5IGdldE11bHRpcG9wdWxhdGlvbkZhY3RvcnkoKTsKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogRGVmaW5lcyBsaXRlcmFscyBmb3IgdGhlIG1ldGEgb2JqZWN0cyB0aGF0IHJlcHJlc2VudAorCSAqIDx1bD4KKwkgKiAgIDxsaT5lYWNoIGNsYXNzLDwvbGk+CisJICogICA8bGk+ZWFjaCBmZWF0dXJlIG9mIGVhY2ggY2xhc3MsPC9saT4KKwkgKiAgIDxsaT5lYWNoIGVudW0sPC9saT4KKwkgKiAgIDxsaT5hbmQgZWFjaCBkYXRhIHR5cGU8L2xpPgorCSAqIDwvdWw+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCWludGVyZmFjZSBMaXRlcmFscyB7CisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLm11bHRpcG9wdWxhdGlvbi5pbXBsLk11bHRpUG9wdWxhdGlvblNJRGlzZWFzZU1vZGVsSW1wbCA8ZW0+TXVsdGkgUG9wdWxhdGlvbiBTSSBEaXNlYXNlIE1vZGVsPC9lbT59JyBjbGFzcy4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLm11bHRpcG9wdWxhdGlvbi5pbXBsLk11bHRpUG9wdWxhdGlvblNJRGlzZWFzZU1vZGVsSW1wbAorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5tdWx0aXBvcHVsYXRpb24uaW1wbC5NdWx0aXBvcHVsYXRpb25QYWNrYWdlSW1wbCNnZXRNdWx0aVBvcHVsYXRpb25TSURpc2Vhc2VNb2RlbCgpCisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVDbGFzcyBNVUxUSV9QT1BVTEFUSU9OX1NJX0RJU0VBU0VfTU9ERUwgPSBlSU5TVEFOQ0UuZ2V0TXVsdGlQb3B1bGF0aW9uU0lEaXNlYXNlTW9kZWwoKTsKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5UcmFuc21pc3Npb24gUmF0ZTwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlIGZlYXR1cmUuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFUmVmZXJlbmNlIE1VTFRJX1BPUFVMQVRJT05fU0lfRElTRUFTRV9NT0RFTF9fVFJBTlNNSVNTSU9OX1JBVEUgPSBlSU5TVEFOQ0UuZ2V0TXVsdGlQb3B1bGF0aW9uU0lEaXNlYXNlTW9kZWxfVHJhbnNtaXNzaW9uUmF0ZSgpOworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPlJlY292ZXJ5IFJhdGU8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBmZWF0dXJlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRVJlZmVyZW5jZSBNVUxUSV9QT1BVTEFUSU9OX1NJX0RJU0VBU0VfTU9ERUxfX1JFQ09WRVJZX1JBVEUgPSBlSU5TVEFOQ0UuZ2V0TXVsdGlQb3B1bGF0aW9uU0lEaXNlYXNlTW9kZWxfUmVjb3ZlcnlSYXRlKCk7CisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+SW5mZWN0aW91cyBNb3J0YWxpdHkgUmF0ZTwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlIGZlYXR1cmUuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFUmVmZXJlbmNlIE1VTFRJX1BPUFVMQVRJT05fU0lfRElTRUFTRV9NT0RFTF9fSU5GRUNUSU9VU19NT1JUQUxJVFlfUkFURSA9IGVJTlNUQU5DRS5nZXRNdWx0aVBvcHVsYXRpb25TSURpc2Vhc2VNb2RlbF9JbmZlY3Rpb3VzTW9ydGFsaXR5UmF0ZSgpOworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5tdWx0aXBvcHVsYXRpb24uaW1wbC5NdWx0aVBvcHVsYXRpb25TSVJEaXNlYXNlTW9kZWxJbXBsIDxlbT5NdWx0aSBQb3B1bGF0aW9uIFNJUiBEaXNlYXNlIE1vZGVsPC9lbT59JyBjbGFzcy4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLm11bHRpcG9wdWxhdGlvbi5pbXBsLk11bHRpUG9wdWxhdGlvblNJUkRpc2Vhc2VNb2RlbEltcGwKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMubXVsdGlwb3B1bGF0aW9uLmltcGwuTXVsdGlwb3B1bGF0aW9uUGFja2FnZUltcGwjZ2V0TXVsdGlQb3B1bGF0aW9uU0lSRGlzZWFzZU1vZGVsKCkKKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUNsYXNzIE1VTFRJX1BPUFVMQVRJT05fU0lSX0RJU0VBU0VfTU9ERUwgPSBlSU5TVEFOQ0UuZ2V0TXVsdGlQb3B1bGF0aW9uU0lSRGlzZWFzZU1vZGVsKCk7CisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+SW1tdW5pdHkgTG9zcyBSYXRlPC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UgZmVhdHVyZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVSZWZlcmVuY2UgTVVMVElfUE9QVUxBVElPTl9TSVJfRElTRUFTRV9NT0RFTF9fSU1NVU5JVFlfTE9TU19SQVRFID0gZUlOU1RBTkNFLmdldE11bHRpUG9wdWxhdGlvblNJUkRpc2Vhc2VNb2RlbF9JbW11bml0eUxvc3NSYXRlKCk7CisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLm11bHRpcG9wdWxhdGlvbi5pbXBsLk11bHRpUG9wdWxhdGlvblNFSVJEaXNlYXNlTW9kZWxJbXBsIDxlbT5NdWx0aSBQb3B1bGF0aW9uIFNFSVIgRGlzZWFzZSBNb2RlbDwvZW0+fScgY2xhc3MuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5tdWx0aXBvcHVsYXRpb24uaW1wbC5NdWx0aVBvcHVsYXRpb25TRUlSRGlzZWFzZU1vZGVsSW1wbAorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5tdWx0aXBvcHVsYXRpb24uaW1wbC5NdWx0aXBvcHVsYXRpb25QYWNrYWdlSW1wbCNnZXRNdWx0aVBvcHVsYXRpb25TRUlSRGlzZWFzZU1vZGVsKCkKKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUNsYXNzIE1VTFRJX1BPUFVMQVRJT05fU0VJUl9ESVNFQVNFX01PREVMID0gZUlOU1RBTkNFLmdldE11bHRpUG9wdWxhdGlvblNFSVJEaXNlYXNlTW9kZWwoKTsKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5JbmN1YmF0aW9uIFJhdGU8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBmZWF0dXJlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRVJlZmVyZW5jZSBNVUxUSV9QT1BVTEFUSU9OX1NFSVJfRElTRUFTRV9NT0RFTF9fSU5DVUJBVElPTl9SQVRFID0gZUlOU1RBTkNFLmdldE11bHRpUG9wdWxhdGlvblNFSVJEaXNlYXNlTW9kZWxfSW5jdWJhdGlvblJhdGUoKTsKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMubXVsdGlwb3B1bGF0aW9uLmltcGwuTXVsdGlQb3B1bGF0aW9uU2Vhc29uYWxEaXNlYXNlTW9kZWxJbXBsIDxlbT5NdWx0aSBQb3B1bGF0aW9uIFNlYXNvbmFsIERpc2Vhc2UgTW9kZWw8L2VtPn0nIGNsYXNzLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMubXVsdGlwb3B1bGF0aW9uLmltcGwuTXVsdGlQb3B1bGF0aW9uU2Vhc29uYWxEaXNlYXNlTW9kZWxJbXBsCisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLm11bHRpcG9wdWxhdGlvbi5pbXBsLk11bHRpcG9wdWxhdGlvblBhY2thZ2VJbXBsI2dldE11bHRpUG9wdWxhdGlvblNlYXNvbmFsRGlzZWFzZU1vZGVsKCkKKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUNsYXNzIE1VTFRJX1BPUFVMQVRJT05fU0VBU09OQUxfRElTRUFTRV9NT0RFTCA9IGVJTlNUQU5DRS5nZXRNdWx0aVBvcHVsYXRpb25TZWFzb25hbERpc2Vhc2VNb2RlbCgpOworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPk1vZHVsYXRpb24gUG9pbnRzPC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UgZmVhdHVyZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVSZWZlcmVuY2UgTVVMVElfUE9QVUxBVElPTl9TRUFTT05BTF9ESVNFQVNFX01PREVMX19NT0RVTEFUSU9OX1BPSU5UUyA9IGVJTlNUQU5DRS5nZXRNdWx0aVBvcHVsYXRpb25TZWFzb25hbERpc2Vhc2VNb2RlbF9Nb2R1bGF0aW9uUG9pbnRzKCk7CisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+VXNlIFNwbGluZSBJbnRlcnBvbGF0aW9uPC9iPjwvZW0+JyBhdHRyaWJ1dGUgZmVhdHVyZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVBdHRyaWJ1dGUgTVVMVElfUE9QVUxBVElPTl9TRUFTT05BTF9ESVNFQVNFX01PREVMX19VU0VfU1BMSU5FX0lOVEVSUE9MQVRJT04gPSBlSU5TVEFOQ0UuZ2V0TXVsdGlQb3B1bGF0aW9uU2Vhc29uYWxEaXNlYXNlTW9kZWxfVXNlU3BsaW5lSW50ZXJwb2xhdGlvbigpOworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPlBvcHVsYXRpb24gR3JvdXBzPC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UgZmVhdHVyZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVSZWZlcmVuY2UgTVVMVElfUE9QVUxBVElPTl9TSV9ESVNFQVNFX01PREVMX19QT1BVTEFUSU9OX0dST1VQUyA9IGVJTlNUQU5DRS5nZXRNdWx0aVBvcHVsYXRpb25TSURpc2Vhc2VNb2RlbF9Qb3B1bGF0aW9uR3JvdXBzKCk7CisKKwl9CisKK30gLy9NdWx0aXBvcHVsYXRpb25QYWNrYWdlCmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5tdWx0aXBvcHVsYXRpb24vc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9tdWx0aXBvcHVsYXRpb24vaW1wbC9NdWx0aVBvcHVsYXRpb25TRUlSRGlzZWFzZU1vZGVsSW1wbC5qYXZhIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMubXVsdGlwb3B1bGF0aW9uL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvbXVsdGlwb3B1bGF0aW9uL2ltcGwvTXVsdGlQb3B1bGF0aW9uU0VJUkRpc2Vhc2VNb2RlbEltcGwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMWMwOTFiCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMubXVsdGlwb3B1bGF0aW9uL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvbXVsdGlwb3B1bGF0aW9uL2ltcGwvTXVsdGlQb3B1bGF0aW9uU0VJUkRpc2Vhc2VNb2RlbEltcGwuamF2YQpAQCAtMCwwICsxLDMxNyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOSwyMDEwIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLm11bHRpcG9wdWxhdGlvbi5pbXBsOworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbkNoYWluOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5FTGlzdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5JbnRlcm5hbEVPYmplY3Q7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLmltcGwuRU5vdGlmaWNhdGlvbkltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5Eb3VibGVWYWx1ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLkRvdWJsZVZhbHVlTGlzdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLlN0cmluZ1ZhbHVlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5Ob2RlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5Ob2RlTGFiZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLlNURU1UaW1lOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5tdWx0aXBvcHVsYXRpb24uTXVsdGlQb3B1bGF0aW9uU0VJUkRpc2Vhc2VNb2RlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMubXVsdGlwb3B1bGF0aW9uLk11bHRpcG9wdWxhdGlvblBhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLkRpc2Vhc2VNb2RlbExhYmVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5EaXNlYXNlTW9kZWxMYWJlbFZhbHVlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TRUlSTGFiZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlNFSVJMYWJlbFZhbHVlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsVmFsdWU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuaW1wbC5TRUlSTGFiZWxWYWx1ZUltcGw7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIEFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5NdWx0aSBQb3B1bGF0aW9uIFNFSVIgRGlzZWFzZSBNb2RlbDwvYj48L2VtPicuCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIDxwPgorICogVGhlIGZvbGxvd2luZyBmZWF0dXJlcyBhcmUgaW1wbGVtZW50ZWQ6CisgKiA8dWw+CisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLm11bHRpcG9wdWxhdGlvbi5pbXBsLk11bHRpUG9wdWxhdGlvblNFSVJEaXNlYXNlTW9kZWxJbXBsI2dldEluY3ViYXRpb25SYXRlIDxlbT5JbmN1YmF0aW9uIFJhdGU8L2VtPn08L2xpPgorICogPC91bD4KKyAqIDwvcD4KKyAqCisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBNdWx0aVBvcHVsYXRpb25TRUlSRGlzZWFzZU1vZGVsSW1wbCBleHRlbmRzIE11bHRpUG9wdWxhdGlvblNJUkRpc2Vhc2VNb2RlbEltcGwgaW1wbGVtZW50cyBNdWx0aVBvcHVsYXRpb25TRUlSRGlzZWFzZU1vZGVsIHsKKwkvKioKKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRJbmN1YmF0aW9uUmF0ZSgpIDxlbT5JbmN1YmF0aW9uIFJhdGU8L2VtPn0nIGNvbnRhaW5tZW50IHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI2dldEluY3ViYXRpb25SYXRlKCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgRG91YmxlVmFsdWVMaXN0IGluY3ViYXRpb25SYXRlOworCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCXB1YmxpYyBNdWx0aVBvcHVsYXRpb25TRUlSRGlzZWFzZU1vZGVsSW1wbCgpIHsKKwkJc3VwZXIoKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgRUNsYXNzIGVTdGF0aWNDbGFzcygpIHsKKwkJcmV0dXJuIE11bHRpcG9wdWxhdGlvblBhY2thZ2UuTGl0ZXJhbHMuTVVMVElfUE9QVUxBVElPTl9TRUlSX0RJU0VBU0VfTU9ERUw7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIERvdWJsZVZhbHVlTGlzdCBnZXRJbmN1YmF0aW9uUmF0ZSgpIHsKKwkJcmV0dXJuIGluY3ViYXRpb25SYXRlOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBOb3RpZmljYXRpb25DaGFpbiBiYXNpY1NldEluY3ViYXRpb25SYXRlKERvdWJsZVZhbHVlTGlzdCBuZXdJbmN1YmF0aW9uUmF0ZSwgTm90aWZpY2F0aW9uQ2hhaW4gbXNncykgeworCQlEb3VibGVWYWx1ZUxpc3Qgb2xkSW5jdWJhdGlvblJhdGUgPSBpbmN1YmF0aW9uUmF0ZTsKKwkJaW5jdWJhdGlvblJhdGUgPSBuZXdJbmN1YmF0aW9uUmF0ZTsKKwkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKSB7CisJCQlFTm90aWZpY2F0aW9uSW1wbCBub3RpZmljYXRpb24gPSBuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgTXVsdGlwb3B1bGF0aW9uUGFja2FnZS5NVUxUSV9QT1BVTEFUSU9OX1NFSVJfRElTRUFTRV9NT0RFTF9fSU5DVUJBVElPTl9SQVRFLCBvbGRJbmN1YmF0aW9uUmF0ZSwgbmV3SW5jdWJhdGlvblJhdGUpOworCQkJaWYgKG1zZ3MgPT0gbnVsbCkgbXNncyA9IG5vdGlmaWNhdGlvbjsgZWxzZSBtc2dzLmFkZChub3RpZmljYXRpb24pOworCQl9CisJCXJldHVybiBtc2dzOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIHNldEluY3ViYXRpb25SYXRlKERvdWJsZVZhbHVlTGlzdCBuZXdJbmN1YmF0aW9uUmF0ZSkgeworCQlpZiAobmV3SW5jdWJhdGlvblJhdGUgIT0gaW5jdWJhdGlvblJhdGUpIHsKKwkJCU5vdGlmaWNhdGlvbkNoYWluIG1zZ3MgPSBudWxsOworCQkJaWYgKGluY3ViYXRpb25SYXRlICE9IG51bGwpCisJCQkJbXNncyA9ICgoSW50ZXJuYWxFT2JqZWN0KWluY3ViYXRpb25SYXRlKS5lSW52ZXJzZVJlbW92ZSh0aGlzLCBFT1BQT1NJVEVfRkVBVFVSRV9CQVNFIC0gTXVsdGlwb3B1bGF0aW9uUGFja2FnZS5NVUxUSV9QT1BVTEFUSU9OX1NFSVJfRElTRUFTRV9NT0RFTF9fSU5DVUJBVElPTl9SQVRFLCBudWxsLCBtc2dzKTsKKwkJCWlmIChuZXdJbmN1YmF0aW9uUmF0ZSAhPSBudWxsKQorCQkJCW1zZ3MgPSAoKEludGVybmFsRU9iamVjdCluZXdJbmN1YmF0aW9uUmF0ZSkuZUludmVyc2VBZGQodGhpcywgRU9QUE9TSVRFX0ZFQVRVUkVfQkFTRSAtIE11bHRpcG9wdWxhdGlvblBhY2thZ2UuTVVMVElfUE9QVUxBVElPTl9TRUlSX0RJU0VBU0VfTU9ERUxfX0lOQ1VCQVRJT05fUkFURSwgbnVsbCwgbXNncyk7CisJCQltc2dzID0gYmFzaWNTZXRJbmN1YmF0aW9uUmF0ZShuZXdJbmN1YmF0aW9uUmF0ZSwgbXNncyk7CisJCQlpZiAobXNncyAhPSBudWxsKSBtc2dzLmRpc3BhdGNoKCk7CisJCX0KKwkJZWxzZSBpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpCisJCQllTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBNdWx0aXBvcHVsYXRpb25QYWNrYWdlLk1VTFRJX1BPUFVMQVRJT05fU0VJUl9ESVNFQVNFX01PREVMX19JTkNVQkFUSU9OX1JBVEUsIG5ld0luY3ViYXRpb25SYXRlLCBuZXdJbmN1YmF0aW9uUmF0ZSkpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBOb3RpZmljYXRpb25DaGFpbiBlSW52ZXJzZVJlbW92ZShJbnRlcm5hbEVPYmplY3Qgb3RoZXJFbmQsIGludCBmZWF0dXJlSUQsIE5vdGlmaWNhdGlvbkNoYWluIG1zZ3MpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJCWNhc2UgTXVsdGlwb3B1bGF0aW9uUGFja2FnZS5NVUxUSV9QT1BVTEFUSU9OX1NFSVJfRElTRUFTRV9NT0RFTF9fSU5DVUJBVElPTl9SQVRFOgorCQkJCXJldHVybiBiYXNpY1NldEluY3ViYXRpb25SYXRlKG51bGwsIG1zZ3MpOworCQl9CisJCXJldHVybiBzdXBlci5lSW52ZXJzZVJlbW92ZShvdGhlckVuZCwgZmVhdHVyZUlELCBtc2dzKTsKKwl9CisKKwlAT3ZlcnJpZGUKKwlwdWJsaWMgU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbFZhbHVlIGNvbXB1dGVEaXNlYXNlRGVsdGFzKFNURU1UaW1lIHRpbWUsCisJCQlTdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsVmFsdWUgY3VycmVudFN0YXRlLAorCQkJU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbCBkaXNlYXNlTGFiZWwsIGxvbmcgdGltZURlbHRhLAorCQkJRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZSByZXR1cm5WYWx1ZSkgeworCQkKKwkJLy8gVEhJUyBtZXRob2QgZ2V0cyBjYWxsZWQgbXVsdGlwbGUgdGltZXMsIG9uY2UgZm9yIGVhY2ggcG9wdWxhdGlvbiBpZGVudGlmaWVyCisJCS8vIGluIHRoZSBwb3B1bGF0aW9uIG1vZGVsLgorCQkvLyB3aGljaCBwb3B1bGF0aW9uIGlzICJ0aGlzIi4uLi4KKwkJZmluYWwgU0VJUkxhYmVsVmFsdWUgY3VycmVudFNFSVIgPSAoU0VJUkxhYmVsVmFsdWUpIGN1cnJlbnRTdGF0ZTsKKwkJU3RyaW5nIHRoaXNQb3B1bGF0aW9uID0gZGlzZWFzZUxhYmVsLmdldFBvcHVsYXRpb25Nb2RlbExhYmVsKCkuZ2V0UG9wdWxhdGlvbklkZW50aWZpZXIoKTsKKwkJCisJCS8vIENvbXB1dGUgZGVhdGhzCisJCWZpbmFsIGRvdWJsZSBhZGp1c3RlZEluZmVjdGlvdXNNb3J0YWxpdHlSYXRlID0gZ2V0QWRqdXN0ZWRJbmZlY3Rpb3VzTW9ydGFsaXR5UmF0ZSh0aW1lRGVsdGEsIHRoaXNQb3B1bGF0aW9uKTsKKwkJZmluYWwgZG91YmxlIGRpc2Vhc2VEZWF0aHMgPSBhZGp1c3RlZEluZmVjdGlvdXNNb3J0YWxpdHlSYXRlCisJCQkJKiBjdXJyZW50U0VJUi5nZXRJKCk7CisJCQkJCisJCS8vIG5leHQgZ2V0IGl0J3MgSU5ERVggaW4gdGhlIG1vZGVsCisJCWludCBwb3B1bGF0aW9uSW5kZXggPSB0aGlzLmdldFBvcHVsYXRpb25JbmRleCh0aGlzUG9wdWxhdGlvbik7CQorCQkJCisJCS8vIG5vdyB3ZSBrbm93IHRoZSBpbmRleCBvZiB0aGUgY3VycmVudCBwb3B1bGF0aW9uIGJlaW5nIGludGVncmF0ZWQuCisJCS8vIEdldCB0aGUgY29ycmVjdCB0cmFuc21pc3Npb24gcmF0ZSBsaXN0IGZyb20gdGhlIE1BVFJJWAorCQlFTGlzdDxEb3VibGVWYWx1ZT4gdHJhbnNtaXNzaW9uVmVjdG9yID0gZ2V0VHJhbnNtaXNzaW9uUmF0ZSgpLmdldFZhbHVlTGlzdHMoKS5nZXQocG9wdWxhdGlvbkluZGV4KS5nZXRWYWx1ZXMoKTsKKwkJCisJCS8vIEFMTCB0aGUgb3RoZXIgZGlzZWFzZSBwYXJhbWV0ZXJzIGFyZSBhbHNvIERvdWJsZVZhbHVlTGlzdHMuIFdlIG5vdyBpdGVyYXRlIHRocm91Z2ggYWxsIHBvcHVsYXRpb25zCisJCS8vIGdldCB0aGUgc3BlY2lmaWMgcmF0ZSBwYXJhbWV0ZXJzIGZyb20gRUFDSCBsaXN0IGJhc2VkIG9uIHRoaXMgcG9wdWxhdGlvbiBpbmRleAorCQlkb3VibGUgdGhpc1JlY292ZXJ5UmF0ZSA9IDAuMDsKKwkJaWYoZ2V0UmVjb3ZlcnlSYXRlKCkgIT0gbnVsbCkgdGhpc1JlY292ZXJ5UmF0ZSA9IGdldFJlY292ZXJ5UmF0ZSgpLmdldFZhbHVlcygpLmdldChwb3B1bGF0aW9uSW5kZXgpLmdldFZhbHVlKCk7CisJCWRvdWJsZSB0aGlzSW1tdW5pdHlMb3NzUmF0ZSA9IDAuMDsKKwkJaWYoZ2V0SW1tdW5pdHlMb3NzUmF0ZSgpICE9IG51bGwpCisJCQl0aGlzSW1tdW5pdHlMb3NzUmF0ZSA9IGdldEltbXVuaXR5TG9zc1JhdGUoKS5nZXRWYWx1ZXMoKS5nZXQocG9wdWxhdGlvbkluZGV4KS5nZXRWYWx1ZSgpOworCQlkb3VibGUgdGhpc0luY3ViYXRpb25SYXRlID0gMC4wOworCQlpZihnZXRJbmN1YmF0aW9uUmF0ZSgpICE9IG51bGwpIAorCQkJdGhpc0luY3ViYXRpb25SYXRlID0gZ2V0SW5jdWJhdGlvblJhdGUoKS5nZXRWYWx1ZXMoKS5nZXQocG9wdWxhdGlvbkluZGV4KS5nZXRWYWx1ZSgpOworCQkKKwkJLy8gIE5PVyBpdGVyYXRlIG92ZXIgZXZlcnkgcG9wdWxhdGlvbiAoaW5jbHVkaW5nIHRoaXMgb25lKSB0byBjb21wdXRlIG5ldyBpbmZlY3Rpb25zCisJCS8vICB0aGlzIGluY2x1ZGVzIGluZmVjdGlvbnMgd2l0aGluIGEgcG9wdWxhdGlvbiBncm91cAorCQkvLyAgYW5kIGFsbCB0aGUgY3Jvc3MgdGVybXMKKwkJZG91YmxlIG51bWJlck9mU3VzY2VwdGlibGVUb0V4cG9zZWQgPSAwLjA7CisJCWRvdWJsZSBudW1iZXJTdXNjZXB0aWJsZSA9IGN1cnJlbnRTRUlSLmdldFMoKTsKKwkJTm9kZSB0aGlzTm9kZSA9IGRpc2Vhc2VMYWJlbC5nZXROb2RlKCk7CisJCQorCQlFTGlzdDxTdHJpbmdWYWx1ZT4gZ3JvdXBMaXN0ID0gZ2V0UG9wdWxhdGlvbkdyb3VwcygpLmdldFZhbHVlcygpOworCQkKKwkJZm9yKGludCBpID0gMDsgaTwgdHJhbnNtaXNzaW9uVmVjdG9yLnNpemUoKTsgaSArKykgeworCQkJLy8gV2UgbmVlZCB0byBnZXQgdGhlIGlkZW50aWZpZXIgb2YgdGhlIGl0aCBwb3B1bGF0aW9uIG1vZGVsCisJCQlTdHJpbmcgbmV4dFBvcCA9IGdyb3VwTGlzdC5nZXQoaSkuZ2V0VmFsdWUoKTsKKwkJCQorICAgICAgICAgICAgLy8vLy8vLy8vLy8vLy8vLy8vCisJCQkvLyAxLiBjb21wdXRlIEJFVEEgZm9yIHRyYW5zbWlzc2lvbiBmcm9tIHRoZSBpdGggcG9wdWxhdGlvbiB0byB0aGlzIHBvcHVsYXRpb24KKwkJCSBkb3VibGUgc3BlY2lmaWNUcmFuc21pc3Npb24gPSB0cmFuc21pc3Npb25WZWN0b3IuZ2V0KGkpLmdldFZhbHVlKCk7CisJCQkgZG91YmxlIGFkanVzdGVkVHJhbnNtaXNzaW9uID0gZ2V0QWRqdXN0ZWRUcmFuc21pc3Npb25SYXRlKHNwZWNpZmljVHJhbnNtaXNzaW9uLCB0aW1lRGVsdGEpOworCQkJIGlmKCF0aGlzLmlzRnJlcXVlbmN5RGVwZW5kZW50KCkpIGFkanVzdGVkVHJhbnNtaXNzaW9uICo9IGdldFRyYW5zbWlzc2lvblJhdGVTY2FsZUZhY3RvcihkaXNlYXNlTGFiZWwpOworCQkJIAorCQkJCisJCQkvLyB3ZSBuZWVkIHRvIGdldCB0aGUgZGlzZWFzZSBsYWJlbCBmb3IgdGhlIGl0aCBwb3B1bGF0aW9uIGFzIHdlbGwuCisJCQkvLyB0byBnZXQgdGhlIG9uIHNpdGUgbnVtYmVyIG9mIGluZmVjdGlvcyBpbmRpdmlkdWFscyBvZiB0eXBlIGkKKwkJCUVMaXN0PE5vZGVMYWJlbD4gbm9kZUxhYmVscyA9IHRoaXNOb2RlLmdldExhYmVscygpOworCQkJZm9yKGludCBqID0gMDsgaiA8IG5vZGVMYWJlbHMuc2l6ZSgpOyBqICsrKSB7CisJCQkJTm9kZUxhYmVsIGxhYmVsID0gbm9kZUxhYmVscy5nZXQoaik7CisJCQkJaWYobGFiZWwgaW5zdGFuY2VvZiBTRUlSTGFiZWwpIHsKKwkJCQkJaWYgKHRoaXMgPT0gKChTRUlSTGFiZWwpbGFiZWwpLmdldERlY29yYXRvcigpKSB7CisJCQkJCQlTdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsIG90aGVyRGlzZWFzZUxhYmVsID0gKFN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWwpIGxhYmVsOworCQkJCQkJLy8gbm93IGNoZWNrIHRoZSBwb3B1YWx0aW9uIHR5cGUKKwkJCQkJCVN0cmluZyBvdGhlclBvcHVsYXRpb24gPSBvdGhlckRpc2Vhc2VMYWJlbC5nZXRQb3B1bGF0aW9uTW9kZWxMYWJlbCgpLmdldFBvcHVsYXRpb25JZGVudGlmaWVyKCk7CisJCQkJCQlpZihvdGhlclBvcHVsYXRpb24uZXF1YWxzKG5leHRQb3ApKSB7CisJCQkJCQkJLy8gWWVzPworCQkJCQkJCS8vIHRoZW4gd2UgZm91bmQgdGhlIGxhYmVsIGZvciB0aGUgY29ycmVjdCBuZXh0IHBvcHVsYXRpb24KKwkJCQkJCQkKKwkJCQorCQkJCQkJCS8vIGZvciB0aGlzIHBvcHVsYXRpb24gd2UgbmVlZCB0byBnZXQgdGhlIEVGRkVDVElWRSBJbmZlY3Rpb3VzIGluY2x1ZGluZworCQkJCQkJCS8vIEFMTCBuZWlnaGJvcmluZyBub2RlcworCQkJCQkJCWRvdWJsZSBvbnNpdGVJbmZlY3Rpb3VzID0gKChTRUlSTGFiZWxWYWx1ZSkgb3RoZXJEaXNlYXNlTGFiZWwuZ2V0VGVtcFZhbHVlKCkpLmdldEkoKTsKKwkJCQkJCQlmaW5hbCBkb3VibGUgZWZmZWN0aXZlSW5mZWN0aW91cyA9IGdldE5vcm1hbGl6ZWRFZmZlY3RpdmVJbmZlY3Rpb3VzKG90aGVyUG9wdWxhdGlvbiwgdGhpc05vZGUsIG90aGVyRGlzZWFzZUxhYmVsLCBvbnNpdGVJbmZlY3Rpb3VzKTsKKwkJCQkJCQkKKwkJCQkJCSAgICAvLyBBREQgdXAgdGhlIG5ldyBpbmNpZGVuY2UKKwkJCQkJCQludW1iZXJPZlN1c2NlcHRpYmxlVG9FeHBvc2VkICs9IGFkanVzdGVkVHJhbnNtaXNzaW9uICogbnVtYmVyU3VzY2VwdGlibGUgKiBlZmZlY3RpdmVJbmZlY3Rpb3VzOworCQkJCQkJfQorCQkJCQl9CisJCQkJfS8vIGlmIGl0J3MgYW4gU0kgbGFiZWwKKwkJCX0vL2ZvciBhbGwgbGFiZWxzIGluIFRISVMgbm9kZQorCQl9Ly8gRm9yIGFsbCBwb3B1bGF0aW9uIGluIHRoZSBtb2RlbAorCQkKKwkJZG91YmxlIG51bWJlck9mSW5mZWN0ZWRUb1JlY292ZXJlZCA9IGdldEFkanVzdGVkUmVjb3ZlcnlSYXRlKHRoaXNSZWNvdmVyeVJhdGUsIHRpbWVEZWx0YSkgKiBjdXJyZW50U0VJUi5nZXRJKCk7CisJCWRvdWJsZSBudW1iZXJPZlJlY292ZXJlZFRvU3VzY2VwdGlibGUgPSBnZXRBZGp1c3RlZEltbXVuaXR5TG9zc1JhdGUodGhpc0ltbXVuaXR5TG9zc1JhdGUsIHRpbWVEZWx0YSkgKiBjdXJyZW50U0VJUi5nZXRSKCk7CisJCWRvdWJsZSBudW1iZXJPZkV4cG9zZWRUb0luZmVjdGVkID0gZ2V0QWRqdXN0ZWRJbmN1YmF0aW9uUmF0ZSh0aGlzSW5jdWJhdGlvblJhdGUsIHRpbWVEZWx0YSkgKiBjdXJyZW50U0VJUi5nZXRFKCk7CisJCQorCQkvLyBEZXRlcm1pbmUgZGVsdGEgUworCQlmaW5hbCBkb3VibGUgZGVsdGFTID0gLSBudW1iZXJPZlN1c2NlcHRpYmxlVG9FeHBvc2VkICsgbnVtYmVyT2ZSZWNvdmVyZWRUb1N1c2NlcHRpYmxlOworCQkvLyBEZWx0YSBFCisJCWZpbmFsIGRvdWJsZSBkZWx0YUUgPSBudW1iZXJPZlN1c2NlcHRpYmxlVG9FeHBvc2VkIC0gbnVtYmVyT2ZFeHBvc2VkVG9JbmZlY3RlZDsKKwkJLy8gRGV0ZXJtaW5lIGRlbHRhIEkKKwkJZmluYWwgZG91YmxlIGRlbHRhSSA9IG51bWJlck9mRXhwb3NlZFRvSW5mZWN0ZWQgLSBudW1iZXJPZkluZmVjdGVkVG9SZWNvdmVyZWQgLSBkaXNlYXNlRGVhdGhzOworCQkvLyBEZXRlcm1pbmUgZGVsdGEgUgkKKwkJZmluYWwgZG91YmxlIGRlbHRhUiA9IG51bWJlck9mSW5mZWN0ZWRUb1JlY292ZXJlZCAtIG51bWJlck9mUmVjb3ZlcmVkVG9TdXNjZXB0aWJsZTsKKwkJCisJCVNFSVJMYWJlbFZhbHVlSW1wbCByZXQgPSAoU0VJUkxhYmVsVmFsdWVJbXBsKXJldHVyblZhbHVlOworCQlyZXQuc2V0UyhkZWx0YVMpOworCQlyZXQuc2V0RShkZWx0YUUpOworCQlyZXQuc2V0SShkZWx0YUkpOworCQlyZXQuc2V0UihkZWx0YVIpOworCQlyZXQuc2V0SW5jaWRlbmNlKG51bWJlck9mU3VzY2VwdGlibGVUb0V4cG9zZWQpOworCQlyZXQuc2V0RGlzZWFzZURlYXRocyhkaXNlYXNlRGVhdGhzKTsKKwkJcmV0dXJuIHJldDsKKwkJCisJfQorCQorCXB1YmxpYyBkb3VibGUgZ2V0QWRqdXN0ZWRJbmN1YmF0aW9uUmF0ZShkb3VibGUgc3BlY2lmaWNJbmNSYXRlLCBsb25nIHRpbWVEZWx0YSkgeworCQlyZXR1cm4gKHNwZWNpZmljSW5jUmF0ZSAqICgoZG91YmxlKSB0aW1lRGVsdGEgLyAoZG91YmxlKSBnZXRUaW1lUGVyaW9kKCkpICk7CisJfSAvLyBnZXRBZGp1c3RlZEluY3ViYXRpb25SYXRlCisJCisJQE92ZXJyaWRlCisJcHVibGljIERpc2Vhc2VNb2RlbExhYmVsIGNyZWF0ZURpc2Vhc2VNb2RlbExhYmVsKFN0cmluZyBwb3B1bGF0aW9uSWRlbnRpZmllcikgeworCQlyZXR1cm4gU3RhbmRhcmRGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVTRUlSTGFiZWwoKTsKKwl9CisKKwlAT3ZlcnJpZGUKKwlwdWJsaWMgRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZSBjcmVhdGVEaXNlYXNlTW9kZWxMYWJlbFZhbHVlKFN0cmluZyBwb3B1bGF0aW9uSWRlbnRpZmllcikgeworCQlyZXR1cm4gU3RhbmRhcmRGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVTRUlSTGFiZWxWYWx1ZSgpOworCX0KKworCisJCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIE9iamVjdCBlR2V0KGludCBmZWF0dXJlSUQsIGJvb2xlYW4gcmVzb2x2ZSwgYm9vbGVhbiBjb3JlVHlwZSkgeworCQlzd2l0Y2ggKGZlYXR1cmVJRCkgeworCQkJY2FzZSBNdWx0aXBvcHVsYXRpb25QYWNrYWdlLk1VTFRJX1BPUFVMQVRJT05fU0VJUl9ESVNFQVNFX01PREVMX19JTkNVQkFUSU9OX1JBVEU6CisJCQkJcmV0dXJuIGdldEluY3ViYXRpb25SYXRlKCk7CisJCX0KKwkJcmV0dXJuIHN1cGVyLmVHZXQoZmVhdHVyZUlELCByZXNvbHZlLCBjb3JlVHlwZSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgZVNldChpbnQgZmVhdHVyZUlELCBPYmplY3QgbmV3VmFsdWUpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJCWNhc2UgTXVsdGlwb3B1bGF0aW9uUGFja2FnZS5NVUxUSV9QT1BVTEFUSU9OX1NFSVJfRElTRUFTRV9NT0RFTF9fSU5DVUJBVElPTl9SQVRFOgorCQkJCXNldEluY3ViYXRpb25SYXRlKChEb3VibGVWYWx1ZUxpc3QpbmV3VmFsdWUpOworCQkJCXJldHVybjsKKwkJfQorCQlzdXBlci5lU2V0KGZlYXR1cmVJRCwgbmV3VmFsdWUpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGVVbnNldChpbnQgZmVhdHVyZUlEKSB7CisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7CisJCQljYXNlIE11bHRpcG9wdWxhdGlvblBhY2thZ2UuTVVMVElfUE9QVUxBVElPTl9TRUlSX0RJU0VBU0VfTU9ERUxfX0lOQ1VCQVRJT05fUkFURToKKwkJCQlzZXRJbmN1YmF0aW9uUmF0ZSgoRG91YmxlVmFsdWVMaXN0KW51bGwpOworCQkJCXJldHVybjsKKwkJfQorCQlzdXBlci5lVW5zZXQoZmVhdHVyZUlEKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgYm9vbGVhbiBlSXNTZXQoaW50IGZlYXR1cmVJRCkgeworCQlzd2l0Y2ggKGZlYXR1cmVJRCkgeworCQkJY2FzZSBNdWx0aXBvcHVsYXRpb25QYWNrYWdlLk1VTFRJX1BPUFVMQVRJT05fU0VJUl9ESVNFQVNFX01PREVMX19JTkNVQkFUSU9OX1JBVEU6CisJCQkJcmV0dXJuIGluY3ViYXRpb25SYXRlICE9IG51bGw7CisJCX0KKwkJcmV0dXJuIHN1cGVyLmVJc1NldChmZWF0dXJlSUQpOworCX0KKworfSAvL011bHRpUG9wdWxhdGlvblNFSVJEaXNlYXNlTW9kZWxJbXBsCmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5tdWx0aXBvcHVsYXRpb24vc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9tdWx0aXBvcHVsYXRpb24vaW1wbC9NdWx0aVBvcHVsYXRpb25TSURpc2Vhc2VNb2RlbEltcGwuamF2YSBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLm11bHRpcG9wdWxhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL211bHRpcG9wdWxhdGlvbi9pbXBsL011bHRpUG9wdWxhdGlvblNJRGlzZWFzZU1vZGVsSW1wbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMzNDViNzQKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5tdWx0aXBvcHVsYXRpb24vc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9tdWx0aXBvcHVsYXRpb24vaW1wbC9NdWx0aVBvcHVsYXRpb25TSURpc2Vhc2VNb2RlbEltcGwuamF2YQpAQCAtMCwwICsxLDkxNSBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMubXVsdGlwb3B1bGF0aW9uLmltcGw7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTAgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7CitpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247CitpbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOworaW1wb3J0IGphdmEudXRpbC5MaXN0OworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbkNoYWluOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5CYXNpY0VMaXN0OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5FTGlzdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5JbnRlcm5hbEVPYmplY3Q7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLmltcGwuRU5vdGlmaWNhdGlvbkltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLlNURU1VUkk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5Eb3VibGVWYWx1ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLkRvdWJsZVZhbHVlTGlzdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLkRvdWJsZVZhbHVlTWF0cml4OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uU3RyaW5nVmFsdWU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5TdHJpbmdWYWx1ZUxpc3Q7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkVkZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkVkZ2VMYWJlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguR3JhcGg7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkludGVncmF0aW9uTGFiZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkxhYmVsVmFsdWU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLk5vZGU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLk5vZGVMYWJlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuTW9kZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLlNURU1UaW1lOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLkFyZWFMYWJlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5pbXBsLkNvbW1vbkJvcmRlclJlbGF0aW9uc2hpcExhYmVsSW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5pbXBsLlJvYWRUcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbEltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuaW1wbC5Sb2FkVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxWYWx1ZUltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5ub2Rlcy5SZWdpb247CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLkFjdGl2YXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMubXVsdGlwb3B1bGF0aW9uLk11bHRpUG9wdWxhdGlvblNJRGlzZWFzZU1vZGVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5tdWx0aXBvcHVsYXRpb24uTXVsdGlwb3B1bGF0aW9uUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuRGlzZWFzZU1vZGVsTGFiZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLkRpc2Vhc2VNb2RlbExhYmVsVmFsdWU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLkluZmVjdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TSUluZmVjdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TSUxhYmVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TSUxhYmVsVmFsdWU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmRGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5pbXBsLlNJTGFiZWxWYWx1ZUltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLmltcGwuU3RhbmRhcmREaXNlYXNlTW9kZWxJbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5Qb3B1bGF0aW9uTW9kZWxMYWJlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLmltcGwuU3RhbmRhcmRGYWN0b3J5SW1wbDsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPk11bHRpIFBvcHVsYXRpb24gU0kgRGlzZWFzZSBNb2RlbDwvYj48L2VtPicuCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIDxwPgorICogVGhlIGZvbGxvd2luZyBmZWF0dXJlcyBhcmUgaW1wbGVtZW50ZWQ6CisgKiA8dWw+CisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLm11bHRpcG9wdWxhdGlvbi5pbXBsLk11bHRpUG9wdWxhdGlvblNJRGlzZWFzZU1vZGVsSW1wbCNnZXRQb3B1bGF0aW9uR3JvdXBzIDxlbT5Qb3B1bGF0aW9uIEdyb3VwczwvZW0+fTwvbGk+CisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLm11bHRpcG9wdWxhdGlvbi5pbXBsLk11bHRpUG9wdWxhdGlvblNJRGlzZWFzZU1vZGVsSW1wbCNnZXRUcmFuc21pc3Npb25SYXRlIDxlbT5UcmFuc21pc3Npb24gUmF0ZTwvZW0+fTwvbGk+CisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLm11bHRpcG9wdWxhdGlvbi5pbXBsLk11bHRpUG9wdWxhdGlvblNJRGlzZWFzZU1vZGVsSW1wbCNnZXRSZWNvdmVyeVJhdGUgPGVtPlJlY292ZXJ5IFJhdGU8L2VtPn08L2xpPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5tdWx0aXBvcHVsYXRpb24uaW1wbC5NdWx0aVBvcHVsYXRpb25TSURpc2Vhc2VNb2RlbEltcGwjZ2V0SW5mZWN0aW91c01vcnRhbGl0eVJhdGUgPGVtPkluZmVjdGlvdXMgTW9ydGFsaXR5IFJhdGU8L2VtPn08L2xpPgorICogPC91bD4KKyAqIDwvcD4KKyAqCisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBNdWx0aVBvcHVsYXRpb25TSURpc2Vhc2VNb2RlbEltcGwgZXh0ZW5kcyBTdGFuZGFyZERpc2Vhc2VNb2RlbEltcGwgaW1wbGVtZW50cyBNdWx0aVBvcHVsYXRpb25TSURpc2Vhc2VNb2RlbCB7CisJLyoqCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0UG9wdWxhdGlvbkdyb3VwcygpIDxlbT5Qb3B1bGF0aW9uIEdyb3VwczwvZW0+fScgY29udGFpbm1lbnQgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZ2V0UG9wdWxhdGlvbkdyb3VwcygpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIFN0cmluZ1ZhbHVlTGlzdCBwb3B1bGF0aW9uR3JvdXBzOworCQorCisJLyoqCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0VHJhbnNtaXNzaW9uUmF0ZSgpIDxlbT5UcmFuc21pc3Npb24gUmF0ZTwvZW0+fScgY29udGFpbm1lbnQgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZ2V0VHJhbnNtaXNzaW9uUmF0ZSgpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIERvdWJsZVZhbHVlTWF0cml4IHRyYW5zbWlzc2lvblJhdGU7CisKKwkvKioKKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRSZWNvdmVyeVJhdGUoKSA8ZW0+UmVjb3ZlcnkgUmF0ZTwvZW0+fScgY29udGFpbm1lbnQgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZ2V0UmVjb3ZlcnlSYXRlKCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgRG91YmxlVmFsdWVMaXN0IHJlY292ZXJ5UmF0ZTsKKworCS8qKgorCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldEluZmVjdGlvdXNNb3J0YWxpdHlSYXRlKCkgPGVtPkluZmVjdGlvdXMgTW9ydGFsaXR5IFJhdGU8L2VtPn0nIGNvbnRhaW5tZW50IHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI2dldEluZmVjdGlvdXNNb3J0YWxpdHlSYXRlKCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgRG91YmxlVmFsdWVMaXN0IGluZmVjdGlvdXNNb3J0YWxpdHlSYXRlOworCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCXB1YmxpYyBNdWx0aVBvcHVsYXRpb25TSURpc2Vhc2VNb2RlbEltcGwoKSB7CisJCXN1cGVyKCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIEVDbGFzcyBlU3RhdGljQ2xhc3MoKSB7CisJCXJldHVybiBNdWx0aXBvcHVsYXRpb25QYWNrYWdlLkxpdGVyYWxzLk1VTFRJX1BPUFVMQVRJT05fU0lfRElTRUFTRV9NT0RFTDsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRG91YmxlVmFsdWVNYXRyaXggZ2V0VHJhbnNtaXNzaW9uUmF0ZSgpIHsKKwkJcmV0dXJuIHRyYW5zbWlzc2lvblJhdGU7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIE5vdGlmaWNhdGlvbkNoYWluIGJhc2ljU2V0VHJhbnNtaXNzaW9uUmF0ZShEb3VibGVWYWx1ZU1hdHJpeCBuZXdUcmFuc21pc3Npb25SYXRlLCBOb3RpZmljYXRpb25DaGFpbiBtc2dzKSB7CisJCURvdWJsZVZhbHVlTWF0cml4IG9sZFRyYW5zbWlzc2lvblJhdGUgPSB0cmFuc21pc3Npb25SYXRlOworCQl0cmFuc21pc3Npb25SYXRlID0gbmV3VHJhbnNtaXNzaW9uUmF0ZTsKKwkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKSB7CisJCQlFTm90aWZpY2F0aW9uSW1wbCBub3RpZmljYXRpb24gPSBuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgTXVsdGlwb3B1bGF0aW9uUGFja2FnZS5NVUxUSV9QT1BVTEFUSU9OX1NJX0RJU0VBU0VfTU9ERUxfX1RSQU5TTUlTU0lPTl9SQVRFLCBvbGRUcmFuc21pc3Npb25SYXRlLCBuZXdUcmFuc21pc3Npb25SYXRlKTsKKwkJCWlmIChtc2dzID09IG51bGwpIG1zZ3MgPSBub3RpZmljYXRpb247IGVsc2UgbXNncy5hZGQobm90aWZpY2F0aW9uKTsKKwkJfQorCQlyZXR1cm4gbXNnczsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRUcmFuc21pc3Npb25SYXRlKERvdWJsZVZhbHVlTWF0cml4IG5ld1RyYW5zbWlzc2lvblJhdGUpIHsKKwkJaWYgKG5ld1RyYW5zbWlzc2lvblJhdGUgIT0gdHJhbnNtaXNzaW9uUmF0ZSkgeworCQkJTm90aWZpY2F0aW9uQ2hhaW4gbXNncyA9IG51bGw7CisJCQlpZiAodHJhbnNtaXNzaW9uUmF0ZSAhPSBudWxsKQorCQkJCW1zZ3MgPSAoKEludGVybmFsRU9iamVjdCl0cmFuc21pc3Npb25SYXRlKS5lSW52ZXJzZVJlbW92ZSh0aGlzLCBFT1BQT1NJVEVfRkVBVFVSRV9CQVNFIC0gTXVsdGlwb3B1bGF0aW9uUGFja2FnZS5NVUxUSV9QT1BVTEFUSU9OX1NJX0RJU0VBU0VfTU9ERUxfX1RSQU5TTUlTU0lPTl9SQVRFLCBudWxsLCBtc2dzKTsKKwkJCWlmIChuZXdUcmFuc21pc3Npb25SYXRlICE9IG51bGwpCisJCQkJbXNncyA9ICgoSW50ZXJuYWxFT2JqZWN0KW5ld1RyYW5zbWlzc2lvblJhdGUpLmVJbnZlcnNlQWRkKHRoaXMsIEVPUFBPU0lURV9GRUFUVVJFX0JBU0UgLSBNdWx0aXBvcHVsYXRpb25QYWNrYWdlLk1VTFRJX1BPUFVMQVRJT05fU0lfRElTRUFTRV9NT0RFTF9fVFJBTlNNSVNTSU9OX1JBVEUsIG51bGwsIG1zZ3MpOworCQkJbXNncyA9IGJhc2ljU2V0VHJhbnNtaXNzaW9uUmF0ZShuZXdUcmFuc21pc3Npb25SYXRlLCBtc2dzKTsKKwkJCWlmIChtc2dzICE9IG51bGwpIG1zZ3MuZGlzcGF0Y2goKTsKKwkJfQorCQllbHNlIGlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkKKwkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIE11bHRpcG9wdWxhdGlvblBhY2thZ2UuTVVMVElfUE9QVUxBVElPTl9TSV9ESVNFQVNFX01PREVMX19UUkFOU01JU1NJT05fUkFURSwgbmV3VHJhbnNtaXNzaW9uUmF0ZSwgbmV3VHJhbnNtaXNzaW9uUmF0ZSkpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBEb3VibGVWYWx1ZUxpc3QgZ2V0UmVjb3ZlcnlSYXRlKCkgeworCQlyZXR1cm4gcmVjb3ZlcnlSYXRlOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBOb3RpZmljYXRpb25DaGFpbiBiYXNpY1NldFJlY292ZXJ5UmF0ZShEb3VibGVWYWx1ZUxpc3QgbmV3UmVjb3ZlcnlSYXRlLCBOb3RpZmljYXRpb25DaGFpbiBtc2dzKSB7CisJCURvdWJsZVZhbHVlTGlzdCBvbGRSZWNvdmVyeVJhdGUgPSByZWNvdmVyeVJhdGU7CisJCXJlY292ZXJ5UmF0ZSA9IG5ld1JlY292ZXJ5UmF0ZTsKKwkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKSB7CisJCQlFTm90aWZpY2F0aW9uSW1wbCBub3RpZmljYXRpb24gPSBuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgTXVsdGlwb3B1bGF0aW9uUGFja2FnZS5NVUxUSV9QT1BVTEFUSU9OX1NJX0RJU0VBU0VfTU9ERUxfX1JFQ09WRVJZX1JBVEUsIG9sZFJlY292ZXJ5UmF0ZSwgbmV3UmVjb3ZlcnlSYXRlKTsKKwkJCWlmIChtc2dzID09IG51bGwpIG1zZ3MgPSBub3RpZmljYXRpb247IGVsc2UgbXNncy5hZGQobm90aWZpY2F0aW9uKTsKKwkJfQorCQlyZXR1cm4gbXNnczsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRSZWNvdmVyeVJhdGUoRG91YmxlVmFsdWVMaXN0IG5ld1JlY292ZXJ5UmF0ZSkgeworCQlpZiAobmV3UmVjb3ZlcnlSYXRlICE9IHJlY292ZXJ5UmF0ZSkgeworCQkJTm90aWZpY2F0aW9uQ2hhaW4gbXNncyA9IG51bGw7CisJCQlpZiAocmVjb3ZlcnlSYXRlICE9IG51bGwpCisJCQkJbXNncyA9ICgoSW50ZXJuYWxFT2JqZWN0KXJlY292ZXJ5UmF0ZSkuZUludmVyc2VSZW1vdmUodGhpcywgRU9QUE9TSVRFX0ZFQVRVUkVfQkFTRSAtIE11bHRpcG9wdWxhdGlvblBhY2thZ2UuTVVMVElfUE9QVUxBVElPTl9TSV9ESVNFQVNFX01PREVMX19SRUNPVkVSWV9SQVRFLCBudWxsLCBtc2dzKTsKKwkJCWlmIChuZXdSZWNvdmVyeVJhdGUgIT0gbnVsbCkKKwkJCQltc2dzID0gKChJbnRlcm5hbEVPYmplY3QpbmV3UmVjb3ZlcnlSYXRlKS5lSW52ZXJzZUFkZCh0aGlzLCBFT1BQT1NJVEVfRkVBVFVSRV9CQVNFIC0gTXVsdGlwb3B1bGF0aW9uUGFja2FnZS5NVUxUSV9QT1BVTEFUSU9OX1NJX0RJU0VBU0VfTU9ERUxfX1JFQ09WRVJZX1JBVEUsIG51bGwsIG1zZ3MpOworCQkJbXNncyA9IGJhc2ljU2V0UmVjb3ZlcnlSYXRlKG5ld1JlY292ZXJ5UmF0ZSwgbXNncyk7CisJCQlpZiAobXNncyAhPSBudWxsKSBtc2dzLmRpc3BhdGNoKCk7CisJCX0KKwkJZWxzZSBpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpCisJCQllTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBNdWx0aXBvcHVsYXRpb25QYWNrYWdlLk1VTFRJX1BPUFVMQVRJT05fU0lfRElTRUFTRV9NT0RFTF9fUkVDT1ZFUllfUkFURSwgbmV3UmVjb3ZlcnlSYXRlLCBuZXdSZWNvdmVyeVJhdGUpKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRG91YmxlVmFsdWVMaXN0IGdldEluZmVjdGlvdXNNb3J0YWxpdHlSYXRlKCkgeworCQlyZXR1cm4gaW5mZWN0aW91c01vcnRhbGl0eVJhdGU7CisJfQorCQorCS8qKgorCSAqIEdldCB0aGUgcGFydGljdWxhciBpbmZlY3Rpb3VzIG1vcnRhbGl0eSByYXRlIGZvciBhIHNwZWNpZmljIHBvcHVsYXRpb24gZ3JvdXAgYnkgbmFtZQorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJcHVibGljIGRvdWJsZSBnZXRJbmZlY3Rpb3VzTW9ydGFsaXR5KFN0cmluZyBwb3B1bGF0aW9uTmFtZSkgeworCQkvLyBuZXh0IGdldCBpdCdzIElOREVYIGluIHRoZSBtb2RlbAorCQkvLyBUT0RPIHdlIHNob3VsZCBlbmNhcHN1bGF0ZSB0aGlzIGNvZGUgaW4gYSBoZWxwZXIgbWV0aG9kCisJCWludCBwb3B1bGF0aW9uSW5kZXggPSB0aGlzLmdldFBvcHVsYXRpb25JbmRleChwb3B1bGF0aW9uTmFtZSk7CisJCWlmKGdldEluZmVjdGlvdXNNb3J0YWxpdHlSYXRlKCkgIT0gbnVsbCkKKwkJCXJldHVybiBnZXRJbmZlY3Rpb3VzTW9ydGFsaXR5UmF0ZSgpLmdldFZhbHVlcygpLmdldChwb3B1bGF0aW9uSW5kZXgpLmdldFZhbHVlKCk7CisJCWVsc2UgcmV0dXJuIDAuMDsgLy9kZWZhdWx0IGlmIG5vdCBzcGVjaWZpZWQKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgTm90aWZpY2F0aW9uQ2hhaW4gYmFzaWNTZXRJbmZlY3Rpb3VzTW9ydGFsaXR5UmF0ZShEb3VibGVWYWx1ZUxpc3QgbmV3SW5mZWN0aW91c01vcnRhbGl0eVJhdGUsIE5vdGlmaWNhdGlvbkNoYWluIG1zZ3MpIHsKKwkJRG91YmxlVmFsdWVMaXN0IG9sZEluZmVjdGlvdXNNb3J0YWxpdHlSYXRlID0gaW5mZWN0aW91c01vcnRhbGl0eVJhdGU7CisJCWluZmVjdGlvdXNNb3J0YWxpdHlSYXRlID0gbmV3SW5mZWN0aW91c01vcnRhbGl0eVJhdGU7CisJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkgeworCQkJRU5vdGlmaWNhdGlvbkltcGwgbm90aWZpY2F0aW9uID0gbmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIE11bHRpcG9wdWxhdGlvblBhY2thZ2UuTVVMVElfUE9QVUxBVElPTl9TSV9ESVNFQVNFX01PREVMX19JTkZFQ1RJT1VTX01PUlRBTElUWV9SQVRFLCBvbGRJbmZlY3Rpb3VzTW9ydGFsaXR5UmF0ZSwgbmV3SW5mZWN0aW91c01vcnRhbGl0eVJhdGUpOworCQkJaWYgKG1zZ3MgPT0gbnVsbCkgbXNncyA9IG5vdGlmaWNhdGlvbjsgZWxzZSBtc2dzLmFkZChub3RpZmljYXRpb24pOworCQl9CisJCXJldHVybiBtc2dzOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIHNldEluZmVjdGlvdXNNb3J0YWxpdHlSYXRlKERvdWJsZVZhbHVlTGlzdCBuZXdJbmZlY3Rpb3VzTW9ydGFsaXR5UmF0ZSkgeworCQlpZiAobmV3SW5mZWN0aW91c01vcnRhbGl0eVJhdGUgIT0gaW5mZWN0aW91c01vcnRhbGl0eVJhdGUpIHsKKwkJCU5vdGlmaWNhdGlvbkNoYWluIG1zZ3MgPSBudWxsOworCQkJaWYgKGluZmVjdGlvdXNNb3J0YWxpdHlSYXRlICE9IG51bGwpCisJCQkJbXNncyA9ICgoSW50ZXJuYWxFT2JqZWN0KWluZmVjdGlvdXNNb3J0YWxpdHlSYXRlKS5lSW52ZXJzZVJlbW92ZSh0aGlzLCBFT1BQT1NJVEVfRkVBVFVSRV9CQVNFIC0gTXVsdGlwb3B1bGF0aW9uUGFja2FnZS5NVUxUSV9QT1BVTEFUSU9OX1NJX0RJU0VBU0VfTU9ERUxfX0lORkVDVElPVVNfTU9SVEFMSVRZX1JBVEUsIG51bGwsIG1zZ3MpOworCQkJaWYgKG5ld0luZmVjdGlvdXNNb3J0YWxpdHlSYXRlICE9IG51bGwpCisJCQkJbXNncyA9ICgoSW50ZXJuYWxFT2JqZWN0KW5ld0luZmVjdGlvdXNNb3J0YWxpdHlSYXRlKS5lSW52ZXJzZUFkZCh0aGlzLCBFT1BQT1NJVEVfRkVBVFVSRV9CQVNFIC0gTXVsdGlwb3B1bGF0aW9uUGFja2FnZS5NVUxUSV9QT1BVTEFUSU9OX1NJX0RJU0VBU0VfTU9ERUxfX0lORkVDVElPVVNfTU9SVEFMSVRZX1JBVEUsIG51bGwsIG1zZ3MpOworCQkJbXNncyA9IGJhc2ljU2V0SW5mZWN0aW91c01vcnRhbGl0eVJhdGUobmV3SW5mZWN0aW91c01vcnRhbGl0eVJhdGUsIG1zZ3MpOworCQkJaWYgKG1zZ3MgIT0gbnVsbCkgbXNncy5kaXNwYXRjaCgpOworCQl9CisJCWVsc2UgaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQorCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgTXVsdGlwb3B1bGF0aW9uUGFja2FnZS5NVUxUSV9QT1BVTEFUSU9OX1NJX0RJU0VBU0VfTU9ERUxfX0lORkVDVElPVVNfTU9SVEFMSVRZX1JBVEUsIG5ld0luZmVjdGlvdXNNb3J0YWxpdHlSYXRlLCBuZXdJbmZlY3Rpb3VzTW9ydGFsaXR5UmF0ZSkpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBTdHJpbmdWYWx1ZUxpc3QgZ2V0UG9wdWxhdGlvbkdyb3VwcygpIHsKKwkJcmV0dXJuIHBvcHVsYXRpb25Hcm91cHM7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIE5vdGlmaWNhdGlvbkNoYWluIGJhc2ljU2V0UG9wdWxhdGlvbkdyb3VwcyhTdHJpbmdWYWx1ZUxpc3QgbmV3UG9wdWxhdGlvbkdyb3VwcywgTm90aWZpY2F0aW9uQ2hhaW4gbXNncykgeworCQlTdHJpbmdWYWx1ZUxpc3Qgb2xkUG9wdWxhdGlvbkdyb3VwcyA9IHBvcHVsYXRpb25Hcm91cHM7CisJCXBvcHVsYXRpb25Hcm91cHMgPSBuZXdQb3B1bGF0aW9uR3JvdXBzOworCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpIHsKKwkJCUVOb3RpZmljYXRpb25JbXBsIG5vdGlmaWNhdGlvbiA9IG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBNdWx0aXBvcHVsYXRpb25QYWNrYWdlLk1VTFRJX1BPUFVMQVRJT05fU0lfRElTRUFTRV9NT0RFTF9fUE9QVUxBVElPTl9HUk9VUFMsIG9sZFBvcHVsYXRpb25Hcm91cHMsIG5ld1BvcHVsYXRpb25Hcm91cHMpOworCQkJaWYgKG1zZ3MgPT0gbnVsbCkgbXNncyA9IG5vdGlmaWNhdGlvbjsgZWxzZSBtc2dzLmFkZChub3RpZmljYXRpb24pOworCQl9CisJCXJldHVybiBtc2dzOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIHNldFBvcHVsYXRpb25Hcm91cHMoU3RyaW5nVmFsdWVMaXN0IG5ld1BvcHVsYXRpb25Hcm91cHMpIHsKKwkJaWYgKG5ld1BvcHVsYXRpb25Hcm91cHMgIT0gcG9wdWxhdGlvbkdyb3VwcykgeworCQkJTm90aWZpY2F0aW9uQ2hhaW4gbXNncyA9IG51bGw7CisJCQlpZiAocG9wdWxhdGlvbkdyb3VwcyAhPSBudWxsKQorCQkJCW1zZ3MgPSAoKEludGVybmFsRU9iamVjdClwb3B1bGF0aW9uR3JvdXBzKS5lSW52ZXJzZVJlbW92ZSh0aGlzLCBFT1BQT1NJVEVfRkVBVFVSRV9CQVNFIC0gTXVsdGlwb3B1bGF0aW9uUGFja2FnZS5NVUxUSV9QT1BVTEFUSU9OX1NJX0RJU0VBU0VfTU9ERUxfX1BPUFVMQVRJT05fR1JPVVBTLCBudWxsLCBtc2dzKTsKKwkJCWlmIChuZXdQb3B1bGF0aW9uR3JvdXBzICE9IG51bGwpCisJCQkJbXNncyA9ICgoSW50ZXJuYWxFT2JqZWN0KW5ld1BvcHVsYXRpb25Hcm91cHMpLmVJbnZlcnNlQWRkKHRoaXMsIEVPUFBPU0lURV9GRUFUVVJFX0JBU0UgLSBNdWx0aXBvcHVsYXRpb25QYWNrYWdlLk1VTFRJX1BPUFVMQVRJT05fU0lfRElTRUFTRV9NT0RFTF9fUE9QVUxBVElPTl9HUk9VUFMsIG51bGwsIG1zZ3MpOworCQkJbXNncyA9IGJhc2ljU2V0UG9wdWxhdGlvbkdyb3VwcyhuZXdQb3B1bGF0aW9uR3JvdXBzLCBtc2dzKTsKKwkJCWlmIChtc2dzICE9IG51bGwpIG1zZ3MuZGlzcGF0Y2goKTsKKwkJfQorCQllbHNlIGlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkKKwkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIE11bHRpcG9wdWxhdGlvblBhY2thZ2UuTVVMVElfUE9QVUxBVElPTl9TSV9ESVNFQVNFX01PREVMX19QT1BVTEFUSU9OX0dST1VQUywgbmV3UG9wdWxhdGlvbkdyb3VwcywgbmV3UG9wdWxhdGlvbkdyb3VwcykpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBOb3RpZmljYXRpb25DaGFpbiBlSW52ZXJzZVJlbW92ZShJbnRlcm5hbEVPYmplY3Qgb3RoZXJFbmQsIGludCBmZWF0dXJlSUQsIE5vdGlmaWNhdGlvbkNoYWluIG1zZ3MpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJCWNhc2UgTXVsdGlwb3B1bGF0aW9uUGFja2FnZS5NVUxUSV9QT1BVTEFUSU9OX1NJX0RJU0VBU0VfTU9ERUxfX1BPUFVMQVRJT05fR1JPVVBTOgorCQkJCXJldHVybiBiYXNpY1NldFBvcHVsYXRpb25Hcm91cHMobnVsbCwgbXNncyk7CisJCQljYXNlIE11bHRpcG9wdWxhdGlvblBhY2thZ2UuTVVMVElfUE9QVUxBVElPTl9TSV9ESVNFQVNFX01PREVMX19UUkFOU01JU1NJT05fUkFURToKKwkJCQlyZXR1cm4gYmFzaWNTZXRUcmFuc21pc3Npb25SYXRlKG51bGwsIG1zZ3MpOworCQkJY2FzZSBNdWx0aXBvcHVsYXRpb25QYWNrYWdlLk1VTFRJX1BPUFVMQVRJT05fU0lfRElTRUFTRV9NT0RFTF9fUkVDT1ZFUllfUkFURToKKwkJCQlyZXR1cm4gYmFzaWNTZXRSZWNvdmVyeVJhdGUobnVsbCwgbXNncyk7CisJCQljYXNlIE11bHRpcG9wdWxhdGlvblBhY2thZ2UuTVVMVElfUE9QVUxBVElPTl9TSV9ESVNFQVNFX01PREVMX19JTkZFQ1RJT1VTX01PUlRBTElUWV9SQVRFOgorCQkJCXJldHVybiBiYXNpY1NldEluZmVjdGlvdXNNb3J0YWxpdHlSYXRlKG51bGwsIG1zZ3MpOworCQl9CisJCXJldHVybiBzdXBlci5lSW52ZXJzZVJlbW92ZShvdGhlckVuZCwgZmVhdHVyZUlELCBtc2dzKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgT2JqZWN0IGVHZXQoaW50IGZlYXR1cmVJRCwgYm9vbGVhbiByZXNvbHZlLCBib29sZWFuIGNvcmVUeXBlKSB7CisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7CisJCQljYXNlIE11bHRpcG9wdWxhdGlvblBhY2thZ2UuTVVMVElfUE9QVUxBVElPTl9TSV9ESVNFQVNFX01PREVMX19QT1BVTEFUSU9OX0dST1VQUzoKKwkJCQlyZXR1cm4gZ2V0UG9wdWxhdGlvbkdyb3VwcygpOworCQkJY2FzZSBNdWx0aXBvcHVsYXRpb25QYWNrYWdlLk1VTFRJX1BPUFVMQVRJT05fU0lfRElTRUFTRV9NT0RFTF9fVFJBTlNNSVNTSU9OX1JBVEU6CisJCQkJcmV0dXJuIGdldFRyYW5zbWlzc2lvblJhdGUoKTsKKwkJCWNhc2UgTXVsdGlwb3B1bGF0aW9uUGFja2FnZS5NVUxUSV9QT1BVTEFUSU9OX1NJX0RJU0VBU0VfTU9ERUxfX1JFQ09WRVJZX1JBVEU6CisJCQkJcmV0dXJuIGdldFJlY292ZXJ5UmF0ZSgpOworCQkJY2FzZSBNdWx0aXBvcHVsYXRpb25QYWNrYWdlLk1VTFRJX1BPUFVMQVRJT05fU0lfRElTRUFTRV9NT0RFTF9fSU5GRUNUSU9VU19NT1JUQUxJVFlfUkFURToKKwkJCQlyZXR1cm4gZ2V0SW5mZWN0aW91c01vcnRhbGl0eVJhdGUoKTsKKwkJfQorCQlyZXR1cm4gc3VwZXIuZUdldChmZWF0dXJlSUQsIHJlc29sdmUsIGNvcmVUeXBlKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBlU2V0KGludCBmZWF0dXJlSUQsIE9iamVjdCBuZXdWYWx1ZSkgeworCQlzd2l0Y2ggKGZlYXR1cmVJRCkgeworCQkJY2FzZSBNdWx0aXBvcHVsYXRpb25QYWNrYWdlLk1VTFRJX1BPUFVMQVRJT05fU0lfRElTRUFTRV9NT0RFTF9fUE9QVUxBVElPTl9HUk9VUFM6CisJCQkJc2V0UG9wdWxhdGlvbkdyb3VwcygoU3RyaW5nVmFsdWVMaXN0KW5ld1ZhbHVlKTsKKwkJCQlyZXR1cm47CisJCQljYXNlIE11bHRpcG9wdWxhdGlvblBhY2thZ2UuTVVMVElfUE9QVUxBVElPTl9TSV9ESVNFQVNFX01PREVMX19UUkFOU01JU1NJT05fUkFURToKKwkJCQlzZXRUcmFuc21pc3Npb25SYXRlKChEb3VibGVWYWx1ZU1hdHJpeCluZXdWYWx1ZSk7CisJCQkJcmV0dXJuOworCQkJY2FzZSBNdWx0aXBvcHVsYXRpb25QYWNrYWdlLk1VTFRJX1BPUFVMQVRJT05fU0lfRElTRUFTRV9NT0RFTF9fUkVDT1ZFUllfUkFURToKKwkJCQlzZXRSZWNvdmVyeVJhdGUoKERvdWJsZVZhbHVlTGlzdCluZXdWYWx1ZSk7CisJCQkJcmV0dXJuOworCQkJY2FzZSBNdWx0aXBvcHVsYXRpb25QYWNrYWdlLk1VTFRJX1BPUFVMQVRJT05fU0lfRElTRUFTRV9NT0RFTF9fSU5GRUNUSU9VU19NT1JUQUxJVFlfUkFURToKKwkJCQlzZXRJbmZlY3Rpb3VzTW9ydGFsaXR5UmF0ZSgoRG91YmxlVmFsdWVMaXN0KW5ld1ZhbHVlKTsKKwkJCQlyZXR1cm47CisJCX0KKwkJc3VwZXIuZVNldChmZWF0dXJlSUQsIG5ld1ZhbHVlKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBlVW5zZXQoaW50IGZlYXR1cmVJRCkgeworCQlzd2l0Y2ggKGZlYXR1cmVJRCkgeworCQkJY2FzZSBNdWx0aXBvcHVsYXRpb25QYWNrYWdlLk1VTFRJX1BPUFVMQVRJT05fU0lfRElTRUFTRV9NT0RFTF9fUE9QVUxBVElPTl9HUk9VUFM6CisJCQkJc2V0UG9wdWxhdGlvbkdyb3VwcygoU3RyaW5nVmFsdWVMaXN0KW51bGwpOworCQkJCXJldHVybjsKKwkJCWNhc2UgTXVsdGlwb3B1bGF0aW9uUGFja2FnZS5NVUxUSV9QT1BVTEFUSU9OX1NJX0RJU0VBU0VfTU9ERUxfX1RSQU5TTUlTU0lPTl9SQVRFOgorCQkJCXNldFRyYW5zbWlzc2lvblJhdGUoKERvdWJsZVZhbHVlTWF0cml4KW51bGwpOworCQkJCXJldHVybjsKKwkJCWNhc2UgTXVsdGlwb3B1bGF0aW9uUGFja2FnZS5NVUxUSV9QT1BVTEFUSU9OX1NJX0RJU0VBU0VfTU9ERUxfX1JFQ09WRVJZX1JBVEU6CisJCQkJc2V0UmVjb3ZlcnlSYXRlKChEb3VibGVWYWx1ZUxpc3QpbnVsbCk7CisJCQkJcmV0dXJuOworCQkJY2FzZSBNdWx0aXBvcHVsYXRpb25QYWNrYWdlLk1VTFRJX1BPUFVMQVRJT05fU0lfRElTRUFTRV9NT0RFTF9fSU5GRUNUSU9VU19NT1JUQUxJVFlfUkFURToKKwkJCQlzZXRJbmZlY3Rpb3VzTW9ydGFsaXR5UmF0ZSgoRG91YmxlVmFsdWVMaXN0KW51bGwpOworCQkJCXJldHVybjsKKwkJfQorCQlzdXBlci5lVW5zZXQoZmVhdHVyZUlEKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgYm9vbGVhbiBlSXNTZXQoaW50IGZlYXR1cmVJRCkgeworCQlzd2l0Y2ggKGZlYXR1cmVJRCkgeworCQkJY2FzZSBNdWx0aXBvcHVsYXRpb25QYWNrYWdlLk1VTFRJX1BPUFVMQVRJT05fU0lfRElTRUFTRV9NT0RFTF9fUE9QVUxBVElPTl9HUk9VUFM6CisJCQkJcmV0dXJuIHBvcHVsYXRpb25Hcm91cHMgIT0gbnVsbDsKKwkJCWNhc2UgTXVsdGlwb3B1bGF0aW9uUGFja2FnZS5NVUxUSV9QT1BVTEFUSU9OX1NJX0RJU0VBU0VfTU9ERUxfX1RSQU5TTUlTU0lPTl9SQVRFOgorCQkJCXJldHVybiB0cmFuc21pc3Npb25SYXRlICE9IG51bGw7CisJCQljYXNlIE11bHRpcG9wdWxhdGlvblBhY2thZ2UuTVVMVElfUE9QVUxBVElPTl9TSV9ESVNFQVNFX01PREVMX19SRUNPVkVSWV9SQVRFOgorCQkJCXJldHVybiByZWNvdmVyeVJhdGUgIT0gbnVsbDsKKwkJCWNhc2UgTXVsdGlwb3B1bGF0aW9uUGFja2FnZS5NVUxUSV9QT1BVTEFUSU9OX1NJX0RJU0VBU0VfTU9ERUxfX0lORkVDVElPVVNfTU9SVEFMSVRZX1JBVEU6CisJCQkJcmV0dXJuIGluZmVjdGlvdXNNb3J0YWxpdHlSYXRlICE9IG51bGw7CisJCX0KKwkJcmV0dXJuIHN1cGVyLmVJc1NldChmZWF0dXJlSUQpOworCX0KKwkKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJcHVibGljIGRvdWJsZSBnZXRBZGp1c3RlZEluZmVjdGlvdXNNb3J0YWxpdHlSYXRlKGxvbmcgdGltZURlbHRhLCBmaW5hbCBTdHJpbmcgcG9wdWxhdGlvbk5hbWUpIHsKKwkJLy8gVE9ETyB0aGlzIGRpdmlzaW9uIGNhbiBiZSBlbGltaW5hdGVkIGlmIHRpbWVEZWx0YT09Z2V0VGltZVBlcmlvZAorCQlyZXR1cm4gZ2V0SW5mZWN0aW91c01vcnRhbGl0eShwb3B1bGF0aW9uTmFtZSkKKwkJKiAoKGRvdWJsZSkgdGltZURlbHRhIC8gKGRvdWJsZSkgZ2V0VGltZVBlcmlvZCgpKTsKKwl9IC8vIGdldEFkanVzdGVkSW5mZWN0aW91c01vcnRhbGl0eVJhdGUKKworCisKKwlAT3ZlcnJpZGUKKwlwdWJsaWMgU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbFZhbHVlIGNvbXB1dGVEaXNlYXNlRGVsdGFzKFNURU1UaW1lIHRpbWUsCisJCQlTdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsVmFsdWUgY3VycmVudFN0YXRlLAorCQkJU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbCBkaXNlYXNlTGFiZWwsIGxvbmcgdGltZURlbHRhLAorCQkJRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZSByZXR1cm5WYWx1ZSkgeworCQkKKwkJLy8gVEhJUyBtZXRob2QgZ2V0cyBjYWxsZWQgbXVsdGlwbGUgdGltZXMsIG9uY2UgZm9yIGVhY2ggcG9wdWxhdGlvbiBpZGVudGlmaWVyCisJCS8vIGluIHRoZSBwb3B1bGF0aW9uIG1vZGVsLgorCQkvLyB3aGljaCBwb3B1bGF0aW9uIGlzICJ0aGlzIi4uLi4KKwkJZmluYWwgU0lMYWJlbFZhbHVlIGN1cnJlbnRTSSA9IChTSUxhYmVsVmFsdWUpIGN1cnJlbnRTdGF0ZTsKKwkJU3RyaW5nIHRoaXNQb3B1bGF0aW9uID0gZGlzZWFzZUxhYmVsLmdldFBvcHVsYXRpb25Nb2RlbExhYmVsKCkuZ2V0UG9wdWxhdGlvbklkZW50aWZpZXIoKTsKKwkJCisJCS8vIENvbXB1dGUgZGVhdGhzCisJCWZpbmFsIGRvdWJsZSBhZGp1c3RlZEluZmVjdGlvdXNNb3J0YWxpdHlSYXRlID0gZ2V0QWRqdXN0ZWRJbmZlY3Rpb3VzTW9ydGFsaXR5UmF0ZSh0aW1lRGVsdGEsIHRoaXNQb3B1bGF0aW9uKTsKKwkJZmluYWwgZG91YmxlIGRpc2Vhc2VEZWF0aHMgPSBhZGp1c3RlZEluZmVjdGlvdXNNb3J0YWxpdHlSYXRlCisJCQkJKiBjdXJyZW50U0kuZ2V0SSgpOworCQkJCQorCQkvLyBuZXh0IGdldCBpdCdzIElOREVYIGluIHRoZSBtb2RlbAorCQlpbnQgcG9wdWxhdGlvbkluZGV4ID0gZ2V0UG9wdWxhdGlvbkluZGV4KHRoaXNQb3B1bGF0aW9uKTsKKwkJCQorCQkvLyBub3cgd2Uga25vdyB0aGUgaW5kZXggb2YgdGhlIGN1cnJlbnQgcG9wdWxhdGlvbiBiZWluZyBpbnRlZ3JhdGVkLgorCQkvLyBHZXQgdGhlIGNvcnJlY3QgdHJhbnNtaXNzaW9uIHJhdGUgbGlzdCBmcm9tIHRoZSBNQVRSSVgKKwkJRUxpc3Q8RG91YmxlVmFsdWU+IHRyYW5zbWlzc2lvblZlY3RvciA9IGdldFRyYW5zbWlzc2lvblJhdGUoKS5nZXRWYWx1ZUxpc3RzKCkuZ2V0KHBvcHVsYXRpb25JbmRleCkuZ2V0VmFsdWVzKCk7CisJCQorCQkvLyBBTEwgdGhlIG90aGVyIGRpc2Vhc2UgcGFyYW1ldGVycyBhcmUgYWxzbyBEb3VibGVWYWx1ZUxpc3RzLiBXZSBub3cgaXRlcmF0ZSB0aHJvdWdoIGFsbCBwb3B1bGF0aW9ucworCQkvLyBnZXQgdGhlIHNwZWNpZmljIHJhdGUgcGFyYW1ldGVycyBmcm9tIEVBQ0ggbGlzdCBiYXNlZCBvbiB0aGlzIHBvcHVsYXRpb24gaW5kZXgKKwkJZG91YmxlIHRoaXNSZWNvdmVyeVJhdGUgPSAwLjA7CisJCWlmKGdldFJlY292ZXJ5UmF0ZSgpICE9IG51bGwpIHRoaXNSZWNvdmVyeVJhdGUgPSBnZXRSZWNvdmVyeVJhdGUoKS5nZXRWYWx1ZXMoKS5nZXQocG9wdWxhdGlvbkluZGV4KS5nZXRWYWx1ZSgpOworCQkKKwkJCisJCS8vICBOT1cgaXRlcmF0ZSBvdmVyIGV2ZXJ5IHBvcHVsYXRpb24gKGluY2x1ZGluZyB0aGlzIG9uZSkgdG8gY29tcHV0ZSBuZXcgaW5mZWN0aW9ucworCQkvLyAgdGhpcyBpbmNsdWRlcyBpbmZlY3Rpb25zIHdpdGhpbiBhIHBvcHVsYXRpb24gZ3JvdXAKKwkJLy8gIGFuZCBhbGwgdGhlIGNyb3NzIHRlcm1zCisJCWRvdWJsZSBudW1iZXJPZlN1c2NlcHRpYmxlVG9JbmZlY3RlZCA9IDAuMDsKKwkJZG91YmxlIG51bWJlclN1c2NlcHRpYmxlID0gY3VycmVudFNJLmdldFMoKTsKKwkJTm9kZSB0aGlzTm9kZSA9IGRpc2Vhc2VMYWJlbC5nZXROb2RlKCk7CisJCQorCQlFTGlzdDxTdHJpbmdWYWx1ZT4gZ3JvdXBMaXN0ID0gZ2V0UG9wdWxhdGlvbkdyb3VwcygpLmdldFZhbHVlcygpOworCQkKKwkJZm9yKGludCBpID0gMDsgaTwgdHJhbnNtaXNzaW9uVmVjdG9yLnNpemUoKTsgaSArKykgeworCQkJLy8gV2UgbmVlZCB0byBnZXQgdGhlIGlkZW50aWZpZXIgb2YgdGhlIGl0aCBwb3B1bGF0aW9uIG1vZGVsCisJCQlTdHJpbmcgbmV4dFBvcCA9IGdyb3VwTGlzdC5nZXQoaSkuZ2V0VmFsdWUoKTsKKwkJCQorICAgICAgICAgICAgLy8vLy8vLy8vLy8vLy8vLy8vCisJCQkvLyAxLiBjb21wdXRlIEJFVEEgZm9yIHRyYW5zbWlzc2lvbiBmcm9tIHRoZSBpdGggcG9wdWxhdGlvbiB0byB0aGlzIHBvcHVsYXRpb24KKwkJCSBkb3VibGUgc3BlY2lmaWNUcmFuc21pc3Npb24gPSB0cmFuc21pc3Npb25WZWN0b3IuZ2V0KGkpLmdldFZhbHVlKCk7CisJCQkgZG91YmxlIGFkanVzdGVkVHJhbnNtaXNzaW9uID0gZ2V0QWRqdXN0ZWRUcmFuc21pc3Npb25SYXRlKHNwZWNpZmljVHJhbnNtaXNzaW9uLCB0aW1lRGVsdGEpOworCQkJIGlmKCF0aGlzLmlzRnJlcXVlbmN5RGVwZW5kZW50KCkpIGFkanVzdGVkVHJhbnNtaXNzaW9uICo9IGdldFRyYW5zbWlzc2lvblJhdGVTY2FsZUZhY3RvcihkaXNlYXNlTGFiZWwpOworCQkJIAorCQkJCisJCQkvLyB3ZSBuZWVkIHRvIGdldCB0aGUgZGlzZWFzZSBsYWJlbCBmb3IgdGhlIGl0aCBwb3B1bGF0aW9uIGFzIHdlbGwuCisJCQkvLyB0byBnZXQgdGhlIG9uIHNpdGUgbnVtYmVyIG9mIGluZmVjdGlvcyBpbmRpdmlkdWFscyBvZiB0eXBlIGkKKwkJCUVMaXN0PE5vZGVMYWJlbD4gbm9kZUxhYmVscyA9IHRoaXNOb2RlLmdldExhYmVscygpOworCQkJZm9yKGludCBqID0gMDsgaiA8IG5vZGVMYWJlbHMuc2l6ZSgpOyBqICsrKSB7CisJCQkJTm9kZUxhYmVsIGxhYmVsID0gbm9kZUxhYmVscy5nZXQoaik7CisJCQkJaWYobGFiZWwgaW5zdGFuY2VvZiBTSUxhYmVsKSB7CisJCQkJCWlmICh0aGlzID09ICgoU0lMYWJlbClsYWJlbCkuZ2V0RGVjb3JhdG9yKCkpIHsKKwkJCQkJCVN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWwgb3RoZXJEaXNlYXNlTGFiZWwgPSAoU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbCkgbGFiZWw7CisJCQkJCQkvLyBub3cgY2hlY2sgdGhlIHBvcHVhbHRpb24gdHlwZQorCQkJCQkJU3RyaW5nIG90aGVyUG9wdWxhdGlvbiA9IG90aGVyRGlzZWFzZUxhYmVsLmdldFBvcHVsYXRpb25Nb2RlbExhYmVsKCkuZ2V0UG9wdWxhdGlvbklkZW50aWZpZXIoKTsKKwkJCQkJCWlmKG90aGVyUG9wdWxhdGlvbi5lcXVhbHMobmV4dFBvcCkpIHsKKwkJCQkJCQkvLyBZZXM/CisJCQkJCQkJLy8gdGhlbiB3ZSBmb3VuZCB0aGUgbGFiZWwgZm9yIHRoZSBjb3JyZWN0IG5leHQgcG9wdWxhdGlvbgorCQkJCQkJCQorCQkJCisJCQkJCQkJLy8gZm9yIHRoaXMgcG9wdWxhdGlvbiB3ZSBuZWVkIHRvIGdldCB0aGUgRUZGRUNUSVZFIEluZmVjdGlvdXMgaW5jbHVkaW5nCisJCQkJCQkJLy8gQUxMIG5laWdoYm9yaW5nIG5vZGVzCisJCQkJCQkJZG91YmxlIG9uc2l0ZUluZmVjdGlvdXMgPSAoKFNJTGFiZWxWYWx1ZSkgb3RoZXJEaXNlYXNlTGFiZWwuZ2V0VGVtcFZhbHVlKCkpLmdldEkoKTsKKwkJCQkJCQlmaW5hbCBkb3VibGUgZWZmZWN0aXZlSW5mZWN0aW91cyA9IGdldE5vcm1hbGl6ZWRFZmZlY3RpdmVJbmZlY3Rpb3VzKG90aGVyUG9wdWxhdGlvbiwgdGhpc05vZGUsIG90aGVyRGlzZWFzZUxhYmVsLCBvbnNpdGVJbmZlY3Rpb3VzKTsKKwkJCQkJCQkKKwkJCQkJCSAgICAvLyBBREQgdXAgdGhlIG5ldyBpbmNpZGVuY2UKKwkJCQkJCQludW1iZXJPZlN1c2NlcHRpYmxlVG9JbmZlY3RlZCArPSBhZGp1c3RlZFRyYW5zbWlzc2lvbiAqIG51bWJlclN1c2NlcHRpYmxlICogZWZmZWN0aXZlSW5mZWN0aW91czsKKwkJCQkJCX0KKwkJCQkJfQorCQkJCX0vLyBpZiBpdCdzIGFuIFNJIGxhYmVsCisJCQl9Ly9mb3IgYWxsIGxhYmVscyBpbiBUSElTIG5vZGUKKwkJfS8vIEZvciBhbGwgcG9wdWxhdGlvbiBpbiB0aGUgbW9kZWwKKwkJCisJCWRvdWJsZSBudW1iZXJPZkluZmVjdGVkVG9TdXNjZXB0aWJsZSA9IGdldEFkanVzdGVkUmVjb3ZlcnlSYXRlKHRoaXNSZWNvdmVyeVJhdGUsIHRpbWVEZWx0YSkgKiBjdXJyZW50U0kuZ2V0SSgpOworCQkKKwkKKwkJLy8gRGV0ZXJtaW5lIGRlbHRhIFMKKwkJZmluYWwgZG91YmxlIGRlbHRhUyA9IC0gbnVtYmVyT2ZTdXNjZXB0aWJsZVRvSW5mZWN0ZWQgKyBudW1iZXJPZkluZmVjdGVkVG9TdXNjZXB0aWJsZTsKKwkJLy8gRGV0ZXJtaW5lIGRlbHRhIEkKKwkJZmluYWwgZG91YmxlIGRlbHRhSSA9IG51bWJlck9mU3VzY2VwdGlibGVUb0luZmVjdGVkIC0gbnVtYmVyT2ZJbmZlY3RlZFRvU3VzY2VwdGlibGUgLSBkaXNlYXNlRGVhdGhzOwkKKwkKKwkJU0lMYWJlbFZhbHVlSW1wbCByZXQgPSAoU0lMYWJlbFZhbHVlSW1wbClyZXR1cm5WYWx1ZTsKKwkJcmV0LnNldFMoZGVsdGFTKTsKKwkJcmV0LnNldEkoZGVsdGFJKTsKKwkJcmV0LnNldEluY2lkZW5jZShudW1iZXJPZlN1c2NlcHRpYmxlVG9JbmZlY3RlZCk7CisJCXJldC5zZXREaXNlYXNlRGVhdGhzKGRpc2Vhc2VEZWF0aHMpOworCQlyZXR1cm4gcmV0OworCQkKKwl9CisJCisJcHJvdGVjdGVkIGludCBnZXRQb3B1bGF0aW9uSW5kZXgoU3RyaW5nIHRoaXNQb3B1bGF0aW9uKSB7CisJCS8vIG5leHQgZ2V0IGl0J3MgSU5ERVggaW4gdGhlIG1vZGVsCisJCS8vIFRPRE8gd2Ugc2hvdWxkIGVuY2Fwc3VsYXRlIHRoaXMgY29kZSBpbiBhIGhlbHBlciBtZXRob2QKKwkJaW50IHBvcHVsYXRpb25JbmRleCA9IC0xOworCQlFTGlzdDxTdHJpbmdWYWx1ZT4gZ3JvdXBMaXN0ID0gZ2V0UG9wdWxhdGlvbkdyb3VwcygpLmdldFZhbHVlcygpOworCQlmb3IoaW50IGkgPTA7IGkgPCBncm91cExpc3Quc2l6ZSgpOyBpICsrKSB7CisJCQlTdHJpbmcgbmV4dFBvcCA9IGdyb3VwTGlzdC5nZXQoaSkuZ2V0VmFsdWUoKTsKKwkJCWlmKG5leHRQb3AuZXF1YWxzSWdub3JlQ2FzZSh0aGlzUG9wdWxhdGlvbikpIHsKKwkJCXBvcHVsYXRpb25JbmRleCA9IGk7CisJCQlicmVhazsKKwkJCX0JCisJCX0KKwkJaWYocG9wdWxhdGlvbkluZGV4IDwgMCkgeworCQkJLy8gc2hvdWxkIG5ldmVyIGhhcHBlbgorCQkJQWN0aXZhdG9yLmxvZ0Vycm9yKCJNdWx0aVBvcHVsYXRpb25TSURpc2Vhc2VNb2RlbC5jb21wdXRlRGlzZWFzZURlbHRhcygpIEVycm9yLCBQb3B1bGF0aW9uIG5hbWVkICIrdGhpc1BvcHVsYXRpb24rIiBub3QgZm91bmQuIGNoZWNrIHNwZWxsaW5nICEhIiwgbmV3IEV4Y2VwdGlvbigpKTsKKwkJfQorCQlyZXR1cm4gcG9wdWxhdGlvbkluZGV4OworCX0KKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFJldHVybnMgdGhlIHRpbWUgaW50ZXJ2YWwgZGVsdGFUIGRpdmlkZWQgYnkgdGhlIGluaXRpYWwgdGltZSBwZXJpb2QKKwkgKiBAcGFyYW0gdGltZURlbHRhCisJICogQHBhcmFtIHNwZWNpZmljVHJhbnNtaXNzaW9uCisJICogQHJldHVybgorCSAqIAorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJcHVibGljIGRvdWJsZSBnZXRBZGp1c3RlZFRyYW5zbWlzc2lvblJhdGUoZG91YmxlIHNwZWNpZmljVHJhbnNtaXNzaW9uLCBsb25nIHRpbWVEZWx0YSkgeworCQlyZXR1cm4gKHNwZWNpZmljVHJhbnNtaXNzaW9uICogKChkb3VibGUpIHRpbWVEZWx0YSAvIChkb3VibGUpIGdldFRpbWVQZXJpb2QoKSkgKTsKKwl9IC8vIGdldEFkanVzdGVkVHJhbnNtaXNzaW9uUmF0ZQorCQorCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogCisJICogQHBhcmFtIHRpbWVEZWx0YQorCSAqIAorCSAqIEByZXR1cm4KKwkgKiAKKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCXB1YmxpYyBkb3VibGUgZ2V0QWRqdXN0ZWRSZWNvdmVyeVJhdGUoZG91YmxlIHNwZWNpZmljUmVjb3ZlcnlSYXRlLCBsb25nIHRpbWVEZWx0YSkgeworCQlyZXR1cm4gKHNwZWNpZmljUmVjb3ZlcnlSYXRlICogKChkb3VibGUpIHRpbWVEZWx0YSAvIChkb3VibGUpIGdldFRpbWVQZXJpb2QoKSkgKTsKKwl9IC8vIGdldEFkanVzdGVkUmVjb3ZlcnlSYXRlCisJCisJCisJLyoqCisJICogVGhpcyBtZXRob2QgaXMgdXNlZCB0byBzY2FsZSB0aGUgdHJhbnNtaXNzaW9uIHJhdGUuCisgCSAqIGl0IHJldHVybnMgdGhlIGxvY2FsIGRlbnNpdHkgZGl2aWRlZCBieSBhICJyZWZlcmVuY2UiIGRlbnNpdHkKKwkgKiBAcGFyYW0gZGlzZWFzZUxhYmVsIHRoZSBsYWJlbCBiZWluZyBwcm9jZXNzZWQKKwkgKiBAcmV0dXJuIHRoZSB0cmFuc21pc3Npb24gcmF0ZSBzY2FsZSBmYWN0b3IgZm9yIHRoZSBsYWJlbCBiZWluZyBwcm9jZXNzZWQKKwkgKi8KKwlwdWJsaWMgZG91YmxlIGdldFRyYW5zbWlzc2lvblJhdGVTY2FsZUZhY3RvcigKKwkJCVN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWwgZGlzZWFzZUxhYmVsKSB7CisJCQorCQlkb3VibGUgcmVmZXJlbmNlRGVuc2l0eSA9IGdldFJlZmVyZW5jZVBvcHVsYXRpb25EZW5zaXR5KCk7CisJCS8vIGFzc2VydChyZWZlcmVuY2VEZW5zaXR5ID4gMCk7CisJCS8vIG5lZWQgZWRpdG9yIGNoZWNrIHNvIHJlZiBkZW5zaXR5IGFsd2F5cyA+MS4gRGVmYXVsdCBpcyAxMDAuCisJCWFzc2VydCBnZXRBcmVhKGRpc2Vhc2VMYWJlbC5nZXRQb3B1bGF0aW9uTGFiZWwoKSkgPiAwLjA7CisJCWRvdWJsZSBsb2NhbERlbnNpdHkgPSAoKFN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZSlkaXNlYXNlTGFiZWwuZ2V0VGVtcFZhbHVlKCkpLmdldFBvcHVsYXRpb25Db3VudCgpL2dldEFyZWEoZGlzZWFzZUxhYmVsLmdldFBvcHVsYXRpb25MYWJlbCgpKTsKKwkJcmV0dXJuIGxvY2FsRGVuc2l0eS9yZWZlcmVuY2VEZW5zaXR5OworCX0gLy8gZ2V0VHJhbnNtaXNzaW9uUmF0ZVNjYWxlRmFjdG9yCisJCisJLyoqCisJICogVGhpcyBtZXRob2QgcmVwbGFjZXMgdGhlIG9uc2l0ZUluZmVjdGlvdXMgdmFsdWUgCisJICogZm9yIGEgc3BlY2lmaWMgcG9wdWxhdGlvbiB0eXBlIChieSBpbmRleCkKKwkgKiB3aXRoIGFuIGVmZmVjdGl2ZUluZmVjdGlvdXMgb2YgYSBwYXJ0aWN1bGFyIHBvcHVsYXRpb24gZ3JvdXAgKGJ5IG5hbWUpCisJICogc2l6ZSBiYXNlZCBvbiBtaXhpbmcgd2l0aCBuZWlnaGJvcmluZyBzaXRlcy4gSW4gdGhpcyBpbXBsZW1lbnRhdGlvbiB0aGUgZWRnZXMgYXJlIGJpZGlyZWN0aW9uYWwKKwkgKiBhbmQgaGF2ZSBhIGZpeGVkIHdlaWdodCBiYXNlZCBvbiBnZXRQaHlzaWNhbGx5QWRqYWNlbnRJbmZlY3Rpb3VzUHJvcG9ydGlvbigpIChjYWxsZWQgaW4gdGhlIGhlbHBlciBtZXRob2QKKwkgKiBnZXRJbmZlY3Rpb3VzQ2hhbmdlRnJvbU1peGluZygpLiBCdXQgdGhlIG1peGluZyBpcyBhbHNvIHdlaWdodGVkIGJ5IHRoZSBhcmVhcyBhbmQgcG9wdWxhdGlvbnMgb2YgYSBzaXRlIHJlbGF0aXZlCisJICogdG8gdGhlIGFyZWEgYW5kIHBvcHVsYXRpb24gb2YgaXQncyBuZWlnaGJvcnMuIE5vdGUgdGhhdCB0aGUgdmFsdWUgcmV0dXJuZWQgbXVzdCBiZSBOT1JNQUxJWkVEIGJ5IHRoZSB0b3RhbAorCSAqIHBvcHVsYXRpb24gYmVjYXVzZSB0aGUgcHJvZHVjdCBiZXRhICogUyAqIEllZmZlY3RpdmUgbXVzdCBoYXZlIHVuaXRzIG9mIHBlcnNvbnMuIFNpbmNlIFMgaGFzIHVuaXRzIG9mIHBlcnNvbnMKKwkgKiB0aGUgSWVmZmVjdGl2ZSBtdXN0IGJlIGRpbWVuc2lvbmxlc3MgKG5vcm1hbGl6ZWQgdG8gdGhlIHBvcHVsYXRpb24pLiBiZXRhIGlzIHRoZSBpbmZlY3Rpb24gcmF0ZSBhbmQgaGFzIHVuaXRzCisJICogb2YgaW52ZXJzZSB0aW1lLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlNJLmdldE5vcm1hbGl6ZWRFZmZlY3RpdmVJbmZlY3Rpb3VzCisJICogQHBhcmFtIHRhcmdldFBvcHVsYXRpb25OYW1lCisJICogQHBhcmFtIG5vZGUKKwkgKiBAcGFyYW0gZGlzZWFzZUxhYmVsCisJICogQHBhcmFtIG9uc2l0ZUluZmVjdGlvdXMKKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqIEByZXR1cm4KKwkgKi8KKwlwdWJsaWMgZG91YmxlIGdldE5vcm1hbGl6ZWRFZmZlY3RpdmVJbmZlY3Rpb3VzKGZpbmFsIFN0cmluZyB0YXJnZXRQb3B1bGF0aW9uTmFtZSwgZmluYWwgTm9kZSBub2RlLCBmaW5hbCBTdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsIGRpc2Vhc2VMYWJlbCwgZmluYWwgZG91YmxlIG9uc2l0ZUluZmVjdGlvdXMpIHsKKyAgICAgICAgLy8gcnVubmluZyB0YWxseSBvZiBjaGFuZ2VzIGZyb20gbWl4aW5nIHdpdGggb3RoZXIgbm9kZXMKKwkJZG91YmxlIGluZmVjdGlvdXNDaGFuZ2VGcm9tTWl4aW5nID0gMC4wOworCQlkb3VibGUgYm9yZGVyRGl2aXNvciA9IDAuMDsKKwkJZG91YmxlIHJvYWREaXZpc29yID0gMC4wOworCQkKKwkJZm9yIChmaW5hbCBJdGVyYXRvcjxFZGdlPiBjb21tb25Cb3JkZXJFZGdlSXRlciA9IENvbW1vbkJvcmRlclJlbGF0aW9uc2hpcExhYmVsSW1wbAorCQkJCS5nZXRDb21tb25Cb3JkZXJFZGdlc0Zyb21Ob2RlKG5vZGUpLml0ZXJhdG9yKCk7IGNvbW1vbkJvcmRlckVkZ2VJdGVyCisJCQkJLmhhc05leHQoKTspIHsKKwkJCWZpbmFsIEVkZ2UgYm9yZGVyRWRnZSA9IGNvbW1vbkJvcmRlckVkZ2VJdGVyLm5leHQoKTsKKwkJCS8vIElmIGl0IGV4aXN0cywgd2UncmUgbG9va2luZyBmb3IgdGhlIGxhYmVsIHRoaXMgZGlzZWFzZSBtb2RlbAorCQkJLy8gdXBkYXRlcyBvbiB0aGUgbm9kZSBhdCB0aGUgb3RoZXIgZW5kIG9mIHRoZSBib3JkZXIgZWRnZS4KKwkJCWZpbmFsIE5vZGUgb3RoZXJOb2RlID0gYm9yZGVyRWRnZS5nZXRPdGhlck5vZGUobm9kZSk7CisJCQkKKwkJCWRvdWJsZSBjaGFyYWN0ZXJpc3RpY01peGluZ0Rpc3RhbmNlID0gZ2V0Q2hhcmFjdGVyaXN0aWNNaXhpbmdEaXN0YW5jZSgpOworCQkJCisJCQlkb3VibGUgbWl4aW5nRmFjdG9yID0gMC4wOyAKKwkJCWlmIChvdGhlck5vZGUgaW5zdGFuY2VvZiBSZWdpb24pIHsKKwkJCQlkb3VibGUgb3RoZXJBdmdFeHRlbnQgPSAtMS4wOworCQkJCWZvciAoZmluYWwgSXRlcmF0b3I8Tm9kZUxhYmVsPiBsYWJlbEl0ZXIgPSBvdGhlck5vZGUuZ2V0TGFiZWxzKCkuaXRlcmF0b3IoKTsgbGFiZWxJdGVyLmhhc05leHQoKTspIHsKKwkJCQkJZmluYWwgTm9kZUxhYmVsIG5vZGVMYWJlbCA9IGxhYmVsSXRlci5uZXh0KCk7CisJCQkJCS8vIElzIHRoaXMgYW4gYXJlYSBsYWJlbD8KKwkJCQkJaWYgKG5vZGVMYWJlbCBpbnN0YW5jZW9mIEFyZWFMYWJlbCkgeworCQkJCQkJLy8gWWVzCisJCQkJCQlmaW5hbCBBcmVhTGFiZWwgYXJlYUxhYmVsID0gKEFyZWFMYWJlbCkgbm9kZUxhYmVsOworCQkJCQkJb3RoZXJBdmdFeHRlbnQgPSBhcmVhTGFiZWwuZ2V0Q3VycmVudEFyZWFWYWx1ZSgpLmdldEF2ZXJhZ2VFeHRlbnQoKTsKKwkJCQkJCWJyZWFrOworCQkJCQl9CisJCQkJfSAvLyBmb3IKKwkJCQkvLyBJRiB3ZSBoYXZlIGEgdmFsaWQgYXJlYSAKKwkJCQlpZihvdGhlckF2Z0V4dGVudCA+PSAwLjApIHsKKwkJCQkJbWl4aW5nRmFjdG9yID0gKGNoYXJhY3RlcmlzdGljTWl4aW5nRGlzdGFuY2Uvb3RoZXJBdmdFeHRlbnQpIDsKKwkJCQkJaWYobWl4aW5nRmFjdG9yID4gMS4wKSBtaXhpbmdGYWN0b3IgPSAxLjA7CisJCQkJfQorCQkJfQorCQkJCisJCQkKKwkJCS8vIGZvciBFQUNIIGNvbm5lY3RlZCBOb2RlIGFkZCB1cCB0aGUgaW5mZWN0aW91cyBvZiB0aGUgcGFydGljdWxhcgorCQkJLy8gcG9wdWxhdGlvbiBHUk9VUEQKKwkJCWluZmVjdGlvdXNDaGFuZ2VGcm9tTWl4aW5nICs9IGdldEluZmVjdGlvdXNDaGFuZ2VGcm9tTWl4aW5nKHRoaXMsIG90aGVyTm9kZSwgdGFyZ2V0UG9wdWxhdGlvbk5hbWUsIGRpc2Vhc2VMYWJlbCwgb25zaXRlSW5mZWN0aW91cywgbWl4aW5nRmFjdG9yKTsKKwkJCisJCQlib3JkZXJEaXZpc29yICs9IG1peGluZ0ZhY3Rvcip0aGlzLmdldExvY2FsUG9wdWxhdGlvbih0aGlzLCBvdGhlck5vZGUsIHRhcmdldFBvcHVsYXRpb25OYW1lKTsKKwkJfSAvLyBmb3IgZWFjaCBib3JkZXIgZWRnZQorCQkKKwkJZm9yIChmaW5hbCBJdGVyYXRvcjxFZGdlPiByb2FkRWRnZUl0ZXIgPSBSb2FkVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxJbXBsLmdldFJvYWRFZGdlc0Zyb21Ob2RlKG5vZGUpLml0ZXJhdG9yKCk7IAlyb2FkRWRnZUl0ZXIuaGFzTmV4dCgpOykgeworCQkJZmluYWwgRWRnZSByb2FkRWRnZSA9IHJvYWRFZGdlSXRlci5uZXh0KCk7CisJCQkKKwkJCS8vIGZpbmQgdGhlIG51bWJlciBvZiBlZGdlcyBmcm9tIHRoZSByb2FkIGVkZ2UgLSBjb3VsZCBiZSBtb3JlIHRoYW4gb25lCisJCQkvLyBhbHNvLCByb2FkcyBoYXZlIGRpZmZlcmVuY3QgY2FwYWNpdGllcworCQkJZmluYWwgRWRnZUxhYmVsIGVkZ2VMYWJlbCA9IHJvYWRFZGdlLmdldExhYmVsKCk7CisJCQkvLyBpbml0IHRoZSBudW1iZXIgb2YgY3Jvc3NpbmdzIG9yIHRvdGFsIHJvYWQgY29ubmVjdGlvbnMgYWNyb3NzIHRoZSBib3JkZXIKKwkJCWRvdWJsZSBudW1Dcm9zc2luZ3MgPSAxLjA7CisJCQorCQkJaWYgKGVkZ2VMYWJlbCBpbnN0YW5jZW9mIFJvYWRUcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbEltcGwpIHsKKwkJCQlSb2FkVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxWYWx1ZUltcGwgcm9hZExhYmVsVmFsdWUgPSAoUm9hZFRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsVmFsdWVJbXBsKShlZGdlTGFiZWwuZ2V0Q3VycmVudFZhbHVlKCkpOworCQkJCW51bUNyb3NzaW5ncyA9IHJvYWRMYWJlbFZhbHVlLmdldE51bWJlckNyb3NzaW5ncygpOworCQkJfQorCQkJZG91YmxlIGluZmVjdGlvdXNQcm9wb3J0aW9uID0gZ2V0Um9hZE5ldHdvcmtJbmZlY3Rpb3VzUHJvcG9ydGlvbigpICogbnVtQ3Jvc3NpbmdzOworCQkJCisJCQkvLyBtdXN0IG5ldmVyIGJlIGdyZWF0ZXIgdGhhbiAxCisJCQlpZihpbmZlY3Rpb3VzUHJvcG9ydGlvbiA+IDEuMCkgaW5mZWN0aW91c1Byb3BvcnRpb24gPSAxLjA7CisJCQkKKwkJCS8vIElmIGl0IGV4aXN0cywgd2UncmUgbG9va2luZyBmb3IgdGhlIGxhYmVsIHRoaXMgZGlzZWFzZSBtb2RlbAorCQkJLy8gdXBkYXRlcyBvbiB0aGUgbm9kZSBhdCB0aGUgb3RoZXIgZW5kIG9mIHRoZSBib3JkZXIgZWRnZS4KKwkJCWZpbmFsIE5vZGUgb3RoZXJOb2RlID0gcm9hZEVkZ2UuZ2V0T3RoZXJOb2RlKG5vZGUpOworCQkKKwkJCS8vIHN1bSB1cCB0aGUgY2hhbmdlcyBmcm9tIGVhY2ggY29ubmVjdGVkIG5vZGUgYnkgcG9wdWxhdGlvbiBncm91cCAoYnkgbmFtZSkuCisJCQkvLyBOT1RFOiBzb21lIG9mIHRoZXNlIGNoYW5nZXMgY291bGQgYmUgbmVnYXRpdmUKKwkJCWluZmVjdGlvdXNDaGFuZ2VGcm9tTWl4aW5nICs9IGdldEluZmVjdGlvdXNDaGFuZ2VGcm9tTWl4aW5nKHRoaXMsIG90aGVyTm9kZSwgdGFyZ2V0UG9wdWxhdGlvbk5hbWUsIGRpc2Vhc2VMYWJlbCwgb25zaXRlSW5mZWN0aW91cywgaW5mZWN0aW91c1Byb3BvcnRpb24pOworCQkJCisJCQlyb2FkRGl2aXNvciArPSBpbmZlY3Rpb3VzUHJvcG9ydGlvbip0aGlzLmdldExvY2FsUG9wdWxhdGlvbih0aGlzLCBvdGhlck5vZGUsIHRhcmdldFBvcHVsYXRpb25OYW1lKTsKKwkJfSAvLyBmb3IgZWFjaCByb2FkIGVkZ2UKKwkJCisJCisJCS8vIHJldHVybiB0aGUgc3VtIG5vcm1hbGl6ZWQgdG8gdGhlIHRvdGFsIHBvcHVsYXRpb24KKwkJZG91YmxlIGRlbm9tID0gKChTdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsVmFsdWUpZGlzZWFzZUxhYmVsLmdldFRlbXBWYWx1ZSgpKS5nZXRQb3B1bGF0aW9uQ291bnQoKSArIGJvcmRlckRpdmlzb3IgKyByb2FkRGl2aXNvcjsKKwkJZG91YmxlIHJldFZhbCA9IDAuMDsKKwkJaWYgKGRlbm9tID4gMC4wKSB7CisJCQlyZXRWYWwgPSAoIG9uc2l0ZUluZmVjdGlvdXMgKyBpbmZlY3Rpb3VzQ2hhbmdlRnJvbU1peGluZyApIC8gZGVub207CisJCX0KKwkJCisJCQorCQlyZXR1cm4gcmV0VmFsOworCisJfSAvLyBnZXROb3JtYWxpemVkRWZmZWN0aXZlSW5mZWN0aW91cworCQorCQorCQorCS8qKgorCSAqIFRoaXMgbWV0aG9kIGNvcnJlY3RseSBjb21wdXRlcyB0aGUgbWl4aW5nIG9mIHRoZSBpbmZlY3Rpb3VzIHBvcHVsYXRpb24gKG9uc2l0ZSkgd2l0aCB0aGUgaW5mZWN0aW91cyBwb3B1bGF0aW9uCisJICogYXQgbmVpZ2hib3Jpbmcgbm9kZXMKKwkgKiBAcGFyYW0gZGlzZWFzZU1vZGVsCisJICogQHBhcmFtIHRoZSBub2RlCisJICogQHBhcmFtIGRpc2Vhc2VMYWJlbAorCSAqIEBwYXJhbSBvbnNpdGVJbmZlY3Rpb3VzCisJICogQHBhcmFtIGNvbm5lY3RlZEluZmVjdGlvdXNQcm9wb3J0aW9uICh0aGlzIGlzIHRoZSB3ZWlnaHQgZ2l2ZW4gdG8gdGhlIGVkZ2UgY29ubmVjdGlvbikKKwkgKiBAcmV0dXJuIHRoZSBudW1iZXIgb2YgcG9wdWxhdGlvbiBtZW1iZXJzIGF0IGEgbm9kZSBpbmZlY3RlZCBieSB0aGUgZGlzZWFzZSBtb2RlbGVkIGJ5IGRpc2Vhc2VNb2RlbAorCSAqLworCXByb3RlY3RlZCBkb3VibGUgZ2V0SW5mZWN0aW91c0NoYW5nZUZyb21NaXhpbmcoZmluYWwgTXVsdGlQb3B1bGF0aW9uU0lEaXNlYXNlTW9kZWwgZGlzZWFzZU1vZGVsLAorCQkJZmluYWwgTm9kZSBub2RlLCBmaW5hbCBTdHJpbmcgcG9wdWxhdGlvbk5hbWUsIGZpbmFsIFN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWwgZGlzZWFzZUxhYmVsLCBmaW5hbCBkb3VibGUgb25zaXRlSW5mZWN0aW91cywgZG91YmxlIGNvbm5lY3RlZEluZmVjdGlvdXNQcm9wb3J0aW9uKSB7CisJCisJCS8vIGluZmVjdGlvdXMgZnJvbSBvdGhlciBzaXRlcyBtaXhpbmcgaGVyZSBhdCBzaXRlIDAKKwkJZG91YmxlIG1peGluZyA9IDAuMDsKKwkJCQorCQlmb3IgKGZpbmFsIEl0ZXJhdG9yPE5vZGVMYWJlbD4gbGFiZWxJdGVyID0gbm9kZS5nZXRMYWJlbHMoKS5pdGVyYXRvcigpOyBsYWJlbEl0ZXIKKwkJCQkuaGFzTmV4dCgpOykgeworCQkJZmluYWwgTm9kZUxhYmVsIG5vZGVMYWJlbCA9IGxhYmVsSXRlci5uZXh0KCk7CisJCQkvLyBJcyB0aGlzIGEgZGlzZWFzZSBsYWJlbD8KKwkJCWlmIChub2RlTGFiZWwgaW5zdGFuY2VvZiBTdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsKSB7CisJCQkJZmluYWwgSW50ZWdyYXRpb25MYWJlbCBvdGhlclNJTGFiZWwgPSAoSW50ZWdyYXRpb25MYWJlbCkgbm9kZUxhYmVsOworCQkJCS8vIFllcworCQkJCS8vIElzIGl0IHVwZGF0ZWQgYnkgdGhpcyBkaXNlYXNlIG1vZGVsPworCQkJCWlmIChkaXNlYXNlTW9kZWwgPT0gb3RoZXJTSUxhYmVsLmdldERlY29yYXRvcigpKSB7CisJCQkJCQorCQkJCQkKKwkJCQkJLy8gQ0hFQ0sgVEhFIFBPUFVMQVRJT04gT0YgVEhFIE5FSUdIQk9SCisJCQkJCVN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWwgY2hlY2tMYWJlbCA9IChTdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsKW90aGVyU0lMYWJlbDsKKwkJCQkJU3RyaW5nIGNoZWNrUG9wdWxhdGlvbiA9IGNoZWNrTGFiZWwuZ2V0UG9wdWxhdGlvbk1vZGVsTGFiZWwoKS5nZXRQb3B1bGF0aW9uSWRlbnRpZmllcigpOworCQkJCQlpZihjaGVja1BvcHVsYXRpb24uZXF1YWxzKHBvcHVsYXRpb25OYW1lKSkgeworCQkJCQkJaWYodGhpcy5pc0ZyZXF1ZW5jeURlcGVuZGVudCgpKSB7CisJCQkJCQkJZG91YmxlIElvdGhlciA9ICgoKFNJTGFiZWxWYWx1ZSlvdGhlclNJTGFiZWwuZ2V0VGVtcFZhbHVlKCkpKS5nZXRJKCk7CisJCQkJCQkJLy9kb3VibGUgSW90aGVyID0gb3RoZXJTSUxhYmVsLmdldEN1cnJlbnRTSVZhbHVlKCkuZ2V0SSgpOworCQkJCQkJCWRvdWJsZSBtaXhpbmdGYWN0b3IgPSBjb25uZWN0ZWRJbmZlY3Rpb3VzUHJvcG9ydGlvbjsJCQkJCQorCQkJCQkJCW1peGluZyA9IElvdGhlciAqIG1peGluZ0ZhY3RvcjsKKwkJCQkJCX0gCisJCQkJCS8vIGJyZWFrID8gb25seSBvbmUgcGVyIHBvcHVsYXRpb24/CisJCQkJCX0vL2lmKGNoZWNrUG9wdWxhdGlvbi5lcXVhbHMocG9wdWxhdGlvbk5hbWUpKSAKKwkJCQkJCisJCQkJfSAvLyBpZgorCQkJfQorCQl9IC8vIGZvcgorCisJCXJldHVybiBtaXhpbmc7CisJfSAvLyBnZXRJbmZlY3Rpb3VzQ2hhbmdlRnJvbU1peGluZworCQorCQorCQorCQorCisJLyoqCisJICogR2V0IHRoZSBvbnNpdGUgdG90YWwgcG9wdWxhdGlvbiBmb3IgYSBwYXJ0aWN1bGFyIHBvcHVsYXRpb24gZ3JvdXAgYnkgbmFtZQorCSAqIEBwYXJhbSBkaXNlYXNlTW9kZWwKKwkgKiBAcGFyYW0gbm9kZQorCSAqIEByZXR1cm4KKwkgKi8KKyAgICBwcml2YXRlIGRvdWJsZSBnZXRMb2NhbFBvcHVsYXRpb24oZmluYWwgTXVsdGlQb3B1bGF0aW9uU0lEaXNlYXNlTW9kZWwgZGlzZWFzZU1vZGVsLCBOb2RlIG5vZGUsICBmaW5hbCBTdHJpbmcgcG9wdWxhdGlvbk5hbWUpIHsKKyAgICAJZG91YmxlIHRvdGFsUG9wdWxhdGlvbiA9IDAuMDsKKyAgICAJZm9yIChmaW5hbCBJdGVyYXRvcjxOb2RlTGFiZWw+IGxhYmVsSXRlciA9IG5vZGUuZ2V0TGFiZWxzKCkuaXRlcmF0b3IoKTsgbGFiZWxJdGVyLmhhc05leHQoKTspIHsKKyAgICAJCWZpbmFsIE5vZGVMYWJlbCBub2RlTGFiZWwgPSBsYWJlbEl0ZXIubmV4dCgpOworICAgIAkJLy8gSXMgdGhpcyBhIGRpc2Vhc2UgbGFiZWw/CisgICAgCQlpZiAobm9kZUxhYmVsIGluc3RhbmNlb2YgU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbCkgeworICAgIAkJCWZpbmFsIEludGVncmF0aW9uTGFiZWwgb3RoZXJTSUxhYmVsID0gKEludGVncmF0aW9uTGFiZWwpIG5vZGVMYWJlbDsKKyAgICAJCQkvLyBZZXMKKyAgICAJCQkvLyBJcyBpdCB1cGRhdGVkIGJ5IHRoaXMgZGlzZWFzZSBtb2RlbD8KKyAgICAJCQlpZiAoZGlzZWFzZU1vZGVsID09IG90aGVyU0lMYWJlbC5nZXREZWNvcmF0b3IoKSkgeworICAgIAkJCQkKKworICAgIAkJCQkvLyBDSEVDSyBUSEUgUE9QVUxBVElPTiBPRiBUSEUgTkVJR0hCT1IKKwkJCQkJU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbCBjaGVja0xhYmVsID0gKFN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWwpb3RoZXJTSUxhYmVsOworCQkJCQlTdHJpbmcgY2hlY2tQb3B1bGF0aW9uID0gY2hlY2tMYWJlbC5nZXRQb3B1bGF0aW9uTW9kZWxMYWJlbCgpLmdldFBvcHVsYXRpb25JZGVudGlmaWVyKCk7CisJCQkJCWlmKGNoZWNrUG9wdWxhdGlvbi5lcXVhbHMocG9wdWxhdGlvbk5hbWUpKSB7CisJCQkJCQl0b3RhbFBvcHVsYXRpb24gPSAoKFN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZSlvdGhlclNJTGFiZWwuZ2V0VGVtcFZhbHVlKCkpLmdldFBvcHVsYXRpb25Db3VudCgpOworCQkJCQkJcmV0dXJuIHRvdGFsUG9wdWxhdGlvbjsKKwkJCQkJfS8vaWYoY2hlY2tQb3B1bGF0aW9uLmVxdWFscyhwb3B1bGF0aW9uTmFtZSkpIAorICAgIAkJCQkKKyAgICAJCQkJCisgICAgCQkJfQorICAgIAkJICAgICAKKyAgICAJCX0KKyAgICAJfQorICAgIAlyZXR1cm4gMC4wOworICAgIH0KKwkgIAorCisJQE92ZXJyaWRlCisJcHVibGljIERpc2Vhc2VNb2RlbExhYmVsIGNyZWF0ZURpc2Vhc2VNb2RlbExhYmVsKFN0cmluZyBwb3B1bGF0aW9uSWRlbnRpZmllcikgeworCQlyZXR1cm4gU3RhbmRhcmRGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVTSUxhYmVsKCk7CisJfQorCisJQE92ZXJyaWRlCisJcHVibGljIERpc2Vhc2VNb2RlbExhYmVsVmFsdWUgY3JlYXRlRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZShTdHJpbmcgcG9wdWxhdGlvbklkZW50aWZpZXIpIHsKKwkJcmV0dXJuIFN0YW5kYXJkRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlU0lMYWJlbFZhbHVlKCk7CisJfQorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuaW1wbC5EaXNlYXNlTW9kZWxJbXBsI2NyZWF0ZUluZmVjdG9yKCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgSW5mZWN0b3IgY3JlYXRlSW5mZWN0b3IoKSB7CisJCVNJSW5mZWN0b3IgcmV0VmFsdWUgPSBTdGFuZGFyZEZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZVNJSW5mZWN0b3IoKTsKKwkJcmV0VmFsdWUuc2V0RGlzZWFzZU5hbWUodGhpcy5nZXREaXNlYXNlTmFtZSgpKTsKKwkJcmV0VmFsdWUuc2V0UG9wdWxhdGlvbklkZW50aWZpZXIoZ2V0UG9wdWxhdGlvbklkZW50aWZpZXIoKSk7CisJCXJldHVybiByZXRWYWx1ZTsKKwl9IC8vIGNyZWF0ZUluZmVjdG9yCisKKwlwdWJsaWMgdm9pZCBkb01vZGVsU3BlY2lmaWNBZGp1c3RtZW50cyhMYWJlbFZhbHVlIGxhYmVsKSB7CisJCS8vIE5vdGhpbmcgdG8gZG8gaGVyZS4uLgorCX0KKwkKKwkKKworCS8qKgorCSAqIFdlIG5lZWQgdG8gb3ZlcnJpZGUgdGhpcyBtZXRob2QgdG8gcmV0dXJuIGFsbCBwb3B1bGF0aW9uIG1vZGVsIGxhYmVscyBmb3IgdGhlIHBvcHVsYXRpb24gZ3JvdXBzCisJICogCisJICogQHBhcmFtIHBvcHVsYXRpb25JZGVudGlmaWVyCisJICogICAgICAgICAgICB0aGUgcG9wdWxhdGlvbiBiZWluZyBsYWJlbGVkCisJICogQHBhcmFtIGdyYXBoCisJICogICAgICAgICAgICB0aGUgZ3JhcGggdG8gc2VhcmNoCisJICogQHJldHVybiB0aGUgUG9wdWxhdGlvbkxhYmVsIGluc3RhbmNlcyBvZiB0aGUgZ3JhcGggdGhhdCBtYXRjaCB0aGUKKwkgKiAgICAgICAgIGlkZW50aWZpZXIuCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIEVMaXN0PFBvcHVsYXRpb25Nb2RlbExhYmVsPiBnZXRQb3B1bGF0aW9uTW9kZWxMYWJlbHMoCisJCQlTdHJpbmcgcG9wdWxhdGlvbklkZW50aWZpZXIsIEdyYXBoIGdyYXBoKSB7CisJCWZpbmFsIEVMaXN0PFBvcHVsYXRpb25Nb2RlbExhYmVsPiByZXRWYWx1ZSA9IG5ldyBCYXNpY0VMaXN0PFBvcHVsYXRpb25Nb2RlbExhYmVsPigpOworCisJCS8vIEl0ZXJhdGUgdGhyb3VnaCBhbGwgb2YgdGhlIHBvcHVsYXRpb24gbGFiZWxzIGluIHRoZSBncmFwaAorCQlFTGlzdDxOb2RlTGFiZWw+IGxhYmVscyA9IGdyYXBoLmdldE5vZGVMYWJlbHNCeVR5cGVVUkkoCisJCQkJUG9wdWxhdGlvbk1vZGVsTGFiZWwuVVJJX1RZUEVfRFlOQU1JQ19QT1BVTEFUSU9OX0xBQkVMKTsKKwkJZm9yIChOb2RlTGFiZWwgcGw6bGFiZWxzKSB7CisJCQlmaW5hbCBQb3B1bGF0aW9uTW9kZWxMYWJlbCBwb3B1bGF0aW9uTGFiZWwgPSAoUG9wdWxhdGlvbk1vZGVsTGFiZWwpIHBsOworCQkJLy8gSXMgdGhpcyBsYWJlbCBmb3IgdGhlIHBvcHVsYXRpb24gd2UncmUgbG9va2luZyBmb3I/CisJCQlib29sZWFuIGtlZXAgPSBmYWxzZTsKKy8vCQkJaWYgKHBvcHVsYXRpb25MYWJlbC5nZXRQb3B1bGF0aW9uSWRlbnRpZmllcigpLmVxdWFscygKKy8vCQkJCQlwb3B1bGF0aW9uSWRlbnRpZmllcikpIGtlZXAgPSB0cnVlOworLy8JCQllbHNlCisJCQkJZm9yKFN0cmluZ1ZhbHVlIGc6dGhpcy5nZXRQb3B1bGF0aW9uR3JvdXBzKCkuZ2V0VmFsdWVzKCkpCisJCQkJCWlmKGcuZ2V0VmFsdWUoKS5lcXVhbHMocG9wdWxhdGlvbkxhYmVsLmdldFBvcHVsYXRpb25JZGVudGlmaWVyKCkpKSB7a2VlcD10cnVlO2JyZWFrO30KKwkJCQkJCisJCQlpZiAoa2VlcCkgeworCQkJCS8vIFllcworCQkJCS8vIElmIHRoZXJlIGlzIGEgcHJvYmxlbSB3aXRoIHRoZSAibm9kZSB1cmkiIG9mIHRoZSBwb3B1bGF0aW9uCisJCQkJLy8gbGFiZWwgdGhlbiBpdCB3b3VsZCBub3QgaGF2ZSBiZWVuIGFzc29jaWF0ZWQgd2l0aCBhIG5vZGUKKwkJCQkvLyBpbnN0YW5jZSBpbiB0aGUgZ3JhcGggYXQgdGhpcyBwb2ludC4gVGhpcyBpcyBhIHByb2JsZW0gZm9yCisJCQkJLy8gZGlzZWFzZSBtb2RlbHMgdGhhdCBhcmUgdHJ5aW5nIHRvIGxhYmVsIHRoZSBub2RlICh0aGVyZSBpc24ndAorCQkJCS8vIG9uZSEpLiBTbyBmaWx0ZXIgb3V0IHRob3NlIG1pc3Rha2VzIGhlcmUuCisKKwkJCQkvLyBEb2VzIHRoZSBwb3B1bGF0aW9uIGxhYmVsIGhhdmUgYW4gYXNzb2NpYXRlZCBub2RlPworCQkJCWlmIChwb3B1bGF0aW9uTGFiZWwuZ2V0Tm9kZSgpICE9IG51bGwpIHsKKwkJCQkJLy8gWWVzCisJCQkJCXJldFZhbHVlLmFkZChwb3B1bGF0aW9uTGFiZWwpOworCQkJCX0gLy8gaWYgdGhlIHBvcHVsYXRpb24gbGFiZWwgaGFzIGEgbm9kZQorCQkJfSAvLyBpZiB0aGUgcG9wdWxhdGlvbiB3ZSdyZSBsb29raW5nIGZvcgorCQl9IC8vIGZvciBlYWNoIHBvcHVsYXRpb24gbGFiZWwKKworCQlyZXR1cm4gcmV0VmFsdWU7CisJfSAvLyBnZXRQb3B1bGF0aW9uTGFiZWxzCisKKwkvKioKKwkgKiBXZSBuZWVkIHRvIG92ZXJyaWRlIHRvIGNoZWNrIGFsbCBwb3B1bGF0aW9uIGdyb3VwcworCSAqLworCQorCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIHByZXBhcmUoTW9kZWwgbW9kZWwsIFNURU1UaW1lIHRpbWUpIHsKKworCQlmb3IoU3RyaW5nVmFsdWUgc3Y6dGhpcy5nZXRQb3B1bGF0aW9uR3JvdXBzKCkuZ2V0VmFsdWVzKCkpIHsKKwkJCWJvb2xlYW4gZm91bmQgPSBmaW5kUG9wdWxhdGlvbk1vZGVsKG1vZGVsLCBzdi5nZXRWYWx1ZSgpKTsKKwkJCQorCQkJaWYoIWZvdW5kKSB7CisJCQkJLy8gQ3JlYXRlIGEgbmV3IHN0YW5kYXJkIHBvcHVsYXRpb24gbW9kZWwKKwkJCQlTdGFuZGFyZFBvcHVsYXRpb25Nb2RlbCBzcG0gPSBTdGFuZGFyZEZhY3RvcnlJbXBsLmVJTlNUQU5DRS5jcmVhdGVTdGFuZGFyZFBvcHVsYXRpb25Nb2RlbCgpOworCQkJCXNwbS5zZXRQb3B1bGF0aW9uSWRlbnRpZmllcihzdi5nZXRWYWx1ZSgpKTsKKwkJCQlTdHJpbmcgdGl0bGUgPSAiQXV0byBHZW5lcmF0ZWQgIitzdi5nZXRWYWx1ZSgpKyIgcG9wdWxhdGlvbiBtb2RlbCI7CisJCQkJU3RyaW5nIG5hbWUgPSAiYXV0b19nZW5fIitzdi5nZXRWYWx1ZSgpKyJfcG9wdWxhdGlvbl9tb2RlbCI7CisJCQkJc3BtLnNldFVSSShTVEVNVVJJLmNyZWF0ZVVSSShuYW1lKyIvIitTVEVNVVJJLmdlbmVyYXRlVW5pcXVlUGFydCgpKSk7CisJCQkJc3BtLnNldE5hbWUobmFtZSk7CisJCQkJc3BtLmdldER1YmxpbkNvcmUoKS5zZXRUaXRsZSh0aXRsZSk7CisJCQkJbW9kZWwuZ2V0Tm9kZURlY29yYXRvcnMoKS5hZGQoMCwgc3BtKTsKKwkJCX0KKwkJfQorCX0KKwkKKwlAT3ZlcnJpZGUKKwlwdWJsaWMgYm9vbGVhbiBpc0RldGVybWluaXN0aWMoKSB7CisJCXJldHVybiB0cnVlOworCX0KKworCUBPdmVycmlkZQorCXB1YmxpYyBFTGlzdDxTdHJpbmc+IGdldEFsbExhYmVsSWRlbnRpZmllcnMoKSB7CisJCUVMaXN0PFN0cmluZz4gaWRlbnRpZmllcnMgPSBuZXcgQmFzaWNFTGlzdDxTdHJpbmc+KCk7CisJCUVMaXN0PFN0cmluZ1ZhbHVlPiBncm91cHMgPSBnZXRQb3B1bGF0aW9uR3JvdXBzKCkuZ2V0VmFsdWVzKCk7CisJCQorCQlmb3IgKFN0cmluZ1ZhbHVlIGcgOiBncm91cHMpIHsKKwkJCWlkZW50aWZpZXJzLmFkZChnLmdldFZhbHVlKCkpOworCQl9CisJCQorCQlyZXR1cm4gaWRlbnRpZmllcnM7CisJfQorCQorfSAvL011bHRpUG9wdWxhdGlvblNJRGlzZWFzZU1vZGVsSW1wbApkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMubXVsdGlwb3B1bGF0aW9uL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvbXVsdGlwb3B1bGF0aW9uL2ltcGwvTXVsdGlQb3B1bGF0aW9uU0lSRGlzZWFzZU1vZGVsSW1wbC5qYXZhIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMubXVsdGlwb3B1bGF0aW9uL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvbXVsdGlwb3B1bGF0aW9uL2ltcGwvTXVsdGlQb3B1bGF0aW9uU0lSRGlzZWFzZU1vZGVsSW1wbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUzOTJjZTgKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5tdWx0aXBvcHVsYXRpb24vc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9tdWx0aXBvcHVsYXRpb24vaW1wbC9NdWx0aVBvcHVsYXRpb25TSVJEaXNlYXNlTW9kZWxJbXBsLmphdmEKQEAgLTAsMCArMSwzMTMgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDksMjAxMCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5tdWx0aXBvcHVsYXRpb24uaW1wbDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb25DaGFpbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuRUxpc3Q7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzczsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuSW50ZXJuYWxFT2JqZWN0OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5pbXBsLkVOb3RpZmljYXRpb25JbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uRG91YmxlVmFsdWU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5Eb3VibGVWYWx1ZUxpc3Q7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5TdHJpbmdWYWx1ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguTm9kZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguTm9kZUxhYmVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5TVEVNVGltZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMubXVsdGlwb3B1bGF0aW9uLk11bHRpUG9wdWxhdGlvblNJUkRpc2Vhc2VNb2RlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMubXVsdGlwb3B1bGF0aW9uLk11bHRpcG9wdWxhdGlvblBhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLkRpc2Vhc2VNb2RlbExhYmVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5EaXNlYXNlTW9kZWxMYWJlbFZhbHVlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TSVJMYWJlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU0lSTGFiZWxWYWx1ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbFZhbHVlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZEZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLmltcGwuU0lSTGFiZWxWYWx1ZUltcGw7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIEFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5NdWx0aSBQb3B1bGF0aW9uIFNJUiBEaXNlYXNlIE1vZGVsPC9iPjwvZW0+Jy4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogPHA+CisgKiBUaGUgZm9sbG93aW5nIGZlYXR1cmVzIGFyZSBpbXBsZW1lbnRlZDoKKyAqIDx1bD4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMubXVsdGlwb3B1bGF0aW9uLmltcGwuTXVsdGlQb3B1bGF0aW9uU0lSRGlzZWFzZU1vZGVsSW1wbCNnZXRJbW11bml0eUxvc3NSYXRlIDxlbT5JbW11bml0eSBMb3NzIFJhdGU8L2VtPn08L2xpPgorICogPC91bD4KKyAqIDwvcD4KKyAqCisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBNdWx0aVBvcHVsYXRpb25TSVJEaXNlYXNlTW9kZWxJbXBsIGV4dGVuZHMgTXVsdGlQb3B1bGF0aW9uU0lEaXNlYXNlTW9kZWxJbXBsIGltcGxlbWVudHMgTXVsdGlQb3B1bGF0aW9uU0lSRGlzZWFzZU1vZGVsIHsKKwkvKioKKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRJbW11bml0eUxvc3NSYXRlKCkgPGVtPkltbXVuaXR5IExvc3MgUmF0ZTwvZW0+fScgY29udGFpbm1lbnQgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZ2V0SW1tdW5pdHlMb3NzUmF0ZSgpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIERvdWJsZVZhbHVlTGlzdCBpbW11bml0eUxvc3NSYXRlOworCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCXB1YmxpYyBNdWx0aVBvcHVsYXRpb25TSVJEaXNlYXNlTW9kZWxJbXBsKCkgeworCQlzdXBlcigpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCBFQ2xhc3MgZVN0YXRpY0NsYXNzKCkgeworCQlyZXR1cm4gTXVsdGlwb3B1bGF0aW9uUGFja2FnZS5MaXRlcmFscy5NVUxUSV9QT1BVTEFUSU9OX1NJUl9ESVNFQVNFX01PREVMOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBEb3VibGVWYWx1ZUxpc3QgZ2V0SW1tdW5pdHlMb3NzUmF0ZSgpIHsKKwkJcmV0dXJuIGltbXVuaXR5TG9zc1JhdGU7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIE5vdGlmaWNhdGlvbkNoYWluIGJhc2ljU2V0SW1tdW5pdHlMb3NzUmF0ZShEb3VibGVWYWx1ZUxpc3QgbmV3SW1tdW5pdHlMb3NzUmF0ZSwgTm90aWZpY2F0aW9uQ2hhaW4gbXNncykgeworCQlEb3VibGVWYWx1ZUxpc3Qgb2xkSW1tdW5pdHlMb3NzUmF0ZSA9IGltbXVuaXR5TG9zc1JhdGU7CisJCWltbXVuaXR5TG9zc1JhdGUgPSBuZXdJbW11bml0eUxvc3NSYXRlOworCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpIHsKKwkJCUVOb3RpZmljYXRpb25JbXBsIG5vdGlmaWNhdGlvbiA9IG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBNdWx0aXBvcHVsYXRpb25QYWNrYWdlLk1VTFRJX1BPUFVMQVRJT05fU0lSX0RJU0VBU0VfTU9ERUxfX0lNTVVOSVRZX0xPU1NfUkFURSwgb2xkSW1tdW5pdHlMb3NzUmF0ZSwgbmV3SW1tdW5pdHlMb3NzUmF0ZSk7CisJCQlpZiAobXNncyA9PSBudWxsKSBtc2dzID0gbm90aWZpY2F0aW9uOyBlbHNlIG1zZ3MuYWRkKG5vdGlmaWNhdGlvbik7CisJCX0KKwkJcmV0dXJuIG1zZ3M7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgc2V0SW1tdW5pdHlMb3NzUmF0ZShEb3VibGVWYWx1ZUxpc3QgbmV3SW1tdW5pdHlMb3NzUmF0ZSkgeworCQlpZiAobmV3SW1tdW5pdHlMb3NzUmF0ZSAhPSBpbW11bml0eUxvc3NSYXRlKSB7CisJCQlOb3RpZmljYXRpb25DaGFpbiBtc2dzID0gbnVsbDsKKwkJCWlmIChpbW11bml0eUxvc3NSYXRlICE9IG51bGwpCisJCQkJbXNncyA9ICgoSW50ZXJuYWxFT2JqZWN0KWltbXVuaXR5TG9zc1JhdGUpLmVJbnZlcnNlUmVtb3ZlKHRoaXMsIEVPUFBPU0lURV9GRUFUVVJFX0JBU0UgLSBNdWx0aXBvcHVsYXRpb25QYWNrYWdlLk1VTFRJX1BPUFVMQVRJT05fU0lSX0RJU0VBU0VfTU9ERUxfX0lNTVVOSVRZX0xPU1NfUkFURSwgbnVsbCwgbXNncyk7CisJCQlpZiAobmV3SW1tdW5pdHlMb3NzUmF0ZSAhPSBudWxsKQorCQkJCW1zZ3MgPSAoKEludGVybmFsRU9iamVjdCluZXdJbW11bml0eUxvc3NSYXRlKS5lSW52ZXJzZUFkZCh0aGlzLCBFT1BQT1NJVEVfRkVBVFVSRV9CQVNFIC0gTXVsdGlwb3B1bGF0aW9uUGFja2FnZS5NVUxUSV9QT1BVTEFUSU9OX1NJUl9ESVNFQVNFX01PREVMX19JTU1VTklUWV9MT1NTX1JBVEUsIG51bGwsIG1zZ3MpOworCQkJbXNncyA9IGJhc2ljU2V0SW1tdW5pdHlMb3NzUmF0ZShuZXdJbW11bml0eUxvc3NSYXRlLCBtc2dzKTsKKwkJCWlmIChtc2dzICE9IG51bGwpIG1zZ3MuZGlzcGF0Y2goKTsKKwkJfQorCQllbHNlIGlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkKKwkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIE11bHRpcG9wdWxhdGlvblBhY2thZ2UuTVVMVElfUE9QVUxBVElPTl9TSVJfRElTRUFTRV9NT0RFTF9fSU1NVU5JVFlfTE9TU19SQVRFLCBuZXdJbW11bml0eUxvc3NSYXRlLCBuZXdJbW11bml0eUxvc3NSYXRlKSk7CisJfQorCisJCisJCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIE5vdGlmaWNhdGlvbkNoYWluIGVJbnZlcnNlUmVtb3ZlKEludGVybmFsRU9iamVjdCBvdGhlckVuZCwgaW50IGZlYXR1cmVJRCwgTm90aWZpY2F0aW9uQ2hhaW4gbXNncykgeworCQlzd2l0Y2ggKGZlYXR1cmVJRCkgeworCQkJY2FzZSBNdWx0aXBvcHVsYXRpb25QYWNrYWdlLk1VTFRJX1BPUFVMQVRJT05fU0lSX0RJU0VBU0VfTU9ERUxfX0lNTVVOSVRZX0xPU1NfUkFURToKKwkJCQlyZXR1cm4gYmFzaWNTZXRJbW11bml0eUxvc3NSYXRlKG51bGwsIG1zZ3MpOworCQl9CisJCXJldHVybiBzdXBlci5lSW52ZXJzZVJlbW92ZShvdGhlckVuZCwgZmVhdHVyZUlELCBtc2dzKTsKKwl9CisKKwlAT3ZlcnJpZGUKKwlwdWJsaWMgU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbFZhbHVlIGNvbXB1dGVEaXNlYXNlRGVsdGFzKFNURU1UaW1lIHRpbWUsCisJCQlTdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsVmFsdWUgY3VycmVudFN0YXRlLAorCQkJU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbCBkaXNlYXNlTGFiZWwsIGxvbmcgdGltZURlbHRhLAorCQkJRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZSByZXR1cm5WYWx1ZSkgeworCQkKKwkJLy8gVEhJUyBtZXRob2QgZ2V0cyBjYWxsZWQgbXVsdGlwbGUgdGltZXMsIG9uY2UgZm9yIGVhY2ggcG9wdWxhdGlvbiBpZGVudGlmaWVyCisJCS8vIGluIHRoZSBwb3B1bGF0aW9uIG1vZGVsLgorCQkvLyB3aGljaCBwb3B1bGF0aW9uIGlzICJ0aGlzIi4uLi4KKwkJZmluYWwgU0lSTGFiZWxWYWx1ZSBjdXJyZW50U0lSID0gKFNJUkxhYmVsVmFsdWUpIGN1cnJlbnRTdGF0ZTsKKwkJU3RyaW5nIHRoaXNQb3B1bGF0aW9uID0gZGlzZWFzZUxhYmVsLmdldFBvcHVsYXRpb25Nb2RlbExhYmVsKCkuZ2V0UG9wdWxhdGlvbklkZW50aWZpZXIoKTsKKwkJCisJCS8vIENvbXB1dGUgZGVhdGhzCisJCWZpbmFsIGRvdWJsZSBhZGp1c3RlZEluZmVjdGlvdXNNb3J0YWxpdHlSYXRlID0gZ2V0QWRqdXN0ZWRJbmZlY3Rpb3VzTW9ydGFsaXR5UmF0ZSh0aW1lRGVsdGEsIHRoaXNQb3B1bGF0aW9uKTsKKwkJZmluYWwgZG91YmxlIGRpc2Vhc2VEZWF0aHMgPSBhZGp1c3RlZEluZmVjdGlvdXNNb3J0YWxpdHlSYXRlCisJCQkJKiBjdXJyZW50U0lSLmdldEkoKTsKKwkJCQkKKwkJLy8gbmV4dCBnZXQgaXQncyBJTkRFWCBpbiB0aGUgbW9kZWwKKwkJaW50IHBvcHVsYXRpb25JbmRleCA9IHRoaXMuZ2V0UG9wdWxhdGlvbkluZGV4KHRoaXNQb3B1bGF0aW9uKTsJCisJCQkKKwkJLy8gbm93IHdlIGtub3cgdGhlIGluZGV4IG9mIHRoZSBjdXJyZW50IHBvcHVsYXRpb24gYmVpbmcgaW50ZWdyYXRlZC4KKwkJLy8gR2V0IHRoZSBjb3JyZWN0IHRyYW5zbWlzc2lvbiByYXRlIGxpc3QgZnJvbSB0aGUgTUFUUklYCisJCUVMaXN0PERvdWJsZVZhbHVlPiB0cmFuc21pc3Npb25WZWN0b3IgPSBnZXRUcmFuc21pc3Npb25SYXRlKCkuZ2V0VmFsdWVMaXN0cygpLmdldChwb3B1bGF0aW9uSW5kZXgpLmdldFZhbHVlcygpOworCQkKKwkJLy8gQUxMIHRoZSBvdGhlciBkaXNlYXNlIHBhcmFtZXRlcnMgYXJlIGFsc28gRG91YmxlVmFsdWVMaXN0cy4gV2Ugbm93IGl0ZXJhdGUgdGhyb3VnaCBhbGwgcG9wdWxhdGlvbnMKKwkJLy8gZ2V0IHRoZSBzcGVjaWZpYyByYXRlIHBhcmFtZXRlcnMgZnJvbSBFQUNIIGxpc3QgYmFzZWQgb24gdGhpcyBwb3B1bGF0aW9uIGluZGV4CisJCWRvdWJsZSB0aGlzUmVjb3ZlcnlSYXRlID0gMC4wOworCQlpZihnZXRSZWNvdmVyeVJhdGUoKSAhPSBudWxsKSB0aGlzUmVjb3ZlcnlSYXRlID0gZ2V0UmVjb3ZlcnlSYXRlKCkuZ2V0VmFsdWVzKCkuZ2V0KHBvcHVsYXRpb25JbmRleCkuZ2V0VmFsdWUoKTsKKwkJZG91YmxlIHRoaXNJbW11bml0eUxvc3NSYXRlID0gMC4wOworCQlpZihnZXRJbW11bml0eUxvc3NSYXRlKCkgIT0gbnVsbCkgdGhpc0ltbXVuaXR5TG9zc1JhdGUgPSAgZ2V0SW1tdW5pdHlMb3NzUmF0ZSgpLmdldFZhbHVlcygpLmdldChwb3B1bGF0aW9uSW5kZXgpLmdldFZhbHVlKCk7CisJCQorCQkKKwkJLy8gIE5PVyBpdGVyYXRlIG92ZXIgZXZlcnkgcG9wdWxhdGlvbiAoaW5jbHVkaW5nIHRoaXMgb25lKSB0byBjb21wdXRlIG5ldyBpbmZlY3Rpb25zCisJCS8vICB0aGlzIGluY2x1ZGVzIGluZmVjdGlvbnMgd2l0aGluIGEgcG9wdWxhdGlvbiBncm91cAorCQkvLyAgYW5kIGFsbCB0aGUgY3Jvc3MgdGVybXMKKwkJZG91YmxlIG51bWJlck9mU3VzY2VwdGlibGVUb0luZmVjdGVkID0gMC4wOworCQlkb3VibGUgbnVtYmVyU3VzY2VwdGlibGUgPSBjdXJyZW50U0lSLmdldFMoKTsKKwkJTm9kZSB0aGlzTm9kZSA9IGRpc2Vhc2VMYWJlbC5nZXROb2RlKCk7CisJCQorCQlFTGlzdDxTdHJpbmdWYWx1ZT4gZ3JvdXBMaXN0ID0gZ2V0UG9wdWxhdGlvbkdyb3VwcygpLmdldFZhbHVlcygpOworCQkKKwkJZm9yKGludCBpID0gMDsgaTwgdHJhbnNtaXNzaW9uVmVjdG9yLnNpemUoKTsgaSArKykgeworCQkJLy8gV2UgbmVlZCB0byBnZXQgdGhlIGlkZW50aWZpZXIgb2YgdGhlIGl0aCBwb3B1bGF0aW9uIG1vZGVsCisJCQlTdHJpbmcgbmV4dFBvcCA9IGdyb3VwTGlzdC5nZXQoaSkuZ2V0VmFsdWUoKTsKKwkJCQorICAgICAgICAgICAgLy8vLy8vLy8vLy8vLy8vLy8vCisJCQkvLyAxLiBjb21wdXRlIEJFVEEgZm9yIHRyYW5zbWlzc2lvbiBmcm9tIHRoZSBpdGggcG9wdWxhdGlvbiB0byB0aGlzIHBvcHVsYXRpb24KKwkJCSBkb3VibGUgc3BlY2lmaWNUcmFuc21pc3Npb24gPSB0cmFuc21pc3Npb25WZWN0b3IuZ2V0KGkpLmdldFZhbHVlKCk7CisJCQkgZG91YmxlIGFkanVzdGVkVHJhbnNtaXNzaW9uID0gZ2V0QWRqdXN0ZWRUcmFuc21pc3Npb25SYXRlKHNwZWNpZmljVHJhbnNtaXNzaW9uLCB0aW1lRGVsdGEpOworCQkJIGlmKCF0aGlzLmlzRnJlcXVlbmN5RGVwZW5kZW50KCkpIGFkanVzdGVkVHJhbnNtaXNzaW9uICo9IGdldFRyYW5zbWlzc2lvblJhdGVTY2FsZUZhY3RvcihkaXNlYXNlTGFiZWwpOworCQkJIAorCQkJCisJCQkvLyB3ZSBuZWVkIHRvIGdldCB0aGUgZGlzZWFzZSBsYWJlbCBmb3IgdGhlIGl0aCBwb3B1bGF0aW9uIGFzIHdlbGwuCisJCQkvLyB0byBnZXQgdGhlIG9uIHNpdGUgbnVtYmVyIG9mIGluZmVjdGlvcyBpbmRpdmlkdWFscyBvZiB0eXBlIGkKKwkJCUVMaXN0PE5vZGVMYWJlbD4gbm9kZUxhYmVscyA9IHRoaXNOb2RlLmdldExhYmVscygpOworCQkJZm9yKGludCBqID0gMDsgaiA8IG5vZGVMYWJlbHMuc2l6ZSgpOyBqICsrKSB7CisJCQkJTm9kZUxhYmVsIGxhYmVsID0gbm9kZUxhYmVscy5nZXQoaik7CisJCQkJaWYobGFiZWwgaW5zdGFuY2VvZiBTSVJMYWJlbCkgeworCQkJCQlpZiAodGhpcyA9PSAoKFNJUkxhYmVsKWxhYmVsKS5nZXREZWNvcmF0b3IoKSkgeworCQkJCQkJU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbCBvdGhlckRpc2Vhc2VMYWJlbCA9IChTdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsKSBsYWJlbDsKKwkJCQkJCS8vIG5vdyBjaGVjayB0aGUgcG9wdWFsdGlvbiB0eXBlCisJCQkJCQlTdHJpbmcgb3RoZXJQb3B1bGF0aW9uID0gb3RoZXJEaXNlYXNlTGFiZWwuZ2V0UG9wdWxhdGlvbk1vZGVsTGFiZWwoKS5nZXRQb3B1bGF0aW9uSWRlbnRpZmllcigpOworCQkJCQkJaWYob3RoZXJQb3B1bGF0aW9uLmVxdWFscyhuZXh0UG9wKSkgeworCQkJCQkJCS8vIFllcz8KKwkJCQkJCQkvLyB0aGVuIHdlIGZvdW5kIHRoZSBsYWJlbCBmb3IgdGhlIGNvcnJlY3QgbmV4dCBwb3B1bGF0aW9uCisJCQkJCQkJCisJCQkKKwkJCQkJCQkvLyBmb3IgdGhpcyBwb3B1bGF0aW9uIHdlIG5lZWQgdG8gZ2V0IHRoZSBFRkZFQ1RJVkUgSW5mZWN0aW91cyBpbmNsdWRpbmcKKwkJCQkJCQkvLyBBTEwgbmVpZ2hib3Jpbmcgbm9kZXMKKwkJCQkJCQlkb3VibGUgb25zaXRlSW5mZWN0aW91cyA9ICgoU0lSTGFiZWxWYWx1ZSkgb3RoZXJEaXNlYXNlTGFiZWwuZ2V0VGVtcFZhbHVlKCkpLmdldEkoKTsKKwkJCQkJCQlmaW5hbCBkb3VibGUgZWZmZWN0aXZlSW5mZWN0aW91cyA9IGdldE5vcm1hbGl6ZWRFZmZlY3RpdmVJbmZlY3Rpb3VzKG90aGVyUG9wdWxhdGlvbiwgdGhpc05vZGUsIG90aGVyRGlzZWFzZUxhYmVsLCBvbnNpdGVJbmZlY3Rpb3VzKTsKKwkJCQkJCQkKKwkJCQkJCSAgICAvLyBBREQgdXAgdGhlIG5ldyBpbmNpZGVuY2UKKwkJCQkJCQludW1iZXJPZlN1c2NlcHRpYmxlVG9JbmZlY3RlZCArPSBhZGp1c3RlZFRyYW5zbWlzc2lvbiAqIG51bWJlclN1c2NlcHRpYmxlICogZWZmZWN0aXZlSW5mZWN0aW91czsKKwkJCQkJCX0KKwkJCQkJfQorCQkJCX0vLyBpZiBpdCdzIGFuIFNJIGxhYmVsCisJCQl9Ly9mb3IgYWxsIGxhYmVscyBpbiBUSElTIG5vZGUKKwkJfS8vIEZvciBhbGwgcG9wdWxhdGlvbiBpbiB0aGUgbW9kZWwKKwkJCisJCWRvdWJsZSBudW1iZXJPZkluZmVjdGVkVG9SZWNvdmVyZWQgPSBnZXRBZGp1c3RlZFJlY292ZXJ5UmF0ZSh0aGlzUmVjb3ZlcnlSYXRlLCB0aW1lRGVsdGEpICogY3VycmVudFNJUi5nZXRJKCk7CisJCWRvdWJsZSBudW1iZXJPZlJlY292ZXJlZFRvU3VzY2VwdGlibGUgPSBnZXRBZGp1c3RlZEltbXVuaXR5TG9zc1JhdGUodGhpc0ltbXVuaXR5TG9zc1JhdGUsIHRpbWVEZWx0YSkgKiBjdXJyZW50U0lSLmdldFIoKTsKKwkKKwkJLy8gRGV0ZXJtaW5lIGRlbHRhIFMKKwkJZmluYWwgZG91YmxlIGRlbHRhUyA9IC0gbnVtYmVyT2ZTdXNjZXB0aWJsZVRvSW5mZWN0ZWQgKyBudW1iZXJPZlJlY292ZXJlZFRvU3VzY2VwdGlibGU7CisJCS8vIERldGVybWluZSBkZWx0YSBJCisJCWZpbmFsIGRvdWJsZSBkZWx0YUkgPSBudW1iZXJPZlN1c2NlcHRpYmxlVG9JbmZlY3RlZCAtIG51bWJlck9mSW5mZWN0ZWRUb1JlY292ZXJlZCAtIGRpc2Vhc2VEZWF0aHM7CisJCS8vIERldGVybWluZSBkZWx0YSBSCQorCQlmaW5hbCBkb3VibGUgZGVsdGFSID0gbnVtYmVyT2ZJbmZlY3RlZFRvUmVjb3ZlcmVkIC0gbnVtYmVyT2ZSZWNvdmVyZWRUb1N1c2NlcHRpYmxlOworCQkKKwkJU0lSTGFiZWxWYWx1ZUltcGwgcmV0ID0gKFNJUkxhYmVsVmFsdWVJbXBsKXJldHVyblZhbHVlOworCQlyZXQuc2V0UyhkZWx0YVMpOworCQlyZXQuc2V0SShkZWx0YUkpOworCQlyZXQuc2V0UihkZWx0YVIpOworCQlyZXQuc2V0SW5jaWRlbmNlKG51bWJlck9mU3VzY2VwdGlibGVUb0luZmVjdGVkKTsKKwkJcmV0LnNldERpc2Vhc2VEZWF0aHMoZGlzZWFzZURlYXRocyk7CisJCXJldHVybiByZXQ7CisJCQorCX0KKworCXB1YmxpYyBkb3VibGUgZ2V0QWRqdXN0ZWRJbW11bml0eUxvc3NSYXRlKGRvdWJsZSBzcGVjaWZpY0xvc3NSYXRlLCBsb25nIHRpbWVEZWx0YSkgeworCQlyZXR1cm4gKHNwZWNpZmljTG9zc1JhdGUgKiAoKGRvdWJsZSkgdGltZURlbHRhIC8gKGRvdWJsZSkgZ2V0VGltZVBlcmlvZCgpKSApOworCX0gLy8gZ2V0QWRqdXN0ZWRJbW11bml0eUxvc3NSYXRlCisJCisJCisJQE92ZXJyaWRlCisJcHVibGljIERpc2Vhc2VNb2RlbExhYmVsIGNyZWF0ZURpc2Vhc2VNb2RlbExhYmVsKFN0cmluZyBwb3B1bGF0aW9uSWRlbnRpZmllcikgeworCQlyZXR1cm4gU3RhbmRhcmRGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVTSVJMYWJlbCgpOworCX0KKworCUBPdmVycmlkZQorCXB1YmxpYyBEaXNlYXNlTW9kZWxMYWJlbFZhbHVlIGNyZWF0ZURpc2Vhc2VNb2RlbExhYmVsVmFsdWUoU3RyaW5nIHBvcHVsYXRpb25JZGVudGlmaWVyKSB7CisJCXJldHVybiBTdGFuZGFyZEZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZVNJUkxhYmVsVmFsdWUoKTsKKwl9CisKKworCQorCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBPYmplY3QgZUdldChpbnQgZmVhdHVyZUlELCBib29sZWFuIHJlc29sdmUsIGJvb2xlYW4gY29yZVR5cGUpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJCWNhc2UgTXVsdGlwb3B1bGF0aW9uUGFja2FnZS5NVUxUSV9QT1BVTEFUSU9OX1NJUl9ESVNFQVNFX01PREVMX19JTU1VTklUWV9MT1NTX1JBVEU6CisJCQkJcmV0dXJuIGdldEltbXVuaXR5TG9zc1JhdGUoKTsKKwkJfQorCQlyZXR1cm4gc3VwZXIuZUdldChmZWF0dXJlSUQsIHJlc29sdmUsIGNvcmVUeXBlKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBlU2V0KGludCBmZWF0dXJlSUQsIE9iamVjdCBuZXdWYWx1ZSkgeworCQlzd2l0Y2ggKGZlYXR1cmVJRCkgeworCQkJY2FzZSBNdWx0aXBvcHVsYXRpb25QYWNrYWdlLk1VTFRJX1BPUFVMQVRJT05fU0lSX0RJU0VBU0VfTU9ERUxfX0lNTVVOSVRZX0xPU1NfUkFURToKKwkJCQlzZXRJbW11bml0eUxvc3NSYXRlKChEb3VibGVWYWx1ZUxpc3QpbmV3VmFsdWUpOworCQkJCXJldHVybjsKKwkJfQorCQlzdXBlci5lU2V0KGZlYXR1cmVJRCwgbmV3VmFsdWUpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGVVbnNldChpbnQgZmVhdHVyZUlEKSB7CisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7CisJCQljYXNlIE11bHRpcG9wdWxhdGlvblBhY2thZ2UuTVVMVElfUE9QVUxBVElPTl9TSVJfRElTRUFTRV9NT0RFTF9fSU1NVU5JVFlfTE9TU19SQVRFOgorCQkJCXNldEltbXVuaXR5TG9zc1JhdGUoKERvdWJsZVZhbHVlTGlzdCludWxsKTsKKwkJCQlyZXR1cm47CisJCX0KKwkJc3VwZXIuZVVuc2V0KGZlYXR1cmVJRCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIGJvb2xlYW4gZUlzU2V0KGludCBmZWF0dXJlSUQpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJCWNhc2UgTXVsdGlwb3B1bGF0aW9uUGFja2FnZS5NVUxUSV9QT1BVTEFUSU9OX1NJUl9ESVNFQVNFX01PREVMX19JTU1VTklUWV9MT1NTX1JBVEU6CisJCQkJcmV0dXJuIGltbXVuaXR5TG9zc1JhdGUgIT0gbnVsbDsKKwkJfQorCQlyZXR1cm4gc3VwZXIuZUlzU2V0KGZlYXR1cmVJRCk7CisJfQorCit9IC8vTXVsdGlQb3B1bGF0aW9uU0lSRGlzZWFzZU1vZGVsSW1wbApkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMubXVsdGlwb3B1bGF0aW9uL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvbXVsdGlwb3B1bGF0aW9uL2ltcGwvTXVsdGlQb3B1bGF0aW9uU2Vhc29uYWxEaXNlYXNlTW9kZWxJbXBsLmphdmEgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5tdWx0aXBvcHVsYXRpb24vc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9tdWx0aXBvcHVsYXRpb24vaW1wbC9NdWx0aVBvcHVsYXRpb25TZWFzb25hbERpc2Vhc2VNb2RlbEltcGwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZDEwNGNiCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMubXVsdGlwb3B1bGF0aW9uL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvbXVsdGlwb3B1bGF0aW9uL2ltcGwvTXVsdGlQb3B1bGF0aW9uU2Vhc29uYWxEaXNlYXNlTW9kZWxJbXBsLmphdmEKQEAgLTAsMCArMSw0NTAgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLm11bHRpcG9wdWxhdGlvbi5pbXBsOw0KKw0KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIA0KKyAqIENvcHlyaWdodCAoYykgMjAxMSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4gDQorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyANCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgDQorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQgDQorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwgDQorICogDQorICogQ29udHJpYnV0b3JzOiANCisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIA0KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KKw0KK2ltcG9ydCBqYXZhLnV0aWwuRGF0ZTsNCisNCitpbXBvcnQgb3JnLmFwYWNoZS5jb21tb25zLm1hdGguQXJndW1lbnRPdXRzaWRlRG9tYWluRXhjZXB0aW9uOw0KK2ltcG9ydCBvcmcuYXBhY2hlLmNvbW1vbnMubWF0aC5hbmFseXNpcy5pbnRlcnBvbGF0aW9uLlNwbGluZUludGVycG9sYXRvcjsNCitpbXBvcnQgb3JnLmFwYWNoZS5jb21tb25zLm1hdGguYW5hbHlzaXMucG9seW5vbWlhbHMuUG9seW5vbWlhbEZ1bmN0aW9uOw0KK2ltcG9ydCBvcmcuYXBhY2hlLmNvbW1vbnMubWF0aC5hbmFseXNpcy5wb2x5bm9taWFscy5Qb2x5bm9taWFsU3BsaW5lRnVuY3Rpb247DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uQ2hhaW47DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5FTGlzdDsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzczsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkludGVybmFsRU9iamVjdDsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLmltcGwuRU5vdGlmaWNhdGlvbkltcGw7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uRG91YmxlVmFsdWU7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uRG91YmxlVmFsdWVMaXN0Ow0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLkRvdWJsZVZhbHVlTWF0cml4Ow0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLlN0cmluZ1ZhbHVlOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguTm9kZTsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLk5vZGVMYWJlbDsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLlNURU1UaW1lOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMubXVsdGlwb3B1bGF0aW9uLk11bHRpUG9wdWxhdGlvblNlYXNvbmFsRGlzZWFzZU1vZGVsOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMubXVsdGlwb3B1bGF0aW9uLk11bHRpcG9wdWxhdGlvblBhY2thZ2U7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5EaXNlYXNlTW9kZWxMYWJlbFZhbHVlOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU0VJUkxhYmVsOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU0VJUkxhYmVsVmFsdWU7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbFZhbHVlOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuaW1wbC5TRUlSTGFiZWxWYWx1ZUltcGw7DQorDQorLyoqDQorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnDQorICogPGVtPjxiPk11bHRpIFBvcHVsYXRpb24gU2Vhc29uYWwgRGlzZWFzZSBNb2RlbDwvYj48L2VtPicuIDwhLS0gZW5kLXVzZXItZG9jDQorICogLS0+DQorICogPHA+DQorICogVGhlIGZvbGxvd2luZyBmZWF0dXJlcyBhcmUgaW1wbGVtZW50ZWQ6DQorICogPHVsPg0KKyAqIDxsaT4NCisgKiB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLm11bHRpcG9wdWxhdGlvbi5pbXBsLk11bHRpUG9wdWxhdGlvblNlYXNvbmFsRGlzZWFzZU1vZGVsSW1wbCNnZXRNb2R1bGF0aW9uUG9pbnRzDQorICogPGVtPk1vZHVsYXRpb24gUG9pbnRzPC9lbT59PC9saT4NCisgKiA8bGk+DQorICoge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5tdWx0aXBvcHVsYXRpb24uaW1wbC5NdWx0aVBvcHVsYXRpb25TZWFzb25hbERpc2Vhc2VNb2RlbEltcGwjZ2V0SW50ZXJwb2xhdGlvblR5cGUNCisgKiA8ZW0+SW50ZXJwb2xhdGlvbiBUeXBlPC9lbT59PC9saT4NCisgKiA8L3VsPg0KKyAqIDwvcD4NCisgKiANCisgKiBAZ2VuZXJhdGVkDQorICovDQorcHVibGljIGNsYXNzIE11bHRpUG9wdWxhdGlvblNlYXNvbmFsRGlzZWFzZU1vZGVsSW1wbCBleHRlbmRzDQorCQlNdWx0aVBvcHVsYXRpb25TRUlSRGlzZWFzZU1vZGVsSW1wbCBpbXBsZW1lbnRzDQorCQlNdWx0aVBvcHVsYXRpb25TZWFzb25hbERpc2Vhc2VNb2RlbCB7DQorCS8qKg0KKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRNb2R1bGF0aW9uUG9pbnRzKCkgPGVtPk1vZHVsYXRpb24gUG9pbnRzPC9lbT59JyBjb250YWlubWVudCByZWZlcmVuY2UuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MNCisJICogLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAc2VlICNnZXRNb2R1bGF0aW9uUG9pbnRzKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJcHJvdGVjdGVkIERvdWJsZVZhbHVlTWF0cml4IG1vZHVsYXRpb25Qb2ludHM7DQorDQorCS8qKg0KKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjaXNVc2VTcGxpbmVJbnRlcnBvbGF0aW9uKCkgPGVtPlVzZSBTcGxpbmUgSW50ZXJwb2xhdGlvbjwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHNlZSAjaXNVc2VTcGxpbmVJbnRlcnBvbGF0aW9uKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBib29sZWFuIFVTRV9TUExJTkVfSU5URVJQT0xBVElPTl9FREVGQVVMVCA9IGZhbHNlOw0KKw0KKwkvKioNCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjaXNVc2VTcGxpbmVJbnRlcnBvbGF0aW9uKCkgPGVtPlVzZSBTcGxpbmUgSW50ZXJwb2xhdGlvbjwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHNlZSAjaXNVc2VTcGxpbmVJbnRlcnBvbGF0aW9uKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJcHJvdGVjdGVkIGJvb2xlYW4gdXNlU3BsaW5lSW50ZXJwb2xhdGlvbiA9IFVTRV9TUExJTkVfSU5URVJQT0xBVElPTl9FREVGQVVMVDsNCisNCisJcHJpdmF0ZSBQb2x5bm9taWFsU3BsaW5lRnVuY3Rpb24gc3BsaW5lRnVuY3Rpb247DQorDQorCXByaXZhdGUgUG9seW5vbWlhbFNwbGluZUZ1bmN0aW9uIGxpbmVhckZ1bmN0aW9uOw0KKw0KKwlwcml2YXRlIGRvdWJsZVtdIHg7DQorDQorCXByaXZhdGUgZG91YmxlW10geTsNCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiANCisJICogQGdlbmVyYXRlZCBOT1QNCisJICovDQorCXB1YmxpYyBNdWx0aVBvcHVsYXRpb25TZWFzb25hbERpc2Vhc2VNb2RlbEltcGwoKSB7DQorCQlzdXBlcigpOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJQE92ZXJyaWRlDQorCXByb3RlY3RlZCBFQ2xhc3MgZVN0YXRpY0NsYXNzKCkgew0KKwkJcmV0dXJuIE11bHRpcG9wdWxhdGlvblBhY2thZ2UuTGl0ZXJhbHMuTVVMVElfUE9QVUxBVElPTl9TRUFTT05BTF9ESVNFQVNFX01PREVMOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIERvdWJsZVZhbHVlTWF0cml4IGdldE1vZHVsYXRpb25Qb2ludHMoKSB7DQorCQlyZXR1cm4gbW9kdWxhdGlvblBvaW50czsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBOb3RpZmljYXRpb25DaGFpbiBiYXNpY1NldE1vZHVsYXRpb25Qb2ludHMoDQorCQkJRG91YmxlVmFsdWVNYXRyaXggbmV3TW9kdWxhdGlvblBvaW50cywgTm90aWZpY2F0aW9uQ2hhaW4gbXNncykgew0KKwkJRG91YmxlVmFsdWVNYXRyaXggb2xkTW9kdWxhdGlvblBvaW50cyA9IG1vZHVsYXRpb25Qb2ludHM7DQorCQltb2R1bGF0aW9uUG9pbnRzID0gbmV3TW9kdWxhdGlvblBvaW50czsNCisJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkgew0KKwkJCUVOb3RpZmljYXRpb25JbXBsIG5vdGlmaWNhdGlvbiA9IG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBNdWx0aXBvcHVsYXRpb25QYWNrYWdlLk1VTFRJX1BPUFVMQVRJT05fU0VBU09OQUxfRElTRUFTRV9NT0RFTF9fTU9EVUxBVElPTl9QT0lOVFMsIG9sZE1vZHVsYXRpb25Qb2ludHMsIG5ld01vZHVsYXRpb25Qb2ludHMpOw0KKwkJCWlmIChtc2dzID09IG51bGwpIG1zZ3MgPSBub3RpZmljYXRpb247IGVsc2UgbXNncy5hZGQobm90aWZpY2F0aW9uKTsNCisJCX0NCisJCXJldHVybiBtc2dzOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIHZvaWQgc2V0TW9kdWxhdGlvblBvaW50cyhEb3VibGVWYWx1ZU1hdHJpeCBuZXdNb2R1bGF0aW9uUG9pbnRzKSB7DQorCQlpZiAobmV3TW9kdWxhdGlvblBvaW50cyAhPSBtb2R1bGF0aW9uUG9pbnRzKSB7DQorCQkJTm90aWZpY2F0aW9uQ2hhaW4gbXNncyA9IG51bGw7DQorCQkJaWYgKG1vZHVsYXRpb25Qb2ludHMgIT0gbnVsbCkNCisJCQkJbXNncyA9ICgoSW50ZXJuYWxFT2JqZWN0KW1vZHVsYXRpb25Qb2ludHMpLmVJbnZlcnNlUmVtb3ZlKHRoaXMsIEVPUFBPU0lURV9GRUFUVVJFX0JBU0UgLSBNdWx0aXBvcHVsYXRpb25QYWNrYWdlLk1VTFRJX1BPUFVMQVRJT05fU0VBU09OQUxfRElTRUFTRV9NT0RFTF9fTU9EVUxBVElPTl9QT0lOVFMsIG51bGwsIG1zZ3MpOw0KKwkJCWlmIChuZXdNb2R1bGF0aW9uUG9pbnRzICE9IG51bGwpDQorCQkJCW1zZ3MgPSAoKEludGVybmFsRU9iamVjdCluZXdNb2R1bGF0aW9uUG9pbnRzKS5lSW52ZXJzZUFkZCh0aGlzLCBFT1BQT1NJVEVfRkVBVFVSRV9CQVNFIC0gTXVsdGlwb3B1bGF0aW9uUGFja2FnZS5NVUxUSV9QT1BVTEFUSU9OX1NFQVNPTkFMX0RJU0VBU0VfTU9ERUxfX01PRFVMQVRJT05fUE9JTlRTLCBudWxsLCBtc2dzKTsNCisJCQltc2dzID0gYmFzaWNTZXRNb2R1bGF0aW9uUG9pbnRzKG5ld01vZHVsYXRpb25Qb2ludHMsIG1zZ3MpOw0KKwkJCWlmIChtc2dzICE9IG51bGwpIG1zZ3MuZGlzcGF0Y2goKTsNCisJCX0NCisJCWVsc2UgaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQ0KKwkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIE11bHRpcG9wdWxhdGlvblBhY2thZ2UuTVVMVElfUE9QVUxBVElPTl9TRUFTT05BTF9ESVNFQVNFX01PREVMX19NT0RVTEFUSU9OX1BPSU5UUywgbmV3TW9kdWxhdGlvblBvaW50cywgbmV3TW9kdWxhdGlvblBvaW50cykpOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIGJvb2xlYW4gaXNVc2VTcGxpbmVJbnRlcnBvbGF0aW9uKCkgew0KKwkJcmV0dXJuIHVzZVNwbGluZUludGVycG9sYXRpb247DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgdm9pZCBzZXRVc2VTcGxpbmVJbnRlcnBvbGF0aW9uKGJvb2xlYW4gbmV3VXNlU3BsaW5lSW50ZXJwb2xhdGlvbikgew0KKwkJYm9vbGVhbiBvbGRVc2VTcGxpbmVJbnRlcnBvbGF0aW9uID0gdXNlU3BsaW5lSW50ZXJwb2xhdGlvbjsNCisJCXVzZVNwbGluZUludGVycG9sYXRpb24gPSBuZXdVc2VTcGxpbmVJbnRlcnBvbGF0aW9uOw0KKwkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQ0KKwkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIE11bHRpcG9wdWxhdGlvblBhY2thZ2UuTVVMVElfUE9QVUxBVElPTl9TRUFTT05BTF9ESVNFQVNFX01PREVMX19VU0VfU1BMSU5FX0lOVEVSUE9MQVRJT04sIG9sZFVzZVNwbGluZUludGVycG9sYXRpb24sIHVzZVNwbGluZUludGVycG9sYXRpb24pKTsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCUBPdmVycmlkZQ0KKwlwdWJsaWMgTm90aWZpY2F0aW9uQ2hhaW4gZUludmVyc2VSZW1vdmUoSW50ZXJuYWxFT2JqZWN0IG90aGVyRW5kLA0KKwkJCWludCBmZWF0dXJlSUQsIE5vdGlmaWNhdGlvbkNoYWluIG1zZ3MpIHsNCisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7DQorCQkJY2FzZSBNdWx0aXBvcHVsYXRpb25QYWNrYWdlLk1VTFRJX1BPUFVMQVRJT05fU0VBU09OQUxfRElTRUFTRV9NT0RFTF9fTU9EVUxBVElPTl9QT0lOVFM6DQorCQkJCXJldHVybiBiYXNpY1NldE1vZHVsYXRpb25Qb2ludHMobnVsbCwgbXNncyk7DQorCQl9DQorCQlyZXR1cm4gc3VwZXIuZUludmVyc2VSZW1vdmUob3RoZXJFbmQsIGZlYXR1cmVJRCwgbXNncyk7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlAT3ZlcnJpZGUNCisJcHVibGljIE9iamVjdCBlR2V0KGludCBmZWF0dXJlSUQsIGJvb2xlYW4gcmVzb2x2ZSwgYm9vbGVhbiBjb3JlVHlwZSkgew0KKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsNCisJCQljYXNlIE11bHRpcG9wdWxhdGlvblBhY2thZ2UuTVVMVElfUE9QVUxBVElPTl9TRUFTT05BTF9ESVNFQVNFX01PREVMX19NT0RVTEFUSU9OX1BPSU5UUzoNCisJCQkJcmV0dXJuIGdldE1vZHVsYXRpb25Qb2ludHMoKTsNCisJCQljYXNlIE11bHRpcG9wdWxhdGlvblBhY2thZ2UuTVVMVElfUE9QVUxBVElPTl9TRUFTT05BTF9ESVNFQVNFX01PREVMX19VU0VfU1BMSU5FX0lOVEVSUE9MQVRJT046DQorCQkJCXJldHVybiBpc1VzZVNwbGluZUludGVycG9sYXRpb24oKTsNCisJCX0NCisJCXJldHVybiBzdXBlci5lR2V0KGZlYXR1cmVJRCwgcmVzb2x2ZSwgY29yZVR5cGUpOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJQE92ZXJyaWRlDQorCXB1YmxpYyB2b2lkIGVTZXQoaW50IGZlYXR1cmVJRCwgT2JqZWN0IG5ld1ZhbHVlKSB7DQorCQlzd2l0Y2ggKGZlYXR1cmVJRCkgew0KKwkJCWNhc2UgTXVsdGlwb3B1bGF0aW9uUGFja2FnZS5NVUxUSV9QT1BVTEFUSU9OX1NFQVNPTkFMX0RJU0VBU0VfTU9ERUxfX01PRFVMQVRJT05fUE9JTlRTOg0KKwkJCQlzZXRNb2R1bGF0aW9uUG9pbnRzKChEb3VibGVWYWx1ZU1hdHJpeCluZXdWYWx1ZSk7DQorCQkJCXJldHVybjsNCisJCQljYXNlIE11bHRpcG9wdWxhdGlvblBhY2thZ2UuTVVMVElfUE9QVUxBVElPTl9TRUFTT05BTF9ESVNFQVNFX01PREVMX19VU0VfU1BMSU5FX0lOVEVSUE9MQVRJT046DQorCQkJCXNldFVzZVNwbGluZUludGVycG9sYXRpb24oKEJvb2xlYW4pbmV3VmFsdWUpOw0KKwkJCQlyZXR1cm47DQorCQl9DQorCQlzdXBlci5lU2V0KGZlYXR1cmVJRCwgbmV3VmFsdWUpOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJQE92ZXJyaWRlDQorCXB1YmxpYyB2b2lkIGVVbnNldChpbnQgZmVhdHVyZUlEKSB7DQorCQlzd2l0Y2ggKGZlYXR1cmVJRCkgew0KKwkJCWNhc2UgTXVsdGlwb3B1bGF0aW9uUGFja2FnZS5NVUxUSV9QT1BVTEFUSU9OX1NFQVNPTkFMX0RJU0VBU0VfTU9ERUxfX01PRFVMQVRJT05fUE9JTlRTOg0KKwkJCQlzZXRNb2R1bGF0aW9uUG9pbnRzKChEb3VibGVWYWx1ZU1hdHJpeCludWxsKTsNCisJCQkJcmV0dXJuOw0KKwkJCWNhc2UgTXVsdGlwb3B1bGF0aW9uUGFja2FnZS5NVUxUSV9QT1BVTEFUSU9OX1NFQVNPTkFMX0RJU0VBU0VfTU9ERUxfX1VTRV9TUExJTkVfSU5URVJQT0xBVElPTjoNCisJCQkJc2V0VXNlU3BsaW5lSW50ZXJwb2xhdGlvbihVU0VfU1BMSU5FX0lOVEVSUE9MQVRJT05fRURFRkFVTFQpOw0KKwkJCQlyZXR1cm47DQorCQl9DQorCQlzdXBlci5lVW5zZXQoZmVhdHVyZUlEKTsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCUBPdmVycmlkZQ0KKwlwdWJsaWMgYm9vbGVhbiBlSXNTZXQoaW50IGZlYXR1cmVJRCkgew0KKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsNCisJCQljYXNlIE11bHRpcG9wdWxhdGlvblBhY2thZ2UuTVVMVElfUE9QVUxBVElPTl9TRUFTT05BTF9ESVNFQVNFX01PREVMX19NT0RVTEFUSU9OX1BPSU5UUzoNCisJCQkJcmV0dXJuIG1vZHVsYXRpb25Qb2ludHMgIT0gbnVsbDsNCisJCQljYXNlIE11bHRpcG9wdWxhdGlvblBhY2thZ2UuTVVMVElfUE9QVUxBVElPTl9TRUFTT05BTF9ESVNFQVNFX01PREVMX19VU0VfU1BMSU5FX0lOVEVSUE9MQVRJT046DQorCQkJCXJldHVybiB1c2VTcGxpbmVJbnRlcnBvbGF0aW9uICE9IFVTRV9TUExJTkVfSU5URVJQT0xBVElPTl9FREVGQVVMVDsNCisJCX0NCisJCXJldHVybiBzdXBlci5lSXNTZXQoZmVhdHVyZUlEKTsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCUBPdmVycmlkZQ0KKwlwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkgew0KKwkJaWYgKGVJc1Byb3h5KCkpIHJldHVybiBzdXBlci50b1N0cmluZygpOw0KKw0KKwkJU3RyaW5nQnVmZmVyIHJlc3VsdCA9IG5ldyBTdHJpbmdCdWZmZXIoc3VwZXIudG9TdHJpbmcoKSk7DQorCQlyZXN1bHQuYXBwZW5kKCIgKHVzZVNwbGluZUludGVycG9sYXRpb246ICIpOw0KKwkJcmVzdWx0LmFwcGVuZCh1c2VTcGxpbmVJbnRlcnBvbGF0aW9uKTsNCisJCXJlc3VsdC5hcHBlbmQoJyknKTsNCisJCXJldHVybiByZXN1bHQudG9TdHJpbmcoKTsNCisJfQ0KKw0KKwlAT3ZlcnJpZGUNCisJcHVibGljIFN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZSBjb21wdXRlRGlzZWFzZURlbHRhcyhTVEVNVGltZSB0aW1lLA0KKwkJCVN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZSBjdXJyZW50U3RhdGUsDQorCQkJU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbCBkaXNlYXNlTGFiZWwsIGxvbmcgdGltZURlbHRhLA0KKwkJCURpc2Vhc2VNb2RlbExhYmVsVmFsdWUgcmV0dXJuVmFsdWUpIHsNCisJCWZpbmFsIFNFSVJMYWJlbFZhbHVlIGN1cnJlbnRTRUlSID0gKFNFSVJMYWJlbFZhbHVlKSBjdXJyZW50U3RhdGU7DQorCQlTdHJpbmcgdGhpc1BvcHVsYXRpb24gPSBkaXNlYXNlTGFiZWwuZ2V0UG9wdWxhdGlvbk1vZGVsTGFiZWwoKQ0KKwkJCQkuZ2V0UG9wdWxhdGlvbklkZW50aWZpZXIoKTsNCisJCWludCBwb3B1bGF0aW9uSW5kZXggPSB0aGlzLmdldFBvcHVsYXRpb25JbmRleCh0aGlzUG9wdWxhdGlvbik7DQorDQorCQkvLyBDb21wdXRlIG1vZHVsYXRpb24uIE1heGltdW0gRGF5IG9mIHRoZSBZZWFyIGlzIDM2NSwgb3RoZXJ3aXNlDQorCQkvLyBpbnRlcnBvbGF0aW9uIGZ1bmN0aW9uIG1heSBub3QgYmUgY29udGludW91cyBhdCB0cmFuc2l0aW9uIHRvIG5leHQNCisJCS8vIHllYXIuDQorCQlkb3VibGUgdHJhbnNtaXNzaW9uTW9kdWxhdGlvbiA9IDAuMDsNCisJCWRvdWJsZSBkYXlPZlRoZVllYXIgPSBNYXRoLm1pbihnZXREYXlPZlRoZVllYXIodGltZSksIDM2NS4wKTsNCisJCWNvbXB1dGVJbnRlcnBvbGF0aW9uRnVuY3Rpb25zKCk7DQorDQorCQlpZiAodXNlU3BsaW5lSW50ZXJwb2xhdGlvbikgew0KKwkJCXRyeSB7DQorCQkJCXRyYW5zbWlzc2lvbk1vZHVsYXRpb24gPSBNYXRoLm1heCgNCisJCQkJCQlzcGxpbmVGdW5jdGlvbi52YWx1ZShkYXlPZlRoZVllYXIpLCAwLjApOw0KKwkJCX0gY2F0Y2ggKEFyZ3VtZW50T3V0c2lkZURvbWFpbkV4Y2VwdGlvbiBlKSB7DQorCQkJCWUucHJpbnRTdGFja1RyYWNlKCk7DQorCQkJfQ0KKwkJfSBlbHNlIHsNCisJCQl0cnkgew0KKwkJCQl0cmFuc21pc3Npb25Nb2R1bGF0aW9uID0gTWF0aC5tYXgoDQorCQkJCQkJbGluZWFyRnVuY3Rpb24udmFsdWUoZGF5T2ZUaGVZZWFyKSwgMC4wKTsNCisJCQl9IGNhdGNoIChBcmd1bWVudE91dHNpZGVEb21haW5FeGNlcHRpb24gZSkgew0KKwkJCQllLnByaW50U3RhY2tUcmFjZSgpOw0KKwkJCX0NCisJCX0NCisNCisJCUVMaXN0PERvdWJsZVZhbHVlPiB0cmFuc21pc3Npb25WZWN0b3IgPSBnZXRUcmFuc21pc3Npb25SYXRlKCkNCisJCQkJLmdldFZhbHVlTGlzdHMoKS5nZXQocG9wdWxhdGlvbkluZGV4KS5nZXRWYWx1ZXMoKTsNCisJCWRvdWJsZSB0aGlzUmVjb3ZlcnlSYXRlID0gZ2V0UmVjb3ZlcnlSYXRlKCkuZ2V0VmFsdWVzKCkNCisJCQkJLmdldChwb3B1bGF0aW9uSW5kZXgpLmdldFZhbHVlKCk7DQorCQlkb3VibGUgdGhpc0ltbXVuaXR5TG9zc1JhdGUgPSBnZXRJbW11bml0eUxvc3NSYXRlKCkuZ2V0VmFsdWVzKCkNCisJCQkJLmdldChwb3B1bGF0aW9uSW5kZXgpLmdldFZhbHVlKCk7DQorCQlkb3VibGUgdGhpc0luY3ViYXRpb25SYXRlID0gZ2V0SW5jdWJhdGlvblJhdGUoKS5nZXRWYWx1ZXMoKQ0KKwkJCQkuZ2V0KHBvcHVsYXRpb25JbmRleCkuZ2V0VmFsdWUoKTsNCisNCisJCS8vIGl0ZXJhdGUgb3ZlciBldmVyeSBwb3B1bGF0aW9uIChpbmNsdWRpbmcgdGhpcyBvbmUpIHRvIGNvbXB1dGUgbmV3DQorCQkvLyBpbmZlY3Rpb25zDQorCQlkb3VibGUgbnVtYmVyT2ZTdXNjZXB0aWJsZVRvRXhwb3NlZCA9IDAuMDsNCisJCWRvdWJsZSBudW1iZXJTdXNjZXB0aWJsZSA9IGN1cnJlbnRTRUlSLmdldFMoKTsNCisJCU5vZGUgdGhpc05vZGUgPSBkaXNlYXNlTGFiZWwuZ2V0Tm9kZSgpOw0KKwkJRUxpc3Q8U3RyaW5nVmFsdWU+IGdyb3VwTGlzdCA9IGdldFBvcHVsYXRpb25Hcm91cHMoKS5nZXRWYWx1ZXMoKTsNCisNCisJCWZvciAoaW50IGkgPSAwOyBpIDwgdHJhbnNtaXNzaW9uVmVjdG9yLnNpemUoKTsgaSsrKSB7DQorCQkJZG91YmxlIHNwZWNpZmljVHJhbnNtaXNzaW9uID0gdHJhbnNtaXNzaW9uVmVjdG9yLmdldChpKS5nZXRWYWx1ZSgpOw0KKwkJCWRvdWJsZSBhZGp1c3RlZFRyYW5zbWlzc2lvbiA9IGdldEFkanVzdGVkVHJhbnNtaXNzaW9uUmF0ZSgNCisJCQkJCXNwZWNpZmljVHJhbnNtaXNzaW9uLCB0aW1lRGVsdGEpICogdHJhbnNtaXNzaW9uTW9kdWxhdGlvbjsNCisJCQlpZiAoIXRoaXMuaXNGcmVxdWVuY3lEZXBlbmRlbnQoKSkNCisJCQkJYWRqdXN0ZWRUcmFuc21pc3Npb24gKj0gZ2V0VHJhbnNtaXNzaW9uUmF0ZVNjYWxlRmFjdG9yKGRpc2Vhc2VMYWJlbCk7DQorDQorCQkJLy8gd2UgbmVlZCB0byBnZXQgdGhlIGRpc2Vhc2UgbGFiZWwgZm9yIHRoZSBvdGhlciBwb3B1bGF0aW9uDQorCQkJLy8gdG8gZ2V0IHRoZSBvbiBzaXRlIG51bWJlciBvZiBpbmZlY3Rpb3VzIGluZGl2aWR1YWxzDQorCQkJU3RyaW5nIG5leHRQb3AgPSBncm91cExpc3QuZ2V0KGkpLmdldFZhbHVlKCk7DQorDQorCQkJZm9yIChOb2RlTGFiZWwgbGFiZWwgOiB0aGlzTm9kZS5nZXRMYWJlbHMoKSkgew0KKwkJCQlpZiAobGFiZWwgaW5zdGFuY2VvZiBTRUlSTGFiZWwNCisJCQkJCQkmJiAoKFNFSVJMYWJlbCkgbGFiZWwpLmdldERlY29yYXRvcigpID09IHRoaXMpIHsNCisJCQkJCVNFSVJMYWJlbCBvdGhlckRpc2Vhc2VMYWJlbCA9IChTRUlSTGFiZWwpIGxhYmVsOw0KKwkJCQkJU3RyaW5nIG90aGVyUG9wdWxhdGlvbiA9IG90aGVyRGlzZWFzZUxhYmVsLmdldElkZW50aWZpZXIoKTsNCisNCisJCQkJCWlmIChvdGhlclBvcHVsYXRpb24uZXF1YWxzKG5leHRQb3ApKSB7DQorCQkJCQkJZG91YmxlIG9uc2l0ZUluZmVjdGlvdXMgPSAoKFNFSVJMYWJlbFZhbHVlKSBvdGhlckRpc2Vhc2VMYWJlbA0KKwkJCQkJCQkJLmdldFRlbXBWYWx1ZSgpKS5nZXRJKCk7DQorCQkJCQkJZmluYWwgZG91YmxlIGVmZmVjdGl2ZUluZmVjdGlvdXMgPSBnZXROb3JtYWxpemVkRWZmZWN0aXZlSW5mZWN0aW91cygNCisJCQkJCQkJCW90aGVyUG9wdWxhdGlvbiwgdGhpc05vZGUsIG90aGVyRGlzZWFzZUxhYmVsLA0KKwkJCQkJCQkJb25zaXRlSW5mZWN0aW91cyk7DQorDQorCQkJCQkJLy8gYWRkIHRvIHRoZSBuZXcgaW5jaWRlbmNlDQorCQkJCQkJbnVtYmVyT2ZTdXNjZXB0aWJsZVRvRXhwb3NlZCArPSBhZGp1c3RlZFRyYW5zbWlzc2lvbg0KKwkJCQkJCQkJKiBudW1iZXJTdXNjZXB0aWJsZSAqIGVmZmVjdGl2ZUluZmVjdGlvdXM7DQorCQkJCQl9DQorCQkJCX0NCisJCQl9DQorCQl9DQorDQorCQlkb3VibGUgbnVtYmVyT2ZJbmZlY3RlZFRvUmVjb3ZlcmVkID0gZ2V0QWRqdXN0ZWRSZWNvdmVyeVJhdGUoDQorCQkJCXRoaXNSZWNvdmVyeVJhdGUsIHRpbWVEZWx0YSkgKiBjdXJyZW50U0VJUi5nZXRJKCk7DQorCQlkb3VibGUgbnVtYmVyT2ZSZWNvdmVyZWRUb1N1c2NlcHRpYmxlID0gZ2V0QWRqdXN0ZWRJbW11bml0eUxvc3NSYXRlKA0KKwkJCQl0aGlzSW1tdW5pdHlMb3NzUmF0ZSwgdGltZURlbHRhKSAqIGN1cnJlbnRTRUlSLmdldFIoKTsNCisJCWRvdWJsZSBudW1iZXJPZkV4cG9zZWRUb0luZmVjdGVkID0gZ2V0QWRqdXN0ZWRJbmN1YmF0aW9uUmF0ZSgNCisJCQkJdGhpc0luY3ViYXRpb25SYXRlLCB0aW1lRGVsdGEpICogY3VycmVudFNFSVIuZ2V0RSgpOw0KKw0KKwkJZmluYWwgZG91YmxlIGRlbHRhUyA9IC1udW1iZXJPZlN1c2NlcHRpYmxlVG9FeHBvc2VkDQorCQkJCSsgbnVtYmVyT2ZSZWNvdmVyZWRUb1N1c2NlcHRpYmxlOw0KKwkJZmluYWwgZG91YmxlIGRlbHRhRSA9IG51bWJlck9mU3VzY2VwdGlibGVUb0V4cG9zZWQNCisJCQkJLSBudW1iZXJPZkV4cG9zZWRUb0luZmVjdGVkOw0KKwkJZmluYWwgZG91YmxlIGRlbHRhSSA9IG51bWJlck9mRXhwb3NlZFRvSW5mZWN0ZWQNCisJCQkJLSBudW1iZXJPZkluZmVjdGVkVG9SZWNvdmVyZWQ7DQorCQlmaW5hbCBkb3VibGUgZGVsdGFSID0gbnVtYmVyT2ZJbmZlY3RlZFRvUmVjb3ZlcmVkDQorCQkJCS0gbnVtYmVyT2ZSZWNvdmVyZWRUb1N1c2NlcHRpYmxlOw0KKw0KKwkJU0VJUkxhYmVsVmFsdWVJbXBsIHJldCA9IChTRUlSTGFiZWxWYWx1ZUltcGwpIHJldHVyblZhbHVlOw0KKwkJcmV0LnNldFMoZGVsdGFTKTsNCisJCXJldC5zZXRFKGRlbHRhRSk7DQorCQlyZXQuc2V0SShkZWx0YUkpOw0KKwkJcmV0LnNldFIoZGVsdGFSKTsNCisJCXJldC5zZXRJbmNpZGVuY2UobnVtYmVyT2ZTdXNjZXB0aWJsZVRvRXhwb3NlZCk7DQorCQlyZXQuc2V0RGlzZWFzZURlYXRocygwLjApOw0KKw0KKwkJcmV0dXJuIHJldDsNCisJfQ0KKw0KKwlwcml2YXRlIHZvaWQgY29tcHV0ZUludGVycG9sYXRpb25GdW5jdGlvbnMoKSB7DQorCQlib29sZWFuIHBvaW50c0NoYW5nZWQgPSBmYWxzZTsNCisJCUVMaXN0PERvdWJsZVZhbHVlTGlzdD4gcG9pbnRzID0gbW9kdWxhdGlvblBvaW50cy5nZXRWYWx1ZUxpc3RzKCk7DQorCQlpbnQgbiA9IHBvaW50cy5zaXplKCk7DQorCQlpbnQgbSA9IDEwOw0KKw0KKwkJaWYgKHggPT0gbnVsbCB8fCB4Lmxlbmd0aCAhPSAoMiAqIG0gKyAxKSAqIG4pIHsNCisJCQl4ID0gbmV3IGRvdWJsZVsoMiAqIG0gKyAxKSAqIG5dOw0KKwkJCXkgPSBuZXcgZG91YmxlWygyICogbSArIDEpICogbl07DQorCQkJcG9pbnRzQ2hhbmdlZCA9IHRydWU7DQorCQl9DQorDQorCQlpbnQgaW5kZXggPSAwOw0KKw0KKwkJZm9yIChEb3VibGVWYWx1ZUxpc3QgcG9pbnQgOiBwb2ludHMpIHsNCisJCQlkb3VibGUgbnggPSBwb2ludC5nZXRWYWx1ZXMoKS5nZXQoMCkuZ2V0VmFsdWUoKTsNCisJCQlkb3VibGUgbnkgPSBwb2ludC5nZXRWYWx1ZXMoKS5nZXQoMSkuZ2V0VmFsdWUoKTsNCisNCisJCQlpZiAoeFtpbmRleF0gIT0gbnggfHwgeVtpbmRleF0gIT0gbnkpIHsNCisJCQkJeFtpbmRleF0gPSBueCAtIG0gKiAzNjUuMDsNCisJCQkJeVtpbmRleF0gPSBueTsNCisJCQkJcG9pbnRzQ2hhbmdlZCA9IHRydWU7DQorCQkJfQ0KKw0KKwkJCWluZGV4Kys7DQorCQl9DQorDQorCQkvLyBUaGUgdmFsdWUgYXQgMC4wIGFuZCAzNjUuMCBzaG91bGQgYmUgdGhlIHNhbWUNCisJCS8vIFNvIHRoZSB0cmFuc2l0aW9uIGJldHdlZW4geWVhcnMgaXMgY29udGludW91cw0KKwkJZm9yIChpbnQgaiA9IDE7IGogPD0gMiAqIG07IGorKykgew0KKwkJCWZvciAoaW50IGkgPSAwOyBpIDwgbjsgaSsrKSB7DQorCQkJCXhbaiAqIG4gKyBpXSA9IHhbaV0gKyBqICogMzY1LjA7DQorCQkJCXlbaiAqIG4gKyBpXSA9IHlbaV07DQorCQkJfQ0KKwkJfQ0KKw0KKwkJbiA9ICgyICogbSArIDEpICogbjsNCisNCisJCWlmIChwb2ludHNDaGFuZ2VkKSB7DQorCQkJLy8gU3BsaW5lIEludGVycG9sYXRpb24NCisJCQlTcGxpbmVJbnRlcnBvbGF0b3IgaW50ZXJwb2xhdG9yID0gbmV3IFNwbGluZUludGVycG9sYXRvcigpOw0KKw0KKwkJCXNwbGluZUZ1bmN0aW9uID0gaW50ZXJwb2xhdG9yLmludGVycG9sYXRlKHgsIHkpOw0KKw0KKwkJCS8vIExpbmVhciBJbnRlcnBvbGF0aW9uDQorCQkJUG9seW5vbWlhbEZ1bmN0aW9uIHBvbHlub21pYWxzW10gPSBuZXcgUG9seW5vbWlhbEZ1bmN0aW9uW24gLSAxXTsNCisNCisJCQlmb3IgKGludCBpID0gMDsgaSA8IG4gLSAxOyBpKyspIHsNCisJCQkJZmluYWwgZG91YmxlIGNvZWZmaWNpZW50c1tdID0gbmV3IGRvdWJsZVsyXTsNCisNCisJCQkJY29lZmZpY2llbnRzWzBdID0geVtpXTsNCisJCQkJY29lZmZpY2llbnRzWzFdID0gKHlbaSArIDFdIC0geVtpXSkgLyAoeFtpICsgMV0gLSB4W2ldKTsNCisJCQkJcG9seW5vbWlhbHNbaV0gPSBuZXcgUG9seW5vbWlhbEZ1bmN0aW9uKGNvZWZmaWNpZW50cyk7DQorCQkJfQ0KKw0KKwkJCWxpbmVhckZ1bmN0aW9uID0gbmV3IFBvbHlub21pYWxTcGxpbmVGdW5jdGlvbih4LCBwb2x5bm9taWFscyk7DQorCQl9DQorCX0NCisNCisJcHJpdmF0ZSBkb3VibGUgZ2V0RGF5T2ZUaGVZZWFyKFNURU1UaW1lIHRpbWUpIHsNCisJCURhdGUgZGF0ZSA9IHRpbWUuZ2V0VGltZSgpOw0KKwkJRGF0ZSBmaXJzdEphbnVhcnkgPSBuZXcgRGF0ZShkYXRlLmdldFllYXIoKSwgMCwgMSk7DQorCQlkb3VibGUgbWlsbGlzZWNvbmRPZlRoZVllYXIgPSBkYXRlLmdldFRpbWUoKSAtIGZpcnN0SmFudWFyeS5nZXRUaW1lKCk7DQorCQlkb3VibGUgZGF5T2ZUaGVZZWFyID0gbWlsbGlzZWNvbmRPZlRoZVllYXIgLyAoMjQgKiA2MCAqIDYwICogMTAwMCk7DQorDQorCQlyZXR1cm4gZGF5T2ZUaGVZZWFyOw0KKwl9DQorDQorfSAvLyBNdWx0aVBvcHVsYXRpb25TZWFzb25hbERpc2Vhc2VNb2RlbEltcGwNCmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5tdWx0aXBvcHVsYXRpb24vc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9tdWx0aXBvcHVsYXRpb24vaW1wbC9NdWx0aXBvcHVsYXRpb25GYWN0b3J5SW1wbC5qYXZhIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMubXVsdGlwb3B1bGF0aW9uL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvbXVsdGlwb3B1bGF0aW9uL2ltcGwvTXVsdGlwb3B1bGF0aW9uRmFjdG9yeUltcGwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NjA0ZDQxCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMubXVsdGlwb3B1bGF0aW9uL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvbXVsdGlwb3B1bGF0aW9uL2ltcGwvTXVsdGlwb3B1bGF0aW9uRmFjdG9yeUltcGwuamF2YQpAQCAtMCwwICsxLDEyOCBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMubXVsdGlwb3B1bGF0aW9uLmltcGw7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuaW1wbC5FRmFjdG9yeUltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnBsdWdpbi5FY29yZVBsdWdpbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMubXVsdGlwb3B1bGF0aW9uLio7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLm11bHRpcG9wdWxhdGlvbi5NdWx0aVBvcHVsYXRpb25TRUlSRGlzZWFzZU1vZGVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5tdWx0aXBvcHVsYXRpb24uTXVsdGlQb3B1bGF0aW9uU0lEaXNlYXNlTW9kZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLm11bHRpcG9wdWxhdGlvbi5NdWx0aVBvcHVsYXRpb25TSVJEaXNlYXNlTW9kZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLm11bHRpcG9wdWxhdGlvbi5NdWx0aXBvcHVsYXRpb25GYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5tdWx0aXBvcHVsYXRpb24uTXVsdGlwb3B1bGF0aW9uUGFja2FnZTsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIG1vZGVsIDxiPkZhY3Rvcnk8L2I+LgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBNdWx0aXBvcHVsYXRpb25GYWN0b3J5SW1wbCBleHRlbmRzIEVGYWN0b3J5SW1wbCBpbXBsZW1lbnRzIE11bHRpcG9wdWxhdGlvbkZhY3RvcnkgeworCS8qKgorCSAqIENyZWF0ZXMgdGhlIGRlZmF1bHQgZmFjdG9yeSBpbXBsZW1lbnRhdGlvbi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgc3RhdGljIE11bHRpcG9wdWxhdGlvbkZhY3RvcnkgaW5pdCgpIHsKKwkJdHJ5IHsKKwkJCU11bHRpcG9wdWxhdGlvbkZhY3RvcnkgdGhlTXVsdGlwb3B1bGF0aW9uRmFjdG9yeSA9IChNdWx0aXBvcHVsYXRpb25GYWN0b3J5KUVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVGYWN0b3J5KCJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9tdWx0aXBvcHVsYXRpb24uZWNvcmUiKTsgCisJCQlpZiAodGhlTXVsdGlwb3B1bGF0aW9uRmFjdG9yeSAhPSBudWxsKSB7CisJCQkJcmV0dXJuIHRoZU11bHRpcG9wdWxhdGlvbkZhY3Rvcnk7CisJCQl9CisJCX0KKwkJY2F0Y2ggKEV4Y2VwdGlvbiBleGNlcHRpb24pIHsKKwkJCUVjb3JlUGx1Z2luLklOU1RBTkNFLmxvZyhleGNlcHRpb24pOworCQl9CisJCXJldHVybiBuZXcgTXVsdGlwb3B1bGF0aW9uRmFjdG9yeUltcGwoKTsKKwl9CisKKwkvKioKKwkgKiBDcmVhdGVzIGFuIGluc3RhbmNlIG9mIHRoZSBmYWN0b3J5LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBNdWx0aXBvcHVsYXRpb25GYWN0b3J5SW1wbCgpIHsKKwkJc3VwZXIoKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgRU9iamVjdCBjcmVhdGUoRUNsYXNzIGVDbGFzcykgeworCQlzd2l0Y2ggKGVDbGFzcy5nZXRDbGFzc2lmaWVySUQoKSkgeworCQkJY2FzZSBNdWx0aXBvcHVsYXRpb25QYWNrYWdlLk1VTFRJX1BPUFVMQVRJT05fU0lfRElTRUFTRV9NT0RFTDogcmV0dXJuIGNyZWF0ZU11bHRpUG9wdWxhdGlvblNJRGlzZWFzZU1vZGVsKCk7CisJCQljYXNlIE11bHRpcG9wdWxhdGlvblBhY2thZ2UuTVVMVElfUE9QVUxBVElPTl9TSVJfRElTRUFTRV9NT0RFTDogcmV0dXJuIGNyZWF0ZU11bHRpUG9wdWxhdGlvblNJUkRpc2Vhc2VNb2RlbCgpOworCQkJY2FzZSBNdWx0aXBvcHVsYXRpb25QYWNrYWdlLk1VTFRJX1BPUFVMQVRJT05fU0VJUl9ESVNFQVNFX01PREVMOiByZXR1cm4gY3JlYXRlTXVsdGlQb3B1bGF0aW9uU0VJUkRpc2Vhc2VNb2RlbCgpOworCQkJY2FzZSBNdWx0aXBvcHVsYXRpb25QYWNrYWdlLk1VTFRJX1BPUFVMQVRJT05fU0VBU09OQUxfRElTRUFTRV9NT0RFTDogcmV0dXJuIGNyZWF0ZU11bHRpUG9wdWxhdGlvblNlYXNvbmFsRGlzZWFzZU1vZGVsKCk7CisJCQlkZWZhdWx0OgorCQkJCXRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIlRoZSBjbGFzcyAnIiArIGVDbGFzcy5nZXROYW1lKCkgKyAiJyBpcyBub3QgYSB2YWxpZCBjbGFzc2lmaWVyIik7CisJCX0KKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgTXVsdGlQb3B1bGF0aW9uU0lEaXNlYXNlTW9kZWwgY3JlYXRlTXVsdGlQb3B1bGF0aW9uU0lEaXNlYXNlTW9kZWwoKSB7CisJCU11bHRpUG9wdWxhdGlvblNJRGlzZWFzZU1vZGVsSW1wbCBtdWx0aVBvcHVsYXRpb25TSURpc2Vhc2VNb2RlbCA9IG5ldyBNdWx0aVBvcHVsYXRpb25TSURpc2Vhc2VNb2RlbEltcGwoKTsKKwkJcmV0dXJuIG11bHRpUG9wdWxhdGlvblNJRGlzZWFzZU1vZGVsOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBNdWx0aVBvcHVsYXRpb25TSVJEaXNlYXNlTW9kZWwgY3JlYXRlTXVsdGlQb3B1bGF0aW9uU0lSRGlzZWFzZU1vZGVsKCkgeworCQlNdWx0aVBvcHVsYXRpb25TSVJEaXNlYXNlTW9kZWxJbXBsIG11bHRpUG9wdWxhdGlvblNJUkRpc2Vhc2VNb2RlbCA9IG5ldyBNdWx0aVBvcHVsYXRpb25TSVJEaXNlYXNlTW9kZWxJbXBsKCk7CisJCXJldHVybiBtdWx0aVBvcHVsYXRpb25TSVJEaXNlYXNlTW9kZWw7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIE11bHRpUG9wdWxhdGlvblNFSVJEaXNlYXNlTW9kZWwgY3JlYXRlTXVsdGlQb3B1bGF0aW9uU0VJUkRpc2Vhc2VNb2RlbCgpIHsKKwkJTXVsdGlQb3B1bGF0aW9uU0VJUkRpc2Vhc2VNb2RlbEltcGwgbXVsdGlQb3B1bGF0aW9uU0VJUkRpc2Vhc2VNb2RlbCA9IG5ldyBNdWx0aVBvcHVsYXRpb25TRUlSRGlzZWFzZU1vZGVsSW1wbCgpOworCQlyZXR1cm4gbXVsdGlQb3B1bGF0aW9uU0VJUkRpc2Vhc2VNb2RlbDsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgTXVsdGlQb3B1bGF0aW9uU2Vhc29uYWxEaXNlYXNlTW9kZWwgY3JlYXRlTXVsdGlQb3B1bGF0aW9uU2Vhc29uYWxEaXNlYXNlTW9kZWwoKSB7CisJCU11bHRpUG9wdWxhdGlvblNlYXNvbmFsRGlzZWFzZU1vZGVsSW1wbCBtdWx0aVBvcHVsYXRpb25TZWFzb25hbERpc2Vhc2VNb2RlbCA9IG5ldyBNdWx0aVBvcHVsYXRpb25TZWFzb25hbERpc2Vhc2VNb2RlbEltcGwoKTsKKwkJcmV0dXJuIG11bHRpUG9wdWxhdGlvblNlYXNvbmFsRGlzZWFzZU1vZGVsOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBNdWx0aXBvcHVsYXRpb25QYWNrYWdlIGdldE11bHRpcG9wdWxhdGlvblBhY2thZ2UoKSB7CisJCXJldHVybiAoTXVsdGlwb3B1bGF0aW9uUGFja2FnZSlnZXRFUGFja2FnZSgpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGRlcHJlY2F0ZWQKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQERlcHJlY2F0ZWQKKwlwdWJsaWMgc3RhdGljIE11bHRpcG9wdWxhdGlvblBhY2thZ2UgZ2V0UGFja2FnZSgpIHsKKwkJcmV0dXJuIE11bHRpcG9wdWxhdGlvblBhY2thZ2UuZUlOU1RBTkNFOworCX0KKworfSAvL011bHRpcG9wdWxhdGlvbkZhY3RvcnlJbXBsCmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5tdWx0aXBvcHVsYXRpb24vc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9tdWx0aXBvcHVsYXRpb24vaW1wbC9NdWx0aXBvcHVsYXRpb25QYWNrYWdlSW1wbC5qYXZhIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMubXVsdGlwb3B1bGF0aW9uL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvbXVsdGlwb3B1bGF0aW9uL2ltcGwvTXVsdGlwb3B1bGF0aW9uUGFja2FnZUltcGwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMWUyZThjCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMubXVsdGlwb3B1bGF0aW9uL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvbXVsdGlwb3B1bGF0aW9uL2ltcGwvTXVsdGlwb3B1bGF0aW9uUGFja2FnZUltcGwuamF2YQpAQCAtMCwwICsxLDM0MCBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMubXVsdGlwb3B1bGF0aW9uLmltcGw7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTAgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQXR0cmlidXRlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FUmVmZXJlbmNlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FY29yZVBhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLmltcGwuRVBhY2thZ2VJbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uQ29tbW9uUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubG9nZ2VyLkxvZ2dlclBhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLm11bHRpcG9wdWxhdGlvbi5NdWx0aVBvcHVsYXRpb25TRUlSRGlzZWFzZU1vZGVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5tdWx0aXBvcHVsYXRpb24uTXVsdGlQb3B1bGF0aW9uU0lEaXNlYXNlTW9kZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLm11bHRpcG9wdWxhdGlvbi5NdWx0aVBvcHVsYXRpb25TSVJEaXNlYXNlTW9kZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLm11bHRpcG9wdWxhdGlvbi5NdWx0aVBvcHVsYXRpb25TZWFzb25hbERpc2Vhc2VNb2RlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMubXVsdGlwb3B1bGF0aW9uLk11bHRpcG9wdWxhdGlvbkZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLm11bHRpcG9wdWxhdGlvbi5NdWx0aXBvcHVsYXRpb25QYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZFBhY2thZ2U7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIEFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBtb2RlbCA8Yj5QYWNrYWdlPC9iPi4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgTXVsdGlwb3B1bGF0aW9uUGFja2FnZUltcGwgZXh0ZW5kcyBFUGFja2FnZUltcGwgaW1wbGVtZW50cyBNdWx0aXBvcHVsYXRpb25QYWNrYWdlIHsKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcml2YXRlIEVDbGFzcyBtdWx0aVBvcHVsYXRpb25TSURpc2Vhc2VNb2RlbEVDbGFzcyA9IG51bGw7CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcml2YXRlIEVDbGFzcyBtdWx0aVBvcHVsYXRpb25TSVJEaXNlYXNlTW9kZWxFQ2xhc3MgPSBudWxsOworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByaXZhdGUgRUNsYXNzIG11bHRpUG9wdWxhdGlvblNFSVJEaXNlYXNlTW9kZWxFQ2xhc3MgPSBudWxsOworCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJpdmF0ZSBFQ2xhc3MgbXVsdGlQb3B1bGF0aW9uU2Vhc29uYWxEaXNlYXNlTW9kZWxFQ2xhc3MgPSBudWxsOworCisJLyoqCisJICogQ3JlYXRlcyBhbiBpbnN0YW5jZSBvZiB0aGUgbW9kZWwgPGI+UGFja2FnZTwvYj4sIHJlZ2lzdGVyZWQgd2l0aAorCSAqIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRVBhY2thZ2UuUmVnaXN0cnkgRVBhY2thZ2UuUmVnaXN0cnl9IGJ5IHRoZSBwYWNrYWdlCisJICogcGFja2FnZSBVUkkgdmFsdWUuCisJICogPHA+Tm90ZTogdGhlIGNvcnJlY3Qgd2F5IHRvIGNyZWF0ZSB0aGUgcGFja2FnZSBpcyB2aWEgdGhlIHN0YXRpYworCSAqIGZhY3RvcnkgbWV0aG9kIHtAbGluayAjaW5pdCBpbml0KCl9LCB3aGljaCBhbHNvIHBlcmZvcm1zCisJICogaW5pdGlhbGl6YXRpb24gb2YgdGhlIHBhY2thZ2UsIG9yIHJldHVybnMgdGhlIHJlZ2lzdGVyZWQgcGFja2FnZSwKKwkgKiBpZiBvbmUgYWxyZWFkeSBleGlzdHMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FUGFja2FnZS5SZWdpc3RyeQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLm11bHRpcG9wdWxhdGlvbi5NdWx0aXBvcHVsYXRpb25QYWNrYWdlI2VOU19VUkkKKwkgKiBAc2VlICNpbml0KCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJpdmF0ZSBNdWx0aXBvcHVsYXRpb25QYWNrYWdlSW1wbCgpIHsKKwkJc3VwZXIoZU5TX1VSSSwgTXVsdGlwb3B1bGF0aW9uRmFjdG9yeS5lSU5TVEFOQ0UpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByaXZhdGUgc3RhdGljIGJvb2xlYW4gaXNJbml0ZWQgPSBmYWxzZTsKKworCS8qKgorCSAqIENyZWF0ZXMsIHJlZ2lzdGVycywgYW5kIGluaXRpYWxpemVzIHRoZSA8Yj5QYWNrYWdlPC9iPiBmb3IgdGhpcyBtb2RlbCwgYW5kIGZvciBhbnkgb3RoZXJzIHVwb24gd2hpY2ggaXQgZGVwZW5kcy4KKwkgKiAKKwkgKiA8cD5UaGlzIG1ldGhvZCBpcyB1c2VkIHRvIGluaXRpYWxpemUge0BsaW5rIE11bHRpcG9wdWxhdGlvblBhY2thZ2UjZUlOU1RBTkNFfSB3aGVuIHRoYXQgZmllbGQgaXMgYWNjZXNzZWQuCisJICogQ2xpZW50cyBzaG91bGQgbm90IGludm9rZSBpdCBkaXJlY3RseS4gSW5zdGVhZCwgdGhleSBzaG91bGQgc2ltcGx5IGFjY2VzcyB0aGF0IGZpZWxkIHRvIG9idGFpbiB0aGUgcGFja2FnZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI2VOU19VUkkKKwkgKiBAc2VlICNjcmVhdGVQYWNrYWdlQ29udGVudHMoKQorCSAqIEBzZWUgI2luaXRpYWxpemVQYWNrYWdlQ29udGVudHMoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgc3RhdGljIE11bHRpcG9wdWxhdGlvblBhY2thZ2UgaW5pdCgpIHsKKwkJaWYgKGlzSW5pdGVkKSByZXR1cm4gKE11bHRpcG9wdWxhdGlvblBhY2thZ2UpRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RVBhY2thZ2UoTXVsdGlwb3B1bGF0aW9uUGFja2FnZS5lTlNfVVJJKTsKKworCQkvLyBPYnRhaW4gb3IgY3JlYXRlIGFuZCByZWdpc3RlciBwYWNrYWdlCisJCU11bHRpcG9wdWxhdGlvblBhY2thZ2VJbXBsIHRoZU11bHRpcG9wdWxhdGlvblBhY2thZ2UgPSAoTXVsdGlwb3B1bGF0aW9uUGFja2FnZUltcGwpKEVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldChlTlNfVVJJKSBpbnN0YW5jZW9mIE11bHRpcG9wdWxhdGlvblBhY2thZ2VJbXBsID8gRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0KGVOU19VUkkpIDogbmV3IE11bHRpcG9wdWxhdGlvblBhY2thZ2VJbXBsKCkpOworCisJCWlzSW5pdGVkID0gdHJ1ZTsKKworCQkvLyBJbml0aWFsaXplIHNpbXBsZSBkZXBlbmRlbmNpZXMKKwkJU3RhbmRhcmRQYWNrYWdlLmVJTlNUQU5DRS5lQ2xhc3MoKTsKKwkJTG9nZ2VyUGFja2FnZS5lSU5TVEFOQ0UuZUNsYXNzKCk7CisKKwkJLy8gQ3JlYXRlIHBhY2thZ2UgbWV0YS1kYXRhIG9iamVjdHMKKwkJdGhlTXVsdGlwb3B1bGF0aW9uUGFja2FnZS5jcmVhdGVQYWNrYWdlQ29udGVudHMoKTsKKworCQkvLyBJbml0aWFsaXplIGNyZWF0ZWQgbWV0YS1kYXRhCisJCXRoZU11bHRpcG9wdWxhdGlvblBhY2thZ2UuaW5pdGlhbGl6ZVBhY2thZ2VDb250ZW50cygpOworCisJCS8vIE1hcmsgbWV0YS1kYXRhIHRvIGluZGljYXRlIGl0IGNhbid0IGJlIGNoYW5nZWQKKwkJdGhlTXVsdGlwb3B1bGF0aW9uUGFja2FnZS5mcmVlemUoKTsKKworICAKKwkJLy8gVXBkYXRlIHRoZSByZWdpc3RyeSBhbmQgcmV0dXJuIHRoZSBwYWNrYWdlCisJCUVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLnB1dChNdWx0aXBvcHVsYXRpb25QYWNrYWdlLmVOU19VUkksIHRoZU11bHRpcG9wdWxhdGlvblBhY2thZ2UpOworCQlyZXR1cm4gdGhlTXVsdGlwb3B1bGF0aW9uUGFja2FnZTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUNsYXNzIGdldE11bHRpUG9wdWxhdGlvblNJRGlzZWFzZU1vZGVsKCkgeworCQlyZXR1cm4gbXVsdGlQb3B1bGF0aW9uU0lEaXNlYXNlTW9kZWxFQ2xhc3M7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVSZWZlcmVuY2UgZ2V0TXVsdGlQb3B1bGF0aW9uU0lEaXNlYXNlTW9kZWxfVHJhbnNtaXNzaW9uUmF0ZSgpIHsKKwkJcmV0dXJuIChFUmVmZXJlbmNlKW11bHRpUG9wdWxhdGlvblNJRGlzZWFzZU1vZGVsRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVSZWZlcmVuY2UgZ2V0TXVsdGlQb3B1bGF0aW9uU0lEaXNlYXNlTW9kZWxfUmVjb3ZlcnlSYXRlKCkgeworCQlyZXR1cm4gKEVSZWZlcmVuY2UpbXVsdGlQb3B1bGF0aW9uU0lEaXNlYXNlTW9kZWxFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgyKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRVJlZmVyZW5jZSBnZXRNdWx0aVBvcHVsYXRpb25TSURpc2Vhc2VNb2RlbF9JbmZlY3Rpb3VzTW9ydGFsaXR5UmF0ZSgpIHsKKwkJcmV0dXJuIChFUmVmZXJlbmNlKW11bHRpUG9wdWxhdGlvblNJRGlzZWFzZU1vZGVsRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMyk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVDbGFzcyBnZXRNdWx0aVBvcHVsYXRpb25TSVJEaXNlYXNlTW9kZWwoKSB7CisJCXJldHVybiBtdWx0aVBvcHVsYXRpb25TSVJEaXNlYXNlTW9kZWxFQ2xhc3M7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVSZWZlcmVuY2UgZ2V0TXVsdGlQb3B1bGF0aW9uU0lSRGlzZWFzZU1vZGVsX0ltbXVuaXR5TG9zc1JhdGUoKSB7CisJCXJldHVybiAoRVJlZmVyZW5jZSltdWx0aVBvcHVsYXRpb25TSVJEaXNlYXNlTW9kZWxFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgwKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUNsYXNzIGdldE11bHRpUG9wdWxhdGlvblNFSVJEaXNlYXNlTW9kZWwoKSB7CisJCXJldHVybiBtdWx0aVBvcHVsYXRpb25TRUlSRGlzZWFzZU1vZGVsRUNsYXNzOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFUmVmZXJlbmNlIGdldE11bHRpUG9wdWxhdGlvblNFSVJEaXNlYXNlTW9kZWxfSW5jdWJhdGlvblJhdGUoKSB7CisJCXJldHVybiAoRVJlZmVyZW5jZSltdWx0aVBvcHVsYXRpb25TRUlSRGlzZWFzZU1vZGVsRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVDbGFzcyBnZXRNdWx0aVBvcHVsYXRpb25TZWFzb25hbERpc2Vhc2VNb2RlbCgpIHsKKwkJcmV0dXJuIG11bHRpUG9wdWxhdGlvblNlYXNvbmFsRGlzZWFzZU1vZGVsRUNsYXNzOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFUmVmZXJlbmNlIGdldE11bHRpUG9wdWxhdGlvblNlYXNvbmFsRGlzZWFzZU1vZGVsX01vZHVsYXRpb25Qb2ludHMoKSB7CisJCXJldHVybiAoRVJlZmVyZW5jZSltdWx0aVBvcHVsYXRpb25TZWFzb25hbERpc2Vhc2VNb2RlbEVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDApOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQXR0cmlidXRlIGdldE11bHRpUG9wdWxhdGlvblNlYXNvbmFsRGlzZWFzZU1vZGVsX1VzZVNwbGluZUludGVycG9sYXRpb24oKSB7CisJCXJldHVybiAoRUF0dHJpYnV0ZSltdWx0aVBvcHVsYXRpb25TZWFzb25hbERpc2Vhc2VNb2RlbEVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDEpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFUmVmZXJlbmNlIGdldE11bHRpUG9wdWxhdGlvblNJRGlzZWFzZU1vZGVsX1BvcHVsYXRpb25Hcm91cHMoKSB7CisJCXJldHVybiAoRVJlZmVyZW5jZSltdWx0aVBvcHVsYXRpb25TSURpc2Vhc2VNb2RlbEVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDApOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBNdWx0aXBvcHVsYXRpb25GYWN0b3J5IGdldE11bHRpcG9wdWxhdGlvbkZhY3RvcnkoKSB7CisJCXJldHVybiAoTXVsdGlwb3B1bGF0aW9uRmFjdG9yeSlnZXRFRmFjdG9yeUluc3RhbmNlKCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJpdmF0ZSBib29sZWFuIGlzQ3JlYXRlZCA9IGZhbHNlOworCisJLyoqCisJICogQ3JlYXRlcyB0aGUgbWV0YS1tb2RlbCBvYmplY3RzIGZvciB0aGUgcGFja2FnZS4gIFRoaXMgbWV0aG9kIGlzCisJICogZ3VhcmRlZCB0byBoYXZlIG5vIGFmZmVjdCBvbiBhbnkgaW52b2NhdGlvbiBidXQgaXRzIGZpcnN0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIGNyZWF0ZVBhY2thZ2VDb250ZW50cygpIHsKKwkJaWYgKGlzQ3JlYXRlZCkgcmV0dXJuOworCQlpc0NyZWF0ZWQgPSB0cnVlOworCisJCS8vIENyZWF0ZSBjbGFzc2VzIGFuZCB0aGVpciBmZWF0dXJlcworCQltdWx0aVBvcHVsYXRpb25TSURpc2Vhc2VNb2RlbEVDbGFzcyA9IGNyZWF0ZUVDbGFzcyhNVUxUSV9QT1BVTEFUSU9OX1NJX0RJU0VBU0VfTU9ERUwpOworCQljcmVhdGVFUmVmZXJlbmNlKG11bHRpUG9wdWxhdGlvblNJRGlzZWFzZU1vZGVsRUNsYXNzLCBNVUxUSV9QT1BVTEFUSU9OX1NJX0RJU0VBU0VfTU9ERUxfX1BPUFVMQVRJT05fR1JPVVBTKTsKKwkJY3JlYXRlRVJlZmVyZW5jZShtdWx0aVBvcHVsYXRpb25TSURpc2Vhc2VNb2RlbEVDbGFzcywgTVVMVElfUE9QVUxBVElPTl9TSV9ESVNFQVNFX01PREVMX19UUkFOU01JU1NJT05fUkFURSk7CisJCWNyZWF0ZUVSZWZlcmVuY2UobXVsdGlQb3B1bGF0aW9uU0lEaXNlYXNlTW9kZWxFQ2xhc3MsIE1VTFRJX1BPUFVMQVRJT05fU0lfRElTRUFTRV9NT0RFTF9fUkVDT1ZFUllfUkFURSk7CisJCWNyZWF0ZUVSZWZlcmVuY2UobXVsdGlQb3B1bGF0aW9uU0lEaXNlYXNlTW9kZWxFQ2xhc3MsIE1VTFRJX1BPUFVMQVRJT05fU0lfRElTRUFTRV9NT0RFTF9fSU5GRUNUSU9VU19NT1JUQUxJVFlfUkFURSk7CisKKwkJbXVsdGlQb3B1bGF0aW9uU0lSRGlzZWFzZU1vZGVsRUNsYXNzID0gY3JlYXRlRUNsYXNzKE1VTFRJX1BPUFVMQVRJT05fU0lSX0RJU0VBU0VfTU9ERUwpOworCQljcmVhdGVFUmVmZXJlbmNlKG11bHRpUG9wdWxhdGlvblNJUkRpc2Vhc2VNb2RlbEVDbGFzcywgTVVMVElfUE9QVUxBVElPTl9TSVJfRElTRUFTRV9NT0RFTF9fSU1NVU5JVFlfTE9TU19SQVRFKTsKKworCQltdWx0aVBvcHVsYXRpb25TRUlSRGlzZWFzZU1vZGVsRUNsYXNzID0gY3JlYXRlRUNsYXNzKE1VTFRJX1BPUFVMQVRJT05fU0VJUl9ESVNFQVNFX01PREVMKTsKKwkJY3JlYXRlRVJlZmVyZW5jZShtdWx0aVBvcHVsYXRpb25TRUlSRGlzZWFzZU1vZGVsRUNsYXNzLCBNVUxUSV9QT1BVTEFUSU9OX1NFSVJfRElTRUFTRV9NT0RFTF9fSU5DVUJBVElPTl9SQVRFKTsKKworCQltdWx0aVBvcHVsYXRpb25TZWFzb25hbERpc2Vhc2VNb2RlbEVDbGFzcyA9IGNyZWF0ZUVDbGFzcyhNVUxUSV9QT1BVTEFUSU9OX1NFQVNPTkFMX0RJU0VBU0VfTU9ERUwpOworCQljcmVhdGVFUmVmZXJlbmNlKG11bHRpUG9wdWxhdGlvblNlYXNvbmFsRGlzZWFzZU1vZGVsRUNsYXNzLCBNVUxUSV9QT1BVTEFUSU9OX1NFQVNPTkFMX0RJU0VBU0VfTU9ERUxfX01PRFVMQVRJT05fUE9JTlRTKTsKKwkJY3JlYXRlRUF0dHJpYnV0ZShtdWx0aVBvcHVsYXRpb25TZWFzb25hbERpc2Vhc2VNb2RlbEVDbGFzcywgTVVMVElfUE9QVUxBVElPTl9TRUFTT05BTF9ESVNFQVNFX01PREVMX19VU0VfU1BMSU5FX0lOVEVSUE9MQVRJT04pOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByaXZhdGUgYm9vbGVhbiBpc0luaXRpYWxpemVkID0gZmFsc2U7CisKKwkvKioKKwkgKiBDb21wbGV0ZSB0aGUgaW5pdGlhbGl6YXRpb24gb2YgdGhlIHBhY2thZ2UgYW5kIGl0cyBtZXRhLW1vZGVsLiAgVGhpcworCSAqIG1ldGhvZCBpcyBndWFyZGVkIHRvIGhhdmUgbm8gYWZmZWN0IG9uIGFueSBpbnZvY2F0aW9uIGJ1dCBpdHMgZmlyc3QuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgaW5pdGlhbGl6ZVBhY2thZ2VDb250ZW50cygpIHsKKwkJaWYgKGlzSW5pdGlhbGl6ZWQpIHJldHVybjsKKwkJaXNJbml0aWFsaXplZCA9IHRydWU7CisKKwkJLy8gSW5pdGlhbGl6ZSBwYWNrYWdlCisJCXNldE5hbWUoZU5BTUUpOworCQlzZXROc1ByZWZpeChlTlNfUFJFRklYKTsKKwkJc2V0TnNVUkkoZU5TX1VSSSk7CisKKwkJLy8gT2J0YWluIG90aGVyIGRlcGVuZGVudCBwYWNrYWdlcworCQlTdGFuZGFyZFBhY2thZ2UgdGhlU3RhbmRhcmRQYWNrYWdlID0gKFN0YW5kYXJkUGFja2FnZSlFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShTdGFuZGFyZFBhY2thZ2UuZU5TX1VSSSk7CisJCUNvbW1vblBhY2thZ2UgdGhlQ29tbW9uUGFja2FnZSA9IChDb21tb25QYWNrYWdlKUVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVQYWNrYWdlKENvbW1vblBhY2thZ2UuZU5TX1VSSSk7CisJCUVjb3JlUGFja2FnZSB0aGVFY29yZVBhY2thZ2UgPSAoRWNvcmVQYWNrYWdlKUVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVQYWNrYWdlKEVjb3JlUGFja2FnZS5lTlNfVVJJKTsKKworCQkvLyBDcmVhdGUgdHlwZSBwYXJhbWV0ZXJzCisKKwkJLy8gU2V0IGJvdW5kcyBmb3IgdHlwZSBwYXJhbWV0ZXJzCisKKwkJLy8gQWRkIHN1cGVydHlwZXMgdG8gY2xhc3NlcworCQltdWx0aVBvcHVsYXRpb25TSURpc2Vhc2VNb2RlbEVDbGFzcy5nZXRFU3VwZXJUeXBlcygpLmFkZCh0aGVTdGFuZGFyZFBhY2thZ2UuZ2V0U3RhbmRhcmREaXNlYXNlTW9kZWwoKSk7CisJCW11bHRpUG9wdWxhdGlvblNJUkRpc2Vhc2VNb2RlbEVDbGFzcy5nZXRFU3VwZXJUeXBlcygpLmFkZCh0aGlzLmdldE11bHRpUG9wdWxhdGlvblNJRGlzZWFzZU1vZGVsKCkpOworCQltdWx0aVBvcHVsYXRpb25TRUlSRGlzZWFzZU1vZGVsRUNsYXNzLmdldEVTdXBlclR5cGVzKCkuYWRkKHRoaXMuZ2V0TXVsdGlQb3B1bGF0aW9uU0lSRGlzZWFzZU1vZGVsKCkpOworCQltdWx0aVBvcHVsYXRpb25TZWFzb25hbERpc2Vhc2VNb2RlbEVDbGFzcy5nZXRFU3VwZXJUeXBlcygpLmFkZCh0aGlzLmdldE11bHRpUG9wdWxhdGlvblNFSVJEaXNlYXNlTW9kZWwoKSk7CisKKwkJLy8gSW5pdGlhbGl6ZSBjbGFzc2VzIGFuZCBmZWF0dXJlczsgYWRkIG9wZXJhdGlvbnMgYW5kIHBhcmFtZXRlcnMKKwkJaW5pdEVDbGFzcyhtdWx0aVBvcHVsYXRpb25TSURpc2Vhc2VNb2RlbEVDbGFzcywgTXVsdGlQb3B1bGF0aW9uU0lEaXNlYXNlTW9kZWwuY2xhc3MsICJNdWx0aVBvcHVsYXRpb25TSURpc2Vhc2VNb2RlbCIsICFJU19BQlNUUkFDVCwgIUlTX0lOVEVSRkFDRSwgSVNfR0VORVJBVEVEX0lOU1RBTkNFX0NMQVNTKTsKKwkJaW5pdEVSZWZlcmVuY2UoZ2V0TXVsdGlQb3B1bGF0aW9uU0lEaXNlYXNlTW9kZWxfUG9wdWxhdGlvbkdyb3VwcygpLCB0aGVDb21tb25QYWNrYWdlLmdldFN0cmluZ1ZhbHVlTGlzdCgpLCBudWxsLCAicG9wdWxhdGlvbkdyb3VwcyIsIG51bGwsIDEsIDEsIE11bHRpUG9wdWxhdGlvblNJRGlzZWFzZU1vZGVsLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsIElTX0NPTVBPU0lURSwgIUlTX1JFU09MVkVfUFJPWElFUywgIUlTX1VOU0VUVEFCTEUsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOworCQlpbml0RVJlZmVyZW5jZShnZXRNdWx0aVBvcHVsYXRpb25TSURpc2Vhc2VNb2RlbF9UcmFuc21pc3Npb25SYXRlKCksIHRoZUNvbW1vblBhY2thZ2UuZ2V0RG91YmxlVmFsdWVNYXRyaXgoKSwgbnVsbCwgInRyYW5zbWlzc2lvblJhdGUiLCBudWxsLCAxLCAxLCBNdWx0aVBvcHVsYXRpb25TSURpc2Vhc2VNb2RlbC5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCBJU19DT01QT1NJVEUsICFJU19SRVNPTFZFX1BST1hJRVMsICFJU19VTlNFVFRBQkxFLCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsKKwkJaW5pdEVSZWZlcmVuY2UoZ2V0TXVsdGlQb3B1bGF0aW9uU0lEaXNlYXNlTW9kZWxfUmVjb3ZlcnlSYXRlKCksIHRoZUNvbW1vblBhY2thZ2UuZ2V0RG91YmxlVmFsdWVMaXN0KCksIG51bGwsICJyZWNvdmVyeVJhdGUiLCBudWxsLCAxLCAxLCBNdWx0aVBvcHVsYXRpb25TSURpc2Vhc2VNb2RlbC5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCBJU19DT01QT1NJVEUsICFJU19SRVNPTFZFX1BST1hJRVMsICFJU19VTlNFVFRBQkxFLCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsKKwkJaW5pdEVSZWZlcmVuY2UoZ2V0TXVsdGlQb3B1bGF0aW9uU0lEaXNlYXNlTW9kZWxfSW5mZWN0aW91c01vcnRhbGl0eVJhdGUoKSwgdGhlQ29tbW9uUGFja2FnZS5nZXREb3VibGVWYWx1ZUxpc3QoKSwgbnVsbCwgImluZmVjdGlvdXNNb3J0YWxpdHlSYXRlIiwgbnVsbCwgMSwgMSwgTXVsdGlQb3B1bGF0aW9uU0lEaXNlYXNlTW9kZWwuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgSVNfQ09NUE9TSVRFLCAhSVNfUkVTT0xWRV9QUk9YSUVTLCAhSVNfVU5TRVRUQUJMRSwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7CisKKwkJaW5pdEVDbGFzcyhtdWx0aVBvcHVsYXRpb25TSVJEaXNlYXNlTW9kZWxFQ2xhc3MsIE11bHRpUG9wdWxhdGlvblNJUkRpc2Vhc2VNb2RlbC5jbGFzcywgIk11bHRpUG9wdWxhdGlvblNJUkRpc2Vhc2VNb2RlbCIsICFJU19BQlNUUkFDVCwgIUlTX0lOVEVSRkFDRSwgSVNfR0VORVJBVEVEX0lOU1RBTkNFX0NMQVNTKTsKKwkJaW5pdEVSZWZlcmVuY2UoZ2V0TXVsdGlQb3B1bGF0aW9uU0lSRGlzZWFzZU1vZGVsX0ltbXVuaXR5TG9zc1JhdGUoKSwgdGhlQ29tbW9uUGFja2FnZS5nZXREb3VibGVWYWx1ZUxpc3QoKSwgbnVsbCwgImltbXVuaXR5TG9zc1JhdGUiLCBudWxsLCAxLCAxLCBNdWx0aVBvcHVsYXRpb25TSVJEaXNlYXNlTW9kZWwuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgSVNfQ09NUE9TSVRFLCAhSVNfUkVTT0xWRV9QUk9YSUVTLCAhSVNfVU5TRVRUQUJMRSwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7CisKKwkJaW5pdEVDbGFzcyhtdWx0aVBvcHVsYXRpb25TRUlSRGlzZWFzZU1vZGVsRUNsYXNzLCBNdWx0aVBvcHVsYXRpb25TRUlSRGlzZWFzZU1vZGVsLmNsYXNzLCAiTXVsdGlQb3B1bGF0aW9uU0VJUkRpc2Vhc2VNb2RlbCIsICFJU19BQlNUUkFDVCwgIUlTX0lOVEVSRkFDRSwgSVNfR0VORVJBVEVEX0lOU1RBTkNFX0NMQVNTKTsKKwkJaW5pdEVSZWZlcmVuY2UoZ2V0TXVsdGlQb3B1bGF0aW9uU0VJUkRpc2Vhc2VNb2RlbF9JbmN1YmF0aW9uUmF0ZSgpLCB0aGVDb21tb25QYWNrYWdlLmdldERvdWJsZVZhbHVlTGlzdCgpLCBudWxsLCAiaW5jdWJhdGlvblJhdGUiLCBudWxsLCAxLCAxLCBNdWx0aVBvcHVsYXRpb25TRUlSRGlzZWFzZU1vZGVsLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsIElTX0NPTVBPU0lURSwgIUlTX1JFU09MVkVfUFJPWElFUywgIUlTX1VOU0VUVEFCTEUsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOworCisJCWluaXRFQ2xhc3MobXVsdGlQb3B1bGF0aW9uU2Vhc29uYWxEaXNlYXNlTW9kZWxFQ2xhc3MsIE11bHRpUG9wdWxhdGlvblNlYXNvbmFsRGlzZWFzZU1vZGVsLmNsYXNzLCAiTXVsdGlQb3B1bGF0aW9uU2Vhc29uYWxEaXNlYXNlTW9kZWwiLCAhSVNfQUJTVFJBQ1QsICFJU19JTlRFUkZBQ0UsIElTX0dFTkVSQVRFRF9JTlNUQU5DRV9DTEFTUyk7CisJCWluaXRFUmVmZXJlbmNlKGdldE11bHRpUG9wdWxhdGlvblNlYXNvbmFsRGlzZWFzZU1vZGVsX01vZHVsYXRpb25Qb2ludHMoKSwgdGhlQ29tbW9uUGFja2FnZS5nZXREb3VibGVWYWx1ZU1hdHJpeCgpLCBudWxsLCAibW9kdWxhdGlvblBvaW50cyIsIG51bGwsIDEsIDEsIE11bHRpUG9wdWxhdGlvblNlYXNvbmFsRGlzZWFzZU1vZGVsLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsIElTX0NPTVBPU0lURSwgIUlTX1JFU09MVkVfUFJPWElFUywgIUlTX1VOU0VUVEFCTEUsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOworCQlpbml0RUF0dHJpYnV0ZShnZXRNdWx0aVBvcHVsYXRpb25TZWFzb25hbERpc2Vhc2VNb2RlbF9Vc2VTcGxpbmVJbnRlcnBvbGF0aW9uKCksIHRoZUVjb3JlUGFja2FnZS5nZXRFQm9vbGVhbigpLCAidXNlU3BsaW5lSW50ZXJwb2xhdGlvbiIsIG51bGwsIDAsIDEsIE11bHRpUG9wdWxhdGlvblNlYXNvbmFsRGlzZWFzZU1vZGVsLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOworCisJCS8vIENyZWF0ZSByZXNvdXJjZQorCQljcmVhdGVSZXNvdXJjZShlTlNfVVJJKTsKKwl9CisKK30gLy9NdWx0aXBvcHVsYXRpb25QYWNrYWdlSW1wbApkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMubXVsdGlwb3B1bGF0aW9uL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvbXVsdGlwb3B1bGF0aW9uL3Byb3ZpZGVyL011bHRpUG9wdWxhdGlvblNFSVJEaXNlYXNlTW9kZWxJdGVtUHJvdmlkZXIuamF2YSBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLm11bHRpcG9wdWxhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL211bHRpcG9wdWxhdGlvbi9wcm92aWRlci9NdWx0aVBvcHVsYXRpb25TRUlSRGlzZWFzZU1vZGVsSXRlbVByb3ZpZGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjhjYjIxZQotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLm11bHRpcG9wdWxhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL211bHRpcG9wdWxhdGlvbi9wcm92aWRlci9NdWx0aVBvcHVsYXRpb25TRUlSRGlzZWFzZU1vZGVsSXRlbVByb3ZpZGVyLmphdmEKQEAgLTAsMCArMSwyMDcgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDksMjAxMCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5tdWx0aXBvcHVsYXRpb24ucHJvdmlkZXI7CisKKworaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOworaW1wb3J0IGphdmEudXRpbC5MaXN0OworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FU3RydWN0dXJhbEZlYXR1cmU7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JRWRpdGluZ0RvbWFpbkl0ZW1Qcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbUxhYmVsUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1Qcm9wZXJ0eVNvdXJjZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JU3RydWN0dXJlZEl0ZW1Db250ZW50UHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVRyZWVJdGVtQ29udGVudFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLlZpZXdlck5vdGlmaWNhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLkNvbW1vbkZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLm11bHRpcG9wdWxhdGlvbi5NdWx0aVBvcHVsYXRpb25TRUlSRGlzZWFzZU1vZGVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5tdWx0aXBvcHVsYXRpb24uTXVsdGlwb3B1bGF0aW9uUGFja2FnZTsKKworLyoqCisgKiBUaGlzIGlzIHRoZSBpdGVtIHByb3ZpZGVyIGFkYXB0ZXIgZm9yIGEge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5tdWx0aXBvcHVsYXRpb24uTXVsdGlQb3B1bGF0aW9uU0VJUkRpc2Vhc2VNb2RlbH0gb2JqZWN0LgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgTXVsdGlQb3B1bGF0aW9uU0VJUkRpc2Vhc2VNb2RlbEl0ZW1Qcm92aWRlcgorCWV4dGVuZHMgTXVsdGlQb3B1bGF0aW9uU0lSRGlzZWFzZU1vZGVsSXRlbVByb3ZpZGVyCisJaW1wbGVtZW50cworCQlJRWRpdGluZ0RvbWFpbkl0ZW1Qcm92aWRlciwKKwkJSVN0cnVjdHVyZWRJdGVtQ29udGVudFByb3ZpZGVyLAorCQlJVHJlZUl0ZW1Db250ZW50UHJvdmlkZXIsCisJCUlJdGVtTGFiZWxQcm92aWRlciwKKwkJSUl0ZW1Qcm9wZXJ0eVNvdXJjZSB7CisJLyoqCisJICogVGhpcyBjb25zdHJ1Y3RzIGFuIGluc3RhbmNlIGZyb20gYSBmYWN0b3J5IGFuZCBhIG5vdGlmaWVyLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBNdWx0aVBvcHVsYXRpb25TRUlSRGlzZWFzZU1vZGVsSXRlbVByb3ZpZGVyKEFkYXB0ZXJGYWN0b3J5IGFkYXB0ZXJGYWN0b3J5KSB7CisJCXN1cGVyKGFkYXB0ZXJGYWN0b3J5KTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgdGhlIHByb3BlcnR5IGRlc2NyaXB0b3JzIGZvciB0aGUgYWRhcHRlZCBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgTGlzdDxJSXRlbVByb3BlcnR5RGVzY3JpcHRvcj4gZ2V0UHJvcGVydHlEZXNjcmlwdG9ycyhPYmplY3Qgb2JqZWN0KSB7CisJCWlmIChpdGVtUHJvcGVydHlEZXNjcmlwdG9ycyA9PSBudWxsKSB7CisJCQlzdXBlci5nZXRQcm9wZXJ0eURlc2NyaXB0b3JzKG9iamVjdCk7CisKKwkJCWFkZEluY3ViYXRpb25SYXRlUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCk7CisJCX0KKwkJcmV0dXJuIGl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzOworCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyBhIHByb3BlcnR5IGRlc2NyaXB0b3IgZm9yIHRoZSBJbmN1YmF0aW9uIFJhdGUgZmVhdHVyZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBhZGRJbmN1YmF0aW9uUmF0ZVByb3BlcnR5RGVzY3JpcHRvcihPYmplY3Qgb2JqZWN0KSB7CisJCWl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzLmFkZAorCQkJKGNyZWF0ZUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IKKwkJCQkoKChDb21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5KWFkYXB0ZXJGYWN0b3J5KS5nZXRSb290QWRhcHRlckZhY3RvcnkoKSwKKwkJCQkgZ2V0UmVzb3VyY2VMb2NhdG9yKCksCisJCQkJIGdldFN0cmluZygiX1VJX011bHRpUG9wdWxhdGlvblNFSVJEaXNlYXNlTW9kZWxfaW5jdWJhdGlvblJhdGVfZmVhdHVyZSIpLAorCQkJCSBnZXRTdHJpbmcoIl9VSV9Qcm9wZXJ0eURlc2NyaXB0b3JfZGVzY3JpcHRpb24iLCAiX1VJX011bHRpUG9wdWxhdGlvblNFSVJEaXNlYXNlTW9kZWxfaW5jdWJhdGlvblJhdGVfZmVhdHVyZSIsICJfVUlfTXVsdGlQb3B1bGF0aW9uU0VJUkRpc2Vhc2VNb2RlbF90eXBlIiksCisJCQkJIE11bHRpcG9wdWxhdGlvblBhY2thZ2UuTGl0ZXJhbHMuTVVMVElfUE9QVUxBVElPTl9TRUlSX0RJU0VBU0VfTU9ERUxfX0lOQ1VCQVRJT05fUkFURSwKKwkJCQkgdHJ1ZSwKKwkJCQkgZmFsc2UsCisJCQkJIGZhbHNlLAorCQkJCSBudWxsLAorCQkJCSBudWxsLAorCQkJCSBudWxsKSk7CisJfQorCisJLyoqCisJICogVGhpcyBzcGVjaWZpZXMgaG93IHRvIGltcGxlbWVudCB7QGxpbmsgI2dldENoaWxkcmVufSBhbmQgaXMgdXNlZCB0byBkZWR1Y2UgYW4gYXBwcm9wcmlhdGUgZmVhdHVyZSBmb3IgYW4KKwkgKiB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmVkaXQuY29tbWFuZC5BZGRDb21tYW5kfSwge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lZGl0LmNvbW1hbmQuUmVtb3ZlQ29tbWFuZH0gb3IKKwkgKiB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmVkaXQuY29tbWFuZC5Nb3ZlQ29tbWFuZH0gaW4ge0BsaW5rICNjcmVhdGVDb21tYW5kfS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgQ29sbGVjdGlvbjw/IGV4dGVuZHMgRVN0cnVjdHVyYWxGZWF0dXJlPiBnZXRDaGlsZHJlbkZlYXR1cmVzKE9iamVjdCBvYmplY3QpIHsKKwkJaWYgKGNoaWxkcmVuRmVhdHVyZXMgPT0gbnVsbCkgeworCQkJc3VwZXIuZ2V0Q2hpbGRyZW5GZWF0dXJlcyhvYmplY3QpOworCQkJY2hpbGRyZW5GZWF0dXJlcy5hZGQoTXVsdGlwb3B1bGF0aW9uUGFja2FnZS5MaXRlcmFscy5NVUxUSV9QT1BVTEFUSU9OX1NFSVJfRElTRUFTRV9NT0RFTF9fSU5DVUJBVElPTl9SQVRFKTsKKwkJfQorCQlyZXR1cm4gY2hpbGRyZW5GZWF0dXJlczsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgRVN0cnVjdHVyYWxGZWF0dXJlIGdldENoaWxkRmVhdHVyZShPYmplY3Qgb2JqZWN0LCBPYmplY3QgY2hpbGQpIHsKKwkJLy8gQ2hlY2sgdGhlIHR5cGUgb2YgdGhlIHNwZWNpZmllZCBjaGlsZCBvYmplY3QgYW5kIHJldHVybiB0aGUgcHJvcGVyIGZlYXR1cmUgdG8gdXNlIGZvcgorCQkvLyBhZGRpbmcgKHNlZSB7QGxpbmsgQWRkQ29tbWFuZH0pIGl0IGFzIGEgY2hpbGQuCisKKwkJcmV0dXJuIHN1cGVyLmdldENoaWxkRmVhdHVyZShvYmplY3QsIGNoaWxkKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgTXVsdGlQb3B1bGF0aW9uU0VJUkRpc2Vhc2VNb2RlbC5naWYuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBPYmplY3QgZ2V0SW1hZ2UoT2JqZWN0IG9iamVjdCkgeworCQlyZXR1cm4gb3ZlcmxheUltYWdlKG9iamVjdCwgZ2V0UmVzb3VyY2VMb2NhdG9yKCkuZ2V0SW1hZ2UoImZ1bGwvY3VzdG9tMTYvZGlzZWFzZS5naWYiKSk7CisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIHRoZSBsYWJlbCB0ZXh0IGZvciB0aGUgYWRhcHRlZCBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIFN0cmluZyBnZXRUZXh0KE9iamVjdCBvYmplY3QpIHsKKwkJcmV0dXJuIHN1cGVyLmdldFRleHQob2JqZWN0KTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGhhbmRsZXMgbW9kZWwgbm90aWZpY2F0aW9ucyBieSBjYWxsaW5nIHtAbGluayAjdXBkYXRlQ2hpbGRyZW59IHRvIHVwZGF0ZSBhbnkgY2FjaGVkCisJICogY2hpbGRyZW4gYW5kIGJ5IGNyZWF0aW5nIGEgdmlld2VyIG5vdGlmaWNhdGlvbiwgd2hpY2ggaXQgcGFzc2VzIHRvIHtAbGluayAjZmlyZU5vdGlmeUNoYW5nZWR9LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIG5vdGlmeUNoYW5nZWQoTm90aWZpY2F0aW9uIG5vdGlmaWNhdGlvbikgeworCQl1cGRhdGVDaGlsZHJlbihub3RpZmljYXRpb24pOworCisJCXN3aXRjaCAobm90aWZpY2F0aW9uLmdldEZlYXR1cmVJRChNdWx0aVBvcHVsYXRpb25TRUlSRGlzZWFzZU1vZGVsLmNsYXNzKSkgeworCQkJY2FzZSBNdWx0aXBvcHVsYXRpb25QYWNrYWdlLk1VTFRJX1BPUFVMQVRJT05fU0VJUl9ESVNFQVNFX01PREVMX19JTkNVQkFUSU9OX1JBVEU6CisJCQkJZmlyZU5vdGlmeUNoYW5nZWQobmV3IFZpZXdlck5vdGlmaWNhdGlvbihub3RpZmljYXRpb24sIG5vdGlmaWNhdGlvbi5nZXROb3RpZmllcigpLCB0cnVlLCBmYWxzZSkpOworCQkJCXJldHVybjsKKwkJfQorCQlzdXBlci5ub3RpZnlDaGFuZ2VkKG5vdGlmaWNhdGlvbik7CisJfQorCisJLyoqCisJICogVGhpcyBhZGRzIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuZWRpdC5jb21tYW5kLkNvbW1hbmRQYXJhbWV0ZXJ9cyBkZXNjcmliaW5nIHRoZSBjaGlsZHJlbgorCSAqIHRoYXQgY2FuIGJlIGNyZWF0ZWQgdW5kZXIgdGhpcyBvYmplY3QuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgY29sbGVjdE5ld0NoaWxkRGVzY3JpcHRvcnMoQ29sbGVjdGlvbjxPYmplY3Q+IG5ld0NoaWxkRGVzY3JpcHRvcnMsIE9iamVjdCBvYmplY3QpIHsKKwkJc3VwZXIuY29sbGVjdE5ld0NoaWxkRGVzY3JpcHRvcnMobmV3Q2hpbGREZXNjcmlwdG9ycywgb2JqZWN0KTsKKworCQluZXdDaGlsZERlc2NyaXB0b3JzLmFkZAorCQkJKGNyZWF0ZUNoaWxkUGFyYW1ldGVyCisJCQkJKE11bHRpcG9wdWxhdGlvblBhY2thZ2UuTGl0ZXJhbHMuTVVMVElfUE9QVUxBVElPTl9TRUlSX0RJU0VBU0VfTU9ERUxfX0lOQ1VCQVRJT05fUkFURSwKKwkJCQkgQ29tbW9uRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlRG91YmxlVmFsdWVMaXN0KCkpKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgdGhlIGxhYmVsIHRleHQgZm9yIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuZWRpdC5jb21tYW5kLkNyZWF0ZUNoaWxkQ29tbWFuZH0uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIFN0cmluZyBnZXRDcmVhdGVDaGlsZFRleHQoT2JqZWN0IG93bmVyLCBPYmplY3QgZmVhdHVyZSwgT2JqZWN0IGNoaWxkLCBDb2xsZWN0aW9uPD8+IHNlbGVjdGlvbikgeworCQlPYmplY3QgY2hpbGRGZWF0dXJlID0gZmVhdHVyZTsKKwkJT2JqZWN0IGNoaWxkT2JqZWN0ID0gY2hpbGQ7CisKKwkJYm9vbGVhbiBxdWFsaWZ5ID0KKwkJCWNoaWxkRmVhdHVyZSA9PSBNdWx0aXBvcHVsYXRpb25QYWNrYWdlLkxpdGVyYWxzLk1VTFRJX1BPUFVMQVRJT05fU0lfRElTRUFTRV9NT0RFTF9fUkVDT1ZFUllfUkFURSB8fAorCQkJY2hpbGRGZWF0dXJlID09IE11bHRpcG9wdWxhdGlvblBhY2thZ2UuTGl0ZXJhbHMuTVVMVElfUE9QVUxBVElPTl9TSV9ESVNFQVNFX01PREVMX19JTkZFQ1RJT1VTX01PUlRBTElUWV9SQVRFIHx8CisJCQljaGlsZEZlYXR1cmUgPT0gTXVsdGlwb3B1bGF0aW9uUGFja2FnZS5MaXRlcmFscy5NVUxUSV9QT1BVTEFUSU9OX1NJUl9ESVNFQVNFX01PREVMX19JTU1VTklUWV9MT1NTX1JBVEUgfHwKKwkJCWNoaWxkRmVhdHVyZSA9PSBNdWx0aXBvcHVsYXRpb25QYWNrYWdlLkxpdGVyYWxzLk1VTFRJX1BPUFVMQVRJT05fU0VJUl9ESVNFQVNFX01PREVMX19JTkNVQkFUSU9OX1JBVEU7CisKKwkJaWYgKHF1YWxpZnkpIHsKKwkJCXJldHVybiBnZXRTdHJpbmcKKwkJCQkoIl9VSV9DcmVhdGVDaGlsZF90ZXh0MiIsCisJCQkJIG5ldyBPYmplY3RbXSB7IGdldFR5cGVUZXh0KGNoaWxkT2JqZWN0KSwgZ2V0RmVhdHVyZVRleHQoY2hpbGRGZWF0dXJlKSwgZ2V0VHlwZVRleHQob3duZXIpIH0pOworCQl9CisJCXJldHVybiBzdXBlci5nZXRDcmVhdGVDaGlsZFRleHQob3duZXIsIGZlYXR1cmUsIGNoaWxkLCBzZWxlY3Rpb24pOworCX0KKworfQpkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMubXVsdGlwb3B1bGF0aW9uL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvbXVsdGlwb3B1bGF0aW9uL3Byb3ZpZGVyL011bHRpUG9wdWxhdGlvblNJRGlzZWFzZU1vZGVsSXRlbVByb3ZpZGVyLmphdmEgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5tdWx0aXBvcHVsYXRpb24vc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9tdWx0aXBvcHVsYXRpb24vcHJvdmlkZXIvTXVsdGlQb3B1bGF0aW9uU0lEaXNlYXNlTW9kZWxJdGVtUHJvdmlkZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42N2IyYTgzCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMubXVsdGlwb3B1bGF0aW9uL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvbXVsdGlwb3B1bGF0aW9uL3Byb3ZpZGVyL011bHRpUG9wdWxhdGlvblNJRGlzZWFzZU1vZGVsSXRlbVByb3ZpZGVyLmphdmEKQEAgLTAsMCArMSwzMjEgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLm11bHRpcG9wdWxhdGlvbi5wcm92aWRlcjsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAxMCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LkFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuUmVzb3VyY2VMb2NhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FU3RydWN0dXJhbEZlYXR1cmU7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JRWRpdGluZ0RvbWFpbkl0ZW1Qcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbUxhYmVsUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1Qcm9wZXJ0eVNvdXJjZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JU3RydWN0dXJlZEl0ZW1Db250ZW50UHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVRyZWVJdGVtQ29udGVudFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLlZpZXdlck5vdGlmaWNhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLkNvbW1vbkZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLm11bHRpcG9wdWxhdGlvbi5NdWx0aVBvcHVsYXRpb25TSURpc2Vhc2VNb2RlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMubXVsdGlwb3B1bGF0aW9uLk11bHRpcG9wdWxhdGlvblBhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLnByb3ZpZGVyLlN0YW5kYXJkRGlzZWFzZU1vZGVsSXRlbVByb3ZpZGVyOworCisvKioKKyAqIFRoaXMgaXMgdGhlIGl0ZW0gcHJvdmlkZXIgYWRhcHRlciBmb3IgYSB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLm11bHRpcG9wdWxhdGlvbi5NdWx0aVBvcHVsYXRpb25TSURpc2Vhc2VNb2RlbH0gb2JqZWN0LgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgTXVsdGlQb3B1bGF0aW9uU0lEaXNlYXNlTW9kZWxJdGVtUHJvdmlkZXIKKwlleHRlbmRzIFN0YW5kYXJkRGlzZWFzZU1vZGVsSXRlbVByb3ZpZGVyCisJaW1wbGVtZW50cworCQlJRWRpdGluZ0RvbWFpbkl0ZW1Qcm92aWRlciwKKwkJSVN0cnVjdHVyZWRJdGVtQ29udGVudFByb3ZpZGVyLAorCQlJVHJlZUl0ZW1Db250ZW50UHJvdmlkZXIsCisJCUlJdGVtTGFiZWxQcm92aWRlciwKKwkJSUl0ZW1Qcm9wZXJ0eVNvdXJjZSB7CisJLyoqCisJICogVGhpcyBjb25zdHJ1Y3RzIGFuIGluc3RhbmNlIGZyb20gYSBmYWN0b3J5IGFuZCBhIG5vdGlmaWVyLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBNdWx0aVBvcHVsYXRpb25TSURpc2Vhc2VNb2RlbEl0ZW1Qcm92aWRlcihBZGFwdGVyRmFjdG9yeSBhZGFwdGVyRmFjdG9yeSkgeworCQlzdXBlcihhZGFwdGVyRmFjdG9yeSk7CisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIHRoZSBwcm9wZXJ0eSBkZXNjcmlwdG9ycyBmb3IgdGhlIGFkYXB0ZWQgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIExpc3Q8SUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I+IGdldFByb3BlcnR5RGVzY3JpcHRvcnMoT2JqZWN0IG9iamVjdCkgeworCQlpZiAoaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMgPT0gbnVsbCkgeworCQkJc3VwZXIuZ2V0UHJvcGVydHlEZXNjcmlwdG9ycyhvYmplY3QpOworCisJCQlhZGRQb3B1bGF0aW9uR3JvdXBzUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCk7CisJCQlhZGRUcmFuc21pc3Npb25SYXRlUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCk7CisJCQlhZGRSZWNvdmVyeVJhdGVQcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0KTsKKwkJCWFkZEluZmVjdGlvdXNNb3J0YWxpdHlSYXRlUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCk7CisJCX0KKwkJcmV0dXJuIGl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzOworCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyBhIHByb3BlcnR5IGRlc2NyaXB0b3IgZm9yIHRoZSBQb3B1bGF0aW9uIEdyb3VwcyBmZWF0dXJlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIGFkZFBvcHVsYXRpb25Hcm91cHNQcm9wZXJ0eURlc2NyaXB0b3IoT2JqZWN0IG9iamVjdCkgeworCQlpdGVtUHJvcGVydHlEZXNjcmlwdG9ycy5hZGQKKwkJCShjcmVhdGVJdGVtUHJvcGVydHlEZXNjcmlwdG9yCisJCQkJKCgoQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSlhZGFwdGVyRmFjdG9yeSkuZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCksCisJCQkJIGdldFJlc291cmNlTG9jYXRvcigpLAorCQkJCSBnZXRTdHJpbmcoIl9VSV9NdWx0aVBvcHVsYXRpb25TSURpc2Vhc2VNb2RlbF9wb3B1bGF0aW9uR3JvdXBzX2ZlYXR1cmUiKSwKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfUHJvcGVydHlEZXNjcmlwdG9yX2Rlc2NyaXB0aW9uIiwgIl9VSV9NdWx0aVBvcHVsYXRpb25TSURpc2Vhc2VNb2RlbF9wb3B1bGF0aW9uR3JvdXBzX2ZlYXR1cmUiLCAiX1VJX011bHRpUG9wdWxhdGlvblNJRGlzZWFzZU1vZGVsX3R5cGUiKSwKKwkJCQkgTXVsdGlwb3B1bGF0aW9uUGFja2FnZS5MaXRlcmFscy5NVUxUSV9QT1BVTEFUSU9OX1NJX0RJU0VBU0VfTU9ERUxfX1BPUFVMQVRJT05fR1JPVVBTLAorCQkJCSB0cnVlLAorCQkJCSBmYWxzZSwKKwkJCQkgZmFsc2UsCisJCQkJIG51bGwsCisJCQkJIG51bGwsCisJCQkJIG51bGwpKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFkZHMgYSBwcm9wZXJ0eSBkZXNjcmlwdG9yIGZvciB0aGUgVHJhbnNtaXNzaW9uIFJhdGUgZmVhdHVyZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBhZGRUcmFuc21pc3Npb25SYXRlUHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdCBvYmplY3QpIHsKKwkJaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMuYWRkCisJCQkoY3JlYXRlSXRlbVByb3BlcnR5RGVzY3JpcHRvcgorCQkJCSgoKENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnkpYWRhcHRlckZhY3RvcnkpLmdldFJvb3RBZGFwdGVyRmFjdG9yeSgpLAorCQkJCSBnZXRSZXNvdXJjZUxvY2F0b3IoKSwKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfTXVsdGlQb3B1bGF0aW9uU0lEaXNlYXNlTW9kZWxfdHJhbnNtaXNzaW9uUmF0ZV9mZWF0dXJlIiksCisJCQkJIGdldFN0cmluZygiX1VJX1Byb3BlcnR5RGVzY3JpcHRvcl9kZXNjcmlwdGlvbiIsICJfVUlfTXVsdGlQb3B1bGF0aW9uU0lEaXNlYXNlTW9kZWxfdHJhbnNtaXNzaW9uUmF0ZV9mZWF0dXJlIiwgIl9VSV9NdWx0aVBvcHVsYXRpb25TSURpc2Vhc2VNb2RlbF90eXBlIiksCisJCQkJIE11bHRpcG9wdWxhdGlvblBhY2thZ2UuTGl0ZXJhbHMuTVVMVElfUE9QVUxBVElPTl9TSV9ESVNFQVNFX01PREVMX19UUkFOU01JU1NJT05fUkFURSwKKwkJCQkgdHJ1ZSwKKwkJCQkgZmFsc2UsCisJCQkJIGZhbHNlLAorCQkJCSBudWxsLAorCQkJCSBudWxsLAorCQkJCSBudWxsKSk7CisJfQorCisJLyoqCisJICogVGhpcyBhZGRzIGEgcHJvcGVydHkgZGVzY3JpcHRvciBmb3IgdGhlIFJlY292ZXJ5IFJhdGUgZmVhdHVyZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBhZGRSZWNvdmVyeVJhdGVQcm9wZXJ0eURlc2NyaXB0b3IoT2JqZWN0IG9iamVjdCkgeworCQlpdGVtUHJvcGVydHlEZXNjcmlwdG9ycy5hZGQKKwkJCShjcmVhdGVJdGVtUHJvcGVydHlEZXNjcmlwdG9yCisJCQkJKCgoQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSlhZGFwdGVyRmFjdG9yeSkuZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCksCisJCQkJIGdldFJlc291cmNlTG9jYXRvcigpLAorCQkJCSBnZXRTdHJpbmcoIl9VSV9NdWx0aVBvcHVsYXRpb25TSURpc2Vhc2VNb2RlbF9yZWNvdmVyeVJhdGVfZmVhdHVyZSIpLAorCQkJCSBnZXRTdHJpbmcoIl9VSV9Qcm9wZXJ0eURlc2NyaXB0b3JfZGVzY3JpcHRpb24iLCAiX1VJX011bHRpUG9wdWxhdGlvblNJRGlzZWFzZU1vZGVsX3JlY292ZXJ5UmF0ZV9mZWF0dXJlIiwgIl9VSV9NdWx0aVBvcHVsYXRpb25TSURpc2Vhc2VNb2RlbF90eXBlIiksCisJCQkJIE11bHRpcG9wdWxhdGlvblBhY2thZ2UuTGl0ZXJhbHMuTVVMVElfUE9QVUxBVElPTl9TSV9ESVNFQVNFX01PREVMX19SRUNPVkVSWV9SQVRFLAorCQkJCSB0cnVlLAorCQkJCSBmYWxzZSwKKwkJCQkgZmFsc2UsCisJCQkJIG51bGwsCisJCQkJIG51bGwsCisJCQkJIG51bGwpKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFkZHMgYSBwcm9wZXJ0eSBkZXNjcmlwdG9yIGZvciB0aGUgSW5mZWN0aW91cyBNb3J0YWxpdHkgUmF0ZSBmZWF0dXJlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIGFkZEluZmVjdGlvdXNNb3J0YWxpdHlSYXRlUHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdCBvYmplY3QpIHsKKwkJaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMuYWRkCisJCQkoY3JlYXRlSXRlbVByb3BlcnR5RGVzY3JpcHRvcgorCQkJCSgoKENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnkpYWRhcHRlckZhY3RvcnkpLmdldFJvb3RBZGFwdGVyRmFjdG9yeSgpLAorCQkJCSBnZXRSZXNvdXJjZUxvY2F0b3IoKSwKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfTXVsdGlQb3B1bGF0aW9uU0lEaXNlYXNlTW9kZWxfaW5mZWN0aW91c01vcnRhbGl0eVJhdGVfZmVhdHVyZSIpLAorCQkJCSBnZXRTdHJpbmcoIl9VSV9Qcm9wZXJ0eURlc2NyaXB0b3JfZGVzY3JpcHRpb24iLCAiX1VJX011bHRpUG9wdWxhdGlvblNJRGlzZWFzZU1vZGVsX2luZmVjdGlvdXNNb3J0YWxpdHlSYXRlX2ZlYXR1cmUiLCAiX1VJX011bHRpUG9wdWxhdGlvblNJRGlzZWFzZU1vZGVsX3R5cGUiKSwKKwkJCQkgTXVsdGlwb3B1bGF0aW9uUGFja2FnZS5MaXRlcmFscy5NVUxUSV9QT1BVTEFUSU9OX1NJX0RJU0VBU0VfTU9ERUxfX0lORkVDVElPVVNfTU9SVEFMSVRZX1JBVEUsCisJCQkJIHRydWUsCisJCQkJIGZhbHNlLAorCQkJCSBmYWxzZSwKKwkJCQkgbnVsbCwKKwkJCQkgbnVsbCwKKwkJCQkgbnVsbCkpOworCX0KKworCS8qKgorCSAqIFRoaXMgc3BlY2lmaWVzIGhvdyB0byBpbXBsZW1lbnQge0BsaW5rICNnZXRDaGlsZHJlbn0gYW5kIGlzIHVzZWQgdG8gZGVkdWNlIGFuIGFwcHJvcHJpYXRlIGZlYXR1cmUgZm9yIGFuCisJICoge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lZGl0LmNvbW1hbmQuQWRkQ29tbWFuZH0sIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuZWRpdC5jb21tYW5kLlJlbW92ZUNvbW1hbmR9IG9yCisJICoge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lZGl0LmNvbW1hbmQuTW92ZUNvbW1hbmR9IGluIHtAbGluayAjY3JlYXRlQ29tbWFuZH0uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIENvbGxlY3Rpb248PyBleHRlbmRzIEVTdHJ1Y3R1cmFsRmVhdHVyZT4gZ2V0Q2hpbGRyZW5GZWF0dXJlcyhPYmplY3Qgb2JqZWN0KSB7CisJCWlmIChjaGlsZHJlbkZlYXR1cmVzID09IG51bGwpIHsKKwkJCXN1cGVyLmdldENoaWxkcmVuRmVhdHVyZXMob2JqZWN0KTsKKwkJCWNoaWxkcmVuRmVhdHVyZXMuYWRkKE11bHRpcG9wdWxhdGlvblBhY2thZ2UuTGl0ZXJhbHMuTVVMVElfUE9QVUxBVElPTl9TSV9ESVNFQVNFX01PREVMX19QT1BVTEFUSU9OX0dST1VQUyk7CisJCQljaGlsZHJlbkZlYXR1cmVzLmFkZChNdWx0aXBvcHVsYXRpb25QYWNrYWdlLkxpdGVyYWxzLk1VTFRJX1BPUFVMQVRJT05fU0lfRElTRUFTRV9NT0RFTF9fVFJBTlNNSVNTSU9OX1JBVEUpOworCQkJY2hpbGRyZW5GZWF0dXJlcy5hZGQoTXVsdGlwb3B1bGF0aW9uUGFja2FnZS5MaXRlcmFscy5NVUxUSV9QT1BVTEFUSU9OX1NJX0RJU0VBU0VfTU9ERUxfX1JFQ09WRVJZX1JBVEUpOworCQkJY2hpbGRyZW5GZWF0dXJlcy5hZGQoTXVsdGlwb3B1bGF0aW9uUGFja2FnZS5MaXRlcmFscy5NVUxUSV9QT1BVTEFUSU9OX1NJX0RJU0VBU0VfTU9ERUxfX0lORkVDVElPVVNfTU9SVEFMSVRZX1JBVEUpOworCQl9CisJCXJldHVybiBjaGlsZHJlbkZlYXR1cmVzOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCBFU3RydWN0dXJhbEZlYXR1cmUgZ2V0Q2hpbGRGZWF0dXJlKE9iamVjdCBvYmplY3QsIE9iamVjdCBjaGlsZCkgeworCQkvLyBDaGVjayB0aGUgdHlwZSBvZiB0aGUgc3BlY2lmaWVkIGNoaWxkIG9iamVjdCBhbmQgcmV0dXJuIHRoZSBwcm9wZXIgZmVhdHVyZSB0byB1c2UgZm9yCisJCS8vIGFkZGluZyAoc2VlIHtAbGluayBBZGRDb21tYW5kfSkgaXQgYXMgYSBjaGlsZC4KKworCQlyZXR1cm4gc3VwZXIuZ2V0Q2hpbGRGZWF0dXJlKG9iamVjdCwgY2hpbGQpOworCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyBNdWx0aVBvcHVsYXRpb25TSURpc2Vhc2VNb2RlbC5naWYuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBPYmplY3QgZ2V0SW1hZ2UoT2JqZWN0IG9iamVjdCkgeworCQlyZXR1cm4gb3ZlcmxheUltYWdlKG9iamVjdCwgZ2V0UmVzb3VyY2VMb2NhdG9yKCkuZ2V0SW1hZ2UoImZ1bGwvY3VzdG9tMTYvZGlzZWFzZS5naWYiKSk7CisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIHRoZSBsYWJlbCB0ZXh0IGZvciB0aGUgYWRhcHRlZCBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIFN0cmluZyBnZXRUZXh0KE9iamVjdCBvYmplY3QpIHsKKwkJcmV0dXJuIHN1cGVyLmdldFRleHQob2JqZWN0KTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgdGhlIGxhYmVsIHRleHQgZm9yIHRoZSBhZGFwdGVkIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBTdHJpbmcgZ2V0VGV4dEdlbihPYmplY3Qgb2JqZWN0KSB7CisJCVN0cmluZyBsYWJlbCA9ICgoTXVsdGlQb3B1bGF0aW9uU0lEaXNlYXNlTW9kZWwpb2JqZWN0KS5nZXREaXNlYXNlTmFtZSgpOworCQlyZXR1cm4gbGFiZWwgPT0gbnVsbCB8fCBsYWJlbC5sZW5ndGgoKSA9PSAwID8KKwkJCWdldFN0cmluZygiX1VJX011bHRpUG9wdWxhdGlvblNJRGlzZWFzZU1vZGVsX3R5cGUiKSA6CisJCQlnZXRTdHJpbmcoIl9VSV9NdWx0aVBvcHVsYXRpb25TSURpc2Vhc2VNb2RlbF90eXBlIikgKyAiICIgKyBsYWJlbDsKKwl9CisJLyoqCisJICogVGhpcyBoYW5kbGVzIG1vZGVsIG5vdGlmaWNhdGlvbnMgYnkgY2FsbGluZyB7QGxpbmsgI3VwZGF0ZUNoaWxkcmVufSB0byB1cGRhdGUgYW55IGNhY2hlZAorCSAqIGNoaWxkcmVuIGFuZCBieSBjcmVhdGluZyBhIHZpZXdlciBub3RpZmljYXRpb24sIHdoaWNoIGl0IHBhc3NlcyB0byB7QGxpbmsgI2ZpcmVOb3RpZnlDaGFuZ2VkfS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBub3RpZnlDaGFuZ2VkKE5vdGlmaWNhdGlvbiBub3RpZmljYXRpb24pIHsKKwkJdXBkYXRlQ2hpbGRyZW4obm90aWZpY2F0aW9uKTsKKworCQlzd2l0Y2ggKG5vdGlmaWNhdGlvbi5nZXRGZWF0dXJlSUQoTXVsdGlQb3B1bGF0aW9uU0lEaXNlYXNlTW9kZWwuY2xhc3MpKSB7CisJCQljYXNlIE11bHRpcG9wdWxhdGlvblBhY2thZ2UuTVVMVElfUE9QVUxBVElPTl9TSV9ESVNFQVNFX01PREVMX19QT1BVTEFUSU9OX0dST1VQUzoKKwkJCWNhc2UgTXVsdGlwb3B1bGF0aW9uUGFja2FnZS5NVUxUSV9QT1BVTEFUSU9OX1NJX0RJU0VBU0VfTU9ERUxfX1RSQU5TTUlTU0lPTl9SQVRFOgorCQkJY2FzZSBNdWx0aXBvcHVsYXRpb25QYWNrYWdlLk1VTFRJX1BPUFVMQVRJT05fU0lfRElTRUFTRV9NT0RFTF9fUkVDT1ZFUllfUkFURToKKwkJCWNhc2UgTXVsdGlwb3B1bGF0aW9uUGFja2FnZS5NVUxUSV9QT1BVTEFUSU9OX1NJX0RJU0VBU0VfTU9ERUxfX0lORkVDVElPVVNfTU9SVEFMSVRZX1JBVEU6CisJCQkJZmlyZU5vdGlmeUNoYW5nZWQobmV3IFZpZXdlck5vdGlmaWNhdGlvbihub3RpZmljYXRpb24sIG5vdGlmaWNhdGlvbi5nZXROb3RpZmllcigpLCB0cnVlLCBmYWxzZSkpOworCQkJCXJldHVybjsKKwkJfQorCQlzdXBlci5ub3RpZnlDaGFuZ2VkKG5vdGlmaWNhdGlvbik7CisJfQorCisJLyoqCisJICogVGhpcyBhZGRzIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuZWRpdC5jb21tYW5kLkNvbW1hbmRQYXJhbWV0ZXJ9cyBkZXNjcmliaW5nIHRoZSBjaGlsZHJlbgorCSAqIHRoYXQgY2FuIGJlIGNyZWF0ZWQgdW5kZXIgdGhpcyBvYmplY3QuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgY29sbGVjdE5ld0NoaWxkRGVzY3JpcHRvcnMoQ29sbGVjdGlvbjxPYmplY3Q+IG5ld0NoaWxkRGVzY3JpcHRvcnMsIE9iamVjdCBvYmplY3QpIHsKKwkJc3VwZXIuY29sbGVjdE5ld0NoaWxkRGVzY3JpcHRvcnMobmV3Q2hpbGREZXNjcmlwdG9ycywgb2JqZWN0KTsKKworCQluZXdDaGlsZERlc2NyaXB0b3JzLmFkZAorCQkJKGNyZWF0ZUNoaWxkUGFyYW1ldGVyCisJCQkJKE11bHRpcG9wdWxhdGlvblBhY2thZ2UuTGl0ZXJhbHMuTVVMVElfUE9QVUxBVElPTl9TSV9ESVNFQVNFX01PREVMX19QT1BVTEFUSU9OX0dST1VQUywKKwkJCQkgQ29tbW9uRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlU3RyaW5nVmFsdWVMaXN0KCkpKTsKKworCQluZXdDaGlsZERlc2NyaXB0b3JzLmFkZAorCQkJKGNyZWF0ZUNoaWxkUGFyYW1ldGVyCisJCQkJKE11bHRpcG9wdWxhdGlvblBhY2thZ2UuTGl0ZXJhbHMuTVVMVElfUE9QVUxBVElPTl9TSV9ESVNFQVNFX01PREVMX19UUkFOU01JU1NJT05fUkFURSwKKwkJCQkgQ29tbW9uRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlRG91YmxlVmFsdWVNYXRyaXgoKSkpOworCisJCW5ld0NoaWxkRGVzY3JpcHRvcnMuYWRkCisJCQkoY3JlYXRlQ2hpbGRQYXJhbWV0ZXIKKwkJCQkoTXVsdGlwb3B1bGF0aW9uUGFja2FnZS5MaXRlcmFscy5NVUxUSV9QT1BVTEFUSU9OX1NJX0RJU0VBU0VfTU9ERUxfX1JFQ09WRVJZX1JBVEUsCisJCQkJIENvbW1vbkZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZURvdWJsZVZhbHVlTGlzdCgpKSk7CisKKwkJbmV3Q2hpbGREZXNjcmlwdG9ycy5hZGQKKwkJCShjcmVhdGVDaGlsZFBhcmFtZXRlcgorCQkJCShNdWx0aXBvcHVsYXRpb25QYWNrYWdlLkxpdGVyYWxzLk1VTFRJX1BPUFVMQVRJT05fU0lfRElTRUFTRV9NT0RFTF9fSU5GRUNUSU9VU19NT1JUQUxJVFlfUkFURSwKKwkJCQkgQ29tbW9uRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlRG91YmxlVmFsdWVMaXN0KCkpKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgdGhlIGxhYmVsIHRleHQgZm9yIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuZWRpdC5jb21tYW5kLkNyZWF0ZUNoaWxkQ29tbWFuZH0uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIFN0cmluZyBnZXRDcmVhdGVDaGlsZFRleHQoT2JqZWN0IG93bmVyLCBPYmplY3QgZmVhdHVyZSwgT2JqZWN0IGNoaWxkLCBDb2xsZWN0aW9uPD8+IHNlbGVjdGlvbikgeworCQlPYmplY3QgY2hpbGRGZWF0dXJlID0gZmVhdHVyZTsKKwkJT2JqZWN0IGNoaWxkT2JqZWN0ID0gY2hpbGQ7CisKKwkJYm9vbGVhbiBxdWFsaWZ5ID0KKwkJCWNoaWxkRmVhdHVyZSA9PSBNdWx0aXBvcHVsYXRpb25QYWNrYWdlLkxpdGVyYWxzLk1VTFRJX1BPUFVMQVRJT05fU0lfRElTRUFTRV9NT0RFTF9fUkVDT1ZFUllfUkFURSB8fAorCQkJY2hpbGRGZWF0dXJlID09IE11bHRpcG9wdWxhdGlvblBhY2thZ2UuTGl0ZXJhbHMuTVVMVElfUE9QVUxBVElPTl9TSV9ESVNFQVNFX01PREVMX19JTkZFQ1RJT1VTX01PUlRBTElUWV9SQVRFOworCisJCWlmIChxdWFsaWZ5KSB7CisJCQlyZXR1cm4gZ2V0U3RyaW5nCisJCQkJKCJfVUlfQ3JlYXRlQ2hpbGRfdGV4dDIiLAorCQkJCSBuZXcgT2JqZWN0W10geyBnZXRUeXBlVGV4dChjaGlsZE9iamVjdCksIGdldEZlYXR1cmVUZXh0KGNoaWxkRmVhdHVyZSksIGdldFR5cGVUZXh0KG93bmVyKSB9KTsKKwkJfQorCQlyZXR1cm4gc3VwZXIuZ2V0Q3JlYXRlQ2hpbGRUZXh0KG93bmVyLCBmZWF0dXJlLCBjaGlsZCwgc2VsZWN0aW9uKTsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm4gdGhlIHJlc291cmNlIGxvY2F0b3IgZm9yIHRoaXMgaXRlbSBwcm92aWRlcidzIHJlc291cmNlcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgUmVzb3VyY2VMb2NhdG9yIGdldFJlc291cmNlTG9jYXRvcigpIHsKKwkJcmV0dXJuIE11bHRpcG9wdWxhdGlvbkVkaXRQbHVnaW4uSU5TVEFOQ0U7CisJfQorCit9CmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5tdWx0aXBvcHVsYXRpb24vc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9tdWx0aXBvcHVsYXRpb24vcHJvdmlkZXIvTXVsdGlQb3B1bGF0aW9uU0lSRGlzZWFzZU1vZGVsSXRlbVByb3ZpZGVyLmphdmEgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5tdWx0aXBvcHVsYXRpb24vc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9tdWx0aXBvcHVsYXRpb24vcHJvdmlkZXIvTXVsdGlQb3B1bGF0aW9uU0lSRGlzZWFzZU1vZGVsSXRlbVByb3ZpZGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDQyMmI4YQotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLm11bHRpcG9wdWxhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL211bHRpcG9wdWxhdGlvbi9wcm92aWRlci9NdWx0aVBvcHVsYXRpb25TSVJEaXNlYXNlTW9kZWxJdGVtUHJvdmlkZXIuamF2YQpAQCAtMCwwICsxLDIwNiBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOSwyMDEwIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLm11bHRpcG9wdWxhdGlvbi5wcm92aWRlcjsKKworCitpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5BZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVTdHJ1Y3R1cmFsRmVhdHVyZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5Db21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklFZGl0aW5nRG9tYWluSXRlbVByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtTGFiZWxQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbVByb3BlcnR5RGVzY3JpcHRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbVByb3BlcnR5U291cmNlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklTdHJ1Y3R1cmVkSXRlbUNvbnRlbnRQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JVHJlZUl0ZW1Db250ZW50UHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuVmlld2VyTm90aWZpY2F0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uQ29tbW9uRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMubXVsdGlwb3B1bGF0aW9uLk11bHRpUG9wdWxhdGlvblNJUkRpc2Vhc2VNb2RlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMubXVsdGlwb3B1bGF0aW9uLk11bHRpcG9wdWxhdGlvblBhY2thZ2U7CisKKy8qKgorICogVGhpcyBpcyB0aGUgaXRlbSBwcm92aWRlciBhZGFwdGVyIGZvciBhIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMubXVsdGlwb3B1bGF0aW9uLk11bHRpUG9wdWxhdGlvblNJUkRpc2Vhc2VNb2RlbH0gb2JqZWN0LgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgTXVsdGlQb3B1bGF0aW9uU0lSRGlzZWFzZU1vZGVsSXRlbVByb3ZpZGVyCisJZXh0ZW5kcyBNdWx0aVBvcHVsYXRpb25TSURpc2Vhc2VNb2RlbEl0ZW1Qcm92aWRlcgorCWltcGxlbWVudHMKKwkJSUVkaXRpbmdEb21haW5JdGVtUHJvdmlkZXIsCisJCUlTdHJ1Y3R1cmVkSXRlbUNvbnRlbnRQcm92aWRlciwKKwkJSVRyZWVJdGVtQ29udGVudFByb3ZpZGVyLAorCQlJSXRlbUxhYmVsUHJvdmlkZXIsCisJCUlJdGVtUHJvcGVydHlTb3VyY2UgeworCS8qKgorCSAqIFRoaXMgY29uc3RydWN0cyBhbiBpbnN0YW5jZSBmcm9tIGEgZmFjdG9yeSBhbmQgYSBub3RpZmllci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgTXVsdGlQb3B1bGF0aW9uU0lSRGlzZWFzZU1vZGVsSXRlbVByb3ZpZGVyKEFkYXB0ZXJGYWN0b3J5IGFkYXB0ZXJGYWN0b3J5KSB7CisJCXN1cGVyKGFkYXB0ZXJGYWN0b3J5KTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgdGhlIHByb3BlcnR5IGRlc2NyaXB0b3JzIGZvciB0aGUgYWRhcHRlZCBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgTGlzdDxJSXRlbVByb3BlcnR5RGVzY3JpcHRvcj4gZ2V0UHJvcGVydHlEZXNjcmlwdG9ycyhPYmplY3Qgb2JqZWN0KSB7CisJCWlmIChpdGVtUHJvcGVydHlEZXNjcmlwdG9ycyA9PSBudWxsKSB7CisJCQlzdXBlci5nZXRQcm9wZXJ0eURlc2NyaXB0b3JzKG9iamVjdCk7CisKKwkJCWFkZEltbXVuaXR5TG9zc1JhdGVQcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0KTsKKwkJfQorCQlyZXR1cm4gaXRlbVByb3BlcnR5RGVzY3JpcHRvcnM7CisJfQorCisJLyoqCisJICogVGhpcyBhZGRzIGEgcHJvcGVydHkgZGVzY3JpcHRvciBmb3IgdGhlIEltbXVuaXR5IExvc3MgUmF0ZSBmZWF0dXJlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIGFkZEltbXVuaXR5TG9zc1JhdGVQcm9wZXJ0eURlc2NyaXB0b3IoT2JqZWN0IG9iamVjdCkgeworCQlpdGVtUHJvcGVydHlEZXNjcmlwdG9ycy5hZGQKKwkJCShjcmVhdGVJdGVtUHJvcGVydHlEZXNjcmlwdG9yCisJCQkJKCgoQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSlhZGFwdGVyRmFjdG9yeSkuZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCksCisJCQkJIGdldFJlc291cmNlTG9jYXRvcigpLAorCQkJCSBnZXRTdHJpbmcoIl9VSV9NdWx0aVBvcHVsYXRpb25TSVJEaXNlYXNlTW9kZWxfaW1tdW5pdHlMb3NzUmF0ZV9mZWF0dXJlIiksCisJCQkJIGdldFN0cmluZygiX1VJX1Byb3BlcnR5RGVzY3JpcHRvcl9kZXNjcmlwdGlvbiIsICJfVUlfTXVsdGlQb3B1bGF0aW9uU0lSRGlzZWFzZU1vZGVsX2ltbXVuaXR5TG9zc1JhdGVfZmVhdHVyZSIsICJfVUlfTXVsdGlQb3B1bGF0aW9uU0lSRGlzZWFzZU1vZGVsX3R5cGUiKSwKKwkJCQkgTXVsdGlwb3B1bGF0aW9uUGFja2FnZS5MaXRlcmFscy5NVUxUSV9QT1BVTEFUSU9OX1NJUl9ESVNFQVNFX01PREVMX19JTU1VTklUWV9MT1NTX1JBVEUsCisJCQkJIHRydWUsCisJCQkJIGZhbHNlLAorCQkJCSBmYWxzZSwKKwkJCQkgbnVsbCwKKwkJCQkgbnVsbCwKKwkJCQkgbnVsbCkpOworCX0KKworCS8qKgorCSAqIFRoaXMgc3BlY2lmaWVzIGhvdyB0byBpbXBsZW1lbnQge0BsaW5rICNnZXRDaGlsZHJlbn0gYW5kIGlzIHVzZWQgdG8gZGVkdWNlIGFuIGFwcHJvcHJpYXRlIGZlYXR1cmUgZm9yIGFuCisJICoge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lZGl0LmNvbW1hbmQuQWRkQ29tbWFuZH0sIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuZWRpdC5jb21tYW5kLlJlbW92ZUNvbW1hbmR9IG9yCisJICoge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lZGl0LmNvbW1hbmQuTW92ZUNvbW1hbmR9IGluIHtAbGluayAjY3JlYXRlQ29tbWFuZH0uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIENvbGxlY3Rpb248PyBleHRlbmRzIEVTdHJ1Y3R1cmFsRmVhdHVyZT4gZ2V0Q2hpbGRyZW5GZWF0dXJlcyhPYmplY3Qgb2JqZWN0KSB7CisJCWlmIChjaGlsZHJlbkZlYXR1cmVzID09IG51bGwpIHsKKwkJCXN1cGVyLmdldENoaWxkcmVuRmVhdHVyZXMob2JqZWN0KTsKKwkJCWNoaWxkcmVuRmVhdHVyZXMuYWRkKE11bHRpcG9wdWxhdGlvblBhY2thZ2UuTGl0ZXJhbHMuTVVMVElfUE9QVUxBVElPTl9TSVJfRElTRUFTRV9NT0RFTF9fSU1NVU5JVFlfTE9TU19SQVRFKTsKKwkJfQorCQlyZXR1cm4gY2hpbGRyZW5GZWF0dXJlczsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgRVN0cnVjdHVyYWxGZWF0dXJlIGdldENoaWxkRmVhdHVyZShPYmplY3Qgb2JqZWN0LCBPYmplY3QgY2hpbGQpIHsKKwkJLy8gQ2hlY2sgdGhlIHR5cGUgb2YgdGhlIHNwZWNpZmllZCBjaGlsZCBvYmplY3QgYW5kIHJldHVybiB0aGUgcHJvcGVyIGZlYXR1cmUgdG8gdXNlIGZvcgorCQkvLyBhZGRpbmcgKHNlZSB7QGxpbmsgQWRkQ29tbWFuZH0pIGl0IGFzIGEgY2hpbGQuCisKKwkJcmV0dXJuIHN1cGVyLmdldENoaWxkRmVhdHVyZShvYmplY3QsIGNoaWxkKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgTXVsdGlQb3B1bGF0aW9uU0lSRGlzZWFzZU1vZGVsLmdpZi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIE9iamVjdCBnZXRJbWFnZShPYmplY3Qgb2JqZWN0KSB7CisJCXJldHVybiBvdmVybGF5SW1hZ2Uob2JqZWN0LCBnZXRSZXNvdXJjZUxvY2F0b3IoKS5nZXRJbWFnZSgiZnVsbC9jdXN0b20xNi9kaXNlYXNlLmdpZiIpKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgdGhlIGxhYmVsIHRleHQgZm9yIHRoZSBhZGFwdGVkIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgU3RyaW5nIGdldFRleHQoT2JqZWN0IG9iamVjdCkgeworCQlyZXR1cm4gc3VwZXIuZ2V0VGV4dChvYmplY3QpOworCX0KKworCS8qKgorCSAqIFRoaXMgaGFuZGxlcyBtb2RlbCBub3RpZmljYXRpb25zIGJ5IGNhbGxpbmcge0BsaW5rICN1cGRhdGVDaGlsZHJlbn0gdG8gdXBkYXRlIGFueSBjYWNoZWQKKwkgKiBjaGlsZHJlbiBhbmQgYnkgY3JlYXRpbmcgYSB2aWV3ZXIgbm90aWZpY2F0aW9uLCB3aGljaCBpdCBwYXNzZXMgdG8ge0BsaW5rICNmaXJlTm90aWZ5Q2hhbmdlZH0uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgbm90aWZ5Q2hhbmdlZChOb3RpZmljYXRpb24gbm90aWZpY2F0aW9uKSB7CisJCXVwZGF0ZUNoaWxkcmVuKG5vdGlmaWNhdGlvbik7CisKKwkJc3dpdGNoIChub3RpZmljYXRpb24uZ2V0RmVhdHVyZUlEKE11bHRpUG9wdWxhdGlvblNJUkRpc2Vhc2VNb2RlbC5jbGFzcykpIHsKKwkJCWNhc2UgTXVsdGlwb3B1bGF0aW9uUGFja2FnZS5NVUxUSV9QT1BVTEFUSU9OX1NJUl9ESVNFQVNFX01PREVMX19JTU1VTklUWV9MT1NTX1JBVEU6CisJCQkJZmlyZU5vdGlmeUNoYW5nZWQobmV3IFZpZXdlck5vdGlmaWNhdGlvbihub3RpZmljYXRpb24sIG5vdGlmaWNhdGlvbi5nZXROb3RpZmllcigpLCB0cnVlLCBmYWxzZSkpOworCQkJCXJldHVybjsKKwkJfQorCQlzdXBlci5ub3RpZnlDaGFuZ2VkKG5vdGlmaWNhdGlvbik7CisJfQorCisJLyoqCisJICogVGhpcyBhZGRzIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuZWRpdC5jb21tYW5kLkNvbW1hbmRQYXJhbWV0ZXJ9cyBkZXNjcmliaW5nIHRoZSBjaGlsZHJlbgorCSAqIHRoYXQgY2FuIGJlIGNyZWF0ZWQgdW5kZXIgdGhpcyBvYmplY3QuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgY29sbGVjdE5ld0NoaWxkRGVzY3JpcHRvcnMoQ29sbGVjdGlvbjxPYmplY3Q+IG5ld0NoaWxkRGVzY3JpcHRvcnMsIE9iamVjdCBvYmplY3QpIHsKKwkJc3VwZXIuY29sbGVjdE5ld0NoaWxkRGVzY3JpcHRvcnMobmV3Q2hpbGREZXNjcmlwdG9ycywgb2JqZWN0KTsKKworCQluZXdDaGlsZERlc2NyaXB0b3JzLmFkZAorCQkJKGNyZWF0ZUNoaWxkUGFyYW1ldGVyCisJCQkJKE11bHRpcG9wdWxhdGlvblBhY2thZ2UuTGl0ZXJhbHMuTVVMVElfUE9QVUxBVElPTl9TSVJfRElTRUFTRV9NT0RFTF9fSU1NVU5JVFlfTE9TU19SQVRFLAorCQkJCSBDb21tb25GYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVEb3VibGVWYWx1ZUxpc3QoKSkpOworCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyB0aGUgbGFiZWwgdGV4dCBmb3Ige0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lZGl0LmNvbW1hbmQuQ3JlYXRlQ2hpbGRDb21tYW5kfS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgU3RyaW5nIGdldENyZWF0ZUNoaWxkVGV4dChPYmplY3Qgb3duZXIsIE9iamVjdCBmZWF0dXJlLCBPYmplY3QgY2hpbGQsIENvbGxlY3Rpb248Pz4gc2VsZWN0aW9uKSB7CisJCU9iamVjdCBjaGlsZEZlYXR1cmUgPSBmZWF0dXJlOworCQlPYmplY3QgY2hpbGRPYmplY3QgPSBjaGlsZDsKKworCQlib29sZWFuIHF1YWxpZnkgPQorCQkJY2hpbGRGZWF0dXJlID09IE11bHRpcG9wdWxhdGlvblBhY2thZ2UuTGl0ZXJhbHMuTVVMVElfUE9QVUxBVElPTl9TSV9ESVNFQVNFX01PREVMX19SRUNPVkVSWV9SQVRFIHx8CisJCQljaGlsZEZlYXR1cmUgPT0gTXVsdGlwb3B1bGF0aW9uUGFja2FnZS5MaXRlcmFscy5NVUxUSV9QT1BVTEFUSU9OX1NJX0RJU0VBU0VfTU9ERUxfX0lORkVDVElPVVNfTU9SVEFMSVRZX1JBVEUgfHwKKwkJCWNoaWxkRmVhdHVyZSA9PSBNdWx0aXBvcHVsYXRpb25QYWNrYWdlLkxpdGVyYWxzLk1VTFRJX1BPUFVMQVRJT05fU0lSX0RJU0VBU0VfTU9ERUxfX0lNTVVOSVRZX0xPU1NfUkFURTsKKworCQlpZiAocXVhbGlmeSkgeworCQkJcmV0dXJuIGdldFN0cmluZworCQkJCSgiX1VJX0NyZWF0ZUNoaWxkX3RleHQyIiwKKwkJCQkgbmV3IE9iamVjdFtdIHsgZ2V0VHlwZVRleHQoY2hpbGRPYmplY3QpLCBnZXRGZWF0dXJlVGV4dChjaGlsZEZlYXR1cmUpLCBnZXRUeXBlVGV4dChvd25lcikgfSk7CisJCX0KKwkJcmV0dXJuIHN1cGVyLmdldENyZWF0ZUNoaWxkVGV4dChvd25lciwgZmVhdHVyZSwgY2hpbGQsIHNlbGVjdGlvbik7CisJfQorCit9CmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5tdWx0aXBvcHVsYXRpb24vc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9tdWx0aXBvcHVsYXRpb24vcHJvdmlkZXIvTXVsdGlQb3B1bGF0aW9uU2Vhc29uYWxEaXNlYXNlTW9kZWxJdGVtUHJvdmlkZXIuamF2YSBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLm11bHRpcG9wdWxhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL211bHRpcG9wdWxhdGlvbi9wcm92aWRlci9NdWx0aVBvcHVsYXRpb25TZWFzb25hbERpc2Vhc2VNb2RlbEl0ZW1Qcm92aWRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhlYTVmN2MKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5tdWx0aXBvcHVsYXRpb24vc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9tdWx0aXBvcHVsYXRpb24vcHJvdmlkZXIvTXVsdGlQb3B1bGF0aW9uU2Vhc29uYWxEaXNlYXNlTW9kZWxJdGVtUHJvdmlkZXIuamF2YQpAQCAtMCwwICsxLDI0MyBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMubXVsdGlwb3B1bGF0aW9uLnByb3ZpZGVyOw0KKw0KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIA0KKyAqIENvcHlyaWdodCAoYykgMjAxMSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4gDQorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyANCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgDQorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQgDQorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwgDQorICogDQorICogQ29udHJpYnV0b3JzOiANCisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIA0KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KKw0KK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsNCitpbXBvcnQgamF2YS51dGlsLkxpc3Q7DQorDQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LkFkYXB0ZXJGYWN0b3J5Ow0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb247DQorDQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FU3RydWN0dXJhbEZlYXR1cmU7DQorDQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkNvbXBvc2VhYmxlQWRhcHRlckZhY3Rvcnk7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklFZGl0aW5nRG9tYWluSXRlbVByb3ZpZGVyOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbUxhYmVsUHJvdmlkZXI7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtUHJvcGVydHlEZXNjcmlwdG9yOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbVByb3BlcnR5U291cmNlOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JU3RydWN0dXJlZEl0ZW1Db250ZW50UHJvdmlkZXI7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklUcmVlSXRlbUNvbnRlbnRQcm92aWRlcjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSXRlbVByb3BlcnR5RGVzY3JpcHRvcjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuVmlld2VyTm90aWZpY2F0aW9uOw0KKw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLkNvbW1vbkZhY3Rvcnk7DQorDQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5tdWx0aXBvcHVsYXRpb24uTXVsdGlQb3B1bGF0aW9uU2Vhc29uYWxEaXNlYXNlTW9kZWw7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5tdWx0aXBvcHVsYXRpb24uTXVsdGlwb3B1bGF0aW9uUGFja2FnZTsNCisNCisvKioNCisgKiBUaGlzIGlzIHRoZSBpdGVtIHByb3ZpZGVyIGFkYXB0ZXIgZm9yIGEge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5tdWx0aXBvcHVsYXRpb24uTXVsdGlQb3B1bGF0aW9uU2Vhc29uYWxEaXNlYXNlTW9kZWx9IG9iamVjdC4NCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKyAqIEBnZW5lcmF0ZWQNCisgKi8NCitwdWJsaWMgY2xhc3MgTXVsdGlQb3B1bGF0aW9uU2Vhc29uYWxEaXNlYXNlTW9kZWxJdGVtUHJvdmlkZXINCisJZXh0ZW5kcyBNdWx0aVBvcHVsYXRpb25TRUlSRGlzZWFzZU1vZGVsSXRlbVByb3ZpZGVyDQorCWltcGxlbWVudHMNCisJCUlFZGl0aW5nRG9tYWluSXRlbVByb3ZpZGVyLA0KKwkJSVN0cnVjdHVyZWRJdGVtQ29udGVudFByb3ZpZGVyLA0KKwkJSVRyZWVJdGVtQ29udGVudFByb3ZpZGVyLA0KKwkJSUl0ZW1MYWJlbFByb3ZpZGVyLA0KKwkJSUl0ZW1Qcm9wZXJ0eVNvdXJjZSB7DQorCS8qKg0KKwkgKiBUaGlzIGNvbnN0cnVjdHMgYW4gaW5zdGFuY2UgZnJvbSBhIGZhY3RvcnkgYW5kIGEgbm90aWZpZXIuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgTXVsdGlQb3B1bGF0aW9uU2Vhc29uYWxEaXNlYXNlTW9kZWxJdGVtUHJvdmlkZXIoQWRhcHRlckZhY3RvcnkgYWRhcHRlckZhY3RvcnkpIHsNCisJCXN1cGVyKGFkYXB0ZXJGYWN0b3J5KTsNCisJfQ0KKw0KKwkvKioNCisJICogVGhpcyByZXR1cm5zIHRoZSBwcm9wZXJ0eSBkZXNjcmlwdG9ycyBmb3IgdGhlIGFkYXB0ZWQgY2xhc3MuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlAT3ZlcnJpZGUNCisJcHVibGljIExpc3Q8SUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I+IGdldFByb3BlcnR5RGVzY3JpcHRvcnMoT2JqZWN0IG9iamVjdCkgew0KKwkJaWYgKGl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzID09IG51bGwpIHsNCisJCQlzdXBlci5nZXRQcm9wZXJ0eURlc2NyaXB0b3JzKG9iamVjdCk7DQorDQorCQkJYWRkTW9kdWxhdGlvblBvaW50c1Byb3BlcnR5RGVzY3JpcHRvcihvYmplY3QpOw0KKwkJCWFkZFVzZVNwbGluZUludGVycG9sYXRpb25Qcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0KTsNCisJCX0NCisJCXJldHVybiBpdGVtUHJvcGVydHlEZXNjcmlwdG9yczsNCisJfQ0KKw0KKwkvKioNCisJICogVGhpcyBhZGRzIGEgcHJvcGVydHkgZGVzY3JpcHRvciBmb3IgdGhlIE1vZHVsYXRpb24gUG9pbnRzIGZlYXR1cmUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgdm9pZCBhZGRNb2R1bGF0aW9uUG9pbnRzUHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdCBvYmplY3QpIHsNCisJCWl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzLmFkZA0KKwkJCShjcmVhdGVJdGVtUHJvcGVydHlEZXNjcmlwdG9yDQorCQkJCSgoKENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnkpYWRhcHRlckZhY3RvcnkpLmdldFJvb3RBZGFwdGVyRmFjdG9yeSgpLA0KKwkJCQkgZ2V0UmVzb3VyY2VMb2NhdG9yKCksDQorCQkJCSBnZXRTdHJpbmcoIl9VSV9NdWx0aVBvcHVsYXRpb25TZWFzb25hbERpc2Vhc2VNb2RlbF9tb2R1bGF0aW9uUG9pbnRzX2ZlYXR1cmUiKSwNCisJCQkJIGdldFN0cmluZygiX1VJX1Byb3BlcnR5RGVzY3JpcHRvcl9kZXNjcmlwdGlvbiIsICJfVUlfTXVsdGlQb3B1bGF0aW9uU2Vhc29uYWxEaXNlYXNlTW9kZWxfbW9kdWxhdGlvblBvaW50c19mZWF0dXJlIiwgIl9VSV9NdWx0aVBvcHVsYXRpb25TZWFzb25hbERpc2Vhc2VNb2RlbF90eXBlIiksDQorCQkJCSBNdWx0aXBvcHVsYXRpb25QYWNrYWdlLkxpdGVyYWxzLk1VTFRJX1BPUFVMQVRJT05fU0VBU09OQUxfRElTRUFTRV9NT0RFTF9fTU9EVUxBVElPTl9QT0lOVFMsDQorCQkJCSB0cnVlLA0KKwkJCQkgZmFsc2UsDQorCQkJCSBmYWxzZSwNCisJCQkJIG51bGwsDQorCQkJCSBudWxsLA0KKwkJCQkgbnVsbCkpOw0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIGFkZHMgYSBwcm9wZXJ0eSBkZXNjcmlwdG9yIGZvciB0aGUgVXNlIFNwbGluZSBJbnRlcnBvbGF0aW9uIGZlYXR1cmUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgdm9pZCBhZGRVc2VTcGxpbmVJbnRlcnBvbGF0aW9uUHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdCBvYmplY3QpIHsNCisJCWl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzLmFkZA0KKwkJCShjcmVhdGVJdGVtUHJvcGVydHlEZXNjcmlwdG9yDQorCQkJCSgoKENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnkpYWRhcHRlckZhY3RvcnkpLmdldFJvb3RBZGFwdGVyRmFjdG9yeSgpLA0KKwkJCQkgZ2V0UmVzb3VyY2VMb2NhdG9yKCksDQorCQkJCSBnZXRTdHJpbmcoIl9VSV9NdWx0aVBvcHVsYXRpb25TZWFzb25hbERpc2Vhc2VNb2RlbF91c2VTcGxpbmVJbnRlcnBvbGF0aW9uX2ZlYXR1cmUiKSwNCisJCQkJIGdldFN0cmluZygiX1VJX1Byb3BlcnR5RGVzY3JpcHRvcl9kZXNjcmlwdGlvbiIsICJfVUlfTXVsdGlQb3B1bGF0aW9uU2Vhc29uYWxEaXNlYXNlTW9kZWxfdXNlU3BsaW5lSW50ZXJwb2xhdGlvbl9mZWF0dXJlIiwgIl9VSV9NdWx0aVBvcHVsYXRpb25TZWFzb25hbERpc2Vhc2VNb2RlbF90eXBlIiksDQorCQkJCSBNdWx0aXBvcHVsYXRpb25QYWNrYWdlLkxpdGVyYWxzLk1VTFRJX1BPUFVMQVRJT05fU0VBU09OQUxfRElTRUFTRV9NT0RFTF9fVVNFX1NQTElORV9JTlRFUlBPTEFUSU9OLA0KKwkJCQkgdHJ1ZSwNCisJCQkJIGZhbHNlLA0KKwkJCQkgZmFsc2UsDQorCQkJCSBJdGVtUHJvcGVydHlEZXNjcmlwdG9yLkJPT0xFQU5fVkFMVUVfSU1BR0UsDQorCQkJCSBudWxsLA0KKwkJCQkgbnVsbCkpOw0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIHNwZWNpZmllcyBob3cgdG8gaW1wbGVtZW50IHtAbGluayAjZ2V0Q2hpbGRyZW59IGFuZCBpcyB1c2VkIHRvIGRlZHVjZSBhbiBhcHByb3ByaWF0ZSBmZWF0dXJlIGZvciBhbg0KKwkgKiB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmVkaXQuY29tbWFuZC5BZGRDb21tYW5kfSwge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lZGl0LmNvbW1hbmQuUmVtb3ZlQ29tbWFuZH0gb3INCisJICoge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lZGl0LmNvbW1hbmQuTW92ZUNvbW1hbmR9IGluIHtAbGluayAjY3JlYXRlQ29tbWFuZH0uDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlAT3ZlcnJpZGUNCisJcHVibGljIENvbGxlY3Rpb248PyBleHRlbmRzIEVTdHJ1Y3R1cmFsRmVhdHVyZT4gZ2V0Q2hpbGRyZW5GZWF0dXJlcyhPYmplY3Qgb2JqZWN0KSB7DQorCQlpZiAoY2hpbGRyZW5GZWF0dXJlcyA9PSBudWxsKSB7DQorCQkJc3VwZXIuZ2V0Q2hpbGRyZW5GZWF0dXJlcyhvYmplY3QpOw0KKwkJCWNoaWxkcmVuRmVhdHVyZXMuYWRkKE11bHRpcG9wdWxhdGlvblBhY2thZ2UuTGl0ZXJhbHMuTVVMVElfUE9QVUxBVElPTl9TRUFTT05BTF9ESVNFQVNFX01PREVMX19NT0RVTEFUSU9OX1BPSU5UUyk7DQorCQl9DQorCQlyZXR1cm4gY2hpbGRyZW5GZWF0dXJlczsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCUBPdmVycmlkZQ0KKwlwcm90ZWN0ZWQgRVN0cnVjdHVyYWxGZWF0dXJlIGdldENoaWxkRmVhdHVyZShPYmplY3Qgb2JqZWN0LCBPYmplY3QgY2hpbGQpIHsNCisJCS8vIENoZWNrIHRoZSB0eXBlIG9mIHRoZSBzcGVjaWZpZWQgY2hpbGQgb2JqZWN0IGFuZCByZXR1cm4gdGhlIHByb3BlciBmZWF0dXJlIHRvIHVzZSBmb3INCisJCS8vIGFkZGluZyAoc2VlIHtAbGluayBBZGRDb21tYW5kfSkgaXQgYXMgYSBjaGlsZC4NCisNCisJCXJldHVybiBzdXBlci5nZXRDaGlsZEZlYXR1cmUob2JqZWN0LCBjaGlsZCk7DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgcmV0dXJucyBNdWx0aVBvcHVsYXRpb25TZWFzb25hbERpc2Vhc2VNb2RlbC5naWYuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlAT3ZlcnJpZGUNCisJcHVibGljIE9iamVjdCBnZXRJbWFnZShPYmplY3Qgb2JqZWN0KSB7DQorCQlyZXR1cm4gb3ZlcmxheUltYWdlKG9iamVjdCwgZ2V0UmVzb3VyY2VMb2NhdG9yKCkuZ2V0SW1hZ2UoImZ1bGwvb2JqMTYvTXVsdGlQb3B1bGF0aW9uU2Vhc29uYWxEaXNlYXNlTW9kZWwiKSk7DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgcmV0dXJucyB0aGUgbGFiZWwgdGV4dCBmb3IgdGhlIGFkYXB0ZWQgY2xhc3MuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlAT3ZlcnJpZGUNCisJcHVibGljIFN0cmluZyBnZXRUZXh0KE9iamVjdCBvYmplY3QpIHsNCisJCVN0cmluZyBsYWJlbCA9ICgoTXVsdGlQb3B1bGF0aW9uU2Vhc29uYWxEaXNlYXNlTW9kZWwpb2JqZWN0KS5nZXREaXNlYXNlTmFtZSgpOw0KKwkJcmV0dXJuIGxhYmVsID09IG51bGwgfHwgbGFiZWwubGVuZ3RoKCkgPT0gMCA/DQorCQkJZ2V0U3RyaW5nKCJfVUlfTXVsdGlQb3B1bGF0aW9uU2Vhc29uYWxEaXNlYXNlTW9kZWxfdHlwZSIpIDoNCisJCQlnZXRTdHJpbmcoIl9VSV9NdWx0aVBvcHVsYXRpb25TZWFzb25hbERpc2Vhc2VNb2RlbF90eXBlIikgKyAiICIgKyBsYWJlbDsNCisJfQ0KKw0KKwkvKioNCisJICogVGhpcyBoYW5kbGVzIG1vZGVsIG5vdGlmaWNhdGlvbnMgYnkgY2FsbGluZyB7QGxpbmsgI3VwZGF0ZUNoaWxkcmVufSB0byB1cGRhdGUgYW55IGNhY2hlZA0KKwkgKiBjaGlsZHJlbiBhbmQgYnkgY3JlYXRpbmcgYSB2aWV3ZXIgbm90aWZpY2F0aW9uLCB3aGljaCBpdCBwYXNzZXMgdG8ge0BsaW5rICNmaXJlTm90aWZ5Q2hhbmdlZH0uDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlAT3ZlcnJpZGUNCisJcHVibGljIHZvaWQgbm90aWZ5Q2hhbmdlZChOb3RpZmljYXRpb24gbm90aWZpY2F0aW9uKSB7DQorCQl1cGRhdGVDaGlsZHJlbihub3RpZmljYXRpb24pOw0KKw0KKwkJc3dpdGNoIChub3RpZmljYXRpb24uZ2V0RmVhdHVyZUlEKE11bHRpUG9wdWxhdGlvblNlYXNvbmFsRGlzZWFzZU1vZGVsLmNsYXNzKSkgew0KKwkJCWNhc2UgTXVsdGlwb3B1bGF0aW9uUGFja2FnZS5NVUxUSV9QT1BVTEFUSU9OX1NFQVNPTkFMX0RJU0VBU0VfTU9ERUxfX1VTRV9TUExJTkVfSU5URVJQT0xBVElPTjoNCisJCQkJZmlyZU5vdGlmeUNoYW5nZWQobmV3IFZpZXdlck5vdGlmaWNhdGlvbihub3RpZmljYXRpb24sIG5vdGlmaWNhdGlvbi5nZXROb3RpZmllcigpLCBmYWxzZSwgdHJ1ZSkpOw0KKwkJCQlyZXR1cm47DQorCQkJY2FzZSBNdWx0aXBvcHVsYXRpb25QYWNrYWdlLk1VTFRJX1BPUFVMQVRJT05fU0VBU09OQUxfRElTRUFTRV9NT0RFTF9fTU9EVUxBVElPTl9QT0lOVFM6DQorCQkJCWZpcmVOb3RpZnlDaGFuZ2VkKG5ldyBWaWV3ZXJOb3RpZmljYXRpb24obm90aWZpY2F0aW9uLCBub3RpZmljYXRpb24uZ2V0Tm90aWZpZXIoKSwgdHJ1ZSwgZmFsc2UpKTsNCisJCQkJcmV0dXJuOw0KKwkJfQ0KKwkJc3VwZXIubm90aWZ5Q2hhbmdlZChub3RpZmljYXRpb24pOw0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIGFkZHMge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lZGl0LmNvbW1hbmQuQ29tbWFuZFBhcmFtZXRlcn1zIGRlc2NyaWJpbmcgdGhlIGNoaWxkcmVuDQorCSAqIHRoYXQgY2FuIGJlIGNyZWF0ZWQgdW5kZXIgdGhpcyBvYmplY3QuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlAT3ZlcnJpZGUNCisJcHJvdGVjdGVkIHZvaWQgY29sbGVjdE5ld0NoaWxkRGVzY3JpcHRvcnMoQ29sbGVjdGlvbjxPYmplY3Q+IG5ld0NoaWxkRGVzY3JpcHRvcnMsIE9iamVjdCBvYmplY3QpIHsNCisJCXN1cGVyLmNvbGxlY3ROZXdDaGlsZERlc2NyaXB0b3JzKG5ld0NoaWxkRGVzY3JpcHRvcnMsIG9iamVjdCk7DQorDQorCQluZXdDaGlsZERlc2NyaXB0b3JzLmFkZA0KKwkJCShjcmVhdGVDaGlsZFBhcmFtZXRlcg0KKwkJCQkoTXVsdGlwb3B1bGF0aW9uUGFja2FnZS5MaXRlcmFscy5NVUxUSV9QT1BVTEFUSU9OX1NFQVNPTkFMX0RJU0VBU0VfTU9ERUxfX01PRFVMQVRJT05fUE9JTlRTLA0KKwkJCQkgQ29tbW9uRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlRG91YmxlVmFsdWVNYXRyaXgoKSkpOw0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIHJldHVybnMgdGhlIGxhYmVsIHRleHQgZm9yIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuZWRpdC5jb21tYW5kLkNyZWF0ZUNoaWxkQ29tbWFuZH0uDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlAT3ZlcnJpZGUNCisJcHVibGljIFN0cmluZyBnZXRDcmVhdGVDaGlsZFRleHQoT2JqZWN0IG93bmVyLCBPYmplY3QgZmVhdHVyZSwgT2JqZWN0IGNoaWxkLCBDb2xsZWN0aW9uPD8+IHNlbGVjdGlvbikgew0KKwkJT2JqZWN0IGNoaWxkRmVhdHVyZSA9IGZlYXR1cmU7DQorCQlPYmplY3QgY2hpbGRPYmplY3QgPSBjaGlsZDsNCisNCisJCWJvb2xlYW4gcXVhbGlmeSA9DQorCQkJY2hpbGRGZWF0dXJlID09IE11bHRpcG9wdWxhdGlvblBhY2thZ2UuTGl0ZXJhbHMuTVVMVElfUE9QVUxBVElPTl9TSV9ESVNFQVNFX01PREVMX19UUkFOU01JU1NJT05fUkFURSB8fA0KKwkJCWNoaWxkRmVhdHVyZSA9PSBNdWx0aXBvcHVsYXRpb25QYWNrYWdlLkxpdGVyYWxzLk1VTFRJX1BPUFVMQVRJT05fU0VBU09OQUxfRElTRUFTRV9NT0RFTF9fTU9EVUxBVElPTl9QT0lOVFMgfHwNCisJCQljaGlsZEZlYXR1cmUgPT0gTXVsdGlwb3B1bGF0aW9uUGFja2FnZS5MaXRlcmFscy5NVUxUSV9QT1BVTEFUSU9OX1NJX0RJU0VBU0VfTU9ERUxfX1JFQ09WRVJZX1JBVEUgfHwNCisJCQljaGlsZEZlYXR1cmUgPT0gTXVsdGlwb3B1bGF0aW9uUGFja2FnZS5MaXRlcmFscy5NVUxUSV9QT1BVTEFUSU9OX1NJX0RJU0VBU0VfTU9ERUxfX0lORkVDVElPVVNfTU9SVEFMSVRZX1JBVEUgfHwNCisJCQljaGlsZEZlYXR1cmUgPT0gTXVsdGlwb3B1bGF0aW9uUGFja2FnZS5MaXRlcmFscy5NVUxUSV9QT1BVTEFUSU9OX1NJUl9ESVNFQVNFX01PREVMX19JTU1VTklUWV9MT1NTX1JBVEUgfHwNCisJCQljaGlsZEZlYXR1cmUgPT0gTXVsdGlwb3B1bGF0aW9uUGFja2FnZS5MaXRlcmFscy5NVUxUSV9QT1BVTEFUSU9OX1NFSVJfRElTRUFTRV9NT0RFTF9fSU5DVUJBVElPTl9SQVRFOw0KKw0KKwkJaWYgKHF1YWxpZnkpIHsNCisJCQlyZXR1cm4gZ2V0U3RyaW5nDQorCQkJCSgiX1VJX0NyZWF0ZUNoaWxkX3RleHQyIiwNCisJCQkJIG5ldyBPYmplY3RbXSB7IGdldFR5cGVUZXh0KGNoaWxkT2JqZWN0KSwgZ2V0RmVhdHVyZVRleHQoY2hpbGRGZWF0dXJlKSwgZ2V0VHlwZVRleHQob3duZXIpIH0pOw0KKwkJfQ0KKwkJcmV0dXJuIHN1cGVyLmdldENyZWF0ZUNoaWxkVGV4dChvd25lciwgZmVhdHVyZSwgY2hpbGQsIHNlbGVjdGlvbik7DQorCX0NCisNCit9DQpkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMubXVsdGlwb3B1bGF0aW9uL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvbXVsdGlwb3B1bGF0aW9uL3Byb3ZpZGVyL011bHRpcG9wdWxhdGlvbkVkaXRQbHVnaW4uamF2YSBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLm11bHRpcG9wdWxhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL211bHRpcG9wdWxhdGlvbi9wcm92aWRlci9NdWx0aXBvcHVsYXRpb25FZGl0UGx1Z2luLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDQ2ZGQ1NAotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLm11bHRpcG9wdWxhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL211bHRpcG9wdWxhdGlvbi9wcm92aWRlci9NdWx0aXBvcHVsYXRpb25FZGl0UGx1Z2luLmphdmEKQEAgLTAsMCArMSwxMDcgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLm11bHRpcG9wdWxhdGlvbi5wcm92aWRlcjsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAxMCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLkVNRlBsdWdpbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuUmVzb3VyY2VMb2NhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5wcm92aWRlci5FY29yZUVkaXRQbHVnaW47CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5wcm92aWRlci5Db3JlRWRpdFBsdWdpbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmVkZ2VzLnByb3ZpZGVyLkRlZmluaXRpb25zRWRpdFBsdWdpbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQucHJvdmlkZXIuRGlzZWFzZW1vZGVsc0VkaXRQbHVnaW47CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLnByb3ZpZGVyLlN0YW5kYXJkRWRpdFBsdWdpbjsKKworLyoqCisgKiBUaGlzIGlzIHRoZSBjZW50cmFsIHNpbmdsZXRvbiBmb3IgdGhlIE11bHRpcG9wdWxhdGlvbiBlZGl0IHBsdWdpbi4KKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGZpbmFsIGNsYXNzIE11bHRpcG9wdWxhdGlvbkVkaXRQbHVnaW4gZXh0ZW5kcyBFTUZQbHVnaW4geworCS8qKgorCSAqIEtlZXAgdHJhY2sgb2YgdGhlIHNpbmdsZXRvbi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIE11bHRpcG9wdWxhdGlvbkVkaXRQbHVnaW4gSU5TVEFOQ0UgPSBuZXcgTXVsdGlwb3B1bGF0aW9uRWRpdFBsdWdpbigpOworCQorCS8qKgorCSAqIEtlZXAgdHJhY2sgb2YgdGhlIHNpbmdsZXRvbi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcml2YXRlIHN0YXRpYyBJbXBsZW1lbnRhdGlvbiBwbHVnaW47CisKKwkvKioKKwkgKiBDcmVhdGUgdGhlIGluc3RhbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBNdWx0aXBvcHVsYXRpb25FZGl0UGx1Z2luKCkgeworCQlzdXBlcgorCQkgIChuZXcgUmVzb3VyY2VMb2NhdG9yIFtdIHsKKwkJICAgICBEaXNlYXNlbW9kZWxzRWRpdFBsdWdpbi5JTlNUQU5DRSwKKwkJICAgICBDb3JlRWRpdFBsdWdpbi5JTlNUQU5DRSwKKwkJICAgICBFY29yZUVkaXRQbHVnaW4uSU5TVEFOQ0UsCisJCSAgICAgRGVmaW5pdGlvbnNFZGl0UGx1Z2luLklOU1RBTkNFLAorCQkgICAgIFN0YW5kYXJkRWRpdFBsdWdpbi5JTlNUQU5DRSwKKwkJICAgfSk7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgc2luZ2xldG9uIGluc3RhbmNlIG9mIHRoZSBFY2xpcHNlIHBsdWdpbi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIHNpbmdsZXRvbiBpbnN0YW5jZS4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIFJlc291cmNlTG9jYXRvciBnZXRQbHVnaW5SZXNvdXJjZUxvY2F0b3IoKSB7CisJCXJldHVybiBwbHVnaW47CisJfQorCQorCS8qKgorCSAqIFJldHVybnMgdGhlIHNpbmdsZXRvbiBpbnN0YW5jZSBvZiB0aGUgRWNsaXBzZSBwbHVnaW4uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBzaW5nbGV0b24gaW5zdGFuY2UuCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBzdGF0aWMgSW1wbGVtZW50YXRpb24gZ2V0UGx1Z2luKCkgeworCQlyZXR1cm4gcGx1Z2luOworCX0KKwkKKwkvKioKKwkgKiBUaGUgYWN0dWFsIGltcGxlbWVudGF0aW9uIG9mIHRoZSBFY2xpcHNlIDxiPlBsdWdpbjwvYj4uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHN0YXRpYyBjbGFzcyBJbXBsZW1lbnRhdGlvbiBleHRlbmRzIEVjbGlwc2VQbHVnaW4geworCQkvKioKKwkJICogQ3JlYXRlcyBhbiBpbnN0YW5jZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCXB1YmxpYyBJbXBsZW1lbnRhdGlvbigpIHsKKwkJCXN1cGVyKCk7CisKKwkJCS8vIFJlbWVtYmVyIHRoZSBzdGF0aWMgaW5zdGFuY2UuCisJCQkvLworCQkJcGx1Z2luID0gdGhpczsKKwkJfQorCX0KKworfQpkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMubXVsdGlwb3B1bGF0aW9uL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvbXVsdGlwb3B1bGF0aW9uL3Byb3ZpZGVyL011bHRpcG9wdWxhdGlvbkl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5LmphdmEgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5tdWx0aXBvcHVsYXRpb24vc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9tdWx0aXBvcHVsYXRpb24vcHJvdmlkZXIvTXVsdGlwb3B1bGF0aW9uSXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NzJhMDRjCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMubXVsdGlwb3B1bGF0aW9uL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvbXVsdGlwb3B1bGF0aW9uL3Byb3ZpZGVyL011bHRpcG9wdWxhdGlvbkl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5LmphdmEKQEAgLTAsMCArMSwyNzggQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLm11bHRpcG9wdWxhdGlvbi5wcm92aWRlcjsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAxMCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OworaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuQWRhcHRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuQ2hhbmdlTm90aWZpZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5Db21wb3NlZEFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklDaGFuZ2VOb3RpZmllcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JRGlzcG9zYWJsZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JRWRpdGluZ0RvbWFpbkl0ZW1Qcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbUxhYmVsUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1Qcm9wZXJ0eVNvdXJjZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JTm90aWZ5Q2hhbmdlZExpc3RlbmVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklTdHJ1Y3R1cmVkSXRlbUNvbnRlbnRQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JVHJlZUl0ZW1Db250ZW50UHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLm11bHRpcG9wdWxhdGlvbi51dGlsLk11bHRpcG9wdWxhdGlvbkFkYXB0ZXJGYWN0b3J5OworCisvKioKKyAqIFRoaXMgaXMgdGhlIGZhY3RvcnkgdGhhdCBpcyB1c2VkIHRvIHByb3ZpZGUgdGhlIGludGVyZmFjZXMgbmVlZGVkIHRvIHN1cHBvcnQgVmlld2Vycy4KKyAqIFRoZSBhZGFwdGVycyBnZW5lcmF0ZWQgYnkgdGhpcyBmYWN0b3J5IGNvbnZlcnQgRU1GIGFkYXB0ZXIgbm90aWZpY2F0aW9ucyBpbnRvIGNhbGxzIHRvIHtAbGluayAjZmlyZU5vdGlmeUNoYW5nZWQgZmlyZU5vdGlmeUNoYW5nZWR9LgorICogVGhlIGFkYXB0ZXJzIGFsc28gc3VwcG9ydCBFY2xpcHNlIHByb3BlcnR5IHNoZWV0cy4KKyAqIE5vdGUgdGhhdCBtb3N0IG9mIHRoZSBhZGFwdGVycyBhcmUgc2hhcmVkIGFtb25nIG11bHRpcGxlIGluc3RhbmNlcy4KKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIE11bHRpcG9wdWxhdGlvbkl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5IGV4dGVuZHMgTXVsdGlwb3B1bGF0aW9uQWRhcHRlckZhY3RvcnkgaW1wbGVtZW50cyBDb21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5LCBJQ2hhbmdlTm90aWZpZXIsIElEaXNwb3NhYmxlIHsKKwkvKioKKwkgKiBUaGlzIGtlZXBzIHRyYWNrIG9mIHRoZSByb290IGFkYXB0ZXIgZmFjdG9yeSB0aGF0IGRlbGVnYXRlcyB0byB0aGlzIGFkYXB0ZXIgZmFjdG9yeS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgQ29tcG9zZWRBZGFwdGVyRmFjdG9yeSBwYXJlbnRBZGFwdGVyRmFjdG9yeTsKKworCS8qKgorCSAqIFRoaXMgaXMgdXNlZCB0byBpbXBsZW1lbnQge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklDaGFuZ2VOb3RpZmllcn0uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIElDaGFuZ2VOb3RpZmllciBjaGFuZ2VOb3RpZmllciA9IG5ldyBDaGFuZ2VOb3RpZmllcigpOworCisJLyoqCisJICogVGhpcyBrZWVwcyB0cmFjayBvZiBhbGwgdGhlIHN1cHBvcnRlZCB0eXBlcyBjaGVja2VkIGJ5IHtAbGluayAjaXNGYWN0b3J5Rm9yVHlwZSBpc0ZhY3RvcnlGb3JUeXBlfS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgQ29sbGVjdGlvbjxPYmplY3Q+IHN1cHBvcnRlZFR5cGVzID0gbmV3IEFycmF5TGlzdDxPYmplY3Q+KCk7CisKKwkvKioKKwkgKiBUaGlzIGNvbnN0cnVjdHMgYW4gaW5zdGFuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIE11bHRpcG9wdWxhdGlvbkl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5KCkgeworCQlzdXBwb3J0ZWRUeXBlcy5hZGQoSUVkaXRpbmdEb21haW5JdGVtUHJvdmlkZXIuY2xhc3MpOworCQlzdXBwb3J0ZWRUeXBlcy5hZGQoSVN0cnVjdHVyZWRJdGVtQ29udGVudFByb3ZpZGVyLmNsYXNzKTsKKwkJc3VwcG9ydGVkVHlwZXMuYWRkKElUcmVlSXRlbUNvbnRlbnRQcm92aWRlci5jbGFzcyk7CisJCXN1cHBvcnRlZFR5cGVzLmFkZChJSXRlbUxhYmVsUHJvdmlkZXIuY2xhc3MpOworCQlzdXBwb3J0ZWRUeXBlcy5hZGQoSUl0ZW1Qcm9wZXJ0eVNvdXJjZS5jbGFzcyk7CisJfQorCisJLyoqCisJICogVGhpcyBrZWVwcyB0cmFjayBvZiB0aGUgb25lIGFkYXB0ZXIgdXNlZCBmb3IgYWxsIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMubXVsdGlwb3B1bGF0aW9uLk11bHRpUG9wdWxhdGlvblNJRGlzZWFzZU1vZGVsfSBpbnN0YW5jZXMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIE11bHRpUG9wdWxhdGlvblNJRGlzZWFzZU1vZGVsSXRlbVByb3ZpZGVyIG11bHRpUG9wdWxhdGlvblNJRGlzZWFzZU1vZGVsSXRlbVByb3ZpZGVyOworCisJLyoqCisJICogVGhpcyBjcmVhdGVzIGFuIGFkYXB0ZXIgZm9yIGEge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5tdWx0aXBvcHVsYXRpb24uTXVsdGlQb3B1bGF0aW9uU0lEaXNlYXNlTW9kZWx9LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZU11bHRpUG9wdWxhdGlvblNJRGlzZWFzZU1vZGVsQWRhcHRlcigpIHsKKwkJaWYgKG11bHRpUG9wdWxhdGlvblNJRGlzZWFzZU1vZGVsSXRlbVByb3ZpZGVyID09IG51bGwpIHsKKwkJCW11bHRpUG9wdWxhdGlvblNJRGlzZWFzZU1vZGVsSXRlbVByb3ZpZGVyID0gbmV3IE11bHRpUG9wdWxhdGlvblNJRGlzZWFzZU1vZGVsSXRlbVByb3ZpZGVyKHRoaXMpOworCQl9CisKKwkJcmV0dXJuIG11bHRpUG9wdWxhdGlvblNJRGlzZWFzZU1vZGVsSXRlbVByb3ZpZGVyOworCX0KKworCS8qKgorCSAqIFRoaXMga2VlcHMgdHJhY2sgb2YgdGhlIG9uZSBhZGFwdGVyIHVzZWQgZm9yIGFsbCB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLm11bHRpcG9wdWxhdGlvbi5NdWx0aVBvcHVsYXRpb25TSVJEaXNlYXNlTW9kZWx9IGluc3RhbmNlcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgTXVsdGlQb3B1bGF0aW9uU0lSRGlzZWFzZU1vZGVsSXRlbVByb3ZpZGVyIG11bHRpUG9wdWxhdGlvblNJUkRpc2Vhc2VNb2RlbEl0ZW1Qcm92aWRlcjsKKworCS8qKgorCSAqIFRoaXMgY3JlYXRlcyBhbiBhZGFwdGVyIGZvciBhIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMubXVsdGlwb3B1bGF0aW9uLk11bHRpUG9wdWxhdGlvblNJUkRpc2Vhc2VNb2RlbH0uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlTXVsdGlQb3B1bGF0aW9uU0lSRGlzZWFzZU1vZGVsQWRhcHRlcigpIHsKKwkJaWYgKG11bHRpUG9wdWxhdGlvblNJUkRpc2Vhc2VNb2RlbEl0ZW1Qcm92aWRlciA9PSBudWxsKSB7CisJCQltdWx0aVBvcHVsYXRpb25TSVJEaXNlYXNlTW9kZWxJdGVtUHJvdmlkZXIgPSBuZXcgTXVsdGlQb3B1bGF0aW9uU0lSRGlzZWFzZU1vZGVsSXRlbVByb3ZpZGVyKHRoaXMpOworCQl9CisKKwkJcmV0dXJuIG11bHRpUG9wdWxhdGlvblNJUkRpc2Vhc2VNb2RlbEl0ZW1Qcm92aWRlcjsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGtlZXBzIHRyYWNrIG9mIHRoZSBvbmUgYWRhcHRlciB1c2VkIGZvciBhbGwge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5tdWx0aXBvcHVsYXRpb24uTXVsdGlQb3B1bGF0aW9uU0VJUkRpc2Vhc2VNb2RlbH0gaW5zdGFuY2VzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBNdWx0aVBvcHVsYXRpb25TRUlSRGlzZWFzZU1vZGVsSXRlbVByb3ZpZGVyIG11bHRpUG9wdWxhdGlvblNFSVJEaXNlYXNlTW9kZWxJdGVtUHJvdmlkZXI7CisKKwkvKioKKwkgKiBUaGlzIGNyZWF0ZXMgYW4gYWRhcHRlciBmb3IgYSB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLm11bHRpcG9wdWxhdGlvbi5NdWx0aVBvcHVsYXRpb25TRUlSRGlzZWFzZU1vZGVsfS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVNdWx0aVBvcHVsYXRpb25TRUlSRGlzZWFzZU1vZGVsQWRhcHRlcigpIHsKKwkJaWYgKG11bHRpUG9wdWxhdGlvblNFSVJEaXNlYXNlTW9kZWxJdGVtUHJvdmlkZXIgPT0gbnVsbCkgeworCQkJbXVsdGlQb3B1bGF0aW9uU0VJUkRpc2Vhc2VNb2RlbEl0ZW1Qcm92aWRlciA9IG5ldyBNdWx0aVBvcHVsYXRpb25TRUlSRGlzZWFzZU1vZGVsSXRlbVByb3ZpZGVyKHRoaXMpOworCQl9CisKKwkJcmV0dXJuIG11bHRpUG9wdWxhdGlvblNFSVJEaXNlYXNlTW9kZWxJdGVtUHJvdmlkZXI7CisJfQorCisJLyoqCisJICogVGhpcyBrZWVwcyB0cmFjayBvZiB0aGUgb25lIGFkYXB0ZXIgdXNlZCBmb3IgYWxsIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMubXVsdGlwb3B1bGF0aW9uLk11bHRpUG9wdWxhdGlvblNlYXNvbmFsRGlzZWFzZU1vZGVsfSBpbnN0YW5jZXMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIE11bHRpUG9wdWxhdGlvblNlYXNvbmFsRGlzZWFzZU1vZGVsSXRlbVByb3ZpZGVyIG11bHRpUG9wdWxhdGlvblNlYXNvbmFsRGlzZWFzZU1vZGVsSXRlbVByb3ZpZGVyOworCisJLyoqCisJICogVGhpcyBjcmVhdGVzIGFuIGFkYXB0ZXIgZm9yIGEge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5tdWx0aXBvcHVsYXRpb24uTXVsdGlQb3B1bGF0aW9uU2Vhc29uYWxEaXNlYXNlTW9kZWx9LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZU11bHRpUG9wdWxhdGlvblNlYXNvbmFsRGlzZWFzZU1vZGVsQWRhcHRlcigpIHsKKwkJaWYgKG11bHRpUG9wdWxhdGlvblNlYXNvbmFsRGlzZWFzZU1vZGVsSXRlbVByb3ZpZGVyID09IG51bGwpIHsKKwkJCW11bHRpUG9wdWxhdGlvblNlYXNvbmFsRGlzZWFzZU1vZGVsSXRlbVByb3ZpZGVyID0gbmV3IE11bHRpUG9wdWxhdGlvblNlYXNvbmFsRGlzZWFzZU1vZGVsSXRlbVByb3ZpZGVyKHRoaXMpOworCQl9CisKKwkJcmV0dXJuIG11bHRpUG9wdWxhdGlvblNlYXNvbmFsRGlzZWFzZU1vZGVsSXRlbVByb3ZpZGVyOworCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyB0aGUgcm9vdCBhZGFwdGVyIGZhY3RvcnkgdGhhdCBjb250YWlucyB0aGlzIGZhY3RvcnkuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnkgZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCkgeworCQlyZXR1cm4gcGFyZW50QWRhcHRlckZhY3RvcnkgPT0gbnVsbCA/IHRoaXMgOiBwYXJlbnRBZGFwdGVyRmFjdG9yeS5nZXRSb290QWRhcHRlckZhY3RvcnkoKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHNldHMgdGhlIGNvbXBvc2VkIGFkYXB0ZXIgZmFjdG9yeSB0aGF0IGNvbnRhaW5zIHRoaXMgZmFjdG9yeS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRQYXJlbnRBZGFwdGVyRmFjdG9yeShDb21wb3NlZEFkYXB0ZXJGYWN0b3J5IHBhcmVudEFkYXB0ZXJGYWN0b3J5KSB7CisJCXRoaXMucGFyZW50QWRhcHRlckZhY3RvcnkgPSBwYXJlbnRBZGFwdGVyRmFjdG9yeTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgYm9vbGVhbiBpc0ZhY3RvcnlGb3JUeXBlKE9iamVjdCB0eXBlKSB7CisJCXJldHVybiBzdXBwb3J0ZWRUeXBlcy5jb250YWlucyh0eXBlKSB8fCBzdXBlci5pc0ZhY3RvcnlGb3JUeXBlKHR5cGUpOworCX0KKworCS8qKgorCSAqIFRoaXMgaW1wbGVtZW50YXRpb24gc3Vic3RpdHV0ZXMgdGhlIGZhY3RvcnkgaXRzZWxmIGFzIHRoZSBrZXkgZm9yIHRoZSBhZGFwdGVyLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBBZGFwdGVyIGFkYXB0KE5vdGlmaWVyIG5vdGlmaWVyLCBPYmplY3QgdHlwZSkgeworCQlyZXR1cm4gc3VwZXIuYWRhcHQobm90aWZpZXIsIHRoaXMpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBPYmplY3QgYWRhcHQoT2JqZWN0IG9iamVjdCwgT2JqZWN0IHR5cGUpIHsKKwkJaWYgKGlzRmFjdG9yeUZvclR5cGUodHlwZSkpIHsKKwkJCU9iamVjdCBhZGFwdGVyID0gc3VwZXIuYWRhcHQob2JqZWN0LCB0eXBlKTsKKwkJCWlmICghKHR5cGUgaW5zdGFuY2VvZiBDbGFzczw/PikgfHwgKCgoQ2xhc3M8Pz4pdHlwZSkuaXNJbnN0YW5jZShhZGFwdGVyKSkpIHsKKwkJCQlyZXR1cm4gYWRhcHRlcjsKKwkJCX0KKwkJfQorCisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyBhIGxpc3RlbmVyLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIGFkZExpc3RlbmVyKElOb3RpZnlDaGFuZ2VkTGlzdGVuZXIgbm90aWZ5Q2hhbmdlZExpc3RlbmVyKSB7CisJCWNoYW5nZU5vdGlmaWVyLmFkZExpc3RlbmVyKG5vdGlmeUNoYW5nZWRMaXN0ZW5lcik7CisJfQorCisJLyoqCisJICogVGhpcyByZW1vdmVzIGEgbGlzdGVuZXIuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgcmVtb3ZlTGlzdGVuZXIoSU5vdGlmeUNoYW5nZWRMaXN0ZW5lciBub3RpZnlDaGFuZ2VkTGlzdGVuZXIpIHsKKwkJY2hhbmdlTm90aWZpZXIucmVtb3ZlTGlzdGVuZXIobm90aWZ5Q2hhbmdlZExpc3RlbmVyKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGRlbGVnYXRlcyB0byB7QGxpbmsgI2NoYW5nZU5vdGlmaWVyfSBhbmQgdG8ge0BsaW5rICNwYXJlbnRBZGFwdGVyRmFjdG9yeX0uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgZmlyZU5vdGlmeUNoYW5nZWQoTm90aWZpY2F0aW9uIG5vdGlmaWNhdGlvbikgeworCQljaGFuZ2VOb3RpZmllci5maXJlTm90aWZ5Q2hhbmdlZChub3RpZmljYXRpb24pOworCisJCWlmIChwYXJlbnRBZGFwdGVyRmFjdG9yeSAhPSBudWxsKSB7CisJCQlwYXJlbnRBZGFwdGVyRmFjdG9yeS5maXJlTm90aWZ5Q2hhbmdlZChub3RpZmljYXRpb24pOworCQl9CisJfQorCisJLyoqCisJICogVGhpcyBkaXNwb3NlcyBhbGwgb2YgdGhlIGl0ZW0gcHJvdmlkZXJzIGNyZWF0ZWQgYnkgdGhpcyBmYWN0b3J5LiAKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBkaXNwb3NlKCkgeworCQlpZiAobXVsdGlQb3B1bGF0aW9uU0lEaXNlYXNlTW9kZWxJdGVtUHJvdmlkZXIgIT0gbnVsbCkgbXVsdGlQb3B1bGF0aW9uU0lEaXNlYXNlTW9kZWxJdGVtUHJvdmlkZXIuZGlzcG9zZSgpOworCQlpZiAobXVsdGlQb3B1bGF0aW9uU0lSRGlzZWFzZU1vZGVsSXRlbVByb3ZpZGVyICE9IG51bGwpIG11bHRpUG9wdWxhdGlvblNJUkRpc2Vhc2VNb2RlbEl0ZW1Qcm92aWRlci5kaXNwb3NlKCk7CisJCWlmIChtdWx0aVBvcHVsYXRpb25TRUlSRGlzZWFzZU1vZGVsSXRlbVByb3ZpZGVyICE9IG51bGwpIG11bHRpUG9wdWxhdGlvblNFSVJEaXNlYXNlTW9kZWxJdGVtUHJvdmlkZXIuZGlzcG9zZSgpOworCQlpZiAobXVsdGlQb3B1bGF0aW9uU2Vhc29uYWxEaXNlYXNlTW9kZWxJdGVtUHJvdmlkZXIgIT0gbnVsbCkgbXVsdGlQb3B1bGF0aW9uU2Vhc29uYWxEaXNlYXNlTW9kZWxJdGVtUHJvdmlkZXIuZGlzcG9zZSgpOworCX0KKworfQpkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMubXVsdGlwb3B1bGF0aW9uL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvbXVsdGlwb3B1bGF0aW9uL3V0aWwvTXVsdGlwb3B1bGF0aW9uQWRhcHRlckZhY3RvcnkuamF2YSBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLm11bHRpcG9wdWxhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL211bHRpcG9wdWxhdGlvbi91dGlsL011bHRpcG9wdWxhdGlvbkFkYXB0ZXJGYWN0b3J5LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjM0MjEzZQotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLm11bHRpcG9wdWxhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL211bHRpcG9wdWxhdGlvbi91dGlsL011bHRpcG9wdWxhdGlvbkFkYXB0ZXJGYWN0b3J5LmphdmEKQEAgLTAsMCArMSwzNDMgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLm11bHRpcG9wdWxhdGlvbi51dGlsOworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuQWRhcHRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmllcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5pbXBsLkFkYXB0ZXJGYWN0b3J5SW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLklkZW50aWZpYWJsZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLlNhbml0eUNoZWNrZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLkRlY29yYXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuSW50ZWdyYXRpb25EZWNvcmF0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLk5vZGVEZWNvcmF0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLk1vZGlmaWFibGU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLm11bHRpcG9wdWxhdGlvbi4qOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5tdWx0aXBvcHVsYXRpb24uTXVsdGlQb3B1bGF0aW9uU0VJUkRpc2Vhc2VNb2RlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMubXVsdGlwb3B1bGF0aW9uLk11bHRpUG9wdWxhdGlvblNJRGlzZWFzZU1vZGVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5tdWx0aXBvcHVsYXRpb24uTXVsdGlQb3B1bGF0aW9uU0lSRGlzZWFzZU1vZGVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5tdWx0aXBvcHVsYXRpb24uTXVsdGlwb3B1bGF0aW9uUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuRGlzZWFzZU1vZGVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZERpc2Vhc2VNb2RlbDsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogVGhlIDxiPkFkYXB0ZXIgRmFjdG9yeTwvYj4gZm9yIHRoZSBtb2RlbC4KKyAqIEl0IHByb3ZpZGVzIGFuIGFkYXB0ZXIgPGNvZGU+Y3JlYXRlWFhYPC9jb2RlPiBtZXRob2QgZm9yIGVhY2ggY2xhc3Mgb2YgdGhlIG1vZGVsLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5tdWx0aXBvcHVsYXRpb24uTXVsdGlwb3B1bGF0aW9uUGFja2FnZQorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgTXVsdGlwb3B1bGF0aW9uQWRhcHRlckZhY3RvcnkgZXh0ZW5kcyBBZGFwdGVyRmFjdG9yeUltcGwgeworCS8qKgorCSAqIFRoZSBjYWNoZWQgbW9kZWwgcGFja2FnZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgc3RhdGljIE11bHRpcG9wdWxhdGlvblBhY2thZ2UgbW9kZWxQYWNrYWdlOworCisJLyoqCisJICogQ3JlYXRlcyBhbiBpbnN0YW5jZSBvZiB0aGUgYWRhcHRlciBmYWN0b3J5LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBNdWx0aXBvcHVsYXRpb25BZGFwdGVyRmFjdG9yeSgpIHsKKwkJaWYgKG1vZGVsUGFja2FnZSA9PSBudWxsKSB7CisJCQltb2RlbFBhY2thZ2UgPSBNdWx0aXBvcHVsYXRpb25QYWNrYWdlLmVJTlNUQU5DRTsKKwkJfQorCX0KKworCS8qKgorCSAqIFJldHVybnMgd2hldGhlciB0aGlzIGZhY3RvcnkgaXMgYXBwbGljYWJsZSBmb3IgdGhlIHR5cGUgb2YgdGhlIG9iamVjdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyA8Y29kZT50cnVlPC9jb2RlPiBpZiB0aGUgb2JqZWN0IGlzIGVpdGhlciB0aGUgbW9kZWwncyBwYWNrYWdlIG9yIGlzIGFuIGluc3RhbmNlIG9iamVjdCBvZiB0aGUgbW9kZWwuCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB3aGV0aGVyIHRoaXMgZmFjdG9yeSBpcyBhcHBsaWNhYmxlIGZvciB0aGUgdHlwZSBvZiB0aGUgb2JqZWN0LgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgYm9vbGVhbiBpc0ZhY3RvcnlGb3JUeXBlKE9iamVjdCBvYmplY3QpIHsKKwkJaWYgKG9iamVjdCA9PSBtb2RlbFBhY2thZ2UpIHsKKwkJCXJldHVybiB0cnVlOworCQl9CisJCWlmIChvYmplY3QgaW5zdGFuY2VvZiBFT2JqZWN0KSB7CisJCQlyZXR1cm4gKChFT2JqZWN0KW9iamVjdCkuZUNsYXNzKCkuZ2V0RVBhY2thZ2UoKSA9PSBtb2RlbFBhY2thZ2U7CisJCX0KKwkJcmV0dXJuIGZhbHNlOworCX0KKworCS8qKgorCSAqIFRoZSBzd2l0Y2ggdGhhdCBkZWxlZ2F0ZXMgdG8gdGhlIDxjb2RlPmNyZWF0ZVhYWDwvY29kZT4gbWV0aG9kcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgTXVsdGlwb3B1bGF0aW9uU3dpdGNoPEFkYXB0ZXI+IG1vZGVsU3dpdGNoID0KKwkJbmV3IE11bHRpcG9wdWxhdGlvblN3aXRjaDxBZGFwdGVyPigpIHsKKwkJCUBPdmVycmlkZQorCQkJcHVibGljIEFkYXB0ZXIgY2FzZU11bHRpUG9wdWxhdGlvblNJRGlzZWFzZU1vZGVsKE11bHRpUG9wdWxhdGlvblNJRGlzZWFzZU1vZGVsIG9iamVjdCkgeworCQkJCXJldHVybiBjcmVhdGVNdWx0aVBvcHVsYXRpb25TSURpc2Vhc2VNb2RlbEFkYXB0ZXIoKTsKKwkJCX0KKwkJCUBPdmVycmlkZQorCQkJcHVibGljIEFkYXB0ZXIgY2FzZU11bHRpUG9wdWxhdGlvblNJUkRpc2Vhc2VNb2RlbChNdWx0aVBvcHVsYXRpb25TSVJEaXNlYXNlTW9kZWwgb2JqZWN0KSB7CisJCQkJcmV0dXJuIGNyZWF0ZU11bHRpUG9wdWxhdGlvblNJUkRpc2Vhc2VNb2RlbEFkYXB0ZXIoKTsKKwkJCX0KKwkJCUBPdmVycmlkZQorCQkJcHVibGljIEFkYXB0ZXIgY2FzZU11bHRpUG9wdWxhdGlvblNFSVJEaXNlYXNlTW9kZWwoTXVsdGlQb3B1bGF0aW9uU0VJUkRpc2Vhc2VNb2RlbCBvYmplY3QpIHsKKwkJCQlyZXR1cm4gY3JlYXRlTXVsdGlQb3B1bGF0aW9uU0VJUkRpc2Vhc2VNb2RlbEFkYXB0ZXIoKTsKKwkJCX0KKwkJCUBPdmVycmlkZQorCQkJcHVibGljIEFkYXB0ZXIgY2FzZU11bHRpUG9wdWxhdGlvblNlYXNvbmFsRGlzZWFzZU1vZGVsKE11bHRpUG9wdWxhdGlvblNlYXNvbmFsRGlzZWFzZU1vZGVsIG9iamVjdCkgeworCQkJCXJldHVybiBjcmVhdGVNdWx0aVBvcHVsYXRpb25TZWFzb25hbERpc2Vhc2VNb2RlbEFkYXB0ZXIoKTsKKwkJCX0KKwkJCUBPdmVycmlkZQorCQkJcHVibGljIDxUPiBBZGFwdGVyIGNhc2VDb21wYXJhYmxlKENvbXBhcmFibGU8VD4gb2JqZWN0KSB7CisJCQkJcmV0dXJuIGNyZWF0ZUNvbXBhcmFibGVBZGFwdGVyKCk7CisJCQl9CisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyBBZGFwdGVyIGNhc2VTYW5pdHlDaGVja2VyKFNhbml0eUNoZWNrZXIgb2JqZWN0KSB7CisJCQkJcmV0dXJuIGNyZWF0ZVNhbml0eUNoZWNrZXJBZGFwdGVyKCk7CisJCQl9CisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyBBZGFwdGVyIGNhc2VJZGVudGlmaWFibGUoSWRlbnRpZmlhYmxlIG9iamVjdCkgeworCQkJCXJldHVybiBjcmVhdGVJZGVudGlmaWFibGVBZGFwdGVyKCk7CisJCQl9CisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyBBZGFwdGVyIGNhc2VEZWNvcmF0b3IoRGVjb3JhdG9yIG9iamVjdCkgeworCQkJCXJldHVybiBjcmVhdGVEZWNvcmF0b3JBZGFwdGVyKCk7CisJCQl9CisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyBBZGFwdGVyIGNhc2VOb2RlRGVjb3JhdG9yKE5vZGVEZWNvcmF0b3Igb2JqZWN0KSB7CisJCQkJcmV0dXJuIGNyZWF0ZU5vZGVEZWNvcmF0b3JBZGFwdGVyKCk7CisJCQl9CisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyBBZGFwdGVyIGNhc2VJbnRlZ3JhdGlvbkRlY29yYXRvcihJbnRlZ3JhdGlvbkRlY29yYXRvciBvYmplY3QpIHsKKwkJCQlyZXR1cm4gY3JlYXRlSW50ZWdyYXRpb25EZWNvcmF0b3JBZGFwdGVyKCk7CisJCQl9CisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyBBZGFwdGVyIGNhc2VNb2RpZmlhYmxlKE1vZGlmaWFibGUgb2JqZWN0KSB7CisJCQkJcmV0dXJuIGNyZWF0ZU1vZGlmaWFibGVBZGFwdGVyKCk7CisJCQl9CisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyBBZGFwdGVyIGNhc2VEaXNlYXNlTW9kZWwoRGlzZWFzZU1vZGVsIG9iamVjdCkgeworCQkJCXJldHVybiBjcmVhdGVEaXNlYXNlTW9kZWxBZGFwdGVyKCk7CisJCQl9CisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyBBZGFwdGVyIGNhc2VTdGFuZGFyZERpc2Vhc2VNb2RlbChTdGFuZGFyZERpc2Vhc2VNb2RlbCBvYmplY3QpIHsKKwkJCQlyZXR1cm4gY3JlYXRlU3RhbmRhcmREaXNlYXNlTW9kZWxBZGFwdGVyKCk7CisJCQl9CisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyBBZGFwdGVyIGRlZmF1bHRDYXNlKEVPYmplY3Qgb2JqZWN0KSB7CisJCQkJcmV0dXJuIGNyZWF0ZUVPYmplY3RBZGFwdGVyKCk7CisJCQl9CisJCX07CisKKwkvKioKKwkgKiBDcmVhdGVzIGFuIGFkYXB0ZXIgZm9yIHRoZSA8Y29kZT50YXJnZXQ8L2NvZGU+LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIHRhcmdldCB0aGUgb2JqZWN0IHRvIGFkYXB0LgorCSAqIEByZXR1cm4gdGhlIGFkYXB0ZXIgZm9yIHRoZSA8Y29kZT50YXJnZXQ8L2NvZGU+LgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVBZGFwdGVyKE5vdGlmaWVyIHRhcmdldCkgeworCQlyZXR1cm4gbW9kZWxTd2l0Y2guZG9Td2l0Y2goKEVPYmplY3QpdGFyZ2V0KTsKKwl9CisKKworCS8qKgorCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLm11bHRpcG9wdWxhdGlvbi5NdWx0aVBvcHVsYXRpb25TSURpc2Vhc2VNb2RlbCA8ZW0+TXVsdGkgUG9wdWxhdGlvbiBTSSBEaXNlYXNlIE1vZGVsPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsKKwkgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5tdWx0aXBvcHVsYXRpb24uTXVsdGlQb3B1bGF0aW9uU0lEaXNlYXNlTW9kZWwKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlTXVsdGlQb3B1bGF0aW9uU0lEaXNlYXNlTW9kZWxBZGFwdGVyKCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5tdWx0aXBvcHVsYXRpb24uTXVsdGlQb3B1bGF0aW9uU0lSRGlzZWFzZU1vZGVsIDxlbT5NdWx0aSBQb3B1bGF0aW9uIFNJUiBEaXNlYXNlIE1vZGVsPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsKKwkgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5tdWx0aXBvcHVsYXRpb24uTXVsdGlQb3B1bGF0aW9uU0lSRGlzZWFzZU1vZGVsCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZU11bHRpUG9wdWxhdGlvblNJUkRpc2Vhc2VNb2RlbEFkYXB0ZXIoKSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLm11bHRpcG9wdWxhdGlvbi5NdWx0aVBvcHVsYXRpb25TRUlSRGlzZWFzZU1vZGVsIDxlbT5NdWx0aSBQb3B1bGF0aW9uIFNFSVIgRGlzZWFzZSBNb2RlbDwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7CisJICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMubXVsdGlwb3B1bGF0aW9uLk11bHRpUG9wdWxhdGlvblNFSVJEaXNlYXNlTW9kZWwKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlTXVsdGlQb3B1bGF0aW9uU0VJUkRpc2Vhc2VNb2RlbEFkYXB0ZXIoKSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLm11bHRpcG9wdWxhdGlvbi5NdWx0aVBvcHVsYXRpb25TZWFzb25hbERpc2Vhc2VNb2RlbCA8ZW0+TXVsdGkgUG9wdWxhdGlvbiBTZWFzb25hbCBEaXNlYXNlIE1vZGVsPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsKKwkgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5tdWx0aXBvcHVsYXRpb24uTXVsdGlQb3B1bGF0aW9uU2Vhc29uYWxEaXNlYXNlTW9kZWwKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlTXVsdGlQb3B1bGF0aW9uU2Vhc29uYWxEaXNlYXNlTW9kZWxBZGFwdGVyKCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIGphdmEubGFuZy5Db21wYXJhYmxlIDxlbT5Db21wYXJhYmxlPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsKKwkgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KKwkgKiBAc2VlIGphdmEubGFuZy5Db21wYXJhYmxlCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZUNvbXBhcmFibGVBZGFwdGVyKCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uSWRlbnRpZmlhYmxlIDxlbT5JZGVudGlmaWFibGU8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOworCSAqIGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZSB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5LgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5JZGVudGlmaWFibGUKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlSWRlbnRpZmlhYmxlQWRhcHRlcigpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuRGVjb3JhdG9yIDxlbT5EZWNvcmF0b3I8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOworCSAqIGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZSB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5LgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLkRlY29yYXRvcgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVEZWNvcmF0b3JBZGFwdGVyKCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5Ob2RlRGVjb3JhdG9yIDxlbT5Ob2RlIERlY29yYXRvcjwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7CisJICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuTm9kZURlY29yYXRvcgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVOb2RlRGVjb3JhdG9yQWRhcHRlcigpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLlNhbml0eUNoZWNrZXIgPGVtPlNhbml0eSBDaGVja2VyPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsKKwkgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uU2FuaXR5Q2hlY2tlcgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVTYW5pdHlDaGVja2VyQWRhcHRlcigpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuTW9kaWZpYWJsZSA8ZW0+TW9kaWZpYWJsZTwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7CisJICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuTW9kaWZpYWJsZQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVNb2RpZmlhYmxlQWRhcHRlcigpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuRGlzZWFzZU1vZGVsIDxlbT5EaXNlYXNlIE1vZGVsPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsKKwkgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5EaXNlYXNlTW9kZWwKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlRGlzZWFzZU1vZGVsQWRhcHRlcigpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuSW50ZWdyYXRpb25EZWNvcmF0b3IgPGVtPkludGVncmF0aW9uIERlY29yYXRvcjwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7CisJICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuSW50ZWdyYXRpb25EZWNvcmF0b3IKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlSW50ZWdyYXRpb25EZWNvcmF0b3JBZGFwdGVyKCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZERpc2Vhc2VNb2RlbCA8ZW0+RGlzZWFzZSBNb2RlbDwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7CisJICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmREaXNlYXNlTW9kZWwKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlU3RhbmRhcmREaXNlYXNlTW9kZWxBZGFwdGVyKCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIHRoZSBkZWZhdWx0IGNhc2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsLgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVFT2JqZWN0QWRhcHRlcigpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCit9IC8vTXVsdGlwb3B1bGF0aW9uQWRhcHRlckZhY3RvcnkKZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLm11bHRpcG9wdWxhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL211bHRpcG9wdWxhdGlvbi91dGlsL011bHRpcG9wdWxhdGlvblN3aXRjaC5qYXZhIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMubXVsdGlwb3B1bGF0aW9uL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvbXVsdGlwb3B1bGF0aW9uL3V0aWwvTXVsdGlwb3B1bGF0aW9uU3dpdGNoLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTg5ZWZmNQotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLm11bHRpcG9wdWxhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL211bHRpcG9wdWxhdGlvbi91dGlsL011bHRpcG9wdWxhdGlvblN3aXRjaC5qYXZhCkBAIC0wLDAgKzEsMzg1IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5tdWx0aXBvcHVsYXRpb24udXRpbDsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAxMCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uSWRlbnRpZmlhYmxlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uU2FuaXR5Q2hlY2tlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuRGVjb3JhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5JbnRlZ3JhdGlvbkRlY29yYXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuTm9kZURlY29yYXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuTW9kaWZpYWJsZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMubXVsdGlwb3B1bGF0aW9uLio7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLm11bHRpcG9wdWxhdGlvbi5NdWx0aVBvcHVsYXRpb25TRUlSRGlzZWFzZU1vZGVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5tdWx0aXBvcHVsYXRpb24uTXVsdGlQb3B1bGF0aW9uU0lEaXNlYXNlTW9kZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLm11bHRpcG9wdWxhdGlvbi5NdWx0aVBvcHVsYXRpb25TSVJEaXNlYXNlTW9kZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLm11bHRpcG9wdWxhdGlvbi5NdWx0aXBvcHVsYXRpb25QYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5EaXNlYXNlTW9kZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkRGlzZWFzZU1vZGVsOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiBUaGUgPGI+U3dpdGNoPC9iPiBmb3IgdGhlIG1vZGVsJ3MgaW5oZXJpdGFuY2UgaGllcmFyY2h5LgorICogSXQgc3VwcG9ydHMgdGhlIGNhbGwge0BsaW5rICNkb1N3aXRjaChFT2JqZWN0KSBkb1N3aXRjaChvYmplY3QpfQorICogdG8gaW52b2tlIHRoZSA8Y29kZT5jYXNlWFhYPC9jb2RlPiBtZXRob2QgZm9yIGVhY2ggY2xhc3Mgb2YgdGhlIG1vZGVsLAorICogc3RhcnRpbmcgd2l0aCB0aGUgYWN0dWFsIGNsYXNzIG9mIHRoZSBvYmplY3QKKyAqIGFuZCBwcm9jZWVkaW5nIHVwIHRoZSBpbmhlcml0YW5jZSBoaWVyYXJjaHkKKyAqIHVudGlsIGEgbm9uLW51bGwgcmVzdWx0IGlzIHJldHVybmVkLAorICogd2hpY2ggaXMgdGhlIHJlc3VsdCBvZiB0aGUgc3dpdGNoLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5tdWx0aXBvcHVsYXRpb24uTXVsdGlwb3B1bGF0aW9uUGFja2FnZQorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgTXVsdGlwb3B1bGF0aW9uU3dpdGNoPFQxPiB7CisJLyoqCisJICogVGhlIGNhY2hlZCBtb2RlbCBwYWNrYWdlCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHN0YXRpYyBNdWx0aXBvcHVsYXRpb25QYWNrYWdlIG1vZGVsUGFja2FnZTsKKworCS8qKgorCSAqIENyZWF0ZXMgYW4gaW5zdGFuY2Ugb2YgdGhlIHN3aXRjaC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgTXVsdGlwb3B1bGF0aW9uU3dpdGNoKCkgeworCQlpZiAobW9kZWxQYWNrYWdlID09IG51bGwpIHsKKwkJCW1vZGVsUGFja2FnZSA9IE11bHRpcG9wdWxhdGlvblBhY2thZ2UuZUlOU1RBTkNFOworCQl9CisJfQorCisJLyoqCisJICogQ2FsbHMgPGNvZGU+Y2FzZVhYWDwvY29kZT4gZm9yIGVhY2ggY2xhc3Mgb2YgdGhlIG1vZGVsIHVudGlsIG9uZSByZXR1cm5zIGEgbm9uIG51bGwgcmVzdWx0OyBpdCB5aWVsZHMgdGhhdCByZXN1bHQuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBmaXJzdCBub24tbnVsbCByZXN1bHQgcmV0dXJuZWQgYnkgYSA8Y29kZT5jYXNlWFhYPC9jb2RlPiBjYWxsLgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVDEgZG9Td2l0Y2goRU9iamVjdCB0aGVFT2JqZWN0KSB7CisJCXJldHVybiBkb1N3aXRjaCh0aGVFT2JqZWN0LmVDbGFzcygpLCB0aGVFT2JqZWN0KTsKKwl9CisKKwkvKioKKwkgKiBDYWxscyA8Y29kZT5jYXNlWFhYPC9jb2RlPiBmb3IgZWFjaCBjbGFzcyBvZiB0aGUgbW9kZWwgdW50aWwgb25lIHJldHVybnMgYSBub24gbnVsbCByZXN1bHQ7IGl0IHlpZWxkcyB0aGF0IHJlc3VsdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIGZpcnN0IG5vbi1udWxsIHJlc3VsdCByZXR1cm5lZCBieSBhIDxjb2RlPmNhc2VYWFg8L2NvZGU+IGNhbGwuCisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBUMSBkb1N3aXRjaChFQ2xhc3MgdGhlRUNsYXNzLCBFT2JqZWN0IHRoZUVPYmplY3QpIHsKKwkJaWYgKHRoZUVDbGFzcy5lQ29udGFpbmVyKCkgPT0gbW9kZWxQYWNrYWdlKSB7CisJCQlyZXR1cm4gZG9Td2l0Y2godGhlRUNsYXNzLmdldENsYXNzaWZpZXJJRCgpLCB0aGVFT2JqZWN0KTsKKwkJfQorCQllbHNlIHsKKwkJCUxpc3Q8RUNsYXNzPiBlU3VwZXJUeXBlcyA9IHRoZUVDbGFzcy5nZXRFU3VwZXJUeXBlcygpOworCQkJcmV0dXJuCisJCQkJZVN1cGVyVHlwZXMuaXNFbXB0eSgpID8KKwkJCQkJZGVmYXVsdENhc2UodGhlRU9iamVjdCkgOgorCQkJCQlkb1N3aXRjaChlU3VwZXJUeXBlcy5nZXQoMCksIHRoZUVPYmplY3QpOworCQl9CisJfQorCisJLyoqCisJICogQ2FsbHMgPGNvZGU+Y2FzZVhYWDwvY29kZT4gZm9yIGVhY2ggY2xhc3Mgb2YgdGhlIG1vZGVsIHVudGlsIG9uZSByZXR1cm5zIGEgbm9uIG51bGwgcmVzdWx0OyBpdCB5aWVsZHMgdGhhdCByZXN1bHQuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBmaXJzdCBub24tbnVsbCByZXN1bHQgcmV0dXJuZWQgYnkgYSA8Y29kZT5jYXNlWFhYPC9jb2RlPiBjYWxsLgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgVDEgZG9Td2l0Y2goaW50IGNsYXNzaWZpZXJJRCwgRU9iamVjdCB0aGVFT2JqZWN0KSB7CisJCXN3aXRjaCAoY2xhc3NpZmllcklEKSB7CisJCQljYXNlIE11bHRpcG9wdWxhdGlvblBhY2thZ2UuTVVMVElfUE9QVUxBVElPTl9TSV9ESVNFQVNFX01PREVMOiB7CisJCQkJTXVsdGlQb3B1bGF0aW9uU0lEaXNlYXNlTW9kZWwgbXVsdGlQb3B1bGF0aW9uU0lEaXNlYXNlTW9kZWwgPSAoTXVsdGlQb3B1bGF0aW9uU0lEaXNlYXNlTW9kZWwpdGhlRU9iamVjdDsKKwkJCQlUMSByZXN1bHQgPSBjYXNlTXVsdGlQb3B1bGF0aW9uU0lEaXNlYXNlTW9kZWwobXVsdGlQb3B1bGF0aW9uU0lEaXNlYXNlTW9kZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZVN0YW5kYXJkRGlzZWFzZU1vZGVsKG11bHRpUG9wdWxhdGlvblNJRGlzZWFzZU1vZGVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VEaXNlYXNlTW9kZWwobXVsdGlQb3B1bGF0aW9uU0lEaXNlYXNlTW9kZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZUludGVncmF0aW9uRGVjb3JhdG9yKG11bHRpUG9wdWxhdGlvblNJRGlzZWFzZU1vZGVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VNb2RpZmlhYmxlKG11bHRpUG9wdWxhdGlvblNJRGlzZWFzZU1vZGVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VOb2RlRGVjb3JhdG9yKG11bHRpUG9wdWxhdGlvblNJRGlzZWFzZU1vZGVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VEZWNvcmF0b3IobXVsdGlQb3B1bGF0aW9uU0lEaXNlYXNlTW9kZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZUlkZW50aWZpYWJsZShtdWx0aVBvcHVsYXRpb25TSURpc2Vhc2VNb2RlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlQ29tcGFyYWJsZShtdWx0aVBvcHVsYXRpb25TSURpc2Vhc2VNb2RlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlU2FuaXR5Q2hlY2tlcihtdWx0aVBvcHVsYXRpb25TSURpc2Vhc2VNb2RlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBkZWZhdWx0Q2FzZSh0aGVFT2JqZWN0KTsKKwkJCQlyZXR1cm4gcmVzdWx0OworCQkJfQorCQkJY2FzZSBNdWx0aXBvcHVsYXRpb25QYWNrYWdlLk1VTFRJX1BPUFVMQVRJT05fU0lSX0RJU0VBU0VfTU9ERUw6IHsKKwkJCQlNdWx0aVBvcHVsYXRpb25TSVJEaXNlYXNlTW9kZWwgbXVsdGlQb3B1bGF0aW9uU0lSRGlzZWFzZU1vZGVsID0gKE11bHRpUG9wdWxhdGlvblNJUkRpc2Vhc2VNb2RlbCl0aGVFT2JqZWN0OworCQkJCVQxIHJlc3VsdCA9IGNhc2VNdWx0aVBvcHVsYXRpb25TSVJEaXNlYXNlTW9kZWwobXVsdGlQb3B1bGF0aW9uU0lSRGlzZWFzZU1vZGVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VNdWx0aVBvcHVsYXRpb25TSURpc2Vhc2VNb2RlbChtdWx0aVBvcHVsYXRpb25TSVJEaXNlYXNlTW9kZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZVN0YW5kYXJkRGlzZWFzZU1vZGVsKG11bHRpUG9wdWxhdGlvblNJUkRpc2Vhc2VNb2RlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlRGlzZWFzZU1vZGVsKG11bHRpUG9wdWxhdGlvblNJUkRpc2Vhc2VNb2RlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlSW50ZWdyYXRpb25EZWNvcmF0b3IobXVsdGlQb3B1bGF0aW9uU0lSRGlzZWFzZU1vZGVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VNb2RpZmlhYmxlKG11bHRpUG9wdWxhdGlvblNJUkRpc2Vhc2VNb2RlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlTm9kZURlY29yYXRvcihtdWx0aVBvcHVsYXRpb25TSVJEaXNlYXNlTW9kZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZURlY29yYXRvcihtdWx0aVBvcHVsYXRpb25TSVJEaXNlYXNlTW9kZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZUlkZW50aWZpYWJsZShtdWx0aVBvcHVsYXRpb25TSVJEaXNlYXNlTW9kZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZUNvbXBhcmFibGUobXVsdGlQb3B1bGF0aW9uU0lSRGlzZWFzZU1vZGVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VTYW5pdHlDaGVja2VyKG11bHRpUG9wdWxhdGlvblNJUkRpc2Vhc2VNb2RlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBkZWZhdWx0Q2FzZSh0aGVFT2JqZWN0KTsKKwkJCQlyZXR1cm4gcmVzdWx0OworCQkJfQorCQkJY2FzZSBNdWx0aXBvcHVsYXRpb25QYWNrYWdlLk1VTFRJX1BPUFVMQVRJT05fU0VJUl9ESVNFQVNFX01PREVMOiB7CisJCQkJTXVsdGlQb3B1bGF0aW9uU0VJUkRpc2Vhc2VNb2RlbCBtdWx0aVBvcHVsYXRpb25TRUlSRGlzZWFzZU1vZGVsID0gKE11bHRpUG9wdWxhdGlvblNFSVJEaXNlYXNlTW9kZWwpdGhlRU9iamVjdDsKKwkJCQlUMSByZXN1bHQgPSBjYXNlTXVsdGlQb3B1bGF0aW9uU0VJUkRpc2Vhc2VNb2RlbChtdWx0aVBvcHVsYXRpb25TRUlSRGlzZWFzZU1vZGVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VNdWx0aVBvcHVsYXRpb25TSVJEaXNlYXNlTW9kZWwobXVsdGlQb3B1bGF0aW9uU0VJUkRpc2Vhc2VNb2RlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlTXVsdGlQb3B1bGF0aW9uU0lEaXNlYXNlTW9kZWwobXVsdGlQb3B1bGF0aW9uU0VJUkRpc2Vhc2VNb2RlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlU3RhbmRhcmREaXNlYXNlTW9kZWwobXVsdGlQb3B1bGF0aW9uU0VJUkRpc2Vhc2VNb2RlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlRGlzZWFzZU1vZGVsKG11bHRpUG9wdWxhdGlvblNFSVJEaXNlYXNlTW9kZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZUludGVncmF0aW9uRGVjb3JhdG9yKG11bHRpUG9wdWxhdGlvblNFSVJEaXNlYXNlTW9kZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZU1vZGlmaWFibGUobXVsdGlQb3B1bGF0aW9uU0VJUkRpc2Vhc2VNb2RlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlTm9kZURlY29yYXRvcihtdWx0aVBvcHVsYXRpb25TRUlSRGlzZWFzZU1vZGVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VEZWNvcmF0b3IobXVsdGlQb3B1bGF0aW9uU0VJUkRpc2Vhc2VNb2RlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlSWRlbnRpZmlhYmxlKG11bHRpUG9wdWxhdGlvblNFSVJEaXNlYXNlTW9kZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZUNvbXBhcmFibGUobXVsdGlQb3B1bGF0aW9uU0VJUkRpc2Vhc2VNb2RlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlU2FuaXR5Q2hlY2tlcihtdWx0aVBvcHVsYXRpb25TRUlSRGlzZWFzZU1vZGVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGRlZmF1bHRDYXNlKHRoZUVPYmplY3QpOworCQkJCXJldHVybiByZXN1bHQ7CisJCQl9CisJCQljYXNlIE11bHRpcG9wdWxhdGlvblBhY2thZ2UuTVVMVElfUE9QVUxBVElPTl9TRUFTT05BTF9ESVNFQVNFX01PREVMOiB7CisJCQkJTXVsdGlQb3B1bGF0aW9uU2Vhc29uYWxEaXNlYXNlTW9kZWwgbXVsdGlQb3B1bGF0aW9uU2Vhc29uYWxEaXNlYXNlTW9kZWwgPSAoTXVsdGlQb3B1bGF0aW9uU2Vhc29uYWxEaXNlYXNlTW9kZWwpdGhlRU9iamVjdDsKKwkJCQlUMSByZXN1bHQgPSBjYXNlTXVsdGlQb3B1bGF0aW9uU2Vhc29uYWxEaXNlYXNlTW9kZWwobXVsdGlQb3B1bGF0aW9uU2Vhc29uYWxEaXNlYXNlTW9kZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZU11bHRpUG9wdWxhdGlvblNFSVJEaXNlYXNlTW9kZWwobXVsdGlQb3B1bGF0aW9uU2Vhc29uYWxEaXNlYXNlTW9kZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZU11bHRpUG9wdWxhdGlvblNJUkRpc2Vhc2VNb2RlbChtdWx0aVBvcHVsYXRpb25TZWFzb25hbERpc2Vhc2VNb2RlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlTXVsdGlQb3B1bGF0aW9uU0lEaXNlYXNlTW9kZWwobXVsdGlQb3B1bGF0aW9uU2Vhc29uYWxEaXNlYXNlTW9kZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZVN0YW5kYXJkRGlzZWFzZU1vZGVsKG11bHRpUG9wdWxhdGlvblNlYXNvbmFsRGlzZWFzZU1vZGVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VEaXNlYXNlTW9kZWwobXVsdGlQb3B1bGF0aW9uU2Vhc29uYWxEaXNlYXNlTW9kZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZUludGVncmF0aW9uRGVjb3JhdG9yKG11bHRpUG9wdWxhdGlvblNlYXNvbmFsRGlzZWFzZU1vZGVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VNb2RpZmlhYmxlKG11bHRpUG9wdWxhdGlvblNlYXNvbmFsRGlzZWFzZU1vZGVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VOb2RlRGVjb3JhdG9yKG11bHRpUG9wdWxhdGlvblNlYXNvbmFsRGlzZWFzZU1vZGVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VEZWNvcmF0b3IobXVsdGlQb3B1bGF0aW9uU2Vhc29uYWxEaXNlYXNlTW9kZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZUlkZW50aWZpYWJsZShtdWx0aVBvcHVsYXRpb25TZWFzb25hbERpc2Vhc2VNb2RlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlQ29tcGFyYWJsZShtdWx0aVBvcHVsYXRpb25TZWFzb25hbERpc2Vhc2VNb2RlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlU2FuaXR5Q2hlY2tlcihtdWx0aVBvcHVsYXRpb25TZWFzb25hbERpc2Vhc2VNb2RlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBkZWZhdWx0Q2FzZSh0aGVFT2JqZWN0KTsKKwkJCQlyZXR1cm4gcmVzdWx0OworCQkJfQorCQkJZGVmYXVsdDogcmV0dXJuIGRlZmF1bHRDYXNlKHRoZUVPYmplY3QpOworCQl9CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+TXVsdGkgUG9wdWxhdGlvbiBTSSBEaXNlYXNlIE1vZGVsPC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7CisJICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCisJICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+TXVsdGkgUG9wdWxhdGlvbiBTSSBEaXNlYXNlIE1vZGVsPC9lbT4nLgorCSAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVDEgY2FzZU11bHRpUG9wdWxhdGlvblNJRGlzZWFzZU1vZGVsKE11bHRpUG9wdWxhdGlvblNJRGlzZWFzZU1vZGVsIG9iamVjdCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5NdWx0aSBQb3B1bGF0aW9uIFNJUiBEaXNlYXNlIE1vZGVsPC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7CisJICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCisJICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+TXVsdGkgUG9wdWxhdGlvbiBTSVIgRGlzZWFzZSBNb2RlbDwvZW0+Jy4KKwkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFQxIGNhc2VNdWx0aVBvcHVsYXRpb25TSVJEaXNlYXNlTW9kZWwoTXVsdGlQb3B1bGF0aW9uU0lSRGlzZWFzZU1vZGVsIG9iamVjdCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5NdWx0aSBQb3B1bGF0aW9uIFNFSVIgRGlzZWFzZSBNb2RlbDwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOworCSAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgorCSAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPk11bHRpIFBvcHVsYXRpb24gU0VJUiBEaXNlYXNlIE1vZGVsPC9lbT4nLgorCSAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVDEgY2FzZU11bHRpUG9wdWxhdGlvblNFSVJEaXNlYXNlTW9kZWwoTXVsdGlQb3B1bGF0aW9uU0VJUkRpc2Vhc2VNb2RlbCBvYmplY3QpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+TXVsdGkgUG9wdWxhdGlvbiBTZWFzb25hbCBEaXNlYXNlIE1vZGVsPC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7CisJICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCisJICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+TXVsdGkgUG9wdWxhdGlvbiBTZWFzb25hbCBEaXNlYXNlIE1vZGVsPC9lbT4nLgorCSAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVDEgY2FzZU11bHRpUG9wdWxhdGlvblNlYXNvbmFsRGlzZWFzZU1vZGVsKE11bHRpUG9wdWxhdGlvblNlYXNvbmFsRGlzZWFzZU1vZGVsIG9iamVjdCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5Db21wYXJhYmxlPC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7CisJICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCisJICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+Q29tcGFyYWJsZTwvZW0+Jy4KKwkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIDxUPiBUMSBjYXNlQ29tcGFyYWJsZShDb21wYXJhYmxlPFQ+IG9iamVjdCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5JZGVudGlmaWFibGU8L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsKKwkgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KKwkgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5JZGVudGlmaWFibGU8L2VtPicuCisJICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBUMSBjYXNlSWRlbnRpZmlhYmxlKElkZW50aWZpYWJsZSBvYmplY3QpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+RGVjb3JhdG9yPC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7CisJICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCisJICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+RGVjb3JhdG9yPC9lbT4nLgorCSAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVDEgY2FzZURlY29yYXRvcihEZWNvcmF0b3Igb2JqZWN0KSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPk5vZGUgRGVjb3JhdG9yPC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7CisJICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCisJICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+Tm9kZSBEZWNvcmF0b3I8L2VtPicuCisJICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBUMSBjYXNlTm9kZURlY29yYXRvcihOb2RlRGVjb3JhdG9yIG9iamVjdCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5TYW5pdHkgQ2hlY2tlcjwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOworCSAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgorCSAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPlNhbml0eSBDaGVja2VyPC9lbT4nLgorCSAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVDEgY2FzZVNhbml0eUNoZWNrZXIoU2FuaXR5Q2hlY2tlciBvYmplY3QpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+TW9kaWZpYWJsZTwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOworCSAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgorCSAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPk1vZGlmaWFibGU8L2VtPicuCisJICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBUMSBjYXNlTW9kaWZpYWJsZShNb2RpZmlhYmxlIG9iamVjdCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5EaXNlYXNlIE1vZGVsPC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7CisJICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCisJICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+RGlzZWFzZSBNb2RlbDwvZW0+Jy4KKwkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFQxIGNhc2VEaXNlYXNlTW9kZWwoRGlzZWFzZU1vZGVsIG9iamVjdCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5JbnRlZ3JhdGlvbiBEZWNvcmF0b3I8L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsKKwkgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KKwkgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5JbnRlZ3JhdGlvbiBEZWNvcmF0b3I8L2VtPicuCisJICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBUMSBjYXNlSW50ZWdyYXRpb25EZWNvcmF0b3IoSW50ZWdyYXRpb25EZWNvcmF0b3Igb2JqZWN0KSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkRpc2Vhc2UgTW9kZWw8L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsKKwkgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KKwkgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5EaXNlYXNlIE1vZGVsPC9lbT4nLgorCSAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVDEgY2FzZVN0YW5kYXJkRGlzZWFzZU1vZGVsKFN0YW5kYXJkRGlzZWFzZU1vZGVsIG9iamVjdCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5FT2JqZWN0PC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7CisJICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2gsIGJ1dCB0aGlzIGlzIHRoZSBsYXN0IGNhc2UgYW55d2F5LgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgorCSAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkVPYmplY3Q8L2VtPicuCisJICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBUMSBkZWZhdWx0Q2FzZShFT2JqZWN0IG9iamVjdCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKK30gLy9NdWx0aXBvcHVsYXRpb25Td2l0Y2gKZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci8uY2xhc3NwYXRoIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLy5jbGFzc3BhdGgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzA0ZTg2MQotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci8uY2xhc3NwYXRoCkBAIC0wLDAgKzEsNyBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxjbGFzc3BhdGg+CisJPGNsYXNzcGF0aGVudHJ5IGtpbmQ9InNyYyIgcGF0aD0ic3JjIi8+CisJPGNsYXNzcGF0aGVudHJ5IGtpbmQ9ImNvbiIgcGF0aD0ib3JnLmVjbGlwc2UuamR0LmxhdW5jaGluZy5KUkVfQ09OVEFJTkVSL29yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC5kZWJ1Zy51aS5sYXVuY2hlci5TdGFuZGFyZFZNVHlwZS9KMlNFLTEuNSIvPgorCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJjb24iIHBhdGg9Im9yZy5lY2xpcHNlLnBkZS5jb3JlLnJlcXVpcmVkUGx1Z2lucyIvPgorCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJvdXRwdXQiIHBhdGg9ImJpbiIvPgorPC9jbGFzc3BhdGg+CmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IvLnByb2plY3QgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IvLnByb2plY3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGQzMTkyZAotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci8ucHJvamVjdApAQCAtMCwwICsxLDI4IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPHByb2plY3REZXNjcmlwdGlvbj4KKwk8bmFtZT5vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yPC9uYW1lPgorCTxjb21tZW50PjwvY29tbWVudD4KKwk8cHJvamVjdHM+CisJPC9wcm9qZWN0cz4KKwk8YnVpbGRTcGVjPgorCQk8YnVpbGRDb21tYW5kPgorCQkJPG5hbWU+b3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YWJ1aWxkZXI8L25hbWU+CisJCQk8YXJndW1lbnRzPgorCQkJPC9hcmd1bWVudHM+CisJCTwvYnVpbGRDb21tYW5kPgorCQk8YnVpbGRDb21tYW5kPgorCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLk1hbmlmZXN0QnVpbGRlcjwvbmFtZT4KKwkJCTxhcmd1bWVudHM+CisJCQk8L2FyZ3VtZW50cz4KKwkJPC9idWlsZENvbW1hbmQ+CisJCTxidWlsZENvbW1hbmQ+CisJCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuU2NoZW1hQnVpbGRlcjwvbmFtZT4KKwkJCTxhcmd1bWVudHM+CisJCQk8L2FyZ3VtZW50cz4KKwkJPC9idWlsZENvbW1hbmQ+CisJPC9idWlsZFNwZWM+CisJPG5hdHVyZXM+CisJCTxuYXR1cmU+b3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YW5hdHVyZTwvbmF0dXJlPgorCQk8bmF0dXJlPm9yZy5lY2xpcHNlLnBkZS5QbHVnaW5OYXR1cmU8L25hdHVyZT4KKwk8L25hdHVyZXM+Cis8L3Byb2plY3REZXNjcmlwdGlvbj4KZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci9NRVRBLUlORi9NQU5JRkVTVC5NRiBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci9NRVRBLUlORi9NQU5JRkVTVC5NRgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iODY4MmVjCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yL01FVEEtSU5GL01BTklGRVNULk1GCkBAIC0wLDAgKzEsMjIgQEAKK01hbmlmZXN0LVZlcnNpb246IDEuMAorQnVuZGxlLU1hbmlmZXN0VmVyc2lvbjogMgorQnVuZGxlLU5hbWU6ICVwbHVnaW5OYW1lCitCdW5kbGUtU3ltYm9saWNOYW1lOiBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yO3NpbmdsZXRvbjo9dHJ1ZQorQnVuZGxlLVZlcnNpb246IDEuMi4xCitCdW5kbGUtQ2xhc3NQYXRoOiAuCitCdW5kbGUtVmVuZG9yOiAlcHJvdmlkZXJOYW1lCitCdW5kbGUtTG9jYWxpemF0aW9uOiBwbHVnaW4KK0J1bmRsZS1SZXF1aXJlZEV4ZWN1dGlvbkVudmlyb25tZW50OiBKMlNFLTEuNQorRXhwb3J0LVBhY2thZ2U6IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IsCisgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5pbXBsLAorIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IucHJvdmlkZXIsCisgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci51dGlsCitSZXF1aXJlLUJ1bmRsZTogb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLAorIG9yZy5lY2xpcHNlLmVtZi5lY29yZTt2aXNpYmlsaXR5Oj1yZWV4cG9ydCwKKyBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHM7dmlzaWJpbGl0eTo9cmVleHBvcnQsCisgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlO3Zpc2liaWxpdHk6PXJlZXhwb3J0LAorIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnM7dmlzaWJpbGl0eTo9cmVleHBvcnQsCisgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzO3Zpc2liaWxpdHk6PXJlZXhwb3J0LAorIG9yZy5lY2xpcHNlLmVtZi5lY29yZS5lZGl0CitCdW5kbGUtQWN0aXZhdGlvblBvbGljeTogbGF6eQorQnVuZGxlLUFjdGl2YXRvcjogb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5BY3RpdmF0b3IKZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci9idWlsZC5wcm9wZXJ0aWVzIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yL2J1aWxkLnByb3BlcnRpZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDRiZmIzNQotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci9idWlsZC5wcm9wZXJ0aWVzCkBAIC0wLDAgKzEsMTggQEAKKworIyA8Y29weXJpZ2h0PgorIyA8L2NvcHlyaWdodD4KKyMKKyMgJElkJAorCitiaW4uaW5jbHVkZXMgPSAuLFwKKyAgICAgICAgICAgICAgIG1vZGVsLyxcCisgICAgICAgICAgICAgICBNRVRBLUlORi8sXAorICAgICAgICAgICAgICAgcGx1Z2luLnhtbCxcCisgICAgICAgICAgICAgICBwbHVnaW4ucHJvcGVydGllcyxcCisgICAgICAgICAgICAgICBpY29ucy8sXAorICAgICAgICAgICAgICAgcGx1Z2luX2RlLnByb3BlcnRpZXMsXAorICAgICAgICAgICAgICAgcGx1Z2luX2tyLnByb3BlcnRpZXMsXAorICAgICAgICAgICAgICAgcGx1Z2luX3poLnByb3BlcnRpZXMKK2phcnMuY29tcGlsZS5vcmRlciA9IC4KK3NvdXJjZS4uID0gc3JjLworb3V0cHV0Li4gPSBiaW4vCmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IvaWNvbnMvZnVsbC9jdXN0b20xNi9NYWNkb25hbGRSb3NzRGlzZWFzZU1vZGVsLmdpZiBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci9pY29ucy9mdWxsL2N1c3RvbTE2L01hY2RvbmFsZFJvc3NEaXNlYXNlTW9kZWwuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMzMGExZWUKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IvaWNvbnMvZnVsbC9jdXN0b20xNi9NYWNkb25hbGRSb3NzRGlzZWFzZU1vZGVsLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IvaWNvbnMvZnVsbC9vYmoxNi9EZW5ndWVNb2RlbC5naWYgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IvaWNvbnMvZnVsbC9vYmoxNi9EZW5ndWVNb2RlbC5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzM5ZWJiZgotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci9pY29ucy9mdWxsL29iajE2L0Rlbmd1ZU1vZGVsLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IvaWNvbnMvZnVsbC9vYmoxNi9EZW5ndWVNb2RlbEhvc3RMYWJlbC5naWYgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IvaWNvbnMvZnVsbC9vYmoxNi9EZW5ndWVNb2RlbEhvc3RMYWJlbC5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGI3NDE0ZQotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci9pY29ucy9mdWxsL29iajE2L0Rlbmd1ZU1vZGVsSG9zdExhYmVsLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IvaWNvbnMvZnVsbC9vYmoxNi9EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlLmdpZiBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci9pY29ucy9mdWxsL29iajE2L0Rlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWUuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM0ZmIzMGUKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IvaWNvbnMvZnVsbC9vYmoxNi9EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IvaWNvbnMvZnVsbC9vYmoxNi9EZW5ndWVNb2RlbFZlY3RvckxhYmVsLmdpZiBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci9pY29ucy9mdWxsL29iajE2L0Rlbmd1ZU1vZGVsVmVjdG9yTGFiZWwuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNkZDNiNzYKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IvaWNvbnMvZnVsbC9vYmoxNi9EZW5ndWVNb2RlbFZlY3RvckxhYmVsLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IvaWNvbnMvZnVsbC9vYmoxNi9EZW5ndWVNb2RlbFZlY3RvckxhYmVsVmFsdWUuZ2lmIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yL2ljb25zL2Z1bGwvb2JqMTYvRGVuZ3VlTW9kZWxWZWN0b3JMYWJlbFZhbHVlLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YTVjNzBjCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yL2ljb25zL2Z1bGwvb2JqMTYvRGVuZ3VlTW9kZWxWZWN0b3JMYWJlbFZhbHVlLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IvaWNvbnMvZnVsbC9vYmoxNi9NYWNkb25hbGRSb3NzRGlzZWFzZU1vZGVsLmdpZiBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci9pY29ucy9mdWxsL29iajE2L01hY2RvbmFsZFJvc3NEaXNlYXNlTW9kZWwuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjczOWViYmYKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IvaWNvbnMvZnVsbC9vYmoxNi9NYWNkb25hbGRSb3NzRGlzZWFzZU1vZGVsLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IvaWNvbnMvZnVsbC9vYmoxNi9TaW1wbGVEZW5ndWVNb2RlbC5naWYgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IvaWNvbnMvZnVsbC9vYmoxNi9TaW1wbGVEZW5ndWVNb2RlbC5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWE1OGE2NQotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci9pY29ucy9mdWxsL29iajE2L1NpbXBsZURlbmd1ZU1vZGVsLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IvbW9kZWwvdmVjdG9yLmVjb3JlIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yL21vZGVsL3ZlY3Rvci5lY29yZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MDg5MDM2Ci0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yL21vZGVsL3ZlY3Rvci5lY29yZQpAQCAtMCwwICsxLDQwMSBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4NCis8ZWNvcmU6RVBhY2thZ2UgeG1pOnZlcnNpb249IjIuMCINCisgICAgeG1sbnM6eG1pPSJodHRwOi8vd3d3Lm9tZy5vcmcvWE1JIiB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIg0KKyAgICB4bWxuczplY29yZT0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9lbWYvMjAwMi9FY29yZSIgbmFtZT0idmVjdG9yIg0KKyAgICBuc1VSST0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvdmVjdG9yLmVjb3JlIiBuc1ByZWZpeD0ib3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3RvciI+DQorICA8ZUNsYXNzaWZpZXJzIHhzaTp0eXBlPSJlY29yZTpFQ2xhc3MiIG5hbWU9Ik1hY2RvbmFsZFJvc3NEaXNlYXNlTW9kZWwiIGVTdXBlclR5cGVzPSIjLy9WZWN0b3JEaXNlYXNlTW9kZWwiPg0KKyAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0iYml0aW5nUmF0ZSIgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLmVtZi5lY29yZS9tb2RlbC9FY29yZS5lY29yZSMvL0VEb3VibGUiDQorICAgICAgICBkZWZhdWx0VmFsdWVMaXRlcmFsPSIwLjUiLz4NCisgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVBdHRyaWJ1dGUiIG5hbWU9ImluZmVjdGlvdXNCaXRpbmdQcm9wb3J0aW9uSHVtYW4iDQorICAgICAgICBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIHBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2UuZW1mLmVjb3JlL21vZGVsL0Vjb3JlLmVjb3JlIy8vRURvdWJsZSINCisgICAgICAgIGRlZmF1bHRWYWx1ZUxpdGVyYWw9IjAuNSIvPg0KKyAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0iaW5mZWN0aW91c0JpdGluZ1Byb3BvcnRpb25WZWN0b3IiDQorICAgICAgICBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIHBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2UuZW1mLmVjb3JlL21vZGVsL0Vjb3JlLmVjb3JlIy8vRURvdWJsZSINCisgICAgICAgIGRlZmF1bHRWYWx1ZUxpdGVyYWw9IjEuMCIvPg0KKyAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0icmVjb3ZlcnlSYXRlIiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIHBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2UuZW1mLmVjb3JlL21vZGVsL0Vjb3JlLmVjb3JlIy8vRURvdWJsZSINCisgICAgICAgIGRlZmF1bHRWYWx1ZUxpdGVyYWw9IjMuMzNFLTMiLz4NCisgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVBdHRyaWJ1dGUiIG5hbWU9ImluY3ViYXRpb25SYXRlIiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIHBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2UuZW1mLmVjb3JlL21vZGVsL0Vjb3JlLmVjb3JlIy8vRURvdWJsZSINCisgICAgICAgIGRlZmF1bHRWYWx1ZUxpdGVyYWw9IjAuMDYyNSIvPg0KKyAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0idmVjdG9ySW5jdWJhdGlvblJhdGUiIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgcGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5lbWYuZWNvcmUvbW9kZWwvRWNvcmUuZWNvcmUjLy9FRG91YmxlIg0KKyAgICAgICAgZGVmYXVsdFZhbHVlTGl0ZXJhbD0iMC4xIi8+DQorICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJpbW11bml0eUxvc3NSYXRlIiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIHBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2UuZW1mLmVjb3JlL21vZGVsL0Vjb3JlLmVjb3JlIy8vRURvdWJsZSINCisgICAgICAgIGRlZmF1bHRWYWx1ZUxpdGVyYWw9IjAuMDIiLz4NCisgIDwvZUNsYXNzaWZpZXJzPg0KKyAgPGVDbGFzc2lmaWVycyB4c2k6dHlwZT0iZWNvcmU6RUNsYXNzIiBuYW1lPSJWZWN0b3JEaXNlYXNlTW9kZWwiIGFic3RyYWN0PSJ0cnVlIg0KKyAgICAgIGVTdXBlclR5cGVzPSIuLi8uLi9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMvbW9kZWwvc3RhbmRhcmQuZWNvcmUjLy9TdGFuZGFyZERpc2Vhc2VNb2RlbCI+DQorICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJ2ZWN0b3JQb3B1bGF0aW9uSWRlbnRpZmllciINCisgICAgICAgIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgcGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5lbWYuZWNvcmUvbW9kZWwvRWNvcmUuZWNvcmUjLy9FU3RyaW5nIg0KKyAgICAgICAgZGVmYXVsdFZhbHVlTGl0ZXJhbD0iYW5vcGhlbGVzIi8+DQorICA8L2VDbGFzc2lmaWVycz4NCisgIDxlQ2xhc3NpZmllcnMgeHNpOnR5cGU9ImVjb3JlOkVDbGFzcyIgbmFtZT0iRGVuZ3VlTW9kZWwiIGVTdXBlclR5cGVzPSIjLy9WZWN0b3JEaXNlYXNlTW9kZWwiPg0KKyAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0iYml0aW5nUmF0ZVNWIiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIHBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2UuZW1mLmVjb3JlL21vZGVsL0Vjb3JlLmVjb3JlIy8vRURvdWJsZSINCisgICAgICAgIGRlZmF1bHRWYWx1ZUxpdGVyYWw9IjEiLz4NCisgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVBdHRyaWJ1dGUiIG5hbWU9ImJpdGluZ1JhdGVJViIgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLmVtZi5lY29yZS9tb2RlbC9FY29yZS5lY29yZSMvL0VEb3VibGUiDQorICAgICAgICBkZWZhdWx0VmFsdWVMaXRlcmFsPSIxIi8+DQorICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJob3N0SW5mZWN0aXZpdHkxIiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIHBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2UuZW1mLmVjb3JlL21vZGVsL0Vjb3JlLmVjb3JlIy8vRURvdWJsZSINCisgICAgICAgIGRlZmF1bHRWYWx1ZUxpdGVyYWw9IjAuNSIvPg0KKyAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0iaG9zdEluZmVjdGl2aXR5MiIgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLmVtZi5lY29yZS9tb2RlbC9FY29yZS5lY29yZSMvL0VEb3VibGUiDQorICAgICAgICBkZWZhdWx0VmFsdWVMaXRlcmFsPSIwLjUiLz4NCisgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVBdHRyaWJ1dGUiIG5hbWU9Imhvc3RJbmZlY3Rpdml0eTMiIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgcGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5lbWYuZWNvcmUvbW9kZWwvRWNvcmUuZWNvcmUjLy9FRG91YmxlIg0KKyAgICAgICAgZGVmYXVsdFZhbHVlTGl0ZXJhbD0iMC41Ii8+DQorICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJob3N0SW5mZWN0aXZpdHk0IiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIHBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2UuZW1mLmVjb3JlL21vZGVsL0Vjb3JlLmVjb3JlIy8vRURvdWJsZSINCisgICAgICAgIGRlZmF1bHRWYWx1ZUxpdGVyYWw9IjAuNSIvPg0KKyAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0iaG9zdFByaW1hcnlJbmN1YmF0aW9uUmF0ZTEiDQorICAgICAgICBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIHBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2UuZW1mLmVjb3JlL21vZGVsL0Vjb3JlLmVjb3JlIy8vRURvdWJsZSINCisgICAgICAgIGRlZmF1bHRWYWx1ZUxpdGVyYWw9IjAuMiIvPg0KKyAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0iaG9zdFByaW1hcnlJbmN1YmF0aW9uUmF0ZTIiDQorICAgICAgICBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIHBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2UuZW1mLmVjb3JlL21vZGVsL0Vjb3JlLmVjb3JlIy8vRURvdWJsZSINCisgICAgICAgIGRlZmF1bHRWYWx1ZUxpdGVyYWw9IjAuMiIvPg0KKyAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0iaG9zdFByaW1hcnlJbmN1YmF0aW9uUmF0ZTMiDQorICAgICAgICBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIHBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2UuZW1mLmVjb3JlL21vZGVsL0Vjb3JlLmVjb3JlIy8vRURvdWJsZSINCisgICAgICAgIGRlZmF1bHRWYWx1ZUxpdGVyYWw9IjAuMiIvPg0KKyAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0iaG9zdFByaW1hcnlJbmN1YmF0aW9uUmF0ZTQiDQorICAgICAgICBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIHBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2UuZW1mLmVjb3JlL21vZGVsL0Vjb3JlLmVjb3JlIy8vRURvdWJsZSINCisgICAgICAgIGRlZmF1bHRWYWx1ZUxpdGVyYWw9IjAuMiIvPg0KKyAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0iaG9zdFByaW1hcnlSZWNvdmVyeVJhdGUxIg0KKyAgICAgICAgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLmVtZi5lY29yZS9tb2RlbC9FY29yZS5lY29yZSMvL0VEb3VibGUiDQorICAgICAgICBkZWZhdWx0VmFsdWVMaXRlcmFsPSIwLjE0Ii8+DQorICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJob3N0UHJpbWFyeVJlY292ZXJ5UmF0ZTIiDQorICAgICAgICBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIHBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2UuZW1mLmVjb3JlL21vZGVsL0Vjb3JlLmVjb3JlIy8vRURvdWJsZSINCisgICAgICAgIGRlZmF1bHRWYWx1ZUxpdGVyYWw9IjAuMTQiLz4NCisgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVBdHRyaWJ1dGUiIG5hbWU9Imhvc3RQcmltYXJ5UmVjb3ZlcnlSYXRlMyINCisgICAgICAgIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgcGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5lbWYuZWNvcmUvbW9kZWwvRWNvcmUuZWNvcmUjLy9FRG91YmxlIg0KKyAgICAgICAgZGVmYXVsdFZhbHVlTGl0ZXJhbD0iMC4xNCIvPg0KKyAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0iaG9zdFByaW1hcnlSZWNvdmVyeVJhdGU0Ig0KKyAgICAgICAgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLmVtZi5lY29yZS9tb2RlbC9FY29yZS5lY29yZSMvL0VEb3VibGUiDQorICAgICAgICBkZWZhdWx0VmFsdWVMaXRlcmFsPSIwLjE0Ii8+DQorICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJob3N0UHJpbWFyeUltbXVuaXR5TG9zc1JhdGUxIg0KKyAgICAgICAgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLmVtZi5lY29yZS9tb2RlbC9FY29yZS5lY29yZSMvL0VEb3VibGUiDQorICAgICAgICBkZWZhdWx0VmFsdWVMaXRlcmFsPSIwLjAyNCIvPg0KKyAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0iaG9zdFByaW1hcnlJbW11bml0eUxvc3NSYXRlMiINCisgICAgICAgIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgcGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5lbWYuZWNvcmUvbW9kZWwvRWNvcmUuZWNvcmUjLy9FRG91YmxlIg0KKyAgICAgICAgZGVmYXVsdFZhbHVlTGl0ZXJhbD0iMC4wMjQiLz4NCisgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVBdHRyaWJ1dGUiIG5hbWU9Imhvc3RQcmltYXJ5SW1tdW5pdHlMb3NzUmF0ZTMiDQorICAgICAgICBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIHBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2UuZW1mLmVjb3JlL21vZGVsL0Vjb3JlLmVjb3JlIy8vRURvdWJsZSINCisgICAgICAgIGRlZmF1bHRWYWx1ZUxpdGVyYWw9IjAuMDI0Ii8+DQorICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJob3N0UHJpbWFyeUltbXVuaXR5TG9zc1JhdGU0Ig0KKyAgICAgICAgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLmVtZi5lY29yZS9tb2RlbC9FY29yZS5lY29yZSMvL0VEb3VibGUiDQorICAgICAgICBkZWZhdWx0VmFsdWVMaXRlcmFsPSIwLjAyNCIvPg0KKyAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0iaG9zdFByaW1hcnlEaXNlYXNlRGVhdGhSYXRlMSINCisgICAgICAgIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgcGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5lbWYuZWNvcmUvbW9kZWwvRWNvcmUuZWNvcmUjLy9FRG91YmxlIg0KKyAgICAgICAgZGVmYXVsdFZhbHVlTGl0ZXJhbD0iMC4wMDAwMDAxIi8+DQorICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJob3N0UHJpbWFyeURpc2Vhc2VEZWF0aFJhdGUyIg0KKyAgICAgICAgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLmVtZi5lY29yZS9tb2RlbC9FY29yZS5lY29yZSMvL0VEb3VibGUiDQorICAgICAgICBkZWZhdWx0VmFsdWVMaXRlcmFsPSIwLjAwMDAwMDEiLz4NCisgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVBdHRyaWJ1dGUiIG5hbWU9Imhvc3RQcmltYXJ5RGlzZWFzZURlYXRoUmF0ZTMiDQorICAgICAgICBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIHBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2UuZW1mLmVjb3JlL21vZGVsL0Vjb3JlLmVjb3JlIy8vRURvdWJsZSINCisgICAgICAgIGRlZmF1bHRWYWx1ZUxpdGVyYWw9IjAuMDAwMDAwMSIvPg0KKyAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0iaG9zdFByaW1hcnlEaXNlYXNlRGVhdGhSYXRlNCINCisgICAgICAgIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgcGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5lbWYuZWNvcmUvbW9kZWwvRWNvcmUuZWNvcmUjLy9FRG91YmxlIg0KKyAgICAgICAgZGVmYXVsdFZhbHVlTGl0ZXJhbD0iMC4wMDAwMDAxIi8+DQorICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJob3N0QURFMTIiIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgcGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5lbWYuZWNvcmUvbW9kZWwvRWNvcmUuZWNvcmUjLy9FRG91YmxlIg0KKyAgICAgICAgZGVmYXVsdFZhbHVlTGl0ZXJhbD0iMS44Ii8+DQorICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJob3N0QURFMTMiIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgcGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5lbWYuZWNvcmUvbW9kZWwvRWNvcmUuZWNvcmUjLy9FRG91YmxlIg0KKyAgICAgICAgZGVmYXVsdFZhbHVlTGl0ZXJhbD0iMS44Ii8+DQorICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJob3N0QURFMTQiIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgcGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5lbWYuZWNvcmUvbW9kZWwvRWNvcmUuZWNvcmUjLy9FRG91YmxlIg0KKyAgICAgICAgZGVmYXVsdFZhbHVlTGl0ZXJhbD0iMS44Ii8+DQorICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJob3N0QURFMjEiIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgcGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5lbWYuZWNvcmUvbW9kZWwvRWNvcmUuZWNvcmUjLy9FRG91YmxlIg0KKyAgICAgICAgZGVmYXVsdFZhbHVlTGl0ZXJhbD0iMS44Ii8+DQorICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJob3N0QURFMjMiIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgcGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5lbWYuZWNvcmUvbW9kZWwvRWNvcmUuZWNvcmUjLy9FRG91YmxlIg0KKyAgICAgICAgZGVmYXVsdFZhbHVlTGl0ZXJhbD0iMS44Ii8+DQorICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJob3N0QURFMjQiIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgcGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5lbWYuZWNvcmUvbW9kZWwvRWNvcmUuZWNvcmUjLy9FRG91YmxlIg0KKyAgICAgICAgZGVmYXVsdFZhbHVlTGl0ZXJhbD0iMS44Ii8+DQorICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJob3N0QURFMzEiIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgcGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5lbWYuZWNvcmUvbW9kZWwvRWNvcmUuZWNvcmUjLy9FRG91YmxlIg0KKyAgICAgICAgZGVmYXVsdFZhbHVlTGl0ZXJhbD0iMS44Ii8+DQorICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJob3N0QURFMzIiIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgcGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5lbWYuZWNvcmUvbW9kZWwvRWNvcmUuZWNvcmUjLy9FRG91YmxlIg0KKyAgICAgICAgZGVmYXVsdFZhbHVlTGl0ZXJhbD0iMS44Ii8+DQorICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJob3N0QURFMzQiIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgcGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5lbWYuZWNvcmUvbW9kZWwvRWNvcmUuZWNvcmUjLy9FRG91YmxlIg0KKyAgICAgICAgZGVmYXVsdFZhbHVlTGl0ZXJhbD0iMS44Ii8+DQorICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJob3N0QURFNDEiIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgcGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5lbWYuZWNvcmUvbW9kZWwvRWNvcmUuZWNvcmUjLy9FRG91YmxlIg0KKyAgICAgICAgZGVmYXVsdFZhbHVlTGl0ZXJhbD0iMS44Ii8+DQorICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJob3N0QURFNDIiIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgcGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5lbWYuZWNvcmUvbW9kZWwvRWNvcmUuZWNvcmUjLy9FRG91YmxlIg0KKyAgICAgICAgZGVmYXVsdFZhbHVlTGl0ZXJhbD0iMS44Ii8+DQorICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJob3N0QURFNDMiIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgcGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5lbWYuZWNvcmUvbW9kZWwvRWNvcmUuZWNvcmUjLy9FRG91YmxlIg0KKyAgICAgICAgZGVmYXVsdFZhbHVlTGl0ZXJhbD0iMS44Ii8+DQorICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJob3N0U2Vjb25kYXJ5RGlzZWFzZURlYXRoUmF0ZTEyIg0KKyAgICAgICAgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLmVtZi5lY29yZS9tb2RlbC9FY29yZS5lY29yZSMvL0VEb3VibGUiDQorICAgICAgICBkZWZhdWx0VmFsdWVMaXRlcmFsPSIwLjAwMTIzIi8+DQorICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJob3N0U2Vjb25kYXJ5RGlzZWFzZURlYXRoUmF0ZTEzIg0KKyAgICAgICAgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLmVtZi5lY29yZS9tb2RlbC9FY29yZS5lY29yZSMvL0VEb3VibGUiDQorICAgICAgICBkZWZhdWx0VmFsdWVMaXRlcmFsPSIwLjAwMTIzIi8+DQorICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJob3N0U2Vjb25kYXJ5RGlzZWFzZURlYXRoUmF0ZTE0Ig0KKyAgICAgICAgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLmVtZi5lY29yZS9tb2RlbC9FY29yZS5lY29yZSMvL0VEb3VibGUiDQorICAgICAgICBkZWZhdWx0VmFsdWVMaXRlcmFsPSIwLjAwMTIzIi8+DQorICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJob3N0U2Vjb25kYXJ5RGlzZWFzZURlYXRoUmF0ZTIxIg0KKyAgICAgICAgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLmVtZi5lY29yZS9tb2RlbC9FY29yZS5lY29yZSMvL0VEb3VibGUiDQorICAgICAgICBkZWZhdWx0VmFsdWVMaXRlcmFsPSIwLjAwMTIzIi8+DQorICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJob3N0U2Vjb25kYXJ5RGlzZWFzZURlYXRoUmF0ZTIzIg0KKyAgICAgICAgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLmVtZi5lY29yZS9tb2RlbC9FY29yZS5lY29yZSMvL0VEb3VibGUiDQorICAgICAgICBkZWZhdWx0VmFsdWVMaXRlcmFsPSIwLjAwMTIzIi8+DQorICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJob3N0U2Vjb25kYXJ5RGlzZWFzZURlYXRoUmF0ZTI0Ig0KKyAgICAgICAgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLmVtZi5lY29yZS9tb2RlbC9FY29yZS5lY29yZSMvL0VEb3VibGUiDQorICAgICAgICBkZWZhdWx0VmFsdWVMaXRlcmFsPSIwLjAwMTIzIi8+DQorICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJob3N0U2Vjb25kYXJ5RGlzZWFzZURlYXRoUmF0ZTMxIg0KKyAgICAgICAgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLmVtZi5lY29yZS9tb2RlbC9FY29yZS5lY29yZSMvL0VEb3VibGUiDQorICAgICAgICBkZWZhdWx0VmFsdWVMaXRlcmFsPSIwLjAwMTIzIi8+DQorICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJob3N0U2Vjb25kYXJ5RGlzZWFzZURlYXRoUmF0ZTMyIg0KKyAgICAgICAgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLmVtZi5lY29yZS9tb2RlbC9FY29yZS5lY29yZSMvL0VEb3VibGUiDQorICAgICAgICBkZWZhdWx0VmFsdWVMaXRlcmFsPSIwLjAwMTIzIi8+DQorICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJob3N0U2Vjb25kYXJ5RGlzZWFzZURlYXRoUmF0ZTM0Ig0KKyAgICAgICAgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLmVtZi5lY29yZS9tb2RlbC9FY29yZS5lY29yZSMvL0VEb3VibGUiDQorICAgICAgICBkZWZhdWx0VmFsdWVMaXRlcmFsPSIwLjAwMTIzIi8+DQorICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJob3N0U2Vjb25kYXJ5RGlzZWFzZURlYXRoUmF0ZTQxIg0KKyAgICAgICAgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLmVtZi5lY29yZS9tb2RlbC9FY29yZS5lY29yZSMvL0VEb3VibGUiDQorICAgICAgICBkZWZhdWx0VmFsdWVMaXRlcmFsPSIwLjAwMTIzIi8+DQorICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJob3N0U2Vjb25kYXJ5RGlzZWFzZURlYXRoUmF0ZTQyIg0KKyAgICAgICAgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLmVtZi5lY29yZS9tb2RlbC9FY29yZS5lY29yZSMvL0VEb3VibGUiDQorICAgICAgICBkZWZhdWx0VmFsdWVMaXRlcmFsPSIwLjAwMTIzIi8+DQorICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJob3N0U2Vjb25kYXJ5RGlzZWFzZURlYXRoUmF0ZTQzIg0KKyAgICAgICAgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLmVtZi5lY29yZS9tb2RlbC9FY29yZS5lY29yZSMvL0VEb3VibGUiDQorICAgICAgICBkZWZhdWx0VmFsdWVMaXRlcmFsPSIwLjAwMTIzIi8+DQorICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJob3N0U2Vjb25kYXJ5UmVjb3ZlcnlSYXRlMTIiDQorICAgICAgICBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIHBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2UuZW1mLmVjb3JlL21vZGVsL0Vjb3JlLmVjb3JlIy8vRURvdWJsZSINCisgICAgICAgIGRlZmF1bHRWYWx1ZUxpdGVyYWw9IjAuMSIvPg0KKyAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0iaG9zdFNlY29uZGFyeVJlY292ZXJ5UmF0ZTEzIg0KKyAgICAgICAgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLmVtZi5lY29yZS9tb2RlbC9FY29yZS5lY29yZSMvL0VEb3VibGUiDQorICAgICAgICBkZWZhdWx0VmFsdWVMaXRlcmFsPSIwLjEiLz4NCisgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVBdHRyaWJ1dGUiIG5hbWU9Imhvc3RTZWNvbmRhcnlSZWNvdmVyeVJhdGUxNCINCisgICAgICAgIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgcGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5lbWYuZWNvcmUvbW9kZWwvRWNvcmUuZWNvcmUjLy9FRG91YmxlIg0KKyAgICAgICAgZGVmYXVsdFZhbHVlTGl0ZXJhbD0iMC4xIi8+DQorICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJob3N0U2Vjb25kYXJ5UmVjb3ZlcnlSYXRlMjEiDQorICAgICAgICBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIHBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2UuZW1mLmVjb3JlL21vZGVsL0Vjb3JlLmVjb3JlIy8vRURvdWJsZSINCisgICAgICAgIGRlZmF1bHRWYWx1ZUxpdGVyYWw9IjAuMSIvPg0KKyAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0iaG9zdFNlY29uZGFyeVJlY292ZXJ5UmF0ZTIzIg0KKyAgICAgICAgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLmVtZi5lY29yZS9tb2RlbC9FY29yZS5lY29yZSMvL0VEb3VibGUiDQorICAgICAgICBkZWZhdWx0VmFsdWVMaXRlcmFsPSIwLjEiLz4NCisgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVBdHRyaWJ1dGUiIG5hbWU9Imhvc3RTZWNvbmRhcnlSZWNvdmVyeVJhdGUyNCINCisgICAgICAgIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgcGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5lbWYuZWNvcmUvbW9kZWwvRWNvcmUuZWNvcmUjLy9FRG91YmxlIg0KKyAgICAgICAgZGVmYXVsdFZhbHVlTGl0ZXJhbD0iMC4xIi8+DQorICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJob3N0U2Vjb25kYXJ5UmVjb3ZlcnlSYXRlMzEiDQorICAgICAgICBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIHBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2UuZW1mLmVjb3JlL21vZGVsL0Vjb3JlLmVjb3JlIy8vRURvdWJsZSINCisgICAgICAgIGRlZmF1bHRWYWx1ZUxpdGVyYWw9IjAuMSIvPg0KKyAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0iaG9zdFNlY29uZGFyeVJlY292ZXJ5UmF0ZTMyIg0KKyAgICAgICAgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLmVtZi5lY29yZS9tb2RlbC9FY29yZS5lY29yZSMvL0VEb3VibGUiDQorICAgICAgICBkZWZhdWx0VmFsdWVMaXRlcmFsPSIwLjEiLz4NCisgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVBdHRyaWJ1dGUiIG5hbWU9Imhvc3RTZWNvbmRhcnlSZWNvdmVyeVJhdGUzNCINCisgICAgICAgIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgcGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5lbWYuZWNvcmUvbW9kZWwvRWNvcmUuZWNvcmUjLy9FRG91YmxlIg0KKyAgICAgICAgZGVmYXVsdFZhbHVlTGl0ZXJhbD0iMC4xIi8+DQorICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJob3N0U2Vjb25kYXJ5UmVjb3ZlcnlSYXRlNDEiDQorICAgICAgICBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIHBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2UuZW1mLmVjb3JlL21vZGVsL0Vjb3JlLmVjb3JlIy8vRURvdWJsZSINCisgICAgICAgIGRlZmF1bHRWYWx1ZUxpdGVyYWw9IjAuMSIvPg0KKyAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0iaG9zdFNlY29uZGFyeVJlY292ZXJ5UmF0ZTQyIg0KKyAgICAgICAgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLmVtZi5lY29yZS9tb2RlbC9FY29yZS5lY29yZSMvL0VEb3VibGUiDQorICAgICAgICBkZWZhdWx0VmFsdWVMaXRlcmFsPSIwLjEiLz4NCisgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVBdHRyaWJ1dGUiIG5hbWU9Imhvc3RTZWNvbmRhcnlSZWNvdmVyeVJhdGU0MyINCisgICAgICAgIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgcGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5lbWYuZWNvcmUvbW9kZWwvRWNvcmUuZWNvcmUjLy9FRG91YmxlIg0KKyAgICAgICAgZGVmYXVsdFZhbHVlTGl0ZXJhbD0iMC4xIi8+DQorICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJob3N0U2Vjb25kYXJ5SW5jdWJhdGlvblJhdGUxMiINCisgICAgICAgIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgcGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5lbWYuZWNvcmUvbW9kZWwvRWNvcmUuZWNvcmUjLy9FRG91YmxlIg0KKyAgICAgICAgZGVmYXVsdFZhbHVlTGl0ZXJhbD0iMC4yIi8+DQorICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJob3N0U2Vjb25kYXJ5SW5jdWJhdGlvblJhdGUxMyINCisgICAgICAgIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgcGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5lbWYuZWNvcmUvbW9kZWwvRWNvcmUuZWNvcmUjLy9FRG91YmxlIg0KKyAgICAgICAgZGVmYXVsdFZhbHVlTGl0ZXJhbD0iMC4yIi8+DQorICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJob3N0U2Vjb25kYXJ5SW5jdWJhdGlvblJhdGUxNCINCisgICAgICAgIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgcGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5lbWYuZWNvcmUvbW9kZWwvRWNvcmUuZWNvcmUjLy9FRG91YmxlIg0KKyAgICAgICAgZGVmYXVsdFZhbHVlTGl0ZXJhbD0iMC4yIi8+DQorICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJob3N0U2Vjb25kYXJ5SW5jdWJhdGlvblJhdGUyMSINCisgICAgICAgIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgcGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5lbWYuZWNvcmUvbW9kZWwvRWNvcmUuZWNvcmUjLy9FRG91YmxlIg0KKyAgICAgICAgZGVmYXVsdFZhbHVlTGl0ZXJhbD0iMC4yIi8+DQorICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJob3N0U2Vjb25kYXJ5SW5jdWJhdGlvblJhdGUyMyINCisgICAgICAgIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgcGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5lbWYuZWNvcmUvbW9kZWwvRWNvcmUuZWNvcmUjLy9FRG91YmxlIg0KKyAgICAgICAgZGVmYXVsdFZhbHVlTGl0ZXJhbD0iMC4yIi8+DQorICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJob3N0U2Vjb25kYXJ5SW5jdWJhdGlvblJhdGUyNCINCisgICAgICAgIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgcGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5lbWYuZWNvcmUvbW9kZWwvRWNvcmUuZWNvcmUjLy9FRG91YmxlIg0KKyAgICAgICAgZGVmYXVsdFZhbHVlTGl0ZXJhbD0iMC4yIi8+DQorICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJob3N0U2Vjb25kYXJ5SW5jdWJhdGlvblJhdGUzMSINCisgICAgICAgIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgcGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5lbWYuZWNvcmUvbW9kZWwvRWNvcmUuZWNvcmUjLy9FRG91YmxlIg0KKyAgICAgICAgZGVmYXVsdFZhbHVlTGl0ZXJhbD0iMC4yIi8+DQorICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJob3N0U2Vjb25kYXJ5SW5jdWJhdGlvblJhdGUzMiINCisgICAgICAgIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgcGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5lbWYuZWNvcmUvbW9kZWwvRWNvcmUuZWNvcmUjLy9FRG91YmxlIg0KKyAgICAgICAgZGVmYXVsdFZhbHVlTGl0ZXJhbD0iMC4yIi8+DQorICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJob3N0U2Vjb25kYXJ5SW5jdWJhdGlvblJhdGUzNCINCisgICAgICAgIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgcGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5lbWYuZWNvcmUvbW9kZWwvRWNvcmUuZWNvcmUjLy9FRG91YmxlIg0KKyAgICAgICAgZGVmYXVsdFZhbHVlTGl0ZXJhbD0iMC4yIi8+DQorICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJob3N0U2Vjb25kYXJ5SW5jdWJhdGlvblJhdGU0MSINCisgICAgICAgIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgcGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5lbWYuZWNvcmUvbW9kZWwvRWNvcmUuZWNvcmUjLy9FRG91YmxlIg0KKyAgICAgICAgZGVmYXVsdFZhbHVlTGl0ZXJhbD0iMC4yIi8+DQorICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJob3N0U2Vjb25kYXJ5SW5jdWJhdGlvblJhdGU0MiINCisgICAgICAgIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgcGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5lbWYuZWNvcmUvbW9kZWwvRWNvcmUuZWNvcmUjLy9FRG91YmxlIg0KKyAgICAgICAgZGVmYXVsdFZhbHVlTGl0ZXJhbD0iMC4yIi8+DQorICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJob3N0U2Vjb25kYXJ5SW5jdWJhdGlvblJhdGU0MyINCisgICAgICAgIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgcGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5lbWYuZWNvcmUvbW9kZWwvRWNvcmUuZWNvcmUjLy9FRG91YmxlIg0KKyAgICAgICAgZGVmYXVsdFZhbHVlTGl0ZXJhbD0iMC4yIi8+DQorICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJ2ZWN0b3JJbmZlY3Rpdml0eTEiIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgcGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5lbWYuZWNvcmUvbW9kZWwvRWNvcmUuZWNvcmUjLy9FRG91YmxlIg0KKyAgICAgICAgZGVmYXVsdFZhbHVlTGl0ZXJhbD0iMSIvPg0KKyAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0idmVjdG9ySW5mZWN0aXZpdHkyIiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIHBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2UuZW1mLmVjb3JlL21vZGVsL0Vjb3JlLmVjb3JlIy8vRURvdWJsZSINCisgICAgICAgIGRlZmF1bHRWYWx1ZUxpdGVyYWw9IjEiLz4NCisgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVBdHRyaWJ1dGUiIG5hbWU9InZlY3RvckluZmVjdGl2aXR5MyIgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLmVtZi5lY29yZS9tb2RlbC9FY29yZS5lY29yZSMvL0VEb3VibGUiDQorICAgICAgICBkZWZhdWx0VmFsdWVMaXRlcmFsPSIxIi8+DQorICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJ2ZWN0b3JJbmZlY3Rpdml0eTQiIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgcGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5lbWYuZWNvcmUvbW9kZWwvRWNvcmUuZWNvcmUjLy9FRG91YmxlIg0KKyAgICAgICAgZGVmYXVsdFZhbHVlTGl0ZXJhbD0iMSIvPg0KKyAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0idmVjdG9yQURFMSIgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLmVtZi5lY29yZS9tb2RlbC9FY29yZS5lY29yZSMvL0VEb3VibGUiDQorICAgICAgICBkZWZhdWx0VmFsdWVMaXRlcmFsPSIxLjgiLz4NCisgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVBdHRyaWJ1dGUiIG5hbWU9InZlY3RvckFERTIiIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgcGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5lbWYuZWNvcmUvbW9kZWwvRWNvcmUuZWNvcmUjLy9FRG91YmxlIg0KKyAgICAgICAgZGVmYXVsdFZhbHVlTGl0ZXJhbD0iMS44Ii8+DQorICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJ2ZWN0b3JBREUzIiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIHBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2UuZW1mLmVjb3JlL21vZGVsL0Vjb3JlLmVjb3JlIy8vRURvdWJsZSINCisgICAgICAgIGRlZmF1bHRWYWx1ZUxpdGVyYWw9IjEuOCIvPg0KKyAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0idmVjdG9yQURFNCIgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLmVtZi5lY29yZS9tb2RlbC9FY29yZS5lY29yZSMvL0VEb3VibGUiDQorICAgICAgICBkZWZhdWx0VmFsdWVMaXRlcmFsPSIxLjgiLz4NCisgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVBdHRyaWJ1dGUiIG5hbWU9InZlY3RvckluY3ViYXRpb25SYXRlMSINCisgICAgICAgIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgcGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5lbWYuZWNvcmUvbW9kZWwvRWNvcmUuZWNvcmUjLy9FRG91YmxlIg0KKyAgICAgICAgZGVmYXVsdFZhbHVlTGl0ZXJhbD0iMC4xIi8+DQorICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJ2ZWN0b3JJbmN1YmF0aW9uUmF0ZTIiDQorICAgICAgICBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIHBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2UuZW1mLmVjb3JlL21vZGVsL0Vjb3JlLmVjb3JlIy8vRURvdWJsZSINCisgICAgICAgIGRlZmF1bHRWYWx1ZUxpdGVyYWw9IjAuMSIvPg0KKyAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0idmVjdG9ySW5jdWJhdGlvblJhdGUzIg0KKyAgICAgICAgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLmVtZi5lY29yZS9tb2RlbC9FY29yZS5lY29yZSMvL0VEb3VibGUiDQorICAgICAgICBkZWZhdWx0VmFsdWVMaXRlcmFsPSIwLjEiLz4NCisgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVBdHRyaWJ1dGUiIG5hbWU9InZlY3RvckluY3ViYXRpb25SYXRlNCINCisgICAgICAgIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgcGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5lbWYuZWNvcmUvbW9kZWwvRWNvcmUuZWNvcmUjLy9FRG91YmxlIg0KKyAgICAgICAgZGVmYXVsdFZhbHVlTGl0ZXJhbD0iMC4xIi8+DQorICA8L2VDbGFzc2lmaWVycz4NCisgIDxlQ2xhc3NpZmllcnMgeHNpOnR5cGU9ImVjb3JlOkVDbGFzcyIgbmFtZT0iU2ltcGxlRGVuZ3VlTW9kZWwiIGVTdXBlclR5cGVzPSIjLy9WZWN0b3JEaXNlYXNlTW9kZWwiPg0KKyAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0iYml0aW5nUmF0ZSIgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLmVtZi5lY29yZS9tb2RlbC9FY29yZS5lY29yZSMvL0VEb3VibGUiDQorICAgICAgICBkZWZhdWx0VmFsdWVMaXRlcmFsPSIxLjAiLz4NCisgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVBdHRyaWJ1dGUiIG5hbWU9Imhvc3RJbmZlY3Rpdml0eTEiIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgcGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5lbWYuZWNvcmUvbW9kZWwvRWNvcmUuZWNvcmUjLy9FRG91YmxlIg0KKyAgICAgICAgZGVmYXVsdFZhbHVlTGl0ZXJhbD0iMC41Ii8+DQorICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJob3N0SW5mZWN0aXZpdHkyIiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIHBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2UuZW1mLmVjb3JlL21vZGVsL0Vjb3JlLmVjb3JlIy8vRURvdWJsZSINCisgICAgICAgIGRlZmF1bHRWYWx1ZUxpdGVyYWw9IjAuNSIvPg0KKyAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0iaG9zdEluZmVjdGl2aXR5MyIgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLmVtZi5lY29yZS9tb2RlbC9FY29yZS5lY29yZSMvL0VEb3VibGUiDQorICAgICAgICBkZWZhdWx0VmFsdWVMaXRlcmFsPSIwLjUiLz4NCisgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVBdHRyaWJ1dGUiIG5hbWU9Imhvc3RJbmZlY3Rpdml0eTQiIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgcGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5lbWYuZWNvcmUvbW9kZWwvRWNvcmUuZWNvcmUjLy9FRG91YmxlIg0KKyAgICAgICAgZGVmYXVsdFZhbHVlTGl0ZXJhbD0iMC41Ii8+DQorICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJob3N0UHJpbWFyeUluY3ViYXRpb25SYXRlIg0KKyAgICAgICAgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLmVtZi5lY29yZS9tb2RlbC9FY29yZS5lY29yZSMvL0VEb3VibGUiDQorICAgICAgICBkZWZhdWx0VmFsdWVMaXRlcmFsPSIwLjIiLz4NCisgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVBdHRyaWJ1dGUiIG5hbWU9Imhvc3RQcmltYXJ5UmVjb3ZlcnlSYXRlIg0KKyAgICAgICAgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLmVtZi5lY29yZS9tb2RlbC9FY29yZS5lY29yZSMvL0VEb3VibGUiDQorICAgICAgICBkZWZhdWx0VmFsdWVMaXRlcmFsPSIwLjE0Ii8+DQorICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJob3N0UHJpbWFyeUltbXVuaXR5TG9zc1JhdGUiDQorICAgICAgICBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIHBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2UuZW1mLmVjb3JlL21vZGVsL0Vjb3JlLmVjb3JlIy8vRURvdWJsZSINCisgICAgICAgIGRlZmF1bHRWYWx1ZUxpdGVyYWw9IjAuMDI0Ii8+DQorICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJob3N0UHJpbWFyeURlYXRoUmF0ZSIgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLmVtZi5lY29yZS9tb2RlbC9FY29yZS5lY29yZSMvL0VEb3VibGUiDQorICAgICAgICBkZWZhdWx0VmFsdWVMaXRlcmFsPSIwLjAwMDAwMDEiLz4NCisgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVBdHRyaWJ1dGUiIG5hbWU9Imhvc3RBREUxIiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIHBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2UuZW1mLmVjb3JlL21vZGVsL0Vjb3JlLmVjb3JlIy8vRURvdWJsZSINCisgICAgICAgIGRlZmF1bHRWYWx1ZUxpdGVyYWw9IjEuOCIvPg0KKyAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0iaG9zdEFERTIiIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgcGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5lbWYuZWNvcmUvbW9kZWwvRWNvcmUuZWNvcmUjLy9FRG91YmxlIg0KKyAgICAgICAgZGVmYXVsdFZhbHVlTGl0ZXJhbD0iMS44Ii8+DQorICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJob3N0QURFMyIgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLmVtZi5lY29yZS9tb2RlbC9FY29yZS5lY29yZSMvL0VEb3VibGUiDQorICAgICAgICBkZWZhdWx0VmFsdWVMaXRlcmFsPSIxLjgiLz4NCisgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVBdHRyaWJ1dGUiIG5hbWU9Imhvc3RBREU0IiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIHBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2UuZW1mLmVjb3JlL21vZGVsL0Vjb3JlLmVjb3JlIy8vRURvdWJsZSINCisgICAgICAgIGRlZmF1bHRWYWx1ZUxpdGVyYWw9IjEuOCIvPg0KKyAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0iaG9zdFNlY29uZGFyeUluY3ViYXRpb25SYXRlIg0KKyAgICAgICAgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLmVtZi5lY29yZS9tb2RlbC9FY29yZS5lY29yZSMvL0VEb3VibGUiDQorICAgICAgICBkZWZhdWx0VmFsdWVMaXRlcmFsPSIwLjIiLz4NCisgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVBdHRyaWJ1dGUiIG5hbWU9Imhvc3RTZWNvbmRhcnlSZWNvdmVyeVJhdGUiDQorICAgICAgICBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIHBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2UuZW1mLmVjb3JlL21vZGVsL0Vjb3JlLmVjb3JlIy8vRURvdWJsZSINCisgICAgICAgIGRlZmF1bHRWYWx1ZUxpdGVyYWw9IjAuMSIvPg0KKyAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0iaG9zdFNlY29uZGFyeURlYXRoUmF0ZSINCisgICAgICAgIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgcGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5lbWYuZWNvcmUvbW9kZWwvRWNvcmUuZWNvcmUjLy9FRG91YmxlIg0KKyAgICAgICAgZGVmYXVsdFZhbHVlTGl0ZXJhbD0iMC4wMDEyMyIvPg0KKyAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0idmVjdG9ySW5mZWN0aXZpdHkxIiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIHBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2UuZW1mLmVjb3JlL21vZGVsL0Vjb3JlLmVjb3JlIy8vRURvdWJsZSINCisgICAgICAgIGRlZmF1bHRWYWx1ZUxpdGVyYWw9IjAuNSIvPg0KKyAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0idmVjdG9ySW5mZWN0aXZpdHkyIiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIHBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2UuZW1mLmVjb3JlL21vZGVsL0Vjb3JlLmVjb3JlIy8vRURvdWJsZSINCisgICAgICAgIGRlZmF1bHRWYWx1ZUxpdGVyYWw9IjAuNSIvPg0KKyAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0idmVjdG9ySW5mZWN0aXZpdHkzIiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIHBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2UuZW1mLmVjb3JlL21vZGVsL0Vjb3JlLmVjb3JlIy8vRURvdWJsZSINCisgICAgICAgIGRlZmF1bHRWYWx1ZUxpdGVyYWw9IjAuNSIvPg0KKyAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0idmVjdG9ySW5mZWN0aXZpdHk0IiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIHBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2UuZW1mLmVjb3JlL21vZGVsL0Vjb3JlLmVjb3JlIy8vRURvdWJsZSINCisgICAgICAgIGRlZmF1bHRWYWx1ZUxpdGVyYWw9IjAuNSIvPg0KKyAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0idmVjdG9yQURFMSIgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLmVtZi5lY29yZS9tb2RlbC9FY29yZS5lY29yZSMvL0VEb3VibGUiDQorICAgICAgICBkZWZhdWx0VmFsdWVMaXRlcmFsPSIxLjgiLz4NCisgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVBdHRyaWJ1dGUiIG5hbWU9InZlY3RvckFERTIiIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgcGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5lbWYuZWNvcmUvbW9kZWwvRWNvcmUuZWNvcmUjLy9FRG91YmxlIg0KKyAgICAgICAgZGVmYXVsdFZhbHVlTGl0ZXJhbD0iMS44Ii8+DQorICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJ2ZWN0b3JBREUzIiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIHBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2UuZW1mLmVjb3JlL21vZGVsL0Vjb3JlLmVjb3JlIy8vRURvdWJsZSINCisgICAgICAgIGRlZmF1bHRWYWx1ZUxpdGVyYWw9IjEuOCIvPg0KKyAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0idmVjdG9yQURFNCIgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLmVtZi5lY29yZS9tb2RlbC9FY29yZS5lY29yZSMvL0VEb3VibGUiDQorICAgICAgICBkZWZhdWx0VmFsdWVMaXRlcmFsPSIxLjgiLz4NCisgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVBdHRyaWJ1dGUiIG5hbWU9InZlY3RvckluY3ViYXRpb25SYXRlIiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIHBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2UuZW1mLmVjb3JlL21vZGVsL0Vjb3JlLmVjb3JlIy8vRURvdWJsZSINCisgICAgICAgIGRlZmF1bHRWYWx1ZUxpdGVyYWw9IjAuMSIvPg0KKyAgPC9lQ2xhc3NpZmllcnM+DQorICA8ZUNsYXNzaWZpZXJzIHhzaTp0eXBlPSJlY29yZTpFQ2xhc3MiIG5hbWU9IkRlbmd1ZU1vZGVsSG9zdExhYmVsIiBlU3VwZXJUeXBlcz0iLi4vLi4vb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL21vZGVsL3N0YW5kYXJkLmVjb3JlIy8vU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbCIvPg0KKyAgPGVDbGFzc2lmaWVycyB4c2k6dHlwZT0iZWNvcmU6RUNsYXNzIiBuYW1lPSJEZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlIiBlU3VwZXJUeXBlcz0iLi4vLi4vb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL21vZGVsL3N0YW5kYXJkLmVjb3JlIy8vU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbFZhbHVlIj4NCisgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVBdHRyaWJ1dGUiIG5hbWU9IkUxIiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIHBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2UuZW1mLmVjb3JlL21vZGVsL0Vjb3JlLmVjb3JlIy8vRURvdWJsZSIvPg0KKyAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0iRTIiIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgcGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5lbWYuZWNvcmUvbW9kZWwvRWNvcmUuZWNvcmUjLy9FRG91YmxlIi8+DQorICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJFMyIgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLmVtZi5lY29yZS9tb2RlbC9FY29yZS5lY29yZSMvL0VEb3VibGUiLz4NCisgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVBdHRyaWJ1dGUiIG5hbWU9IkU0IiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIHBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2UuZW1mLmVjb3JlL21vZGVsL0Vjb3JlLmVjb3JlIy8vRURvdWJsZSIvPg0KKyAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0iSTEiIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgcGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5lbWYuZWNvcmUvbW9kZWwvRWNvcmUuZWNvcmUjLy9FRG91YmxlIi8+DQorICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJJMiIgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLmVtZi5lY29yZS9tb2RlbC9FY29yZS5lY29yZSMvL0VEb3VibGUiLz4NCisgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVBdHRyaWJ1dGUiIG5hbWU9IkkzIiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIHBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2UuZW1mLmVjb3JlL21vZGVsL0Vjb3JlLmVjb3JlIy8vRURvdWJsZSIvPg0KKyAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0iSTQiIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgcGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5lbWYuZWNvcmUvbW9kZWwvRWNvcmUuZWNvcmUjLy9FRG91YmxlIi8+DQorICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJUMSIgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLmVtZi5lY29yZS9tb2RlbC9FY29yZS5lY29yZSMvL0VEb3VibGUiLz4NCisgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVBdHRyaWJ1dGUiIG5hbWU9IlQyIiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIHBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2UuZW1mLmVjb3JlL21vZGVsL0Vjb3JlLmVjb3JlIy8vRURvdWJsZSIvPg0KKyAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0iVDMiIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgcGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5lbWYuZWNvcmUvbW9kZWwvRWNvcmUuZWNvcmUjLy9FRG91YmxlIi8+DQorICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJUNCIgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLmVtZi5lY29yZS9tb2RlbC9FY29yZS5lY29yZSMvL0VEb3VibGUiLz4NCisgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVBdHRyaWJ1dGUiIG5hbWU9IlIxIiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIHBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2UuZW1mLmVjb3JlL21vZGVsL0Vjb3JlLmVjb3JlIy8vRURvdWJsZSIvPg0KKyAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0iUjIiIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgcGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5lbWYuZWNvcmUvbW9kZWwvRWNvcmUuZWNvcmUjLy9FRG91YmxlIi8+DQorICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJSMyIgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLmVtZi5lY29yZS9tb2RlbC9FY29yZS5lY29yZSMvL0VEb3VibGUiLz4NCisgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVBdHRyaWJ1dGUiIG5hbWU9IlI0IiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIHBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2UuZW1mLmVjb3JlL21vZGVsL0Vjb3JlLmVjb3JlIy8vRURvdWJsZSIvPg0KKyAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0iRTEyIiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIHBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2UuZW1mLmVjb3JlL21vZGVsL0Vjb3JlLmVjb3JlIy8vRURvdWJsZSIvPg0KKyAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0iRTEzIiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIHBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2UuZW1mLmVjb3JlL21vZGVsL0Vjb3JlLmVjb3JlIy8vRURvdWJsZSIvPg0KKyAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0iRTE0IiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIHBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2UuZW1mLmVjb3JlL21vZGVsL0Vjb3JlLmVjb3JlIy8vRURvdWJsZSIvPg0KKyAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0iRTIxIiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIHBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2UuZW1mLmVjb3JlL21vZGVsL0Vjb3JlLmVjb3JlIy8vRURvdWJsZSIvPg0KKyAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0iRTIzIiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIHBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2UuZW1mLmVjb3JlL21vZGVsL0Vjb3JlLmVjb3JlIy8vRURvdWJsZSIvPg0KKyAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0iRTI0IiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIHBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2UuZW1mLmVjb3JlL21vZGVsL0Vjb3JlLmVjb3JlIy8vRURvdWJsZSIvPg0KKyAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0iRTMxIiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIHBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2UuZW1mLmVjb3JlL21vZGVsL0Vjb3JlLmVjb3JlIy8vRURvdWJsZSIvPg0KKyAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0iRTMyIiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIHBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2UuZW1mLmVjb3JlL21vZGVsL0Vjb3JlLmVjb3JlIy8vRURvdWJsZSIvPg0KKyAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0iRTM0IiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIHBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2UuZW1mLmVjb3JlL21vZGVsL0Vjb3JlLmVjb3JlIy8vRURvdWJsZSIvPg0KKyAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0iRTQxIiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIHBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2UuZW1mLmVjb3JlL21vZGVsL0Vjb3JlLmVjb3JlIy8vRURvdWJsZSIvPg0KKyAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0iRTQyIiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIHBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2UuZW1mLmVjb3JlL21vZGVsL0Vjb3JlLmVjb3JlIy8vRURvdWJsZSIvPg0KKyAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0iRTQzIiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIHBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2UuZW1mLmVjb3JlL21vZGVsL0Vjb3JlLmVjb3JlIy8vRURvdWJsZSIvPg0KKyAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0iSTEyIiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIHBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2UuZW1mLmVjb3JlL21vZGVsL0Vjb3JlLmVjb3JlIy8vRURvdWJsZSIvPg0KKyAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0iSTEzIiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIHBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2UuZW1mLmVjb3JlL21vZGVsL0Vjb3JlLmVjb3JlIy8vRURvdWJsZSIvPg0KKyAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0iSTE0IiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIHBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2UuZW1mLmVjb3JlL21vZGVsL0Vjb3JlLmVjb3JlIy8vRURvdWJsZSIvPg0KKyAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0iSTIxIiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIHBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2UuZW1mLmVjb3JlL21vZGVsL0Vjb3JlLmVjb3JlIy8vRURvdWJsZSIvPg0KKyAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0iSTIzIiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIHBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2UuZW1mLmVjb3JlL21vZGVsL0Vjb3JlLmVjb3JlIy8vRURvdWJsZSIvPg0KKyAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0iSTI0IiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIHBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2UuZW1mLmVjb3JlL21vZGVsL0Vjb3JlLmVjb3JlIy8vRURvdWJsZSIvPg0KKyAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0iSTMxIiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIHBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2UuZW1mLmVjb3JlL21vZGVsL0Vjb3JlLmVjb3JlIy8vRURvdWJsZSIvPg0KKyAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0iSTMyIiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIHBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2UuZW1mLmVjb3JlL21vZGVsL0Vjb3JlLmVjb3JlIy8vRURvdWJsZSIvPg0KKyAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0iSTM0IiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIHBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2UuZW1mLmVjb3JlL21vZGVsL0Vjb3JlLmVjb3JlIy8vRURvdWJsZSIvPg0KKyAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0iSTQxIiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIHBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2UuZW1mLmVjb3JlL21vZGVsL0Vjb3JlLmVjb3JlIy8vRURvdWJsZSIvPg0KKyAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0iSTQyIiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIHBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2UuZW1mLmVjb3JlL21vZGVsL0Vjb3JlLmVjb3JlIy8vRURvdWJsZSIvPg0KKyAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0iSTQzIiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIHBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2UuZW1mLmVjb3JlL21vZGVsL0Vjb3JlLmVjb3JlIy8vRURvdWJsZSIvPg0KKyAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0iUiIgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLmVtZi5lY29yZS9tb2RlbC9FY29yZS5lY29yZSMvL0VEb3VibGUiLz4NCisgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVBdHRyaWJ1dGUiIG5hbWU9ImluY2lkZW5jZTEiIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgcGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5lbWYuZWNvcmUvbW9kZWwvRWNvcmUuZWNvcmUjLy9FRG91YmxlIi8+DQorICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJpbmNpZGVuY2UyIiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIHBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2UuZW1mLmVjb3JlL21vZGVsL0Vjb3JlLmVjb3JlIy8vRURvdWJsZSIvPg0KKyAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0iaW5jaWRlbmNlMyIgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLmVtZi5lY29yZS9tb2RlbC9FY29yZS5lY29yZSMvL0VEb3VibGUiLz4NCisgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVBdHRyaWJ1dGUiIG5hbWU9ImluY2lkZW5jZTQiIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgcGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5lbWYuZWNvcmUvbW9kZWwvRWNvcmUuZWNvcmUjLy9FRG91YmxlIi8+DQorICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJpbmNpZGVuY2UxMiIgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLmVtZi5lY29yZS9tb2RlbC9FY29yZS5lY29yZSMvL0VEb3VibGUiLz4NCisgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVBdHRyaWJ1dGUiIG5hbWU9ImluY2lkZW5jZTIxIiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIHBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2UuZW1mLmVjb3JlL21vZGVsL0Vjb3JlLmVjb3JlIy8vRURvdWJsZSIvPg0KKyAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0iaW5jaWRlbmNlMzEiIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgcGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5lbWYuZWNvcmUvbW9kZWwvRWNvcmUuZWNvcmUjLy9FRG91YmxlIi8+DQorICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJpbmNpZGVuY2U0MSIgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLmVtZi5lY29yZS9tb2RlbC9FY29yZS5lY29yZSMvL0VEb3VibGUiLz4NCisgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVBdHRyaWJ1dGUiIG5hbWU9ImluY2lkZW5jZTEzIiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIHBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2UuZW1mLmVjb3JlL21vZGVsL0Vjb3JlLmVjb3JlIy8vRURvdWJsZSIvPg0KKyAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0iaW5jaWRlbmNlMjMiIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgcGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5lbWYuZWNvcmUvbW9kZWwvRWNvcmUuZWNvcmUjLy9FRG91YmxlIi8+DQorICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJpbmNpZGVuY2UzMiIgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLmVtZi5lY29yZS9tb2RlbC9FY29yZS5lY29yZSMvL0VEb3VibGUiLz4NCisgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVBdHRyaWJ1dGUiIG5hbWU9ImluY2lkZW5jZTQyIiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIHBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2UuZW1mLmVjb3JlL21vZGVsL0Vjb3JlLmVjb3JlIy8vRURvdWJsZSIvPg0KKyAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0iaW5jaWRlbmNlMTQiIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgcGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5lbWYuZWNvcmUvbW9kZWwvRWNvcmUuZWNvcmUjLy9FRG91YmxlIi8+DQorICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJpbmNpZGVuY2UyNCIgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLmVtZi5lY29yZS9tb2RlbC9FY29yZS5lY29yZSMvL0VEb3VibGUiLz4NCisgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVBdHRyaWJ1dGUiIG5hbWU9ImluY2lkZW5jZTM0IiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIHBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2UuZW1mLmVjb3JlL21vZGVsL0Vjb3JlLmVjb3JlIy8vRURvdWJsZSIvPg0KKyAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0iaW5jaWRlbmNlNDMiIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgcGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5lbWYuZWNvcmUvbW9kZWwvRWNvcmUuZWNvcmUjLy9FRG91YmxlIi8+DQorICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJkaXNlYXNlRGVhdGhzMSIgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLmVtZi5lY29yZS9tb2RlbC9FY29yZS5lY29yZSMvL0VEb3VibGUiLz4NCisgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVBdHRyaWJ1dGUiIG5hbWU9ImRpc2Vhc2VEZWF0aHMyIiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIHBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2UuZW1mLmVjb3JlL21vZGVsL0Vjb3JlLmVjb3JlIy8vRURvdWJsZSIvPg0KKyAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0iZGlzZWFzZURlYXRoczMiIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgcGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5lbWYuZWNvcmUvbW9kZWwvRWNvcmUuZWNvcmUjLy9FRG91YmxlIi8+DQorICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJkaXNlYXNlRGVhdGhzNCIgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLmVtZi5lY29yZS9tb2RlbC9FY29yZS5lY29yZSMvL0VEb3VibGUiLz4NCisgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVBdHRyaWJ1dGUiIG5hbWU9ImRpc2Vhc2VEZWF0aHMxMiIgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLmVtZi5lY29yZS9tb2RlbC9FY29yZS5lY29yZSMvL0VEb3VibGUiLz4NCisgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVBdHRyaWJ1dGUiIG5hbWU9ImRpc2Vhc2VEZWF0aHMyMSIgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLmVtZi5lY29yZS9tb2RlbC9FY29yZS5lY29yZSMvL0VEb3VibGUiLz4NCisgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVBdHRyaWJ1dGUiIG5hbWU9ImRpc2Vhc2VEZWF0aHMzMSIgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLmVtZi5lY29yZS9tb2RlbC9FY29yZS5lY29yZSMvL0VEb3VibGUiLz4NCisgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVBdHRyaWJ1dGUiIG5hbWU9ImRpc2Vhc2VEZWF0aHM0MSIgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLmVtZi5lY29yZS9tb2RlbC9FY29yZS5lY29yZSMvL0VEb3VibGUiLz4NCisgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVBdHRyaWJ1dGUiIG5hbWU9ImRpc2Vhc2VEZWF0aHMxMyIgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLmVtZi5lY29yZS9tb2RlbC9FY29yZS5lY29yZSMvL0VEb3VibGUiLz4NCisgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVBdHRyaWJ1dGUiIG5hbWU9ImRpc2Vhc2VEZWF0aHMyMyIgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLmVtZi5lY29yZS9tb2RlbC9FY29yZS5lY29yZSMvL0VEb3VibGUiLz4NCisgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVBdHRyaWJ1dGUiIG5hbWU9ImRpc2Vhc2VEZWF0aHMzMiIgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLmVtZi5lY29yZS9tb2RlbC9FY29yZS5lY29yZSMvL0VEb3VibGUiLz4NCisgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVBdHRyaWJ1dGUiIG5hbWU9ImRpc2Vhc2VEZWF0aHM0MiIgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLmVtZi5lY29yZS9tb2RlbC9FY29yZS5lY29yZSMvL0VEb3VibGUiLz4NCisgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVBdHRyaWJ1dGUiIG5hbWU9ImRpc2Vhc2VEZWF0aHMxNCIgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLmVtZi5lY29yZS9tb2RlbC9FY29yZS5lY29yZSMvL0VEb3VibGUiLz4NCisgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVBdHRyaWJ1dGUiIG5hbWU9ImRpc2Vhc2VEZWF0aHMyNCIgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLmVtZi5lY29yZS9tb2RlbC9FY29yZS5lY29yZSMvL0VEb3VibGUiLz4NCisgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVBdHRyaWJ1dGUiIG5hbWU9ImRpc2Vhc2VEZWF0aHMzNCIgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLmVtZi5lY29yZS9tb2RlbC9FY29yZS5lY29yZSMvL0VEb3VibGUiLz4NCisgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVBdHRyaWJ1dGUiIG5hbWU9ImRpc2Vhc2VEZWF0aHM0MyIgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLmVtZi5lY29yZS9tb2RlbC9FY29yZS5lY29yZSMvL0VEb3VibGUiLz4NCisgIDwvZUNsYXNzaWZpZXJzPg0KKyAgPGVDbGFzc2lmaWVycyB4c2k6dHlwZT0iZWNvcmU6RUNsYXNzIiBuYW1lPSJEZW5ndWVNb2RlbFZlY3RvckxhYmVsIiBlU3VwZXJUeXBlcz0iLi4vLi4vb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL21vZGVsL3N0YW5kYXJkLmVjb3JlIy8vU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbCIvPg0KKyAgPGVDbGFzc2lmaWVycyB4c2k6dHlwZT0iZWNvcmU6RUNsYXNzIiBuYW1lPSJEZW5ndWVNb2RlbFZlY3RvckxhYmVsVmFsdWUiIGVTdXBlclR5cGVzPSIuLi8uLi9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMvbW9kZWwvc3RhbmRhcmQuZWNvcmUjLy9TdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsVmFsdWUiPg0KKyAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0iRTEiIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgcGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5lbWYuZWNvcmUvbW9kZWwvRWNvcmUuZWNvcmUjLy9FRG91YmxlIi8+DQorICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJFMiIgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLmVtZi5lY29yZS9tb2RlbC9FY29yZS5lY29yZSMvL0VEb3VibGUiLz4NCisgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVBdHRyaWJ1dGUiIG5hbWU9IkUzIiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIHBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2UuZW1mLmVjb3JlL21vZGVsL0Vjb3JlLmVjb3JlIy8vRURvdWJsZSIvPg0KKyAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0iRTQiIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgcGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5lbWYuZWNvcmUvbW9kZWwvRWNvcmUuZWNvcmUjLy9FRG91YmxlIi8+DQorICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJJMSIgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLmVtZi5lY29yZS9tb2RlbC9FY29yZS5lY29yZSMvL0VEb3VibGUiLz4NCisgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVBdHRyaWJ1dGUiIG5hbWU9IkkyIiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIHBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2UuZW1mLmVjb3JlL21vZGVsL0Vjb3JlLmVjb3JlIy8vRURvdWJsZSIvPg0KKyAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0iSTMiIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgcGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5lbWYuZWNvcmUvbW9kZWwvRWNvcmUuZWNvcmUjLy9FRG91YmxlIi8+DQorICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJJNCIgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLmVtZi5lY29yZS9tb2RlbC9FY29yZS5lY29yZSMvL0VEb3VibGUiLz4NCisgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVBdHRyaWJ1dGUiIG5hbWU9ImluY2lkZW5jZTEiIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgcGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5lbWYuZWNvcmUvbW9kZWwvRWNvcmUuZWNvcmUjLy9FRG91YmxlIi8+DQorICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJpbmNpZGVuY2UyIiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIHBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2UuZW1mLmVjb3JlL21vZGVsL0Vjb3JlLmVjb3JlIy8vRURvdWJsZSIvPg0KKyAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0iaW5jaWRlbmNlMyIgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLmVtZi5lY29yZS9tb2RlbC9FY29yZS5lY29yZSMvL0VEb3VibGUiLz4NCisgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVBdHRyaWJ1dGUiIG5hbWU9ImluY2lkZW5jZTQiIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgcGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5lbWYuZWNvcmUvbW9kZWwvRWNvcmUuZWNvcmUjLy9FRG91YmxlIi8+DQorICA8L2VDbGFzc2lmaWVycz4NCis8L2Vjb3JlOkVQYWNrYWdlPg0KZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci9tb2RlbC92ZWN0b3IuZ2VubW9kZWwgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IvbW9kZWwvdmVjdG9yLmdlbm1vZGVsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc4MzFlZDQKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IvbW9kZWwvdmVjdG9yLmdlbm1vZGVsCkBAIC0wLDAgKzEsMjUgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8Z2VubW9kZWw6R2VuTW9kZWwgeG1pOnZlcnNpb249IjIuMCIKKyAgICB4bWxuczp4bWk9Imh0dHA6Ly93d3cub21nLm9yZy9YTUkiIHhtbG5zOmVjb3JlPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2VtZi8yMDAyL0Vjb3JlIgorICAgIHhtbG5zOmdlbm1vZGVsPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2VtZi8yMDAyL0dlbk1vZGVsIiBtb2RlbERpcmVjdG9yeT0iL29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3Ivc3JjIgorICAgIGVkaXREaXJlY3Rvcnk9Ii9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yL3NyYyIgZWRpdG9yRGlyZWN0b3J5PSIvb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzLnZlY3Rvci9zcmMiCisgICAgbW9kZWxQbHVnaW5JRD0ib3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3RvciIgbW9kZWxOYW1lPSJWZWN0b3IiIHVwZGF0ZUNsYXNzcGF0aD0iZmFsc2UiCisgICAgdGVzdHNEaXJlY3Rvcnk9Ii9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRpc2Vhc2Vtb2RlbHMudmVjdG9yL3NyYyIgaW1wb3J0ZXJJRD0ib3JnLmVjbGlwc2UuZW1mLmltcG9ydGVyLmVjb3JlIgorICAgIGNvbXBsaWFuY2VMZXZlbD0iNS4wIiBjb3B5cmlnaHRGaWVsZHM9ImZhbHNlIiB1c2VkR2VuUGFja2FnZXM9Ii4uLy4uL29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy9tb2RlbC9kaXNlYXNlbW9kZWxzLmdlbm1vZGVsIy8vc3RhbmRhcmQgLi4vLi4vb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL21vZGVsL2NvcmUuZ2VubW9kZWwjLy9jb21tb24gcGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5lbWYuZWNvcmUvbW9kZWwvRWNvcmUuZ2VubW9kZWwjLy9lY29yZSAuLi8uLi9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvbW9kZWwvY29yZS5nZW5tb2RlbCMvL21vZGlmaWVyIC4uLy4uL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9tb2RlbC9jb3JlLmdlbm1vZGVsIy8vbW9kZWwgLi4vLi4vb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL21vZGVsL2NvcmUuZ2VubW9kZWwjLy9ncmFwaCAuLi8uLi9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvbW9kZWwvY29yZS5nZW5tb2RlbCMvL3NjZW5hcmlvIC4uLy4uL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9tb2RlbC9jb3JlLmdlbm1vZGVsIy8vc2VxdWVuY2VyIC4uLy4uL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9tb2RlbC9jb3JlLmdlbm1vZGVsIy8vc29sdmVyIC4uLy4uL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvbW9kZWwvZGVmaW5pdGlvbnMuZ2VubW9kZWwjLy9sYWJlbHMgLi4vLi4vb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzL21vZGVsL3N0YW5kYXJkLmdlbm1vZGVsIy8vc3RhbmRhcmQiPgorICA8Zm9yZWlnbk1vZGVsPnZlY3Rvci5lY29yZTwvZm9yZWlnbk1vZGVsPgorICA8Z2VuUGFja2FnZXMgcHJlZml4PSJWZWN0b3IiIGJhc2VQYWNrYWdlPSJvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMiIGRpc3Bvc2FibGVQcm92aWRlckZhY3Rvcnk9InRydWUiCisgICAgICBlY29yZVBhY2thZ2U9InZlY3Rvci5lY29yZSMvIj4KKyAgICA8Z2VuQ2xhc3NlcyBlY29yZUNsYXNzPSJ2ZWN0b3IuZWNvcmUjLy9NYWNkb25hbGRSb3NzRGlzZWFzZU1vZGVsIj4KKyAgICAgIDxnZW5GZWF0dXJlcyBjcmVhdGVDaGlsZD0iZmFsc2UiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RUF0dHJpYnV0ZSB2ZWN0b3IuZWNvcmUjLy9NYWNkb25hbGRSb3NzRGlzZWFzZU1vZGVsL2JpdGluZ1JhdGUiLz4KKyAgICAgIDxnZW5GZWF0dXJlcyBjcmVhdGVDaGlsZD0iZmFsc2UiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RUF0dHJpYnV0ZSB2ZWN0b3IuZWNvcmUjLy9NYWNkb25hbGRSb3NzRGlzZWFzZU1vZGVsL2luZmVjdGlvdXNCaXRpbmdQcm9wb3J0aW9uSHVtYW4iLz4KKyAgICAgIDxnZW5GZWF0dXJlcyBjcmVhdGVDaGlsZD0iZmFsc2UiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RUF0dHJpYnV0ZSB2ZWN0b3IuZWNvcmUjLy9NYWNkb25hbGRSb3NzRGlzZWFzZU1vZGVsL2luZmVjdGlvdXNCaXRpbmdQcm9wb3J0aW9uVmVjdG9yIi8+CisgICAgICA8Z2VuRmVhdHVyZXMgY3JlYXRlQ2hpbGQ9ImZhbHNlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVBdHRyaWJ1dGUgdmVjdG9yLmVjb3JlIy8vTWFjZG9uYWxkUm9zc0Rpc2Vhc2VNb2RlbC9yZWNvdmVyeVJhdGUiLz4KKyAgICAgIDxnZW5GZWF0dXJlcyBjcmVhdGVDaGlsZD0iZmFsc2UiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RUF0dHJpYnV0ZSB2ZWN0b3IuZWNvcmUjLy9NYWNkb25hbGRSb3NzRGlzZWFzZU1vZGVsL2luY3ViYXRpb25SYXRlIi8+CisgICAgICA8Z2VuRmVhdHVyZXMgY3JlYXRlQ2hpbGQ9ImZhbHNlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVBdHRyaWJ1dGUgdmVjdG9yLmVjb3JlIy8vTWFjZG9uYWxkUm9zc0Rpc2Vhc2VNb2RlbC92ZWN0b3JJbmN1YmF0aW9uUmF0ZSIvPgorICAgICAgPGdlbkZlYXR1cmVzIGNyZWF0ZUNoaWxkPSJmYWxzZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFQXR0cmlidXRlIHZlY3Rvci5lY29yZSMvL01hY2RvbmFsZFJvc3NEaXNlYXNlTW9kZWwvaW1tdW5pdHlMb3NzUmF0ZSIvPgorICAgIDwvZ2VuQ2xhc3Nlcz4KKyAgICA8Z2VuQ2xhc3NlcyBpbWFnZT0iZmFsc2UiIGVjb3JlQ2xhc3M9InZlY3Rvci5lY29yZSMvL1ZlY3RvckRpc2Vhc2VNb2RlbCI+CisgICAgICA8Z2VuRmVhdHVyZXMgY3JlYXRlQ2hpbGQ9ImZhbHNlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVBdHRyaWJ1dGUgdmVjdG9yLmVjb3JlIy8vVmVjdG9yRGlzZWFzZU1vZGVsL3ZlY3RvclBvcHVsYXRpb25JZGVudGlmaWVyIi8+CisgICAgPC9nZW5DbGFzc2VzPgorICA8L2dlblBhY2thZ2VzPgorPC9nZW5tb2RlbDpHZW5Nb2RlbD4KZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci9wbHVnaW4ucHJvcGVydGllcyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci9wbHVnaW4ucHJvcGVydGllcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MWUzNWU3Ci0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yL3BsdWdpbi5wcm9wZXJ0aWVzCkBAIC0wLDAgKzEsMzQ5IEBACisKKyMgPGNvcHlyaWdodD4KKyMgPC9jb3B5cmlnaHQ+CisjCisjICRJZCQKKworcGx1Z2luTmFtZSA9IFZlY3RvciBNb2RlbAorcHJvdmlkZXJOYW1lID0gd3d3LmVjbGlwc2Uub3JnCitkY19jcmVhdG9yX2VkbHVuZCA9IFN0ZWZhbiBFZGx1bmQKK2RjX2NyZWF0b3Jfa2F1Zm1hbiA9IEphbWVzIEthdWZtYW4KK2RjX2NyZWF0b3Jfa3VuID0gS3VuIEh1CitkY19jcmVhdG9yX2N0aG9lbnMgPSBDaHJpc3RpYW4gVGhvZW5zCitkY19pZGVudGllcj1TVEVNIHBsYXliYWNrIGRpc2Vhc2UgbW9kZWwKK2RjX3B1Ymxpc2hlciA9IFRoZSBFY2xpcHNlIEZvdW5kYXRpb24KK2RjX2xpY2Vuc2UgPSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIChFUEwpCitkY19TT1VSQ0UgPSBodHRwOi8vd2lraS5lY2xpcHNlLm9yZy9JbnRyb2R1Y3Rpb25fdG9fQ29tcGFydG1lbnRfTW9kZWxzICAgKGFuZCByZWZlcmVuY2VzIHRoZXJlLWluKQorZGNfdGl0bGVfbWNyb3NzID0gTWFjRG9uYWxkLVJvc3MKK2RjX3RpdGxlX2Rlbmd1ZSA9IERlbmd1ZSBGZXZlcgorZGNfdGl0bGVfc2ltcGxlX2Rlbmd1ZSA9IFNpbXBsZSBEZW5ndWUgRmV2ZXIKK2RjX2Rlc2NfbWNyb3NzID0gTWFjRG9uYWxkLVJvc3MgVmVjdG9yIGJvcm5lIGRpZWFzZSBtb2RlbCBhcyBleHRlbmRlZCBieSBBbmRlcnNvbiBhbmQgTWF5LgorZGNfZGVzY19kZW5ndWU9TW9kZWwgZm9yIERlbmd1ZSBGZXZlcgorZGNfZGVzY19zaW1wbGVfZGVuZ3VlPVNpbXBsZSBNb2RlbCBmb3IgRGVuZ3VlIEZldmVyIAorZGNfbWFjX3NvdXJjZSA9IFNlZTogQW5kZXJzb24gJiBNYXkgIkluZmVjdGlvdXMgRGlzZWFzZXMgb2YgSHVtYW5zIiwgY2hhcHRlciAxNC40LiBUaGlzIG1vZGVsIGNvbnRhaW5zIGFuIGFkZGl0aW9uYWwgaHVtYW4gaW1tdW5lIHN0YXRlLgorCitfVUlfQ3JlYXRlQ2hpbGRfdGV4dCA9IHswfQorX1VJX0NyZWF0ZUNoaWxkX3RleHQyID0gezF9IHswfQorX1VJX0NyZWF0ZUNoaWxkX3RleHQzID0gezF9CitfVUlfQ3JlYXRlQ2hpbGRfdG9vbHRpcCA9IENyZWF0ZSBOZXcgezB9IFVuZGVyIHsxfSBGZWF0dXJlCitfVUlfQ3JlYXRlQ2hpbGRfZGVzY3JpcHRpb24gPSBDcmVhdGUgYSBuZXcgY2hpbGQgb2YgdHlwZSB7MH0gZm9yIHRoZSB7MX0gZmVhdHVyZSBvZiB0aGUgc2VsZWN0ZWQgezJ9LgorX1VJX0NyZWF0ZVNpYmxpbmdfZGVzY3JpcHRpb24gPSBDcmVhdGUgYSBuZXcgc2libGluZyBvZiB0eXBlIHswfSBmb3IgdGhlIHNlbGVjdGVkIHsyfSwgdW5kZXIgdGhlIHsxfSBmZWF0dXJlIG9mIHRoZWlyIHBhcmVudC4KK19VSV9Qcm9wZXJ0eURlc2NyaXB0b3JfZGVzY3JpcHRpb24gPSBUaGUgezB9IG9mIHRoZSB7MX0KK19VSV9NYWNkb25hbGRSb3NzRGlzZWFzZU1vZGVsX3R5cGUgPSBNYWNkb25hbGQgUm9zcyBEaXNlYXNlIE1vZGVsCitfVUlfVW5rbm93bl90eXBlID0gT2JqZWN0CitfVUlfVW5rbm93bl9kYXRhdHlwZT0gVmFsdWUKK19VSV9Vbmtub3duX2ZlYXR1cmUgPSBVbnNwZWNpZmllZAorX1VJX01hY2RvbmFsZFJvc3NEaXNlYXNlTW9kZWxfdmVjdG9yUG9wdWxhdGlvbklkZW50aWZpZXJfZmVhdHVyZSA9IFZlY3RvciBQb3B1bGF0aW9uIElkZW50aWZpZXIKK19VSV9NYWNkb25hbGRSb3NzRGlzZWFzZU1vZGVsX2JpdGluZ1JhdGVfZmVhdHVyZSA9IEJpdGluZyBSYXRlCitfVUlfTWFjZG9uYWxkUm9zc0Rpc2Vhc2VNb2RlbF9pbmZlY3Rpb3VzQml0aW5nUHJvcG9ydGlvbkh1bWFuX2ZlYXR1cmUgPSBJbmZlY3Rpb3VzIEJpdGluZyBQcm9wb3J0aW9uIEh1bWFuCitfVUlfTWFjZG9uYWxkUm9zc0Rpc2Vhc2VNb2RlbF9pbmZlY3Rpb3VzQml0aW5nUHJvcG9ydGlvblZlY3Rvcl9mZWF0dXJlID0gSW5mZWN0aW91cyBCaXRpbmcgUHJvcG9ydGlvbiBWZWN0b3IKK19VSV9NYWNkb25hbGRSb3NzRGlzZWFzZU1vZGVsX3JlY292ZXJ5UmF0ZV9mZWF0dXJlID0gUmVjb3ZlcnkgUmF0ZQorX1VJX01hY2RvbmFsZFJvc3NEaXNlYXNlTW9kZWxfdmVjdG9yTW9ydGFsaXR5UmF0ZV9mZWF0dXJlID0gVmVjdG9yIE1vcnRhbGl0eSBSYXRlCitfVUlfVmVjdG9yRGlzZWFzZU1vZGVsX3R5cGUgPSBEaXNlYXNlIE1vZGVsCitfVUlfVmVjdG9yRGlzZWFzZU1vZGVsX3ZlY3RvclBvcHVsYXRpb25JZGVudGlmaWVyX2ZlYXR1cmUgPSBWZWN0b3IgUG9wdWxhdGlvbiBJZGVudGlmaWVyCitfVUlfTWFjZG9uYWxkUm9zc0Rpc2Vhc2VNb2RlbF9pbmN1YmF0aW9uUmF0ZV9mZWF0dXJlID0gSW5jdWJhdGlvbiBSYXRlCitfVUlfTWFjZG9uYWxkUm9zc0Rpc2Vhc2VNb2RlbF92ZWN0b3JJbmN1YmF0aW9uUmF0ZV9mZWF0dXJlID0gVmVjdG9yIEluY3ViYXRpb24gUmF0ZQorX1VJX01hY2RvbmFsZFJvc3NEaXNlYXNlTW9kZWxfaW1tdW5pdHlMb3NzUmF0ZV9mZWF0dXJlID0gSW1tdW5pdHkgTG9zcyBSYXRlCitfVUlfRGVuZ3VlTW9kZWxfdHlwZSA9IERlbmd1ZSBNb2RlbAorX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmxlX3R5cGUgPSBEZW5ndWUgTW9kZWwgSG9zdCBMYWJsZQorX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmxlVmFsdWVfdHlwZSA9IERlbmd1ZSBNb2RlbCBIb3N0IExhYmxlIFZhbHVlCitfVUlfRGVuZ3VlTW9kZWxWZWN0b3JMYWJsZV90eXBlID0gRGVuZ3VlIE1vZGVsIFZlY3RvciBMYWJsZQorX1VJX0Rlbmd1ZU1vZGVsVmVjdG9yTGFibGVWYWx1ZV90eXBlID0gRGVuZ3VlIE1vZGVsIFZlY3RvciBMYWJsZSBWYWx1ZQorX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmxlVmFsdWVfRTFfZmVhdHVyZSA9IEUxCitfVUlfRGVuZ3VlTW9kZWxIb3N0TGFibGVWYWx1ZV9FMl9mZWF0dXJlID0gRTIKK19VSV9EZW5ndWVNb2RlbEhvc3RMYWJsZVZhbHVlX0UzX2ZlYXR1cmUgPSBFMworX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmxlVmFsdWVfRTRfZmVhdHVyZSA9IEU0CitfVUlfRGVuZ3VlTW9kZWxIb3N0TGFibGVWYWx1ZV9JMV9mZWF0dXJlID0gSTEKK19VSV9EZW5ndWVNb2RlbEhvc3RMYWJsZVZhbHVlX0kyX2ZlYXR1cmUgPSBJMgorX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmxlVmFsdWVfSTNfZmVhdHVyZSA9IEkzCitfVUlfRGVuZ3VlTW9kZWxIb3N0TGFibGVWYWx1ZV9JNF9mZWF0dXJlID0gSTQKK19VSV9EZW5ndWVNb2RlbEhvc3RMYWJsZVZhbHVlX1QxX2ZlYXR1cmUgPSBUMQorX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmxlVmFsdWVfVDJfZmVhdHVyZSA9IFQyCitfVUlfRGVuZ3VlTW9kZWxIb3N0TGFibGVWYWx1ZV9UM19mZWF0dXJlID0gVDMKK19VSV9EZW5ndWVNb2RlbEhvc3RMYWJsZVZhbHVlX1Q0X2ZlYXR1cmUgPSBUNAorX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmxlVmFsdWVfUjFfZmVhdHVyZSA9IFIxCitfVUlfRGVuZ3VlTW9kZWxIb3N0TGFibGVWYWx1ZV9SMl9mZWF0dXJlID0gUjIKK19VSV9EZW5ndWVNb2RlbEhvc3RMYWJsZVZhbHVlX1IzX2ZlYXR1cmUgPSBSMworX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmxlVmFsdWVfUjRfZmVhdHVyZSA9IFI0CitfVUlfRGVuZ3VlTW9kZWxIb3N0TGFibGVWYWx1ZV9FMTJfZmVhdHVyZSA9IEUxMgorX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmxlVmFsdWVfRTEzX2ZlYXR1cmUgPSBFMTMKK19VSV9EZW5ndWVNb2RlbEhvc3RMYWJsZVZhbHVlX0UxNF9mZWF0dXJlID0gRTE0CitfVUlfRGVuZ3VlTW9kZWxIb3N0TGFibGVWYWx1ZV9FMjFfZmVhdHVyZSA9IEUyMQorX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmxlVmFsdWVfRTIzX2ZlYXR1cmUgPSBFMjMKK19VSV9EZW5ndWVNb2RlbEhvc3RMYWJsZVZhbHVlX0UyNF9mZWF0dXJlID0gRTI0CitfVUlfRGVuZ3VlTW9kZWxIb3N0TGFibGVWYWx1ZV9FMzFfZmVhdHVyZSA9IEUzMQorX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmxlVmFsdWVfRTMyX2ZlYXR1cmUgPSBFMzIKK19VSV9EZW5ndWVNb2RlbEhvc3RMYWJsZVZhbHVlX0UzNF9mZWF0dXJlID0gRTM0CitfVUlfRGVuZ3VlTW9kZWxIb3N0TGFibGVWYWx1ZV9FNDFfZmVhdHVyZSA9IEU0MQorX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmxlVmFsdWVfRTQyX2ZlYXR1cmUgPSBFNDIKK19VSV9EZW5ndWVNb2RlbEhvc3RMYWJsZVZhbHVlX0U0M19mZWF0dXJlID0gRTQzCitfVUlfRGVuZ3VlTW9kZWxIb3N0TGFibGVWYWx1ZV9JMTJfZmVhdHVyZSA9IEkxMgorX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmxlVmFsdWVfSTEzX2ZlYXR1cmUgPSBJMTMKK19VSV9EZW5ndWVNb2RlbEhvc3RMYWJsZVZhbHVlX0kxNF9mZWF0dXJlID0gSTE0CitfVUlfRGVuZ3VlTW9kZWxIb3N0TGFibGVWYWx1ZV9JMjFfZmVhdHVyZSA9IEkyMQorX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmxlVmFsdWVfSTIzX2ZlYXR1cmUgPSBJMjMKK19VSV9EZW5ndWVNb2RlbEhvc3RMYWJsZVZhbHVlX0kyNF9mZWF0dXJlID0gSTI0CitfVUlfRGVuZ3VlTW9kZWxIb3N0TGFibGVWYWx1ZV9JMzFfZmVhdHVyZSA9IEkzMQorX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmxlVmFsdWVfSTMyX2ZlYXR1cmUgPSBJMzIKK19VSV9EZW5ndWVNb2RlbEhvc3RMYWJsZVZhbHVlX0kzNF9mZWF0dXJlID0gSTM0CitfVUlfRGVuZ3VlTW9kZWxIb3N0TGFibGVWYWx1ZV9JNDFfZmVhdHVyZSA9IEk0MQorX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmxlVmFsdWVfSTQyX2ZlYXR1cmUgPSBJNDIKK19VSV9EZW5ndWVNb2RlbEhvc3RMYWJsZVZhbHVlX0k0M19mZWF0dXJlID0gSTQzCitfVUlfRGVuZ3VlTW9kZWxIb3N0TGFibGVWYWx1ZV9SX2ZlYXR1cmUgPSBSCitfVUlfRGVuZ3VlTW9kZWxWZWN0b3JMYWJsZVZhbHVlX0UxX2ZlYXR1cmUgPSBFMQorX1VJX0Rlbmd1ZU1vZGVsVmVjdG9yTGFibGVWYWx1ZV9FMl9mZWF0dXJlID0gRTIKK19VSV9EZW5ndWVNb2RlbFZlY3RvckxhYmxlVmFsdWVfRTNfZmVhdHVyZSA9IEUzCitfVUlfRGVuZ3VlTW9kZWxWZWN0b3JMYWJsZVZhbHVlX0U0X2ZlYXR1cmUgPSBFNAorX1VJX0Rlbmd1ZU1vZGVsVmVjdG9yTGFibGVWYWx1ZV9JMV9mZWF0dXJlID0gSTEKK19VSV9EZW5ndWVNb2RlbFZlY3RvckxhYmxlVmFsdWVfSTJfZmVhdHVyZSA9IEkyCitfVUlfRGVuZ3VlTW9kZWxWZWN0b3JMYWJsZVZhbHVlX0kzX2ZlYXR1cmUgPSBJMworX1VJX0Rlbmd1ZU1vZGVsVmVjdG9yTGFibGVWYWx1ZV9JNF9mZWF0dXJlID0gSTQKK19VSV9EZW5ndWVNb2RlbF9leHBvc3VyZVJhdGUxX2ZlYXR1cmUgPSBFeHBvc3VyZSBSYXRlMQorX1VJX0Rlbmd1ZU1vZGVsX3RyYW5zbWlzc2lvblJhdGUxX2ZlYXR1cmUgPSBUcmFuc21pc3Npb24gUmF0ZTEKK19VSV9TaW1wbGVEZW5ndWVNb2RlbF90eXBlID0gU2ltcGxlIERlbmd1ZSBNb2RlbAorX1VJX1NpbXBsZURlbmd1ZU1vZGVsX2JpdGluZ1JhdGVfZmVhdHVyZSA9IEJpdGluZyBSYXRlCitfVUlfU2ltcGxlRGVuZ3VlTW9kZWxfaG9zdEluZmVjdGl2aXR5MV9mZWF0dXJlID0gSG9zdCBJbmZlY3Rpdml0eTEKK19VSV9TaW1wbGVEZW5ndWVNb2RlbF9ob3N0SW5mZWN0aXZpdHkyX2ZlYXR1cmUgPSBIb3N0IEluZmVjdGl2aXR5MgorX1VJX1NpbXBsZURlbmd1ZU1vZGVsX2hvc3RJbmZlY3Rpdml0eTNfZmVhdHVyZSA9IEhvc3QgSW5mZWN0aXZpdHkzCitfVUlfU2ltcGxlRGVuZ3VlTW9kZWxfaG9zdEluZmVjdGl2aXR5NF9mZWF0dXJlID0gSG9zdCBJbmZlY3Rpdml0eTQKK19VSV9TaW1wbGVEZW5ndWVNb2RlbF9ob3N0UHJpbWFyeUluY3ViYXRpb25SYXRlX2ZlYXR1cmUgPSBIb3N0IFByaW1hcnkgSW5jdWJhdGlvbiBSYXRlCitfVUlfU2ltcGxlRGVuZ3VlTW9kZWxfaG9zdFByaW1hcnlSZWNvdmVyeVJhdGVfZmVhdHVyZSA9IEhvc3QgUHJpbWFyeSBSZWNvdmVyeSBSYXRlCitfVUlfU2ltcGxlRGVuZ3VlTW9kZWxfaG9zdFByaW1hcnlJbW11bml0eUxvc3NSYXRlX2ZlYXR1cmUgPSBIb3N0IFByaW1hcnkgSW1tdW5pdHkgTG9zcyBSYXRlCitfVUlfU2ltcGxlRGVuZ3VlTW9kZWxfaG9zdFByaW1hcnlEZWF0aFJhdGVfZmVhdHVyZSA9IEhvc3QgUHJpbWFyeSBEZWF0aCBSYXRlCitfVUlfU2ltcGxlRGVuZ3VlTW9kZWxfaG9zdEFERTFfZmVhdHVyZSA9IEhvc3QgQURFMQorX1VJX1NpbXBsZURlbmd1ZU1vZGVsX2hvc3RBREUyX2ZlYXR1cmUgPSBIb3N0IEFERTIKK19VSV9TaW1wbGVEZW5ndWVNb2RlbF9ob3N0QURFM19mZWF0dXJlID0gSG9zdCBBREUzCitfVUlfU2ltcGxlRGVuZ3VlTW9kZWxfaG9zdEFERTRfZmVhdHVyZSA9IEhvc3QgQURFNAorX1VJX1NpbXBsZURlbmd1ZU1vZGVsX2hvc3RTZWNvbmRhcnlJbmN1YmF0aW9uUmF0ZV9mZWF0dXJlID0gSG9zdCBTZWNvbmRhcnkgSW5jdWJhdGlvbiBSYXRlCitfVUlfU2ltcGxlRGVuZ3VlTW9kZWxfaG9zdFNlY29uZGFyeVJlY292ZXJ5UmF0ZV9mZWF0dXJlID0gSG9zdCBTZWNvbmRhcnkgUmVjb3ZlcnkgUmF0ZQorX1VJX1NpbXBsZURlbmd1ZU1vZGVsX2hvc3RTZWNvbmRhcnlEZWF0aFJhdGVfZmVhdHVyZSA9IEhvc3QgU2Vjb25kYXJ5IERlYXRoIFJhdGUKK19VSV9TaW1wbGVEZW5ndWVNb2RlbF92ZWN0b3JJbmZlY3Rpdml0eTFfZmVhdHVyZSA9IFZlY3RvciBJbmZlY3Rpdml0eTEKK19VSV9TaW1wbGVEZW5ndWVNb2RlbF92ZWN0b3JJbmZlY3Rpdml0eTJfZmVhdHVyZSA9IFZlY3RvciBJbmZlY3Rpdml0eTIKK19VSV9TaW1wbGVEZW5ndWVNb2RlbF92ZWN0b3JJbmZlY3Rpdml0eTNfZmVhdHVyZSA9IFZlY3RvciBJbmZlY3Rpdml0eTMKK19VSV9TaW1wbGVEZW5ndWVNb2RlbF92ZWN0b3JJbmZlY3Rpdml0eTRfZmVhdHVyZSA9IFZlY3RvciBJbmZlY3Rpdml0eTQKK19VSV9TaW1wbGVEZW5ndWVNb2RlbF92ZWN0b3JBREUxX2ZlYXR1cmUgPSBWZWN0b3IgQURFMQorX1VJX1NpbXBsZURlbmd1ZU1vZGVsX3ZlY3RvckFERTJfZmVhdHVyZSA9IFZlY3RvciBBREUyCitfVUlfU2ltcGxlRGVuZ3VlTW9kZWxfdmVjdG9yQURFM19mZWF0dXJlID0gVmVjdG9yIEFERTMKK19VSV9TaW1wbGVEZW5ndWVNb2RlbF92ZWN0b3JBREU0X2ZlYXR1cmUgPSBWZWN0b3IgQURFNAorX1VJX1NpbXBsZURlbmd1ZU1vZGVsX3ZlY3RvckluY3ViYXRpb25SYXRlX2ZlYXR1cmUgPSBWZWN0b3IgSW5jdWJhdGlvbiBSYXRlCitfVUlfRGVuZ3VlTW9kZWxIb3N0TGFibGVWYWx1ZV9pbmNpZGVuY2UxX2ZlYXR1cmUgPSBJbmNpZGVuY2UxCitfVUlfRGVuZ3VlTW9kZWxIb3N0TGFibGVWYWx1ZV9pbmNpZGVuY2UyX2ZlYXR1cmUgPSBJbmNpZGVuY2UyCitfVUlfRGVuZ3VlTW9kZWxIb3N0TGFibGVWYWx1ZV9pbmNpZGVuY2UzX2ZlYXR1cmUgPSBJbmNpZGVuY2UzCitfVUlfRGVuZ3VlTW9kZWxIb3N0TGFibGVWYWx1ZV9pbmNpZGVuY2U0X2ZlYXR1cmUgPSBJbmNpZGVuY2U0CitfVUlfRGVuZ3VlTW9kZWxIb3N0TGFibGVWYWx1ZV9pbmNpZGVuY2UxMl9mZWF0dXJlID0gSW5jaWRlbmNlMTIKK19VSV9EZW5ndWVNb2RlbEhvc3RMYWJsZVZhbHVlX2luY2lkZW5jZTIxX2ZlYXR1cmUgPSBJbmNpZGVuY2UyMQorX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmxlVmFsdWVfaW5jaWRlbmNlMzFfZmVhdHVyZSA9IEluY2lkZW5jZTMxCitfVUlfRGVuZ3VlTW9kZWxIb3N0TGFibGVWYWx1ZV9pbmNpZGVuY2U0MV9mZWF0dXJlID0gSW5jaWRlbmNlNDEKK19VSV9EZW5ndWVNb2RlbEhvc3RMYWJsZVZhbHVlX2luY2lkZW5jZTEzX2ZlYXR1cmUgPSBJbmNpZGVuY2UxMworX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmxlVmFsdWVfaW5jaWRlbmNlMjNfZmVhdHVyZSA9IEluY2lkZW5jZTIzCitfVUlfRGVuZ3VlTW9kZWxIb3N0TGFibGVWYWx1ZV9pbmNpZGVuY2UzMl9mZWF0dXJlID0gSW5jaWRlbmNlMzIKK19VSV9EZW5ndWVNb2RlbEhvc3RMYWJsZVZhbHVlX2luY2lkZW5jZTQyX2ZlYXR1cmUgPSBJbmNpZGVuY2U0MgorX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmxlVmFsdWVfaW5jaWRlbmNlMTRfZmVhdHVyZSA9IEluY2lkZW5jZTE0CitfVUlfRGVuZ3VlTW9kZWxIb3N0TGFibGVWYWx1ZV9pbmNpZGVuY2UyNF9mZWF0dXJlID0gSW5jaWRlbmNlMjQKK19VSV9EZW5ndWVNb2RlbEhvc3RMYWJsZVZhbHVlX2luY2lkZW5jZTM0X2ZlYXR1cmUgPSBJbmNpZGVuY2UzNAorX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmxlVmFsdWVfaW5jaWRlbmNlNDNfZmVhdHVyZSA9IEluY2lkZW5jZTQzCitfVUlfRGVuZ3VlTW9kZWxIb3N0TGFibGVWYWx1ZV9kZWF0aHMxX2ZlYXR1cmUgPSBEZWF0aHMxCitfVUlfRGVuZ3VlTW9kZWxIb3N0TGFibGVWYWx1ZV9kZWF0aHMyX2ZlYXR1cmUgPSBEZWF0aHMyCitfVUlfRGVuZ3VlTW9kZWxIb3N0TGFibGVWYWx1ZV9kZWF0aHMzX2ZlYXR1cmUgPSBEZWF0aHMzCitfVUlfRGVuZ3VlTW9kZWxIb3N0TGFibGVWYWx1ZV9kZWF0aHM0X2ZlYXR1cmUgPSBEZWF0aHM0CitfVUlfRGVuZ3VlTW9kZWxIb3N0TGFibGVWYWx1ZV9kZWF0aHMxMl9mZWF0dXJlID0gRGVhdGhzMTIKK19VSV9EZW5ndWVNb2RlbEhvc3RMYWJsZVZhbHVlX2RlYXRoczIxX2ZlYXR1cmUgPSBEZWF0aHMyMQorX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmxlVmFsdWVfZGVhdGhzMzFfZmVhdHVyZSA9IERlYXRoczMxCitfVUlfRGVuZ3VlTW9kZWxIb3N0TGFibGVWYWx1ZV9kZWF0aHM0MV9mZWF0dXJlID0gRGVhdGhzNDEKK19VSV9EZW5ndWVNb2RlbEhvc3RMYWJsZVZhbHVlX2RlYXRoczEzX2ZlYXR1cmUgPSBEZWF0aHMxMworX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmxlVmFsdWVfZGVhdGhzMjNfZmVhdHVyZSA9IERlYXRoczIzCitfVUlfRGVuZ3VlTW9kZWxIb3N0TGFibGVWYWx1ZV9kZWF0aHMzMl9mZWF0dXJlID0gRGVhdGhzMzIKK19VSV9EZW5ndWVNb2RlbEhvc3RMYWJsZVZhbHVlX2RlYXRoczQyX2ZlYXR1cmUgPSBEZWF0aHM0MgorX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmxlVmFsdWVfZGVhdGhzMTRfZmVhdHVyZSA9IERlYXRoczE0CitfVUlfRGVuZ3VlTW9kZWxIb3N0TGFibGVWYWx1ZV9kZWF0aHMyNF9mZWF0dXJlID0gRGVhdGhzMjQKK19VSV9EZW5ndWVNb2RlbEhvc3RMYWJsZVZhbHVlX2RlYXRoczM0X2ZlYXR1cmUgPSBEZWF0aHMzNAorX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmxlVmFsdWVfZGVhdGhzNDNfZmVhdHVyZSA9IERlYXRoczQzCitfVUlfRGVuZ3VlTW9kZWxIb3N0TGFiZWxfdHlwZSA9IERlbmd1ZSBNb2RlbCBIb3N0IExhYmVsCitfVUlfRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV90eXBlID0gRGVuZ3VlIE1vZGVsIEhvc3QgTGFiZWwgVmFsdWUKK19VSV9EZW5ndWVNb2RlbFZlY3RvckxhYmVsX3R5cGUgPSBEZW5ndWUgTW9kZWwgVmVjdG9yIExhYmVsCitfVUlfRGVuZ3VlTW9kZWxWZWN0b3JMYWJlbFZhbHVlX3R5cGUgPSBEZW5ndWUgTW9kZWwgVmVjdG9yIExhYmVsIFZhbHVlCitfVUlfRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9FMV9mZWF0dXJlID0gRTEKK19VSV9EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX0UyX2ZlYXR1cmUgPSBFMgorX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfRTNfZmVhdHVyZSA9IEUzCitfVUlfRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9FNF9mZWF0dXJlID0gRTQKK19VSV9EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX0kxX2ZlYXR1cmUgPSBJMQorX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfSTJfZmVhdHVyZSA9IEkyCitfVUlfRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9JM19mZWF0dXJlID0gSTMKK19VSV9EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX0k0X2ZlYXR1cmUgPSBJNAorX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfVDFfZmVhdHVyZSA9IFQxCitfVUlfRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9UMl9mZWF0dXJlID0gVDIKK19VSV9EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX1QzX2ZlYXR1cmUgPSBUMworX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfVDRfZmVhdHVyZSA9IFQ0CitfVUlfRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9SMV9mZWF0dXJlID0gUjEKK19VSV9EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX1IyX2ZlYXR1cmUgPSBSMgorX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfUjNfZmVhdHVyZSA9IFIzCitfVUlfRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9SNF9mZWF0dXJlID0gUjQKK19VSV9EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX0UxMl9mZWF0dXJlID0gRTEyCitfVUlfRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9FMTNfZmVhdHVyZSA9IEUxMworX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfRTE0X2ZlYXR1cmUgPSBFMTQKK19VSV9EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX0UyMV9mZWF0dXJlID0gRTIxCitfVUlfRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9FMjNfZmVhdHVyZSA9IEUyMworX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfRTI0X2ZlYXR1cmUgPSBFMjQKK19VSV9EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX0UzMV9mZWF0dXJlID0gRTMxCitfVUlfRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9FMzJfZmVhdHVyZSA9IEUzMgorX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfRTM0X2ZlYXR1cmUgPSBFMzQKK19VSV9EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX0U0MV9mZWF0dXJlID0gRTQxCitfVUlfRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9FNDJfZmVhdHVyZSA9IEU0MgorX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfRTQzX2ZlYXR1cmUgPSBFNDMKK19VSV9EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX0kxMl9mZWF0dXJlID0gSTEyCitfVUlfRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9JMTNfZmVhdHVyZSA9IEkxMworX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfSTE0X2ZlYXR1cmUgPSBJMTQKK19VSV9EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX0kyMV9mZWF0dXJlID0gSTIxCitfVUlfRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9JMjNfZmVhdHVyZSA9IEkyMworX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfSTI0X2ZlYXR1cmUgPSBJMjQKK19VSV9EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX0kzMV9mZWF0dXJlID0gSTMxCitfVUlfRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9JMzJfZmVhdHVyZSA9IEkzMgorX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfSTM0X2ZlYXR1cmUgPSBJMzQKK19VSV9EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX0k0MV9mZWF0dXJlID0gSTQxCitfVUlfRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9JNDJfZmVhdHVyZSA9IEk0MgorX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfSTQzX2ZlYXR1cmUgPSBJNDMKK19VSV9EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX1JfZmVhdHVyZSA9IFIKK19VSV9EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX2luY2lkZW5jZTFfZmVhdHVyZSA9IEluY2lkZW5jZTEKK19VSV9EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX2luY2lkZW5jZTJfZmVhdHVyZSA9IEluY2lkZW5jZTIKK19VSV9EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX2luY2lkZW5jZTNfZmVhdHVyZSA9IEluY2lkZW5jZTMKK19VSV9EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX2luY2lkZW5jZTRfZmVhdHVyZSA9IEluY2lkZW5jZTQKK19VSV9EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX2luY2lkZW5jZTEyX2ZlYXR1cmUgPSBJbmNpZGVuY2UxMgorX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfaW5jaWRlbmNlMjFfZmVhdHVyZSA9IEluY2lkZW5jZTIxCitfVUlfRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9pbmNpZGVuY2UzMV9mZWF0dXJlID0gSW5jaWRlbmNlMzEKK19VSV9EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX2luY2lkZW5jZTQxX2ZlYXR1cmUgPSBJbmNpZGVuY2U0MQorX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfaW5jaWRlbmNlMTNfZmVhdHVyZSA9IEluY2lkZW5jZTEzCitfVUlfRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9pbmNpZGVuY2UyM19mZWF0dXJlID0gSW5jaWRlbmNlMjMKK19VSV9EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX2luY2lkZW5jZTMyX2ZlYXR1cmUgPSBJbmNpZGVuY2UzMgorX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfaW5jaWRlbmNlNDJfZmVhdHVyZSA9IEluY2lkZW5jZTQyCitfVUlfRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9pbmNpZGVuY2UxNF9mZWF0dXJlID0gSW5jaWRlbmNlMTQKK19VSV9EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX2luY2lkZW5jZTI0X2ZlYXR1cmUgPSBJbmNpZGVuY2UyNAorX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfaW5jaWRlbmNlMzRfZmVhdHVyZSA9IEluY2lkZW5jZTM0CitfVUlfRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9pbmNpZGVuY2U0M19mZWF0dXJlID0gSW5jaWRlbmNlNDMKK19VSV9EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX2RlYXRoczFfZmVhdHVyZSA9IERlYXRoczEKK19VSV9EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX2RlYXRoczJfZmVhdHVyZSA9IERlYXRoczIKK19VSV9EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX2RlYXRoczNfZmVhdHVyZSA9IERlYXRoczMKK19VSV9EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX2RlYXRoczRfZmVhdHVyZSA9IERlYXRoczQKK19VSV9EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX2RlYXRoczEyX2ZlYXR1cmUgPSBEZWF0aHMxMgorX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfZGVhdGhzMjFfZmVhdHVyZSA9IERlYXRoczIxCitfVUlfRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9kZWF0aHMzMV9mZWF0dXJlID0gRGVhdGhzMzEKK19VSV9EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX2RlYXRoczQxX2ZlYXR1cmUgPSBEZWF0aHM0MQorX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfZGVhdGhzMTNfZmVhdHVyZSA9IERlYXRoczEzCitfVUlfRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9kZWF0aHMyM19mZWF0dXJlID0gRGVhdGhzMjMKK19VSV9EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX2RlYXRoczMyX2ZlYXR1cmUgPSBEZWF0aHMzMgorX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfZGVhdGhzNDJfZmVhdHVyZSA9IERlYXRoczQyCitfVUlfRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9kZWF0aHMxNF9mZWF0dXJlID0gRGVhdGhzMTQKK19VSV9EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX2RlYXRoczI0X2ZlYXR1cmUgPSBEZWF0aHMyNAorX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfZGVhdGhzMzRfZmVhdHVyZSA9IERlYXRoczM0CitfVUlfRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9kZWF0aHM0M19mZWF0dXJlID0gRGVhdGhzNDMKK19VSV9EZW5ndWVNb2RlbFZlY3RvckxhYmVsVmFsdWVfRTFfZmVhdHVyZSA9IEUxCitfVUlfRGVuZ3VlTW9kZWxWZWN0b3JMYWJlbFZhbHVlX0UyX2ZlYXR1cmUgPSBFMgorX1VJX0Rlbmd1ZU1vZGVsVmVjdG9yTGFiZWxWYWx1ZV9FM19mZWF0dXJlID0gRTMKK19VSV9EZW5ndWVNb2RlbFZlY3RvckxhYmVsVmFsdWVfRTRfZmVhdHVyZSA9IEU0CitfVUlfRGVuZ3VlTW9kZWxWZWN0b3JMYWJlbFZhbHVlX0kxX2ZlYXR1cmUgPSBJMQorX1VJX0Rlbmd1ZU1vZGVsVmVjdG9yTGFiZWxWYWx1ZV9JMl9mZWF0dXJlID0gSTIKK19VSV9EZW5ndWVNb2RlbFZlY3RvckxhYmVsVmFsdWVfSTNfZmVhdHVyZSA9IEkzCitfVUlfRGVuZ3VlTW9kZWxWZWN0b3JMYWJlbFZhbHVlX0k0X2ZlYXR1cmUgPSBJNAorX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfZGlzZWFzZURlYXRoczFfZmVhdHVyZSA9IERpc2Vhc2UgRGVhdGhzMQorX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfZGlzZWFzZURlYXRoczJfZmVhdHVyZSA9IERpc2Vhc2UgRGVhdGhzMgorX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfZGlzZWFzZURlYXRoczNfZmVhdHVyZSA9IERpc2Vhc2UgRGVhdGhzMworX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfZGlzZWFzZURlYXRoczRfZmVhdHVyZSA9IERpc2Vhc2UgRGVhdGhzNAorX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfZGlzZWFzZURlYXRoczEyX2ZlYXR1cmUgPSBEaXNlYXNlIERlYXRoczEyCitfVUlfRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9kaXNlYXNlRGVhdGhzMjFfZmVhdHVyZSA9IERpc2Vhc2UgRGVhdGhzMjEKK19VSV9EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX2Rpc2Vhc2VEZWF0aHMzMV9mZWF0dXJlID0gRGlzZWFzZSBEZWF0aHMzMQorX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfZGlzZWFzZURlYXRoczQxX2ZlYXR1cmUgPSBEaXNlYXNlIERlYXRoczQxCitfVUlfRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9kaXNlYXNlRGVhdGhzMTNfZmVhdHVyZSA9IERpc2Vhc2UgRGVhdGhzMTMKK19VSV9EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX2Rpc2Vhc2VEZWF0aHMyM19mZWF0dXJlID0gRGlzZWFzZSBEZWF0aHMyMworX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfZGlzZWFzZURlYXRoczMyX2ZlYXR1cmUgPSBEaXNlYXNlIERlYXRoczMyCitfVUlfRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9kaXNlYXNlRGVhdGhzNDJfZmVhdHVyZSA9IERpc2Vhc2UgRGVhdGhzNDIKK19VSV9EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX2Rpc2Vhc2VEZWF0aHMxNF9mZWF0dXJlID0gRGlzZWFzZSBEZWF0aHMxNAorX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfZGlzZWFzZURlYXRoczI0X2ZlYXR1cmUgPSBEaXNlYXNlIERlYXRoczI0CitfVUlfRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9kaXNlYXNlRGVhdGhzMzRfZmVhdHVyZSA9IERpc2Vhc2UgRGVhdGhzMzQKK19VSV9EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX2Rpc2Vhc2VEZWF0aHM0M19mZWF0dXJlID0gRGlzZWFzZSBEZWF0aHM0MworX1VJX0Rlbmd1ZU1vZGVsVmVjdG9yTGFiZWxWYWx1ZV9pbmNpZGVuY2UxX2ZlYXR1cmUgPSBJbmNpZGVuY2UxCitfVUlfRGVuZ3VlTW9kZWxWZWN0b3JMYWJlbFZhbHVlX2luY2lkZW5jZTJfZmVhdHVyZSA9IEluY2lkZW5jZTIKK19VSV9EZW5ndWVNb2RlbFZlY3RvckxhYmVsVmFsdWVfaW5jaWRlbmNlM19mZWF0dXJlID0gSW5jaWRlbmNlMworX1VJX0Rlbmd1ZU1vZGVsVmVjdG9yTGFiZWxWYWx1ZV9pbmNpZGVuY2U0X2ZlYXR1cmUgPSBJbmNpZGVuY2U0CitfVUlfRGVuZ3VlTW9kZWxfYml0aW5nUmF0ZVNWX2ZlYXR1cmUgPSBCaXRpbmcgUmF0ZSBTVgorX1VJX0Rlbmd1ZU1vZGVsX2JpdGluZ1JhdGVJVl9mZWF0dXJlID0gQml0aW5nIFJhdGUgSVYKK19VSV9EZW5ndWVNb2RlbF9ob3N0SW5mZWN0aXZpdHkxX2ZlYXR1cmUgPSBIb3N0IEluZmVjdGl2aXR5MQorX1VJX0Rlbmd1ZU1vZGVsX2hvc3RJbmZlY3Rpdml0eTJfZmVhdHVyZSA9IEhvc3QgSW5mZWN0aXZpdHkyCitfVUlfRGVuZ3VlTW9kZWxfaG9zdEluZmVjdGl2aXR5M19mZWF0dXJlID0gSG9zdCBJbmZlY3Rpdml0eTMKK19VSV9EZW5ndWVNb2RlbF9ob3N0SW5mZWN0aXZpdHk0X2ZlYXR1cmUgPSBIb3N0IEluZmVjdGl2aXR5NAorX1VJX0Rlbmd1ZU1vZGVsX2hvc3RQcmltYXJ5SW5jdWJhdGlvblJhdGUxX2ZlYXR1cmUgPSBIb3N0IFByaW1hcnkgSW5jdWJhdGlvbiBSYXRlMQorX1VJX0Rlbmd1ZU1vZGVsX2hvc3RQcmltYXJ5SW5jdWJhdGlvblJhdGUyX2ZlYXR1cmUgPSBIb3N0IFByaW1hcnkgSW5jdWJhdGlvbiBSYXRlMgorX1VJX0Rlbmd1ZU1vZGVsX2hvc3RQcmltYXJ5SW5jdWJhdGlvblJhdGUzX2ZlYXR1cmUgPSBIb3N0IFByaW1hcnkgSW5jdWJhdGlvbiBSYXRlMworX1VJX0Rlbmd1ZU1vZGVsX2hvc3RQcmltYXJ5SW5jdWJhdGlvblJhdGU0X2ZlYXR1cmUgPSBIb3N0IFByaW1hcnkgSW5jdWJhdGlvbiBSYXRlNAorX1VJX0Rlbmd1ZU1vZGVsX2hvc3RQcmltYXJ5UmVjb3ZlcnlSYXRlMV9mZWF0dXJlID0gSG9zdCBQcmltYXJ5IFJlY292ZXJ5IFJhdGUxCitfVUlfRGVuZ3VlTW9kZWxfaG9zdFByaW1hcnlSZWNvdmVyeVJhdGUyX2ZlYXR1cmUgPSBIb3N0IFByaW1hcnkgUmVjb3ZlcnkgUmF0ZTIKK19VSV9EZW5ndWVNb2RlbF9ob3N0UHJpbWFyeVJlY292ZXJ5UmF0ZTNfZmVhdHVyZSA9IEhvc3QgUHJpbWFyeSBSZWNvdmVyeSBSYXRlMworX1VJX0Rlbmd1ZU1vZGVsX2hvc3RQcmltYXJ5UmVjb3ZlcnlSYXRlNF9mZWF0dXJlID0gSG9zdCBQcmltYXJ5IFJlY292ZXJ5IFJhdGU0CitfVUlfRGVuZ3VlTW9kZWxfaG9zdFByaW1hcnlJbW11bml0eUxvc3NSYXRlMV9mZWF0dXJlID0gSG9zdCBQcmltYXJ5IEltbXVuaXR5IExvc3MgUmF0ZTEKK19VSV9EZW5ndWVNb2RlbF9ob3N0UHJpbWFyeUltbXVuaXR5TG9zc1JhdGUyX2ZlYXR1cmUgPSBIb3N0IFByaW1hcnkgSW1tdW5pdHkgTG9zcyBSYXRlMgorX1VJX0Rlbmd1ZU1vZGVsX2hvc3RQcmltYXJ5SW1tdW5pdHlMb3NzUmF0ZTNfZmVhdHVyZSA9IEhvc3QgUHJpbWFyeSBJbW11bml0eSBMb3NzIFJhdGUzCitfVUlfRGVuZ3VlTW9kZWxfaG9zdFByaW1hcnlJbW11bml0eUxvc3NSYXRlNF9mZWF0dXJlID0gSG9zdCBQcmltYXJ5IEltbXVuaXR5IExvc3MgUmF0ZTQKK19VSV9EZW5ndWVNb2RlbF9ob3N0UHJpbWFyeURpc2Vhc2VEZWF0aFJhdGUxX2ZlYXR1cmUgPSBIb3N0IFByaW1hcnkgRGlzZWFzZSBEZWF0aCBSYXRlMQorX1VJX0Rlbmd1ZU1vZGVsX2hvc3RQcmltYXJ5RGlzZWFzZURlYXRoUmF0ZTJfZmVhdHVyZSA9IEhvc3QgUHJpbWFyeSBEaXNlYXNlIERlYXRoIFJhdGUyCitfVUlfRGVuZ3VlTW9kZWxfaG9zdFByaW1hcnlEaXNlYXNlRGVhdGhSYXRlM19mZWF0dXJlID0gSG9zdCBQcmltYXJ5IERpc2Vhc2UgRGVhdGggUmF0ZTMKK19VSV9EZW5ndWVNb2RlbF9ob3N0UHJpbWFyeURpc2Vhc2VEZWF0aFJhdGU0X2ZlYXR1cmUgPSBIb3N0IFByaW1hcnkgRGlzZWFzZSBEZWF0aCBSYXRlNAorX1VJX0Rlbmd1ZU1vZGVsX2hvc3RBREUxMl9mZWF0dXJlID0gSG9zdCBBREUxMgorX1VJX0Rlbmd1ZU1vZGVsX2hvc3RBREUxM19mZWF0dXJlID0gSG9zdCBBREUxMworX1VJX0Rlbmd1ZU1vZGVsX2hvc3RBREUxNF9mZWF0dXJlID0gSG9zdCBBREUxNAorX1VJX0Rlbmd1ZU1vZGVsX2hvc3RBREUyMV9mZWF0dXJlID0gSG9zdCBBREUyMQorX1VJX0Rlbmd1ZU1vZGVsX2hvc3RBREUyM19mZWF0dXJlID0gSG9zdCBBREUyMworX1VJX0Rlbmd1ZU1vZGVsX2hvc3RBREUyNF9mZWF0dXJlID0gSG9zdCBBREUyNAorX1VJX0Rlbmd1ZU1vZGVsX2hvc3RBREUzMV9mZWF0dXJlID0gSG9zdCBBREUzMQorX1VJX0Rlbmd1ZU1vZGVsX2hvc3RBREUzMl9mZWF0dXJlID0gSG9zdCBBREUzMgorX1VJX0Rlbmd1ZU1vZGVsX2hvc3RBREUzNF9mZWF0dXJlID0gSG9zdCBBREUzNAorX1VJX0Rlbmd1ZU1vZGVsX2hvc3RBREU0MV9mZWF0dXJlID0gSG9zdCBBREU0MQorX1VJX0Rlbmd1ZU1vZGVsX2hvc3RBREU0Ml9mZWF0dXJlID0gSG9zdCBBREU0MgorX1VJX0Rlbmd1ZU1vZGVsX2hvc3RBREU0M19mZWF0dXJlID0gSG9zdCBBREU0MworX1VJX0Rlbmd1ZU1vZGVsX2hvc3RTZWNvbmRhcnlEaXNlYXNlRGVhdGhSYXRlMTJfZmVhdHVyZSA9IEhvc3QgU2Vjb25kYXJ5IERpc2Vhc2UgRGVhdGggUmF0ZTEyCitfVUlfRGVuZ3VlTW9kZWxfaG9zdFNlY29uZGFyeURpc2Vhc2VEZWF0aFJhdGUxM19mZWF0dXJlID0gSG9zdCBTZWNvbmRhcnkgRGlzZWFzZSBEZWF0aCBSYXRlMTMKK19VSV9EZW5ndWVNb2RlbF9ob3N0U2Vjb25kYXJ5RGlzZWFzZURlYXRoUmF0ZTE0X2ZlYXR1cmUgPSBIb3N0IFNlY29uZGFyeSBEaXNlYXNlIERlYXRoIFJhdGUxNAorX1VJX0Rlbmd1ZU1vZGVsX2hvc3RTZWNvbmRhcnlEaXNlYXNlRGVhdGhSYXRlMjFfZmVhdHVyZSA9IEhvc3QgU2Vjb25kYXJ5IERpc2Vhc2UgRGVhdGggUmF0ZTIxCitfVUlfRGVuZ3VlTW9kZWxfaG9zdFNlY29uZGFyeURpc2Vhc2VEZWF0aFJhdGUyM19mZWF0dXJlID0gSG9zdCBTZWNvbmRhcnkgRGlzZWFzZSBEZWF0aCBSYXRlMjMKK19VSV9EZW5ndWVNb2RlbF9ob3N0U2Vjb25kYXJ5RGlzZWFzZURlYXRoUmF0ZTI0X2ZlYXR1cmUgPSBIb3N0IFNlY29uZGFyeSBEaXNlYXNlIERlYXRoIFJhdGUyNAorX1VJX0Rlbmd1ZU1vZGVsX2hvc3RTZWNvbmRhcnlEaXNlYXNlRGVhdGhSYXRlMzFfZmVhdHVyZSA9IEhvc3QgU2Vjb25kYXJ5IERpc2Vhc2UgRGVhdGggUmF0ZTMxCitfVUlfRGVuZ3VlTW9kZWxfaG9zdFNlY29uZGFyeURpc2Vhc2VEZWF0aFJhdGUzMl9mZWF0dXJlID0gSG9zdCBTZWNvbmRhcnkgRGlzZWFzZSBEZWF0aCBSYXRlMzIKK19VSV9EZW5ndWVNb2RlbF9ob3N0U2Vjb25kYXJ5RGlzZWFzZURlYXRoUmF0ZTM0X2ZlYXR1cmUgPSBIb3N0IFNlY29uZGFyeSBEaXNlYXNlIERlYXRoIFJhdGUzNAorX1VJX0Rlbmd1ZU1vZGVsX2hvc3RTZWNvbmRhcnlEaXNlYXNlRGVhdGhSYXRlNDFfZmVhdHVyZSA9IEhvc3QgU2Vjb25kYXJ5IERpc2Vhc2UgRGVhdGggUmF0ZTQxCitfVUlfRGVuZ3VlTW9kZWxfaG9zdFNlY29uZGFyeURpc2Vhc2VEZWF0aFJhdGU0Ml9mZWF0dXJlID0gSG9zdCBTZWNvbmRhcnkgRGlzZWFzZSBEZWF0aCBSYXRlNDIKK19VSV9EZW5ndWVNb2RlbF9ob3N0U2Vjb25kYXJ5RGlzZWFzZURlYXRoUmF0ZTQzX2ZlYXR1cmUgPSBIb3N0IFNlY29uZGFyeSBEaXNlYXNlIERlYXRoIFJhdGU0MworX1VJX0Rlbmd1ZU1vZGVsX2hvc3RTZWNvbmRhcnlSZWNvdmVyeVJhdGUxMl9mZWF0dXJlID0gSG9zdCBTZWNvbmRhcnkgUmVjb3ZlcnkgUmF0ZTEyCitfVUlfRGVuZ3VlTW9kZWxfaG9zdFNlY29uZGFyeVJlY292ZXJ5UmF0ZTEzX2ZlYXR1cmUgPSBIb3N0IFNlY29uZGFyeSBSZWNvdmVyeSBSYXRlMTMKK19VSV9EZW5ndWVNb2RlbF9ob3N0U2Vjb25kYXJ5UmVjb3ZlcnlSYXRlMTRfZmVhdHVyZSA9IEhvc3QgU2Vjb25kYXJ5IFJlY292ZXJ5IFJhdGUxNAorX1VJX0Rlbmd1ZU1vZGVsX2hvc3RTZWNvbmRhcnlSZWNvdmVyeVJhdGUyMV9mZWF0dXJlID0gSG9zdCBTZWNvbmRhcnkgUmVjb3ZlcnkgUmF0ZTIxCitfVUlfRGVuZ3VlTW9kZWxfaG9zdFNlY29uZGFyeVJlY292ZXJ5UmF0ZTIzX2ZlYXR1cmUgPSBIb3N0IFNlY29uZGFyeSBSZWNvdmVyeSBSYXRlMjMKK19VSV9EZW5ndWVNb2RlbF9ob3N0U2Vjb25kYXJ5UmVjb3ZlcnlSYXRlMjRfZmVhdHVyZSA9IEhvc3QgU2Vjb25kYXJ5IFJlY292ZXJ5IFJhdGUyNAorX1VJX0Rlbmd1ZU1vZGVsX2hvc3RTZWNvbmRhcnlSZWNvdmVyeVJhdGUzMV9mZWF0dXJlID0gSG9zdCBTZWNvbmRhcnkgUmVjb3ZlcnkgUmF0ZTMxCitfVUlfRGVuZ3VlTW9kZWxfaG9zdFNlY29uZGFyeVJlY292ZXJ5UmF0ZTMyX2ZlYXR1cmUgPSBIb3N0IFNlY29uZGFyeSBSZWNvdmVyeSBSYXRlMzIKK19VSV9EZW5ndWVNb2RlbF9ob3N0U2Vjb25kYXJ5UmVjb3ZlcnlSYXRlMzRfZmVhdHVyZSA9IEhvc3QgU2Vjb25kYXJ5IFJlY292ZXJ5IFJhdGUzNAorX1VJX0Rlbmd1ZU1vZGVsX2hvc3RTZWNvbmRhcnlSZWNvdmVyeVJhdGU0MV9mZWF0dXJlID0gSG9zdCBTZWNvbmRhcnkgUmVjb3ZlcnkgUmF0ZTQxCitfVUlfRGVuZ3VlTW9kZWxfaG9zdFNlY29uZGFyeVJlY292ZXJ5UmF0ZTQyX2ZlYXR1cmUgPSBIb3N0IFNlY29uZGFyeSBSZWNvdmVyeSBSYXRlNDIKK19VSV9EZW5ndWVNb2RlbF9ob3N0U2Vjb25kYXJ5UmVjb3ZlcnlSYXRlNDNfZmVhdHVyZSA9IEhvc3QgU2Vjb25kYXJ5IFJlY292ZXJ5IFJhdGU0MworX1VJX0Rlbmd1ZU1vZGVsX2hvc3RTZWNvbmRhcnlJbmN1YmF0aW9uUmF0ZTEyX2ZlYXR1cmUgPSBIb3N0IFNlY29uZGFyeSBJbmN1YmF0aW9uIFJhdGUxMgorX1VJX0Rlbmd1ZU1vZGVsX2hvc3RTZWNvbmRhcnlJbmN1YmF0aW9uUmF0ZTEzX2ZlYXR1cmUgPSBIb3N0IFNlY29uZGFyeSBJbmN1YmF0aW9uIFJhdGUxMworX1VJX0Rlbmd1ZU1vZGVsX2hvc3RTZWNvbmRhcnlJbmN1YmF0aW9uUmF0ZTE0X2ZlYXR1cmUgPSBIb3N0IFNlY29uZGFyeSBJbmN1YmF0aW9uIFJhdGUxNAorX1VJX0Rlbmd1ZU1vZGVsX2hvc3RTZWNvbmRhcnlJbmN1YmF0aW9uUmF0ZTIxX2ZlYXR1cmUgPSBIb3N0IFNlY29uZGFyeSBJbmN1YmF0aW9uIFJhdGUyMQorX1VJX0Rlbmd1ZU1vZGVsX2hvc3RTZWNvbmRhcnlJbmN1YmF0aW9uUmF0ZTIzX2ZlYXR1cmUgPSBIb3N0IFNlY29uZGFyeSBJbmN1YmF0aW9uIFJhdGUyMworX1VJX0Rlbmd1ZU1vZGVsX2hvc3RTZWNvbmRhcnlJbmN1YmF0aW9uUmF0ZTI0X2ZlYXR1cmUgPSBIb3N0IFNlY29uZGFyeSBJbmN1YmF0aW9uIFJhdGUyNAorX1VJX0Rlbmd1ZU1vZGVsX2hvc3RTZWNvbmRhcnlJbmN1YmF0aW9uUmF0ZTMxX2ZlYXR1cmUgPSBIb3N0IFNlY29uZGFyeSBJbmN1YmF0aW9uIFJhdGUzMQorX1VJX0Rlbmd1ZU1vZGVsX2hvc3RTZWNvbmRhcnlJbmN1YmF0aW9uUmF0ZTMyX2ZlYXR1cmUgPSBIb3N0IFNlY29uZGFyeSBJbmN1YmF0aW9uIFJhdGUzMgorX1VJX0Rlbmd1ZU1vZGVsX2hvc3RTZWNvbmRhcnlJbmN1YmF0aW9uUmF0ZTM0X2ZlYXR1cmUgPSBIb3N0IFNlY29uZGFyeSBJbmN1YmF0aW9uIFJhdGUzNAorX1VJX0Rlbmd1ZU1vZGVsX2hvc3RTZWNvbmRhcnlJbmN1YmF0aW9uUmF0ZTQxX2ZlYXR1cmUgPSBIb3N0IFNlY29uZGFyeSBJbmN1YmF0aW9uIFJhdGU0MQorX1VJX0Rlbmd1ZU1vZGVsX2hvc3RTZWNvbmRhcnlJbmN1YmF0aW9uUmF0ZTQyX2ZlYXR1cmUgPSBIb3N0IFNlY29uZGFyeSBJbmN1YmF0aW9uIFJhdGU0MgorX1VJX0Rlbmd1ZU1vZGVsX2hvc3RTZWNvbmRhcnlJbmN1YmF0aW9uUmF0ZTQzX2ZlYXR1cmUgPSBIb3N0IFNlY29uZGFyeSBJbmN1YmF0aW9uIFJhdGU0MworX1VJX0Rlbmd1ZU1vZGVsX3ZlY3RvckxhcnZhRGVsYXlfZmVhdHVyZSA9IFZlY3RvciBMYXJ2YSBEZWxheQorX1VJX0Rlbmd1ZU1vZGVsX3ZlY3RvckluZmVjdGl2aXR5MV9mZWF0dXJlID0gVmVjdG9yIEluZmVjdGl2aXR5MQorX1VJX0Rlbmd1ZU1vZGVsX3ZlY3RvckluZmVjdGl2aXR5Ml9mZWF0dXJlID0gVmVjdG9yIEluZmVjdGl2aXR5MgorX1VJX0Rlbmd1ZU1vZGVsX3ZlY3RvckluZmVjdGl2aXR5M19mZWF0dXJlID0gVmVjdG9yIEluZmVjdGl2aXR5MworX1VJX0Rlbmd1ZU1vZGVsX3ZlY3RvckluZmVjdGl2aXR5NF9mZWF0dXJlID0gVmVjdG9yIEluZmVjdGl2aXR5NAorX1VJX0Rlbmd1ZU1vZGVsX3ZlY3RvckFERTFfZmVhdHVyZSA9IFZlY3RvciBBREUxCitfVUlfRGVuZ3VlTW9kZWxfdmVjdG9yQURFMl9mZWF0dXJlID0gVmVjdG9yIEFERTIKK19VSV9EZW5ndWVNb2RlbF92ZWN0b3JBREUzX2ZlYXR1cmUgPSBWZWN0b3IgQURFMworX1VJX0Rlbmd1ZU1vZGVsX3ZlY3RvckFERTRfZmVhdHVyZSA9IFZlY3RvciBBREU0CitfVUlfRGVuZ3VlTW9kZWxfdmVjdG9ySW5jdWJhdGlvblJhdGVfZmVhdHVyZSA9IFZlY3RvciBJbmN1YmF0aW9uIFJhdGUKK19VSV9EZW5ndWVNb2RlbF92ZWN0b3JJbmN1YmF0aW9uUmF0ZTFfZmVhdHVyZSA9IFZlY3RvciBJbmN1YmF0aW9uIFJhdGUxCitfVUlfRGVuZ3VlTW9kZWxfdmVjdG9ySW5jdWJhdGlvblJhdGUyX2ZlYXR1cmUgPSBWZWN0b3IgSW5jdWJhdGlvbiBSYXRlMgorX1VJX0Rlbmd1ZU1vZGVsX3ZlY3RvckluY3ViYXRpb25SYXRlM19mZWF0dXJlID0gVmVjdG9yIEluY3ViYXRpb24gUmF0ZTMKK19VSV9EZW5ndWVNb2RlbF92ZWN0b3JJbmN1YmF0aW9uUmF0ZTRfZmVhdHVyZSA9IFZlY3RvciBJbmN1YmF0aW9uIFJhdGU0CmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IvcGx1Z2luLnhtbCBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci9wbHVnaW4ueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUzOGVlY2UKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IvcGx1Z2luLnhtbApAQCAtMCwwICsxLDc4IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPD9lY2xpcHNlIHZlcnNpb249IjMuMCI/PgorCis8IS0tCisgPGNvcHlyaWdodD4KKyA8L2NvcHlyaWdodD4KKworICRJZCQKKy0tPgorCis8cGx1Z2luPgorCisgPGV4dGVuc2lvbgorICAgICAgICAgcG9pbnQ9Im9yZy5lY2xpcHNlLmVtZi5lZGl0Lml0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3JpZXMiPgorICAgICAgPGZhY3RvcnkKKyAgICAgICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLnByb3ZpZGVyLlZlY3Rvckl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5IgorICAgICAgICAgICAgc3VwcG9ydGVkVHlwZXM9Im9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklFZGl0aW5nRG9tYWluSXRlbVByb3ZpZGVyCisgICAgICAgIAkgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVN0cnVjdHVyZWRJdGVtQ29udGVudFByb3ZpZGVyCisgICAgICAgIAkgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVRyZWVJdGVtQ29udGVudFByb3ZpZGVyCisgICAgICAgIAkgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1MYWJlbFByb3ZpZGVyCisgICAgICAgIAkgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1Qcm9wZXJ0eVNvdXJjZSIKKyAgICAgICAgICAgIHVyaT0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvdmVjdG9yLmVjb3JlIj4KKyAgICAgIDwvZmFjdG9yeT4KKyAgIDwvZXh0ZW5zaW9uPgorICAgPGV4dGVuc2lvbiBwb2ludD0ib3JnLmVjbGlwc2UuZW1mLmVjb3JlLmdlbmVyYXRlZF9wYWNrYWdlIj4KKyAgICAgIDxwYWNrYWdlCisgICAgICAgICAgICB1cmk9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3ZlY3Rvci5lY29yZSIKKyAgICAgICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLlZlY3RvclBhY2thZ2UiCisgICAgICAgICAgICBnZW5Nb2RlbD0ibW9kZWwvdmVjdG9yLmdlbm1vZGVsIi8+CisgICA8L2V4dGVuc2lvbj4KKworICAgPGV4dGVuc2lvbgorICAgICAgICBwb2ludD0ib3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmRpc2Vhc2Vtb2RlbCI+CisgICAgIDxjbGFzc2RlZgorICAgICAgICAgICBjbGFzcz0ib3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5pbXBsLk1hY2RvbmFsZFJvc3NEaXNlYXNlTW9kZWxJbXBsIj4KKyAgICAgPC9jbGFzc2RlZj4KKyAgICAgPGR1Ymxpbl9jb3JlCisgICAgICAgICAgIGNyZWF0b3I9IiVkY19jcmVhdG9yX2VkbHVuZCIKKyAgICAgICAgICAgZGVzY3JpcHRpb249IiVkY19kZXNjX21jcm9zcyIKKyAgICAgICAgICAgaWRlbnRpZmllcj0iJWRjX2lkZW50aWVyIgorICAgICAgICAgICBsaWNlbnNlPSIlZGNfbGljZW5zZSIKKyAgICAgICAgICAgcHVibGlzaGVyPSIlZGNfcHVibGlzaGVyIiAKKyAgICAgICAgICAgdGl0bGU9IiVkY190aXRsZV9tY3Jvc3MiCisgICAgICAgICAgIHNvdXJjZT0iJWRjX21hY19zb3VyY2UiPgorICAgICAgICAgICAKKyAgICAgPC9kdWJsaW5fY29yZT4KKyAgPC9leHRlbnNpb24+CisgICA8ZXh0ZW5zaW9uCisgICAgICAgICBwb2ludD0ib3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmRpc2Vhc2Vtb2RlbCI+CisgICAgICA8Y2xhc3NkZWYKKyAgICAgICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLmltcGwuRGVuZ3VlTW9kZWxJbXBsIj4KKyAgICAgIDwvY2xhc3NkZWY+CisgICAgICA8ZHVibGluX2NvcmUKKyAgICAgICAgICAgIGNyZWF0b3I9IiVkY19jcmVhdG9yX2t1biIKKyAgICAgICAgICAgIGRlc2NyaXB0aW9uPSIlZGNfZGVzY19kZW5ndWUiCisgICAgICAgICAgICBpZGVudGlmaWVyPSIlZGNfaWRlbnRpZXIiCisgICAgICAgICAgICBsaWNlbnNlPSIlZGNfbGljZW5zZSIKKyAgICAgICAgICAgIHB1Ymxpc2hlcj0iJWRjX3B1Ymxpc2hlciIKKyAgICAgICAgICAgIHNvdXJjZT0iJWRjX21hY19zb3VyY2UiCisgICAgICAgICAgICB0aXRsZT0iJWRjX3RpdGxlX2Rlbmd1ZSI+CisgICAgICA8L2R1Ymxpbl9jb3JlPgorICAgPC9leHRlbnNpb24+CisgICA8ZXh0ZW5zaW9uCisgICAgICAgICBwb2ludD0ib3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmRpc2Vhc2Vtb2RlbCI+CisgICAgICA8Y2xhc3NkZWYKKyAgICAgICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLmltcGwuU2ltcGxlRGVuZ3VlTW9kZWxJbXBsIj4KKyAgICAgIDwvY2xhc3NkZWY+CisgICAgICA8ZHVibGluX2NvcmUKKyAgICAgICAgICAgIGNyZWF0b3I9IiVkY19jcmVhdG9yX2N0aG9lbnMiCisgICAgICAgICAgICBkZXNjcmlwdGlvbj0iJWRjX2Rlc2Nfc2ltcGxlX2Rlbmd1ZSIKKyAgICAgICAgICAgIGlkZW50aWZpZXI9IiVkY19pZGVudGllciIKKyAgICAgICAgICAgIGxpY2Vuc2U9IiVkY19saWNlbnNlIgorICAgICAgICAgICAgcHVibGlzaGVyPSIlZGNfcHVibGlzaGVyIgorICAgICAgICAgICAgc291cmNlPSIlZGNfbWFjX3NvdXJjZSIKKyAgICAgICAgICAgIHRpdGxlPSIlZGNfdGl0bGVfc2ltcGxlX2Rlbmd1ZSI+CisgICAgICA8L2R1Ymxpbl9jb3JlPgorICAgPC9leHRlbnNpb24+Cis8L3BsdWdpbj4KZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci9wbHVnaW5fZGUucHJvcGVydGllcyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci9wbHVnaW5fZGUucHJvcGVydGllcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNGFmNGIwCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yL3BsdWdpbl9kZS5wcm9wZXJ0aWVzCkBAIC0wLDAgKzEsMjY1IEBACisKKyMgPGNvcHlyaWdodD4KKyMgPC9jb3B5cmlnaHQ+CisjCisjICRJZCQKKworcGx1Z2luTmFtZT1cdTAwZGNiZXJ0cmFnZXJtb2RlbGwKK3Byb3ZpZGVyTmFtZT13d3cuZWNsaXBzZS5vcmcKK2RjX2NyZWF0b3JfZWRsdW5kPVN0ZWZhbiBFZGx1bmQKK2RjX2NyZWF0b3Jfa2F1Zm1hbj1KYW1lcyBLYXVmbWFuCitkY19jcmVhdG9yX2t1bj1LdW4gSHUKK2RjX2NyZWF0b3JfY3Rob2VucyA9IENocmlzdGlhbiBUaG9lbnMKK2RjX2lkZW50aWVyPVNURU0gV2llZGVyZ2FiZSBLcmFua2hlaXRzbW9kZWxsCitkY19wdWJsaXNoZXI9RGllIEVjbGlwc2UgRm91bmRhdGlvbgorZGNfbGljZW5zZT1FY2xpcHNlIFB1YmxpYyBMaWNlbnNlIChFUEwpCitkY19TT1VSQ0U9aHR0cDovL3dpa2kuZWNsaXBzZS5vcmcvSW50cm9kdWN0aW9uX3RvX0NvbXBhcnRtZW50X01vZGVscyAodW5kIFJlZmVyZW56ZW4gZ2lidCBlcy1pbikKK2RjX3RpdGxlX21jcm9zcz1NYWNEb25hbGQtUm9zcworZGNfdGl0bGVfZGVuZ3VlPURlbmd1ZSBGZXZlcgorZGNfdGl0bGVfc2ltcGxlX2Rlbmd1ZSA9IFNpbXBsZSBEZW5ndWUgRmV2ZXIKK2RjX2Rlc2NfbWNyb3NzPU1hY0RvbmFsZC1Sb3NzIFx1MDBkY2JlcnRyXHUwMGU0Z2VyIEtyYW5raGVpdHNtb2RlbGwgdm9uIEFuZGVyc29uIHVuZCBNYXkgZXJ3ZWl0ZXJ0LgorZGNfZGVzY19kZW5ndWU9TW9kZWwgZm9yIERlbmd1ZSBGZXZlcgorZGNfZGVzY19zaW1wbGVfZGVuZ3VlPVNpbXBsZSBNb2RlbCBmb3IgRGVuZ3VlIEZldmVyCitkY19tYWNfc291cmNlPVNpZWhlIGF1Y2g6IEFuZGVyc29uICYgTWF5ICAiSW5mZWN0aW91cyBEaXNlYXNlcyBvZiBIdW1hbnMiLCBLYXBpdGVsIDE0LjQuIERpZXNlcyBNb2RlbGwgZW50aFx1MDBlNGx0IGVpbmVuIHp1c1x1MDBlNHR6bGljaGVuIGltbXVuZW4gWnVzdGFuZCBmXHUwMGZjciBNZW5zY2hlbi4KKworX1VJX0NyZWF0ZUNoaWxkX3RleHQ9ezB9CitfVUlfQ3JlYXRlQ2hpbGRfdGV4dDI9ezF9IHswfQorX1VJX0NyZWF0ZUNoaWxkX3RleHQzPXsxfQorX1VJX0NyZWF0ZUNoaWxkX3Rvb2x0aXA9TmV1ZXMgezB9IHVudGVyIHsxfSBGZWF0dXJlIGVyc3RlbGxlbgorX1VJX0NyZWF0ZUNoaWxkX2Rlc2NyaXB0aW9uPU5ldWVzIEtpbmQgdm9tIFR5cCB7MH0gZlx1MDBmY3IgZGFzIHsxfSBNZXJrbWFsIGRlciBhdXNnZXdcdTAwZTRobHRlbiB7Mn0gZXJzdGVsbGVuCitfVUlfQ3JlYXRlU2libGluZ19kZXNjcmlwdGlvbj1OZXVlcyBHZXNjaHdpc3RlcnRlaWwgdm9tIFR5cCB7MH0gZlx1MDBmY3IgZGVuIGF1c2dld1x1MDBlNGhsdGVuIHsyfSB1bnRlciBkZW0gezF9IE1lcmttYWwgZGVzIEVsdGVybnRlaWwgZXJzdGVsbGVuCitfVUlfUHJvcGVydHlEZXNjcmlwdG9yX2Rlc2NyaXB0aW9uPXswfSB2b24gezF9CitfVUlfTWFjZG9uYWxkUm9zc0Rpc2Vhc2VNb2RlbF90eXBlPU1hY2RvbmFsZCBSb3NzIEtyYW5raGVpdHNtb2RlbGwKK19VSV9Vbmtub3duX3R5cGU9T2JqZWt0CitfVUlfVW5rbm93bl9kYXRhdHlwZT1XZXJ0CitfVUlfVW5rbm93bl9mZWF0dXJlPU5pY2h0IHNwZXppZml6aWVydAorX1VJX01hY2RvbmFsZFJvc3NEaXNlYXNlTW9kZWxfdmVjdG9yUG9wdWxhdGlvbklkZW50aWZpZXJfZmVhdHVyZT1cdTAwZGNiZXJ0clx1MDBlNGdlci1CZXZcdTAwZjZsa2VydW5nc2lkZW50aWZpemllcmVyCitfVUlfTWFjZG9uYWxkUm9zc0Rpc2Vhc2VNb2RlbF9iaXRpbmdSYXRlX2ZlYXR1cmU9U3RpY2hyYXRlCitfVUlfTWFjZG9uYWxkUm9zc0Rpc2Vhc2VNb2RlbF9pbmZlY3Rpb3VzQml0aW5nUHJvcG9ydGlvbkh1bWFuX2ZlYXR1cmU9QW50ZWlsIGluZmVrdGlcdTAwZjZzZXIgU3RpY2hlIGZcdTAwZmNyIE1lbnNjaGVuCitfVUlfTWFjZG9uYWxkUm9zc0Rpc2Vhc2VNb2RlbF9pbmZlY3Rpb3VzQml0aW5nUHJvcG9ydGlvblZlY3Rvcl9mZWF0dXJlPUFudGVpbCBpbmZla3RpXHUwMGY2c2VyIFN0aWNoZSBmXHUwMGZjciBcdTAwZGNiZXJ0clx1MDBlNGdlcgorX1VJX01hY2RvbmFsZFJvc3NEaXNlYXNlTW9kZWxfcmVjb3ZlcnlSYXRlX2ZlYXR1cmU9R2VuZXN1bmdzcmF0ZQorX1VJX01hY2RvbmFsZFJvc3NEaXNlYXNlTW9kZWxfdmVjdG9yTW9ydGFsaXR5UmF0ZV9mZWF0dXJlPVx1MDBkY2JlcnRyXHUwMGU0Z2VyLU1vcnRhbGl0XHUwMGU0dHNyYXRlCitfVUlfVmVjdG9yRGlzZWFzZU1vZGVsX3R5cGU9S3JhbmtoZWl0c21vZGVsbAorX1VJX1ZlY3RvckRpc2Vhc2VNb2RlbF92ZWN0b3JQb3B1bGF0aW9uSWRlbnRpZmllcl9mZWF0dXJlPVx1MDBkY2JlcnRyXHUwMGU0Z2VyLUJldlx1MDBmNmxrZXJ1bmdzaWRlbnRpZml6aWVyZXIKK19VSV9NYWNkb25hbGRSb3NzRGlzZWFzZU1vZGVsX2luY3ViYXRpb25SYXRlX2ZlYXR1cmU9SW5rdWJhdGlvbnNyYXRlCitfVUlfTWFjZG9uYWxkUm9zc0Rpc2Vhc2VNb2RlbF92ZWN0b3JJbmN1YmF0aW9uUmF0ZV9mZWF0dXJlPVx1MDBkY2JlcnRyXHUwMGU0Z2VyLUlua3ViYXRpb25zcmF0ZQorX1VJX01hY2RvbmFsZFJvc3NEaXNlYXNlTW9kZWxfaW1tdW5pdHlMb3NzUmF0ZV9mZWF0dXJlPUVudGltbXVuaXNpZXJ1bmdzcmF0ZQorX1VJX0Rlbmd1ZU1vZGVsX3R5cGU9RGVuZ3VlIE1vZGVsCitfVUlfRGVuZ3VlTW9kZWxIb3N0TGFibGVfdHlwZT1EZW5ndWUgTW9kZWwgSG9zdCBMYWJsZQorX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmxlVmFsdWVfdHlwZT1EZW5ndWUgTW9kZWwgSG9zdCBMYWJsZSBWYWx1ZQorX1VJX0Rlbmd1ZU1vZGVsVmVjdG9yTGFibGVfdHlwZT1EZW5ndWUgTW9kZWwgVmVjdG9yIExhYmxlCitfVUlfRGVuZ3VlTW9kZWxWZWN0b3JMYWJsZVZhbHVlX3R5cGU9RGVuZ3VlIE1vZGVsIFZlY3RvciBMYWJsZSBWYWx1ZQorX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmxlVmFsdWVfRTFfZmVhdHVyZT1FMQorX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmxlVmFsdWVfRTJfZmVhdHVyZT1FMgorX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmxlVmFsdWVfRTNfZmVhdHVyZT1FMworX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmxlVmFsdWVfRTRfZmVhdHVyZT1FNAorX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmxlVmFsdWVfSTFfZmVhdHVyZT1JMQorX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmxlVmFsdWVfSTJfZmVhdHVyZT1JMgorX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmxlVmFsdWVfSTNfZmVhdHVyZT1JMworX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmxlVmFsdWVfSTRfZmVhdHVyZT1JNAorX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmxlVmFsdWVfVDFfZmVhdHVyZT1UMQorX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmxlVmFsdWVfVDJfZmVhdHVyZT1UMgorX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmxlVmFsdWVfVDNfZmVhdHVyZT1UMworX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmxlVmFsdWVfVDRfZmVhdHVyZT1UNAorX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmxlVmFsdWVfUjFfZmVhdHVyZT1SMQorX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmxlVmFsdWVfUjJfZmVhdHVyZT1SMgorX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmxlVmFsdWVfUjNfZmVhdHVyZT1SMworX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmxlVmFsdWVfUjRfZmVhdHVyZT1SNAorX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmxlVmFsdWVfRTEyX2ZlYXR1cmU9RTEyCitfVUlfRGVuZ3VlTW9kZWxIb3N0TGFibGVWYWx1ZV9FMTNfZmVhdHVyZT1FMTMKK19VSV9EZW5ndWVNb2RlbEhvc3RMYWJsZVZhbHVlX0UxNF9mZWF0dXJlPUUxNAorX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmxlVmFsdWVfRTIxX2ZlYXR1cmU9RTIxCitfVUlfRGVuZ3VlTW9kZWxIb3N0TGFibGVWYWx1ZV9FMjNfZmVhdHVyZT1FMjMKK19VSV9EZW5ndWVNb2RlbEhvc3RMYWJsZVZhbHVlX0UyNF9mZWF0dXJlPUUyNAorX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmxlVmFsdWVfRTMxX2ZlYXR1cmU9RTMxCitfVUlfRGVuZ3VlTW9kZWxIb3N0TGFibGVWYWx1ZV9FMzJfZmVhdHVyZT1FMzIKK19VSV9EZW5ndWVNb2RlbEhvc3RMYWJsZVZhbHVlX0UzNF9mZWF0dXJlPUUzNAorX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmxlVmFsdWVfRTQxX2ZlYXR1cmU9RTQxCitfVUlfRGVuZ3VlTW9kZWxIb3N0TGFibGVWYWx1ZV9FNDJfZmVhdHVyZT1FNDIKK19VSV9EZW5ndWVNb2RlbEhvc3RMYWJsZVZhbHVlX0U0M19mZWF0dXJlPUU0MworX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmxlVmFsdWVfSTEyX2ZlYXR1cmU9STEyCitfVUlfRGVuZ3VlTW9kZWxIb3N0TGFibGVWYWx1ZV9JMTNfZmVhdHVyZT1JMTMKK19VSV9EZW5ndWVNb2RlbEhvc3RMYWJsZVZhbHVlX0kxNF9mZWF0dXJlPUkxNAorX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmxlVmFsdWVfSTIxX2ZlYXR1cmU9STIxCitfVUlfRGVuZ3VlTW9kZWxIb3N0TGFibGVWYWx1ZV9JMjNfZmVhdHVyZT1JMjMKK19VSV9EZW5ndWVNb2RlbEhvc3RMYWJsZVZhbHVlX0kyNF9mZWF0dXJlPUkyNAorX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmxlVmFsdWVfSTMxX2ZlYXR1cmU9STMxCitfVUlfRGVuZ3VlTW9kZWxIb3N0TGFibGVWYWx1ZV9JMzJfZmVhdHVyZT1JMzIKK19VSV9EZW5ndWVNb2RlbEhvc3RMYWJsZVZhbHVlX0kzNF9mZWF0dXJlPUkzNAorX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmxlVmFsdWVfSTQxX2ZlYXR1cmU9STQxCitfVUlfRGVuZ3VlTW9kZWxIb3N0TGFibGVWYWx1ZV9JNDJfZmVhdHVyZT1JNDIKK19VSV9EZW5ndWVNb2RlbEhvc3RMYWJsZVZhbHVlX0k0M19mZWF0dXJlPUk0MworX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmxlVmFsdWVfUl9mZWF0dXJlPVIKK19VSV9EZW5ndWVNb2RlbFZlY3RvckxhYmxlVmFsdWVfRTFfZmVhdHVyZT1FMQorX1VJX0Rlbmd1ZU1vZGVsVmVjdG9yTGFibGVWYWx1ZV9FMl9mZWF0dXJlPUUyCitfVUlfRGVuZ3VlTW9kZWxWZWN0b3JMYWJsZVZhbHVlX0UzX2ZlYXR1cmU9RTMKK19VSV9EZW5ndWVNb2RlbFZlY3RvckxhYmxlVmFsdWVfRTRfZmVhdHVyZT1FNAorX1VJX0Rlbmd1ZU1vZGVsVmVjdG9yTGFibGVWYWx1ZV9JMV9mZWF0dXJlPUkxCitfVUlfRGVuZ3VlTW9kZWxWZWN0b3JMYWJsZVZhbHVlX0kyX2ZlYXR1cmU9STIKK19VSV9EZW5ndWVNb2RlbFZlY3RvckxhYmxlVmFsdWVfSTNfZmVhdHVyZT1JMworX1VJX0Rlbmd1ZU1vZGVsVmVjdG9yTGFibGVWYWx1ZV9JNF9mZWF0dXJlPUk0CitfVUlfRGVuZ3VlTW9kZWxfZXhwb3N1cmVSYXRlMV9mZWF0dXJlPUV4cG9zdXJlIFJhdGUxCitfVUlfRGVuZ3VlTW9kZWxfdHJhbnNtaXNzaW9uUmF0ZTFfZmVhdHVyZT1UcmFuc21pc3Npb24gUmF0ZTEKK19VSV9TaW1wbGVEZW5ndWVNb2RlbF90eXBlPVNpbXBsZSBEZW5ndWUgTW9kZWwKK19VSV9TaW1wbGVEZW5ndWVNb2RlbF9iaXRpbmdSYXRlX2ZlYXR1cmU9U3RpY2hyYXRlCitfVUlfU2ltcGxlRGVuZ3VlTW9kZWxfaG9zdEluZmVjdGl2aXR5MV9mZWF0dXJlPUhvc3QgSW5mZWN0aXZpdHkxCitfVUlfU2ltcGxlRGVuZ3VlTW9kZWxfaG9zdEluZmVjdGl2aXR5Ml9mZWF0dXJlPUhvc3QgSW5mZWN0aXZpdHkyCitfVUlfU2ltcGxlRGVuZ3VlTW9kZWxfaG9zdEluZmVjdGl2aXR5M19mZWF0dXJlPUhvc3QgSW5mZWN0aXZpdHkzCitfVUlfU2ltcGxlRGVuZ3VlTW9kZWxfaG9zdEluZmVjdGl2aXR5NF9mZWF0dXJlPUhvc3QgSW5mZWN0aXZpdHk0CitfVUlfU2ltcGxlRGVuZ3VlTW9kZWxfaG9zdFByaW1hcnlJbmN1YmF0aW9uUmF0ZV9mZWF0dXJlPUhvc3QgUHJpbWFyeSBJbmN1YmF0aW9uIFJhdGUKK19VSV9TaW1wbGVEZW5ndWVNb2RlbF9ob3N0UHJpbWFyeVJlY292ZXJ5UmF0ZV9mZWF0dXJlPUhvc3QgUHJpbWFyeSBSZWNvdmVyeSBSYXRlCitfVUlfU2ltcGxlRGVuZ3VlTW9kZWxfaG9zdFByaW1hcnlJbW11bml0eUxvc3NSYXRlX2ZlYXR1cmU9SG9zdCBQcmltYXJ5IEltbXVuaXR5IExvc3MgUmF0ZQorX1VJX1NpbXBsZURlbmd1ZU1vZGVsX2hvc3RQcmltYXJ5RGVhdGhSYXRlX2ZlYXR1cmU9SG9zdCBQcmltYXJ5IERlYXRoIFJhdGUKK19VSV9TaW1wbGVEZW5ndWVNb2RlbF9ob3N0QURFMV9mZWF0dXJlPUhvc3QgQURFMQorX1VJX1NpbXBsZURlbmd1ZU1vZGVsX2hvc3RBREUyX2ZlYXR1cmU9SG9zdCBBREUyCitfVUlfU2ltcGxlRGVuZ3VlTW9kZWxfaG9zdEFERTNfZmVhdHVyZT1Ib3N0IEFERTMKK19VSV9TaW1wbGVEZW5ndWVNb2RlbF9ob3N0QURFNF9mZWF0dXJlPUhvc3QgQURFNAorX1VJX1NpbXBsZURlbmd1ZU1vZGVsX2hvc3RTZWNvbmRhcnlJbmN1YmF0aW9uUmF0ZV9mZWF0dXJlPUhvc3QgU2Vjb25kYXJ5IEluY3ViYXRpb24gUmF0ZQorX1VJX1NpbXBsZURlbmd1ZU1vZGVsX2hvc3RTZWNvbmRhcnlSZWNvdmVyeVJhdGVfZmVhdHVyZT1Ib3N0IFNlY29uZGFyeSBSZWNvdmVyeSBSYXRlCitfVUlfU2ltcGxlRGVuZ3VlTW9kZWxfaG9zdFNlY29uZGFyeURlYXRoUmF0ZV9mZWF0dXJlPUhvc3QgU2Vjb25kYXJ5IERlYXRoIFJhdGUKK19VSV9TaW1wbGVEZW5ndWVNb2RlbF92ZWN0b3JJbmZlY3Rpdml0eTFfZmVhdHVyZT1WZWN0b3IgSW5mZWN0aXZpdHkxCitfVUlfU2ltcGxlRGVuZ3VlTW9kZWxfdmVjdG9ySW5mZWN0aXZpdHkyX2ZlYXR1cmU9VmVjdG9yIEluZmVjdGl2aXR5MgorX1VJX1NpbXBsZURlbmd1ZU1vZGVsX3ZlY3RvckluZmVjdGl2aXR5M19mZWF0dXJlPVZlY3RvciBJbmZlY3Rpdml0eTMKK19VSV9TaW1wbGVEZW5ndWVNb2RlbF92ZWN0b3JJbmZlY3Rpdml0eTRfZmVhdHVyZT1WZWN0b3IgSW5mZWN0aXZpdHk0CitfVUlfU2ltcGxlRGVuZ3VlTW9kZWxfdmVjdG9yQURFMV9mZWF0dXJlPVZlY3RvciBBREUxCitfVUlfU2ltcGxlRGVuZ3VlTW9kZWxfdmVjdG9yQURFMl9mZWF0dXJlPVZlY3RvciBBREUyCitfVUlfU2ltcGxlRGVuZ3VlTW9kZWxfdmVjdG9yQURFM19mZWF0dXJlPVZlY3RvciBBREUzCitfVUlfU2ltcGxlRGVuZ3VlTW9kZWxfdmVjdG9yQURFNF9mZWF0dXJlPVZlY3RvciBBREU0CitfVUlfU2ltcGxlRGVuZ3VlTW9kZWxfdmVjdG9ySW5jdWJhdGlvblJhdGVfZmVhdHVyZT1cdTAwZGNiZXJ0clx1MDBlNGdlci1Jbmt1YmF0aW9uc3JhdGUKK19VSV9EZW5ndWVNb2RlbEhvc3RMYWJsZVZhbHVlX2luY2lkZW5jZTFfZmVhdHVyZT1JbmNpZGVuY2UxCitfVUlfRGVuZ3VlTW9kZWxIb3N0TGFibGVWYWx1ZV9pbmNpZGVuY2UyX2ZlYXR1cmU9SW5jaWRlbmNlMgorX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmxlVmFsdWVfaW5jaWRlbmNlM19mZWF0dXJlPUluY2lkZW5jZTMKK19VSV9EZW5ndWVNb2RlbEhvc3RMYWJsZVZhbHVlX2luY2lkZW5jZTRfZmVhdHVyZT1JbmNpZGVuY2U0CitfVUlfRGVuZ3VlTW9kZWxIb3N0TGFibGVWYWx1ZV9pbmNpZGVuY2UxMl9mZWF0dXJlPUluY2lkZW5jZTEyCitfVUlfRGVuZ3VlTW9kZWxIb3N0TGFibGVWYWx1ZV9pbmNpZGVuY2UyMV9mZWF0dXJlPUluY2lkZW5jZTIxCitfVUlfRGVuZ3VlTW9kZWxIb3N0TGFibGVWYWx1ZV9pbmNpZGVuY2UzMV9mZWF0dXJlPUluY2lkZW5jZTMxCitfVUlfRGVuZ3VlTW9kZWxIb3N0TGFibGVWYWx1ZV9pbmNpZGVuY2U0MV9mZWF0dXJlPUluY2lkZW5jZTQxCitfVUlfRGVuZ3VlTW9kZWxIb3N0TGFibGVWYWx1ZV9pbmNpZGVuY2UxM19mZWF0dXJlPUluY2lkZW5jZTEzCitfVUlfRGVuZ3VlTW9kZWxIb3N0TGFibGVWYWx1ZV9pbmNpZGVuY2UyM19mZWF0dXJlPUluY2lkZW5jZTIzCitfVUlfRGVuZ3VlTW9kZWxIb3N0TGFibGVWYWx1ZV9pbmNpZGVuY2UzMl9mZWF0dXJlPUluY2lkZW5jZTMyCitfVUlfRGVuZ3VlTW9kZWxIb3N0TGFibGVWYWx1ZV9pbmNpZGVuY2U0Ml9mZWF0dXJlPUluY2lkZW5jZTQyCitfVUlfRGVuZ3VlTW9kZWxIb3N0TGFibGVWYWx1ZV9pbmNpZGVuY2UxNF9mZWF0dXJlPUluY2lkZW5jZTE0CitfVUlfRGVuZ3VlTW9kZWxIb3N0TGFibGVWYWx1ZV9pbmNpZGVuY2UyNF9mZWF0dXJlPUluY2lkZW5jZTI0CitfVUlfRGVuZ3VlTW9kZWxIb3N0TGFibGVWYWx1ZV9pbmNpZGVuY2UzNF9mZWF0dXJlPUluY2lkZW5jZTM0CitfVUlfRGVuZ3VlTW9kZWxIb3N0TGFibGVWYWx1ZV9pbmNpZGVuY2U0M19mZWF0dXJlPUluY2lkZW5jZTQzCitfVUlfRGVuZ3VlTW9kZWxIb3N0TGFibGVWYWx1ZV9kZWF0aHMxX2ZlYXR1cmU9RGVhdGhzMQorX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmxlVmFsdWVfZGVhdGhzMl9mZWF0dXJlPURlYXRoczIKK19VSV9EZW5ndWVNb2RlbEhvc3RMYWJsZVZhbHVlX2RlYXRoczNfZmVhdHVyZT1EZWF0aHMzCitfVUlfRGVuZ3VlTW9kZWxIb3N0TGFibGVWYWx1ZV9kZWF0aHM0X2ZlYXR1cmU9RGVhdGhzNAorX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmxlVmFsdWVfZGVhdGhzMTJfZmVhdHVyZT1EZWF0aHMxMgorX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmxlVmFsdWVfZGVhdGhzMjFfZmVhdHVyZT1EZWF0aHMyMQorX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmxlVmFsdWVfZGVhdGhzMzFfZmVhdHVyZT1EZWF0aHMzMQorX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmxlVmFsdWVfZGVhdGhzNDFfZmVhdHVyZT1EZWF0aHM0MQorX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmxlVmFsdWVfZGVhdGhzMTNfZmVhdHVyZT1EZWF0aHMxMworX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmxlVmFsdWVfZGVhdGhzMjNfZmVhdHVyZT1EZWF0aHMyMworX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmxlVmFsdWVfZGVhdGhzMzJfZmVhdHVyZT1EZWF0aHMzMgorX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmxlVmFsdWVfZGVhdGhzNDJfZmVhdHVyZT1EZWF0aHM0MgorX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmxlVmFsdWVfZGVhdGhzMTRfZmVhdHVyZT1EZWF0aHMxNAorX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmxlVmFsdWVfZGVhdGhzMjRfZmVhdHVyZT1EZWF0aHMyNAorX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmxlVmFsdWVfZGVhdGhzMzRfZmVhdHVyZT1EZWF0aHMzNAorX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmxlVmFsdWVfZGVhdGhzNDNfZmVhdHVyZT1EZWF0aHM0MworX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmVsX3R5cGU9RGVuZ3VlIE1vZGVsIEhvc3QgTGFiZWwKK19VSV9EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX3R5cGU9RGVuZ3VlIE1vZGVsIEhvc3QgTGFiZWwgVmFsdWUKK19VSV9EZW5ndWVNb2RlbFZlY3RvckxhYmVsX3R5cGU9RGVuZ3VlIE1vZGVsIFZlY3RvciBMYWJlbAorX1VJX0Rlbmd1ZU1vZGVsVmVjdG9yTGFiZWxWYWx1ZV90eXBlPURlbmd1ZSBNb2RlbCBWZWN0b3IgTGFiZWwgVmFsdWUKK19VSV9EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX0UxX2ZlYXR1cmU9RTEKK19VSV9EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX0UyX2ZlYXR1cmU9RTIKK19VSV9EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX0UzX2ZlYXR1cmU9RTMKK19VSV9EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX0U0X2ZlYXR1cmU9RTQKK19VSV9EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX0kxX2ZlYXR1cmU9STEKK19VSV9EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX0kyX2ZlYXR1cmU9STIKK19VSV9EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX0kzX2ZlYXR1cmU9STMKK19VSV9EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX0k0X2ZlYXR1cmU9STQKK19VSV9EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX1QxX2ZlYXR1cmU9VDEKK19VSV9EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX1QyX2ZlYXR1cmU9VDIKK19VSV9EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX1QzX2ZlYXR1cmU9VDMKK19VSV9EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX1Q0X2ZlYXR1cmU9VDQKK19VSV9EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX1IxX2ZlYXR1cmU9UjEKK19VSV9EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX1IyX2ZlYXR1cmU9UjIKK19VSV9EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX1IzX2ZlYXR1cmU9UjMKK19VSV9EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX1I0X2ZlYXR1cmU9UjQKK19VSV9EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX0UxMl9mZWF0dXJlPUUxMgorX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfRTEzX2ZlYXR1cmU9RTEzCitfVUlfRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9FMTRfZmVhdHVyZT1FMTQKK19VSV9EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX0UyMV9mZWF0dXJlPUUyMQorX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfRTIzX2ZlYXR1cmU9RTIzCitfVUlfRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9FMjRfZmVhdHVyZT1FMjQKK19VSV9EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX0UzMV9mZWF0dXJlPUUzMQorX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfRTMyX2ZlYXR1cmU9RTMyCitfVUlfRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9FMzRfZmVhdHVyZT1FMzQKK19VSV9EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX0U0MV9mZWF0dXJlPUU0MQorX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfRTQyX2ZlYXR1cmU9RTQyCitfVUlfRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9FNDNfZmVhdHVyZT1FNDMKK19VSV9EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX0kxMl9mZWF0dXJlPUkxMgorX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfSTEzX2ZlYXR1cmU9STEzCitfVUlfRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9JMTRfZmVhdHVyZT1JMTQKK19VSV9EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX0kyMV9mZWF0dXJlPUkyMQorX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfSTIzX2ZlYXR1cmU9STIzCitfVUlfRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9JMjRfZmVhdHVyZT1JMjQKK19VSV9EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX0kzMV9mZWF0dXJlPUkzMQorX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfSTMyX2ZlYXR1cmU9STMyCitfVUlfRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9JMzRfZmVhdHVyZT1JMzQKK19VSV9EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX0k0MV9mZWF0dXJlPUk0MQorX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfSTQyX2ZlYXR1cmU9STQyCitfVUlfRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9JNDNfZmVhdHVyZT1JNDMKK19VSV9EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX1JfZmVhdHVyZT1SCitfVUlfRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9pbmNpZGVuY2UxX2ZlYXR1cmU9SW5jaWRlbmNlMQorX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfaW5jaWRlbmNlMl9mZWF0dXJlPUluY2lkZW5jZTIKK19VSV9EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX2luY2lkZW5jZTNfZmVhdHVyZT1JbmNpZGVuY2UzCitfVUlfRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9pbmNpZGVuY2U0X2ZlYXR1cmU9SW5jaWRlbmNlNAorX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfaW5jaWRlbmNlMTJfZmVhdHVyZT1JbmNpZGVuY2UxMgorX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfaW5jaWRlbmNlMjFfZmVhdHVyZT1JbmNpZGVuY2UyMQorX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfaW5jaWRlbmNlMzFfZmVhdHVyZT1JbmNpZGVuY2UzMQorX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfaW5jaWRlbmNlNDFfZmVhdHVyZT1JbmNpZGVuY2U0MQorX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfaW5jaWRlbmNlMTNfZmVhdHVyZT1JbmNpZGVuY2UxMworX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfaW5jaWRlbmNlMjNfZmVhdHVyZT1JbmNpZGVuY2UyMworX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfaW5jaWRlbmNlMzJfZmVhdHVyZT1JbmNpZGVuY2UzMgorX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfaW5jaWRlbmNlNDJfZmVhdHVyZT1JbmNpZGVuY2U0MgorX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfaW5jaWRlbmNlMTRfZmVhdHVyZT1JbmNpZGVuY2UxNAorX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfaW5jaWRlbmNlMjRfZmVhdHVyZT1JbmNpZGVuY2UyNAorX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfaW5jaWRlbmNlMzRfZmVhdHVyZT1JbmNpZGVuY2UzNAorX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfaW5jaWRlbmNlNDNfZmVhdHVyZT1JbmNpZGVuY2U0MworX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfZGVhdGhzMV9mZWF0dXJlPURlYXRoczEKK19VSV9EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX2RlYXRoczJfZmVhdHVyZT1EZWF0aHMyCitfVUlfRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9kZWF0aHMzX2ZlYXR1cmU9RGVhdGhzMworX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfZGVhdGhzNF9mZWF0dXJlPURlYXRoczQKK19VSV9EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX2RlYXRoczEyX2ZlYXR1cmU9RGVhdGhzMTIKK19VSV9EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX2RlYXRoczIxX2ZlYXR1cmU9RGVhdGhzMjEKK19VSV9EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX2RlYXRoczMxX2ZlYXR1cmU9RGVhdGhzMzEKK19VSV9EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX2RlYXRoczQxX2ZlYXR1cmU9RGVhdGhzNDEKK19VSV9EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX2RlYXRoczEzX2ZlYXR1cmU9RGVhdGhzMTMKK19VSV9EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX2RlYXRoczIzX2ZlYXR1cmU9RGVhdGhzMjMKK19VSV9EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX2RlYXRoczMyX2ZlYXR1cmU9RGVhdGhzMzIKK19VSV9EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX2RlYXRoczQyX2ZlYXR1cmU9RGVhdGhzNDIKK19VSV9EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX2RlYXRoczE0X2ZlYXR1cmU9RGVhdGhzMTQKK19VSV9EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX2RlYXRoczI0X2ZlYXR1cmU9RGVhdGhzMjQKK19VSV9EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX2RlYXRoczM0X2ZlYXR1cmU9RGVhdGhzMzQKK19VSV9EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX2RlYXRoczQzX2ZlYXR1cmU9RGVhdGhzNDMKK19VSV9EZW5ndWVNb2RlbFZlY3RvckxhYmVsVmFsdWVfRTFfZmVhdHVyZT1FMQorX1VJX0Rlbmd1ZU1vZGVsVmVjdG9yTGFiZWxWYWx1ZV9FMl9mZWF0dXJlPUUyCitfVUlfRGVuZ3VlTW9kZWxWZWN0b3JMYWJlbFZhbHVlX0UzX2ZlYXR1cmU9RTMKK19VSV9EZW5ndWVNb2RlbFZlY3RvckxhYmVsVmFsdWVfRTRfZmVhdHVyZT1FNAorX1VJX0Rlbmd1ZU1vZGVsVmVjdG9yTGFiZWxWYWx1ZV9JMV9mZWF0dXJlPUkxCitfVUlfRGVuZ3VlTW9kZWxWZWN0b3JMYWJlbFZhbHVlX0kyX2ZlYXR1cmU9STIKK19VSV9EZW5ndWVNb2RlbFZlY3RvckxhYmVsVmFsdWVfSTNfZmVhdHVyZT1JMworX1VJX0Rlbmd1ZU1vZGVsVmVjdG9yTGFiZWxWYWx1ZV9JNF9mZWF0dXJlPUk0CitfVUlfRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9kaXNlYXNlRGVhdGhzMV9mZWF0dXJlPURpc2Vhc2UgRGVhdGhzMQorX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfZGlzZWFzZURlYXRoczJfZmVhdHVyZT1EaXNlYXNlIERlYXRoczIKK19VSV9EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX2Rpc2Vhc2VEZWF0aHMzX2ZlYXR1cmU9RGlzZWFzZSBEZWF0aHMzCitfVUlfRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9kaXNlYXNlRGVhdGhzNF9mZWF0dXJlPURpc2Vhc2UgRGVhdGhzNAorX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfZGlzZWFzZURlYXRoczEyX2ZlYXR1cmU9RGlzZWFzZSBEZWF0aHMxMgorX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfZGlzZWFzZURlYXRoczIxX2ZlYXR1cmU9RGlzZWFzZSBEZWF0aHMyMQorX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfZGlzZWFzZURlYXRoczMxX2ZlYXR1cmU9RGlzZWFzZSBEZWF0aHMzMQorX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfZGlzZWFzZURlYXRoczQxX2ZlYXR1cmU9RGlzZWFzZSBEZWF0aHM0MQorX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfZGlzZWFzZURlYXRoczEzX2ZlYXR1cmU9RGlzZWFzZSBEZWF0aHMxMworX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfZGlzZWFzZURlYXRoczIzX2ZlYXR1cmU9RGlzZWFzZSBEZWF0aHMyMworX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfZGlzZWFzZURlYXRoczMyX2ZlYXR1cmU9RGlzZWFzZSBEZWF0aHMzMgorX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfZGlzZWFzZURlYXRoczQyX2ZlYXR1cmU9RGlzZWFzZSBEZWF0aHM0MgorX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfZGlzZWFzZURlYXRoczE0X2ZlYXR1cmU9RGlzZWFzZSBEZWF0aHMxNAorX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfZGlzZWFzZURlYXRoczI0X2ZlYXR1cmU9RGlzZWFzZSBEZWF0aHMyNAorX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfZGlzZWFzZURlYXRoczM0X2ZlYXR1cmU9RGlzZWFzZSBEZWF0aHMzNAorX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfZGlzZWFzZURlYXRoczQzX2ZlYXR1cmU9RGlzZWFzZSBEZWF0aHM0MworX1VJX0Rlbmd1ZU1vZGVsVmVjdG9yTGFiZWxWYWx1ZV9pbmNpZGVuY2UxX2ZlYXR1cmU9SW5jaWRlbmNlMQorX1VJX0Rlbmd1ZU1vZGVsVmVjdG9yTGFiZWxWYWx1ZV9pbmNpZGVuY2UyX2ZlYXR1cmU9SW5jaWRlbmNlMgorX1VJX0Rlbmd1ZU1vZGVsVmVjdG9yTGFiZWxWYWx1ZV9pbmNpZGVuY2UzX2ZlYXR1cmU9SW5jaWRlbmNlMworX1VJX0Rlbmd1ZU1vZGVsVmVjdG9yTGFiZWxWYWx1ZV9pbmNpZGVuY2U0X2ZlYXR1cmU9SW5jaWRlbmNlNApkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yL3BsdWdpbl9rci5wcm9wZXJ0aWVzIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yL3BsdWdpbl9rci5wcm9wZXJ0aWVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ0NmFhODgKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IvcGx1Z2luX2tyLnByb3BlcnRpZXMKQEAgLTAsMCArMSwzNDkgQEAKKworIyA8Y29weXJpZ2h0PgorIyA8L2NvcHlyaWdodD4KKyMKKyMgJElkJAorCitwbHVnaW5OYW1lPVx1YmNhMVx1ZDEzMCBcdWJhYThcdWIzNzgKK3Byb3ZpZGVyTmFtZT13d3cuZWNsaXBzZS5vcmcKK2RjX2NyZWF0b3JfZWRsdW5kPVN0ZWZhbiBFZGx1bmQKK2RjX2NyZWF0b3Jfa2F1Zm1hbj1cdWM4MWNcdWM3ODRcdWMyYTQgXHVjZTc0XHVkNTA0XHViOWU4CitkY19jcmVhdG9yX2t1bj1LdW4gSHUKK2RjX2NyZWF0b3JfY3Rob2Vucz1cdWFlMzBcdWIzYzVcdWFkNTAgVGhvZW5zCitkY19pZGVudGllcj1TVEVNIFx1YzdhY1x1YzBkZCBcdWM5YzhcdWJjZDEgXHViYWE4XHViMzc4CitkY19wdWJsaXNoZXI9XHVjNzc0XHVkMDc0XHViOWJkXHVjMmE0IFx1YzdhY1x1YjJlOAorZGNfbGljZW5zZT1cdWM3NzRcdWQwNzRcdWI5YmRcdWMyYTQgXHVhY2Y1XHVjNmE5IFx1YzBhY1x1YzZhOSBcdWQ1YzhcdWFjMDBcdWMxMWMgKEVQTCkKK2RjX1NPVVJDRT1odHRwOi8vd2lraS5lY2xpcHNlLm9yZy9JbnRyb2R1Y3Rpb25fdG9fQ29tcGFydG1lbnRfTW9kZWxzIChcdWFkZjhcdWI5YWNcdWFjZTAgXHVjYzM4XHVhY2UwIFx1YmIzOFx1ZDVjY1x1YzVkMFx1YzExYykKK2RjX3RpdGxlX21jcm9zcz1cdWI5ZTVcdWIzYzRcdWIxMTBcdWI0ZGMgLSBcdWI4NWNcdWMyYTQKK2RjX3RpdGxlX2Rlbmd1ZT1EZW5ndWUgRmV2ZXIKK2RjX3RpdGxlX3NpbXBsZV9kZW5ndWU9U2ltcGxlIERlbmd1ZSBGZXZlcgorZGNfZGVzY19tY3Jvc3M9XHVjNTY0XHViMzU0XHVjMmE4XHVhY2ZjIFx1YmE1NFx1Yzc3NFx1YzVkMCBcdWM3NThcdWQ1NzQgXHVkNjU1XHVjN2E1XHViNDFjIFx1YjllNVx1YjNjNFx1YjExMFx1YjRkYyAtIFx1Yjg1Y1x1YzJhNCBcdWJjYTFcdWQxMzAgXHVjOWM4XHViY2QxIFx1YzgwNFx1YzVmYyBcdWJhYThcdWIzNzguCitkY19kZXNjX2Rlbmd1ZT1Nb2RlbCBmb3IgRGVuZ3VlIEZldmVyCitkY19kZXNjX3NpbXBsZV9kZW5ndWU9U2ltcGxlIE1vZGVsIGZvciBEZW5ndWUgRmV2ZXIKK2RjX21hY19zb3VyY2U9XHVjYzM4XHVjODcwIDogXHVjNTY0XHViMzU0XHVjMmE4ICYgXHVjNmQ0ICJcdWM3NzhcdWFjMDRcdWM3NTggXHVjODA0XHVjNWZjXHViY2QxIiwgXHVjN2E1IDE0LjQuIFx1Yzc3NCBcdWJhYThcdWIzNzhcdWM3NDAgXHVjNzc4XHVhYzA0XHVjNzU4IFx1Y2Q5NFx1YWMwMCBcdWJhNzRcdWM1ZWQgXHVjMGMxXHVkMGRjXHViOTdjIFx1ZDNlY1x1ZDU2OFx1ZDU1OFx1YWNlMCBcdWM3ODhcdWM3NGMuCisKK19VSV9DcmVhdGVDaGlsZF90ZXh0PXswfQorX1VJX0NyZWF0ZUNoaWxkX3RleHQyPXsxfSB7MH0KK19VSV9DcmVhdGVDaGlsZF90ZXh0Mz17MX0KK19VSV9DcmVhdGVDaGlsZF90b29sdGlwPXsxfSBcdWFlMzBcdWIyYTUgXHVkNTU4XHVjNWQwIFx1YzBjOCB7MH0gXHViOWNjXHViNGU0XHVhZTMwCitfVUlfQ3JlYXRlQ2hpbGRfZGVzY3JpcHRpb249XHVjMTIwXHVkMGRkXHVkNTVjIHsyfVx1Yzc1OCB7MX0gXHVhZTMwXHViMmE1XHVjNWQwIFx1YjMwMFx1ZDU1YyBcdWQ2MTVcdWMyZGQgezB9XHVjNzU4IFx1YzBjOFx1Yjg1Y1x1YzZiNCBDaGlsZFx1Yjk3YyBcdWI5Y2NcdWI0ZWRcdWIyYzhcdWIyZTQuCitfVUlfQ3JlYXRlU2libGluZ19kZXNjcmlwdGlvbj1cdWJkODBcdWJhYThcdWM3NTggXHVjMTIwXHVkMGRkXHViNDFjIHsyfVx1YzVkMFx1YzExYyB7MX0gXHVhZTMwXHViMmE1XHVjNWQwIFx1YjMwMFx1ZDU1YyBcdWQ2MTVcdWMyZGQgezB9XHVjNzU4IFx1YzBjOFx1Yjg1Y1x1YzZiNCBcdWQ2MTVcdWM4MWNcdWI5N2MgXHViOWNjXHViNGVkXHViMmM4XHViMmU0LgorX1VJX1Byb3BlcnR5RGVzY3JpcHRvcl9kZXNjcmlwdGlvbj17MX0gXHVjOTExIHswfQorX1VJX01hY2RvbmFsZFJvc3NEaXNlYXNlTW9kZWxfdHlwZT1cdWI5ZTVcdWIzYzRcdWIxMTBcdWI0ZGMgXHViODVjXHVjMmE0IFx1YzljOFx1YmNkMSBcdWJhYThcdWIzNzgKK19VSV9Vbmtub3duX3R5cGU9XHVhYzFjXHVjY2I0CitfVUlfVW5rbm93bl9kYXRhdHlwZT1cdWFjMTIKK19VSV9Vbmtub3duX2ZlYXR1cmU9XHVjOWMwXHVjODE1XHViNDE4XHVjOWMwIFx1YzU0YVx1Yzc0YworX1VJX01hY2RvbmFsZFJvc3NEaXNlYXNlTW9kZWxfdmVjdG9yUG9wdWxhdGlvbklkZW50aWZpZXJfZmVhdHVyZT1cdWJjYTFcdWQxMzAgXHVjNzc4XHVhZDZjIFx1YzJkZFx1YmNjNFx1Yzc5MAorX1VJX01hY2RvbmFsZFJvc3NEaXNlYXNlTW9kZWxfYml0aW5nUmF0ZV9mZWF0dXJlPVx1YWNlNFx1Y2RhOSBcdWFjMTBcdWM1ZmMgXHVjMThkXHViM2M0CitfVUlfTWFjZG9uYWxkUm9zc0Rpc2Vhc2VNb2RlbF9pbmZlY3Rpb3VzQml0aW5nUHJvcG9ydGlvbkh1bWFuX2ZlYXR1cmU9XHVhY2U0XHVjZGE5XHVjNzU4IFx1YWMxMFx1YzVmY1x1YzVkMCBcdWM3NThcdWQ1NWMgXHVjODA0XHVjNWZjXHVjNzI4IFx1Yzc3OFx1YWMwNCAKK19VSV9NYWNkb25hbGRSb3NzRGlzZWFzZU1vZGVsX2luZmVjdGlvdXNCaXRpbmdQcm9wb3J0aW9uVmVjdG9yX2ZlYXR1cmU9XHVhY2U0XHVjZGE5XHVjNzU4IFx1YWMxMFx1YzVmY1x1YzVkMCBcdWM3NThcdWQ1NWMgXHVjODA0XHVjNWZjXHVjNzI4IFx1YmNhMVx1ZDEzMAorX1VJX01hY2RvbmFsZFJvc3NEaXNlYXNlTW9kZWxfcmVjb3ZlcnlSYXRlX2ZlYXR1cmU9XHViY2Y1XHVhZDZjIFx1YzE4ZFx1YjNjNAorX1VJX01hY2RvbmFsZFJvc3NEaXNlYXNlTW9kZWxfdmVjdG9yTW9ydGFsaXR5UmF0ZV9mZWF0dXJlPVx1YmNhMVx1ZDEzMCBcdWMwYWNcdWI5ZGRcdWI5NjAKK19VSV9WZWN0b3JEaXNlYXNlTW9kZWxfdHlwZT1cdWM5YzhcdWJjZDEgXHViYWE4XHViMzc4CitfVUlfVmVjdG9yRGlzZWFzZU1vZGVsX3ZlY3RvclBvcHVsYXRpb25JZGVudGlmaWVyX2ZlYXR1cmU9XHViY2ExXHVkMTMwIFx1Yzc3OFx1YWQ2YyBcdWMyZGRcdWJjYzRcdWM3OTAKK19VSV9NYWNkb25hbGRSb3NzRGlzZWFzZU1vZGVsX2luY3ViYXRpb25SYXRlX2ZlYXR1cmU9XHViZDgwXHVkNjU0IFx1YzE4ZFx1YjNjNAorX1VJX01hY2RvbmFsZFJvc3NEaXNlYXNlTW9kZWxfdmVjdG9ySW5jdWJhdGlvblJhdGVfZmVhdHVyZT1cdWJjYTFcdWQxMzAgXHViZDgwXHVkNjU0IFx1YzE4ZFx1YjNjNAorX1VJX01hY2RvbmFsZFJvc3NEaXNlYXNlTW9kZWxfaW1tdW5pdHlMb3NzUmF0ZV9mZWF0dXJlPVx1YmE3NFx1YzVlZFx1YjgyNSBcdWMxOTBcdWMyZTRcdWM3MjgKK19VSV9EZW5ndWVNb2RlbF90eXBlPURlbmd1ZSBNb2RlbAorX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmxlX3R5cGU9RGVuZ3VlIE1vZGVsIEhvc3QgTGFibGUKK19VSV9EZW5ndWVNb2RlbEhvc3RMYWJsZVZhbHVlX3R5cGU9RGVuZ3VlIE1vZGVsIEhvc3QgTGFibGUgVmFsdWUKK19VSV9EZW5ndWVNb2RlbFZlY3RvckxhYmxlX3R5cGU9RGVuZ3VlIE1vZGVsIFZlY3RvciBMYWJsZQorX1VJX0Rlbmd1ZU1vZGVsVmVjdG9yTGFibGVWYWx1ZV90eXBlPURlbmd1ZSBNb2RlbCBWZWN0b3IgTGFibGUgVmFsdWUKK19VSV9EZW5ndWVNb2RlbEhvc3RMYWJsZVZhbHVlX0UxX2ZlYXR1cmU9RTEKK19VSV9EZW5ndWVNb2RlbEhvc3RMYWJsZVZhbHVlX0UyX2ZlYXR1cmU9RTIKK19VSV9EZW5ndWVNb2RlbEhvc3RMYWJsZVZhbHVlX0UzX2ZlYXR1cmU9RTMKK19VSV9EZW5ndWVNb2RlbEhvc3RMYWJsZVZhbHVlX0U0X2ZlYXR1cmU9RTQKK19VSV9EZW5ndWVNb2RlbEhvc3RMYWJsZVZhbHVlX0kxX2ZlYXR1cmU9STEKK19VSV9EZW5ndWVNb2RlbEhvc3RMYWJsZVZhbHVlX0kyX2ZlYXR1cmU9STIKK19VSV9EZW5ndWVNb2RlbEhvc3RMYWJsZVZhbHVlX0kzX2ZlYXR1cmU9STMKK19VSV9EZW5ndWVNb2RlbEhvc3RMYWJsZVZhbHVlX0k0X2ZlYXR1cmU9STQKK19VSV9EZW5ndWVNb2RlbEhvc3RMYWJsZVZhbHVlX1QxX2ZlYXR1cmU9VDEKK19VSV9EZW5ndWVNb2RlbEhvc3RMYWJsZVZhbHVlX1QyX2ZlYXR1cmU9VDIKK19VSV9EZW5ndWVNb2RlbEhvc3RMYWJsZVZhbHVlX1QzX2ZlYXR1cmU9VDMKK19VSV9EZW5ndWVNb2RlbEhvc3RMYWJsZVZhbHVlX1Q0X2ZlYXR1cmU9VDQKK19VSV9EZW5ndWVNb2RlbEhvc3RMYWJsZVZhbHVlX1IxX2ZlYXR1cmU9UjEKK19VSV9EZW5ndWVNb2RlbEhvc3RMYWJsZVZhbHVlX1IyX2ZlYXR1cmU9UjIKK19VSV9EZW5ndWVNb2RlbEhvc3RMYWJsZVZhbHVlX1IzX2ZlYXR1cmU9UjMKK19VSV9EZW5ndWVNb2RlbEhvc3RMYWJsZVZhbHVlX1I0X2ZlYXR1cmU9UjQKK19VSV9EZW5ndWVNb2RlbEhvc3RMYWJsZVZhbHVlX0UxMl9mZWF0dXJlPUUxMgorX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmxlVmFsdWVfRTEzX2ZlYXR1cmU9RTEzCitfVUlfRGVuZ3VlTW9kZWxIb3N0TGFibGVWYWx1ZV9FMTRfZmVhdHVyZT1FMTQKK19VSV9EZW5ndWVNb2RlbEhvc3RMYWJsZVZhbHVlX0UyMV9mZWF0dXJlPUUyMQorX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmxlVmFsdWVfRTIzX2ZlYXR1cmU9RTIzCitfVUlfRGVuZ3VlTW9kZWxIb3N0TGFibGVWYWx1ZV9FMjRfZmVhdHVyZT1FMjQKK19VSV9EZW5ndWVNb2RlbEhvc3RMYWJsZVZhbHVlX0UzMV9mZWF0dXJlPUUzMQorX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmxlVmFsdWVfRTMyX2ZlYXR1cmU9RTMyCitfVUlfRGVuZ3VlTW9kZWxIb3N0TGFibGVWYWx1ZV9FMzRfZmVhdHVyZT1FMzQKK19VSV9EZW5ndWVNb2RlbEhvc3RMYWJsZVZhbHVlX0U0MV9mZWF0dXJlPUU0MQorX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmxlVmFsdWVfRTQyX2ZlYXR1cmU9RTQyCitfVUlfRGVuZ3VlTW9kZWxIb3N0TGFibGVWYWx1ZV9FNDNfZmVhdHVyZT1FNDMKK19VSV9EZW5ndWVNb2RlbEhvc3RMYWJsZVZhbHVlX0kxMl9mZWF0dXJlPUkxMgorX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmxlVmFsdWVfSTEzX2ZlYXR1cmU9STEzCitfVUlfRGVuZ3VlTW9kZWxIb3N0TGFibGVWYWx1ZV9JMTRfZmVhdHVyZT1JMTQKK19VSV9EZW5ndWVNb2RlbEhvc3RMYWJsZVZhbHVlX0kyMV9mZWF0dXJlPUkyMQorX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmxlVmFsdWVfSTIzX2ZlYXR1cmU9STIzCitfVUlfRGVuZ3VlTW9kZWxIb3N0TGFibGVWYWx1ZV9JMjRfZmVhdHVyZT1JMjQKK19VSV9EZW5ndWVNb2RlbEhvc3RMYWJsZVZhbHVlX0kzMV9mZWF0dXJlPUkzMQorX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmxlVmFsdWVfSTMyX2ZlYXR1cmU9STMyCitfVUlfRGVuZ3VlTW9kZWxIb3N0TGFibGVWYWx1ZV9JMzRfZmVhdHVyZT1JMzQKK19VSV9EZW5ndWVNb2RlbEhvc3RMYWJsZVZhbHVlX0k0MV9mZWF0dXJlPUk0MQorX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmxlVmFsdWVfSTQyX2ZlYXR1cmU9STQyCitfVUlfRGVuZ3VlTW9kZWxIb3N0TGFibGVWYWx1ZV9JNDNfZmVhdHVyZT1JNDMKK19VSV9EZW5ndWVNb2RlbEhvc3RMYWJsZVZhbHVlX1JfZmVhdHVyZT1SCitfVUlfRGVuZ3VlTW9kZWxWZWN0b3JMYWJsZVZhbHVlX0UxX2ZlYXR1cmU9RTEKK19VSV9EZW5ndWVNb2RlbFZlY3RvckxhYmxlVmFsdWVfRTJfZmVhdHVyZT1FMgorX1VJX0Rlbmd1ZU1vZGVsVmVjdG9yTGFibGVWYWx1ZV9FM19mZWF0dXJlPUUzCitfVUlfRGVuZ3VlTW9kZWxWZWN0b3JMYWJsZVZhbHVlX0U0X2ZlYXR1cmU9RTQKK19VSV9EZW5ndWVNb2RlbFZlY3RvckxhYmxlVmFsdWVfSTFfZmVhdHVyZT1JMQorX1VJX0Rlbmd1ZU1vZGVsVmVjdG9yTGFibGVWYWx1ZV9JMl9mZWF0dXJlPUkyCitfVUlfRGVuZ3VlTW9kZWxWZWN0b3JMYWJsZVZhbHVlX0kzX2ZlYXR1cmU9STMKK19VSV9EZW5ndWVNb2RlbFZlY3RvckxhYmxlVmFsdWVfSTRfZmVhdHVyZT1JNAorX1VJX0Rlbmd1ZU1vZGVsX2V4cG9zdXJlUmF0ZTFfZmVhdHVyZT1FeHBvc3VyZSBSYXRlMQorX1VJX0Rlbmd1ZU1vZGVsX3RyYW5zbWlzc2lvblJhdGUxX2ZlYXR1cmU9VHJhbnNtaXNzaW9uIFJhdGUxCitfVUlfU2ltcGxlRGVuZ3VlTW9kZWxfdHlwZT1TaW1wbGUgRGVuZ3VlIE1vZGVsCitfVUlfU2ltcGxlRGVuZ3VlTW9kZWxfYml0aW5nUmF0ZV9mZWF0dXJlPVx1YWNlNFx1Y2RhOSBcdWFjMTBcdWM1ZmMgXHVjMThkXHViM2M0CitfVUlfU2ltcGxlRGVuZ3VlTW9kZWxfaG9zdEluZmVjdGl2aXR5MV9mZWF0dXJlPUhvc3QgSW5mZWN0aXZpdHkxCitfVUlfU2ltcGxlRGVuZ3VlTW9kZWxfaG9zdEluZmVjdGl2aXR5Ml9mZWF0dXJlPUhvc3QgSW5mZWN0aXZpdHkyCitfVUlfU2ltcGxlRGVuZ3VlTW9kZWxfaG9zdEluZmVjdGl2aXR5M19mZWF0dXJlPUhvc3QgSW5mZWN0aXZpdHkzCitfVUlfU2ltcGxlRGVuZ3VlTW9kZWxfaG9zdEluZmVjdGl2aXR5NF9mZWF0dXJlPUhvc3QgSW5mZWN0aXZpdHk0CitfVUlfU2ltcGxlRGVuZ3VlTW9kZWxfaG9zdFByaW1hcnlJbmN1YmF0aW9uUmF0ZV9mZWF0dXJlPUhvc3QgUHJpbWFyeSBJbmN1YmF0aW9uIFJhdGUKK19VSV9TaW1wbGVEZW5ndWVNb2RlbF9ob3N0UHJpbWFyeVJlY292ZXJ5UmF0ZV9mZWF0dXJlPUhvc3QgUHJpbWFyeSBSZWNvdmVyeSBSYXRlCitfVUlfU2ltcGxlRGVuZ3VlTW9kZWxfaG9zdFByaW1hcnlJbW11bml0eUxvc3NSYXRlX2ZlYXR1cmU9SG9zdCBQcmltYXJ5IEltbXVuaXR5IExvc3MgUmF0ZQorX1VJX1NpbXBsZURlbmd1ZU1vZGVsX2hvc3RQcmltYXJ5RGVhdGhSYXRlX2ZlYXR1cmU9SG9zdCBQcmltYXJ5IERlYXRoIFJhdGUKK19VSV9TaW1wbGVEZW5ndWVNb2RlbF9ob3N0QURFMV9mZWF0dXJlPUhvc3QgQURFMQorX1VJX1NpbXBsZURlbmd1ZU1vZGVsX2hvc3RBREUyX2ZlYXR1cmU9SG9zdCBBREUyCitfVUlfU2ltcGxlRGVuZ3VlTW9kZWxfaG9zdEFERTNfZmVhdHVyZT1Ib3N0IEFERTMKK19VSV9TaW1wbGVEZW5ndWVNb2RlbF9ob3N0QURFNF9mZWF0dXJlPUhvc3QgQURFNAorX1VJX1NpbXBsZURlbmd1ZU1vZGVsX2hvc3RTZWNvbmRhcnlJbmN1YmF0aW9uUmF0ZV9mZWF0dXJlPUhvc3QgU2Vjb25kYXJ5IEluY3ViYXRpb24gUmF0ZQorX1VJX1NpbXBsZURlbmd1ZU1vZGVsX2hvc3RTZWNvbmRhcnlSZWNvdmVyeVJhdGVfZmVhdHVyZT1Ib3N0IFNlY29uZGFyeSBSZWNvdmVyeSBSYXRlCitfVUlfU2ltcGxlRGVuZ3VlTW9kZWxfaG9zdFNlY29uZGFyeURlYXRoUmF0ZV9mZWF0dXJlPUhvc3QgU2Vjb25kYXJ5IERlYXRoIFJhdGUKK19VSV9TaW1wbGVEZW5ndWVNb2RlbF92ZWN0b3JJbmZlY3Rpdml0eTFfZmVhdHVyZT1WZWN0b3IgSW5mZWN0aXZpdHkxCitfVUlfU2ltcGxlRGVuZ3VlTW9kZWxfdmVjdG9ySW5mZWN0aXZpdHkyX2ZlYXR1cmU9VmVjdG9yIEluZmVjdGl2aXR5MgorX1VJX1NpbXBsZURlbmd1ZU1vZGVsX3ZlY3RvckluZmVjdGl2aXR5M19mZWF0dXJlPVZlY3RvciBJbmZlY3Rpdml0eTMKK19VSV9TaW1wbGVEZW5ndWVNb2RlbF92ZWN0b3JJbmZlY3Rpdml0eTRfZmVhdHVyZT1WZWN0b3IgSW5mZWN0aXZpdHk0CitfVUlfU2ltcGxlRGVuZ3VlTW9kZWxfdmVjdG9yQURFMV9mZWF0dXJlPVZlY3RvciBBREUxCitfVUlfU2ltcGxlRGVuZ3VlTW9kZWxfdmVjdG9yQURFMl9mZWF0dXJlPVZlY3RvciBBREUyCitfVUlfU2ltcGxlRGVuZ3VlTW9kZWxfdmVjdG9yQURFM19mZWF0dXJlPVZlY3RvciBBREUzCitfVUlfU2ltcGxlRGVuZ3VlTW9kZWxfdmVjdG9yQURFNF9mZWF0dXJlPVZlY3RvciBBREU0CitfVUlfU2ltcGxlRGVuZ3VlTW9kZWxfdmVjdG9ySW5jdWJhdGlvblJhdGVfZmVhdHVyZT1cdWJjYTFcdWQxMzAgXHViZDgwXHVkNjU0IFx1YzE4ZFx1YjNjNAorX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmxlVmFsdWVfaW5jaWRlbmNlMV9mZWF0dXJlPUluY2lkZW5jZTEKK19VSV9EZW5ndWVNb2RlbEhvc3RMYWJsZVZhbHVlX2luY2lkZW5jZTJfZmVhdHVyZT1JbmNpZGVuY2UyCitfVUlfRGVuZ3VlTW9kZWxIb3N0TGFibGVWYWx1ZV9pbmNpZGVuY2UzX2ZlYXR1cmU9SW5jaWRlbmNlMworX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmxlVmFsdWVfaW5jaWRlbmNlNF9mZWF0dXJlPUluY2lkZW5jZTQKK19VSV9EZW5ndWVNb2RlbEhvc3RMYWJsZVZhbHVlX2luY2lkZW5jZTEyX2ZlYXR1cmU9SW5jaWRlbmNlMTIKK19VSV9EZW5ndWVNb2RlbEhvc3RMYWJsZVZhbHVlX2luY2lkZW5jZTIxX2ZlYXR1cmU9SW5jaWRlbmNlMjEKK19VSV9EZW5ndWVNb2RlbEhvc3RMYWJsZVZhbHVlX2luY2lkZW5jZTMxX2ZlYXR1cmU9SW5jaWRlbmNlMzEKK19VSV9EZW5ndWVNb2RlbEhvc3RMYWJsZVZhbHVlX2luY2lkZW5jZTQxX2ZlYXR1cmU9SW5jaWRlbmNlNDEKK19VSV9EZW5ndWVNb2RlbEhvc3RMYWJsZVZhbHVlX2luY2lkZW5jZTEzX2ZlYXR1cmU9SW5jaWRlbmNlMTMKK19VSV9EZW5ndWVNb2RlbEhvc3RMYWJsZVZhbHVlX2luY2lkZW5jZTIzX2ZlYXR1cmU9SW5jaWRlbmNlMjMKK19VSV9EZW5ndWVNb2RlbEhvc3RMYWJsZVZhbHVlX2luY2lkZW5jZTMyX2ZlYXR1cmU9SW5jaWRlbmNlMzIKK19VSV9EZW5ndWVNb2RlbEhvc3RMYWJsZVZhbHVlX2luY2lkZW5jZTQyX2ZlYXR1cmU9SW5jaWRlbmNlNDIKK19VSV9EZW5ndWVNb2RlbEhvc3RMYWJsZVZhbHVlX2luY2lkZW5jZTE0X2ZlYXR1cmU9SW5jaWRlbmNlMTQKK19VSV9EZW5ndWVNb2RlbEhvc3RMYWJsZVZhbHVlX2luY2lkZW5jZTI0X2ZlYXR1cmU9SW5jaWRlbmNlMjQKK19VSV9EZW5ndWVNb2RlbEhvc3RMYWJsZVZhbHVlX2luY2lkZW5jZTM0X2ZlYXR1cmU9SW5jaWRlbmNlMzQKK19VSV9EZW5ndWVNb2RlbEhvc3RMYWJsZVZhbHVlX2luY2lkZW5jZTQzX2ZlYXR1cmU9SW5jaWRlbmNlNDMKK19VSV9EZW5ndWVNb2RlbEhvc3RMYWJsZVZhbHVlX2RlYXRoczFfZmVhdHVyZT1EZWF0aHMxCitfVUlfRGVuZ3VlTW9kZWxIb3N0TGFibGVWYWx1ZV9kZWF0aHMyX2ZlYXR1cmU9RGVhdGhzMgorX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmxlVmFsdWVfZGVhdGhzM19mZWF0dXJlPURlYXRoczMKK19VSV9EZW5ndWVNb2RlbEhvc3RMYWJsZVZhbHVlX2RlYXRoczRfZmVhdHVyZT1EZWF0aHM0CitfVUlfRGVuZ3VlTW9kZWxIb3N0TGFibGVWYWx1ZV9kZWF0aHMxMl9mZWF0dXJlPURlYXRoczEyCitfVUlfRGVuZ3VlTW9kZWxIb3N0TGFibGVWYWx1ZV9kZWF0aHMyMV9mZWF0dXJlPURlYXRoczIxCitfVUlfRGVuZ3VlTW9kZWxIb3N0TGFibGVWYWx1ZV9kZWF0aHMzMV9mZWF0dXJlPURlYXRoczMxCitfVUlfRGVuZ3VlTW9kZWxIb3N0TGFibGVWYWx1ZV9kZWF0aHM0MV9mZWF0dXJlPURlYXRoczQxCitfVUlfRGVuZ3VlTW9kZWxIb3N0TGFibGVWYWx1ZV9kZWF0aHMxM19mZWF0dXJlPURlYXRoczEzCitfVUlfRGVuZ3VlTW9kZWxIb3N0TGFibGVWYWx1ZV9kZWF0aHMyM19mZWF0dXJlPURlYXRoczIzCitfVUlfRGVuZ3VlTW9kZWxIb3N0TGFibGVWYWx1ZV9kZWF0aHMzMl9mZWF0dXJlPURlYXRoczMyCitfVUlfRGVuZ3VlTW9kZWxIb3N0TGFibGVWYWx1ZV9kZWF0aHM0Ml9mZWF0dXJlPURlYXRoczQyCitfVUlfRGVuZ3VlTW9kZWxIb3N0TGFibGVWYWx1ZV9kZWF0aHMxNF9mZWF0dXJlPURlYXRoczE0CitfVUlfRGVuZ3VlTW9kZWxIb3N0TGFibGVWYWx1ZV9kZWF0aHMyNF9mZWF0dXJlPURlYXRoczI0CitfVUlfRGVuZ3VlTW9kZWxIb3N0TGFibGVWYWx1ZV9kZWF0aHMzNF9mZWF0dXJlPURlYXRoczM0CitfVUlfRGVuZ3VlTW9kZWxIb3N0TGFibGVWYWx1ZV9kZWF0aHM0M19mZWF0dXJlPURlYXRoczQzCitfVUlfRGVuZ3VlTW9kZWxIb3N0TGFiZWxfdHlwZT1EZW5ndWUgTW9kZWwgSG9zdCBMYWJlbAorX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfdHlwZT1EZW5ndWUgTW9kZWwgSG9zdCBMYWJlbCBWYWx1ZQorX1VJX0Rlbmd1ZU1vZGVsVmVjdG9yTGFiZWxfdHlwZT1EZW5ndWUgTW9kZWwgVmVjdG9yIExhYmVsCitfVUlfRGVuZ3VlTW9kZWxWZWN0b3JMYWJlbFZhbHVlX3R5cGU9RGVuZ3VlIE1vZGVsIFZlY3RvciBMYWJlbCBWYWx1ZQorX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfRTFfZmVhdHVyZT1FMQorX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfRTJfZmVhdHVyZT1FMgorX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfRTNfZmVhdHVyZT1FMworX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfRTRfZmVhdHVyZT1FNAorX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfSTFfZmVhdHVyZT1JMQorX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfSTJfZmVhdHVyZT1JMgorX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfSTNfZmVhdHVyZT1JMworX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfSTRfZmVhdHVyZT1JNAorX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfVDFfZmVhdHVyZT1UMQorX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfVDJfZmVhdHVyZT1UMgorX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfVDNfZmVhdHVyZT1UMworX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfVDRfZmVhdHVyZT1UNAorX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfUjFfZmVhdHVyZT1SMQorX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfUjJfZmVhdHVyZT1SMgorX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfUjNfZmVhdHVyZT1SMworX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfUjRfZmVhdHVyZT1SNAorX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfRTEyX2ZlYXR1cmU9RTEyCitfVUlfRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9FMTNfZmVhdHVyZT1FMTMKK19VSV9EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX0UxNF9mZWF0dXJlPUUxNAorX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfRTIxX2ZlYXR1cmU9RTIxCitfVUlfRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9FMjNfZmVhdHVyZT1FMjMKK19VSV9EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX0UyNF9mZWF0dXJlPUUyNAorX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfRTMxX2ZlYXR1cmU9RTMxCitfVUlfRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9FMzJfZmVhdHVyZT1FMzIKK19VSV9EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX0UzNF9mZWF0dXJlPUUzNAorX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfRTQxX2ZlYXR1cmU9RTQxCitfVUlfRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9FNDJfZmVhdHVyZT1FNDIKK19VSV9EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX0U0M19mZWF0dXJlPUU0MworX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfSTEyX2ZlYXR1cmU9STEyCitfVUlfRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9JMTNfZmVhdHVyZT1JMTMKK19VSV9EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX0kxNF9mZWF0dXJlPUkxNAorX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfSTIxX2ZlYXR1cmU9STIxCitfVUlfRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9JMjNfZmVhdHVyZT1JMjMKK19VSV9EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX0kyNF9mZWF0dXJlPUkyNAorX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfSTMxX2ZlYXR1cmU9STMxCitfVUlfRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9JMzJfZmVhdHVyZT1JMzIKK19VSV9EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX0kzNF9mZWF0dXJlPUkzNAorX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfSTQxX2ZlYXR1cmU9STQxCitfVUlfRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9JNDJfZmVhdHVyZT1JNDIKK19VSV9EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX0k0M19mZWF0dXJlPUk0MworX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfUl9mZWF0dXJlPVIKK19VSV9EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX2luY2lkZW5jZTFfZmVhdHVyZT1JbmNpZGVuY2UxCitfVUlfRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9pbmNpZGVuY2UyX2ZlYXR1cmU9SW5jaWRlbmNlMgorX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfaW5jaWRlbmNlM19mZWF0dXJlPUluY2lkZW5jZTMKK19VSV9EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX2luY2lkZW5jZTRfZmVhdHVyZT1JbmNpZGVuY2U0CitfVUlfRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9pbmNpZGVuY2UxMl9mZWF0dXJlPUluY2lkZW5jZTEyCitfVUlfRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9pbmNpZGVuY2UyMV9mZWF0dXJlPUluY2lkZW5jZTIxCitfVUlfRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9pbmNpZGVuY2UzMV9mZWF0dXJlPUluY2lkZW5jZTMxCitfVUlfRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9pbmNpZGVuY2U0MV9mZWF0dXJlPUluY2lkZW5jZTQxCitfVUlfRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9pbmNpZGVuY2UxM19mZWF0dXJlPUluY2lkZW5jZTEzCitfVUlfRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9pbmNpZGVuY2UyM19mZWF0dXJlPUluY2lkZW5jZTIzCitfVUlfRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9pbmNpZGVuY2UzMl9mZWF0dXJlPUluY2lkZW5jZTMyCitfVUlfRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9pbmNpZGVuY2U0Ml9mZWF0dXJlPUluY2lkZW5jZTQyCitfVUlfRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9pbmNpZGVuY2UxNF9mZWF0dXJlPUluY2lkZW5jZTE0CitfVUlfRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9pbmNpZGVuY2UyNF9mZWF0dXJlPUluY2lkZW5jZTI0CitfVUlfRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9pbmNpZGVuY2UzNF9mZWF0dXJlPUluY2lkZW5jZTM0CitfVUlfRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9pbmNpZGVuY2U0M19mZWF0dXJlPUluY2lkZW5jZTQzCitfVUlfRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9kZWF0aHMxX2ZlYXR1cmU9RGVhdGhzMQorX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfZGVhdGhzMl9mZWF0dXJlPURlYXRoczIKK19VSV9EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX2RlYXRoczNfZmVhdHVyZT1EZWF0aHMzCitfVUlfRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9kZWF0aHM0X2ZlYXR1cmU9RGVhdGhzNAorX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfZGVhdGhzMTJfZmVhdHVyZT1EZWF0aHMxMgorX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfZGVhdGhzMjFfZmVhdHVyZT1EZWF0aHMyMQorX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfZGVhdGhzMzFfZmVhdHVyZT1EZWF0aHMzMQorX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfZGVhdGhzNDFfZmVhdHVyZT1EZWF0aHM0MQorX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfZGVhdGhzMTNfZmVhdHVyZT1EZWF0aHMxMworX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfZGVhdGhzMjNfZmVhdHVyZT1EZWF0aHMyMworX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfZGVhdGhzMzJfZmVhdHVyZT1EZWF0aHMzMgorX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfZGVhdGhzNDJfZmVhdHVyZT1EZWF0aHM0MgorX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfZGVhdGhzMTRfZmVhdHVyZT1EZWF0aHMxNAorX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfZGVhdGhzMjRfZmVhdHVyZT1EZWF0aHMyNAorX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfZGVhdGhzMzRfZmVhdHVyZT1EZWF0aHMzNAorX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfZGVhdGhzNDNfZmVhdHVyZT1EZWF0aHM0MworX1VJX0Rlbmd1ZU1vZGVsVmVjdG9yTGFiZWxWYWx1ZV9FMV9mZWF0dXJlPUUxCitfVUlfRGVuZ3VlTW9kZWxWZWN0b3JMYWJlbFZhbHVlX0UyX2ZlYXR1cmU9RTIKK19VSV9EZW5ndWVNb2RlbFZlY3RvckxhYmVsVmFsdWVfRTNfZmVhdHVyZT1FMworX1VJX0Rlbmd1ZU1vZGVsVmVjdG9yTGFiZWxWYWx1ZV9FNF9mZWF0dXJlPUU0CitfVUlfRGVuZ3VlTW9kZWxWZWN0b3JMYWJlbFZhbHVlX0kxX2ZlYXR1cmU9STEKK19VSV9EZW5ndWVNb2RlbFZlY3RvckxhYmVsVmFsdWVfSTJfZmVhdHVyZT1JMgorX1VJX0Rlbmd1ZU1vZGVsVmVjdG9yTGFiZWxWYWx1ZV9JM19mZWF0dXJlPUkzCitfVUlfRGVuZ3VlTW9kZWxWZWN0b3JMYWJlbFZhbHVlX0k0X2ZlYXR1cmU9STQKK19VSV9EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX2Rpc2Vhc2VEZWF0aHMxX2ZlYXR1cmU9RGlzZWFzZSBEZWF0aHMxCitfVUlfRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9kaXNlYXNlRGVhdGhzMl9mZWF0dXJlPURpc2Vhc2UgRGVhdGhzMgorX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfZGlzZWFzZURlYXRoczNfZmVhdHVyZT1EaXNlYXNlIERlYXRoczMKK19VSV9EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX2Rpc2Vhc2VEZWF0aHM0X2ZlYXR1cmU9RGlzZWFzZSBEZWF0aHM0CitfVUlfRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9kaXNlYXNlRGVhdGhzMTJfZmVhdHVyZT1EaXNlYXNlIERlYXRoczEyCitfVUlfRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9kaXNlYXNlRGVhdGhzMjFfZmVhdHVyZT1EaXNlYXNlIERlYXRoczIxCitfVUlfRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9kaXNlYXNlRGVhdGhzMzFfZmVhdHVyZT1EaXNlYXNlIERlYXRoczMxCitfVUlfRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9kaXNlYXNlRGVhdGhzNDFfZmVhdHVyZT1EaXNlYXNlIERlYXRoczQxCitfVUlfRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9kaXNlYXNlRGVhdGhzMTNfZmVhdHVyZT1EaXNlYXNlIERlYXRoczEzCitfVUlfRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9kaXNlYXNlRGVhdGhzMjNfZmVhdHVyZT1EaXNlYXNlIERlYXRoczIzCitfVUlfRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9kaXNlYXNlRGVhdGhzMzJfZmVhdHVyZT1EaXNlYXNlIERlYXRoczMyCitfVUlfRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9kaXNlYXNlRGVhdGhzNDJfZmVhdHVyZT1EaXNlYXNlIERlYXRoczQyCitfVUlfRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9kaXNlYXNlRGVhdGhzMTRfZmVhdHVyZT1EaXNlYXNlIERlYXRoczE0CitfVUlfRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9kaXNlYXNlRGVhdGhzMjRfZmVhdHVyZT1EaXNlYXNlIERlYXRoczI0CitfVUlfRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9kaXNlYXNlRGVhdGhzMzRfZmVhdHVyZT1EaXNlYXNlIERlYXRoczM0CitfVUlfRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9kaXNlYXNlRGVhdGhzNDNfZmVhdHVyZT1EaXNlYXNlIERlYXRoczQzCitfVUlfRGVuZ3VlTW9kZWxWZWN0b3JMYWJlbFZhbHVlX2luY2lkZW5jZTFfZmVhdHVyZT1JbmNpZGVuY2UxCitfVUlfRGVuZ3VlTW9kZWxWZWN0b3JMYWJlbFZhbHVlX2luY2lkZW5jZTJfZmVhdHVyZT1JbmNpZGVuY2UyCitfVUlfRGVuZ3VlTW9kZWxWZWN0b3JMYWJlbFZhbHVlX2luY2lkZW5jZTNfZmVhdHVyZT1JbmNpZGVuY2UzCitfVUlfRGVuZ3VlTW9kZWxWZWN0b3JMYWJlbFZhbHVlX2luY2lkZW5jZTRfZmVhdHVyZT1JbmNpZGVuY2U0CitfVUlfRGVuZ3VlTW9kZWxfYml0aW5nUmF0ZVNWX2ZlYXR1cmU9Qml0aW5nIFJhdGUgU1YKK19VSV9EZW5ndWVNb2RlbF9iaXRpbmdSYXRlSVZfZmVhdHVyZT1CaXRpbmcgUmF0ZSBJVgorX1VJX0Rlbmd1ZU1vZGVsX2hvc3RJbmZlY3Rpdml0eTFfZmVhdHVyZT1Ib3N0IEluZmVjdGl2aXR5MQorX1VJX0Rlbmd1ZU1vZGVsX2hvc3RJbmZlY3Rpdml0eTJfZmVhdHVyZT1Ib3N0IEluZmVjdGl2aXR5MgorX1VJX0Rlbmd1ZU1vZGVsX2hvc3RJbmZlY3Rpdml0eTNfZmVhdHVyZT1Ib3N0IEluZmVjdGl2aXR5MworX1VJX0Rlbmd1ZU1vZGVsX2hvc3RJbmZlY3Rpdml0eTRfZmVhdHVyZT1Ib3N0IEluZmVjdGl2aXR5NAorX1VJX0Rlbmd1ZU1vZGVsX2hvc3RQcmltYXJ5SW5jdWJhdGlvblJhdGUxX2ZlYXR1cmU9SG9zdCBQcmltYXJ5IEluY3ViYXRpb24gUmF0ZTEKK19VSV9EZW5ndWVNb2RlbF9ob3N0UHJpbWFyeUluY3ViYXRpb25SYXRlMl9mZWF0dXJlPUhvc3QgUHJpbWFyeSBJbmN1YmF0aW9uIFJhdGUyCitfVUlfRGVuZ3VlTW9kZWxfaG9zdFByaW1hcnlJbmN1YmF0aW9uUmF0ZTNfZmVhdHVyZT1Ib3N0IFByaW1hcnkgSW5jdWJhdGlvbiBSYXRlMworX1VJX0Rlbmd1ZU1vZGVsX2hvc3RQcmltYXJ5SW5jdWJhdGlvblJhdGU0X2ZlYXR1cmU9SG9zdCBQcmltYXJ5IEluY3ViYXRpb24gUmF0ZTQKK19VSV9EZW5ndWVNb2RlbF9ob3N0UHJpbWFyeVJlY292ZXJ5UmF0ZTFfZmVhdHVyZT1Ib3N0IFByaW1hcnkgUmVjb3ZlcnkgUmF0ZTEKK19VSV9EZW5ndWVNb2RlbF9ob3N0UHJpbWFyeVJlY292ZXJ5UmF0ZTJfZmVhdHVyZT1Ib3N0IFByaW1hcnkgUmVjb3ZlcnkgUmF0ZTIKK19VSV9EZW5ndWVNb2RlbF9ob3N0UHJpbWFyeVJlY292ZXJ5UmF0ZTNfZmVhdHVyZT1Ib3N0IFByaW1hcnkgUmVjb3ZlcnkgUmF0ZTMKK19VSV9EZW5ndWVNb2RlbF9ob3N0UHJpbWFyeVJlY292ZXJ5UmF0ZTRfZmVhdHVyZT1Ib3N0IFByaW1hcnkgUmVjb3ZlcnkgUmF0ZTQKK19VSV9EZW5ndWVNb2RlbF9ob3N0UHJpbWFyeUltbXVuaXR5TG9zc1JhdGUxX2ZlYXR1cmU9SG9zdCBQcmltYXJ5IEltbXVuaXR5IExvc3MgUmF0ZTEKK19VSV9EZW5ndWVNb2RlbF9ob3N0UHJpbWFyeUltbXVuaXR5TG9zc1JhdGUyX2ZlYXR1cmU9SG9zdCBQcmltYXJ5IEltbXVuaXR5IExvc3MgUmF0ZTIKK19VSV9EZW5ndWVNb2RlbF9ob3N0UHJpbWFyeUltbXVuaXR5TG9zc1JhdGUzX2ZlYXR1cmU9SG9zdCBQcmltYXJ5IEltbXVuaXR5IExvc3MgUmF0ZTMKK19VSV9EZW5ndWVNb2RlbF9ob3N0UHJpbWFyeUltbXVuaXR5TG9zc1JhdGU0X2ZlYXR1cmU9SG9zdCBQcmltYXJ5IEltbXVuaXR5IExvc3MgUmF0ZTQKK19VSV9EZW5ndWVNb2RlbF9ob3N0UHJpbWFyeURpc2Vhc2VEZWF0aFJhdGUxX2ZlYXR1cmU9SG9zdCBQcmltYXJ5IERpc2Vhc2UgRGVhdGggUmF0ZTEKK19VSV9EZW5ndWVNb2RlbF9ob3N0UHJpbWFyeURpc2Vhc2VEZWF0aFJhdGUyX2ZlYXR1cmU9SG9zdCBQcmltYXJ5IERpc2Vhc2UgRGVhdGggUmF0ZTIKK19VSV9EZW5ndWVNb2RlbF9ob3N0UHJpbWFyeURpc2Vhc2VEZWF0aFJhdGUzX2ZlYXR1cmU9SG9zdCBQcmltYXJ5IERpc2Vhc2UgRGVhdGggUmF0ZTMKK19VSV9EZW5ndWVNb2RlbF9ob3N0UHJpbWFyeURpc2Vhc2VEZWF0aFJhdGU0X2ZlYXR1cmU9SG9zdCBQcmltYXJ5IERpc2Vhc2UgRGVhdGggUmF0ZTQKK19VSV9EZW5ndWVNb2RlbF9ob3N0QURFMTJfZmVhdHVyZT1Ib3N0IEFERTEyCitfVUlfRGVuZ3VlTW9kZWxfaG9zdEFERTEzX2ZlYXR1cmU9SG9zdCBBREUxMworX1VJX0Rlbmd1ZU1vZGVsX2hvc3RBREUxNF9mZWF0dXJlPUhvc3QgQURFMTQKK19VSV9EZW5ndWVNb2RlbF9ob3N0QURFMjFfZmVhdHVyZT1Ib3N0IEFERTIxCitfVUlfRGVuZ3VlTW9kZWxfaG9zdEFERTIzX2ZlYXR1cmU9SG9zdCBBREUyMworX1VJX0Rlbmd1ZU1vZGVsX2hvc3RBREUyNF9mZWF0dXJlPUhvc3QgQURFMjQKK19VSV9EZW5ndWVNb2RlbF9ob3N0QURFMzFfZmVhdHVyZT1Ib3N0IEFERTMxCitfVUlfRGVuZ3VlTW9kZWxfaG9zdEFERTMyX2ZlYXR1cmU9SG9zdCBBREUzMgorX1VJX0Rlbmd1ZU1vZGVsX2hvc3RBREUzNF9mZWF0dXJlPUhvc3QgQURFMzQKK19VSV9EZW5ndWVNb2RlbF9ob3N0QURFNDFfZmVhdHVyZT1Ib3N0IEFERTQxCitfVUlfRGVuZ3VlTW9kZWxfaG9zdEFERTQyX2ZlYXR1cmU9SG9zdCBBREU0MgorX1VJX0Rlbmd1ZU1vZGVsX2hvc3RBREU0M19mZWF0dXJlPUhvc3QgQURFNDMKK19VSV9EZW5ndWVNb2RlbF9ob3N0U2Vjb25kYXJ5RGlzZWFzZURlYXRoUmF0ZTEyX2ZlYXR1cmU9SG9zdCBTZWNvbmRhcnkgRGlzZWFzZSBEZWF0aCBSYXRlMTIKK19VSV9EZW5ndWVNb2RlbF9ob3N0U2Vjb25kYXJ5RGlzZWFzZURlYXRoUmF0ZTEzX2ZlYXR1cmU9SG9zdCBTZWNvbmRhcnkgRGlzZWFzZSBEZWF0aCBSYXRlMTMKK19VSV9EZW5ndWVNb2RlbF9ob3N0U2Vjb25kYXJ5RGlzZWFzZURlYXRoUmF0ZTE0X2ZlYXR1cmU9SG9zdCBTZWNvbmRhcnkgRGlzZWFzZSBEZWF0aCBSYXRlMTQKK19VSV9EZW5ndWVNb2RlbF9ob3N0U2Vjb25kYXJ5RGlzZWFzZURlYXRoUmF0ZTIxX2ZlYXR1cmU9SG9zdCBTZWNvbmRhcnkgRGlzZWFzZSBEZWF0aCBSYXRlMjEKK19VSV9EZW5ndWVNb2RlbF9ob3N0U2Vjb25kYXJ5RGlzZWFzZURlYXRoUmF0ZTIzX2ZlYXR1cmU9SG9zdCBTZWNvbmRhcnkgRGlzZWFzZSBEZWF0aCBSYXRlMjMKK19VSV9EZW5ndWVNb2RlbF9ob3N0U2Vjb25kYXJ5RGlzZWFzZURlYXRoUmF0ZTI0X2ZlYXR1cmU9SG9zdCBTZWNvbmRhcnkgRGlzZWFzZSBEZWF0aCBSYXRlMjQKK19VSV9EZW5ndWVNb2RlbF9ob3N0U2Vjb25kYXJ5RGlzZWFzZURlYXRoUmF0ZTMxX2ZlYXR1cmU9SG9zdCBTZWNvbmRhcnkgRGlzZWFzZSBEZWF0aCBSYXRlMzEKK19VSV9EZW5ndWVNb2RlbF9ob3N0U2Vjb25kYXJ5RGlzZWFzZURlYXRoUmF0ZTMyX2ZlYXR1cmU9SG9zdCBTZWNvbmRhcnkgRGlzZWFzZSBEZWF0aCBSYXRlMzIKK19VSV9EZW5ndWVNb2RlbF9ob3N0U2Vjb25kYXJ5RGlzZWFzZURlYXRoUmF0ZTM0X2ZlYXR1cmU9SG9zdCBTZWNvbmRhcnkgRGlzZWFzZSBEZWF0aCBSYXRlMzQKK19VSV9EZW5ndWVNb2RlbF9ob3N0U2Vjb25kYXJ5RGlzZWFzZURlYXRoUmF0ZTQxX2ZlYXR1cmU9SG9zdCBTZWNvbmRhcnkgRGlzZWFzZSBEZWF0aCBSYXRlNDEKK19VSV9EZW5ndWVNb2RlbF9ob3N0U2Vjb25kYXJ5RGlzZWFzZURlYXRoUmF0ZTQyX2ZlYXR1cmU9SG9zdCBTZWNvbmRhcnkgRGlzZWFzZSBEZWF0aCBSYXRlNDIKK19VSV9EZW5ndWVNb2RlbF9ob3N0U2Vjb25kYXJ5RGlzZWFzZURlYXRoUmF0ZTQzX2ZlYXR1cmU9SG9zdCBTZWNvbmRhcnkgRGlzZWFzZSBEZWF0aCBSYXRlNDMKK19VSV9EZW5ndWVNb2RlbF9ob3N0U2Vjb25kYXJ5UmVjb3ZlcnlSYXRlMTJfZmVhdHVyZT1Ib3N0IFNlY29uZGFyeSBSZWNvdmVyeSBSYXRlMTIKK19VSV9EZW5ndWVNb2RlbF9ob3N0U2Vjb25kYXJ5UmVjb3ZlcnlSYXRlMTNfZmVhdHVyZT1Ib3N0IFNlY29uZGFyeSBSZWNvdmVyeSBSYXRlMTMKK19VSV9EZW5ndWVNb2RlbF9ob3N0U2Vjb25kYXJ5UmVjb3ZlcnlSYXRlMTRfZmVhdHVyZT1Ib3N0IFNlY29uZGFyeSBSZWNvdmVyeSBSYXRlMTQKK19VSV9EZW5ndWVNb2RlbF9ob3N0U2Vjb25kYXJ5UmVjb3ZlcnlSYXRlMjFfZmVhdHVyZT1Ib3N0IFNlY29uZGFyeSBSZWNvdmVyeSBSYXRlMjEKK19VSV9EZW5ndWVNb2RlbF9ob3N0U2Vjb25kYXJ5UmVjb3ZlcnlSYXRlMjNfZmVhdHVyZT1Ib3N0IFNlY29uZGFyeSBSZWNvdmVyeSBSYXRlMjMKK19VSV9EZW5ndWVNb2RlbF9ob3N0U2Vjb25kYXJ5UmVjb3ZlcnlSYXRlMjRfZmVhdHVyZT1Ib3N0IFNlY29uZGFyeSBSZWNvdmVyeSBSYXRlMjQKK19VSV9EZW5ndWVNb2RlbF9ob3N0U2Vjb25kYXJ5UmVjb3ZlcnlSYXRlMzFfZmVhdHVyZT1Ib3N0IFNlY29uZGFyeSBSZWNvdmVyeSBSYXRlMzEKK19VSV9EZW5ndWVNb2RlbF9ob3N0U2Vjb25kYXJ5UmVjb3ZlcnlSYXRlMzJfZmVhdHVyZT1Ib3N0IFNlY29uZGFyeSBSZWNvdmVyeSBSYXRlMzIKK19VSV9EZW5ndWVNb2RlbF9ob3N0U2Vjb25kYXJ5UmVjb3ZlcnlSYXRlMzRfZmVhdHVyZT1Ib3N0IFNlY29uZGFyeSBSZWNvdmVyeSBSYXRlMzQKK19VSV9EZW5ndWVNb2RlbF9ob3N0U2Vjb25kYXJ5UmVjb3ZlcnlSYXRlNDFfZmVhdHVyZT1Ib3N0IFNlY29uZGFyeSBSZWNvdmVyeSBSYXRlNDEKK19VSV9EZW5ndWVNb2RlbF9ob3N0U2Vjb25kYXJ5UmVjb3ZlcnlSYXRlNDJfZmVhdHVyZT1Ib3N0IFNlY29uZGFyeSBSZWNvdmVyeSBSYXRlNDIKK19VSV9EZW5ndWVNb2RlbF9ob3N0U2Vjb25kYXJ5UmVjb3ZlcnlSYXRlNDNfZmVhdHVyZT1Ib3N0IFNlY29uZGFyeSBSZWNvdmVyeSBSYXRlNDMKK19VSV9EZW5ndWVNb2RlbF9ob3N0U2Vjb25kYXJ5SW5jdWJhdGlvblJhdGUxMl9mZWF0dXJlPUhvc3QgU2Vjb25kYXJ5IEluY3ViYXRpb24gUmF0ZTEyCitfVUlfRGVuZ3VlTW9kZWxfaG9zdFNlY29uZGFyeUluY3ViYXRpb25SYXRlMTNfZmVhdHVyZT1Ib3N0IFNlY29uZGFyeSBJbmN1YmF0aW9uIFJhdGUxMworX1VJX0Rlbmd1ZU1vZGVsX2hvc3RTZWNvbmRhcnlJbmN1YmF0aW9uUmF0ZTE0X2ZlYXR1cmU9SG9zdCBTZWNvbmRhcnkgSW5jdWJhdGlvbiBSYXRlMTQKK19VSV9EZW5ndWVNb2RlbF9ob3N0U2Vjb25kYXJ5SW5jdWJhdGlvblJhdGUyMV9mZWF0dXJlPUhvc3QgU2Vjb25kYXJ5IEluY3ViYXRpb24gUmF0ZTIxCitfVUlfRGVuZ3VlTW9kZWxfaG9zdFNlY29uZGFyeUluY3ViYXRpb25SYXRlMjNfZmVhdHVyZT1Ib3N0IFNlY29uZGFyeSBJbmN1YmF0aW9uIFJhdGUyMworX1VJX0Rlbmd1ZU1vZGVsX2hvc3RTZWNvbmRhcnlJbmN1YmF0aW9uUmF0ZTI0X2ZlYXR1cmU9SG9zdCBTZWNvbmRhcnkgSW5jdWJhdGlvbiBSYXRlMjQKK19VSV9EZW5ndWVNb2RlbF9ob3N0U2Vjb25kYXJ5SW5jdWJhdGlvblJhdGUzMV9mZWF0dXJlPUhvc3QgU2Vjb25kYXJ5IEluY3ViYXRpb24gUmF0ZTMxCitfVUlfRGVuZ3VlTW9kZWxfaG9zdFNlY29uZGFyeUluY3ViYXRpb25SYXRlMzJfZmVhdHVyZT1Ib3N0IFNlY29uZGFyeSBJbmN1YmF0aW9uIFJhdGUzMgorX1VJX0Rlbmd1ZU1vZGVsX2hvc3RTZWNvbmRhcnlJbmN1YmF0aW9uUmF0ZTM0X2ZlYXR1cmU9SG9zdCBTZWNvbmRhcnkgSW5jdWJhdGlvbiBSYXRlMzQKK19VSV9EZW5ndWVNb2RlbF9ob3N0U2Vjb25kYXJ5SW5jdWJhdGlvblJhdGU0MV9mZWF0dXJlPUhvc3QgU2Vjb25kYXJ5IEluY3ViYXRpb24gUmF0ZTQxCitfVUlfRGVuZ3VlTW9kZWxfaG9zdFNlY29uZGFyeUluY3ViYXRpb25SYXRlNDJfZmVhdHVyZT1Ib3N0IFNlY29uZGFyeSBJbmN1YmF0aW9uIFJhdGU0MgorX1VJX0Rlbmd1ZU1vZGVsX2hvc3RTZWNvbmRhcnlJbmN1YmF0aW9uUmF0ZTQzX2ZlYXR1cmU9SG9zdCBTZWNvbmRhcnkgSW5jdWJhdGlvbiBSYXRlNDMKK19VSV9EZW5ndWVNb2RlbF92ZWN0b3JMYXJ2YURlbGF5X2ZlYXR1cmU9VmVjdG9yIExhcnZhIERlbGF5CitfVUlfRGVuZ3VlTW9kZWxfdmVjdG9ySW5mZWN0aXZpdHkxX2ZlYXR1cmU9VmVjdG9yIEluZmVjdGl2aXR5MQorX1VJX0Rlbmd1ZU1vZGVsX3ZlY3RvckluZmVjdGl2aXR5Ml9mZWF0dXJlPVZlY3RvciBJbmZlY3Rpdml0eTIKK19VSV9EZW5ndWVNb2RlbF92ZWN0b3JJbmZlY3Rpdml0eTNfZmVhdHVyZT1WZWN0b3IgSW5mZWN0aXZpdHkzCitfVUlfRGVuZ3VlTW9kZWxfdmVjdG9ySW5mZWN0aXZpdHk0X2ZlYXR1cmU9VmVjdG9yIEluZmVjdGl2aXR5NAorX1VJX0Rlbmd1ZU1vZGVsX3ZlY3RvckFERTFfZmVhdHVyZT1WZWN0b3IgQURFMQorX1VJX0Rlbmd1ZU1vZGVsX3ZlY3RvckFERTJfZmVhdHVyZT1WZWN0b3IgQURFMgorX1VJX0Rlbmd1ZU1vZGVsX3ZlY3RvckFERTNfZmVhdHVyZT1WZWN0b3IgQURFMworX1VJX0Rlbmd1ZU1vZGVsX3ZlY3RvckFERTRfZmVhdHVyZT1WZWN0b3IgQURFNAorX1VJX0Rlbmd1ZU1vZGVsX3ZlY3RvckluY3ViYXRpb25SYXRlX2ZlYXR1cmU9XHViY2ExXHVkMTMwIFx1YmQ4MFx1ZDY1NCBcdWMxOGRcdWIzYzQKK19VSV9EZW5ndWVNb2RlbF92ZWN0b3JJbmN1YmF0aW9uUmF0ZTFfZmVhdHVyZT1WZWN0b3IgSW5jdWJhdGlvbiBSYXRlMQorX1VJX0Rlbmd1ZU1vZGVsX3ZlY3RvckluY3ViYXRpb25SYXRlMl9mZWF0dXJlPVZlY3RvciBJbmN1YmF0aW9uIFJhdGUyCitfVUlfRGVuZ3VlTW9kZWxfdmVjdG9ySW5jdWJhdGlvblJhdGUzX2ZlYXR1cmU9VmVjdG9yIEluY3ViYXRpb24gUmF0ZTMKK19VSV9EZW5ndWVNb2RlbF92ZWN0b3JJbmN1YmF0aW9uUmF0ZTRfZmVhdHVyZT1WZWN0b3IgSW5jdWJhdGlvbiBSYXRlNApkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yL3BsdWdpbl96aC5wcm9wZXJ0aWVzIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yL3BsdWdpbl96aC5wcm9wZXJ0aWVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQxMzQzN2IKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IvcGx1Z2luX3poLnByb3BlcnRpZXMKQEAgLTAsMCArMSwxMDIgQEAKKworIyA8Y29weXJpZ2h0PgorIyA8L2NvcHlyaWdodD4KKyMKKyMgJElkJAorCitwbHVnaW5OYW1lPVx1NWE5Mlx1NGVjYlx1NmEyMVx1NTc4YgorcHJvdmlkZXJOYW1lPXd3dy5lY2xpcHNlLm9yZworZGNfY3JlYXRvcl9lZGx1bmQ9U3RlZmFuIEVkbHVuZAorZGNfY3JlYXRvcl9rYXVmbWFuPUphbWVzIEthdWZtYW4KK2RjX2NyZWF0b3Jfa3VuPUt1biBIdQorZGNfY3JlYXRvcl9jdGhvZW5zID0gQ2hyaXN0aWFuIFRob2VucworZGNfaWRlbnRpZXI9U1RFTVx1NzViZVx1NzVjNVx1NTZkZVx1NjUzZVx1NmEyMVx1NTc4YgorZGNfcHVibGlzaGVyPUVjbGlwc2VcdTU3ZmFcdTkxZDFcdTRmMWEKK2RjX2xpY2Vuc2U9RWNsaXBzZVx1NTE2Y1x1NTE3MVx1OGJiOFx1NTNlZlx1ZmYwOEVQTFx1ZmYwOQorZGNfU09VUkNFPWh0dHA6Ly93aWtpLmVjbGlwc2Uub3JnL0ludHJvZHVjdGlvbl90b19Db21wYXJ0bWVudF9Nb2RlbHNcdWZmMDhcdTU0OGNcdTUzYzJcdTgwMDNcdThkNDRcdTY1OTlcdTRlMmRcdWZmMDkKK2RjX3RpdGxlX21jcm9zcz1cdTllYTZcdTUxNGJcdTU1MTBcdTdlYjMgLSBcdTdmNTdcdTY1YWYKK2RjX3RpdGxlX2Rlbmd1ZT1EZW5ndWUgRmV2ZXIKK2RjX3RpdGxlX3NpbXBsZV9kZW5ndWUgPSBTaW1wbGUgRGVuZ3VlIEZldmVyCitkY19kZXNjX21jcm9zcz1cdTdlZDlcdTRlODhcdTViODlcdTVmYjdcdTY4ZWVcdTU0OGNcdTY4ODVcdTc2ODRcdTZhMjFcdTU3OGJcdTc2ODRcdTllYTZcdTUxNGJcdTU1MTBcdTdlYjMgLSBcdTdmNTdcdTY1YWZcdTVhOTJcdTRlY2JcdTRmMjBcdTY0YWRcdTc1YmVcdTc1YzVcdTZhMjFcdTU3OGJcdTMwMDIKK2RjX2Rlc2NfZGVuZ3VlPU1vZGVsIGZvciBEZW5ndWUgRmV2ZXIKK2RjX2Rlc2Nfc2ltcGxlX2Rlbmd1ZT1TaW1wbGUgTW9kZWwgZm9yIERlbmd1ZSBGZXZlcgorZGNfbWFjX3NvdXJjZT1cdTg5YzFcdWZmMWFcdTViODlcdTVmYjdcdTY4ZWUgLSBcdTY4ODVcdTc2ODRcdTIwMWNcdTRlYmFcdTdjN2JcdTRmMjBcdTY3ZDNcdTc1YzVcdTIwMWRcdWZmMGMxNC40XHU3YWUwXHUzMDAyXHU4ZmQ5XHU0ZTJhXHU2YTIxXHU1NzhiXHU1MzA1XHU1NDJiXHU0ZTAwXHU0ZTJhXHU5ODlkXHU1OTE2XHU3Njg0XHU0ZWJhXHU0ZjUzXHU1MTRkXHU3NWFiXHU3MmI2XHU2MDAxXHUzMDAyCisKK19VSV9DcmVhdGVDaGlsZF90ZXh0PXswfQorX1VJX0NyZWF0ZUNoaWxkX3RleHQyPXsxfSB7MH0KK19VSV9DcmVhdGVDaGlsZF90ZXh0Mz17MX0KK19VSV9DcmVhdGVDaGlsZF90b29sdGlwPVx1NTIxYlx1NWVmYVx1NTcyOHsxfSB7MH1cdTY1YjBcdTUyOWZcdTgwZmQKK19VSV9DcmVhdGVDaGlsZF9kZXNjcmlwdGlvbj1cdTRlM2FcdTkwMDlcdTViOWFcdTc2ODR7Mn1cdTc2ODR7MX1cdTcyNzlcdTYwMjdcdTY3NjVcdTUyMWJcdTVlZmFcdTRlMDBcdTRlMmFcdTY1YjBcdTc2ODR7MH1cdTViNTBcdTdjN2IKK19VSV9DcmVhdGVTaWJsaW5nX2Rlc2NyaXB0aW9uPVx1NTcyOHsxfVx1NzY4NFx1NzIzNlx1OTZjNlx1NGUyZFx1NGUzYVx1OTAwOVx1NWI5YVx1NzY4NHsyfVx1Njc2NVx1NTIxYlx1NWVmYVx1NGUwMFx1NGUyYXswfVx1N2M3Ylx1NTc4Ylx1NzY4NFx1NjViMFx1NzY4NFx1NTE0NFx1NWYxZlx1N2M3YgorX1VJX1Byb3BlcnR5RGVzY3JpcHRvcl9kZXNjcmlwdGlvbj17MH1cdTRlY2VcdTVjNWV7MX0KK19VSV9NYWNkb25hbGRSb3NzRGlzZWFzZU1vZGVsX3R5cGU9XHU5ZWE2XHU1MTRiXHU1NTEwXHU3ZWIzLVx1N2Y1N1x1NjVhZlx1NzViZVx1NzVjNVx1NmEyMVx1NTc4YgorX1VJX1Vua25vd25fdHlwZT1cdTViZjlcdThjNjEKK19VSV9Vbmtub3duX2RhdGF0eXBlPVx1NGVmN1x1NTAzYworX1VJX1Vua25vd25fZmVhdHVyZT1cdTY3MmFcdTYzMDdcdTViOWEKK19VSV9NYWNkb25hbGRSb3NzRGlzZWFzZU1vZGVsX3ZlY3RvclBvcHVsYXRpb25JZGVudGlmaWVyX2ZlYXR1cmU9XHU1YTkyXHU0ZWNiXHU3ZmE0XHU0ZjUzXHU2ODA3XHU4YmM2XHU3YjI2CitfVUlfTWFjZG9uYWxkUm9zc0Rpc2Vhc2VNb2RlbF9iaXRpbmdSYXRlX2ZlYXR1cmU9XHU4NjhhXHU1YjUwXHU1M2VlXHU1NGFjXHU3Mzg3CitfVUlfTWFjZG9uYWxkUm9zc0Rpc2Vhc2VNb2RlbF9pbmZlY3Rpb3VzQml0aW5nUHJvcG9ydGlvbkh1bWFuX2ZlYXR1cmU9XHU4MGZkXHU1OTFmXHU2MTFmXHU2N2QzXHU0ZWJhXHU3YzdiXHU3Njg0XHU1M2VlXHU1NGFjXHU3Njg0XHU2YmQ0XHU0ZjhiCitfVUlfTWFjZG9uYWxkUm9zc0Rpc2Vhc2VNb2RlbF9pbmZlY3Rpb3VzQml0aW5nUHJvcG9ydGlvblZlY3Rvcl9mZWF0dXJlPVx1ODBmZFx1NTkxZlx1NjExZlx1NjdkM1x1ODY4YVx1NWI1MFx1NzY4NFx1NTNlZVx1NTRhY1x1NzY4NFx1NmJkNFx1NGY4YgorX1VJX01hY2RvbmFsZFJvc3NEaXNlYXNlTW9kZWxfcmVjb3ZlcnlSYXRlX2ZlYXR1cmU9XHU1ZWI3XHU1OTBkXHU3Mzg3CitfVUlfTWFjZG9uYWxkUm9zc0Rpc2Vhc2VNb2RlbF92ZWN0b3JNb3J0YWxpdHlSYXRlX2ZlYXR1cmU9XHU1YTkyXHU0ZWNiXHU2YjdiXHU0ZWExXHU3Mzg3CitfVUlfVmVjdG9yRGlzZWFzZU1vZGVsX3R5cGU9XHU3NWJlXHU3NWM1XHU2YTIxXHU1NzhiCitfVUlfVmVjdG9yRGlzZWFzZU1vZGVsX3ZlY3RvclBvcHVsYXRpb25JZGVudGlmaWVyX2ZlYXR1cmU9XHU1YTkyXHU0ZWNiXHU3ZmE0XHU0ZjUzXHU2ODA3XHU4YmM2XHU3YjI2CitfVUlfTWFjZG9uYWxkUm9zc0Rpc2Vhc2VNb2RlbF9pbmN1YmF0aW9uUmF0ZV9mZWF0dXJlPVx1NWI3NVx1NTMxNlx1NzM4NworX1VJX01hY2RvbmFsZFJvc3NEaXNlYXNlTW9kZWxfdmVjdG9ySW5jdWJhdGlvblJhdGVfZmVhdHVyZT1cdTVhOTJcdTRlY2JcdTZmNWNcdTRmMGZcdTczODcKK19VSV9NYWNkb25hbGRSb3NzRGlzZWFzZU1vZGVsX2ltbXVuaXR5TG9zc1JhdGVfZmVhdHVyZT1cdTUxNGRcdTc1YWJcdTYzNWZcdTU5MzFcdTczODcKK19VSV9EZW5ndWVNb2RlbF90eXBlPURlbmd1ZSBNb2RlbAorX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmxlX3R5cGU9RGVuZ3VlIE1vZGVsIEhvc3QgTGFibGUKK19VSV9EZW5ndWVNb2RlbEhvc3RMYWJsZVZhbHVlX3R5cGU9RGVuZ3VlIE1vZGVsIEhvc3QgTGFibGUgVmFsdWUKK19VSV9EZW5ndWVNb2RlbFZlY3RvckxhYmxlX3R5cGU9RGVuZ3VlIE1vZGVsIFZlY3RvciBMYWJsZQorX1VJX0Rlbmd1ZU1vZGVsVmVjdG9yTGFibGVWYWx1ZV90eXBlPURlbmd1ZSBNb2RlbCBWZWN0b3IgTGFibGUgVmFsdWUKK19VSV9EZW5ndWVNb2RlbEhvc3RMYWJsZVZhbHVlX0UxX2ZlYXR1cmU9RTEKK19VSV9EZW5ndWVNb2RlbEhvc3RMYWJsZVZhbHVlX0UyX2ZlYXR1cmU9RTIKK19VSV9EZW5ndWVNb2RlbEhvc3RMYWJsZVZhbHVlX0UzX2ZlYXR1cmU9RTMKK19VSV9EZW5ndWVNb2RlbEhvc3RMYWJsZVZhbHVlX0U0X2ZlYXR1cmU9RTQKK19VSV9EZW5ndWVNb2RlbEhvc3RMYWJsZVZhbHVlX0kxX2ZlYXR1cmU9STEKK19VSV9EZW5ndWVNb2RlbEhvc3RMYWJsZVZhbHVlX0kyX2ZlYXR1cmU9STIKK19VSV9EZW5ndWVNb2RlbEhvc3RMYWJsZVZhbHVlX0kzX2ZlYXR1cmU9STMKK19VSV9EZW5ndWVNb2RlbEhvc3RMYWJsZVZhbHVlX0k0X2ZlYXR1cmU9STQKK19VSV9EZW5ndWVNb2RlbEhvc3RMYWJsZVZhbHVlX1QxX2ZlYXR1cmU9VDEKK19VSV9EZW5ndWVNb2RlbEhvc3RMYWJsZVZhbHVlX1QyX2ZlYXR1cmU9VDIKK19VSV9EZW5ndWVNb2RlbEhvc3RMYWJsZVZhbHVlX1QzX2ZlYXR1cmU9VDMKK19VSV9EZW5ndWVNb2RlbEhvc3RMYWJsZVZhbHVlX1Q0X2ZlYXR1cmU9VDQKK19VSV9EZW5ndWVNb2RlbEhvc3RMYWJsZVZhbHVlX1IxX2ZlYXR1cmU9UjEKK19VSV9EZW5ndWVNb2RlbEhvc3RMYWJsZVZhbHVlX1IyX2ZlYXR1cmU9UjIKK19VSV9EZW5ndWVNb2RlbEhvc3RMYWJsZVZhbHVlX1IzX2ZlYXR1cmU9UjMKK19VSV9EZW5ndWVNb2RlbEhvc3RMYWJsZVZhbHVlX1I0X2ZlYXR1cmU9UjQKK19VSV9EZW5ndWVNb2RlbEhvc3RMYWJsZVZhbHVlX0UxMl9mZWF0dXJlPUUxMgorX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmxlVmFsdWVfRTEzX2ZlYXR1cmU9RTEzCitfVUlfRGVuZ3VlTW9kZWxIb3N0TGFibGVWYWx1ZV9FMTRfZmVhdHVyZT1FMTQKK19VSV9EZW5ndWVNb2RlbEhvc3RMYWJsZVZhbHVlX0UyMV9mZWF0dXJlPUUyMQorX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmxlVmFsdWVfRTIzX2ZlYXR1cmU9RTIzCitfVUlfRGVuZ3VlTW9kZWxIb3N0TGFibGVWYWx1ZV9FMjRfZmVhdHVyZT1FMjQKK19VSV9EZW5ndWVNb2RlbEhvc3RMYWJsZVZhbHVlX0UzMV9mZWF0dXJlPUUzMQorX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmxlVmFsdWVfRTMyX2ZlYXR1cmU9RTMyCitfVUlfRGVuZ3VlTW9kZWxIb3N0TGFibGVWYWx1ZV9FMzRfZmVhdHVyZT1FMzQKK19VSV9EZW5ndWVNb2RlbEhvc3RMYWJsZVZhbHVlX0U0MV9mZWF0dXJlPUU0MQorX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmxlVmFsdWVfRTQyX2ZlYXR1cmU9RTQyCitfVUlfRGVuZ3VlTW9kZWxIb3N0TGFibGVWYWx1ZV9FNDNfZmVhdHVyZT1FNDMKK19VSV9EZW5ndWVNb2RlbEhvc3RMYWJsZVZhbHVlX0kxMl9mZWF0dXJlPUkxMgorX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmxlVmFsdWVfSTEzX2ZlYXR1cmU9STEzCitfVUlfRGVuZ3VlTW9kZWxIb3N0TGFibGVWYWx1ZV9JMTRfZmVhdHVyZT1JMTQKK19VSV9EZW5ndWVNb2RlbEhvc3RMYWJsZVZhbHVlX0kyMV9mZWF0dXJlPUkyMQorX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmxlVmFsdWVfSTIzX2ZlYXR1cmU9STIzCitfVUlfRGVuZ3VlTW9kZWxIb3N0TGFibGVWYWx1ZV9JMjRfZmVhdHVyZT1JMjQKK19VSV9EZW5ndWVNb2RlbEhvc3RMYWJsZVZhbHVlX0kzMV9mZWF0dXJlPUkzMQorX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmxlVmFsdWVfSTMyX2ZlYXR1cmU9STMyCitfVUlfRGVuZ3VlTW9kZWxIb3N0TGFibGVWYWx1ZV9JMzRfZmVhdHVyZT1JMzQKK19VSV9EZW5ndWVNb2RlbEhvc3RMYWJsZVZhbHVlX0k0MV9mZWF0dXJlPUk0MQorX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmxlVmFsdWVfSTQyX2ZlYXR1cmU9STQyCitfVUlfRGVuZ3VlTW9kZWxIb3N0TGFibGVWYWx1ZV9JNDNfZmVhdHVyZT1JNDMKK19VSV9EZW5ndWVNb2RlbEhvc3RMYWJsZVZhbHVlX1JfZmVhdHVyZT1SCitfVUlfRGVuZ3VlTW9kZWxWZWN0b3JMYWJsZVZhbHVlX0UxX2ZlYXR1cmU9RTEKK19VSV9EZW5ndWVNb2RlbFZlY3RvckxhYmxlVmFsdWVfRTJfZmVhdHVyZT1FMgorX1VJX0Rlbmd1ZU1vZGVsVmVjdG9yTGFibGVWYWx1ZV9FM19mZWF0dXJlPUUzCitfVUlfRGVuZ3VlTW9kZWxWZWN0b3JMYWJsZVZhbHVlX0U0X2ZlYXR1cmU9RTQKK19VSV9EZW5ndWVNb2RlbFZlY3RvckxhYmxlVmFsdWVfSTFfZmVhdHVyZT1JMQorX1VJX0Rlbmd1ZU1vZGVsVmVjdG9yTGFibGVWYWx1ZV9JMl9mZWF0dXJlPUkyCitfVUlfRGVuZ3VlTW9kZWxWZWN0b3JMYWJsZVZhbHVlX0kzX2ZlYXR1cmU9STMKK19VSV9EZW5ndWVNb2RlbFZlY3RvckxhYmxlVmFsdWVfSTRfZmVhdHVyZT1JNAorX1VJX0Rlbmd1ZU1vZGVsX2V4cG9zdXJlUmF0ZTFfZmVhdHVyZT1FeHBvc3VyZSBSYXRlMQorX1VJX0Rlbmd1ZU1vZGVsX3RyYW5zbWlzc2lvblJhdGUxX2ZlYXR1cmU9VHJhbnNtaXNzaW9uIFJhdGUxCmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3Ivc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy92ZWN0b3IvQWN0aXZhdG9yLmphdmEgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3Ivc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy92ZWN0b3IvQWN0aXZhdG9yLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjQ2YjdkMwotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3ZlY3Rvci9BY3RpdmF0b3IuamF2YQpAQCAtMCwwICsxLDE0NSBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TdGF0dXM7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLkNvbnN0YW50czsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5wbHVnaW4uQWJzdHJhY3RVSVBsdWdpbjsKK2ltcG9ydCBvcmcub3NnaS5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dDsKKworLyoqCisgKiBUaGUgYWN0aXZhdG9yIGNsYXNzIGNvbnRyb2xzIHRoZSBwbHVnLWluIGxpZmUgY3ljbGUKKyAqLworcHVibGljIGNsYXNzIEFjdGl2YXRvciBleHRlbmRzIEFic3RyYWN0VUlQbHVnaW4geworCisJLyoqCisJICogVGhlIHBsdWctaW4gSUQKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBQTFVHSU5fSUQgPSBDb25zdGFudHMuSURfUk9PVCArICIuZGlzZWFzZW1vZGVscy52ZWN0b3IiOworCisJLy8gVGhlIHNoYXJlZCBpbnN0YW5jZQorCXByaXZhdGUgc3RhdGljIEFjdGl2YXRvciBwbHVnaW47CisKKwkvKioKKwkgKiBUaGUgY29uc3RydWN0b3IKKwkgKi8KKwlwdWJsaWMgQWN0aXZhdG9yKCkgeworCQlwbHVnaW4gPSB0aGlzOworCX0KKworCS8qKgorCSAqIEBwYXJhbSBjb250ZXh0CisJICogQHRocm93cyBFeGNlcHRpb24KKwkgKi8KKwlwdWJsaWMgdm9pZCBzdGFydChCdW5kbGVDb250ZXh0IGNvbnRleHQpIHRocm93cyBFeGNlcHRpb24geworCQlzdXBlci5zdGFydChjb250ZXh0KTsKKwkJLy8gV2UgY3JlYXRlIHRoZXNlIGluc3RhbmNlcyBzbyB0aGF0IHRoZWlyIGNvbnN0cnVjdG9ycyBydW4gYW5kIHRoZXkKKwkJLy8gdGhlbiBhZGQgdGhlbXNlbHZlcyB0byBhIGNvbGxlY3Rpb24gb2YgZmFjdG9yaWVzIG1haW50YWluZWQgYnkgdGhlCisJCS8vIGZhY3RvcnkgaW50ZXJmYWNlcyB0aGV5IGltcGxlbWVudCByZXNwZWN0aXZlbHkuCisJfSAvLyAKKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBsdWdpbiNzdG9wKG9yZy5vc2dpLmZyYW1ld29yay5CdW5kbGVDb250ZXh0KQorCSAqLworCXB1YmxpYyB2b2lkIHN0b3AoQnVuZGxlQ29udGV4dCBjb250ZXh0KSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJcGx1Z2luID0gbnVsbDsKKwkJc3VwZXIuc3RvcChjb250ZXh0KTsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBzaGFyZWQgaW5zdGFuY2UKKwkgKiAKKwkgKiBAcmV0dXJuIHRoZSBzaGFyZWQgaW5zdGFuY2UKKwkgKi8KKwlwdWJsaWMgc3RhdGljIEFjdGl2YXRvciBnZXREZWZhdWx0KCkgeworCQlyZXR1cm4gcGx1Z2luOworCX0KKworCS8qKgorCSAqIExvZyBhbiBlcnJvciB0byB0aGUgSUxvZyBmb3IgdGhpcyBwbHVnaW4KKwkgKiAKKwkgKiBAcGFyYW0gbWVzc2FnZQorCSAqICAgICAgICAgICAgdGhlIGxvY2FsaXplZCBlcnJvciBtZXNzYWdlIHRleHQKKwkgKiBAcGFyYW0gZXhjZXB0aW9uCisJICogICAgICAgICAgICB0aGUgYXNzb2NpYXRlZCBleGNlcHRpb24sIG9yIG51bGwKKwkgKi8KKwlwdWJsaWMgc3RhdGljIHZvaWQgbG9nRXJyb3IoU3RyaW5nIG1lc3NhZ2UsIFRocm93YWJsZSBleGNlcHRpb24pIHsKKwkJLy8gUnVubmluZyBhcyBhIHBsdWdpbj8KKwkJaWYgKHBsdWdpbiAhPSBudWxsKSB7CisJCQkvLyBZZXMKKwkJCXBsdWdpbi5nZXRMb2coKS5sb2coCisJCQkJCW5ldyBTdGF0dXMoSVN0YXR1cy5FUlJPUiwgcGx1Z2luLmdldEJ1bmRsZSgpCisJCQkJCQkJLmdldFN5bWJvbGljTmFtZSgpLCAwLCBtZXNzYWdlLCBleGNlcHRpb24pKTsKKwkJfSBlbHNlIHsKKwkJCVN5c3RlbS5lcnIucHJpbnRsbihtZXNzYWdlKTsKKwkJCS8vIEV4Y2VwdGlvbj8KKwkJCWlmIChleGNlcHRpb24gIT0gbnVsbCkgeworCQkJCS8vIFllcworCQkJCVN5c3RlbS5lcnIucHJpbnRsbihleGNlcHRpb24uZ2V0TWVzc2FnZSgpKTsKKwkJCQlleGNlcHRpb24ucHJpbnRTdGFja1RyYWNlKFN5c3RlbS5lcnIpOworCQkJfQorCQl9CisKKwl9IC8vIGxvZ0Vycm9yCisKKwkvKioKKwkgKiBMb2cgaW5mb3JtYXRpb24gdG8gdGhlIElMb2cgZm9yIHRoaXMgcGx1Z2luCisJICogCisJICogQHBhcmFtIG1lc3NhZ2UKKwkgKiAgICAgICAgICAgIHRoZSBsb2NhbGl6ZWQgaW5mb3JtYXRpb24gbWVzc2FnZSB0ZXh0CisJICogQHBhcmFtIGV4Y2VwdGlvbgorCSAqICAgICAgICAgICAgdGhlIGFzc29jaWF0ZWQgZXhjZXB0aW9uLCBvciBudWxsCisJICovCisJcHVibGljIHN0YXRpYyB2b2lkIGxvZ0luZm9ybWF0aW9uKFN0cmluZyBtZXNzYWdlLCBUaHJvd2FibGUgZXhjZXB0aW9uKSB7CisJCS8vIERvIHdlIGhhdmUgYSBwbHVnaW4/CisJCWlmIChwbHVnaW4gIT0gbnVsbCkgeworCQkJLy8gWWVzCisJCQlwbHVnaW4uZ2V0TG9nKCkubG9nKAorCQkJCQluZXcgU3RhdHVzKElTdGF0dXMuSU5GTywgcGx1Z2luLmdldEJ1bmRsZSgpLmdldFN5bWJvbGljTmFtZSgpLAorCQkJCQkJCTAsIG1lc3NhZ2UsIGV4Y2VwdGlvbikpOworCQl9CisJCWVsc2UgeworCQkJLy8gTm8KKwkJCVN5c3RlbS5vdXQucHJpbnRsbihtZXNzYWdlKTsKKwkJCS8vIEV4Y2VwdGlvbj8KKwkJCWlmIChleGNlcHRpb24gIT0gbnVsbCkgeworCQkJCS8vIFllcworCQkJCVN5c3RlbS5vdXQucHJpbnRsbihleGNlcHRpb24uZ2V0TWVzc2FnZSgpKTsKKwkJCX0gLy8gaWYgCisJCX0KKwl9IC8vIGxvZ0luZm9ybWF0aW9uCisJCisJCisJLyoqCisJICogTG9nIGluZm9ybWF0aW9uIHRvIHRoZSBJTG9nIGZvciB0aGlzIHBsdWdpbgorCSAqIFRoZSBtZXRob2QgaXMgb3ZlcmxvYWRlZCB0byBhbGxvdyBmb3IgbG9nSW5mb3JtYXRpb24gd2l0aG91dCBhbiBlcnJvciAKKwkgKiBtZXRob2Qgc2V0cyB0aGUgZXJyb3IgdG8gbnVsbC4gVGhpcyBzaG91bGQgYmUgdXNlZCBpbnN0ZWFkIG9mIFN5c3RlbS5vdXQucHJpbnRsbgorCSAqIHRocm91Z2hvdXQgdGhlIGNvZGUuCisJICogQHBhcmFtIG1lc3NhZ2UKKwkgKiAgICAgICAgICAgIHRoZSBsb2NhbGl6ZWQgaW5mb3JtYXRpb24gbWVzc2FnZSB0ZXh0CisJICoKKwkgKi8KKwlwdWJsaWMgc3RhdGljIHZvaWQgbG9nSW5mb3JtYXRpb24oU3RyaW5nIG1lc3NhZ2UpIHsKKwkJLy8gRG8gd2UgaGF2ZSBhIHBsdWdpbj8KKwkJaWYgKHBsdWdpbiAhPSBudWxsKSB7CisJCQkvLyBZZXMKKwkJCXBsdWdpbi5nZXRMb2coKS5sb2coCisJCQkJCW5ldyBTdGF0dXMoSVN0YXR1cy5JTkZPLCBwbHVnaW4uZ2V0QnVuZGxlKCkuZ2V0U3ltYm9saWNOYW1lKCksCisJCQkJCQkJMCwgbWVzc2FnZSwgbnVsbCkpOworCQl9CisJCWVsc2UgeworCQkJLy8gTm8KKwkJCVN5c3RlbS5vdXQucHJpbnRsbihtZXNzYWdlKTsKKwkJfQorCX0gLy8gbG9nSW5mb3JtYXRpb24KK30gLy8gQWN0aXZhdG9yCmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3Ivc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy92ZWN0b3IvRGVuZ3VlTW9kZWwuamF2YSBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3ZlY3Rvci9EZW5ndWVNb2RlbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZmYjBjNzgKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3Ivc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy92ZWN0b3IvRGVuZ3VlTW9kZWwuamF2YQpAQCAtMCwwICsxLDIzMjYgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3RvcjsNCisNCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyAqIENvcHlyaWdodCAoYykgMjAxMSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4NCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzDQorICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wDQorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQNCisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbA0KKyAqDQorICogQ29udHJpYnV0b3JzOg0KKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24NCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCisNCisvKioNCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKyAqIEEgcmVwcmVzZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPkRlbmd1ZSBNb2RlbDwvYj48L2VtPicuDQorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorICoNCisgKiA8cD4NCisgKiBUaGUgZm9sbG93aW5nIGZlYXR1cmVzIGFyZSBzdXBwb3J0ZWQ6DQorICogPHVsPg0KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLkRlbmd1ZU1vZGVsI2dldEJpdGluZ1JhdGVTViA8ZW0+Qml0aW5nIFJhdGUgU1Y8L2VtPn08L2xpPg0KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLkRlbmd1ZU1vZGVsI2dldEJpdGluZ1JhdGVJViA8ZW0+Qml0aW5nIFJhdGUgSVY8L2VtPn08L2xpPg0KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLkRlbmd1ZU1vZGVsI2dldEhvc3RJbmZlY3Rpdml0eTEgPGVtPkhvc3QgSW5mZWN0aXZpdHkxPC9lbT59PC9saT4NCisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbCNnZXRIb3N0SW5mZWN0aXZpdHkyIDxlbT5Ib3N0IEluZmVjdGl2aXR5MjwvZW0+fTwvbGk+DQorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWwjZ2V0SG9zdEluZmVjdGl2aXR5MyA8ZW0+SG9zdCBJbmZlY3Rpdml0eTM8L2VtPn08L2xpPg0KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLkRlbmd1ZU1vZGVsI2dldEhvc3RJbmZlY3Rpdml0eTQgPGVtPkhvc3QgSW5mZWN0aXZpdHk0PC9lbT59PC9saT4NCisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbCNnZXRIb3N0UHJpbWFyeUluY3ViYXRpb25SYXRlMSA8ZW0+SG9zdCBQcmltYXJ5IEluY3ViYXRpb24gUmF0ZTE8L2VtPn08L2xpPg0KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLkRlbmd1ZU1vZGVsI2dldEhvc3RQcmltYXJ5SW5jdWJhdGlvblJhdGUyIDxlbT5Ib3N0IFByaW1hcnkgSW5jdWJhdGlvbiBSYXRlMjwvZW0+fTwvbGk+DQorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWwjZ2V0SG9zdFByaW1hcnlJbmN1YmF0aW9uUmF0ZTMgPGVtPkhvc3QgUHJpbWFyeSBJbmN1YmF0aW9uIFJhdGUzPC9lbT59PC9saT4NCisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbCNnZXRIb3N0UHJpbWFyeUluY3ViYXRpb25SYXRlNCA8ZW0+SG9zdCBQcmltYXJ5IEluY3ViYXRpb24gUmF0ZTQ8L2VtPn08L2xpPg0KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLkRlbmd1ZU1vZGVsI2dldEhvc3RQcmltYXJ5UmVjb3ZlcnlSYXRlMSA8ZW0+SG9zdCBQcmltYXJ5IFJlY292ZXJ5IFJhdGUxPC9lbT59PC9saT4NCisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbCNnZXRIb3N0UHJpbWFyeVJlY292ZXJ5UmF0ZTIgPGVtPkhvc3QgUHJpbWFyeSBSZWNvdmVyeSBSYXRlMjwvZW0+fTwvbGk+DQorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWwjZ2V0SG9zdFByaW1hcnlSZWNvdmVyeVJhdGUzIDxlbT5Ib3N0IFByaW1hcnkgUmVjb3ZlcnkgUmF0ZTM8L2VtPn08L2xpPg0KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLkRlbmd1ZU1vZGVsI2dldEhvc3RQcmltYXJ5UmVjb3ZlcnlSYXRlNCA8ZW0+SG9zdCBQcmltYXJ5IFJlY292ZXJ5IFJhdGU0PC9lbT59PC9saT4NCisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbCNnZXRIb3N0UHJpbWFyeUltbXVuaXR5TG9zc1JhdGUxIDxlbT5Ib3N0IFByaW1hcnkgSW1tdW5pdHkgTG9zcyBSYXRlMTwvZW0+fTwvbGk+DQorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWwjZ2V0SG9zdFByaW1hcnlJbW11bml0eUxvc3NSYXRlMiA8ZW0+SG9zdCBQcmltYXJ5IEltbXVuaXR5IExvc3MgUmF0ZTI8L2VtPn08L2xpPg0KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLkRlbmd1ZU1vZGVsI2dldEhvc3RQcmltYXJ5SW1tdW5pdHlMb3NzUmF0ZTMgPGVtPkhvc3QgUHJpbWFyeSBJbW11bml0eSBMb3NzIFJhdGUzPC9lbT59PC9saT4NCisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbCNnZXRIb3N0UHJpbWFyeUltbXVuaXR5TG9zc1JhdGU0IDxlbT5Ib3N0IFByaW1hcnkgSW1tdW5pdHkgTG9zcyBSYXRlNDwvZW0+fTwvbGk+DQorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWwjZ2V0SG9zdFByaW1hcnlEaXNlYXNlRGVhdGhSYXRlMSA8ZW0+SG9zdCBQcmltYXJ5IERpc2Vhc2UgRGVhdGggUmF0ZTE8L2VtPn08L2xpPg0KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLkRlbmd1ZU1vZGVsI2dldEhvc3RQcmltYXJ5RGlzZWFzZURlYXRoUmF0ZTIgPGVtPkhvc3QgUHJpbWFyeSBEaXNlYXNlIERlYXRoIFJhdGUyPC9lbT59PC9saT4NCisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbCNnZXRIb3N0UHJpbWFyeURpc2Vhc2VEZWF0aFJhdGUzIDxlbT5Ib3N0IFByaW1hcnkgRGlzZWFzZSBEZWF0aCBSYXRlMzwvZW0+fTwvbGk+DQorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWwjZ2V0SG9zdFByaW1hcnlEaXNlYXNlRGVhdGhSYXRlNCA8ZW0+SG9zdCBQcmltYXJ5IERpc2Vhc2UgRGVhdGggUmF0ZTQ8L2VtPn08L2xpPg0KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLkRlbmd1ZU1vZGVsI2dldEhvc3RBREUxMiA8ZW0+SG9zdCBBREUxMjwvZW0+fTwvbGk+DQorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWwjZ2V0SG9zdEFERTEzIDxlbT5Ib3N0IEFERTEzPC9lbT59PC9saT4NCisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbCNnZXRIb3N0QURFMTQgPGVtPkhvc3QgQURFMTQ8L2VtPn08L2xpPg0KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLkRlbmd1ZU1vZGVsI2dldEhvc3RBREUyMSA8ZW0+SG9zdCBBREUyMTwvZW0+fTwvbGk+DQorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWwjZ2V0SG9zdEFERTIzIDxlbT5Ib3N0IEFERTIzPC9lbT59PC9saT4NCisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbCNnZXRIb3N0QURFMjQgPGVtPkhvc3QgQURFMjQ8L2VtPn08L2xpPg0KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLkRlbmd1ZU1vZGVsI2dldEhvc3RBREUzMSA8ZW0+SG9zdCBBREUzMTwvZW0+fTwvbGk+DQorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWwjZ2V0SG9zdEFERTMyIDxlbT5Ib3N0IEFERTMyPC9lbT59PC9saT4NCisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbCNnZXRIb3N0QURFMzQgPGVtPkhvc3QgQURFMzQ8L2VtPn08L2xpPg0KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLkRlbmd1ZU1vZGVsI2dldEhvc3RBREU0MSA8ZW0+SG9zdCBBREU0MTwvZW0+fTwvbGk+DQorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWwjZ2V0SG9zdEFERTQyIDxlbT5Ib3N0IEFERTQyPC9lbT59PC9saT4NCisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbCNnZXRIb3N0QURFNDMgPGVtPkhvc3QgQURFNDM8L2VtPn08L2xpPg0KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLkRlbmd1ZU1vZGVsI2dldEhvc3RTZWNvbmRhcnlEaXNlYXNlRGVhdGhSYXRlMTIgPGVtPkhvc3QgU2Vjb25kYXJ5IERpc2Vhc2UgRGVhdGggUmF0ZTEyPC9lbT59PC9saT4NCisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbCNnZXRIb3N0U2Vjb25kYXJ5RGlzZWFzZURlYXRoUmF0ZTEzIDxlbT5Ib3N0IFNlY29uZGFyeSBEaXNlYXNlIERlYXRoIFJhdGUxMzwvZW0+fTwvbGk+DQorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWwjZ2V0SG9zdFNlY29uZGFyeURpc2Vhc2VEZWF0aFJhdGUxNCA8ZW0+SG9zdCBTZWNvbmRhcnkgRGlzZWFzZSBEZWF0aCBSYXRlMTQ8L2VtPn08L2xpPg0KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLkRlbmd1ZU1vZGVsI2dldEhvc3RTZWNvbmRhcnlEaXNlYXNlRGVhdGhSYXRlMjEgPGVtPkhvc3QgU2Vjb25kYXJ5IERpc2Vhc2UgRGVhdGggUmF0ZTIxPC9lbT59PC9saT4NCisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbCNnZXRIb3N0U2Vjb25kYXJ5RGlzZWFzZURlYXRoUmF0ZTIzIDxlbT5Ib3N0IFNlY29uZGFyeSBEaXNlYXNlIERlYXRoIFJhdGUyMzwvZW0+fTwvbGk+DQorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWwjZ2V0SG9zdFNlY29uZGFyeURpc2Vhc2VEZWF0aFJhdGUyNCA8ZW0+SG9zdCBTZWNvbmRhcnkgRGlzZWFzZSBEZWF0aCBSYXRlMjQ8L2VtPn08L2xpPg0KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLkRlbmd1ZU1vZGVsI2dldEhvc3RTZWNvbmRhcnlEaXNlYXNlRGVhdGhSYXRlMzEgPGVtPkhvc3QgU2Vjb25kYXJ5IERpc2Vhc2UgRGVhdGggUmF0ZTMxPC9lbT59PC9saT4NCisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbCNnZXRIb3N0U2Vjb25kYXJ5RGlzZWFzZURlYXRoUmF0ZTMyIDxlbT5Ib3N0IFNlY29uZGFyeSBEaXNlYXNlIERlYXRoIFJhdGUzMjwvZW0+fTwvbGk+DQorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWwjZ2V0SG9zdFNlY29uZGFyeURpc2Vhc2VEZWF0aFJhdGUzNCA8ZW0+SG9zdCBTZWNvbmRhcnkgRGlzZWFzZSBEZWF0aCBSYXRlMzQ8L2VtPn08L2xpPg0KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLkRlbmd1ZU1vZGVsI2dldEhvc3RTZWNvbmRhcnlEaXNlYXNlRGVhdGhSYXRlNDEgPGVtPkhvc3QgU2Vjb25kYXJ5IERpc2Vhc2UgRGVhdGggUmF0ZTQxPC9lbT59PC9saT4NCisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbCNnZXRIb3N0U2Vjb25kYXJ5RGlzZWFzZURlYXRoUmF0ZTQyIDxlbT5Ib3N0IFNlY29uZGFyeSBEaXNlYXNlIERlYXRoIFJhdGU0MjwvZW0+fTwvbGk+DQorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWwjZ2V0SG9zdFNlY29uZGFyeURpc2Vhc2VEZWF0aFJhdGU0MyA8ZW0+SG9zdCBTZWNvbmRhcnkgRGlzZWFzZSBEZWF0aCBSYXRlNDM8L2VtPn08L2xpPg0KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLkRlbmd1ZU1vZGVsI2dldEhvc3RTZWNvbmRhcnlSZWNvdmVyeVJhdGUxMiA8ZW0+SG9zdCBTZWNvbmRhcnkgUmVjb3ZlcnkgUmF0ZTEyPC9lbT59PC9saT4NCisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbCNnZXRIb3N0U2Vjb25kYXJ5UmVjb3ZlcnlSYXRlMTMgPGVtPkhvc3QgU2Vjb25kYXJ5IFJlY292ZXJ5IFJhdGUxMzwvZW0+fTwvbGk+DQorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWwjZ2V0SG9zdFNlY29uZGFyeVJlY292ZXJ5UmF0ZTE0IDxlbT5Ib3N0IFNlY29uZGFyeSBSZWNvdmVyeSBSYXRlMTQ8L2VtPn08L2xpPg0KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLkRlbmd1ZU1vZGVsI2dldEhvc3RTZWNvbmRhcnlSZWNvdmVyeVJhdGUyMSA8ZW0+SG9zdCBTZWNvbmRhcnkgUmVjb3ZlcnkgUmF0ZTIxPC9lbT59PC9saT4NCisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbCNnZXRIb3N0U2Vjb25kYXJ5UmVjb3ZlcnlSYXRlMjMgPGVtPkhvc3QgU2Vjb25kYXJ5IFJlY292ZXJ5IFJhdGUyMzwvZW0+fTwvbGk+DQorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWwjZ2V0SG9zdFNlY29uZGFyeVJlY292ZXJ5UmF0ZTI0IDxlbT5Ib3N0IFNlY29uZGFyeSBSZWNvdmVyeSBSYXRlMjQ8L2VtPn08L2xpPg0KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLkRlbmd1ZU1vZGVsI2dldEhvc3RTZWNvbmRhcnlSZWNvdmVyeVJhdGUzMSA8ZW0+SG9zdCBTZWNvbmRhcnkgUmVjb3ZlcnkgUmF0ZTMxPC9lbT59PC9saT4NCisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbCNnZXRIb3N0U2Vjb25kYXJ5UmVjb3ZlcnlSYXRlMzIgPGVtPkhvc3QgU2Vjb25kYXJ5IFJlY292ZXJ5IFJhdGUzMjwvZW0+fTwvbGk+DQorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWwjZ2V0SG9zdFNlY29uZGFyeVJlY292ZXJ5UmF0ZTM0IDxlbT5Ib3N0IFNlY29uZGFyeSBSZWNvdmVyeSBSYXRlMzQ8L2VtPn08L2xpPg0KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLkRlbmd1ZU1vZGVsI2dldEhvc3RTZWNvbmRhcnlSZWNvdmVyeVJhdGU0MSA8ZW0+SG9zdCBTZWNvbmRhcnkgUmVjb3ZlcnkgUmF0ZTQxPC9lbT59PC9saT4NCisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbCNnZXRIb3N0U2Vjb25kYXJ5UmVjb3ZlcnlSYXRlNDIgPGVtPkhvc3QgU2Vjb25kYXJ5IFJlY292ZXJ5IFJhdGU0MjwvZW0+fTwvbGk+DQorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWwjZ2V0SG9zdFNlY29uZGFyeVJlY292ZXJ5UmF0ZTQzIDxlbT5Ib3N0IFNlY29uZGFyeSBSZWNvdmVyeSBSYXRlNDM8L2VtPn08L2xpPg0KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLkRlbmd1ZU1vZGVsI2dldEhvc3RTZWNvbmRhcnlJbmN1YmF0aW9uUmF0ZTEyIDxlbT5Ib3N0IFNlY29uZGFyeSBJbmN1YmF0aW9uIFJhdGUxMjwvZW0+fTwvbGk+DQorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWwjZ2V0SG9zdFNlY29uZGFyeUluY3ViYXRpb25SYXRlMTMgPGVtPkhvc3QgU2Vjb25kYXJ5IEluY3ViYXRpb24gUmF0ZTEzPC9lbT59PC9saT4NCisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbCNnZXRIb3N0U2Vjb25kYXJ5SW5jdWJhdGlvblJhdGUxNCA8ZW0+SG9zdCBTZWNvbmRhcnkgSW5jdWJhdGlvbiBSYXRlMTQ8L2VtPn08L2xpPg0KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLkRlbmd1ZU1vZGVsI2dldEhvc3RTZWNvbmRhcnlJbmN1YmF0aW9uUmF0ZTIxIDxlbT5Ib3N0IFNlY29uZGFyeSBJbmN1YmF0aW9uIFJhdGUyMTwvZW0+fTwvbGk+DQorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWwjZ2V0SG9zdFNlY29uZGFyeUluY3ViYXRpb25SYXRlMjMgPGVtPkhvc3QgU2Vjb25kYXJ5IEluY3ViYXRpb24gUmF0ZTIzPC9lbT59PC9saT4NCisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbCNnZXRIb3N0U2Vjb25kYXJ5SW5jdWJhdGlvblJhdGUyNCA8ZW0+SG9zdCBTZWNvbmRhcnkgSW5jdWJhdGlvbiBSYXRlMjQ8L2VtPn08L2xpPg0KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLkRlbmd1ZU1vZGVsI2dldEhvc3RTZWNvbmRhcnlJbmN1YmF0aW9uUmF0ZTMxIDxlbT5Ib3N0IFNlY29uZGFyeSBJbmN1YmF0aW9uIFJhdGUzMTwvZW0+fTwvbGk+DQorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWwjZ2V0SG9zdFNlY29uZGFyeUluY3ViYXRpb25SYXRlMzIgPGVtPkhvc3QgU2Vjb25kYXJ5IEluY3ViYXRpb24gUmF0ZTMyPC9lbT59PC9saT4NCisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbCNnZXRIb3N0U2Vjb25kYXJ5SW5jdWJhdGlvblJhdGUzNCA8ZW0+SG9zdCBTZWNvbmRhcnkgSW5jdWJhdGlvbiBSYXRlMzQ8L2VtPn08L2xpPg0KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLkRlbmd1ZU1vZGVsI2dldEhvc3RTZWNvbmRhcnlJbmN1YmF0aW9uUmF0ZTQxIDxlbT5Ib3N0IFNlY29uZGFyeSBJbmN1YmF0aW9uIFJhdGU0MTwvZW0+fTwvbGk+DQorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWwjZ2V0SG9zdFNlY29uZGFyeUluY3ViYXRpb25SYXRlNDIgPGVtPkhvc3QgU2Vjb25kYXJ5IEluY3ViYXRpb24gUmF0ZTQyPC9lbT59PC9saT4NCisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbCNnZXRIb3N0U2Vjb25kYXJ5SW5jdWJhdGlvblJhdGU0MyA8ZW0+SG9zdCBTZWNvbmRhcnkgSW5jdWJhdGlvbiBSYXRlNDM8L2VtPn08L2xpPg0KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLkRlbmd1ZU1vZGVsI2dldFZlY3RvckluZmVjdGl2aXR5MSA8ZW0+VmVjdG9yIEluZmVjdGl2aXR5MTwvZW0+fTwvbGk+DQorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWwjZ2V0VmVjdG9ySW5mZWN0aXZpdHkyIDxlbT5WZWN0b3IgSW5mZWN0aXZpdHkyPC9lbT59PC9saT4NCisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbCNnZXRWZWN0b3JJbmZlY3Rpdml0eTMgPGVtPlZlY3RvciBJbmZlY3Rpdml0eTM8L2VtPn08L2xpPg0KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLkRlbmd1ZU1vZGVsI2dldFZlY3RvckluZmVjdGl2aXR5NCA8ZW0+VmVjdG9yIEluZmVjdGl2aXR5NDwvZW0+fTwvbGk+DQorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWwjZ2V0VmVjdG9yQURFMSA8ZW0+VmVjdG9yIEFERTE8L2VtPn08L2xpPg0KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLkRlbmd1ZU1vZGVsI2dldFZlY3RvckFERTIgPGVtPlZlY3RvciBBREUyPC9lbT59PC9saT4NCisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbCNnZXRWZWN0b3JBREUzIDxlbT5WZWN0b3IgQURFMzwvZW0+fTwvbGk+DQorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWwjZ2V0VmVjdG9yQURFNCA8ZW0+VmVjdG9yIEFERTQ8L2VtPn08L2xpPg0KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLkRlbmd1ZU1vZGVsI2dldFZlY3RvckluY3ViYXRpb25SYXRlMSA8ZW0+VmVjdG9yIEluY3ViYXRpb24gUmF0ZTE8L2VtPn08L2xpPg0KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLkRlbmd1ZU1vZGVsI2dldFZlY3RvckluY3ViYXRpb25SYXRlMiA8ZW0+VmVjdG9yIEluY3ViYXRpb24gUmF0ZTI8L2VtPn08L2xpPg0KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLkRlbmd1ZU1vZGVsI2dldFZlY3RvckluY3ViYXRpb25SYXRlMyA8ZW0+VmVjdG9yIEluY3ViYXRpb24gUmF0ZTM8L2VtPn08L2xpPg0KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLkRlbmd1ZU1vZGVsI2dldFZlY3RvckluY3ViYXRpb25SYXRlNCA8ZW0+VmVjdG9yIEluY3ViYXRpb24gUmF0ZTQ8L2VtPn08L2xpPg0KKyAqIDwvdWw+DQorICogPC9wPg0KKyAqDQorICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLlZlY3RvclBhY2thZ2UjZ2V0RGVuZ3VlTW9kZWwoKQ0KKyAqIEBtb2RlbA0KKyAqIEBnZW5lcmF0ZWQNCisgKi8NCitwdWJsaWMgaW50ZXJmYWNlIERlbmd1ZU1vZGVsIGV4dGVuZHMgVmVjdG9yRGlzZWFzZU1vZGVsIHsNCisNCisJLyoqDQorCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPkJpdGluZyBSYXRlIFNWPC9iPjwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIGlzIDxjb2RlPiIxIjwvY29kZT4uDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDxwPg0KKwkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5CaXRpbmcgUmF0ZSBTVjwvZW0+JyBhdHRyaWJ1dGUgaXNuJ3QgY2xlYXIsDQorCSAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4NCisJICogPC9wPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+Qml0aW5nIFJhdGUgU1Y8L2VtPicgYXR0cmlidXRlLg0KKwkgKiBAc2VlICNzZXRCaXRpbmdSYXRlU1YoZG91YmxlKQ0KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuVmVjdG9yUGFja2FnZSNnZXREZW5ndWVNb2RlbF9CaXRpbmdSYXRlU1YoKQ0KKwkgKiBAbW9kZWwgZGVmYXVsdD0iMSINCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJZG91YmxlIGdldEJpdGluZ1JhdGVTVigpOw0KKw0KKwkvKioNCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbCNnZXRCaXRpbmdSYXRlU1YgPGVtPkJpdGluZyBSYXRlIFNWPC9lbT59JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5CaXRpbmcgUmF0ZSBTVjwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIEBzZWUgI2dldEJpdGluZ1JhdGVTVigpDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXZvaWQgc2V0Qml0aW5nUmF0ZVNWKGRvdWJsZSB2YWx1ZSk7DQorDQorCS8qKg0KKwkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5CaXRpbmcgUmF0ZSBJVjwvYj48L2VtPicgYXR0cmlidXRlLg0KKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyA8Y29kZT4iMSI8L2NvZGU+Lg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8cD4NCisJICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+Qml0aW5nIFJhdGUgSVY8L2VtPicgYXR0cmlidXRlIGlzbid0IGNsZWFyLA0KKwkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uDQorCSAqIDwvcD4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPkJpdGluZyBSYXRlIElWPC9lbT4nIGF0dHJpYnV0ZS4NCisJICogQHNlZSAjc2V0Qml0aW5nUmF0ZUlWKGRvdWJsZSkNCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLlZlY3RvclBhY2thZ2UjZ2V0RGVuZ3VlTW9kZWxfQml0aW5nUmF0ZUlWKCkNCisJICogQG1vZGVsIGRlZmF1bHQ9IjEiDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCWRvdWJsZSBnZXRCaXRpbmdSYXRlSVYoKTsNCisNCisJLyoqDQorCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWwjZ2V0Qml0aW5nUmF0ZUlWIDxlbT5CaXRpbmcgUmF0ZSBJVjwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+Qml0aW5nIFJhdGUgSVY8L2VtPicgYXR0cmlidXRlLg0KKwkgKiBAc2VlICNnZXRCaXRpbmdSYXRlSVYoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwl2b2lkIHNldEJpdGluZ1JhdGVJVihkb3VibGUgdmFsdWUpOw0KKw0KKwkvKioNCisJICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+SG9zdCBJbmZlY3Rpdml0eTE8L2I+PC9lbT4nIGF0dHJpYnV0ZS4NCisJICogVGhlIGRlZmF1bHQgdmFsdWUgaXMgPGNvZGU+IjAuNSI8L2NvZGU+Lg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8cD4NCisJICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+SG9zdCBJbmZlY3Rpdml0eTE8L2VtPicgYXR0cmlidXRlIGlzbid0IGNsZWFyLA0KKwkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uDQorCSAqIDwvcD4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPkhvc3QgSW5mZWN0aXZpdHkxPC9lbT4nIGF0dHJpYnV0ZS4NCisJICogQHNlZSAjc2V0SG9zdEluZmVjdGl2aXR5MShkb3VibGUpDQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5WZWN0b3JQYWNrYWdlI2dldERlbmd1ZU1vZGVsX0hvc3RJbmZlY3Rpdml0eTEoKQ0KKwkgKiBAbW9kZWwgZGVmYXVsdD0iMC41Ig0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlkb3VibGUgZ2V0SG9zdEluZmVjdGl2aXR5MSgpOw0KKw0KKwkvKioNCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbCNnZXRIb3N0SW5mZWN0aXZpdHkxIDxlbT5Ib3N0IEluZmVjdGl2aXR5MTwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+SG9zdCBJbmZlY3Rpdml0eTE8L2VtPicgYXR0cmlidXRlLg0KKwkgKiBAc2VlICNnZXRIb3N0SW5mZWN0aXZpdHkxKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJdm9pZCBzZXRIb3N0SW5mZWN0aXZpdHkxKGRvdWJsZSB2YWx1ZSk7DQorDQorCS8qKg0KKwkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5Ib3N0IEluZmVjdGl2aXR5MjwvYj48L2VtPicgYXR0cmlidXRlLg0KKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyA8Y29kZT4iMC41IjwvY29kZT4uDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDxwPg0KKwkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5Ib3N0IEluZmVjdGl2aXR5MjwvZW0+JyBhdHRyaWJ1dGUgaXNuJ3QgY2xlYXIsDQorCSAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4NCisJICogPC9wPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+SG9zdCBJbmZlY3Rpdml0eTI8L2VtPicgYXR0cmlidXRlLg0KKwkgKiBAc2VlICNzZXRIb3N0SW5mZWN0aXZpdHkyKGRvdWJsZSkNCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLlZlY3RvclBhY2thZ2UjZ2V0RGVuZ3VlTW9kZWxfSG9zdEluZmVjdGl2aXR5MigpDQorCSAqIEBtb2RlbCBkZWZhdWx0PSIwLjUiDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCWRvdWJsZSBnZXRIb3N0SW5mZWN0aXZpdHkyKCk7DQorDQorCS8qKg0KKwkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLkRlbmd1ZU1vZGVsI2dldEhvc3RJbmZlY3Rpdml0eTIgPGVtPkhvc3QgSW5mZWN0aXZpdHkyPC9lbT59JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5Ib3N0IEluZmVjdGl2aXR5MjwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIEBzZWUgI2dldEhvc3RJbmZlY3Rpdml0eTIoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwl2b2lkIHNldEhvc3RJbmZlY3Rpdml0eTIoZG91YmxlIHZhbHVlKTsNCisNCisJLyoqDQorCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPkhvc3QgSW5mZWN0aXZpdHkzPC9iPjwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIGlzIDxjb2RlPiIwLjUiPC9jb2RlPi4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPHA+DQorCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPkhvc3QgSW5mZWN0aXZpdHkzPC9lbT4nIGF0dHJpYnV0ZSBpc24ndCBjbGVhciwNCisJICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLg0KKwkgKiA8L3A+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5Ib3N0IEluZmVjdGl2aXR5MzwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIEBzZWUgI3NldEhvc3RJbmZlY3Rpdml0eTMoZG91YmxlKQ0KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuVmVjdG9yUGFja2FnZSNnZXREZW5ndWVNb2RlbF9Ib3N0SW5mZWN0aXZpdHkzKCkNCisJICogQG1vZGVsIGRlZmF1bHQ9IjAuNSINCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJZG91YmxlIGdldEhvc3RJbmZlY3Rpdml0eTMoKTsNCisNCisJLyoqDQorCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWwjZ2V0SG9zdEluZmVjdGl2aXR5MyA8ZW0+SG9zdCBJbmZlY3Rpdml0eTM8L2VtPn0nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPkhvc3QgSW5mZWN0aXZpdHkzPC9lbT4nIGF0dHJpYnV0ZS4NCisJICogQHNlZSAjZ2V0SG9zdEluZmVjdGl2aXR5MygpDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXZvaWQgc2V0SG9zdEluZmVjdGl2aXR5Myhkb3VibGUgdmFsdWUpOw0KKw0KKwkvKioNCisJICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+SG9zdCBJbmZlY3Rpdml0eTQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4NCisJICogVGhlIGRlZmF1bHQgdmFsdWUgaXMgPGNvZGU+IjAuNSI8L2NvZGU+Lg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8cD4NCisJICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+SG9zdCBJbmZlY3Rpdml0eTQ8L2VtPicgYXR0cmlidXRlIGlzbid0IGNsZWFyLA0KKwkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uDQorCSAqIDwvcD4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPkhvc3QgSW5mZWN0aXZpdHk0PC9lbT4nIGF0dHJpYnV0ZS4NCisJICogQHNlZSAjc2V0SG9zdEluZmVjdGl2aXR5NChkb3VibGUpDQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5WZWN0b3JQYWNrYWdlI2dldERlbmd1ZU1vZGVsX0hvc3RJbmZlY3Rpdml0eTQoKQ0KKwkgKiBAbW9kZWwgZGVmYXVsdD0iMC41Ig0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlkb3VibGUgZ2V0SG9zdEluZmVjdGl2aXR5NCgpOw0KKw0KKwkvKioNCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbCNnZXRIb3N0SW5mZWN0aXZpdHk0IDxlbT5Ib3N0IEluZmVjdGl2aXR5NDwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+SG9zdCBJbmZlY3Rpdml0eTQ8L2VtPicgYXR0cmlidXRlLg0KKwkgKiBAc2VlICNnZXRIb3N0SW5mZWN0aXZpdHk0KCkNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJdm9pZCBzZXRIb3N0SW5mZWN0aXZpdHk0KGRvdWJsZSB2YWx1ZSk7DQorDQorCS8qKg0KKwkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5Ib3N0IFByaW1hcnkgSW5jdWJhdGlvbiBSYXRlMTwvYj48L2VtPicgYXR0cmlidXRlLg0KKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyA8Y29kZT4iMC4yIjwvY29kZT4uDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDxwPg0KKwkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5Ib3N0IFByaW1hcnkgSW5jdWJhdGlvbiBSYXRlMTwvZW0+JyBhdHRyaWJ1dGUgaXNuJ3QgY2xlYXIsDQorCSAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4NCisJICogPC9wPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+SG9zdCBQcmltYXJ5IEluY3ViYXRpb24gUmF0ZTE8L2VtPicgYXR0cmlidXRlLg0KKwkgKiBAc2VlICNzZXRIb3N0UHJpbWFyeUluY3ViYXRpb25SYXRlMShkb3VibGUpDQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5WZWN0b3JQYWNrYWdlI2dldERlbmd1ZU1vZGVsX0hvc3RQcmltYXJ5SW5jdWJhdGlvblJhdGUxKCkNCisJICogQG1vZGVsIGRlZmF1bHQ9IjAuMiINCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJZG91YmxlIGdldEhvc3RQcmltYXJ5SW5jdWJhdGlvblJhdGUxKCk7DQorDQorCS8qKg0KKwkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLkRlbmd1ZU1vZGVsI2dldEhvc3RQcmltYXJ5SW5jdWJhdGlvblJhdGUxIDxlbT5Ib3N0IFByaW1hcnkgSW5jdWJhdGlvbiBSYXRlMTwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+SG9zdCBQcmltYXJ5IEluY3ViYXRpb24gUmF0ZTE8L2VtPicgYXR0cmlidXRlLg0KKwkgKiBAc2VlICNnZXRIb3N0UHJpbWFyeUluY3ViYXRpb25SYXRlMSgpDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXZvaWQgc2V0SG9zdFByaW1hcnlJbmN1YmF0aW9uUmF0ZTEoZG91YmxlIHZhbHVlKTsNCisNCisJLyoqDQorCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPkhvc3QgUHJpbWFyeSBJbmN1YmF0aW9uIFJhdGUyPC9iPjwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIGlzIDxjb2RlPiIwLjIiPC9jb2RlPi4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPHA+DQorCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPkhvc3QgUHJpbWFyeSBJbmN1YmF0aW9uIFJhdGUyPC9lbT4nIGF0dHJpYnV0ZSBpc24ndCBjbGVhciwNCisJICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLg0KKwkgKiA8L3A+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5Ib3N0IFByaW1hcnkgSW5jdWJhdGlvbiBSYXRlMjwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIEBzZWUgI3NldEhvc3RQcmltYXJ5SW5jdWJhdGlvblJhdGUyKGRvdWJsZSkNCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLlZlY3RvclBhY2thZ2UjZ2V0RGVuZ3VlTW9kZWxfSG9zdFByaW1hcnlJbmN1YmF0aW9uUmF0ZTIoKQ0KKwkgKiBAbW9kZWwgZGVmYXVsdD0iMC4yIg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlkb3VibGUgZ2V0SG9zdFByaW1hcnlJbmN1YmF0aW9uUmF0ZTIoKTsNCisNCisJLyoqDQorCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWwjZ2V0SG9zdFByaW1hcnlJbmN1YmF0aW9uUmF0ZTIgPGVtPkhvc3QgUHJpbWFyeSBJbmN1YmF0aW9uIFJhdGUyPC9lbT59JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5Ib3N0IFByaW1hcnkgSW5jdWJhdGlvbiBSYXRlMjwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIEBzZWUgI2dldEhvc3RQcmltYXJ5SW5jdWJhdGlvblJhdGUyKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJdm9pZCBzZXRIb3N0UHJpbWFyeUluY3ViYXRpb25SYXRlMihkb3VibGUgdmFsdWUpOw0KKw0KKwkvKioNCisJICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+SG9zdCBQcmltYXJ5IEluY3ViYXRpb24gUmF0ZTM8L2I+PC9lbT4nIGF0dHJpYnV0ZS4NCisJICogVGhlIGRlZmF1bHQgdmFsdWUgaXMgPGNvZGU+IjAuMiI8L2NvZGU+Lg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8cD4NCisJICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+SG9zdCBQcmltYXJ5IEluY3ViYXRpb24gUmF0ZTM8L2VtPicgYXR0cmlidXRlIGlzbid0IGNsZWFyLA0KKwkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uDQorCSAqIDwvcD4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPkhvc3QgUHJpbWFyeSBJbmN1YmF0aW9uIFJhdGUzPC9lbT4nIGF0dHJpYnV0ZS4NCisJICogQHNlZSAjc2V0SG9zdFByaW1hcnlJbmN1YmF0aW9uUmF0ZTMoZG91YmxlKQ0KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuVmVjdG9yUGFja2FnZSNnZXREZW5ndWVNb2RlbF9Ib3N0UHJpbWFyeUluY3ViYXRpb25SYXRlMygpDQorCSAqIEBtb2RlbCBkZWZhdWx0PSIwLjIiDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCWRvdWJsZSBnZXRIb3N0UHJpbWFyeUluY3ViYXRpb25SYXRlMygpOw0KKw0KKwkvKioNCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbCNnZXRIb3N0UHJpbWFyeUluY3ViYXRpb25SYXRlMyA8ZW0+SG9zdCBQcmltYXJ5IEluY3ViYXRpb24gUmF0ZTM8L2VtPn0nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPkhvc3QgUHJpbWFyeSBJbmN1YmF0aW9uIFJhdGUzPC9lbT4nIGF0dHJpYnV0ZS4NCisJICogQHNlZSAjZ2V0SG9zdFByaW1hcnlJbmN1YmF0aW9uUmF0ZTMoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwl2b2lkIHNldEhvc3RQcmltYXJ5SW5jdWJhdGlvblJhdGUzKGRvdWJsZSB2YWx1ZSk7DQorDQorCS8qKg0KKwkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5Ib3N0IFByaW1hcnkgSW5jdWJhdGlvbiBSYXRlNDwvYj48L2VtPicgYXR0cmlidXRlLg0KKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyA8Y29kZT4iMC4yIjwvY29kZT4uDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDxwPg0KKwkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5Ib3N0IFByaW1hcnkgSW5jdWJhdGlvbiBSYXRlNDwvZW0+JyBhdHRyaWJ1dGUgaXNuJ3QgY2xlYXIsDQorCSAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4NCisJICogPC9wPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+SG9zdCBQcmltYXJ5IEluY3ViYXRpb24gUmF0ZTQ8L2VtPicgYXR0cmlidXRlLg0KKwkgKiBAc2VlICNzZXRIb3N0UHJpbWFyeUluY3ViYXRpb25SYXRlNChkb3VibGUpDQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5WZWN0b3JQYWNrYWdlI2dldERlbmd1ZU1vZGVsX0hvc3RQcmltYXJ5SW5jdWJhdGlvblJhdGU0KCkNCisJICogQG1vZGVsIGRlZmF1bHQ9IjAuMiINCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJZG91YmxlIGdldEhvc3RQcmltYXJ5SW5jdWJhdGlvblJhdGU0KCk7DQorDQorCS8qKg0KKwkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLkRlbmd1ZU1vZGVsI2dldEhvc3RQcmltYXJ5SW5jdWJhdGlvblJhdGU0IDxlbT5Ib3N0IFByaW1hcnkgSW5jdWJhdGlvbiBSYXRlNDwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+SG9zdCBQcmltYXJ5IEluY3ViYXRpb24gUmF0ZTQ8L2VtPicgYXR0cmlidXRlLg0KKwkgKiBAc2VlICNnZXRIb3N0UHJpbWFyeUluY3ViYXRpb25SYXRlNCgpDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXZvaWQgc2V0SG9zdFByaW1hcnlJbmN1YmF0aW9uUmF0ZTQoZG91YmxlIHZhbHVlKTsNCisNCisJLyoqDQorCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPkhvc3QgUHJpbWFyeSBSZWNvdmVyeSBSYXRlMTwvYj48L2VtPicgYXR0cmlidXRlLg0KKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyA8Y29kZT4iMC4xNCI8L2NvZGU+Lg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8cD4NCisJICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+SG9zdCBQcmltYXJ5IFJlY292ZXJ5IFJhdGUxPC9lbT4nIGF0dHJpYnV0ZSBpc24ndCBjbGVhciwNCisJICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLg0KKwkgKiA8L3A+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5Ib3N0IFByaW1hcnkgUmVjb3ZlcnkgUmF0ZTE8L2VtPicgYXR0cmlidXRlLg0KKwkgKiBAc2VlICNzZXRIb3N0UHJpbWFyeVJlY292ZXJ5UmF0ZTEoZG91YmxlKQ0KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuVmVjdG9yUGFja2FnZSNnZXREZW5ndWVNb2RlbF9Ib3N0UHJpbWFyeVJlY292ZXJ5UmF0ZTEoKQ0KKwkgKiBAbW9kZWwgZGVmYXVsdD0iMC4xNCINCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJZG91YmxlIGdldEhvc3RQcmltYXJ5UmVjb3ZlcnlSYXRlMSgpOw0KKw0KKwkvKioNCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbCNnZXRIb3N0UHJpbWFyeVJlY292ZXJ5UmF0ZTEgPGVtPkhvc3QgUHJpbWFyeSBSZWNvdmVyeSBSYXRlMTwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+SG9zdCBQcmltYXJ5IFJlY292ZXJ5IFJhdGUxPC9lbT4nIGF0dHJpYnV0ZS4NCisJICogQHNlZSAjZ2V0SG9zdFByaW1hcnlSZWNvdmVyeVJhdGUxKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJdm9pZCBzZXRIb3N0UHJpbWFyeVJlY292ZXJ5UmF0ZTEoZG91YmxlIHZhbHVlKTsNCisNCisJLyoqDQorCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPkhvc3QgUHJpbWFyeSBSZWNvdmVyeSBSYXRlMjwvYj48L2VtPicgYXR0cmlidXRlLg0KKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyA8Y29kZT4iMC4xNCI8L2NvZGU+Lg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8cD4NCisJICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+SG9zdCBQcmltYXJ5IFJlY292ZXJ5IFJhdGUyPC9lbT4nIGF0dHJpYnV0ZSBpc24ndCBjbGVhciwNCisJICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLg0KKwkgKiA8L3A+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5Ib3N0IFByaW1hcnkgUmVjb3ZlcnkgUmF0ZTI8L2VtPicgYXR0cmlidXRlLg0KKwkgKiBAc2VlICNzZXRIb3N0UHJpbWFyeVJlY292ZXJ5UmF0ZTIoZG91YmxlKQ0KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuVmVjdG9yUGFja2FnZSNnZXREZW5ndWVNb2RlbF9Ib3N0UHJpbWFyeVJlY292ZXJ5UmF0ZTIoKQ0KKwkgKiBAbW9kZWwgZGVmYXVsdD0iMC4xNCINCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJZG91YmxlIGdldEhvc3RQcmltYXJ5UmVjb3ZlcnlSYXRlMigpOw0KKw0KKwkvKioNCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbCNnZXRIb3N0UHJpbWFyeVJlY292ZXJ5UmF0ZTIgPGVtPkhvc3QgUHJpbWFyeSBSZWNvdmVyeSBSYXRlMjwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+SG9zdCBQcmltYXJ5IFJlY292ZXJ5IFJhdGUyPC9lbT4nIGF0dHJpYnV0ZS4NCisJICogQHNlZSAjZ2V0SG9zdFByaW1hcnlSZWNvdmVyeVJhdGUyKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJdm9pZCBzZXRIb3N0UHJpbWFyeVJlY292ZXJ5UmF0ZTIoZG91YmxlIHZhbHVlKTsNCisNCisJLyoqDQorCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPkhvc3QgUHJpbWFyeSBSZWNvdmVyeSBSYXRlMzwvYj48L2VtPicgYXR0cmlidXRlLg0KKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyA8Y29kZT4iMC4xNCI8L2NvZGU+Lg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8cD4NCisJICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+SG9zdCBQcmltYXJ5IFJlY292ZXJ5IFJhdGUzPC9lbT4nIGF0dHJpYnV0ZSBpc24ndCBjbGVhciwNCisJICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLg0KKwkgKiA8L3A+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5Ib3N0IFByaW1hcnkgUmVjb3ZlcnkgUmF0ZTM8L2VtPicgYXR0cmlidXRlLg0KKwkgKiBAc2VlICNzZXRIb3N0UHJpbWFyeVJlY292ZXJ5UmF0ZTMoZG91YmxlKQ0KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuVmVjdG9yUGFja2FnZSNnZXREZW5ndWVNb2RlbF9Ib3N0UHJpbWFyeVJlY292ZXJ5UmF0ZTMoKQ0KKwkgKiBAbW9kZWwgZGVmYXVsdD0iMC4xNCINCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJZG91YmxlIGdldEhvc3RQcmltYXJ5UmVjb3ZlcnlSYXRlMygpOw0KKw0KKwkvKioNCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbCNnZXRIb3N0UHJpbWFyeVJlY292ZXJ5UmF0ZTMgPGVtPkhvc3QgUHJpbWFyeSBSZWNvdmVyeSBSYXRlMzwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+SG9zdCBQcmltYXJ5IFJlY292ZXJ5IFJhdGUzPC9lbT4nIGF0dHJpYnV0ZS4NCisJICogQHNlZSAjZ2V0SG9zdFByaW1hcnlSZWNvdmVyeVJhdGUzKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJdm9pZCBzZXRIb3N0UHJpbWFyeVJlY292ZXJ5UmF0ZTMoZG91YmxlIHZhbHVlKTsNCisNCisJLyoqDQorCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPkhvc3QgUHJpbWFyeSBSZWNvdmVyeSBSYXRlNDwvYj48L2VtPicgYXR0cmlidXRlLg0KKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyA8Y29kZT4iMC4xNCI8L2NvZGU+Lg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8cD4NCisJICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+SG9zdCBQcmltYXJ5IFJlY292ZXJ5IFJhdGU0PC9lbT4nIGF0dHJpYnV0ZSBpc24ndCBjbGVhciwNCisJICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLg0KKwkgKiA8L3A+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5Ib3N0IFByaW1hcnkgUmVjb3ZlcnkgUmF0ZTQ8L2VtPicgYXR0cmlidXRlLg0KKwkgKiBAc2VlICNzZXRIb3N0UHJpbWFyeVJlY292ZXJ5UmF0ZTQoZG91YmxlKQ0KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuVmVjdG9yUGFja2FnZSNnZXREZW5ndWVNb2RlbF9Ib3N0UHJpbWFyeVJlY292ZXJ5UmF0ZTQoKQ0KKwkgKiBAbW9kZWwgZGVmYXVsdD0iMC4xNCINCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJZG91YmxlIGdldEhvc3RQcmltYXJ5UmVjb3ZlcnlSYXRlNCgpOw0KKw0KKwkvKioNCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbCNnZXRIb3N0UHJpbWFyeVJlY292ZXJ5UmF0ZTQgPGVtPkhvc3QgUHJpbWFyeSBSZWNvdmVyeSBSYXRlNDwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+SG9zdCBQcmltYXJ5IFJlY292ZXJ5IFJhdGU0PC9lbT4nIGF0dHJpYnV0ZS4NCisJICogQHNlZSAjZ2V0SG9zdFByaW1hcnlSZWNvdmVyeVJhdGU0KCkNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJdm9pZCBzZXRIb3N0UHJpbWFyeVJlY292ZXJ5UmF0ZTQoZG91YmxlIHZhbHVlKTsNCisNCisJLyoqDQorCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPkhvc3QgUHJpbWFyeSBJbW11bml0eSBMb3NzIFJhdGUxPC9iPjwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIGlzIDxjb2RlPiIwLjAyNCI8L2NvZGU+Lg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8cD4NCisJICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+SG9zdCBQcmltYXJ5IEltbXVuaXR5IExvc3MgUmF0ZTE8L2VtPicgYXR0cmlidXRlIGlzbid0IGNsZWFyLA0KKwkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uDQorCSAqIDwvcD4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPkhvc3QgUHJpbWFyeSBJbW11bml0eSBMb3NzIFJhdGUxPC9lbT4nIGF0dHJpYnV0ZS4NCisJICogQHNlZSAjc2V0SG9zdFByaW1hcnlJbW11bml0eUxvc3NSYXRlMShkb3VibGUpDQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5WZWN0b3JQYWNrYWdlI2dldERlbmd1ZU1vZGVsX0hvc3RQcmltYXJ5SW1tdW5pdHlMb3NzUmF0ZTEoKQ0KKwkgKiBAbW9kZWwgZGVmYXVsdD0iMC4wMjQiDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCWRvdWJsZSBnZXRIb3N0UHJpbWFyeUltbXVuaXR5TG9zc1JhdGUxKCk7DQorDQorCS8qKg0KKwkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLkRlbmd1ZU1vZGVsI2dldEhvc3RQcmltYXJ5SW1tdW5pdHlMb3NzUmF0ZTEgPGVtPkhvc3QgUHJpbWFyeSBJbW11bml0eSBMb3NzIFJhdGUxPC9lbT59JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5Ib3N0IFByaW1hcnkgSW1tdW5pdHkgTG9zcyBSYXRlMTwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIEBzZWUgI2dldEhvc3RQcmltYXJ5SW1tdW5pdHlMb3NzUmF0ZTEoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwl2b2lkIHNldEhvc3RQcmltYXJ5SW1tdW5pdHlMb3NzUmF0ZTEoZG91YmxlIHZhbHVlKTsNCisNCisJLyoqDQorCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPkhvc3QgUHJpbWFyeSBJbW11bml0eSBMb3NzIFJhdGUyPC9iPjwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIGlzIDxjb2RlPiIwLjAyNCI8L2NvZGU+Lg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8cD4NCisJICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+SG9zdCBQcmltYXJ5IEltbXVuaXR5IExvc3MgUmF0ZTI8L2VtPicgYXR0cmlidXRlIGlzbid0IGNsZWFyLA0KKwkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uDQorCSAqIDwvcD4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPkhvc3QgUHJpbWFyeSBJbW11bml0eSBMb3NzIFJhdGUyPC9lbT4nIGF0dHJpYnV0ZS4NCisJICogQHNlZSAjc2V0SG9zdFByaW1hcnlJbW11bml0eUxvc3NSYXRlMihkb3VibGUpDQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5WZWN0b3JQYWNrYWdlI2dldERlbmd1ZU1vZGVsX0hvc3RQcmltYXJ5SW1tdW5pdHlMb3NzUmF0ZTIoKQ0KKwkgKiBAbW9kZWwgZGVmYXVsdD0iMC4wMjQiDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCWRvdWJsZSBnZXRIb3N0UHJpbWFyeUltbXVuaXR5TG9zc1JhdGUyKCk7DQorDQorCS8qKg0KKwkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLkRlbmd1ZU1vZGVsI2dldEhvc3RQcmltYXJ5SW1tdW5pdHlMb3NzUmF0ZTIgPGVtPkhvc3QgUHJpbWFyeSBJbW11bml0eSBMb3NzIFJhdGUyPC9lbT59JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5Ib3N0IFByaW1hcnkgSW1tdW5pdHkgTG9zcyBSYXRlMjwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIEBzZWUgI2dldEhvc3RQcmltYXJ5SW1tdW5pdHlMb3NzUmF0ZTIoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwl2b2lkIHNldEhvc3RQcmltYXJ5SW1tdW5pdHlMb3NzUmF0ZTIoZG91YmxlIHZhbHVlKTsNCisNCisJLyoqDQorCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPkhvc3QgUHJpbWFyeSBJbW11bml0eSBMb3NzIFJhdGUzPC9iPjwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIGlzIDxjb2RlPiIwLjAyNCI8L2NvZGU+Lg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8cD4NCisJICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+SG9zdCBQcmltYXJ5IEltbXVuaXR5IExvc3MgUmF0ZTM8L2VtPicgYXR0cmlidXRlIGlzbid0IGNsZWFyLA0KKwkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uDQorCSAqIDwvcD4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPkhvc3QgUHJpbWFyeSBJbW11bml0eSBMb3NzIFJhdGUzPC9lbT4nIGF0dHJpYnV0ZS4NCisJICogQHNlZSAjc2V0SG9zdFByaW1hcnlJbW11bml0eUxvc3NSYXRlMyhkb3VibGUpDQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5WZWN0b3JQYWNrYWdlI2dldERlbmd1ZU1vZGVsX0hvc3RQcmltYXJ5SW1tdW5pdHlMb3NzUmF0ZTMoKQ0KKwkgKiBAbW9kZWwgZGVmYXVsdD0iMC4wMjQiDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCWRvdWJsZSBnZXRIb3N0UHJpbWFyeUltbXVuaXR5TG9zc1JhdGUzKCk7DQorDQorCS8qKg0KKwkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLkRlbmd1ZU1vZGVsI2dldEhvc3RQcmltYXJ5SW1tdW5pdHlMb3NzUmF0ZTMgPGVtPkhvc3QgUHJpbWFyeSBJbW11bml0eSBMb3NzIFJhdGUzPC9lbT59JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5Ib3N0IFByaW1hcnkgSW1tdW5pdHkgTG9zcyBSYXRlMzwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIEBzZWUgI2dldEhvc3RQcmltYXJ5SW1tdW5pdHlMb3NzUmF0ZTMoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwl2b2lkIHNldEhvc3RQcmltYXJ5SW1tdW5pdHlMb3NzUmF0ZTMoZG91YmxlIHZhbHVlKTsNCisNCisJLyoqDQorCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPkhvc3QgUHJpbWFyeSBJbW11bml0eSBMb3NzIFJhdGU0PC9iPjwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIGlzIDxjb2RlPiIwLjAyNCI8L2NvZGU+Lg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8cD4NCisJICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+SG9zdCBQcmltYXJ5IEltbXVuaXR5IExvc3MgUmF0ZTQ8L2VtPicgYXR0cmlidXRlIGlzbid0IGNsZWFyLA0KKwkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uDQorCSAqIDwvcD4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPkhvc3QgUHJpbWFyeSBJbW11bml0eSBMb3NzIFJhdGU0PC9lbT4nIGF0dHJpYnV0ZS4NCisJICogQHNlZSAjc2V0SG9zdFByaW1hcnlJbW11bml0eUxvc3NSYXRlNChkb3VibGUpDQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5WZWN0b3JQYWNrYWdlI2dldERlbmd1ZU1vZGVsX0hvc3RQcmltYXJ5SW1tdW5pdHlMb3NzUmF0ZTQoKQ0KKwkgKiBAbW9kZWwgZGVmYXVsdD0iMC4wMjQiDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCWRvdWJsZSBnZXRIb3N0UHJpbWFyeUltbXVuaXR5TG9zc1JhdGU0KCk7DQorDQorCS8qKg0KKwkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLkRlbmd1ZU1vZGVsI2dldEhvc3RQcmltYXJ5SW1tdW5pdHlMb3NzUmF0ZTQgPGVtPkhvc3QgUHJpbWFyeSBJbW11bml0eSBMb3NzIFJhdGU0PC9lbT59JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5Ib3N0IFByaW1hcnkgSW1tdW5pdHkgTG9zcyBSYXRlNDwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIEBzZWUgI2dldEhvc3RQcmltYXJ5SW1tdW5pdHlMb3NzUmF0ZTQoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwl2b2lkIHNldEhvc3RQcmltYXJ5SW1tdW5pdHlMb3NzUmF0ZTQoZG91YmxlIHZhbHVlKTsNCisNCisJLyoqDQorCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPkhvc3QgUHJpbWFyeSBEaXNlYXNlIERlYXRoIFJhdGUxPC9iPjwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIGlzIDxjb2RlPiIwLjAwMDAwMDEiPC9jb2RlPi4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPHA+DQorCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPkhvc3QgUHJpbWFyeSBEaXNlYXNlIERlYXRoIFJhdGUxPC9lbT4nIGF0dHJpYnV0ZSBpc24ndCBjbGVhciwNCisJICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLg0KKwkgKiA8L3A+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5Ib3N0IFByaW1hcnkgRGlzZWFzZSBEZWF0aCBSYXRlMTwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIEBzZWUgI3NldEhvc3RQcmltYXJ5RGlzZWFzZURlYXRoUmF0ZTEoZG91YmxlKQ0KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuVmVjdG9yUGFja2FnZSNnZXREZW5ndWVNb2RlbF9Ib3N0UHJpbWFyeURpc2Vhc2VEZWF0aFJhdGUxKCkNCisJICogQG1vZGVsIGRlZmF1bHQ9IjAuMDAwMDAwMSINCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJZG91YmxlIGdldEhvc3RQcmltYXJ5RGlzZWFzZURlYXRoUmF0ZTEoKTsNCisNCisJLyoqDQorCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWwjZ2V0SG9zdFByaW1hcnlEaXNlYXNlRGVhdGhSYXRlMSA8ZW0+SG9zdCBQcmltYXJ5IERpc2Vhc2UgRGVhdGggUmF0ZTE8L2VtPn0nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPkhvc3QgUHJpbWFyeSBEaXNlYXNlIERlYXRoIFJhdGUxPC9lbT4nIGF0dHJpYnV0ZS4NCisJICogQHNlZSAjZ2V0SG9zdFByaW1hcnlEaXNlYXNlRGVhdGhSYXRlMSgpDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXZvaWQgc2V0SG9zdFByaW1hcnlEaXNlYXNlRGVhdGhSYXRlMShkb3VibGUgdmFsdWUpOw0KKw0KKwkvKioNCisJICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+SG9zdCBQcmltYXJ5IERpc2Vhc2UgRGVhdGggUmF0ZTI8L2I+PC9lbT4nIGF0dHJpYnV0ZS4NCisJICogVGhlIGRlZmF1bHQgdmFsdWUgaXMgPGNvZGU+IjAuMDAwMDAwMSI8L2NvZGU+Lg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8cD4NCisJICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+SG9zdCBQcmltYXJ5IERpc2Vhc2UgRGVhdGggUmF0ZTI8L2VtPicgYXR0cmlidXRlIGlzbid0IGNsZWFyLA0KKwkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uDQorCSAqIDwvcD4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPkhvc3QgUHJpbWFyeSBEaXNlYXNlIERlYXRoIFJhdGUyPC9lbT4nIGF0dHJpYnV0ZS4NCisJICogQHNlZSAjc2V0SG9zdFByaW1hcnlEaXNlYXNlRGVhdGhSYXRlMihkb3VibGUpDQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5WZWN0b3JQYWNrYWdlI2dldERlbmd1ZU1vZGVsX0hvc3RQcmltYXJ5RGlzZWFzZURlYXRoUmF0ZTIoKQ0KKwkgKiBAbW9kZWwgZGVmYXVsdD0iMC4wMDAwMDAxIg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlkb3VibGUgZ2V0SG9zdFByaW1hcnlEaXNlYXNlRGVhdGhSYXRlMigpOw0KKw0KKwkvKioNCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbCNnZXRIb3N0UHJpbWFyeURpc2Vhc2VEZWF0aFJhdGUyIDxlbT5Ib3N0IFByaW1hcnkgRGlzZWFzZSBEZWF0aCBSYXRlMjwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+SG9zdCBQcmltYXJ5IERpc2Vhc2UgRGVhdGggUmF0ZTI8L2VtPicgYXR0cmlidXRlLg0KKwkgKiBAc2VlICNnZXRIb3N0UHJpbWFyeURpc2Vhc2VEZWF0aFJhdGUyKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJdm9pZCBzZXRIb3N0UHJpbWFyeURpc2Vhc2VEZWF0aFJhdGUyKGRvdWJsZSB2YWx1ZSk7DQorDQorCS8qKg0KKwkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5Ib3N0IFByaW1hcnkgRGlzZWFzZSBEZWF0aCBSYXRlMzwvYj48L2VtPicgYXR0cmlidXRlLg0KKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyA8Y29kZT4iMC4wMDAwMDAxIjwvY29kZT4uDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDxwPg0KKwkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5Ib3N0IFByaW1hcnkgRGlzZWFzZSBEZWF0aCBSYXRlMzwvZW0+JyBhdHRyaWJ1dGUgaXNuJ3QgY2xlYXIsDQorCSAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4NCisJICogPC9wPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+SG9zdCBQcmltYXJ5IERpc2Vhc2UgRGVhdGggUmF0ZTM8L2VtPicgYXR0cmlidXRlLg0KKwkgKiBAc2VlICNzZXRIb3N0UHJpbWFyeURpc2Vhc2VEZWF0aFJhdGUzKGRvdWJsZSkNCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLlZlY3RvclBhY2thZ2UjZ2V0RGVuZ3VlTW9kZWxfSG9zdFByaW1hcnlEaXNlYXNlRGVhdGhSYXRlMygpDQorCSAqIEBtb2RlbCBkZWZhdWx0PSIwLjAwMDAwMDEiDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCWRvdWJsZSBnZXRIb3N0UHJpbWFyeURpc2Vhc2VEZWF0aFJhdGUzKCk7DQorDQorCS8qKg0KKwkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLkRlbmd1ZU1vZGVsI2dldEhvc3RQcmltYXJ5RGlzZWFzZURlYXRoUmF0ZTMgPGVtPkhvc3QgUHJpbWFyeSBEaXNlYXNlIERlYXRoIFJhdGUzPC9lbT59JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5Ib3N0IFByaW1hcnkgRGlzZWFzZSBEZWF0aCBSYXRlMzwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIEBzZWUgI2dldEhvc3RQcmltYXJ5RGlzZWFzZURlYXRoUmF0ZTMoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwl2b2lkIHNldEhvc3RQcmltYXJ5RGlzZWFzZURlYXRoUmF0ZTMoZG91YmxlIHZhbHVlKTsNCisNCisJLyoqDQorCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPkhvc3QgUHJpbWFyeSBEaXNlYXNlIERlYXRoIFJhdGU0PC9iPjwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIGlzIDxjb2RlPiIwLjAwMDAwMDEiPC9jb2RlPi4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPHA+DQorCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPkhvc3QgUHJpbWFyeSBEaXNlYXNlIERlYXRoIFJhdGU0PC9lbT4nIGF0dHJpYnV0ZSBpc24ndCBjbGVhciwNCisJICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLg0KKwkgKiA8L3A+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5Ib3N0IFByaW1hcnkgRGlzZWFzZSBEZWF0aCBSYXRlNDwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIEBzZWUgI3NldEhvc3RQcmltYXJ5RGlzZWFzZURlYXRoUmF0ZTQoZG91YmxlKQ0KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuVmVjdG9yUGFja2FnZSNnZXREZW5ndWVNb2RlbF9Ib3N0UHJpbWFyeURpc2Vhc2VEZWF0aFJhdGU0KCkNCisJICogQG1vZGVsIGRlZmF1bHQ9IjAuMDAwMDAwMSINCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJZG91YmxlIGdldEhvc3RQcmltYXJ5RGlzZWFzZURlYXRoUmF0ZTQoKTsNCisNCisJLyoqDQorCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWwjZ2V0SG9zdFByaW1hcnlEaXNlYXNlRGVhdGhSYXRlNCA8ZW0+SG9zdCBQcmltYXJ5IERpc2Vhc2UgRGVhdGggUmF0ZTQ8L2VtPn0nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPkhvc3QgUHJpbWFyeSBEaXNlYXNlIERlYXRoIFJhdGU0PC9lbT4nIGF0dHJpYnV0ZS4NCisJICogQHNlZSAjZ2V0SG9zdFByaW1hcnlEaXNlYXNlRGVhdGhSYXRlNCgpDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXZvaWQgc2V0SG9zdFByaW1hcnlEaXNlYXNlRGVhdGhSYXRlNChkb3VibGUgdmFsdWUpOw0KKw0KKwkvKioNCisJICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+SG9zdCBBREUxMjwvYj48L2VtPicgYXR0cmlidXRlLg0KKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyA8Y29kZT4iMS44IjwvY29kZT4uDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDxwPg0KKwkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5Ib3N0IEFERTEyPC9lbT4nIGF0dHJpYnV0ZSBpc24ndCBjbGVhciwNCisJICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLg0KKwkgKiA8L3A+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5Ib3N0IEFERTEyPC9lbT4nIGF0dHJpYnV0ZS4NCisJICogQHNlZSAjc2V0SG9zdEFERTEyKGRvdWJsZSkNCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLlZlY3RvclBhY2thZ2UjZ2V0RGVuZ3VlTW9kZWxfSG9zdEFERTEyKCkNCisJICogQG1vZGVsIGRlZmF1bHQ9IjEuOCINCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJZG91YmxlIGdldEhvc3RBREUxMigpOw0KKw0KKwkvKioNCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbCNnZXRIb3N0QURFMTIgPGVtPkhvc3QgQURFMTI8L2VtPn0nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPkhvc3QgQURFMTI8L2VtPicgYXR0cmlidXRlLg0KKwkgKiBAc2VlICNnZXRIb3N0QURFMTIoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwl2b2lkIHNldEhvc3RBREUxMihkb3VibGUgdmFsdWUpOw0KKw0KKwkvKioNCisJICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+SG9zdCBBREUxMzwvYj48L2VtPicgYXR0cmlidXRlLg0KKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyA8Y29kZT4iMS44IjwvY29kZT4uDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDxwPg0KKwkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5Ib3N0IEFERTEzPC9lbT4nIGF0dHJpYnV0ZSBpc24ndCBjbGVhciwNCisJICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLg0KKwkgKiA8L3A+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5Ib3N0IEFERTEzPC9lbT4nIGF0dHJpYnV0ZS4NCisJICogQHNlZSAjc2V0SG9zdEFERTEzKGRvdWJsZSkNCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLlZlY3RvclBhY2thZ2UjZ2V0RGVuZ3VlTW9kZWxfSG9zdEFERTEzKCkNCisJICogQG1vZGVsIGRlZmF1bHQ9IjEuOCINCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJZG91YmxlIGdldEhvc3RBREUxMygpOw0KKw0KKwkvKioNCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbCNnZXRIb3N0QURFMTMgPGVtPkhvc3QgQURFMTM8L2VtPn0nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPkhvc3QgQURFMTM8L2VtPicgYXR0cmlidXRlLg0KKwkgKiBAc2VlICNnZXRIb3N0QURFMTMoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwl2b2lkIHNldEhvc3RBREUxMyhkb3VibGUgdmFsdWUpOw0KKw0KKwkvKioNCisJICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+SG9zdCBBREUxNDwvYj48L2VtPicgYXR0cmlidXRlLg0KKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyA8Y29kZT4iMS44IjwvY29kZT4uDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDxwPg0KKwkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5Ib3N0IEFERTE0PC9lbT4nIGF0dHJpYnV0ZSBpc24ndCBjbGVhciwNCisJICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLg0KKwkgKiA8L3A+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5Ib3N0IEFERTE0PC9lbT4nIGF0dHJpYnV0ZS4NCisJICogQHNlZSAjc2V0SG9zdEFERTE0KGRvdWJsZSkNCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLlZlY3RvclBhY2thZ2UjZ2V0RGVuZ3VlTW9kZWxfSG9zdEFERTE0KCkNCisJICogQG1vZGVsIGRlZmF1bHQ9IjEuOCINCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJZG91YmxlIGdldEhvc3RBREUxNCgpOw0KKw0KKwkvKioNCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbCNnZXRIb3N0QURFMTQgPGVtPkhvc3QgQURFMTQ8L2VtPn0nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPkhvc3QgQURFMTQ8L2VtPicgYXR0cmlidXRlLg0KKwkgKiBAc2VlICNnZXRIb3N0QURFMTQoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwl2b2lkIHNldEhvc3RBREUxNChkb3VibGUgdmFsdWUpOw0KKw0KKwkvKioNCisJICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+SG9zdCBBREUyMTwvYj48L2VtPicgYXR0cmlidXRlLg0KKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyA8Y29kZT4iMS44IjwvY29kZT4uDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDxwPg0KKwkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5Ib3N0IEFERTIxPC9lbT4nIGF0dHJpYnV0ZSBpc24ndCBjbGVhciwNCisJICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLg0KKwkgKiA8L3A+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5Ib3N0IEFERTIxPC9lbT4nIGF0dHJpYnV0ZS4NCisJICogQHNlZSAjc2V0SG9zdEFERTIxKGRvdWJsZSkNCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLlZlY3RvclBhY2thZ2UjZ2V0RGVuZ3VlTW9kZWxfSG9zdEFERTIxKCkNCisJICogQG1vZGVsIGRlZmF1bHQ9IjEuOCINCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJZG91YmxlIGdldEhvc3RBREUyMSgpOw0KKw0KKwkvKioNCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbCNnZXRIb3N0QURFMjEgPGVtPkhvc3QgQURFMjE8L2VtPn0nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPkhvc3QgQURFMjE8L2VtPicgYXR0cmlidXRlLg0KKwkgKiBAc2VlICNnZXRIb3N0QURFMjEoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwl2b2lkIHNldEhvc3RBREUyMShkb3VibGUgdmFsdWUpOw0KKw0KKwkvKioNCisJICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+SG9zdCBBREUyMzwvYj48L2VtPicgYXR0cmlidXRlLg0KKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyA8Y29kZT4iMS44IjwvY29kZT4uDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDxwPg0KKwkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5Ib3N0IEFERTIzPC9lbT4nIGF0dHJpYnV0ZSBpc24ndCBjbGVhciwNCisJICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLg0KKwkgKiA8L3A+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5Ib3N0IEFERTIzPC9lbT4nIGF0dHJpYnV0ZS4NCisJICogQHNlZSAjc2V0SG9zdEFERTIzKGRvdWJsZSkNCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLlZlY3RvclBhY2thZ2UjZ2V0RGVuZ3VlTW9kZWxfSG9zdEFERTIzKCkNCisJICogQG1vZGVsIGRlZmF1bHQ9IjEuOCINCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJZG91YmxlIGdldEhvc3RBREUyMygpOw0KKw0KKwkvKioNCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbCNnZXRIb3N0QURFMjMgPGVtPkhvc3QgQURFMjM8L2VtPn0nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPkhvc3QgQURFMjM8L2VtPicgYXR0cmlidXRlLg0KKwkgKiBAc2VlICNnZXRIb3N0QURFMjMoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwl2b2lkIHNldEhvc3RBREUyMyhkb3VibGUgdmFsdWUpOw0KKw0KKwkvKioNCisJICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+SG9zdCBBREUyNDwvYj48L2VtPicgYXR0cmlidXRlLg0KKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyA8Y29kZT4iMS44IjwvY29kZT4uDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDxwPg0KKwkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5Ib3N0IEFERTI0PC9lbT4nIGF0dHJpYnV0ZSBpc24ndCBjbGVhciwNCisJICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLg0KKwkgKiA8L3A+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5Ib3N0IEFERTI0PC9lbT4nIGF0dHJpYnV0ZS4NCisJICogQHNlZSAjc2V0SG9zdEFERTI0KGRvdWJsZSkNCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLlZlY3RvclBhY2thZ2UjZ2V0RGVuZ3VlTW9kZWxfSG9zdEFERTI0KCkNCisJICogQG1vZGVsIGRlZmF1bHQ9IjEuOCINCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJZG91YmxlIGdldEhvc3RBREUyNCgpOw0KKw0KKwkvKioNCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbCNnZXRIb3N0QURFMjQgPGVtPkhvc3QgQURFMjQ8L2VtPn0nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPkhvc3QgQURFMjQ8L2VtPicgYXR0cmlidXRlLg0KKwkgKiBAc2VlICNnZXRIb3N0QURFMjQoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwl2b2lkIHNldEhvc3RBREUyNChkb3VibGUgdmFsdWUpOw0KKw0KKwkvKioNCisJICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+SG9zdCBBREUzMTwvYj48L2VtPicgYXR0cmlidXRlLg0KKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyA8Y29kZT4iMS44IjwvY29kZT4uDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDxwPg0KKwkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5Ib3N0IEFERTMxPC9lbT4nIGF0dHJpYnV0ZSBpc24ndCBjbGVhciwNCisJICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLg0KKwkgKiA8L3A+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5Ib3N0IEFERTMxPC9lbT4nIGF0dHJpYnV0ZS4NCisJICogQHNlZSAjc2V0SG9zdEFERTMxKGRvdWJsZSkNCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLlZlY3RvclBhY2thZ2UjZ2V0RGVuZ3VlTW9kZWxfSG9zdEFERTMxKCkNCisJICogQG1vZGVsIGRlZmF1bHQ9IjEuOCINCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJZG91YmxlIGdldEhvc3RBREUzMSgpOw0KKw0KKwkvKioNCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbCNnZXRIb3N0QURFMzEgPGVtPkhvc3QgQURFMzE8L2VtPn0nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPkhvc3QgQURFMzE8L2VtPicgYXR0cmlidXRlLg0KKwkgKiBAc2VlICNnZXRIb3N0QURFMzEoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwl2b2lkIHNldEhvc3RBREUzMShkb3VibGUgdmFsdWUpOw0KKw0KKwkvKioNCisJICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+SG9zdCBBREUzMjwvYj48L2VtPicgYXR0cmlidXRlLg0KKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyA8Y29kZT4iMS44IjwvY29kZT4uDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDxwPg0KKwkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5Ib3N0IEFERTMyPC9lbT4nIGF0dHJpYnV0ZSBpc24ndCBjbGVhciwNCisJICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLg0KKwkgKiA8L3A+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5Ib3N0IEFERTMyPC9lbT4nIGF0dHJpYnV0ZS4NCisJICogQHNlZSAjc2V0SG9zdEFERTMyKGRvdWJsZSkNCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLlZlY3RvclBhY2thZ2UjZ2V0RGVuZ3VlTW9kZWxfSG9zdEFERTMyKCkNCisJICogQG1vZGVsIGRlZmF1bHQ9IjEuOCINCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJZG91YmxlIGdldEhvc3RBREUzMigpOw0KKw0KKwkvKioNCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbCNnZXRIb3N0QURFMzIgPGVtPkhvc3QgQURFMzI8L2VtPn0nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPkhvc3QgQURFMzI8L2VtPicgYXR0cmlidXRlLg0KKwkgKiBAc2VlICNnZXRIb3N0QURFMzIoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwl2b2lkIHNldEhvc3RBREUzMihkb3VibGUgdmFsdWUpOw0KKw0KKwkvKioNCisJICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+SG9zdCBBREUzNDwvYj48L2VtPicgYXR0cmlidXRlLg0KKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyA8Y29kZT4iMS44IjwvY29kZT4uDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDxwPg0KKwkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5Ib3N0IEFERTM0PC9lbT4nIGF0dHJpYnV0ZSBpc24ndCBjbGVhciwNCisJICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLg0KKwkgKiA8L3A+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5Ib3N0IEFERTM0PC9lbT4nIGF0dHJpYnV0ZS4NCisJICogQHNlZSAjc2V0SG9zdEFERTM0KGRvdWJsZSkNCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLlZlY3RvclBhY2thZ2UjZ2V0RGVuZ3VlTW9kZWxfSG9zdEFERTM0KCkNCisJICogQG1vZGVsIGRlZmF1bHQ9IjEuOCINCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJZG91YmxlIGdldEhvc3RBREUzNCgpOw0KKw0KKwkvKioNCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbCNnZXRIb3N0QURFMzQgPGVtPkhvc3QgQURFMzQ8L2VtPn0nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPkhvc3QgQURFMzQ8L2VtPicgYXR0cmlidXRlLg0KKwkgKiBAc2VlICNnZXRIb3N0QURFMzQoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwl2b2lkIHNldEhvc3RBREUzNChkb3VibGUgdmFsdWUpOw0KKw0KKwkvKioNCisJICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+SG9zdCBBREU0MTwvYj48L2VtPicgYXR0cmlidXRlLg0KKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyA8Y29kZT4iMS44IjwvY29kZT4uDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDxwPg0KKwkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5Ib3N0IEFERTQxPC9lbT4nIGF0dHJpYnV0ZSBpc24ndCBjbGVhciwNCisJICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLg0KKwkgKiA8L3A+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5Ib3N0IEFERTQxPC9lbT4nIGF0dHJpYnV0ZS4NCisJICogQHNlZSAjc2V0SG9zdEFERTQxKGRvdWJsZSkNCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLlZlY3RvclBhY2thZ2UjZ2V0RGVuZ3VlTW9kZWxfSG9zdEFERTQxKCkNCisJICogQG1vZGVsIGRlZmF1bHQ9IjEuOCINCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJZG91YmxlIGdldEhvc3RBREU0MSgpOw0KKw0KKwkvKioNCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbCNnZXRIb3N0QURFNDEgPGVtPkhvc3QgQURFNDE8L2VtPn0nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPkhvc3QgQURFNDE8L2VtPicgYXR0cmlidXRlLg0KKwkgKiBAc2VlICNnZXRIb3N0QURFNDEoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwl2b2lkIHNldEhvc3RBREU0MShkb3VibGUgdmFsdWUpOw0KKw0KKwkvKioNCisJICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+SG9zdCBBREU0MjwvYj48L2VtPicgYXR0cmlidXRlLg0KKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyA8Y29kZT4iMS44IjwvY29kZT4uDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDxwPg0KKwkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5Ib3N0IEFERTQyPC9lbT4nIGF0dHJpYnV0ZSBpc24ndCBjbGVhciwNCisJICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLg0KKwkgKiA8L3A+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5Ib3N0IEFERTQyPC9lbT4nIGF0dHJpYnV0ZS4NCisJICogQHNlZSAjc2V0SG9zdEFERTQyKGRvdWJsZSkNCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLlZlY3RvclBhY2thZ2UjZ2V0RGVuZ3VlTW9kZWxfSG9zdEFERTQyKCkNCisJICogQG1vZGVsIGRlZmF1bHQ9IjEuOCINCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJZG91YmxlIGdldEhvc3RBREU0MigpOw0KKw0KKwkvKioNCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbCNnZXRIb3N0QURFNDIgPGVtPkhvc3QgQURFNDI8L2VtPn0nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPkhvc3QgQURFNDI8L2VtPicgYXR0cmlidXRlLg0KKwkgKiBAc2VlICNnZXRIb3N0QURFNDIoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwl2b2lkIHNldEhvc3RBREU0Mihkb3VibGUgdmFsdWUpOw0KKw0KKwkvKioNCisJICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+SG9zdCBBREU0MzwvYj48L2VtPicgYXR0cmlidXRlLg0KKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyA8Y29kZT4iMS44IjwvY29kZT4uDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDxwPg0KKwkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5Ib3N0IEFERTQzPC9lbT4nIGF0dHJpYnV0ZSBpc24ndCBjbGVhciwNCisJICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLg0KKwkgKiA8L3A+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5Ib3N0IEFERTQzPC9lbT4nIGF0dHJpYnV0ZS4NCisJICogQHNlZSAjc2V0SG9zdEFERTQzKGRvdWJsZSkNCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLlZlY3RvclBhY2thZ2UjZ2V0RGVuZ3VlTW9kZWxfSG9zdEFERTQzKCkNCisJICogQG1vZGVsIGRlZmF1bHQ9IjEuOCINCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJZG91YmxlIGdldEhvc3RBREU0MygpOw0KKw0KKwkvKioNCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbCNnZXRIb3N0QURFNDMgPGVtPkhvc3QgQURFNDM8L2VtPn0nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPkhvc3QgQURFNDM8L2VtPicgYXR0cmlidXRlLg0KKwkgKiBAc2VlICNnZXRIb3N0QURFNDMoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwl2b2lkIHNldEhvc3RBREU0Myhkb3VibGUgdmFsdWUpOw0KKw0KKwkvKioNCisJICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+SG9zdCBTZWNvbmRhcnkgRGlzZWFzZSBEZWF0aCBSYXRlMTI8L2I+PC9lbT4nIGF0dHJpYnV0ZS4NCisJICogVGhlIGRlZmF1bHQgdmFsdWUgaXMgPGNvZGU+IjAuMDAxMjMiPC9jb2RlPi4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPHA+DQorCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPkhvc3QgU2Vjb25kYXJ5IERpc2Vhc2UgRGVhdGggUmF0ZTEyPC9lbT4nIGF0dHJpYnV0ZSBpc24ndCBjbGVhciwNCisJICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLg0KKwkgKiA8L3A+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5Ib3N0IFNlY29uZGFyeSBEaXNlYXNlIERlYXRoIFJhdGUxMjwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIEBzZWUgI3NldEhvc3RTZWNvbmRhcnlEaXNlYXNlRGVhdGhSYXRlMTIoZG91YmxlKQ0KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuVmVjdG9yUGFja2FnZSNnZXREZW5ndWVNb2RlbF9Ib3N0U2Vjb25kYXJ5RGlzZWFzZURlYXRoUmF0ZTEyKCkNCisJICogQG1vZGVsIGRlZmF1bHQ9IjAuMDAxMjMiDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCWRvdWJsZSBnZXRIb3N0U2Vjb25kYXJ5RGlzZWFzZURlYXRoUmF0ZTEyKCk7DQorDQorCS8qKg0KKwkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLkRlbmd1ZU1vZGVsI2dldEhvc3RTZWNvbmRhcnlEaXNlYXNlRGVhdGhSYXRlMTIgPGVtPkhvc3QgU2Vjb25kYXJ5IERpc2Vhc2UgRGVhdGggUmF0ZTEyPC9lbT59JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5Ib3N0IFNlY29uZGFyeSBEaXNlYXNlIERlYXRoIFJhdGUxMjwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIEBzZWUgI2dldEhvc3RTZWNvbmRhcnlEaXNlYXNlRGVhdGhSYXRlMTIoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwl2b2lkIHNldEhvc3RTZWNvbmRhcnlEaXNlYXNlRGVhdGhSYXRlMTIoZG91YmxlIHZhbHVlKTsNCisNCisJLyoqDQorCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPkhvc3QgU2Vjb25kYXJ5IERpc2Vhc2UgRGVhdGggUmF0ZTEzPC9iPjwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIGlzIDxjb2RlPiIwLjAwMTIzIjwvY29kZT4uDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDxwPg0KKwkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5Ib3N0IFNlY29uZGFyeSBEaXNlYXNlIERlYXRoIFJhdGUxMzwvZW0+JyBhdHRyaWJ1dGUgaXNuJ3QgY2xlYXIsDQorCSAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4NCisJICogPC9wPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+SG9zdCBTZWNvbmRhcnkgRGlzZWFzZSBEZWF0aCBSYXRlMTM8L2VtPicgYXR0cmlidXRlLg0KKwkgKiBAc2VlICNzZXRIb3N0U2Vjb25kYXJ5RGlzZWFzZURlYXRoUmF0ZTEzKGRvdWJsZSkNCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLlZlY3RvclBhY2thZ2UjZ2V0RGVuZ3VlTW9kZWxfSG9zdFNlY29uZGFyeURpc2Vhc2VEZWF0aFJhdGUxMygpDQorCSAqIEBtb2RlbCBkZWZhdWx0PSIwLjAwMTIzIg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlkb3VibGUgZ2V0SG9zdFNlY29uZGFyeURpc2Vhc2VEZWF0aFJhdGUxMygpOw0KKw0KKwkvKioNCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbCNnZXRIb3N0U2Vjb25kYXJ5RGlzZWFzZURlYXRoUmF0ZTEzIDxlbT5Ib3N0IFNlY29uZGFyeSBEaXNlYXNlIERlYXRoIFJhdGUxMzwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+SG9zdCBTZWNvbmRhcnkgRGlzZWFzZSBEZWF0aCBSYXRlMTM8L2VtPicgYXR0cmlidXRlLg0KKwkgKiBAc2VlICNnZXRIb3N0U2Vjb25kYXJ5RGlzZWFzZURlYXRoUmF0ZTEzKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJdm9pZCBzZXRIb3N0U2Vjb25kYXJ5RGlzZWFzZURlYXRoUmF0ZTEzKGRvdWJsZSB2YWx1ZSk7DQorDQorCS8qKg0KKwkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5Ib3N0IFNlY29uZGFyeSBEaXNlYXNlIERlYXRoIFJhdGUxNDwvYj48L2VtPicgYXR0cmlidXRlLg0KKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyA8Y29kZT4iMC4wMDEyMyI8L2NvZGU+Lg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8cD4NCisJICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+SG9zdCBTZWNvbmRhcnkgRGlzZWFzZSBEZWF0aCBSYXRlMTQ8L2VtPicgYXR0cmlidXRlIGlzbid0IGNsZWFyLA0KKwkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uDQorCSAqIDwvcD4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPkhvc3QgU2Vjb25kYXJ5IERpc2Vhc2UgRGVhdGggUmF0ZTE0PC9lbT4nIGF0dHJpYnV0ZS4NCisJICogQHNlZSAjc2V0SG9zdFNlY29uZGFyeURpc2Vhc2VEZWF0aFJhdGUxNChkb3VibGUpDQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5WZWN0b3JQYWNrYWdlI2dldERlbmd1ZU1vZGVsX0hvc3RTZWNvbmRhcnlEaXNlYXNlRGVhdGhSYXRlMTQoKQ0KKwkgKiBAbW9kZWwgZGVmYXVsdD0iMC4wMDEyMyINCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJZG91YmxlIGdldEhvc3RTZWNvbmRhcnlEaXNlYXNlRGVhdGhSYXRlMTQoKTsNCisNCisJLyoqDQorCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWwjZ2V0SG9zdFNlY29uZGFyeURpc2Vhc2VEZWF0aFJhdGUxNCA8ZW0+SG9zdCBTZWNvbmRhcnkgRGlzZWFzZSBEZWF0aCBSYXRlMTQ8L2VtPn0nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPkhvc3QgU2Vjb25kYXJ5IERpc2Vhc2UgRGVhdGggUmF0ZTE0PC9lbT4nIGF0dHJpYnV0ZS4NCisJICogQHNlZSAjZ2V0SG9zdFNlY29uZGFyeURpc2Vhc2VEZWF0aFJhdGUxNCgpDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXZvaWQgc2V0SG9zdFNlY29uZGFyeURpc2Vhc2VEZWF0aFJhdGUxNChkb3VibGUgdmFsdWUpOw0KKw0KKwkvKioNCisJICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+SG9zdCBTZWNvbmRhcnkgRGlzZWFzZSBEZWF0aCBSYXRlMjE8L2I+PC9lbT4nIGF0dHJpYnV0ZS4NCisJICogVGhlIGRlZmF1bHQgdmFsdWUgaXMgPGNvZGU+IjAuMDAxMjMiPC9jb2RlPi4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPHA+DQorCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPkhvc3QgU2Vjb25kYXJ5IERpc2Vhc2UgRGVhdGggUmF0ZTIxPC9lbT4nIGF0dHJpYnV0ZSBpc24ndCBjbGVhciwNCisJICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLg0KKwkgKiA8L3A+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5Ib3N0IFNlY29uZGFyeSBEaXNlYXNlIERlYXRoIFJhdGUyMTwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIEBzZWUgI3NldEhvc3RTZWNvbmRhcnlEaXNlYXNlRGVhdGhSYXRlMjEoZG91YmxlKQ0KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuVmVjdG9yUGFja2FnZSNnZXREZW5ndWVNb2RlbF9Ib3N0U2Vjb25kYXJ5RGlzZWFzZURlYXRoUmF0ZTIxKCkNCisJICogQG1vZGVsIGRlZmF1bHQ9IjAuMDAxMjMiDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCWRvdWJsZSBnZXRIb3N0U2Vjb25kYXJ5RGlzZWFzZURlYXRoUmF0ZTIxKCk7DQorDQorCS8qKg0KKwkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLkRlbmd1ZU1vZGVsI2dldEhvc3RTZWNvbmRhcnlEaXNlYXNlRGVhdGhSYXRlMjEgPGVtPkhvc3QgU2Vjb25kYXJ5IERpc2Vhc2UgRGVhdGggUmF0ZTIxPC9lbT59JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5Ib3N0IFNlY29uZGFyeSBEaXNlYXNlIERlYXRoIFJhdGUyMTwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIEBzZWUgI2dldEhvc3RTZWNvbmRhcnlEaXNlYXNlRGVhdGhSYXRlMjEoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwl2b2lkIHNldEhvc3RTZWNvbmRhcnlEaXNlYXNlRGVhdGhSYXRlMjEoZG91YmxlIHZhbHVlKTsNCisNCisJLyoqDQorCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPkhvc3QgU2Vjb25kYXJ5IERpc2Vhc2UgRGVhdGggUmF0ZTIzPC9iPjwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIGlzIDxjb2RlPiIwLjAwMTIzIjwvY29kZT4uDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDxwPg0KKwkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5Ib3N0IFNlY29uZGFyeSBEaXNlYXNlIERlYXRoIFJhdGUyMzwvZW0+JyBhdHRyaWJ1dGUgaXNuJ3QgY2xlYXIsDQorCSAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4NCisJICogPC9wPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+SG9zdCBTZWNvbmRhcnkgRGlzZWFzZSBEZWF0aCBSYXRlMjM8L2VtPicgYXR0cmlidXRlLg0KKwkgKiBAc2VlICNzZXRIb3N0U2Vjb25kYXJ5RGlzZWFzZURlYXRoUmF0ZTIzKGRvdWJsZSkNCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLlZlY3RvclBhY2thZ2UjZ2V0RGVuZ3VlTW9kZWxfSG9zdFNlY29uZGFyeURpc2Vhc2VEZWF0aFJhdGUyMygpDQorCSAqIEBtb2RlbCBkZWZhdWx0PSIwLjAwMTIzIg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlkb3VibGUgZ2V0SG9zdFNlY29uZGFyeURpc2Vhc2VEZWF0aFJhdGUyMygpOw0KKw0KKwkvKioNCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbCNnZXRIb3N0U2Vjb25kYXJ5RGlzZWFzZURlYXRoUmF0ZTIzIDxlbT5Ib3N0IFNlY29uZGFyeSBEaXNlYXNlIERlYXRoIFJhdGUyMzwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+SG9zdCBTZWNvbmRhcnkgRGlzZWFzZSBEZWF0aCBSYXRlMjM8L2VtPicgYXR0cmlidXRlLg0KKwkgKiBAc2VlICNnZXRIb3N0U2Vjb25kYXJ5RGlzZWFzZURlYXRoUmF0ZTIzKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJdm9pZCBzZXRIb3N0U2Vjb25kYXJ5RGlzZWFzZURlYXRoUmF0ZTIzKGRvdWJsZSB2YWx1ZSk7DQorDQorCS8qKg0KKwkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5Ib3N0IFNlY29uZGFyeSBEaXNlYXNlIERlYXRoIFJhdGUyNDwvYj48L2VtPicgYXR0cmlidXRlLg0KKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyA8Y29kZT4iMC4wMDEyMyI8L2NvZGU+Lg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8cD4NCisJICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+SG9zdCBTZWNvbmRhcnkgRGlzZWFzZSBEZWF0aCBSYXRlMjQ8L2VtPicgYXR0cmlidXRlIGlzbid0IGNsZWFyLA0KKwkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uDQorCSAqIDwvcD4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPkhvc3QgU2Vjb25kYXJ5IERpc2Vhc2UgRGVhdGggUmF0ZTI0PC9lbT4nIGF0dHJpYnV0ZS4NCisJICogQHNlZSAjc2V0SG9zdFNlY29uZGFyeURpc2Vhc2VEZWF0aFJhdGUyNChkb3VibGUpDQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5WZWN0b3JQYWNrYWdlI2dldERlbmd1ZU1vZGVsX0hvc3RTZWNvbmRhcnlEaXNlYXNlRGVhdGhSYXRlMjQoKQ0KKwkgKiBAbW9kZWwgZGVmYXVsdD0iMC4wMDEyMyINCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJZG91YmxlIGdldEhvc3RTZWNvbmRhcnlEaXNlYXNlRGVhdGhSYXRlMjQoKTsNCisNCisJLyoqDQorCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWwjZ2V0SG9zdFNlY29uZGFyeURpc2Vhc2VEZWF0aFJhdGUyNCA8ZW0+SG9zdCBTZWNvbmRhcnkgRGlzZWFzZSBEZWF0aCBSYXRlMjQ8L2VtPn0nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPkhvc3QgU2Vjb25kYXJ5IERpc2Vhc2UgRGVhdGggUmF0ZTI0PC9lbT4nIGF0dHJpYnV0ZS4NCisJICogQHNlZSAjZ2V0SG9zdFNlY29uZGFyeURpc2Vhc2VEZWF0aFJhdGUyNCgpDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXZvaWQgc2V0SG9zdFNlY29uZGFyeURpc2Vhc2VEZWF0aFJhdGUyNChkb3VibGUgdmFsdWUpOw0KKw0KKwkvKioNCisJICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+SG9zdCBTZWNvbmRhcnkgRGlzZWFzZSBEZWF0aCBSYXRlMzE8L2I+PC9lbT4nIGF0dHJpYnV0ZS4NCisJICogVGhlIGRlZmF1bHQgdmFsdWUgaXMgPGNvZGU+IjAuMDAxMjMiPC9jb2RlPi4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPHA+DQorCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPkhvc3QgU2Vjb25kYXJ5IERpc2Vhc2UgRGVhdGggUmF0ZTMxPC9lbT4nIGF0dHJpYnV0ZSBpc24ndCBjbGVhciwNCisJICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLg0KKwkgKiA8L3A+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5Ib3N0IFNlY29uZGFyeSBEaXNlYXNlIERlYXRoIFJhdGUzMTwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIEBzZWUgI3NldEhvc3RTZWNvbmRhcnlEaXNlYXNlRGVhdGhSYXRlMzEoZG91YmxlKQ0KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuVmVjdG9yUGFja2FnZSNnZXREZW5ndWVNb2RlbF9Ib3N0U2Vjb25kYXJ5RGlzZWFzZURlYXRoUmF0ZTMxKCkNCisJICogQG1vZGVsIGRlZmF1bHQ9IjAuMDAxMjMiDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCWRvdWJsZSBnZXRIb3N0U2Vjb25kYXJ5RGlzZWFzZURlYXRoUmF0ZTMxKCk7DQorDQorCS8qKg0KKwkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLkRlbmd1ZU1vZGVsI2dldEhvc3RTZWNvbmRhcnlEaXNlYXNlRGVhdGhSYXRlMzEgPGVtPkhvc3QgU2Vjb25kYXJ5IERpc2Vhc2UgRGVhdGggUmF0ZTMxPC9lbT59JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5Ib3N0IFNlY29uZGFyeSBEaXNlYXNlIERlYXRoIFJhdGUzMTwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIEBzZWUgI2dldEhvc3RTZWNvbmRhcnlEaXNlYXNlRGVhdGhSYXRlMzEoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwl2b2lkIHNldEhvc3RTZWNvbmRhcnlEaXNlYXNlRGVhdGhSYXRlMzEoZG91YmxlIHZhbHVlKTsNCisNCisJLyoqDQorCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPkhvc3QgU2Vjb25kYXJ5IERpc2Vhc2UgRGVhdGggUmF0ZTMyPC9iPjwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIGlzIDxjb2RlPiIwLjAwMTIzIjwvY29kZT4uDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDxwPg0KKwkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5Ib3N0IFNlY29uZGFyeSBEaXNlYXNlIERlYXRoIFJhdGUzMjwvZW0+JyBhdHRyaWJ1dGUgaXNuJ3QgY2xlYXIsDQorCSAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4NCisJICogPC9wPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+SG9zdCBTZWNvbmRhcnkgRGlzZWFzZSBEZWF0aCBSYXRlMzI8L2VtPicgYXR0cmlidXRlLg0KKwkgKiBAc2VlICNzZXRIb3N0U2Vjb25kYXJ5RGlzZWFzZURlYXRoUmF0ZTMyKGRvdWJsZSkNCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLlZlY3RvclBhY2thZ2UjZ2V0RGVuZ3VlTW9kZWxfSG9zdFNlY29uZGFyeURpc2Vhc2VEZWF0aFJhdGUzMigpDQorCSAqIEBtb2RlbCBkZWZhdWx0PSIwLjAwMTIzIg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlkb3VibGUgZ2V0SG9zdFNlY29uZGFyeURpc2Vhc2VEZWF0aFJhdGUzMigpOw0KKw0KKwkvKioNCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbCNnZXRIb3N0U2Vjb25kYXJ5RGlzZWFzZURlYXRoUmF0ZTMyIDxlbT5Ib3N0IFNlY29uZGFyeSBEaXNlYXNlIERlYXRoIFJhdGUzMjwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+SG9zdCBTZWNvbmRhcnkgRGlzZWFzZSBEZWF0aCBSYXRlMzI8L2VtPicgYXR0cmlidXRlLg0KKwkgKiBAc2VlICNnZXRIb3N0U2Vjb25kYXJ5RGlzZWFzZURlYXRoUmF0ZTMyKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJdm9pZCBzZXRIb3N0U2Vjb25kYXJ5RGlzZWFzZURlYXRoUmF0ZTMyKGRvdWJsZSB2YWx1ZSk7DQorDQorCS8qKg0KKwkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5Ib3N0IFNlY29uZGFyeSBEaXNlYXNlIERlYXRoIFJhdGUzNDwvYj48L2VtPicgYXR0cmlidXRlLg0KKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyA8Y29kZT4iMC4wMDEyMyI8L2NvZGU+Lg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8cD4NCisJICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+SG9zdCBTZWNvbmRhcnkgRGlzZWFzZSBEZWF0aCBSYXRlMzQ8L2VtPicgYXR0cmlidXRlIGlzbid0IGNsZWFyLA0KKwkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uDQorCSAqIDwvcD4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPkhvc3QgU2Vjb25kYXJ5IERpc2Vhc2UgRGVhdGggUmF0ZTM0PC9lbT4nIGF0dHJpYnV0ZS4NCisJICogQHNlZSAjc2V0SG9zdFNlY29uZGFyeURpc2Vhc2VEZWF0aFJhdGUzNChkb3VibGUpDQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5WZWN0b3JQYWNrYWdlI2dldERlbmd1ZU1vZGVsX0hvc3RTZWNvbmRhcnlEaXNlYXNlRGVhdGhSYXRlMzQoKQ0KKwkgKiBAbW9kZWwgZGVmYXVsdD0iMC4wMDEyMyINCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJZG91YmxlIGdldEhvc3RTZWNvbmRhcnlEaXNlYXNlRGVhdGhSYXRlMzQoKTsNCisNCisJLyoqDQorCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWwjZ2V0SG9zdFNlY29uZGFyeURpc2Vhc2VEZWF0aFJhdGUzNCA8ZW0+SG9zdCBTZWNvbmRhcnkgRGlzZWFzZSBEZWF0aCBSYXRlMzQ8L2VtPn0nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPkhvc3QgU2Vjb25kYXJ5IERpc2Vhc2UgRGVhdGggUmF0ZTM0PC9lbT4nIGF0dHJpYnV0ZS4NCisJICogQHNlZSAjZ2V0SG9zdFNlY29uZGFyeURpc2Vhc2VEZWF0aFJhdGUzNCgpDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXZvaWQgc2V0SG9zdFNlY29uZGFyeURpc2Vhc2VEZWF0aFJhdGUzNChkb3VibGUgdmFsdWUpOw0KKw0KKwkvKioNCisJICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+SG9zdCBTZWNvbmRhcnkgRGlzZWFzZSBEZWF0aCBSYXRlNDE8L2I+PC9lbT4nIGF0dHJpYnV0ZS4NCisJICogVGhlIGRlZmF1bHQgdmFsdWUgaXMgPGNvZGU+IjAuMDAxMjMiPC9jb2RlPi4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPHA+DQorCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPkhvc3QgU2Vjb25kYXJ5IERpc2Vhc2UgRGVhdGggUmF0ZTQxPC9lbT4nIGF0dHJpYnV0ZSBpc24ndCBjbGVhciwNCisJICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLg0KKwkgKiA8L3A+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5Ib3N0IFNlY29uZGFyeSBEaXNlYXNlIERlYXRoIFJhdGU0MTwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIEBzZWUgI3NldEhvc3RTZWNvbmRhcnlEaXNlYXNlRGVhdGhSYXRlNDEoZG91YmxlKQ0KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuVmVjdG9yUGFja2FnZSNnZXREZW5ndWVNb2RlbF9Ib3N0U2Vjb25kYXJ5RGlzZWFzZURlYXRoUmF0ZTQxKCkNCisJICogQG1vZGVsIGRlZmF1bHQ9IjAuMDAxMjMiDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCWRvdWJsZSBnZXRIb3N0U2Vjb25kYXJ5RGlzZWFzZURlYXRoUmF0ZTQxKCk7DQorDQorCS8qKg0KKwkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLkRlbmd1ZU1vZGVsI2dldEhvc3RTZWNvbmRhcnlEaXNlYXNlRGVhdGhSYXRlNDEgPGVtPkhvc3QgU2Vjb25kYXJ5IERpc2Vhc2UgRGVhdGggUmF0ZTQxPC9lbT59JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5Ib3N0IFNlY29uZGFyeSBEaXNlYXNlIERlYXRoIFJhdGU0MTwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIEBzZWUgI2dldEhvc3RTZWNvbmRhcnlEaXNlYXNlRGVhdGhSYXRlNDEoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwl2b2lkIHNldEhvc3RTZWNvbmRhcnlEaXNlYXNlRGVhdGhSYXRlNDEoZG91YmxlIHZhbHVlKTsNCisNCisJLyoqDQorCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPkhvc3QgU2Vjb25kYXJ5IERpc2Vhc2UgRGVhdGggUmF0ZTQyPC9iPjwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIGlzIDxjb2RlPiIwLjAwMTIzIjwvY29kZT4uDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDxwPg0KKwkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5Ib3N0IFNlY29uZGFyeSBEaXNlYXNlIERlYXRoIFJhdGU0MjwvZW0+JyBhdHRyaWJ1dGUgaXNuJ3QgY2xlYXIsDQorCSAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4NCisJICogPC9wPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+SG9zdCBTZWNvbmRhcnkgRGlzZWFzZSBEZWF0aCBSYXRlNDI8L2VtPicgYXR0cmlidXRlLg0KKwkgKiBAc2VlICNzZXRIb3N0U2Vjb25kYXJ5RGlzZWFzZURlYXRoUmF0ZTQyKGRvdWJsZSkNCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLlZlY3RvclBhY2thZ2UjZ2V0RGVuZ3VlTW9kZWxfSG9zdFNlY29uZGFyeURpc2Vhc2VEZWF0aFJhdGU0MigpDQorCSAqIEBtb2RlbCBkZWZhdWx0PSIwLjAwMTIzIg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlkb3VibGUgZ2V0SG9zdFNlY29uZGFyeURpc2Vhc2VEZWF0aFJhdGU0MigpOw0KKw0KKwkvKioNCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbCNnZXRIb3N0U2Vjb25kYXJ5RGlzZWFzZURlYXRoUmF0ZTQyIDxlbT5Ib3N0IFNlY29uZGFyeSBEaXNlYXNlIERlYXRoIFJhdGU0MjwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+SG9zdCBTZWNvbmRhcnkgRGlzZWFzZSBEZWF0aCBSYXRlNDI8L2VtPicgYXR0cmlidXRlLg0KKwkgKiBAc2VlICNnZXRIb3N0U2Vjb25kYXJ5RGlzZWFzZURlYXRoUmF0ZTQyKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJdm9pZCBzZXRIb3N0U2Vjb25kYXJ5RGlzZWFzZURlYXRoUmF0ZTQyKGRvdWJsZSB2YWx1ZSk7DQorDQorCS8qKg0KKwkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5Ib3N0IFNlY29uZGFyeSBEaXNlYXNlIERlYXRoIFJhdGU0MzwvYj48L2VtPicgYXR0cmlidXRlLg0KKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyA8Y29kZT4iMC4wMDEyMyI8L2NvZGU+Lg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8cD4NCisJICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+SG9zdCBTZWNvbmRhcnkgRGlzZWFzZSBEZWF0aCBSYXRlNDM8L2VtPicgYXR0cmlidXRlIGlzbid0IGNsZWFyLA0KKwkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uDQorCSAqIDwvcD4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPkhvc3QgU2Vjb25kYXJ5IERpc2Vhc2UgRGVhdGggUmF0ZTQzPC9lbT4nIGF0dHJpYnV0ZS4NCisJICogQHNlZSAjc2V0SG9zdFNlY29uZGFyeURpc2Vhc2VEZWF0aFJhdGU0Myhkb3VibGUpDQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5WZWN0b3JQYWNrYWdlI2dldERlbmd1ZU1vZGVsX0hvc3RTZWNvbmRhcnlEaXNlYXNlRGVhdGhSYXRlNDMoKQ0KKwkgKiBAbW9kZWwgZGVmYXVsdD0iMC4wMDEyMyINCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJZG91YmxlIGdldEhvc3RTZWNvbmRhcnlEaXNlYXNlRGVhdGhSYXRlNDMoKTsNCisNCisJLyoqDQorCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWwjZ2V0SG9zdFNlY29uZGFyeURpc2Vhc2VEZWF0aFJhdGU0MyA8ZW0+SG9zdCBTZWNvbmRhcnkgRGlzZWFzZSBEZWF0aCBSYXRlNDM8L2VtPn0nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPkhvc3QgU2Vjb25kYXJ5IERpc2Vhc2UgRGVhdGggUmF0ZTQzPC9lbT4nIGF0dHJpYnV0ZS4NCisJICogQHNlZSAjZ2V0SG9zdFNlY29uZGFyeURpc2Vhc2VEZWF0aFJhdGU0MygpDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXZvaWQgc2V0SG9zdFNlY29uZGFyeURpc2Vhc2VEZWF0aFJhdGU0Myhkb3VibGUgdmFsdWUpOw0KKw0KKwkvKioNCisJICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+SG9zdCBTZWNvbmRhcnkgUmVjb3ZlcnkgUmF0ZTEyPC9iPjwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIGlzIDxjb2RlPiIwLjEiPC9jb2RlPi4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPHA+DQorCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPkhvc3QgU2Vjb25kYXJ5IFJlY292ZXJ5IFJhdGUxMjwvZW0+JyBhdHRyaWJ1dGUgaXNuJ3QgY2xlYXIsDQorCSAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4NCisJICogPC9wPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+SG9zdCBTZWNvbmRhcnkgUmVjb3ZlcnkgUmF0ZTEyPC9lbT4nIGF0dHJpYnV0ZS4NCisJICogQHNlZSAjc2V0SG9zdFNlY29uZGFyeVJlY292ZXJ5UmF0ZTEyKGRvdWJsZSkNCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLlZlY3RvclBhY2thZ2UjZ2V0RGVuZ3VlTW9kZWxfSG9zdFNlY29uZGFyeVJlY292ZXJ5UmF0ZTEyKCkNCisJICogQG1vZGVsIGRlZmF1bHQ9IjAuMSINCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJZG91YmxlIGdldEhvc3RTZWNvbmRhcnlSZWNvdmVyeVJhdGUxMigpOw0KKw0KKwkvKioNCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbCNnZXRIb3N0U2Vjb25kYXJ5UmVjb3ZlcnlSYXRlMTIgPGVtPkhvc3QgU2Vjb25kYXJ5IFJlY292ZXJ5IFJhdGUxMjwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+SG9zdCBTZWNvbmRhcnkgUmVjb3ZlcnkgUmF0ZTEyPC9lbT4nIGF0dHJpYnV0ZS4NCisJICogQHNlZSAjZ2V0SG9zdFNlY29uZGFyeVJlY292ZXJ5UmF0ZTEyKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJdm9pZCBzZXRIb3N0U2Vjb25kYXJ5UmVjb3ZlcnlSYXRlMTIoZG91YmxlIHZhbHVlKTsNCisNCisJLyoqDQorCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPkhvc3QgU2Vjb25kYXJ5IFJlY292ZXJ5IFJhdGUxMzwvYj48L2VtPicgYXR0cmlidXRlLg0KKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyA8Y29kZT4iMC4xIjwvY29kZT4uDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDxwPg0KKwkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5Ib3N0IFNlY29uZGFyeSBSZWNvdmVyeSBSYXRlMTM8L2VtPicgYXR0cmlidXRlIGlzbid0IGNsZWFyLA0KKwkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uDQorCSAqIDwvcD4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPkhvc3QgU2Vjb25kYXJ5IFJlY292ZXJ5IFJhdGUxMzwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIEBzZWUgI3NldEhvc3RTZWNvbmRhcnlSZWNvdmVyeVJhdGUxMyhkb3VibGUpDQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5WZWN0b3JQYWNrYWdlI2dldERlbmd1ZU1vZGVsX0hvc3RTZWNvbmRhcnlSZWNvdmVyeVJhdGUxMygpDQorCSAqIEBtb2RlbCBkZWZhdWx0PSIwLjEiDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCWRvdWJsZSBnZXRIb3N0U2Vjb25kYXJ5UmVjb3ZlcnlSYXRlMTMoKTsNCisNCisJLyoqDQorCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWwjZ2V0SG9zdFNlY29uZGFyeVJlY292ZXJ5UmF0ZTEzIDxlbT5Ib3N0IFNlY29uZGFyeSBSZWNvdmVyeSBSYXRlMTM8L2VtPn0nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPkhvc3QgU2Vjb25kYXJ5IFJlY292ZXJ5IFJhdGUxMzwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIEBzZWUgI2dldEhvc3RTZWNvbmRhcnlSZWNvdmVyeVJhdGUxMygpDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXZvaWQgc2V0SG9zdFNlY29uZGFyeVJlY292ZXJ5UmF0ZTEzKGRvdWJsZSB2YWx1ZSk7DQorDQorCS8qKg0KKwkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5Ib3N0IFNlY29uZGFyeSBSZWNvdmVyeSBSYXRlMTQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4NCisJICogVGhlIGRlZmF1bHQgdmFsdWUgaXMgPGNvZGU+IjAuMSI8L2NvZGU+Lg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8cD4NCisJICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+SG9zdCBTZWNvbmRhcnkgUmVjb3ZlcnkgUmF0ZTE0PC9lbT4nIGF0dHJpYnV0ZSBpc24ndCBjbGVhciwNCisJICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLg0KKwkgKiA8L3A+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5Ib3N0IFNlY29uZGFyeSBSZWNvdmVyeSBSYXRlMTQ8L2VtPicgYXR0cmlidXRlLg0KKwkgKiBAc2VlICNzZXRIb3N0U2Vjb25kYXJ5UmVjb3ZlcnlSYXRlMTQoZG91YmxlKQ0KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuVmVjdG9yUGFja2FnZSNnZXREZW5ndWVNb2RlbF9Ib3N0U2Vjb25kYXJ5UmVjb3ZlcnlSYXRlMTQoKQ0KKwkgKiBAbW9kZWwgZGVmYXVsdD0iMC4xIg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlkb3VibGUgZ2V0SG9zdFNlY29uZGFyeVJlY292ZXJ5UmF0ZTE0KCk7DQorDQorCS8qKg0KKwkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLkRlbmd1ZU1vZGVsI2dldEhvc3RTZWNvbmRhcnlSZWNvdmVyeVJhdGUxNCA8ZW0+SG9zdCBTZWNvbmRhcnkgUmVjb3ZlcnkgUmF0ZTE0PC9lbT59JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5Ib3N0IFNlY29uZGFyeSBSZWNvdmVyeSBSYXRlMTQ8L2VtPicgYXR0cmlidXRlLg0KKwkgKiBAc2VlICNnZXRIb3N0U2Vjb25kYXJ5UmVjb3ZlcnlSYXRlMTQoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwl2b2lkIHNldEhvc3RTZWNvbmRhcnlSZWNvdmVyeVJhdGUxNChkb3VibGUgdmFsdWUpOw0KKw0KKwkvKioNCisJICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+SG9zdCBTZWNvbmRhcnkgUmVjb3ZlcnkgUmF0ZTIxPC9iPjwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIGlzIDxjb2RlPiIwLjEiPC9jb2RlPi4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPHA+DQorCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPkhvc3QgU2Vjb25kYXJ5IFJlY292ZXJ5IFJhdGUyMTwvZW0+JyBhdHRyaWJ1dGUgaXNuJ3QgY2xlYXIsDQorCSAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4NCisJICogPC9wPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+SG9zdCBTZWNvbmRhcnkgUmVjb3ZlcnkgUmF0ZTIxPC9lbT4nIGF0dHJpYnV0ZS4NCisJICogQHNlZSAjc2V0SG9zdFNlY29uZGFyeVJlY292ZXJ5UmF0ZTIxKGRvdWJsZSkNCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLlZlY3RvclBhY2thZ2UjZ2V0RGVuZ3VlTW9kZWxfSG9zdFNlY29uZGFyeVJlY292ZXJ5UmF0ZTIxKCkNCisJICogQG1vZGVsIGRlZmF1bHQ9IjAuMSINCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJZG91YmxlIGdldEhvc3RTZWNvbmRhcnlSZWNvdmVyeVJhdGUyMSgpOw0KKw0KKwkvKioNCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbCNnZXRIb3N0U2Vjb25kYXJ5UmVjb3ZlcnlSYXRlMjEgPGVtPkhvc3QgU2Vjb25kYXJ5IFJlY292ZXJ5IFJhdGUyMTwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+SG9zdCBTZWNvbmRhcnkgUmVjb3ZlcnkgUmF0ZTIxPC9lbT4nIGF0dHJpYnV0ZS4NCisJICogQHNlZSAjZ2V0SG9zdFNlY29uZGFyeVJlY292ZXJ5UmF0ZTIxKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJdm9pZCBzZXRIb3N0U2Vjb25kYXJ5UmVjb3ZlcnlSYXRlMjEoZG91YmxlIHZhbHVlKTsNCisNCisJLyoqDQorCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPkhvc3QgU2Vjb25kYXJ5IFJlY292ZXJ5IFJhdGUyMzwvYj48L2VtPicgYXR0cmlidXRlLg0KKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyA8Y29kZT4iMC4xIjwvY29kZT4uDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDxwPg0KKwkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5Ib3N0IFNlY29uZGFyeSBSZWNvdmVyeSBSYXRlMjM8L2VtPicgYXR0cmlidXRlIGlzbid0IGNsZWFyLA0KKwkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uDQorCSAqIDwvcD4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPkhvc3QgU2Vjb25kYXJ5IFJlY292ZXJ5IFJhdGUyMzwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIEBzZWUgI3NldEhvc3RTZWNvbmRhcnlSZWNvdmVyeVJhdGUyMyhkb3VibGUpDQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5WZWN0b3JQYWNrYWdlI2dldERlbmd1ZU1vZGVsX0hvc3RTZWNvbmRhcnlSZWNvdmVyeVJhdGUyMygpDQorCSAqIEBtb2RlbCBkZWZhdWx0PSIwLjEiDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCWRvdWJsZSBnZXRIb3N0U2Vjb25kYXJ5UmVjb3ZlcnlSYXRlMjMoKTsNCisNCisJLyoqDQorCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWwjZ2V0SG9zdFNlY29uZGFyeVJlY292ZXJ5UmF0ZTIzIDxlbT5Ib3N0IFNlY29uZGFyeSBSZWNvdmVyeSBSYXRlMjM8L2VtPn0nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPkhvc3QgU2Vjb25kYXJ5IFJlY292ZXJ5IFJhdGUyMzwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIEBzZWUgI2dldEhvc3RTZWNvbmRhcnlSZWNvdmVyeVJhdGUyMygpDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXZvaWQgc2V0SG9zdFNlY29uZGFyeVJlY292ZXJ5UmF0ZTIzKGRvdWJsZSB2YWx1ZSk7DQorDQorCS8qKg0KKwkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5Ib3N0IFNlY29uZGFyeSBSZWNvdmVyeSBSYXRlMjQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4NCisJICogVGhlIGRlZmF1bHQgdmFsdWUgaXMgPGNvZGU+IjAuMSI8L2NvZGU+Lg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8cD4NCisJICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+SG9zdCBTZWNvbmRhcnkgUmVjb3ZlcnkgUmF0ZTI0PC9lbT4nIGF0dHJpYnV0ZSBpc24ndCBjbGVhciwNCisJICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLg0KKwkgKiA8L3A+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5Ib3N0IFNlY29uZGFyeSBSZWNvdmVyeSBSYXRlMjQ8L2VtPicgYXR0cmlidXRlLg0KKwkgKiBAc2VlICNzZXRIb3N0U2Vjb25kYXJ5UmVjb3ZlcnlSYXRlMjQoZG91YmxlKQ0KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuVmVjdG9yUGFja2FnZSNnZXREZW5ndWVNb2RlbF9Ib3N0U2Vjb25kYXJ5UmVjb3ZlcnlSYXRlMjQoKQ0KKwkgKiBAbW9kZWwgZGVmYXVsdD0iMC4xIg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlkb3VibGUgZ2V0SG9zdFNlY29uZGFyeVJlY292ZXJ5UmF0ZTI0KCk7DQorDQorCS8qKg0KKwkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLkRlbmd1ZU1vZGVsI2dldEhvc3RTZWNvbmRhcnlSZWNvdmVyeVJhdGUyNCA8ZW0+SG9zdCBTZWNvbmRhcnkgUmVjb3ZlcnkgUmF0ZTI0PC9lbT59JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5Ib3N0IFNlY29uZGFyeSBSZWNvdmVyeSBSYXRlMjQ8L2VtPicgYXR0cmlidXRlLg0KKwkgKiBAc2VlICNnZXRIb3N0U2Vjb25kYXJ5UmVjb3ZlcnlSYXRlMjQoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwl2b2lkIHNldEhvc3RTZWNvbmRhcnlSZWNvdmVyeVJhdGUyNChkb3VibGUgdmFsdWUpOw0KKw0KKwkvKioNCisJICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+SG9zdCBTZWNvbmRhcnkgUmVjb3ZlcnkgUmF0ZTMxPC9iPjwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIGlzIDxjb2RlPiIwLjEiPC9jb2RlPi4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPHA+DQorCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPkhvc3QgU2Vjb25kYXJ5IFJlY292ZXJ5IFJhdGUzMTwvZW0+JyBhdHRyaWJ1dGUgaXNuJ3QgY2xlYXIsDQorCSAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4NCisJICogPC9wPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+SG9zdCBTZWNvbmRhcnkgUmVjb3ZlcnkgUmF0ZTMxPC9lbT4nIGF0dHJpYnV0ZS4NCisJICogQHNlZSAjc2V0SG9zdFNlY29uZGFyeVJlY292ZXJ5UmF0ZTMxKGRvdWJsZSkNCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLlZlY3RvclBhY2thZ2UjZ2V0RGVuZ3VlTW9kZWxfSG9zdFNlY29uZGFyeVJlY292ZXJ5UmF0ZTMxKCkNCisJICogQG1vZGVsIGRlZmF1bHQ9IjAuMSINCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJZG91YmxlIGdldEhvc3RTZWNvbmRhcnlSZWNvdmVyeVJhdGUzMSgpOw0KKw0KKwkvKioNCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbCNnZXRIb3N0U2Vjb25kYXJ5UmVjb3ZlcnlSYXRlMzEgPGVtPkhvc3QgU2Vjb25kYXJ5IFJlY292ZXJ5IFJhdGUzMTwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+SG9zdCBTZWNvbmRhcnkgUmVjb3ZlcnkgUmF0ZTMxPC9lbT4nIGF0dHJpYnV0ZS4NCisJICogQHNlZSAjZ2V0SG9zdFNlY29uZGFyeVJlY292ZXJ5UmF0ZTMxKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJdm9pZCBzZXRIb3N0U2Vjb25kYXJ5UmVjb3ZlcnlSYXRlMzEoZG91YmxlIHZhbHVlKTsNCisNCisJLyoqDQorCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPkhvc3QgU2Vjb25kYXJ5IFJlY292ZXJ5IFJhdGUzMjwvYj48L2VtPicgYXR0cmlidXRlLg0KKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyA8Y29kZT4iMC4xIjwvY29kZT4uDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDxwPg0KKwkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5Ib3N0IFNlY29uZGFyeSBSZWNvdmVyeSBSYXRlMzI8L2VtPicgYXR0cmlidXRlIGlzbid0IGNsZWFyLA0KKwkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uDQorCSAqIDwvcD4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPkhvc3QgU2Vjb25kYXJ5IFJlY292ZXJ5IFJhdGUzMjwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIEBzZWUgI3NldEhvc3RTZWNvbmRhcnlSZWNvdmVyeVJhdGUzMihkb3VibGUpDQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5WZWN0b3JQYWNrYWdlI2dldERlbmd1ZU1vZGVsX0hvc3RTZWNvbmRhcnlSZWNvdmVyeVJhdGUzMigpDQorCSAqIEBtb2RlbCBkZWZhdWx0PSIwLjEiDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCWRvdWJsZSBnZXRIb3N0U2Vjb25kYXJ5UmVjb3ZlcnlSYXRlMzIoKTsNCisNCisJLyoqDQorCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWwjZ2V0SG9zdFNlY29uZGFyeVJlY292ZXJ5UmF0ZTMyIDxlbT5Ib3N0IFNlY29uZGFyeSBSZWNvdmVyeSBSYXRlMzI8L2VtPn0nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPkhvc3QgU2Vjb25kYXJ5IFJlY292ZXJ5IFJhdGUzMjwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIEBzZWUgI2dldEhvc3RTZWNvbmRhcnlSZWNvdmVyeVJhdGUzMigpDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXZvaWQgc2V0SG9zdFNlY29uZGFyeVJlY292ZXJ5UmF0ZTMyKGRvdWJsZSB2YWx1ZSk7DQorDQorCS8qKg0KKwkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5Ib3N0IFNlY29uZGFyeSBSZWNvdmVyeSBSYXRlMzQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4NCisJICogVGhlIGRlZmF1bHQgdmFsdWUgaXMgPGNvZGU+IjAuMSI8L2NvZGU+Lg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8cD4NCisJICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+SG9zdCBTZWNvbmRhcnkgUmVjb3ZlcnkgUmF0ZTM0PC9lbT4nIGF0dHJpYnV0ZSBpc24ndCBjbGVhciwNCisJICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLg0KKwkgKiA8L3A+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5Ib3N0IFNlY29uZGFyeSBSZWNvdmVyeSBSYXRlMzQ8L2VtPicgYXR0cmlidXRlLg0KKwkgKiBAc2VlICNzZXRIb3N0U2Vjb25kYXJ5UmVjb3ZlcnlSYXRlMzQoZG91YmxlKQ0KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuVmVjdG9yUGFja2FnZSNnZXREZW5ndWVNb2RlbF9Ib3N0U2Vjb25kYXJ5UmVjb3ZlcnlSYXRlMzQoKQ0KKwkgKiBAbW9kZWwgZGVmYXVsdD0iMC4xIg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlkb3VibGUgZ2V0SG9zdFNlY29uZGFyeVJlY292ZXJ5UmF0ZTM0KCk7DQorDQorCS8qKg0KKwkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLkRlbmd1ZU1vZGVsI2dldEhvc3RTZWNvbmRhcnlSZWNvdmVyeVJhdGUzNCA8ZW0+SG9zdCBTZWNvbmRhcnkgUmVjb3ZlcnkgUmF0ZTM0PC9lbT59JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5Ib3N0IFNlY29uZGFyeSBSZWNvdmVyeSBSYXRlMzQ8L2VtPicgYXR0cmlidXRlLg0KKwkgKiBAc2VlICNnZXRIb3N0U2Vjb25kYXJ5UmVjb3ZlcnlSYXRlMzQoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwl2b2lkIHNldEhvc3RTZWNvbmRhcnlSZWNvdmVyeVJhdGUzNChkb3VibGUgdmFsdWUpOw0KKw0KKwkvKioNCisJICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+SG9zdCBTZWNvbmRhcnkgUmVjb3ZlcnkgUmF0ZTQxPC9iPjwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIGlzIDxjb2RlPiIwLjEiPC9jb2RlPi4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPHA+DQorCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPkhvc3QgU2Vjb25kYXJ5IFJlY292ZXJ5IFJhdGU0MTwvZW0+JyBhdHRyaWJ1dGUgaXNuJ3QgY2xlYXIsDQorCSAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4NCisJICogPC9wPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+SG9zdCBTZWNvbmRhcnkgUmVjb3ZlcnkgUmF0ZTQxPC9lbT4nIGF0dHJpYnV0ZS4NCisJICogQHNlZSAjc2V0SG9zdFNlY29uZGFyeVJlY292ZXJ5UmF0ZTQxKGRvdWJsZSkNCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLlZlY3RvclBhY2thZ2UjZ2V0RGVuZ3VlTW9kZWxfSG9zdFNlY29uZGFyeVJlY292ZXJ5UmF0ZTQxKCkNCisJICogQG1vZGVsIGRlZmF1bHQ9IjAuMSINCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJZG91YmxlIGdldEhvc3RTZWNvbmRhcnlSZWNvdmVyeVJhdGU0MSgpOw0KKw0KKwkvKioNCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbCNnZXRIb3N0U2Vjb25kYXJ5UmVjb3ZlcnlSYXRlNDEgPGVtPkhvc3QgU2Vjb25kYXJ5IFJlY292ZXJ5IFJhdGU0MTwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+SG9zdCBTZWNvbmRhcnkgUmVjb3ZlcnkgUmF0ZTQxPC9lbT4nIGF0dHJpYnV0ZS4NCisJICogQHNlZSAjZ2V0SG9zdFNlY29uZGFyeVJlY292ZXJ5UmF0ZTQxKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJdm9pZCBzZXRIb3N0U2Vjb25kYXJ5UmVjb3ZlcnlSYXRlNDEoZG91YmxlIHZhbHVlKTsNCisNCisJLyoqDQorCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPkhvc3QgU2Vjb25kYXJ5IFJlY292ZXJ5IFJhdGU0MjwvYj48L2VtPicgYXR0cmlidXRlLg0KKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyA8Y29kZT4iMC4xIjwvY29kZT4uDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDxwPg0KKwkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5Ib3N0IFNlY29uZGFyeSBSZWNvdmVyeSBSYXRlNDI8L2VtPicgYXR0cmlidXRlIGlzbid0IGNsZWFyLA0KKwkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uDQorCSAqIDwvcD4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPkhvc3QgU2Vjb25kYXJ5IFJlY292ZXJ5IFJhdGU0MjwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIEBzZWUgI3NldEhvc3RTZWNvbmRhcnlSZWNvdmVyeVJhdGU0Mihkb3VibGUpDQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5WZWN0b3JQYWNrYWdlI2dldERlbmd1ZU1vZGVsX0hvc3RTZWNvbmRhcnlSZWNvdmVyeVJhdGU0MigpDQorCSAqIEBtb2RlbCBkZWZhdWx0PSIwLjEiDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCWRvdWJsZSBnZXRIb3N0U2Vjb25kYXJ5UmVjb3ZlcnlSYXRlNDIoKTsNCisNCisJLyoqDQorCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWwjZ2V0SG9zdFNlY29uZGFyeVJlY292ZXJ5UmF0ZTQyIDxlbT5Ib3N0IFNlY29uZGFyeSBSZWNvdmVyeSBSYXRlNDI8L2VtPn0nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPkhvc3QgU2Vjb25kYXJ5IFJlY292ZXJ5IFJhdGU0MjwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIEBzZWUgI2dldEhvc3RTZWNvbmRhcnlSZWNvdmVyeVJhdGU0MigpDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXZvaWQgc2V0SG9zdFNlY29uZGFyeVJlY292ZXJ5UmF0ZTQyKGRvdWJsZSB2YWx1ZSk7DQorDQorCS8qKg0KKwkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5Ib3N0IFNlY29uZGFyeSBSZWNvdmVyeSBSYXRlNDM8L2I+PC9lbT4nIGF0dHJpYnV0ZS4NCisJICogVGhlIGRlZmF1bHQgdmFsdWUgaXMgPGNvZGU+IjAuMSI8L2NvZGU+Lg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8cD4NCisJICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+SG9zdCBTZWNvbmRhcnkgUmVjb3ZlcnkgUmF0ZTQzPC9lbT4nIGF0dHJpYnV0ZSBpc24ndCBjbGVhciwNCisJICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLg0KKwkgKiA8L3A+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5Ib3N0IFNlY29uZGFyeSBSZWNvdmVyeSBSYXRlNDM8L2VtPicgYXR0cmlidXRlLg0KKwkgKiBAc2VlICNzZXRIb3N0U2Vjb25kYXJ5UmVjb3ZlcnlSYXRlNDMoZG91YmxlKQ0KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuVmVjdG9yUGFja2FnZSNnZXREZW5ndWVNb2RlbF9Ib3N0U2Vjb25kYXJ5UmVjb3ZlcnlSYXRlNDMoKQ0KKwkgKiBAbW9kZWwgZGVmYXVsdD0iMC4xIg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlkb3VibGUgZ2V0SG9zdFNlY29uZGFyeVJlY292ZXJ5UmF0ZTQzKCk7DQorDQorCS8qKg0KKwkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLkRlbmd1ZU1vZGVsI2dldEhvc3RTZWNvbmRhcnlSZWNvdmVyeVJhdGU0MyA8ZW0+SG9zdCBTZWNvbmRhcnkgUmVjb3ZlcnkgUmF0ZTQzPC9lbT59JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5Ib3N0IFNlY29uZGFyeSBSZWNvdmVyeSBSYXRlNDM8L2VtPicgYXR0cmlidXRlLg0KKwkgKiBAc2VlICNnZXRIb3N0U2Vjb25kYXJ5UmVjb3ZlcnlSYXRlNDMoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwl2b2lkIHNldEhvc3RTZWNvbmRhcnlSZWNvdmVyeVJhdGU0Myhkb3VibGUgdmFsdWUpOw0KKw0KKwkvKioNCisJICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+SG9zdCBTZWNvbmRhcnkgSW5jdWJhdGlvbiBSYXRlMTI8L2I+PC9lbT4nIGF0dHJpYnV0ZS4NCisJICogVGhlIGRlZmF1bHQgdmFsdWUgaXMgPGNvZGU+IjAuMiI8L2NvZGU+Lg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8cD4NCisJICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+SG9zdCBTZWNvbmRhcnkgSW5jdWJhdGlvbiBSYXRlMTI8L2VtPicgYXR0cmlidXRlIGlzbid0IGNsZWFyLA0KKwkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uDQorCSAqIDwvcD4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPkhvc3QgU2Vjb25kYXJ5IEluY3ViYXRpb24gUmF0ZTEyPC9lbT4nIGF0dHJpYnV0ZS4NCisJICogQHNlZSAjc2V0SG9zdFNlY29uZGFyeUluY3ViYXRpb25SYXRlMTIoZG91YmxlKQ0KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuVmVjdG9yUGFja2FnZSNnZXREZW5ndWVNb2RlbF9Ib3N0U2Vjb25kYXJ5SW5jdWJhdGlvblJhdGUxMigpDQorCSAqIEBtb2RlbCBkZWZhdWx0PSIwLjIiDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCWRvdWJsZSBnZXRIb3N0U2Vjb25kYXJ5SW5jdWJhdGlvblJhdGUxMigpOw0KKw0KKwkvKioNCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbCNnZXRIb3N0U2Vjb25kYXJ5SW5jdWJhdGlvblJhdGUxMiA8ZW0+SG9zdCBTZWNvbmRhcnkgSW5jdWJhdGlvbiBSYXRlMTI8L2VtPn0nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPkhvc3QgU2Vjb25kYXJ5IEluY3ViYXRpb24gUmF0ZTEyPC9lbT4nIGF0dHJpYnV0ZS4NCisJICogQHNlZSAjZ2V0SG9zdFNlY29uZGFyeUluY3ViYXRpb25SYXRlMTIoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwl2b2lkIHNldEhvc3RTZWNvbmRhcnlJbmN1YmF0aW9uUmF0ZTEyKGRvdWJsZSB2YWx1ZSk7DQorDQorCS8qKg0KKwkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5Ib3N0IFNlY29uZGFyeSBJbmN1YmF0aW9uIFJhdGUxMzwvYj48L2VtPicgYXR0cmlidXRlLg0KKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyA8Y29kZT4iMC4yIjwvY29kZT4uDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDxwPg0KKwkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5Ib3N0IFNlY29uZGFyeSBJbmN1YmF0aW9uIFJhdGUxMzwvZW0+JyBhdHRyaWJ1dGUgaXNuJ3QgY2xlYXIsDQorCSAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4NCisJICogPC9wPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+SG9zdCBTZWNvbmRhcnkgSW5jdWJhdGlvbiBSYXRlMTM8L2VtPicgYXR0cmlidXRlLg0KKwkgKiBAc2VlICNzZXRIb3N0U2Vjb25kYXJ5SW5jdWJhdGlvblJhdGUxMyhkb3VibGUpDQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5WZWN0b3JQYWNrYWdlI2dldERlbmd1ZU1vZGVsX0hvc3RTZWNvbmRhcnlJbmN1YmF0aW9uUmF0ZTEzKCkNCisJICogQG1vZGVsIGRlZmF1bHQ9IjAuMiINCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJZG91YmxlIGdldEhvc3RTZWNvbmRhcnlJbmN1YmF0aW9uUmF0ZTEzKCk7DQorDQorCS8qKg0KKwkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLkRlbmd1ZU1vZGVsI2dldEhvc3RTZWNvbmRhcnlJbmN1YmF0aW9uUmF0ZTEzIDxlbT5Ib3N0IFNlY29uZGFyeSBJbmN1YmF0aW9uIFJhdGUxMzwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+SG9zdCBTZWNvbmRhcnkgSW5jdWJhdGlvbiBSYXRlMTM8L2VtPicgYXR0cmlidXRlLg0KKwkgKiBAc2VlICNnZXRIb3N0U2Vjb25kYXJ5SW5jdWJhdGlvblJhdGUxMygpDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXZvaWQgc2V0SG9zdFNlY29uZGFyeUluY3ViYXRpb25SYXRlMTMoZG91YmxlIHZhbHVlKTsNCisNCisJLyoqDQorCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPkhvc3QgU2Vjb25kYXJ5IEluY3ViYXRpb24gUmF0ZTE0PC9iPjwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIGlzIDxjb2RlPiIwLjIiPC9jb2RlPi4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPHA+DQorCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPkhvc3QgU2Vjb25kYXJ5IEluY3ViYXRpb24gUmF0ZTE0PC9lbT4nIGF0dHJpYnV0ZSBpc24ndCBjbGVhciwNCisJICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLg0KKwkgKiA8L3A+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5Ib3N0IFNlY29uZGFyeSBJbmN1YmF0aW9uIFJhdGUxNDwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIEBzZWUgI3NldEhvc3RTZWNvbmRhcnlJbmN1YmF0aW9uUmF0ZTE0KGRvdWJsZSkNCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLlZlY3RvclBhY2thZ2UjZ2V0RGVuZ3VlTW9kZWxfSG9zdFNlY29uZGFyeUluY3ViYXRpb25SYXRlMTQoKQ0KKwkgKiBAbW9kZWwgZGVmYXVsdD0iMC4yIg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlkb3VibGUgZ2V0SG9zdFNlY29uZGFyeUluY3ViYXRpb25SYXRlMTQoKTsNCisNCisJLyoqDQorCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWwjZ2V0SG9zdFNlY29uZGFyeUluY3ViYXRpb25SYXRlMTQgPGVtPkhvc3QgU2Vjb25kYXJ5IEluY3ViYXRpb24gUmF0ZTE0PC9lbT59JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5Ib3N0IFNlY29uZGFyeSBJbmN1YmF0aW9uIFJhdGUxNDwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIEBzZWUgI2dldEhvc3RTZWNvbmRhcnlJbmN1YmF0aW9uUmF0ZTE0KCkNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJdm9pZCBzZXRIb3N0U2Vjb25kYXJ5SW5jdWJhdGlvblJhdGUxNChkb3VibGUgdmFsdWUpOw0KKw0KKwkvKioNCisJICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+SG9zdCBTZWNvbmRhcnkgSW5jdWJhdGlvbiBSYXRlMjE8L2I+PC9lbT4nIGF0dHJpYnV0ZS4NCisJICogVGhlIGRlZmF1bHQgdmFsdWUgaXMgPGNvZGU+IjAuMiI8L2NvZGU+Lg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8cD4NCisJICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+SG9zdCBTZWNvbmRhcnkgSW5jdWJhdGlvbiBSYXRlMjE8L2VtPicgYXR0cmlidXRlIGlzbid0IGNsZWFyLA0KKwkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uDQorCSAqIDwvcD4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPkhvc3QgU2Vjb25kYXJ5IEluY3ViYXRpb24gUmF0ZTIxPC9lbT4nIGF0dHJpYnV0ZS4NCisJICogQHNlZSAjc2V0SG9zdFNlY29uZGFyeUluY3ViYXRpb25SYXRlMjEoZG91YmxlKQ0KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuVmVjdG9yUGFja2FnZSNnZXREZW5ndWVNb2RlbF9Ib3N0U2Vjb25kYXJ5SW5jdWJhdGlvblJhdGUyMSgpDQorCSAqIEBtb2RlbCBkZWZhdWx0PSIwLjIiDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCWRvdWJsZSBnZXRIb3N0U2Vjb25kYXJ5SW5jdWJhdGlvblJhdGUyMSgpOw0KKw0KKwkvKioNCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbCNnZXRIb3N0U2Vjb25kYXJ5SW5jdWJhdGlvblJhdGUyMSA8ZW0+SG9zdCBTZWNvbmRhcnkgSW5jdWJhdGlvbiBSYXRlMjE8L2VtPn0nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPkhvc3QgU2Vjb25kYXJ5IEluY3ViYXRpb24gUmF0ZTIxPC9lbT4nIGF0dHJpYnV0ZS4NCisJICogQHNlZSAjZ2V0SG9zdFNlY29uZGFyeUluY3ViYXRpb25SYXRlMjEoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwl2b2lkIHNldEhvc3RTZWNvbmRhcnlJbmN1YmF0aW9uUmF0ZTIxKGRvdWJsZSB2YWx1ZSk7DQorDQorCS8qKg0KKwkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5Ib3N0IFNlY29uZGFyeSBJbmN1YmF0aW9uIFJhdGUyMzwvYj48L2VtPicgYXR0cmlidXRlLg0KKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyA8Y29kZT4iMC4yIjwvY29kZT4uDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDxwPg0KKwkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5Ib3N0IFNlY29uZGFyeSBJbmN1YmF0aW9uIFJhdGUyMzwvZW0+JyBhdHRyaWJ1dGUgaXNuJ3QgY2xlYXIsDQorCSAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4NCisJICogPC9wPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+SG9zdCBTZWNvbmRhcnkgSW5jdWJhdGlvbiBSYXRlMjM8L2VtPicgYXR0cmlidXRlLg0KKwkgKiBAc2VlICNzZXRIb3N0U2Vjb25kYXJ5SW5jdWJhdGlvblJhdGUyMyhkb3VibGUpDQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5WZWN0b3JQYWNrYWdlI2dldERlbmd1ZU1vZGVsX0hvc3RTZWNvbmRhcnlJbmN1YmF0aW9uUmF0ZTIzKCkNCisJICogQG1vZGVsIGRlZmF1bHQ9IjAuMiINCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJZG91YmxlIGdldEhvc3RTZWNvbmRhcnlJbmN1YmF0aW9uUmF0ZTIzKCk7DQorDQorCS8qKg0KKwkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLkRlbmd1ZU1vZGVsI2dldEhvc3RTZWNvbmRhcnlJbmN1YmF0aW9uUmF0ZTIzIDxlbT5Ib3N0IFNlY29uZGFyeSBJbmN1YmF0aW9uIFJhdGUyMzwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+SG9zdCBTZWNvbmRhcnkgSW5jdWJhdGlvbiBSYXRlMjM8L2VtPicgYXR0cmlidXRlLg0KKwkgKiBAc2VlICNnZXRIb3N0U2Vjb25kYXJ5SW5jdWJhdGlvblJhdGUyMygpDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXZvaWQgc2V0SG9zdFNlY29uZGFyeUluY3ViYXRpb25SYXRlMjMoZG91YmxlIHZhbHVlKTsNCisNCisJLyoqDQorCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPkhvc3QgU2Vjb25kYXJ5IEluY3ViYXRpb24gUmF0ZTI0PC9iPjwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIGlzIDxjb2RlPiIwLjIiPC9jb2RlPi4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPHA+DQorCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPkhvc3QgU2Vjb25kYXJ5IEluY3ViYXRpb24gUmF0ZTI0PC9lbT4nIGF0dHJpYnV0ZSBpc24ndCBjbGVhciwNCisJICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLg0KKwkgKiA8L3A+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5Ib3N0IFNlY29uZGFyeSBJbmN1YmF0aW9uIFJhdGUyNDwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIEBzZWUgI3NldEhvc3RTZWNvbmRhcnlJbmN1YmF0aW9uUmF0ZTI0KGRvdWJsZSkNCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLlZlY3RvclBhY2thZ2UjZ2V0RGVuZ3VlTW9kZWxfSG9zdFNlY29uZGFyeUluY3ViYXRpb25SYXRlMjQoKQ0KKwkgKiBAbW9kZWwgZGVmYXVsdD0iMC4yIg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlkb3VibGUgZ2V0SG9zdFNlY29uZGFyeUluY3ViYXRpb25SYXRlMjQoKTsNCisNCisJLyoqDQorCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWwjZ2V0SG9zdFNlY29uZGFyeUluY3ViYXRpb25SYXRlMjQgPGVtPkhvc3QgU2Vjb25kYXJ5IEluY3ViYXRpb24gUmF0ZTI0PC9lbT59JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5Ib3N0IFNlY29uZGFyeSBJbmN1YmF0aW9uIFJhdGUyNDwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIEBzZWUgI2dldEhvc3RTZWNvbmRhcnlJbmN1YmF0aW9uUmF0ZTI0KCkNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJdm9pZCBzZXRIb3N0U2Vjb25kYXJ5SW5jdWJhdGlvblJhdGUyNChkb3VibGUgdmFsdWUpOw0KKw0KKwkvKioNCisJICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+SG9zdCBTZWNvbmRhcnkgSW5jdWJhdGlvbiBSYXRlMzE8L2I+PC9lbT4nIGF0dHJpYnV0ZS4NCisJICogVGhlIGRlZmF1bHQgdmFsdWUgaXMgPGNvZGU+IjAuMiI8L2NvZGU+Lg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8cD4NCisJICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+SG9zdCBTZWNvbmRhcnkgSW5jdWJhdGlvbiBSYXRlMzE8L2VtPicgYXR0cmlidXRlIGlzbid0IGNsZWFyLA0KKwkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uDQorCSAqIDwvcD4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPkhvc3QgU2Vjb25kYXJ5IEluY3ViYXRpb24gUmF0ZTMxPC9lbT4nIGF0dHJpYnV0ZS4NCisJICogQHNlZSAjc2V0SG9zdFNlY29uZGFyeUluY3ViYXRpb25SYXRlMzEoZG91YmxlKQ0KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuVmVjdG9yUGFja2FnZSNnZXREZW5ndWVNb2RlbF9Ib3N0U2Vjb25kYXJ5SW5jdWJhdGlvblJhdGUzMSgpDQorCSAqIEBtb2RlbCBkZWZhdWx0PSIwLjIiDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCWRvdWJsZSBnZXRIb3N0U2Vjb25kYXJ5SW5jdWJhdGlvblJhdGUzMSgpOw0KKw0KKwkvKioNCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbCNnZXRIb3N0U2Vjb25kYXJ5SW5jdWJhdGlvblJhdGUzMSA8ZW0+SG9zdCBTZWNvbmRhcnkgSW5jdWJhdGlvbiBSYXRlMzE8L2VtPn0nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPkhvc3QgU2Vjb25kYXJ5IEluY3ViYXRpb24gUmF0ZTMxPC9lbT4nIGF0dHJpYnV0ZS4NCisJICogQHNlZSAjZ2V0SG9zdFNlY29uZGFyeUluY3ViYXRpb25SYXRlMzEoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwl2b2lkIHNldEhvc3RTZWNvbmRhcnlJbmN1YmF0aW9uUmF0ZTMxKGRvdWJsZSB2YWx1ZSk7DQorDQorCS8qKg0KKwkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5Ib3N0IFNlY29uZGFyeSBJbmN1YmF0aW9uIFJhdGUzMjwvYj48L2VtPicgYXR0cmlidXRlLg0KKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyA8Y29kZT4iMC4yIjwvY29kZT4uDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDxwPg0KKwkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5Ib3N0IFNlY29uZGFyeSBJbmN1YmF0aW9uIFJhdGUzMjwvZW0+JyBhdHRyaWJ1dGUgaXNuJ3QgY2xlYXIsDQorCSAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4NCisJICogPC9wPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+SG9zdCBTZWNvbmRhcnkgSW5jdWJhdGlvbiBSYXRlMzI8L2VtPicgYXR0cmlidXRlLg0KKwkgKiBAc2VlICNzZXRIb3N0U2Vjb25kYXJ5SW5jdWJhdGlvblJhdGUzMihkb3VibGUpDQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5WZWN0b3JQYWNrYWdlI2dldERlbmd1ZU1vZGVsX0hvc3RTZWNvbmRhcnlJbmN1YmF0aW9uUmF0ZTMyKCkNCisJICogQG1vZGVsIGRlZmF1bHQ9IjAuMiINCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJZG91YmxlIGdldEhvc3RTZWNvbmRhcnlJbmN1YmF0aW9uUmF0ZTMyKCk7DQorDQorCS8qKg0KKwkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLkRlbmd1ZU1vZGVsI2dldEhvc3RTZWNvbmRhcnlJbmN1YmF0aW9uUmF0ZTMyIDxlbT5Ib3N0IFNlY29uZGFyeSBJbmN1YmF0aW9uIFJhdGUzMjwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+SG9zdCBTZWNvbmRhcnkgSW5jdWJhdGlvbiBSYXRlMzI8L2VtPicgYXR0cmlidXRlLg0KKwkgKiBAc2VlICNnZXRIb3N0U2Vjb25kYXJ5SW5jdWJhdGlvblJhdGUzMigpDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXZvaWQgc2V0SG9zdFNlY29uZGFyeUluY3ViYXRpb25SYXRlMzIoZG91YmxlIHZhbHVlKTsNCisNCisJLyoqDQorCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPkhvc3QgU2Vjb25kYXJ5IEluY3ViYXRpb24gUmF0ZTM0PC9iPjwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIGlzIDxjb2RlPiIwLjIiPC9jb2RlPi4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPHA+DQorCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPkhvc3QgU2Vjb25kYXJ5IEluY3ViYXRpb24gUmF0ZTM0PC9lbT4nIGF0dHJpYnV0ZSBpc24ndCBjbGVhciwNCisJICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLg0KKwkgKiA8L3A+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5Ib3N0IFNlY29uZGFyeSBJbmN1YmF0aW9uIFJhdGUzNDwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIEBzZWUgI3NldEhvc3RTZWNvbmRhcnlJbmN1YmF0aW9uUmF0ZTM0KGRvdWJsZSkNCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLlZlY3RvclBhY2thZ2UjZ2V0RGVuZ3VlTW9kZWxfSG9zdFNlY29uZGFyeUluY3ViYXRpb25SYXRlMzQoKQ0KKwkgKiBAbW9kZWwgZGVmYXVsdD0iMC4yIg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlkb3VibGUgZ2V0SG9zdFNlY29uZGFyeUluY3ViYXRpb25SYXRlMzQoKTsNCisNCisJLyoqDQorCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWwjZ2V0SG9zdFNlY29uZGFyeUluY3ViYXRpb25SYXRlMzQgPGVtPkhvc3QgU2Vjb25kYXJ5IEluY3ViYXRpb24gUmF0ZTM0PC9lbT59JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5Ib3N0IFNlY29uZGFyeSBJbmN1YmF0aW9uIFJhdGUzNDwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIEBzZWUgI2dldEhvc3RTZWNvbmRhcnlJbmN1YmF0aW9uUmF0ZTM0KCkNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJdm9pZCBzZXRIb3N0U2Vjb25kYXJ5SW5jdWJhdGlvblJhdGUzNChkb3VibGUgdmFsdWUpOw0KKw0KKwkvKioNCisJICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+SG9zdCBTZWNvbmRhcnkgSW5jdWJhdGlvbiBSYXRlNDE8L2I+PC9lbT4nIGF0dHJpYnV0ZS4NCisJICogVGhlIGRlZmF1bHQgdmFsdWUgaXMgPGNvZGU+IjAuMiI8L2NvZGU+Lg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8cD4NCisJICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+SG9zdCBTZWNvbmRhcnkgSW5jdWJhdGlvbiBSYXRlNDE8L2VtPicgYXR0cmlidXRlIGlzbid0IGNsZWFyLA0KKwkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uDQorCSAqIDwvcD4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPkhvc3QgU2Vjb25kYXJ5IEluY3ViYXRpb24gUmF0ZTQxPC9lbT4nIGF0dHJpYnV0ZS4NCisJICogQHNlZSAjc2V0SG9zdFNlY29uZGFyeUluY3ViYXRpb25SYXRlNDEoZG91YmxlKQ0KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuVmVjdG9yUGFja2FnZSNnZXREZW5ndWVNb2RlbF9Ib3N0U2Vjb25kYXJ5SW5jdWJhdGlvblJhdGU0MSgpDQorCSAqIEBtb2RlbCBkZWZhdWx0PSIwLjIiDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCWRvdWJsZSBnZXRIb3N0U2Vjb25kYXJ5SW5jdWJhdGlvblJhdGU0MSgpOw0KKw0KKwkvKioNCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbCNnZXRIb3N0U2Vjb25kYXJ5SW5jdWJhdGlvblJhdGU0MSA8ZW0+SG9zdCBTZWNvbmRhcnkgSW5jdWJhdGlvbiBSYXRlNDE8L2VtPn0nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPkhvc3QgU2Vjb25kYXJ5IEluY3ViYXRpb24gUmF0ZTQxPC9lbT4nIGF0dHJpYnV0ZS4NCisJICogQHNlZSAjZ2V0SG9zdFNlY29uZGFyeUluY3ViYXRpb25SYXRlNDEoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwl2b2lkIHNldEhvc3RTZWNvbmRhcnlJbmN1YmF0aW9uUmF0ZTQxKGRvdWJsZSB2YWx1ZSk7DQorDQorCS8qKg0KKwkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5Ib3N0IFNlY29uZGFyeSBJbmN1YmF0aW9uIFJhdGU0MjwvYj48L2VtPicgYXR0cmlidXRlLg0KKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyA8Y29kZT4iMC4yIjwvY29kZT4uDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDxwPg0KKwkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5Ib3N0IFNlY29uZGFyeSBJbmN1YmF0aW9uIFJhdGU0MjwvZW0+JyBhdHRyaWJ1dGUgaXNuJ3QgY2xlYXIsDQorCSAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4NCisJICogPC9wPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+SG9zdCBTZWNvbmRhcnkgSW5jdWJhdGlvbiBSYXRlNDI8L2VtPicgYXR0cmlidXRlLg0KKwkgKiBAc2VlICNzZXRIb3N0U2Vjb25kYXJ5SW5jdWJhdGlvblJhdGU0Mihkb3VibGUpDQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5WZWN0b3JQYWNrYWdlI2dldERlbmd1ZU1vZGVsX0hvc3RTZWNvbmRhcnlJbmN1YmF0aW9uUmF0ZTQyKCkNCisJICogQG1vZGVsIGRlZmF1bHQ9IjAuMiINCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJZG91YmxlIGdldEhvc3RTZWNvbmRhcnlJbmN1YmF0aW9uUmF0ZTQyKCk7DQorDQorCS8qKg0KKwkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLkRlbmd1ZU1vZGVsI2dldEhvc3RTZWNvbmRhcnlJbmN1YmF0aW9uUmF0ZTQyIDxlbT5Ib3N0IFNlY29uZGFyeSBJbmN1YmF0aW9uIFJhdGU0MjwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+SG9zdCBTZWNvbmRhcnkgSW5jdWJhdGlvbiBSYXRlNDI8L2VtPicgYXR0cmlidXRlLg0KKwkgKiBAc2VlICNnZXRIb3N0U2Vjb25kYXJ5SW5jdWJhdGlvblJhdGU0MigpDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXZvaWQgc2V0SG9zdFNlY29uZGFyeUluY3ViYXRpb25SYXRlNDIoZG91YmxlIHZhbHVlKTsNCisNCisJLyoqDQorCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPkhvc3QgU2Vjb25kYXJ5IEluY3ViYXRpb24gUmF0ZTQzPC9iPjwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIGlzIDxjb2RlPiIwLjIiPC9jb2RlPi4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPHA+DQorCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPkhvc3QgU2Vjb25kYXJ5IEluY3ViYXRpb24gUmF0ZTQzPC9lbT4nIGF0dHJpYnV0ZSBpc24ndCBjbGVhciwNCisJICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLg0KKwkgKiA8L3A+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5Ib3N0IFNlY29uZGFyeSBJbmN1YmF0aW9uIFJhdGU0MzwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIEBzZWUgI3NldEhvc3RTZWNvbmRhcnlJbmN1YmF0aW9uUmF0ZTQzKGRvdWJsZSkNCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLlZlY3RvclBhY2thZ2UjZ2V0RGVuZ3VlTW9kZWxfSG9zdFNlY29uZGFyeUluY3ViYXRpb25SYXRlNDMoKQ0KKwkgKiBAbW9kZWwgZGVmYXVsdD0iMC4yIg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlkb3VibGUgZ2V0SG9zdFNlY29uZGFyeUluY3ViYXRpb25SYXRlNDMoKTsNCisNCisJLyoqDQorCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWwjZ2V0SG9zdFNlY29uZGFyeUluY3ViYXRpb25SYXRlNDMgPGVtPkhvc3QgU2Vjb25kYXJ5IEluY3ViYXRpb24gUmF0ZTQzPC9lbT59JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5Ib3N0IFNlY29uZGFyeSBJbmN1YmF0aW9uIFJhdGU0MzwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIEBzZWUgI2dldEhvc3RTZWNvbmRhcnlJbmN1YmF0aW9uUmF0ZTQzKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJdm9pZCBzZXRIb3N0U2Vjb25kYXJ5SW5jdWJhdGlvblJhdGU0Myhkb3VibGUgdmFsdWUpOw0KKw0KKwkvKioNCisJICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+VmVjdG9yIEluZmVjdGl2aXR5MTwvYj48L2VtPicgYXR0cmlidXRlLg0KKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyA8Y29kZT4iMSI8L2NvZGU+Lg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8cD4NCisJICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+VmVjdG9yIEluZmVjdGl2aXR5MTwvZW0+JyBhdHRyaWJ1dGUgaXNuJ3QgY2xlYXIsDQorCSAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4NCisJICogPC9wPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+VmVjdG9yIEluZmVjdGl2aXR5MTwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIEBzZWUgI3NldFZlY3RvckluZmVjdGl2aXR5MShkb3VibGUpDQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5WZWN0b3JQYWNrYWdlI2dldERlbmd1ZU1vZGVsX1ZlY3RvckluZmVjdGl2aXR5MSgpDQorCSAqIEBtb2RlbCBkZWZhdWx0PSIxIg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlkb3VibGUgZ2V0VmVjdG9ySW5mZWN0aXZpdHkxKCk7DQorDQorCS8qKg0KKwkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLkRlbmd1ZU1vZGVsI2dldFZlY3RvckluZmVjdGl2aXR5MSA8ZW0+VmVjdG9yIEluZmVjdGl2aXR5MTwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+VmVjdG9yIEluZmVjdGl2aXR5MTwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIEBzZWUgI2dldFZlY3RvckluZmVjdGl2aXR5MSgpDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXZvaWQgc2V0VmVjdG9ySW5mZWN0aXZpdHkxKGRvdWJsZSB2YWx1ZSk7DQorDQorCS8qKg0KKwkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5WZWN0b3IgSW5mZWN0aXZpdHkyPC9iPjwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIGlzIDxjb2RlPiIxIjwvY29kZT4uDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDxwPg0KKwkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5WZWN0b3IgSW5mZWN0aXZpdHkyPC9lbT4nIGF0dHJpYnV0ZSBpc24ndCBjbGVhciwNCisJICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLg0KKwkgKiA8L3A+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5WZWN0b3IgSW5mZWN0aXZpdHkyPC9lbT4nIGF0dHJpYnV0ZS4NCisJICogQHNlZSAjc2V0VmVjdG9ySW5mZWN0aXZpdHkyKGRvdWJsZSkNCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLlZlY3RvclBhY2thZ2UjZ2V0RGVuZ3VlTW9kZWxfVmVjdG9ySW5mZWN0aXZpdHkyKCkNCisJICogQG1vZGVsIGRlZmF1bHQ9IjEiDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCWRvdWJsZSBnZXRWZWN0b3JJbmZlY3Rpdml0eTIoKTsNCisNCisJLyoqDQorCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWwjZ2V0VmVjdG9ySW5mZWN0aXZpdHkyIDxlbT5WZWN0b3IgSW5mZWN0aXZpdHkyPC9lbT59JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5WZWN0b3IgSW5mZWN0aXZpdHkyPC9lbT4nIGF0dHJpYnV0ZS4NCisJICogQHNlZSAjZ2V0VmVjdG9ySW5mZWN0aXZpdHkyKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJdm9pZCBzZXRWZWN0b3JJbmZlY3Rpdml0eTIoZG91YmxlIHZhbHVlKTsNCisNCisJLyoqDQorCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPlZlY3RvciBJbmZlY3Rpdml0eTM8L2I+PC9lbT4nIGF0dHJpYnV0ZS4NCisJICogVGhlIGRlZmF1bHQgdmFsdWUgaXMgPGNvZGU+IjEiPC9jb2RlPi4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPHA+DQorCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPlZlY3RvciBJbmZlY3Rpdml0eTM8L2VtPicgYXR0cmlidXRlIGlzbid0IGNsZWFyLA0KKwkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uDQorCSAqIDwvcD4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPlZlY3RvciBJbmZlY3Rpdml0eTM8L2VtPicgYXR0cmlidXRlLg0KKwkgKiBAc2VlICNzZXRWZWN0b3JJbmZlY3Rpdml0eTMoZG91YmxlKQ0KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuVmVjdG9yUGFja2FnZSNnZXREZW5ndWVNb2RlbF9WZWN0b3JJbmZlY3Rpdml0eTMoKQ0KKwkgKiBAbW9kZWwgZGVmYXVsdD0iMSINCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJZG91YmxlIGdldFZlY3RvckluZmVjdGl2aXR5MygpOw0KKw0KKwkvKioNCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbCNnZXRWZWN0b3JJbmZlY3Rpdml0eTMgPGVtPlZlY3RvciBJbmZlY3Rpdml0eTM8L2VtPn0nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPlZlY3RvciBJbmZlY3Rpdml0eTM8L2VtPicgYXR0cmlidXRlLg0KKwkgKiBAc2VlICNnZXRWZWN0b3JJbmZlY3Rpdml0eTMoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwl2b2lkIHNldFZlY3RvckluZmVjdGl2aXR5Myhkb3VibGUgdmFsdWUpOw0KKw0KKwkvKioNCisJICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+VmVjdG9yIEluZmVjdGl2aXR5NDwvYj48L2VtPicgYXR0cmlidXRlLg0KKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyA8Y29kZT4iMSI8L2NvZGU+Lg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8cD4NCisJICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+VmVjdG9yIEluZmVjdGl2aXR5NDwvZW0+JyBhdHRyaWJ1dGUgaXNuJ3QgY2xlYXIsDQorCSAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4NCisJICogPC9wPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+VmVjdG9yIEluZmVjdGl2aXR5NDwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIEBzZWUgI3NldFZlY3RvckluZmVjdGl2aXR5NChkb3VibGUpDQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5WZWN0b3JQYWNrYWdlI2dldERlbmd1ZU1vZGVsX1ZlY3RvckluZmVjdGl2aXR5NCgpDQorCSAqIEBtb2RlbCBkZWZhdWx0PSIxIg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlkb3VibGUgZ2V0VmVjdG9ySW5mZWN0aXZpdHk0KCk7DQorDQorCS8qKg0KKwkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLkRlbmd1ZU1vZGVsI2dldFZlY3RvckluZmVjdGl2aXR5NCA8ZW0+VmVjdG9yIEluZmVjdGl2aXR5NDwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+VmVjdG9yIEluZmVjdGl2aXR5NDwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIEBzZWUgI2dldFZlY3RvckluZmVjdGl2aXR5NCgpDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXZvaWQgc2V0VmVjdG9ySW5mZWN0aXZpdHk0KGRvdWJsZSB2YWx1ZSk7DQorDQorCS8qKg0KKwkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5WZWN0b3IgQURFMTwvYj48L2VtPicgYXR0cmlidXRlLg0KKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyA8Y29kZT4iMS44IjwvY29kZT4uDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDxwPg0KKwkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5WZWN0b3IgQURFMTwvZW0+JyBhdHRyaWJ1dGUgaXNuJ3QgY2xlYXIsDQorCSAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4NCisJICogPC9wPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+VmVjdG9yIEFERTE8L2VtPicgYXR0cmlidXRlLg0KKwkgKiBAc2VlICNzZXRWZWN0b3JBREUxKGRvdWJsZSkNCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLlZlY3RvclBhY2thZ2UjZ2V0RGVuZ3VlTW9kZWxfVmVjdG9yQURFMSgpDQorCSAqIEBtb2RlbCBkZWZhdWx0PSIxLjgiDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCWRvdWJsZSBnZXRWZWN0b3JBREUxKCk7DQorDQorCS8qKg0KKwkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLkRlbmd1ZU1vZGVsI2dldFZlY3RvckFERTEgPGVtPlZlY3RvciBBREUxPC9lbT59JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5WZWN0b3IgQURFMTwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIEBzZWUgI2dldFZlY3RvckFERTEoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwl2b2lkIHNldFZlY3RvckFERTEoZG91YmxlIHZhbHVlKTsNCisNCisJLyoqDQorCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPlZlY3RvciBBREUyPC9iPjwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIGlzIDxjb2RlPiIxLjgiPC9jb2RlPi4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPHA+DQorCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPlZlY3RvciBBREUyPC9lbT4nIGF0dHJpYnV0ZSBpc24ndCBjbGVhciwNCisJICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLg0KKwkgKiA8L3A+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5WZWN0b3IgQURFMjwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIEBzZWUgI3NldFZlY3RvckFERTIoZG91YmxlKQ0KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuVmVjdG9yUGFja2FnZSNnZXREZW5ndWVNb2RlbF9WZWN0b3JBREUyKCkNCisJICogQG1vZGVsIGRlZmF1bHQ9IjEuOCINCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJZG91YmxlIGdldFZlY3RvckFERTIoKTsNCisNCisJLyoqDQorCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWwjZ2V0VmVjdG9yQURFMiA8ZW0+VmVjdG9yIEFERTI8L2VtPn0nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPlZlY3RvciBBREUyPC9lbT4nIGF0dHJpYnV0ZS4NCisJICogQHNlZSAjZ2V0VmVjdG9yQURFMigpDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXZvaWQgc2V0VmVjdG9yQURFMihkb3VibGUgdmFsdWUpOw0KKw0KKwkvKioNCisJICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+VmVjdG9yIEFERTM8L2I+PC9lbT4nIGF0dHJpYnV0ZS4NCisJICogVGhlIGRlZmF1bHQgdmFsdWUgaXMgPGNvZGU+IjEuOCI8L2NvZGU+Lg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8cD4NCisJICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+VmVjdG9yIEFERTM8L2VtPicgYXR0cmlidXRlIGlzbid0IGNsZWFyLA0KKwkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uDQorCSAqIDwvcD4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPlZlY3RvciBBREUzPC9lbT4nIGF0dHJpYnV0ZS4NCisJICogQHNlZSAjc2V0VmVjdG9yQURFMyhkb3VibGUpDQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5WZWN0b3JQYWNrYWdlI2dldERlbmd1ZU1vZGVsX1ZlY3RvckFERTMoKQ0KKwkgKiBAbW9kZWwgZGVmYXVsdD0iMS44Ig0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlkb3VibGUgZ2V0VmVjdG9yQURFMygpOw0KKw0KKwkvKioNCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbCNnZXRWZWN0b3JBREUzIDxlbT5WZWN0b3IgQURFMzwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+VmVjdG9yIEFERTM8L2VtPicgYXR0cmlidXRlLg0KKwkgKiBAc2VlICNnZXRWZWN0b3JBREUzKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJdm9pZCBzZXRWZWN0b3JBREUzKGRvdWJsZSB2YWx1ZSk7DQorDQorCS8qKg0KKwkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5WZWN0b3IgQURFNDwvYj48L2VtPicgYXR0cmlidXRlLg0KKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyA8Y29kZT4iMS44IjwvY29kZT4uDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDxwPg0KKwkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5WZWN0b3IgQURFNDwvZW0+JyBhdHRyaWJ1dGUgaXNuJ3QgY2xlYXIsDQorCSAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4NCisJICogPC9wPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+VmVjdG9yIEFERTQ8L2VtPicgYXR0cmlidXRlLg0KKwkgKiBAc2VlICNzZXRWZWN0b3JBREU0KGRvdWJsZSkNCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLlZlY3RvclBhY2thZ2UjZ2V0RGVuZ3VlTW9kZWxfVmVjdG9yQURFNCgpDQorCSAqIEBtb2RlbCBkZWZhdWx0PSIxLjgiDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCWRvdWJsZSBnZXRWZWN0b3JBREU0KCk7DQorDQorCS8qKg0KKwkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLkRlbmd1ZU1vZGVsI2dldFZlY3RvckFERTQgPGVtPlZlY3RvciBBREU0PC9lbT59JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5WZWN0b3IgQURFNDwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIEBzZWUgI2dldFZlY3RvckFERTQoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwl2b2lkIHNldFZlY3RvckFERTQoZG91YmxlIHZhbHVlKTsNCisNCisJLyoqDQorCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPlZlY3RvciBJbmN1YmF0aW9uIFJhdGUxPC9iPjwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIGlzIDxjb2RlPiIwLjEiPC9jb2RlPi4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPHA+DQorCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPlZlY3RvciBJbmN1YmF0aW9uIFJhdGUxPC9lbT4nIGF0dHJpYnV0ZSBpc24ndCBjbGVhciwNCisJICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLg0KKwkgKiA8L3A+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5WZWN0b3IgSW5jdWJhdGlvbiBSYXRlMTwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIEBzZWUgI3NldFZlY3RvckluY3ViYXRpb25SYXRlMShkb3VibGUpDQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5WZWN0b3JQYWNrYWdlI2dldERlbmd1ZU1vZGVsX1ZlY3RvckluY3ViYXRpb25SYXRlMSgpDQorCSAqIEBtb2RlbCBkZWZhdWx0PSIwLjEiDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCWRvdWJsZSBnZXRWZWN0b3JJbmN1YmF0aW9uUmF0ZTEoKTsNCisNCisJLyoqDQorCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWwjZ2V0VmVjdG9ySW5jdWJhdGlvblJhdGUxIDxlbT5WZWN0b3IgSW5jdWJhdGlvbiBSYXRlMTwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+VmVjdG9yIEluY3ViYXRpb24gUmF0ZTE8L2VtPicgYXR0cmlidXRlLg0KKwkgKiBAc2VlICNnZXRWZWN0b3JJbmN1YmF0aW9uUmF0ZTEoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwl2b2lkIHNldFZlY3RvckluY3ViYXRpb25SYXRlMShkb3VibGUgdmFsdWUpOw0KKw0KKwkvKioNCisJICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+VmVjdG9yIEluY3ViYXRpb24gUmF0ZTI8L2I+PC9lbT4nIGF0dHJpYnV0ZS4NCisJICogVGhlIGRlZmF1bHQgdmFsdWUgaXMgPGNvZGU+IjAuMSI8L2NvZGU+Lg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8cD4NCisJICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+VmVjdG9yIEluY3ViYXRpb24gUmF0ZTI8L2VtPicgYXR0cmlidXRlIGlzbid0IGNsZWFyLA0KKwkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uDQorCSAqIDwvcD4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPlZlY3RvciBJbmN1YmF0aW9uIFJhdGUyPC9lbT4nIGF0dHJpYnV0ZS4NCisJICogQHNlZSAjc2V0VmVjdG9ySW5jdWJhdGlvblJhdGUyKGRvdWJsZSkNCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLlZlY3RvclBhY2thZ2UjZ2V0RGVuZ3VlTW9kZWxfVmVjdG9ySW5jdWJhdGlvblJhdGUyKCkNCisJICogQG1vZGVsIGRlZmF1bHQ9IjAuMSINCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJZG91YmxlIGdldFZlY3RvckluY3ViYXRpb25SYXRlMigpOw0KKw0KKwkvKioNCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbCNnZXRWZWN0b3JJbmN1YmF0aW9uUmF0ZTIgPGVtPlZlY3RvciBJbmN1YmF0aW9uIFJhdGUyPC9lbT59JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5WZWN0b3IgSW5jdWJhdGlvbiBSYXRlMjwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIEBzZWUgI2dldFZlY3RvckluY3ViYXRpb25SYXRlMigpDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXZvaWQgc2V0VmVjdG9ySW5jdWJhdGlvblJhdGUyKGRvdWJsZSB2YWx1ZSk7DQorDQorCS8qKg0KKwkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5WZWN0b3IgSW5jdWJhdGlvbiBSYXRlMzwvYj48L2VtPicgYXR0cmlidXRlLg0KKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyA8Y29kZT4iMC4xIjwvY29kZT4uDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDxwPg0KKwkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5WZWN0b3IgSW5jdWJhdGlvbiBSYXRlMzwvZW0+JyBhdHRyaWJ1dGUgaXNuJ3QgY2xlYXIsDQorCSAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4NCisJICogPC9wPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+VmVjdG9yIEluY3ViYXRpb24gUmF0ZTM8L2VtPicgYXR0cmlidXRlLg0KKwkgKiBAc2VlICNzZXRWZWN0b3JJbmN1YmF0aW9uUmF0ZTMoZG91YmxlKQ0KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuVmVjdG9yUGFja2FnZSNnZXREZW5ndWVNb2RlbF9WZWN0b3JJbmN1YmF0aW9uUmF0ZTMoKQ0KKwkgKiBAbW9kZWwgZGVmYXVsdD0iMC4xIg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlkb3VibGUgZ2V0VmVjdG9ySW5jdWJhdGlvblJhdGUzKCk7DQorDQorCS8qKg0KKwkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLkRlbmd1ZU1vZGVsI2dldFZlY3RvckluY3ViYXRpb25SYXRlMyA8ZW0+VmVjdG9yIEluY3ViYXRpb24gUmF0ZTM8L2VtPn0nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPlZlY3RvciBJbmN1YmF0aW9uIFJhdGUzPC9lbT4nIGF0dHJpYnV0ZS4NCisJICogQHNlZSAjZ2V0VmVjdG9ySW5jdWJhdGlvblJhdGUzKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJdm9pZCBzZXRWZWN0b3JJbmN1YmF0aW9uUmF0ZTMoZG91YmxlIHZhbHVlKTsNCisNCisJLyoqDQorCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPlZlY3RvciBJbmN1YmF0aW9uIFJhdGU0PC9iPjwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIGlzIDxjb2RlPiIwLjEiPC9jb2RlPi4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPHA+DQorCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPlZlY3RvciBJbmN1YmF0aW9uIFJhdGU0PC9lbT4nIGF0dHJpYnV0ZSBpc24ndCBjbGVhciwNCisJICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLg0KKwkgKiA8L3A+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5WZWN0b3IgSW5jdWJhdGlvbiBSYXRlNDwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIEBzZWUgI3NldFZlY3RvckluY3ViYXRpb25SYXRlNChkb3VibGUpDQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5WZWN0b3JQYWNrYWdlI2dldERlbmd1ZU1vZGVsX1ZlY3RvckluY3ViYXRpb25SYXRlNCgpDQorCSAqIEBtb2RlbCBkZWZhdWx0PSIwLjEiDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCWRvdWJsZSBnZXRWZWN0b3JJbmN1YmF0aW9uUmF0ZTQoKTsNCisNCisJLyoqDQorCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWwjZ2V0VmVjdG9ySW5jdWJhdGlvblJhdGU0IDxlbT5WZWN0b3IgSW5jdWJhdGlvbiBSYXRlNDwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+VmVjdG9yIEluY3ViYXRpb24gUmF0ZTQ8L2VtPicgYXR0cmlidXRlLg0KKwkgKiBAc2VlICNnZXRWZWN0b3JJbmN1YmF0aW9uUmF0ZTQoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwl2b2lkIHNldFZlY3RvckluY3ViYXRpb25SYXRlNChkb3VibGUgdmFsdWUpOw0KK30gLy8gRGVuZ3VlTW9kZWwNCmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3Ivc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy92ZWN0b3IvRGVuZ3VlTW9kZWxIb3N0TGFiZWwuamF2YSBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3ZlY3Rvci9EZW5ndWVNb2RlbEhvc3RMYWJlbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEzNjg3NmEKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3Ivc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy92ZWN0b3IvRGVuZ3VlTW9kZWxIb3N0TGFiZWwuamF2YQpAQCAtMCwwICsxLDIyIEBACisvKioNCisgKiA8Y29weXJpZ2h0Pg0KKyAqIDwvY29weXJpZ2h0Pg0KKyAqDQorICogJElkJA0KKyAqLw0KK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3RvcjsNCisNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWw7DQorDQorLyoqDQorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisgKiBBIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5EZW5ndWUgTW9kZWwgSG9zdCBMYWJlbDwvYj48L2VtPicuDQorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorICoNCisgKg0KKyAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5WZWN0b3JQYWNrYWdlI2dldERlbmd1ZU1vZGVsSG9zdExhYmVsKCkNCisgKiBAbW9kZWwNCisgKiBAZ2VuZXJhdGVkDQorICovDQorcHVibGljIGludGVyZmFjZSBEZW5ndWVNb2RlbEhvc3RMYWJlbCBleHRlbmRzIFN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWwgew0KK30gLy8gRGVuZ3VlTW9kZWxIb3N0TGFiZWwNCmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3Ivc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy92ZWN0b3IvRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZS5qYXZhIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvdmVjdG9yL0Rlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWUuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZWZiMjBmCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvdmVjdG9yL0Rlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWUuamF2YQpAQCAtMCwwICsxLDE5OTggQEAKKy8qKg0KKyAqIDxjb3B5cmlnaHQ+DQorICogPC9jb3B5cmlnaHQ+DQorICoNCisgKiAkSWQkDQorICovDQorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yOw0KKw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbFZhbHVlOw0KKw0KKy8qKg0KKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorICogQSByZXByZXNlbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+RGVuZ3VlIE1vZGVsIEhvc3QgTGFiZWwgVmFsdWU8L2I+PC9lbT4nLg0KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKyAqDQorICogPHA+DQorICogVGhlIGZvbGxvd2luZyBmZWF0dXJlcyBhcmUgc3VwcG9ydGVkOg0KKyAqIDx1bD4NCisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlI2dldEUxIDxlbT5FMTwvZW0+fTwvbGk+DQorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZSNnZXRFMiA8ZW0+RTI8L2VtPn08L2xpPg0KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLkRlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWUjZ2V0RTMgPGVtPkUzPC9lbT59PC9saT4NCisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlI2dldEU0IDxlbT5FNDwvZW0+fTwvbGk+DQorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZSNnZXRJMSA8ZW0+STE8L2VtPn08L2xpPg0KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLkRlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWUjZ2V0STIgPGVtPkkyPC9lbT59PC9saT4NCisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlI2dldEkzIDxlbT5JMzwvZW0+fTwvbGk+DQorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZSNnZXRJNCA8ZW0+STQ8L2VtPn08L2xpPg0KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLkRlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWUjZ2V0VDEgPGVtPlQxPC9lbT59PC9saT4NCisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlI2dldFQyIDxlbT5UMjwvZW0+fTwvbGk+DQorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZSNnZXRUMyA8ZW0+VDM8L2VtPn08L2xpPg0KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLkRlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWUjZ2V0VDQgPGVtPlQ0PC9lbT59PC9saT4NCisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlI2dldFIxIDxlbT5SMTwvZW0+fTwvbGk+DQorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZSNnZXRSMiA8ZW0+UjI8L2VtPn08L2xpPg0KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLkRlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWUjZ2V0UjMgPGVtPlIzPC9lbT59PC9saT4NCisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlI2dldFI0IDxlbT5SNDwvZW0+fTwvbGk+DQorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZSNnZXRFMTIgPGVtPkUxMjwvZW0+fTwvbGk+DQorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZSNnZXRFMTMgPGVtPkUxMzwvZW0+fTwvbGk+DQorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZSNnZXRFMTQgPGVtPkUxNDwvZW0+fTwvbGk+DQorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZSNnZXRFMjEgPGVtPkUyMTwvZW0+fTwvbGk+DQorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZSNnZXRFMjMgPGVtPkUyMzwvZW0+fTwvbGk+DQorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZSNnZXRFMjQgPGVtPkUyNDwvZW0+fTwvbGk+DQorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZSNnZXRFMzEgPGVtPkUzMTwvZW0+fTwvbGk+DQorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZSNnZXRFMzIgPGVtPkUzMjwvZW0+fTwvbGk+DQorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZSNnZXRFMzQgPGVtPkUzNDwvZW0+fTwvbGk+DQorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZSNnZXRFNDEgPGVtPkU0MTwvZW0+fTwvbGk+DQorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZSNnZXRFNDIgPGVtPkU0MjwvZW0+fTwvbGk+DQorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZSNnZXRFNDMgPGVtPkU0MzwvZW0+fTwvbGk+DQorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZSNnZXRJMTIgPGVtPkkxMjwvZW0+fTwvbGk+DQorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZSNnZXRJMTMgPGVtPkkxMzwvZW0+fTwvbGk+DQorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZSNnZXRJMTQgPGVtPkkxNDwvZW0+fTwvbGk+DQorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZSNnZXRJMjEgPGVtPkkyMTwvZW0+fTwvbGk+DQorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZSNnZXRJMjMgPGVtPkkyMzwvZW0+fTwvbGk+DQorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZSNnZXRJMjQgPGVtPkkyNDwvZW0+fTwvbGk+DQorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZSNnZXRJMzEgPGVtPkkzMTwvZW0+fTwvbGk+DQorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZSNnZXRJMzIgPGVtPkkzMjwvZW0+fTwvbGk+DQorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZSNnZXRJMzQgPGVtPkkzNDwvZW0+fTwvbGk+DQorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZSNnZXRJNDEgPGVtPkk0MTwvZW0+fTwvbGk+DQorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZSNnZXRJNDIgPGVtPkk0MjwvZW0+fTwvbGk+DQorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZSNnZXRJNDMgPGVtPkk0MzwvZW0+fTwvbGk+DQorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZSNnZXRSIDxlbT5SPC9lbT59PC9saT4NCisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlI2dldEluY2lkZW5jZTEgPGVtPkluY2lkZW5jZTE8L2VtPn08L2xpPg0KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLkRlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWUjZ2V0SW5jaWRlbmNlMiA8ZW0+SW5jaWRlbmNlMjwvZW0+fTwvbGk+DQorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZSNnZXRJbmNpZGVuY2UzIDxlbT5JbmNpZGVuY2UzPC9lbT59PC9saT4NCisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlI2dldEluY2lkZW5jZTQgPGVtPkluY2lkZW5jZTQ8L2VtPn08L2xpPg0KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLkRlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWUjZ2V0SW5jaWRlbmNlMTIgPGVtPkluY2lkZW5jZTEyPC9lbT59PC9saT4NCisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlI2dldEluY2lkZW5jZTIxIDxlbT5JbmNpZGVuY2UyMTwvZW0+fTwvbGk+DQorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZSNnZXRJbmNpZGVuY2UzMSA8ZW0+SW5jaWRlbmNlMzE8L2VtPn08L2xpPg0KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLkRlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWUjZ2V0SW5jaWRlbmNlNDEgPGVtPkluY2lkZW5jZTQxPC9lbT59PC9saT4NCisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlI2dldEluY2lkZW5jZTEzIDxlbT5JbmNpZGVuY2UxMzwvZW0+fTwvbGk+DQorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZSNnZXRJbmNpZGVuY2UyMyA8ZW0+SW5jaWRlbmNlMjM8L2VtPn08L2xpPg0KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLkRlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWUjZ2V0SW5jaWRlbmNlMzIgPGVtPkluY2lkZW5jZTMyPC9lbT59PC9saT4NCisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlI2dldEluY2lkZW5jZTQyIDxlbT5JbmNpZGVuY2U0MjwvZW0+fTwvbGk+DQorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZSNnZXRJbmNpZGVuY2UxNCA8ZW0+SW5jaWRlbmNlMTQ8L2VtPn08L2xpPg0KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLkRlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWUjZ2V0SW5jaWRlbmNlMjQgPGVtPkluY2lkZW5jZTI0PC9lbT59PC9saT4NCisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlI2dldEluY2lkZW5jZTM0IDxlbT5JbmNpZGVuY2UzNDwvZW0+fTwvbGk+DQorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZSNnZXRJbmNpZGVuY2U0MyA8ZW0+SW5jaWRlbmNlNDM8L2VtPn08L2xpPg0KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLkRlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWUjZ2V0RGlzZWFzZURlYXRoczEgPGVtPkRpc2Vhc2UgRGVhdGhzMTwvZW0+fTwvbGk+DQorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZSNnZXREaXNlYXNlRGVhdGhzMiA8ZW0+RGlzZWFzZSBEZWF0aHMyPC9lbT59PC9saT4NCisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlI2dldERpc2Vhc2VEZWF0aHMzIDxlbT5EaXNlYXNlIERlYXRoczM8L2VtPn08L2xpPg0KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLkRlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWUjZ2V0RGlzZWFzZURlYXRoczQgPGVtPkRpc2Vhc2UgRGVhdGhzNDwvZW0+fTwvbGk+DQorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZSNnZXREaXNlYXNlRGVhdGhzMTIgPGVtPkRpc2Vhc2UgRGVhdGhzMTI8L2VtPn08L2xpPg0KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLkRlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWUjZ2V0RGlzZWFzZURlYXRoczIxIDxlbT5EaXNlYXNlIERlYXRoczIxPC9lbT59PC9saT4NCisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlI2dldERpc2Vhc2VEZWF0aHMzMSA8ZW0+RGlzZWFzZSBEZWF0aHMzMTwvZW0+fTwvbGk+DQorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZSNnZXREaXNlYXNlRGVhdGhzNDEgPGVtPkRpc2Vhc2UgRGVhdGhzNDE8L2VtPn08L2xpPg0KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLkRlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWUjZ2V0RGlzZWFzZURlYXRoczEzIDxlbT5EaXNlYXNlIERlYXRoczEzPC9lbT59PC9saT4NCisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlI2dldERpc2Vhc2VEZWF0aHMyMyA8ZW0+RGlzZWFzZSBEZWF0aHMyMzwvZW0+fTwvbGk+DQorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZSNnZXREaXNlYXNlRGVhdGhzMzIgPGVtPkRpc2Vhc2UgRGVhdGhzMzI8L2VtPn08L2xpPg0KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLkRlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWUjZ2V0RGlzZWFzZURlYXRoczQyIDxlbT5EaXNlYXNlIERlYXRoczQyPC9lbT59PC9saT4NCisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlI2dldERpc2Vhc2VEZWF0aHMxNCA8ZW0+RGlzZWFzZSBEZWF0aHMxNDwvZW0+fTwvbGk+DQorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZSNnZXREaXNlYXNlRGVhdGhzMjQgPGVtPkRpc2Vhc2UgRGVhdGhzMjQ8L2VtPn08L2xpPg0KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLkRlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWUjZ2V0RGlzZWFzZURlYXRoczM0IDxlbT5EaXNlYXNlIERlYXRoczM0PC9lbT59PC9saT4NCisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlI2dldERpc2Vhc2VEZWF0aHM0MyA8ZW0+RGlzZWFzZSBEZWF0aHM0MzwvZW0+fTwvbGk+DQorICogPC91bD4NCisgKiA8L3A+DQorICoNCisgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuVmVjdG9yUGFja2FnZSNnZXREZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlKCkNCisgKiBAbW9kZWwNCisgKiBAZ2VuZXJhdGVkDQorICovDQorcHVibGljIGludGVyZmFjZSBEZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlIGV4dGVuZHMgU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbFZhbHVlIHsNCisJLyoqDQorCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPkUxPC9iPjwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDxwPg0KKwkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5FMTwvZW0+JyBhdHRyaWJ1dGUgaXNuJ3QgY2xlYXIsDQorCSAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4NCisJICogPC9wPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+RTE8L2VtPicgYXR0cmlidXRlLg0KKwkgKiBAc2VlICNzZXRFMShkb3VibGUpDQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5WZWN0b3JQYWNrYWdlI2dldERlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfRTEoKQ0KKwkgKiBAbW9kZWwNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJZG91YmxlIGdldEUxKCk7DQorDQorCS8qKg0KKwkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLkRlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWUjZ2V0RTEgPGVtPkUxPC9lbT59JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5FMTwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIEBzZWUgI2dldEUxKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJdm9pZCBzZXRFMShkb3VibGUgdmFsdWUpOw0KKw0KKwkvKioNCisJICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+RTI8L2I+PC9lbT4nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPHA+DQorCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPkUyPC9lbT4nIGF0dHJpYnV0ZSBpc24ndCBjbGVhciwNCisJICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLg0KKwkgKiA8L3A+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5FMjwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIEBzZWUgI3NldEUyKGRvdWJsZSkNCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLlZlY3RvclBhY2thZ2UjZ2V0RGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9FMigpDQorCSAqIEBtb2RlbA0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlkb3VibGUgZ2V0RTIoKTsNCisNCisJLyoqDQorCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZSNnZXRFMiA8ZW0+RTI8L2VtPn0nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPkUyPC9lbT4nIGF0dHJpYnV0ZS4NCisJICogQHNlZSAjZ2V0RTIoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwl2b2lkIHNldEUyKGRvdWJsZSB2YWx1ZSk7DQorDQorCS8qKg0KKwkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5FMzwvYj48L2VtPicgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8cD4NCisJICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+RTM8L2VtPicgYXR0cmlidXRlIGlzbid0IGNsZWFyLA0KKwkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uDQorCSAqIDwvcD4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPkUzPC9lbT4nIGF0dHJpYnV0ZS4NCisJICogQHNlZSAjc2V0RTMoZG91YmxlKQ0KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuVmVjdG9yUGFja2FnZSNnZXREZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX0UzKCkNCisJICogQG1vZGVsDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCWRvdWJsZSBnZXRFMygpOw0KKw0KKwkvKioNCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlI2dldEUzIDxlbT5FMzwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+RTM8L2VtPicgYXR0cmlidXRlLg0KKwkgKiBAc2VlICNnZXRFMygpDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXZvaWQgc2V0RTMoZG91YmxlIHZhbHVlKTsNCisNCisJLyoqDQorCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPkU0PC9iPjwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDxwPg0KKwkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5FNDwvZW0+JyBhdHRyaWJ1dGUgaXNuJ3QgY2xlYXIsDQorCSAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4NCisJICogPC9wPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+RTQ8L2VtPicgYXR0cmlidXRlLg0KKwkgKiBAc2VlICNzZXRFNChkb3VibGUpDQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5WZWN0b3JQYWNrYWdlI2dldERlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfRTQoKQ0KKwkgKiBAbW9kZWwNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJZG91YmxlIGdldEU0KCk7DQorDQorCS8qKg0KKwkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLkRlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWUjZ2V0RTQgPGVtPkU0PC9lbT59JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5FNDwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIEBzZWUgI2dldEU0KCkNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJdm9pZCBzZXRFNChkb3VibGUgdmFsdWUpOw0KKw0KKwkvKioNCisJICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+STE8L2I+PC9lbT4nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPHA+DQorCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPkkxPC9lbT4nIGF0dHJpYnV0ZSBpc24ndCBjbGVhciwNCisJICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLg0KKwkgKiA8L3A+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5JMTwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIEBzZWUgI3NldEkxKGRvdWJsZSkNCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLlZlY3RvclBhY2thZ2UjZ2V0RGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9JMSgpDQorCSAqIEBtb2RlbA0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlkb3VibGUgZ2V0STEoKTsNCisNCisJLyoqDQorCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZSNnZXRJMSA8ZW0+STE8L2VtPn0nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPkkxPC9lbT4nIGF0dHJpYnV0ZS4NCisJICogQHNlZSAjZ2V0STEoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwl2b2lkIHNldEkxKGRvdWJsZSB2YWx1ZSk7DQorDQorCS8qKg0KKwkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5JMjwvYj48L2VtPicgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8cD4NCisJICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+STI8L2VtPicgYXR0cmlidXRlIGlzbid0IGNsZWFyLA0KKwkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uDQorCSAqIDwvcD4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPkkyPC9lbT4nIGF0dHJpYnV0ZS4NCisJICogQHNlZSAjc2V0STIoZG91YmxlKQ0KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuVmVjdG9yUGFja2FnZSNnZXREZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX0kyKCkNCisJICogQG1vZGVsDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCWRvdWJsZSBnZXRJMigpOw0KKw0KKwkvKioNCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlI2dldEkyIDxlbT5JMjwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+STI8L2VtPicgYXR0cmlidXRlLg0KKwkgKiBAc2VlICNnZXRJMigpDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXZvaWQgc2V0STIoZG91YmxlIHZhbHVlKTsNCisNCisJLyoqDQorCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPkkzPC9iPjwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDxwPg0KKwkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5JMzwvZW0+JyBhdHRyaWJ1dGUgaXNuJ3QgY2xlYXIsDQorCSAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4NCisJICogPC9wPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+STM8L2VtPicgYXR0cmlidXRlLg0KKwkgKiBAc2VlICNzZXRJMyhkb3VibGUpDQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5WZWN0b3JQYWNrYWdlI2dldERlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfSTMoKQ0KKwkgKiBAbW9kZWwNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJZG91YmxlIGdldEkzKCk7DQorDQorCS8qKg0KKwkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLkRlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWUjZ2V0STMgPGVtPkkzPC9lbT59JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5JMzwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIEBzZWUgI2dldEkzKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJdm9pZCBzZXRJMyhkb3VibGUgdmFsdWUpOw0KKw0KKwkvKioNCisJICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+STQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPHA+DQorCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPkk0PC9lbT4nIGF0dHJpYnV0ZSBpc24ndCBjbGVhciwNCisJICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLg0KKwkgKiA8L3A+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5JNDwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIEBzZWUgI3NldEk0KGRvdWJsZSkNCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLlZlY3RvclBhY2thZ2UjZ2V0RGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9JNCgpDQorCSAqIEBtb2RlbA0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlkb3VibGUgZ2V0STQoKTsNCisNCisJLyoqDQorCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZSNnZXRJNCA8ZW0+STQ8L2VtPn0nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPkk0PC9lbT4nIGF0dHJpYnV0ZS4NCisJICogQHNlZSAjZ2V0STQoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwl2b2lkIHNldEk0KGRvdWJsZSB2YWx1ZSk7DQorDQorCS8qKg0KKwkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5UMTwvYj48L2VtPicgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8cD4NCisJICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+VDE8L2VtPicgYXR0cmlidXRlIGlzbid0IGNsZWFyLA0KKwkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uDQorCSAqIDwvcD4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPlQxPC9lbT4nIGF0dHJpYnV0ZS4NCisJICogQHNlZSAjc2V0VDEoZG91YmxlKQ0KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuVmVjdG9yUGFja2FnZSNnZXREZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX1QxKCkNCisJICogQG1vZGVsDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCWRvdWJsZSBnZXRUMSgpOw0KKw0KKwkvKioNCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlI2dldFQxIDxlbT5UMTwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+VDE8L2VtPicgYXR0cmlidXRlLg0KKwkgKiBAc2VlICNnZXRUMSgpDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXZvaWQgc2V0VDEoZG91YmxlIHZhbHVlKTsNCisNCisJLyoqDQorCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPlQyPC9iPjwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDxwPg0KKwkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5UMjwvZW0+JyBhdHRyaWJ1dGUgaXNuJ3QgY2xlYXIsDQorCSAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4NCisJICogPC9wPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+VDI8L2VtPicgYXR0cmlidXRlLg0KKwkgKiBAc2VlICNzZXRUMihkb3VibGUpDQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5WZWN0b3JQYWNrYWdlI2dldERlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfVDIoKQ0KKwkgKiBAbW9kZWwNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJZG91YmxlIGdldFQyKCk7DQorDQorCS8qKg0KKwkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLkRlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWUjZ2V0VDIgPGVtPlQyPC9lbT59JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5UMjwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIEBzZWUgI2dldFQyKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJdm9pZCBzZXRUMihkb3VibGUgdmFsdWUpOw0KKw0KKwkvKioNCisJICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+VDM8L2I+PC9lbT4nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPHA+DQorCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPlQzPC9lbT4nIGF0dHJpYnV0ZSBpc24ndCBjbGVhciwNCisJICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLg0KKwkgKiA8L3A+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5UMzwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIEBzZWUgI3NldFQzKGRvdWJsZSkNCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLlZlY3RvclBhY2thZ2UjZ2V0RGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9UMygpDQorCSAqIEBtb2RlbA0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlkb3VibGUgZ2V0VDMoKTsNCisNCisJLyoqDQorCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZSNnZXRUMyA8ZW0+VDM8L2VtPn0nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPlQzPC9lbT4nIGF0dHJpYnV0ZS4NCisJICogQHNlZSAjZ2V0VDMoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwl2b2lkIHNldFQzKGRvdWJsZSB2YWx1ZSk7DQorDQorCS8qKg0KKwkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5UNDwvYj48L2VtPicgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8cD4NCisJICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+VDQ8L2VtPicgYXR0cmlidXRlIGlzbid0IGNsZWFyLA0KKwkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uDQorCSAqIDwvcD4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPlQ0PC9lbT4nIGF0dHJpYnV0ZS4NCisJICogQHNlZSAjc2V0VDQoZG91YmxlKQ0KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuVmVjdG9yUGFja2FnZSNnZXREZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX1Q0KCkNCisJICogQG1vZGVsDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCWRvdWJsZSBnZXRUNCgpOw0KKw0KKwkvKioNCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlI2dldFQ0IDxlbT5UNDwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+VDQ8L2VtPicgYXR0cmlidXRlLg0KKwkgKiBAc2VlICNnZXRUNCgpDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXZvaWQgc2V0VDQoZG91YmxlIHZhbHVlKTsNCisNCisJLyoqDQorCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPlIxPC9iPjwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDxwPg0KKwkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5SMTwvZW0+JyBhdHRyaWJ1dGUgaXNuJ3QgY2xlYXIsDQorCSAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4NCisJICogPC9wPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+UjE8L2VtPicgYXR0cmlidXRlLg0KKwkgKiBAc2VlICNzZXRSMShkb3VibGUpDQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5WZWN0b3JQYWNrYWdlI2dldERlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfUjEoKQ0KKwkgKiBAbW9kZWwNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJZG91YmxlIGdldFIxKCk7DQorDQorCS8qKg0KKwkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLkRlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWUjZ2V0UjEgPGVtPlIxPC9lbT59JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5SMTwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIEBzZWUgI2dldFIxKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJdm9pZCBzZXRSMShkb3VibGUgdmFsdWUpOw0KKw0KKwkvKioNCisJICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+UjI8L2I+PC9lbT4nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPHA+DQorCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPlIyPC9lbT4nIGF0dHJpYnV0ZSBpc24ndCBjbGVhciwNCisJICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLg0KKwkgKiA8L3A+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5SMjwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIEBzZWUgI3NldFIyKGRvdWJsZSkNCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLlZlY3RvclBhY2thZ2UjZ2V0RGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9SMigpDQorCSAqIEBtb2RlbA0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlkb3VibGUgZ2V0UjIoKTsNCisNCisJLyoqDQorCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZSNnZXRSMiA8ZW0+UjI8L2VtPn0nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPlIyPC9lbT4nIGF0dHJpYnV0ZS4NCisJICogQHNlZSAjZ2V0UjIoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwl2b2lkIHNldFIyKGRvdWJsZSB2YWx1ZSk7DQorDQorCS8qKg0KKwkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5SMzwvYj48L2VtPicgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8cD4NCisJICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+UjM8L2VtPicgYXR0cmlidXRlIGlzbid0IGNsZWFyLA0KKwkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uDQorCSAqIDwvcD4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPlIzPC9lbT4nIGF0dHJpYnV0ZS4NCisJICogQHNlZSAjc2V0UjMoZG91YmxlKQ0KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuVmVjdG9yUGFja2FnZSNnZXREZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX1IzKCkNCisJICogQG1vZGVsDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCWRvdWJsZSBnZXRSMygpOw0KKw0KKwkvKioNCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlI2dldFIzIDxlbT5SMzwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+UjM8L2VtPicgYXR0cmlidXRlLg0KKwkgKiBAc2VlICNnZXRSMygpDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXZvaWQgc2V0UjMoZG91YmxlIHZhbHVlKTsNCisNCisJLyoqDQorCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPlI0PC9iPjwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDxwPg0KKwkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5SNDwvZW0+JyBhdHRyaWJ1dGUgaXNuJ3QgY2xlYXIsDQorCSAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4NCisJICogPC9wPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+UjQ8L2VtPicgYXR0cmlidXRlLg0KKwkgKiBAc2VlICNzZXRSNChkb3VibGUpDQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5WZWN0b3JQYWNrYWdlI2dldERlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfUjQoKQ0KKwkgKiBAbW9kZWwNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJZG91YmxlIGdldFI0KCk7DQorDQorCS8qKg0KKwkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLkRlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWUjZ2V0UjQgPGVtPlI0PC9lbT59JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5SNDwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIEBzZWUgI2dldFI0KCkNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJdm9pZCBzZXRSNChkb3VibGUgdmFsdWUpOw0KKw0KKwkvKioNCisJICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+RTEyPC9iPjwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDxwPg0KKwkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5FMTI8L2VtPicgYXR0cmlidXRlIGlzbid0IGNsZWFyLA0KKwkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uDQorCSAqIDwvcD4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPkUxMjwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIEBzZWUgI3NldEUxMihkb3VibGUpDQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5WZWN0b3JQYWNrYWdlI2dldERlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfRTEyKCkNCisJICogQG1vZGVsDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCWRvdWJsZSBnZXRFMTIoKTsNCisNCisJLyoqDQorCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZSNnZXRFMTIgPGVtPkUxMjwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+RTEyPC9lbT4nIGF0dHJpYnV0ZS4NCisJICogQHNlZSAjZ2V0RTEyKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJdm9pZCBzZXRFMTIoZG91YmxlIHZhbHVlKTsNCisNCisJLyoqDQorCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPkUxMzwvYj48L2VtPicgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8cD4NCisJICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+RTEzPC9lbT4nIGF0dHJpYnV0ZSBpc24ndCBjbGVhciwNCisJICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLg0KKwkgKiA8L3A+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5FMTM8L2VtPicgYXR0cmlidXRlLg0KKwkgKiBAc2VlICNzZXRFMTMoZG91YmxlKQ0KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuVmVjdG9yUGFja2FnZSNnZXREZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX0UxMygpDQorCSAqIEBtb2RlbA0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlkb3VibGUgZ2V0RTEzKCk7DQorDQorCS8qKg0KKwkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLkRlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWUjZ2V0RTEzIDxlbT5FMTM8L2VtPn0nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPkUxMzwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIEBzZWUgI2dldEUxMygpDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXZvaWQgc2V0RTEzKGRvdWJsZSB2YWx1ZSk7DQorDQorCS8qKg0KKwkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5FMTQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPHA+DQorCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPkUxNDwvZW0+JyBhdHRyaWJ1dGUgaXNuJ3QgY2xlYXIsDQorCSAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4NCisJICogPC9wPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+RTE0PC9lbT4nIGF0dHJpYnV0ZS4NCisJICogQHNlZSAjc2V0RTE0KGRvdWJsZSkNCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLlZlY3RvclBhY2thZ2UjZ2V0RGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9FMTQoKQ0KKwkgKiBAbW9kZWwNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJZG91YmxlIGdldEUxNCgpOw0KKw0KKwkvKioNCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlI2dldEUxNCA8ZW0+RTE0PC9lbT59JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5FMTQ8L2VtPicgYXR0cmlidXRlLg0KKwkgKiBAc2VlICNnZXRFMTQoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwl2b2lkIHNldEUxNChkb3VibGUgdmFsdWUpOw0KKw0KKwkvKioNCisJICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+RTIxPC9iPjwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDxwPg0KKwkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5FMjE8L2VtPicgYXR0cmlidXRlIGlzbid0IGNsZWFyLA0KKwkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uDQorCSAqIDwvcD4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPkUyMTwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIEBzZWUgI3NldEUyMShkb3VibGUpDQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5WZWN0b3JQYWNrYWdlI2dldERlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfRTIxKCkNCisJICogQG1vZGVsDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCWRvdWJsZSBnZXRFMjEoKTsNCisNCisJLyoqDQorCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZSNnZXRFMjEgPGVtPkUyMTwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+RTIxPC9lbT4nIGF0dHJpYnV0ZS4NCisJICogQHNlZSAjZ2V0RTIxKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJdm9pZCBzZXRFMjEoZG91YmxlIHZhbHVlKTsNCisNCisJLyoqDQorCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPkUyMzwvYj48L2VtPicgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8cD4NCisJICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+RTIzPC9lbT4nIGF0dHJpYnV0ZSBpc24ndCBjbGVhciwNCisJICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLg0KKwkgKiA8L3A+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5FMjM8L2VtPicgYXR0cmlidXRlLg0KKwkgKiBAc2VlICNzZXRFMjMoZG91YmxlKQ0KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuVmVjdG9yUGFja2FnZSNnZXREZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX0UyMygpDQorCSAqIEBtb2RlbA0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlkb3VibGUgZ2V0RTIzKCk7DQorDQorCS8qKg0KKwkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLkRlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWUjZ2V0RTIzIDxlbT5FMjM8L2VtPn0nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPkUyMzwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIEBzZWUgI2dldEUyMygpDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXZvaWQgc2V0RTIzKGRvdWJsZSB2YWx1ZSk7DQorDQorCS8qKg0KKwkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5FMjQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPHA+DQorCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPkUyNDwvZW0+JyBhdHRyaWJ1dGUgaXNuJ3QgY2xlYXIsDQorCSAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4NCisJICogPC9wPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+RTI0PC9lbT4nIGF0dHJpYnV0ZS4NCisJICogQHNlZSAjc2V0RTI0KGRvdWJsZSkNCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLlZlY3RvclBhY2thZ2UjZ2V0RGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9FMjQoKQ0KKwkgKiBAbW9kZWwNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJZG91YmxlIGdldEUyNCgpOw0KKw0KKwkvKioNCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlI2dldEUyNCA8ZW0+RTI0PC9lbT59JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5FMjQ8L2VtPicgYXR0cmlidXRlLg0KKwkgKiBAc2VlICNnZXRFMjQoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwl2b2lkIHNldEUyNChkb3VibGUgdmFsdWUpOw0KKw0KKwkvKioNCisJICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+RTMxPC9iPjwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDxwPg0KKwkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5FMzE8L2VtPicgYXR0cmlidXRlIGlzbid0IGNsZWFyLA0KKwkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uDQorCSAqIDwvcD4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPkUzMTwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIEBzZWUgI3NldEUzMShkb3VibGUpDQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5WZWN0b3JQYWNrYWdlI2dldERlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfRTMxKCkNCisJICogQG1vZGVsDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCWRvdWJsZSBnZXRFMzEoKTsNCisNCisJLyoqDQorCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZSNnZXRFMzEgPGVtPkUzMTwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+RTMxPC9lbT4nIGF0dHJpYnV0ZS4NCisJICogQHNlZSAjZ2V0RTMxKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJdm9pZCBzZXRFMzEoZG91YmxlIHZhbHVlKTsNCisNCisJLyoqDQorCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPkUzMjwvYj48L2VtPicgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8cD4NCisJICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+RTMyPC9lbT4nIGF0dHJpYnV0ZSBpc24ndCBjbGVhciwNCisJICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLg0KKwkgKiA8L3A+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5FMzI8L2VtPicgYXR0cmlidXRlLg0KKwkgKiBAc2VlICNzZXRFMzIoZG91YmxlKQ0KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuVmVjdG9yUGFja2FnZSNnZXREZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX0UzMigpDQorCSAqIEBtb2RlbA0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlkb3VibGUgZ2V0RTMyKCk7DQorDQorCS8qKg0KKwkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLkRlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWUjZ2V0RTMyIDxlbT5FMzI8L2VtPn0nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPkUzMjwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIEBzZWUgI2dldEUzMigpDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXZvaWQgc2V0RTMyKGRvdWJsZSB2YWx1ZSk7DQorDQorCS8qKg0KKwkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5FMzQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPHA+DQorCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPkUzNDwvZW0+JyBhdHRyaWJ1dGUgaXNuJ3QgY2xlYXIsDQorCSAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4NCisJICogPC9wPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+RTM0PC9lbT4nIGF0dHJpYnV0ZS4NCisJICogQHNlZSAjc2V0RTM0KGRvdWJsZSkNCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLlZlY3RvclBhY2thZ2UjZ2V0RGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9FMzQoKQ0KKwkgKiBAbW9kZWwNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJZG91YmxlIGdldEUzNCgpOw0KKw0KKwkvKioNCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlI2dldEUzNCA8ZW0+RTM0PC9lbT59JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5FMzQ8L2VtPicgYXR0cmlidXRlLg0KKwkgKiBAc2VlICNnZXRFMzQoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwl2b2lkIHNldEUzNChkb3VibGUgdmFsdWUpOw0KKw0KKwkvKioNCisJICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+RTQxPC9iPjwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDxwPg0KKwkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5FNDE8L2VtPicgYXR0cmlidXRlIGlzbid0IGNsZWFyLA0KKwkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uDQorCSAqIDwvcD4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPkU0MTwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIEBzZWUgI3NldEU0MShkb3VibGUpDQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5WZWN0b3JQYWNrYWdlI2dldERlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfRTQxKCkNCisJICogQG1vZGVsDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCWRvdWJsZSBnZXRFNDEoKTsNCisNCisJLyoqDQorCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZSNnZXRFNDEgPGVtPkU0MTwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+RTQxPC9lbT4nIGF0dHJpYnV0ZS4NCisJICogQHNlZSAjZ2V0RTQxKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJdm9pZCBzZXRFNDEoZG91YmxlIHZhbHVlKTsNCisNCisJLyoqDQorCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPkU0MjwvYj48L2VtPicgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8cD4NCisJICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+RTQyPC9lbT4nIGF0dHJpYnV0ZSBpc24ndCBjbGVhciwNCisJICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLg0KKwkgKiA8L3A+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5FNDI8L2VtPicgYXR0cmlidXRlLg0KKwkgKiBAc2VlICNzZXRFNDIoZG91YmxlKQ0KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuVmVjdG9yUGFja2FnZSNnZXREZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX0U0MigpDQorCSAqIEBtb2RlbA0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlkb3VibGUgZ2V0RTQyKCk7DQorDQorCS8qKg0KKwkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLkRlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWUjZ2V0RTQyIDxlbT5FNDI8L2VtPn0nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPkU0MjwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIEBzZWUgI2dldEU0MigpDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXZvaWQgc2V0RTQyKGRvdWJsZSB2YWx1ZSk7DQorDQorCS8qKg0KKwkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5FNDM8L2I+PC9lbT4nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPHA+DQorCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPkU0MzwvZW0+JyBhdHRyaWJ1dGUgaXNuJ3QgY2xlYXIsDQorCSAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4NCisJICogPC9wPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+RTQzPC9lbT4nIGF0dHJpYnV0ZS4NCisJICogQHNlZSAjc2V0RTQzKGRvdWJsZSkNCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLlZlY3RvclBhY2thZ2UjZ2V0RGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9FNDMoKQ0KKwkgKiBAbW9kZWwNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJZG91YmxlIGdldEU0MygpOw0KKw0KKwkvKioNCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlI2dldEU0MyA8ZW0+RTQzPC9lbT59JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5FNDM8L2VtPicgYXR0cmlidXRlLg0KKwkgKiBAc2VlICNnZXRFNDMoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwl2b2lkIHNldEU0Myhkb3VibGUgdmFsdWUpOw0KKw0KKwkvKioNCisJICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+STEyPC9iPjwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDxwPg0KKwkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5JMTI8L2VtPicgYXR0cmlidXRlIGlzbid0IGNsZWFyLA0KKwkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uDQorCSAqIDwvcD4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPkkxMjwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIEBzZWUgI3NldEkxMihkb3VibGUpDQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5WZWN0b3JQYWNrYWdlI2dldERlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfSTEyKCkNCisJICogQG1vZGVsDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCWRvdWJsZSBnZXRJMTIoKTsNCisNCisJLyoqDQorCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZSNnZXRJMTIgPGVtPkkxMjwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+STEyPC9lbT4nIGF0dHJpYnV0ZS4NCisJICogQHNlZSAjZ2V0STEyKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJdm9pZCBzZXRJMTIoZG91YmxlIHZhbHVlKTsNCisNCisJLyoqDQorCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPkkxMzwvYj48L2VtPicgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8cD4NCisJICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+STEzPC9lbT4nIGF0dHJpYnV0ZSBpc24ndCBjbGVhciwNCisJICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLg0KKwkgKiA8L3A+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5JMTM8L2VtPicgYXR0cmlidXRlLg0KKwkgKiBAc2VlICNzZXRJMTMoZG91YmxlKQ0KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuVmVjdG9yUGFja2FnZSNnZXREZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX0kxMygpDQorCSAqIEBtb2RlbA0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlkb3VibGUgZ2V0STEzKCk7DQorDQorCS8qKg0KKwkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLkRlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWUjZ2V0STEzIDxlbT5JMTM8L2VtPn0nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPkkxMzwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIEBzZWUgI2dldEkxMygpDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXZvaWQgc2V0STEzKGRvdWJsZSB2YWx1ZSk7DQorDQorCS8qKg0KKwkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5JMTQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPHA+DQorCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPkkxNDwvZW0+JyBhdHRyaWJ1dGUgaXNuJ3QgY2xlYXIsDQorCSAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4NCisJICogPC9wPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+STE0PC9lbT4nIGF0dHJpYnV0ZS4NCisJICogQHNlZSAjc2V0STE0KGRvdWJsZSkNCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLlZlY3RvclBhY2thZ2UjZ2V0RGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9JMTQoKQ0KKwkgKiBAbW9kZWwNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJZG91YmxlIGdldEkxNCgpOw0KKw0KKwkvKioNCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlI2dldEkxNCA8ZW0+STE0PC9lbT59JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5JMTQ8L2VtPicgYXR0cmlidXRlLg0KKwkgKiBAc2VlICNnZXRJMTQoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwl2b2lkIHNldEkxNChkb3VibGUgdmFsdWUpOw0KKw0KKwkvKioNCisJICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+STIxPC9iPjwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDxwPg0KKwkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5JMjE8L2VtPicgYXR0cmlidXRlIGlzbid0IGNsZWFyLA0KKwkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uDQorCSAqIDwvcD4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPkkyMTwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIEBzZWUgI3NldEkyMShkb3VibGUpDQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5WZWN0b3JQYWNrYWdlI2dldERlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfSTIxKCkNCisJICogQG1vZGVsDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCWRvdWJsZSBnZXRJMjEoKTsNCisNCisJLyoqDQorCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZSNnZXRJMjEgPGVtPkkyMTwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+STIxPC9lbT4nIGF0dHJpYnV0ZS4NCisJICogQHNlZSAjZ2V0STIxKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJdm9pZCBzZXRJMjEoZG91YmxlIHZhbHVlKTsNCisNCisJLyoqDQorCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPkkyMzwvYj48L2VtPicgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8cD4NCisJICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+STIzPC9lbT4nIGF0dHJpYnV0ZSBpc24ndCBjbGVhciwNCisJICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLg0KKwkgKiA8L3A+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5JMjM8L2VtPicgYXR0cmlidXRlLg0KKwkgKiBAc2VlICNzZXRJMjMoZG91YmxlKQ0KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuVmVjdG9yUGFja2FnZSNnZXREZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX0kyMygpDQorCSAqIEBtb2RlbA0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlkb3VibGUgZ2V0STIzKCk7DQorDQorCS8qKg0KKwkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLkRlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWUjZ2V0STIzIDxlbT5JMjM8L2VtPn0nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPkkyMzwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIEBzZWUgI2dldEkyMygpDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXZvaWQgc2V0STIzKGRvdWJsZSB2YWx1ZSk7DQorDQorCS8qKg0KKwkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5JMjQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPHA+DQorCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPkkyNDwvZW0+JyBhdHRyaWJ1dGUgaXNuJ3QgY2xlYXIsDQorCSAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4NCisJICogPC9wPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+STI0PC9lbT4nIGF0dHJpYnV0ZS4NCisJICogQHNlZSAjc2V0STI0KGRvdWJsZSkNCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLlZlY3RvclBhY2thZ2UjZ2V0RGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9JMjQoKQ0KKwkgKiBAbW9kZWwNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJZG91YmxlIGdldEkyNCgpOw0KKw0KKwkvKioNCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlI2dldEkyNCA8ZW0+STI0PC9lbT59JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5JMjQ8L2VtPicgYXR0cmlidXRlLg0KKwkgKiBAc2VlICNnZXRJMjQoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwl2b2lkIHNldEkyNChkb3VibGUgdmFsdWUpOw0KKw0KKwkvKioNCisJICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+STMxPC9iPjwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDxwPg0KKwkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5JMzE8L2VtPicgYXR0cmlidXRlIGlzbid0IGNsZWFyLA0KKwkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uDQorCSAqIDwvcD4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPkkzMTwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIEBzZWUgI3NldEkzMShkb3VibGUpDQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5WZWN0b3JQYWNrYWdlI2dldERlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfSTMxKCkNCisJICogQG1vZGVsDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCWRvdWJsZSBnZXRJMzEoKTsNCisNCisJLyoqDQorCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZSNnZXRJMzEgPGVtPkkzMTwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+STMxPC9lbT4nIGF0dHJpYnV0ZS4NCisJICogQHNlZSAjZ2V0STMxKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJdm9pZCBzZXRJMzEoZG91YmxlIHZhbHVlKTsNCisNCisJLyoqDQorCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPkkzMjwvYj48L2VtPicgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8cD4NCisJICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+STMyPC9lbT4nIGF0dHJpYnV0ZSBpc24ndCBjbGVhciwNCisJICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLg0KKwkgKiA8L3A+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5JMzI8L2VtPicgYXR0cmlidXRlLg0KKwkgKiBAc2VlICNzZXRJMzIoZG91YmxlKQ0KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuVmVjdG9yUGFja2FnZSNnZXREZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX0kzMigpDQorCSAqIEBtb2RlbA0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlkb3VibGUgZ2V0STMyKCk7DQorDQorCS8qKg0KKwkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLkRlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWUjZ2V0STMyIDxlbT5JMzI8L2VtPn0nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPkkzMjwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIEBzZWUgI2dldEkzMigpDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXZvaWQgc2V0STMyKGRvdWJsZSB2YWx1ZSk7DQorDQorCS8qKg0KKwkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5JMzQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPHA+DQorCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPkkzNDwvZW0+JyBhdHRyaWJ1dGUgaXNuJ3QgY2xlYXIsDQorCSAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4NCisJICogPC9wPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+STM0PC9lbT4nIGF0dHJpYnV0ZS4NCisJICogQHNlZSAjc2V0STM0KGRvdWJsZSkNCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLlZlY3RvclBhY2thZ2UjZ2V0RGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9JMzQoKQ0KKwkgKiBAbW9kZWwNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJZG91YmxlIGdldEkzNCgpOw0KKw0KKwkvKioNCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlI2dldEkzNCA8ZW0+STM0PC9lbT59JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5JMzQ8L2VtPicgYXR0cmlidXRlLg0KKwkgKiBAc2VlICNnZXRJMzQoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwl2b2lkIHNldEkzNChkb3VibGUgdmFsdWUpOw0KKw0KKwkvKioNCisJICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+STQxPC9iPjwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDxwPg0KKwkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5JNDE8L2VtPicgYXR0cmlidXRlIGlzbid0IGNsZWFyLA0KKwkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uDQorCSAqIDwvcD4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPkk0MTwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIEBzZWUgI3NldEk0MShkb3VibGUpDQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5WZWN0b3JQYWNrYWdlI2dldERlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfSTQxKCkNCisJICogQG1vZGVsDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCWRvdWJsZSBnZXRJNDEoKTsNCisNCisJLyoqDQorCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZSNnZXRJNDEgPGVtPkk0MTwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+STQxPC9lbT4nIGF0dHJpYnV0ZS4NCisJICogQHNlZSAjZ2V0STQxKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJdm9pZCBzZXRJNDEoZG91YmxlIHZhbHVlKTsNCisNCisJLyoqDQorCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPkk0MjwvYj48L2VtPicgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8cD4NCisJICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+STQyPC9lbT4nIGF0dHJpYnV0ZSBpc24ndCBjbGVhciwNCisJICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLg0KKwkgKiA8L3A+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5JNDI8L2VtPicgYXR0cmlidXRlLg0KKwkgKiBAc2VlICNzZXRJNDIoZG91YmxlKQ0KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuVmVjdG9yUGFja2FnZSNnZXREZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX0k0MigpDQorCSAqIEBtb2RlbA0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlkb3VibGUgZ2V0STQyKCk7DQorDQorCS8qKg0KKwkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLkRlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWUjZ2V0STQyIDxlbT5JNDI8L2VtPn0nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPkk0MjwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIEBzZWUgI2dldEk0MigpDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXZvaWQgc2V0STQyKGRvdWJsZSB2YWx1ZSk7DQorDQorCS8qKg0KKwkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5JNDM8L2I+PC9lbT4nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPHA+DQorCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPkk0MzwvZW0+JyBhdHRyaWJ1dGUgaXNuJ3QgY2xlYXIsDQorCSAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4NCisJICogPC9wPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+STQzPC9lbT4nIGF0dHJpYnV0ZS4NCisJICogQHNlZSAjc2V0STQzKGRvdWJsZSkNCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLlZlY3RvclBhY2thZ2UjZ2V0RGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9JNDMoKQ0KKwkgKiBAbW9kZWwNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJZG91YmxlIGdldEk0MygpOw0KKw0KKwkvKioNCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlI2dldEk0MyA8ZW0+STQzPC9lbT59JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5JNDM8L2VtPicgYXR0cmlidXRlLg0KKwkgKiBAc2VlICNnZXRJNDMoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwl2b2lkIHNldEk0Myhkb3VibGUgdmFsdWUpOw0KKw0KKwkvKioNCisJICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+UjwvYj48L2VtPicgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8cD4NCisJICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+UjwvZW0+JyBhdHRyaWJ1dGUgaXNuJ3QgY2xlYXIsDQorCSAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4NCisJICogPC9wPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+UjwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIEBzZWUgI3NldFIoZG91YmxlKQ0KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuVmVjdG9yUGFja2FnZSNnZXREZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX1IoKQ0KKwkgKiBAbW9kZWwNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJZG91YmxlIGdldFIoKTsNCisNCisJLyoqDQorCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZSNnZXRSIDxlbT5SPC9lbT59JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5SPC9lbT4nIGF0dHJpYnV0ZS4NCisJICogQHNlZSAjZ2V0UigpDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXZvaWQgc2V0Uihkb3VibGUgdmFsdWUpOw0KKw0KKwkvKioNCisJICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+SW5jaWRlbmNlMTwvYj48L2VtPicgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8cD4NCisJICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+SW5jaWRlbmNlMTwvZW0+JyBhdHRyaWJ1dGUgaXNuJ3QgY2xlYXIsDQorCSAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4NCisJICogPC9wPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+SW5jaWRlbmNlMTwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIEBzZWUgI3NldEluY2lkZW5jZTEoZG91YmxlKQ0KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuVmVjdG9yUGFja2FnZSNnZXREZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX0luY2lkZW5jZTEoKQ0KKwkgKiBAbW9kZWwNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJZG91YmxlIGdldEluY2lkZW5jZTEoKTsNCisNCisJLyoqDQorCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZSNnZXRJbmNpZGVuY2UxIDxlbT5JbmNpZGVuY2UxPC9lbT59JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5JbmNpZGVuY2UxPC9lbT4nIGF0dHJpYnV0ZS4NCisJICogQHNlZSAjZ2V0SW5jaWRlbmNlMSgpDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXZvaWQgc2V0SW5jaWRlbmNlMShkb3VibGUgdmFsdWUpOw0KKw0KKwkvKioNCisJICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+SW5jaWRlbmNlMjwvYj48L2VtPicgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8cD4NCisJICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+SW5jaWRlbmNlMjwvZW0+JyBhdHRyaWJ1dGUgaXNuJ3QgY2xlYXIsDQorCSAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4NCisJICogPC9wPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+SW5jaWRlbmNlMjwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIEBzZWUgI3NldEluY2lkZW5jZTIoZG91YmxlKQ0KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuVmVjdG9yUGFja2FnZSNnZXREZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX0luY2lkZW5jZTIoKQ0KKwkgKiBAbW9kZWwNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJZG91YmxlIGdldEluY2lkZW5jZTIoKTsNCisNCisJLyoqDQorCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZSNnZXRJbmNpZGVuY2UyIDxlbT5JbmNpZGVuY2UyPC9lbT59JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5JbmNpZGVuY2UyPC9lbT4nIGF0dHJpYnV0ZS4NCisJICogQHNlZSAjZ2V0SW5jaWRlbmNlMigpDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXZvaWQgc2V0SW5jaWRlbmNlMihkb3VibGUgdmFsdWUpOw0KKw0KKwkvKioNCisJICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+SW5jaWRlbmNlMzwvYj48L2VtPicgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8cD4NCisJICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+SW5jaWRlbmNlMzwvZW0+JyBhdHRyaWJ1dGUgaXNuJ3QgY2xlYXIsDQorCSAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4NCisJICogPC9wPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+SW5jaWRlbmNlMzwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIEBzZWUgI3NldEluY2lkZW5jZTMoZG91YmxlKQ0KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuVmVjdG9yUGFja2FnZSNnZXREZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX0luY2lkZW5jZTMoKQ0KKwkgKiBAbW9kZWwNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJZG91YmxlIGdldEluY2lkZW5jZTMoKTsNCisNCisJLyoqDQorCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZSNnZXRJbmNpZGVuY2UzIDxlbT5JbmNpZGVuY2UzPC9lbT59JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5JbmNpZGVuY2UzPC9lbT4nIGF0dHJpYnV0ZS4NCisJICogQHNlZSAjZ2V0SW5jaWRlbmNlMygpDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXZvaWQgc2V0SW5jaWRlbmNlMyhkb3VibGUgdmFsdWUpOw0KKw0KKwkvKioNCisJICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+SW5jaWRlbmNlNDwvYj48L2VtPicgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8cD4NCisJICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+SW5jaWRlbmNlNDwvZW0+JyBhdHRyaWJ1dGUgaXNuJ3QgY2xlYXIsDQorCSAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4NCisJICogPC9wPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+SW5jaWRlbmNlNDwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIEBzZWUgI3NldEluY2lkZW5jZTQoZG91YmxlKQ0KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuVmVjdG9yUGFja2FnZSNnZXREZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX0luY2lkZW5jZTQoKQ0KKwkgKiBAbW9kZWwNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJZG91YmxlIGdldEluY2lkZW5jZTQoKTsNCisNCisJLyoqDQorCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZSNnZXRJbmNpZGVuY2U0IDxlbT5JbmNpZGVuY2U0PC9lbT59JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5JbmNpZGVuY2U0PC9lbT4nIGF0dHJpYnV0ZS4NCisJICogQHNlZSAjZ2V0SW5jaWRlbmNlNCgpDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXZvaWQgc2V0SW5jaWRlbmNlNChkb3VibGUgdmFsdWUpOw0KKw0KKwkvKioNCisJICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+SW5jaWRlbmNlMTI8L2I+PC9lbT4nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPHA+DQorCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPkluY2lkZW5jZTEyPC9lbT4nIGF0dHJpYnV0ZSBpc24ndCBjbGVhciwNCisJICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLg0KKwkgKiA8L3A+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5JbmNpZGVuY2UxMjwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIEBzZWUgI3NldEluY2lkZW5jZTEyKGRvdWJsZSkNCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLlZlY3RvclBhY2thZ2UjZ2V0RGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9JbmNpZGVuY2UxMigpDQorCSAqIEBtb2RlbA0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlkb3VibGUgZ2V0SW5jaWRlbmNlMTIoKTsNCisNCisJLyoqDQorCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZSNnZXRJbmNpZGVuY2UxMiA8ZW0+SW5jaWRlbmNlMTI8L2VtPn0nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPkluY2lkZW5jZTEyPC9lbT4nIGF0dHJpYnV0ZS4NCisJICogQHNlZSAjZ2V0SW5jaWRlbmNlMTIoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwl2b2lkIHNldEluY2lkZW5jZTEyKGRvdWJsZSB2YWx1ZSk7DQorDQorCS8qKg0KKwkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5JbmNpZGVuY2UyMTwvYj48L2VtPicgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8cD4NCisJICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+SW5jaWRlbmNlMjE8L2VtPicgYXR0cmlidXRlIGlzbid0IGNsZWFyLA0KKwkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uDQorCSAqIDwvcD4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPkluY2lkZW5jZTIxPC9lbT4nIGF0dHJpYnV0ZS4NCisJICogQHNlZSAjc2V0SW5jaWRlbmNlMjEoZG91YmxlKQ0KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuVmVjdG9yUGFja2FnZSNnZXREZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX0luY2lkZW5jZTIxKCkNCisJICogQG1vZGVsDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCWRvdWJsZSBnZXRJbmNpZGVuY2UyMSgpOw0KKw0KKwkvKioNCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlI2dldEluY2lkZW5jZTIxIDxlbT5JbmNpZGVuY2UyMTwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+SW5jaWRlbmNlMjE8L2VtPicgYXR0cmlidXRlLg0KKwkgKiBAc2VlICNnZXRJbmNpZGVuY2UyMSgpDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXZvaWQgc2V0SW5jaWRlbmNlMjEoZG91YmxlIHZhbHVlKTsNCisNCisJLyoqDQorCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPkluY2lkZW5jZTMxPC9iPjwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDxwPg0KKwkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5JbmNpZGVuY2UzMTwvZW0+JyBhdHRyaWJ1dGUgaXNuJ3QgY2xlYXIsDQorCSAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4NCisJICogPC9wPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+SW5jaWRlbmNlMzE8L2VtPicgYXR0cmlidXRlLg0KKwkgKiBAc2VlICNzZXRJbmNpZGVuY2UzMShkb3VibGUpDQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5WZWN0b3JQYWNrYWdlI2dldERlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfSW5jaWRlbmNlMzEoKQ0KKwkgKiBAbW9kZWwNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJZG91YmxlIGdldEluY2lkZW5jZTMxKCk7DQorDQorCS8qKg0KKwkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLkRlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWUjZ2V0SW5jaWRlbmNlMzEgPGVtPkluY2lkZW5jZTMxPC9lbT59JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5JbmNpZGVuY2UzMTwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIEBzZWUgI2dldEluY2lkZW5jZTMxKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJdm9pZCBzZXRJbmNpZGVuY2UzMShkb3VibGUgdmFsdWUpOw0KKw0KKwkvKioNCisJICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+SW5jaWRlbmNlNDE8L2I+PC9lbT4nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPHA+DQorCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPkluY2lkZW5jZTQxPC9lbT4nIGF0dHJpYnV0ZSBpc24ndCBjbGVhciwNCisJICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLg0KKwkgKiA8L3A+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5JbmNpZGVuY2U0MTwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIEBzZWUgI3NldEluY2lkZW5jZTQxKGRvdWJsZSkNCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLlZlY3RvclBhY2thZ2UjZ2V0RGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9JbmNpZGVuY2U0MSgpDQorCSAqIEBtb2RlbA0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlkb3VibGUgZ2V0SW5jaWRlbmNlNDEoKTsNCisNCisJLyoqDQorCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZSNnZXRJbmNpZGVuY2U0MSA8ZW0+SW5jaWRlbmNlNDE8L2VtPn0nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPkluY2lkZW5jZTQxPC9lbT4nIGF0dHJpYnV0ZS4NCisJICogQHNlZSAjZ2V0SW5jaWRlbmNlNDEoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwl2b2lkIHNldEluY2lkZW5jZTQxKGRvdWJsZSB2YWx1ZSk7DQorDQorCS8qKg0KKwkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5JbmNpZGVuY2UxMzwvYj48L2VtPicgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8cD4NCisJICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+SW5jaWRlbmNlMTM8L2VtPicgYXR0cmlidXRlIGlzbid0IGNsZWFyLA0KKwkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uDQorCSAqIDwvcD4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPkluY2lkZW5jZTEzPC9lbT4nIGF0dHJpYnV0ZS4NCisJICogQHNlZSAjc2V0SW5jaWRlbmNlMTMoZG91YmxlKQ0KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuVmVjdG9yUGFja2FnZSNnZXREZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX0luY2lkZW5jZTEzKCkNCisJICogQG1vZGVsDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCWRvdWJsZSBnZXRJbmNpZGVuY2UxMygpOw0KKw0KKwkvKioNCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlI2dldEluY2lkZW5jZTEzIDxlbT5JbmNpZGVuY2UxMzwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+SW5jaWRlbmNlMTM8L2VtPicgYXR0cmlidXRlLg0KKwkgKiBAc2VlICNnZXRJbmNpZGVuY2UxMygpDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXZvaWQgc2V0SW5jaWRlbmNlMTMoZG91YmxlIHZhbHVlKTsNCisNCisJLyoqDQorCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPkluY2lkZW5jZTIzPC9iPjwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDxwPg0KKwkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5JbmNpZGVuY2UyMzwvZW0+JyBhdHRyaWJ1dGUgaXNuJ3QgY2xlYXIsDQorCSAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4NCisJICogPC9wPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+SW5jaWRlbmNlMjM8L2VtPicgYXR0cmlidXRlLg0KKwkgKiBAc2VlICNzZXRJbmNpZGVuY2UyMyhkb3VibGUpDQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5WZWN0b3JQYWNrYWdlI2dldERlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfSW5jaWRlbmNlMjMoKQ0KKwkgKiBAbW9kZWwNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJZG91YmxlIGdldEluY2lkZW5jZTIzKCk7DQorDQorCS8qKg0KKwkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLkRlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWUjZ2V0SW5jaWRlbmNlMjMgPGVtPkluY2lkZW5jZTIzPC9lbT59JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5JbmNpZGVuY2UyMzwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIEBzZWUgI2dldEluY2lkZW5jZTIzKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJdm9pZCBzZXRJbmNpZGVuY2UyMyhkb3VibGUgdmFsdWUpOw0KKw0KKwkvKioNCisJICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+SW5jaWRlbmNlMzI8L2I+PC9lbT4nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPHA+DQorCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPkluY2lkZW5jZTMyPC9lbT4nIGF0dHJpYnV0ZSBpc24ndCBjbGVhciwNCisJICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLg0KKwkgKiA8L3A+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5JbmNpZGVuY2UzMjwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIEBzZWUgI3NldEluY2lkZW5jZTMyKGRvdWJsZSkNCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLlZlY3RvclBhY2thZ2UjZ2V0RGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9JbmNpZGVuY2UzMigpDQorCSAqIEBtb2RlbA0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlkb3VibGUgZ2V0SW5jaWRlbmNlMzIoKTsNCisNCisJLyoqDQorCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZSNnZXRJbmNpZGVuY2UzMiA8ZW0+SW5jaWRlbmNlMzI8L2VtPn0nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPkluY2lkZW5jZTMyPC9lbT4nIGF0dHJpYnV0ZS4NCisJICogQHNlZSAjZ2V0SW5jaWRlbmNlMzIoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwl2b2lkIHNldEluY2lkZW5jZTMyKGRvdWJsZSB2YWx1ZSk7DQorDQorCS8qKg0KKwkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5JbmNpZGVuY2U0MjwvYj48L2VtPicgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8cD4NCisJICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+SW5jaWRlbmNlNDI8L2VtPicgYXR0cmlidXRlIGlzbid0IGNsZWFyLA0KKwkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uDQorCSAqIDwvcD4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPkluY2lkZW5jZTQyPC9lbT4nIGF0dHJpYnV0ZS4NCisJICogQHNlZSAjc2V0SW5jaWRlbmNlNDIoZG91YmxlKQ0KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuVmVjdG9yUGFja2FnZSNnZXREZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX0luY2lkZW5jZTQyKCkNCisJICogQG1vZGVsDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCWRvdWJsZSBnZXRJbmNpZGVuY2U0MigpOw0KKw0KKwkvKioNCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlI2dldEluY2lkZW5jZTQyIDxlbT5JbmNpZGVuY2U0MjwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+SW5jaWRlbmNlNDI8L2VtPicgYXR0cmlidXRlLg0KKwkgKiBAc2VlICNnZXRJbmNpZGVuY2U0MigpDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXZvaWQgc2V0SW5jaWRlbmNlNDIoZG91YmxlIHZhbHVlKTsNCisNCisJLyoqDQorCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPkluY2lkZW5jZTE0PC9iPjwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDxwPg0KKwkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5JbmNpZGVuY2UxNDwvZW0+JyBhdHRyaWJ1dGUgaXNuJ3QgY2xlYXIsDQorCSAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4NCisJICogPC9wPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+SW5jaWRlbmNlMTQ8L2VtPicgYXR0cmlidXRlLg0KKwkgKiBAc2VlICNzZXRJbmNpZGVuY2UxNChkb3VibGUpDQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5WZWN0b3JQYWNrYWdlI2dldERlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfSW5jaWRlbmNlMTQoKQ0KKwkgKiBAbW9kZWwNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJZG91YmxlIGdldEluY2lkZW5jZTE0KCk7DQorDQorCS8qKg0KKwkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLkRlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWUjZ2V0SW5jaWRlbmNlMTQgPGVtPkluY2lkZW5jZTE0PC9lbT59JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5JbmNpZGVuY2UxNDwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIEBzZWUgI2dldEluY2lkZW5jZTE0KCkNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJdm9pZCBzZXRJbmNpZGVuY2UxNChkb3VibGUgdmFsdWUpOw0KKw0KKwkvKioNCisJICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+SW5jaWRlbmNlMjQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPHA+DQorCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPkluY2lkZW5jZTI0PC9lbT4nIGF0dHJpYnV0ZSBpc24ndCBjbGVhciwNCisJICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLg0KKwkgKiA8L3A+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5JbmNpZGVuY2UyNDwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIEBzZWUgI3NldEluY2lkZW5jZTI0KGRvdWJsZSkNCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLlZlY3RvclBhY2thZ2UjZ2V0RGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9JbmNpZGVuY2UyNCgpDQorCSAqIEBtb2RlbA0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlkb3VibGUgZ2V0SW5jaWRlbmNlMjQoKTsNCisNCisJLyoqDQorCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZSNnZXRJbmNpZGVuY2UyNCA8ZW0+SW5jaWRlbmNlMjQ8L2VtPn0nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPkluY2lkZW5jZTI0PC9lbT4nIGF0dHJpYnV0ZS4NCisJICogQHNlZSAjZ2V0SW5jaWRlbmNlMjQoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwl2b2lkIHNldEluY2lkZW5jZTI0KGRvdWJsZSB2YWx1ZSk7DQorDQorCS8qKg0KKwkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5JbmNpZGVuY2UzNDwvYj48L2VtPicgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8cD4NCisJICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+SW5jaWRlbmNlMzQ8L2VtPicgYXR0cmlidXRlIGlzbid0IGNsZWFyLA0KKwkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uDQorCSAqIDwvcD4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPkluY2lkZW5jZTM0PC9lbT4nIGF0dHJpYnV0ZS4NCisJICogQHNlZSAjc2V0SW5jaWRlbmNlMzQoZG91YmxlKQ0KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuVmVjdG9yUGFja2FnZSNnZXREZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX0luY2lkZW5jZTM0KCkNCisJICogQG1vZGVsDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCWRvdWJsZSBnZXRJbmNpZGVuY2UzNCgpOw0KKw0KKwkvKioNCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlI2dldEluY2lkZW5jZTM0IDxlbT5JbmNpZGVuY2UzNDwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+SW5jaWRlbmNlMzQ8L2VtPicgYXR0cmlidXRlLg0KKwkgKiBAc2VlICNnZXRJbmNpZGVuY2UzNCgpDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXZvaWQgc2V0SW5jaWRlbmNlMzQoZG91YmxlIHZhbHVlKTsNCisNCisJLyoqDQorCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPkluY2lkZW5jZTQzPC9iPjwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDxwPg0KKwkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5JbmNpZGVuY2U0MzwvZW0+JyBhdHRyaWJ1dGUgaXNuJ3QgY2xlYXIsDQorCSAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4NCisJICogPC9wPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+SW5jaWRlbmNlNDM8L2VtPicgYXR0cmlidXRlLg0KKwkgKiBAc2VlICNzZXRJbmNpZGVuY2U0Myhkb3VibGUpDQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5WZWN0b3JQYWNrYWdlI2dldERlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfSW5jaWRlbmNlNDMoKQ0KKwkgKiBAbW9kZWwNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJZG91YmxlIGdldEluY2lkZW5jZTQzKCk7DQorDQorCS8qKg0KKwkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLkRlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWUjZ2V0SW5jaWRlbmNlNDMgPGVtPkluY2lkZW5jZTQzPC9lbT59JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5JbmNpZGVuY2U0MzwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIEBzZWUgI2dldEluY2lkZW5jZTQzKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJdm9pZCBzZXRJbmNpZGVuY2U0Myhkb3VibGUgdmFsdWUpOw0KKw0KKwkvKioNCisJICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+RGlzZWFzZSBEZWF0aHMxPC9iPjwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDxwPg0KKwkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5EaXNlYXNlIERlYXRoczE8L2VtPicgYXR0cmlidXRlIGlzbid0IGNsZWFyLA0KKwkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uDQorCSAqIDwvcD4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPkRpc2Vhc2UgRGVhdGhzMTwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIEBzZWUgI3NldERpc2Vhc2VEZWF0aHMxKGRvdWJsZSkNCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLlZlY3RvclBhY2thZ2UjZ2V0RGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9EaXNlYXNlRGVhdGhzMSgpDQorCSAqIEBtb2RlbA0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlkb3VibGUgZ2V0RGlzZWFzZURlYXRoczEoKTsNCisNCisJLyoqDQorCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZSNnZXREaXNlYXNlRGVhdGhzMSA8ZW0+RGlzZWFzZSBEZWF0aHMxPC9lbT59JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5EaXNlYXNlIERlYXRoczE8L2VtPicgYXR0cmlidXRlLg0KKwkgKiBAc2VlICNnZXREaXNlYXNlRGVhdGhzMSgpDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXZvaWQgc2V0RGlzZWFzZURlYXRoczEoZG91YmxlIHZhbHVlKTsNCisNCisJLyoqDQorCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPkRpc2Vhc2UgRGVhdGhzMjwvYj48L2VtPicgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8cD4NCisJICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+RGlzZWFzZSBEZWF0aHMyPC9lbT4nIGF0dHJpYnV0ZSBpc24ndCBjbGVhciwNCisJICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLg0KKwkgKiA8L3A+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5EaXNlYXNlIERlYXRoczI8L2VtPicgYXR0cmlidXRlLg0KKwkgKiBAc2VlICNzZXREaXNlYXNlRGVhdGhzMihkb3VibGUpDQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5WZWN0b3JQYWNrYWdlI2dldERlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfRGlzZWFzZURlYXRoczIoKQ0KKwkgKiBAbW9kZWwNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJZG91YmxlIGdldERpc2Vhc2VEZWF0aHMyKCk7DQorDQorCS8qKg0KKwkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLkRlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWUjZ2V0RGlzZWFzZURlYXRoczIgPGVtPkRpc2Vhc2UgRGVhdGhzMjwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+RGlzZWFzZSBEZWF0aHMyPC9lbT4nIGF0dHJpYnV0ZS4NCisJICogQHNlZSAjZ2V0RGlzZWFzZURlYXRoczIoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwl2b2lkIHNldERpc2Vhc2VEZWF0aHMyKGRvdWJsZSB2YWx1ZSk7DQorDQorCS8qKg0KKwkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5EaXNlYXNlIERlYXRoczM8L2I+PC9lbT4nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPHA+DQorCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPkRpc2Vhc2UgRGVhdGhzMzwvZW0+JyBhdHRyaWJ1dGUgaXNuJ3QgY2xlYXIsDQorCSAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4NCisJICogPC9wPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+RGlzZWFzZSBEZWF0aHMzPC9lbT4nIGF0dHJpYnV0ZS4NCisJICogQHNlZSAjc2V0RGlzZWFzZURlYXRoczMoZG91YmxlKQ0KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuVmVjdG9yUGFja2FnZSNnZXREZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX0Rpc2Vhc2VEZWF0aHMzKCkNCisJICogQG1vZGVsDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCWRvdWJsZSBnZXREaXNlYXNlRGVhdGhzMygpOw0KKw0KKwkvKioNCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlI2dldERpc2Vhc2VEZWF0aHMzIDxlbT5EaXNlYXNlIERlYXRoczM8L2VtPn0nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPkRpc2Vhc2UgRGVhdGhzMzwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIEBzZWUgI2dldERpc2Vhc2VEZWF0aHMzKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJdm9pZCBzZXREaXNlYXNlRGVhdGhzMyhkb3VibGUgdmFsdWUpOw0KKw0KKwkvKioNCisJICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+RGlzZWFzZSBEZWF0aHM0PC9iPjwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDxwPg0KKwkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5EaXNlYXNlIERlYXRoczQ8L2VtPicgYXR0cmlidXRlIGlzbid0IGNsZWFyLA0KKwkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uDQorCSAqIDwvcD4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPkRpc2Vhc2UgRGVhdGhzNDwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIEBzZWUgI3NldERpc2Vhc2VEZWF0aHM0KGRvdWJsZSkNCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLlZlY3RvclBhY2thZ2UjZ2V0RGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9EaXNlYXNlRGVhdGhzNCgpDQorCSAqIEBtb2RlbA0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlkb3VibGUgZ2V0RGlzZWFzZURlYXRoczQoKTsNCisNCisJLyoqDQorCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZSNnZXREaXNlYXNlRGVhdGhzNCA8ZW0+RGlzZWFzZSBEZWF0aHM0PC9lbT59JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5EaXNlYXNlIERlYXRoczQ8L2VtPicgYXR0cmlidXRlLg0KKwkgKiBAc2VlICNnZXREaXNlYXNlRGVhdGhzNCgpDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXZvaWQgc2V0RGlzZWFzZURlYXRoczQoZG91YmxlIHZhbHVlKTsNCisNCisJLyoqDQorCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPkRpc2Vhc2UgRGVhdGhzMTI8L2I+PC9lbT4nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPHA+DQorCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPkRpc2Vhc2UgRGVhdGhzMTI8L2VtPicgYXR0cmlidXRlIGlzbid0IGNsZWFyLA0KKwkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uDQorCSAqIDwvcD4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPkRpc2Vhc2UgRGVhdGhzMTI8L2VtPicgYXR0cmlidXRlLg0KKwkgKiBAc2VlICNzZXREaXNlYXNlRGVhdGhzMTIoZG91YmxlKQ0KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuVmVjdG9yUGFja2FnZSNnZXREZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX0Rpc2Vhc2VEZWF0aHMxMigpDQorCSAqIEBtb2RlbA0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlkb3VibGUgZ2V0RGlzZWFzZURlYXRoczEyKCk7DQorDQorCS8qKg0KKwkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLkRlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWUjZ2V0RGlzZWFzZURlYXRoczEyIDxlbT5EaXNlYXNlIERlYXRoczEyPC9lbT59JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5EaXNlYXNlIERlYXRoczEyPC9lbT4nIGF0dHJpYnV0ZS4NCisJICogQHNlZSAjZ2V0RGlzZWFzZURlYXRoczEyKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJdm9pZCBzZXREaXNlYXNlRGVhdGhzMTIoZG91YmxlIHZhbHVlKTsNCisNCisJLyoqDQorCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPkRpc2Vhc2UgRGVhdGhzMjE8L2I+PC9lbT4nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPHA+DQorCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPkRpc2Vhc2UgRGVhdGhzMjE8L2VtPicgYXR0cmlidXRlIGlzbid0IGNsZWFyLA0KKwkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uDQorCSAqIDwvcD4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPkRpc2Vhc2UgRGVhdGhzMjE8L2VtPicgYXR0cmlidXRlLg0KKwkgKiBAc2VlICNzZXREaXNlYXNlRGVhdGhzMjEoZG91YmxlKQ0KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuVmVjdG9yUGFja2FnZSNnZXREZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX0Rpc2Vhc2VEZWF0aHMyMSgpDQorCSAqIEBtb2RlbA0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlkb3VibGUgZ2V0RGlzZWFzZURlYXRoczIxKCk7DQorDQorCS8qKg0KKwkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLkRlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWUjZ2V0RGlzZWFzZURlYXRoczIxIDxlbT5EaXNlYXNlIERlYXRoczIxPC9lbT59JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5EaXNlYXNlIERlYXRoczIxPC9lbT4nIGF0dHJpYnV0ZS4NCisJICogQHNlZSAjZ2V0RGlzZWFzZURlYXRoczIxKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJdm9pZCBzZXREaXNlYXNlRGVhdGhzMjEoZG91YmxlIHZhbHVlKTsNCisNCisJLyoqDQorCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPkRpc2Vhc2UgRGVhdGhzMzE8L2I+PC9lbT4nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPHA+DQorCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPkRpc2Vhc2UgRGVhdGhzMzE8L2VtPicgYXR0cmlidXRlIGlzbid0IGNsZWFyLA0KKwkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uDQorCSAqIDwvcD4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPkRpc2Vhc2UgRGVhdGhzMzE8L2VtPicgYXR0cmlidXRlLg0KKwkgKiBAc2VlICNzZXREaXNlYXNlRGVhdGhzMzEoZG91YmxlKQ0KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuVmVjdG9yUGFja2FnZSNnZXREZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX0Rpc2Vhc2VEZWF0aHMzMSgpDQorCSAqIEBtb2RlbA0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlkb3VibGUgZ2V0RGlzZWFzZURlYXRoczMxKCk7DQorDQorCS8qKg0KKwkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLkRlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWUjZ2V0RGlzZWFzZURlYXRoczMxIDxlbT5EaXNlYXNlIERlYXRoczMxPC9lbT59JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5EaXNlYXNlIERlYXRoczMxPC9lbT4nIGF0dHJpYnV0ZS4NCisJICogQHNlZSAjZ2V0RGlzZWFzZURlYXRoczMxKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJdm9pZCBzZXREaXNlYXNlRGVhdGhzMzEoZG91YmxlIHZhbHVlKTsNCisNCisJLyoqDQorCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPkRpc2Vhc2UgRGVhdGhzNDE8L2I+PC9lbT4nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPHA+DQorCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPkRpc2Vhc2UgRGVhdGhzNDE8L2VtPicgYXR0cmlidXRlIGlzbid0IGNsZWFyLA0KKwkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uDQorCSAqIDwvcD4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPkRpc2Vhc2UgRGVhdGhzNDE8L2VtPicgYXR0cmlidXRlLg0KKwkgKiBAc2VlICNzZXREaXNlYXNlRGVhdGhzNDEoZG91YmxlKQ0KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuVmVjdG9yUGFja2FnZSNnZXREZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX0Rpc2Vhc2VEZWF0aHM0MSgpDQorCSAqIEBtb2RlbA0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlkb3VibGUgZ2V0RGlzZWFzZURlYXRoczQxKCk7DQorDQorCS8qKg0KKwkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLkRlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWUjZ2V0RGlzZWFzZURlYXRoczQxIDxlbT5EaXNlYXNlIERlYXRoczQxPC9lbT59JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5EaXNlYXNlIERlYXRoczQxPC9lbT4nIGF0dHJpYnV0ZS4NCisJICogQHNlZSAjZ2V0RGlzZWFzZURlYXRoczQxKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJdm9pZCBzZXREaXNlYXNlRGVhdGhzNDEoZG91YmxlIHZhbHVlKTsNCisNCisJLyoqDQorCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPkRpc2Vhc2UgRGVhdGhzMTM8L2I+PC9lbT4nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPHA+DQorCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPkRpc2Vhc2UgRGVhdGhzMTM8L2VtPicgYXR0cmlidXRlIGlzbid0IGNsZWFyLA0KKwkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uDQorCSAqIDwvcD4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPkRpc2Vhc2UgRGVhdGhzMTM8L2VtPicgYXR0cmlidXRlLg0KKwkgKiBAc2VlICNzZXREaXNlYXNlRGVhdGhzMTMoZG91YmxlKQ0KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuVmVjdG9yUGFja2FnZSNnZXREZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX0Rpc2Vhc2VEZWF0aHMxMygpDQorCSAqIEBtb2RlbA0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlkb3VibGUgZ2V0RGlzZWFzZURlYXRoczEzKCk7DQorDQorCS8qKg0KKwkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLkRlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWUjZ2V0RGlzZWFzZURlYXRoczEzIDxlbT5EaXNlYXNlIERlYXRoczEzPC9lbT59JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5EaXNlYXNlIERlYXRoczEzPC9lbT4nIGF0dHJpYnV0ZS4NCisJICogQHNlZSAjZ2V0RGlzZWFzZURlYXRoczEzKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJdm9pZCBzZXREaXNlYXNlRGVhdGhzMTMoZG91YmxlIHZhbHVlKTsNCisNCisJLyoqDQorCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPkRpc2Vhc2UgRGVhdGhzMjM8L2I+PC9lbT4nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPHA+DQorCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPkRpc2Vhc2UgRGVhdGhzMjM8L2VtPicgYXR0cmlidXRlIGlzbid0IGNsZWFyLA0KKwkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uDQorCSAqIDwvcD4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPkRpc2Vhc2UgRGVhdGhzMjM8L2VtPicgYXR0cmlidXRlLg0KKwkgKiBAc2VlICNzZXREaXNlYXNlRGVhdGhzMjMoZG91YmxlKQ0KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuVmVjdG9yUGFja2FnZSNnZXREZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX0Rpc2Vhc2VEZWF0aHMyMygpDQorCSAqIEBtb2RlbA0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlkb3VibGUgZ2V0RGlzZWFzZURlYXRoczIzKCk7DQorDQorCS8qKg0KKwkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLkRlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWUjZ2V0RGlzZWFzZURlYXRoczIzIDxlbT5EaXNlYXNlIERlYXRoczIzPC9lbT59JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5EaXNlYXNlIERlYXRoczIzPC9lbT4nIGF0dHJpYnV0ZS4NCisJICogQHNlZSAjZ2V0RGlzZWFzZURlYXRoczIzKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJdm9pZCBzZXREaXNlYXNlRGVhdGhzMjMoZG91YmxlIHZhbHVlKTsNCisNCisJLyoqDQorCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPkRpc2Vhc2UgRGVhdGhzMzI8L2I+PC9lbT4nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPHA+DQorCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPkRpc2Vhc2UgRGVhdGhzMzI8L2VtPicgYXR0cmlidXRlIGlzbid0IGNsZWFyLA0KKwkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uDQorCSAqIDwvcD4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPkRpc2Vhc2UgRGVhdGhzMzI8L2VtPicgYXR0cmlidXRlLg0KKwkgKiBAc2VlICNzZXREaXNlYXNlRGVhdGhzMzIoZG91YmxlKQ0KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuVmVjdG9yUGFja2FnZSNnZXREZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX0Rpc2Vhc2VEZWF0aHMzMigpDQorCSAqIEBtb2RlbA0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlkb3VibGUgZ2V0RGlzZWFzZURlYXRoczMyKCk7DQorDQorCS8qKg0KKwkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLkRlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWUjZ2V0RGlzZWFzZURlYXRoczMyIDxlbT5EaXNlYXNlIERlYXRoczMyPC9lbT59JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5EaXNlYXNlIERlYXRoczMyPC9lbT4nIGF0dHJpYnV0ZS4NCisJICogQHNlZSAjZ2V0RGlzZWFzZURlYXRoczMyKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJdm9pZCBzZXREaXNlYXNlRGVhdGhzMzIoZG91YmxlIHZhbHVlKTsNCisNCisJLyoqDQorCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPkRpc2Vhc2UgRGVhdGhzNDI8L2I+PC9lbT4nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPHA+DQorCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPkRpc2Vhc2UgRGVhdGhzNDI8L2VtPicgYXR0cmlidXRlIGlzbid0IGNsZWFyLA0KKwkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uDQorCSAqIDwvcD4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPkRpc2Vhc2UgRGVhdGhzNDI8L2VtPicgYXR0cmlidXRlLg0KKwkgKiBAc2VlICNzZXREaXNlYXNlRGVhdGhzNDIoZG91YmxlKQ0KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuVmVjdG9yUGFja2FnZSNnZXREZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX0Rpc2Vhc2VEZWF0aHM0MigpDQorCSAqIEBtb2RlbA0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlkb3VibGUgZ2V0RGlzZWFzZURlYXRoczQyKCk7DQorDQorCS8qKg0KKwkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLkRlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWUjZ2V0RGlzZWFzZURlYXRoczQyIDxlbT5EaXNlYXNlIERlYXRoczQyPC9lbT59JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5EaXNlYXNlIERlYXRoczQyPC9lbT4nIGF0dHJpYnV0ZS4NCisJICogQHNlZSAjZ2V0RGlzZWFzZURlYXRoczQyKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJdm9pZCBzZXREaXNlYXNlRGVhdGhzNDIoZG91YmxlIHZhbHVlKTsNCisNCisJLyoqDQorCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPkRpc2Vhc2UgRGVhdGhzMTQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPHA+DQorCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPkRpc2Vhc2UgRGVhdGhzMTQ8L2VtPicgYXR0cmlidXRlIGlzbid0IGNsZWFyLA0KKwkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uDQorCSAqIDwvcD4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPkRpc2Vhc2UgRGVhdGhzMTQ8L2VtPicgYXR0cmlidXRlLg0KKwkgKiBAc2VlICNzZXREaXNlYXNlRGVhdGhzMTQoZG91YmxlKQ0KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuVmVjdG9yUGFja2FnZSNnZXREZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX0Rpc2Vhc2VEZWF0aHMxNCgpDQorCSAqIEBtb2RlbA0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlkb3VibGUgZ2V0RGlzZWFzZURlYXRoczE0KCk7DQorDQorCS8qKg0KKwkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLkRlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWUjZ2V0RGlzZWFzZURlYXRoczE0IDxlbT5EaXNlYXNlIERlYXRoczE0PC9lbT59JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5EaXNlYXNlIERlYXRoczE0PC9lbT4nIGF0dHJpYnV0ZS4NCisJICogQHNlZSAjZ2V0RGlzZWFzZURlYXRoczE0KCkNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJdm9pZCBzZXREaXNlYXNlRGVhdGhzMTQoZG91YmxlIHZhbHVlKTsNCisNCisJLyoqDQorCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPkRpc2Vhc2UgRGVhdGhzMjQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPHA+DQorCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPkRpc2Vhc2UgRGVhdGhzMjQ8L2VtPicgYXR0cmlidXRlIGlzbid0IGNsZWFyLA0KKwkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uDQorCSAqIDwvcD4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPkRpc2Vhc2UgRGVhdGhzMjQ8L2VtPicgYXR0cmlidXRlLg0KKwkgKiBAc2VlICNzZXREaXNlYXNlRGVhdGhzMjQoZG91YmxlKQ0KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuVmVjdG9yUGFja2FnZSNnZXREZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX0Rpc2Vhc2VEZWF0aHMyNCgpDQorCSAqIEBtb2RlbA0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlkb3VibGUgZ2V0RGlzZWFzZURlYXRoczI0KCk7DQorDQorCS8qKg0KKwkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLkRlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWUjZ2V0RGlzZWFzZURlYXRoczI0IDxlbT5EaXNlYXNlIERlYXRoczI0PC9lbT59JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5EaXNlYXNlIERlYXRoczI0PC9lbT4nIGF0dHJpYnV0ZS4NCisJICogQHNlZSAjZ2V0RGlzZWFzZURlYXRoczI0KCkNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJdm9pZCBzZXREaXNlYXNlRGVhdGhzMjQoZG91YmxlIHZhbHVlKTsNCisNCisJLyoqDQorCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPkRpc2Vhc2UgRGVhdGhzMzQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPHA+DQorCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPkRpc2Vhc2UgRGVhdGhzMzQ8L2VtPicgYXR0cmlidXRlIGlzbid0IGNsZWFyLA0KKwkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uDQorCSAqIDwvcD4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPkRpc2Vhc2UgRGVhdGhzMzQ8L2VtPicgYXR0cmlidXRlLg0KKwkgKiBAc2VlICNzZXREaXNlYXNlRGVhdGhzMzQoZG91YmxlKQ0KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuVmVjdG9yUGFja2FnZSNnZXREZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX0Rpc2Vhc2VEZWF0aHMzNCgpDQorCSAqIEBtb2RlbA0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlkb3VibGUgZ2V0RGlzZWFzZURlYXRoczM0KCk7DQorDQorCS8qKg0KKwkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLkRlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWUjZ2V0RGlzZWFzZURlYXRoczM0IDxlbT5EaXNlYXNlIERlYXRoczM0PC9lbT59JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5EaXNlYXNlIERlYXRoczM0PC9lbT4nIGF0dHJpYnV0ZS4NCisJICogQHNlZSAjZ2V0RGlzZWFzZURlYXRoczM0KCkNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJdm9pZCBzZXREaXNlYXNlRGVhdGhzMzQoZG91YmxlIHZhbHVlKTsNCisNCisJLyoqDQorCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPkRpc2Vhc2UgRGVhdGhzNDM8L2I+PC9lbT4nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPHA+DQorCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPkRpc2Vhc2UgRGVhdGhzNDM8L2VtPicgYXR0cmlidXRlIGlzbid0IGNsZWFyLA0KKwkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uDQorCSAqIDwvcD4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPkRpc2Vhc2UgRGVhdGhzNDM8L2VtPicgYXR0cmlidXRlLg0KKwkgKiBAc2VlICNzZXREaXNlYXNlRGVhdGhzNDMoZG91YmxlKQ0KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuVmVjdG9yUGFja2FnZSNnZXREZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX0Rpc2Vhc2VEZWF0aHM0MygpDQorCSAqIEBtb2RlbA0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlkb3VibGUgZ2V0RGlzZWFzZURlYXRoczQzKCk7DQorDQorCS8qKg0KKwkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLkRlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWUjZ2V0RGlzZWFzZURlYXRoczQzIDxlbT5EaXNlYXNlIERlYXRoczQzPC9lbT59JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5EaXNlYXNlIERlYXRoczQzPC9lbT4nIGF0dHJpYnV0ZS4NCisJICogQHNlZSAjZ2V0RGlzZWFzZURlYXRoczQzKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJdm9pZCBzZXREaXNlYXNlRGVhdGhzNDMoZG91YmxlIHZhbHVlKTsNCisNCit9IC8vIERlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWUNCmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3Ivc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy92ZWN0b3IvRGVuZ3VlTW9kZWxIb3N0TGFibGUuamF2YSBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3ZlY3Rvci9EZW5ndWVNb2RlbEhvc3RMYWJsZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEyY2ZlYWYKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3Ivc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy92ZWN0b3IvRGVuZ3VlTW9kZWxIb3N0TGFibGUuamF2YQpAQCAtMCwwICsxLDI2IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3I7DQorDQorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisgKiBDb3B5cmlnaHQgKGMpIDIwMTEgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuDQorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscw0KKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMA0KKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0DQorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwNCisgKg0KKyAqIENvbnRyaWJ1dG9yczoNCisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uDQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsOw0KKw0KKy8qKg0KKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorICogQSByZXByZXNlbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+RGVuZ3VlIE1vZGVsIEhvc3QgTGFibGU8L2I+PC9lbT4nLg0KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKyAqDQorICoNCisgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuVmVjdG9yUGFja2FnZSNnZXREZW5ndWVNb2RlbEhvc3RMYWJsZSgpDQorICogQG1vZGVsDQorICogQGdlbmVyYXRlZA0KKyAqLw0KK3B1YmxpYyBpbnRlcmZhY2UgRGVuZ3VlTW9kZWxIb3N0TGFibGUgZXh0ZW5kcyBTdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsIHsNCit9IC8vIERlbmd1ZU1vZGVsSG9zdExhYmxlDQpkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvdmVjdG9yL0Rlbmd1ZU1vZGVsSG9zdExhYmxlVmFsdWUuamF2YSBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3ZlY3Rvci9EZW5ndWVNb2RlbEhvc3RMYWJsZVZhbHVlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTk2MGZhNwotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3ZlY3Rvci9EZW5ndWVNb2RlbEhvc3RMYWJsZVZhbHVlLmphdmEKQEAgLTAsMCArMSwyMDAyIEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3I7DQorDQorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisgKiBDb3B5cmlnaHQgKGMpIDIwMTEgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuDQorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscw0KKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMA0KKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0DQorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwNCisgKg0KKyAqIENvbnRyaWJ1dG9yczoNCisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uDQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsVmFsdWU7DQorDQorLyoqDQorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisgKiBBIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5EZW5ndWUgTW9kZWwgSG9zdCBMYWJsZSBWYWx1ZTwvYj48L2VtPicuDQorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorICoNCisgKiA8cD4NCisgKiBUaGUgZm9sbG93aW5nIGZlYXR1cmVzIGFyZSBzdXBwb3J0ZWQ6DQorICogPHVsPg0KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLkRlbmd1ZU1vZGVsSG9zdExhYmxlVmFsdWUjZ2V0RTEgPGVtPkUxPC9lbT59PC9saT4NCisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbEhvc3RMYWJsZVZhbHVlI2dldEUyIDxlbT5FMjwvZW0+fTwvbGk+DQorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWxIb3N0TGFibGVWYWx1ZSNnZXRFMyA8ZW0+RTM8L2VtPn08L2xpPg0KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLkRlbmd1ZU1vZGVsSG9zdExhYmxlVmFsdWUjZ2V0RTQgPGVtPkU0PC9lbT59PC9saT4NCisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbEhvc3RMYWJsZVZhbHVlI2dldEkxIDxlbT5JMTwvZW0+fTwvbGk+DQorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWxIb3N0TGFibGVWYWx1ZSNnZXRJMiA8ZW0+STI8L2VtPn08L2xpPg0KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLkRlbmd1ZU1vZGVsSG9zdExhYmxlVmFsdWUjZ2V0STMgPGVtPkkzPC9lbT59PC9saT4NCisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbEhvc3RMYWJsZVZhbHVlI2dldEk0IDxlbT5JNDwvZW0+fTwvbGk+DQorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWxIb3N0TGFibGVWYWx1ZSNnZXRUMSA8ZW0+VDE8L2VtPn08L2xpPg0KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLkRlbmd1ZU1vZGVsSG9zdExhYmxlVmFsdWUjZ2V0VDIgPGVtPlQyPC9lbT59PC9saT4NCisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbEhvc3RMYWJsZVZhbHVlI2dldFQzIDxlbT5UMzwvZW0+fTwvbGk+DQorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWxIb3N0TGFibGVWYWx1ZSNnZXRUNCA8ZW0+VDQ8L2VtPn08L2xpPg0KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLkRlbmd1ZU1vZGVsSG9zdExhYmxlVmFsdWUjZ2V0UjEgPGVtPlIxPC9lbT59PC9saT4NCisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbEhvc3RMYWJsZVZhbHVlI2dldFIyIDxlbT5SMjwvZW0+fTwvbGk+DQorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWxIb3N0TGFibGVWYWx1ZSNnZXRSMyA8ZW0+UjM8L2VtPn08L2xpPg0KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLkRlbmd1ZU1vZGVsSG9zdExhYmxlVmFsdWUjZ2V0UjQgPGVtPlI0PC9lbT59PC9saT4NCisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbEhvc3RMYWJsZVZhbHVlI2dldEUxMiA8ZW0+RTEyPC9lbT59PC9saT4NCisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbEhvc3RMYWJsZVZhbHVlI2dldEUxMyA8ZW0+RTEzPC9lbT59PC9saT4NCisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbEhvc3RMYWJsZVZhbHVlI2dldEUxNCA8ZW0+RTE0PC9lbT59PC9saT4NCisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbEhvc3RMYWJsZVZhbHVlI2dldEUyMSA8ZW0+RTIxPC9lbT59PC9saT4NCisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbEhvc3RMYWJsZVZhbHVlI2dldEUyMyA8ZW0+RTIzPC9lbT59PC9saT4NCisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbEhvc3RMYWJsZVZhbHVlI2dldEUyNCA8ZW0+RTI0PC9lbT59PC9saT4NCisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbEhvc3RMYWJsZVZhbHVlI2dldEUzMSA8ZW0+RTMxPC9lbT59PC9saT4NCisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbEhvc3RMYWJsZVZhbHVlI2dldEUzMiA8ZW0+RTMyPC9lbT59PC9saT4NCisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbEhvc3RMYWJsZVZhbHVlI2dldEUzNCA8ZW0+RTM0PC9lbT59PC9saT4NCisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbEhvc3RMYWJsZVZhbHVlI2dldEU0MSA8ZW0+RTQxPC9lbT59PC9saT4NCisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbEhvc3RMYWJsZVZhbHVlI2dldEU0MiA8ZW0+RTQyPC9lbT59PC9saT4NCisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbEhvc3RMYWJsZVZhbHVlI2dldEU0MyA8ZW0+RTQzPC9lbT59PC9saT4NCisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbEhvc3RMYWJsZVZhbHVlI2dldEkxMiA8ZW0+STEyPC9lbT59PC9saT4NCisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbEhvc3RMYWJsZVZhbHVlI2dldEkxMyA8ZW0+STEzPC9lbT59PC9saT4NCisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbEhvc3RMYWJsZVZhbHVlI2dldEkxNCA8ZW0+STE0PC9lbT59PC9saT4NCisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbEhvc3RMYWJsZVZhbHVlI2dldEkyMSA8ZW0+STIxPC9lbT59PC9saT4NCisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbEhvc3RMYWJsZVZhbHVlI2dldEkyMyA8ZW0+STIzPC9lbT59PC9saT4NCisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbEhvc3RMYWJsZVZhbHVlI2dldEkyNCA8ZW0+STI0PC9lbT59PC9saT4NCisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbEhvc3RMYWJsZVZhbHVlI2dldEkzMSA8ZW0+STMxPC9lbT59PC9saT4NCisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbEhvc3RMYWJsZVZhbHVlI2dldEkzMiA8ZW0+STMyPC9lbT59PC9saT4NCisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbEhvc3RMYWJsZVZhbHVlI2dldEkzNCA8ZW0+STM0PC9lbT59PC9saT4NCisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbEhvc3RMYWJsZVZhbHVlI2dldEk0MSA8ZW0+STQxPC9lbT59PC9saT4NCisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbEhvc3RMYWJsZVZhbHVlI2dldEk0MiA8ZW0+STQyPC9lbT59PC9saT4NCisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbEhvc3RMYWJsZVZhbHVlI2dldEk0MyA8ZW0+STQzPC9lbT59PC9saT4NCisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbEhvc3RMYWJsZVZhbHVlI2dldFIgPGVtPlI8L2VtPn08L2xpPg0KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLkRlbmd1ZU1vZGVsSG9zdExhYmxlVmFsdWUjZ2V0SW5jaWRlbmNlMSA8ZW0+SW5jaWRlbmNlMTwvZW0+fTwvbGk+DQorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWxIb3N0TGFibGVWYWx1ZSNnZXRJbmNpZGVuY2UyIDxlbT5JbmNpZGVuY2UyPC9lbT59PC9saT4NCisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbEhvc3RMYWJsZVZhbHVlI2dldEluY2lkZW5jZTMgPGVtPkluY2lkZW5jZTM8L2VtPn08L2xpPg0KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLkRlbmd1ZU1vZGVsSG9zdExhYmxlVmFsdWUjZ2V0SW5jaWRlbmNlNCA8ZW0+SW5jaWRlbmNlNDwvZW0+fTwvbGk+DQorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWxIb3N0TGFibGVWYWx1ZSNnZXRJbmNpZGVuY2UxMiA8ZW0+SW5jaWRlbmNlMTI8L2VtPn08L2xpPg0KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLkRlbmd1ZU1vZGVsSG9zdExhYmxlVmFsdWUjZ2V0SW5jaWRlbmNlMjEgPGVtPkluY2lkZW5jZTIxPC9lbT59PC9saT4NCisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbEhvc3RMYWJsZVZhbHVlI2dldEluY2lkZW5jZTMxIDxlbT5JbmNpZGVuY2UzMTwvZW0+fTwvbGk+DQorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWxIb3N0TGFibGVWYWx1ZSNnZXRJbmNpZGVuY2U0MSA8ZW0+SW5jaWRlbmNlNDE8L2VtPn08L2xpPg0KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLkRlbmd1ZU1vZGVsSG9zdExhYmxlVmFsdWUjZ2V0SW5jaWRlbmNlMTMgPGVtPkluY2lkZW5jZTEzPC9lbT59PC9saT4NCisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbEhvc3RMYWJsZVZhbHVlI2dldEluY2lkZW5jZTIzIDxlbT5JbmNpZGVuY2UyMzwvZW0+fTwvbGk+DQorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWxIb3N0TGFibGVWYWx1ZSNnZXRJbmNpZGVuY2UzMiA8ZW0+SW5jaWRlbmNlMzI8L2VtPn08L2xpPg0KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLkRlbmd1ZU1vZGVsSG9zdExhYmxlVmFsdWUjZ2V0SW5jaWRlbmNlNDIgPGVtPkluY2lkZW5jZTQyPC9lbT59PC9saT4NCisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbEhvc3RMYWJsZVZhbHVlI2dldEluY2lkZW5jZTE0IDxlbT5JbmNpZGVuY2UxNDwvZW0+fTwvbGk+DQorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWxIb3N0TGFibGVWYWx1ZSNnZXRJbmNpZGVuY2UyNCA8ZW0+SW5jaWRlbmNlMjQ8L2VtPn08L2xpPg0KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLkRlbmd1ZU1vZGVsSG9zdExhYmxlVmFsdWUjZ2V0SW5jaWRlbmNlMzQgPGVtPkluY2lkZW5jZTM0PC9lbT59PC9saT4NCisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbEhvc3RMYWJsZVZhbHVlI2dldEluY2lkZW5jZTQzIDxlbT5JbmNpZGVuY2U0MzwvZW0+fTwvbGk+DQorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWxIb3N0TGFibGVWYWx1ZSNnZXREZWF0aHMxIDxlbT5EZWF0aHMxPC9lbT59PC9saT4NCisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbEhvc3RMYWJsZVZhbHVlI2dldERlYXRoczIgPGVtPkRlYXRoczI8L2VtPn08L2xpPg0KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLkRlbmd1ZU1vZGVsSG9zdExhYmxlVmFsdWUjZ2V0RGVhdGhzMyA8ZW0+RGVhdGhzMzwvZW0+fTwvbGk+DQorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWxIb3N0TGFibGVWYWx1ZSNnZXREZWF0aHM0IDxlbT5EZWF0aHM0PC9lbT59PC9saT4NCisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbEhvc3RMYWJsZVZhbHVlI2dldERlYXRoczEyIDxlbT5EZWF0aHMxMjwvZW0+fTwvbGk+DQorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWxIb3N0TGFibGVWYWx1ZSNnZXREZWF0aHMyMSA8ZW0+RGVhdGhzMjE8L2VtPn08L2xpPg0KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLkRlbmd1ZU1vZGVsSG9zdExhYmxlVmFsdWUjZ2V0RGVhdGhzMzEgPGVtPkRlYXRoczMxPC9lbT59PC9saT4NCisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbEhvc3RMYWJsZVZhbHVlI2dldERlYXRoczQxIDxlbT5EZWF0aHM0MTwvZW0+fTwvbGk+DQorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWxIb3N0TGFibGVWYWx1ZSNnZXREZWF0aHMxMyA8ZW0+RGVhdGhzMTM8L2VtPn08L2xpPg0KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLkRlbmd1ZU1vZGVsSG9zdExhYmxlVmFsdWUjZ2V0RGVhdGhzMjMgPGVtPkRlYXRoczIzPC9lbT59PC9saT4NCisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbEhvc3RMYWJsZVZhbHVlI2dldERlYXRoczMyIDxlbT5EZWF0aHMzMjwvZW0+fTwvbGk+DQorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWxIb3N0TGFibGVWYWx1ZSNnZXREZWF0aHM0MiA8ZW0+RGVhdGhzNDI8L2VtPn08L2xpPg0KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLkRlbmd1ZU1vZGVsSG9zdExhYmxlVmFsdWUjZ2V0RGVhdGhzMTQgPGVtPkRlYXRoczE0PC9lbT59PC9saT4NCisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbEhvc3RMYWJsZVZhbHVlI2dldERlYXRoczI0IDxlbT5EZWF0aHMyNDwvZW0+fTwvbGk+DQorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWxIb3N0TGFibGVWYWx1ZSNnZXREZWF0aHMzNCA8ZW0+RGVhdGhzMzQ8L2VtPn08L2xpPg0KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLkRlbmd1ZU1vZGVsSG9zdExhYmxlVmFsdWUjZ2V0RGVhdGhzNDMgPGVtPkRlYXRoczQzPC9lbT59PC9saT4NCisgKiA8L3VsPg0KKyAqIDwvcD4NCisgKg0KKyAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5WZWN0b3JQYWNrYWdlI2dldERlbmd1ZU1vZGVsSG9zdExhYmxlVmFsdWUoKQ0KKyAqIEBtb2RlbA0KKyAqIEBnZW5lcmF0ZWQNCisgKi8NCitwdWJsaWMgaW50ZXJmYWNlIERlbmd1ZU1vZGVsSG9zdExhYmxlVmFsdWUgZXh0ZW5kcyBTdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsVmFsdWUgew0KKwkvKioNCisJICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+RTE8L2I+PC9lbT4nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPHA+DQorCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPkUxPC9lbT4nIGF0dHJpYnV0ZSBpc24ndCBjbGVhciwNCisJICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLg0KKwkgKiA8L3A+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5FMTwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIEBzZWUgI3NldEUxKGRvdWJsZSkNCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLlZlY3RvclBhY2thZ2UjZ2V0RGVuZ3VlTW9kZWxIb3N0TGFibGVWYWx1ZV9FMSgpDQorCSAqIEBtb2RlbA0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlkb3VibGUgZ2V0RTEoKTsNCisNCisJLyoqDQorCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWxIb3N0TGFibGVWYWx1ZSNnZXRFMSA8ZW0+RTE8L2VtPn0nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPkUxPC9lbT4nIGF0dHJpYnV0ZS4NCisJICogQHNlZSAjZ2V0RTEoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwl2b2lkIHNldEUxKGRvdWJsZSB2YWx1ZSk7DQorDQorCS8qKg0KKwkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5FMjwvYj48L2VtPicgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8cD4NCisJICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+RTI8L2VtPicgYXR0cmlidXRlIGlzbid0IGNsZWFyLA0KKwkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uDQorCSAqIDwvcD4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPkUyPC9lbT4nIGF0dHJpYnV0ZS4NCisJICogQHNlZSAjc2V0RTIoZG91YmxlKQ0KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuVmVjdG9yUGFja2FnZSNnZXREZW5ndWVNb2RlbEhvc3RMYWJsZVZhbHVlX0UyKCkNCisJICogQG1vZGVsDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCWRvdWJsZSBnZXRFMigpOw0KKw0KKwkvKioNCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbEhvc3RMYWJsZVZhbHVlI2dldEUyIDxlbT5FMjwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+RTI8L2VtPicgYXR0cmlidXRlLg0KKwkgKiBAc2VlICNnZXRFMigpDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXZvaWQgc2V0RTIoZG91YmxlIHZhbHVlKTsNCisNCisJLyoqDQorCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPkUzPC9iPjwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDxwPg0KKwkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5FMzwvZW0+JyBhdHRyaWJ1dGUgaXNuJ3QgY2xlYXIsDQorCSAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4NCisJICogPC9wPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+RTM8L2VtPicgYXR0cmlidXRlLg0KKwkgKiBAc2VlICNzZXRFMyhkb3VibGUpDQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5WZWN0b3JQYWNrYWdlI2dldERlbmd1ZU1vZGVsSG9zdExhYmxlVmFsdWVfRTMoKQ0KKwkgKiBAbW9kZWwNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJZG91YmxlIGdldEUzKCk7DQorDQorCS8qKg0KKwkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLkRlbmd1ZU1vZGVsSG9zdExhYmxlVmFsdWUjZ2V0RTMgPGVtPkUzPC9lbT59JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5FMzwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIEBzZWUgI2dldEUzKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJdm9pZCBzZXRFMyhkb3VibGUgdmFsdWUpOw0KKw0KKwkvKioNCisJICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+RTQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPHA+DQorCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPkU0PC9lbT4nIGF0dHJpYnV0ZSBpc24ndCBjbGVhciwNCisJICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLg0KKwkgKiA8L3A+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5FNDwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIEBzZWUgI3NldEU0KGRvdWJsZSkNCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLlZlY3RvclBhY2thZ2UjZ2V0RGVuZ3VlTW9kZWxIb3N0TGFibGVWYWx1ZV9FNCgpDQorCSAqIEBtb2RlbA0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlkb3VibGUgZ2V0RTQoKTsNCisNCisJLyoqDQorCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWxIb3N0TGFibGVWYWx1ZSNnZXRFNCA8ZW0+RTQ8L2VtPn0nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPkU0PC9lbT4nIGF0dHJpYnV0ZS4NCisJICogQHNlZSAjZ2V0RTQoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwl2b2lkIHNldEU0KGRvdWJsZSB2YWx1ZSk7DQorDQorCS8qKg0KKwkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5JMTwvYj48L2VtPicgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8cD4NCisJICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+STE8L2VtPicgYXR0cmlidXRlIGlzbid0IGNsZWFyLA0KKwkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uDQorCSAqIDwvcD4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPkkxPC9lbT4nIGF0dHJpYnV0ZS4NCisJICogQHNlZSAjc2V0STEoZG91YmxlKQ0KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuVmVjdG9yUGFja2FnZSNnZXREZW5ndWVNb2RlbEhvc3RMYWJsZVZhbHVlX0kxKCkNCisJICogQG1vZGVsDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCWRvdWJsZSBnZXRJMSgpOw0KKw0KKwkvKioNCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbEhvc3RMYWJsZVZhbHVlI2dldEkxIDxlbT5JMTwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+STE8L2VtPicgYXR0cmlidXRlLg0KKwkgKiBAc2VlICNnZXRJMSgpDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXZvaWQgc2V0STEoZG91YmxlIHZhbHVlKTsNCisNCisJLyoqDQorCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPkkyPC9iPjwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDxwPg0KKwkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5JMjwvZW0+JyBhdHRyaWJ1dGUgaXNuJ3QgY2xlYXIsDQorCSAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4NCisJICogPC9wPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+STI8L2VtPicgYXR0cmlidXRlLg0KKwkgKiBAc2VlICNzZXRJMihkb3VibGUpDQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5WZWN0b3JQYWNrYWdlI2dldERlbmd1ZU1vZGVsSG9zdExhYmxlVmFsdWVfSTIoKQ0KKwkgKiBAbW9kZWwNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJZG91YmxlIGdldEkyKCk7DQorDQorCS8qKg0KKwkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLkRlbmd1ZU1vZGVsSG9zdExhYmxlVmFsdWUjZ2V0STIgPGVtPkkyPC9lbT59JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5JMjwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIEBzZWUgI2dldEkyKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJdm9pZCBzZXRJMihkb3VibGUgdmFsdWUpOw0KKw0KKwkvKioNCisJICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+STM8L2I+PC9lbT4nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPHA+DQorCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPkkzPC9lbT4nIGF0dHJpYnV0ZSBpc24ndCBjbGVhciwNCisJICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLg0KKwkgKiA8L3A+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5JMzwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIEBzZWUgI3NldEkzKGRvdWJsZSkNCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLlZlY3RvclBhY2thZ2UjZ2V0RGVuZ3VlTW9kZWxIb3N0TGFibGVWYWx1ZV9JMygpDQorCSAqIEBtb2RlbA0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlkb3VibGUgZ2V0STMoKTsNCisNCisJLyoqDQorCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWxIb3N0TGFibGVWYWx1ZSNnZXRJMyA8ZW0+STM8L2VtPn0nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPkkzPC9lbT4nIGF0dHJpYnV0ZS4NCisJICogQHNlZSAjZ2V0STMoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwl2b2lkIHNldEkzKGRvdWJsZSB2YWx1ZSk7DQorDQorCS8qKg0KKwkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5JNDwvYj48L2VtPicgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8cD4NCisJICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+STQ8L2VtPicgYXR0cmlidXRlIGlzbid0IGNsZWFyLA0KKwkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uDQorCSAqIDwvcD4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPkk0PC9lbT4nIGF0dHJpYnV0ZS4NCisJICogQHNlZSAjc2V0STQoZG91YmxlKQ0KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuVmVjdG9yUGFja2FnZSNnZXREZW5ndWVNb2RlbEhvc3RMYWJsZVZhbHVlX0k0KCkNCisJICogQG1vZGVsDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCWRvdWJsZSBnZXRJNCgpOw0KKw0KKwkvKioNCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbEhvc3RMYWJsZVZhbHVlI2dldEk0IDxlbT5JNDwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+STQ8L2VtPicgYXR0cmlidXRlLg0KKwkgKiBAc2VlICNnZXRJNCgpDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXZvaWQgc2V0STQoZG91YmxlIHZhbHVlKTsNCisNCisJLyoqDQorCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPlQxPC9iPjwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDxwPg0KKwkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5UMTwvZW0+JyBhdHRyaWJ1dGUgaXNuJ3QgY2xlYXIsDQorCSAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4NCisJICogPC9wPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+VDE8L2VtPicgYXR0cmlidXRlLg0KKwkgKiBAc2VlICNzZXRUMShkb3VibGUpDQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5WZWN0b3JQYWNrYWdlI2dldERlbmd1ZU1vZGVsSG9zdExhYmxlVmFsdWVfVDEoKQ0KKwkgKiBAbW9kZWwNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJZG91YmxlIGdldFQxKCk7DQorDQorCS8qKg0KKwkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLkRlbmd1ZU1vZGVsSG9zdExhYmxlVmFsdWUjZ2V0VDEgPGVtPlQxPC9lbT59JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5UMTwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIEBzZWUgI2dldFQxKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJdm9pZCBzZXRUMShkb3VibGUgdmFsdWUpOw0KKw0KKwkvKioNCisJICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+VDI8L2I+PC9lbT4nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPHA+DQorCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPlQyPC9lbT4nIGF0dHJpYnV0ZSBpc24ndCBjbGVhciwNCisJICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLg0KKwkgKiA8L3A+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5UMjwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIEBzZWUgI3NldFQyKGRvdWJsZSkNCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLlZlY3RvclBhY2thZ2UjZ2V0RGVuZ3VlTW9kZWxIb3N0TGFibGVWYWx1ZV9UMigpDQorCSAqIEBtb2RlbA0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlkb3VibGUgZ2V0VDIoKTsNCisNCisJLyoqDQorCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWxIb3N0TGFibGVWYWx1ZSNnZXRUMiA8ZW0+VDI8L2VtPn0nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPlQyPC9lbT4nIGF0dHJpYnV0ZS4NCisJICogQHNlZSAjZ2V0VDIoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwl2b2lkIHNldFQyKGRvdWJsZSB2YWx1ZSk7DQorDQorCS8qKg0KKwkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5UMzwvYj48L2VtPicgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8cD4NCisJICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+VDM8L2VtPicgYXR0cmlidXRlIGlzbid0IGNsZWFyLA0KKwkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uDQorCSAqIDwvcD4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPlQzPC9lbT4nIGF0dHJpYnV0ZS4NCisJICogQHNlZSAjc2V0VDMoZG91YmxlKQ0KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuVmVjdG9yUGFja2FnZSNnZXREZW5ndWVNb2RlbEhvc3RMYWJsZVZhbHVlX1QzKCkNCisJICogQG1vZGVsDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCWRvdWJsZSBnZXRUMygpOw0KKw0KKwkvKioNCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbEhvc3RMYWJsZVZhbHVlI2dldFQzIDxlbT5UMzwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+VDM8L2VtPicgYXR0cmlidXRlLg0KKwkgKiBAc2VlICNnZXRUMygpDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXZvaWQgc2V0VDMoZG91YmxlIHZhbHVlKTsNCisNCisJLyoqDQorCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPlQ0PC9iPjwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDxwPg0KKwkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5UNDwvZW0+JyBhdHRyaWJ1dGUgaXNuJ3QgY2xlYXIsDQorCSAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4NCisJICogPC9wPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+VDQ8L2VtPicgYXR0cmlidXRlLg0KKwkgKiBAc2VlICNzZXRUNChkb3VibGUpDQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5WZWN0b3JQYWNrYWdlI2dldERlbmd1ZU1vZGVsSG9zdExhYmxlVmFsdWVfVDQoKQ0KKwkgKiBAbW9kZWwNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJZG91YmxlIGdldFQ0KCk7DQorDQorCS8qKg0KKwkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLkRlbmd1ZU1vZGVsSG9zdExhYmxlVmFsdWUjZ2V0VDQgPGVtPlQ0PC9lbT59JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5UNDwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIEBzZWUgI2dldFQ0KCkNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJdm9pZCBzZXRUNChkb3VibGUgdmFsdWUpOw0KKw0KKwkvKioNCisJICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+UjE8L2I+PC9lbT4nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPHA+DQorCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPlIxPC9lbT4nIGF0dHJpYnV0ZSBpc24ndCBjbGVhciwNCisJICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLg0KKwkgKiA8L3A+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5SMTwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIEBzZWUgI3NldFIxKGRvdWJsZSkNCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLlZlY3RvclBhY2thZ2UjZ2V0RGVuZ3VlTW9kZWxIb3N0TGFibGVWYWx1ZV9SMSgpDQorCSAqIEBtb2RlbA0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlkb3VibGUgZ2V0UjEoKTsNCisNCisJLyoqDQorCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWxIb3N0TGFibGVWYWx1ZSNnZXRSMSA8ZW0+UjE8L2VtPn0nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPlIxPC9lbT4nIGF0dHJpYnV0ZS4NCisJICogQHNlZSAjZ2V0UjEoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwl2b2lkIHNldFIxKGRvdWJsZSB2YWx1ZSk7DQorDQorCS8qKg0KKwkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5SMjwvYj48L2VtPicgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8cD4NCisJICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+UjI8L2VtPicgYXR0cmlidXRlIGlzbid0IGNsZWFyLA0KKwkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uDQorCSAqIDwvcD4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPlIyPC9lbT4nIGF0dHJpYnV0ZS4NCisJICogQHNlZSAjc2V0UjIoZG91YmxlKQ0KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuVmVjdG9yUGFja2FnZSNnZXREZW5ndWVNb2RlbEhvc3RMYWJsZVZhbHVlX1IyKCkNCisJICogQG1vZGVsDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCWRvdWJsZSBnZXRSMigpOw0KKw0KKwkvKioNCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbEhvc3RMYWJsZVZhbHVlI2dldFIyIDxlbT5SMjwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+UjI8L2VtPicgYXR0cmlidXRlLg0KKwkgKiBAc2VlICNnZXRSMigpDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXZvaWQgc2V0UjIoZG91YmxlIHZhbHVlKTsNCisNCisJLyoqDQorCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPlIzPC9iPjwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDxwPg0KKwkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5SMzwvZW0+JyBhdHRyaWJ1dGUgaXNuJ3QgY2xlYXIsDQorCSAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4NCisJICogPC9wPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+UjM8L2VtPicgYXR0cmlidXRlLg0KKwkgKiBAc2VlICNzZXRSMyhkb3VibGUpDQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5WZWN0b3JQYWNrYWdlI2dldERlbmd1ZU1vZGVsSG9zdExhYmxlVmFsdWVfUjMoKQ0KKwkgKiBAbW9kZWwNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJZG91YmxlIGdldFIzKCk7DQorDQorCS8qKg0KKwkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLkRlbmd1ZU1vZGVsSG9zdExhYmxlVmFsdWUjZ2V0UjMgPGVtPlIzPC9lbT59JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5SMzwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIEBzZWUgI2dldFIzKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJdm9pZCBzZXRSMyhkb3VibGUgdmFsdWUpOw0KKw0KKwkvKioNCisJICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+UjQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPHA+DQorCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPlI0PC9lbT4nIGF0dHJpYnV0ZSBpc24ndCBjbGVhciwNCisJICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLg0KKwkgKiA8L3A+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5SNDwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIEBzZWUgI3NldFI0KGRvdWJsZSkNCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLlZlY3RvclBhY2thZ2UjZ2V0RGVuZ3VlTW9kZWxIb3N0TGFibGVWYWx1ZV9SNCgpDQorCSAqIEBtb2RlbA0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlkb3VibGUgZ2V0UjQoKTsNCisNCisJLyoqDQorCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWxIb3N0TGFibGVWYWx1ZSNnZXRSNCA8ZW0+UjQ8L2VtPn0nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPlI0PC9lbT4nIGF0dHJpYnV0ZS4NCisJICogQHNlZSAjZ2V0UjQoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwl2b2lkIHNldFI0KGRvdWJsZSB2YWx1ZSk7DQorDQorCS8qKg0KKwkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5FMTI8L2I+PC9lbT4nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPHA+DQorCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPkUxMjwvZW0+JyBhdHRyaWJ1dGUgaXNuJ3QgY2xlYXIsDQorCSAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4NCisJICogPC9wPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+RTEyPC9lbT4nIGF0dHJpYnV0ZS4NCisJICogQHNlZSAjc2V0RTEyKGRvdWJsZSkNCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLlZlY3RvclBhY2thZ2UjZ2V0RGVuZ3VlTW9kZWxIb3N0TGFibGVWYWx1ZV9FMTIoKQ0KKwkgKiBAbW9kZWwNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJZG91YmxlIGdldEUxMigpOw0KKw0KKwkvKioNCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbEhvc3RMYWJsZVZhbHVlI2dldEUxMiA8ZW0+RTEyPC9lbT59JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5FMTI8L2VtPicgYXR0cmlidXRlLg0KKwkgKiBAc2VlICNnZXRFMTIoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwl2b2lkIHNldEUxMihkb3VibGUgdmFsdWUpOw0KKw0KKwkvKioNCisJICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+RTEzPC9iPjwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDxwPg0KKwkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5FMTM8L2VtPicgYXR0cmlidXRlIGlzbid0IGNsZWFyLA0KKwkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uDQorCSAqIDwvcD4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPkUxMzwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIEBzZWUgI3NldEUxMyhkb3VibGUpDQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5WZWN0b3JQYWNrYWdlI2dldERlbmd1ZU1vZGVsSG9zdExhYmxlVmFsdWVfRTEzKCkNCisJICogQG1vZGVsDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCWRvdWJsZSBnZXRFMTMoKTsNCisNCisJLyoqDQorCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWxIb3N0TGFibGVWYWx1ZSNnZXRFMTMgPGVtPkUxMzwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+RTEzPC9lbT4nIGF0dHJpYnV0ZS4NCisJICogQHNlZSAjZ2V0RTEzKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJdm9pZCBzZXRFMTMoZG91YmxlIHZhbHVlKTsNCisNCisJLyoqDQorCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPkUxNDwvYj48L2VtPicgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8cD4NCisJICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+RTE0PC9lbT4nIGF0dHJpYnV0ZSBpc24ndCBjbGVhciwNCisJICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLg0KKwkgKiA8L3A+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5FMTQ8L2VtPicgYXR0cmlidXRlLg0KKwkgKiBAc2VlICNzZXRFMTQoZG91YmxlKQ0KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuVmVjdG9yUGFja2FnZSNnZXREZW5ndWVNb2RlbEhvc3RMYWJsZVZhbHVlX0UxNCgpDQorCSAqIEBtb2RlbA0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlkb3VibGUgZ2V0RTE0KCk7DQorDQorCS8qKg0KKwkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLkRlbmd1ZU1vZGVsSG9zdExhYmxlVmFsdWUjZ2V0RTE0IDxlbT5FMTQ8L2VtPn0nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPkUxNDwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIEBzZWUgI2dldEUxNCgpDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXZvaWQgc2V0RTE0KGRvdWJsZSB2YWx1ZSk7DQorDQorCS8qKg0KKwkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5FMjE8L2I+PC9lbT4nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPHA+DQorCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPkUyMTwvZW0+JyBhdHRyaWJ1dGUgaXNuJ3QgY2xlYXIsDQorCSAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4NCisJICogPC9wPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+RTIxPC9lbT4nIGF0dHJpYnV0ZS4NCisJICogQHNlZSAjc2V0RTIxKGRvdWJsZSkNCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLlZlY3RvclBhY2thZ2UjZ2V0RGVuZ3VlTW9kZWxIb3N0TGFibGVWYWx1ZV9FMjEoKQ0KKwkgKiBAbW9kZWwNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJZG91YmxlIGdldEUyMSgpOw0KKw0KKwkvKioNCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbEhvc3RMYWJsZVZhbHVlI2dldEUyMSA8ZW0+RTIxPC9lbT59JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5FMjE8L2VtPicgYXR0cmlidXRlLg0KKwkgKiBAc2VlICNnZXRFMjEoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwl2b2lkIHNldEUyMShkb3VibGUgdmFsdWUpOw0KKw0KKwkvKioNCisJICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+RTIzPC9iPjwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDxwPg0KKwkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5FMjM8L2VtPicgYXR0cmlidXRlIGlzbid0IGNsZWFyLA0KKwkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uDQorCSAqIDwvcD4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPkUyMzwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIEBzZWUgI3NldEUyMyhkb3VibGUpDQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5WZWN0b3JQYWNrYWdlI2dldERlbmd1ZU1vZGVsSG9zdExhYmxlVmFsdWVfRTIzKCkNCisJICogQG1vZGVsDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCWRvdWJsZSBnZXRFMjMoKTsNCisNCisJLyoqDQorCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWxIb3N0TGFibGVWYWx1ZSNnZXRFMjMgPGVtPkUyMzwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+RTIzPC9lbT4nIGF0dHJpYnV0ZS4NCisJICogQHNlZSAjZ2V0RTIzKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJdm9pZCBzZXRFMjMoZG91YmxlIHZhbHVlKTsNCisNCisJLyoqDQorCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPkUyNDwvYj48L2VtPicgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8cD4NCisJICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+RTI0PC9lbT4nIGF0dHJpYnV0ZSBpc24ndCBjbGVhciwNCisJICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLg0KKwkgKiA8L3A+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5FMjQ8L2VtPicgYXR0cmlidXRlLg0KKwkgKiBAc2VlICNzZXRFMjQoZG91YmxlKQ0KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuVmVjdG9yUGFja2FnZSNnZXREZW5ndWVNb2RlbEhvc3RMYWJsZVZhbHVlX0UyNCgpDQorCSAqIEBtb2RlbA0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlkb3VibGUgZ2V0RTI0KCk7DQorDQorCS8qKg0KKwkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLkRlbmd1ZU1vZGVsSG9zdExhYmxlVmFsdWUjZ2V0RTI0IDxlbT5FMjQ8L2VtPn0nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPkUyNDwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIEBzZWUgI2dldEUyNCgpDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXZvaWQgc2V0RTI0KGRvdWJsZSB2YWx1ZSk7DQorDQorCS8qKg0KKwkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5FMzE8L2I+PC9lbT4nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPHA+DQorCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPkUzMTwvZW0+JyBhdHRyaWJ1dGUgaXNuJ3QgY2xlYXIsDQorCSAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4NCisJICogPC9wPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+RTMxPC9lbT4nIGF0dHJpYnV0ZS4NCisJICogQHNlZSAjc2V0RTMxKGRvdWJsZSkNCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLlZlY3RvclBhY2thZ2UjZ2V0RGVuZ3VlTW9kZWxIb3N0TGFibGVWYWx1ZV9FMzEoKQ0KKwkgKiBAbW9kZWwNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJZG91YmxlIGdldEUzMSgpOw0KKw0KKwkvKioNCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbEhvc3RMYWJsZVZhbHVlI2dldEUzMSA8ZW0+RTMxPC9lbT59JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5FMzE8L2VtPicgYXR0cmlidXRlLg0KKwkgKiBAc2VlICNnZXRFMzEoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwl2b2lkIHNldEUzMShkb3VibGUgdmFsdWUpOw0KKw0KKwkvKioNCisJICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+RTMyPC9iPjwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDxwPg0KKwkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5FMzI8L2VtPicgYXR0cmlidXRlIGlzbid0IGNsZWFyLA0KKwkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uDQorCSAqIDwvcD4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPkUzMjwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIEBzZWUgI3NldEUzMihkb3VibGUpDQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5WZWN0b3JQYWNrYWdlI2dldERlbmd1ZU1vZGVsSG9zdExhYmxlVmFsdWVfRTMyKCkNCisJICogQG1vZGVsDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCWRvdWJsZSBnZXRFMzIoKTsNCisNCisJLyoqDQorCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWxIb3N0TGFibGVWYWx1ZSNnZXRFMzIgPGVtPkUzMjwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+RTMyPC9lbT4nIGF0dHJpYnV0ZS4NCisJICogQHNlZSAjZ2V0RTMyKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJdm9pZCBzZXRFMzIoZG91YmxlIHZhbHVlKTsNCisNCisJLyoqDQorCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPkUzNDwvYj48L2VtPicgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8cD4NCisJICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+RTM0PC9lbT4nIGF0dHJpYnV0ZSBpc24ndCBjbGVhciwNCisJICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLg0KKwkgKiA8L3A+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5FMzQ8L2VtPicgYXR0cmlidXRlLg0KKwkgKiBAc2VlICNzZXRFMzQoZG91YmxlKQ0KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuVmVjdG9yUGFja2FnZSNnZXREZW5ndWVNb2RlbEhvc3RMYWJsZVZhbHVlX0UzNCgpDQorCSAqIEBtb2RlbA0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlkb3VibGUgZ2V0RTM0KCk7DQorDQorCS8qKg0KKwkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLkRlbmd1ZU1vZGVsSG9zdExhYmxlVmFsdWUjZ2V0RTM0IDxlbT5FMzQ8L2VtPn0nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPkUzNDwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIEBzZWUgI2dldEUzNCgpDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXZvaWQgc2V0RTM0KGRvdWJsZSB2YWx1ZSk7DQorDQorCS8qKg0KKwkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5FNDE8L2I+PC9lbT4nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPHA+DQorCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPkU0MTwvZW0+JyBhdHRyaWJ1dGUgaXNuJ3QgY2xlYXIsDQorCSAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4NCisJICogPC9wPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+RTQxPC9lbT4nIGF0dHJpYnV0ZS4NCisJICogQHNlZSAjc2V0RTQxKGRvdWJsZSkNCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLlZlY3RvclBhY2thZ2UjZ2V0RGVuZ3VlTW9kZWxIb3N0TGFibGVWYWx1ZV9FNDEoKQ0KKwkgKiBAbW9kZWwNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJZG91YmxlIGdldEU0MSgpOw0KKw0KKwkvKioNCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbEhvc3RMYWJsZVZhbHVlI2dldEU0MSA8ZW0+RTQxPC9lbT59JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5FNDE8L2VtPicgYXR0cmlidXRlLg0KKwkgKiBAc2VlICNnZXRFNDEoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwl2b2lkIHNldEU0MShkb3VibGUgdmFsdWUpOw0KKw0KKwkvKioNCisJICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+RTQyPC9iPjwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDxwPg0KKwkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5FNDI8L2VtPicgYXR0cmlidXRlIGlzbid0IGNsZWFyLA0KKwkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uDQorCSAqIDwvcD4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPkU0MjwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIEBzZWUgI3NldEU0Mihkb3VibGUpDQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5WZWN0b3JQYWNrYWdlI2dldERlbmd1ZU1vZGVsSG9zdExhYmxlVmFsdWVfRTQyKCkNCisJICogQG1vZGVsDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCWRvdWJsZSBnZXRFNDIoKTsNCisNCisJLyoqDQorCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWxIb3N0TGFibGVWYWx1ZSNnZXRFNDIgPGVtPkU0MjwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+RTQyPC9lbT4nIGF0dHJpYnV0ZS4NCisJICogQHNlZSAjZ2V0RTQyKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJdm9pZCBzZXRFNDIoZG91YmxlIHZhbHVlKTsNCisNCisJLyoqDQorCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPkU0MzwvYj48L2VtPicgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8cD4NCisJICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+RTQzPC9lbT4nIGF0dHJpYnV0ZSBpc24ndCBjbGVhciwNCisJICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLg0KKwkgKiA8L3A+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5FNDM8L2VtPicgYXR0cmlidXRlLg0KKwkgKiBAc2VlICNzZXRFNDMoZG91YmxlKQ0KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuVmVjdG9yUGFja2FnZSNnZXREZW5ndWVNb2RlbEhvc3RMYWJsZVZhbHVlX0U0MygpDQorCSAqIEBtb2RlbA0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlkb3VibGUgZ2V0RTQzKCk7DQorDQorCS8qKg0KKwkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLkRlbmd1ZU1vZGVsSG9zdExhYmxlVmFsdWUjZ2V0RTQzIDxlbT5FNDM8L2VtPn0nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPkU0MzwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIEBzZWUgI2dldEU0MygpDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXZvaWQgc2V0RTQzKGRvdWJsZSB2YWx1ZSk7DQorDQorCS8qKg0KKwkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5JMTI8L2I+PC9lbT4nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPHA+DQorCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPkkxMjwvZW0+JyBhdHRyaWJ1dGUgaXNuJ3QgY2xlYXIsDQorCSAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4NCisJICogPC9wPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+STEyPC9lbT4nIGF0dHJpYnV0ZS4NCisJICogQHNlZSAjc2V0STEyKGRvdWJsZSkNCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLlZlY3RvclBhY2thZ2UjZ2V0RGVuZ3VlTW9kZWxIb3N0TGFibGVWYWx1ZV9JMTIoKQ0KKwkgKiBAbW9kZWwNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJZG91YmxlIGdldEkxMigpOw0KKw0KKwkvKioNCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbEhvc3RMYWJsZVZhbHVlI2dldEkxMiA8ZW0+STEyPC9lbT59JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5JMTI8L2VtPicgYXR0cmlidXRlLg0KKwkgKiBAc2VlICNnZXRJMTIoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwl2b2lkIHNldEkxMihkb3VibGUgdmFsdWUpOw0KKw0KKwkvKioNCisJICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+STEzPC9iPjwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDxwPg0KKwkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5JMTM8L2VtPicgYXR0cmlidXRlIGlzbid0IGNsZWFyLA0KKwkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uDQorCSAqIDwvcD4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPkkxMzwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIEBzZWUgI3NldEkxMyhkb3VibGUpDQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5WZWN0b3JQYWNrYWdlI2dldERlbmd1ZU1vZGVsSG9zdExhYmxlVmFsdWVfSTEzKCkNCisJICogQG1vZGVsDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCWRvdWJsZSBnZXRJMTMoKTsNCisNCisJLyoqDQorCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWxIb3N0TGFibGVWYWx1ZSNnZXRJMTMgPGVtPkkxMzwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+STEzPC9lbT4nIGF0dHJpYnV0ZS4NCisJICogQHNlZSAjZ2V0STEzKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJdm9pZCBzZXRJMTMoZG91YmxlIHZhbHVlKTsNCisNCisJLyoqDQorCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPkkxNDwvYj48L2VtPicgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8cD4NCisJICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+STE0PC9lbT4nIGF0dHJpYnV0ZSBpc24ndCBjbGVhciwNCisJICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLg0KKwkgKiA8L3A+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5JMTQ8L2VtPicgYXR0cmlidXRlLg0KKwkgKiBAc2VlICNzZXRJMTQoZG91YmxlKQ0KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuVmVjdG9yUGFja2FnZSNnZXREZW5ndWVNb2RlbEhvc3RMYWJsZVZhbHVlX0kxNCgpDQorCSAqIEBtb2RlbA0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlkb3VibGUgZ2V0STE0KCk7DQorDQorCS8qKg0KKwkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLkRlbmd1ZU1vZGVsSG9zdExhYmxlVmFsdWUjZ2V0STE0IDxlbT5JMTQ8L2VtPn0nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPkkxNDwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIEBzZWUgI2dldEkxNCgpDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXZvaWQgc2V0STE0KGRvdWJsZSB2YWx1ZSk7DQorDQorCS8qKg0KKwkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5JMjE8L2I+PC9lbT4nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPHA+DQorCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPkkyMTwvZW0+JyBhdHRyaWJ1dGUgaXNuJ3QgY2xlYXIsDQorCSAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4NCisJICogPC9wPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+STIxPC9lbT4nIGF0dHJpYnV0ZS4NCisJICogQHNlZSAjc2V0STIxKGRvdWJsZSkNCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLlZlY3RvclBhY2thZ2UjZ2V0RGVuZ3VlTW9kZWxIb3N0TGFibGVWYWx1ZV9JMjEoKQ0KKwkgKiBAbW9kZWwNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJZG91YmxlIGdldEkyMSgpOw0KKw0KKwkvKioNCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbEhvc3RMYWJsZVZhbHVlI2dldEkyMSA8ZW0+STIxPC9lbT59JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5JMjE8L2VtPicgYXR0cmlidXRlLg0KKwkgKiBAc2VlICNnZXRJMjEoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwl2b2lkIHNldEkyMShkb3VibGUgdmFsdWUpOw0KKw0KKwkvKioNCisJICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+STIzPC9iPjwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDxwPg0KKwkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5JMjM8L2VtPicgYXR0cmlidXRlIGlzbid0IGNsZWFyLA0KKwkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uDQorCSAqIDwvcD4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPkkyMzwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIEBzZWUgI3NldEkyMyhkb3VibGUpDQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5WZWN0b3JQYWNrYWdlI2dldERlbmd1ZU1vZGVsSG9zdExhYmxlVmFsdWVfSTIzKCkNCisJICogQG1vZGVsDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCWRvdWJsZSBnZXRJMjMoKTsNCisNCisJLyoqDQorCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWxIb3N0TGFibGVWYWx1ZSNnZXRJMjMgPGVtPkkyMzwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+STIzPC9lbT4nIGF0dHJpYnV0ZS4NCisJICogQHNlZSAjZ2V0STIzKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJdm9pZCBzZXRJMjMoZG91YmxlIHZhbHVlKTsNCisNCisJLyoqDQorCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPkkyNDwvYj48L2VtPicgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8cD4NCisJICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+STI0PC9lbT4nIGF0dHJpYnV0ZSBpc24ndCBjbGVhciwNCisJICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLg0KKwkgKiA8L3A+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5JMjQ8L2VtPicgYXR0cmlidXRlLg0KKwkgKiBAc2VlICNzZXRJMjQoZG91YmxlKQ0KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuVmVjdG9yUGFja2FnZSNnZXREZW5ndWVNb2RlbEhvc3RMYWJsZVZhbHVlX0kyNCgpDQorCSAqIEBtb2RlbA0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlkb3VibGUgZ2V0STI0KCk7DQorDQorCS8qKg0KKwkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLkRlbmd1ZU1vZGVsSG9zdExhYmxlVmFsdWUjZ2V0STI0IDxlbT5JMjQ8L2VtPn0nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPkkyNDwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIEBzZWUgI2dldEkyNCgpDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXZvaWQgc2V0STI0KGRvdWJsZSB2YWx1ZSk7DQorDQorCS8qKg0KKwkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5JMzE8L2I+PC9lbT4nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPHA+DQorCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPkkzMTwvZW0+JyBhdHRyaWJ1dGUgaXNuJ3QgY2xlYXIsDQorCSAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4NCisJICogPC9wPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+STMxPC9lbT4nIGF0dHJpYnV0ZS4NCisJICogQHNlZSAjc2V0STMxKGRvdWJsZSkNCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLlZlY3RvclBhY2thZ2UjZ2V0RGVuZ3VlTW9kZWxIb3N0TGFibGVWYWx1ZV9JMzEoKQ0KKwkgKiBAbW9kZWwNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJZG91YmxlIGdldEkzMSgpOw0KKw0KKwkvKioNCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbEhvc3RMYWJsZVZhbHVlI2dldEkzMSA8ZW0+STMxPC9lbT59JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5JMzE8L2VtPicgYXR0cmlidXRlLg0KKwkgKiBAc2VlICNnZXRJMzEoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwl2b2lkIHNldEkzMShkb3VibGUgdmFsdWUpOw0KKw0KKwkvKioNCisJICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+STMyPC9iPjwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDxwPg0KKwkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5JMzI8L2VtPicgYXR0cmlidXRlIGlzbid0IGNsZWFyLA0KKwkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uDQorCSAqIDwvcD4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPkkzMjwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIEBzZWUgI3NldEkzMihkb3VibGUpDQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5WZWN0b3JQYWNrYWdlI2dldERlbmd1ZU1vZGVsSG9zdExhYmxlVmFsdWVfSTMyKCkNCisJICogQG1vZGVsDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCWRvdWJsZSBnZXRJMzIoKTsNCisNCisJLyoqDQorCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWxIb3N0TGFibGVWYWx1ZSNnZXRJMzIgPGVtPkkzMjwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+STMyPC9lbT4nIGF0dHJpYnV0ZS4NCisJICogQHNlZSAjZ2V0STMyKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJdm9pZCBzZXRJMzIoZG91YmxlIHZhbHVlKTsNCisNCisJLyoqDQorCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPkkzNDwvYj48L2VtPicgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8cD4NCisJICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+STM0PC9lbT4nIGF0dHJpYnV0ZSBpc24ndCBjbGVhciwNCisJICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLg0KKwkgKiA8L3A+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5JMzQ8L2VtPicgYXR0cmlidXRlLg0KKwkgKiBAc2VlICNzZXRJMzQoZG91YmxlKQ0KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuVmVjdG9yUGFja2FnZSNnZXREZW5ndWVNb2RlbEhvc3RMYWJsZVZhbHVlX0kzNCgpDQorCSAqIEBtb2RlbA0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlkb3VibGUgZ2V0STM0KCk7DQorDQorCS8qKg0KKwkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLkRlbmd1ZU1vZGVsSG9zdExhYmxlVmFsdWUjZ2V0STM0IDxlbT5JMzQ8L2VtPn0nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPkkzNDwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIEBzZWUgI2dldEkzNCgpDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXZvaWQgc2V0STM0KGRvdWJsZSB2YWx1ZSk7DQorDQorCS8qKg0KKwkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5JNDE8L2I+PC9lbT4nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPHA+DQorCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPkk0MTwvZW0+JyBhdHRyaWJ1dGUgaXNuJ3QgY2xlYXIsDQorCSAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4NCisJICogPC9wPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+STQxPC9lbT4nIGF0dHJpYnV0ZS4NCisJICogQHNlZSAjc2V0STQxKGRvdWJsZSkNCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLlZlY3RvclBhY2thZ2UjZ2V0RGVuZ3VlTW9kZWxIb3N0TGFibGVWYWx1ZV9JNDEoKQ0KKwkgKiBAbW9kZWwNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJZG91YmxlIGdldEk0MSgpOw0KKw0KKwkvKioNCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbEhvc3RMYWJsZVZhbHVlI2dldEk0MSA8ZW0+STQxPC9lbT59JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5JNDE8L2VtPicgYXR0cmlidXRlLg0KKwkgKiBAc2VlICNnZXRJNDEoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwl2b2lkIHNldEk0MShkb3VibGUgdmFsdWUpOw0KKw0KKwkvKioNCisJICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+STQyPC9iPjwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDxwPg0KKwkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5JNDI8L2VtPicgYXR0cmlidXRlIGlzbid0IGNsZWFyLA0KKwkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uDQorCSAqIDwvcD4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPkk0MjwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIEBzZWUgI3NldEk0Mihkb3VibGUpDQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5WZWN0b3JQYWNrYWdlI2dldERlbmd1ZU1vZGVsSG9zdExhYmxlVmFsdWVfSTQyKCkNCisJICogQG1vZGVsDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCWRvdWJsZSBnZXRJNDIoKTsNCisNCisJLyoqDQorCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWxIb3N0TGFibGVWYWx1ZSNnZXRJNDIgPGVtPkk0MjwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+STQyPC9lbT4nIGF0dHJpYnV0ZS4NCisJICogQHNlZSAjZ2V0STQyKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJdm9pZCBzZXRJNDIoZG91YmxlIHZhbHVlKTsNCisNCisJLyoqDQorCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPkk0MzwvYj48L2VtPicgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8cD4NCisJICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+STQzPC9lbT4nIGF0dHJpYnV0ZSBpc24ndCBjbGVhciwNCisJICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLg0KKwkgKiA8L3A+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5JNDM8L2VtPicgYXR0cmlidXRlLg0KKwkgKiBAc2VlICNzZXRJNDMoZG91YmxlKQ0KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuVmVjdG9yUGFja2FnZSNnZXREZW5ndWVNb2RlbEhvc3RMYWJsZVZhbHVlX0k0MygpDQorCSAqIEBtb2RlbA0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlkb3VibGUgZ2V0STQzKCk7DQorDQorCS8qKg0KKwkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLkRlbmd1ZU1vZGVsSG9zdExhYmxlVmFsdWUjZ2V0STQzIDxlbT5JNDM8L2VtPn0nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPkk0MzwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIEBzZWUgI2dldEk0MygpDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXZvaWQgc2V0STQzKGRvdWJsZSB2YWx1ZSk7DQorDQorCS8qKg0KKwkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5SPC9iPjwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDxwPg0KKwkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5SPC9lbT4nIGF0dHJpYnV0ZSBpc24ndCBjbGVhciwNCisJICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLg0KKwkgKiA8L3A+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5SPC9lbT4nIGF0dHJpYnV0ZS4NCisJICogQHNlZSAjc2V0Uihkb3VibGUpDQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5WZWN0b3JQYWNrYWdlI2dldERlbmd1ZU1vZGVsSG9zdExhYmxlVmFsdWVfUigpDQorCSAqIEBtb2RlbA0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlkb3VibGUgZ2V0UigpOw0KKw0KKwkvKioNCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbEhvc3RMYWJsZVZhbHVlI2dldFIgPGVtPlI8L2VtPn0nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPlI8L2VtPicgYXR0cmlidXRlLg0KKwkgKiBAc2VlICNnZXRSKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJdm9pZCBzZXRSKGRvdWJsZSB2YWx1ZSk7DQorDQorCS8qKg0KKwkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5JbmNpZGVuY2UxPC9iPjwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDxwPg0KKwkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5JbmNpZGVuY2UxPC9lbT4nIGF0dHJpYnV0ZSBpc24ndCBjbGVhciwNCisJICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLg0KKwkgKiA8L3A+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5JbmNpZGVuY2UxPC9lbT4nIGF0dHJpYnV0ZS4NCisJICogQHNlZSAjc2V0SW5jaWRlbmNlMShkb3VibGUpDQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5WZWN0b3JQYWNrYWdlI2dldERlbmd1ZU1vZGVsSG9zdExhYmxlVmFsdWVfSW5jaWRlbmNlMSgpDQorCSAqIEBtb2RlbA0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlkb3VibGUgZ2V0SW5jaWRlbmNlMSgpOw0KKw0KKwkvKioNCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbEhvc3RMYWJsZVZhbHVlI2dldEluY2lkZW5jZTEgPGVtPkluY2lkZW5jZTE8L2VtPn0nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPkluY2lkZW5jZTE8L2VtPicgYXR0cmlidXRlLg0KKwkgKiBAc2VlICNnZXRJbmNpZGVuY2UxKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJdm9pZCBzZXRJbmNpZGVuY2UxKGRvdWJsZSB2YWx1ZSk7DQorDQorCS8qKg0KKwkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5JbmNpZGVuY2UyPC9iPjwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDxwPg0KKwkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5JbmNpZGVuY2UyPC9lbT4nIGF0dHJpYnV0ZSBpc24ndCBjbGVhciwNCisJICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLg0KKwkgKiA8L3A+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5JbmNpZGVuY2UyPC9lbT4nIGF0dHJpYnV0ZS4NCisJICogQHNlZSAjc2V0SW5jaWRlbmNlMihkb3VibGUpDQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5WZWN0b3JQYWNrYWdlI2dldERlbmd1ZU1vZGVsSG9zdExhYmxlVmFsdWVfSW5jaWRlbmNlMigpDQorCSAqIEBtb2RlbA0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlkb3VibGUgZ2V0SW5jaWRlbmNlMigpOw0KKw0KKwkvKioNCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbEhvc3RMYWJsZVZhbHVlI2dldEluY2lkZW5jZTIgPGVtPkluY2lkZW5jZTI8L2VtPn0nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPkluY2lkZW5jZTI8L2VtPicgYXR0cmlidXRlLg0KKwkgKiBAc2VlICNnZXRJbmNpZGVuY2UyKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJdm9pZCBzZXRJbmNpZGVuY2UyKGRvdWJsZSB2YWx1ZSk7DQorDQorCS8qKg0KKwkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5JbmNpZGVuY2UzPC9iPjwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDxwPg0KKwkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5JbmNpZGVuY2UzPC9lbT4nIGF0dHJpYnV0ZSBpc24ndCBjbGVhciwNCisJICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLg0KKwkgKiA8L3A+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5JbmNpZGVuY2UzPC9lbT4nIGF0dHJpYnV0ZS4NCisJICogQHNlZSAjc2V0SW5jaWRlbmNlMyhkb3VibGUpDQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5WZWN0b3JQYWNrYWdlI2dldERlbmd1ZU1vZGVsSG9zdExhYmxlVmFsdWVfSW5jaWRlbmNlMygpDQorCSAqIEBtb2RlbA0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlkb3VibGUgZ2V0SW5jaWRlbmNlMygpOw0KKw0KKwkvKioNCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbEhvc3RMYWJsZVZhbHVlI2dldEluY2lkZW5jZTMgPGVtPkluY2lkZW5jZTM8L2VtPn0nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPkluY2lkZW5jZTM8L2VtPicgYXR0cmlidXRlLg0KKwkgKiBAc2VlICNnZXRJbmNpZGVuY2UzKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJdm9pZCBzZXRJbmNpZGVuY2UzKGRvdWJsZSB2YWx1ZSk7DQorDQorCS8qKg0KKwkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5JbmNpZGVuY2U0PC9iPjwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDxwPg0KKwkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5JbmNpZGVuY2U0PC9lbT4nIGF0dHJpYnV0ZSBpc24ndCBjbGVhciwNCisJICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLg0KKwkgKiA8L3A+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5JbmNpZGVuY2U0PC9lbT4nIGF0dHJpYnV0ZS4NCisJICogQHNlZSAjc2V0SW5jaWRlbmNlNChkb3VibGUpDQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5WZWN0b3JQYWNrYWdlI2dldERlbmd1ZU1vZGVsSG9zdExhYmxlVmFsdWVfSW5jaWRlbmNlNCgpDQorCSAqIEBtb2RlbA0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlkb3VibGUgZ2V0SW5jaWRlbmNlNCgpOw0KKw0KKwkvKioNCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbEhvc3RMYWJsZVZhbHVlI2dldEluY2lkZW5jZTQgPGVtPkluY2lkZW5jZTQ8L2VtPn0nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPkluY2lkZW5jZTQ8L2VtPicgYXR0cmlidXRlLg0KKwkgKiBAc2VlICNnZXRJbmNpZGVuY2U0KCkNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJdm9pZCBzZXRJbmNpZGVuY2U0KGRvdWJsZSB2YWx1ZSk7DQorDQorCS8qKg0KKwkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5JbmNpZGVuY2UxMjwvYj48L2VtPicgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8cD4NCisJICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+SW5jaWRlbmNlMTI8L2VtPicgYXR0cmlidXRlIGlzbid0IGNsZWFyLA0KKwkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uDQorCSAqIDwvcD4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPkluY2lkZW5jZTEyPC9lbT4nIGF0dHJpYnV0ZS4NCisJICogQHNlZSAjc2V0SW5jaWRlbmNlMTIoZG91YmxlKQ0KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuVmVjdG9yUGFja2FnZSNnZXREZW5ndWVNb2RlbEhvc3RMYWJsZVZhbHVlX0luY2lkZW5jZTEyKCkNCisJICogQG1vZGVsDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCWRvdWJsZSBnZXRJbmNpZGVuY2UxMigpOw0KKw0KKwkvKioNCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbEhvc3RMYWJsZVZhbHVlI2dldEluY2lkZW5jZTEyIDxlbT5JbmNpZGVuY2UxMjwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+SW5jaWRlbmNlMTI8L2VtPicgYXR0cmlidXRlLg0KKwkgKiBAc2VlICNnZXRJbmNpZGVuY2UxMigpDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXZvaWQgc2V0SW5jaWRlbmNlMTIoZG91YmxlIHZhbHVlKTsNCisNCisJLyoqDQorCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPkluY2lkZW5jZTIxPC9iPjwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDxwPg0KKwkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5JbmNpZGVuY2UyMTwvZW0+JyBhdHRyaWJ1dGUgaXNuJ3QgY2xlYXIsDQorCSAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4NCisJICogPC9wPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+SW5jaWRlbmNlMjE8L2VtPicgYXR0cmlidXRlLg0KKwkgKiBAc2VlICNzZXRJbmNpZGVuY2UyMShkb3VibGUpDQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5WZWN0b3JQYWNrYWdlI2dldERlbmd1ZU1vZGVsSG9zdExhYmxlVmFsdWVfSW5jaWRlbmNlMjEoKQ0KKwkgKiBAbW9kZWwNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJZG91YmxlIGdldEluY2lkZW5jZTIxKCk7DQorDQorCS8qKg0KKwkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLkRlbmd1ZU1vZGVsSG9zdExhYmxlVmFsdWUjZ2V0SW5jaWRlbmNlMjEgPGVtPkluY2lkZW5jZTIxPC9lbT59JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5JbmNpZGVuY2UyMTwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIEBzZWUgI2dldEluY2lkZW5jZTIxKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJdm9pZCBzZXRJbmNpZGVuY2UyMShkb3VibGUgdmFsdWUpOw0KKw0KKwkvKioNCisJICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+SW5jaWRlbmNlMzE8L2I+PC9lbT4nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPHA+DQorCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPkluY2lkZW5jZTMxPC9lbT4nIGF0dHJpYnV0ZSBpc24ndCBjbGVhciwNCisJICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLg0KKwkgKiA8L3A+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5JbmNpZGVuY2UzMTwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIEBzZWUgI3NldEluY2lkZW5jZTMxKGRvdWJsZSkNCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLlZlY3RvclBhY2thZ2UjZ2V0RGVuZ3VlTW9kZWxIb3N0TGFibGVWYWx1ZV9JbmNpZGVuY2UzMSgpDQorCSAqIEBtb2RlbA0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlkb3VibGUgZ2V0SW5jaWRlbmNlMzEoKTsNCisNCisJLyoqDQorCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWxIb3N0TGFibGVWYWx1ZSNnZXRJbmNpZGVuY2UzMSA8ZW0+SW5jaWRlbmNlMzE8L2VtPn0nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPkluY2lkZW5jZTMxPC9lbT4nIGF0dHJpYnV0ZS4NCisJICogQHNlZSAjZ2V0SW5jaWRlbmNlMzEoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwl2b2lkIHNldEluY2lkZW5jZTMxKGRvdWJsZSB2YWx1ZSk7DQorDQorCS8qKg0KKwkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5JbmNpZGVuY2U0MTwvYj48L2VtPicgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8cD4NCisJICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+SW5jaWRlbmNlNDE8L2VtPicgYXR0cmlidXRlIGlzbid0IGNsZWFyLA0KKwkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uDQorCSAqIDwvcD4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPkluY2lkZW5jZTQxPC9lbT4nIGF0dHJpYnV0ZS4NCisJICogQHNlZSAjc2V0SW5jaWRlbmNlNDEoZG91YmxlKQ0KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuVmVjdG9yUGFja2FnZSNnZXREZW5ndWVNb2RlbEhvc3RMYWJsZVZhbHVlX0luY2lkZW5jZTQxKCkNCisJICogQG1vZGVsDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCWRvdWJsZSBnZXRJbmNpZGVuY2U0MSgpOw0KKw0KKwkvKioNCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbEhvc3RMYWJsZVZhbHVlI2dldEluY2lkZW5jZTQxIDxlbT5JbmNpZGVuY2U0MTwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+SW5jaWRlbmNlNDE8L2VtPicgYXR0cmlidXRlLg0KKwkgKiBAc2VlICNnZXRJbmNpZGVuY2U0MSgpDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXZvaWQgc2V0SW5jaWRlbmNlNDEoZG91YmxlIHZhbHVlKTsNCisNCisJLyoqDQorCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPkluY2lkZW5jZTEzPC9iPjwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDxwPg0KKwkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5JbmNpZGVuY2UxMzwvZW0+JyBhdHRyaWJ1dGUgaXNuJ3QgY2xlYXIsDQorCSAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4NCisJICogPC9wPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+SW5jaWRlbmNlMTM8L2VtPicgYXR0cmlidXRlLg0KKwkgKiBAc2VlICNzZXRJbmNpZGVuY2UxMyhkb3VibGUpDQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5WZWN0b3JQYWNrYWdlI2dldERlbmd1ZU1vZGVsSG9zdExhYmxlVmFsdWVfSW5jaWRlbmNlMTMoKQ0KKwkgKiBAbW9kZWwNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJZG91YmxlIGdldEluY2lkZW5jZTEzKCk7DQorDQorCS8qKg0KKwkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLkRlbmd1ZU1vZGVsSG9zdExhYmxlVmFsdWUjZ2V0SW5jaWRlbmNlMTMgPGVtPkluY2lkZW5jZTEzPC9lbT59JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5JbmNpZGVuY2UxMzwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIEBzZWUgI2dldEluY2lkZW5jZTEzKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJdm9pZCBzZXRJbmNpZGVuY2UxMyhkb3VibGUgdmFsdWUpOw0KKw0KKwkvKioNCisJICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+SW5jaWRlbmNlMjM8L2I+PC9lbT4nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPHA+DQorCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPkluY2lkZW5jZTIzPC9lbT4nIGF0dHJpYnV0ZSBpc24ndCBjbGVhciwNCisJICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLg0KKwkgKiA8L3A+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5JbmNpZGVuY2UyMzwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIEBzZWUgI3NldEluY2lkZW5jZTIzKGRvdWJsZSkNCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLlZlY3RvclBhY2thZ2UjZ2V0RGVuZ3VlTW9kZWxIb3N0TGFibGVWYWx1ZV9JbmNpZGVuY2UyMygpDQorCSAqIEBtb2RlbA0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlkb3VibGUgZ2V0SW5jaWRlbmNlMjMoKTsNCisNCisJLyoqDQorCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWxIb3N0TGFibGVWYWx1ZSNnZXRJbmNpZGVuY2UyMyA8ZW0+SW5jaWRlbmNlMjM8L2VtPn0nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPkluY2lkZW5jZTIzPC9lbT4nIGF0dHJpYnV0ZS4NCisJICogQHNlZSAjZ2V0SW5jaWRlbmNlMjMoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwl2b2lkIHNldEluY2lkZW5jZTIzKGRvdWJsZSB2YWx1ZSk7DQorDQorCS8qKg0KKwkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5JbmNpZGVuY2UzMjwvYj48L2VtPicgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8cD4NCisJICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+SW5jaWRlbmNlMzI8L2VtPicgYXR0cmlidXRlIGlzbid0IGNsZWFyLA0KKwkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uDQorCSAqIDwvcD4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPkluY2lkZW5jZTMyPC9lbT4nIGF0dHJpYnV0ZS4NCisJICogQHNlZSAjc2V0SW5jaWRlbmNlMzIoZG91YmxlKQ0KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuVmVjdG9yUGFja2FnZSNnZXREZW5ndWVNb2RlbEhvc3RMYWJsZVZhbHVlX0luY2lkZW5jZTMyKCkNCisJICogQG1vZGVsDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCWRvdWJsZSBnZXRJbmNpZGVuY2UzMigpOw0KKw0KKwkvKioNCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbEhvc3RMYWJsZVZhbHVlI2dldEluY2lkZW5jZTMyIDxlbT5JbmNpZGVuY2UzMjwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+SW5jaWRlbmNlMzI8L2VtPicgYXR0cmlidXRlLg0KKwkgKiBAc2VlICNnZXRJbmNpZGVuY2UzMigpDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXZvaWQgc2V0SW5jaWRlbmNlMzIoZG91YmxlIHZhbHVlKTsNCisNCisJLyoqDQorCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPkluY2lkZW5jZTQyPC9iPjwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDxwPg0KKwkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5JbmNpZGVuY2U0MjwvZW0+JyBhdHRyaWJ1dGUgaXNuJ3QgY2xlYXIsDQorCSAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4NCisJICogPC9wPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+SW5jaWRlbmNlNDI8L2VtPicgYXR0cmlidXRlLg0KKwkgKiBAc2VlICNzZXRJbmNpZGVuY2U0Mihkb3VibGUpDQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5WZWN0b3JQYWNrYWdlI2dldERlbmd1ZU1vZGVsSG9zdExhYmxlVmFsdWVfSW5jaWRlbmNlNDIoKQ0KKwkgKiBAbW9kZWwNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJZG91YmxlIGdldEluY2lkZW5jZTQyKCk7DQorDQorCS8qKg0KKwkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLkRlbmd1ZU1vZGVsSG9zdExhYmxlVmFsdWUjZ2V0SW5jaWRlbmNlNDIgPGVtPkluY2lkZW5jZTQyPC9lbT59JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5JbmNpZGVuY2U0MjwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIEBzZWUgI2dldEluY2lkZW5jZTQyKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJdm9pZCBzZXRJbmNpZGVuY2U0Mihkb3VibGUgdmFsdWUpOw0KKw0KKwkvKioNCisJICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+SW5jaWRlbmNlMTQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPHA+DQorCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPkluY2lkZW5jZTE0PC9lbT4nIGF0dHJpYnV0ZSBpc24ndCBjbGVhciwNCisJICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLg0KKwkgKiA8L3A+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5JbmNpZGVuY2UxNDwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIEBzZWUgI3NldEluY2lkZW5jZTE0KGRvdWJsZSkNCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLlZlY3RvclBhY2thZ2UjZ2V0RGVuZ3VlTW9kZWxIb3N0TGFibGVWYWx1ZV9JbmNpZGVuY2UxNCgpDQorCSAqIEBtb2RlbA0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlkb3VibGUgZ2V0SW5jaWRlbmNlMTQoKTsNCisNCisJLyoqDQorCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWxIb3N0TGFibGVWYWx1ZSNnZXRJbmNpZGVuY2UxNCA8ZW0+SW5jaWRlbmNlMTQ8L2VtPn0nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPkluY2lkZW5jZTE0PC9lbT4nIGF0dHJpYnV0ZS4NCisJICogQHNlZSAjZ2V0SW5jaWRlbmNlMTQoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwl2b2lkIHNldEluY2lkZW5jZTE0KGRvdWJsZSB2YWx1ZSk7DQorDQorCS8qKg0KKwkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5JbmNpZGVuY2UyNDwvYj48L2VtPicgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8cD4NCisJICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+SW5jaWRlbmNlMjQ8L2VtPicgYXR0cmlidXRlIGlzbid0IGNsZWFyLA0KKwkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uDQorCSAqIDwvcD4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPkluY2lkZW5jZTI0PC9lbT4nIGF0dHJpYnV0ZS4NCisJICogQHNlZSAjc2V0SW5jaWRlbmNlMjQoZG91YmxlKQ0KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuVmVjdG9yUGFja2FnZSNnZXREZW5ndWVNb2RlbEhvc3RMYWJsZVZhbHVlX0luY2lkZW5jZTI0KCkNCisJICogQG1vZGVsDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCWRvdWJsZSBnZXRJbmNpZGVuY2UyNCgpOw0KKw0KKwkvKioNCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbEhvc3RMYWJsZVZhbHVlI2dldEluY2lkZW5jZTI0IDxlbT5JbmNpZGVuY2UyNDwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+SW5jaWRlbmNlMjQ8L2VtPicgYXR0cmlidXRlLg0KKwkgKiBAc2VlICNnZXRJbmNpZGVuY2UyNCgpDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXZvaWQgc2V0SW5jaWRlbmNlMjQoZG91YmxlIHZhbHVlKTsNCisNCisJLyoqDQorCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPkluY2lkZW5jZTM0PC9iPjwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDxwPg0KKwkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5JbmNpZGVuY2UzNDwvZW0+JyBhdHRyaWJ1dGUgaXNuJ3QgY2xlYXIsDQorCSAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4NCisJICogPC9wPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+SW5jaWRlbmNlMzQ8L2VtPicgYXR0cmlidXRlLg0KKwkgKiBAc2VlICNzZXRJbmNpZGVuY2UzNChkb3VibGUpDQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5WZWN0b3JQYWNrYWdlI2dldERlbmd1ZU1vZGVsSG9zdExhYmxlVmFsdWVfSW5jaWRlbmNlMzQoKQ0KKwkgKiBAbW9kZWwNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJZG91YmxlIGdldEluY2lkZW5jZTM0KCk7DQorDQorCS8qKg0KKwkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLkRlbmd1ZU1vZGVsSG9zdExhYmxlVmFsdWUjZ2V0SW5jaWRlbmNlMzQgPGVtPkluY2lkZW5jZTM0PC9lbT59JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5JbmNpZGVuY2UzNDwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIEBzZWUgI2dldEluY2lkZW5jZTM0KCkNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJdm9pZCBzZXRJbmNpZGVuY2UzNChkb3VibGUgdmFsdWUpOw0KKw0KKwkvKioNCisJICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+SW5jaWRlbmNlNDM8L2I+PC9lbT4nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPHA+DQorCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPkluY2lkZW5jZTQzPC9lbT4nIGF0dHJpYnV0ZSBpc24ndCBjbGVhciwNCisJICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLg0KKwkgKiA8L3A+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5JbmNpZGVuY2U0MzwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIEBzZWUgI3NldEluY2lkZW5jZTQzKGRvdWJsZSkNCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLlZlY3RvclBhY2thZ2UjZ2V0RGVuZ3VlTW9kZWxIb3N0TGFibGVWYWx1ZV9JbmNpZGVuY2U0MygpDQorCSAqIEBtb2RlbA0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlkb3VibGUgZ2V0SW5jaWRlbmNlNDMoKTsNCisNCisJLyoqDQorCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWxIb3N0TGFibGVWYWx1ZSNnZXRJbmNpZGVuY2U0MyA8ZW0+SW5jaWRlbmNlNDM8L2VtPn0nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPkluY2lkZW5jZTQzPC9lbT4nIGF0dHJpYnV0ZS4NCisJICogQHNlZSAjZ2V0SW5jaWRlbmNlNDMoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwl2b2lkIHNldEluY2lkZW5jZTQzKGRvdWJsZSB2YWx1ZSk7DQorDQorCS8qKg0KKwkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5EZWF0aHMxPC9iPjwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDxwPg0KKwkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5EZWF0aHMxPC9lbT4nIGF0dHJpYnV0ZSBpc24ndCBjbGVhciwNCisJICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLg0KKwkgKiA8L3A+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5EZWF0aHMxPC9lbT4nIGF0dHJpYnV0ZS4NCisJICogQHNlZSAjc2V0RGVhdGhzMShkb3VibGUpDQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5WZWN0b3JQYWNrYWdlI2dldERlbmd1ZU1vZGVsSG9zdExhYmxlVmFsdWVfRGVhdGhzMSgpDQorCSAqIEBtb2RlbA0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlkb3VibGUgZ2V0RGVhdGhzMSgpOw0KKw0KKwkvKioNCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbEhvc3RMYWJsZVZhbHVlI2dldERlYXRoczEgPGVtPkRlYXRoczE8L2VtPn0nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPkRlYXRoczE8L2VtPicgYXR0cmlidXRlLg0KKwkgKiBAc2VlICNnZXREZWF0aHMxKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJdm9pZCBzZXREZWF0aHMxKGRvdWJsZSB2YWx1ZSk7DQorDQorCS8qKg0KKwkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5EZWF0aHMyPC9iPjwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDxwPg0KKwkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5EZWF0aHMyPC9lbT4nIGF0dHJpYnV0ZSBpc24ndCBjbGVhciwNCisJICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLg0KKwkgKiA8L3A+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5EZWF0aHMyPC9lbT4nIGF0dHJpYnV0ZS4NCisJICogQHNlZSAjc2V0RGVhdGhzMihkb3VibGUpDQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5WZWN0b3JQYWNrYWdlI2dldERlbmd1ZU1vZGVsSG9zdExhYmxlVmFsdWVfRGVhdGhzMigpDQorCSAqIEBtb2RlbA0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlkb3VibGUgZ2V0RGVhdGhzMigpOw0KKw0KKwkvKioNCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbEhvc3RMYWJsZVZhbHVlI2dldERlYXRoczIgPGVtPkRlYXRoczI8L2VtPn0nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPkRlYXRoczI8L2VtPicgYXR0cmlidXRlLg0KKwkgKiBAc2VlICNnZXREZWF0aHMyKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJdm9pZCBzZXREZWF0aHMyKGRvdWJsZSB2YWx1ZSk7DQorDQorCS8qKg0KKwkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5EZWF0aHMzPC9iPjwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDxwPg0KKwkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5EZWF0aHMzPC9lbT4nIGF0dHJpYnV0ZSBpc24ndCBjbGVhciwNCisJICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLg0KKwkgKiA8L3A+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5EZWF0aHMzPC9lbT4nIGF0dHJpYnV0ZS4NCisJICogQHNlZSAjc2V0RGVhdGhzMyhkb3VibGUpDQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5WZWN0b3JQYWNrYWdlI2dldERlbmd1ZU1vZGVsSG9zdExhYmxlVmFsdWVfRGVhdGhzMygpDQorCSAqIEBtb2RlbA0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlkb3VibGUgZ2V0RGVhdGhzMygpOw0KKw0KKwkvKioNCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbEhvc3RMYWJsZVZhbHVlI2dldERlYXRoczMgPGVtPkRlYXRoczM8L2VtPn0nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPkRlYXRoczM8L2VtPicgYXR0cmlidXRlLg0KKwkgKiBAc2VlICNnZXREZWF0aHMzKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJdm9pZCBzZXREZWF0aHMzKGRvdWJsZSB2YWx1ZSk7DQorDQorCS8qKg0KKwkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5EZWF0aHM0PC9iPjwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDxwPg0KKwkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5EZWF0aHM0PC9lbT4nIGF0dHJpYnV0ZSBpc24ndCBjbGVhciwNCisJICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLg0KKwkgKiA8L3A+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5EZWF0aHM0PC9lbT4nIGF0dHJpYnV0ZS4NCisJICogQHNlZSAjc2V0RGVhdGhzNChkb3VibGUpDQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5WZWN0b3JQYWNrYWdlI2dldERlbmd1ZU1vZGVsSG9zdExhYmxlVmFsdWVfRGVhdGhzNCgpDQorCSAqIEBtb2RlbA0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlkb3VibGUgZ2V0RGVhdGhzNCgpOw0KKw0KKwkvKioNCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbEhvc3RMYWJsZVZhbHVlI2dldERlYXRoczQgPGVtPkRlYXRoczQ8L2VtPn0nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPkRlYXRoczQ8L2VtPicgYXR0cmlidXRlLg0KKwkgKiBAc2VlICNnZXREZWF0aHM0KCkNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJdm9pZCBzZXREZWF0aHM0KGRvdWJsZSB2YWx1ZSk7DQorDQorCS8qKg0KKwkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5EZWF0aHMxMjwvYj48L2VtPicgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8cD4NCisJICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+RGVhdGhzMTI8L2VtPicgYXR0cmlidXRlIGlzbid0IGNsZWFyLA0KKwkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uDQorCSAqIDwvcD4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPkRlYXRoczEyPC9lbT4nIGF0dHJpYnV0ZS4NCisJICogQHNlZSAjc2V0RGVhdGhzMTIoZG91YmxlKQ0KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuVmVjdG9yUGFja2FnZSNnZXREZW5ndWVNb2RlbEhvc3RMYWJsZVZhbHVlX0RlYXRoczEyKCkNCisJICogQG1vZGVsDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCWRvdWJsZSBnZXREZWF0aHMxMigpOw0KKw0KKwkvKioNCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbEhvc3RMYWJsZVZhbHVlI2dldERlYXRoczEyIDxlbT5EZWF0aHMxMjwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+RGVhdGhzMTI8L2VtPicgYXR0cmlidXRlLg0KKwkgKiBAc2VlICNnZXREZWF0aHMxMigpDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXZvaWQgc2V0RGVhdGhzMTIoZG91YmxlIHZhbHVlKTsNCisNCisJLyoqDQorCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPkRlYXRoczIxPC9iPjwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDxwPg0KKwkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5EZWF0aHMyMTwvZW0+JyBhdHRyaWJ1dGUgaXNuJ3QgY2xlYXIsDQorCSAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4NCisJICogPC9wPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+RGVhdGhzMjE8L2VtPicgYXR0cmlidXRlLg0KKwkgKiBAc2VlICNzZXREZWF0aHMyMShkb3VibGUpDQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5WZWN0b3JQYWNrYWdlI2dldERlbmd1ZU1vZGVsSG9zdExhYmxlVmFsdWVfRGVhdGhzMjEoKQ0KKwkgKiBAbW9kZWwNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJZG91YmxlIGdldERlYXRoczIxKCk7DQorDQorCS8qKg0KKwkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLkRlbmd1ZU1vZGVsSG9zdExhYmxlVmFsdWUjZ2V0RGVhdGhzMjEgPGVtPkRlYXRoczIxPC9lbT59JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5EZWF0aHMyMTwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIEBzZWUgI2dldERlYXRoczIxKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJdm9pZCBzZXREZWF0aHMyMShkb3VibGUgdmFsdWUpOw0KKw0KKwkvKioNCisJICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+RGVhdGhzMzE8L2I+PC9lbT4nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPHA+DQorCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPkRlYXRoczMxPC9lbT4nIGF0dHJpYnV0ZSBpc24ndCBjbGVhciwNCisJICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLg0KKwkgKiA8L3A+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5EZWF0aHMzMTwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIEBzZWUgI3NldERlYXRoczMxKGRvdWJsZSkNCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLlZlY3RvclBhY2thZ2UjZ2V0RGVuZ3VlTW9kZWxIb3N0TGFibGVWYWx1ZV9EZWF0aHMzMSgpDQorCSAqIEBtb2RlbA0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlkb3VibGUgZ2V0RGVhdGhzMzEoKTsNCisNCisJLyoqDQorCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWxIb3N0TGFibGVWYWx1ZSNnZXREZWF0aHMzMSA8ZW0+RGVhdGhzMzE8L2VtPn0nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPkRlYXRoczMxPC9lbT4nIGF0dHJpYnV0ZS4NCisJICogQHNlZSAjZ2V0RGVhdGhzMzEoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwl2b2lkIHNldERlYXRoczMxKGRvdWJsZSB2YWx1ZSk7DQorDQorCS8qKg0KKwkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5EZWF0aHM0MTwvYj48L2VtPicgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8cD4NCisJICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+RGVhdGhzNDE8L2VtPicgYXR0cmlidXRlIGlzbid0IGNsZWFyLA0KKwkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uDQorCSAqIDwvcD4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPkRlYXRoczQxPC9lbT4nIGF0dHJpYnV0ZS4NCisJICogQHNlZSAjc2V0RGVhdGhzNDEoZG91YmxlKQ0KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuVmVjdG9yUGFja2FnZSNnZXREZW5ndWVNb2RlbEhvc3RMYWJsZVZhbHVlX0RlYXRoczQxKCkNCisJICogQG1vZGVsDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCWRvdWJsZSBnZXREZWF0aHM0MSgpOw0KKw0KKwkvKioNCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbEhvc3RMYWJsZVZhbHVlI2dldERlYXRoczQxIDxlbT5EZWF0aHM0MTwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+RGVhdGhzNDE8L2VtPicgYXR0cmlidXRlLg0KKwkgKiBAc2VlICNnZXREZWF0aHM0MSgpDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXZvaWQgc2V0RGVhdGhzNDEoZG91YmxlIHZhbHVlKTsNCisNCisJLyoqDQorCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPkRlYXRoczEzPC9iPjwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDxwPg0KKwkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5EZWF0aHMxMzwvZW0+JyBhdHRyaWJ1dGUgaXNuJ3QgY2xlYXIsDQorCSAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4NCisJICogPC9wPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+RGVhdGhzMTM8L2VtPicgYXR0cmlidXRlLg0KKwkgKiBAc2VlICNzZXREZWF0aHMxMyhkb3VibGUpDQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5WZWN0b3JQYWNrYWdlI2dldERlbmd1ZU1vZGVsSG9zdExhYmxlVmFsdWVfRGVhdGhzMTMoKQ0KKwkgKiBAbW9kZWwNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJZG91YmxlIGdldERlYXRoczEzKCk7DQorDQorCS8qKg0KKwkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLkRlbmd1ZU1vZGVsSG9zdExhYmxlVmFsdWUjZ2V0RGVhdGhzMTMgPGVtPkRlYXRoczEzPC9lbT59JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5EZWF0aHMxMzwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIEBzZWUgI2dldERlYXRoczEzKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJdm9pZCBzZXREZWF0aHMxMyhkb3VibGUgdmFsdWUpOw0KKw0KKwkvKioNCisJICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+RGVhdGhzMjM8L2I+PC9lbT4nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPHA+DQorCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPkRlYXRoczIzPC9lbT4nIGF0dHJpYnV0ZSBpc24ndCBjbGVhciwNCisJICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLg0KKwkgKiA8L3A+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5EZWF0aHMyMzwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIEBzZWUgI3NldERlYXRoczIzKGRvdWJsZSkNCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLlZlY3RvclBhY2thZ2UjZ2V0RGVuZ3VlTW9kZWxIb3N0TGFibGVWYWx1ZV9EZWF0aHMyMygpDQorCSAqIEBtb2RlbA0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlkb3VibGUgZ2V0RGVhdGhzMjMoKTsNCisNCisJLyoqDQorCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWxIb3N0TGFibGVWYWx1ZSNnZXREZWF0aHMyMyA8ZW0+RGVhdGhzMjM8L2VtPn0nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPkRlYXRoczIzPC9lbT4nIGF0dHJpYnV0ZS4NCisJICogQHNlZSAjZ2V0RGVhdGhzMjMoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwl2b2lkIHNldERlYXRoczIzKGRvdWJsZSB2YWx1ZSk7DQorDQorCS8qKg0KKwkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5EZWF0aHMzMjwvYj48L2VtPicgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8cD4NCisJICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+RGVhdGhzMzI8L2VtPicgYXR0cmlidXRlIGlzbid0IGNsZWFyLA0KKwkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uDQorCSAqIDwvcD4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPkRlYXRoczMyPC9lbT4nIGF0dHJpYnV0ZS4NCisJICogQHNlZSAjc2V0RGVhdGhzMzIoZG91YmxlKQ0KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuVmVjdG9yUGFja2FnZSNnZXREZW5ndWVNb2RlbEhvc3RMYWJsZVZhbHVlX0RlYXRoczMyKCkNCisJICogQG1vZGVsDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCWRvdWJsZSBnZXREZWF0aHMzMigpOw0KKw0KKwkvKioNCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbEhvc3RMYWJsZVZhbHVlI2dldERlYXRoczMyIDxlbT5EZWF0aHMzMjwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+RGVhdGhzMzI8L2VtPicgYXR0cmlidXRlLg0KKwkgKiBAc2VlICNnZXREZWF0aHMzMigpDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXZvaWQgc2V0RGVhdGhzMzIoZG91YmxlIHZhbHVlKTsNCisNCisJLyoqDQorCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPkRlYXRoczQyPC9iPjwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDxwPg0KKwkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5EZWF0aHM0MjwvZW0+JyBhdHRyaWJ1dGUgaXNuJ3QgY2xlYXIsDQorCSAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4NCisJICogPC9wPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+RGVhdGhzNDI8L2VtPicgYXR0cmlidXRlLg0KKwkgKiBAc2VlICNzZXREZWF0aHM0Mihkb3VibGUpDQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5WZWN0b3JQYWNrYWdlI2dldERlbmd1ZU1vZGVsSG9zdExhYmxlVmFsdWVfRGVhdGhzNDIoKQ0KKwkgKiBAbW9kZWwNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJZG91YmxlIGdldERlYXRoczQyKCk7DQorDQorCS8qKg0KKwkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLkRlbmd1ZU1vZGVsSG9zdExhYmxlVmFsdWUjZ2V0RGVhdGhzNDIgPGVtPkRlYXRoczQyPC9lbT59JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5EZWF0aHM0MjwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIEBzZWUgI2dldERlYXRoczQyKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJdm9pZCBzZXREZWF0aHM0Mihkb3VibGUgdmFsdWUpOw0KKw0KKwkvKioNCisJICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+RGVhdGhzMTQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPHA+DQorCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPkRlYXRoczE0PC9lbT4nIGF0dHJpYnV0ZSBpc24ndCBjbGVhciwNCisJICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLg0KKwkgKiA8L3A+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5EZWF0aHMxNDwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIEBzZWUgI3NldERlYXRoczE0KGRvdWJsZSkNCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLlZlY3RvclBhY2thZ2UjZ2V0RGVuZ3VlTW9kZWxIb3N0TGFibGVWYWx1ZV9EZWF0aHMxNCgpDQorCSAqIEBtb2RlbA0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlkb3VibGUgZ2V0RGVhdGhzMTQoKTsNCisNCisJLyoqDQorCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWxIb3N0TGFibGVWYWx1ZSNnZXREZWF0aHMxNCA8ZW0+RGVhdGhzMTQ8L2VtPn0nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPkRlYXRoczE0PC9lbT4nIGF0dHJpYnV0ZS4NCisJICogQHNlZSAjZ2V0RGVhdGhzMTQoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwl2b2lkIHNldERlYXRoczE0KGRvdWJsZSB2YWx1ZSk7DQorDQorCS8qKg0KKwkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5EZWF0aHMyNDwvYj48L2VtPicgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8cD4NCisJICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+RGVhdGhzMjQ8L2VtPicgYXR0cmlidXRlIGlzbid0IGNsZWFyLA0KKwkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uDQorCSAqIDwvcD4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPkRlYXRoczI0PC9lbT4nIGF0dHJpYnV0ZS4NCisJICogQHNlZSAjc2V0RGVhdGhzMjQoZG91YmxlKQ0KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuVmVjdG9yUGFja2FnZSNnZXREZW5ndWVNb2RlbEhvc3RMYWJsZVZhbHVlX0RlYXRoczI0KCkNCisJICogQG1vZGVsDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCWRvdWJsZSBnZXREZWF0aHMyNCgpOw0KKw0KKwkvKioNCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbEhvc3RMYWJsZVZhbHVlI2dldERlYXRoczI0IDxlbT5EZWF0aHMyNDwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+RGVhdGhzMjQ8L2VtPicgYXR0cmlidXRlLg0KKwkgKiBAc2VlICNnZXREZWF0aHMyNCgpDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXZvaWQgc2V0RGVhdGhzMjQoZG91YmxlIHZhbHVlKTsNCisNCisJLyoqDQorCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPkRlYXRoczM0PC9iPjwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDxwPg0KKwkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5EZWF0aHMzNDwvZW0+JyBhdHRyaWJ1dGUgaXNuJ3QgY2xlYXIsDQorCSAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4NCisJICogPC9wPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+RGVhdGhzMzQ8L2VtPicgYXR0cmlidXRlLg0KKwkgKiBAc2VlICNzZXREZWF0aHMzNChkb3VibGUpDQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5WZWN0b3JQYWNrYWdlI2dldERlbmd1ZU1vZGVsSG9zdExhYmxlVmFsdWVfRGVhdGhzMzQoKQ0KKwkgKiBAbW9kZWwNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJZG91YmxlIGdldERlYXRoczM0KCk7DQorDQorCS8qKg0KKwkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLkRlbmd1ZU1vZGVsSG9zdExhYmxlVmFsdWUjZ2V0RGVhdGhzMzQgPGVtPkRlYXRoczM0PC9lbT59JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5EZWF0aHMzNDwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIEBzZWUgI2dldERlYXRoczM0KCkNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJdm9pZCBzZXREZWF0aHMzNChkb3VibGUgdmFsdWUpOw0KKw0KKwkvKioNCisJICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+RGVhdGhzNDM8L2I+PC9lbT4nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPHA+DQorCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPkRlYXRoczQzPC9lbT4nIGF0dHJpYnV0ZSBpc24ndCBjbGVhciwNCisJICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLg0KKwkgKiA8L3A+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5EZWF0aHM0MzwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIEBzZWUgI3NldERlYXRoczQzKGRvdWJsZSkNCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLlZlY3RvclBhY2thZ2UjZ2V0RGVuZ3VlTW9kZWxIb3N0TGFibGVWYWx1ZV9EZWF0aHM0MygpDQorCSAqIEBtb2RlbA0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlkb3VibGUgZ2V0RGVhdGhzNDMoKTsNCisNCisJLyoqDQorCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWxIb3N0TGFibGVWYWx1ZSNnZXREZWF0aHM0MyA8ZW0+RGVhdGhzNDM8L2VtPn0nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPkRlYXRoczQzPC9lbT4nIGF0dHJpYnV0ZS4NCisJICogQHNlZSAjZ2V0RGVhdGhzNDMoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwl2b2lkIHNldERlYXRoczQzKGRvdWJsZSB2YWx1ZSk7DQorDQorfSAvLyBEZW5ndWVNb2RlbEhvc3RMYWJsZVZhbHVlDQpkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvdmVjdG9yL0Rlbmd1ZU1vZGVsVmVjdG9yTGFiZWwuamF2YSBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3ZlY3Rvci9EZW5ndWVNb2RlbFZlY3RvckxhYmVsLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWE2YWRjZAotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3ZlY3Rvci9EZW5ndWVNb2RlbFZlY3RvckxhYmVsLmphdmEKQEAgLTAsMCArMSwyMiBAQAorLyoqDQorICogPGNvcHlyaWdodD4NCisgKiA8L2NvcHlyaWdodD4NCisgKg0KKyAqICRJZCQNCisgKi8NCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3I7DQorDQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsOw0KKw0KKy8qKg0KKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorICogQSByZXByZXNlbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+RGVuZ3VlIE1vZGVsIFZlY3RvciBMYWJlbDwvYj48L2VtPicuDQorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorICoNCisgKg0KKyAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5WZWN0b3JQYWNrYWdlI2dldERlbmd1ZU1vZGVsVmVjdG9yTGFiZWwoKQ0KKyAqIEBtb2RlbA0KKyAqIEBnZW5lcmF0ZWQNCisgKi8NCitwdWJsaWMgaW50ZXJmYWNlIERlbmd1ZU1vZGVsVmVjdG9yTGFiZWwgZXh0ZW5kcyBTdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsIHsNCit9IC8vIERlbmd1ZU1vZGVsVmVjdG9yTGFiZWwNCmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3Ivc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy92ZWN0b3IvRGVuZ3VlTW9kZWxWZWN0b3JMYWJlbFZhbHVlLmphdmEgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3Ivc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy92ZWN0b3IvRGVuZ3VlTW9kZWxWZWN0b3JMYWJlbFZhbHVlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzczNDYwZgotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3ZlY3Rvci9EZW5ndWVNb2RlbFZlY3RvckxhYmVsVmFsdWUuamF2YQpAQCAtMCwwICsxLDM1MSBAQAorLyoqDQorICogPGNvcHlyaWdodD4NCisgKiA8L2NvcHlyaWdodD4NCisgKg0KKyAqICRJZCQNCisgKi8NCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3I7DQorDQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsVmFsdWU7DQorDQorLyoqDQorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisgKiBBIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5EZW5ndWUgTW9kZWwgVmVjdG9yIExhYmVsIFZhbHVlPC9iPjwvZW0+Jy4NCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisgKg0KKyAqIDxwPg0KKyAqIFRoZSBmb2xsb3dpbmcgZmVhdHVyZXMgYXJlIHN1cHBvcnRlZDoNCisgKiA8dWw+DQorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWxWZWN0b3JMYWJlbFZhbHVlI2dldEUxIDxlbT5FMTwvZW0+fTwvbGk+DQorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWxWZWN0b3JMYWJlbFZhbHVlI2dldEUyIDxlbT5FMjwvZW0+fTwvbGk+DQorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWxWZWN0b3JMYWJlbFZhbHVlI2dldEUzIDxlbT5FMzwvZW0+fTwvbGk+DQorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWxWZWN0b3JMYWJlbFZhbHVlI2dldEU0IDxlbT5FNDwvZW0+fTwvbGk+DQorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWxWZWN0b3JMYWJlbFZhbHVlI2dldEkxIDxlbT5JMTwvZW0+fTwvbGk+DQorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWxWZWN0b3JMYWJlbFZhbHVlI2dldEkyIDxlbT5JMjwvZW0+fTwvbGk+DQorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWxWZWN0b3JMYWJlbFZhbHVlI2dldEkzIDxlbT5JMzwvZW0+fTwvbGk+DQorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWxWZWN0b3JMYWJlbFZhbHVlI2dldEk0IDxlbT5JNDwvZW0+fTwvbGk+DQorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWxWZWN0b3JMYWJlbFZhbHVlI2dldEluY2lkZW5jZTEgPGVtPkluY2lkZW5jZTE8L2VtPn08L2xpPg0KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLkRlbmd1ZU1vZGVsVmVjdG9yTGFiZWxWYWx1ZSNnZXRJbmNpZGVuY2UyIDxlbT5JbmNpZGVuY2UyPC9lbT59PC9saT4NCisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbFZlY3RvckxhYmVsVmFsdWUjZ2V0SW5jaWRlbmNlMyA8ZW0+SW5jaWRlbmNlMzwvZW0+fTwvbGk+DQorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWxWZWN0b3JMYWJlbFZhbHVlI2dldEluY2lkZW5jZTQgPGVtPkluY2lkZW5jZTQ8L2VtPn08L2xpPg0KKyAqIDwvdWw+DQorICogPC9wPg0KKyAqDQorICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLlZlY3RvclBhY2thZ2UjZ2V0RGVuZ3VlTW9kZWxWZWN0b3JMYWJlbFZhbHVlKCkNCisgKiBAbW9kZWwNCisgKiBAZ2VuZXJhdGVkDQorICovDQorcHVibGljIGludGVyZmFjZSBEZW5ndWVNb2RlbFZlY3RvckxhYmVsVmFsdWUgZXh0ZW5kcyBTdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsVmFsdWUgew0KKwkvKioNCisJICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+RTE8L2I+PC9lbT4nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPHA+DQorCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPkUxPC9lbT4nIGF0dHJpYnV0ZSBpc24ndCBjbGVhciwNCisJICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLg0KKwkgKiA8L3A+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5FMTwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIEBzZWUgI3NldEUxKGRvdWJsZSkNCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLlZlY3RvclBhY2thZ2UjZ2V0RGVuZ3VlTW9kZWxWZWN0b3JMYWJlbFZhbHVlX0UxKCkNCisJICogQG1vZGVsDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCWRvdWJsZSBnZXRFMSgpOw0KKw0KKwkvKioNCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbFZlY3RvckxhYmVsVmFsdWUjZ2V0RTEgPGVtPkUxPC9lbT59JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5FMTwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIEBzZWUgI2dldEUxKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJdm9pZCBzZXRFMShkb3VibGUgdmFsdWUpOw0KKw0KKwkvKioNCisJICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+RTI8L2I+PC9lbT4nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPHA+DQorCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPkUyPC9lbT4nIGF0dHJpYnV0ZSBpc24ndCBjbGVhciwNCisJICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLg0KKwkgKiA8L3A+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5FMjwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIEBzZWUgI3NldEUyKGRvdWJsZSkNCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLlZlY3RvclBhY2thZ2UjZ2V0RGVuZ3VlTW9kZWxWZWN0b3JMYWJlbFZhbHVlX0UyKCkNCisJICogQG1vZGVsDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCWRvdWJsZSBnZXRFMigpOw0KKw0KKwkvKioNCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbFZlY3RvckxhYmVsVmFsdWUjZ2V0RTIgPGVtPkUyPC9lbT59JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5FMjwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIEBzZWUgI2dldEUyKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJdm9pZCBzZXRFMihkb3VibGUgdmFsdWUpOw0KKw0KKwkvKioNCisJICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+RTM8L2I+PC9lbT4nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPHA+DQorCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPkUzPC9lbT4nIGF0dHJpYnV0ZSBpc24ndCBjbGVhciwNCisJICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLg0KKwkgKiA8L3A+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5FMzwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIEBzZWUgI3NldEUzKGRvdWJsZSkNCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLlZlY3RvclBhY2thZ2UjZ2V0RGVuZ3VlTW9kZWxWZWN0b3JMYWJlbFZhbHVlX0UzKCkNCisJICogQG1vZGVsDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCWRvdWJsZSBnZXRFMygpOw0KKw0KKwkvKioNCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbFZlY3RvckxhYmVsVmFsdWUjZ2V0RTMgPGVtPkUzPC9lbT59JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5FMzwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIEBzZWUgI2dldEUzKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJdm9pZCBzZXRFMyhkb3VibGUgdmFsdWUpOw0KKw0KKwkvKioNCisJICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+RTQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPHA+DQorCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPkU0PC9lbT4nIGF0dHJpYnV0ZSBpc24ndCBjbGVhciwNCisJICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLg0KKwkgKiA8L3A+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5FNDwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIEBzZWUgI3NldEU0KGRvdWJsZSkNCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLlZlY3RvclBhY2thZ2UjZ2V0RGVuZ3VlTW9kZWxWZWN0b3JMYWJlbFZhbHVlX0U0KCkNCisJICogQG1vZGVsDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCWRvdWJsZSBnZXRFNCgpOw0KKw0KKwkvKioNCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbFZlY3RvckxhYmVsVmFsdWUjZ2V0RTQgPGVtPkU0PC9lbT59JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5FNDwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIEBzZWUgI2dldEU0KCkNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJdm9pZCBzZXRFNChkb3VibGUgdmFsdWUpOw0KKw0KKwkvKioNCisJICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+STE8L2I+PC9lbT4nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPHA+DQorCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPkkxPC9lbT4nIGF0dHJpYnV0ZSBpc24ndCBjbGVhciwNCisJICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLg0KKwkgKiA8L3A+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5JMTwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIEBzZWUgI3NldEkxKGRvdWJsZSkNCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLlZlY3RvclBhY2thZ2UjZ2V0RGVuZ3VlTW9kZWxWZWN0b3JMYWJlbFZhbHVlX0kxKCkNCisJICogQG1vZGVsDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCWRvdWJsZSBnZXRJMSgpOw0KKw0KKwkvKioNCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbFZlY3RvckxhYmVsVmFsdWUjZ2V0STEgPGVtPkkxPC9lbT59JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5JMTwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIEBzZWUgI2dldEkxKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJdm9pZCBzZXRJMShkb3VibGUgdmFsdWUpOw0KKw0KKwkvKioNCisJICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+STI8L2I+PC9lbT4nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPHA+DQorCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPkkyPC9lbT4nIGF0dHJpYnV0ZSBpc24ndCBjbGVhciwNCisJICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLg0KKwkgKiA8L3A+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5JMjwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIEBzZWUgI3NldEkyKGRvdWJsZSkNCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLlZlY3RvclBhY2thZ2UjZ2V0RGVuZ3VlTW9kZWxWZWN0b3JMYWJlbFZhbHVlX0kyKCkNCisJICogQG1vZGVsDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCWRvdWJsZSBnZXRJMigpOw0KKw0KKwkvKioNCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbFZlY3RvckxhYmVsVmFsdWUjZ2V0STIgPGVtPkkyPC9lbT59JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5JMjwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIEBzZWUgI2dldEkyKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJdm9pZCBzZXRJMihkb3VibGUgdmFsdWUpOw0KKw0KKwkvKioNCisJICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+STM8L2I+PC9lbT4nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPHA+DQorCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPkkzPC9lbT4nIGF0dHJpYnV0ZSBpc24ndCBjbGVhciwNCisJICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLg0KKwkgKiA8L3A+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5JMzwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIEBzZWUgI3NldEkzKGRvdWJsZSkNCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLlZlY3RvclBhY2thZ2UjZ2V0RGVuZ3VlTW9kZWxWZWN0b3JMYWJlbFZhbHVlX0kzKCkNCisJICogQG1vZGVsDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCWRvdWJsZSBnZXRJMygpOw0KKw0KKwkvKioNCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbFZlY3RvckxhYmVsVmFsdWUjZ2V0STMgPGVtPkkzPC9lbT59JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5JMzwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIEBzZWUgI2dldEkzKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJdm9pZCBzZXRJMyhkb3VibGUgdmFsdWUpOw0KKw0KKwkvKioNCisJICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+STQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPHA+DQorCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPkk0PC9lbT4nIGF0dHJpYnV0ZSBpc24ndCBjbGVhciwNCisJICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLg0KKwkgKiA8L3A+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5JNDwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIEBzZWUgI3NldEk0KGRvdWJsZSkNCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLlZlY3RvclBhY2thZ2UjZ2V0RGVuZ3VlTW9kZWxWZWN0b3JMYWJlbFZhbHVlX0k0KCkNCisJICogQG1vZGVsDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCWRvdWJsZSBnZXRJNCgpOw0KKw0KKwkvKioNCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbFZlY3RvckxhYmVsVmFsdWUjZ2V0STQgPGVtPkk0PC9lbT59JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5JNDwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIEBzZWUgI2dldEk0KCkNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJdm9pZCBzZXRJNChkb3VibGUgdmFsdWUpOw0KKw0KKwkvKioNCisJICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+SW5jaWRlbmNlMTwvYj48L2VtPicgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8cD4NCisJICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+SW5jaWRlbmNlMTwvZW0+JyBhdHRyaWJ1dGUgaXNuJ3QgY2xlYXIsDQorCSAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4NCisJICogPC9wPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+SW5jaWRlbmNlMTwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIEBzZWUgI3NldEluY2lkZW5jZTEoZG91YmxlKQ0KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuVmVjdG9yUGFja2FnZSNnZXREZW5ndWVNb2RlbFZlY3RvckxhYmVsVmFsdWVfSW5jaWRlbmNlMSgpDQorCSAqIEBtb2RlbA0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlkb3VibGUgZ2V0SW5jaWRlbmNlMSgpOw0KKw0KKwkvKioNCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbFZlY3RvckxhYmVsVmFsdWUjZ2V0SW5jaWRlbmNlMSA8ZW0+SW5jaWRlbmNlMTwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+SW5jaWRlbmNlMTwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIEBzZWUgI2dldEluY2lkZW5jZTEoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwl2b2lkIHNldEluY2lkZW5jZTEoZG91YmxlIHZhbHVlKTsNCisNCisJLyoqDQorCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPkluY2lkZW5jZTI8L2I+PC9lbT4nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPHA+DQorCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPkluY2lkZW5jZTI8L2VtPicgYXR0cmlidXRlIGlzbid0IGNsZWFyLA0KKwkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uDQorCSAqIDwvcD4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPkluY2lkZW5jZTI8L2VtPicgYXR0cmlidXRlLg0KKwkgKiBAc2VlICNzZXRJbmNpZGVuY2UyKGRvdWJsZSkNCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLlZlY3RvclBhY2thZ2UjZ2V0RGVuZ3VlTW9kZWxWZWN0b3JMYWJlbFZhbHVlX0luY2lkZW5jZTIoKQ0KKwkgKiBAbW9kZWwNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJZG91YmxlIGdldEluY2lkZW5jZTIoKTsNCisNCisJLyoqDQorCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWxWZWN0b3JMYWJlbFZhbHVlI2dldEluY2lkZW5jZTIgPGVtPkluY2lkZW5jZTI8L2VtPn0nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPkluY2lkZW5jZTI8L2VtPicgYXR0cmlidXRlLg0KKwkgKiBAc2VlICNnZXRJbmNpZGVuY2UyKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJdm9pZCBzZXRJbmNpZGVuY2UyKGRvdWJsZSB2YWx1ZSk7DQorDQorCS8qKg0KKwkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5JbmNpZGVuY2UzPC9iPjwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDxwPg0KKwkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5JbmNpZGVuY2UzPC9lbT4nIGF0dHJpYnV0ZSBpc24ndCBjbGVhciwNCisJICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLg0KKwkgKiA8L3A+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5JbmNpZGVuY2UzPC9lbT4nIGF0dHJpYnV0ZS4NCisJICogQHNlZSAjc2V0SW5jaWRlbmNlMyhkb3VibGUpDQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5WZWN0b3JQYWNrYWdlI2dldERlbmd1ZU1vZGVsVmVjdG9yTGFiZWxWYWx1ZV9JbmNpZGVuY2UzKCkNCisJICogQG1vZGVsDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCWRvdWJsZSBnZXRJbmNpZGVuY2UzKCk7DQorDQorCS8qKg0KKwkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLkRlbmd1ZU1vZGVsVmVjdG9yTGFiZWxWYWx1ZSNnZXRJbmNpZGVuY2UzIDxlbT5JbmNpZGVuY2UzPC9lbT59JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5JbmNpZGVuY2UzPC9lbT4nIGF0dHJpYnV0ZS4NCisJICogQHNlZSAjZ2V0SW5jaWRlbmNlMygpDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXZvaWQgc2V0SW5jaWRlbmNlMyhkb3VibGUgdmFsdWUpOw0KKw0KKwkvKioNCisJICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+SW5jaWRlbmNlNDwvYj48L2VtPicgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8cD4NCisJICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+SW5jaWRlbmNlNDwvZW0+JyBhdHRyaWJ1dGUgaXNuJ3QgY2xlYXIsDQorCSAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4NCisJICogPC9wPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+SW5jaWRlbmNlNDwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIEBzZWUgI3NldEluY2lkZW5jZTQoZG91YmxlKQ0KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuVmVjdG9yUGFja2FnZSNnZXREZW5ndWVNb2RlbFZlY3RvckxhYmVsVmFsdWVfSW5jaWRlbmNlNCgpDQorCSAqIEBtb2RlbA0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlkb3VibGUgZ2V0SW5jaWRlbmNlNCgpOw0KKw0KKwkvKioNCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbFZlY3RvckxhYmVsVmFsdWUjZ2V0SW5jaWRlbmNlNCA8ZW0+SW5jaWRlbmNlNDwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+SW5jaWRlbmNlNDwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIEBzZWUgI2dldEluY2lkZW5jZTQoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwl2b2lkIHNldEluY2lkZW5jZTQoZG91YmxlIHZhbHVlKTsNCisNCit9IC8vIERlbmd1ZU1vZGVsVmVjdG9yTGFiZWxWYWx1ZQ0KZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3ZlY3Rvci9EZW5ndWVNb2RlbFZlY3RvckxhYmxlLmphdmEgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3Ivc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy92ZWN0b3IvRGVuZ3VlTW9kZWxWZWN0b3JMYWJsZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdiN2E3NGYKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3Ivc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy92ZWN0b3IvRGVuZ3VlTW9kZWxWZWN0b3JMYWJsZS5qYXZhCkBAIC0wLDAgKzEsMjYgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3RvcjsNCisNCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyAqIENvcHlyaWdodCAoYykgMjAxMSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4NCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzDQorICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wDQorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQNCisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbA0KKyAqDQorICogQ29udHJpYnV0b3JzOg0KKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24NCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWw7DQorDQorLyoqDQorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisgKiBBIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5EZW5ndWUgTW9kZWwgVmVjdG9yIExhYmxlPC9iPjwvZW0+Jy4NCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisgKg0KKyAqDQorICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLlZlY3RvclBhY2thZ2UjZ2V0RGVuZ3VlTW9kZWxWZWN0b3JMYWJsZSgpDQorICogQG1vZGVsDQorICogQGdlbmVyYXRlZA0KKyAqLw0KK3B1YmxpYyBpbnRlcmZhY2UgRGVuZ3VlTW9kZWxWZWN0b3JMYWJsZSBleHRlbmRzIFN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWwgew0KK30gLy8gRGVuZ3VlTW9kZWxWZWN0b3JMYWJsZQ0KZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3ZlY3Rvci9EZW5ndWVNb2RlbFZlY3RvckxhYmxlVmFsdWUuamF2YSBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3ZlY3Rvci9EZW5ndWVNb2RlbFZlY3RvckxhYmxlVmFsdWUuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iM2NlMzE2Ci0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvdmVjdG9yL0Rlbmd1ZU1vZGVsVmVjdG9yTGFibGVWYWx1ZS5qYXZhCkBAIC0wLDAgKzEsMjQ3IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3I7DQorDQorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisgKiBDb3B5cmlnaHQgKGMpIDIwMTEgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuDQorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscw0KKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMA0KKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0DQorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwNCisgKg0KKyAqIENvbnRyaWJ1dG9yczoNCisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uDQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsVmFsdWU7DQorDQorLyoqDQorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisgKiBBIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5EZW5ndWUgTW9kZWwgVmVjdG9yIExhYmxlIFZhbHVlPC9iPjwvZW0+Jy4NCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisgKg0KKyAqIDxwPg0KKyAqIFRoZSBmb2xsb3dpbmcgZmVhdHVyZXMgYXJlIHN1cHBvcnRlZDoNCisgKiA8dWw+DQorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWxWZWN0b3JMYWJsZVZhbHVlI2dldEUxIDxlbT5FMTwvZW0+fTwvbGk+DQorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWxWZWN0b3JMYWJsZVZhbHVlI2dldEUyIDxlbT5FMjwvZW0+fTwvbGk+DQorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWxWZWN0b3JMYWJsZVZhbHVlI2dldEUzIDxlbT5FMzwvZW0+fTwvbGk+DQorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWxWZWN0b3JMYWJsZVZhbHVlI2dldEU0IDxlbT5FNDwvZW0+fTwvbGk+DQorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWxWZWN0b3JMYWJsZVZhbHVlI2dldEkxIDxlbT5JMTwvZW0+fTwvbGk+DQorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWxWZWN0b3JMYWJsZVZhbHVlI2dldEkyIDxlbT5JMjwvZW0+fTwvbGk+DQorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWxWZWN0b3JMYWJsZVZhbHVlI2dldEkzIDxlbT5JMzwvZW0+fTwvbGk+DQorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWxWZWN0b3JMYWJsZVZhbHVlI2dldEk0IDxlbT5JNDwvZW0+fTwvbGk+DQorICogPC91bD4NCisgKiA8L3A+DQorICoNCisgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuVmVjdG9yUGFja2FnZSNnZXREZW5ndWVNb2RlbFZlY3RvckxhYmxlVmFsdWUoKQ0KKyAqIEBtb2RlbA0KKyAqIEBnZW5lcmF0ZWQNCisgKi8NCitwdWJsaWMgaW50ZXJmYWNlIERlbmd1ZU1vZGVsVmVjdG9yTGFibGVWYWx1ZSBleHRlbmRzIFN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZSB7DQorCS8qKg0KKwkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5FMTwvYj48L2VtPicgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8cD4NCisJICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+RTE8L2VtPicgYXR0cmlidXRlIGlzbid0IGNsZWFyLA0KKwkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uDQorCSAqIDwvcD4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPkUxPC9lbT4nIGF0dHJpYnV0ZS4NCisJICogQHNlZSAjc2V0RTEoZG91YmxlKQ0KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuVmVjdG9yUGFja2FnZSNnZXREZW5ndWVNb2RlbFZlY3RvckxhYmxlVmFsdWVfRTEoKQ0KKwkgKiBAbW9kZWwNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJZG91YmxlIGdldEUxKCk7DQorDQorCS8qKg0KKwkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLkRlbmd1ZU1vZGVsVmVjdG9yTGFibGVWYWx1ZSNnZXRFMSA8ZW0+RTE8L2VtPn0nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPkUxPC9lbT4nIGF0dHJpYnV0ZS4NCisJICogQHNlZSAjZ2V0RTEoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwl2b2lkIHNldEUxKGRvdWJsZSB2YWx1ZSk7DQorDQorCS8qKg0KKwkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5FMjwvYj48L2VtPicgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8cD4NCisJICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+RTI8L2VtPicgYXR0cmlidXRlIGlzbid0IGNsZWFyLA0KKwkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uDQorCSAqIDwvcD4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPkUyPC9lbT4nIGF0dHJpYnV0ZS4NCisJICogQHNlZSAjc2V0RTIoZG91YmxlKQ0KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuVmVjdG9yUGFja2FnZSNnZXREZW5ndWVNb2RlbFZlY3RvckxhYmxlVmFsdWVfRTIoKQ0KKwkgKiBAbW9kZWwNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJZG91YmxlIGdldEUyKCk7DQorDQorCS8qKg0KKwkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLkRlbmd1ZU1vZGVsVmVjdG9yTGFibGVWYWx1ZSNnZXRFMiA8ZW0+RTI8L2VtPn0nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPkUyPC9lbT4nIGF0dHJpYnV0ZS4NCisJICogQHNlZSAjZ2V0RTIoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwl2b2lkIHNldEUyKGRvdWJsZSB2YWx1ZSk7DQorDQorCS8qKg0KKwkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5FMzwvYj48L2VtPicgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8cD4NCisJICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+RTM8L2VtPicgYXR0cmlidXRlIGlzbid0IGNsZWFyLA0KKwkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uDQorCSAqIDwvcD4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPkUzPC9lbT4nIGF0dHJpYnV0ZS4NCisJICogQHNlZSAjc2V0RTMoZG91YmxlKQ0KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuVmVjdG9yUGFja2FnZSNnZXREZW5ndWVNb2RlbFZlY3RvckxhYmxlVmFsdWVfRTMoKQ0KKwkgKiBAbW9kZWwNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJZG91YmxlIGdldEUzKCk7DQorDQorCS8qKg0KKwkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLkRlbmd1ZU1vZGVsVmVjdG9yTGFibGVWYWx1ZSNnZXRFMyA8ZW0+RTM8L2VtPn0nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPkUzPC9lbT4nIGF0dHJpYnV0ZS4NCisJICogQHNlZSAjZ2V0RTMoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwl2b2lkIHNldEUzKGRvdWJsZSB2YWx1ZSk7DQorDQorCS8qKg0KKwkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5FNDwvYj48L2VtPicgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8cD4NCisJICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+RTQ8L2VtPicgYXR0cmlidXRlIGlzbid0IGNsZWFyLA0KKwkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uDQorCSAqIDwvcD4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPkU0PC9lbT4nIGF0dHJpYnV0ZS4NCisJICogQHNlZSAjc2V0RTQoZG91YmxlKQ0KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuVmVjdG9yUGFja2FnZSNnZXREZW5ndWVNb2RlbFZlY3RvckxhYmxlVmFsdWVfRTQoKQ0KKwkgKiBAbW9kZWwNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJZG91YmxlIGdldEU0KCk7DQorDQorCS8qKg0KKwkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLkRlbmd1ZU1vZGVsVmVjdG9yTGFibGVWYWx1ZSNnZXRFNCA8ZW0+RTQ8L2VtPn0nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPkU0PC9lbT4nIGF0dHJpYnV0ZS4NCisJICogQHNlZSAjZ2V0RTQoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwl2b2lkIHNldEU0KGRvdWJsZSB2YWx1ZSk7DQorDQorCS8qKg0KKwkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5JMTwvYj48L2VtPicgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8cD4NCisJICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+STE8L2VtPicgYXR0cmlidXRlIGlzbid0IGNsZWFyLA0KKwkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uDQorCSAqIDwvcD4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPkkxPC9lbT4nIGF0dHJpYnV0ZS4NCisJICogQHNlZSAjc2V0STEoZG91YmxlKQ0KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuVmVjdG9yUGFja2FnZSNnZXREZW5ndWVNb2RlbFZlY3RvckxhYmxlVmFsdWVfSTEoKQ0KKwkgKiBAbW9kZWwNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJZG91YmxlIGdldEkxKCk7DQorDQorCS8qKg0KKwkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLkRlbmd1ZU1vZGVsVmVjdG9yTGFibGVWYWx1ZSNnZXRJMSA8ZW0+STE8L2VtPn0nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPkkxPC9lbT4nIGF0dHJpYnV0ZS4NCisJICogQHNlZSAjZ2V0STEoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwl2b2lkIHNldEkxKGRvdWJsZSB2YWx1ZSk7DQorDQorCS8qKg0KKwkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5JMjwvYj48L2VtPicgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8cD4NCisJICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+STI8L2VtPicgYXR0cmlidXRlIGlzbid0IGNsZWFyLA0KKwkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uDQorCSAqIDwvcD4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPkkyPC9lbT4nIGF0dHJpYnV0ZS4NCisJICogQHNlZSAjc2V0STIoZG91YmxlKQ0KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuVmVjdG9yUGFja2FnZSNnZXREZW5ndWVNb2RlbFZlY3RvckxhYmxlVmFsdWVfSTIoKQ0KKwkgKiBAbW9kZWwNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJZG91YmxlIGdldEkyKCk7DQorDQorCS8qKg0KKwkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLkRlbmd1ZU1vZGVsVmVjdG9yTGFibGVWYWx1ZSNnZXRJMiA8ZW0+STI8L2VtPn0nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPkkyPC9lbT4nIGF0dHJpYnV0ZS4NCisJICogQHNlZSAjZ2V0STIoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwl2b2lkIHNldEkyKGRvdWJsZSB2YWx1ZSk7DQorDQorCS8qKg0KKwkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5JMzwvYj48L2VtPicgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8cD4NCisJICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+STM8L2VtPicgYXR0cmlidXRlIGlzbid0IGNsZWFyLA0KKwkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uDQorCSAqIDwvcD4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPkkzPC9lbT4nIGF0dHJpYnV0ZS4NCisJICogQHNlZSAjc2V0STMoZG91YmxlKQ0KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuVmVjdG9yUGFja2FnZSNnZXREZW5ndWVNb2RlbFZlY3RvckxhYmxlVmFsdWVfSTMoKQ0KKwkgKiBAbW9kZWwNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJZG91YmxlIGdldEkzKCk7DQorDQorCS8qKg0KKwkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLkRlbmd1ZU1vZGVsVmVjdG9yTGFibGVWYWx1ZSNnZXRJMyA8ZW0+STM8L2VtPn0nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPkkzPC9lbT4nIGF0dHJpYnV0ZS4NCisJICogQHNlZSAjZ2V0STMoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwl2b2lkIHNldEkzKGRvdWJsZSB2YWx1ZSk7DQorDQorCS8qKg0KKwkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5JNDwvYj48L2VtPicgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8cD4NCisJICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+STQ8L2VtPicgYXR0cmlidXRlIGlzbid0IGNsZWFyLA0KKwkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uDQorCSAqIDwvcD4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPkk0PC9lbT4nIGF0dHJpYnV0ZS4NCisJICogQHNlZSAjc2V0STQoZG91YmxlKQ0KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuVmVjdG9yUGFja2FnZSNnZXREZW5ndWVNb2RlbFZlY3RvckxhYmxlVmFsdWVfSTQoKQ0KKwkgKiBAbW9kZWwNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJZG91YmxlIGdldEk0KCk7DQorDQorCS8qKg0KKwkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLkRlbmd1ZU1vZGVsVmVjdG9yTGFibGVWYWx1ZSNnZXRJNCA8ZW0+STQ8L2VtPn0nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPkk0PC9lbT4nIGF0dHJpYnV0ZS4NCisJICogQHNlZSAjZ2V0STQoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwl2b2lkIHNldEk0KGRvdWJsZSB2YWx1ZSk7DQorDQorfSAvLyBEZW5ndWVNb2RlbFZlY3RvckxhYmxlVmFsdWUNCmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3Ivc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy92ZWN0b3IvTWFjZG9uYWxkUm9zc0Rpc2Vhc2VNb2RlbC5qYXZhIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvdmVjdG9yL01hY2RvbmFsZFJvc3NEaXNlYXNlTW9kZWwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZjhiNDAwCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvdmVjdG9yL01hY2RvbmFsZFJvc3NEaXNlYXNlTW9kZWwuamF2YQpAQCAtMCwwICsxLDIwNSBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yOworCisKKworLyoqCisqICBUaGlzIGlzIHRoZSB0ZXh0Ym9vayBNYWNkb25hbGQtUm9zcyB2ZWN0b3IgYm9ybmUgZGlzZWFzZSBtb2RlbC4gWW91IGNhbiBmaW5kIGEgZGVzY3JpcHRpb24gb2YgdGhlIG1vZGVsIGluIEFuZGVyc29uICYgTWF5ICJJbmZlY3Rpb3VzIERpc2Vhc2VzIG9mIEh1bWFucyIsIGNoYXB0ZXIgMTQuNC4KKyogIHdpdGggdGhlIGFkZGl0aW9uIG9mIGEgaW1tdW5lIHN0YWdlLgorKgorKiBAbW9kZWwKKyovCisKKworCitwdWJsaWMgaW50ZXJmYWNlIE1hY2RvbmFsZFJvc3NEaXNlYXNlTW9kZWwgZXh0ZW5kcyBWZWN0b3JEaXNlYXNlTW9kZWx7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5CaXRpbmcgUmF0ZTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIGlzIDxjb2RlPiIwLjUiPC9jb2RlPi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDxwPgorCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPkJpdGluZyBSYXRlPC9lbT4nIGF0dHJpYnV0ZSBpc24ndCBjbGVhciwKKwkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uCisJICogPC9wPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPkJpdGluZyBSYXRlPC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiBAc2VlICNzZXRCaXRpbmdSYXRlKGRvdWJsZSkKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuVmVjdG9yUGFja2FnZSNnZXRNYWNkb25hbGRSb3NzRGlzZWFzZU1vZGVsX0JpdGluZ1JhdGUoKQorCSAqIEBtb2RlbCBkZWZhdWx0PSIwLjUiCisJICogQGdlbmVyYXRlZAorCSAqLworCWRvdWJsZSBnZXRCaXRpbmdSYXRlKCk7CisKKwkvKioKKwkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLk1hY2RvbmFsZFJvc3NEaXNlYXNlTW9kZWwjZ2V0Qml0aW5nUmF0ZSA8ZW0+Qml0aW5nIFJhdGU8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPkJpdGluZyBSYXRlPC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiBAc2VlICNnZXRCaXRpbmdSYXRlKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJdm9pZCBzZXRCaXRpbmdSYXRlKGRvdWJsZSB2YWx1ZSk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5JbmZlY3Rpb3VzIEJpdGluZyBQcm9wb3J0aW9uIEh1bWFuPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogVGhlIGRlZmF1bHQgdmFsdWUgaXMgPGNvZGU+IjAuNSI8L2NvZGU+LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPHA+CisJICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+SW5mZWN0aW91cyBCaXRpbmcgUHJvcG9ydGlvbiBIdW1hbjwvZW0+JyBhdHRyaWJ1dGUgaXNuJ3QgY2xlYXIsCisJICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLgorCSAqIDwvcD4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5JbmZlY3Rpb3VzIEJpdGluZyBQcm9wb3J0aW9uIEh1bWFuPC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiBAc2VlICNzZXRJbmZlY3Rpb3VzQml0aW5nUHJvcG9ydGlvbkh1bWFuKGRvdWJsZSkKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuVmVjdG9yUGFja2FnZSNnZXRNYWNkb25hbGRSb3NzRGlzZWFzZU1vZGVsX0luZmVjdGlvdXNCaXRpbmdQcm9wb3J0aW9uSHVtYW4oKQorCSAqIEBtb2RlbCBkZWZhdWx0PSIwLjUiCisJICogQGdlbmVyYXRlZAorCSAqLworCWRvdWJsZSBnZXRJbmZlY3Rpb3VzQml0aW5nUHJvcG9ydGlvbkh1bWFuKCk7CisKKwkvKioKKwkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLk1hY2RvbmFsZFJvc3NEaXNlYXNlTW9kZWwjZ2V0SW5mZWN0aW91c0JpdGluZ1Byb3BvcnRpb25IdW1hbiA8ZW0+SW5mZWN0aW91cyBCaXRpbmcgUHJvcG9ydGlvbiBIdW1hbjwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+SW5mZWN0aW91cyBCaXRpbmcgUHJvcG9ydGlvbiBIdW1hbjwvZW0+JyBhdHRyaWJ1dGUuCisJICogQHNlZSAjZ2V0SW5mZWN0aW91c0JpdGluZ1Byb3BvcnRpb25IdW1hbigpCisJICogQGdlbmVyYXRlZAorCSAqLworCXZvaWQgc2V0SW5mZWN0aW91c0JpdGluZ1Byb3BvcnRpb25IdW1hbihkb3VibGUgdmFsdWUpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+SW5mZWN0aW91cyBCaXRpbmcgUHJvcG9ydGlvbiBWZWN0b3I8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyA8Y29kZT4iMS4wIjwvY29kZT4uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8cD4KKwkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5JbmZlY3Rpb3VzIEJpdGluZyBQcm9wb3J0aW9uIFZlY3RvcjwvZW0+JyBhdHRyaWJ1dGUgaXNuJ3QgY2xlYXIsCisJICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLgorCSAqIDwvcD4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5JbmZlY3Rpb3VzIEJpdGluZyBQcm9wb3J0aW9uIFZlY3RvcjwvZW0+JyBhdHRyaWJ1dGUuCisJICogQHNlZSAjc2V0SW5mZWN0aW91c0JpdGluZ1Byb3BvcnRpb25WZWN0b3IoZG91YmxlKQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5WZWN0b3JQYWNrYWdlI2dldE1hY2RvbmFsZFJvc3NEaXNlYXNlTW9kZWxfSW5mZWN0aW91c0JpdGluZ1Byb3BvcnRpb25WZWN0b3IoKQorCSAqIEBtb2RlbCBkZWZhdWx0PSIxLjAiCisJICogQGdlbmVyYXRlZAorCSAqLworCWRvdWJsZSBnZXRJbmZlY3Rpb3VzQml0aW5nUHJvcG9ydGlvblZlY3RvcigpOworCisJLyoqCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5NYWNkb25hbGRSb3NzRGlzZWFzZU1vZGVsI2dldEluZmVjdGlvdXNCaXRpbmdQcm9wb3J0aW9uVmVjdG9yIDxlbT5JbmZlY3Rpb3VzIEJpdGluZyBQcm9wb3J0aW9uIFZlY3RvcjwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+SW5mZWN0aW91cyBCaXRpbmcgUHJvcG9ydGlvbiBWZWN0b3I8L2VtPicgYXR0cmlidXRlLgorCSAqIEBzZWUgI2dldEluZmVjdGlvdXNCaXRpbmdQcm9wb3J0aW9uVmVjdG9yKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJdm9pZCBzZXRJbmZlY3Rpb3VzQml0aW5nUHJvcG9ydGlvblZlY3Rvcihkb3VibGUgdmFsdWUpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+UmVjb3ZlcnkgUmF0ZTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIGlzIDxjb2RlPiIzLjMzRS0zIjwvY29kZT4uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8cD4KKwkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5SZWNvdmVyeSBSYXRlPC9lbT4nIGF0dHJpYnV0ZSBpc24ndCBjbGVhciwKKwkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uCisJICogPC9wPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPlJlY292ZXJ5IFJhdGU8L2VtPicgYXR0cmlidXRlLgorCSAqIEBzZWUgI3NldFJlY292ZXJ5UmF0ZShkb3VibGUpCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLlZlY3RvclBhY2thZ2UjZ2V0TWFjZG9uYWxkUm9zc0Rpc2Vhc2VNb2RlbF9SZWNvdmVyeVJhdGUoKQorCSAqIEBtb2RlbCBkZWZhdWx0PSIzLjMzRS0zIgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlkb3VibGUgZ2V0UmVjb3ZlcnlSYXRlKCk7CisKKwkvKioKKwkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLk1hY2RvbmFsZFJvc3NEaXNlYXNlTW9kZWwjZ2V0UmVjb3ZlcnlSYXRlIDxlbT5SZWNvdmVyeSBSYXRlPC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5SZWNvdmVyeSBSYXRlPC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiBAc2VlICNnZXRSZWNvdmVyeVJhdGUoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwl2b2lkIHNldFJlY292ZXJ5UmF0ZShkb3VibGUgdmFsdWUpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+SW5jdWJhdGlvbiBSYXRlPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogVGhlIGRlZmF1bHQgdmFsdWUgaXMgPGNvZGU+IjAuMDYyNSI8L2NvZGU+LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPHA+CisJICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+SW5jdWJhdGlvbiBSYXRlPC9lbT4nIGF0dHJpYnV0ZSBpc24ndCBjbGVhciwKKwkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uCisJICogPC9wPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPkluY3ViYXRpb24gUmF0ZTwvZW0+JyBhdHRyaWJ1dGUuCisJICogQHNlZSAjc2V0SW5jdWJhdGlvblJhdGUoZG91YmxlKQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5WZWN0b3JQYWNrYWdlI2dldE1hY2RvbmFsZFJvc3NEaXNlYXNlTW9kZWxfSW5jdWJhdGlvblJhdGUoKQorCSAqIEBtb2RlbCBkZWZhdWx0PSIwLjA2MjUiCisJICogQGdlbmVyYXRlZAorCSAqLworCWRvdWJsZSBnZXRJbmN1YmF0aW9uUmF0ZSgpOworCisJLyoqCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5NYWNkb25hbGRSb3NzRGlzZWFzZU1vZGVsI2dldEluY3ViYXRpb25SYXRlIDxlbT5JbmN1YmF0aW9uIFJhdGU8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPkluY3ViYXRpb24gUmF0ZTwvZW0+JyBhdHRyaWJ1dGUuCisJICogQHNlZSAjZ2V0SW5jdWJhdGlvblJhdGUoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwl2b2lkIHNldEluY3ViYXRpb25SYXRlKGRvdWJsZSB2YWx1ZSk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5WZWN0b3IgSW5jdWJhdGlvbiBSYXRlPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogVGhlIGRlZmF1bHQgdmFsdWUgaXMgPGNvZGU+IjAuMSI8L2NvZGU+LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPHA+CisJICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+VmVjdG9yIEluY3ViYXRpb24gUmF0ZTwvZW0+JyBhdHRyaWJ1dGUgaXNuJ3QgY2xlYXIsCisJICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLgorCSAqIDwvcD4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5WZWN0b3IgSW5jdWJhdGlvbiBSYXRlPC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiBAc2VlICNzZXRWZWN0b3JJbmN1YmF0aW9uUmF0ZShkb3VibGUpCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLlZlY3RvclBhY2thZ2UjZ2V0TWFjZG9uYWxkUm9zc0Rpc2Vhc2VNb2RlbF9WZWN0b3JJbmN1YmF0aW9uUmF0ZSgpCisJICogQG1vZGVsIGRlZmF1bHQ9IjAuMSIKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJZG91YmxlIGdldFZlY3RvckluY3ViYXRpb25SYXRlKCk7CisKKwkvKioKKwkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLk1hY2RvbmFsZFJvc3NEaXNlYXNlTW9kZWwjZ2V0VmVjdG9ySW5jdWJhdGlvblJhdGUgPGVtPlZlY3RvciBJbmN1YmF0aW9uIFJhdGU8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPlZlY3RvciBJbmN1YmF0aW9uIFJhdGU8L2VtPicgYXR0cmlidXRlLgorCSAqIEBzZWUgI2dldFZlY3RvckluY3ViYXRpb25SYXRlKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJdm9pZCBzZXRWZWN0b3JJbmN1YmF0aW9uUmF0ZShkb3VibGUgdmFsdWUpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+SW1tdW5pdHkgTG9zcyBSYXRlPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogVGhlIGRlZmF1bHQgdmFsdWUgaXMgPGNvZGU+IjAuMDIiPC9jb2RlPi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDxwPgorCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPkltbXVuaXR5IExvc3MgUmF0ZTwvZW0+JyBhdHRyaWJ1dGUgaXNuJ3QgY2xlYXIsCisJICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLgorCSAqIDwvcD4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5JbW11bml0eSBMb3NzIFJhdGU8L2VtPicgYXR0cmlidXRlLgorCSAqIEBzZWUgI3NldEltbXVuaXR5TG9zc1JhdGUoZG91YmxlKQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5WZWN0b3JQYWNrYWdlI2dldE1hY2RvbmFsZFJvc3NEaXNlYXNlTW9kZWxfSW1tdW5pdHlMb3NzUmF0ZSgpCisJICogQG1vZGVsIGRlZmF1bHQ9IjAuMDIiCisJICogQGdlbmVyYXRlZAorCSAqLworCWRvdWJsZSBnZXRJbW11bml0eUxvc3NSYXRlKCk7CisKKwkvKioKKwkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLk1hY2RvbmFsZFJvc3NEaXNlYXNlTW9kZWwjZ2V0SW1tdW5pdHlMb3NzUmF0ZSA8ZW0+SW1tdW5pdHkgTG9zcyBSYXRlPC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5JbW11bml0eSBMb3NzIFJhdGU8L2VtPicgYXR0cmlidXRlLgorCSAqIEBzZWUgI2dldEltbXVuaXR5TG9zc1JhdGUoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwl2b2lkIHNldEltbXVuaXR5TG9zc1JhdGUoZG91YmxlIHZhbHVlKTsKKworfQpkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvdmVjdG9yL1NpbXBsZURlbmd1ZU1vZGVsLmphdmEgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3Ivc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy92ZWN0b3IvU2ltcGxlRGVuZ3VlTW9kZWwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMzIwZTExCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvdmVjdG9yL1NpbXBsZURlbmd1ZU1vZGVsLmphdmEKQEAgLTAsMCArMSw3MjYgQEAKKy8qKg0KKyAqIDxjb3B5cmlnaHQ+DQorICogPC9jb3B5cmlnaHQ+DQorICoNCisgKiAkSWQkDQorICovDQorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yOw0KKw0KKw0KKy8qKg0KKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorICogQSByZXByZXNlbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+U2ltcGxlIERlbmd1ZSBNb2RlbDwvYj48L2VtPicuDQorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorICoNCisgKiA8cD4NCisgKiBUaGUgZm9sbG93aW5nIGZlYXR1cmVzIGFyZSBzdXBwb3J0ZWQ6DQorICogPHVsPg0KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLlNpbXBsZURlbmd1ZU1vZGVsI2dldEJpdGluZ1JhdGUgPGVtPkJpdGluZyBSYXRlPC9lbT59PC9saT4NCisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5TaW1wbGVEZW5ndWVNb2RlbCNnZXRIb3N0SW5mZWN0aXZpdHkxIDxlbT5Ib3N0IEluZmVjdGl2aXR5MTwvZW0+fTwvbGk+DQorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuU2ltcGxlRGVuZ3VlTW9kZWwjZ2V0SG9zdEluZmVjdGl2aXR5MiA8ZW0+SG9zdCBJbmZlY3Rpdml0eTI8L2VtPn08L2xpPg0KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLlNpbXBsZURlbmd1ZU1vZGVsI2dldEhvc3RJbmZlY3Rpdml0eTMgPGVtPkhvc3QgSW5mZWN0aXZpdHkzPC9lbT59PC9saT4NCisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5TaW1wbGVEZW5ndWVNb2RlbCNnZXRIb3N0SW5mZWN0aXZpdHk0IDxlbT5Ib3N0IEluZmVjdGl2aXR5NDwvZW0+fTwvbGk+DQorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuU2ltcGxlRGVuZ3VlTW9kZWwjZ2V0SG9zdFByaW1hcnlJbmN1YmF0aW9uUmF0ZSA8ZW0+SG9zdCBQcmltYXJ5IEluY3ViYXRpb24gUmF0ZTwvZW0+fTwvbGk+DQorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuU2ltcGxlRGVuZ3VlTW9kZWwjZ2V0SG9zdFByaW1hcnlSZWNvdmVyeVJhdGUgPGVtPkhvc3QgUHJpbWFyeSBSZWNvdmVyeSBSYXRlPC9lbT59PC9saT4NCisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5TaW1wbGVEZW5ndWVNb2RlbCNnZXRIb3N0UHJpbWFyeUltbXVuaXR5TG9zc1JhdGUgPGVtPkhvc3QgUHJpbWFyeSBJbW11bml0eSBMb3NzIFJhdGU8L2VtPn08L2xpPg0KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLlNpbXBsZURlbmd1ZU1vZGVsI2dldEhvc3RQcmltYXJ5RGVhdGhSYXRlIDxlbT5Ib3N0IFByaW1hcnkgRGVhdGggUmF0ZTwvZW0+fTwvbGk+DQorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuU2ltcGxlRGVuZ3VlTW9kZWwjZ2V0SG9zdEFERTEgPGVtPkhvc3QgQURFMTwvZW0+fTwvbGk+DQorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuU2ltcGxlRGVuZ3VlTW9kZWwjZ2V0SG9zdEFERTIgPGVtPkhvc3QgQURFMjwvZW0+fTwvbGk+DQorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuU2ltcGxlRGVuZ3VlTW9kZWwjZ2V0SG9zdEFERTMgPGVtPkhvc3QgQURFMzwvZW0+fTwvbGk+DQorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuU2ltcGxlRGVuZ3VlTW9kZWwjZ2V0SG9zdEFERTQgPGVtPkhvc3QgQURFNDwvZW0+fTwvbGk+DQorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuU2ltcGxlRGVuZ3VlTW9kZWwjZ2V0SG9zdFNlY29uZGFyeUluY3ViYXRpb25SYXRlIDxlbT5Ib3N0IFNlY29uZGFyeSBJbmN1YmF0aW9uIFJhdGU8L2VtPn08L2xpPg0KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLlNpbXBsZURlbmd1ZU1vZGVsI2dldEhvc3RTZWNvbmRhcnlSZWNvdmVyeVJhdGUgPGVtPkhvc3QgU2Vjb25kYXJ5IFJlY292ZXJ5IFJhdGU8L2VtPn08L2xpPg0KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLlNpbXBsZURlbmd1ZU1vZGVsI2dldEhvc3RTZWNvbmRhcnlEZWF0aFJhdGUgPGVtPkhvc3QgU2Vjb25kYXJ5IERlYXRoIFJhdGU8L2VtPn08L2xpPg0KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLlNpbXBsZURlbmd1ZU1vZGVsI2dldFZlY3RvckluZmVjdGl2aXR5MSA8ZW0+VmVjdG9yIEluZmVjdGl2aXR5MTwvZW0+fTwvbGk+DQorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuU2ltcGxlRGVuZ3VlTW9kZWwjZ2V0VmVjdG9ySW5mZWN0aXZpdHkyIDxlbT5WZWN0b3IgSW5mZWN0aXZpdHkyPC9lbT59PC9saT4NCisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5TaW1wbGVEZW5ndWVNb2RlbCNnZXRWZWN0b3JJbmZlY3Rpdml0eTMgPGVtPlZlY3RvciBJbmZlY3Rpdml0eTM8L2VtPn08L2xpPg0KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLlNpbXBsZURlbmd1ZU1vZGVsI2dldFZlY3RvckluZmVjdGl2aXR5NCA8ZW0+VmVjdG9yIEluZmVjdGl2aXR5NDwvZW0+fTwvbGk+DQorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuU2ltcGxlRGVuZ3VlTW9kZWwjZ2V0VmVjdG9yQURFMSA8ZW0+VmVjdG9yIEFERTE8L2VtPn08L2xpPg0KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLlNpbXBsZURlbmd1ZU1vZGVsI2dldFZlY3RvckFERTIgPGVtPlZlY3RvciBBREUyPC9lbT59PC9saT4NCisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5TaW1wbGVEZW5ndWVNb2RlbCNnZXRWZWN0b3JBREUzIDxlbT5WZWN0b3IgQURFMzwvZW0+fTwvbGk+DQorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuU2ltcGxlRGVuZ3VlTW9kZWwjZ2V0VmVjdG9yQURFNCA8ZW0+VmVjdG9yIEFERTQ8L2VtPn08L2xpPg0KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLlNpbXBsZURlbmd1ZU1vZGVsI2dldFZlY3RvckluY3ViYXRpb25SYXRlIDxlbT5WZWN0b3IgSW5jdWJhdGlvbiBSYXRlPC9lbT59PC9saT4NCisgKiA8L3VsPg0KKyAqIDwvcD4NCisgKg0KKyAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5WZWN0b3JQYWNrYWdlI2dldFNpbXBsZURlbmd1ZU1vZGVsKCkNCisgKiBAbW9kZWwNCisgKiBAZ2VuZXJhdGVkDQorICovDQorcHVibGljIGludGVyZmFjZSBTaW1wbGVEZW5ndWVNb2RlbCBleHRlbmRzIFZlY3RvckRpc2Vhc2VNb2RlbCB7DQorCS8qKg0KKwkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5CaXRpbmcgUmF0ZTwvYj48L2VtPicgYXR0cmlidXRlLg0KKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyA8Y29kZT4iMS4wIjwvY29kZT4uDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDxwPg0KKwkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5CaXRpbmcgUmF0ZTwvZW0+JyBhdHRyaWJ1dGUgaXNuJ3QgY2xlYXIsDQorCSAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4NCisJICogPC9wPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+Qml0aW5nIFJhdGU8L2VtPicgYXR0cmlidXRlLg0KKwkgKiBAc2VlICNzZXRCaXRpbmdSYXRlKGRvdWJsZSkNCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLlZlY3RvclBhY2thZ2UjZ2V0U2ltcGxlRGVuZ3VlTW9kZWxfQml0aW5nUmF0ZSgpDQorCSAqIEBtb2RlbCBkZWZhdWx0PSIxLjAiDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCWRvdWJsZSBnZXRCaXRpbmdSYXRlKCk7DQorDQorCS8qKg0KKwkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLlNpbXBsZURlbmd1ZU1vZGVsI2dldEJpdGluZ1JhdGUgPGVtPkJpdGluZyBSYXRlPC9lbT59JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5CaXRpbmcgUmF0ZTwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIEBzZWUgI2dldEJpdGluZ1JhdGUoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwl2b2lkIHNldEJpdGluZ1JhdGUoZG91YmxlIHZhbHVlKTsNCisNCisJLyoqDQorCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPkhvc3QgSW5mZWN0aXZpdHkxPC9iPjwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIGlzIDxjb2RlPiIwLjUiPC9jb2RlPi4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPHA+DQorCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPkhvc3QgSW5mZWN0aXZpdHkxPC9lbT4nIGF0dHJpYnV0ZSBpc24ndCBjbGVhciwNCisJICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLg0KKwkgKiA8L3A+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5Ib3N0IEluZmVjdGl2aXR5MTwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIEBzZWUgI3NldEhvc3RJbmZlY3Rpdml0eTEoZG91YmxlKQ0KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuVmVjdG9yUGFja2FnZSNnZXRTaW1wbGVEZW5ndWVNb2RlbF9Ib3N0SW5mZWN0aXZpdHkxKCkNCisJICogQG1vZGVsIGRlZmF1bHQ9IjAuNSINCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJZG91YmxlIGdldEhvc3RJbmZlY3Rpdml0eTEoKTsNCisNCisJLyoqDQorCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuU2ltcGxlRGVuZ3VlTW9kZWwjZ2V0SG9zdEluZmVjdGl2aXR5MSA8ZW0+SG9zdCBJbmZlY3Rpdml0eTE8L2VtPn0nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPkhvc3QgSW5mZWN0aXZpdHkxPC9lbT4nIGF0dHJpYnV0ZS4NCisJICogQHNlZSAjZ2V0SG9zdEluZmVjdGl2aXR5MSgpDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXZvaWQgc2V0SG9zdEluZmVjdGl2aXR5MShkb3VibGUgdmFsdWUpOw0KKw0KKwkvKioNCisJICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+SG9zdCBJbmZlY3Rpdml0eTI8L2I+PC9lbT4nIGF0dHJpYnV0ZS4NCisJICogVGhlIGRlZmF1bHQgdmFsdWUgaXMgPGNvZGU+IjAuNSI8L2NvZGU+Lg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8cD4NCisJICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+SG9zdCBJbmZlY3Rpdml0eTI8L2VtPicgYXR0cmlidXRlIGlzbid0IGNsZWFyLA0KKwkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uDQorCSAqIDwvcD4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPkhvc3QgSW5mZWN0aXZpdHkyPC9lbT4nIGF0dHJpYnV0ZS4NCisJICogQHNlZSAjc2V0SG9zdEluZmVjdGl2aXR5Mihkb3VibGUpDQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5WZWN0b3JQYWNrYWdlI2dldFNpbXBsZURlbmd1ZU1vZGVsX0hvc3RJbmZlY3Rpdml0eTIoKQ0KKwkgKiBAbW9kZWwgZGVmYXVsdD0iMC41Ig0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlkb3VibGUgZ2V0SG9zdEluZmVjdGl2aXR5MigpOw0KKw0KKwkvKioNCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5TaW1wbGVEZW5ndWVNb2RlbCNnZXRIb3N0SW5mZWN0aXZpdHkyIDxlbT5Ib3N0IEluZmVjdGl2aXR5MjwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+SG9zdCBJbmZlY3Rpdml0eTI8L2VtPicgYXR0cmlidXRlLg0KKwkgKiBAc2VlICNnZXRIb3N0SW5mZWN0aXZpdHkyKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJdm9pZCBzZXRIb3N0SW5mZWN0aXZpdHkyKGRvdWJsZSB2YWx1ZSk7DQorDQorCS8qKg0KKwkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5Ib3N0IEluZmVjdGl2aXR5MzwvYj48L2VtPicgYXR0cmlidXRlLg0KKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyA8Y29kZT4iMC41IjwvY29kZT4uDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDxwPg0KKwkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5Ib3N0IEluZmVjdGl2aXR5MzwvZW0+JyBhdHRyaWJ1dGUgaXNuJ3QgY2xlYXIsDQorCSAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4NCisJICogPC9wPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+SG9zdCBJbmZlY3Rpdml0eTM8L2VtPicgYXR0cmlidXRlLg0KKwkgKiBAc2VlICNzZXRIb3N0SW5mZWN0aXZpdHkzKGRvdWJsZSkNCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLlZlY3RvclBhY2thZ2UjZ2V0U2ltcGxlRGVuZ3VlTW9kZWxfSG9zdEluZmVjdGl2aXR5MygpDQorCSAqIEBtb2RlbCBkZWZhdWx0PSIwLjUiDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCWRvdWJsZSBnZXRIb3N0SW5mZWN0aXZpdHkzKCk7DQorDQorCS8qKg0KKwkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLlNpbXBsZURlbmd1ZU1vZGVsI2dldEhvc3RJbmZlY3Rpdml0eTMgPGVtPkhvc3QgSW5mZWN0aXZpdHkzPC9lbT59JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5Ib3N0IEluZmVjdGl2aXR5MzwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIEBzZWUgI2dldEhvc3RJbmZlY3Rpdml0eTMoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwl2b2lkIHNldEhvc3RJbmZlY3Rpdml0eTMoZG91YmxlIHZhbHVlKTsNCisNCisJLyoqDQorCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPkhvc3QgSW5mZWN0aXZpdHk0PC9iPjwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIGlzIDxjb2RlPiIwLjUiPC9jb2RlPi4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPHA+DQorCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPkhvc3QgSW5mZWN0aXZpdHk0PC9lbT4nIGF0dHJpYnV0ZSBpc24ndCBjbGVhciwNCisJICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLg0KKwkgKiA8L3A+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5Ib3N0IEluZmVjdGl2aXR5NDwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIEBzZWUgI3NldEhvc3RJbmZlY3Rpdml0eTQoZG91YmxlKQ0KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuVmVjdG9yUGFja2FnZSNnZXRTaW1wbGVEZW5ndWVNb2RlbF9Ib3N0SW5mZWN0aXZpdHk0KCkNCisJICogQG1vZGVsIGRlZmF1bHQ9IjAuNSINCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJZG91YmxlIGdldEhvc3RJbmZlY3Rpdml0eTQoKTsNCisNCisJLyoqDQorCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuU2ltcGxlRGVuZ3VlTW9kZWwjZ2V0SG9zdEluZmVjdGl2aXR5NCA8ZW0+SG9zdCBJbmZlY3Rpdml0eTQ8L2VtPn0nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPkhvc3QgSW5mZWN0aXZpdHk0PC9lbT4nIGF0dHJpYnV0ZS4NCisJICogQHNlZSAjZ2V0SG9zdEluZmVjdGl2aXR5NCgpDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXZvaWQgc2V0SG9zdEluZmVjdGl2aXR5NChkb3VibGUgdmFsdWUpOw0KKw0KKwkvKioNCisJICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+SG9zdCBQcmltYXJ5IEluY3ViYXRpb24gUmF0ZTwvYj48L2VtPicgYXR0cmlidXRlLg0KKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyA8Y29kZT4iMC4yIjwvY29kZT4uDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDxwPg0KKwkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5Ib3N0IFByaW1hcnkgSW5jdWJhdGlvbiBSYXRlPC9lbT4nIGF0dHJpYnV0ZSBpc24ndCBjbGVhciwNCisJICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLg0KKwkgKiA8L3A+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5Ib3N0IFByaW1hcnkgSW5jdWJhdGlvbiBSYXRlPC9lbT4nIGF0dHJpYnV0ZS4NCisJICogQHNlZSAjc2V0SG9zdFByaW1hcnlJbmN1YmF0aW9uUmF0ZShkb3VibGUpDQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5WZWN0b3JQYWNrYWdlI2dldFNpbXBsZURlbmd1ZU1vZGVsX0hvc3RQcmltYXJ5SW5jdWJhdGlvblJhdGUoKQ0KKwkgKiBAbW9kZWwgZGVmYXVsdD0iMC4yIg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlkb3VibGUgZ2V0SG9zdFByaW1hcnlJbmN1YmF0aW9uUmF0ZSgpOw0KKw0KKwkvKioNCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5TaW1wbGVEZW5ndWVNb2RlbCNnZXRIb3N0UHJpbWFyeUluY3ViYXRpb25SYXRlIDxlbT5Ib3N0IFByaW1hcnkgSW5jdWJhdGlvbiBSYXRlPC9lbT59JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5Ib3N0IFByaW1hcnkgSW5jdWJhdGlvbiBSYXRlPC9lbT4nIGF0dHJpYnV0ZS4NCisJICogQHNlZSAjZ2V0SG9zdFByaW1hcnlJbmN1YmF0aW9uUmF0ZSgpDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXZvaWQgc2V0SG9zdFByaW1hcnlJbmN1YmF0aW9uUmF0ZShkb3VibGUgdmFsdWUpOw0KKw0KKwkvKioNCisJICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+SG9zdCBQcmltYXJ5IFJlY292ZXJ5IFJhdGU8L2I+PC9lbT4nIGF0dHJpYnV0ZS4NCisJICogVGhlIGRlZmF1bHQgdmFsdWUgaXMgPGNvZGU+IjAuMTQiPC9jb2RlPi4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPHA+DQorCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPkhvc3QgUHJpbWFyeSBSZWNvdmVyeSBSYXRlPC9lbT4nIGF0dHJpYnV0ZSBpc24ndCBjbGVhciwNCisJICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLg0KKwkgKiA8L3A+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5Ib3N0IFByaW1hcnkgUmVjb3ZlcnkgUmF0ZTwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIEBzZWUgI3NldEhvc3RQcmltYXJ5UmVjb3ZlcnlSYXRlKGRvdWJsZSkNCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLlZlY3RvclBhY2thZ2UjZ2V0U2ltcGxlRGVuZ3VlTW9kZWxfSG9zdFByaW1hcnlSZWNvdmVyeVJhdGUoKQ0KKwkgKiBAbW9kZWwgZGVmYXVsdD0iMC4xNCINCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJZG91YmxlIGdldEhvc3RQcmltYXJ5UmVjb3ZlcnlSYXRlKCk7DQorDQorCS8qKg0KKwkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLlNpbXBsZURlbmd1ZU1vZGVsI2dldEhvc3RQcmltYXJ5UmVjb3ZlcnlSYXRlIDxlbT5Ib3N0IFByaW1hcnkgUmVjb3ZlcnkgUmF0ZTwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+SG9zdCBQcmltYXJ5IFJlY292ZXJ5IFJhdGU8L2VtPicgYXR0cmlidXRlLg0KKwkgKiBAc2VlICNnZXRIb3N0UHJpbWFyeVJlY292ZXJ5UmF0ZSgpDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXZvaWQgc2V0SG9zdFByaW1hcnlSZWNvdmVyeVJhdGUoZG91YmxlIHZhbHVlKTsNCisNCisJLyoqDQorCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPkhvc3QgUHJpbWFyeSBJbW11bml0eSBMb3NzIFJhdGU8L2I+PC9lbT4nIGF0dHJpYnV0ZS4NCisJICogVGhlIGRlZmF1bHQgdmFsdWUgaXMgPGNvZGU+IjAuMDI0IjwvY29kZT4uDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDxwPg0KKwkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5Ib3N0IFByaW1hcnkgSW1tdW5pdHkgTG9zcyBSYXRlPC9lbT4nIGF0dHJpYnV0ZSBpc24ndCBjbGVhciwNCisJICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLg0KKwkgKiA8L3A+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5Ib3N0IFByaW1hcnkgSW1tdW5pdHkgTG9zcyBSYXRlPC9lbT4nIGF0dHJpYnV0ZS4NCisJICogQHNlZSAjc2V0SG9zdFByaW1hcnlJbW11bml0eUxvc3NSYXRlKGRvdWJsZSkNCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLlZlY3RvclBhY2thZ2UjZ2V0U2ltcGxlRGVuZ3VlTW9kZWxfSG9zdFByaW1hcnlJbW11bml0eUxvc3NSYXRlKCkNCisJICogQG1vZGVsIGRlZmF1bHQ9IjAuMDI0Ig0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlkb3VibGUgZ2V0SG9zdFByaW1hcnlJbW11bml0eUxvc3NSYXRlKCk7DQorDQorCS8qKg0KKwkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLlNpbXBsZURlbmd1ZU1vZGVsI2dldEhvc3RQcmltYXJ5SW1tdW5pdHlMb3NzUmF0ZSA8ZW0+SG9zdCBQcmltYXJ5IEltbXVuaXR5IExvc3MgUmF0ZTwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+SG9zdCBQcmltYXJ5IEltbXVuaXR5IExvc3MgUmF0ZTwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIEBzZWUgI2dldEhvc3RQcmltYXJ5SW1tdW5pdHlMb3NzUmF0ZSgpDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXZvaWQgc2V0SG9zdFByaW1hcnlJbW11bml0eUxvc3NSYXRlKGRvdWJsZSB2YWx1ZSk7DQorDQorCS8qKg0KKwkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5Ib3N0IFByaW1hcnkgRGVhdGggUmF0ZTwvYj48L2VtPicgYXR0cmlidXRlLg0KKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyA8Y29kZT4iMC4wMDAwMDAxIjwvY29kZT4uDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDxwPg0KKwkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5Ib3N0IFByaW1hcnkgRGVhdGggUmF0ZTwvZW0+JyBhdHRyaWJ1dGUgaXNuJ3QgY2xlYXIsDQorCSAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4NCisJICogPC9wPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+SG9zdCBQcmltYXJ5IERlYXRoIFJhdGU8L2VtPicgYXR0cmlidXRlLg0KKwkgKiBAc2VlICNzZXRIb3N0UHJpbWFyeURlYXRoUmF0ZShkb3VibGUpDQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5WZWN0b3JQYWNrYWdlI2dldFNpbXBsZURlbmd1ZU1vZGVsX0hvc3RQcmltYXJ5RGVhdGhSYXRlKCkNCisJICogQG1vZGVsIGRlZmF1bHQ9IjAuMDAwMDAwMSINCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJZG91YmxlIGdldEhvc3RQcmltYXJ5RGVhdGhSYXRlKCk7DQorDQorCS8qKg0KKwkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLlNpbXBsZURlbmd1ZU1vZGVsI2dldEhvc3RQcmltYXJ5RGVhdGhSYXRlIDxlbT5Ib3N0IFByaW1hcnkgRGVhdGggUmF0ZTwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+SG9zdCBQcmltYXJ5IERlYXRoIFJhdGU8L2VtPicgYXR0cmlidXRlLg0KKwkgKiBAc2VlICNnZXRIb3N0UHJpbWFyeURlYXRoUmF0ZSgpDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXZvaWQgc2V0SG9zdFByaW1hcnlEZWF0aFJhdGUoZG91YmxlIHZhbHVlKTsNCisNCisJLyoqDQorCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPkhvc3QgQURFMTwvYj48L2VtPicgYXR0cmlidXRlLg0KKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyA8Y29kZT4iMS44IjwvY29kZT4uDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDxwPg0KKwkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5Ib3N0IEFERTE8L2VtPicgYXR0cmlidXRlIGlzbid0IGNsZWFyLA0KKwkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uDQorCSAqIDwvcD4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPkhvc3QgQURFMTwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIEBzZWUgI3NldEhvc3RBREUxKGRvdWJsZSkNCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLlZlY3RvclBhY2thZ2UjZ2V0U2ltcGxlRGVuZ3VlTW9kZWxfSG9zdEFERTEoKQ0KKwkgKiBAbW9kZWwgZGVmYXVsdD0iMS44Ig0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlkb3VibGUgZ2V0SG9zdEFERTEoKTsNCisNCisJLyoqDQorCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuU2ltcGxlRGVuZ3VlTW9kZWwjZ2V0SG9zdEFERTEgPGVtPkhvc3QgQURFMTwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+SG9zdCBBREUxPC9lbT4nIGF0dHJpYnV0ZS4NCisJICogQHNlZSAjZ2V0SG9zdEFERTEoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwl2b2lkIHNldEhvc3RBREUxKGRvdWJsZSB2YWx1ZSk7DQorDQorCS8qKg0KKwkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5Ib3N0IEFERTI8L2I+PC9lbT4nIGF0dHJpYnV0ZS4NCisJICogVGhlIGRlZmF1bHQgdmFsdWUgaXMgPGNvZGU+IjEuOCI8L2NvZGU+Lg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8cD4NCisJICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+SG9zdCBBREUyPC9lbT4nIGF0dHJpYnV0ZSBpc24ndCBjbGVhciwNCisJICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLg0KKwkgKiA8L3A+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5Ib3N0IEFERTI8L2VtPicgYXR0cmlidXRlLg0KKwkgKiBAc2VlICNzZXRIb3N0QURFMihkb3VibGUpDQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5WZWN0b3JQYWNrYWdlI2dldFNpbXBsZURlbmd1ZU1vZGVsX0hvc3RBREUyKCkNCisJICogQG1vZGVsIGRlZmF1bHQ9IjEuOCINCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJZG91YmxlIGdldEhvc3RBREUyKCk7DQorDQorCS8qKg0KKwkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLlNpbXBsZURlbmd1ZU1vZGVsI2dldEhvc3RBREUyIDxlbT5Ib3N0IEFERTI8L2VtPn0nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPkhvc3QgQURFMjwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIEBzZWUgI2dldEhvc3RBREUyKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJdm9pZCBzZXRIb3N0QURFMihkb3VibGUgdmFsdWUpOw0KKw0KKwkvKioNCisJICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+SG9zdCBBREUzPC9iPjwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIGlzIDxjb2RlPiIxLjgiPC9jb2RlPi4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPHA+DQorCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPkhvc3QgQURFMzwvZW0+JyBhdHRyaWJ1dGUgaXNuJ3QgY2xlYXIsDQorCSAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4NCisJICogPC9wPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+SG9zdCBBREUzPC9lbT4nIGF0dHJpYnV0ZS4NCisJICogQHNlZSAjc2V0SG9zdEFERTMoZG91YmxlKQ0KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuVmVjdG9yUGFja2FnZSNnZXRTaW1wbGVEZW5ndWVNb2RlbF9Ib3N0QURFMygpDQorCSAqIEBtb2RlbCBkZWZhdWx0PSIxLjgiDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCWRvdWJsZSBnZXRIb3N0QURFMygpOw0KKw0KKwkvKioNCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5TaW1wbGVEZW5ndWVNb2RlbCNnZXRIb3N0QURFMyA8ZW0+SG9zdCBBREUzPC9lbT59JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5Ib3N0IEFERTM8L2VtPicgYXR0cmlidXRlLg0KKwkgKiBAc2VlICNnZXRIb3N0QURFMygpDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXZvaWQgc2V0SG9zdEFERTMoZG91YmxlIHZhbHVlKTsNCisNCisJLyoqDQorCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPkhvc3QgQURFNDwvYj48L2VtPicgYXR0cmlidXRlLg0KKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyA8Y29kZT4iMS44IjwvY29kZT4uDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDxwPg0KKwkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5Ib3N0IEFERTQ8L2VtPicgYXR0cmlidXRlIGlzbid0IGNsZWFyLA0KKwkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uDQorCSAqIDwvcD4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPkhvc3QgQURFNDwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIEBzZWUgI3NldEhvc3RBREU0KGRvdWJsZSkNCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLlZlY3RvclBhY2thZ2UjZ2V0U2ltcGxlRGVuZ3VlTW9kZWxfSG9zdEFERTQoKQ0KKwkgKiBAbW9kZWwgZGVmYXVsdD0iMS44Ig0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlkb3VibGUgZ2V0SG9zdEFERTQoKTsNCisNCisJLyoqDQorCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuU2ltcGxlRGVuZ3VlTW9kZWwjZ2V0SG9zdEFERTQgPGVtPkhvc3QgQURFNDwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+SG9zdCBBREU0PC9lbT4nIGF0dHJpYnV0ZS4NCisJICogQHNlZSAjZ2V0SG9zdEFERTQoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwl2b2lkIHNldEhvc3RBREU0KGRvdWJsZSB2YWx1ZSk7DQorDQorCS8qKg0KKwkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5Ib3N0IFNlY29uZGFyeSBJbmN1YmF0aW9uIFJhdGU8L2I+PC9lbT4nIGF0dHJpYnV0ZS4NCisJICogVGhlIGRlZmF1bHQgdmFsdWUgaXMgPGNvZGU+IjAuMiI8L2NvZGU+Lg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8cD4NCisJICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+SG9zdCBTZWNvbmRhcnkgSW5jdWJhdGlvbiBSYXRlPC9lbT4nIGF0dHJpYnV0ZSBpc24ndCBjbGVhciwNCisJICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLg0KKwkgKiA8L3A+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5Ib3N0IFNlY29uZGFyeSBJbmN1YmF0aW9uIFJhdGU8L2VtPicgYXR0cmlidXRlLg0KKwkgKiBAc2VlICNzZXRIb3N0U2Vjb25kYXJ5SW5jdWJhdGlvblJhdGUoZG91YmxlKQ0KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuVmVjdG9yUGFja2FnZSNnZXRTaW1wbGVEZW5ndWVNb2RlbF9Ib3N0U2Vjb25kYXJ5SW5jdWJhdGlvblJhdGUoKQ0KKwkgKiBAbW9kZWwgZGVmYXVsdD0iMC4yIg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlkb3VibGUgZ2V0SG9zdFNlY29uZGFyeUluY3ViYXRpb25SYXRlKCk7DQorDQorCS8qKg0KKwkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLlNpbXBsZURlbmd1ZU1vZGVsI2dldEhvc3RTZWNvbmRhcnlJbmN1YmF0aW9uUmF0ZSA8ZW0+SG9zdCBTZWNvbmRhcnkgSW5jdWJhdGlvbiBSYXRlPC9lbT59JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5Ib3N0IFNlY29uZGFyeSBJbmN1YmF0aW9uIFJhdGU8L2VtPicgYXR0cmlidXRlLg0KKwkgKiBAc2VlICNnZXRIb3N0U2Vjb25kYXJ5SW5jdWJhdGlvblJhdGUoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwl2b2lkIHNldEhvc3RTZWNvbmRhcnlJbmN1YmF0aW9uUmF0ZShkb3VibGUgdmFsdWUpOw0KKw0KKwkvKioNCisJICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+SG9zdCBTZWNvbmRhcnkgUmVjb3ZlcnkgUmF0ZTwvYj48L2VtPicgYXR0cmlidXRlLg0KKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyA8Y29kZT4iMC4xIjwvY29kZT4uDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDxwPg0KKwkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5Ib3N0IFNlY29uZGFyeSBSZWNvdmVyeSBSYXRlPC9lbT4nIGF0dHJpYnV0ZSBpc24ndCBjbGVhciwNCisJICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLg0KKwkgKiA8L3A+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5Ib3N0IFNlY29uZGFyeSBSZWNvdmVyeSBSYXRlPC9lbT4nIGF0dHJpYnV0ZS4NCisJICogQHNlZSAjc2V0SG9zdFNlY29uZGFyeVJlY292ZXJ5UmF0ZShkb3VibGUpDQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5WZWN0b3JQYWNrYWdlI2dldFNpbXBsZURlbmd1ZU1vZGVsX0hvc3RTZWNvbmRhcnlSZWNvdmVyeVJhdGUoKQ0KKwkgKiBAbW9kZWwgZGVmYXVsdD0iMC4xIg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlkb3VibGUgZ2V0SG9zdFNlY29uZGFyeVJlY292ZXJ5UmF0ZSgpOw0KKw0KKwkvKioNCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5TaW1wbGVEZW5ndWVNb2RlbCNnZXRIb3N0U2Vjb25kYXJ5UmVjb3ZlcnlSYXRlIDxlbT5Ib3N0IFNlY29uZGFyeSBSZWNvdmVyeSBSYXRlPC9lbT59JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5Ib3N0IFNlY29uZGFyeSBSZWNvdmVyeSBSYXRlPC9lbT4nIGF0dHJpYnV0ZS4NCisJICogQHNlZSAjZ2V0SG9zdFNlY29uZGFyeVJlY292ZXJ5UmF0ZSgpDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXZvaWQgc2V0SG9zdFNlY29uZGFyeVJlY292ZXJ5UmF0ZShkb3VibGUgdmFsdWUpOw0KKw0KKwkvKioNCisJICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+SG9zdCBTZWNvbmRhcnkgRGVhdGggUmF0ZTwvYj48L2VtPicgYXR0cmlidXRlLg0KKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyA8Y29kZT4iMC4wMDEyMyI8L2NvZGU+Lg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8cD4NCisJICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+SG9zdCBTZWNvbmRhcnkgRGVhdGggUmF0ZTwvZW0+JyBhdHRyaWJ1dGUgaXNuJ3QgY2xlYXIsDQorCSAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4NCisJICogPC9wPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+SG9zdCBTZWNvbmRhcnkgRGVhdGggUmF0ZTwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIEBzZWUgI3NldEhvc3RTZWNvbmRhcnlEZWF0aFJhdGUoZG91YmxlKQ0KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuVmVjdG9yUGFja2FnZSNnZXRTaW1wbGVEZW5ndWVNb2RlbF9Ib3N0U2Vjb25kYXJ5RGVhdGhSYXRlKCkNCisJICogQG1vZGVsIGRlZmF1bHQ9IjAuMDAxMjMiDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCWRvdWJsZSBnZXRIb3N0U2Vjb25kYXJ5RGVhdGhSYXRlKCk7DQorDQorCS8qKg0KKwkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLlNpbXBsZURlbmd1ZU1vZGVsI2dldEhvc3RTZWNvbmRhcnlEZWF0aFJhdGUgPGVtPkhvc3QgU2Vjb25kYXJ5IERlYXRoIFJhdGU8L2VtPn0nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPkhvc3QgU2Vjb25kYXJ5IERlYXRoIFJhdGU8L2VtPicgYXR0cmlidXRlLg0KKwkgKiBAc2VlICNnZXRIb3N0U2Vjb25kYXJ5RGVhdGhSYXRlKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJdm9pZCBzZXRIb3N0U2Vjb25kYXJ5RGVhdGhSYXRlKGRvdWJsZSB2YWx1ZSk7DQorDQorCS8qKg0KKwkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5WZWN0b3IgSW5mZWN0aXZpdHkxPC9iPjwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIGlzIDxjb2RlPiIwLjUiPC9jb2RlPi4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPHA+DQorCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPlZlY3RvciBJbmZlY3Rpdml0eTE8L2VtPicgYXR0cmlidXRlIGlzbid0IGNsZWFyLA0KKwkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uDQorCSAqIDwvcD4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPlZlY3RvciBJbmZlY3Rpdml0eTE8L2VtPicgYXR0cmlidXRlLg0KKwkgKiBAc2VlICNzZXRWZWN0b3JJbmZlY3Rpdml0eTEoZG91YmxlKQ0KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuVmVjdG9yUGFja2FnZSNnZXRTaW1wbGVEZW5ndWVNb2RlbF9WZWN0b3JJbmZlY3Rpdml0eTEoKQ0KKwkgKiBAbW9kZWwgZGVmYXVsdD0iMC41Ig0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlkb3VibGUgZ2V0VmVjdG9ySW5mZWN0aXZpdHkxKCk7DQorDQorCS8qKg0KKwkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLlNpbXBsZURlbmd1ZU1vZGVsI2dldFZlY3RvckluZmVjdGl2aXR5MSA8ZW0+VmVjdG9yIEluZmVjdGl2aXR5MTwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+VmVjdG9yIEluZmVjdGl2aXR5MTwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIEBzZWUgI2dldFZlY3RvckluZmVjdGl2aXR5MSgpDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXZvaWQgc2V0VmVjdG9ySW5mZWN0aXZpdHkxKGRvdWJsZSB2YWx1ZSk7DQorDQorCS8qKg0KKwkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5WZWN0b3IgSW5mZWN0aXZpdHkyPC9iPjwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIGlzIDxjb2RlPiIwLjUiPC9jb2RlPi4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPHA+DQorCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPlZlY3RvciBJbmZlY3Rpdml0eTI8L2VtPicgYXR0cmlidXRlIGlzbid0IGNsZWFyLA0KKwkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uDQorCSAqIDwvcD4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPlZlY3RvciBJbmZlY3Rpdml0eTI8L2VtPicgYXR0cmlidXRlLg0KKwkgKiBAc2VlICNzZXRWZWN0b3JJbmZlY3Rpdml0eTIoZG91YmxlKQ0KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuVmVjdG9yUGFja2FnZSNnZXRTaW1wbGVEZW5ndWVNb2RlbF9WZWN0b3JJbmZlY3Rpdml0eTIoKQ0KKwkgKiBAbW9kZWwgZGVmYXVsdD0iMC41Ig0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlkb3VibGUgZ2V0VmVjdG9ySW5mZWN0aXZpdHkyKCk7DQorDQorCS8qKg0KKwkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLlNpbXBsZURlbmd1ZU1vZGVsI2dldFZlY3RvckluZmVjdGl2aXR5MiA8ZW0+VmVjdG9yIEluZmVjdGl2aXR5MjwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+VmVjdG9yIEluZmVjdGl2aXR5MjwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIEBzZWUgI2dldFZlY3RvckluZmVjdGl2aXR5MigpDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXZvaWQgc2V0VmVjdG9ySW5mZWN0aXZpdHkyKGRvdWJsZSB2YWx1ZSk7DQorDQorCS8qKg0KKwkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5WZWN0b3IgSW5mZWN0aXZpdHkzPC9iPjwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIGlzIDxjb2RlPiIwLjUiPC9jb2RlPi4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPHA+DQorCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPlZlY3RvciBJbmZlY3Rpdml0eTM8L2VtPicgYXR0cmlidXRlIGlzbid0IGNsZWFyLA0KKwkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uDQorCSAqIDwvcD4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPlZlY3RvciBJbmZlY3Rpdml0eTM8L2VtPicgYXR0cmlidXRlLg0KKwkgKiBAc2VlICNzZXRWZWN0b3JJbmZlY3Rpdml0eTMoZG91YmxlKQ0KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuVmVjdG9yUGFja2FnZSNnZXRTaW1wbGVEZW5ndWVNb2RlbF9WZWN0b3JJbmZlY3Rpdml0eTMoKQ0KKwkgKiBAbW9kZWwgZGVmYXVsdD0iMC41Ig0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlkb3VibGUgZ2V0VmVjdG9ySW5mZWN0aXZpdHkzKCk7DQorDQorCS8qKg0KKwkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLlNpbXBsZURlbmd1ZU1vZGVsI2dldFZlY3RvckluZmVjdGl2aXR5MyA8ZW0+VmVjdG9yIEluZmVjdGl2aXR5MzwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+VmVjdG9yIEluZmVjdGl2aXR5MzwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIEBzZWUgI2dldFZlY3RvckluZmVjdGl2aXR5MygpDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXZvaWQgc2V0VmVjdG9ySW5mZWN0aXZpdHkzKGRvdWJsZSB2YWx1ZSk7DQorDQorCS8qKg0KKwkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5WZWN0b3IgSW5mZWN0aXZpdHk0PC9iPjwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIGlzIDxjb2RlPiIwLjUiPC9jb2RlPi4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPHA+DQorCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPlZlY3RvciBJbmZlY3Rpdml0eTQ8L2VtPicgYXR0cmlidXRlIGlzbid0IGNsZWFyLA0KKwkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uDQorCSAqIDwvcD4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPlZlY3RvciBJbmZlY3Rpdml0eTQ8L2VtPicgYXR0cmlidXRlLg0KKwkgKiBAc2VlICNzZXRWZWN0b3JJbmZlY3Rpdml0eTQoZG91YmxlKQ0KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuVmVjdG9yUGFja2FnZSNnZXRTaW1wbGVEZW5ndWVNb2RlbF9WZWN0b3JJbmZlY3Rpdml0eTQoKQ0KKwkgKiBAbW9kZWwgZGVmYXVsdD0iMC41Ig0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlkb3VibGUgZ2V0VmVjdG9ySW5mZWN0aXZpdHk0KCk7DQorDQorCS8qKg0KKwkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLlNpbXBsZURlbmd1ZU1vZGVsI2dldFZlY3RvckluZmVjdGl2aXR5NCA8ZW0+VmVjdG9yIEluZmVjdGl2aXR5NDwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+VmVjdG9yIEluZmVjdGl2aXR5NDwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIEBzZWUgI2dldFZlY3RvckluZmVjdGl2aXR5NCgpDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXZvaWQgc2V0VmVjdG9ySW5mZWN0aXZpdHk0KGRvdWJsZSB2YWx1ZSk7DQorDQorCS8qKg0KKwkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5WZWN0b3IgQURFMTwvYj48L2VtPicgYXR0cmlidXRlLg0KKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyA8Y29kZT4iMS44IjwvY29kZT4uDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDxwPg0KKwkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5WZWN0b3IgQURFMTwvZW0+JyBhdHRyaWJ1dGUgaXNuJ3QgY2xlYXIsDQorCSAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4NCisJICogPC9wPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+VmVjdG9yIEFERTE8L2VtPicgYXR0cmlidXRlLg0KKwkgKiBAc2VlICNzZXRWZWN0b3JBREUxKGRvdWJsZSkNCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLlZlY3RvclBhY2thZ2UjZ2V0U2ltcGxlRGVuZ3VlTW9kZWxfVmVjdG9yQURFMSgpDQorCSAqIEBtb2RlbCBkZWZhdWx0PSIxLjgiDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCWRvdWJsZSBnZXRWZWN0b3JBREUxKCk7DQorDQorCS8qKg0KKwkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLlNpbXBsZURlbmd1ZU1vZGVsI2dldFZlY3RvckFERTEgPGVtPlZlY3RvciBBREUxPC9lbT59JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5WZWN0b3IgQURFMTwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIEBzZWUgI2dldFZlY3RvckFERTEoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwl2b2lkIHNldFZlY3RvckFERTEoZG91YmxlIHZhbHVlKTsNCisNCisJLyoqDQorCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPlZlY3RvciBBREUyPC9iPjwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIGlzIDxjb2RlPiIxLjgiPC9jb2RlPi4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPHA+DQorCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPlZlY3RvciBBREUyPC9lbT4nIGF0dHJpYnV0ZSBpc24ndCBjbGVhciwNCisJICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLg0KKwkgKiA8L3A+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5WZWN0b3IgQURFMjwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIEBzZWUgI3NldFZlY3RvckFERTIoZG91YmxlKQ0KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuVmVjdG9yUGFja2FnZSNnZXRTaW1wbGVEZW5ndWVNb2RlbF9WZWN0b3JBREUyKCkNCisJICogQG1vZGVsIGRlZmF1bHQ9IjEuOCINCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJZG91YmxlIGdldFZlY3RvckFERTIoKTsNCisNCisJLyoqDQorCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuU2ltcGxlRGVuZ3VlTW9kZWwjZ2V0VmVjdG9yQURFMiA8ZW0+VmVjdG9yIEFERTI8L2VtPn0nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPlZlY3RvciBBREUyPC9lbT4nIGF0dHJpYnV0ZS4NCisJICogQHNlZSAjZ2V0VmVjdG9yQURFMigpDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXZvaWQgc2V0VmVjdG9yQURFMihkb3VibGUgdmFsdWUpOw0KKw0KKwkvKioNCisJICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+VmVjdG9yIEFERTM8L2I+PC9lbT4nIGF0dHJpYnV0ZS4NCisJICogVGhlIGRlZmF1bHQgdmFsdWUgaXMgPGNvZGU+IjEuOCI8L2NvZGU+Lg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8cD4NCisJICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+VmVjdG9yIEFERTM8L2VtPicgYXR0cmlidXRlIGlzbid0IGNsZWFyLA0KKwkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uDQorCSAqIDwvcD4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPlZlY3RvciBBREUzPC9lbT4nIGF0dHJpYnV0ZS4NCisJICogQHNlZSAjc2V0VmVjdG9yQURFMyhkb3VibGUpDQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5WZWN0b3JQYWNrYWdlI2dldFNpbXBsZURlbmd1ZU1vZGVsX1ZlY3RvckFERTMoKQ0KKwkgKiBAbW9kZWwgZGVmYXVsdD0iMS44Ig0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlkb3VibGUgZ2V0VmVjdG9yQURFMygpOw0KKw0KKwkvKioNCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5TaW1wbGVEZW5ndWVNb2RlbCNnZXRWZWN0b3JBREUzIDxlbT5WZWN0b3IgQURFMzwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+VmVjdG9yIEFERTM8L2VtPicgYXR0cmlidXRlLg0KKwkgKiBAc2VlICNnZXRWZWN0b3JBREUzKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJdm9pZCBzZXRWZWN0b3JBREUzKGRvdWJsZSB2YWx1ZSk7DQorDQorCS8qKg0KKwkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5WZWN0b3IgQURFNDwvYj48L2VtPicgYXR0cmlidXRlLg0KKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyA8Y29kZT4iMS44IjwvY29kZT4uDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDxwPg0KKwkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5WZWN0b3IgQURFNDwvZW0+JyBhdHRyaWJ1dGUgaXNuJ3QgY2xlYXIsDQorCSAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4NCisJICogPC9wPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+VmVjdG9yIEFERTQ8L2VtPicgYXR0cmlidXRlLg0KKwkgKiBAc2VlICNzZXRWZWN0b3JBREU0KGRvdWJsZSkNCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLlZlY3RvclBhY2thZ2UjZ2V0U2ltcGxlRGVuZ3VlTW9kZWxfVmVjdG9yQURFNCgpDQorCSAqIEBtb2RlbCBkZWZhdWx0PSIxLjgiDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCWRvdWJsZSBnZXRWZWN0b3JBREU0KCk7DQorDQorCS8qKg0KKwkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLlNpbXBsZURlbmd1ZU1vZGVsI2dldFZlY3RvckFERTQgPGVtPlZlY3RvciBBREU0PC9lbT59JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5WZWN0b3IgQURFNDwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIEBzZWUgI2dldFZlY3RvckFERTQoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwl2b2lkIHNldFZlY3RvckFERTQoZG91YmxlIHZhbHVlKTsNCisNCisJLyoqDQorCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPlZlY3RvciBJbmN1YmF0aW9uIFJhdGU8L2I+PC9lbT4nIGF0dHJpYnV0ZS4NCisJICogVGhlIGRlZmF1bHQgdmFsdWUgaXMgPGNvZGU+IjAuMSI8L2NvZGU+Lg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8cD4NCisJICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+VmVjdG9yIEluY3ViYXRpb24gUmF0ZTwvZW0+JyBhdHRyaWJ1dGUgaXNuJ3QgY2xlYXIsDQorCSAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4NCisJICogPC9wPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+VmVjdG9yIEluY3ViYXRpb24gUmF0ZTwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIEBzZWUgI3NldFZlY3RvckluY3ViYXRpb25SYXRlKGRvdWJsZSkNCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLlZlY3RvclBhY2thZ2UjZ2V0U2ltcGxlRGVuZ3VlTW9kZWxfVmVjdG9ySW5jdWJhdGlvblJhdGUoKQ0KKwkgKiBAbW9kZWwgZGVmYXVsdD0iMC4xIg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlkb3VibGUgZ2V0VmVjdG9ySW5jdWJhdGlvblJhdGUoKTsNCisNCisJLyoqDQorCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuU2ltcGxlRGVuZ3VlTW9kZWwjZ2V0VmVjdG9ySW5jdWJhdGlvblJhdGUgPGVtPlZlY3RvciBJbmN1YmF0aW9uIFJhdGU8L2VtPn0nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPlZlY3RvciBJbmN1YmF0aW9uIFJhdGU8L2VtPicgYXR0cmlidXRlLg0KKwkgKiBAc2VlICNnZXRWZWN0b3JJbmN1YmF0aW9uUmF0ZSgpDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXZvaWQgc2V0VmVjdG9ySW5jdWJhdGlvblJhdGUoZG91YmxlIHZhbHVlKTsNCisNCit9IC8vIFNpbXBsZURlbmd1ZU1vZGVsDQpkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvdmVjdG9yL1ZlY3RvckRpc2Vhc2VNb2RlbC5qYXZhIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvdmVjdG9yL1ZlY3RvckRpc2Vhc2VNb2RlbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVkNGMxNDMKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3Ivc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy92ZWN0b3IvVmVjdG9yRGlzZWFzZU1vZGVsLmphdmEKQEAgLTAsMCArMSw2MCBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAKKyAqIENvcHlyaWdodCAoYykgMjAxMSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4gCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIAorICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wIAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQgCisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbCAKKyAqIAorICogQ29udHJpYnV0b3JzOiAKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZERpc2Vhc2VNb2RlbDsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogQSByZXByZXNlbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+RGlzZWFzZSBNb2RlbDwvYj48L2VtPicuCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqCisgKiA8cD4KKyAqIFRoZSBmb2xsb3dpbmcgZmVhdHVyZXMgYXJlIHN1cHBvcnRlZDoKKyAqIDx1bD4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLlZlY3RvckRpc2Vhc2VNb2RlbCNnZXRWZWN0b3JQb3B1bGF0aW9uSWRlbnRpZmllciA8ZW0+VmVjdG9yIFBvcHVsYXRpb24gSWRlbnRpZmllcjwvZW0+fTwvbGk+CisgKiA8L3VsPgorICogPC9wPgorICoKKyAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5WZWN0b3JQYWNrYWdlI2dldFZlY3RvckRpc2Vhc2VNb2RlbCgpCisgKiBAbW9kZWwgYWJzdHJhY3Q9InRydWUiCisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBpbnRlcmZhY2UgVmVjdG9yRGlzZWFzZU1vZGVsIGV4dGVuZHMgU3RhbmRhcmREaXNlYXNlTW9kZWwgeworCS8qKgorCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPlZlY3RvciBQb3B1bGF0aW9uIElkZW50aWZpZXI8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyA8Y29kZT4iYW5vcGhlbGVzIjwvY29kZT4uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8cD4KKwkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5WZWN0b3IgUG9wdWxhdGlvbiBJZGVudGlmaWVyPC9lbT4nIGF0dHJpYnV0ZSBpc24ndCBjbGVhciwKKwkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uCisJICogPC9wPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPlZlY3RvciBQb3B1bGF0aW9uIElkZW50aWZpZXI8L2VtPicgYXR0cmlidXRlLgorCSAqIEBzZWUgI3NldFZlY3RvclBvcHVsYXRpb25JZGVudGlmaWVyKFN0cmluZykKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuVmVjdG9yUGFja2FnZSNnZXRWZWN0b3JEaXNlYXNlTW9kZWxfVmVjdG9yUG9wdWxhdGlvbklkZW50aWZpZXIoKQorCSAqIEBtb2RlbCBkZWZhdWx0PSJhbm9waGVsZXMiCisJICogQGdlbmVyYXRlZAorCSAqLworCVN0cmluZyBnZXRWZWN0b3JQb3B1bGF0aW9uSWRlbnRpZmllcigpOworCisJLyoqCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5WZWN0b3JEaXNlYXNlTW9kZWwjZ2V0VmVjdG9yUG9wdWxhdGlvbklkZW50aWZpZXIgPGVtPlZlY3RvciBQb3B1bGF0aW9uIElkZW50aWZpZXI8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPlZlY3RvciBQb3B1bGF0aW9uIElkZW50aWZpZXI8L2VtPicgYXR0cmlidXRlLgorCSAqIEBzZWUgI2dldFZlY3RvclBvcHVsYXRpb25JZGVudGlmaWVyKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJdm9pZCBzZXRWZWN0b3JQb3B1bGF0aW9uSWRlbnRpZmllcihTdHJpbmcgdmFsdWUpOworCit9IC8vIFZlY3RvckRpc2Vhc2VNb2RlbApkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvdmVjdG9yL1ZlY3RvckZhY3RvcnkuamF2YSBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3ZlY3Rvci9WZWN0b3JGYWN0b3J5LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTVlNTNmZQotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3ZlY3Rvci9WZWN0b3JGYWN0b3J5LmphdmEKQEAgLTAsMCArMSwxMDUgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3RvcjsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogCisgKiBDb3B5cmlnaHQgKGMpIDIwMTEgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuIAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyAKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0IAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwgCisgKiAKKyAqIENvbnRyaWJ1dG9yczogCisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUZhY3Rvcnk7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIFRoZSA8Yj5GYWN0b3J5PC9iPiBmb3IgdGhlIG1vZGVsLgorICogSXQgcHJvdmlkZXMgYSBjcmVhdGUgbWV0aG9kIGZvciBlYWNoIG5vbi1hYnN0cmFjdCBjbGFzcyBvZiB0aGUgbW9kZWwuCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5WZWN0b3JQYWNrYWdlCisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBpbnRlcmZhY2UgVmVjdG9yRmFjdG9yeSBleHRlbmRzIEVGYWN0b3J5IHsKKwkvKioKKwkgKiBUaGUgc2luZ2xldG9uIGluc3RhbmNlIG9mIHRoZSBmYWN0b3J5LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCVZlY3RvckZhY3RvcnkgZUlOU1RBTkNFID0gb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5pbXBsLlZlY3RvckZhY3RvcnlJbXBsLmluaXQoKTsKKworCS8qKgorCSAqIFJldHVybnMgYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+TWFjZG9uYWxkIFJvc3MgRGlzZWFzZSBNb2RlbDwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+TWFjZG9uYWxkIFJvc3MgRGlzZWFzZSBNb2RlbDwvZW0+Jy4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJTWFjZG9uYWxkUm9zc0Rpc2Vhc2VNb2RlbCBjcmVhdGVNYWNkb25hbGRSb3NzRGlzZWFzZU1vZGVsKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPkRlbmd1ZSBNb2RlbDwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+RGVuZ3VlIE1vZGVsPC9lbT4nLgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlEZW5ndWVNb2RlbCBjcmVhdGVEZW5ndWVNb2RlbCgpOworCisJLyoqCisJICogUmV0dXJucyBhIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5TaW1wbGUgRGVuZ3VlIE1vZGVsPC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiBhIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5TaW1wbGUgRGVuZ3VlIE1vZGVsPC9lbT4nLgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlTaW1wbGVEZW5ndWVNb2RlbCBjcmVhdGVTaW1wbGVEZW5ndWVNb2RlbCgpOworCisJLyoqCisJICogUmV0dXJucyBhIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5EZW5ndWUgTW9kZWwgSG9zdCBMYWJlbDwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+RGVuZ3VlIE1vZGVsIEhvc3QgTGFiZWw8L2VtPicuCisJICogQGdlbmVyYXRlZAorCSAqLworCURlbmd1ZU1vZGVsSG9zdExhYmVsIGNyZWF0ZURlbmd1ZU1vZGVsSG9zdExhYmVsKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPkRlbmd1ZSBNb2RlbCBIb3N0IExhYmVsIFZhbHVlPC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiBhIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5EZW5ndWUgTW9kZWwgSG9zdCBMYWJlbCBWYWx1ZTwvZW0+Jy4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZSBjcmVhdGVEZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPkRlbmd1ZSBNb2RlbCBWZWN0b3IgTGFiZWw8L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPkRlbmd1ZSBNb2RlbCBWZWN0b3IgTGFiZWw8L2VtPicuCisJICogQGdlbmVyYXRlZAorCSAqLworCURlbmd1ZU1vZGVsVmVjdG9yTGFiZWwgY3JlYXRlRGVuZ3VlTW9kZWxWZWN0b3JMYWJlbCgpOworCisJLyoqCisJICogUmV0dXJucyBhIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5EZW5ndWUgTW9kZWwgVmVjdG9yIExhYmVsIFZhbHVlPC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiBhIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5EZW5ndWUgTW9kZWwgVmVjdG9yIExhYmVsIFZhbHVlPC9lbT4nLgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlEZW5ndWVNb2RlbFZlY3RvckxhYmVsVmFsdWUgY3JlYXRlRGVuZ3VlTW9kZWxWZWN0b3JMYWJlbFZhbHVlKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBwYWNrYWdlIHN1cHBvcnRlZCBieSB0aGlzIGZhY3RvcnkuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBwYWNrYWdlIHN1cHBvcnRlZCBieSB0aGlzIGZhY3RvcnkuCisJICogQGdlbmVyYXRlZAorCSAqLworCVZlY3RvclBhY2thZ2UgZ2V0VmVjdG9yUGFja2FnZSgpOworCit9IC8vVmVjdG9yRmFjdG9yeQpkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvdmVjdG9yL1ZlY3RvclBhY2thZ2UuamF2YSBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3ZlY3Rvci9WZWN0b3JQYWNrYWdlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTg2OGFhNQotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3ZlY3Rvci9WZWN0b3JQYWNrYWdlLmphdmEKQEAgLTAsMCArMSw2ODE0IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3I7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIAorICogQ29weXJpZ2h0IChjKSAyMDExIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiAKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdCAKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sIAorICogCisgKiBDb250cmlidXRvcnM6IAorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiAKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVBdHRyaWJ1dGU7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzczsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRVBhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkUGFja2FnZTsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogVGhlIDxiPlBhY2thZ2U8L2I+IGZvciB0aGUgbW9kZWwuCisgKiBJdCBjb250YWlucyBhY2Nlc3NvcnMgZm9yIHRoZSBtZXRhIG9iamVjdHMgdG8gcmVwcmVzZW50CisgKiA8dWw+CisgKiAgIDxsaT5lYWNoIGNsYXNzLDwvbGk+CisgKiAgIDxsaT5lYWNoIGZlYXR1cmUgb2YgZWFjaCBjbGFzcyw8L2xpPgorICogICA8bGk+ZWFjaCBlbnVtLDwvbGk+CisgKiAgIDxsaT5hbmQgZWFjaCBkYXRhIHR5cGU8L2xpPgorICogPC91bD4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLlZlY3RvckZhY3RvcnkKKyAqIEBtb2RlbCBraW5kPSJwYWNrYWdlIgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgaW50ZXJmYWNlIFZlY3RvclBhY2thZ2UgZXh0ZW5kcyBFUGFja2FnZSB7CisJLyoqCisJICogVGhlIHBhY2thZ2UgbmFtZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlTdHJpbmcgZU5BTUUgPSAidmVjdG9yIjsKKworCS8qKgorCSAqIFRoZSBwYWNrYWdlIG5hbWVzcGFjZSBVUkkuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJU3RyaW5nIGVOU19VUkkgPSAiaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvdmVjdG9yLmVjb3JlIjsKKworCS8qKgorCSAqIFRoZSBwYWNrYWdlIG5hbWVzcGFjZSBuYW1lLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCVN0cmluZyBlTlNfUFJFRklYID0gIm9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IiOworCisJLyoqCisJICogVGhlIHNpbmdsZXRvbiBpbnN0YW5jZSBvZiB0aGUgcGFja2FnZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlWZWN0b3JQYWNrYWdlIGVJTlNUQU5DRSA9IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuaW1wbC5WZWN0b3JQYWNrYWdlSW1wbC5pbml0KCk7CisKKwkvKioKKwkgKiBUaGUgbWV0YSBvYmplY3QgaWQgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuaW1wbC5WZWN0b3JEaXNlYXNlTW9kZWxJbXBsIDxlbT5EaXNlYXNlIE1vZGVsPC9lbT59JyBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5pbXBsLlZlY3RvckRpc2Vhc2VNb2RlbEltcGwKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuaW1wbC5WZWN0b3JQYWNrYWdlSW1wbCNnZXRWZWN0b3JEaXNlYXNlTW9kZWwoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlpbnQgVkVDVE9SX0RJU0VBU0VfTU9ERUwgPSAxOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlVSSTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFZFQ1RPUl9ESVNFQVNFX01PREVMX19VUkkgPSBTdGFuZGFyZFBhY2thZ2UuU1RBTkRBUkRfRElTRUFTRV9NT0RFTF9fVVJJOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlR5cGUgVVJJPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgVkVDVE9SX0RJU0VBU0VfTU9ERUxfX1RZUEVfVVJJID0gU3RhbmRhcmRQYWNrYWdlLlNUQU5EQVJEX0RJU0VBU0VfTU9ERUxfX1RZUEVfVVJJOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkR1YmxpbiBDb3JlPC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgVkVDVE9SX0RJU0VBU0VfTU9ERUxfX0RVQkxJTl9DT1JFID0gU3RhbmRhcmRQYWNrYWdlLlNUQU5EQVJEX0RJU0VBU0VfTU9ERUxfX0RVQkxJTl9DT1JFOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkxhYmVscyBUbyBVcGRhdGU8L2I+PC9lbT4nIHJlZmVyZW5jZSBsaXN0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFZFQ1RPUl9ESVNFQVNFX01PREVMX19MQUJFTFNfVE9fVVBEQVRFID0gU3RhbmRhcmRQYWNrYWdlLlNUQU5EQVJEX0RJU0VBU0VfTU9ERUxfX0xBQkVMU19UT19VUERBVEU7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+R3JhcGg8L2I+PC9lbT4nIGNvbnRhaW5lciByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgVkVDVE9SX0RJU0VBU0VfTU9ERUxfX0dSQVBIID0gU3RhbmRhcmRQYWNrYWdlLlNUQU5EQVJEX0RJU0VBU0VfTU9ERUxfX0dSQVBIOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkVuYWJsZWQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBWRUNUT1JfRElTRUFTRV9NT0RFTF9fRU5BQkxFRCA9IFN0YW5kYXJkUGFja2FnZS5TVEFOREFSRF9ESVNFQVNFX01PREVMX19FTkFCTEVEOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkdyYXBoIERlY29yYXRlZDwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFZFQ1RPUl9ESVNFQVNFX01PREVMX19HUkFQSF9ERUNPUkFURUQgPSBTdGFuZGFyZFBhY2thZ2UuU1RBTkRBUkRfRElTRUFTRV9NT0RFTF9fR1JBUEhfREVDT1JBVEVEOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlByb2dyZXNzPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgVkVDVE9SX0RJU0VBU0VfTU9ERUxfX1BST0dSRVNTID0gU3RhbmRhcmRQYWNrYWdlLlNUQU5EQVJEX0RJU0VBU0VfTU9ERUxfX1BST0dSRVNTOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlBvcHVsYXRpb24gSWRlbnRpZmllcjwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFZFQ1RPUl9ESVNFQVNFX01PREVMX19QT1BVTEFUSU9OX0lERU5USUZJRVIgPSBTdGFuZGFyZFBhY2thZ2UuU1RBTkRBUkRfRElTRUFTRV9NT0RFTF9fUE9QVUxBVElPTl9JREVOVElGSUVSOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlRpbWUgUGVyaW9kPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgVkVDVE9SX0RJU0VBU0VfTU9ERUxfX1RJTUVfUEVSSU9EID0gU3RhbmRhcmRQYWNrYWdlLlNUQU5EQVJEX0RJU0VBU0VfTU9ERUxfX1RJTUVfUEVSSU9EOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkRpc2Vhc2UgTmFtZTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFZFQ1RPUl9ESVNFQVNFX01PREVMX19ESVNFQVNFX05BTUUgPSBTdGFuZGFyZFBhY2thZ2UuU1RBTkRBUkRfRElTRUFTRV9NT0RFTF9fRElTRUFTRV9OQU1FOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkZpbml0ZSBEaWZmZXJlbmNlPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgVkVDVE9SX0RJU0VBU0VfTU9ERUxfX0ZJTklURV9ESUZGRVJFTkNFID0gU3RhbmRhcmRQYWNrYWdlLlNUQU5EQVJEX0RJU0VBU0VfTU9ERUxfX0ZJTklURV9ESUZGRVJFTkNFOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkZyZXF1ZW5jeSBEZXBlbmRlbnQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBWRUNUT1JfRElTRUFTRV9NT0RFTF9fRlJFUVVFTkNZX0RFUEVOREVOVCA9IFN0YW5kYXJkUGFja2FnZS5TVEFOREFSRF9ESVNFQVNFX01PREVMX19GUkVRVUVOQ1lfREVQRU5ERU5UOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlJlZmVyZW5jZSBQb3B1bGF0aW9uIERlbnNpdHk8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBWRUNUT1JfRElTRUFTRV9NT0RFTF9fUkVGRVJFTkNFX1BPUFVMQVRJT05fREVOU0lUWSA9IFN0YW5kYXJkUGFja2FnZS5TVEFOREFSRF9ESVNFQVNFX01PREVMX19SRUZFUkVOQ0VfUE9QVUxBVElPTl9ERU5TSVRZOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlJvYWQgTmV0d29yayBJbmZlY3Rpb3VzIFByb3BvcnRpb248L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBWRUNUT1JfRElTRUFTRV9NT0RFTF9fUk9BRF9ORVRXT1JLX0lORkVDVElPVVNfUFJPUE9SVElPTiA9IFN0YW5kYXJkUGFja2FnZS5TVEFOREFSRF9ESVNFQVNFX01PREVMX19ST0FEX05FVFdPUktfSU5GRUNUSU9VU19QUk9QT1JUSU9OOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkNoYXJhY3RlcmlzdGljIE1peGluZyBEaXN0YW5jZTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFZFQ1RPUl9ESVNFQVNFX01PREVMX19DSEFSQUNURVJJU1RJQ19NSVhJTkdfRElTVEFOQ0UgPSBTdGFuZGFyZFBhY2thZ2UuU1RBTkRBUkRfRElTRUFTRV9NT0RFTF9fQ0hBUkFDVEVSSVNUSUNfTUlYSU5HX0RJU1RBTkNFOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlZlY3RvciBQb3B1bGF0aW9uIElkZW50aWZpZXI8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBWRUNUT1JfRElTRUFTRV9NT0RFTF9fVkVDVE9SX1BPUFVMQVRJT05fSURFTlRJRklFUiA9IFN0YW5kYXJkUGFja2FnZS5TVEFOREFSRF9ESVNFQVNFX01PREVMX0ZFQVRVUkVfQ09VTlQgKyAwOworCisJLyoqCisJICogVGhlIG51bWJlciBvZiBzdHJ1Y3R1cmFsIGZlYXR1cmVzIG9mIHRoZSAnPGVtPkRpc2Vhc2UgTW9kZWw8L2VtPicgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgVkVDVE9SX0RJU0VBU0VfTU9ERUxfRkVBVFVSRV9DT1VOVCA9IFN0YW5kYXJkUGFja2FnZS5TVEFOREFSRF9ESVNFQVNFX01PREVMX0ZFQVRVUkVfQ09VTlQgKyAxOworCisJLyoqCisJICogVGhlIG1ldGEgb2JqZWN0IGlkIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLmltcGwuTWFjZG9uYWxkUm9zc0Rpc2Vhc2VNb2RlbEltcGwgPGVtPk1hY2RvbmFsZCBSb3NzIERpc2Vhc2UgTW9kZWw8L2VtPn0nIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLmltcGwuTWFjZG9uYWxkUm9zc0Rpc2Vhc2VNb2RlbEltcGwKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuaW1wbC5WZWN0b3JQYWNrYWdlSW1wbCNnZXRNYWNkb25hbGRSb3NzRGlzZWFzZU1vZGVsKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJaW50IE1BQ0RPTkFMRF9ST1NTX0RJU0VBU0VfTU9ERUwgPSAwOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlVSSTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IE1BQ0RPTkFMRF9ST1NTX0RJU0VBU0VfTU9ERUxfX1VSSSA9IFZFQ1RPUl9ESVNFQVNFX01PREVMX19VUkk7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VHlwZSBVUkk8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBNQUNET05BTERfUk9TU19ESVNFQVNFX01PREVMX19UWVBFX1VSSSA9IFZFQ1RPUl9ESVNFQVNFX01PREVMX19UWVBFX1VSSTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5EdWJsaW4gQ29yZTwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IE1BQ0RPTkFMRF9ST1NTX0RJU0VBU0VfTU9ERUxfX0RVQkxJTl9DT1JFID0gVkVDVE9SX0RJU0VBU0VfTU9ERUxfX0RVQkxJTl9DT1JFOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkxhYmVscyBUbyBVcGRhdGU8L2I+PC9lbT4nIHJlZmVyZW5jZSBsaXN0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IE1BQ0RPTkFMRF9ST1NTX0RJU0VBU0VfTU9ERUxfX0xBQkVMU19UT19VUERBVEUgPSBWRUNUT1JfRElTRUFTRV9NT0RFTF9fTEFCRUxTX1RPX1VQREFURTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5HcmFwaDwvYj48L2VtPicgY29udGFpbmVyIHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBNQUNET05BTERfUk9TU19ESVNFQVNFX01PREVMX19HUkFQSCA9IFZFQ1RPUl9ESVNFQVNFX01PREVMX19HUkFQSDsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5FbmFibGVkPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgTUFDRE9OQUxEX1JPU1NfRElTRUFTRV9NT0RFTF9fRU5BQkxFRCA9IFZFQ1RPUl9ESVNFQVNFX01PREVMX19FTkFCTEVEOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkdyYXBoIERlY29yYXRlZDwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IE1BQ0RPTkFMRF9ST1NTX0RJU0VBU0VfTU9ERUxfX0dSQVBIX0RFQ09SQVRFRCA9IFZFQ1RPUl9ESVNFQVNFX01PREVMX19HUkFQSF9ERUNPUkFURUQ7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+UHJvZ3Jlc3M8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBNQUNET05BTERfUk9TU19ESVNFQVNFX01PREVMX19QUk9HUkVTUyA9IFZFQ1RPUl9ESVNFQVNFX01PREVMX19QUk9HUkVTUzsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5Qb3B1bGF0aW9uIElkZW50aWZpZXI8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBNQUNET05BTERfUk9TU19ESVNFQVNFX01PREVMX19QT1BVTEFUSU9OX0lERU5USUZJRVIgPSBWRUNUT1JfRElTRUFTRV9NT0RFTF9fUE9QVUxBVElPTl9JREVOVElGSUVSOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlRpbWUgUGVyaW9kPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgTUFDRE9OQUxEX1JPU1NfRElTRUFTRV9NT0RFTF9fVElNRV9QRVJJT0QgPSBWRUNUT1JfRElTRUFTRV9NT0RFTF9fVElNRV9QRVJJT0Q7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RGlzZWFzZSBOYW1lPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgTUFDRE9OQUxEX1JPU1NfRElTRUFTRV9NT0RFTF9fRElTRUFTRV9OQU1FID0gVkVDVE9SX0RJU0VBU0VfTU9ERUxfX0RJU0VBU0VfTkFNRTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5GaW5pdGUgRGlmZmVyZW5jZTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IE1BQ0RPTkFMRF9ST1NTX0RJU0VBU0VfTU9ERUxfX0ZJTklURV9ESUZGRVJFTkNFID0gVkVDVE9SX0RJU0VBU0VfTU9ERUxfX0ZJTklURV9ESUZGRVJFTkNFOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkZyZXF1ZW5jeSBEZXBlbmRlbnQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBNQUNET05BTERfUk9TU19ESVNFQVNFX01PREVMX19GUkVRVUVOQ1lfREVQRU5ERU5UID0gVkVDVE9SX0RJU0VBU0VfTU9ERUxfX0ZSRVFVRU5DWV9ERVBFTkRFTlQ7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+UmVmZXJlbmNlIFBvcHVsYXRpb24gRGVuc2l0eTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IE1BQ0RPTkFMRF9ST1NTX0RJU0VBU0VfTU9ERUxfX1JFRkVSRU5DRV9QT1BVTEFUSU9OX0RFTlNJVFkgPSBWRUNUT1JfRElTRUFTRV9NT0RFTF9fUkVGRVJFTkNFX1BPUFVMQVRJT05fREVOU0lUWTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5Sb2FkIE5ldHdvcmsgSW5mZWN0aW91cyBQcm9wb3J0aW9uPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgTUFDRE9OQUxEX1JPU1NfRElTRUFTRV9NT0RFTF9fUk9BRF9ORVRXT1JLX0lORkVDVElPVVNfUFJPUE9SVElPTiA9IFZFQ1RPUl9ESVNFQVNFX01PREVMX19ST0FEX05FVFdPUktfSU5GRUNUSU9VU19QUk9QT1JUSU9OOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkNoYXJhY3RlcmlzdGljIE1peGluZyBEaXN0YW5jZTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IE1BQ0RPTkFMRF9ST1NTX0RJU0VBU0VfTU9ERUxfX0NIQVJBQ1RFUklTVElDX01JWElOR19ESVNUQU5DRSA9IFZFQ1RPUl9ESVNFQVNFX01PREVMX19DSEFSQUNURVJJU1RJQ19NSVhJTkdfRElTVEFOQ0U7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VmVjdG9yIFBvcHVsYXRpb24gSWRlbnRpZmllcjwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IE1BQ0RPTkFMRF9ST1NTX0RJU0VBU0VfTU9ERUxfX1ZFQ1RPUl9QT1BVTEFUSU9OX0lERU5USUZJRVIgPSBWRUNUT1JfRElTRUFTRV9NT0RFTF9fVkVDVE9SX1BPUFVMQVRJT05fSURFTlRJRklFUjsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5CaXRpbmcgUmF0ZTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IE1BQ0RPTkFMRF9ST1NTX0RJU0VBU0VfTU9ERUxfX0JJVElOR19SQVRFID0gVkVDVE9SX0RJU0VBU0VfTU9ERUxfRkVBVFVSRV9DT1VOVCArIDA7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+SW5mZWN0aW91cyBCaXRpbmcgUHJvcG9ydGlvbiBIdW1hbjwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IE1BQ0RPTkFMRF9ST1NTX0RJU0VBU0VfTU9ERUxfX0lORkVDVElPVVNfQklUSU5HX1BST1BPUlRJT05fSFVNQU4gPSBWRUNUT1JfRElTRUFTRV9NT0RFTF9GRUFUVVJFX0NPVU5UICsgMTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5JbmZlY3Rpb3VzIEJpdGluZyBQcm9wb3J0aW9uIFZlY3RvcjwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IE1BQ0RPTkFMRF9ST1NTX0RJU0VBU0VfTU9ERUxfX0lORkVDVElPVVNfQklUSU5HX1BST1BPUlRJT05fVkVDVE9SID0gVkVDVE9SX0RJU0VBU0VfTU9ERUxfRkVBVFVSRV9DT1VOVCArIDI7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+UmVjb3ZlcnkgUmF0ZTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IE1BQ0RPTkFMRF9ST1NTX0RJU0VBU0VfTU9ERUxfX1JFQ09WRVJZX1JBVEUgPSBWRUNUT1JfRElTRUFTRV9NT0RFTF9GRUFUVVJFX0NPVU5UICsgMzsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5JbmN1YmF0aW9uIFJhdGU8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBNQUNET05BTERfUk9TU19ESVNFQVNFX01PREVMX19JTkNVQkFUSU9OX1JBVEUgPSBWRUNUT1JfRElTRUFTRV9NT0RFTF9GRUFUVVJFX0NPVU5UICsgNDsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5WZWN0b3IgSW5jdWJhdGlvbiBSYXRlPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgTUFDRE9OQUxEX1JPU1NfRElTRUFTRV9NT0RFTF9fVkVDVE9SX0lOQ1VCQVRJT05fUkFURSA9IFZFQ1RPUl9ESVNFQVNFX01PREVMX0ZFQVRVUkVfQ09VTlQgKyA1OworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkltbXVuaXR5IExvc3MgUmF0ZTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IE1BQ0RPTkFMRF9ST1NTX0RJU0VBU0VfTU9ERUxfX0lNTVVOSVRZX0xPU1NfUkFURSA9IFZFQ1RPUl9ESVNFQVNFX01PREVMX0ZFQVRVUkVfQ09VTlQgKyA2OworCisJLyoqCisJICogVGhlIG51bWJlciBvZiBzdHJ1Y3R1cmFsIGZlYXR1cmVzIG9mIHRoZSAnPGVtPk1hY2RvbmFsZCBSb3NzIERpc2Vhc2UgTW9kZWw8L2VtPicgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgTUFDRE9OQUxEX1JPU1NfRElTRUFTRV9NT0RFTF9GRUFUVVJFX0NPVU5UID0gVkVDVE9SX0RJU0VBU0VfTU9ERUxfRkVBVFVSRV9DT1VOVCArIDc7CisKKworCS8qKgorCSAqIFRoZSBtZXRhIG9iamVjdCBpZCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5pbXBsLkRlbmd1ZU1vZGVsSW1wbCA8ZW0+RGVuZ3VlIE1vZGVsPC9lbT59JyBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5pbXBsLkRlbmd1ZU1vZGVsSW1wbAorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5pbXBsLlZlY3RvclBhY2thZ2VJbXBsI2dldERlbmd1ZU1vZGVsKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJaW50IERFTkdVRV9NT0RFTCA9IDI7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VVJJPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgREVOR1VFX01PREVMX19VUkkgPSBWRUNUT1JfRElTRUFTRV9NT0RFTF9fVVJJOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlR5cGUgVVJJPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgREVOR1VFX01PREVMX19UWVBFX1VSSSA9IFZFQ1RPUl9ESVNFQVNFX01PREVMX19UWVBFX1VSSTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5EdWJsaW4gQ29yZTwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IERFTkdVRV9NT0RFTF9fRFVCTElOX0NPUkUgPSBWRUNUT1JfRElTRUFTRV9NT0RFTF9fRFVCTElOX0NPUkU7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+TGFiZWxzIFRvIFVwZGF0ZTwvYj48L2VtPicgcmVmZXJlbmNlIGxpc3QuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgREVOR1VFX01PREVMX19MQUJFTFNfVE9fVVBEQVRFID0gVkVDVE9SX0RJU0VBU0VfTU9ERUxfX0xBQkVMU19UT19VUERBVEU7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+R3JhcGg8L2I+PC9lbT4nIGNvbnRhaW5lciByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgREVOR1VFX01PREVMX19HUkFQSCA9IFZFQ1RPUl9ESVNFQVNFX01PREVMX19HUkFQSDsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5FbmFibGVkPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgREVOR1VFX01PREVMX19FTkFCTEVEID0gVkVDVE9SX0RJU0VBU0VfTU9ERUxfX0VOQUJMRUQ7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+R3JhcGggRGVjb3JhdGVkPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgREVOR1VFX01PREVMX19HUkFQSF9ERUNPUkFURUQgPSBWRUNUT1JfRElTRUFTRV9NT0RFTF9fR1JBUEhfREVDT1JBVEVEOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlByb2dyZXNzPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgREVOR1VFX01PREVMX19QUk9HUkVTUyA9IFZFQ1RPUl9ESVNFQVNFX01PREVMX19QUk9HUkVTUzsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5Qb3B1bGF0aW9uIElkZW50aWZpZXI8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBERU5HVUVfTU9ERUxfX1BPUFVMQVRJT05fSURFTlRJRklFUiA9IFZFQ1RPUl9ESVNFQVNFX01PREVMX19QT1BVTEFUSU9OX0lERU5USUZJRVI7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VGltZSBQZXJpb2Q8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBERU5HVUVfTU9ERUxfX1RJTUVfUEVSSU9EID0gVkVDVE9SX0RJU0VBU0VfTU9ERUxfX1RJTUVfUEVSSU9EOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkRpc2Vhc2UgTmFtZTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IERFTkdVRV9NT0RFTF9fRElTRUFTRV9OQU1FID0gVkVDVE9SX0RJU0VBU0VfTU9ERUxfX0RJU0VBU0VfTkFNRTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5GaW5pdGUgRGlmZmVyZW5jZTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IERFTkdVRV9NT0RFTF9fRklOSVRFX0RJRkZFUkVOQ0UgPSBWRUNUT1JfRElTRUFTRV9NT0RFTF9fRklOSVRFX0RJRkZFUkVOQ0U7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RnJlcXVlbmN5IERlcGVuZGVudDwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IERFTkdVRV9NT0RFTF9fRlJFUVVFTkNZX0RFUEVOREVOVCA9IFZFQ1RPUl9ESVNFQVNFX01PREVMX19GUkVRVUVOQ1lfREVQRU5ERU5UOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlJlZmVyZW5jZSBQb3B1bGF0aW9uIERlbnNpdHk8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBERU5HVUVfTU9ERUxfX1JFRkVSRU5DRV9QT1BVTEFUSU9OX0RFTlNJVFkgPSBWRUNUT1JfRElTRUFTRV9NT0RFTF9fUkVGRVJFTkNFX1BPUFVMQVRJT05fREVOU0lUWTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5Sb2FkIE5ldHdvcmsgSW5mZWN0aW91cyBQcm9wb3J0aW9uPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgREVOR1VFX01PREVMX19ST0FEX05FVFdPUktfSU5GRUNUSU9VU19QUk9QT1JUSU9OID0gVkVDVE9SX0RJU0VBU0VfTU9ERUxfX1JPQURfTkVUV09SS19JTkZFQ1RJT1VTX1BST1BPUlRJT047CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+Q2hhcmFjdGVyaXN0aWMgTWl4aW5nIERpc3RhbmNlPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgREVOR1VFX01PREVMX19DSEFSQUNURVJJU1RJQ19NSVhJTkdfRElTVEFOQ0UgPSBWRUNUT1JfRElTRUFTRV9NT0RFTF9fQ0hBUkFDVEVSSVNUSUNfTUlYSU5HX0RJU1RBTkNFOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlZlY3RvciBQb3B1bGF0aW9uIElkZW50aWZpZXI8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBERU5HVUVfTU9ERUxfX1ZFQ1RPUl9QT1BVTEFUSU9OX0lERU5USUZJRVIgPSBWRUNUT1JfRElTRUFTRV9NT0RFTF9fVkVDVE9SX1BPUFVMQVRJT05fSURFTlRJRklFUjsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5CaXRpbmcgUmF0ZSBTVjwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IERFTkdVRV9NT0RFTF9fQklUSU5HX1JBVEVfU1YgPSBWRUNUT1JfRElTRUFTRV9NT0RFTF9GRUFUVVJFX0NPVU5UICsgMDsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5CaXRpbmcgUmF0ZSBJVjwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IERFTkdVRV9NT0RFTF9fQklUSU5HX1JBVEVfSVYgPSBWRUNUT1JfRElTRUFTRV9NT0RFTF9GRUFUVVJFX0NPVU5UICsgMTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5Ib3N0IEluZmVjdGl2aXR5MTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IERFTkdVRV9NT0RFTF9fSE9TVF9JTkZFQ1RJVklUWTEgPSBWRUNUT1JfRElTRUFTRV9NT0RFTF9GRUFUVVJFX0NPVU5UICsgMjsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5Ib3N0IEluZmVjdGl2aXR5MjwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IERFTkdVRV9NT0RFTF9fSE9TVF9JTkZFQ1RJVklUWTIgPSBWRUNUT1JfRElTRUFTRV9NT0RFTF9GRUFUVVJFX0NPVU5UICsgMzsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5Ib3N0IEluZmVjdGl2aXR5MzwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IERFTkdVRV9NT0RFTF9fSE9TVF9JTkZFQ1RJVklUWTMgPSBWRUNUT1JfRElTRUFTRV9NT0RFTF9GRUFUVVJFX0NPVU5UICsgNDsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5Ib3N0IEluZmVjdGl2aXR5NDwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IERFTkdVRV9NT0RFTF9fSE9TVF9JTkZFQ1RJVklUWTQgPSBWRUNUT1JfRElTRUFTRV9NT0RFTF9GRUFUVVJFX0NPVU5UICsgNTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5Ib3N0IFByaW1hcnkgSW5jdWJhdGlvbiBSYXRlMTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IERFTkdVRV9NT0RFTF9fSE9TVF9QUklNQVJZX0lOQ1VCQVRJT05fUkFURTEgPSBWRUNUT1JfRElTRUFTRV9NT0RFTF9GRUFUVVJFX0NPVU5UICsgNjsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5Ib3N0IFByaW1hcnkgSW5jdWJhdGlvbiBSYXRlMjwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IERFTkdVRV9NT0RFTF9fSE9TVF9QUklNQVJZX0lOQ1VCQVRJT05fUkFURTIgPSBWRUNUT1JfRElTRUFTRV9NT0RFTF9GRUFUVVJFX0NPVU5UICsgNzsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5Ib3N0IFByaW1hcnkgSW5jdWJhdGlvbiBSYXRlMzwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IERFTkdVRV9NT0RFTF9fSE9TVF9QUklNQVJZX0lOQ1VCQVRJT05fUkFURTMgPSBWRUNUT1JfRElTRUFTRV9NT0RFTF9GRUFUVVJFX0NPVU5UICsgODsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5Ib3N0IFByaW1hcnkgSW5jdWJhdGlvbiBSYXRlNDwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IERFTkdVRV9NT0RFTF9fSE9TVF9QUklNQVJZX0lOQ1VCQVRJT05fUkFURTQgPSBWRUNUT1JfRElTRUFTRV9NT0RFTF9GRUFUVVJFX0NPVU5UICsgOTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5Ib3N0IFByaW1hcnkgUmVjb3ZlcnkgUmF0ZTE8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBERU5HVUVfTU9ERUxfX0hPU1RfUFJJTUFSWV9SRUNPVkVSWV9SQVRFMSA9IFZFQ1RPUl9ESVNFQVNFX01PREVMX0ZFQVRVUkVfQ09VTlQgKyAxMDsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5Ib3N0IFByaW1hcnkgUmVjb3ZlcnkgUmF0ZTI8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBERU5HVUVfTU9ERUxfX0hPU1RfUFJJTUFSWV9SRUNPVkVSWV9SQVRFMiA9IFZFQ1RPUl9ESVNFQVNFX01PREVMX0ZFQVRVUkVfQ09VTlQgKyAxMTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5Ib3N0IFByaW1hcnkgUmVjb3ZlcnkgUmF0ZTM8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBERU5HVUVfTU9ERUxfX0hPU1RfUFJJTUFSWV9SRUNPVkVSWV9SQVRFMyA9IFZFQ1RPUl9ESVNFQVNFX01PREVMX0ZFQVRVUkVfQ09VTlQgKyAxMjsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5Ib3N0IFByaW1hcnkgUmVjb3ZlcnkgUmF0ZTQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBERU5HVUVfTU9ERUxfX0hPU1RfUFJJTUFSWV9SRUNPVkVSWV9SQVRFNCA9IFZFQ1RPUl9ESVNFQVNFX01PREVMX0ZFQVRVUkVfQ09VTlQgKyAxMzsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5Ib3N0IFByaW1hcnkgSW1tdW5pdHkgTG9zcyBSYXRlMTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IERFTkdVRV9NT0RFTF9fSE9TVF9QUklNQVJZX0lNTVVOSVRZX0xPU1NfUkFURTEgPSBWRUNUT1JfRElTRUFTRV9NT0RFTF9GRUFUVVJFX0NPVU5UICsgMTQ7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+SG9zdCBQcmltYXJ5IEltbXVuaXR5IExvc3MgUmF0ZTI8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBERU5HVUVfTU9ERUxfX0hPU1RfUFJJTUFSWV9JTU1VTklUWV9MT1NTX1JBVEUyID0gVkVDVE9SX0RJU0VBU0VfTU9ERUxfRkVBVFVSRV9DT1VOVCArIDE1OworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkhvc3QgUHJpbWFyeSBJbW11bml0eSBMb3NzIFJhdGUzPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgREVOR1VFX01PREVMX19IT1NUX1BSSU1BUllfSU1NVU5JVFlfTE9TU19SQVRFMyA9IFZFQ1RPUl9ESVNFQVNFX01PREVMX0ZFQVRVUkVfQ09VTlQgKyAxNjsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5Ib3N0IFByaW1hcnkgSW1tdW5pdHkgTG9zcyBSYXRlNDwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IERFTkdVRV9NT0RFTF9fSE9TVF9QUklNQVJZX0lNTVVOSVRZX0xPU1NfUkFURTQgPSBWRUNUT1JfRElTRUFTRV9NT0RFTF9GRUFUVVJFX0NPVU5UICsgMTc7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+SG9zdCBQcmltYXJ5IERpc2Vhc2UgRGVhdGggUmF0ZTE8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBERU5HVUVfTU9ERUxfX0hPU1RfUFJJTUFSWV9ESVNFQVNFX0RFQVRIX1JBVEUxID0gVkVDVE9SX0RJU0VBU0VfTU9ERUxfRkVBVFVSRV9DT1VOVCArIDE4OworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkhvc3QgUHJpbWFyeSBEaXNlYXNlIERlYXRoIFJhdGUyPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgREVOR1VFX01PREVMX19IT1NUX1BSSU1BUllfRElTRUFTRV9ERUFUSF9SQVRFMiA9IFZFQ1RPUl9ESVNFQVNFX01PREVMX0ZFQVRVUkVfQ09VTlQgKyAxOTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5Ib3N0IFByaW1hcnkgRGlzZWFzZSBEZWF0aCBSYXRlMzwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IERFTkdVRV9NT0RFTF9fSE9TVF9QUklNQVJZX0RJU0VBU0VfREVBVEhfUkFURTMgPSBWRUNUT1JfRElTRUFTRV9NT0RFTF9GRUFUVVJFX0NPVU5UICsgMjA7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+SG9zdCBQcmltYXJ5IERpc2Vhc2UgRGVhdGggUmF0ZTQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBERU5HVUVfTU9ERUxfX0hPU1RfUFJJTUFSWV9ESVNFQVNFX0RFQVRIX1JBVEU0ID0gVkVDVE9SX0RJU0VBU0VfTU9ERUxfRkVBVFVSRV9DT1VOVCArIDIxOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkhvc3QgQURFMTI8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBERU5HVUVfTU9ERUxfX0hPU1RfQURFMTIgPSBWRUNUT1JfRElTRUFTRV9NT0RFTF9GRUFUVVJFX0NPVU5UICsgMjI7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+SG9zdCBBREUxMzwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IERFTkdVRV9NT0RFTF9fSE9TVF9BREUxMyA9IFZFQ1RPUl9ESVNFQVNFX01PREVMX0ZFQVRVUkVfQ09VTlQgKyAyMzsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5Ib3N0IEFERTE0PC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgREVOR1VFX01PREVMX19IT1NUX0FERTE0ID0gVkVDVE9SX0RJU0VBU0VfTU9ERUxfRkVBVFVSRV9DT1VOVCArIDI0OworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkhvc3QgQURFMjE8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBERU5HVUVfTU9ERUxfX0hPU1RfQURFMjEgPSBWRUNUT1JfRElTRUFTRV9NT0RFTF9GRUFUVVJFX0NPVU5UICsgMjU7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+SG9zdCBBREUyMzwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IERFTkdVRV9NT0RFTF9fSE9TVF9BREUyMyA9IFZFQ1RPUl9ESVNFQVNFX01PREVMX0ZFQVRVUkVfQ09VTlQgKyAyNjsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5Ib3N0IEFERTI0PC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgREVOR1VFX01PREVMX19IT1NUX0FERTI0ID0gVkVDVE9SX0RJU0VBU0VfTU9ERUxfRkVBVFVSRV9DT1VOVCArIDI3OworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkhvc3QgQURFMzE8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBERU5HVUVfTU9ERUxfX0hPU1RfQURFMzEgPSBWRUNUT1JfRElTRUFTRV9NT0RFTF9GRUFUVVJFX0NPVU5UICsgMjg7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+SG9zdCBBREUzMjwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IERFTkdVRV9NT0RFTF9fSE9TVF9BREUzMiA9IFZFQ1RPUl9ESVNFQVNFX01PREVMX0ZFQVRVUkVfQ09VTlQgKyAyOTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5Ib3N0IEFERTM0PC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgREVOR1VFX01PREVMX19IT1NUX0FERTM0ID0gVkVDVE9SX0RJU0VBU0VfTU9ERUxfRkVBVFVSRV9DT1VOVCArIDMwOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkhvc3QgQURFNDE8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBERU5HVUVfTU9ERUxfX0hPU1RfQURFNDEgPSBWRUNUT1JfRElTRUFTRV9NT0RFTF9GRUFUVVJFX0NPVU5UICsgMzE7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+SG9zdCBBREU0MjwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IERFTkdVRV9NT0RFTF9fSE9TVF9BREU0MiA9IFZFQ1RPUl9ESVNFQVNFX01PREVMX0ZFQVRVUkVfQ09VTlQgKyAzMjsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5Ib3N0IEFERTQzPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgREVOR1VFX01PREVMX19IT1NUX0FERTQzID0gVkVDVE9SX0RJU0VBU0VfTU9ERUxfRkVBVFVSRV9DT1VOVCArIDMzOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkhvc3QgU2Vjb25kYXJ5IERpc2Vhc2UgRGVhdGggUmF0ZTEyPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgREVOR1VFX01PREVMX19IT1NUX1NFQ09OREFSWV9ESVNFQVNFX0RFQVRIX1JBVEUxMiA9IFZFQ1RPUl9ESVNFQVNFX01PREVMX0ZFQVRVUkVfQ09VTlQgKyAzNDsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5Ib3N0IFNlY29uZGFyeSBEaXNlYXNlIERlYXRoIFJhdGUxMzwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IERFTkdVRV9NT0RFTF9fSE9TVF9TRUNPTkRBUllfRElTRUFTRV9ERUFUSF9SQVRFMTMgPSBWRUNUT1JfRElTRUFTRV9NT0RFTF9GRUFUVVJFX0NPVU5UICsgMzU7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+SG9zdCBTZWNvbmRhcnkgRGlzZWFzZSBEZWF0aCBSYXRlMTQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBERU5HVUVfTU9ERUxfX0hPU1RfU0VDT05EQVJZX0RJU0VBU0VfREVBVEhfUkFURTE0ID0gVkVDVE9SX0RJU0VBU0VfTU9ERUxfRkVBVFVSRV9DT1VOVCArIDM2OworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkhvc3QgU2Vjb25kYXJ5IERpc2Vhc2UgRGVhdGggUmF0ZTIxPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgREVOR1VFX01PREVMX19IT1NUX1NFQ09OREFSWV9ESVNFQVNFX0RFQVRIX1JBVEUyMSA9IFZFQ1RPUl9ESVNFQVNFX01PREVMX0ZFQVRVUkVfQ09VTlQgKyAzNzsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5Ib3N0IFNlY29uZGFyeSBEaXNlYXNlIERlYXRoIFJhdGUyMzwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IERFTkdVRV9NT0RFTF9fSE9TVF9TRUNPTkRBUllfRElTRUFTRV9ERUFUSF9SQVRFMjMgPSBWRUNUT1JfRElTRUFTRV9NT0RFTF9GRUFUVVJFX0NPVU5UICsgMzg7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+SG9zdCBTZWNvbmRhcnkgRGlzZWFzZSBEZWF0aCBSYXRlMjQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBERU5HVUVfTU9ERUxfX0hPU1RfU0VDT05EQVJZX0RJU0VBU0VfREVBVEhfUkFURTI0ID0gVkVDVE9SX0RJU0VBU0VfTU9ERUxfRkVBVFVSRV9DT1VOVCArIDM5OworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkhvc3QgU2Vjb25kYXJ5IERpc2Vhc2UgRGVhdGggUmF0ZTMxPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgREVOR1VFX01PREVMX19IT1NUX1NFQ09OREFSWV9ESVNFQVNFX0RFQVRIX1JBVEUzMSA9IFZFQ1RPUl9ESVNFQVNFX01PREVMX0ZFQVRVUkVfQ09VTlQgKyA0MDsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5Ib3N0IFNlY29uZGFyeSBEaXNlYXNlIERlYXRoIFJhdGUzMjwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IERFTkdVRV9NT0RFTF9fSE9TVF9TRUNPTkRBUllfRElTRUFTRV9ERUFUSF9SQVRFMzIgPSBWRUNUT1JfRElTRUFTRV9NT0RFTF9GRUFUVVJFX0NPVU5UICsgNDE7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+SG9zdCBTZWNvbmRhcnkgRGlzZWFzZSBEZWF0aCBSYXRlMzQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBERU5HVUVfTU9ERUxfX0hPU1RfU0VDT05EQVJZX0RJU0VBU0VfREVBVEhfUkFURTM0ID0gVkVDVE9SX0RJU0VBU0VfTU9ERUxfRkVBVFVSRV9DT1VOVCArIDQyOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkhvc3QgU2Vjb25kYXJ5IERpc2Vhc2UgRGVhdGggUmF0ZTQxPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgREVOR1VFX01PREVMX19IT1NUX1NFQ09OREFSWV9ESVNFQVNFX0RFQVRIX1JBVEU0MSA9IFZFQ1RPUl9ESVNFQVNFX01PREVMX0ZFQVRVUkVfQ09VTlQgKyA0MzsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5Ib3N0IFNlY29uZGFyeSBEaXNlYXNlIERlYXRoIFJhdGU0MjwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IERFTkdVRV9NT0RFTF9fSE9TVF9TRUNPTkRBUllfRElTRUFTRV9ERUFUSF9SQVRFNDIgPSBWRUNUT1JfRElTRUFTRV9NT0RFTF9GRUFUVVJFX0NPVU5UICsgNDQ7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+SG9zdCBTZWNvbmRhcnkgRGlzZWFzZSBEZWF0aCBSYXRlNDM8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBERU5HVUVfTU9ERUxfX0hPU1RfU0VDT05EQVJZX0RJU0VBU0VfREVBVEhfUkFURTQzID0gVkVDVE9SX0RJU0VBU0VfTU9ERUxfRkVBVFVSRV9DT1VOVCArIDQ1OworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkhvc3QgU2Vjb25kYXJ5IFJlY292ZXJ5IFJhdGUxMjwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IERFTkdVRV9NT0RFTF9fSE9TVF9TRUNPTkRBUllfUkVDT1ZFUllfUkFURTEyID0gVkVDVE9SX0RJU0VBU0VfTU9ERUxfRkVBVFVSRV9DT1VOVCArIDQ2OworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkhvc3QgU2Vjb25kYXJ5IFJlY292ZXJ5IFJhdGUxMzwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IERFTkdVRV9NT0RFTF9fSE9TVF9TRUNPTkRBUllfUkVDT1ZFUllfUkFURTEzID0gVkVDVE9SX0RJU0VBU0VfTU9ERUxfRkVBVFVSRV9DT1VOVCArIDQ3OworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkhvc3QgU2Vjb25kYXJ5IFJlY292ZXJ5IFJhdGUxNDwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IERFTkdVRV9NT0RFTF9fSE9TVF9TRUNPTkRBUllfUkVDT1ZFUllfUkFURTE0ID0gVkVDVE9SX0RJU0VBU0VfTU9ERUxfRkVBVFVSRV9DT1VOVCArIDQ4OworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkhvc3QgU2Vjb25kYXJ5IFJlY292ZXJ5IFJhdGUyMTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IERFTkdVRV9NT0RFTF9fSE9TVF9TRUNPTkRBUllfUkVDT1ZFUllfUkFURTIxID0gVkVDVE9SX0RJU0VBU0VfTU9ERUxfRkVBVFVSRV9DT1VOVCArIDQ5OworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkhvc3QgU2Vjb25kYXJ5IFJlY292ZXJ5IFJhdGUyMzwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IERFTkdVRV9NT0RFTF9fSE9TVF9TRUNPTkRBUllfUkVDT1ZFUllfUkFURTIzID0gVkVDVE9SX0RJU0VBU0VfTU9ERUxfRkVBVFVSRV9DT1VOVCArIDUwOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkhvc3QgU2Vjb25kYXJ5IFJlY292ZXJ5IFJhdGUyNDwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IERFTkdVRV9NT0RFTF9fSE9TVF9TRUNPTkRBUllfUkVDT1ZFUllfUkFURTI0ID0gVkVDVE9SX0RJU0VBU0VfTU9ERUxfRkVBVFVSRV9DT1VOVCArIDUxOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkhvc3QgU2Vjb25kYXJ5IFJlY292ZXJ5IFJhdGUzMTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IERFTkdVRV9NT0RFTF9fSE9TVF9TRUNPTkRBUllfUkVDT1ZFUllfUkFURTMxID0gVkVDVE9SX0RJU0VBU0VfTU9ERUxfRkVBVFVSRV9DT1VOVCArIDUyOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkhvc3QgU2Vjb25kYXJ5IFJlY292ZXJ5IFJhdGUzMjwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IERFTkdVRV9NT0RFTF9fSE9TVF9TRUNPTkRBUllfUkVDT1ZFUllfUkFURTMyID0gVkVDVE9SX0RJU0VBU0VfTU9ERUxfRkVBVFVSRV9DT1VOVCArIDUzOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkhvc3QgU2Vjb25kYXJ5IFJlY292ZXJ5IFJhdGUzNDwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IERFTkdVRV9NT0RFTF9fSE9TVF9TRUNPTkRBUllfUkVDT1ZFUllfUkFURTM0ID0gVkVDVE9SX0RJU0VBU0VfTU9ERUxfRkVBVFVSRV9DT1VOVCArIDU0OworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkhvc3QgU2Vjb25kYXJ5IFJlY292ZXJ5IFJhdGU0MTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IERFTkdVRV9NT0RFTF9fSE9TVF9TRUNPTkRBUllfUkVDT1ZFUllfUkFURTQxID0gVkVDVE9SX0RJU0VBU0VfTU9ERUxfRkVBVFVSRV9DT1VOVCArIDU1OworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkhvc3QgU2Vjb25kYXJ5IFJlY292ZXJ5IFJhdGU0MjwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IERFTkdVRV9NT0RFTF9fSE9TVF9TRUNPTkRBUllfUkVDT1ZFUllfUkFURTQyID0gVkVDVE9SX0RJU0VBU0VfTU9ERUxfRkVBVFVSRV9DT1VOVCArIDU2OworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkhvc3QgU2Vjb25kYXJ5IFJlY292ZXJ5IFJhdGU0MzwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IERFTkdVRV9NT0RFTF9fSE9TVF9TRUNPTkRBUllfUkVDT1ZFUllfUkFURTQzID0gVkVDVE9SX0RJU0VBU0VfTU9ERUxfRkVBVFVSRV9DT1VOVCArIDU3OworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkhvc3QgU2Vjb25kYXJ5IEluY3ViYXRpb24gUmF0ZTEyPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgREVOR1VFX01PREVMX19IT1NUX1NFQ09OREFSWV9JTkNVQkFUSU9OX1JBVEUxMiA9IFZFQ1RPUl9ESVNFQVNFX01PREVMX0ZFQVRVUkVfQ09VTlQgKyA1ODsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5Ib3N0IFNlY29uZGFyeSBJbmN1YmF0aW9uIFJhdGUxMzwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IERFTkdVRV9NT0RFTF9fSE9TVF9TRUNPTkRBUllfSU5DVUJBVElPTl9SQVRFMTMgPSBWRUNUT1JfRElTRUFTRV9NT0RFTF9GRUFUVVJFX0NPVU5UICsgNTk7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+SG9zdCBTZWNvbmRhcnkgSW5jdWJhdGlvbiBSYXRlMTQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBERU5HVUVfTU9ERUxfX0hPU1RfU0VDT05EQVJZX0lOQ1VCQVRJT05fUkFURTE0ID0gVkVDVE9SX0RJU0VBU0VfTU9ERUxfRkVBVFVSRV9DT1VOVCArIDYwOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkhvc3QgU2Vjb25kYXJ5IEluY3ViYXRpb24gUmF0ZTIxPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgREVOR1VFX01PREVMX19IT1NUX1NFQ09OREFSWV9JTkNVQkFUSU9OX1JBVEUyMSA9IFZFQ1RPUl9ESVNFQVNFX01PREVMX0ZFQVRVUkVfQ09VTlQgKyA2MTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5Ib3N0IFNlY29uZGFyeSBJbmN1YmF0aW9uIFJhdGUyMzwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IERFTkdVRV9NT0RFTF9fSE9TVF9TRUNPTkRBUllfSU5DVUJBVElPTl9SQVRFMjMgPSBWRUNUT1JfRElTRUFTRV9NT0RFTF9GRUFUVVJFX0NPVU5UICsgNjI7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+SG9zdCBTZWNvbmRhcnkgSW5jdWJhdGlvbiBSYXRlMjQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBERU5HVUVfTU9ERUxfX0hPU1RfU0VDT05EQVJZX0lOQ1VCQVRJT05fUkFURTI0ID0gVkVDVE9SX0RJU0VBU0VfTU9ERUxfRkVBVFVSRV9DT1VOVCArIDYzOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkhvc3QgU2Vjb25kYXJ5IEluY3ViYXRpb24gUmF0ZTMxPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgREVOR1VFX01PREVMX19IT1NUX1NFQ09OREFSWV9JTkNVQkFUSU9OX1JBVEUzMSA9IFZFQ1RPUl9ESVNFQVNFX01PREVMX0ZFQVRVUkVfQ09VTlQgKyA2NDsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5Ib3N0IFNlY29uZGFyeSBJbmN1YmF0aW9uIFJhdGUzMjwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IERFTkdVRV9NT0RFTF9fSE9TVF9TRUNPTkRBUllfSU5DVUJBVElPTl9SQVRFMzIgPSBWRUNUT1JfRElTRUFTRV9NT0RFTF9GRUFUVVJFX0NPVU5UICsgNjU7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+SG9zdCBTZWNvbmRhcnkgSW5jdWJhdGlvbiBSYXRlMzQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBERU5HVUVfTU9ERUxfX0hPU1RfU0VDT05EQVJZX0lOQ1VCQVRJT05fUkFURTM0ID0gVkVDVE9SX0RJU0VBU0VfTU9ERUxfRkVBVFVSRV9DT1VOVCArIDY2OworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkhvc3QgU2Vjb25kYXJ5IEluY3ViYXRpb24gUmF0ZTQxPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgREVOR1VFX01PREVMX19IT1NUX1NFQ09OREFSWV9JTkNVQkFUSU9OX1JBVEU0MSA9IFZFQ1RPUl9ESVNFQVNFX01PREVMX0ZFQVRVUkVfQ09VTlQgKyA2NzsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5Ib3N0IFNlY29uZGFyeSBJbmN1YmF0aW9uIFJhdGU0MjwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IERFTkdVRV9NT0RFTF9fSE9TVF9TRUNPTkRBUllfSU5DVUJBVElPTl9SQVRFNDIgPSBWRUNUT1JfRElTRUFTRV9NT0RFTF9GRUFUVVJFX0NPVU5UICsgNjg7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+SG9zdCBTZWNvbmRhcnkgSW5jdWJhdGlvbiBSYXRlNDM8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBERU5HVUVfTU9ERUxfX0hPU1RfU0VDT05EQVJZX0lOQ1VCQVRJT05fUkFURTQzID0gVkVDVE9SX0RJU0VBU0VfTU9ERUxfRkVBVFVSRV9DT1VOVCArIDY5OworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlZlY3RvciBJbmZlY3Rpdml0eTE8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBERU5HVUVfTU9ERUxfX1ZFQ1RPUl9JTkZFQ1RJVklUWTEgPSBWRUNUT1JfRElTRUFTRV9NT0RFTF9GRUFUVVJFX0NPVU5UICsgNzA7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VmVjdG9yIEluZmVjdGl2aXR5MjwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IERFTkdVRV9NT0RFTF9fVkVDVE9SX0lORkVDVElWSVRZMiA9IFZFQ1RPUl9ESVNFQVNFX01PREVMX0ZFQVRVUkVfQ09VTlQgKyA3MTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5WZWN0b3IgSW5mZWN0aXZpdHkzPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgREVOR1VFX01PREVMX19WRUNUT1JfSU5GRUNUSVZJVFkzID0gVkVDVE9SX0RJU0VBU0VfTU9ERUxfRkVBVFVSRV9DT1VOVCArIDcyOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlZlY3RvciBJbmZlY3Rpdml0eTQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBERU5HVUVfTU9ERUxfX1ZFQ1RPUl9JTkZFQ1RJVklUWTQgPSBWRUNUT1JfRElTRUFTRV9NT0RFTF9GRUFUVVJFX0NPVU5UICsgNzM7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VmVjdG9yIEFERTE8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBERU5HVUVfTU9ERUxfX1ZFQ1RPUl9BREUxID0gVkVDVE9SX0RJU0VBU0VfTU9ERUxfRkVBVFVSRV9DT1VOVCArIDc0OworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlZlY3RvciBBREUyPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgREVOR1VFX01PREVMX19WRUNUT1JfQURFMiA9IFZFQ1RPUl9ESVNFQVNFX01PREVMX0ZFQVRVUkVfQ09VTlQgKyA3NTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5WZWN0b3IgQURFMzwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IERFTkdVRV9NT0RFTF9fVkVDVE9SX0FERTMgPSBWRUNUT1JfRElTRUFTRV9NT0RFTF9GRUFUVVJFX0NPVU5UICsgNzY7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VmVjdG9yIEFERTQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBERU5HVUVfTU9ERUxfX1ZFQ1RPUl9BREU0ID0gVkVDVE9SX0RJU0VBU0VfTU9ERUxfRkVBVFVSRV9DT1VOVCArIDc3OworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlZlY3RvciBJbmN1YmF0aW9uIFJhdGUxPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgREVOR1VFX01PREVMX19WRUNUT1JfSU5DVUJBVElPTl9SQVRFMSA9IFZFQ1RPUl9ESVNFQVNFX01PREVMX0ZFQVRVUkVfQ09VTlQgKyA3ODsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5WZWN0b3IgSW5jdWJhdGlvbiBSYXRlMjwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IERFTkdVRV9NT0RFTF9fVkVDVE9SX0lOQ1VCQVRJT05fUkFURTIgPSBWRUNUT1JfRElTRUFTRV9NT0RFTF9GRUFUVVJFX0NPVU5UICsgNzk7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VmVjdG9yIEluY3ViYXRpb24gUmF0ZTM8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBERU5HVUVfTU9ERUxfX1ZFQ1RPUl9JTkNVQkFUSU9OX1JBVEUzID0gVkVDVE9SX0RJU0VBU0VfTU9ERUxfRkVBVFVSRV9DT1VOVCArIDgwOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlZlY3RvciBJbmN1YmF0aW9uIFJhdGU0PC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgREVOR1VFX01PREVMX19WRUNUT1JfSU5DVUJBVElPTl9SQVRFNCA9IFZFQ1RPUl9ESVNFQVNFX01PREVMX0ZFQVRVUkVfQ09VTlQgKyA4MTsKKworCS8qKgorCSAqIFRoZSBudW1iZXIgb2Ygc3RydWN0dXJhbCBmZWF0dXJlcyBvZiB0aGUgJzxlbT5EZW5ndWUgTW9kZWw8L2VtPicgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgREVOR1VFX01PREVMX0ZFQVRVUkVfQ09VTlQgPSBWRUNUT1JfRElTRUFTRV9NT0RFTF9GRUFUVVJFX0NPVU5UICsgODI7CisKKwkvKioKKwkgKiBUaGUgbWV0YSBvYmplY3QgaWQgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuaW1wbC5TaW1wbGVEZW5ndWVNb2RlbEltcGwgPGVtPlNpbXBsZSBEZW5ndWUgTW9kZWw8L2VtPn0nIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLmltcGwuU2ltcGxlRGVuZ3VlTW9kZWxJbXBsCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLmltcGwuVmVjdG9yUGFja2FnZUltcGwjZ2V0U2ltcGxlRGVuZ3VlTW9kZWwoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlpbnQgU0lNUExFX0RFTkdVRV9NT0RFTCA9IDM7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VVJJPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU0lNUExFX0RFTkdVRV9NT0RFTF9fVVJJID0gVkVDVE9SX0RJU0VBU0VfTU9ERUxfX1VSSTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5UeXBlIFVSSTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNJTVBMRV9ERU5HVUVfTU9ERUxfX1RZUEVfVVJJID0gVkVDVE9SX0RJU0VBU0VfTU9ERUxfX1RZUEVfVVJJOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkR1YmxpbiBDb3JlPC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU0lNUExFX0RFTkdVRV9NT0RFTF9fRFVCTElOX0NPUkUgPSBWRUNUT1JfRElTRUFTRV9NT0RFTF9fRFVCTElOX0NPUkU7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+TGFiZWxzIFRvIFVwZGF0ZTwvYj48L2VtPicgcmVmZXJlbmNlIGxpc3QuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU0lNUExFX0RFTkdVRV9NT0RFTF9fTEFCRUxTX1RPX1VQREFURSA9IFZFQ1RPUl9ESVNFQVNFX01PREVMX19MQUJFTFNfVE9fVVBEQVRFOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkdyYXBoPC9iPjwvZW0+JyBjb250YWluZXIgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNJTVBMRV9ERU5HVUVfTU9ERUxfX0dSQVBIID0gVkVDVE9SX0RJU0VBU0VfTU9ERUxfX0dSQVBIOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkVuYWJsZWQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTSU1QTEVfREVOR1VFX01PREVMX19FTkFCTEVEID0gVkVDVE9SX0RJU0VBU0VfTU9ERUxfX0VOQUJMRUQ7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+R3JhcGggRGVjb3JhdGVkPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU0lNUExFX0RFTkdVRV9NT0RFTF9fR1JBUEhfREVDT1JBVEVEID0gVkVDVE9SX0RJU0VBU0VfTU9ERUxfX0dSQVBIX0RFQ09SQVRFRDsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5Qcm9ncmVzczwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNJTVBMRV9ERU5HVUVfTU9ERUxfX1BST0dSRVNTID0gVkVDVE9SX0RJU0VBU0VfTU9ERUxfX1BST0dSRVNTOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlBvcHVsYXRpb24gSWRlbnRpZmllcjwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNJTVBMRV9ERU5HVUVfTU9ERUxfX1BPUFVMQVRJT05fSURFTlRJRklFUiA9IFZFQ1RPUl9ESVNFQVNFX01PREVMX19QT1BVTEFUSU9OX0lERU5USUZJRVI7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VGltZSBQZXJpb2Q8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTSU1QTEVfREVOR1VFX01PREVMX19USU1FX1BFUklPRCA9IFZFQ1RPUl9ESVNFQVNFX01PREVMX19USU1FX1BFUklPRDsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5EaXNlYXNlIE5hbWU8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTSU1QTEVfREVOR1VFX01PREVMX19ESVNFQVNFX05BTUUgPSBWRUNUT1JfRElTRUFTRV9NT0RFTF9fRElTRUFTRV9OQU1FOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkZpbml0ZSBEaWZmZXJlbmNlPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU0lNUExFX0RFTkdVRV9NT0RFTF9fRklOSVRFX0RJRkZFUkVOQ0UgPSBWRUNUT1JfRElTRUFTRV9NT0RFTF9fRklOSVRFX0RJRkZFUkVOQ0U7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RnJlcXVlbmN5IERlcGVuZGVudDwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNJTVBMRV9ERU5HVUVfTU9ERUxfX0ZSRVFVRU5DWV9ERVBFTkRFTlQgPSBWRUNUT1JfRElTRUFTRV9NT0RFTF9fRlJFUVVFTkNZX0RFUEVOREVOVDsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5SZWZlcmVuY2UgUG9wdWxhdGlvbiBEZW5zaXR5PC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU0lNUExFX0RFTkdVRV9NT0RFTF9fUkVGRVJFTkNFX1BPUFVMQVRJT05fREVOU0lUWSA9IFZFQ1RPUl9ESVNFQVNFX01PREVMX19SRUZFUkVOQ0VfUE9QVUxBVElPTl9ERU5TSVRZOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlJvYWQgTmV0d29yayBJbmZlY3Rpb3VzIFByb3BvcnRpb248L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTSU1QTEVfREVOR1VFX01PREVMX19ST0FEX05FVFdPUktfSU5GRUNUSU9VU19QUk9QT1JUSU9OID0gVkVDVE9SX0RJU0VBU0VfTU9ERUxfX1JPQURfTkVUV09SS19JTkZFQ1RJT1VTX1BST1BPUlRJT047CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+Q2hhcmFjdGVyaXN0aWMgTWl4aW5nIERpc3RhbmNlPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU0lNUExFX0RFTkdVRV9NT0RFTF9fQ0hBUkFDVEVSSVNUSUNfTUlYSU5HX0RJU1RBTkNFID0gVkVDVE9SX0RJU0VBU0VfTU9ERUxfX0NIQVJBQ1RFUklTVElDX01JWElOR19ESVNUQU5DRTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5WZWN0b3IgUG9wdWxhdGlvbiBJZGVudGlmaWVyPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU0lNUExFX0RFTkdVRV9NT0RFTF9fVkVDVE9SX1BPUFVMQVRJT05fSURFTlRJRklFUiA9IFZFQ1RPUl9ESVNFQVNFX01PREVMX19WRUNUT1JfUE9QVUxBVElPTl9JREVOVElGSUVSOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkJpdGluZyBSYXRlPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU0lNUExFX0RFTkdVRV9NT0RFTF9fQklUSU5HX1JBVEUgPSBWRUNUT1JfRElTRUFTRV9NT0RFTF9GRUFUVVJFX0NPVU5UICsgMDsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5Ib3N0IEluZmVjdGl2aXR5MTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNJTVBMRV9ERU5HVUVfTU9ERUxfX0hPU1RfSU5GRUNUSVZJVFkxID0gVkVDVE9SX0RJU0VBU0VfTU9ERUxfRkVBVFVSRV9DT1VOVCArIDE7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+SG9zdCBJbmZlY3Rpdml0eTI8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTSU1QTEVfREVOR1VFX01PREVMX19IT1NUX0lORkVDVElWSVRZMiA9IFZFQ1RPUl9ESVNFQVNFX01PREVMX0ZFQVRVUkVfQ09VTlQgKyAyOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkhvc3QgSW5mZWN0aXZpdHkzPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU0lNUExFX0RFTkdVRV9NT0RFTF9fSE9TVF9JTkZFQ1RJVklUWTMgPSBWRUNUT1JfRElTRUFTRV9NT0RFTF9GRUFUVVJFX0NPVU5UICsgMzsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5Ib3N0IEluZmVjdGl2aXR5NDwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNJTVBMRV9ERU5HVUVfTU9ERUxfX0hPU1RfSU5GRUNUSVZJVFk0ID0gVkVDVE9SX0RJU0VBU0VfTU9ERUxfRkVBVFVSRV9DT1VOVCArIDQ7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+SG9zdCBQcmltYXJ5IEluY3ViYXRpb24gUmF0ZTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNJTVBMRV9ERU5HVUVfTU9ERUxfX0hPU1RfUFJJTUFSWV9JTkNVQkFUSU9OX1JBVEUgPSBWRUNUT1JfRElTRUFTRV9NT0RFTF9GRUFUVVJFX0NPVU5UICsgNTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5Ib3N0IFByaW1hcnkgUmVjb3ZlcnkgUmF0ZTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNJTVBMRV9ERU5HVUVfTU9ERUxfX0hPU1RfUFJJTUFSWV9SRUNPVkVSWV9SQVRFID0gVkVDVE9SX0RJU0VBU0VfTU9ERUxfRkVBVFVSRV9DT1VOVCArIDY7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+SG9zdCBQcmltYXJ5IEltbXVuaXR5IExvc3MgUmF0ZTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNJTVBMRV9ERU5HVUVfTU9ERUxfX0hPU1RfUFJJTUFSWV9JTU1VTklUWV9MT1NTX1JBVEUgPSBWRUNUT1JfRElTRUFTRV9NT0RFTF9GRUFUVVJFX0NPVU5UICsgNzsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5Ib3N0IFByaW1hcnkgRGVhdGggUmF0ZTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNJTVBMRV9ERU5HVUVfTU9ERUxfX0hPU1RfUFJJTUFSWV9ERUFUSF9SQVRFID0gVkVDVE9SX0RJU0VBU0VfTU9ERUxfRkVBVFVSRV9DT1VOVCArIDg7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+SG9zdCBBREUxPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU0lNUExFX0RFTkdVRV9NT0RFTF9fSE9TVF9BREUxID0gVkVDVE9SX0RJU0VBU0VfTU9ERUxfRkVBVFVSRV9DT1VOVCArIDk7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+SG9zdCBBREUyPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU0lNUExFX0RFTkdVRV9NT0RFTF9fSE9TVF9BREUyID0gVkVDVE9SX0RJU0VBU0VfTU9ERUxfRkVBVFVSRV9DT1VOVCArIDEwOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkhvc3QgQURFMzwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNJTVBMRV9ERU5HVUVfTU9ERUxfX0hPU1RfQURFMyA9IFZFQ1RPUl9ESVNFQVNFX01PREVMX0ZFQVRVUkVfQ09VTlQgKyAxMTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5Ib3N0IEFERTQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTSU1QTEVfREVOR1VFX01PREVMX19IT1NUX0FERTQgPSBWRUNUT1JfRElTRUFTRV9NT0RFTF9GRUFUVVJFX0NPVU5UICsgMTI7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+SG9zdCBTZWNvbmRhcnkgSW5jdWJhdGlvbiBSYXRlPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU0lNUExFX0RFTkdVRV9NT0RFTF9fSE9TVF9TRUNPTkRBUllfSU5DVUJBVElPTl9SQVRFID0gVkVDVE9SX0RJU0VBU0VfTU9ERUxfRkVBVFVSRV9DT1VOVCArIDEzOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkhvc3QgU2Vjb25kYXJ5IFJlY292ZXJ5IFJhdGU8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTSU1QTEVfREVOR1VFX01PREVMX19IT1NUX1NFQ09OREFSWV9SRUNPVkVSWV9SQVRFID0gVkVDVE9SX0RJU0VBU0VfTU9ERUxfRkVBVFVSRV9DT1VOVCArIDE0OworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkhvc3QgU2Vjb25kYXJ5IERlYXRoIFJhdGU8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTSU1QTEVfREVOR1VFX01PREVMX19IT1NUX1NFQ09OREFSWV9ERUFUSF9SQVRFID0gVkVDVE9SX0RJU0VBU0VfTU9ERUxfRkVBVFVSRV9DT1VOVCArIDE1OworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlZlY3RvciBJbmZlY3Rpdml0eTE8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTSU1QTEVfREVOR1VFX01PREVMX19WRUNUT1JfSU5GRUNUSVZJVFkxID0gVkVDVE9SX0RJU0VBU0VfTU9ERUxfRkVBVFVSRV9DT1VOVCArIDE2OworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlZlY3RvciBJbmZlY3Rpdml0eTI8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTSU1QTEVfREVOR1VFX01PREVMX19WRUNUT1JfSU5GRUNUSVZJVFkyID0gVkVDVE9SX0RJU0VBU0VfTU9ERUxfRkVBVFVSRV9DT1VOVCArIDE3OworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlZlY3RvciBJbmZlY3Rpdml0eTM8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTSU1QTEVfREVOR1VFX01PREVMX19WRUNUT1JfSU5GRUNUSVZJVFkzID0gVkVDVE9SX0RJU0VBU0VfTU9ERUxfRkVBVFVSRV9DT1VOVCArIDE4OworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlZlY3RvciBJbmZlY3Rpdml0eTQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTSU1QTEVfREVOR1VFX01PREVMX19WRUNUT1JfSU5GRUNUSVZJVFk0ID0gVkVDVE9SX0RJU0VBU0VfTU9ERUxfRkVBVFVSRV9DT1VOVCArIDE5OworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlZlY3RvciBBREUxPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU0lNUExFX0RFTkdVRV9NT0RFTF9fVkVDVE9SX0FERTEgPSBWRUNUT1JfRElTRUFTRV9NT0RFTF9GRUFUVVJFX0NPVU5UICsgMjA7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VmVjdG9yIEFERTI8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTSU1QTEVfREVOR1VFX01PREVMX19WRUNUT1JfQURFMiA9IFZFQ1RPUl9ESVNFQVNFX01PREVMX0ZFQVRVUkVfQ09VTlQgKyAyMTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5WZWN0b3IgQURFMzwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNJTVBMRV9ERU5HVUVfTU9ERUxfX1ZFQ1RPUl9BREUzID0gVkVDVE9SX0RJU0VBU0VfTU9ERUxfRkVBVFVSRV9DT1VOVCArIDIyOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlZlY3RvciBBREU0PC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU0lNUExFX0RFTkdVRV9NT0RFTF9fVkVDVE9SX0FERTQgPSBWRUNUT1JfRElTRUFTRV9NT0RFTF9GRUFUVVJFX0NPVU5UICsgMjM7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VmVjdG9yIEluY3ViYXRpb24gUmF0ZTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNJTVBMRV9ERU5HVUVfTU9ERUxfX1ZFQ1RPUl9JTkNVQkFUSU9OX1JBVEUgPSBWRUNUT1JfRElTRUFTRV9NT0RFTF9GRUFUVVJFX0NPVU5UICsgMjQ7CisKKwkvKioKKwkgKiBUaGUgbnVtYmVyIG9mIHN0cnVjdHVyYWwgZmVhdHVyZXMgb2YgdGhlICc8ZW0+U2ltcGxlIERlbmd1ZSBNb2RlbDwvZW0+JyBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTSU1QTEVfREVOR1VFX01PREVMX0ZFQVRVUkVfQ09VTlQgPSBWRUNUT1JfRElTRUFTRV9NT0RFTF9GRUFUVVJFX0NPVU5UICsgMjU7CisKKwkvKioKKwkgKiBUaGUgbWV0YSBvYmplY3QgaWQgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuaW1wbC5EZW5ndWVNb2RlbEhvc3RMYWJlbEltcGwgPGVtPkRlbmd1ZSBNb2RlbCBIb3N0IExhYmVsPC9lbT59JyBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5pbXBsLkRlbmd1ZU1vZGVsSG9zdExhYmVsSW1wbAorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5pbXBsLlZlY3RvclBhY2thZ2VJbXBsI2dldERlbmd1ZU1vZGVsSG9zdExhYmVsKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJaW50IERFTkdVRV9NT0RFTF9IT1NUX0xBQkVMID0gNDsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5VUkk8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9fVVJJID0gU3RhbmRhcmRQYWNrYWdlLlNUQU5EQVJEX0RJU0VBU0VfTU9ERUxfTEFCRUxfX1VSSTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5UeXBlIFVSSTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IERFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX19UWVBFX1VSSSA9IFN0YW5kYXJkUGFja2FnZS5TVEFOREFSRF9ESVNFQVNFX01PREVMX0xBQkVMX19UWVBFX1VSSTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5EdWJsaW4gQ29yZTwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IERFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX19EVUJMSU5fQ09SRSA9IFN0YW5kYXJkUGFja2FnZS5TVEFOREFSRF9ESVNFQVNFX01PREVMX0xBQkVMX19EVUJMSU5fQ09SRTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5VUkkgT2YgSWRlbnRpZmlhYmxlIFRvIEJlIExhYmVsZWQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9fVVJJX09GX0lERU5USUZJQUJMRV9UT19CRV9MQUJFTEVEID0gU3RhbmRhcmRQYWNrYWdlLlNUQU5EQVJEX0RJU0VBU0VfTU9ERUxfTEFCRUxfX1VSSV9PRl9JREVOVElGSUFCTEVfVE9fQkVfTEFCRUxFRDsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5DdXJyZW50IFZhbHVlPC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgREVOR1VFX01PREVMX0hPU1RfTEFCRUxfX0NVUlJFTlRfVkFMVUUgPSBTdGFuZGFyZFBhY2thZ2UuU1RBTkRBUkRfRElTRUFTRV9NT0RFTF9MQUJFTF9fQ1VSUkVOVF9WQUxVRTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5JZGVudGlmaWFibGU8L2I+PC9lbT4nIHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9fSURFTlRJRklBQkxFID0gU3RhbmRhcmRQYWNrYWdlLlNUQU5EQVJEX0RJU0VBU0VfTU9ERUxfTEFCRUxfX0lERU5USUZJQUJMRTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5OZXh0IFZhbHVlIFZhbGlkPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgREVOR1VFX01PREVMX0hPU1RfTEFCRUxfX05FWFRfVkFMVUVfVkFMSUQgPSBTdGFuZGFyZFBhY2thZ2UuU1RBTkRBUkRfRElTRUFTRV9NT0RFTF9MQUJFTF9fTkVYVF9WQUxVRV9WQUxJRDsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5OZXh0IFZhbHVlPC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgREVOR1VFX01PREVMX0hPU1RfTEFCRUxfX05FWFRfVkFMVUUgPSBTdGFuZGFyZFBhY2thZ2UuU1RBTkRBUkRfRElTRUFTRV9NT0RFTF9MQUJFTF9fTkVYVF9WQUxVRTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5EZWNvcmF0b3I8L2I+PC9lbT4nIHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9fREVDT1JBVE9SID0gU3RhbmRhcmRQYWNrYWdlLlNUQU5EQVJEX0RJU0VBU0VfTU9ERUxfTEFCRUxfX0RFQ09SQVRPUjsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5Ob2RlPC9iPjwvZW0+JyByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgREVOR1VFX01PREVMX0hPU1RfTEFCRUxfX05PREUgPSBTdGFuZGFyZFBhY2thZ2UuU1RBTkRBUkRfRElTRUFTRV9NT0RFTF9MQUJFTF9fTk9ERTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5EZWx0YSBWYWx1ZTwvYj48L2VtPicgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IERFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX19ERUxUQV9WQUxVRSA9IFN0YW5kYXJkUGFja2FnZS5TVEFOREFSRF9ESVNFQVNFX01PREVMX0xBQkVMX19ERUxUQV9WQUxVRTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5UZW1wIFZhbHVlPC9iPjwvZW0+JyByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgREVOR1VFX01PREVMX0hPU1RfTEFCRUxfX1RFTVBfVkFMVUUgPSBTdGFuZGFyZFBhY2thZ2UuU1RBTkRBUkRfRElTRUFTRV9NT0RFTF9MQUJFTF9fVEVNUF9WQUxVRTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5Qcm9iZSBWYWx1ZTwvYj48L2VtPicgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IERFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX19QUk9CRV9WQUxVRSA9IFN0YW5kYXJkUGFja2FnZS5TVEFOREFSRF9ESVNFQVNFX01PREVMX0xBQkVMX19QUk9CRV9WQUxVRTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5FcnJvciBTY2FsZTwvYj48L2VtPicgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IERFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX19FUlJPUl9TQ0FMRSA9IFN0YW5kYXJkUGFja2FnZS5TVEFOREFSRF9ESVNFQVNFX01PREVMX0xBQkVMX19FUlJPUl9TQ0FMRTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5JZGVudGlmaWVyPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgREVOR1VFX01PREVMX0hPU1RfTEFCRUxfX0lERU5USUZJRVIgPSBTdGFuZGFyZFBhY2thZ2UuU1RBTkRBUkRfRElTRUFTRV9NT0RFTF9MQUJFTF9fSURFTlRJRklFUjsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5Qb3B1bGF0aW9uIExhYmVsPC9iPjwvZW0+JyByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgREVOR1VFX01PREVMX0hPU1RfTEFCRUxfX1BPUFVMQVRJT05fTEFCRUwgPSBTdGFuZGFyZFBhY2thZ2UuU1RBTkRBUkRfRElTRUFTRV9NT0RFTF9MQUJFTF9fUE9QVUxBVElPTl9MQUJFTDsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5Qb3B1bGF0aW9uIE1vZGVsIExhYmVsPC9iPjwvZW0+JyByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgREVOR1VFX01PREVMX0hPU1RfTEFCRUxfX1BPUFVMQVRJT05fTU9ERUxfTEFCRUwgPSBTdGFuZGFyZFBhY2thZ2UuU1RBTkRBUkRfRElTRUFTRV9NT0RFTF9MQUJFTF9fUE9QVUxBVElPTl9NT0RFTF9MQUJFTDsKKworCS8qKgorCSAqIFRoZSBudW1iZXIgb2Ygc3RydWN0dXJhbCBmZWF0dXJlcyBvZiB0aGUgJzxlbT5EZW5ndWUgTW9kZWwgSG9zdCBMYWJlbDwvZW0+JyBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9GRUFUVVJFX0NPVU5UID0gU3RhbmRhcmRQYWNrYWdlLlNUQU5EQVJEX0RJU0VBU0VfTU9ERUxfTEFCRUxfRkVBVFVSRV9DT1VOVCArIDA7CisKKwkvKioKKwkgKiBUaGUgbWV0YSBvYmplY3QgaWQgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuaW1wbC5EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlSW1wbCA8ZW0+RGVuZ3VlIE1vZGVsIEhvc3QgTGFiZWwgVmFsdWU8L2VtPn0nIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLmltcGwuRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZUltcGwKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuaW1wbC5WZWN0b3JQYWNrYWdlSW1wbCNnZXREZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJaW50IERFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFID0gNTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5BcnJpdmFsczwvYj48L2VtPicgcmVmZXJlbmNlIGxpc3QuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0FSUklWQUxTID0gU3RhbmRhcmRQYWNrYWdlLlNUQU5EQVJEX0RJU0VBU0VfTU9ERUxfTEFCRUxfVkFMVUVfX0FSUklWQUxTOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkRlcGFydHVyZXM8L2I+PC9lbT4nIHJlZmVyZW5jZSBsaXN0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IERFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19ERVBBUlRVUkVTID0gU3RhbmRhcmRQYWNrYWdlLlNUQU5EQVJEX0RJU0VBU0VfTU9ERUxfTEFCRUxfVkFMVUVfX0RFUEFSVFVSRVM7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+UG9wdWxhdGlvbiBDb3VudDwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IERFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19QT1BVTEFUSU9OX0NPVU5UID0gU3RhbmRhcmRQYWNrYWdlLlNUQU5EQVJEX0RJU0VBU0VfTU9ERUxfTEFCRUxfVkFMVUVfX1BPUFVMQVRJT05fQ09VTlQ7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+UzwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IERFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19TID0gU3RhbmRhcmRQYWNrYWdlLlNUQU5EQVJEX0RJU0VBU0VfTU9ERUxfTEFCRUxfVkFMVUVfX1M7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+SW5jaWRlbmNlPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0lOQ0lERU5DRSA9IFN0YW5kYXJkUGFja2FnZS5TVEFOREFSRF9ESVNFQVNFX01PREVMX0xBQkVMX1ZBTFVFX19JTkNJREVOQ0U7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RGlzZWFzZSBEZWF0aHM8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fRElTRUFTRV9ERUFUSFMgPSBTdGFuZGFyZFBhY2thZ2UuU1RBTkRBUkRfRElTRUFTRV9NT0RFTF9MQUJFTF9WQUxVRV9fRElTRUFTRV9ERUFUSFM7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RTE8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fRTEgPSBTdGFuZGFyZFBhY2thZ2UuU1RBTkRBUkRfRElTRUFTRV9NT0RFTF9MQUJFTF9WQUxVRV9GRUFUVVJFX0NPVU5UICsgMDsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5FMjwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IERFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19FMiA9IFN0YW5kYXJkUGFja2FnZS5TVEFOREFSRF9ESVNFQVNFX01PREVMX0xBQkVMX1ZBTFVFX0ZFQVRVUkVfQ09VTlQgKyAxOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkUzPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0UzID0gU3RhbmRhcmRQYWNrYWdlLlNUQU5EQVJEX0RJU0VBU0VfTU9ERUxfTEFCRUxfVkFMVUVfRkVBVFVSRV9DT1VOVCArIDI7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RTQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fRTQgPSBTdGFuZGFyZFBhY2thZ2UuU1RBTkRBUkRfRElTRUFTRV9NT0RFTF9MQUJFTF9WQUxVRV9GRUFUVVJFX0NPVU5UICsgMzsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5JMTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IERFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19JMSA9IFN0YW5kYXJkUGFja2FnZS5TVEFOREFSRF9ESVNFQVNFX01PREVMX0xBQkVMX1ZBTFVFX0ZFQVRVUkVfQ09VTlQgKyA0OworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkkyPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0kyID0gU3RhbmRhcmRQYWNrYWdlLlNUQU5EQVJEX0RJU0VBU0VfTU9ERUxfTEFCRUxfVkFMVUVfRkVBVFVSRV9DT1VOVCArIDU7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+STM8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fSTMgPSBTdGFuZGFyZFBhY2thZ2UuU1RBTkRBUkRfRElTRUFTRV9NT0RFTF9MQUJFTF9WQUxVRV9GRUFUVVJFX0NPVU5UICsgNjsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5JNDwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IERFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19JNCA9IFN0YW5kYXJkUGFja2FnZS5TVEFOREFSRF9ESVNFQVNFX01PREVMX0xBQkVMX1ZBTFVFX0ZFQVRVUkVfQ09VTlQgKyA3OworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlQxPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX1QxID0gU3RhbmRhcmRQYWNrYWdlLlNUQU5EQVJEX0RJU0VBU0VfTU9ERUxfTEFCRUxfVkFMVUVfRkVBVFVSRV9DT1VOVCArIDg7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VDI8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fVDIgPSBTdGFuZGFyZFBhY2thZ2UuU1RBTkRBUkRfRElTRUFTRV9NT0RFTF9MQUJFTF9WQUxVRV9GRUFUVVJFX0NPVU5UICsgOTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5UMzwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IERFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19UMyA9IFN0YW5kYXJkUGFja2FnZS5TVEFOREFSRF9ESVNFQVNFX01PREVMX0xBQkVMX1ZBTFVFX0ZFQVRVUkVfQ09VTlQgKyAxMDsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5UNDwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IERFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19UNCA9IFN0YW5kYXJkUGFja2FnZS5TVEFOREFSRF9ESVNFQVNFX01PREVMX0xBQkVMX1ZBTFVFX0ZFQVRVUkVfQ09VTlQgKyAxMTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5SMTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IERFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19SMSA9IFN0YW5kYXJkUGFja2FnZS5TVEFOREFSRF9ESVNFQVNFX01PREVMX0xBQkVMX1ZBTFVFX0ZFQVRVUkVfQ09VTlQgKyAxMjsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5SMjwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IERFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19SMiA9IFN0YW5kYXJkUGFja2FnZS5TVEFOREFSRF9ESVNFQVNFX01PREVMX0xBQkVMX1ZBTFVFX0ZFQVRVUkVfQ09VTlQgKyAxMzsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5SMzwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IERFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19SMyA9IFN0YW5kYXJkUGFja2FnZS5TVEFOREFSRF9ESVNFQVNFX01PREVMX0xBQkVMX1ZBTFVFX0ZFQVRVUkVfQ09VTlQgKyAxNDsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5SNDwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IERFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19SNCA9IFN0YW5kYXJkUGFja2FnZS5TVEFOREFSRF9ESVNFQVNFX01PREVMX0xBQkVMX1ZBTFVFX0ZFQVRVUkVfQ09VTlQgKyAxNTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5FMTI8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fRTEyID0gU3RhbmRhcmRQYWNrYWdlLlNUQU5EQVJEX0RJU0VBU0VfTU9ERUxfTEFCRUxfVkFMVUVfRkVBVFVSRV9DT1VOVCArIDE2OworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkUxMzwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IERFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19FMTMgPSBTdGFuZGFyZFBhY2thZ2UuU1RBTkRBUkRfRElTRUFTRV9NT0RFTF9MQUJFTF9WQUxVRV9GRUFUVVJFX0NPVU5UICsgMTc7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RTE0PC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0UxNCA9IFN0YW5kYXJkUGFja2FnZS5TVEFOREFSRF9ESVNFQVNFX01PREVMX0xBQkVMX1ZBTFVFX0ZFQVRVUkVfQ09VTlQgKyAxODsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5FMjE8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fRTIxID0gU3RhbmRhcmRQYWNrYWdlLlNUQU5EQVJEX0RJU0VBU0VfTU9ERUxfTEFCRUxfVkFMVUVfRkVBVFVSRV9DT1VOVCArIDE5OworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkUyMzwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IERFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19FMjMgPSBTdGFuZGFyZFBhY2thZ2UuU1RBTkRBUkRfRElTRUFTRV9NT0RFTF9MQUJFTF9WQUxVRV9GRUFUVVJFX0NPVU5UICsgMjA7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RTI0PC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0UyNCA9IFN0YW5kYXJkUGFja2FnZS5TVEFOREFSRF9ESVNFQVNFX01PREVMX0xBQkVMX1ZBTFVFX0ZFQVRVUkVfQ09VTlQgKyAyMTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5FMzE8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fRTMxID0gU3RhbmRhcmRQYWNrYWdlLlNUQU5EQVJEX0RJU0VBU0VfTU9ERUxfTEFCRUxfVkFMVUVfRkVBVFVSRV9DT1VOVCArIDIyOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkUzMjwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IERFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19FMzIgPSBTdGFuZGFyZFBhY2thZ2UuU1RBTkRBUkRfRElTRUFTRV9NT0RFTF9MQUJFTF9WQUxVRV9GRUFUVVJFX0NPVU5UICsgMjM7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RTM0PC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0UzNCA9IFN0YW5kYXJkUGFja2FnZS5TVEFOREFSRF9ESVNFQVNFX01PREVMX0xBQkVMX1ZBTFVFX0ZFQVRVUkVfQ09VTlQgKyAyNDsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5FNDE8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fRTQxID0gU3RhbmRhcmRQYWNrYWdlLlNUQU5EQVJEX0RJU0VBU0VfTU9ERUxfTEFCRUxfVkFMVUVfRkVBVFVSRV9DT1VOVCArIDI1OworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkU0MjwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IERFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19FNDIgPSBTdGFuZGFyZFBhY2thZ2UuU1RBTkRBUkRfRElTRUFTRV9NT0RFTF9MQUJFTF9WQUxVRV9GRUFUVVJFX0NPVU5UICsgMjY7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RTQzPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0U0MyA9IFN0YW5kYXJkUGFja2FnZS5TVEFOREFSRF9ESVNFQVNFX01PREVMX0xBQkVMX1ZBTFVFX0ZFQVRVUkVfQ09VTlQgKyAyNzsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5JMTI8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fSTEyID0gU3RhbmRhcmRQYWNrYWdlLlNUQU5EQVJEX0RJU0VBU0VfTU9ERUxfTEFCRUxfVkFMVUVfRkVBVFVSRV9DT1VOVCArIDI4OworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkkxMzwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IERFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19JMTMgPSBTdGFuZGFyZFBhY2thZ2UuU1RBTkRBUkRfRElTRUFTRV9NT0RFTF9MQUJFTF9WQUxVRV9GRUFUVVJFX0NPVU5UICsgMjk7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+STE0PC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0kxNCA9IFN0YW5kYXJkUGFja2FnZS5TVEFOREFSRF9ESVNFQVNFX01PREVMX0xBQkVMX1ZBTFVFX0ZFQVRVUkVfQ09VTlQgKyAzMDsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5JMjE8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fSTIxID0gU3RhbmRhcmRQYWNrYWdlLlNUQU5EQVJEX0RJU0VBU0VfTU9ERUxfTEFCRUxfVkFMVUVfRkVBVFVSRV9DT1VOVCArIDMxOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkkyMzwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IERFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19JMjMgPSBTdGFuZGFyZFBhY2thZ2UuU1RBTkRBUkRfRElTRUFTRV9NT0RFTF9MQUJFTF9WQUxVRV9GRUFUVVJFX0NPVU5UICsgMzI7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+STI0PC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0kyNCA9IFN0YW5kYXJkUGFja2FnZS5TVEFOREFSRF9ESVNFQVNFX01PREVMX0xBQkVMX1ZBTFVFX0ZFQVRVUkVfQ09VTlQgKyAzMzsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5JMzE8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fSTMxID0gU3RhbmRhcmRQYWNrYWdlLlNUQU5EQVJEX0RJU0VBU0VfTU9ERUxfTEFCRUxfVkFMVUVfRkVBVFVSRV9DT1VOVCArIDM0OworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkkzMjwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IERFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19JMzIgPSBTdGFuZGFyZFBhY2thZ2UuU1RBTkRBUkRfRElTRUFTRV9NT0RFTF9MQUJFTF9WQUxVRV9GRUFUVVJFX0NPVU5UICsgMzU7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+STM0PC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0kzNCA9IFN0YW5kYXJkUGFja2FnZS5TVEFOREFSRF9ESVNFQVNFX01PREVMX0xBQkVMX1ZBTFVFX0ZFQVRVUkVfQ09VTlQgKyAzNjsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5JNDE8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fSTQxID0gU3RhbmRhcmRQYWNrYWdlLlNUQU5EQVJEX0RJU0VBU0VfTU9ERUxfTEFCRUxfVkFMVUVfRkVBVFVSRV9DT1VOVCArIDM3OworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkk0MjwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IERFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19JNDIgPSBTdGFuZGFyZFBhY2thZ2UuU1RBTkRBUkRfRElTRUFTRV9NT0RFTF9MQUJFTF9WQUxVRV9GRUFUVVJFX0NPVU5UICsgMzg7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+STQzPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0k0MyA9IFN0YW5kYXJkUGFja2FnZS5TVEFOREFSRF9ESVNFQVNFX01PREVMX0xBQkVMX1ZBTFVFX0ZFQVRVUkVfQ09VTlQgKyAzOTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5SPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX1IgPSBTdGFuZGFyZFBhY2thZ2UuU1RBTkRBUkRfRElTRUFTRV9NT0RFTF9MQUJFTF9WQUxVRV9GRUFUVVJFX0NPVU5UICsgNDA7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+SW5jaWRlbmNlMTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IERFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19JTkNJREVOQ0UxID0gU3RhbmRhcmRQYWNrYWdlLlNUQU5EQVJEX0RJU0VBU0VfTU9ERUxfTEFCRUxfVkFMVUVfRkVBVFVSRV9DT1VOVCArIDQxOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkluY2lkZW5jZTI8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fSU5DSURFTkNFMiA9IFN0YW5kYXJkUGFja2FnZS5TVEFOREFSRF9ESVNFQVNFX01PREVMX0xBQkVMX1ZBTFVFX0ZFQVRVUkVfQ09VTlQgKyA0MjsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5JbmNpZGVuY2UzPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0lOQ0lERU5DRTMgPSBTdGFuZGFyZFBhY2thZ2UuU1RBTkRBUkRfRElTRUFTRV9NT0RFTF9MQUJFTF9WQUxVRV9GRUFUVVJFX0NPVU5UICsgNDM7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+SW5jaWRlbmNlNDwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IERFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19JTkNJREVOQ0U0ID0gU3RhbmRhcmRQYWNrYWdlLlNUQU5EQVJEX0RJU0VBU0VfTU9ERUxfTEFCRUxfVkFMVUVfRkVBVFVSRV9DT1VOVCArIDQ0OworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkluY2lkZW5jZTEyPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0lOQ0lERU5DRTEyID0gU3RhbmRhcmRQYWNrYWdlLlNUQU5EQVJEX0RJU0VBU0VfTU9ERUxfTEFCRUxfVkFMVUVfRkVBVFVSRV9DT1VOVCArIDQ1OworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkluY2lkZW5jZTIxPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0lOQ0lERU5DRTIxID0gU3RhbmRhcmRQYWNrYWdlLlNUQU5EQVJEX0RJU0VBU0VfTU9ERUxfTEFCRUxfVkFMVUVfRkVBVFVSRV9DT1VOVCArIDQ2OworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkluY2lkZW5jZTMxPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0lOQ0lERU5DRTMxID0gU3RhbmRhcmRQYWNrYWdlLlNUQU5EQVJEX0RJU0VBU0VfTU9ERUxfTEFCRUxfVkFMVUVfRkVBVFVSRV9DT1VOVCArIDQ3OworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkluY2lkZW5jZTQxPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0lOQ0lERU5DRTQxID0gU3RhbmRhcmRQYWNrYWdlLlNUQU5EQVJEX0RJU0VBU0VfTU9ERUxfTEFCRUxfVkFMVUVfRkVBVFVSRV9DT1VOVCArIDQ4OworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkluY2lkZW5jZTEzPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0lOQ0lERU5DRTEzID0gU3RhbmRhcmRQYWNrYWdlLlNUQU5EQVJEX0RJU0VBU0VfTU9ERUxfTEFCRUxfVkFMVUVfRkVBVFVSRV9DT1VOVCArIDQ5OworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkluY2lkZW5jZTIzPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0lOQ0lERU5DRTIzID0gU3RhbmRhcmRQYWNrYWdlLlNUQU5EQVJEX0RJU0VBU0VfTU9ERUxfTEFCRUxfVkFMVUVfRkVBVFVSRV9DT1VOVCArIDUwOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkluY2lkZW5jZTMyPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0lOQ0lERU5DRTMyID0gU3RhbmRhcmRQYWNrYWdlLlNUQU5EQVJEX0RJU0VBU0VfTU9ERUxfTEFCRUxfVkFMVUVfRkVBVFVSRV9DT1VOVCArIDUxOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkluY2lkZW5jZTQyPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0lOQ0lERU5DRTQyID0gU3RhbmRhcmRQYWNrYWdlLlNUQU5EQVJEX0RJU0VBU0VfTU9ERUxfTEFCRUxfVkFMVUVfRkVBVFVSRV9DT1VOVCArIDUyOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkluY2lkZW5jZTE0PC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0lOQ0lERU5DRTE0ID0gU3RhbmRhcmRQYWNrYWdlLlNUQU5EQVJEX0RJU0VBU0VfTU9ERUxfTEFCRUxfVkFMVUVfRkVBVFVSRV9DT1VOVCArIDUzOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkluY2lkZW5jZTI0PC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0lOQ0lERU5DRTI0ID0gU3RhbmRhcmRQYWNrYWdlLlNUQU5EQVJEX0RJU0VBU0VfTU9ERUxfTEFCRUxfVkFMVUVfRkVBVFVSRV9DT1VOVCArIDU0OworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkluY2lkZW5jZTM0PC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0lOQ0lERU5DRTM0ID0gU3RhbmRhcmRQYWNrYWdlLlNUQU5EQVJEX0RJU0VBU0VfTU9ERUxfTEFCRUxfVkFMVUVfRkVBVFVSRV9DT1VOVCArIDU1OworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkluY2lkZW5jZTQzPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0lOQ0lERU5DRTQzID0gU3RhbmRhcmRQYWNrYWdlLlNUQU5EQVJEX0RJU0VBU0VfTU9ERUxfTEFCRUxfVkFMVUVfRkVBVFVSRV9DT1VOVCArIDU2OworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkRpc2Vhc2UgRGVhdGhzMTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IERFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19ESVNFQVNFX0RFQVRIUzEgPSBTdGFuZGFyZFBhY2thZ2UuU1RBTkRBUkRfRElTRUFTRV9NT0RFTF9MQUJFTF9WQUxVRV9GRUFUVVJFX0NPVU5UICsgNTc7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RGlzZWFzZSBEZWF0aHMyPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0RJU0VBU0VfREVBVEhTMiA9IFN0YW5kYXJkUGFja2FnZS5TVEFOREFSRF9ESVNFQVNFX01PREVMX0xBQkVMX1ZBTFVFX0ZFQVRVUkVfQ09VTlQgKyA1ODsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5EaXNlYXNlIERlYXRoczM8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fRElTRUFTRV9ERUFUSFMzID0gU3RhbmRhcmRQYWNrYWdlLlNUQU5EQVJEX0RJU0VBU0VfTU9ERUxfTEFCRUxfVkFMVUVfRkVBVFVSRV9DT1VOVCArIDU5OworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkRpc2Vhc2UgRGVhdGhzNDwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IERFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19ESVNFQVNFX0RFQVRIUzQgPSBTdGFuZGFyZFBhY2thZ2UuU1RBTkRBUkRfRElTRUFTRV9NT0RFTF9MQUJFTF9WQUxVRV9GRUFUVVJFX0NPVU5UICsgNjA7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RGlzZWFzZSBEZWF0aHMxMjwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IERFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19ESVNFQVNFX0RFQVRIUzEyID0gU3RhbmRhcmRQYWNrYWdlLlNUQU5EQVJEX0RJU0VBU0VfTU9ERUxfTEFCRUxfVkFMVUVfRkVBVFVSRV9DT1VOVCArIDYxOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkRpc2Vhc2UgRGVhdGhzMjE8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fRElTRUFTRV9ERUFUSFMyMSA9IFN0YW5kYXJkUGFja2FnZS5TVEFOREFSRF9ESVNFQVNFX01PREVMX0xBQkVMX1ZBTFVFX0ZFQVRVUkVfQ09VTlQgKyA2MjsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5EaXNlYXNlIERlYXRoczMxPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0RJU0VBU0VfREVBVEhTMzEgPSBTdGFuZGFyZFBhY2thZ2UuU1RBTkRBUkRfRElTRUFTRV9NT0RFTF9MQUJFTF9WQUxVRV9GRUFUVVJFX0NPVU5UICsgNjM7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RGlzZWFzZSBEZWF0aHM0MTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IERFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19ESVNFQVNFX0RFQVRIUzQxID0gU3RhbmRhcmRQYWNrYWdlLlNUQU5EQVJEX0RJU0VBU0VfTU9ERUxfTEFCRUxfVkFMVUVfRkVBVFVSRV9DT1VOVCArIDY0OworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkRpc2Vhc2UgRGVhdGhzMTM8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fRElTRUFTRV9ERUFUSFMxMyA9IFN0YW5kYXJkUGFja2FnZS5TVEFOREFSRF9ESVNFQVNFX01PREVMX0xBQkVMX1ZBTFVFX0ZFQVRVUkVfQ09VTlQgKyA2NTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5EaXNlYXNlIERlYXRoczIzPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0RJU0VBU0VfREVBVEhTMjMgPSBTdGFuZGFyZFBhY2thZ2UuU1RBTkRBUkRfRElTRUFTRV9NT0RFTF9MQUJFTF9WQUxVRV9GRUFUVVJFX0NPVU5UICsgNjY7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RGlzZWFzZSBEZWF0aHMzMjwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IERFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19ESVNFQVNFX0RFQVRIUzMyID0gU3RhbmRhcmRQYWNrYWdlLlNUQU5EQVJEX0RJU0VBU0VfTU9ERUxfTEFCRUxfVkFMVUVfRkVBVFVSRV9DT1VOVCArIDY3OworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkRpc2Vhc2UgRGVhdGhzNDI8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fRElTRUFTRV9ERUFUSFM0MiA9IFN0YW5kYXJkUGFja2FnZS5TVEFOREFSRF9ESVNFQVNFX01PREVMX0xBQkVMX1ZBTFVFX0ZFQVRVUkVfQ09VTlQgKyA2ODsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5EaXNlYXNlIERlYXRoczE0PC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0RJU0VBU0VfREVBVEhTMTQgPSBTdGFuZGFyZFBhY2thZ2UuU1RBTkRBUkRfRElTRUFTRV9NT0RFTF9MQUJFTF9WQUxVRV9GRUFUVVJFX0NPVU5UICsgNjk7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RGlzZWFzZSBEZWF0aHMyNDwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IERFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19ESVNFQVNFX0RFQVRIUzI0ID0gU3RhbmRhcmRQYWNrYWdlLlNUQU5EQVJEX0RJU0VBU0VfTU9ERUxfTEFCRUxfVkFMVUVfRkVBVFVSRV9DT1VOVCArIDcwOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkRpc2Vhc2UgRGVhdGhzMzQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fRElTRUFTRV9ERUFUSFMzNCA9IFN0YW5kYXJkUGFja2FnZS5TVEFOREFSRF9ESVNFQVNFX01PREVMX0xBQkVMX1ZBTFVFX0ZFQVRVUkVfQ09VTlQgKyA3MTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5EaXNlYXNlIERlYXRoczQzPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0RJU0VBU0VfREVBVEhTNDMgPSBTdGFuZGFyZFBhY2thZ2UuU1RBTkRBUkRfRElTRUFTRV9NT0RFTF9MQUJFTF9WQUxVRV9GRUFUVVJFX0NPVU5UICsgNzI7CisKKwkvKioKKwkgKiBUaGUgbnVtYmVyIG9mIHN0cnVjdHVyYWwgZmVhdHVyZXMgb2YgdGhlICc8ZW0+RGVuZ3VlIE1vZGVsIEhvc3QgTGFiZWwgVmFsdWU8L2VtPicgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfRkVBVFVSRV9DT1VOVCA9IFN0YW5kYXJkUGFja2FnZS5TVEFOREFSRF9ESVNFQVNFX01PREVMX0xBQkVMX1ZBTFVFX0ZFQVRVUkVfQ09VTlQgKyA3MzsKKworCS8qKgorCSAqIFRoZSBtZXRhIG9iamVjdCBpZCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5pbXBsLkRlbmd1ZU1vZGVsVmVjdG9yTGFiZWxJbXBsIDxlbT5EZW5ndWUgTW9kZWwgVmVjdG9yIExhYmVsPC9lbT59JyBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5pbXBsLkRlbmd1ZU1vZGVsVmVjdG9yTGFiZWxJbXBsCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLmltcGwuVmVjdG9yUGFja2FnZUltcGwjZ2V0RGVuZ3VlTW9kZWxWZWN0b3JMYWJlbCgpCisJICogQGdlbmVyYXRlZAorCSAqLworCWludCBERU5HVUVfTU9ERUxfVkVDVE9SX0xBQkVMID0gNjsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5VUkk8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBERU5HVUVfTU9ERUxfVkVDVE9SX0xBQkVMX19VUkkgPSBTdGFuZGFyZFBhY2thZ2UuU1RBTkRBUkRfRElTRUFTRV9NT0RFTF9MQUJFTF9fVVJJOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlR5cGUgVVJJPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgREVOR1VFX01PREVMX1ZFQ1RPUl9MQUJFTF9fVFlQRV9VUkkgPSBTdGFuZGFyZFBhY2thZ2UuU1RBTkRBUkRfRElTRUFTRV9NT0RFTF9MQUJFTF9fVFlQRV9VUkk7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RHVibGluIENvcmU8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBERU5HVUVfTU9ERUxfVkVDVE9SX0xBQkVMX19EVUJMSU5fQ09SRSA9IFN0YW5kYXJkUGFja2FnZS5TVEFOREFSRF9ESVNFQVNFX01PREVMX0xBQkVMX19EVUJMSU5fQ09SRTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5VUkkgT2YgSWRlbnRpZmlhYmxlIFRvIEJlIExhYmVsZWQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBERU5HVUVfTU9ERUxfVkVDVE9SX0xBQkVMX19VUklfT0ZfSURFTlRJRklBQkxFX1RPX0JFX0xBQkVMRUQgPSBTdGFuZGFyZFBhY2thZ2UuU1RBTkRBUkRfRElTRUFTRV9NT0RFTF9MQUJFTF9fVVJJX09GX0lERU5USUZJQUJMRV9UT19CRV9MQUJFTEVEOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkN1cnJlbnQgVmFsdWU8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBERU5HVUVfTU9ERUxfVkVDVE9SX0xBQkVMX19DVVJSRU5UX1ZBTFVFID0gU3RhbmRhcmRQYWNrYWdlLlNUQU5EQVJEX0RJU0VBU0VfTU9ERUxfTEFCRUxfX0NVUlJFTlRfVkFMVUU7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+SWRlbnRpZmlhYmxlPC9iPjwvZW0+JyByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgREVOR1VFX01PREVMX1ZFQ1RPUl9MQUJFTF9fSURFTlRJRklBQkxFID0gU3RhbmRhcmRQYWNrYWdlLlNUQU5EQVJEX0RJU0VBU0VfTU9ERUxfTEFCRUxfX0lERU5USUZJQUJMRTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5OZXh0IFZhbHVlIFZhbGlkPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgREVOR1VFX01PREVMX1ZFQ1RPUl9MQUJFTF9fTkVYVF9WQUxVRV9WQUxJRCA9IFN0YW5kYXJkUGFja2FnZS5TVEFOREFSRF9ESVNFQVNFX01PREVMX0xBQkVMX19ORVhUX1ZBTFVFX1ZBTElEOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPk5leHQgVmFsdWU8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBERU5HVUVfTU9ERUxfVkVDVE9SX0xBQkVMX19ORVhUX1ZBTFVFID0gU3RhbmRhcmRQYWNrYWdlLlNUQU5EQVJEX0RJU0VBU0VfTU9ERUxfTEFCRUxfX05FWFRfVkFMVUU7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RGVjb3JhdG9yPC9iPjwvZW0+JyByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgREVOR1VFX01PREVMX1ZFQ1RPUl9MQUJFTF9fREVDT1JBVE9SID0gU3RhbmRhcmRQYWNrYWdlLlNUQU5EQVJEX0RJU0VBU0VfTU9ERUxfTEFCRUxfX0RFQ09SQVRPUjsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5Ob2RlPC9iPjwvZW0+JyByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgREVOR1VFX01PREVMX1ZFQ1RPUl9MQUJFTF9fTk9ERSA9IFN0YW5kYXJkUGFja2FnZS5TVEFOREFSRF9ESVNFQVNFX01PREVMX0xBQkVMX19OT0RFOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkRlbHRhIFZhbHVlPC9iPjwvZW0+JyByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgREVOR1VFX01PREVMX1ZFQ1RPUl9MQUJFTF9fREVMVEFfVkFMVUUgPSBTdGFuZGFyZFBhY2thZ2UuU1RBTkRBUkRfRElTRUFTRV9NT0RFTF9MQUJFTF9fREVMVEFfVkFMVUU7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VGVtcCBWYWx1ZTwvYj48L2VtPicgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IERFTkdVRV9NT0RFTF9WRUNUT1JfTEFCRUxfX1RFTVBfVkFMVUUgPSBTdGFuZGFyZFBhY2thZ2UuU1RBTkRBUkRfRElTRUFTRV9NT0RFTF9MQUJFTF9fVEVNUF9WQUxVRTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5Qcm9iZSBWYWx1ZTwvYj48L2VtPicgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IERFTkdVRV9NT0RFTF9WRUNUT1JfTEFCRUxfX1BST0JFX1ZBTFVFID0gU3RhbmRhcmRQYWNrYWdlLlNUQU5EQVJEX0RJU0VBU0VfTU9ERUxfTEFCRUxfX1BST0JFX1ZBTFVFOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkVycm9yIFNjYWxlPC9iPjwvZW0+JyByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgREVOR1VFX01PREVMX1ZFQ1RPUl9MQUJFTF9fRVJST1JfU0NBTEUgPSBTdGFuZGFyZFBhY2thZ2UuU1RBTkRBUkRfRElTRUFTRV9NT0RFTF9MQUJFTF9fRVJST1JfU0NBTEU7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+SWRlbnRpZmllcjwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IERFTkdVRV9NT0RFTF9WRUNUT1JfTEFCRUxfX0lERU5USUZJRVIgPSBTdGFuZGFyZFBhY2thZ2UuU1RBTkRBUkRfRElTRUFTRV9NT0RFTF9MQUJFTF9fSURFTlRJRklFUjsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5Qb3B1bGF0aW9uIExhYmVsPC9iPjwvZW0+JyByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgREVOR1VFX01PREVMX1ZFQ1RPUl9MQUJFTF9fUE9QVUxBVElPTl9MQUJFTCA9IFN0YW5kYXJkUGFja2FnZS5TVEFOREFSRF9ESVNFQVNFX01PREVMX0xBQkVMX19QT1BVTEFUSU9OX0xBQkVMOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlBvcHVsYXRpb24gTW9kZWwgTGFiZWw8L2I+PC9lbT4nIHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBERU5HVUVfTU9ERUxfVkVDVE9SX0xBQkVMX19QT1BVTEFUSU9OX01PREVMX0xBQkVMID0gU3RhbmRhcmRQYWNrYWdlLlNUQU5EQVJEX0RJU0VBU0VfTU9ERUxfTEFCRUxfX1BPUFVMQVRJT05fTU9ERUxfTEFCRUw7CisKKwkvKioKKwkgKiBUaGUgbnVtYmVyIG9mIHN0cnVjdHVyYWwgZmVhdHVyZXMgb2YgdGhlICc8ZW0+RGVuZ3VlIE1vZGVsIFZlY3RvciBMYWJlbDwvZW0+JyBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBERU5HVUVfTU9ERUxfVkVDVE9SX0xBQkVMX0ZFQVRVUkVfQ09VTlQgPSBTdGFuZGFyZFBhY2thZ2UuU1RBTkRBUkRfRElTRUFTRV9NT0RFTF9MQUJFTF9GRUFUVVJFX0NPVU5UICsgMDsKKworCS8qKgorCSAqIFRoZSBtZXRhIG9iamVjdCBpZCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5pbXBsLkRlbmd1ZU1vZGVsVmVjdG9yTGFiZWxWYWx1ZUltcGwgPGVtPkRlbmd1ZSBNb2RlbCBWZWN0b3IgTGFiZWwgVmFsdWU8L2VtPn0nIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLmltcGwuRGVuZ3VlTW9kZWxWZWN0b3JMYWJlbFZhbHVlSW1wbAorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5pbXBsLlZlY3RvclBhY2thZ2VJbXBsI2dldERlbmd1ZU1vZGVsVmVjdG9yTGFiZWxWYWx1ZSgpCisJICogQGdlbmVyYXRlZAorCSAqLworCWludCBERU5HVUVfTU9ERUxfVkVDVE9SX0xBQkVMX1ZBTFVFID0gNzsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5BcnJpdmFsczwvYj48L2VtPicgcmVmZXJlbmNlIGxpc3QuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgREVOR1VFX01PREVMX1ZFQ1RPUl9MQUJFTF9WQUxVRV9fQVJSSVZBTFMgPSBTdGFuZGFyZFBhY2thZ2UuU1RBTkRBUkRfRElTRUFTRV9NT0RFTF9MQUJFTF9WQUxVRV9fQVJSSVZBTFM7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RGVwYXJ0dXJlczwvYj48L2VtPicgcmVmZXJlbmNlIGxpc3QuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgREVOR1VFX01PREVMX1ZFQ1RPUl9MQUJFTF9WQUxVRV9fREVQQVJUVVJFUyA9IFN0YW5kYXJkUGFja2FnZS5TVEFOREFSRF9ESVNFQVNFX01PREVMX0xBQkVMX1ZBTFVFX19ERVBBUlRVUkVTOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlBvcHVsYXRpb24gQ291bnQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBERU5HVUVfTU9ERUxfVkVDVE9SX0xBQkVMX1ZBTFVFX19QT1BVTEFUSU9OX0NPVU5UID0gU3RhbmRhcmRQYWNrYWdlLlNUQU5EQVJEX0RJU0VBU0VfTU9ERUxfTEFCRUxfVkFMVUVfX1BPUFVMQVRJT05fQ09VTlQ7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+UzwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IERFTkdVRV9NT0RFTF9WRUNUT1JfTEFCRUxfVkFMVUVfX1MgPSBTdGFuZGFyZFBhY2thZ2UuU1RBTkRBUkRfRElTRUFTRV9NT0RFTF9MQUJFTF9WQUxVRV9fUzsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5JbmNpZGVuY2U8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBERU5HVUVfTU9ERUxfVkVDVE9SX0xBQkVMX1ZBTFVFX19JTkNJREVOQ0UgPSBTdGFuZGFyZFBhY2thZ2UuU1RBTkRBUkRfRElTRUFTRV9NT0RFTF9MQUJFTF9WQUxVRV9fSU5DSURFTkNFOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkRpc2Vhc2UgRGVhdGhzPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgREVOR1VFX01PREVMX1ZFQ1RPUl9MQUJFTF9WQUxVRV9fRElTRUFTRV9ERUFUSFMgPSBTdGFuZGFyZFBhY2thZ2UuU1RBTkRBUkRfRElTRUFTRV9NT0RFTF9MQUJFTF9WQUxVRV9fRElTRUFTRV9ERUFUSFM7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RTE8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBERU5HVUVfTU9ERUxfVkVDVE9SX0xBQkVMX1ZBTFVFX19FMSA9IFN0YW5kYXJkUGFja2FnZS5TVEFOREFSRF9ESVNFQVNFX01PREVMX0xBQkVMX1ZBTFVFX0ZFQVRVUkVfQ09VTlQgKyAwOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkUyPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgREVOR1VFX01PREVMX1ZFQ1RPUl9MQUJFTF9WQUxVRV9fRTIgPSBTdGFuZGFyZFBhY2thZ2UuU1RBTkRBUkRfRElTRUFTRV9NT0RFTF9MQUJFTF9WQUxVRV9GRUFUVVJFX0NPVU5UICsgMTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5FMzwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IERFTkdVRV9NT0RFTF9WRUNUT1JfTEFCRUxfVkFMVUVfX0UzID0gU3RhbmRhcmRQYWNrYWdlLlNUQU5EQVJEX0RJU0VBU0VfTU9ERUxfTEFCRUxfVkFMVUVfRkVBVFVSRV9DT1VOVCArIDI7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RTQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBERU5HVUVfTU9ERUxfVkVDVE9SX0xBQkVMX1ZBTFVFX19FNCA9IFN0YW5kYXJkUGFja2FnZS5TVEFOREFSRF9ESVNFQVNFX01PREVMX0xBQkVMX1ZBTFVFX0ZFQVRVUkVfQ09VTlQgKyAzOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkkxPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgREVOR1VFX01PREVMX1ZFQ1RPUl9MQUJFTF9WQUxVRV9fSTEgPSBTdGFuZGFyZFBhY2thZ2UuU1RBTkRBUkRfRElTRUFTRV9NT0RFTF9MQUJFTF9WQUxVRV9GRUFUVVJFX0NPVU5UICsgNDsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5JMjwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IERFTkdVRV9NT0RFTF9WRUNUT1JfTEFCRUxfVkFMVUVfX0kyID0gU3RhbmRhcmRQYWNrYWdlLlNUQU5EQVJEX0RJU0VBU0VfTU9ERUxfTEFCRUxfVkFMVUVfRkVBVFVSRV9DT1VOVCArIDU7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+STM8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBERU5HVUVfTU9ERUxfVkVDVE9SX0xBQkVMX1ZBTFVFX19JMyA9IFN0YW5kYXJkUGFja2FnZS5TVEFOREFSRF9ESVNFQVNFX01PREVMX0xBQkVMX1ZBTFVFX0ZFQVRVUkVfQ09VTlQgKyA2OworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkk0PC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgREVOR1VFX01PREVMX1ZFQ1RPUl9MQUJFTF9WQUxVRV9fSTQgPSBTdGFuZGFyZFBhY2thZ2UuU1RBTkRBUkRfRElTRUFTRV9NT0RFTF9MQUJFTF9WQUxVRV9GRUFUVVJFX0NPVU5UICsgNzsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5JbmNpZGVuY2UxPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgREVOR1VFX01PREVMX1ZFQ1RPUl9MQUJFTF9WQUxVRV9fSU5DSURFTkNFMSA9IFN0YW5kYXJkUGFja2FnZS5TVEFOREFSRF9ESVNFQVNFX01PREVMX0xBQkVMX1ZBTFVFX0ZFQVRVUkVfQ09VTlQgKyA4OworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkluY2lkZW5jZTI8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBERU5HVUVfTU9ERUxfVkVDVE9SX0xBQkVMX1ZBTFVFX19JTkNJREVOQ0UyID0gU3RhbmRhcmRQYWNrYWdlLlNUQU5EQVJEX0RJU0VBU0VfTU9ERUxfTEFCRUxfVkFMVUVfRkVBVFVSRV9DT1VOVCArIDk7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+SW5jaWRlbmNlMzwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IERFTkdVRV9NT0RFTF9WRUNUT1JfTEFCRUxfVkFMVUVfX0lOQ0lERU5DRTMgPSBTdGFuZGFyZFBhY2thZ2UuU1RBTkRBUkRfRElTRUFTRV9NT0RFTF9MQUJFTF9WQUxVRV9GRUFUVVJFX0NPVU5UICsgMTA7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+SW5jaWRlbmNlNDwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IERFTkdVRV9NT0RFTF9WRUNUT1JfTEFCRUxfVkFMVUVfX0lOQ0lERU5DRTQgPSBTdGFuZGFyZFBhY2thZ2UuU1RBTkRBUkRfRElTRUFTRV9NT0RFTF9MQUJFTF9WQUxVRV9GRUFUVVJFX0NPVU5UICsgMTE7CisKKwkvKioKKwkgKiBUaGUgbnVtYmVyIG9mIHN0cnVjdHVyYWwgZmVhdHVyZXMgb2YgdGhlICc8ZW0+RGVuZ3VlIE1vZGVsIFZlY3RvciBMYWJlbCBWYWx1ZTwvZW0+JyBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBERU5HVUVfTU9ERUxfVkVDVE9SX0xBQkVMX1ZBTFVFX0ZFQVRVUkVfQ09VTlQgPSBTdGFuZGFyZFBhY2thZ2UuU1RBTkRBUkRfRElTRUFTRV9NT0RFTF9MQUJFTF9WQUxVRV9GRUFUVVJFX0NPVU5UICsgMTI7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLk1hY2RvbmFsZFJvc3NEaXNlYXNlTW9kZWwgPGVtPk1hY2RvbmFsZCBSb3NzIERpc2Vhc2UgTW9kZWw8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICc8ZW0+TWFjZG9uYWxkIFJvc3MgRGlzZWFzZSBNb2RlbDwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuTWFjZG9uYWxkUm9zc0Rpc2Vhc2VNb2RlbAorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQ2xhc3MgZ2V0TWFjZG9uYWxkUm9zc0Rpc2Vhc2VNb2RlbCgpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLk1hY2RvbmFsZFJvc3NEaXNlYXNlTW9kZWwjZ2V0Qml0aW5nUmF0ZSA8ZW0+Qml0aW5nIFJhdGU8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxlbT5CaXRpbmcgUmF0ZTwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuTWFjZG9uYWxkUm9zc0Rpc2Vhc2VNb2RlbCNnZXRCaXRpbmdSYXRlKCkKKwkgKiBAc2VlICNnZXRNYWNkb25hbGRSb3NzRGlzZWFzZU1vZGVsKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUF0dHJpYnV0ZSBnZXRNYWNkb25hbGRSb3NzRGlzZWFzZU1vZGVsX0JpdGluZ1JhdGUoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5NYWNkb25hbGRSb3NzRGlzZWFzZU1vZGVsI2dldEluZmVjdGlvdXNCaXRpbmdQcm9wb3J0aW9uSHVtYW4gPGVtPkluZmVjdGlvdXMgQml0aW5nIFByb3BvcnRpb24gSHVtYW48L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxlbT5JbmZlY3Rpb3VzIEJpdGluZyBQcm9wb3J0aW9uIEh1bWFuPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5NYWNkb25hbGRSb3NzRGlzZWFzZU1vZGVsI2dldEluZmVjdGlvdXNCaXRpbmdQcm9wb3J0aW9uSHVtYW4oKQorCSAqIEBzZWUgI2dldE1hY2RvbmFsZFJvc3NEaXNlYXNlTW9kZWwoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQXR0cmlidXRlIGdldE1hY2RvbmFsZFJvc3NEaXNlYXNlTW9kZWxfSW5mZWN0aW91c0JpdGluZ1Byb3BvcnRpb25IdW1hbigpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLk1hY2RvbmFsZFJvc3NEaXNlYXNlTW9kZWwjZ2V0SW5mZWN0aW91c0JpdGluZ1Byb3BvcnRpb25WZWN0b3IgPGVtPkluZmVjdGlvdXMgQml0aW5nIFByb3BvcnRpb24gVmVjdG9yPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+SW5mZWN0aW91cyBCaXRpbmcgUHJvcG9ydGlvbiBWZWN0b3I8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLk1hY2RvbmFsZFJvc3NEaXNlYXNlTW9kZWwjZ2V0SW5mZWN0aW91c0JpdGluZ1Byb3BvcnRpb25WZWN0b3IoKQorCSAqIEBzZWUgI2dldE1hY2RvbmFsZFJvc3NEaXNlYXNlTW9kZWwoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQXR0cmlidXRlIGdldE1hY2RvbmFsZFJvc3NEaXNlYXNlTW9kZWxfSW5mZWN0aW91c0JpdGluZ1Byb3BvcnRpb25WZWN0b3IoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5NYWNkb25hbGRSb3NzRGlzZWFzZU1vZGVsI2dldFJlY292ZXJ5UmF0ZSA8ZW0+UmVjb3ZlcnkgUmF0ZTwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPGVtPlJlY292ZXJ5IFJhdGU8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLk1hY2RvbmFsZFJvc3NEaXNlYXNlTW9kZWwjZ2V0UmVjb3ZlcnlSYXRlKCkKKwkgKiBAc2VlICNnZXRNYWNkb25hbGRSb3NzRGlzZWFzZU1vZGVsKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUF0dHJpYnV0ZSBnZXRNYWNkb25hbGRSb3NzRGlzZWFzZU1vZGVsX1JlY292ZXJ5UmF0ZSgpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLk1hY2RvbmFsZFJvc3NEaXNlYXNlTW9kZWwjZ2V0SW5jdWJhdGlvblJhdGUgPGVtPkluY3ViYXRpb24gUmF0ZTwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPGVtPkluY3ViYXRpb24gUmF0ZTwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuTWFjZG9uYWxkUm9zc0Rpc2Vhc2VNb2RlbCNnZXRJbmN1YmF0aW9uUmF0ZSgpCisJICogQHNlZSAjZ2V0TWFjZG9uYWxkUm9zc0Rpc2Vhc2VNb2RlbCgpCisJICogQGdlbmVyYXRlZAorCSAqLworCUVBdHRyaWJ1dGUgZ2V0TWFjZG9uYWxkUm9zc0Rpc2Vhc2VNb2RlbF9JbmN1YmF0aW9uUmF0ZSgpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLk1hY2RvbmFsZFJvc3NEaXNlYXNlTW9kZWwjZ2V0VmVjdG9ySW5jdWJhdGlvblJhdGUgPGVtPlZlY3RvciBJbmN1YmF0aW9uIFJhdGU8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxlbT5WZWN0b3IgSW5jdWJhdGlvbiBSYXRlPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5NYWNkb25hbGRSb3NzRGlzZWFzZU1vZGVsI2dldFZlY3RvckluY3ViYXRpb25SYXRlKCkKKwkgKiBAc2VlICNnZXRNYWNkb25hbGRSb3NzRGlzZWFzZU1vZGVsKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUF0dHJpYnV0ZSBnZXRNYWNkb25hbGRSb3NzRGlzZWFzZU1vZGVsX1ZlY3RvckluY3ViYXRpb25SYXRlKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuTWFjZG9uYWxkUm9zc0Rpc2Vhc2VNb2RlbCNnZXRJbW11bml0eUxvc3NSYXRlIDxlbT5JbW11bml0eSBMb3NzIFJhdGU8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxlbT5JbW11bml0eSBMb3NzIFJhdGU8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLk1hY2RvbmFsZFJvc3NEaXNlYXNlTW9kZWwjZ2V0SW1tdW5pdHlMb3NzUmF0ZSgpCisJICogQHNlZSAjZ2V0TWFjZG9uYWxkUm9zc0Rpc2Vhc2VNb2RlbCgpCisJICogQGdlbmVyYXRlZAorCSAqLworCUVBdHRyaWJ1dGUgZ2V0TWFjZG9uYWxkUm9zc0Rpc2Vhc2VNb2RlbF9JbW11bml0eUxvc3NSYXRlKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLlZlY3RvckRpc2Vhc2VNb2RlbCA8ZW0+RGlzZWFzZSBNb2RlbDwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJzxlbT5EaXNlYXNlIE1vZGVsPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5WZWN0b3JEaXNlYXNlTW9kZWwKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUNsYXNzIGdldFZlY3RvckRpc2Vhc2VNb2RlbCgpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLlZlY3RvckRpc2Vhc2VNb2RlbCNnZXRWZWN0b3JQb3B1bGF0aW9uSWRlbnRpZmllciA8ZW0+VmVjdG9yIFBvcHVsYXRpb24gSWRlbnRpZmllcjwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPGVtPlZlY3RvciBQb3B1bGF0aW9uIElkZW50aWZpZXI8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLlZlY3RvckRpc2Vhc2VNb2RlbCNnZXRWZWN0b3JQb3B1bGF0aW9uSWRlbnRpZmllcigpCisJICogQHNlZSAjZ2V0VmVjdG9yRGlzZWFzZU1vZGVsKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUF0dHJpYnV0ZSBnZXRWZWN0b3JEaXNlYXNlTW9kZWxfVmVjdG9yUG9wdWxhdGlvbklkZW50aWZpZXIoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWwgPGVtPkRlbmd1ZSBNb2RlbDwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJzxlbT5EZW5ndWUgTW9kZWw8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLkRlbmd1ZU1vZGVsCisJICogQGdlbmVyYXRlZAorCSAqLworCUVDbGFzcyBnZXREZW5ndWVNb2RlbCgpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLkRlbmd1ZU1vZGVsI2dldEJpdGluZ1JhdGVTViA8ZW0+Qml0aW5nIFJhdGUgU1Y8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxlbT5CaXRpbmcgUmF0ZSBTVjwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWwjZ2V0Qml0aW5nUmF0ZVNWKCkKKwkgKiBAc2VlICNnZXREZW5ndWVNb2RlbCgpCisJICogQGdlbmVyYXRlZAorCSAqLworCUVBdHRyaWJ1dGUgZ2V0RGVuZ3VlTW9kZWxfQml0aW5nUmF0ZVNWKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWwjZ2V0Qml0aW5nUmF0ZUlWIDxlbT5CaXRpbmcgUmF0ZSBJVjwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPGVtPkJpdGluZyBSYXRlIElWPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbCNnZXRCaXRpbmdSYXRlSVYoKQorCSAqIEBzZWUgI2dldERlbmd1ZU1vZGVsKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUF0dHJpYnV0ZSBnZXREZW5ndWVNb2RlbF9CaXRpbmdSYXRlSVYoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbCNnZXRIb3N0SW5mZWN0aXZpdHkxIDxlbT5Ib3N0IEluZmVjdGl2aXR5MTwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPGVtPkhvc3QgSW5mZWN0aXZpdHkxPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbCNnZXRIb3N0SW5mZWN0aXZpdHkxKCkKKwkgKiBAc2VlICNnZXREZW5ndWVNb2RlbCgpCisJICogQGdlbmVyYXRlZAorCSAqLworCUVBdHRyaWJ1dGUgZ2V0RGVuZ3VlTW9kZWxfSG9zdEluZmVjdGl2aXR5MSgpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLkRlbmd1ZU1vZGVsI2dldEhvc3RJbmZlY3Rpdml0eTIgPGVtPkhvc3QgSW5mZWN0aXZpdHkyPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+SG9zdCBJbmZlY3Rpdml0eTI8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLkRlbmd1ZU1vZGVsI2dldEhvc3RJbmZlY3Rpdml0eTIoKQorCSAqIEBzZWUgI2dldERlbmd1ZU1vZGVsKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUF0dHJpYnV0ZSBnZXREZW5ndWVNb2RlbF9Ib3N0SW5mZWN0aXZpdHkyKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWwjZ2V0SG9zdEluZmVjdGl2aXR5MyA8ZW0+SG9zdCBJbmZlY3Rpdml0eTM8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxlbT5Ib3N0IEluZmVjdGl2aXR5MzwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWwjZ2V0SG9zdEluZmVjdGl2aXR5MygpCisJICogQHNlZSAjZ2V0RGVuZ3VlTW9kZWwoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQXR0cmlidXRlIGdldERlbmd1ZU1vZGVsX0hvc3RJbmZlY3Rpdml0eTMoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbCNnZXRIb3N0SW5mZWN0aXZpdHk0IDxlbT5Ib3N0IEluZmVjdGl2aXR5NDwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPGVtPkhvc3QgSW5mZWN0aXZpdHk0PC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbCNnZXRIb3N0SW5mZWN0aXZpdHk0KCkKKwkgKiBAc2VlICNnZXREZW5ndWVNb2RlbCgpCisJICogQGdlbmVyYXRlZAorCSAqLworCUVBdHRyaWJ1dGUgZ2V0RGVuZ3VlTW9kZWxfSG9zdEluZmVjdGl2aXR5NCgpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLkRlbmd1ZU1vZGVsI2dldEhvc3RQcmltYXJ5SW5jdWJhdGlvblJhdGUxIDxlbT5Ib3N0IFByaW1hcnkgSW5jdWJhdGlvbiBSYXRlMTwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPGVtPkhvc3QgUHJpbWFyeSBJbmN1YmF0aW9uIFJhdGUxPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbCNnZXRIb3N0UHJpbWFyeUluY3ViYXRpb25SYXRlMSgpCisJICogQHNlZSAjZ2V0RGVuZ3VlTW9kZWwoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQXR0cmlidXRlIGdldERlbmd1ZU1vZGVsX0hvc3RQcmltYXJ5SW5jdWJhdGlvblJhdGUxKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWwjZ2V0SG9zdFByaW1hcnlJbmN1YmF0aW9uUmF0ZTIgPGVtPkhvc3QgUHJpbWFyeSBJbmN1YmF0aW9uIFJhdGUyPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+SG9zdCBQcmltYXJ5IEluY3ViYXRpb24gUmF0ZTI8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLkRlbmd1ZU1vZGVsI2dldEhvc3RQcmltYXJ5SW5jdWJhdGlvblJhdGUyKCkKKwkgKiBAc2VlICNnZXREZW5ndWVNb2RlbCgpCisJICogQGdlbmVyYXRlZAorCSAqLworCUVBdHRyaWJ1dGUgZ2V0RGVuZ3VlTW9kZWxfSG9zdFByaW1hcnlJbmN1YmF0aW9uUmF0ZTIoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbCNnZXRIb3N0UHJpbWFyeUluY3ViYXRpb25SYXRlMyA8ZW0+SG9zdCBQcmltYXJ5IEluY3ViYXRpb24gUmF0ZTM8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxlbT5Ib3N0IFByaW1hcnkgSW5jdWJhdGlvbiBSYXRlMzwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWwjZ2V0SG9zdFByaW1hcnlJbmN1YmF0aW9uUmF0ZTMoKQorCSAqIEBzZWUgI2dldERlbmd1ZU1vZGVsKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUF0dHJpYnV0ZSBnZXREZW5ndWVNb2RlbF9Ib3N0UHJpbWFyeUluY3ViYXRpb25SYXRlMygpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLkRlbmd1ZU1vZGVsI2dldEhvc3RQcmltYXJ5SW5jdWJhdGlvblJhdGU0IDxlbT5Ib3N0IFByaW1hcnkgSW5jdWJhdGlvbiBSYXRlNDwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPGVtPkhvc3QgUHJpbWFyeSBJbmN1YmF0aW9uIFJhdGU0PC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbCNnZXRIb3N0UHJpbWFyeUluY3ViYXRpb25SYXRlNCgpCisJICogQHNlZSAjZ2V0RGVuZ3VlTW9kZWwoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQXR0cmlidXRlIGdldERlbmd1ZU1vZGVsX0hvc3RQcmltYXJ5SW5jdWJhdGlvblJhdGU0KCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWwjZ2V0SG9zdFByaW1hcnlSZWNvdmVyeVJhdGUxIDxlbT5Ib3N0IFByaW1hcnkgUmVjb3ZlcnkgUmF0ZTE8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxlbT5Ib3N0IFByaW1hcnkgUmVjb3ZlcnkgUmF0ZTE8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLkRlbmd1ZU1vZGVsI2dldEhvc3RQcmltYXJ5UmVjb3ZlcnlSYXRlMSgpCisJICogQHNlZSAjZ2V0RGVuZ3VlTW9kZWwoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQXR0cmlidXRlIGdldERlbmd1ZU1vZGVsX0hvc3RQcmltYXJ5UmVjb3ZlcnlSYXRlMSgpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLkRlbmd1ZU1vZGVsI2dldEhvc3RQcmltYXJ5UmVjb3ZlcnlSYXRlMiA8ZW0+SG9zdCBQcmltYXJ5IFJlY292ZXJ5IFJhdGUyPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+SG9zdCBQcmltYXJ5IFJlY292ZXJ5IFJhdGUyPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbCNnZXRIb3N0UHJpbWFyeVJlY292ZXJ5UmF0ZTIoKQorCSAqIEBzZWUgI2dldERlbmd1ZU1vZGVsKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUF0dHJpYnV0ZSBnZXREZW5ndWVNb2RlbF9Ib3N0UHJpbWFyeVJlY292ZXJ5UmF0ZTIoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbCNnZXRIb3N0UHJpbWFyeVJlY292ZXJ5UmF0ZTMgPGVtPkhvc3QgUHJpbWFyeSBSZWNvdmVyeSBSYXRlMzwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPGVtPkhvc3QgUHJpbWFyeSBSZWNvdmVyeSBSYXRlMzwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWwjZ2V0SG9zdFByaW1hcnlSZWNvdmVyeVJhdGUzKCkKKwkgKiBAc2VlICNnZXREZW5ndWVNb2RlbCgpCisJICogQGdlbmVyYXRlZAorCSAqLworCUVBdHRyaWJ1dGUgZ2V0RGVuZ3VlTW9kZWxfSG9zdFByaW1hcnlSZWNvdmVyeVJhdGUzKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWwjZ2V0SG9zdFByaW1hcnlSZWNvdmVyeVJhdGU0IDxlbT5Ib3N0IFByaW1hcnkgUmVjb3ZlcnkgUmF0ZTQ8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxlbT5Ib3N0IFByaW1hcnkgUmVjb3ZlcnkgUmF0ZTQ8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLkRlbmd1ZU1vZGVsI2dldEhvc3RQcmltYXJ5UmVjb3ZlcnlSYXRlNCgpCisJICogQHNlZSAjZ2V0RGVuZ3VlTW9kZWwoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQXR0cmlidXRlIGdldERlbmd1ZU1vZGVsX0hvc3RQcmltYXJ5UmVjb3ZlcnlSYXRlNCgpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLkRlbmd1ZU1vZGVsI2dldEhvc3RQcmltYXJ5SW1tdW5pdHlMb3NzUmF0ZTEgPGVtPkhvc3QgUHJpbWFyeSBJbW11bml0eSBMb3NzIFJhdGUxPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+SG9zdCBQcmltYXJ5IEltbXVuaXR5IExvc3MgUmF0ZTE8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLkRlbmd1ZU1vZGVsI2dldEhvc3RQcmltYXJ5SW1tdW5pdHlMb3NzUmF0ZTEoKQorCSAqIEBzZWUgI2dldERlbmd1ZU1vZGVsKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUF0dHJpYnV0ZSBnZXREZW5ndWVNb2RlbF9Ib3N0UHJpbWFyeUltbXVuaXR5TG9zc1JhdGUxKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWwjZ2V0SG9zdFByaW1hcnlJbW11bml0eUxvc3NSYXRlMiA8ZW0+SG9zdCBQcmltYXJ5IEltbXVuaXR5IExvc3MgUmF0ZTI8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxlbT5Ib3N0IFByaW1hcnkgSW1tdW5pdHkgTG9zcyBSYXRlMjwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWwjZ2V0SG9zdFByaW1hcnlJbW11bml0eUxvc3NSYXRlMigpCisJICogQHNlZSAjZ2V0RGVuZ3VlTW9kZWwoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQXR0cmlidXRlIGdldERlbmd1ZU1vZGVsX0hvc3RQcmltYXJ5SW1tdW5pdHlMb3NzUmF0ZTIoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbCNnZXRIb3N0UHJpbWFyeUltbXVuaXR5TG9zc1JhdGUzIDxlbT5Ib3N0IFByaW1hcnkgSW1tdW5pdHkgTG9zcyBSYXRlMzwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPGVtPkhvc3QgUHJpbWFyeSBJbW11bml0eSBMb3NzIFJhdGUzPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbCNnZXRIb3N0UHJpbWFyeUltbXVuaXR5TG9zc1JhdGUzKCkKKwkgKiBAc2VlICNnZXREZW5ndWVNb2RlbCgpCisJICogQGdlbmVyYXRlZAorCSAqLworCUVBdHRyaWJ1dGUgZ2V0RGVuZ3VlTW9kZWxfSG9zdFByaW1hcnlJbW11bml0eUxvc3NSYXRlMygpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLkRlbmd1ZU1vZGVsI2dldEhvc3RQcmltYXJ5SW1tdW5pdHlMb3NzUmF0ZTQgPGVtPkhvc3QgUHJpbWFyeSBJbW11bml0eSBMb3NzIFJhdGU0PC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+SG9zdCBQcmltYXJ5IEltbXVuaXR5IExvc3MgUmF0ZTQ8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLkRlbmd1ZU1vZGVsI2dldEhvc3RQcmltYXJ5SW1tdW5pdHlMb3NzUmF0ZTQoKQorCSAqIEBzZWUgI2dldERlbmd1ZU1vZGVsKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUF0dHJpYnV0ZSBnZXREZW5ndWVNb2RlbF9Ib3N0UHJpbWFyeUltbXVuaXR5TG9zc1JhdGU0KCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWwjZ2V0SG9zdFByaW1hcnlEaXNlYXNlRGVhdGhSYXRlMSA8ZW0+SG9zdCBQcmltYXJ5IERpc2Vhc2UgRGVhdGggUmF0ZTE8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxlbT5Ib3N0IFByaW1hcnkgRGlzZWFzZSBEZWF0aCBSYXRlMTwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWwjZ2V0SG9zdFByaW1hcnlEaXNlYXNlRGVhdGhSYXRlMSgpCisJICogQHNlZSAjZ2V0RGVuZ3VlTW9kZWwoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQXR0cmlidXRlIGdldERlbmd1ZU1vZGVsX0hvc3RQcmltYXJ5RGlzZWFzZURlYXRoUmF0ZTEoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbCNnZXRIb3N0UHJpbWFyeURpc2Vhc2VEZWF0aFJhdGUyIDxlbT5Ib3N0IFByaW1hcnkgRGlzZWFzZSBEZWF0aCBSYXRlMjwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPGVtPkhvc3QgUHJpbWFyeSBEaXNlYXNlIERlYXRoIFJhdGUyPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbCNnZXRIb3N0UHJpbWFyeURpc2Vhc2VEZWF0aFJhdGUyKCkKKwkgKiBAc2VlICNnZXREZW5ndWVNb2RlbCgpCisJICogQGdlbmVyYXRlZAorCSAqLworCUVBdHRyaWJ1dGUgZ2V0RGVuZ3VlTW9kZWxfSG9zdFByaW1hcnlEaXNlYXNlRGVhdGhSYXRlMigpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLkRlbmd1ZU1vZGVsI2dldEhvc3RQcmltYXJ5RGlzZWFzZURlYXRoUmF0ZTMgPGVtPkhvc3QgUHJpbWFyeSBEaXNlYXNlIERlYXRoIFJhdGUzPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+SG9zdCBQcmltYXJ5IERpc2Vhc2UgRGVhdGggUmF0ZTM8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLkRlbmd1ZU1vZGVsI2dldEhvc3RQcmltYXJ5RGlzZWFzZURlYXRoUmF0ZTMoKQorCSAqIEBzZWUgI2dldERlbmd1ZU1vZGVsKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUF0dHJpYnV0ZSBnZXREZW5ndWVNb2RlbF9Ib3N0UHJpbWFyeURpc2Vhc2VEZWF0aFJhdGUzKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWwjZ2V0SG9zdFByaW1hcnlEaXNlYXNlRGVhdGhSYXRlNCA8ZW0+SG9zdCBQcmltYXJ5IERpc2Vhc2UgRGVhdGggUmF0ZTQ8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxlbT5Ib3N0IFByaW1hcnkgRGlzZWFzZSBEZWF0aCBSYXRlNDwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWwjZ2V0SG9zdFByaW1hcnlEaXNlYXNlRGVhdGhSYXRlNCgpCisJICogQHNlZSAjZ2V0RGVuZ3VlTW9kZWwoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQXR0cmlidXRlIGdldERlbmd1ZU1vZGVsX0hvc3RQcmltYXJ5RGlzZWFzZURlYXRoUmF0ZTQoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbCNnZXRIb3N0QURFMTIgPGVtPkhvc3QgQURFMTI8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxlbT5Ib3N0IEFERTEyPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbCNnZXRIb3N0QURFMTIoKQorCSAqIEBzZWUgI2dldERlbmd1ZU1vZGVsKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUF0dHJpYnV0ZSBnZXREZW5ndWVNb2RlbF9Ib3N0QURFMTIoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbCNnZXRIb3N0QURFMTMgPGVtPkhvc3QgQURFMTM8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxlbT5Ib3N0IEFERTEzPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbCNnZXRIb3N0QURFMTMoKQorCSAqIEBzZWUgI2dldERlbmd1ZU1vZGVsKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUF0dHJpYnV0ZSBnZXREZW5ndWVNb2RlbF9Ib3N0QURFMTMoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbCNnZXRIb3N0QURFMTQgPGVtPkhvc3QgQURFMTQ8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxlbT5Ib3N0IEFERTE0PC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbCNnZXRIb3N0QURFMTQoKQorCSAqIEBzZWUgI2dldERlbmd1ZU1vZGVsKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUF0dHJpYnV0ZSBnZXREZW5ndWVNb2RlbF9Ib3N0QURFMTQoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbCNnZXRIb3N0QURFMjEgPGVtPkhvc3QgQURFMjE8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxlbT5Ib3N0IEFERTIxPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbCNnZXRIb3N0QURFMjEoKQorCSAqIEBzZWUgI2dldERlbmd1ZU1vZGVsKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUF0dHJpYnV0ZSBnZXREZW5ndWVNb2RlbF9Ib3N0QURFMjEoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbCNnZXRIb3N0QURFMjMgPGVtPkhvc3QgQURFMjM8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxlbT5Ib3N0IEFERTIzPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbCNnZXRIb3N0QURFMjMoKQorCSAqIEBzZWUgI2dldERlbmd1ZU1vZGVsKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUF0dHJpYnV0ZSBnZXREZW5ndWVNb2RlbF9Ib3N0QURFMjMoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbCNnZXRIb3N0QURFMjQgPGVtPkhvc3QgQURFMjQ8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxlbT5Ib3N0IEFERTI0PC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbCNnZXRIb3N0QURFMjQoKQorCSAqIEBzZWUgI2dldERlbmd1ZU1vZGVsKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUF0dHJpYnV0ZSBnZXREZW5ndWVNb2RlbF9Ib3N0QURFMjQoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbCNnZXRIb3N0QURFMzEgPGVtPkhvc3QgQURFMzE8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxlbT5Ib3N0IEFERTMxPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbCNnZXRIb3N0QURFMzEoKQorCSAqIEBzZWUgI2dldERlbmd1ZU1vZGVsKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUF0dHJpYnV0ZSBnZXREZW5ndWVNb2RlbF9Ib3N0QURFMzEoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbCNnZXRIb3N0QURFMzIgPGVtPkhvc3QgQURFMzI8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxlbT5Ib3N0IEFERTMyPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbCNnZXRIb3N0QURFMzIoKQorCSAqIEBzZWUgI2dldERlbmd1ZU1vZGVsKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUF0dHJpYnV0ZSBnZXREZW5ndWVNb2RlbF9Ib3N0QURFMzIoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbCNnZXRIb3N0QURFMzQgPGVtPkhvc3QgQURFMzQ8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxlbT5Ib3N0IEFERTM0PC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbCNnZXRIb3N0QURFMzQoKQorCSAqIEBzZWUgI2dldERlbmd1ZU1vZGVsKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUF0dHJpYnV0ZSBnZXREZW5ndWVNb2RlbF9Ib3N0QURFMzQoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbCNnZXRIb3N0QURFNDEgPGVtPkhvc3QgQURFNDE8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxlbT5Ib3N0IEFERTQxPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbCNnZXRIb3N0QURFNDEoKQorCSAqIEBzZWUgI2dldERlbmd1ZU1vZGVsKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUF0dHJpYnV0ZSBnZXREZW5ndWVNb2RlbF9Ib3N0QURFNDEoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbCNnZXRIb3N0QURFNDIgPGVtPkhvc3QgQURFNDI8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxlbT5Ib3N0IEFERTQyPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbCNnZXRIb3N0QURFNDIoKQorCSAqIEBzZWUgI2dldERlbmd1ZU1vZGVsKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUF0dHJpYnV0ZSBnZXREZW5ndWVNb2RlbF9Ib3N0QURFNDIoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbCNnZXRIb3N0QURFNDMgPGVtPkhvc3QgQURFNDM8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxlbT5Ib3N0IEFERTQzPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbCNnZXRIb3N0QURFNDMoKQorCSAqIEBzZWUgI2dldERlbmd1ZU1vZGVsKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUF0dHJpYnV0ZSBnZXREZW5ndWVNb2RlbF9Ib3N0QURFNDMoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbCNnZXRIb3N0U2Vjb25kYXJ5RGlzZWFzZURlYXRoUmF0ZTEyIDxlbT5Ib3N0IFNlY29uZGFyeSBEaXNlYXNlIERlYXRoIFJhdGUxMjwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPGVtPkhvc3QgU2Vjb25kYXJ5IERpc2Vhc2UgRGVhdGggUmF0ZTEyPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbCNnZXRIb3N0U2Vjb25kYXJ5RGlzZWFzZURlYXRoUmF0ZTEyKCkKKwkgKiBAc2VlICNnZXREZW5ndWVNb2RlbCgpCisJICogQGdlbmVyYXRlZAorCSAqLworCUVBdHRyaWJ1dGUgZ2V0RGVuZ3VlTW9kZWxfSG9zdFNlY29uZGFyeURpc2Vhc2VEZWF0aFJhdGUxMigpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLkRlbmd1ZU1vZGVsI2dldEhvc3RTZWNvbmRhcnlEaXNlYXNlRGVhdGhSYXRlMTMgPGVtPkhvc3QgU2Vjb25kYXJ5IERpc2Vhc2UgRGVhdGggUmF0ZTEzPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+SG9zdCBTZWNvbmRhcnkgRGlzZWFzZSBEZWF0aCBSYXRlMTM8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLkRlbmd1ZU1vZGVsI2dldEhvc3RTZWNvbmRhcnlEaXNlYXNlRGVhdGhSYXRlMTMoKQorCSAqIEBzZWUgI2dldERlbmd1ZU1vZGVsKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUF0dHJpYnV0ZSBnZXREZW5ndWVNb2RlbF9Ib3N0U2Vjb25kYXJ5RGlzZWFzZURlYXRoUmF0ZTEzKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWwjZ2V0SG9zdFNlY29uZGFyeURpc2Vhc2VEZWF0aFJhdGUxNCA8ZW0+SG9zdCBTZWNvbmRhcnkgRGlzZWFzZSBEZWF0aCBSYXRlMTQ8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxlbT5Ib3N0IFNlY29uZGFyeSBEaXNlYXNlIERlYXRoIFJhdGUxNDwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWwjZ2V0SG9zdFNlY29uZGFyeURpc2Vhc2VEZWF0aFJhdGUxNCgpCisJICogQHNlZSAjZ2V0RGVuZ3VlTW9kZWwoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQXR0cmlidXRlIGdldERlbmd1ZU1vZGVsX0hvc3RTZWNvbmRhcnlEaXNlYXNlRGVhdGhSYXRlMTQoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbCNnZXRIb3N0U2Vjb25kYXJ5RGlzZWFzZURlYXRoUmF0ZTIxIDxlbT5Ib3N0IFNlY29uZGFyeSBEaXNlYXNlIERlYXRoIFJhdGUyMTwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPGVtPkhvc3QgU2Vjb25kYXJ5IERpc2Vhc2UgRGVhdGggUmF0ZTIxPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbCNnZXRIb3N0U2Vjb25kYXJ5RGlzZWFzZURlYXRoUmF0ZTIxKCkKKwkgKiBAc2VlICNnZXREZW5ndWVNb2RlbCgpCisJICogQGdlbmVyYXRlZAorCSAqLworCUVBdHRyaWJ1dGUgZ2V0RGVuZ3VlTW9kZWxfSG9zdFNlY29uZGFyeURpc2Vhc2VEZWF0aFJhdGUyMSgpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLkRlbmd1ZU1vZGVsI2dldEhvc3RTZWNvbmRhcnlEaXNlYXNlRGVhdGhSYXRlMjMgPGVtPkhvc3QgU2Vjb25kYXJ5IERpc2Vhc2UgRGVhdGggUmF0ZTIzPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+SG9zdCBTZWNvbmRhcnkgRGlzZWFzZSBEZWF0aCBSYXRlMjM8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLkRlbmd1ZU1vZGVsI2dldEhvc3RTZWNvbmRhcnlEaXNlYXNlRGVhdGhSYXRlMjMoKQorCSAqIEBzZWUgI2dldERlbmd1ZU1vZGVsKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUF0dHJpYnV0ZSBnZXREZW5ndWVNb2RlbF9Ib3N0U2Vjb25kYXJ5RGlzZWFzZURlYXRoUmF0ZTIzKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWwjZ2V0SG9zdFNlY29uZGFyeURpc2Vhc2VEZWF0aFJhdGUyNCA8ZW0+SG9zdCBTZWNvbmRhcnkgRGlzZWFzZSBEZWF0aCBSYXRlMjQ8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxlbT5Ib3N0IFNlY29uZGFyeSBEaXNlYXNlIERlYXRoIFJhdGUyNDwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWwjZ2V0SG9zdFNlY29uZGFyeURpc2Vhc2VEZWF0aFJhdGUyNCgpCisJICogQHNlZSAjZ2V0RGVuZ3VlTW9kZWwoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQXR0cmlidXRlIGdldERlbmd1ZU1vZGVsX0hvc3RTZWNvbmRhcnlEaXNlYXNlRGVhdGhSYXRlMjQoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbCNnZXRIb3N0U2Vjb25kYXJ5RGlzZWFzZURlYXRoUmF0ZTMxIDxlbT5Ib3N0IFNlY29uZGFyeSBEaXNlYXNlIERlYXRoIFJhdGUzMTwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPGVtPkhvc3QgU2Vjb25kYXJ5IERpc2Vhc2UgRGVhdGggUmF0ZTMxPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbCNnZXRIb3N0U2Vjb25kYXJ5RGlzZWFzZURlYXRoUmF0ZTMxKCkKKwkgKiBAc2VlICNnZXREZW5ndWVNb2RlbCgpCisJICogQGdlbmVyYXRlZAorCSAqLworCUVBdHRyaWJ1dGUgZ2V0RGVuZ3VlTW9kZWxfSG9zdFNlY29uZGFyeURpc2Vhc2VEZWF0aFJhdGUzMSgpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLkRlbmd1ZU1vZGVsI2dldEhvc3RTZWNvbmRhcnlEaXNlYXNlRGVhdGhSYXRlMzIgPGVtPkhvc3QgU2Vjb25kYXJ5IERpc2Vhc2UgRGVhdGggUmF0ZTMyPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+SG9zdCBTZWNvbmRhcnkgRGlzZWFzZSBEZWF0aCBSYXRlMzI8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLkRlbmd1ZU1vZGVsI2dldEhvc3RTZWNvbmRhcnlEaXNlYXNlRGVhdGhSYXRlMzIoKQorCSAqIEBzZWUgI2dldERlbmd1ZU1vZGVsKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUF0dHJpYnV0ZSBnZXREZW5ndWVNb2RlbF9Ib3N0U2Vjb25kYXJ5RGlzZWFzZURlYXRoUmF0ZTMyKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWwjZ2V0SG9zdFNlY29uZGFyeURpc2Vhc2VEZWF0aFJhdGUzNCA8ZW0+SG9zdCBTZWNvbmRhcnkgRGlzZWFzZSBEZWF0aCBSYXRlMzQ8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxlbT5Ib3N0IFNlY29uZGFyeSBEaXNlYXNlIERlYXRoIFJhdGUzNDwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWwjZ2V0SG9zdFNlY29uZGFyeURpc2Vhc2VEZWF0aFJhdGUzNCgpCisJICogQHNlZSAjZ2V0RGVuZ3VlTW9kZWwoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQXR0cmlidXRlIGdldERlbmd1ZU1vZGVsX0hvc3RTZWNvbmRhcnlEaXNlYXNlRGVhdGhSYXRlMzQoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbCNnZXRIb3N0U2Vjb25kYXJ5RGlzZWFzZURlYXRoUmF0ZTQxIDxlbT5Ib3N0IFNlY29uZGFyeSBEaXNlYXNlIERlYXRoIFJhdGU0MTwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPGVtPkhvc3QgU2Vjb25kYXJ5IERpc2Vhc2UgRGVhdGggUmF0ZTQxPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbCNnZXRIb3N0U2Vjb25kYXJ5RGlzZWFzZURlYXRoUmF0ZTQxKCkKKwkgKiBAc2VlICNnZXREZW5ndWVNb2RlbCgpCisJICogQGdlbmVyYXRlZAorCSAqLworCUVBdHRyaWJ1dGUgZ2V0RGVuZ3VlTW9kZWxfSG9zdFNlY29uZGFyeURpc2Vhc2VEZWF0aFJhdGU0MSgpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLkRlbmd1ZU1vZGVsI2dldEhvc3RTZWNvbmRhcnlEaXNlYXNlRGVhdGhSYXRlNDIgPGVtPkhvc3QgU2Vjb25kYXJ5IERpc2Vhc2UgRGVhdGggUmF0ZTQyPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+SG9zdCBTZWNvbmRhcnkgRGlzZWFzZSBEZWF0aCBSYXRlNDI8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLkRlbmd1ZU1vZGVsI2dldEhvc3RTZWNvbmRhcnlEaXNlYXNlRGVhdGhSYXRlNDIoKQorCSAqIEBzZWUgI2dldERlbmd1ZU1vZGVsKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUF0dHJpYnV0ZSBnZXREZW5ndWVNb2RlbF9Ib3N0U2Vjb25kYXJ5RGlzZWFzZURlYXRoUmF0ZTQyKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWwjZ2V0SG9zdFNlY29uZGFyeURpc2Vhc2VEZWF0aFJhdGU0MyA8ZW0+SG9zdCBTZWNvbmRhcnkgRGlzZWFzZSBEZWF0aCBSYXRlNDM8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxlbT5Ib3N0IFNlY29uZGFyeSBEaXNlYXNlIERlYXRoIFJhdGU0MzwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWwjZ2V0SG9zdFNlY29uZGFyeURpc2Vhc2VEZWF0aFJhdGU0MygpCisJICogQHNlZSAjZ2V0RGVuZ3VlTW9kZWwoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQXR0cmlidXRlIGdldERlbmd1ZU1vZGVsX0hvc3RTZWNvbmRhcnlEaXNlYXNlRGVhdGhSYXRlNDMoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbCNnZXRIb3N0U2Vjb25kYXJ5UmVjb3ZlcnlSYXRlMTIgPGVtPkhvc3QgU2Vjb25kYXJ5IFJlY292ZXJ5IFJhdGUxMjwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPGVtPkhvc3QgU2Vjb25kYXJ5IFJlY292ZXJ5IFJhdGUxMjwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWwjZ2V0SG9zdFNlY29uZGFyeVJlY292ZXJ5UmF0ZTEyKCkKKwkgKiBAc2VlICNnZXREZW5ndWVNb2RlbCgpCisJICogQGdlbmVyYXRlZAorCSAqLworCUVBdHRyaWJ1dGUgZ2V0RGVuZ3VlTW9kZWxfSG9zdFNlY29uZGFyeVJlY292ZXJ5UmF0ZTEyKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWwjZ2V0SG9zdFNlY29uZGFyeVJlY292ZXJ5UmF0ZTEzIDxlbT5Ib3N0IFNlY29uZGFyeSBSZWNvdmVyeSBSYXRlMTM8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxlbT5Ib3N0IFNlY29uZGFyeSBSZWNvdmVyeSBSYXRlMTM8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLkRlbmd1ZU1vZGVsI2dldEhvc3RTZWNvbmRhcnlSZWNvdmVyeVJhdGUxMygpCisJICogQHNlZSAjZ2V0RGVuZ3VlTW9kZWwoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQXR0cmlidXRlIGdldERlbmd1ZU1vZGVsX0hvc3RTZWNvbmRhcnlSZWNvdmVyeVJhdGUxMygpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLkRlbmd1ZU1vZGVsI2dldEhvc3RTZWNvbmRhcnlSZWNvdmVyeVJhdGUxNCA8ZW0+SG9zdCBTZWNvbmRhcnkgUmVjb3ZlcnkgUmF0ZTE0PC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+SG9zdCBTZWNvbmRhcnkgUmVjb3ZlcnkgUmF0ZTE0PC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbCNnZXRIb3N0U2Vjb25kYXJ5UmVjb3ZlcnlSYXRlMTQoKQorCSAqIEBzZWUgI2dldERlbmd1ZU1vZGVsKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUF0dHJpYnV0ZSBnZXREZW5ndWVNb2RlbF9Ib3N0U2Vjb25kYXJ5UmVjb3ZlcnlSYXRlMTQoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbCNnZXRIb3N0U2Vjb25kYXJ5UmVjb3ZlcnlSYXRlMjEgPGVtPkhvc3QgU2Vjb25kYXJ5IFJlY292ZXJ5IFJhdGUyMTwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPGVtPkhvc3QgU2Vjb25kYXJ5IFJlY292ZXJ5IFJhdGUyMTwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWwjZ2V0SG9zdFNlY29uZGFyeVJlY292ZXJ5UmF0ZTIxKCkKKwkgKiBAc2VlICNnZXREZW5ndWVNb2RlbCgpCisJICogQGdlbmVyYXRlZAorCSAqLworCUVBdHRyaWJ1dGUgZ2V0RGVuZ3VlTW9kZWxfSG9zdFNlY29uZGFyeVJlY292ZXJ5UmF0ZTIxKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWwjZ2V0SG9zdFNlY29uZGFyeVJlY292ZXJ5UmF0ZTIzIDxlbT5Ib3N0IFNlY29uZGFyeSBSZWNvdmVyeSBSYXRlMjM8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxlbT5Ib3N0IFNlY29uZGFyeSBSZWNvdmVyeSBSYXRlMjM8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLkRlbmd1ZU1vZGVsI2dldEhvc3RTZWNvbmRhcnlSZWNvdmVyeVJhdGUyMygpCisJICogQHNlZSAjZ2V0RGVuZ3VlTW9kZWwoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQXR0cmlidXRlIGdldERlbmd1ZU1vZGVsX0hvc3RTZWNvbmRhcnlSZWNvdmVyeVJhdGUyMygpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLkRlbmd1ZU1vZGVsI2dldEhvc3RTZWNvbmRhcnlSZWNvdmVyeVJhdGUyNCA8ZW0+SG9zdCBTZWNvbmRhcnkgUmVjb3ZlcnkgUmF0ZTI0PC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+SG9zdCBTZWNvbmRhcnkgUmVjb3ZlcnkgUmF0ZTI0PC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbCNnZXRIb3N0U2Vjb25kYXJ5UmVjb3ZlcnlSYXRlMjQoKQorCSAqIEBzZWUgI2dldERlbmd1ZU1vZGVsKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUF0dHJpYnV0ZSBnZXREZW5ndWVNb2RlbF9Ib3N0U2Vjb25kYXJ5UmVjb3ZlcnlSYXRlMjQoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbCNnZXRIb3N0U2Vjb25kYXJ5UmVjb3ZlcnlSYXRlMzEgPGVtPkhvc3QgU2Vjb25kYXJ5IFJlY292ZXJ5IFJhdGUzMTwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPGVtPkhvc3QgU2Vjb25kYXJ5IFJlY292ZXJ5IFJhdGUzMTwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWwjZ2V0SG9zdFNlY29uZGFyeVJlY292ZXJ5UmF0ZTMxKCkKKwkgKiBAc2VlICNnZXREZW5ndWVNb2RlbCgpCisJICogQGdlbmVyYXRlZAorCSAqLworCUVBdHRyaWJ1dGUgZ2V0RGVuZ3VlTW9kZWxfSG9zdFNlY29uZGFyeVJlY292ZXJ5UmF0ZTMxKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWwjZ2V0SG9zdFNlY29uZGFyeVJlY292ZXJ5UmF0ZTMyIDxlbT5Ib3N0IFNlY29uZGFyeSBSZWNvdmVyeSBSYXRlMzI8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxlbT5Ib3N0IFNlY29uZGFyeSBSZWNvdmVyeSBSYXRlMzI8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLkRlbmd1ZU1vZGVsI2dldEhvc3RTZWNvbmRhcnlSZWNvdmVyeVJhdGUzMigpCisJICogQHNlZSAjZ2V0RGVuZ3VlTW9kZWwoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQXR0cmlidXRlIGdldERlbmd1ZU1vZGVsX0hvc3RTZWNvbmRhcnlSZWNvdmVyeVJhdGUzMigpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLkRlbmd1ZU1vZGVsI2dldEhvc3RTZWNvbmRhcnlSZWNvdmVyeVJhdGUzNCA8ZW0+SG9zdCBTZWNvbmRhcnkgUmVjb3ZlcnkgUmF0ZTM0PC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+SG9zdCBTZWNvbmRhcnkgUmVjb3ZlcnkgUmF0ZTM0PC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbCNnZXRIb3N0U2Vjb25kYXJ5UmVjb3ZlcnlSYXRlMzQoKQorCSAqIEBzZWUgI2dldERlbmd1ZU1vZGVsKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUF0dHJpYnV0ZSBnZXREZW5ndWVNb2RlbF9Ib3N0U2Vjb25kYXJ5UmVjb3ZlcnlSYXRlMzQoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbCNnZXRIb3N0U2Vjb25kYXJ5UmVjb3ZlcnlSYXRlNDEgPGVtPkhvc3QgU2Vjb25kYXJ5IFJlY292ZXJ5IFJhdGU0MTwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPGVtPkhvc3QgU2Vjb25kYXJ5IFJlY292ZXJ5IFJhdGU0MTwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWwjZ2V0SG9zdFNlY29uZGFyeVJlY292ZXJ5UmF0ZTQxKCkKKwkgKiBAc2VlICNnZXREZW5ndWVNb2RlbCgpCisJICogQGdlbmVyYXRlZAorCSAqLworCUVBdHRyaWJ1dGUgZ2V0RGVuZ3VlTW9kZWxfSG9zdFNlY29uZGFyeVJlY292ZXJ5UmF0ZTQxKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWwjZ2V0SG9zdFNlY29uZGFyeVJlY292ZXJ5UmF0ZTQyIDxlbT5Ib3N0IFNlY29uZGFyeSBSZWNvdmVyeSBSYXRlNDI8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxlbT5Ib3N0IFNlY29uZGFyeSBSZWNvdmVyeSBSYXRlNDI8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLkRlbmd1ZU1vZGVsI2dldEhvc3RTZWNvbmRhcnlSZWNvdmVyeVJhdGU0MigpCisJICogQHNlZSAjZ2V0RGVuZ3VlTW9kZWwoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQXR0cmlidXRlIGdldERlbmd1ZU1vZGVsX0hvc3RTZWNvbmRhcnlSZWNvdmVyeVJhdGU0MigpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLkRlbmd1ZU1vZGVsI2dldEhvc3RTZWNvbmRhcnlSZWNvdmVyeVJhdGU0MyA8ZW0+SG9zdCBTZWNvbmRhcnkgUmVjb3ZlcnkgUmF0ZTQzPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+SG9zdCBTZWNvbmRhcnkgUmVjb3ZlcnkgUmF0ZTQzPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbCNnZXRIb3N0U2Vjb25kYXJ5UmVjb3ZlcnlSYXRlNDMoKQorCSAqIEBzZWUgI2dldERlbmd1ZU1vZGVsKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUF0dHJpYnV0ZSBnZXREZW5ndWVNb2RlbF9Ib3N0U2Vjb25kYXJ5UmVjb3ZlcnlSYXRlNDMoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbCNnZXRIb3N0U2Vjb25kYXJ5SW5jdWJhdGlvblJhdGUxMiA8ZW0+SG9zdCBTZWNvbmRhcnkgSW5jdWJhdGlvbiBSYXRlMTI8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxlbT5Ib3N0IFNlY29uZGFyeSBJbmN1YmF0aW9uIFJhdGUxMjwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWwjZ2V0SG9zdFNlY29uZGFyeUluY3ViYXRpb25SYXRlMTIoKQorCSAqIEBzZWUgI2dldERlbmd1ZU1vZGVsKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUF0dHJpYnV0ZSBnZXREZW5ndWVNb2RlbF9Ib3N0U2Vjb25kYXJ5SW5jdWJhdGlvblJhdGUxMigpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLkRlbmd1ZU1vZGVsI2dldEhvc3RTZWNvbmRhcnlJbmN1YmF0aW9uUmF0ZTEzIDxlbT5Ib3N0IFNlY29uZGFyeSBJbmN1YmF0aW9uIFJhdGUxMzwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPGVtPkhvc3QgU2Vjb25kYXJ5IEluY3ViYXRpb24gUmF0ZTEzPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbCNnZXRIb3N0U2Vjb25kYXJ5SW5jdWJhdGlvblJhdGUxMygpCisJICogQHNlZSAjZ2V0RGVuZ3VlTW9kZWwoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQXR0cmlidXRlIGdldERlbmd1ZU1vZGVsX0hvc3RTZWNvbmRhcnlJbmN1YmF0aW9uUmF0ZTEzKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWwjZ2V0SG9zdFNlY29uZGFyeUluY3ViYXRpb25SYXRlMTQgPGVtPkhvc3QgU2Vjb25kYXJ5IEluY3ViYXRpb24gUmF0ZTE0PC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+SG9zdCBTZWNvbmRhcnkgSW5jdWJhdGlvbiBSYXRlMTQ8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLkRlbmd1ZU1vZGVsI2dldEhvc3RTZWNvbmRhcnlJbmN1YmF0aW9uUmF0ZTE0KCkKKwkgKiBAc2VlICNnZXREZW5ndWVNb2RlbCgpCisJICogQGdlbmVyYXRlZAorCSAqLworCUVBdHRyaWJ1dGUgZ2V0RGVuZ3VlTW9kZWxfSG9zdFNlY29uZGFyeUluY3ViYXRpb25SYXRlMTQoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbCNnZXRIb3N0U2Vjb25kYXJ5SW5jdWJhdGlvblJhdGUyMSA8ZW0+SG9zdCBTZWNvbmRhcnkgSW5jdWJhdGlvbiBSYXRlMjE8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxlbT5Ib3N0IFNlY29uZGFyeSBJbmN1YmF0aW9uIFJhdGUyMTwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWwjZ2V0SG9zdFNlY29uZGFyeUluY3ViYXRpb25SYXRlMjEoKQorCSAqIEBzZWUgI2dldERlbmd1ZU1vZGVsKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUF0dHJpYnV0ZSBnZXREZW5ndWVNb2RlbF9Ib3N0U2Vjb25kYXJ5SW5jdWJhdGlvblJhdGUyMSgpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLkRlbmd1ZU1vZGVsI2dldEhvc3RTZWNvbmRhcnlJbmN1YmF0aW9uUmF0ZTIzIDxlbT5Ib3N0IFNlY29uZGFyeSBJbmN1YmF0aW9uIFJhdGUyMzwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPGVtPkhvc3QgU2Vjb25kYXJ5IEluY3ViYXRpb24gUmF0ZTIzPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbCNnZXRIb3N0U2Vjb25kYXJ5SW5jdWJhdGlvblJhdGUyMygpCisJICogQHNlZSAjZ2V0RGVuZ3VlTW9kZWwoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQXR0cmlidXRlIGdldERlbmd1ZU1vZGVsX0hvc3RTZWNvbmRhcnlJbmN1YmF0aW9uUmF0ZTIzKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWwjZ2V0SG9zdFNlY29uZGFyeUluY3ViYXRpb25SYXRlMjQgPGVtPkhvc3QgU2Vjb25kYXJ5IEluY3ViYXRpb24gUmF0ZTI0PC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+SG9zdCBTZWNvbmRhcnkgSW5jdWJhdGlvbiBSYXRlMjQ8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLkRlbmd1ZU1vZGVsI2dldEhvc3RTZWNvbmRhcnlJbmN1YmF0aW9uUmF0ZTI0KCkKKwkgKiBAc2VlICNnZXREZW5ndWVNb2RlbCgpCisJICogQGdlbmVyYXRlZAorCSAqLworCUVBdHRyaWJ1dGUgZ2V0RGVuZ3VlTW9kZWxfSG9zdFNlY29uZGFyeUluY3ViYXRpb25SYXRlMjQoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbCNnZXRIb3N0U2Vjb25kYXJ5SW5jdWJhdGlvblJhdGUzMSA8ZW0+SG9zdCBTZWNvbmRhcnkgSW5jdWJhdGlvbiBSYXRlMzE8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxlbT5Ib3N0IFNlY29uZGFyeSBJbmN1YmF0aW9uIFJhdGUzMTwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWwjZ2V0SG9zdFNlY29uZGFyeUluY3ViYXRpb25SYXRlMzEoKQorCSAqIEBzZWUgI2dldERlbmd1ZU1vZGVsKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUF0dHJpYnV0ZSBnZXREZW5ndWVNb2RlbF9Ib3N0U2Vjb25kYXJ5SW5jdWJhdGlvblJhdGUzMSgpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLkRlbmd1ZU1vZGVsI2dldEhvc3RTZWNvbmRhcnlJbmN1YmF0aW9uUmF0ZTMyIDxlbT5Ib3N0IFNlY29uZGFyeSBJbmN1YmF0aW9uIFJhdGUzMjwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPGVtPkhvc3QgU2Vjb25kYXJ5IEluY3ViYXRpb24gUmF0ZTMyPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbCNnZXRIb3N0U2Vjb25kYXJ5SW5jdWJhdGlvblJhdGUzMigpCisJICogQHNlZSAjZ2V0RGVuZ3VlTW9kZWwoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQXR0cmlidXRlIGdldERlbmd1ZU1vZGVsX0hvc3RTZWNvbmRhcnlJbmN1YmF0aW9uUmF0ZTMyKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWwjZ2V0SG9zdFNlY29uZGFyeUluY3ViYXRpb25SYXRlMzQgPGVtPkhvc3QgU2Vjb25kYXJ5IEluY3ViYXRpb24gUmF0ZTM0PC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+SG9zdCBTZWNvbmRhcnkgSW5jdWJhdGlvbiBSYXRlMzQ8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLkRlbmd1ZU1vZGVsI2dldEhvc3RTZWNvbmRhcnlJbmN1YmF0aW9uUmF0ZTM0KCkKKwkgKiBAc2VlICNnZXREZW5ndWVNb2RlbCgpCisJICogQGdlbmVyYXRlZAorCSAqLworCUVBdHRyaWJ1dGUgZ2V0RGVuZ3VlTW9kZWxfSG9zdFNlY29uZGFyeUluY3ViYXRpb25SYXRlMzQoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbCNnZXRIb3N0U2Vjb25kYXJ5SW5jdWJhdGlvblJhdGU0MSA8ZW0+SG9zdCBTZWNvbmRhcnkgSW5jdWJhdGlvbiBSYXRlNDE8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxlbT5Ib3N0IFNlY29uZGFyeSBJbmN1YmF0aW9uIFJhdGU0MTwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWwjZ2V0SG9zdFNlY29uZGFyeUluY3ViYXRpb25SYXRlNDEoKQorCSAqIEBzZWUgI2dldERlbmd1ZU1vZGVsKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUF0dHJpYnV0ZSBnZXREZW5ndWVNb2RlbF9Ib3N0U2Vjb25kYXJ5SW5jdWJhdGlvblJhdGU0MSgpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLkRlbmd1ZU1vZGVsI2dldEhvc3RTZWNvbmRhcnlJbmN1YmF0aW9uUmF0ZTQyIDxlbT5Ib3N0IFNlY29uZGFyeSBJbmN1YmF0aW9uIFJhdGU0MjwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPGVtPkhvc3QgU2Vjb25kYXJ5IEluY3ViYXRpb24gUmF0ZTQyPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbCNnZXRIb3N0U2Vjb25kYXJ5SW5jdWJhdGlvblJhdGU0MigpCisJICogQHNlZSAjZ2V0RGVuZ3VlTW9kZWwoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQXR0cmlidXRlIGdldERlbmd1ZU1vZGVsX0hvc3RTZWNvbmRhcnlJbmN1YmF0aW9uUmF0ZTQyKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWwjZ2V0SG9zdFNlY29uZGFyeUluY3ViYXRpb25SYXRlNDMgPGVtPkhvc3QgU2Vjb25kYXJ5IEluY3ViYXRpb24gUmF0ZTQzPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+SG9zdCBTZWNvbmRhcnkgSW5jdWJhdGlvbiBSYXRlNDM8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLkRlbmd1ZU1vZGVsI2dldEhvc3RTZWNvbmRhcnlJbmN1YmF0aW9uUmF0ZTQzKCkKKwkgKiBAc2VlICNnZXREZW5ndWVNb2RlbCgpCisJICogQGdlbmVyYXRlZAorCSAqLworCUVBdHRyaWJ1dGUgZ2V0RGVuZ3VlTW9kZWxfSG9zdFNlY29uZGFyeUluY3ViYXRpb25SYXRlNDMoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbCNnZXRWZWN0b3JJbmZlY3Rpdml0eTEgPGVtPlZlY3RvciBJbmZlY3Rpdml0eTE8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxlbT5WZWN0b3IgSW5mZWN0aXZpdHkxPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbCNnZXRWZWN0b3JJbmZlY3Rpdml0eTEoKQorCSAqIEBzZWUgI2dldERlbmd1ZU1vZGVsKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUF0dHJpYnV0ZSBnZXREZW5ndWVNb2RlbF9WZWN0b3JJbmZlY3Rpdml0eTEoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbCNnZXRWZWN0b3JJbmZlY3Rpdml0eTIgPGVtPlZlY3RvciBJbmZlY3Rpdml0eTI8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxlbT5WZWN0b3IgSW5mZWN0aXZpdHkyPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbCNnZXRWZWN0b3JJbmZlY3Rpdml0eTIoKQorCSAqIEBzZWUgI2dldERlbmd1ZU1vZGVsKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUF0dHJpYnV0ZSBnZXREZW5ndWVNb2RlbF9WZWN0b3JJbmZlY3Rpdml0eTIoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbCNnZXRWZWN0b3JJbmZlY3Rpdml0eTMgPGVtPlZlY3RvciBJbmZlY3Rpdml0eTM8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxlbT5WZWN0b3IgSW5mZWN0aXZpdHkzPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbCNnZXRWZWN0b3JJbmZlY3Rpdml0eTMoKQorCSAqIEBzZWUgI2dldERlbmd1ZU1vZGVsKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUF0dHJpYnV0ZSBnZXREZW5ndWVNb2RlbF9WZWN0b3JJbmZlY3Rpdml0eTMoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbCNnZXRWZWN0b3JJbmZlY3Rpdml0eTQgPGVtPlZlY3RvciBJbmZlY3Rpdml0eTQ8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxlbT5WZWN0b3IgSW5mZWN0aXZpdHk0PC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbCNnZXRWZWN0b3JJbmZlY3Rpdml0eTQoKQorCSAqIEBzZWUgI2dldERlbmd1ZU1vZGVsKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUF0dHJpYnV0ZSBnZXREZW5ndWVNb2RlbF9WZWN0b3JJbmZlY3Rpdml0eTQoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbCNnZXRWZWN0b3JBREUxIDxlbT5WZWN0b3IgQURFMTwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPGVtPlZlY3RvciBBREUxPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbCNnZXRWZWN0b3JBREUxKCkKKwkgKiBAc2VlICNnZXREZW5ndWVNb2RlbCgpCisJICogQGdlbmVyYXRlZAorCSAqLworCUVBdHRyaWJ1dGUgZ2V0RGVuZ3VlTW9kZWxfVmVjdG9yQURFMSgpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLkRlbmd1ZU1vZGVsI2dldFZlY3RvckFERTIgPGVtPlZlY3RvciBBREUyPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+VmVjdG9yIEFERTI8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLkRlbmd1ZU1vZGVsI2dldFZlY3RvckFERTIoKQorCSAqIEBzZWUgI2dldERlbmd1ZU1vZGVsKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUF0dHJpYnV0ZSBnZXREZW5ndWVNb2RlbF9WZWN0b3JBREUyKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWwjZ2V0VmVjdG9yQURFMyA8ZW0+VmVjdG9yIEFERTM8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxlbT5WZWN0b3IgQURFMzwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWwjZ2V0VmVjdG9yQURFMygpCisJICogQHNlZSAjZ2V0RGVuZ3VlTW9kZWwoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQXR0cmlidXRlIGdldERlbmd1ZU1vZGVsX1ZlY3RvckFERTMoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbCNnZXRWZWN0b3JBREU0IDxlbT5WZWN0b3IgQURFNDwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPGVtPlZlY3RvciBBREU0PC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbCNnZXRWZWN0b3JBREU0KCkKKwkgKiBAc2VlICNnZXREZW5ndWVNb2RlbCgpCisJICogQGdlbmVyYXRlZAorCSAqLworCUVBdHRyaWJ1dGUgZ2V0RGVuZ3VlTW9kZWxfVmVjdG9yQURFNCgpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLkRlbmd1ZU1vZGVsI2dldFZlY3RvckluY3ViYXRpb25SYXRlMSA8ZW0+VmVjdG9yIEluY3ViYXRpb24gUmF0ZTE8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxlbT5WZWN0b3IgSW5jdWJhdGlvbiBSYXRlMTwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWwjZ2V0VmVjdG9ySW5jdWJhdGlvblJhdGUxKCkKKwkgKiBAc2VlICNnZXREZW5ndWVNb2RlbCgpCisJICogQGdlbmVyYXRlZAorCSAqLworCUVBdHRyaWJ1dGUgZ2V0RGVuZ3VlTW9kZWxfVmVjdG9ySW5jdWJhdGlvblJhdGUxKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWwjZ2V0VmVjdG9ySW5jdWJhdGlvblJhdGUyIDxlbT5WZWN0b3IgSW5jdWJhdGlvbiBSYXRlMjwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPGVtPlZlY3RvciBJbmN1YmF0aW9uIFJhdGUyPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbCNnZXRWZWN0b3JJbmN1YmF0aW9uUmF0ZTIoKQorCSAqIEBzZWUgI2dldERlbmd1ZU1vZGVsKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUF0dHJpYnV0ZSBnZXREZW5ndWVNb2RlbF9WZWN0b3JJbmN1YmF0aW9uUmF0ZTIoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbCNnZXRWZWN0b3JJbmN1YmF0aW9uUmF0ZTMgPGVtPlZlY3RvciBJbmN1YmF0aW9uIFJhdGUzPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+VmVjdG9yIEluY3ViYXRpb24gUmF0ZTM8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLkRlbmd1ZU1vZGVsI2dldFZlY3RvckluY3ViYXRpb25SYXRlMygpCisJICogQHNlZSAjZ2V0RGVuZ3VlTW9kZWwoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQXR0cmlidXRlIGdldERlbmd1ZU1vZGVsX1ZlY3RvckluY3ViYXRpb25SYXRlMygpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLkRlbmd1ZU1vZGVsI2dldFZlY3RvckluY3ViYXRpb25SYXRlNCA8ZW0+VmVjdG9yIEluY3ViYXRpb24gUmF0ZTQ8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxlbT5WZWN0b3IgSW5jdWJhdGlvbiBSYXRlNDwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWwjZ2V0VmVjdG9ySW5jdWJhdGlvblJhdGU0KCkKKwkgKiBAc2VlICNnZXREZW5ndWVNb2RlbCgpCisJICogQGdlbmVyYXRlZAorCSAqLworCUVBdHRyaWJ1dGUgZ2V0RGVuZ3VlTW9kZWxfVmVjdG9ySW5jdWJhdGlvblJhdGU0KCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLlNpbXBsZURlbmd1ZU1vZGVsIDxlbT5TaW1wbGUgRGVuZ3VlIE1vZGVsPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAnPGVtPlNpbXBsZSBEZW5ndWUgTW9kZWw8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLlNpbXBsZURlbmd1ZU1vZGVsCisJICogQGdlbmVyYXRlZAorCSAqLworCUVDbGFzcyBnZXRTaW1wbGVEZW5ndWVNb2RlbCgpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLlNpbXBsZURlbmd1ZU1vZGVsI2dldEJpdGluZ1JhdGUgPGVtPkJpdGluZyBSYXRlPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+Qml0aW5nIFJhdGU8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLlNpbXBsZURlbmd1ZU1vZGVsI2dldEJpdGluZ1JhdGUoKQorCSAqIEBzZWUgI2dldFNpbXBsZURlbmd1ZU1vZGVsKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUF0dHJpYnV0ZSBnZXRTaW1wbGVEZW5ndWVNb2RlbF9CaXRpbmdSYXRlKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuU2ltcGxlRGVuZ3VlTW9kZWwjZ2V0SG9zdEluZmVjdGl2aXR5MSA8ZW0+SG9zdCBJbmZlY3Rpdml0eTE8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxlbT5Ib3N0IEluZmVjdGl2aXR5MTwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuU2ltcGxlRGVuZ3VlTW9kZWwjZ2V0SG9zdEluZmVjdGl2aXR5MSgpCisJICogQHNlZSAjZ2V0U2ltcGxlRGVuZ3VlTW9kZWwoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQXR0cmlidXRlIGdldFNpbXBsZURlbmd1ZU1vZGVsX0hvc3RJbmZlY3Rpdml0eTEoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5TaW1wbGVEZW5ndWVNb2RlbCNnZXRIb3N0SW5mZWN0aXZpdHkyIDxlbT5Ib3N0IEluZmVjdGl2aXR5MjwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPGVtPkhvc3QgSW5mZWN0aXZpdHkyPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5TaW1wbGVEZW5ndWVNb2RlbCNnZXRIb3N0SW5mZWN0aXZpdHkyKCkKKwkgKiBAc2VlICNnZXRTaW1wbGVEZW5ndWVNb2RlbCgpCisJICogQGdlbmVyYXRlZAorCSAqLworCUVBdHRyaWJ1dGUgZ2V0U2ltcGxlRGVuZ3VlTW9kZWxfSG9zdEluZmVjdGl2aXR5MigpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLlNpbXBsZURlbmd1ZU1vZGVsI2dldEhvc3RJbmZlY3Rpdml0eTMgPGVtPkhvc3QgSW5mZWN0aXZpdHkzPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+SG9zdCBJbmZlY3Rpdml0eTM8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLlNpbXBsZURlbmd1ZU1vZGVsI2dldEhvc3RJbmZlY3Rpdml0eTMoKQorCSAqIEBzZWUgI2dldFNpbXBsZURlbmd1ZU1vZGVsKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUF0dHJpYnV0ZSBnZXRTaW1wbGVEZW5ndWVNb2RlbF9Ib3N0SW5mZWN0aXZpdHkzKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuU2ltcGxlRGVuZ3VlTW9kZWwjZ2V0SG9zdEluZmVjdGl2aXR5NCA8ZW0+SG9zdCBJbmZlY3Rpdml0eTQ8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxlbT5Ib3N0IEluZmVjdGl2aXR5NDwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuU2ltcGxlRGVuZ3VlTW9kZWwjZ2V0SG9zdEluZmVjdGl2aXR5NCgpCisJICogQHNlZSAjZ2V0U2ltcGxlRGVuZ3VlTW9kZWwoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQXR0cmlidXRlIGdldFNpbXBsZURlbmd1ZU1vZGVsX0hvc3RJbmZlY3Rpdml0eTQoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5TaW1wbGVEZW5ndWVNb2RlbCNnZXRIb3N0UHJpbWFyeUluY3ViYXRpb25SYXRlIDxlbT5Ib3N0IFByaW1hcnkgSW5jdWJhdGlvbiBSYXRlPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+SG9zdCBQcmltYXJ5IEluY3ViYXRpb24gUmF0ZTwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuU2ltcGxlRGVuZ3VlTW9kZWwjZ2V0SG9zdFByaW1hcnlJbmN1YmF0aW9uUmF0ZSgpCisJICogQHNlZSAjZ2V0U2ltcGxlRGVuZ3VlTW9kZWwoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQXR0cmlidXRlIGdldFNpbXBsZURlbmd1ZU1vZGVsX0hvc3RQcmltYXJ5SW5jdWJhdGlvblJhdGUoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5TaW1wbGVEZW5ndWVNb2RlbCNnZXRIb3N0UHJpbWFyeVJlY292ZXJ5UmF0ZSA8ZW0+SG9zdCBQcmltYXJ5IFJlY292ZXJ5IFJhdGU8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxlbT5Ib3N0IFByaW1hcnkgUmVjb3ZlcnkgUmF0ZTwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuU2ltcGxlRGVuZ3VlTW9kZWwjZ2V0SG9zdFByaW1hcnlSZWNvdmVyeVJhdGUoKQorCSAqIEBzZWUgI2dldFNpbXBsZURlbmd1ZU1vZGVsKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUF0dHJpYnV0ZSBnZXRTaW1wbGVEZW5ndWVNb2RlbF9Ib3N0UHJpbWFyeVJlY292ZXJ5UmF0ZSgpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLlNpbXBsZURlbmd1ZU1vZGVsI2dldEhvc3RQcmltYXJ5SW1tdW5pdHlMb3NzUmF0ZSA8ZW0+SG9zdCBQcmltYXJ5IEltbXVuaXR5IExvc3MgUmF0ZTwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPGVtPkhvc3QgUHJpbWFyeSBJbW11bml0eSBMb3NzIFJhdGU8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLlNpbXBsZURlbmd1ZU1vZGVsI2dldEhvc3RQcmltYXJ5SW1tdW5pdHlMb3NzUmF0ZSgpCisJICogQHNlZSAjZ2V0U2ltcGxlRGVuZ3VlTW9kZWwoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQXR0cmlidXRlIGdldFNpbXBsZURlbmd1ZU1vZGVsX0hvc3RQcmltYXJ5SW1tdW5pdHlMb3NzUmF0ZSgpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLlNpbXBsZURlbmd1ZU1vZGVsI2dldEhvc3RQcmltYXJ5RGVhdGhSYXRlIDxlbT5Ib3N0IFByaW1hcnkgRGVhdGggUmF0ZTwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPGVtPkhvc3QgUHJpbWFyeSBEZWF0aCBSYXRlPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5TaW1wbGVEZW5ndWVNb2RlbCNnZXRIb3N0UHJpbWFyeURlYXRoUmF0ZSgpCisJICogQHNlZSAjZ2V0U2ltcGxlRGVuZ3VlTW9kZWwoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQXR0cmlidXRlIGdldFNpbXBsZURlbmd1ZU1vZGVsX0hvc3RQcmltYXJ5RGVhdGhSYXRlKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuU2ltcGxlRGVuZ3VlTW9kZWwjZ2V0SG9zdEFERTEgPGVtPkhvc3QgQURFMTwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPGVtPkhvc3QgQURFMTwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuU2ltcGxlRGVuZ3VlTW9kZWwjZ2V0SG9zdEFERTEoKQorCSAqIEBzZWUgI2dldFNpbXBsZURlbmd1ZU1vZGVsKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUF0dHJpYnV0ZSBnZXRTaW1wbGVEZW5ndWVNb2RlbF9Ib3N0QURFMSgpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLlNpbXBsZURlbmd1ZU1vZGVsI2dldEhvc3RBREUyIDxlbT5Ib3N0IEFERTI8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxlbT5Ib3N0IEFERTI8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLlNpbXBsZURlbmd1ZU1vZGVsI2dldEhvc3RBREUyKCkKKwkgKiBAc2VlICNnZXRTaW1wbGVEZW5ndWVNb2RlbCgpCisJICogQGdlbmVyYXRlZAorCSAqLworCUVBdHRyaWJ1dGUgZ2V0U2ltcGxlRGVuZ3VlTW9kZWxfSG9zdEFERTIoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5TaW1wbGVEZW5ndWVNb2RlbCNnZXRIb3N0QURFMyA8ZW0+SG9zdCBBREUzPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+SG9zdCBBREUzPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5TaW1wbGVEZW5ndWVNb2RlbCNnZXRIb3N0QURFMygpCisJICogQHNlZSAjZ2V0U2ltcGxlRGVuZ3VlTW9kZWwoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQXR0cmlidXRlIGdldFNpbXBsZURlbmd1ZU1vZGVsX0hvc3RBREUzKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuU2ltcGxlRGVuZ3VlTW9kZWwjZ2V0SG9zdEFERTQgPGVtPkhvc3QgQURFNDwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPGVtPkhvc3QgQURFNDwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuU2ltcGxlRGVuZ3VlTW9kZWwjZ2V0SG9zdEFERTQoKQorCSAqIEBzZWUgI2dldFNpbXBsZURlbmd1ZU1vZGVsKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUF0dHJpYnV0ZSBnZXRTaW1wbGVEZW5ndWVNb2RlbF9Ib3N0QURFNCgpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLlNpbXBsZURlbmd1ZU1vZGVsI2dldEhvc3RTZWNvbmRhcnlJbmN1YmF0aW9uUmF0ZSA8ZW0+SG9zdCBTZWNvbmRhcnkgSW5jdWJhdGlvbiBSYXRlPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+SG9zdCBTZWNvbmRhcnkgSW5jdWJhdGlvbiBSYXRlPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5TaW1wbGVEZW5ndWVNb2RlbCNnZXRIb3N0U2Vjb25kYXJ5SW5jdWJhdGlvblJhdGUoKQorCSAqIEBzZWUgI2dldFNpbXBsZURlbmd1ZU1vZGVsKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUF0dHJpYnV0ZSBnZXRTaW1wbGVEZW5ndWVNb2RlbF9Ib3N0U2Vjb25kYXJ5SW5jdWJhdGlvblJhdGUoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5TaW1wbGVEZW5ndWVNb2RlbCNnZXRIb3N0U2Vjb25kYXJ5UmVjb3ZlcnlSYXRlIDxlbT5Ib3N0IFNlY29uZGFyeSBSZWNvdmVyeSBSYXRlPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+SG9zdCBTZWNvbmRhcnkgUmVjb3ZlcnkgUmF0ZTwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuU2ltcGxlRGVuZ3VlTW9kZWwjZ2V0SG9zdFNlY29uZGFyeVJlY292ZXJ5UmF0ZSgpCisJICogQHNlZSAjZ2V0U2ltcGxlRGVuZ3VlTW9kZWwoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQXR0cmlidXRlIGdldFNpbXBsZURlbmd1ZU1vZGVsX0hvc3RTZWNvbmRhcnlSZWNvdmVyeVJhdGUoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5TaW1wbGVEZW5ndWVNb2RlbCNnZXRIb3N0U2Vjb25kYXJ5RGVhdGhSYXRlIDxlbT5Ib3N0IFNlY29uZGFyeSBEZWF0aCBSYXRlPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+SG9zdCBTZWNvbmRhcnkgRGVhdGggUmF0ZTwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuU2ltcGxlRGVuZ3VlTW9kZWwjZ2V0SG9zdFNlY29uZGFyeURlYXRoUmF0ZSgpCisJICogQHNlZSAjZ2V0U2ltcGxlRGVuZ3VlTW9kZWwoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQXR0cmlidXRlIGdldFNpbXBsZURlbmd1ZU1vZGVsX0hvc3RTZWNvbmRhcnlEZWF0aFJhdGUoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5TaW1wbGVEZW5ndWVNb2RlbCNnZXRWZWN0b3JJbmZlY3Rpdml0eTEgPGVtPlZlY3RvciBJbmZlY3Rpdml0eTE8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxlbT5WZWN0b3IgSW5mZWN0aXZpdHkxPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5TaW1wbGVEZW5ndWVNb2RlbCNnZXRWZWN0b3JJbmZlY3Rpdml0eTEoKQorCSAqIEBzZWUgI2dldFNpbXBsZURlbmd1ZU1vZGVsKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUF0dHJpYnV0ZSBnZXRTaW1wbGVEZW5ndWVNb2RlbF9WZWN0b3JJbmZlY3Rpdml0eTEoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5TaW1wbGVEZW5ndWVNb2RlbCNnZXRWZWN0b3JJbmZlY3Rpdml0eTIgPGVtPlZlY3RvciBJbmZlY3Rpdml0eTI8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxlbT5WZWN0b3IgSW5mZWN0aXZpdHkyPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5TaW1wbGVEZW5ndWVNb2RlbCNnZXRWZWN0b3JJbmZlY3Rpdml0eTIoKQorCSAqIEBzZWUgI2dldFNpbXBsZURlbmd1ZU1vZGVsKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUF0dHJpYnV0ZSBnZXRTaW1wbGVEZW5ndWVNb2RlbF9WZWN0b3JJbmZlY3Rpdml0eTIoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5TaW1wbGVEZW5ndWVNb2RlbCNnZXRWZWN0b3JJbmZlY3Rpdml0eTMgPGVtPlZlY3RvciBJbmZlY3Rpdml0eTM8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxlbT5WZWN0b3IgSW5mZWN0aXZpdHkzPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5TaW1wbGVEZW5ndWVNb2RlbCNnZXRWZWN0b3JJbmZlY3Rpdml0eTMoKQorCSAqIEBzZWUgI2dldFNpbXBsZURlbmd1ZU1vZGVsKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUF0dHJpYnV0ZSBnZXRTaW1wbGVEZW5ndWVNb2RlbF9WZWN0b3JJbmZlY3Rpdml0eTMoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5TaW1wbGVEZW5ndWVNb2RlbCNnZXRWZWN0b3JJbmZlY3Rpdml0eTQgPGVtPlZlY3RvciBJbmZlY3Rpdml0eTQ8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxlbT5WZWN0b3IgSW5mZWN0aXZpdHk0PC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5TaW1wbGVEZW5ndWVNb2RlbCNnZXRWZWN0b3JJbmZlY3Rpdml0eTQoKQorCSAqIEBzZWUgI2dldFNpbXBsZURlbmd1ZU1vZGVsKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUF0dHJpYnV0ZSBnZXRTaW1wbGVEZW5ndWVNb2RlbF9WZWN0b3JJbmZlY3Rpdml0eTQoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5TaW1wbGVEZW5ndWVNb2RlbCNnZXRWZWN0b3JBREUxIDxlbT5WZWN0b3IgQURFMTwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPGVtPlZlY3RvciBBREUxPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5TaW1wbGVEZW5ndWVNb2RlbCNnZXRWZWN0b3JBREUxKCkKKwkgKiBAc2VlICNnZXRTaW1wbGVEZW5ndWVNb2RlbCgpCisJICogQGdlbmVyYXRlZAorCSAqLworCUVBdHRyaWJ1dGUgZ2V0U2ltcGxlRGVuZ3VlTW9kZWxfVmVjdG9yQURFMSgpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLlNpbXBsZURlbmd1ZU1vZGVsI2dldFZlY3RvckFERTIgPGVtPlZlY3RvciBBREUyPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+VmVjdG9yIEFERTI8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLlNpbXBsZURlbmd1ZU1vZGVsI2dldFZlY3RvckFERTIoKQorCSAqIEBzZWUgI2dldFNpbXBsZURlbmd1ZU1vZGVsKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUF0dHJpYnV0ZSBnZXRTaW1wbGVEZW5ndWVNb2RlbF9WZWN0b3JBREUyKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuU2ltcGxlRGVuZ3VlTW9kZWwjZ2V0VmVjdG9yQURFMyA8ZW0+VmVjdG9yIEFERTM8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxlbT5WZWN0b3IgQURFMzwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuU2ltcGxlRGVuZ3VlTW9kZWwjZ2V0VmVjdG9yQURFMygpCisJICogQHNlZSAjZ2V0U2ltcGxlRGVuZ3VlTW9kZWwoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQXR0cmlidXRlIGdldFNpbXBsZURlbmd1ZU1vZGVsX1ZlY3RvckFERTMoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5TaW1wbGVEZW5ndWVNb2RlbCNnZXRWZWN0b3JBREU0IDxlbT5WZWN0b3IgQURFNDwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPGVtPlZlY3RvciBBREU0PC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5TaW1wbGVEZW5ndWVNb2RlbCNnZXRWZWN0b3JBREU0KCkKKwkgKiBAc2VlICNnZXRTaW1wbGVEZW5ndWVNb2RlbCgpCisJICogQGdlbmVyYXRlZAorCSAqLworCUVBdHRyaWJ1dGUgZ2V0U2ltcGxlRGVuZ3VlTW9kZWxfVmVjdG9yQURFNCgpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLlNpbXBsZURlbmd1ZU1vZGVsI2dldFZlY3RvckluY3ViYXRpb25SYXRlIDxlbT5WZWN0b3IgSW5jdWJhdGlvbiBSYXRlPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+VmVjdG9yIEluY3ViYXRpb24gUmF0ZTwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuU2ltcGxlRGVuZ3VlTW9kZWwjZ2V0VmVjdG9ySW5jdWJhdGlvblJhdGUoKQorCSAqIEBzZWUgI2dldFNpbXBsZURlbmd1ZU1vZGVsKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUF0dHJpYnV0ZSBnZXRTaW1wbGVEZW5ndWVNb2RlbF9WZWN0b3JJbmN1YmF0aW9uUmF0ZSgpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbEhvc3RMYWJlbCA8ZW0+RGVuZ3VlIE1vZGVsIEhvc3QgTGFiZWw8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICc8ZW0+RGVuZ3VlIE1vZGVsIEhvc3QgTGFiZWw8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLkRlbmd1ZU1vZGVsSG9zdExhYmVsCisJICogQGdlbmVyYXRlZAorCSAqLworCUVDbGFzcyBnZXREZW5ndWVNb2RlbEhvc3RMYWJlbCgpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlIDxlbT5EZW5ndWUgTW9kZWwgSG9zdCBMYWJlbCBWYWx1ZTwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJzxlbT5EZW5ndWUgTW9kZWwgSG9zdCBMYWJlbCBWYWx1ZTwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQ2xhc3MgZ2V0RGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZSgpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLkRlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWUjZ2V0RTEgPGVtPkUxPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+RTE8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLkRlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWUjZ2V0RTEoKQorCSAqIEBzZWUgI2dldERlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWUoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQXR0cmlidXRlIGdldERlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfRTEoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlI2dldEUyIDxlbT5FMjwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPGVtPkUyPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlI2dldEUyKCkKKwkgKiBAc2VlICNnZXREZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUF0dHJpYnV0ZSBnZXREZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX0UyKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZSNnZXRFMyA8ZW0+RTM8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxlbT5FMzwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZSNnZXRFMygpCisJICogQHNlZSAjZ2V0RGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZSgpCisJICogQGdlbmVyYXRlZAorCSAqLworCUVBdHRyaWJ1dGUgZ2V0RGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9FMygpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLkRlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWUjZ2V0RTQgPGVtPkU0PC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+RTQ8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLkRlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWUjZ2V0RTQoKQorCSAqIEBzZWUgI2dldERlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWUoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQXR0cmlidXRlIGdldERlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfRTQoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlI2dldEkxIDxlbT5JMTwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPGVtPkkxPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlI2dldEkxKCkKKwkgKiBAc2VlICNnZXREZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUF0dHJpYnV0ZSBnZXREZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX0kxKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZSNnZXRJMiA8ZW0+STI8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxlbT5JMjwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZSNnZXRJMigpCisJICogQHNlZSAjZ2V0RGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZSgpCisJICogQGdlbmVyYXRlZAorCSAqLworCUVBdHRyaWJ1dGUgZ2V0RGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9JMigpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLkRlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWUjZ2V0STMgPGVtPkkzPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+STM8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLkRlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWUjZ2V0STMoKQorCSAqIEBzZWUgI2dldERlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWUoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQXR0cmlidXRlIGdldERlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfSTMoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlI2dldEk0IDxlbT5JNDwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPGVtPkk0PC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlI2dldEk0KCkKKwkgKiBAc2VlICNnZXREZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUF0dHJpYnV0ZSBnZXREZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX0k0KCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZSNnZXRUMSA8ZW0+VDE8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxlbT5UMTwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZSNnZXRUMSgpCisJICogQHNlZSAjZ2V0RGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZSgpCisJICogQGdlbmVyYXRlZAorCSAqLworCUVBdHRyaWJ1dGUgZ2V0RGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9UMSgpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLkRlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWUjZ2V0VDIgPGVtPlQyPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+VDI8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLkRlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWUjZ2V0VDIoKQorCSAqIEBzZWUgI2dldERlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWUoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQXR0cmlidXRlIGdldERlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfVDIoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlI2dldFQzIDxlbT5UMzwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPGVtPlQzPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlI2dldFQzKCkKKwkgKiBAc2VlICNnZXREZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUF0dHJpYnV0ZSBnZXREZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX1QzKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZSNnZXRUNCA8ZW0+VDQ8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxlbT5UNDwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZSNnZXRUNCgpCisJICogQHNlZSAjZ2V0RGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZSgpCisJICogQGdlbmVyYXRlZAorCSAqLworCUVBdHRyaWJ1dGUgZ2V0RGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9UNCgpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLkRlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWUjZ2V0UjEgPGVtPlIxPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+UjE8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLkRlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWUjZ2V0UjEoKQorCSAqIEBzZWUgI2dldERlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWUoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQXR0cmlidXRlIGdldERlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfUjEoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlI2dldFIyIDxlbT5SMjwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPGVtPlIyPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlI2dldFIyKCkKKwkgKiBAc2VlICNnZXREZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUF0dHJpYnV0ZSBnZXREZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX1IyKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZSNnZXRSMyA8ZW0+UjM8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxlbT5SMzwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZSNnZXRSMygpCisJICogQHNlZSAjZ2V0RGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZSgpCisJICogQGdlbmVyYXRlZAorCSAqLworCUVBdHRyaWJ1dGUgZ2V0RGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9SMygpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLkRlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWUjZ2V0UjQgPGVtPlI0PC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+UjQ8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLkRlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWUjZ2V0UjQoKQorCSAqIEBzZWUgI2dldERlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWUoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQXR0cmlidXRlIGdldERlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfUjQoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlI2dldEUxMiA8ZW0+RTEyPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+RTEyPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlI2dldEUxMigpCisJICogQHNlZSAjZ2V0RGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZSgpCisJICogQGdlbmVyYXRlZAorCSAqLworCUVBdHRyaWJ1dGUgZ2V0RGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9FMTIoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlI2dldEUxMyA8ZW0+RTEzPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+RTEzPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlI2dldEUxMygpCisJICogQHNlZSAjZ2V0RGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZSgpCisJICogQGdlbmVyYXRlZAorCSAqLworCUVBdHRyaWJ1dGUgZ2V0RGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9FMTMoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlI2dldEUxNCA8ZW0+RTE0PC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+RTE0PC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlI2dldEUxNCgpCisJICogQHNlZSAjZ2V0RGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZSgpCisJICogQGdlbmVyYXRlZAorCSAqLworCUVBdHRyaWJ1dGUgZ2V0RGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9FMTQoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlI2dldEUyMSA8ZW0+RTIxPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+RTIxPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlI2dldEUyMSgpCisJICogQHNlZSAjZ2V0RGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZSgpCisJICogQGdlbmVyYXRlZAorCSAqLworCUVBdHRyaWJ1dGUgZ2V0RGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9FMjEoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlI2dldEUyMyA8ZW0+RTIzPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+RTIzPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlI2dldEUyMygpCisJICogQHNlZSAjZ2V0RGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZSgpCisJICogQGdlbmVyYXRlZAorCSAqLworCUVBdHRyaWJ1dGUgZ2V0RGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9FMjMoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlI2dldEUyNCA8ZW0+RTI0PC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+RTI0PC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlI2dldEUyNCgpCisJICogQHNlZSAjZ2V0RGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZSgpCisJICogQGdlbmVyYXRlZAorCSAqLworCUVBdHRyaWJ1dGUgZ2V0RGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9FMjQoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlI2dldEUzMSA8ZW0+RTMxPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+RTMxPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlI2dldEUzMSgpCisJICogQHNlZSAjZ2V0RGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZSgpCisJICogQGdlbmVyYXRlZAorCSAqLworCUVBdHRyaWJ1dGUgZ2V0RGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9FMzEoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlI2dldEUzMiA8ZW0+RTMyPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+RTMyPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlI2dldEUzMigpCisJICogQHNlZSAjZ2V0RGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZSgpCisJICogQGdlbmVyYXRlZAorCSAqLworCUVBdHRyaWJ1dGUgZ2V0RGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9FMzIoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlI2dldEUzNCA8ZW0+RTM0PC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+RTM0PC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlI2dldEUzNCgpCisJICogQHNlZSAjZ2V0RGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZSgpCisJICogQGdlbmVyYXRlZAorCSAqLworCUVBdHRyaWJ1dGUgZ2V0RGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9FMzQoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlI2dldEU0MSA8ZW0+RTQxPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+RTQxPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlI2dldEU0MSgpCisJICogQHNlZSAjZ2V0RGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZSgpCisJICogQGdlbmVyYXRlZAorCSAqLworCUVBdHRyaWJ1dGUgZ2V0RGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9FNDEoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlI2dldEU0MiA8ZW0+RTQyPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+RTQyPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlI2dldEU0MigpCisJICogQHNlZSAjZ2V0RGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZSgpCisJICogQGdlbmVyYXRlZAorCSAqLworCUVBdHRyaWJ1dGUgZ2V0RGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9FNDIoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlI2dldEU0MyA8ZW0+RTQzPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+RTQzPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlI2dldEU0MygpCisJICogQHNlZSAjZ2V0RGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZSgpCisJICogQGdlbmVyYXRlZAorCSAqLworCUVBdHRyaWJ1dGUgZ2V0RGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9FNDMoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlI2dldEkxMiA8ZW0+STEyPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+STEyPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlI2dldEkxMigpCisJICogQHNlZSAjZ2V0RGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZSgpCisJICogQGdlbmVyYXRlZAorCSAqLworCUVBdHRyaWJ1dGUgZ2V0RGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9JMTIoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlI2dldEkxMyA8ZW0+STEzPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+STEzPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlI2dldEkxMygpCisJICogQHNlZSAjZ2V0RGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZSgpCisJICogQGdlbmVyYXRlZAorCSAqLworCUVBdHRyaWJ1dGUgZ2V0RGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9JMTMoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlI2dldEkxNCA8ZW0+STE0PC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+STE0PC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlI2dldEkxNCgpCisJICogQHNlZSAjZ2V0RGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZSgpCisJICogQGdlbmVyYXRlZAorCSAqLworCUVBdHRyaWJ1dGUgZ2V0RGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9JMTQoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlI2dldEkyMSA8ZW0+STIxPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+STIxPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlI2dldEkyMSgpCisJICogQHNlZSAjZ2V0RGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZSgpCisJICogQGdlbmVyYXRlZAorCSAqLworCUVBdHRyaWJ1dGUgZ2V0RGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9JMjEoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlI2dldEkyMyA8ZW0+STIzPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+STIzPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlI2dldEkyMygpCisJICogQHNlZSAjZ2V0RGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZSgpCisJICogQGdlbmVyYXRlZAorCSAqLworCUVBdHRyaWJ1dGUgZ2V0RGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9JMjMoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlI2dldEkyNCA8ZW0+STI0PC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+STI0PC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlI2dldEkyNCgpCisJICogQHNlZSAjZ2V0RGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZSgpCisJICogQGdlbmVyYXRlZAorCSAqLworCUVBdHRyaWJ1dGUgZ2V0RGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9JMjQoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlI2dldEkzMSA8ZW0+STMxPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+STMxPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlI2dldEkzMSgpCisJICogQHNlZSAjZ2V0RGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZSgpCisJICogQGdlbmVyYXRlZAorCSAqLworCUVBdHRyaWJ1dGUgZ2V0RGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9JMzEoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlI2dldEkzMiA8ZW0+STMyPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+STMyPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlI2dldEkzMigpCisJICogQHNlZSAjZ2V0RGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZSgpCisJICogQGdlbmVyYXRlZAorCSAqLworCUVBdHRyaWJ1dGUgZ2V0RGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9JMzIoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlI2dldEkzNCA8ZW0+STM0PC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+STM0PC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlI2dldEkzNCgpCisJICogQHNlZSAjZ2V0RGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZSgpCisJICogQGdlbmVyYXRlZAorCSAqLworCUVBdHRyaWJ1dGUgZ2V0RGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9JMzQoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlI2dldEk0MSA8ZW0+STQxPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+STQxPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlI2dldEk0MSgpCisJICogQHNlZSAjZ2V0RGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZSgpCisJICogQGdlbmVyYXRlZAorCSAqLworCUVBdHRyaWJ1dGUgZ2V0RGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9JNDEoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlI2dldEk0MiA8ZW0+STQyPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+STQyPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlI2dldEk0MigpCisJICogQHNlZSAjZ2V0RGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZSgpCisJICogQGdlbmVyYXRlZAorCSAqLworCUVBdHRyaWJ1dGUgZ2V0RGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9JNDIoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlI2dldEk0MyA8ZW0+STQzPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+STQzPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlI2dldEk0MygpCisJICogQHNlZSAjZ2V0RGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZSgpCisJICogQGdlbmVyYXRlZAorCSAqLworCUVBdHRyaWJ1dGUgZ2V0RGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9JNDMoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlI2dldFIgPGVtPlI8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxlbT5SPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlI2dldFIoKQorCSAqIEBzZWUgI2dldERlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWUoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQXR0cmlidXRlIGdldERlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfUigpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLkRlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWUjZ2V0SW5jaWRlbmNlMSA8ZW0+SW5jaWRlbmNlMTwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPGVtPkluY2lkZW5jZTE8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLkRlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWUjZ2V0SW5jaWRlbmNlMSgpCisJICogQHNlZSAjZ2V0RGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZSgpCisJICogQGdlbmVyYXRlZAorCSAqLworCUVBdHRyaWJ1dGUgZ2V0RGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9JbmNpZGVuY2UxKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZSNnZXRJbmNpZGVuY2UyIDxlbT5JbmNpZGVuY2UyPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+SW5jaWRlbmNlMjwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZSNnZXRJbmNpZGVuY2UyKCkKKwkgKiBAc2VlICNnZXREZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUF0dHJpYnV0ZSBnZXREZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX0luY2lkZW5jZTIoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlI2dldEluY2lkZW5jZTMgPGVtPkluY2lkZW5jZTM8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxlbT5JbmNpZGVuY2UzPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlI2dldEluY2lkZW5jZTMoKQorCSAqIEBzZWUgI2dldERlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWUoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQXR0cmlidXRlIGdldERlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfSW5jaWRlbmNlMygpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLkRlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWUjZ2V0SW5jaWRlbmNlNCA8ZW0+SW5jaWRlbmNlNDwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPGVtPkluY2lkZW5jZTQ8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLkRlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWUjZ2V0SW5jaWRlbmNlNCgpCisJICogQHNlZSAjZ2V0RGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZSgpCisJICogQGdlbmVyYXRlZAorCSAqLworCUVBdHRyaWJ1dGUgZ2V0RGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9JbmNpZGVuY2U0KCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZSNnZXRJbmNpZGVuY2UxMiA8ZW0+SW5jaWRlbmNlMTI8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxlbT5JbmNpZGVuY2UxMjwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZSNnZXRJbmNpZGVuY2UxMigpCisJICogQHNlZSAjZ2V0RGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZSgpCisJICogQGdlbmVyYXRlZAorCSAqLworCUVBdHRyaWJ1dGUgZ2V0RGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9JbmNpZGVuY2UxMigpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLkRlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWUjZ2V0SW5jaWRlbmNlMjEgPGVtPkluY2lkZW5jZTIxPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+SW5jaWRlbmNlMjE8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLkRlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWUjZ2V0SW5jaWRlbmNlMjEoKQorCSAqIEBzZWUgI2dldERlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWUoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQXR0cmlidXRlIGdldERlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfSW5jaWRlbmNlMjEoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlI2dldEluY2lkZW5jZTMxIDxlbT5JbmNpZGVuY2UzMTwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPGVtPkluY2lkZW5jZTMxPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlI2dldEluY2lkZW5jZTMxKCkKKwkgKiBAc2VlICNnZXREZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUF0dHJpYnV0ZSBnZXREZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX0luY2lkZW5jZTMxKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZSNnZXRJbmNpZGVuY2U0MSA8ZW0+SW5jaWRlbmNlNDE8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxlbT5JbmNpZGVuY2U0MTwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZSNnZXRJbmNpZGVuY2U0MSgpCisJICogQHNlZSAjZ2V0RGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZSgpCisJICogQGdlbmVyYXRlZAorCSAqLworCUVBdHRyaWJ1dGUgZ2V0RGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9JbmNpZGVuY2U0MSgpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLkRlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWUjZ2V0SW5jaWRlbmNlMTMgPGVtPkluY2lkZW5jZTEzPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+SW5jaWRlbmNlMTM8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLkRlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWUjZ2V0SW5jaWRlbmNlMTMoKQorCSAqIEBzZWUgI2dldERlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWUoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQXR0cmlidXRlIGdldERlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfSW5jaWRlbmNlMTMoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlI2dldEluY2lkZW5jZTIzIDxlbT5JbmNpZGVuY2UyMzwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPGVtPkluY2lkZW5jZTIzPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlI2dldEluY2lkZW5jZTIzKCkKKwkgKiBAc2VlICNnZXREZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUF0dHJpYnV0ZSBnZXREZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX0luY2lkZW5jZTIzKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZSNnZXRJbmNpZGVuY2UzMiA8ZW0+SW5jaWRlbmNlMzI8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxlbT5JbmNpZGVuY2UzMjwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZSNnZXRJbmNpZGVuY2UzMigpCisJICogQHNlZSAjZ2V0RGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZSgpCisJICogQGdlbmVyYXRlZAorCSAqLworCUVBdHRyaWJ1dGUgZ2V0RGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9JbmNpZGVuY2UzMigpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLkRlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWUjZ2V0SW5jaWRlbmNlNDIgPGVtPkluY2lkZW5jZTQyPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+SW5jaWRlbmNlNDI8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLkRlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWUjZ2V0SW5jaWRlbmNlNDIoKQorCSAqIEBzZWUgI2dldERlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWUoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQXR0cmlidXRlIGdldERlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfSW5jaWRlbmNlNDIoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlI2dldEluY2lkZW5jZTE0IDxlbT5JbmNpZGVuY2UxNDwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPGVtPkluY2lkZW5jZTE0PC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlI2dldEluY2lkZW5jZTE0KCkKKwkgKiBAc2VlICNnZXREZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUF0dHJpYnV0ZSBnZXREZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX0luY2lkZW5jZTE0KCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZSNnZXRJbmNpZGVuY2UyNCA8ZW0+SW5jaWRlbmNlMjQ8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxlbT5JbmNpZGVuY2UyNDwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZSNnZXRJbmNpZGVuY2UyNCgpCisJICogQHNlZSAjZ2V0RGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZSgpCisJICogQGdlbmVyYXRlZAorCSAqLworCUVBdHRyaWJ1dGUgZ2V0RGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9JbmNpZGVuY2UyNCgpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLkRlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWUjZ2V0SW5jaWRlbmNlMzQgPGVtPkluY2lkZW5jZTM0PC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+SW5jaWRlbmNlMzQ8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLkRlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWUjZ2V0SW5jaWRlbmNlMzQoKQorCSAqIEBzZWUgI2dldERlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWUoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQXR0cmlidXRlIGdldERlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfSW5jaWRlbmNlMzQoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlI2dldEluY2lkZW5jZTQzIDxlbT5JbmNpZGVuY2U0MzwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPGVtPkluY2lkZW5jZTQzPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlI2dldEluY2lkZW5jZTQzKCkKKwkgKiBAc2VlICNnZXREZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUF0dHJpYnV0ZSBnZXREZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX0luY2lkZW5jZTQzKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZSNnZXREaXNlYXNlRGVhdGhzMSA8ZW0+RGlzZWFzZSBEZWF0aHMxPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+RGlzZWFzZSBEZWF0aHMxPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlI2dldERpc2Vhc2VEZWF0aHMxKCkKKwkgKiBAc2VlICNnZXREZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUF0dHJpYnV0ZSBnZXREZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX0Rpc2Vhc2VEZWF0aHMxKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZSNnZXREaXNlYXNlRGVhdGhzMiA8ZW0+RGlzZWFzZSBEZWF0aHMyPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+RGlzZWFzZSBEZWF0aHMyPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlI2dldERpc2Vhc2VEZWF0aHMyKCkKKwkgKiBAc2VlICNnZXREZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUF0dHJpYnV0ZSBnZXREZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX0Rpc2Vhc2VEZWF0aHMyKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZSNnZXREaXNlYXNlRGVhdGhzMyA8ZW0+RGlzZWFzZSBEZWF0aHMzPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+RGlzZWFzZSBEZWF0aHMzPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlI2dldERpc2Vhc2VEZWF0aHMzKCkKKwkgKiBAc2VlICNnZXREZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUF0dHJpYnV0ZSBnZXREZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX0Rpc2Vhc2VEZWF0aHMzKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZSNnZXREaXNlYXNlRGVhdGhzNCA8ZW0+RGlzZWFzZSBEZWF0aHM0PC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+RGlzZWFzZSBEZWF0aHM0PC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlI2dldERpc2Vhc2VEZWF0aHM0KCkKKwkgKiBAc2VlICNnZXREZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUF0dHJpYnV0ZSBnZXREZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX0Rpc2Vhc2VEZWF0aHM0KCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZSNnZXREaXNlYXNlRGVhdGhzMTIgPGVtPkRpc2Vhc2UgRGVhdGhzMTI8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxlbT5EaXNlYXNlIERlYXRoczEyPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlI2dldERpc2Vhc2VEZWF0aHMxMigpCisJICogQHNlZSAjZ2V0RGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZSgpCisJICogQGdlbmVyYXRlZAorCSAqLworCUVBdHRyaWJ1dGUgZ2V0RGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9EaXNlYXNlRGVhdGhzMTIoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlI2dldERpc2Vhc2VEZWF0aHMyMSA8ZW0+RGlzZWFzZSBEZWF0aHMyMTwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPGVtPkRpc2Vhc2UgRGVhdGhzMjE8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLkRlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWUjZ2V0RGlzZWFzZURlYXRoczIxKCkKKwkgKiBAc2VlICNnZXREZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUF0dHJpYnV0ZSBnZXREZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX0Rpc2Vhc2VEZWF0aHMyMSgpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLkRlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWUjZ2V0RGlzZWFzZURlYXRoczMxIDxlbT5EaXNlYXNlIERlYXRoczMxPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+RGlzZWFzZSBEZWF0aHMzMTwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZSNnZXREaXNlYXNlRGVhdGhzMzEoKQorCSAqIEBzZWUgI2dldERlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWUoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQXR0cmlidXRlIGdldERlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfRGlzZWFzZURlYXRoczMxKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZSNnZXREaXNlYXNlRGVhdGhzNDEgPGVtPkRpc2Vhc2UgRGVhdGhzNDE8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxlbT5EaXNlYXNlIERlYXRoczQxPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlI2dldERpc2Vhc2VEZWF0aHM0MSgpCisJICogQHNlZSAjZ2V0RGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZSgpCisJICogQGdlbmVyYXRlZAorCSAqLworCUVBdHRyaWJ1dGUgZ2V0RGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9EaXNlYXNlRGVhdGhzNDEoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlI2dldERpc2Vhc2VEZWF0aHMxMyA8ZW0+RGlzZWFzZSBEZWF0aHMxMzwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPGVtPkRpc2Vhc2UgRGVhdGhzMTM8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLkRlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWUjZ2V0RGlzZWFzZURlYXRoczEzKCkKKwkgKiBAc2VlICNnZXREZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUF0dHJpYnV0ZSBnZXREZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX0Rpc2Vhc2VEZWF0aHMxMygpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLkRlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWUjZ2V0RGlzZWFzZURlYXRoczIzIDxlbT5EaXNlYXNlIERlYXRoczIzPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+RGlzZWFzZSBEZWF0aHMyMzwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZSNnZXREaXNlYXNlRGVhdGhzMjMoKQorCSAqIEBzZWUgI2dldERlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWUoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQXR0cmlidXRlIGdldERlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfRGlzZWFzZURlYXRoczIzKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZSNnZXREaXNlYXNlRGVhdGhzMzIgPGVtPkRpc2Vhc2UgRGVhdGhzMzI8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxlbT5EaXNlYXNlIERlYXRoczMyPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlI2dldERpc2Vhc2VEZWF0aHMzMigpCisJICogQHNlZSAjZ2V0RGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZSgpCisJICogQGdlbmVyYXRlZAorCSAqLworCUVBdHRyaWJ1dGUgZ2V0RGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9EaXNlYXNlRGVhdGhzMzIoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlI2dldERpc2Vhc2VEZWF0aHM0MiA8ZW0+RGlzZWFzZSBEZWF0aHM0MjwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPGVtPkRpc2Vhc2UgRGVhdGhzNDI8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLkRlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWUjZ2V0RGlzZWFzZURlYXRoczQyKCkKKwkgKiBAc2VlICNnZXREZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUF0dHJpYnV0ZSBnZXREZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX0Rpc2Vhc2VEZWF0aHM0MigpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLkRlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWUjZ2V0RGlzZWFzZURlYXRoczE0IDxlbT5EaXNlYXNlIERlYXRoczE0PC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+RGlzZWFzZSBEZWF0aHMxNDwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZSNnZXREaXNlYXNlRGVhdGhzMTQoKQorCSAqIEBzZWUgI2dldERlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWUoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQXR0cmlidXRlIGdldERlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfRGlzZWFzZURlYXRoczE0KCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZSNnZXREaXNlYXNlRGVhdGhzMjQgPGVtPkRpc2Vhc2UgRGVhdGhzMjQ8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxlbT5EaXNlYXNlIERlYXRoczI0PC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlI2dldERpc2Vhc2VEZWF0aHMyNCgpCisJICogQHNlZSAjZ2V0RGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZSgpCisJICogQGdlbmVyYXRlZAorCSAqLworCUVBdHRyaWJ1dGUgZ2V0RGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9EaXNlYXNlRGVhdGhzMjQoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlI2dldERpc2Vhc2VEZWF0aHMzNCA8ZW0+RGlzZWFzZSBEZWF0aHMzNDwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPGVtPkRpc2Vhc2UgRGVhdGhzMzQ8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLkRlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWUjZ2V0RGlzZWFzZURlYXRoczM0KCkKKwkgKiBAc2VlICNnZXREZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUF0dHJpYnV0ZSBnZXREZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX0Rpc2Vhc2VEZWF0aHMzNCgpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLkRlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWUjZ2V0RGlzZWFzZURlYXRoczQzIDxlbT5EaXNlYXNlIERlYXRoczQzPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+RGlzZWFzZSBEZWF0aHM0MzwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZSNnZXREaXNlYXNlRGVhdGhzNDMoKQorCSAqIEBzZWUgI2dldERlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWUoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQXR0cmlidXRlIGdldERlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfRGlzZWFzZURlYXRoczQzKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLkRlbmd1ZU1vZGVsVmVjdG9yTGFiZWwgPGVtPkRlbmd1ZSBNb2RlbCBWZWN0b3IgTGFiZWw8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICc8ZW0+RGVuZ3VlIE1vZGVsIFZlY3RvciBMYWJlbDwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWxWZWN0b3JMYWJlbAorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQ2xhc3MgZ2V0RGVuZ3VlTW9kZWxWZWN0b3JMYWJlbCgpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbFZlY3RvckxhYmVsVmFsdWUgPGVtPkRlbmd1ZSBNb2RlbCBWZWN0b3IgTGFiZWwgVmFsdWU8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICc8ZW0+RGVuZ3VlIE1vZGVsIFZlY3RvciBMYWJlbCBWYWx1ZTwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWxWZWN0b3JMYWJlbFZhbHVlCisJICogQGdlbmVyYXRlZAorCSAqLworCUVDbGFzcyBnZXREZW5ndWVNb2RlbFZlY3RvckxhYmVsVmFsdWUoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbFZlY3RvckxhYmVsVmFsdWUjZ2V0RTEgPGVtPkUxPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+RTE8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLkRlbmd1ZU1vZGVsVmVjdG9yTGFiZWxWYWx1ZSNnZXRFMSgpCisJICogQHNlZSAjZ2V0RGVuZ3VlTW9kZWxWZWN0b3JMYWJlbFZhbHVlKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUF0dHJpYnV0ZSBnZXREZW5ndWVNb2RlbFZlY3RvckxhYmVsVmFsdWVfRTEoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbFZlY3RvckxhYmVsVmFsdWUjZ2V0RTIgPGVtPkUyPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+RTI8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLkRlbmd1ZU1vZGVsVmVjdG9yTGFiZWxWYWx1ZSNnZXRFMigpCisJICogQHNlZSAjZ2V0RGVuZ3VlTW9kZWxWZWN0b3JMYWJlbFZhbHVlKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUF0dHJpYnV0ZSBnZXREZW5ndWVNb2RlbFZlY3RvckxhYmVsVmFsdWVfRTIoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbFZlY3RvckxhYmVsVmFsdWUjZ2V0RTMgPGVtPkUzPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+RTM8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLkRlbmd1ZU1vZGVsVmVjdG9yTGFiZWxWYWx1ZSNnZXRFMygpCisJICogQHNlZSAjZ2V0RGVuZ3VlTW9kZWxWZWN0b3JMYWJlbFZhbHVlKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUF0dHJpYnV0ZSBnZXREZW5ndWVNb2RlbFZlY3RvckxhYmVsVmFsdWVfRTMoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbFZlY3RvckxhYmVsVmFsdWUjZ2V0RTQgPGVtPkU0PC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+RTQ8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLkRlbmd1ZU1vZGVsVmVjdG9yTGFiZWxWYWx1ZSNnZXRFNCgpCisJICogQHNlZSAjZ2V0RGVuZ3VlTW9kZWxWZWN0b3JMYWJlbFZhbHVlKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUF0dHJpYnV0ZSBnZXREZW5ndWVNb2RlbFZlY3RvckxhYmVsVmFsdWVfRTQoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbFZlY3RvckxhYmVsVmFsdWUjZ2V0STEgPGVtPkkxPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+STE8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLkRlbmd1ZU1vZGVsVmVjdG9yTGFiZWxWYWx1ZSNnZXRJMSgpCisJICogQHNlZSAjZ2V0RGVuZ3VlTW9kZWxWZWN0b3JMYWJlbFZhbHVlKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUF0dHJpYnV0ZSBnZXREZW5ndWVNb2RlbFZlY3RvckxhYmVsVmFsdWVfSTEoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbFZlY3RvckxhYmVsVmFsdWUjZ2V0STIgPGVtPkkyPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+STI8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLkRlbmd1ZU1vZGVsVmVjdG9yTGFiZWxWYWx1ZSNnZXRJMigpCisJICogQHNlZSAjZ2V0RGVuZ3VlTW9kZWxWZWN0b3JMYWJlbFZhbHVlKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUF0dHJpYnV0ZSBnZXREZW5ndWVNb2RlbFZlY3RvckxhYmVsVmFsdWVfSTIoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbFZlY3RvckxhYmVsVmFsdWUjZ2V0STMgPGVtPkkzPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+STM8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLkRlbmd1ZU1vZGVsVmVjdG9yTGFiZWxWYWx1ZSNnZXRJMygpCisJICogQHNlZSAjZ2V0RGVuZ3VlTW9kZWxWZWN0b3JMYWJlbFZhbHVlKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUF0dHJpYnV0ZSBnZXREZW5ndWVNb2RlbFZlY3RvckxhYmVsVmFsdWVfSTMoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbFZlY3RvckxhYmVsVmFsdWUjZ2V0STQgPGVtPkk0PC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+STQ8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLkRlbmd1ZU1vZGVsVmVjdG9yTGFiZWxWYWx1ZSNnZXRJNCgpCisJICogQHNlZSAjZ2V0RGVuZ3VlTW9kZWxWZWN0b3JMYWJlbFZhbHVlKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUF0dHJpYnV0ZSBnZXREZW5ndWVNb2RlbFZlY3RvckxhYmVsVmFsdWVfSTQoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbFZlY3RvckxhYmVsVmFsdWUjZ2V0SW5jaWRlbmNlMSA8ZW0+SW5jaWRlbmNlMTwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPGVtPkluY2lkZW5jZTE8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLkRlbmd1ZU1vZGVsVmVjdG9yTGFiZWxWYWx1ZSNnZXRJbmNpZGVuY2UxKCkKKwkgKiBAc2VlICNnZXREZW5ndWVNb2RlbFZlY3RvckxhYmVsVmFsdWUoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQXR0cmlidXRlIGdldERlbmd1ZU1vZGVsVmVjdG9yTGFiZWxWYWx1ZV9JbmNpZGVuY2UxKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWxWZWN0b3JMYWJlbFZhbHVlI2dldEluY2lkZW5jZTIgPGVtPkluY2lkZW5jZTI8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxlbT5JbmNpZGVuY2UyPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbFZlY3RvckxhYmVsVmFsdWUjZ2V0SW5jaWRlbmNlMigpCisJICogQHNlZSAjZ2V0RGVuZ3VlTW9kZWxWZWN0b3JMYWJlbFZhbHVlKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUF0dHJpYnV0ZSBnZXREZW5ndWVNb2RlbFZlY3RvckxhYmVsVmFsdWVfSW5jaWRlbmNlMigpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLkRlbmd1ZU1vZGVsVmVjdG9yTGFiZWxWYWx1ZSNnZXRJbmNpZGVuY2UzIDxlbT5JbmNpZGVuY2UzPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+SW5jaWRlbmNlMzwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWxWZWN0b3JMYWJlbFZhbHVlI2dldEluY2lkZW5jZTMoKQorCSAqIEBzZWUgI2dldERlbmd1ZU1vZGVsVmVjdG9yTGFiZWxWYWx1ZSgpCisJICogQGdlbmVyYXRlZAorCSAqLworCUVBdHRyaWJ1dGUgZ2V0RGVuZ3VlTW9kZWxWZWN0b3JMYWJlbFZhbHVlX0luY2lkZW5jZTMoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbFZlY3RvckxhYmVsVmFsdWUjZ2V0SW5jaWRlbmNlNCA8ZW0+SW5jaWRlbmNlNDwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPGVtPkluY2lkZW5jZTQ8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLkRlbmd1ZU1vZGVsVmVjdG9yTGFiZWxWYWx1ZSNnZXRJbmNpZGVuY2U0KCkKKwkgKiBAc2VlICNnZXREZW5ndWVNb2RlbFZlY3RvckxhYmVsVmFsdWUoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQXR0cmlidXRlIGdldERlbmd1ZU1vZGVsVmVjdG9yTGFiZWxWYWx1ZV9JbmNpZGVuY2U0KCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBmYWN0b3J5IHRoYXQgY3JlYXRlcyB0aGUgaW5zdGFuY2VzIG9mIHRoZSBtb2RlbC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIGZhY3RvcnkgdGhhdCBjcmVhdGVzIHRoZSBpbnN0YW5jZXMgb2YgdGhlIG1vZGVsLgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlWZWN0b3JGYWN0b3J5IGdldFZlY3RvckZhY3RvcnkoKTsKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogRGVmaW5lcyBsaXRlcmFscyBmb3IgdGhlIG1ldGEgb2JqZWN0cyB0aGF0IHJlcHJlc2VudAorCSAqIDx1bD4KKwkgKiAgIDxsaT5lYWNoIGNsYXNzLDwvbGk+CisJICogICA8bGk+ZWFjaCBmZWF0dXJlIG9mIGVhY2ggY2xhc3MsPC9saT4KKwkgKiAgIDxsaT5lYWNoIGVudW0sPC9saT4KKwkgKiAgIDxsaT5hbmQgZWFjaCBkYXRhIHR5cGU8L2xpPgorCSAqIDwvdWw+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCWludGVyZmFjZSBMaXRlcmFscyB7CisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5pbXBsLk1hY2RvbmFsZFJvc3NEaXNlYXNlTW9kZWxJbXBsIDxlbT5NYWNkb25hbGQgUm9zcyBEaXNlYXNlIE1vZGVsPC9lbT59JyBjbGFzcy4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5pbXBsLk1hY2RvbmFsZFJvc3NEaXNlYXNlTW9kZWxJbXBsCisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5pbXBsLlZlY3RvclBhY2thZ2VJbXBsI2dldE1hY2RvbmFsZFJvc3NEaXNlYXNlTW9kZWwoKQorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQ2xhc3MgTUFDRE9OQUxEX1JPU1NfRElTRUFTRV9NT0RFTCA9IGVJTlNUQU5DRS5nZXRNYWNkb25hbGRSb3NzRGlzZWFzZU1vZGVsKCk7CisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+Qml0aW5nIFJhdGU8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUF0dHJpYnV0ZSBNQUNET05BTERfUk9TU19ESVNFQVNFX01PREVMX19CSVRJTkdfUkFURSA9IGVJTlNUQU5DRS5nZXRNYWNkb25hbGRSb3NzRGlzZWFzZU1vZGVsX0JpdGluZ1JhdGUoKTsKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5JbmZlY3Rpb3VzIEJpdGluZyBQcm9wb3J0aW9uIEh1bWFuPC9iPjwvZW0+JyBhdHRyaWJ1dGUgZmVhdHVyZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVBdHRyaWJ1dGUgTUFDRE9OQUxEX1JPU1NfRElTRUFTRV9NT0RFTF9fSU5GRUNUSU9VU19CSVRJTkdfUFJPUE9SVElPTl9IVU1BTiA9IGVJTlNUQU5DRS5nZXRNYWNkb25hbGRSb3NzRGlzZWFzZU1vZGVsX0luZmVjdGlvdXNCaXRpbmdQcm9wb3J0aW9uSHVtYW4oKTsKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5JbmZlY3Rpb3VzIEJpdGluZyBQcm9wb3J0aW9uIFZlY3RvcjwvYj48L2VtPicgYXR0cmlidXRlIGZlYXR1cmUuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQXR0cmlidXRlIE1BQ0RPTkFMRF9ST1NTX0RJU0VBU0VfTU9ERUxfX0lORkVDVElPVVNfQklUSU5HX1BST1BPUlRJT05fVkVDVE9SID0gZUlOU1RBTkNFLmdldE1hY2RvbmFsZFJvc3NEaXNlYXNlTW9kZWxfSW5mZWN0aW91c0JpdGluZ1Byb3BvcnRpb25WZWN0b3IoKTsKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5SZWNvdmVyeSBSYXRlPC9iPjwvZW0+JyBhdHRyaWJ1dGUgZmVhdHVyZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVBdHRyaWJ1dGUgTUFDRE9OQUxEX1JPU1NfRElTRUFTRV9NT0RFTF9fUkVDT1ZFUllfUkFURSA9IGVJTlNUQU5DRS5nZXRNYWNkb25hbGRSb3NzRGlzZWFzZU1vZGVsX1JlY292ZXJ5UmF0ZSgpOworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPkluY3ViYXRpb24gUmF0ZTwvYj48L2VtPicgYXR0cmlidXRlIGZlYXR1cmUuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQXR0cmlidXRlIE1BQ0RPTkFMRF9ST1NTX0RJU0VBU0VfTU9ERUxfX0lOQ1VCQVRJT05fUkFURSA9IGVJTlNUQU5DRS5nZXRNYWNkb25hbGRSb3NzRGlzZWFzZU1vZGVsX0luY3ViYXRpb25SYXRlKCk7CisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+VmVjdG9yIEluY3ViYXRpb24gUmF0ZTwvYj48L2VtPicgYXR0cmlidXRlIGZlYXR1cmUuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQXR0cmlidXRlIE1BQ0RPTkFMRF9ST1NTX0RJU0VBU0VfTU9ERUxfX1ZFQ1RPUl9JTkNVQkFUSU9OX1JBVEUgPSBlSU5TVEFOQ0UuZ2V0TWFjZG9uYWxkUm9zc0Rpc2Vhc2VNb2RlbF9WZWN0b3JJbmN1YmF0aW9uUmF0ZSgpOworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPkltbXVuaXR5IExvc3MgUmF0ZTwvYj48L2VtPicgYXR0cmlidXRlIGZlYXR1cmUuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQXR0cmlidXRlIE1BQ0RPTkFMRF9ST1NTX0RJU0VBU0VfTU9ERUxfX0lNTVVOSVRZX0xPU1NfUkFURSA9IGVJTlNUQU5DRS5nZXRNYWNkb25hbGRSb3NzRGlzZWFzZU1vZGVsX0ltbXVuaXR5TG9zc1JhdGUoKTsKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLmltcGwuVmVjdG9yRGlzZWFzZU1vZGVsSW1wbCA8ZW0+RGlzZWFzZSBNb2RlbDwvZW0+fScgY2xhc3MuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuaW1wbC5WZWN0b3JEaXNlYXNlTW9kZWxJbXBsCisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5pbXBsLlZlY3RvclBhY2thZ2VJbXBsI2dldFZlY3RvckRpc2Vhc2VNb2RlbCgpCisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVDbGFzcyBWRUNUT1JfRElTRUFTRV9NT0RFTCA9IGVJTlNUQU5DRS5nZXRWZWN0b3JEaXNlYXNlTW9kZWwoKTsKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5WZWN0b3IgUG9wdWxhdGlvbiBJZGVudGlmaWVyPC9iPjwvZW0+JyBhdHRyaWJ1dGUgZmVhdHVyZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVBdHRyaWJ1dGUgVkVDVE9SX0RJU0VBU0VfTU9ERUxfX1ZFQ1RPUl9QT1BVTEFUSU9OX0lERU5USUZJRVIgPSBlSU5TVEFOQ0UuZ2V0VmVjdG9yRGlzZWFzZU1vZGVsX1ZlY3RvclBvcHVsYXRpb25JZGVudGlmaWVyKCk7CisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5pbXBsLkRlbmd1ZU1vZGVsSW1wbCA8ZW0+RGVuZ3VlIE1vZGVsPC9lbT59JyBjbGFzcy4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5pbXBsLkRlbmd1ZU1vZGVsSW1wbAorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuaW1wbC5WZWN0b3JQYWNrYWdlSW1wbCNnZXREZW5ndWVNb2RlbCgpCisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVDbGFzcyBERU5HVUVfTU9ERUwgPSBlSU5TVEFOQ0UuZ2V0RGVuZ3VlTW9kZWwoKTsKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5CaXRpbmcgUmF0ZSBTVjwvYj48L2VtPicgYXR0cmlidXRlIGZlYXR1cmUuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQXR0cmlidXRlIERFTkdVRV9NT0RFTF9fQklUSU5HX1JBVEVfU1YgPSBlSU5TVEFOQ0UuZ2V0RGVuZ3VlTW9kZWxfQml0aW5nUmF0ZVNWKCk7CisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+Qml0aW5nIFJhdGUgSVY8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUF0dHJpYnV0ZSBERU5HVUVfTU9ERUxfX0JJVElOR19SQVRFX0lWID0gZUlOU1RBTkNFLmdldERlbmd1ZU1vZGVsX0JpdGluZ1JhdGVJVigpOworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPkhvc3QgSW5mZWN0aXZpdHkxPC9iPjwvZW0+JyBhdHRyaWJ1dGUgZmVhdHVyZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVBdHRyaWJ1dGUgREVOR1VFX01PREVMX19IT1NUX0lORkVDVElWSVRZMSA9IGVJTlNUQU5DRS5nZXREZW5ndWVNb2RlbF9Ib3N0SW5mZWN0aXZpdHkxKCk7CisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+SG9zdCBJbmZlY3Rpdml0eTI8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUF0dHJpYnV0ZSBERU5HVUVfTU9ERUxfX0hPU1RfSU5GRUNUSVZJVFkyID0gZUlOU1RBTkNFLmdldERlbmd1ZU1vZGVsX0hvc3RJbmZlY3Rpdml0eTIoKTsKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5Ib3N0IEluZmVjdGl2aXR5MzwvYj48L2VtPicgYXR0cmlidXRlIGZlYXR1cmUuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQXR0cmlidXRlIERFTkdVRV9NT0RFTF9fSE9TVF9JTkZFQ1RJVklUWTMgPSBlSU5TVEFOQ0UuZ2V0RGVuZ3VlTW9kZWxfSG9zdEluZmVjdGl2aXR5MygpOworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPkhvc3QgSW5mZWN0aXZpdHk0PC9iPjwvZW0+JyBhdHRyaWJ1dGUgZmVhdHVyZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVBdHRyaWJ1dGUgREVOR1VFX01PREVMX19IT1NUX0lORkVDVElWSVRZNCA9IGVJTlNUQU5DRS5nZXREZW5ndWVNb2RlbF9Ib3N0SW5mZWN0aXZpdHk0KCk7CisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+SG9zdCBQcmltYXJ5IEluY3ViYXRpb24gUmF0ZTE8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUF0dHJpYnV0ZSBERU5HVUVfTU9ERUxfX0hPU1RfUFJJTUFSWV9JTkNVQkFUSU9OX1JBVEUxID0gZUlOU1RBTkNFLmdldERlbmd1ZU1vZGVsX0hvc3RQcmltYXJ5SW5jdWJhdGlvblJhdGUxKCk7CisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+SG9zdCBQcmltYXJ5IEluY3ViYXRpb24gUmF0ZTI8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUF0dHJpYnV0ZSBERU5HVUVfTU9ERUxfX0hPU1RfUFJJTUFSWV9JTkNVQkFUSU9OX1JBVEUyID0gZUlOU1RBTkNFLmdldERlbmd1ZU1vZGVsX0hvc3RQcmltYXJ5SW5jdWJhdGlvblJhdGUyKCk7CisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+SG9zdCBQcmltYXJ5IEluY3ViYXRpb24gUmF0ZTM8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUF0dHJpYnV0ZSBERU5HVUVfTU9ERUxfX0hPU1RfUFJJTUFSWV9JTkNVQkFUSU9OX1JBVEUzID0gZUlOU1RBTkNFLmdldERlbmd1ZU1vZGVsX0hvc3RQcmltYXJ5SW5jdWJhdGlvblJhdGUzKCk7CisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+SG9zdCBQcmltYXJ5IEluY3ViYXRpb24gUmF0ZTQ8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUF0dHJpYnV0ZSBERU5HVUVfTU9ERUxfX0hPU1RfUFJJTUFSWV9JTkNVQkFUSU9OX1JBVEU0ID0gZUlOU1RBTkNFLmdldERlbmd1ZU1vZGVsX0hvc3RQcmltYXJ5SW5jdWJhdGlvblJhdGU0KCk7CisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+SG9zdCBQcmltYXJ5IFJlY292ZXJ5IFJhdGUxPC9iPjwvZW0+JyBhdHRyaWJ1dGUgZmVhdHVyZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVBdHRyaWJ1dGUgREVOR1VFX01PREVMX19IT1NUX1BSSU1BUllfUkVDT1ZFUllfUkFURTEgPSBlSU5TVEFOQ0UuZ2V0RGVuZ3VlTW9kZWxfSG9zdFByaW1hcnlSZWNvdmVyeVJhdGUxKCk7CisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+SG9zdCBQcmltYXJ5IFJlY292ZXJ5IFJhdGUyPC9iPjwvZW0+JyBhdHRyaWJ1dGUgZmVhdHVyZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVBdHRyaWJ1dGUgREVOR1VFX01PREVMX19IT1NUX1BSSU1BUllfUkVDT1ZFUllfUkFURTIgPSBlSU5TVEFOQ0UuZ2V0RGVuZ3VlTW9kZWxfSG9zdFByaW1hcnlSZWNvdmVyeVJhdGUyKCk7CisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+SG9zdCBQcmltYXJ5IFJlY292ZXJ5IFJhdGUzPC9iPjwvZW0+JyBhdHRyaWJ1dGUgZmVhdHVyZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVBdHRyaWJ1dGUgREVOR1VFX01PREVMX19IT1NUX1BSSU1BUllfUkVDT1ZFUllfUkFURTMgPSBlSU5TVEFOQ0UuZ2V0RGVuZ3VlTW9kZWxfSG9zdFByaW1hcnlSZWNvdmVyeVJhdGUzKCk7CisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+SG9zdCBQcmltYXJ5IFJlY292ZXJ5IFJhdGU0PC9iPjwvZW0+JyBhdHRyaWJ1dGUgZmVhdHVyZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVBdHRyaWJ1dGUgREVOR1VFX01PREVMX19IT1NUX1BSSU1BUllfUkVDT1ZFUllfUkFURTQgPSBlSU5TVEFOQ0UuZ2V0RGVuZ3VlTW9kZWxfSG9zdFByaW1hcnlSZWNvdmVyeVJhdGU0KCk7CisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+SG9zdCBQcmltYXJ5IEltbXVuaXR5IExvc3MgUmF0ZTE8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUF0dHJpYnV0ZSBERU5HVUVfTU9ERUxfX0hPU1RfUFJJTUFSWV9JTU1VTklUWV9MT1NTX1JBVEUxID0gZUlOU1RBTkNFLmdldERlbmd1ZU1vZGVsX0hvc3RQcmltYXJ5SW1tdW5pdHlMb3NzUmF0ZTEoKTsKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5Ib3N0IFByaW1hcnkgSW1tdW5pdHkgTG9zcyBSYXRlMjwvYj48L2VtPicgYXR0cmlidXRlIGZlYXR1cmUuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQXR0cmlidXRlIERFTkdVRV9NT0RFTF9fSE9TVF9QUklNQVJZX0lNTVVOSVRZX0xPU1NfUkFURTIgPSBlSU5TVEFOQ0UuZ2V0RGVuZ3VlTW9kZWxfSG9zdFByaW1hcnlJbW11bml0eUxvc3NSYXRlMigpOworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPkhvc3QgUHJpbWFyeSBJbW11bml0eSBMb3NzIFJhdGUzPC9iPjwvZW0+JyBhdHRyaWJ1dGUgZmVhdHVyZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVBdHRyaWJ1dGUgREVOR1VFX01PREVMX19IT1NUX1BSSU1BUllfSU1NVU5JVFlfTE9TU19SQVRFMyA9IGVJTlNUQU5DRS5nZXREZW5ndWVNb2RlbF9Ib3N0UHJpbWFyeUltbXVuaXR5TG9zc1JhdGUzKCk7CisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+SG9zdCBQcmltYXJ5IEltbXVuaXR5IExvc3MgUmF0ZTQ8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUF0dHJpYnV0ZSBERU5HVUVfTU9ERUxfX0hPU1RfUFJJTUFSWV9JTU1VTklUWV9MT1NTX1JBVEU0ID0gZUlOU1RBTkNFLmdldERlbmd1ZU1vZGVsX0hvc3RQcmltYXJ5SW1tdW5pdHlMb3NzUmF0ZTQoKTsKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5Ib3N0IFByaW1hcnkgRGlzZWFzZSBEZWF0aCBSYXRlMTwvYj48L2VtPicgYXR0cmlidXRlIGZlYXR1cmUuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQXR0cmlidXRlIERFTkdVRV9NT0RFTF9fSE9TVF9QUklNQVJZX0RJU0VBU0VfREVBVEhfUkFURTEgPSBlSU5TVEFOQ0UuZ2V0RGVuZ3VlTW9kZWxfSG9zdFByaW1hcnlEaXNlYXNlRGVhdGhSYXRlMSgpOworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPkhvc3QgUHJpbWFyeSBEaXNlYXNlIERlYXRoIFJhdGUyPC9iPjwvZW0+JyBhdHRyaWJ1dGUgZmVhdHVyZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVBdHRyaWJ1dGUgREVOR1VFX01PREVMX19IT1NUX1BSSU1BUllfRElTRUFTRV9ERUFUSF9SQVRFMiA9IGVJTlNUQU5DRS5nZXREZW5ndWVNb2RlbF9Ib3N0UHJpbWFyeURpc2Vhc2VEZWF0aFJhdGUyKCk7CisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+SG9zdCBQcmltYXJ5IERpc2Vhc2UgRGVhdGggUmF0ZTM8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUF0dHJpYnV0ZSBERU5HVUVfTU9ERUxfX0hPU1RfUFJJTUFSWV9ESVNFQVNFX0RFQVRIX1JBVEUzID0gZUlOU1RBTkNFLmdldERlbmd1ZU1vZGVsX0hvc3RQcmltYXJ5RGlzZWFzZURlYXRoUmF0ZTMoKTsKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5Ib3N0IFByaW1hcnkgRGlzZWFzZSBEZWF0aCBSYXRlNDwvYj48L2VtPicgYXR0cmlidXRlIGZlYXR1cmUuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQXR0cmlidXRlIERFTkdVRV9NT0RFTF9fSE9TVF9QUklNQVJZX0RJU0VBU0VfREVBVEhfUkFURTQgPSBlSU5TVEFOQ0UuZ2V0RGVuZ3VlTW9kZWxfSG9zdFByaW1hcnlEaXNlYXNlRGVhdGhSYXRlNCgpOworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPkhvc3QgQURFMTI8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUF0dHJpYnV0ZSBERU5HVUVfTU9ERUxfX0hPU1RfQURFMTIgPSBlSU5TVEFOQ0UuZ2V0RGVuZ3VlTW9kZWxfSG9zdEFERTEyKCk7CisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+SG9zdCBBREUxMzwvYj48L2VtPicgYXR0cmlidXRlIGZlYXR1cmUuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQXR0cmlidXRlIERFTkdVRV9NT0RFTF9fSE9TVF9BREUxMyA9IGVJTlNUQU5DRS5nZXREZW5ndWVNb2RlbF9Ib3N0QURFMTMoKTsKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5Ib3N0IEFERTE0PC9iPjwvZW0+JyBhdHRyaWJ1dGUgZmVhdHVyZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVBdHRyaWJ1dGUgREVOR1VFX01PREVMX19IT1NUX0FERTE0ID0gZUlOU1RBTkNFLmdldERlbmd1ZU1vZGVsX0hvc3RBREUxNCgpOworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPkhvc3QgQURFMjE8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUF0dHJpYnV0ZSBERU5HVUVfTU9ERUxfX0hPU1RfQURFMjEgPSBlSU5TVEFOQ0UuZ2V0RGVuZ3VlTW9kZWxfSG9zdEFERTIxKCk7CisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+SG9zdCBBREUyMzwvYj48L2VtPicgYXR0cmlidXRlIGZlYXR1cmUuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQXR0cmlidXRlIERFTkdVRV9NT0RFTF9fSE9TVF9BREUyMyA9IGVJTlNUQU5DRS5nZXREZW5ndWVNb2RlbF9Ib3N0QURFMjMoKTsKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5Ib3N0IEFERTI0PC9iPjwvZW0+JyBhdHRyaWJ1dGUgZmVhdHVyZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVBdHRyaWJ1dGUgREVOR1VFX01PREVMX19IT1NUX0FERTI0ID0gZUlOU1RBTkNFLmdldERlbmd1ZU1vZGVsX0hvc3RBREUyNCgpOworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPkhvc3QgQURFMzE8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUF0dHJpYnV0ZSBERU5HVUVfTU9ERUxfX0hPU1RfQURFMzEgPSBlSU5TVEFOQ0UuZ2V0RGVuZ3VlTW9kZWxfSG9zdEFERTMxKCk7CisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+SG9zdCBBREUzMjwvYj48L2VtPicgYXR0cmlidXRlIGZlYXR1cmUuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQXR0cmlidXRlIERFTkdVRV9NT0RFTF9fSE9TVF9BREUzMiA9IGVJTlNUQU5DRS5nZXREZW5ndWVNb2RlbF9Ib3N0QURFMzIoKTsKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5Ib3N0IEFERTM0PC9iPjwvZW0+JyBhdHRyaWJ1dGUgZmVhdHVyZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVBdHRyaWJ1dGUgREVOR1VFX01PREVMX19IT1NUX0FERTM0ID0gZUlOU1RBTkNFLmdldERlbmd1ZU1vZGVsX0hvc3RBREUzNCgpOworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPkhvc3QgQURFNDE8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUF0dHJpYnV0ZSBERU5HVUVfTU9ERUxfX0hPU1RfQURFNDEgPSBlSU5TVEFOQ0UuZ2V0RGVuZ3VlTW9kZWxfSG9zdEFERTQxKCk7CisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+SG9zdCBBREU0MjwvYj48L2VtPicgYXR0cmlidXRlIGZlYXR1cmUuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQXR0cmlidXRlIERFTkdVRV9NT0RFTF9fSE9TVF9BREU0MiA9IGVJTlNUQU5DRS5nZXREZW5ndWVNb2RlbF9Ib3N0QURFNDIoKTsKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5Ib3N0IEFERTQzPC9iPjwvZW0+JyBhdHRyaWJ1dGUgZmVhdHVyZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVBdHRyaWJ1dGUgREVOR1VFX01PREVMX19IT1NUX0FERTQzID0gZUlOU1RBTkNFLmdldERlbmd1ZU1vZGVsX0hvc3RBREU0MygpOworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPkhvc3QgU2Vjb25kYXJ5IERpc2Vhc2UgRGVhdGggUmF0ZTEyPC9iPjwvZW0+JyBhdHRyaWJ1dGUgZmVhdHVyZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVBdHRyaWJ1dGUgREVOR1VFX01PREVMX19IT1NUX1NFQ09OREFSWV9ESVNFQVNFX0RFQVRIX1JBVEUxMiA9IGVJTlNUQU5DRS5nZXREZW5ndWVNb2RlbF9Ib3N0U2Vjb25kYXJ5RGlzZWFzZURlYXRoUmF0ZTEyKCk7CisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+SG9zdCBTZWNvbmRhcnkgRGlzZWFzZSBEZWF0aCBSYXRlMTM8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUF0dHJpYnV0ZSBERU5HVUVfTU9ERUxfX0hPU1RfU0VDT05EQVJZX0RJU0VBU0VfREVBVEhfUkFURTEzID0gZUlOU1RBTkNFLmdldERlbmd1ZU1vZGVsX0hvc3RTZWNvbmRhcnlEaXNlYXNlRGVhdGhSYXRlMTMoKTsKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5Ib3N0IFNlY29uZGFyeSBEaXNlYXNlIERlYXRoIFJhdGUxNDwvYj48L2VtPicgYXR0cmlidXRlIGZlYXR1cmUuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQXR0cmlidXRlIERFTkdVRV9NT0RFTF9fSE9TVF9TRUNPTkRBUllfRElTRUFTRV9ERUFUSF9SQVRFMTQgPSBlSU5TVEFOQ0UuZ2V0RGVuZ3VlTW9kZWxfSG9zdFNlY29uZGFyeURpc2Vhc2VEZWF0aFJhdGUxNCgpOworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPkhvc3QgU2Vjb25kYXJ5IERpc2Vhc2UgRGVhdGggUmF0ZTIxPC9iPjwvZW0+JyBhdHRyaWJ1dGUgZmVhdHVyZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVBdHRyaWJ1dGUgREVOR1VFX01PREVMX19IT1NUX1NFQ09OREFSWV9ESVNFQVNFX0RFQVRIX1JBVEUyMSA9IGVJTlNUQU5DRS5nZXREZW5ndWVNb2RlbF9Ib3N0U2Vjb25kYXJ5RGlzZWFzZURlYXRoUmF0ZTIxKCk7CisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+SG9zdCBTZWNvbmRhcnkgRGlzZWFzZSBEZWF0aCBSYXRlMjM8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUF0dHJpYnV0ZSBERU5HVUVfTU9ERUxfX0hPU1RfU0VDT05EQVJZX0RJU0VBU0VfREVBVEhfUkFURTIzID0gZUlOU1RBTkNFLmdldERlbmd1ZU1vZGVsX0hvc3RTZWNvbmRhcnlEaXNlYXNlRGVhdGhSYXRlMjMoKTsKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5Ib3N0IFNlY29uZGFyeSBEaXNlYXNlIERlYXRoIFJhdGUyNDwvYj48L2VtPicgYXR0cmlidXRlIGZlYXR1cmUuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQXR0cmlidXRlIERFTkdVRV9NT0RFTF9fSE9TVF9TRUNPTkRBUllfRElTRUFTRV9ERUFUSF9SQVRFMjQgPSBlSU5TVEFOQ0UuZ2V0RGVuZ3VlTW9kZWxfSG9zdFNlY29uZGFyeURpc2Vhc2VEZWF0aFJhdGUyNCgpOworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPkhvc3QgU2Vjb25kYXJ5IERpc2Vhc2UgRGVhdGggUmF0ZTMxPC9iPjwvZW0+JyBhdHRyaWJ1dGUgZmVhdHVyZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVBdHRyaWJ1dGUgREVOR1VFX01PREVMX19IT1NUX1NFQ09OREFSWV9ESVNFQVNFX0RFQVRIX1JBVEUzMSA9IGVJTlNUQU5DRS5nZXREZW5ndWVNb2RlbF9Ib3N0U2Vjb25kYXJ5RGlzZWFzZURlYXRoUmF0ZTMxKCk7CisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+SG9zdCBTZWNvbmRhcnkgRGlzZWFzZSBEZWF0aCBSYXRlMzI8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUF0dHJpYnV0ZSBERU5HVUVfTU9ERUxfX0hPU1RfU0VDT05EQVJZX0RJU0VBU0VfREVBVEhfUkFURTMyID0gZUlOU1RBTkNFLmdldERlbmd1ZU1vZGVsX0hvc3RTZWNvbmRhcnlEaXNlYXNlRGVhdGhSYXRlMzIoKTsKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5Ib3N0IFNlY29uZGFyeSBEaXNlYXNlIERlYXRoIFJhdGUzNDwvYj48L2VtPicgYXR0cmlidXRlIGZlYXR1cmUuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQXR0cmlidXRlIERFTkdVRV9NT0RFTF9fSE9TVF9TRUNPTkRBUllfRElTRUFTRV9ERUFUSF9SQVRFMzQgPSBlSU5TVEFOQ0UuZ2V0RGVuZ3VlTW9kZWxfSG9zdFNlY29uZGFyeURpc2Vhc2VEZWF0aFJhdGUzNCgpOworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPkhvc3QgU2Vjb25kYXJ5IERpc2Vhc2UgRGVhdGggUmF0ZTQxPC9iPjwvZW0+JyBhdHRyaWJ1dGUgZmVhdHVyZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVBdHRyaWJ1dGUgREVOR1VFX01PREVMX19IT1NUX1NFQ09OREFSWV9ESVNFQVNFX0RFQVRIX1JBVEU0MSA9IGVJTlNUQU5DRS5nZXREZW5ndWVNb2RlbF9Ib3N0U2Vjb25kYXJ5RGlzZWFzZURlYXRoUmF0ZTQxKCk7CisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+SG9zdCBTZWNvbmRhcnkgRGlzZWFzZSBEZWF0aCBSYXRlNDI8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUF0dHJpYnV0ZSBERU5HVUVfTU9ERUxfX0hPU1RfU0VDT05EQVJZX0RJU0VBU0VfREVBVEhfUkFURTQyID0gZUlOU1RBTkNFLmdldERlbmd1ZU1vZGVsX0hvc3RTZWNvbmRhcnlEaXNlYXNlRGVhdGhSYXRlNDIoKTsKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5Ib3N0IFNlY29uZGFyeSBEaXNlYXNlIERlYXRoIFJhdGU0MzwvYj48L2VtPicgYXR0cmlidXRlIGZlYXR1cmUuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQXR0cmlidXRlIERFTkdVRV9NT0RFTF9fSE9TVF9TRUNPTkRBUllfRElTRUFTRV9ERUFUSF9SQVRFNDMgPSBlSU5TVEFOQ0UuZ2V0RGVuZ3VlTW9kZWxfSG9zdFNlY29uZGFyeURpc2Vhc2VEZWF0aFJhdGU0MygpOworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPkhvc3QgU2Vjb25kYXJ5IFJlY292ZXJ5IFJhdGUxMjwvYj48L2VtPicgYXR0cmlidXRlIGZlYXR1cmUuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQXR0cmlidXRlIERFTkdVRV9NT0RFTF9fSE9TVF9TRUNPTkRBUllfUkVDT1ZFUllfUkFURTEyID0gZUlOU1RBTkNFLmdldERlbmd1ZU1vZGVsX0hvc3RTZWNvbmRhcnlSZWNvdmVyeVJhdGUxMigpOworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPkhvc3QgU2Vjb25kYXJ5IFJlY292ZXJ5IFJhdGUxMzwvYj48L2VtPicgYXR0cmlidXRlIGZlYXR1cmUuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQXR0cmlidXRlIERFTkdVRV9NT0RFTF9fSE9TVF9TRUNPTkRBUllfUkVDT1ZFUllfUkFURTEzID0gZUlOU1RBTkNFLmdldERlbmd1ZU1vZGVsX0hvc3RTZWNvbmRhcnlSZWNvdmVyeVJhdGUxMygpOworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPkhvc3QgU2Vjb25kYXJ5IFJlY292ZXJ5IFJhdGUxNDwvYj48L2VtPicgYXR0cmlidXRlIGZlYXR1cmUuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQXR0cmlidXRlIERFTkdVRV9NT0RFTF9fSE9TVF9TRUNPTkRBUllfUkVDT1ZFUllfUkFURTE0ID0gZUlOU1RBTkNFLmdldERlbmd1ZU1vZGVsX0hvc3RTZWNvbmRhcnlSZWNvdmVyeVJhdGUxNCgpOworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPkhvc3QgU2Vjb25kYXJ5IFJlY292ZXJ5IFJhdGUyMTwvYj48L2VtPicgYXR0cmlidXRlIGZlYXR1cmUuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQXR0cmlidXRlIERFTkdVRV9NT0RFTF9fSE9TVF9TRUNPTkRBUllfUkVDT1ZFUllfUkFURTIxID0gZUlOU1RBTkNFLmdldERlbmd1ZU1vZGVsX0hvc3RTZWNvbmRhcnlSZWNvdmVyeVJhdGUyMSgpOworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPkhvc3QgU2Vjb25kYXJ5IFJlY292ZXJ5IFJhdGUyMzwvYj48L2VtPicgYXR0cmlidXRlIGZlYXR1cmUuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQXR0cmlidXRlIERFTkdVRV9NT0RFTF9fSE9TVF9TRUNPTkRBUllfUkVDT1ZFUllfUkFURTIzID0gZUlOU1RBTkNFLmdldERlbmd1ZU1vZGVsX0hvc3RTZWNvbmRhcnlSZWNvdmVyeVJhdGUyMygpOworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPkhvc3QgU2Vjb25kYXJ5IFJlY292ZXJ5IFJhdGUyNDwvYj48L2VtPicgYXR0cmlidXRlIGZlYXR1cmUuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQXR0cmlidXRlIERFTkdVRV9NT0RFTF9fSE9TVF9TRUNPTkRBUllfUkVDT1ZFUllfUkFURTI0ID0gZUlOU1RBTkNFLmdldERlbmd1ZU1vZGVsX0hvc3RTZWNvbmRhcnlSZWNvdmVyeVJhdGUyNCgpOworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPkhvc3QgU2Vjb25kYXJ5IFJlY292ZXJ5IFJhdGUzMTwvYj48L2VtPicgYXR0cmlidXRlIGZlYXR1cmUuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQXR0cmlidXRlIERFTkdVRV9NT0RFTF9fSE9TVF9TRUNPTkRBUllfUkVDT1ZFUllfUkFURTMxID0gZUlOU1RBTkNFLmdldERlbmd1ZU1vZGVsX0hvc3RTZWNvbmRhcnlSZWNvdmVyeVJhdGUzMSgpOworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPkhvc3QgU2Vjb25kYXJ5IFJlY292ZXJ5IFJhdGUzMjwvYj48L2VtPicgYXR0cmlidXRlIGZlYXR1cmUuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQXR0cmlidXRlIERFTkdVRV9NT0RFTF9fSE9TVF9TRUNPTkRBUllfUkVDT1ZFUllfUkFURTMyID0gZUlOU1RBTkNFLmdldERlbmd1ZU1vZGVsX0hvc3RTZWNvbmRhcnlSZWNvdmVyeVJhdGUzMigpOworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPkhvc3QgU2Vjb25kYXJ5IFJlY292ZXJ5IFJhdGUzNDwvYj48L2VtPicgYXR0cmlidXRlIGZlYXR1cmUuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQXR0cmlidXRlIERFTkdVRV9NT0RFTF9fSE9TVF9TRUNPTkRBUllfUkVDT1ZFUllfUkFURTM0ID0gZUlOU1RBTkNFLmdldERlbmd1ZU1vZGVsX0hvc3RTZWNvbmRhcnlSZWNvdmVyeVJhdGUzNCgpOworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPkhvc3QgU2Vjb25kYXJ5IFJlY292ZXJ5IFJhdGU0MTwvYj48L2VtPicgYXR0cmlidXRlIGZlYXR1cmUuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQXR0cmlidXRlIERFTkdVRV9NT0RFTF9fSE9TVF9TRUNPTkRBUllfUkVDT1ZFUllfUkFURTQxID0gZUlOU1RBTkNFLmdldERlbmd1ZU1vZGVsX0hvc3RTZWNvbmRhcnlSZWNvdmVyeVJhdGU0MSgpOworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPkhvc3QgU2Vjb25kYXJ5IFJlY292ZXJ5IFJhdGU0MjwvYj48L2VtPicgYXR0cmlidXRlIGZlYXR1cmUuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQXR0cmlidXRlIERFTkdVRV9NT0RFTF9fSE9TVF9TRUNPTkRBUllfUkVDT1ZFUllfUkFURTQyID0gZUlOU1RBTkNFLmdldERlbmd1ZU1vZGVsX0hvc3RTZWNvbmRhcnlSZWNvdmVyeVJhdGU0MigpOworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPkhvc3QgU2Vjb25kYXJ5IFJlY292ZXJ5IFJhdGU0MzwvYj48L2VtPicgYXR0cmlidXRlIGZlYXR1cmUuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQXR0cmlidXRlIERFTkdVRV9NT0RFTF9fSE9TVF9TRUNPTkRBUllfUkVDT1ZFUllfUkFURTQzID0gZUlOU1RBTkNFLmdldERlbmd1ZU1vZGVsX0hvc3RTZWNvbmRhcnlSZWNvdmVyeVJhdGU0MygpOworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPkhvc3QgU2Vjb25kYXJ5IEluY3ViYXRpb24gUmF0ZTEyPC9iPjwvZW0+JyBhdHRyaWJ1dGUgZmVhdHVyZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVBdHRyaWJ1dGUgREVOR1VFX01PREVMX19IT1NUX1NFQ09OREFSWV9JTkNVQkFUSU9OX1JBVEUxMiA9IGVJTlNUQU5DRS5nZXREZW5ndWVNb2RlbF9Ib3N0U2Vjb25kYXJ5SW5jdWJhdGlvblJhdGUxMigpOworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPkhvc3QgU2Vjb25kYXJ5IEluY3ViYXRpb24gUmF0ZTEzPC9iPjwvZW0+JyBhdHRyaWJ1dGUgZmVhdHVyZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVBdHRyaWJ1dGUgREVOR1VFX01PREVMX19IT1NUX1NFQ09OREFSWV9JTkNVQkFUSU9OX1JBVEUxMyA9IGVJTlNUQU5DRS5nZXREZW5ndWVNb2RlbF9Ib3N0U2Vjb25kYXJ5SW5jdWJhdGlvblJhdGUxMygpOworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPkhvc3QgU2Vjb25kYXJ5IEluY3ViYXRpb24gUmF0ZTE0PC9iPjwvZW0+JyBhdHRyaWJ1dGUgZmVhdHVyZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVBdHRyaWJ1dGUgREVOR1VFX01PREVMX19IT1NUX1NFQ09OREFSWV9JTkNVQkFUSU9OX1JBVEUxNCA9IGVJTlNUQU5DRS5nZXREZW5ndWVNb2RlbF9Ib3N0U2Vjb25kYXJ5SW5jdWJhdGlvblJhdGUxNCgpOworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPkhvc3QgU2Vjb25kYXJ5IEluY3ViYXRpb24gUmF0ZTIxPC9iPjwvZW0+JyBhdHRyaWJ1dGUgZmVhdHVyZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVBdHRyaWJ1dGUgREVOR1VFX01PREVMX19IT1NUX1NFQ09OREFSWV9JTkNVQkFUSU9OX1JBVEUyMSA9IGVJTlNUQU5DRS5nZXREZW5ndWVNb2RlbF9Ib3N0U2Vjb25kYXJ5SW5jdWJhdGlvblJhdGUyMSgpOworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPkhvc3QgU2Vjb25kYXJ5IEluY3ViYXRpb24gUmF0ZTIzPC9iPjwvZW0+JyBhdHRyaWJ1dGUgZmVhdHVyZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVBdHRyaWJ1dGUgREVOR1VFX01PREVMX19IT1NUX1NFQ09OREFSWV9JTkNVQkFUSU9OX1JBVEUyMyA9IGVJTlNUQU5DRS5nZXREZW5ndWVNb2RlbF9Ib3N0U2Vjb25kYXJ5SW5jdWJhdGlvblJhdGUyMygpOworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPkhvc3QgU2Vjb25kYXJ5IEluY3ViYXRpb24gUmF0ZTI0PC9iPjwvZW0+JyBhdHRyaWJ1dGUgZmVhdHVyZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVBdHRyaWJ1dGUgREVOR1VFX01PREVMX19IT1NUX1NFQ09OREFSWV9JTkNVQkFUSU9OX1JBVEUyNCA9IGVJTlNUQU5DRS5nZXREZW5ndWVNb2RlbF9Ib3N0U2Vjb25kYXJ5SW5jdWJhdGlvblJhdGUyNCgpOworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPkhvc3QgU2Vjb25kYXJ5IEluY3ViYXRpb24gUmF0ZTMxPC9iPjwvZW0+JyBhdHRyaWJ1dGUgZmVhdHVyZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVBdHRyaWJ1dGUgREVOR1VFX01PREVMX19IT1NUX1NFQ09OREFSWV9JTkNVQkFUSU9OX1JBVEUzMSA9IGVJTlNUQU5DRS5nZXREZW5ndWVNb2RlbF9Ib3N0U2Vjb25kYXJ5SW5jdWJhdGlvblJhdGUzMSgpOworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPkhvc3QgU2Vjb25kYXJ5IEluY3ViYXRpb24gUmF0ZTMyPC9iPjwvZW0+JyBhdHRyaWJ1dGUgZmVhdHVyZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVBdHRyaWJ1dGUgREVOR1VFX01PREVMX19IT1NUX1NFQ09OREFSWV9JTkNVQkFUSU9OX1JBVEUzMiA9IGVJTlNUQU5DRS5nZXREZW5ndWVNb2RlbF9Ib3N0U2Vjb25kYXJ5SW5jdWJhdGlvblJhdGUzMigpOworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPkhvc3QgU2Vjb25kYXJ5IEluY3ViYXRpb24gUmF0ZTM0PC9iPjwvZW0+JyBhdHRyaWJ1dGUgZmVhdHVyZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVBdHRyaWJ1dGUgREVOR1VFX01PREVMX19IT1NUX1NFQ09OREFSWV9JTkNVQkFUSU9OX1JBVEUzNCA9IGVJTlNUQU5DRS5nZXREZW5ndWVNb2RlbF9Ib3N0U2Vjb25kYXJ5SW5jdWJhdGlvblJhdGUzNCgpOworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPkhvc3QgU2Vjb25kYXJ5IEluY3ViYXRpb24gUmF0ZTQxPC9iPjwvZW0+JyBhdHRyaWJ1dGUgZmVhdHVyZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVBdHRyaWJ1dGUgREVOR1VFX01PREVMX19IT1NUX1NFQ09OREFSWV9JTkNVQkFUSU9OX1JBVEU0MSA9IGVJTlNUQU5DRS5nZXREZW5ndWVNb2RlbF9Ib3N0U2Vjb25kYXJ5SW5jdWJhdGlvblJhdGU0MSgpOworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPkhvc3QgU2Vjb25kYXJ5IEluY3ViYXRpb24gUmF0ZTQyPC9iPjwvZW0+JyBhdHRyaWJ1dGUgZmVhdHVyZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVBdHRyaWJ1dGUgREVOR1VFX01PREVMX19IT1NUX1NFQ09OREFSWV9JTkNVQkFUSU9OX1JBVEU0MiA9IGVJTlNUQU5DRS5nZXREZW5ndWVNb2RlbF9Ib3N0U2Vjb25kYXJ5SW5jdWJhdGlvblJhdGU0MigpOworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPkhvc3QgU2Vjb25kYXJ5IEluY3ViYXRpb24gUmF0ZTQzPC9iPjwvZW0+JyBhdHRyaWJ1dGUgZmVhdHVyZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVBdHRyaWJ1dGUgREVOR1VFX01PREVMX19IT1NUX1NFQ09OREFSWV9JTkNVQkFUSU9OX1JBVEU0MyA9IGVJTlNUQU5DRS5nZXREZW5ndWVNb2RlbF9Ib3N0U2Vjb25kYXJ5SW5jdWJhdGlvblJhdGU0MygpOworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPlZlY3RvciBJbmZlY3Rpdml0eTE8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUF0dHJpYnV0ZSBERU5HVUVfTU9ERUxfX1ZFQ1RPUl9JTkZFQ1RJVklUWTEgPSBlSU5TVEFOQ0UuZ2V0RGVuZ3VlTW9kZWxfVmVjdG9ySW5mZWN0aXZpdHkxKCk7CisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+VmVjdG9yIEluZmVjdGl2aXR5MjwvYj48L2VtPicgYXR0cmlidXRlIGZlYXR1cmUuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQXR0cmlidXRlIERFTkdVRV9NT0RFTF9fVkVDVE9SX0lORkVDVElWSVRZMiA9IGVJTlNUQU5DRS5nZXREZW5ndWVNb2RlbF9WZWN0b3JJbmZlY3Rpdml0eTIoKTsKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5WZWN0b3IgSW5mZWN0aXZpdHkzPC9iPjwvZW0+JyBhdHRyaWJ1dGUgZmVhdHVyZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVBdHRyaWJ1dGUgREVOR1VFX01PREVMX19WRUNUT1JfSU5GRUNUSVZJVFkzID0gZUlOU1RBTkNFLmdldERlbmd1ZU1vZGVsX1ZlY3RvckluZmVjdGl2aXR5MygpOworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPlZlY3RvciBJbmZlY3Rpdml0eTQ8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUF0dHJpYnV0ZSBERU5HVUVfTU9ERUxfX1ZFQ1RPUl9JTkZFQ1RJVklUWTQgPSBlSU5TVEFOQ0UuZ2V0RGVuZ3VlTW9kZWxfVmVjdG9ySW5mZWN0aXZpdHk0KCk7CisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+VmVjdG9yIEFERTE8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUF0dHJpYnV0ZSBERU5HVUVfTU9ERUxfX1ZFQ1RPUl9BREUxID0gZUlOU1RBTkNFLmdldERlbmd1ZU1vZGVsX1ZlY3RvckFERTEoKTsKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5WZWN0b3IgQURFMjwvYj48L2VtPicgYXR0cmlidXRlIGZlYXR1cmUuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQXR0cmlidXRlIERFTkdVRV9NT0RFTF9fVkVDVE9SX0FERTIgPSBlSU5TVEFOQ0UuZ2V0RGVuZ3VlTW9kZWxfVmVjdG9yQURFMigpOworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPlZlY3RvciBBREUzPC9iPjwvZW0+JyBhdHRyaWJ1dGUgZmVhdHVyZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVBdHRyaWJ1dGUgREVOR1VFX01PREVMX19WRUNUT1JfQURFMyA9IGVJTlNUQU5DRS5nZXREZW5ndWVNb2RlbF9WZWN0b3JBREUzKCk7CisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+VmVjdG9yIEFERTQ8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUF0dHJpYnV0ZSBERU5HVUVfTU9ERUxfX1ZFQ1RPUl9BREU0ID0gZUlOU1RBTkNFLmdldERlbmd1ZU1vZGVsX1ZlY3RvckFERTQoKTsKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5WZWN0b3IgSW5jdWJhdGlvbiBSYXRlMTwvYj48L2VtPicgYXR0cmlidXRlIGZlYXR1cmUuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQXR0cmlidXRlIERFTkdVRV9NT0RFTF9fVkVDVE9SX0lOQ1VCQVRJT05fUkFURTEgPSBlSU5TVEFOQ0UuZ2V0RGVuZ3VlTW9kZWxfVmVjdG9ySW5jdWJhdGlvblJhdGUxKCk7CisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+VmVjdG9yIEluY3ViYXRpb24gUmF0ZTI8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUF0dHJpYnV0ZSBERU5HVUVfTU9ERUxfX1ZFQ1RPUl9JTkNVQkFUSU9OX1JBVEUyID0gZUlOU1RBTkNFLmdldERlbmd1ZU1vZGVsX1ZlY3RvckluY3ViYXRpb25SYXRlMigpOworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPlZlY3RvciBJbmN1YmF0aW9uIFJhdGUzPC9iPjwvZW0+JyBhdHRyaWJ1dGUgZmVhdHVyZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVBdHRyaWJ1dGUgREVOR1VFX01PREVMX19WRUNUT1JfSU5DVUJBVElPTl9SQVRFMyA9IGVJTlNUQU5DRS5nZXREZW5ndWVNb2RlbF9WZWN0b3JJbmN1YmF0aW9uUmF0ZTMoKTsKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5WZWN0b3IgSW5jdWJhdGlvbiBSYXRlNDwvYj48L2VtPicgYXR0cmlidXRlIGZlYXR1cmUuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQXR0cmlidXRlIERFTkdVRV9NT0RFTF9fVkVDVE9SX0lOQ1VCQVRJT05fUkFURTQgPSBlSU5TVEFOQ0UuZ2V0RGVuZ3VlTW9kZWxfVmVjdG9ySW5jdWJhdGlvblJhdGU0KCk7CisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5pbXBsLlNpbXBsZURlbmd1ZU1vZGVsSW1wbCA8ZW0+U2ltcGxlIERlbmd1ZSBNb2RlbDwvZW0+fScgY2xhc3MuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuaW1wbC5TaW1wbGVEZW5ndWVNb2RlbEltcGwKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLmltcGwuVmVjdG9yUGFja2FnZUltcGwjZ2V0U2ltcGxlRGVuZ3VlTW9kZWwoKQorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQ2xhc3MgU0lNUExFX0RFTkdVRV9NT0RFTCA9IGVJTlNUQU5DRS5nZXRTaW1wbGVEZW5ndWVNb2RlbCgpOworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPkJpdGluZyBSYXRlPC9iPjwvZW0+JyBhdHRyaWJ1dGUgZmVhdHVyZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVBdHRyaWJ1dGUgU0lNUExFX0RFTkdVRV9NT0RFTF9fQklUSU5HX1JBVEUgPSBlSU5TVEFOQ0UuZ2V0U2ltcGxlRGVuZ3VlTW9kZWxfQml0aW5nUmF0ZSgpOworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPkhvc3QgSW5mZWN0aXZpdHkxPC9iPjwvZW0+JyBhdHRyaWJ1dGUgZmVhdHVyZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVBdHRyaWJ1dGUgU0lNUExFX0RFTkdVRV9NT0RFTF9fSE9TVF9JTkZFQ1RJVklUWTEgPSBlSU5TVEFOQ0UuZ2V0U2ltcGxlRGVuZ3VlTW9kZWxfSG9zdEluZmVjdGl2aXR5MSgpOworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPkhvc3QgSW5mZWN0aXZpdHkyPC9iPjwvZW0+JyBhdHRyaWJ1dGUgZmVhdHVyZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVBdHRyaWJ1dGUgU0lNUExFX0RFTkdVRV9NT0RFTF9fSE9TVF9JTkZFQ1RJVklUWTIgPSBlSU5TVEFOQ0UuZ2V0U2ltcGxlRGVuZ3VlTW9kZWxfSG9zdEluZmVjdGl2aXR5MigpOworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPkhvc3QgSW5mZWN0aXZpdHkzPC9iPjwvZW0+JyBhdHRyaWJ1dGUgZmVhdHVyZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVBdHRyaWJ1dGUgU0lNUExFX0RFTkdVRV9NT0RFTF9fSE9TVF9JTkZFQ1RJVklUWTMgPSBlSU5TVEFOQ0UuZ2V0U2ltcGxlRGVuZ3VlTW9kZWxfSG9zdEluZmVjdGl2aXR5MygpOworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPkhvc3QgSW5mZWN0aXZpdHk0PC9iPjwvZW0+JyBhdHRyaWJ1dGUgZmVhdHVyZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVBdHRyaWJ1dGUgU0lNUExFX0RFTkdVRV9NT0RFTF9fSE9TVF9JTkZFQ1RJVklUWTQgPSBlSU5TVEFOQ0UuZ2V0U2ltcGxlRGVuZ3VlTW9kZWxfSG9zdEluZmVjdGl2aXR5NCgpOworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPkhvc3QgUHJpbWFyeSBJbmN1YmF0aW9uIFJhdGU8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUF0dHJpYnV0ZSBTSU1QTEVfREVOR1VFX01PREVMX19IT1NUX1BSSU1BUllfSU5DVUJBVElPTl9SQVRFID0gZUlOU1RBTkNFLmdldFNpbXBsZURlbmd1ZU1vZGVsX0hvc3RQcmltYXJ5SW5jdWJhdGlvblJhdGUoKTsKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5Ib3N0IFByaW1hcnkgUmVjb3ZlcnkgUmF0ZTwvYj48L2VtPicgYXR0cmlidXRlIGZlYXR1cmUuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQXR0cmlidXRlIFNJTVBMRV9ERU5HVUVfTU9ERUxfX0hPU1RfUFJJTUFSWV9SRUNPVkVSWV9SQVRFID0gZUlOU1RBTkNFLmdldFNpbXBsZURlbmd1ZU1vZGVsX0hvc3RQcmltYXJ5UmVjb3ZlcnlSYXRlKCk7CisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+SG9zdCBQcmltYXJ5IEltbXVuaXR5IExvc3MgUmF0ZTwvYj48L2VtPicgYXR0cmlidXRlIGZlYXR1cmUuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQXR0cmlidXRlIFNJTVBMRV9ERU5HVUVfTU9ERUxfX0hPU1RfUFJJTUFSWV9JTU1VTklUWV9MT1NTX1JBVEUgPSBlSU5TVEFOQ0UuZ2V0U2ltcGxlRGVuZ3VlTW9kZWxfSG9zdFByaW1hcnlJbW11bml0eUxvc3NSYXRlKCk7CisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+SG9zdCBQcmltYXJ5IERlYXRoIFJhdGU8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUF0dHJpYnV0ZSBTSU1QTEVfREVOR1VFX01PREVMX19IT1NUX1BSSU1BUllfREVBVEhfUkFURSA9IGVJTlNUQU5DRS5nZXRTaW1wbGVEZW5ndWVNb2RlbF9Ib3N0UHJpbWFyeURlYXRoUmF0ZSgpOworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPkhvc3QgQURFMTwvYj48L2VtPicgYXR0cmlidXRlIGZlYXR1cmUuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQXR0cmlidXRlIFNJTVBMRV9ERU5HVUVfTU9ERUxfX0hPU1RfQURFMSA9IGVJTlNUQU5DRS5nZXRTaW1wbGVEZW5ndWVNb2RlbF9Ib3N0QURFMSgpOworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPkhvc3QgQURFMjwvYj48L2VtPicgYXR0cmlidXRlIGZlYXR1cmUuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQXR0cmlidXRlIFNJTVBMRV9ERU5HVUVfTU9ERUxfX0hPU1RfQURFMiA9IGVJTlNUQU5DRS5nZXRTaW1wbGVEZW5ndWVNb2RlbF9Ib3N0QURFMigpOworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPkhvc3QgQURFMzwvYj48L2VtPicgYXR0cmlidXRlIGZlYXR1cmUuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQXR0cmlidXRlIFNJTVBMRV9ERU5HVUVfTU9ERUxfX0hPU1RfQURFMyA9IGVJTlNUQU5DRS5nZXRTaW1wbGVEZW5ndWVNb2RlbF9Ib3N0QURFMygpOworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPkhvc3QgQURFNDwvYj48L2VtPicgYXR0cmlidXRlIGZlYXR1cmUuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQXR0cmlidXRlIFNJTVBMRV9ERU5HVUVfTU9ERUxfX0hPU1RfQURFNCA9IGVJTlNUQU5DRS5nZXRTaW1wbGVEZW5ndWVNb2RlbF9Ib3N0QURFNCgpOworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPkhvc3QgU2Vjb25kYXJ5IEluY3ViYXRpb24gUmF0ZTwvYj48L2VtPicgYXR0cmlidXRlIGZlYXR1cmUuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQXR0cmlidXRlIFNJTVBMRV9ERU5HVUVfTU9ERUxfX0hPU1RfU0VDT05EQVJZX0lOQ1VCQVRJT05fUkFURSA9IGVJTlNUQU5DRS5nZXRTaW1wbGVEZW5ndWVNb2RlbF9Ib3N0U2Vjb25kYXJ5SW5jdWJhdGlvblJhdGUoKTsKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5Ib3N0IFNlY29uZGFyeSBSZWNvdmVyeSBSYXRlPC9iPjwvZW0+JyBhdHRyaWJ1dGUgZmVhdHVyZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVBdHRyaWJ1dGUgU0lNUExFX0RFTkdVRV9NT0RFTF9fSE9TVF9TRUNPTkRBUllfUkVDT1ZFUllfUkFURSA9IGVJTlNUQU5DRS5nZXRTaW1wbGVEZW5ndWVNb2RlbF9Ib3N0U2Vjb25kYXJ5UmVjb3ZlcnlSYXRlKCk7CisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+SG9zdCBTZWNvbmRhcnkgRGVhdGggUmF0ZTwvYj48L2VtPicgYXR0cmlidXRlIGZlYXR1cmUuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQXR0cmlidXRlIFNJTVBMRV9ERU5HVUVfTU9ERUxfX0hPU1RfU0VDT05EQVJZX0RFQVRIX1JBVEUgPSBlSU5TVEFOQ0UuZ2V0U2ltcGxlRGVuZ3VlTW9kZWxfSG9zdFNlY29uZGFyeURlYXRoUmF0ZSgpOworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPlZlY3RvciBJbmZlY3Rpdml0eTE8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUF0dHJpYnV0ZSBTSU1QTEVfREVOR1VFX01PREVMX19WRUNUT1JfSU5GRUNUSVZJVFkxID0gZUlOU1RBTkNFLmdldFNpbXBsZURlbmd1ZU1vZGVsX1ZlY3RvckluZmVjdGl2aXR5MSgpOworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPlZlY3RvciBJbmZlY3Rpdml0eTI8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUF0dHJpYnV0ZSBTSU1QTEVfREVOR1VFX01PREVMX19WRUNUT1JfSU5GRUNUSVZJVFkyID0gZUlOU1RBTkNFLmdldFNpbXBsZURlbmd1ZU1vZGVsX1ZlY3RvckluZmVjdGl2aXR5MigpOworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPlZlY3RvciBJbmZlY3Rpdml0eTM8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUF0dHJpYnV0ZSBTSU1QTEVfREVOR1VFX01PREVMX19WRUNUT1JfSU5GRUNUSVZJVFkzID0gZUlOU1RBTkNFLmdldFNpbXBsZURlbmd1ZU1vZGVsX1ZlY3RvckluZmVjdGl2aXR5MygpOworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPlZlY3RvciBJbmZlY3Rpdml0eTQ8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUF0dHJpYnV0ZSBTSU1QTEVfREVOR1VFX01PREVMX19WRUNUT1JfSU5GRUNUSVZJVFk0ID0gZUlOU1RBTkNFLmdldFNpbXBsZURlbmd1ZU1vZGVsX1ZlY3RvckluZmVjdGl2aXR5NCgpOworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPlZlY3RvciBBREUxPC9iPjwvZW0+JyBhdHRyaWJ1dGUgZmVhdHVyZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVBdHRyaWJ1dGUgU0lNUExFX0RFTkdVRV9NT0RFTF9fVkVDVE9SX0FERTEgPSBlSU5TVEFOQ0UuZ2V0U2ltcGxlRGVuZ3VlTW9kZWxfVmVjdG9yQURFMSgpOworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPlZlY3RvciBBREUyPC9iPjwvZW0+JyBhdHRyaWJ1dGUgZmVhdHVyZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVBdHRyaWJ1dGUgU0lNUExFX0RFTkdVRV9NT0RFTF9fVkVDVE9SX0FERTIgPSBlSU5TVEFOQ0UuZ2V0U2ltcGxlRGVuZ3VlTW9kZWxfVmVjdG9yQURFMigpOworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPlZlY3RvciBBREUzPC9iPjwvZW0+JyBhdHRyaWJ1dGUgZmVhdHVyZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVBdHRyaWJ1dGUgU0lNUExFX0RFTkdVRV9NT0RFTF9fVkVDVE9SX0FERTMgPSBlSU5TVEFOQ0UuZ2V0U2ltcGxlRGVuZ3VlTW9kZWxfVmVjdG9yQURFMygpOworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPlZlY3RvciBBREU0PC9iPjwvZW0+JyBhdHRyaWJ1dGUgZmVhdHVyZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVBdHRyaWJ1dGUgU0lNUExFX0RFTkdVRV9NT0RFTF9fVkVDVE9SX0FERTQgPSBlSU5TVEFOQ0UuZ2V0U2ltcGxlRGVuZ3VlTW9kZWxfVmVjdG9yQURFNCgpOworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPlZlY3RvciBJbmN1YmF0aW9uIFJhdGU8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUF0dHJpYnV0ZSBTSU1QTEVfREVOR1VFX01PREVMX19WRUNUT1JfSU5DVUJBVElPTl9SQVRFID0gZUlOU1RBTkNFLmdldFNpbXBsZURlbmd1ZU1vZGVsX1ZlY3RvckluY3ViYXRpb25SYXRlKCk7CisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5pbXBsLkRlbmd1ZU1vZGVsSG9zdExhYmVsSW1wbCA8ZW0+RGVuZ3VlIE1vZGVsIEhvc3QgTGFiZWw8L2VtPn0nIGNsYXNzLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLmltcGwuRGVuZ3VlTW9kZWxIb3N0TGFiZWxJbXBsCisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5pbXBsLlZlY3RvclBhY2thZ2VJbXBsI2dldERlbmd1ZU1vZGVsSG9zdExhYmVsKCkKKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUNsYXNzIERFTkdVRV9NT0RFTF9IT1NUX0xBQkVMID0gZUlOU1RBTkNFLmdldERlbmd1ZU1vZGVsSG9zdExhYmVsKCk7CisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5pbXBsLkRlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVJbXBsIDxlbT5EZW5ndWUgTW9kZWwgSG9zdCBMYWJlbCBWYWx1ZTwvZW0+fScgY2xhc3MuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuaW1wbC5EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlSW1wbAorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuaW1wbC5WZWN0b3JQYWNrYWdlSW1wbCNnZXREZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlKCkKKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUNsYXNzIERFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFID0gZUlOU1RBTkNFLmdldERlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWUoKTsKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5FMTwvYj48L2VtPicgYXR0cmlidXRlIGZlYXR1cmUuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQXR0cmlidXRlIERFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19FMSA9IGVJTlNUQU5DRS5nZXREZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX0UxKCk7CisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+RTI8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUF0dHJpYnV0ZSBERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fRTIgPSBlSU5TVEFOQ0UuZ2V0RGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9FMigpOworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPkUzPC9iPjwvZW0+JyBhdHRyaWJ1dGUgZmVhdHVyZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVBdHRyaWJ1dGUgREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0UzID0gZUlOU1RBTkNFLmdldERlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfRTMoKTsKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5FNDwvYj48L2VtPicgYXR0cmlidXRlIGZlYXR1cmUuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQXR0cmlidXRlIERFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19FNCA9IGVJTlNUQU5DRS5nZXREZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX0U0KCk7CisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+STE8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUF0dHJpYnV0ZSBERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fSTEgPSBlSU5TVEFOQ0UuZ2V0RGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9JMSgpOworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPkkyPC9iPjwvZW0+JyBhdHRyaWJ1dGUgZmVhdHVyZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVBdHRyaWJ1dGUgREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0kyID0gZUlOU1RBTkNFLmdldERlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfSTIoKTsKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5JMzwvYj48L2VtPicgYXR0cmlidXRlIGZlYXR1cmUuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQXR0cmlidXRlIERFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19JMyA9IGVJTlNUQU5DRS5nZXREZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX0kzKCk7CisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+STQ8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUF0dHJpYnV0ZSBERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fSTQgPSBlSU5TVEFOQ0UuZ2V0RGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9JNCgpOworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPlQxPC9iPjwvZW0+JyBhdHRyaWJ1dGUgZmVhdHVyZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVBdHRyaWJ1dGUgREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX1QxID0gZUlOU1RBTkNFLmdldERlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfVDEoKTsKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5UMjwvYj48L2VtPicgYXR0cmlidXRlIGZlYXR1cmUuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQXR0cmlidXRlIERFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19UMiA9IGVJTlNUQU5DRS5nZXREZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX1QyKCk7CisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+VDM8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUF0dHJpYnV0ZSBERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fVDMgPSBlSU5TVEFOQ0UuZ2V0RGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9UMygpOworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPlQ0PC9iPjwvZW0+JyBhdHRyaWJ1dGUgZmVhdHVyZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVBdHRyaWJ1dGUgREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX1Q0ID0gZUlOU1RBTkNFLmdldERlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfVDQoKTsKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5SMTwvYj48L2VtPicgYXR0cmlidXRlIGZlYXR1cmUuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQXR0cmlidXRlIERFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19SMSA9IGVJTlNUQU5DRS5nZXREZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX1IxKCk7CisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+UjI8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUF0dHJpYnV0ZSBERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fUjIgPSBlSU5TVEFOQ0UuZ2V0RGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9SMigpOworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPlIzPC9iPjwvZW0+JyBhdHRyaWJ1dGUgZmVhdHVyZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVBdHRyaWJ1dGUgREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX1IzID0gZUlOU1RBTkNFLmdldERlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfUjMoKTsKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5SNDwvYj48L2VtPicgYXR0cmlidXRlIGZlYXR1cmUuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQXR0cmlidXRlIERFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19SNCA9IGVJTlNUQU5DRS5nZXREZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX1I0KCk7CisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+RTEyPC9iPjwvZW0+JyBhdHRyaWJ1dGUgZmVhdHVyZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVBdHRyaWJ1dGUgREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0UxMiA9IGVJTlNUQU5DRS5nZXREZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX0UxMigpOworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPkUxMzwvYj48L2VtPicgYXR0cmlidXRlIGZlYXR1cmUuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQXR0cmlidXRlIERFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19FMTMgPSBlSU5TVEFOQ0UuZ2V0RGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9FMTMoKTsKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5FMTQ8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUF0dHJpYnV0ZSBERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fRTE0ID0gZUlOU1RBTkNFLmdldERlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfRTE0KCk7CisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+RTIxPC9iPjwvZW0+JyBhdHRyaWJ1dGUgZmVhdHVyZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVBdHRyaWJ1dGUgREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0UyMSA9IGVJTlNUQU5DRS5nZXREZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX0UyMSgpOworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPkUyMzwvYj48L2VtPicgYXR0cmlidXRlIGZlYXR1cmUuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQXR0cmlidXRlIERFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19FMjMgPSBlSU5TVEFOQ0UuZ2V0RGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9FMjMoKTsKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5FMjQ8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUF0dHJpYnV0ZSBERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fRTI0ID0gZUlOU1RBTkNFLmdldERlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfRTI0KCk7CisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+RTMxPC9iPjwvZW0+JyBhdHRyaWJ1dGUgZmVhdHVyZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVBdHRyaWJ1dGUgREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0UzMSA9IGVJTlNUQU5DRS5nZXREZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX0UzMSgpOworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPkUzMjwvYj48L2VtPicgYXR0cmlidXRlIGZlYXR1cmUuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQXR0cmlidXRlIERFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19FMzIgPSBlSU5TVEFOQ0UuZ2V0RGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9FMzIoKTsKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5FMzQ8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUF0dHJpYnV0ZSBERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fRTM0ID0gZUlOU1RBTkNFLmdldERlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfRTM0KCk7CisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+RTQxPC9iPjwvZW0+JyBhdHRyaWJ1dGUgZmVhdHVyZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVBdHRyaWJ1dGUgREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0U0MSA9IGVJTlNUQU5DRS5nZXREZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX0U0MSgpOworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPkU0MjwvYj48L2VtPicgYXR0cmlidXRlIGZlYXR1cmUuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQXR0cmlidXRlIERFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19FNDIgPSBlSU5TVEFOQ0UuZ2V0RGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9FNDIoKTsKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5FNDM8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUF0dHJpYnV0ZSBERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fRTQzID0gZUlOU1RBTkNFLmdldERlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfRTQzKCk7CisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+STEyPC9iPjwvZW0+JyBhdHRyaWJ1dGUgZmVhdHVyZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVBdHRyaWJ1dGUgREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0kxMiA9IGVJTlNUQU5DRS5nZXREZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX0kxMigpOworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPkkxMzwvYj48L2VtPicgYXR0cmlidXRlIGZlYXR1cmUuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQXR0cmlidXRlIERFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19JMTMgPSBlSU5TVEFOQ0UuZ2V0RGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9JMTMoKTsKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5JMTQ8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUF0dHJpYnV0ZSBERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fSTE0ID0gZUlOU1RBTkNFLmdldERlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfSTE0KCk7CisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+STIxPC9iPjwvZW0+JyBhdHRyaWJ1dGUgZmVhdHVyZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVBdHRyaWJ1dGUgREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0kyMSA9IGVJTlNUQU5DRS5nZXREZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX0kyMSgpOworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPkkyMzwvYj48L2VtPicgYXR0cmlidXRlIGZlYXR1cmUuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQXR0cmlidXRlIERFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19JMjMgPSBlSU5TVEFOQ0UuZ2V0RGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9JMjMoKTsKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5JMjQ8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUF0dHJpYnV0ZSBERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fSTI0ID0gZUlOU1RBTkNFLmdldERlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfSTI0KCk7CisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+STMxPC9iPjwvZW0+JyBhdHRyaWJ1dGUgZmVhdHVyZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVBdHRyaWJ1dGUgREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0kzMSA9IGVJTlNUQU5DRS5nZXREZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX0kzMSgpOworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPkkzMjwvYj48L2VtPicgYXR0cmlidXRlIGZlYXR1cmUuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQXR0cmlidXRlIERFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19JMzIgPSBlSU5TVEFOQ0UuZ2V0RGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9JMzIoKTsKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5JMzQ8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUF0dHJpYnV0ZSBERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fSTM0ID0gZUlOU1RBTkNFLmdldERlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfSTM0KCk7CisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+STQxPC9iPjwvZW0+JyBhdHRyaWJ1dGUgZmVhdHVyZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVBdHRyaWJ1dGUgREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0k0MSA9IGVJTlNUQU5DRS5nZXREZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX0k0MSgpOworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPkk0MjwvYj48L2VtPicgYXR0cmlidXRlIGZlYXR1cmUuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQXR0cmlidXRlIERFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19JNDIgPSBlSU5TVEFOQ0UuZ2V0RGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9JNDIoKTsKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5JNDM8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUF0dHJpYnV0ZSBERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fSTQzID0gZUlOU1RBTkNFLmdldERlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfSTQzKCk7CisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+UjwvYj48L2VtPicgYXR0cmlidXRlIGZlYXR1cmUuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQXR0cmlidXRlIERFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19SID0gZUlOU1RBTkNFLmdldERlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfUigpOworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPkluY2lkZW5jZTE8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUF0dHJpYnV0ZSBERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fSU5DSURFTkNFMSA9IGVJTlNUQU5DRS5nZXREZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX0luY2lkZW5jZTEoKTsKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5JbmNpZGVuY2UyPC9iPjwvZW0+JyBhdHRyaWJ1dGUgZmVhdHVyZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVBdHRyaWJ1dGUgREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0lOQ0lERU5DRTIgPSBlSU5TVEFOQ0UuZ2V0RGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9JbmNpZGVuY2UyKCk7CisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+SW5jaWRlbmNlMzwvYj48L2VtPicgYXR0cmlidXRlIGZlYXR1cmUuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQXR0cmlidXRlIERFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19JTkNJREVOQ0UzID0gZUlOU1RBTkNFLmdldERlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfSW5jaWRlbmNlMygpOworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPkluY2lkZW5jZTQ8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUF0dHJpYnV0ZSBERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fSU5DSURFTkNFNCA9IGVJTlNUQU5DRS5nZXREZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX0luY2lkZW5jZTQoKTsKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5JbmNpZGVuY2UxMjwvYj48L2VtPicgYXR0cmlidXRlIGZlYXR1cmUuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQXR0cmlidXRlIERFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19JTkNJREVOQ0UxMiA9IGVJTlNUQU5DRS5nZXREZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX0luY2lkZW5jZTEyKCk7CisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+SW5jaWRlbmNlMjE8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUF0dHJpYnV0ZSBERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fSU5DSURFTkNFMjEgPSBlSU5TVEFOQ0UuZ2V0RGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9JbmNpZGVuY2UyMSgpOworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPkluY2lkZW5jZTMxPC9iPjwvZW0+JyBhdHRyaWJ1dGUgZmVhdHVyZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVBdHRyaWJ1dGUgREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0lOQ0lERU5DRTMxID0gZUlOU1RBTkNFLmdldERlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfSW5jaWRlbmNlMzEoKTsKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5JbmNpZGVuY2U0MTwvYj48L2VtPicgYXR0cmlidXRlIGZlYXR1cmUuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQXR0cmlidXRlIERFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19JTkNJREVOQ0U0MSA9IGVJTlNUQU5DRS5nZXREZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX0luY2lkZW5jZTQxKCk7CisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+SW5jaWRlbmNlMTM8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUF0dHJpYnV0ZSBERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fSU5DSURFTkNFMTMgPSBlSU5TVEFOQ0UuZ2V0RGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9JbmNpZGVuY2UxMygpOworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPkluY2lkZW5jZTIzPC9iPjwvZW0+JyBhdHRyaWJ1dGUgZmVhdHVyZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVBdHRyaWJ1dGUgREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0lOQ0lERU5DRTIzID0gZUlOU1RBTkNFLmdldERlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfSW5jaWRlbmNlMjMoKTsKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5JbmNpZGVuY2UzMjwvYj48L2VtPicgYXR0cmlidXRlIGZlYXR1cmUuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQXR0cmlidXRlIERFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19JTkNJREVOQ0UzMiA9IGVJTlNUQU5DRS5nZXREZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX0luY2lkZW5jZTMyKCk7CisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+SW5jaWRlbmNlNDI8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUF0dHJpYnV0ZSBERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fSU5DSURFTkNFNDIgPSBlSU5TVEFOQ0UuZ2V0RGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9JbmNpZGVuY2U0MigpOworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPkluY2lkZW5jZTE0PC9iPjwvZW0+JyBhdHRyaWJ1dGUgZmVhdHVyZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVBdHRyaWJ1dGUgREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0lOQ0lERU5DRTE0ID0gZUlOU1RBTkNFLmdldERlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfSW5jaWRlbmNlMTQoKTsKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5JbmNpZGVuY2UyNDwvYj48L2VtPicgYXR0cmlidXRlIGZlYXR1cmUuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQXR0cmlidXRlIERFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19JTkNJREVOQ0UyNCA9IGVJTlNUQU5DRS5nZXREZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX0luY2lkZW5jZTI0KCk7CisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+SW5jaWRlbmNlMzQ8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUF0dHJpYnV0ZSBERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fSU5DSURFTkNFMzQgPSBlSU5TVEFOQ0UuZ2V0RGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9JbmNpZGVuY2UzNCgpOworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPkluY2lkZW5jZTQzPC9iPjwvZW0+JyBhdHRyaWJ1dGUgZmVhdHVyZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVBdHRyaWJ1dGUgREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0lOQ0lERU5DRTQzID0gZUlOU1RBTkNFLmdldERlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfSW5jaWRlbmNlNDMoKTsKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5EaXNlYXNlIERlYXRoczE8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUF0dHJpYnV0ZSBERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fRElTRUFTRV9ERUFUSFMxID0gZUlOU1RBTkNFLmdldERlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfRGlzZWFzZURlYXRoczEoKTsKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5EaXNlYXNlIERlYXRoczI8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUF0dHJpYnV0ZSBERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fRElTRUFTRV9ERUFUSFMyID0gZUlOU1RBTkNFLmdldERlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfRGlzZWFzZURlYXRoczIoKTsKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5EaXNlYXNlIERlYXRoczM8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUF0dHJpYnV0ZSBERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fRElTRUFTRV9ERUFUSFMzID0gZUlOU1RBTkNFLmdldERlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfRGlzZWFzZURlYXRoczMoKTsKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5EaXNlYXNlIERlYXRoczQ8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUF0dHJpYnV0ZSBERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fRElTRUFTRV9ERUFUSFM0ID0gZUlOU1RBTkNFLmdldERlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfRGlzZWFzZURlYXRoczQoKTsKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5EaXNlYXNlIERlYXRoczEyPC9iPjwvZW0+JyBhdHRyaWJ1dGUgZmVhdHVyZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVBdHRyaWJ1dGUgREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0RJU0VBU0VfREVBVEhTMTIgPSBlSU5TVEFOQ0UuZ2V0RGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9EaXNlYXNlRGVhdGhzMTIoKTsKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5EaXNlYXNlIERlYXRoczIxPC9iPjwvZW0+JyBhdHRyaWJ1dGUgZmVhdHVyZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVBdHRyaWJ1dGUgREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0RJU0VBU0VfREVBVEhTMjEgPSBlSU5TVEFOQ0UuZ2V0RGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9EaXNlYXNlRGVhdGhzMjEoKTsKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5EaXNlYXNlIERlYXRoczMxPC9iPjwvZW0+JyBhdHRyaWJ1dGUgZmVhdHVyZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVBdHRyaWJ1dGUgREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0RJU0VBU0VfREVBVEhTMzEgPSBlSU5TVEFOQ0UuZ2V0RGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9EaXNlYXNlRGVhdGhzMzEoKTsKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5EaXNlYXNlIERlYXRoczQxPC9iPjwvZW0+JyBhdHRyaWJ1dGUgZmVhdHVyZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVBdHRyaWJ1dGUgREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0RJU0VBU0VfREVBVEhTNDEgPSBlSU5TVEFOQ0UuZ2V0RGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9EaXNlYXNlRGVhdGhzNDEoKTsKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5EaXNlYXNlIERlYXRoczEzPC9iPjwvZW0+JyBhdHRyaWJ1dGUgZmVhdHVyZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVBdHRyaWJ1dGUgREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0RJU0VBU0VfREVBVEhTMTMgPSBlSU5TVEFOQ0UuZ2V0RGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9EaXNlYXNlRGVhdGhzMTMoKTsKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5EaXNlYXNlIERlYXRoczIzPC9iPjwvZW0+JyBhdHRyaWJ1dGUgZmVhdHVyZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVBdHRyaWJ1dGUgREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0RJU0VBU0VfREVBVEhTMjMgPSBlSU5TVEFOQ0UuZ2V0RGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9EaXNlYXNlRGVhdGhzMjMoKTsKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5EaXNlYXNlIERlYXRoczMyPC9iPjwvZW0+JyBhdHRyaWJ1dGUgZmVhdHVyZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVBdHRyaWJ1dGUgREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0RJU0VBU0VfREVBVEhTMzIgPSBlSU5TVEFOQ0UuZ2V0RGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9EaXNlYXNlRGVhdGhzMzIoKTsKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5EaXNlYXNlIERlYXRoczQyPC9iPjwvZW0+JyBhdHRyaWJ1dGUgZmVhdHVyZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVBdHRyaWJ1dGUgREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0RJU0VBU0VfREVBVEhTNDIgPSBlSU5TVEFOQ0UuZ2V0RGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9EaXNlYXNlRGVhdGhzNDIoKTsKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5EaXNlYXNlIERlYXRoczE0PC9iPjwvZW0+JyBhdHRyaWJ1dGUgZmVhdHVyZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVBdHRyaWJ1dGUgREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0RJU0VBU0VfREVBVEhTMTQgPSBlSU5TVEFOQ0UuZ2V0RGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9EaXNlYXNlRGVhdGhzMTQoKTsKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5EaXNlYXNlIERlYXRoczI0PC9iPjwvZW0+JyBhdHRyaWJ1dGUgZmVhdHVyZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVBdHRyaWJ1dGUgREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0RJU0VBU0VfREVBVEhTMjQgPSBlSU5TVEFOQ0UuZ2V0RGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9EaXNlYXNlRGVhdGhzMjQoKTsKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5EaXNlYXNlIERlYXRoczM0PC9iPjwvZW0+JyBhdHRyaWJ1dGUgZmVhdHVyZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVBdHRyaWJ1dGUgREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0RJU0VBU0VfREVBVEhTMzQgPSBlSU5TVEFOQ0UuZ2V0RGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9EaXNlYXNlRGVhdGhzMzQoKTsKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5EaXNlYXNlIERlYXRoczQzPC9iPjwvZW0+JyBhdHRyaWJ1dGUgZmVhdHVyZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVBdHRyaWJ1dGUgREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0RJU0VBU0VfREVBVEhTNDMgPSBlSU5TVEFOQ0UuZ2V0RGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9EaXNlYXNlRGVhdGhzNDMoKTsKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLmltcGwuRGVuZ3VlTW9kZWxWZWN0b3JMYWJlbEltcGwgPGVtPkRlbmd1ZSBNb2RlbCBWZWN0b3IgTGFiZWw8L2VtPn0nIGNsYXNzLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLmltcGwuRGVuZ3VlTW9kZWxWZWN0b3JMYWJlbEltcGwKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLmltcGwuVmVjdG9yUGFja2FnZUltcGwjZ2V0RGVuZ3VlTW9kZWxWZWN0b3JMYWJlbCgpCisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVDbGFzcyBERU5HVUVfTU9ERUxfVkVDVE9SX0xBQkVMID0gZUlOU1RBTkNFLmdldERlbmd1ZU1vZGVsVmVjdG9yTGFiZWwoKTsKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLmltcGwuRGVuZ3VlTW9kZWxWZWN0b3JMYWJlbFZhbHVlSW1wbCA8ZW0+RGVuZ3VlIE1vZGVsIFZlY3RvciBMYWJlbCBWYWx1ZTwvZW0+fScgY2xhc3MuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuaW1wbC5EZW5ndWVNb2RlbFZlY3RvckxhYmVsVmFsdWVJbXBsCisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5pbXBsLlZlY3RvclBhY2thZ2VJbXBsI2dldERlbmd1ZU1vZGVsVmVjdG9yTGFiZWxWYWx1ZSgpCisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVDbGFzcyBERU5HVUVfTU9ERUxfVkVDVE9SX0xBQkVMX1ZBTFVFID0gZUlOU1RBTkNFLmdldERlbmd1ZU1vZGVsVmVjdG9yTGFiZWxWYWx1ZSgpOworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPkUxPC9iPjwvZW0+JyBhdHRyaWJ1dGUgZmVhdHVyZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVBdHRyaWJ1dGUgREVOR1VFX01PREVMX1ZFQ1RPUl9MQUJFTF9WQUxVRV9fRTEgPSBlSU5TVEFOQ0UuZ2V0RGVuZ3VlTW9kZWxWZWN0b3JMYWJlbFZhbHVlX0UxKCk7CisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+RTI8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUF0dHJpYnV0ZSBERU5HVUVfTU9ERUxfVkVDVE9SX0xBQkVMX1ZBTFVFX19FMiA9IGVJTlNUQU5DRS5nZXREZW5ndWVNb2RlbFZlY3RvckxhYmVsVmFsdWVfRTIoKTsKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5FMzwvYj48L2VtPicgYXR0cmlidXRlIGZlYXR1cmUuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQXR0cmlidXRlIERFTkdVRV9NT0RFTF9WRUNUT1JfTEFCRUxfVkFMVUVfX0UzID0gZUlOU1RBTkNFLmdldERlbmd1ZU1vZGVsVmVjdG9yTGFiZWxWYWx1ZV9FMygpOworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPkU0PC9iPjwvZW0+JyBhdHRyaWJ1dGUgZmVhdHVyZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVBdHRyaWJ1dGUgREVOR1VFX01PREVMX1ZFQ1RPUl9MQUJFTF9WQUxVRV9fRTQgPSBlSU5TVEFOQ0UuZ2V0RGVuZ3VlTW9kZWxWZWN0b3JMYWJlbFZhbHVlX0U0KCk7CisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+STE8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUF0dHJpYnV0ZSBERU5HVUVfTU9ERUxfVkVDVE9SX0xBQkVMX1ZBTFVFX19JMSA9IGVJTlNUQU5DRS5nZXREZW5ndWVNb2RlbFZlY3RvckxhYmVsVmFsdWVfSTEoKTsKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5JMjwvYj48L2VtPicgYXR0cmlidXRlIGZlYXR1cmUuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQXR0cmlidXRlIERFTkdVRV9NT0RFTF9WRUNUT1JfTEFCRUxfVkFMVUVfX0kyID0gZUlOU1RBTkNFLmdldERlbmd1ZU1vZGVsVmVjdG9yTGFiZWxWYWx1ZV9JMigpOworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPkkzPC9iPjwvZW0+JyBhdHRyaWJ1dGUgZmVhdHVyZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVBdHRyaWJ1dGUgREVOR1VFX01PREVMX1ZFQ1RPUl9MQUJFTF9WQUxVRV9fSTMgPSBlSU5TVEFOQ0UuZ2V0RGVuZ3VlTW9kZWxWZWN0b3JMYWJlbFZhbHVlX0kzKCk7CisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+STQ8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUF0dHJpYnV0ZSBERU5HVUVfTU9ERUxfVkVDVE9SX0xBQkVMX1ZBTFVFX19JNCA9IGVJTlNUQU5DRS5nZXREZW5ndWVNb2RlbFZlY3RvckxhYmVsVmFsdWVfSTQoKTsKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5JbmNpZGVuY2UxPC9iPjwvZW0+JyBhdHRyaWJ1dGUgZmVhdHVyZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVBdHRyaWJ1dGUgREVOR1VFX01PREVMX1ZFQ1RPUl9MQUJFTF9WQUxVRV9fSU5DSURFTkNFMSA9IGVJTlNUQU5DRS5nZXREZW5ndWVNb2RlbFZlY3RvckxhYmVsVmFsdWVfSW5jaWRlbmNlMSgpOworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPkluY2lkZW5jZTI8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUF0dHJpYnV0ZSBERU5HVUVfTU9ERUxfVkVDVE9SX0xBQkVMX1ZBTFVFX19JTkNJREVOQ0UyID0gZUlOU1RBTkNFLmdldERlbmd1ZU1vZGVsVmVjdG9yTGFiZWxWYWx1ZV9JbmNpZGVuY2UyKCk7CisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+SW5jaWRlbmNlMzwvYj48L2VtPicgYXR0cmlidXRlIGZlYXR1cmUuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQXR0cmlidXRlIERFTkdVRV9NT0RFTF9WRUNUT1JfTEFCRUxfVkFMVUVfX0lOQ0lERU5DRTMgPSBlSU5TVEFOQ0UuZ2V0RGVuZ3VlTW9kZWxWZWN0b3JMYWJlbFZhbHVlX0luY2lkZW5jZTMoKTsKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5JbmNpZGVuY2U0PC9iPjwvZW0+JyBhdHRyaWJ1dGUgZmVhdHVyZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVBdHRyaWJ1dGUgREVOR1VFX01PREVMX1ZFQ1RPUl9MQUJFTF9WQUxVRV9fSU5DSURFTkNFNCA9IGVJTlNUQU5DRS5nZXREZW5ndWVNb2RlbFZlY3RvckxhYmVsVmFsdWVfSW5jaWRlbmNlNCgpOworCisJfQorCit9IC8vVmVjdG9yUGFja2FnZQpkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvdmVjdG9yL2ltcGwvRGVuZ3VlTW9kZWxIb3N0TGFiZWxJbXBsLmphdmEgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3Ivc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy92ZWN0b3IvaW1wbC9EZW5ndWVNb2RlbEhvc3RMYWJlbEltcGwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNzdiYjhkCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvdmVjdG9yL2ltcGwvRGVuZ3VlTW9kZWxIb3N0TGFiZWxJbXBsLmphdmEKQEAgLTAsMCArMSw1MSBAQAorLyoqDQorICogPGNvcHlyaWdodD4NCisgKiA8L2NvcHlyaWdodD4NCisgKg0KKyAqICRJZCQNCisgKi8NCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuaW1wbDsNCisNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzczsNCisNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLmltcGwuU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbEltcGw7DQorDQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWxIb3N0TGFiZWw7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuVmVjdG9yRmFjdG9yeTsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5WZWN0b3JQYWNrYWdlOw0KKw0KKy8qKg0KKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorICogQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPkRlbmd1ZSBNb2RlbCBIb3N0IExhYmVsPC9iPjwvZW0+Jy4NCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisgKiA8cD4NCisgKiA8L3A+DQorICoNCisgKiBAZ2VuZXJhdGVkDQorICovDQorcHVibGljIGNsYXNzIERlbmd1ZU1vZGVsSG9zdExhYmVsSW1wbCBleHRlbmRzIFN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWxJbXBsIGltcGxlbWVudHMgRGVuZ3VlTW9kZWxIb3N0TGFiZWwgew0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQgTk9UDQorCSAqLw0KKwlwcm90ZWN0ZWQgRGVuZ3VlTW9kZWxIb3N0TGFiZWxJbXBsKCkgew0KKwkJc2V0Q3VycmVudFZhbHVlKFZlY3RvckZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZURlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWUoKSk7DQorCQlzZXROZXh0VmFsdWUoVmVjdG9yRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZSgpKTsNCisJCXNldFRlbXBWYWx1ZShWZWN0b3JGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVEZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlKCkpOw0KKwkJc2V0UHJvYmVWYWx1ZShWZWN0b3JGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVEZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlKCkpOw0KKwkJc2V0RXJyb3JTY2FsZShWZWN0b3JGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVEZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlKCkpOw0KKwkJc2V0RGVsdGFWYWx1ZShWZWN0b3JGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVEZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlKCkpOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJQE92ZXJyaWRlDQorCXByb3RlY3RlZCBFQ2xhc3MgZVN0YXRpY0NsYXNzKCkgew0KKwkJcmV0dXJuIFZlY3RvclBhY2thZ2UuTGl0ZXJhbHMuREVOR1VFX01PREVMX0hPU1RfTEFCRUw7DQorCX0NCisNCit9IC8vRGVuZ3VlTW9kZWxIb3N0TGFiZWxJbXBsDQpkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvdmVjdG9yL2ltcGwvRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZUltcGwuamF2YSBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3ZlY3Rvci9pbXBsL0Rlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVJbXBsLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWFkZjhlYwotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3ZlY3Rvci9pbXBsL0Rlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVJbXBsLmphdmEKQEAgLTAsMCArMSwzODcwIEBACisvKioNCisgKiA8Y29weXJpZ2h0Pg0KKyAqIDwvY29weXJpZ2h0Pg0KKyAqDQorICogJElkJA0KKyAqLw0KK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5pbXBsOw0KKw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb247DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7DQorDQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5pbXBsLkVOb3RpZmljYXRpb25JbXBsOw0KKw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuaW1wbC5TdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsVmFsdWVJbXBsOw0KKw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLkRlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWU7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuVmVjdG9yUGFja2FnZTsNCisNCisvKioNCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiBBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICcNCisgKiA8ZW0+PGI+RGVuZ3VlIE1vZGVsIEhvc3QgTGFiZWwgVmFsdWU8L2I+PC9lbT4nLiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisgKiA8cD4NCisgKiBUaGUgZm9sbG93aW5nIGZlYXR1cmVzIGFyZSBpbXBsZW1lbnRlZDoNCisgKiA8dWw+DQorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuaW1wbC5EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlSW1wbCNnZXRFMSA8ZW0+RTE8L2VtPn08L2xpPg0KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLmltcGwuRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZUltcGwjZ2V0RTIgPGVtPkUyPC9lbT59PC9saT4NCisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5pbXBsLkRlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVJbXBsI2dldEUzIDxlbT5FMzwvZW0+fTwvbGk+DQorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuaW1wbC5EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlSW1wbCNnZXRFNCA8ZW0+RTQ8L2VtPn08L2xpPg0KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLmltcGwuRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZUltcGwjZ2V0STEgPGVtPkkxPC9lbT59PC9saT4NCisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5pbXBsLkRlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVJbXBsI2dldEkyIDxlbT5JMjwvZW0+fTwvbGk+DQorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuaW1wbC5EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlSW1wbCNnZXRJMyA8ZW0+STM8L2VtPn08L2xpPg0KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLmltcGwuRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZUltcGwjZ2V0STQgPGVtPkk0PC9lbT59PC9saT4NCisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5pbXBsLkRlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVJbXBsI2dldFQxIDxlbT5UMTwvZW0+fTwvbGk+DQorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuaW1wbC5EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlSW1wbCNnZXRUMiA8ZW0+VDI8L2VtPn08L2xpPg0KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLmltcGwuRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZUltcGwjZ2V0VDMgPGVtPlQzPC9lbT59PC9saT4NCisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5pbXBsLkRlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVJbXBsI2dldFQ0IDxlbT5UNDwvZW0+fTwvbGk+DQorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuaW1wbC5EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlSW1wbCNnZXRSMSA8ZW0+UjE8L2VtPn08L2xpPg0KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLmltcGwuRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZUltcGwjZ2V0UjIgPGVtPlIyPC9lbT59PC9saT4NCisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5pbXBsLkRlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVJbXBsI2dldFIzIDxlbT5SMzwvZW0+fTwvbGk+DQorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuaW1wbC5EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlSW1wbCNnZXRSNCA8ZW0+UjQ8L2VtPn08L2xpPg0KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLmltcGwuRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZUltcGwjZ2V0RTEyIDxlbT5FMTI8L2VtPn08L2xpPg0KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLmltcGwuRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZUltcGwjZ2V0RTEzIDxlbT5FMTM8L2VtPn08L2xpPg0KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLmltcGwuRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZUltcGwjZ2V0RTE0IDxlbT5FMTQ8L2VtPn08L2xpPg0KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLmltcGwuRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZUltcGwjZ2V0RTIxIDxlbT5FMjE8L2VtPn08L2xpPg0KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLmltcGwuRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZUltcGwjZ2V0RTIzIDxlbT5FMjM8L2VtPn08L2xpPg0KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLmltcGwuRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZUltcGwjZ2V0RTI0IDxlbT5FMjQ8L2VtPn08L2xpPg0KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLmltcGwuRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZUltcGwjZ2V0RTMxIDxlbT5FMzE8L2VtPn08L2xpPg0KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLmltcGwuRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZUltcGwjZ2V0RTMyIDxlbT5FMzI8L2VtPn08L2xpPg0KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLmltcGwuRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZUltcGwjZ2V0RTM0IDxlbT5FMzQ8L2VtPn08L2xpPg0KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLmltcGwuRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZUltcGwjZ2V0RTQxIDxlbT5FNDE8L2VtPn08L2xpPg0KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLmltcGwuRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZUltcGwjZ2V0RTQyIDxlbT5FNDI8L2VtPn08L2xpPg0KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLmltcGwuRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZUltcGwjZ2V0RTQzIDxlbT5FNDM8L2VtPn08L2xpPg0KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLmltcGwuRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZUltcGwjZ2V0STEyIDxlbT5JMTI8L2VtPn08L2xpPg0KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLmltcGwuRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZUltcGwjZ2V0STEzIDxlbT5JMTM8L2VtPn08L2xpPg0KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLmltcGwuRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZUltcGwjZ2V0STE0IDxlbT5JMTQ8L2VtPn08L2xpPg0KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLmltcGwuRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZUltcGwjZ2V0STIxIDxlbT5JMjE8L2VtPn08L2xpPg0KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLmltcGwuRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZUltcGwjZ2V0STIzIDxlbT5JMjM8L2VtPn08L2xpPg0KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLmltcGwuRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZUltcGwjZ2V0STI0IDxlbT5JMjQ8L2VtPn08L2xpPg0KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLmltcGwuRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZUltcGwjZ2V0STMxIDxlbT5JMzE8L2VtPn08L2xpPg0KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLmltcGwuRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZUltcGwjZ2V0STMyIDxlbT5JMzI8L2VtPn08L2xpPg0KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLmltcGwuRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZUltcGwjZ2V0STM0IDxlbT5JMzQ8L2VtPn08L2xpPg0KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLmltcGwuRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZUltcGwjZ2V0STQxIDxlbT5JNDE8L2VtPn08L2xpPg0KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLmltcGwuRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZUltcGwjZ2V0STQyIDxlbT5JNDI8L2VtPn08L2xpPg0KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLmltcGwuRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZUltcGwjZ2V0STQzIDxlbT5JNDM8L2VtPn08L2xpPg0KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLmltcGwuRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZUltcGwjZ2V0UiA8ZW0+UjwvZW0+fTwvbGk+DQorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuaW1wbC5EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlSW1wbCNnZXRJbmNpZGVuY2UxIDxlbT5JbmNpZGVuY2UxPC9lbT59PC9saT4NCisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5pbXBsLkRlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVJbXBsI2dldEluY2lkZW5jZTIgPGVtPkluY2lkZW5jZTI8L2VtPn08L2xpPg0KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLmltcGwuRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZUltcGwjZ2V0SW5jaWRlbmNlMyA8ZW0+SW5jaWRlbmNlMzwvZW0+fTwvbGk+DQorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuaW1wbC5EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlSW1wbCNnZXRJbmNpZGVuY2U0IDxlbT5JbmNpZGVuY2U0PC9lbT59PC9saT4NCisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5pbXBsLkRlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVJbXBsI2dldEluY2lkZW5jZTEyIDxlbT5JbmNpZGVuY2UxMjwvZW0+fTwvbGk+DQorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuaW1wbC5EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlSW1wbCNnZXRJbmNpZGVuY2UyMSA8ZW0+SW5jaWRlbmNlMjE8L2VtPn08L2xpPg0KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLmltcGwuRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZUltcGwjZ2V0SW5jaWRlbmNlMzEgPGVtPkluY2lkZW5jZTMxPC9lbT59PC9saT4NCisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5pbXBsLkRlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVJbXBsI2dldEluY2lkZW5jZTQxIDxlbT5JbmNpZGVuY2U0MTwvZW0+fTwvbGk+DQorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuaW1wbC5EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlSW1wbCNnZXRJbmNpZGVuY2UxMyA8ZW0+SW5jaWRlbmNlMTM8L2VtPn08L2xpPg0KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLmltcGwuRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZUltcGwjZ2V0SW5jaWRlbmNlMjMgPGVtPkluY2lkZW5jZTIzPC9lbT59PC9saT4NCisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5pbXBsLkRlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVJbXBsI2dldEluY2lkZW5jZTMyIDxlbT5JbmNpZGVuY2UzMjwvZW0+fTwvbGk+DQorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuaW1wbC5EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlSW1wbCNnZXRJbmNpZGVuY2U0MiA8ZW0+SW5jaWRlbmNlNDI8L2VtPn08L2xpPg0KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLmltcGwuRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZUltcGwjZ2V0SW5jaWRlbmNlMTQgPGVtPkluY2lkZW5jZTE0PC9lbT59PC9saT4NCisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5pbXBsLkRlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVJbXBsI2dldEluY2lkZW5jZTI0IDxlbT5JbmNpZGVuY2UyNDwvZW0+fTwvbGk+DQorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuaW1wbC5EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlSW1wbCNnZXRJbmNpZGVuY2UzNCA8ZW0+SW5jaWRlbmNlMzQ8L2VtPn08L2xpPg0KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLmltcGwuRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZUltcGwjZ2V0SW5jaWRlbmNlNDMgPGVtPkluY2lkZW5jZTQzPC9lbT59PC9saT4NCisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5pbXBsLkRlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVJbXBsI2dldERpc2Vhc2VEZWF0aHMxIDxlbT5EaXNlYXNlIERlYXRoczE8L2VtPn08L2xpPg0KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLmltcGwuRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZUltcGwjZ2V0RGlzZWFzZURlYXRoczIgPGVtPkRpc2Vhc2UgRGVhdGhzMjwvZW0+fTwvbGk+DQorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuaW1wbC5EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlSW1wbCNnZXREaXNlYXNlRGVhdGhzMyA8ZW0+RGlzZWFzZSBEZWF0aHMzPC9lbT59PC9saT4NCisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5pbXBsLkRlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVJbXBsI2dldERpc2Vhc2VEZWF0aHM0IDxlbT5EaXNlYXNlIERlYXRoczQ8L2VtPn08L2xpPg0KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLmltcGwuRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZUltcGwjZ2V0RGlzZWFzZURlYXRoczEyIDxlbT5EaXNlYXNlIERlYXRoczEyPC9lbT59PC9saT4NCisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5pbXBsLkRlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVJbXBsI2dldERpc2Vhc2VEZWF0aHMyMSA8ZW0+RGlzZWFzZSBEZWF0aHMyMTwvZW0+fTwvbGk+DQorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuaW1wbC5EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlSW1wbCNnZXREaXNlYXNlRGVhdGhzMzEgPGVtPkRpc2Vhc2UgRGVhdGhzMzE8L2VtPn08L2xpPg0KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLmltcGwuRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZUltcGwjZ2V0RGlzZWFzZURlYXRoczQxIDxlbT5EaXNlYXNlIERlYXRoczQxPC9lbT59PC9saT4NCisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5pbXBsLkRlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVJbXBsI2dldERpc2Vhc2VEZWF0aHMxMyA8ZW0+RGlzZWFzZSBEZWF0aHMxMzwvZW0+fTwvbGk+DQorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuaW1wbC5EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlSW1wbCNnZXREaXNlYXNlRGVhdGhzMjMgPGVtPkRpc2Vhc2UgRGVhdGhzMjM8L2VtPn08L2xpPg0KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLmltcGwuRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZUltcGwjZ2V0RGlzZWFzZURlYXRoczMyIDxlbT5EaXNlYXNlIERlYXRoczMyPC9lbT59PC9saT4NCisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5pbXBsLkRlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVJbXBsI2dldERpc2Vhc2VEZWF0aHM0MiA8ZW0+RGlzZWFzZSBEZWF0aHM0MjwvZW0+fTwvbGk+DQorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuaW1wbC5EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlSW1wbCNnZXREaXNlYXNlRGVhdGhzMTQgPGVtPkRpc2Vhc2UgRGVhdGhzMTQ8L2VtPn08L2xpPg0KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLmltcGwuRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZUltcGwjZ2V0RGlzZWFzZURlYXRoczI0IDxlbT5EaXNlYXNlIERlYXRoczI0PC9lbT59PC9saT4NCisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5pbXBsLkRlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVJbXBsI2dldERpc2Vhc2VEZWF0aHMzNCA8ZW0+RGlzZWFzZSBEZWF0aHMzNDwvZW0+fTwvbGk+DQorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuaW1wbC5EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlSW1wbCNnZXREaXNlYXNlRGVhdGhzNDMgPGVtPkRpc2Vhc2UgRGVhdGhzNDM8L2VtPn08L2xpPg0KKyAqIDwvdWw+DQorICogPC9wPg0KKyAqDQorICogQGdlbmVyYXRlZA0KKyAqLw0KK3B1YmxpYyBjbGFzcyBEZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlSW1wbCBleHRlbmRzDQorCQlTdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsVmFsdWVJbXBsIGltcGxlbWVudHMgRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZSB7DQorCS8qKg0KKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0RTEoKSA8ZW0+RTE8L2VtPn0nIGF0dHJpYnV0ZS4gPCEtLQ0KKwkgKiBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIA0KKwkgKiBAc2VlICNnZXRFMSgpDQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgZG91YmxlIEUxX0VERUZBVUxUID0gMC4wOw0KKw0KKwkvKioNCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0RTEoKSA8ZW0+RTE8L2VtPn0nIGF0dHJpYnV0ZS4gPCEtLQ0KKwkgKiBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIA0KKwkgKiBAc2VlICNnZXRFMSgpDQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCXByb3RlY3RlZCBkb3VibGUgZTEgPSBFMV9FREVGQVVMVDsNCisNCisJLyoqDQorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRFMigpIDxlbT5FMjwvZW0+fScgYXR0cmlidXRlLiA8IS0tDQorCSAqIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogDQorCSAqIEBzZWUgI2dldEUyKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBkb3VibGUgRTJfRURFRkFVTFQgPSAwLjA7DQorDQorCS8qKg0KKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRFMigpIDxlbT5FMjwvZW0+fScgYXR0cmlidXRlLiA8IS0tDQorCSAqIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogDQorCSAqIEBzZWUgI2dldEUyKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJcHJvdGVjdGVkIGRvdWJsZSBlMiA9IEUyX0VERUZBVUxUOw0KKw0KKwkvKioNCisJICogVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldEUzKCkgPGVtPkUzPC9lbT59JyBhdHRyaWJ1dGUuIDwhLS0NCisJICogYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiANCisJICogQHNlZSAjZ2V0RTMoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqIEBvcmRlcmVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIGRvdWJsZSBFM19FREVGQVVMVCA9IDAuMDsNCisNCisJLyoqDQorCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldEUzKCkgPGVtPkUzPC9lbT59JyBhdHRyaWJ1dGUuIDwhLS0NCisJICogYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiANCisJICogQHNlZSAjZ2V0RTMoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqIEBvcmRlcmVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgZG91YmxlIGUzID0gRTNfRURFRkFVTFQ7DQorDQorCS8qKg0KKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0RTQoKSA8ZW0+RTQ8L2VtPn0nIGF0dHJpYnV0ZS4gPCEtLQ0KKwkgKiBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIA0KKwkgKiBAc2VlICNnZXRFNCgpDQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgZG91YmxlIEU0X0VERUZBVUxUID0gMC4wOw0KKw0KKwkvKioNCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0RTQoKSA8ZW0+RTQ8L2VtPn0nIGF0dHJpYnV0ZS4gPCEtLQ0KKwkgKiBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIA0KKwkgKiBAc2VlICNnZXRFNCgpDQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCXByb3RlY3RlZCBkb3VibGUgZTQgPSBFNF9FREVGQVVMVDsNCisNCisJLyoqDQorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRJMSgpIDxlbT5JMTwvZW0+fScgYXR0cmlidXRlLiA8IS0tDQorCSAqIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogDQorCSAqIEBzZWUgI2dldEkxKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBkb3VibGUgSTFfRURFRkFVTFQgPSAwLjA7DQorDQorCS8qKg0KKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRJMSgpIDxlbT5JMTwvZW0+fScgYXR0cmlidXRlLiA8IS0tDQorCSAqIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogDQorCSAqIEBzZWUgI2dldEkxKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJcHJvdGVjdGVkIGRvdWJsZSBpMSA9IEkxX0VERUZBVUxUOw0KKw0KKwkvKioNCisJICogVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldEkyKCkgPGVtPkkyPC9lbT59JyBhdHRyaWJ1dGUuIDwhLS0NCisJICogYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiANCisJICogQHNlZSAjZ2V0STIoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqIEBvcmRlcmVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIGRvdWJsZSBJMl9FREVGQVVMVCA9IDAuMDsNCisNCisJLyoqDQorCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldEkyKCkgPGVtPkkyPC9lbT59JyBhdHRyaWJ1dGUuIDwhLS0NCisJICogYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiANCisJICogQHNlZSAjZ2V0STIoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqIEBvcmRlcmVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgZG91YmxlIGkyID0gSTJfRURFRkFVTFQ7DQorDQorCS8qKg0KKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0STMoKSA8ZW0+STM8L2VtPn0nIGF0dHJpYnV0ZS4gPCEtLQ0KKwkgKiBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIA0KKwkgKiBAc2VlICNnZXRJMygpDQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgZG91YmxlIEkzX0VERUZBVUxUID0gMC4wOw0KKw0KKwkvKioNCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0STMoKSA8ZW0+STM8L2VtPn0nIGF0dHJpYnV0ZS4gPCEtLQ0KKwkgKiBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIA0KKwkgKiBAc2VlICNnZXRJMygpDQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCXByb3RlY3RlZCBkb3VibGUgaTMgPSBJM19FREVGQVVMVDsNCisNCisJLyoqDQorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRJNCgpIDxlbT5JNDwvZW0+fScgYXR0cmlidXRlLiA8IS0tDQorCSAqIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogDQorCSAqIEBzZWUgI2dldEk0KCkNCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBkb3VibGUgSTRfRURFRkFVTFQgPSAwLjA7DQorDQorCS8qKg0KKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRJNCgpIDxlbT5JNDwvZW0+fScgYXR0cmlidXRlLiA8IS0tDQorCSAqIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogDQorCSAqIEBzZWUgI2dldEk0KCkNCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJcHJvdGVjdGVkIGRvdWJsZSBpNCA9IEk0X0VERUZBVUxUOw0KKw0KKwkvKioNCisJICogVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldFQxKCkgPGVtPlQxPC9lbT59JyBhdHRyaWJ1dGUuIDwhLS0NCisJICogYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiANCisJICogQHNlZSAjZ2V0VDEoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqIEBvcmRlcmVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIGRvdWJsZSBUMV9FREVGQVVMVCA9IDAuMDsNCisNCisJLyoqDQorCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldFQxKCkgPGVtPlQxPC9lbT59JyBhdHRyaWJ1dGUuIDwhLS0NCisJICogYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiANCisJICogQHNlZSAjZ2V0VDEoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqIEBvcmRlcmVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgZG91YmxlIHQxID0gVDFfRURFRkFVTFQ7DQorDQorCS8qKg0KKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0VDIoKSA8ZW0+VDI8L2VtPn0nIGF0dHJpYnV0ZS4gPCEtLQ0KKwkgKiBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIA0KKwkgKiBAc2VlICNnZXRUMigpDQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgZG91YmxlIFQyX0VERUZBVUxUID0gMC4wOw0KKw0KKwkvKioNCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0VDIoKSA8ZW0+VDI8L2VtPn0nIGF0dHJpYnV0ZS4gPCEtLQ0KKwkgKiBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIA0KKwkgKiBAc2VlICNnZXRUMigpDQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCXByb3RlY3RlZCBkb3VibGUgdDIgPSBUMl9FREVGQVVMVDsNCisNCisJLyoqDQorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRUMygpIDxlbT5UMzwvZW0+fScgYXR0cmlidXRlLiA8IS0tDQorCSAqIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogDQorCSAqIEBzZWUgI2dldFQzKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBkb3VibGUgVDNfRURFRkFVTFQgPSAwLjA7DQorDQorCS8qKg0KKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRUMygpIDxlbT5UMzwvZW0+fScgYXR0cmlidXRlLiA8IS0tDQorCSAqIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogDQorCSAqIEBzZWUgI2dldFQzKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJcHJvdGVjdGVkIGRvdWJsZSB0MyA9IFQzX0VERUZBVUxUOw0KKw0KKwkvKioNCisJICogVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldFQ0KCkgPGVtPlQ0PC9lbT59JyBhdHRyaWJ1dGUuIDwhLS0NCisJICogYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiANCisJICogQHNlZSAjZ2V0VDQoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqIEBvcmRlcmVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIGRvdWJsZSBUNF9FREVGQVVMVCA9IDAuMDsNCisNCisJLyoqDQorCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldFQ0KCkgPGVtPlQ0PC9lbT59JyBhdHRyaWJ1dGUuIDwhLS0NCisJICogYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiANCisJICogQHNlZSAjZ2V0VDQoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqIEBvcmRlcmVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgZG91YmxlIHQ0ID0gVDRfRURFRkFVTFQ7DQorDQorCS8qKg0KKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0UjEoKSA8ZW0+UjE8L2VtPn0nIGF0dHJpYnV0ZS4gPCEtLQ0KKwkgKiBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIA0KKwkgKiBAc2VlICNnZXRSMSgpDQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgZG91YmxlIFIxX0VERUZBVUxUID0gMC4wOw0KKw0KKwkvKioNCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0UjEoKSA8ZW0+UjE8L2VtPn0nIGF0dHJpYnV0ZS4gPCEtLQ0KKwkgKiBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIA0KKwkgKiBAc2VlICNnZXRSMSgpDQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCXByb3RlY3RlZCBkb3VibGUgcjEgPSBSMV9FREVGQVVMVDsNCisNCisJLyoqDQorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRSMigpIDxlbT5SMjwvZW0+fScgYXR0cmlidXRlLiA8IS0tDQorCSAqIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogDQorCSAqIEBzZWUgI2dldFIyKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBkb3VibGUgUjJfRURFRkFVTFQgPSAwLjA7DQorDQorCS8qKg0KKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRSMigpIDxlbT5SMjwvZW0+fScgYXR0cmlidXRlLiA8IS0tDQorCSAqIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogDQorCSAqIEBzZWUgI2dldFIyKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJcHJvdGVjdGVkIGRvdWJsZSByMiA9IFIyX0VERUZBVUxUOw0KKw0KKwkvKioNCisJICogVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldFIzKCkgPGVtPlIzPC9lbT59JyBhdHRyaWJ1dGUuIDwhLS0NCisJICogYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiANCisJICogQHNlZSAjZ2V0UjMoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqIEBvcmRlcmVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIGRvdWJsZSBSM19FREVGQVVMVCA9IDAuMDsNCisNCisJLyoqDQorCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldFIzKCkgPGVtPlIzPC9lbT59JyBhdHRyaWJ1dGUuIDwhLS0NCisJICogYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiANCisJICogQHNlZSAjZ2V0UjMoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqIEBvcmRlcmVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgZG91YmxlIHIzID0gUjNfRURFRkFVTFQ7DQorDQorCS8qKg0KKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0UjQoKSA8ZW0+UjQ8L2VtPn0nIGF0dHJpYnV0ZS4gPCEtLQ0KKwkgKiBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIA0KKwkgKiBAc2VlICNnZXRSNCgpDQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgZG91YmxlIFI0X0VERUZBVUxUID0gMC4wOw0KKw0KKwkvKioNCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0UjQoKSA8ZW0+UjQ8L2VtPn0nIGF0dHJpYnV0ZS4gPCEtLQ0KKwkgKiBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIA0KKwkgKiBAc2VlICNnZXRSNCgpDQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCXByb3RlY3RlZCBkb3VibGUgcjQgPSBSNF9FREVGQVVMVDsNCisNCisJLyoqDQorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRFMTIoKSA8ZW0+RTEyPC9lbT59JyBhdHRyaWJ1dGUuIDwhLS0NCisJICogYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiANCisJICogQHNlZSAjZ2V0RTEyKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBkb3VibGUgRTEyX0VERUZBVUxUID0gMC4wOw0KKw0KKwkvKioNCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0RTEyKCkgPGVtPkUxMjwvZW0+fScgYXR0cmlidXRlLiA8IS0tDQorCSAqIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogDQorCSAqIEBzZWUgI2dldEUxMigpDQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCXByb3RlY3RlZCBkb3VibGUgZTEyID0gRTEyX0VERUZBVUxUOw0KKw0KKwkvKioNCisJICogVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldEUxMygpIDxlbT5FMTM8L2VtPn0nIGF0dHJpYnV0ZS4gPCEtLQ0KKwkgKiBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIA0KKwkgKiBAc2VlICNnZXRFMTMoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqIEBvcmRlcmVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIGRvdWJsZSBFMTNfRURFRkFVTFQgPSAwLjA7DQorDQorCS8qKg0KKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRFMTMoKSA8ZW0+RTEzPC9lbT59JyBhdHRyaWJ1dGUuIDwhLS0NCisJICogYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiANCisJICogQHNlZSAjZ2V0RTEzKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJcHJvdGVjdGVkIGRvdWJsZSBlMTMgPSBFMTNfRURFRkFVTFQ7DQorDQorCS8qKg0KKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0RTE0KCkgPGVtPkUxNDwvZW0+fScgYXR0cmlidXRlLiA8IS0tDQorCSAqIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogDQorCSAqIEBzZWUgI2dldEUxNCgpDQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgZG91YmxlIEUxNF9FREVGQVVMVCA9IDAuMDsNCisNCisJLyoqDQorCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldEUxNCgpIDxlbT5FMTQ8L2VtPn0nIGF0dHJpYnV0ZS4gPCEtLQ0KKwkgKiBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIA0KKwkgKiBAc2VlICNnZXRFMTQoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqIEBvcmRlcmVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgZG91YmxlIGUxNCA9IEUxNF9FREVGQVVMVDsNCisNCisJLyoqDQorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRFMjEoKSA8ZW0+RTIxPC9lbT59JyBhdHRyaWJ1dGUuIDwhLS0NCisJICogYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiANCisJICogQHNlZSAjZ2V0RTIxKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBkb3VibGUgRTIxX0VERUZBVUxUID0gMC4wOw0KKw0KKwkvKioNCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0RTIxKCkgPGVtPkUyMTwvZW0+fScgYXR0cmlidXRlLiA8IS0tDQorCSAqIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogDQorCSAqIEBzZWUgI2dldEUyMSgpDQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCXByb3RlY3RlZCBkb3VibGUgZTIxID0gRTIxX0VERUZBVUxUOw0KKw0KKwkvKioNCisJICogVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldEUyMygpIDxlbT5FMjM8L2VtPn0nIGF0dHJpYnV0ZS4gPCEtLQ0KKwkgKiBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIA0KKwkgKiBAc2VlICNnZXRFMjMoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqIEBvcmRlcmVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIGRvdWJsZSBFMjNfRURFRkFVTFQgPSAwLjA7DQorDQorCS8qKg0KKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRFMjMoKSA8ZW0+RTIzPC9lbT59JyBhdHRyaWJ1dGUuIDwhLS0NCisJICogYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiANCisJICogQHNlZSAjZ2V0RTIzKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJcHJvdGVjdGVkIGRvdWJsZSBlMjMgPSBFMjNfRURFRkFVTFQ7DQorDQorCS8qKg0KKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0RTI0KCkgPGVtPkUyNDwvZW0+fScgYXR0cmlidXRlLiA8IS0tDQorCSAqIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogDQorCSAqIEBzZWUgI2dldEUyNCgpDQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgZG91YmxlIEUyNF9FREVGQVVMVCA9IDAuMDsNCisNCisJLyoqDQorCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldEUyNCgpIDxlbT5FMjQ8L2VtPn0nIGF0dHJpYnV0ZS4gPCEtLQ0KKwkgKiBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIA0KKwkgKiBAc2VlICNnZXRFMjQoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqIEBvcmRlcmVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgZG91YmxlIGUyNCA9IEUyNF9FREVGQVVMVDsNCisNCisJLyoqDQorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRFMzEoKSA8ZW0+RTMxPC9lbT59JyBhdHRyaWJ1dGUuIDwhLS0NCisJICogYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiANCisJICogQHNlZSAjZ2V0RTMxKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBkb3VibGUgRTMxX0VERUZBVUxUID0gMC4wOw0KKw0KKwkvKioNCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0RTMxKCkgPGVtPkUzMTwvZW0+fScgYXR0cmlidXRlLiA8IS0tDQorCSAqIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogDQorCSAqIEBzZWUgI2dldEUzMSgpDQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCXByb3RlY3RlZCBkb3VibGUgZTMxID0gRTMxX0VERUZBVUxUOw0KKw0KKwkvKioNCisJICogVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldEUzMigpIDxlbT5FMzI8L2VtPn0nIGF0dHJpYnV0ZS4gPCEtLQ0KKwkgKiBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIA0KKwkgKiBAc2VlICNnZXRFMzIoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqIEBvcmRlcmVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIGRvdWJsZSBFMzJfRURFRkFVTFQgPSAwLjA7DQorDQorCS8qKg0KKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRFMzIoKSA8ZW0+RTMyPC9lbT59JyBhdHRyaWJ1dGUuIDwhLS0NCisJICogYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiANCisJICogQHNlZSAjZ2V0RTMyKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJcHJvdGVjdGVkIGRvdWJsZSBlMzIgPSBFMzJfRURFRkFVTFQ7DQorDQorCS8qKg0KKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0RTM0KCkgPGVtPkUzNDwvZW0+fScgYXR0cmlidXRlLiA8IS0tDQorCSAqIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogDQorCSAqIEBzZWUgI2dldEUzNCgpDQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgZG91YmxlIEUzNF9FREVGQVVMVCA9IDAuMDsNCisNCisJLyoqDQorCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldEUzNCgpIDxlbT5FMzQ8L2VtPn0nIGF0dHJpYnV0ZS4gPCEtLQ0KKwkgKiBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIA0KKwkgKiBAc2VlICNnZXRFMzQoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqIEBvcmRlcmVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgZG91YmxlIGUzNCA9IEUzNF9FREVGQVVMVDsNCisNCisJLyoqDQorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRFNDEoKSA8ZW0+RTQxPC9lbT59JyBhdHRyaWJ1dGUuIDwhLS0NCisJICogYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiANCisJICogQHNlZSAjZ2V0RTQxKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBkb3VibGUgRTQxX0VERUZBVUxUID0gMC4wOw0KKw0KKwkvKioNCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0RTQxKCkgPGVtPkU0MTwvZW0+fScgYXR0cmlidXRlLiA8IS0tDQorCSAqIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogDQorCSAqIEBzZWUgI2dldEU0MSgpDQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCXByb3RlY3RlZCBkb3VibGUgZTQxID0gRTQxX0VERUZBVUxUOw0KKw0KKwkvKioNCisJICogVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldEU0MigpIDxlbT5FNDI8L2VtPn0nIGF0dHJpYnV0ZS4gPCEtLQ0KKwkgKiBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIA0KKwkgKiBAc2VlICNnZXRFNDIoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqIEBvcmRlcmVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIGRvdWJsZSBFNDJfRURFRkFVTFQgPSAwLjA7DQorDQorCS8qKg0KKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRFNDIoKSA8ZW0+RTQyPC9lbT59JyBhdHRyaWJ1dGUuIDwhLS0NCisJICogYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiANCisJICogQHNlZSAjZ2V0RTQyKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJcHJvdGVjdGVkIGRvdWJsZSBlNDIgPSBFNDJfRURFRkFVTFQ7DQorDQorCS8qKg0KKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0RTQzKCkgPGVtPkU0MzwvZW0+fScgYXR0cmlidXRlLiA8IS0tDQorCSAqIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogDQorCSAqIEBzZWUgI2dldEU0MygpDQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgZG91YmxlIEU0M19FREVGQVVMVCA9IDAuMDsNCisNCisJLyoqDQorCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldEU0MygpIDxlbT5FNDM8L2VtPn0nIGF0dHJpYnV0ZS4gPCEtLQ0KKwkgKiBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIA0KKwkgKiBAc2VlICNnZXRFNDMoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqIEBvcmRlcmVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgZG91YmxlIGU0MyA9IEU0M19FREVGQVVMVDsNCisNCisJLyoqDQorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRJMTIoKSA8ZW0+STEyPC9lbT59JyBhdHRyaWJ1dGUuIDwhLS0NCisJICogYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiANCisJICogQHNlZSAjZ2V0STEyKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBkb3VibGUgSTEyX0VERUZBVUxUID0gMC4wOw0KKw0KKwkvKioNCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0STEyKCkgPGVtPkkxMjwvZW0+fScgYXR0cmlidXRlLiA8IS0tDQorCSAqIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogDQorCSAqIEBzZWUgI2dldEkxMigpDQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCXByb3RlY3RlZCBkb3VibGUgaTEyID0gSTEyX0VERUZBVUxUOw0KKw0KKwkvKioNCisJICogVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldEkxMygpIDxlbT5JMTM8L2VtPn0nIGF0dHJpYnV0ZS4gPCEtLQ0KKwkgKiBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIA0KKwkgKiBAc2VlICNnZXRJMTMoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqIEBvcmRlcmVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIGRvdWJsZSBJMTNfRURFRkFVTFQgPSAwLjA7DQorDQorCS8qKg0KKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRJMTMoKSA8ZW0+STEzPC9lbT59JyBhdHRyaWJ1dGUuIDwhLS0NCisJICogYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiANCisJICogQHNlZSAjZ2V0STEzKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJcHJvdGVjdGVkIGRvdWJsZSBpMTMgPSBJMTNfRURFRkFVTFQ7DQorDQorCS8qKg0KKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0STE0KCkgPGVtPkkxNDwvZW0+fScgYXR0cmlidXRlLiA8IS0tDQorCSAqIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogDQorCSAqIEBzZWUgI2dldEkxNCgpDQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgZG91YmxlIEkxNF9FREVGQVVMVCA9IDAuMDsNCisNCisJLyoqDQorCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldEkxNCgpIDxlbT5JMTQ8L2VtPn0nIGF0dHJpYnV0ZS4gPCEtLQ0KKwkgKiBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIA0KKwkgKiBAc2VlICNnZXRJMTQoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqIEBvcmRlcmVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgZG91YmxlIGkxNCA9IEkxNF9FREVGQVVMVDsNCisNCisJLyoqDQorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRJMjEoKSA8ZW0+STIxPC9lbT59JyBhdHRyaWJ1dGUuIDwhLS0NCisJICogYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiANCisJICogQHNlZSAjZ2V0STIxKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBkb3VibGUgSTIxX0VERUZBVUxUID0gMC4wOw0KKw0KKwkvKioNCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0STIxKCkgPGVtPkkyMTwvZW0+fScgYXR0cmlidXRlLiA8IS0tDQorCSAqIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogDQorCSAqIEBzZWUgI2dldEkyMSgpDQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCXByb3RlY3RlZCBkb3VibGUgaTIxID0gSTIxX0VERUZBVUxUOw0KKw0KKwkvKioNCisJICogVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldEkyMygpIDxlbT5JMjM8L2VtPn0nIGF0dHJpYnV0ZS4gPCEtLQ0KKwkgKiBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIA0KKwkgKiBAc2VlICNnZXRJMjMoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqIEBvcmRlcmVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIGRvdWJsZSBJMjNfRURFRkFVTFQgPSAwLjA7DQorDQorCS8qKg0KKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRJMjMoKSA8ZW0+STIzPC9lbT59JyBhdHRyaWJ1dGUuIDwhLS0NCisJICogYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiANCisJICogQHNlZSAjZ2V0STIzKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJcHJvdGVjdGVkIGRvdWJsZSBpMjMgPSBJMjNfRURFRkFVTFQ7DQorDQorCS8qKg0KKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0STI0KCkgPGVtPkkyNDwvZW0+fScgYXR0cmlidXRlLiA8IS0tDQorCSAqIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogDQorCSAqIEBzZWUgI2dldEkyNCgpDQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgZG91YmxlIEkyNF9FREVGQVVMVCA9IDAuMDsNCisNCisJLyoqDQorCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldEkyNCgpIDxlbT5JMjQ8L2VtPn0nIGF0dHJpYnV0ZS4gPCEtLQ0KKwkgKiBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIA0KKwkgKiBAc2VlICNnZXRJMjQoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqIEBvcmRlcmVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgZG91YmxlIGkyNCA9IEkyNF9FREVGQVVMVDsNCisNCisJLyoqDQorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRJMzEoKSA8ZW0+STMxPC9lbT59JyBhdHRyaWJ1dGUuIDwhLS0NCisJICogYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiANCisJICogQHNlZSAjZ2V0STMxKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBkb3VibGUgSTMxX0VERUZBVUxUID0gMC4wOw0KKw0KKwkvKioNCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0STMxKCkgPGVtPkkzMTwvZW0+fScgYXR0cmlidXRlLiA8IS0tDQorCSAqIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogDQorCSAqIEBzZWUgI2dldEkzMSgpDQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCXByb3RlY3RlZCBkb3VibGUgaTMxID0gSTMxX0VERUZBVUxUOw0KKw0KKwkvKioNCisJICogVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldEkzMigpIDxlbT5JMzI8L2VtPn0nIGF0dHJpYnV0ZS4gPCEtLQ0KKwkgKiBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIA0KKwkgKiBAc2VlICNnZXRJMzIoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqIEBvcmRlcmVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIGRvdWJsZSBJMzJfRURFRkFVTFQgPSAwLjA7DQorDQorCS8qKg0KKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRJMzIoKSA8ZW0+STMyPC9lbT59JyBhdHRyaWJ1dGUuIDwhLS0NCisJICogYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiANCisJICogQHNlZSAjZ2V0STMyKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJcHJvdGVjdGVkIGRvdWJsZSBpMzIgPSBJMzJfRURFRkFVTFQ7DQorDQorCS8qKg0KKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0STM0KCkgPGVtPkkzNDwvZW0+fScgYXR0cmlidXRlLiA8IS0tDQorCSAqIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogDQorCSAqIEBzZWUgI2dldEkzNCgpDQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgZG91YmxlIEkzNF9FREVGQVVMVCA9IDAuMDsNCisNCisJLyoqDQorCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldEkzNCgpIDxlbT5JMzQ8L2VtPn0nIGF0dHJpYnV0ZS4gPCEtLQ0KKwkgKiBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIA0KKwkgKiBAc2VlICNnZXRJMzQoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqIEBvcmRlcmVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgZG91YmxlIGkzNCA9IEkzNF9FREVGQVVMVDsNCisNCisJLyoqDQorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRJNDEoKSA8ZW0+STQxPC9lbT59JyBhdHRyaWJ1dGUuIDwhLS0NCisJICogYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiANCisJICogQHNlZSAjZ2V0STQxKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBkb3VibGUgSTQxX0VERUZBVUxUID0gMC4wOw0KKw0KKwkvKioNCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0STQxKCkgPGVtPkk0MTwvZW0+fScgYXR0cmlidXRlLiA8IS0tDQorCSAqIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogDQorCSAqIEBzZWUgI2dldEk0MSgpDQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCXByb3RlY3RlZCBkb3VibGUgaTQxID0gSTQxX0VERUZBVUxUOw0KKw0KKwkvKioNCisJICogVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldEk0MigpIDxlbT5JNDI8L2VtPn0nIGF0dHJpYnV0ZS4gPCEtLQ0KKwkgKiBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIA0KKwkgKiBAc2VlICNnZXRJNDIoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqIEBvcmRlcmVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIGRvdWJsZSBJNDJfRURFRkFVTFQgPSAwLjA7DQorDQorCS8qKg0KKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRJNDIoKSA8ZW0+STQyPC9lbT59JyBhdHRyaWJ1dGUuIDwhLS0NCisJICogYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiANCisJICogQHNlZSAjZ2V0STQyKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJcHJvdGVjdGVkIGRvdWJsZSBpNDIgPSBJNDJfRURFRkFVTFQ7DQorDQorCS8qKg0KKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0STQzKCkgPGVtPkk0MzwvZW0+fScgYXR0cmlidXRlLiA8IS0tDQorCSAqIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogDQorCSAqIEBzZWUgI2dldEk0MygpDQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgZG91YmxlIEk0M19FREVGQVVMVCA9IDAuMDsNCisNCisJLyoqDQorCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldEk0MygpIDxlbT5JNDM8L2VtPn0nIGF0dHJpYnV0ZS4gPCEtLQ0KKwkgKiBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIA0KKwkgKiBAc2VlICNnZXRJNDMoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqIEBvcmRlcmVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgZG91YmxlIGk0MyA9IEk0M19FREVGQVVMVDsNCisNCisJLyoqDQorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRSKCkgPGVtPlI8L2VtPn0nIGF0dHJpYnV0ZS4gPCEtLQ0KKwkgKiBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIA0KKwkgKiBAc2VlICNnZXRSKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBkb3VibGUgUl9FREVGQVVMVCA9IDAuMDsNCisNCisJLyoqDQorCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldFIoKSA8ZW0+UjwvZW0+fScgYXR0cmlidXRlLiA8IS0tDQorCSAqIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogDQorCSAqIEBzZWUgI2dldFIoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqIEBvcmRlcmVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgZG91YmxlIHIgPSBSX0VERUZBVUxUOw0KKw0KKwkvKioNCisJICogVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldEluY2lkZW5jZTEoKSA8ZW0+SW5jaWRlbmNlMTwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHNlZSAjZ2V0SW5jaWRlbmNlMSgpDQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgZG91YmxlIElOQ0lERU5DRTFfRURFRkFVTFQgPSAwLjA7DQorDQorCS8qKg0KKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRJbmNpZGVuY2UxKCkgPGVtPkluY2lkZW5jZTE8L2VtPn0nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBzZWUgI2dldEluY2lkZW5jZTEoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqIEBvcmRlcmVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgZG91YmxlIGluY2lkZW5jZTEgPSBJTkNJREVOQ0UxX0VERUZBVUxUOw0KKw0KKwkvKioNCisJICogVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldEluY2lkZW5jZTIoKSA8ZW0+SW5jaWRlbmNlMjwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHNlZSAjZ2V0SW5jaWRlbmNlMigpDQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgZG91YmxlIElOQ0lERU5DRTJfRURFRkFVTFQgPSAwLjA7DQorDQorCS8qKg0KKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRJbmNpZGVuY2UyKCkgPGVtPkluY2lkZW5jZTI8L2VtPn0nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBzZWUgI2dldEluY2lkZW5jZTIoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqIEBvcmRlcmVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgZG91YmxlIGluY2lkZW5jZTIgPSBJTkNJREVOQ0UyX0VERUZBVUxUOw0KKw0KKwkvKioNCisJICogVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldEluY2lkZW5jZTMoKSA8ZW0+SW5jaWRlbmNlMzwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHNlZSAjZ2V0SW5jaWRlbmNlMygpDQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgZG91YmxlIElOQ0lERU5DRTNfRURFRkFVTFQgPSAwLjA7DQorDQorCS8qKg0KKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRJbmNpZGVuY2UzKCkgPGVtPkluY2lkZW5jZTM8L2VtPn0nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBzZWUgI2dldEluY2lkZW5jZTMoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqIEBvcmRlcmVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgZG91YmxlIGluY2lkZW5jZTMgPSBJTkNJREVOQ0UzX0VERUZBVUxUOw0KKw0KKwkvKioNCisJICogVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldEluY2lkZW5jZTQoKSA8ZW0+SW5jaWRlbmNlNDwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHNlZSAjZ2V0SW5jaWRlbmNlNCgpDQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgZG91YmxlIElOQ0lERU5DRTRfRURFRkFVTFQgPSAwLjA7DQorDQorCS8qKg0KKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRJbmNpZGVuY2U0KCkgPGVtPkluY2lkZW5jZTQ8L2VtPn0nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBzZWUgI2dldEluY2lkZW5jZTQoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqIEBvcmRlcmVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgZG91YmxlIGluY2lkZW5jZTQgPSBJTkNJREVOQ0U0X0VERUZBVUxUOw0KKw0KKwkvKioNCisJICogVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldEluY2lkZW5jZTEyKCkgPGVtPkluY2lkZW5jZTEyPC9lbT59JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAc2VlICNnZXRJbmNpZGVuY2UxMigpDQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgZG91YmxlIElOQ0lERU5DRTEyX0VERUZBVUxUID0gMC4wOw0KKw0KKwkvKioNCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0SW5jaWRlbmNlMTIoKSA8ZW0+SW5jaWRlbmNlMTI8L2VtPn0nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBzZWUgI2dldEluY2lkZW5jZTEyKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJcHJvdGVjdGVkIGRvdWJsZSBpbmNpZGVuY2UxMiA9IElOQ0lERU5DRTEyX0VERUZBVUxUOw0KKw0KKwkvKioNCisJICogVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldEluY2lkZW5jZTIxKCkgPGVtPkluY2lkZW5jZTIxPC9lbT59JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAc2VlICNnZXRJbmNpZGVuY2UyMSgpDQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgZG91YmxlIElOQ0lERU5DRTIxX0VERUZBVUxUID0gMC4wOw0KKw0KKwkvKioNCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0SW5jaWRlbmNlMjEoKSA8ZW0+SW5jaWRlbmNlMjE8L2VtPn0nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBzZWUgI2dldEluY2lkZW5jZTIxKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJcHJvdGVjdGVkIGRvdWJsZSBpbmNpZGVuY2UyMSA9IElOQ0lERU5DRTIxX0VERUZBVUxUOw0KKw0KKwkvKioNCisJICogVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldEluY2lkZW5jZTMxKCkgPGVtPkluY2lkZW5jZTMxPC9lbT59JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAc2VlICNnZXRJbmNpZGVuY2UzMSgpDQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgZG91YmxlIElOQ0lERU5DRTMxX0VERUZBVUxUID0gMC4wOw0KKw0KKwkvKioNCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0SW5jaWRlbmNlMzEoKSA8ZW0+SW5jaWRlbmNlMzE8L2VtPn0nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBzZWUgI2dldEluY2lkZW5jZTMxKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJcHJvdGVjdGVkIGRvdWJsZSBpbmNpZGVuY2UzMSA9IElOQ0lERU5DRTMxX0VERUZBVUxUOw0KKw0KKwkvKioNCisJICogVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldEluY2lkZW5jZTQxKCkgPGVtPkluY2lkZW5jZTQxPC9lbT59JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAc2VlICNnZXRJbmNpZGVuY2U0MSgpDQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgZG91YmxlIElOQ0lERU5DRTQxX0VERUZBVUxUID0gMC4wOw0KKw0KKwkvKioNCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0SW5jaWRlbmNlNDEoKSA8ZW0+SW5jaWRlbmNlNDE8L2VtPn0nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBzZWUgI2dldEluY2lkZW5jZTQxKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJcHJvdGVjdGVkIGRvdWJsZSBpbmNpZGVuY2U0MSA9IElOQ0lERU5DRTQxX0VERUZBVUxUOw0KKw0KKwkvKioNCisJICogVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldEluY2lkZW5jZTEzKCkgPGVtPkluY2lkZW5jZTEzPC9lbT59JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAc2VlICNnZXRJbmNpZGVuY2UxMygpDQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgZG91YmxlIElOQ0lERU5DRTEzX0VERUZBVUxUID0gMC4wOw0KKw0KKwkvKioNCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0SW5jaWRlbmNlMTMoKSA8ZW0+SW5jaWRlbmNlMTM8L2VtPn0nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBzZWUgI2dldEluY2lkZW5jZTEzKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJcHJvdGVjdGVkIGRvdWJsZSBpbmNpZGVuY2UxMyA9IElOQ0lERU5DRTEzX0VERUZBVUxUOw0KKw0KKwkvKioNCisJICogVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldEluY2lkZW5jZTIzKCkgPGVtPkluY2lkZW5jZTIzPC9lbT59JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAc2VlICNnZXRJbmNpZGVuY2UyMygpDQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgZG91YmxlIElOQ0lERU5DRTIzX0VERUZBVUxUID0gMC4wOw0KKw0KKwkvKioNCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0SW5jaWRlbmNlMjMoKSA8ZW0+SW5jaWRlbmNlMjM8L2VtPn0nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBzZWUgI2dldEluY2lkZW5jZTIzKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJcHJvdGVjdGVkIGRvdWJsZSBpbmNpZGVuY2UyMyA9IElOQ0lERU5DRTIzX0VERUZBVUxUOw0KKw0KKwkvKioNCisJICogVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldEluY2lkZW5jZTMyKCkgPGVtPkluY2lkZW5jZTMyPC9lbT59JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAc2VlICNnZXRJbmNpZGVuY2UzMigpDQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgZG91YmxlIElOQ0lERU5DRTMyX0VERUZBVUxUID0gMC4wOw0KKw0KKwkvKioNCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0SW5jaWRlbmNlMzIoKSA8ZW0+SW5jaWRlbmNlMzI8L2VtPn0nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBzZWUgI2dldEluY2lkZW5jZTMyKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJcHJvdGVjdGVkIGRvdWJsZSBpbmNpZGVuY2UzMiA9IElOQ0lERU5DRTMyX0VERUZBVUxUOw0KKw0KKwkvKioNCisJICogVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldEluY2lkZW5jZTQyKCkgPGVtPkluY2lkZW5jZTQyPC9lbT59JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAc2VlICNnZXRJbmNpZGVuY2U0MigpDQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgZG91YmxlIElOQ0lERU5DRTQyX0VERUZBVUxUID0gMC4wOw0KKw0KKwkvKioNCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0SW5jaWRlbmNlNDIoKSA8ZW0+SW5jaWRlbmNlNDI8L2VtPn0nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBzZWUgI2dldEluY2lkZW5jZTQyKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJcHJvdGVjdGVkIGRvdWJsZSBpbmNpZGVuY2U0MiA9IElOQ0lERU5DRTQyX0VERUZBVUxUOw0KKw0KKwkvKioNCisJICogVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldEluY2lkZW5jZTE0KCkgPGVtPkluY2lkZW5jZTE0PC9lbT59JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAc2VlICNnZXRJbmNpZGVuY2UxNCgpDQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgZG91YmxlIElOQ0lERU5DRTE0X0VERUZBVUxUID0gMC4wOw0KKw0KKwkvKioNCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0SW5jaWRlbmNlMTQoKSA8ZW0+SW5jaWRlbmNlMTQ8L2VtPn0nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBzZWUgI2dldEluY2lkZW5jZTE0KCkNCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJcHJvdGVjdGVkIGRvdWJsZSBpbmNpZGVuY2UxNCA9IElOQ0lERU5DRTE0X0VERUZBVUxUOw0KKw0KKwkvKioNCisJICogVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldEluY2lkZW5jZTI0KCkgPGVtPkluY2lkZW5jZTI0PC9lbT59JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAc2VlICNnZXRJbmNpZGVuY2UyNCgpDQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgZG91YmxlIElOQ0lERU5DRTI0X0VERUZBVUxUID0gMC4wOw0KKw0KKwkvKioNCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0SW5jaWRlbmNlMjQoKSA8ZW0+SW5jaWRlbmNlMjQ8L2VtPn0nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBzZWUgI2dldEluY2lkZW5jZTI0KCkNCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJcHJvdGVjdGVkIGRvdWJsZSBpbmNpZGVuY2UyNCA9IElOQ0lERU5DRTI0X0VERUZBVUxUOw0KKw0KKwkvKioNCisJICogVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldEluY2lkZW5jZTM0KCkgPGVtPkluY2lkZW5jZTM0PC9lbT59JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAc2VlICNnZXRJbmNpZGVuY2UzNCgpDQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgZG91YmxlIElOQ0lERU5DRTM0X0VERUZBVUxUID0gMC4wOw0KKw0KKwkvKioNCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0SW5jaWRlbmNlMzQoKSA8ZW0+SW5jaWRlbmNlMzQ8L2VtPn0nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBzZWUgI2dldEluY2lkZW5jZTM0KCkNCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJcHJvdGVjdGVkIGRvdWJsZSBpbmNpZGVuY2UzNCA9IElOQ0lERU5DRTM0X0VERUZBVUxUOw0KKw0KKwkvKioNCisJICogVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldEluY2lkZW5jZTQzKCkgPGVtPkluY2lkZW5jZTQzPC9lbT59JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAc2VlICNnZXRJbmNpZGVuY2U0MygpDQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgZG91YmxlIElOQ0lERU5DRTQzX0VERUZBVUxUID0gMC4wOw0KKw0KKwkvKioNCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0SW5jaWRlbmNlNDMoKSA8ZW0+SW5jaWRlbmNlNDM8L2VtPn0nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBzZWUgI2dldEluY2lkZW5jZTQzKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJcHJvdGVjdGVkIGRvdWJsZSBpbmNpZGVuY2U0MyA9IElOQ0lERU5DRTQzX0VERUZBVUxUOw0KKw0KKwkvKioNCisJICogVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldERpc2Vhc2VEZWF0aHMxKCkgPGVtPkRpc2Vhc2UgRGVhdGhzMTwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tDQorCSAqIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHNlZSAjZ2V0RGlzZWFzZURlYXRoczEoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqIEBvcmRlcmVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIGRvdWJsZSBESVNFQVNFX0RFQVRIUzFfRURFRkFVTFQgPSAwLjA7DQorDQorCS8qKg0KKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXREaXNlYXNlRGVhdGhzMSgpIDxlbT5EaXNlYXNlIERlYXRoczE8L2VtPn0nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLQ0KKwkgKiBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBzZWUgI2dldERpc2Vhc2VEZWF0aHMxKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJcHJvdGVjdGVkIGRvdWJsZSBkaXNlYXNlRGVhdGhzMSA9IERJU0VBU0VfREVBVEhTMV9FREVGQVVMVDsNCisNCisJLyoqDQorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXREaXNlYXNlRGVhdGhzMigpIDxlbT5EaXNlYXNlIERlYXRoczI8L2VtPn0nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLQ0KKwkgKiBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBzZWUgI2dldERpc2Vhc2VEZWF0aHMyKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBkb3VibGUgRElTRUFTRV9ERUFUSFMyX0VERUZBVUxUID0gMC4wOw0KKw0KKwkvKioNCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0RGlzZWFzZURlYXRoczIoKSA8ZW0+RGlzZWFzZSBEZWF0aHMyPC9lbT59JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0NCisJICogZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAc2VlICNnZXREaXNlYXNlRGVhdGhzMigpDQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCXByb3RlY3RlZCBkb3VibGUgZGlzZWFzZURlYXRoczIgPSBESVNFQVNFX0RFQVRIUzJfRURFRkFVTFQ7DQorDQorCS8qKg0KKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0RGlzZWFzZURlYXRoczMoKSA8ZW0+RGlzZWFzZSBEZWF0aHMzPC9lbT59JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0NCisJICogZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAc2VlICNnZXREaXNlYXNlRGVhdGhzMygpDQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgZG91YmxlIERJU0VBU0VfREVBVEhTM19FREVGQVVMVCA9IDAuMDsNCisNCisJLyoqDQorCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldERpc2Vhc2VEZWF0aHMzKCkgPGVtPkRpc2Vhc2UgRGVhdGhzMzwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tDQorCSAqIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHNlZSAjZ2V0RGlzZWFzZURlYXRoczMoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqIEBvcmRlcmVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgZG91YmxlIGRpc2Vhc2VEZWF0aHMzID0gRElTRUFTRV9ERUFUSFMzX0VERUZBVUxUOw0KKw0KKwkvKioNCisJICogVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldERpc2Vhc2VEZWF0aHM0KCkgPGVtPkRpc2Vhc2UgRGVhdGhzNDwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tDQorCSAqIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHNlZSAjZ2V0RGlzZWFzZURlYXRoczQoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqIEBvcmRlcmVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIGRvdWJsZSBESVNFQVNFX0RFQVRIUzRfRURFRkFVTFQgPSAwLjA7DQorDQorCS8qKg0KKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXREaXNlYXNlRGVhdGhzNCgpIDxlbT5EaXNlYXNlIERlYXRoczQ8L2VtPn0nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLQ0KKwkgKiBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBzZWUgI2dldERpc2Vhc2VEZWF0aHM0KCkNCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJcHJvdGVjdGVkIGRvdWJsZSBkaXNlYXNlRGVhdGhzNCA9IERJU0VBU0VfREVBVEhTNF9FREVGQVVMVDsNCisNCisJLyoqDQorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXREaXNlYXNlRGVhdGhzMTIoKSA8ZW0+RGlzZWFzZSBEZWF0aHMxMjwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tDQorCSAqIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHNlZSAjZ2V0RGlzZWFzZURlYXRoczEyKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBkb3VibGUgRElTRUFTRV9ERUFUSFMxMl9FREVGQVVMVCA9IDAuMDsNCisNCisJLyoqDQorCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldERpc2Vhc2VEZWF0aHMxMigpIDxlbT5EaXNlYXNlIERlYXRoczEyPC9lbT59JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0NCisJICogZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAc2VlICNnZXREaXNlYXNlRGVhdGhzMTIoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqIEBvcmRlcmVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgZG91YmxlIGRpc2Vhc2VEZWF0aHMxMiA9IERJU0VBU0VfREVBVEhTMTJfRURFRkFVTFQ7DQorDQorCS8qKg0KKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0RGlzZWFzZURlYXRoczIxKCkgPGVtPkRpc2Vhc2UgRGVhdGhzMjE8L2VtPn0nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLQ0KKwkgKiBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBzZWUgI2dldERpc2Vhc2VEZWF0aHMyMSgpDQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgZG91YmxlIERJU0VBU0VfREVBVEhTMjFfRURFRkFVTFQgPSAwLjA7DQorDQorCS8qKg0KKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXREaXNlYXNlRGVhdGhzMjEoKSA8ZW0+RGlzZWFzZSBEZWF0aHMyMTwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tDQorCSAqIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHNlZSAjZ2V0RGlzZWFzZURlYXRoczIxKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJcHJvdGVjdGVkIGRvdWJsZSBkaXNlYXNlRGVhdGhzMjEgPSBESVNFQVNFX0RFQVRIUzIxX0VERUZBVUxUOw0KKw0KKwkvKioNCisJICogVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldERpc2Vhc2VEZWF0aHMzMSgpIDxlbT5EaXNlYXNlIERlYXRoczMxPC9lbT59JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0NCisJICogZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAc2VlICNnZXREaXNlYXNlRGVhdGhzMzEoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqIEBvcmRlcmVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIGRvdWJsZSBESVNFQVNFX0RFQVRIUzMxX0VERUZBVUxUID0gMC4wOw0KKw0KKwkvKioNCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0RGlzZWFzZURlYXRoczMxKCkgPGVtPkRpc2Vhc2UgRGVhdGhzMzE8L2VtPn0nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLQ0KKwkgKiBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBzZWUgI2dldERpc2Vhc2VEZWF0aHMzMSgpDQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCXByb3RlY3RlZCBkb3VibGUgZGlzZWFzZURlYXRoczMxID0gRElTRUFTRV9ERUFUSFMzMV9FREVGQVVMVDsNCisNCisJLyoqDQorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXREaXNlYXNlRGVhdGhzNDEoKSA8ZW0+RGlzZWFzZSBEZWF0aHM0MTwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tDQorCSAqIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHNlZSAjZ2V0RGlzZWFzZURlYXRoczQxKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBkb3VibGUgRElTRUFTRV9ERUFUSFM0MV9FREVGQVVMVCA9IDAuMDsNCisNCisJLyoqDQorCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldERpc2Vhc2VEZWF0aHM0MSgpIDxlbT5EaXNlYXNlIERlYXRoczQxPC9lbT59JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0NCisJICogZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAc2VlICNnZXREaXNlYXNlRGVhdGhzNDEoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqIEBvcmRlcmVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgZG91YmxlIGRpc2Vhc2VEZWF0aHM0MSA9IERJU0VBU0VfREVBVEhTNDFfRURFRkFVTFQ7DQorDQorCS8qKg0KKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0RGlzZWFzZURlYXRoczEzKCkgPGVtPkRpc2Vhc2UgRGVhdGhzMTM8L2VtPn0nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLQ0KKwkgKiBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBzZWUgI2dldERpc2Vhc2VEZWF0aHMxMygpDQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgZG91YmxlIERJU0VBU0VfREVBVEhTMTNfRURFRkFVTFQgPSAwLjA7DQorDQorCS8qKg0KKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXREaXNlYXNlRGVhdGhzMTMoKSA8ZW0+RGlzZWFzZSBEZWF0aHMxMzwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tDQorCSAqIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHNlZSAjZ2V0RGlzZWFzZURlYXRoczEzKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJcHJvdGVjdGVkIGRvdWJsZSBkaXNlYXNlRGVhdGhzMTMgPSBESVNFQVNFX0RFQVRIUzEzX0VERUZBVUxUOw0KKw0KKwkvKioNCisJICogVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldERpc2Vhc2VEZWF0aHMyMygpIDxlbT5EaXNlYXNlIERlYXRoczIzPC9lbT59JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0NCisJICogZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAc2VlICNnZXREaXNlYXNlRGVhdGhzMjMoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqIEBvcmRlcmVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIGRvdWJsZSBESVNFQVNFX0RFQVRIUzIzX0VERUZBVUxUID0gMC4wOw0KKw0KKwkvKioNCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0RGlzZWFzZURlYXRoczIzKCkgPGVtPkRpc2Vhc2UgRGVhdGhzMjM8L2VtPn0nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLQ0KKwkgKiBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBzZWUgI2dldERpc2Vhc2VEZWF0aHMyMygpDQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCXByb3RlY3RlZCBkb3VibGUgZGlzZWFzZURlYXRoczIzID0gRElTRUFTRV9ERUFUSFMyM19FREVGQVVMVDsNCisNCisJLyoqDQorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXREaXNlYXNlRGVhdGhzMzIoKSA8ZW0+RGlzZWFzZSBEZWF0aHMzMjwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tDQorCSAqIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHNlZSAjZ2V0RGlzZWFzZURlYXRoczMyKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBkb3VibGUgRElTRUFTRV9ERUFUSFMzMl9FREVGQVVMVCA9IDAuMDsNCisNCisJLyoqDQorCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldERpc2Vhc2VEZWF0aHMzMigpIDxlbT5EaXNlYXNlIERlYXRoczMyPC9lbT59JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0NCisJICogZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAc2VlICNnZXREaXNlYXNlRGVhdGhzMzIoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqIEBvcmRlcmVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgZG91YmxlIGRpc2Vhc2VEZWF0aHMzMiA9IERJU0VBU0VfREVBVEhTMzJfRURFRkFVTFQ7DQorDQorCS8qKg0KKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0RGlzZWFzZURlYXRoczQyKCkgPGVtPkRpc2Vhc2UgRGVhdGhzNDI8L2VtPn0nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLQ0KKwkgKiBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBzZWUgI2dldERpc2Vhc2VEZWF0aHM0MigpDQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgZG91YmxlIERJU0VBU0VfREVBVEhTNDJfRURFRkFVTFQgPSAwLjA7DQorDQorCS8qKg0KKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXREaXNlYXNlRGVhdGhzNDIoKSA8ZW0+RGlzZWFzZSBEZWF0aHM0MjwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tDQorCSAqIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHNlZSAjZ2V0RGlzZWFzZURlYXRoczQyKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJcHJvdGVjdGVkIGRvdWJsZSBkaXNlYXNlRGVhdGhzNDIgPSBESVNFQVNFX0RFQVRIUzQyX0VERUZBVUxUOw0KKw0KKwkvKioNCisJICogVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldERpc2Vhc2VEZWF0aHMxNCgpIDxlbT5EaXNlYXNlIERlYXRoczE0PC9lbT59JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0NCisJICogZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAc2VlICNnZXREaXNlYXNlRGVhdGhzMTQoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqIEBvcmRlcmVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIGRvdWJsZSBESVNFQVNFX0RFQVRIUzE0X0VERUZBVUxUID0gMC4wOw0KKw0KKwkvKioNCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0RGlzZWFzZURlYXRoczE0KCkgPGVtPkRpc2Vhc2UgRGVhdGhzMTQ8L2VtPn0nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLQ0KKwkgKiBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBzZWUgI2dldERpc2Vhc2VEZWF0aHMxNCgpDQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCXByb3RlY3RlZCBkb3VibGUgZGlzZWFzZURlYXRoczE0ID0gRElTRUFTRV9ERUFUSFMxNF9FREVGQVVMVDsNCisNCisJLyoqDQorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXREaXNlYXNlRGVhdGhzMjQoKSA8ZW0+RGlzZWFzZSBEZWF0aHMyNDwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tDQorCSAqIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHNlZSAjZ2V0RGlzZWFzZURlYXRoczI0KCkNCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBkb3VibGUgRElTRUFTRV9ERUFUSFMyNF9FREVGQVVMVCA9IDAuMDsNCisNCisJLyoqDQorCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldERpc2Vhc2VEZWF0aHMyNCgpIDxlbT5EaXNlYXNlIERlYXRoczI0PC9lbT59JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0NCisJICogZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAc2VlICNnZXREaXNlYXNlRGVhdGhzMjQoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqIEBvcmRlcmVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgZG91YmxlIGRpc2Vhc2VEZWF0aHMyNCA9IERJU0VBU0VfREVBVEhTMjRfRURFRkFVTFQ7DQorDQorCS8qKg0KKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0RGlzZWFzZURlYXRoczM0KCkgPGVtPkRpc2Vhc2UgRGVhdGhzMzQ8L2VtPn0nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLQ0KKwkgKiBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBzZWUgI2dldERpc2Vhc2VEZWF0aHMzNCgpDQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgZG91YmxlIERJU0VBU0VfREVBVEhTMzRfRURFRkFVTFQgPSAwLjA7DQorDQorCS8qKg0KKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXREaXNlYXNlRGVhdGhzMzQoKSA8ZW0+RGlzZWFzZSBEZWF0aHMzNDwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tDQorCSAqIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHNlZSAjZ2V0RGlzZWFzZURlYXRoczM0KCkNCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJcHJvdGVjdGVkIGRvdWJsZSBkaXNlYXNlRGVhdGhzMzQgPSBESVNFQVNFX0RFQVRIUzM0X0VERUZBVUxUOw0KKw0KKwkvKioNCisJICogVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldERpc2Vhc2VEZWF0aHM0MygpIDxlbT5EaXNlYXNlIERlYXRoczQzPC9lbT59JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0NCisJICogZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAc2VlICNnZXREaXNlYXNlRGVhdGhzNDMoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqIEBvcmRlcmVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIGRvdWJsZSBESVNFQVNFX0RFQVRIUzQzX0VERUZBVUxUID0gMC4wOw0KKw0KKwkvKioNCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0RGlzZWFzZURlYXRoczQzKCkgPGVtPkRpc2Vhc2UgRGVhdGhzNDM8L2VtPn0nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLQ0KKwkgKiBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBzZWUgI2dldERpc2Vhc2VEZWF0aHM0MygpDQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCXByb3RlY3RlZCBkb3VibGUgZGlzZWFzZURlYXRoczQzID0gRElTRUFTRV9ERUFUSFM0M19FREVGQVVMVDsNCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZUltcGwoKSB7DQorCQlzdXBlcigpOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJQE92ZXJyaWRlDQorCXByb3RlY3RlZCBFQ2xhc3MgZVN0YXRpY0NsYXNzKCkgew0KKwkJcmV0dXJuIFZlY3RvclBhY2thZ2UuTGl0ZXJhbHMuREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUU7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgZG91YmxlIGdldEUxKCkgew0KKwkJcmV0dXJuIGUxOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIHZvaWQgc2V0RTEoZG91YmxlIG5ld0UxKSB7DQorCQlkb3VibGUgb2xkRTEgPSBlMTsNCisJCWUxID0gbmV3RTE7DQorCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpDQorCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fRTEsIG9sZEUxLCBlMSkpOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIGRvdWJsZSBnZXRFMigpIHsNCisJCXJldHVybiBlMjsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyB2b2lkIHNldEUyKGRvdWJsZSBuZXdFMikgew0KKwkJZG91YmxlIG9sZEUyID0gZTI7DQorCQllMiA9IG5ld0UyOw0KKwkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQ0KKwkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0UyLCBvbGRFMiwgZTIpKTsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBkb3VibGUgZ2V0RTMoKSB7DQorCQlyZXR1cm4gZTM7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgdm9pZCBzZXRFMyhkb3VibGUgbmV3RTMpIHsNCisJCWRvdWJsZSBvbGRFMyA9IGUzOw0KKwkJZTMgPSBuZXdFMzsNCisJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkNCisJCQllTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19FMywgb2xkRTMsIGUzKSk7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgZG91YmxlIGdldEU0KCkgew0KKwkJcmV0dXJuIGU0Ow0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIHZvaWQgc2V0RTQoZG91YmxlIG5ld0U0KSB7DQorCQlkb3VibGUgb2xkRTQgPSBlNDsNCisJCWU0ID0gbmV3RTQ7DQorCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpDQorCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fRTQsIG9sZEU0LCBlNCkpOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIGRvdWJsZSBnZXRJMSgpIHsNCisJCXJldHVybiBpMTsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyB2b2lkIHNldEkxKGRvdWJsZSBuZXdJMSkgew0KKwkJZG91YmxlIG9sZEkxID0gaTE7DQorCQlpMSA9IG5ld0kxOw0KKwkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQ0KKwkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0kxLCBvbGRJMSwgaTEpKTsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBkb3VibGUgZ2V0STIoKSB7DQorCQlyZXR1cm4gaTI7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgdm9pZCBzZXRJMihkb3VibGUgbmV3STIpIHsNCisJCWRvdWJsZSBvbGRJMiA9IGkyOw0KKwkJaTIgPSBuZXdJMjsNCisJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkNCisJCQllTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19JMiwgb2xkSTIsIGkyKSk7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgZG91YmxlIGdldEkzKCkgew0KKwkJcmV0dXJuIGkzOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIHZvaWQgc2V0STMoZG91YmxlIG5ld0kzKSB7DQorCQlkb3VibGUgb2xkSTMgPSBpMzsNCisJCWkzID0gbmV3STM7DQorCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpDQorCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fSTMsIG9sZEkzLCBpMykpOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIGRvdWJsZSBnZXRJNCgpIHsNCisJCXJldHVybiBpNDsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyB2b2lkIHNldEk0KGRvdWJsZSBuZXdJNCkgew0KKwkJZG91YmxlIG9sZEk0ID0gaTQ7DQorCQlpNCA9IG5ld0k0Ow0KKwkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQ0KKwkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0k0LCBvbGRJNCwgaTQpKTsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBkb3VibGUgZ2V0VDEoKSB7DQorCQlyZXR1cm4gdDE7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgdm9pZCBzZXRUMShkb3VibGUgbmV3VDEpIHsNCisJCWRvdWJsZSBvbGRUMSA9IHQxOw0KKwkJdDEgPSBuZXdUMTsNCisJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkNCisJCQllTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19UMSwgb2xkVDEsIHQxKSk7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgZG91YmxlIGdldFQyKCkgew0KKwkJcmV0dXJuIHQyOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIHZvaWQgc2V0VDIoZG91YmxlIG5ld1QyKSB7DQorCQlkb3VibGUgb2xkVDIgPSB0MjsNCisJCXQyID0gbmV3VDI7DQorCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpDQorCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fVDIsIG9sZFQyLCB0MikpOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIGRvdWJsZSBnZXRUMygpIHsNCisJCXJldHVybiB0MzsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyB2b2lkIHNldFQzKGRvdWJsZSBuZXdUMykgew0KKwkJZG91YmxlIG9sZFQzID0gdDM7DQorCQl0MyA9IG5ld1QzOw0KKwkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQ0KKwkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX1QzLCBvbGRUMywgdDMpKTsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBkb3VibGUgZ2V0VDQoKSB7DQorCQlyZXR1cm4gdDQ7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgdm9pZCBzZXRUNChkb3VibGUgbmV3VDQpIHsNCisJCWRvdWJsZSBvbGRUNCA9IHQ0Ow0KKwkJdDQgPSBuZXdUNDsNCisJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkNCisJCQllTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19UNCwgb2xkVDQsIHQ0KSk7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgZG91YmxlIGdldFIxKCkgew0KKwkJcmV0dXJuIHIxOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIHZvaWQgc2V0UjEoZG91YmxlIG5ld1IxKSB7DQorCQlkb3VibGUgb2xkUjEgPSByMTsNCisJCXIxID0gbmV3UjE7DQorCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpDQorCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fUjEsIG9sZFIxLCByMSkpOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIGRvdWJsZSBnZXRSMigpIHsNCisJCXJldHVybiByMjsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyB2b2lkIHNldFIyKGRvdWJsZSBuZXdSMikgew0KKwkJZG91YmxlIG9sZFIyID0gcjI7DQorCQlyMiA9IG5ld1IyOw0KKwkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQ0KKwkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX1IyLCBvbGRSMiwgcjIpKTsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBkb3VibGUgZ2V0UjMoKSB7DQorCQlyZXR1cm4gcjM7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgdm9pZCBzZXRSMyhkb3VibGUgbmV3UjMpIHsNCisJCWRvdWJsZSBvbGRSMyA9IHIzOw0KKwkJcjMgPSBuZXdSMzsNCisJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkNCisJCQllTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19SMywgb2xkUjMsIHIzKSk7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgZG91YmxlIGdldFI0KCkgew0KKwkJcmV0dXJuIHI0Ow0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIHZvaWQgc2V0UjQoZG91YmxlIG5ld1I0KSB7DQorCQlkb3VibGUgb2xkUjQgPSByNDsNCisJCXI0ID0gbmV3UjQ7DQorCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpDQorCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fUjQsIG9sZFI0LCByNCkpOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIGRvdWJsZSBnZXRFMTIoKSB7DQorCQlyZXR1cm4gZTEyOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIHZvaWQgc2V0RTEyKGRvdWJsZSBuZXdFMTIpIHsNCisJCWRvdWJsZSBvbGRFMTIgPSBlMTI7DQorCQllMTIgPSBuZXdFMTI7DQorCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpDQorCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fRTEyLCBvbGRFMTIsIGUxMikpOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIGRvdWJsZSBnZXRFMTMoKSB7DQorCQlyZXR1cm4gZTEzOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIHZvaWQgc2V0RTEzKGRvdWJsZSBuZXdFMTMpIHsNCisJCWRvdWJsZSBvbGRFMTMgPSBlMTM7DQorCQllMTMgPSBuZXdFMTM7DQorCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpDQorCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fRTEzLCBvbGRFMTMsIGUxMykpOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIGRvdWJsZSBnZXRFMTQoKSB7DQorCQlyZXR1cm4gZTE0Ow0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIHZvaWQgc2V0RTE0KGRvdWJsZSBuZXdFMTQpIHsNCisJCWRvdWJsZSBvbGRFMTQgPSBlMTQ7DQorCQllMTQgPSBuZXdFMTQ7DQorCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpDQorCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fRTE0LCBvbGRFMTQsIGUxNCkpOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIGRvdWJsZSBnZXRFMjEoKSB7DQorCQlyZXR1cm4gZTIxOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIHZvaWQgc2V0RTIxKGRvdWJsZSBuZXdFMjEpIHsNCisJCWRvdWJsZSBvbGRFMjEgPSBlMjE7DQorCQllMjEgPSBuZXdFMjE7DQorCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpDQorCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fRTIxLCBvbGRFMjEsIGUyMSkpOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIGRvdWJsZSBnZXRFMjMoKSB7DQorCQlyZXR1cm4gZTIzOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIHZvaWQgc2V0RTIzKGRvdWJsZSBuZXdFMjMpIHsNCisJCWRvdWJsZSBvbGRFMjMgPSBlMjM7DQorCQllMjMgPSBuZXdFMjM7DQorCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpDQorCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fRTIzLCBvbGRFMjMsIGUyMykpOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIGRvdWJsZSBnZXRFMjQoKSB7DQorCQlyZXR1cm4gZTI0Ow0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIHZvaWQgc2V0RTI0KGRvdWJsZSBuZXdFMjQpIHsNCisJCWRvdWJsZSBvbGRFMjQgPSBlMjQ7DQorCQllMjQgPSBuZXdFMjQ7DQorCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpDQorCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fRTI0LCBvbGRFMjQsIGUyNCkpOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIGRvdWJsZSBnZXRFMzEoKSB7DQorCQlyZXR1cm4gZTMxOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIHZvaWQgc2V0RTMxKGRvdWJsZSBuZXdFMzEpIHsNCisJCWRvdWJsZSBvbGRFMzEgPSBlMzE7DQorCQllMzEgPSBuZXdFMzE7DQorCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpDQorCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fRTMxLCBvbGRFMzEsIGUzMSkpOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIGRvdWJsZSBnZXRFMzIoKSB7DQorCQlyZXR1cm4gZTMyOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIHZvaWQgc2V0RTMyKGRvdWJsZSBuZXdFMzIpIHsNCisJCWRvdWJsZSBvbGRFMzIgPSBlMzI7DQorCQllMzIgPSBuZXdFMzI7DQorCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpDQorCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fRTMyLCBvbGRFMzIsIGUzMikpOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIGRvdWJsZSBnZXRFMzQoKSB7DQorCQlyZXR1cm4gZTM0Ow0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIHZvaWQgc2V0RTM0KGRvdWJsZSBuZXdFMzQpIHsNCisJCWRvdWJsZSBvbGRFMzQgPSBlMzQ7DQorCQllMzQgPSBuZXdFMzQ7DQorCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpDQorCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fRTM0LCBvbGRFMzQsIGUzNCkpOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIGRvdWJsZSBnZXRFNDEoKSB7DQorCQlyZXR1cm4gZTQxOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIHZvaWQgc2V0RTQxKGRvdWJsZSBuZXdFNDEpIHsNCisJCWRvdWJsZSBvbGRFNDEgPSBlNDE7DQorCQllNDEgPSBuZXdFNDE7DQorCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpDQorCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fRTQxLCBvbGRFNDEsIGU0MSkpOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIGRvdWJsZSBnZXRFNDIoKSB7DQorCQlyZXR1cm4gZTQyOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIHZvaWQgc2V0RTQyKGRvdWJsZSBuZXdFNDIpIHsNCisJCWRvdWJsZSBvbGRFNDIgPSBlNDI7DQorCQllNDIgPSBuZXdFNDI7DQorCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpDQorCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fRTQyLCBvbGRFNDIsIGU0MikpOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIGRvdWJsZSBnZXRFNDMoKSB7DQorCQlyZXR1cm4gZTQzOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIHZvaWQgc2V0RTQzKGRvdWJsZSBuZXdFNDMpIHsNCisJCWRvdWJsZSBvbGRFNDMgPSBlNDM7DQorCQllNDMgPSBuZXdFNDM7DQorCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpDQorCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fRTQzLCBvbGRFNDMsIGU0MykpOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIGRvdWJsZSBnZXRJMTIoKSB7DQorCQlyZXR1cm4gaTEyOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIHZvaWQgc2V0STEyKGRvdWJsZSBuZXdJMTIpIHsNCisJCWRvdWJsZSBvbGRJMTIgPSBpMTI7DQorCQlpMTIgPSBuZXdJMTI7DQorCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpDQorCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fSTEyLCBvbGRJMTIsIGkxMikpOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIGRvdWJsZSBnZXRJMTMoKSB7DQorCQlyZXR1cm4gaTEzOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIHZvaWQgc2V0STEzKGRvdWJsZSBuZXdJMTMpIHsNCisJCWRvdWJsZSBvbGRJMTMgPSBpMTM7DQorCQlpMTMgPSBuZXdJMTM7DQorCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpDQorCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fSTEzLCBvbGRJMTMsIGkxMykpOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIGRvdWJsZSBnZXRJMTQoKSB7DQorCQlyZXR1cm4gaTE0Ow0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIHZvaWQgc2V0STE0KGRvdWJsZSBuZXdJMTQpIHsNCisJCWRvdWJsZSBvbGRJMTQgPSBpMTQ7DQorCQlpMTQgPSBuZXdJMTQ7DQorCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpDQorCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fSTE0LCBvbGRJMTQsIGkxNCkpOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIGRvdWJsZSBnZXRJMjEoKSB7DQorCQlyZXR1cm4gaTIxOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIHZvaWQgc2V0STIxKGRvdWJsZSBuZXdJMjEpIHsNCisJCWRvdWJsZSBvbGRJMjEgPSBpMjE7DQorCQlpMjEgPSBuZXdJMjE7DQorCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpDQorCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fSTIxLCBvbGRJMjEsIGkyMSkpOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIGRvdWJsZSBnZXRJMjMoKSB7DQorCQlyZXR1cm4gaTIzOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIHZvaWQgc2V0STIzKGRvdWJsZSBuZXdJMjMpIHsNCisJCWRvdWJsZSBvbGRJMjMgPSBpMjM7DQorCQlpMjMgPSBuZXdJMjM7DQorCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpDQorCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fSTIzLCBvbGRJMjMsIGkyMykpOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIGRvdWJsZSBnZXRJMjQoKSB7DQorCQlyZXR1cm4gaTI0Ow0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIHZvaWQgc2V0STI0KGRvdWJsZSBuZXdJMjQpIHsNCisJCWRvdWJsZSBvbGRJMjQgPSBpMjQ7DQorCQlpMjQgPSBuZXdJMjQ7DQorCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpDQorCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fSTI0LCBvbGRJMjQsIGkyNCkpOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIGRvdWJsZSBnZXRJMzEoKSB7DQorCQlyZXR1cm4gaTMxOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIHZvaWQgc2V0STMxKGRvdWJsZSBuZXdJMzEpIHsNCisJCWRvdWJsZSBvbGRJMzEgPSBpMzE7DQorCQlpMzEgPSBuZXdJMzE7DQorCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpDQorCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fSTMxLCBvbGRJMzEsIGkzMSkpOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIGRvdWJsZSBnZXRJMzIoKSB7DQorCQlyZXR1cm4gaTMyOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIHZvaWQgc2V0STMyKGRvdWJsZSBuZXdJMzIpIHsNCisJCWRvdWJsZSBvbGRJMzIgPSBpMzI7DQorCQlpMzIgPSBuZXdJMzI7DQorCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpDQorCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fSTMyLCBvbGRJMzIsIGkzMikpOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIGRvdWJsZSBnZXRJMzQoKSB7DQorCQlyZXR1cm4gaTM0Ow0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIHZvaWQgc2V0STM0KGRvdWJsZSBuZXdJMzQpIHsNCisJCWRvdWJsZSBvbGRJMzQgPSBpMzQ7DQorCQlpMzQgPSBuZXdJMzQ7DQorCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpDQorCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fSTM0LCBvbGRJMzQsIGkzNCkpOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIGRvdWJsZSBnZXRJNDEoKSB7DQorCQlyZXR1cm4gaTQxOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIHZvaWQgc2V0STQxKGRvdWJsZSBuZXdJNDEpIHsNCisJCWRvdWJsZSBvbGRJNDEgPSBpNDE7DQorCQlpNDEgPSBuZXdJNDE7DQorCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpDQorCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fSTQxLCBvbGRJNDEsIGk0MSkpOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIGRvdWJsZSBnZXRJNDIoKSB7DQorCQlyZXR1cm4gaTQyOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIHZvaWQgc2V0STQyKGRvdWJsZSBuZXdJNDIpIHsNCisJCWRvdWJsZSBvbGRJNDIgPSBpNDI7DQorCQlpNDIgPSBuZXdJNDI7DQorCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpDQorCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fSTQyLCBvbGRJNDIsIGk0MikpOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIGRvdWJsZSBnZXRJNDMoKSB7DQorCQlyZXR1cm4gaTQzOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIHZvaWQgc2V0STQzKGRvdWJsZSBuZXdJNDMpIHsNCisJCWRvdWJsZSBvbGRJNDMgPSBpNDM7DQorCQlpNDMgPSBuZXdJNDM7DQorCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpDQorCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fSTQzLCBvbGRJNDMsIGk0MykpOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIGRvdWJsZSBnZXRSKCkgew0KKwkJcmV0dXJuIHI7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgdm9pZCBzZXRSKGRvdWJsZSBuZXdSKSB7DQorCQlkb3VibGUgb2xkUiA9IHI7DQorCQlyID0gbmV3UjsNCisJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkNCisJCQllTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19SLCBvbGRSLCByKSk7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgZG91YmxlIGdldEluY2lkZW5jZTEoKSB7DQorCQlyZXR1cm4gaW5jaWRlbmNlMTsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyB2b2lkIHNldEluY2lkZW5jZTEoZG91YmxlIG5ld0luY2lkZW5jZTEpIHsNCisJCWRvdWJsZSBvbGRJbmNpZGVuY2UxID0gaW5jaWRlbmNlMTsNCisJCWluY2lkZW5jZTEgPSBuZXdJbmNpZGVuY2UxOw0KKwkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQ0KKwkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0lOQ0lERU5DRTEsIG9sZEluY2lkZW5jZTEsIGluY2lkZW5jZTEpKTsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBkb3VibGUgZ2V0SW5jaWRlbmNlMigpIHsNCisJCXJldHVybiBpbmNpZGVuY2UyOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIHZvaWQgc2V0SW5jaWRlbmNlMihkb3VibGUgbmV3SW5jaWRlbmNlMikgew0KKwkJZG91YmxlIG9sZEluY2lkZW5jZTIgPSBpbmNpZGVuY2UyOw0KKwkJaW5jaWRlbmNlMiA9IG5ld0luY2lkZW5jZTI7DQorCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpDQorCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fSU5DSURFTkNFMiwgb2xkSW5jaWRlbmNlMiwgaW5jaWRlbmNlMikpOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIGRvdWJsZSBnZXRJbmNpZGVuY2UzKCkgew0KKwkJcmV0dXJuIGluY2lkZW5jZTM7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgdm9pZCBzZXRJbmNpZGVuY2UzKGRvdWJsZSBuZXdJbmNpZGVuY2UzKSB7DQorCQlkb3VibGUgb2xkSW5jaWRlbmNlMyA9IGluY2lkZW5jZTM7DQorCQlpbmNpZGVuY2UzID0gbmV3SW5jaWRlbmNlMzsNCisJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkNCisJCQllTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19JTkNJREVOQ0UzLCBvbGRJbmNpZGVuY2UzLCBpbmNpZGVuY2UzKSk7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgZG91YmxlIGdldEluY2lkZW5jZTQoKSB7DQorCQlyZXR1cm4gaW5jaWRlbmNlNDsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyB2b2lkIHNldEluY2lkZW5jZTQoZG91YmxlIG5ld0luY2lkZW5jZTQpIHsNCisJCWRvdWJsZSBvbGRJbmNpZGVuY2U0ID0gaW5jaWRlbmNlNDsNCisJCWluY2lkZW5jZTQgPSBuZXdJbmNpZGVuY2U0Ow0KKwkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQ0KKwkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0lOQ0lERU5DRTQsIG9sZEluY2lkZW5jZTQsIGluY2lkZW5jZTQpKTsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBkb3VibGUgZ2V0SW5jaWRlbmNlMTIoKSB7DQorCQlyZXR1cm4gaW5jaWRlbmNlMTI7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgdm9pZCBzZXRJbmNpZGVuY2UxMihkb3VibGUgbmV3SW5jaWRlbmNlMTIpIHsNCisJCWRvdWJsZSBvbGRJbmNpZGVuY2UxMiA9IGluY2lkZW5jZTEyOw0KKwkJaW5jaWRlbmNlMTIgPSBuZXdJbmNpZGVuY2UxMjsNCisJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkNCisJCQllTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19JTkNJREVOQ0UxMiwgb2xkSW5jaWRlbmNlMTIsIGluY2lkZW5jZTEyKSk7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgZG91YmxlIGdldEluY2lkZW5jZTIxKCkgew0KKwkJcmV0dXJuIGluY2lkZW5jZTIxOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIHZvaWQgc2V0SW5jaWRlbmNlMjEoZG91YmxlIG5ld0luY2lkZW5jZTIxKSB7DQorCQlkb3VibGUgb2xkSW5jaWRlbmNlMjEgPSBpbmNpZGVuY2UyMTsNCisJCWluY2lkZW5jZTIxID0gbmV3SW5jaWRlbmNlMjE7DQorCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpDQorCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fSU5DSURFTkNFMjEsIG9sZEluY2lkZW5jZTIxLCBpbmNpZGVuY2UyMSkpOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIGRvdWJsZSBnZXRJbmNpZGVuY2UzMSgpIHsNCisJCXJldHVybiBpbmNpZGVuY2UzMTsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyB2b2lkIHNldEluY2lkZW5jZTMxKGRvdWJsZSBuZXdJbmNpZGVuY2UzMSkgew0KKwkJZG91YmxlIG9sZEluY2lkZW5jZTMxID0gaW5jaWRlbmNlMzE7DQorCQlpbmNpZGVuY2UzMSA9IG5ld0luY2lkZW5jZTMxOw0KKwkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQ0KKwkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0lOQ0lERU5DRTMxLCBvbGRJbmNpZGVuY2UzMSwgaW5jaWRlbmNlMzEpKTsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBkb3VibGUgZ2V0SW5jaWRlbmNlNDEoKSB7DQorCQlyZXR1cm4gaW5jaWRlbmNlNDE7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgdm9pZCBzZXRJbmNpZGVuY2U0MShkb3VibGUgbmV3SW5jaWRlbmNlNDEpIHsNCisJCWRvdWJsZSBvbGRJbmNpZGVuY2U0MSA9IGluY2lkZW5jZTQxOw0KKwkJaW5jaWRlbmNlNDEgPSBuZXdJbmNpZGVuY2U0MTsNCisJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkNCisJCQllTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19JTkNJREVOQ0U0MSwgb2xkSW5jaWRlbmNlNDEsIGluY2lkZW5jZTQxKSk7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgZG91YmxlIGdldEluY2lkZW5jZTEzKCkgew0KKwkJcmV0dXJuIGluY2lkZW5jZTEzOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIHZvaWQgc2V0SW5jaWRlbmNlMTMoZG91YmxlIG5ld0luY2lkZW5jZTEzKSB7DQorCQlkb3VibGUgb2xkSW5jaWRlbmNlMTMgPSBpbmNpZGVuY2UxMzsNCisJCWluY2lkZW5jZTEzID0gbmV3SW5jaWRlbmNlMTM7DQorCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpDQorCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fSU5DSURFTkNFMTMsIG9sZEluY2lkZW5jZTEzLCBpbmNpZGVuY2UxMykpOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIGRvdWJsZSBnZXRJbmNpZGVuY2UyMygpIHsNCisJCXJldHVybiBpbmNpZGVuY2UyMzsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyB2b2lkIHNldEluY2lkZW5jZTIzKGRvdWJsZSBuZXdJbmNpZGVuY2UyMykgew0KKwkJZG91YmxlIG9sZEluY2lkZW5jZTIzID0gaW5jaWRlbmNlMjM7DQorCQlpbmNpZGVuY2UyMyA9IG5ld0luY2lkZW5jZTIzOw0KKwkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQ0KKwkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0lOQ0lERU5DRTIzLCBvbGRJbmNpZGVuY2UyMywgaW5jaWRlbmNlMjMpKTsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBkb3VibGUgZ2V0SW5jaWRlbmNlMzIoKSB7DQorCQlyZXR1cm4gaW5jaWRlbmNlMzI7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgdm9pZCBzZXRJbmNpZGVuY2UzMihkb3VibGUgbmV3SW5jaWRlbmNlMzIpIHsNCisJCWRvdWJsZSBvbGRJbmNpZGVuY2UzMiA9IGluY2lkZW5jZTMyOw0KKwkJaW5jaWRlbmNlMzIgPSBuZXdJbmNpZGVuY2UzMjsNCisJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkNCisJCQllTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19JTkNJREVOQ0UzMiwgb2xkSW5jaWRlbmNlMzIsIGluY2lkZW5jZTMyKSk7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgZG91YmxlIGdldEluY2lkZW5jZTQyKCkgew0KKwkJcmV0dXJuIGluY2lkZW5jZTQyOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIHZvaWQgc2V0SW5jaWRlbmNlNDIoZG91YmxlIG5ld0luY2lkZW5jZTQyKSB7DQorCQlkb3VibGUgb2xkSW5jaWRlbmNlNDIgPSBpbmNpZGVuY2U0MjsNCisJCWluY2lkZW5jZTQyID0gbmV3SW5jaWRlbmNlNDI7DQorCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpDQorCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fSU5DSURFTkNFNDIsIG9sZEluY2lkZW5jZTQyLCBpbmNpZGVuY2U0MikpOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIGRvdWJsZSBnZXRJbmNpZGVuY2UxNCgpIHsNCisJCXJldHVybiBpbmNpZGVuY2UxNDsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyB2b2lkIHNldEluY2lkZW5jZTE0KGRvdWJsZSBuZXdJbmNpZGVuY2UxNCkgew0KKwkJZG91YmxlIG9sZEluY2lkZW5jZTE0ID0gaW5jaWRlbmNlMTQ7DQorCQlpbmNpZGVuY2UxNCA9IG5ld0luY2lkZW5jZTE0Ow0KKwkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQ0KKwkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0lOQ0lERU5DRTE0LCBvbGRJbmNpZGVuY2UxNCwgaW5jaWRlbmNlMTQpKTsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBkb3VibGUgZ2V0SW5jaWRlbmNlMjQoKSB7DQorCQlyZXR1cm4gaW5jaWRlbmNlMjQ7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgdm9pZCBzZXRJbmNpZGVuY2UyNChkb3VibGUgbmV3SW5jaWRlbmNlMjQpIHsNCisJCWRvdWJsZSBvbGRJbmNpZGVuY2UyNCA9IGluY2lkZW5jZTI0Ow0KKwkJaW5jaWRlbmNlMjQgPSBuZXdJbmNpZGVuY2UyNDsNCisJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkNCisJCQllTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19JTkNJREVOQ0UyNCwgb2xkSW5jaWRlbmNlMjQsIGluY2lkZW5jZTI0KSk7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgZG91YmxlIGdldEluY2lkZW5jZTM0KCkgew0KKwkJcmV0dXJuIGluY2lkZW5jZTM0Ow0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIHZvaWQgc2V0SW5jaWRlbmNlMzQoZG91YmxlIG5ld0luY2lkZW5jZTM0KSB7DQorCQlkb3VibGUgb2xkSW5jaWRlbmNlMzQgPSBpbmNpZGVuY2UzNDsNCisJCWluY2lkZW5jZTM0ID0gbmV3SW5jaWRlbmNlMzQ7DQorCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpDQorCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fSU5DSURFTkNFMzQsIG9sZEluY2lkZW5jZTM0LCBpbmNpZGVuY2UzNCkpOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIGRvdWJsZSBnZXRJbmNpZGVuY2U0MygpIHsNCisJCXJldHVybiBpbmNpZGVuY2U0MzsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyB2b2lkIHNldEluY2lkZW5jZTQzKGRvdWJsZSBuZXdJbmNpZGVuY2U0Mykgew0KKwkJZG91YmxlIG9sZEluY2lkZW5jZTQzID0gaW5jaWRlbmNlNDM7DQorCQlpbmNpZGVuY2U0MyA9IG5ld0luY2lkZW5jZTQzOw0KKwkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQ0KKwkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0lOQ0lERU5DRTQzLCBvbGRJbmNpZGVuY2U0MywgaW5jaWRlbmNlNDMpKTsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBkb3VibGUgZ2V0RGlzZWFzZURlYXRoczEoKSB7DQorCQlyZXR1cm4gZGlzZWFzZURlYXRoczE7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgdm9pZCBzZXREaXNlYXNlRGVhdGhzMShkb3VibGUgbmV3RGlzZWFzZURlYXRoczEpIHsNCisJCWRvdWJsZSBvbGREaXNlYXNlRGVhdGhzMSA9IGRpc2Vhc2VEZWF0aHMxOw0KKwkJZGlzZWFzZURlYXRoczEgPSBuZXdEaXNlYXNlRGVhdGhzMTsNCisJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkNCisJCQllTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19ESVNFQVNFX0RFQVRIUzEsIG9sZERpc2Vhc2VEZWF0aHMxLCBkaXNlYXNlRGVhdGhzMSkpOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIGRvdWJsZSBnZXREaXNlYXNlRGVhdGhzMigpIHsNCisJCXJldHVybiBkaXNlYXNlRGVhdGhzMjsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyB2b2lkIHNldERpc2Vhc2VEZWF0aHMyKGRvdWJsZSBuZXdEaXNlYXNlRGVhdGhzMikgew0KKwkJZG91YmxlIG9sZERpc2Vhc2VEZWF0aHMyID0gZGlzZWFzZURlYXRoczI7DQorCQlkaXNlYXNlRGVhdGhzMiA9IG5ld0Rpc2Vhc2VEZWF0aHMyOw0KKwkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQ0KKwkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0RJU0VBU0VfREVBVEhTMiwgb2xkRGlzZWFzZURlYXRoczIsIGRpc2Vhc2VEZWF0aHMyKSk7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgZG91YmxlIGdldERpc2Vhc2VEZWF0aHMzKCkgew0KKwkJcmV0dXJuIGRpc2Vhc2VEZWF0aHMzOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIHZvaWQgc2V0RGlzZWFzZURlYXRoczMoZG91YmxlIG5ld0Rpc2Vhc2VEZWF0aHMzKSB7DQorCQlkb3VibGUgb2xkRGlzZWFzZURlYXRoczMgPSBkaXNlYXNlRGVhdGhzMzsNCisJCWRpc2Vhc2VEZWF0aHMzID0gbmV3RGlzZWFzZURlYXRoczM7DQorCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpDQorCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fRElTRUFTRV9ERUFUSFMzLCBvbGREaXNlYXNlRGVhdGhzMywgZGlzZWFzZURlYXRoczMpKTsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBkb3VibGUgZ2V0RGlzZWFzZURlYXRoczQoKSB7DQorCQlyZXR1cm4gZGlzZWFzZURlYXRoczQ7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgdm9pZCBzZXREaXNlYXNlRGVhdGhzNChkb3VibGUgbmV3RGlzZWFzZURlYXRoczQpIHsNCisJCWRvdWJsZSBvbGREaXNlYXNlRGVhdGhzNCA9IGRpc2Vhc2VEZWF0aHM0Ow0KKwkJZGlzZWFzZURlYXRoczQgPSBuZXdEaXNlYXNlRGVhdGhzNDsNCisJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkNCisJCQllTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19ESVNFQVNFX0RFQVRIUzQsIG9sZERpc2Vhc2VEZWF0aHM0LCBkaXNlYXNlRGVhdGhzNCkpOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIGRvdWJsZSBnZXREaXNlYXNlRGVhdGhzMTIoKSB7DQorCQlyZXR1cm4gZGlzZWFzZURlYXRoczEyOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIHZvaWQgc2V0RGlzZWFzZURlYXRoczEyKGRvdWJsZSBuZXdEaXNlYXNlRGVhdGhzMTIpIHsNCisJCWRvdWJsZSBvbGREaXNlYXNlRGVhdGhzMTIgPSBkaXNlYXNlRGVhdGhzMTI7DQorCQlkaXNlYXNlRGVhdGhzMTIgPSBuZXdEaXNlYXNlRGVhdGhzMTI7DQorCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpDQorCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fRElTRUFTRV9ERUFUSFMxMiwgb2xkRGlzZWFzZURlYXRoczEyLCBkaXNlYXNlRGVhdGhzMTIpKTsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBkb3VibGUgZ2V0RGlzZWFzZURlYXRoczIxKCkgew0KKwkJcmV0dXJuIGRpc2Vhc2VEZWF0aHMyMTsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyB2b2lkIHNldERpc2Vhc2VEZWF0aHMyMShkb3VibGUgbmV3RGlzZWFzZURlYXRoczIxKSB7DQorCQlkb3VibGUgb2xkRGlzZWFzZURlYXRoczIxID0gZGlzZWFzZURlYXRoczIxOw0KKwkJZGlzZWFzZURlYXRoczIxID0gbmV3RGlzZWFzZURlYXRoczIxOw0KKwkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQ0KKwkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0RJU0VBU0VfREVBVEhTMjEsIG9sZERpc2Vhc2VEZWF0aHMyMSwgZGlzZWFzZURlYXRoczIxKSk7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgZG91YmxlIGdldERpc2Vhc2VEZWF0aHMzMSgpIHsNCisJCXJldHVybiBkaXNlYXNlRGVhdGhzMzE7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgdm9pZCBzZXREaXNlYXNlRGVhdGhzMzEoZG91YmxlIG5ld0Rpc2Vhc2VEZWF0aHMzMSkgew0KKwkJZG91YmxlIG9sZERpc2Vhc2VEZWF0aHMzMSA9IGRpc2Vhc2VEZWF0aHMzMTsNCisJCWRpc2Vhc2VEZWF0aHMzMSA9IG5ld0Rpc2Vhc2VEZWF0aHMzMTsNCisJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkNCisJCQllTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19ESVNFQVNFX0RFQVRIUzMxLCBvbGREaXNlYXNlRGVhdGhzMzEsIGRpc2Vhc2VEZWF0aHMzMSkpOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIGRvdWJsZSBnZXREaXNlYXNlRGVhdGhzNDEoKSB7DQorCQlyZXR1cm4gZGlzZWFzZURlYXRoczQxOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIHZvaWQgc2V0RGlzZWFzZURlYXRoczQxKGRvdWJsZSBuZXdEaXNlYXNlRGVhdGhzNDEpIHsNCisJCWRvdWJsZSBvbGREaXNlYXNlRGVhdGhzNDEgPSBkaXNlYXNlRGVhdGhzNDE7DQorCQlkaXNlYXNlRGVhdGhzNDEgPSBuZXdEaXNlYXNlRGVhdGhzNDE7DQorCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpDQorCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fRElTRUFTRV9ERUFUSFM0MSwgb2xkRGlzZWFzZURlYXRoczQxLCBkaXNlYXNlRGVhdGhzNDEpKTsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBkb3VibGUgZ2V0RGlzZWFzZURlYXRoczEzKCkgew0KKwkJcmV0dXJuIGRpc2Vhc2VEZWF0aHMxMzsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyB2b2lkIHNldERpc2Vhc2VEZWF0aHMxMyhkb3VibGUgbmV3RGlzZWFzZURlYXRoczEzKSB7DQorCQlkb3VibGUgb2xkRGlzZWFzZURlYXRoczEzID0gZGlzZWFzZURlYXRoczEzOw0KKwkJZGlzZWFzZURlYXRoczEzID0gbmV3RGlzZWFzZURlYXRoczEzOw0KKwkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQ0KKwkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0RJU0VBU0VfREVBVEhTMTMsIG9sZERpc2Vhc2VEZWF0aHMxMywgZGlzZWFzZURlYXRoczEzKSk7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgZG91YmxlIGdldERpc2Vhc2VEZWF0aHMyMygpIHsNCisJCXJldHVybiBkaXNlYXNlRGVhdGhzMjM7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgdm9pZCBzZXREaXNlYXNlRGVhdGhzMjMoZG91YmxlIG5ld0Rpc2Vhc2VEZWF0aHMyMykgew0KKwkJZG91YmxlIG9sZERpc2Vhc2VEZWF0aHMyMyA9IGRpc2Vhc2VEZWF0aHMyMzsNCisJCWRpc2Vhc2VEZWF0aHMyMyA9IG5ld0Rpc2Vhc2VEZWF0aHMyMzsNCisJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkNCisJCQllTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19ESVNFQVNFX0RFQVRIUzIzLCBvbGREaXNlYXNlRGVhdGhzMjMsIGRpc2Vhc2VEZWF0aHMyMykpOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIGRvdWJsZSBnZXREaXNlYXNlRGVhdGhzMzIoKSB7DQorCQlyZXR1cm4gZGlzZWFzZURlYXRoczMyOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIHZvaWQgc2V0RGlzZWFzZURlYXRoczMyKGRvdWJsZSBuZXdEaXNlYXNlRGVhdGhzMzIpIHsNCisJCWRvdWJsZSBvbGREaXNlYXNlRGVhdGhzMzIgPSBkaXNlYXNlRGVhdGhzMzI7DQorCQlkaXNlYXNlRGVhdGhzMzIgPSBuZXdEaXNlYXNlRGVhdGhzMzI7DQorCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpDQorCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fRElTRUFTRV9ERUFUSFMzMiwgb2xkRGlzZWFzZURlYXRoczMyLCBkaXNlYXNlRGVhdGhzMzIpKTsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBkb3VibGUgZ2V0RGlzZWFzZURlYXRoczQyKCkgew0KKwkJcmV0dXJuIGRpc2Vhc2VEZWF0aHM0MjsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyB2b2lkIHNldERpc2Vhc2VEZWF0aHM0Mihkb3VibGUgbmV3RGlzZWFzZURlYXRoczQyKSB7DQorCQlkb3VibGUgb2xkRGlzZWFzZURlYXRoczQyID0gZGlzZWFzZURlYXRoczQyOw0KKwkJZGlzZWFzZURlYXRoczQyID0gbmV3RGlzZWFzZURlYXRoczQyOw0KKwkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQ0KKwkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0RJU0VBU0VfREVBVEhTNDIsIG9sZERpc2Vhc2VEZWF0aHM0MiwgZGlzZWFzZURlYXRoczQyKSk7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgZG91YmxlIGdldERpc2Vhc2VEZWF0aHMxNCgpIHsNCisJCXJldHVybiBkaXNlYXNlRGVhdGhzMTQ7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgdm9pZCBzZXREaXNlYXNlRGVhdGhzMTQoZG91YmxlIG5ld0Rpc2Vhc2VEZWF0aHMxNCkgew0KKwkJZG91YmxlIG9sZERpc2Vhc2VEZWF0aHMxNCA9IGRpc2Vhc2VEZWF0aHMxNDsNCisJCWRpc2Vhc2VEZWF0aHMxNCA9IG5ld0Rpc2Vhc2VEZWF0aHMxNDsNCisJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkNCisJCQllTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19ESVNFQVNFX0RFQVRIUzE0LCBvbGREaXNlYXNlRGVhdGhzMTQsIGRpc2Vhc2VEZWF0aHMxNCkpOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIGRvdWJsZSBnZXREaXNlYXNlRGVhdGhzMjQoKSB7DQorCQlyZXR1cm4gZGlzZWFzZURlYXRoczI0Ow0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIHZvaWQgc2V0RGlzZWFzZURlYXRoczI0KGRvdWJsZSBuZXdEaXNlYXNlRGVhdGhzMjQpIHsNCisJCWRvdWJsZSBvbGREaXNlYXNlRGVhdGhzMjQgPSBkaXNlYXNlRGVhdGhzMjQ7DQorCQlkaXNlYXNlRGVhdGhzMjQgPSBuZXdEaXNlYXNlRGVhdGhzMjQ7DQorCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpDQorCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fRElTRUFTRV9ERUFUSFMyNCwgb2xkRGlzZWFzZURlYXRoczI0LCBkaXNlYXNlRGVhdGhzMjQpKTsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBkb3VibGUgZ2V0RGlzZWFzZURlYXRoczM0KCkgew0KKwkJcmV0dXJuIGRpc2Vhc2VEZWF0aHMzNDsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyB2b2lkIHNldERpc2Vhc2VEZWF0aHMzNChkb3VibGUgbmV3RGlzZWFzZURlYXRoczM0KSB7DQorCQlkb3VibGUgb2xkRGlzZWFzZURlYXRoczM0ID0gZGlzZWFzZURlYXRoczM0Ow0KKwkJZGlzZWFzZURlYXRoczM0ID0gbmV3RGlzZWFzZURlYXRoczM0Ow0KKwkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQ0KKwkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0RJU0VBU0VfREVBVEhTMzQsIG9sZERpc2Vhc2VEZWF0aHMzNCwgZGlzZWFzZURlYXRoczM0KSk7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgZG91YmxlIGdldERpc2Vhc2VEZWF0aHM0MygpIHsNCisJCXJldHVybiBkaXNlYXNlRGVhdGhzNDM7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgdm9pZCBzZXREaXNlYXNlRGVhdGhzNDMoZG91YmxlIG5ld0Rpc2Vhc2VEZWF0aHM0Mykgew0KKwkJZG91YmxlIG9sZERpc2Vhc2VEZWF0aHM0MyA9IGRpc2Vhc2VEZWF0aHM0MzsNCisJCWRpc2Vhc2VEZWF0aHM0MyA9IG5ld0Rpc2Vhc2VEZWF0aHM0MzsNCisJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkNCisJCQllTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19ESVNFQVNFX0RFQVRIUzQzLCBvbGREaXNlYXNlRGVhdGhzNDMsIGRpc2Vhc2VEZWF0aHM0MykpOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJQE92ZXJyaWRlDQorCXB1YmxpYyBPYmplY3QgZUdldChpbnQgZmVhdHVyZUlELCBib29sZWFuIHJlc29sdmUsIGJvb2xlYW4gY29yZVR5cGUpIHsNCisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19FMToNCisJCQkJcmV0dXJuIGdldEUxKCk7DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19FMjoNCisJCQkJcmV0dXJuIGdldEUyKCk7DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19FMzoNCisJCQkJcmV0dXJuIGdldEUzKCk7DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19FNDoNCisJCQkJcmV0dXJuIGdldEU0KCk7DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19JMToNCisJCQkJcmV0dXJuIGdldEkxKCk7DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19JMjoNCisJCQkJcmV0dXJuIGdldEkyKCk7DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19JMzoNCisJCQkJcmV0dXJuIGdldEkzKCk7DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19JNDoNCisJCQkJcmV0dXJuIGdldEk0KCk7DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19UMToNCisJCQkJcmV0dXJuIGdldFQxKCk7DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19UMjoNCisJCQkJcmV0dXJuIGdldFQyKCk7DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19UMzoNCisJCQkJcmV0dXJuIGdldFQzKCk7DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19UNDoNCisJCQkJcmV0dXJuIGdldFQ0KCk7DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19SMToNCisJCQkJcmV0dXJuIGdldFIxKCk7DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19SMjoNCisJCQkJcmV0dXJuIGdldFIyKCk7DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19SMzoNCisJCQkJcmV0dXJuIGdldFIzKCk7DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19SNDoNCisJCQkJcmV0dXJuIGdldFI0KCk7DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19FMTI6DQorCQkJCXJldHVybiBnZXRFMTIoKTsNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0UxMzoNCisJCQkJcmV0dXJuIGdldEUxMygpOw0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fRTE0Og0KKwkJCQlyZXR1cm4gZ2V0RTE0KCk7DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19FMjE6DQorCQkJCXJldHVybiBnZXRFMjEoKTsNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0UyMzoNCisJCQkJcmV0dXJuIGdldEUyMygpOw0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fRTI0Og0KKwkJCQlyZXR1cm4gZ2V0RTI0KCk7DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19FMzE6DQorCQkJCXJldHVybiBnZXRFMzEoKTsNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0UzMjoNCisJCQkJcmV0dXJuIGdldEUzMigpOw0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fRTM0Og0KKwkJCQlyZXR1cm4gZ2V0RTM0KCk7DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19FNDE6DQorCQkJCXJldHVybiBnZXRFNDEoKTsNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0U0MjoNCisJCQkJcmV0dXJuIGdldEU0MigpOw0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fRTQzOg0KKwkJCQlyZXR1cm4gZ2V0RTQzKCk7DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19JMTI6DQorCQkJCXJldHVybiBnZXRJMTIoKTsNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0kxMzoNCisJCQkJcmV0dXJuIGdldEkxMygpOw0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fSTE0Og0KKwkJCQlyZXR1cm4gZ2V0STE0KCk7DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19JMjE6DQorCQkJCXJldHVybiBnZXRJMjEoKTsNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0kyMzoNCisJCQkJcmV0dXJuIGdldEkyMygpOw0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fSTI0Og0KKwkJCQlyZXR1cm4gZ2V0STI0KCk7DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19JMzE6DQorCQkJCXJldHVybiBnZXRJMzEoKTsNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0kzMjoNCisJCQkJcmV0dXJuIGdldEkzMigpOw0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fSTM0Og0KKwkJCQlyZXR1cm4gZ2V0STM0KCk7DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19JNDE6DQorCQkJCXJldHVybiBnZXRJNDEoKTsNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0k0MjoNCisJCQkJcmV0dXJuIGdldEk0MigpOw0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fSTQzOg0KKwkJCQlyZXR1cm4gZ2V0STQzKCk7DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19SOg0KKwkJCQlyZXR1cm4gZ2V0UigpOw0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fSU5DSURFTkNFMToNCisJCQkJcmV0dXJuIGdldEluY2lkZW5jZTEoKTsNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0lOQ0lERU5DRTI6DQorCQkJCXJldHVybiBnZXRJbmNpZGVuY2UyKCk7DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19JTkNJREVOQ0UzOg0KKwkJCQlyZXR1cm4gZ2V0SW5jaWRlbmNlMygpOw0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fSU5DSURFTkNFNDoNCisJCQkJcmV0dXJuIGdldEluY2lkZW5jZTQoKTsNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0lOQ0lERU5DRTEyOg0KKwkJCQlyZXR1cm4gZ2V0SW5jaWRlbmNlMTIoKTsNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0lOQ0lERU5DRTIxOg0KKwkJCQlyZXR1cm4gZ2V0SW5jaWRlbmNlMjEoKTsNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0lOQ0lERU5DRTMxOg0KKwkJCQlyZXR1cm4gZ2V0SW5jaWRlbmNlMzEoKTsNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0lOQ0lERU5DRTQxOg0KKwkJCQlyZXR1cm4gZ2V0SW5jaWRlbmNlNDEoKTsNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0lOQ0lERU5DRTEzOg0KKwkJCQlyZXR1cm4gZ2V0SW5jaWRlbmNlMTMoKTsNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0lOQ0lERU5DRTIzOg0KKwkJCQlyZXR1cm4gZ2V0SW5jaWRlbmNlMjMoKTsNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0lOQ0lERU5DRTMyOg0KKwkJCQlyZXR1cm4gZ2V0SW5jaWRlbmNlMzIoKTsNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0lOQ0lERU5DRTQyOg0KKwkJCQlyZXR1cm4gZ2V0SW5jaWRlbmNlNDIoKTsNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0lOQ0lERU5DRTE0Og0KKwkJCQlyZXR1cm4gZ2V0SW5jaWRlbmNlMTQoKTsNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0lOQ0lERU5DRTI0Og0KKwkJCQlyZXR1cm4gZ2V0SW5jaWRlbmNlMjQoKTsNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0lOQ0lERU5DRTM0Og0KKwkJCQlyZXR1cm4gZ2V0SW5jaWRlbmNlMzQoKTsNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0lOQ0lERU5DRTQzOg0KKwkJCQlyZXR1cm4gZ2V0SW5jaWRlbmNlNDMoKTsNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0RJU0VBU0VfREVBVEhTMToNCisJCQkJcmV0dXJuIGdldERpc2Vhc2VEZWF0aHMxKCk7DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19ESVNFQVNFX0RFQVRIUzI6DQorCQkJCXJldHVybiBnZXREaXNlYXNlRGVhdGhzMigpOw0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fRElTRUFTRV9ERUFUSFMzOg0KKwkJCQlyZXR1cm4gZ2V0RGlzZWFzZURlYXRoczMoKTsNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0RJU0VBU0VfREVBVEhTNDoNCisJCQkJcmV0dXJuIGdldERpc2Vhc2VEZWF0aHM0KCk7DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19ESVNFQVNFX0RFQVRIUzEyOg0KKwkJCQlyZXR1cm4gZ2V0RGlzZWFzZURlYXRoczEyKCk7DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19ESVNFQVNFX0RFQVRIUzIxOg0KKwkJCQlyZXR1cm4gZ2V0RGlzZWFzZURlYXRoczIxKCk7DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19ESVNFQVNFX0RFQVRIUzMxOg0KKwkJCQlyZXR1cm4gZ2V0RGlzZWFzZURlYXRoczMxKCk7DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19ESVNFQVNFX0RFQVRIUzQxOg0KKwkJCQlyZXR1cm4gZ2V0RGlzZWFzZURlYXRoczQxKCk7DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19ESVNFQVNFX0RFQVRIUzEzOg0KKwkJCQlyZXR1cm4gZ2V0RGlzZWFzZURlYXRoczEzKCk7DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19ESVNFQVNFX0RFQVRIUzIzOg0KKwkJCQlyZXR1cm4gZ2V0RGlzZWFzZURlYXRoczIzKCk7DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19ESVNFQVNFX0RFQVRIUzMyOg0KKwkJCQlyZXR1cm4gZ2V0RGlzZWFzZURlYXRoczMyKCk7DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19ESVNFQVNFX0RFQVRIUzQyOg0KKwkJCQlyZXR1cm4gZ2V0RGlzZWFzZURlYXRoczQyKCk7DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19ESVNFQVNFX0RFQVRIUzE0Og0KKwkJCQlyZXR1cm4gZ2V0RGlzZWFzZURlYXRoczE0KCk7DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19ESVNFQVNFX0RFQVRIUzI0Og0KKwkJCQlyZXR1cm4gZ2V0RGlzZWFzZURlYXRoczI0KCk7DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19ESVNFQVNFX0RFQVRIUzM0Og0KKwkJCQlyZXR1cm4gZ2V0RGlzZWFzZURlYXRoczM0KCk7DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19ESVNFQVNFX0RFQVRIUzQzOg0KKwkJCQlyZXR1cm4gZ2V0RGlzZWFzZURlYXRoczQzKCk7DQorCQl9DQorCQlyZXR1cm4gc3VwZXIuZUdldChmZWF0dXJlSUQsIHJlc29sdmUsIGNvcmVUeXBlKTsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCUBPdmVycmlkZQ0KKwlwdWJsaWMgdm9pZCBlU2V0KGludCBmZWF0dXJlSUQsIE9iamVjdCBuZXdWYWx1ZSkgew0KKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0UxOg0KKwkJCQlzZXRFMSgoRG91YmxlKW5ld1ZhbHVlKTsNCisJCQkJcmV0dXJuOw0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fRTI6DQorCQkJCXNldEUyKChEb3VibGUpbmV3VmFsdWUpOw0KKwkJCQlyZXR1cm47DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19FMzoNCisJCQkJc2V0RTMoKERvdWJsZSluZXdWYWx1ZSk7DQorCQkJCXJldHVybjsNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0U0Og0KKwkJCQlzZXRFNCgoRG91YmxlKW5ld1ZhbHVlKTsNCisJCQkJcmV0dXJuOw0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fSTE6DQorCQkJCXNldEkxKChEb3VibGUpbmV3VmFsdWUpOw0KKwkJCQlyZXR1cm47DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19JMjoNCisJCQkJc2V0STIoKERvdWJsZSluZXdWYWx1ZSk7DQorCQkJCXJldHVybjsNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0kzOg0KKwkJCQlzZXRJMygoRG91YmxlKW5ld1ZhbHVlKTsNCisJCQkJcmV0dXJuOw0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fSTQ6DQorCQkJCXNldEk0KChEb3VibGUpbmV3VmFsdWUpOw0KKwkJCQlyZXR1cm47DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19UMToNCisJCQkJc2V0VDEoKERvdWJsZSluZXdWYWx1ZSk7DQorCQkJCXJldHVybjsNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX1QyOg0KKwkJCQlzZXRUMigoRG91YmxlKW5ld1ZhbHVlKTsNCisJCQkJcmV0dXJuOw0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fVDM6DQorCQkJCXNldFQzKChEb3VibGUpbmV3VmFsdWUpOw0KKwkJCQlyZXR1cm47DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19UNDoNCisJCQkJc2V0VDQoKERvdWJsZSluZXdWYWx1ZSk7DQorCQkJCXJldHVybjsNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX1IxOg0KKwkJCQlzZXRSMSgoRG91YmxlKW5ld1ZhbHVlKTsNCisJCQkJcmV0dXJuOw0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fUjI6DQorCQkJCXNldFIyKChEb3VibGUpbmV3VmFsdWUpOw0KKwkJCQlyZXR1cm47DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19SMzoNCisJCQkJc2V0UjMoKERvdWJsZSluZXdWYWx1ZSk7DQorCQkJCXJldHVybjsNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX1I0Og0KKwkJCQlzZXRSNCgoRG91YmxlKW5ld1ZhbHVlKTsNCisJCQkJcmV0dXJuOw0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fRTEyOg0KKwkJCQlzZXRFMTIoKERvdWJsZSluZXdWYWx1ZSk7DQorCQkJCXJldHVybjsNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0UxMzoNCisJCQkJc2V0RTEzKChEb3VibGUpbmV3VmFsdWUpOw0KKwkJCQlyZXR1cm47DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19FMTQ6DQorCQkJCXNldEUxNCgoRG91YmxlKW5ld1ZhbHVlKTsNCisJCQkJcmV0dXJuOw0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fRTIxOg0KKwkJCQlzZXRFMjEoKERvdWJsZSluZXdWYWx1ZSk7DQorCQkJCXJldHVybjsNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0UyMzoNCisJCQkJc2V0RTIzKChEb3VibGUpbmV3VmFsdWUpOw0KKwkJCQlyZXR1cm47DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19FMjQ6DQorCQkJCXNldEUyNCgoRG91YmxlKW5ld1ZhbHVlKTsNCisJCQkJcmV0dXJuOw0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fRTMxOg0KKwkJCQlzZXRFMzEoKERvdWJsZSluZXdWYWx1ZSk7DQorCQkJCXJldHVybjsNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0UzMjoNCisJCQkJc2V0RTMyKChEb3VibGUpbmV3VmFsdWUpOw0KKwkJCQlyZXR1cm47DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19FMzQ6DQorCQkJCXNldEUzNCgoRG91YmxlKW5ld1ZhbHVlKTsNCisJCQkJcmV0dXJuOw0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fRTQxOg0KKwkJCQlzZXRFNDEoKERvdWJsZSluZXdWYWx1ZSk7DQorCQkJCXJldHVybjsNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0U0MjoNCisJCQkJc2V0RTQyKChEb3VibGUpbmV3VmFsdWUpOw0KKwkJCQlyZXR1cm47DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19FNDM6DQorCQkJCXNldEU0MygoRG91YmxlKW5ld1ZhbHVlKTsNCisJCQkJcmV0dXJuOw0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fSTEyOg0KKwkJCQlzZXRJMTIoKERvdWJsZSluZXdWYWx1ZSk7DQorCQkJCXJldHVybjsNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0kxMzoNCisJCQkJc2V0STEzKChEb3VibGUpbmV3VmFsdWUpOw0KKwkJCQlyZXR1cm47DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19JMTQ6DQorCQkJCXNldEkxNCgoRG91YmxlKW5ld1ZhbHVlKTsNCisJCQkJcmV0dXJuOw0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fSTIxOg0KKwkJCQlzZXRJMjEoKERvdWJsZSluZXdWYWx1ZSk7DQorCQkJCXJldHVybjsNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0kyMzoNCisJCQkJc2V0STIzKChEb3VibGUpbmV3VmFsdWUpOw0KKwkJCQlyZXR1cm47DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19JMjQ6DQorCQkJCXNldEkyNCgoRG91YmxlKW5ld1ZhbHVlKTsNCisJCQkJcmV0dXJuOw0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fSTMxOg0KKwkJCQlzZXRJMzEoKERvdWJsZSluZXdWYWx1ZSk7DQorCQkJCXJldHVybjsNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0kzMjoNCisJCQkJc2V0STMyKChEb3VibGUpbmV3VmFsdWUpOw0KKwkJCQlyZXR1cm47DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19JMzQ6DQorCQkJCXNldEkzNCgoRG91YmxlKW5ld1ZhbHVlKTsNCisJCQkJcmV0dXJuOw0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fSTQxOg0KKwkJCQlzZXRJNDEoKERvdWJsZSluZXdWYWx1ZSk7DQorCQkJCXJldHVybjsNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0k0MjoNCisJCQkJc2V0STQyKChEb3VibGUpbmV3VmFsdWUpOw0KKwkJCQlyZXR1cm47DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19JNDM6DQorCQkJCXNldEk0MygoRG91YmxlKW5ld1ZhbHVlKTsNCisJCQkJcmV0dXJuOw0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fUjoNCisJCQkJc2V0UigoRG91YmxlKW5ld1ZhbHVlKTsNCisJCQkJcmV0dXJuOw0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fSU5DSURFTkNFMToNCisJCQkJc2V0SW5jaWRlbmNlMSgoRG91YmxlKW5ld1ZhbHVlKTsNCisJCQkJcmV0dXJuOw0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fSU5DSURFTkNFMjoNCisJCQkJc2V0SW5jaWRlbmNlMigoRG91YmxlKW5ld1ZhbHVlKTsNCisJCQkJcmV0dXJuOw0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fSU5DSURFTkNFMzoNCisJCQkJc2V0SW5jaWRlbmNlMygoRG91YmxlKW5ld1ZhbHVlKTsNCisJCQkJcmV0dXJuOw0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fSU5DSURFTkNFNDoNCisJCQkJc2V0SW5jaWRlbmNlNCgoRG91YmxlKW5ld1ZhbHVlKTsNCisJCQkJcmV0dXJuOw0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fSU5DSURFTkNFMTI6DQorCQkJCXNldEluY2lkZW5jZTEyKChEb3VibGUpbmV3VmFsdWUpOw0KKwkJCQlyZXR1cm47DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19JTkNJREVOQ0UyMToNCisJCQkJc2V0SW5jaWRlbmNlMjEoKERvdWJsZSluZXdWYWx1ZSk7DQorCQkJCXJldHVybjsNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0lOQ0lERU5DRTMxOg0KKwkJCQlzZXRJbmNpZGVuY2UzMSgoRG91YmxlKW5ld1ZhbHVlKTsNCisJCQkJcmV0dXJuOw0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fSU5DSURFTkNFNDE6DQorCQkJCXNldEluY2lkZW5jZTQxKChEb3VibGUpbmV3VmFsdWUpOw0KKwkJCQlyZXR1cm47DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19JTkNJREVOQ0UxMzoNCisJCQkJc2V0SW5jaWRlbmNlMTMoKERvdWJsZSluZXdWYWx1ZSk7DQorCQkJCXJldHVybjsNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0lOQ0lERU5DRTIzOg0KKwkJCQlzZXRJbmNpZGVuY2UyMygoRG91YmxlKW5ld1ZhbHVlKTsNCisJCQkJcmV0dXJuOw0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fSU5DSURFTkNFMzI6DQorCQkJCXNldEluY2lkZW5jZTMyKChEb3VibGUpbmV3VmFsdWUpOw0KKwkJCQlyZXR1cm47DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19JTkNJREVOQ0U0MjoNCisJCQkJc2V0SW5jaWRlbmNlNDIoKERvdWJsZSluZXdWYWx1ZSk7DQorCQkJCXJldHVybjsNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0lOQ0lERU5DRTE0Og0KKwkJCQlzZXRJbmNpZGVuY2UxNCgoRG91YmxlKW5ld1ZhbHVlKTsNCisJCQkJcmV0dXJuOw0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fSU5DSURFTkNFMjQ6DQorCQkJCXNldEluY2lkZW5jZTI0KChEb3VibGUpbmV3VmFsdWUpOw0KKwkJCQlyZXR1cm47DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19JTkNJREVOQ0UzNDoNCisJCQkJc2V0SW5jaWRlbmNlMzQoKERvdWJsZSluZXdWYWx1ZSk7DQorCQkJCXJldHVybjsNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0lOQ0lERU5DRTQzOg0KKwkJCQlzZXRJbmNpZGVuY2U0MygoRG91YmxlKW5ld1ZhbHVlKTsNCisJCQkJcmV0dXJuOw0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fRElTRUFTRV9ERUFUSFMxOg0KKwkJCQlzZXREaXNlYXNlRGVhdGhzMSgoRG91YmxlKW5ld1ZhbHVlKTsNCisJCQkJcmV0dXJuOw0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fRElTRUFTRV9ERUFUSFMyOg0KKwkJCQlzZXREaXNlYXNlRGVhdGhzMigoRG91YmxlKW5ld1ZhbHVlKTsNCisJCQkJcmV0dXJuOw0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fRElTRUFTRV9ERUFUSFMzOg0KKwkJCQlzZXREaXNlYXNlRGVhdGhzMygoRG91YmxlKW5ld1ZhbHVlKTsNCisJCQkJcmV0dXJuOw0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fRElTRUFTRV9ERUFUSFM0Og0KKwkJCQlzZXREaXNlYXNlRGVhdGhzNCgoRG91YmxlKW5ld1ZhbHVlKTsNCisJCQkJcmV0dXJuOw0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fRElTRUFTRV9ERUFUSFMxMjoNCisJCQkJc2V0RGlzZWFzZURlYXRoczEyKChEb3VibGUpbmV3VmFsdWUpOw0KKwkJCQlyZXR1cm47DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19ESVNFQVNFX0RFQVRIUzIxOg0KKwkJCQlzZXREaXNlYXNlRGVhdGhzMjEoKERvdWJsZSluZXdWYWx1ZSk7DQorCQkJCXJldHVybjsNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0RJU0VBU0VfREVBVEhTMzE6DQorCQkJCXNldERpc2Vhc2VEZWF0aHMzMSgoRG91YmxlKW5ld1ZhbHVlKTsNCisJCQkJcmV0dXJuOw0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fRElTRUFTRV9ERUFUSFM0MToNCisJCQkJc2V0RGlzZWFzZURlYXRoczQxKChEb3VibGUpbmV3VmFsdWUpOw0KKwkJCQlyZXR1cm47DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19ESVNFQVNFX0RFQVRIUzEzOg0KKwkJCQlzZXREaXNlYXNlRGVhdGhzMTMoKERvdWJsZSluZXdWYWx1ZSk7DQorCQkJCXJldHVybjsNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0RJU0VBU0VfREVBVEhTMjM6DQorCQkJCXNldERpc2Vhc2VEZWF0aHMyMygoRG91YmxlKW5ld1ZhbHVlKTsNCisJCQkJcmV0dXJuOw0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fRElTRUFTRV9ERUFUSFMzMjoNCisJCQkJc2V0RGlzZWFzZURlYXRoczMyKChEb3VibGUpbmV3VmFsdWUpOw0KKwkJCQlyZXR1cm47DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19ESVNFQVNFX0RFQVRIUzQyOg0KKwkJCQlzZXREaXNlYXNlRGVhdGhzNDIoKERvdWJsZSluZXdWYWx1ZSk7DQorCQkJCXJldHVybjsNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0RJU0VBU0VfREVBVEhTMTQ6DQorCQkJCXNldERpc2Vhc2VEZWF0aHMxNCgoRG91YmxlKW5ld1ZhbHVlKTsNCisJCQkJcmV0dXJuOw0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fRElTRUFTRV9ERUFUSFMyNDoNCisJCQkJc2V0RGlzZWFzZURlYXRoczI0KChEb3VibGUpbmV3VmFsdWUpOw0KKwkJCQlyZXR1cm47DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19ESVNFQVNFX0RFQVRIUzM0Og0KKwkJCQlzZXREaXNlYXNlRGVhdGhzMzQoKERvdWJsZSluZXdWYWx1ZSk7DQorCQkJCXJldHVybjsNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0RJU0VBU0VfREVBVEhTNDM6DQorCQkJCXNldERpc2Vhc2VEZWF0aHM0MygoRG91YmxlKW5ld1ZhbHVlKTsNCisJCQkJcmV0dXJuOw0KKwkJfQ0KKwkJc3VwZXIuZVNldChmZWF0dXJlSUQsIG5ld1ZhbHVlKTsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCUBPdmVycmlkZQ0KKwlwdWJsaWMgdm9pZCBlVW5zZXQoaW50IGZlYXR1cmVJRCkgew0KKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0UxOg0KKwkJCQlzZXRFMShFMV9FREVGQVVMVCk7DQorCQkJCXJldHVybjsNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0UyOg0KKwkJCQlzZXRFMihFMl9FREVGQVVMVCk7DQorCQkJCXJldHVybjsNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0UzOg0KKwkJCQlzZXRFMyhFM19FREVGQVVMVCk7DQorCQkJCXJldHVybjsNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0U0Og0KKwkJCQlzZXRFNChFNF9FREVGQVVMVCk7DQorCQkJCXJldHVybjsNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0kxOg0KKwkJCQlzZXRJMShJMV9FREVGQVVMVCk7DQorCQkJCXJldHVybjsNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0kyOg0KKwkJCQlzZXRJMihJMl9FREVGQVVMVCk7DQorCQkJCXJldHVybjsNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0kzOg0KKwkJCQlzZXRJMyhJM19FREVGQVVMVCk7DQorCQkJCXJldHVybjsNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0k0Og0KKwkJCQlzZXRJNChJNF9FREVGQVVMVCk7DQorCQkJCXJldHVybjsNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX1QxOg0KKwkJCQlzZXRUMShUMV9FREVGQVVMVCk7DQorCQkJCXJldHVybjsNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX1QyOg0KKwkJCQlzZXRUMihUMl9FREVGQVVMVCk7DQorCQkJCXJldHVybjsNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX1QzOg0KKwkJCQlzZXRUMyhUM19FREVGQVVMVCk7DQorCQkJCXJldHVybjsNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX1Q0Og0KKwkJCQlzZXRUNChUNF9FREVGQVVMVCk7DQorCQkJCXJldHVybjsNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX1IxOg0KKwkJCQlzZXRSMShSMV9FREVGQVVMVCk7DQorCQkJCXJldHVybjsNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX1IyOg0KKwkJCQlzZXRSMihSMl9FREVGQVVMVCk7DQorCQkJCXJldHVybjsNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX1IzOg0KKwkJCQlzZXRSMyhSM19FREVGQVVMVCk7DQorCQkJCXJldHVybjsNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX1I0Og0KKwkJCQlzZXRSNChSNF9FREVGQVVMVCk7DQorCQkJCXJldHVybjsNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0UxMjoNCisJCQkJc2V0RTEyKEUxMl9FREVGQVVMVCk7DQorCQkJCXJldHVybjsNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0UxMzoNCisJCQkJc2V0RTEzKEUxM19FREVGQVVMVCk7DQorCQkJCXJldHVybjsNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0UxNDoNCisJCQkJc2V0RTE0KEUxNF9FREVGQVVMVCk7DQorCQkJCXJldHVybjsNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0UyMToNCisJCQkJc2V0RTIxKEUyMV9FREVGQVVMVCk7DQorCQkJCXJldHVybjsNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0UyMzoNCisJCQkJc2V0RTIzKEUyM19FREVGQVVMVCk7DQorCQkJCXJldHVybjsNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0UyNDoNCisJCQkJc2V0RTI0KEUyNF9FREVGQVVMVCk7DQorCQkJCXJldHVybjsNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0UzMToNCisJCQkJc2V0RTMxKEUzMV9FREVGQVVMVCk7DQorCQkJCXJldHVybjsNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0UzMjoNCisJCQkJc2V0RTMyKEUzMl9FREVGQVVMVCk7DQorCQkJCXJldHVybjsNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0UzNDoNCisJCQkJc2V0RTM0KEUzNF9FREVGQVVMVCk7DQorCQkJCXJldHVybjsNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0U0MToNCisJCQkJc2V0RTQxKEU0MV9FREVGQVVMVCk7DQorCQkJCXJldHVybjsNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0U0MjoNCisJCQkJc2V0RTQyKEU0Ml9FREVGQVVMVCk7DQorCQkJCXJldHVybjsNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0U0MzoNCisJCQkJc2V0RTQzKEU0M19FREVGQVVMVCk7DQorCQkJCXJldHVybjsNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0kxMjoNCisJCQkJc2V0STEyKEkxMl9FREVGQVVMVCk7DQorCQkJCXJldHVybjsNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0kxMzoNCisJCQkJc2V0STEzKEkxM19FREVGQVVMVCk7DQorCQkJCXJldHVybjsNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0kxNDoNCisJCQkJc2V0STE0KEkxNF9FREVGQVVMVCk7DQorCQkJCXJldHVybjsNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0kyMToNCisJCQkJc2V0STIxKEkyMV9FREVGQVVMVCk7DQorCQkJCXJldHVybjsNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0kyMzoNCisJCQkJc2V0STIzKEkyM19FREVGQVVMVCk7DQorCQkJCXJldHVybjsNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0kyNDoNCisJCQkJc2V0STI0KEkyNF9FREVGQVVMVCk7DQorCQkJCXJldHVybjsNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0kzMToNCisJCQkJc2V0STMxKEkzMV9FREVGQVVMVCk7DQorCQkJCXJldHVybjsNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0kzMjoNCisJCQkJc2V0STMyKEkzMl9FREVGQVVMVCk7DQorCQkJCXJldHVybjsNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0kzNDoNCisJCQkJc2V0STM0KEkzNF9FREVGQVVMVCk7DQorCQkJCXJldHVybjsNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0k0MToNCisJCQkJc2V0STQxKEk0MV9FREVGQVVMVCk7DQorCQkJCXJldHVybjsNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0k0MjoNCisJCQkJc2V0STQyKEk0Ml9FREVGQVVMVCk7DQorCQkJCXJldHVybjsNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0k0MzoNCisJCQkJc2V0STQzKEk0M19FREVGQVVMVCk7DQorCQkJCXJldHVybjsNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX1I6DQorCQkJCXNldFIoUl9FREVGQVVMVCk7DQorCQkJCXJldHVybjsNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0lOQ0lERU5DRTE6DQorCQkJCXNldEluY2lkZW5jZTEoSU5DSURFTkNFMV9FREVGQVVMVCk7DQorCQkJCXJldHVybjsNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0lOQ0lERU5DRTI6DQorCQkJCXNldEluY2lkZW5jZTIoSU5DSURFTkNFMl9FREVGQVVMVCk7DQorCQkJCXJldHVybjsNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0lOQ0lERU5DRTM6DQorCQkJCXNldEluY2lkZW5jZTMoSU5DSURFTkNFM19FREVGQVVMVCk7DQorCQkJCXJldHVybjsNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0lOQ0lERU5DRTQ6DQorCQkJCXNldEluY2lkZW5jZTQoSU5DSURFTkNFNF9FREVGQVVMVCk7DQorCQkJCXJldHVybjsNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0lOQ0lERU5DRTEyOg0KKwkJCQlzZXRJbmNpZGVuY2UxMihJTkNJREVOQ0UxMl9FREVGQVVMVCk7DQorCQkJCXJldHVybjsNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0lOQ0lERU5DRTIxOg0KKwkJCQlzZXRJbmNpZGVuY2UyMShJTkNJREVOQ0UyMV9FREVGQVVMVCk7DQorCQkJCXJldHVybjsNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0lOQ0lERU5DRTMxOg0KKwkJCQlzZXRJbmNpZGVuY2UzMShJTkNJREVOQ0UzMV9FREVGQVVMVCk7DQorCQkJCXJldHVybjsNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0lOQ0lERU5DRTQxOg0KKwkJCQlzZXRJbmNpZGVuY2U0MShJTkNJREVOQ0U0MV9FREVGQVVMVCk7DQorCQkJCXJldHVybjsNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0lOQ0lERU5DRTEzOg0KKwkJCQlzZXRJbmNpZGVuY2UxMyhJTkNJREVOQ0UxM19FREVGQVVMVCk7DQorCQkJCXJldHVybjsNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0lOQ0lERU5DRTIzOg0KKwkJCQlzZXRJbmNpZGVuY2UyMyhJTkNJREVOQ0UyM19FREVGQVVMVCk7DQorCQkJCXJldHVybjsNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0lOQ0lERU5DRTMyOg0KKwkJCQlzZXRJbmNpZGVuY2UzMihJTkNJREVOQ0UzMl9FREVGQVVMVCk7DQorCQkJCXJldHVybjsNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0lOQ0lERU5DRTQyOg0KKwkJCQlzZXRJbmNpZGVuY2U0MihJTkNJREVOQ0U0Ml9FREVGQVVMVCk7DQorCQkJCXJldHVybjsNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0lOQ0lERU5DRTE0Og0KKwkJCQlzZXRJbmNpZGVuY2UxNChJTkNJREVOQ0UxNF9FREVGQVVMVCk7DQorCQkJCXJldHVybjsNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0lOQ0lERU5DRTI0Og0KKwkJCQlzZXRJbmNpZGVuY2UyNChJTkNJREVOQ0UyNF9FREVGQVVMVCk7DQorCQkJCXJldHVybjsNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0lOQ0lERU5DRTM0Og0KKwkJCQlzZXRJbmNpZGVuY2UzNChJTkNJREVOQ0UzNF9FREVGQVVMVCk7DQorCQkJCXJldHVybjsNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0lOQ0lERU5DRTQzOg0KKwkJCQlzZXRJbmNpZGVuY2U0MyhJTkNJREVOQ0U0M19FREVGQVVMVCk7DQorCQkJCXJldHVybjsNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0RJU0VBU0VfREVBVEhTMToNCisJCQkJc2V0RGlzZWFzZURlYXRoczEoRElTRUFTRV9ERUFUSFMxX0VERUZBVUxUKTsNCisJCQkJcmV0dXJuOw0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fRElTRUFTRV9ERUFUSFMyOg0KKwkJCQlzZXREaXNlYXNlRGVhdGhzMihESVNFQVNFX0RFQVRIUzJfRURFRkFVTFQpOw0KKwkJCQlyZXR1cm47DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19ESVNFQVNFX0RFQVRIUzM6DQorCQkJCXNldERpc2Vhc2VEZWF0aHMzKERJU0VBU0VfREVBVEhTM19FREVGQVVMVCk7DQorCQkJCXJldHVybjsNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0RJU0VBU0VfREVBVEhTNDoNCisJCQkJc2V0RGlzZWFzZURlYXRoczQoRElTRUFTRV9ERUFUSFM0X0VERUZBVUxUKTsNCisJCQkJcmV0dXJuOw0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fRElTRUFTRV9ERUFUSFMxMjoNCisJCQkJc2V0RGlzZWFzZURlYXRoczEyKERJU0VBU0VfREVBVEhTMTJfRURFRkFVTFQpOw0KKwkJCQlyZXR1cm47DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19ESVNFQVNFX0RFQVRIUzIxOg0KKwkJCQlzZXREaXNlYXNlRGVhdGhzMjEoRElTRUFTRV9ERUFUSFMyMV9FREVGQVVMVCk7DQorCQkJCXJldHVybjsNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0RJU0VBU0VfREVBVEhTMzE6DQorCQkJCXNldERpc2Vhc2VEZWF0aHMzMShESVNFQVNFX0RFQVRIUzMxX0VERUZBVUxUKTsNCisJCQkJcmV0dXJuOw0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fRElTRUFTRV9ERUFUSFM0MToNCisJCQkJc2V0RGlzZWFzZURlYXRoczQxKERJU0VBU0VfREVBVEhTNDFfRURFRkFVTFQpOw0KKwkJCQlyZXR1cm47DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19ESVNFQVNFX0RFQVRIUzEzOg0KKwkJCQlzZXREaXNlYXNlRGVhdGhzMTMoRElTRUFTRV9ERUFUSFMxM19FREVGQVVMVCk7DQorCQkJCXJldHVybjsNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0RJU0VBU0VfREVBVEhTMjM6DQorCQkJCXNldERpc2Vhc2VEZWF0aHMyMyhESVNFQVNFX0RFQVRIUzIzX0VERUZBVUxUKTsNCisJCQkJcmV0dXJuOw0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fRElTRUFTRV9ERUFUSFMzMjoNCisJCQkJc2V0RGlzZWFzZURlYXRoczMyKERJU0VBU0VfREVBVEhTMzJfRURFRkFVTFQpOw0KKwkJCQlyZXR1cm47DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19ESVNFQVNFX0RFQVRIUzQyOg0KKwkJCQlzZXREaXNlYXNlRGVhdGhzNDIoRElTRUFTRV9ERUFUSFM0Ml9FREVGQVVMVCk7DQorCQkJCXJldHVybjsNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0RJU0VBU0VfREVBVEhTMTQ6DQorCQkJCXNldERpc2Vhc2VEZWF0aHMxNChESVNFQVNFX0RFQVRIUzE0X0VERUZBVUxUKTsNCisJCQkJcmV0dXJuOw0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fRElTRUFTRV9ERUFUSFMyNDoNCisJCQkJc2V0RGlzZWFzZURlYXRoczI0KERJU0VBU0VfREVBVEhTMjRfRURFRkFVTFQpOw0KKwkJCQlyZXR1cm47DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19ESVNFQVNFX0RFQVRIUzM0Og0KKwkJCQlzZXREaXNlYXNlRGVhdGhzMzQoRElTRUFTRV9ERUFUSFMzNF9FREVGQVVMVCk7DQorCQkJCXJldHVybjsNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0RJU0VBU0VfREVBVEhTNDM6DQorCQkJCXNldERpc2Vhc2VEZWF0aHM0MyhESVNFQVNFX0RFQVRIUzQzX0VERUZBVUxUKTsNCisJCQkJcmV0dXJuOw0KKwkJfQ0KKwkJc3VwZXIuZVVuc2V0KGZlYXR1cmVJRCk7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlAT3ZlcnJpZGUNCisJcHVibGljIGJvb2xlYW4gZUlzU2V0KGludCBmZWF0dXJlSUQpIHsNCisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19FMToNCisJCQkJcmV0dXJuIGUxICE9IEUxX0VERUZBVUxUOw0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fRTI6DQorCQkJCXJldHVybiBlMiAhPSBFMl9FREVGQVVMVDsNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0UzOg0KKwkJCQlyZXR1cm4gZTMgIT0gRTNfRURFRkFVTFQ7DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19FNDoNCisJCQkJcmV0dXJuIGU0ICE9IEU0X0VERUZBVUxUOw0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fSTE6DQorCQkJCXJldHVybiBpMSAhPSBJMV9FREVGQVVMVDsNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0kyOg0KKwkJCQlyZXR1cm4gaTIgIT0gSTJfRURFRkFVTFQ7DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19JMzoNCisJCQkJcmV0dXJuIGkzICE9IEkzX0VERUZBVUxUOw0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fSTQ6DQorCQkJCXJldHVybiBpNCAhPSBJNF9FREVGQVVMVDsNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX1QxOg0KKwkJCQlyZXR1cm4gdDEgIT0gVDFfRURFRkFVTFQ7DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19UMjoNCisJCQkJcmV0dXJuIHQyICE9IFQyX0VERUZBVUxUOw0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fVDM6DQorCQkJCXJldHVybiB0MyAhPSBUM19FREVGQVVMVDsNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX1Q0Og0KKwkJCQlyZXR1cm4gdDQgIT0gVDRfRURFRkFVTFQ7DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19SMToNCisJCQkJcmV0dXJuIHIxICE9IFIxX0VERUZBVUxUOw0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fUjI6DQorCQkJCXJldHVybiByMiAhPSBSMl9FREVGQVVMVDsNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX1IzOg0KKwkJCQlyZXR1cm4gcjMgIT0gUjNfRURFRkFVTFQ7DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19SNDoNCisJCQkJcmV0dXJuIHI0ICE9IFI0X0VERUZBVUxUOw0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fRTEyOg0KKwkJCQlyZXR1cm4gZTEyICE9IEUxMl9FREVGQVVMVDsNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0UxMzoNCisJCQkJcmV0dXJuIGUxMyAhPSBFMTNfRURFRkFVTFQ7DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19FMTQ6DQorCQkJCXJldHVybiBlMTQgIT0gRTE0X0VERUZBVUxUOw0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fRTIxOg0KKwkJCQlyZXR1cm4gZTIxICE9IEUyMV9FREVGQVVMVDsNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0UyMzoNCisJCQkJcmV0dXJuIGUyMyAhPSBFMjNfRURFRkFVTFQ7DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19FMjQ6DQorCQkJCXJldHVybiBlMjQgIT0gRTI0X0VERUZBVUxUOw0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fRTMxOg0KKwkJCQlyZXR1cm4gZTMxICE9IEUzMV9FREVGQVVMVDsNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0UzMjoNCisJCQkJcmV0dXJuIGUzMiAhPSBFMzJfRURFRkFVTFQ7DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19FMzQ6DQorCQkJCXJldHVybiBlMzQgIT0gRTM0X0VERUZBVUxUOw0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fRTQxOg0KKwkJCQlyZXR1cm4gZTQxICE9IEU0MV9FREVGQVVMVDsNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0U0MjoNCisJCQkJcmV0dXJuIGU0MiAhPSBFNDJfRURFRkFVTFQ7DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19FNDM6DQorCQkJCXJldHVybiBlNDMgIT0gRTQzX0VERUZBVUxUOw0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fSTEyOg0KKwkJCQlyZXR1cm4gaTEyICE9IEkxMl9FREVGQVVMVDsNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0kxMzoNCisJCQkJcmV0dXJuIGkxMyAhPSBJMTNfRURFRkFVTFQ7DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19JMTQ6DQorCQkJCXJldHVybiBpMTQgIT0gSTE0X0VERUZBVUxUOw0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fSTIxOg0KKwkJCQlyZXR1cm4gaTIxICE9IEkyMV9FREVGQVVMVDsNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0kyMzoNCisJCQkJcmV0dXJuIGkyMyAhPSBJMjNfRURFRkFVTFQ7DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19JMjQ6DQorCQkJCXJldHVybiBpMjQgIT0gSTI0X0VERUZBVUxUOw0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fSTMxOg0KKwkJCQlyZXR1cm4gaTMxICE9IEkzMV9FREVGQVVMVDsNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0kzMjoNCisJCQkJcmV0dXJuIGkzMiAhPSBJMzJfRURFRkFVTFQ7DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19JMzQ6DQorCQkJCXJldHVybiBpMzQgIT0gSTM0X0VERUZBVUxUOw0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fSTQxOg0KKwkJCQlyZXR1cm4gaTQxICE9IEk0MV9FREVGQVVMVDsNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0k0MjoNCisJCQkJcmV0dXJuIGk0MiAhPSBJNDJfRURFRkFVTFQ7DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19JNDM6DQorCQkJCXJldHVybiBpNDMgIT0gSTQzX0VERUZBVUxUOw0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fUjoNCisJCQkJcmV0dXJuIHIgIT0gUl9FREVGQVVMVDsNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0lOQ0lERU5DRTE6DQorCQkJCXJldHVybiBpbmNpZGVuY2UxICE9IElOQ0lERU5DRTFfRURFRkFVTFQ7DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19JTkNJREVOQ0UyOg0KKwkJCQlyZXR1cm4gaW5jaWRlbmNlMiAhPSBJTkNJREVOQ0UyX0VERUZBVUxUOw0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fSU5DSURFTkNFMzoNCisJCQkJcmV0dXJuIGluY2lkZW5jZTMgIT0gSU5DSURFTkNFM19FREVGQVVMVDsNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0lOQ0lERU5DRTQ6DQorCQkJCXJldHVybiBpbmNpZGVuY2U0ICE9IElOQ0lERU5DRTRfRURFRkFVTFQ7DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19JTkNJREVOQ0UxMjoNCisJCQkJcmV0dXJuIGluY2lkZW5jZTEyICE9IElOQ0lERU5DRTEyX0VERUZBVUxUOw0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fSU5DSURFTkNFMjE6DQorCQkJCXJldHVybiBpbmNpZGVuY2UyMSAhPSBJTkNJREVOQ0UyMV9FREVGQVVMVDsNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0lOQ0lERU5DRTMxOg0KKwkJCQlyZXR1cm4gaW5jaWRlbmNlMzEgIT0gSU5DSURFTkNFMzFfRURFRkFVTFQ7DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19JTkNJREVOQ0U0MToNCisJCQkJcmV0dXJuIGluY2lkZW5jZTQxICE9IElOQ0lERU5DRTQxX0VERUZBVUxUOw0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fSU5DSURFTkNFMTM6DQorCQkJCXJldHVybiBpbmNpZGVuY2UxMyAhPSBJTkNJREVOQ0UxM19FREVGQVVMVDsNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0lOQ0lERU5DRTIzOg0KKwkJCQlyZXR1cm4gaW5jaWRlbmNlMjMgIT0gSU5DSURFTkNFMjNfRURFRkFVTFQ7DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19JTkNJREVOQ0UzMjoNCisJCQkJcmV0dXJuIGluY2lkZW5jZTMyICE9IElOQ0lERU5DRTMyX0VERUZBVUxUOw0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fSU5DSURFTkNFNDI6DQorCQkJCXJldHVybiBpbmNpZGVuY2U0MiAhPSBJTkNJREVOQ0U0Ml9FREVGQVVMVDsNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0lOQ0lERU5DRTE0Og0KKwkJCQlyZXR1cm4gaW5jaWRlbmNlMTQgIT0gSU5DSURFTkNFMTRfRURFRkFVTFQ7DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19JTkNJREVOQ0UyNDoNCisJCQkJcmV0dXJuIGluY2lkZW5jZTI0ICE9IElOQ0lERU5DRTI0X0VERUZBVUxUOw0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fSU5DSURFTkNFMzQ6DQorCQkJCXJldHVybiBpbmNpZGVuY2UzNCAhPSBJTkNJREVOQ0UzNF9FREVGQVVMVDsNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0lOQ0lERU5DRTQzOg0KKwkJCQlyZXR1cm4gaW5jaWRlbmNlNDMgIT0gSU5DSURFTkNFNDNfRURFRkFVTFQ7DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19ESVNFQVNFX0RFQVRIUzE6DQorCQkJCXJldHVybiBkaXNlYXNlRGVhdGhzMSAhPSBESVNFQVNFX0RFQVRIUzFfRURFRkFVTFQ7DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19ESVNFQVNFX0RFQVRIUzI6DQorCQkJCXJldHVybiBkaXNlYXNlRGVhdGhzMiAhPSBESVNFQVNFX0RFQVRIUzJfRURFRkFVTFQ7DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19ESVNFQVNFX0RFQVRIUzM6DQorCQkJCXJldHVybiBkaXNlYXNlRGVhdGhzMyAhPSBESVNFQVNFX0RFQVRIUzNfRURFRkFVTFQ7DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19ESVNFQVNFX0RFQVRIUzQ6DQorCQkJCXJldHVybiBkaXNlYXNlRGVhdGhzNCAhPSBESVNFQVNFX0RFQVRIUzRfRURFRkFVTFQ7DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19ESVNFQVNFX0RFQVRIUzEyOg0KKwkJCQlyZXR1cm4gZGlzZWFzZURlYXRoczEyICE9IERJU0VBU0VfREVBVEhTMTJfRURFRkFVTFQ7DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19ESVNFQVNFX0RFQVRIUzIxOg0KKwkJCQlyZXR1cm4gZGlzZWFzZURlYXRoczIxICE9IERJU0VBU0VfREVBVEhTMjFfRURFRkFVTFQ7DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19ESVNFQVNFX0RFQVRIUzMxOg0KKwkJCQlyZXR1cm4gZGlzZWFzZURlYXRoczMxICE9IERJU0VBU0VfREVBVEhTMzFfRURFRkFVTFQ7DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19ESVNFQVNFX0RFQVRIUzQxOg0KKwkJCQlyZXR1cm4gZGlzZWFzZURlYXRoczQxICE9IERJU0VBU0VfREVBVEhTNDFfRURFRkFVTFQ7DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19ESVNFQVNFX0RFQVRIUzEzOg0KKwkJCQlyZXR1cm4gZGlzZWFzZURlYXRoczEzICE9IERJU0VBU0VfREVBVEhTMTNfRURFRkFVTFQ7DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19ESVNFQVNFX0RFQVRIUzIzOg0KKwkJCQlyZXR1cm4gZGlzZWFzZURlYXRoczIzICE9IERJU0VBU0VfREVBVEhTMjNfRURFRkFVTFQ7DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19ESVNFQVNFX0RFQVRIUzMyOg0KKwkJCQlyZXR1cm4gZGlzZWFzZURlYXRoczMyICE9IERJU0VBU0VfREVBVEhTMzJfRURFRkFVTFQ7DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19ESVNFQVNFX0RFQVRIUzQyOg0KKwkJCQlyZXR1cm4gZGlzZWFzZURlYXRoczQyICE9IERJU0VBU0VfREVBVEhTNDJfRURFRkFVTFQ7DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19ESVNFQVNFX0RFQVRIUzE0Og0KKwkJCQlyZXR1cm4gZGlzZWFzZURlYXRoczE0ICE9IERJU0VBU0VfREVBVEhTMTRfRURFRkFVTFQ7DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19ESVNFQVNFX0RFQVRIUzI0Og0KKwkJCQlyZXR1cm4gZGlzZWFzZURlYXRoczI0ICE9IERJU0VBU0VfREVBVEhTMjRfRURFRkFVTFQ7DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19ESVNFQVNFX0RFQVRIUzM0Og0KKwkJCQlyZXR1cm4gZGlzZWFzZURlYXRoczM0ICE9IERJU0VBU0VfREVBVEhTMzRfRURFRkFVTFQ7DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19ESVNFQVNFX0RFQVRIUzQzOg0KKwkJCQlyZXR1cm4gZGlzZWFzZURlYXRoczQzICE9IERJU0VBU0VfREVBVEhTNDNfRURFRkFVTFQ7DQorCQl9DQorCQlyZXR1cm4gc3VwZXIuZUlzU2V0KGZlYXR1cmVJRCk7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlAT3ZlcnJpZGUNCisJcHVibGljIFN0cmluZyB0b1N0cmluZygpIHsNCisJCWlmIChlSXNQcm94eSgpKSByZXR1cm4gc3VwZXIudG9TdHJpbmcoKTsNCisNCisJCVN0cmluZ0J1ZmZlciByZXN1bHQgPSBuZXcgU3RyaW5nQnVmZmVyKHN1cGVyLnRvU3RyaW5nKCkpOw0KKwkJcmVzdWx0LmFwcGVuZCgiIChFMTogIik7DQorCQlyZXN1bHQuYXBwZW5kKGUxKTsNCisJCXJlc3VsdC5hcHBlbmQoIiwgRTI6ICIpOw0KKwkJcmVzdWx0LmFwcGVuZChlMik7DQorCQlyZXN1bHQuYXBwZW5kKCIsIEUzOiAiKTsNCisJCXJlc3VsdC5hcHBlbmQoZTMpOw0KKwkJcmVzdWx0LmFwcGVuZCgiLCBFNDogIik7DQorCQlyZXN1bHQuYXBwZW5kKGU0KTsNCisJCXJlc3VsdC5hcHBlbmQoIiwgSTE6ICIpOw0KKwkJcmVzdWx0LmFwcGVuZChpMSk7DQorCQlyZXN1bHQuYXBwZW5kKCIsIEkyOiAiKTsNCisJCXJlc3VsdC5hcHBlbmQoaTIpOw0KKwkJcmVzdWx0LmFwcGVuZCgiLCBJMzogIik7DQorCQlyZXN1bHQuYXBwZW5kKGkzKTsNCisJCXJlc3VsdC5hcHBlbmQoIiwgSTQ6ICIpOw0KKwkJcmVzdWx0LmFwcGVuZChpNCk7DQorCQlyZXN1bHQuYXBwZW5kKCIsIFQxOiAiKTsNCisJCXJlc3VsdC5hcHBlbmQodDEpOw0KKwkJcmVzdWx0LmFwcGVuZCgiLCBUMjogIik7DQorCQlyZXN1bHQuYXBwZW5kKHQyKTsNCisJCXJlc3VsdC5hcHBlbmQoIiwgVDM6ICIpOw0KKwkJcmVzdWx0LmFwcGVuZCh0Myk7DQorCQlyZXN1bHQuYXBwZW5kKCIsIFQ0OiAiKTsNCisJCXJlc3VsdC5hcHBlbmQodDQpOw0KKwkJcmVzdWx0LmFwcGVuZCgiLCBSMTogIik7DQorCQlyZXN1bHQuYXBwZW5kKHIxKTsNCisJCXJlc3VsdC5hcHBlbmQoIiwgUjI6ICIpOw0KKwkJcmVzdWx0LmFwcGVuZChyMik7DQorCQlyZXN1bHQuYXBwZW5kKCIsIFIzOiAiKTsNCisJCXJlc3VsdC5hcHBlbmQocjMpOw0KKwkJcmVzdWx0LmFwcGVuZCgiLCBSNDogIik7DQorCQlyZXN1bHQuYXBwZW5kKHI0KTsNCisJCXJlc3VsdC5hcHBlbmQoIiwgRTEyOiAiKTsNCisJCXJlc3VsdC5hcHBlbmQoZTEyKTsNCisJCXJlc3VsdC5hcHBlbmQoIiwgRTEzOiAiKTsNCisJCXJlc3VsdC5hcHBlbmQoZTEzKTsNCisJCXJlc3VsdC5hcHBlbmQoIiwgRTE0OiAiKTsNCisJCXJlc3VsdC5hcHBlbmQoZTE0KTsNCisJCXJlc3VsdC5hcHBlbmQoIiwgRTIxOiAiKTsNCisJCXJlc3VsdC5hcHBlbmQoZTIxKTsNCisJCXJlc3VsdC5hcHBlbmQoIiwgRTIzOiAiKTsNCisJCXJlc3VsdC5hcHBlbmQoZTIzKTsNCisJCXJlc3VsdC5hcHBlbmQoIiwgRTI0OiAiKTsNCisJCXJlc3VsdC5hcHBlbmQoZTI0KTsNCisJCXJlc3VsdC5hcHBlbmQoIiwgRTMxOiAiKTsNCisJCXJlc3VsdC5hcHBlbmQoZTMxKTsNCisJCXJlc3VsdC5hcHBlbmQoIiwgRTMyOiAiKTsNCisJCXJlc3VsdC5hcHBlbmQoZTMyKTsNCisJCXJlc3VsdC5hcHBlbmQoIiwgRTM0OiAiKTsNCisJCXJlc3VsdC5hcHBlbmQoZTM0KTsNCisJCXJlc3VsdC5hcHBlbmQoIiwgRTQxOiAiKTsNCisJCXJlc3VsdC5hcHBlbmQoZTQxKTsNCisJCXJlc3VsdC5hcHBlbmQoIiwgRTQyOiAiKTsNCisJCXJlc3VsdC5hcHBlbmQoZTQyKTsNCisJCXJlc3VsdC5hcHBlbmQoIiwgRTQzOiAiKTsNCisJCXJlc3VsdC5hcHBlbmQoZTQzKTsNCisJCXJlc3VsdC5hcHBlbmQoIiwgSTEyOiAiKTsNCisJCXJlc3VsdC5hcHBlbmQoaTEyKTsNCisJCXJlc3VsdC5hcHBlbmQoIiwgSTEzOiAiKTsNCisJCXJlc3VsdC5hcHBlbmQoaTEzKTsNCisJCXJlc3VsdC5hcHBlbmQoIiwgSTE0OiAiKTsNCisJCXJlc3VsdC5hcHBlbmQoaTE0KTsNCisJCXJlc3VsdC5hcHBlbmQoIiwgSTIxOiAiKTsNCisJCXJlc3VsdC5hcHBlbmQoaTIxKTsNCisJCXJlc3VsdC5hcHBlbmQoIiwgSTIzOiAiKTsNCisJCXJlc3VsdC5hcHBlbmQoaTIzKTsNCisJCXJlc3VsdC5hcHBlbmQoIiwgSTI0OiAiKTsNCisJCXJlc3VsdC5hcHBlbmQoaTI0KTsNCisJCXJlc3VsdC5hcHBlbmQoIiwgSTMxOiAiKTsNCisJCXJlc3VsdC5hcHBlbmQoaTMxKTsNCisJCXJlc3VsdC5hcHBlbmQoIiwgSTMyOiAiKTsNCisJCXJlc3VsdC5hcHBlbmQoaTMyKTsNCisJCXJlc3VsdC5hcHBlbmQoIiwgSTM0OiAiKTsNCisJCXJlc3VsdC5hcHBlbmQoaTM0KTsNCisJCXJlc3VsdC5hcHBlbmQoIiwgSTQxOiAiKTsNCisJCXJlc3VsdC5hcHBlbmQoaTQxKTsNCisJCXJlc3VsdC5hcHBlbmQoIiwgSTQyOiAiKTsNCisJCXJlc3VsdC5hcHBlbmQoaTQyKTsNCisJCXJlc3VsdC5hcHBlbmQoIiwgSTQzOiAiKTsNCisJCXJlc3VsdC5hcHBlbmQoaTQzKTsNCisJCXJlc3VsdC5hcHBlbmQoIiwgUjogIik7DQorCQlyZXN1bHQuYXBwZW5kKHIpOw0KKwkJcmVzdWx0LmFwcGVuZCgiLCBpbmNpZGVuY2UxOiAiKTsNCisJCXJlc3VsdC5hcHBlbmQoaW5jaWRlbmNlMSk7DQorCQlyZXN1bHQuYXBwZW5kKCIsIGluY2lkZW5jZTI6ICIpOw0KKwkJcmVzdWx0LmFwcGVuZChpbmNpZGVuY2UyKTsNCisJCXJlc3VsdC5hcHBlbmQoIiwgaW5jaWRlbmNlMzogIik7DQorCQlyZXN1bHQuYXBwZW5kKGluY2lkZW5jZTMpOw0KKwkJcmVzdWx0LmFwcGVuZCgiLCBpbmNpZGVuY2U0OiAiKTsNCisJCXJlc3VsdC5hcHBlbmQoaW5jaWRlbmNlNCk7DQorCQlyZXN1bHQuYXBwZW5kKCIsIGluY2lkZW5jZTEyOiAiKTsNCisJCXJlc3VsdC5hcHBlbmQoaW5jaWRlbmNlMTIpOw0KKwkJcmVzdWx0LmFwcGVuZCgiLCBpbmNpZGVuY2UyMTogIik7DQorCQlyZXN1bHQuYXBwZW5kKGluY2lkZW5jZTIxKTsNCisJCXJlc3VsdC5hcHBlbmQoIiwgaW5jaWRlbmNlMzE6ICIpOw0KKwkJcmVzdWx0LmFwcGVuZChpbmNpZGVuY2UzMSk7DQorCQlyZXN1bHQuYXBwZW5kKCIsIGluY2lkZW5jZTQxOiAiKTsNCisJCXJlc3VsdC5hcHBlbmQoaW5jaWRlbmNlNDEpOw0KKwkJcmVzdWx0LmFwcGVuZCgiLCBpbmNpZGVuY2UxMzogIik7DQorCQlyZXN1bHQuYXBwZW5kKGluY2lkZW5jZTEzKTsNCisJCXJlc3VsdC5hcHBlbmQoIiwgaW5jaWRlbmNlMjM6ICIpOw0KKwkJcmVzdWx0LmFwcGVuZChpbmNpZGVuY2UyMyk7DQorCQlyZXN1bHQuYXBwZW5kKCIsIGluY2lkZW5jZTMyOiAiKTsNCisJCXJlc3VsdC5hcHBlbmQoaW5jaWRlbmNlMzIpOw0KKwkJcmVzdWx0LmFwcGVuZCgiLCBpbmNpZGVuY2U0MjogIik7DQorCQlyZXN1bHQuYXBwZW5kKGluY2lkZW5jZTQyKTsNCisJCXJlc3VsdC5hcHBlbmQoIiwgaW5jaWRlbmNlMTQ6ICIpOw0KKwkJcmVzdWx0LmFwcGVuZChpbmNpZGVuY2UxNCk7DQorCQlyZXN1bHQuYXBwZW5kKCIsIGluY2lkZW5jZTI0OiAiKTsNCisJCXJlc3VsdC5hcHBlbmQoaW5jaWRlbmNlMjQpOw0KKwkJcmVzdWx0LmFwcGVuZCgiLCBpbmNpZGVuY2UzNDogIik7DQorCQlyZXN1bHQuYXBwZW5kKGluY2lkZW5jZTM0KTsNCisJCXJlc3VsdC5hcHBlbmQoIiwgaW5jaWRlbmNlNDM6ICIpOw0KKwkJcmVzdWx0LmFwcGVuZChpbmNpZGVuY2U0Myk7DQorCQlyZXN1bHQuYXBwZW5kKCIsIGRpc2Vhc2VEZWF0aHMxOiAiKTsNCisJCXJlc3VsdC5hcHBlbmQoZGlzZWFzZURlYXRoczEpOw0KKwkJcmVzdWx0LmFwcGVuZCgiLCBkaXNlYXNlRGVhdGhzMjogIik7DQorCQlyZXN1bHQuYXBwZW5kKGRpc2Vhc2VEZWF0aHMyKTsNCisJCXJlc3VsdC5hcHBlbmQoIiwgZGlzZWFzZURlYXRoczM6ICIpOw0KKwkJcmVzdWx0LmFwcGVuZChkaXNlYXNlRGVhdGhzMyk7DQorCQlyZXN1bHQuYXBwZW5kKCIsIGRpc2Vhc2VEZWF0aHM0OiAiKTsNCisJCXJlc3VsdC5hcHBlbmQoZGlzZWFzZURlYXRoczQpOw0KKwkJcmVzdWx0LmFwcGVuZCgiLCBkaXNlYXNlRGVhdGhzMTI6ICIpOw0KKwkJcmVzdWx0LmFwcGVuZChkaXNlYXNlRGVhdGhzMTIpOw0KKwkJcmVzdWx0LmFwcGVuZCgiLCBkaXNlYXNlRGVhdGhzMjE6ICIpOw0KKwkJcmVzdWx0LmFwcGVuZChkaXNlYXNlRGVhdGhzMjEpOw0KKwkJcmVzdWx0LmFwcGVuZCgiLCBkaXNlYXNlRGVhdGhzMzE6ICIpOw0KKwkJcmVzdWx0LmFwcGVuZChkaXNlYXNlRGVhdGhzMzEpOw0KKwkJcmVzdWx0LmFwcGVuZCgiLCBkaXNlYXNlRGVhdGhzNDE6ICIpOw0KKwkJcmVzdWx0LmFwcGVuZChkaXNlYXNlRGVhdGhzNDEpOw0KKwkJcmVzdWx0LmFwcGVuZCgiLCBkaXNlYXNlRGVhdGhzMTM6ICIpOw0KKwkJcmVzdWx0LmFwcGVuZChkaXNlYXNlRGVhdGhzMTMpOw0KKwkJcmVzdWx0LmFwcGVuZCgiLCBkaXNlYXNlRGVhdGhzMjM6ICIpOw0KKwkJcmVzdWx0LmFwcGVuZChkaXNlYXNlRGVhdGhzMjMpOw0KKwkJcmVzdWx0LmFwcGVuZCgiLCBkaXNlYXNlRGVhdGhzMzI6ICIpOw0KKwkJcmVzdWx0LmFwcGVuZChkaXNlYXNlRGVhdGhzMzIpOw0KKwkJcmVzdWx0LmFwcGVuZCgiLCBkaXNlYXNlRGVhdGhzNDI6ICIpOw0KKwkJcmVzdWx0LmFwcGVuZChkaXNlYXNlRGVhdGhzNDIpOw0KKwkJcmVzdWx0LmFwcGVuZCgiLCBkaXNlYXNlRGVhdGhzMTQ6ICIpOw0KKwkJcmVzdWx0LmFwcGVuZChkaXNlYXNlRGVhdGhzMTQpOw0KKwkJcmVzdWx0LmFwcGVuZCgiLCBkaXNlYXNlRGVhdGhzMjQ6ICIpOw0KKwkJcmVzdWx0LmFwcGVuZChkaXNlYXNlRGVhdGhzMjQpOw0KKwkJcmVzdWx0LmFwcGVuZCgiLCBkaXNlYXNlRGVhdGhzMzQ6ICIpOw0KKwkJcmVzdWx0LmFwcGVuZChkaXNlYXNlRGVhdGhzMzQpOw0KKwkJcmVzdWx0LmFwcGVuZCgiLCBkaXNlYXNlRGVhdGhzNDM6ICIpOw0KKwkJcmVzdWx0LmFwcGVuZChkaXNlYXNlRGVhdGhzNDMpOw0KKwkJcmVzdWx0LmFwcGVuZCgnKScpOw0KKwkJcmV0dXJuIHJlc3VsdC50b1N0cmluZygpOw0KKwl9DQorDQorfSAvLyBEZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlSW1wbA0KZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3ZlY3Rvci9pbXBsL0Rlbmd1ZU1vZGVsSW1wbC5qYXZhIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvdmVjdG9yL2ltcGwvRGVuZ3VlTW9kZWxJbXBsLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDEzYWQ4MAotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3ZlY3Rvci9pbXBsL0Rlbmd1ZU1vZGVsSW1wbC5qYXZhCkBAIC0wLDAgKzEsNDgyNSBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLmltcGw7DQorDQorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisgKiBDb3B5cmlnaHQgKGMpIDIwMTEgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuDQorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscw0KKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMA0KKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0DQorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwNCisgKg0KKyAqIENvbnRyaWJ1dG9yczoNCisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uDQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQorDQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLkVMaXN0Ow0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuaW1wbC5FTm90aWZpY2F0aW9uSW1wbDsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkxhYmVsVmFsdWU7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5Ob2RlOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguTm9kZUxhYmVsOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuU1RFTVRpbWU7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5EaXNlYXNlTW9kZWxMYWJlbDsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLkRpc2Vhc2VNb2RlbExhYmVsVmFsdWU7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5JbmZlY3RvcjsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlNJSW5mZWN0b3I7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbFZhbHVlOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmRGYWN0b3J5Ow0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmRQYWNrYWdlOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLkRlbmd1ZU1vZGVsOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLkRlbmd1ZU1vZGVsSG9zdExhYmVsOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLkRlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWU7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWxWZWN0b3JMYWJlbDsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbFZlY3RvckxhYmVsVmFsdWU7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuVmVjdG9yRmFjdG9yeTsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5WZWN0b3JQYWNrYWdlOw0KKw0KKy8qKg0KKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IEFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJw0KKyAqIDxlbT48Yj5EZW5ndWUgTW9kZWw8L2I+PC9lbT4nLiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisgKiA8cD4NCisgKiBUaGUgZm9sbG93aW5nIGZlYXR1cmVzIGFyZSBpbXBsZW1lbnRlZDoNCisgKiA8dWw+DQorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuaW1wbC5EZW5ndWVNb2RlbEltcGwjZ2V0Qml0aW5nUmF0ZVNWIDxlbT5CaXRpbmcgUmF0ZSBTVjwvZW0+fTwvbGk+DQorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuaW1wbC5EZW5ndWVNb2RlbEltcGwjZ2V0Qml0aW5nUmF0ZUlWIDxlbT5CaXRpbmcgUmF0ZSBJVjwvZW0+fTwvbGk+DQorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuaW1wbC5EZW5ndWVNb2RlbEltcGwjZ2V0SG9zdEluZmVjdGl2aXR5MSA8ZW0+SG9zdCBJbmZlY3Rpdml0eTE8L2VtPn08L2xpPg0KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLmltcGwuRGVuZ3VlTW9kZWxJbXBsI2dldEhvc3RJbmZlY3Rpdml0eTIgPGVtPkhvc3QgSW5mZWN0aXZpdHkyPC9lbT59PC9saT4NCisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5pbXBsLkRlbmd1ZU1vZGVsSW1wbCNnZXRIb3N0SW5mZWN0aXZpdHkzIDxlbT5Ib3N0IEluZmVjdGl2aXR5MzwvZW0+fTwvbGk+DQorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuaW1wbC5EZW5ndWVNb2RlbEltcGwjZ2V0SG9zdEluZmVjdGl2aXR5NCA8ZW0+SG9zdCBJbmZlY3Rpdml0eTQ8L2VtPn08L2xpPg0KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLmltcGwuRGVuZ3VlTW9kZWxJbXBsI2dldEhvc3RQcmltYXJ5SW5jdWJhdGlvblJhdGUxIDxlbT5Ib3N0IFByaW1hcnkgSW5jdWJhdGlvbiBSYXRlMTwvZW0+fTwvbGk+DQorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuaW1wbC5EZW5ndWVNb2RlbEltcGwjZ2V0SG9zdFByaW1hcnlJbmN1YmF0aW9uUmF0ZTIgPGVtPkhvc3QgUHJpbWFyeSBJbmN1YmF0aW9uIFJhdGUyPC9lbT59PC9saT4NCisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5pbXBsLkRlbmd1ZU1vZGVsSW1wbCNnZXRIb3N0UHJpbWFyeUluY3ViYXRpb25SYXRlMyA8ZW0+SG9zdCBQcmltYXJ5IEluY3ViYXRpb24gUmF0ZTM8L2VtPn08L2xpPg0KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLmltcGwuRGVuZ3VlTW9kZWxJbXBsI2dldEhvc3RQcmltYXJ5SW5jdWJhdGlvblJhdGU0IDxlbT5Ib3N0IFByaW1hcnkgSW5jdWJhdGlvbiBSYXRlNDwvZW0+fTwvbGk+DQorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuaW1wbC5EZW5ndWVNb2RlbEltcGwjZ2V0SG9zdFByaW1hcnlSZWNvdmVyeVJhdGUxIDxlbT5Ib3N0IFByaW1hcnkgUmVjb3ZlcnkgUmF0ZTE8L2VtPn08L2xpPg0KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLmltcGwuRGVuZ3VlTW9kZWxJbXBsI2dldEhvc3RQcmltYXJ5UmVjb3ZlcnlSYXRlMiA8ZW0+SG9zdCBQcmltYXJ5IFJlY292ZXJ5IFJhdGUyPC9lbT59PC9saT4NCisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5pbXBsLkRlbmd1ZU1vZGVsSW1wbCNnZXRIb3N0UHJpbWFyeVJlY292ZXJ5UmF0ZTMgPGVtPkhvc3QgUHJpbWFyeSBSZWNvdmVyeSBSYXRlMzwvZW0+fTwvbGk+DQorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuaW1wbC5EZW5ndWVNb2RlbEltcGwjZ2V0SG9zdFByaW1hcnlSZWNvdmVyeVJhdGU0IDxlbT5Ib3N0IFByaW1hcnkgUmVjb3ZlcnkgUmF0ZTQ8L2VtPn08L2xpPg0KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLmltcGwuRGVuZ3VlTW9kZWxJbXBsI2dldEhvc3RQcmltYXJ5SW1tdW5pdHlMb3NzUmF0ZTEgPGVtPkhvc3QgUHJpbWFyeSBJbW11bml0eSBMb3NzIFJhdGUxPC9lbT59PC9saT4NCisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5pbXBsLkRlbmd1ZU1vZGVsSW1wbCNnZXRIb3N0UHJpbWFyeUltbXVuaXR5TG9zc1JhdGUyIDxlbT5Ib3N0IFByaW1hcnkgSW1tdW5pdHkgTG9zcyBSYXRlMjwvZW0+fTwvbGk+DQorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuaW1wbC5EZW5ndWVNb2RlbEltcGwjZ2V0SG9zdFByaW1hcnlJbW11bml0eUxvc3NSYXRlMyA8ZW0+SG9zdCBQcmltYXJ5IEltbXVuaXR5IExvc3MgUmF0ZTM8L2VtPn08L2xpPg0KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLmltcGwuRGVuZ3VlTW9kZWxJbXBsI2dldEhvc3RQcmltYXJ5SW1tdW5pdHlMb3NzUmF0ZTQgPGVtPkhvc3QgUHJpbWFyeSBJbW11bml0eSBMb3NzIFJhdGU0PC9lbT59PC9saT4NCisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5pbXBsLkRlbmd1ZU1vZGVsSW1wbCNnZXRIb3N0UHJpbWFyeURpc2Vhc2VEZWF0aFJhdGUxIDxlbT5Ib3N0IFByaW1hcnkgRGlzZWFzZSBEZWF0aCBSYXRlMTwvZW0+fTwvbGk+DQorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuaW1wbC5EZW5ndWVNb2RlbEltcGwjZ2V0SG9zdFByaW1hcnlEaXNlYXNlRGVhdGhSYXRlMiA8ZW0+SG9zdCBQcmltYXJ5IERpc2Vhc2UgRGVhdGggUmF0ZTI8L2VtPn08L2xpPg0KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLmltcGwuRGVuZ3VlTW9kZWxJbXBsI2dldEhvc3RQcmltYXJ5RGlzZWFzZURlYXRoUmF0ZTMgPGVtPkhvc3QgUHJpbWFyeSBEaXNlYXNlIERlYXRoIFJhdGUzPC9lbT59PC9saT4NCisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5pbXBsLkRlbmd1ZU1vZGVsSW1wbCNnZXRIb3N0UHJpbWFyeURpc2Vhc2VEZWF0aFJhdGU0IDxlbT5Ib3N0IFByaW1hcnkgRGlzZWFzZSBEZWF0aCBSYXRlNDwvZW0+fTwvbGk+DQorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuaW1wbC5EZW5ndWVNb2RlbEltcGwjZ2V0SG9zdEFERTEyIDxlbT5Ib3N0IEFERTEyPC9lbT59PC9saT4NCisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5pbXBsLkRlbmd1ZU1vZGVsSW1wbCNnZXRIb3N0QURFMTMgPGVtPkhvc3QgQURFMTM8L2VtPn08L2xpPg0KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLmltcGwuRGVuZ3VlTW9kZWxJbXBsI2dldEhvc3RBREUxNCA8ZW0+SG9zdCBBREUxNDwvZW0+fTwvbGk+DQorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuaW1wbC5EZW5ndWVNb2RlbEltcGwjZ2V0SG9zdEFERTIxIDxlbT5Ib3N0IEFERTIxPC9lbT59PC9saT4NCisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5pbXBsLkRlbmd1ZU1vZGVsSW1wbCNnZXRIb3N0QURFMjMgPGVtPkhvc3QgQURFMjM8L2VtPn08L2xpPg0KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLmltcGwuRGVuZ3VlTW9kZWxJbXBsI2dldEhvc3RBREUyNCA8ZW0+SG9zdCBBREUyNDwvZW0+fTwvbGk+DQorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuaW1wbC5EZW5ndWVNb2RlbEltcGwjZ2V0SG9zdEFERTMxIDxlbT5Ib3N0IEFERTMxPC9lbT59PC9saT4NCisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5pbXBsLkRlbmd1ZU1vZGVsSW1wbCNnZXRIb3N0QURFMzIgPGVtPkhvc3QgQURFMzI8L2VtPn08L2xpPg0KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLmltcGwuRGVuZ3VlTW9kZWxJbXBsI2dldEhvc3RBREUzNCA8ZW0+SG9zdCBBREUzNDwvZW0+fTwvbGk+DQorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuaW1wbC5EZW5ndWVNb2RlbEltcGwjZ2V0SG9zdEFERTQxIDxlbT5Ib3N0IEFERTQxPC9lbT59PC9saT4NCisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5pbXBsLkRlbmd1ZU1vZGVsSW1wbCNnZXRIb3N0QURFNDIgPGVtPkhvc3QgQURFNDI8L2VtPn08L2xpPg0KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLmltcGwuRGVuZ3VlTW9kZWxJbXBsI2dldEhvc3RBREU0MyA8ZW0+SG9zdCBBREU0MzwvZW0+fTwvbGk+DQorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuaW1wbC5EZW5ndWVNb2RlbEltcGwjZ2V0SG9zdFNlY29uZGFyeURpc2Vhc2VEZWF0aFJhdGUxMiA8ZW0+SG9zdCBTZWNvbmRhcnkgRGlzZWFzZSBEZWF0aCBSYXRlMTI8L2VtPn08L2xpPg0KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLmltcGwuRGVuZ3VlTW9kZWxJbXBsI2dldEhvc3RTZWNvbmRhcnlEaXNlYXNlRGVhdGhSYXRlMTMgPGVtPkhvc3QgU2Vjb25kYXJ5IERpc2Vhc2UgRGVhdGggUmF0ZTEzPC9lbT59PC9saT4NCisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5pbXBsLkRlbmd1ZU1vZGVsSW1wbCNnZXRIb3N0U2Vjb25kYXJ5RGlzZWFzZURlYXRoUmF0ZTE0IDxlbT5Ib3N0IFNlY29uZGFyeSBEaXNlYXNlIERlYXRoIFJhdGUxNDwvZW0+fTwvbGk+DQorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuaW1wbC5EZW5ndWVNb2RlbEltcGwjZ2V0SG9zdFNlY29uZGFyeURpc2Vhc2VEZWF0aFJhdGUyMSA8ZW0+SG9zdCBTZWNvbmRhcnkgRGlzZWFzZSBEZWF0aCBSYXRlMjE8L2VtPn08L2xpPg0KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLmltcGwuRGVuZ3VlTW9kZWxJbXBsI2dldEhvc3RTZWNvbmRhcnlEaXNlYXNlRGVhdGhSYXRlMjMgPGVtPkhvc3QgU2Vjb25kYXJ5IERpc2Vhc2UgRGVhdGggUmF0ZTIzPC9lbT59PC9saT4NCisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5pbXBsLkRlbmd1ZU1vZGVsSW1wbCNnZXRIb3N0U2Vjb25kYXJ5RGlzZWFzZURlYXRoUmF0ZTI0IDxlbT5Ib3N0IFNlY29uZGFyeSBEaXNlYXNlIERlYXRoIFJhdGUyNDwvZW0+fTwvbGk+DQorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuaW1wbC5EZW5ndWVNb2RlbEltcGwjZ2V0SG9zdFNlY29uZGFyeURpc2Vhc2VEZWF0aFJhdGUzMSA8ZW0+SG9zdCBTZWNvbmRhcnkgRGlzZWFzZSBEZWF0aCBSYXRlMzE8L2VtPn08L2xpPg0KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLmltcGwuRGVuZ3VlTW9kZWxJbXBsI2dldEhvc3RTZWNvbmRhcnlEaXNlYXNlRGVhdGhSYXRlMzIgPGVtPkhvc3QgU2Vjb25kYXJ5IERpc2Vhc2UgRGVhdGggUmF0ZTMyPC9lbT59PC9saT4NCisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5pbXBsLkRlbmd1ZU1vZGVsSW1wbCNnZXRIb3N0U2Vjb25kYXJ5RGlzZWFzZURlYXRoUmF0ZTM0IDxlbT5Ib3N0IFNlY29uZGFyeSBEaXNlYXNlIERlYXRoIFJhdGUzNDwvZW0+fTwvbGk+DQorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuaW1wbC5EZW5ndWVNb2RlbEltcGwjZ2V0SG9zdFNlY29uZGFyeURpc2Vhc2VEZWF0aFJhdGU0MSA8ZW0+SG9zdCBTZWNvbmRhcnkgRGlzZWFzZSBEZWF0aCBSYXRlNDE8L2VtPn08L2xpPg0KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLmltcGwuRGVuZ3VlTW9kZWxJbXBsI2dldEhvc3RTZWNvbmRhcnlEaXNlYXNlRGVhdGhSYXRlNDIgPGVtPkhvc3QgU2Vjb25kYXJ5IERpc2Vhc2UgRGVhdGggUmF0ZTQyPC9lbT59PC9saT4NCisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5pbXBsLkRlbmd1ZU1vZGVsSW1wbCNnZXRIb3N0U2Vjb25kYXJ5RGlzZWFzZURlYXRoUmF0ZTQzIDxlbT5Ib3N0IFNlY29uZGFyeSBEaXNlYXNlIERlYXRoIFJhdGU0MzwvZW0+fTwvbGk+DQorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuaW1wbC5EZW5ndWVNb2RlbEltcGwjZ2V0SG9zdFNlY29uZGFyeVJlY292ZXJ5UmF0ZTEyIDxlbT5Ib3N0IFNlY29uZGFyeSBSZWNvdmVyeSBSYXRlMTI8L2VtPn08L2xpPg0KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLmltcGwuRGVuZ3VlTW9kZWxJbXBsI2dldEhvc3RTZWNvbmRhcnlSZWNvdmVyeVJhdGUxMyA8ZW0+SG9zdCBTZWNvbmRhcnkgUmVjb3ZlcnkgUmF0ZTEzPC9lbT59PC9saT4NCisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5pbXBsLkRlbmd1ZU1vZGVsSW1wbCNnZXRIb3N0U2Vjb25kYXJ5UmVjb3ZlcnlSYXRlMTQgPGVtPkhvc3QgU2Vjb25kYXJ5IFJlY292ZXJ5IFJhdGUxNDwvZW0+fTwvbGk+DQorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuaW1wbC5EZW5ndWVNb2RlbEltcGwjZ2V0SG9zdFNlY29uZGFyeVJlY292ZXJ5UmF0ZTIxIDxlbT5Ib3N0IFNlY29uZGFyeSBSZWNvdmVyeSBSYXRlMjE8L2VtPn08L2xpPg0KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLmltcGwuRGVuZ3VlTW9kZWxJbXBsI2dldEhvc3RTZWNvbmRhcnlSZWNvdmVyeVJhdGUyMyA8ZW0+SG9zdCBTZWNvbmRhcnkgUmVjb3ZlcnkgUmF0ZTIzPC9lbT59PC9saT4NCisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5pbXBsLkRlbmd1ZU1vZGVsSW1wbCNnZXRIb3N0U2Vjb25kYXJ5UmVjb3ZlcnlSYXRlMjQgPGVtPkhvc3QgU2Vjb25kYXJ5IFJlY292ZXJ5IFJhdGUyNDwvZW0+fTwvbGk+DQorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuaW1wbC5EZW5ndWVNb2RlbEltcGwjZ2V0SG9zdFNlY29uZGFyeVJlY292ZXJ5UmF0ZTMxIDxlbT5Ib3N0IFNlY29uZGFyeSBSZWNvdmVyeSBSYXRlMzE8L2VtPn08L2xpPg0KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLmltcGwuRGVuZ3VlTW9kZWxJbXBsI2dldEhvc3RTZWNvbmRhcnlSZWNvdmVyeVJhdGUzMiA8ZW0+SG9zdCBTZWNvbmRhcnkgUmVjb3ZlcnkgUmF0ZTMyPC9lbT59PC9saT4NCisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5pbXBsLkRlbmd1ZU1vZGVsSW1wbCNnZXRIb3N0U2Vjb25kYXJ5UmVjb3ZlcnlSYXRlMzQgPGVtPkhvc3QgU2Vjb25kYXJ5IFJlY292ZXJ5IFJhdGUzNDwvZW0+fTwvbGk+DQorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuaW1wbC5EZW5ndWVNb2RlbEltcGwjZ2V0SG9zdFNlY29uZGFyeVJlY292ZXJ5UmF0ZTQxIDxlbT5Ib3N0IFNlY29uZGFyeSBSZWNvdmVyeSBSYXRlNDE8L2VtPn08L2xpPg0KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLmltcGwuRGVuZ3VlTW9kZWxJbXBsI2dldEhvc3RTZWNvbmRhcnlSZWNvdmVyeVJhdGU0MiA8ZW0+SG9zdCBTZWNvbmRhcnkgUmVjb3ZlcnkgUmF0ZTQyPC9lbT59PC9saT4NCisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5pbXBsLkRlbmd1ZU1vZGVsSW1wbCNnZXRIb3N0U2Vjb25kYXJ5UmVjb3ZlcnlSYXRlNDMgPGVtPkhvc3QgU2Vjb25kYXJ5IFJlY292ZXJ5IFJhdGU0MzwvZW0+fTwvbGk+DQorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuaW1wbC5EZW5ndWVNb2RlbEltcGwjZ2V0SG9zdFNlY29uZGFyeUluY3ViYXRpb25SYXRlMTIgPGVtPkhvc3QgU2Vjb25kYXJ5IEluY3ViYXRpb24gUmF0ZTEyPC9lbT59PC9saT4NCisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5pbXBsLkRlbmd1ZU1vZGVsSW1wbCNnZXRIb3N0U2Vjb25kYXJ5SW5jdWJhdGlvblJhdGUxMyA8ZW0+SG9zdCBTZWNvbmRhcnkgSW5jdWJhdGlvbiBSYXRlMTM8L2VtPn08L2xpPg0KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLmltcGwuRGVuZ3VlTW9kZWxJbXBsI2dldEhvc3RTZWNvbmRhcnlJbmN1YmF0aW9uUmF0ZTE0IDxlbT5Ib3N0IFNlY29uZGFyeSBJbmN1YmF0aW9uIFJhdGUxNDwvZW0+fTwvbGk+DQorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuaW1wbC5EZW5ndWVNb2RlbEltcGwjZ2V0SG9zdFNlY29uZGFyeUluY3ViYXRpb25SYXRlMjEgPGVtPkhvc3QgU2Vjb25kYXJ5IEluY3ViYXRpb24gUmF0ZTIxPC9lbT59PC9saT4NCisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5pbXBsLkRlbmd1ZU1vZGVsSW1wbCNnZXRIb3N0U2Vjb25kYXJ5SW5jdWJhdGlvblJhdGUyMyA8ZW0+SG9zdCBTZWNvbmRhcnkgSW5jdWJhdGlvbiBSYXRlMjM8L2VtPn08L2xpPg0KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLmltcGwuRGVuZ3VlTW9kZWxJbXBsI2dldEhvc3RTZWNvbmRhcnlJbmN1YmF0aW9uUmF0ZTI0IDxlbT5Ib3N0IFNlY29uZGFyeSBJbmN1YmF0aW9uIFJhdGUyNDwvZW0+fTwvbGk+DQorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuaW1wbC5EZW5ndWVNb2RlbEltcGwjZ2V0SG9zdFNlY29uZGFyeUluY3ViYXRpb25SYXRlMzEgPGVtPkhvc3QgU2Vjb25kYXJ5IEluY3ViYXRpb24gUmF0ZTMxPC9lbT59PC9saT4NCisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5pbXBsLkRlbmd1ZU1vZGVsSW1wbCNnZXRIb3N0U2Vjb25kYXJ5SW5jdWJhdGlvblJhdGUzMiA8ZW0+SG9zdCBTZWNvbmRhcnkgSW5jdWJhdGlvbiBSYXRlMzI8L2VtPn08L2xpPg0KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLmltcGwuRGVuZ3VlTW9kZWxJbXBsI2dldEhvc3RTZWNvbmRhcnlJbmN1YmF0aW9uUmF0ZTM0IDxlbT5Ib3N0IFNlY29uZGFyeSBJbmN1YmF0aW9uIFJhdGUzNDwvZW0+fTwvbGk+DQorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuaW1wbC5EZW5ndWVNb2RlbEltcGwjZ2V0SG9zdFNlY29uZGFyeUluY3ViYXRpb25SYXRlNDEgPGVtPkhvc3QgU2Vjb25kYXJ5IEluY3ViYXRpb24gUmF0ZTQxPC9lbT59PC9saT4NCisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5pbXBsLkRlbmd1ZU1vZGVsSW1wbCNnZXRIb3N0U2Vjb25kYXJ5SW5jdWJhdGlvblJhdGU0MiA8ZW0+SG9zdCBTZWNvbmRhcnkgSW5jdWJhdGlvbiBSYXRlNDI8L2VtPn08L2xpPg0KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLmltcGwuRGVuZ3VlTW9kZWxJbXBsI2dldEhvc3RTZWNvbmRhcnlJbmN1YmF0aW9uUmF0ZTQzIDxlbT5Ib3N0IFNlY29uZGFyeSBJbmN1YmF0aW9uIFJhdGU0MzwvZW0+fTwvbGk+DQorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuaW1wbC5EZW5ndWVNb2RlbEltcGwjZ2V0VmVjdG9ySW5mZWN0aXZpdHkxIDxlbT5WZWN0b3IgSW5mZWN0aXZpdHkxPC9lbT59PC9saT4NCisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5pbXBsLkRlbmd1ZU1vZGVsSW1wbCNnZXRWZWN0b3JJbmZlY3Rpdml0eTIgPGVtPlZlY3RvciBJbmZlY3Rpdml0eTI8L2VtPn08L2xpPg0KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLmltcGwuRGVuZ3VlTW9kZWxJbXBsI2dldFZlY3RvckluZmVjdGl2aXR5MyA8ZW0+VmVjdG9yIEluZmVjdGl2aXR5MzwvZW0+fTwvbGk+DQorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuaW1wbC5EZW5ndWVNb2RlbEltcGwjZ2V0VmVjdG9ySW5mZWN0aXZpdHk0IDxlbT5WZWN0b3IgSW5mZWN0aXZpdHk0PC9lbT59PC9saT4NCisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5pbXBsLkRlbmd1ZU1vZGVsSW1wbCNnZXRWZWN0b3JBREUxIDxlbT5WZWN0b3IgQURFMTwvZW0+fTwvbGk+DQorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuaW1wbC5EZW5ndWVNb2RlbEltcGwjZ2V0VmVjdG9yQURFMiA8ZW0+VmVjdG9yIEFERTI8L2VtPn08L2xpPg0KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLmltcGwuRGVuZ3VlTW9kZWxJbXBsI2dldFZlY3RvckFERTMgPGVtPlZlY3RvciBBREUzPC9lbT59PC9saT4NCisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5pbXBsLkRlbmd1ZU1vZGVsSW1wbCNnZXRWZWN0b3JBREU0IDxlbT5WZWN0b3IgQURFNDwvZW0+fTwvbGk+DQorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuaW1wbC5EZW5ndWVNb2RlbEltcGwjZ2V0VmVjdG9ySW5jdWJhdGlvblJhdGUxIDxlbT5WZWN0b3IgSW5jdWJhdGlvbiBSYXRlMTwvZW0+fTwvbGk+DQorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuaW1wbC5EZW5ndWVNb2RlbEltcGwjZ2V0VmVjdG9ySW5jdWJhdGlvblJhdGUyIDxlbT5WZWN0b3IgSW5jdWJhdGlvbiBSYXRlMjwvZW0+fTwvbGk+DQorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuaW1wbC5EZW5ndWVNb2RlbEltcGwjZ2V0VmVjdG9ySW5jdWJhdGlvblJhdGUzIDxlbT5WZWN0b3IgSW5jdWJhdGlvbiBSYXRlMzwvZW0+fTwvbGk+DQorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuaW1wbC5EZW5ndWVNb2RlbEltcGwjZ2V0VmVjdG9ySW5jdWJhdGlvblJhdGU0IDxlbT5WZWN0b3IgSW5jdWJhdGlvbiBSYXRlNDwvZW0+fTwvbGk+DQorICogPC91bD4NCisgKiA8L3A+DQorICoNCisgKiBAZ2VuZXJhdGVkDQorICovDQorcHVibGljIGNsYXNzIERlbmd1ZU1vZGVsSW1wbCBleHRlbmRzIFZlY3RvckRpc2Vhc2VNb2RlbEltcGwgaW1wbGVtZW50cw0KKwkJRGVuZ3VlTW9kZWwgew0KKwkvKioNCisJICogVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldEJpdGluZ1JhdGVTVigpIDxlbT5CaXRpbmcgUmF0ZSBTVjwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tDQorCSAqIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHNlZSAjZ2V0Qml0aW5nUmF0ZVNWKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBkb3VibGUgQklUSU5HX1JBVEVfU1ZfRURFRkFVTFQgPSAxLjA7DQorCS8qKg0KKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRCaXRpbmdSYXRlU1YoKSA8ZW0+Qml0aW5nIFJhdGUgU1Y8L2VtPn0nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLQ0KKwkgKiBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBzZWUgI2dldEJpdGluZ1JhdGVTVigpDQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCXByb3RlY3RlZCBkb3VibGUgYml0aW5nUmF0ZVNWID0gQklUSU5HX1JBVEVfU1ZfRURFRkFVTFQ7DQorCS8qKg0KKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0Qml0aW5nUmF0ZUlWKCkgPGVtPkJpdGluZyBSYXRlIElWPC9lbT59JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0NCisJICogZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAc2VlICNnZXRCaXRpbmdSYXRlSVYoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqIEBvcmRlcmVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIGRvdWJsZSBCSVRJTkdfUkFURV9JVl9FREVGQVVMVCA9IDEuMDsNCisJLyoqDQorCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldEJpdGluZ1JhdGVJVigpIDxlbT5CaXRpbmcgUmF0ZSBJVjwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tDQorCSAqIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHNlZSAjZ2V0Qml0aW5nUmF0ZUlWKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJcHJvdGVjdGVkIGRvdWJsZSBiaXRpbmdSYXRlSVYgPSBCSVRJTkdfUkFURV9JVl9FREVGQVVMVDsNCisJLyoqDQorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRIb3N0SW5mZWN0aXZpdHkxKCkgPGVtPkhvc3QgSW5mZWN0aXZpdHkxPC9lbT59JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0NCisJICogZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAc2VlICNnZXRIb3N0SW5mZWN0aXZpdHkxKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBkb3VibGUgSE9TVF9JTkZFQ1RJVklUWTFfRURFRkFVTFQgPSAwLjU7DQorCS8qKg0KKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRIb3N0SW5mZWN0aXZpdHkxKCkgPGVtPkhvc3QgSW5mZWN0aXZpdHkxPC9lbT59JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0NCisJICogZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAc2VlICNnZXRIb3N0SW5mZWN0aXZpdHkxKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJcHJvdGVjdGVkIGRvdWJsZSBob3N0SW5mZWN0aXZpdHkxID0gSE9TVF9JTkZFQ1RJVklUWTFfRURFRkFVTFQ7DQorCS8qKg0KKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0SG9zdEluZmVjdGl2aXR5MigpIDxlbT5Ib3N0IEluZmVjdGl2aXR5MjwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tDQorCSAqIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHNlZSAjZ2V0SG9zdEluZmVjdGl2aXR5MigpDQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgZG91YmxlIEhPU1RfSU5GRUNUSVZJVFkyX0VERUZBVUxUID0gMC41Ow0KKwkvKioNCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0SG9zdEluZmVjdGl2aXR5MigpIDxlbT5Ib3N0IEluZmVjdGl2aXR5MjwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tDQorCSAqIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHNlZSAjZ2V0SG9zdEluZmVjdGl2aXR5MigpDQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCXByb3RlY3RlZCBkb3VibGUgaG9zdEluZmVjdGl2aXR5MiA9IEhPU1RfSU5GRUNUSVZJVFkyX0VERUZBVUxUOw0KKwkvKioNCisJICogVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldEhvc3RJbmZlY3Rpdml0eTMoKSA8ZW0+SG9zdCBJbmZlY3Rpdml0eTM8L2VtPn0nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLQ0KKwkgKiBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBzZWUgI2dldEhvc3RJbmZlY3Rpdml0eTMoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqIEBvcmRlcmVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIGRvdWJsZSBIT1NUX0lORkVDVElWSVRZM19FREVGQVVMVCA9IDAuNTsNCisJLyoqDQorCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldEhvc3RJbmZlY3Rpdml0eTMoKSA8ZW0+SG9zdCBJbmZlY3Rpdml0eTM8L2VtPn0nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLQ0KKwkgKiBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBzZWUgI2dldEhvc3RJbmZlY3Rpdml0eTMoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqIEBvcmRlcmVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgZG91YmxlIGhvc3RJbmZlY3Rpdml0eTMgPSBIT1NUX0lORkVDVElWSVRZM19FREVGQVVMVDsNCisJLyoqDQorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRIb3N0SW5mZWN0aXZpdHk0KCkgPGVtPkhvc3QgSW5mZWN0aXZpdHk0PC9lbT59JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0NCisJICogZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAc2VlICNnZXRIb3N0SW5mZWN0aXZpdHk0KCkNCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBkb3VibGUgSE9TVF9JTkZFQ1RJVklUWTRfRURFRkFVTFQgPSAwLjU7DQorCS8qKg0KKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRIb3N0SW5mZWN0aXZpdHk0KCkgPGVtPkhvc3QgSW5mZWN0aXZpdHk0PC9lbT59JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0NCisJICogZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAc2VlICNnZXRIb3N0SW5mZWN0aXZpdHk0KCkNCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJcHJvdGVjdGVkIGRvdWJsZSBob3N0SW5mZWN0aXZpdHk0ID0gSE9TVF9JTkZFQ1RJVklUWTRfRURFRkFVTFQ7DQorCS8qKg0KKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0SG9zdFByaW1hcnlJbmN1YmF0aW9uUmF0ZTEoKSA8ZW0+SG9zdCBQcmltYXJ5IEluY3ViYXRpb24gUmF0ZTE8L2VtPn0nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYw0KKwkgKiAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBzZWUgI2dldEhvc3RQcmltYXJ5SW5jdWJhdGlvblJhdGUxKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBkb3VibGUgSE9TVF9QUklNQVJZX0lOQ1VCQVRJT05fUkFURTFfRURFRkFVTFQgPSAwLjI7DQorCS8qKg0KKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRIb3N0UHJpbWFyeUluY3ViYXRpb25SYXRlMSgpIDxlbT5Ib3N0IFByaW1hcnkgSW5jdWJhdGlvbiBSYXRlMTwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jDQorCSAqIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHNlZSAjZ2V0SG9zdFByaW1hcnlJbmN1YmF0aW9uUmF0ZTEoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqIEBvcmRlcmVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgZG91YmxlIGhvc3RQcmltYXJ5SW5jdWJhdGlvblJhdGUxID0gSE9TVF9QUklNQVJZX0lOQ1VCQVRJT05fUkFURTFfRURFRkFVTFQ7DQorCS8qKg0KKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0SG9zdFByaW1hcnlJbmN1YmF0aW9uUmF0ZTIoKSA8ZW0+SG9zdCBQcmltYXJ5IEluY3ViYXRpb24gUmF0ZTI8L2VtPn0nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYw0KKwkgKiAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBzZWUgI2dldEhvc3RQcmltYXJ5SW5jdWJhdGlvblJhdGUyKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBkb3VibGUgSE9TVF9QUklNQVJZX0lOQ1VCQVRJT05fUkFURTJfRURFRkFVTFQgPSAwLjI7DQorCS8qKg0KKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRIb3N0UHJpbWFyeUluY3ViYXRpb25SYXRlMigpIDxlbT5Ib3N0IFByaW1hcnkgSW5jdWJhdGlvbiBSYXRlMjwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jDQorCSAqIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHNlZSAjZ2V0SG9zdFByaW1hcnlJbmN1YmF0aW9uUmF0ZTIoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqIEBvcmRlcmVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgZG91YmxlIGhvc3RQcmltYXJ5SW5jdWJhdGlvblJhdGUyID0gSE9TVF9QUklNQVJZX0lOQ1VCQVRJT05fUkFURTJfRURFRkFVTFQ7DQorCS8qKg0KKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0SG9zdFByaW1hcnlJbmN1YmF0aW9uUmF0ZTMoKSA8ZW0+SG9zdCBQcmltYXJ5IEluY3ViYXRpb24gUmF0ZTM8L2VtPn0nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYw0KKwkgKiAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBzZWUgI2dldEhvc3RQcmltYXJ5SW5jdWJhdGlvblJhdGUzKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBkb3VibGUgSE9TVF9QUklNQVJZX0lOQ1VCQVRJT05fUkFURTNfRURFRkFVTFQgPSAwLjI7DQorCS8qKg0KKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRIb3N0UHJpbWFyeUluY3ViYXRpb25SYXRlMygpIDxlbT5Ib3N0IFByaW1hcnkgSW5jdWJhdGlvbiBSYXRlMzwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jDQorCSAqIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHNlZSAjZ2V0SG9zdFByaW1hcnlJbmN1YmF0aW9uUmF0ZTMoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqIEBvcmRlcmVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgZG91YmxlIGhvc3RQcmltYXJ5SW5jdWJhdGlvblJhdGUzID0gSE9TVF9QUklNQVJZX0lOQ1VCQVRJT05fUkFURTNfRURFRkFVTFQ7DQorCS8qKg0KKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0SG9zdFByaW1hcnlJbmN1YmF0aW9uUmF0ZTQoKSA8ZW0+SG9zdCBQcmltYXJ5IEluY3ViYXRpb24gUmF0ZTQ8L2VtPn0nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYw0KKwkgKiAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBzZWUgI2dldEhvc3RQcmltYXJ5SW5jdWJhdGlvblJhdGU0KCkNCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBkb3VibGUgSE9TVF9QUklNQVJZX0lOQ1VCQVRJT05fUkFURTRfRURFRkFVTFQgPSAwLjI7DQorCS8qKg0KKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRIb3N0UHJpbWFyeUluY3ViYXRpb25SYXRlNCgpIDxlbT5Ib3N0IFByaW1hcnkgSW5jdWJhdGlvbiBSYXRlNDwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jDQorCSAqIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHNlZSAjZ2V0SG9zdFByaW1hcnlJbmN1YmF0aW9uUmF0ZTQoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqIEBvcmRlcmVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgZG91YmxlIGhvc3RQcmltYXJ5SW5jdWJhdGlvblJhdGU0ID0gSE9TVF9QUklNQVJZX0lOQ1VCQVRJT05fUkFURTRfRURFRkFVTFQ7DQorCS8qKg0KKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0SG9zdFByaW1hcnlSZWNvdmVyeVJhdGUxKCkgPGVtPkhvc3QgUHJpbWFyeSBSZWNvdmVyeSBSYXRlMTwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHNlZSAjZ2V0SG9zdFByaW1hcnlSZWNvdmVyeVJhdGUxKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBkb3VibGUgSE9TVF9QUklNQVJZX1JFQ09WRVJZX1JBVEUxX0VERUZBVUxUID0gMC4xNDsNCisJLyoqDQorCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldEhvc3RQcmltYXJ5UmVjb3ZlcnlSYXRlMSgpIDxlbT5Ib3N0IFByaW1hcnkgUmVjb3ZlcnkgUmF0ZTE8L2VtPn0nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBzZWUgI2dldEhvc3RQcmltYXJ5UmVjb3ZlcnlSYXRlMSgpDQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCXByb3RlY3RlZCBkb3VibGUgaG9zdFByaW1hcnlSZWNvdmVyeVJhdGUxID0gSE9TVF9QUklNQVJZX1JFQ09WRVJZX1JBVEUxX0VERUZBVUxUOw0KKwkvKioNCisJICogVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldEhvc3RQcmltYXJ5UmVjb3ZlcnlSYXRlMigpIDxlbT5Ib3N0IFByaW1hcnkgUmVjb3ZlcnkgUmF0ZTI8L2VtPn0nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBzZWUgI2dldEhvc3RQcmltYXJ5UmVjb3ZlcnlSYXRlMigpDQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgZG91YmxlIEhPU1RfUFJJTUFSWV9SRUNPVkVSWV9SQVRFMl9FREVGQVVMVCA9IDAuMTQ7DQorCS8qKg0KKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRIb3N0UHJpbWFyeVJlY292ZXJ5UmF0ZTIoKSA8ZW0+SG9zdCBQcmltYXJ5IFJlY292ZXJ5IFJhdGUyPC9lbT59JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAc2VlICNnZXRIb3N0UHJpbWFyeVJlY292ZXJ5UmF0ZTIoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqIEBvcmRlcmVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgZG91YmxlIGhvc3RQcmltYXJ5UmVjb3ZlcnlSYXRlMiA9IEhPU1RfUFJJTUFSWV9SRUNPVkVSWV9SQVRFMl9FREVGQVVMVDsNCisJLyoqDQorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRIb3N0UHJpbWFyeVJlY292ZXJ5UmF0ZTMoKSA8ZW0+SG9zdCBQcmltYXJ5IFJlY292ZXJ5IFJhdGUzPC9lbT59JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAc2VlICNnZXRIb3N0UHJpbWFyeVJlY292ZXJ5UmF0ZTMoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqIEBvcmRlcmVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIGRvdWJsZSBIT1NUX1BSSU1BUllfUkVDT1ZFUllfUkFURTNfRURFRkFVTFQgPSAwLjE0Ow0KKwkvKioNCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0SG9zdFByaW1hcnlSZWNvdmVyeVJhdGUzKCkgPGVtPkhvc3QgUHJpbWFyeSBSZWNvdmVyeSBSYXRlMzwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHNlZSAjZ2V0SG9zdFByaW1hcnlSZWNvdmVyeVJhdGUzKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJcHJvdGVjdGVkIGRvdWJsZSBob3N0UHJpbWFyeVJlY292ZXJ5UmF0ZTMgPSBIT1NUX1BSSU1BUllfUkVDT1ZFUllfUkFURTNfRURFRkFVTFQ7DQorCS8qKg0KKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0SG9zdFByaW1hcnlSZWNvdmVyeVJhdGU0KCkgPGVtPkhvc3QgUHJpbWFyeSBSZWNvdmVyeSBSYXRlNDwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHNlZSAjZ2V0SG9zdFByaW1hcnlSZWNvdmVyeVJhdGU0KCkNCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBkb3VibGUgSE9TVF9QUklNQVJZX1JFQ09WRVJZX1JBVEU0X0VERUZBVUxUID0gMC4xNDsNCisJLyoqDQorCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldEhvc3RQcmltYXJ5UmVjb3ZlcnlSYXRlNCgpIDxlbT5Ib3N0IFByaW1hcnkgUmVjb3ZlcnkgUmF0ZTQ8L2VtPn0nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBzZWUgI2dldEhvc3RQcmltYXJ5UmVjb3ZlcnlSYXRlNCgpDQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCXByb3RlY3RlZCBkb3VibGUgaG9zdFByaW1hcnlSZWNvdmVyeVJhdGU0ID0gSE9TVF9QUklNQVJZX1JFQ09WRVJZX1JBVEU0X0VERUZBVUxUOw0KKwkvKioNCisJICogVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldEhvc3RQcmltYXJ5SW1tdW5pdHlMb3NzUmF0ZTEoKQ0KKwkgKiA8ZW0+SG9zdCBQcmltYXJ5IEltbXVuaXR5IExvc3MgUmF0ZTE8L2VtPn0nIGF0dHJpYnV0ZS4gPCEtLQ0KKwkgKiBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIA0KKwkgKiBAc2VlICNnZXRIb3N0UHJpbWFyeUltbXVuaXR5TG9zc1JhdGUxKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBkb3VibGUgSE9TVF9QUklNQVJZX0lNTVVOSVRZX0xPU1NfUkFURTFfRURFRkFVTFQgPSAwLjAyNDsNCisJLyoqDQorCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldEhvc3RQcmltYXJ5SW1tdW5pdHlMb3NzUmF0ZTEoKQ0KKwkgKiA8ZW0+SG9zdCBQcmltYXJ5IEltbXVuaXR5IExvc3MgUmF0ZTE8L2VtPn0nIGF0dHJpYnV0ZS4gPCEtLQ0KKwkgKiBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIA0KKwkgKiBAc2VlICNnZXRIb3N0UHJpbWFyeUltbXVuaXR5TG9zc1JhdGUxKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJcHJvdGVjdGVkIGRvdWJsZSBob3N0UHJpbWFyeUltbXVuaXR5TG9zc1JhdGUxID0gSE9TVF9QUklNQVJZX0lNTVVOSVRZX0xPU1NfUkFURTFfRURFRkFVTFQ7DQorCS8qKg0KKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0SG9zdFByaW1hcnlJbW11bml0eUxvc3NSYXRlMigpDQorCSAqIDxlbT5Ib3N0IFByaW1hcnkgSW1tdW5pdHkgTG9zcyBSYXRlMjwvZW0+fScgYXR0cmlidXRlLiA8IS0tDQorCSAqIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogDQorCSAqIEBzZWUgI2dldEhvc3RQcmltYXJ5SW1tdW5pdHlMb3NzUmF0ZTIoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqIEBvcmRlcmVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIGRvdWJsZSBIT1NUX1BSSU1BUllfSU1NVU5JVFlfTE9TU19SQVRFMl9FREVGQVVMVCA9IDAuMDI0Ow0KKwkvKioNCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0SG9zdFByaW1hcnlJbW11bml0eUxvc3NSYXRlMigpDQorCSAqIDxlbT5Ib3N0IFByaW1hcnkgSW1tdW5pdHkgTG9zcyBSYXRlMjwvZW0+fScgYXR0cmlidXRlLiA8IS0tDQorCSAqIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogDQorCSAqIEBzZWUgI2dldEhvc3RQcmltYXJ5SW1tdW5pdHlMb3NzUmF0ZTIoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqIEBvcmRlcmVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgZG91YmxlIGhvc3RQcmltYXJ5SW1tdW5pdHlMb3NzUmF0ZTIgPSBIT1NUX1BSSU1BUllfSU1NVU5JVFlfTE9TU19SQVRFMl9FREVGQVVMVDsNCisJLyoqDQorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRIb3N0UHJpbWFyeUltbXVuaXR5TG9zc1JhdGUzKCkNCisJICogPGVtPkhvc3QgUHJpbWFyeSBJbW11bml0eSBMb3NzIFJhdGUzPC9lbT59JyBhdHRyaWJ1dGUuIDwhLS0NCisJICogYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiANCisJICogQHNlZSAjZ2V0SG9zdFByaW1hcnlJbW11bml0eUxvc3NSYXRlMygpDQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgZG91YmxlIEhPU1RfUFJJTUFSWV9JTU1VTklUWV9MT1NTX1JBVEUzX0VERUZBVUxUID0gMC4wMjQ7DQorCS8qKg0KKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRIb3N0UHJpbWFyeUltbXVuaXR5TG9zc1JhdGUzKCkNCisJICogPGVtPkhvc3QgUHJpbWFyeSBJbW11bml0eSBMb3NzIFJhdGUzPC9lbT59JyBhdHRyaWJ1dGUuIDwhLS0NCisJICogYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiANCisJICogQHNlZSAjZ2V0SG9zdFByaW1hcnlJbW11bml0eUxvc3NSYXRlMygpDQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCXByb3RlY3RlZCBkb3VibGUgaG9zdFByaW1hcnlJbW11bml0eUxvc3NSYXRlMyA9IEhPU1RfUFJJTUFSWV9JTU1VTklUWV9MT1NTX1JBVEUzX0VERUZBVUxUOw0KKwkvKioNCisJICogVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldEhvc3RQcmltYXJ5SW1tdW5pdHlMb3NzUmF0ZTQoKQ0KKwkgKiA8ZW0+SG9zdCBQcmltYXJ5IEltbXVuaXR5IExvc3MgUmF0ZTQ8L2VtPn0nIGF0dHJpYnV0ZS4gPCEtLQ0KKwkgKiBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIA0KKwkgKiBAc2VlICNnZXRIb3N0UHJpbWFyeUltbXVuaXR5TG9zc1JhdGU0KCkNCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBkb3VibGUgSE9TVF9QUklNQVJZX0lNTVVOSVRZX0xPU1NfUkFURTRfRURFRkFVTFQgPSAwLjAyNDsNCisJLyoqDQorCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldEhvc3RQcmltYXJ5SW1tdW5pdHlMb3NzUmF0ZTQoKQ0KKwkgKiA8ZW0+SG9zdCBQcmltYXJ5IEltbXVuaXR5IExvc3MgUmF0ZTQ8L2VtPn0nIGF0dHJpYnV0ZS4gPCEtLQ0KKwkgKiBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIA0KKwkgKiBAc2VlICNnZXRIb3N0UHJpbWFyeUltbXVuaXR5TG9zc1JhdGU0KCkNCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJcHJvdGVjdGVkIGRvdWJsZSBob3N0UHJpbWFyeUltbXVuaXR5TG9zc1JhdGU0ID0gSE9TVF9QUklNQVJZX0lNTVVOSVRZX0xPU1NfUkFURTRfRURFRkFVTFQ7DQorCS8qKg0KKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0SG9zdFByaW1hcnlEaXNlYXNlRGVhdGhSYXRlMSgpDQorCSAqIDxlbT5Ib3N0IFByaW1hcnkgRGlzZWFzZSBEZWF0aCBSYXRlMTwvZW0+fScgYXR0cmlidXRlLiA8IS0tDQorCSAqIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogDQorCSAqIEBzZWUgI2dldEhvc3RQcmltYXJ5RGlzZWFzZURlYXRoUmF0ZTEoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqIEBvcmRlcmVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIGRvdWJsZSBIT1NUX1BSSU1BUllfRElTRUFTRV9ERUFUSF9SQVRFMV9FREVGQVVMVCA9IDEuMEUtNzsNCisJLyoqDQorCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldEhvc3RQcmltYXJ5RGlzZWFzZURlYXRoUmF0ZTEoKQ0KKwkgKiA8ZW0+SG9zdCBQcmltYXJ5IERpc2Vhc2UgRGVhdGggUmF0ZTE8L2VtPn0nIGF0dHJpYnV0ZS4gPCEtLQ0KKwkgKiBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIA0KKwkgKiBAc2VlICNnZXRIb3N0UHJpbWFyeURpc2Vhc2VEZWF0aFJhdGUxKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJcHJvdGVjdGVkIGRvdWJsZSBob3N0UHJpbWFyeURpc2Vhc2VEZWF0aFJhdGUxID0gSE9TVF9QUklNQVJZX0RJU0VBU0VfREVBVEhfUkFURTFfRURFRkFVTFQ7DQorCS8qKg0KKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0SG9zdFByaW1hcnlEaXNlYXNlRGVhdGhSYXRlMigpDQorCSAqIDxlbT5Ib3N0IFByaW1hcnkgRGlzZWFzZSBEZWF0aCBSYXRlMjwvZW0+fScgYXR0cmlidXRlLiA8IS0tDQorCSAqIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogDQorCSAqIEBzZWUgI2dldEhvc3RQcmltYXJ5RGlzZWFzZURlYXRoUmF0ZTIoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqIEBvcmRlcmVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIGRvdWJsZSBIT1NUX1BSSU1BUllfRElTRUFTRV9ERUFUSF9SQVRFMl9FREVGQVVMVCA9IDEuMEUtNzsNCisJLyoqDQorCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldEhvc3RQcmltYXJ5RGlzZWFzZURlYXRoUmF0ZTIoKQ0KKwkgKiA8ZW0+SG9zdCBQcmltYXJ5IERpc2Vhc2UgRGVhdGggUmF0ZTI8L2VtPn0nIGF0dHJpYnV0ZS4gPCEtLQ0KKwkgKiBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIA0KKwkgKiBAc2VlICNnZXRIb3N0UHJpbWFyeURpc2Vhc2VEZWF0aFJhdGUyKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJcHJvdGVjdGVkIGRvdWJsZSBob3N0UHJpbWFyeURpc2Vhc2VEZWF0aFJhdGUyID0gSE9TVF9QUklNQVJZX0RJU0VBU0VfREVBVEhfUkFURTJfRURFRkFVTFQ7DQorCS8qKg0KKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0SG9zdFByaW1hcnlEaXNlYXNlRGVhdGhSYXRlMygpDQorCSAqIDxlbT5Ib3N0IFByaW1hcnkgRGlzZWFzZSBEZWF0aCBSYXRlMzwvZW0+fScgYXR0cmlidXRlLiA8IS0tDQorCSAqIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogDQorCSAqIEBzZWUgI2dldEhvc3RQcmltYXJ5RGlzZWFzZURlYXRoUmF0ZTMoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqIEBvcmRlcmVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIGRvdWJsZSBIT1NUX1BSSU1BUllfRElTRUFTRV9ERUFUSF9SQVRFM19FREVGQVVMVCA9IDEuMEUtNzsNCisJLyoqDQorCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldEhvc3RQcmltYXJ5RGlzZWFzZURlYXRoUmF0ZTMoKQ0KKwkgKiA8ZW0+SG9zdCBQcmltYXJ5IERpc2Vhc2UgRGVhdGggUmF0ZTM8L2VtPn0nIGF0dHJpYnV0ZS4gPCEtLQ0KKwkgKiBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIA0KKwkgKiBAc2VlICNnZXRIb3N0UHJpbWFyeURpc2Vhc2VEZWF0aFJhdGUzKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJcHJvdGVjdGVkIGRvdWJsZSBob3N0UHJpbWFyeURpc2Vhc2VEZWF0aFJhdGUzID0gSE9TVF9QUklNQVJZX0RJU0VBU0VfREVBVEhfUkFURTNfRURFRkFVTFQ7DQorCS8qKg0KKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0SG9zdFByaW1hcnlEaXNlYXNlRGVhdGhSYXRlNCgpDQorCSAqIDxlbT5Ib3N0IFByaW1hcnkgRGlzZWFzZSBEZWF0aCBSYXRlNDwvZW0+fScgYXR0cmlidXRlLiA8IS0tDQorCSAqIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogDQorCSAqIEBzZWUgI2dldEhvc3RQcmltYXJ5RGlzZWFzZURlYXRoUmF0ZTQoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqIEBvcmRlcmVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIGRvdWJsZSBIT1NUX1BSSU1BUllfRElTRUFTRV9ERUFUSF9SQVRFNF9FREVGQVVMVCA9IDEuMEUtNzsNCisJLyoqDQorCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldEhvc3RQcmltYXJ5RGlzZWFzZURlYXRoUmF0ZTQoKQ0KKwkgKiA8ZW0+SG9zdCBQcmltYXJ5IERpc2Vhc2UgRGVhdGggUmF0ZTQ8L2VtPn0nIGF0dHJpYnV0ZS4gPCEtLQ0KKwkgKiBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIA0KKwkgKiBAc2VlICNnZXRIb3N0UHJpbWFyeURpc2Vhc2VEZWF0aFJhdGU0KCkNCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJcHJvdGVjdGVkIGRvdWJsZSBob3N0UHJpbWFyeURpc2Vhc2VEZWF0aFJhdGU0ID0gSE9TVF9QUklNQVJZX0RJU0VBU0VfREVBVEhfUkFURTRfRURFRkFVTFQ7DQorCS8qKg0KKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0SG9zdEFERTEyKCkgPGVtPkhvc3QgQURFMTI8L2VtPn0nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBzZWUgI2dldEhvc3RBREUxMigpDQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgZG91YmxlIEhPU1RfQURFMTJfRURFRkFVTFQgPSAxLjg7DQorCS8qKg0KKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRIb3N0QURFMTIoKSA8ZW0+SG9zdCBBREUxMjwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHNlZSAjZ2V0SG9zdEFERTEyKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJcHJvdGVjdGVkIGRvdWJsZSBob3N0QURFMTIgPSBIT1NUX0FERTEyX0VERUZBVUxUOw0KKwkvKioNCisJICogVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldEhvc3RBREUxMygpIDxlbT5Ib3N0IEFERTEzPC9lbT59JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAc2VlICNnZXRIb3N0QURFMTMoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqIEBvcmRlcmVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIGRvdWJsZSBIT1NUX0FERTEzX0VERUZBVUxUID0gMS44Ow0KKwkvKioNCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0SG9zdEFERTEzKCkgPGVtPkhvc3QgQURFMTM8L2VtPn0nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBzZWUgI2dldEhvc3RBREUxMygpDQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCXByb3RlY3RlZCBkb3VibGUgaG9zdEFERTEzID0gSE9TVF9BREUxM19FREVGQVVMVDsNCisJLyoqDQorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRIb3N0QURFMTQoKSA8ZW0+SG9zdCBBREUxNDwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHNlZSAjZ2V0SG9zdEFERTE0KCkNCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBkb3VibGUgSE9TVF9BREUxNF9FREVGQVVMVCA9IDEuODsNCisJLyoqDQorCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldEhvc3RBREUxNCgpIDxlbT5Ib3N0IEFERTE0PC9lbT59JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAc2VlICNnZXRIb3N0QURFMTQoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqIEBvcmRlcmVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgZG91YmxlIGhvc3RBREUxNCA9IEhPU1RfQURFMTRfRURFRkFVTFQ7DQorCS8qKg0KKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0SG9zdEFERTIxKCkgPGVtPkhvc3QgQURFMjE8L2VtPn0nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBzZWUgI2dldEhvc3RBREUyMSgpDQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgZG91YmxlIEhPU1RfQURFMjFfRURFRkFVTFQgPSAxLjg7DQorCS8qKg0KKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRIb3N0QURFMjEoKSA8ZW0+SG9zdCBBREUyMTwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHNlZSAjZ2V0SG9zdEFERTIxKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJcHJvdGVjdGVkIGRvdWJsZSBob3N0QURFMjEgPSBIT1NUX0FERTIxX0VERUZBVUxUOw0KKwkvKioNCisJICogVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldEhvc3RBREUyMygpIDxlbT5Ib3N0IEFERTIzPC9lbT59JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAc2VlICNnZXRIb3N0QURFMjMoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqIEBvcmRlcmVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIGRvdWJsZSBIT1NUX0FERTIzX0VERUZBVUxUID0gMS44Ow0KKwkvKioNCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0SG9zdEFERTIzKCkgPGVtPkhvc3QgQURFMjM8L2VtPn0nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBzZWUgI2dldEhvc3RBREUyMygpDQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCXByb3RlY3RlZCBkb3VibGUgaG9zdEFERTIzID0gSE9TVF9BREUyM19FREVGQVVMVDsNCisJLyoqDQorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRIb3N0QURFMjQoKSA8ZW0+SG9zdCBBREUyNDwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHNlZSAjZ2V0SG9zdEFERTI0KCkNCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBkb3VibGUgSE9TVF9BREUyNF9FREVGQVVMVCA9IDEuODsNCisJLyoqDQorCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldEhvc3RBREUyNCgpIDxlbT5Ib3N0IEFERTI0PC9lbT59JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAc2VlICNnZXRIb3N0QURFMjQoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqIEBvcmRlcmVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgZG91YmxlIGhvc3RBREUyNCA9IEhPU1RfQURFMjRfRURFRkFVTFQ7DQorCS8qKg0KKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0SG9zdEFERTMxKCkgPGVtPkhvc3QgQURFMzE8L2VtPn0nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBzZWUgI2dldEhvc3RBREUzMSgpDQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgZG91YmxlIEhPU1RfQURFMzFfRURFRkFVTFQgPSAxLjg7DQorCS8qKg0KKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRIb3N0QURFMzEoKSA8ZW0+SG9zdCBBREUzMTwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHNlZSAjZ2V0SG9zdEFERTMxKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJcHJvdGVjdGVkIGRvdWJsZSBob3N0QURFMzEgPSBIT1NUX0FERTMxX0VERUZBVUxUOw0KKwkvKioNCisJICogVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldEhvc3RBREUzMigpIDxlbT5Ib3N0IEFERTMyPC9lbT59JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAc2VlICNnZXRIb3N0QURFMzIoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqIEBvcmRlcmVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIGRvdWJsZSBIT1NUX0FERTMyX0VERUZBVUxUID0gMS44Ow0KKwkvKioNCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0SG9zdEFERTMyKCkgPGVtPkhvc3QgQURFMzI8L2VtPn0nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBzZWUgI2dldEhvc3RBREUzMigpDQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCXByb3RlY3RlZCBkb3VibGUgaG9zdEFERTMyID0gSE9TVF9BREUzMl9FREVGQVVMVDsNCisJLyoqDQorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRIb3N0QURFMzQoKSA8ZW0+SG9zdCBBREUzNDwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHNlZSAjZ2V0SG9zdEFERTM0KCkNCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBkb3VibGUgSE9TVF9BREUzNF9FREVGQVVMVCA9IDEuODsNCisJLyoqDQorCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldEhvc3RBREUzNCgpIDxlbT5Ib3N0IEFERTM0PC9lbT59JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAc2VlICNnZXRIb3N0QURFMzQoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqIEBvcmRlcmVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgZG91YmxlIGhvc3RBREUzNCA9IEhPU1RfQURFMzRfRURFRkFVTFQ7DQorCS8qKg0KKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0SG9zdEFERTQxKCkgPGVtPkhvc3QgQURFNDE8L2VtPn0nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBzZWUgI2dldEhvc3RBREU0MSgpDQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgZG91YmxlIEhPU1RfQURFNDFfRURFRkFVTFQgPSAxLjg7DQorCS8qKg0KKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRIb3N0QURFNDEoKSA8ZW0+SG9zdCBBREU0MTwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHNlZSAjZ2V0SG9zdEFERTQxKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJcHJvdGVjdGVkIGRvdWJsZSBob3N0QURFNDEgPSBIT1NUX0FERTQxX0VERUZBVUxUOw0KKwkvKioNCisJICogVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldEhvc3RBREU0MigpIDxlbT5Ib3N0IEFERTQyPC9lbT59JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAc2VlICNnZXRIb3N0QURFNDIoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqIEBvcmRlcmVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIGRvdWJsZSBIT1NUX0FERTQyX0VERUZBVUxUID0gMS44Ow0KKwkvKioNCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0SG9zdEFERTQyKCkgPGVtPkhvc3QgQURFNDI8L2VtPn0nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBzZWUgI2dldEhvc3RBREU0MigpDQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCXByb3RlY3RlZCBkb3VibGUgaG9zdEFERTQyID0gSE9TVF9BREU0Ml9FREVGQVVMVDsNCisJLyoqDQorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRIb3N0QURFNDMoKSA8ZW0+SG9zdCBBREU0MzwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHNlZSAjZ2V0SG9zdEFERTQzKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBkb3VibGUgSE9TVF9BREU0M19FREVGQVVMVCA9IDEuODsNCisJLyoqDQorCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldEhvc3RBREU0MygpIDxlbT5Ib3N0IEFERTQzPC9lbT59JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAc2VlICNnZXRIb3N0QURFNDMoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqIEBvcmRlcmVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgZG91YmxlIGhvc3RBREU0MyA9IEhPU1RfQURFNDNfRURFRkFVTFQ7DQorCS8qKg0KKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0SG9zdFNlY29uZGFyeURpc2Vhc2VEZWF0aFJhdGUxMigpDQorCSAqIDxlbT5Ib3N0IFNlY29uZGFyeSBEaXNlYXNlIERlYXRoIFJhdGUxMjwvZW0+fScgYXR0cmlidXRlLiA8IS0tDQorCSAqIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogDQorCSAqIEBzZWUgI2dldEhvc3RTZWNvbmRhcnlEaXNlYXNlRGVhdGhSYXRlMTIoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqIEBvcmRlcmVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIGRvdWJsZSBIT1NUX1NFQ09OREFSWV9ESVNFQVNFX0RFQVRIX1JBVEUxMl9FREVGQVVMVCA9IDAuMDAxMjM7DQorCS8qKg0KKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRIb3N0U2Vjb25kYXJ5RGlzZWFzZURlYXRoUmF0ZTEyKCkNCisJICogPGVtPkhvc3QgU2Vjb25kYXJ5IERpc2Vhc2UgRGVhdGggUmF0ZTEyPC9lbT59JyBhdHRyaWJ1dGUuIDwhLS0NCisJICogYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiANCisJICogQHNlZSAjZ2V0SG9zdFNlY29uZGFyeURpc2Vhc2VEZWF0aFJhdGUxMigpDQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCXByb3RlY3RlZCBkb3VibGUgaG9zdFNlY29uZGFyeURpc2Vhc2VEZWF0aFJhdGUxMiA9IEhPU1RfU0VDT05EQVJZX0RJU0VBU0VfREVBVEhfUkFURTEyX0VERUZBVUxUOw0KKwkvKioNCisJICogVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldEhvc3RTZWNvbmRhcnlEaXNlYXNlRGVhdGhSYXRlMTMoKQ0KKwkgKiA8ZW0+SG9zdCBTZWNvbmRhcnkgRGlzZWFzZSBEZWF0aCBSYXRlMTM8L2VtPn0nIGF0dHJpYnV0ZS4gPCEtLQ0KKwkgKiBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIA0KKwkgKiBAc2VlICNnZXRIb3N0U2Vjb25kYXJ5RGlzZWFzZURlYXRoUmF0ZTEzKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBkb3VibGUgSE9TVF9TRUNPTkRBUllfRElTRUFTRV9ERUFUSF9SQVRFMTNfRURFRkFVTFQgPSAwLjAwMTIzOw0KKwkvKioNCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0SG9zdFNlY29uZGFyeURpc2Vhc2VEZWF0aFJhdGUxMygpDQorCSAqIDxlbT5Ib3N0IFNlY29uZGFyeSBEaXNlYXNlIERlYXRoIFJhdGUxMzwvZW0+fScgYXR0cmlidXRlLiA8IS0tDQorCSAqIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogDQorCSAqIEBzZWUgI2dldEhvc3RTZWNvbmRhcnlEaXNlYXNlRGVhdGhSYXRlMTMoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqIEBvcmRlcmVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgZG91YmxlIGhvc3RTZWNvbmRhcnlEaXNlYXNlRGVhdGhSYXRlMTMgPSBIT1NUX1NFQ09OREFSWV9ESVNFQVNFX0RFQVRIX1JBVEUxM19FREVGQVVMVDsNCisJLyoqDQorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRIb3N0U2Vjb25kYXJ5RGlzZWFzZURlYXRoUmF0ZTE0KCkNCisJICogPGVtPkhvc3QgU2Vjb25kYXJ5IERpc2Vhc2UgRGVhdGggUmF0ZTE0PC9lbT59JyBhdHRyaWJ1dGUuIDwhLS0NCisJICogYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiANCisJICogQHNlZSAjZ2V0SG9zdFNlY29uZGFyeURpc2Vhc2VEZWF0aFJhdGUxNCgpDQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgZG91YmxlIEhPU1RfU0VDT05EQVJZX0RJU0VBU0VfREVBVEhfUkFURTE0X0VERUZBVUxUID0gMC4wMDEyMzsNCisJLyoqDQorCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldEhvc3RTZWNvbmRhcnlEaXNlYXNlRGVhdGhSYXRlMTQoKQ0KKwkgKiA8ZW0+SG9zdCBTZWNvbmRhcnkgRGlzZWFzZSBEZWF0aCBSYXRlMTQ8L2VtPn0nIGF0dHJpYnV0ZS4gPCEtLQ0KKwkgKiBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIA0KKwkgKiBAc2VlICNnZXRIb3N0U2Vjb25kYXJ5RGlzZWFzZURlYXRoUmF0ZTE0KCkNCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJcHJvdGVjdGVkIGRvdWJsZSBob3N0U2Vjb25kYXJ5RGlzZWFzZURlYXRoUmF0ZTE0ID0gSE9TVF9TRUNPTkRBUllfRElTRUFTRV9ERUFUSF9SQVRFMTRfRURFRkFVTFQ7DQorCS8qKg0KKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0SG9zdFNlY29uZGFyeURpc2Vhc2VEZWF0aFJhdGUyMSgpDQorCSAqIDxlbT5Ib3N0IFNlY29uZGFyeSBEaXNlYXNlIERlYXRoIFJhdGUyMTwvZW0+fScgYXR0cmlidXRlLiA8IS0tDQorCSAqIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogDQorCSAqIEBzZWUgI2dldEhvc3RTZWNvbmRhcnlEaXNlYXNlRGVhdGhSYXRlMjEoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqIEBvcmRlcmVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIGRvdWJsZSBIT1NUX1NFQ09OREFSWV9ESVNFQVNFX0RFQVRIX1JBVEUyMV9FREVGQVVMVCA9IDAuMDAxMjM7DQorCS8qKg0KKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRIb3N0U2Vjb25kYXJ5RGlzZWFzZURlYXRoUmF0ZTIxKCkNCisJICogPGVtPkhvc3QgU2Vjb25kYXJ5IERpc2Vhc2UgRGVhdGggUmF0ZTIxPC9lbT59JyBhdHRyaWJ1dGUuIDwhLS0NCisJICogYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiANCisJICogQHNlZSAjZ2V0SG9zdFNlY29uZGFyeURpc2Vhc2VEZWF0aFJhdGUyMSgpDQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCXByb3RlY3RlZCBkb3VibGUgaG9zdFNlY29uZGFyeURpc2Vhc2VEZWF0aFJhdGUyMSA9IEhPU1RfU0VDT05EQVJZX0RJU0VBU0VfREVBVEhfUkFURTIxX0VERUZBVUxUOw0KKwkvKioNCisJICogVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldEhvc3RTZWNvbmRhcnlEaXNlYXNlRGVhdGhSYXRlMjMoKQ0KKwkgKiA8ZW0+SG9zdCBTZWNvbmRhcnkgRGlzZWFzZSBEZWF0aCBSYXRlMjM8L2VtPn0nIGF0dHJpYnV0ZS4gPCEtLQ0KKwkgKiBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIA0KKwkgKiBAc2VlICNnZXRIb3N0U2Vjb25kYXJ5RGlzZWFzZURlYXRoUmF0ZTIzKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBkb3VibGUgSE9TVF9TRUNPTkRBUllfRElTRUFTRV9ERUFUSF9SQVRFMjNfRURFRkFVTFQgPSAwLjAwMTIzOw0KKwkvKioNCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0SG9zdFNlY29uZGFyeURpc2Vhc2VEZWF0aFJhdGUyMygpDQorCSAqIDxlbT5Ib3N0IFNlY29uZGFyeSBEaXNlYXNlIERlYXRoIFJhdGUyMzwvZW0+fScgYXR0cmlidXRlLiA8IS0tDQorCSAqIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogDQorCSAqIEBzZWUgI2dldEhvc3RTZWNvbmRhcnlEaXNlYXNlRGVhdGhSYXRlMjMoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqIEBvcmRlcmVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgZG91YmxlIGhvc3RTZWNvbmRhcnlEaXNlYXNlRGVhdGhSYXRlMjMgPSBIT1NUX1NFQ09OREFSWV9ESVNFQVNFX0RFQVRIX1JBVEUyM19FREVGQVVMVDsNCisJLyoqDQorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRIb3N0U2Vjb25kYXJ5RGlzZWFzZURlYXRoUmF0ZTI0KCkNCisJICogPGVtPkhvc3QgU2Vjb25kYXJ5IERpc2Vhc2UgRGVhdGggUmF0ZTI0PC9lbT59JyBhdHRyaWJ1dGUuIDwhLS0NCisJICogYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiANCisJICogQHNlZSAjZ2V0SG9zdFNlY29uZGFyeURpc2Vhc2VEZWF0aFJhdGUyNCgpDQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgZG91YmxlIEhPU1RfU0VDT05EQVJZX0RJU0VBU0VfREVBVEhfUkFURTI0X0VERUZBVUxUID0gMC4wMDEyMzsNCisJLyoqDQorCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldEhvc3RTZWNvbmRhcnlEaXNlYXNlRGVhdGhSYXRlMjQoKQ0KKwkgKiA8ZW0+SG9zdCBTZWNvbmRhcnkgRGlzZWFzZSBEZWF0aCBSYXRlMjQ8L2VtPn0nIGF0dHJpYnV0ZS4gPCEtLQ0KKwkgKiBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIA0KKwkgKiBAc2VlICNnZXRIb3N0U2Vjb25kYXJ5RGlzZWFzZURlYXRoUmF0ZTI0KCkNCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJcHJvdGVjdGVkIGRvdWJsZSBob3N0U2Vjb25kYXJ5RGlzZWFzZURlYXRoUmF0ZTI0ID0gSE9TVF9TRUNPTkRBUllfRElTRUFTRV9ERUFUSF9SQVRFMjRfRURFRkFVTFQ7DQorCS8qKg0KKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0SG9zdFNlY29uZGFyeURpc2Vhc2VEZWF0aFJhdGUzMSgpDQorCSAqIDxlbT5Ib3N0IFNlY29uZGFyeSBEaXNlYXNlIERlYXRoIFJhdGUzMTwvZW0+fScgYXR0cmlidXRlLiA8IS0tDQorCSAqIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogDQorCSAqIEBzZWUgI2dldEhvc3RTZWNvbmRhcnlEaXNlYXNlRGVhdGhSYXRlMzEoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqIEBvcmRlcmVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIGRvdWJsZSBIT1NUX1NFQ09OREFSWV9ESVNFQVNFX0RFQVRIX1JBVEUzMV9FREVGQVVMVCA9IDAuMDAxMjM7DQorCS8qKg0KKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRIb3N0U2Vjb25kYXJ5RGlzZWFzZURlYXRoUmF0ZTMxKCkNCisJICogPGVtPkhvc3QgU2Vjb25kYXJ5IERpc2Vhc2UgRGVhdGggUmF0ZTMxPC9lbT59JyBhdHRyaWJ1dGUuIDwhLS0NCisJICogYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiANCisJICogQHNlZSAjZ2V0SG9zdFNlY29uZGFyeURpc2Vhc2VEZWF0aFJhdGUzMSgpDQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCXByb3RlY3RlZCBkb3VibGUgaG9zdFNlY29uZGFyeURpc2Vhc2VEZWF0aFJhdGUzMSA9IEhPU1RfU0VDT05EQVJZX0RJU0VBU0VfREVBVEhfUkFURTMxX0VERUZBVUxUOw0KKwkvKioNCisJICogVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldEhvc3RTZWNvbmRhcnlEaXNlYXNlRGVhdGhSYXRlMzIoKQ0KKwkgKiA8ZW0+SG9zdCBTZWNvbmRhcnkgRGlzZWFzZSBEZWF0aCBSYXRlMzI8L2VtPn0nIGF0dHJpYnV0ZS4gPCEtLQ0KKwkgKiBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIA0KKwkgKiBAc2VlICNnZXRIb3N0U2Vjb25kYXJ5RGlzZWFzZURlYXRoUmF0ZTMyKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBkb3VibGUgSE9TVF9TRUNPTkRBUllfRElTRUFTRV9ERUFUSF9SQVRFMzJfRURFRkFVTFQgPSAwLjAwMTIzOw0KKwkvKioNCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0SG9zdFNlY29uZGFyeURpc2Vhc2VEZWF0aFJhdGUzMigpDQorCSAqIDxlbT5Ib3N0IFNlY29uZGFyeSBEaXNlYXNlIERlYXRoIFJhdGUzMjwvZW0+fScgYXR0cmlidXRlLiA8IS0tDQorCSAqIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogDQorCSAqIEBzZWUgI2dldEhvc3RTZWNvbmRhcnlEaXNlYXNlRGVhdGhSYXRlMzIoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqIEBvcmRlcmVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgZG91YmxlIGhvc3RTZWNvbmRhcnlEaXNlYXNlRGVhdGhSYXRlMzIgPSBIT1NUX1NFQ09OREFSWV9ESVNFQVNFX0RFQVRIX1JBVEUzMl9FREVGQVVMVDsNCisJLyoqDQorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRIb3N0U2Vjb25kYXJ5RGlzZWFzZURlYXRoUmF0ZTM0KCkNCisJICogPGVtPkhvc3QgU2Vjb25kYXJ5IERpc2Vhc2UgRGVhdGggUmF0ZTM0PC9lbT59JyBhdHRyaWJ1dGUuIDwhLS0NCisJICogYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiANCisJICogQHNlZSAjZ2V0SG9zdFNlY29uZGFyeURpc2Vhc2VEZWF0aFJhdGUzNCgpDQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgZG91YmxlIEhPU1RfU0VDT05EQVJZX0RJU0VBU0VfREVBVEhfUkFURTM0X0VERUZBVUxUID0gMC4wMDEyMzsNCisJLyoqDQorCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldEhvc3RTZWNvbmRhcnlEaXNlYXNlRGVhdGhSYXRlMzQoKQ0KKwkgKiA8ZW0+SG9zdCBTZWNvbmRhcnkgRGlzZWFzZSBEZWF0aCBSYXRlMzQ8L2VtPn0nIGF0dHJpYnV0ZS4gPCEtLQ0KKwkgKiBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIA0KKwkgKiBAc2VlICNnZXRIb3N0U2Vjb25kYXJ5RGlzZWFzZURlYXRoUmF0ZTM0KCkNCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJcHJvdGVjdGVkIGRvdWJsZSBob3N0U2Vjb25kYXJ5RGlzZWFzZURlYXRoUmF0ZTM0ID0gSE9TVF9TRUNPTkRBUllfRElTRUFTRV9ERUFUSF9SQVRFMzRfRURFRkFVTFQ7DQorCS8qKg0KKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0SG9zdFNlY29uZGFyeURpc2Vhc2VEZWF0aFJhdGU0MSgpDQorCSAqIDxlbT5Ib3N0IFNlY29uZGFyeSBEaXNlYXNlIERlYXRoIFJhdGU0MTwvZW0+fScgYXR0cmlidXRlLiA8IS0tDQorCSAqIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogDQorCSAqIEBzZWUgI2dldEhvc3RTZWNvbmRhcnlEaXNlYXNlRGVhdGhSYXRlNDEoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqIEBvcmRlcmVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIGRvdWJsZSBIT1NUX1NFQ09OREFSWV9ESVNFQVNFX0RFQVRIX1JBVEU0MV9FREVGQVVMVCA9IDAuMDAxMjM7DQorCS8qKg0KKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRIb3N0U2Vjb25kYXJ5RGlzZWFzZURlYXRoUmF0ZTQxKCkNCisJICogPGVtPkhvc3QgU2Vjb25kYXJ5IERpc2Vhc2UgRGVhdGggUmF0ZTQxPC9lbT59JyBhdHRyaWJ1dGUuIDwhLS0NCisJICogYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiANCisJICogQHNlZSAjZ2V0SG9zdFNlY29uZGFyeURpc2Vhc2VEZWF0aFJhdGU0MSgpDQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCXByb3RlY3RlZCBkb3VibGUgaG9zdFNlY29uZGFyeURpc2Vhc2VEZWF0aFJhdGU0MSA9IEhPU1RfU0VDT05EQVJZX0RJU0VBU0VfREVBVEhfUkFURTQxX0VERUZBVUxUOw0KKwkvKioNCisJICogVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldEhvc3RTZWNvbmRhcnlEaXNlYXNlRGVhdGhSYXRlNDIoKQ0KKwkgKiA8ZW0+SG9zdCBTZWNvbmRhcnkgRGlzZWFzZSBEZWF0aCBSYXRlNDI8L2VtPn0nIGF0dHJpYnV0ZS4gPCEtLQ0KKwkgKiBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIA0KKwkgKiBAc2VlICNnZXRIb3N0U2Vjb25kYXJ5RGlzZWFzZURlYXRoUmF0ZTQyKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBkb3VibGUgSE9TVF9TRUNPTkRBUllfRElTRUFTRV9ERUFUSF9SQVRFNDJfRURFRkFVTFQgPSAwLjAwMTIzOw0KKwkvKioNCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0SG9zdFNlY29uZGFyeURpc2Vhc2VEZWF0aFJhdGU0MigpDQorCSAqIDxlbT5Ib3N0IFNlY29uZGFyeSBEaXNlYXNlIERlYXRoIFJhdGU0MjwvZW0+fScgYXR0cmlidXRlLiA8IS0tDQorCSAqIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogDQorCSAqIEBzZWUgI2dldEhvc3RTZWNvbmRhcnlEaXNlYXNlRGVhdGhSYXRlNDIoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqIEBvcmRlcmVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgZG91YmxlIGhvc3RTZWNvbmRhcnlEaXNlYXNlRGVhdGhSYXRlNDIgPSBIT1NUX1NFQ09OREFSWV9ESVNFQVNFX0RFQVRIX1JBVEU0Ml9FREVGQVVMVDsNCisJLyoqDQorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRIb3N0U2Vjb25kYXJ5RGlzZWFzZURlYXRoUmF0ZTQzKCkNCisJICogPGVtPkhvc3QgU2Vjb25kYXJ5IERpc2Vhc2UgRGVhdGggUmF0ZTQzPC9lbT59JyBhdHRyaWJ1dGUuIDwhLS0NCisJICogYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiANCisJICogQHNlZSAjZ2V0SG9zdFNlY29uZGFyeURpc2Vhc2VEZWF0aFJhdGU0MygpDQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgZG91YmxlIEhPU1RfU0VDT05EQVJZX0RJU0VBU0VfREVBVEhfUkFURTQzX0VERUZBVUxUID0gMC4wMDEyMzsNCisJLyoqDQorCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldEhvc3RTZWNvbmRhcnlEaXNlYXNlRGVhdGhSYXRlNDMoKQ0KKwkgKiA8ZW0+SG9zdCBTZWNvbmRhcnkgRGlzZWFzZSBEZWF0aCBSYXRlNDM8L2VtPn0nIGF0dHJpYnV0ZS4gPCEtLQ0KKwkgKiBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIA0KKwkgKiBAc2VlICNnZXRIb3N0U2Vjb25kYXJ5RGlzZWFzZURlYXRoUmF0ZTQzKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJcHJvdGVjdGVkIGRvdWJsZSBob3N0U2Vjb25kYXJ5RGlzZWFzZURlYXRoUmF0ZTQzID0gSE9TVF9TRUNPTkRBUllfRElTRUFTRV9ERUFUSF9SQVRFNDNfRURFRkFVTFQ7DQorCS8qKg0KKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0SG9zdFNlY29uZGFyeVJlY292ZXJ5UmF0ZTEyKCkgPGVtPkhvc3QgU2Vjb25kYXJ5IFJlY292ZXJ5IFJhdGUxMjwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jDQorCSAqIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHNlZSAjZ2V0SG9zdFNlY29uZGFyeVJlY292ZXJ5UmF0ZTEyKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBkb3VibGUgSE9TVF9TRUNPTkRBUllfUkVDT1ZFUllfUkFURTEyX0VERUZBVUxUID0gMC4xOw0KKwkvKioNCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0SG9zdFNlY29uZGFyeVJlY292ZXJ5UmF0ZTEyKCkgPGVtPkhvc3QgU2Vjb25kYXJ5IFJlY292ZXJ5IFJhdGUxMjwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jDQorCSAqIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHNlZSAjZ2V0SG9zdFNlY29uZGFyeVJlY292ZXJ5UmF0ZTEyKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJcHJvdGVjdGVkIGRvdWJsZSBob3N0U2Vjb25kYXJ5UmVjb3ZlcnlSYXRlMTIgPSBIT1NUX1NFQ09OREFSWV9SRUNPVkVSWV9SQVRFMTJfRURFRkFVTFQ7DQorCS8qKg0KKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0SG9zdFNlY29uZGFyeVJlY292ZXJ5UmF0ZTEzKCkgPGVtPkhvc3QgU2Vjb25kYXJ5IFJlY292ZXJ5IFJhdGUxMzwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jDQorCSAqIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHNlZSAjZ2V0SG9zdFNlY29uZGFyeVJlY292ZXJ5UmF0ZTEzKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBkb3VibGUgSE9TVF9TRUNPTkRBUllfUkVDT1ZFUllfUkFURTEzX0VERUZBVUxUID0gMC4xOw0KKwkvKioNCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0SG9zdFNlY29uZGFyeVJlY292ZXJ5UmF0ZTEzKCkgPGVtPkhvc3QgU2Vjb25kYXJ5IFJlY292ZXJ5IFJhdGUxMzwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jDQorCSAqIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHNlZSAjZ2V0SG9zdFNlY29uZGFyeVJlY292ZXJ5UmF0ZTEzKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJcHJvdGVjdGVkIGRvdWJsZSBob3N0U2Vjb25kYXJ5UmVjb3ZlcnlSYXRlMTMgPSBIT1NUX1NFQ09OREFSWV9SRUNPVkVSWV9SQVRFMTNfRURFRkFVTFQ7DQorCS8qKg0KKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0SG9zdFNlY29uZGFyeVJlY292ZXJ5UmF0ZTE0KCkgPGVtPkhvc3QgU2Vjb25kYXJ5IFJlY292ZXJ5IFJhdGUxNDwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jDQorCSAqIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHNlZSAjZ2V0SG9zdFNlY29uZGFyeVJlY292ZXJ5UmF0ZTE0KCkNCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBkb3VibGUgSE9TVF9TRUNPTkRBUllfUkVDT1ZFUllfUkFURTE0X0VERUZBVUxUID0gMC4xOw0KKwkvKioNCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0SG9zdFNlY29uZGFyeVJlY292ZXJ5UmF0ZTE0KCkgPGVtPkhvc3QgU2Vjb25kYXJ5IFJlY292ZXJ5IFJhdGUxNDwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jDQorCSAqIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHNlZSAjZ2V0SG9zdFNlY29uZGFyeVJlY292ZXJ5UmF0ZTE0KCkNCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJcHJvdGVjdGVkIGRvdWJsZSBob3N0U2Vjb25kYXJ5UmVjb3ZlcnlSYXRlMTQgPSBIT1NUX1NFQ09OREFSWV9SRUNPVkVSWV9SQVRFMTRfRURFRkFVTFQ7DQorCS8qKg0KKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0SG9zdFNlY29uZGFyeVJlY292ZXJ5UmF0ZTIxKCkgPGVtPkhvc3QgU2Vjb25kYXJ5IFJlY292ZXJ5IFJhdGUyMTwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jDQorCSAqIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHNlZSAjZ2V0SG9zdFNlY29uZGFyeVJlY292ZXJ5UmF0ZTIxKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBkb3VibGUgSE9TVF9TRUNPTkRBUllfUkVDT1ZFUllfUkFURTIxX0VERUZBVUxUID0gMC4xOw0KKwkvKioNCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0SG9zdFNlY29uZGFyeVJlY292ZXJ5UmF0ZTIxKCkgPGVtPkhvc3QgU2Vjb25kYXJ5IFJlY292ZXJ5IFJhdGUyMTwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jDQorCSAqIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHNlZSAjZ2V0SG9zdFNlY29uZGFyeVJlY292ZXJ5UmF0ZTIxKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJcHJvdGVjdGVkIGRvdWJsZSBob3N0U2Vjb25kYXJ5UmVjb3ZlcnlSYXRlMjEgPSBIT1NUX1NFQ09OREFSWV9SRUNPVkVSWV9SQVRFMjFfRURFRkFVTFQ7DQorCS8qKg0KKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0SG9zdFNlY29uZGFyeVJlY292ZXJ5UmF0ZTIzKCkgPGVtPkhvc3QgU2Vjb25kYXJ5IFJlY292ZXJ5IFJhdGUyMzwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jDQorCSAqIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHNlZSAjZ2V0SG9zdFNlY29uZGFyeVJlY292ZXJ5UmF0ZTIzKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBkb3VibGUgSE9TVF9TRUNPTkRBUllfUkVDT1ZFUllfUkFURTIzX0VERUZBVUxUID0gMC4xOw0KKwkvKioNCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0SG9zdFNlY29uZGFyeVJlY292ZXJ5UmF0ZTIzKCkgPGVtPkhvc3QgU2Vjb25kYXJ5IFJlY292ZXJ5IFJhdGUyMzwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jDQorCSAqIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHNlZSAjZ2V0SG9zdFNlY29uZGFyeVJlY292ZXJ5UmF0ZTIzKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJcHJvdGVjdGVkIGRvdWJsZSBob3N0U2Vjb25kYXJ5UmVjb3ZlcnlSYXRlMjMgPSBIT1NUX1NFQ09OREFSWV9SRUNPVkVSWV9SQVRFMjNfRURFRkFVTFQ7DQorCS8qKg0KKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0SG9zdFNlY29uZGFyeVJlY292ZXJ5UmF0ZTI0KCkgPGVtPkhvc3QgU2Vjb25kYXJ5IFJlY292ZXJ5IFJhdGUyNDwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jDQorCSAqIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHNlZSAjZ2V0SG9zdFNlY29uZGFyeVJlY292ZXJ5UmF0ZTI0KCkNCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBkb3VibGUgSE9TVF9TRUNPTkRBUllfUkVDT1ZFUllfUkFURTI0X0VERUZBVUxUID0gMC4xOw0KKwkvKioNCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0SG9zdFNlY29uZGFyeVJlY292ZXJ5UmF0ZTI0KCkgPGVtPkhvc3QgU2Vjb25kYXJ5IFJlY292ZXJ5IFJhdGUyNDwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jDQorCSAqIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHNlZSAjZ2V0SG9zdFNlY29uZGFyeVJlY292ZXJ5UmF0ZTI0KCkNCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJcHJvdGVjdGVkIGRvdWJsZSBob3N0U2Vjb25kYXJ5UmVjb3ZlcnlSYXRlMjQgPSBIT1NUX1NFQ09OREFSWV9SRUNPVkVSWV9SQVRFMjRfRURFRkFVTFQ7DQorCS8qKg0KKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0SG9zdFNlY29uZGFyeVJlY292ZXJ5UmF0ZTMxKCkgPGVtPkhvc3QgU2Vjb25kYXJ5IFJlY292ZXJ5IFJhdGUzMTwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jDQorCSAqIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHNlZSAjZ2V0SG9zdFNlY29uZGFyeVJlY292ZXJ5UmF0ZTMxKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBkb3VibGUgSE9TVF9TRUNPTkRBUllfUkVDT1ZFUllfUkFURTMxX0VERUZBVUxUID0gMC4xOw0KKwkvKioNCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0SG9zdFNlY29uZGFyeVJlY292ZXJ5UmF0ZTMxKCkgPGVtPkhvc3QgU2Vjb25kYXJ5IFJlY292ZXJ5IFJhdGUzMTwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jDQorCSAqIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHNlZSAjZ2V0SG9zdFNlY29uZGFyeVJlY292ZXJ5UmF0ZTMxKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJcHJvdGVjdGVkIGRvdWJsZSBob3N0U2Vjb25kYXJ5UmVjb3ZlcnlSYXRlMzEgPSBIT1NUX1NFQ09OREFSWV9SRUNPVkVSWV9SQVRFMzFfRURFRkFVTFQ7DQorCS8qKg0KKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0SG9zdFNlY29uZGFyeVJlY292ZXJ5UmF0ZTMyKCkgPGVtPkhvc3QgU2Vjb25kYXJ5IFJlY292ZXJ5IFJhdGUzMjwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jDQorCSAqIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHNlZSAjZ2V0SG9zdFNlY29uZGFyeVJlY292ZXJ5UmF0ZTMyKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBkb3VibGUgSE9TVF9TRUNPTkRBUllfUkVDT1ZFUllfUkFURTMyX0VERUZBVUxUID0gMC4xOw0KKwkvKioNCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0SG9zdFNlY29uZGFyeVJlY292ZXJ5UmF0ZTMyKCkgPGVtPkhvc3QgU2Vjb25kYXJ5IFJlY292ZXJ5IFJhdGUzMjwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jDQorCSAqIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHNlZSAjZ2V0SG9zdFNlY29uZGFyeVJlY292ZXJ5UmF0ZTMyKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJcHJvdGVjdGVkIGRvdWJsZSBob3N0U2Vjb25kYXJ5UmVjb3ZlcnlSYXRlMzIgPSBIT1NUX1NFQ09OREFSWV9SRUNPVkVSWV9SQVRFMzJfRURFRkFVTFQ7DQorCS8qKg0KKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0SG9zdFNlY29uZGFyeVJlY292ZXJ5UmF0ZTM0KCkgPGVtPkhvc3QgU2Vjb25kYXJ5IFJlY292ZXJ5IFJhdGUzNDwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jDQorCSAqIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHNlZSAjZ2V0SG9zdFNlY29uZGFyeVJlY292ZXJ5UmF0ZTM0KCkNCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBkb3VibGUgSE9TVF9TRUNPTkRBUllfUkVDT1ZFUllfUkFURTM0X0VERUZBVUxUID0gMC4xOw0KKwkvKioNCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0SG9zdFNlY29uZGFyeVJlY292ZXJ5UmF0ZTM0KCkgPGVtPkhvc3QgU2Vjb25kYXJ5IFJlY292ZXJ5IFJhdGUzNDwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jDQorCSAqIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHNlZSAjZ2V0SG9zdFNlY29uZGFyeVJlY292ZXJ5UmF0ZTM0KCkNCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJcHJvdGVjdGVkIGRvdWJsZSBob3N0U2Vjb25kYXJ5UmVjb3ZlcnlSYXRlMzQgPSBIT1NUX1NFQ09OREFSWV9SRUNPVkVSWV9SQVRFMzRfRURFRkFVTFQ7DQorCS8qKg0KKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0SG9zdFNlY29uZGFyeVJlY292ZXJ5UmF0ZTQxKCkgPGVtPkhvc3QgU2Vjb25kYXJ5IFJlY292ZXJ5IFJhdGU0MTwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jDQorCSAqIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHNlZSAjZ2V0SG9zdFNlY29uZGFyeVJlY292ZXJ5UmF0ZTQxKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBkb3VibGUgSE9TVF9TRUNPTkRBUllfUkVDT1ZFUllfUkFURTQxX0VERUZBVUxUID0gMC4xOw0KKwkvKioNCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0SG9zdFNlY29uZGFyeVJlY292ZXJ5UmF0ZTQxKCkgPGVtPkhvc3QgU2Vjb25kYXJ5IFJlY292ZXJ5IFJhdGU0MTwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jDQorCSAqIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHNlZSAjZ2V0SG9zdFNlY29uZGFyeVJlY292ZXJ5UmF0ZTQxKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJcHJvdGVjdGVkIGRvdWJsZSBob3N0U2Vjb25kYXJ5UmVjb3ZlcnlSYXRlNDEgPSBIT1NUX1NFQ09OREFSWV9SRUNPVkVSWV9SQVRFNDFfRURFRkFVTFQ7DQorCS8qKg0KKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0SG9zdFNlY29uZGFyeVJlY292ZXJ5UmF0ZTQyKCkgPGVtPkhvc3QgU2Vjb25kYXJ5IFJlY292ZXJ5IFJhdGU0MjwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jDQorCSAqIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHNlZSAjZ2V0SG9zdFNlY29uZGFyeVJlY292ZXJ5UmF0ZTQyKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBkb3VibGUgSE9TVF9TRUNPTkRBUllfUkVDT1ZFUllfUkFURTQyX0VERUZBVUxUID0gMC4xOw0KKwkvKioNCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0SG9zdFNlY29uZGFyeVJlY292ZXJ5UmF0ZTQyKCkgPGVtPkhvc3QgU2Vjb25kYXJ5IFJlY292ZXJ5IFJhdGU0MjwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jDQorCSAqIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHNlZSAjZ2V0SG9zdFNlY29uZGFyeVJlY292ZXJ5UmF0ZTQyKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJcHJvdGVjdGVkIGRvdWJsZSBob3N0U2Vjb25kYXJ5UmVjb3ZlcnlSYXRlNDIgPSBIT1NUX1NFQ09OREFSWV9SRUNPVkVSWV9SQVRFNDJfRURFRkFVTFQ7DQorCS8qKg0KKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0SG9zdFNlY29uZGFyeVJlY292ZXJ5UmF0ZTQzKCkgPGVtPkhvc3QgU2Vjb25kYXJ5IFJlY292ZXJ5IFJhdGU0MzwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jDQorCSAqIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHNlZSAjZ2V0SG9zdFNlY29uZGFyeVJlY292ZXJ5UmF0ZTQzKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBkb3VibGUgSE9TVF9TRUNPTkRBUllfUkVDT1ZFUllfUkFURTQzX0VERUZBVUxUID0gMC4xOw0KKwkvKioNCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0SG9zdFNlY29uZGFyeVJlY292ZXJ5UmF0ZTQzKCkgPGVtPkhvc3QgU2Vjb25kYXJ5IFJlY292ZXJ5IFJhdGU0MzwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jDQorCSAqIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHNlZSAjZ2V0SG9zdFNlY29uZGFyeVJlY292ZXJ5UmF0ZTQzKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJcHJvdGVjdGVkIGRvdWJsZSBob3N0U2Vjb25kYXJ5UmVjb3ZlcnlSYXRlNDMgPSBIT1NUX1NFQ09OREFSWV9SRUNPVkVSWV9SQVRFNDNfRURFRkFVTFQ7DQorCS8qKg0KKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0SG9zdFNlY29uZGFyeUluY3ViYXRpb25SYXRlMTIoKQ0KKwkgKiA8ZW0+SG9zdCBTZWNvbmRhcnkgSW5jdWJhdGlvbiBSYXRlMTI8L2VtPn0nIGF0dHJpYnV0ZS4gPCEtLQ0KKwkgKiBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIA0KKwkgKiBAc2VlICNnZXRIb3N0U2Vjb25kYXJ5SW5jdWJhdGlvblJhdGUxMigpDQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgZG91YmxlIEhPU1RfU0VDT05EQVJZX0lOQ1VCQVRJT05fUkFURTEyX0VERUZBVUxUID0gMC4yOw0KKwkvKioNCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0SG9zdFNlY29uZGFyeUluY3ViYXRpb25SYXRlMTIoKQ0KKwkgKiA8ZW0+SG9zdCBTZWNvbmRhcnkgSW5jdWJhdGlvbiBSYXRlMTI8L2VtPn0nIGF0dHJpYnV0ZS4gPCEtLQ0KKwkgKiBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIA0KKwkgKiBAc2VlICNnZXRIb3N0U2Vjb25kYXJ5SW5jdWJhdGlvblJhdGUxMigpDQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCXByb3RlY3RlZCBkb3VibGUgaG9zdFNlY29uZGFyeUluY3ViYXRpb25SYXRlMTIgPSBIT1NUX1NFQ09OREFSWV9JTkNVQkFUSU9OX1JBVEUxMl9FREVGQVVMVDsNCisJLyoqDQorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRIb3N0U2Vjb25kYXJ5SW5jdWJhdGlvblJhdGUxMygpDQorCSAqIDxlbT5Ib3N0IFNlY29uZGFyeSBJbmN1YmF0aW9uIFJhdGUxMzwvZW0+fScgYXR0cmlidXRlLiA8IS0tDQorCSAqIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogDQorCSAqIEBzZWUgI2dldEhvc3RTZWNvbmRhcnlJbmN1YmF0aW9uUmF0ZTEzKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBkb3VibGUgSE9TVF9TRUNPTkRBUllfSU5DVUJBVElPTl9SQVRFMTNfRURFRkFVTFQgPSAwLjI7DQorCS8qKg0KKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRIb3N0U2Vjb25kYXJ5SW5jdWJhdGlvblJhdGUxMygpDQorCSAqIDxlbT5Ib3N0IFNlY29uZGFyeSBJbmN1YmF0aW9uIFJhdGUxMzwvZW0+fScgYXR0cmlidXRlLiA8IS0tDQorCSAqIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogDQorCSAqIEBzZWUgI2dldEhvc3RTZWNvbmRhcnlJbmN1YmF0aW9uUmF0ZTEzKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJcHJvdGVjdGVkIGRvdWJsZSBob3N0U2Vjb25kYXJ5SW5jdWJhdGlvblJhdGUxMyA9IEhPU1RfU0VDT05EQVJZX0lOQ1VCQVRJT05fUkFURTEzX0VERUZBVUxUOw0KKwkvKioNCisJICogVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldEhvc3RTZWNvbmRhcnlJbmN1YmF0aW9uUmF0ZTE0KCkNCisJICogPGVtPkhvc3QgU2Vjb25kYXJ5IEluY3ViYXRpb24gUmF0ZTE0PC9lbT59JyBhdHRyaWJ1dGUuIDwhLS0NCisJICogYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiANCisJICogQHNlZSAjZ2V0SG9zdFNlY29uZGFyeUluY3ViYXRpb25SYXRlMTQoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqIEBvcmRlcmVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIGRvdWJsZSBIT1NUX1NFQ09OREFSWV9JTkNVQkFUSU9OX1JBVEUxNF9FREVGQVVMVCA9IDAuMjsNCisJLyoqDQorCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldEhvc3RTZWNvbmRhcnlJbmN1YmF0aW9uUmF0ZTE0KCkNCisJICogPGVtPkhvc3QgU2Vjb25kYXJ5IEluY3ViYXRpb24gUmF0ZTE0PC9lbT59JyBhdHRyaWJ1dGUuIDwhLS0NCisJICogYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiANCisJICogQHNlZSAjZ2V0SG9zdFNlY29uZGFyeUluY3ViYXRpb25SYXRlMTQoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqIEBvcmRlcmVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgZG91YmxlIGhvc3RTZWNvbmRhcnlJbmN1YmF0aW9uUmF0ZTE0ID0gSE9TVF9TRUNPTkRBUllfSU5DVUJBVElPTl9SQVRFMTRfRURFRkFVTFQ7DQorCS8qKg0KKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0SG9zdFNlY29uZGFyeUluY3ViYXRpb25SYXRlMjEoKQ0KKwkgKiA8ZW0+SG9zdCBTZWNvbmRhcnkgSW5jdWJhdGlvbiBSYXRlMjE8L2VtPn0nIGF0dHJpYnV0ZS4gPCEtLQ0KKwkgKiBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIA0KKwkgKiBAc2VlICNnZXRIb3N0U2Vjb25kYXJ5SW5jdWJhdGlvblJhdGUyMSgpDQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgZG91YmxlIEhPU1RfU0VDT05EQVJZX0lOQ1VCQVRJT05fUkFURTIxX0VERUZBVUxUID0gMC4yOw0KKwkvKioNCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0SG9zdFNlY29uZGFyeUluY3ViYXRpb25SYXRlMjEoKQ0KKwkgKiA8ZW0+SG9zdCBTZWNvbmRhcnkgSW5jdWJhdGlvbiBSYXRlMjE8L2VtPn0nIGF0dHJpYnV0ZS4gPCEtLQ0KKwkgKiBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIA0KKwkgKiBAc2VlICNnZXRIb3N0U2Vjb25kYXJ5SW5jdWJhdGlvblJhdGUyMSgpDQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCXByb3RlY3RlZCBkb3VibGUgaG9zdFNlY29uZGFyeUluY3ViYXRpb25SYXRlMjEgPSBIT1NUX1NFQ09OREFSWV9JTkNVQkFUSU9OX1JBVEUyMV9FREVGQVVMVDsNCisJLyoqDQorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRIb3N0U2Vjb25kYXJ5SW5jdWJhdGlvblJhdGUyMygpDQorCSAqIDxlbT5Ib3N0IFNlY29uZGFyeSBJbmN1YmF0aW9uIFJhdGUyMzwvZW0+fScgYXR0cmlidXRlLiA8IS0tDQorCSAqIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogDQorCSAqIEBzZWUgI2dldEhvc3RTZWNvbmRhcnlJbmN1YmF0aW9uUmF0ZTIzKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBkb3VibGUgSE9TVF9TRUNPTkRBUllfSU5DVUJBVElPTl9SQVRFMjNfRURFRkFVTFQgPSAwLjI7DQorCS8qKg0KKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRIb3N0U2Vjb25kYXJ5SW5jdWJhdGlvblJhdGUyMygpDQorCSAqIDxlbT5Ib3N0IFNlY29uZGFyeSBJbmN1YmF0aW9uIFJhdGUyMzwvZW0+fScgYXR0cmlidXRlLiA8IS0tDQorCSAqIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogDQorCSAqIEBzZWUgI2dldEhvc3RTZWNvbmRhcnlJbmN1YmF0aW9uUmF0ZTIzKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJcHJvdGVjdGVkIGRvdWJsZSBob3N0U2Vjb25kYXJ5SW5jdWJhdGlvblJhdGUyMyA9IEhPU1RfU0VDT05EQVJZX0lOQ1VCQVRJT05fUkFURTIzX0VERUZBVUxUOw0KKwkvKioNCisJICogVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldEhvc3RTZWNvbmRhcnlJbmN1YmF0aW9uUmF0ZTI0KCkNCisJICogPGVtPkhvc3QgU2Vjb25kYXJ5IEluY3ViYXRpb24gUmF0ZTI0PC9lbT59JyBhdHRyaWJ1dGUuIDwhLS0NCisJICogYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiANCisJICogQHNlZSAjZ2V0SG9zdFNlY29uZGFyeUluY3ViYXRpb25SYXRlMjQoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqIEBvcmRlcmVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIGRvdWJsZSBIT1NUX1NFQ09OREFSWV9JTkNVQkFUSU9OX1JBVEUyNF9FREVGQVVMVCA9IDAuMjsNCisJLyoqDQorCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldEhvc3RTZWNvbmRhcnlJbmN1YmF0aW9uUmF0ZTI0KCkNCisJICogPGVtPkhvc3QgU2Vjb25kYXJ5IEluY3ViYXRpb24gUmF0ZTI0PC9lbT59JyBhdHRyaWJ1dGUuIDwhLS0NCisJICogYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiANCisJICogQHNlZSAjZ2V0SG9zdFNlY29uZGFyeUluY3ViYXRpb25SYXRlMjQoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqIEBvcmRlcmVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgZG91YmxlIGhvc3RTZWNvbmRhcnlJbmN1YmF0aW9uUmF0ZTI0ID0gSE9TVF9TRUNPTkRBUllfSU5DVUJBVElPTl9SQVRFMjRfRURFRkFVTFQ7DQorCS8qKg0KKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0SG9zdFNlY29uZGFyeUluY3ViYXRpb25SYXRlMzEoKQ0KKwkgKiA8ZW0+SG9zdCBTZWNvbmRhcnkgSW5jdWJhdGlvbiBSYXRlMzE8L2VtPn0nIGF0dHJpYnV0ZS4gPCEtLQ0KKwkgKiBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIA0KKwkgKiBAc2VlICNnZXRIb3N0U2Vjb25kYXJ5SW5jdWJhdGlvblJhdGUzMSgpDQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgZG91YmxlIEhPU1RfU0VDT05EQVJZX0lOQ1VCQVRJT05fUkFURTMxX0VERUZBVUxUID0gMC4yOw0KKwkvKioNCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0SG9zdFNlY29uZGFyeUluY3ViYXRpb25SYXRlMzEoKQ0KKwkgKiA8ZW0+SG9zdCBTZWNvbmRhcnkgSW5jdWJhdGlvbiBSYXRlMzE8L2VtPn0nIGF0dHJpYnV0ZS4gPCEtLQ0KKwkgKiBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIA0KKwkgKiBAc2VlICNnZXRIb3N0U2Vjb25kYXJ5SW5jdWJhdGlvblJhdGUzMSgpDQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCXByb3RlY3RlZCBkb3VibGUgaG9zdFNlY29uZGFyeUluY3ViYXRpb25SYXRlMzEgPSBIT1NUX1NFQ09OREFSWV9JTkNVQkFUSU9OX1JBVEUzMV9FREVGQVVMVDsNCisJLyoqDQorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRIb3N0U2Vjb25kYXJ5SW5jdWJhdGlvblJhdGUzMigpDQorCSAqIDxlbT5Ib3N0IFNlY29uZGFyeSBJbmN1YmF0aW9uIFJhdGUzMjwvZW0+fScgYXR0cmlidXRlLiA8IS0tDQorCSAqIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogDQorCSAqIEBzZWUgI2dldEhvc3RTZWNvbmRhcnlJbmN1YmF0aW9uUmF0ZTMyKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBkb3VibGUgSE9TVF9TRUNPTkRBUllfSU5DVUJBVElPTl9SQVRFMzJfRURFRkFVTFQgPSAwLjI7DQorCS8qKg0KKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRIb3N0U2Vjb25kYXJ5SW5jdWJhdGlvblJhdGUzMigpDQorCSAqIDxlbT5Ib3N0IFNlY29uZGFyeSBJbmN1YmF0aW9uIFJhdGUzMjwvZW0+fScgYXR0cmlidXRlLiA8IS0tDQorCSAqIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogDQorCSAqIEBzZWUgI2dldEhvc3RTZWNvbmRhcnlJbmN1YmF0aW9uUmF0ZTMyKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJcHJvdGVjdGVkIGRvdWJsZSBob3N0U2Vjb25kYXJ5SW5jdWJhdGlvblJhdGUzMiA9IEhPU1RfU0VDT05EQVJZX0lOQ1VCQVRJT05fUkFURTMyX0VERUZBVUxUOw0KKwkvKioNCisJICogVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldEhvc3RTZWNvbmRhcnlJbmN1YmF0aW9uUmF0ZTM0KCkNCisJICogPGVtPkhvc3QgU2Vjb25kYXJ5IEluY3ViYXRpb24gUmF0ZTM0PC9lbT59JyBhdHRyaWJ1dGUuIDwhLS0NCisJICogYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiANCisJICogQHNlZSAjZ2V0SG9zdFNlY29uZGFyeUluY3ViYXRpb25SYXRlMzQoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqIEBvcmRlcmVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIGRvdWJsZSBIT1NUX1NFQ09OREFSWV9JTkNVQkFUSU9OX1JBVEUzNF9FREVGQVVMVCA9IDAuMjsNCisJLyoqDQorCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldEhvc3RTZWNvbmRhcnlJbmN1YmF0aW9uUmF0ZTM0KCkNCisJICogPGVtPkhvc3QgU2Vjb25kYXJ5IEluY3ViYXRpb24gUmF0ZTM0PC9lbT59JyBhdHRyaWJ1dGUuIDwhLS0NCisJICogYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiANCisJICogQHNlZSAjZ2V0SG9zdFNlY29uZGFyeUluY3ViYXRpb25SYXRlMzQoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqIEBvcmRlcmVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgZG91YmxlIGhvc3RTZWNvbmRhcnlJbmN1YmF0aW9uUmF0ZTM0ID0gSE9TVF9TRUNPTkRBUllfSU5DVUJBVElPTl9SQVRFMzRfRURFRkFVTFQ7DQorCS8qKg0KKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0SG9zdFNlY29uZGFyeUluY3ViYXRpb25SYXRlNDEoKQ0KKwkgKiA8ZW0+SG9zdCBTZWNvbmRhcnkgSW5jdWJhdGlvbiBSYXRlNDE8L2VtPn0nIGF0dHJpYnV0ZS4gPCEtLQ0KKwkgKiBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIA0KKwkgKiBAc2VlICNnZXRIb3N0U2Vjb25kYXJ5SW5jdWJhdGlvblJhdGU0MSgpDQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgZG91YmxlIEhPU1RfU0VDT05EQVJZX0lOQ1VCQVRJT05fUkFURTQxX0VERUZBVUxUID0gMC4yOw0KKwkvKioNCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0SG9zdFNlY29uZGFyeUluY3ViYXRpb25SYXRlNDEoKQ0KKwkgKiA8ZW0+SG9zdCBTZWNvbmRhcnkgSW5jdWJhdGlvbiBSYXRlNDE8L2VtPn0nIGF0dHJpYnV0ZS4gPCEtLQ0KKwkgKiBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIA0KKwkgKiBAc2VlICNnZXRIb3N0U2Vjb25kYXJ5SW5jdWJhdGlvblJhdGU0MSgpDQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCXByb3RlY3RlZCBkb3VibGUgaG9zdFNlY29uZGFyeUluY3ViYXRpb25SYXRlNDEgPSBIT1NUX1NFQ09OREFSWV9JTkNVQkFUSU9OX1JBVEU0MV9FREVGQVVMVDsNCisJLyoqDQorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRIb3N0U2Vjb25kYXJ5SW5jdWJhdGlvblJhdGU0MigpDQorCSAqIDxlbT5Ib3N0IFNlY29uZGFyeSBJbmN1YmF0aW9uIFJhdGU0MjwvZW0+fScgYXR0cmlidXRlLiA8IS0tDQorCSAqIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogDQorCSAqIEBzZWUgI2dldEhvc3RTZWNvbmRhcnlJbmN1YmF0aW9uUmF0ZTQyKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBkb3VibGUgSE9TVF9TRUNPTkRBUllfSU5DVUJBVElPTl9SQVRFNDJfRURFRkFVTFQgPSAwLjI7DQorCS8qKg0KKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRIb3N0U2Vjb25kYXJ5SW5jdWJhdGlvblJhdGU0MigpDQorCSAqIDxlbT5Ib3N0IFNlY29uZGFyeSBJbmN1YmF0aW9uIFJhdGU0MjwvZW0+fScgYXR0cmlidXRlLiA8IS0tDQorCSAqIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogDQorCSAqIEBzZWUgI2dldEhvc3RTZWNvbmRhcnlJbmN1YmF0aW9uUmF0ZTQyKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJcHJvdGVjdGVkIGRvdWJsZSBob3N0U2Vjb25kYXJ5SW5jdWJhdGlvblJhdGU0MiA9IEhPU1RfU0VDT05EQVJZX0lOQ1VCQVRJT05fUkFURTQyX0VERUZBVUxUOw0KKwkvKioNCisJICogVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldEhvc3RTZWNvbmRhcnlJbmN1YmF0aW9uUmF0ZTQzKCkNCisJICogPGVtPkhvc3QgU2Vjb25kYXJ5IEluY3ViYXRpb24gUmF0ZTQzPC9lbT59JyBhdHRyaWJ1dGUuIDwhLS0NCisJICogYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiANCisJICogQHNlZSAjZ2V0SG9zdFNlY29uZGFyeUluY3ViYXRpb25SYXRlNDMoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqIEBvcmRlcmVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIGRvdWJsZSBIT1NUX1NFQ09OREFSWV9JTkNVQkFUSU9OX1JBVEU0M19FREVGQVVMVCA9IDAuMjsNCisJLyoqDQorCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldEhvc3RTZWNvbmRhcnlJbmN1YmF0aW9uUmF0ZTQzKCkNCisJICogPGVtPkhvc3QgU2Vjb25kYXJ5IEluY3ViYXRpb24gUmF0ZTQzPC9lbT59JyBhdHRyaWJ1dGUuIDwhLS0NCisJICogYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiANCisJICogQHNlZSAjZ2V0SG9zdFNlY29uZGFyeUluY3ViYXRpb25SYXRlNDMoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqIEBvcmRlcmVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgZG91YmxlIGhvc3RTZWNvbmRhcnlJbmN1YmF0aW9uUmF0ZTQzID0gSE9TVF9TRUNPTkRBUllfSU5DVUJBVElPTl9SQVRFNDNfRURFRkFVTFQ7DQorCS8qKg0KKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0VmVjdG9ySW5mZWN0aXZpdHkxKCkgPGVtPlZlY3RvciBJbmZlY3Rpdml0eTE8L2VtPn0nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLQ0KKwkgKiBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBzZWUgI2dldFZlY3RvckluZmVjdGl2aXR5MSgpDQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgZG91YmxlIFZFQ1RPUl9JTkZFQ1RJVklUWTFfRURFRkFVTFQgPSAxLjA7DQorCS8qKg0KKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRWZWN0b3JJbmZlY3Rpdml0eTEoKSA8ZW0+VmVjdG9yIEluZmVjdGl2aXR5MTwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tDQorCSAqIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHNlZSAjZ2V0VmVjdG9ySW5mZWN0aXZpdHkxKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJcHJvdGVjdGVkIGRvdWJsZSB2ZWN0b3JJbmZlY3Rpdml0eTEgPSBWRUNUT1JfSU5GRUNUSVZJVFkxX0VERUZBVUxUOw0KKwkvKioNCisJICogVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldFZlY3RvckluZmVjdGl2aXR5MigpIDxlbT5WZWN0b3IgSW5mZWN0aXZpdHkyPC9lbT59JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0NCisJICogZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAc2VlICNnZXRWZWN0b3JJbmZlY3Rpdml0eTIoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqIEBvcmRlcmVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIGRvdWJsZSBWRUNUT1JfSU5GRUNUSVZJVFkyX0VERUZBVUxUID0gMS4wOw0KKwkvKioNCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0VmVjdG9ySW5mZWN0aXZpdHkyKCkgPGVtPlZlY3RvciBJbmZlY3Rpdml0eTI8L2VtPn0nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLQ0KKwkgKiBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBzZWUgI2dldFZlY3RvckluZmVjdGl2aXR5MigpDQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCXByb3RlY3RlZCBkb3VibGUgdmVjdG9ySW5mZWN0aXZpdHkyID0gVkVDVE9SX0lORkVDVElWSVRZMl9FREVGQVVMVDsNCisJLyoqDQorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRWZWN0b3JJbmZlY3Rpdml0eTMoKSA8ZW0+VmVjdG9yIEluZmVjdGl2aXR5MzwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tDQorCSAqIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHNlZSAjZ2V0VmVjdG9ySW5mZWN0aXZpdHkzKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBkb3VibGUgVkVDVE9SX0lORkVDVElWSVRZM19FREVGQVVMVCA9IDEuMDsNCisJLyoqDQorCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldFZlY3RvckluZmVjdGl2aXR5MygpIDxlbT5WZWN0b3IgSW5mZWN0aXZpdHkzPC9lbT59JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0NCisJICogZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAc2VlICNnZXRWZWN0b3JJbmZlY3Rpdml0eTMoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqIEBvcmRlcmVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgZG91YmxlIHZlY3RvckluZmVjdGl2aXR5MyA9IFZFQ1RPUl9JTkZFQ1RJVklUWTNfRURFRkFVTFQ7DQorCS8qKg0KKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0VmVjdG9ySW5mZWN0aXZpdHk0KCkgPGVtPlZlY3RvciBJbmZlY3Rpdml0eTQ8L2VtPn0nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLQ0KKwkgKiBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBzZWUgI2dldFZlY3RvckluZmVjdGl2aXR5NCgpDQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgZG91YmxlIFZFQ1RPUl9JTkZFQ1RJVklUWTRfRURFRkFVTFQgPSAxLjA7DQorCS8qKg0KKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRWZWN0b3JJbmZlY3Rpdml0eTQoKSA8ZW0+VmVjdG9yIEluZmVjdGl2aXR5NDwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tDQorCSAqIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHNlZSAjZ2V0VmVjdG9ySW5mZWN0aXZpdHk0KCkNCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJcHJvdGVjdGVkIGRvdWJsZSB2ZWN0b3JJbmZlY3Rpdml0eTQgPSBWRUNUT1JfSU5GRUNUSVZJVFk0X0VERUZBVUxUOw0KKwkvKioNCisJICogVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldFZlY3RvckFERTEoKSA8ZW0+VmVjdG9yIEFERTE8L2VtPn0nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBzZWUgI2dldFZlY3RvckFERTEoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqIEBvcmRlcmVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIGRvdWJsZSBWRUNUT1JfQURFMV9FREVGQVVMVCA9IDEuODsNCisJLyoqDQorCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldFZlY3RvckFERTEoKSA8ZW0+VmVjdG9yIEFERTE8L2VtPn0nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBzZWUgI2dldFZlY3RvckFERTEoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqIEBvcmRlcmVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgZG91YmxlIHZlY3RvckFERTEgPSBWRUNUT1JfQURFMV9FREVGQVVMVDsNCisJLyoqDQorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRWZWN0b3JBREUyKCkgPGVtPlZlY3RvciBBREUyPC9lbT59JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAc2VlICNnZXRWZWN0b3JBREUyKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBkb3VibGUgVkVDVE9SX0FERTJfRURFRkFVTFQgPSAxLjg7DQorCS8qKg0KKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRWZWN0b3JBREUyKCkgPGVtPlZlY3RvciBBREUyPC9lbT59JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAc2VlICNnZXRWZWN0b3JBREUyKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJcHJvdGVjdGVkIGRvdWJsZSB2ZWN0b3JBREUyID0gVkVDVE9SX0FERTJfRURFRkFVTFQ7DQorCS8qKg0KKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0VmVjdG9yQURFMygpIDxlbT5WZWN0b3IgQURFMzwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHNlZSAjZ2V0VmVjdG9yQURFMygpDQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgZG91YmxlIFZFQ1RPUl9BREUzX0VERUZBVUxUID0gMS44Ow0KKwkvKioNCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0VmVjdG9yQURFMygpIDxlbT5WZWN0b3IgQURFMzwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHNlZSAjZ2V0VmVjdG9yQURFMygpDQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCXByb3RlY3RlZCBkb3VibGUgdmVjdG9yQURFMyA9IFZFQ1RPUl9BREUzX0VERUZBVUxUOw0KKwkvKioNCisJICogVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldFZlY3RvckFERTQoKSA8ZW0+VmVjdG9yIEFERTQ8L2VtPn0nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBzZWUgI2dldFZlY3RvckFERTQoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqIEBvcmRlcmVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIGRvdWJsZSBWRUNUT1JfQURFNF9FREVGQVVMVCA9IDEuODsNCisJLyoqDQorCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldFZlY3RvckFERTQoKSA8ZW0+VmVjdG9yIEFERTQ8L2VtPn0nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBzZWUgI2dldFZlY3RvckFERTQoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqIEBvcmRlcmVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgZG91YmxlIHZlY3RvckFERTQgPSBWRUNUT1JfQURFNF9FREVGQVVMVDsNCisJLyoqDQorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRWZWN0b3JJbmN1YmF0aW9uUmF0ZTEoKSA8ZW0+VmVjdG9yIEluY3ViYXRpb24gUmF0ZTE8L2VtPn0nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBzZWUgI2dldFZlY3RvckluY3ViYXRpb25SYXRlMSgpDQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgZG91YmxlIFZFQ1RPUl9JTkNVQkFUSU9OX1JBVEUxX0VERUZBVUxUID0gMC4xOw0KKwkvKioNCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0VmVjdG9ySW5jdWJhdGlvblJhdGUxKCkgPGVtPlZlY3RvciBJbmN1YmF0aW9uIFJhdGUxPC9lbT59JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAc2VlICNnZXRWZWN0b3JJbmN1YmF0aW9uUmF0ZTEoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqIEBvcmRlcmVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgZG91YmxlIHZlY3RvckluY3ViYXRpb25SYXRlMSA9IFZFQ1RPUl9JTkNVQkFUSU9OX1JBVEUxX0VERUZBVUxUOw0KKwkvKioNCisJICogVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldFZlY3RvckluY3ViYXRpb25SYXRlMigpIDxlbT5WZWN0b3IgSW5jdWJhdGlvbiBSYXRlMjwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHNlZSAjZ2V0VmVjdG9ySW5jdWJhdGlvblJhdGUyKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBkb3VibGUgVkVDVE9SX0lOQ1VCQVRJT05fUkFURTJfRURFRkFVTFQgPSAwLjE7DQorCS8qKg0KKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRWZWN0b3JJbmN1YmF0aW9uUmF0ZTIoKSA8ZW0+VmVjdG9yIEluY3ViYXRpb24gUmF0ZTI8L2VtPn0nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBzZWUgI2dldFZlY3RvckluY3ViYXRpb25SYXRlMigpDQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCXByb3RlY3RlZCBkb3VibGUgdmVjdG9ySW5jdWJhdGlvblJhdGUyID0gVkVDVE9SX0lOQ1VCQVRJT05fUkFURTJfRURFRkFVTFQ7DQorCS8qKg0KKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0VmVjdG9ySW5jdWJhdGlvblJhdGUzKCkgPGVtPlZlY3RvciBJbmN1YmF0aW9uIFJhdGUzPC9lbT59JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAc2VlICNnZXRWZWN0b3JJbmN1YmF0aW9uUmF0ZTMoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqIEBvcmRlcmVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIGRvdWJsZSBWRUNUT1JfSU5DVUJBVElPTl9SQVRFM19FREVGQVVMVCA9IDAuMTsNCisJLyoqDQorCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldFZlY3RvckluY3ViYXRpb25SYXRlMygpIDxlbT5WZWN0b3IgSW5jdWJhdGlvbiBSYXRlMzwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHNlZSAjZ2V0VmVjdG9ySW5jdWJhdGlvblJhdGUzKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJcHJvdGVjdGVkIGRvdWJsZSB2ZWN0b3JJbmN1YmF0aW9uUmF0ZTMgPSBWRUNUT1JfSU5DVUJBVElPTl9SQVRFM19FREVGQVVMVDsNCisJLyoqDQorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRWZWN0b3JJbmN1YmF0aW9uUmF0ZTQoKSA8ZW0+VmVjdG9yIEluY3ViYXRpb24gUmF0ZTQ8L2VtPn0nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBzZWUgI2dldFZlY3RvckluY3ViYXRpb25SYXRlNCgpDQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgZG91YmxlIFZFQ1RPUl9JTkNVQkFUSU9OX1JBVEU0X0VERUZBVUxUID0gMC4xOw0KKwkvKioNCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0VmVjdG9ySW5jdWJhdGlvblJhdGU0KCkgPGVtPlZlY3RvciBJbmN1YmF0aW9uIFJhdGU0PC9lbT59JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAc2VlICNnZXRWZWN0b3JJbmN1YmF0aW9uUmF0ZTQoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqIEBvcmRlcmVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgZG91YmxlIHZlY3RvckluY3ViYXRpb25SYXRlNCA9IFZFQ1RPUl9JTkNVQkFUSU9OX1JBVEU0X0VERUZBVUxUOw0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIA0KKwkgKiBAZ2VuZXJhdGVkIE5PVA0KKwkgKi8NCisJcHVibGljIERlbmd1ZU1vZGVsSW1wbCgpIHsNCisJCXN1cGVyKCk7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlAT3ZlcnJpZGUNCisJcHJvdGVjdGVkIEVDbGFzcyBlU3RhdGljQ2xhc3MoKSB7DQorCQlyZXR1cm4gVmVjdG9yUGFja2FnZS5MaXRlcmFscy5ERU5HVUVfTU9ERUw7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgZG91YmxlIGdldEJpdGluZ1JhdGVTVigpIHsNCisJCXJldHVybiBiaXRpbmdSYXRlU1Y7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgdm9pZCBzZXRCaXRpbmdSYXRlU1YoZG91YmxlIG5ld0JpdGluZ1JhdGVTVikgew0KKwkJZG91YmxlIG9sZEJpdGluZ1JhdGVTViA9IGJpdGluZ1JhdGVTVjsNCisJCWJpdGluZ1JhdGVTViA9IG5ld0JpdGluZ1JhdGVTVjsNCisJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkNCisJCQllTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9fQklUSU5HX1JBVEVfU1YsIG9sZEJpdGluZ1JhdGVTViwgYml0aW5nUmF0ZVNWKSk7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgZG91YmxlIGdldEJpdGluZ1JhdGVJVigpIHsNCisJCXJldHVybiBiaXRpbmdSYXRlSVY7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgdm9pZCBzZXRCaXRpbmdSYXRlSVYoZG91YmxlIG5ld0JpdGluZ1JhdGVJVikgew0KKwkJZG91YmxlIG9sZEJpdGluZ1JhdGVJViA9IGJpdGluZ1JhdGVJVjsNCisJCWJpdGluZ1JhdGVJViA9IG5ld0JpdGluZ1JhdGVJVjsNCisJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkNCisJCQllTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9fQklUSU5HX1JBVEVfSVYsIG9sZEJpdGluZ1JhdGVJViwgYml0aW5nUmF0ZUlWKSk7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgZG91YmxlIGdldEhvc3RJbmZlY3Rpdml0eTEoKSB7DQorCQlyZXR1cm4gaG9zdEluZmVjdGl2aXR5MTsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyB2b2lkIHNldEhvc3RJbmZlY3Rpdml0eTEoZG91YmxlIG5ld0hvc3RJbmZlY3Rpdml0eTEpIHsNCisJCWRvdWJsZSBvbGRIb3N0SW5mZWN0aXZpdHkxID0gaG9zdEluZmVjdGl2aXR5MTsNCisJCWhvc3RJbmZlY3Rpdml0eTEgPSBuZXdIb3N0SW5mZWN0aXZpdHkxOw0KKwkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQ0KKwkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX19IT1NUX0lORkVDVElWSVRZMSwgb2xkSG9zdEluZmVjdGl2aXR5MSwgaG9zdEluZmVjdGl2aXR5MSkpOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIGRvdWJsZSBnZXRIb3N0SW5mZWN0aXZpdHkyKCkgew0KKwkJcmV0dXJuIGhvc3RJbmZlY3Rpdml0eTI7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgdm9pZCBzZXRIb3N0SW5mZWN0aXZpdHkyKGRvdWJsZSBuZXdIb3N0SW5mZWN0aXZpdHkyKSB7DQorCQlkb3VibGUgb2xkSG9zdEluZmVjdGl2aXR5MiA9IGhvc3RJbmZlY3Rpdml0eTI7DQorCQlob3N0SW5mZWN0aXZpdHkyID0gbmV3SG9zdEluZmVjdGl2aXR5MjsNCisJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkNCisJCQllTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9fSE9TVF9JTkZFQ1RJVklUWTIsIG9sZEhvc3RJbmZlY3Rpdml0eTIsIGhvc3RJbmZlY3Rpdml0eTIpKTsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBkb3VibGUgZ2V0SG9zdEluZmVjdGl2aXR5MygpIHsNCisJCXJldHVybiBob3N0SW5mZWN0aXZpdHkzOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIHZvaWQgc2V0SG9zdEluZmVjdGl2aXR5Myhkb3VibGUgbmV3SG9zdEluZmVjdGl2aXR5Mykgew0KKwkJZG91YmxlIG9sZEhvc3RJbmZlY3Rpdml0eTMgPSBob3N0SW5mZWN0aXZpdHkzOw0KKwkJaG9zdEluZmVjdGl2aXR5MyA9IG5ld0hvc3RJbmZlY3Rpdml0eTM7DQorCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpDQorCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfX0hPU1RfSU5GRUNUSVZJVFkzLCBvbGRIb3N0SW5mZWN0aXZpdHkzLCBob3N0SW5mZWN0aXZpdHkzKSk7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgZG91YmxlIGdldEhvc3RJbmZlY3Rpdml0eTQoKSB7DQorCQlyZXR1cm4gaG9zdEluZmVjdGl2aXR5NDsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyB2b2lkIHNldEhvc3RJbmZlY3Rpdml0eTQoZG91YmxlIG5ld0hvc3RJbmZlY3Rpdml0eTQpIHsNCisJCWRvdWJsZSBvbGRIb3N0SW5mZWN0aXZpdHk0ID0gaG9zdEluZmVjdGl2aXR5NDsNCisJCWhvc3RJbmZlY3Rpdml0eTQgPSBuZXdIb3N0SW5mZWN0aXZpdHk0Ow0KKwkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQ0KKwkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX19IT1NUX0lORkVDVElWSVRZNCwgb2xkSG9zdEluZmVjdGl2aXR5NCwgaG9zdEluZmVjdGl2aXR5NCkpOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIGRvdWJsZSBnZXRIb3N0UHJpbWFyeUluY3ViYXRpb25SYXRlMSgpIHsNCisJCXJldHVybiBob3N0UHJpbWFyeUluY3ViYXRpb25SYXRlMTsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyB2b2lkIHNldEhvc3RQcmltYXJ5SW5jdWJhdGlvblJhdGUxKA0KKwkJCWRvdWJsZSBuZXdIb3N0UHJpbWFyeUluY3ViYXRpb25SYXRlMSkgew0KKwkJZG91YmxlIG9sZEhvc3RQcmltYXJ5SW5jdWJhdGlvblJhdGUxID0gaG9zdFByaW1hcnlJbmN1YmF0aW9uUmF0ZTE7DQorCQlob3N0UHJpbWFyeUluY3ViYXRpb25SYXRlMSA9IG5ld0hvc3RQcmltYXJ5SW5jdWJhdGlvblJhdGUxOw0KKwkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQ0KKwkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX19IT1NUX1BSSU1BUllfSU5DVUJBVElPTl9SQVRFMSwgb2xkSG9zdFByaW1hcnlJbmN1YmF0aW9uUmF0ZTEsIGhvc3RQcmltYXJ5SW5jdWJhdGlvblJhdGUxKSk7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgZG91YmxlIGdldEhvc3RQcmltYXJ5SW5jdWJhdGlvblJhdGUyKCkgew0KKwkJcmV0dXJuIGhvc3RQcmltYXJ5SW5jdWJhdGlvblJhdGUyOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIHZvaWQgc2V0SG9zdFByaW1hcnlJbmN1YmF0aW9uUmF0ZTIoDQorCQkJZG91YmxlIG5ld0hvc3RQcmltYXJ5SW5jdWJhdGlvblJhdGUyKSB7DQorCQlkb3VibGUgb2xkSG9zdFByaW1hcnlJbmN1YmF0aW9uUmF0ZTIgPSBob3N0UHJpbWFyeUluY3ViYXRpb25SYXRlMjsNCisJCWhvc3RQcmltYXJ5SW5jdWJhdGlvblJhdGUyID0gbmV3SG9zdFByaW1hcnlJbmN1YmF0aW9uUmF0ZTI7DQorCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpDQorCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfX0hPU1RfUFJJTUFSWV9JTkNVQkFUSU9OX1JBVEUyLCBvbGRIb3N0UHJpbWFyeUluY3ViYXRpb25SYXRlMiwgaG9zdFByaW1hcnlJbmN1YmF0aW9uUmF0ZTIpKTsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBkb3VibGUgZ2V0SG9zdFByaW1hcnlJbmN1YmF0aW9uUmF0ZTMoKSB7DQorCQlyZXR1cm4gaG9zdFByaW1hcnlJbmN1YmF0aW9uUmF0ZTM7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgdm9pZCBzZXRIb3N0UHJpbWFyeUluY3ViYXRpb25SYXRlMygNCisJCQlkb3VibGUgbmV3SG9zdFByaW1hcnlJbmN1YmF0aW9uUmF0ZTMpIHsNCisJCWRvdWJsZSBvbGRIb3N0UHJpbWFyeUluY3ViYXRpb25SYXRlMyA9IGhvc3RQcmltYXJ5SW5jdWJhdGlvblJhdGUzOw0KKwkJaG9zdFByaW1hcnlJbmN1YmF0aW9uUmF0ZTMgPSBuZXdIb3N0UHJpbWFyeUluY3ViYXRpb25SYXRlMzsNCisJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkNCisJCQllTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9fSE9TVF9QUklNQVJZX0lOQ1VCQVRJT05fUkFURTMsIG9sZEhvc3RQcmltYXJ5SW5jdWJhdGlvblJhdGUzLCBob3N0UHJpbWFyeUluY3ViYXRpb25SYXRlMykpOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIGRvdWJsZSBnZXRIb3N0UHJpbWFyeUluY3ViYXRpb25SYXRlNCgpIHsNCisJCXJldHVybiBob3N0UHJpbWFyeUluY3ViYXRpb25SYXRlNDsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyB2b2lkIHNldEhvc3RQcmltYXJ5SW5jdWJhdGlvblJhdGU0KA0KKwkJCWRvdWJsZSBuZXdIb3N0UHJpbWFyeUluY3ViYXRpb25SYXRlNCkgew0KKwkJZG91YmxlIG9sZEhvc3RQcmltYXJ5SW5jdWJhdGlvblJhdGU0ID0gaG9zdFByaW1hcnlJbmN1YmF0aW9uUmF0ZTQ7DQorCQlob3N0UHJpbWFyeUluY3ViYXRpb25SYXRlNCA9IG5ld0hvc3RQcmltYXJ5SW5jdWJhdGlvblJhdGU0Ow0KKwkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQ0KKwkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX19IT1NUX1BSSU1BUllfSU5DVUJBVElPTl9SQVRFNCwgb2xkSG9zdFByaW1hcnlJbmN1YmF0aW9uUmF0ZTQsIGhvc3RQcmltYXJ5SW5jdWJhdGlvblJhdGU0KSk7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgZG91YmxlIGdldEhvc3RQcmltYXJ5UmVjb3ZlcnlSYXRlMSgpIHsNCisJCXJldHVybiBob3N0UHJpbWFyeVJlY292ZXJ5UmF0ZTE7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgdm9pZCBzZXRIb3N0UHJpbWFyeVJlY292ZXJ5UmF0ZTEoZG91YmxlIG5ld0hvc3RQcmltYXJ5UmVjb3ZlcnlSYXRlMSkgew0KKwkJZG91YmxlIG9sZEhvc3RQcmltYXJ5UmVjb3ZlcnlSYXRlMSA9IGhvc3RQcmltYXJ5UmVjb3ZlcnlSYXRlMTsNCisJCWhvc3RQcmltYXJ5UmVjb3ZlcnlSYXRlMSA9IG5ld0hvc3RQcmltYXJ5UmVjb3ZlcnlSYXRlMTsNCisJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkNCisJCQllTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9fSE9TVF9QUklNQVJZX1JFQ09WRVJZX1JBVEUxLCBvbGRIb3N0UHJpbWFyeVJlY292ZXJ5UmF0ZTEsIGhvc3RQcmltYXJ5UmVjb3ZlcnlSYXRlMSkpOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIGRvdWJsZSBnZXRIb3N0UHJpbWFyeVJlY292ZXJ5UmF0ZTIoKSB7DQorCQlyZXR1cm4gaG9zdFByaW1hcnlSZWNvdmVyeVJhdGUyOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIHZvaWQgc2V0SG9zdFByaW1hcnlSZWNvdmVyeVJhdGUyKGRvdWJsZSBuZXdIb3N0UHJpbWFyeVJlY292ZXJ5UmF0ZTIpIHsNCisJCWRvdWJsZSBvbGRIb3N0UHJpbWFyeVJlY292ZXJ5UmF0ZTIgPSBob3N0UHJpbWFyeVJlY292ZXJ5UmF0ZTI7DQorCQlob3N0UHJpbWFyeVJlY292ZXJ5UmF0ZTIgPSBuZXdIb3N0UHJpbWFyeVJlY292ZXJ5UmF0ZTI7DQorCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpDQorCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfX0hPU1RfUFJJTUFSWV9SRUNPVkVSWV9SQVRFMiwgb2xkSG9zdFByaW1hcnlSZWNvdmVyeVJhdGUyLCBob3N0UHJpbWFyeVJlY292ZXJ5UmF0ZTIpKTsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBkb3VibGUgZ2V0SG9zdFByaW1hcnlSZWNvdmVyeVJhdGUzKCkgew0KKwkJcmV0dXJuIGhvc3RQcmltYXJ5UmVjb3ZlcnlSYXRlMzsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyB2b2lkIHNldEhvc3RQcmltYXJ5UmVjb3ZlcnlSYXRlMyhkb3VibGUgbmV3SG9zdFByaW1hcnlSZWNvdmVyeVJhdGUzKSB7DQorCQlkb3VibGUgb2xkSG9zdFByaW1hcnlSZWNvdmVyeVJhdGUzID0gaG9zdFByaW1hcnlSZWNvdmVyeVJhdGUzOw0KKwkJaG9zdFByaW1hcnlSZWNvdmVyeVJhdGUzID0gbmV3SG9zdFByaW1hcnlSZWNvdmVyeVJhdGUzOw0KKwkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQ0KKwkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX19IT1NUX1BSSU1BUllfUkVDT1ZFUllfUkFURTMsIG9sZEhvc3RQcmltYXJ5UmVjb3ZlcnlSYXRlMywgaG9zdFByaW1hcnlSZWNvdmVyeVJhdGUzKSk7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgZG91YmxlIGdldEhvc3RQcmltYXJ5UmVjb3ZlcnlSYXRlNCgpIHsNCisJCXJldHVybiBob3N0UHJpbWFyeVJlY292ZXJ5UmF0ZTQ7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgdm9pZCBzZXRIb3N0UHJpbWFyeVJlY292ZXJ5UmF0ZTQoZG91YmxlIG5ld0hvc3RQcmltYXJ5UmVjb3ZlcnlSYXRlNCkgew0KKwkJZG91YmxlIG9sZEhvc3RQcmltYXJ5UmVjb3ZlcnlSYXRlNCA9IGhvc3RQcmltYXJ5UmVjb3ZlcnlSYXRlNDsNCisJCWhvc3RQcmltYXJ5UmVjb3ZlcnlSYXRlNCA9IG5ld0hvc3RQcmltYXJ5UmVjb3ZlcnlSYXRlNDsNCisJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkNCisJCQllTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9fSE9TVF9QUklNQVJZX1JFQ09WRVJZX1JBVEU0LCBvbGRIb3N0UHJpbWFyeVJlY292ZXJ5UmF0ZTQsIGhvc3RQcmltYXJ5UmVjb3ZlcnlSYXRlNCkpOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIGRvdWJsZSBnZXRIb3N0UHJpbWFyeUltbXVuaXR5TG9zc1JhdGUxKCkgew0KKwkJcmV0dXJuIGhvc3RQcmltYXJ5SW1tdW5pdHlMb3NzUmF0ZTE7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgdm9pZCBzZXRIb3N0UHJpbWFyeUltbXVuaXR5TG9zc1JhdGUxKA0KKwkJCWRvdWJsZSBuZXdIb3N0UHJpbWFyeUltbXVuaXR5TG9zc1JhdGUxKSB7DQorCQlkb3VibGUgb2xkSG9zdFByaW1hcnlJbW11bml0eUxvc3NSYXRlMSA9IGhvc3RQcmltYXJ5SW1tdW5pdHlMb3NzUmF0ZTE7DQorCQlob3N0UHJpbWFyeUltbXVuaXR5TG9zc1JhdGUxID0gbmV3SG9zdFByaW1hcnlJbW11bml0eUxvc3NSYXRlMTsNCisJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkNCisJCQllTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9fSE9TVF9QUklNQVJZX0lNTVVOSVRZX0xPU1NfUkFURTEsIG9sZEhvc3RQcmltYXJ5SW1tdW5pdHlMb3NzUmF0ZTEsIGhvc3RQcmltYXJ5SW1tdW5pdHlMb3NzUmF0ZTEpKTsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBkb3VibGUgZ2V0SG9zdFByaW1hcnlJbW11bml0eUxvc3NSYXRlMigpIHsNCisJCXJldHVybiBob3N0UHJpbWFyeUltbXVuaXR5TG9zc1JhdGUyOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIHZvaWQgc2V0SG9zdFByaW1hcnlJbW11bml0eUxvc3NSYXRlMigNCisJCQlkb3VibGUgbmV3SG9zdFByaW1hcnlJbW11bml0eUxvc3NSYXRlMikgew0KKwkJZG91YmxlIG9sZEhvc3RQcmltYXJ5SW1tdW5pdHlMb3NzUmF0ZTIgPSBob3N0UHJpbWFyeUltbXVuaXR5TG9zc1JhdGUyOw0KKwkJaG9zdFByaW1hcnlJbW11bml0eUxvc3NSYXRlMiA9IG5ld0hvc3RQcmltYXJ5SW1tdW5pdHlMb3NzUmF0ZTI7DQorCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpDQorCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfX0hPU1RfUFJJTUFSWV9JTU1VTklUWV9MT1NTX1JBVEUyLCBvbGRIb3N0UHJpbWFyeUltbXVuaXR5TG9zc1JhdGUyLCBob3N0UHJpbWFyeUltbXVuaXR5TG9zc1JhdGUyKSk7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgZG91YmxlIGdldEhvc3RQcmltYXJ5SW1tdW5pdHlMb3NzUmF0ZTMoKSB7DQorCQlyZXR1cm4gaG9zdFByaW1hcnlJbW11bml0eUxvc3NSYXRlMzsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyB2b2lkIHNldEhvc3RQcmltYXJ5SW1tdW5pdHlMb3NzUmF0ZTMoDQorCQkJZG91YmxlIG5ld0hvc3RQcmltYXJ5SW1tdW5pdHlMb3NzUmF0ZTMpIHsNCisJCWRvdWJsZSBvbGRIb3N0UHJpbWFyeUltbXVuaXR5TG9zc1JhdGUzID0gaG9zdFByaW1hcnlJbW11bml0eUxvc3NSYXRlMzsNCisJCWhvc3RQcmltYXJ5SW1tdW5pdHlMb3NzUmF0ZTMgPSBuZXdIb3N0UHJpbWFyeUltbXVuaXR5TG9zc1JhdGUzOw0KKwkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQ0KKwkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX19IT1NUX1BSSU1BUllfSU1NVU5JVFlfTE9TU19SQVRFMywgb2xkSG9zdFByaW1hcnlJbW11bml0eUxvc3NSYXRlMywgaG9zdFByaW1hcnlJbW11bml0eUxvc3NSYXRlMykpOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIGRvdWJsZSBnZXRIb3N0UHJpbWFyeUltbXVuaXR5TG9zc1JhdGU0KCkgew0KKwkJcmV0dXJuIGhvc3RQcmltYXJ5SW1tdW5pdHlMb3NzUmF0ZTQ7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgdm9pZCBzZXRIb3N0UHJpbWFyeUltbXVuaXR5TG9zc1JhdGU0KA0KKwkJCWRvdWJsZSBuZXdIb3N0UHJpbWFyeUltbXVuaXR5TG9zc1JhdGU0KSB7DQorCQlkb3VibGUgb2xkSG9zdFByaW1hcnlJbW11bml0eUxvc3NSYXRlNCA9IGhvc3RQcmltYXJ5SW1tdW5pdHlMb3NzUmF0ZTQ7DQorCQlob3N0UHJpbWFyeUltbXVuaXR5TG9zc1JhdGU0ID0gbmV3SG9zdFByaW1hcnlJbW11bml0eUxvc3NSYXRlNDsNCisJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkNCisJCQllTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9fSE9TVF9QUklNQVJZX0lNTVVOSVRZX0xPU1NfUkFURTQsIG9sZEhvc3RQcmltYXJ5SW1tdW5pdHlMb3NzUmF0ZTQsIGhvc3RQcmltYXJ5SW1tdW5pdHlMb3NzUmF0ZTQpKTsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBkb3VibGUgZ2V0SG9zdFByaW1hcnlEaXNlYXNlRGVhdGhSYXRlMSgpIHsNCisJCXJldHVybiBob3N0UHJpbWFyeURpc2Vhc2VEZWF0aFJhdGUxOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIHZvaWQgc2V0SG9zdFByaW1hcnlEaXNlYXNlRGVhdGhSYXRlMSgNCisJCQlkb3VibGUgbmV3SG9zdFByaW1hcnlEaXNlYXNlRGVhdGhSYXRlMSkgew0KKwkJZG91YmxlIG9sZEhvc3RQcmltYXJ5RGlzZWFzZURlYXRoUmF0ZTEgPSBob3N0UHJpbWFyeURpc2Vhc2VEZWF0aFJhdGUxOw0KKwkJaG9zdFByaW1hcnlEaXNlYXNlRGVhdGhSYXRlMSA9IG5ld0hvc3RQcmltYXJ5RGlzZWFzZURlYXRoUmF0ZTE7DQorCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpDQorCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfX0hPU1RfUFJJTUFSWV9ESVNFQVNFX0RFQVRIX1JBVEUxLCBvbGRIb3N0UHJpbWFyeURpc2Vhc2VEZWF0aFJhdGUxLCBob3N0UHJpbWFyeURpc2Vhc2VEZWF0aFJhdGUxKSk7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgZG91YmxlIGdldEhvc3RQcmltYXJ5RGlzZWFzZURlYXRoUmF0ZTIoKSB7DQorCQlyZXR1cm4gaG9zdFByaW1hcnlEaXNlYXNlRGVhdGhSYXRlMjsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyB2b2lkIHNldEhvc3RQcmltYXJ5RGlzZWFzZURlYXRoUmF0ZTIoDQorCQkJZG91YmxlIG5ld0hvc3RQcmltYXJ5RGlzZWFzZURlYXRoUmF0ZTIpIHsNCisJCWRvdWJsZSBvbGRIb3N0UHJpbWFyeURpc2Vhc2VEZWF0aFJhdGUyID0gaG9zdFByaW1hcnlEaXNlYXNlRGVhdGhSYXRlMjsNCisJCWhvc3RQcmltYXJ5RGlzZWFzZURlYXRoUmF0ZTIgPSBuZXdIb3N0UHJpbWFyeURpc2Vhc2VEZWF0aFJhdGUyOw0KKwkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQ0KKwkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX19IT1NUX1BSSU1BUllfRElTRUFTRV9ERUFUSF9SQVRFMiwgb2xkSG9zdFByaW1hcnlEaXNlYXNlRGVhdGhSYXRlMiwgaG9zdFByaW1hcnlEaXNlYXNlRGVhdGhSYXRlMikpOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIGRvdWJsZSBnZXRIb3N0UHJpbWFyeURpc2Vhc2VEZWF0aFJhdGUzKCkgew0KKwkJcmV0dXJuIGhvc3RQcmltYXJ5RGlzZWFzZURlYXRoUmF0ZTM7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgdm9pZCBzZXRIb3N0UHJpbWFyeURpc2Vhc2VEZWF0aFJhdGUzKA0KKwkJCWRvdWJsZSBuZXdIb3N0UHJpbWFyeURpc2Vhc2VEZWF0aFJhdGUzKSB7DQorCQlkb3VibGUgb2xkSG9zdFByaW1hcnlEaXNlYXNlRGVhdGhSYXRlMyA9IGhvc3RQcmltYXJ5RGlzZWFzZURlYXRoUmF0ZTM7DQorCQlob3N0UHJpbWFyeURpc2Vhc2VEZWF0aFJhdGUzID0gbmV3SG9zdFByaW1hcnlEaXNlYXNlRGVhdGhSYXRlMzsNCisJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkNCisJCQllTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9fSE9TVF9QUklNQVJZX0RJU0VBU0VfREVBVEhfUkFURTMsIG9sZEhvc3RQcmltYXJ5RGlzZWFzZURlYXRoUmF0ZTMsIGhvc3RQcmltYXJ5RGlzZWFzZURlYXRoUmF0ZTMpKTsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBkb3VibGUgZ2V0SG9zdFByaW1hcnlEaXNlYXNlRGVhdGhSYXRlNCgpIHsNCisJCXJldHVybiBob3N0UHJpbWFyeURpc2Vhc2VEZWF0aFJhdGU0Ow0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIHZvaWQgc2V0SG9zdFByaW1hcnlEaXNlYXNlRGVhdGhSYXRlNCgNCisJCQlkb3VibGUgbmV3SG9zdFByaW1hcnlEaXNlYXNlRGVhdGhSYXRlNCkgew0KKwkJZG91YmxlIG9sZEhvc3RQcmltYXJ5RGlzZWFzZURlYXRoUmF0ZTQgPSBob3N0UHJpbWFyeURpc2Vhc2VEZWF0aFJhdGU0Ow0KKwkJaG9zdFByaW1hcnlEaXNlYXNlRGVhdGhSYXRlNCA9IG5ld0hvc3RQcmltYXJ5RGlzZWFzZURlYXRoUmF0ZTQ7DQorCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpDQorCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfX0hPU1RfUFJJTUFSWV9ESVNFQVNFX0RFQVRIX1JBVEU0LCBvbGRIb3N0UHJpbWFyeURpc2Vhc2VEZWF0aFJhdGU0LCBob3N0UHJpbWFyeURpc2Vhc2VEZWF0aFJhdGU0KSk7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgZG91YmxlIGdldEhvc3RBREUxMigpIHsNCisJCXJldHVybiBob3N0QURFMTI7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgdm9pZCBzZXRIb3N0QURFMTIoZG91YmxlIG5ld0hvc3RBREUxMikgew0KKwkJZG91YmxlIG9sZEhvc3RBREUxMiA9IGhvc3RBREUxMjsNCisJCWhvc3RBREUxMiA9IG5ld0hvc3RBREUxMjsNCisJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkNCisJCQllTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9fSE9TVF9BREUxMiwgb2xkSG9zdEFERTEyLCBob3N0QURFMTIpKTsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBkb3VibGUgZ2V0SG9zdEFERTEzKCkgew0KKwkJcmV0dXJuIGhvc3RBREUxMzsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyB2b2lkIHNldEhvc3RBREUxMyhkb3VibGUgbmV3SG9zdEFERTEzKSB7DQorCQlkb3VibGUgb2xkSG9zdEFERTEzID0gaG9zdEFERTEzOw0KKwkJaG9zdEFERTEzID0gbmV3SG9zdEFERTEzOw0KKwkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQ0KKwkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX19IT1NUX0FERTEzLCBvbGRIb3N0QURFMTMsIGhvc3RBREUxMykpOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIGRvdWJsZSBnZXRIb3N0QURFMTQoKSB7DQorCQlyZXR1cm4gaG9zdEFERTE0Ow0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIHZvaWQgc2V0SG9zdEFERTE0KGRvdWJsZSBuZXdIb3N0QURFMTQpIHsNCisJCWRvdWJsZSBvbGRIb3N0QURFMTQgPSBob3N0QURFMTQ7DQorCQlob3N0QURFMTQgPSBuZXdIb3N0QURFMTQ7DQorCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpDQorCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfX0hPU1RfQURFMTQsIG9sZEhvc3RBREUxNCwgaG9zdEFERTE0KSk7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgZG91YmxlIGdldEhvc3RBREUyMSgpIHsNCisJCXJldHVybiBob3N0QURFMjE7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgdm9pZCBzZXRIb3N0QURFMjEoZG91YmxlIG5ld0hvc3RBREUyMSkgew0KKwkJZG91YmxlIG9sZEhvc3RBREUyMSA9IGhvc3RBREUyMTsNCisJCWhvc3RBREUyMSA9IG5ld0hvc3RBREUyMTsNCisJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkNCisJCQllTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9fSE9TVF9BREUyMSwgb2xkSG9zdEFERTIxLCBob3N0QURFMjEpKTsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBkb3VibGUgZ2V0SG9zdEFERTIzKCkgew0KKwkJcmV0dXJuIGhvc3RBREUyMzsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyB2b2lkIHNldEhvc3RBREUyMyhkb3VibGUgbmV3SG9zdEFERTIzKSB7DQorCQlkb3VibGUgb2xkSG9zdEFERTIzID0gaG9zdEFERTIzOw0KKwkJaG9zdEFERTIzID0gbmV3SG9zdEFERTIzOw0KKwkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQ0KKwkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX19IT1NUX0FERTIzLCBvbGRIb3N0QURFMjMsIGhvc3RBREUyMykpOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIGRvdWJsZSBnZXRIb3N0QURFMjQoKSB7DQorCQlyZXR1cm4gaG9zdEFERTI0Ow0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIHZvaWQgc2V0SG9zdEFERTI0KGRvdWJsZSBuZXdIb3N0QURFMjQpIHsNCisJCWRvdWJsZSBvbGRIb3N0QURFMjQgPSBob3N0QURFMjQ7DQorCQlob3N0QURFMjQgPSBuZXdIb3N0QURFMjQ7DQorCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpDQorCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfX0hPU1RfQURFMjQsIG9sZEhvc3RBREUyNCwgaG9zdEFERTI0KSk7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgZG91YmxlIGdldEhvc3RBREUzMSgpIHsNCisJCXJldHVybiBob3N0QURFMzE7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgdm9pZCBzZXRIb3N0QURFMzEoZG91YmxlIG5ld0hvc3RBREUzMSkgew0KKwkJZG91YmxlIG9sZEhvc3RBREUzMSA9IGhvc3RBREUzMTsNCisJCWhvc3RBREUzMSA9IG5ld0hvc3RBREUzMTsNCisJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkNCisJCQllTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9fSE9TVF9BREUzMSwgb2xkSG9zdEFERTMxLCBob3N0QURFMzEpKTsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBkb3VibGUgZ2V0SG9zdEFERTMyKCkgew0KKwkJcmV0dXJuIGhvc3RBREUzMjsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyB2b2lkIHNldEhvc3RBREUzMihkb3VibGUgbmV3SG9zdEFERTMyKSB7DQorCQlkb3VibGUgb2xkSG9zdEFERTMyID0gaG9zdEFERTMyOw0KKwkJaG9zdEFERTMyID0gbmV3SG9zdEFERTMyOw0KKwkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQ0KKwkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX19IT1NUX0FERTMyLCBvbGRIb3N0QURFMzIsIGhvc3RBREUzMikpOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIGRvdWJsZSBnZXRIb3N0QURFMzQoKSB7DQorCQlyZXR1cm4gaG9zdEFERTM0Ow0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIHZvaWQgc2V0SG9zdEFERTM0KGRvdWJsZSBuZXdIb3N0QURFMzQpIHsNCisJCWRvdWJsZSBvbGRIb3N0QURFMzQgPSBob3N0QURFMzQ7DQorCQlob3N0QURFMzQgPSBuZXdIb3N0QURFMzQ7DQorCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpDQorCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfX0hPU1RfQURFMzQsIG9sZEhvc3RBREUzNCwgaG9zdEFERTM0KSk7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgZG91YmxlIGdldEhvc3RBREU0MSgpIHsNCisJCXJldHVybiBob3N0QURFNDE7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgdm9pZCBzZXRIb3N0QURFNDEoZG91YmxlIG5ld0hvc3RBREU0MSkgew0KKwkJZG91YmxlIG9sZEhvc3RBREU0MSA9IGhvc3RBREU0MTsNCisJCWhvc3RBREU0MSA9IG5ld0hvc3RBREU0MTsNCisJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkNCisJCQllTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9fSE9TVF9BREU0MSwgb2xkSG9zdEFERTQxLCBob3N0QURFNDEpKTsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBkb3VibGUgZ2V0SG9zdEFERTQyKCkgew0KKwkJcmV0dXJuIGhvc3RBREU0MjsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyB2b2lkIHNldEhvc3RBREU0Mihkb3VibGUgbmV3SG9zdEFERTQyKSB7DQorCQlkb3VibGUgb2xkSG9zdEFERTQyID0gaG9zdEFERTQyOw0KKwkJaG9zdEFERTQyID0gbmV3SG9zdEFERTQyOw0KKwkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQ0KKwkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX19IT1NUX0FERTQyLCBvbGRIb3N0QURFNDIsIGhvc3RBREU0MikpOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIGRvdWJsZSBnZXRIb3N0QURFNDMoKSB7DQorCQlyZXR1cm4gaG9zdEFERTQzOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIHZvaWQgc2V0SG9zdEFERTQzKGRvdWJsZSBuZXdIb3N0QURFNDMpIHsNCisJCWRvdWJsZSBvbGRIb3N0QURFNDMgPSBob3N0QURFNDM7DQorCQlob3N0QURFNDMgPSBuZXdIb3N0QURFNDM7DQorCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpDQorCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfX0hPU1RfQURFNDMsIG9sZEhvc3RBREU0MywgaG9zdEFERTQzKSk7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgZG91YmxlIGdldEhvc3RTZWNvbmRhcnlEaXNlYXNlRGVhdGhSYXRlMTIoKSB7DQorCQlyZXR1cm4gaG9zdFNlY29uZGFyeURpc2Vhc2VEZWF0aFJhdGUxMjsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyB2b2lkIHNldEhvc3RTZWNvbmRhcnlEaXNlYXNlRGVhdGhSYXRlMTIoDQorCQkJZG91YmxlIG5ld0hvc3RTZWNvbmRhcnlEaXNlYXNlRGVhdGhSYXRlMTIpIHsNCisJCWRvdWJsZSBvbGRIb3N0U2Vjb25kYXJ5RGlzZWFzZURlYXRoUmF0ZTEyID0gaG9zdFNlY29uZGFyeURpc2Vhc2VEZWF0aFJhdGUxMjsNCisJCWhvc3RTZWNvbmRhcnlEaXNlYXNlRGVhdGhSYXRlMTIgPSBuZXdIb3N0U2Vjb25kYXJ5RGlzZWFzZURlYXRoUmF0ZTEyOw0KKwkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQ0KKwkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX19IT1NUX1NFQ09OREFSWV9ESVNFQVNFX0RFQVRIX1JBVEUxMiwgb2xkSG9zdFNlY29uZGFyeURpc2Vhc2VEZWF0aFJhdGUxMiwgaG9zdFNlY29uZGFyeURpc2Vhc2VEZWF0aFJhdGUxMikpOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIGRvdWJsZSBnZXRIb3N0U2Vjb25kYXJ5RGlzZWFzZURlYXRoUmF0ZTEzKCkgew0KKwkJcmV0dXJuIGhvc3RTZWNvbmRhcnlEaXNlYXNlRGVhdGhSYXRlMTM7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgdm9pZCBzZXRIb3N0U2Vjb25kYXJ5RGlzZWFzZURlYXRoUmF0ZTEzKA0KKwkJCWRvdWJsZSBuZXdIb3N0U2Vjb25kYXJ5RGlzZWFzZURlYXRoUmF0ZTEzKSB7DQorCQlkb3VibGUgb2xkSG9zdFNlY29uZGFyeURpc2Vhc2VEZWF0aFJhdGUxMyA9IGhvc3RTZWNvbmRhcnlEaXNlYXNlRGVhdGhSYXRlMTM7DQorCQlob3N0U2Vjb25kYXJ5RGlzZWFzZURlYXRoUmF0ZTEzID0gbmV3SG9zdFNlY29uZGFyeURpc2Vhc2VEZWF0aFJhdGUxMzsNCisJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkNCisJCQllTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9fSE9TVF9TRUNPTkRBUllfRElTRUFTRV9ERUFUSF9SQVRFMTMsIG9sZEhvc3RTZWNvbmRhcnlEaXNlYXNlRGVhdGhSYXRlMTMsIGhvc3RTZWNvbmRhcnlEaXNlYXNlRGVhdGhSYXRlMTMpKTsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBkb3VibGUgZ2V0SG9zdFNlY29uZGFyeURpc2Vhc2VEZWF0aFJhdGUxNCgpIHsNCisJCXJldHVybiBob3N0U2Vjb25kYXJ5RGlzZWFzZURlYXRoUmF0ZTE0Ow0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIHZvaWQgc2V0SG9zdFNlY29uZGFyeURpc2Vhc2VEZWF0aFJhdGUxNCgNCisJCQlkb3VibGUgbmV3SG9zdFNlY29uZGFyeURpc2Vhc2VEZWF0aFJhdGUxNCkgew0KKwkJZG91YmxlIG9sZEhvc3RTZWNvbmRhcnlEaXNlYXNlRGVhdGhSYXRlMTQgPSBob3N0U2Vjb25kYXJ5RGlzZWFzZURlYXRoUmF0ZTE0Ow0KKwkJaG9zdFNlY29uZGFyeURpc2Vhc2VEZWF0aFJhdGUxNCA9IG5ld0hvc3RTZWNvbmRhcnlEaXNlYXNlRGVhdGhSYXRlMTQ7DQorCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpDQorCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfX0hPU1RfU0VDT05EQVJZX0RJU0VBU0VfREVBVEhfUkFURTE0LCBvbGRIb3N0U2Vjb25kYXJ5RGlzZWFzZURlYXRoUmF0ZTE0LCBob3N0U2Vjb25kYXJ5RGlzZWFzZURlYXRoUmF0ZTE0KSk7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgZG91YmxlIGdldEhvc3RTZWNvbmRhcnlEaXNlYXNlRGVhdGhSYXRlMjEoKSB7DQorCQlyZXR1cm4gaG9zdFNlY29uZGFyeURpc2Vhc2VEZWF0aFJhdGUyMTsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyB2b2lkIHNldEhvc3RTZWNvbmRhcnlEaXNlYXNlRGVhdGhSYXRlMjEoDQorCQkJZG91YmxlIG5ld0hvc3RTZWNvbmRhcnlEaXNlYXNlRGVhdGhSYXRlMjEpIHsNCisJCWRvdWJsZSBvbGRIb3N0U2Vjb25kYXJ5RGlzZWFzZURlYXRoUmF0ZTIxID0gaG9zdFNlY29uZGFyeURpc2Vhc2VEZWF0aFJhdGUyMTsNCisJCWhvc3RTZWNvbmRhcnlEaXNlYXNlRGVhdGhSYXRlMjEgPSBuZXdIb3N0U2Vjb25kYXJ5RGlzZWFzZURlYXRoUmF0ZTIxOw0KKwkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQ0KKwkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX19IT1NUX1NFQ09OREFSWV9ESVNFQVNFX0RFQVRIX1JBVEUyMSwgb2xkSG9zdFNlY29uZGFyeURpc2Vhc2VEZWF0aFJhdGUyMSwgaG9zdFNlY29uZGFyeURpc2Vhc2VEZWF0aFJhdGUyMSkpOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIGRvdWJsZSBnZXRIb3N0U2Vjb25kYXJ5RGlzZWFzZURlYXRoUmF0ZTIzKCkgew0KKwkJcmV0dXJuIGhvc3RTZWNvbmRhcnlEaXNlYXNlRGVhdGhSYXRlMjM7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgdm9pZCBzZXRIb3N0U2Vjb25kYXJ5RGlzZWFzZURlYXRoUmF0ZTIzKA0KKwkJCWRvdWJsZSBuZXdIb3N0U2Vjb25kYXJ5RGlzZWFzZURlYXRoUmF0ZTIzKSB7DQorCQlkb3VibGUgb2xkSG9zdFNlY29uZGFyeURpc2Vhc2VEZWF0aFJhdGUyMyA9IGhvc3RTZWNvbmRhcnlEaXNlYXNlRGVhdGhSYXRlMjM7DQorCQlob3N0U2Vjb25kYXJ5RGlzZWFzZURlYXRoUmF0ZTIzID0gbmV3SG9zdFNlY29uZGFyeURpc2Vhc2VEZWF0aFJhdGUyMzsNCisJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkNCisJCQllTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9fSE9TVF9TRUNPTkRBUllfRElTRUFTRV9ERUFUSF9SQVRFMjMsIG9sZEhvc3RTZWNvbmRhcnlEaXNlYXNlRGVhdGhSYXRlMjMsIGhvc3RTZWNvbmRhcnlEaXNlYXNlRGVhdGhSYXRlMjMpKTsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBkb3VibGUgZ2V0SG9zdFNlY29uZGFyeURpc2Vhc2VEZWF0aFJhdGUyNCgpIHsNCisJCXJldHVybiBob3N0U2Vjb25kYXJ5RGlzZWFzZURlYXRoUmF0ZTI0Ow0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIHZvaWQgc2V0SG9zdFNlY29uZGFyeURpc2Vhc2VEZWF0aFJhdGUyNCgNCisJCQlkb3VibGUgbmV3SG9zdFNlY29uZGFyeURpc2Vhc2VEZWF0aFJhdGUyNCkgew0KKwkJZG91YmxlIG9sZEhvc3RTZWNvbmRhcnlEaXNlYXNlRGVhdGhSYXRlMjQgPSBob3N0U2Vjb25kYXJ5RGlzZWFzZURlYXRoUmF0ZTI0Ow0KKwkJaG9zdFNlY29uZGFyeURpc2Vhc2VEZWF0aFJhdGUyNCA9IG5ld0hvc3RTZWNvbmRhcnlEaXNlYXNlRGVhdGhSYXRlMjQ7DQorCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpDQorCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfX0hPU1RfU0VDT05EQVJZX0RJU0VBU0VfREVBVEhfUkFURTI0LCBvbGRIb3N0U2Vjb25kYXJ5RGlzZWFzZURlYXRoUmF0ZTI0LCBob3N0U2Vjb25kYXJ5RGlzZWFzZURlYXRoUmF0ZTI0KSk7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgZG91YmxlIGdldEhvc3RTZWNvbmRhcnlEaXNlYXNlRGVhdGhSYXRlMzEoKSB7DQorCQlyZXR1cm4gaG9zdFNlY29uZGFyeURpc2Vhc2VEZWF0aFJhdGUzMTsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyB2b2lkIHNldEhvc3RTZWNvbmRhcnlEaXNlYXNlRGVhdGhSYXRlMzEoDQorCQkJZG91YmxlIG5ld0hvc3RTZWNvbmRhcnlEaXNlYXNlRGVhdGhSYXRlMzEpIHsNCisJCWRvdWJsZSBvbGRIb3N0U2Vjb25kYXJ5RGlzZWFzZURlYXRoUmF0ZTMxID0gaG9zdFNlY29uZGFyeURpc2Vhc2VEZWF0aFJhdGUzMTsNCisJCWhvc3RTZWNvbmRhcnlEaXNlYXNlRGVhdGhSYXRlMzEgPSBuZXdIb3N0U2Vjb25kYXJ5RGlzZWFzZURlYXRoUmF0ZTMxOw0KKwkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQ0KKwkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX19IT1NUX1NFQ09OREFSWV9ESVNFQVNFX0RFQVRIX1JBVEUzMSwgb2xkSG9zdFNlY29uZGFyeURpc2Vhc2VEZWF0aFJhdGUzMSwgaG9zdFNlY29uZGFyeURpc2Vhc2VEZWF0aFJhdGUzMSkpOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIGRvdWJsZSBnZXRIb3N0U2Vjb25kYXJ5RGlzZWFzZURlYXRoUmF0ZTMyKCkgew0KKwkJcmV0dXJuIGhvc3RTZWNvbmRhcnlEaXNlYXNlRGVhdGhSYXRlMzI7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgdm9pZCBzZXRIb3N0U2Vjb25kYXJ5RGlzZWFzZURlYXRoUmF0ZTMyKA0KKwkJCWRvdWJsZSBuZXdIb3N0U2Vjb25kYXJ5RGlzZWFzZURlYXRoUmF0ZTMyKSB7DQorCQlkb3VibGUgb2xkSG9zdFNlY29uZGFyeURpc2Vhc2VEZWF0aFJhdGUzMiA9IGhvc3RTZWNvbmRhcnlEaXNlYXNlRGVhdGhSYXRlMzI7DQorCQlob3N0U2Vjb25kYXJ5RGlzZWFzZURlYXRoUmF0ZTMyID0gbmV3SG9zdFNlY29uZGFyeURpc2Vhc2VEZWF0aFJhdGUzMjsNCisJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkNCisJCQllTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9fSE9TVF9TRUNPTkRBUllfRElTRUFTRV9ERUFUSF9SQVRFMzIsIG9sZEhvc3RTZWNvbmRhcnlEaXNlYXNlRGVhdGhSYXRlMzIsIGhvc3RTZWNvbmRhcnlEaXNlYXNlRGVhdGhSYXRlMzIpKTsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBkb3VibGUgZ2V0SG9zdFNlY29uZGFyeURpc2Vhc2VEZWF0aFJhdGUzNCgpIHsNCisJCXJldHVybiBob3N0U2Vjb25kYXJ5RGlzZWFzZURlYXRoUmF0ZTM0Ow0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIHZvaWQgc2V0SG9zdFNlY29uZGFyeURpc2Vhc2VEZWF0aFJhdGUzNCgNCisJCQlkb3VibGUgbmV3SG9zdFNlY29uZGFyeURpc2Vhc2VEZWF0aFJhdGUzNCkgew0KKwkJZG91YmxlIG9sZEhvc3RTZWNvbmRhcnlEaXNlYXNlRGVhdGhSYXRlMzQgPSBob3N0U2Vjb25kYXJ5RGlzZWFzZURlYXRoUmF0ZTM0Ow0KKwkJaG9zdFNlY29uZGFyeURpc2Vhc2VEZWF0aFJhdGUzNCA9IG5ld0hvc3RTZWNvbmRhcnlEaXNlYXNlRGVhdGhSYXRlMzQ7DQorCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpDQorCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfX0hPU1RfU0VDT05EQVJZX0RJU0VBU0VfREVBVEhfUkFURTM0LCBvbGRIb3N0U2Vjb25kYXJ5RGlzZWFzZURlYXRoUmF0ZTM0LCBob3N0U2Vjb25kYXJ5RGlzZWFzZURlYXRoUmF0ZTM0KSk7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgZG91YmxlIGdldEhvc3RTZWNvbmRhcnlEaXNlYXNlRGVhdGhSYXRlNDEoKSB7DQorCQlyZXR1cm4gaG9zdFNlY29uZGFyeURpc2Vhc2VEZWF0aFJhdGU0MTsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyB2b2lkIHNldEhvc3RTZWNvbmRhcnlEaXNlYXNlRGVhdGhSYXRlNDEoDQorCQkJZG91YmxlIG5ld0hvc3RTZWNvbmRhcnlEaXNlYXNlRGVhdGhSYXRlNDEpIHsNCisJCWRvdWJsZSBvbGRIb3N0U2Vjb25kYXJ5RGlzZWFzZURlYXRoUmF0ZTQxID0gaG9zdFNlY29uZGFyeURpc2Vhc2VEZWF0aFJhdGU0MTsNCisJCWhvc3RTZWNvbmRhcnlEaXNlYXNlRGVhdGhSYXRlNDEgPSBuZXdIb3N0U2Vjb25kYXJ5RGlzZWFzZURlYXRoUmF0ZTQxOw0KKwkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQ0KKwkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX19IT1NUX1NFQ09OREFSWV9ESVNFQVNFX0RFQVRIX1JBVEU0MSwgb2xkSG9zdFNlY29uZGFyeURpc2Vhc2VEZWF0aFJhdGU0MSwgaG9zdFNlY29uZGFyeURpc2Vhc2VEZWF0aFJhdGU0MSkpOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIGRvdWJsZSBnZXRIb3N0U2Vjb25kYXJ5RGlzZWFzZURlYXRoUmF0ZTQyKCkgew0KKwkJcmV0dXJuIGhvc3RTZWNvbmRhcnlEaXNlYXNlRGVhdGhSYXRlNDI7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgdm9pZCBzZXRIb3N0U2Vjb25kYXJ5RGlzZWFzZURlYXRoUmF0ZTQyKA0KKwkJCWRvdWJsZSBuZXdIb3N0U2Vjb25kYXJ5RGlzZWFzZURlYXRoUmF0ZTQyKSB7DQorCQlkb3VibGUgb2xkSG9zdFNlY29uZGFyeURpc2Vhc2VEZWF0aFJhdGU0MiA9IGhvc3RTZWNvbmRhcnlEaXNlYXNlRGVhdGhSYXRlNDI7DQorCQlob3N0U2Vjb25kYXJ5RGlzZWFzZURlYXRoUmF0ZTQyID0gbmV3SG9zdFNlY29uZGFyeURpc2Vhc2VEZWF0aFJhdGU0MjsNCisJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkNCisJCQllTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9fSE9TVF9TRUNPTkRBUllfRElTRUFTRV9ERUFUSF9SQVRFNDIsIG9sZEhvc3RTZWNvbmRhcnlEaXNlYXNlRGVhdGhSYXRlNDIsIGhvc3RTZWNvbmRhcnlEaXNlYXNlRGVhdGhSYXRlNDIpKTsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBkb3VibGUgZ2V0SG9zdFNlY29uZGFyeURpc2Vhc2VEZWF0aFJhdGU0MygpIHsNCisJCXJldHVybiBob3N0U2Vjb25kYXJ5RGlzZWFzZURlYXRoUmF0ZTQzOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIHZvaWQgc2V0SG9zdFNlY29uZGFyeURpc2Vhc2VEZWF0aFJhdGU0MygNCisJCQlkb3VibGUgbmV3SG9zdFNlY29uZGFyeURpc2Vhc2VEZWF0aFJhdGU0Mykgew0KKwkJZG91YmxlIG9sZEhvc3RTZWNvbmRhcnlEaXNlYXNlRGVhdGhSYXRlNDMgPSBob3N0U2Vjb25kYXJ5RGlzZWFzZURlYXRoUmF0ZTQzOw0KKwkJaG9zdFNlY29uZGFyeURpc2Vhc2VEZWF0aFJhdGU0MyA9IG5ld0hvc3RTZWNvbmRhcnlEaXNlYXNlRGVhdGhSYXRlNDM7DQorCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpDQorCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfX0hPU1RfU0VDT05EQVJZX0RJU0VBU0VfREVBVEhfUkFURTQzLCBvbGRIb3N0U2Vjb25kYXJ5RGlzZWFzZURlYXRoUmF0ZTQzLCBob3N0U2Vjb25kYXJ5RGlzZWFzZURlYXRoUmF0ZTQzKSk7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgZG91YmxlIGdldEhvc3RTZWNvbmRhcnlSZWNvdmVyeVJhdGUxMigpIHsNCisJCXJldHVybiBob3N0U2Vjb25kYXJ5UmVjb3ZlcnlSYXRlMTI7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgdm9pZCBzZXRIb3N0U2Vjb25kYXJ5UmVjb3ZlcnlSYXRlMTIoDQorCQkJZG91YmxlIG5ld0hvc3RTZWNvbmRhcnlSZWNvdmVyeVJhdGUxMikgew0KKwkJZG91YmxlIG9sZEhvc3RTZWNvbmRhcnlSZWNvdmVyeVJhdGUxMiA9IGhvc3RTZWNvbmRhcnlSZWNvdmVyeVJhdGUxMjsNCisJCWhvc3RTZWNvbmRhcnlSZWNvdmVyeVJhdGUxMiA9IG5ld0hvc3RTZWNvbmRhcnlSZWNvdmVyeVJhdGUxMjsNCisJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkNCisJCQllTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9fSE9TVF9TRUNPTkRBUllfUkVDT1ZFUllfUkFURTEyLCBvbGRIb3N0U2Vjb25kYXJ5UmVjb3ZlcnlSYXRlMTIsIGhvc3RTZWNvbmRhcnlSZWNvdmVyeVJhdGUxMikpOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIGRvdWJsZSBnZXRIb3N0U2Vjb25kYXJ5UmVjb3ZlcnlSYXRlMTMoKSB7DQorCQlyZXR1cm4gaG9zdFNlY29uZGFyeVJlY292ZXJ5UmF0ZTEzOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIHZvaWQgc2V0SG9zdFNlY29uZGFyeVJlY292ZXJ5UmF0ZTEzKA0KKwkJCWRvdWJsZSBuZXdIb3N0U2Vjb25kYXJ5UmVjb3ZlcnlSYXRlMTMpIHsNCisJCWRvdWJsZSBvbGRIb3N0U2Vjb25kYXJ5UmVjb3ZlcnlSYXRlMTMgPSBob3N0U2Vjb25kYXJ5UmVjb3ZlcnlSYXRlMTM7DQorCQlob3N0U2Vjb25kYXJ5UmVjb3ZlcnlSYXRlMTMgPSBuZXdIb3N0U2Vjb25kYXJ5UmVjb3ZlcnlSYXRlMTM7DQorCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpDQorCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfX0hPU1RfU0VDT05EQVJZX1JFQ09WRVJZX1JBVEUxMywgb2xkSG9zdFNlY29uZGFyeVJlY292ZXJ5UmF0ZTEzLCBob3N0U2Vjb25kYXJ5UmVjb3ZlcnlSYXRlMTMpKTsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBkb3VibGUgZ2V0SG9zdFNlY29uZGFyeVJlY292ZXJ5UmF0ZTE0KCkgew0KKwkJcmV0dXJuIGhvc3RTZWNvbmRhcnlSZWNvdmVyeVJhdGUxNDsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyB2b2lkIHNldEhvc3RTZWNvbmRhcnlSZWNvdmVyeVJhdGUxNCgNCisJCQlkb3VibGUgbmV3SG9zdFNlY29uZGFyeVJlY292ZXJ5UmF0ZTE0KSB7DQorCQlkb3VibGUgb2xkSG9zdFNlY29uZGFyeVJlY292ZXJ5UmF0ZTE0ID0gaG9zdFNlY29uZGFyeVJlY292ZXJ5UmF0ZTE0Ow0KKwkJaG9zdFNlY29uZGFyeVJlY292ZXJ5UmF0ZTE0ID0gbmV3SG9zdFNlY29uZGFyeVJlY292ZXJ5UmF0ZTE0Ow0KKwkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQ0KKwkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX19IT1NUX1NFQ09OREFSWV9SRUNPVkVSWV9SQVRFMTQsIG9sZEhvc3RTZWNvbmRhcnlSZWNvdmVyeVJhdGUxNCwgaG9zdFNlY29uZGFyeVJlY292ZXJ5UmF0ZTE0KSk7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgZG91YmxlIGdldEhvc3RTZWNvbmRhcnlSZWNvdmVyeVJhdGUyMSgpIHsNCisJCXJldHVybiBob3N0U2Vjb25kYXJ5UmVjb3ZlcnlSYXRlMjE7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgdm9pZCBzZXRIb3N0U2Vjb25kYXJ5UmVjb3ZlcnlSYXRlMjEoDQorCQkJZG91YmxlIG5ld0hvc3RTZWNvbmRhcnlSZWNvdmVyeVJhdGUyMSkgew0KKwkJZG91YmxlIG9sZEhvc3RTZWNvbmRhcnlSZWNvdmVyeVJhdGUyMSA9IGhvc3RTZWNvbmRhcnlSZWNvdmVyeVJhdGUyMTsNCisJCWhvc3RTZWNvbmRhcnlSZWNvdmVyeVJhdGUyMSA9IG5ld0hvc3RTZWNvbmRhcnlSZWNvdmVyeVJhdGUyMTsNCisJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkNCisJCQllTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9fSE9TVF9TRUNPTkRBUllfUkVDT1ZFUllfUkFURTIxLCBvbGRIb3N0U2Vjb25kYXJ5UmVjb3ZlcnlSYXRlMjEsIGhvc3RTZWNvbmRhcnlSZWNvdmVyeVJhdGUyMSkpOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIGRvdWJsZSBnZXRIb3N0U2Vjb25kYXJ5UmVjb3ZlcnlSYXRlMjMoKSB7DQorCQlyZXR1cm4gaG9zdFNlY29uZGFyeVJlY292ZXJ5UmF0ZTIzOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIHZvaWQgc2V0SG9zdFNlY29uZGFyeVJlY292ZXJ5UmF0ZTIzKA0KKwkJCWRvdWJsZSBuZXdIb3N0U2Vjb25kYXJ5UmVjb3ZlcnlSYXRlMjMpIHsNCisJCWRvdWJsZSBvbGRIb3N0U2Vjb25kYXJ5UmVjb3ZlcnlSYXRlMjMgPSBob3N0U2Vjb25kYXJ5UmVjb3ZlcnlSYXRlMjM7DQorCQlob3N0U2Vjb25kYXJ5UmVjb3ZlcnlSYXRlMjMgPSBuZXdIb3N0U2Vjb25kYXJ5UmVjb3ZlcnlSYXRlMjM7DQorCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpDQorCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfX0hPU1RfU0VDT05EQVJZX1JFQ09WRVJZX1JBVEUyMywgb2xkSG9zdFNlY29uZGFyeVJlY292ZXJ5UmF0ZTIzLCBob3N0U2Vjb25kYXJ5UmVjb3ZlcnlSYXRlMjMpKTsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBkb3VibGUgZ2V0SG9zdFNlY29uZGFyeVJlY292ZXJ5UmF0ZTI0KCkgew0KKwkJcmV0dXJuIGhvc3RTZWNvbmRhcnlSZWNvdmVyeVJhdGUyNDsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyB2b2lkIHNldEhvc3RTZWNvbmRhcnlSZWNvdmVyeVJhdGUyNCgNCisJCQlkb3VibGUgbmV3SG9zdFNlY29uZGFyeVJlY292ZXJ5UmF0ZTI0KSB7DQorCQlkb3VibGUgb2xkSG9zdFNlY29uZGFyeVJlY292ZXJ5UmF0ZTI0ID0gaG9zdFNlY29uZGFyeVJlY292ZXJ5UmF0ZTI0Ow0KKwkJaG9zdFNlY29uZGFyeVJlY292ZXJ5UmF0ZTI0ID0gbmV3SG9zdFNlY29uZGFyeVJlY292ZXJ5UmF0ZTI0Ow0KKwkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQ0KKwkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX19IT1NUX1NFQ09OREFSWV9SRUNPVkVSWV9SQVRFMjQsIG9sZEhvc3RTZWNvbmRhcnlSZWNvdmVyeVJhdGUyNCwgaG9zdFNlY29uZGFyeVJlY292ZXJ5UmF0ZTI0KSk7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgZG91YmxlIGdldEhvc3RTZWNvbmRhcnlSZWNvdmVyeVJhdGUzMSgpIHsNCisJCXJldHVybiBob3N0U2Vjb25kYXJ5UmVjb3ZlcnlSYXRlMzE7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgdm9pZCBzZXRIb3N0U2Vjb25kYXJ5UmVjb3ZlcnlSYXRlMzEoDQorCQkJZG91YmxlIG5ld0hvc3RTZWNvbmRhcnlSZWNvdmVyeVJhdGUzMSkgew0KKwkJZG91YmxlIG9sZEhvc3RTZWNvbmRhcnlSZWNvdmVyeVJhdGUzMSA9IGhvc3RTZWNvbmRhcnlSZWNvdmVyeVJhdGUzMTsNCisJCWhvc3RTZWNvbmRhcnlSZWNvdmVyeVJhdGUzMSA9IG5ld0hvc3RTZWNvbmRhcnlSZWNvdmVyeVJhdGUzMTsNCisJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkNCisJCQllTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9fSE9TVF9TRUNPTkRBUllfUkVDT1ZFUllfUkFURTMxLCBvbGRIb3N0U2Vjb25kYXJ5UmVjb3ZlcnlSYXRlMzEsIGhvc3RTZWNvbmRhcnlSZWNvdmVyeVJhdGUzMSkpOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIGRvdWJsZSBnZXRIb3N0U2Vjb25kYXJ5UmVjb3ZlcnlSYXRlMzIoKSB7DQorCQlyZXR1cm4gaG9zdFNlY29uZGFyeVJlY292ZXJ5UmF0ZTMyOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIHZvaWQgc2V0SG9zdFNlY29uZGFyeVJlY292ZXJ5UmF0ZTMyKA0KKwkJCWRvdWJsZSBuZXdIb3N0U2Vjb25kYXJ5UmVjb3ZlcnlSYXRlMzIpIHsNCisJCWRvdWJsZSBvbGRIb3N0U2Vjb25kYXJ5UmVjb3ZlcnlSYXRlMzIgPSBob3N0U2Vjb25kYXJ5UmVjb3ZlcnlSYXRlMzI7DQorCQlob3N0U2Vjb25kYXJ5UmVjb3ZlcnlSYXRlMzIgPSBuZXdIb3N0U2Vjb25kYXJ5UmVjb3ZlcnlSYXRlMzI7DQorCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpDQorCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfX0hPU1RfU0VDT05EQVJZX1JFQ09WRVJZX1JBVEUzMiwgb2xkSG9zdFNlY29uZGFyeVJlY292ZXJ5UmF0ZTMyLCBob3N0U2Vjb25kYXJ5UmVjb3ZlcnlSYXRlMzIpKTsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBkb3VibGUgZ2V0SG9zdFNlY29uZGFyeVJlY292ZXJ5UmF0ZTM0KCkgew0KKwkJcmV0dXJuIGhvc3RTZWNvbmRhcnlSZWNvdmVyeVJhdGUzNDsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyB2b2lkIHNldEhvc3RTZWNvbmRhcnlSZWNvdmVyeVJhdGUzNCgNCisJCQlkb3VibGUgbmV3SG9zdFNlY29uZGFyeVJlY292ZXJ5UmF0ZTM0KSB7DQorCQlkb3VibGUgb2xkSG9zdFNlY29uZGFyeVJlY292ZXJ5UmF0ZTM0ID0gaG9zdFNlY29uZGFyeVJlY292ZXJ5UmF0ZTM0Ow0KKwkJaG9zdFNlY29uZGFyeVJlY292ZXJ5UmF0ZTM0ID0gbmV3SG9zdFNlY29uZGFyeVJlY292ZXJ5UmF0ZTM0Ow0KKwkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQ0KKwkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX19IT1NUX1NFQ09OREFSWV9SRUNPVkVSWV9SQVRFMzQsIG9sZEhvc3RTZWNvbmRhcnlSZWNvdmVyeVJhdGUzNCwgaG9zdFNlY29uZGFyeVJlY292ZXJ5UmF0ZTM0KSk7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgZG91YmxlIGdldEhvc3RTZWNvbmRhcnlSZWNvdmVyeVJhdGU0MSgpIHsNCisJCXJldHVybiBob3N0U2Vjb25kYXJ5UmVjb3ZlcnlSYXRlNDE7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgdm9pZCBzZXRIb3N0U2Vjb25kYXJ5UmVjb3ZlcnlSYXRlNDEoDQorCQkJZG91YmxlIG5ld0hvc3RTZWNvbmRhcnlSZWNvdmVyeVJhdGU0MSkgew0KKwkJZG91YmxlIG9sZEhvc3RTZWNvbmRhcnlSZWNvdmVyeVJhdGU0MSA9IGhvc3RTZWNvbmRhcnlSZWNvdmVyeVJhdGU0MTsNCisJCWhvc3RTZWNvbmRhcnlSZWNvdmVyeVJhdGU0MSA9IG5ld0hvc3RTZWNvbmRhcnlSZWNvdmVyeVJhdGU0MTsNCisJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkNCisJCQllTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9fSE9TVF9TRUNPTkRBUllfUkVDT1ZFUllfUkFURTQxLCBvbGRIb3N0U2Vjb25kYXJ5UmVjb3ZlcnlSYXRlNDEsIGhvc3RTZWNvbmRhcnlSZWNvdmVyeVJhdGU0MSkpOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIGRvdWJsZSBnZXRIb3N0U2Vjb25kYXJ5UmVjb3ZlcnlSYXRlNDIoKSB7DQorCQlyZXR1cm4gaG9zdFNlY29uZGFyeVJlY292ZXJ5UmF0ZTQyOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIHZvaWQgc2V0SG9zdFNlY29uZGFyeVJlY292ZXJ5UmF0ZTQyKA0KKwkJCWRvdWJsZSBuZXdIb3N0U2Vjb25kYXJ5UmVjb3ZlcnlSYXRlNDIpIHsNCisJCWRvdWJsZSBvbGRIb3N0U2Vjb25kYXJ5UmVjb3ZlcnlSYXRlNDIgPSBob3N0U2Vjb25kYXJ5UmVjb3ZlcnlSYXRlNDI7DQorCQlob3N0U2Vjb25kYXJ5UmVjb3ZlcnlSYXRlNDIgPSBuZXdIb3N0U2Vjb25kYXJ5UmVjb3ZlcnlSYXRlNDI7DQorCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpDQorCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfX0hPU1RfU0VDT05EQVJZX1JFQ09WRVJZX1JBVEU0Miwgb2xkSG9zdFNlY29uZGFyeVJlY292ZXJ5UmF0ZTQyLCBob3N0U2Vjb25kYXJ5UmVjb3ZlcnlSYXRlNDIpKTsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBkb3VibGUgZ2V0SG9zdFNlY29uZGFyeVJlY292ZXJ5UmF0ZTQzKCkgew0KKwkJcmV0dXJuIGhvc3RTZWNvbmRhcnlSZWNvdmVyeVJhdGU0MzsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyB2b2lkIHNldEhvc3RTZWNvbmRhcnlSZWNvdmVyeVJhdGU0MygNCisJCQlkb3VibGUgbmV3SG9zdFNlY29uZGFyeVJlY292ZXJ5UmF0ZTQzKSB7DQorCQlkb3VibGUgb2xkSG9zdFNlY29uZGFyeVJlY292ZXJ5UmF0ZTQzID0gaG9zdFNlY29uZGFyeVJlY292ZXJ5UmF0ZTQzOw0KKwkJaG9zdFNlY29uZGFyeVJlY292ZXJ5UmF0ZTQzID0gbmV3SG9zdFNlY29uZGFyeVJlY292ZXJ5UmF0ZTQzOw0KKwkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQ0KKwkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX19IT1NUX1NFQ09OREFSWV9SRUNPVkVSWV9SQVRFNDMsIG9sZEhvc3RTZWNvbmRhcnlSZWNvdmVyeVJhdGU0MywgaG9zdFNlY29uZGFyeVJlY292ZXJ5UmF0ZTQzKSk7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgZG91YmxlIGdldEhvc3RTZWNvbmRhcnlJbmN1YmF0aW9uUmF0ZTEyKCkgew0KKwkJcmV0dXJuIGhvc3RTZWNvbmRhcnlJbmN1YmF0aW9uUmF0ZTEyOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIHZvaWQgc2V0SG9zdFNlY29uZGFyeUluY3ViYXRpb25SYXRlMTIoDQorCQkJZG91YmxlIG5ld0hvc3RTZWNvbmRhcnlJbmN1YmF0aW9uUmF0ZTEyKSB7DQorCQlkb3VibGUgb2xkSG9zdFNlY29uZGFyeUluY3ViYXRpb25SYXRlMTIgPSBob3N0U2Vjb25kYXJ5SW5jdWJhdGlvblJhdGUxMjsNCisJCWhvc3RTZWNvbmRhcnlJbmN1YmF0aW9uUmF0ZTEyID0gbmV3SG9zdFNlY29uZGFyeUluY3ViYXRpb25SYXRlMTI7DQorCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpDQorCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfX0hPU1RfU0VDT05EQVJZX0lOQ1VCQVRJT05fUkFURTEyLCBvbGRIb3N0U2Vjb25kYXJ5SW5jdWJhdGlvblJhdGUxMiwgaG9zdFNlY29uZGFyeUluY3ViYXRpb25SYXRlMTIpKTsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBkb3VibGUgZ2V0SG9zdFNlY29uZGFyeUluY3ViYXRpb25SYXRlMTMoKSB7DQorCQlyZXR1cm4gaG9zdFNlY29uZGFyeUluY3ViYXRpb25SYXRlMTM7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgdm9pZCBzZXRIb3N0U2Vjb25kYXJ5SW5jdWJhdGlvblJhdGUxMygNCisJCQlkb3VibGUgbmV3SG9zdFNlY29uZGFyeUluY3ViYXRpb25SYXRlMTMpIHsNCisJCWRvdWJsZSBvbGRIb3N0U2Vjb25kYXJ5SW5jdWJhdGlvblJhdGUxMyA9IGhvc3RTZWNvbmRhcnlJbmN1YmF0aW9uUmF0ZTEzOw0KKwkJaG9zdFNlY29uZGFyeUluY3ViYXRpb25SYXRlMTMgPSBuZXdIb3N0U2Vjb25kYXJ5SW5jdWJhdGlvblJhdGUxMzsNCisJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkNCisJCQllTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9fSE9TVF9TRUNPTkRBUllfSU5DVUJBVElPTl9SQVRFMTMsIG9sZEhvc3RTZWNvbmRhcnlJbmN1YmF0aW9uUmF0ZTEzLCBob3N0U2Vjb25kYXJ5SW5jdWJhdGlvblJhdGUxMykpOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIGRvdWJsZSBnZXRIb3N0U2Vjb25kYXJ5SW5jdWJhdGlvblJhdGUxNCgpIHsNCisJCXJldHVybiBob3N0U2Vjb25kYXJ5SW5jdWJhdGlvblJhdGUxNDsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyB2b2lkIHNldEhvc3RTZWNvbmRhcnlJbmN1YmF0aW9uUmF0ZTE0KA0KKwkJCWRvdWJsZSBuZXdIb3N0U2Vjb25kYXJ5SW5jdWJhdGlvblJhdGUxNCkgew0KKwkJZG91YmxlIG9sZEhvc3RTZWNvbmRhcnlJbmN1YmF0aW9uUmF0ZTE0ID0gaG9zdFNlY29uZGFyeUluY3ViYXRpb25SYXRlMTQ7DQorCQlob3N0U2Vjb25kYXJ5SW5jdWJhdGlvblJhdGUxNCA9IG5ld0hvc3RTZWNvbmRhcnlJbmN1YmF0aW9uUmF0ZTE0Ow0KKwkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQ0KKwkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX19IT1NUX1NFQ09OREFSWV9JTkNVQkFUSU9OX1JBVEUxNCwgb2xkSG9zdFNlY29uZGFyeUluY3ViYXRpb25SYXRlMTQsIGhvc3RTZWNvbmRhcnlJbmN1YmF0aW9uUmF0ZTE0KSk7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgZG91YmxlIGdldEhvc3RTZWNvbmRhcnlJbmN1YmF0aW9uUmF0ZTIxKCkgew0KKwkJcmV0dXJuIGhvc3RTZWNvbmRhcnlJbmN1YmF0aW9uUmF0ZTIxOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIHZvaWQgc2V0SG9zdFNlY29uZGFyeUluY3ViYXRpb25SYXRlMjEoDQorCQkJZG91YmxlIG5ld0hvc3RTZWNvbmRhcnlJbmN1YmF0aW9uUmF0ZTIxKSB7DQorCQlkb3VibGUgb2xkSG9zdFNlY29uZGFyeUluY3ViYXRpb25SYXRlMjEgPSBob3N0U2Vjb25kYXJ5SW5jdWJhdGlvblJhdGUyMTsNCisJCWhvc3RTZWNvbmRhcnlJbmN1YmF0aW9uUmF0ZTIxID0gbmV3SG9zdFNlY29uZGFyeUluY3ViYXRpb25SYXRlMjE7DQorCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpDQorCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfX0hPU1RfU0VDT05EQVJZX0lOQ1VCQVRJT05fUkFURTIxLCBvbGRIb3N0U2Vjb25kYXJ5SW5jdWJhdGlvblJhdGUyMSwgaG9zdFNlY29uZGFyeUluY3ViYXRpb25SYXRlMjEpKTsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBkb3VibGUgZ2V0SG9zdFNlY29uZGFyeUluY3ViYXRpb25SYXRlMjMoKSB7DQorCQlyZXR1cm4gaG9zdFNlY29uZGFyeUluY3ViYXRpb25SYXRlMjM7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgdm9pZCBzZXRIb3N0U2Vjb25kYXJ5SW5jdWJhdGlvblJhdGUyMygNCisJCQlkb3VibGUgbmV3SG9zdFNlY29uZGFyeUluY3ViYXRpb25SYXRlMjMpIHsNCisJCWRvdWJsZSBvbGRIb3N0U2Vjb25kYXJ5SW5jdWJhdGlvblJhdGUyMyA9IGhvc3RTZWNvbmRhcnlJbmN1YmF0aW9uUmF0ZTIzOw0KKwkJaG9zdFNlY29uZGFyeUluY3ViYXRpb25SYXRlMjMgPSBuZXdIb3N0U2Vjb25kYXJ5SW5jdWJhdGlvblJhdGUyMzsNCisJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkNCisJCQllTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9fSE9TVF9TRUNPTkRBUllfSU5DVUJBVElPTl9SQVRFMjMsIG9sZEhvc3RTZWNvbmRhcnlJbmN1YmF0aW9uUmF0ZTIzLCBob3N0U2Vjb25kYXJ5SW5jdWJhdGlvblJhdGUyMykpOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIGRvdWJsZSBnZXRIb3N0U2Vjb25kYXJ5SW5jdWJhdGlvblJhdGUyNCgpIHsNCisJCXJldHVybiBob3N0U2Vjb25kYXJ5SW5jdWJhdGlvblJhdGUyNDsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyB2b2lkIHNldEhvc3RTZWNvbmRhcnlJbmN1YmF0aW9uUmF0ZTI0KA0KKwkJCWRvdWJsZSBuZXdIb3N0U2Vjb25kYXJ5SW5jdWJhdGlvblJhdGUyNCkgew0KKwkJZG91YmxlIG9sZEhvc3RTZWNvbmRhcnlJbmN1YmF0aW9uUmF0ZTI0ID0gaG9zdFNlY29uZGFyeUluY3ViYXRpb25SYXRlMjQ7DQorCQlob3N0U2Vjb25kYXJ5SW5jdWJhdGlvblJhdGUyNCA9IG5ld0hvc3RTZWNvbmRhcnlJbmN1YmF0aW9uUmF0ZTI0Ow0KKwkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQ0KKwkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX19IT1NUX1NFQ09OREFSWV9JTkNVQkFUSU9OX1JBVEUyNCwgb2xkSG9zdFNlY29uZGFyeUluY3ViYXRpb25SYXRlMjQsIGhvc3RTZWNvbmRhcnlJbmN1YmF0aW9uUmF0ZTI0KSk7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgZG91YmxlIGdldEhvc3RTZWNvbmRhcnlJbmN1YmF0aW9uUmF0ZTMxKCkgew0KKwkJcmV0dXJuIGhvc3RTZWNvbmRhcnlJbmN1YmF0aW9uUmF0ZTMxOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIHZvaWQgc2V0SG9zdFNlY29uZGFyeUluY3ViYXRpb25SYXRlMzEoDQorCQkJZG91YmxlIG5ld0hvc3RTZWNvbmRhcnlJbmN1YmF0aW9uUmF0ZTMxKSB7DQorCQlkb3VibGUgb2xkSG9zdFNlY29uZGFyeUluY3ViYXRpb25SYXRlMzEgPSBob3N0U2Vjb25kYXJ5SW5jdWJhdGlvblJhdGUzMTsNCisJCWhvc3RTZWNvbmRhcnlJbmN1YmF0aW9uUmF0ZTMxID0gbmV3SG9zdFNlY29uZGFyeUluY3ViYXRpb25SYXRlMzE7DQorCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpDQorCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfX0hPU1RfU0VDT05EQVJZX0lOQ1VCQVRJT05fUkFURTMxLCBvbGRIb3N0U2Vjb25kYXJ5SW5jdWJhdGlvblJhdGUzMSwgaG9zdFNlY29uZGFyeUluY3ViYXRpb25SYXRlMzEpKTsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBkb3VibGUgZ2V0SG9zdFNlY29uZGFyeUluY3ViYXRpb25SYXRlMzIoKSB7DQorCQlyZXR1cm4gaG9zdFNlY29uZGFyeUluY3ViYXRpb25SYXRlMzI7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgdm9pZCBzZXRIb3N0U2Vjb25kYXJ5SW5jdWJhdGlvblJhdGUzMigNCisJCQlkb3VibGUgbmV3SG9zdFNlY29uZGFyeUluY3ViYXRpb25SYXRlMzIpIHsNCisJCWRvdWJsZSBvbGRIb3N0U2Vjb25kYXJ5SW5jdWJhdGlvblJhdGUzMiA9IGhvc3RTZWNvbmRhcnlJbmN1YmF0aW9uUmF0ZTMyOw0KKwkJaG9zdFNlY29uZGFyeUluY3ViYXRpb25SYXRlMzIgPSBuZXdIb3N0U2Vjb25kYXJ5SW5jdWJhdGlvblJhdGUzMjsNCisJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkNCisJCQllTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9fSE9TVF9TRUNPTkRBUllfSU5DVUJBVElPTl9SQVRFMzIsIG9sZEhvc3RTZWNvbmRhcnlJbmN1YmF0aW9uUmF0ZTMyLCBob3N0U2Vjb25kYXJ5SW5jdWJhdGlvblJhdGUzMikpOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIGRvdWJsZSBnZXRIb3N0U2Vjb25kYXJ5SW5jdWJhdGlvblJhdGUzNCgpIHsNCisJCXJldHVybiBob3N0U2Vjb25kYXJ5SW5jdWJhdGlvblJhdGUzNDsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyB2b2lkIHNldEhvc3RTZWNvbmRhcnlJbmN1YmF0aW9uUmF0ZTM0KA0KKwkJCWRvdWJsZSBuZXdIb3N0U2Vjb25kYXJ5SW5jdWJhdGlvblJhdGUzNCkgew0KKwkJZG91YmxlIG9sZEhvc3RTZWNvbmRhcnlJbmN1YmF0aW9uUmF0ZTM0ID0gaG9zdFNlY29uZGFyeUluY3ViYXRpb25SYXRlMzQ7DQorCQlob3N0U2Vjb25kYXJ5SW5jdWJhdGlvblJhdGUzNCA9IG5ld0hvc3RTZWNvbmRhcnlJbmN1YmF0aW9uUmF0ZTM0Ow0KKwkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQ0KKwkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX19IT1NUX1NFQ09OREFSWV9JTkNVQkFUSU9OX1JBVEUzNCwgb2xkSG9zdFNlY29uZGFyeUluY3ViYXRpb25SYXRlMzQsIGhvc3RTZWNvbmRhcnlJbmN1YmF0aW9uUmF0ZTM0KSk7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgZG91YmxlIGdldEhvc3RTZWNvbmRhcnlJbmN1YmF0aW9uUmF0ZTQxKCkgew0KKwkJcmV0dXJuIGhvc3RTZWNvbmRhcnlJbmN1YmF0aW9uUmF0ZTQxOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIHZvaWQgc2V0SG9zdFNlY29uZGFyeUluY3ViYXRpb25SYXRlNDEoDQorCQkJZG91YmxlIG5ld0hvc3RTZWNvbmRhcnlJbmN1YmF0aW9uUmF0ZTQxKSB7DQorCQlkb3VibGUgb2xkSG9zdFNlY29uZGFyeUluY3ViYXRpb25SYXRlNDEgPSBob3N0U2Vjb25kYXJ5SW5jdWJhdGlvblJhdGU0MTsNCisJCWhvc3RTZWNvbmRhcnlJbmN1YmF0aW9uUmF0ZTQxID0gbmV3SG9zdFNlY29uZGFyeUluY3ViYXRpb25SYXRlNDE7DQorCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpDQorCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfX0hPU1RfU0VDT05EQVJZX0lOQ1VCQVRJT05fUkFURTQxLCBvbGRIb3N0U2Vjb25kYXJ5SW5jdWJhdGlvblJhdGU0MSwgaG9zdFNlY29uZGFyeUluY3ViYXRpb25SYXRlNDEpKTsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBkb3VibGUgZ2V0SG9zdFNlY29uZGFyeUluY3ViYXRpb25SYXRlNDIoKSB7DQorCQlyZXR1cm4gaG9zdFNlY29uZGFyeUluY3ViYXRpb25SYXRlNDI7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgdm9pZCBzZXRIb3N0U2Vjb25kYXJ5SW5jdWJhdGlvblJhdGU0MigNCisJCQlkb3VibGUgbmV3SG9zdFNlY29uZGFyeUluY3ViYXRpb25SYXRlNDIpIHsNCisJCWRvdWJsZSBvbGRIb3N0U2Vjb25kYXJ5SW5jdWJhdGlvblJhdGU0MiA9IGhvc3RTZWNvbmRhcnlJbmN1YmF0aW9uUmF0ZTQyOw0KKwkJaG9zdFNlY29uZGFyeUluY3ViYXRpb25SYXRlNDIgPSBuZXdIb3N0U2Vjb25kYXJ5SW5jdWJhdGlvblJhdGU0MjsNCisJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkNCisJCQllTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9fSE9TVF9TRUNPTkRBUllfSU5DVUJBVElPTl9SQVRFNDIsIG9sZEhvc3RTZWNvbmRhcnlJbmN1YmF0aW9uUmF0ZTQyLCBob3N0U2Vjb25kYXJ5SW5jdWJhdGlvblJhdGU0MikpOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIGRvdWJsZSBnZXRIb3N0U2Vjb25kYXJ5SW5jdWJhdGlvblJhdGU0MygpIHsNCisJCXJldHVybiBob3N0U2Vjb25kYXJ5SW5jdWJhdGlvblJhdGU0MzsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyB2b2lkIHNldEhvc3RTZWNvbmRhcnlJbmN1YmF0aW9uUmF0ZTQzKA0KKwkJCWRvdWJsZSBuZXdIb3N0U2Vjb25kYXJ5SW5jdWJhdGlvblJhdGU0Mykgew0KKwkJZG91YmxlIG9sZEhvc3RTZWNvbmRhcnlJbmN1YmF0aW9uUmF0ZTQzID0gaG9zdFNlY29uZGFyeUluY3ViYXRpb25SYXRlNDM7DQorCQlob3N0U2Vjb25kYXJ5SW5jdWJhdGlvblJhdGU0MyA9IG5ld0hvc3RTZWNvbmRhcnlJbmN1YmF0aW9uUmF0ZTQzOw0KKwkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQ0KKwkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX19IT1NUX1NFQ09OREFSWV9JTkNVQkFUSU9OX1JBVEU0Mywgb2xkSG9zdFNlY29uZGFyeUluY3ViYXRpb25SYXRlNDMsIGhvc3RTZWNvbmRhcnlJbmN1YmF0aW9uUmF0ZTQzKSk7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgZG91YmxlIGdldFZlY3RvckluZmVjdGl2aXR5MSgpIHsNCisJCXJldHVybiB2ZWN0b3JJbmZlY3Rpdml0eTE7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgdm9pZCBzZXRWZWN0b3JJbmZlY3Rpdml0eTEoZG91YmxlIG5ld1ZlY3RvckluZmVjdGl2aXR5MSkgew0KKwkJZG91YmxlIG9sZFZlY3RvckluZmVjdGl2aXR5MSA9IHZlY3RvckluZmVjdGl2aXR5MTsNCisJCXZlY3RvckluZmVjdGl2aXR5MSA9IG5ld1ZlY3RvckluZmVjdGl2aXR5MTsNCisJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkNCisJCQllTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9fVkVDVE9SX0lORkVDVElWSVRZMSwgb2xkVmVjdG9ySW5mZWN0aXZpdHkxLCB2ZWN0b3JJbmZlY3Rpdml0eTEpKTsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBkb3VibGUgZ2V0VmVjdG9ySW5mZWN0aXZpdHkyKCkgew0KKwkJcmV0dXJuIHZlY3RvckluZmVjdGl2aXR5MjsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyB2b2lkIHNldFZlY3RvckluZmVjdGl2aXR5Mihkb3VibGUgbmV3VmVjdG9ySW5mZWN0aXZpdHkyKSB7DQorCQlkb3VibGUgb2xkVmVjdG9ySW5mZWN0aXZpdHkyID0gdmVjdG9ySW5mZWN0aXZpdHkyOw0KKwkJdmVjdG9ySW5mZWN0aXZpdHkyID0gbmV3VmVjdG9ySW5mZWN0aXZpdHkyOw0KKwkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQ0KKwkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX19WRUNUT1JfSU5GRUNUSVZJVFkyLCBvbGRWZWN0b3JJbmZlY3Rpdml0eTIsIHZlY3RvckluZmVjdGl2aXR5MikpOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIGRvdWJsZSBnZXRWZWN0b3JJbmZlY3Rpdml0eTMoKSB7DQorCQlyZXR1cm4gdmVjdG9ySW5mZWN0aXZpdHkzOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIHZvaWQgc2V0VmVjdG9ySW5mZWN0aXZpdHkzKGRvdWJsZSBuZXdWZWN0b3JJbmZlY3Rpdml0eTMpIHsNCisJCWRvdWJsZSBvbGRWZWN0b3JJbmZlY3Rpdml0eTMgPSB2ZWN0b3JJbmZlY3Rpdml0eTM7DQorCQl2ZWN0b3JJbmZlY3Rpdml0eTMgPSBuZXdWZWN0b3JJbmZlY3Rpdml0eTM7DQorCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpDQorCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfX1ZFQ1RPUl9JTkZFQ1RJVklUWTMsIG9sZFZlY3RvckluZmVjdGl2aXR5MywgdmVjdG9ySW5mZWN0aXZpdHkzKSk7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgZG91YmxlIGdldFZlY3RvckluZmVjdGl2aXR5NCgpIHsNCisJCXJldHVybiB2ZWN0b3JJbmZlY3Rpdml0eTQ7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgdm9pZCBzZXRWZWN0b3JJbmZlY3Rpdml0eTQoZG91YmxlIG5ld1ZlY3RvckluZmVjdGl2aXR5NCkgew0KKwkJZG91YmxlIG9sZFZlY3RvckluZmVjdGl2aXR5NCA9IHZlY3RvckluZmVjdGl2aXR5NDsNCisJCXZlY3RvckluZmVjdGl2aXR5NCA9IG5ld1ZlY3RvckluZmVjdGl2aXR5NDsNCisJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkNCisJCQllTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9fVkVDVE9SX0lORkVDVElWSVRZNCwgb2xkVmVjdG9ySW5mZWN0aXZpdHk0LCB2ZWN0b3JJbmZlY3Rpdml0eTQpKTsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBkb3VibGUgZ2V0VmVjdG9yQURFMSgpIHsNCisJCXJldHVybiB2ZWN0b3JBREUxOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIHZvaWQgc2V0VmVjdG9yQURFMShkb3VibGUgbmV3VmVjdG9yQURFMSkgew0KKwkJZG91YmxlIG9sZFZlY3RvckFERTEgPSB2ZWN0b3JBREUxOw0KKwkJdmVjdG9yQURFMSA9IG5ld1ZlY3RvckFERTE7DQorCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpDQorCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfX1ZFQ1RPUl9BREUxLCBvbGRWZWN0b3JBREUxLCB2ZWN0b3JBREUxKSk7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgZG91YmxlIGdldFZlY3RvckFERTIoKSB7DQorCQlyZXR1cm4gdmVjdG9yQURFMjsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyB2b2lkIHNldFZlY3RvckFERTIoZG91YmxlIG5ld1ZlY3RvckFERTIpIHsNCisJCWRvdWJsZSBvbGRWZWN0b3JBREUyID0gdmVjdG9yQURFMjsNCisJCXZlY3RvckFERTIgPSBuZXdWZWN0b3JBREUyOw0KKwkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQ0KKwkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX19WRUNUT1JfQURFMiwgb2xkVmVjdG9yQURFMiwgdmVjdG9yQURFMikpOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIGRvdWJsZSBnZXRWZWN0b3JBREUzKCkgew0KKwkJcmV0dXJuIHZlY3RvckFERTM7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgdm9pZCBzZXRWZWN0b3JBREUzKGRvdWJsZSBuZXdWZWN0b3JBREUzKSB7DQorCQlkb3VibGUgb2xkVmVjdG9yQURFMyA9IHZlY3RvckFERTM7DQorCQl2ZWN0b3JBREUzID0gbmV3VmVjdG9yQURFMzsNCisJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkNCisJCQllTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9fVkVDVE9SX0FERTMsIG9sZFZlY3RvckFERTMsIHZlY3RvckFERTMpKTsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBkb3VibGUgZ2V0VmVjdG9yQURFNCgpIHsNCisJCXJldHVybiB2ZWN0b3JBREU0Ow0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIHZvaWQgc2V0VmVjdG9yQURFNChkb3VibGUgbmV3VmVjdG9yQURFNCkgew0KKwkJZG91YmxlIG9sZFZlY3RvckFERTQgPSB2ZWN0b3JBREU0Ow0KKwkJdmVjdG9yQURFNCA9IG5ld1ZlY3RvckFERTQ7DQorCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpDQorCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfX1ZFQ1RPUl9BREU0LCBvbGRWZWN0b3JBREU0LCB2ZWN0b3JBREU0KSk7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgZG91YmxlIGdldFZlY3RvckluY3ViYXRpb25SYXRlMSgpIHsNCisJCXJldHVybiB2ZWN0b3JJbmN1YmF0aW9uUmF0ZTE7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgdm9pZCBzZXRWZWN0b3JJbmN1YmF0aW9uUmF0ZTEoZG91YmxlIG5ld1ZlY3RvckluY3ViYXRpb25SYXRlMSkgew0KKwkJZG91YmxlIG9sZFZlY3RvckluY3ViYXRpb25SYXRlMSA9IHZlY3RvckluY3ViYXRpb25SYXRlMTsNCisJCXZlY3RvckluY3ViYXRpb25SYXRlMSA9IG5ld1ZlY3RvckluY3ViYXRpb25SYXRlMTsNCisJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkNCisJCQllTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9fVkVDVE9SX0lOQ1VCQVRJT05fUkFURTEsIG9sZFZlY3RvckluY3ViYXRpb25SYXRlMSwgdmVjdG9ySW5jdWJhdGlvblJhdGUxKSk7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgZG91YmxlIGdldFZlY3RvckluY3ViYXRpb25SYXRlMigpIHsNCisJCXJldHVybiB2ZWN0b3JJbmN1YmF0aW9uUmF0ZTI7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgdm9pZCBzZXRWZWN0b3JJbmN1YmF0aW9uUmF0ZTIoZG91YmxlIG5ld1ZlY3RvckluY3ViYXRpb25SYXRlMikgew0KKwkJZG91YmxlIG9sZFZlY3RvckluY3ViYXRpb25SYXRlMiA9IHZlY3RvckluY3ViYXRpb25SYXRlMjsNCisJCXZlY3RvckluY3ViYXRpb25SYXRlMiA9IG5ld1ZlY3RvckluY3ViYXRpb25SYXRlMjsNCisJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkNCisJCQllTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9fVkVDVE9SX0lOQ1VCQVRJT05fUkFURTIsIG9sZFZlY3RvckluY3ViYXRpb25SYXRlMiwgdmVjdG9ySW5jdWJhdGlvblJhdGUyKSk7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgZG91YmxlIGdldFZlY3RvckluY3ViYXRpb25SYXRlMygpIHsNCisJCXJldHVybiB2ZWN0b3JJbmN1YmF0aW9uUmF0ZTM7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgdm9pZCBzZXRWZWN0b3JJbmN1YmF0aW9uUmF0ZTMoZG91YmxlIG5ld1ZlY3RvckluY3ViYXRpb25SYXRlMykgew0KKwkJZG91YmxlIG9sZFZlY3RvckluY3ViYXRpb25SYXRlMyA9IHZlY3RvckluY3ViYXRpb25SYXRlMzsNCisJCXZlY3RvckluY3ViYXRpb25SYXRlMyA9IG5ld1ZlY3RvckluY3ViYXRpb25SYXRlMzsNCisJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkNCisJCQllTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9fVkVDVE9SX0lOQ1VCQVRJT05fUkFURTMsIG9sZFZlY3RvckluY3ViYXRpb25SYXRlMywgdmVjdG9ySW5jdWJhdGlvblJhdGUzKSk7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgZG91YmxlIGdldFZlY3RvckluY3ViYXRpb25SYXRlNCgpIHsNCisJCXJldHVybiB2ZWN0b3JJbmN1YmF0aW9uUmF0ZTQ7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgdm9pZCBzZXRWZWN0b3JJbmN1YmF0aW9uUmF0ZTQoZG91YmxlIG5ld1ZlY3RvckluY3ViYXRpb25SYXRlNCkgew0KKwkJZG91YmxlIG9sZFZlY3RvckluY3ViYXRpb25SYXRlNCA9IHZlY3RvckluY3ViYXRpb25SYXRlNDsNCisJCXZlY3RvckluY3ViYXRpb25SYXRlNCA9IG5ld1ZlY3RvckluY3ViYXRpb25SYXRlNDsNCisJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkNCisJCQllTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9fVkVDVE9SX0lOQ1VCQVRJT05fUkFURTQsIG9sZFZlY3RvckluY3ViYXRpb25SYXRlNCwgdmVjdG9ySW5jdWJhdGlvblJhdGU0KSk7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlAT3ZlcnJpZGUNCisJcHVibGljIE9iamVjdCBlR2V0KGludCBmZWF0dXJlSUQsIGJvb2xlYW4gcmVzb2x2ZSwgYm9vbGVhbiBjb3JlVHlwZSkgew0KKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX19CSVRJTkdfUkFURV9TVjoNCisJCQkJcmV0dXJuIGdldEJpdGluZ1JhdGVTVigpOw0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfX0JJVElOR19SQVRFX0lWOg0KKwkJCQlyZXR1cm4gZ2V0Qml0aW5nUmF0ZUlWKCk7DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9fSE9TVF9JTkZFQ1RJVklUWTE6DQorCQkJCXJldHVybiBnZXRIb3N0SW5mZWN0aXZpdHkxKCk7DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9fSE9TVF9JTkZFQ1RJVklUWTI6DQorCQkJCXJldHVybiBnZXRIb3N0SW5mZWN0aXZpdHkyKCk7DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9fSE9TVF9JTkZFQ1RJVklUWTM6DQorCQkJCXJldHVybiBnZXRIb3N0SW5mZWN0aXZpdHkzKCk7DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9fSE9TVF9JTkZFQ1RJVklUWTQ6DQorCQkJCXJldHVybiBnZXRIb3N0SW5mZWN0aXZpdHk0KCk7DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9fSE9TVF9QUklNQVJZX0lOQ1VCQVRJT05fUkFURTE6DQorCQkJCXJldHVybiBnZXRIb3N0UHJpbWFyeUluY3ViYXRpb25SYXRlMSgpOw0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfX0hPU1RfUFJJTUFSWV9JTkNVQkFUSU9OX1JBVEUyOg0KKwkJCQlyZXR1cm4gZ2V0SG9zdFByaW1hcnlJbmN1YmF0aW9uUmF0ZTIoKTsNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX19IT1NUX1BSSU1BUllfSU5DVUJBVElPTl9SQVRFMzoNCisJCQkJcmV0dXJuIGdldEhvc3RQcmltYXJ5SW5jdWJhdGlvblJhdGUzKCk7DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9fSE9TVF9QUklNQVJZX0lOQ1VCQVRJT05fUkFURTQ6DQorCQkJCXJldHVybiBnZXRIb3N0UHJpbWFyeUluY3ViYXRpb25SYXRlNCgpOw0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfX0hPU1RfUFJJTUFSWV9SRUNPVkVSWV9SQVRFMToNCisJCQkJcmV0dXJuIGdldEhvc3RQcmltYXJ5UmVjb3ZlcnlSYXRlMSgpOw0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfX0hPU1RfUFJJTUFSWV9SRUNPVkVSWV9SQVRFMjoNCisJCQkJcmV0dXJuIGdldEhvc3RQcmltYXJ5UmVjb3ZlcnlSYXRlMigpOw0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfX0hPU1RfUFJJTUFSWV9SRUNPVkVSWV9SQVRFMzoNCisJCQkJcmV0dXJuIGdldEhvc3RQcmltYXJ5UmVjb3ZlcnlSYXRlMygpOw0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfX0hPU1RfUFJJTUFSWV9SRUNPVkVSWV9SQVRFNDoNCisJCQkJcmV0dXJuIGdldEhvc3RQcmltYXJ5UmVjb3ZlcnlSYXRlNCgpOw0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfX0hPU1RfUFJJTUFSWV9JTU1VTklUWV9MT1NTX1JBVEUxOg0KKwkJCQlyZXR1cm4gZ2V0SG9zdFByaW1hcnlJbW11bml0eUxvc3NSYXRlMSgpOw0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfX0hPU1RfUFJJTUFSWV9JTU1VTklUWV9MT1NTX1JBVEUyOg0KKwkJCQlyZXR1cm4gZ2V0SG9zdFByaW1hcnlJbW11bml0eUxvc3NSYXRlMigpOw0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfX0hPU1RfUFJJTUFSWV9JTU1VTklUWV9MT1NTX1JBVEUzOg0KKwkJCQlyZXR1cm4gZ2V0SG9zdFByaW1hcnlJbW11bml0eUxvc3NSYXRlMygpOw0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfX0hPU1RfUFJJTUFSWV9JTU1VTklUWV9MT1NTX1JBVEU0Og0KKwkJCQlyZXR1cm4gZ2V0SG9zdFByaW1hcnlJbW11bml0eUxvc3NSYXRlNCgpOw0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfX0hPU1RfUFJJTUFSWV9ESVNFQVNFX0RFQVRIX1JBVEUxOg0KKwkJCQlyZXR1cm4gZ2V0SG9zdFByaW1hcnlEaXNlYXNlRGVhdGhSYXRlMSgpOw0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfX0hPU1RfUFJJTUFSWV9ESVNFQVNFX0RFQVRIX1JBVEUyOg0KKwkJCQlyZXR1cm4gZ2V0SG9zdFByaW1hcnlEaXNlYXNlRGVhdGhSYXRlMigpOw0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfX0hPU1RfUFJJTUFSWV9ESVNFQVNFX0RFQVRIX1JBVEUzOg0KKwkJCQlyZXR1cm4gZ2V0SG9zdFByaW1hcnlEaXNlYXNlRGVhdGhSYXRlMygpOw0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfX0hPU1RfUFJJTUFSWV9ESVNFQVNFX0RFQVRIX1JBVEU0Og0KKwkJCQlyZXR1cm4gZ2V0SG9zdFByaW1hcnlEaXNlYXNlRGVhdGhSYXRlNCgpOw0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfX0hPU1RfQURFMTI6DQorCQkJCXJldHVybiBnZXRIb3N0QURFMTIoKTsNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX19IT1NUX0FERTEzOg0KKwkJCQlyZXR1cm4gZ2V0SG9zdEFERTEzKCk7DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9fSE9TVF9BREUxNDoNCisJCQkJcmV0dXJuIGdldEhvc3RBREUxNCgpOw0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfX0hPU1RfQURFMjE6DQorCQkJCXJldHVybiBnZXRIb3N0QURFMjEoKTsNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX19IT1NUX0FERTIzOg0KKwkJCQlyZXR1cm4gZ2V0SG9zdEFERTIzKCk7DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9fSE9TVF9BREUyNDoNCisJCQkJcmV0dXJuIGdldEhvc3RBREUyNCgpOw0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfX0hPU1RfQURFMzE6DQorCQkJCXJldHVybiBnZXRIb3N0QURFMzEoKTsNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX19IT1NUX0FERTMyOg0KKwkJCQlyZXR1cm4gZ2V0SG9zdEFERTMyKCk7DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9fSE9TVF9BREUzNDoNCisJCQkJcmV0dXJuIGdldEhvc3RBREUzNCgpOw0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfX0hPU1RfQURFNDE6DQorCQkJCXJldHVybiBnZXRIb3N0QURFNDEoKTsNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX19IT1NUX0FERTQyOg0KKwkJCQlyZXR1cm4gZ2V0SG9zdEFERTQyKCk7DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9fSE9TVF9BREU0MzoNCisJCQkJcmV0dXJuIGdldEhvc3RBREU0MygpOw0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfX0hPU1RfU0VDT05EQVJZX0RJU0VBU0VfREVBVEhfUkFURTEyOg0KKwkJCQlyZXR1cm4gZ2V0SG9zdFNlY29uZGFyeURpc2Vhc2VEZWF0aFJhdGUxMigpOw0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfX0hPU1RfU0VDT05EQVJZX0RJU0VBU0VfREVBVEhfUkFURTEzOg0KKwkJCQlyZXR1cm4gZ2V0SG9zdFNlY29uZGFyeURpc2Vhc2VEZWF0aFJhdGUxMygpOw0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfX0hPU1RfU0VDT05EQVJZX0RJU0VBU0VfREVBVEhfUkFURTE0Og0KKwkJCQlyZXR1cm4gZ2V0SG9zdFNlY29uZGFyeURpc2Vhc2VEZWF0aFJhdGUxNCgpOw0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfX0hPU1RfU0VDT05EQVJZX0RJU0VBU0VfREVBVEhfUkFURTIxOg0KKwkJCQlyZXR1cm4gZ2V0SG9zdFNlY29uZGFyeURpc2Vhc2VEZWF0aFJhdGUyMSgpOw0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfX0hPU1RfU0VDT05EQVJZX0RJU0VBU0VfREVBVEhfUkFURTIzOg0KKwkJCQlyZXR1cm4gZ2V0SG9zdFNlY29uZGFyeURpc2Vhc2VEZWF0aFJhdGUyMygpOw0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfX0hPU1RfU0VDT05EQVJZX0RJU0VBU0VfREVBVEhfUkFURTI0Og0KKwkJCQlyZXR1cm4gZ2V0SG9zdFNlY29uZGFyeURpc2Vhc2VEZWF0aFJhdGUyNCgpOw0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfX0hPU1RfU0VDT05EQVJZX0RJU0VBU0VfREVBVEhfUkFURTMxOg0KKwkJCQlyZXR1cm4gZ2V0SG9zdFNlY29uZGFyeURpc2Vhc2VEZWF0aFJhdGUzMSgpOw0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfX0hPU1RfU0VDT05EQVJZX0RJU0VBU0VfREVBVEhfUkFURTMyOg0KKwkJCQlyZXR1cm4gZ2V0SG9zdFNlY29uZGFyeURpc2Vhc2VEZWF0aFJhdGUzMigpOw0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfX0hPU1RfU0VDT05EQVJZX0RJU0VBU0VfREVBVEhfUkFURTM0Og0KKwkJCQlyZXR1cm4gZ2V0SG9zdFNlY29uZGFyeURpc2Vhc2VEZWF0aFJhdGUzNCgpOw0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfX0hPU1RfU0VDT05EQVJZX0RJU0VBU0VfREVBVEhfUkFURTQxOg0KKwkJCQlyZXR1cm4gZ2V0SG9zdFNlY29uZGFyeURpc2Vhc2VEZWF0aFJhdGU0MSgpOw0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfX0hPU1RfU0VDT05EQVJZX0RJU0VBU0VfREVBVEhfUkFURTQyOg0KKwkJCQlyZXR1cm4gZ2V0SG9zdFNlY29uZGFyeURpc2Vhc2VEZWF0aFJhdGU0MigpOw0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfX0hPU1RfU0VDT05EQVJZX0RJU0VBU0VfREVBVEhfUkFURTQzOg0KKwkJCQlyZXR1cm4gZ2V0SG9zdFNlY29uZGFyeURpc2Vhc2VEZWF0aFJhdGU0MygpOw0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfX0hPU1RfU0VDT05EQVJZX1JFQ09WRVJZX1JBVEUxMjoNCisJCQkJcmV0dXJuIGdldEhvc3RTZWNvbmRhcnlSZWNvdmVyeVJhdGUxMigpOw0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfX0hPU1RfU0VDT05EQVJZX1JFQ09WRVJZX1JBVEUxMzoNCisJCQkJcmV0dXJuIGdldEhvc3RTZWNvbmRhcnlSZWNvdmVyeVJhdGUxMygpOw0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfX0hPU1RfU0VDT05EQVJZX1JFQ09WRVJZX1JBVEUxNDoNCisJCQkJcmV0dXJuIGdldEhvc3RTZWNvbmRhcnlSZWNvdmVyeVJhdGUxNCgpOw0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfX0hPU1RfU0VDT05EQVJZX1JFQ09WRVJZX1JBVEUyMToNCisJCQkJcmV0dXJuIGdldEhvc3RTZWNvbmRhcnlSZWNvdmVyeVJhdGUyMSgpOw0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfX0hPU1RfU0VDT05EQVJZX1JFQ09WRVJZX1JBVEUyMzoNCisJCQkJcmV0dXJuIGdldEhvc3RTZWNvbmRhcnlSZWNvdmVyeVJhdGUyMygpOw0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfX0hPU1RfU0VDT05EQVJZX1JFQ09WRVJZX1JBVEUyNDoNCisJCQkJcmV0dXJuIGdldEhvc3RTZWNvbmRhcnlSZWNvdmVyeVJhdGUyNCgpOw0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfX0hPU1RfU0VDT05EQVJZX1JFQ09WRVJZX1JBVEUzMToNCisJCQkJcmV0dXJuIGdldEhvc3RTZWNvbmRhcnlSZWNvdmVyeVJhdGUzMSgpOw0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfX0hPU1RfU0VDT05EQVJZX1JFQ09WRVJZX1JBVEUzMjoNCisJCQkJcmV0dXJuIGdldEhvc3RTZWNvbmRhcnlSZWNvdmVyeVJhdGUzMigpOw0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfX0hPU1RfU0VDT05EQVJZX1JFQ09WRVJZX1JBVEUzNDoNCisJCQkJcmV0dXJuIGdldEhvc3RTZWNvbmRhcnlSZWNvdmVyeVJhdGUzNCgpOw0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfX0hPU1RfU0VDT05EQVJZX1JFQ09WRVJZX1JBVEU0MToNCisJCQkJcmV0dXJuIGdldEhvc3RTZWNvbmRhcnlSZWNvdmVyeVJhdGU0MSgpOw0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfX0hPU1RfU0VDT05EQVJZX1JFQ09WRVJZX1JBVEU0MjoNCisJCQkJcmV0dXJuIGdldEhvc3RTZWNvbmRhcnlSZWNvdmVyeVJhdGU0MigpOw0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfX0hPU1RfU0VDT05EQVJZX1JFQ09WRVJZX1JBVEU0MzoNCisJCQkJcmV0dXJuIGdldEhvc3RTZWNvbmRhcnlSZWNvdmVyeVJhdGU0MygpOw0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfX0hPU1RfU0VDT05EQVJZX0lOQ1VCQVRJT05fUkFURTEyOg0KKwkJCQlyZXR1cm4gZ2V0SG9zdFNlY29uZGFyeUluY3ViYXRpb25SYXRlMTIoKTsNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX19IT1NUX1NFQ09OREFSWV9JTkNVQkFUSU9OX1JBVEUxMzoNCisJCQkJcmV0dXJuIGdldEhvc3RTZWNvbmRhcnlJbmN1YmF0aW9uUmF0ZTEzKCk7DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9fSE9TVF9TRUNPTkRBUllfSU5DVUJBVElPTl9SQVRFMTQ6DQorCQkJCXJldHVybiBnZXRIb3N0U2Vjb25kYXJ5SW5jdWJhdGlvblJhdGUxNCgpOw0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfX0hPU1RfU0VDT05EQVJZX0lOQ1VCQVRJT05fUkFURTIxOg0KKwkJCQlyZXR1cm4gZ2V0SG9zdFNlY29uZGFyeUluY3ViYXRpb25SYXRlMjEoKTsNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX19IT1NUX1NFQ09OREFSWV9JTkNVQkFUSU9OX1JBVEUyMzoNCisJCQkJcmV0dXJuIGdldEhvc3RTZWNvbmRhcnlJbmN1YmF0aW9uUmF0ZTIzKCk7DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9fSE9TVF9TRUNPTkRBUllfSU5DVUJBVElPTl9SQVRFMjQ6DQorCQkJCXJldHVybiBnZXRIb3N0U2Vjb25kYXJ5SW5jdWJhdGlvblJhdGUyNCgpOw0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfX0hPU1RfU0VDT05EQVJZX0lOQ1VCQVRJT05fUkFURTMxOg0KKwkJCQlyZXR1cm4gZ2V0SG9zdFNlY29uZGFyeUluY3ViYXRpb25SYXRlMzEoKTsNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX19IT1NUX1NFQ09OREFSWV9JTkNVQkFUSU9OX1JBVEUzMjoNCisJCQkJcmV0dXJuIGdldEhvc3RTZWNvbmRhcnlJbmN1YmF0aW9uUmF0ZTMyKCk7DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9fSE9TVF9TRUNPTkRBUllfSU5DVUJBVElPTl9SQVRFMzQ6DQorCQkJCXJldHVybiBnZXRIb3N0U2Vjb25kYXJ5SW5jdWJhdGlvblJhdGUzNCgpOw0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfX0hPU1RfU0VDT05EQVJZX0lOQ1VCQVRJT05fUkFURTQxOg0KKwkJCQlyZXR1cm4gZ2V0SG9zdFNlY29uZGFyeUluY3ViYXRpb25SYXRlNDEoKTsNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX19IT1NUX1NFQ09OREFSWV9JTkNVQkFUSU9OX1JBVEU0MjoNCisJCQkJcmV0dXJuIGdldEhvc3RTZWNvbmRhcnlJbmN1YmF0aW9uUmF0ZTQyKCk7DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9fSE9TVF9TRUNPTkRBUllfSU5DVUJBVElPTl9SQVRFNDM6DQorCQkJCXJldHVybiBnZXRIb3N0U2Vjb25kYXJ5SW5jdWJhdGlvblJhdGU0MygpOw0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfX1ZFQ1RPUl9JTkZFQ1RJVklUWTE6DQorCQkJCXJldHVybiBnZXRWZWN0b3JJbmZlY3Rpdml0eTEoKTsNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX19WRUNUT1JfSU5GRUNUSVZJVFkyOg0KKwkJCQlyZXR1cm4gZ2V0VmVjdG9ySW5mZWN0aXZpdHkyKCk7DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9fVkVDVE9SX0lORkVDVElWSVRZMzoNCisJCQkJcmV0dXJuIGdldFZlY3RvckluZmVjdGl2aXR5MygpOw0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfX1ZFQ1RPUl9JTkZFQ1RJVklUWTQ6DQorCQkJCXJldHVybiBnZXRWZWN0b3JJbmZlY3Rpdml0eTQoKTsNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX19WRUNUT1JfQURFMToNCisJCQkJcmV0dXJuIGdldFZlY3RvckFERTEoKTsNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX19WRUNUT1JfQURFMjoNCisJCQkJcmV0dXJuIGdldFZlY3RvckFERTIoKTsNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX19WRUNUT1JfQURFMzoNCisJCQkJcmV0dXJuIGdldFZlY3RvckFERTMoKTsNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX19WRUNUT1JfQURFNDoNCisJCQkJcmV0dXJuIGdldFZlY3RvckFERTQoKTsNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX19WRUNUT1JfSU5DVUJBVElPTl9SQVRFMToNCisJCQkJcmV0dXJuIGdldFZlY3RvckluY3ViYXRpb25SYXRlMSgpOw0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfX1ZFQ1RPUl9JTkNVQkFUSU9OX1JBVEUyOg0KKwkJCQlyZXR1cm4gZ2V0VmVjdG9ySW5jdWJhdGlvblJhdGUyKCk7DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9fVkVDVE9SX0lOQ1VCQVRJT05fUkFURTM6DQorCQkJCXJldHVybiBnZXRWZWN0b3JJbmN1YmF0aW9uUmF0ZTMoKTsNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX19WRUNUT1JfSU5DVUJBVElPTl9SQVRFNDoNCisJCQkJcmV0dXJuIGdldFZlY3RvckluY3ViYXRpb25SYXRlNCgpOw0KKwkJfQ0KKwkJcmV0dXJuIHN1cGVyLmVHZXQoZmVhdHVyZUlELCByZXNvbHZlLCBjb3JlVHlwZSk7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlAT3ZlcnJpZGUNCisJcHVibGljIHZvaWQgZVNldChpbnQgZmVhdHVyZUlELCBPYmplY3QgbmV3VmFsdWUpIHsNCisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9fQklUSU5HX1JBVEVfU1Y6DQorCQkJCXNldEJpdGluZ1JhdGVTVigoRG91YmxlKW5ld1ZhbHVlKTsNCisJCQkJcmV0dXJuOw0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfX0JJVElOR19SQVRFX0lWOg0KKwkJCQlzZXRCaXRpbmdSYXRlSVYoKERvdWJsZSluZXdWYWx1ZSk7DQorCQkJCXJldHVybjsNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX19IT1NUX0lORkVDVElWSVRZMToNCisJCQkJc2V0SG9zdEluZmVjdGl2aXR5MSgoRG91YmxlKW5ld1ZhbHVlKTsNCisJCQkJcmV0dXJuOw0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfX0hPU1RfSU5GRUNUSVZJVFkyOg0KKwkJCQlzZXRIb3N0SW5mZWN0aXZpdHkyKChEb3VibGUpbmV3VmFsdWUpOw0KKwkJCQlyZXR1cm47DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9fSE9TVF9JTkZFQ1RJVklUWTM6DQorCQkJCXNldEhvc3RJbmZlY3Rpdml0eTMoKERvdWJsZSluZXdWYWx1ZSk7DQorCQkJCXJldHVybjsNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX19IT1NUX0lORkVDVElWSVRZNDoNCisJCQkJc2V0SG9zdEluZmVjdGl2aXR5NCgoRG91YmxlKW5ld1ZhbHVlKTsNCisJCQkJcmV0dXJuOw0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfX0hPU1RfUFJJTUFSWV9JTkNVQkFUSU9OX1JBVEUxOg0KKwkJCQlzZXRIb3N0UHJpbWFyeUluY3ViYXRpb25SYXRlMSgoRG91YmxlKW5ld1ZhbHVlKTsNCisJCQkJcmV0dXJuOw0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfX0hPU1RfUFJJTUFSWV9JTkNVQkFUSU9OX1JBVEUyOg0KKwkJCQlzZXRIb3N0UHJpbWFyeUluY3ViYXRpb25SYXRlMigoRG91YmxlKW5ld1ZhbHVlKTsNCisJCQkJcmV0dXJuOw0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfX0hPU1RfUFJJTUFSWV9JTkNVQkFUSU9OX1JBVEUzOg0KKwkJCQlzZXRIb3N0UHJpbWFyeUluY3ViYXRpb25SYXRlMygoRG91YmxlKW5ld1ZhbHVlKTsNCisJCQkJcmV0dXJuOw0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfX0hPU1RfUFJJTUFSWV9JTkNVQkFUSU9OX1JBVEU0Og0KKwkJCQlzZXRIb3N0UHJpbWFyeUluY3ViYXRpb25SYXRlNCgoRG91YmxlKW5ld1ZhbHVlKTsNCisJCQkJcmV0dXJuOw0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfX0hPU1RfUFJJTUFSWV9SRUNPVkVSWV9SQVRFMToNCisJCQkJc2V0SG9zdFByaW1hcnlSZWNvdmVyeVJhdGUxKChEb3VibGUpbmV3VmFsdWUpOw0KKwkJCQlyZXR1cm47DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9fSE9TVF9QUklNQVJZX1JFQ09WRVJZX1JBVEUyOg0KKwkJCQlzZXRIb3N0UHJpbWFyeVJlY292ZXJ5UmF0ZTIoKERvdWJsZSluZXdWYWx1ZSk7DQorCQkJCXJldHVybjsNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX19IT1NUX1BSSU1BUllfUkVDT1ZFUllfUkFURTM6DQorCQkJCXNldEhvc3RQcmltYXJ5UmVjb3ZlcnlSYXRlMygoRG91YmxlKW5ld1ZhbHVlKTsNCisJCQkJcmV0dXJuOw0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfX0hPU1RfUFJJTUFSWV9SRUNPVkVSWV9SQVRFNDoNCisJCQkJc2V0SG9zdFByaW1hcnlSZWNvdmVyeVJhdGU0KChEb3VibGUpbmV3VmFsdWUpOw0KKwkJCQlyZXR1cm47DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9fSE9TVF9QUklNQVJZX0lNTVVOSVRZX0xPU1NfUkFURTE6DQorCQkJCXNldEhvc3RQcmltYXJ5SW1tdW5pdHlMb3NzUmF0ZTEoKERvdWJsZSluZXdWYWx1ZSk7DQorCQkJCXJldHVybjsNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX19IT1NUX1BSSU1BUllfSU1NVU5JVFlfTE9TU19SQVRFMjoNCisJCQkJc2V0SG9zdFByaW1hcnlJbW11bml0eUxvc3NSYXRlMigoRG91YmxlKW5ld1ZhbHVlKTsNCisJCQkJcmV0dXJuOw0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfX0hPU1RfUFJJTUFSWV9JTU1VTklUWV9MT1NTX1JBVEUzOg0KKwkJCQlzZXRIb3N0UHJpbWFyeUltbXVuaXR5TG9zc1JhdGUzKChEb3VibGUpbmV3VmFsdWUpOw0KKwkJCQlyZXR1cm47DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9fSE9TVF9QUklNQVJZX0lNTVVOSVRZX0xPU1NfUkFURTQ6DQorCQkJCXNldEhvc3RQcmltYXJ5SW1tdW5pdHlMb3NzUmF0ZTQoKERvdWJsZSluZXdWYWx1ZSk7DQorCQkJCXJldHVybjsNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX19IT1NUX1BSSU1BUllfRElTRUFTRV9ERUFUSF9SQVRFMToNCisJCQkJc2V0SG9zdFByaW1hcnlEaXNlYXNlRGVhdGhSYXRlMSgoRG91YmxlKW5ld1ZhbHVlKTsNCisJCQkJcmV0dXJuOw0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfX0hPU1RfUFJJTUFSWV9ESVNFQVNFX0RFQVRIX1JBVEUyOg0KKwkJCQlzZXRIb3N0UHJpbWFyeURpc2Vhc2VEZWF0aFJhdGUyKChEb3VibGUpbmV3VmFsdWUpOw0KKwkJCQlyZXR1cm47DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9fSE9TVF9QUklNQVJZX0RJU0VBU0VfREVBVEhfUkFURTM6DQorCQkJCXNldEhvc3RQcmltYXJ5RGlzZWFzZURlYXRoUmF0ZTMoKERvdWJsZSluZXdWYWx1ZSk7DQorCQkJCXJldHVybjsNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX19IT1NUX1BSSU1BUllfRElTRUFTRV9ERUFUSF9SQVRFNDoNCisJCQkJc2V0SG9zdFByaW1hcnlEaXNlYXNlRGVhdGhSYXRlNCgoRG91YmxlKW5ld1ZhbHVlKTsNCisJCQkJcmV0dXJuOw0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfX0hPU1RfQURFMTI6DQorCQkJCXNldEhvc3RBREUxMigoRG91YmxlKW5ld1ZhbHVlKTsNCisJCQkJcmV0dXJuOw0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfX0hPU1RfQURFMTM6DQorCQkJCXNldEhvc3RBREUxMygoRG91YmxlKW5ld1ZhbHVlKTsNCisJCQkJcmV0dXJuOw0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfX0hPU1RfQURFMTQ6DQorCQkJCXNldEhvc3RBREUxNCgoRG91YmxlKW5ld1ZhbHVlKTsNCisJCQkJcmV0dXJuOw0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfX0hPU1RfQURFMjE6DQorCQkJCXNldEhvc3RBREUyMSgoRG91YmxlKW5ld1ZhbHVlKTsNCisJCQkJcmV0dXJuOw0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfX0hPU1RfQURFMjM6DQorCQkJCXNldEhvc3RBREUyMygoRG91YmxlKW5ld1ZhbHVlKTsNCisJCQkJcmV0dXJuOw0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfX0hPU1RfQURFMjQ6DQorCQkJCXNldEhvc3RBREUyNCgoRG91YmxlKW5ld1ZhbHVlKTsNCisJCQkJcmV0dXJuOw0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfX0hPU1RfQURFMzE6DQorCQkJCXNldEhvc3RBREUzMSgoRG91YmxlKW5ld1ZhbHVlKTsNCisJCQkJcmV0dXJuOw0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfX0hPU1RfQURFMzI6DQorCQkJCXNldEhvc3RBREUzMigoRG91YmxlKW5ld1ZhbHVlKTsNCisJCQkJcmV0dXJuOw0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfX0hPU1RfQURFMzQ6DQorCQkJCXNldEhvc3RBREUzNCgoRG91YmxlKW5ld1ZhbHVlKTsNCisJCQkJcmV0dXJuOw0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfX0hPU1RfQURFNDE6DQorCQkJCXNldEhvc3RBREU0MSgoRG91YmxlKW5ld1ZhbHVlKTsNCisJCQkJcmV0dXJuOw0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfX0hPU1RfQURFNDI6DQorCQkJCXNldEhvc3RBREU0MigoRG91YmxlKW5ld1ZhbHVlKTsNCisJCQkJcmV0dXJuOw0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfX0hPU1RfQURFNDM6DQorCQkJCXNldEhvc3RBREU0MygoRG91YmxlKW5ld1ZhbHVlKTsNCisJCQkJcmV0dXJuOw0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfX0hPU1RfU0VDT05EQVJZX0RJU0VBU0VfREVBVEhfUkFURTEyOg0KKwkJCQlzZXRIb3N0U2Vjb25kYXJ5RGlzZWFzZURlYXRoUmF0ZTEyKChEb3VibGUpbmV3VmFsdWUpOw0KKwkJCQlyZXR1cm47DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9fSE9TVF9TRUNPTkRBUllfRElTRUFTRV9ERUFUSF9SQVRFMTM6DQorCQkJCXNldEhvc3RTZWNvbmRhcnlEaXNlYXNlRGVhdGhSYXRlMTMoKERvdWJsZSluZXdWYWx1ZSk7DQorCQkJCXJldHVybjsNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX19IT1NUX1NFQ09OREFSWV9ESVNFQVNFX0RFQVRIX1JBVEUxNDoNCisJCQkJc2V0SG9zdFNlY29uZGFyeURpc2Vhc2VEZWF0aFJhdGUxNCgoRG91YmxlKW5ld1ZhbHVlKTsNCisJCQkJcmV0dXJuOw0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfX0hPU1RfU0VDT05EQVJZX0RJU0VBU0VfREVBVEhfUkFURTIxOg0KKwkJCQlzZXRIb3N0U2Vjb25kYXJ5RGlzZWFzZURlYXRoUmF0ZTIxKChEb3VibGUpbmV3VmFsdWUpOw0KKwkJCQlyZXR1cm47DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9fSE9TVF9TRUNPTkRBUllfRElTRUFTRV9ERUFUSF9SQVRFMjM6DQorCQkJCXNldEhvc3RTZWNvbmRhcnlEaXNlYXNlRGVhdGhSYXRlMjMoKERvdWJsZSluZXdWYWx1ZSk7DQorCQkJCXJldHVybjsNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX19IT1NUX1NFQ09OREFSWV9ESVNFQVNFX0RFQVRIX1JBVEUyNDoNCisJCQkJc2V0SG9zdFNlY29uZGFyeURpc2Vhc2VEZWF0aFJhdGUyNCgoRG91YmxlKW5ld1ZhbHVlKTsNCisJCQkJcmV0dXJuOw0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfX0hPU1RfU0VDT05EQVJZX0RJU0VBU0VfREVBVEhfUkFURTMxOg0KKwkJCQlzZXRIb3N0U2Vjb25kYXJ5RGlzZWFzZURlYXRoUmF0ZTMxKChEb3VibGUpbmV3VmFsdWUpOw0KKwkJCQlyZXR1cm47DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9fSE9TVF9TRUNPTkRBUllfRElTRUFTRV9ERUFUSF9SQVRFMzI6DQorCQkJCXNldEhvc3RTZWNvbmRhcnlEaXNlYXNlRGVhdGhSYXRlMzIoKERvdWJsZSluZXdWYWx1ZSk7DQorCQkJCXJldHVybjsNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX19IT1NUX1NFQ09OREFSWV9ESVNFQVNFX0RFQVRIX1JBVEUzNDoNCisJCQkJc2V0SG9zdFNlY29uZGFyeURpc2Vhc2VEZWF0aFJhdGUzNCgoRG91YmxlKW5ld1ZhbHVlKTsNCisJCQkJcmV0dXJuOw0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfX0hPU1RfU0VDT05EQVJZX0RJU0VBU0VfREVBVEhfUkFURTQxOg0KKwkJCQlzZXRIb3N0U2Vjb25kYXJ5RGlzZWFzZURlYXRoUmF0ZTQxKChEb3VibGUpbmV3VmFsdWUpOw0KKwkJCQlyZXR1cm47DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9fSE9TVF9TRUNPTkRBUllfRElTRUFTRV9ERUFUSF9SQVRFNDI6DQorCQkJCXNldEhvc3RTZWNvbmRhcnlEaXNlYXNlRGVhdGhSYXRlNDIoKERvdWJsZSluZXdWYWx1ZSk7DQorCQkJCXJldHVybjsNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX19IT1NUX1NFQ09OREFSWV9ESVNFQVNFX0RFQVRIX1JBVEU0MzoNCisJCQkJc2V0SG9zdFNlY29uZGFyeURpc2Vhc2VEZWF0aFJhdGU0MygoRG91YmxlKW5ld1ZhbHVlKTsNCisJCQkJcmV0dXJuOw0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfX0hPU1RfU0VDT05EQVJZX1JFQ09WRVJZX1JBVEUxMjoNCisJCQkJc2V0SG9zdFNlY29uZGFyeVJlY292ZXJ5UmF0ZTEyKChEb3VibGUpbmV3VmFsdWUpOw0KKwkJCQlyZXR1cm47DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9fSE9TVF9TRUNPTkRBUllfUkVDT1ZFUllfUkFURTEzOg0KKwkJCQlzZXRIb3N0U2Vjb25kYXJ5UmVjb3ZlcnlSYXRlMTMoKERvdWJsZSluZXdWYWx1ZSk7DQorCQkJCXJldHVybjsNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX19IT1NUX1NFQ09OREFSWV9SRUNPVkVSWV9SQVRFMTQ6DQorCQkJCXNldEhvc3RTZWNvbmRhcnlSZWNvdmVyeVJhdGUxNCgoRG91YmxlKW5ld1ZhbHVlKTsNCisJCQkJcmV0dXJuOw0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfX0hPU1RfU0VDT05EQVJZX1JFQ09WRVJZX1JBVEUyMToNCisJCQkJc2V0SG9zdFNlY29uZGFyeVJlY292ZXJ5UmF0ZTIxKChEb3VibGUpbmV3VmFsdWUpOw0KKwkJCQlyZXR1cm47DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9fSE9TVF9TRUNPTkRBUllfUkVDT1ZFUllfUkFURTIzOg0KKwkJCQlzZXRIb3N0U2Vjb25kYXJ5UmVjb3ZlcnlSYXRlMjMoKERvdWJsZSluZXdWYWx1ZSk7DQorCQkJCXJldHVybjsNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX19IT1NUX1NFQ09OREFSWV9SRUNPVkVSWV9SQVRFMjQ6DQorCQkJCXNldEhvc3RTZWNvbmRhcnlSZWNvdmVyeVJhdGUyNCgoRG91YmxlKW5ld1ZhbHVlKTsNCisJCQkJcmV0dXJuOw0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfX0hPU1RfU0VDT05EQVJZX1JFQ09WRVJZX1JBVEUzMToNCisJCQkJc2V0SG9zdFNlY29uZGFyeVJlY292ZXJ5UmF0ZTMxKChEb3VibGUpbmV3VmFsdWUpOw0KKwkJCQlyZXR1cm47DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9fSE9TVF9TRUNPTkRBUllfUkVDT1ZFUllfUkFURTMyOg0KKwkJCQlzZXRIb3N0U2Vjb25kYXJ5UmVjb3ZlcnlSYXRlMzIoKERvdWJsZSluZXdWYWx1ZSk7DQorCQkJCXJldHVybjsNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX19IT1NUX1NFQ09OREFSWV9SRUNPVkVSWV9SQVRFMzQ6DQorCQkJCXNldEhvc3RTZWNvbmRhcnlSZWNvdmVyeVJhdGUzNCgoRG91YmxlKW5ld1ZhbHVlKTsNCisJCQkJcmV0dXJuOw0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfX0hPU1RfU0VDT05EQVJZX1JFQ09WRVJZX1JBVEU0MToNCisJCQkJc2V0SG9zdFNlY29uZGFyeVJlY292ZXJ5UmF0ZTQxKChEb3VibGUpbmV3VmFsdWUpOw0KKwkJCQlyZXR1cm47DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9fSE9TVF9TRUNPTkRBUllfUkVDT1ZFUllfUkFURTQyOg0KKwkJCQlzZXRIb3N0U2Vjb25kYXJ5UmVjb3ZlcnlSYXRlNDIoKERvdWJsZSluZXdWYWx1ZSk7DQorCQkJCXJldHVybjsNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX19IT1NUX1NFQ09OREFSWV9SRUNPVkVSWV9SQVRFNDM6DQorCQkJCXNldEhvc3RTZWNvbmRhcnlSZWNvdmVyeVJhdGU0MygoRG91YmxlKW5ld1ZhbHVlKTsNCisJCQkJcmV0dXJuOw0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfX0hPU1RfU0VDT05EQVJZX0lOQ1VCQVRJT05fUkFURTEyOg0KKwkJCQlzZXRIb3N0U2Vjb25kYXJ5SW5jdWJhdGlvblJhdGUxMigoRG91YmxlKW5ld1ZhbHVlKTsNCisJCQkJcmV0dXJuOw0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfX0hPU1RfU0VDT05EQVJZX0lOQ1VCQVRJT05fUkFURTEzOg0KKwkJCQlzZXRIb3N0U2Vjb25kYXJ5SW5jdWJhdGlvblJhdGUxMygoRG91YmxlKW5ld1ZhbHVlKTsNCisJCQkJcmV0dXJuOw0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfX0hPU1RfU0VDT05EQVJZX0lOQ1VCQVRJT05fUkFURTE0Og0KKwkJCQlzZXRIb3N0U2Vjb25kYXJ5SW5jdWJhdGlvblJhdGUxNCgoRG91YmxlKW5ld1ZhbHVlKTsNCisJCQkJcmV0dXJuOw0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfX0hPU1RfU0VDT05EQVJZX0lOQ1VCQVRJT05fUkFURTIxOg0KKwkJCQlzZXRIb3N0U2Vjb25kYXJ5SW5jdWJhdGlvblJhdGUyMSgoRG91YmxlKW5ld1ZhbHVlKTsNCisJCQkJcmV0dXJuOw0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfX0hPU1RfU0VDT05EQVJZX0lOQ1VCQVRJT05fUkFURTIzOg0KKwkJCQlzZXRIb3N0U2Vjb25kYXJ5SW5jdWJhdGlvblJhdGUyMygoRG91YmxlKW5ld1ZhbHVlKTsNCisJCQkJcmV0dXJuOw0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfX0hPU1RfU0VDT05EQVJZX0lOQ1VCQVRJT05fUkFURTI0Og0KKwkJCQlzZXRIb3N0U2Vjb25kYXJ5SW5jdWJhdGlvblJhdGUyNCgoRG91YmxlKW5ld1ZhbHVlKTsNCisJCQkJcmV0dXJuOw0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfX0hPU1RfU0VDT05EQVJZX0lOQ1VCQVRJT05fUkFURTMxOg0KKwkJCQlzZXRIb3N0U2Vjb25kYXJ5SW5jdWJhdGlvblJhdGUzMSgoRG91YmxlKW5ld1ZhbHVlKTsNCisJCQkJcmV0dXJuOw0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfX0hPU1RfU0VDT05EQVJZX0lOQ1VCQVRJT05fUkFURTMyOg0KKwkJCQlzZXRIb3N0U2Vjb25kYXJ5SW5jdWJhdGlvblJhdGUzMigoRG91YmxlKW5ld1ZhbHVlKTsNCisJCQkJcmV0dXJuOw0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfX0hPU1RfU0VDT05EQVJZX0lOQ1VCQVRJT05fUkFURTM0Og0KKwkJCQlzZXRIb3N0U2Vjb25kYXJ5SW5jdWJhdGlvblJhdGUzNCgoRG91YmxlKW5ld1ZhbHVlKTsNCisJCQkJcmV0dXJuOw0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfX0hPU1RfU0VDT05EQVJZX0lOQ1VCQVRJT05fUkFURTQxOg0KKwkJCQlzZXRIb3N0U2Vjb25kYXJ5SW5jdWJhdGlvblJhdGU0MSgoRG91YmxlKW5ld1ZhbHVlKTsNCisJCQkJcmV0dXJuOw0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfX0hPU1RfU0VDT05EQVJZX0lOQ1VCQVRJT05fUkFURTQyOg0KKwkJCQlzZXRIb3N0U2Vjb25kYXJ5SW5jdWJhdGlvblJhdGU0MigoRG91YmxlKW5ld1ZhbHVlKTsNCisJCQkJcmV0dXJuOw0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfX0hPU1RfU0VDT05EQVJZX0lOQ1VCQVRJT05fUkFURTQzOg0KKwkJCQlzZXRIb3N0U2Vjb25kYXJ5SW5jdWJhdGlvblJhdGU0MygoRG91YmxlKW5ld1ZhbHVlKTsNCisJCQkJcmV0dXJuOw0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfX1ZFQ1RPUl9JTkZFQ1RJVklUWTE6DQorCQkJCXNldFZlY3RvckluZmVjdGl2aXR5MSgoRG91YmxlKW5ld1ZhbHVlKTsNCisJCQkJcmV0dXJuOw0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfX1ZFQ1RPUl9JTkZFQ1RJVklUWTI6DQorCQkJCXNldFZlY3RvckluZmVjdGl2aXR5MigoRG91YmxlKW5ld1ZhbHVlKTsNCisJCQkJcmV0dXJuOw0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfX1ZFQ1RPUl9JTkZFQ1RJVklUWTM6DQorCQkJCXNldFZlY3RvckluZmVjdGl2aXR5MygoRG91YmxlKW5ld1ZhbHVlKTsNCisJCQkJcmV0dXJuOw0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfX1ZFQ1RPUl9JTkZFQ1RJVklUWTQ6DQorCQkJCXNldFZlY3RvckluZmVjdGl2aXR5NCgoRG91YmxlKW5ld1ZhbHVlKTsNCisJCQkJcmV0dXJuOw0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfX1ZFQ1RPUl9BREUxOg0KKwkJCQlzZXRWZWN0b3JBREUxKChEb3VibGUpbmV3VmFsdWUpOw0KKwkJCQlyZXR1cm47DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9fVkVDVE9SX0FERTI6DQorCQkJCXNldFZlY3RvckFERTIoKERvdWJsZSluZXdWYWx1ZSk7DQorCQkJCXJldHVybjsNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX19WRUNUT1JfQURFMzoNCisJCQkJc2V0VmVjdG9yQURFMygoRG91YmxlKW5ld1ZhbHVlKTsNCisJCQkJcmV0dXJuOw0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfX1ZFQ1RPUl9BREU0Og0KKwkJCQlzZXRWZWN0b3JBREU0KChEb3VibGUpbmV3VmFsdWUpOw0KKwkJCQlyZXR1cm47DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9fVkVDVE9SX0lOQ1VCQVRJT05fUkFURTE6DQorCQkJCXNldFZlY3RvckluY3ViYXRpb25SYXRlMSgoRG91YmxlKW5ld1ZhbHVlKTsNCisJCQkJcmV0dXJuOw0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfX1ZFQ1RPUl9JTkNVQkFUSU9OX1JBVEUyOg0KKwkJCQlzZXRWZWN0b3JJbmN1YmF0aW9uUmF0ZTIoKERvdWJsZSluZXdWYWx1ZSk7DQorCQkJCXJldHVybjsNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX19WRUNUT1JfSU5DVUJBVElPTl9SQVRFMzoNCisJCQkJc2V0VmVjdG9ySW5jdWJhdGlvblJhdGUzKChEb3VibGUpbmV3VmFsdWUpOw0KKwkJCQlyZXR1cm47DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9fVkVDVE9SX0lOQ1VCQVRJT05fUkFURTQ6DQorCQkJCXNldFZlY3RvckluY3ViYXRpb25SYXRlNCgoRG91YmxlKW5ld1ZhbHVlKTsNCisJCQkJcmV0dXJuOw0KKwkJfQ0KKwkJc3VwZXIuZVNldChmZWF0dXJlSUQsIG5ld1ZhbHVlKTsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCUBPdmVycmlkZQ0KKwlwdWJsaWMgdm9pZCBlVW5zZXQoaW50IGZlYXR1cmVJRCkgew0KKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX19CSVRJTkdfUkFURV9TVjoNCisJCQkJc2V0Qml0aW5nUmF0ZVNWKEJJVElOR19SQVRFX1NWX0VERUZBVUxUKTsNCisJCQkJcmV0dXJuOw0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfX0JJVElOR19SQVRFX0lWOg0KKwkJCQlzZXRCaXRpbmdSYXRlSVYoQklUSU5HX1JBVEVfSVZfRURFRkFVTFQpOw0KKwkJCQlyZXR1cm47DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9fSE9TVF9JTkZFQ1RJVklUWTE6DQorCQkJCXNldEhvc3RJbmZlY3Rpdml0eTEoSE9TVF9JTkZFQ1RJVklUWTFfRURFRkFVTFQpOw0KKwkJCQlyZXR1cm47DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9fSE9TVF9JTkZFQ1RJVklUWTI6DQorCQkJCXNldEhvc3RJbmZlY3Rpdml0eTIoSE9TVF9JTkZFQ1RJVklUWTJfRURFRkFVTFQpOw0KKwkJCQlyZXR1cm47DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9fSE9TVF9JTkZFQ1RJVklUWTM6DQorCQkJCXNldEhvc3RJbmZlY3Rpdml0eTMoSE9TVF9JTkZFQ1RJVklUWTNfRURFRkFVTFQpOw0KKwkJCQlyZXR1cm47DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9fSE9TVF9JTkZFQ1RJVklUWTQ6DQorCQkJCXNldEhvc3RJbmZlY3Rpdml0eTQoSE9TVF9JTkZFQ1RJVklUWTRfRURFRkFVTFQpOw0KKwkJCQlyZXR1cm47DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9fSE9TVF9QUklNQVJZX0lOQ1VCQVRJT05fUkFURTE6DQorCQkJCXNldEhvc3RQcmltYXJ5SW5jdWJhdGlvblJhdGUxKEhPU1RfUFJJTUFSWV9JTkNVQkFUSU9OX1JBVEUxX0VERUZBVUxUKTsNCisJCQkJcmV0dXJuOw0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfX0hPU1RfUFJJTUFSWV9JTkNVQkFUSU9OX1JBVEUyOg0KKwkJCQlzZXRIb3N0UHJpbWFyeUluY3ViYXRpb25SYXRlMihIT1NUX1BSSU1BUllfSU5DVUJBVElPTl9SQVRFMl9FREVGQVVMVCk7DQorCQkJCXJldHVybjsNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX19IT1NUX1BSSU1BUllfSU5DVUJBVElPTl9SQVRFMzoNCisJCQkJc2V0SG9zdFByaW1hcnlJbmN1YmF0aW9uUmF0ZTMoSE9TVF9QUklNQVJZX0lOQ1VCQVRJT05fUkFURTNfRURFRkFVTFQpOw0KKwkJCQlyZXR1cm47DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9fSE9TVF9QUklNQVJZX0lOQ1VCQVRJT05fUkFURTQ6DQorCQkJCXNldEhvc3RQcmltYXJ5SW5jdWJhdGlvblJhdGU0KEhPU1RfUFJJTUFSWV9JTkNVQkFUSU9OX1JBVEU0X0VERUZBVUxUKTsNCisJCQkJcmV0dXJuOw0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfX0hPU1RfUFJJTUFSWV9SRUNPVkVSWV9SQVRFMToNCisJCQkJc2V0SG9zdFByaW1hcnlSZWNvdmVyeVJhdGUxKEhPU1RfUFJJTUFSWV9SRUNPVkVSWV9SQVRFMV9FREVGQVVMVCk7DQorCQkJCXJldHVybjsNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX19IT1NUX1BSSU1BUllfUkVDT1ZFUllfUkFURTI6DQorCQkJCXNldEhvc3RQcmltYXJ5UmVjb3ZlcnlSYXRlMihIT1NUX1BSSU1BUllfUkVDT1ZFUllfUkFURTJfRURFRkFVTFQpOw0KKwkJCQlyZXR1cm47DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9fSE9TVF9QUklNQVJZX1JFQ09WRVJZX1JBVEUzOg0KKwkJCQlzZXRIb3N0UHJpbWFyeVJlY292ZXJ5UmF0ZTMoSE9TVF9QUklNQVJZX1JFQ09WRVJZX1JBVEUzX0VERUZBVUxUKTsNCisJCQkJcmV0dXJuOw0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfX0hPU1RfUFJJTUFSWV9SRUNPVkVSWV9SQVRFNDoNCisJCQkJc2V0SG9zdFByaW1hcnlSZWNvdmVyeVJhdGU0KEhPU1RfUFJJTUFSWV9SRUNPVkVSWV9SQVRFNF9FREVGQVVMVCk7DQorCQkJCXJldHVybjsNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX19IT1NUX1BSSU1BUllfSU1NVU5JVFlfTE9TU19SQVRFMToNCisJCQkJc2V0SG9zdFByaW1hcnlJbW11bml0eUxvc3NSYXRlMShIT1NUX1BSSU1BUllfSU1NVU5JVFlfTE9TU19SQVRFMV9FREVGQVVMVCk7DQorCQkJCXJldHVybjsNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX19IT1NUX1BSSU1BUllfSU1NVU5JVFlfTE9TU19SQVRFMjoNCisJCQkJc2V0SG9zdFByaW1hcnlJbW11bml0eUxvc3NSYXRlMihIT1NUX1BSSU1BUllfSU1NVU5JVFlfTE9TU19SQVRFMl9FREVGQVVMVCk7DQorCQkJCXJldHVybjsNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX19IT1NUX1BSSU1BUllfSU1NVU5JVFlfTE9TU19SQVRFMzoNCisJCQkJc2V0SG9zdFByaW1hcnlJbW11bml0eUxvc3NSYXRlMyhIT1NUX1BSSU1BUllfSU1NVU5JVFlfTE9TU19SQVRFM19FREVGQVVMVCk7DQorCQkJCXJldHVybjsNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX19IT1NUX1BSSU1BUllfSU1NVU5JVFlfTE9TU19SQVRFNDoNCisJCQkJc2V0SG9zdFByaW1hcnlJbW11bml0eUxvc3NSYXRlNChIT1NUX1BSSU1BUllfSU1NVU5JVFlfTE9TU19SQVRFNF9FREVGQVVMVCk7DQorCQkJCXJldHVybjsNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX19IT1NUX1BSSU1BUllfRElTRUFTRV9ERUFUSF9SQVRFMToNCisJCQkJc2V0SG9zdFByaW1hcnlEaXNlYXNlRGVhdGhSYXRlMShIT1NUX1BSSU1BUllfRElTRUFTRV9ERUFUSF9SQVRFMV9FREVGQVVMVCk7DQorCQkJCXJldHVybjsNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX19IT1NUX1BSSU1BUllfRElTRUFTRV9ERUFUSF9SQVRFMjoNCisJCQkJc2V0SG9zdFByaW1hcnlEaXNlYXNlRGVhdGhSYXRlMihIT1NUX1BSSU1BUllfRElTRUFTRV9ERUFUSF9SQVRFMl9FREVGQVVMVCk7DQorCQkJCXJldHVybjsNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX19IT1NUX1BSSU1BUllfRElTRUFTRV9ERUFUSF9SQVRFMzoNCisJCQkJc2V0SG9zdFByaW1hcnlEaXNlYXNlRGVhdGhSYXRlMyhIT1NUX1BSSU1BUllfRElTRUFTRV9ERUFUSF9SQVRFM19FREVGQVVMVCk7DQorCQkJCXJldHVybjsNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX19IT1NUX1BSSU1BUllfRElTRUFTRV9ERUFUSF9SQVRFNDoNCisJCQkJc2V0SG9zdFByaW1hcnlEaXNlYXNlRGVhdGhSYXRlNChIT1NUX1BSSU1BUllfRElTRUFTRV9ERUFUSF9SQVRFNF9FREVGQVVMVCk7DQorCQkJCXJldHVybjsNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX19IT1NUX0FERTEyOg0KKwkJCQlzZXRIb3N0QURFMTIoSE9TVF9BREUxMl9FREVGQVVMVCk7DQorCQkJCXJldHVybjsNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX19IT1NUX0FERTEzOg0KKwkJCQlzZXRIb3N0QURFMTMoSE9TVF9BREUxM19FREVGQVVMVCk7DQorCQkJCXJldHVybjsNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX19IT1NUX0FERTE0Og0KKwkJCQlzZXRIb3N0QURFMTQoSE9TVF9BREUxNF9FREVGQVVMVCk7DQorCQkJCXJldHVybjsNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX19IT1NUX0FERTIxOg0KKwkJCQlzZXRIb3N0QURFMjEoSE9TVF9BREUyMV9FREVGQVVMVCk7DQorCQkJCXJldHVybjsNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX19IT1NUX0FERTIzOg0KKwkJCQlzZXRIb3N0QURFMjMoSE9TVF9BREUyM19FREVGQVVMVCk7DQorCQkJCXJldHVybjsNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX19IT1NUX0FERTI0Og0KKwkJCQlzZXRIb3N0QURFMjQoSE9TVF9BREUyNF9FREVGQVVMVCk7DQorCQkJCXJldHVybjsNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX19IT1NUX0FERTMxOg0KKwkJCQlzZXRIb3N0QURFMzEoSE9TVF9BREUzMV9FREVGQVVMVCk7DQorCQkJCXJldHVybjsNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX19IT1NUX0FERTMyOg0KKwkJCQlzZXRIb3N0QURFMzIoSE9TVF9BREUzMl9FREVGQVVMVCk7DQorCQkJCXJldHVybjsNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX19IT1NUX0FERTM0Og0KKwkJCQlzZXRIb3N0QURFMzQoSE9TVF9BREUzNF9FREVGQVVMVCk7DQorCQkJCXJldHVybjsNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX19IT1NUX0FERTQxOg0KKwkJCQlzZXRIb3N0QURFNDEoSE9TVF9BREU0MV9FREVGQVVMVCk7DQorCQkJCXJldHVybjsNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX19IT1NUX0FERTQyOg0KKwkJCQlzZXRIb3N0QURFNDIoSE9TVF9BREU0Ml9FREVGQVVMVCk7DQorCQkJCXJldHVybjsNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX19IT1NUX0FERTQzOg0KKwkJCQlzZXRIb3N0QURFNDMoSE9TVF9BREU0M19FREVGQVVMVCk7DQorCQkJCXJldHVybjsNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX19IT1NUX1NFQ09OREFSWV9ESVNFQVNFX0RFQVRIX1JBVEUxMjoNCisJCQkJc2V0SG9zdFNlY29uZGFyeURpc2Vhc2VEZWF0aFJhdGUxMihIT1NUX1NFQ09OREFSWV9ESVNFQVNFX0RFQVRIX1JBVEUxMl9FREVGQVVMVCk7DQorCQkJCXJldHVybjsNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX19IT1NUX1NFQ09OREFSWV9ESVNFQVNFX0RFQVRIX1JBVEUxMzoNCisJCQkJc2V0SG9zdFNlY29uZGFyeURpc2Vhc2VEZWF0aFJhdGUxMyhIT1NUX1NFQ09OREFSWV9ESVNFQVNFX0RFQVRIX1JBVEUxM19FREVGQVVMVCk7DQorCQkJCXJldHVybjsNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX19IT1NUX1NFQ09OREFSWV9ESVNFQVNFX0RFQVRIX1JBVEUxNDoNCisJCQkJc2V0SG9zdFNlY29uZGFyeURpc2Vhc2VEZWF0aFJhdGUxNChIT1NUX1NFQ09OREFSWV9ESVNFQVNFX0RFQVRIX1JBVEUxNF9FREVGQVVMVCk7DQorCQkJCXJldHVybjsNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX19IT1NUX1NFQ09OREFSWV9ESVNFQVNFX0RFQVRIX1JBVEUyMToNCisJCQkJc2V0SG9zdFNlY29uZGFyeURpc2Vhc2VEZWF0aFJhdGUyMShIT1NUX1NFQ09OREFSWV9ESVNFQVNFX0RFQVRIX1JBVEUyMV9FREVGQVVMVCk7DQorCQkJCXJldHVybjsNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX19IT1NUX1NFQ09OREFSWV9ESVNFQVNFX0RFQVRIX1JBVEUyMzoNCisJCQkJc2V0SG9zdFNlY29uZGFyeURpc2Vhc2VEZWF0aFJhdGUyMyhIT1NUX1NFQ09OREFSWV9ESVNFQVNFX0RFQVRIX1JBVEUyM19FREVGQVVMVCk7DQorCQkJCXJldHVybjsNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX19IT1NUX1NFQ09OREFSWV9ESVNFQVNFX0RFQVRIX1JBVEUyNDoNCisJCQkJc2V0SG9zdFNlY29uZGFyeURpc2Vhc2VEZWF0aFJhdGUyNChIT1NUX1NFQ09OREFSWV9ESVNFQVNFX0RFQVRIX1JBVEUyNF9FREVGQVVMVCk7DQorCQkJCXJldHVybjsNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX19IT1NUX1NFQ09OREFSWV9ESVNFQVNFX0RFQVRIX1JBVEUzMToNCisJCQkJc2V0SG9zdFNlY29uZGFyeURpc2Vhc2VEZWF0aFJhdGUzMShIT1NUX1NFQ09OREFSWV9ESVNFQVNFX0RFQVRIX1JBVEUzMV9FREVGQVVMVCk7DQorCQkJCXJldHVybjsNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX19IT1NUX1NFQ09OREFSWV9ESVNFQVNFX0RFQVRIX1JBVEUzMjoNCisJCQkJc2V0SG9zdFNlY29uZGFyeURpc2Vhc2VEZWF0aFJhdGUzMihIT1NUX1NFQ09OREFSWV9ESVNFQVNFX0RFQVRIX1JBVEUzMl9FREVGQVVMVCk7DQorCQkJCXJldHVybjsNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX19IT1NUX1NFQ09OREFSWV9ESVNFQVNFX0RFQVRIX1JBVEUzNDoNCisJCQkJc2V0SG9zdFNlY29uZGFyeURpc2Vhc2VEZWF0aFJhdGUzNChIT1NUX1NFQ09OREFSWV9ESVNFQVNFX0RFQVRIX1JBVEUzNF9FREVGQVVMVCk7DQorCQkJCXJldHVybjsNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX19IT1NUX1NFQ09OREFSWV9ESVNFQVNFX0RFQVRIX1JBVEU0MToNCisJCQkJc2V0SG9zdFNlY29uZGFyeURpc2Vhc2VEZWF0aFJhdGU0MShIT1NUX1NFQ09OREFSWV9ESVNFQVNFX0RFQVRIX1JBVEU0MV9FREVGQVVMVCk7DQorCQkJCXJldHVybjsNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX19IT1NUX1NFQ09OREFSWV9ESVNFQVNFX0RFQVRIX1JBVEU0MjoNCisJCQkJc2V0SG9zdFNlY29uZGFyeURpc2Vhc2VEZWF0aFJhdGU0MihIT1NUX1NFQ09OREFSWV9ESVNFQVNFX0RFQVRIX1JBVEU0Ml9FREVGQVVMVCk7DQorCQkJCXJldHVybjsNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX19IT1NUX1NFQ09OREFSWV9ESVNFQVNFX0RFQVRIX1JBVEU0MzoNCisJCQkJc2V0SG9zdFNlY29uZGFyeURpc2Vhc2VEZWF0aFJhdGU0MyhIT1NUX1NFQ09OREFSWV9ESVNFQVNFX0RFQVRIX1JBVEU0M19FREVGQVVMVCk7DQorCQkJCXJldHVybjsNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX19IT1NUX1NFQ09OREFSWV9SRUNPVkVSWV9SQVRFMTI6DQorCQkJCXNldEhvc3RTZWNvbmRhcnlSZWNvdmVyeVJhdGUxMihIT1NUX1NFQ09OREFSWV9SRUNPVkVSWV9SQVRFMTJfRURFRkFVTFQpOw0KKwkJCQlyZXR1cm47DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9fSE9TVF9TRUNPTkRBUllfUkVDT1ZFUllfUkFURTEzOg0KKwkJCQlzZXRIb3N0U2Vjb25kYXJ5UmVjb3ZlcnlSYXRlMTMoSE9TVF9TRUNPTkRBUllfUkVDT1ZFUllfUkFURTEzX0VERUZBVUxUKTsNCisJCQkJcmV0dXJuOw0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfX0hPU1RfU0VDT05EQVJZX1JFQ09WRVJZX1JBVEUxNDoNCisJCQkJc2V0SG9zdFNlY29uZGFyeVJlY292ZXJ5UmF0ZTE0KEhPU1RfU0VDT05EQVJZX1JFQ09WRVJZX1JBVEUxNF9FREVGQVVMVCk7DQorCQkJCXJldHVybjsNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX19IT1NUX1NFQ09OREFSWV9SRUNPVkVSWV9SQVRFMjE6DQorCQkJCXNldEhvc3RTZWNvbmRhcnlSZWNvdmVyeVJhdGUyMShIT1NUX1NFQ09OREFSWV9SRUNPVkVSWV9SQVRFMjFfRURFRkFVTFQpOw0KKwkJCQlyZXR1cm47DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9fSE9TVF9TRUNPTkRBUllfUkVDT1ZFUllfUkFURTIzOg0KKwkJCQlzZXRIb3N0U2Vjb25kYXJ5UmVjb3ZlcnlSYXRlMjMoSE9TVF9TRUNPTkRBUllfUkVDT1ZFUllfUkFURTIzX0VERUZBVUxUKTsNCisJCQkJcmV0dXJuOw0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfX0hPU1RfU0VDT05EQVJZX1JFQ09WRVJZX1JBVEUyNDoNCisJCQkJc2V0SG9zdFNlY29uZGFyeVJlY292ZXJ5UmF0ZTI0KEhPU1RfU0VDT05EQVJZX1JFQ09WRVJZX1JBVEUyNF9FREVGQVVMVCk7DQorCQkJCXJldHVybjsNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX19IT1NUX1NFQ09OREFSWV9SRUNPVkVSWV9SQVRFMzE6DQorCQkJCXNldEhvc3RTZWNvbmRhcnlSZWNvdmVyeVJhdGUzMShIT1NUX1NFQ09OREFSWV9SRUNPVkVSWV9SQVRFMzFfRURFRkFVTFQpOw0KKwkJCQlyZXR1cm47DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9fSE9TVF9TRUNPTkRBUllfUkVDT1ZFUllfUkFURTMyOg0KKwkJCQlzZXRIb3N0U2Vjb25kYXJ5UmVjb3ZlcnlSYXRlMzIoSE9TVF9TRUNPTkRBUllfUkVDT1ZFUllfUkFURTMyX0VERUZBVUxUKTsNCisJCQkJcmV0dXJuOw0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfX0hPU1RfU0VDT05EQVJZX1JFQ09WRVJZX1JBVEUzNDoNCisJCQkJc2V0SG9zdFNlY29uZGFyeVJlY292ZXJ5UmF0ZTM0KEhPU1RfU0VDT05EQVJZX1JFQ09WRVJZX1JBVEUzNF9FREVGQVVMVCk7DQorCQkJCXJldHVybjsNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX19IT1NUX1NFQ09OREFSWV9SRUNPVkVSWV9SQVRFNDE6DQorCQkJCXNldEhvc3RTZWNvbmRhcnlSZWNvdmVyeVJhdGU0MShIT1NUX1NFQ09OREFSWV9SRUNPVkVSWV9SQVRFNDFfRURFRkFVTFQpOw0KKwkJCQlyZXR1cm47DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9fSE9TVF9TRUNPTkRBUllfUkVDT1ZFUllfUkFURTQyOg0KKwkJCQlzZXRIb3N0U2Vjb25kYXJ5UmVjb3ZlcnlSYXRlNDIoSE9TVF9TRUNPTkRBUllfUkVDT1ZFUllfUkFURTQyX0VERUZBVUxUKTsNCisJCQkJcmV0dXJuOw0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfX0hPU1RfU0VDT05EQVJZX1JFQ09WRVJZX1JBVEU0MzoNCisJCQkJc2V0SG9zdFNlY29uZGFyeVJlY292ZXJ5UmF0ZTQzKEhPU1RfU0VDT05EQVJZX1JFQ09WRVJZX1JBVEU0M19FREVGQVVMVCk7DQorCQkJCXJldHVybjsNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX19IT1NUX1NFQ09OREFSWV9JTkNVQkFUSU9OX1JBVEUxMjoNCisJCQkJc2V0SG9zdFNlY29uZGFyeUluY3ViYXRpb25SYXRlMTIoSE9TVF9TRUNPTkRBUllfSU5DVUJBVElPTl9SQVRFMTJfRURFRkFVTFQpOw0KKwkJCQlyZXR1cm47DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9fSE9TVF9TRUNPTkRBUllfSU5DVUJBVElPTl9SQVRFMTM6DQorCQkJCXNldEhvc3RTZWNvbmRhcnlJbmN1YmF0aW9uUmF0ZTEzKEhPU1RfU0VDT05EQVJZX0lOQ1VCQVRJT05fUkFURTEzX0VERUZBVUxUKTsNCisJCQkJcmV0dXJuOw0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfX0hPU1RfU0VDT05EQVJZX0lOQ1VCQVRJT05fUkFURTE0Og0KKwkJCQlzZXRIb3N0U2Vjb25kYXJ5SW5jdWJhdGlvblJhdGUxNChIT1NUX1NFQ09OREFSWV9JTkNVQkFUSU9OX1JBVEUxNF9FREVGQVVMVCk7DQorCQkJCXJldHVybjsNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX19IT1NUX1NFQ09OREFSWV9JTkNVQkFUSU9OX1JBVEUyMToNCisJCQkJc2V0SG9zdFNlY29uZGFyeUluY3ViYXRpb25SYXRlMjEoSE9TVF9TRUNPTkRBUllfSU5DVUJBVElPTl9SQVRFMjFfRURFRkFVTFQpOw0KKwkJCQlyZXR1cm47DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9fSE9TVF9TRUNPTkRBUllfSU5DVUJBVElPTl9SQVRFMjM6DQorCQkJCXNldEhvc3RTZWNvbmRhcnlJbmN1YmF0aW9uUmF0ZTIzKEhPU1RfU0VDT05EQVJZX0lOQ1VCQVRJT05fUkFURTIzX0VERUZBVUxUKTsNCisJCQkJcmV0dXJuOw0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfX0hPU1RfU0VDT05EQVJZX0lOQ1VCQVRJT05fUkFURTI0Og0KKwkJCQlzZXRIb3N0U2Vjb25kYXJ5SW5jdWJhdGlvblJhdGUyNChIT1NUX1NFQ09OREFSWV9JTkNVQkFUSU9OX1JBVEUyNF9FREVGQVVMVCk7DQorCQkJCXJldHVybjsNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX19IT1NUX1NFQ09OREFSWV9JTkNVQkFUSU9OX1JBVEUzMToNCisJCQkJc2V0SG9zdFNlY29uZGFyeUluY3ViYXRpb25SYXRlMzEoSE9TVF9TRUNPTkRBUllfSU5DVUJBVElPTl9SQVRFMzFfRURFRkFVTFQpOw0KKwkJCQlyZXR1cm47DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9fSE9TVF9TRUNPTkRBUllfSU5DVUJBVElPTl9SQVRFMzI6DQorCQkJCXNldEhvc3RTZWNvbmRhcnlJbmN1YmF0aW9uUmF0ZTMyKEhPU1RfU0VDT05EQVJZX0lOQ1VCQVRJT05fUkFURTMyX0VERUZBVUxUKTsNCisJCQkJcmV0dXJuOw0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfX0hPU1RfU0VDT05EQVJZX0lOQ1VCQVRJT05fUkFURTM0Og0KKwkJCQlzZXRIb3N0U2Vjb25kYXJ5SW5jdWJhdGlvblJhdGUzNChIT1NUX1NFQ09OREFSWV9JTkNVQkFUSU9OX1JBVEUzNF9FREVGQVVMVCk7DQorCQkJCXJldHVybjsNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX19IT1NUX1NFQ09OREFSWV9JTkNVQkFUSU9OX1JBVEU0MToNCisJCQkJc2V0SG9zdFNlY29uZGFyeUluY3ViYXRpb25SYXRlNDEoSE9TVF9TRUNPTkRBUllfSU5DVUJBVElPTl9SQVRFNDFfRURFRkFVTFQpOw0KKwkJCQlyZXR1cm47DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9fSE9TVF9TRUNPTkRBUllfSU5DVUJBVElPTl9SQVRFNDI6DQorCQkJCXNldEhvc3RTZWNvbmRhcnlJbmN1YmF0aW9uUmF0ZTQyKEhPU1RfU0VDT05EQVJZX0lOQ1VCQVRJT05fUkFURTQyX0VERUZBVUxUKTsNCisJCQkJcmV0dXJuOw0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfX0hPU1RfU0VDT05EQVJZX0lOQ1VCQVRJT05fUkFURTQzOg0KKwkJCQlzZXRIb3N0U2Vjb25kYXJ5SW5jdWJhdGlvblJhdGU0MyhIT1NUX1NFQ09OREFSWV9JTkNVQkFUSU9OX1JBVEU0M19FREVGQVVMVCk7DQorCQkJCXJldHVybjsNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX19WRUNUT1JfSU5GRUNUSVZJVFkxOg0KKwkJCQlzZXRWZWN0b3JJbmZlY3Rpdml0eTEoVkVDVE9SX0lORkVDVElWSVRZMV9FREVGQVVMVCk7DQorCQkJCXJldHVybjsNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX19WRUNUT1JfSU5GRUNUSVZJVFkyOg0KKwkJCQlzZXRWZWN0b3JJbmZlY3Rpdml0eTIoVkVDVE9SX0lORkVDVElWSVRZMl9FREVGQVVMVCk7DQorCQkJCXJldHVybjsNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX19WRUNUT1JfSU5GRUNUSVZJVFkzOg0KKwkJCQlzZXRWZWN0b3JJbmZlY3Rpdml0eTMoVkVDVE9SX0lORkVDVElWSVRZM19FREVGQVVMVCk7DQorCQkJCXJldHVybjsNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX19WRUNUT1JfSU5GRUNUSVZJVFk0Og0KKwkJCQlzZXRWZWN0b3JJbmZlY3Rpdml0eTQoVkVDVE9SX0lORkVDVElWSVRZNF9FREVGQVVMVCk7DQorCQkJCXJldHVybjsNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX19WRUNUT1JfQURFMToNCisJCQkJc2V0VmVjdG9yQURFMShWRUNUT1JfQURFMV9FREVGQVVMVCk7DQorCQkJCXJldHVybjsNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX19WRUNUT1JfQURFMjoNCisJCQkJc2V0VmVjdG9yQURFMihWRUNUT1JfQURFMl9FREVGQVVMVCk7DQorCQkJCXJldHVybjsNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX19WRUNUT1JfQURFMzoNCisJCQkJc2V0VmVjdG9yQURFMyhWRUNUT1JfQURFM19FREVGQVVMVCk7DQorCQkJCXJldHVybjsNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX19WRUNUT1JfQURFNDoNCisJCQkJc2V0VmVjdG9yQURFNChWRUNUT1JfQURFNF9FREVGQVVMVCk7DQorCQkJCXJldHVybjsNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX19WRUNUT1JfSU5DVUJBVElPTl9SQVRFMToNCisJCQkJc2V0VmVjdG9ySW5jdWJhdGlvblJhdGUxKFZFQ1RPUl9JTkNVQkFUSU9OX1JBVEUxX0VERUZBVUxUKTsNCisJCQkJcmV0dXJuOw0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfX1ZFQ1RPUl9JTkNVQkFUSU9OX1JBVEUyOg0KKwkJCQlzZXRWZWN0b3JJbmN1YmF0aW9uUmF0ZTIoVkVDVE9SX0lOQ1VCQVRJT05fUkFURTJfRURFRkFVTFQpOw0KKwkJCQlyZXR1cm47DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9fVkVDVE9SX0lOQ1VCQVRJT05fUkFURTM6DQorCQkJCXNldFZlY3RvckluY3ViYXRpb25SYXRlMyhWRUNUT1JfSU5DVUJBVElPTl9SQVRFM19FREVGQVVMVCk7DQorCQkJCXJldHVybjsNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX19WRUNUT1JfSU5DVUJBVElPTl9SQVRFNDoNCisJCQkJc2V0VmVjdG9ySW5jdWJhdGlvblJhdGU0KFZFQ1RPUl9JTkNVQkFUSU9OX1JBVEU0X0VERUZBVUxUKTsNCisJCQkJcmV0dXJuOw0KKwkJfQ0KKwkJc3VwZXIuZVVuc2V0KGZlYXR1cmVJRCk7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlAT3ZlcnJpZGUNCisJcHVibGljIGJvb2xlYW4gZUlzU2V0KGludCBmZWF0dXJlSUQpIHsNCisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9fQklUSU5HX1JBVEVfU1Y6DQorCQkJCXJldHVybiBiaXRpbmdSYXRlU1YgIT0gQklUSU5HX1JBVEVfU1ZfRURFRkFVTFQ7DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9fQklUSU5HX1JBVEVfSVY6DQorCQkJCXJldHVybiBiaXRpbmdSYXRlSVYgIT0gQklUSU5HX1JBVEVfSVZfRURFRkFVTFQ7DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9fSE9TVF9JTkZFQ1RJVklUWTE6DQorCQkJCXJldHVybiBob3N0SW5mZWN0aXZpdHkxICE9IEhPU1RfSU5GRUNUSVZJVFkxX0VERUZBVUxUOw0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfX0hPU1RfSU5GRUNUSVZJVFkyOg0KKwkJCQlyZXR1cm4gaG9zdEluZmVjdGl2aXR5MiAhPSBIT1NUX0lORkVDVElWSVRZMl9FREVGQVVMVDsNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX19IT1NUX0lORkVDVElWSVRZMzoNCisJCQkJcmV0dXJuIGhvc3RJbmZlY3Rpdml0eTMgIT0gSE9TVF9JTkZFQ1RJVklUWTNfRURFRkFVTFQ7DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9fSE9TVF9JTkZFQ1RJVklUWTQ6DQorCQkJCXJldHVybiBob3N0SW5mZWN0aXZpdHk0ICE9IEhPU1RfSU5GRUNUSVZJVFk0X0VERUZBVUxUOw0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfX0hPU1RfUFJJTUFSWV9JTkNVQkFUSU9OX1JBVEUxOg0KKwkJCQlyZXR1cm4gaG9zdFByaW1hcnlJbmN1YmF0aW9uUmF0ZTEgIT0gSE9TVF9QUklNQVJZX0lOQ1VCQVRJT05fUkFURTFfRURFRkFVTFQ7DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9fSE9TVF9QUklNQVJZX0lOQ1VCQVRJT05fUkFURTI6DQorCQkJCXJldHVybiBob3N0UHJpbWFyeUluY3ViYXRpb25SYXRlMiAhPSBIT1NUX1BSSU1BUllfSU5DVUJBVElPTl9SQVRFMl9FREVGQVVMVDsNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX19IT1NUX1BSSU1BUllfSU5DVUJBVElPTl9SQVRFMzoNCisJCQkJcmV0dXJuIGhvc3RQcmltYXJ5SW5jdWJhdGlvblJhdGUzICE9IEhPU1RfUFJJTUFSWV9JTkNVQkFUSU9OX1JBVEUzX0VERUZBVUxUOw0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfX0hPU1RfUFJJTUFSWV9JTkNVQkFUSU9OX1JBVEU0Og0KKwkJCQlyZXR1cm4gaG9zdFByaW1hcnlJbmN1YmF0aW9uUmF0ZTQgIT0gSE9TVF9QUklNQVJZX0lOQ1VCQVRJT05fUkFURTRfRURFRkFVTFQ7DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9fSE9TVF9QUklNQVJZX1JFQ09WRVJZX1JBVEUxOg0KKwkJCQlyZXR1cm4gaG9zdFByaW1hcnlSZWNvdmVyeVJhdGUxICE9IEhPU1RfUFJJTUFSWV9SRUNPVkVSWV9SQVRFMV9FREVGQVVMVDsNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX19IT1NUX1BSSU1BUllfUkVDT1ZFUllfUkFURTI6DQorCQkJCXJldHVybiBob3N0UHJpbWFyeVJlY292ZXJ5UmF0ZTIgIT0gSE9TVF9QUklNQVJZX1JFQ09WRVJZX1JBVEUyX0VERUZBVUxUOw0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfX0hPU1RfUFJJTUFSWV9SRUNPVkVSWV9SQVRFMzoNCisJCQkJcmV0dXJuIGhvc3RQcmltYXJ5UmVjb3ZlcnlSYXRlMyAhPSBIT1NUX1BSSU1BUllfUkVDT1ZFUllfUkFURTNfRURFRkFVTFQ7DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9fSE9TVF9QUklNQVJZX1JFQ09WRVJZX1JBVEU0Og0KKwkJCQlyZXR1cm4gaG9zdFByaW1hcnlSZWNvdmVyeVJhdGU0ICE9IEhPU1RfUFJJTUFSWV9SRUNPVkVSWV9SQVRFNF9FREVGQVVMVDsNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX19IT1NUX1BSSU1BUllfSU1NVU5JVFlfTE9TU19SQVRFMToNCisJCQkJcmV0dXJuIGhvc3RQcmltYXJ5SW1tdW5pdHlMb3NzUmF0ZTEgIT0gSE9TVF9QUklNQVJZX0lNTVVOSVRZX0xPU1NfUkFURTFfRURFRkFVTFQ7DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9fSE9TVF9QUklNQVJZX0lNTVVOSVRZX0xPU1NfUkFURTI6DQorCQkJCXJldHVybiBob3N0UHJpbWFyeUltbXVuaXR5TG9zc1JhdGUyICE9IEhPU1RfUFJJTUFSWV9JTU1VTklUWV9MT1NTX1JBVEUyX0VERUZBVUxUOw0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfX0hPU1RfUFJJTUFSWV9JTU1VTklUWV9MT1NTX1JBVEUzOg0KKwkJCQlyZXR1cm4gaG9zdFByaW1hcnlJbW11bml0eUxvc3NSYXRlMyAhPSBIT1NUX1BSSU1BUllfSU1NVU5JVFlfTE9TU19SQVRFM19FREVGQVVMVDsNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX19IT1NUX1BSSU1BUllfSU1NVU5JVFlfTE9TU19SQVRFNDoNCisJCQkJcmV0dXJuIGhvc3RQcmltYXJ5SW1tdW5pdHlMb3NzUmF0ZTQgIT0gSE9TVF9QUklNQVJZX0lNTVVOSVRZX0xPU1NfUkFURTRfRURFRkFVTFQ7DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9fSE9TVF9QUklNQVJZX0RJU0VBU0VfREVBVEhfUkFURTE6DQorCQkJCXJldHVybiBob3N0UHJpbWFyeURpc2Vhc2VEZWF0aFJhdGUxICE9IEhPU1RfUFJJTUFSWV9ESVNFQVNFX0RFQVRIX1JBVEUxX0VERUZBVUxUOw0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfX0hPU1RfUFJJTUFSWV9ESVNFQVNFX0RFQVRIX1JBVEUyOg0KKwkJCQlyZXR1cm4gaG9zdFByaW1hcnlEaXNlYXNlRGVhdGhSYXRlMiAhPSBIT1NUX1BSSU1BUllfRElTRUFTRV9ERUFUSF9SQVRFMl9FREVGQVVMVDsNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX19IT1NUX1BSSU1BUllfRElTRUFTRV9ERUFUSF9SQVRFMzoNCisJCQkJcmV0dXJuIGhvc3RQcmltYXJ5RGlzZWFzZURlYXRoUmF0ZTMgIT0gSE9TVF9QUklNQVJZX0RJU0VBU0VfREVBVEhfUkFURTNfRURFRkFVTFQ7DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9fSE9TVF9QUklNQVJZX0RJU0VBU0VfREVBVEhfUkFURTQ6DQorCQkJCXJldHVybiBob3N0UHJpbWFyeURpc2Vhc2VEZWF0aFJhdGU0ICE9IEhPU1RfUFJJTUFSWV9ESVNFQVNFX0RFQVRIX1JBVEU0X0VERUZBVUxUOw0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfX0hPU1RfQURFMTI6DQorCQkJCXJldHVybiBob3N0QURFMTIgIT0gSE9TVF9BREUxMl9FREVGQVVMVDsNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX19IT1NUX0FERTEzOg0KKwkJCQlyZXR1cm4gaG9zdEFERTEzICE9IEhPU1RfQURFMTNfRURFRkFVTFQ7DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9fSE9TVF9BREUxNDoNCisJCQkJcmV0dXJuIGhvc3RBREUxNCAhPSBIT1NUX0FERTE0X0VERUZBVUxUOw0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfX0hPU1RfQURFMjE6DQorCQkJCXJldHVybiBob3N0QURFMjEgIT0gSE9TVF9BREUyMV9FREVGQVVMVDsNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX19IT1NUX0FERTIzOg0KKwkJCQlyZXR1cm4gaG9zdEFERTIzICE9IEhPU1RfQURFMjNfRURFRkFVTFQ7DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9fSE9TVF9BREUyNDoNCisJCQkJcmV0dXJuIGhvc3RBREUyNCAhPSBIT1NUX0FERTI0X0VERUZBVUxUOw0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfX0hPU1RfQURFMzE6DQorCQkJCXJldHVybiBob3N0QURFMzEgIT0gSE9TVF9BREUzMV9FREVGQVVMVDsNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX19IT1NUX0FERTMyOg0KKwkJCQlyZXR1cm4gaG9zdEFERTMyICE9IEhPU1RfQURFMzJfRURFRkFVTFQ7DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9fSE9TVF9BREUzNDoNCisJCQkJcmV0dXJuIGhvc3RBREUzNCAhPSBIT1NUX0FERTM0X0VERUZBVUxUOw0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfX0hPU1RfQURFNDE6DQorCQkJCXJldHVybiBob3N0QURFNDEgIT0gSE9TVF9BREU0MV9FREVGQVVMVDsNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX19IT1NUX0FERTQyOg0KKwkJCQlyZXR1cm4gaG9zdEFERTQyICE9IEhPU1RfQURFNDJfRURFRkFVTFQ7DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9fSE9TVF9BREU0MzoNCisJCQkJcmV0dXJuIGhvc3RBREU0MyAhPSBIT1NUX0FERTQzX0VERUZBVUxUOw0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfX0hPU1RfU0VDT05EQVJZX0RJU0VBU0VfREVBVEhfUkFURTEyOg0KKwkJCQlyZXR1cm4gaG9zdFNlY29uZGFyeURpc2Vhc2VEZWF0aFJhdGUxMiAhPSBIT1NUX1NFQ09OREFSWV9ESVNFQVNFX0RFQVRIX1JBVEUxMl9FREVGQVVMVDsNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX19IT1NUX1NFQ09OREFSWV9ESVNFQVNFX0RFQVRIX1JBVEUxMzoNCisJCQkJcmV0dXJuIGhvc3RTZWNvbmRhcnlEaXNlYXNlRGVhdGhSYXRlMTMgIT0gSE9TVF9TRUNPTkRBUllfRElTRUFTRV9ERUFUSF9SQVRFMTNfRURFRkFVTFQ7DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9fSE9TVF9TRUNPTkRBUllfRElTRUFTRV9ERUFUSF9SQVRFMTQ6DQorCQkJCXJldHVybiBob3N0U2Vjb25kYXJ5RGlzZWFzZURlYXRoUmF0ZTE0ICE9IEhPU1RfU0VDT05EQVJZX0RJU0VBU0VfREVBVEhfUkFURTE0X0VERUZBVUxUOw0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfX0hPU1RfU0VDT05EQVJZX0RJU0VBU0VfREVBVEhfUkFURTIxOg0KKwkJCQlyZXR1cm4gaG9zdFNlY29uZGFyeURpc2Vhc2VEZWF0aFJhdGUyMSAhPSBIT1NUX1NFQ09OREFSWV9ESVNFQVNFX0RFQVRIX1JBVEUyMV9FREVGQVVMVDsNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX19IT1NUX1NFQ09OREFSWV9ESVNFQVNFX0RFQVRIX1JBVEUyMzoNCisJCQkJcmV0dXJuIGhvc3RTZWNvbmRhcnlEaXNlYXNlRGVhdGhSYXRlMjMgIT0gSE9TVF9TRUNPTkRBUllfRElTRUFTRV9ERUFUSF9SQVRFMjNfRURFRkFVTFQ7DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9fSE9TVF9TRUNPTkRBUllfRElTRUFTRV9ERUFUSF9SQVRFMjQ6DQorCQkJCXJldHVybiBob3N0U2Vjb25kYXJ5RGlzZWFzZURlYXRoUmF0ZTI0ICE9IEhPU1RfU0VDT05EQVJZX0RJU0VBU0VfREVBVEhfUkFURTI0X0VERUZBVUxUOw0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfX0hPU1RfU0VDT05EQVJZX0RJU0VBU0VfREVBVEhfUkFURTMxOg0KKwkJCQlyZXR1cm4gaG9zdFNlY29uZGFyeURpc2Vhc2VEZWF0aFJhdGUzMSAhPSBIT1NUX1NFQ09OREFSWV9ESVNFQVNFX0RFQVRIX1JBVEUzMV9FREVGQVVMVDsNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX19IT1NUX1NFQ09OREFSWV9ESVNFQVNFX0RFQVRIX1JBVEUzMjoNCisJCQkJcmV0dXJuIGhvc3RTZWNvbmRhcnlEaXNlYXNlRGVhdGhSYXRlMzIgIT0gSE9TVF9TRUNPTkRBUllfRElTRUFTRV9ERUFUSF9SQVRFMzJfRURFRkFVTFQ7DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9fSE9TVF9TRUNPTkRBUllfRElTRUFTRV9ERUFUSF9SQVRFMzQ6DQorCQkJCXJldHVybiBob3N0U2Vjb25kYXJ5RGlzZWFzZURlYXRoUmF0ZTM0ICE9IEhPU1RfU0VDT05EQVJZX0RJU0VBU0VfREVBVEhfUkFURTM0X0VERUZBVUxUOw0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfX0hPU1RfU0VDT05EQVJZX0RJU0VBU0VfREVBVEhfUkFURTQxOg0KKwkJCQlyZXR1cm4gaG9zdFNlY29uZGFyeURpc2Vhc2VEZWF0aFJhdGU0MSAhPSBIT1NUX1NFQ09OREFSWV9ESVNFQVNFX0RFQVRIX1JBVEU0MV9FREVGQVVMVDsNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX19IT1NUX1NFQ09OREFSWV9ESVNFQVNFX0RFQVRIX1JBVEU0MjoNCisJCQkJcmV0dXJuIGhvc3RTZWNvbmRhcnlEaXNlYXNlRGVhdGhSYXRlNDIgIT0gSE9TVF9TRUNPTkRBUllfRElTRUFTRV9ERUFUSF9SQVRFNDJfRURFRkFVTFQ7DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9fSE9TVF9TRUNPTkRBUllfRElTRUFTRV9ERUFUSF9SQVRFNDM6DQorCQkJCXJldHVybiBob3N0U2Vjb25kYXJ5RGlzZWFzZURlYXRoUmF0ZTQzICE9IEhPU1RfU0VDT05EQVJZX0RJU0VBU0VfREVBVEhfUkFURTQzX0VERUZBVUxUOw0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfX0hPU1RfU0VDT05EQVJZX1JFQ09WRVJZX1JBVEUxMjoNCisJCQkJcmV0dXJuIGhvc3RTZWNvbmRhcnlSZWNvdmVyeVJhdGUxMiAhPSBIT1NUX1NFQ09OREFSWV9SRUNPVkVSWV9SQVRFMTJfRURFRkFVTFQ7DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9fSE9TVF9TRUNPTkRBUllfUkVDT1ZFUllfUkFURTEzOg0KKwkJCQlyZXR1cm4gaG9zdFNlY29uZGFyeVJlY292ZXJ5UmF0ZTEzICE9IEhPU1RfU0VDT05EQVJZX1JFQ09WRVJZX1JBVEUxM19FREVGQVVMVDsNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX19IT1NUX1NFQ09OREFSWV9SRUNPVkVSWV9SQVRFMTQ6DQorCQkJCXJldHVybiBob3N0U2Vjb25kYXJ5UmVjb3ZlcnlSYXRlMTQgIT0gSE9TVF9TRUNPTkRBUllfUkVDT1ZFUllfUkFURTE0X0VERUZBVUxUOw0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfX0hPU1RfU0VDT05EQVJZX1JFQ09WRVJZX1JBVEUyMToNCisJCQkJcmV0dXJuIGhvc3RTZWNvbmRhcnlSZWNvdmVyeVJhdGUyMSAhPSBIT1NUX1NFQ09OREFSWV9SRUNPVkVSWV9SQVRFMjFfRURFRkFVTFQ7DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9fSE9TVF9TRUNPTkRBUllfUkVDT1ZFUllfUkFURTIzOg0KKwkJCQlyZXR1cm4gaG9zdFNlY29uZGFyeVJlY292ZXJ5UmF0ZTIzICE9IEhPU1RfU0VDT05EQVJZX1JFQ09WRVJZX1JBVEUyM19FREVGQVVMVDsNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX19IT1NUX1NFQ09OREFSWV9SRUNPVkVSWV9SQVRFMjQ6DQorCQkJCXJldHVybiBob3N0U2Vjb25kYXJ5UmVjb3ZlcnlSYXRlMjQgIT0gSE9TVF9TRUNPTkRBUllfUkVDT1ZFUllfUkFURTI0X0VERUZBVUxUOw0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfX0hPU1RfU0VDT05EQVJZX1JFQ09WRVJZX1JBVEUzMToNCisJCQkJcmV0dXJuIGhvc3RTZWNvbmRhcnlSZWNvdmVyeVJhdGUzMSAhPSBIT1NUX1NFQ09OREFSWV9SRUNPVkVSWV9SQVRFMzFfRURFRkFVTFQ7DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9fSE9TVF9TRUNPTkRBUllfUkVDT1ZFUllfUkFURTMyOg0KKwkJCQlyZXR1cm4gaG9zdFNlY29uZGFyeVJlY292ZXJ5UmF0ZTMyICE9IEhPU1RfU0VDT05EQVJZX1JFQ09WRVJZX1JBVEUzMl9FREVGQVVMVDsNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX19IT1NUX1NFQ09OREFSWV9SRUNPVkVSWV9SQVRFMzQ6DQorCQkJCXJldHVybiBob3N0U2Vjb25kYXJ5UmVjb3ZlcnlSYXRlMzQgIT0gSE9TVF9TRUNPTkRBUllfUkVDT1ZFUllfUkFURTM0X0VERUZBVUxUOw0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfX0hPU1RfU0VDT05EQVJZX1JFQ09WRVJZX1JBVEU0MToNCisJCQkJcmV0dXJuIGhvc3RTZWNvbmRhcnlSZWNvdmVyeVJhdGU0MSAhPSBIT1NUX1NFQ09OREFSWV9SRUNPVkVSWV9SQVRFNDFfRURFRkFVTFQ7DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9fSE9TVF9TRUNPTkRBUllfUkVDT1ZFUllfUkFURTQyOg0KKwkJCQlyZXR1cm4gaG9zdFNlY29uZGFyeVJlY292ZXJ5UmF0ZTQyICE9IEhPU1RfU0VDT05EQVJZX1JFQ09WRVJZX1JBVEU0Ml9FREVGQVVMVDsNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX19IT1NUX1NFQ09OREFSWV9SRUNPVkVSWV9SQVRFNDM6DQorCQkJCXJldHVybiBob3N0U2Vjb25kYXJ5UmVjb3ZlcnlSYXRlNDMgIT0gSE9TVF9TRUNPTkRBUllfUkVDT1ZFUllfUkFURTQzX0VERUZBVUxUOw0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfX0hPU1RfU0VDT05EQVJZX0lOQ1VCQVRJT05fUkFURTEyOg0KKwkJCQlyZXR1cm4gaG9zdFNlY29uZGFyeUluY3ViYXRpb25SYXRlMTIgIT0gSE9TVF9TRUNPTkRBUllfSU5DVUJBVElPTl9SQVRFMTJfRURFRkFVTFQ7DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9fSE9TVF9TRUNPTkRBUllfSU5DVUJBVElPTl9SQVRFMTM6DQorCQkJCXJldHVybiBob3N0U2Vjb25kYXJ5SW5jdWJhdGlvblJhdGUxMyAhPSBIT1NUX1NFQ09OREFSWV9JTkNVQkFUSU9OX1JBVEUxM19FREVGQVVMVDsNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX19IT1NUX1NFQ09OREFSWV9JTkNVQkFUSU9OX1JBVEUxNDoNCisJCQkJcmV0dXJuIGhvc3RTZWNvbmRhcnlJbmN1YmF0aW9uUmF0ZTE0ICE9IEhPU1RfU0VDT05EQVJZX0lOQ1VCQVRJT05fUkFURTE0X0VERUZBVUxUOw0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfX0hPU1RfU0VDT05EQVJZX0lOQ1VCQVRJT05fUkFURTIxOg0KKwkJCQlyZXR1cm4gaG9zdFNlY29uZGFyeUluY3ViYXRpb25SYXRlMjEgIT0gSE9TVF9TRUNPTkRBUllfSU5DVUJBVElPTl9SQVRFMjFfRURFRkFVTFQ7DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9fSE9TVF9TRUNPTkRBUllfSU5DVUJBVElPTl9SQVRFMjM6DQorCQkJCXJldHVybiBob3N0U2Vjb25kYXJ5SW5jdWJhdGlvblJhdGUyMyAhPSBIT1NUX1NFQ09OREFSWV9JTkNVQkFUSU9OX1JBVEUyM19FREVGQVVMVDsNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX19IT1NUX1NFQ09OREFSWV9JTkNVQkFUSU9OX1JBVEUyNDoNCisJCQkJcmV0dXJuIGhvc3RTZWNvbmRhcnlJbmN1YmF0aW9uUmF0ZTI0ICE9IEhPU1RfU0VDT05EQVJZX0lOQ1VCQVRJT05fUkFURTI0X0VERUZBVUxUOw0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfX0hPU1RfU0VDT05EQVJZX0lOQ1VCQVRJT05fUkFURTMxOg0KKwkJCQlyZXR1cm4gaG9zdFNlY29uZGFyeUluY3ViYXRpb25SYXRlMzEgIT0gSE9TVF9TRUNPTkRBUllfSU5DVUJBVElPTl9SQVRFMzFfRURFRkFVTFQ7DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9fSE9TVF9TRUNPTkRBUllfSU5DVUJBVElPTl9SQVRFMzI6DQorCQkJCXJldHVybiBob3N0U2Vjb25kYXJ5SW5jdWJhdGlvblJhdGUzMiAhPSBIT1NUX1NFQ09OREFSWV9JTkNVQkFUSU9OX1JBVEUzMl9FREVGQVVMVDsNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX19IT1NUX1NFQ09OREFSWV9JTkNVQkFUSU9OX1JBVEUzNDoNCisJCQkJcmV0dXJuIGhvc3RTZWNvbmRhcnlJbmN1YmF0aW9uUmF0ZTM0ICE9IEhPU1RfU0VDT05EQVJZX0lOQ1VCQVRJT05fUkFURTM0X0VERUZBVUxUOw0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfX0hPU1RfU0VDT05EQVJZX0lOQ1VCQVRJT05fUkFURTQxOg0KKwkJCQlyZXR1cm4gaG9zdFNlY29uZGFyeUluY3ViYXRpb25SYXRlNDEgIT0gSE9TVF9TRUNPTkRBUllfSU5DVUJBVElPTl9SQVRFNDFfRURFRkFVTFQ7DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9fSE9TVF9TRUNPTkRBUllfSU5DVUJBVElPTl9SQVRFNDI6DQorCQkJCXJldHVybiBob3N0U2Vjb25kYXJ5SW5jdWJhdGlvblJhdGU0MiAhPSBIT1NUX1NFQ09OREFSWV9JTkNVQkFUSU9OX1JBVEU0Ml9FREVGQVVMVDsNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX19IT1NUX1NFQ09OREFSWV9JTkNVQkFUSU9OX1JBVEU0MzoNCisJCQkJcmV0dXJuIGhvc3RTZWNvbmRhcnlJbmN1YmF0aW9uUmF0ZTQzICE9IEhPU1RfU0VDT05EQVJZX0lOQ1VCQVRJT05fUkFURTQzX0VERUZBVUxUOw0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfX1ZFQ1RPUl9JTkZFQ1RJVklUWTE6DQorCQkJCXJldHVybiB2ZWN0b3JJbmZlY3Rpdml0eTEgIT0gVkVDVE9SX0lORkVDVElWSVRZMV9FREVGQVVMVDsNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX19WRUNUT1JfSU5GRUNUSVZJVFkyOg0KKwkJCQlyZXR1cm4gdmVjdG9ySW5mZWN0aXZpdHkyICE9IFZFQ1RPUl9JTkZFQ1RJVklUWTJfRURFRkFVTFQ7DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9fVkVDVE9SX0lORkVDVElWSVRZMzoNCisJCQkJcmV0dXJuIHZlY3RvckluZmVjdGl2aXR5MyAhPSBWRUNUT1JfSU5GRUNUSVZJVFkzX0VERUZBVUxUOw0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfX1ZFQ1RPUl9JTkZFQ1RJVklUWTQ6DQorCQkJCXJldHVybiB2ZWN0b3JJbmZlY3Rpdml0eTQgIT0gVkVDVE9SX0lORkVDVElWSVRZNF9FREVGQVVMVDsNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX19WRUNUT1JfQURFMToNCisJCQkJcmV0dXJuIHZlY3RvckFERTEgIT0gVkVDVE9SX0FERTFfRURFRkFVTFQ7DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9fVkVDVE9SX0FERTI6DQorCQkJCXJldHVybiB2ZWN0b3JBREUyICE9IFZFQ1RPUl9BREUyX0VERUZBVUxUOw0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfX1ZFQ1RPUl9BREUzOg0KKwkJCQlyZXR1cm4gdmVjdG9yQURFMyAhPSBWRUNUT1JfQURFM19FREVGQVVMVDsNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX19WRUNUT1JfQURFNDoNCisJCQkJcmV0dXJuIHZlY3RvckFERTQgIT0gVkVDVE9SX0FERTRfRURFRkFVTFQ7DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9fVkVDVE9SX0lOQ1VCQVRJT05fUkFURTE6DQorCQkJCXJldHVybiB2ZWN0b3JJbmN1YmF0aW9uUmF0ZTEgIT0gVkVDVE9SX0lOQ1VCQVRJT05fUkFURTFfRURFRkFVTFQ7DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9fVkVDVE9SX0lOQ1VCQVRJT05fUkFURTI6DQorCQkJCXJldHVybiB2ZWN0b3JJbmN1YmF0aW9uUmF0ZTIgIT0gVkVDVE9SX0lOQ1VCQVRJT05fUkFURTJfRURFRkFVTFQ7DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9fVkVDVE9SX0lOQ1VCQVRJT05fUkFURTM6DQorCQkJCXJldHVybiB2ZWN0b3JJbmN1YmF0aW9uUmF0ZTMgIT0gVkVDVE9SX0lOQ1VCQVRJT05fUkFURTNfRURFRkFVTFQ7DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9fVkVDVE9SX0lOQ1VCQVRJT05fUkFURTQ6DQorCQkJCXJldHVybiB2ZWN0b3JJbmN1YmF0aW9uUmF0ZTQgIT0gVkVDVE9SX0lOQ1VCQVRJT05fUkFURTRfRURFRkFVTFQ7DQorCQl9DQorCQlyZXR1cm4gc3VwZXIuZUlzU2V0KGZlYXR1cmVJRCk7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlAT3ZlcnJpZGUNCisJcHVibGljIFN0cmluZyB0b1N0cmluZygpIHsNCisJCWlmIChlSXNQcm94eSgpKSByZXR1cm4gc3VwZXIudG9TdHJpbmcoKTsNCisNCisJCVN0cmluZ0J1ZmZlciByZXN1bHQgPSBuZXcgU3RyaW5nQnVmZmVyKHN1cGVyLnRvU3RyaW5nKCkpOw0KKwkJcmVzdWx0LmFwcGVuZCgiIChiaXRpbmdSYXRlU1Y6ICIpOw0KKwkJcmVzdWx0LmFwcGVuZChiaXRpbmdSYXRlU1YpOw0KKwkJcmVzdWx0LmFwcGVuZCgiLCBiaXRpbmdSYXRlSVY6ICIpOw0KKwkJcmVzdWx0LmFwcGVuZChiaXRpbmdSYXRlSVYpOw0KKwkJcmVzdWx0LmFwcGVuZCgiLCBob3N0SW5mZWN0aXZpdHkxOiAiKTsNCisJCXJlc3VsdC5hcHBlbmQoaG9zdEluZmVjdGl2aXR5MSk7DQorCQlyZXN1bHQuYXBwZW5kKCIsIGhvc3RJbmZlY3Rpdml0eTI6ICIpOw0KKwkJcmVzdWx0LmFwcGVuZChob3N0SW5mZWN0aXZpdHkyKTsNCisJCXJlc3VsdC5hcHBlbmQoIiwgaG9zdEluZmVjdGl2aXR5MzogIik7DQorCQlyZXN1bHQuYXBwZW5kKGhvc3RJbmZlY3Rpdml0eTMpOw0KKwkJcmVzdWx0LmFwcGVuZCgiLCBob3N0SW5mZWN0aXZpdHk0OiAiKTsNCisJCXJlc3VsdC5hcHBlbmQoaG9zdEluZmVjdGl2aXR5NCk7DQorCQlyZXN1bHQuYXBwZW5kKCIsIGhvc3RQcmltYXJ5SW5jdWJhdGlvblJhdGUxOiAiKTsNCisJCXJlc3VsdC5hcHBlbmQoaG9zdFByaW1hcnlJbmN1YmF0aW9uUmF0ZTEpOw0KKwkJcmVzdWx0LmFwcGVuZCgiLCBob3N0UHJpbWFyeUluY3ViYXRpb25SYXRlMjogIik7DQorCQlyZXN1bHQuYXBwZW5kKGhvc3RQcmltYXJ5SW5jdWJhdGlvblJhdGUyKTsNCisJCXJlc3VsdC5hcHBlbmQoIiwgaG9zdFByaW1hcnlJbmN1YmF0aW9uUmF0ZTM6ICIpOw0KKwkJcmVzdWx0LmFwcGVuZChob3N0UHJpbWFyeUluY3ViYXRpb25SYXRlMyk7DQorCQlyZXN1bHQuYXBwZW5kKCIsIGhvc3RQcmltYXJ5SW5jdWJhdGlvblJhdGU0OiAiKTsNCisJCXJlc3VsdC5hcHBlbmQoaG9zdFByaW1hcnlJbmN1YmF0aW9uUmF0ZTQpOw0KKwkJcmVzdWx0LmFwcGVuZCgiLCBob3N0UHJpbWFyeVJlY292ZXJ5UmF0ZTE6ICIpOw0KKwkJcmVzdWx0LmFwcGVuZChob3N0UHJpbWFyeVJlY292ZXJ5UmF0ZTEpOw0KKwkJcmVzdWx0LmFwcGVuZCgiLCBob3N0UHJpbWFyeVJlY292ZXJ5UmF0ZTI6ICIpOw0KKwkJcmVzdWx0LmFwcGVuZChob3N0UHJpbWFyeVJlY292ZXJ5UmF0ZTIpOw0KKwkJcmVzdWx0LmFwcGVuZCgiLCBob3N0UHJpbWFyeVJlY292ZXJ5UmF0ZTM6ICIpOw0KKwkJcmVzdWx0LmFwcGVuZChob3N0UHJpbWFyeVJlY292ZXJ5UmF0ZTMpOw0KKwkJcmVzdWx0LmFwcGVuZCgiLCBob3N0UHJpbWFyeVJlY292ZXJ5UmF0ZTQ6ICIpOw0KKwkJcmVzdWx0LmFwcGVuZChob3N0UHJpbWFyeVJlY292ZXJ5UmF0ZTQpOw0KKwkJcmVzdWx0LmFwcGVuZCgiLCBob3N0UHJpbWFyeUltbXVuaXR5TG9zc1JhdGUxOiAiKTsNCisJCXJlc3VsdC5hcHBlbmQoaG9zdFByaW1hcnlJbW11bml0eUxvc3NSYXRlMSk7DQorCQlyZXN1bHQuYXBwZW5kKCIsIGhvc3RQcmltYXJ5SW1tdW5pdHlMb3NzUmF0ZTI6ICIpOw0KKwkJcmVzdWx0LmFwcGVuZChob3N0UHJpbWFyeUltbXVuaXR5TG9zc1JhdGUyKTsNCisJCXJlc3VsdC5hcHBlbmQoIiwgaG9zdFByaW1hcnlJbW11bml0eUxvc3NSYXRlMzogIik7DQorCQlyZXN1bHQuYXBwZW5kKGhvc3RQcmltYXJ5SW1tdW5pdHlMb3NzUmF0ZTMpOw0KKwkJcmVzdWx0LmFwcGVuZCgiLCBob3N0UHJpbWFyeUltbXVuaXR5TG9zc1JhdGU0OiAiKTsNCisJCXJlc3VsdC5hcHBlbmQoaG9zdFByaW1hcnlJbW11bml0eUxvc3NSYXRlNCk7DQorCQlyZXN1bHQuYXBwZW5kKCIsIGhvc3RQcmltYXJ5RGlzZWFzZURlYXRoUmF0ZTE6ICIpOw0KKwkJcmVzdWx0LmFwcGVuZChob3N0UHJpbWFyeURpc2Vhc2VEZWF0aFJhdGUxKTsNCisJCXJlc3VsdC5hcHBlbmQoIiwgaG9zdFByaW1hcnlEaXNlYXNlRGVhdGhSYXRlMjogIik7DQorCQlyZXN1bHQuYXBwZW5kKGhvc3RQcmltYXJ5RGlzZWFzZURlYXRoUmF0ZTIpOw0KKwkJcmVzdWx0LmFwcGVuZCgiLCBob3N0UHJpbWFyeURpc2Vhc2VEZWF0aFJhdGUzOiAiKTsNCisJCXJlc3VsdC5hcHBlbmQoaG9zdFByaW1hcnlEaXNlYXNlRGVhdGhSYXRlMyk7DQorCQlyZXN1bHQuYXBwZW5kKCIsIGhvc3RQcmltYXJ5RGlzZWFzZURlYXRoUmF0ZTQ6ICIpOw0KKwkJcmVzdWx0LmFwcGVuZChob3N0UHJpbWFyeURpc2Vhc2VEZWF0aFJhdGU0KTsNCisJCXJlc3VsdC5hcHBlbmQoIiwgaG9zdEFERTEyOiAiKTsNCisJCXJlc3VsdC5hcHBlbmQoaG9zdEFERTEyKTsNCisJCXJlc3VsdC5hcHBlbmQoIiwgaG9zdEFERTEzOiAiKTsNCisJCXJlc3VsdC5hcHBlbmQoaG9zdEFERTEzKTsNCisJCXJlc3VsdC5hcHBlbmQoIiwgaG9zdEFERTE0OiAiKTsNCisJCXJlc3VsdC5hcHBlbmQoaG9zdEFERTE0KTsNCisJCXJlc3VsdC5hcHBlbmQoIiwgaG9zdEFERTIxOiAiKTsNCisJCXJlc3VsdC5hcHBlbmQoaG9zdEFERTIxKTsNCisJCXJlc3VsdC5hcHBlbmQoIiwgaG9zdEFERTIzOiAiKTsNCisJCXJlc3VsdC5hcHBlbmQoaG9zdEFERTIzKTsNCisJCXJlc3VsdC5hcHBlbmQoIiwgaG9zdEFERTI0OiAiKTsNCisJCXJlc3VsdC5hcHBlbmQoaG9zdEFERTI0KTsNCisJCXJlc3VsdC5hcHBlbmQoIiwgaG9zdEFERTMxOiAiKTsNCisJCXJlc3VsdC5hcHBlbmQoaG9zdEFERTMxKTsNCisJCXJlc3VsdC5hcHBlbmQoIiwgaG9zdEFERTMyOiAiKTsNCisJCXJlc3VsdC5hcHBlbmQoaG9zdEFERTMyKTsNCisJCXJlc3VsdC5hcHBlbmQoIiwgaG9zdEFERTM0OiAiKTsNCisJCXJlc3VsdC5hcHBlbmQoaG9zdEFERTM0KTsNCisJCXJlc3VsdC5hcHBlbmQoIiwgaG9zdEFERTQxOiAiKTsNCisJCXJlc3VsdC5hcHBlbmQoaG9zdEFERTQxKTsNCisJCXJlc3VsdC5hcHBlbmQoIiwgaG9zdEFERTQyOiAiKTsNCisJCXJlc3VsdC5hcHBlbmQoaG9zdEFERTQyKTsNCisJCXJlc3VsdC5hcHBlbmQoIiwgaG9zdEFERTQzOiAiKTsNCisJCXJlc3VsdC5hcHBlbmQoaG9zdEFERTQzKTsNCisJCXJlc3VsdC5hcHBlbmQoIiwgaG9zdFNlY29uZGFyeURpc2Vhc2VEZWF0aFJhdGUxMjogIik7DQorCQlyZXN1bHQuYXBwZW5kKGhvc3RTZWNvbmRhcnlEaXNlYXNlRGVhdGhSYXRlMTIpOw0KKwkJcmVzdWx0LmFwcGVuZCgiLCBob3N0U2Vjb25kYXJ5RGlzZWFzZURlYXRoUmF0ZTEzOiAiKTsNCisJCXJlc3VsdC5hcHBlbmQoaG9zdFNlY29uZGFyeURpc2Vhc2VEZWF0aFJhdGUxMyk7DQorCQlyZXN1bHQuYXBwZW5kKCIsIGhvc3RTZWNvbmRhcnlEaXNlYXNlRGVhdGhSYXRlMTQ6ICIpOw0KKwkJcmVzdWx0LmFwcGVuZChob3N0U2Vjb25kYXJ5RGlzZWFzZURlYXRoUmF0ZTE0KTsNCisJCXJlc3VsdC5hcHBlbmQoIiwgaG9zdFNlY29uZGFyeURpc2Vhc2VEZWF0aFJhdGUyMTogIik7DQorCQlyZXN1bHQuYXBwZW5kKGhvc3RTZWNvbmRhcnlEaXNlYXNlRGVhdGhSYXRlMjEpOw0KKwkJcmVzdWx0LmFwcGVuZCgiLCBob3N0U2Vjb25kYXJ5RGlzZWFzZURlYXRoUmF0ZTIzOiAiKTsNCisJCXJlc3VsdC5hcHBlbmQoaG9zdFNlY29uZGFyeURpc2Vhc2VEZWF0aFJhdGUyMyk7DQorCQlyZXN1bHQuYXBwZW5kKCIsIGhvc3RTZWNvbmRhcnlEaXNlYXNlRGVhdGhSYXRlMjQ6ICIpOw0KKwkJcmVzdWx0LmFwcGVuZChob3N0U2Vjb25kYXJ5RGlzZWFzZURlYXRoUmF0ZTI0KTsNCisJCXJlc3VsdC5hcHBlbmQoIiwgaG9zdFNlY29uZGFyeURpc2Vhc2VEZWF0aFJhdGUzMTogIik7DQorCQlyZXN1bHQuYXBwZW5kKGhvc3RTZWNvbmRhcnlEaXNlYXNlRGVhdGhSYXRlMzEpOw0KKwkJcmVzdWx0LmFwcGVuZCgiLCBob3N0U2Vjb25kYXJ5RGlzZWFzZURlYXRoUmF0ZTMyOiAiKTsNCisJCXJlc3VsdC5hcHBlbmQoaG9zdFNlY29uZGFyeURpc2Vhc2VEZWF0aFJhdGUzMik7DQorCQlyZXN1bHQuYXBwZW5kKCIsIGhvc3RTZWNvbmRhcnlEaXNlYXNlRGVhdGhSYXRlMzQ6ICIpOw0KKwkJcmVzdWx0LmFwcGVuZChob3N0U2Vjb25kYXJ5RGlzZWFzZURlYXRoUmF0ZTM0KTsNCisJCXJlc3VsdC5hcHBlbmQoIiwgaG9zdFNlY29uZGFyeURpc2Vhc2VEZWF0aFJhdGU0MTogIik7DQorCQlyZXN1bHQuYXBwZW5kKGhvc3RTZWNvbmRhcnlEaXNlYXNlRGVhdGhSYXRlNDEpOw0KKwkJcmVzdWx0LmFwcGVuZCgiLCBob3N0U2Vjb25kYXJ5RGlzZWFzZURlYXRoUmF0ZTQyOiAiKTsNCisJCXJlc3VsdC5hcHBlbmQoaG9zdFNlY29uZGFyeURpc2Vhc2VEZWF0aFJhdGU0Mik7DQorCQlyZXN1bHQuYXBwZW5kKCIsIGhvc3RTZWNvbmRhcnlEaXNlYXNlRGVhdGhSYXRlNDM6ICIpOw0KKwkJcmVzdWx0LmFwcGVuZChob3N0U2Vjb25kYXJ5RGlzZWFzZURlYXRoUmF0ZTQzKTsNCisJCXJlc3VsdC5hcHBlbmQoIiwgaG9zdFNlY29uZGFyeVJlY292ZXJ5UmF0ZTEyOiAiKTsNCisJCXJlc3VsdC5hcHBlbmQoaG9zdFNlY29uZGFyeVJlY292ZXJ5UmF0ZTEyKTsNCisJCXJlc3VsdC5hcHBlbmQoIiwgaG9zdFNlY29uZGFyeVJlY292ZXJ5UmF0ZTEzOiAiKTsNCisJCXJlc3VsdC5hcHBlbmQoaG9zdFNlY29uZGFyeVJlY292ZXJ5UmF0ZTEzKTsNCisJCXJlc3VsdC5hcHBlbmQoIiwgaG9zdFNlY29uZGFyeVJlY292ZXJ5UmF0ZTE0OiAiKTsNCisJCXJlc3VsdC5hcHBlbmQoaG9zdFNlY29uZGFyeVJlY292ZXJ5UmF0ZTE0KTsNCisJCXJlc3VsdC5hcHBlbmQoIiwgaG9zdFNlY29uZGFyeVJlY292ZXJ5UmF0ZTIxOiAiKTsNCisJCXJlc3VsdC5hcHBlbmQoaG9zdFNlY29uZGFyeVJlY292ZXJ5UmF0ZTIxKTsNCisJCXJlc3VsdC5hcHBlbmQoIiwgaG9zdFNlY29uZGFyeVJlY292ZXJ5UmF0ZTIzOiAiKTsNCisJCXJlc3VsdC5hcHBlbmQoaG9zdFNlY29uZGFyeVJlY292ZXJ5UmF0ZTIzKTsNCisJCXJlc3VsdC5hcHBlbmQoIiwgaG9zdFNlY29uZGFyeVJlY292ZXJ5UmF0ZTI0OiAiKTsNCisJCXJlc3VsdC5hcHBlbmQoaG9zdFNlY29uZGFyeVJlY292ZXJ5UmF0ZTI0KTsNCisJCXJlc3VsdC5hcHBlbmQoIiwgaG9zdFNlY29uZGFyeVJlY292ZXJ5UmF0ZTMxOiAiKTsNCisJCXJlc3VsdC5hcHBlbmQoaG9zdFNlY29uZGFyeVJlY292ZXJ5UmF0ZTMxKTsNCisJCXJlc3VsdC5hcHBlbmQoIiwgaG9zdFNlY29uZGFyeVJlY292ZXJ5UmF0ZTMyOiAiKTsNCisJCXJlc3VsdC5hcHBlbmQoaG9zdFNlY29uZGFyeVJlY292ZXJ5UmF0ZTMyKTsNCisJCXJlc3VsdC5hcHBlbmQoIiwgaG9zdFNlY29uZGFyeVJlY292ZXJ5UmF0ZTM0OiAiKTsNCisJCXJlc3VsdC5hcHBlbmQoaG9zdFNlY29uZGFyeVJlY292ZXJ5UmF0ZTM0KTsNCisJCXJlc3VsdC5hcHBlbmQoIiwgaG9zdFNlY29uZGFyeVJlY292ZXJ5UmF0ZTQxOiAiKTsNCisJCXJlc3VsdC5hcHBlbmQoaG9zdFNlY29uZGFyeVJlY292ZXJ5UmF0ZTQxKTsNCisJCXJlc3VsdC5hcHBlbmQoIiwgaG9zdFNlY29uZGFyeVJlY292ZXJ5UmF0ZTQyOiAiKTsNCisJCXJlc3VsdC5hcHBlbmQoaG9zdFNlY29uZGFyeVJlY292ZXJ5UmF0ZTQyKTsNCisJCXJlc3VsdC5hcHBlbmQoIiwgaG9zdFNlY29uZGFyeVJlY292ZXJ5UmF0ZTQzOiAiKTsNCisJCXJlc3VsdC5hcHBlbmQoaG9zdFNlY29uZGFyeVJlY292ZXJ5UmF0ZTQzKTsNCisJCXJlc3VsdC5hcHBlbmQoIiwgaG9zdFNlY29uZGFyeUluY3ViYXRpb25SYXRlMTI6ICIpOw0KKwkJcmVzdWx0LmFwcGVuZChob3N0U2Vjb25kYXJ5SW5jdWJhdGlvblJhdGUxMik7DQorCQlyZXN1bHQuYXBwZW5kKCIsIGhvc3RTZWNvbmRhcnlJbmN1YmF0aW9uUmF0ZTEzOiAiKTsNCisJCXJlc3VsdC5hcHBlbmQoaG9zdFNlY29uZGFyeUluY3ViYXRpb25SYXRlMTMpOw0KKwkJcmVzdWx0LmFwcGVuZCgiLCBob3N0U2Vjb25kYXJ5SW5jdWJhdGlvblJhdGUxNDogIik7DQorCQlyZXN1bHQuYXBwZW5kKGhvc3RTZWNvbmRhcnlJbmN1YmF0aW9uUmF0ZTE0KTsNCisJCXJlc3VsdC5hcHBlbmQoIiwgaG9zdFNlY29uZGFyeUluY3ViYXRpb25SYXRlMjE6ICIpOw0KKwkJcmVzdWx0LmFwcGVuZChob3N0U2Vjb25kYXJ5SW5jdWJhdGlvblJhdGUyMSk7DQorCQlyZXN1bHQuYXBwZW5kKCIsIGhvc3RTZWNvbmRhcnlJbmN1YmF0aW9uUmF0ZTIzOiAiKTsNCisJCXJlc3VsdC5hcHBlbmQoaG9zdFNlY29uZGFyeUluY3ViYXRpb25SYXRlMjMpOw0KKwkJcmVzdWx0LmFwcGVuZCgiLCBob3N0U2Vjb25kYXJ5SW5jdWJhdGlvblJhdGUyNDogIik7DQorCQlyZXN1bHQuYXBwZW5kKGhvc3RTZWNvbmRhcnlJbmN1YmF0aW9uUmF0ZTI0KTsNCisJCXJlc3VsdC5hcHBlbmQoIiwgaG9zdFNlY29uZGFyeUluY3ViYXRpb25SYXRlMzE6ICIpOw0KKwkJcmVzdWx0LmFwcGVuZChob3N0U2Vjb25kYXJ5SW5jdWJhdGlvblJhdGUzMSk7DQorCQlyZXN1bHQuYXBwZW5kKCIsIGhvc3RTZWNvbmRhcnlJbmN1YmF0aW9uUmF0ZTMyOiAiKTsNCisJCXJlc3VsdC5hcHBlbmQoaG9zdFNlY29uZGFyeUluY3ViYXRpb25SYXRlMzIpOw0KKwkJcmVzdWx0LmFwcGVuZCgiLCBob3N0U2Vjb25kYXJ5SW5jdWJhdGlvblJhdGUzNDogIik7DQorCQlyZXN1bHQuYXBwZW5kKGhvc3RTZWNvbmRhcnlJbmN1YmF0aW9uUmF0ZTM0KTsNCisJCXJlc3VsdC5hcHBlbmQoIiwgaG9zdFNlY29uZGFyeUluY3ViYXRpb25SYXRlNDE6ICIpOw0KKwkJcmVzdWx0LmFwcGVuZChob3N0U2Vjb25kYXJ5SW5jdWJhdGlvblJhdGU0MSk7DQorCQlyZXN1bHQuYXBwZW5kKCIsIGhvc3RTZWNvbmRhcnlJbmN1YmF0aW9uUmF0ZTQyOiAiKTsNCisJCXJlc3VsdC5hcHBlbmQoaG9zdFNlY29uZGFyeUluY3ViYXRpb25SYXRlNDIpOw0KKwkJcmVzdWx0LmFwcGVuZCgiLCBob3N0U2Vjb25kYXJ5SW5jdWJhdGlvblJhdGU0MzogIik7DQorCQlyZXN1bHQuYXBwZW5kKGhvc3RTZWNvbmRhcnlJbmN1YmF0aW9uUmF0ZTQzKTsNCisJCXJlc3VsdC5hcHBlbmQoIiwgdmVjdG9ySW5mZWN0aXZpdHkxOiAiKTsNCisJCXJlc3VsdC5hcHBlbmQodmVjdG9ySW5mZWN0aXZpdHkxKTsNCisJCXJlc3VsdC5hcHBlbmQoIiwgdmVjdG9ySW5mZWN0aXZpdHkyOiAiKTsNCisJCXJlc3VsdC5hcHBlbmQodmVjdG9ySW5mZWN0aXZpdHkyKTsNCisJCXJlc3VsdC5hcHBlbmQoIiwgdmVjdG9ySW5mZWN0aXZpdHkzOiAiKTsNCisJCXJlc3VsdC5hcHBlbmQodmVjdG9ySW5mZWN0aXZpdHkzKTsNCisJCXJlc3VsdC5hcHBlbmQoIiwgdmVjdG9ySW5mZWN0aXZpdHk0OiAiKTsNCisJCXJlc3VsdC5hcHBlbmQodmVjdG9ySW5mZWN0aXZpdHk0KTsNCisJCXJlc3VsdC5hcHBlbmQoIiwgdmVjdG9yQURFMTogIik7DQorCQlyZXN1bHQuYXBwZW5kKHZlY3RvckFERTEpOw0KKwkJcmVzdWx0LmFwcGVuZCgiLCB2ZWN0b3JBREUyOiAiKTsNCisJCXJlc3VsdC5hcHBlbmQodmVjdG9yQURFMik7DQorCQlyZXN1bHQuYXBwZW5kKCIsIHZlY3RvckFERTM6ICIpOw0KKwkJcmVzdWx0LmFwcGVuZCh2ZWN0b3JBREUzKTsNCisJCXJlc3VsdC5hcHBlbmQoIiwgdmVjdG9yQURFNDogIik7DQorCQlyZXN1bHQuYXBwZW5kKHZlY3RvckFERTQpOw0KKwkJcmVzdWx0LmFwcGVuZCgiLCB2ZWN0b3JJbmN1YmF0aW9uUmF0ZTE6ICIpOw0KKwkJcmVzdWx0LmFwcGVuZCh2ZWN0b3JJbmN1YmF0aW9uUmF0ZTEpOw0KKwkJcmVzdWx0LmFwcGVuZCgiLCB2ZWN0b3JJbmN1YmF0aW9uUmF0ZTI6ICIpOw0KKwkJcmVzdWx0LmFwcGVuZCh2ZWN0b3JJbmN1YmF0aW9uUmF0ZTIpOw0KKwkJcmVzdWx0LmFwcGVuZCgiLCB2ZWN0b3JJbmN1YmF0aW9uUmF0ZTM6ICIpOw0KKwkJcmVzdWx0LmFwcGVuZCh2ZWN0b3JJbmN1YmF0aW9uUmF0ZTMpOw0KKwkJcmVzdWx0LmFwcGVuZCgiLCB2ZWN0b3JJbmN1YmF0aW9uUmF0ZTQ6ICIpOw0KKwkJcmVzdWx0LmFwcGVuZCh2ZWN0b3JJbmN1YmF0aW9uUmF0ZTQpOw0KKwkJcmVzdWx0LmFwcGVuZCgnKScpOw0KKwkJcmV0dXJuIHJlc3VsdC50b1N0cmluZygpOw0KKwl9DQorDQorCUBPdmVycmlkZQ0KKwlwdWJsaWMgU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbFZhbHVlIGNvbXB1dGVEaXNlYXNlRGVsdGFzKFNURU1UaW1lIHRpbWUsDQorCQkJU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbFZhbHVlIGN1cnJlbnRTdGF0ZSwNCisJCQlTdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsIGRpc2Vhc2VMYWJlbCwgbG9uZyB0aW1lRGVsdGEsDQorCQkJRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZSByZXR1cm5WYWx1ZSkgew0KKwkJaWYgKGRpc2Vhc2VMYWJlbCBpbnN0YW5jZW9mIERlbmd1ZU1vZGVsSG9zdExhYmVsKSB7DQorCQkJRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZSBob3N0RGVsdGEgPSAoRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZSkgcmV0dXJuVmFsdWU7DQorCQkJRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZSBob3N0ID0gKERlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWUpIGN1cnJlbnRTdGF0ZTsNCisNCisJCQlpZiAoaG9zdC5nZXRQb3B1bGF0aW9uQ291bnQoKSA9PSAwLjApIHsNCisJCQkJaG9zdERlbHRhLnJlc2V0KCk7DQorCQkJCXJldHVybiBob3N0RGVsdGE7DQorCQkJfQ0KKw0KKwkJCURlbmd1ZU1vZGVsVmVjdG9yTGFiZWxWYWx1ZSB2ZWN0b3IgPSBudWxsOw0KKwkJCUVMaXN0PE5vZGVMYWJlbD4gYWxsTGFiZWxzID0gZGlzZWFzZUxhYmVsLmdldE5vZGUoKS5nZXRMYWJlbHMoKTsNCisNCisJCQlmb3IgKE5vZGVMYWJlbCBsYWJlbCA6IGFsbExhYmVscykgew0KKwkJCQlpZiAobGFiZWwgaW5zdGFuY2VvZiBEZW5ndWVNb2RlbFZlY3RvckxhYmVsKSB7DQorCQkJCQlEZW5ndWVNb2RlbFZlY3RvckxhYmVsIHZlY3RvckxhYmVsID0gKERlbmd1ZU1vZGVsVmVjdG9yTGFiZWwpIGxhYmVsOw0KKw0KKwkJCQkJaWYgKHZlY3RvckxhYmVsLmdldERlY29yYXRvcigpID09IHRoaXMpIHsNCisJCQkJCQl2ZWN0b3IgPSAoRGVuZ3VlTW9kZWxWZWN0b3JMYWJlbFZhbHVlKSB2ZWN0b3JMYWJlbA0KKwkJCQkJCQkJLmdldFRlbXBWYWx1ZSgpOw0KKwkJCQkJfQ0KKwkJCQl9DQorCQkJfQ0KKwkJCS8vIGRlZmluZSB0aGUgYWRqdXN0ZWQgYml0aW5nIHJhdGUgYnkgaW5mZWN0aW91cyB2ZWN0b3IgdG8NCisJCQkvLyBzdXNjZXB0aWJsZSBob3N0DQorCQkJZG91YmxlIGFkanVzdGVkQml0aW5nUmF0ZUlWID0gYml0aW5nUmF0ZUlWICogKGRvdWJsZSkgdGltZURlbHRhDQorCQkJCQkvIChkb3VibGUpIHRpbWVQZXJpb2Q7DQorDQorCQkJLy8gZGVmaW5lIHByaW1hcnkgaW5jdWJhdGlvbiByYXRlIGZvciA0IHN0cmFpbnMNCisJCQlkb3VibGUgYWRqdXN0ZWRIb3N0UHJpbWFyeUluY3ViYXRpb25SYXRlMSA9IGhvc3RQcmltYXJ5SW5jdWJhdGlvblJhdGUxDQorCQkJCQkqIChkb3VibGUpIHRpbWVEZWx0YSAvIChkb3VibGUpIHRpbWVQZXJpb2Q7DQorCQkJZG91YmxlIGFkanVzdGVkSG9zdFByaW1hcnlJbmN1YmF0aW9uUmF0ZTIgPSBob3N0UHJpbWFyeUluY3ViYXRpb25SYXRlMg0KKwkJCQkJKiAoZG91YmxlKSB0aW1lRGVsdGEgLyAoZG91YmxlKSB0aW1lUGVyaW9kOw0KKwkJCWRvdWJsZSBhZGp1c3RlZEhvc3RQcmltYXJ5SW5jdWJhdGlvblJhdGUzID0gaG9zdFByaW1hcnlJbmN1YmF0aW9uUmF0ZTMNCisJCQkJCSogKGRvdWJsZSkgdGltZURlbHRhIC8gKGRvdWJsZSkgdGltZVBlcmlvZDsNCisJCQlkb3VibGUgYWRqdXN0ZWRIb3N0UHJpbWFyeUluY3ViYXRpb25SYXRlNCA9IGhvc3RQcmltYXJ5SW5jdWJhdGlvblJhdGU0DQorCQkJCQkqIChkb3VibGUpIHRpbWVEZWx0YSAvIChkb3VibGUpIHRpbWVQZXJpb2Q7DQorCQkJLy8gZGVmaW5lIHByaW1hcnkgcmVjb3ZlcnkgcmF0ZSBmb3IgNCBzdHJhaW5zDQorCQkJZG91YmxlIGFkanVzdGVkSG9zdFByaW1hcnlSZWNvdmVyeVJhdGUxID0gaG9zdFByaW1hcnlSZWNvdmVyeVJhdGUxDQorCQkJCQkqIChkb3VibGUpIHRpbWVEZWx0YSAvIChkb3VibGUpIHRpbWVQZXJpb2Q7DQorCQkJZG91YmxlIGFkanVzdGVkSG9zdFByaW1hcnlSZWNvdmVyeVJhdGUyID0gaG9zdFByaW1hcnlSZWNvdmVyeVJhdGUyDQorCQkJCQkqIChkb3VibGUpIHRpbWVEZWx0YSAvIChkb3VibGUpIHRpbWVQZXJpb2Q7DQorCQkJZG91YmxlIGFkanVzdGVkSG9zdFByaW1hcnlSZWNvdmVyeVJhdGUzID0gaG9zdFByaW1hcnlSZWNvdmVyeVJhdGUzDQorCQkJCQkqIChkb3VibGUpIHRpbWVEZWx0YSAvIChkb3VibGUpIHRpbWVQZXJpb2Q7DQorCQkJZG91YmxlIGFkanVzdGVkSG9zdFByaW1hcnlSZWNvdmVyeVJhdGU0ID0gaG9zdFByaW1hcnlSZWNvdmVyeVJhdGU0DQorCQkJCQkqIChkb3VibGUpIHRpbWVEZWx0YSAvIChkb3VibGUpIHRpbWVQZXJpb2Q7DQorCQkJLy8gZGVmaW5lIGltbXVuaXR5IGxvc3MgcmF0ZSBmb3IgNCBzdHJhaW5zDQorCQkJZG91YmxlIGFkanVzdGVkSG9zdFByaW1hcnlJbW11bml0eUxvc3NSYXRlMSA9IGhvc3RQcmltYXJ5SW1tdW5pdHlMb3NzUmF0ZTENCisJCQkJCSogKGRvdWJsZSkgdGltZURlbHRhIC8gKGRvdWJsZSkgdGltZVBlcmlvZDsNCisJCQlkb3VibGUgYWRqdXN0ZWRIb3N0UHJpbWFyeUltbXVuaXR5TG9zc1JhdGUyID0gaG9zdFByaW1hcnlJbW11bml0eUxvc3NSYXRlMg0KKwkJCQkJKiAoZG91YmxlKSB0aW1lRGVsdGEgLyAoZG91YmxlKSB0aW1lUGVyaW9kOw0KKwkJCWRvdWJsZSBhZGp1c3RlZEhvc3RQcmltYXJ5SW1tdW5pdHlMb3NzUmF0ZTMgPSBob3N0UHJpbWFyeUltbXVuaXR5TG9zc1JhdGUzDQorCQkJCQkqIChkb3VibGUpIHRpbWVEZWx0YSAvIChkb3VibGUpIHRpbWVQZXJpb2Q7DQorCQkJZG91YmxlIGFkanVzdGVkSG9zdFByaW1hcnlJbW11bml0eUxvc3NSYXRlNCA9IGhvc3RQcmltYXJ5SW1tdW5pdHlMb3NzUmF0ZTQNCisJCQkJCSogKGRvdWJsZSkgdGltZURlbHRhIC8gKGRvdWJsZSkgdGltZVBlcmlvZDsNCisJCQkvLyBkZWZpbmUgcHJpbWFyeSBkaXNlYXNlIGRlYXRoIHJhdGUgZm9yIDQgc3RyYWlucw0KKwkJCWRvdWJsZSBhZGp1c3RlZEhvc3RQcmltYXJ5RGlzZWFzZURlYXRoUmF0ZTEgPSBob3N0UHJpbWFyeURpc2Vhc2VEZWF0aFJhdGUxDQorCQkJCQkqIChkb3VibGUpIHRpbWVEZWx0YSAvIChkb3VibGUpIHRpbWVQZXJpb2Q7DQorCQkJZG91YmxlIGFkanVzdGVkSG9zdFByaW1hcnlEaXNlYXNlRGVhdGhSYXRlMiA9IGhvc3RQcmltYXJ5RGlzZWFzZURlYXRoUmF0ZTINCisJCQkJCSogKGRvdWJsZSkgdGltZURlbHRhIC8gKGRvdWJsZSkgdGltZVBlcmlvZDsNCisJCQlkb3VibGUgYWRqdXN0ZWRIb3N0UHJpbWFyeURpc2Vhc2VEZWF0aFJhdGUzID0gaG9zdFByaW1hcnlEaXNlYXNlRGVhdGhSYXRlMw0KKwkJCQkJKiAoZG91YmxlKSB0aW1lRGVsdGEgLyAoZG91YmxlKSB0aW1lUGVyaW9kOw0KKwkJCWRvdWJsZSBhZGp1c3RlZEhvc3RQcmltYXJ5RGlzZWFzZURlYXRoUmF0ZTQgPSBob3N0UHJpbWFyeURpc2Vhc2VEZWF0aFJhdGU0DQorCQkJCQkqIChkb3VibGUpIHRpbWVEZWx0YSAvIChkb3VibGUpIHRpbWVQZXJpb2Q7DQorCQkJLy8gZGVmaW5lIHNlY29uZGFyeSBpbmN1YmF0aW9uIHJhdGUgZm9yIDEyIGRpZmZlcmVudCBpbmZlY3Rpb24NCisJCQkvLyBjb21iaW5hdGlvbnMNCisJCQlkb3VibGUgYWRqdXN0ZWRIb3N0U2Vjb25kYXJ5SW5jdWJhdGlvblJhdGUxMiA9IGhvc3RTZWNvbmRhcnlJbmN1YmF0aW9uUmF0ZTEyDQorCQkJCQkqIChkb3VibGUpIHRpbWVEZWx0YSAvIChkb3VibGUpIHRpbWVQZXJpb2Q7DQorCQkJZG91YmxlIGFkanVzdGVkSG9zdFNlY29uZGFyeUluY3ViYXRpb25SYXRlMTMgPSBob3N0U2Vjb25kYXJ5SW5jdWJhdGlvblJhdGUxMw0KKwkJCQkJKiAoZG91YmxlKSB0aW1lRGVsdGEgLyAoZG91YmxlKSB0aW1lUGVyaW9kOw0KKwkJCWRvdWJsZSBhZGp1c3RlZEhvc3RTZWNvbmRhcnlJbmN1YmF0aW9uUmF0ZTE0ID0gaG9zdFNlY29uZGFyeUluY3ViYXRpb25SYXRlMTQNCisJCQkJCSogKGRvdWJsZSkgdGltZURlbHRhIC8gKGRvdWJsZSkgdGltZVBlcmlvZDsNCisJCQlkb3VibGUgYWRqdXN0ZWRIb3N0U2Vjb25kYXJ5SW5jdWJhdGlvblJhdGUyMSA9IGhvc3RTZWNvbmRhcnlJbmN1YmF0aW9uUmF0ZTIxDQorCQkJCQkqIChkb3VibGUpIHRpbWVEZWx0YSAvIChkb3VibGUpIHRpbWVQZXJpb2Q7DQorCQkJZG91YmxlIGFkanVzdGVkSG9zdFNlY29uZGFyeUluY3ViYXRpb25SYXRlMjMgPSBob3N0U2Vjb25kYXJ5SW5jdWJhdGlvblJhdGUyMw0KKwkJCQkJKiAoZG91YmxlKSB0aW1lRGVsdGEgLyAoZG91YmxlKSB0aW1lUGVyaW9kOw0KKwkJCWRvdWJsZSBhZGp1c3RlZEhvc3RTZWNvbmRhcnlJbmN1YmF0aW9uUmF0ZTI0ID0gaG9zdFNlY29uZGFyeUluY3ViYXRpb25SYXRlMjQNCisJCQkJCSogKGRvdWJsZSkgdGltZURlbHRhIC8gKGRvdWJsZSkgdGltZVBlcmlvZDsNCisJCQlkb3VibGUgYWRqdXN0ZWRIb3N0U2Vjb25kYXJ5SW5jdWJhdGlvblJhdGUzMSA9IGhvc3RTZWNvbmRhcnlJbmN1YmF0aW9uUmF0ZTMxDQorCQkJCQkqIChkb3VibGUpIHRpbWVEZWx0YSAvIChkb3VibGUpIHRpbWVQZXJpb2Q7DQorCQkJZG91YmxlIGFkanVzdGVkSG9zdFNlY29uZGFyeUluY3ViYXRpb25SYXRlMzIgPSBob3N0U2Vjb25kYXJ5SW5jdWJhdGlvblJhdGUzMg0KKwkJCQkJKiAoZG91YmxlKSB0aW1lRGVsdGEgLyAoZG91YmxlKSB0aW1lUGVyaW9kOw0KKwkJCWRvdWJsZSBhZGp1c3RlZEhvc3RTZWNvbmRhcnlJbmN1YmF0aW9uUmF0ZTM0ID0gaG9zdFNlY29uZGFyeUluY3ViYXRpb25SYXRlMzQNCisJCQkJCSogKGRvdWJsZSkgdGltZURlbHRhIC8gKGRvdWJsZSkgdGltZVBlcmlvZDsNCisJCQlkb3VibGUgYWRqdXN0ZWRIb3N0U2Vjb25kYXJ5SW5jdWJhdGlvblJhdGU0MSA9IGhvc3RTZWNvbmRhcnlJbmN1YmF0aW9uUmF0ZTQxDQorCQkJCQkqIChkb3VibGUpIHRpbWVEZWx0YSAvIChkb3VibGUpIHRpbWVQZXJpb2Q7DQorCQkJZG91YmxlIGFkanVzdGVkSG9zdFNlY29uZGFyeUluY3ViYXRpb25SYXRlNDIgPSBob3N0U2Vjb25kYXJ5SW5jdWJhdGlvblJhdGU0Mg0KKwkJCQkJKiAoZG91YmxlKSB0aW1lRGVsdGEgLyAoZG91YmxlKSB0aW1lUGVyaW9kOw0KKwkJCWRvdWJsZSBhZGp1c3RlZEhvc3RTZWNvbmRhcnlJbmN1YmF0aW9uUmF0ZTQzID0gaG9zdFNlY29uZGFyeUluY3ViYXRpb25SYXRlNDMNCisJCQkJCSogKGRvdWJsZSkgdGltZURlbHRhIC8gKGRvdWJsZSkgdGltZVBlcmlvZDsNCisJCQkvLyBkZWZpbmUgc2Vjb25kYXJ5IHJlY292ZXJ5IHJhdGUgZm9yIDEyIGRpZmZlcmVudCBpbmZlY3Rpb24NCisJCQkvLyBjb21iaW5hdGlvbnMNCisJCQlkb3VibGUgYWRqdXN0ZWRIb3N0U2Vjb25kYXJ5UmVjb3ZlcnlSYXRlMTIgPSBob3N0U2Vjb25kYXJ5UmVjb3ZlcnlSYXRlMTINCisJCQkJCSogKGRvdWJsZSkgdGltZURlbHRhIC8gKGRvdWJsZSkgdGltZVBlcmlvZDsNCisJCQlkb3VibGUgYWRqdXN0ZWRIb3N0U2Vjb25kYXJ5UmVjb3ZlcnlSYXRlMTMgPSBob3N0U2Vjb25kYXJ5UmVjb3ZlcnlSYXRlMTMNCisJCQkJCSogKGRvdWJsZSkgdGltZURlbHRhIC8gKGRvdWJsZSkgdGltZVBlcmlvZDsNCisJCQlkb3VibGUgYWRqdXN0ZWRIb3N0U2Vjb25kYXJ5UmVjb3ZlcnlSYXRlMTQgPSBob3N0U2Vjb25kYXJ5UmVjb3ZlcnlSYXRlMTQNCisJCQkJCSogKGRvdWJsZSkgdGltZURlbHRhIC8gKGRvdWJsZSkgdGltZVBlcmlvZDsNCisJCQlkb3VibGUgYWRqdXN0ZWRIb3N0U2Vjb25kYXJ5UmVjb3ZlcnlSYXRlMjEgPSBob3N0U2Vjb25kYXJ5UmVjb3ZlcnlSYXRlMjENCisJCQkJCSogKGRvdWJsZSkgdGltZURlbHRhIC8gKGRvdWJsZSkgdGltZVBlcmlvZDsNCisJCQlkb3VibGUgYWRqdXN0ZWRIb3N0U2Vjb25kYXJ5UmVjb3ZlcnlSYXRlMjMgPSBob3N0U2Vjb25kYXJ5UmVjb3ZlcnlSYXRlMjMNCisJCQkJCSogKGRvdWJsZSkgdGltZURlbHRhIC8gKGRvdWJsZSkgdGltZVBlcmlvZDsNCisJCQlkb3VibGUgYWRqdXN0ZWRIb3N0U2Vjb25kYXJ5UmVjb3ZlcnlSYXRlMjQgPSBob3N0U2Vjb25kYXJ5UmVjb3ZlcnlSYXRlMjQNCisJCQkJCSogKGRvdWJsZSkgdGltZURlbHRhIC8gKGRvdWJsZSkgdGltZVBlcmlvZDsNCisJCQlkb3VibGUgYWRqdXN0ZWRIb3N0U2Vjb25kYXJ5UmVjb3ZlcnlSYXRlMzEgPSBob3N0U2Vjb25kYXJ5UmVjb3ZlcnlSYXRlMzENCisJCQkJCSogKGRvdWJsZSkgdGltZURlbHRhIC8gKGRvdWJsZSkgdGltZVBlcmlvZDsNCisJCQlkb3VibGUgYWRqdXN0ZWRIb3N0U2Vjb25kYXJ5UmVjb3ZlcnlSYXRlMzIgPSBob3N0U2Vjb25kYXJ5UmVjb3ZlcnlSYXRlMzINCisJCQkJCSogKGRvdWJsZSkgdGltZURlbHRhIC8gKGRvdWJsZSkgdGltZVBlcmlvZDsNCisJCQlkb3VibGUgYWRqdXN0ZWRIb3N0U2Vjb25kYXJ5UmVjb3ZlcnlSYXRlMzQgPSBob3N0U2Vjb25kYXJ5UmVjb3ZlcnlSYXRlMzQNCisJCQkJCSogKGRvdWJsZSkgdGltZURlbHRhIC8gKGRvdWJsZSkgdGltZVBlcmlvZDsNCisJCQlkb3VibGUgYWRqdXN0ZWRIb3N0U2Vjb25kYXJ5UmVjb3ZlcnlSYXRlNDEgPSBob3N0U2Vjb25kYXJ5UmVjb3ZlcnlSYXRlNDENCisJCQkJCSogKGRvdWJsZSkgdGltZURlbHRhIC8gKGRvdWJsZSkgdGltZVBlcmlvZDsNCisJCQlkb3VibGUgYWRqdXN0ZWRIb3N0U2Vjb25kYXJ5UmVjb3ZlcnlSYXRlNDIgPSBob3N0U2Vjb25kYXJ5UmVjb3ZlcnlSYXRlNDINCisJCQkJCSogKGRvdWJsZSkgdGltZURlbHRhIC8gKGRvdWJsZSkgdGltZVBlcmlvZDsNCisJCQlkb3VibGUgYWRqdXN0ZWRIb3N0U2Vjb25kYXJ5UmVjb3ZlcnlSYXRlNDMgPSBob3N0U2Vjb25kYXJ5UmVjb3ZlcnlSYXRlNDMNCisJCQkJCSogKGRvdWJsZSkgdGltZURlbHRhIC8gKGRvdWJsZSkgdGltZVBlcmlvZDsNCisJCQkvLyBkZWZpbmUgc2Vjb25kYXJ5IGRpc2Vhc2UgZGVhdGggcmF0ZSBmb3IgMTIgZGlmZmVyZW50IGluZmVjdGlvbg0KKwkJCS8vIGNvbWJpbmF0aW9ucw0KKwkJCWRvdWJsZSBhZGp1c3RlZEhvc3RTZWNvbmRhcnlEaXNlYXNlRGVhdGhSYXRlMTIgPSBob3N0U2Vjb25kYXJ5RGlzZWFzZURlYXRoUmF0ZTEyDQorCQkJCQkqIChkb3VibGUpIHRpbWVEZWx0YSAvIChkb3VibGUpIHRpbWVQZXJpb2Q7DQorCQkJZG91YmxlIGFkanVzdGVkSG9zdFNlY29uZGFyeURpc2Vhc2VEZWF0aFJhdGUxMyA9IGhvc3RTZWNvbmRhcnlEaXNlYXNlRGVhdGhSYXRlMTMNCisJCQkJCSogKGRvdWJsZSkgdGltZURlbHRhIC8gKGRvdWJsZSkgdGltZVBlcmlvZDsNCisJCQlkb3VibGUgYWRqdXN0ZWRIb3N0U2Vjb25kYXJ5RGlzZWFzZURlYXRoUmF0ZTE0ID0gaG9zdFNlY29uZGFyeURpc2Vhc2VEZWF0aFJhdGUxNA0KKwkJCQkJKiAoZG91YmxlKSB0aW1lRGVsdGEgLyAoZG91YmxlKSB0aW1lUGVyaW9kOw0KKwkJCWRvdWJsZSBhZGp1c3RlZEhvc3RTZWNvbmRhcnlEaXNlYXNlRGVhdGhSYXRlMjEgPSBob3N0U2Vjb25kYXJ5RGlzZWFzZURlYXRoUmF0ZTIxDQorCQkJCQkqIChkb3VibGUpIHRpbWVEZWx0YSAvIChkb3VibGUpIHRpbWVQZXJpb2Q7DQorCQkJZG91YmxlIGFkanVzdGVkSG9zdFNlY29uZGFyeURpc2Vhc2VEZWF0aFJhdGUyMyA9IGhvc3RTZWNvbmRhcnlEaXNlYXNlRGVhdGhSYXRlMjMNCisJCQkJCSogKGRvdWJsZSkgdGltZURlbHRhIC8gKGRvdWJsZSkgdGltZVBlcmlvZDsNCisJCQlkb3VibGUgYWRqdXN0ZWRIb3N0U2Vjb25kYXJ5RGlzZWFzZURlYXRoUmF0ZTI0ID0gaG9zdFNlY29uZGFyeURpc2Vhc2VEZWF0aFJhdGUyNA0KKwkJCQkJKiAoZG91YmxlKSB0aW1lRGVsdGEgLyAoZG91YmxlKSB0aW1lUGVyaW9kOw0KKwkJCWRvdWJsZSBhZGp1c3RlZEhvc3RTZWNvbmRhcnlEaXNlYXNlRGVhdGhSYXRlMzEgPSBob3N0U2Vjb25kYXJ5RGlzZWFzZURlYXRoUmF0ZTMxDQorCQkJCQkqIChkb3VibGUpIHRpbWVEZWx0YSAvIChkb3VibGUpIHRpbWVQZXJpb2Q7DQorCQkJZG91YmxlIGFkanVzdGVkSG9zdFNlY29uZGFyeURpc2Vhc2VEZWF0aFJhdGUzMiA9IGhvc3RTZWNvbmRhcnlEaXNlYXNlRGVhdGhSYXRlMzINCisJCQkJCSogKGRvdWJsZSkgdGltZURlbHRhIC8gKGRvdWJsZSkgdGltZVBlcmlvZDsNCisJCQlkb3VibGUgYWRqdXN0ZWRIb3N0U2Vjb25kYXJ5RGlzZWFzZURlYXRoUmF0ZTM0ID0gaG9zdFNlY29uZGFyeURpc2Vhc2VEZWF0aFJhdGUzNA0KKwkJCQkJKiAoZG91YmxlKSB0aW1lRGVsdGEgLyAoZG91YmxlKSB0aW1lUGVyaW9kOw0KKwkJCWRvdWJsZSBhZGp1c3RlZEhvc3RTZWNvbmRhcnlEaXNlYXNlRGVhdGhSYXRlNDEgPSBob3N0U2Vjb25kYXJ5RGlzZWFzZURlYXRoUmF0ZTQxDQorCQkJCQkqIChkb3VibGUpIHRpbWVEZWx0YSAvIChkb3VibGUpIHRpbWVQZXJpb2Q7DQorCQkJZG91YmxlIGFkanVzdGVkSG9zdFNlY29uZGFyeURpc2Vhc2VEZWF0aFJhdGU0MiA9IGhvc3RTZWNvbmRhcnlEaXNlYXNlRGVhdGhSYXRlNDINCisJCQkJCSogKGRvdWJsZSkgdGltZURlbHRhIC8gKGRvdWJsZSkgdGltZVBlcmlvZDsNCisJCQlkb3VibGUgYWRqdXN0ZWRIb3N0U2Vjb25kYXJ5RGlzZWFzZURlYXRoUmF0ZTQzID0gaG9zdFNlY29uZGFyeURpc2Vhc2VEZWF0aFJhdGU0Mw0KKwkJCQkJKiAoZG91YmxlKSB0aW1lRGVsdGEgLyAoZG91YmxlKSB0aW1lUGVyaW9kOw0KKwkJCS8vIGRlZmluZSB0aGUgdHJhbnNpdGlvbiBiZXR3ZWVuIHRoZSBjb21wYXJ0bWVudHMNCisJCQlkb3VibGUgdG9FMSA9IGhvc3RJbmZlY3Rpdml0eTEgKiBhZGp1c3RlZEJpdGluZ1JhdGVJVg0KKwkJCQkJKiB2ZWN0b3IuZ2V0STEoKSAqIGhvc3QuZ2V0UygpIC8gaG9zdC5nZXRQb3B1bGF0aW9uQ291bnQoKTsNCisJCQlkb3VibGUgdG9FMiA9IGhvc3RJbmZlY3Rpdml0eTIgKiBhZGp1c3RlZEJpdGluZ1JhdGVJVg0KKwkJCQkJKiB2ZWN0b3IuZ2V0STIoKSAqIGhvc3QuZ2V0UygpIC8gaG9zdC5nZXRQb3B1bGF0aW9uQ291bnQoKTsNCisJCQlkb3VibGUgdG9FMyA9IGhvc3RJbmZlY3Rpdml0eTMgKiBhZGp1c3RlZEJpdGluZ1JhdGVJVg0KKwkJCQkJKiB2ZWN0b3IuZ2V0STMoKSAqIGhvc3QuZ2V0UygpIC8gaG9zdC5nZXRQb3B1bGF0aW9uQ291bnQoKTsNCisJCQlkb3VibGUgdG9FNCA9IGhvc3RJbmZlY3Rpdml0eTQgKiBhZGp1c3RlZEJpdGluZ1JhdGVJVg0KKwkJCQkJKiB2ZWN0b3IuZ2V0STQoKSAqIGhvc3QuZ2V0UygpIC8gaG9zdC5nZXRQb3B1bGF0aW9uQ291bnQoKTsNCisNCisJCQlkb3VibGUgdG9JMSA9IGFkanVzdGVkSG9zdFByaW1hcnlJbmN1YmF0aW9uUmF0ZTEgKiBob3N0LmdldEUxKCk7DQorCQkJZG91YmxlIHRvSTIgPSBhZGp1c3RlZEhvc3RQcmltYXJ5SW5jdWJhdGlvblJhdGUyICogaG9zdC5nZXRFMigpOw0KKwkJCWRvdWJsZSB0b0kzID0gYWRqdXN0ZWRIb3N0UHJpbWFyeUluY3ViYXRpb25SYXRlMyAqIGhvc3QuZ2V0RTMoKTsNCisJCQlkb3VibGUgdG9JNCA9IGFkanVzdGVkSG9zdFByaW1hcnlJbmN1YmF0aW9uUmF0ZTQgKiBob3N0LmdldEU0KCk7DQorDQorCQkJZG91YmxlIHRvVDEgPSBhZGp1c3RlZEhvc3RQcmltYXJ5UmVjb3ZlcnlSYXRlMSAqIGhvc3QuZ2V0STEoKTsNCisJCQlkb3VibGUgdG9UMiA9IGFkanVzdGVkSG9zdFByaW1hcnlSZWNvdmVyeVJhdGUyICogaG9zdC5nZXRJMigpOw0KKwkJCWRvdWJsZSB0b1QzID0gYWRqdXN0ZWRIb3N0UHJpbWFyeVJlY292ZXJ5UmF0ZTMgKiBob3N0LmdldEkzKCk7DQorCQkJZG91YmxlIHRvVDQgPSBhZGp1c3RlZEhvc3RQcmltYXJ5UmVjb3ZlcnlSYXRlNCAqIGhvc3QuZ2V0STQoKTsNCisNCisJCQlkb3VibGUgdG9SMSA9IGFkanVzdGVkSG9zdFByaW1hcnlJbW11bml0eUxvc3NSYXRlMSAqIGhvc3QuZ2V0VDEoKTsNCisJCQlkb3VibGUgdG9SMiA9IGFkanVzdGVkSG9zdFByaW1hcnlJbW11bml0eUxvc3NSYXRlMiAqIGhvc3QuZ2V0VDIoKTsNCisJCQlkb3VibGUgdG9SMyA9IGFkanVzdGVkSG9zdFByaW1hcnlJbW11bml0eUxvc3NSYXRlMyAqIGhvc3QuZ2V0VDMoKTsNCisJCQlkb3VibGUgdG9SNCA9IGFkanVzdGVkSG9zdFByaW1hcnlJbW11bml0eUxvc3NSYXRlNCAqIGhvc3QuZ2V0VDQoKTsNCisNCisJCQlkb3VibGUgdG9FMTIgPSBob3N0QURFMTIgKiBob3N0SW5mZWN0aXZpdHkyICogYWRqdXN0ZWRCaXRpbmdSYXRlSVYNCisJCQkJCSogdmVjdG9yLmdldEkyKCkgKiBob3N0LmdldFIxKCkgLyBob3N0LmdldFBvcHVsYXRpb25Db3VudCgpOw0KKwkJCWRvdWJsZSB0b0UxMyA9IGhvc3RBREUxMyAqIGhvc3RJbmZlY3Rpdml0eTMgKiBhZGp1c3RlZEJpdGluZ1JhdGVJVg0KKwkJCQkJKiB2ZWN0b3IuZ2V0STMoKSAqIGhvc3QuZ2V0UjEoKSAvIGhvc3QuZ2V0UG9wdWxhdGlvbkNvdW50KCk7DQorCQkJZG91YmxlIHRvRTE0ID0gaG9zdEFERTE0ICogaG9zdEluZmVjdGl2aXR5NCAqIGFkanVzdGVkQml0aW5nUmF0ZUlWDQorCQkJCQkqIHZlY3Rvci5nZXRJNCgpICogaG9zdC5nZXRSMSgpIC8gaG9zdC5nZXRQb3B1bGF0aW9uQ291bnQoKTsNCisJCQlkb3VibGUgdG9FMjEgPSBob3N0QURFMjEgKiBob3N0SW5mZWN0aXZpdHkxICogYWRqdXN0ZWRCaXRpbmdSYXRlSVYNCisJCQkJCSogdmVjdG9yLmdldEkxKCkgKiBob3N0LmdldFIyKCkgLyBob3N0LmdldFBvcHVsYXRpb25Db3VudCgpOw0KKwkJCWRvdWJsZSB0b0UyMyA9IGhvc3RBREUyMyAqIGhvc3RJbmZlY3Rpdml0eTMgKiBhZGp1c3RlZEJpdGluZ1JhdGVJVg0KKwkJCQkJKiB2ZWN0b3IuZ2V0STMoKSAqIGhvc3QuZ2V0UjIoKSAvIGhvc3QuZ2V0UG9wdWxhdGlvbkNvdW50KCk7DQorCQkJZG91YmxlIHRvRTI0ID0gaG9zdEFERTI0ICogaG9zdEluZmVjdGl2aXR5NCAqIGFkanVzdGVkQml0aW5nUmF0ZUlWDQorCQkJCQkqIHZlY3Rvci5nZXRJNCgpICogaG9zdC5nZXRSMigpIC8gaG9zdC5nZXRQb3B1bGF0aW9uQ291bnQoKTsNCisJCQlkb3VibGUgdG9FMzEgPSBob3N0QURFMzEgKiBob3N0SW5mZWN0aXZpdHkxICogYWRqdXN0ZWRCaXRpbmdSYXRlSVYNCisJCQkJCSogdmVjdG9yLmdldEkxKCkgKiBob3N0LmdldFIzKCkgLyBob3N0LmdldFBvcHVsYXRpb25Db3VudCgpOw0KKwkJCWRvdWJsZSB0b0UzMiA9IGhvc3RBREUzMiAqIGhvc3RJbmZlY3Rpdml0eTIgKiBhZGp1c3RlZEJpdGluZ1JhdGVJVg0KKwkJCQkJKiB2ZWN0b3IuZ2V0STIoKSAqIGhvc3QuZ2V0UjMoKSAvIGhvc3QuZ2V0UG9wdWxhdGlvbkNvdW50KCk7DQorCQkJZG91YmxlIHRvRTM0ID0gaG9zdEFERTM0ICogaG9zdEluZmVjdGl2aXR5NCAqIGFkanVzdGVkQml0aW5nUmF0ZUlWDQorCQkJCQkqIHZlY3Rvci5nZXRJNCgpICogaG9zdC5nZXRSMygpIC8gaG9zdC5nZXRQb3B1bGF0aW9uQ291bnQoKTsNCisJCQlkb3VibGUgdG9FNDEgPSBob3N0QURFNDEgKiBob3N0SW5mZWN0aXZpdHkxICogYWRqdXN0ZWRCaXRpbmdSYXRlSVYNCisJCQkJCSogdmVjdG9yLmdldEkxKCkgKiBob3N0LmdldFI0KCkgLyBob3N0LmdldFBvcHVsYXRpb25Db3VudCgpOw0KKwkJCWRvdWJsZSB0b0U0MiA9IGhvc3RBREU0MiAqIGhvc3RJbmZlY3Rpdml0eTIgKiBhZGp1c3RlZEJpdGluZ1JhdGVJVg0KKwkJCQkJKiB2ZWN0b3IuZ2V0STIoKSAqIGhvc3QuZ2V0UjQoKSAvIGhvc3QuZ2V0UG9wdWxhdGlvbkNvdW50KCk7DQorCQkJZG91YmxlIHRvRTQzID0gaG9zdEFERTQzICogaG9zdEluZmVjdGl2aXR5MyAqIGFkanVzdGVkQml0aW5nUmF0ZUlWDQorCQkJCQkqIHZlY3Rvci5nZXRJMygpICogaG9zdC5nZXRSNCgpIC8gaG9zdC5nZXRQb3B1bGF0aW9uQ291bnQoKTsNCisNCisJCQlkb3VibGUgdG9JMTIgPSBhZGp1c3RlZEhvc3RTZWNvbmRhcnlJbmN1YmF0aW9uUmF0ZTEyDQorCQkJCQkqIGhvc3QuZ2V0RTEyKCk7DQorCQkJZG91YmxlIHRvSTEzID0gYWRqdXN0ZWRIb3N0U2Vjb25kYXJ5SW5jdWJhdGlvblJhdGUxMw0KKwkJCQkJKiBob3N0LmdldEUxMygpOw0KKwkJCWRvdWJsZSB0b0kxNCA9IGFkanVzdGVkSG9zdFNlY29uZGFyeUluY3ViYXRpb25SYXRlMTQNCisJCQkJCSogaG9zdC5nZXRFMTQoKTsNCisJCQlkb3VibGUgdG9JMjEgPSBhZGp1c3RlZEhvc3RTZWNvbmRhcnlJbmN1YmF0aW9uUmF0ZTIxDQorCQkJCQkqIGhvc3QuZ2V0RTIxKCk7DQorCQkJZG91YmxlIHRvSTIzID0gYWRqdXN0ZWRIb3N0U2Vjb25kYXJ5SW5jdWJhdGlvblJhdGUyMw0KKwkJCQkJKiBob3N0LmdldEUyMygpOw0KKwkJCWRvdWJsZSB0b0kyNCA9IGFkanVzdGVkSG9zdFNlY29uZGFyeUluY3ViYXRpb25SYXRlMjQNCisJCQkJCSogaG9zdC5nZXRFMjQoKTsNCisJCQlkb3VibGUgdG9JMzEgPSBhZGp1c3RlZEhvc3RTZWNvbmRhcnlJbmN1YmF0aW9uUmF0ZTMxDQorCQkJCQkqIGhvc3QuZ2V0RTMxKCk7DQorCQkJZG91YmxlIHRvSTMyID0gYWRqdXN0ZWRIb3N0U2Vjb25kYXJ5SW5jdWJhdGlvblJhdGUzMg0KKwkJCQkJKiBob3N0LmdldEUzMigpOw0KKwkJCWRvdWJsZSB0b0kzNCA9IGFkanVzdGVkSG9zdFNlY29uZGFyeUluY3ViYXRpb25SYXRlMzQNCisJCQkJCSogaG9zdC5nZXRFMzQoKTsNCisJCQlkb3VibGUgdG9JNDEgPSBhZGp1c3RlZEhvc3RTZWNvbmRhcnlJbmN1YmF0aW9uUmF0ZTQxDQorCQkJCQkqIGhvc3QuZ2V0RTQxKCk7DQorCQkJZG91YmxlIHRvSTQyID0gYWRqdXN0ZWRIb3N0U2Vjb25kYXJ5SW5jdWJhdGlvblJhdGU0Mg0KKwkJCQkJKiBob3N0LmdldEU0MigpOw0KKwkJCWRvdWJsZSB0b0k0MyA9IGFkanVzdGVkSG9zdFNlY29uZGFyeUluY3ViYXRpb25SYXRlNDMNCisJCQkJCSogaG9zdC5nZXRFNDMoKTsNCisNCisJCQlkb3VibGUgdG9SMTIgPSBhZGp1c3RlZEhvc3RTZWNvbmRhcnlSZWNvdmVyeVJhdGUxMiAqIGhvc3QuZ2V0STEyKCk7DQorCQkJZG91YmxlIHRvUjEzID0gYWRqdXN0ZWRIb3N0U2Vjb25kYXJ5UmVjb3ZlcnlSYXRlMTMgKiBob3N0LmdldEkxMygpOw0KKwkJCWRvdWJsZSB0b1IxNCA9IGFkanVzdGVkSG9zdFNlY29uZGFyeVJlY292ZXJ5UmF0ZTE0ICogaG9zdC5nZXRJMTQoKTsNCisJCQlkb3VibGUgdG9SMjEgPSBhZGp1c3RlZEhvc3RTZWNvbmRhcnlSZWNvdmVyeVJhdGUyMSAqIGhvc3QuZ2V0STIxKCk7DQorCQkJZG91YmxlIHRvUjIzID0gYWRqdXN0ZWRIb3N0U2Vjb25kYXJ5UmVjb3ZlcnlSYXRlMjMgKiBob3N0LmdldEkyMygpOw0KKwkJCWRvdWJsZSB0b1IyNCA9IGFkanVzdGVkSG9zdFNlY29uZGFyeVJlY292ZXJ5UmF0ZTI0ICogaG9zdC5nZXRJMjQoKTsNCisJCQlkb3VibGUgdG9SMzEgPSBhZGp1c3RlZEhvc3RTZWNvbmRhcnlSZWNvdmVyeVJhdGUzMSAqIGhvc3QuZ2V0STMxKCk7DQorCQkJZG91YmxlIHRvUjMyID0gYWRqdXN0ZWRIb3N0U2Vjb25kYXJ5UmVjb3ZlcnlSYXRlMzIgKiBob3N0LmdldEkzMigpOw0KKwkJCWRvdWJsZSB0b1IzNCA9IGFkanVzdGVkSG9zdFNlY29uZGFyeVJlY292ZXJ5UmF0ZTM0ICogaG9zdC5nZXRJMzQoKTsNCisJCQlkb3VibGUgdG9SNDEgPSBhZGp1c3RlZEhvc3RTZWNvbmRhcnlSZWNvdmVyeVJhdGU0MSAqIGhvc3QuZ2V0STQxKCk7DQorCQkJZG91YmxlIHRvUjQyID0gYWRqdXN0ZWRIb3N0U2Vjb25kYXJ5UmVjb3ZlcnlSYXRlNDIgKiBob3N0LmdldEk0MigpOw0KKwkJCWRvdWJsZSB0b1I0MyA9IGFkanVzdGVkSG9zdFNlY29uZGFyeVJlY292ZXJ5UmF0ZTQzICogaG9zdC5nZXRJNDMoKTsNCisNCisJCQlkb3VibGUgZGVhdGhzSTEgPSBhZGp1c3RlZEhvc3RQcmltYXJ5RGlzZWFzZURlYXRoUmF0ZTENCisJCQkJCSogaG9zdC5nZXRJMSgpOw0KKwkJCWRvdWJsZSBkZWF0aHNJMiA9IGFkanVzdGVkSG9zdFByaW1hcnlEaXNlYXNlRGVhdGhSYXRlMg0KKwkJCQkJKiBob3N0LmdldEkyKCk7DQorCQkJZG91YmxlIGRlYXRoc0kzID0gYWRqdXN0ZWRIb3N0UHJpbWFyeURpc2Vhc2VEZWF0aFJhdGUzDQorCQkJCQkqIGhvc3QuZ2V0STMoKTsNCisJCQlkb3VibGUgZGVhdGhzSTQgPSBhZGp1c3RlZEhvc3RQcmltYXJ5RGlzZWFzZURlYXRoUmF0ZTQNCisJCQkJCSogaG9zdC5nZXRJNCgpOw0KKw0KKwkJCWRvdWJsZSBkZWF0aHNJMTIgPSBhZGp1c3RlZEhvc3RTZWNvbmRhcnlEaXNlYXNlRGVhdGhSYXRlMTINCisJCQkJCSogaG9zdC5nZXRJMTIoKTsNCisJCQlkb3VibGUgZGVhdGhzSTEzID0gYWRqdXN0ZWRIb3N0U2Vjb25kYXJ5RGlzZWFzZURlYXRoUmF0ZTEzDQorCQkJCQkqIGhvc3QuZ2V0STEzKCk7DQorCQkJZG91YmxlIGRlYXRoc0kxNCA9IGFkanVzdGVkSG9zdFNlY29uZGFyeURpc2Vhc2VEZWF0aFJhdGUxNA0KKwkJCQkJKiBob3N0LmdldEkxNCgpOw0KKwkJCWRvdWJsZSBkZWF0aHNJMjEgPSBhZGp1c3RlZEhvc3RTZWNvbmRhcnlEaXNlYXNlRGVhdGhSYXRlMjENCisJCQkJCSogaG9zdC5nZXRJMjEoKTsNCisJCQlkb3VibGUgZGVhdGhzSTIzID0gYWRqdXN0ZWRIb3N0U2Vjb25kYXJ5RGlzZWFzZURlYXRoUmF0ZTIzDQorCQkJCQkqIGhvc3QuZ2V0STIzKCk7DQorCQkJZG91YmxlIGRlYXRoc0kyNCA9IGFkanVzdGVkSG9zdFNlY29uZGFyeURpc2Vhc2VEZWF0aFJhdGUyNA0KKwkJCQkJKiBob3N0LmdldEkyNCgpOw0KKwkJCWRvdWJsZSBkZWF0aHNJMzEgPSBhZGp1c3RlZEhvc3RTZWNvbmRhcnlEaXNlYXNlRGVhdGhSYXRlMzENCisJCQkJCSogaG9zdC5nZXRJMzEoKTsNCisJCQlkb3VibGUgZGVhdGhzSTMyID0gYWRqdXN0ZWRIb3N0U2Vjb25kYXJ5RGlzZWFzZURlYXRoUmF0ZTMyDQorCQkJCQkqIGhvc3QuZ2V0STMyKCk7DQorCQkJZG91YmxlIGRlYXRoc0kzNCA9IGFkanVzdGVkSG9zdFNlY29uZGFyeURpc2Vhc2VEZWF0aFJhdGUzNA0KKwkJCQkJKiBob3N0LmdldEkzNCgpOw0KKwkJCWRvdWJsZSBkZWF0aHNJNDEgPSBhZGp1c3RlZEhvc3RTZWNvbmRhcnlEaXNlYXNlRGVhdGhSYXRlNDENCisJCQkJCSogaG9zdC5nZXRJNDEoKTsNCisJCQlkb3VibGUgZGVhdGhzSTQyID0gYWRqdXN0ZWRIb3N0U2Vjb25kYXJ5RGlzZWFzZURlYXRoUmF0ZTQyDQorCQkJCQkqIGhvc3QuZ2V0STQyKCk7DQorCQkJZG91YmxlIGRlYXRoc0k0MyA9IGFkanVzdGVkSG9zdFNlY29uZGFyeURpc2Vhc2VEZWF0aFJhdGU0Mw0KKwkJCQkJKiBob3N0LmdldEk0MygpOw0KKw0KKwkJCWhvc3REZWx0YS5zZXRTKC10b0UxIC0gdG9FMiAtIHRvRTMgLSB0b0U0KTsNCisNCisJCQlob3N0RGVsdGEuc2V0RTEodG9FMSAtIHRvSTEpOw0KKwkJCWhvc3REZWx0YS5zZXRFMih0b0UyIC0gdG9JMik7DQorCQkJaG9zdERlbHRhLnNldEUzKHRvRTMgLSB0b0kzKTsNCisJCQlob3N0RGVsdGEuc2V0RTQodG9FNCAtIHRvSTQpOw0KKw0KKwkJCWhvc3REZWx0YS5zZXRJMSh0b0kxIC0gdG9UMSAtIGRlYXRoc0kxKTsNCisJCQlob3N0RGVsdGEuc2V0STIodG9JMiAtIHRvVDIgLSBkZWF0aHNJMik7DQorCQkJaG9zdERlbHRhLnNldEkzKHRvSTMgLSB0b1QzIC0gZGVhdGhzSTMpOw0KKwkJCWhvc3REZWx0YS5zZXRJNCh0b0k0IC0gdG9UNCAtIGRlYXRoc0k0KTsNCisNCisJCQlob3N0RGVsdGEuc2V0VDEodG9UMSAtIHRvUjEpOw0KKwkJCWhvc3REZWx0YS5zZXRUMih0b1QyIC0gdG9SMik7DQorCQkJaG9zdERlbHRhLnNldFQzKHRvVDMgLSB0b1IzKTsNCisJCQlob3N0RGVsdGEuc2V0VDQodG9UNCAtIHRvUjQpOw0KKw0KKwkJCWhvc3REZWx0YS5zZXRSMSh0b1IxIC0gdG9FMTIgLSB0b0UxMyAtIHRvRTE0KTsNCisJCQlob3N0RGVsdGEuc2V0UjIodG9SMiAtIHRvRTIxIC0gdG9FMjMgLSB0b0UyNCk7DQorCQkJaG9zdERlbHRhLnNldFIzKHRvUjMgLSB0b0UzMSAtIHRvRTMyIC0gdG9FMzQpOw0KKwkJCWhvc3REZWx0YS5zZXRSNCh0b1I0IC0gdG9FNDEgLSB0b0U0MiAtIHRvRTQzKTsNCisNCisJCQlob3N0RGVsdGEuc2V0RTEyKHRvRTEyIC0gdG9JMTIpOw0KKwkJCWhvc3REZWx0YS5zZXRFMTModG9FMTMgLSB0b0kxMyk7DQorCQkJaG9zdERlbHRhLnNldEUxNCh0b0UxNCAtIHRvSTE0KTsNCisJCQlob3N0RGVsdGEuc2V0RTIxKHRvRTIxIC0gdG9JMjEpOw0KKwkJCWhvc3REZWx0YS5zZXRFMjModG9FMjMgLSB0b0kyMyk7DQorCQkJaG9zdERlbHRhLnNldEUyNCh0b0UyNCAtIHRvSTI0KTsNCisJCQlob3N0RGVsdGEuc2V0RTMxKHRvRTMxIC0gdG9JMzEpOw0KKwkJCWhvc3REZWx0YS5zZXRFMzIodG9FMzIgLSB0b0kzMik7DQorCQkJaG9zdERlbHRhLnNldEUzNCh0b0UzNCAtIHRvSTM0KTsNCisJCQlob3N0RGVsdGEuc2V0RTQxKHRvRTQxIC0gdG9JNDEpOw0KKwkJCWhvc3REZWx0YS5zZXRFNDIodG9FNDIgLSB0b0k0Mik7DQorCQkJaG9zdERlbHRhLnNldEU0Myh0b0U0MyAtIHRvSTQzKTsNCisNCisJCQlob3N0RGVsdGEuc2V0STEyKHRvSTEyIC0gdG9SMTIpOw0KKwkJCWhvc3REZWx0YS5zZXRJMTModG9JMTMgLSB0b1IxMyk7DQorCQkJaG9zdERlbHRhLnNldEkxNCh0b0kxNCAtIHRvUjE0KTsNCisJCQlob3N0RGVsdGEuc2V0STIxKHRvSTIxIC0gdG9SMjEpOw0KKwkJCWhvc3REZWx0YS5zZXRJMjModG9JMjMgLSB0b1IyMyk7DQorCQkJaG9zdERlbHRhLnNldEkyNCh0b0kyNCAtIHRvUjI0KTsNCisJCQlob3N0RGVsdGEuc2V0STMxKHRvSTMxIC0gdG9SMzEpOw0KKwkJCWhvc3REZWx0YS5zZXRJMzIodG9JMzIgLSB0b1IzMik7DQorCQkJaG9zdERlbHRhLnNldEkzNCh0b0kzNCAtIHRvUjM0KTsNCisJCQlob3N0RGVsdGEuc2V0STQxKHRvSTQxIC0gdG9SNDEpOw0KKwkJCWhvc3REZWx0YS5zZXRJNDIodG9JNDIgLSB0b1I0Mik7DQorCQkJaG9zdERlbHRhLnNldEk0Myh0b0k0MyAtIHRvUjQzKTsNCisNCisJCQlob3N0RGVsdGEuc2V0Uih0b1IxMiArIHRvUjEzICsgdG9SMTQgKyB0b1IyMSArIHRvUjIzICsgdG9SMjQNCisJCQkJCSsgdG9SMzEgKyB0b1IzMiArIHRvUjM0ICsgdG9SNDEgKyB0b1I0MiArIHRvUjQzKTsNCisNCisJCQlob3N0RGVsdGEuc2V0SW5jaWRlbmNlMSh0b0UxKTsNCisJCQlob3N0RGVsdGEuc2V0SW5jaWRlbmNlMih0b0UyKTsNCisJCQlob3N0RGVsdGEuc2V0SW5jaWRlbmNlMyh0b0UzKTsNCisJCQlob3N0RGVsdGEuc2V0SW5jaWRlbmNlNCh0b0U0KTsNCisNCisJCQlob3N0RGVsdGEuc2V0SW5jaWRlbmNlMTIodG9FMTIpOw0KKwkJCWhvc3REZWx0YS5zZXRJbmNpZGVuY2UxMyh0b0UxMyk7DQorCQkJaG9zdERlbHRhLnNldEluY2lkZW5jZTE0KHRvRTE0KTsNCisJCQlob3N0RGVsdGEuc2V0SW5jaWRlbmNlMjEodG9FMjEpOw0KKwkJCWhvc3REZWx0YS5zZXRJbmNpZGVuY2UyMyh0b0UyMyk7DQorCQkJaG9zdERlbHRhLnNldEluY2lkZW5jZTI0KHRvRTI0KTsNCisJCQlob3N0RGVsdGEuc2V0SW5jaWRlbmNlMzEodG9FMzEpOw0KKwkJCWhvc3REZWx0YS5zZXRJbmNpZGVuY2UzMih0b0UzMik7DQorCQkJaG9zdERlbHRhLnNldEluY2lkZW5jZTM0KHRvRTM0KTsNCisJCQlob3N0RGVsdGEuc2V0SW5jaWRlbmNlNDEodG9FNDEpOw0KKwkJCWhvc3REZWx0YS5zZXRJbmNpZGVuY2U0Mih0b0U0Mik7DQorCQkJaG9zdERlbHRhLnNldEluY2lkZW5jZTQzKHRvRTQzKTsNCisNCisJCQlob3N0RGVsdGEuc2V0SW5jaWRlbmNlKHRvRTEgKyB0b0UyICsgdG9FMyArIHRvRTQgKyB0b0UxMiArIHRvRTEzDQorCQkJCQkrIHRvRTE0ICsgdG9FMjEgKyB0b0UyMyArIHRvRTI0ICsgdG9FMzEgKyB0b0UzMiArIHRvRTM0DQorCQkJCQkrIHRvRTQxICsgdG9FNDIgKyB0b0U0Myk7DQorDQorCQkJaG9zdERlbHRhLnNldERpc2Vhc2VEZWF0aHMxKGRlYXRoc0kxKTsNCisJCQlob3N0RGVsdGEuc2V0RGlzZWFzZURlYXRoczIoZGVhdGhzSTIpOw0KKwkJCWhvc3REZWx0YS5zZXREaXNlYXNlRGVhdGhzMyhkZWF0aHNJMyk7DQorCQkJaG9zdERlbHRhLnNldERpc2Vhc2VEZWF0aHM0KGRlYXRoc0k0KTsNCisNCisJCQlob3N0RGVsdGEuc2V0RGlzZWFzZURlYXRoczEyKGRlYXRoc0kxMik7DQorCQkJaG9zdERlbHRhLnNldERpc2Vhc2VEZWF0aHMxMyhkZWF0aHNJMTMpOw0KKwkJCWhvc3REZWx0YS5zZXREaXNlYXNlRGVhdGhzMTQoZGVhdGhzSTE0KTsNCisJCQlob3N0RGVsdGEuc2V0RGlzZWFzZURlYXRoczIxKGRlYXRoc0kyMSk7DQorCQkJaG9zdERlbHRhLnNldERpc2Vhc2VEZWF0aHMyMyhkZWF0aHNJMjMpOw0KKwkJCWhvc3REZWx0YS5zZXREaXNlYXNlRGVhdGhzMjQoZGVhdGhzSTI0KTsNCisJCQlob3N0RGVsdGEuc2V0RGlzZWFzZURlYXRoczMxKGRlYXRoc0kzMSk7DQorCQkJaG9zdERlbHRhLnNldERpc2Vhc2VEZWF0aHMzMihkZWF0aHNJMzIpOw0KKwkJCWhvc3REZWx0YS5zZXREaXNlYXNlRGVhdGhzMzQoZGVhdGhzSTM0KTsNCisJCQlob3N0RGVsdGEuc2V0RGlzZWFzZURlYXRoczQxKGRlYXRoc0k0MSk7DQorCQkJaG9zdERlbHRhLnNldERpc2Vhc2VEZWF0aHM0MihkZWF0aHNJNDIpOw0KKwkJCWhvc3REZWx0YS5zZXREaXNlYXNlRGVhdGhzNDMoZGVhdGhzSTQzKTsNCisNCisJCQlob3N0RGVsdGEuc2V0RGlzZWFzZURlYXRocyhkZWF0aHNJMSArIGRlYXRoc0kyICsgZGVhdGhzSTMNCisJCQkJCSsgZGVhdGhzSTQgKyBkZWF0aHNJMTIgKyBkZWF0aHNJMTMgKyBkZWF0aHNJMTQgKyBkZWF0aHNJMjENCisJCQkJCSsgZGVhdGhzSTIzICsgZGVhdGhzSTI0ICsgZGVhdGhzSTMxICsgZGVhdGhzSTMyICsgZGVhdGhzSTM0DQorCQkJCQkrIGRlYXRoc0k0MSArIGRlYXRoc0k0MiArIGRlYXRoc0k0Myk7DQorDQorCQkJcmV0dXJuIGhvc3REZWx0YTsNCisJCX0NCisJCS8vIGVsc2UgaWYgdGhlIGN1cnJlbnQgcG9wdWxhdGlvbiBpcyB2ZWN0b3IgcG9wdWxhdGlvbg0KKwkJZWxzZSBpZiAoZGlzZWFzZUxhYmVsIGluc3RhbmNlb2YgRGVuZ3VlTW9kZWxWZWN0b3JMYWJlbCkgew0KKwkJCURlbmd1ZU1vZGVsVmVjdG9yTGFiZWxWYWx1ZSB2ZWN0b3JEZWx0YSA9IChEZW5ndWVNb2RlbFZlY3RvckxhYmVsVmFsdWUpIHJldHVyblZhbHVlOw0KKwkJCURlbmd1ZU1vZGVsVmVjdG9yTGFiZWxWYWx1ZSB2ZWN0b3IgPSAoRGVuZ3VlTW9kZWxWZWN0b3JMYWJlbFZhbHVlKSBjdXJyZW50U3RhdGU7DQorDQorCQkJaWYgKHZlY3Rvci5nZXRQb3B1bGF0aW9uQ291bnQoKSA9PSAwLjApIHsNCisJCQkJdmVjdG9yRGVsdGEucmVzZXQoKTsNCisJCQkJcmV0dXJuIHZlY3RvckRlbHRhOw0KKwkJCX0NCisNCisJCQlEZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlIGhvc3QgPSBudWxsOw0KKwkJCURlbmd1ZU1vZGVsSG9zdExhYmVsIGhvc3RMYWJlbCA9IG51bGw7DQorCQkJRUxpc3Q8Tm9kZUxhYmVsPiBhbGxMYWJlbHMgPSBkaXNlYXNlTGFiZWwuZ2V0Tm9kZSgpLmdldExhYmVscygpOw0KKw0KKwkJCWZvciAoTm9kZUxhYmVsIGxhYmVsIDogYWxsTGFiZWxzKSB7DQorCQkJCWlmIChsYWJlbCBpbnN0YW5jZW9mIERlbmd1ZU1vZGVsSG9zdExhYmVsKSB7DQorCQkJCQlob3N0TGFiZWwgPSAoRGVuZ3VlTW9kZWxIb3N0TGFiZWwpIGxhYmVsOw0KKw0KKwkJCQkJaWYgKGhvc3RMYWJlbC5nZXREZWNvcmF0b3IoKSA9PSB0aGlzKSB7DQorCQkJCQkJaG9zdCA9IChEZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlKSBob3N0TGFiZWwNCisJCQkJCQkJCS5nZXRUZW1wVmFsdWUoKTsNCisJCQkJCX0NCisJCQkJfQ0KKwkJCX0NCisNCisJCQlkb3VibGUgYWRqdXN0ZWRCaXRpbmdSYXRlU1YgPSBiaXRpbmdSYXRlU1YgKiAoZG91YmxlKSB0aW1lRGVsdGENCisJCQkJCS8gKGRvdWJsZSkgdGltZVBlcmlvZDsNCisNCisJCQlkb3VibGUgYWRqdXN0ZWRWZWN0b3JJbmN1YmF0aW9uUmF0ZTEgPSB2ZWN0b3JJbmN1YmF0aW9uUmF0ZTENCisJCQkJCSogKGRvdWJsZSkgdGltZURlbHRhIC8gKGRvdWJsZSkgdGltZVBlcmlvZDsNCisJCQlkb3VibGUgYWRqdXN0ZWRWZWN0b3JJbmN1YmF0aW9uUmF0ZTIgPSB2ZWN0b3JJbmN1YmF0aW9uUmF0ZTINCisJCQkJCSogKGRvdWJsZSkgdGltZURlbHRhIC8gKGRvdWJsZSkgdGltZVBlcmlvZDsNCisJCQlkb3VibGUgYWRqdXN0ZWRWZWN0b3JJbmN1YmF0aW9uUmF0ZTMgPSB2ZWN0b3JJbmN1YmF0aW9uUmF0ZTMNCisJCQkJCSogKGRvdWJsZSkgdGltZURlbHRhIC8gKGRvdWJsZSkgdGltZVBlcmlvZDsNCisJCQlkb3VibGUgYWRqdXN0ZWRWZWN0b3JJbmN1YmF0aW9uUmF0ZTQgPSB2ZWN0b3JJbmN1YmF0aW9uUmF0ZTQNCisJCQkJCSogKGRvdWJsZSkgdGltZURlbHRhIC8gKGRvdWJsZSkgdGltZVBlcmlvZDsNCisNCisJCQlkb3VibGUgdG9FMSA9IDAuMDsNCisJCQlkb3VibGUgdG9FMiA9IDAuMDsNCisJCQlkb3VibGUgdG9FMyA9IDAuMDsNCisJCQlkb3VibGUgdG9FNCA9IDAuMDsNCisNCisJCQlOb2RlIHRoaXNOb2RlID0gZGlzZWFzZUxhYmVsLmdldE5vZGUoKTsNCisJCQlkb3VibGUgZWZmZWN0aXZlSTEgPSBnZXROb3JtYWxpemVkRWZmZWN0aXZlSW5mZWN0aW91cyh0aGlzTm9kZSwgaG9zdExhYmVsLCAgaG9zdC5nZXRJMSgpLCBWZWN0b3JQYWNrYWdlLkxpdGVyYWxzLkRFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19JMSk7DQorCQkJZG91YmxlIGVmZmVjdGl2ZUkyMSA9IGdldE5vcm1hbGl6ZWRFZmZlY3RpdmVJbmZlY3Rpb3VzKHRoaXNOb2RlLCBob3N0TGFiZWwsICBob3N0LmdldEkyMSgpLCBWZWN0b3JQYWNrYWdlLkxpdGVyYWxzLkRFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19JMjEpOw0KKwkJCWRvdWJsZSBlZmZlY3RpdmVJMzEgPSBnZXROb3JtYWxpemVkRWZmZWN0aXZlSW5mZWN0aW91cyh0aGlzTm9kZSwgaG9zdExhYmVsLCAgaG9zdC5nZXRJMzEoKSwgVmVjdG9yUGFja2FnZS5MaXRlcmFscy5ERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fSTMxKTsNCisJCQlkb3VibGUgZWZmZWN0aXZlSTQxID0gZ2V0Tm9ybWFsaXplZEVmZmVjdGl2ZUluZmVjdGlvdXModGhpc05vZGUsIGhvc3RMYWJlbCwgIGhvc3QuZ2V0STQxKCksIFZlY3RvclBhY2thZ2UuTGl0ZXJhbHMuREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0k0MSk7DQorCQkJDQorCQkJZG91YmxlIGVmZmVjdGl2ZUkyID0gZ2V0Tm9ybWFsaXplZEVmZmVjdGl2ZUluZmVjdGlvdXModGhpc05vZGUsIGhvc3RMYWJlbCwgIGhvc3QuZ2V0STIoKSwgVmVjdG9yUGFja2FnZS5MaXRlcmFscy5ERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fSTIpOw0KKwkJCWRvdWJsZSBlZmZlY3RpdmVJMTIgPSBnZXROb3JtYWxpemVkRWZmZWN0aXZlSW5mZWN0aW91cyh0aGlzTm9kZSwgaG9zdExhYmVsLCAgaG9zdC5nZXRJMTIoKSwgVmVjdG9yUGFja2FnZS5MaXRlcmFscy5ERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fSTEyKTsNCisJCQlkb3VibGUgZWZmZWN0aXZlSTMyID0gZ2V0Tm9ybWFsaXplZEVmZmVjdGl2ZUluZmVjdGlvdXModGhpc05vZGUsIGhvc3RMYWJlbCwgIGhvc3QuZ2V0STMyKCksIFZlY3RvclBhY2thZ2UuTGl0ZXJhbHMuREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0kzMik7DQorCQkJZG91YmxlIGVmZmVjdGl2ZUk0MiA9IGdldE5vcm1hbGl6ZWRFZmZlY3RpdmVJbmZlY3Rpb3VzKHRoaXNOb2RlLCBob3N0TGFiZWwsICBob3N0LmdldEk0MigpLCBWZWN0b3JQYWNrYWdlLkxpdGVyYWxzLkRFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19JNDIpOw0KKwkJCQ0KKwkJCWRvdWJsZSBlZmZlY3RpdmVJMyA9IGdldE5vcm1hbGl6ZWRFZmZlY3RpdmVJbmZlY3Rpb3VzKHRoaXNOb2RlLCBob3N0TGFiZWwsICBob3N0LmdldEkzKCksIFZlY3RvclBhY2thZ2UuTGl0ZXJhbHMuREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0kzKTsNCisJCQlkb3VibGUgZWZmZWN0aXZlSTEzID0gZ2V0Tm9ybWFsaXplZEVmZmVjdGl2ZUluZmVjdGlvdXModGhpc05vZGUsIGhvc3RMYWJlbCwgIGhvc3QuZ2V0STEzKCksIFZlY3RvclBhY2thZ2UuTGl0ZXJhbHMuREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0kxMyk7DQorCQkJZG91YmxlIGVmZmVjdGl2ZUkyMyA9IGdldE5vcm1hbGl6ZWRFZmZlY3RpdmVJbmZlY3Rpb3VzKHRoaXNOb2RlLCBob3N0TGFiZWwsICBob3N0LmdldEkyMygpLCBWZWN0b3JQYWNrYWdlLkxpdGVyYWxzLkRFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19JMjMpOw0KKwkJCWRvdWJsZSBlZmZlY3RpdmVJNDMgPSBnZXROb3JtYWxpemVkRWZmZWN0aXZlSW5mZWN0aW91cyh0aGlzTm9kZSwgaG9zdExhYmVsLCAgaG9zdC5nZXRJNDMoKSwgVmVjdG9yUGFja2FnZS5MaXRlcmFscy5ERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fSTQzKTsNCisJCQkNCisJCQlkb3VibGUgZWZmZWN0aXZlSTQgPSBnZXROb3JtYWxpemVkRWZmZWN0aXZlSW5mZWN0aW91cyh0aGlzTm9kZSwgaG9zdExhYmVsLCAgaG9zdC5nZXRJNCgpLCBWZWN0b3JQYWNrYWdlLkxpdGVyYWxzLkRFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19JNCk7DQorCQkJZG91YmxlIGVmZmVjdGl2ZUkxNCA9IGdldE5vcm1hbGl6ZWRFZmZlY3RpdmVJbmZlY3Rpb3VzKHRoaXNOb2RlLCBob3N0TGFiZWwsICBob3N0LmdldEkxNCgpLCBWZWN0b3JQYWNrYWdlLkxpdGVyYWxzLkRFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19JMTQpOw0KKwkJCWRvdWJsZSBlZmZlY3RpdmVJMjQgPSBnZXROb3JtYWxpemVkRWZmZWN0aXZlSW5mZWN0aW91cyh0aGlzTm9kZSwgaG9zdExhYmVsLCAgaG9zdC5nZXRJMjQoKSwgVmVjdG9yUGFja2FnZS5MaXRlcmFscy5ERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fSTI0KTsNCisJCQlkb3VibGUgZWZmZWN0aXZlSTM0ID0gZ2V0Tm9ybWFsaXplZEVmZmVjdGl2ZUluZmVjdGlvdXModGhpc05vZGUsIGhvc3RMYWJlbCwgIGhvc3QuZ2V0STM0KCksIFZlY3RvclBhY2thZ2UuTGl0ZXJhbHMuREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0kzNCk7DQorCQkJDQorCQkJDQorCQkJLy8gaW5jbHVkZSBhbGwgcHJpbWFyeSBhbmQgc2Vjb25kYXJ5IGluZmVjdGlvdXMgY29tcGFydG1lbnRzIG9mIGhvc3QNCisJCQlpZiAoaG9zdC5nZXRQb3B1bGF0aW9uQ291bnQoKSAhPSAwLjApIHsNCisJCQkJdG9FMSA9IHZlY3RvckluZmVjdGl2aXR5MSAqIGFkanVzdGVkQml0aW5nUmF0ZVNWICogZWZmZWN0aXZlSTENCisJCQkJCQkqIHZlY3Rvci5nZXRTKCkgLyBob3N0LmdldFBvcHVsYXRpb25Db3VudCgpOw0KKwkJCQl0b0UxICs9IHZlY3RvckluZmVjdGl2aXR5MSAqIGFkanVzdGVkQml0aW5nUmF0ZVNWICogdmVjdG9yQURFMQ0KKwkJCQkJCSogKGVmZmVjdGl2ZUkyMSArIGVmZmVjdGl2ZUkzMSArIGVmZmVjdGl2ZUk0MSkNCisJCQkJCQkqIHZlY3Rvci5nZXRTKCkgLyBob3N0LmdldFBvcHVsYXRpb25Db3VudCgpOw0KKwkJCQl0b0UyID0gdmVjdG9ySW5mZWN0aXZpdHkyICogYWRqdXN0ZWRCaXRpbmdSYXRlU1YgKiBlZmZlY3RpdmVJMg0KKwkJCQkJCSogdmVjdG9yLmdldFMoKSAvIGhvc3QuZ2V0UG9wdWxhdGlvbkNvdW50KCk7DQorCQkJCXRvRTIgKz0gdmVjdG9ySW5mZWN0aXZpdHkyICogYWRqdXN0ZWRCaXRpbmdSYXRlU1YgKiB2ZWN0b3JBREUyDQorCQkJCQkJKiAoZWZmZWN0aXZlSTEyICsgZWZmZWN0aXZlSTMyICsgZWZmZWN0aXZlSTQyKQ0KKwkJCQkJCSogdmVjdG9yLmdldFMoKSAvIGhvc3QuZ2V0UG9wdWxhdGlvbkNvdW50KCk7DQorCQkJCXRvRTMgPSB2ZWN0b3JJbmZlY3Rpdml0eTMgKiBhZGp1c3RlZEJpdGluZ1JhdGVTViAqIGVmZmVjdGl2ZUkzDQorCQkJCQkJKiB2ZWN0b3IuZ2V0UygpIC8gaG9zdC5nZXRQb3B1bGF0aW9uQ291bnQoKTsNCisJCQkJdG9FMyArPSB2ZWN0b3JJbmZlY3Rpdml0eTMgKiBhZGp1c3RlZEJpdGluZ1JhdGVTViAqIHZlY3RvckFERTMNCisJCQkJCQkqIChlZmZlY3RpdmVJMTMgKyBlZmZlY3RpdmVJMjMgKyBlZmZlY3RpdmVJNDMpDQorCQkJCQkJKiB2ZWN0b3IuZ2V0UygpIC8gaG9zdC5nZXRQb3B1bGF0aW9uQ291bnQoKTsNCisJCQkJdG9FNCA9IHZlY3RvckluZmVjdGl2aXR5NCAqIGFkanVzdGVkQml0aW5nUmF0ZVNWICogZWZmZWN0aXZlSTQNCisJCQkJCQkqIHZlY3Rvci5nZXRTKCkgLyBob3N0LmdldFBvcHVsYXRpb25Db3VudCgpOw0KKwkJCQl0b0U0ICs9IHZlY3RvckluZmVjdGl2aXR5NCAqIGFkanVzdGVkQml0aW5nUmF0ZVNWICogdmVjdG9yQURFNA0KKwkJCQkJCSogKGVmZmVjdGl2ZUkxNCArIGVmZmVjdGl2ZUkyNCArIGVmZmVjdGl2ZUkzNCkNCisJCQkJCQkqIHZlY3Rvci5nZXRTKCkgLyBob3N0LmdldFBvcHVsYXRpb25Db3VudCgpOw0KKwkJCX0NCisNCisJCQlkb3VibGUgdG9JMSA9IGFkanVzdGVkVmVjdG9ySW5jdWJhdGlvblJhdGUxICogdmVjdG9yLmdldEUxKCk7DQorCQkJZG91YmxlIHRvSTIgPSBhZGp1c3RlZFZlY3RvckluY3ViYXRpb25SYXRlMiAqIHZlY3Rvci5nZXRFMigpOw0KKwkJCWRvdWJsZSB0b0kzID0gYWRqdXN0ZWRWZWN0b3JJbmN1YmF0aW9uUmF0ZTMgKiB2ZWN0b3IuZ2V0RTMoKTsNCisJCQlkb3VibGUgdG9JNCA9IGFkanVzdGVkVmVjdG9ySW5jdWJhdGlvblJhdGU0ICogdmVjdG9yLmdldEU0KCk7DQorDQorCQkJdmVjdG9yRGVsdGEuc2V0UygtdG9FMSAtIHRvRTIgLSB0b0UzIC0gdG9FNCk7DQorDQorCQkJdmVjdG9yRGVsdGEuc2V0RTEodG9FMSAtIHRvSTEpOw0KKwkJCXZlY3RvckRlbHRhLnNldEUyKHRvRTIgLSB0b0kyKTsNCisJCQl2ZWN0b3JEZWx0YS5zZXRFMyh0b0UzIC0gdG9JMyk7DQorCQkJdmVjdG9yRGVsdGEuc2V0RTQodG9FNCAtIHRvSTQpOw0KKw0KKwkJCXZlY3RvckRlbHRhLnNldEkxKHRvSTEpOw0KKwkJCXZlY3RvckRlbHRhLnNldEkyKHRvSTIpOw0KKwkJCXZlY3RvckRlbHRhLnNldEkzKHRvSTMpOw0KKwkJCXZlY3RvckRlbHRhLnNldEk0KHRvSTQpOw0KKw0KKwkJCXZlY3RvckRlbHRhLnNldEluY2lkZW5jZTEodG9FMSk7DQorCQkJdmVjdG9yRGVsdGEuc2V0SW5jaWRlbmNlMih0b0UyKTsNCisJCQl2ZWN0b3JEZWx0YS5zZXRJbmNpZGVuY2UzKHRvRTMpOw0KKwkJCXZlY3RvckRlbHRhLnNldEluY2lkZW5jZTQodG9FNCk7DQorDQorCQkJdmVjdG9yRGVsdGEuc2V0SW5jaWRlbmNlKHRvRTEgKyB0b0UyICsgdG9FMyArIHRvRTQpOw0KKwkJCXZlY3RvckRlbHRhLnNldERpc2Vhc2VEZWF0aHMoMC4wKTsNCisNCisJCQlyZXR1cm4gdmVjdG9yRGVsdGE7DQorCQl9DQorDQorCQlyZXR1cm4gbnVsbDsNCisJfQ0KKw0KKwlAT3ZlcnJpZGUNCisJcHVibGljIERpc2Vhc2VNb2RlbExhYmVsIGNyZWF0ZURpc2Vhc2VNb2RlbExhYmVsKFN0cmluZyBwb3B1bGF0aW9uSWRlbnRpZmllcikgew0KKwkJaWYgKHBvcHVsYXRpb25JZGVudGlmaWVyLmVxdWFscyh2ZWN0b3JQb3B1bGF0aW9uSWRlbnRpZmllcikpIHsNCisJCQlyZXR1cm4gVmVjdG9yRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlRGVuZ3VlTW9kZWxWZWN0b3JMYWJlbCgpOw0KKwkJfSBlbHNlIHsNCisJCQlyZXR1cm4gVmVjdG9yRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlRGVuZ3VlTW9kZWxIb3N0TGFiZWwoKTsNCisJCX0NCisJfQ0KKw0KKwlAT3ZlcnJpZGUNCisJcHVibGljIERpc2Vhc2VNb2RlbExhYmVsVmFsdWUgY3JlYXRlRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZSgNCisJCQlTdHJpbmcgcG9wdWxhdGlvbklkZW50aWZpZXIpIHsNCisJCWlmIChwb3B1bGF0aW9uSWRlbnRpZmllci5lcXVhbHModmVjdG9yUG9wdWxhdGlvbklkZW50aWZpZXIpKSB7DQorCQkJcmV0dXJuIFZlY3RvckZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZURlbmd1ZU1vZGVsVmVjdG9yTGFiZWxWYWx1ZSgpOw0KKwkJfSBlbHNlIHsNCisJCQlyZXR1cm4gVmVjdG9yRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZSgpOw0KKwkJfQ0KKwl9DQorDQorCUBPdmVycmlkZQ0KKwlwdWJsaWMgSW5mZWN0b3IgY3JlYXRlSW5mZWN0b3IoKSB7DQorCQlTSUluZmVjdG9yIHJldFZhbHVlID0gU3RhbmRhcmRGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVTSUluZmVjdG9yKCk7DQorDQorCQlyZXRWYWx1ZS5zZXREaXNlYXNlTmFtZShnZXREaXNlYXNlTmFtZSgpKTsNCisJCXJldFZhbHVlLnNldFBvcHVsYXRpb25JZGVudGlmaWVyKGdldFBvcHVsYXRpb25JZGVudGlmaWVyKCkpOw0KKwkJcmV0dXJuIHJldFZhbHVlOw0KKwl9DQorDQorCUBPdmVycmlkZQ0KKwlwdWJsaWMgdm9pZCBkb01vZGVsU3BlY2lmaWNBZGp1c3RtZW50cyhMYWJlbFZhbHVlIGN1cnJlbnRTdGF0ZSkgew0KKwkJLy8gRG8gbm90aGluZw0KKwl9DQorDQorfSAvLyBEZW5ndWVNb2RlbEltcGwNCmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3Ivc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy92ZWN0b3IvaW1wbC9EZW5ndWVNb2RlbFZlY3RvckxhYmVsSW1wbC5qYXZhIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvdmVjdG9yL2ltcGwvRGVuZ3VlTW9kZWxWZWN0b3JMYWJlbEltcGwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZTQzYTEzCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvdmVjdG9yL2ltcGwvRGVuZ3VlTW9kZWxWZWN0b3JMYWJlbEltcGwuamF2YQpAQCAtMCwwICsxLDUyIEBACisvKioNCisgKiA8Y29weXJpZ2h0Pg0KKyAqIDwvY29weXJpZ2h0Pg0KKyAqDQorICogJElkJA0KKyAqLw0KK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5pbXBsOw0KKw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOw0KKw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmRGYWN0b3J5Ow0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuaW1wbC5TdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsSW1wbDsNCisNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbFZlY3RvckxhYmVsOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLlZlY3RvckZhY3Rvcnk7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuVmVjdG9yUGFja2FnZTsNCisNCisvKioNCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKyAqIEFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5EZW5ndWUgTW9kZWwgVmVjdG9yIExhYmVsPC9iPjwvZW0+Jy4NCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisgKiA8cD4NCisgKiA8L3A+DQorICoNCisgKiBAZ2VuZXJhdGVkDQorICovDQorcHVibGljIGNsYXNzIERlbmd1ZU1vZGVsVmVjdG9yTGFiZWxJbXBsIGV4dGVuZHMgU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbEltcGwgaW1wbGVtZW50cyBEZW5ndWVNb2RlbFZlY3RvckxhYmVsIHsNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkIE5PVA0KKwkgKi8NCisJcHJvdGVjdGVkIERlbmd1ZU1vZGVsVmVjdG9yTGFiZWxJbXBsKCkgew0KKwkJc2V0Q3VycmVudFZhbHVlKFZlY3RvckZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZURlbmd1ZU1vZGVsVmVjdG9yTGFiZWxWYWx1ZSgpKTsNCisJCXNldE5leHRWYWx1ZShWZWN0b3JGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVEZW5ndWVNb2RlbFZlY3RvckxhYmVsVmFsdWUoKSk7DQorCQlzZXRUZW1wVmFsdWUoVmVjdG9yRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlRGVuZ3VlTW9kZWxWZWN0b3JMYWJlbFZhbHVlKCkpOw0KKwkJc2V0UHJvYmVWYWx1ZShWZWN0b3JGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVEZW5ndWVNb2RlbFZlY3RvckxhYmVsVmFsdWUoKSk7DQorCQlzZXRFcnJvclNjYWxlKFZlY3RvckZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZURlbmd1ZU1vZGVsVmVjdG9yTGFiZWxWYWx1ZSgpKTsNCisJCXNldERlbHRhVmFsdWUoVmVjdG9yRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlRGVuZ3VlTW9kZWxWZWN0b3JMYWJlbFZhbHVlKCkpOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJQE92ZXJyaWRlDQorCXByb3RlY3RlZCBFQ2xhc3MgZVN0YXRpY0NsYXNzKCkgew0KKwkJcmV0dXJuIFZlY3RvclBhY2thZ2UuTGl0ZXJhbHMuREVOR1VFX01PREVMX1ZFQ1RPUl9MQUJFTDsNCisJfQ0KKw0KK30gLy9EZW5ndWVNb2RlbFZlY3RvckxhYmVsSW1wbA0KZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3ZlY3Rvci9pbXBsL0Rlbmd1ZU1vZGVsVmVjdG9yTGFiZWxWYWx1ZUltcGwuamF2YSBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3ZlY3Rvci9pbXBsL0Rlbmd1ZU1vZGVsVmVjdG9yTGFiZWxWYWx1ZUltcGwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wOWMwODVmCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvdmVjdG9yL2ltcGwvRGVuZ3VlTW9kZWxWZWN0b3JMYWJlbFZhbHVlSW1wbC5qYXZhCkBAIC0wLDAgKzEsNzIxIEBACisvKioNCisgKiA8Y29weXJpZ2h0Pg0KKyAqIDwvY29weXJpZ2h0Pg0KKyAqDQorICogJElkJA0KKyAqLw0KK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5pbXBsOw0KKw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb247DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5pbXBsLkVOb3RpZmljYXRpb25JbXBsOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuaW1wbC5TdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsVmFsdWVJbXBsOw0KKw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLkRlbmd1ZU1vZGVsVmVjdG9yTGFiZWxWYWx1ZTsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5WZWN0b3JQYWNrYWdlOw0KKw0KKy8qKg0KKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IEFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJw0KKyAqIDxlbT48Yj5EZW5ndWUgTW9kZWwgVmVjdG9yIExhYmVsIFZhbHVlPC9iPjwvZW0+Jy4gPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorICogPHA+DQorICogVGhlIGZvbGxvd2luZyBmZWF0dXJlcyBhcmUgaW1wbGVtZW50ZWQ6DQorICogPHVsPg0KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLmltcGwuRGVuZ3VlTW9kZWxWZWN0b3JMYWJlbFZhbHVlSW1wbCNnZXRFMSA8ZW0+RTE8L2VtPn08L2xpPg0KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLmltcGwuRGVuZ3VlTW9kZWxWZWN0b3JMYWJlbFZhbHVlSW1wbCNnZXRFMiA8ZW0+RTI8L2VtPn08L2xpPg0KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLmltcGwuRGVuZ3VlTW9kZWxWZWN0b3JMYWJlbFZhbHVlSW1wbCNnZXRFMyA8ZW0+RTM8L2VtPn08L2xpPg0KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLmltcGwuRGVuZ3VlTW9kZWxWZWN0b3JMYWJlbFZhbHVlSW1wbCNnZXRFNCA8ZW0+RTQ8L2VtPn08L2xpPg0KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLmltcGwuRGVuZ3VlTW9kZWxWZWN0b3JMYWJlbFZhbHVlSW1wbCNnZXRJMSA8ZW0+STE8L2VtPn08L2xpPg0KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLmltcGwuRGVuZ3VlTW9kZWxWZWN0b3JMYWJlbFZhbHVlSW1wbCNnZXRJMiA8ZW0+STI8L2VtPn08L2xpPg0KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLmltcGwuRGVuZ3VlTW9kZWxWZWN0b3JMYWJlbFZhbHVlSW1wbCNnZXRJMyA8ZW0+STM8L2VtPn08L2xpPg0KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLmltcGwuRGVuZ3VlTW9kZWxWZWN0b3JMYWJlbFZhbHVlSW1wbCNnZXRJNCA8ZW0+STQ8L2VtPn08L2xpPg0KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLmltcGwuRGVuZ3VlTW9kZWxWZWN0b3JMYWJlbFZhbHVlSW1wbCNnZXRJbmNpZGVuY2UxIDxlbT5JbmNpZGVuY2UxPC9lbT59PC9saT4NCisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5pbXBsLkRlbmd1ZU1vZGVsVmVjdG9yTGFiZWxWYWx1ZUltcGwjZ2V0SW5jaWRlbmNlMiA8ZW0+SW5jaWRlbmNlMjwvZW0+fTwvbGk+DQorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuaW1wbC5EZW5ndWVNb2RlbFZlY3RvckxhYmVsVmFsdWVJbXBsI2dldEluY2lkZW5jZTMgPGVtPkluY2lkZW5jZTM8L2VtPn08L2xpPg0KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLmltcGwuRGVuZ3VlTW9kZWxWZWN0b3JMYWJlbFZhbHVlSW1wbCNnZXRJbmNpZGVuY2U0IDxlbT5JbmNpZGVuY2U0PC9lbT59PC9saT4NCisgKiA8L3VsPg0KKyAqIDwvcD4NCisgKg0KKyAqIEBnZW5lcmF0ZWQNCisgKi8NCitwdWJsaWMgY2xhc3MgRGVuZ3VlTW9kZWxWZWN0b3JMYWJlbFZhbHVlSW1wbCBleHRlbmRzDQorCQlTdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsVmFsdWVJbXBsIGltcGxlbWVudHMNCisJCURlbmd1ZU1vZGVsVmVjdG9yTGFiZWxWYWx1ZSB7DQorCS8qKg0KKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0RTEoKSA8ZW0+RTE8L2VtPn0nIGF0dHJpYnV0ZS4gPCEtLQ0KKwkgKiBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIA0KKwkgKiBAc2VlICNnZXRFMSgpDQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgZG91YmxlIEUxX0VERUZBVUxUID0gMC4wOw0KKw0KKwkvKioNCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0RTEoKSA8ZW0+RTE8L2VtPn0nIGF0dHJpYnV0ZS4gPCEtLQ0KKwkgKiBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIA0KKwkgKiBAc2VlICNnZXRFMSgpDQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCXByb3RlY3RlZCBkb3VibGUgZTEgPSBFMV9FREVGQVVMVDsNCisNCisJLyoqDQorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRFMigpIDxlbT5FMjwvZW0+fScgYXR0cmlidXRlLiA8IS0tDQorCSAqIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogDQorCSAqIEBzZWUgI2dldEUyKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBkb3VibGUgRTJfRURFRkFVTFQgPSAwLjA7DQorDQorCS8qKg0KKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRFMigpIDxlbT5FMjwvZW0+fScgYXR0cmlidXRlLiA8IS0tDQorCSAqIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogDQorCSAqIEBzZWUgI2dldEUyKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJcHJvdGVjdGVkIGRvdWJsZSBlMiA9IEUyX0VERUZBVUxUOw0KKw0KKwkvKioNCisJICogVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldEUzKCkgPGVtPkUzPC9lbT59JyBhdHRyaWJ1dGUuIDwhLS0NCisJICogYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiANCisJICogQHNlZSAjZ2V0RTMoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqIEBvcmRlcmVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIGRvdWJsZSBFM19FREVGQVVMVCA9IDAuMDsNCisNCisJLyoqDQorCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldEUzKCkgPGVtPkUzPC9lbT59JyBhdHRyaWJ1dGUuIDwhLS0NCisJICogYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiANCisJICogQHNlZSAjZ2V0RTMoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqIEBvcmRlcmVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgZG91YmxlIGUzID0gRTNfRURFRkFVTFQ7DQorDQorCS8qKg0KKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0RTQoKSA8ZW0+RTQ8L2VtPn0nIGF0dHJpYnV0ZS4gPCEtLQ0KKwkgKiBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIA0KKwkgKiBAc2VlICNnZXRFNCgpDQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgZG91YmxlIEU0X0VERUZBVUxUID0gMC4wOw0KKw0KKwkvKioNCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0RTQoKSA8ZW0+RTQ8L2VtPn0nIGF0dHJpYnV0ZS4gPCEtLQ0KKwkgKiBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIA0KKwkgKiBAc2VlICNnZXRFNCgpDQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCXByb3RlY3RlZCBkb3VibGUgZTQgPSBFNF9FREVGQVVMVDsNCisNCisJLyoqDQorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRJMSgpIDxlbT5JMTwvZW0+fScgYXR0cmlidXRlLiA8IS0tDQorCSAqIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogDQorCSAqIEBzZWUgI2dldEkxKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBkb3VibGUgSTFfRURFRkFVTFQgPSAwLjA7DQorDQorCS8qKg0KKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRJMSgpIDxlbT5JMTwvZW0+fScgYXR0cmlidXRlLiA8IS0tDQorCSAqIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogDQorCSAqIEBzZWUgI2dldEkxKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJcHJvdGVjdGVkIGRvdWJsZSBpMSA9IEkxX0VERUZBVUxUOw0KKw0KKwkvKioNCisJICogVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldEkyKCkgPGVtPkkyPC9lbT59JyBhdHRyaWJ1dGUuIDwhLS0NCisJICogYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiANCisJICogQHNlZSAjZ2V0STIoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqIEBvcmRlcmVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIGRvdWJsZSBJMl9FREVGQVVMVCA9IDAuMDsNCisNCisJLyoqDQorCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldEkyKCkgPGVtPkkyPC9lbT59JyBhdHRyaWJ1dGUuIDwhLS0NCisJICogYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiANCisJICogQHNlZSAjZ2V0STIoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqIEBvcmRlcmVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgZG91YmxlIGkyID0gSTJfRURFRkFVTFQ7DQorDQorCS8qKg0KKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0STMoKSA8ZW0+STM8L2VtPn0nIGF0dHJpYnV0ZS4gPCEtLQ0KKwkgKiBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIA0KKwkgKiBAc2VlICNnZXRJMygpDQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgZG91YmxlIEkzX0VERUZBVUxUID0gMC4wOw0KKw0KKwkvKioNCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0STMoKSA8ZW0+STM8L2VtPn0nIGF0dHJpYnV0ZS4gPCEtLQ0KKwkgKiBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIA0KKwkgKiBAc2VlICNnZXRJMygpDQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCXByb3RlY3RlZCBkb3VibGUgaTMgPSBJM19FREVGQVVMVDsNCisNCisJLyoqDQorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRJNCgpIDxlbT5JNDwvZW0+fScgYXR0cmlidXRlLiA8IS0tDQorCSAqIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogDQorCSAqIEBzZWUgI2dldEk0KCkNCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBkb3VibGUgSTRfRURFRkFVTFQgPSAwLjA7DQorDQorCS8qKg0KKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRJNCgpIDxlbT5JNDwvZW0+fScgYXR0cmlidXRlLiA8IS0tDQorCSAqIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogDQorCSAqIEBzZWUgI2dldEk0KCkNCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJcHJvdGVjdGVkIGRvdWJsZSBpNCA9IEk0X0VERUZBVUxUOw0KKw0KKwkvKioNCisJICogVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldEluY2lkZW5jZTEoKSA8ZW0+SW5jaWRlbmNlMTwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHNlZSAjZ2V0SW5jaWRlbmNlMSgpDQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgZG91YmxlIElOQ0lERU5DRTFfRURFRkFVTFQgPSAwLjA7DQorDQorCS8qKg0KKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRJbmNpZGVuY2UxKCkgPGVtPkluY2lkZW5jZTE8L2VtPn0nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBzZWUgI2dldEluY2lkZW5jZTEoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqIEBvcmRlcmVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgZG91YmxlIGluY2lkZW5jZTEgPSBJTkNJREVOQ0UxX0VERUZBVUxUOw0KKw0KKwkvKioNCisJICogVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldEluY2lkZW5jZTIoKSA8ZW0+SW5jaWRlbmNlMjwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHNlZSAjZ2V0SW5jaWRlbmNlMigpDQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgZG91YmxlIElOQ0lERU5DRTJfRURFRkFVTFQgPSAwLjA7DQorDQorCS8qKg0KKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRJbmNpZGVuY2UyKCkgPGVtPkluY2lkZW5jZTI8L2VtPn0nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBzZWUgI2dldEluY2lkZW5jZTIoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqIEBvcmRlcmVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgZG91YmxlIGluY2lkZW5jZTIgPSBJTkNJREVOQ0UyX0VERUZBVUxUOw0KKw0KKwkvKioNCisJICogVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldEluY2lkZW5jZTMoKSA8ZW0+SW5jaWRlbmNlMzwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHNlZSAjZ2V0SW5jaWRlbmNlMygpDQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgZG91YmxlIElOQ0lERU5DRTNfRURFRkFVTFQgPSAwLjA7DQorDQorCS8qKg0KKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRJbmNpZGVuY2UzKCkgPGVtPkluY2lkZW5jZTM8L2VtPn0nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBzZWUgI2dldEluY2lkZW5jZTMoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqIEBvcmRlcmVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgZG91YmxlIGluY2lkZW5jZTMgPSBJTkNJREVOQ0UzX0VERUZBVUxUOw0KKw0KKwkvKioNCisJICogVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldEluY2lkZW5jZTQoKSA8ZW0+SW5jaWRlbmNlNDwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHNlZSAjZ2V0SW5jaWRlbmNlNCgpDQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgZG91YmxlIElOQ0lERU5DRTRfRURFRkFVTFQgPSAwLjA7DQorDQorCS8qKg0KKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRJbmNpZGVuY2U0KCkgPGVtPkluY2lkZW5jZTQ8L2VtPn0nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBzZWUgI2dldEluY2lkZW5jZTQoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqIEBvcmRlcmVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgZG91YmxlIGluY2lkZW5jZTQgPSBJTkNJREVOQ0U0X0VERUZBVUxUOw0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCBEZW5ndWVNb2RlbFZlY3RvckxhYmVsVmFsdWVJbXBsKCkgew0KKwkJc3VwZXIoKTsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCUBPdmVycmlkZQ0KKwlwcm90ZWN0ZWQgRUNsYXNzIGVTdGF0aWNDbGFzcygpIHsNCisJCXJldHVybiBWZWN0b3JQYWNrYWdlLkxpdGVyYWxzLkRFTkdVRV9NT0RFTF9WRUNUT1JfTEFCRUxfVkFMVUU7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgZG91YmxlIGdldEUxKCkgew0KKwkJcmV0dXJuIGUxOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIHZvaWQgc2V0RTEoZG91YmxlIG5ld0UxKSB7DQorCQlkb3VibGUgb2xkRTEgPSBlMTsNCisJCWUxID0gbmV3RTE7DQorCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpDQorCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfVkVDVE9SX0xBQkVMX1ZBTFVFX19FMSwgb2xkRTEsIGUxKSk7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgZG91YmxlIGdldEUyKCkgew0KKwkJcmV0dXJuIGUyOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIHZvaWQgc2V0RTIoZG91YmxlIG5ld0UyKSB7DQorCQlkb3VibGUgb2xkRTIgPSBlMjsNCisJCWUyID0gbmV3RTI7DQorCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpDQorCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfVkVDVE9SX0xBQkVMX1ZBTFVFX19FMiwgb2xkRTIsIGUyKSk7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgZG91YmxlIGdldEUzKCkgew0KKwkJcmV0dXJuIGUzOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIHZvaWQgc2V0RTMoZG91YmxlIG5ld0UzKSB7DQorCQlkb3VibGUgb2xkRTMgPSBlMzsNCisJCWUzID0gbmV3RTM7DQorCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpDQorCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfVkVDVE9SX0xBQkVMX1ZBTFVFX19FMywgb2xkRTMsIGUzKSk7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgZG91YmxlIGdldEU0KCkgew0KKwkJcmV0dXJuIGU0Ow0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIHZvaWQgc2V0RTQoZG91YmxlIG5ld0U0KSB7DQorCQlkb3VibGUgb2xkRTQgPSBlNDsNCisJCWU0ID0gbmV3RTQ7DQorCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpDQorCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfVkVDVE9SX0xBQkVMX1ZBTFVFX19FNCwgb2xkRTQsIGU0KSk7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgZG91YmxlIGdldEkxKCkgew0KKwkJcmV0dXJuIGkxOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIHZvaWQgc2V0STEoZG91YmxlIG5ld0kxKSB7DQorCQlkb3VibGUgb2xkSTEgPSBpMTsNCisJCWkxID0gbmV3STE7DQorCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpDQorCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfVkVDVE9SX0xBQkVMX1ZBTFVFX19JMSwgb2xkSTEsIGkxKSk7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgZG91YmxlIGdldEkyKCkgew0KKwkJcmV0dXJuIGkyOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIHZvaWQgc2V0STIoZG91YmxlIG5ld0kyKSB7DQorCQlkb3VibGUgb2xkSTIgPSBpMjsNCisJCWkyID0gbmV3STI7DQorCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpDQorCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfVkVDVE9SX0xBQkVMX1ZBTFVFX19JMiwgb2xkSTIsIGkyKSk7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgZG91YmxlIGdldEkzKCkgew0KKwkJcmV0dXJuIGkzOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIHZvaWQgc2V0STMoZG91YmxlIG5ld0kzKSB7DQorCQlkb3VibGUgb2xkSTMgPSBpMzsNCisJCWkzID0gbmV3STM7DQorCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpDQorCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfVkVDVE9SX0xBQkVMX1ZBTFVFX19JMywgb2xkSTMsIGkzKSk7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgZG91YmxlIGdldEk0KCkgew0KKwkJcmV0dXJuIGk0Ow0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIHZvaWQgc2V0STQoZG91YmxlIG5ld0k0KSB7DQorCQlkb3VibGUgb2xkSTQgPSBpNDsNCisJCWk0ID0gbmV3STQ7DQorCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpDQorCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfVkVDVE9SX0xBQkVMX1ZBTFVFX19JNCwgb2xkSTQsIGk0KSk7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgZG91YmxlIGdldEluY2lkZW5jZTEoKSB7DQorCQlyZXR1cm4gaW5jaWRlbmNlMTsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyB2b2lkIHNldEluY2lkZW5jZTEoZG91YmxlIG5ld0luY2lkZW5jZTEpIHsNCisJCWRvdWJsZSBvbGRJbmNpZGVuY2UxID0gaW5jaWRlbmNlMTsNCisJCWluY2lkZW5jZTEgPSBuZXdJbmNpZGVuY2UxOw0KKwkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQ0KKwkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX1ZFQ1RPUl9MQUJFTF9WQUxVRV9fSU5DSURFTkNFMSwgb2xkSW5jaWRlbmNlMSwgaW5jaWRlbmNlMSkpOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIGRvdWJsZSBnZXRJbmNpZGVuY2UyKCkgew0KKwkJcmV0dXJuIGluY2lkZW5jZTI7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgdm9pZCBzZXRJbmNpZGVuY2UyKGRvdWJsZSBuZXdJbmNpZGVuY2UyKSB7DQorCQlkb3VibGUgb2xkSW5jaWRlbmNlMiA9IGluY2lkZW5jZTI7DQorCQlpbmNpZGVuY2UyID0gbmV3SW5jaWRlbmNlMjsNCisJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkNCisJCQllTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9WRUNUT1JfTEFCRUxfVkFMVUVfX0lOQ0lERU5DRTIsIG9sZEluY2lkZW5jZTIsIGluY2lkZW5jZTIpKTsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBkb3VibGUgZ2V0SW5jaWRlbmNlMygpIHsNCisJCXJldHVybiBpbmNpZGVuY2UzOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIHZvaWQgc2V0SW5jaWRlbmNlMyhkb3VibGUgbmV3SW5jaWRlbmNlMykgew0KKwkJZG91YmxlIG9sZEluY2lkZW5jZTMgPSBpbmNpZGVuY2UzOw0KKwkJaW5jaWRlbmNlMyA9IG5ld0luY2lkZW5jZTM7DQorCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpDQorCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfVkVDVE9SX0xBQkVMX1ZBTFVFX19JTkNJREVOQ0UzLCBvbGRJbmNpZGVuY2UzLCBpbmNpZGVuY2UzKSk7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgZG91YmxlIGdldEluY2lkZW5jZTQoKSB7DQorCQlyZXR1cm4gaW5jaWRlbmNlNDsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyB2b2lkIHNldEluY2lkZW5jZTQoZG91YmxlIG5ld0luY2lkZW5jZTQpIHsNCisJCWRvdWJsZSBvbGRJbmNpZGVuY2U0ID0gaW5jaWRlbmNlNDsNCisJCWluY2lkZW5jZTQgPSBuZXdJbmNpZGVuY2U0Ow0KKwkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQ0KKwkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX1ZFQ1RPUl9MQUJFTF9WQUxVRV9fSU5DSURFTkNFNCwgb2xkSW5jaWRlbmNlNCwgaW5jaWRlbmNlNCkpOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJQE92ZXJyaWRlDQorCXB1YmxpYyBPYmplY3QgZUdldChpbnQgZmVhdHVyZUlELCBib29sZWFuIHJlc29sdmUsIGJvb2xlYW4gY29yZVR5cGUpIHsNCisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9WRUNUT1JfTEFCRUxfVkFMVUVfX0UxOg0KKwkJCQlyZXR1cm4gZ2V0RTEoKTsNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX1ZFQ1RPUl9MQUJFTF9WQUxVRV9fRTI6DQorCQkJCXJldHVybiBnZXRFMigpOw0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfVkVDVE9SX0xBQkVMX1ZBTFVFX19FMzoNCisJCQkJcmV0dXJuIGdldEUzKCk7DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9WRUNUT1JfTEFCRUxfVkFMVUVfX0U0Og0KKwkJCQlyZXR1cm4gZ2V0RTQoKTsNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX1ZFQ1RPUl9MQUJFTF9WQUxVRV9fSTE6DQorCQkJCXJldHVybiBnZXRJMSgpOw0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfVkVDVE9SX0xBQkVMX1ZBTFVFX19JMjoNCisJCQkJcmV0dXJuIGdldEkyKCk7DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9WRUNUT1JfTEFCRUxfVkFMVUVfX0kzOg0KKwkJCQlyZXR1cm4gZ2V0STMoKTsNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX1ZFQ1RPUl9MQUJFTF9WQUxVRV9fSTQ6DQorCQkJCXJldHVybiBnZXRJNCgpOw0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfVkVDVE9SX0xBQkVMX1ZBTFVFX19JTkNJREVOQ0UxOg0KKwkJCQlyZXR1cm4gZ2V0SW5jaWRlbmNlMSgpOw0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfVkVDVE9SX0xBQkVMX1ZBTFVFX19JTkNJREVOQ0UyOg0KKwkJCQlyZXR1cm4gZ2V0SW5jaWRlbmNlMigpOw0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfVkVDVE9SX0xBQkVMX1ZBTFVFX19JTkNJREVOQ0UzOg0KKwkJCQlyZXR1cm4gZ2V0SW5jaWRlbmNlMygpOw0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfVkVDVE9SX0xBQkVMX1ZBTFVFX19JTkNJREVOQ0U0Og0KKwkJCQlyZXR1cm4gZ2V0SW5jaWRlbmNlNCgpOw0KKwkJfQ0KKwkJcmV0dXJuIHN1cGVyLmVHZXQoZmVhdHVyZUlELCByZXNvbHZlLCBjb3JlVHlwZSk7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlAT3ZlcnJpZGUNCisJcHVibGljIHZvaWQgZVNldChpbnQgZmVhdHVyZUlELCBPYmplY3QgbmV3VmFsdWUpIHsNCisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9WRUNUT1JfTEFCRUxfVkFMVUVfX0UxOg0KKwkJCQlzZXRFMSgoRG91YmxlKW5ld1ZhbHVlKTsNCisJCQkJcmV0dXJuOw0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfVkVDVE9SX0xBQkVMX1ZBTFVFX19FMjoNCisJCQkJc2V0RTIoKERvdWJsZSluZXdWYWx1ZSk7DQorCQkJCXJldHVybjsNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX1ZFQ1RPUl9MQUJFTF9WQUxVRV9fRTM6DQorCQkJCXNldEUzKChEb3VibGUpbmV3VmFsdWUpOw0KKwkJCQlyZXR1cm47DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9WRUNUT1JfTEFCRUxfVkFMVUVfX0U0Og0KKwkJCQlzZXRFNCgoRG91YmxlKW5ld1ZhbHVlKTsNCisJCQkJcmV0dXJuOw0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfVkVDVE9SX0xBQkVMX1ZBTFVFX19JMToNCisJCQkJc2V0STEoKERvdWJsZSluZXdWYWx1ZSk7DQorCQkJCXJldHVybjsNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX1ZFQ1RPUl9MQUJFTF9WQUxVRV9fSTI6DQorCQkJCXNldEkyKChEb3VibGUpbmV3VmFsdWUpOw0KKwkJCQlyZXR1cm47DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9WRUNUT1JfTEFCRUxfVkFMVUVfX0kzOg0KKwkJCQlzZXRJMygoRG91YmxlKW5ld1ZhbHVlKTsNCisJCQkJcmV0dXJuOw0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfVkVDVE9SX0xBQkVMX1ZBTFVFX19JNDoNCisJCQkJc2V0STQoKERvdWJsZSluZXdWYWx1ZSk7DQorCQkJCXJldHVybjsNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX1ZFQ1RPUl9MQUJFTF9WQUxVRV9fSU5DSURFTkNFMToNCisJCQkJc2V0SW5jaWRlbmNlMSgoRG91YmxlKW5ld1ZhbHVlKTsNCisJCQkJcmV0dXJuOw0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfVkVDVE9SX0xBQkVMX1ZBTFVFX19JTkNJREVOQ0UyOg0KKwkJCQlzZXRJbmNpZGVuY2UyKChEb3VibGUpbmV3VmFsdWUpOw0KKwkJCQlyZXR1cm47DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9WRUNUT1JfTEFCRUxfVkFMVUVfX0lOQ0lERU5DRTM6DQorCQkJCXNldEluY2lkZW5jZTMoKERvdWJsZSluZXdWYWx1ZSk7DQorCQkJCXJldHVybjsNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX1ZFQ1RPUl9MQUJFTF9WQUxVRV9fSU5DSURFTkNFNDoNCisJCQkJc2V0SW5jaWRlbmNlNCgoRG91YmxlKW5ld1ZhbHVlKTsNCisJCQkJcmV0dXJuOw0KKwkJfQ0KKwkJc3VwZXIuZVNldChmZWF0dXJlSUQsIG5ld1ZhbHVlKTsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCUBPdmVycmlkZQ0KKwlwdWJsaWMgdm9pZCBlVW5zZXQoaW50IGZlYXR1cmVJRCkgew0KKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX1ZFQ1RPUl9MQUJFTF9WQUxVRV9fRTE6DQorCQkJCXNldEUxKEUxX0VERUZBVUxUKTsNCisJCQkJcmV0dXJuOw0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfVkVDVE9SX0xBQkVMX1ZBTFVFX19FMjoNCisJCQkJc2V0RTIoRTJfRURFRkFVTFQpOw0KKwkJCQlyZXR1cm47DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9WRUNUT1JfTEFCRUxfVkFMVUVfX0UzOg0KKwkJCQlzZXRFMyhFM19FREVGQVVMVCk7DQorCQkJCXJldHVybjsNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX1ZFQ1RPUl9MQUJFTF9WQUxVRV9fRTQ6DQorCQkJCXNldEU0KEU0X0VERUZBVUxUKTsNCisJCQkJcmV0dXJuOw0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfVkVDVE9SX0xBQkVMX1ZBTFVFX19JMToNCisJCQkJc2V0STEoSTFfRURFRkFVTFQpOw0KKwkJCQlyZXR1cm47DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9WRUNUT1JfTEFCRUxfVkFMVUVfX0kyOg0KKwkJCQlzZXRJMihJMl9FREVGQVVMVCk7DQorCQkJCXJldHVybjsNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX1ZFQ1RPUl9MQUJFTF9WQUxVRV9fSTM6DQorCQkJCXNldEkzKEkzX0VERUZBVUxUKTsNCisJCQkJcmV0dXJuOw0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfVkVDVE9SX0xBQkVMX1ZBTFVFX19JNDoNCisJCQkJc2V0STQoSTRfRURFRkFVTFQpOw0KKwkJCQlyZXR1cm47DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9WRUNUT1JfTEFCRUxfVkFMVUVfX0lOQ0lERU5DRTE6DQorCQkJCXNldEluY2lkZW5jZTEoSU5DSURFTkNFMV9FREVGQVVMVCk7DQorCQkJCXJldHVybjsNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX1ZFQ1RPUl9MQUJFTF9WQUxVRV9fSU5DSURFTkNFMjoNCisJCQkJc2V0SW5jaWRlbmNlMihJTkNJREVOQ0UyX0VERUZBVUxUKTsNCisJCQkJcmV0dXJuOw0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfVkVDVE9SX0xBQkVMX1ZBTFVFX19JTkNJREVOQ0UzOg0KKwkJCQlzZXRJbmNpZGVuY2UzKElOQ0lERU5DRTNfRURFRkFVTFQpOw0KKwkJCQlyZXR1cm47DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9WRUNUT1JfTEFCRUxfVkFMVUVfX0lOQ0lERU5DRTQ6DQorCQkJCXNldEluY2lkZW5jZTQoSU5DSURFTkNFNF9FREVGQVVMVCk7DQorCQkJCXJldHVybjsNCisJCX0NCisJCXN1cGVyLmVVbnNldChmZWF0dXJlSUQpOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJQE92ZXJyaWRlDQorCXB1YmxpYyBib29sZWFuIGVJc1NldChpbnQgZmVhdHVyZUlEKSB7DQorCQlzd2l0Y2ggKGZlYXR1cmVJRCkgew0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfVkVDVE9SX0xBQkVMX1ZBTFVFX19FMToNCisJCQkJcmV0dXJuIGUxICE9IEUxX0VERUZBVUxUOw0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfVkVDVE9SX0xBQkVMX1ZBTFVFX19FMjoNCisJCQkJcmV0dXJuIGUyICE9IEUyX0VERUZBVUxUOw0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfVkVDVE9SX0xBQkVMX1ZBTFVFX19FMzoNCisJCQkJcmV0dXJuIGUzICE9IEUzX0VERUZBVUxUOw0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfVkVDVE9SX0xBQkVMX1ZBTFVFX19FNDoNCisJCQkJcmV0dXJuIGU0ICE9IEU0X0VERUZBVUxUOw0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfVkVDVE9SX0xBQkVMX1ZBTFVFX19JMToNCisJCQkJcmV0dXJuIGkxICE9IEkxX0VERUZBVUxUOw0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfVkVDVE9SX0xBQkVMX1ZBTFVFX19JMjoNCisJCQkJcmV0dXJuIGkyICE9IEkyX0VERUZBVUxUOw0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfVkVDVE9SX0xBQkVMX1ZBTFVFX19JMzoNCisJCQkJcmV0dXJuIGkzICE9IEkzX0VERUZBVUxUOw0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfVkVDVE9SX0xBQkVMX1ZBTFVFX19JNDoNCisJCQkJcmV0dXJuIGk0ICE9IEk0X0VERUZBVUxUOw0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfVkVDVE9SX0xBQkVMX1ZBTFVFX19JTkNJREVOQ0UxOg0KKwkJCQlyZXR1cm4gaW5jaWRlbmNlMSAhPSBJTkNJREVOQ0UxX0VERUZBVUxUOw0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfVkVDVE9SX0xBQkVMX1ZBTFVFX19JTkNJREVOQ0UyOg0KKwkJCQlyZXR1cm4gaW5jaWRlbmNlMiAhPSBJTkNJREVOQ0UyX0VERUZBVUxUOw0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfVkVDVE9SX0xBQkVMX1ZBTFVFX19JTkNJREVOQ0UzOg0KKwkJCQlyZXR1cm4gaW5jaWRlbmNlMyAhPSBJTkNJREVOQ0UzX0VERUZBVUxUOw0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfVkVDVE9SX0xBQkVMX1ZBTFVFX19JTkNJREVOQ0U0Og0KKwkJCQlyZXR1cm4gaW5jaWRlbmNlNCAhPSBJTkNJREVOQ0U0X0VERUZBVUxUOw0KKwkJfQ0KKwkJcmV0dXJuIHN1cGVyLmVJc1NldChmZWF0dXJlSUQpOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJQE92ZXJyaWRlDQorCXB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKSB7DQorCQlpZiAoZUlzUHJveHkoKSkgcmV0dXJuIHN1cGVyLnRvU3RyaW5nKCk7DQorDQorCQlTdHJpbmdCdWZmZXIgcmVzdWx0ID0gbmV3IFN0cmluZ0J1ZmZlcihzdXBlci50b1N0cmluZygpKTsNCisJCXJlc3VsdC5hcHBlbmQoIiAoRTE6ICIpOw0KKwkJcmVzdWx0LmFwcGVuZChlMSk7DQorCQlyZXN1bHQuYXBwZW5kKCIsIEUyOiAiKTsNCisJCXJlc3VsdC5hcHBlbmQoZTIpOw0KKwkJcmVzdWx0LmFwcGVuZCgiLCBFMzogIik7DQorCQlyZXN1bHQuYXBwZW5kKGUzKTsNCisJCXJlc3VsdC5hcHBlbmQoIiwgRTQ6ICIpOw0KKwkJcmVzdWx0LmFwcGVuZChlNCk7DQorCQlyZXN1bHQuYXBwZW5kKCIsIEkxOiAiKTsNCisJCXJlc3VsdC5hcHBlbmQoaTEpOw0KKwkJcmVzdWx0LmFwcGVuZCgiLCBJMjogIik7DQorCQlyZXN1bHQuYXBwZW5kKGkyKTsNCisJCXJlc3VsdC5hcHBlbmQoIiwgSTM6ICIpOw0KKwkJcmVzdWx0LmFwcGVuZChpMyk7DQorCQlyZXN1bHQuYXBwZW5kKCIsIEk0OiAiKTsNCisJCXJlc3VsdC5hcHBlbmQoaTQpOw0KKwkJcmVzdWx0LmFwcGVuZCgiLCBpbmNpZGVuY2UxOiAiKTsNCisJCXJlc3VsdC5hcHBlbmQoaW5jaWRlbmNlMSk7DQorCQlyZXN1bHQuYXBwZW5kKCIsIGluY2lkZW5jZTI6ICIpOw0KKwkJcmVzdWx0LmFwcGVuZChpbmNpZGVuY2UyKTsNCisJCXJlc3VsdC5hcHBlbmQoIiwgaW5jaWRlbmNlMzogIik7DQorCQlyZXN1bHQuYXBwZW5kKGluY2lkZW5jZTMpOw0KKwkJcmVzdWx0LmFwcGVuZCgiLCBpbmNpZGVuY2U0OiAiKTsNCisJCXJlc3VsdC5hcHBlbmQoaW5jaWRlbmNlNCk7DQorCQlyZXN1bHQuYXBwZW5kKCcpJyk7DQorCQlyZXR1cm4gcmVzdWx0LnRvU3RyaW5nKCk7DQorCX0NCisNCit9IC8vIERlbmd1ZU1vZGVsVmVjdG9yTGFiZWxWYWx1ZUltcGwNCmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3Ivc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy92ZWN0b3IvaW1wbC9NYWNkb25hbGRSb3NzRGlzZWFzZU1vZGVsSW1wbC5qYXZhIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvdmVjdG9yL2ltcGwvTWFjZG9uYWxkUm9zc0Rpc2Vhc2VNb2RlbEltcGwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZDQ5MWJjCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvdmVjdG9yL2ltcGwvTWFjZG9uYWxkUm9zc0Rpc2Vhc2VNb2RlbEltcGwuamF2YQpAQCAtMCwwICsxLDc1OSBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLmltcGw7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIAorICogQ29weXJpZ2h0IChjKSAyMDExIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiAKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdCAKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sIAorICogCisgKiBDb250cmlidXRvcnM6IAorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiAKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgamF2YS51dGlsLkNhbGVuZGFyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuRUxpc3Q7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzczsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuaW1wbC5FTm90aWZpY2F0aW9uSW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguRHluYW1pY0xhYmVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5MYWJlbFZhbHVlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5Ob2RlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5Ob2RlTGFiZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLlNURU1UaW1lOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLkVhcnRoU2NpZW5jZUxhYmVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5EaXNlYXNlTW9kZWxMYWJlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuSW5mZWN0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlNFSVJMYWJlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU0VJUkxhYmVsVmFsdWU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlNJSW5mZWN0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmRGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuQWN0aXZhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuTWFjZG9uYWxkUm9zc0Rpc2Vhc2VNb2RlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLlZlY3RvclBhY2thZ2U7CisKKy8qKgorICogVGhpcyBpcyB0aGUgdGV4dGJvb2sgTWFjZG9uYWxkLVJvc3MgdmVjdG9yIGJvcm5lIGRpc2Vhc2UgbW9kZWwuIFlvdSBjYW4gZmluZCBhIGRlc2NyaXB0aW9uIG9mIHRoZSBtb2RlbCBpbiBBbmRlcnNvbiAmIE1heSAiSW5mZWN0aW91cyBEaXNlYXNlcyBvZiBIdW1hbnMiLCBjaGFwdGVyIDE0LjQuCisgKiAgd2l0aCB0aGUgYWRkaXRpb24gb2YgYSBpbW11bmUgc3RhZ2UuCisgKiA8cD4KKyAqIFRoZSBmb2xsb3dpbmcgZmVhdHVyZXMgYXJlIGltcGxlbWVudGVkOgorICogPHVsPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuaW1wbC5NYWNkb25hbGRSb3NzRGlzZWFzZU1vZGVsSW1wbCNnZXRCaXRpbmdSYXRlIDxlbT5CaXRpbmcgUmF0ZTwvZW0+fTwvbGk+CisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5pbXBsLk1hY2RvbmFsZFJvc3NEaXNlYXNlTW9kZWxJbXBsI2dldEluZmVjdGlvdXNCaXRpbmdQcm9wb3J0aW9uSHVtYW4gPGVtPkluZmVjdGlvdXMgQml0aW5nIFByb3BvcnRpb24gSHVtYW48L2VtPn08L2xpPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuaW1wbC5NYWNkb25hbGRSb3NzRGlzZWFzZU1vZGVsSW1wbCNnZXRJbmZlY3Rpb3VzQml0aW5nUHJvcG9ydGlvblZlY3RvciA8ZW0+SW5mZWN0aW91cyBCaXRpbmcgUHJvcG9ydGlvbiBWZWN0b3I8L2VtPn08L2xpPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuaW1wbC5NYWNkb25hbGRSb3NzRGlzZWFzZU1vZGVsSW1wbCNnZXRSZWNvdmVyeVJhdGUgPGVtPlJlY292ZXJ5IFJhdGU8L2VtPn08L2xpPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuaW1wbC5NYWNkb25hbGRSb3NzRGlzZWFzZU1vZGVsSW1wbCNnZXRJbmN1YmF0aW9uUmF0ZSA8ZW0+SW5jdWJhdGlvbiBSYXRlPC9lbT59PC9saT4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLmltcGwuTWFjZG9uYWxkUm9zc0Rpc2Vhc2VNb2RlbEltcGwjZ2V0VmVjdG9ySW5jdWJhdGlvblJhdGUgPGVtPlZlY3RvciBJbmN1YmF0aW9uIFJhdGU8L2VtPn08L2xpPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuaW1wbC5NYWNkb25hbGRSb3NzRGlzZWFzZU1vZGVsSW1wbCNnZXRJbW11bml0eUxvc3NSYXRlIDxlbT5JbW11bml0eSBMb3NzIFJhdGU8L2VtPn08L2xpPgorICogPC91bD4KKyAqIDwvcD4KKyAqCisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBNYWNkb25hbGRSb3NzRGlzZWFzZU1vZGVsSW1wbCBleHRlbmRzIFZlY3RvckRpc2Vhc2VNb2RlbEltcGwgaW1wbGVtZW50cyBNYWNkb25hbGRSb3NzRGlzZWFzZU1vZGVsIHsKKwkKKwlmaW5hbCBzdGF0aWMgZG91YmxlIE1JU1NJTkdfREFUQSA9IDk5OTk5LjA7CisJCisJLyoqCisJICogVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldEJpdGluZ1JhdGUoKSA8ZW0+Qml0aW5nIFJhdGU8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI2dldEJpdGluZ1JhdGUoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgZG91YmxlIEJJVElOR19SQVRFX0VERUZBVUxUID0gMC41OworCS8qKgorCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldEJpdGluZ1JhdGUoKSA8ZW0+Qml0aW5nIFJhdGU8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI2dldEJpdGluZ1JhdGUoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBkb3VibGUgYml0aW5nUmF0ZSA9IEJJVElOR19SQVRFX0VERUZBVUxUOworCS8qKgorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRJbmZlY3Rpb3VzQml0aW5nUHJvcG9ydGlvbkh1bWFuKCkgPGVtPkluZmVjdGlvdXMgQml0aW5nIFByb3BvcnRpb24gSHVtYW48L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI2dldEluZmVjdGlvdXNCaXRpbmdQcm9wb3J0aW9uSHVtYW4oKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgZG91YmxlIElORkVDVElPVVNfQklUSU5HX1BST1BPUlRJT05fSFVNQU5fRURFRkFVTFQgPSAwLjU7CisJLyoqCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0SW5mZWN0aW91c0JpdGluZ1Byb3BvcnRpb25IdW1hbigpIDxlbT5JbmZlY3Rpb3VzIEJpdGluZyBQcm9wb3J0aW9uIEh1bWFuPC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNnZXRJbmZlY3Rpb3VzQml0aW5nUHJvcG9ydGlvbkh1bWFuKCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgZG91YmxlIGluZmVjdGlvdXNCaXRpbmdQcm9wb3J0aW9uSHVtYW4gPSBJTkZFQ1RJT1VTX0JJVElOR19QUk9QT1JUSU9OX0hVTUFOX0VERUZBVUxUOworCS8qKgorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRJbmZlY3Rpb3VzQml0aW5nUHJvcG9ydGlvblZlY3RvcigpIDxlbT5JbmZlY3Rpb3VzIEJpdGluZyBQcm9wb3J0aW9uIFZlY3RvcjwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZ2V0SW5mZWN0aW91c0JpdGluZ1Byb3BvcnRpb25WZWN0b3IoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgZG91YmxlIElORkVDVElPVVNfQklUSU5HX1BST1BPUlRJT05fVkVDVE9SX0VERUZBVUxUID0gMS4wOworCS8qKgorCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldEluZmVjdGlvdXNCaXRpbmdQcm9wb3J0aW9uVmVjdG9yKCkgPGVtPkluZmVjdGlvdXMgQml0aW5nIFByb3BvcnRpb24gVmVjdG9yPC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNnZXRJbmZlY3Rpb3VzQml0aW5nUHJvcG9ydGlvblZlY3RvcigpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIGRvdWJsZSBpbmZlY3Rpb3VzQml0aW5nUHJvcG9ydGlvblZlY3RvciA9IElORkVDVElPVVNfQklUSU5HX1BST1BPUlRJT05fVkVDVE9SX0VERUZBVUxUOworCS8qKgorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRSZWNvdmVyeVJhdGUoKSA8ZW0+UmVjb3ZlcnkgUmF0ZTwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZ2V0UmVjb3ZlcnlSYXRlKCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIGRvdWJsZSBSRUNPVkVSWV9SQVRFX0VERUZBVUxUID0gMC4wMDMzMzsKKwkvKioKKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRSZWNvdmVyeVJhdGUoKSA8ZW0+UmVjb3ZlcnkgUmF0ZTwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZ2V0UmVjb3ZlcnlSYXRlKCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgZG91YmxlIHJlY292ZXJ5UmF0ZSA9IFJFQ09WRVJZX1JBVEVfRURFRkFVTFQ7CisKKworCS8qKgorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRJbmN1YmF0aW9uUmF0ZSgpIDxlbT5JbmN1YmF0aW9uIFJhdGU8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI2dldEluY3ViYXRpb25SYXRlKCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIGRvdWJsZSBJTkNVQkFUSU9OX1JBVEVfRURFRkFVTFQgPSAwLjA2MjU7CisJLyoqCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0SW5jdWJhdGlvblJhdGUoKSA8ZW0+SW5jdWJhdGlvbiBSYXRlPC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNnZXRJbmN1YmF0aW9uUmF0ZSgpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIGRvdWJsZSBpbmN1YmF0aW9uUmF0ZSA9IElOQ1VCQVRJT05fUkFURV9FREVGQVVMVDsKKwkvKioKKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0VmVjdG9ySW5jdWJhdGlvblJhdGUoKSA8ZW0+VmVjdG9yIEluY3ViYXRpb24gUmF0ZTwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZ2V0VmVjdG9ySW5jdWJhdGlvblJhdGUoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgZG91YmxlIFZFQ1RPUl9JTkNVQkFUSU9OX1JBVEVfRURFRkFVTFQgPSAwLjE7CisJLyoqCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0VmVjdG9ySW5jdWJhdGlvblJhdGUoKSA8ZW0+VmVjdG9yIEluY3ViYXRpb24gUmF0ZTwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZ2V0VmVjdG9ySW5jdWJhdGlvblJhdGUoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBkb3VibGUgdmVjdG9ySW5jdWJhdGlvblJhdGUgPSBWRUNUT1JfSU5DVUJBVElPTl9SQVRFX0VERUZBVUxUOworCS8qKgorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRJbW11bml0eUxvc3NSYXRlKCkgPGVtPkltbXVuaXR5IExvc3MgUmF0ZTwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZ2V0SW1tdW5pdHlMb3NzUmF0ZSgpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBkb3VibGUgSU1NVU5JVFlfTE9TU19SQVRFX0VERUZBVUxUID0gMC4wMjsKKwkvKioKKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRJbW11bml0eUxvc3NSYXRlKCkgPGVtPkltbXVuaXR5IExvc3MgUmF0ZTwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZ2V0SW1tdW5pdHlMb3NzUmF0ZSgpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIGRvdWJsZSBpbW11bml0eUxvc3NSYXRlID0gSU1NVU5JVFlfTE9TU19SQVRFX0VERUZBVUxUOworCisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJcHVibGljIE1hY2RvbmFsZFJvc3NEaXNlYXNlTW9kZWxJbXBsKCkgeworCQlzdXBlcigpOworCX0KKworCQorCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLmltcGwuRGlzZWFzZU1vZGVsSW1wbCNjcmVhdGVJbmZlY3RvcigpCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIEluZmVjdG9yIGNyZWF0ZUluZmVjdG9yKCkgeworCQlTSUluZmVjdG9yIHJldFZhbHVlID0gU3RhbmRhcmRGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVTSUluZmVjdG9yKCk7CisJCXJldFZhbHVlLnNldERpc2Vhc2VOYW1lKHRoaXMuZ2V0RGlzZWFzZU5hbWUoKSk7CisJCXJldFZhbHVlLnNldFBvcHVsYXRpb25JZGVudGlmaWVyKGdldFBvcHVsYXRpb25JZGVudGlmaWVyKCkpOworCQlyZXR1cm4gcmV0VmFsdWU7CisJfSAvLyBjcmVhdGVJbmZlY3RvcgorCQorCUBPdmVycmlkZQorCXB1YmxpYyBEaXNlYXNlTW9kZWxMYWJlbFZhbHVlIGNyZWF0ZURpc2Vhc2VNb2RlbExhYmVsVmFsdWUoU3RyaW5nIHBvcHVsYXRpb25JZGVudGlmaWVyKSB7CisJCXJldHVybiBTdGFuZGFyZEZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZVNFSVJMYWJlbFZhbHVlKCk7CisJfSAvLyBjcmVhdGVEaXNlYXNlTW9kZWxMYWJlbFZhbHVlCisJCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuaW1wbC5EaXNlYXNlTW9kZWxJbXBsI2NyZWF0ZURpc2Vhc2VNb2RlbExhYmVsKCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgRGlzZWFzZU1vZGVsTGFiZWwgY3JlYXRlRGlzZWFzZU1vZGVsTGFiZWwoU3RyaW5nIHBvcHVsYXRpb25JZGVudGlmaWVyKSB7CisJCXJldHVybiBTdGFuZGFyZEZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZVNFSVJMYWJlbCgpOworCX0gLy8gY3JlYXRlRGlzZWFzZU1vZGVsTGFiZWwKKwkKKwkKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgRUNsYXNzIGVTdGF0aWNDbGFzcygpIHsKKwkJcmV0dXJuIFZlY3RvclBhY2thZ2UuTGl0ZXJhbHMuTUFDRE9OQUxEX1JPU1NfRElTRUFTRV9NT0RFTDsKKwl9CisKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBkb3VibGUgZ2V0Qml0aW5nUmF0ZSgpIHsKKwkJcmV0dXJuIGJpdGluZ1JhdGU7CisJfQorCisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRCaXRpbmdSYXRlKGRvdWJsZSBuZXdCaXRpbmdSYXRlKSB7CisJCWRvdWJsZSBvbGRCaXRpbmdSYXRlID0gYml0aW5nUmF0ZTsKKwkJYml0aW5nUmF0ZSA9IG5ld0JpdGluZ1JhdGU7CisJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkKKwkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIFZlY3RvclBhY2thZ2UuTUFDRE9OQUxEX1JPU1NfRElTRUFTRV9NT0RFTF9fQklUSU5HX1JBVEUsIG9sZEJpdGluZ1JhdGUsIGJpdGluZ1JhdGUpKTsKKwl9CisKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBkb3VibGUgZ2V0SW5mZWN0aW91c0JpdGluZ1Byb3BvcnRpb25IdW1hbigpIHsKKwkJcmV0dXJuIGluZmVjdGlvdXNCaXRpbmdQcm9wb3J0aW9uSHVtYW47CisJfQorCisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRJbmZlY3Rpb3VzQml0aW5nUHJvcG9ydGlvbkh1bWFuKGRvdWJsZSBuZXdJbmZlY3Rpb3VzQml0aW5nUHJvcG9ydGlvbkh1bWFuKSB7CisJCWRvdWJsZSBvbGRJbmZlY3Rpb3VzQml0aW5nUHJvcG9ydGlvbkh1bWFuID0gaW5mZWN0aW91c0JpdGluZ1Byb3BvcnRpb25IdW1hbjsKKwkJaW5mZWN0aW91c0JpdGluZ1Byb3BvcnRpb25IdW1hbiA9IG5ld0luZmVjdGlvdXNCaXRpbmdQcm9wb3J0aW9uSHVtYW47CisJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkKKwkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIFZlY3RvclBhY2thZ2UuTUFDRE9OQUxEX1JPU1NfRElTRUFTRV9NT0RFTF9fSU5GRUNUSU9VU19CSVRJTkdfUFJPUE9SVElPTl9IVU1BTiwgb2xkSW5mZWN0aW91c0JpdGluZ1Byb3BvcnRpb25IdW1hbiwgaW5mZWN0aW91c0JpdGluZ1Byb3BvcnRpb25IdW1hbikpOworCX0KKworCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIGRvdWJsZSBnZXRJbmZlY3Rpb3VzQml0aW5nUHJvcG9ydGlvblZlY3RvcigpIHsKKwkJcmV0dXJuIGluZmVjdGlvdXNCaXRpbmdQcm9wb3J0aW9uVmVjdG9yOworCX0KKworCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgc2V0SW5mZWN0aW91c0JpdGluZ1Byb3BvcnRpb25WZWN0b3IoZG91YmxlIG5ld0luZmVjdGlvdXNCaXRpbmdQcm9wb3J0aW9uVmVjdG9yKSB7CisJCWRvdWJsZSBvbGRJbmZlY3Rpb3VzQml0aW5nUHJvcG9ydGlvblZlY3RvciA9IGluZmVjdGlvdXNCaXRpbmdQcm9wb3J0aW9uVmVjdG9yOworCQlpbmZlY3Rpb3VzQml0aW5nUHJvcG9ydGlvblZlY3RvciA9IG5ld0luZmVjdGlvdXNCaXRpbmdQcm9wb3J0aW9uVmVjdG9yOworCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpCisJCQllTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBWZWN0b3JQYWNrYWdlLk1BQ0RPTkFMRF9ST1NTX0RJU0VBU0VfTU9ERUxfX0lORkVDVElPVVNfQklUSU5HX1BST1BPUlRJT05fVkVDVE9SLCBvbGRJbmZlY3Rpb3VzQml0aW5nUHJvcG9ydGlvblZlY3RvciwgaW5mZWN0aW91c0JpdGluZ1Byb3BvcnRpb25WZWN0b3IpKTsKKwl9CisKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBkb3VibGUgZ2V0UmVjb3ZlcnlSYXRlKCkgeworCQlyZXR1cm4gcmVjb3ZlcnlSYXRlOworCX0KKworCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgc2V0UmVjb3ZlcnlSYXRlKGRvdWJsZSBuZXdSZWNvdmVyeVJhdGUpIHsKKwkJZG91YmxlIG9sZFJlY292ZXJ5UmF0ZSA9IHJlY292ZXJ5UmF0ZTsKKwkJcmVjb3ZlcnlSYXRlID0gbmV3UmVjb3ZlcnlSYXRlOworCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpCisJCQllTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBWZWN0b3JQYWNrYWdlLk1BQ0RPTkFMRF9ST1NTX0RJU0VBU0VfTU9ERUxfX1JFQ09WRVJZX1JBVEUsIG9sZFJlY292ZXJ5UmF0ZSwgcmVjb3ZlcnlSYXRlKSk7CisJfQorCisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgZG91YmxlIGdldEluY3ViYXRpb25SYXRlKCkgeworCQlyZXR1cm4gaW5jdWJhdGlvblJhdGU7CisJfQorCisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRJbmN1YmF0aW9uUmF0ZShkb3VibGUgbmV3SW5jdWJhdGlvblJhdGUpIHsKKwkJZG91YmxlIG9sZEluY3ViYXRpb25SYXRlID0gaW5jdWJhdGlvblJhdGU7CisJCWluY3ViYXRpb25SYXRlID0gbmV3SW5jdWJhdGlvblJhdGU7CisJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkKKwkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIFZlY3RvclBhY2thZ2UuTUFDRE9OQUxEX1JPU1NfRElTRUFTRV9NT0RFTF9fSU5DVUJBVElPTl9SQVRFLCBvbGRJbmN1YmF0aW9uUmF0ZSwgaW5jdWJhdGlvblJhdGUpKTsKKwl9CisKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBkb3VibGUgZ2V0VmVjdG9ySW5jdWJhdGlvblJhdGUoKSB7CisJCXJldHVybiB2ZWN0b3JJbmN1YmF0aW9uUmF0ZTsKKwl9CisKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIHNldFZlY3RvckluY3ViYXRpb25SYXRlKGRvdWJsZSBuZXdWZWN0b3JJbmN1YmF0aW9uUmF0ZSkgeworCQlkb3VibGUgb2xkVmVjdG9ySW5jdWJhdGlvblJhdGUgPSB2ZWN0b3JJbmN1YmF0aW9uUmF0ZTsKKwkJdmVjdG9ySW5jdWJhdGlvblJhdGUgPSBuZXdWZWN0b3JJbmN1YmF0aW9uUmF0ZTsKKwkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQorCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgVmVjdG9yUGFja2FnZS5NQUNET05BTERfUk9TU19ESVNFQVNFX01PREVMX19WRUNUT1JfSU5DVUJBVElPTl9SQVRFLCBvbGRWZWN0b3JJbmN1YmF0aW9uUmF0ZSwgdmVjdG9ySW5jdWJhdGlvblJhdGUpKTsKKwl9CisKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBkb3VibGUgZ2V0SW1tdW5pdHlMb3NzUmF0ZSgpIHsKKwkJcmV0dXJuIGltbXVuaXR5TG9zc1JhdGU7CisJfQorCisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRJbW11bml0eUxvc3NSYXRlKGRvdWJsZSBuZXdJbW11bml0eUxvc3NSYXRlKSB7CisJCWRvdWJsZSBvbGRJbW11bml0eUxvc3NSYXRlID0gaW1tdW5pdHlMb3NzUmF0ZTsKKwkJaW1tdW5pdHlMb3NzUmF0ZSA9IG5ld0ltbXVuaXR5TG9zc1JhdGU7CisJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkKKwkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIFZlY3RvclBhY2thZ2UuTUFDRE9OQUxEX1JPU1NfRElTRUFTRV9NT0RFTF9fSU1NVU5JVFlfTE9TU19SQVRFLCBvbGRJbW11bml0eUxvc3NSYXRlLCBpbW11bml0eUxvc3NSYXRlKSk7CisJfQorCisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgT2JqZWN0IGVHZXQoaW50IGZlYXR1cmVJRCwgYm9vbGVhbiByZXNvbHZlLCBib29sZWFuIGNvcmVUeXBlKSB7CisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7CisJCQljYXNlIFZlY3RvclBhY2thZ2UuTUFDRE9OQUxEX1JPU1NfRElTRUFTRV9NT0RFTF9fQklUSU5HX1JBVEU6CisJCQkJcmV0dXJuIGdldEJpdGluZ1JhdGUoKTsKKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5NQUNET05BTERfUk9TU19ESVNFQVNFX01PREVMX19JTkZFQ1RJT1VTX0JJVElOR19QUk9QT1JUSU9OX0hVTUFOOgorCQkJCXJldHVybiBnZXRJbmZlY3Rpb3VzQml0aW5nUHJvcG9ydGlvbkh1bWFuKCk7CisJCQljYXNlIFZlY3RvclBhY2thZ2UuTUFDRE9OQUxEX1JPU1NfRElTRUFTRV9NT0RFTF9fSU5GRUNUSU9VU19CSVRJTkdfUFJPUE9SVElPTl9WRUNUT1I6CisJCQkJcmV0dXJuIGdldEluZmVjdGlvdXNCaXRpbmdQcm9wb3J0aW9uVmVjdG9yKCk7CisJCQljYXNlIFZlY3RvclBhY2thZ2UuTUFDRE9OQUxEX1JPU1NfRElTRUFTRV9NT0RFTF9fUkVDT1ZFUllfUkFURToKKwkJCQlyZXR1cm4gZ2V0UmVjb3ZlcnlSYXRlKCk7CisJCQljYXNlIFZlY3RvclBhY2thZ2UuTUFDRE9OQUxEX1JPU1NfRElTRUFTRV9NT0RFTF9fSU5DVUJBVElPTl9SQVRFOgorCQkJCXJldHVybiBnZXRJbmN1YmF0aW9uUmF0ZSgpOworCQkJY2FzZSBWZWN0b3JQYWNrYWdlLk1BQ0RPTkFMRF9ST1NTX0RJU0VBU0VfTU9ERUxfX1ZFQ1RPUl9JTkNVQkFUSU9OX1JBVEU6CisJCQkJcmV0dXJuIGdldFZlY3RvckluY3ViYXRpb25SYXRlKCk7CisJCQljYXNlIFZlY3RvclBhY2thZ2UuTUFDRE9OQUxEX1JPU1NfRElTRUFTRV9NT0RFTF9fSU1NVU5JVFlfTE9TU19SQVRFOgorCQkJCXJldHVybiBnZXRJbW11bml0eUxvc3NSYXRlKCk7CisJCX0KKwkJcmV0dXJuIHN1cGVyLmVHZXQoZmVhdHVyZUlELCByZXNvbHZlLCBjb3JlVHlwZSk7CisJfQorCisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBlU2V0KGludCBmZWF0dXJlSUQsIE9iamVjdCBuZXdWYWx1ZSkgeworCQlzd2l0Y2ggKGZlYXR1cmVJRCkgeworCQkJY2FzZSBWZWN0b3JQYWNrYWdlLk1BQ0RPTkFMRF9ST1NTX0RJU0VBU0VfTU9ERUxfX0JJVElOR19SQVRFOgorCQkJCXNldEJpdGluZ1JhdGUoKERvdWJsZSluZXdWYWx1ZSk7CisJCQkJcmV0dXJuOworCQkJY2FzZSBWZWN0b3JQYWNrYWdlLk1BQ0RPTkFMRF9ST1NTX0RJU0VBU0VfTU9ERUxfX0lORkVDVElPVVNfQklUSU5HX1BST1BPUlRJT05fSFVNQU46CisJCQkJc2V0SW5mZWN0aW91c0JpdGluZ1Byb3BvcnRpb25IdW1hbigoRG91YmxlKW5ld1ZhbHVlKTsKKwkJCQlyZXR1cm47CisJCQljYXNlIFZlY3RvclBhY2thZ2UuTUFDRE9OQUxEX1JPU1NfRElTRUFTRV9NT0RFTF9fSU5GRUNUSU9VU19CSVRJTkdfUFJPUE9SVElPTl9WRUNUT1I6CisJCQkJc2V0SW5mZWN0aW91c0JpdGluZ1Byb3BvcnRpb25WZWN0b3IoKERvdWJsZSluZXdWYWx1ZSk7CisJCQkJcmV0dXJuOworCQkJY2FzZSBWZWN0b3JQYWNrYWdlLk1BQ0RPTkFMRF9ST1NTX0RJU0VBU0VfTU9ERUxfX1JFQ09WRVJZX1JBVEU6CisJCQkJc2V0UmVjb3ZlcnlSYXRlKChEb3VibGUpbmV3VmFsdWUpOworCQkJCXJldHVybjsKKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5NQUNET05BTERfUk9TU19ESVNFQVNFX01PREVMX19JTkNVQkFUSU9OX1JBVEU6CisJCQkJc2V0SW5jdWJhdGlvblJhdGUoKERvdWJsZSluZXdWYWx1ZSk7CisJCQkJcmV0dXJuOworCQkJY2FzZSBWZWN0b3JQYWNrYWdlLk1BQ0RPTkFMRF9ST1NTX0RJU0VBU0VfTU9ERUxfX1ZFQ1RPUl9JTkNVQkFUSU9OX1JBVEU6CisJCQkJc2V0VmVjdG9ySW5jdWJhdGlvblJhdGUoKERvdWJsZSluZXdWYWx1ZSk7CisJCQkJcmV0dXJuOworCQkJY2FzZSBWZWN0b3JQYWNrYWdlLk1BQ0RPTkFMRF9ST1NTX0RJU0VBU0VfTU9ERUxfX0lNTVVOSVRZX0xPU1NfUkFURToKKwkJCQlzZXRJbW11bml0eUxvc3NSYXRlKChEb3VibGUpbmV3VmFsdWUpOworCQkJCXJldHVybjsKKwkJfQorCQlzdXBlci5lU2V0KGZlYXR1cmVJRCwgbmV3VmFsdWUpOworCX0KKworCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgZVVuc2V0KGludCBmZWF0dXJlSUQpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5NQUNET05BTERfUk9TU19ESVNFQVNFX01PREVMX19CSVRJTkdfUkFURToKKwkJCQlzZXRCaXRpbmdSYXRlKEJJVElOR19SQVRFX0VERUZBVUxUKTsKKwkJCQlyZXR1cm47CisJCQljYXNlIFZlY3RvclBhY2thZ2UuTUFDRE9OQUxEX1JPU1NfRElTRUFTRV9NT0RFTF9fSU5GRUNUSU9VU19CSVRJTkdfUFJPUE9SVElPTl9IVU1BTjoKKwkJCQlzZXRJbmZlY3Rpb3VzQml0aW5nUHJvcG9ydGlvbkh1bWFuKElORkVDVElPVVNfQklUSU5HX1BST1BPUlRJT05fSFVNQU5fRURFRkFVTFQpOworCQkJCXJldHVybjsKKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5NQUNET05BTERfUk9TU19ESVNFQVNFX01PREVMX19JTkZFQ1RJT1VTX0JJVElOR19QUk9QT1JUSU9OX1ZFQ1RPUjoKKwkJCQlzZXRJbmZlY3Rpb3VzQml0aW5nUHJvcG9ydGlvblZlY3RvcihJTkZFQ1RJT1VTX0JJVElOR19QUk9QT1JUSU9OX1ZFQ1RPUl9FREVGQVVMVCk7CisJCQkJcmV0dXJuOworCQkJY2FzZSBWZWN0b3JQYWNrYWdlLk1BQ0RPTkFMRF9ST1NTX0RJU0VBU0VfTU9ERUxfX1JFQ09WRVJZX1JBVEU6CisJCQkJc2V0UmVjb3ZlcnlSYXRlKFJFQ09WRVJZX1JBVEVfRURFRkFVTFQpOworCQkJCXJldHVybjsKKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5NQUNET05BTERfUk9TU19ESVNFQVNFX01PREVMX19JTkNVQkFUSU9OX1JBVEU6CisJCQkJc2V0SW5jdWJhdGlvblJhdGUoSU5DVUJBVElPTl9SQVRFX0VERUZBVUxUKTsKKwkJCQlyZXR1cm47CisJCQljYXNlIFZlY3RvclBhY2thZ2UuTUFDRE9OQUxEX1JPU1NfRElTRUFTRV9NT0RFTF9fVkVDVE9SX0lOQ1VCQVRJT05fUkFURToKKwkJCQlzZXRWZWN0b3JJbmN1YmF0aW9uUmF0ZShWRUNUT1JfSU5DVUJBVElPTl9SQVRFX0VERUZBVUxUKTsKKwkJCQlyZXR1cm47CisJCQljYXNlIFZlY3RvclBhY2thZ2UuTUFDRE9OQUxEX1JPU1NfRElTRUFTRV9NT0RFTF9fSU1NVU5JVFlfTE9TU19SQVRFOgorCQkJCXNldEltbXVuaXR5TG9zc1JhdGUoSU1NVU5JVFlfTE9TU19SQVRFX0VERUZBVUxUKTsKKwkJCQlyZXR1cm47CisJCX0KKwkJc3VwZXIuZVVuc2V0KGZlYXR1cmVJRCk7CisJfQorCisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgYm9vbGVhbiBlSXNTZXQoaW50IGZlYXR1cmVJRCkgeworCQlzd2l0Y2ggKGZlYXR1cmVJRCkgeworCQkJY2FzZSBWZWN0b3JQYWNrYWdlLk1BQ0RPTkFMRF9ST1NTX0RJU0VBU0VfTU9ERUxfX0JJVElOR19SQVRFOgorCQkJCXJldHVybiBiaXRpbmdSYXRlICE9IEJJVElOR19SQVRFX0VERUZBVUxUOworCQkJY2FzZSBWZWN0b3JQYWNrYWdlLk1BQ0RPTkFMRF9ST1NTX0RJU0VBU0VfTU9ERUxfX0lORkVDVElPVVNfQklUSU5HX1BST1BPUlRJT05fSFVNQU46CisJCQkJcmV0dXJuIGluZmVjdGlvdXNCaXRpbmdQcm9wb3J0aW9uSHVtYW4gIT0gSU5GRUNUSU9VU19CSVRJTkdfUFJPUE9SVElPTl9IVU1BTl9FREVGQVVMVDsKKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5NQUNET05BTERfUk9TU19ESVNFQVNFX01PREVMX19JTkZFQ1RJT1VTX0JJVElOR19QUk9QT1JUSU9OX1ZFQ1RPUjoKKwkJCQlyZXR1cm4gaW5mZWN0aW91c0JpdGluZ1Byb3BvcnRpb25WZWN0b3IgIT0gSU5GRUNUSU9VU19CSVRJTkdfUFJPUE9SVElPTl9WRUNUT1JfRURFRkFVTFQ7CisJCQljYXNlIFZlY3RvclBhY2thZ2UuTUFDRE9OQUxEX1JPU1NfRElTRUFTRV9NT0RFTF9fUkVDT1ZFUllfUkFURToKKwkJCQlyZXR1cm4gcmVjb3ZlcnlSYXRlICE9IFJFQ09WRVJZX1JBVEVfRURFRkFVTFQ7CisJCQljYXNlIFZlY3RvclBhY2thZ2UuTUFDRE9OQUxEX1JPU1NfRElTRUFTRV9NT0RFTF9fSU5DVUJBVElPTl9SQVRFOgorCQkJCXJldHVybiBpbmN1YmF0aW9uUmF0ZSAhPSBJTkNVQkFUSU9OX1JBVEVfRURFRkFVTFQ7CisJCQljYXNlIFZlY3RvclBhY2thZ2UuTUFDRE9OQUxEX1JPU1NfRElTRUFTRV9NT0RFTF9fVkVDVE9SX0lOQ1VCQVRJT05fUkFURToKKwkJCQlyZXR1cm4gdmVjdG9ySW5jdWJhdGlvblJhdGUgIT0gVkVDVE9SX0lOQ1VCQVRJT05fUkFURV9FREVGQVVMVDsKKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5NQUNET05BTERfUk9TU19ESVNFQVNFX01PREVMX19JTU1VTklUWV9MT1NTX1JBVEU6CisJCQkJcmV0dXJuIGltbXVuaXR5TG9zc1JhdGUgIT0gSU1NVU5JVFlfTE9TU19SQVRFX0VERUZBVUxUOworCQl9CisJCXJldHVybiBzdXBlci5lSXNTZXQoZmVhdHVyZUlEKTsKKwl9CisKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKSB7CisJCWlmIChlSXNQcm94eSgpKSByZXR1cm4gc3VwZXIudG9TdHJpbmcoKTsKKworCQlTdHJpbmdCdWZmZXIgcmVzdWx0ID0gbmV3IFN0cmluZ0J1ZmZlcihzdXBlci50b1N0cmluZygpKTsKKwkJcmVzdWx0LmFwcGVuZCgiIChiaXRpbmdSYXRlOiAiKTsKKwkJcmVzdWx0LmFwcGVuZChiaXRpbmdSYXRlKTsKKwkJcmVzdWx0LmFwcGVuZCgiLCBpbmZlY3Rpb3VzQml0aW5nUHJvcG9ydGlvbkh1bWFuOiAiKTsKKwkJcmVzdWx0LmFwcGVuZChpbmZlY3Rpb3VzQml0aW5nUHJvcG9ydGlvbkh1bWFuKTsKKwkJcmVzdWx0LmFwcGVuZCgiLCBpbmZlY3Rpb3VzQml0aW5nUHJvcG9ydGlvblZlY3RvcjogIik7CisJCXJlc3VsdC5hcHBlbmQoaW5mZWN0aW91c0JpdGluZ1Byb3BvcnRpb25WZWN0b3IpOworCQlyZXN1bHQuYXBwZW5kKCIsIHJlY292ZXJ5UmF0ZTogIik7CisJCXJlc3VsdC5hcHBlbmQocmVjb3ZlcnlSYXRlKTsKKwkJcmVzdWx0LmFwcGVuZCgiLCBpbmN1YmF0aW9uUmF0ZTogIik7CisJCXJlc3VsdC5hcHBlbmQoaW5jdWJhdGlvblJhdGUpOworCQlyZXN1bHQuYXBwZW5kKCIsIHZlY3RvckluY3ViYXRpb25SYXRlOiAiKTsKKwkJcmVzdWx0LmFwcGVuZCh2ZWN0b3JJbmN1YmF0aW9uUmF0ZSk7CisJCXJlc3VsdC5hcHBlbmQoIiwgaW1tdW5pdHlMb3NzUmF0ZTogIik7CisJCXJlc3VsdC5hcHBlbmQoaW1tdW5pdHlMb3NzUmF0ZSk7CisJCXJlc3VsdC5hcHBlbmQoJyknKTsKKwkJcmV0dXJuIHJlc3VsdC50b1N0cmluZygpOworCX0KKworCUBPdmVycmlkZQorCXB1YmxpYyBTdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsVmFsdWUgY29tcHV0ZURpc2Vhc2VEZWx0YXMoU1RFTVRpbWUgdGltZSwKKwkJCVN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZSBjdXJyZW50U3RhdGUsCisJCQlTdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsIGRpc2Vhc2VMYWJlbCwgbG9uZyB0aW1lRGVsdGEsCisJCQlEaXNlYXNlTW9kZWxMYWJlbFZhbHVlIHJldHVyblZhbHVlKSB7CisJCQkJCisJCS8vIFRoZSBtZXRob2QgY29tZXMgZnJvbSBBbmRlcnNvbiAmIE1heSBJbmZlY3Rpb3VzIERpc2Vhc2VzIG9mIEh1bWFucworCQkvLyBjaGFwdGVyIDE0LjMsIHBhZ2UgMzk0ICJCYXNpYyBtb2RlbCBmb3IgTWFsYXJpYSIKKwkJCisJCS8vIFRoZXJlIGFyZSB0d28gb3B0aW9ucyBoZXJlIGRlcGVuZGluZyB1cG9uIHRoZSBwb3B1bGF0aW9uCisJCS8vIHdlIGFyZSBjYWxjdWxhdGluZyBhIGRlbHRhIGZvci4gSXQncyBlaXRoZXIgdGhlIGh1bWFuCisJCS8vIG9yIHRoZSB2ZWN0b3IgcG9wdWxhdGlvbi4gRGV0ZXJtaW5lIHdoaWNoIG9uZSB3ZSdyZQorCQkvLyBkZWFsaW5nIHdpdGguCisJCQorCQlTdHJpbmcgcG9wSWRlbnRpZmllciA9IGRpc2Vhc2VMYWJlbC5nZXRQb3B1bGF0aW9uTW9kZWxMYWJlbCgpLmdldFBvcHVsYXRpb25JZGVudGlmaWVyKCk7CisJCU5vZGUgbiA9IGRpc2Vhc2VMYWJlbC5nZXROb2RlKCk7CisJCQorCQlpZihwb3BJZGVudGlmaWVyLmVxdWFscyh0aGlzLmdldFBvcHVsYXRpb25JZGVudGlmaWVyKCkpKSB7CisJCQkvLyBPa2F5LCB3ZSdyZSBkZWFsaW5nIHdpdGggaHVtYW5zIChtb3N0IGxpa2VseSkKKwkJCQorCQkJLy8gVGhlIGNoYW5nZSBpbiBpbmZlY3RlZCBwZW9wbGUgaXM6CisJCQkvLyBkeS9kdCA9IChhYk5WL04peXYoMS15KS1nYW1tYSp5CisJCQkvLyB3aGVyZSAKKwkJCS8vCisJCQkvL05WPVRvdGFsIHZlY3RvciBwb3B1bGF0aW9uCisJCQkvL049VG90YWwgaHVtYW4gcG9wdWxhdGlvbgorCQkJLy95diA9IGN1cnJlbnQgZnJhY3Rpb24gb2YgaW5mZWN0ZWQgdmVjdG9ycworCQkJLy8geSA9IGN1cnJlbnQgZnJhY3Rpb24gb2YgaW5mZWN0ZWQgaHVtYW5zCisJCQkvL2EgPSBiaXRpbmcgcmF0ZQorCQkJLy9iID0gcHJvcG9ydGlvbiBpbmZlY3Rpb3VzIGJpdGVzIChodW1hbikKKwkJCQorCQkJU0VJUkxhYmVsVmFsdWUgc2VpclZhbCA9IChTRUlSTGFiZWxWYWx1ZSljdXJyZW50U3RhdGU7CisJCQlkb3VibGUgdG90YWxIdW1hblBvcCA9IHNlaXJWYWwuZ2V0UG9wdWxhdGlvbkNvdW50KCk7CisJCQkKKwkJCS8vIEZpbmQgdGhlIHZlY3RvciBwb3B1bGF0aW9uCisJCQkKKwkJCVNFSVJMYWJlbCB2ZWNQb3AgPSBmaW5kRGlzZWFzZUxhYmVsKGRpc2Vhc2VMYWJlbC5nZXROb2RlKCksIHRoaXMuZ2V0VmVjdG9yUG9wdWxhdGlvbklkZW50aWZpZXIoKSk7CisJCQlpZih2ZWNQb3AgPT0gbnVsbCkgeworCQkJCUFjdGl2YXRvci5sb2dFcnJvcigiVW5hYmxlIHRvIGZpbmQgZGlzZWFzZSBsYWJlbCBmb3IgIit0aGlzLmdldFZlY3RvclBvcHVsYXRpb25JZGVudGlmaWVyKCkrIiBvbiBub2RlICIrIGRpc2Vhc2VMYWJlbC5nZXROb2RlKCksIG5ldyBFeGNlcHRpb24oKSk7CisJCQkJcmV0dXJuICAoU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbFZhbHVlKXJldHVyblZhbHVlOworCQkJfQorCQkJCisJCQlTRUlSTGFiZWxWYWx1ZSB2ZWN0b3JWYWx1ZSA9IChTRUlSTGFiZWxWYWx1ZSl2ZWNQb3AuZ2V0VGVtcFZhbHVlKCk7IC8vIHRlbXAgdmFsdWUgc2luY2UgcHJvYmUgaXMgbm90IHlldCBzZXQuCisJCQlkb3VibGUgdG90YWxWZWN0b3JQb3AgPSB2ZWN0b3JWYWx1ZS5nZXRQb3B1bGF0aW9uQ291bnQoKTsKKwkJCQorCQkJZG91YmxlIGFic0lDaGFuZ2U9MC4wLCBhYnNFQ2hhbmdlPTAuMCwgYWJzU0NoYW5nZT0wLjAsIGFic1JDaGFuZ2UgPSAwLjA7CisJCQlkb3VibGUgaW5jaWRlbmNlID0gMC4wOworCQkJLy8gTWFrZSBzdXJlIHdlIGhhdmUgYm90aCB2ZWN0b3JzIGFuZCBodW1hbnMKKwkJCWlmKHRvdGFsSHVtYW5Qb3AgPiAwLjApIHsKKwkJCQlkb3VibGUgYWRqdXN0ZWRSZWNvdmVyeVJhdGUgPSB0aGlzLmdldFJlY292ZXJ5UmF0ZSgpICogKChkb3VibGUpIHRpbWVEZWx0YSAvIChkb3VibGUpIGdldFRpbWVQZXJpb2QoKSk7CisJCQkJZG91YmxlIGFkanVzdGVkQml0aW5nUmF0ZSA9IHRoaXMuZ2V0Qml0aW5nUmF0ZSgpICogKChkb3VibGUpdGltZURlbHRhIC8gKGRvdWJsZSlnZXRUaW1lUGVyaW9kKCkpOworCQkJCWRvdWJsZSBhZGp1c3RlZEluY3ViYXRpb25SYXRlID0gdGhpcy5nZXRJbmN1YmF0aW9uUmF0ZSgpKigoZG91YmxlKXRpbWVEZWx0YSAvIChkb3VibGUpZ2V0VGltZVBlcmlvZCgpKTsKKwkJCQlkb3VibGUgYWRqdXN0ZWRJbW11bml0eUxvc3NSYXRlID0gdGhpcy5nZXRJbW11bml0eUxvc3NSYXRlKCkqKChkb3VibGUpdGltZURlbHRhIC8gKGRvdWJsZSlnZXRUaW1lUGVyaW9kKCkpOworCQkKKwkJCQkvLyBJZiB0aGVyZSBhcmUgbm8gdmVjdG9ycyBhbmQgbm8gaHVtYW5zLAorCQkJCWRvdWJsZSBkeWR0ID0gMC4wOworCQkJCWlmKHRvdGFsVmVjdG9yUG9wID4gMC4wKSBkeWR0ID0gIChhZGp1c3RlZEJpdGluZ1JhdGUqdGhpcy5nZXRJbmZlY3Rpb3VzQml0aW5nUHJvcG9ydGlvbkh1bWFuKCkqdG90YWxWZWN0b3JQb3AvdG90YWxIdW1hblBvcCkqIAorCQkJCQkodmVjdG9yVmFsdWUuZ2V0SSgpL3RvdGFsVmVjdG9yUG9wKSpzZWlyVmFsLmdldFMoKS90b3RhbEh1bWFuUG9wOworCQorCQkJCWR5ZHQgPSAoRG91YmxlLmlzTmFOKGR5ZHQpKT8gMDpkeWR0OworCQkJCQorCQkJCWlmKGR5ZHQgPiAxLjApCisJCQkJCWR5ZHQgPSAxLjA7CisJCisJCQkJaWYoZHlkdCA8IC0xLjApCisJCQkJCWR5ZHQgPSAtMS4wOworCQorCQkJCWRvdWJsZSBmcmFjU0NoYW5nZSA9IC1keWR0ICsgYWRqdXN0ZWRJbW11bml0eUxvc3NSYXRlKnNlaXJWYWwuZ2V0UigpIC8gdG90YWxIdW1hblBvcDsKKwkJCQlkb3VibGUgZnJhY0VDaGFuZ2UgPSAgZHlkdCAtIGFkanVzdGVkSW5jdWJhdGlvblJhdGUqc2VpclZhbC5nZXRFKCkvdG90YWxIdW1hblBvcDsKKwkJCQlkb3VibGUgZnJhY0lDaGFuZ2UgPSBhZGp1c3RlZEluY3ViYXRpb25SYXRlKnNlaXJWYWwuZ2V0RSgpL3RvdGFsSHVtYW5Qb3AtYWRqdXN0ZWRSZWNvdmVyeVJhdGUqc2VpclZhbC5nZXRJKCkvdG90YWxIdW1hblBvcDsKKwkJCQlkb3VibGUgZnJhY1JDaGFuZ2UgPSBhZGp1c3RlZFJlY292ZXJ5UmF0ZSpzZWlyVmFsLmdldEkoKS90b3RhbEh1bWFuUG9wLWFkanVzdGVkSW1tdW5pdHlMb3NzUmF0ZSpzZWlyVmFsLmdldFIoKSAvIHRvdGFsSHVtYW5Qb3A7CisJCQkJCisJCQkJYWJzSUNoYW5nZSA9IGZyYWNJQ2hhbmdlICogdG90YWxIdW1hblBvcDsKKwkJCQlhYnNTQ2hhbmdlID0gZnJhY1NDaGFuZ2UgKiB0b3RhbEh1bWFuUG9wOworCQkJCWFic0VDaGFuZ2UgPSBmcmFjRUNoYW5nZSAqIHRvdGFsSHVtYW5Qb3A7CisJCQkJYWJzUkNoYW5nZSA9IGZyYWNSQ2hhbmdlICogdG90YWxIdW1hblBvcDsKKwkJCQkKKwkJCQlpbmNpZGVuY2UgPSBkeWR0KnRvdGFsSHVtYW5Qb3A7CisJLy8JCQlpZihhYnNJQ2hhbmdlICsgYWJzU0NoYW5nZSArIGFic0VDaGFuZ2UgK2Fic1JDaGFuZ2UgIT0gMC4wKQorCS8vCQkJCUFjdGl2YXRvci5sb2dJbmZvcm1hdGlvbigiTWlzbWF0Y2ggIisoYWJzSUNoYW5nZSArIGFic1NDaGFuZ2UgKyBhYnNFQ2hhbmdlICthYnNSQ2hhbmdlKSk7CisJCQl9CisJCQlTRUlSTGFiZWxWYWx1ZSByZXRWID0gKFNFSVJMYWJlbFZhbHVlKXJldHVyblZhbHVlOworCQkJcmV0Vi5zZXRJKGFic0lDaGFuZ2UpOworCQkJcmV0Vi5zZXRTKGFic1NDaGFuZ2UpOworCQkJcmV0Vi5zZXRFKGFic0VDaGFuZ2UpOworCQkJcmV0Vi5zZXRSKGFic1JDaGFuZ2UpOworCQkJCisJCQlyZXRWLnNldEluY2lkZW5jZShpbmNpZGVuY2UpOworCQkJCisJCX0gZWxzZSBpZiAocG9wSWRlbnRpZmllci5lcXVhbHModGhpcy5nZXRWZWN0b3JQb3B1bGF0aW9uSWRlbnRpZmllcigpKSkgeworCQkJLy8gV2UncmUgZGVhbGluZyB3aXRoIHRoZSB2ZWN0b3IKKwkJCQorCQkJLy8gVGhlIGNoYW5nZSBpbiBpbmZlY3RlZCB2ZWN0b3JzIGFyZToKKwkJCS8vIGR5di9kdCA9IGFjeSgxLXl2KS1tdSp5dgorCQkJLy8gd2hlcmUgCisJCQkvLworCQkJLy95diA9IGN1cnJlbnQgZnJhY3Rpb24gb2YgaW5mZWN0ZWQgdmVjdG9ycworCQkJLy8geSA9IGN1cnJlbnQgZnJhY3Rpb24gb2YgaW5mZWN0ZWQgaHVtYW5zCisJCQkvL2EgPSBiaXRpbmcgcmF0ZQorCQkJLy9jID0gcHJvcG9ydGlvbiBpbmZlY3Rpb3VzIGJpdGVzICh2ZWN0b3IpCisJCQkKKwkJCVNFSVJMYWJlbFZhbHVlIHZlY3RvclZhbCA9IChTRUlSTGFiZWxWYWx1ZSljdXJyZW50U3RhdGU7CisJCQlkb3VibGUgdG90YWxWZWN0b3JQb3AgPSB2ZWN0b3JWYWwuZ2V0UG9wdWxhdGlvbkNvdW50KCk7CisJCQkKKwkJCWRvdWJsZSBhYnNJQ2hhbmdlPTAuMCwgYWJzRUNoYW5nZT0wLjAsIGFic1NDaGFuZ2U9MC4wOworCQkJLy8gRmluZCB0aGUgdmVjdG9yIHBvcHVsYXRpb24KKwkJCWlmKHRvdGFsVmVjdG9yUG9wPjAuMCkgeworCQkJCVNFSVJMYWJlbCBodW1hblBvcCA9IGZpbmREaXNlYXNlTGFiZWwoZGlzZWFzZUxhYmVsLmdldE5vZGUoKSwgdGhpcy5nZXRQb3B1bGF0aW9uSWRlbnRpZmllcigpKTsKKwkJCQlpZihodW1hblBvcCA9PSBudWxsKSB7CisJCQkJCUFjdGl2YXRvci5sb2dFcnJvcigiVW5hYmxlIHRvIGZpbmQgZGlzZWFzZSBsYWJlbCBmb3IgIit0aGlzLmdldFBvcHVsYXRpb25JZGVudGlmaWVyKCkrIiBvbiBub2RlICIrIGRpc2Vhc2VMYWJlbC5nZXROb2RlKCksIG5ldyBFeGNlcHRpb24oKSk7CisJCQkJCXJldHVybiAgKFN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZSlyZXR1cm5WYWx1ZTsKKwkJCQl9CisJCQkJCisJCQkJU0VJUkxhYmVsVmFsdWUgc2VpclZhbCA9IChTRUlSTGFiZWxWYWx1ZSlodW1hblBvcC5nZXRUZW1wVmFsdWUoKTsgLy8gVGVtcCB2YWx1ZSBzaW5jZSBpdCdzIHNhZmUgdG8gdXNlCisJCQkJCisJCQkJZG91YmxlIGFkanVzdGVkQml0aW5nUmF0ZSA9IHRoaXMuZ2V0Qml0aW5nUmF0ZSgpICogKChkb3VibGUpdGltZURlbHRhIC8gKGRvdWJsZSlnZXRUaW1lUGVyaW9kKCkpOworCQkJCWRvdWJsZSBhZGp1c3RlZFZlY3RvckluY3ViYXRpb25SYXRlID0gdGhpcy5nZXRWZWN0b3JJbmN1YmF0aW9uUmF0ZSgpICogKChkb3VibGUpdGltZURlbHRhIC8gKGRvdWJsZSlnZXRUaW1lUGVyaW9kKCkpOworCQkJCQorCQkJCS8vIEZyb20gdGhlIGxpdGVyYXRlLCB0aGUgaW5jdWJhdGlvbiBwZXJpb2Qgb2YgdGhlIG1vc3F1aXRvIGNhbiBiZSB0ZW1wZXJhdHVyZQorCQkJCS8vIGRlcGVuZGVudC4gSXQgZm9sbG93cyB0aGUgZXF1YXRpb24gcGVyaW9kIChkYXlzKSA9IDExMS8oVC0xNikuIFNlZSBpZiAKKwkJCQkvLyB3ZSBoYXZlIHRlbXBlcmF0dXJlIGRhdGEgYXZhaWxhYmxlIGFuZCBpZiBzbywgdXNlIHRoYXQgaW5zdGVhZCBvZiB0aGUKKwkJCQkvLyByYXRlIHNwZWNpZmllZCBpbiB0aGUgbW9kZWwKKwkJCQkKKwkJCQkgZm9yKE5vZGVMYWJlbCBubDpuLmdldExhYmVscygpKSB7CisJCQkJCSBpZihubCBpbnN0YW5jZW9mIEVhcnRoU2NpZW5jZUxhYmVsICYmICgoRWFydGhTY2llbmNlTGFiZWwpbmwpLmdldEN1cnJlbnRFYXJ0aFNjaWVuY2VWYWx1ZSgpLmdldERhdGFUeXBlKCkuZXF1YWxzKCJuaWdodHRlbXAiKSkgeworCQkJCQkJCUNhbGVuZGFyIGMgPSBDYWxlbmRhci5nZXRJbnN0YW5jZSgpOworCQkJCQkJCWMuc2V0VGltZSh0aW1lLmdldFRpbWUoKSk7CisJCQkJCQkJaW50IG1vbnRoID0gYy5nZXQoQ2FsZW5kYXIuTU9OVEgpOyAvLyBkZXByZWNhdGVkIGJ1dCBzdGlsbCB3b3JrcworCQkJCQkJCWludCBuZXh0TW9udGggPSBtb250aCsxOworCQkJCQkJCWlmIChuZXh0TW9udGggPiAxMSkgbmV4dE1vbnRoID0gMDsKKwkJCQkJCQlkb3VibGUgZGF5T2ZNb250aCA9IGMuZ2V0KENhbGVuZGFyLkRBWV9PRl9NT05USCk7CisJCQkJCQkJZG91YmxlIGRheXNJbk1vbnRoID0gYy5nZXRBY3R1YWxNYXhpbXVtKENhbGVuZGFyLkRBWV9PRl9NT05USCk7IAorCQkJCQkJCQorCQkJCQkJCWRvdWJsZSBmcmFjdGlvbiA9IGRheU9mTW9udGgvZGF5c0luTW9udGg7CisJCQkJCQkJCisJCQkJCQkJZG91YmxlIHRlbXBlcmF0dXJlMCA9ICgoRWFydGhTY2llbmNlTGFiZWwpbmwpLmdldEN1cnJlbnRFYXJ0aFNjaWVuY2VWYWx1ZSgpLmdldE1lYW4oKS5nZXQobW9udGgpLmRvdWJsZVZhbHVlKCk7CisJCQkJCQkJZG91YmxlIHRlbXBlcmF0dXJlMSA9ICgoRWFydGhTY2llbmNlTGFiZWwpbmwpLmdldEN1cnJlbnRFYXJ0aFNjaWVuY2VWYWx1ZSgpLmdldE1lYW4oKS5nZXQobmV4dE1vbnRoKS5kb3VibGVWYWx1ZSgpOworCQkJCQkJCWlmKE1hdGgucmludCh0ZW1wZXJhdHVyZTApID09IE1JU1NJTkdfREFUQSB8fCBNYXRoLnJpbnQodGVtcGVyYXR1cmUxKSA9PSBNSVNTSU5HX0RBVEEpCisJCQkJCQkJCWJyZWFrOworCQkJCQkJCS8vIGludGVycG9sYXRlCisJCQkJCQkJZG91YmxlIHRlbXBlcmF0dXJlID0gKGZyYWN0aW9uKnRlbXBlcmF0dXJlMSkgKygxLjAtZnJhY3Rpb24pKnRlbXBlcmF0dXJlMDsKKwkJCQkJCQkKKwkJCQkJCQkKKwkJCQkJCQkKKwkJCQkJCQlkb3VibGUgdmVjSW5jRGF5cyA9IDExMS8odGVtcGVyYXR1cmUtMTYpOworCQkJCQkJCWRvdWJsZSB2ZWNJbmNSYXRlID0gMC4wOworCQkJCQkJCWlmKHZlY0luY0RheXMgPD0gMCB8fCBEb3VibGUuaXNJbmZpbml0ZSh2ZWNJbmNEYXlzKSkgLy8gSXQncyB0b28gY29sZCB0aGUgcGFyYXNpdGUgd2lsbCBuZXZlciBkZXZlbG9wIAorCQkJCQkJCQl2ZWNJbmNSYXRlID0gMDsKKwkJCQkJCQllbHNlIHZlY0luY1JhdGUgPSAxL3ZlY0luY0RheXM7CisJCQkJCQkJCisJCQkJCQkJYWRqdXN0ZWRWZWN0b3JJbmN1YmF0aW9uUmF0ZSA9IHZlY0luY1JhdGUgKiAoKGRvdWJsZSl0aW1lRGVsdGEgLyAoZG91YmxlKWdldFRpbWVQZXJpb2QoKSk7CisJCQkJCQkJYnJlYWs7CisJCQkJCSB9CisJCQkJIH0KKwkJCQkKKwkJCQlmaW5hbCBkb3VibGUgZWZmZWN0aXZlSW5mZWN0aW91c0h1bWFuID0gZ2V0Tm9ybWFsaXplZEVmZmVjdGl2ZUluZmVjdGlvdXMoaHVtYW5Qb3AuZ2V0Tm9kZSgpLCBodW1hblBvcCwgc2VpclZhbC5nZXRJKCkpOworCQorCQkJCisJCQkJZG91YmxlIGZyYWNTQ2hhbmdlID0gIC1hZGp1c3RlZEJpdGluZ1JhdGUqdGhpcy5nZXRJbmZlY3Rpb3VzQml0aW5nUHJvcG9ydGlvblZlY3RvcigpKihlZmZlY3RpdmVJbmZlY3Rpb3VzSHVtYW4pKih2ZWN0b3JWYWwuZ2V0UygpL3RvdGFsVmVjdG9yUG9wKTsKKwkJCQlkb3VibGUgZnJhY0VDaGFuZ2UgPSAtZnJhY1NDaGFuZ2UgLSBhZGp1c3RlZFZlY3RvckluY3ViYXRpb25SYXRlKnZlY3RvclZhbC5nZXRFKCkvdG90YWxWZWN0b3JQb3A7CisJCQkJZG91YmxlIGZyYWNJQ2hhbmdlID0gYWRqdXN0ZWRWZWN0b3JJbmN1YmF0aW9uUmF0ZSp2ZWN0b3JWYWwuZ2V0RSgpL3RvdGFsVmVjdG9yUG9wOworCQkJCQorCQkJCQkKKwkJCQkgYWJzSUNoYW5nZSA9IGZyYWNJQ2hhbmdlICogdG90YWxWZWN0b3JQb3A7CisJCQkJYWJzRUNoYW5nZSA9IGZyYWNFQ2hhbmdlICogdG90YWxWZWN0b3JQb3A7CisJCQkJYWJzU0NoYW5nZSA9IGZyYWNTQ2hhbmdlICogdG90YWxWZWN0b3JQb3A7CisJCQkJCisvLwkJCQlpZihhYnNJQ2hhbmdlICsgYWJzU0NoYW5nZSArIGFic0VDaGFuZ2UgIT0gMC4wKQorLy8JCQkJCUFjdGl2YXRvci5sb2dJbmZvcm1hdGlvbigiTWlzbWF0Y2ggdmVjdG9yIisoYWJzSUNoYW5nZSArIGFic1NDaGFuZ2UgKyBhYnNFQ2hhbmdlKSk7CisJCQl9IAorCQkJCisJCQlTRUlSTGFiZWxWYWx1ZSByZXRWID0gKFNFSVJMYWJlbFZhbHVlKXJldHVyblZhbHVlOworCQkJcmV0Vi5zZXRJKGFic0lDaGFuZ2UpOworCQkJcmV0Vi5zZXRTKGFic1NDaGFuZ2UpOworCQkJcmV0Vi5zZXRFKGFic0VDaGFuZ2UpOworCQkJcmV0Vi5zZXRSKDAuMCk7IC8vIHZlY3RvciBuZXZlciByZWNvdmVyCisJCQlyZXRWLnNldEluY2lkZW5jZSgtYWJzU0NoYW5nZSk7IC8vIERyb3AgaW4gc3VzY2VwdGlibGUgaXMgaW5jaWRlbmNlIHNpbmNlIHRoZXJlIGlzIG5vIHJlY292ZXJ5CisJCQkKKwkJfSBlbHNlIHsKKwkJCUFjdGl2YXRvci5sb2dFcnJvcigiQ2Fubm90IGRldGVybWluZSB3aGF0IHRvIGRvIHdpdGggIitwb3BJZGVudGlmaWVyKyIgb24gbm9kZSAiK2Rpc2Vhc2VMYWJlbC5nZXROb2RlKCksIG5ldyBFeGNlcHRpb24oKSk7CisJCX0KKwkJCisvLwkJaWYoKChTSUxhYmVsVmFsdWUpcmV0dXJuVmFsdWUpLmdldEkoKSArICgoU0lMYWJlbFZhbHVlKWN1cnJlbnRTdGF0ZSkuZ2V0SSgpIDwgMCB8fAorLy8JCQkoKFNJTGFiZWxWYWx1ZSlyZXR1cm5WYWx1ZSkuZ2V0UygpICsgKChTSUxhYmVsVmFsdWUpY3VycmVudFN0YXRlKS5nZXRTKCkgPCAwKQorLy8JCQlBY3RpdmF0b3IubG9nSW5mb3JtYXRpb24oIkVycm9yIE5lZ2F0aXZlIik7CisJCQorCQlyZXR1cm4gKFN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZSlyZXR1cm5WYWx1ZTsKKwl9CisKKwlwdWJsaWMgdm9pZCBkb01vZGVsU3BlY2lmaWNBZGp1c3RtZW50cyhMYWJlbFZhbHVlIGxhYmVsKSB7CisJCS8vIE5vdGhpbmcgdG8gZG8KKwl9CisJCisJQE92ZXJyaWRlCisJcHVibGljIGJvb2xlYW4gaXNEZXRlcm1pbmlzdGljKCkgeworCQlyZXR1cm4gdHJ1ZTsKKwl9CisJCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgYXBwbHlFeHRlcm5hbERlbHRhcyhTVEVNVGltZSB0aW1lLCBsb25nIHRpbWVEZWx0YSwgRUxpc3Q8RHluYW1pY0xhYmVsPiBsYWJlbHMpIHsKKwkJLy8gU3VwZXJjbGFzcyBoYW5kbGVzIGV4dGVybmFsIGJpcnRocy9kZWF0aHMKKwkJc3VwZXIuYXBwbHlFeHRlcm5hbERlbHRhcyh0aW1lLCB0aW1lRGVsdGEsIGxhYmVscyk7CisJfQorCQkgCisJU0VJUkxhYmVsIGZpbmREaXNlYXNlTGFiZWwoTm9kZSBuLCBTdHJpbmcgaWRlbnRpZmllcikgeworCQlmb3IoTm9kZUxhYmVsIG5sOm4uZ2V0TGFiZWxzKCkpIHsKKwkJCWlmKG5sIGluc3RhbmNlb2YgU0VJUkxhYmVsCisJCQkJCSYmICgoRGlzZWFzZU1vZGVsTGFiZWwpbmwpLmdldFBvcHVsYXRpb25Nb2RlbExhYmVsKCkuZ2V0UG9wdWxhdGlvbklkZW50aWZpZXIoKS5lcXVhbHMoaWRlbnRpZmllcikpCisJCQkJcmV0dXJuIChTRUlSTGFiZWwpbmw7CisJCX0KKwkJcmV0dXJuIG51bGw7CisJfQorfSAvL01hY2RvbmFsZFJvc3NEaXNlYXNlTW9kZWxJbXBsCmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3Ivc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy92ZWN0b3IvaW1wbC9TaW1wbGVEZW5ndWVNb2RlbEltcGwuamF2YSBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3ZlY3Rvci9pbXBsL1NpbXBsZURlbmd1ZU1vZGVsSW1wbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjliZjFjNGYKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3Ivc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy92ZWN0b3IvaW1wbC9TaW1wbGVEZW5ndWVNb2RlbEltcGwuamF2YQpAQCAtMCwwICsxLDE3NTggQEAKKy8qKg0KKyAqIDxjb3B5cmlnaHQ+DQorICogPC9jb3B5cmlnaHQ+DQorICoNCisgKiAkSWQkDQorICovDQorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLmltcGw7DQorDQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLkVMaXN0Ow0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuaW1wbC5FTm90aWZpY2F0aW9uSW1wbDsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkxhYmVsVmFsdWU7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5Ob2RlTGFiZWw7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5TVEVNVGltZTsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLkRpc2Vhc2VNb2RlbExhYmVsOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZTsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLkluZmVjdG9yOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU0lJbmZlY3RvcjsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWw7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsVmFsdWU7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZEZhY3Rvcnk7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWxIb3N0TGFiZWw7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZTsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbFZlY3RvckxhYmVsOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLkRlbmd1ZU1vZGVsVmVjdG9yTGFiZWxWYWx1ZTsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5TaW1wbGVEZW5ndWVNb2RlbDsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5WZWN0b3JGYWN0b3J5Ow0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLlZlY3RvclBhY2thZ2U7DQorDQorLyoqDQorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnDQorICogPGVtPjxiPlNpbXBsZSBEZW5ndWUgTW9kZWw8L2I+PC9lbT4nLiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisgKiA8cD4NCisgKiBUaGUgZm9sbG93aW5nIGZlYXR1cmVzIGFyZSBpbXBsZW1lbnRlZDoNCisgKiA8dWw+DQorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuaW1wbC5TaW1wbGVEZW5ndWVNb2RlbEltcGwjZ2V0Qml0aW5nUmF0ZSA8ZW0+Qml0aW5nIFJhdGU8L2VtPn08L2xpPg0KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLmltcGwuU2ltcGxlRGVuZ3VlTW9kZWxJbXBsI2dldEhvc3RJbmZlY3Rpdml0eTEgPGVtPkhvc3QgSW5mZWN0aXZpdHkxPC9lbT59PC9saT4NCisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5pbXBsLlNpbXBsZURlbmd1ZU1vZGVsSW1wbCNnZXRIb3N0SW5mZWN0aXZpdHkyIDxlbT5Ib3N0IEluZmVjdGl2aXR5MjwvZW0+fTwvbGk+DQorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuaW1wbC5TaW1wbGVEZW5ndWVNb2RlbEltcGwjZ2V0SG9zdEluZmVjdGl2aXR5MyA8ZW0+SG9zdCBJbmZlY3Rpdml0eTM8L2VtPn08L2xpPg0KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLmltcGwuU2ltcGxlRGVuZ3VlTW9kZWxJbXBsI2dldEhvc3RJbmZlY3Rpdml0eTQgPGVtPkhvc3QgSW5mZWN0aXZpdHk0PC9lbT59PC9saT4NCisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5pbXBsLlNpbXBsZURlbmd1ZU1vZGVsSW1wbCNnZXRIb3N0UHJpbWFyeUluY3ViYXRpb25SYXRlIDxlbT5Ib3N0IFByaW1hcnkgSW5jdWJhdGlvbiBSYXRlPC9lbT59PC9saT4NCisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5pbXBsLlNpbXBsZURlbmd1ZU1vZGVsSW1wbCNnZXRIb3N0UHJpbWFyeVJlY292ZXJ5UmF0ZSA8ZW0+SG9zdCBQcmltYXJ5IFJlY292ZXJ5IFJhdGU8L2VtPn08L2xpPg0KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLmltcGwuU2ltcGxlRGVuZ3VlTW9kZWxJbXBsI2dldEhvc3RQcmltYXJ5SW1tdW5pdHlMb3NzUmF0ZSA8ZW0+SG9zdCBQcmltYXJ5IEltbXVuaXR5IExvc3MgUmF0ZTwvZW0+fTwvbGk+DQorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuaW1wbC5TaW1wbGVEZW5ndWVNb2RlbEltcGwjZ2V0SG9zdFByaW1hcnlEZWF0aFJhdGUgPGVtPkhvc3QgUHJpbWFyeSBEZWF0aCBSYXRlPC9lbT59PC9saT4NCisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5pbXBsLlNpbXBsZURlbmd1ZU1vZGVsSW1wbCNnZXRIb3N0QURFMSA8ZW0+SG9zdCBBREUxPC9lbT59PC9saT4NCisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5pbXBsLlNpbXBsZURlbmd1ZU1vZGVsSW1wbCNnZXRIb3N0QURFMiA8ZW0+SG9zdCBBREUyPC9lbT59PC9saT4NCisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5pbXBsLlNpbXBsZURlbmd1ZU1vZGVsSW1wbCNnZXRIb3N0QURFMyA8ZW0+SG9zdCBBREUzPC9lbT59PC9saT4NCisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5pbXBsLlNpbXBsZURlbmd1ZU1vZGVsSW1wbCNnZXRIb3N0QURFNCA8ZW0+SG9zdCBBREU0PC9lbT59PC9saT4NCisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5pbXBsLlNpbXBsZURlbmd1ZU1vZGVsSW1wbCNnZXRIb3N0U2Vjb25kYXJ5SW5jdWJhdGlvblJhdGUgPGVtPkhvc3QgU2Vjb25kYXJ5IEluY3ViYXRpb24gUmF0ZTwvZW0+fTwvbGk+DQorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuaW1wbC5TaW1wbGVEZW5ndWVNb2RlbEltcGwjZ2V0SG9zdFNlY29uZGFyeVJlY292ZXJ5UmF0ZSA8ZW0+SG9zdCBTZWNvbmRhcnkgUmVjb3ZlcnkgUmF0ZTwvZW0+fTwvbGk+DQorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuaW1wbC5TaW1wbGVEZW5ndWVNb2RlbEltcGwjZ2V0SG9zdFNlY29uZGFyeURlYXRoUmF0ZSA8ZW0+SG9zdCBTZWNvbmRhcnkgRGVhdGggUmF0ZTwvZW0+fTwvbGk+DQorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuaW1wbC5TaW1wbGVEZW5ndWVNb2RlbEltcGwjZ2V0VmVjdG9ySW5mZWN0aXZpdHkxIDxlbT5WZWN0b3IgSW5mZWN0aXZpdHkxPC9lbT59PC9saT4NCisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5pbXBsLlNpbXBsZURlbmd1ZU1vZGVsSW1wbCNnZXRWZWN0b3JJbmZlY3Rpdml0eTIgPGVtPlZlY3RvciBJbmZlY3Rpdml0eTI8L2VtPn08L2xpPg0KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLmltcGwuU2ltcGxlRGVuZ3VlTW9kZWxJbXBsI2dldFZlY3RvckluZmVjdGl2aXR5MyA8ZW0+VmVjdG9yIEluZmVjdGl2aXR5MzwvZW0+fTwvbGk+DQorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuaW1wbC5TaW1wbGVEZW5ndWVNb2RlbEltcGwjZ2V0VmVjdG9ySW5mZWN0aXZpdHk0IDxlbT5WZWN0b3IgSW5mZWN0aXZpdHk0PC9lbT59PC9saT4NCisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5pbXBsLlNpbXBsZURlbmd1ZU1vZGVsSW1wbCNnZXRWZWN0b3JBREUxIDxlbT5WZWN0b3IgQURFMTwvZW0+fTwvbGk+DQorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuaW1wbC5TaW1wbGVEZW5ndWVNb2RlbEltcGwjZ2V0VmVjdG9yQURFMiA8ZW0+VmVjdG9yIEFERTI8L2VtPn08L2xpPg0KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLmltcGwuU2ltcGxlRGVuZ3VlTW9kZWxJbXBsI2dldFZlY3RvckFERTMgPGVtPlZlY3RvciBBREUzPC9lbT59PC9saT4NCisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5pbXBsLlNpbXBsZURlbmd1ZU1vZGVsSW1wbCNnZXRWZWN0b3JBREU0IDxlbT5WZWN0b3IgQURFNDwvZW0+fTwvbGk+DQorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuaW1wbC5TaW1wbGVEZW5ndWVNb2RlbEltcGwjZ2V0VmVjdG9ySW5jdWJhdGlvblJhdGUgPGVtPlZlY3RvciBJbmN1YmF0aW9uIFJhdGU8L2VtPn08L2xpPg0KKyAqIDwvdWw+DQorICogPC9wPg0KKyAqDQorICogQGdlbmVyYXRlZA0KKyAqLw0KK3B1YmxpYyBjbGFzcyBTaW1wbGVEZW5ndWVNb2RlbEltcGwgZXh0ZW5kcyBWZWN0b3JEaXNlYXNlTW9kZWxJbXBsIGltcGxlbWVudHMNCisJCVNpbXBsZURlbmd1ZU1vZGVsIHsNCisJLyoqDQorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRCaXRpbmdSYXRlKCkgPGVtPkJpdGluZyBSYXRlPC9lbT59JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAc2VlICNnZXRCaXRpbmdSYXRlKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBkb3VibGUgQklUSU5HX1JBVEVfRURFRkFVTFQgPSAxLjA7DQorDQorCS8qKg0KKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRCaXRpbmdSYXRlKCkgPGVtPkJpdGluZyBSYXRlPC9lbT59JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAc2VlICNnZXRCaXRpbmdSYXRlKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJcHJvdGVjdGVkIGRvdWJsZSBiaXRpbmdSYXRlID0gQklUSU5HX1JBVEVfRURFRkFVTFQ7DQorDQorCS8qKg0KKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0SG9zdEluZmVjdGl2aXR5MSgpIDxlbT5Ib3N0IEluZmVjdGl2aXR5MTwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tDQorCSAqIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHNlZSAjZ2V0SG9zdEluZmVjdGl2aXR5MSgpDQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgZG91YmxlIEhPU1RfSU5GRUNUSVZJVFkxX0VERUZBVUxUID0gMC41Ow0KKw0KKwkvKioNCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0SG9zdEluZmVjdGl2aXR5MSgpIDxlbT5Ib3N0IEluZmVjdGl2aXR5MTwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tDQorCSAqIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHNlZSAjZ2V0SG9zdEluZmVjdGl2aXR5MSgpDQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCXByb3RlY3RlZCBkb3VibGUgaG9zdEluZmVjdGl2aXR5MSA9IEhPU1RfSU5GRUNUSVZJVFkxX0VERUZBVUxUOw0KKw0KKwkvKioNCisJICogVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldEhvc3RJbmZlY3Rpdml0eTIoKSA8ZW0+SG9zdCBJbmZlY3Rpdml0eTI8L2VtPn0nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLQ0KKwkgKiBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBzZWUgI2dldEhvc3RJbmZlY3Rpdml0eTIoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqIEBvcmRlcmVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIGRvdWJsZSBIT1NUX0lORkVDVElWSVRZMl9FREVGQVVMVCA9IDAuNTsNCisNCisJLyoqDQorCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldEhvc3RJbmZlY3Rpdml0eTIoKSA8ZW0+SG9zdCBJbmZlY3Rpdml0eTI8L2VtPn0nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLQ0KKwkgKiBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBzZWUgI2dldEhvc3RJbmZlY3Rpdml0eTIoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqIEBvcmRlcmVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgZG91YmxlIGhvc3RJbmZlY3Rpdml0eTIgPSBIT1NUX0lORkVDVElWSVRZMl9FREVGQVVMVDsNCisNCisJLyoqDQorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRIb3N0SW5mZWN0aXZpdHkzKCkgPGVtPkhvc3QgSW5mZWN0aXZpdHkzPC9lbT59JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0NCisJICogZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAc2VlICNnZXRIb3N0SW5mZWN0aXZpdHkzKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBkb3VibGUgSE9TVF9JTkZFQ1RJVklUWTNfRURFRkFVTFQgPSAwLjU7DQorDQorCS8qKg0KKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRIb3N0SW5mZWN0aXZpdHkzKCkgPGVtPkhvc3QgSW5mZWN0aXZpdHkzPC9lbT59JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0NCisJICogZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAc2VlICNnZXRIb3N0SW5mZWN0aXZpdHkzKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJcHJvdGVjdGVkIGRvdWJsZSBob3N0SW5mZWN0aXZpdHkzID0gSE9TVF9JTkZFQ1RJVklUWTNfRURFRkFVTFQ7DQorDQorCS8qKg0KKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0SG9zdEluZmVjdGl2aXR5NCgpIDxlbT5Ib3N0IEluZmVjdGl2aXR5NDwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tDQorCSAqIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHNlZSAjZ2V0SG9zdEluZmVjdGl2aXR5NCgpDQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgZG91YmxlIEhPU1RfSU5GRUNUSVZJVFk0X0VERUZBVUxUID0gMC41Ow0KKw0KKwkvKioNCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0SG9zdEluZmVjdGl2aXR5NCgpIDxlbT5Ib3N0IEluZmVjdGl2aXR5NDwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tDQorCSAqIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHNlZSAjZ2V0SG9zdEluZmVjdGl2aXR5NCgpDQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCXByb3RlY3RlZCBkb3VibGUgaG9zdEluZmVjdGl2aXR5NCA9IEhPU1RfSU5GRUNUSVZJVFk0X0VERUZBVUxUOw0KKw0KKwkvKioNCisJICogVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldEhvc3RQcmltYXJ5SW5jdWJhdGlvblJhdGUoKSA8ZW0+SG9zdCBQcmltYXJ5IEluY3ViYXRpb24gUmF0ZTwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jDQorCSAqIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHNlZSAjZ2V0SG9zdFByaW1hcnlJbmN1YmF0aW9uUmF0ZSgpDQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgZG91YmxlIEhPU1RfUFJJTUFSWV9JTkNVQkFUSU9OX1JBVEVfRURFRkFVTFQgPSAwLjI7DQorDQorCS8qKg0KKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRIb3N0UHJpbWFyeUluY3ViYXRpb25SYXRlKCkgPGVtPkhvc3QgUHJpbWFyeSBJbmN1YmF0aW9uIFJhdGU8L2VtPn0nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYw0KKwkgKiAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBzZWUgI2dldEhvc3RQcmltYXJ5SW5jdWJhdGlvblJhdGUoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqIEBvcmRlcmVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgZG91YmxlIGhvc3RQcmltYXJ5SW5jdWJhdGlvblJhdGUgPSBIT1NUX1BSSU1BUllfSU5DVUJBVElPTl9SQVRFX0VERUZBVUxUOw0KKw0KKwkvKioNCisJICogVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldEhvc3RQcmltYXJ5UmVjb3ZlcnlSYXRlKCkgPGVtPkhvc3QgUHJpbWFyeSBSZWNvdmVyeSBSYXRlPC9lbT59JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAc2VlICNnZXRIb3N0UHJpbWFyeVJlY292ZXJ5UmF0ZSgpDQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgZG91YmxlIEhPU1RfUFJJTUFSWV9SRUNPVkVSWV9SQVRFX0VERUZBVUxUID0gMC4xNDsNCisNCisJLyoqDQorCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldEhvc3RQcmltYXJ5UmVjb3ZlcnlSYXRlKCkgPGVtPkhvc3QgUHJpbWFyeSBSZWNvdmVyeSBSYXRlPC9lbT59JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAc2VlICNnZXRIb3N0UHJpbWFyeVJlY292ZXJ5UmF0ZSgpDQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCXByb3RlY3RlZCBkb3VibGUgaG9zdFByaW1hcnlSZWNvdmVyeVJhdGUgPSBIT1NUX1BSSU1BUllfUkVDT1ZFUllfUkFURV9FREVGQVVMVDsNCisNCisJLyoqDQorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRIb3N0UHJpbWFyeUltbXVuaXR5TG9zc1JhdGUoKSA8ZW0+SG9zdCBQcmltYXJ5IEltbXVuaXR5IExvc3MgUmF0ZTwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jDQorCSAqIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHNlZSAjZ2V0SG9zdFByaW1hcnlJbW11bml0eUxvc3NSYXRlKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBkb3VibGUgSE9TVF9QUklNQVJZX0lNTVVOSVRZX0xPU1NfUkFURV9FREVGQVVMVCA9IDAuMDI0Ow0KKw0KKwkvKioNCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0SG9zdFByaW1hcnlJbW11bml0eUxvc3NSYXRlKCkgPGVtPkhvc3QgUHJpbWFyeSBJbW11bml0eSBMb3NzIFJhdGU8L2VtPn0nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYw0KKwkgKiAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBzZWUgI2dldEhvc3RQcmltYXJ5SW1tdW5pdHlMb3NzUmF0ZSgpDQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCXByb3RlY3RlZCBkb3VibGUgaG9zdFByaW1hcnlJbW11bml0eUxvc3NSYXRlID0gSE9TVF9QUklNQVJZX0lNTVVOSVRZX0xPU1NfUkFURV9FREVGQVVMVDsNCisNCisJLyoqDQorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRIb3N0UHJpbWFyeURlYXRoUmF0ZSgpIDxlbT5Ib3N0IFByaW1hcnkgRGVhdGggUmF0ZTwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHNlZSAjZ2V0SG9zdFByaW1hcnlEZWF0aFJhdGUoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqIEBvcmRlcmVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIGRvdWJsZSBIT1NUX1BSSU1BUllfREVBVEhfUkFURV9FREVGQVVMVCA9IDEuMEUtNzsNCisNCisJLyoqDQorCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldEhvc3RQcmltYXJ5RGVhdGhSYXRlKCkgPGVtPkhvc3QgUHJpbWFyeSBEZWF0aCBSYXRlPC9lbT59JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAc2VlICNnZXRIb3N0UHJpbWFyeURlYXRoUmF0ZSgpDQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCXByb3RlY3RlZCBkb3VibGUgaG9zdFByaW1hcnlEZWF0aFJhdGUgPSBIT1NUX1BSSU1BUllfREVBVEhfUkFURV9FREVGQVVMVDsNCisNCisJLyoqDQorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRIb3N0QURFMSgpIDxlbT5Ib3N0IEFERTE8L2VtPn0nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBzZWUgI2dldEhvc3RBREUxKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBkb3VibGUgSE9TVF9BREUxX0VERUZBVUxUID0gMS44Ow0KKw0KKwkvKioNCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0SG9zdEFERTEoKSA8ZW0+SG9zdCBBREUxPC9lbT59JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAc2VlICNnZXRIb3N0QURFMSgpDQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCXByb3RlY3RlZCBkb3VibGUgaG9zdEFERTEgPSBIT1NUX0FERTFfRURFRkFVTFQ7DQorDQorCS8qKg0KKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0SG9zdEFERTIoKSA8ZW0+SG9zdCBBREUyPC9lbT59JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAc2VlICNnZXRIb3N0QURFMigpDQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgZG91YmxlIEhPU1RfQURFMl9FREVGQVVMVCA9IDEuODsNCisNCisJLyoqDQorCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldEhvc3RBREUyKCkgPGVtPkhvc3QgQURFMjwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHNlZSAjZ2V0SG9zdEFERTIoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqIEBvcmRlcmVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgZG91YmxlIGhvc3RBREUyID0gSE9TVF9BREUyX0VERUZBVUxUOw0KKw0KKwkvKioNCisJICogVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldEhvc3RBREUzKCkgPGVtPkhvc3QgQURFMzwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHNlZSAjZ2V0SG9zdEFERTMoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqIEBvcmRlcmVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIGRvdWJsZSBIT1NUX0FERTNfRURFRkFVTFQgPSAxLjg7DQorDQorCS8qKg0KKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRIb3N0QURFMygpIDxlbT5Ib3N0IEFERTM8L2VtPn0nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBzZWUgI2dldEhvc3RBREUzKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJcHJvdGVjdGVkIGRvdWJsZSBob3N0QURFMyA9IEhPU1RfQURFM19FREVGQVVMVDsNCisNCisJLyoqDQorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRIb3N0QURFNCgpIDxlbT5Ib3N0IEFERTQ8L2VtPn0nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBzZWUgI2dldEhvc3RBREU0KCkNCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBkb3VibGUgSE9TVF9BREU0X0VERUZBVUxUID0gMS44Ow0KKw0KKwkvKioNCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0SG9zdEFERTQoKSA8ZW0+SG9zdCBBREU0PC9lbT59JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAc2VlICNnZXRIb3N0QURFNCgpDQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCXByb3RlY3RlZCBkb3VibGUgaG9zdEFERTQgPSBIT1NUX0FERTRfRURFRkFVTFQ7DQorDQorCS8qKg0KKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0SG9zdFNlY29uZGFyeUluY3ViYXRpb25SYXRlKCkgPGVtPkhvc3QgU2Vjb25kYXJ5IEluY3ViYXRpb24gUmF0ZTwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jDQorCSAqIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHNlZSAjZ2V0SG9zdFNlY29uZGFyeUluY3ViYXRpb25SYXRlKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBkb3VibGUgSE9TVF9TRUNPTkRBUllfSU5DVUJBVElPTl9SQVRFX0VERUZBVUxUID0gMC4yOw0KKw0KKwkvKioNCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0SG9zdFNlY29uZGFyeUluY3ViYXRpb25SYXRlKCkgPGVtPkhvc3QgU2Vjb25kYXJ5IEluY3ViYXRpb24gUmF0ZTwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jDQorCSAqIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHNlZSAjZ2V0SG9zdFNlY29uZGFyeUluY3ViYXRpb25SYXRlKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJcHJvdGVjdGVkIGRvdWJsZSBob3N0U2Vjb25kYXJ5SW5jdWJhdGlvblJhdGUgPSBIT1NUX1NFQ09OREFSWV9JTkNVQkFUSU9OX1JBVEVfRURFRkFVTFQ7DQorDQorCS8qKg0KKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0SG9zdFNlY29uZGFyeVJlY292ZXJ5UmF0ZSgpIDxlbT5Ib3N0IFNlY29uZGFyeSBSZWNvdmVyeSBSYXRlPC9lbT59JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MNCisJICogLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAc2VlICNnZXRIb3N0U2Vjb25kYXJ5UmVjb3ZlcnlSYXRlKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBkb3VibGUgSE9TVF9TRUNPTkRBUllfUkVDT1ZFUllfUkFURV9FREVGQVVMVCA9IDAuMTsNCisNCisJLyoqDQorCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldEhvc3RTZWNvbmRhcnlSZWNvdmVyeVJhdGUoKSA8ZW0+SG9zdCBTZWNvbmRhcnkgUmVjb3ZlcnkgUmF0ZTwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jDQorCSAqIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHNlZSAjZ2V0SG9zdFNlY29uZGFyeVJlY292ZXJ5UmF0ZSgpDQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCXByb3RlY3RlZCBkb3VibGUgaG9zdFNlY29uZGFyeVJlY292ZXJ5UmF0ZSA9IEhPU1RfU0VDT05EQVJZX1JFQ09WRVJZX1JBVEVfRURFRkFVTFQ7DQorDQorCS8qKg0KKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0SG9zdFNlY29uZGFyeURlYXRoUmF0ZSgpIDxlbT5Ib3N0IFNlY29uZGFyeSBEZWF0aCBSYXRlPC9lbT59JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAc2VlICNnZXRIb3N0U2Vjb25kYXJ5RGVhdGhSYXRlKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBkb3VibGUgSE9TVF9TRUNPTkRBUllfREVBVEhfUkFURV9FREVGQVVMVCA9IDAuMDAxMjM7DQorDQorCS8qKg0KKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRIb3N0U2Vjb25kYXJ5RGVhdGhSYXRlKCkgPGVtPkhvc3QgU2Vjb25kYXJ5IERlYXRoIFJhdGU8L2VtPn0nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBzZWUgI2dldEhvc3RTZWNvbmRhcnlEZWF0aFJhdGUoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqIEBvcmRlcmVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgZG91YmxlIGhvc3RTZWNvbmRhcnlEZWF0aFJhdGUgPSBIT1NUX1NFQ09OREFSWV9ERUFUSF9SQVRFX0VERUZBVUxUOw0KKw0KKwkvKioNCisJICogVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldFZlY3RvckluZmVjdGl2aXR5MSgpIDxlbT5WZWN0b3IgSW5mZWN0aXZpdHkxPC9lbT59JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0NCisJICogZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAc2VlICNnZXRWZWN0b3JJbmZlY3Rpdml0eTEoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqIEBvcmRlcmVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIGRvdWJsZSBWRUNUT1JfSU5GRUNUSVZJVFkxX0VERUZBVUxUID0gMC41Ow0KKw0KKwkvKioNCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0VmVjdG9ySW5mZWN0aXZpdHkxKCkgPGVtPlZlY3RvciBJbmZlY3Rpdml0eTE8L2VtPn0nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLQ0KKwkgKiBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBzZWUgI2dldFZlY3RvckluZmVjdGl2aXR5MSgpDQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCXByb3RlY3RlZCBkb3VibGUgdmVjdG9ySW5mZWN0aXZpdHkxID0gVkVDVE9SX0lORkVDVElWSVRZMV9FREVGQVVMVDsNCisNCisJLyoqDQorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRWZWN0b3JJbmZlY3Rpdml0eTIoKSA8ZW0+VmVjdG9yIEluZmVjdGl2aXR5MjwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tDQorCSAqIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHNlZSAjZ2V0VmVjdG9ySW5mZWN0aXZpdHkyKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBkb3VibGUgVkVDVE9SX0lORkVDVElWSVRZMl9FREVGQVVMVCA9IDAuNTsNCisNCisJLyoqDQorCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldFZlY3RvckluZmVjdGl2aXR5MigpIDxlbT5WZWN0b3IgSW5mZWN0aXZpdHkyPC9lbT59JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0NCisJICogZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAc2VlICNnZXRWZWN0b3JJbmZlY3Rpdml0eTIoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqIEBvcmRlcmVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgZG91YmxlIHZlY3RvckluZmVjdGl2aXR5MiA9IFZFQ1RPUl9JTkZFQ1RJVklUWTJfRURFRkFVTFQ7DQorDQorCS8qKg0KKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0VmVjdG9ySW5mZWN0aXZpdHkzKCkgPGVtPlZlY3RvciBJbmZlY3Rpdml0eTM8L2VtPn0nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLQ0KKwkgKiBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBzZWUgI2dldFZlY3RvckluZmVjdGl2aXR5MygpDQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgZG91YmxlIFZFQ1RPUl9JTkZFQ1RJVklUWTNfRURFRkFVTFQgPSAwLjU7DQorDQorCS8qKg0KKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRWZWN0b3JJbmZlY3Rpdml0eTMoKSA8ZW0+VmVjdG9yIEluZmVjdGl2aXR5MzwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tDQorCSAqIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHNlZSAjZ2V0VmVjdG9ySW5mZWN0aXZpdHkzKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJcHJvdGVjdGVkIGRvdWJsZSB2ZWN0b3JJbmZlY3Rpdml0eTMgPSBWRUNUT1JfSU5GRUNUSVZJVFkzX0VERUZBVUxUOw0KKw0KKwkvKioNCisJICogVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldFZlY3RvckluZmVjdGl2aXR5NCgpIDxlbT5WZWN0b3IgSW5mZWN0aXZpdHk0PC9lbT59JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0NCisJICogZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAc2VlICNnZXRWZWN0b3JJbmZlY3Rpdml0eTQoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqIEBvcmRlcmVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIGRvdWJsZSBWRUNUT1JfSU5GRUNUSVZJVFk0X0VERUZBVUxUID0gMC41Ow0KKw0KKwkvKioNCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0VmVjdG9ySW5mZWN0aXZpdHk0KCkgPGVtPlZlY3RvciBJbmZlY3Rpdml0eTQ8L2VtPn0nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLQ0KKwkgKiBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBzZWUgI2dldFZlY3RvckluZmVjdGl2aXR5NCgpDQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCXByb3RlY3RlZCBkb3VibGUgdmVjdG9ySW5mZWN0aXZpdHk0ID0gVkVDVE9SX0lORkVDVElWSVRZNF9FREVGQVVMVDsNCisNCisJLyoqDQorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRWZWN0b3JBREUxKCkgPGVtPlZlY3RvciBBREUxPC9lbT59JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAc2VlICNnZXRWZWN0b3JBREUxKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBkb3VibGUgVkVDVE9SX0FERTFfRURFRkFVTFQgPSAxLjg7DQorDQorCS8qKg0KKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRWZWN0b3JBREUxKCkgPGVtPlZlY3RvciBBREUxPC9lbT59JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAc2VlICNnZXRWZWN0b3JBREUxKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJcHJvdGVjdGVkIGRvdWJsZSB2ZWN0b3JBREUxID0gVkVDVE9SX0FERTFfRURFRkFVTFQ7DQorDQorCS8qKg0KKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0VmVjdG9yQURFMigpIDxlbT5WZWN0b3IgQURFMjwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHNlZSAjZ2V0VmVjdG9yQURFMigpDQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgZG91YmxlIFZFQ1RPUl9BREUyX0VERUZBVUxUID0gMS44Ow0KKw0KKwkvKioNCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0VmVjdG9yQURFMigpIDxlbT5WZWN0b3IgQURFMjwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHNlZSAjZ2V0VmVjdG9yQURFMigpDQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCXByb3RlY3RlZCBkb3VibGUgdmVjdG9yQURFMiA9IFZFQ1RPUl9BREUyX0VERUZBVUxUOw0KKw0KKwkvKioNCisJICogVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldFZlY3RvckFERTMoKSA8ZW0+VmVjdG9yIEFERTM8L2VtPn0nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBzZWUgI2dldFZlY3RvckFERTMoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqIEBvcmRlcmVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIGRvdWJsZSBWRUNUT1JfQURFM19FREVGQVVMVCA9IDEuODsNCisNCisJLyoqDQorCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldFZlY3RvckFERTMoKSA8ZW0+VmVjdG9yIEFERTM8L2VtPn0nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBzZWUgI2dldFZlY3RvckFERTMoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqIEBvcmRlcmVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgZG91YmxlIHZlY3RvckFERTMgPSBWRUNUT1JfQURFM19FREVGQVVMVDsNCisNCisJLyoqDQorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRWZWN0b3JBREU0KCkgPGVtPlZlY3RvciBBREU0PC9lbT59JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAc2VlICNnZXRWZWN0b3JBREU0KCkNCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBkb3VibGUgVkVDVE9SX0FERTRfRURFRkFVTFQgPSAxLjg7DQorDQorCS8qKg0KKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRWZWN0b3JBREU0KCkgPGVtPlZlY3RvciBBREU0PC9lbT59JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAc2VlICNnZXRWZWN0b3JBREU0KCkNCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJcHJvdGVjdGVkIGRvdWJsZSB2ZWN0b3JBREU0ID0gVkVDVE9SX0FERTRfRURFRkFVTFQ7DQorDQorCS8qKg0KKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0VmVjdG9ySW5jdWJhdGlvblJhdGUoKSA8ZW0+VmVjdG9yIEluY3ViYXRpb24gUmF0ZTwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tDQorCSAqIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHNlZSAjZ2V0VmVjdG9ySW5jdWJhdGlvblJhdGUoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqIEBvcmRlcmVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIGRvdWJsZSBWRUNUT1JfSU5DVUJBVElPTl9SQVRFX0VERUZBVUxUID0gMC4xOw0KKw0KKwkvKioNCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0VmVjdG9ySW5jdWJhdGlvblJhdGUoKSA8ZW0+VmVjdG9yIEluY3ViYXRpb24gUmF0ZTwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tDQorCSAqIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHNlZSAjZ2V0VmVjdG9ySW5jdWJhdGlvblJhdGUoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqIEBvcmRlcmVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgZG91YmxlIHZlY3RvckluY3ViYXRpb25SYXRlID0gVkVDVE9SX0lOQ1VCQVRJT05fUkFURV9FREVGQVVMVDsNCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiANCisJICogQGdlbmVyYXRlZCBOT1QNCisJICovDQorCXB1YmxpYyBTaW1wbGVEZW5ndWVNb2RlbEltcGwoKSB7DQorCQlzdXBlcigpOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJQE92ZXJyaWRlDQorCXByb3RlY3RlZCBFQ2xhc3MgZVN0YXRpY0NsYXNzKCkgew0KKwkJcmV0dXJuIFZlY3RvclBhY2thZ2UuTGl0ZXJhbHMuU0lNUExFX0RFTkdVRV9NT0RFTDsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBkb3VibGUgZ2V0Qml0aW5nUmF0ZSgpIHsNCisJCXJldHVybiBiaXRpbmdSYXRlOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIHZvaWQgc2V0Qml0aW5nUmF0ZShkb3VibGUgbmV3Qml0aW5nUmF0ZSkgew0KKwkJZG91YmxlIG9sZEJpdGluZ1JhdGUgPSBiaXRpbmdSYXRlOw0KKwkJYml0aW5nUmF0ZSA9IG5ld0JpdGluZ1JhdGU7DQorCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpDQorCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgVmVjdG9yUGFja2FnZS5TSU1QTEVfREVOR1VFX01PREVMX19CSVRJTkdfUkFURSwgb2xkQml0aW5nUmF0ZSwgYml0aW5nUmF0ZSkpOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIGRvdWJsZSBnZXRIb3N0SW5mZWN0aXZpdHkxKCkgew0KKwkJcmV0dXJuIGhvc3RJbmZlY3Rpdml0eTE7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgdm9pZCBzZXRIb3N0SW5mZWN0aXZpdHkxKGRvdWJsZSBuZXdIb3N0SW5mZWN0aXZpdHkxKSB7DQorCQlkb3VibGUgb2xkSG9zdEluZmVjdGl2aXR5MSA9IGhvc3RJbmZlY3Rpdml0eTE7DQorCQlob3N0SW5mZWN0aXZpdHkxID0gbmV3SG9zdEluZmVjdGl2aXR5MTsNCisJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkNCisJCQllTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBWZWN0b3JQYWNrYWdlLlNJTVBMRV9ERU5HVUVfTU9ERUxfX0hPU1RfSU5GRUNUSVZJVFkxLCBvbGRIb3N0SW5mZWN0aXZpdHkxLCBob3N0SW5mZWN0aXZpdHkxKSk7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgZG91YmxlIGdldEhvc3RJbmZlY3Rpdml0eTIoKSB7DQorCQlyZXR1cm4gaG9zdEluZmVjdGl2aXR5MjsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyB2b2lkIHNldEhvc3RJbmZlY3Rpdml0eTIoZG91YmxlIG5ld0hvc3RJbmZlY3Rpdml0eTIpIHsNCisJCWRvdWJsZSBvbGRIb3N0SW5mZWN0aXZpdHkyID0gaG9zdEluZmVjdGl2aXR5MjsNCisJCWhvc3RJbmZlY3Rpdml0eTIgPSBuZXdIb3N0SW5mZWN0aXZpdHkyOw0KKwkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQ0KKwkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIFZlY3RvclBhY2thZ2UuU0lNUExFX0RFTkdVRV9NT0RFTF9fSE9TVF9JTkZFQ1RJVklUWTIsIG9sZEhvc3RJbmZlY3Rpdml0eTIsIGhvc3RJbmZlY3Rpdml0eTIpKTsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBkb3VibGUgZ2V0SG9zdEluZmVjdGl2aXR5MygpIHsNCisJCXJldHVybiBob3N0SW5mZWN0aXZpdHkzOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIHZvaWQgc2V0SG9zdEluZmVjdGl2aXR5Myhkb3VibGUgbmV3SG9zdEluZmVjdGl2aXR5Mykgew0KKwkJZG91YmxlIG9sZEhvc3RJbmZlY3Rpdml0eTMgPSBob3N0SW5mZWN0aXZpdHkzOw0KKwkJaG9zdEluZmVjdGl2aXR5MyA9IG5ld0hvc3RJbmZlY3Rpdml0eTM7DQorCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpDQorCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgVmVjdG9yUGFja2FnZS5TSU1QTEVfREVOR1VFX01PREVMX19IT1NUX0lORkVDVElWSVRZMywgb2xkSG9zdEluZmVjdGl2aXR5MywgaG9zdEluZmVjdGl2aXR5MykpOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIGRvdWJsZSBnZXRIb3N0SW5mZWN0aXZpdHk0KCkgew0KKwkJcmV0dXJuIGhvc3RJbmZlY3Rpdml0eTQ7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgdm9pZCBzZXRIb3N0SW5mZWN0aXZpdHk0KGRvdWJsZSBuZXdIb3N0SW5mZWN0aXZpdHk0KSB7DQorCQlkb3VibGUgb2xkSG9zdEluZmVjdGl2aXR5NCA9IGhvc3RJbmZlY3Rpdml0eTQ7DQorCQlob3N0SW5mZWN0aXZpdHk0ID0gbmV3SG9zdEluZmVjdGl2aXR5NDsNCisJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkNCisJCQllTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBWZWN0b3JQYWNrYWdlLlNJTVBMRV9ERU5HVUVfTU9ERUxfX0hPU1RfSU5GRUNUSVZJVFk0LCBvbGRIb3N0SW5mZWN0aXZpdHk0LCBob3N0SW5mZWN0aXZpdHk0KSk7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgZG91YmxlIGdldEhvc3RQcmltYXJ5SW5jdWJhdGlvblJhdGUoKSB7DQorCQlyZXR1cm4gaG9zdFByaW1hcnlJbmN1YmF0aW9uUmF0ZTsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyB2b2lkIHNldEhvc3RQcmltYXJ5SW5jdWJhdGlvblJhdGUoZG91YmxlIG5ld0hvc3RQcmltYXJ5SW5jdWJhdGlvblJhdGUpIHsNCisJCWRvdWJsZSBvbGRIb3N0UHJpbWFyeUluY3ViYXRpb25SYXRlID0gaG9zdFByaW1hcnlJbmN1YmF0aW9uUmF0ZTsNCisJCWhvc3RQcmltYXJ5SW5jdWJhdGlvblJhdGUgPSBuZXdIb3N0UHJpbWFyeUluY3ViYXRpb25SYXRlOw0KKwkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQ0KKwkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIFZlY3RvclBhY2thZ2UuU0lNUExFX0RFTkdVRV9NT0RFTF9fSE9TVF9QUklNQVJZX0lOQ1VCQVRJT05fUkFURSwgb2xkSG9zdFByaW1hcnlJbmN1YmF0aW9uUmF0ZSwgaG9zdFByaW1hcnlJbmN1YmF0aW9uUmF0ZSkpOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIGRvdWJsZSBnZXRIb3N0UHJpbWFyeVJlY292ZXJ5UmF0ZSgpIHsNCisJCXJldHVybiBob3N0UHJpbWFyeVJlY292ZXJ5UmF0ZTsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyB2b2lkIHNldEhvc3RQcmltYXJ5UmVjb3ZlcnlSYXRlKGRvdWJsZSBuZXdIb3N0UHJpbWFyeVJlY292ZXJ5UmF0ZSkgew0KKwkJZG91YmxlIG9sZEhvc3RQcmltYXJ5UmVjb3ZlcnlSYXRlID0gaG9zdFByaW1hcnlSZWNvdmVyeVJhdGU7DQorCQlob3N0UHJpbWFyeVJlY292ZXJ5UmF0ZSA9IG5ld0hvc3RQcmltYXJ5UmVjb3ZlcnlSYXRlOw0KKwkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQ0KKwkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIFZlY3RvclBhY2thZ2UuU0lNUExFX0RFTkdVRV9NT0RFTF9fSE9TVF9QUklNQVJZX1JFQ09WRVJZX1JBVEUsIG9sZEhvc3RQcmltYXJ5UmVjb3ZlcnlSYXRlLCBob3N0UHJpbWFyeVJlY292ZXJ5UmF0ZSkpOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIGRvdWJsZSBnZXRIb3N0UHJpbWFyeUltbXVuaXR5TG9zc1JhdGUoKSB7DQorCQlyZXR1cm4gaG9zdFByaW1hcnlJbW11bml0eUxvc3NSYXRlOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIHZvaWQgc2V0SG9zdFByaW1hcnlJbW11bml0eUxvc3NSYXRlKA0KKwkJCWRvdWJsZSBuZXdIb3N0UHJpbWFyeUltbXVuaXR5TG9zc1JhdGUpIHsNCisJCWRvdWJsZSBvbGRIb3N0UHJpbWFyeUltbXVuaXR5TG9zc1JhdGUgPSBob3N0UHJpbWFyeUltbXVuaXR5TG9zc1JhdGU7DQorCQlob3N0UHJpbWFyeUltbXVuaXR5TG9zc1JhdGUgPSBuZXdIb3N0UHJpbWFyeUltbXVuaXR5TG9zc1JhdGU7DQorCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpDQorCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgVmVjdG9yUGFja2FnZS5TSU1QTEVfREVOR1VFX01PREVMX19IT1NUX1BSSU1BUllfSU1NVU5JVFlfTE9TU19SQVRFLCBvbGRIb3N0UHJpbWFyeUltbXVuaXR5TG9zc1JhdGUsIGhvc3RQcmltYXJ5SW1tdW5pdHlMb3NzUmF0ZSkpOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIGRvdWJsZSBnZXRIb3N0UHJpbWFyeURlYXRoUmF0ZSgpIHsNCisJCXJldHVybiBob3N0UHJpbWFyeURlYXRoUmF0ZTsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyB2b2lkIHNldEhvc3RQcmltYXJ5RGVhdGhSYXRlKGRvdWJsZSBuZXdIb3N0UHJpbWFyeURlYXRoUmF0ZSkgew0KKwkJZG91YmxlIG9sZEhvc3RQcmltYXJ5RGVhdGhSYXRlID0gaG9zdFByaW1hcnlEZWF0aFJhdGU7DQorCQlob3N0UHJpbWFyeURlYXRoUmF0ZSA9IG5ld0hvc3RQcmltYXJ5RGVhdGhSYXRlOw0KKwkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQ0KKwkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIFZlY3RvclBhY2thZ2UuU0lNUExFX0RFTkdVRV9NT0RFTF9fSE9TVF9QUklNQVJZX0RFQVRIX1JBVEUsIG9sZEhvc3RQcmltYXJ5RGVhdGhSYXRlLCBob3N0UHJpbWFyeURlYXRoUmF0ZSkpOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIGRvdWJsZSBnZXRIb3N0QURFMSgpIHsNCisJCXJldHVybiBob3N0QURFMTsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyB2b2lkIHNldEhvc3RBREUxKGRvdWJsZSBuZXdIb3N0QURFMSkgew0KKwkJZG91YmxlIG9sZEhvc3RBREUxID0gaG9zdEFERTE7DQorCQlob3N0QURFMSA9IG5ld0hvc3RBREUxOw0KKwkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQ0KKwkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIFZlY3RvclBhY2thZ2UuU0lNUExFX0RFTkdVRV9NT0RFTF9fSE9TVF9BREUxLCBvbGRIb3N0QURFMSwgaG9zdEFERTEpKTsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBkb3VibGUgZ2V0SG9zdEFERTIoKSB7DQorCQlyZXR1cm4gaG9zdEFERTI7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgdm9pZCBzZXRIb3N0QURFMihkb3VibGUgbmV3SG9zdEFERTIpIHsNCisJCWRvdWJsZSBvbGRIb3N0QURFMiA9IGhvc3RBREUyOw0KKwkJaG9zdEFERTIgPSBuZXdIb3N0QURFMjsNCisJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkNCisJCQllTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBWZWN0b3JQYWNrYWdlLlNJTVBMRV9ERU5HVUVfTU9ERUxfX0hPU1RfQURFMiwgb2xkSG9zdEFERTIsIGhvc3RBREUyKSk7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgZG91YmxlIGdldEhvc3RBREUzKCkgew0KKwkJcmV0dXJuIGhvc3RBREUzOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIHZvaWQgc2V0SG9zdEFERTMoZG91YmxlIG5ld0hvc3RBREUzKSB7DQorCQlkb3VibGUgb2xkSG9zdEFERTMgPSBob3N0QURFMzsNCisJCWhvc3RBREUzID0gbmV3SG9zdEFERTM7DQorCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpDQorCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgVmVjdG9yUGFja2FnZS5TSU1QTEVfREVOR1VFX01PREVMX19IT1NUX0FERTMsIG9sZEhvc3RBREUzLCBob3N0QURFMykpOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIGRvdWJsZSBnZXRIb3N0QURFNCgpIHsNCisJCXJldHVybiBob3N0QURFNDsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyB2b2lkIHNldEhvc3RBREU0KGRvdWJsZSBuZXdIb3N0QURFNCkgew0KKwkJZG91YmxlIG9sZEhvc3RBREU0ID0gaG9zdEFERTQ7DQorCQlob3N0QURFNCA9IG5ld0hvc3RBREU0Ow0KKwkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQ0KKwkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIFZlY3RvclBhY2thZ2UuU0lNUExFX0RFTkdVRV9NT0RFTF9fSE9TVF9BREU0LCBvbGRIb3N0QURFNCwgaG9zdEFERTQpKTsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBkb3VibGUgZ2V0SG9zdFNlY29uZGFyeUluY3ViYXRpb25SYXRlKCkgew0KKwkJcmV0dXJuIGhvc3RTZWNvbmRhcnlJbmN1YmF0aW9uUmF0ZTsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyB2b2lkIHNldEhvc3RTZWNvbmRhcnlJbmN1YmF0aW9uUmF0ZSgNCisJCQlkb3VibGUgbmV3SG9zdFNlY29uZGFyeUluY3ViYXRpb25SYXRlKSB7DQorCQlkb3VibGUgb2xkSG9zdFNlY29uZGFyeUluY3ViYXRpb25SYXRlID0gaG9zdFNlY29uZGFyeUluY3ViYXRpb25SYXRlOw0KKwkJaG9zdFNlY29uZGFyeUluY3ViYXRpb25SYXRlID0gbmV3SG9zdFNlY29uZGFyeUluY3ViYXRpb25SYXRlOw0KKwkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQ0KKwkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIFZlY3RvclBhY2thZ2UuU0lNUExFX0RFTkdVRV9NT0RFTF9fSE9TVF9TRUNPTkRBUllfSU5DVUJBVElPTl9SQVRFLCBvbGRIb3N0U2Vjb25kYXJ5SW5jdWJhdGlvblJhdGUsIGhvc3RTZWNvbmRhcnlJbmN1YmF0aW9uUmF0ZSkpOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIGRvdWJsZSBnZXRIb3N0U2Vjb25kYXJ5UmVjb3ZlcnlSYXRlKCkgew0KKwkJcmV0dXJuIGhvc3RTZWNvbmRhcnlSZWNvdmVyeVJhdGU7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgdm9pZCBzZXRIb3N0U2Vjb25kYXJ5UmVjb3ZlcnlSYXRlKGRvdWJsZSBuZXdIb3N0U2Vjb25kYXJ5UmVjb3ZlcnlSYXRlKSB7DQorCQlkb3VibGUgb2xkSG9zdFNlY29uZGFyeVJlY292ZXJ5UmF0ZSA9IGhvc3RTZWNvbmRhcnlSZWNvdmVyeVJhdGU7DQorCQlob3N0U2Vjb25kYXJ5UmVjb3ZlcnlSYXRlID0gbmV3SG9zdFNlY29uZGFyeVJlY292ZXJ5UmF0ZTsNCisJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkNCisJCQllTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBWZWN0b3JQYWNrYWdlLlNJTVBMRV9ERU5HVUVfTU9ERUxfX0hPU1RfU0VDT05EQVJZX1JFQ09WRVJZX1JBVEUsIG9sZEhvc3RTZWNvbmRhcnlSZWNvdmVyeVJhdGUsIGhvc3RTZWNvbmRhcnlSZWNvdmVyeVJhdGUpKTsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBkb3VibGUgZ2V0SG9zdFNlY29uZGFyeURlYXRoUmF0ZSgpIHsNCisJCXJldHVybiBob3N0U2Vjb25kYXJ5RGVhdGhSYXRlOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIHZvaWQgc2V0SG9zdFNlY29uZGFyeURlYXRoUmF0ZShkb3VibGUgbmV3SG9zdFNlY29uZGFyeURlYXRoUmF0ZSkgew0KKwkJZG91YmxlIG9sZEhvc3RTZWNvbmRhcnlEZWF0aFJhdGUgPSBob3N0U2Vjb25kYXJ5RGVhdGhSYXRlOw0KKwkJaG9zdFNlY29uZGFyeURlYXRoUmF0ZSA9IG5ld0hvc3RTZWNvbmRhcnlEZWF0aFJhdGU7DQorCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpDQorCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgVmVjdG9yUGFja2FnZS5TSU1QTEVfREVOR1VFX01PREVMX19IT1NUX1NFQ09OREFSWV9ERUFUSF9SQVRFLCBvbGRIb3N0U2Vjb25kYXJ5RGVhdGhSYXRlLCBob3N0U2Vjb25kYXJ5RGVhdGhSYXRlKSk7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgZG91YmxlIGdldFZlY3RvckluZmVjdGl2aXR5MSgpIHsNCisJCXJldHVybiB2ZWN0b3JJbmZlY3Rpdml0eTE7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgdm9pZCBzZXRWZWN0b3JJbmZlY3Rpdml0eTEoZG91YmxlIG5ld1ZlY3RvckluZmVjdGl2aXR5MSkgew0KKwkJZG91YmxlIG9sZFZlY3RvckluZmVjdGl2aXR5MSA9IHZlY3RvckluZmVjdGl2aXR5MTsNCisJCXZlY3RvckluZmVjdGl2aXR5MSA9IG5ld1ZlY3RvckluZmVjdGl2aXR5MTsNCisJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkNCisJCQllTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBWZWN0b3JQYWNrYWdlLlNJTVBMRV9ERU5HVUVfTU9ERUxfX1ZFQ1RPUl9JTkZFQ1RJVklUWTEsIG9sZFZlY3RvckluZmVjdGl2aXR5MSwgdmVjdG9ySW5mZWN0aXZpdHkxKSk7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgZG91YmxlIGdldFZlY3RvckluZmVjdGl2aXR5MigpIHsNCisJCXJldHVybiB2ZWN0b3JJbmZlY3Rpdml0eTI7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgdm9pZCBzZXRWZWN0b3JJbmZlY3Rpdml0eTIoZG91YmxlIG5ld1ZlY3RvckluZmVjdGl2aXR5Mikgew0KKwkJZG91YmxlIG9sZFZlY3RvckluZmVjdGl2aXR5MiA9IHZlY3RvckluZmVjdGl2aXR5MjsNCisJCXZlY3RvckluZmVjdGl2aXR5MiA9IG5ld1ZlY3RvckluZmVjdGl2aXR5MjsNCisJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkNCisJCQllTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBWZWN0b3JQYWNrYWdlLlNJTVBMRV9ERU5HVUVfTU9ERUxfX1ZFQ1RPUl9JTkZFQ1RJVklUWTIsIG9sZFZlY3RvckluZmVjdGl2aXR5MiwgdmVjdG9ySW5mZWN0aXZpdHkyKSk7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgZG91YmxlIGdldFZlY3RvckluZmVjdGl2aXR5MygpIHsNCisJCXJldHVybiB2ZWN0b3JJbmZlY3Rpdml0eTM7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgdm9pZCBzZXRWZWN0b3JJbmZlY3Rpdml0eTMoZG91YmxlIG5ld1ZlY3RvckluZmVjdGl2aXR5Mykgew0KKwkJZG91YmxlIG9sZFZlY3RvckluZmVjdGl2aXR5MyA9IHZlY3RvckluZmVjdGl2aXR5MzsNCisJCXZlY3RvckluZmVjdGl2aXR5MyA9IG5ld1ZlY3RvckluZmVjdGl2aXR5MzsNCisJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkNCisJCQllTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBWZWN0b3JQYWNrYWdlLlNJTVBMRV9ERU5HVUVfTU9ERUxfX1ZFQ1RPUl9JTkZFQ1RJVklUWTMsIG9sZFZlY3RvckluZmVjdGl2aXR5MywgdmVjdG9ySW5mZWN0aXZpdHkzKSk7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgZG91YmxlIGdldFZlY3RvckluZmVjdGl2aXR5NCgpIHsNCisJCXJldHVybiB2ZWN0b3JJbmZlY3Rpdml0eTQ7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgdm9pZCBzZXRWZWN0b3JJbmZlY3Rpdml0eTQoZG91YmxlIG5ld1ZlY3RvckluZmVjdGl2aXR5NCkgew0KKwkJZG91YmxlIG9sZFZlY3RvckluZmVjdGl2aXR5NCA9IHZlY3RvckluZmVjdGl2aXR5NDsNCisJCXZlY3RvckluZmVjdGl2aXR5NCA9IG5ld1ZlY3RvckluZmVjdGl2aXR5NDsNCisJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkNCisJCQllTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBWZWN0b3JQYWNrYWdlLlNJTVBMRV9ERU5HVUVfTU9ERUxfX1ZFQ1RPUl9JTkZFQ1RJVklUWTQsIG9sZFZlY3RvckluZmVjdGl2aXR5NCwgdmVjdG9ySW5mZWN0aXZpdHk0KSk7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgZG91YmxlIGdldFZlY3RvckFERTEoKSB7DQorCQlyZXR1cm4gdmVjdG9yQURFMTsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyB2b2lkIHNldFZlY3RvckFERTEoZG91YmxlIG5ld1ZlY3RvckFERTEpIHsNCisJCWRvdWJsZSBvbGRWZWN0b3JBREUxID0gdmVjdG9yQURFMTsNCisJCXZlY3RvckFERTEgPSBuZXdWZWN0b3JBREUxOw0KKwkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQ0KKwkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIFZlY3RvclBhY2thZ2UuU0lNUExFX0RFTkdVRV9NT0RFTF9fVkVDVE9SX0FERTEsIG9sZFZlY3RvckFERTEsIHZlY3RvckFERTEpKTsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBkb3VibGUgZ2V0VmVjdG9yQURFMigpIHsNCisJCXJldHVybiB2ZWN0b3JBREUyOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIHZvaWQgc2V0VmVjdG9yQURFMihkb3VibGUgbmV3VmVjdG9yQURFMikgew0KKwkJZG91YmxlIG9sZFZlY3RvckFERTIgPSB2ZWN0b3JBREUyOw0KKwkJdmVjdG9yQURFMiA9IG5ld1ZlY3RvckFERTI7DQorCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpDQorCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgVmVjdG9yUGFja2FnZS5TSU1QTEVfREVOR1VFX01PREVMX19WRUNUT1JfQURFMiwgb2xkVmVjdG9yQURFMiwgdmVjdG9yQURFMikpOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIGRvdWJsZSBnZXRWZWN0b3JBREUzKCkgew0KKwkJcmV0dXJuIHZlY3RvckFERTM7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgdm9pZCBzZXRWZWN0b3JBREUzKGRvdWJsZSBuZXdWZWN0b3JBREUzKSB7DQorCQlkb3VibGUgb2xkVmVjdG9yQURFMyA9IHZlY3RvckFERTM7DQorCQl2ZWN0b3JBREUzID0gbmV3VmVjdG9yQURFMzsNCisJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkNCisJCQllTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBWZWN0b3JQYWNrYWdlLlNJTVBMRV9ERU5HVUVfTU9ERUxfX1ZFQ1RPUl9BREUzLCBvbGRWZWN0b3JBREUzLCB2ZWN0b3JBREUzKSk7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgZG91YmxlIGdldFZlY3RvckFERTQoKSB7DQorCQlyZXR1cm4gdmVjdG9yQURFNDsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyB2b2lkIHNldFZlY3RvckFERTQoZG91YmxlIG5ld1ZlY3RvckFERTQpIHsNCisJCWRvdWJsZSBvbGRWZWN0b3JBREU0ID0gdmVjdG9yQURFNDsNCisJCXZlY3RvckFERTQgPSBuZXdWZWN0b3JBREU0Ow0KKwkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQ0KKwkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIFZlY3RvclBhY2thZ2UuU0lNUExFX0RFTkdVRV9NT0RFTF9fVkVDVE9SX0FERTQsIG9sZFZlY3RvckFERTQsIHZlY3RvckFERTQpKTsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBkb3VibGUgZ2V0VmVjdG9ySW5jdWJhdGlvblJhdGUoKSB7DQorCQlyZXR1cm4gdmVjdG9ySW5jdWJhdGlvblJhdGU7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgdm9pZCBzZXRWZWN0b3JJbmN1YmF0aW9uUmF0ZShkb3VibGUgbmV3VmVjdG9ySW5jdWJhdGlvblJhdGUpIHsNCisJCWRvdWJsZSBvbGRWZWN0b3JJbmN1YmF0aW9uUmF0ZSA9IHZlY3RvckluY3ViYXRpb25SYXRlOw0KKwkJdmVjdG9ySW5jdWJhdGlvblJhdGUgPSBuZXdWZWN0b3JJbmN1YmF0aW9uUmF0ZTsNCisJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkNCisJCQllTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBWZWN0b3JQYWNrYWdlLlNJTVBMRV9ERU5HVUVfTU9ERUxfX1ZFQ1RPUl9JTkNVQkFUSU9OX1JBVEUsIG9sZFZlY3RvckluY3ViYXRpb25SYXRlLCB2ZWN0b3JJbmN1YmF0aW9uUmF0ZSkpOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJQE92ZXJyaWRlDQorCXB1YmxpYyBPYmplY3QgZUdldChpbnQgZmVhdHVyZUlELCBib29sZWFuIHJlc29sdmUsIGJvb2xlYW4gY29yZVR5cGUpIHsNCisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLlNJTVBMRV9ERU5HVUVfTU9ERUxfX0JJVElOR19SQVRFOg0KKwkJCQlyZXR1cm4gZ2V0Qml0aW5nUmF0ZSgpOw0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5TSU1QTEVfREVOR1VFX01PREVMX19IT1NUX0lORkVDVElWSVRZMToNCisJCQkJcmV0dXJuIGdldEhvc3RJbmZlY3Rpdml0eTEoKTsNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuU0lNUExFX0RFTkdVRV9NT0RFTF9fSE9TVF9JTkZFQ1RJVklUWTI6DQorCQkJCXJldHVybiBnZXRIb3N0SW5mZWN0aXZpdHkyKCk7DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLlNJTVBMRV9ERU5HVUVfTU9ERUxfX0hPU1RfSU5GRUNUSVZJVFkzOg0KKwkJCQlyZXR1cm4gZ2V0SG9zdEluZmVjdGl2aXR5MygpOw0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5TSU1QTEVfREVOR1VFX01PREVMX19IT1NUX0lORkVDVElWSVRZNDoNCisJCQkJcmV0dXJuIGdldEhvc3RJbmZlY3Rpdml0eTQoKTsNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuU0lNUExFX0RFTkdVRV9NT0RFTF9fSE9TVF9QUklNQVJZX0lOQ1VCQVRJT05fUkFURToNCisJCQkJcmV0dXJuIGdldEhvc3RQcmltYXJ5SW5jdWJhdGlvblJhdGUoKTsNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuU0lNUExFX0RFTkdVRV9NT0RFTF9fSE9TVF9QUklNQVJZX1JFQ09WRVJZX1JBVEU6DQorCQkJCXJldHVybiBnZXRIb3N0UHJpbWFyeVJlY292ZXJ5UmF0ZSgpOw0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5TSU1QTEVfREVOR1VFX01PREVMX19IT1NUX1BSSU1BUllfSU1NVU5JVFlfTE9TU19SQVRFOg0KKwkJCQlyZXR1cm4gZ2V0SG9zdFByaW1hcnlJbW11bml0eUxvc3NSYXRlKCk7DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLlNJTVBMRV9ERU5HVUVfTU9ERUxfX0hPU1RfUFJJTUFSWV9ERUFUSF9SQVRFOg0KKwkJCQlyZXR1cm4gZ2V0SG9zdFByaW1hcnlEZWF0aFJhdGUoKTsNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuU0lNUExFX0RFTkdVRV9NT0RFTF9fSE9TVF9BREUxOg0KKwkJCQlyZXR1cm4gZ2V0SG9zdEFERTEoKTsNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuU0lNUExFX0RFTkdVRV9NT0RFTF9fSE9TVF9BREUyOg0KKwkJCQlyZXR1cm4gZ2V0SG9zdEFERTIoKTsNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuU0lNUExFX0RFTkdVRV9NT0RFTF9fSE9TVF9BREUzOg0KKwkJCQlyZXR1cm4gZ2V0SG9zdEFERTMoKTsNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuU0lNUExFX0RFTkdVRV9NT0RFTF9fSE9TVF9BREU0Og0KKwkJCQlyZXR1cm4gZ2V0SG9zdEFERTQoKTsNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuU0lNUExFX0RFTkdVRV9NT0RFTF9fSE9TVF9TRUNPTkRBUllfSU5DVUJBVElPTl9SQVRFOg0KKwkJCQlyZXR1cm4gZ2V0SG9zdFNlY29uZGFyeUluY3ViYXRpb25SYXRlKCk7DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLlNJTVBMRV9ERU5HVUVfTU9ERUxfX0hPU1RfU0VDT05EQVJZX1JFQ09WRVJZX1JBVEU6DQorCQkJCXJldHVybiBnZXRIb3N0U2Vjb25kYXJ5UmVjb3ZlcnlSYXRlKCk7DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLlNJTVBMRV9ERU5HVUVfTU9ERUxfX0hPU1RfU0VDT05EQVJZX0RFQVRIX1JBVEU6DQorCQkJCXJldHVybiBnZXRIb3N0U2Vjb25kYXJ5RGVhdGhSYXRlKCk7DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLlNJTVBMRV9ERU5HVUVfTU9ERUxfX1ZFQ1RPUl9JTkZFQ1RJVklUWTE6DQorCQkJCXJldHVybiBnZXRWZWN0b3JJbmZlY3Rpdml0eTEoKTsNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuU0lNUExFX0RFTkdVRV9NT0RFTF9fVkVDVE9SX0lORkVDVElWSVRZMjoNCisJCQkJcmV0dXJuIGdldFZlY3RvckluZmVjdGl2aXR5MigpOw0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5TSU1QTEVfREVOR1VFX01PREVMX19WRUNUT1JfSU5GRUNUSVZJVFkzOg0KKwkJCQlyZXR1cm4gZ2V0VmVjdG9ySW5mZWN0aXZpdHkzKCk7DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLlNJTVBMRV9ERU5HVUVfTU9ERUxfX1ZFQ1RPUl9JTkZFQ1RJVklUWTQ6DQorCQkJCXJldHVybiBnZXRWZWN0b3JJbmZlY3Rpdml0eTQoKTsNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuU0lNUExFX0RFTkdVRV9NT0RFTF9fVkVDVE9SX0FERTE6DQorCQkJCXJldHVybiBnZXRWZWN0b3JBREUxKCk7DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLlNJTVBMRV9ERU5HVUVfTU9ERUxfX1ZFQ1RPUl9BREUyOg0KKwkJCQlyZXR1cm4gZ2V0VmVjdG9yQURFMigpOw0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5TSU1QTEVfREVOR1VFX01PREVMX19WRUNUT1JfQURFMzoNCisJCQkJcmV0dXJuIGdldFZlY3RvckFERTMoKTsNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuU0lNUExFX0RFTkdVRV9NT0RFTF9fVkVDVE9SX0FERTQ6DQorCQkJCXJldHVybiBnZXRWZWN0b3JBREU0KCk7DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLlNJTVBMRV9ERU5HVUVfTU9ERUxfX1ZFQ1RPUl9JTkNVQkFUSU9OX1JBVEU6DQorCQkJCXJldHVybiBnZXRWZWN0b3JJbmN1YmF0aW9uUmF0ZSgpOw0KKwkJfQ0KKwkJcmV0dXJuIHN1cGVyLmVHZXQoZmVhdHVyZUlELCByZXNvbHZlLCBjb3JlVHlwZSk7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlAT3ZlcnJpZGUNCisJcHVibGljIHZvaWQgZVNldChpbnQgZmVhdHVyZUlELCBPYmplY3QgbmV3VmFsdWUpIHsNCisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLlNJTVBMRV9ERU5HVUVfTU9ERUxfX0JJVElOR19SQVRFOg0KKwkJCQlzZXRCaXRpbmdSYXRlKChEb3VibGUpbmV3VmFsdWUpOw0KKwkJCQlyZXR1cm47DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLlNJTVBMRV9ERU5HVUVfTU9ERUxfX0hPU1RfSU5GRUNUSVZJVFkxOg0KKwkJCQlzZXRIb3N0SW5mZWN0aXZpdHkxKChEb3VibGUpbmV3VmFsdWUpOw0KKwkJCQlyZXR1cm47DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLlNJTVBMRV9ERU5HVUVfTU9ERUxfX0hPU1RfSU5GRUNUSVZJVFkyOg0KKwkJCQlzZXRIb3N0SW5mZWN0aXZpdHkyKChEb3VibGUpbmV3VmFsdWUpOw0KKwkJCQlyZXR1cm47DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLlNJTVBMRV9ERU5HVUVfTU9ERUxfX0hPU1RfSU5GRUNUSVZJVFkzOg0KKwkJCQlzZXRIb3N0SW5mZWN0aXZpdHkzKChEb3VibGUpbmV3VmFsdWUpOw0KKwkJCQlyZXR1cm47DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLlNJTVBMRV9ERU5HVUVfTU9ERUxfX0hPU1RfSU5GRUNUSVZJVFk0Og0KKwkJCQlzZXRIb3N0SW5mZWN0aXZpdHk0KChEb3VibGUpbmV3VmFsdWUpOw0KKwkJCQlyZXR1cm47DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLlNJTVBMRV9ERU5HVUVfTU9ERUxfX0hPU1RfUFJJTUFSWV9JTkNVQkFUSU9OX1JBVEU6DQorCQkJCXNldEhvc3RQcmltYXJ5SW5jdWJhdGlvblJhdGUoKERvdWJsZSluZXdWYWx1ZSk7DQorCQkJCXJldHVybjsNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuU0lNUExFX0RFTkdVRV9NT0RFTF9fSE9TVF9QUklNQVJZX1JFQ09WRVJZX1JBVEU6DQorCQkJCXNldEhvc3RQcmltYXJ5UmVjb3ZlcnlSYXRlKChEb3VibGUpbmV3VmFsdWUpOw0KKwkJCQlyZXR1cm47DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLlNJTVBMRV9ERU5HVUVfTU9ERUxfX0hPU1RfUFJJTUFSWV9JTU1VTklUWV9MT1NTX1JBVEU6DQorCQkJCXNldEhvc3RQcmltYXJ5SW1tdW5pdHlMb3NzUmF0ZSgoRG91YmxlKW5ld1ZhbHVlKTsNCisJCQkJcmV0dXJuOw0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5TSU1QTEVfREVOR1VFX01PREVMX19IT1NUX1BSSU1BUllfREVBVEhfUkFURToNCisJCQkJc2V0SG9zdFByaW1hcnlEZWF0aFJhdGUoKERvdWJsZSluZXdWYWx1ZSk7DQorCQkJCXJldHVybjsNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuU0lNUExFX0RFTkdVRV9NT0RFTF9fSE9TVF9BREUxOg0KKwkJCQlzZXRIb3N0QURFMSgoRG91YmxlKW5ld1ZhbHVlKTsNCisJCQkJcmV0dXJuOw0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5TSU1QTEVfREVOR1VFX01PREVMX19IT1NUX0FERTI6DQorCQkJCXNldEhvc3RBREUyKChEb3VibGUpbmV3VmFsdWUpOw0KKwkJCQlyZXR1cm47DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLlNJTVBMRV9ERU5HVUVfTU9ERUxfX0hPU1RfQURFMzoNCisJCQkJc2V0SG9zdEFERTMoKERvdWJsZSluZXdWYWx1ZSk7DQorCQkJCXJldHVybjsNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuU0lNUExFX0RFTkdVRV9NT0RFTF9fSE9TVF9BREU0Og0KKwkJCQlzZXRIb3N0QURFNCgoRG91YmxlKW5ld1ZhbHVlKTsNCisJCQkJcmV0dXJuOw0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5TSU1QTEVfREVOR1VFX01PREVMX19IT1NUX1NFQ09OREFSWV9JTkNVQkFUSU9OX1JBVEU6DQorCQkJCXNldEhvc3RTZWNvbmRhcnlJbmN1YmF0aW9uUmF0ZSgoRG91YmxlKW5ld1ZhbHVlKTsNCisJCQkJcmV0dXJuOw0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5TSU1QTEVfREVOR1VFX01PREVMX19IT1NUX1NFQ09OREFSWV9SRUNPVkVSWV9SQVRFOg0KKwkJCQlzZXRIb3N0U2Vjb25kYXJ5UmVjb3ZlcnlSYXRlKChEb3VibGUpbmV3VmFsdWUpOw0KKwkJCQlyZXR1cm47DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLlNJTVBMRV9ERU5HVUVfTU9ERUxfX0hPU1RfU0VDT05EQVJZX0RFQVRIX1JBVEU6DQorCQkJCXNldEhvc3RTZWNvbmRhcnlEZWF0aFJhdGUoKERvdWJsZSluZXdWYWx1ZSk7DQorCQkJCXJldHVybjsNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuU0lNUExFX0RFTkdVRV9NT0RFTF9fVkVDVE9SX0lORkVDVElWSVRZMToNCisJCQkJc2V0VmVjdG9ySW5mZWN0aXZpdHkxKChEb3VibGUpbmV3VmFsdWUpOw0KKwkJCQlyZXR1cm47DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLlNJTVBMRV9ERU5HVUVfTU9ERUxfX1ZFQ1RPUl9JTkZFQ1RJVklUWTI6DQorCQkJCXNldFZlY3RvckluZmVjdGl2aXR5MigoRG91YmxlKW5ld1ZhbHVlKTsNCisJCQkJcmV0dXJuOw0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5TSU1QTEVfREVOR1VFX01PREVMX19WRUNUT1JfSU5GRUNUSVZJVFkzOg0KKwkJCQlzZXRWZWN0b3JJbmZlY3Rpdml0eTMoKERvdWJsZSluZXdWYWx1ZSk7DQorCQkJCXJldHVybjsNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuU0lNUExFX0RFTkdVRV9NT0RFTF9fVkVDVE9SX0lORkVDVElWSVRZNDoNCisJCQkJc2V0VmVjdG9ySW5mZWN0aXZpdHk0KChEb3VibGUpbmV3VmFsdWUpOw0KKwkJCQlyZXR1cm47DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLlNJTVBMRV9ERU5HVUVfTU9ERUxfX1ZFQ1RPUl9BREUxOg0KKwkJCQlzZXRWZWN0b3JBREUxKChEb3VibGUpbmV3VmFsdWUpOw0KKwkJCQlyZXR1cm47DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLlNJTVBMRV9ERU5HVUVfTU9ERUxfX1ZFQ1RPUl9BREUyOg0KKwkJCQlzZXRWZWN0b3JBREUyKChEb3VibGUpbmV3VmFsdWUpOw0KKwkJCQlyZXR1cm47DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLlNJTVBMRV9ERU5HVUVfTU9ERUxfX1ZFQ1RPUl9BREUzOg0KKwkJCQlzZXRWZWN0b3JBREUzKChEb3VibGUpbmV3VmFsdWUpOw0KKwkJCQlyZXR1cm47DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLlNJTVBMRV9ERU5HVUVfTU9ERUxfX1ZFQ1RPUl9BREU0Og0KKwkJCQlzZXRWZWN0b3JBREU0KChEb3VibGUpbmV3VmFsdWUpOw0KKwkJCQlyZXR1cm47DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLlNJTVBMRV9ERU5HVUVfTU9ERUxfX1ZFQ1RPUl9JTkNVQkFUSU9OX1JBVEU6DQorCQkJCXNldFZlY3RvckluY3ViYXRpb25SYXRlKChEb3VibGUpbmV3VmFsdWUpOw0KKwkJCQlyZXR1cm47DQorCQl9DQorCQlzdXBlci5lU2V0KGZlYXR1cmVJRCwgbmV3VmFsdWUpOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJQE92ZXJyaWRlDQorCXB1YmxpYyB2b2lkIGVVbnNldChpbnQgZmVhdHVyZUlEKSB7DQorCQlzd2l0Y2ggKGZlYXR1cmVJRCkgew0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5TSU1QTEVfREVOR1VFX01PREVMX19CSVRJTkdfUkFURToNCisJCQkJc2V0Qml0aW5nUmF0ZShCSVRJTkdfUkFURV9FREVGQVVMVCk7DQorCQkJCXJldHVybjsNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuU0lNUExFX0RFTkdVRV9NT0RFTF9fSE9TVF9JTkZFQ1RJVklUWTE6DQorCQkJCXNldEhvc3RJbmZlY3Rpdml0eTEoSE9TVF9JTkZFQ1RJVklUWTFfRURFRkFVTFQpOw0KKwkJCQlyZXR1cm47DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLlNJTVBMRV9ERU5HVUVfTU9ERUxfX0hPU1RfSU5GRUNUSVZJVFkyOg0KKwkJCQlzZXRIb3N0SW5mZWN0aXZpdHkyKEhPU1RfSU5GRUNUSVZJVFkyX0VERUZBVUxUKTsNCisJCQkJcmV0dXJuOw0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5TSU1QTEVfREVOR1VFX01PREVMX19IT1NUX0lORkVDVElWSVRZMzoNCisJCQkJc2V0SG9zdEluZmVjdGl2aXR5MyhIT1NUX0lORkVDVElWSVRZM19FREVGQVVMVCk7DQorCQkJCXJldHVybjsNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuU0lNUExFX0RFTkdVRV9NT0RFTF9fSE9TVF9JTkZFQ1RJVklUWTQ6DQorCQkJCXNldEhvc3RJbmZlY3Rpdml0eTQoSE9TVF9JTkZFQ1RJVklUWTRfRURFRkFVTFQpOw0KKwkJCQlyZXR1cm47DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLlNJTVBMRV9ERU5HVUVfTU9ERUxfX0hPU1RfUFJJTUFSWV9JTkNVQkFUSU9OX1JBVEU6DQorCQkJCXNldEhvc3RQcmltYXJ5SW5jdWJhdGlvblJhdGUoSE9TVF9QUklNQVJZX0lOQ1VCQVRJT05fUkFURV9FREVGQVVMVCk7DQorCQkJCXJldHVybjsNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuU0lNUExFX0RFTkdVRV9NT0RFTF9fSE9TVF9QUklNQVJZX1JFQ09WRVJZX1JBVEU6DQorCQkJCXNldEhvc3RQcmltYXJ5UmVjb3ZlcnlSYXRlKEhPU1RfUFJJTUFSWV9SRUNPVkVSWV9SQVRFX0VERUZBVUxUKTsNCisJCQkJcmV0dXJuOw0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5TSU1QTEVfREVOR1VFX01PREVMX19IT1NUX1BSSU1BUllfSU1NVU5JVFlfTE9TU19SQVRFOg0KKwkJCQlzZXRIb3N0UHJpbWFyeUltbXVuaXR5TG9zc1JhdGUoSE9TVF9QUklNQVJZX0lNTVVOSVRZX0xPU1NfUkFURV9FREVGQVVMVCk7DQorCQkJCXJldHVybjsNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuU0lNUExFX0RFTkdVRV9NT0RFTF9fSE9TVF9QUklNQVJZX0RFQVRIX1JBVEU6DQorCQkJCXNldEhvc3RQcmltYXJ5RGVhdGhSYXRlKEhPU1RfUFJJTUFSWV9ERUFUSF9SQVRFX0VERUZBVUxUKTsNCisJCQkJcmV0dXJuOw0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5TSU1QTEVfREVOR1VFX01PREVMX19IT1NUX0FERTE6DQorCQkJCXNldEhvc3RBREUxKEhPU1RfQURFMV9FREVGQVVMVCk7DQorCQkJCXJldHVybjsNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuU0lNUExFX0RFTkdVRV9NT0RFTF9fSE9TVF9BREUyOg0KKwkJCQlzZXRIb3N0QURFMihIT1NUX0FERTJfRURFRkFVTFQpOw0KKwkJCQlyZXR1cm47DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLlNJTVBMRV9ERU5HVUVfTU9ERUxfX0hPU1RfQURFMzoNCisJCQkJc2V0SG9zdEFERTMoSE9TVF9BREUzX0VERUZBVUxUKTsNCisJCQkJcmV0dXJuOw0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5TSU1QTEVfREVOR1VFX01PREVMX19IT1NUX0FERTQ6DQorCQkJCXNldEhvc3RBREU0KEhPU1RfQURFNF9FREVGQVVMVCk7DQorCQkJCXJldHVybjsNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuU0lNUExFX0RFTkdVRV9NT0RFTF9fSE9TVF9TRUNPTkRBUllfSU5DVUJBVElPTl9SQVRFOg0KKwkJCQlzZXRIb3N0U2Vjb25kYXJ5SW5jdWJhdGlvblJhdGUoSE9TVF9TRUNPTkRBUllfSU5DVUJBVElPTl9SQVRFX0VERUZBVUxUKTsNCisJCQkJcmV0dXJuOw0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5TSU1QTEVfREVOR1VFX01PREVMX19IT1NUX1NFQ09OREFSWV9SRUNPVkVSWV9SQVRFOg0KKwkJCQlzZXRIb3N0U2Vjb25kYXJ5UmVjb3ZlcnlSYXRlKEhPU1RfU0VDT05EQVJZX1JFQ09WRVJZX1JBVEVfRURFRkFVTFQpOw0KKwkJCQlyZXR1cm47DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLlNJTVBMRV9ERU5HVUVfTU9ERUxfX0hPU1RfU0VDT05EQVJZX0RFQVRIX1JBVEU6DQorCQkJCXNldEhvc3RTZWNvbmRhcnlEZWF0aFJhdGUoSE9TVF9TRUNPTkRBUllfREVBVEhfUkFURV9FREVGQVVMVCk7DQorCQkJCXJldHVybjsNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuU0lNUExFX0RFTkdVRV9NT0RFTF9fVkVDVE9SX0lORkVDVElWSVRZMToNCisJCQkJc2V0VmVjdG9ySW5mZWN0aXZpdHkxKFZFQ1RPUl9JTkZFQ1RJVklUWTFfRURFRkFVTFQpOw0KKwkJCQlyZXR1cm47DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLlNJTVBMRV9ERU5HVUVfTU9ERUxfX1ZFQ1RPUl9JTkZFQ1RJVklUWTI6DQorCQkJCXNldFZlY3RvckluZmVjdGl2aXR5MihWRUNUT1JfSU5GRUNUSVZJVFkyX0VERUZBVUxUKTsNCisJCQkJcmV0dXJuOw0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5TSU1QTEVfREVOR1VFX01PREVMX19WRUNUT1JfSU5GRUNUSVZJVFkzOg0KKwkJCQlzZXRWZWN0b3JJbmZlY3Rpdml0eTMoVkVDVE9SX0lORkVDVElWSVRZM19FREVGQVVMVCk7DQorCQkJCXJldHVybjsNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuU0lNUExFX0RFTkdVRV9NT0RFTF9fVkVDVE9SX0lORkVDVElWSVRZNDoNCisJCQkJc2V0VmVjdG9ySW5mZWN0aXZpdHk0KFZFQ1RPUl9JTkZFQ1RJVklUWTRfRURFRkFVTFQpOw0KKwkJCQlyZXR1cm47DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLlNJTVBMRV9ERU5HVUVfTU9ERUxfX1ZFQ1RPUl9BREUxOg0KKwkJCQlzZXRWZWN0b3JBREUxKFZFQ1RPUl9BREUxX0VERUZBVUxUKTsNCisJCQkJcmV0dXJuOw0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5TSU1QTEVfREVOR1VFX01PREVMX19WRUNUT1JfQURFMjoNCisJCQkJc2V0VmVjdG9yQURFMihWRUNUT1JfQURFMl9FREVGQVVMVCk7DQorCQkJCXJldHVybjsNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuU0lNUExFX0RFTkdVRV9NT0RFTF9fVkVDVE9SX0FERTM6DQorCQkJCXNldFZlY3RvckFERTMoVkVDVE9SX0FERTNfRURFRkFVTFQpOw0KKwkJCQlyZXR1cm47DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLlNJTVBMRV9ERU5HVUVfTU9ERUxfX1ZFQ1RPUl9BREU0Og0KKwkJCQlzZXRWZWN0b3JBREU0KFZFQ1RPUl9BREU0X0VERUZBVUxUKTsNCisJCQkJcmV0dXJuOw0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5TSU1QTEVfREVOR1VFX01PREVMX19WRUNUT1JfSU5DVUJBVElPTl9SQVRFOg0KKwkJCQlzZXRWZWN0b3JJbmN1YmF0aW9uUmF0ZShWRUNUT1JfSU5DVUJBVElPTl9SQVRFX0VERUZBVUxUKTsNCisJCQkJcmV0dXJuOw0KKwkJfQ0KKwkJc3VwZXIuZVVuc2V0KGZlYXR1cmVJRCk7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlAT3ZlcnJpZGUNCisJcHVibGljIGJvb2xlYW4gZUlzU2V0KGludCBmZWF0dXJlSUQpIHsNCisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLlNJTVBMRV9ERU5HVUVfTU9ERUxfX0JJVElOR19SQVRFOg0KKwkJCQlyZXR1cm4gYml0aW5nUmF0ZSAhPSBCSVRJTkdfUkFURV9FREVGQVVMVDsNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuU0lNUExFX0RFTkdVRV9NT0RFTF9fSE9TVF9JTkZFQ1RJVklUWTE6DQorCQkJCXJldHVybiBob3N0SW5mZWN0aXZpdHkxICE9IEhPU1RfSU5GRUNUSVZJVFkxX0VERUZBVUxUOw0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5TSU1QTEVfREVOR1VFX01PREVMX19IT1NUX0lORkVDVElWSVRZMjoNCisJCQkJcmV0dXJuIGhvc3RJbmZlY3Rpdml0eTIgIT0gSE9TVF9JTkZFQ1RJVklUWTJfRURFRkFVTFQ7DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLlNJTVBMRV9ERU5HVUVfTU9ERUxfX0hPU1RfSU5GRUNUSVZJVFkzOg0KKwkJCQlyZXR1cm4gaG9zdEluZmVjdGl2aXR5MyAhPSBIT1NUX0lORkVDVElWSVRZM19FREVGQVVMVDsNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuU0lNUExFX0RFTkdVRV9NT0RFTF9fSE9TVF9JTkZFQ1RJVklUWTQ6DQorCQkJCXJldHVybiBob3N0SW5mZWN0aXZpdHk0ICE9IEhPU1RfSU5GRUNUSVZJVFk0X0VERUZBVUxUOw0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5TSU1QTEVfREVOR1VFX01PREVMX19IT1NUX1BSSU1BUllfSU5DVUJBVElPTl9SQVRFOg0KKwkJCQlyZXR1cm4gaG9zdFByaW1hcnlJbmN1YmF0aW9uUmF0ZSAhPSBIT1NUX1BSSU1BUllfSU5DVUJBVElPTl9SQVRFX0VERUZBVUxUOw0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5TSU1QTEVfREVOR1VFX01PREVMX19IT1NUX1BSSU1BUllfUkVDT1ZFUllfUkFURToNCisJCQkJcmV0dXJuIGhvc3RQcmltYXJ5UmVjb3ZlcnlSYXRlICE9IEhPU1RfUFJJTUFSWV9SRUNPVkVSWV9SQVRFX0VERUZBVUxUOw0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5TSU1QTEVfREVOR1VFX01PREVMX19IT1NUX1BSSU1BUllfSU1NVU5JVFlfTE9TU19SQVRFOg0KKwkJCQlyZXR1cm4gaG9zdFByaW1hcnlJbW11bml0eUxvc3NSYXRlICE9IEhPU1RfUFJJTUFSWV9JTU1VTklUWV9MT1NTX1JBVEVfRURFRkFVTFQ7DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLlNJTVBMRV9ERU5HVUVfTU9ERUxfX0hPU1RfUFJJTUFSWV9ERUFUSF9SQVRFOg0KKwkJCQlyZXR1cm4gaG9zdFByaW1hcnlEZWF0aFJhdGUgIT0gSE9TVF9QUklNQVJZX0RFQVRIX1JBVEVfRURFRkFVTFQ7DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLlNJTVBMRV9ERU5HVUVfTU9ERUxfX0hPU1RfQURFMToNCisJCQkJcmV0dXJuIGhvc3RBREUxICE9IEhPU1RfQURFMV9FREVGQVVMVDsNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuU0lNUExFX0RFTkdVRV9NT0RFTF9fSE9TVF9BREUyOg0KKwkJCQlyZXR1cm4gaG9zdEFERTIgIT0gSE9TVF9BREUyX0VERUZBVUxUOw0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5TSU1QTEVfREVOR1VFX01PREVMX19IT1NUX0FERTM6DQorCQkJCXJldHVybiBob3N0QURFMyAhPSBIT1NUX0FERTNfRURFRkFVTFQ7DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLlNJTVBMRV9ERU5HVUVfTU9ERUxfX0hPU1RfQURFNDoNCisJCQkJcmV0dXJuIGhvc3RBREU0ICE9IEhPU1RfQURFNF9FREVGQVVMVDsNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuU0lNUExFX0RFTkdVRV9NT0RFTF9fSE9TVF9TRUNPTkRBUllfSU5DVUJBVElPTl9SQVRFOg0KKwkJCQlyZXR1cm4gaG9zdFNlY29uZGFyeUluY3ViYXRpb25SYXRlICE9IEhPU1RfU0VDT05EQVJZX0lOQ1VCQVRJT05fUkFURV9FREVGQVVMVDsNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuU0lNUExFX0RFTkdVRV9NT0RFTF9fSE9TVF9TRUNPTkRBUllfUkVDT1ZFUllfUkFURToNCisJCQkJcmV0dXJuIGhvc3RTZWNvbmRhcnlSZWNvdmVyeVJhdGUgIT0gSE9TVF9TRUNPTkRBUllfUkVDT1ZFUllfUkFURV9FREVGQVVMVDsNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuU0lNUExFX0RFTkdVRV9NT0RFTF9fSE9TVF9TRUNPTkRBUllfREVBVEhfUkFURToNCisJCQkJcmV0dXJuIGhvc3RTZWNvbmRhcnlEZWF0aFJhdGUgIT0gSE9TVF9TRUNPTkRBUllfREVBVEhfUkFURV9FREVGQVVMVDsNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuU0lNUExFX0RFTkdVRV9NT0RFTF9fVkVDVE9SX0lORkVDVElWSVRZMToNCisJCQkJcmV0dXJuIHZlY3RvckluZmVjdGl2aXR5MSAhPSBWRUNUT1JfSU5GRUNUSVZJVFkxX0VERUZBVUxUOw0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5TSU1QTEVfREVOR1VFX01PREVMX19WRUNUT1JfSU5GRUNUSVZJVFkyOg0KKwkJCQlyZXR1cm4gdmVjdG9ySW5mZWN0aXZpdHkyICE9IFZFQ1RPUl9JTkZFQ1RJVklUWTJfRURFRkFVTFQ7DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLlNJTVBMRV9ERU5HVUVfTU9ERUxfX1ZFQ1RPUl9JTkZFQ1RJVklUWTM6DQorCQkJCXJldHVybiB2ZWN0b3JJbmZlY3Rpdml0eTMgIT0gVkVDVE9SX0lORkVDVElWSVRZM19FREVGQVVMVDsNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuU0lNUExFX0RFTkdVRV9NT0RFTF9fVkVDVE9SX0lORkVDVElWSVRZNDoNCisJCQkJcmV0dXJuIHZlY3RvckluZmVjdGl2aXR5NCAhPSBWRUNUT1JfSU5GRUNUSVZJVFk0X0VERUZBVUxUOw0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5TSU1QTEVfREVOR1VFX01PREVMX19WRUNUT1JfQURFMToNCisJCQkJcmV0dXJuIHZlY3RvckFERTEgIT0gVkVDVE9SX0FERTFfRURFRkFVTFQ7DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLlNJTVBMRV9ERU5HVUVfTU9ERUxfX1ZFQ1RPUl9BREUyOg0KKwkJCQlyZXR1cm4gdmVjdG9yQURFMiAhPSBWRUNUT1JfQURFMl9FREVGQVVMVDsNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuU0lNUExFX0RFTkdVRV9NT0RFTF9fVkVDVE9SX0FERTM6DQorCQkJCXJldHVybiB2ZWN0b3JBREUzICE9IFZFQ1RPUl9BREUzX0VERUZBVUxUOw0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5TSU1QTEVfREVOR1VFX01PREVMX19WRUNUT1JfQURFNDoNCisJCQkJcmV0dXJuIHZlY3RvckFERTQgIT0gVkVDVE9SX0FERTRfRURFRkFVTFQ7DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLlNJTVBMRV9ERU5HVUVfTU9ERUxfX1ZFQ1RPUl9JTkNVQkFUSU9OX1JBVEU6DQorCQkJCXJldHVybiB2ZWN0b3JJbmN1YmF0aW9uUmF0ZSAhPSBWRUNUT1JfSU5DVUJBVElPTl9SQVRFX0VERUZBVUxUOw0KKwkJfQ0KKwkJcmV0dXJuIHN1cGVyLmVJc1NldChmZWF0dXJlSUQpOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJQE92ZXJyaWRlDQorCXB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKSB7DQorCQlpZiAoZUlzUHJveHkoKSkgcmV0dXJuIHN1cGVyLnRvU3RyaW5nKCk7DQorDQorCQlTdHJpbmdCdWZmZXIgcmVzdWx0ID0gbmV3IFN0cmluZ0J1ZmZlcihzdXBlci50b1N0cmluZygpKTsNCisJCXJlc3VsdC5hcHBlbmQoIiAoYml0aW5nUmF0ZTogIik7DQorCQlyZXN1bHQuYXBwZW5kKGJpdGluZ1JhdGUpOw0KKwkJcmVzdWx0LmFwcGVuZCgiLCBob3N0SW5mZWN0aXZpdHkxOiAiKTsNCisJCXJlc3VsdC5hcHBlbmQoaG9zdEluZmVjdGl2aXR5MSk7DQorCQlyZXN1bHQuYXBwZW5kKCIsIGhvc3RJbmZlY3Rpdml0eTI6ICIpOw0KKwkJcmVzdWx0LmFwcGVuZChob3N0SW5mZWN0aXZpdHkyKTsNCisJCXJlc3VsdC5hcHBlbmQoIiwgaG9zdEluZmVjdGl2aXR5MzogIik7DQorCQlyZXN1bHQuYXBwZW5kKGhvc3RJbmZlY3Rpdml0eTMpOw0KKwkJcmVzdWx0LmFwcGVuZCgiLCBob3N0SW5mZWN0aXZpdHk0OiAiKTsNCisJCXJlc3VsdC5hcHBlbmQoaG9zdEluZmVjdGl2aXR5NCk7DQorCQlyZXN1bHQuYXBwZW5kKCIsIGhvc3RQcmltYXJ5SW5jdWJhdGlvblJhdGU6ICIpOw0KKwkJcmVzdWx0LmFwcGVuZChob3N0UHJpbWFyeUluY3ViYXRpb25SYXRlKTsNCisJCXJlc3VsdC5hcHBlbmQoIiwgaG9zdFByaW1hcnlSZWNvdmVyeVJhdGU6ICIpOw0KKwkJcmVzdWx0LmFwcGVuZChob3N0UHJpbWFyeVJlY292ZXJ5UmF0ZSk7DQorCQlyZXN1bHQuYXBwZW5kKCIsIGhvc3RQcmltYXJ5SW1tdW5pdHlMb3NzUmF0ZTogIik7DQorCQlyZXN1bHQuYXBwZW5kKGhvc3RQcmltYXJ5SW1tdW5pdHlMb3NzUmF0ZSk7DQorCQlyZXN1bHQuYXBwZW5kKCIsIGhvc3RQcmltYXJ5RGVhdGhSYXRlOiAiKTsNCisJCXJlc3VsdC5hcHBlbmQoaG9zdFByaW1hcnlEZWF0aFJhdGUpOw0KKwkJcmVzdWx0LmFwcGVuZCgiLCBob3N0QURFMTogIik7DQorCQlyZXN1bHQuYXBwZW5kKGhvc3RBREUxKTsNCisJCXJlc3VsdC5hcHBlbmQoIiwgaG9zdEFERTI6ICIpOw0KKwkJcmVzdWx0LmFwcGVuZChob3N0QURFMik7DQorCQlyZXN1bHQuYXBwZW5kKCIsIGhvc3RBREUzOiAiKTsNCisJCXJlc3VsdC5hcHBlbmQoaG9zdEFERTMpOw0KKwkJcmVzdWx0LmFwcGVuZCgiLCBob3N0QURFNDogIik7DQorCQlyZXN1bHQuYXBwZW5kKGhvc3RBREU0KTsNCisJCXJlc3VsdC5hcHBlbmQoIiwgaG9zdFNlY29uZGFyeUluY3ViYXRpb25SYXRlOiAiKTsNCisJCXJlc3VsdC5hcHBlbmQoaG9zdFNlY29uZGFyeUluY3ViYXRpb25SYXRlKTsNCisJCXJlc3VsdC5hcHBlbmQoIiwgaG9zdFNlY29uZGFyeVJlY292ZXJ5UmF0ZTogIik7DQorCQlyZXN1bHQuYXBwZW5kKGhvc3RTZWNvbmRhcnlSZWNvdmVyeVJhdGUpOw0KKwkJcmVzdWx0LmFwcGVuZCgiLCBob3N0U2Vjb25kYXJ5RGVhdGhSYXRlOiAiKTsNCisJCXJlc3VsdC5hcHBlbmQoaG9zdFNlY29uZGFyeURlYXRoUmF0ZSk7DQorCQlyZXN1bHQuYXBwZW5kKCIsIHZlY3RvckluZmVjdGl2aXR5MTogIik7DQorCQlyZXN1bHQuYXBwZW5kKHZlY3RvckluZmVjdGl2aXR5MSk7DQorCQlyZXN1bHQuYXBwZW5kKCIsIHZlY3RvckluZmVjdGl2aXR5MjogIik7DQorCQlyZXN1bHQuYXBwZW5kKHZlY3RvckluZmVjdGl2aXR5Mik7DQorCQlyZXN1bHQuYXBwZW5kKCIsIHZlY3RvckluZmVjdGl2aXR5MzogIik7DQorCQlyZXN1bHQuYXBwZW5kKHZlY3RvckluZmVjdGl2aXR5Myk7DQorCQlyZXN1bHQuYXBwZW5kKCIsIHZlY3RvckluZmVjdGl2aXR5NDogIik7DQorCQlyZXN1bHQuYXBwZW5kKHZlY3RvckluZmVjdGl2aXR5NCk7DQorCQlyZXN1bHQuYXBwZW5kKCIsIHZlY3RvckFERTE6ICIpOw0KKwkJcmVzdWx0LmFwcGVuZCh2ZWN0b3JBREUxKTsNCisJCXJlc3VsdC5hcHBlbmQoIiwgdmVjdG9yQURFMjogIik7DQorCQlyZXN1bHQuYXBwZW5kKHZlY3RvckFERTIpOw0KKwkJcmVzdWx0LmFwcGVuZCgiLCB2ZWN0b3JBREUzOiAiKTsNCisJCXJlc3VsdC5hcHBlbmQodmVjdG9yQURFMyk7DQorCQlyZXN1bHQuYXBwZW5kKCIsIHZlY3RvckFERTQ6ICIpOw0KKwkJcmVzdWx0LmFwcGVuZCh2ZWN0b3JBREU0KTsNCisJCXJlc3VsdC5hcHBlbmQoIiwgdmVjdG9ySW5jdWJhdGlvblJhdGU6ICIpOw0KKwkJcmVzdWx0LmFwcGVuZCh2ZWN0b3JJbmN1YmF0aW9uUmF0ZSk7DQorCQlyZXN1bHQuYXBwZW5kKCcpJyk7DQorCQlyZXR1cm4gcmVzdWx0LnRvU3RyaW5nKCk7DQorCX0NCisNCisJQE92ZXJyaWRlDQorCXB1YmxpYyBTdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsVmFsdWUgY29tcHV0ZURpc2Vhc2VEZWx0YXMoU1RFTVRpbWUgdGltZSwNCisJCQlTdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsVmFsdWUgY3VycmVudFN0YXRlLA0KKwkJCVN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWwgZGlzZWFzZUxhYmVsLCBsb25nIHRpbWVEZWx0YSwNCisJCQlEaXNlYXNlTW9kZWxMYWJlbFZhbHVlIHJldHVyblZhbHVlKSB7DQorCQlpZiAoZGlzZWFzZUxhYmVsIGluc3RhbmNlb2YgRGVuZ3VlTW9kZWxIb3N0TGFiZWwpIHsNCisJCQlEZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlIGhvc3REZWx0YSA9IChEZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlKSByZXR1cm5WYWx1ZTsNCisJCQlEZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlIGhvc3QgPSAoRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZSkgY3VycmVudFN0YXRlOw0KKw0KKwkJCWlmIChob3N0LmdldFBvcHVsYXRpb25Db3VudCgpID09IDAuMCkgew0KKwkJCQlob3N0RGVsdGEucmVzZXQoKTsNCisJCQkJcmV0dXJuIGhvc3REZWx0YTsNCisJCQl9DQorDQorCQkJRGVuZ3VlTW9kZWxWZWN0b3JMYWJlbFZhbHVlIHZlY3RvciA9IG51bGw7DQorCQkJRUxpc3Q8Tm9kZUxhYmVsPiBhbGxMYWJlbHMgPSBkaXNlYXNlTGFiZWwuZ2V0Tm9kZSgpLmdldExhYmVscygpOw0KKw0KKwkJCWZvciAoTm9kZUxhYmVsIGxhYmVsIDogYWxsTGFiZWxzKSB7DQorCQkJCWlmIChsYWJlbCBpbnN0YW5jZW9mIERlbmd1ZU1vZGVsVmVjdG9yTGFiZWwpIHsNCisJCQkJCURlbmd1ZU1vZGVsVmVjdG9yTGFiZWwgdmVjdG9yTGFiZWwgPSAoRGVuZ3VlTW9kZWxWZWN0b3JMYWJlbCkgbGFiZWw7DQorDQorCQkJCQlpZiAodmVjdG9yTGFiZWwuZ2V0RGVjb3JhdG9yKCkgPT0gdGhpcykgew0KKwkJCQkJCXZlY3RvciA9IChEZW5ndWVNb2RlbFZlY3RvckxhYmVsVmFsdWUpIHZlY3RvckxhYmVsDQorCQkJCQkJCQkuZ2V0VGVtcFZhbHVlKCk7DQorCQkJCQl9DQorCQkJCX0NCisJCQl9DQorDQorCQkJZG91YmxlIGFkanVzdGVkQml0aW5nUmF0ZSA9IGJpdGluZ1JhdGUgKiAoZG91YmxlKSB0aW1lRGVsdGENCisJCQkJCS8gKGRvdWJsZSkgdGltZVBlcmlvZDsNCisJCQlkb3VibGUgYWRqdXN0ZWRIb3N0UHJpbWFyeUluY3ViYXRpb25SYXRlID0gaG9zdFByaW1hcnlJbmN1YmF0aW9uUmF0ZQ0KKwkJCQkJKiAoZG91YmxlKSB0aW1lRGVsdGEgLyAoZG91YmxlKSB0aW1lUGVyaW9kOw0KKwkJCWRvdWJsZSBhZGp1c3RlZEhvc3RQcmltYXJ5UmVjb3ZlcnlSYXRlID0gaG9zdFByaW1hcnlSZWNvdmVyeVJhdGUNCisJCQkJCSogKGRvdWJsZSkgdGltZURlbHRhIC8gKGRvdWJsZSkgdGltZVBlcmlvZDsNCisJCQlkb3VibGUgYWRqdXN0ZWRIb3N0UHJpbWFyeUltbXVuaXR5TG9zc1JhdGUgPSBob3N0UHJpbWFyeUltbXVuaXR5TG9zc1JhdGUNCisJCQkJCSogKGRvdWJsZSkgdGltZURlbHRhIC8gKGRvdWJsZSkgdGltZVBlcmlvZDsNCisJCQlkb3VibGUgYWRqdXN0ZWRIb3N0UHJpbWFyeURlYXRoUmF0ZSA9IGhvc3RQcmltYXJ5RGVhdGhSYXRlDQorCQkJCQkqIChkb3VibGUpIHRpbWVEZWx0YSAvIChkb3VibGUpIHRpbWVQZXJpb2Q7DQorCQkJZG91YmxlIGFkanVzdGVkSG9zdFNlY29uZGFyeUluY3ViYXRpb25SYXRlID0gaG9zdFNlY29uZGFyeUluY3ViYXRpb25SYXRlDQorCQkJCQkqIChkb3VibGUpIHRpbWVEZWx0YSAvIChkb3VibGUpIHRpbWVQZXJpb2Q7DQorCQkJZG91YmxlIGFkanVzdGVkSG9zdFNlY29uZGFyeVJlY292ZXJ5UmF0ZSA9IGhvc3RTZWNvbmRhcnlSZWNvdmVyeVJhdGUNCisJCQkJCSogKGRvdWJsZSkgdGltZURlbHRhIC8gKGRvdWJsZSkgdGltZVBlcmlvZDsNCisJCQlkb3VibGUgYWRqdXN0ZWRIb3N0U2Vjb25kYXJ5RGVhdGhSYXRlID0gaG9zdFNlY29uZGFyeURlYXRoUmF0ZQ0KKwkJCQkJKiAoZG91YmxlKSB0aW1lRGVsdGEgLyAoZG91YmxlKSB0aW1lUGVyaW9kOw0KKw0KKwkJCWRvdWJsZSB0b0UxID0gaG9zdEluZmVjdGl2aXR5MSAqIGFkanVzdGVkQml0aW5nUmF0ZQ0KKwkJCQkJKiB2ZWN0b3IuZ2V0STEoKSAqIGhvc3QuZ2V0UygpIC8gaG9zdC5nZXRQb3B1bGF0aW9uQ291bnQoKTsNCisJCQlkb3VibGUgdG9FMiA9IGhvc3RJbmZlY3Rpdml0eTIgKiBhZGp1c3RlZEJpdGluZ1JhdGUNCisJCQkJCSogdmVjdG9yLmdldEkyKCkgKiBob3N0LmdldFMoKSAvIGhvc3QuZ2V0UG9wdWxhdGlvbkNvdW50KCk7DQorCQkJZG91YmxlIHRvRTMgPSBob3N0SW5mZWN0aXZpdHkzICogYWRqdXN0ZWRCaXRpbmdSYXRlDQorCQkJCQkqIHZlY3Rvci5nZXRJMygpICogaG9zdC5nZXRTKCkgLyBob3N0LmdldFBvcHVsYXRpb25Db3VudCgpOw0KKwkJCWRvdWJsZSB0b0U0ID0gaG9zdEluZmVjdGl2aXR5NCAqIGFkanVzdGVkQml0aW5nUmF0ZQ0KKwkJCQkJKiB2ZWN0b3IuZ2V0STQoKSAqIGhvc3QuZ2V0UygpIC8gaG9zdC5nZXRQb3B1bGF0aW9uQ291bnQoKTsNCisNCisJCQlkb3VibGUgdG9JMSA9IGFkanVzdGVkSG9zdFByaW1hcnlJbmN1YmF0aW9uUmF0ZSAqIGhvc3QuZ2V0RTEoKTsNCisJCQlkb3VibGUgdG9JMiA9IGFkanVzdGVkSG9zdFByaW1hcnlJbmN1YmF0aW9uUmF0ZSAqIGhvc3QuZ2V0RTIoKTsNCisJCQlkb3VibGUgdG9JMyA9IGFkanVzdGVkSG9zdFByaW1hcnlJbmN1YmF0aW9uUmF0ZSAqIGhvc3QuZ2V0RTMoKTsNCisJCQlkb3VibGUgdG9JNCA9IGFkanVzdGVkSG9zdFByaW1hcnlJbmN1YmF0aW9uUmF0ZSAqIGhvc3QuZ2V0RTQoKTsNCisNCisJCQlkb3VibGUgdG9UMSA9IGFkanVzdGVkSG9zdFByaW1hcnlSZWNvdmVyeVJhdGUgKiBob3N0LmdldEkxKCk7DQorCQkJZG91YmxlIHRvVDIgPSBhZGp1c3RlZEhvc3RQcmltYXJ5UmVjb3ZlcnlSYXRlICogaG9zdC5nZXRJMigpOw0KKwkJCWRvdWJsZSB0b1QzID0gYWRqdXN0ZWRIb3N0UHJpbWFyeVJlY292ZXJ5UmF0ZSAqIGhvc3QuZ2V0STMoKTsNCisJCQlkb3VibGUgdG9UNCA9IGFkanVzdGVkSG9zdFByaW1hcnlSZWNvdmVyeVJhdGUgKiBob3N0LmdldEk0KCk7DQorDQorCQkJZG91YmxlIHRvUjEgPSBhZGp1c3RlZEhvc3RQcmltYXJ5SW1tdW5pdHlMb3NzUmF0ZSAqIGhvc3QuZ2V0VDEoKTsNCisJCQlkb3VibGUgdG9SMiA9IGFkanVzdGVkSG9zdFByaW1hcnlJbW11bml0eUxvc3NSYXRlICogaG9zdC5nZXRUMigpOw0KKwkJCWRvdWJsZSB0b1IzID0gYWRqdXN0ZWRIb3N0UHJpbWFyeUltbXVuaXR5TG9zc1JhdGUgKiBob3N0LmdldFQzKCk7DQorCQkJZG91YmxlIHRvUjQgPSBhZGp1c3RlZEhvc3RQcmltYXJ5SW1tdW5pdHlMb3NzUmF0ZSAqIGhvc3QuZ2V0VDQoKTsNCisNCisJCQlkb3VibGUgdG9FMTIgPSBob3N0QURFMiAqIGhvc3RJbmZlY3Rpdml0eTIgKiBhZGp1c3RlZEJpdGluZ1JhdGUNCisJCQkJCSogdmVjdG9yLmdldEkyKCkgKiBob3N0LmdldFIxKCkgLyBob3N0LmdldFBvcHVsYXRpb25Db3VudCgpOw0KKwkJCWRvdWJsZSB0b0UxMyA9IGhvc3RBREUzICogaG9zdEluZmVjdGl2aXR5MyAqIGFkanVzdGVkQml0aW5nUmF0ZQ0KKwkJCQkJKiB2ZWN0b3IuZ2V0STMoKSAqIGhvc3QuZ2V0UjEoKSAvIGhvc3QuZ2V0UG9wdWxhdGlvbkNvdW50KCk7DQorCQkJZG91YmxlIHRvRTE0ID0gaG9zdEFERTQgKiBob3N0SW5mZWN0aXZpdHk0ICogYWRqdXN0ZWRCaXRpbmdSYXRlDQorCQkJCQkqIHZlY3Rvci5nZXRJNCgpICogaG9zdC5nZXRSMSgpIC8gaG9zdC5nZXRQb3B1bGF0aW9uQ291bnQoKTsNCisJCQlkb3VibGUgdG9FMjEgPSBob3N0QURFMSAqIGhvc3RJbmZlY3Rpdml0eTEgKiBhZGp1c3RlZEJpdGluZ1JhdGUNCisJCQkJCSogdmVjdG9yLmdldEkxKCkgKiBob3N0LmdldFIyKCkgLyBob3N0LmdldFBvcHVsYXRpb25Db3VudCgpOw0KKwkJCWRvdWJsZSB0b0UyMyA9IGhvc3RBREUzICogaG9zdEluZmVjdGl2aXR5MyAqIGFkanVzdGVkQml0aW5nUmF0ZQ0KKwkJCQkJKiB2ZWN0b3IuZ2V0STMoKSAqIGhvc3QuZ2V0UjIoKSAvIGhvc3QuZ2V0UG9wdWxhdGlvbkNvdW50KCk7DQorCQkJZG91YmxlIHRvRTI0ID0gaG9zdEFERTQgKiBob3N0SW5mZWN0aXZpdHk0ICogYWRqdXN0ZWRCaXRpbmdSYXRlDQorCQkJCQkqIHZlY3Rvci5nZXRJNCgpICogaG9zdC5nZXRSMigpIC8gaG9zdC5nZXRQb3B1bGF0aW9uQ291bnQoKTsNCisJCQlkb3VibGUgdG9FMzEgPSBob3N0QURFMSAqIGhvc3RJbmZlY3Rpdml0eTEgKiBhZGp1c3RlZEJpdGluZ1JhdGUNCisJCQkJCSogdmVjdG9yLmdldEkxKCkgKiBob3N0LmdldFIzKCkgLyBob3N0LmdldFBvcHVsYXRpb25Db3VudCgpOw0KKwkJCWRvdWJsZSB0b0UzMiA9IGhvc3RBREUyICogaG9zdEluZmVjdGl2aXR5MiAqIGFkanVzdGVkQml0aW5nUmF0ZQ0KKwkJCQkJKiB2ZWN0b3IuZ2V0STIoKSAqIGhvc3QuZ2V0UjMoKSAvIGhvc3QuZ2V0UG9wdWxhdGlvbkNvdW50KCk7DQorCQkJZG91YmxlIHRvRTM0ID0gaG9zdEFERTQgKiBob3N0SW5mZWN0aXZpdHk0ICogYWRqdXN0ZWRCaXRpbmdSYXRlDQorCQkJCQkqIHZlY3Rvci5nZXRJNCgpICogaG9zdC5nZXRSMygpIC8gaG9zdC5nZXRQb3B1bGF0aW9uQ291bnQoKTsNCisJCQlkb3VibGUgdG9FNDEgPSBob3N0QURFMSAqIGhvc3RJbmZlY3Rpdml0eTEgKiBhZGp1c3RlZEJpdGluZ1JhdGUNCisJCQkJCSogdmVjdG9yLmdldEkxKCkgKiBob3N0LmdldFI0KCkgLyBob3N0LmdldFBvcHVsYXRpb25Db3VudCgpOw0KKwkJCWRvdWJsZSB0b0U0MiA9IGhvc3RBREUyICogaG9zdEluZmVjdGl2aXR5MiAqIGFkanVzdGVkQml0aW5nUmF0ZQ0KKwkJCQkJKiB2ZWN0b3IuZ2V0STIoKSAqIGhvc3QuZ2V0UjQoKSAvIGhvc3QuZ2V0UG9wdWxhdGlvbkNvdW50KCk7DQorCQkJZG91YmxlIHRvRTQzID0gaG9zdEFERTMgKiBob3N0SW5mZWN0aXZpdHkzICogYWRqdXN0ZWRCaXRpbmdSYXRlDQorCQkJCQkqIHZlY3Rvci5nZXRJMygpICogaG9zdC5nZXRSNCgpIC8gaG9zdC5nZXRQb3B1bGF0aW9uQ291bnQoKTsNCisNCisJCQlkb3VibGUgdG9JMTIgPSBhZGp1c3RlZEhvc3RTZWNvbmRhcnlJbmN1YmF0aW9uUmF0ZSAqIGhvc3QuZ2V0RTEyKCk7DQorCQkJZG91YmxlIHRvSTEzID0gYWRqdXN0ZWRIb3N0U2Vjb25kYXJ5SW5jdWJhdGlvblJhdGUgKiBob3N0LmdldEUxMygpOw0KKwkJCWRvdWJsZSB0b0kxNCA9IGFkanVzdGVkSG9zdFNlY29uZGFyeUluY3ViYXRpb25SYXRlICogaG9zdC5nZXRFMTQoKTsNCisJCQlkb3VibGUgdG9JMjEgPSBhZGp1c3RlZEhvc3RTZWNvbmRhcnlJbmN1YmF0aW9uUmF0ZSAqIGhvc3QuZ2V0RTIxKCk7DQorCQkJZG91YmxlIHRvSTIzID0gYWRqdXN0ZWRIb3N0U2Vjb25kYXJ5SW5jdWJhdGlvblJhdGUgKiBob3N0LmdldEUyMygpOw0KKwkJCWRvdWJsZSB0b0kyNCA9IGFkanVzdGVkSG9zdFNlY29uZGFyeUluY3ViYXRpb25SYXRlICogaG9zdC5nZXRFMjQoKTsNCisJCQlkb3VibGUgdG9JMzEgPSBhZGp1c3RlZEhvc3RTZWNvbmRhcnlJbmN1YmF0aW9uUmF0ZSAqIGhvc3QuZ2V0RTMxKCk7DQorCQkJZG91YmxlIHRvSTMyID0gYWRqdXN0ZWRIb3N0U2Vjb25kYXJ5SW5jdWJhdGlvblJhdGUgKiBob3N0LmdldEUzMigpOw0KKwkJCWRvdWJsZSB0b0kzNCA9IGFkanVzdGVkSG9zdFNlY29uZGFyeUluY3ViYXRpb25SYXRlICogaG9zdC5nZXRFMzQoKTsNCisJCQlkb3VibGUgdG9JNDEgPSBhZGp1c3RlZEhvc3RTZWNvbmRhcnlJbmN1YmF0aW9uUmF0ZSAqIGhvc3QuZ2V0RTQxKCk7DQorCQkJZG91YmxlIHRvSTQyID0gYWRqdXN0ZWRIb3N0U2Vjb25kYXJ5SW5jdWJhdGlvblJhdGUgKiBob3N0LmdldEU0MigpOw0KKwkJCWRvdWJsZSB0b0k0MyA9IGFkanVzdGVkSG9zdFNlY29uZGFyeUluY3ViYXRpb25SYXRlICogaG9zdC5nZXRFNDMoKTsNCisNCisJCQlkb3VibGUgdG9SMTIgPSBhZGp1c3RlZEhvc3RTZWNvbmRhcnlSZWNvdmVyeVJhdGUgKiBob3N0LmdldEkxMigpOw0KKwkJCWRvdWJsZSB0b1IxMyA9IGFkanVzdGVkSG9zdFNlY29uZGFyeVJlY292ZXJ5UmF0ZSAqIGhvc3QuZ2V0STEzKCk7DQorCQkJZG91YmxlIHRvUjE0ID0gYWRqdXN0ZWRIb3N0U2Vjb25kYXJ5UmVjb3ZlcnlSYXRlICogaG9zdC5nZXRJMTQoKTsNCisJCQlkb3VibGUgdG9SMjEgPSBhZGp1c3RlZEhvc3RTZWNvbmRhcnlSZWNvdmVyeVJhdGUgKiBob3N0LmdldEkyMSgpOw0KKwkJCWRvdWJsZSB0b1IyMyA9IGFkanVzdGVkSG9zdFNlY29uZGFyeVJlY292ZXJ5UmF0ZSAqIGhvc3QuZ2V0STIzKCk7DQorCQkJZG91YmxlIHRvUjI0ID0gYWRqdXN0ZWRIb3N0U2Vjb25kYXJ5UmVjb3ZlcnlSYXRlICogaG9zdC5nZXRJMjQoKTsNCisJCQlkb3VibGUgdG9SMzEgPSBhZGp1c3RlZEhvc3RTZWNvbmRhcnlSZWNvdmVyeVJhdGUgKiBob3N0LmdldEkzMSgpOw0KKwkJCWRvdWJsZSB0b1IzMiA9IGFkanVzdGVkSG9zdFNlY29uZGFyeVJlY292ZXJ5UmF0ZSAqIGhvc3QuZ2V0STMyKCk7DQorCQkJZG91YmxlIHRvUjM0ID0gYWRqdXN0ZWRIb3N0U2Vjb25kYXJ5UmVjb3ZlcnlSYXRlICogaG9zdC5nZXRJMzQoKTsNCisJCQlkb3VibGUgdG9SNDEgPSBhZGp1c3RlZEhvc3RTZWNvbmRhcnlSZWNvdmVyeVJhdGUgKiBob3N0LmdldEk0MSgpOw0KKwkJCWRvdWJsZSB0b1I0MiA9IGFkanVzdGVkSG9zdFNlY29uZGFyeVJlY292ZXJ5UmF0ZSAqIGhvc3QuZ2V0STQyKCk7DQorCQkJZG91YmxlIHRvUjQzID0gYWRqdXN0ZWRIb3N0U2Vjb25kYXJ5UmVjb3ZlcnlSYXRlICogaG9zdC5nZXRJNDMoKTsNCisNCisJCQlkb3VibGUgZGVhdGhzSTEgPSBhZGp1c3RlZEhvc3RQcmltYXJ5RGVhdGhSYXRlICogaG9zdC5nZXRJMSgpOw0KKwkJCWRvdWJsZSBkZWF0aHNJMiA9IGFkanVzdGVkSG9zdFByaW1hcnlEZWF0aFJhdGUgKiBob3N0LmdldEkyKCk7DQorCQkJZG91YmxlIGRlYXRoc0kzID0gYWRqdXN0ZWRIb3N0UHJpbWFyeURlYXRoUmF0ZSAqIGhvc3QuZ2V0STMoKTsNCisJCQlkb3VibGUgZGVhdGhzSTQgPSBhZGp1c3RlZEhvc3RQcmltYXJ5RGVhdGhSYXRlICogaG9zdC5nZXRJNCgpOw0KKw0KKwkJCWRvdWJsZSBkZWF0aHNJMTIgPSBhZGp1c3RlZEhvc3RTZWNvbmRhcnlEZWF0aFJhdGUgKiBob3N0LmdldEkxMigpOw0KKwkJCWRvdWJsZSBkZWF0aHNJMTMgPSBhZGp1c3RlZEhvc3RTZWNvbmRhcnlEZWF0aFJhdGUgKiBob3N0LmdldEkxMygpOw0KKwkJCWRvdWJsZSBkZWF0aHNJMTQgPSBhZGp1c3RlZEhvc3RTZWNvbmRhcnlEZWF0aFJhdGUgKiBob3N0LmdldEkxNCgpOw0KKwkJCWRvdWJsZSBkZWF0aHNJMjEgPSBhZGp1c3RlZEhvc3RTZWNvbmRhcnlEZWF0aFJhdGUgKiBob3N0LmdldEkyMSgpOw0KKwkJCWRvdWJsZSBkZWF0aHNJMjMgPSBhZGp1c3RlZEhvc3RTZWNvbmRhcnlEZWF0aFJhdGUgKiBob3N0LmdldEkyMygpOw0KKwkJCWRvdWJsZSBkZWF0aHNJMjQgPSBhZGp1c3RlZEhvc3RTZWNvbmRhcnlEZWF0aFJhdGUgKiBob3N0LmdldEkyNCgpOw0KKwkJCWRvdWJsZSBkZWF0aHNJMzEgPSBhZGp1c3RlZEhvc3RTZWNvbmRhcnlEZWF0aFJhdGUgKiBob3N0LmdldEkzMSgpOw0KKwkJCWRvdWJsZSBkZWF0aHNJMzIgPSBhZGp1c3RlZEhvc3RTZWNvbmRhcnlEZWF0aFJhdGUgKiBob3N0LmdldEkzMigpOw0KKwkJCWRvdWJsZSBkZWF0aHNJMzQgPSBhZGp1c3RlZEhvc3RTZWNvbmRhcnlEZWF0aFJhdGUgKiBob3N0LmdldEkzNCgpOw0KKwkJCWRvdWJsZSBkZWF0aHNJNDEgPSBhZGp1c3RlZEhvc3RTZWNvbmRhcnlEZWF0aFJhdGUgKiBob3N0LmdldEk0MSgpOw0KKwkJCWRvdWJsZSBkZWF0aHNJNDIgPSBhZGp1c3RlZEhvc3RTZWNvbmRhcnlEZWF0aFJhdGUgKiBob3N0LmdldEk0MigpOw0KKwkJCWRvdWJsZSBkZWF0aHNJNDMgPSBhZGp1c3RlZEhvc3RTZWNvbmRhcnlEZWF0aFJhdGUgKiBob3N0LmdldEk0MygpOw0KKw0KKwkJCWhvc3REZWx0YS5zZXRTKC10b0UxIC0gdG9FMiAtIHRvRTMgLSB0b0U0KTsNCisNCisJCQlob3N0RGVsdGEuc2V0RTEodG9FMSAtIHRvSTEpOw0KKwkJCWhvc3REZWx0YS5zZXRFMih0b0UyIC0gdG9JMik7DQorCQkJaG9zdERlbHRhLnNldEUzKHRvRTMgLSB0b0kzKTsNCisJCQlob3N0RGVsdGEuc2V0RTQodG9FNCAtIHRvSTQpOw0KKw0KKwkJCWhvc3REZWx0YS5zZXRJMSh0b0kxIC0gdG9UMSAtIGRlYXRoc0kxKTsNCisJCQlob3N0RGVsdGEuc2V0STIodG9JMiAtIHRvVDIgLSBkZWF0aHNJMik7DQorCQkJaG9zdERlbHRhLnNldEkzKHRvSTMgLSB0b1QzIC0gZGVhdGhzSTMpOw0KKwkJCWhvc3REZWx0YS5zZXRJNCh0b0k0IC0gdG9UNCAtIGRlYXRoc0k0KTsNCisNCisJCQlob3N0RGVsdGEuc2V0VDEodG9UMSAtIHRvUjEpOw0KKwkJCWhvc3REZWx0YS5zZXRUMih0b1QyIC0gdG9SMik7DQorCQkJaG9zdERlbHRhLnNldFQzKHRvVDMgLSB0b1IzKTsNCisJCQlob3N0RGVsdGEuc2V0VDQodG9UNCAtIHRvUjQpOw0KKw0KKwkJCWhvc3REZWx0YS5zZXRSMSh0b1IxIC0gdG9FMTIgLSB0b0UxMyAtIHRvRTE0KTsNCisJCQlob3N0RGVsdGEuc2V0UjIodG9SMiAtIHRvRTIxIC0gdG9FMjMgLSB0b0UyNCk7DQorCQkJaG9zdERlbHRhLnNldFIzKHRvUjMgLSB0b0UzMSAtIHRvRTMyIC0gdG9FMzQpOw0KKwkJCWhvc3REZWx0YS5zZXRSNCh0b1I0IC0gdG9FNDEgLSB0b0U0MiAtIHRvRTQzKTsNCisNCisJCQlob3N0RGVsdGEuc2V0RTEyKHRvRTEyIC0gdG9JMTIpOw0KKwkJCWhvc3REZWx0YS5zZXRFMTModG9FMTMgLSB0b0kxMyk7DQorCQkJaG9zdERlbHRhLnNldEUxNCh0b0UxNCAtIHRvSTE0KTsNCisJCQlob3N0RGVsdGEuc2V0RTIxKHRvRTIxIC0gdG9JMjEpOw0KKwkJCWhvc3REZWx0YS5zZXRFMjModG9FMjMgLSB0b0kyMyk7DQorCQkJaG9zdERlbHRhLnNldEUyNCh0b0UyNCAtIHRvSTI0KTsNCisJCQlob3N0RGVsdGEuc2V0RTMxKHRvRTMxIC0gdG9JMzEpOw0KKwkJCWhvc3REZWx0YS5zZXRFMzIodG9FMzIgLSB0b0kzMik7DQorCQkJaG9zdERlbHRhLnNldEUzNCh0b0UzNCAtIHRvSTM0KTsNCisJCQlob3N0RGVsdGEuc2V0RTQxKHRvRTQxIC0gdG9JNDEpOw0KKwkJCWhvc3REZWx0YS5zZXRFNDIodG9FNDIgLSB0b0k0Mik7DQorCQkJaG9zdERlbHRhLnNldEU0Myh0b0U0MyAtIHRvSTQzKTsNCisNCisJCQlob3N0RGVsdGEuc2V0STEyKHRvSTEyIC0gdG9SMTIpOw0KKwkJCWhvc3REZWx0YS5zZXRJMTModG9JMTMgLSB0b1IxMyk7DQorCQkJaG9zdERlbHRhLnNldEkxNCh0b0kxNCAtIHRvUjE0KTsNCisJCQlob3N0RGVsdGEuc2V0STIxKHRvSTIxIC0gdG9SMjEpOw0KKwkJCWhvc3REZWx0YS5zZXRJMjModG9JMjMgLSB0b1IyMyk7DQorCQkJaG9zdERlbHRhLnNldEkyNCh0b0kyNCAtIHRvUjI0KTsNCisJCQlob3N0RGVsdGEuc2V0STMxKHRvSTMxIC0gdG9SMzEpOw0KKwkJCWhvc3REZWx0YS5zZXRJMzIodG9JMzIgLSB0b1IzMik7DQorCQkJaG9zdERlbHRhLnNldEkzNCh0b0kzNCAtIHRvUjM0KTsNCisJCQlob3N0RGVsdGEuc2V0STQxKHRvSTQxIC0gdG9SNDEpOw0KKwkJCWhvc3REZWx0YS5zZXRJNDIodG9JNDIgLSB0b1I0Mik7DQorCQkJaG9zdERlbHRhLnNldEk0Myh0b0k0MyAtIHRvUjQzKTsNCisNCisJCQlob3N0RGVsdGEuc2V0Uih0b1IxMiArIHRvUjEzICsgdG9SMTQgKyB0b1IyMSArIHRvUjIzICsgdG9SMjQNCisJCQkJCSsgdG9SMzEgKyB0b1IzMiArIHRvUjM0ICsgdG9SNDEgKyB0b1I0MiArIHRvUjQzKTsNCisNCisJCQlob3N0RGVsdGEuc2V0SW5jaWRlbmNlMSh0b0UxKTsNCisJCQlob3N0RGVsdGEuc2V0SW5jaWRlbmNlMih0b0UyKTsNCisJCQlob3N0RGVsdGEuc2V0SW5jaWRlbmNlMyh0b0UzKTsNCisJCQlob3N0RGVsdGEuc2V0SW5jaWRlbmNlNCh0b0U0KTsNCisNCisJCQlob3N0RGVsdGEuc2V0SW5jaWRlbmNlMTIodG9FMTIpOw0KKwkJCWhvc3REZWx0YS5zZXRJbmNpZGVuY2UxMyh0b0UxMyk7DQorCQkJaG9zdERlbHRhLnNldEluY2lkZW5jZTE0KHRvRTE0KTsNCisJCQlob3N0RGVsdGEuc2V0SW5jaWRlbmNlMjEodG9FMjEpOw0KKwkJCWhvc3REZWx0YS5zZXRJbmNpZGVuY2UyMyh0b0UyMyk7DQorCQkJaG9zdERlbHRhLnNldEluY2lkZW5jZTI0KHRvRTI0KTsNCisJCQlob3N0RGVsdGEuc2V0SW5jaWRlbmNlMzEodG9FMzEpOw0KKwkJCWhvc3REZWx0YS5zZXRJbmNpZGVuY2UzMih0b0UzMik7DQorCQkJaG9zdERlbHRhLnNldEluY2lkZW5jZTM0KHRvRTM0KTsNCisJCQlob3N0RGVsdGEuc2V0SW5jaWRlbmNlNDEodG9FNDEpOw0KKwkJCWhvc3REZWx0YS5zZXRJbmNpZGVuY2U0Mih0b0U0Mik7DQorCQkJaG9zdERlbHRhLnNldEluY2lkZW5jZTQzKHRvRTQzKTsNCisNCisJCQlob3N0RGVsdGEuc2V0SW5jaWRlbmNlKHRvRTEgKyB0b0UyICsgdG9FMyArIHRvRTQgKyB0b0UxMiArIHRvRTEzDQorCQkJCQkrIHRvRTE0ICsgdG9FMjEgKyB0b0UyMyArIHRvRTI0ICsgdG9FMzEgKyB0b0UzMiArIHRvRTM0DQorCQkJCQkrIHRvRTQxICsgdG9FNDIgKyB0b0U0Myk7DQorDQorCQkJaG9zdERlbHRhLnNldERpc2Vhc2VEZWF0aHMxKGRlYXRoc0kxKTsNCisJCQlob3N0RGVsdGEuc2V0RGlzZWFzZURlYXRoczIoZGVhdGhzSTIpOw0KKwkJCWhvc3REZWx0YS5zZXREaXNlYXNlRGVhdGhzMyhkZWF0aHNJMyk7DQorCQkJaG9zdERlbHRhLnNldERpc2Vhc2VEZWF0aHM0KGRlYXRoc0k0KTsNCisNCisJCQlob3N0RGVsdGEuc2V0RGlzZWFzZURlYXRoczEyKGRlYXRoc0kxMik7DQorCQkJaG9zdERlbHRhLnNldERpc2Vhc2VEZWF0aHMxMyhkZWF0aHNJMTMpOw0KKwkJCWhvc3REZWx0YS5zZXREaXNlYXNlRGVhdGhzMTQoZGVhdGhzSTE0KTsNCisJCQlob3N0RGVsdGEuc2V0RGlzZWFzZURlYXRoczIxKGRlYXRoc0kyMSk7DQorCQkJaG9zdERlbHRhLnNldERpc2Vhc2VEZWF0aHMyMyhkZWF0aHNJMjMpOw0KKwkJCWhvc3REZWx0YS5zZXREaXNlYXNlRGVhdGhzMjQoZGVhdGhzSTI0KTsNCisJCQlob3N0RGVsdGEuc2V0RGlzZWFzZURlYXRoczMxKGRlYXRoc0kzMSk7DQorCQkJaG9zdERlbHRhLnNldERpc2Vhc2VEZWF0aHMzMihkZWF0aHNJMzIpOw0KKwkJCWhvc3REZWx0YS5zZXREaXNlYXNlRGVhdGhzMzQoZGVhdGhzSTM0KTsNCisJCQlob3N0RGVsdGEuc2V0RGlzZWFzZURlYXRoczQxKGRlYXRoc0k0MSk7DQorCQkJaG9zdERlbHRhLnNldERpc2Vhc2VEZWF0aHM0MihkZWF0aHNJNDIpOw0KKwkJCWhvc3REZWx0YS5zZXREaXNlYXNlRGVhdGhzNDMoZGVhdGhzSTQzKTsNCisNCisJCQlob3N0RGVsdGEuc2V0RGlzZWFzZURlYXRocyhkZWF0aHNJMSArIGRlYXRoc0kyICsgZGVhdGhzSTMNCisJCQkJCSsgZGVhdGhzSTQgKyBkZWF0aHNJMTIgKyBkZWF0aHNJMTMgKyBkZWF0aHNJMTQgKyBkZWF0aHNJMjENCisJCQkJCSsgZGVhdGhzSTIzICsgZGVhdGhzSTI0ICsgZGVhdGhzSTMxICsgZGVhdGhzSTMyICsgZGVhdGhzSTM0DQorCQkJCQkrIGRlYXRoc0k0MSArIGRlYXRoc0k0MiArIGRlYXRoc0k0Myk7DQorDQorCQkJcmV0dXJuIGhvc3REZWx0YTsNCisJCX0gZWxzZSBpZiAoZGlzZWFzZUxhYmVsIGluc3RhbmNlb2YgRGVuZ3VlTW9kZWxWZWN0b3JMYWJlbCkgew0KKwkJCURlbmd1ZU1vZGVsVmVjdG9yTGFiZWxWYWx1ZSB2ZWN0b3JEZWx0YSA9IChEZW5ndWVNb2RlbFZlY3RvckxhYmVsVmFsdWUpIHJldHVyblZhbHVlOw0KKwkJCURlbmd1ZU1vZGVsVmVjdG9yTGFiZWxWYWx1ZSB2ZWN0b3IgPSAoRGVuZ3VlTW9kZWxWZWN0b3JMYWJlbFZhbHVlKSBjdXJyZW50U3RhdGU7DQorDQorCQkJaWYgKHZlY3Rvci5nZXRQb3B1bGF0aW9uQ291bnQoKSA9PSAwLjApIHsNCisJCQkJdmVjdG9yRGVsdGEucmVzZXQoKTsNCisJCQkJcmV0dXJuIHZlY3RvckRlbHRhOw0KKwkJCX0NCisNCisJCQlEZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlIGhvc3QgPSBudWxsOw0KKwkJCUVMaXN0PE5vZGVMYWJlbD4gYWxsTGFiZWxzID0gZGlzZWFzZUxhYmVsLmdldE5vZGUoKS5nZXRMYWJlbHMoKTsNCisNCisJCQlmb3IgKE5vZGVMYWJlbCBsYWJlbCA6IGFsbExhYmVscykgew0KKwkJCQlpZiAobGFiZWwgaW5zdGFuY2VvZiBEZW5ndWVNb2RlbEhvc3RMYWJlbCkgew0KKwkJCQkJRGVuZ3VlTW9kZWxIb3N0TGFiZWwgaG9zdExhYmVsID0gKERlbmd1ZU1vZGVsSG9zdExhYmVsKSBsYWJlbDsNCisNCisJCQkJCWlmIChob3N0TGFiZWwuZ2V0RGVjb3JhdG9yKCkgPT0gdGhpcykgew0KKwkJCQkJCWhvc3QgPSAoRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZSkgaG9zdExhYmVsDQorCQkJCQkJCQkuZ2V0VGVtcFZhbHVlKCk7DQorCQkJCQl9DQorCQkJCX0NCisJCQl9DQorDQorCQkJZG91YmxlIGFkanVzdGVkQml0aW5nUmF0ZSA9IGJpdGluZ1JhdGUgKiAoZG91YmxlKSB0aW1lRGVsdGENCisJCQkJCS8gKGRvdWJsZSkgdGltZVBlcmlvZDsNCisJCQlkb3VibGUgYWRqdXN0ZWRWZWN0b3JJbmN1YmF0aW9uUmF0ZSA9IHZlY3RvckluY3ViYXRpb25SYXRlDQorCQkJCQkqIChkb3VibGUpIHRpbWVEZWx0YSAvIChkb3VibGUpIHRpbWVQZXJpb2Q7DQorDQorCQkJZG91YmxlIHRvRTEgPSAwLjA7DQorCQkJZG91YmxlIHRvRTIgPSAwLjA7DQorCQkJZG91YmxlIHRvRTMgPSAwLjA7DQorCQkJZG91YmxlIHRvRTQgPSAwLjA7DQorDQorCQkJaWYgKGhvc3QuZ2V0UG9wdWxhdGlvbkNvdW50KCkgIT0gMC4wKSB7DQorCQkJCXRvRTEgPSB2ZWN0b3JJbmZlY3Rpdml0eTEgKiBhZGp1c3RlZEJpdGluZ1JhdGUgKiBob3N0LmdldEkxKCkNCisJCQkJCQkqIHZlY3Rvci5nZXRTKCkgLyBob3N0LmdldFBvcHVsYXRpb25Db3VudCgpOw0KKwkJCQl0b0UxICs9IHZlY3RvckFERTEgKiB2ZWN0b3JJbmZlY3Rpdml0eTEgKiBhZGp1c3RlZEJpdGluZ1JhdGUNCisJCQkJCQkqIChob3N0LmdldEkyMSgpICsgaG9zdC5nZXRJMzEoKSArIGhvc3QuZ2V0STQxKCkpDQorCQkJCQkJKiB2ZWN0b3IuZ2V0UygpIC8gaG9zdC5nZXRQb3B1bGF0aW9uQ291bnQoKTsNCisJCQkJdG9FMiA9IHZlY3RvckluZmVjdGl2aXR5MiAqIGFkanVzdGVkQml0aW5nUmF0ZSAqIGhvc3QuZ2V0STIoKQ0KKwkJCQkJCSogdmVjdG9yLmdldFMoKSAvIGhvc3QuZ2V0UG9wdWxhdGlvbkNvdW50KCk7DQorCQkJCXRvRTIgKz0gdmVjdG9yQURFMiAqIHZlY3RvckluZmVjdGl2aXR5MiAqIGFkanVzdGVkQml0aW5nUmF0ZQ0KKwkJCQkJCSogKGhvc3QuZ2V0STEyKCkgKyBob3N0LmdldEkzMigpICsgaG9zdC5nZXRJNDIoKSkNCisJCQkJCQkqIHZlY3Rvci5nZXRTKCkgLyBob3N0LmdldFBvcHVsYXRpb25Db3VudCgpOw0KKwkJCQl0b0UzID0gdmVjdG9ySW5mZWN0aXZpdHkzICogYWRqdXN0ZWRCaXRpbmdSYXRlICogaG9zdC5nZXRJMygpDQorCQkJCQkJKiB2ZWN0b3IuZ2V0UygpIC8gaG9zdC5nZXRQb3B1bGF0aW9uQ291bnQoKTsNCisJCQkJdG9FMyArPSB2ZWN0b3JBREUzICogdmVjdG9ySW5mZWN0aXZpdHkzICogYWRqdXN0ZWRCaXRpbmdSYXRlDQorCQkJCQkJKiAoaG9zdC5nZXRJMTMoKSArIGhvc3QuZ2V0STIzKCkgKyBob3N0LmdldEk0MygpKQ0KKwkJCQkJCSogdmVjdG9yLmdldFMoKSAvIGhvc3QuZ2V0UG9wdWxhdGlvbkNvdW50KCk7DQorCQkJCXRvRTQgPSB2ZWN0b3JJbmZlY3Rpdml0eTQgKiBhZGp1c3RlZEJpdGluZ1JhdGUgKiBob3N0LmdldEk0KCkNCisJCQkJCQkqIHZlY3Rvci5nZXRTKCkgLyBob3N0LmdldFBvcHVsYXRpb25Db3VudCgpOw0KKwkJCQl0b0U0ICs9IHZlY3RvckFERTQgKiB2ZWN0b3JJbmZlY3Rpdml0eTQgKiBhZGp1c3RlZEJpdGluZ1JhdGUNCisJCQkJCQkqIChob3N0LmdldEkxNCgpICsgaG9zdC5nZXRJMjQoKSArIGhvc3QuZ2V0STM0KCkpDQorCQkJCQkJKiB2ZWN0b3IuZ2V0UygpIC8gaG9zdC5nZXRQb3B1bGF0aW9uQ291bnQoKTsNCisJCQl9DQorDQorCQkJZG91YmxlIHRvSTEgPSBhZGp1c3RlZFZlY3RvckluY3ViYXRpb25SYXRlICogdmVjdG9yLmdldEUxKCk7DQorCQkJZG91YmxlIHRvSTIgPSBhZGp1c3RlZFZlY3RvckluY3ViYXRpb25SYXRlICogdmVjdG9yLmdldEUyKCk7DQorCQkJZG91YmxlIHRvSTMgPSBhZGp1c3RlZFZlY3RvckluY3ViYXRpb25SYXRlICogdmVjdG9yLmdldEUzKCk7DQorCQkJZG91YmxlIHRvSTQgPSBhZGp1c3RlZFZlY3RvckluY3ViYXRpb25SYXRlICogdmVjdG9yLmdldEU0KCk7DQorDQorCQkJdmVjdG9yRGVsdGEuc2V0UygtdG9FMSAtIHRvRTIgLSB0b0UzIC0gdG9FNCk7DQorDQorCQkJdmVjdG9yRGVsdGEuc2V0RTEodG9FMSAtIHRvSTEpOw0KKwkJCXZlY3RvckRlbHRhLnNldEUyKHRvRTIgLSB0b0kyKTsNCisJCQl2ZWN0b3JEZWx0YS5zZXRFMyh0b0UzIC0gdG9JMyk7DQorCQkJdmVjdG9yRGVsdGEuc2V0RTQodG9FNCAtIHRvSTQpOw0KKw0KKwkJCXZlY3RvckRlbHRhLnNldEkxKHRvSTEpOw0KKwkJCXZlY3RvckRlbHRhLnNldEkyKHRvSTIpOw0KKwkJCXZlY3RvckRlbHRhLnNldEkzKHRvSTMpOw0KKwkJCXZlY3RvckRlbHRhLnNldEk0KHRvSTQpOw0KKw0KKwkJCXZlY3RvckRlbHRhLnNldEluY2lkZW5jZTEodG9FMSk7DQorCQkJdmVjdG9yRGVsdGEuc2V0SW5jaWRlbmNlMih0b0UyKTsNCisJCQl2ZWN0b3JEZWx0YS5zZXRJbmNpZGVuY2UzKHRvRTMpOw0KKwkJCXZlY3RvckRlbHRhLnNldEluY2lkZW5jZTQodG9FNCk7DQorDQorCQkJdmVjdG9yRGVsdGEuc2V0SW5jaWRlbmNlKHRvRTEgKyB0b0UyICsgdG9FMyArIHRvRTQpOw0KKwkJCXZlY3RvckRlbHRhLnNldERpc2Vhc2VEZWF0aHMoMC4wKTsNCisNCisJCQlyZXR1cm4gdmVjdG9yRGVsdGE7DQorCQl9DQorDQorCQlyZXR1cm4gbnVsbDsNCisJfQ0KKw0KKwlAT3ZlcnJpZGUNCisJcHVibGljIERpc2Vhc2VNb2RlbExhYmVsIGNyZWF0ZURpc2Vhc2VNb2RlbExhYmVsKFN0cmluZyBwb3B1bGF0aW9uSWRlbnRpZmllcikgew0KKwkJaWYgKHBvcHVsYXRpb25JZGVudGlmaWVyLmVxdWFscyh2ZWN0b3JQb3B1bGF0aW9uSWRlbnRpZmllcikpIHsNCisJCQlyZXR1cm4gVmVjdG9yRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlRGVuZ3VlTW9kZWxWZWN0b3JMYWJlbCgpOw0KKwkJfSBlbHNlIHsNCisJCQlyZXR1cm4gVmVjdG9yRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlRGVuZ3VlTW9kZWxIb3N0TGFiZWwoKTsNCisJCX0NCisJfQ0KKw0KKwlAT3ZlcnJpZGUNCisJcHVibGljIERpc2Vhc2VNb2RlbExhYmVsVmFsdWUgY3JlYXRlRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZSgNCisJCQlTdHJpbmcgcG9wdWxhdGlvbklkZW50aWZpZXIpIHsNCisJCWlmIChwb3B1bGF0aW9uSWRlbnRpZmllci5lcXVhbHModmVjdG9yUG9wdWxhdGlvbklkZW50aWZpZXIpKSB7DQorCQkJcmV0dXJuIFZlY3RvckZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZURlbmd1ZU1vZGVsVmVjdG9yTGFiZWxWYWx1ZSgpOw0KKwkJfSBlbHNlIHsNCisJCQlyZXR1cm4gVmVjdG9yRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZSgpOw0KKwkJfQ0KKwl9DQorDQorCUBPdmVycmlkZQ0KKwlwdWJsaWMgSW5mZWN0b3IgY3JlYXRlSW5mZWN0b3IoKSB7DQorCQlTSUluZmVjdG9yIHJldFZhbHVlID0gU3RhbmRhcmRGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVTSUluZmVjdG9yKCk7DQorDQorCQlyZXRWYWx1ZS5zZXREaXNlYXNlTmFtZShnZXREaXNlYXNlTmFtZSgpKTsNCisJCXJldFZhbHVlLnNldFBvcHVsYXRpb25JZGVudGlmaWVyKGdldFBvcHVsYXRpb25JZGVudGlmaWVyKCkpOw0KKwkJcmV0dXJuIHJldFZhbHVlOw0KKwl9DQorDQorCUBPdmVycmlkZQ0KKwlwdWJsaWMgdm9pZCBkb01vZGVsU3BlY2lmaWNBZGp1c3RtZW50cyhMYWJlbFZhbHVlIGN1cnJlbnRTdGF0ZSkgew0KKwkJLy8gRG8gbm90aGluZw0KKwl9DQorDQorfSAvLyBTaW1wbGVEZW5ndWVNb2RlbEltcGwNCmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3Ivc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy92ZWN0b3IvaW1wbC9WZWN0b3JEaXNlYXNlTW9kZWxJbXBsLmphdmEgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3Ivc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy92ZWN0b3IvaW1wbC9WZWN0b3JEaXNlYXNlTW9kZWxJbXBsLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTYxMGJiYgotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3ZlY3Rvci9pbXBsL1ZlY3RvckRpc2Vhc2VNb2RlbEltcGwuamF2YQpAQCAtMCwwICsxLDI2OCBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLmltcGw7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIAorICogQ29weXJpZ2h0IChjKSAyMDExIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiAKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdCAKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sIAorICogCisgKiBDb250cmlidXRvcnM6IAorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiAKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuQmFzaWNFTGlzdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuRUxpc3Q7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzczsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuaW1wbC5FTm90aWZpY2F0aW9uSW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuU1RFTVVSSTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguR3JhcGg7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLk5vZGVMYWJlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuTW9kZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLlNURU1UaW1lOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5pbXBsLlN0YW5kYXJkRGlzZWFzZU1vZGVsSW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLlZlY3RvckRpc2Vhc2VNb2RlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLlZlY3RvclBhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLlBvcHVsYXRpb25Nb2RlbExhYmVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZFBvcHVsYXRpb25Nb2RlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuaW1wbC5TdGFuZGFyZEZhY3RvcnlJbXBsOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiBBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+RGlzZWFzZSBNb2RlbDwvYj48L2VtPicuCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIDxwPgorICogVGhlIGZvbGxvd2luZyBmZWF0dXJlcyBhcmUgaW1wbGVtZW50ZWQ6CisgKiA8dWw+CisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5pbXBsLlZlY3RvckRpc2Vhc2VNb2RlbEltcGwjZ2V0VmVjdG9yUG9wdWxhdGlvbklkZW50aWZpZXIgPGVtPlZlY3RvciBQb3B1bGF0aW9uIElkZW50aWZpZXI8L2VtPn08L2xpPgorICogPC91bD4KKyAqIDwvcD4KKyAqCisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBhYnN0cmFjdCBjbGFzcyBWZWN0b3JEaXNlYXNlTW9kZWxJbXBsIGV4dGVuZHMgU3RhbmRhcmREaXNlYXNlTW9kZWxJbXBsIGltcGxlbWVudHMgVmVjdG9yRGlzZWFzZU1vZGVsIHsKKwkvKioKKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0VmVjdG9yUG9wdWxhdGlvbklkZW50aWZpZXIoKSA8ZW0+VmVjdG9yIFBvcHVsYXRpb24gSWRlbnRpZmllcjwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZ2V0VmVjdG9yUG9wdWxhdGlvbklkZW50aWZpZXIoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgU3RyaW5nIFZFQ1RPUl9QT1BVTEFUSU9OX0lERU5USUZJRVJfRURFRkFVTFQgPSAiYW5vcGhlbGVzIjsKKworCS8qKgorCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldFZlY3RvclBvcHVsYXRpb25JZGVudGlmaWVyKCkgPGVtPlZlY3RvciBQb3B1bGF0aW9uIElkZW50aWZpZXI8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI2dldFZlY3RvclBvcHVsYXRpb25JZGVudGlmaWVyKCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgU3RyaW5nIHZlY3RvclBvcHVsYXRpb25JZGVudGlmaWVyID0gVkVDVE9SX1BPUFVMQVRJT05fSURFTlRJRklFUl9FREVGQVVMVDsKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBWZWN0b3JEaXNlYXNlTW9kZWxJbXBsKCkgeworCQlzdXBlcigpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCBFQ2xhc3MgZVN0YXRpY0NsYXNzKCkgeworCQlyZXR1cm4gVmVjdG9yUGFja2FnZS5MaXRlcmFscy5WRUNUT1JfRElTRUFTRV9NT0RFTDsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgU3RyaW5nIGdldFZlY3RvclBvcHVsYXRpb25JZGVudGlmaWVyKCkgeworCQlyZXR1cm4gdmVjdG9yUG9wdWxhdGlvbklkZW50aWZpZXI7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgc2V0VmVjdG9yUG9wdWxhdGlvbklkZW50aWZpZXIoU3RyaW5nIG5ld1ZlY3RvclBvcHVsYXRpb25JZGVudGlmaWVyKSB7CisJCVN0cmluZyBvbGRWZWN0b3JQb3B1bGF0aW9uSWRlbnRpZmllciA9IHZlY3RvclBvcHVsYXRpb25JZGVudGlmaWVyOworCQl2ZWN0b3JQb3B1bGF0aW9uSWRlbnRpZmllciA9IG5ld1ZlY3RvclBvcHVsYXRpb25JZGVudGlmaWVyOworCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpCisJCQllTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBWZWN0b3JQYWNrYWdlLlZFQ1RPUl9ESVNFQVNFX01PREVMX19WRUNUT1JfUE9QVUxBVElPTl9JREVOVElGSUVSLCBvbGRWZWN0b3JQb3B1bGF0aW9uSWRlbnRpZmllciwgdmVjdG9yUG9wdWxhdGlvbklkZW50aWZpZXIpKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgT2JqZWN0IGVHZXQoaW50IGZlYXR1cmVJRCwgYm9vbGVhbiByZXNvbHZlLCBib29sZWFuIGNvcmVUeXBlKSB7CisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7CisJCQljYXNlIFZlY3RvclBhY2thZ2UuVkVDVE9SX0RJU0VBU0VfTU9ERUxfX1ZFQ1RPUl9QT1BVTEFUSU9OX0lERU5USUZJRVI6CisJCQkJcmV0dXJuIGdldFZlY3RvclBvcHVsYXRpb25JZGVudGlmaWVyKCk7CisJCX0KKwkJcmV0dXJuIHN1cGVyLmVHZXQoZmVhdHVyZUlELCByZXNvbHZlLCBjb3JlVHlwZSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgZVNldChpbnQgZmVhdHVyZUlELCBPYmplY3QgbmV3VmFsdWUpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5WRUNUT1JfRElTRUFTRV9NT0RFTF9fVkVDVE9SX1BPUFVMQVRJT05fSURFTlRJRklFUjoKKwkJCQlzZXRWZWN0b3JQb3B1bGF0aW9uSWRlbnRpZmllcigoU3RyaW5nKW5ld1ZhbHVlKTsKKwkJCQlyZXR1cm47CisJCX0KKwkJc3VwZXIuZVNldChmZWF0dXJlSUQsIG5ld1ZhbHVlKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBlVW5zZXQoaW50IGZlYXR1cmVJRCkgeworCQlzd2l0Y2ggKGZlYXR1cmVJRCkgeworCQkJY2FzZSBWZWN0b3JQYWNrYWdlLlZFQ1RPUl9ESVNFQVNFX01PREVMX19WRUNUT1JfUE9QVUxBVElPTl9JREVOVElGSUVSOgorCQkJCXNldFZlY3RvclBvcHVsYXRpb25JZGVudGlmaWVyKFZFQ1RPUl9QT1BVTEFUSU9OX0lERU5USUZJRVJfRURFRkFVTFQpOworCQkJCXJldHVybjsKKwkJfQorCQlzdXBlci5lVW5zZXQoZmVhdHVyZUlEKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgYm9vbGVhbiBlSXNTZXQoaW50IGZlYXR1cmVJRCkgeworCQlzd2l0Y2ggKGZlYXR1cmVJRCkgeworCQkJY2FzZSBWZWN0b3JQYWNrYWdlLlZFQ1RPUl9ESVNFQVNFX01PREVMX19WRUNUT1JfUE9QVUxBVElPTl9JREVOVElGSUVSOgorCQkJCXJldHVybiBWRUNUT1JfUE9QVUxBVElPTl9JREVOVElGSUVSX0VERUZBVUxUID09IG51bGwgPyB2ZWN0b3JQb3B1bGF0aW9uSWRlbnRpZmllciAhPSBudWxsIDogIVZFQ1RPUl9QT1BVTEFUSU9OX0lERU5USUZJRVJfRURFRkFVTFQuZXF1YWxzKHZlY3RvclBvcHVsYXRpb25JZGVudGlmaWVyKTsKKwkJfQorCQlyZXR1cm4gc3VwZXIuZUlzU2V0KGZlYXR1cmVJRCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIFN0cmluZyB0b1N0cmluZygpIHsKKwkJaWYgKGVJc1Byb3h5KCkpIHJldHVybiBzdXBlci50b1N0cmluZygpOworCisJCVN0cmluZ0J1ZmZlciByZXN1bHQgPSBuZXcgU3RyaW5nQnVmZmVyKHN1cGVyLnRvU3RyaW5nKCkpOworCQlyZXN1bHQuYXBwZW5kKCIgKHZlY3RvclBvcHVsYXRpb25JZGVudGlmaWVyOiAiKTsKKwkJcmVzdWx0LmFwcGVuZCh2ZWN0b3JQb3B1bGF0aW9uSWRlbnRpZmllcik7CisJCXJlc3VsdC5hcHBlbmQoJyknKTsKKwkJcmV0dXJuIHJlc3VsdC50b1N0cmluZygpOworCX0KKwkKKwkvKioKKwkgKiBXZSBuZWVkIHRvIG92ZXJyaWRlIHRvIGNoZWNrIGFsbCBwb3B1bGF0aW9uIGdyb3VwcworCSAqLwkKKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBwcmVwYXJlKE1vZGVsIG1vZGVsLCBTVEVNVGltZSB0aW1lKSB7CisJCXN1cGVyLnByZXBhcmUobW9kZWwsIHRpbWUpOworCQkKKwkJYm9vbGVhbiBmb3VuZCA9IGZpbmRQb3B1bGF0aW9uTW9kZWwobW9kZWwsIHRoaXMuZ2V0VmVjdG9yUG9wdWxhdGlvbklkZW50aWZpZXIoKSk7CisJCQkKKwkJaWYoIWZvdW5kKSB7CisJCQkvLyBDcmVhdGUgYSBuZXcgc3RhbmRhcmQgcG9wdWxhdGlvbiBtb2RlbAorCQkJU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWwgc3BtID0gU3RhbmRhcmRGYWN0b3J5SW1wbC5lSU5TVEFOQ0UuY3JlYXRlU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWwoKTsKKwkJCXNwbS5zZXRQb3B1bGF0aW9uSWRlbnRpZmllcih0aGlzLmdldFZlY3RvclBvcHVsYXRpb25JZGVudGlmaWVyKCkpOworCQkJU3RyaW5nIHRpdGxlID0gIkF1dG8gR2VuZXJhdGVkICIrdGhpcy5nZXRWZWN0b3JQb3B1bGF0aW9uSWRlbnRpZmllcigpKyIgcG9wdWxhdGlvbiBtb2RlbCI7CisJCQlTdHJpbmcgbmFtZSA9ICJhdXRvX2dlbl8iK3RoaXMuZ2V0VmVjdG9yUG9wdWxhdGlvbklkZW50aWZpZXIoKSsiX3BvcHVsYXRpb25fbW9kZWwiOworCQkJc3BtLnNldFVSSShTVEVNVVJJLmNyZWF0ZVVSSShuYW1lKyIvIitTVEVNVVJJLmdlbmVyYXRlVW5pcXVlUGFydCgpKSk7CisJCQlzcG0uc2V0TmFtZShuYW1lKTsKKwkJCXNwbS5nZXREdWJsaW5Db3JlKCkuc2V0VGl0bGUodGl0bGUpOworCQkJbW9kZWwuZ2V0Tm9kZURlY29yYXRvcnMoKS5hZGQoMCwgc3BtKTsKKwkJfQorCX0KKwkKKwkvKioKKwkgKiBXZSBuZWVkIHRvIG92ZXJyaWRlIHRoaXMgbWV0aG9kIHRvIHJldHVybiBhbGwgcG9wdWxhdGlvbiBtb2RlbCBsYWJlbHMgZm9yIGJvdGggaHVtYW5zIGFuZCB0aGUgdmVjdG9yCisJICogCisJICogQHBhcmFtIHBvcHVsYXRpb25JZGVudGlmaWVyCisJICogICAgICAgICAgICB0aGUgcG9wdWxhdGlvbiBiZWluZyBsYWJlbGVkCisJICogQHBhcmFtIGdyYXBoCisJICogICAgICAgICAgICB0aGUgZ3JhcGggdG8gc2VhcmNoCisJICogQHJldHVybiB0aGUgUG9wdWxhdGlvbkxhYmVsIGluc3RhbmNlcyBvZiB0aGUgZ3JhcGggdGhhdCBtYXRjaCB0aGUKKwkgKiAgICAgICAgIGlkZW50aWZpZXIuCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIEVMaXN0PFBvcHVsYXRpb25Nb2RlbExhYmVsPiBnZXRQb3B1bGF0aW9uTW9kZWxMYWJlbHMoCisJCQlTdHJpbmcgcG9wdWxhdGlvbklkZW50aWZpZXIsIEdyYXBoIGdyYXBoKSB7CisJCWZpbmFsIEVMaXN0PFBvcHVsYXRpb25Nb2RlbExhYmVsPiByZXRWYWx1ZSA9IG5ldyBCYXNpY0VMaXN0PFBvcHVsYXRpb25Nb2RlbExhYmVsPigpOworCisJCS8vIEl0ZXJhdGUgdGhyb3VnaCBhbGwgb2YgdGhlIHBvcHVsYXRpb24gbGFiZWxzIGluIHRoZSBncmFwaAorCQlFTGlzdDxOb2RlTGFiZWw+IGxhYmVscyA9IGdyYXBoLmdldE5vZGVMYWJlbHNCeVR5cGVVUkkoCisJCQkJUG9wdWxhdGlvbk1vZGVsTGFiZWwuVVJJX1RZUEVfRFlOQU1JQ19QT1BVTEFUSU9OX0xBQkVMKTsKKwkJCisJCWJvb2xlYW4gZm91bmRIdW1hbiA9IGZhbHNlLCBmb3VuZFZlY3RvciA9IGZhbHNlOworCQlmb3IgKE5vZGVMYWJlbCBwbDpsYWJlbHMpIHsKKwkJCWZpbmFsIFBvcHVsYXRpb25Nb2RlbExhYmVsIHBvcHVsYXRpb25MYWJlbCA9IChQb3B1bGF0aW9uTW9kZWxMYWJlbCkgcGw7CisJCQkvLyBJcyB0aGlzIGxhYmVsIGZvciB0aGUgcG9wdWxhdGlvbiB3ZSdyZSBsb29raW5nIGZvcj8KKwkJCWJvb2xlYW4ga2VlcCA9IGZhbHNlOworCQkJaWYocG9wdWxhdGlvbkxhYmVsLmdldFBvcHVsYXRpb25JZGVudGlmaWVyKCkuZXF1YWxzKHBvcHVsYXRpb25JZGVudGlmaWVyKSkgCisJCQkJe2tlZXA9dHJ1ZTtmb3VuZEh1bWFuID0gdHJ1ZTt9CisJCQllbHNlIGlmKHBvcHVsYXRpb25MYWJlbC5nZXRQb3B1bGF0aW9uSWRlbnRpZmllcigpLmVxdWFscyhnZXRWZWN0b3JQb3B1bGF0aW9uSWRlbnRpZmllcigpKSkgCisJCQkJe2tlZXA9dHJ1ZTtmb3VuZFZlY3RvciA9IHRydWU7fQorCQkJCQorCQkJaWYgKGtlZXApIHsKKwkJCQkvLyBZZXMKKwkJCQkvLyBJZiB0aGVyZSBpcyBhIHByb2JsZW0gd2l0aCB0aGUgIm5vZGUgdXJpIiBvZiB0aGUgcG9wdWxhdGlvbgorCQkJCS8vIGxhYmVsIHRoZW4gaXQgd291bGQgbm90IGhhdmUgYmVlbiBhc3NvY2lhdGVkIHdpdGggYSBub2RlCisJCQkJLy8gaW5zdGFuY2UgaW4gdGhlIGdyYXBoIGF0IHRoaXMgcG9pbnQuIFRoaXMgaXMgYSBwcm9ibGVtIGZvcgorCQkJCS8vIGRpc2Vhc2UgbW9kZWxzIHRoYXQgYXJlIHRyeWluZyB0byBsYWJlbCB0aGUgbm9kZSAodGhlcmUgaXNuJ3QKKwkJCQkvLyBvbmUhKS4gU28gZmlsdGVyIG91dCB0aG9zZSBtaXN0YWtlcyBoZXJlLgorCisJCQkJLy8gRG9lcyB0aGUgcG9wdWxhdGlvbiBsYWJlbCBoYXZlIGFuIGFzc29jaWF0ZWQgbm9kZT8KKwkJCQlpZiAocG9wdWxhdGlvbkxhYmVsLmdldE5vZGUoKSAhPSBudWxsKSB7CisJCQkJCS8vIFllcworCQkJCQlyZXRWYWx1ZS5hZGQocG9wdWxhdGlvbkxhYmVsKTsKKwkJCQl9IC8vIGlmIHRoZSBwb3B1bGF0aW9uIGxhYmVsIGhhcyBhIG5vZGUKKwkJCX0gLy8gaWYgdGhlIHBvcHVsYXRpb24gd2UncmUgbG9va2luZyBmb3IKKwkJfSAvLyBmb3IgZWFjaCBwb3B1bGF0aW9uIGxhYmVsCisKKwkJLy8gSWYgd2UgZGlkbid0IGZpbmQgYm90aCBodW1hbnMgYW5kIHRoZSB2ZWN0b3IsIHJldHVybiBhbiBlbXB0eSBsaXN0LgorCQkvLyBUaGlzIHdpbGwgZm9yY2UgYSByZXRyeSBjcmVhdGluZyBkaXNlYXNlIGxhYmVscyBhZnRlciBhbGwgcG9wdWxhdGlvbiBtb2RlbCBsYWJlbHMgaGF2ZQorCQkvLyBoYWQgdGltZSB0byBkZWNvcmF0ZSB0aGUgZ3JhcGgKKwkJaWYoIWZvdW5kSHVtYW4gfHwgIWZvdW5kVmVjdG9yKSByZXRWYWx1ZS5jbGVhcigpOworCQkKKwkJcmV0dXJuIHJldFZhbHVlOworCX0KKworCUBPdmVycmlkZQorCXB1YmxpYyBFTGlzdDxTdHJpbmc+IGdldEFsbExhYmVsSWRlbnRpZmllcnMoKSB7CisJCUVMaXN0PFN0cmluZz4gaWRlbnRpZmllcnMgPSBuZXcgQmFzaWNFTGlzdDxTdHJpbmc+KCk7CisJCQorCQlpZGVudGlmaWVycy5hZGQoZ2V0UG9wdWxhdGlvbklkZW50aWZpZXIoKSk7CisJCWlkZW50aWZpZXJzLmFkZChnZXRWZWN0b3JQb3B1bGF0aW9uSWRlbnRpZmllcigpKTsKKwkJCisJCXJldHVybiBpZGVudGlmaWVyczsKKwl9CisKK30gLy9WZWN0b3JEaXNlYXNlTW9kZWxJbXBsCmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3Ivc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy92ZWN0b3IvaW1wbC9WZWN0b3JGYWN0b3J5SW1wbC5qYXZhIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvdmVjdG9yL2ltcGwvVmVjdG9yRmFjdG9yeUltcGwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZGEzMWY5Ci0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvdmVjdG9yL2ltcGwvVmVjdG9yRmFjdG9yeUltcGwuamF2YQpAQCAtMCwwICsxLDE3MCBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLmltcGw7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIAorICogQ29weXJpZ2h0IChjKSAyMDExIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiAKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdCAKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sIAorICogCisgKiBDb250cmlidXRvcnM6IAorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiAKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzczsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRVBhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLmltcGwuRUZhY3RvcnlJbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5wbHVnaW4uRWNvcmVQbHVnaW47CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci4qOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuTWFjZG9uYWxkUm9zc0Rpc2Vhc2VNb2RlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLlZlY3RvckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5WZWN0b3JQYWNrYWdlOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiBBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgbW9kZWwgPGI+RmFjdG9yeTwvYj4uCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIFZlY3RvckZhY3RvcnlJbXBsIGV4dGVuZHMgRUZhY3RvcnlJbXBsIGltcGxlbWVudHMgVmVjdG9yRmFjdG9yeSB7CisJLyoqCisJICogQ3JlYXRlcyB0aGUgZGVmYXVsdCBmYWN0b3J5IGltcGxlbWVudGF0aW9uLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBzdGF0aWMgVmVjdG9yRmFjdG9yeSBpbml0KCkgeworCQl0cnkgeworCQkJVmVjdG9yRmFjdG9yeSB0aGVWZWN0b3JGYWN0b3J5ID0gKFZlY3RvckZhY3RvcnkpRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RUZhY3RvcnkoImh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3ZlY3Rvci5lY29yZSIpOyAKKwkJCWlmICh0aGVWZWN0b3JGYWN0b3J5ICE9IG51bGwpIHsKKwkJCQlyZXR1cm4gdGhlVmVjdG9yRmFjdG9yeTsKKwkJCX0KKwkJfQorCQljYXRjaCAoRXhjZXB0aW9uIGV4Y2VwdGlvbikgeworCQkJRWNvcmVQbHVnaW4uSU5TVEFOQ0UubG9nKGV4Y2VwdGlvbik7CisJCX0KKwkJcmV0dXJuIG5ldyBWZWN0b3JGYWN0b3J5SW1wbCgpOworCX0KKworCS8qKgorCSAqIENyZWF0ZXMgYW4gaW5zdGFuY2Ugb2YgdGhlIGZhY3RvcnkuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFZlY3RvckZhY3RvcnlJbXBsKCkgeworCQlzdXBlcigpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBFT2JqZWN0IGNyZWF0ZShFQ2xhc3MgZUNsYXNzKSB7CisJCXN3aXRjaCAoZUNsYXNzLmdldENsYXNzaWZpZXJJRCgpKSB7CisJCQljYXNlIFZlY3RvclBhY2thZ2UuTUFDRE9OQUxEX1JPU1NfRElTRUFTRV9NT0RFTDogcmV0dXJuIGNyZWF0ZU1hY2RvbmFsZFJvc3NEaXNlYXNlTW9kZWwoKTsKKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUw6IHJldHVybiBjcmVhdGVEZW5ndWVNb2RlbCgpOworCQkJY2FzZSBWZWN0b3JQYWNrYWdlLlNJTVBMRV9ERU5HVUVfTU9ERUw6IHJldHVybiBjcmVhdGVTaW1wbGVEZW5ndWVNb2RlbCgpOworCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9IT1NUX0xBQkVMOiByZXR1cm4gY3JlYXRlRGVuZ3VlTW9kZWxIb3N0TGFiZWwoKTsKKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRTogcmV0dXJuIGNyZWF0ZURlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWUoKTsKKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfVkVDVE9SX0xBQkVMOiByZXR1cm4gY3JlYXRlRGVuZ3VlTW9kZWxWZWN0b3JMYWJlbCgpOworCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9WRUNUT1JfTEFCRUxfVkFMVUU6IHJldHVybiBjcmVhdGVEZW5ndWVNb2RlbFZlY3RvckxhYmVsVmFsdWUoKTsKKwkJCWRlZmF1bHQ6CisJCQkJdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiVGhlIGNsYXNzICciICsgZUNsYXNzLmdldE5hbWUoKSArICInIGlzIG5vdCBhIHZhbGlkIGNsYXNzaWZpZXIiKTsKKwkJfQorCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBNYWNkb25hbGRSb3NzRGlzZWFzZU1vZGVsIGNyZWF0ZU1hY2RvbmFsZFJvc3NEaXNlYXNlTW9kZWwoKSB7CisJCU1hY2RvbmFsZFJvc3NEaXNlYXNlTW9kZWxJbXBsIG1hY2RvbmFsZFJvc3NEaXNlYXNlTW9kZWwgPSBuZXcgTWFjZG9uYWxkUm9zc0Rpc2Vhc2VNb2RlbEltcGwoKTsKKwkJcmV0dXJuIG1hY2RvbmFsZFJvc3NEaXNlYXNlTW9kZWw7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIERlbmd1ZU1vZGVsIGNyZWF0ZURlbmd1ZU1vZGVsKCkgeworCQlEZW5ndWVNb2RlbEltcGwgZGVuZ3VlTW9kZWwgPSBuZXcgRGVuZ3VlTW9kZWxJbXBsKCk7CisJCXJldHVybiBkZW5ndWVNb2RlbDsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgU2ltcGxlRGVuZ3VlTW9kZWwgY3JlYXRlU2ltcGxlRGVuZ3VlTW9kZWwoKSB7CisJCVNpbXBsZURlbmd1ZU1vZGVsSW1wbCBzaW1wbGVEZW5ndWVNb2RlbCA9IG5ldyBTaW1wbGVEZW5ndWVNb2RlbEltcGwoKTsKKwkJcmV0dXJuIHNpbXBsZURlbmd1ZU1vZGVsOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBEZW5ndWVNb2RlbEhvc3RMYWJlbCBjcmVhdGVEZW5ndWVNb2RlbEhvc3RMYWJlbCgpIHsKKwkJRGVuZ3VlTW9kZWxIb3N0TGFiZWxJbXBsIGRlbmd1ZU1vZGVsSG9zdExhYmVsID0gbmV3IERlbmd1ZU1vZGVsSG9zdExhYmVsSW1wbCgpOworCQlyZXR1cm4gZGVuZ3VlTW9kZWxIb3N0TGFiZWw7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIERlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWUgY3JlYXRlRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZSgpIHsKKwkJRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZUltcGwgZGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZSA9IG5ldyBEZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlSW1wbCgpOworCQlyZXR1cm4gZGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRGVuZ3VlTW9kZWxWZWN0b3JMYWJlbCBjcmVhdGVEZW5ndWVNb2RlbFZlY3RvckxhYmVsKCkgeworCQlEZW5ndWVNb2RlbFZlY3RvckxhYmVsSW1wbCBkZW5ndWVNb2RlbFZlY3RvckxhYmVsID0gbmV3IERlbmd1ZU1vZGVsVmVjdG9yTGFiZWxJbXBsKCk7CisJCXJldHVybiBkZW5ndWVNb2RlbFZlY3RvckxhYmVsOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBEZW5ndWVNb2RlbFZlY3RvckxhYmVsVmFsdWUgY3JlYXRlRGVuZ3VlTW9kZWxWZWN0b3JMYWJlbFZhbHVlKCkgeworCQlEZW5ndWVNb2RlbFZlY3RvckxhYmVsVmFsdWVJbXBsIGRlbmd1ZU1vZGVsVmVjdG9yTGFiZWxWYWx1ZSA9IG5ldyBEZW5ndWVNb2RlbFZlY3RvckxhYmVsVmFsdWVJbXBsKCk7CisJCXJldHVybiBkZW5ndWVNb2RlbFZlY3RvckxhYmVsVmFsdWU7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFZlY3RvclBhY2thZ2UgZ2V0VmVjdG9yUGFja2FnZSgpIHsKKwkJcmV0dXJuIChWZWN0b3JQYWNrYWdlKWdldEVQYWNrYWdlKCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZGVwcmVjYXRlZAorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlARGVwcmVjYXRlZAorCXB1YmxpYyBzdGF0aWMgVmVjdG9yUGFja2FnZSBnZXRQYWNrYWdlKCkgeworCQlyZXR1cm4gVmVjdG9yUGFja2FnZS5lSU5TVEFOQ0U7CisJfQorCit9IC8vVmVjdG9yRmFjdG9yeUltcGwKZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3ZlY3Rvci9pbXBsL1ZlY3RvclBhY2thZ2VJbXBsLmphdmEgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3Ivc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy92ZWN0b3IvaW1wbC9WZWN0b3JQYWNrYWdlSW1wbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVlYzU4ZmUKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3Ivc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy92ZWN0b3IvaW1wbC9WZWN0b3JQYWNrYWdlSW1wbC5qYXZhCkBAIC0wLDAgKzEsMjUzOSBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLmltcGw7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIAorICogQ29weXJpZ2h0IChjKSAyMDExIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiAKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdCAKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sIAorICogCisgKiBDb250cmlidXRvcnM6IAorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiAKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVBdHRyaWJ1dGU7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzczsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRVBhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVjb3JlUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuaW1wbC5FUGFja2FnZUltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmxvZ2dlci5Mb2dnZXJQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZFBhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLkRlbmd1ZU1vZGVsSG9zdExhYmVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLkRlbmd1ZU1vZGVsVmVjdG9yTGFiZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbFZlY3RvckxhYmVsVmFsdWU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5NYWNkb25hbGRSb3NzRGlzZWFzZU1vZGVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuU2ltcGxlRGVuZ3VlTW9kZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5WZWN0b3JEaXNlYXNlTW9kZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5WZWN0b3JGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuVmVjdG9yUGFja2FnZTsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIG1vZGVsIDxiPlBhY2thZ2U8L2I+LgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBWZWN0b3JQYWNrYWdlSW1wbCBleHRlbmRzIEVQYWNrYWdlSW1wbCBpbXBsZW1lbnRzIFZlY3RvclBhY2thZ2UgeworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByaXZhdGUgRUNsYXNzIG1hY2RvbmFsZFJvc3NEaXNlYXNlTW9kZWxFQ2xhc3MgPSBudWxsOworCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJpdmF0ZSBFQ2xhc3MgdmVjdG9yRGlzZWFzZU1vZGVsRUNsYXNzID0gbnVsbDsKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByaXZhdGUgRUNsYXNzIGRlbmd1ZU1vZGVsRUNsYXNzID0gbnVsbDsKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByaXZhdGUgRUNsYXNzIHNpbXBsZURlbmd1ZU1vZGVsRUNsYXNzID0gbnVsbDsKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByaXZhdGUgRUNsYXNzIGRlbmd1ZU1vZGVsSG9zdExhYmVsRUNsYXNzID0gbnVsbDsKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByaXZhdGUgRUNsYXNzIGRlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVFQ2xhc3MgPSBudWxsOworCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJpdmF0ZSBFQ2xhc3MgZGVuZ3VlTW9kZWxWZWN0b3JMYWJlbEVDbGFzcyA9IG51bGw7CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcml2YXRlIEVDbGFzcyBkZW5ndWVNb2RlbFZlY3RvckxhYmVsVmFsdWVFQ2xhc3MgPSBudWxsOworCisJLyoqCisJICogQ3JlYXRlcyBhbiBpbnN0YW5jZSBvZiB0aGUgbW9kZWwgPGI+UGFja2FnZTwvYj4sIHJlZ2lzdGVyZWQgd2l0aAorCSAqIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRVBhY2thZ2UuUmVnaXN0cnkgRVBhY2thZ2UuUmVnaXN0cnl9IGJ5IHRoZSBwYWNrYWdlCisJICogcGFja2FnZSBVUkkgdmFsdWUuCisJICogPHA+Tm90ZTogdGhlIGNvcnJlY3Qgd2F5IHRvIGNyZWF0ZSB0aGUgcGFja2FnZSBpcyB2aWEgdGhlIHN0YXRpYworCSAqIGZhY3RvcnkgbWV0aG9kIHtAbGluayAjaW5pdCBpbml0KCl9LCB3aGljaCBhbHNvIHBlcmZvcm1zCisJICogaW5pdGlhbGl6YXRpb24gb2YgdGhlIHBhY2thZ2UsIG9yIHJldHVybnMgdGhlIHJlZ2lzdGVyZWQgcGFja2FnZSwKKwkgKiBpZiBvbmUgYWxyZWFkeSBleGlzdHMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FUGFja2FnZS5SZWdpc3RyeQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5WZWN0b3JQYWNrYWdlI2VOU19VUkkKKwkgKiBAc2VlICNpbml0KCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJpdmF0ZSBWZWN0b3JQYWNrYWdlSW1wbCgpIHsKKwkJc3VwZXIoZU5TX1VSSSwgVmVjdG9yRmFjdG9yeS5lSU5TVEFOQ0UpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByaXZhdGUgc3RhdGljIGJvb2xlYW4gaXNJbml0ZWQgPSBmYWxzZTsKKworCS8qKgorCSAqIENyZWF0ZXMsIHJlZ2lzdGVycywgYW5kIGluaXRpYWxpemVzIHRoZSA8Yj5QYWNrYWdlPC9iPiBmb3IgdGhpcyBtb2RlbCwgYW5kIGZvciBhbnkgb3RoZXJzIHVwb24gd2hpY2ggaXQgZGVwZW5kcy4KKwkgKiAKKwkgKiA8cD5UaGlzIG1ldGhvZCBpcyB1c2VkIHRvIGluaXRpYWxpemUge0BsaW5rIFZlY3RvclBhY2thZ2UjZUlOU1RBTkNFfSB3aGVuIHRoYXQgZmllbGQgaXMgYWNjZXNzZWQuCisJICogQ2xpZW50cyBzaG91bGQgbm90IGludm9rZSBpdCBkaXJlY3RseS4gSW5zdGVhZCwgdGhleSBzaG91bGQgc2ltcGx5IGFjY2VzcyB0aGF0IGZpZWxkIHRvIG9idGFpbiB0aGUgcGFja2FnZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI2VOU19VUkkKKwkgKiBAc2VlICNjcmVhdGVQYWNrYWdlQ29udGVudHMoKQorCSAqIEBzZWUgI2luaXRpYWxpemVQYWNrYWdlQ29udGVudHMoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgc3RhdGljIFZlY3RvclBhY2thZ2UgaW5pdCgpIHsKKwkJaWYgKGlzSW5pdGVkKSByZXR1cm4gKFZlY3RvclBhY2thZ2UpRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RVBhY2thZ2UoVmVjdG9yUGFja2FnZS5lTlNfVVJJKTsKKworCQkvLyBPYnRhaW4gb3IgY3JlYXRlIGFuZCByZWdpc3RlciBwYWNrYWdlCisJCVZlY3RvclBhY2thZ2VJbXBsIHRoZVZlY3RvclBhY2thZ2UgPSAoVmVjdG9yUGFja2FnZUltcGwpKEVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldChlTlNfVVJJKSBpbnN0YW5jZW9mIFZlY3RvclBhY2thZ2VJbXBsID8gRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0KGVOU19VUkkpIDogbmV3IFZlY3RvclBhY2thZ2VJbXBsKCkpOworCisJCWlzSW5pdGVkID0gdHJ1ZTsKKworCQkvLyBJbml0aWFsaXplIHNpbXBsZSBkZXBlbmRlbmNpZXMKKwkJU3RhbmRhcmRQYWNrYWdlLmVJTlNUQU5DRS5lQ2xhc3MoKTsKKwkJTG9nZ2VyUGFja2FnZS5lSU5TVEFOQ0UuZUNsYXNzKCk7CisKKwkJLy8gQ3JlYXRlIHBhY2thZ2UgbWV0YS1kYXRhIG9iamVjdHMKKwkJdGhlVmVjdG9yUGFja2FnZS5jcmVhdGVQYWNrYWdlQ29udGVudHMoKTsKKworCQkvLyBJbml0aWFsaXplIGNyZWF0ZWQgbWV0YS1kYXRhCisJCXRoZVZlY3RvclBhY2thZ2UuaW5pdGlhbGl6ZVBhY2thZ2VDb250ZW50cygpOworCisJCS8vIE1hcmsgbWV0YS1kYXRhIHRvIGluZGljYXRlIGl0IGNhbid0IGJlIGNoYW5nZWQKKwkJdGhlVmVjdG9yUGFja2FnZS5mcmVlemUoKTsKKworICAKKwkJLy8gVXBkYXRlIHRoZSByZWdpc3RyeSBhbmQgcmV0dXJuIHRoZSBwYWNrYWdlCisJCUVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLnB1dChWZWN0b3JQYWNrYWdlLmVOU19VUkksIHRoZVZlY3RvclBhY2thZ2UpOworCQlyZXR1cm4gdGhlVmVjdG9yUGFja2FnZTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUNsYXNzIGdldE1hY2RvbmFsZFJvc3NEaXNlYXNlTW9kZWwoKSB7CisJCXJldHVybiBtYWNkb25hbGRSb3NzRGlzZWFzZU1vZGVsRUNsYXNzOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQXR0cmlidXRlIGdldE1hY2RvbmFsZFJvc3NEaXNlYXNlTW9kZWxfQml0aW5nUmF0ZSgpIHsKKwkJcmV0dXJuIChFQXR0cmlidXRlKW1hY2RvbmFsZFJvc3NEaXNlYXNlTW9kZWxFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgwKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUF0dHJpYnV0ZSBnZXRNYWNkb25hbGRSb3NzRGlzZWFzZU1vZGVsX0luZmVjdGlvdXNCaXRpbmdQcm9wb3J0aW9uSHVtYW4oKSB7CisJCXJldHVybiAoRUF0dHJpYnV0ZSltYWNkb25hbGRSb3NzRGlzZWFzZU1vZGVsRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVBdHRyaWJ1dGUgZ2V0TWFjZG9uYWxkUm9zc0Rpc2Vhc2VNb2RlbF9JbmZlY3Rpb3VzQml0aW5nUHJvcG9ydGlvblZlY3RvcigpIHsKKwkJcmV0dXJuIChFQXR0cmlidXRlKW1hY2RvbmFsZFJvc3NEaXNlYXNlTW9kZWxFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgyKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUF0dHJpYnV0ZSBnZXRNYWNkb25hbGRSb3NzRGlzZWFzZU1vZGVsX1JlY292ZXJ5UmF0ZSgpIHsKKwkJcmV0dXJuIChFQXR0cmlidXRlKW1hY2RvbmFsZFJvc3NEaXNlYXNlTW9kZWxFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgzKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUF0dHJpYnV0ZSBnZXRNYWNkb25hbGRSb3NzRGlzZWFzZU1vZGVsX0luY3ViYXRpb25SYXRlKCkgeworCQlyZXR1cm4gKEVBdHRyaWJ1dGUpbWFjZG9uYWxkUm9zc0Rpc2Vhc2VNb2RlbEVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDQpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQXR0cmlidXRlIGdldE1hY2RvbmFsZFJvc3NEaXNlYXNlTW9kZWxfVmVjdG9ySW5jdWJhdGlvblJhdGUoKSB7CisJCXJldHVybiAoRUF0dHJpYnV0ZSltYWNkb25hbGRSb3NzRGlzZWFzZU1vZGVsRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoNSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVBdHRyaWJ1dGUgZ2V0TWFjZG9uYWxkUm9zc0Rpc2Vhc2VNb2RlbF9JbW11bml0eUxvc3NSYXRlKCkgeworCQlyZXR1cm4gKEVBdHRyaWJ1dGUpbWFjZG9uYWxkUm9zc0Rpc2Vhc2VNb2RlbEVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDYpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQ2xhc3MgZ2V0VmVjdG9yRGlzZWFzZU1vZGVsKCkgeworCQlyZXR1cm4gdmVjdG9yRGlzZWFzZU1vZGVsRUNsYXNzOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQXR0cmlidXRlIGdldFZlY3RvckRpc2Vhc2VNb2RlbF9WZWN0b3JQb3B1bGF0aW9uSWRlbnRpZmllcigpIHsKKwkJcmV0dXJuIChFQXR0cmlidXRlKXZlY3RvckRpc2Vhc2VNb2RlbEVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDApOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQ2xhc3MgZ2V0RGVuZ3VlTW9kZWwoKSB7CisJCXJldHVybiBkZW5ndWVNb2RlbEVDbGFzczsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUF0dHJpYnV0ZSBnZXREZW5ndWVNb2RlbF9CaXRpbmdSYXRlU1YoKSB7CisJCXJldHVybiAoRUF0dHJpYnV0ZSlkZW5ndWVNb2RlbEVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDApOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQXR0cmlidXRlIGdldERlbmd1ZU1vZGVsX0JpdGluZ1JhdGVJVigpIHsKKwkJcmV0dXJuIChFQXR0cmlidXRlKWRlbmd1ZU1vZGVsRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVBdHRyaWJ1dGUgZ2V0RGVuZ3VlTW9kZWxfSG9zdEluZmVjdGl2aXR5MSgpIHsKKwkJcmV0dXJuIChFQXR0cmlidXRlKWRlbmd1ZU1vZGVsRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMik7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVBdHRyaWJ1dGUgZ2V0RGVuZ3VlTW9kZWxfSG9zdEluZmVjdGl2aXR5MigpIHsKKwkJcmV0dXJuIChFQXR0cmlidXRlKWRlbmd1ZU1vZGVsRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMyk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVBdHRyaWJ1dGUgZ2V0RGVuZ3VlTW9kZWxfSG9zdEluZmVjdGl2aXR5MygpIHsKKwkJcmV0dXJuIChFQXR0cmlidXRlKWRlbmd1ZU1vZGVsRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoNCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVBdHRyaWJ1dGUgZ2V0RGVuZ3VlTW9kZWxfSG9zdEluZmVjdGl2aXR5NCgpIHsKKwkJcmV0dXJuIChFQXR0cmlidXRlKWRlbmd1ZU1vZGVsRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoNSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVBdHRyaWJ1dGUgZ2V0RGVuZ3VlTW9kZWxfSG9zdFByaW1hcnlJbmN1YmF0aW9uUmF0ZTEoKSB7CisJCXJldHVybiAoRUF0dHJpYnV0ZSlkZW5ndWVNb2RlbEVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDYpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQXR0cmlidXRlIGdldERlbmd1ZU1vZGVsX0hvc3RQcmltYXJ5SW5jdWJhdGlvblJhdGUyKCkgeworCQlyZXR1cm4gKEVBdHRyaWJ1dGUpZGVuZ3VlTW9kZWxFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCg3KTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUF0dHJpYnV0ZSBnZXREZW5ndWVNb2RlbF9Ib3N0UHJpbWFyeUluY3ViYXRpb25SYXRlMygpIHsKKwkJcmV0dXJuIChFQXR0cmlidXRlKWRlbmd1ZU1vZGVsRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoOCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVBdHRyaWJ1dGUgZ2V0RGVuZ3VlTW9kZWxfSG9zdFByaW1hcnlJbmN1YmF0aW9uUmF0ZTQoKSB7CisJCXJldHVybiAoRUF0dHJpYnV0ZSlkZW5ndWVNb2RlbEVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDkpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQXR0cmlidXRlIGdldERlbmd1ZU1vZGVsX0hvc3RQcmltYXJ5UmVjb3ZlcnlSYXRlMSgpIHsKKwkJcmV0dXJuIChFQXR0cmlidXRlKWRlbmd1ZU1vZGVsRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMTApOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQXR0cmlidXRlIGdldERlbmd1ZU1vZGVsX0hvc3RQcmltYXJ5UmVjb3ZlcnlSYXRlMigpIHsKKwkJcmV0dXJuIChFQXR0cmlidXRlKWRlbmd1ZU1vZGVsRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMTEpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQXR0cmlidXRlIGdldERlbmd1ZU1vZGVsX0hvc3RQcmltYXJ5UmVjb3ZlcnlSYXRlMygpIHsKKwkJcmV0dXJuIChFQXR0cmlidXRlKWRlbmd1ZU1vZGVsRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMTIpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQXR0cmlidXRlIGdldERlbmd1ZU1vZGVsX0hvc3RQcmltYXJ5UmVjb3ZlcnlSYXRlNCgpIHsKKwkJcmV0dXJuIChFQXR0cmlidXRlKWRlbmd1ZU1vZGVsRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMTMpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQXR0cmlidXRlIGdldERlbmd1ZU1vZGVsX0hvc3RQcmltYXJ5SW1tdW5pdHlMb3NzUmF0ZTEoKSB7CisJCXJldHVybiAoRUF0dHJpYnV0ZSlkZW5ndWVNb2RlbEVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDE0KTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUF0dHJpYnV0ZSBnZXREZW5ndWVNb2RlbF9Ib3N0UHJpbWFyeUltbXVuaXR5TG9zc1JhdGUyKCkgeworCQlyZXR1cm4gKEVBdHRyaWJ1dGUpZGVuZ3VlTW9kZWxFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgxNSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVBdHRyaWJ1dGUgZ2V0RGVuZ3VlTW9kZWxfSG9zdFByaW1hcnlJbW11bml0eUxvc3NSYXRlMygpIHsKKwkJcmV0dXJuIChFQXR0cmlidXRlKWRlbmd1ZU1vZGVsRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMTYpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQXR0cmlidXRlIGdldERlbmd1ZU1vZGVsX0hvc3RQcmltYXJ5SW1tdW5pdHlMb3NzUmF0ZTQoKSB7CisJCXJldHVybiAoRUF0dHJpYnV0ZSlkZW5ndWVNb2RlbEVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDE3KTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUF0dHJpYnV0ZSBnZXREZW5ndWVNb2RlbF9Ib3N0UHJpbWFyeURpc2Vhc2VEZWF0aFJhdGUxKCkgeworCQlyZXR1cm4gKEVBdHRyaWJ1dGUpZGVuZ3VlTW9kZWxFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgxOCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVBdHRyaWJ1dGUgZ2V0RGVuZ3VlTW9kZWxfSG9zdFByaW1hcnlEaXNlYXNlRGVhdGhSYXRlMigpIHsKKwkJcmV0dXJuIChFQXR0cmlidXRlKWRlbmd1ZU1vZGVsRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMTkpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQXR0cmlidXRlIGdldERlbmd1ZU1vZGVsX0hvc3RQcmltYXJ5RGlzZWFzZURlYXRoUmF0ZTMoKSB7CisJCXJldHVybiAoRUF0dHJpYnV0ZSlkZW5ndWVNb2RlbEVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDIwKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUF0dHJpYnV0ZSBnZXREZW5ndWVNb2RlbF9Ib3N0UHJpbWFyeURpc2Vhc2VEZWF0aFJhdGU0KCkgeworCQlyZXR1cm4gKEVBdHRyaWJ1dGUpZGVuZ3VlTW9kZWxFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgyMSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVBdHRyaWJ1dGUgZ2V0RGVuZ3VlTW9kZWxfSG9zdEFERTEyKCkgeworCQlyZXR1cm4gKEVBdHRyaWJ1dGUpZGVuZ3VlTW9kZWxFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgyMik7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVBdHRyaWJ1dGUgZ2V0RGVuZ3VlTW9kZWxfSG9zdEFERTEzKCkgeworCQlyZXR1cm4gKEVBdHRyaWJ1dGUpZGVuZ3VlTW9kZWxFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgyMyk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVBdHRyaWJ1dGUgZ2V0RGVuZ3VlTW9kZWxfSG9zdEFERTE0KCkgeworCQlyZXR1cm4gKEVBdHRyaWJ1dGUpZGVuZ3VlTW9kZWxFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgyNCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVBdHRyaWJ1dGUgZ2V0RGVuZ3VlTW9kZWxfSG9zdEFERTIxKCkgeworCQlyZXR1cm4gKEVBdHRyaWJ1dGUpZGVuZ3VlTW9kZWxFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgyNSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVBdHRyaWJ1dGUgZ2V0RGVuZ3VlTW9kZWxfSG9zdEFERTIzKCkgeworCQlyZXR1cm4gKEVBdHRyaWJ1dGUpZGVuZ3VlTW9kZWxFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgyNik7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVBdHRyaWJ1dGUgZ2V0RGVuZ3VlTW9kZWxfSG9zdEFERTI0KCkgeworCQlyZXR1cm4gKEVBdHRyaWJ1dGUpZGVuZ3VlTW9kZWxFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgyNyk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVBdHRyaWJ1dGUgZ2V0RGVuZ3VlTW9kZWxfSG9zdEFERTMxKCkgeworCQlyZXR1cm4gKEVBdHRyaWJ1dGUpZGVuZ3VlTW9kZWxFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgyOCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVBdHRyaWJ1dGUgZ2V0RGVuZ3VlTW9kZWxfSG9zdEFERTMyKCkgeworCQlyZXR1cm4gKEVBdHRyaWJ1dGUpZGVuZ3VlTW9kZWxFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgyOSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVBdHRyaWJ1dGUgZ2V0RGVuZ3VlTW9kZWxfSG9zdEFERTM0KCkgeworCQlyZXR1cm4gKEVBdHRyaWJ1dGUpZGVuZ3VlTW9kZWxFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgzMCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVBdHRyaWJ1dGUgZ2V0RGVuZ3VlTW9kZWxfSG9zdEFERTQxKCkgeworCQlyZXR1cm4gKEVBdHRyaWJ1dGUpZGVuZ3VlTW9kZWxFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgzMSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVBdHRyaWJ1dGUgZ2V0RGVuZ3VlTW9kZWxfSG9zdEFERTQyKCkgeworCQlyZXR1cm4gKEVBdHRyaWJ1dGUpZGVuZ3VlTW9kZWxFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgzMik7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVBdHRyaWJ1dGUgZ2V0RGVuZ3VlTW9kZWxfSG9zdEFERTQzKCkgeworCQlyZXR1cm4gKEVBdHRyaWJ1dGUpZGVuZ3VlTW9kZWxFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgzMyk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVBdHRyaWJ1dGUgZ2V0RGVuZ3VlTW9kZWxfSG9zdFNlY29uZGFyeURpc2Vhc2VEZWF0aFJhdGUxMigpIHsKKwkJcmV0dXJuIChFQXR0cmlidXRlKWRlbmd1ZU1vZGVsRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMzQpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQXR0cmlidXRlIGdldERlbmd1ZU1vZGVsX0hvc3RTZWNvbmRhcnlEaXNlYXNlRGVhdGhSYXRlMTMoKSB7CisJCXJldHVybiAoRUF0dHJpYnV0ZSlkZW5ndWVNb2RlbEVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDM1KTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUF0dHJpYnV0ZSBnZXREZW5ndWVNb2RlbF9Ib3N0U2Vjb25kYXJ5RGlzZWFzZURlYXRoUmF0ZTE0KCkgeworCQlyZXR1cm4gKEVBdHRyaWJ1dGUpZGVuZ3VlTW9kZWxFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgzNik7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVBdHRyaWJ1dGUgZ2V0RGVuZ3VlTW9kZWxfSG9zdFNlY29uZGFyeURpc2Vhc2VEZWF0aFJhdGUyMSgpIHsKKwkJcmV0dXJuIChFQXR0cmlidXRlKWRlbmd1ZU1vZGVsRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMzcpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQXR0cmlidXRlIGdldERlbmd1ZU1vZGVsX0hvc3RTZWNvbmRhcnlEaXNlYXNlRGVhdGhSYXRlMjMoKSB7CisJCXJldHVybiAoRUF0dHJpYnV0ZSlkZW5ndWVNb2RlbEVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDM4KTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUF0dHJpYnV0ZSBnZXREZW5ndWVNb2RlbF9Ib3N0U2Vjb25kYXJ5RGlzZWFzZURlYXRoUmF0ZTI0KCkgeworCQlyZXR1cm4gKEVBdHRyaWJ1dGUpZGVuZ3VlTW9kZWxFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgzOSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVBdHRyaWJ1dGUgZ2V0RGVuZ3VlTW9kZWxfSG9zdFNlY29uZGFyeURpc2Vhc2VEZWF0aFJhdGUzMSgpIHsKKwkJcmV0dXJuIChFQXR0cmlidXRlKWRlbmd1ZU1vZGVsRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoNDApOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQXR0cmlidXRlIGdldERlbmd1ZU1vZGVsX0hvc3RTZWNvbmRhcnlEaXNlYXNlRGVhdGhSYXRlMzIoKSB7CisJCXJldHVybiAoRUF0dHJpYnV0ZSlkZW5ndWVNb2RlbEVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDQxKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUF0dHJpYnV0ZSBnZXREZW5ndWVNb2RlbF9Ib3N0U2Vjb25kYXJ5RGlzZWFzZURlYXRoUmF0ZTM0KCkgeworCQlyZXR1cm4gKEVBdHRyaWJ1dGUpZGVuZ3VlTW9kZWxFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCg0Mik7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVBdHRyaWJ1dGUgZ2V0RGVuZ3VlTW9kZWxfSG9zdFNlY29uZGFyeURpc2Vhc2VEZWF0aFJhdGU0MSgpIHsKKwkJcmV0dXJuIChFQXR0cmlidXRlKWRlbmd1ZU1vZGVsRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoNDMpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQXR0cmlidXRlIGdldERlbmd1ZU1vZGVsX0hvc3RTZWNvbmRhcnlEaXNlYXNlRGVhdGhSYXRlNDIoKSB7CisJCXJldHVybiAoRUF0dHJpYnV0ZSlkZW5ndWVNb2RlbEVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDQ0KTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUF0dHJpYnV0ZSBnZXREZW5ndWVNb2RlbF9Ib3N0U2Vjb25kYXJ5RGlzZWFzZURlYXRoUmF0ZTQzKCkgeworCQlyZXR1cm4gKEVBdHRyaWJ1dGUpZGVuZ3VlTW9kZWxFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCg0NSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVBdHRyaWJ1dGUgZ2V0RGVuZ3VlTW9kZWxfSG9zdFNlY29uZGFyeVJlY292ZXJ5UmF0ZTEyKCkgeworCQlyZXR1cm4gKEVBdHRyaWJ1dGUpZGVuZ3VlTW9kZWxFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCg0Nik7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVBdHRyaWJ1dGUgZ2V0RGVuZ3VlTW9kZWxfSG9zdFNlY29uZGFyeVJlY292ZXJ5UmF0ZTEzKCkgeworCQlyZXR1cm4gKEVBdHRyaWJ1dGUpZGVuZ3VlTW9kZWxFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCg0Nyk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVBdHRyaWJ1dGUgZ2V0RGVuZ3VlTW9kZWxfSG9zdFNlY29uZGFyeVJlY292ZXJ5UmF0ZTE0KCkgeworCQlyZXR1cm4gKEVBdHRyaWJ1dGUpZGVuZ3VlTW9kZWxFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCg0OCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVBdHRyaWJ1dGUgZ2V0RGVuZ3VlTW9kZWxfSG9zdFNlY29uZGFyeVJlY292ZXJ5UmF0ZTIxKCkgeworCQlyZXR1cm4gKEVBdHRyaWJ1dGUpZGVuZ3VlTW9kZWxFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCg0OSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVBdHRyaWJ1dGUgZ2V0RGVuZ3VlTW9kZWxfSG9zdFNlY29uZGFyeVJlY292ZXJ5UmF0ZTIzKCkgeworCQlyZXR1cm4gKEVBdHRyaWJ1dGUpZGVuZ3VlTW9kZWxFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCg1MCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVBdHRyaWJ1dGUgZ2V0RGVuZ3VlTW9kZWxfSG9zdFNlY29uZGFyeVJlY292ZXJ5UmF0ZTI0KCkgeworCQlyZXR1cm4gKEVBdHRyaWJ1dGUpZGVuZ3VlTW9kZWxFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCg1MSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVBdHRyaWJ1dGUgZ2V0RGVuZ3VlTW9kZWxfSG9zdFNlY29uZGFyeVJlY292ZXJ5UmF0ZTMxKCkgeworCQlyZXR1cm4gKEVBdHRyaWJ1dGUpZGVuZ3VlTW9kZWxFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCg1Mik7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVBdHRyaWJ1dGUgZ2V0RGVuZ3VlTW9kZWxfSG9zdFNlY29uZGFyeVJlY292ZXJ5UmF0ZTMyKCkgeworCQlyZXR1cm4gKEVBdHRyaWJ1dGUpZGVuZ3VlTW9kZWxFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCg1Myk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVBdHRyaWJ1dGUgZ2V0RGVuZ3VlTW9kZWxfSG9zdFNlY29uZGFyeVJlY292ZXJ5UmF0ZTM0KCkgeworCQlyZXR1cm4gKEVBdHRyaWJ1dGUpZGVuZ3VlTW9kZWxFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCg1NCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVBdHRyaWJ1dGUgZ2V0RGVuZ3VlTW9kZWxfSG9zdFNlY29uZGFyeVJlY292ZXJ5UmF0ZTQxKCkgeworCQlyZXR1cm4gKEVBdHRyaWJ1dGUpZGVuZ3VlTW9kZWxFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCg1NSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVBdHRyaWJ1dGUgZ2V0RGVuZ3VlTW9kZWxfSG9zdFNlY29uZGFyeVJlY292ZXJ5UmF0ZTQyKCkgeworCQlyZXR1cm4gKEVBdHRyaWJ1dGUpZGVuZ3VlTW9kZWxFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCg1Nik7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVBdHRyaWJ1dGUgZ2V0RGVuZ3VlTW9kZWxfSG9zdFNlY29uZGFyeVJlY292ZXJ5UmF0ZTQzKCkgeworCQlyZXR1cm4gKEVBdHRyaWJ1dGUpZGVuZ3VlTW9kZWxFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCg1Nyk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVBdHRyaWJ1dGUgZ2V0RGVuZ3VlTW9kZWxfSG9zdFNlY29uZGFyeUluY3ViYXRpb25SYXRlMTIoKSB7CisJCXJldHVybiAoRUF0dHJpYnV0ZSlkZW5ndWVNb2RlbEVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDU4KTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUF0dHJpYnV0ZSBnZXREZW5ndWVNb2RlbF9Ib3N0U2Vjb25kYXJ5SW5jdWJhdGlvblJhdGUxMygpIHsKKwkJcmV0dXJuIChFQXR0cmlidXRlKWRlbmd1ZU1vZGVsRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoNTkpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQXR0cmlidXRlIGdldERlbmd1ZU1vZGVsX0hvc3RTZWNvbmRhcnlJbmN1YmF0aW9uUmF0ZTE0KCkgeworCQlyZXR1cm4gKEVBdHRyaWJ1dGUpZGVuZ3VlTW9kZWxFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCg2MCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVBdHRyaWJ1dGUgZ2V0RGVuZ3VlTW9kZWxfSG9zdFNlY29uZGFyeUluY3ViYXRpb25SYXRlMjEoKSB7CisJCXJldHVybiAoRUF0dHJpYnV0ZSlkZW5ndWVNb2RlbEVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDYxKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUF0dHJpYnV0ZSBnZXREZW5ndWVNb2RlbF9Ib3N0U2Vjb25kYXJ5SW5jdWJhdGlvblJhdGUyMygpIHsKKwkJcmV0dXJuIChFQXR0cmlidXRlKWRlbmd1ZU1vZGVsRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoNjIpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQXR0cmlidXRlIGdldERlbmd1ZU1vZGVsX0hvc3RTZWNvbmRhcnlJbmN1YmF0aW9uUmF0ZTI0KCkgeworCQlyZXR1cm4gKEVBdHRyaWJ1dGUpZGVuZ3VlTW9kZWxFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCg2Myk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVBdHRyaWJ1dGUgZ2V0RGVuZ3VlTW9kZWxfSG9zdFNlY29uZGFyeUluY3ViYXRpb25SYXRlMzEoKSB7CisJCXJldHVybiAoRUF0dHJpYnV0ZSlkZW5ndWVNb2RlbEVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDY0KTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUF0dHJpYnV0ZSBnZXREZW5ndWVNb2RlbF9Ib3N0U2Vjb25kYXJ5SW5jdWJhdGlvblJhdGUzMigpIHsKKwkJcmV0dXJuIChFQXR0cmlidXRlKWRlbmd1ZU1vZGVsRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoNjUpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQXR0cmlidXRlIGdldERlbmd1ZU1vZGVsX0hvc3RTZWNvbmRhcnlJbmN1YmF0aW9uUmF0ZTM0KCkgeworCQlyZXR1cm4gKEVBdHRyaWJ1dGUpZGVuZ3VlTW9kZWxFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCg2Nik7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVBdHRyaWJ1dGUgZ2V0RGVuZ3VlTW9kZWxfSG9zdFNlY29uZGFyeUluY3ViYXRpb25SYXRlNDEoKSB7CisJCXJldHVybiAoRUF0dHJpYnV0ZSlkZW5ndWVNb2RlbEVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDY3KTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUF0dHJpYnV0ZSBnZXREZW5ndWVNb2RlbF9Ib3N0U2Vjb25kYXJ5SW5jdWJhdGlvblJhdGU0MigpIHsKKwkJcmV0dXJuIChFQXR0cmlidXRlKWRlbmd1ZU1vZGVsRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoNjgpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQXR0cmlidXRlIGdldERlbmd1ZU1vZGVsX0hvc3RTZWNvbmRhcnlJbmN1YmF0aW9uUmF0ZTQzKCkgeworCQlyZXR1cm4gKEVBdHRyaWJ1dGUpZGVuZ3VlTW9kZWxFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCg2OSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVBdHRyaWJ1dGUgZ2V0RGVuZ3VlTW9kZWxfVmVjdG9ySW5mZWN0aXZpdHkxKCkgeworCQlyZXR1cm4gKEVBdHRyaWJ1dGUpZGVuZ3VlTW9kZWxFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCg3MCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVBdHRyaWJ1dGUgZ2V0RGVuZ3VlTW9kZWxfVmVjdG9ySW5mZWN0aXZpdHkyKCkgeworCQlyZXR1cm4gKEVBdHRyaWJ1dGUpZGVuZ3VlTW9kZWxFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCg3MSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVBdHRyaWJ1dGUgZ2V0RGVuZ3VlTW9kZWxfVmVjdG9ySW5mZWN0aXZpdHkzKCkgeworCQlyZXR1cm4gKEVBdHRyaWJ1dGUpZGVuZ3VlTW9kZWxFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCg3Mik7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVBdHRyaWJ1dGUgZ2V0RGVuZ3VlTW9kZWxfVmVjdG9ySW5mZWN0aXZpdHk0KCkgeworCQlyZXR1cm4gKEVBdHRyaWJ1dGUpZGVuZ3VlTW9kZWxFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCg3Myk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVBdHRyaWJ1dGUgZ2V0RGVuZ3VlTW9kZWxfVmVjdG9yQURFMSgpIHsKKwkJcmV0dXJuIChFQXR0cmlidXRlKWRlbmd1ZU1vZGVsRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoNzQpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQXR0cmlidXRlIGdldERlbmd1ZU1vZGVsX1ZlY3RvckFERTIoKSB7CisJCXJldHVybiAoRUF0dHJpYnV0ZSlkZW5ndWVNb2RlbEVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDc1KTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUF0dHJpYnV0ZSBnZXREZW5ndWVNb2RlbF9WZWN0b3JBREUzKCkgeworCQlyZXR1cm4gKEVBdHRyaWJ1dGUpZGVuZ3VlTW9kZWxFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCg3Nik7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVBdHRyaWJ1dGUgZ2V0RGVuZ3VlTW9kZWxfVmVjdG9yQURFNCgpIHsKKwkJcmV0dXJuIChFQXR0cmlidXRlKWRlbmd1ZU1vZGVsRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoNzcpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQXR0cmlidXRlIGdldERlbmd1ZU1vZGVsX1ZlY3RvckluY3ViYXRpb25SYXRlMSgpIHsKKwkJcmV0dXJuIChFQXR0cmlidXRlKWRlbmd1ZU1vZGVsRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoNzgpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQXR0cmlidXRlIGdldERlbmd1ZU1vZGVsX1ZlY3RvckluY3ViYXRpb25SYXRlMigpIHsKKwkJcmV0dXJuIChFQXR0cmlidXRlKWRlbmd1ZU1vZGVsRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoNzkpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQXR0cmlidXRlIGdldERlbmd1ZU1vZGVsX1ZlY3RvckluY3ViYXRpb25SYXRlMygpIHsKKwkJcmV0dXJuIChFQXR0cmlidXRlKWRlbmd1ZU1vZGVsRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoODApOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQXR0cmlidXRlIGdldERlbmd1ZU1vZGVsX1ZlY3RvckluY3ViYXRpb25SYXRlNCgpIHsKKwkJcmV0dXJuIChFQXR0cmlidXRlKWRlbmd1ZU1vZGVsRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoODEpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQ2xhc3MgZ2V0U2ltcGxlRGVuZ3VlTW9kZWwoKSB7CisJCXJldHVybiBzaW1wbGVEZW5ndWVNb2RlbEVDbGFzczsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUF0dHJpYnV0ZSBnZXRTaW1wbGVEZW5ndWVNb2RlbF9CaXRpbmdSYXRlKCkgeworCQlyZXR1cm4gKEVBdHRyaWJ1dGUpc2ltcGxlRGVuZ3VlTW9kZWxFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgwKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUF0dHJpYnV0ZSBnZXRTaW1wbGVEZW5ndWVNb2RlbF9Ib3N0SW5mZWN0aXZpdHkxKCkgeworCQlyZXR1cm4gKEVBdHRyaWJ1dGUpc2ltcGxlRGVuZ3VlTW9kZWxFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgxKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUF0dHJpYnV0ZSBnZXRTaW1wbGVEZW5ndWVNb2RlbF9Ib3N0SW5mZWN0aXZpdHkyKCkgeworCQlyZXR1cm4gKEVBdHRyaWJ1dGUpc2ltcGxlRGVuZ3VlTW9kZWxFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgyKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUF0dHJpYnV0ZSBnZXRTaW1wbGVEZW5ndWVNb2RlbF9Ib3N0SW5mZWN0aXZpdHkzKCkgeworCQlyZXR1cm4gKEVBdHRyaWJ1dGUpc2ltcGxlRGVuZ3VlTW9kZWxFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgzKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUF0dHJpYnV0ZSBnZXRTaW1wbGVEZW5ndWVNb2RlbF9Ib3N0SW5mZWN0aXZpdHk0KCkgeworCQlyZXR1cm4gKEVBdHRyaWJ1dGUpc2ltcGxlRGVuZ3VlTW9kZWxFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCg0KTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUF0dHJpYnV0ZSBnZXRTaW1wbGVEZW5ndWVNb2RlbF9Ib3N0UHJpbWFyeUluY3ViYXRpb25SYXRlKCkgeworCQlyZXR1cm4gKEVBdHRyaWJ1dGUpc2ltcGxlRGVuZ3VlTW9kZWxFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCg1KTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUF0dHJpYnV0ZSBnZXRTaW1wbGVEZW5ndWVNb2RlbF9Ib3N0UHJpbWFyeVJlY292ZXJ5UmF0ZSgpIHsKKwkJcmV0dXJuIChFQXR0cmlidXRlKXNpbXBsZURlbmd1ZU1vZGVsRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoNik7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVBdHRyaWJ1dGUgZ2V0U2ltcGxlRGVuZ3VlTW9kZWxfSG9zdFByaW1hcnlJbW11bml0eUxvc3NSYXRlKCkgeworCQlyZXR1cm4gKEVBdHRyaWJ1dGUpc2ltcGxlRGVuZ3VlTW9kZWxFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCg3KTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUF0dHJpYnV0ZSBnZXRTaW1wbGVEZW5ndWVNb2RlbF9Ib3N0UHJpbWFyeURlYXRoUmF0ZSgpIHsKKwkJcmV0dXJuIChFQXR0cmlidXRlKXNpbXBsZURlbmd1ZU1vZGVsRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoOCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVBdHRyaWJ1dGUgZ2V0U2ltcGxlRGVuZ3VlTW9kZWxfSG9zdEFERTEoKSB7CisJCXJldHVybiAoRUF0dHJpYnV0ZSlzaW1wbGVEZW5ndWVNb2RlbEVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDkpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQXR0cmlidXRlIGdldFNpbXBsZURlbmd1ZU1vZGVsX0hvc3RBREUyKCkgeworCQlyZXR1cm4gKEVBdHRyaWJ1dGUpc2ltcGxlRGVuZ3VlTW9kZWxFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgxMCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVBdHRyaWJ1dGUgZ2V0U2ltcGxlRGVuZ3VlTW9kZWxfSG9zdEFERTMoKSB7CisJCXJldHVybiAoRUF0dHJpYnV0ZSlzaW1wbGVEZW5ndWVNb2RlbEVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDExKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUF0dHJpYnV0ZSBnZXRTaW1wbGVEZW5ndWVNb2RlbF9Ib3N0QURFNCgpIHsKKwkJcmV0dXJuIChFQXR0cmlidXRlKXNpbXBsZURlbmd1ZU1vZGVsRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMTIpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQXR0cmlidXRlIGdldFNpbXBsZURlbmd1ZU1vZGVsX0hvc3RTZWNvbmRhcnlJbmN1YmF0aW9uUmF0ZSgpIHsKKwkJcmV0dXJuIChFQXR0cmlidXRlKXNpbXBsZURlbmd1ZU1vZGVsRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMTMpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQXR0cmlidXRlIGdldFNpbXBsZURlbmd1ZU1vZGVsX0hvc3RTZWNvbmRhcnlSZWNvdmVyeVJhdGUoKSB7CisJCXJldHVybiAoRUF0dHJpYnV0ZSlzaW1wbGVEZW5ndWVNb2RlbEVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDE0KTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUF0dHJpYnV0ZSBnZXRTaW1wbGVEZW5ndWVNb2RlbF9Ib3N0U2Vjb25kYXJ5RGVhdGhSYXRlKCkgeworCQlyZXR1cm4gKEVBdHRyaWJ1dGUpc2ltcGxlRGVuZ3VlTW9kZWxFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgxNSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVBdHRyaWJ1dGUgZ2V0U2ltcGxlRGVuZ3VlTW9kZWxfVmVjdG9ySW5mZWN0aXZpdHkxKCkgeworCQlyZXR1cm4gKEVBdHRyaWJ1dGUpc2ltcGxlRGVuZ3VlTW9kZWxFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgxNik7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVBdHRyaWJ1dGUgZ2V0U2ltcGxlRGVuZ3VlTW9kZWxfVmVjdG9ySW5mZWN0aXZpdHkyKCkgeworCQlyZXR1cm4gKEVBdHRyaWJ1dGUpc2ltcGxlRGVuZ3VlTW9kZWxFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgxNyk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVBdHRyaWJ1dGUgZ2V0U2ltcGxlRGVuZ3VlTW9kZWxfVmVjdG9ySW5mZWN0aXZpdHkzKCkgeworCQlyZXR1cm4gKEVBdHRyaWJ1dGUpc2ltcGxlRGVuZ3VlTW9kZWxFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgxOCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVBdHRyaWJ1dGUgZ2V0U2ltcGxlRGVuZ3VlTW9kZWxfVmVjdG9ySW5mZWN0aXZpdHk0KCkgeworCQlyZXR1cm4gKEVBdHRyaWJ1dGUpc2ltcGxlRGVuZ3VlTW9kZWxFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgxOSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVBdHRyaWJ1dGUgZ2V0U2ltcGxlRGVuZ3VlTW9kZWxfVmVjdG9yQURFMSgpIHsKKwkJcmV0dXJuIChFQXR0cmlidXRlKXNpbXBsZURlbmd1ZU1vZGVsRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMjApOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQXR0cmlidXRlIGdldFNpbXBsZURlbmd1ZU1vZGVsX1ZlY3RvckFERTIoKSB7CisJCXJldHVybiAoRUF0dHJpYnV0ZSlzaW1wbGVEZW5ndWVNb2RlbEVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDIxKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUF0dHJpYnV0ZSBnZXRTaW1wbGVEZW5ndWVNb2RlbF9WZWN0b3JBREUzKCkgeworCQlyZXR1cm4gKEVBdHRyaWJ1dGUpc2ltcGxlRGVuZ3VlTW9kZWxFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgyMik7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVBdHRyaWJ1dGUgZ2V0U2ltcGxlRGVuZ3VlTW9kZWxfVmVjdG9yQURFNCgpIHsKKwkJcmV0dXJuIChFQXR0cmlidXRlKXNpbXBsZURlbmd1ZU1vZGVsRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMjMpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQXR0cmlidXRlIGdldFNpbXBsZURlbmd1ZU1vZGVsX1ZlY3RvckluY3ViYXRpb25SYXRlKCkgeworCQlyZXR1cm4gKEVBdHRyaWJ1dGUpc2ltcGxlRGVuZ3VlTW9kZWxFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgyNCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVDbGFzcyBnZXREZW5ndWVNb2RlbEhvc3RMYWJlbCgpIHsKKwkJcmV0dXJuIGRlbmd1ZU1vZGVsSG9zdExhYmVsRUNsYXNzOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQ2xhc3MgZ2V0RGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZSgpIHsKKwkJcmV0dXJuIGRlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVFQ2xhc3M7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVBdHRyaWJ1dGUgZ2V0RGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9FMSgpIHsKKwkJcmV0dXJuIChFQXR0cmlidXRlKWRlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgwKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUF0dHJpYnV0ZSBnZXREZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX0UyKCkgeworCQlyZXR1cm4gKEVBdHRyaWJ1dGUpZGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZUVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDEpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQXR0cmlidXRlIGdldERlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfRTMoKSB7CisJCXJldHVybiAoRUF0dHJpYnV0ZSlkZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMik7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVBdHRyaWJ1dGUgZ2V0RGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9FNCgpIHsKKwkJcmV0dXJuIChFQXR0cmlidXRlKWRlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgzKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUF0dHJpYnV0ZSBnZXREZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX0kxKCkgeworCQlyZXR1cm4gKEVBdHRyaWJ1dGUpZGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZUVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDQpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQXR0cmlidXRlIGdldERlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfSTIoKSB7CisJCXJldHVybiAoRUF0dHJpYnV0ZSlkZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoNSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVBdHRyaWJ1dGUgZ2V0RGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9JMygpIHsKKwkJcmV0dXJuIChFQXR0cmlidXRlKWRlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCg2KTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUF0dHJpYnV0ZSBnZXREZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX0k0KCkgeworCQlyZXR1cm4gKEVBdHRyaWJ1dGUpZGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZUVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDcpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQXR0cmlidXRlIGdldERlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfVDEoKSB7CisJCXJldHVybiAoRUF0dHJpYnV0ZSlkZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoOCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVBdHRyaWJ1dGUgZ2V0RGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9UMigpIHsKKwkJcmV0dXJuIChFQXR0cmlidXRlKWRlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCg5KTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUF0dHJpYnV0ZSBnZXREZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX1QzKCkgeworCQlyZXR1cm4gKEVBdHRyaWJ1dGUpZGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZUVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDEwKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUF0dHJpYnV0ZSBnZXREZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX1Q0KCkgeworCQlyZXR1cm4gKEVBdHRyaWJ1dGUpZGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZUVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDExKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUF0dHJpYnV0ZSBnZXREZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX1IxKCkgeworCQlyZXR1cm4gKEVBdHRyaWJ1dGUpZGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZUVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDEyKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUF0dHJpYnV0ZSBnZXREZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX1IyKCkgeworCQlyZXR1cm4gKEVBdHRyaWJ1dGUpZGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZUVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDEzKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUF0dHJpYnV0ZSBnZXREZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX1IzKCkgeworCQlyZXR1cm4gKEVBdHRyaWJ1dGUpZGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZUVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDE0KTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUF0dHJpYnV0ZSBnZXREZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX1I0KCkgeworCQlyZXR1cm4gKEVBdHRyaWJ1dGUpZGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZUVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDE1KTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUF0dHJpYnV0ZSBnZXREZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX0UxMigpIHsKKwkJcmV0dXJuIChFQXR0cmlidXRlKWRlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgxNik7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVBdHRyaWJ1dGUgZ2V0RGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9FMTMoKSB7CisJCXJldHVybiAoRUF0dHJpYnV0ZSlkZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMTcpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQXR0cmlidXRlIGdldERlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfRTE0KCkgeworCQlyZXR1cm4gKEVBdHRyaWJ1dGUpZGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZUVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDE4KTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUF0dHJpYnV0ZSBnZXREZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX0UyMSgpIHsKKwkJcmV0dXJuIChFQXR0cmlidXRlKWRlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgxOSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVBdHRyaWJ1dGUgZ2V0RGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9FMjMoKSB7CisJCXJldHVybiAoRUF0dHJpYnV0ZSlkZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMjApOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQXR0cmlidXRlIGdldERlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfRTI0KCkgeworCQlyZXR1cm4gKEVBdHRyaWJ1dGUpZGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZUVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDIxKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUF0dHJpYnV0ZSBnZXREZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX0UzMSgpIHsKKwkJcmV0dXJuIChFQXR0cmlidXRlKWRlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgyMik7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVBdHRyaWJ1dGUgZ2V0RGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9FMzIoKSB7CisJCXJldHVybiAoRUF0dHJpYnV0ZSlkZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMjMpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQXR0cmlidXRlIGdldERlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfRTM0KCkgeworCQlyZXR1cm4gKEVBdHRyaWJ1dGUpZGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZUVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDI0KTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUF0dHJpYnV0ZSBnZXREZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX0U0MSgpIHsKKwkJcmV0dXJuIChFQXR0cmlidXRlKWRlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgyNSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVBdHRyaWJ1dGUgZ2V0RGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9FNDIoKSB7CisJCXJldHVybiAoRUF0dHJpYnV0ZSlkZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMjYpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQXR0cmlidXRlIGdldERlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfRTQzKCkgeworCQlyZXR1cm4gKEVBdHRyaWJ1dGUpZGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZUVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDI3KTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUF0dHJpYnV0ZSBnZXREZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX0kxMigpIHsKKwkJcmV0dXJuIChFQXR0cmlidXRlKWRlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgyOCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVBdHRyaWJ1dGUgZ2V0RGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9JMTMoKSB7CisJCXJldHVybiAoRUF0dHJpYnV0ZSlkZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMjkpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQXR0cmlidXRlIGdldERlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfSTE0KCkgeworCQlyZXR1cm4gKEVBdHRyaWJ1dGUpZGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZUVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDMwKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUF0dHJpYnV0ZSBnZXREZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX0kyMSgpIHsKKwkJcmV0dXJuIChFQXR0cmlidXRlKWRlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgzMSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVBdHRyaWJ1dGUgZ2V0RGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9JMjMoKSB7CisJCXJldHVybiAoRUF0dHJpYnV0ZSlkZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMzIpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQXR0cmlidXRlIGdldERlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfSTI0KCkgeworCQlyZXR1cm4gKEVBdHRyaWJ1dGUpZGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZUVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDMzKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUF0dHJpYnV0ZSBnZXREZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX0kzMSgpIHsKKwkJcmV0dXJuIChFQXR0cmlidXRlKWRlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgzNCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVBdHRyaWJ1dGUgZ2V0RGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9JMzIoKSB7CisJCXJldHVybiAoRUF0dHJpYnV0ZSlkZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMzUpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQXR0cmlidXRlIGdldERlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfSTM0KCkgeworCQlyZXR1cm4gKEVBdHRyaWJ1dGUpZGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZUVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDM2KTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUF0dHJpYnV0ZSBnZXREZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX0k0MSgpIHsKKwkJcmV0dXJuIChFQXR0cmlidXRlKWRlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgzNyk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVBdHRyaWJ1dGUgZ2V0RGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9JNDIoKSB7CisJCXJldHVybiAoRUF0dHJpYnV0ZSlkZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMzgpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQXR0cmlidXRlIGdldERlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfSTQzKCkgeworCQlyZXR1cm4gKEVBdHRyaWJ1dGUpZGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZUVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDM5KTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUF0dHJpYnV0ZSBnZXREZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX1IoKSB7CisJCXJldHVybiAoRUF0dHJpYnV0ZSlkZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoNDApOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQXR0cmlidXRlIGdldERlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfSW5jaWRlbmNlMSgpIHsKKwkJcmV0dXJuIChFQXR0cmlidXRlKWRlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCg0MSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVBdHRyaWJ1dGUgZ2V0RGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9JbmNpZGVuY2UyKCkgeworCQlyZXR1cm4gKEVBdHRyaWJ1dGUpZGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZUVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDQyKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUF0dHJpYnV0ZSBnZXREZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX0luY2lkZW5jZTMoKSB7CisJCXJldHVybiAoRUF0dHJpYnV0ZSlkZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoNDMpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQXR0cmlidXRlIGdldERlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfSW5jaWRlbmNlNCgpIHsKKwkJcmV0dXJuIChFQXR0cmlidXRlKWRlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCg0NCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVBdHRyaWJ1dGUgZ2V0RGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9JbmNpZGVuY2UxMigpIHsKKwkJcmV0dXJuIChFQXR0cmlidXRlKWRlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCg0NSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVBdHRyaWJ1dGUgZ2V0RGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9JbmNpZGVuY2UyMSgpIHsKKwkJcmV0dXJuIChFQXR0cmlidXRlKWRlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCg0Nik7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVBdHRyaWJ1dGUgZ2V0RGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9JbmNpZGVuY2UzMSgpIHsKKwkJcmV0dXJuIChFQXR0cmlidXRlKWRlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCg0Nyk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVBdHRyaWJ1dGUgZ2V0RGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9JbmNpZGVuY2U0MSgpIHsKKwkJcmV0dXJuIChFQXR0cmlidXRlKWRlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCg0OCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVBdHRyaWJ1dGUgZ2V0RGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9JbmNpZGVuY2UxMygpIHsKKwkJcmV0dXJuIChFQXR0cmlidXRlKWRlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCg0OSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVBdHRyaWJ1dGUgZ2V0RGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9JbmNpZGVuY2UyMygpIHsKKwkJcmV0dXJuIChFQXR0cmlidXRlKWRlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCg1MCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVBdHRyaWJ1dGUgZ2V0RGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9JbmNpZGVuY2UzMigpIHsKKwkJcmV0dXJuIChFQXR0cmlidXRlKWRlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCg1MSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVBdHRyaWJ1dGUgZ2V0RGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9JbmNpZGVuY2U0MigpIHsKKwkJcmV0dXJuIChFQXR0cmlidXRlKWRlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCg1Mik7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVBdHRyaWJ1dGUgZ2V0RGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9JbmNpZGVuY2UxNCgpIHsKKwkJcmV0dXJuIChFQXR0cmlidXRlKWRlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCg1Myk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVBdHRyaWJ1dGUgZ2V0RGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9JbmNpZGVuY2UyNCgpIHsKKwkJcmV0dXJuIChFQXR0cmlidXRlKWRlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCg1NCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVBdHRyaWJ1dGUgZ2V0RGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9JbmNpZGVuY2UzNCgpIHsKKwkJcmV0dXJuIChFQXR0cmlidXRlKWRlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCg1NSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVBdHRyaWJ1dGUgZ2V0RGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9JbmNpZGVuY2U0MygpIHsKKwkJcmV0dXJuIChFQXR0cmlidXRlKWRlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCg1Nik7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVBdHRyaWJ1dGUgZ2V0RGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9EaXNlYXNlRGVhdGhzMSgpIHsKKwkJcmV0dXJuIChFQXR0cmlidXRlKWRlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCg1Nyk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVBdHRyaWJ1dGUgZ2V0RGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9EaXNlYXNlRGVhdGhzMigpIHsKKwkJcmV0dXJuIChFQXR0cmlidXRlKWRlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCg1OCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVBdHRyaWJ1dGUgZ2V0RGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9EaXNlYXNlRGVhdGhzMygpIHsKKwkJcmV0dXJuIChFQXR0cmlidXRlKWRlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCg1OSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVBdHRyaWJ1dGUgZ2V0RGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9EaXNlYXNlRGVhdGhzNCgpIHsKKwkJcmV0dXJuIChFQXR0cmlidXRlKWRlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCg2MCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVBdHRyaWJ1dGUgZ2V0RGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9EaXNlYXNlRGVhdGhzMTIoKSB7CisJCXJldHVybiAoRUF0dHJpYnV0ZSlkZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoNjEpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQXR0cmlidXRlIGdldERlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfRGlzZWFzZURlYXRoczIxKCkgeworCQlyZXR1cm4gKEVBdHRyaWJ1dGUpZGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZUVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDYyKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUF0dHJpYnV0ZSBnZXREZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX0Rpc2Vhc2VEZWF0aHMzMSgpIHsKKwkJcmV0dXJuIChFQXR0cmlidXRlKWRlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCg2Myk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVBdHRyaWJ1dGUgZ2V0RGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9EaXNlYXNlRGVhdGhzNDEoKSB7CisJCXJldHVybiAoRUF0dHJpYnV0ZSlkZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoNjQpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQXR0cmlidXRlIGdldERlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfRGlzZWFzZURlYXRoczEzKCkgeworCQlyZXR1cm4gKEVBdHRyaWJ1dGUpZGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZUVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDY1KTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUF0dHJpYnV0ZSBnZXREZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX0Rpc2Vhc2VEZWF0aHMyMygpIHsKKwkJcmV0dXJuIChFQXR0cmlidXRlKWRlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCg2Nik7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVBdHRyaWJ1dGUgZ2V0RGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9EaXNlYXNlRGVhdGhzMzIoKSB7CisJCXJldHVybiAoRUF0dHJpYnV0ZSlkZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoNjcpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQXR0cmlidXRlIGdldERlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfRGlzZWFzZURlYXRoczQyKCkgeworCQlyZXR1cm4gKEVBdHRyaWJ1dGUpZGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZUVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDY4KTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUF0dHJpYnV0ZSBnZXREZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX0Rpc2Vhc2VEZWF0aHMxNCgpIHsKKwkJcmV0dXJuIChFQXR0cmlidXRlKWRlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCg2OSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVBdHRyaWJ1dGUgZ2V0RGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9EaXNlYXNlRGVhdGhzMjQoKSB7CisJCXJldHVybiAoRUF0dHJpYnV0ZSlkZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoNzApOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQXR0cmlidXRlIGdldERlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfRGlzZWFzZURlYXRoczM0KCkgeworCQlyZXR1cm4gKEVBdHRyaWJ1dGUpZGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZUVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDcxKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUF0dHJpYnV0ZSBnZXREZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX0Rpc2Vhc2VEZWF0aHM0MygpIHsKKwkJcmV0dXJuIChFQXR0cmlidXRlKWRlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCg3Mik7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVDbGFzcyBnZXREZW5ndWVNb2RlbFZlY3RvckxhYmVsKCkgeworCQlyZXR1cm4gZGVuZ3VlTW9kZWxWZWN0b3JMYWJlbEVDbGFzczsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUNsYXNzIGdldERlbmd1ZU1vZGVsVmVjdG9yTGFiZWxWYWx1ZSgpIHsKKwkJcmV0dXJuIGRlbmd1ZU1vZGVsVmVjdG9yTGFiZWxWYWx1ZUVDbGFzczsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUF0dHJpYnV0ZSBnZXREZW5ndWVNb2RlbFZlY3RvckxhYmVsVmFsdWVfRTEoKSB7CisJCXJldHVybiAoRUF0dHJpYnV0ZSlkZW5ndWVNb2RlbFZlY3RvckxhYmVsVmFsdWVFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgwKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUF0dHJpYnV0ZSBnZXREZW5ndWVNb2RlbFZlY3RvckxhYmVsVmFsdWVfRTIoKSB7CisJCXJldHVybiAoRUF0dHJpYnV0ZSlkZW5ndWVNb2RlbFZlY3RvckxhYmVsVmFsdWVFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgxKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUF0dHJpYnV0ZSBnZXREZW5ndWVNb2RlbFZlY3RvckxhYmVsVmFsdWVfRTMoKSB7CisJCXJldHVybiAoRUF0dHJpYnV0ZSlkZW5ndWVNb2RlbFZlY3RvckxhYmVsVmFsdWVFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgyKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUF0dHJpYnV0ZSBnZXREZW5ndWVNb2RlbFZlY3RvckxhYmVsVmFsdWVfRTQoKSB7CisJCXJldHVybiAoRUF0dHJpYnV0ZSlkZW5ndWVNb2RlbFZlY3RvckxhYmVsVmFsdWVFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgzKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUF0dHJpYnV0ZSBnZXREZW5ndWVNb2RlbFZlY3RvckxhYmVsVmFsdWVfSTEoKSB7CisJCXJldHVybiAoRUF0dHJpYnV0ZSlkZW5ndWVNb2RlbFZlY3RvckxhYmVsVmFsdWVFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCg0KTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUF0dHJpYnV0ZSBnZXREZW5ndWVNb2RlbFZlY3RvckxhYmVsVmFsdWVfSTIoKSB7CisJCXJldHVybiAoRUF0dHJpYnV0ZSlkZW5ndWVNb2RlbFZlY3RvckxhYmVsVmFsdWVFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCg1KTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUF0dHJpYnV0ZSBnZXREZW5ndWVNb2RlbFZlY3RvckxhYmVsVmFsdWVfSTMoKSB7CisJCXJldHVybiAoRUF0dHJpYnV0ZSlkZW5ndWVNb2RlbFZlY3RvckxhYmVsVmFsdWVFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCg2KTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUF0dHJpYnV0ZSBnZXREZW5ndWVNb2RlbFZlY3RvckxhYmVsVmFsdWVfSTQoKSB7CisJCXJldHVybiAoRUF0dHJpYnV0ZSlkZW5ndWVNb2RlbFZlY3RvckxhYmVsVmFsdWVFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCg3KTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUF0dHJpYnV0ZSBnZXREZW5ndWVNb2RlbFZlY3RvckxhYmVsVmFsdWVfSW5jaWRlbmNlMSgpIHsKKwkJcmV0dXJuIChFQXR0cmlidXRlKWRlbmd1ZU1vZGVsVmVjdG9yTGFiZWxWYWx1ZUVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDgpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQXR0cmlidXRlIGdldERlbmd1ZU1vZGVsVmVjdG9yTGFiZWxWYWx1ZV9JbmNpZGVuY2UyKCkgeworCQlyZXR1cm4gKEVBdHRyaWJ1dGUpZGVuZ3VlTW9kZWxWZWN0b3JMYWJlbFZhbHVlRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoOSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVBdHRyaWJ1dGUgZ2V0RGVuZ3VlTW9kZWxWZWN0b3JMYWJlbFZhbHVlX0luY2lkZW5jZTMoKSB7CisJCXJldHVybiAoRUF0dHJpYnV0ZSlkZW5ndWVNb2RlbFZlY3RvckxhYmVsVmFsdWVFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgxMCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVBdHRyaWJ1dGUgZ2V0RGVuZ3VlTW9kZWxWZWN0b3JMYWJlbFZhbHVlX0luY2lkZW5jZTQoKSB7CisJCXJldHVybiAoRUF0dHJpYnV0ZSlkZW5ndWVNb2RlbFZlY3RvckxhYmVsVmFsdWVFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgxMSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFZlY3RvckZhY3RvcnkgZ2V0VmVjdG9yRmFjdG9yeSgpIHsKKwkJcmV0dXJuIChWZWN0b3JGYWN0b3J5KWdldEVGYWN0b3J5SW5zdGFuY2UoKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcml2YXRlIGJvb2xlYW4gaXNDcmVhdGVkID0gZmFsc2U7CisKKwkvKioKKwkgKiBDcmVhdGVzIHRoZSBtZXRhLW1vZGVsIG9iamVjdHMgZm9yIHRoZSBwYWNrYWdlLiAgVGhpcyBtZXRob2QgaXMKKwkgKiBndWFyZGVkIHRvIGhhdmUgbm8gYWZmZWN0IG9uIGFueSBpbnZvY2F0aW9uIGJ1dCBpdHMgZmlyc3QuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgY3JlYXRlUGFja2FnZUNvbnRlbnRzKCkgeworCQlpZiAoaXNDcmVhdGVkKSByZXR1cm47CisJCWlzQ3JlYXRlZCA9IHRydWU7CisKKwkJLy8gQ3JlYXRlIGNsYXNzZXMgYW5kIHRoZWlyIGZlYXR1cmVzCisJCW1hY2RvbmFsZFJvc3NEaXNlYXNlTW9kZWxFQ2xhc3MgPSBjcmVhdGVFQ2xhc3MoTUFDRE9OQUxEX1JPU1NfRElTRUFTRV9NT0RFTCk7CisJCWNyZWF0ZUVBdHRyaWJ1dGUobWFjZG9uYWxkUm9zc0Rpc2Vhc2VNb2RlbEVDbGFzcywgTUFDRE9OQUxEX1JPU1NfRElTRUFTRV9NT0RFTF9fQklUSU5HX1JBVEUpOworCQljcmVhdGVFQXR0cmlidXRlKG1hY2RvbmFsZFJvc3NEaXNlYXNlTW9kZWxFQ2xhc3MsIE1BQ0RPTkFMRF9ST1NTX0RJU0VBU0VfTU9ERUxfX0lORkVDVElPVVNfQklUSU5HX1BST1BPUlRJT05fSFVNQU4pOworCQljcmVhdGVFQXR0cmlidXRlKG1hY2RvbmFsZFJvc3NEaXNlYXNlTW9kZWxFQ2xhc3MsIE1BQ0RPTkFMRF9ST1NTX0RJU0VBU0VfTU9ERUxfX0lORkVDVElPVVNfQklUSU5HX1BST1BPUlRJT05fVkVDVE9SKTsKKwkJY3JlYXRlRUF0dHJpYnV0ZShtYWNkb25hbGRSb3NzRGlzZWFzZU1vZGVsRUNsYXNzLCBNQUNET05BTERfUk9TU19ESVNFQVNFX01PREVMX19SRUNPVkVSWV9SQVRFKTsKKwkJY3JlYXRlRUF0dHJpYnV0ZShtYWNkb25hbGRSb3NzRGlzZWFzZU1vZGVsRUNsYXNzLCBNQUNET05BTERfUk9TU19ESVNFQVNFX01PREVMX19JTkNVQkFUSU9OX1JBVEUpOworCQljcmVhdGVFQXR0cmlidXRlKG1hY2RvbmFsZFJvc3NEaXNlYXNlTW9kZWxFQ2xhc3MsIE1BQ0RPTkFMRF9ST1NTX0RJU0VBU0VfTU9ERUxfX1ZFQ1RPUl9JTkNVQkFUSU9OX1JBVEUpOworCQljcmVhdGVFQXR0cmlidXRlKG1hY2RvbmFsZFJvc3NEaXNlYXNlTW9kZWxFQ2xhc3MsIE1BQ0RPTkFMRF9ST1NTX0RJU0VBU0VfTU9ERUxfX0lNTVVOSVRZX0xPU1NfUkFURSk7CisKKwkJdmVjdG9yRGlzZWFzZU1vZGVsRUNsYXNzID0gY3JlYXRlRUNsYXNzKFZFQ1RPUl9ESVNFQVNFX01PREVMKTsKKwkJY3JlYXRlRUF0dHJpYnV0ZSh2ZWN0b3JEaXNlYXNlTW9kZWxFQ2xhc3MsIFZFQ1RPUl9ESVNFQVNFX01PREVMX19WRUNUT1JfUE9QVUxBVElPTl9JREVOVElGSUVSKTsKKworCQlkZW5ndWVNb2RlbEVDbGFzcyA9IGNyZWF0ZUVDbGFzcyhERU5HVUVfTU9ERUwpOworCQljcmVhdGVFQXR0cmlidXRlKGRlbmd1ZU1vZGVsRUNsYXNzLCBERU5HVUVfTU9ERUxfX0JJVElOR19SQVRFX1NWKTsKKwkJY3JlYXRlRUF0dHJpYnV0ZShkZW5ndWVNb2RlbEVDbGFzcywgREVOR1VFX01PREVMX19CSVRJTkdfUkFURV9JVik7CisJCWNyZWF0ZUVBdHRyaWJ1dGUoZGVuZ3VlTW9kZWxFQ2xhc3MsIERFTkdVRV9NT0RFTF9fSE9TVF9JTkZFQ1RJVklUWTEpOworCQljcmVhdGVFQXR0cmlidXRlKGRlbmd1ZU1vZGVsRUNsYXNzLCBERU5HVUVfTU9ERUxfX0hPU1RfSU5GRUNUSVZJVFkyKTsKKwkJY3JlYXRlRUF0dHJpYnV0ZShkZW5ndWVNb2RlbEVDbGFzcywgREVOR1VFX01PREVMX19IT1NUX0lORkVDVElWSVRZMyk7CisJCWNyZWF0ZUVBdHRyaWJ1dGUoZGVuZ3VlTW9kZWxFQ2xhc3MsIERFTkdVRV9NT0RFTF9fSE9TVF9JTkZFQ1RJVklUWTQpOworCQljcmVhdGVFQXR0cmlidXRlKGRlbmd1ZU1vZGVsRUNsYXNzLCBERU5HVUVfTU9ERUxfX0hPU1RfUFJJTUFSWV9JTkNVQkFUSU9OX1JBVEUxKTsKKwkJY3JlYXRlRUF0dHJpYnV0ZShkZW5ndWVNb2RlbEVDbGFzcywgREVOR1VFX01PREVMX19IT1NUX1BSSU1BUllfSU5DVUJBVElPTl9SQVRFMik7CisJCWNyZWF0ZUVBdHRyaWJ1dGUoZGVuZ3VlTW9kZWxFQ2xhc3MsIERFTkdVRV9NT0RFTF9fSE9TVF9QUklNQVJZX0lOQ1VCQVRJT05fUkFURTMpOworCQljcmVhdGVFQXR0cmlidXRlKGRlbmd1ZU1vZGVsRUNsYXNzLCBERU5HVUVfTU9ERUxfX0hPU1RfUFJJTUFSWV9JTkNVQkFUSU9OX1JBVEU0KTsKKwkJY3JlYXRlRUF0dHJpYnV0ZShkZW5ndWVNb2RlbEVDbGFzcywgREVOR1VFX01PREVMX19IT1NUX1BSSU1BUllfUkVDT1ZFUllfUkFURTEpOworCQljcmVhdGVFQXR0cmlidXRlKGRlbmd1ZU1vZGVsRUNsYXNzLCBERU5HVUVfTU9ERUxfX0hPU1RfUFJJTUFSWV9SRUNPVkVSWV9SQVRFMik7CisJCWNyZWF0ZUVBdHRyaWJ1dGUoZGVuZ3VlTW9kZWxFQ2xhc3MsIERFTkdVRV9NT0RFTF9fSE9TVF9QUklNQVJZX1JFQ09WRVJZX1JBVEUzKTsKKwkJY3JlYXRlRUF0dHJpYnV0ZShkZW5ndWVNb2RlbEVDbGFzcywgREVOR1VFX01PREVMX19IT1NUX1BSSU1BUllfUkVDT1ZFUllfUkFURTQpOworCQljcmVhdGVFQXR0cmlidXRlKGRlbmd1ZU1vZGVsRUNsYXNzLCBERU5HVUVfTU9ERUxfX0hPU1RfUFJJTUFSWV9JTU1VTklUWV9MT1NTX1JBVEUxKTsKKwkJY3JlYXRlRUF0dHJpYnV0ZShkZW5ndWVNb2RlbEVDbGFzcywgREVOR1VFX01PREVMX19IT1NUX1BSSU1BUllfSU1NVU5JVFlfTE9TU19SQVRFMik7CisJCWNyZWF0ZUVBdHRyaWJ1dGUoZGVuZ3VlTW9kZWxFQ2xhc3MsIERFTkdVRV9NT0RFTF9fSE9TVF9QUklNQVJZX0lNTVVOSVRZX0xPU1NfUkFURTMpOworCQljcmVhdGVFQXR0cmlidXRlKGRlbmd1ZU1vZGVsRUNsYXNzLCBERU5HVUVfTU9ERUxfX0hPU1RfUFJJTUFSWV9JTU1VTklUWV9MT1NTX1JBVEU0KTsKKwkJY3JlYXRlRUF0dHJpYnV0ZShkZW5ndWVNb2RlbEVDbGFzcywgREVOR1VFX01PREVMX19IT1NUX1BSSU1BUllfRElTRUFTRV9ERUFUSF9SQVRFMSk7CisJCWNyZWF0ZUVBdHRyaWJ1dGUoZGVuZ3VlTW9kZWxFQ2xhc3MsIERFTkdVRV9NT0RFTF9fSE9TVF9QUklNQVJZX0RJU0VBU0VfREVBVEhfUkFURTIpOworCQljcmVhdGVFQXR0cmlidXRlKGRlbmd1ZU1vZGVsRUNsYXNzLCBERU5HVUVfTU9ERUxfX0hPU1RfUFJJTUFSWV9ESVNFQVNFX0RFQVRIX1JBVEUzKTsKKwkJY3JlYXRlRUF0dHJpYnV0ZShkZW5ndWVNb2RlbEVDbGFzcywgREVOR1VFX01PREVMX19IT1NUX1BSSU1BUllfRElTRUFTRV9ERUFUSF9SQVRFNCk7CisJCWNyZWF0ZUVBdHRyaWJ1dGUoZGVuZ3VlTW9kZWxFQ2xhc3MsIERFTkdVRV9NT0RFTF9fSE9TVF9BREUxMik7CisJCWNyZWF0ZUVBdHRyaWJ1dGUoZGVuZ3VlTW9kZWxFQ2xhc3MsIERFTkdVRV9NT0RFTF9fSE9TVF9BREUxMyk7CisJCWNyZWF0ZUVBdHRyaWJ1dGUoZGVuZ3VlTW9kZWxFQ2xhc3MsIERFTkdVRV9NT0RFTF9fSE9TVF9BREUxNCk7CisJCWNyZWF0ZUVBdHRyaWJ1dGUoZGVuZ3VlTW9kZWxFQ2xhc3MsIERFTkdVRV9NT0RFTF9fSE9TVF9BREUyMSk7CisJCWNyZWF0ZUVBdHRyaWJ1dGUoZGVuZ3VlTW9kZWxFQ2xhc3MsIERFTkdVRV9NT0RFTF9fSE9TVF9BREUyMyk7CisJCWNyZWF0ZUVBdHRyaWJ1dGUoZGVuZ3VlTW9kZWxFQ2xhc3MsIERFTkdVRV9NT0RFTF9fSE9TVF9BREUyNCk7CisJCWNyZWF0ZUVBdHRyaWJ1dGUoZGVuZ3VlTW9kZWxFQ2xhc3MsIERFTkdVRV9NT0RFTF9fSE9TVF9BREUzMSk7CisJCWNyZWF0ZUVBdHRyaWJ1dGUoZGVuZ3VlTW9kZWxFQ2xhc3MsIERFTkdVRV9NT0RFTF9fSE9TVF9BREUzMik7CisJCWNyZWF0ZUVBdHRyaWJ1dGUoZGVuZ3VlTW9kZWxFQ2xhc3MsIERFTkdVRV9NT0RFTF9fSE9TVF9BREUzNCk7CisJCWNyZWF0ZUVBdHRyaWJ1dGUoZGVuZ3VlTW9kZWxFQ2xhc3MsIERFTkdVRV9NT0RFTF9fSE9TVF9BREU0MSk7CisJCWNyZWF0ZUVBdHRyaWJ1dGUoZGVuZ3VlTW9kZWxFQ2xhc3MsIERFTkdVRV9NT0RFTF9fSE9TVF9BREU0Mik7CisJCWNyZWF0ZUVBdHRyaWJ1dGUoZGVuZ3VlTW9kZWxFQ2xhc3MsIERFTkdVRV9NT0RFTF9fSE9TVF9BREU0Myk7CisJCWNyZWF0ZUVBdHRyaWJ1dGUoZGVuZ3VlTW9kZWxFQ2xhc3MsIERFTkdVRV9NT0RFTF9fSE9TVF9TRUNPTkRBUllfRElTRUFTRV9ERUFUSF9SQVRFMTIpOworCQljcmVhdGVFQXR0cmlidXRlKGRlbmd1ZU1vZGVsRUNsYXNzLCBERU5HVUVfTU9ERUxfX0hPU1RfU0VDT05EQVJZX0RJU0VBU0VfREVBVEhfUkFURTEzKTsKKwkJY3JlYXRlRUF0dHJpYnV0ZShkZW5ndWVNb2RlbEVDbGFzcywgREVOR1VFX01PREVMX19IT1NUX1NFQ09OREFSWV9ESVNFQVNFX0RFQVRIX1JBVEUxNCk7CisJCWNyZWF0ZUVBdHRyaWJ1dGUoZGVuZ3VlTW9kZWxFQ2xhc3MsIERFTkdVRV9NT0RFTF9fSE9TVF9TRUNPTkRBUllfRElTRUFTRV9ERUFUSF9SQVRFMjEpOworCQljcmVhdGVFQXR0cmlidXRlKGRlbmd1ZU1vZGVsRUNsYXNzLCBERU5HVUVfTU9ERUxfX0hPU1RfU0VDT05EQVJZX0RJU0VBU0VfREVBVEhfUkFURTIzKTsKKwkJY3JlYXRlRUF0dHJpYnV0ZShkZW5ndWVNb2RlbEVDbGFzcywgREVOR1VFX01PREVMX19IT1NUX1NFQ09OREFSWV9ESVNFQVNFX0RFQVRIX1JBVEUyNCk7CisJCWNyZWF0ZUVBdHRyaWJ1dGUoZGVuZ3VlTW9kZWxFQ2xhc3MsIERFTkdVRV9NT0RFTF9fSE9TVF9TRUNPTkRBUllfRElTRUFTRV9ERUFUSF9SQVRFMzEpOworCQljcmVhdGVFQXR0cmlidXRlKGRlbmd1ZU1vZGVsRUNsYXNzLCBERU5HVUVfTU9ERUxfX0hPU1RfU0VDT05EQVJZX0RJU0VBU0VfREVBVEhfUkFURTMyKTsKKwkJY3JlYXRlRUF0dHJpYnV0ZShkZW5ndWVNb2RlbEVDbGFzcywgREVOR1VFX01PREVMX19IT1NUX1NFQ09OREFSWV9ESVNFQVNFX0RFQVRIX1JBVEUzNCk7CisJCWNyZWF0ZUVBdHRyaWJ1dGUoZGVuZ3VlTW9kZWxFQ2xhc3MsIERFTkdVRV9NT0RFTF9fSE9TVF9TRUNPTkRBUllfRElTRUFTRV9ERUFUSF9SQVRFNDEpOworCQljcmVhdGVFQXR0cmlidXRlKGRlbmd1ZU1vZGVsRUNsYXNzLCBERU5HVUVfTU9ERUxfX0hPU1RfU0VDT05EQVJZX0RJU0VBU0VfREVBVEhfUkFURTQyKTsKKwkJY3JlYXRlRUF0dHJpYnV0ZShkZW5ndWVNb2RlbEVDbGFzcywgREVOR1VFX01PREVMX19IT1NUX1NFQ09OREFSWV9ESVNFQVNFX0RFQVRIX1JBVEU0Myk7CisJCWNyZWF0ZUVBdHRyaWJ1dGUoZGVuZ3VlTW9kZWxFQ2xhc3MsIERFTkdVRV9NT0RFTF9fSE9TVF9TRUNPTkRBUllfUkVDT1ZFUllfUkFURTEyKTsKKwkJY3JlYXRlRUF0dHJpYnV0ZShkZW5ndWVNb2RlbEVDbGFzcywgREVOR1VFX01PREVMX19IT1NUX1NFQ09OREFSWV9SRUNPVkVSWV9SQVRFMTMpOworCQljcmVhdGVFQXR0cmlidXRlKGRlbmd1ZU1vZGVsRUNsYXNzLCBERU5HVUVfTU9ERUxfX0hPU1RfU0VDT05EQVJZX1JFQ09WRVJZX1JBVEUxNCk7CisJCWNyZWF0ZUVBdHRyaWJ1dGUoZGVuZ3VlTW9kZWxFQ2xhc3MsIERFTkdVRV9NT0RFTF9fSE9TVF9TRUNPTkRBUllfUkVDT1ZFUllfUkFURTIxKTsKKwkJY3JlYXRlRUF0dHJpYnV0ZShkZW5ndWVNb2RlbEVDbGFzcywgREVOR1VFX01PREVMX19IT1NUX1NFQ09OREFSWV9SRUNPVkVSWV9SQVRFMjMpOworCQljcmVhdGVFQXR0cmlidXRlKGRlbmd1ZU1vZGVsRUNsYXNzLCBERU5HVUVfTU9ERUxfX0hPU1RfU0VDT05EQVJZX1JFQ09WRVJZX1JBVEUyNCk7CisJCWNyZWF0ZUVBdHRyaWJ1dGUoZGVuZ3VlTW9kZWxFQ2xhc3MsIERFTkdVRV9NT0RFTF9fSE9TVF9TRUNPTkRBUllfUkVDT1ZFUllfUkFURTMxKTsKKwkJY3JlYXRlRUF0dHJpYnV0ZShkZW5ndWVNb2RlbEVDbGFzcywgREVOR1VFX01PREVMX19IT1NUX1NFQ09OREFSWV9SRUNPVkVSWV9SQVRFMzIpOworCQljcmVhdGVFQXR0cmlidXRlKGRlbmd1ZU1vZGVsRUNsYXNzLCBERU5HVUVfTU9ERUxfX0hPU1RfU0VDT05EQVJZX1JFQ09WRVJZX1JBVEUzNCk7CisJCWNyZWF0ZUVBdHRyaWJ1dGUoZGVuZ3VlTW9kZWxFQ2xhc3MsIERFTkdVRV9NT0RFTF9fSE9TVF9TRUNPTkRBUllfUkVDT1ZFUllfUkFURTQxKTsKKwkJY3JlYXRlRUF0dHJpYnV0ZShkZW5ndWVNb2RlbEVDbGFzcywgREVOR1VFX01PREVMX19IT1NUX1NFQ09OREFSWV9SRUNPVkVSWV9SQVRFNDIpOworCQljcmVhdGVFQXR0cmlidXRlKGRlbmd1ZU1vZGVsRUNsYXNzLCBERU5HVUVfTU9ERUxfX0hPU1RfU0VDT05EQVJZX1JFQ09WRVJZX1JBVEU0Myk7CisJCWNyZWF0ZUVBdHRyaWJ1dGUoZGVuZ3VlTW9kZWxFQ2xhc3MsIERFTkdVRV9NT0RFTF9fSE9TVF9TRUNPTkRBUllfSU5DVUJBVElPTl9SQVRFMTIpOworCQljcmVhdGVFQXR0cmlidXRlKGRlbmd1ZU1vZGVsRUNsYXNzLCBERU5HVUVfTU9ERUxfX0hPU1RfU0VDT05EQVJZX0lOQ1VCQVRJT05fUkFURTEzKTsKKwkJY3JlYXRlRUF0dHJpYnV0ZShkZW5ndWVNb2RlbEVDbGFzcywgREVOR1VFX01PREVMX19IT1NUX1NFQ09OREFSWV9JTkNVQkFUSU9OX1JBVEUxNCk7CisJCWNyZWF0ZUVBdHRyaWJ1dGUoZGVuZ3VlTW9kZWxFQ2xhc3MsIERFTkdVRV9NT0RFTF9fSE9TVF9TRUNPTkRBUllfSU5DVUJBVElPTl9SQVRFMjEpOworCQljcmVhdGVFQXR0cmlidXRlKGRlbmd1ZU1vZGVsRUNsYXNzLCBERU5HVUVfTU9ERUxfX0hPU1RfU0VDT05EQVJZX0lOQ1VCQVRJT05fUkFURTIzKTsKKwkJY3JlYXRlRUF0dHJpYnV0ZShkZW5ndWVNb2RlbEVDbGFzcywgREVOR1VFX01PREVMX19IT1NUX1NFQ09OREFSWV9JTkNVQkFUSU9OX1JBVEUyNCk7CisJCWNyZWF0ZUVBdHRyaWJ1dGUoZGVuZ3VlTW9kZWxFQ2xhc3MsIERFTkdVRV9NT0RFTF9fSE9TVF9TRUNPTkRBUllfSU5DVUJBVElPTl9SQVRFMzEpOworCQljcmVhdGVFQXR0cmlidXRlKGRlbmd1ZU1vZGVsRUNsYXNzLCBERU5HVUVfTU9ERUxfX0hPU1RfU0VDT05EQVJZX0lOQ1VCQVRJT05fUkFURTMyKTsKKwkJY3JlYXRlRUF0dHJpYnV0ZShkZW5ndWVNb2RlbEVDbGFzcywgREVOR1VFX01PREVMX19IT1NUX1NFQ09OREFSWV9JTkNVQkFUSU9OX1JBVEUzNCk7CisJCWNyZWF0ZUVBdHRyaWJ1dGUoZGVuZ3VlTW9kZWxFQ2xhc3MsIERFTkdVRV9NT0RFTF9fSE9TVF9TRUNPTkRBUllfSU5DVUJBVElPTl9SQVRFNDEpOworCQljcmVhdGVFQXR0cmlidXRlKGRlbmd1ZU1vZGVsRUNsYXNzLCBERU5HVUVfTU9ERUxfX0hPU1RfU0VDT05EQVJZX0lOQ1VCQVRJT05fUkFURTQyKTsKKwkJY3JlYXRlRUF0dHJpYnV0ZShkZW5ndWVNb2RlbEVDbGFzcywgREVOR1VFX01PREVMX19IT1NUX1NFQ09OREFSWV9JTkNVQkFUSU9OX1JBVEU0Myk7CisJCWNyZWF0ZUVBdHRyaWJ1dGUoZGVuZ3VlTW9kZWxFQ2xhc3MsIERFTkdVRV9NT0RFTF9fVkVDVE9SX0lORkVDVElWSVRZMSk7CisJCWNyZWF0ZUVBdHRyaWJ1dGUoZGVuZ3VlTW9kZWxFQ2xhc3MsIERFTkdVRV9NT0RFTF9fVkVDVE9SX0lORkVDVElWSVRZMik7CisJCWNyZWF0ZUVBdHRyaWJ1dGUoZGVuZ3VlTW9kZWxFQ2xhc3MsIERFTkdVRV9NT0RFTF9fVkVDVE9SX0lORkVDVElWSVRZMyk7CisJCWNyZWF0ZUVBdHRyaWJ1dGUoZGVuZ3VlTW9kZWxFQ2xhc3MsIERFTkdVRV9NT0RFTF9fVkVDVE9SX0lORkVDVElWSVRZNCk7CisJCWNyZWF0ZUVBdHRyaWJ1dGUoZGVuZ3VlTW9kZWxFQ2xhc3MsIERFTkdVRV9NT0RFTF9fVkVDVE9SX0FERTEpOworCQljcmVhdGVFQXR0cmlidXRlKGRlbmd1ZU1vZGVsRUNsYXNzLCBERU5HVUVfTU9ERUxfX1ZFQ1RPUl9BREUyKTsKKwkJY3JlYXRlRUF0dHJpYnV0ZShkZW5ndWVNb2RlbEVDbGFzcywgREVOR1VFX01PREVMX19WRUNUT1JfQURFMyk7CisJCWNyZWF0ZUVBdHRyaWJ1dGUoZGVuZ3VlTW9kZWxFQ2xhc3MsIERFTkdVRV9NT0RFTF9fVkVDVE9SX0FERTQpOworCQljcmVhdGVFQXR0cmlidXRlKGRlbmd1ZU1vZGVsRUNsYXNzLCBERU5HVUVfTU9ERUxfX1ZFQ1RPUl9JTkNVQkFUSU9OX1JBVEUxKTsKKwkJY3JlYXRlRUF0dHJpYnV0ZShkZW5ndWVNb2RlbEVDbGFzcywgREVOR1VFX01PREVMX19WRUNUT1JfSU5DVUJBVElPTl9SQVRFMik7CisJCWNyZWF0ZUVBdHRyaWJ1dGUoZGVuZ3VlTW9kZWxFQ2xhc3MsIERFTkdVRV9NT0RFTF9fVkVDVE9SX0lOQ1VCQVRJT05fUkFURTMpOworCQljcmVhdGVFQXR0cmlidXRlKGRlbmd1ZU1vZGVsRUNsYXNzLCBERU5HVUVfTU9ERUxfX1ZFQ1RPUl9JTkNVQkFUSU9OX1JBVEU0KTsKKworCQlzaW1wbGVEZW5ndWVNb2RlbEVDbGFzcyA9IGNyZWF0ZUVDbGFzcyhTSU1QTEVfREVOR1VFX01PREVMKTsKKwkJY3JlYXRlRUF0dHJpYnV0ZShzaW1wbGVEZW5ndWVNb2RlbEVDbGFzcywgU0lNUExFX0RFTkdVRV9NT0RFTF9fQklUSU5HX1JBVEUpOworCQljcmVhdGVFQXR0cmlidXRlKHNpbXBsZURlbmd1ZU1vZGVsRUNsYXNzLCBTSU1QTEVfREVOR1VFX01PREVMX19IT1NUX0lORkVDVElWSVRZMSk7CisJCWNyZWF0ZUVBdHRyaWJ1dGUoc2ltcGxlRGVuZ3VlTW9kZWxFQ2xhc3MsIFNJTVBMRV9ERU5HVUVfTU9ERUxfX0hPU1RfSU5GRUNUSVZJVFkyKTsKKwkJY3JlYXRlRUF0dHJpYnV0ZShzaW1wbGVEZW5ndWVNb2RlbEVDbGFzcywgU0lNUExFX0RFTkdVRV9NT0RFTF9fSE9TVF9JTkZFQ1RJVklUWTMpOworCQljcmVhdGVFQXR0cmlidXRlKHNpbXBsZURlbmd1ZU1vZGVsRUNsYXNzLCBTSU1QTEVfREVOR1VFX01PREVMX19IT1NUX0lORkVDVElWSVRZNCk7CisJCWNyZWF0ZUVBdHRyaWJ1dGUoc2ltcGxlRGVuZ3VlTW9kZWxFQ2xhc3MsIFNJTVBMRV9ERU5HVUVfTU9ERUxfX0hPU1RfUFJJTUFSWV9JTkNVQkFUSU9OX1JBVEUpOworCQljcmVhdGVFQXR0cmlidXRlKHNpbXBsZURlbmd1ZU1vZGVsRUNsYXNzLCBTSU1QTEVfREVOR1VFX01PREVMX19IT1NUX1BSSU1BUllfUkVDT1ZFUllfUkFURSk7CisJCWNyZWF0ZUVBdHRyaWJ1dGUoc2ltcGxlRGVuZ3VlTW9kZWxFQ2xhc3MsIFNJTVBMRV9ERU5HVUVfTU9ERUxfX0hPU1RfUFJJTUFSWV9JTU1VTklUWV9MT1NTX1JBVEUpOworCQljcmVhdGVFQXR0cmlidXRlKHNpbXBsZURlbmd1ZU1vZGVsRUNsYXNzLCBTSU1QTEVfREVOR1VFX01PREVMX19IT1NUX1BSSU1BUllfREVBVEhfUkFURSk7CisJCWNyZWF0ZUVBdHRyaWJ1dGUoc2ltcGxlRGVuZ3VlTW9kZWxFQ2xhc3MsIFNJTVBMRV9ERU5HVUVfTU9ERUxfX0hPU1RfQURFMSk7CisJCWNyZWF0ZUVBdHRyaWJ1dGUoc2ltcGxlRGVuZ3VlTW9kZWxFQ2xhc3MsIFNJTVBMRV9ERU5HVUVfTU9ERUxfX0hPU1RfQURFMik7CisJCWNyZWF0ZUVBdHRyaWJ1dGUoc2ltcGxlRGVuZ3VlTW9kZWxFQ2xhc3MsIFNJTVBMRV9ERU5HVUVfTU9ERUxfX0hPU1RfQURFMyk7CisJCWNyZWF0ZUVBdHRyaWJ1dGUoc2ltcGxlRGVuZ3VlTW9kZWxFQ2xhc3MsIFNJTVBMRV9ERU5HVUVfTU9ERUxfX0hPU1RfQURFNCk7CisJCWNyZWF0ZUVBdHRyaWJ1dGUoc2ltcGxlRGVuZ3VlTW9kZWxFQ2xhc3MsIFNJTVBMRV9ERU5HVUVfTU9ERUxfX0hPU1RfU0VDT05EQVJZX0lOQ1VCQVRJT05fUkFURSk7CisJCWNyZWF0ZUVBdHRyaWJ1dGUoc2ltcGxlRGVuZ3VlTW9kZWxFQ2xhc3MsIFNJTVBMRV9ERU5HVUVfTU9ERUxfX0hPU1RfU0VDT05EQVJZX1JFQ09WRVJZX1JBVEUpOworCQljcmVhdGVFQXR0cmlidXRlKHNpbXBsZURlbmd1ZU1vZGVsRUNsYXNzLCBTSU1QTEVfREVOR1VFX01PREVMX19IT1NUX1NFQ09OREFSWV9ERUFUSF9SQVRFKTsKKwkJY3JlYXRlRUF0dHJpYnV0ZShzaW1wbGVEZW5ndWVNb2RlbEVDbGFzcywgU0lNUExFX0RFTkdVRV9NT0RFTF9fVkVDVE9SX0lORkVDVElWSVRZMSk7CisJCWNyZWF0ZUVBdHRyaWJ1dGUoc2ltcGxlRGVuZ3VlTW9kZWxFQ2xhc3MsIFNJTVBMRV9ERU5HVUVfTU9ERUxfX1ZFQ1RPUl9JTkZFQ1RJVklUWTIpOworCQljcmVhdGVFQXR0cmlidXRlKHNpbXBsZURlbmd1ZU1vZGVsRUNsYXNzLCBTSU1QTEVfREVOR1VFX01PREVMX19WRUNUT1JfSU5GRUNUSVZJVFkzKTsKKwkJY3JlYXRlRUF0dHJpYnV0ZShzaW1wbGVEZW5ndWVNb2RlbEVDbGFzcywgU0lNUExFX0RFTkdVRV9NT0RFTF9fVkVDVE9SX0lORkVDVElWSVRZNCk7CisJCWNyZWF0ZUVBdHRyaWJ1dGUoc2ltcGxlRGVuZ3VlTW9kZWxFQ2xhc3MsIFNJTVBMRV9ERU5HVUVfTU9ERUxfX1ZFQ1RPUl9BREUxKTsKKwkJY3JlYXRlRUF0dHJpYnV0ZShzaW1wbGVEZW5ndWVNb2RlbEVDbGFzcywgU0lNUExFX0RFTkdVRV9NT0RFTF9fVkVDVE9SX0FERTIpOworCQljcmVhdGVFQXR0cmlidXRlKHNpbXBsZURlbmd1ZU1vZGVsRUNsYXNzLCBTSU1QTEVfREVOR1VFX01PREVMX19WRUNUT1JfQURFMyk7CisJCWNyZWF0ZUVBdHRyaWJ1dGUoc2ltcGxlRGVuZ3VlTW9kZWxFQ2xhc3MsIFNJTVBMRV9ERU5HVUVfTU9ERUxfX1ZFQ1RPUl9BREU0KTsKKwkJY3JlYXRlRUF0dHJpYnV0ZShzaW1wbGVEZW5ndWVNb2RlbEVDbGFzcywgU0lNUExFX0RFTkdVRV9NT0RFTF9fVkVDVE9SX0lOQ1VCQVRJT05fUkFURSk7CisKKwkJZGVuZ3VlTW9kZWxIb3N0TGFiZWxFQ2xhc3MgPSBjcmVhdGVFQ2xhc3MoREVOR1VFX01PREVMX0hPU1RfTEFCRUwpOworCisJCWRlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVFQ2xhc3MgPSBjcmVhdGVFQ2xhc3MoREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUUpOworCQljcmVhdGVFQXR0cmlidXRlKGRlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVFQ2xhc3MsIERFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19FMSk7CisJCWNyZWF0ZUVBdHRyaWJ1dGUoZGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZUVDbGFzcywgREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0UyKTsKKwkJY3JlYXRlRUF0dHJpYnV0ZShkZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlRUNsYXNzLCBERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fRTMpOworCQljcmVhdGVFQXR0cmlidXRlKGRlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVFQ2xhc3MsIERFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19FNCk7CisJCWNyZWF0ZUVBdHRyaWJ1dGUoZGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZUVDbGFzcywgREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0kxKTsKKwkJY3JlYXRlRUF0dHJpYnV0ZShkZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlRUNsYXNzLCBERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fSTIpOworCQljcmVhdGVFQXR0cmlidXRlKGRlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVFQ2xhc3MsIERFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19JMyk7CisJCWNyZWF0ZUVBdHRyaWJ1dGUoZGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZUVDbGFzcywgREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0k0KTsKKwkJY3JlYXRlRUF0dHJpYnV0ZShkZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlRUNsYXNzLCBERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fVDEpOworCQljcmVhdGVFQXR0cmlidXRlKGRlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVFQ2xhc3MsIERFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19UMik7CisJCWNyZWF0ZUVBdHRyaWJ1dGUoZGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZUVDbGFzcywgREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX1QzKTsKKwkJY3JlYXRlRUF0dHJpYnV0ZShkZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlRUNsYXNzLCBERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fVDQpOworCQljcmVhdGVFQXR0cmlidXRlKGRlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVFQ2xhc3MsIERFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19SMSk7CisJCWNyZWF0ZUVBdHRyaWJ1dGUoZGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZUVDbGFzcywgREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX1IyKTsKKwkJY3JlYXRlRUF0dHJpYnV0ZShkZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlRUNsYXNzLCBERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fUjMpOworCQljcmVhdGVFQXR0cmlidXRlKGRlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVFQ2xhc3MsIERFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19SNCk7CisJCWNyZWF0ZUVBdHRyaWJ1dGUoZGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZUVDbGFzcywgREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0UxMik7CisJCWNyZWF0ZUVBdHRyaWJ1dGUoZGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZUVDbGFzcywgREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0UxMyk7CisJCWNyZWF0ZUVBdHRyaWJ1dGUoZGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZUVDbGFzcywgREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0UxNCk7CisJCWNyZWF0ZUVBdHRyaWJ1dGUoZGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZUVDbGFzcywgREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0UyMSk7CisJCWNyZWF0ZUVBdHRyaWJ1dGUoZGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZUVDbGFzcywgREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0UyMyk7CisJCWNyZWF0ZUVBdHRyaWJ1dGUoZGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZUVDbGFzcywgREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0UyNCk7CisJCWNyZWF0ZUVBdHRyaWJ1dGUoZGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZUVDbGFzcywgREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0UzMSk7CisJCWNyZWF0ZUVBdHRyaWJ1dGUoZGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZUVDbGFzcywgREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0UzMik7CisJCWNyZWF0ZUVBdHRyaWJ1dGUoZGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZUVDbGFzcywgREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0UzNCk7CisJCWNyZWF0ZUVBdHRyaWJ1dGUoZGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZUVDbGFzcywgREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0U0MSk7CisJCWNyZWF0ZUVBdHRyaWJ1dGUoZGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZUVDbGFzcywgREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0U0Mik7CisJCWNyZWF0ZUVBdHRyaWJ1dGUoZGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZUVDbGFzcywgREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0U0Myk7CisJCWNyZWF0ZUVBdHRyaWJ1dGUoZGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZUVDbGFzcywgREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0kxMik7CisJCWNyZWF0ZUVBdHRyaWJ1dGUoZGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZUVDbGFzcywgREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0kxMyk7CisJCWNyZWF0ZUVBdHRyaWJ1dGUoZGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZUVDbGFzcywgREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0kxNCk7CisJCWNyZWF0ZUVBdHRyaWJ1dGUoZGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZUVDbGFzcywgREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0kyMSk7CisJCWNyZWF0ZUVBdHRyaWJ1dGUoZGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZUVDbGFzcywgREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0kyMyk7CisJCWNyZWF0ZUVBdHRyaWJ1dGUoZGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZUVDbGFzcywgREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0kyNCk7CisJCWNyZWF0ZUVBdHRyaWJ1dGUoZGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZUVDbGFzcywgREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0kzMSk7CisJCWNyZWF0ZUVBdHRyaWJ1dGUoZGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZUVDbGFzcywgREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0kzMik7CisJCWNyZWF0ZUVBdHRyaWJ1dGUoZGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZUVDbGFzcywgREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0kzNCk7CisJCWNyZWF0ZUVBdHRyaWJ1dGUoZGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZUVDbGFzcywgREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0k0MSk7CisJCWNyZWF0ZUVBdHRyaWJ1dGUoZGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZUVDbGFzcywgREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0k0Mik7CisJCWNyZWF0ZUVBdHRyaWJ1dGUoZGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZUVDbGFzcywgREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0k0Myk7CisJCWNyZWF0ZUVBdHRyaWJ1dGUoZGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZUVDbGFzcywgREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX1IpOworCQljcmVhdGVFQXR0cmlidXRlKGRlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVFQ2xhc3MsIERFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19JTkNJREVOQ0UxKTsKKwkJY3JlYXRlRUF0dHJpYnV0ZShkZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlRUNsYXNzLCBERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fSU5DSURFTkNFMik7CisJCWNyZWF0ZUVBdHRyaWJ1dGUoZGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZUVDbGFzcywgREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0lOQ0lERU5DRTMpOworCQljcmVhdGVFQXR0cmlidXRlKGRlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVFQ2xhc3MsIERFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19JTkNJREVOQ0U0KTsKKwkJY3JlYXRlRUF0dHJpYnV0ZShkZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlRUNsYXNzLCBERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fSU5DSURFTkNFMTIpOworCQljcmVhdGVFQXR0cmlidXRlKGRlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVFQ2xhc3MsIERFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19JTkNJREVOQ0UyMSk7CisJCWNyZWF0ZUVBdHRyaWJ1dGUoZGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZUVDbGFzcywgREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0lOQ0lERU5DRTMxKTsKKwkJY3JlYXRlRUF0dHJpYnV0ZShkZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlRUNsYXNzLCBERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fSU5DSURFTkNFNDEpOworCQljcmVhdGVFQXR0cmlidXRlKGRlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVFQ2xhc3MsIERFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19JTkNJREVOQ0UxMyk7CisJCWNyZWF0ZUVBdHRyaWJ1dGUoZGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZUVDbGFzcywgREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0lOQ0lERU5DRTIzKTsKKwkJY3JlYXRlRUF0dHJpYnV0ZShkZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlRUNsYXNzLCBERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fSU5DSURFTkNFMzIpOworCQljcmVhdGVFQXR0cmlidXRlKGRlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVFQ2xhc3MsIERFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19JTkNJREVOQ0U0Mik7CisJCWNyZWF0ZUVBdHRyaWJ1dGUoZGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZUVDbGFzcywgREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0lOQ0lERU5DRTE0KTsKKwkJY3JlYXRlRUF0dHJpYnV0ZShkZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlRUNsYXNzLCBERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fSU5DSURFTkNFMjQpOworCQljcmVhdGVFQXR0cmlidXRlKGRlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVFQ2xhc3MsIERFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19JTkNJREVOQ0UzNCk7CisJCWNyZWF0ZUVBdHRyaWJ1dGUoZGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZUVDbGFzcywgREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0lOQ0lERU5DRTQzKTsKKwkJY3JlYXRlRUF0dHJpYnV0ZShkZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlRUNsYXNzLCBERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fRElTRUFTRV9ERUFUSFMxKTsKKwkJY3JlYXRlRUF0dHJpYnV0ZShkZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlRUNsYXNzLCBERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fRElTRUFTRV9ERUFUSFMyKTsKKwkJY3JlYXRlRUF0dHJpYnV0ZShkZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlRUNsYXNzLCBERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fRElTRUFTRV9ERUFUSFMzKTsKKwkJY3JlYXRlRUF0dHJpYnV0ZShkZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlRUNsYXNzLCBERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fRElTRUFTRV9ERUFUSFM0KTsKKwkJY3JlYXRlRUF0dHJpYnV0ZShkZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlRUNsYXNzLCBERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fRElTRUFTRV9ERUFUSFMxMik7CisJCWNyZWF0ZUVBdHRyaWJ1dGUoZGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZUVDbGFzcywgREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0RJU0VBU0VfREVBVEhTMjEpOworCQljcmVhdGVFQXR0cmlidXRlKGRlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVFQ2xhc3MsIERFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19ESVNFQVNFX0RFQVRIUzMxKTsKKwkJY3JlYXRlRUF0dHJpYnV0ZShkZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlRUNsYXNzLCBERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fRElTRUFTRV9ERUFUSFM0MSk7CisJCWNyZWF0ZUVBdHRyaWJ1dGUoZGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZUVDbGFzcywgREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0RJU0VBU0VfREVBVEhTMTMpOworCQljcmVhdGVFQXR0cmlidXRlKGRlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVFQ2xhc3MsIERFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19ESVNFQVNFX0RFQVRIUzIzKTsKKwkJY3JlYXRlRUF0dHJpYnV0ZShkZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlRUNsYXNzLCBERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fRElTRUFTRV9ERUFUSFMzMik7CisJCWNyZWF0ZUVBdHRyaWJ1dGUoZGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZUVDbGFzcywgREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0RJU0VBU0VfREVBVEhTNDIpOworCQljcmVhdGVFQXR0cmlidXRlKGRlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVFQ2xhc3MsIERFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19ESVNFQVNFX0RFQVRIUzE0KTsKKwkJY3JlYXRlRUF0dHJpYnV0ZShkZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlRUNsYXNzLCBERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fRElTRUFTRV9ERUFUSFMyNCk7CisJCWNyZWF0ZUVBdHRyaWJ1dGUoZGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZUVDbGFzcywgREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0RJU0VBU0VfREVBVEhTMzQpOworCQljcmVhdGVFQXR0cmlidXRlKGRlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVFQ2xhc3MsIERFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19ESVNFQVNFX0RFQVRIUzQzKTsKKworCQlkZW5ndWVNb2RlbFZlY3RvckxhYmVsRUNsYXNzID0gY3JlYXRlRUNsYXNzKERFTkdVRV9NT0RFTF9WRUNUT1JfTEFCRUwpOworCisJCWRlbmd1ZU1vZGVsVmVjdG9yTGFiZWxWYWx1ZUVDbGFzcyA9IGNyZWF0ZUVDbGFzcyhERU5HVUVfTU9ERUxfVkVDVE9SX0xBQkVMX1ZBTFVFKTsKKwkJY3JlYXRlRUF0dHJpYnV0ZShkZW5ndWVNb2RlbFZlY3RvckxhYmVsVmFsdWVFQ2xhc3MsIERFTkdVRV9NT0RFTF9WRUNUT1JfTEFCRUxfVkFMVUVfX0UxKTsKKwkJY3JlYXRlRUF0dHJpYnV0ZShkZW5ndWVNb2RlbFZlY3RvckxhYmVsVmFsdWVFQ2xhc3MsIERFTkdVRV9NT0RFTF9WRUNUT1JfTEFCRUxfVkFMVUVfX0UyKTsKKwkJY3JlYXRlRUF0dHJpYnV0ZShkZW5ndWVNb2RlbFZlY3RvckxhYmVsVmFsdWVFQ2xhc3MsIERFTkdVRV9NT0RFTF9WRUNUT1JfTEFCRUxfVkFMVUVfX0UzKTsKKwkJY3JlYXRlRUF0dHJpYnV0ZShkZW5ndWVNb2RlbFZlY3RvckxhYmVsVmFsdWVFQ2xhc3MsIERFTkdVRV9NT0RFTF9WRUNUT1JfTEFCRUxfVkFMVUVfX0U0KTsKKwkJY3JlYXRlRUF0dHJpYnV0ZShkZW5ndWVNb2RlbFZlY3RvckxhYmVsVmFsdWVFQ2xhc3MsIERFTkdVRV9NT0RFTF9WRUNUT1JfTEFCRUxfVkFMVUVfX0kxKTsKKwkJY3JlYXRlRUF0dHJpYnV0ZShkZW5ndWVNb2RlbFZlY3RvckxhYmVsVmFsdWVFQ2xhc3MsIERFTkdVRV9NT0RFTF9WRUNUT1JfTEFCRUxfVkFMVUVfX0kyKTsKKwkJY3JlYXRlRUF0dHJpYnV0ZShkZW5ndWVNb2RlbFZlY3RvckxhYmVsVmFsdWVFQ2xhc3MsIERFTkdVRV9NT0RFTF9WRUNUT1JfTEFCRUxfVkFMVUVfX0kzKTsKKwkJY3JlYXRlRUF0dHJpYnV0ZShkZW5ndWVNb2RlbFZlY3RvckxhYmVsVmFsdWVFQ2xhc3MsIERFTkdVRV9NT0RFTF9WRUNUT1JfTEFCRUxfVkFMVUVfX0k0KTsKKwkJY3JlYXRlRUF0dHJpYnV0ZShkZW5ndWVNb2RlbFZlY3RvckxhYmVsVmFsdWVFQ2xhc3MsIERFTkdVRV9NT0RFTF9WRUNUT1JfTEFCRUxfVkFMVUVfX0lOQ0lERU5DRTEpOworCQljcmVhdGVFQXR0cmlidXRlKGRlbmd1ZU1vZGVsVmVjdG9yTGFiZWxWYWx1ZUVDbGFzcywgREVOR1VFX01PREVMX1ZFQ1RPUl9MQUJFTF9WQUxVRV9fSU5DSURFTkNFMik7CisJCWNyZWF0ZUVBdHRyaWJ1dGUoZGVuZ3VlTW9kZWxWZWN0b3JMYWJlbFZhbHVlRUNsYXNzLCBERU5HVUVfTU9ERUxfVkVDVE9SX0xBQkVMX1ZBTFVFX19JTkNJREVOQ0UzKTsKKwkJY3JlYXRlRUF0dHJpYnV0ZShkZW5ndWVNb2RlbFZlY3RvckxhYmVsVmFsdWVFQ2xhc3MsIERFTkdVRV9NT0RFTF9WRUNUT1JfTEFCRUxfVkFMVUVfX0lOQ0lERU5DRTQpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByaXZhdGUgYm9vbGVhbiBpc0luaXRpYWxpemVkID0gZmFsc2U7CisKKwkvKioKKwkgKiBDb21wbGV0ZSB0aGUgaW5pdGlhbGl6YXRpb24gb2YgdGhlIHBhY2thZ2UgYW5kIGl0cyBtZXRhLW1vZGVsLiAgVGhpcworCSAqIG1ldGhvZCBpcyBndWFyZGVkIHRvIGhhdmUgbm8gYWZmZWN0IG9uIGFueSBpbnZvY2F0aW9uIGJ1dCBpdHMgZmlyc3QuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgaW5pdGlhbGl6ZVBhY2thZ2VDb250ZW50cygpIHsKKwkJaWYgKGlzSW5pdGlhbGl6ZWQpIHJldHVybjsKKwkJaXNJbml0aWFsaXplZCA9IHRydWU7CisKKwkJLy8gSW5pdGlhbGl6ZSBwYWNrYWdlCisJCXNldE5hbWUoZU5BTUUpOworCQlzZXROc1ByZWZpeChlTlNfUFJFRklYKTsKKwkJc2V0TnNVUkkoZU5TX1VSSSk7CisKKwkJLy8gT2J0YWluIG90aGVyIGRlcGVuZGVudCBwYWNrYWdlcworCQlFY29yZVBhY2thZ2UgdGhlRWNvcmVQYWNrYWdlID0gKEVjb3JlUGFja2FnZSlFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShFY29yZVBhY2thZ2UuZU5TX1VSSSk7CisJCVN0YW5kYXJkUGFja2FnZSB0aGVTdGFuZGFyZFBhY2thZ2UgPSAoU3RhbmRhcmRQYWNrYWdlKUVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVQYWNrYWdlKFN0YW5kYXJkUGFja2FnZS5lTlNfVVJJKTsKKworCQkvLyBDcmVhdGUgdHlwZSBwYXJhbWV0ZXJzCisKKwkJLy8gU2V0IGJvdW5kcyBmb3IgdHlwZSBwYXJhbWV0ZXJzCisKKwkJLy8gQWRkIHN1cGVydHlwZXMgdG8gY2xhc3NlcworCQltYWNkb25hbGRSb3NzRGlzZWFzZU1vZGVsRUNsYXNzLmdldEVTdXBlclR5cGVzKCkuYWRkKHRoaXMuZ2V0VmVjdG9yRGlzZWFzZU1vZGVsKCkpOworCQl2ZWN0b3JEaXNlYXNlTW9kZWxFQ2xhc3MuZ2V0RVN1cGVyVHlwZXMoKS5hZGQodGhlU3RhbmRhcmRQYWNrYWdlLmdldFN0YW5kYXJkRGlzZWFzZU1vZGVsKCkpOworCQlkZW5ndWVNb2RlbEVDbGFzcy5nZXRFU3VwZXJUeXBlcygpLmFkZCh0aGlzLmdldFZlY3RvckRpc2Vhc2VNb2RlbCgpKTsKKwkJc2ltcGxlRGVuZ3VlTW9kZWxFQ2xhc3MuZ2V0RVN1cGVyVHlwZXMoKS5hZGQodGhpcy5nZXRWZWN0b3JEaXNlYXNlTW9kZWwoKSk7CisJCWRlbmd1ZU1vZGVsSG9zdExhYmVsRUNsYXNzLmdldEVTdXBlclR5cGVzKCkuYWRkKHRoZVN0YW5kYXJkUGFja2FnZS5nZXRTdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsKCkpOworCQlkZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlRUNsYXNzLmdldEVTdXBlclR5cGVzKCkuYWRkKHRoZVN0YW5kYXJkUGFja2FnZS5nZXRTdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsVmFsdWUoKSk7CisJCWRlbmd1ZU1vZGVsVmVjdG9yTGFiZWxFQ2xhc3MuZ2V0RVN1cGVyVHlwZXMoKS5hZGQodGhlU3RhbmRhcmRQYWNrYWdlLmdldFN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWwoKSk7CisJCWRlbmd1ZU1vZGVsVmVjdG9yTGFiZWxWYWx1ZUVDbGFzcy5nZXRFU3VwZXJUeXBlcygpLmFkZCh0aGVTdGFuZGFyZFBhY2thZ2UuZ2V0U3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbFZhbHVlKCkpOworCisJCS8vIEluaXRpYWxpemUgY2xhc3NlcyBhbmQgZmVhdHVyZXM7IGFkZCBvcGVyYXRpb25zIGFuZCBwYXJhbWV0ZXJzCisJCWluaXRFQ2xhc3MobWFjZG9uYWxkUm9zc0Rpc2Vhc2VNb2RlbEVDbGFzcywgTWFjZG9uYWxkUm9zc0Rpc2Vhc2VNb2RlbC5jbGFzcywgIk1hY2RvbmFsZFJvc3NEaXNlYXNlTW9kZWwiLCAhSVNfQUJTVFJBQ1QsICFJU19JTlRFUkZBQ0UsIElTX0dFTkVSQVRFRF9JTlNUQU5DRV9DTEFTUyk7CisJCWluaXRFQXR0cmlidXRlKGdldE1hY2RvbmFsZFJvc3NEaXNlYXNlTW9kZWxfQml0aW5nUmF0ZSgpLCB0aGVFY29yZVBhY2thZ2UuZ2V0RURvdWJsZSgpLCAiYml0aW5nUmF0ZSIsICIwLjUiLCAwLCAxLCBNYWNkb25hbGRSb3NzRGlzZWFzZU1vZGVsLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOworCQlpbml0RUF0dHJpYnV0ZShnZXRNYWNkb25hbGRSb3NzRGlzZWFzZU1vZGVsX0luZmVjdGlvdXNCaXRpbmdQcm9wb3J0aW9uSHVtYW4oKSwgdGhlRWNvcmVQYWNrYWdlLmdldEVEb3VibGUoKSwgImluZmVjdGlvdXNCaXRpbmdQcm9wb3J0aW9uSHVtYW4iLCAiMC41IiwgMCwgMSwgTWFjZG9uYWxkUm9zc0Rpc2Vhc2VNb2RlbC5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsKKwkJaW5pdEVBdHRyaWJ1dGUoZ2V0TWFjZG9uYWxkUm9zc0Rpc2Vhc2VNb2RlbF9JbmZlY3Rpb3VzQml0aW5nUHJvcG9ydGlvblZlY3RvcigpLCB0aGVFY29yZVBhY2thZ2UuZ2V0RURvdWJsZSgpLCAiaW5mZWN0aW91c0JpdGluZ1Byb3BvcnRpb25WZWN0b3IiLCAiMS4wIiwgMCwgMSwgTWFjZG9uYWxkUm9zc0Rpc2Vhc2VNb2RlbC5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsKKwkJaW5pdEVBdHRyaWJ1dGUoZ2V0TWFjZG9uYWxkUm9zc0Rpc2Vhc2VNb2RlbF9SZWNvdmVyeVJhdGUoKSwgdGhlRWNvcmVQYWNrYWdlLmdldEVEb3VibGUoKSwgInJlY292ZXJ5UmF0ZSIsICIzLjMzRS0zIiwgMCwgMSwgTWFjZG9uYWxkUm9zc0Rpc2Vhc2VNb2RlbC5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsKKwkJaW5pdEVBdHRyaWJ1dGUoZ2V0TWFjZG9uYWxkUm9zc0Rpc2Vhc2VNb2RlbF9JbmN1YmF0aW9uUmF0ZSgpLCB0aGVFY29yZVBhY2thZ2UuZ2V0RURvdWJsZSgpLCAiaW5jdWJhdGlvblJhdGUiLCAiMC4wNjI1IiwgMCwgMSwgTWFjZG9uYWxkUm9zc0Rpc2Vhc2VNb2RlbC5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsKKwkJaW5pdEVBdHRyaWJ1dGUoZ2V0TWFjZG9uYWxkUm9zc0Rpc2Vhc2VNb2RlbF9WZWN0b3JJbmN1YmF0aW9uUmF0ZSgpLCB0aGVFY29yZVBhY2thZ2UuZ2V0RURvdWJsZSgpLCAidmVjdG9ySW5jdWJhdGlvblJhdGUiLCAiMC4xIiwgMCwgMSwgTWFjZG9uYWxkUm9zc0Rpc2Vhc2VNb2RlbC5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsKKwkJaW5pdEVBdHRyaWJ1dGUoZ2V0TWFjZG9uYWxkUm9zc0Rpc2Vhc2VNb2RlbF9JbW11bml0eUxvc3NSYXRlKCksIHRoZUVjb3JlUGFja2FnZS5nZXRFRG91YmxlKCksICJpbW11bml0eUxvc3NSYXRlIiwgIjAuMDIiLCAwLCAxLCBNYWNkb25hbGRSb3NzRGlzZWFzZU1vZGVsLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOworCisJCWluaXRFQ2xhc3ModmVjdG9yRGlzZWFzZU1vZGVsRUNsYXNzLCBWZWN0b3JEaXNlYXNlTW9kZWwuY2xhc3MsICJWZWN0b3JEaXNlYXNlTW9kZWwiLCBJU19BQlNUUkFDVCwgIUlTX0lOVEVSRkFDRSwgSVNfR0VORVJBVEVEX0lOU1RBTkNFX0NMQVNTKTsKKwkJaW5pdEVBdHRyaWJ1dGUoZ2V0VmVjdG9yRGlzZWFzZU1vZGVsX1ZlY3RvclBvcHVsYXRpb25JZGVudGlmaWVyKCksIHRoZUVjb3JlUGFja2FnZS5nZXRFU3RyaW5nKCksICJ2ZWN0b3JQb3B1bGF0aW9uSWRlbnRpZmllciIsICJhbm9waGVsZXMiLCAwLCAxLCBWZWN0b3JEaXNlYXNlTW9kZWwuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7CisKKwkJaW5pdEVDbGFzcyhkZW5ndWVNb2RlbEVDbGFzcywgRGVuZ3VlTW9kZWwuY2xhc3MsICJEZW5ndWVNb2RlbCIsICFJU19BQlNUUkFDVCwgIUlTX0lOVEVSRkFDRSwgSVNfR0VORVJBVEVEX0lOU1RBTkNFX0NMQVNTKTsKKwkJaW5pdEVBdHRyaWJ1dGUoZ2V0RGVuZ3VlTW9kZWxfQml0aW5nUmF0ZVNWKCksIHRoZUVjb3JlUGFja2FnZS5nZXRFRG91YmxlKCksICJiaXRpbmdSYXRlU1YiLCAiMSIsIDAsIDEsIERlbmd1ZU1vZGVsLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOworCQlpbml0RUF0dHJpYnV0ZShnZXREZW5ndWVNb2RlbF9CaXRpbmdSYXRlSVYoKSwgdGhlRWNvcmVQYWNrYWdlLmdldEVEb3VibGUoKSwgImJpdGluZ1JhdGVJViIsICIxIiwgMCwgMSwgRGVuZ3VlTW9kZWwuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7CisJCWluaXRFQXR0cmlidXRlKGdldERlbmd1ZU1vZGVsX0hvc3RJbmZlY3Rpdml0eTEoKSwgdGhlRWNvcmVQYWNrYWdlLmdldEVEb3VibGUoKSwgImhvc3RJbmZlY3Rpdml0eTEiLCAiMC41IiwgMCwgMSwgRGVuZ3VlTW9kZWwuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7CisJCWluaXRFQXR0cmlidXRlKGdldERlbmd1ZU1vZGVsX0hvc3RJbmZlY3Rpdml0eTIoKSwgdGhlRWNvcmVQYWNrYWdlLmdldEVEb3VibGUoKSwgImhvc3RJbmZlY3Rpdml0eTIiLCAiMC41IiwgMCwgMSwgRGVuZ3VlTW9kZWwuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7CisJCWluaXRFQXR0cmlidXRlKGdldERlbmd1ZU1vZGVsX0hvc3RJbmZlY3Rpdml0eTMoKSwgdGhlRWNvcmVQYWNrYWdlLmdldEVEb3VibGUoKSwgImhvc3RJbmZlY3Rpdml0eTMiLCAiMC41IiwgMCwgMSwgRGVuZ3VlTW9kZWwuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7CisJCWluaXRFQXR0cmlidXRlKGdldERlbmd1ZU1vZGVsX0hvc3RJbmZlY3Rpdml0eTQoKSwgdGhlRWNvcmVQYWNrYWdlLmdldEVEb3VibGUoKSwgImhvc3RJbmZlY3Rpdml0eTQiLCAiMC41IiwgMCwgMSwgRGVuZ3VlTW9kZWwuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7CisJCWluaXRFQXR0cmlidXRlKGdldERlbmd1ZU1vZGVsX0hvc3RQcmltYXJ5SW5jdWJhdGlvblJhdGUxKCksIHRoZUVjb3JlUGFja2FnZS5nZXRFRG91YmxlKCksICJob3N0UHJpbWFyeUluY3ViYXRpb25SYXRlMSIsICIwLjIiLCAwLCAxLCBEZW5ndWVNb2RlbC5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsKKwkJaW5pdEVBdHRyaWJ1dGUoZ2V0RGVuZ3VlTW9kZWxfSG9zdFByaW1hcnlJbmN1YmF0aW9uUmF0ZTIoKSwgdGhlRWNvcmVQYWNrYWdlLmdldEVEb3VibGUoKSwgImhvc3RQcmltYXJ5SW5jdWJhdGlvblJhdGUyIiwgIjAuMiIsIDAsIDEsIERlbmd1ZU1vZGVsLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOworCQlpbml0RUF0dHJpYnV0ZShnZXREZW5ndWVNb2RlbF9Ib3N0UHJpbWFyeUluY3ViYXRpb25SYXRlMygpLCB0aGVFY29yZVBhY2thZ2UuZ2V0RURvdWJsZSgpLCAiaG9zdFByaW1hcnlJbmN1YmF0aW9uUmF0ZTMiLCAiMC4yIiwgMCwgMSwgRGVuZ3VlTW9kZWwuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7CisJCWluaXRFQXR0cmlidXRlKGdldERlbmd1ZU1vZGVsX0hvc3RQcmltYXJ5SW5jdWJhdGlvblJhdGU0KCksIHRoZUVjb3JlUGFja2FnZS5nZXRFRG91YmxlKCksICJob3N0UHJpbWFyeUluY3ViYXRpb25SYXRlNCIsICIwLjIiLCAwLCAxLCBEZW5ndWVNb2RlbC5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsKKwkJaW5pdEVBdHRyaWJ1dGUoZ2V0RGVuZ3VlTW9kZWxfSG9zdFByaW1hcnlSZWNvdmVyeVJhdGUxKCksIHRoZUVjb3JlUGFja2FnZS5nZXRFRG91YmxlKCksICJob3N0UHJpbWFyeVJlY292ZXJ5UmF0ZTEiLCAiMC4xNCIsIDAsIDEsIERlbmd1ZU1vZGVsLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOworCQlpbml0RUF0dHJpYnV0ZShnZXREZW5ndWVNb2RlbF9Ib3N0UHJpbWFyeVJlY292ZXJ5UmF0ZTIoKSwgdGhlRWNvcmVQYWNrYWdlLmdldEVEb3VibGUoKSwgImhvc3RQcmltYXJ5UmVjb3ZlcnlSYXRlMiIsICIwLjE0IiwgMCwgMSwgRGVuZ3VlTW9kZWwuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7CisJCWluaXRFQXR0cmlidXRlKGdldERlbmd1ZU1vZGVsX0hvc3RQcmltYXJ5UmVjb3ZlcnlSYXRlMygpLCB0aGVFY29yZVBhY2thZ2UuZ2V0RURvdWJsZSgpLCAiaG9zdFByaW1hcnlSZWNvdmVyeVJhdGUzIiwgIjAuMTQiLCAwLCAxLCBEZW5ndWVNb2RlbC5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsKKwkJaW5pdEVBdHRyaWJ1dGUoZ2V0RGVuZ3VlTW9kZWxfSG9zdFByaW1hcnlSZWNvdmVyeVJhdGU0KCksIHRoZUVjb3JlUGFja2FnZS5nZXRFRG91YmxlKCksICJob3N0UHJpbWFyeVJlY292ZXJ5UmF0ZTQiLCAiMC4xNCIsIDAsIDEsIERlbmd1ZU1vZGVsLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOworCQlpbml0RUF0dHJpYnV0ZShnZXREZW5ndWVNb2RlbF9Ib3N0UHJpbWFyeUltbXVuaXR5TG9zc1JhdGUxKCksIHRoZUVjb3JlUGFja2FnZS5nZXRFRG91YmxlKCksICJob3N0UHJpbWFyeUltbXVuaXR5TG9zc1JhdGUxIiwgIjAuMDI0IiwgMCwgMSwgRGVuZ3VlTW9kZWwuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7CisJCWluaXRFQXR0cmlidXRlKGdldERlbmd1ZU1vZGVsX0hvc3RQcmltYXJ5SW1tdW5pdHlMb3NzUmF0ZTIoKSwgdGhlRWNvcmVQYWNrYWdlLmdldEVEb3VibGUoKSwgImhvc3RQcmltYXJ5SW1tdW5pdHlMb3NzUmF0ZTIiLCAiMC4wMjQiLCAwLCAxLCBEZW5ndWVNb2RlbC5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsKKwkJaW5pdEVBdHRyaWJ1dGUoZ2V0RGVuZ3VlTW9kZWxfSG9zdFByaW1hcnlJbW11bml0eUxvc3NSYXRlMygpLCB0aGVFY29yZVBhY2thZ2UuZ2V0RURvdWJsZSgpLCAiaG9zdFByaW1hcnlJbW11bml0eUxvc3NSYXRlMyIsICIwLjAyNCIsIDAsIDEsIERlbmd1ZU1vZGVsLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOworCQlpbml0RUF0dHJpYnV0ZShnZXREZW5ndWVNb2RlbF9Ib3N0UHJpbWFyeUltbXVuaXR5TG9zc1JhdGU0KCksIHRoZUVjb3JlUGFja2FnZS5nZXRFRG91YmxlKCksICJob3N0UHJpbWFyeUltbXVuaXR5TG9zc1JhdGU0IiwgIjAuMDI0IiwgMCwgMSwgRGVuZ3VlTW9kZWwuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7CisJCWluaXRFQXR0cmlidXRlKGdldERlbmd1ZU1vZGVsX0hvc3RQcmltYXJ5RGlzZWFzZURlYXRoUmF0ZTEoKSwgdGhlRWNvcmVQYWNrYWdlLmdldEVEb3VibGUoKSwgImhvc3RQcmltYXJ5RGlzZWFzZURlYXRoUmF0ZTEiLCAiMC4wMDAwMDAxIiwgMCwgMSwgRGVuZ3VlTW9kZWwuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7CisJCWluaXRFQXR0cmlidXRlKGdldERlbmd1ZU1vZGVsX0hvc3RQcmltYXJ5RGlzZWFzZURlYXRoUmF0ZTIoKSwgdGhlRWNvcmVQYWNrYWdlLmdldEVEb3VibGUoKSwgImhvc3RQcmltYXJ5RGlzZWFzZURlYXRoUmF0ZTIiLCAiMC4wMDAwMDAxIiwgMCwgMSwgRGVuZ3VlTW9kZWwuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7CisJCWluaXRFQXR0cmlidXRlKGdldERlbmd1ZU1vZGVsX0hvc3RQcmltYXJ5RGlzZWFzZURlYXRoUmF0ZTMoKSwgdGhlRWNvcmVQYWNrYWdlLmdldEVEb3VibGUoKSwgImhvc3RQcmltYXJ5RGlzZWFzZURlYXRoUmF0ZTMiLCAiMC4wMDAwMDAxIiwgMCwgMSwgRGVuZ3VlTW9kZWwuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7CisJCWluaXRFQXR0cmlidXRlKGdldERlbmd1ZU1vZGVsX0hvc3RQcmltYXJ5RGlzZWFzZURlYXRoUmF0ZTQoKSwgdGhlRWNvcmVQYWNrYWdlLmdldEVEb3VibGUoKSwgImhvc3RQcmltYXJ5RGlzZWFzZURlYXRoUmF0ZTQiLCAiMC4wMDAwMDAxIiwgMCwgMSwgRGVuZ3VlTW9kZWwuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7CisJCWluaXRFQXR0cmlidXRlKGdldERlbmd1ZU1vZGVsX0hvc3RBREUxMigpLCB0aGVFY29yZVBhY2thZ2UuZ2V0RURvdWJsZSgpLCAiaG9zdEFERTEyIiwgIjEuOCIsIDAsIDEsIERlbmd1ZU1vZGVsLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOworCQlpbml0RUF0dHJpYnV0ZShnZXREZW5ndWVNb2RlbF9Ib3N0QURFMTMoKSwgdGhlRWNvcmVQYWNrYWdlLmdldEVEb3VibGUoKSwgImhvc3RBREUxMyIsICIxLjgiLCAwLCAxLCBEZW5ndWVNb2RlbC5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsKKwkJaW5pdEVBdHRyaWJ1dGUoZ2V0RGVuZ3VlTW9kZWxfSG9zdEFERTE0KCksIHRoZUVjb3JlUGFja2FnZS5nZXRFRG91YmxlKCksICJob3N0QURFMTQiLCAiMS44IiwgMCwgMSwgRGVuZ3VlTW9kZWwuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7CisJCWluaXRFQXR0cmlidXRlKGdldERlbmd1ZU1vZGVsX0hvc3RBREUyMSgpLCB0aGVFY29yZVBhY2thZ2UuZ2V0RURvdWJsZSgpLCAiaG9zdEFERTIxIiwgIjEuOCIsIDAsIDEsIERlbmd1ZU1vZGVsLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOworCQlpbml0RUF0dHJpYnV0ZShnZXREZW5ndWVNb2RlbF9Ib3N0QURFMjMoKSwgdGhlRWNvcmVQYWNrYWdlLmdldEVEb3VibGUoKSwgImhvc3RBREUyMyIsICIxLjgiLCAwLCAxLCBEZW5ndWVNb2RlbC5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsKKwkJaW5pdEVBdHRyaWJ1dGUoZ2V0RGVuZ3VlTW9kZWxfSG9zdEFERTI0KCksIHRoZUVjb3JlUGFja2FnZS5nZXRFRG91YmxlKCksICJob3N0QURFMjQiLCAiMS44IiwgMCwgMSwgRGVuZ3VlTW9kZWwuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7CisJCWluaXRFQXR0cmlidXRlKGdldERlbmd1ZU1vZGVsX0hvc3RBREUzMSgpLCB0aGVFY29yZVBhY2thZ2UuZ2V0RURvdWJsZSgpLCAiaG9zdEFERTMxIiwgIjEuOCIsIDAsIDEsIERlbmd1ZU1vZGVsLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOworCQlpbml0RUF0dHJpYnV0ZShnZXREZW5ndWVNb2RlbF9Ib3N0QURFMzIoKSwgdGhlRWNvcmVQYWNrYWdlLmdldEVEb3VibGUoKSwgImhvc3RBREUzMiIsICIxLjgiLCAwLCAxLCBEZW5ndWVNb2RlbC5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsKKwkJaW5pdEVBdHRyaWJ1dGUoZ2V0RGVuZ3VlTW9kZWxfSG9zdEFERTM0KCksIHRoZUVjb3JlUGFja2FnZS5nZXRFRG91YmxlKCksICJob3N0QURFMzQiLCAiMS44IiwgMCwgMSwgRGVuZ3VlTW9kZWwuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7CisJCWluaXRFQXR0cmlidXRlKGdldERlbmd1ZU1vZGVsX0hvc3RBREU0MSgpLCB0aGVFY29yZVBhY2thZ2UuZ2V0RURvdWJsZSgpLCAiaG9zdEFERTQxIiwgIjEuOCIsIDAsIDEsIERlbmd1ZU1vZGVsLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOworCQlpbml0RUF0dHJpYnV0ZShnZXREZW5ndWVNb2RlbF9Ib3N0QURFNDIoKSwgdGhlRWNvcmVQYWNrYWdlLmdldEVEb3VibGUoKSwgImhvc3RBREU0MiIsICIxLjgiLCAwLCAxLCBEZW5ndWVNb2RlbC5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsKKwkJaW5pdEVBdHRyaWJ1dGUoZ2V0RGVuZ3VlTW9kZWxfSG9zdEFERTQzKCksIHRoZUVjb3JlUGFja2FnZS5nZXRFRG91YmxlKCksICJob3N0QURFNDMiLCAiMS44IiwgMCwgMSwgRGVuZ3VlTW9kZWwuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7CisJCWluaXRFQXR0cmlidXRlKGdldERlbmd1ZU1vZGVsX0hvc3RTZWNvbmRhcnlEaXNlYXNlRGVhdGhSYXRlMTIoKSwgdGhlRWNvcmVQYWNrYWdlLmdldEVEb3VibGUoKSwgImhvc3RTZWNvbmRhcnlEaXNlYXNlRGVhdGhSYXRlMTIiLCAiMC4wMDEyMyIsIDAsIDEsIERlbmd1ZU1vZGVsLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOworCQlpbml0RUF0dHJpYnV0ZShnZXREZW5ndWVNb2RlbF9Ib3N0U2Vjb25kYXJ5RGlzZWFzZURlYXRoUmF0ZTEzKCksIHRoZUVjb3JlUGFja2FnZS5nZXRFRG91YmxlKCksICJob3N0U2Vjb25kYXJ5RGlzZWFzZURlYXRoUmF0ZTEzIiwgIjAuMDAxMjMiLCAwLCAxLCBEZW5ndWVNb2RlbC5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsKKwkJaW5pdEVBdHRyaWJ1dGUoZ2V0RGVuZ3VlTW9kZWxfSG9zdFNlY29uZGFyeURpc2Vhc2VEZWF0aFJhdGUxNCgpLCB0aGVFY29yZVBhY2thZ2UuZ2V0RURvdWJsZSgpLCAiaG9zdFNlY29uZGFyeURpc2Vhc2VEZWF0aFJhdGUxNCIsICIwLjAwMTIzIiwgMCwgMSwgRGVuZ3VlTW9kZWwuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7CisJCWluaXRFQXR0cmlidXRlKGdldERlbmd1ZU1vZGVsX0hvc3RTZWNvbmRhcnlEaXNlYXNlRGVhdGhSYXRlMjEoKSwgdGhlRWNvcmVQYWNrYWdlLmdldEVEb3VibGUoKSwgImhvc3RTZWNvbmRhcnlEaXNlYXNlRGVhdGhSYXRlMjEiLCAiMC4wMDEyMyIsIDAsIDEsIERlbmd1ZU1vZGVsLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOworCQlpbml0RUF0dHJpYnV0ZShnZXREZW5ndWVNb2RlbF9Ib3N0U2Vjb25kYXJ5RGlzZWFzZURlYXRoUmF0ZTIzKCksIHRoZUVjb3JlUGFja2FnZS5nZXRFRG91YmxlKCksICJob3N0U2Vjb25kYXJ5RGlzZWFzZURlYXRoUmF0ZTIzIiwgIjAuMDAxMjMiLCAwLCAxLCBEZW5ndWVNb2RlbC5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsKKwkJaW5pdEVBdHRyaWJ1dGUoZ2V0RGVuZ3VlTW9kZWxfSG9zdFNlY29uZGFyeURpc2Vhc2VEZWF0aFJhdGUyNCgpLCB0aGVFY29yZVBhY2thZ2UuZ2V0RURvdWJsZSgpLCAiaG9zdFNlY29uZGFyeURpc2Vhc2VEZWF0aFJhdGUyNCIsICIwLjAwMTIzIiwgMCwgMSwgRGVuZ3VlTW9kZWwuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7CisJCWluaXRFQXR0cmlidXRlKGdldERlbmd1ZU1vZGVsX0hvc3RTZWNvbmRhcnlEaXNlYXNlRGVhdGhSYXRlMzEoKSwgdGhlRWNvcmVQYWNrYWdlLmdldEVEb3VibGUoKSwgImhvc3RTZWNvbmRhcnlEaXNlYXNlRGVhdGhSYXRlMzEiLCAiMC4wMDEyMyIsIDAsIDEsIERlbmd1ZU1vZGVsLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOworCQlpbml0RUF0dHJpYnV0ZShnZXREZW5ndWVNb2RlbF9Ib3N0U2Vjb25kYXJ5RGlzZWFzZURlYXRoUmF0ZTMyKCksIHRoZUVjb3JlUGFja2FnZS5nZXRFRG91YmxlKCksICJob3N0U2Vjb25kYXJ5RGlzZWFzZURlYXRoUmF0ZTMyIiwgIjAuMDAxMjMiLCAwLCAxLCBEZW5ndWVNb2RlbC5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsKKwkJaW5pdEVBdHRyaWJ1dGUoZ2V0RGVuZ3VlTW9kZWxfSG9zdFNlY29uZGFyeURpc2Vhc2VEZWF0aFJhdGUzNCgpLCB0aGVFY29yZVBhY2thZ2UuZ2V0RURvdWJsZSgpLCAiaG9zdFNlY29uZGFyeURpc2Vhc2VEZWF0aFJhdGUzNCIsICIwLjAwMTIzIiwgMCwgMSwgRGVuZ3VlTW9kZWwuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7CisJCWluaXRFQXR0cmlidXRlKGdldERlbmd1ZU1vZGVsX0hvc3RTZWNvbmRhcnlEaXNlYXNlRGVhdGhSYXRlNDEoKSwgdGhlRWNvcmVQYWNrYWdlLmdldEVEb3VibGUoKSwgImhvc3RTZWNvbmRhcnlEaXNlYXNlRGVhdGhSYXRlNDEiLCAiMC4wMDEyMyIsIDAsIDEsIERlbmd1ZU1vZGVsLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOworCQlpbml0RUF0dHJpYnV0ZShnZXREZW5ndWVNb2RlbF9Ib3N0U2Vjb25kYXJ5RGlzZWFzZURlYXRoUmF0ZTQyKCksIHRoZUVjb3JlUGFja2FnZS5nZXRFRG91YmxlKCksICJob3N0U2Vjb25kYXJ5RGlzZWFzZURlYXRoUmF0ZTQyIiwgIjAuMDAxMjMiLCAwLCAxLCBEZW5ndWVNb2RlbC5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsKKwkJaW5pdEVBdHRyaWJ1dGUoZ2V0RGVuZ3VlTW9kZWxfSG9zdFNlY29uZGFyeURpc2Vhc2VEZWF0aFJhdGU0MygpLCB0aGVFY29yZVBhY2thZ2UuZ2V0RURvdWJsZSgpLCAiaG9zdFNlY29uZGFyeURpc2Vhc2VEZWF0aFJhdGU0MyIsICIwLjAwMTIzIiwgMCwgMSwgRGVuZ3VlTW9kZWwuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7CisJCWluaXRFQXR0cmlidXRlKGdldERlbmd1ZU1vZGVsX0hvc3RTZWNvbmRhcnlSZWNvdmVyeVJhdGUxMigpLCB0aGVFY29yZVBhY2thZ2UuZ2V0RURvdWJsZSgpLCAiaG9zdFNlY29uZGFyeVJlY292ZXJ5UmF0ZTEyIiwgIjAuMSIsIDAsIDEsIERlbmd1ZU1vZGVsLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOworCQlpbml0RUF0dHJpYnV0ZShnZXREZW5ndWVNb2RlbF9Ib3N0U2Vjb25kYXJ5UmVjb3ZlcnlSYXRlMTMoKSwgdGhlRWNvcmVQYWNrYWdlLmdldEVEb3VibGUoKSwgImhvc3RTZWNvbmRhcnlSZWNvdmVyeVJhdGUxMyIsICIwLjEiLCAwLCAxLCBEZW5ndWVNb2RlbC5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsKKwkJaW5pdEVBdHRyaWJ1dGUoZ2V0RGVuZ3VlTW9kZWxfSG9zdFNlY29uZGFyeVJlY292ZXJ5UmF0ZTE0KCksIHRoZUVjb3JlUGFja2FnZS5nZXRFRG91YmxlKCksICJob3N0U2Vjb25kYXJ5UmVjb3ZlcnlSYXRlMTQiLCAiMC4xIiwgMCwgMSwgRGVuZ3VlTW9kZWwuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7CisJCWluaXRFQXR0cmlidXRlKGdldERlbmd1ZU1vZGVsX0hvc3RTZWNvbmRhcnlSZWNvdmVyeVJhdGUyMSgpLCB0aGVFY29yZVBhY2thZ2UuZ2V0RURvdWJsZSgpLCAiaG9zdFNlY29uZGFyeVJlY292ZXJ5UmF0ZTIxIiwgIjAuMSIsIDAsIDEsIERlbmd1ZU1vZGVsLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOworCQlpbml0RUF0dHJpYnV0ZShnZXREZW5ndWVNb2RlbF9Ib3N0U2Vjb25kYXJ5UmVjb3ZlcnlSYXRlMjMoKSwgdGhlRWNvcmVQYWNrYWdlLmdldEVEb3VibGUoKSwgImhvc3RTZWNvbmRhcnlSZWNvdmVyeVJhdGUyMyIsICIwLjEiLCAwLCAxLCBEZW5ndWVNb2RlbC5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsKKwkJaW5pdEVBdHRyaWJ1dGUoZ2V0RGVuZ3VlTW9kZWxfSG9zdFNlY29uZGFyeVJlY292ZXJ5UmF0ZTI0KCksIHRoZUVjb3JlUGFja2FnZS5nZXRFRG91YmxlKCksICJob3N0U2Vjb25kYXJ5UmVjb3ZlcnlSYXRlMjQiLCAiMC4xIiwgMCwgMSwgRGVuZ3VlTW9kZWwuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7CisJCWluaXRFQXR0cmlidXRlKGdldERlbmd1ZU1vZGVsX0hvc3RTZWNvbmRhcnlSZWNvdmVyeVJhdGUzMSgpLCB0aGVFY29yZVBhY2thZ2UuZ2V0RURvdWJsZSgpLCAiaG9zdFNlY29uZGFyeVJlY292ZXJ5UmF0ZTMxIiwgIjAuMSIsIDAsIDEsIERlbmd1ZU1vZGVsLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOworCQlpbml0RUF0dHJpYnV0ZShnZXREZW5ndWVNb2RlbF9Ib3N0U2Vjb25kYXJ5UmVjb3ZlcnlSYXRlMzIoKSwgdGhlRWNvcmVQYWNrYWdlLmdldEVEb3VibGUoKSwgImhvc3RTZWNvbmRhcnlSZWNvdmVyeVJhdGUzMiIsICIwLjEiLCAwLCAxLCBEZW5ndWVNb2RlbC5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsKKwkJaW5pdEVBdHRyaWJ1dGUoZ2V0RGVuZ3VlTW9kZWxfSG9zdFNlY29uZGFyeVJlY292ZXJ5UmF0ZTM0KCksIHRoZUVjb3JlUGFja2FnZS5nZXRFRG91YmxlKCksICJob3N0U2Vjb25kYXJ5UmVjb3ZlcnlSYXRlMzQiLCAiMC4xIiwgMCwgMSwgRGVuZ3VlTW9kZWwuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7CisJCWluaXRFQXR0cmlidXRlKGdldERlbmd1ZU1vZGVsX0hvc3RTZWNvbmRhcnlSZWNvdmVyeVJhdGU0MSgpLCB0aGVFY29yZVBhY2thZ2UuZ2V0RURvdWJsZSgpLCAiaG9zdFNlY29uZGFyeVJlY292ZXJ5UmF0ZTQxIiwgIjAuMSIsIDAsIDEsIERlbmd1ZU1vZGVsLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOworCQlpbml0RUF0dHJpYnV0ZShnZXREZW5ndWVNb2RlbF9Ib3N0U2Vjb25kYXJ5UmVjb3ZlcnlSYXRlNDIoKSwgdGhlRWNvcmVQYWNrYWdlLmdldEVEb3VibGUoKSwgImhvc3RTZWNvbmRhcnlSZWNvdmVyeVJhdGU0MiIsICIwLjEiLCAwLCAxLCBEZW5ndWVNb2RlbC5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsKKwkJaW5pdEVBdHRyaWJ1dGUoZ2V0RGVuZ3VlTW9kZWxfSG9zdFNlY29uZGFyeVJlY292ZXJ5UmF0ZTQzKCksIHRoZUVjb3JlUGFja2FnZS5nZXRFRG91YmxlKCksICJob3N0U2Vjb25kYXJ5UmVjb3ZlcnlSYXRlNDMiLCAiMC4xIiwgMCwgMSwgRGVuZ3VlTW9kZWwuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7CisJCWluaXRFQXR0cmlidXRlKGdldERlbmd1ZU1vZGVsX0hvc3RTZWNvbmRhcnlJbmN1YmF0aW9uUmF0ZTEyKCksIHRoZUVjb3JlUGFja2FnZS5nZXRFRG91YmxlKCksICJob3N0U2Vjb25kYXJ5SW5jdWJhdGlvblJhdGUxMiIsICIwLjIiLCAwLCAxLCBEZW5ndWVNb2RlbC5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsKKwkJaW5pdEVBdHRyaWJ1dGUoZ2V0RGVuZ3VlTW9kZWxfSG9zdFNlY29uZGFyeUluY3ViYXRpb25SYXRlMTMoKSwgdGhlRWNvcmVQYWNrYWdlLmdldEVEb3VibGUoKSwgImhvc3RTZWNvbmRhcnlJbmN1YmF0aW9uUmF0ZTEzIiwgIjAuMiIsIDAsIDEsIERlbmd1ZU1vZGVsLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOworCQlpbml0RUF0dHJpYnV0ZShnZXREZW5ndWVNb2RlbF9Ib3N0U2Vjb25kYXJ5SW5jdWJhdGlvblJhdGUxNCgpLCB0aGVFY29yZVBhY2thZ2UuZ2V0RURvdWJsZSgpLCAiaG9zdFNlY29uZGFyeUluY3ViYXRpb25SYXRlMTQiLCAiMC4yIiwgMCwgMSwgRGVuZ3VlTW9kZWwuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7CisJCWluaXRFQXR0cmlidXRlKGdldERlbmd1ZU1vZGVsX0hvc3RTZWNvbmRhcnlJbmN1YmF0aW9uUmF0ZTIxKCksIHRoZUVjb3JlUGFja2FnZS5nZXRFRG91YmxlKCksICJob3N0U2Vjb25kYXJ5SW5jdWJhdGlvblJhdGUyMSIsICIwLjIiLCAwLCAxLCBEZW5ndWVNb2RlbC5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsKKwkJaW5pdEVBdHRyaWJ1dGUoZ2V0RGVuZ3VlTW9kZWxfSG9zdFNlY29uZGFyeUluY3ViYXRpb25SYXRlMjMoKSwgdGhlRWNvcmVQYWNrYWdlLmdldEVEb3VibGUoKSwgImhvc3RTZWNvbmRhcnlJbmN1YmF0aW9uUmF0ZTIzIiwgIjAuMiIsIDAsIDEsIERlbmd1ZU1vZGVsLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOworCQlpbml0RUF0dHJpYnV0ZShnZXREZW5ndWVNb2RlbF9Ib3N0U2Vjb25kYXJ5SW5jdWJhdGlvblJhdGUyNCgpLCB0aGVFY29yZVBhY2thZ2UuZ2V0RURvdWJsZSgpLCAiaG9zdFNlY29uZGFyeUluY3ViYXRpb25SYXRlMjQiLCAiMC4yIiwgMCwgMSwgRGVuZ3VlTW9kZWwuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7CisJCWluaXRFQXR0cmlidXRlKGdldERlbmd1ZU1vZGVsX0hvc3RTZWNvbmRhcnlJbmN1YmF0aW9uUmF0ZTMxKCksIHRoZUVjb3JlUGFja2FnZS5nZXRFRG91YmxlKCksICJob3N0U2Vjb25kYXJ5SW5jdWJhdGlvblJhdGUzMSIsICIwLjIiLCAwLCAxLCBEZW5ndWVNb2RlbC5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsKKwkJaW5pdEVBdHRyaWJ1dGUoZ2V0RGVuZ3VlTW9kZWxfSG9zdFNlY29uZGFyeUluY3ViYXRpb25SYXRlMzIoKSwgdGhlRWNvcmVQYWNrYWdlLmdldEVEb3VibGUoKSwgImhvc3RTZWNvbmRhcnlJbmN1YmF0aW9uUmF0ZTMyIiwgIjAuMiIsIDAsIDEsIERlbmd1ZU1vZGVsLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOworCQlpbml0RUF0dHJpYnV0ZShnZXREZW5ndWVNb2RlbF9Ib3N0U2Vjb25kYXJ5SW5jdWJhdGlvblJhdGUzNCgpLCB0aGVFY29yZVBhY2thZ2UuZ2V0RURvdWJsZSgpLCAiaG9zdFNlY29uZGFyeUluY3ViYXRpb25SYXRlMzQiLCAiMC4yIiwgMCwgMSwgRGVuZ3VlTW9kZWwuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7CisJCWluaXRFQXR0cmlidXRlKGdldERlbmd1ZU1vZGVsX0hvc3RTZWNvbmRhcnlJbmN1YmF0aW9uUmF0ZTQxKCksIHRoZUVjb3JlUGFja2FnZS5nZXRFRG91YmxlKCksICJob3N0U2Vjb25kYXJ5SW5jdWJhdGlvblJhdGU0MSIsICIwLjIiLCAwLCAxLCBEZW5ndWVNb2RlbC5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsKKwkJaW5pdEVBdHRyaWJ1dGUoZ2V0RGVuZ3VlTW9kZWxfSG9zdFNlY29uZGFyeUluY3ViYXRpb25SYXRlNDIoKSwgdGhlRWNvcmVQYWNrYWdlLmdldEVEb3VibGUoKSwgImhvc3RTZWNvbmRhcnlJbmN1YmF0aW9uUmF0ZTQyIiwgIjAuMiIsIDAsIDEsIERlbmd1ZU1vZGVsLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOworCQlpbml0RUF0dHJpYnV0ZShnZXREZW5ndWVNb2RlbF9Ib3N0U2Vjb25kYXJ5SW5jdWJhdGlvblJhdGU0MygpLCB0aGVFY29yZVBhY2thZ2UuZ2V0RURvdWJsZSgpLCAiaG9zdFNlY29uZGFyeUluY3ViYXRpb25SYXRlNDMiLCAiMC4yIiwgMCwgMSwgRGVuZ3VlTW9kZWwuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7CisJCWluaXRFQXR0cmlidXRlKGdldERlbmd1ZU1vZGVsX1ZlY3RvckluZmVjdGl2aXR5MSgpLCB0aGVFY29yZVBhY2thZ2UuZ2V0RURvdWJsZSgpLCAidmVjdG9ySW5mZWN0aXZpdHkxIiwgIjEiLCAwLCAxLCBEZW5ndWVNb2RlbC5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsKKwkJaW5pdEVBdHRyaWJ1dGUoZ2V0RGVuZ3VlTW9kZWxfVmVjdG9ySW5mZWN0aXZpdHkyKCksIHRoZUVjb3JlUGFja2FnZS5nZXRFRG91YmxlKCksICJ2ZWN0b3JJbmZlY3Rpdml0eTIiLCAiMSIsIDAsIDEsIERlbmd1ZU1vZGVsLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOworCQlpbml0RUF0dHJpYnV0ZShnZXREZW5ndWVNb2RlbF9WZWN0b3JJbmZlY3Rpdml0eTMoKSwgdGhlRWNvcmVQYWNrYWdlLmdldEVEb3VibGUoKSwgInZlY3RvckluZmVjdGl2aXR5MyIsICIxIiwgMCwgMSwgRGVuZ3VlTW9kZWwuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7CisJCWluaXRFQXR0cmlidXRlKGdldERlbmd1ZU1vZGVsX1ZlY3RvckluZmVjdGl2aXR5NCgpLCB0aGVFY29yZVBhY2thZ2UuZ2V0RURvdWJsZSgpLCAidmVjdG9ySW5mZWN0aXZpdHk0IiwgIjEiLCAwLCAxLCBEZW5ndWVNb2RlbC5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsKKwkJaW5pdEVBdHRyaWJ1dGUoZ2V0RGVuZ3VlTW9kZWxfVmVjdG9yQURFMSgpLCB0aGVFY29yZVBhY2thZ2UuZ2V0RURvdWJsZSgpLCAidmVjdG9yQURFMSIsICIxLjgiLCAwLCAxLCBEZW5ndWVNb2RlbC5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsKKwkJaW5pdEVBdHRyaWJ1dGUoZ2V0RGVuZ3VlTW9kZWxfVmVjdG9yQURFMigpLCB0aGVFY29yZVBhY2thZ2UuZ2V0RURvdWJsZSgpLCAidmVjdG9yQURFMiIsICIxLjgiLCAwLCAxLCBEZW5ndWVNb2RlbC5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsKKwkJaW5pdEVBdHRyaWJ1dGUoZ2V0RGVuZ3VlTW9kZWxfVmVjdG9yQURFMygpLCB0aGVFY29yZVBhY2thZ2UuZ2V0RURvdWJsZSgpLCAidmVjdG9yQURFMyIsICIxLjgiLCAwLCAxLCBEZW5ndWVNb2RlbC5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsKKwkJaW5pdEVBdHRyaWJ1dGUoZ2V0RGVuZ3VlTW9kZWxfVmVjdG9yQURFNCgpLCB0aGVFY29yZVBhY2thZ2UuZ2V0RURvdWJsZSgpLCAidmVjdG9yQURFNCIsICIxLjgiLCAwLCAxLCBEZW5ndWVNb2RlbC5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsKKwkJaW5pdEVBdHRyaWJ1dGUoZ2V0RGVuZ3VlTW9kZWxfVmVjdG9ySW5jdWJhdGlvblJhdGUxKCksIHRoZUVjb3JlUGFja2FnZS5nZXRFRG91YmxlKCksICJ2ZWN0b3JJbmN1YmF0aW9uUmF0ZTEiLCAiMC4xIiwgMCwgMSwgRGVuZ3VlTW9kZWwuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7CisJCWluaXRFQXR0cmlidXRlKGdldERlbmd1ZU1vZGVsX1ZlY3RvckluY3ViYXRpb25SYXRlMigpLCB0aGVFY29yZVBhY2thZ2UuZ2V0RURvdWJsZSgpLCAidmVjdG9ySW5jdWJhdGlvblJhdGUyIiwgIjAuMSIsIDAsIDEsIERlbmd1ZU1vZGVsLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOworCQlpbml0RUF0dHJpYnV0ZShnZXREZW5ndWVNb2RlbF9WZWN0b3JJbmN1YmF0aW9uUmF0ZTMoKSwgdGhlRWNvcmVQYWNrYWdlLmdldEVEb3VibGUoKSwgInZlY3RvckluY3ViYXRpb25SYXRlMyIsICIwLjEiLCAwLCAxLCBEZW5ndWVNb2RlbC5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsKKwkJaW5pdEVBdHRyaWJ1dGUoZ2V0RGVuZ3VlTW9kZWxfVmVjdG9ySW5jdWJhdGlvblJhdGU0KCksIHRoZUVjb3JlUGFja2FnZS5nZXRFRG91YmxlKCksICJ2ZWN0b3JJbmN1YmF0aW9uUmF0ZTQiLCAiMC4xIiwgMCwgMSwgRGVuZ3VlTW9kZWwuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7CisKKwkJaW5pdEVDbGFzcyhzaW1wbGVEZW5ndWVNb2RlbEVDbGFzcywgU2ltcGxlRGVuZ3VlTW9kZWwuY2xhc3MsICJTaW1wbGVEZW5ndWVNb2RlbCIsICFJU19BQlNUUkFDVCwgIUlTX0lOVEVSRkFDRSwgSVNfR0VORVJBVEVEX0lOU1RBTkNFX0NMQVNTKTsKKwkJaW5pdEVBdHRyaWJ1dGUoZ2V0U2ltcGxlRGVuZ3VlTW9kZWxfQml0aW5nUmF0ZSgpLCB0aGVFY29yZVBhY2thZ2UuZ2V0RURvdWJsZSgpLCAiYml0aW5nUmF0ZSIsICIxLjAiLCAwLCAxLCBTaW1wbGVEZW5ndWVNb2RlbC5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsKKwkJaW5pdEVBdHRyaWJ1dGUoZ2V0U2ltcGxlRGVuZ3VlTW9kZWxfSG9zdEluZmVjdGl2aXR5MSgpLCB0aGVFY29yZVBhY2thZ2UuZ2V0RURvdWJsZSgpLCAiaG9zdEluZmVjdGl2aXR5MSIsICIwLjUiLCAwLCAxLCBTaW1wbGVEZW5ndWVNb2RlbC5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsKKwkJaW5pdEVBdHRyaWJ1dGUoZ2V0U2ltcGxlRGVuZ3VlTW9kZWxfSG9zdEluZmVjdGl2aXR5MigpLCB0aGVFY29yZVBhY2thZ2UuZ2V0RURvdWJsZSgpLCAiaG9zdEluZmVjdGl2aXR5MiIsICIwLjUiLCAwLCAxLCBTaW1wbGVEZW5ndWVNb2RlbC5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsKKwkJaW5pdEVBdHRyaWJ1dGUoZ2V0U2ltcGxlRGVuZ3VlTW9kZWxfSG9zdEluZmVjdGl2aXR5MygpLCB0aGVFY29yZVBhY2thZ2UuZ2V0RURvdWJsZSgpLCAiaG9zdEluZmVjdGl2aXR5MyIsICIwLjUiLCAwLCAxLCBTaW1wbGVEZW5ndWVNb2RlbC5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsKKwkJaW5pdEVBdHRyaWJ1dGUoZ2V0U2ltcGxlRGVuZ3VlTW9kZWxfSG9zdEluZmVjdGl2aXR5NCgpLCB0aGVFY29yZVBhY2thZ2UuZ2V0RURvdWJsZSgpLCAiaG9zdEluZmVjdGl2aXR5NCIsICIwLjUiLCAwLCAxLCBTaW1wbGVEZW5ndWVNb2RlbC5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsKKwkJaW5pdEVBdHRyaWJ1dGUoZ2V0U2ltcGxlRGVuZ3VlTW9kZWxfSG9zdFByaW1hcnlJbmN1YmF0aW9uUmF0ZSgpLCB0aGVFY29yZVBhY2thZ2UuZ2V0RURvdWJsZSgpLCAiaG9zdFByaW1hcnlJbmN1YmF0aW9uUmF0ZSIsICIwLjIiLCAwLCAxLCBTaW1wbGVEZW5ndWVNb2RlbC5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsKKwkJaW5pdEVBdHRyaWJ1dGUoZ2V0U2ltcGxlRGVuZ3VlTW9kZWxfSG9zdFByaW1hcnlSZWNvdmVyeVJhdGUoKSwgdGhlRWNvcmVQYWNrYWdlLmdldEVEb3VibGUoKSwgImhvc3RQcmltYXJ5UmVjb3ZlcnlSYXRlIiwgIjAuMTQiLCAwLCAxLCBTaW1wbGVEZW5ndWVNb2RlbC5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsKKwkJaW5pdEVBdHRyaWJ1dGUoZ2V0U2ltcGxlRGVuZ3VlTW9kZWxfSG9zdFByaW1hcnlJbW11bml0eUxvc3NSYXRlKCksIHRoZUVjb3JlUGFja2FnZS5nZXRFRG91YmxlKCksICJob3N0UHJpbWFyeUltbXVuaXR5TG9zc1JhdGUiLCAiMC4wMjQiLCAwLCAxLCBTaW1wbGVEZW5ndWVNb2RlbC5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsKKwkJaW5pdEVBdHRyaWJ1dGUoZ2V0U2ltcGxlRGVuZ3VlTW9kZWxfSG9zdFByaW1hcnlEZWF0aFJhdGUoKSwgdGhlRWNvcmVQYWNrYWdlLmdldEVEb3VibGUoKSwgImhvc3RQcmltYXJ5RGVhdGhSYXRlIiwgIjAuMDAwMDAwMSIsIDAsIDEsIFNpbXBsZURlbmd1ZU1vZGVsLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOworCQlpbml0RUF0dHJpYnV0ZShnZXRTaW1wbGVEZW5ndWVNb2RlbF9Ib3N0QURFMSgpLCB0aGVFY29yZVBhY2thZ2UuZ2V0RURvdWJsZSgpLCAiaG9zdEFERTEiLCAiMS44IiwgMCwgMSwgU2ltcGxlRGVuZ3VlTW9kZWwuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7CisJCWluaXRFQXR0cmlidXRlKGdldFNpbXBsZURlbmd1ZU1vZGVsX0hvc3RBREUyKCksIHRoZUVjb3JlUGFja2FnZS5nZXRFRG91YmxlKCksICJob3N0QURFMiIsICIxLjgiLCAwLCAxLCBTaW1wbGVEZW5ndWVNb2RlbC5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsKKwkJaW5pdEVBdHRyaWJ1dGUoZ2V0U2ltcGxlRGVuZ3VlTW9kZWxfSG9zdEFERTMoKSwgdGhlRWNvcmVQYWNrYWdlLmdldEVEb3VibGUoKSwgImhvc3RBREUzIiwgIjEuOCIsIDAsIDEsIFNpbXBsZURlbmd1ZU1vZGVsLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOworCQlpbml0RUF0dHJpYnV0ZShnZXRTaW1wbGVEZW5ndWVNb2RlbF9Ib3N0QURFNCgpLCB0aGVFY29yZVBhY2thZ2UuZ2V0RURvdWJsZSgpLCAiaG9zdEFERTQiLCAiMS44IiwgMCwgMSwgU2ltcGxlRGVuZ3VlTW9kZWwuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7CisJCWluaXRFQXR0cmlidXRlKGdldFNpbXBsZURlbmd1ZU1vZGVsX0hvc3RTZWNvbmRhcnlJbmN1YmF0aW9uUmF0ZSgpLCB0aGVFY29yZVBhY2thZ2UuZ2V0RURvdWJsZSgpLCAiaG9zdFNlY29uZGFyeUluY3ViYXRpb25SYXRlIiwgIjAuMiIsIDAsIDEsIFNpbXBsZURlbmd1ZU1vZGVsLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOworCQlpbml0RUF0dHJpYnV0ZShnZXRTaW1wbGVEZW5ndWVNb2RlbF9Ib3N0U2Vjb25kYXJ5UmVjb3ZlcnlSYXRlKCksIHRoZUVjb3JlUGFja2FnZS5nZXRFRG91YmxlKCksICJob3N0U2Vjb25kYXJ5UmVjb3ZlcnlSYXRlIiwgIjAuMSIsIDAsIDEsIFNpbXBsZURlbmd1ZU1vZGVsLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOworCQlpbml0RUF0dHJpYnV0ZShnZXRTaW1wbGVEZW5ndWVNb2RlbF9Ib3N0U2Vjb25kYXJ5RGVhdGhSYXRlKCksIHRoZUVjb3JlUGFja2FnZS5nZXRFRG91YmxlKCksICJob3N0U2Vjb25kYXJ5RGVhdGhSYXRlIiwgIjAuMDAxMjMiLCAwLCAxLCBTaW1wbGVEZW5ndWVNb2RlbC5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsKKwkJaW5pdEVBdHRyaWJ1dGUoZ2V0U2ltcGxlRGVuZ3VlTW9kZWxfVmVjdG9ySW5mZWN0aXZpdHkxKCksIHRoZUVjb3JlUGFja2FnZS5nZXRFRG91YmxlKCksICJ2ZWN0b3JJbmZlY3Rpdml0eTEiLCAiMC41IiwgMCwgMSwgU2ltcGxlRGVuZ3VlTW9kZWwuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7CisJCWluaXRFQXR0cmlidXRlKGdldFNpbXBsZURlbmd1ZU1vZGVsX1ZlY3RvckluZmVjdGl2aXR5MigpLCB0aGVFY29yZVBhY2thZ2UuZ2V0RURvdWJsZSgpLCAidmVjdG9ySW5mZWN0aXZpdHkyIiwgIjAuNSIsIDAsIDEsIFNpbXBsZURlbmd1ZU1vZGVsLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOworCQlpbml0RUF0dHJpYnV0ZShnZXRTaW1wbGVEZW5ndWVNb2RlbF9WZWN0b3JJbmZlY3Rpdml0eTMoKSwgdGhlRWNvcmVQYWNrYWdlLmdldEVEb3VibGUoKSwgInZlY3RvckluZmVjdGl2aXR5MyIsICIwLjUiLCAwLCAxLCBTaW1wbGVEZW5ndWVNb2RlbC5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsKKwkJaW5pdEVBdHRyaWJ1dGUoZ2V0U2ltcGxlRGVuZ3VlTW9kZWxfVmVjdG9ySW5mZWN0aXZpdHk0KCksIHRoZUVjb3JlUGFja2FnZS5nZXRFRG91YmxlKCksICJ2ZWN0b3JJbmZlY3Rpdml0eTQiLCAiMC41IiwgMCwgMSwgU2ltcGxlRGVuZ3VlTW9kZWwuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7CisJCWluaXRFQXR0cmlidXRlKGdldFNpbXBsZURlbmd1ZU1vZGVsX1ZlY3RvckFERTEoKSwgdGhlRWNvcmVQYWNrYWdlLmdldEVEb3VibGUoKSwgInZlY3RvckFERTEiLCAiMS44IiwgMCwgMSwgU2ltcGxlRGVuZ3VlTW9kZWwuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7CisJCWluaXRFQXR0cmlidXRlKGdldFNpbXBsZURlbmd1ZU1vZGVsX1ZlY3RvckFERTIoKSwgdGhlRWNvcmVQYWNrYWdlLmdldEVEb3VibGUoKSwgInZlY3RvckFERTIiLCAiMS44IiwgMCwgMSwgU2ltcGxlRGVuZ3VlTW9kZWwuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7CisJCWluaXRFQXR0cmlidXRlKGdldFNpbXBsZURlbmd1ZU1vZGVsX1ZlY3RvckFERTMoKSwgdGhlRWNvcmVQYWNrYWdlLmdldEVEb3VibGUoKSwgInZlY3RvckFERTMiLCAiMS44IiwgMCwgMSwgU2ltcGxlRGVuZ3VlTW9kZWwuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7CisJCWluaXRFQXR0cmlidXRlKGdldFNpbXBsZURlbmd1ZU1vZGVsX1ZlY3RvckFERTQoKSwgdGhlRWNvcmVQYWNrYWdlLmdldEVEb3VibGUoKSwgInZlY3RvckFERTQiLCAiMS44IiwgMCwgMSwgU2ltcGxlRGVuZ3VlTW9kZWwuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7CisJCWluaXRFQXR0cmlidXRlKGdldFNpbXBsZURlbmd1ZU1vZGVsX1ZlY3RvckluY3ViYXRpb25SYXRlKCksIHRoZUVjb3JlUGFja2FnZS5nZXRFRG91YmxlKCksICJ2ZWN0b3JJbmN1YmF0aW9uUmF0ZSIsICIwLjEiLCAwLCAxLCBTaW1wbGVEZW5ndWVNb2RlbC5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsKKworCQlpbml0RUNsYXNzKGRlbmd1ZU1vZGVsSG9zdExhYmVsRUNsYXNzLCBEZW5ndWVNb2RlbEhvc3RMYWJlbC5jbGFzcywgIkRlbmd1ZU1vZGVsSG9zdExhYmVsIiwgIUlTX0FCU1RSQUNULCAhSVNfSU5URVJGQUNFLCBJU19HRU5FUkFURURfSU5TVEFOQ0VfQ0xBU1MpOworCisJCWluaXRFQ2xhc3MoZGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZUVDbGFzcywgRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZS5jbGFzcywgIkRlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWUiLCAhSVNfQUJTVFJBQ1QsICFJU19JTlRFUkZBQ0UsIElTX0dFTkVSQVRFRF9JTlNUQU5DRV9DTEFTUyk7CisJCWluaXRFQXR0cmlidXRlKGdldERlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfRTEoKSwgdGhlRWNvcmVQYWNrYWdlLmdldEVEb3VibGUoKSwgIkUxIiwgbnVsbCwgMCwgMSwgRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZS5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsKKwkJaW5pdEVBdHRyaWJ1dGUoZ2V0RGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9FMigpLCB0aGVFY29yZVBhY2thZ2UuZ2V0RURvdWJsZSgpLCAiRTIiLCBudWxsLCAwLCAxLCBEZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOworCQlpbml0RUF0dHJpYnV0ZShnZXREZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX0UzKCksIHRoZUVjb3JlUGFja2FnZS5nZXRFRG91YmxlKCksICJFMyIsIG51bGwsIDAsIDEsIERlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWUuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7CisJCWluaXRFQXR0cmlidXRlKGdldERlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfRTQoKSwgdGhlRWNvcmVQYWNrYWdlLmdldEVEb3VibGUoKSwgIkU0IiwgbnVsbCwgMCwgMSwgRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZS5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsKKwkJaW5pdEVBdHRyaWJ1dGUoZ2V0RGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9JMSgpLCB0aGVFY29yZVBhY2thZ2UuZ2V0RURvdWJsZSgpLCAiSTEiLCBudWxsLCAwLCAxLCBEZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOworCQlpbml0RUF0dHJpYnV0ZShnZXREZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX0kyKCksIHRoZUVjb3JlUGFja2FnZS5nZXRFRG91YmxlKCksICJJMiIsIG51bGwsIDAsIDEsIERlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWUuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7CisJCWluaXRFQXR0cmlidXRlKGdldERlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfSTMoKSwgdGhlRWNvcmVQYWNrYWdlLmdldEVEb3VibGUoKSwgIkkzIiwgbnVsbCwgMCwgMSwgRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZS5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsKKwkJaW5pdEVBdHRyaWJ1dGUoZ2V0RGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9JNCgpLCB0aGVFY29yZVBhY2thZ2UuZ2V0RURvdWJsZSgpLCAiSTQiLCBudWxsLCAwLCAxLCBEZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOworCQlpbml0RUF0dHJpYnV0ZShnZXREZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX1QxKCksIHRoZUVjb3JlUGFja2FnZS5nZXRFRG91YmxlKCksICJUMSIsIG51bGwsIDAsIDEsIERlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWUuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7CisJCWluaXRFQXR0cmlidXRlKGdldERlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfVDIoKSwgdGhlRWNvcmVQYWNrYWdlLmdldEVEb3VibGUoKSwgIlQyIiwgbnVsbCwgMCwgMSwgRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZS5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsKKwkJaW5pdEVBdHRyaWJ1dGUoZ2V0RGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9UMygpLCB0aGVFY29yZVBhY2thZ2UuZ2V0RURvdWJsZSgpLCAiVDMiLCBudWxsLCAwLCAxLCBEZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOworCQlpbml0RUF0dHJpYnV0ZShnZXREZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX1Q0KCksIHRoZUVjb3JlUGFja2FnZS5nZXRFRG91YmxlKCksICJUNCIsIG51bGwsIDAsIDEsIERlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWUuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7CisJCWluaXRFQXR0cmlidXRlKGdldERlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfUjEoKSwgdGhlRWNvcmVQYWNrYWdlLmdldEVEb3VibGUoKSwgIlIxIiwgbnVsbCwgMCwgMSwgRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZS5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsKKwkJaW5pdEVBdHRyaWJ1dGUoZ2V0RGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9SMigpLCB0aGVFY29yZVBhY2thZ2UuZ2V0RURvdWJsZSgpLCAiUjIiLCBudWxsLCAwLCAxLCBEZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOworCQlpbml0RUF0dHJpYnV0ZShnZXREZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX1IzKCksIHRoZUVjb3JlUGFja2FnZS5nZXRFRG91YmxlKCksICJSMyIsIG51bGwsIDAsIDEsIERlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWUuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7CisJCWluaXRFQXR0cmlidXRlKGdldERlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfUjQoKSwgdGhlRWNvcmVQYWNrYWdlLmdldEVEb3VibGUoKSwgIlI0IiwgbnVsbCwgMCwgMSwgRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZS5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsKKwkJaW5pdEVBdHRyaWJ1dGUoZ2V0RGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9FMTIoKSwgdGhlRWNvcmVQYWNrYWdlLmdldEVEb3VibGUoKSwgIkUxMiIsIG51bGwsIDAsIDEsIERlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWUuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7CisJCWluaXRFQXR0cmlidXRlKGdldERlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfRTEzKCksIHRoZUVjb3JlUGFja2FnZS5nZXRFRG91YmxlKCksICJFMTMiLCBudWxsLCAwLCAxLCBEZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOworCQlpbml0RUF0dHJpYnV0ZShnZXREZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX0UxNCgpLCB0aGVFY29yZVBhY2thZ2UuZ2V0RURvdWJsZSgpLCAiRTE0IiwgbnVsbCwgMCwgMSwgRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZS5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsKKwkJaW5pdEVBdHRyaWJ1dGUoZ2V0RGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9FMjEoKSwgdGhlRWNvcmVQYWNrYWdlLmdldEVEb3VibGUoKSwgIkUyMSIsIG51bGwsIDAsIDEsIERlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWUuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7CisJCWluaXRFQXR0cmlidXRlKGdldERlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfRTIzKCksIHRoZUVjb3JlUGFja2FnZS5nZXRFRG91YmxlKCksICJFMjMiLCBudWxsLCAwLCAxLCBEZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOworCQlpbml0RUF0dHJpYnV0ZShnZXREZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX0UyNCgpLCB0aGVFY29yZVBhY2thZ2UuZ2V0RURvdWJsZSgpLCAiRTI0IiwgbnVsbCwgMCwgMSwgRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZS5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsKKwkJaW5pdEVBdHRyaWJ1dGUoZ2V0RGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9FMzEoKSwgdGhlRWNvcmVQYWNrYWdlLmdldEVEb3VibGUoKSwgIkUzMSIsIG51bGwsIDAsIDEsIERlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWUuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7CisJCWluaXRFQXR0cmlidXRlKGdldERlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfRTMyKCksIHRoZUVjb3JlUGFja2FnZS5nZXRFRG91YmxlKCksICJFMzIiLCBudWxsLCAwLCAxLCBEZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOworCQlpbml0RUF0dHJpYnV0ZShnZXREZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX0UzNCgpLCB0aGVFY29yZVBhY2thZ2UuZ2V0RURvdWJsZSgpLCAiRTM0IiwgbnVsbCwgMCwgMSwgRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZS5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsKKwkJaW5pdEVBdHRyaWJ1dGUoZ2V0RGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9FNDEoKSwgdGhlRWNvcmVQYWNrYWdlLmdldEVEb3VibGUoKSwgIkU0MSIsIG51bGwsIDAsIDEsIERlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWUuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7CisJCWluaXRFQXR0cmlidXRlKGdldERlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfRTQyKCksIHRoZUVjb3JlUGFja2FnZS5nZXRFRG91YmxlKCksICJFNDIiLCBudWxsLCAwLCAxLCBEZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOworCQlpbml0RUF0dHJpYnV0ZShnZXREZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX0U0MygpLCB0aGVFY29yZVBhY2thZ2UuZ2V0RURvdWJsZSgpLCAiRTQzIiwgbnVsbCwgMCwgMSwgRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZS5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsKKwkJaW5pdEVBdHRyaWJ1dGUoZ2V0RGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9JMTIoKSwgdGhlRWNvcmVQYWNrYWdlLmdldEVEb3VibGUoKSwgIkkxMiIsIG51bGwsIDAsIDEsIERlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWUuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7CisJCWluaXRFQXR0cmlidXRlKGdldERlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfSTEzKCksIHRoZUVjb3JlUGFja2FnZS5nZXRFRG91YmxlKCksICJJMTMiLCBudWxsLCAwLCAxLCBEZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOworCQlpbml0RUF0dHJpYnV0ZShnZXREZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX0kxNCgpLCB0aGVFY29yZVBhY2thZ2UuZ2V0RURvdWJsZSgpLCAiSTE0IiwgbnVsbCwgMCwgMSwgRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZS5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsKKwkJaW5pdEVBdHRyaWJ1dGUoZ2V0RGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9JMjEoKSwgdGhlRWNvcmVQYWNrYWdlLmdldEVEb3VibGUoKSwgIkkyMSIsIG51bGwsIDAsIDEsIERlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWUuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7CisJCWluaXRFQXR0cmlidXRlKGdldERlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfSTIzKCksIHRoZUVjb3JlUGFja2FnZS5nZXRFRG91YmxlKCksICJJMjMiLCBudWxsLCAwLCAxLCBEZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOworCQlpbml0RUF0dHJpYnV0ZShnZXREZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX0kyNCgpLCB0aGVFY29yZVBhY2thZ2UuZ2V0RURvdWJsZSgpLCAiSTI0IiwgbnVsbCwgMCwgMSwgRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZS5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsKKwkJaW5pdEVBdHRyaWJ1dGUoZ2V0RGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9JMzEoKSwgdGhlRWNvcmVQYWNrYWdlLmdldEVEb3VibGUoKSwgIkkzMSIsIG51bGwsIDAsIDEsIERlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWUuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7CisJCWluaXRFQXR0cmlidXRlKGdldERlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfSTMyKCksIHRoZUVjb3JlUGFja2FnZS5nZXRFRG91YmxlKCksICJJMzIiLCBudWxsLCAwLCAxLCBEZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOworCQlpbml0RUF0dHJpYnV0ZShnZXREZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX0kzNCgpLCB0aGVFY29yZVBhY2thZ2UuZ2V0RURvdWJsZSgpLCAiSTM0IiwgbnVsbCwgMCwgMSwgRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZS5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsKKwkJaW5pdEVBdHRyaWJ1dGUoZ2V0RGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9JNDEoKSwgdGhlRWNvcmVQYWNrYWdlLmdldEVEb3VibGUoKSwgIkk0MSIsIG51bGwsIDAsIDEsIERlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWUuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7CisJCWluaXRFQXR0cmlidXRlKGdldERlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfSTQyKCksIHRoZUVjb3JlUGFja2FnZS5nZXRFRG91YmxlKCksICJJNDIiLCBudWxsLCAwLCAxLCBEZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOworCQlpbml0RUF0dHJpYnV0ZShnZXREZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX0k0MygpLCB0aGVFY29yZVBhY2thZ2UuZ2V0RURvdWJsZSgpLCAiSTQzIiwgbnVsbCwgMCwgMSwgRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZS5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsKKwkJaW5pdEVBdHRyaWJ1dGUoZ2V0RGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9SKCksIHRoZUVjb3JlUGFja2FnZS5nZXRFRG91YmxlKCksICJSIiwgbnVsbCwgMCwgMSwgRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZS5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsKKwkJaW5pdEVBdHRyaWJ1dGUoZ2V0RGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9JbmNpZGVuY2UxKCksIHRoZUVjb3JlUGFja2FnZS5nZXRFRG91YmxlKCksICJpbmNpZGVuY2UxIiwgbnVsbCwgMCwgMSwgRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZS5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsKKwkJaW5pdEVBdHRyaWJ1dGUoZ2V0RGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9JbmNpZGVuY2UyKCksIHRoZUVjb3JlUGFja2FnZS5nZXRFRG91YmxlKCksICJpbmNpZGVuY2UyIiwgbnVsbCwgMCwgMSwgRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZS5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsKKwkJaW5pdEVBdHRyaWJ1dGUoZ2V0RGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9JbmNpZGVuY2UzKCksIHRoZUVjb3JlUGFja2FnZS5nZXRFRG91YmxlKCksICJpbmNpZGVuY2UzIiwgbnVsbCwgMCwgMSwgRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZS5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsKKwkJaW5pdEVBdHRyaWJ1dGUoZ2V0RGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9JbmNpZGVuY2U0KCksIHRoZUVjb3JlUGFja2FnZS5nZXRFRG91YmxlKCksICJpbmNpZGVuY2U0IiwgbnVsbCwgMCwgMSwgRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZS5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsKKwkJaW5pdEVBdHRyaWJ1dGUoZ2V0RGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9JbmNpZGVuY2UxMigpLCB0aGVFY29yZVBhY2thZ2UuZ2V0RURvdWJsZSgpLCAiaW5jaWRlbmNlMTIiLCBudWxsLCAwLCAxLCBEZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOworCQlpbml0RUF0dHJpYnV0ZShnZXREZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX0luY2lkZW5jZTIxKCksIHRoZUVjb3JlUGFja2FnZS5nZXRFRG91YmxlKCksICJpbmNpZGVuY2UyMSIsIG51bGwsIDAsIDEsIERlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWUuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7CisJCWluaXRFQXR0cmlidXRlKGdldERlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfSW5jaWRlbmNlMzEoKSwgdGhlRWNvcmVQYWNrYWdlLmdldEVEb3VibGUoKSwgImluY2lkZW5jZTMxIiwgbnVsbCwgMCwgMSwgRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZS5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsKKwkJaW5pdEVBdHRyaWJ1dGUoZ2V0RGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9JbmNpZGVuY2U0MSgpLCB0aGVFY29yZVBhY2thZ2UuZ2V0RURvdWJsZSgpLCAiaW5jaWRlbmNlNDEiLCBudWxsLCAwLCAxLCBEZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOworCQlpbml0RUF0dHJpYnV0ZShnZXREZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX0luY2lkZW5jZTEzKCksIHRoZUVjb3JlUGFja2FnZS5nZXRFRG91YmxlKCksICJpbmNpZGVuY2UxMyIsIG51bGwsIDAsIDEsIERlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWUuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7CisJCWluaXRFQXR0cmlidXRlKGdldERlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfSW5jaWRlbmNlMjMoKSwgdGhlRWNvcmVQYWNrYWdlLmdldEVEb3VibGUoKSwgImluY2lkZW5jZTIzIiwgbnVsbCwgMCwgMSwgRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZS5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsKKwkJaW5pdEVBdHRyaWJ1dGUoZ2V0RGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9JbmNpZGVuY2UzMigpLCB0aGVFY29yZVBhY2thZ2UuZ2V0RURvdWJsZSgpLCAiaW5jaWRlbmNlMzIiLCBudWxsLCAwLCAxLCBEZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOworCQlpbml0RUF0dHJpYnV0ZShnZXREZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX0luY2lkZW5jZTQyKCksIHRoZUVjb3JlUGFja2FnZS5nZXRFRG91YmxlKCksICJpbmNpZGVuY2U0MiIsIG51bGwsIDAsIDEsIERlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWUuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7CisJCWluaXRFQXR0cmlidXRlKGdldERlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfSW5jaWRlbmNlMTQoKSwgdGhlRWNvcmVQYWNrYWdlLmdldEVEb3VibGUoKSwgImluY2lkZW5jZTE0IiwgbnVsbCwgMCwgMSwgRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZS5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsKKwkJaW5pdEVBdHRyaWJ1dGUoZ2V0RGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9JbmNpZGVuY2UyNCgpLCB0aGVFY29yZVBhY2thZ2UuZ2V0RURvdWJsZSgpLCAiaW5jaWRlbmNlMjQiLCBudWxsLCAwLCAxLCBEZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOworCQlpbml0RUF0dHJpYnV0ZShnZXREZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX0luY2lkZW5jZTM0KCksIHRoZUVjb3JlUGFja2FnZS5nZXRFRG91YmxlKCksICJpbmNpZGVuY2UzNCIsIG51bGwsIDAsIDEsIERlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWUuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7CisJCWluaXRFQXR0cmlidXRlKGdldERlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfSW5jaWRlbmNlNDMoKSwgdGhlRWNvcmVQYWNrYWdlLmdldEVEb3VibGUoKSwgImluY2lkZW5jZTQzIiwgbnVsbCwgMCwgMSwgRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZS5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsKKwkJaW5pdEVBdHRyaWJ1dGUoZ2V0RGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9EaXNlYXNlRGVhdGhzMSgpLCB0aGVFY29yZVBhY2thZ2UuZ2V0RURvdWJsZSgpLCAiZGlzZWFzZURlYXRoczEiLCBudWxsLCAwLCAxLCBEZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOworCQlpbml0RUF0dHJpYnV0ZShnZXREZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX0Rpc2Vhc2VEZWF0aHMyKCksIHRoZUVjb3JlUGFja2FnZS5nZXRFRG91YmxlKCksICJkaXNlYXNlRGVhdGhzMiIsIG51bGwsIDAsIDEsIERlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWUuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7CisJCWluaXRFQXR0cmlidXRlKGdldERlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfRGlzZWFzZURlYXRoczMoKSwgdGhlRWNvcmVQYWNrYWdlLmdldEVEb3VibGUoKSwgImRpc2Vhc2VEZWF0aHMzIiwgbnVsbCwgMCwgMSwgRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZS5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsKKwkJaW5pdEVBdHRyaWJ1dGUoZ2V0RGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9EaXNlYXNlRGVhdGhzNCgpLCB0aGVFY29yZVBhY2thZ2UuZ2V0RURvdWJsZSgpLCAiZGlzZWFzZURlYXRoczQiLCBudWxsLCAwLCAxLCBEZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOworCQlpbml0RUF0dHJpYnV0ZShnZXREZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX0Rpc2Vhc2VEZWF0aHMxMigpLCB0aGVFY29yZVBhY2thZ2UuZ2V0RURvdWJsZSgpLCAiZGlzZWFzZURlYXRoczEyIiwgbnVsbCwgMCwgMSwgRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZS5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsKKwkJaW5pdEVBdHRyaWJ1dGUoZ2V0RGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9EaXNlYXNlRGVhdGhzMjEoKSwgdGhlRWNvcmVQYWNrYWdlLmdldEVEb3VibGUoKSwgImRpc2Vhc2VEZWF0aHMyMSIsIG51bGwsIDAsIDEsIERlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWUuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7CisJCWluaXRFQXR0cmlidXRlKGdldERlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfRGlzZWFzZURlYXRoczMxKCksIHRoZUVjb3JlUGFja2FnZS5nZXRFRG91YmxlKCksICJkaXNlYXNlRGVhdGhzMzEiLCBudWxsLCAwLCAxLCBEZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOworCQlpbml0RUF0dHJpYnV0ZShnZXREZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX0Rpc2Vhc2VEZWF0aHM0MSgpLCB0aGVFY29yZVBhY2thZ2UuZ2V0RURvdWJsZSgpLCAiZGlzZWFzZURlYXRoczQxIiwgbnVsbCwgMCwgMSwgRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZS5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsKKwkJaW5pdEVBdHRyaWJ1dGUoZ2V0RGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9EaXNlYXNlRGVhdGhzMTMoKSwgdGhlRWNvcmVQYWNrYWdlLmdldEVEb3VibGUoKSwgImRpc2Vhc2VEZWF0aHMxMyIsIG51bGwsIDAsIDEsIERlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWUuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7CisJCWluaXRFQXR0cmlidXRlKGdldERlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfRGlzZWFzZURlYXRoczIzKCksIHRoZUVjb3JlUGFja2FnZS5nZXRFRG91YmxlKCksICJkaXNlYXNlRGVhdGhzMjMiLCBudWxsLCAwLCAxLCBEZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOworCQlpbml0RUF0dHJpYnV0ZShnZXREZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX0Rpc2Vhc2VEZWF0aHMzMigpLCB0aGVFY29yZVBhY2thZ2UuZ2V0RURvdWJsZSgpLCAiZGlzZWFzZURlYXRoczMyIiwgbnVsbCwgMCwgMSwgRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZS5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsKKwkJaW5pdEVBdHRyaWJ1dGUoZ2V0RGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9EaXNlYXNlRGVhdGhzNDIoKSwgdGhlRWNvcmVQYWNrYWdlLmdldEVEb3VibGUoKSwgImRpc2Vhc2VEZWF0aHM0MiIsIG51bGwsIDAsIDEsIERlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWUuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7CisJCWluaXRFQXR0cmlidXRlKGdldERlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfRGlzZWFzZURlYXRoczE0KCksIHRoZUVjb3JlUGFja2FnZS5nZXRFRG91YmxlKCksICJkaXNlYXNlRGVhdGhzMTQiLCBudWxsLCAwLCAxLCBEZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOworCQlpbml0RUF0dHJpYnV0ZShnZXREZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX0Rpc2Vhc2VEZWF0aHMyNCgpLCB0aGVFY29yZVBhY2thZ2UuZ2V0RURvdWJsZSgpLCAiZGlzZWFzZURlYXRoczI0IiwgbnVsbCwgMCwgMSwgRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZS5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsKKwkJaW5pdEVBdHRyaWJ1dGUoZ2V0RGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9EaXNlYXNlRGVhdGhzMzQoKSwgdGhlRWNvcmVQYWNrYWdlLmdldEVEb3VibGUoKSwgImRpc2Vhc2VEZWF0aHMzNCIsIG51bGwsIDAsIDEsIERlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWUuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7CisJCWluaXRFQXR0cmlidXRlKGdldERlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfRGlzZWFzZURlYXRoczQzKCksIHRoZUVjb3JlUGFja2FnZS5nZXRFRG91YmxlKCksICJkaXNlYXNlRGVhdGhzNDMiLCBudWxsLCAwLCAxLCBEZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOworCisJCWluaXRFQ2xhc3MoZGVuZ3VlTW9kZWxWZWN0b3JMYWJlbEVDbGFzcywgRGVuZ3VlTW9kZWxWZWN0b3JMYWJlbC5jbGFzcywgIkRlbmd1ZU1vZGVsVmVjdG9yTGFiZWwiLCAhSVNfQUJTVFJBQ1QsICFJU19JTlRFUkZBQ0UsIElTX0dFTkVSQVRFRF9JTlNUQU5DRV9DTEFTUyk7CisKKwkJaW5pdEVDbGFzcyhkZW5ndWVNb2RlbFZlY3RvckxhYmVsVmFsdWVFQ2xhc3MsIERlbmd1ZU1vZGVsVmVjdG9yTGFiZWxWYWx1ZS5jbGFzcywgIkRlbmd1ZU1vZGVsVmVjdG9yTGFiZWxWYWx1ZSIsICFJU19BQlNUUkFDVCwgIUlTX0lOVEVSRkFDRSwgSVNfR0VORVJBVEVEX0lOU1RBTkNFX0NMQVNTKTsKKwkJaW5pdEVBdHRyaWJ1dGUoZ2V0RGVuZ3VlTW9kZWxWZWN0b3JMYWJlbFZhbHVlX0UxKCksIHRoZUVjb3JlUGFja2FnZS5nZXRFRG91YmxlKCksICJFMSIsIG51bGwsIDAsIDEsIERlbmd1ZU1vZGVsVmVjdG9yTGFiZWxWYWx1ZS5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsKKwkJaW5pdEVBdHRyaWJ1dGUoZ2V0RGVuZ3VlTW9kZWxWZWN0b3JMYWJlbFZhbHVlX0UyKCksIHRoZUVjb3JlUGFja2FnZS5nZXRFRG91YmxlKCksICJFMiIsIG51bGwsIDAsIDEsIERlbmd1ZU1vZGVsVmVjdG9yTGFiZWxWYWx1ZS5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsKKwkJaW5pdEVBdHRyaWJ1dGUoZ2V0RGVuZ3VlTW9kZWxWZWN0b3JMYWJlbFZhbHVlX0UzKCksIHRoZUVjb3JlUGFja2FnZS5nZXRFRG91YmxlKCksICJFMyIsIG51bGwsIDAsIDEsIERlbmd1ZU1vZGVsVmVjdG9yTGFiZWxWYWx1ZS5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsKKwkJaW5pdEVBdHRyaWJ1dGUoZ2V0RGVuZ3VlTW9kZWxWZWN0b3JMYWJlbFZhbHVlX0U0KCksIHRoZUVjb3JlUGFja2FnZS5nZXRFRG91YmxlKCksICJFNCIsIG51bGwsIDAsIDEsIERlbmd1ZU1vZGVsVmVjdG9yTGFiZWxWYWx1ZS5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsKKwkJaW5pdEVBdHRyaWJ1dGUoZ2V0RGVuZ3VlTW9kZWxWZWN0b3JMYWJlbFZhbHVlX0kxKCksIHRoZUVjb3JlUGFja2FnZS5nZXRFRG91YmxlKCksICJJMSIsIG51bGwsIDAsIDEsIERlbmd1ZU1vZGVsVmVjdG9yTGFiZWxWYWx1ZS5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsKKwkJaW5pdEVBdHRyaWJ1dGUoZ2V0RGVuZ3VlTW9kZWxWZWN0b3JMYWJlbFZhbHVlX0kyKCksIHRoZUVjb3JlUGFja2FnZS5nZXRFRG91YmxlKCksICJJMiIsIG51bGwsIDAsIDEsIERlbmd1ZU1vZGVsVmVjdG9yTGFiZWxWYWx1ZS5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsKKwkJaW5pdEVBdHRyaWJ1dGUoZ2V0RGVuZ3VlTW9kZWxWZWN0b3JMYWJlbFZhbHVlX0kzKCksIHRoZUVjb3JlUGFja2FnZS5nZXRFRG91YmxlKCksICJJMyIsIG51bGwsIDAsIDEsIERlbmd1ZU1vZGVsVmVjdG9yTGFiZWxWYWx1ZS5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsKKwkJaW5pdEVBdHRyaWJ1dGUoZ2V0RGVuZ3VlTW9kZWxWZWN0b3JMYWJlbFZhbHVlX0k0KCksIHRoZUVjb3JlUGFja2FnZS5nZXRFRG91YmxlKCksICJJNCIsIG51bGwsIDAsIDEsIERlbmd1ZU1vZGVsVmVjdG9yTGFiZWxWYWx1ZS5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsKKwkJaW5pdEVBdHRyaWJ1dGUoZ2V0RGVuZ3VlTW9kZWxWZWN0b3JMYWJlbFZhbHVlX0luY2lkZW5jZTEoKSwgdGhlRWNvcmVQYWNrYWdlLmdldEVEb3VibGUoKSwgImluY2lkZW5jZTEiLCBudWxsLCAwLCAxLCBEZW5ndWVNb2RlbFZlY3RvckxhYmVsVmFsdWUuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7CisJCWluaXRFQXR0cmlidXRlKGdldERlbmd1ZU1vZGVsVmVjdG9yTGFiZWxWYWx1ZV9JbmNpZGVuY2UyKCksIHRoZUVjb3JlUGFja2FnZS5nZXRFRG91YmxlKCksICJpbmNpZGVuY2UyIiwgbnVsbCwgMCwgMSwgRGVuZ3VlTW9kZWxWZWN0b3JMYWJlbFZhbHVlLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOworCQlpbml0RUF0dHJpYnV0ZShnZXREZW5ndWVNb2RlbFZlY3RvckxhYmVsVmFsdWVfSW5jaWRlbmNlMygpLCB0aGVFY29yZVBhY2thZ2UuZ2V0RURvdWJsZSgpLCAiaW5jaWRlbmNlMyIsIG51bGwsIDAsIDEsIERlbmd1ZU1vZGVsVmVjdG9yTGFiZWxWYWx1ZS5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsKKwkJaW5pdEVBdHRyaWJ1dGUoZ2V0RGVuZ3VlTW9kZWxWZWN0b3JMYWJlbFZhbHVlX0luY2lkZW5jZTQoKSwgdGhlRWNvcmVQYWNrYWdlLmdldEVEb3VibGUoKSwgImluY2lkZW5jZTQiLCBudWxsLCAwLCAxLCBEZW5ndWVNb2RlbFZlY3RvckxhYmVsVmFsdWUuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7CisKKwkJLy8gQ3JlYXRlIHJlc291cmNlCisJCWNyZWF0ZVJlc291cmNlKGVOU19VUkkpOworCX0KKworfSAvL1ZlY3RvclBhY2thZ2VJbXBsCmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3Ivc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy92ZWN0b3IvcHJvdmlkZXIvRGVuZ3VlTW9kZWxIb3N0TGFiZWxJdGVtUHJvdmlkZXIuamF2YSBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3ZlY3Rvci9wcm92aWRlci9EZW5ndWVNb2RlbEhvc3RMYWJlbEl0ZW1Qcm92aWRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE5NWNlMmQKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3Ivc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy92ZWN0b3IvcHJvdmlkZXIvRGVuZ3VlTW9kZWxIb3N0TGFiZWxJdGVtUHJvdmlkZXIuamF2YQpAQCAtMCwwICsxLDEzMSBAQAorLyoqDQorICogPGNvcHlyaWdodD4NCisgKiA8L2NvcHlyaWdodD4NCisgKg0KKyAqICRJZCQNCisgKi8NCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IucHJvdmlkZXI7DQorDQorDQoraW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOw0KK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsNCisNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuQWRhcHRlckZhY3Rvcnk7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbjsNCisNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlJlc291cmNlTG9jYXRvcjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlVSSTsNCisNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUVkaXRpbmdEb21haW5JdGVtUHJvdmlkZXI7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtTGFiZWxQcm92aWRlcjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtUHJvcGVydHlTb3VyY2U7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklTdHJ1Y3R1cmVkSXRlbUNvbnRlbnRQcm92aWRlcjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVRyZWVJdGVtQ29udGVudFByb3ZpZGVyOw0KKw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQucHJvdmlkZXIuU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbEl0ZW1Qcm92aWRlcjsNCisNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbEhvc3RMYWJlbDsNCisNCisvKioNCisgKiBUaGlzIGlzIHRoZSBpdGVtIHByb3ZpZGVyIGFkYXB0ZXIgZm9yIGEge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWxIb3N0TGFiZWx9IG9iamVjdC4NCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKyAqIEBnZW5lcmF0ZWQNCisgKi8NCitwdWJsaWMgY2xhc3MgRGVuZ3VlTW9kZWxIb3N0TGFiZWxJdGVtUHJvdmlkZXINCisJZXh0ZW5kcyBTdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsSXRlbVByb3ZpZGVyDQorCWltcGxlbWVudHMNCisJCUlFZGl0aW5nRG9tYWluSXRlbVByb3ZpZGVyLA0KKwkJSVN0cnVjdHVyZWRJdGVtQ29udGVudFByb3ZpZGVyLA0KKwkJSVRyZWVJdGVtQ29udGVudFByb3ZpZGVyLA0KKwkJSUl0ZW1MYWJlbFByb3ZpZGVyLA0KKwkJSUl0ZW1Qcm9wZXJ0eVNvdXJjZSB7DQorCS8qKg0KKwkgKiBUaGlzIGNvbnN0cnVjdHMgYW4gaW5zdGFuY2UgZnJvbSBhIGZhY3RvcnkgYW5kIGEgbm90aWZpZXIuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgRGVuZ3VlTW9kZWxIb3N0TGFiZWxJdGVtUHJvdmlkZXIoQWRhcHRlckZhY3RvcnkgYWRhcHRlckZhY3RvcnkpIHsNCisJCXN1cGVyKGFkYXB0ZXJGYWN0b3J5KTsNCisJfQ0KKw0KKwkvKioNCisJICogVGhpcyByZXR1cm5zIHRoZSBwcm9wZXJ0eSBkZXNjcmlwdG9ycyBmb3IgdGhlIGFkYXB0ZWQgY2xhc3MuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlAT3ZlcnJpZGUNCisJcHVibGljIExpc3Q8SUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I+IGdldFByb3BlcnR5RGVzY3JpcHRvcnMoT2JqZWN0IG9iamVjdCkgew0KKwkJaWYgKGl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzID09IG51bGwpIHsNCisJCQlzdXBlci5nZXRQcm9wZXJ0eURlc2NyaXB0b3JzKG9iamVjdCk7DQorDQorCQl9DQorCQlyZXR1cm4gaXRlbVByb3BlcnR5RGVzY3JpcHRvcnM7DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgcmV0dXJucyBEZW5ndWVNb2RlbEhvc3RMYWJlbC5naWYuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlAT3ZlcnJpZGUNCisJcHVibGljIE9iamVjdCBnZXRJbWFnZShPYmplY3Qgb2JqZWN0KSB7DQorCQlyZXR1cm4gb3ZlcmxheUltYWdlKG9iamVjdCwgZ2V0UmVzb3VyY2VMb2NhdG9yKCkuZ2V0SW1hZ2UoImZ1bGwvb2JqMTYvRGVuZ3VlTW9kZWxIb3N0TGFiZWwiKSk7DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgcmV0dXJucyB0aGUgbGFiZWwgdGV4dCBmb3IgdGhlIGFkYXB0ZWQgY2xhc3MuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlAT3ZlcnJpZGUNCisJcHVibGljIFN0cmluZyBnZXRUZXh0KE9iamVjdCBvYmplY3QpIHsNCisJCVVSSSBsYWJlbFZhbHVlID0gKChEZW5ndWVNb2RlbEhvc3RMYWJlbClvYmplY3QpLmdldFVSSSgpOw0KKwkJU3RyaW5nIGxhYmVsID0gbGFiZWxWYWx1ZSA9PSBudWxsID8gbnVsbCA6IGxhYmVsVmFsdWUudG9TdHJpbmcoKTsNCisJCXJldHVybiBsYWJlbCA9PSBudWxsIHx8IGxhYmVsLmxlbmd0aCgpID09IDAgPw0KKwkJCWdldFN0cmluZygiX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmVsX3R5cGUiKSA6DQorCQkJZ2V0U3RyaW5nKCJfVUlfRGVuZ3VlTW9kZWxIb3N0TGFiZWxfdHlwZSIpICsgIiAiICsgbGFiZWw7DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgaGFuZGxlcyBtb2RlbCBub3RpZmljYXRpb25zIGJ5IGNhbGxpbmcge0BsaW5rICN1cGRhdGVDaGlsZHJlbn0gdG8gdXBkYXRlIGFueSBjYWNoZWQNCisJICogY2hpbGRyZW4gYW5kIGJ5IGNyZWF0aW5nIGEgdmlld2VyIG5vdGlmaWNhdGlvbiwgd2hpY2ggaXQgcGFzc2VzIHRvIHtAbGluayAjZmlyZU5vdGlmeUNoYW5nZWR9Lg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJQE92ZXJyaWRlDQorCXB1YmxpYyB2b2lkIG5vdGlmeUNoYW5nZWQoTm90aWZpY2F0aW9uIG5vdGlmaWNhdGlvbikgew0KKwkJdXBkYXRlQ2hpbGRyZW4obm90aWZpY2F0aW9uKTsNCisJCXN1cGVyLm5vdGlmeUNoYW5nZWQobm90aWZpY2F0aW9uKTsNCisJfQ0KKw0KKwkvKioNCisJICogVGhpcyBhZGRzIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuZWRpdC5jb21tYW5kLkNvbW1hbmRQYXJhbWV0ZXJ9cyBkZXNjcmliaW5nIHRoZSBjaGlsZHJlbg0KKwkgKiB0aGF0IGNhbiBiZSBjcmVhdGVkIHVuZGVyIHRoaXMgb2JqZWN0Lg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJQE92ZXJyaWRlDQorCXByb3RlY3RlZCB2b2lkIGNvbGxlY3ROZXdDaGlsZERlc2NyaXB0b3JzKENvbGxlY3Rpb248T2JqZWN0PiBuZXdDaGlsZERlc2NyaXB0b3JzLCBPYmplY3Qgb2JqZWN0KSB7DQorCQlzdXBlci5jb2xsZWN0TmV3Q2hpbGREZXNjcmlwdG9ycyhuZXdDaGlsZERlc2NyaXB0b3JzLCBvYmplY3QpOw0KKwl9DQorDQorCS8qKg0KKwkgKiBSZXR1cm4gdGhlIHJlc291cmNlIGxvY2F0b3IgZm9yIHRoaXMgaXRlbSBwcm92aWRlcidzIHJlc291cmNlcy4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCUBPdmVycmlkZQ0KKwlwdWJsaWMgUmVzb3VyY2VMb2NhdG9yIGdldFJlc291cmNlTG9jYXRvcigpIHsNCisJCXJldHVybiBWZWN0b3JFZGl0UGx1Z2luLklOU1RBTkNFOw0KKwl9DQorDQorfQ0KZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3ZlY3Rvci9wcm92aWRlci9EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlSXRlbVByb3ZpZGVyLmphdmEgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3Ivc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy92ZWN0b3IvcHJvdmlkZXIvRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZUl0ZW1Qcm92aWRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM2MjkxMGYKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3Ivc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy92ZWN0b3IvcHJvdmlkZXIvRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZUl0ZW1Qcm92aWRlci5qYXZhCkBAIC0wLDAgKzEsMTg4OCBAQAorLyoqDQorICogPGNvcHlyaWdodD4NCisgKiA8L2NvcHlyaWdodD4NCisgKg0KKyAqICRJZCQNCisgKi8NCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IucHJvdmlkZXI7DQorDQorDQoraW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOw0KK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsNCisNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuQWRhcHRlckZhY3Rvcnk7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbjsNCisNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlJlc291cmNlTG9jYXRvcjsNCisNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeTsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUVkaXRpbmdEb21haW5JdGVtUHJvdmlkZXI7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtTGFiZWxQcm92aWRlcjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtUHJvcGVydHlTb3VyY2U7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklTdHJ1Y3R1cmVkSXRlbUNvbnRlbnRQcm92aWRlcjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVRyZWVJdGVtQ29udGVudFByb3ZpZGVyOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JdGVtUHJvcGVydHlEZXNjcmlwdG9yOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5WaWV3ZXJOb3RpZmljYXRpb247DQorDQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5wcm92aWRlci5TdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsVmFsdWVJdGVtUHJvdmlkZXI7DQorDQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZTsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5WZWN0b3JQYWNrYWdlOw0KKw0KKy8qKg0KKyAqIFRoaXMgaXMgdGhlIGl0ZW0gcHJvdmlkZXIgYWRhcHRlciBmb3IgYSB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlfSBvYmplY3QuDQorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisgKiBAZ2VuZXJhdGVkDQorICovDQorcHVibGljIGNsYXNzIERlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVJdGVtUHJvdmlkZXINCisJZXh0ZW5kcyBTdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsVmFsdWVJdGVtUHJvdmlkZXINCisJaW1wbGVtZW50cw0KKwkJSUVkaXRpbmdEb21haW5JdGVtUHJvdmlkZXIsDQorCQlJU3RydWN0dXJlZEl0ZW1Db250ZW50UHJvdmlkZXIsDQorCQlJVHJlZUl0ZW1Db250ZW50UHJvdmlkZXIsDQorCQlJSXRlbUxhYmVsUHJvdmlkZXIsDQorCQlJSXRlbVByb3BlcnR5U291cmNlIHsNCisJLyoqDQorCSAqIFRoaXMgY29uc3RydWN0cyBhbiBpbnN0YW5jZSBmcm9tIGEgZmFjdG9yeSBhbmQgYSBub3RpZmllci4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBEZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlSXRlbVByb3ZpZGVyKEFkYXB0ZXJGYWN0b3J5IGFkYXB0ZXJGYWN0b3J5KSB7DQorCQlzdXBlcihhZGFwdGVyRmFjdG9yeSk7DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgcmV0dXJucyB0aGUgcHJvcGVydHkgZGVzY3JpcHRvcnMgZm9yIHRoZSBhZGFwdGVkIGNsYXNzLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJQE92ZXJyaWRlDQorCXB1YmxpYyBMaXN0PElJdGVtUHJvcGVydHlEZXNjcmlwdG9yPiBnZXRQcm9wZXJ0eURlc2NyaXB0b3JzKE9iamVjdCBvYmplY3QpIHsNCisJCWlmIChpdGVtUHJvcGVydHlEZXNjcmlwdG9ycyA9PSBudWxsKSB7DQorCQkJc3VwZXIuZ2V0UHJvcGVydHlEZXNjcmlwdG9ycyhvYmplY3QpOw0KKw0KKwkJCWFkZEUxUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCk7DQorCQkJYWRkRTJQcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0KTsNCisJCQlhZGRFM1Byb3BlcnR5RGVzY3JpcHRvcihvYmplY3QpOw0KKwkJCWFkZEU0UHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCk7DQorCQkJYWRkSTFQcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0KTsNCisJCQlhZGRJMlByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QpOw0KKwkJCWFkZEkzUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCk7DQorCQkJYWRkSTRQcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0KTsNCisJCQlhZGRUMVByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QpOw0KKwkJCWFkZFQyUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCk7DQorCQkJYWRkVDNQcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0KTsNCisJCQlhZGRUNFByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QpOw0KKwkJCWFkZFIxUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCk7DQorCQkJYWRkUjJQcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0KTsNCisJCQlhZGRSM1Byb3BlcnR5RGVzY3JpcHRvcihvYmplY3QpOw0KKwkJCWFkZFI0UHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCk7DQorCQkJYWRkRTEyUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCk7DQorCQkJYWRkRTEzUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCk7DQorCQkJYWRkRTE0UHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCk7DQorCQkJYWRkRTIxUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCk7DQorCQkJYWRkRTIzUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCk7DQorCQkJYWRkRTI0UHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCk7DQorCQkJYWRkRTMxUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCk7DQorCQkJYWRkRTMyUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCk7DQorCQkJYWRkRTM0UHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCk7DQorCQkJYWRkRTQxUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCk7DQorCQkJYWRkRTQyUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCk7DQorCQkJYWRkRTQzUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCk7DQorCQkJYWRkSTEyUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCk7DQorCQkJYWRkSTEzUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCk7DQorCQkJYWRkSTE0UHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCk7DQorCQkJYWRkSTIxUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCk7DQorCQkJYWRkSTIzUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCk7DQorCQkJYWRkSTI0UHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCk7DQorCQkJYWRkSTMxUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCk7DQorCQkJYWRkSTMyUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCk7DQorCQkJYWRkSTM0UHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCk7DQorCQkJYWRkSTQxUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCk7DQorCQkJYWRkSTQyUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCk7DQorCQkJYWRkSTQzUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCk7DQorCQkJYWRkUlByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QpOw0KKwkJCWFkZEluY2lkZW5jZTFQcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0KTsNCisJCQlhZGRJbmNpZGVuY2UyUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCk7DQorCQkJYWRkSW5jaWRlbmNlM1Byb3BlcnR5RGVzY3JpcHRvcihvYmplY3QpOw0KKwkJCWFkZEluY2lkZW5jZTRQcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0KTsNCisJCQlhZGRJbmNpZGVuY2UxMlByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QpOw0KKwkJCWFkZEluY2lkZW5jZTIxUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCk7DQorCQkJYWRkSW5jaWRlbmNlMzFQcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0KTsNCisJCQlhZGRJbmNpZGVuY2U0MVByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QpOw0KKwkJCWFkZEluY2lkZW5jZTEzUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCk7DQorCQkJYWRkSW5jaWRlbmNlMjNQcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0KTsNCisJCQlhZGRJbmNpZGVuY2UzMlByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QpOw0KKwkJCWFkZEluY2lkZW5jZTQyUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCk7DQorCQkJYWRkSW5jaWRlbmNlMTRQcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0KTsNCisJCQlhZGRJbmNpZGVuY2UyNFByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QpOw0KKwkJCWFkZEluY2lkZW5jZTM0UHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCk7DQorCQkJYWRkSW5jaWRlbmNlNDNQcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0KTsNCisJCQlhZGREaXNlYXNlRGVhdGhzMVByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QpOw0KKwkJCWFkZERpc2Vhc2VEZWF0aHMyUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCk7DQorCQkJYWRkRGlzZWFzZURlYXRoczNQcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0KTsNCisJCQlhZGREaXNlYXNlRGVhdGhzNFByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QpOw0KKwkJCWFkZERpc2Vhc2VEZWF0aHMxMlByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QpOw0KKwkJCWFkZERpc2Vhc2VEZWF0aHMyMVByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QpOw0KKwkJCWFkZERpc2Vhc2VEZWF0aHMzMVByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QpOw0KKwkJCWFkZERpc2Vhc2VEZWF0aHM0MVByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QpOw0KKwkJCWFkZERpc2Vhc2VEZWF0aHMxM1Byb3BlcnR5RGVzY3JpcHRvcihvYmplY3QpOw0KKwkJCWFkZERpc2Vhc2VEZWF0aHMyM1Byb3BlcnR5RGVzY3JpcHRvcihvYmplY3QpOw0KKwkJCWFkZERpc2Vhc2VEZWF0aHMzMlByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QpOw0KKwkJCWFkZERpc2Vhc2VEZWF0aHM0MlByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QpOw0KKwkJCWFkZERpc2Vhc2VEZWF0aHMxNFByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QpOw0KKwkJCWFkZERpc2Vhc2VEZWF0aHMyNFByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QpOw0KKwkJCWFkZERpc2Vhc2VEZWF0aHMzNFByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QpOw0KKwkJCWFkZERpc2Vhc2VEZWF0aHM0M1Byb3BlcnR5RGVzY3JpcHRvcihvYmplY3QpOw0KKwkJfQ0KKwkJcmV0dXJuIGl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzOw0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIGFkZHMgYSBwcm9wZXJ0eSBkZXNjcmlwdG9yIGZvciB0aGUgRTEgZmVhdHVyZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCB2b2lkIGFkZEUxUHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdCBvYmplY3QpIHsNCisJCWl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzLmFkZA0KKwkJCShjcmVhdGVJdGVtUHJvcGVydHlEZXNjcmlwdG9yDQorCQkJCSgoKENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnkpYWRhcHRlckZhY3RvcnkpLmdldFJvb3RBZGFwdGVyRmFjdG9yeSgpLA0KKwkJCQkgZ2V0UmVzb3VyY2VMb2NhdG9yKCksDQorCQkJCSBnZXRTdHJpbmcoIl9VSV9EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX0UxX2ZlYXR1cmUiKSwNCisJCQkJIGdldFN0cmluZygiX1VJX1Byb3BlcnR5RGVzY3JpcHRvcl9kZXNjcmlwdGlvbiIsICJfVUlfRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9FMV9mZWF0dXJlIiwgIl9VSV9EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX3R5cGUiKSwNCisJCQkJIFZlY3RvclBhY2thZ2UuTGl0ZXJhbHMuREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0UxLA0KKwkJCQkgdHJ1ZSwNCisJCQkJIGZhbHNlLA0KKwkJCQkgZmFsc2UsDQorCQkJCSBJdGVtUHJvcGVydHlEZXNjcmlwdG9yLlJFQUxfVkFMVUVfSU1BR0UsDQorCQkJCSBudWxsLA0KKwkJCQkgbnVsbCkpOw0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIGFkZHMgYSBwcm9wZXJ0eSBkZXNjcmlwdG9yIGZvciB0aGUgRTIgZmVhdHVyZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCB2b2lkIGFkZEUyUHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdCBvYmplY3QpIHsNCisJCWl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzLmFkZA0KKwkJCShjcmVhdGVJdGVtUHJvcGVydHlEZXNjcmlwdG9yDQorCQkJCSgoKENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnkpYWRhcHRlckZhY3RvcnkpLmdldFJvb3RBZGFwdGVyRmFjdG9yeSgpLA0KKwkJCQkgZ2V0UmVzb3VyY2VMb2NhdG9yKCksDQorCQkJCSBnZXRTdHJpbmcoIl9VSV9EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX0UyX2ZlYXR1cmUiKSwNCisJCQkJIGdldFN0cmluZygiX1VJX1Byb3BlcnR5RGVzY3JpcHRvcl9kZXNjcmlwdGlvbiIsICJfVUlfRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9FMl9mZWF0dXJlIiwgIl9VSV9EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX3R5cGUiKSwNCisJCQkJIFZlY3RvclBhY2thZ2UuTGl0ZXJhbHMuREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0UyLA0KKwkJCQkgdHJ1ZSwNCisJCQkJIGZhbHNlLA0KKwkJCQkgZmFsc2UsDQorCQkJCSBJdGVtUHJvcGVydHlEZXNjcmlwdG9yLlJFQUxfVkFMVUVfSU1BR0UsDQorCQkJCSBudWxsLA0KKwkJCQkgbnVsbCkpOw0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIGFkZHMgYSBwcm9wZXJ0eSBkZXNjcmlwdG9yIGZvciB0aGUgRTMgZmVhdHVyZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCB2b2lkIGFkZEUzUHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdCBvYmplY3QpIHsNCisJCWl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzLmFkZA0KKwkJCShjcmVhdGVJdGVtUHJvcGVydHlEZXNjcmlwdG9yDQorCQkJCSgoKENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnkpYWRhcHRlckZhY3RvcnkpLmdldFJvb3RBZGFwdGVyRmFjdG9yeSgpLA0KKwkJCQkgZ2V0UmVzb3VyY2VMb2NhdG9yKCksDQorCQkJCSBnZXRTdHJpbmcoIl9VSV9EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX0UzX2ZlYXR1cmUiKSwNCisJCQkJIGdldFN0cmluZygiX1VJX1Byb3BlcnR5RGVzY3JpcHRvcl9kZXNjcmlwdGlvbiIsICJfVUlfRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9FM19mZWF0dXJlIiwgIl9VSV9EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX3R5cGUiKSwNCisJCQkJIFZlY3RvclBhY2thZ2UuTGl0ZXJhbHMuREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0UzLA0KKwkJCQkgdHJ1ZSwNCisJCQkJIGZhbHNlLA0KKwkJCQkgZmFsc2UsDQorCQkJCSBJdGVtUHJvcGVydHlEZXNjcmlwdG9yLlJFQUxfVkFMVUVfSU1BR0UsDQorCQkJCSBudWxsLA0KKwkJCQkgbnVsbCkpOw0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIGFkZHMgYSBwcm9wZXJ0eSBkZXNjcmlwdG9yIGZvciB0aGUgRTQgZmVhdHVyZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCB2b2lkIGFkZEU0UHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdCBvYmplY3QpIHsNCisJCWl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzLmFkZA0KKwkJCShjcmVhdGVJdGVtUHJvcGVydHlEZXNjcmlwdG9yDQorCQkJCSgoKENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnkpYWRhcHRlckZhY3RvcnkpLmdldFJvb3RBZGFwdGVyRmFjdG9yeSgpLA0KKwkJCQkgZ2V0UmVzb3VyY2VMb2NhdG9yKCksDQorCQkJCSBnZXRTdHJpbmcoIl9VSV9EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX0U0X2ZlYXR1cmUiKSwNCisJCQkJIGdldFN0cmluZygiX1VJX1Byb3BlcnR5RGVzY3JpcHRvcl9kZXNjcmlwdGlvbiIsICJfVUlfRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9FNF9mZWF0dXJlIiwgIl9VSV9EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX3R5cGUiKSwNCisJCQkJIFZlY3RvclBhY2thZ2UuTGl0ZXJhbHMuREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0U0LA0KKwkJCQkgdHJ1ZSwNCisJCQkJIGZhbHNlLA0KKwkJCQkgZmFsc2UsDQorCQkJCSBJdGVtUHJvcGVydHlEZXNjcmlwdG9yLlJFQUxfVkFMVUVfSU1BR0UsDQorCQkJCSBudWxsLA0KKwkJCQkgbnVsbCkpOw0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIGFkZHMgYSBwcm9wZXJ0eSBkZXNjcmlwdG9yIGZvciB0aGUgSTEgZmVhdHVyZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCB2b2lkIGFkZEkxUHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdCBvYmplY3QpIHsNCisJCWl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzLmFkZA0KKwkJCShjcmVhdGVJdGVtUHJvcGVydHlEZXNjcmlwdG9yDQorCQkJCSgoKENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnkpYWRhcHRlckZhY3RvcnkpLmdldFJvb3RBZGFwdGVyRmFjdG9yeSgpLA0KKwkJCQkgZ2V0UmVzb3VyY2VMb2NhdG9yKCksDQorCQkJCSBnZXRTdHJpbmcoIl9VSV9EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX0kxX2ZlYXR1cmUiKSwNCisJCQkJIGdldFN0cmluZygiX1VJX1Byb3BlcnR5RGVzY3JpcHRvcl9kZXNjcmlwdGlvbiIsICJfVUlfRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9JMV9mZWF0dXJlIiwgIl9VSV9EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX3R5cGUiKSwNCisJCQkJIFZlY3RvclBhY2thZ2UuTGl0ZXJhbHMuREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0kxLA0KKwkJCQkgdHJ1ZSwNCisJCQkJIGZhbHNlLA0KKwkJCQkgZmFsc2UsDQorCQkJCSBJdGVtUHJvcGVydHlEZXNjcmlwdG9yLlJFQUxfVkFMVUVfSU1BR0UsDQorCQkJCSBudWxsLA0KKwkJCQkgbnVsbCkpOw0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIGFkZHMgYSBwcm9wZXJ0eSBkZXNjcmlwdG9yIGZvciB0aGUgSTIgZmVhdHVyZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCB2b2lkIGFkZEkyUHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdCBvYmplY3QpIHsNCisJCWl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzLmFkZA0KKwkJCShjcmVhdGVJdGVtUHJvcGVydHlEZXNjcmlwdG9yDQorCQkJCSgoKENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnkpYWRhcHRlckZhY3RvcnkpLmdldFJvb3RBZGFwdGVyRmFjdG9yeSgpLA0KKwkJCQkgZ2V0UmVzb3VyY2VMb2NhdG9yKCksDQorCQkJCSBnZXRTdHJpbmcoIl9VSV9EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX0kyX2ZlYXR1cmUiKSwNCisJCQkJIGdldFN0cmluZygiX1VJX1Byb3BlcnR5RGVzY3JpcHRvcl9kZXNjcmlwdGlvbiIsICJfVUlfRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9JMl9mZWF0dXJlIiwgIl9VSV9EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX3R5cGUiKSwNCisJCQkJIFZlY3RvclBhY2thZ2UuTGl0ZXJhbHMuREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0kyLA0KKwkJCQkgdHJ1ZSwNCisJCQkJIGZhbHNlLA0KKwkJCQkgZmFsc2UsDQorCQkJCSBJdGVtUHJvcGVydHlEZXNjcmlwdG9yLlJFQUxfVkFMVUVfSU1BR0UsDQorCQkJCSBudWxsLA0KKwkJCQkgbnVsbCkpOw0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIGFkZHMgYSBwcm9wZXJ0eSBkZXNjcmlwdG9yIGZvciB0aGUgSTMgZmVhdHVyZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCB2b2lkIGFkZEkzUHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdCBvYmplY3QpIHsNCisJCWl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzLmFkZA0KKwkJCShjcmVhdGVJdGVtUHJvcGVydHlEZXNjcmlwdG9yDQorCQkJCSgoKENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnkpYWRhcHRlckZhY3RvcnkpLmdldFJvb3RBZGFwdGVyRmFjdG9yeSgpLA0KKwkJCQkgZ2V0UmVzb3VyY2VMb2NhdG9yKCksDQorCQkJCSBnZXRTdHJpbmcoIl9VSV9EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX0kzX2ZlYXR1cmUiKSwNCisJCQkJIGdldFN0cmluZygiX1VJX1Byb3BlcnR5RGVzY3JpcHRvcl9kZXNjcmlwdGlvbiIsICJfVUlfRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9JM19mZWF0dXJlIiwgIl9VSV9EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX3R5cGUiKSwNCisJCQkJIFZlY3RvclBhY2thZ2UuTGl0ZXJhbHMuREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0kzLA0KKwkJCQkgdHJ1ZSwNCisJCQkJIGZhbHNlLA0KKwkJCQkgZmFsc2UsDQorCQkJCSBJdGVtUHJvcGVydHlEZXNjcmlwdG9yLlJFQUxfVkFMVUVfSU1BR0UsDQorCQkJCSBudWxsLA0KKwkJCQkgbnVsbCkpOw0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIGFkZHMgYSBwcm9wZXJ0eSBkZXNjcmlwdG9yIGZvciB0aGUgSTQgZmVhdHVyZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCB2b2lkIGFkZEk0UHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdCBvYmplY3QpIHsNCisJCWl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzLmFkZA0KKwkJCShjcmVhdGVJdGVtUHJvcGVydHlEZXNjcmlwdG9yDQorCQkJCSgoKENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnkpYWRhcHRlckZhY3RvcnkpLmdldFJvb3RBZGFwdGVyRmFjdG9yeSgpLA0KKwkJCQkgZ2V0UmVzb3VyY2VMb2NhdG9yKCksDQorCQkJCSBnZXRTdHJpbmcoIl9VSV9EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX0k0X2ZlYXR1cmUiKSwNCisJCQkJIGdldFN0cmluZygiX1VJX1Byb3BlcnR5RGVzY3JpcHRvcl9kZXNjcmlwdGlvbiIsICJfVUlfRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9JNF9mZWF0dXJlIiwgIl9VSV9EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX3R5cGUiKSwNCisJCQkJIFZlY3RvclBhY2thZ2UuTGl0ZXJhbHMuREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0k0LA0KKwkJCQkgdHJ1ZSwNCisJCQkJIGZhbHNlLA0KKwkJCQkgZmFsc2UsDQorCQkJCSBJdGVtUHJvcGVydHlEZXNjcmlwdG9yLlJFQUxfVkFMVUVfSU1BR0UsDQorCQkJCSBudWxsLA0KKwkJCQkgbnVsbCkpOw0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIGFkZHMgYSBwcm9wZXJ0eSBkZXNjcmlwdG9yIGZvciB0aGUgVDEgZmVhdHVyZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCB2b2lkIGFkZFQxUHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdCBvYmplY3QpIHsNCisJCWl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzLmFkZA0KKwkJCShjcmVhdGVJdGVtUHJvcGVydHlEZXNjcmlwdG9yDQorCQkJCSgoKENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnkpYWRhcHRlckZhY3RvcnkpLmdldFJvb3RBZGFwdGVyRmFjdG9yeSgpLA0KKwkJCQkgZ2V0UmVzb3VyY2VMb2NhdG9yKCksDQorCQkJCSBnZXRTdHJpbmcoIl9VSV9EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX1QxX2ZlYXR1cmUiKSwNCisJCQkJIGdldFN0cmluZygiX1VJX1Byb3BlcnR5RGVzY3JpcHRvcl9kZXNjcmlwdGlvbiIsICJfVUlfRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9UMV9mZWF0dXJlIiwgIl9VSV9EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX3R5cGUiKSwNCisJCQkJIFZlY3RvclBhY2thZ2UuTGl0ZXJhbHMuREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX1QxLA0KKwkJCQkgdHJ1ZSwNCisJCQkJIGZhbHNlLA0KKwkJCQkgZmFsc2UsDQorCQkJCSBJdGVtUHJvcGVydHlEZXNjcmlwdG9yLlJFQUxfVkFMVUVfSU1BR0UsDQorCQkJCSBudWxsLA0KKwkJCQkgbnVsbCkpOw0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIGFkZHMgYSBwcm9wZXJ0eSBkZXNjcmlwdG9yIGZvciB0aGUgVDIgZmVhdHVyZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCB2b2lkIGFkZFQyUHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdCBvYmplY3QpIHsNCisJCWl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzLmFkZA0KKwkJCShjcmVhdGVJdGVtUHJvcGVydHlEZXNjcmlwdG9yDQorCQkJCSgoKENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnkpYWRhcHRlckZhY3RvcnkpLmdldFJvb3RBZGFwdGVyRmFjdG9yeSgpLA0KKwkJCQkgZ2V0UmVzb3VyY2VMb2NhdG9yKCksDQorCQkJCSBnZXRTdHJpbmcoIl9VSV9EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX1QyX2ZlYXR1cmUiKSwNCisJCQkJIGdldFN0cmluZygiX1VJX1Byb3BlcnR5RGVzY3JpcHRvcl9kZXNjcmlwdGlvbiIsICJfVUlfRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9UMl9mZWF0dXJlIiwgIl9VSV9EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX3R5cGUiKSwNCisJCQkJIFZlY3RvclBhY2thZ2UuTGl0ZXJhbHMuREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX1QyLA0KKwkJCQkgdHJ1ZSwNCisJCQkJIGZhbHNlLA0KKwkJCQkgZmFsc2UsDQorCQkJCSBJdGVtUHJvcGVydHlEZXNjcmlwdG9yLlJFQUxfVkFMVUVfSU1BR0UsDQorCQkJCSBudWxsLA0KKwkJCQkgbnVsbCkpOw0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIGFkZHMgYSBwcm9wZXJ0eSBkZXNjcmlwdG9yIGZvciB0aGUgVDMgZmVhdHVyZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCB2b2lkIGFkZFQzUHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdCBvYmplY3QpIHsNCisJCWl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzLmFkZA0KKwkJCShjcmVhdGVJdGVtUHJvcGVydHlEZXNjcmlwdG9yDQorCQkJCSgoKENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnkpYWRhcHRlckZhY3RvcnkpLmdldFJvb3RBZGFwdGVyRmFjdG9yeSgpLA0KKwkJCQkgZ2V0UmVzb3VyY2VMb2NhdG9yKCksDQorCQkJCSBnZXRTdHJpbmcoIl9VSV9EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX1QzX2ZlYXR1cmUiKSwNCisJCQkJIGdldFN0cmluZygiX1VJX1Byb3BlcnR5RGVzY3JpcHRvcl9kZXNjcmlwdGlvbiIsICJfVUlfRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9UM19mZWF0dXJlIiwgIl9VSV9EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX3R5cGUiKSwNCisJCQkJIFZlY3RvclBhY2thZ2UuTGl0ZXJhbHMuREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX1QzLA0KKwkJCQkgdHJ1ZSwNCisJCQkJIGZhbHNlLA0KKwkJCQkgZmFsc2UsDQorCQkJCSBJdGVtUHJvcGVydHlEZXNjcmlwdG9yLlJFQUxfVkFMVUVfSU1BR0UsDQorCQkJCSBudWxsLA0KKwkJCQkgbnVsbCkpOw0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIGFkZHMgYSBwcm9wZXJ0eSBkZXNjcmlwdG9yIGZvciB0aGUgVDQgZmVhdHVyZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCB2b2lkIGFkZFQ0UHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdCBvYmplY3QpIHsNCisJCWl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzLmFkZA0KKwkJCShjcmVhdGVJdGVtUHJvcGVydHlEZXNjcmlwdG9yDQorCQkJCSgoKENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnkpYWRhcHRlckZhY3RvcnkpLmdldFJvb3RBZGFwdGVyRmFjdG9yeSgpLA0KKwkJCQkgZ2V0UmVzb3VyY2VMb2NhdG9yKCksDQorCQkJCSBnZXRTdHJpbmcoIl9VSV9EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX1Q0X2ZlYXR1cmUiKSwNCisJCQkJIGdldFN0cmluZygiX1VJX1Byb3BlcnR5RGVzY3JpcHRvcl9kZXNjcmlwdGlvbiIsICJfVUlfRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9UNF9mZWF0dXJlIiwgIl9VSV9EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX3R5cGUiKSwNCisJCQkJIFZlY3RvclBhY2thZ2UuTGl0ZXJhbHMuREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX1Q0LA0KKwkJCQkgdHJ1ZSwNCisJCQkJIGZhbHNlLA0KKwkJCQkgZmFsc2UsDQorCQkJCSBJdGVtUHJvcGVydHlEZXNjcmlwdG9yLlJFQUxfVkFMVUVfSU1BR0UsDQorCQkJCSBudWxsLA0KKwkJCQkgbnVsbCkpOw0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIGFkZHMgYSBwcm9wZXJ0eSBkZXNjcmlwdG9yIGZvciB0aGUgUjEgZmVhdHVyZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCB2b2lkIGFkZFIxUHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdCBvYmplY3QpIHsNCisJCWl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzLmFkZA0KKwkJCShjcmVhdGVJdGVtUHJvcGVydHlEZXNjcmlwdG9yDQorCQkJCSgoKENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnkpYWRhcHRlckZhY3RvcnkpLmdldFJvb3RBZGFwdGVyRmFjdG9yeSgpLA0KKwkJCQkgZ2V0UmVzb3VyY2VMb2NhdG9yKCksDQorCQkJCSBnZXRTdHJpbmcoIl9VSV9EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX1IxX2ZlYXR1cmUiKSwNCisJCQkJIGdldFN0cmluZygiX1VJX1Byb3BlcnR5RGVzY3JpcHRvcl9kZXNjcmlwdGlvbiIsICJfVUlfRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9SMV9mZWF0dXJlIiwgIl9VSV9EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX3R5cGUiKSwNCisJCQkJIFZlY3RvclBhY2thZ2UuTGl0ZXJhbHMuREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX1IxLA0KKwkJCQkgdHJ1ZSwNCisJCQkJIGZhbHNlLA0KKwkJCQkgZmFsc2UsDQorCQkJCSBJdGVtUHJvcGVydHlEZXNjcmlwdG9yLlJFQUxfVkFMVUVfSU1BR0UsDQorCQkJCSBudWxsLA0KKwkJCQkgbnVsbCkpOw0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIGFkZHMgYSBwcm9wZXJ0eSBkZXNjcmlwdG9yIGZvciB0aGUgUjIgZmVhdHVyZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCB2b2lkIGFkZFIyUHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdCBvYmplY3QpIHsNCisJCWl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzLmFkZA0KKwkJCShjcmVhdGVJdGVtUHJvcGVydHlEZXNjcmlwdG9yDQorCQkJCSgoKENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnkpYWRhcHRlckZhY3RvcnkpLmdldFJvb3RBZGFwdGVyRmFjdG9yeSgpLA0KKwkJCQkgZ2V0UmVzb3VyY2VMb2NhdG9yKCksDQorCQkJCSBnZXRTdHJpbmcoIl9VSV9EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX1IyX2ZlYXR1cmUiKSwNCisJCQkJIGdldFN0cmluZygiX1VJX1Byb3BlcnR5RGVzY3JpcHRvcl9kZXNjcmlwdGlvbiIsICJfVUlfRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9SMl9mZWF0dXJlIiwgIl9VSV9EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX3R5cGUiKSwNCisJCQkJIFZlY3RvclBhY2thZ2UuTGl0ZXJhbHMuREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX1IyLA0KKwkJCQkgdHJ1ZSwNCisJCQkJIGZhbHNlLA0KKwkJCQkgZmFsc2UsDQorCQkJCSBJdGVtUHJvcGVydHlEZXNjcmlwdG9yLlJFQUxfVkFMVUVfSU1BR0UsDQorCQkJCSBudWxsLA0KKwkJCQkgbnVsbCkpOw0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIGFkZHMgYSBwcm9wZXJ0eSBkZXNjcmlwdG9yIGZvciB0aGUgUjMgZmVhdHVyZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCB2b2lkIGFkZFIzUHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdCBvYmplY3QpIHsNCisJCWl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzLmFkZA0KKwkJCShjcmVhdGVJdGVtUHJvcGVydHlEZXNjcmlwdG9yDQorCQkJCSgoKENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnkpYWRhcHRlckZhY3RvcnkpLmdldFJvb3RBZGFwdGVyRmFjdG9yeSgpLA0KKwkJCQkgZ2V0UmVzb3VyY2VMb2NhdG9yKCksDQorCQkJCSBnZXRTdHJpbmcoIl9VSV9EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX1IzX2ZlYXR1cmUiKSwNCisJCQkJIGdldFN0cmluZygiX1VJX1Byb3BlcnR5RGVzY3JpcHRvcl9kZXNjcmlwdGlvbiIsICJfVUlfRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9SM19mZWF0dXJlIiwgIl9VSV9EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX3R5cGUiKSwNCisJCQkJIFZlY3RvclBhY2thZ2UuTGl0ZXJhbHMuREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX1IzLA0KKwkJCQkgdHJ1ZSwNCisJCQkJIGZhbHNlLA0KKwkJCQkgZmFsc2UsDQorCQkJCSBJdGVtUHJvcGVydHlEZXNjcmlwdG9yLlJFQUxfVkFMVUVfSU1BR0UsDQorCQkJCSBudWxsLA0KKwkJCQkgbnVsbCkpOw0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIGFkZHMgYSBwcm9wZXJ0eSBkZXNjcmlwdG9yIGZvciB0aGUgUjQgZmVhdHVyZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCB2b2lkIGFkZFI0UHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdCBvYmplY3QpIHsNCisJCWl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzLmFkZA0KKwkJCShjcmVhdGVJdGVtUHJvcGVydHlEZXNjcmlwdG9yDQorCQkJCSgoKENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnkpYWRhcHRlckZhY3RvcnkpLmdldFJvb3RBZGFwdGVyRmFjdG9yeSgpLA0KKwkJCQkgZ2V0UmVzb3VyY2VMb2NhdG9yKCksDQorCQkJCSBnZXRTdHJpbmcoIl9VSV9EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX1I0X2ZlYXR1cmUiKSwNCisJCQkJIGdldFN0cmluZygiX1VJX1Byb3BlcnR5RGVzY3JpcHRvcl9kZXNjcmlwdGlvbiIsICJfVUlfRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9SNF9mZWF0dXJlIiwgIl9VSV9EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX3R5cGUiKSwNCisJCQkJIFZlY3RvclBhY2thZ2UuTGl0ZXJhbHMuREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX1I0LA0KKwkJCQkgdHJ1ZSwNCisJCQkJIGZhbHNlLA0KKwkJCQkgZmFsc2UsDQorCQkJCSBJdGVtUHJvcGVydHlEZXNjcmlwdG9yLlJFQUxfVkFMVUVfSU1BR0UsDQorCQkJCSBudWxsLA0KKwkJCQkgbnVsbCkpOw0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIGFkZHMgYSBwcm9wZXJ0eSBkZXNjcmlwdG9yIGZvciB0aGUgRTEyIGZlYXR1cmUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgdm9pZCBhZGRFMTJQcm9wZXJ0eURlc2NyaXB0b3IoT2JqZWN0IG9iamVjdCkgew0KKwkJaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMuYWRkDQorCQkJKGNyZWF0ZUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3INCisJCQkJKCgoQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSlhZGFwdGVyRmFjdG9yeSkuZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCksDQorCQkJCSBnZXRSZXNvdXJjZUxvY2F0b3IoKSwNCisJCQkJIGdldFN0cmluZygiX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfRTEyX2ZlYXR1cmUiKSwNCisJCQkJIGdldFN0cmluZygiX1VJX1Byb3BlcnR5RGVzY3JpcHRvcl9kZXNjcmlwdGlvbiIsICJfVUlfRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9FMTJfZmVhdHVyZSIsICJfVUlfRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV90eXBlIiksDQorCQkJCSBWZWN0b3JQYWNrYWdlLkxpdGVyYWxzLkRFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19FMTIsDQorCQkJCSB0cnVlLA0KKwkJCQkgZmFsc2UsDQorCQkJCSBmYWxzZSwNCisJCQkJIEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IuUkVBTF9WQUxVRV9JTUFHRSwNCisJCQkJIG51bGwsDQorCQkJCSBudWxsKSk7DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgYWRkcyBhIHByb3BlcnR5IGRlc2NyaXB0b3IgZm9yIHRoZSBFMTMgZmVhdHVyZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCB2b2lkIGFkZEUxM1Byb3BlcnR5RGVzY3JpcHRvcihPYmplY3Qgb2JqZWN0KSB7DQorCQlpdGVtUHJvcGVydHlEZXNjcmlwdG9ycy5hZGQNCisJCQkoY3JlYXRlSXRlbVByb3BlcnR5RGVzY3JpcHRvcg0KKwkJCQkoKChDb21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5KWFkYXB0ZXJGYWN0b3J5KS5nZXRSb290QWRhcHRlckZhY3RvcnkoKSwNCisJCQkJIGdldFJlc291cmNlTG9jYXRvcigpLA0KKwkJCQkgZ2V0U3RyaW5nKCJfVUlfRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9FMTNfZmVhdHVyZSIpLA0KKwkJCQkgZ2V0U3RyaW5nKCJfVUlfUHJvcGVydHlEZXNjcmlwdG9yX2Rlc2NyaXB0aW9uIiwgIl9VSV9EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX0UxM19mZWF0dXJlIiwgIl9VSV9EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX3R5cGUiKSwNCisJCQkJIFZlY3RvclBhY2thZ2UuTGl0ZXJhbHMuREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0UxMywNCisJCQkJIHRydWUsDQorCQkJCSBmYWxzZSwNCisJCQkJIGZhbHNlLA0KKwkJCQkgSXRlbVByb3BlcnR5RGVzY3JpcHRvci5SRUFMX1ZBTFVFX0lNQUdFLA0KKwkJCQkgbnVsbCwNCisJCQkJIG51bGwpKTsNCisJfQ0KKw0KKwkvKioNCisJICogVGhpcyBhZGRzIGEgcHJvcGVydHkgZGVzY3JpcHRvciBmb3IgdGhlIEUxNCBmZWF0dXJlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIHZvaWQgYWRkRTE0UHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdCBvYmplY3QpIHsNCisJCWl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzLmFkZA0KKwkJCShjcmVhdGVJdGVtUHJvcGVydHlEZXNjcmlwdG9yDQorCQkJCSgoKENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnkpYWRhcHRlckZhY3RvcnkpLmdldFJvb3RBZGFwdGVyRmFjdG9yeSgpLA0KKwkJCQkgZ2V0UmVzb3VyY2VMb2NhdG9yKCksDQorCQkJCSBnZXRTdHJpbmcoIl9VSV9EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX0UxNF9mZWF0dXJlIiksDQorCQkJCSBnZXRTdHJpbmcoIl9VSV9Qcm9wZXJ0eURlc2NyaXB0b3JfZGVzY3JpcHRpb24iLCAiX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfRTE0X2ZlYXR1cmUiLCAiX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfdHlwZSIpLA0KKwkJCQkgVmVjdG9yUGFja2FnZS5MaXRlcmFscy5ERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fRTE0LA0KKwkJCQkgdHJ1ZSwNCisJCQkJIGZhbHNlLA0KKwkJCQkgZmFsc2UsDQorCQkJCSBJdGVtUHJvcGVydHlEZXNjcmlwdG9yLlJFQUxfVkFMVUVfSU1BR0UsDQorCQkJCSBudWxsLA0KKwkJCQkgbnVsbCkpOw0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIGFkZHMgYSBwcm9wZXJ0eSBkZXNjcmlwdG9yIGZvciB0aGUgRTIxIGZlYXR1cmUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgdm9pZCBhZGRFMjFQcm9wZXJ0eURlc2NyaXB0b3IoT2JqZWN0IG9iamVjdCkgew0KKwkJaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMuYWRkDQorCQkJKGNyZWF0ZUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3INCisJCQkJKCgoQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSlhZGFwdGVyRmFjdG9yeSkuZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCksDQorCQkJCSBnZXRSZXNvdXJjZUxvY2F0b3IoKSwNCisJCQkJIGdldFN0cmluZygiX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfRTIxX2ZlYXR1cmUiKSwNCisJCQkJIGdldFN0cmluZygiX1VJX1Byb3BlcnR5RGVzY3JpcHRvcl9kZXNjcmlwdGlvbiIsICJfVUlfRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9FMjFfZmVhdHVyZSIsICJfVUlfRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV90eXBlIiksDQorCQkJCSBWZWN0b3JQYWNrYWdlLkxpdGVyYWxzLkRFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19FMjEsDQorCQkJCSB0cnVlLA0KKwkJCQkgZmFsc2UsDQorCQkJCSBmYWxzZSwNCisJCQkJIEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IuUkVBTF9WQUxVRV9JTUFHRSwNCisJCQkJIG51bGwsDQorCQkJCSBudWxsKSk7DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgYWRkcyBhIHByb3BlcnR5IGRlc2NyaXB0b3IgZm9yIHRoZSBFMjMgZmVhdHVyZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCB2b2lkIGFkZEUyM1Byb3BlcnR5RGVzY3JpcHRvcihPYmplY3Qgb2JqZWN0KSB7DQorCQlpdGVtUHJvcGVydHlEZXNjcmlwdG9ycy5hZGQNCisJCQkoY3JlYXRlSXRlbVByb3BlcnR5RGVzY3JpcHRvcg0KKwkJCQkoKChDb21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5KWFkYXB0ZXJGYWN0b3J5KS5nZXRSb290QWRhcHRlckZhY3RvcnkoKSwNCisJCQkJIGdldFJlc291cmNlTG9jYXRvcigpLA0KKwkJCQkgZ2V0U3RyaW5nKCJfVUlfRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9FMjNfZmVhdHVyZSIpLA0KKwkJCQkgZ2V0U3RyaW5nKCJfVUlfUHJvcGVydHlEZXNjcmlwdG9yX2Rlc2NyaXB0aW9uIiwgIl9VSV9EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX0UyM19mZWF0dXJlIiwgIl9VSV9EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX3R5cGUiKSwNCisJCQkJIFZlY3RvclBhY2thZ2UuTGl0ZXJhbHMuREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0UyMywNCisJCQkJIHRydWUsDQorCQkJCSBmYWxzZSwNCisJCQkJIGZhbHNlLA0KKwkJCQkgSXRlbVByb3BlcnR5RGVzY3JpcHRvci5SRUFMX1ZBTFVFX0lNQUdFLA0KKwkJCQkgbnVsbCwNCisJCQkJIG51bGwpKTsNCisJfQ0KKw0KKwkvKioNCisJICogVGhpcyBhZGRzIGEgcHJvcGVydHkgZGVzY3JpcHRvciBmb3IgdGhlIEUyNCBmZWF0dXJlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIHZvaWQgYWRkRTI0UHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdCBvYmplY3QpIHsNCisJCWl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzLmFkZA0KKwkJCShjcmVhdGVJdGVtUHJvcGVydHlEZXNjcmlwdG9yDQorCQkJCSgoKENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnkpYWRhcHRlckZhY3RvcnkpLmdldFJvb3RBZGFwdGVyRmFjdG9yeSgpLA0KKwkJCQkgZ2V0UmVzb3VyY2VMb2NhdG9yKCksDQorCQkJCSBnZXRTdHJpbmcoIl9VSV9EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX0UyNF9mZWF0dXJlIiksDQorCQkJCSBnZXRTdHJpbmcoIl9VSV9Qcm9wZXJ0eURlc2NyaXB0b3JfZGVzY3JpcHRpb24iLCAiX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfRTI0X2ZlYXR1cmUiLCAiX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfdHlwZSIpLA0KKwkJCQkgVmVjdG9yUGFja2FnZS5MaXRlcmFscy5ERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fRTI0LA0KKwkJCQkgdHJ1ZSwNCisJCQkJIGZhbHNlLA0KKwkJCQkgZmFsc2UsDQorCQkJCSBJdGVtUHJvcGVydHlEZXNjcmlwdG9yLlJFQUxfVkFMVUVfSU1BR0UsDQorCQkJCSBudWxsLA0KKwkJCQkgbnVsbCkpOw0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIGFkZHMgYSBwcm9wZXJ0eSBkZXNjcmlwdG9yIGZvciB0aGUgRTMxIGZlYXR1cmUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgdm9pZCBhZGRFMzFQcm9wZXJ0eURlc2NyaXB0b3IoT2JqZWN0IG9iamVjdCkgew0KKwkJaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMuYWRkDQorCQkJKGNyZWF0ZUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3INCisJCQkJKCgoQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSlhZGFwdGVyRmFjdG9yeSkuZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCksDQorCQkJCSBnZXRSZXNvdXJjZUxvY2F0b3IoKSwNCisJCQkJIGdldFN0cmluZygiX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfRTMxX2ZlYXR1cmUiKSwNCisJCQkJIGdldFN0cmluZygiX1VJX1Byb3BlcnR5RGVzY3JpcHRvcl9kZXNjcmlwdGlvbiIsICJfVUlfRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9FMzFfZmVhdHVyZSIsICJfVUlfRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV90eXBlIiksDQorCQkJCSBWZWN0b3JQYWNrYWdlLkxpdGVyYWxzLkRFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19FMzEsDQorCQkJCSB0cnVlLA0KKwkJCQkgZmFsc2UsDQorCQkJCSBmYWxzZSwNCisJCQkJIEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IuUkVBTF9WQUxVRV9JTUFHRSwNCisJCQkJIG51bGwsDQorCQkJCSBudWxsKSk7DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgYWRkcyBhIHByb3BlcnR5IGRlc2NyaXB0b3IgZm9yIHRoZSBFMzIgZmVhdHVyZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCB2b2lkIGFkZEUzMlByb3BlcnR5RGVzY3JpcHRvcihPYmplY3Qgb2JqZWN0KSB7DQorCQlpdGVtUHJvcGVydHlEZXNjcmlwdG9ycy5hZGQNCisJCQkoY3JlYXRlSXRlbVByb3BlcnR5RGVzY3JpcHRvcg0KKwkJCQkoKChDb21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5KWFkYXB0ZXJGYWN0b3J5KS5nZXRSb290QWRhcHRlckZhY3RvcnkoKSwNCisJCQkJIGdldFJlc291cmNlTG9jYXRvcigpLA0KKwkJCQkgZ2V0U3RyaW5nKCJfVUlfRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9FMzJfZmVhdHVyZSIpLA0KKwkJCQkgZ2V0U3RyaW5nKCJfVUlfUHJvcGVydHlEZXNjcmlwdG9yX2Rlc2NyaXB0aW9uIiwgIl9VSV9EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX0UzMl9mZWF0dXJlIiwgIl9VSV9EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX3R5cGUiKSwNCisJCQkJIFZlY3RvclBhY2thZ2UuTGl0ZXJhbHMuREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0UzMiwNCisJCQkJIHRydWUsDQorCQkJCSBmYWxzZSwNCisJCQkJIGZhbHNlLA0KKwkJCQkgSXRlbVByb3BlcnR5RGVzY3JpcHRvci5SRUFMX1ZBTFVFX0lNQUdFLA0KKwkJCQkgbnVsbCwNCisJCQkJIG51bGwpKTsNCisJfQ0KKw0KKwkvKioNCisJICogVGhpcyBhZGRzIGEgcHJvcGVydHkgZGVzY3JpcHRvciBmb3IgdGhlIEUzNCBmZWF0dXJlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIHZvaWQgYWRkRTM0UHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdCBvYmplY3QpIHsNCisJCWl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzLmFkZA0KKwkJCShjcmVhdGVJdGVtUHJvcGVydHlEZXNjcmlwdG9yDQorCQkJCSgoKENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnkpYWRhcHRlckZhY3RvcnkpLmdldFJvb3RBZGFwdGVyRmFjdG9yeSgpLA0KKwkJCQkgZ2V0UmVzb3VyY2VMb2NhdG9yKCksDQorCQkJCSBnZXRTdHJpbmcoIl9VSV9EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX0UzNF9mZWF0dXJlIiksDQorCQkJCSBnZXRTdHJpbmcoIl9VSV9Qcm9wZXJ0eURlc2NyaXB0b3JfZGVzY3JpcHRpb24iLCAiX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfRTM0X2ZlYXR1cmUiLCAiX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfdHlwZSIpLA0KKwkJCQkgVmVjdG9yUGFja2FnZS5MaXRlcmFscy5ERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fRTM0LA0KKwkJCQkgdHJ1ZSwNCisJCQkJIGZhbHNlLA0KKwkJCQkgZmFsc2UsDQorCQkJCSBJdGVtUHJvcGVydHlEZXNjcmlwdG9yLlJFQUxfVkFMVUVfSU1BR0UsDQorCQkJCSBudWxsLA0KKwkJCQkgbnVsbCkpOw0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIGFkZHMgYSBwcm9wZXJ0eSBkZXNjcmlwdG9yIGZvciB0aGUgRTQxIGZlYXR1cmUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgdm9pZCBhZGRFNDFQcm9wZXJ0eURlc2NyaXB0b3IoT2JqZWN0IG9iamVjdCkgew0KKwkJaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMuYWRkDQorCQkJKGNyZWF0ZUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3INCisJCQkJKCgoQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSlhZGFwdGVyRmFjdG9yeSkuZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCksDQorCQkJCSBnZXRSZXNvdXJjZUxvY2F0b3IoKSwNCisJCQkJIGdldFN0cmluZygiX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfRTQxX2ZlYXR1cmUiKSwNCisJCQkJIGdldFN0cmluZygiX1VJX1Byb3BlcnR5RGVzY3JpcHRvcl9kZXNjcmlwdGlvbiIsICJfVUlfRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9FNDFfZmVhdHVyZSIsICJfVUlfRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV90eXBlIiksDQorCQkJCSBWZWN0b3JQYWNrYWdlLkxpdGVyYWxzLkRFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19FNDEsDQorCQkJCSB0cnVlLA0KKwkJCQkgZmFsc2UsDQorCQkJCSBmYWxzZSwNCisJCQkJIEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IuUkVBTF9WQUxVRV9JTUFHRSwNCisJCQkJIG51bGwsDQorCQkJCSBudWxsKSk7DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgYWRkcyBhIHByb3BlcnR5IGRlc2NyaXB0b3IgZm9yIHRoZSBFNDIgZmVhdHVyZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCB2b2lkIGFkZEU0MlByb3BlcnR5RGVzY3JpcHRvcihPYmplY3Qgb2JqZWN0KSB7DQorCQlpdGVtUHJvcGVydHlEZXNjcmlwdG9ycy5hZGQNCisJCQkoY3JlYXRlSXRlbVByb3BlcnR5RGVzY3JpcHRvcg0KKwkJCQkoKChDb21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5KWFkYXB0ZXJGYWN0b3J5KS5nZXRSb290QWRhcHRlckZhY3RvcnkoKSwNCisJCQkJIGdldFJlc291cmNlTG9jYXRvcigpLA0KKwkJCQkgZ2V0U3RyaW5nKCJfVUlfRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9FNDJfZmVhdHVyZSIpLA0KKwkJCQkgZ2V0U3RyaW5nKCJfVUlfUHJvcGVydHlEZXNjcmlwdG9yX2Rlc2NyaXB0aW9uIiwgIl9VSV9EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX0U0Ml9mZWF0dXJlIiwgIl9VSV9EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX3R5cGUiKSwNCisJCQkJIFZlY3RvclBhY2thZ2UuTGl0ZXJhbHMuREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0U0MiwNCisJCQkJIHRydWUsDQorCQkJCSBmYWxzZSwNCisJCQkJIGZhbHNlLA0KKwkJCQkgSXRlbVByb3BlcnR5RGVzY3JpcHRvci5SRUFMX1ZBTFVFX0lNQUdFLA0KKwkJCQkgbnVsbCwNCisJCQkJIG51bGwpKTsNCisJfQ0KKw0KKwkvKioNCisJICogVGhpcyBhZGRzIGEgcHJvcGVydHkgZGVzY3JpcHRvciBmb3IgdGhlIEU0MyBmZWF0dXJlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIHZvaWQgYWRkRTQzUHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdCBvYmplY3QpIHsNCisJCWl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzLmFkZA0KKwkJCShjcmVhdGVJdGVtUHJvcGVydHlEZXNjcmlwdG9yDQorCQkJCSgoKENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnkpYWRhcHRlckZhY3RvcnkpLmdldFJvb3RBZGFwdGVyRmFjdG9yeSgpLA0KKwkJCQkgZ2V0UmVzb3VyY2VMb2NhdG9yKCksDQorCQkJCSBnZXRTdHJpbmcoIl9VSV9EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX0U0M19mZWF0dXJlIiksDQorCQkJCSBnZXRTdHJpbmcoIl9VSV9Qcm9wZXJ0eURlc2NyaXB0b3JfZGVzY3JpcHRpb24iLCAiX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfRTQzX2ZlYXR1cmUiLCAiX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfdHlwZSIpLA0KKwkJCQkgVmVjdG9yUGFja2FnZS5MaXRlcmFscy5ERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fRTQzLA0KKwkJCQkgdHJ1ZSwNCisJCQkJIGZhbHNlLA0KKwkJCQkgZmFsc2UsDQorCQkJCSBJdGVtUHJvcGVydHlEZXNjcmlwdG9yLlJFQUxfVkFMVUVfSU1BR0UsDQorCQkJCSBudWxsLA0KKwkJCQkgbnVsbCkpOw0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIGFkZHMgYSBwcm9wZXJ0eSBkZXNjcmlwdG9yIGZvciB0aGUgSTEyIGZlYXR1cmUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgdm9pZCBhZGRJMTJQcm9wZXJ0eURlc2NyaXB0b3IoT2JqZWN0IG9iamVjdCkgew0KKwkJaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMuYWRkDQorCQkJKGNyZWF0ZUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3INCisJCQkJKCgoQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSlhZGFwdGVyRmFjdG9yeSkuZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCksDQorCQkJCSBnZXRSZXNvdXJjZUxvY2F0b3IoKSwNCisJCQkJIGdldFN0cmluZygiX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfSTEyX2ZlYXR1cmUiKSwNCisJCQkJIGdldFN0cmluZygiX1VJX1Byb3BlcnR5RGVzY3JpcHRvcl9kZXNjcmlwdGlvbiIsICJfVUlfRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9JMTJfZmVhdHVyZSIsICJfVUlfRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV90eXBlIiksDQorCQkJCSBWZWN0b3JQYWNrYWdlLkxpdGVyYWxzLkRFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19JMTIsDQorCQkJCSB0cnVlLA0KKwkJCQkgZmFsc2UsDQorCQkJCSBmYWxzZSwNCisJCQkJIEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IuUkVBTF9WQUxVRV9JTUFHRSwNCisJCQkJIG51bGwsDQorCQkJCSBudWxsKSk7DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgYWRkcyBhIHByb3BlcnR5IGRlc2NyaXB0b3IgZm9yIHRoZSBJMTMgZmVhdHVyZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCB2b2lkIGFkZEkxM1Byb3BlcnR5RGVzY3JpcHRvcihPYmplY3Qgb2JqZWN0KSB7DQorCQlpdGVtUHJvcGVydHlEZXNjcmlwdG9ycy5hZGQNCisJCQkoY3JlYXRlSXRlbVByb3BlcnR5RGVzY3JpcHRvcg0KKwkJCQkoKChDb21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5KWFkYXB0ZXJGYWN0b3J5KS5nZXRSb290QWRhcHRlckZhY3RvcnkoKSwNCisJCQkJIGdldFJlc291cmNlTG9jYXRvcigpLA0KKwkJCQkgZ2V0U3RyaW5nKCJfVUlfRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9JMTNfZmVhdHVyZSIpLA0KKwkJCQkgZ2V0U3RyaW5nKCJfVUlfUHJvcGVydHlEZXNjcmlwdG9yX2Rlc2NyaXB0aW9uIiwgIl9VSV9EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX0kxM19mZWF0dXJlIiwgIl9VSV9EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX3R5cGUiKSwNCisJCQkJIFZlY3RvclBhY2thZ2UuTGl0ZXJhbHMuREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0kxMywNCisJCQkJIHRydWUsDQorCQkJCSBmYWxzZSwNCisJCQkJIGZhbHNlLA0KKwkJCQkgSXRlbVByb3BlcnR5RGVzY3JpcHRvci5SRUFMX1ZBTFVFX0lNQUdFLA0KKwkJCQkgbnVsbCwNCisJCQkJIG51bGwpKTsNCisJfQ0KKw0KKwkvKioNCisJICogVGhpcyBhZGRzIGEgcHJvcGVydHkgZGVzY3JpcHRvciBmb3IgdGhlIEkxNCBmZWF0dXJlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIHZvaWQgYWRkSTE0UHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdCBvYmplY3QpIHsNCisJCWl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzLmFkZA0KKwkJCShjcmVhdGVJdGVtUHJvcGVydHlEZXNjcmlwdG9yDQorCQkJCSgoKENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnkpYWRhcHRlckZhY3RvcnkpLmdldFJvb3RBZGFwdGVyRmFjdG9yeSgpLA0KKwkJCQkgZ2V0UmVzb3VyY2VMb2NhdG9yKCksDQorCQkJCSBnZXRTdHJpbmcoIl9VSV9EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX0kxNF9mZWF0dXJlIiksDQorCQkJCSBnZXRTdHJpbmcoIl9VSV9Qcm9wZXJ0eURlc2NyaXB0b3JfZGVzY3JpcHRpb24iLCAiX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfSTE0X2ZlYXR1cmUiLCAiX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfdHlwZSIpLA0KKwkJCQkgVmVjdG9yUGFja2FnZS5MaXRlcmFscy5ERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fSTE0LA0KKwkJCQkgdHJ1ZSwNCisJCQkJIGZhbHNlLA0KKwkJCQkgZmFsc2UsDQorCQkJCSBJdGVtUHJvcGVydHlEZXNjcmlwdG9yLlJFQUxfVkFMVUVfSU1BR0UsDQorCQkJCSBudWxsLA0KKwkJCQkgbnVsbCkpOw0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIGFkZHMgYSBwcm9wZXJ0eSBkZXNjcmlwdG9yIGZvciB0aGUgSTIxIGZlYXR1cmUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgdm9pZCBhZGRJMjFQcm9wZXJ0eURlc2NyaXB0b3IoT2JqZWN0IG9iamVjdCkgew0KKwkJaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMuYWRkDQorCQkJKGNyZWF0ZUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3INCisJCQkJKCgoQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSlhZGFwdGVyRmFjdG9yeSkuZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCksDQorCQkJCSBnZXRSZXNvdXJjZUxvY2F0b3IoKSwNCisJCQkJIGdldFN0cmluZygiX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfSTIxX2ZlYXR1cmUiKSwNCisJCQkJIGdldFN0cmluZygiX1VJX1Byb3BlcnR5RGVzY3JpcHRvcl9kZXNjcmlwdGlvbiIsICJfVUlfRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9JMjFfZmVhdHVyZSIsICJfVUlfRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV90eXBlIiksDQorCQkJCSBWZWN0b3JQYWNrYWdlLkxpdGVyYWxzLkRFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19JMjEsDQorCQkJCSB0cnVlLA0KKwkJCQkgZmFsc2UsDQorCQkJCSBmYWxzZSwNCisJCQkJIEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IuUkVBTF9WQUxVRV9JTUFHRSwNCisJCQkJIG51bGwsDQorCQkJCSBudWxsKSk7DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgYWRkcyBhIHByb3BlcnR5IGRlc2NyaXB0b3IgZm9yIHRoZSBJMjMgZmVhdHVyZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCB2b2lkIGFkZEkyM1Byb3BlcnR5RGVzY3JpcHRvcihPYmplY3Qgb2JqZWN0KSB7DQorCQlpdGVtUHJvcGVydHlEZXNjcmlwdG9ycy5hZGQNCisJCQkoY3JlYXRlSXRlbVByb3BlcnR5RGVzY3JpcHRvcg0KKwkJCQkoKChDb21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5KWFkYXB0ZXJGYWN0b3J5KS5nZXRSb290QWRhcHRlckZhY3RvcnkoKSwNCisJCQkJIGdldFJlc291cmNlTG9jYXRvcigpLA0KKwkJCQkgZ2V0U3RyaW5nKCJfVUlfRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9JMjNfZmVhdHVyZSIpLA0KKwkJCQkgZ2V0U3RyaW5nKCJfVUlfUHJvcGVydHlEZXNjcmlwdG9yX2Rlc2NyaXB0aW9uIiwgIl9VSV9EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX0kyM19mZWF0dXJlIiwgIl9VSV9EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX3R5cGUiKSwNCisJCQkJIFZlY3RvclBhY2thZ2UuTGl0ZXJhbHMuREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0kyMywNCisJCQkJIHRydWUsDQorCQkJCSBmYWxzZSwNCisJCQkJIGZhbHNlLA0KKwkJCQkgSXRlbVByb3BlcnR5RGVzY3JpcHRvci5SRUFMX1ZBTFVFX0lNQUdFLA0KKwkJCQkgbnVsbCwNCisJCQkJIG51bGwpKTsNCisJfQ0KKw0KKwkvKioNCisJICogVGhpcyBhZGRzIGEgcHJvcGVydHkgZGVzY3JpcHRvciBmb3IgdGhlIEkyNCBmZWF0dXJlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIHZvaWQgYWRkSTI0UHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdCBvYmplY3QpIHsNCisJCWl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzLmFkZA0KKwkJCShjcmVhdGVJdGVtUHJvcGVydHlEZXNjcmlwdG9yDQorCQkJCSgoKENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnkpYWRhcHRlckZhY3RvcnkpLmdldFJvb3RBZGFwdGVyRmFjdG9yeSgpLA0KKwkJCQkgZ2V0UmVzb3VyY2VMb2NhdG9yKCksDQorCQkJCSBnZXRTdHJpbmcoIl9VSV9EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX0kyNF9mZWF0dXJlIiksDQorCQkJCSBnZXRTdHJpbmcoIl9VSV9Qcm9wZXJ0eURlc2NyaXB0b3JfZGVzY3JpcHRpb24iLCAiX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfSTI0X2ZlYXR1cmUiLCAiX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfdHlwZSIpLA0KKwkJCQkgVmVjdG9yUGFja2FnZS5MaXRlcmFscy5ERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fSTI0LA0KKwkJCQkgdHJ1ZSwNCisJCQkJIGZhbHNlLA0KKwkJCQkgZmFsc2UsDQorCQkJCSBJdGVtUHJvcGVydHlEZXNjcmlwdG9yLlJFQUxfVkFMVUVfSU1BR0UsDQorCQkJCSBudWxsLA0KKwkJCQkgbnVsbCkpOw0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIGFkZHMgYSBwcm9wZXJ0eSBkZXNjcmlwdG9yIGZvciB0aGUgSTMxIGZlYXR1cmUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgdm9pZCBhZGRJMzFQcm9wZXJ0eURlc2NyaXB0b3IoT2JqZWN0IG9iamVjdCkgew0KKwkJaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMuYWRkDQorCQkJKGNyZWF0ZUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3INCisJCQkJKCgoQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSlhZGFwdGVyRmFjdG9yeSkuZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCksDQorCQkJCSBnZXRSZXNvdXJjZUxvY2F0b3IoKSwNCisJCQkJIGdldFN0cmluZygiX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfSTMxX2ZlYXR1cmUiKSwNCisJCQkJIGdldFN0cmluZygiX1VJX1Byb3BlcnR5RGVzY3JpcHRvcl9kZXNjcmlwdGlvbiIsICJfVUlfRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9JMzFfZmVhdHVyZSIsICJfVUlfRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV90eXBlIiksDQorCQkJCSBWZWN0b3JQYWNrYWdlLkxpdGVyYWxzLkRFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19JMzEsDQorCQkJCSB0cnVlLA0KKwkJCQkgZmFsc2UsDQorCQkJCSBmYWxzZSwNCisJCQkJIEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IuUkVBTF9WQUxVRV9JTUFHRSwNCisJCQkJIG51bGwsDQorCQkJCSBudWxsKSk7DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgYWRkcyBhIHByb3BlcnR5IGRlc2NyaXB0b3IgZm9yIHRoZSBJMzIgZmVhdHVyZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCB2b2lkIGFkZEkzMlByb3BlcnR5RGVzY3JpcHRvcihPYmplY3Qgb2JqZWN0KSB7DQorCQlpdGVtUHJvcGVydHlEZXNjcmlwdG9ycy5hZGQNCisJCQkoY3JlYXRlSXRlbVByb3BlcnR5RGVzY3JpcHRvcg0KKwkJCQkoKChDb21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5KWFkYXB0ZXJGYWN0b3J5KS5nZXRSb290QWRhcHRlckZhY3RvcnkoKSwNCisJCQkJIGdldFJlc291cmNlTG9jYXRvcigpLA0KKwkJCQkgZ2V0U3RyaW5nKCJfVUlfRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9JMzJfZmVhdHVyZSIpLA0KKwkJCQkgZ2V0U3RyaW5nKCJfVUlfUHJvcGVydHlEZXNjcmlwdG9yX2Rlc2NyaXB0aW9uIiwgIl9VSV9EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX0kzMl9mZWF0dXJlIiwgIl9VSV9EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX3R5cGUiKSwNCisJCQkJIFZlY3RvclBhY2thZ2UuTGl0ZXJhbHMuREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0kzMiwNCisJCQkJIHRydWUsDQorCQkJCSBmYWxzZSwNCisJCQkJIGZhbHNlLA0KKwkJCQkgSXRlbVByb3BlcnR5RGVzY3JpcHRvci5SRUFMX1ZBTFVFX0lNQUdFLA0KKwkJCQkgbnVsbCwNCisJCQkJIG51bGwpKTsNCisJfQ0KKw0KKwkvKioNCisJICogVGhpcyBhZGRzIGEgcHJvcGVydHkgZGVzY3JpcHRvciBmb3IgdGhlIEkzNCBmZWF0dXJlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIHZvaWQgYWRkSTM0UHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdCBvYmplY3QpIHsNCisJCWl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzLmFkZA0KKwkJCShjcmVhdGVJdGVtUHJvcGVydHlEZXNjcmlwdG9yDQorCQkJCSgoKENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnkpYWRhcHRlckZhY3RvcnkpLmdldFJvb3RBZGFwdGVyRmFjdG9yeSgpLA0KKwkJCQkgZ2V0UmVzb3VyY2VMb2NhdG9yKCksDQorCQkJCSBnZXRTdHJpbmcoIl9VSV9EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX0kzNF9mZWF0dXJlIiksDQorCQkJCSBnZXRTdHJpbmcoIl9VSV9Qcm9wZXJ0eURlc2NyaXB0b3JfZGVzY3JpcHRpb24iLCAiX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfSTM0X2ZlYXR1cmUiLCAiX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfdHlwZSIpLA0KKwkJCQkgVmVjdG9yUGFja2FnZS5MaXRlcmFscy5ERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fSTM0LA0KKwkJCQkgdHJ1ZSwNCisJCQkJIGZhbHNlLA0KKwkJCQkgZmFsc2UsDQorCQkJCSBJdGVtUHJvcGVydHlEZXNjcmlwdG9yLlJFQUxfVkFMVUVfSU1BR0UsDQorCQkJCSBudWxsLA0KKwkJCQkgbnVsbCkpOw0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIGFkZHMgYSBwcm9wZXJ0eSBkZXNjcmlwdG9yIGZvciB0aGUgSTQxIGZlYXR1cmUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgdm9pZCBhZGRJNDFQcm9wZXJ0eURlc2NyaXB0b3IoT2JqZWN0IG9iamVjdCkgew0KKwkJaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMuYWRkDQorCQkJKGNyZWF0ZUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3INCisJCQkJKCgoQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSlhZGFwdGVyRmFjdG9yeSkuZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCksDQorCQkJCSBnZXRSZXNvdXJjZUxvY2F0b3IoKSwNCisJCQkJIGdldFN0cmluZygiX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfSTQxX2ZlYXR1cmUiKSwNCisJCQkJIGdldFN0cmluZygiX1VJX1Byb3BlcnR5RGVzY3JpcHRvcl9kZXNjcmlwdGlvbiIsICJfVUlfRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9JNDFfZmVhdHVyZSIsICJfVUlfRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV90eXBlIiksDQorCQkJCSBWZWN0b3JQYWNrYWdlLkxpdGVyYWxzLkRFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19JNDEsDQorCQkJCSB0cnVlLA0KKwkJCQkgZmFsc2UsDQorCQkJCSBmYWxzZSwNCisJCQkJIEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IuUkVBTF9WQUxVRV9JTUFHRSwNCisJCQkJIG51bGwsDQorCQkJCSBudWxsKSk7DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgYWRkcyBhIHByb3BlcnR5IGRlc2NyaXB0b3IgZm9yIHRoZSBJNDIgZmVhdHVyZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCB2b2lkIGFkZEk0MlByb3BlcnR5RGVzY3JpcHRvcihPYmplY3Qgb2JqZWN0KSB7DQorCQlpdGVtUHJvcGVydHlEZXNjcmlwdG9ycy5hZGQNCisJCQkoY3JlYXRlSXRlbVByb3BlcnR5RGVzY3JpcHRvcg0KKwkJCQkoKChDb21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5KWFkYXB0ZXJGYWN0b3J5KS5nZXRSb290QWRhcHRlckZhY3RvcnkoKSwNCisJCQkJIGdldFJlc291cmNlTG9jYXRvcigpLA0KKwkJCQkgZ2V0U3RyaW5nKCJfVUlfRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9JNDJfZmVhdHVyZSIpLA0KKwkJCQkgZ2V0U3RyaW5nKCJfVUlfUHJvcGVydHlEZXNjcmlwdG9yX2Rlc2NyaXB0aW9uIiwgIl9VSV9EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX0k0Ml9mZWF0dXJlIiwgIl9VSV9EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX3R5cGUiKSwNCisJCQkJIFZlY3RvclBhY2thZ2UuTGl0ZXJhbHMuREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0k0MiwNCisJCQkJIHRydWUsDQorCQkJCSBmYWxzZSwNCisJCQkJIGZhbHNlLA0KKwkJCQkgSXRlbVByb3BlcnR5RGVzY3JpcHRvci5SRUFMX1ZBTFVFX0lNQUdFLA0KKwkJCQkgbnVsbCwNCisJCQkJIG51bGwpKTsNCisJfQ0KKw0KKwkvKioNCisJICogVGhpcyBhZGRzIGEgcHJvcGVydHkgZGVzY3JpcHRvciBmb3IgdGhlIEk0MyBmZWF0dXJlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIHZvaWQgYWRkSTQzUHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdCBvYmplY3QpIHsNCisJCWl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzLmFkZA0KKwkJCShjcmVhdGVJdGVtUHJvcGVydHlEZXNjcmlwdG9yDQorCQkJCSgoKENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnkpYWRhcHRlckZhY3RvcnkpLmdldFJvb3RBZGFwdGVyRmFjdG9yeSgpLA0KKwkJCQkgZ2V0UmVzb3VyY2VMb2NhdG9yKCksDQorCQkJCSBnZXRTdHJpbmcoIl9VSV9EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX0k0M19mZWF0dXJlIiksDQorCQkJCSBnZXRTdHJpbmcoIl9VSV9Qcm9wZXJ0eURlc2NyaXB0b3JfZGVzY3JpcHRpb24iLCAiX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfSTQzX2ZlYXR1cmUiLCAiX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfdHlwZSIpLA0KKwkJCQkgVmVjdG9yUGFja2FnZS5MaXRlcmFscy5ERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fSTQzLA0KKwkJCQkgdHJ1ZSwNCisJCQkJIGZhbHNlLA0KKwkJCQkgZmFsc2UsDQorCQkJCSBJdGVtUHJvcGVydHlEZXNjcmlwdG9yLlJFQUxfVkFMVUVfSU1BR0UsDQorCQkJCSBudWxsLA0KKwkJCQkgbnVsbCkpOw0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIGFkZHMgYSBwcm9wZXJ0eSBkZXNjcmlwdG9yIGZvciB0aGUgUiBmZWF0dXJlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIHZvaWQgYWRkUlByb3BlcnR5RGVzY3JpcHRvcihPYmplY3Qgb2JqZWN0KSB7DQorCQlpdGVtUHJvcGVydHlEZXNjcmlwdG9ycy5hZGQNCisJCQkoY3JlYXRlSXRlbVByb3BlcnR5RGVzY3JpcHRvcg0KKwkJCQkoKChDb21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5KWFkYXB0ZXJGYWN0b3J5KS5nZXRSb290QWRhcHRlckZhY3RvcnkoKSwNCisJCQkJIGdldFJlc291cmNlTG9jYXRvcigpLA0KKwkJCQkgZ2V0U3RyaW5nKCJfVUlfRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9SX2ZlYXR1cmUiKSwNCisJCQkJIGdldFN0cmluZygiX1VJX1Byb3BlcnR5RGVzY3JpcHRvcl9kZXNjcmlwdGlvbiIsICJfVUlfRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9SX2ZlYXR1cmUiLCAiX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfdHlwZSIpLA0KKwkJCQkgVmVjdG9yUGFja2FnZS5MaXRlcmFscy5ERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fUiwNCisJCQkJIHRydWUsDQorCQkJCSBmYWxzZSwNCisJCQkJIGZhbHNlLA0KKwkJCQkgSXRlbVByb3BlcnR5RGVzY3JpcHRvci5SRUFMX1ZBTFVFX0lNQUdFLA0KKwkJCQkgbnVsbCwNCisJCQkJIG51bGwpKTsNCisJfQ0KKw0KKwkvKioNCisJICogVGhpcyBhZGRzIGEgcHJvcGVydHkgZGVzY3JpcHRvciBmb3IgdGhlIEluY2lkZW5jZTEgZmVhdHVyZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCB2b2lkIGFkZEluY2lkZW5jZTFQcm9wZXJ0eURlc2NyaXB0b3IoT2JqZWN0IG9iamVjdCkgew0KKwkJaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMuYWRkDQorCQkJKGNyZWF0ZUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3INCisJCQkJKCgoQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSlhZGFwdGVyRmFjdG9yeSkuZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCksDQorCQkJCSBnZXRSZXNvdXJjZUxvY2F0b3IoKSwNCisJCQkJIGdldFN0cmluZygiX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfaW5jaWRlbmNlMV9mZWF0dXJlIiksDQorCQkJCSBnZXRTdHJpbmcoIl9VSV9Qcm9wZXJ0eURlc2NyaXB0b3JfZGVzY3JpcHRpb24iLCAiX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfaW5jaWRlbmNlMV9mZWF0dXJlIiwgIl9VSV9EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX3R5cGUiKSwNCisJCQkJIFZlY3RvclBhY2thZ2UuTGl0ZXJhbHMuREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0lOQ0lERU5DRTEsDQorCQkJCSB0cnVlLA0KKwkJCQkgZmFsc2UsDQorCQkJCSBmYWxzZSwNCisJCQkJIEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IuUkVBTF9WQUxVRV9JTUFHRSwNCisJCQkJIG51bGwsDQorCQkJCSBudWxsKSk7DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgYWRkcyBhIHByb3BlcnR5IGRlc2NyaXB0b3IgZm9yIHRoZSBJbmNpZGVuY2UyIGZlYXR1cmUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgdm9pZCBhZGRJbmNpZGVuY2UyUHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdCBvYmplY3QpIHsNCisJCWl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzLmFkZA0KKwkJCShjcmVhdGVJdGVtUHJvcGVydHlEZXNjcmlwdG9yDQorCQkJCSgoKENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnkpYWRhcHRlckZhY3RvcnkpLmdldFJvb3RBZGFwdGVyRmFjdG9yeSgpLA0KKwkJCQkgZ2V0UmVzb3VyY2VMb2NhdG9yKCksDQorCQkJCSBnZXRTdHJpbmcoIl9VSV9EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX2luY2lkZW5jZTJfZmVhdHVyZSIpLA0KKwkJCQkgZ2V0U3RyaW5nKCJfVUlfUHJvcGVydHlEZXNjcmlwdG9yX2Rlc2NyaXB0aW9uIiwgIl9VSV9EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX2luY2lkZW5jZTJfZmVhdHVyZSIsICJfVUlfRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV90eXBlIiksDQorCQkJCSBWZWN0b3JQYWNrYWdlLkxpdGVyYWxzLkRFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19JTkNJREVOQ0UyLA0KKwkJCQkgdHJ1ZSwNCisJCQkJIGZhbHNlLA0KKwkJCQkgZmFsc2UsDQorCQkJCSBJdGVtUHJvcGVydHlEZXNjcmlwdG9yLlJFQUxfVkFMVUVfSU1BR0UsDQorCQkJCSBudWxsLA0KKwkJCQkgbnVsbCkpOw0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIGFkZHMgYSBwcm9wZXJ0eSBkZXNjcmlwdG9yIGZvciB0aGUgSW5jaWRlbmNlMyBmZWF0dXJlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIHZvaWQgYWRkSW5jaWRlbmNlM1Byb3BlcnR5RGVzY3JpcHRvcihPYmplY3Qgb2JqZWN0KSB7DQorCQlpdGVtUHJvcGVydHlEZXNjcmlwdG9ycy5hZGQNCisJCQkoY3JlYXRlSXRlbVByb3BlcnR5RGVzY3JpcHRvcg0KKwkJCQkoKChDb21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5KWFkYXB0ZXJGYWN0b3J5KS5nZXRSb290QWRhcHRlckZhY3RvcnkoKSwNCisJCQkJIGdldFJlc291cmNlTG9jYXRvcigpLA0KKwkJCQkgZ2V0U3RyaW5nKCJfVUlfRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9pbmNpZGVuY2UzX2ZlYXR1cmUiKSwNCisJCQkJIGdldFN0cmluZygiX1VJX1Byb3BlcnR5RGVzY3JpcHRvcl9kZXNjcmlwdGlvbiIsICJfVUlfRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9pbmNpZGVuY2UzX2ZlYXR1cmUiLCAiX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfdHlwZSIpLA0KKwkJCQkgVmVjdG9yUGFja2FnZS5MaXRlcmFscy5ERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fSU5DSURFTkNFMywNCisJCQkJIHRydWUsDQorCQkJCSBmYWxzZSwNCisJCQkJIGZhbHNlLA0KKwkJCQkgSXRlbVByb3BlcnR5RGVzY3JpcHRvci5SRUFMX1ZBTFVFX0lNQUdFLA0KKwkJCQkgbnVsbCwNCisJCQkJIG51bGwpKTsNCisJfQ0KKw0KKwkvKioNCisJICogVGhpcyBhZGRzIGEgcHJvcGVydHkgZGVzY3JpcHRvciBmb3IgdGhlIEluY2lkZW5jZTQgZmVhdHVyZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCB2b2lkIGFkZEluY2lkZW5jZTRQcm9wZXJ0eURlc2NyaXB0b3IoT2JqZWN0IG9iamVjdCkgew0KKwkJaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMuYWRkDQorCQkJKGNyZWF0ZUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3INCisJCQkJKCgoQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSlhZGFwdGVyRmFjdG9yeSkuZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCksDQorCQkJCSBnZXRSZXNvdXJjZUxvY2F0b3IoKSwNCisJCQkJIGdldFN0cmluZygiX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfaW5jaWRlbmNlNF9mZWF0dXJlIiksDQorCQkJCSBnZXRTdHJpbmcoIl9VSV9Qcm9wZXJ0eURlc2NyaXB0b3JfZGVzY3JpcHRpb24iLCAiX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfaW5jaWRlbmNlNF9mZWF0dXJlIiwgIl9VSV9EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX3R5cGUiKSwNCisJCQkJIFZlY3RvclBhY2thZ2UuTGl0ZXJhbHMuREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0lOQ0lERU5DRTQsDQorCQkJCSB0cnVlLA0KKwkJCQkgZmFsc2UsDQorCQkJCSBmYWxzZSwNCisJCQkJIEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IuUkVBTF9WQUxVRV9JTUFHRSwNCisJCQkJIG51bGwsDQorCQkJCSBudWxsKSk7DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgYWRkcyBhIHByb3BlcnR5IGRlc2NyaXB0b3IgZm9yIHRoZSBJbmNpZGVuY2UxMiBmZWF0dXJlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIHZvaWQgYWRkSW5jaWRlbmNlMTJQcm9wZXJ0eURlc2NyaXB0b3IoT2JqZWN0IG9iamVjdCkgew0KKwkJaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMuYWRkDQorCQkJKGNyZWF0ZUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3INCisJCQkJKCgoQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSlhZGFwdGVyRmFjdG9yeSkuZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCksDQorCQkJCSBnZXRSZXNvdXJjZUxvY2F0b3IoKSwNCisJCQkJIGdldFN0cmluZygiX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfaW5jaWRlbmNlMTJfZmVhdHVyZSIpLA0KKwkJCQkgZ2V0U3RyaW5nKCJfVUlfUHJvcGVydHlEZXNjcmlwdG9yX2Rlc2NyaXB0aW9uIiwgIl9VSV9EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX2luY2lkZW5jZTEyX2ZlYXR1cmUiLCAiX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfdHlwZSIpLA0KKwkJCQkgVmVjdG9yUGFja2FnZS5MaXRlcmFscy5ERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fSU5DSURFTkNFMTIsDQorCQkJCSB0cnVlLA0KKwkJCQkgZmFsc2UsDQorCQkJCSBmYWxzZSwNCisJCQkJIEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IuUkVBTF9WQUxVRV9JTUFHRSwNCisJCQkJIG51bGwsDQorCQkJCSBudWxsKSk7DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgYWRkcyBhIHByb3BlcnR5IGRlc2NyaXB0b3IgZm9yIHRoZSBJbmNpZGVuY2UyMSBmZWF0dXJlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIHZvaWQgYWRkSW5jaWRlbmNlMjFQcm9wZXJ0eURlc2NyaXB0b3IoT2JqZWN0IG9iamVjdCkgew0KKwkJaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMuYWRkDQorCQkJKGNyZWF0ZUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3INCisJCQkJKCgoQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSlhZGFwdGVyRmFjdG9yeSkuZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCksDQorCQkJCSBnZXRSZXNvdXJjZUxvY2F0b3IoKSwNCisJCQkJIGdldFN0cmluZygiX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfaW5jaWRlbmNlMjFfZmVhdHVyZSIpLA0KKwkJCQkgZ2V0U3RyaW5nKCJfVUlfUHJvcGVydHlEZXNjcmlwdG9yX2Rlc2NyaXB0aW9uIiwgIl9VSV9EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX2luY2lkZW5jZTIxX2ZlYXR1cmUiLCAiX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfdHlwZSIpLA0KKwkJCQkgVmVjdG9yUGFja2FnZS5MaXRlcmFscy5ERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fSU5DSURFTkNFMjEsDQorCQkJCSB0cnVlLA0KKwkJCQkgZmFsc2UsDQorCQkJCSBmYWxzZSwNCisJCQkJIEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IuUkVBTF9WQUxVRV9JTUFHRSwNCisJCQkJIG51bGwsDQorCQkJCSBudWxsKSk7DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgYWRkcyBhIHByb3BlcnR5IGRlc2NyaXB0b3IgZm9yIHRoZSBJbmNpZGVuY2UzMSBmZWF0dXJlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIHZvaWQgYWRkSW5jaWRlbmNlMzFQcm9wZXJ0eURlc2NyaXB0b3IoT2JqZWN0IG9iamVjdCkgew0KKwkJaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMuYWRkDQorCQkJKGNyZWF0ZUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3INCisJCQkJKCgoQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSlhZGFwdGVyRmFjdG9yeSkuZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCksDQorCQkJCSBnZXRSZXNvdXJjZUxvY2F0b3IoKSwNCisJCQkJIGdldFN0cmluZygiX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfaW5jaWRlbmNlMzFfZmVhdHVyZSIpLA0KKwkJCQkgZ2V0U3RyaW5nKCJfVUlfUHJvcGVydHlEZXNjcmlwdG9yX2Rlc2NyaXB0aW9uIiwgIl9VSV9EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX2luY2lkZW5jZTMxX2ZlYXR1cmUiLCAiX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfdHlwZSIpLA0KKwkJCQkgVmVjdG9yUGFja2FnZS5MaXRlcmFscy5ERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fSU5DSURFTkNFMzEsDQorCQkJCSB0cnVlLA0KKwkJCQkgZmFsc2UsDQorCQkJCSBmYWxzZSwNCisJCQkJIEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IuUkVBTF9WQUxVRV9JTUFHRSwNCisJCQkJIG51bGwsDQorCQkJCSBudWxsKSk7DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgYWRkcyBhIHByb3BlcnR5IGRlc2NyaXB0b3IgZm9yIHRoZSBJbmNpZGVuY2U0MSBmZWF0dXJlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIHZvaWQgYWRkSW5jaWRlbmNlNDFQcm9wZXJ0eURlc2NyaXB0b3IoT2JqZWN0IG9iamVjdCkgew0KKwkJaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMuYWRkDQorCQkJKGNyZWF0ZUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3INCisJCQkJKCgoQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSlhZGFwdGVyRmFjdG9yeSkuZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCksDQorCQkJCSBnZXRSZXNvdXJjZUxvY2F0b3IoKSwNCisJCQkJIGdldFN0cmluZygiX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfaW5jaWRlbmNlNDFfZmVhdHVyZSIpLA0KKwkJCQkgZ2V0U3RyaW5nKCJfVUlfUHJvcGVydHlEZXNjcmlwdG9yX2Rlc2NyaXB0aW9uIiwgIl9VSV9EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX2luY2lkZW5jZTQxX2ZlYXR1cmUiLCAiX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfdHlwZSIpLA0KKwkJCQkgVmVjdG9yUGFja2FnZS5MaXRlcmFscy5ERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fSU5DSURFTkNFNDEsDQorCQkJCSB0cnVlLA0KKwkJCQkgZmFsc2UsDQorCQkJCSBmYWxzZSwNCisJCQkJIEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IuUkVBTF9WQUxVRV9JTUFHRSwNCisJCQkJIG51bGwsDQorCQkJCSBudWxsKSk7DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgYWRkcyBhIHByb3BlcnR5IGRlc2NyaXB0b3IgZm9yIHRoZSBJbmNpZGVuY2UxMyBmZWF0dXJlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIHZvaWQgYWRkSW5jaWRlbmNlMTNQcm9wZXJ0eURlc2NyaXB0b3IoT2JqZWN0IG9iamVjdCkgew0KKwkJaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMuYWRkDQorCQkJKGNyZWF0ZUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3INCisJCQkJKCgoQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSlhZGFwdGVyRmFjdG9yeSkuZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCksDQorCQkJCSBnZXRSZXNvdXJjZUxvY2F0b3IoKSwNCisJCQkJIGdldFN0cmluZygiX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfaW5jaWRlbmNlMTNfZmVhdHVyZSIpLA0KKwkJCQkgZ2V0U3RyaW5nKCJfVUlfUHJvcGVydHlEZXNjcmlwdG9yX2Rlc2NyaXB0aW9uIiwgIl9VSV9EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX2luY2lkZW5jZTEzX2ZlYXR1cmUiLCAiX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfdHlwZSIpLA0KKwkJCQkgVmVjdG9yUGFja2FnZS5MaXRlcmFscy5ERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fSU5DSURFTkNFMTMsDQorCQkJCSB0cnVlLA0KKwkJCQkgZmFsc2UsDQorCQkJCSBmYWxzZSwNCisJCQkJIEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IuUkVBTF9WQUxVRV9JTUFHRSwNCisJCQkJIG51bGwsDQorCQkJCSBudWxsKSk7DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgYWRkcyBhIHByb3BlcnR5IGRlc2NyaXB0b3IgZm9yIHRoZSBJbmNpZGVuY2UyMyBmZWF0dXJlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIHZvaWQgYWRkSW5jaWRlbmNlMjNQcm9wZXJ0eURlc2NyaXB0b3IoT2JqZWN0IG9iamVjdCkgew0KKwkJaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMuYWRkDQorCQkJKGNyZWF0ZUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3INCisJCQkJKCgoQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSlhZGFwdGVyRmFjdG9yeSkuZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCksDQorCQkJCSBnZXRSZXNvdXJjZUxvY2F0b3IoKSwNCisJCQkJIGdldFN0cmluZygiX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfaW5jaWRlbmNlMjNfZmVhdHVyZSIpLA0KKwkJCQkgZ2V0U3RyaW5nKCJfVUlfUHJvcGVydHlEZXNjcmlwdG9yX2Rlc2NyaXB0aW9uIiwgIl9VSV9EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX2luY2lkZW5jZTIzX2ZlYXR1cmUiLCAiX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfdHlwZSIpLA0KKwkJCQkgVmVjdG9yUGFja2FnZS5MaXRlcmFscy5ERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fSU5DSURFTkNFMjMsDQorCQkJCSB0cnVlLA0KKwkJCQkgZmFsc2UsDQorCQkJCSBmYWxzZSwNCisJCQkJIEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IuUkVBTF9WQUxVRV9JTUFHRSwNCisJCQkJIG51bGwsDQorCQkJCSBudWxsKSk7DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgYWRkcyBhIHByb3BlcnR5IGRlc2NyaXB0b3IgZm9yIHRoZSBJbmNpZGVuY2UzMiBmZWF0dXJlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIHZvaWQgYWRkSW5jaWRlbmNlMzJQcm9wZXJ0eURlc2NyaXB0b3IoT2JqZWN0IG9iamVjdCkgew0KKwkJaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMuYWRkDQorCQkJKGNyZWF0ZUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3INCisJCQkJKCgoQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSlhZGFwdGVyRmFjdG9yeSkuZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCksDQorCQkJCSBnZXRSZXNvdXJjZUxvY2F0b3IoKSwNCisJCQkJIGdldFN0cmluZygiX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfaW5jaWRlbmNlMzJfZmVhdHVyZSIpLA0KKwkJCQkgZ2V0U3RyaW5nKCJfVUlfUHJvcGVydHlEZXNjcmlwdG9yX2Rlc2NyaXB0aW9uIiwgIl9VSV9EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX2luY2lkZW5jZTMyX2ZlYXR1cmUiLCAiX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfdHlwZSIpLA0KKwkJCQkgVmVjdG9yUGFja2FnZS5MaXRlcmFscy5ERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fSU5DSURFTkNFMzIsDQorCQkJCSB0cnVlLA0KKwkJCQkgZmFsc2UsDQorCQkJCSBmYWxzZSwNCisJCQkJIEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IuUkVBTF9WQUxVRV9JTUFHRSwNCisJCQkJIG51bGwsDQorCQkJCSBudWxsKSk7DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgYWRkcyBhIHByb3BlcnR5IGRlc2NyaXB0b3IgZm9yIHRoZSBJbmNpZGVuY2U0MiBmZWF0dXJlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIHZvaWQgYWRkSW5jaWRlbmNlNDJQcm9wZXJ0eURlc2NyaXB0b3IoT2JqZWN0IG9iamVjdCkgew0KKwkJaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMuYWRkDQorCQkJKGNyZWF0ZUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3INCisJCQkJKCgoQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSlhZGFwdGVyRmFjdG9yeSkuZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCksDQorCQkJCSBnZXRSZXNvdXJjZUxvY2F0b3IoKSwNCisJCQkJIGdldFN0cmluZygiX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfaW5jaWRlbmNlNDJfZmVhdHVyZSIpLA0KKwkJCQkgZ2V0U3RyaW5nKCJfVUlfUHJvcGVydHlEZXNjcmlwdG9yX2Rlc2NyaXB0aW9uIiwgIl9VSV9EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX2luY2lkZW5jZTQyX2ZlYXR1cmUiLCAiX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfdHlwZSIpLA0KKwkJCQkgVmVjdG9yUGFja2FnZS5MaXRlcmFscy5ERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fSU5DSURFTkNFNDIsDQorCQkJCSB0cnVlLA0KKwkJCQkgZmFsc2UsDQorCQkJCSBmYWxzZSwNCisJCQkJIEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IuUkVBTF9WQUxVRV9JTUFHRSwNCisJCQkJIG51bGwsDQorCQkJCSBudWxsKSk7DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgYWRkcyBhIHByb3BlcnR5IGRlc2NyaXB0b3IgZm9yIHRoZSBJbmNpZGVuY2UxNCBmZWF0dXJlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIHZvaWQgYWRkSW5jaWRlbmNlMTRQcm9wZXJ0eURlc2NyaXB0b3IoT2JqZWN0IG9iamVjdCkgew0KKwkJaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMuYWRkDQorCQkJKGNyZWF0ZUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3INCisJCQkJKCgoQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSlhZGFwdGVyRmFjdG9yeSkuZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCksDQorCQkJCSBnZXRSZXNvdXJjZUxvY2F0b3IoKSwNCisJCQkJIGdldFN0cmluZygiX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfaW5jaWRlbmNlMTRfZmVhdHVyZSIpLA0KKwkJCQkgZ2V0U3RyaW5nKCJfVUlfUHJvcGVydHlEZXNjcmlwdG9yX2Rlc2NyaXB0aW9uIiwgIl9VSV9EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX2luY2lkZW5jZTE0X2ZlYXR1cmUiLCAiX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfdHlwZSIpLA0KKwkJCQkgVmVjdG9yUGFja2FnZS5MaXRlcmFscy5ERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fSU5DSURFTkNFMTQsDQorCQkJCSB0cnVlLA0KKwkJCQkgZmFsc2UsDQorCQkJCSBmYWxzZSwNCisJCQkJIEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IuUkVBTF9WQUxVRV9JTUFHRSwNCisJCQkJIG51bGwsDQorCQkJCSBudWxsKSk7DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgYWRkcyBhIHByb3BlcnR5IGRlc2NyaXB0b3IgZm9yIHRoZSBJbmNpZGVuY2UyNCBmZWF0dXJlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIHZvaWQgYWRkSW5jaWRlbmNlMjRQcm9wZXJ0eURlc2NyaXB0b3IoT2JqZWN0IG9iamVjdCkgew0KKwkJaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMuYWRkDQorCQkJKGNyZWF0ZUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3INCisJCQkJKCgoQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSlhZGFwdGVyRmFjdG9yeSkuZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCksDQorCQkJCSBnZXRSZXNvdXJjZUxvY2F0b3IoKSwNCisJCQkJIGdldFN0cmluZygiX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfaW5jaWRlbmNlMjRfZmVhdHVyZSIpLA0KKwkJCQkgZ2V0U3RyaW5nKCJfVUlfUHJvcGVydHlEZXNjcmlwdG9yX2Rlc2NyaXB0aW9uIiwgIl9VSV9EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX2luY2lkZW5jZTI0X2ZlYXR1cmUiLCAiX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfdHlwZSIpLA0KKwkJCQkgVmVjdG9yUGFja2FnZS5MaXRlcmFscy5ERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fSU5DSURFTkNFMjQsDQorCQkJCSB0cnVlLA0KKwkJCQkgZmFsc2UsDQorCQkJCSBmYWxzZSwNCisJCQkJIEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IuUkVBTF9WQUxVRV9JTUFHRSwNCisJCQkJIG51bGwsDQorCQkJCSBudWxsKSk7DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgYWRkcyBhIHByb3BlcnR5IGRlc2NyaXB0b3IgZm9yIHRoZSBJbmNpZGVuY2UzNCBmZWF0dXJlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIHZvaWQgYWRkSW5jaWRlbmNlMzRQcm9wZXJ0eURlc2NyaXB0b3IoT2JqZWN0IG9iamVjdCkgew0KKwkJaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMuYWRkDQorCQkJKGNyZWF0ZUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3INCisJCQkJKCgoQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSlhZGFwdGVyRmFjdG9yeSkuZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCksDQorCQkJCSBnZXRSZXNvdXJjZUxvY2F0b3IoKSwNCisJCQkJIGdldFN0cmluZygiX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfaW5jaWRlbmNlMzRfZmVhdHVyZSIpLA0KKwkJCQkgZ2V0U3RyaW5nKCJfVUlfUHJvcGVydHlEZXNjcmlwdG9yX2Rlc2NyaXB0aW9uIiwgIl9VSV9EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX2luY2lkZW5jZTM0X2ZlYXR1cmUiLCAiX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfdHlwZSIpLA0KKwkJCQkgVmVjdG9yUGFja2FnZS5MaXRlcmFscy5ERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fSU5DSURFTkNFMzQsDQorCQkJCSB0cnVlLA0KKwkJCQkgZmFsc2UsDQorCQkJCSBmYWxzZSwNCisJCQkJIEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IuUkVBTF9WQUxVRV9JTUFHRSwNCisJCQkJIG51bGwsDQorCQkJCSBudWxsKSk7DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgYWRkcyBhIHByb3BlcnR5IGRlc2NyaXB0b3IgZm9yIHRoZSBJbmNpZGVuY2U0MyBmZWF0dXJlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIHZvaWQgYWRkSW5jaWRlbmNlNDNQcm9wZXJ0eURlc2NyaXB0b3IoT2JqZWN0IG9iamVjdCkgew0KKwkJaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMuYWRkDQorCQkJKGNyZWF0ZUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3INCisJCQkJKCgoQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSlhZGFwdGVyRmFjdG9yeSkuZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCksDQorCQkJCSBnZXRSZXNvdXJjZUxvY2F0b3IoKSwNCisJCQkJIGdldFN0cmluZygiX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfaW5jaWRlbmNlNDNfZmVhdHVyZSIpLA0KKwkJCQkgZ2V0U3RyaW5nKCJfVUlfUHJvcGVydHlEZXNjcmlwdG9yX2Rlc2NyaXB0aW9uIiwgIl9VSV9EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX2luY2lkZW5jZTQzX2ZlYXR1cmUiLCAiX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfdHlwZSIpLA0KKwkJCQkgVmVjdG9yUGFja2FnZS5MaXRlcmFscy5ERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fSU5DSURFTkNFNDMsDQorCQkJCSB0cnVlLA0KKwkJCQkgZmFsc2UsDQorCQkJCSBmYWxzZSwNCisJCQkJIEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IuUkVBTF9WQUxVRV9JTUFHRSwNCisJCQkJIG51bGwsDQorCQkJCSBudWxsKSk7DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgYWRkcyBhIHByb3BlcnR5IGRlc2NyaXB0b3IgZm9yIHRoZSBEaXNlYXNlIERlYXRoczEgZmVhdHVyZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCB2b2lkIGFkZERpc2Vhc2VEZWF0aHMxUHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdCBvYmplY3QpIHsNCisJCWl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzLmFkZA0KKwkJCShjcmVhdGVJdGVtUHJvcGVydHlEZXNjcmlwdG9yDQorCQkJCSgoKENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnkpYWRhcHRlckZhY3RvcnkpLmdldFJvb3RBZGFwdGVyRmFjdG9yeSgpLA0KKwkJCQkgZ2V0UmVzb3VyY2VMb2NhdG9yKCksDQorCQkJCSBnZXRTdHJpbmcoIl9VSV9EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX2Rpc2Vhc2VEZWF0aHMxX2ZlYXR1cmUiKSwNCisJCQkJIGdldFN0cmluZygiX1VJX1Byb3BlcnR5RGVzY3JpcHRvcl9kZXNjcmlwdGlvbiIsICJfVUlfRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9kaXNlYXNlRGVhdGhzMV9mZWF0dXJlIiwgIl9VSV9EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX3R5cGUiKSwNCisJCQkJIFZlY3RvclBhY2thZ2UuTGl0ZXJhbHMuREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0RJU0VBU0VfREVBVEhTMSwNCisJCQkJIHRydWUsDQorCQkJCSBmYWxzZSwNCisJCQkJIGZhbHNlLA0KKwkJCQkgSXRlbVByb3BlcnR5RGVzY3JpcHRvci5SRUFMX1ZBTFVFX0lNQUdFLA0KKwkJCQkgbnVsbCwNCisJCQkJIG51bGwpKTsNCisJfQ0KKw0KKwkvKioNCisJICogVGhpcyBhZGRzIGEgcHJvcGVydHkgZGVzY3JpcHRvciBmb3IgdGhlIERpc2Vhc2UgRGVhdGhzMiBmZWF0dXJlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIHZvaWQgYWRkRGlzZWFzZURlYXRoczJQcm9wZXJ0eURlc2NyaXB0b3IoT2JqZWN0IG9iamVjdCkgew0KKwkJaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMuYWRkDQorCQkJKGNyZWF0ZUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3INCisJCQkJKCgoQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSlhZGFwdGVyRmFjdG9yeSkuZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCksDQorCQkJCSBnZXRSZXNvdXJjZUxvY2F0b3IoKSwNCisJCQkJIGdldFN0cmluZygiX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfZGlzZWFzZURlYXRoczJfZmVhdHVyZSIpLA0KKwkJCQkgZ2V0U3RyaW5nKCJfVUlfUHJvcGVydHlEZXNjcmlwdG9yX2Rlc2NyaXB0aW9uIiwgIl9VSV9EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX2Rpc2Vhc2VEZWF0aHMyX2ZlYXR1cmUiLCAiX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfdHlwZSIpLA0KKwkJCQkgVmVjdG9yUGFja2FnZS5MaXRlcmFscy5ERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fRElTRUFTRV9ERUFUSFMyLA0KKwkJCQkgdHJ1ZSwNCisJCQkJIGZhbHNlLA0KKwkJCQkgZmFsc2UsDQorCQkJCSBJdGVtUHJvcGVydHlEZXNjcmlwdG9yLlJFQUxfVkFMVUVfSU1BR0UsDQorCQkJCSBudWxsLA0KKwkJCQkgbnVsbCkpOw0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIGFkZHMgYSBwcm9wZXJ0eSBkZXNjcmlwdG9yIGZvciB0aGUgRGlzZWFzZSBEZWF0aHMzIGZlYXR1cmUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgdm9pZCBhZGREaXNlYXNlRGVhdGhzM1Byb3BlcnR5RGVzY3JpcHRvcihPYmplY3Qgb2JqZWN0KSB7DQorCQlpdGVtUHJvcGVydHlEZXNjcmlwdG9ycy5hZGQNCisJCQkoY3JlYXRlSXRlbVByb3BlcnR5RGVzY3JpcHRvcg0KKwkJCQkoKChDb21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5KWFkYXB0ZXJGYWN0b3J5KS5nZXRSb290QWRhcHRlckZhY3RvcnkoKSwNCisJCQkJIGdldFJlc291cmNlTG9jYXRvcigpLA0KKwkJCQkgZ2V0U3RyaW5nKCJfVUlfRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9kaXNlYXNlRGVhdGhzM19mZWF0dXJlIiksDQorCQkJCSBnZXRTdHJpbmcoIl9VSV9Qcm9wZXJ0eURlc2NyaXB0b3JfZGVzY3JpcHRpb24iLCAiX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfZGlzZWFzZURlYXRoczNfZmVhdHVyZSIsICJfVUlfRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV90eXBlIiksDQorCQkJCSBWZWN0b3JQYWNrYWdlLkxpdGVyYWxzLkRFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19ESVNFQVNFX0RFQVRIUzMsDQorCQkJCSB0cnVlLA0KKwkJCQkgZmFsc2UsDQorCQkJCSBmYWxzZSwNCisJCQkJIEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IuUkVBTF9WQUxVRV9JTUFHRSwNCisJCQkJIG51bGwsDQorCQkJCSBudWxsKSk7DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgYWRkcyBhIHByb3BlcnR5IGRlc2NyaXB0b3IgZm9yIHRoZSBEaXNlYXNlIERlYXRoczQgZmVhdHVyZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCB2b2lkIGFkZERpc2Vhc2VEZWF0aHM0UHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdCBvYmplY3QpIHsNCisJCWl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzLmFkZA0KKwkJCShjcmVhdGVJdGVtUHJvcGVydHlEZXNjcmlwdG9yDQorCQkJCSgoKENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnkpYWRhcHRlckZhY3RvcnkpLmdldFJvb3RBZGFwdGVyRmFjdG9yeSgpLA0KKwkJCQkgZ2V0UmVzb3VyY2VMb2NhdG9yKCksDQorCQkJCSBnZXRTdHJpbmcoIl9VSV9EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX2Rpc2Vhc2VEZWF0aHM0X2ZlYXR1cmUiKSwNCisJCQkJIGdldFN0cmluZygiX1VJX1Byb3BlcnR5RGVzY3JpcHRvcl9kZXNjcmlwdGlvbiIsICJfVUlfRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9kaXNlYXNlRGVhdGhzNF9mZWF0dXJlIiwgIl9VSV9EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX3R5cGUiKSwNCisJCQkJIFZlY3RvclBhY2thZ2UuTGl0ZXJhbHMuREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0RJU0VBU0VfREVBVEhTNCwNCisJCQkJIHRydWUsDQorCQkJCSBmYWxzZSwNCisJCQkJIGZhbHNlLA0KKwkJCQkgSXRlbVByb3BlcnR5RGVzY3JpcHRvci5SRUFMX1ZBTFVFX0lNQUdFLA0KKwkJCQkgbnVsbCwNCisJCQkJIG51bGwpKTsNCisJfQ0KKw0KKwkvKioNCisJICogVGhpcyBhZGRzIGEgcHJvcGVydHkgZGVzY3JpcHRvciBmb3IgdGhlIERpc2Vhc2UgRGVhdGhzMTIgZmVhdHVyZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCB2b2lkIGFkZERpc2Vhc2VEZWF0aHMxMlByb3BlcnR5RGVzY3JpcHRvcihPYmplY3Qgb2JqZWN0KSB7DQorCQlpdGVtUHJvcGVydHlEZXNjcmlwdG9ycy5hZGQNCisJCQkoY3JlYXRlSXRlbVByb3BlcnR5RGVzY3JpcHRvcg0KKwkJCQkoKChDb21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5KWFkYXB0ZXJGYWN0b3J5KS5nZXRSb290QWRhcHRlckZhY3RvcnkoKSwNCisJCQkJIGdldFJlc291cmNlTG9jYXRvcigpLA0KKwkJCQkgZ2V0U3RyaW5nKCJfVUlfRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9kaXNlYXNlRGVhdGhzMTJfZmVhdHVyZSIpLA0KKwkJCQkgZ2V0U3RyaW5nKCJfVUlfUHJvcGVydHlEZXNjcmlwdG9yX2Rlc2NyaXB0aW9uIiwgIl9VSV9EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX2Rpc2Vhc2VEZWF0aHMxMl9mZWF0dXJlIiwgIl9VSV9EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX3R5cGUiKSwNCisJCQkJIFZlY3RvclBhY2thZ2UuTGl0ZXJhbHMuREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0RJU0VBU0VfREVBVEhTMTIsDQorCQkJCSB0cnVlLA0KKwkJCQkgZmFsc2UsDQorCQkJCSBmYWxzZSwNCisJCQkJIEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IuUkVBTF9WQUxVRV9JTUFHRSwNCisJCQkJIG51bGwsDQorCQkJCSBudWxsKSk7DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgYWRkcyBhIHByb3BlcnR5IGRlc2NyaXB0b3IgZm9yIHRoZSBEaXNlYXNlIERlYXRoczIxIGZlYXR1cmUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgdm9pZCBhZGREaXNlYXNlRGVhdGhzMjFQcm9wZXJ0eURlc2NyaXB0b3IoT2JqZWN0IG9iamVjdCkgew0KKwkJaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMuYWRkDQorCQkJKGNyZWF0ZUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3INCisJCQkJKCgoQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSlhZGFwdGVyRmFjdG9yeSkuZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCksDQorCQkJCSBnZXRSZXNvdXJjZUxvY2F0b3IoKSwNCisJCQkJIGdldFN0cmluZygiX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfZGlzZWFzZURlYXRoczIxX2ZlYXR1cmUiKSwNCisJCQkJIGdldFN0cmluZygiX1VJX1Byb3BlcnR5RGVzY3JpcHRvcl9kZXNjcmlwdGlvbiIsICJfVUlfRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9kaXNlYXNlRGVhdGhzMjFfZmVhdHVyZSIsICJfVUlfRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV90eXBlIiksDQorCQkJCSBWZWN0b3JQYWNrYWdlLkxpdGVyYWxzLkRFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19ESVNFQVNFX0RFQVRIUzIxLA0KKwkJCQkgdHJ1ZSwNCisJCQkJIGZhbHNlLA0KKwkJCQkgZmFsc2UsDQorCQkJCSBJdGVtUHJvcGVydHlEZXNjcmlwdG9yLlJFQUxfVkFMVUVfSU1BR0UsDQorCQkJCSBudWxsLA0KKwkJCQkgbnVsbCkpOw0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIGFkZHMgYSBwcm9wZXJ0eSBkZXNjcmlwdG9yIGZvciB0aGUgRGlzZWFzZSBEZWF0aHMzMSBmZWF0dXJlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIHZvaWQgYWRkRGlzZWFzZURlYXRoczMxUHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdCBvYmplY3QpIHsNCisJCWl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzLmFkZA0KKwkJCShjcmVhdGVJdGVtUHJvcGVydHlEZXNjcmlwdG9yDQorCQkJCSgoKENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnkpYWRhcHRlckZhY3RvcnkpLmdldFJvb3RBZGFwdGVyRmFjdG9yeSgpLA0KKwkJCQkgZ2V0UmVzb3VyY2VMb2NhdG9yKCksDQorCQkJCSBnZXRTdHJpbmcoIl9VSV9EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX2Rpc2Vhc2VEZWF0aHMzMV9mZWF0dXJlIiksDQorCQkJCSBnZXRTdHJpbmcoIl9VSV9Qcm9wZXJ0eURlc2NyaXB0b3JfZGVzY3JpcHRpb24iLCAiX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfZGlzZWFzZURlYXRoczMxX2ZlYXR1cmUiLCAiX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfdHlwZSIpLA0KKwkJCQkgVmVjdG9yUGFja2FnZS5MaXRlcmFscy5ERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fRElTRUFTRV9ERUFUSFMzMSwNCisJCQkJIHRydWUsDQorCQkJCSBmYWxzZSwNCisJCQkJIGZhbHNlLA0KKwkJCQkgSXRlbVByb3BlcnR5RGVzY3JpcHRvci5SRUFMX1ZBTFVFX0lNQUdFLA0KKwkJCQkgbnVsbCwNCisJCQkJIG51bGwpKTsNCisJfQ0KKw0KKwkvKioNCisJICogVGhpcyBhZGRzIGEgcHJvcGVydHkgZGVzY3JpcHRvciBmb3IgdGhlIERpc2Vhc2UgRGVhdGhzNDEgZmVhdHVyZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCB2b2lkIGFkZERpc2Vhc2VEZWF0aHM0MVByb3BlcnR5RGVzY3JpcHRvcihPYmplY3Qgb2JqZWN0KSB7DQorCQlpdGVtUHJvcGVydHlEZXNjcmlwdG9ycy5hZGQNCisJCQkoY3JlYXRlSXRlbVByb3BlcnR5RGVzY3JpcHRvcg0KKwkJCQkoKChDb21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5KWFkYXB0ZXJGYWN0b3J5KS5nZXRSb290QWRhcHRlckZhY3RvcnkoKSwNCisJCQkJIGdldFJlc291cmNlTG9jYXRvcigpLA0KKwkJCQkgZ2V0U3RyaW5nKCJfVUlfRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9kaXNlYXNlRGVhdGhzNDFfZmVhdHVyZSIpLA0KKwkJCQkgZ2V0U3RyaW5nKCJfVUlfUHJvcGVydHlEZXNjcmlwdG9yX2Rlc2NyaXB0aW9uIiwgIl9VSV9EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX2Rpc2Vhc2VEZWF0aHM0MV9mZWF0dXJlIiwgIl9VSV9EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX3R5cGUiKSwNCisJCQkJIFZlY3RvclBhY2thZ2UuTGl0ZXJhbHMuREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0RJU0VBU0VfREVBVEhTNDEsDQorCQkJCSB0cnVlLA0KKwkJCQkgZmFsc2UsDQorCQkJCSBmYWxzZSwNCisJCQkJIEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IuUkVBTF9WQUxVRV9JTUFHRSwNCisJCQkJIG51bGwsDQorCQkJCSBudWxsKSk7DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgYWRkcyBhIHByb3BlcnR5IGRlc2NyaXB0b3IgZm9yIHRoZSBEaXNlYXNlIERlYXRoczEzIGZlYXR1cmUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgdm9pZCBhZGREaXNlYXNlRGVhdGhzMTNQcm9wZXJ0eURlc2NyaXB0b3IoT2JqZWN0IG9iamVjdCkgew0KKwkJaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMuYWRkDQorCQkJKGNyZWF0ZUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3INCisJCQkJKCgoQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSlhZGFwdGVyRmFjdG9yeSkuZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCksDQorCQkJCSBnZXRSZXNvdXJjZUxvY2F0b3IoKSwNCisJCQkJIGdldFN0cmluZygiX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfZGlzZWFzZURlYXRoczEzX2ZlYXR1cmUiKSwNCisJCQkJIGdldFN0cmluZygiX1VJX1Byb3BlcnR5RGVzY3JpcHRvcl9kZXNjcmlwdGlvbiIsICJfVUlfRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9kaXNlYXNlRGVhdGhzMTNfZmVhdHVyZSIsICJfVUlfRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV90eXBlIiksDQorCQkJCSBWZWN0b3JQYWNrYWdlLkxpdGVyYWxzLkRFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19ESVNFQVNFX0RFQVRIUzEzLA0KKwkJCQkgdHJ1ZSwNCisJCQkJIGZhbHNlLA0KKwkJCQkgZmFsc2UsDQorCQkJCSBJdGVtUHJvcGVydHlEZXNjcmlwdG9yLlJFQUxfVkFMVUVfSU1BR0UsDQorCQkJCSBudWxsLA0KKwkJCQkgbnVsbCkpOw0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIGFkZHMgYSBwcm9wZXJ0eSBkZXNjcmlwdG9yIGZvciB0aGUgRGlzZWFzZSBEZWF0aHMyMyBmZWF0dXJlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIHZvaWQgYWRkRGlzZWFzZURlYXRoczIzUHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdCBvYmplY3QpIHsNCisJCWl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzLmFkZA0KKwkJCShjcmVhdGVJdGVtUHJvcGVydHlEZXNjcmlwdG9yDQorCQkJCSgoKENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnkpYWRhcHRlckZhY3RvcnkpLmdldFJvb3RBZGFwdGVyRmFjdG9yeSgpLA0KKwkJCQkgZ2V0UmVzb3VyY2VMb2NhdG9yKCksDQorCQkJCSBnZXRTdHJpbmcoIl9VSV9EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX2Rpc2Vhc2VEZWF0aHMyM19mZWF0dXJlIiksDQorCQkJCSBnZXRTdHJpbmcoIl9VSV9Qcm9wZXJ0eURlc2NyaXB0b3JfZGVzY3JpcHRpb24iLCAiX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfZGlzZWFzZURlYXRoczIzX2ZlYXR1cmUiLCAiX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfdHlwZSIpLA0KKwkJCQkgVmVjdG9yUGFja2FnZS5MaXRlcmFscy5ERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fRElTRUFTRV9ERUFUSFMyMywNCisJCQkJIHRydWUsDQorCQkJCSBmYWxzZSwNCisJCQkJIGZhbHNlLA0KKwkJCQkgSXRlbVByb3BlcnR5RGVzY3JpcHRvci5SRUFMX1ZBTFVFX0lNQUdFLA0KKwkJCQkgbnVsbCwNCisJCQkJIG51bGwpKTsNCisJfQ0KKw0KKwkvKioNCisJICogVGhpcyBhZGRzIGEgcHJvcGVydHkgZGVzY3JpcHRvciBmb3IgdGhlIERpc2Vhc2UgRGVhdGhzMzIgZmVhdHVyZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCB2b2lkIGFkZERpc2Vhc2VEZWF0aHMzMlByb3BlcnR5RGVzY3JpcHRvcihPYmplY3Qgb2JqZWN0KSB7DQorCQlpdGVtUHJvcGVydHlEZXNjcmlwdG9ycy5hZGQNCisJCQkoY3JlYXRlSXRlbVByb3BlcnR5RGVzY3JpcHRvcg0KKwkJCQkoKChDb21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5KWFkYXB0ZXJGYWN0b3J5KS5nZXRSb290QWRhcHRlckZhY3RvcnkoKSwNCisJCQkJIGdldFJlc291cmNlTG9jYXRvcigpLA0KKwkJCQkgZ2V0U3RyaW5nKCJfVUlfRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9kaXNlYXNlRGVhdGhzMzJfZmVhdHVyZSIpLA0KKwkJCQkgZ2V0U3RyaW5nKCJfVUlfUHJvcGVydHlEZXNjcmlwdG9yX2Rlc2NyaXB0aW9uIiwgIl9VSV9EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX2Rpc2Vhc2VEZWF0aHMzMl9mZWF0dXJlIiwgIl9VSV9EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX3R5cGUiKSwNCisJCQkJIFZlY3RvclBhY2thZ2UuTGl0ZXJhbHMuREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0RJU0VBU0VfREVBVEhTMzIsDQorCQkJCSB0cnVlLA0KKwkJCQkgZmFsc2UsDQorCQkJCSBmYWxzZSwNCisJCQkJIEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IuUkVBTF9WQUxVRV9JTUFHRSwNCisJCQkJIG51bGwsDQorCQkJCSBudWxsKSk7DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgYWRkcyBhIHByb3BlcnR5IGRlc2NyaXB0b3IgZm9yIHRoZSBEaXNlYXNlIERlYXRoczQyIGZlYXR1cmUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgdm9pZCBhZGREaXNlYXNlRGVhdGhzNDJQcm9wZXJ0eURlc2NyaXB0b3IoT2JqZWN0IG9iamVjdCkgew0KKwkJaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMuYWRkDQorCQkJKGNyZWF0ZUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3INCisJCQkJKCgoQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSlhZGFwdGVyRmFjdG9yeSkuZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCksDQorCQkJCSBnZXRSZXNvdXJjZUxvY2F0b3IoKSwNCisJCQkJIGdldFN0cmluZygiX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfZGlzZWFzZURlYXRoczQyX2ZlYXR1cmUiKSwNCisJCQkJIGdldFN0cmluZygiX1VJX1Byb3BlcnR5RGVzY3JpcHRvcl9kZXNjcmlwdGlvbiIsICJfVUlfRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9kaXNlYXNlRGVhdGhzNDJfZmVhdHVyZSIsICJfVUlfRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV90eXBlIiksDQorCQkJCSBWZWN0b3JQYWNrYWdlLkxpdGVyYWxzLkRFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19ESVNFQVNFX0RFQVRIUzQyLA0KKwkJCQkgdHJ1ZSwNCisJCQkJIGZhbHNlLA0KKwkJCQkgZmFsc2UsDQorCQkJCSBJdGVtUHJvcGVydHlEZXNjcmlwdG9yLlJFQUxfVkFMVUVfSU1BR0UsDQorCQkJCSBudWxsLA0KKwkJCQkgbnVsbCkpOw0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIGFkZHMgYSBwcm9wZXJ0eSBkZXNjcmlwdG9yIGZvciB0aGUgRGlzZWFzZSBEZWF0aHMxNCBmZWF0dXJlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIHZvaWQgYWRkRGlzZWFzZURlYXRoczE0UHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdCBvYmplY3QpIHsNCisJCWl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzLmFkZA0KKwkJCShjcmVhdGVJdGVtUHJvcGVydHlEZXNjcmlwdG9yDQorCQkJCSgoKENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnkpYWRhcHRlckZhY3RvcnkpLmdldFJvb3RBZGFwdGVyRmFjdG9yeSgpLA0KKwkJCQkgZ2V0UmVzb3VyY2VMb2NhdG9yKCksDQorCQkJCSBnZXRTdHJpbmcoIl9VSV9EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX2Rpc2Vhc2VEZWF0aHMxNF9mZWF0dXJlIiksDQorCQkJCSBnZXRTdHJpbmcoIl9VSV9Qcm9wZXJ0eURlc2NyaXB0b3JfZGVzY3JpcHRpb24iLCAiX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfZGlzZWFzZURlYXRoczE0X2ZlYXR1cmUiLCAiX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfdHlwZSIpLA0KKwkJCQkgVmVjdG9yUGFja2FnZS5MaXRlcmFscy5ERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fRElTRUFTRV9ERUFUSFMxNCwNCisJCQkJIHRydWUsDQorCQkJCSBmYWxzZSwNCisJCQkJIGZhbHNlLA0KKwkJCQkgSXRlbVByb3BlcnR5RGVzY3JpcHRvci5SRUFMX1ZBTFVFX0lNQUdFLA0KKwkJCQkgbnVsbCwNCisJCQkJIG51bGwpKTsNCisJfQ0KKw0KKwkvKioNCisJICogVGhpcyBhZGRzIGEgcHJvcGVydHkgZGVzY3JpcHRvciBmb3IgdGhlIERpc2Vhc2UgRGVhdGhzMjQgZmVhdHVyZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCB2b2lkIGFkZERpc2Vhc2VEZWF0aHMyNFByb3BlcnR5RGVzY3JpcHRvcihPYmplY3Qgb2JqZWN0KSB7DQorCQlpdGVtUHJvcGVydHlEZXNjcmlwdG9ycy5hZGQNCisJCQkoY3JlYXRlSXRlbVByb3BlcnR5RGVzY3JpcHRvcg0KKwkJCQkoKChDb21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5KWFkYXB0ZXJGYWN0b3J5KS5nZXRSb290QWRhcHRlckZhY3RvcnkoKSwNCisJCQkJIGdldFJlc291cmNlTG9jYXRvcigpLA0KKwkJCQkgZ2V0U3RyaW5nKCJfVUlfRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9kaXNlYXNlRGVhdGhzMjRfZmVhdHVyZSIpLA0KKwkJCQkgZ2V0U3RyaW5nKCJfVUlfUHJvcGVydHlEZXNjcmlwdG9yX2Rlc2NyaXB0aW9uIiwgIl9VSV9EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX2Rpc2Vhc2VEZWF0aHMyNF9mZWF0dXJlIiwgIl9VSV9EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX3R5cGUiKSwNCisJCQkJIFZlY3RvclBhY2thZ2UuTGl0ZXJhbHMuREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0RJU0VBU0VfREVBVEhTMjQsDQorCQkJCSB0cnVlLA0KKwkJCQkgZmFsc2UsDQorCQkJCSBmYWxzZSwNCisJCQkJIEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IuUkVBTF9WQUxVRV9JTUFHRSwNCisJCQkJIG51bGwsDQorCQkJCSBudWxsKSk7DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgYWRkcyBhIHByb3BlcnR5IGRlc2NyaXB0b3IgZm9yIHRoZSBEaXNlYXNlIERlYXRoczM0IGZlYXR1cmUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgdm9pZCBhZGREaXNlYXNlRGVhdGhzMzRQcm9wZXJ0eURlc2NyaXB0b3IoT2JqZWN0IG9iamVjdCkgew0KKwkJaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMuYWRkDQorCQkJKGNyZWF0ZUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3INCisJCQkJKCgoQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSlhZGFwdGVyRmFjdG9yeSkuZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCksDQorCQkJCSBnZXRSZXNvdXJjZUxvY2F0b3IoKSwNCisJCQkJIGdldFN0cmluZygiX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfZGlzZWFzZURlYXRoczM0X2ZlYXR1cmUiKSwNCisJCQkJIGdldFN0cmluZygiX1VJX1Byb3BlcnR5RGVzY3JpcHRvcl9kZXNjcmlwdGlvbiIsICJfVUlfRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9kaXNlYXNlRGVhdGhzMzRfZmVhdHVyZSIsICJfVUlfRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV90eXBlIiksDQorCQkJCSBWZWN0b3JQYWNrYWdlLkxpdGVyYWxzLkRFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19ESVNFQVNFX0RFQVRIUzM0LA0KKwkJCQkgdHJ1ZSwNCisJCQkJIGZhbHNlLA0KKwkJCQkgZmFsc2UsDQorCQkJCSBJdGVtUHJvcGVydHlEZXNjcmlwdG9yLlJFQUxfVkFMVUVfSU1BR0UsDQorCQkJCSBudWxsLA0KKwkJCQkgbnVsbCkpOw0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIGFkZHMgYSBwcm9wZXJ0eSBkZXNjcmlwdG9yIGZvciB0aGUgRGlzZWFzZSBEZWF0aHM0MyBmZWF0dXJlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIHZvaWQgYWRkRGlzZWFzZURlYXRoczQzUHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdCBvYmplY3QpIHsNCisJCWl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzLmFkZA0KKwkJCShjcmVhdGVJdGVtUHJvcGVydHlEZXNjcmlwdG9yDQorCQkJCSgoKENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnkpYWRhcHRlckZhY3RvcnkpLmdldFJvb3RBZGFwdGVyRmFjdG9yeSgpLA0KKwkJCQkgZ2V0UmVzb3VyY2VMb2NhdG9yKCksDQorCQkJCSBnZXRTdHJpbmcoIl9VSV9EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX2Rpc2Vhc2VEZWF0aHM0M19mZWF0dXJlIiksDQorCQkJCSBnZXRTdHJpbmcoIl9VSV9Qcm9wZXJ0eURlc2NyaXB0b3JfZGVzY3JpcHRpb24iLCAiX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfZGlzZWFzZURlYXRoczQzX2ZlYXR1cmUiLCAiX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfdHlwZSIpLA0KKwkJCQkgVmVjdG9yUGFja2FnZS5MaXRlcmFscy5ERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fRElTRUFTRV9ERUFUSFM0MywNCisJCQkJIHRydWUsDQorCQkJCSBmYWxzZSwNCisJCQkJIGZhbHNlLA0KKwkJCQkgSXRlbVByb3BlcnR5RGVzY3JpcHRvci5SRUFMX1ZBTFVFX0lNQUdFLA0KKwkJCQkgbnVsbCwNCisJCQkJIG51bGwpKTsNCisJfQ0KKw0KKwkvKioNCisJICogVGhpcyByZXR1cm5zIERlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWUuZ2lmLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJQE92ZXJyaWRlDQorCXB1YmxpYyBPYmplY3QgZ2V0SW1hZ2UoT2JqZWN0IG9iamVjdCkgew0KKwkJcmV0dXJuIG92ZXJsYXlJbWFnZShvYmplY3QsIGdldFJlc291cmNlTG9jYXRvcigpLmdldEltYWdlKCJmdWxsL29iajE2L0Rlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWUiKSk7DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgcmV0dXJucyB0aGUgbGFiZWwgdGV4dCBmb3IgdGhlIGFkYXB0ZWQgY2xhc3MuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlAT3ZlcnJpZGUNCisJcHVibGljIFN0cmluZyBnZXRUZXh0KE9iamVjdCBvYmplY3QpIHsNCisJCURlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWUgZGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZSA9IChEZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlKW9iamVjdDsNCisJCXJldHVybiBnZXRTdHJpbmcoIl9VSV9EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX3R5cGUiKSArICIgIiArIGRlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWUuZ2V0UG9wdWxhdGlvbkNvdW50KCk7DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgaGFuZGxlcyBtb2RlbCBub3RpZmljYXRpb25zIGJ5IGNhbGxpbmcge0BsaW5rICN1cGRhdGVDaGlsZHJlbn0gdG8gdXBkYXRlIGFueSBjYWNoZWQNCisJICogY2hpbGRyZW4gYW5kIGJ5IGNyZWF0aW5nIGEgdmlld2VyIG5vdGlmaWNhdGlvbiwgd2hpY2ggaXQgcGFzc2VzIHRvIHtAbGluayAjZmlyZU5vdGlmeUNoYW5nZWR9Lg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJQE92ZXJyaWRlDQorCXB1YmxpYyB2b2lkIG5vdGlmeUNoYW5nZWQoTm90aWZpY2F0aW9uIG5vdGlmaWNhdGlvbikgew0KKwkJdXBkYXRlQ2hpbGRyZW4obm90aWZpY2F0aW9uKTsNCisNCisJCXN3aXRjaCAobm90aWZpY2F0aW9uLmdldEZlYXR1cmVJRChEZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlLmNsYXNzKSkgew0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fRTE6DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19FMjoNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0UzOg0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fRTQ6DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19JMToNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0kyOg0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fSTM6DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19JNDoNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX1QxOg0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fVDI6DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19UMzoNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX1Q0Og0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fUjE6DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19SMjoNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX1IzOg0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fUjQ6DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19FMTI6DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19FMTM6DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19FMTQ6DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19FMjE6DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19FMjM6DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19FMjQ6DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19FMzE6DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19FMzI6DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19FMzQ6DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19FNDE6DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19FNDI6DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19FNDM6DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19JMTI6DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19JMTM6DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19JMTQ6DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19JMjE6DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19JMjM6DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19JMjQ6DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19JMzE6DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19JMzI6DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19JMzQ6DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19JNDE6DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19JNDI6DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19JNDM6DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19SOg0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fSU5DSURFTkNFMToNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0lOQ0lERU5DRTI6DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19JTkNJREVOQ0UzOg0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fSU5DSURFTkNFNDoNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0lOQ0lERU5DRTEyOg0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fSU5DSURFTkNFMjE6DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19JTkNJREVOQ0UzMToNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0lOQ0lERU5DRTQxOg0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fSU5DSURFTkNFMTM6DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19JTkNJREVOQ0UyMzoNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0lOQ0lERU5DRTMyOg0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fSU5DSURFTkNFNDI6DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19JTkNJREVOQ0UxNDoNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0lOQ0lERU5DRTI0Og0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fSU5DSURFTkNFMzQ6DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19JTkNJREVOQ0U0MzoNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0RJU0VBU0VfREVBVEhTMToNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0RJU0VBU0VfREVBVEhTMjoNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0RJU0VBU0VfREVBVEhTMzoNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0RJU0VBU0VfREVBVEhTNDoNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0RJU0VBU0VfREVBVEhTMTI6DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19ESVNFQVNFX0RFQVRIUzIxOg0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fRElTRUFTRV9ERUFUSFMzMToNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0RJU0VBU0VfREVBVEhTNDE6DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19ESVNFQVNFX0RFQVRIUzEzOg0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fRElTRUFTRV9ERUFUSFMyMzoNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0RJU0VBU0VfREVBVEhTMzI6DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19ESVNFQVNFX0RFQVRIUzQyOg0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fRElTRUFTRV9ERUFUSFMxNDoNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0RJU0VBU0VfREVBVEhTMjQ6DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19ESVNFQVNFX0RFQVRIUzM0Og0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fRElTRUFTRV9ERUFUSFM0MzoNCisJCQkJZmlyZU5vdGlmeUNoYW5nZWQobmV3IFZpZXdlck5vdGlmaWNhdGlvbihub3RpZmljYXRpb24sIG5vdGlmaWNhdGlvbi5nZXROb3RpZmllcigpLCBmYWxzZSwgdHJ1ZSkpOw0KKwkJCQlyZXR1cm47DQorCQl9DQorCQlzdXBlci5ub3RpZnlDaGFuZ2VkKG5vdGlmaWNhdGlvbik7DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgYWRkcyB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmVkaXQuY29tbWFuZC5Db21tYW5kUGFyYW1ldGVyfXMgZGVzY3JpYmluZyB0aGUgY2hpbGRyZW4NCisJICogdGhhdCBjYW4gYmUgY3JlYXRlZCB1bmRlciB0aGlzIG9iamVjdC4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCUBPdmVycmlkZQ0KKwlwcm90ZWN0ZWQgdm9pZCBjb2xsZWN0TmV3Q2hpbGREZXNjcmlwdG9ycyhDb2xsZWN0aW9uPE9iamVjdD4gbmV3Q2hpbGREZXNjcmlwdG9ycywgT2JqZWN0IG9iamVjdCkgew0KKwkJc3VwZXIuY29sbGVjdE5ld0NoaWxkRGVzY3JpcHRvcnMobmV3Q2hpbGREZXNjcmlwdG9ycywgb2JqZWN0KTsNCisJfQ0KKw0KKwkvKioNCisJICogUmV0dXJuIHRoZSByZXNvdXJjZSBsb2NhdG9yIGZvciB0aGlzIGl0ZW0gcHJvdmlkZXIncyByZXNvdXJjZXMuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlAT3ZlcnJpZGUNCisJcHVibGljIFJlc291cmNlTG9jYXRvciBnZXRSZXNvdXJjZUxvY2F0b3IoKSB7DQorCQlyZXR1cm4gVmVjdG9yRWRpdFBsdWdpbi5JTlNUQU5DRTsNCisJfQ0KKw0KK30NCmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3Ivc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy92ZWN0b3IvcHJvdmlkZXIvRGVuZ3VlTW9kZWxJdGVtUHJvdmlkZXIuamF2YSBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3ZlY3Rvci9wcm92aWRlci9EZW5ndWVNb2RlbEl0ZW1Qcm92aWRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU5Y2RjMzIKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3Ivc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy92ZWN0b3IvcHJvdmlkZXIvRGVuZ3VlTW9kZWxJdGVtUHJvdmlkZXIuamF2YQpAQCAtMCwwICsxLDIwOTUgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5wcm92aWRlcjsNCisNCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyAqIENvcHlyaWdodCAoYykgMjAxMSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4NCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzDQorICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wDQorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQNCisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbA0KKyAqDQorICogQ29udHJpYnV0b3JzOg0KKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24NCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCisNCitpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247DQoraW1wb3J0IGphdmEudXRpbC5MaXN0Ow0KKw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5BZGFwdGVyRmFjdG9yeTsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uOw0KKw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5Db21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5Ow0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JRWRpdGluZ0RvbWFpbkl0ZW1Qcm92aWRlcjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1MYWJlbFByb3ZpZGVyOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbVByb3BlcnR5RGVzY3JpcHRvcjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1Qcm9wZXJ0eVNvdXJjZTsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVN0cnVjdHVyZWRJdGVtQ29udGVudFByb3ZpZGVyOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JVHJlZUl0ZW1Db250ZW50UHJvdmlkZXI7DQorDQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLlZpZXdlck5vdGlmaWNhdGlvbjsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbDsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5WZWN0b3JQYWNrYWdlOw0KKw0KKy8qKg0KKyAqIFRoaXMgaXMgdGhlIGl0ZW0gcHJvdmlkZXIgYWRhcHRlciBmb3IgYSB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbH0gb2JqZWN0Lg0KKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorICogQGdlbmVyYXRlZA0KKyAqLw0KK3B1YmxpYyBjbGFzcyBEZW5ndWVNb2RlbEl0ZW1Qcm92aWRlcg0KKwlleHRlbmRzIFZlY3RvckRpc2Vhc2VNb2RlbEl0ZW1Qcm92aWRlcg0KKwlpbXBsZW1lbnRzDQorCQlJRWRpdGluZ0RvbWFpbkl0ZW1Qcm92aWRlciwNCisJCUlTdHJ1Y3R1cmVkSXRlbUNvbnRlbnRQcm92aWRlciwNCisJCUlUcmVlSXRlbUNvbnRlbnRQcm92aWRlciwNCisJCUlJdGVtTGFiZWxQcm92aWRlciwNCisJCUlJdGVtUHJvcGVydHlTb3VyY2Ugew0KKwkvKioNCisJICogVGhpcyBjb25zdHJ1Y3RzIGFuIGluc3RhbmNlIGZyb20gYSBmYWN0b3J5IGFuZCBhIG5vdGlmaWVyLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIERlbmd1ZU1vZGVsSXRlbVByb3ZpZGVyKEFkYXB0ZXJGYWN0b3J5IGFkYXB0ZXJGYWN0b3J5KSB7DQorCQlzdXBlcihhZGFwdGVyRmFjdG9yeSk7DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgcmV0dXJucyB0aGUgcHJvcGVydHkgZGVzY3JpcHRvcnMgZm9yIHRoZSBhZGFwdGVkIGNsYXNzLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJQE92ZXJyaWRlDQorCXB1YmxpYyBMaXN0PElJdGVtUHJvcGVydHlEZXNjcmlwdG9yPiBnZXRQcm9wZXJ0eURlc2NyaXB0b3JzKE9iamVjdCBvYmplY3QpIHsNCisJCWlmIChpdGVtUHJvcGVydHlEZXNjcmlwdG9ycyA9PSBudWxsKSB7DQorCQkJc3VwZXIuZ2V0UHJvcGVydHlEZXNjcmlwdG9ycyhvYmplY3QpOw0KKw0KKwkJCWFkZEJpdGluZ1JhdGVTVlByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QpOw0KKwkJCWFkZEJpdGluZ1JhdGVJVlByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QpOw0KKwkJCWFkZEhvc3RJbmZlY3Rpdml0eTFQcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0KTsNCisJCQlhZGRIb3N0SW5mZWN0aXZpdHkyUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCk7DQorCQkJYWRkSG9zdEluZmVjdGl2aXR5M1Byb3BlcnR5RGVzY3JpcHRvcihvYmplY3QpOw0KKwkJCWFkZEhvc3RJbmZlY3Rpdml0eTRQcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0KTsNCisJCQlhZGRIb3N0UHJpbWFyeUluY3ViYXRpb25SYXRlMVByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QpOw0KKwkJCWFkZEhvc3RQcmltYXJ5SW5jdWJhdGlvblJhdGUyUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCk7DQorCQkJYWRkSG9zdFByaW1hcnlJbmN1YmF0aW9uUmF0ZTNQcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0KTsNCisJCQlhZGRIb3N0UHJpbWFyeUluY3ViYXRpb25SYXRlNFByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QpOw0KKwkJCWFkZEhvc3RQcmltYXJ5UmVjb3ZlcnlSYXRlMVByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QpOw0KKwkJCWFkZEhvc3RQcmltYXJ5UmVjb3ZlcnlSYXRlMlByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QpOw0KKwkJCWFkZEhvc3RQcmltYXJ5UmVjb3ZlcnlSYXRlM1Byb3BlcnR5RGVzY3JpcHRvcihvYmplY3QpOw0KKwkJCWFkZEhvc3RQcmltYXJ5UmVjb3ZlcnlSYXRlNFByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QpOw0KKwkJCWFkZEhvc3RQcmltYXJ5SW1tdW5pdHlMb3NzUmF0ZTFQcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0KTsNCisJCQlhZGRIb3N0UHJpbWFyeUltbXVuaXR5TG9zc1JhdGUyUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCk7DQorCQkJYWRkSG9zdFByaW1hcnlJbW11bml0eUxvc3NSYXRlM1Byb3BlcnR5RGVzY3JpcHRvcihvYmplY3QpOw0KKwkJCWFkZEhvc3RQcmltYXJ5SW1tdW5pdHlMb3NzUmF0ZTRQcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0KTsNCisJCQlhZGRIb3N0UHJpbWFyeURpc2Vhc2VEZWF0aFJhdGUxUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCk7DQorCQkJYWRkSG9zdFByaW1hcnlEaXNlYXNlRGVhdGhSYXRlMlByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QpOw0KKwkJCWFkZEhvc3RQcmltYXJ5RGlzZWFzZURlYXRoUmF0ZTNQcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0KTsNCisJCQlhZGRIb3N0UHJpbWFyeURpc2Vhc2VEZWF0aFJhdGU0UHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCk7DQorCQkJYWRkSG9zdEFERTEyUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCk7DQorCQkJYWRkSG9zdEFERTEzUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCk7DQorCQkJYWRkSG9zdEFERTE0UHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCk7DQorCQkJYWRkSG9zdEFERTIxUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCk7DQorCQkJYWRkSG9zdEFERTIzUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCk7DQorCQkJYWRkSG9zdEFERTI0UHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCk7DQorCQkJYWRkSG9zdEFERTMxUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCk7DQorCQkJYWRkSG9zdEFERTMyUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCk7DQorCQkJYWRkSG9zdEFERTM0UHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCk7DQorCQkJYWRkSG9zdEFERTQxUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCk7DQorCQkJYWRkSG9zdEFERTQyUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCk7DQorCQkJYWRkSG9zdEFERTQzUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCk7DQorCQkJYWRkSG9zdFNlY29uZGFyeURpc2Vhc2VEZWF0aFJhdGUxMlByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QpOw0KKwkJCWFkZEhvc3RTZWNvbmRhcnlEaXNlYXNlRGVhdGhSYXRlMTNQcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0KTsNCisJCQlhZGRIb3N0U2Vjb25kYXJ5RGlzZWFzZURlYXRoUmF0ZTE0UHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCk7DQorCQkJYWRkSG9zdFNlY29uZGFyeURpc2Vhc2VEZWF0aFJhdGUyMVByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QpOw0KKwkJCWFkZEhvc3RTZWNvbmRhcnlEaXNlYXNlRGVhdGhSYXRlMjNQcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0KTsNCisJCQlhZGRIb3N0U2Vjb25kYXJ5RGlzZWFzZURlYXRoUmF0ZTI0UHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCk7DQorCQkJYWRkSG9zdFNlY29uZGFyeURpc2Vhc2VEZWF0aFJhdGUzMVByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QpOw0KKwkJCWFkZEhvc3RTZWNvbmRhcnlEaXNlYXNlRGVhdGhSYXRlMzJQcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0KTsNCisJCQlhZGRIb3N0U2Vjb25kYXJ5RGlzZWFzZURlYXRoUmF0ZTM0UHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCk7DQorCQkJYWRkSG9zdFNlY29uZGFyeURpc2Vhc2VEZWF0aFJhdGU0MVByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QpOw0KKwkJCWFkZEhvc3RTZWNvbmRhcnlEaXNlYXNlRGVhdGhSYXRlNDJQcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0KTsNCisJCQlhZGRIb3N0U2Vjb25kYXJ5RGlzZWFzZURlYXRoUmF0ZTQzUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCk7DQorCQkJYWRkSG9zdFNlY29uZGFyeVJlY292ZXJ5UmF0ZTEyUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCk7DQorCQkJYWRkSG9zdFNlY29uZGFyeVJlY292ZXJ5UmF0ZTEzUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCk7DQorCQkJYWRkSG9zdFNlY29uZGFyeVJlY292ZXJ5UmF0ZTE0UHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCk7DQorCQkJYWRkSG9zdFNlY29uZGFyeVJlY292ZXJ5UmF0ZTIxUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCk7DQorCQkJYWRkSG9zdFNlY29uZGFyeVJlY292ZXJ5UmF0ZTIzUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCk7DQorCQkJYWRkSG9zdFNlY29uZGFyeVJlY292ZXJ5UmF0ZTI0UHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCk7DQorCQkJYWRkSG9zdFNlY29uZGFyeVJlY292ZXJ5UmF0ZTMxUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCk7DQorCQkJYWRkSG9zdFNlY29uZGFyeVJlY292ZXJ5UmF0ZTMyUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCk7DQorCQkJYWRkSG9zdFNlY29uZGFyeVJlY292ZXJ5UmF0ZTM0UHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCk7DQorCQkJYWRkSG9zdFNlY29uZGFyeVJlY292ZXJ5UmF0ZTQxUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCk7DQorCQkJYWRkSG9zdFNlY29uZGFyeVJlY292ZXJ5UmF0ZTQyUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCk7DQorCQkJYWRkSG9zdFNlY29uZGFyeVJlY292ZXJ5UmF0ZTQzUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCk7DQorCQkJYWRkSG9zdFNlY29uZGFyeUluY3ViYXRpb25SYXRlMTJQcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0KTsNCisJCQlhZGRIb3N0U2Vjb25kYXJ5SW5jdWJhdGlvblJhdGUxM1Byb3BlcnR5RGVzY3JpcHRvcihvYmplY3QpOw0KKwkJCWFkZEhvc3RTZWNvbmRhcnlJbmN1YmF0aW9uUmF0ZTE0UHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCk7DQorCQkJYWRkSG9zdFNlY29uZGFyeUluY3ViYXRpb25SYXRlMjFQcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0KTsNCisJCQlhZGRIb3N0U2Vjb25kYXJ5SW5jdWJhdGlvblJhdGUyM1Byb3BlcnR5RGVzY3JpcHRvcihvYmplY3QpOw0KKwkJCWFkZEhvc3RTZWNvbmRhcnlJbmN1YmF0aW9uUmF0ZTI0UHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCk7DQorCQkJYWRkSG9zdFNlY29uZGFyeUluY3ViYXRpb25SYXRlMzFQcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0KTsNCisJCQlhZGRIb3N0U2Vjb25kYXJ5SW5jdWJhdGlvblJhdGUzMlByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QpOw0KKwkJCWFkZEhvc3RTZWNvbmRhcnlJbmN1YmF0aW9uUmF0ZTM0UHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCk7DQorCQkJYWRkSG9zdFNlY29uZGFyeUluY3ViYXRpb25SYXRlNDFQcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0KTsNCisJCQlhZGRIb3N0U2Vjb25kYXJ5SW5jdWJhdGlvblJhdGU0MlByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QpOw0KKwkJCWFkZEhvc3RTZWNvbmRhcnlJbmN1YmF0aW9uUmF0ZTQzUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCk7DQorCQkJYWRkVmVjdG9ySW5mZWN0aXZpdHkxUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCk7DQorCQkJYWRkVmVjdG9ySW5mZWN0aXZpdHkyUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCk7DQorCQkJYWRkVmVjdG9ySW5mZWN0aXZpdHkzUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCk7DQorCQkJYWRkVmVjdG9ySW5mZWN0aXZpdHk0UHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCk7DQorCQkJYWRkVmVjdG9yQURFMVByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QpOw0KKwkJCWFkZFZlY3RvckFERTJQcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0KTsNCisJCQlhZGRWZWN0b3JBREUzUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCk7DQorCQkJYWRkVmVjdG9yQURFNFByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QpOw0KKwkJCWFkZFZlY3RvckluY3ViYXRpb25SYXRlMVByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QpOw0KKwkJCWFkZFZlY3RvckluY3ViYXRpb25SYXRlMlByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QpOw0KKwkJCWFkZFZlY3RvckluY3ViYXRpb25SYXRlM1Byb3BlcnR5RGVzY3JpcHRvcihvYmplY3QpOw0KKwkJCWFkZFZlY3RvckluY3ViYXRpb25SYXRlNFByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QpOw0KKwkJfQ0KKwkJcmV0dXJuIGl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzOw0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIGFkZHMgYSBwcm9wZXJ0eSBkZXNjcmlwdG9yIGZvciB0aGUgQml0aW5nIFJhdGUgU1YgZmVhdHVyZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCB2b2lkIGFkZEJpdGluZ1JhdGVTVlByb3BlcnR5RGVzY3JpcHRvcihPYmplY3Qgb2JqZWN0KSB7DQorCQlpdGVtUHJvcGVydHlEZXNjcmlwdG9ycy5hZGQNCisJCQkoY3JlYXRlSXRlbVByb3BlcnR5RGVzY3JpcHRvcg0KKwkJCQkoKChDb21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5KWFkYXB0ZXJGYWN0b3J5KS5nZXRSb290QWRhcHRlckZhY3RvcnkoKSwNCisJCQkJIGdldFJlc291cmNlTG9jYXRvcigpLA0KKwkJCQkgZ2V0U3RyaW5nKCJfVUlfRGVuZ3VlTW9kZWxfYml0aW5nUmF0ZVNWX2ZlYXR1cmUiKSwNCisJCQkJIGdldFN0cmluZygiX1VJX1Byb3BlcnR5RGVzY3JpcHRvcl9kZXNjcmlwdGlvbiIsICJfVUlfRGVuZ3VlTW9kZWxfYml0aW5nUmF0ZVNWX2ZlYXR1cmUiLCAiX1VJX0Rlbmd1ZU1vZGVsX3R5cGUiKSwNCisJCQkJIFZlY3RvclBhY2thZ2UuTGl0ZXJhbHMuREVOR1VFX01PREVMX19CSVRJTkdfUkFURV9TViwNCisJCQkJIHRydWUsDQorCQkJCSBmYWxzZSwNCisJCQkJIGZhbHNlLA0KKwkJCQkgSXRlbVByb3BlcnR5RGVzY3JpcHRvci5SRUFMX1ZBTFVFX0lNQUdFLA0KKwkJCQkgbnVsbCwNCisJCQkJIG51bGwpKTsNCisJfQ0KKw0KKwkvKioNCisJICogVGhpcyBhZGRzIGEgcHJvcGVydHkgZGVzY3JpcHRvciBmb3IgdGhlIEJpdGluZyBSYXRlIElWIGZlYXR1cmUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgdm9pZCBhZGRCaXRpbmdSYXRlSVZQcm9wZXJ0eURlc2NyaXB0b3IoT2JqZWN0IG9iamVjdCkgew0KKwkJaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMuYWRkDQorCQkJKGNyZWF0ZUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3INCisJCQkJKCgoQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSlhZGFwdGVyRmFjdG9yeSkuZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCksDQorCQkJCSBnZXRSZXNvdXJjZUxvY2F0b3IoKSwNCisJCQkJIGdldFN0cmluZygiX1VJX0Rlbmd1ZU1vZGVsX2JpdGluZ1JhdGVJVl9mZWF0dXJlIiksDQorCQkJCSBnZXRTdHJpbmcoIl9VSV9Qcm9wZXJ0eURlc2NyaXB0b3JfZGVzY3JpcHRpb24iLCAiX1VJX0Rlbmd1ZU1vZGVsX2JpdGluZ1JhdGVJVl9mZWF0dXJlIiwgIl9VSV9EZW5ndWVNb2RlbF90eXBlIiksDQorCQkJCSBWZWN0b3JQYWNrYWdlLkxpdGVyYWxzLkRFTkdVRV9NT0RFTF9fQklUSU5HX1JBVEVfSVYsDQorCQkJCSB0cnVlLA0KKwkJCQkgZmFsc2UsDQorCQkJCSBmYWxzZSwNCisJCQkJIEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IuUkVBTF9WQUxVRV9JTUFHRSwNCisJCQkJIG51bGwsDQorCQkJCSBudWxsKSk7DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgYWRkcyBhIHByb3BlcnR5IGRlc2NyaXB0b3IgZm9yIHRoZSBIb3N0IEluZmVjdGl2aXR5MSBmZWF0dXJlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIHZvaWQgYWRkSG9zdEluZmVjdGl2aXR5MVByb3BlcnR5RGVzY3JpcHRvcihPYmplY3Qgb2JqZWN0KSB7DQorCQlpdGVtUHJvcGVydHlEZXNjcmlwdG9ycy5hZGQNCisJCQkoY3JlYXRlSXRlbVByb3BlcnR5RGVzY3JpcHRvcg0KKwkJCQkoKChDb21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5KWFkYXB0ZXJGYWN0b3J5KS5nZXRSb290QWRhcHRlckZhY3RvcnkoKSwNCisJCQkJIGdldFJlc291cmNlTG9jYXRvcigpLA0KKwkJCQkgZ2V0U3RyaW5nKCJfVUlfRGVuZ3VlTW9kZWxfaG9zdEluZmVjdGl2aXR5MV9mZWF0dXJlIiksDQorCQkJCSBnZXRTdHJpbmcoIl9VSV9Qcm9wZXJ0eURlc2NyaXB0b3JfZGVzY3JpcHRpb24iLCAiX1VJX0Rlbmd1ZU1vZGVsX2hvc3RJbmZlY3Rpdml0eTFfZmVhdHVyZSIsICJfVUlfRGVuZ3VlTW9kZWxfdHlwZSIpLA0KKwkJCQkgVmVjdG9yUGFja2FnZS5MaXRlcmFscy5ERU5HVUVfTU9ERUxfX0hPU1RfSU5GRUNUSVZJVFkxLA0KKwkJCQkgdHJ1ZSwNCisJCQkJIGZhbHNlLA0KKwkJCQkgZmFsc2UsDQorCQkJCSBJdGVtUHJvcGVydHlEZXNjcmlwdG9yLlJFQUxfVkFMVUVfSU1BR0UsDQorCQkJCSBudWxsLA0KKwkJCQkgbnVsbCkpOw0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIGFkZHMgYSBwcm9wZXJ0eSBkZXNjcmlwdG9yIGZvciB0aGUgSG9zdCBJbmZlY3Rpdml0eTIgZmVhdHVyZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCB2b2lkIGFkZEhvc3RJbmZlY3Rpdml0eTJQcm9wZXJ0eURlc2NyaXB0b3IoT2JqZWN0IG9iamVjdCkgew0KKwkJaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMuYWRkDQorCQkJKGNyZWF0ZUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3INCisJCQkJKCgoQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSlhZGFwdGVyRmFjdG9yeSkuZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCksDQorCQkJCSBnZXRSZXNvdXJjZUxvY2F0b3IoKSwNCisJCQkJIGdldFN0cmluZygiX1VJX0Rlbmd1ZU1vZGVsX2hvc3RJbmZlY3Rpdml0eTJfZmVhdHVyZSIpLA0KKwkJCQkgZ2V0U3RyaW5nKCJfVUlfUHJvcGVydHlEZXNjcmlwdG9yX2Rlc2NyaXB0aW9uIiwgIl9VSV9EZW5ndWVNb2RlbF9ob3N0SW5mZWN0aXZpdHkyX2ZlYXR1cmUiLCAiX1VJX0Rlbmd1ZU1vZGVsX3R5cGUiKSwNCisJCQkJIFZlY3RvclBhY2thZ2UuTGl0ZXJhbHMuREVOR1VFX01PREVMX19IT1NUX0lORkVDVElWSVRZMiwNCisJCQkJIHRydWUsDQorCQkJCSBmYWxzZSwNCisJCQkJIGZhbHNlLA0KKwkJCQkgSXRlbVByb3BlcnR5RGVzY3JpcHRvci5SRUFMX1ZBTFVFX0lNQUdFLA0KKwkJCQkgbnVsbCwNCisJCQkJIG51bGwpKTsNCisJfQ0KKw0KKwkvKioNCisJICogVGhpcyBhZGRzIGEgcHJvcGVydHkgZGVzY3JpcHRvciBmb3IgdGhlIEhvc3QgSW5mZWN0aXZpdHkzIGZlYXR1cmUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgdm9pZCBhZGRIb3N0SW5mZWN0aXZpdHkzUHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdCBvYmplY3QpIHsNCisJCWl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzLmFkZA0KKwkJCShjcmVhdGVJdGVtUHJvcGVydHlEZXNjcmlwdG9yDQorCQkJCSgoKENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnkpYWRhcHRlckZhY3RvcnkpLmdldFJvb3RBZGFwdGVyRmFjdG9yeSgpLA0KKwkJCQkgZ2V0UmVzb3VyY2VMb2NhdG9yKCksDQorCQkJCSBnZXRTdHJpbmcoIl9VSV9EZW5ndWVNb2RlbF9ob3N0SW5mZWN0aXZpdHkzX2ZlYXR1cmUiKSwNCisJCQkJIGdldFN0cmluZygiX1VJX1Byb3BlcnR5RGVzY3JpcHRvcl9kZXNjcmlwdGlvbiIsICJfVUlfRGVuZ3VlTW9kZWxfaG9zdEluZmVjdGl2aXR5M19mZWF0dXJlIiwgIl9VSV9EZW5ndWVNb2RlbF90eXBlIiksDQorCQkJCSBWZWN0b3JQYWNrYWdlLkxpdGVyYWxzLkRFTkdVRV9NT0RFTF9fSE9TVF9JTkZFQ1RJVklUWTMsDQorCQkJCSB0cnVlLA0KKwkJCQkgZmFsc2UsDQorCQkJCSBmYWxzZSwNCisJCQkJIEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IuUkVBTF9WQUxVRV9JTUFHRSwNCisJCQkJIG51bGwsDQorCQkJCSBudWxsKSk7DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgYWRkcyBhIHByb3BlcnR5IGRlc2NyaXB0b3IgZm9yIHRoZSBIb3N0IEluZmVjdGl2aXR5NCBmZWF0dXJlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIHZvaWQgYWRkSG9zdEluZmVjdGl2aXR5NFByb3BlcnR5RGVzY3JpcHRvcihPYmplY3Qgb2JqZWN0KSB7DQorCQlpdGVtUHJvcGVydHlEZXNjcmlwdG9ycy5hZGQNCisJCQkoY3JlYXRlSXRlbVByb3BlcnR5RGVzY3JpcHRvcg0KKwkJCQkoKChDb21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5KWFkYXB0ZXJGYWN0b3J5KS5nZXRSb290QWRhcHRlckZhY3RvcnkoKSwNCisJCQkJIGdldFJlc291cmNlTG9jYXRvcigpLA0KKwkJCQkgZ2V0U3RyaW5nKCJfVUlfRGVuZ3VlTW9kZWxfaG9zdEluZmVjdGl2aXR5NF9mZWF0dXJlIiksDQorCQkJCSBnZXRTdHJpbmcoIl9VSV9Qcm9wZXJ0eURlc2NyaXB0b3JfZGVzY3JpcHRpb24iLCAiX1VJX0Rlbmd1ZU1vZGVsX2hvc3RJbmZlY3Rpdml0eTRfZmVhdHVyZSIsICJfVUlfRGVuZ3VlTW9kZWxfdHlwZSIpLA0KKwkJCQkgVmVjdG9yUGFja2FnZS5MaXRlcmFscy5ERU5HVUVfTU9ERUxfX0hPU1RfSU5GRUNUSVZJVFk0LA0KKwkJCQkgdHJ1ZSwNCisJCQkJIGZhbHNlLA0KKwkJCQkgZmFsc2UsDQorCQkJCSBJdGVtUHJvcGVydHlEZXNjcmlwdG9yLlJFQUxfVkFMVUVfSU1BR0UsDQorCQkJCSBudWxsLA0KKwkJCQkgbnVsbCkpOw0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIGFkZHMgYSBwcm9wZXJ0eSBkZXNjcmlwdG9yIGZvciB0aGUgSG9zdCBQcmltYXJ5IEluY3ViYXRpb24gUmF0ZTEgZmVhdHVyZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCB2b2lkIGFkZEhvc3RQcmltYXJ5SW5jdWJhdGlvblJhdGUxUHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdCBvYmplY3QpIHsNCisJCWl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzLmFkZA0KKwkJCShjcmVhdGVJdGVtUHJvcGVydHlEZXNjcmlwdG9yDQorCQkJCSgoKENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnkpYWRhcHRlckZhY3RvcnkpLmdldFJvb3RBZGFwdGVyRmFjdG9yeSgpLA0KKwkJCQkgZ2V0UmVzb3VyY2VMb2NhdG9yKCksDQorCQkJCSBnZXRTdHJpbmcoIl9VSV9EZW5ndWVNb2RlbF9ob3N0UHJpbWFyeUluY3ViYXRpb25SYXRlMV9mZWF0dXJlIiksDQorCQkJCSBnZXRTdHJpbmcoIl9VSV9Qcm9wZXJ0eURlc2NyaXB0b3JfZGVzY3JpcHRpb24iLCAiX1VJX0Rlbmd1ZU1vZGVsX2hvc3RQcmltYXJ5SW5jdWJhdGlvblJhdGUxX2ZlYXR1cmUiLCAiX1VJX0Rlbmd1ZU1vZGVsX3R5cGUiKSwNCisJCQkJIFZlY3RvclBhY2thZ2UuTGl0ZXJhbHMuREVOR1VFX01PREVMX19IT1NUX1BSSU1BUllfSU5DVUJBVElPTl9SQVRFMSwNCisJCQkJIHRydWUsDQorCQkJCSBmYWxzZSwNCisJCQkJIGZhbHNlLA0KKwkJCQkgSXRlbVByb3BlcnR5RGVzY3JpcHRvci5SRUFMX1ZBTFVFX0lNQUdFLA0KKwkJCQkgbnVsbCwNCisJCQkJIG51bGwpKTsNCisJfQ0KKw0KKwkvKioNCisJICogVGhpcyBhZGRzIGEgcHJvcGVydHkgZGVzY3JpcHRvciBmb3IgdGhlIEhvc3QgUHJpbWFyeSBJbmN1YmF0aW9uIFJhdGUyIGZlYXR1cmUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgdm9pZCBhZGRIb3N0UHJpbWFyeUluY3ViYXRpb25SYXRlMlByb3BlcnR5RGVzY3JpcHRvcihPYmplY3Qgb2JqZWN0KSB7DQorCQlpdGVtUHJvcGVydHlEZXNjcmlwdG9ycy5hZGQNCisJCQkoY3JlYXRlSXRlbVByb3BlcnR5RGVzY3JpcHRvcg0KKwkJCQkoKChDb21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5KWFkYXB0ZXJGYWN0b3J5KS5nZXRSb290QWRhcHRlckZhY3RvcnkoKSwNCisJCQkJIGdldFJlc291cmNlTG9jYXRvcigpLA0KKwkJCQkgZ2V0U3RyaW5nKCJfVUlfRGVuZ3VlTW9kZWxfaG9zdFByaW1hcnlJbmN1YmF0aW9uUmF0ZTJfZmVhdHVyZSIpLA0KKwkJCQkgZ2V0U3RyaW5nKCJfVUlfUHJvcGVydHlEZXNjcmlwdG9yX2Rlc2NyaXB0aW9uIiwgIl9VSV9EZW5ndWVNb2RlbF9ob3N0UHJpbWFyeUluY3ViYXRpb25SYXRlMl9mZWF0dXJlIiwgIl9VSV9EZW5ndWVNb2RlbF90eXBlIiksDQorCQkJCSBWZWN0b3JQYWNrYWdlLkxpdGVyYWxzLkRFTkdVRV9NT0RFTF9fSE9TVF9QUklNQVJZX0lOQ1VCQVRJT05fUkFURTIsDQorCQkJCSB0cnVlLA0KKwkJCQkgZmFsc2UsDQorCQkJCSBmYWxzZSwNCisJCQkJIEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IuUkVBTF9WQUxVRV9JTUFHRSwNCisJCQkJIG51bGwsDQorCQkJCSBudWxsKSk7DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgYWRkcyBhIHByb3BlcnR5IGRlc2NyaXB0b3IgZm9yIHRoZSBIb3N0IFByaW1hcnkgSW5jdWJhdGlvbiBSYXRlMyBmZWF0dXJlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIHZvaWQgYWRkSG9zdFByaW1hcnlJbmN1YmF0aW9uUmF0ZTNQcm9wZXJ0eURlc2NyaXB0b3IoT2JqZWN0IG9iamVjdCkgew0KKwkJaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMuYWRkDQorCQkJKGNyZWF0ZUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3INCisJCQkJKCgoQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSlhZGFwdGVyRmFjdG9yeSkuZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCksDQorCQkJCSBnZXRSZXNvdXJjZUxvY2F0b3IoKSwNCisJCQkJIGdldFN0cmluZygiX1VJX0Rlbmd1ZU1vZGVsX2hvc3RQcmltYXJ5SW5jdWJhdGlvblJhdGUzX2ZlYXR1cmUiKSwNCisJCQkJIGdldFN0cmluZygiX1VJX1Byb3BlcnR5RGVzY3JpcHRvcl9kZXNjcmlwdGlvbiIsICJfVUlfRGVuZ3VlTW9kZWxfaG9zdFByaW1hcnlJbmN1YmF0aW9uUmF0ZTNfZmVhdHVyZSIsICJfVUlfRGVuZ3VlTW9kZWxfdHlwZSIpLA0KKwkJCQkgVmVjdG9yUGFja2FnZS5MaXRlcmFscy5ERU5HVUVfTU9ERUxfX0hPU1RfUFJJTUFSWV9JTkNVQkFUSU9OX1JBVEUzLA0KKwkJCQkgdHJ1ZSwNCisJCQkJIGZhbHNlLA0KKwkJCQkgZmFsc2UsDQorCQkJCSBJdGVtUHJvcGVydHlEZXNjcmlwdG9yLlJFQUxfVkFMVUVfSU1BR0UsDQorCQkJCSBudWxsLA0KKwkJCQkgbnVsbCkpOw0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIGFkZHMgYSBwcm9wZXJ0eSBkZXNjcmlwdG9yIGZvciB0aGUgSG9zdCBQcmltYXJ5IEluY3ViYXRpb24gUmF0ZTQgZmVhdHVyZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCB2b2lkIGFkZEhvc3RQcmltYXJ5SW5jdWJhdGlvblJhdGU0UHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdCBvYmplY3QpIHsNCisJCWl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzLmFkZA0KKwkJCShjcmVhdGVJdGVtUHJvcGVydHlEZXNjcmlwdG9yDQorCQkJCSgoKENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnkpYWRhcHRlckZhY3RvcnkpLmdldFJvb3RBZGFwdGVyRmFjdG9yeSgpLA0KKwkJCQkgZ2V0UmVzb3VyY2VMb2NhdG9yKCksDQorCQkJCSBnZXRTdHJpbmcoIl9VSV9EZW5ndWVNb2RlbF9ob3N0UHJpbWFyeUluY3ViYXRpb25SYXRlNF9mZWF0dXJlIiksDQorCQkJCSBnZXRTdHJpbmcoIl9VSV9Qcm9wZXJ0eURlc2NyaXB0b3JfZGVzY3JpcHRpb24iLCAiX1VJX0Rlbmd1ZU1vZGVsX2hvc3RQcmltYXJ5SW5jdWJhdGlvblJhdGU0X2ZlYXR1cmUiLCAiX1VJX0Rlbmd1ZU1vZGVsX3R5cGUiKSwNCisJCQkJIFZlY3RvclBhY2thZ2UuTGl0ZXJhbHMuREVOR1VFX01PREVMX19IT1NUX1BSSU1BUllfSU5DVUJBVElPTl9SQVRFNCwNCisJCQkJIHRydWUsDQorCQkJCSBmYWxzZSwNCisJCQkJIGZhbHNlLA0KKwkJCQkgSXRlbVByb3BlcnR5RGVzY3JpcHRvci5SRUFMX1ZBTFVFX0lNQUdFLA0KKwkJCQkgbnVsbCwNCisJCQkJIG51bGwpKTsNCisJfQ0KKw0KKwkvKioNCisJICogVGhpcyBhZGRzIGEgcHJvcGVydHkgZGVzY3JpcHRvciBmb3IgdGhlIEhvc3QgUHJpbWFyeSBSZWNvdmVyeSBSYXRlMSBmZWF0dXJlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIHZvaWQgYWRkSG9zdFByaW1hcnlSZWNvdmVyeVJhdGUxUHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdCBvYmplY3QpIHsNCisJCWl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzLmFkZA0KKwkJCShjcmVhdGVJdGVtUHJvcGVydHlEZXNjcmlwdG9yDQorCQkJCSgoKENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnkpYWRhcHRlckZhY3RvcnkpLmdldFJvb3RBZGFwdGVyRmFjdG9yeSgpLA0KKwkJCQkgZ2V0UmVzb3VyY2VMb2NhdG9yKCksDQorCQkJCSBnZXRTdHJpbmcoIl9VSV9EZW5ndWVNb2RlbF9ob3N0UHJpbWFyeVJlY292ZXJ5UmF0ZTFfZmVhdHVyZSIpLA0KKwkJCQkgZ2V0U3RyaW5nKCJfVUlfUHJvcGVydHlEZXNjcmlwdG9yX2Rlc2NyaXB0aW9uIiwgIl9VSV9EZW5ndWVNb2RlbF9ob3N0UHJpbWFyeVJlY292ZXJ5UmF0ZTFfZmVhdHVyZSIsICJfVUlfRGVuZ3VlTW9kZWxfdHlwZSIpLA0KKwkJCQkgVmVjdG9yUGFja2FnZS5MaXRlcmFscy5ERU5HVUVfTU9ERUxfX0hPU1RfUFJJTUFSWV9SRUNPVkVSWV9SQVRFMSwNCisJCQkJIHRydWUsDQorCQkJCSBmYWxzZSwNCisJCQkJIGZhbHNlLA0KKwkJCQkgSXRlbVByb3BlcnR5RGVzY3JpcHRvci5SRUFMX1ZBTFVFX0lNQUdFLA0KKwkJCQkgbnVsbCwNCisJCQkJIG51bGwpKTsNCisJfQ0KKw0KKwkvKioNCisJICogVGhpcyBhZGRzIGEgcHJvcGVydHkgZGVzY3JpcHRvciBmb3IgdGhlIEhvc3QgUHJpbWFyeSBSZWNvdmVyeSBSYXRlMiBmZWF0dXJlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIHZvaWQgYWRkSG9zdFByaW1hcnlSZWNvdmVyeVJhdGUyUHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdCBvYmplY3QpIHsNCisJCWl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzLmFkZA0KKwkJCShjcmVhdGVJdGVtUHJvcGVydHlEZXNjcmlwdG9yDQorCQkJCSgoKENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnkpYWRhcHRlckZhY3RvcnkpLmdldFJvb3RBZGFwdGVyRmFjdG9yeSgpLA0KKwkJCQkgZ2V0UmVzb3VyY2VMb2NhdG9yKCksDQorCQkJCSBnZXRTdHJpbmcoIl9VSV9EZW5ndWVNb2RlbF9ob3N0UHJpbWFyeVJlY292ZXJ5UmF0ZTJfZmVhdHVyZSIpLA0KKwkJCQkgZ2V0U3RyaW5nKCJfVUlfUHJvcGVydHlEZXNjcmlwdG9yX2Rlc2NyaXB0aW9uIiwgIl9VSV9EZW5ndWVNb2RlbF9ob3N0UHJpbWFyeVJlY292ZXJ5UmF0ZTJfZmVhdHVyZSIsICJfVUlfRGVuZ3VlTW9kZWxfdHlwZSIpLA0KKwkJCQkgVmVjdG9yUGFja2FnZS5MaXRlcmFscy5ERU5HVUVfTU9ERUxfX0hPU1RfUFJJTUFSWV9SRUNPVkVSWV9SQVRFMiwNCisJCQkJIHRydWUsDQorCQkJCSBmYWxzZSwNCisJCQkJIGZhbHNlLA0KKwkJCQkgSXRlbVByb3BlcnR5RGVzY3JpcHRvci5SRUFMX1ZBTFVFX0lNQUdFLA0KKwkJCQkgbnVsbCwNCisJCQkJIG51bGwpKTsNCisJfQ0KKw0KKwkvKioNCisJICogVGhpcyBhZGRzIGEgcHJvcGVydHkgZGVzY3JpcHRvciBmb3IgdGhlIEhvc3QgUHJpbWFyeSBSZWNvdmVyeSBSYXRlMyBmZWF0dXJlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIHZvaWQgYWRkSG9zdFByaW1hcnlSZWNvdmVyeVJhdGUzUHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdCBvYmplY3QpIHsNCisJCWl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzLmFkZA0KKwkJCShjcmVhdGVJdGVtUHJvcGVydHlEZXNjcmlwdG9yDQorCQkJCSgoKENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnkpYWRhcHRlckZhY3RvcnkpLmdldFJvb3RBZGFwdGVyRmFjdG9yeSgpLA0KKwkJCQkgZ2V0UmVzb3VyY2VMb2NhdG9yKCksDQorCQkJCSBnZXRTdHJpbmcoIl9VSV9EZW5ndWVNb2RlbF9ob3N0UHJpbWFyeVJlY292ZXJ5UmF0ZTNfZmVhdHVyZSIpLA0KKwkJCQkgZ2V0U3RyaW5nKCJfVUlfUHJvcGVydHlEZXNjcmlwdG9yX2Rlc2NyaXB0aW9uIiwgIl9VSV9EZW5ndWVNb2RlbF9ob3N0UHJpbWFyeVJlY292ZXJ5UmF0ZTNfZmVhdHVyZSIsICJfVUlfRGVuZ3VlTW9kZWxfdHlwZSIpLA0KKwkJCQkgVmVjdG9yUGFja2FnZS5MaXRlcmFscy5ERU5HVUVfTU9ERUxfX0hPU1RfUFJJTUFSWV9SRUNPVkVSWV9SQVRFMywNCisJCQkJIHRydWUsDQorCQkJCSBmYWxzZSwNCisJCQkJIGZhbHNlLA0KKwkJCQkgSXRlbVByb3BlcnR5RGVzY3JpcHRvci5SRUFMX1ZBTFVFX0lNQUdFLA0KKwkJCQkgbnVsbCwNCisJCQkJIG51bGwpKTsNCisJfQ0KKw0KKwkvKioNCisJICogVGhpcyBhZGRzIGEgcHJvcGVydHkgZGVzY3JpcHRvciBmb3IgdGhlIEhvc3QgUHJpbWFyeSBSZWNvdmVyeSBSYXRlNCBmZWF0dXJlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIHZvaWQgYWRkSG9zdFByaW1hcnlSZWNvdmVyeVJhdGU0UHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdCBvYmplY3QpIHsNCisJCWl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzLmFkZA0KKwkJCShjcmVhdGVJdGVtUHJvcGVydHlEZXNjcmlwdG9yDQorCQkJCSgoKENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnkpYWRhcHRlckZhY3RvcnkpLmdldFJvb3RBZGFwdGVyRmFjdG9yeSgpLA0KKwkJCQkgZ2V0UmVzb3VyY2VMb2NhdG9yKCksDQorCQkJCSBnZXRTdHJpbmcoIl9VSV9EZW5ndWVNb2RlbF9ob3N0UHJpbWFyeVJlY292ZXJ5UmF0ZTRfZmVhdHVyZSIpLA0KKwkJCQkgZ2V0U3RyaW5nKCJfVUlfUHJvcGVydHlEZXNjcmlwdG9yX2Rlc2NyaXB0aW9uIiwgIl9VSV9EZW5ndWVNb2RlbF9ob3N0UHJpbWFyeVJlY292ZXJ5UmF0ZTRfZmVhdHVyZSIsICJfVUlfRGVuZ3VlTW9kZWxfdHlwZSIpLA0KKwkJCQkgVmVjdG9yUGFja2FnZS5MaXRlcmFscy5ERU5HVUVfTU9ERUxfX0hPU1RfUFJJTUFSWV9SRUNPVkVSWV9SQVRFNCwNCisJCQkJIHRydWUsDQorCQkJCSBmYWxzZSwNCisJCQkJIGZhbHNlLA0KKwkJCQkgSXRlbVByb3BlcnR5RGVzY3JpcHRvci5SRUFMX1ZBTFVFX0lNQUdFLA0KKwkJCQkgbnVsbCwNCisJCQkJIG51bGwpKTsNCisJfQ0KKw0KKwkvKioNCisJICogVGhpcyBhZGRzIGEgcHJvcGVydHkgZGVzY3JpcHRvciBmb3IgdGhlIEhvc3QgUHJpbWFyeSBJbW11bml0eSBMb3NzIFJhdGUxIGZlYXR1cmUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgdm9pZCBhZGRIb3N0UHJpbWFyeUltbXVuaXR5TG9zc1JhdGUxUHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdCBvYmplY3QpIHsNCisJCWl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzLmFkZA0KKwkJCShjcmVhdGVJdGVtUHJvcGVydHlEZXNjcmlwdG9yDQorCQkJCSgoKENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnkpYWRhcHRlckZhY3RvcnkpLmdldFJvb3RBZGFwdGVyRmFjdG9yeSgpLA0KKwkJCQkgZ2V0UmVzb3VyY2VMb2NhdG9yKCksDQorCQkJCSBnZXRTdHJpbmcoIl9VSV9EZW5ndWVNb2RlbF9ob3N0UHJpbWFyeUltbXVuaXR5TG9zc1JhdGUxX2ZlYXR1cmUiKSwNCisJCQkJIGdldFN0cmluZygiX1VJX1Byb3BlcnR5RGVzY3JpcHRvcl9kZXNjcmlwdGlvbiIsICJfVUlfRGVuZ3VlTW9kZWxfaG9zdFByaW1hcnlJbW11bml0eUxvc3NSYXRlMV9mZWF0dXJlIiwgIl9VSV9EZW5ndWVNb2RlbF90eXBlIiksDQorCQkJCSBWZWN0b3JQYWNrYWdlLkxpdGVyYWxzLkRFTkdVRV9NT0RFTF9fSE9TVF9QUklNQVJZX0lNTVVOSVRZX0xPU1NfUkFURTEsDQorCQkJCSB0cnVlLA0KKwkJCQkgZmFsc2UsDQorCQkJCSBmYWxzZSwNCisJCQkJIEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IuUkVBTF9WQUxVRV9JTUFHRSwNCisJCQkJIG51bGwsDQorCQkJCSBudWxsKSk7DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgYWRkcyBhIHByb3BlcnR5IGRlc2NyaXB0b3IgZm9yIHRoZSBIb3N0IFByaW1hcnkgSW1tdW5pdHkgTG9zcyBSYXRlMiBmZWF0dXJlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIHZvaWQgYWRkSG9zdFByaW1hcnlJbW11bml0eUxvc3NSYXRlMlByb3BlcnR5RGVzY3JpcHRvcihPYmplY3Qgb2JqZWN0KSB7DQorCQlpdGVtUHJvcGVydHlEZXNjcmlwdG9ycy5hZGQNCisJCQkoY3JlYXRlSXRlbVByb3BlcnR5RGVzY3JpcHRvcg0KKwkJCQkoKChDb21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5KWFkYXB0ZXJGYWN0b3J5KS5nZXRSb290QWRhcHRlckZhY3RvcnkoKSwNCisJCQkJIGdldFJlc291cmNlTG9jYXRvcigpLA0KKwkJCQkgZ2V0U3RyaW5nKCJfVUlfRGVuZ3VlTW9kZWxfaG9zdFByaW1hcnlJbW11bml0eUxvc3NSYXRlMl9mZWF0dXJlIiksDQorCQkJCSBnZXRTdHJpbmcoIl9VSV9Qcm9wZXJ0eURlc2NyaXB0b3JfZGVzY3JpcHRpb24iLCAiX1VJX0Rlbmd1ZU1vZGVsX2hvc3RQcmltYXJ5SW1tdW5pdHlMb3NzUmF0ZTJfZmVhdHVyZSIsICJfVUlfRGVuZ3VlTW9kZWxfdHlwZSIpLA0KKwkJCQkgVmVjdG9yUGFja2FnZS5MaXRlcmFscy5ERU5HVUVfTU9ERUxfX0hPU1RfUFJJTUFSWV9JTU1VTklUWV9MT1NTX1JBVEUyLA0KKwkJCQkgdHJ1ZSwNCisJCQkJIGZhbHNlLA0KKwkJCQkgZmFsc2UsDQorCQkJCSBJdGVtUHJvcGVydHlEZXNjcmlwdG9yLlJFQUxfVkFMVUVfSU1BR0UsDQorCQkJCSBudWxsLA0KKwkJCQkgbnVsbCkpOw0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIGFkZHMgYSBwcm9wZXJ0eSBkZXNjcmlwdG9yIGZvciB0aGUgSG9zdCBQcmltYXJ5IEltbXVuaXR5IExvc3MgUmF0ZTMgZmVhdHVyZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCB2b2lkIGFkZEhvc3RQcmltYXJ5SW1tdW5pdHlMb3NzUmF0ZTNQcm9wZXJ0eURlc2NyaXB0b3IoT2JqZWN0IG9iamVjdCkgew0KKwkJaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMuYWRkDQorCQkJKGNyZWF0ZUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3INCisJCQkJKCgoQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSlhZGFwdGVyRmFjdG9yeSkuZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCksDQorCQkJCSBnZXRSZXNvdXJjZUxvY2F0b3IoKSwNCisJCQkJIGdldFN0cmluZygiX1VJX0Rlbmd1ZU1vZGVsX2hvc3RQcmltYXJ5SW1tdW5pdHlMb3NzUmF0ZTNfZmVhdHVyZSIpLA0KKwkJCQkgZ2V0U3RyaW5nKCJfVUlfUHJvcGVydHlEZXNjcmlwdG9yX2Rlc2NyaXB0aW9uIiwgIl9VSV9EZW5ndWVNb2RlbF9ob3N0UHJpbWFyeUltbXVuaXR5TG9zc1JhdGUzX2ZlYXR1cmUiLCAiX1VJX0Rlbmd1ZU1vZGVsX3R5cGUiKSwNCisJCQkJIFZlY3RvclBhY2thZ2UuTGl0ZXJhbHMuREVOR1VFX01PREVMX19IT1NUX1BSSU1BUllfSU1NVU5JVFlfTE9TU19SQVRFMywNCisJCQkJIHRydWUsDQorCQkJCSBmYWxzZSwNCisJCQkJIGZhbHNlLA0KKwkJCQkgSXRlbVByb3BlcnR5RGVzY3JpcHRvci5SRUFMX1ZBTFVFX0lNQUdFLA0KKwkJCQkgbnVsbCwNCisJCQkJIG51bGwpKTsNCisJfQ0KKw0KKwkvKioNCisJICogVGhpcyBhZGRzIGEgcHJvcGVydHkgZGVzY3JpcHRvciBmb3IgdGhlIEhvc3QgUHJpbWFyeSBJbW11bml0eSBMb3NzIFJhdGU0IGZlYXR1cmUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgdm9pZCBhZGRIb3N0UHJpbWFyeUltbXVuaXR5TG9zc1JhdGU0UHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdCBvYmplY3QpIHsNCisJCWl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzLmFkZA0KKwkJCShjcmVhdGVJdGVtUHJvcGVydHlEZXNjcmlwdG9yDQorCQkJCSgoKENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnkpYWRhcHRlckZhY3RvcnkpLmdldFJvb3RBZGFwdGVyRmFjdG9yeSgpLA0KKwkJCQkgZ2V0UmVzb3VyY2VMb2NhdG9yKCksDQorCQkJCSBnZXRTdHJpbmcoIl9VSV9EZW5ndWVNb2RlbF9ob3N0UHJpbWFyeUltbXVuaXR5TG9zc1JhdGU0X2ZlYXR1cmUiKSwNCisJCQkJIGdldFN0cmluZygiX1VJX1Byb3BlcnR5RGVzY3JpcHRvcl9kZXNjcmlwdGlvbiIsICJfVUlfRGVuZ3VlTW9kZWxfaG9zdFByaW1hcnlJbW11bml0eUxvc3NSYXRlNF9mZWF0dXJlIiwgIl9VSV9EZW5ndWVNb2RlbF90eXBlIiksDQorCQkJCSBWZWN0b3JQYWNrYWdlLkxpdGVyYWxzLkRFTkdVRV9NT0RFTF9fSE9TVF9QUklNQVJZX0lNTVVOSVRZX0xPU1NfUkFURTQsDQorCQkJCSB0cnVlLA0KKwkJCQkgZmFsc2UsDQorCQkJCSBmYWxzZSwNCisJCQkJIEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IuUkVBTF9WQUxVRV9JTUFHRSwNCisJCQkJIG51bGwsDQorCQkJCSBudWxsKSk7DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgYWRkcyBhIHByb3BlcnR5IGRlc2NyaXB0b3IgZm9yIHRoZSBIb3N0IFByaW1hcnkgRGlzZWFzZSBEZWF0aCBSYXRlMSBmZWF0dXJlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIHZvaWQgYWRkSG9zdFByaW1hcnlEaXNlYXNlRGVhdGhSYXRlMVByb3BlcnR5RGVzY3JpcHRvcihPYmplY3Qgb2JqZWN0KSB7DQorCQlpdGVtUHJvcGVydHlEZXNjcmlwdG9ycy5hZGQNCisJCQkoY3JlYXRlSXRlbVByb3BlcnR5RGVzY3JpcHRvcg0KKwkJCQkoKChDb21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5KWFkYXB0ZXJGYWN0b3J5KS5nZXRSb290QWRhcHRlckZhY3RvcnkoKSwNCisJCQkJIGdldFJlc291cmNlTG9jYXRvcigpLA0KKwkJCQkgZ2V0U3RyaW5nKCJfVUlfRGVuZ3VlTW9kZWxfaG9zdFByaW1hcnlEaXNlYXNlRGVhdGhSYXRlMV9mZWF0dXJlIiksDQorCQkJCSBnZXRTdHJpbmcoIl9VSV9Qcm9wZXJ0eURlc2NyaXB0b3JfZGVzY3JpcHRpb24iLCAiX1VJX0Rlbmd1ZU1vZGVsX2hvc3RQcmltYXJ5RGlzZWFzZURlYXRoUmF0ZTFfZmVhdHVyZSIsICJfVUlfRGVuZ3VlTW9kZWxfdHlwZSIpLA0KKwkJCQkgVmVjdG9yUGFja2FnZS5MaXRlcmFscy5ERU5HVUVfTU9ERUxfX0hPU1RfUFJJTUFSWV9ESVNFQVNFX0RFQVRIX1JBVEUxLA0KKwkJCQkgdHJ1ZSwNCisJCQkJIGZhbHNlLA0KKwkJCQkgZmFsc2UsDQorCQkJCSBJdGVtUHJvcGVydHlEZXNjcmlwdG9yLlJFQUxfVkFMVUVfSU1BR0UsDQorCQkJCSBudWxsLA0KKwkJCQkgbnVsbCkpOw0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIGFkZHMgYSBwcm9wZXJ0eSBkZXNjcmlwdG9yIGZvciB0aGUgSG9zdCBQcmltYXJ5IERpc2Vhc2UgRGVhdGggUmF0ZTIgZmVhdHVyZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCB2b2lkIGFkZEhvc3RQcmltYXJ5RGlzZWFzZURlYXRoUmF0ZTJQcm9wZXJ0eURlc2NyaXB0b3IoT2JqZWN0IG9iamVjdCkgew0KKwkJaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMuYWRkDQorCQkJKGNyZWF0ZUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3INCisJCQkJKCgoQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSlhZGFwdGVyRmFjdG9yeSkuZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCksDQorCQkJCSBnZXRSZXNvdXJjZUxvY2F0b3IoKSwNCisJCQkJIGdldFN0cmluZygiX1VJX0Rlbmd1ZU1vZGVsX2hvc3RQcmltYXJ5RGlzZWFzZURlYXRoUmF0ZTJfZmVhdHVyZSIpLA0KKwkJCQkgZ2V0U3RyaW5nKCJfVUlfUHJvcGVydHlEZXNjcmlwdG9yX2Rlc2NyaXB0aW9uIiwgIl9VSV9EZW5ndWVNb2RlbF9ob3N0UHJpbWFyeURpc2Vhc2VEZWF0aFJhdGUyX2ZlYXR1cmUiLCAiX1VJX0Rlbmd1ZU1vZGVsX3R5cGUiKSwNCisJCQkJIFZlY3RvclBhY2thZ2UuTGl0ZXJhbHMuREVOR1VFX01PREVMX19IT1NUX1BSSU1BUllfRElTRUFTRV9ERUFUSF9SQVRFMiwNCisJCQkJIHRydWUsDQorCQkJCSBmYWxzZSwNCisJCQkJIGZhbHNlLA0KKwkJCQkgSXRlbVByb3BlcnR5RGVzY3JpcHRvci5SRUFMX1ZBTFVFX0lNQUdFLA0KKwkJCQkgbnVsbCwNCisJCQkJIG51bGwpKTsNCisJfQ0KKw0KKwkvKioNCisJICogVGhpcyBhZGRzIGEgcHJvcGVydHkgZGVzY3JpcHRvciBmb3IgdGhlIEhvc3QgUHJpbWFyeSBEaXNlYXNlIERlYXRoIFJhdGUzIGZlYXR1cmUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgdm9pZCBhZGRIb3N0UHJpbWFyeURpc2Vhc2VEZWF0aFJhdGUzUHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdCBvYmplY3QpIHsNCisJCWl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzLmFkZA0KKwkJCShjcmVhdGVJdGVtUHJvcGVydHlEZXNjcmlwdG9yDQorCQkJCSgoKENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnkpYWRhcHRlckZhY3RvcnkpLmdldFJvb3RBZGFwdGVyRmFjdG9yeSgpLA0KKwkJCQkgZ2V0UmVzb3VyY2VMb2NhdG9yKCksDQorCQkJCSBnZXRTdHJpbmcoIl9VSV9EZW5ndWVNb2RlbF9ob3N0UHJpbWFyeURpc2Vhc2VEZWF0aFJhdGUzX2ZlYXR1cmUiKSwNCisJCQkJIGdldFN0cmluZygiX1VJX1Byb3BlcnR5RGVzY3JpcHRvcl9kZXNjcmlwdGlvbiIsICJfVUlfRGVuZ3VlTW9kZWxfaG9zdFByaW1hcnlEaXNlYXNlRGVhdGhSYXRlM19mZWF0dXJlIiwgIl9VSV9EZW5ndWVNb2RlbF90eXBlIiksDQorCQkJCSBWZWN0b3JQYWNrYWdlLkxpdGVyYWxzLkRFTkdVRV9NT0RFTF9fSE9TVF9QUklNQVJZX0RJU0VBU0VfREVBVEhfUkFURTMsDQorCQkJCSB0cnVlLA0KKwkJCQkgZmFsc2UsDQorCQkJCSBmYWxzZSwNCisJCQkJIEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IuUkVBTF9WQUxVRV9JTUFHRSwNCisJCQkJIG51bGwsDQorCQkJCSBudWxsKSk7DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgYWRkcyBhIHByb3BlcnR5IGRlc2NyaXB0b3IgZm9yIHRoZSBIb3N0IFByaW1hcnkgRGlzZWFzZSBEZWF0aCBSYXRlNCBmZWF0dXJlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIHZvaWQgYWRkSG9zdFByaW1hcnlEaXNlYXNlRGVhdGhSYXRlNFByb3BlcnR5RGVzY3JpcHRvcihPYmplY3Qgb2JqZWN0KSB7DQorCQlpdGVtUHJvcGVydHlEZXNjcmlwdG9ycy5hZGQNCisJCQkoY3JlYXRlSXRlbVByb3BlcnR5RGVzY3JpcHRvcg0KKwkJCQkoKChDb21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5KWFkYXB0ZXJGYWN0b3J5KS5nZXRSb290QWRhcHRlckZhY3RvcnkoKSwNCisJCQkJIGdldFJlc291cmNlTG9jYXRvcigpLA0KKwkJCQkgZ2V0U3RyaW5nKCJfVUlfRGVuZ3VlTW9kZWxfaG9zdFByaW1hcnlEaXNlYXNlRGVhdGhSYXRlNF9mZWF0dXJlIiksDQorCQkJCSBnZXRTdHJpbmcoIl9VSV9Qcm9wZXJ0eURlc2NyaXB0b3JfZGVzY3JpcHRpb24iLCAiX1VJX0Rlbmd1ZU1vZGVsX2hvc3RQcmltYXJ5RGlzZWFzZURlYXRoUmF0ZTRfZmVhdHVyZSIsICJfVUlfRGVuZ3VlTW9kZWxfdHlwZSIpLA0KKwkJCQkgVmVjdG9yUGFja2FnZS5MaXRlcmFscy5ERU5HVUVfTU9ERUxfX0hPU1RfUFJJTUFSWV9ESVNFQVNFX0RFQVRIX1JBVEU0LA0KKwkJCQkgdHJ1ZSwNCisJCQkJIGZhbHNlLA0KKwkJCQkgZmFsc2UsDQorCQkJCSBJdGVtUHJvcGVydHlEZXNjcmlwdG9yLlJFQUxfVkFMVUVfSU1BR0UsDQorCQkJCSBudWxsLA0KKwkJCQkgbnVsbCkpOw0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIGFkZHMgYSBwcm9wZXJ0eSBkZXNjcmlwdG9yIGZvciB0aGUgSG9zdCBBREUxMiBmZWF0dXJlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIHZvaWQgYWRkSG9zdEFERTEyUHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdCBvYmplY3QpIHsNCisJCWl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzLmFkZA0KKwkJCShjcmVhdGVJdGVtUHJvcGVydHlEZXNjcmlwdG9yDQorCQkJCSgoKENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnkpYWRhcHRlckZhY3RvcnkpLmdldFJvb3RBZGFwdGVyRmFjdG9yeSgpLA0KKwkJCQkgZ2V0UmVzb3VyY2VMb2NhdG9yKCksDQorCQkJCSBnZXRTdHJpbmcoIl9VSV9EZW5ndWVNb2RlbF9ob3N0QURFMTJfZmVhdHVyZSIpLA0KKwkJCQkgZ2V0U3RyaW5nKCJfVUlfUHJvcGVydHlEZXNjcmlwdG9yX2Rlc2NyaXB0aW9uIiwgIl9VSV9EZW5ndWVNb2RlbF9ob3N0QURFMTJfZmVhdHVyZSIsICJfVUlfRGVuZ3VlTW9kZWxfdHlwZSIpLA0KKwkJCQkgVmVjdG9yUGFja2FnZS5MaXRlcmFscy5ERU5HVUVfTU9ERUxfX0hPU1RfQURFMTIsDQorCQkJCSB0cnVlLA0KKwkJCQkgZmFsc2UsDQorCQkJCSBmYWxzZSwNCisJCQkJIEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IuUkVBTF9WQUxVRV9JTUFHRSwNCisJCQkJIG51bGwsDQorCQkJCSBudWxsKSk7DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgYWRkcyBhIHByb3BlcnR5IGRlc2NyaXB0b3IgZm9yIHRoZSBIb3N0IEFERTEzIGZlYXR1cmUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgdm9pZCBhZGRIb3N0QURFMTNQcm9wZXJ0eURlc2NyaXB0b3IoT2JqZWN0IG9iamVjdCkgew0KKwkJaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMuYWRkDQorCQkJKGNyZWF0ZUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3INCisJCQkJKCgoQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSlhZGFwdGVyRmFjdG9yeSkuZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCksDQorCQkJCSBnZXRSZXNvdXJjZUxvY2F0b3IoKSwNCisJCQkJIGdldFN0cmluZygiX1VJX0Rlbmd1ZU1vZGVsX2hvc3RBREUxM19mZWF0dXJlIiksDQorCQkJCSBnZXRTdHJpbmcoIl9VSV9Qcm9wZXJ0eURlc2NyaXB0b3JfZGVzY3JpcHRpb24iLCAiX1VJX0Rlbmd1ZU1vZGVsX2hvc3RBREUxM19mZWF0dXJlIiwgIl9VSV9EZW5ndWVNb2RlbF90eXBlIiksDQorCQkJCSBWZWN0b3JQYWNrYWdlLkxpdGVyYWxzLkRFTkdVRV9NT0RFTF9fSE9TVF9BREUxMywNCisJCQkJIHRydWUsDQorCQkJCSBmYWxzZSwNCisJCQkJIGZhbHNlLA0KKwkJCQkgSXRlbVByb3BlcnR5RGVzY3JpcHRvci5SRUFMX1ZBTFVFX0lNQUdFLA0KKwkJCQkgbnVsbCwNCisJCQkJIG51bGwpKTsNCisJfQ0KKw0KKwkvKioNCisJICogVGhpcyBhZGRzIGEgcHJvcGVydHkgZGVzY3JpcHRvciBmb3IgdGhlIEhvc3QgQURFMTQgZmVhdHVyZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCB2b2lkIGFkZEhvc3RBREUxNFByb3BlcnR5RGVzY3JpcHRvcihPYmplY3Qgb2JqZWN0KSB7DQorCQlpdGVtUHJvcGVydHlEZXNjcmlwdG9ycy5hZGQNCisJCQkoY3JlYXRlSXRlbVByb3BlcnR5RGVzY3JpcHRvcg0KKwkJCQkoKChDb21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5KWFkYXB0ZXJGYWN0b3J5KS5nZXRSb290QWRhcHRlckZhY3RvcnkoKSwNCisJCQkJIGdldFJlc291cmNlTG9jYXRvcigpLA0KKwkJCQkgZ2V0U3RyaW5nKCJfVUlfRGVuZ3VlTW9kZWxfaG9zdEFERTE0X2ZlYXR1cmUiKSwNCisJCQkJIGdldFN0cmluZygiX1VJX1Byb3BlcnR5RGVzY3JpcHRvcl9kZXNjcmlwdGlvbiIsICJfVUlfRGVuZ3VlTW9kZWxfaG9zdEFERTE0X2ZlYXR1cmUiLCAiX1VJX0Rlbmd1ZU1vZGVsX3R5cGUiKSwNCisJCQkJIFZlY3RvclBhY2thZ2UuTGl0ZXJhbHMuREVOR1VFX01PREVMX19IT1NUX0FERTE0LA0KKwkJCQkgdHJ1ZSwNCisJCQkJIGZhbHNlLA0KKwkJCQkgZmFsc2UsDQorCQkJCSBJdGVtUHJvcGVydHlEZXNjcmlwdG9yLlJFQUxfVkFMVUVfSU1BR0UsDQorCQkJCSBudWxsLA0KKwkJCQkgbnVsbCkpOw0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIGFkZHMgYSBwcm9wZXJ0eSBkZXNjcmlwdG9yIGZvciB0aGUgSG9zdCBBREUyMSBmZWF0dXJlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIHZvaWQgYWRkSG9zdEFERTIxUHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdCBvYmplY3QpIHsNCisJCWl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzLmFkZA0KKwkJCShjcmVhdGVJdGVtUHJvcGVydHlEZXNjcmlwdG9yDQorCQkJCSgoKENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnkpYWRhcHRlckZhY3RvcnkpLmdldFJvb3RBZGFwdGVyRmFjdG9yeSgpLA0KKwkJCQkgZ2V0UmVzb3VyY2VMb2NhdG9yKCksDQorCQkJCSBnZXRTdHJpbmcoIl9VSV9EZW5ndWVNb2RlbF9ob3N0QURFMjFfZmVhdHVyZSIpLA0KKwkJCQkgZ2V0U3RyaW5nKCJfVUlfUHJvcGVydHlEZXNjcmlwdG9yX2Rlc2NyaXB0aW9uIiwgIl9VSV9EZW5ndWVNb2RlbF9ob3N0QURFMjFfZmVhdHVyZSIsICJfVUlfRGVuZ3VlTW9kZWxfdHlwZSIpLA0KKwkJCQkgVmVjdG9yUGFja2FnZS5MaXRlcmFscy5ERU5HVUVfTU9ERUxfX0hPU1RfQURFMjEsDQorCQkJCSB0cnVlLA0KKwkJCQkgZmFsc2UsDQorCQkJCSBmYWxzZSwNCisJCQkJIEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IuUkVBTF9WQUxVRV9JTUFHRSwNCisJCQkJIG51bGwsDQorCQkJCSBudWxsKSk7DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgYWRkcyBhIHByb3BlcnR5IGRlc2NyaXB0b3IgZm9yIHRoZSBIb3N0IEFERTIzIGZlYXR1cmUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgdm9pZCBhZGRIb3N0QURFMjNQcm9wZXJ0eURlc2NyaXB0b3IoT2JqZWN0IG9iamVjdCkgew0KKwkJaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMuYWRkDQorCQkJKGNyZWF0ZUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3INCisJCQkJKCgoQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSlhZGFwdGVyRmFjdG9yeSkuZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCksDQorCQkJCSBnZXRSZXNvdXJjZUxvY2F0b3IoKSwNCisJCQkJIGdldFN0cmluZygiX1VJX0Rlbmd1ZU1vZGVsX2hvc3RBREUyM19mZWF0dXJlIiksDQorCQkJCSBnZXRTdHJpbmcoIl9VSV9Qcm9wZXJ0eURlc2NyaXB0b3JfZGVzY3JpcHRpb24iLCAiX1VJX0Rlbmd1ZU1vZGVsX2hvc3RBREUyM19mZWF0dXJlIiwgIl9VSV9EZW5ndWVNb2RlbF90eXBlIiksDQorCQkJCSBWZWN0b3JQYWNrYWdlLkxpdGVyYWxzLkRFTkdVRV9NT0RFTF9fSE9TVF9BREUyMywNCisJCQkJIHRydWUsDQorCQkJCSBmYWxzZSwNCisJCQkJIGZhbHNlLA0KKwkJCQkgSXRlbVByb3BlcnR5RGVzY3JpcHRvci5SRUFMX1ZBTFVFX0lNQUdFLA0KKwkJCQkgbnVsbCwNCisJCQkJIG51bGwpKTsNCisJfQ0KKw0KKwkvKioNCisJICogVGhpcyBhZGRzIGEgcHJvcGVydHkgZGVzY3JpcHRvciBmb3IgdGhlIEhvc3QgQURFMjQgZmVhdHVyZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCB2b2lkIGFkZEhvc3RBREUyNFByb3BlcnR5RGVzY3JpcHRvcihPYmplY3Qgb2JqZWN0KSB7DQorCQlpdGVtUHJvcGVydHlEZXNjcmlwdG9ycy5hZGQNCisJCQkoY3JlYXRlSXRlbVByb3BlcnR5RGVzY3JpcHRvcg0KKwkJCQkoKChDb21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5KWFkYXB0ZXJGYWN0b3J5KS5nZXRSb290QWRhcHRlckZhY3RvcnkoKSwNCisJCQkJIGdldFJlc291cmNlTG9jYXRvcigpLA0KKwkJCQkgZ2V0U3RyaW5nKCJfVUlfRGVuZ3VlTW9kZWxfaG9zdEFERTI0X2ZlYXR1cmUiKSwNCisJCQkJIGdldFN0cmluZygiX1VJX1Byb3BlcnR5RGVzY3JpcHRvcl9kZXNjcmlwdGlvbiIsICJfVUlfRGVuZ3VlTW9kZWxfaG9zdEFERTI0X2ZlYXR1cmUiLCAiX1VJX0Rlbmd1ZU1vZGVsX3R5cGUiKSwNCisJCQkJIFZlY3RvclBhY2thZ2UuTGl0ZXJhbHMuREVOR1VFX01PREVMX19IT1NUX0FERTI0LA0KKwkJCQkgdHJ1ZSwNCisJCQkJIGZhbHNlLA0KKwkJCQkgZmFsc2UsDQorCQkJCSBJdGVtUHJvcGVydHlEZXNjcmlwdG9yLlJFQUxfVkFMVUVfSU1BR0UsDQorCQkJCSBudWxsLA0KKwkJCQkgbnVsbCkpOw0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIGFkZHMgYSBwcm9wZXJ0eSBkZXNjcmlwdG9yIGZvciB0aGUgSG9zdCBBREUzMSBmZWF0dXJlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIHZvaWQgYWRkSG9zdEFERTMxUHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdCBvYmplY3QpIHsNCisJCWl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzLmFkZA0KKwkJCShjcmVhdGVJdGVtUHJvcGVydHlEZXNjcmlwdG9yDQorCQkJCSgoKENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnkpYWRhcHRlckZhY3RvcnkpLmdldFJvb3RBZGFwdGVyRmFjdG9yeSgpLA0KKwkJCQkgZ2V0UmVzb3VyY2VMb2NhdG9yKCksDQorCQkJCSBnZXRTdHJpbmcoIl9VSV9EZW5ndWVNb2RlbF9ob3N0QURFMzFfZmVhdHVyZSIpLA0KKwkJCQkgZ2V0U3RyaW5nKCJfVUlfUHJvcGVydHlEZXNjcmlwdG9yX2Rlc2NyaXB0aW9uIiwgIl9VSV9EZW5ndWVNb2RlbF9ob3N0QURFMzFfZmVhdHVyZSIsICJfVUlfRGVuZ3VlTW9kZWxfdHlwZSIpLA0KKwkJCQkgVmVjdG9yUGFja2FnZS5MaXRlcmFscy5ERU5HVUVfTU9ERUxfX0hPU1RfQURFMzEsDQorCQkJCSB0cnVlLA0KKwkJCQkgZmFsc2UsDQorCQkJCSBmYWxzZSwNCisJCQkJIEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IuUkVBTF9WQUxVRV9JTUFHRSwNCisJCQkJIG51bGwsDQorCQkJCSBudWxsKSk7DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgYWRkcyBhIHByb3BlcnR5IGRlc2NyaXB0b3IgZm9yIHRoZSBIb3N0IEFERTMyIGZlYXR1cmUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgdm9pZCBhZGRIb3N0QURFMzJQcm9wZXJ0eURlc2NyaXB0b3IoT2JqZWN0IG9iamVjdCkgew0KKwkJaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMuYWRkDQorCQkJKGNyZWF0ZUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3INCisJCQkJKCgoQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSlhZGFwdGVyRmFjdG9yeSkuZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCksDQorCQkJCSBnZXRSZXNvdXJjZUxvY2F0b3IoKSwNCisJCQkJIGdldFN0cmluZygiX1VJX0Rlbmd1ZU1vZGVsX2hvc3RBREUzMl9mZWF0dXJlIiksDQorCQkJCSBnZXRTdHJpbmcoIl9VSV9Qcm9wZXJ0eURlc2NyaXB0b3JfZGVzY3JpcHRpb24iLCAiX1VJX0Rlbmd1ZU1vZGVsX2hvc3RBREUzMl9mZWF0dXJlIiwgIl9VSV9EZW5ndWVNb2RlbF90eXBlIiksDQorCQkJCSBWZWN0b3JQYWNrYWdlLkxpdGVyYWxzLkRFTkdVRV9NT0RFTF9fSE9TVF9BREUzMiwNCisJCQkJIHRydWUsDQorCQkJCSBmYWxzZSwNCisJCQkJIGZhbHNlLA0KKwkJCQkgSXRlbVByb3BlcnR5RGVzY3JpcHRvci5SRUFMX1ZBTFVFX0lNQUdFLA0KKwkJCQkgbnVsbCwNCisJCQkJIG51bGwpKTsNCisJfQ0KKw0KKwkvKioNCisJICogVGhpcyBhZGRzIGEgcHJvcGVydHkgZGVzY3JpcHRvciBmb3IgdGhlIEhvc3QgQURFMzQgZmVhdHVyZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCB2b2lkIGFkZEhvc3RBREUzNFByb3BlcnR5RGVzY3JpcHRvcihPYmplY3Qgb2JqZWN0KSB7DQorCQlpdGVtUHJvcGVydHlEZXNjcmlwdG9ycy5hZGQNCisJCQkoY3JlYXRlSXRlbVByb3BlcnR5RGVzY3JpcHRvcg0KKwkJCQkoKChDb21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5KWFkYXB0ZXJGYWN0b3J5KS5nZXRSb290QWRhcHRlckZhY3RvcnkoKSwNCisJCQkJIGdldFJlc291cmNlTG9jYXRvcigpLA0KKwkJCQkgZ2V0U3RyaW5nKCJfVUlfRGVuZ3VlTW9kZWxfaG9zdEFERTM0X2ZlYXR1cmUiKSwNCisJCQkJIGdldFN0cmluZygiX1VJX1Byb3BlcnR5RGVzY3JpcHRvcl9kZXNjcmlwdGlvbiIsICJfVUlfRGVuZ3VlTW9kZWxfaG9zdEFERTM0X2ZlYXR1cmUiLCAiX1VJX0Rlbmd1ZU1vZGVsX3R5cGUiKSwNCisJCQkJIFZlY3RvclBhY2thZ2UuTGl0ZXJhbHMuREVOR1VFX01PREVMX19IT1NUX0FERTM0LA0KKwkJCQkgdHJ1ZSwNCisJCQkJIGZhbHNlLA0KKwkJCQkgZmFsc2UsDQorCQkJCSBJdGVtUHJvcGVydHlEZXNjcmlwdG9yLlJFQUxfVkFMVUVfSU1BR0UsDQorCQkJCSBudWxsLA0KKwkJCQkgbnVsbCkpOw0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIGFkZHMgYSBwcm9wZXJ0eSBkZXNjcmlwdG9yIGZvciB0aGUgSG9zdCBBREU0MSBmZWF0dXJlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIHZvaWQgYWRkSG9zdEFERTQxUHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdCBvYmplY3QpIHsNCisJCWl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzLmFkZA0KKwkJCShjcmVhdGVJdGVtUHJvcGVydHlEZXNjcmlwdG9yDQorCQkJCSgoKENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnkpYWRhcHRlckZhY3RvcnkpLmdldFJvb3RBZGFwdGVyRmFjdG9yeSgpLA0KKwkJCQkgZ2V0UmVzb3VyY2VMb2NhdG9yKCksDQorCQkJCSBnZXRTdHJpbmcoIl9VSV9EZW5ndWVNb2RlbF9ob3N0QURFNDFfZmVhdHVyZSIpLA0KKwkJCQkgZ2V0U3RyaW5nKCJfVUlfUHJvcGVydHlEZXNjcmlwdG9yX2Rlc2NyaXB0aW9uIiwgIl9VSV9EZW5ndWVNb2RlbF9ob3N0QURFNDFfZmVhdHVyZSIsICJfVUlfRGVuZ3VlTW9kZWxfdHlwZSIpLA0KKwkJCQkgVmVjdG9yUGFja2FnZS5MaXRlcmFscy5ERU5HVUVfTU9ERUxfX0hPU1RfQURFNDEsDQorCQkJCSB0cnVlLA0KKwkJCQkgZmFsc2UsDQorCQkJCSBmYWxzZSwNCisJCQkJIEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IuUkVBTF9WQUxVRV9JTUFHRSwNCisJCQkJIG51bGwsDQorCQkJCSBudWxsKSk7DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgYWRkcyBhIHByb3BlcnR5IGRlc2NyaXB0b3IgZm9yIHRoZSBIb3N0IEFERTQyIGZlYXR1cmUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgdm9pZCBhZGRIb3N0QURFNDJQcm9wZXJ0eURlc2NyaXB0b3IoT2JqZWN0IG9iamVjdCkgew0KKwkJaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMuYWRkDQorCQkJKGNyZWF0ZUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3INCisJCQkJKCgoQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSlhZGFwdGVyRmFjdG9yeSkuZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCksDQorCQkJCSBnZXRSZXNvdXJjZUxvY2F0b3IoKSwNCisJCQkJIGdldFN0cmluZygiX1VJX0Rlbmd1ZU1vZGVsX2hvc3RBREU0Ml9mZWF0dXJlIiksDQorCQkJCSBnZXRTdHJpbmcoIl9VSV9Qcm9wZXJ0eURlc2NyaXB0b3JfZGVzY3JpcHRpb24iLCAiX1VJX0Rlbmd1ZU1vZGVsX2hvc3RBREU0Ml9mZWF0dXJlIiwgIl9VSV9EZW5ndWVNb2RlbF90eXBlIiksDQorCQkJCSBWZWN0b3JQYWNrYWdlLkxpdGVyYWxzLkRFTkdVRV9NT0RFTF9fSE9TVF9BREU0MiwNCisJCQkJIHRydWUsDQorCQkJCSBmYWxzZSwNCisJCQkJIGZhbHNlLA0KKwkJCQkgSXRlbVByb3BlcnR5RGVzY3JpcHRvci5SRUFMX1ZBTFVFX0lNQUdFLA0KKwkJCQkgbnVsbCwNCisJCQkJIG51bGwpKTsNCisJfQ0KKw0KKwkvKioNCisJICogVGhpcyBhZGRzIGEgcHJvcGVydHkgZGVzY3JpcHRvciBmb3IgdGhlIEhvc3QgQURFNDMgZmVhdHVyZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCB2b2lkIGFkZEhvc3RBREU0M1Byb3BlcnR5RGVzY3JpcHRvcihPYmplY3Qgb2JqZWN0KSB7DQorCQlpdGVtUHJvcGVydHlEZXNjcmlwdG9ycy5hZGQNCisJCQkoY3JlYXRlSXRlbVByb3BlcnR5RGVzY3JpcHRvcg0KKwkJCQkoKChDb21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5KWFkYXB0ZXJGYWN0b3J5KS5nZXRSb290QWRhcHRlckZhY3RvcnkoKSwNCisJCQkJIGdldFJlc291cmNlTG9jYXRvcigpLA0KKwkJCQkgZ2V0U3RyaW5nKCJfVUlfRGVuZ3VlTW9kZWxfaG9zdEFERTQzX2ZlYXR1cmUiKSwNCisJCQkJIGdldFN0cmluZygiX1VJX1Byb3BlcnR5RGVzY3JpcHRvcl9kZXNjcmlwdGlvbiIsICJfVUlfRGVuZ3VlTW9kZWxfaG9zdEFERTQzX2ZlYXR1cmUiLCAiX1VJX0Rlbmd1ZU1vZGVsX3R5cGUiKSwNCisJCQkJIFZlY3RvclBhY2thZ2UuTGl0ZXJhbHMuREVOR1VFX01PREVMX19IT1NUX0FERTQzLA0KKwkJCQkgdHJ1ZSwNCisJCQkJIGZhbHNlLA0KKwkJCQkgZmFsc2UsDQorCQkJCSBJdGVtUHJvcGVydHlEZXNjcmlwdG9yLlJFQUxfVkFMVUVfSU1BR0UsDQorCQkJCSBudWxsLA0KKwkJCQkgbnVsbCkpOw0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIGFkZHMgYSBwcm9wZXJ0eSBkZXNjcmlwdG9yIGZvciB0aGUgSG9zdCBTZWNvbmRhcnkgRGlzZWFzZSBEZWF0aCBSYXRlMTIgZmVhdHVyZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCB2b2lkIGFkZEhvc3RTZWNvbmRhcnlEaXNlYXNlRGVhdGhSYXRlMTJQcm9wZXJ0eURlc2NyaXB0b3IoT2JqZWN0IG9iamVjdCkgew0KKwkJaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMuYWRkDQorCQkJKGNyZWF0ZUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3INCisJCQkJKCgoQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSlhZGFwdGVyRmFjdG9yeSkuZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCksDQorCQkJCSBnZXRSZXNvdXJjZUxvY2F0b3IoKSwNCisJCQkJIGdldFN0cmluZygiX1VJX0Rlbmd1ZU1vZGVsX2hvc3RTZWNvbmRhcnlEaXNlYXNlRGVhdGhSYXRlMTJfZmVhdHVyZSIpLA0KKwkJCQkgZ2V0U3RyaW5nKCJfVUlfUHJvcGVydHlEZXNjcmlwdG9yX2Rlc2NyaXB0aW9uIiwgIl9VSV9EZW5ndWVNb2RlbF9ob3N0U2Vjb25kYXJ5RGlzZWFzZURlYXRoUmF0ZTEyX2ZlYXR1cmUiLCAiX1VJX0Rlbmd1ZU1vZGVsX3R5cGUiKSwNCisJCQkJIFZlY3RvclBhY2thZ2UuTGl0ZXJhbHMuREVOR1VFX01PREVMX19IT1NUX1NFQ09OREFSWV9ESVNFQVNFX0RFQVRIX1JBVEUxMiwNCisJCQkJIHRydWUsDQorCQkJCSBmYWxzZSwNCisJCQkJIGZhbHNlLA0KKwkJCQkgSXRlbVByb3BlcnR5RGVzY3JpcHRvci5SRUFMX1ZBTFVFX0lNQUdFLA0KKwkJCQkgbnVsbCwNCisJCQkJIG51bGwpKTsNCisJfQ0KKw0KKwkvKioNCisJICogVGhpcyBhZGRzIGEgcHJvcGVydHkgZGVzY3JpcHRvciBmb3IgdGhlIEhvc3QgU2Vjb25kYXJ5IERpc2Vhc2UgRGVhdGggUmF0ZTEzIGZlYXR1cmUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgdm9pZCBhZGRIb3N0U2Vjb25kYXJ5RGlzZWFzZURlYXRoUmF0ZTEzUHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdCBvYmplY3QpIHsNCisJCWl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzLmFkZA0KKwkJCShjcmVhdGVJdGVtUHJvcGVydHlEZXNjcmlwdG9yDQorCQkJCSgoKENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnkpYWRhcHRlckZhY3RvcnkpLmdldFJvb3RBZGFwdGVyRmFjdG9yeSgpLA0KKwkJCQkgZ2V0UmVzb3VyY2VMb2NhdG9yKCksDQorCQkJCSBnZXRTdHJpbmcoIl9VSV9EZW5ndWVNb2RlbF9ob3N0U2Vjb25kYXJ5RGlzZWFzZURlYXRoUmF0ZTEzX2ZlYXR1cmUiKSwNCisJCQkJIGdldFN0cmluZygiX1VJX1Byb3BlcnR5RGVzY3JpcHRvcl9kZXNjcmlwdGlvbiIsICJfVUlfRGVuZ3VlTW9kZWxfaG9zdFNlY29uZGFyeURpc2Vhc2VEZWF0aFJhdGUxM19mZWF0dXJlIiwgIl9VSV9EZW5ndWVNb2RlbF90eXBlIiksDQorCQkJCSBWZWN0b3JQYWNrYWdlLkxpdGVyYWxzLkRFTkdVRV9NT0RFTF9fSE9TVF9TRUNPTkRBUllfRElTRUFTRV9ERUFUSF9SQVRFMTMsDQorCQkJCSB0cnVlLA0KKwkJCQkgZmFsc2UsDQorCQkJCSBmYWxzZSwNCisJCQkJIEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IuUkVBTF9WQUxVRV9JTUFHRSwNCisJCQkJIG51bGwsDQorCQkJCSBudWxsKSk7DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgYWRkcyBhIHByb3BlcnR5IGRlc2NyaXB0b3IgZm9yIHRoZSBIb3N0IFNlY29uZGFyeSBEaXNlYXNlIERlYXRoIFJhdGUxNCBmZWF0dXJlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIHZvaWQgYWRkSG9zdFNlY29uZGFyeURpc2Vhc2VEZWF0aFJhdGUxNFByb3BlcnR5RGVzY3JpcHRvcihPYmplY3Qgb2JqZWN0KSB7DQorCQlpdGVtUHJvcGVydHlEZXNjcmlwdG9ycy5hZGQNCisJCQkoY3JlYXRlSXRlbVByb3BlcnR5RGVzY3JpcHRvcg0KKwkJCQkoKChDb21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5KWFkYXB0ZXJGYWN0b3J5KS5nZXRSb290QWRhcHRlckZhY3RvcnkoKSwNCisJCQkJIGdldFJlc291cmNlTG9jYXRvcigpLA0KKwkJCQkgZ2V0U3RyaW5nKCJfVUlfRGVuZ3VlTW9kZWxfaG9zdFNlY29uZGFyeURpc2Vhc2VEZWF0aFJhdGUxNF9mZWF0dXJlIiksDQorCQkJCSBnZXRTdHJpbmcoIl9VSV9Qcm9wZXJ0eURlc2NyaXB0b3JfZGVzY3JpcHRpb24iLCAiX1VJX0Rlbmd1ZU1vZGVsX2hvc3RTZWNvbmRhcnlEaXNlYXNlRGVhdGhSYXRlMTRfZmVhdHVyZSIsICJfVUlfRGVuZ3VlTW9kZWxfdHlwZSIpLA0KKwkJCQkgVmVjdG9yUGFja2FnZS5MaXRlcmFscy5ERU5HVUVfTU9ERUxfX0hPU1RfU0VDT05EQVJZX0RJU0VBU0VfREVBVEhfUkFURTE0LA0KKwkJCQkgdHJ1ZSwNCisJCQkJIGZhbHNlLA0KKwkJCQkgZmFsc2UsDQorCQkJCSBJdGVtUHJvcGVydHlEZXNjcmlwdG9yLlJFQUxfVkFMVUVfSU1BR0UsDQorCQkJCSBudWxsLA0KKwkJCQkgbnVsbCkpOw0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIGFkZHMgYSBwcm9wZXJ0eSBkZXNjcmlwdG9yIGZvciB0aGUgSG9zdCBTZWNvbmRhcnkgRGlzZWFzZSBEZWF0aCBSYXRlMjEgZmVhdHVyZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCB2b2lkIGFkZEhvc3RTZWNvbmRhcnlEaXNlYXNlRGVhdGhSYXRlMjFQcm9wZXJ0eURlc2NyaXB0b3IoT2JqZWN0IG9iamVjdCkgew0KKwkJaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMuYWRkDQorCQkJKGNyZWF0ZUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3INCisJCQkJKCgoQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSlhZGFwdGVyRmFjdG9yeSkuZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCksDQorCQkJCSBnZXRSZXNvdXJjZUxvY2F0b3IoKSwNCisJCQkJIGdldFN0cmluZygiX1VJX0Rlbmd1ZU1vZGVsX2hvc3RTZWNvbmRhcnlEaXNlYXNlRGVhdGhSYXRlMjFfZmVhdHVyZSIpLA0KKwkJCQkgZ2V0U3RyaW5nKCJfVUlfUHJvcGVydHlEZXNjcmlwdG9yX2Rlc2NyaXB0aW9uIiwgIl9VSV9EZW5ndWVNb2RlbF9ob3N0U2Vjb25kYXJ5RGlzZWFzZURlYXRoUmF0ZTIxX2ZlYXR1cmUiLCAiX1VJX0Rlbmd1ZU1vZGVsX3R5cGUiKSwNCisJCQkJIFZlY3RvclBhY2thZ2UuTGl0ZXJhbHMuREVOR1VFX01PREVMX19IT1NUX1NFQ09OREFSWV9ESVNFQVNFX0RFQVRIX1JBVEUyMSwNCisJCQkJIHRydWUsDQorCQkJCSBmYWxzZSwNCisJCQkJIGZhbHNlLA0KKwkJCQkgSXRlbVByb3BlcnR5RGVzY3JpcHRvci5SRUFMX1ZBTFVFX0lNQUdFLA0KKwkJCQkgbnVsbCwNCisJCQkJIG51bGwpKTsNCisJfQ0KKw0KKwkvKioNCisJICogVGhpcyBhZGRzIGEgcHJvcGVydHkgZGVzY3JpcHRvciBmb3IgdGhlIEhvc3QgU2Vjb25kYXJ5IERpc2Vhc2UgRGVhdGggUmF0ZTIzIGZlYXR1cmUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgdm9pZCBhZGRIb3N0U2Vjb25kYXJ5RGlzZWFzZURlYXRoUmF0ZTIzUHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdCBvYmplY3QpIHsNCisJCWl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzLmFkZA0KKwkJCShjcmVhdGVJdGVtUHJvcGVydHlEZXNjcmlwdG9yDQorCQkJCSgoKENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnkpYWRhcHRlckZhY3RvcnkpLmdldFJvb3RBZGFwdGVyRmFjdG9yeSgpLA0KKwkJCQkgZ2V0UmVzb3VyY2VMb2NhdG9yKCksDQorCQkJCSBnZXRTdHJpbmcoIl9VSV9EZW5ndWVNb2RlbF9ob3N0U2Vjb25kYXJ5RGlzZWFzZURlYXRoUmF0ZTIzX2ZlYXR1cmUiKSwNCisJCQkJIGdldFN0cmluZygiX1VJX1Byb3BlcnR5RGVzY3JpcHRvcl9kZXNjcmlwdGlvbiIsICJfVUlfRGVuZ3VlTW9kZWxfaG9zdFNlY29uZGFyeURpc2Vhc2VEZWF0aFJhdGUyM19mZWF0dXJlIiwgIl9VSV9EZW5ndWVNb2RlbF90eXBlIiksDQorCQkJCSBWZWN0b3JQYWNrYWdlLkxpdGVyYWxzLkRFTkdVRV9NT0RFTF9fSE9TVF9TRUNPTkRBUllfRElTRUFTRV9ERUFUSF9SQVRFMjMsDQorCQkJCSB0cnVlLA0KKwkJCQkgZmFsc2UsDQorCQkJCSBmYWxzZSwNCisJCQkJIEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IuUkVBTF9WQUxVRV9JTUFHRSwNCisJCQkJIG51bGwsDQorCQkJCSBudWxsKSk7DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgYWRkcyBhIHByb3BlcnR5IGRlc2NyaXB0b3IgZm9yIHRoZSBIb3N0IFNlY29uZGFyeSBEaXNlYXNlIERlYXRoIFJhdGUyNCBmZWF0dXJlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIHZvaWQgYWRkSG9zdFNlY29uZGFyeURpc2Vhc2VEZWF0aFJhdGUyNFByb3BlcnR5RGVzY3JpcHRvcihPYmplY3Qgb2JqZWN0KSB7DQorCQlpdGVtUHJvcGVydHlEZXNjcmlwdG9ycy5hZGQNCisJCQkoY3JlYXRlSXRlbVByb3BlcnR5RGVzY3JpcHRvcg0KKwkJCQkoKChDb21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5KWFkYXB0ZXJGYWN0b3J5KS5nZXRSb290QWRhcHRlckZhY3RvcnkoKSwNCisJCQkJIGdldFJlc291cmNlTG9jYXRvcigpLA0KKwkJCQkgZ2V0U3RyaW5nKCJfVUlfRGVuZ3VlTW9kZWxfaG9zdFNlY29uZGFyeURpc2Vhc2VEZWF0aFJhdGUyNF9mZWF0dXJlIiksDQorCQkJCSBnZXRTdHJpbmcoIl9VSV9Qcm9wZXJ0eURlc2NyaXB0b3JfZGVzY3JpcHRpb24iLCAiX1VJX0Rlbmd1ZU1vZGVsX2hvc3RTZWNvbmRhcnlEaXNlYXNlRGVhdGhSYXRlMjRfZmVhdHVyZSIsICJfVUlfRGVuZ3VlTW9kZWxfdHlwZSIpLA0KKwkJCQkgVmVjdG9yUGFja2FnZS5MaXRlcmFscy5ERU5HVUVfTU9ERUxfX0hPU1RfU0VDT05EQVJZX0RJU0VBU0VfREVBVEhfUkFURTI0LA0KKwkJCQkgdHJ1ZSwNCisJCQkJIGZhbHNlLA0KKwkJCQkgZmFsc2UsDQorCQkJCSBJdGVtUHJvcGVydHlEZXNjcmlwdG9yLlJFQUxfVkFMVUVfSU1BR0UsDQorCQkJCSBudWxsLA0KKwkJCQkgbnVsbCkpOw0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIGFkZHMgYSBwcm9wZXJ0eSBkZXNjcmlwdG9yIGZvciB0aGUgSG9zdCBTZWNvbmRhcnkgRGlzZWFzZSBEZWF0aCBSYXRlMzEgZmVhdHVyZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCB2b2lkIGFkZEhvc3RTZWNvbmRhcnlEaXNlYXNlRGVhdGhSYXRlMzFQcm9wZXJ0eURlc2NyaXB0b3IoT2JqZWN0IG9iamVjdCkgew0KKwkJaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMuYWRkDQorCQkJKGNyZWF0ZUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3INCisJCQkJKCgoQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSlhZGFwdGVyRmFjdG9yeSkuZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCksDQorCQkJCSBnZXRSZXNvdXJjZUxvY2F0b3IoKSwNCisJCQkJIGdldFN0cmluZygiX1VJX0Rlbmd1ZU1vZGVsX2hvc3RTZWNvbmRhcnlEaXNlYXNlRGVhdGhSYXRlMzFfZmVhdHVyZSIpLA0KKwkJCQkgZ2V0U3RyaW5nKCJfVUlfUHJvcGVydHlEZXNjcmlwdG9yX2Rlc2NyaXB0aW9uIiwgIl9VSV9EZW5ndWVNb2RlbF9ob3N0U2Vjb25kYXJ5RGlzZWFzZURlYXRoUmF0ZTMxX2ZlYXR1cmUiLCAiX1VJX0Rlbmd1ZU1vZGVsX3R5cGUiKSwNCisJCQkJIFZlY3RvclBhY2thZ2UuTGl0ZXJhbHMuREVOR1VFX01PREVMX19IT1NUX1NFQ09OREFSWV9ESVNFQVNFX0RFQVRIX1JBVEUzMSwNCisJCQkJIHRydWUsDQorCQkJCSBmYWxzZSwNCisJCQkJIGZhbHNlLA0KKwkJCQkgSXRlbVByb3BlcnR5RGVzY3JpcHRvci5SRUFMX1ZBTFVFX0lNQUdFLA0KKwkJCQkgbnVsbCwNCisJCQkJIG51bGwpKTsNCisJfQ0KKw0KKwkvKioNCisJICogVGhpcyBhZGRzIGEgcHJvcGVydHkgZGVzY3JpcHRvciBmb3IgdGhlIEhvc3QgU2Vjb25kYXJ5IERpc2Vhc2UgRGVhdGggUmF0ZTMyIGZlYXR1cmUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgdm9pZCBhZGRIb3N0U2Vjb25kYXJ5RGlzZWFzZURlYXRoUmF0ZTMyUHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdCBvYmplY3QpIHsNCisJCWl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzLmFkZA0KKwkJCShjcmVhdGVJdGVtUHJvcGVydHlEZXNjcmlwdG9yDQorCQkJCSgoKENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnkpYWRhcHRlckZhY3RvcnkpLmdldFJvb3RBZGFwdGVyRmFjdG9yeSgpLA0KKwkJCQkgZ2V0UmVzb3VyY2VMb2NhdG9yKCksDQorCQkJCSBnZXRTdHJpbmcoIl9VSV9EZW5ndWVNb2RlbF9ob3N0U2Vjb25kYXJ5RGlzZWFzZURlYXRoUmF0ZTMyX2ZlYXR1cmUiKSwNCisJCQkJIGdldFN0cmluZygiX1VJX1Byb3BlcnR5RGVzY3JpcHRvcl9kZXNjcmlwdGlvbiIsICJfVUlfRGVuZ3VlTW9kZWxfaG9zdFNlY29uZGFyeURpc2Vhc2VEZWF0aFJhdGUzMl9mZWF0dXJlIiwgIl9VSV9EZW5ndWVNb2RlbF90eXBlIiksDQorCQkJCSBWZWN0b3JQYWNrYWdlLkxpdGVyYWxzLkRFTkdVRV9NT0RFTF9fSE9TVF9TRUNPTkRBUllfRElTRUFTRV9ERUFUSF9SQVRFMzIsDQorCQkJCSB0cnVlLA0KKwkJCQkgZmFsc2UsDQorCQkJCSBmYWxzZSwNCisJCQkJIEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IuUkVBTF9WQUxVRV9JTUFHRSwNCisJCQkJIG51bGwsDQorCQkJCSBudWxsKSk7DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgYWRkcyBhIHByb3BlcnR5IGRlc2NyaXB0b3IgZm9yIHRoZSBIb3N0IFNlY29uZGFyeSBEaXNlYXNlIERlYXRoIFJhdGUzNCBmZWF0dXJlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIHZvaWQgYWRkSG9zdFNlY29uZGFyeURpc2Vhc2VEZWF0aFJhdGUzNFByb3BlcnR5RGVzY3JpcHRvcihPYmplY3Qgb2JqZWN0KSB7DQorCQlpdGVtUHJvcGVydHlEZXNjcmlwdG9ycy5hZGQNCisJCQkoY3JlYXRlSXRlbVByb3BlcnR5RGVzY3JpcHRvcg0KKwkJCQkoKChDb21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5KWFkYXB0ZXJGYWN0b3J5KS5nZXRSb290QWRhcHRlckZhY3RvcnkoKSwNCisJCQkJIGdldFJlc291cmNlTG9jYXRvcigpLA0KKwkJCQkgZ2V0U3RyaW5nKCJfVUlfRGVuZ3VlTW9kZWxfaG9zdFNlY29uZGFyeURpc2Vhc2VEZWF0aFJhdGUzNF9mZWF0dXJlIiksDQorCQkJCSBnZXRTdHJpbmcoIl9VSV9Qcm9wZXJ0eURlc2NyaXB0b3JfZGVzY3JpcHRpb24iLCAiX1VJX0Rlbmd1ZU1vZGVsX2hvc3RTZWNvbmRhcnlEaXNlYXNlRGVhdGhSYXRlMzRfZmVhdHVyZSIsICJfVUlfRGVuZ3VlTW9kZWxfdHlwZSIpLA0KKwkJCQkgVmVjdG9yUGFja2FnZS5MaXRlcmFscy5ERU5HVUVfTU9ERUxfX0hPU1RfU0VDT05EQVJZX0RJU0VBU0VfREVBVEhfUkFURTM0LA0KKwkJCQkgdHJ1ZSwNCisJCQkJIGZhbHNlLA0KKwkJCQkgZmFsc2UsDQorCQkJCSBJdGVtUHJvcGVydHlEZXNjcmlwdG9yLlJFQUxfVkFMVUVfSU1BR0UsDQorCQkJCSBudWxsLA0KKwkJCQkgbnVsbCkpOw0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIGFkZHMgYSBwcm9wZXJ0eSBkZXNjcmlwdG9yIGZvciB0aGUgSG9zdCBTZWNvbmRhcnkgRGlzZWFzZSBEZWF0aCBSYXRlNDEgZmVhdHVyZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCB2b2lkIGFkZEhvc3RTZWNvbmRhcnlEaXNlYXNlRGVhdGhSYXRlNDFQcm9wZXJ0eURlc2NyaXB0b3IoT2JqZWN0IG9iamVjdCkgew0KKwkJaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMuYWRkDQorCQkJKGNyZWF0ZUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3INCisJCQkJKCgoQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSlhZGFwdGVyRmFjdG9yeSkuZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCksDQorCQkJCSBnZXRSZXNvdXJjZUxvY2F0b3IoKSwNCisJCQkJIGdldFN0cmluZygiX1VJX0Rlbmd1ZU1vZGVsX2hvc3RTZWNvbmRhcnlEaXNlYXNlRGVhdGhSYXRlNDFfZmVhdHVyZSIpLA0KKwkJCQkgZ2V0U3RyaW5nKCJfVUlfUHJvcGVydHlEZXNjcmlwdG9yX2Rlc2NyaXB0aW9uIiwgIl9VSV9EZW5ndWVNb2RlbF9ob3N0U2Vjb25kYXJ5RGlzZWFzZURlYXRoUmF0ZTQxX2ZlYXR1cmUiLCAiX1VJX0Rlbmd1ZU1vZGVsX3R5cGUiKSwNCisJCQkJIFZlY3RvclBhY2thZ2UuTGl0ZXJhbHMuREVOR1VFX01PREVMX19IT1NUX1NFQ09OREFSWV9ESVNFQVNFX0RFQVRIX1JBVEU0MSwNCisJCQkJIHRydWUsDQorCQkJCSBmYWxzZSwNCisJCQkJIGZhbHNlLA0KKwkJCQkgSXRlbVByb3BlcnR5RGVzY3JpcHRvci5SRUFMX1ZBTFVFX0lNQUdFLA0KKwkJCQkgbnVsbCwNCisJCQkJIG51bGwpKTsNCisJfQ0KKw0KKwkvKioNCisJICogVGhpcyBhZGRzIGEgcHJvcGVydHkgZGVzY3JpcHRvciBmb3IgdGhlIEhvc3QgU2Vjb25kYXJ5IERpc2Vhc2UgRGVhdGggUmF0ZTQyIGZlYXR1cmUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgdm9pZCBhZGRIb3N0U2Vjb25kYXJ5RGlzZWFzZURlYXRoUmF0ZTQyUHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdCBvYmplY3QpIHsNCisJCWl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzLmFkZA0KKwkJCShjcmVhdGVJdGVtUHJvcGVydHlEZXNjcmlwdG9yDQorCQkJCSgoKENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnkpYWRhcHRlckZhY3RvcnkpLmdldFJvb3RBZGFwdGVyRmFjdG9yeSgpLA0KKwkJCQkgZ2V0UmVzb3VyY2VMb2NhdG9yKCksDQorCQkJCSBnZXRTdHJpbmcoIl9VSV9EZW5ndWVNb2RlbF9ob3N0U2Vjb25kYXJ5RGlzZWFzZURlYXRoUmF0ZTQyX2ZlYXR1cmUiKSwNCisJCQkJIGdldFN0cmluZygiX1VJX1Byb3BlcnR5RGVzY3JpcHRvcl9kZXNjcmlwdGlvbiIsICJfVUlfRGVuZ3VlTW9kZWxfaG9zdFNlY29uZGFyeURpc2Vhc2VEZWF0aFJhdGU0Ml9mZWF0dXJlIiwgIl9VSV9EZW5ndWVNb2RlbF90eXBlIiksDQorCQkJCSBWZWN0b3JQYWNrYWdlLkxpdGVyYWxzLkRFTkdVRV9NT0RFTF9fSE9TVF9TRUNPTkRBUllfRElTRUFTRV9ERUFUSF9SQVRFNDIsDQorCQkJCSB0cnVlLA0KKwkJCQkgZmFsc2UsDQorCQkJCSBmYWxzZSwNCisJCQkJIEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IuUkVBTF9WQUxVRV9JTUFHRSwNCisJCQkJIG51bGwsDQorCQkJCSBudWxsKSk7DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgYWRkcyBhIHByb3BlcnR5IGRlc2NyaXB0b3IgZm9yIHRoZSBIb3N0IFNlY29uZGFyeSBEaXNlYXNlIERlYXRoIFJhdGU0MyBmZWF0dXJlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIHZvaWQgYWRkSG9zdFNlY29uZGFyeURpc2Vhc2VEZWF0aFJhdGU0M1Byb3BlcnR5RGVzY3JpcHRvcihPYmplY3Qgb2JqZWN0KSB7DQorCQlpdGVtUHJvcGVydHlEZXNjcmlwdG9ycy5hZGQNCisJCQkoY3JlYXRlSXRlbVByb3BlcnR5RGVzY3JpcHRvcg0KKwkJCQkoKChDb21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5KWFkYXB0ZXJGYWN0b3J5KS5nZXRSb290QWRhcHRlckZhY3RvcnkoKSwNCisJCQkJIGdldFJlc291cmNlTG9jYXRvcigpLA0KKwkJCQkgZ2V0U3RyaW5nKCJfVUlfRGVuZ3VlTW9kZWxfaG9zdFNlY29uZGFyeURpc2Vhc2VEZWF0aFJhdGU0M19mZWF0dXJlIiksDQorCQkJCSBnZXRTdHJpbmcoIl9VSV9Qcm9wZXJ0eURlc2NyaXB0b3JfZGVzY3JpcHRpb24iLCAiX1VJX0Rlbmd1ZU1vZGVsX2hvc3RTZWNvbmRhcnlEaXNlYXNlRGVhdGhSYXRlNDNfZmVhdHVyZSIsICJfVUlfRGVuZ3VlTW9kZWxfdHlwZSIpLA0KKwkJCQkgVmVjdG9yUGFja2FnZS5MaXRlcmFscy5ERU5HVUVfTU9ERUxfX0hPU1RfU0VDT05EQVJZX0RJU0VBU0VfREVBVEhfUkFURTQzLA0KKwkJCQkgdHJ1ZSwNCisJCQkJIGZhbHNlLA0KKwkJCQkgZmFsc2UsDQorCQkJCSBJdGVtUHJvcGVydHlEZXNjcmlwdG9yLlJFQUxfVkFMVUVfSU1BR0UsDQorCQkJCSBudWxsLA0KKwkJCQkgbnVsbCkpOw0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIGFkZHMgYSBwcm9wZXJ0eSBkZXNjcmlwdG9yIGZvciB0aGUgSG9zdCBTZWNvbmRhcnkgUmVjb3ZlcnkgUmF0ZTEyIGZlYXR1cmUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgdm9pZCBhZGRIb3N0U2Vjb25kYXJ5UmVjb3ZlcnlSYXRlMTJQcm9wZXJ0eURlc2NyaXB0b3IoT2JqZWN0IG9iamVjdCkgew0KKwkJaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMuYWRkDQorCQkJKGNyZWF0ZUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3INCisJCQkJKCgoQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSlhZGFwdGVyRmFjdG9yeSkuZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCksDQorCQkJCSBnZXRSZXNvdXJjZUxvY2F0b3IoKSwNCisJCQkJIGdldFN0cmluZygiX1VJX0Rlbmd1ZU1vZGVsX2hvc3RTZWNvbmRhcnlSZWNvdmVyeVJhdGUxMl9mZWF0dXJlIiksDQorCQkJCSBnZXRTdHJpbmcoIl9VSV9Qcm9wZXJ0eURlc2NyaXB0b3JfZGVzY3JpcHRpb24iLCAiX1VJX0Rlbmd1ZU1vZGVsX2hvc3RTZWNvbmRhcnlSZWNvdmVyeVJhdGUxMl9mZWF0dXJlIiwgIl9VSV9EZW5ndWVNb2RlbF90eXBlIiksDQorCQkJCSBWZWN0b3JQYWNrYWdlLkxpdGVyYWxzLkRFTkdVRV9NT0RFTF9fSE9TVF9TRUNPTkRBUllfUkVDT1ZFUllfUkFURTEyLA0KKwkJCQkgdHJ1ZSwNCisJCQkJIGZhbHNlLA0KKwkJCQkgZmFsc2UsDQorCQkJCSBJdGVtUHJvcGVydHlEZXNjcmlwdG9yLlJFQUxfVkFMVUVfSU1BR0UsDQorCQkJCSBudWxsLA0KKwkJCQkgbnVsbCkpOw0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIGFkZHMgYSBwcm9wZXJ0eSBkZXNjcmlwdG9yIGZvciB0aGUgSG9zdCBTZWNvbmRhcnkgUmVjb3ZlcnkgUmF0ZTEzIGZlYXR1cmUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgdm9pZCBhZGRIb3N0U2Vjb25kYXJ5UmVjb3ZlcnlSYXRlMTNQcm9wZXJ0eURlc2NyaXB0b3IoT2JqZWN0IG9iamVjdCkgew0KKwkJaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMuYWRkDQorCQkJKGNyZWF0ZUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3INCisJCQkJKCgoQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSlhZGFwdGVyRmFjdG9yeSkuZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCksDQorCQkJCSBnZXRSZXNvdXJjZUxvY2F0b3IoKSwNCisJCQkJIGdldFN0cmluZygiX1VJX0Rlbmd1ZU1vZGVsX2hvc3RTZWNvbmRhcnlSZWNvdmVyeVJhdGUxM19mZWF0dXJlIiksDQorCQkJCSBnZXRTdHJpbmcoIl9VSV9Qcm9wZXJ0eURlc2NyaXB0b3JfZGVzY3JpcHRpb24iLCAiX1VJX0Rlbmd1ZU1vZGVsX2hvc3RTZWNvbmRhcnlSZWNvdmVyeVJhdGUxM19mZWF0dXJlIiwgIl9VSV9EZW5ndWVNb2RlbF90eXBlIiksDQorCQkJCSBWZWN0b3JQYWNrYWdlLkxpdGVyYWxzLkRFTkdVRV9NT0RFTF9fSE9TVF9TRUNPTkRBUllfUkVDT1ZFUllfUkFURTEzLA0KKwkJCQkgdHJ1ZSwNCisJCQkJIGZhbHNlLA0KKwkJCQkgZmFsc2UsDQorCQkJCSBJdGVtUHJvcGVydHlEZXNjcmlwdG9yLlJFQUxfVkFMVUVfSU1BR0UsDQorCQkJCSBudWxsLA0KKwkJCQkgbnVsbCkpOw0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIGFkZHMgYSBwcm9wZXJ0eSBkZXNjcmlwdG9yIGZvciB0aGUgSG9zdCBTZWNvbmRhcnkgUmVjb3ZlcnkgUmF0ZTE0IGZlYXR1cmUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgdm9pZCBhZGRIb3N0U2Vjb25kYXJ5UmVjb3ZlcnlSYXRlMTRQcm9wZXJ0eURlc2NyaXB0b3IoT2JqZWN0IG9iamVjdCkgew0KKwkJaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMuYWRkDQorCQkJKGNyZWF0ZUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3INCisJCQkJKCgoQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSlhZGFwdGVyRmFjdG9yeSkuZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCksDQorCQkJCSBnZXRSZXNvdXJjZUxvY2F0b3IoKSwNCisJCQkJIGdldFN0cmluZygiX1VJX0Rlbmd1ZU1vZGVsX2hvc3RTZWNvbmRhcnlSZWNvdmVyeVJhdGUxNF9mZWF0dXJlIiksDQorCQkJCSBnZXRTdHJpbmcoIl9VSV9Qcm9wZXJ0eURlc2NyaXB0b3JfZGVzY3JpcHRpb24iLCAiX1VJX0Rlbmd1ZU1vZGVsX2hvc3RTZWNvbmRhcnlSZWNvdmVyeVJhdGUxNF9mZWF0dXJlIiwgIl9VSV9EZW5ndWVNb2RlbF90eXBlIiksDQorCQkJCSBWZWN0b3JQYWNrYWdlLkxpdGVyYWxzLkRFTkdVRV9NT0RFTF9fSE9TVF9TRUNPTkRBUllfUkVDT1ZFUllfUkFURTE0LA0KKwkJCQkgdHJ1ZSwNCisJCQkJIGZhbHNlLA0KKwkJCQkgZmFsc2UsDQorCQkJCSBJdGVtUHJvcGVydHlEZXNjcmlwdG9yLlJFQUxfVkFMVUVfSU1BR0UsDQorCQkJCSBudWxsLA0KKwkJCQkgbnVsbCkpOw0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIGFkZHMgYSBwcm9wZXJ0eSBkZXNjcmlwdG9yIGZvciB0aGUgSG9zdCBTZWNvbmRhcnkgUmVjb3ZlcnkgUmF0ZTIxIGZlYXR1cmUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgdm9pZCBhZGRIb3N0U2Vjb25kYXJ5UmVjb3ZlcnlSYXRlMjFQcm9wZXJ0eURlc2NyaXB0b3IoT2JqZWN0IG9iamVjdCkgew0KKwkJaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMuYWRkDQorCQkJKGNyZWF0ZUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3INCisJCQkJKCgoQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSlhZGFwdGVyRmFjdG9yeSkuZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCksDQorCQkJCSBnZXRSZXNvdXJjZUxvY2F0b3IoKSwNCisJCQkJIGdldFN0cmluZygiX1VJX0Rlbmd1ZU1vZGVsX2hvc3RTZWNvbmRhcnlSZWNvdmVyeVJhdGUyMV9mZWF0dXJlIiksDQorCQkJCSBnZXRTdHJpbmcoIl9VSV9Qcm9wZXJ0eURlc2NyaXB0b3JfZGVzY3JpcHRpb24iLCAiX1VJX0Rlbmd1ZU1vZGVsX2hvc3RTZWNvbmRhcnlSZWNvdmVyeVJhdGUyMV9mZWF0dXJlIiwgIl9VSV9EZW5ndWVNb2RlbF90eXBlIiksDQorCQkJCSBWZWN0b3JQYWNrYWdlLkxpdGVyYWxzLkRFTkdVRV9NT0RFTF9fSE9TVF9TRUNPTkRBUllfUkVDT1ZFUllfUkFURTIxLA0KKwkJCQkgdHJ1ZSwNCisJCQkJIGZhbHNlLA0KKwkJCQkgZmFsc2UsDQorCQkJCSBJdGVtUHJvcGVydHlEZXNjcmlwdG9yLlJFQUxfVkFMVUVfSU1BR0UsDQorCQkJCSBudWxsLA0KKwkJCQkgbnVsbCkpOw0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIGFkZHMgYSBwcm9wZXJ0eSBkZXNjcmlwdG9yIGZvciB0aGUgSG9zdCBTZWNvbmRhcnkgUmVjb3ZlcnkgUmF0ZTIzIGZlYXR1cmUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgdm9pZCBhZGRIb3N0U2Vjb25kYXJ5UmVjb3ZlcnlSYXRlMjNQcm9wZXJ0eURlc2NyaXB0b3IoT2JqZWN0IG9iamVjdCkgew0KKwkJaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMuYWRkDQorCQkJKGNyZWF0ZUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3INCisJCQkJKCgoQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSlhZGFwdGVyRmFjdG9yeSkuZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCksDQorCQkJCSBnZXRSZXNvdXJjZUxvY2F0b3IoKSwNCisJCQkJIGdldFN0cmluZygiX1VJX0Rlbmd1ZU1vZGVsX2hvc3RTZWNvbmRhcnlSZWNvdmVyeVJhdGUyM19mZWF0dXJlIiksDQorCQkJCSBnZXRTdHJpbmcoIl9VSV9Qcm9wZXJ0eURlc2NyaXB0b3JfZGVzY3JpcHRpb24iLCAiX1VJX0Rlbmd1ZU1vZGVsX2hvc3RTZWNvbmRhcnlSZWNvdmVyeVJhdGUyM19mZWF0dXJlIiwgIl9VSV9EZW5ndWVNb2RlbF90eXBlIiksDQorCQkJCSBWZWN0b3JQYWNrYWdlLkxpdGVyYWxzLkRFTkdVRV9NT0RFTF9fSE9TVF9TRUNPTkRBUllfUkVDT1ZFUllfUkFURTIzLA0KKwkJCQkgdHJ1ZSwNCisJCQkJIGZhbHNlLA0KKwkJCQkgZmFsc2UsDQorCQkJCSBJdGVtUHJvcGVydHlEZXNjcmlwdG9yLlJFQUxfVkFMVUVfSU1BR0UsDQorCQkJCSBudWxsLA0KKwkJCQkgbnVsbCkpOw0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIGFkZHMgYSBwcm9wZXJ0eSBkZXNjcmlwdG9yIGZvciB0aGUgSG9zdCBTZWNvbmRhcnkgUmVjb3ZlcnkgUmF0ZTI0IGZlYXR1cmUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgdm9pZCBhZGRIb3N0U2Vjb25kYXJ5UmVjb3ZlcnlSYXRlMjRQcm9wZXJ0eURlc2NyaXB0b3IoT2JqZWN0IG9iamVjdCkgew0KKwkJaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMuYWRkDQorCQkJKGNyZWF0ZUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3INCisJCQkJKCgoQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSlhZGFwdGVyRmFjdG9yeSkuZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCksDQorCQkJCSBnZXRSZXNvdXJjZUxvY2F0b3IoKSwNCisJCQkJIGdldFN0cmluZygiX1VJX0Rlbmd1ZU1vZGVsX2hvc3RTZWNvbmRhcnlSZWNvdmVyeVJhdGUyNF9mZWF0dXJlIiksDQorCQkJCSBnZXRTdHJpbmcoIl9VSV9Qcm9wZXJ0eURlc2NyaXB0b3JfZGVzY3JpcHRpb24iLCAiX1VJX0Rlbmd1ZU1vZGVsX2hvc3RTZWNvbmRhcnlSZWNvdmVyeVJhdGUyNF9mZWF0dXJlIiwgIl9VSV9EZW5ndWVNb2RlbF90eXBlIiksDQorCQkJCSBWZWN0b3JQYWNrYWdlLkxpdGVyYWxzLkRFTkdVRV9NT0RFTF9fSE9TVF9TRUNPTkRBUllfUkVDT1ZFUllfUkFURTI0LA0KKwkJCQkgdHJ1ZSwNCisJCQkJIGZhbHNlLA0KKwkJCQkgZmFsc2UsDQorCQkJCSBJdGVtUHJvcGVydHlEZXNjcmlwdG9yLlJFQUxfVkFMVUVfSU1BR0UsDQorCQkJCSBudWxsLA0KKwkJCQkgbnVsbCkpOw0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIGFkZHMgYSBwcm9wZXJ0eSBkZXNjcmlwdG9yIGZvciB0aGUgSG9zdCBTZWNvbmRhcnkgUmVjb3ZlcnkgUmF0ZTMxIGZlYXR1cmUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgdm9pZCBhZGRIb3N0U2Vjb25kYXJ5UmVjb3ZlcnlSYXRlMzFQcm9wZXJ0eURlc2NyaXB0b3IoT2JqZWN0IG9iamVjdCkgew0KKwkJaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMuYWRkDQorCQkJKGNyZWF0ZUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3INCisJCQkJKCgoQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSlhZGFwdGVyRmFjdG9yeSkuZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCksDQorCQkJCSBnZXRSZXNvdXJjZUxvY2F0b3IoKSwNCisJCQkJIGdldFN0cmluZygiX1VJX0Rlbmd1ZU1vZGVsX2hvc3RTZWNvbmRhcnlSZWNvdmVyeVJhdGUzMV9mZWF0dXJlIiksDQorCQkJCSBnZXRTdHJpbmcoIl9VSV9Qcm9wZXJ0eURlc2NyaXB0b3JfZGVzY3JpcHRpb24iLCAiX1VJX0Rlbmd1ZU1vZGVsX2hvc3RTZWNvbmRhcnlSZWNvdmVyeVJhdGUzMV9mZWF0dXJlIiwgIl9VSV9EZW5ndWVNb2RlbF90eXBlIiksDQorCQkJCSBWZWN0b3JQYWNrYWdlLkxpdGVyYWxzLkRFTkdVRV9NT0RFTF9fSE9TVF9TRUNPTkRBUllfUkVDT1ZFUllfUkFURTMxLA0KKwkJCQkgdHJ1ZSwNCisJCQkJIGZhbHNlLA0KKwkJCQkgZmFsc2UsDQorCQkJCSBJdGVtUHJvcGVydHlEZXNjcmlwdG9yLlJFQUxfVkFMVUVfSU1BR0UsDQorCQkJCSBudWxsLA0KKwkJCQkgbnVsbCkpOw0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIGFkZHMgYSBwcm9wZXJ0eSBkZXNjcmlwdG9yIGZvciB0aGUgSG9zdCBTZWNvbmRhcnkgUmVjb3ZlcnkgUmF0ZTMyIGZlYXR1cmUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgdm9pZCBhZGRIb3N0U2Vjb25kYXJ5UmVjb3ZlcnlSYXRlMzJQcm9wZXJ0eURlc2NyaXB0b3IoT2JqZWN0IG9iamVjdCkgew0KKwkJaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMuYWRkDQorCQkJKGNyZWF0ZUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3INCisJCQkJKCgoQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSlhZGFwdGVyRmFjdG9yeSkuZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCksDQorCQkJCSBnZXRSZXNvdXJjZUxvY2F0b3IoKSwNCisJCQkJIGdldFN0cmluZygiX1VJX0Rlbmd1ZU1vZGVsX2hvc3RTZWNvbmRhcnlSZWNvdmVyeVJhdGUzMl9mZWF0dXJlIiksDQorCQkJCSBnZXRTdHJpbmcoIl9VSV9Qcm9wZXJ0eURlc2NyaXB0b3JfZGVzY3JpcHRpb24iLCAiX1VJX0Rlbmd1ZU1vZGVsX2hvc3RTZWNvbmRhcnlSZWNvdmVyeVJhdGUzMl9mZWF0dXJlIiwgIl9VSV9EZW5ndWVNb2RlbF90eXBlIiksDQorCQkJCSBWZWN0b3JQYWNrYWdlLkxpdGVyYWxzLkRFTkdVRV9NT0RFTF9fSE9TVF9TRUNPTkRBUllfUkVDT1ZFUllfUkFURTMyLA0KKwkJCQkgdHJ1ZSwNCisJCQkJIGZhbHNlLA0KKwkJCQkgZmFsc2UsDQorCQkJCSBJdGVtUHJvcGVydHlEZXNjcmlwdG9yLlJFQUxfVkFMVUVfSU1BR0UsDQorCQkJCSBudWxsLA0KKwkJCQkgbnVsbCkpOw0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIGFkZHMgYSBwcm9wZXJ0eSBkZXNjcmlwdG9yIGZvciB0aGUgSG9zdCBTZWNvbmRhcnkgUmVjb3ZlcnkgUmF0ZTM0IGZlYXR1cmUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgdm9pZCBhZGRIb3N0U2Vjb25kYXJ5UmVjb3ZlcnlSYXRlMzRQcm9wZXJ0eURlc2NyaXB0b3IoT2JqZWN0IG9iamVjdCkgew0KKwkJaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMuYWRkDQorCQkJKGNyZWF0ZUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3INCisJCQkJKCgoQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSlhZGFwdGVyRmFjdG9yeSkuZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCksDQorCQkJCSBnZXRSZXNvdXJjZUxvY2F0b3IoKSwNCisJCQkJIGdldFN0cmluZygiX1VJX0Rlbmd1ZU1vZGVsX2hvc3RTZWNvbmRhcnlSZWNvdmVyeVJhdGUzNF9mZWF0dXJlIiksDQorCQkJCSBnZXRTdHJpbmcoIl9VSV9Qcm9wZXJ0eURlc2NyaXB0b3JfZGVzY3JpcHRpb24iLCAiX1VJX0Rlbmd1ZU1vZGVsX2hvc3RTZWNvbmRhcnlSZWNvdmVyeVJhdGUzNF9mZWF0dXJlIiwgIl9VSV9EZW5ndWVNb2RlbF90eXBlIiksDQorCQkJCSBWZWN0b3JQYWNrYWdlLkxpdGVyYWxzLkRFTkdVRV9NT0RFTF9fSE9TVF9TRUNPTkRBUllfUkVDT1ZFUllfUkFURTM0LA0KKwkJCQkgdHJ1ZSwNCisJCQkJIGZhbHNlLA0KKwkJCQkgZmFsc2UsDQorCQkJCSBJdGVtUHJvcGVydHlEZXNjcmlwdG9yLlJFQUxfVkFMVUVfSU1BR0UsDQorCQkJCSBudWxsLA0KKwkJCQkgbnVsbCkpOw0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIGFkZHMgYSBwcm9wZXJ0eSBkZXNjcmlwdG9yIGZvciB0aGUgSG9zdCBTZWNvbmRhcnkgUmVjb3ZlcnkgUmF0ZTQxIGZlYXR1cmUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgdm9pZCBhZGRIb3N0U2Vjb25kYXJ5UmVjb3ZlcnlSYXRlNDFQcm9wZXJ0eURlc2NyaXB0b3IoT2JqZWN0IG9iamVjdCkgew0KKwkJaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMuYWRkDQorCQkJKGNyZWF0ZUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3INCisJCQkJKCgoQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSlhZGFwdGVyRmFjdG9yeSkuZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCksDQorCQkJCSBnZXRSZXNvdXJjZUxvY2F0b3IoKSwNCisJCQkJIGdldFN0cmluZygiX1VJX0Rlbmd1ZU1vZGVsX2hvc3RTZWNvbmRhcnlSZWNvdmVyeVJhdGU0MV9mZWF0dXJlIiksDQorCQkJCSBnZXRTdHJpbmcoIl9VSV9Qcm9wZXJ0eURlc2NyaXB0b3JfZGVzY3JpcHRpb24iLCAiX1VJX0Rlbmd1ZU1vZGVsX2hvc3RTZWNvbmRhcnlSZWNvdmVyeVJhdGU0MV9mZWF0dXJlIiwgIl9VSV9EZW5ndWVNb2RlbF90eXBlIiksDQorCQkJCSBWZWN0b3JQYWNrYWdlLkxpdGVyYWxzLkRFTkdVRV9NT0RFTF9fSE9TVF9TRUNPTkRBUllfUkVDT1ZFUllfUkFURTQxLA0KKwkJCQkgdHJ1ZSwNCisJCQkJIGZhbHNlLA0KKwkJCQkgZmFsc2UsDQorCQkJCSBJdGVtUHJvcGVydHlEZXNjcmlwdG9yLlJFQUxfVkFMVUVfSU1BR0UsDQorCQkJCSBudWxsLA0KKwkJCQkgbnVsbCkpOw0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIGFkZHMgYSBwcm9wZXJ0eSBkZXNjcmlwdG9yIGZvciB0aGUgSG9zdCBTZWNvbmRhcnkgUmVjb3ZlcnkgUmF0ZTQyIGZlYXR1cmUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgdm9pZCBhZGRIb3N0U2Vjb25kYXJ5UmVjb3ZlcnlSYXRlNDJQcm9wZXJ0eURlc2NyaXB0b3IoT2JqZWN0IG9iamVjdCkgew0KKwkJaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMuYWRkDQorCQkJKGNyZWF0ZUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3INCisJCQkJKCgoQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSlhZGFwdGVyRmFjdG9yeSkuZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCksDQorCQkJCSBnZXRSZXNvdXJjZUxvY2F0b3IoKSwNCisJCQkJIGdldFN0cmluZygiX1VJX0Rlbmd1ZU1vZGVsX2hvc3RTZWNvbmRhcnlSZWNvdmVyeVJhdGU0Ml9mZWF0dXJlIiksDQorCQkJCSBnZXRTdHJpbmcoIl9VSV9Qcm9wZXJ0eURlc2NyaXB0b3JfZGVzY3JpcHRpb24iLCAiX1VJX0Rlbmd1ZU1vZGVsX2hvc3RTZWNvbmRhcnlSZWNvdmVyeVJhdGU0Ml9mZWF0dXJlIiwgIl9VSV9EZW5ndWVNb2RlbF90eXBlIiksDQorCQkJCSBWZWN0b3JQYWNrYWdlLkxpdGVyYWxzLkRFTkdVRV9NT0RFTF9fSE9TVF9TRUNPTkRBUllfUkVDT1ZFUllfUkFURTQyLA0KKwkJCQkgdHJ1ZSwNCisJCQkJIGZhbHNlLA0KKwkJCQkgZmFsc2UsDQorCQkJCSBJdGVtUHJvcGVydHlEZXNjcmlwdG9yLlJFQUxfVkFMVUVfSU1BR0UsDQorCQkJCSBudWxsLA0KKwkJCQkgbnVsbCkpOw0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIGFkZHMgYSBwcm9wZXJ0eSBkZXNjcmlwdG9yIGZvciB0aGUgSG9zdCBTZWNvbmRhcnkgUmVjb3ZlcnkgUmF0ZTQzIGZlYXR1cmUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgdm9pZCBhZGRIb3N0U2Vjb25kYXJ5UmVjb3ZlcnlSYXRlNDNQcm9wZXJ0eURlc2NyaXB0b3IoT2JqZWN0IG9iamVjdCkgew0KKwkJaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMuYWRkDQorCQkJKGNyZWF0ZUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3INCisJCQkJKCgoQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSlhZGFwdGVyRmFjdG9yeSkuZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCksDQorCQkJCSBnZXRSZXNvdXJjZUxvY2F0b3IoKSwNCisJCQkJIGdldFN0cmluZygiX1VJX0Rlbmd1ZU1vZGVsX2hvc3RTZWNvbmRhcnlSZWNvdmVyeVJhdGU0M19mZWF0dXJlIiksDQorCQkJCSBnZXRTdHJpbmcoIl9VSV9Qcm9wZXJ0eURlc2NyaXB0b3JfZGVzY3JpcHRpb24iLCAiX1VJX0Rlbmd1ZU1vZGVsX2hvc3RTZWNvbmRhcnlSZWNvdmVyeVJhdGU0M19mZWF0dXJlIiwgIl9VSV9EZW5ndWVNb2RlbF90eXBlIiksDQorCQkJCSBWZWN0b3JQYWNrYWdlLkxpdGVyYWxzLkRFTkdVRV9NT0RFTF9fSE9TVF9TRUNPTkRBUllfUkVDT1ZFUllfUkFURTQzLA0KKwkJCQkgdHJ1ZSwNCisJCQkJIGZhbHNlLA0KKwkJCQkgZmFsc2UsDQorCQkJCSBJdGVtUHJvcGVydHlEZXNjcmlwdG9yLlJFQUxfVkFMVUVfSU1BR0UsDQorCQkJCSBudWxsLA0KKwkJCQkgbnVsbCkpOw0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIGFkZHMgYSBwcm9wZXJ0eSBkZXNjcmlwdG9yIGZvciB0aGUgSG9zdCBTZWNvbmRhcnkgSW5jdWJhdGlvbiBSYXRlMTIgZmVhdHVyZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCB2b2lkIGFkZEhvc3RTZWNvbmRhcnlJbmN1YmF0aW9uUmF0ZTEyUHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdCBvYmplY3QpIHsNCisJCWl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzLmFkZA0KKwkJCShjcmVhdGVJdGVtUHJvcGVydHlEZXNjcmlwdG9yDQorCQkJCSgoKENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnkpYWRhcHRlckZhY3RvcnkpLmdldFJvb3RBZGFwdGVyRmFjdG9yeSgpLA0KKwkJCQkgZ2V0UmVzb3VyY2VMb2NhdG9yKCksDQorCQkJCSBnZXRTdHJpbmcoIl9VSV9EZW5ndWVNb2RlbF9ob3N0U2Vjb25kYXJ5SW5jdWJhdGlvblJhdGUxMl9mZWF0dXJlIiksDQorCQkJCSBnZXRTdHJpbmcoIl9VSV9Qcm9wZXJ0eURlc2NyaXB0b3JfZGVzY3JpcHRpb24iLCAiX1VJX0Rlbmd1ZU1vZGVsX2hvc3RTZWNvbmRhcnlJbmN1YmF0aW9uUmF0ZTEyX2ZlYXR1cmUiLCAiX1VJX0Rlbmd1ZU1vZGVsX3R5cGUiKSwNCisJCQkJIFZlY3RvclBhY2thZ2UuTGl0ZXJhbHMuREVOR1VFX01PREVMX19IT1NUX1NFQ09OREFSWV9JTkNVQkFUSU9OX1JBVEUxMiwNCisJCQkJIHRydWUsDQorCQkJCSBmYWxzZSwNCisJCQkJIGZhbHNlLA0KKwkJCQkgSXRlbVByb3BlcnR5RGVzY3JpcHRvci5SRUFMX1ZBTFVFX0lNQUdFLA0KKwkJCQkgbnVsbCwNCisJCQkJIG51bGwpKTsNCisJfQ0KKw0KKwkvKioNCisJICogVGhpcyBhZGRzIGEgcHJvcGVydHkgZGVzY3JpcHRvciBmb3IgdGhlIEhvc3QgU2Vjb25kYXJ5IEluY3ViYXRpb24gUmF0ZTEzIGZlYXR1cmUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgdm9pZCBhZGRIb3N0U2Vjb25kYXJ5SW5jdWJhdGlvblJhdGUxM1Byb3BlcnR5RGVzY3JpcHRvcihPYmplY3Qgb2JqZWN0KSB7DQorCQlpdGVtUHJvcGVydHlEZXNjcmlwdG9ycy5hZGQNCisJCQkoY3JlYXRlSXRlbVByb3BlcnR5RGVzY3JpcHRvcg0KKwkJCQkoKChDb21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5KWFkYXB0ZXJGYWN0b3J5KS5nZXRSb290QWRhcHRlckZhY3RvcnkoKSwNCisJCQkJIGdldFJlc291cmNlTG9jYXRvcigpLA0KKwkJCQkgZ2V0U3RyaW5nKCJfVUlfRGVuZ3VlTW9kZWxfaG9zdFNlY29uZGFyeUluY3ViYXRpb25SYXRlMTNfZmVhdHVyZSIpLA0KKwkJCQkgZ2V0U3RyaW5nKCJfVUlfUHJvcGVydHlEZXNjcmlwdG9yX2Rlc2NyaXB0aW9uIiwgIl9VSV9EZW5ndWVNb2RlbF9ob3N0U2Vjb25kYXJ5SW5jdWJhdGlvblJhdGUxM19mZWF0dXJlIiwgIl9VSV9EZW5ndWVNb2RlbF90eXBlIiksDQorCQkJCSBWZWN0b3JQYWNrYWdlLkxpdGVyYWxzLkRFTkdVRV9NT0RFTF9fSE9TVF9TRUNPTkRBUllfSU5DVUJBVElPTl9SQVRFMTMsDQorCQkJCSB0cnVlLA0KKwkJCQkgZmFsc2UsDQorCQkJCSBmYWxzZSwNCisJCQkJIEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IuUkVBTF9WQUxVRV9JTUFHRSwNCisJCQkJIG51bGwsDQorCQkJCSBudWxsKSk7DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgYWRkcyBhIHByb3BlcnR5IGRlc2NyaXB0b3IgZm9yIHRoZSBIb3N0IFNlY29uZGFyeSBJbmN1YmF0aW9uIFJhdGUxNCBmZWF0dXJlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIHZvaWQgYWRkSG9zdFNlY29uZGFyeUluY3ViYXRpb25SYXRlMTRQcm9wZXJ0eURlc2NyaXB0b3IoT2JqZWN0IG9iamVjdCkgew0KKwkJaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMuYWRkDQorCQkJKGNyZWF0ZUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3INCisJCQkJKCgoQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSlhZGFwdGVyRmFjdG9yeSkuZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCksDQorCQkJCSBnZXRSZXNvdXJjZUxvY2F0b3IoKSwNCisJCQkJIGdldFN0cmluZygiX1VJX0Rlbmd1ZU1vZGVsX2hvc3RTZWNvbmRhcnlJbmN1YmF0aW9uUmF0ZTE0X2ZlYXR1cmUiKSwNCisJCQkJIGdldFN0cmluZygiX1VJX1Byb3BlcnR5RGVzY3JpcHRvcl9kZXNjcmlwdGlvbiIsICJfVUlfRGVuZ3VlTW9kZWxfaG9zdFNlY29uZGFyeUluY3ViYXRpb25SYXRlMTRfZmVhdHVyZSIsICJfVUlfRGVuZ3VlTW9kZWxfdHlwZSIpLA0KKwkJCQkgVmVjdG9yUGFja2FnZS5MaXRlcmFscy5ERU5HVUVfTU9ERUxfX0hPU1RfU0VDT05EQVJZX0lOQ1VCQVRJT05fUkFURTE0LA0KKwkJCQkgdHJ1ZSwNCisJCQkJIGZhbHNlLA0KKwkJCQkgZmFsc2UsDQorCQkJCSBJdGVtUHJvcGVydHlEZXNjcmlwdG9yLlJFQUxfVkFMVUVfSU1BR0UsDQorCQkJCSBudWxsLA0KKwkJCQkgbnVsbCkpOw0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIGFkZHMgYSBwcm9wZXJ0eSBkZXNjcmlwdG9yIGZvciB0aGUgSG9zdCBTZWNvbmRhcnkgSW5jdWJhdGlvbiBSYXRlMjEgZmVhdHVyZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCB2b2lkIGFkZEhvc3RTZWNvbmRhcnlJbmN1YmF0aW9uUmF0ZTIxUHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdCBvYmplY3QpIHsNCisJCWl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzLmFkZA0KKwkJCShjcmVhdGVJdGVtUHJvcGVydHlEZXNjcmlwdG9yDQorCQkJCSgoKENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnkpYWRhcHRlckZhY3RvcnkpLmdldFJvb3RBZGFwdGVyRmFjdG9yeSgpLA0KKwkJCQkgZ2V0UmVzb3VyY2VMb2NhdG9yKCksDQorCQkJCSBnZXRTdHJpbmcoIl9VSV9EZW5ndWVNb2RlbF9ob3N0U2Vjb25kYXJ5SW5jdWJhdGlvblJhdGUyMV9mZWF0dXJlIiksDQorCQkJCSBnZXRTdHJpbmcoIl9VSV9Qcm9wZXJ0eURlc2NyaXB0b3JfZGVzY3JpcHRpb24iLCAiX1VJX0Rlbmd1ZU1vZGVsX2hvc3RTZWNvbmRhcnlJbmN1YmF0aW9uUmF0ZTIxX2ZlYXR1cmUiLCAiX1VJX0Rlbmd1ZU1vZGVsX3R5cGUiKSwNCisJCQkJIFZlY3RvclBhY2thZ2UuTGl0ZXJhbHMuREVOR1VFX01PREVMX19IT1NUX1NFQ09OREFSWV9JTkNVQkFUSU9OX1JBVEUyMSwNCisJCQkJIHRydWUsDQorCQkJCSBmYWxzZSwNCisJCQkJIGZhbHNlLA0KKwkJCQkgSXRlbVByb3BlcnR5RGVzY3JpcHRvci5SRUFMX1ZBTFVFX0lNQUdFLA0KKwkJCQkgbnVsbCwNCisJCQkJIG51bGwpKTsNCisJfQ0KKw0KKwkvKioNCisJICogVGhpcyBhZGRzIGEgcHJvcGVydHkgZGVzY3JpcHRvciBmb3IgdGhlIEhvc3QgU2Vjb25kYXJ5IEluY3ViYXRpb24gUmF0ZTIzIGZlYXR1cmUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgdm9pZCBhZGRIb3N0U2Vjb25kYXJ5SW5jdWJhdGlvblJhdGUyM1Byb3BlcnR5RGVzY3JpcHRvcihPYmplY3Qgb2JqZWN0KSB7DQorCQlpdGVtUHJvcGVydHlEZXNjcmlwdG9ycy5hZGQNCisJCQkoY3JlYXRlSXRlbVByb3BlcnR5RGVzY3JpcHRvcg0KKwkJCQkoKChDb21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5KWFkYXB0ZXJGYWN0b3J5KS5nZXRSb290QWRhcHRlckZhY3RvcnkoKSwNCisJCQkJIGdldFJlc291cmNlTG9jYXRvcigpLA0KKwkJCQkgZ2V0U3RyaW5nKCJfVUlfRGVuZ3VlTW9kZWxfaG9zdFNlY29uZGFyeUluY3ViYXRpb25SYXRlMjNfZmVhdHVyZSIpLA0KKwkJCQkgZ2V0U3RyaW5nKCJfVUlfUHJvcGVydHlEZXNjcmlwdG9yX2Rlc2NyaXB0aW9uIiwgIl9VSV9EZW5ndWVNb2RlbF9ob3N0U2Vjb25kYXJ5SW5jdWJhdGlvblJhdGUyM19mZWF0dXJlIiwgIl9VSV9EZW5ndWVNb2RlbF90eXBlIiksDQorCQkJCSBWZWN0b3JQYWNrYWdlLkxpdGVyYWxzLkRFTkdVRV9NT0RFTF9fSE9TVF9TRUNPTkRBUllfSU5DVUJBVElPTl9SQVRFMjMsDQorCQkJCSB0cnVlLA0KKwkJCQkgZmFsc2UsDQorCQkJCSBmYWxzZSwNCisJCQkJIEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IuUkVBTF9WQUxVRV9JTUFHRSwNCisJCQkJIG51bGwsDQorCQkJCSBudWxsKSk7DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgYWRkcyBhIHByb3BlcnR5IGRlc2NyaXB0b3IgZm9yIHRoZSBIb3N0IFNlY29uZGFyeSBJbmN1YmF0aW9uIFJhdGUyNCBmZWF0dXJlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIHZvaWQgYWRkSG9zdFNlY29uZGFyeUluY3ViYXRpb25SYXRlMjRQcm9wZXJ0eURlc2NyaXB0b3IoT2JqZWN0IG9iamVjdCkgew0KKwkJaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMuYWRkDQorCQkJKGNyZWF0ZUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3INCisJCQkJKCgoQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSlhZGFwdGVyRmFjdG9yeSkuZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCksDQorCQkJCSBnZXRSZXNvdXJjZUxvY2F0b3IoKSwNCisJCQkJIGdldFN0cmluZygiX1VJX0Rlbmd1ZU1vZGVsX2hvc3RTZWNvbmRhcnlJbmN1YmF0aW9uUmF0ZTI0X2ZlYXR1cmUiKSwNCisJCQkJIGdldFN0cmluZygiX1VJX1Byb3BlcnR5RGVzY3JpcHRvcl9kZXNjcmlwdGlvbiIsICJfVUlfRGVuZ3VlTW9kZWxfaG9zdFNlY29uZGFyeUluY3ViYXRpb25SYXRlMjRfZmVhdHVyZSIsICJfVUlfRGVuZ3VlTW9kZWxfdHlwZSIpLA0KKwkJCQkgVmVjdG9yUGFja2FnZS5MaXRlcmFscy5ERU5HVUVfTU9ERUxfX0hPU1RfU0VDT05EQVJZX0lOQ1VCQVRJT05fUkFURTI0LA0KKwkJCQkgdHJ1ZSwNCisJCQkJIGZhbHNlLA0KKwkJCQkgZmFsc2UsDQorCQkJCSBJdGVtUHJvcGVydHlEZXNjcmlwdG9yLlJFQUxfVkFMVUVfSU1BR0UsDQorCQkJCSBudWxsLA0KKwkJCQkgbnVsbCkpOw0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIGFkZHMgYSBwcm9wZXJ0eSBkZXNjcmlwdG9yIGZvciB0aGUgSG9zdCBTZWNvbmRhcnkgSW5jdWJhdGlvbiBSYXRlMzEgZmVhdHVyZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCB2b2lkIGFkZEhvc3RTZWNvbmRhcnlJbmN1YmF0aW9uUmF0ZTMxUHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdCBvYmplY3QpIHsNCisJCWl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzLmFkZA0KKwkJCShjcmVhdGVJdGVtUHJvcGVydHlEZXNjcmlwdG9yDQorCQkJCSgoKENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnkpYWRhcHRlckZhY3RvcnkpLmdldFJvb3RBZGFwdGVyRmFjdG9yeSgpLA0KKwkJCQkgZ2V0UmVzb3VyY2VMb2NhdG9yKCksDQorCQkJCSBnZXRTdHJpbmcoIl9VSV9EZW5ndWVNb2RlbF9ob3N0U2Vjb25kYXJ5SW5jdWJhdGlvblJhdGUzMV9mZWF0dXJlIiksDQorCQkJCSBnZXRTdHJpbmcoIl9VSV9Qcm9wZXJ0eURlc2NyaXB0b3JfZGVzY3JpcHRpb24iLCAiX1VJX0Rlbmd1ZU1vZGVsX2hvc3RTZWNvbmRhcnlJbmN1YmF0aW9uUmF0ZTMxX2ZlYXR1cmUiLCAiX1VJX0Rlbmd1ZU1vZGVsX3R5cGUiKSwNCisJCQkJIFZlY3RvclBhY2thZ2UuTGl0ZXJhbHMuREVOR1VFX01PREVMX19IT1NUX1NFQ09OREFSWV9JTkNVQkFUSU9OX1JBVEUzMSwNCisJCQkJIHRydWUsDQorCQkJCSBmYWxzZSwNCisJCQkJIGZhbHNlLA0KKwkJCQkgSXRlbVByb3BlcnR5RGVzY3JpcHRvci5SRUFMX1ZBTFVFX0lNQUdFLA0KKwkJCQkgbnVsbCwNCisJCQkJIG51bGwpKTsNCisJfQ0KKw0KKwkvKioNCisJICogVGhpcyBhZGRzIGEgcHJvcGVydHkgZGVzY3JpcHRvciBmb3IgdGhlIEhvc3QgU2Vjb25kYXJ5IEluY3ViYXRpb24gUmF0ZTMyIGZlYXR1cmUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgdm9pZCBhZGRIb3N0U2Vjb25kYXJ5SW5jdWJhdGlvblJhdGUzMlByb3BlcnR5RGVzY3JpcHRvcihPYmplY3Qgb2JqZWN0KSB7DQorCQlpdGVtUHJvcGVydHlEZXNjcmlwdG9ycy5hZGQNCisJCQkoY3JlYXRlSXRlbVByb3BlcnR5RGVzY3JpcHRvcg0KKwkJCQkoKChDb21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5KWFkYXB0ZXJGYWN0b3J5KS5nZXRSb290QWRhcHRlckZhY3RvcnkoKSwNCisJCQkJIGdldFJlc291cmNlTG9jYXRvcigpLA0KKwkJCQkgZ2V0U3RyaW5nKCJfVUlfRGVuZ3VlTW9kZWxfaG9zdFNlY29uZGFyeUluY3ViYXRpb25SYXRlMzJfZmVhdHVyZSIpLA0KKwkJCQkgZ2V0U3RyaW5nKCJfVUlfUHJvcGVydHlEZXNjcmlwdG9yX2Rlc2NyaXB0aW9uIiwgIl9VSV9EZW5ndWVNb2RlbF9ob3N0U2Vjb25kYXJ5SW5jdWJhdGlvblJhdGUzMl9mZWF0dXJlIiwgIl9VSV9EZW5ndWVNb2RlbF90eXBlIiksDQorCQkJCSBWZWN0b3JQYWNrYWdlLkxpdGVyYWxzLkRFTkdVRV9NT0RFTF9fSE9TVF9TRUNPTkRBUllfSU5DVUJBVElPTl9SQVRFMzIsDQorCQkJCSB0cnVlLA0KKwkJCQkgZmFsc2UsDQorCQkJCSBmYWxzZSwNCisJCQkJIEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IuUkVBTF9WQUxVRV9JTUFHRSwNCisJCQkJIG51bGwsDQorCQkJCSBudWxsKSk7DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgYWRkcyBhIHByb3BlcnR5IGRlc2NyaXB0b3IgZm9yIHRoZSBIb3N0IFNlY29uZGFyeSBJbmN1YmF0aW9uIFJhdGUzNCBmZWF0dXJlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIHZvaWQgYWRkSG9zdFNlY29uZGFyeUluY3ViYXRpb25SYXRlMzRQcm9wZXJ0eURlc2NyaXB0b3IoT2JqZWN0IG9iamVjdCkgew0KKwkJaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMuYWRkDQorCQkJKGNyZWF0ZUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3INCisJCQkJKCgoQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSlhZGFwdGVyRmFjdG9yeSkuZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCksDQorCQkJCSBnZXRSZXNvdXJjZUxvY2F0b3IoKSwNCisJCQkJIGdldFN0cmluZygiX1VJX0Rlbmd1ZU1vZGVsX2hvc3RTZWNvbmRhcnlJbmN1YmF0aW9uUmF0ZTM0X2ZlYXR1cmUiKSwNCisJCQkJIGdldFN0cmluZygiX1VJX1Byb3BlcnR5RGVzY3JpcHRvcl9kZXNjcmlwdGlvbiIsICJfVUlfRGVuZ3VlTW9kZWxfaG9zdFNlY29uZGFyeUluY3ViYXRpb25SYXRlMzRfZmVhdHVyZSIsICJfVUlfRGVuZ3VlTW9kZWxfdHlwZSIpLA0KKwkJCQkgVmVjdG9yUGFja2FnZS5MaXRlcmFscy5ERU5HVUVfTU9ERUxfX0hPU1RfU0VDT05EQVJZX0lOQ1VCQVRJT05fUkFURTM0LA0KKwkJCQkgdHJ1ZSwNCisJCQkJIGZhbHNlLA0KKwkJCQkgZmFsc2UsDQorCQkJCSBJdGVtUHJvcGVydHlEZXNjcmlwdG9yLlJFQUxfVkFMVUVfSU1BR0UsDQorCQkJCSBudWxsLA0KKwkJCQkgbnVsbCkpOw0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIGFkZHMgYSBwcm9wZXJ0eSBkZXNjcmlwdG9yIGZvciB0aGUgSG9zdCBTZWNvbmRhcnkgSW5jdWJhdGlvbiBSYXRlNDEgZmVhdHVyZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCB2b2lkIGFkZEhvc3RTZWNvbmRhcnlJbmN1YmF0aW9uUmF0ZTQxUHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdCBvYmplY3QpIHsNCisJCWl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzLmFkZA0KKwkJCShjcmVhdGVJdGVtUHJvcGVydHlEZXNjcmlwdG9yDQorCQkJCSgoKENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnkpYWRhcHRlckZhY3RvcnkpLmdldFJvb3RBZGFwdGVyRmFjdG9yeSgpLA0KKwkJCQkgZ2V0UmVzb3VyY2VMb2NhdG9yKCksDQorCQkJCSBnZXRTdHJpbmcoIl9VSV9EZW5ndWVNb2RlbF9ob3N0U2Vjb25kYXJ5SW5jdWJhdGlvblJhdGU0MV9mZWF0dXJlIiksDQorCQkJCSBnZXRTdHJpbmcoIl9VSV9Qcm9wZXJ0eURlc2NyaXB0b3JfZGVzY3JpcHRpb24iLCAiX1VJX0Rlbmd1ZU1vZGVsX2hvc3RTZWNvbmRhcnlJbmN1YmF0aW9uUmF0ZTQxX2ZlYXR1cmUiLCAiX1VJX0Rlbmd1ZU1vZGVsX3R5cGUiKSwNCisJCQkJIFZlY3RvclBhY2thZ2UuTGl0ZXJhbHMuREVOR1VFX01PREVMX19IT1NUX1NFQ09OREFSWV9JTkNVQkFUSU9OX1JBVEU0MSwNCisJCQkJIHRydWUsDQorCQkJCSBmYWxzZSwNCisJCQkJIGZhbHNlLA0KKwkJCQkgSXRlbVByb3BlcnR5RGVzY3JpcHRvci5SRUFMX1ZBTFVFX0lNQUdFLA0KKwkJCQkgbnVsbCwNCisJCQkJIG51bGwpKTsNCisJfQ0KKw0KKwkvKioNCisJICogVGhpcyBhZGRzIGEgcHJvcGVydHkgZGVzY3JpcHRvciBmb3IgdGhlIEhvc3QgU2Vjb25kYXJ5IEluY3ViYXRpb24gUmF0ZTQyIGZlYXR1cmUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgdm9pZCBhZGRIb3N0U2Vjb25kYXJ5SW5jdWJhdGlvblJhdGU0MlByb3BlcnR5RGVzY3JpcHRvcihPYmplY3Qgb2JqZWN0KSB7DQorCQlpdGVtUHJvcGVydHlEZXNjcmlwdG9ycy5hZGQNCisJCQkoY3JlYXRlSXRlbVByb3BlcnR5RGVzY3JpcHRvcg0KKwkJCQkoKChDb21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5KWFkYXB0ZXJGYWN0b3J5KS5nZXRSb290QWRhcHRlckZhY3RvcnkoKSwNCisJCQkJIGdldFJlc291cmNlTG9jYXRvcigpLA0KKwkJCQkgZ2V0U3RyaW5nKCJfVUlfRGVuZ3VlTW9kZWxfaG9zdFNlY29uZGFyeUluY3ViYXRpb25SYXRlNDJfZmVhdHVyZSIpLA0KKwkJCQkgZ2V0U3RyaW5nKCJfVUlfUHJvcGVydHlEZXNjcmlwdG9yX2Rlc2NyaXB0aW9uIiwgIl9VSV9EZW5ndWVNb2RlbF9ob3N0U2Vjb25kYXJ5SW5jdWJhdGlvblJhdGU0Ml9mZWF0dXJlIiwgIl9VSV9EZW5ndWVNb2RlbF90eXBlIiksDQorCQkJCSBWZWN0b3JQYWNrYWdlLkxpdGVyYWxzLkRFTkdVRV9NT0RFTF9fSE9TVF9TRUNPTkRBUllfSU5DVUJBVElPTl9SQVRFNDIsDQorCQkJCSB0cnVlLA0KKwkJCQkgZmFsc2UsDQorCQkJCSBmYWxzZSwNCisJCQkJIEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IuUkVBTF9WQUxVRV9JTUFHRSwNCisJCQkJIG51bGwsDQorCQkJCSBudWxsKSk7DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgYWRkcyBhIHByb3BlcnR5IGRlc2NyaXB0b3IgZm9yIHRoZSBIb3N0IFNlY29uZGFyeSBJbmN1YmF0aW9uIFJhdGU0MyBmZWF0dXJlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIHZvaWQgYWRkSG9zdFNlY29uZGFyeUluY3ViYXRpb25SYXRlNDNQcm9wZXJ0eURlc2NyaXB0b3IoT2JqZWN0IG9iamVjdCkgew0KKwkJaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMuYWRkDQorCQkJKGNyZWF0ZUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3INCisJCQkJKCgoQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSlhZGFwdGVyRmFjdG9yeSkuZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCksDQorCQkJCSBnZXRSZXNvdXJjZUxvY2F0b3IoKSwNCisJCQkJIGdldFN0cmluZygiX1VJX0Rlbmd1ZU1vZGVsX2hvc3RTZWNvbmRhcnlJbmN1YmF0aW9uUmF0ZTQzX2ZlYXR1cmUiKSwNCisJCQkJIGdldFN0cmluZygiX1VJX1Byb3BlcnR5RGVzY3JpcHRvcl9kZXNjcmlwdGlvbiIsICJfVUlfRGVuZ3VlTW9kZWxfaG9zdFNlY29uZGFyeUluY3ViYXRpb25SYXRlNDNfZmVhdHVyZSIsICJfVUlfRGVuZ3VlTW9kZWxfdHlwZSIpLA0KKwkJCQkgVmVjdG9yUGFja2FnZS5MaXRlcmFscy5ERU5HVUVfTU9ERUxfX0hPU1RfU0VDT05EQVJZX0lOQ1VCQVRJT05fUkFURTQzLA0KKwkJCQkgdHJ1ZSwNCisJCQkJIGZhbHNlLA0KKwkJCQkgZmFsc2UsDQorCQkJCSBJdGVtUHJvcGVydHlEZXNjcmlwdG9yLlJFQUxfVkFMVUVfSU1BR0UsDQorCQkJCSBudWxsLA0KKwkJCQkgbnVsbCkpOw0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIGFkZHMgYSBwcm9wZXJ0eSBkZXNjcmlwdG9yIGZvciB0aGUgVmVjdG9yIEluZmVjdGl2aXR5MSBmZWF0dXJlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIHZvaWQgYWRkVmVjdG9ySW5mZWN0aXZpdHkxUHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdCBvYmplY3QpIHsNCisJCWl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzLmFkZA0KKwkJCShjcmVhdGVJdGVtUHJvcGVydHlEZXNjcmlwdG9yDQorCQkJCSgoKENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnkpYWRhcHRlckZhY3RvcnkpLmdldFJvb3RBZGFwdGVyRmFjdG9yeSgpLA0KKwkJCQkgZ2V0UmVzb3VyY2VMb2NhdG9yKCksDQorCQkJCSBnZXRTdHJpbmcoIl9VSV9EZW5ndWVNb2RlbF92ZWN0b3JJbmZlY3Rpdml0eTFfZmVhdHVyZSIpLA0KKwkJCQkgZ2V0U3RyaW5nKCJfVUlfUHJvcGVydHlEZXNjcmlwdG9yX2Rlc2NyaXB0aW9uIiwgIl9VSV9EZW5ndWVNb2RlbF92ZWN0b3JJbmZlY3Rpdml0eTFfZmVhdHVyZSIsICJfVUlfRGVuZ3VlTW9kZWxfdHlwZSIpLA0KKwkJCQkgVmVjdG9yUGFja2FnZS5MaXRlcmFscy5ERU5HVUVfTU9ERUxfX1ZFQ1RPUl9JTkZFQ1RJVklUWTEsDQorCQkJCSB0cnVlLA0KKwkJCQkgZmFsc2UsDQorCQkJCSBmYWxzZSwNCisJCQkJIEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IuUkVBTF9WQUxVRV9JTUFHRSwNCisJCQkJIG51bGwsDQorCQkJCSBudWxsKSk7DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgYWRkcyBhIHByb3BlcnR5IGRlc2NyaXB0b3IgZm9yIHRoZSBWZWN0b3IgSW5mZWN0aXZpdHkyIGZlYXR1cmUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgdm9pZCBhZGRWZWN0b3JJbmZlY3Rpdml0eTJQcm9wZXJ0eURlc2NyaXB0b3IoT2JqZWN0IG9iamVjdCkgew0KKwkJaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMuYWRkDQorCQkJKGNyZWF0ZUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3INCisJCQkJKCgoQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSlhZGFwdGVyRmFjdG9yeSkuZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCksDQorCQkJCSBnZXRSZXNvdXJjZUxvY2F0b3IoKSwNCisJCQkJIGdldFN0cmluZygiX1VJX0Rlbmd1ZU1vZGVsX3ZlY3RvckluZmVjdGl2aXR5Ml9mZWF0dXJlIiksDQorCQkJCSBnZXRTdHJpbmcoIl9VSV9Qcm9wZXJ0eURlc2NyaXB0b3JfZGVzY3JpcHRpb24iLCAiX1VJX0Rlbmd1ZU1vZGVsX3ZlY3RvckluZmVjdGl2aXR5Ml9mZWF0dXJlIiwgIl9VSV9EZW5ndWVNb2RlbF90eXBlIiksDQorCQkJCSBWZWN0b3JQYWNrYWdlLkxpdGVyYWxzLkRFTkdVRV9NT0RFTF9fVkVDVE9SX0lORkVDVElWSVRZMiwNCisJCQkJIHRydWUsDQorCQkJCSBmYWxzZSwNCisJCQkJIGZhbHNlLA0KKwkJCQkgSXRlbVByb3BlcnR5RGVzY3JpcHRvci5SRUFMX1ZBTFVFX0lNQUdFLA0KKwkJCQkgbnVsbCwNCisJCQkJIG51bGwpKTsNCisJfQ0KKw0KKwkvKioNCisJICogVGhpcyBhZGRzIGEgcHJvcGVydHkgZGVzY3JpcHRvciBmb3IgdGhlIFZlY3RvciBJbmZlY3Rpdml0eTMgZmVhdHVyZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCB2b2lkIGFkZFZlY3RvckluZmVjdGl2aXR5M1Byb3BlcnR5RGVzY3JpcHRvcihPYmplY3Qgb2JqZWN0KSB7DQorCQlpdGVtUHJvcGVydHlEZXNjcmlwdG9ycy5hZGQNCisJCQkoY3JlYXRlSXRlbVByb3BlcnR5RGVzY3JpcHRvcg0KKwkJCQkoKChDb21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5KWFkYXB0ZXJGYWN0b3J5KS5nZXRSb290QWRhcHRlckZhY3RvcnkoKSwNCisJCQkJIGdldFJlc291cmNlTG9jYXRvcigpLA0KKwkJCQkgZ2V0U3RyaW5nKCJfVUlfRGVuZ3VlTW9kZWxfdmVjdG9ySW5mZWN0aXZpdHkzX2ZlYXR1cmUiKSwNCisJCQkJIGdldFN0cmluZygiX1VJX1Byb3BlcnR5RGVzY3JpcHRvcl9kZXNjcmlwdGlvbiIsICJfVUlfRGVuZ3VlTW9kZWxfdmVjdG9ySW5mZWN0aXZpdHkzX2ZlYXR1cmUiLCAiX1VJX0Rlbmd1ZU1vZGVsX3R5cGUiKSwNCisJCQkJIFZlY3RvclBhY2thZ2UuTGl0ZXJhbHMuREVOR1VFX01PREVMX19WRUNUT1JfSU5GRUNUSVZJVFkzLA0KKwkJCQkgdHJ1ZSwNCisJCQkJIGZhbHNlLA0KKwkJCQkgZmFsc2UsDQorCQkJCSBJdGVtUHJvcGVydHlEZXNjcmlwdG9yLlJFQUxfVkFMVUVfSU1BR0UsDQorCQkJCSBudWxsLA0KKwkJCQkgbnVsbCkpOw0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIGFkZHMgYSBwcm9wZXJ0eSBkZXNjcmlwdG9yIGZvciB0aGUgVmVjdG9yIEluZmVjdGl2aXR5NCBmZWF0dXJlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIHZvaWQgYWRkVmVjdG9ySW5mZWN0aXZpdHk0UHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdCBvYmplY3QpIHsNCisJCWl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzLmFkZA0KKwkJCShjcmVhdGVJdGVtUHJvcGVydHlEZXNjcmlwdG9yDQorCQkJCSgoKENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnkpYWRhcHRlckZhY3RvcnkpLmdldFJvb3RBZGFwdGVyRmFjdG9yeSgpLA0KKwkJCQkgZ2V0UmVzb3VyY2VMb2NhdG9yKCksDQorCQkJCSBnZXRTdHJpbmcoIl9VSV9EZW5ndWVNb2RlbF92ZWN0b3JJbmZlY3Rpdml0eTRfZmVhdHVyZSIpLA0KKwkJCQkgZ2V0U3RyaW5nKCJfVUlfUHJvcGVydHlEZXNjcmlwdG9yX2Rlc2NyaXB0aW9uIiwgIl9VSV9EZW5ndWVNb2RlbF92ZWN0b3JJbmZlY3Rpdml0eTRfZmVhdHVyZSIsICJfVUlfRGVuZ3VlTW9kZWxfdHlwZSIpLA0KKwkJCQkgVmVjdG9yUGFja2FnZS5MaXRlcmFscy5ERU5HVUVfTU9ERUxfX1ZFQ1RPUl9JTkZFQ1RJVklUWTQsDQorCQkJCSB0cnVlLA0KKwkJCQkgZmFsc2UsDQorCQkJCSBmYWxzZSwNCisJCQkJIEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IuUkVBTF9WQUxVRV9JTUFHRSwNCisJCQkJIG51bGwsDQorCQkJCSBudWxsKSk7DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgYWRkcyBhIHByb3BlcnR5IGRlc2NyaXB0b3IgZm9yIHRoZSBWZWN0b3IgQURFMSBmZWF0dXJlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIHZvaWQgYWRkVmVjdG9yQURFMVByb3BlcnR5RGVzY3JpcHRvcihPYmplY3Qgb2JqZWN0KSB7DQorCQlpdGVtUHJvcGVydHlEZXNjcmlwdG9ycy5hZGQNCisJCQkoY3JlYXRlSXRlbVByb3BlcnR5RGVzY3JpcHRvcg0KKwkJCQkoKChDb21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5KWFkYXB0ZXJGYWN0b3J5KS5nZXRSb290QWRhcHRlckZhY3RvcnkoKSwNCisJCQkJIGdldFJlc291cmNlTG9jYXRvcigpLA0KKwkJCQkgZ2V0U3RyaW5nKCJfVUlfRGVuZ3VlTW9kZWxfdmVjdG9yQURFMV9mZWF0dXJlIiksDQorCQkJCSBnZXRTdHJpbmcoIl9VSV9Qcm9wZXJ0eURlc2NyaXB0b3JfZGVzY3JpcHRpb24iLCAiX1VJX0Rlbmd1ZU1vZGVsX3ZlY3RvckFERTFfZmVhdHVyZSIsICJfVUlfRGVuZ3VlTW9kZWxfdHlwZSIpLA0KKwkJCQkgVmVjdG9yUGFja2FnZS5MaXRlcmFscy5ERU5HVUVfTU9ERUxfX1ZFQ1RPUl9BREUxLA0KKwkJCQkgdHJ1ZSwNCisJCQkJIGZhbHNlLA0KKwkJCQkgZmFsc2UsDQorCQkJCSBJdGVtUHJvcGVydHlEZXNjcmlwdG9yLlJFQUxfVkFMVUVfSU1BR0UsDQorCQkJCSBudWxsLA0KKwkJCQkgbnVsbCkpOw0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIGFkZHMgYSBwcm9wZXJ0eSBkZXNjcmlwdG9yIGZvciB0aGUgVmVjdG9yIEFERTIgZmVhdHVyZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCB2b2lkIGFkZFZlY3RvckFERTJQcm9wZXJ0eURlc2NyaXB0b3IoT2JqZWN0IG9iamVjdCkgew0KKwkJaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMuYWRkDQorCQkJKGNyZWF0ZUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3INCisJCQkJKCgoQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSlhZGFwdGVyRmFjdG9yeSkuZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCksDQorCQkJCSBnZXRSZXNvdXJjZUxvY2F0b3IoKSwNCisJCQkJIGdldFN0cmluZygiX1VJX0Rlbmd1ZU1vZGVsX3ZlY3RvckFERTJfZmVhdHVyZSIpLA0KKwkJCQkgZ2V0U3RyaW5nKCJfVUlfUHJvcGVydHlEZXNjcmlwdG9yX2Rlc2NyaXB0aW9uIiwgIl9VSV9EZW5ndWVNb2RlbF92ZWN0b3JBREUyX2ZlYXR1cmUiLCAiX1VJX0Rlbmd1ZU1vZGVsX3R5cGUiKSwNCisJCQkJIFZlY3RvclBhY2thZ2UuTGl0ZXJhbHMuREVOR1VFX01PREVMX19WRUNUT1JfQURFMiwNCisJCQkJIHRydWUsDQorCQkJCSBmYWxzZSwNCisJCQkJIGZhbHNlLA0KKwkJCQkgSXRlbVByb3BlcnR5RGVzY3JpcHRvci5SRUFMX1ZBTFVFX0lNQUdFLA0KKwkJCQkgbnVsbCwNCisJCQkJIG51bGwpKTsNCisJfQ0KKw0KKwkvKioNCisJICogVGhpcyBhZGRzIGEgcHJvcGVydHkgZGVzY3JpcHRvciBmb3IgdGhlIFZlY3RvciBBREUzIGZlYXR1cmUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgdm9pZCBhZGRWZWN0b3JBREUzUHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdCBvYmplY3QpIHsNCisJCWl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzLmFkZA0KKwkJCShjcmVhdGVJdGVtUHJvcGVydHlEZXNjcmlwdG9yDQorCQkJCSgoKENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnkpYWRhcHRlckZhY3RvcnkpLmdldFJvb3RBZGFwdGVyRmFjdG9yeSgpLA0KKwkJCQkgZ2V0UmVzb3VyY2VMb2NhdG9yKCksDQorCQkJCSBnZXRTdHJpbmcoIl9VSV9EZW5ndWVNb2RlbF92ZWN0b3JBREUzX2ZlYXR1cmUiKSwNCisJCQkJIGdldFN0cmluZygiX1VJX1Byb3BlcnR5RGVzY3JpcHRvcl9kZXNjcmlwdGlvbiIsICJfVUlfRGVuZ3VlTW9kZWxfdmVjdG9yQURFM19mZWF0dXJlIiwgIl9VSV9EZW5ndWVNb2RlbF90eXBlIiksDQorCQkJCSBWZWN0b3JQYWNrYWdlLkxpdGVyYWxzLkRFTkdVRV9NT0RFTF9fVkVDVE9SX0FERTMsDQorCQkJCSB0cnVlLA0KKwkJCQkgZmFsc2UsDQorCQkJCSBmYWxzZSwNCisJCQkJIEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IuUkVBTF9WQUxVRV9JTUFHRSwNCisJCQkJIG51bGwsDQorCQkJCSBudWxsKSk7DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgYWRkcyBhIHByb3BlcnR5IGRlc2NyaXB0b3IgZm9yIHRoZSBWZWN0b3IgQURFNCBmZWF0dXJlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIHZvaWQgYWRkVmVjdG9yQURFNFByb3BlcnR5RGVzY3JpcHRvcihPYmplY3Qgb2JqZWN0KSB7DQorCQlpdGVtUHJvcGVydHlEZXNjcmlwdG9ycy5hZGQNCisJCQkoY3JlYXRlSXRlbVByb3BlcnR5RGVzY3JpcHRvcg0KKwkJCQkoKChDb21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5KWFkYXB0ZXJGYWN0b3J5KS5nZXRSb290QWRhcHRlckZhY3RvcnkoKSwNCisJCQkJIGdldFJlc291cmNlTG9jYXRvcigpLA0KKwkJCQkgZ2V0U3RyaW5nKCJfVUlfRGVuZ3VlTW9kZWxfdmVjdG9yQURFNF9mZWF0dXJlIiksDQorCQkJCSBnZXRTdHJpbmcoIl9VSV9Qcm9wZXJ0eURlc2NyaXB0b3JfZGVzY3JpcHRpb24iLCAiX1VJX0Rlbmd1ZU1vZGVsX3ZlY3RvckFERTRfZmVhdHVyZSIsICJfVUlfRGVuZ3VlTW9kZWxfdHlwZSIpLA0KKwkJCQkgVmVjdG9yUGFja2FnZS5MaXRlcmFscy5ERU5HVUVfTU9ERUxfX1ZFQ1RPUl9BREU0LA0KKwkJCQkgdHJ1ZSwNCisJCQkJIGZhbHNlLA0KKwkJCQkgZmFsc2UsDQorCQkJCSBJdGVtUHJvcGVydHlEZXNjcmlwdG9yLlJFQUxfVkFMVUVfSU1BR0UsDQorCQkJCSBudWxsLA0KKwkJCQkgbnVsbCkpOw0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIGFkZHMgYSBwcm9wZXJ0eSBkZXNjcmlwdG9yIGZvciB0aGUgVmVjdG9yIEluY3ViYXRpb24gUmF0ZTEgZmVhdHVyZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCB2b2lkIGFkZFZlY3RvckluY3ViYXRpb25SYXRlMVByb3BlcnR5RGVzY3JpcHRvcihPYmplY3Qgb2JqZWN0KSB7DQorCQlpdGVtUHJvcGVydHlEZXNjcmlwdG9ycy5hZGQNCisJCQkoY3JlYXRlSXRlbVByb3BlcnR5RGVzY3JpcHRvcg0KKwkJCQkoKChDb21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5KWFkYXB0ZXJGYWN0b3J5KS5nZXRSb290QWRhcHRlckZhY3RvcnkoKSwNCisJCQkJIGdldFJlc291cmNlTG9jYXRvcigpLA0KKwkJCQkgZ2V0U3RyaW5nKCJfVUlfRGVuZ3VlTW9kZWxfdmVjdG9ySW5jdWJhdGlvblJhdGUxX2ZlYXR1cmUiKSwNCisJCQkJIGdldFN0cmluZygiX1VJX1Byb3BlcnR5RGVzY3JpcHRvcl9kZXNjcmlwdGlvbiIsICJfVUlfRGVuZ3VlTW9kZWxfdmVjdG9ySW5jdWJhdGlvblJhdGUxX2ZlYXR1cmUiLCAiX1VJX0Rlbmd1ZU1vZGVsX3R5cGUiKSwNCisJCQkJIFZlY3RvclBhY2thZ2UuTGl0ZXJhbHMuREVOR1VFX01PREVMX19WRUNUT1JfSU5DVUJBVElPTl9SQVRFMSwNCisJCQkJIHRydWUsDQorCQkJCSBmYWxzZSwNCisJCQkJIGZhbHNlLA0KKwkJCQkgSXRlbVByb3BlcnR5RGVzY3JpcHRvci5SRUFMX1ZBTFVFX0lNQUdFLA0KKwkJCQkgbnVsbCwNCisJCQkJIG51bGwpKTsNCisJfQ0KKw0KKwkvKioNCisJICogVGhpcyBhZGRzIGEgcHJvcGVydHkgZGVzY3JpcHRvciBmb3IgdGhlIFZlY3RvciBJbmN1YmF0aW9uIFJhdGUyIGZlYXR1cmUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgdm9pZCBhZGRWZWN0b3JJbmN1YmF0aW9uUmF0ZTJQcm9wZXJ0eURlc2NyaXB0b3IoT2JqZWN0IG9iamVjdCkgew0KKwkJaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMuYWRkDQorCQkJKGNyZWF0ZUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3INCisJCQkJKCgoQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSlhZGFwdGVyRmFjdG9yeSkuZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCksDQorCQkJCSBnZXRSZXNvdXJjZUxvY2F0b3IoKSwNCisJCQkJIGdldFN0cmluZygiX1VJX0Rlbmd1ZU1vZGVsX3ZlY3RvckluY3ViYXRpb25SYXRlMl9mZWF0dXJlIiksDQorCQkJCSBnZXRTdHJpbmcoIl9VSV9Qcm9wZXJ0eURlc2NyaXB0b3JfZGVzY3JpcHRpb24iLCAiX1VJX0Rlbmd1ZU1vZGVsX3ZlY3RvckluY3ViYXRpb25SYXRlMl9mZWF0dXJlIiwgIl9VSV9EZW5ndWVNb2RlbF90eXBlIiksDQorCQkJCSBWZWN0b3JQYWNrYWdlLkxpdGVyYWxzLkRFTkdVRV9NT0RFTF9fVkVDVE9SX0lOQ1VCQVRJT05fUkFURTIsDQorCQkJCSB0cnVlLA0KKwkJCQkgZmFsc2UsDQorCQkJCSBmYWxzZSwNCisJCQkJIEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IuUkVBTF9WQUxVRV9JTUFHRSwNCisJCQkJIG51bGwsDQorCQkJCSBudWxsKSk7DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgYWRkcyBhIHByb3BlcnR5IGRlc2NyaXB0b3IgZm9yIHRoZSBWZWN0b3IgSW5jdWJhdGlvbiBSYXRlMyBmZWF0dXJlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIHZvaWQgYWRkVmVjdG9ySW5jdWJhdGlvblJhdGUzUHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdCBvYmplY3QpIHsNCisJCWl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzLmFkZA0KKwkJCShjcmVhdGVJdGVtUHJvcGVydHlEZXNjcmlwdG9yDQorCQkJCSgoKENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnkpYWRhcHRlckZhY3RvcnkpLmdldFJvb3RBZGFwdGVyRmFjdG9yeSgpLA0KKwkJCQkgZ2V0UmVzb3VyY2VMb2NhdG9yKCksDQorCQkJCSBnZXRTdHJpbmcoIl9VSV9EZW5ndWVNb2RlbF92ZWN0b3JJbmN1YmF0aW9uUmF0ZTNfZmVhdHVyZSIpLA0KKwkJCQkgZ2V0U3RyaW5nKCJfVUlfUHJvcGVydHlEZXNjcmlwdG9yX2Rlc2NyaXB0aW9uIiwgIl9VSV9EZW5ndWVNb2RlbF92ZWN0b3JJbmN1YmF0aW9uUmF0ZTNfZmVhdHVyZSIsICJfVUlfRGVuZ3VlTW9kZWxfdHlwZSIpLA0KKwkJCQkgVmVjdG9yUGFja2FnZS5MaXRlcmFscy5ERU5HVUVfTU9ERUxfX1ZFQ1RPUl9JTkNVQkFUSU9OX1JBVEUzLA0KKwkJCQkgdHJ1ZSwNCisJCQkJIGZhbHNlLA0KKwkJCQkgZmFsc2UsDQorCQkJCSBJdGVtUHJvcGVydHlEZXNjcmlwdG9yLlJFQUxfVkFMVUVfSU1BR0UsDQorCQkJCSBudWxsLA0KKwkJCQkgbnVsbCkpOw0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIGFkZHMgYSBwcm9wZXJ0eSBkZXNjcmlwdG9yIGZvciB0aGUgVmVjdG9yIEluY3ViYXRpb24gUmF0ZTQgZmVhdHVyZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCB2b2lkIGFkZFZlY3RvckluY3ViYXRpb25SYXRlNFByb3BlcnR5RGVzY3JpcHRvcihPYmplY3Qgb2JqZWN0KSB7DQorCQlpdGVtUHJvcGVydHlEZXNjcmlwdG9ycy5hZGQNCisJCQkoY3JlYXRlSXRlbVByb3BlcnR5RGVzY3JpcHRvcg0KKwkJCQkoKChDb21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5KWFkYXB0ZXJGYWN0b3J5KS5nZXRSb290QWRhcHRlckZhY3RvcnkoKSwNCisJCQkJIGdldFJlc291cmNlTG9jYXRvcigpLA0KKwkJCQkgZ2V0U3RyaW5nKCJfVUlfRGVuZ3VlTW9kZWxfdmVjdG9ySW5jdWJhdGlvblJhdGU0X2ZlYXR1cmUiKSwNCisJCQkJIGdldFN0cmluZygiX1VJX1Byb3BlcnR5RGVzY3JpcHRvcl9kZXNjcmlwdGlvbiIsICJfVUlfRGVuZ3VlTW9kZWxfdmVjdG9ySW5jdWJhdGlvblJhdGU0X2ZlYXR1cmUiLCAiX1VJX0Rlbmd1ZU1vZGVsX3R5cGUiKSwNCisJCQkJIFZlY3RvclBhY2thZ2UuTGl0ZXJhbHMuREVOR1VFX01PREVMX19WRUNUT1JfSU5DVUJBVElPTl9SQVRFNCwNCisJCQkJIHRydWUsDQorCQkJCSBmYWxzZSwNCisJCQkJIGZhbHNlLA0KKwkJCQkgSXRlbVByb3BlcnR5RGVzY3JpcHRvci5SRUFMX1ZBTFVFX0lNQUdFLA0KKwkJCQkgbnVsbCwNCisJCQkJIG51bGwpKTsNCisJfQ0KKw0KKwkvKioNCisJICogVGhpcyByZXR1cm5zIERlbmd1ZU1vZGVsLmdpZi4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCUBPdmVycmlkZQ0KKwlwdWJsaWMgT2JqZWN0IGdldEltYWdlKE9iamVjdCBvYmplY3QpIHsNCisJCXJldHVybiBvdmVybGF5SW1hZ2Uob2JqZWN0LCBnZXRSZXNvdXJjZUxvY2F0b3IoKS5nZXRJbWFnZSgiZnVsbC9vYmoxNi9EZW5ndWVNb2RlbCIpKTsNCisJfQ0KKw0KKwkvKioNCisJICogVGhpcyByZXR1cm5zIHRoZSBsYWJlbCB0ZXh0IGZvciB0aGUgYWRhcHRlZCBjbGFzcy4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCUBPdmVycmlkZQ0KKwlwdWJsaWMgU3RyaW5nIGdldFRleHQoT2JqZWN0IG9iamVjdCkgew0KKwkJU3RyaW5nIGxhYmVsID0gKChEZW5ndWVNb2RlbClvYmplY3QpLmdldERpc2Vhc2VOYW1lKCk7DQorCQlyZXR1cm4gbGFiZWwgPT0gbnVsbCB8fCBsYWJlbC5sZW5ndGgoKSA9PSAwID8NCisJCQlnZXRTdHJpbmcoIl9VSV9EZW5ndWVNb2RlbF90eXBlIikgOg0KKwkJCWdldFN0cmluZygiX1VJX0Rlbmd1ZU1vZGVsX3R5cGUiKSArICIgIiArIGxhYmVsOw0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIGhhbmRsZXMgbW9kZWwgbm90aWZpY2F0aW9ucyBieSBjYWxsaW5nIHtAbGluayAjdXBkYXRlQ2hpbGRyZW59IHRvIHVwZGF0ZSBhbnkgY2FjaGVkDQorCSAqIGNoaWxkcmVuIGFuZCBieSBjcmVhdGluZyBhIHZpZXdlciBub3RpZmljYXRpb24sIHdoaWNoIGl0IHBhc3NlcyB0byB7QGxpbmsgI2ZpcmVOb3RpZnlDaGFuZ2VkfS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCUBPdmVycmlkZQ0KKwlwdWJsaWMgdm9pZCBub3RpZnlDaGFuZ2VkKE5vdGlmaWNhdGlvbiBub3RpZmljYXRpb24pIHsNCisJCXVwZGF0ZUNoaWxkcmVuKG5vdGlmaWNhdGlvbik7DQorDQorCQlzd2l0Y2ggKG5vdGlmaWNhdGlvbi5nZXRGZWF0dXJlSUQoRGVuZ3VlTW9kZWwuY2xhc3MpKSB7DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9fQklUSU5HX1JBVEVfU1Y6DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9fQklUSU5HX1JBVEVfSVY6DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9fSE9TVF9JTkZFQ1RJVklUWTE6DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9fSE9TVF9JTkZFQ1RJVklUWTI6DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9fSE9TVF9JTkZFQ1RJVklUWTM6DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9fSE9TVF9JTkZFQ1RJVklUWTQ6DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9fSE9TVF9QUklNQVJZX0lOQ1VCQVRJT05fUkFURTE6DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9fSE9TVF9QUklNQVJZX0lOQ1VCQVRJT05fUkFURTI6DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9fSE9TVF9QUklNQVJZX0lOQ1VCQVRJT05fUkFURTM6DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9fSE9TVF9QUklNQVJZX0lOQ1VCQVRJT05fUkFURTQ6DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9fSE9TVF9QUklNQVJZX1JFQ09WRVJZX1JBVEUxOg0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfX0hPU1RfUFJJTUFSWV9SRUNPVkVSWV9SQVRFMjoNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX19IT1NUX1BSSU1BUllfUkVDT1ZFUllfUkFURTM6DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9fSE9TVF9QUklNQVJZX1JFQ09WRVJZX1JBVEU0Og0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfX0hPU1RfUFJJTUFSWV9JTU1VTklUWV9MT1NTX1JBVEUxOg0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfX0hPU1RfUFJJTUFSWV9JTU1VTklUWV9MT1NTX1JBVEUyOg0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfX0hPU1RfUFJJTUFSWV9JTU1VTklUWV9MT1NTX1JBVEUzOg0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfX0hPU1RfUFJJTUFSWV9JTU1VTklUWV9MT1NTX1JBVEU0Og0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfX0hPU1RfUFJJTUFSWV9ESVNFQVNFX0RFQVRIX1JBVEUxOg0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfX0hPU1RfUFJJTUFSWV9ESVNFQVNFX0RFQVRIX1JBVEUyOg0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfX0hPU1RfUFJJTUFSWV9ESVNFQVNFX0RFQVRIX1JBVEUzOg0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfX0hPU1RfUFJJTUFSWV9ESVNFQVNFX0RFQVRIX1JBVEU0Og0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfX0hPU1RfQURFMTI6DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9fSE9TVF9BREUxMzoNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX19IT1NUX0FERTE0Og0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfX0hPU1RfQURFMjE6DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9fSE9TVF9BREUyMzoNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX19IT1NUX0FERTI0Og0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfX0hPU1RfQURFMzE6DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9fSE9TVF9BREUzMjoNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX19IT1NUX0FERTM0Og0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfX0hPU1RfQURFNDE6DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9fSE9TVF9BREU0MjoNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX19IT1NUX0FERTQzOg0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfX0hPU1RfU0VDT05EQVJZX0RJU0VBU0VfREVBVEhfUkFURTEyOg0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfX0hPU1RfU0VDT05EQVJZX0RJU0VBU0VfREVBVEhfUkFURTEzOg0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfX0hPU1RfU0VDT05EQVJZX0RJU0VBU0VfREVBVEhfUkFURTE0Og0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfX0hPU1RfU0VDT05EQVJZX0RJU0VBU0VfREVBVEhfUkFURTIxOg0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfX0hPU1RfU0VDT05EQVJZX0RJU0VBU0VfREVBVEhfUkFURTIzOg0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfX0hPU1RfU0VDT05EQVJZX0RJU0VBU0VfREVBVEhfUkFURTI0Og0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfX0hPU1RfU0VDT05EQVJZX0RJU0VBU0VfREVBVEhfUkFURTMxOg0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfX0hPU1RfU0VDT05EQVJZX0RJU0VBU0VfREVBVEhfUkFURTMyOg0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfX0hPU1RfU0VDT05EQVJZX0RJU0VBU0VfREVBVEhfUkFURTM0Og0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfX0hPU1RfU0VDT05EQVJZX0RJU0VBU0VfREVBVEhfUkFURTQxOg0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfX0hPU1RfU0VDT05EQVJZX0RJU0VBU0VfREVBVEhfUkFURTQyOg0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfX0hPU1RfU0VDT05EQVJZX0RJU0VBU0VfREVBVEhfUkFURTQzOg0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfX0hPU1RfU0VDT05EQVJZX1JFQ09WRVJZX1JBVEUxMjoNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX19IT1NUX1NFQ09OREFSWV9SRUNPVkVSWV9SQVRFMTM6DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9fSE9TVF9TRUNPTkRBUllfUkVDT1ZFUllfUkFURTE0Og0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfX0hPU1RfU0VDT05EQVJZX1JFQ09WRVJZX1JBVEUyMToNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX19IT1NUX1NFQ09OREFSWV9SRUNPVkVSWV9SQVRFMjM6DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9fSE9TVF9TRUNPTkRBUllfUkVDT1ZFUllfUkFURTI0Og0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfX0hPU1RfU0VDT05EQVJZX1JFQ09WRVJZX1JBVEUzMToNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX19IT1NUX1NFQ09OREFSWV9SRUNPVkVSWV9SQVRFMzI6DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9fSE9TVF9TRUNPTkRBUllfUkVDT1ZFUllfUkFURTM0Og0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfX0hPU1RfU0VDT05EQVJZX1JFQ09WRVJZX1JBVEU0MToNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX19IT1NUX1NFQ09OREFSWV9SRUNPVkVSWV9SQVRFNDI6DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9fSE9TVF9TRUNPTkRBUllfUkVDT1ZFUllfUkFURTQzOg0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfX0hPU1RfU0VDT05EQVJZX0lOQ1VCQVRJT05fUkFURTEyOg0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfX0hPU1RfU0VDT05EQVJZX0lOQ1VCQVRJT05fUkFURTEzOg0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfX0hPU1RfU0VDT05EQVJZX0lOQ1VCQVRJT05fUkFURTE0Og0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfX0hPU1RfU0VDT05EQVJZX0lOQ1VCQVRJT05fUkFURTIxOg0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfX0hPU1RfU0VDT05EQVJZX0lOQ1VCQVRJT05fUkFURTIzOg0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfX0hPU1RfU0VDT05EQVJZX0lOQ1VCQVRJT05fUkFURTI0Og0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfX0hPU1RfU0VDT05EQVJZX0lOQ1VCQVRJT05fUkFURTMxOg0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfX0hPU1RfU0VDT05EQVJZX0lOQ1VCQVRJT05fUkFURTMyOg0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfX0hPU1RfU0VDT05EQVJZX0lOQ1VCQVRJT05fUkFURTM0Og0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfX0hPU1RfU0VDT05EQVJZX0lOQ1VCQVRJT05fUkFURTQxOg0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfX0hPU1RfU0VDT05EQVJZX0lOQ1VCQVRJT05fUkFURTQyOg0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfX0hPU1RfU0VDT05EQVJZX0lOQ1VCQVRJT05fUkFURTQzOg0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfX1ZFQ1RPUl9JTkZFQ1RJVklUWTE6DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9fVkVDVE9SX0lORkVDVElWSVRZMjoNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX19WRUNUT1JfSU5GRUNUSVZJVFkzOg0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfX1ZFQ1RPUl9JTkZFQ1RJVklUWTQ6DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9fVkVDVE9SX0FERTE6DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9fVkVDVE9SX0FERTI6DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9fVkVDVE9SX0FERTM6DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9fVkVDVE9SX0FERTQ6DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9fVkVDVE9SX0lOQ1VCQVRJT05fUkFURTE6DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9fVkVDVE9SX0lOQ1VCQVRJT05fUkFURTI6DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9fVkVDVE9SX0lOQ1VCQVRJT05fUkFURTM6DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9fVkVDVE9SX0lOQ1VCQVRJT05fUkFURTQ6DQorCQkJCWZpcmVOb3RpZnlDaGFuZ2VkKG5ldyBWaWV3ZXJOb3RpZmljYXRpb24obm90aWZpY2F0aW9uLCBub3RpZmljYXRpb24uZ2V0Tm90aWZpZXIoKSwgZmFsc2UsIHRydWUpKTsNCisJCQkJcmV0dXJuOw0KKwkJfQ0KKwkJc3VwZXIubm90aWZ5Q2hhbmdlZChub3RpZmljYXRpb24pOw0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIGFkZHMge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lZGl0LmNvbW1hbmQuQ29tbWFuZFBhcmFtZXRlcn1zIGRlc2NyaWJpbmcgdGhlIGNoaWxkcmVuDQorCSAqIHRoYXQgY2FuIGJlIGNyZWF0ZWQgdW5kZXIgdGhpcyBvYmplY3QuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlAT3ZlcnJpZGUNCisJcHJvdGVjdGVkIHZvaWQgY29sbGVjdE5ld0NoaWxkRGVzY3JpcHRvcnMoQ29sbGVjdGlvbjxPYmplY3Q+IG5ld0NoaWxkRGVzY3JpcHRvcnMsIE9iamVjdCBvYmplY3QpIHsNCisJCXN1cGVyLmNvbGxlY3ROZXdDaGlsZERlc2NyaXB0b3JzKG5ld0NoaWxkRGVzY3JpcHRvcnMsIG9iamVjdCk7DQorCX0NCisNCit9DQpkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvdmVjdG9yL3Byb3ZpZGVyL0Rlbmd1ZU1vZGVsVmVjdG9yTGFiZWxJdGVtUHJvdmlkZXIuamF2YSBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3ZlY3Rvci9wcm92aWRlci9EZW5ndWVNb2RlbFZlY3RvckxhYmVsSXRlbVByb3ZpZGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODg2YjlkNQotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3ZlY3Rvci9wcm92aWRlci9EZW5ndWVNb2RlbFZlY3RvckxhYmVsSXRlbVByb3ZpZGVyLmphdmEKQEAgLTAsMCArMSwxMzEgQEAKKy8qKg0KKyAqIDxjb3B5cmlnaHQ+DQorICogPC9jb3B5cmlnaHQ+DQorICoNCisgKiAkSWQkDQorICovDQorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLnByb3ZpZGVyOw0KKw0KKw0KK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsNCitpbXBvcnQgamF2YS51dGlsLkxpc3Q7DQorDQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LkFkYXB0ZXJGYWN0b3J5Ow0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb247DQorDQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5SZXNvdXJjZUxvY2F0b3I7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5VUkk7DQorDQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklFZGl0aW5nRG9tYWluSXRlbVByb3ZpZGVyOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbUxhYmVsUHJvdmlkZXI7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtUHJvcGVydHlEZXNjcmlwdG9yOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbVByb3BlcnR5U291cmNlOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JU3RydWN0dXJlZEl0ZW1Db250ZW50UHJvdmlkZXI7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklUcmVlSXRlbUNvbnRlbnRQcm92aWRlcjsNCisNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLnByb3ZpZGVyLlN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWxJdGVtUHJvdmlkZXI7DQorDQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWxWZWN0b3JMYWJlbDsNCisNCisvKioNCisgKiBUaGlzIGlzIHRoZSBpdGVtIHByb3ZpZGVyIGFkYXB0ZXIgZm9yIGEge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWxWZWN0b3JMYWJlbH0gb2JqZWN0Lg0KKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorICogQGdlbmVyYXRlZA0KKyAqLw0KK3B1YmxpYyBjbGFzcyBEZW5ndWVNb2RlbFZlY3RvckxhYmVsSXRlbVByb3ZpZGVyDQorCWV4dGVuZHMgU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbEl0ZW1Qcm92aWRlcg0KKwlpbXBsZW1lbnRzDQorCQlJRWRpdGluZ0RvbWFpbkl0ZW1Qcm92aWRlciwNCisJCUlTdHJ1Y3R1cmVkSXRlbUNvbnRlbnRQcm92aWRlciwNCisJCUlUcmVlSXRlbUNvbnRlbnRQcm92aWRlciwNCisJCUlJdGVtTGFiZWxQcm92aWRlciwNCisJCUlJdGVtUHJvcGVydHlTb3VyY2Ugew0KKwkvKioNCisJICogVGhpcyBjb25zdHJ1Y3RzIGFuIGluc3RhbmNlIGZyb20gYSBmYWN0b3J5IGFuZCBhIG5vdGlmaWVyLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIERlbmd1ZU1vZGVsVmVjdG9yTGFiZWxJdGVtUHJvdmlkZXIoQWRhcHRlckZhY3RvcnkgYWRhcHRlckZhY3RvcnkpIHsNCisJCXN1cGVyKGFkYXB0ZXJGYWN0b3J5KTsNCisJfQ0KKw0KKwkvKioNCisJICogVGhpcyByZXR1cm5zIHRoZSBwcm9wZXJ0eSBkZXNjcmlwdG9ycyBmb3IgdGhlIGFkYXB0ZWQgY2xhc3MuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlAT3ZlcnJpZGUNCisJcHVibGljIExpc3Q8SUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I+IGdldFByb3BlcnR5RGVzY3JpcHRvcnMoT2JqZWN0IG9iamVjdCkgew0KKwkJaWYgKGl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzID09IG51bGwpIHsNCisJCQlzdXBlci5nZXRQcm9wZXJ0eURlc2NyaXB0b3JzKG9iamVjdCk7DQorDQorCQl9DQorCQlyZXR1cm4gaXRlbVByb3BlcnR5RGVzY3JpcHRvcnM7DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgcmV0dXJucyBEZW5ndWVNb2RlbFZlY3RvckxhYmVsLmdpZi4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCUBPdmVycmlkZQ0KKwlwdWJsaWMgT2JqZWN0IGdldEltYWdlKE9iamVjdCBvYmplY3QpIHsNCisJCXJldHVybiBvdmVybGF5SW1hZ2Uob2JqZWN0LCBnZXRSZXNvdXJjZUxvY2F0b3IoKS5nZXRJbWFnZSgiZnVsbC9vYmoxNi9EZW5ndWVNb2RlbFZlY3RvckxhYmVsIikpOw0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIHJldHVybnMgdGhlIGxhYmVsIHRleHQgZm9yIHRoZSBhZGFwdGVkIGNsYXNzLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJQE92ZXJyaWRlDQorCXB1YmxpYyBTdHJpbmcgZ2V0VGV4dChPYmplY3Qgb2JqZWN0KSB7DQorCQlVUkkgbGFiZWxWYWx1ZSA9ICgoRGVuZ3VlTW9kZWxWZWN0b3JMYWJlbClvYmplY3QpLmdldFVSSSgpOw0KKwkJU3RyaW5nIGxhYmVsID0gbGFiZWxWYWx1ZSA9PSBudWxsID8gbnVsbCA6IGxhYmVsVmFsdWUudG9TdHJpbmcoKTsNCisJCXJldHVybiBsYWJlbCA9PSBudWxsIHx8IGxhYmVsLmxlbmd0aCgpID09IDAgPw0KKwkJCWdldFN0cmluZygiX1VJX0Rlbmd1ZU1vZGVsVmVjdG9yTGFiZWxfdHlwZSIpIDoNCisJCQlnZXRTdHJpbmcoIl9VSV9EZW5ndWVNb2RlbFZlY3RvckxhYmVsX3R5cGUiKSArICIgIiArIGxhYmVsOw0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIGhhbmRsZXMgbW9kZWwgbm90aWZpY2F0aW9ucyBieSBjYWxsaW5nIHtAbGluayAjdXBkYXRlQ2hpbGRyZW59IHRvIHVwZGF0ZSBhbnkgY2FjaGVkDQorCSAqIGNoaWxkcmVuIGFuZCBieSBjcmVhdGluZyBhIHZpZXdlciBub3RpZmljYXRpb24sIHdoaWNoIGl0IHBhc3NlcyB0byB7QGxpbmsgI2ZpcmVOb3RpZnlDaGFuZ2VkfS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCUBPdmVycmlkZQ0KKwlwdWJsaWMgdm9pZCBub3RpZnlDaGFuZ2VkKE5vdGlmaWNhdGlvbiBub3RpZmljYXRpb24pIHsNCisJCXVwZGF0ZUNoaWxkcmVuKG5vdGlmaWNhdGlvbik7DQorCQlzdXBlci5ub3RpZnlDaGFuZ2VkKG5vdGlmaWNhdGlvbik7DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgYWRkcyB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmVkaXQuY29tbWFuZC5Db21tYW5kUGFyYW1ldGVyfXMgZGVzY3JpYmluZyB0aGUgY2hpbGRyZW4NCisJICogdGhhdCBjYW4gYmUgY3JlYXRlZCB1bmRlciB0aGlzIG9iamVjdC4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCUBPdmVycmlkZQ0KKwlwcm90ZWN0ZWQgdm9pZCBjb2xsZWN0TmV3Q2hpbGREZXNjcmlwdG9ycyhDb2xsZWN0aW9uPE9iamVjdD4gbmV3Q2hpbGREZXNjcmlwdG9ycywgT2JqZWN0IG9iamVjdCkgew0KKwkJc3VwZXIuY29sbGVjdE5ld0NoaWxkRGVzY3JpcHRvcnMobmV3Q2hpbGREZXNjcmlwdG9ycywgb2JqZWN0KTsNCisJfQ0KKw0KKwkvKioNCisJICogUmV0dXJuIHRoZSByZXNvdXJjZSBsb2NhdG9yIGZvciB0aGlzIGl0ZW0gcHJvdmlkZXIncyByZXNvdXJjZXMuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlAT3ZlcnJpZGUNCisJcHVibGljIFJlc291cmNlTG9jYXRvciBnZXRSZXNvdXJjZUxvY2F0b3IoKSB7DQorCQlyZXR1cm4gVmVjdG9yRWRpdFBsdWdpbi5JTlNUQU5DRTsNCisJfQ0KKw0KK30NCmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3Ivc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy92ZWN0b3IvcHJvdmlkZXIvRGVuZ3VlTW9kZWxWZWN0b3JMYWJlbFZhbHVlSXRlbVByb3ZpZGVyLmphdmEgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3Ivc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy92ZWN0b3IvcHJvdmlkZXIvRGVuZ3VlTW9kZWxWZWN0b3JMYWJlbFZhbHVlSXRlbVByb3ZpZGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjUzMjE4NwotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3ZlY3Rvci9wcm92aWRlci9EZW5ndWVNb2RlbFZlY3RvckxhYmVsVmFsdWVJdGVtUHJvdmlkZXIuamF2YQpAQCAtMCwwICsxLDQyNCBAQAorLyoqDQorICogPGNvcHlyaWdodD4NCisgKiA8L2NvcHlyaWdodD4NCisgKg0KKyAqICRJZCQNCisgKi8NCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IucHJvdmlkZXI7DQorDQorDQoraW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOw0KK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsNCisNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuQWRhcHRlckZhY3Rvcnk7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbjsNCisNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlJlc291cmNlTG9jYXRvcjsNCisNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeTsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUVkaXRpbmdEb21haW5JdGVtUHJvdmlkZXI7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtTGFiZWxQcm92aWRlcjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtUHJvcGVydHlTb3VyY2U7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklTdHJ1Y3R1cmVkSXRlbUNvbnRlbnRQcm92aWRlcjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVRyZWVJdGVtQ29udGVudFByb3ZpZGVyOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JdGVtUHJvcGVydHlEZXNjcmlwdG9yOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5WaWV3ZXJOb3RpZmljYXRpb247DQorDQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5wcm92aWRlci5TdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsVmFsdWVJdGVtUHJvdmlkZXI7DQorDQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWxWZWN0b3JMYWJlbFZhbHVlOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLlZlY3RvclBhY2thZ2U7DQorDQorLyoqDQorICogVGhpcyBpcyB0aGUgaXRlbSBwcm92aWRlciBhZGFwdGVyIGZvciBhIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLkRlbmd1ZU1vZGVsVmVjdG9yTGFiZWxWYWx1ZX0gb2JqZWN0Lg0KKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorICogQGdlbmVyYXRlZA0KKyAqLw0KK3B1YmxpYyBjbGFzcyBEZW5ndWVNb2RlbFZlY3RvckxhYmVsVmFsdWVJdGVtUHJvdmlkZXINCisJZXh0ZW5kcyBTdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsVmFsdWVJdGVtUHJvdmlkZXINCisJaW1wbGVtZW50cw0KKwkJSUVkaXRpbmdEb21haW5JdGVtUHJvdmlkZXIsDQorCQlJU3RydWN0dXJlZEl0ZW1Db250ZW50UHJvdmlkZXIsDQorCQlJVHJlZUl0ZW1Db250ZW50UHJvdmlkZXIsDQorCQlJSXRlbUxhYmVsUHJvdmlkZXIsDQorCQlJSXRlbVByb3BlcnR5U291cmNlIHsNCisJLyoqDQorCSAqIFRoaXMgY29uc3RydWN0cyBhbiBpbnN0YW5jZSBmcm9tIGEgZmFjdG9yeSBhbmQgYSBub3RpZmllci4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBEZW5ndWVNb2RlbFZlY3RvckxhYmVsVmFsdWVJdGVtUHJvdmlkZXIoQWRhcHRlckZhY3RvcnkgYWRhcHRlckZhY3RvcnkpIHsNCisJCXN1cGVyKGFkYXB0ZXJGYWN0b3J5KTsNCisJfQ0KKw0KKwkvKioNCisJICogVGhpcyByZXR1cm5zIHRoZSBwcm9wZXJ0eSBkZXNjcmlwdG9ycyBmb3IgdGhlIGFkYXB0ZWQgY2xhc3MuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlAT3ZlcnJpZGUNCisJcHVibGljIExpc3Q8SUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I+IGdldFByb3BlcnR5RGVzY3JpcHRvcnMoT2JqZWN0IG9iamVjdCkgew0KKwkJaWYgKGl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzID09IG51bGwpIHsNCisJCQlzdXBlci5nZXRQcm9wZXJ0eURlc2NyaXB0b3JzKG9iamVjdCk7DQorDQorCQkJYWRkRTFQcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0KTsNCisJCQlhZGRFMlByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QpOw0KKwkJCWFkZEUzUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCk7DQorCQkJYWRkRTRQcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0KTsNCisJCQlhZGRJMVByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QpOw0KKwkJCWFkZEkyUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCk7DQorCQkJYWRkSTNQcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0KTsNCisJCQlhZGRJNFByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QpOw0KKwkJCWFkZEluY2lkZW5jZTFQcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0KTsNCisJCQlhZGRJbmNpZGVuY2UyUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCk7DQorCQkJYWRkSW5jaWRlbmNlM1Byb3BlcnR5RGVzY3JpcHRvcihvYmplY3QpOw0KKwkJCWFkZEluY2lkZW5jZTRQcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0KTsNCisJCX0NCisJCXJldHVybiBpdGVtUHJvcGVydHlEZXNjcmlwdG9yczsNCisJfQ0KKw0KKwkvKioNCisJICogVGhpcyBhZGRzIGEgcHJvcGVydHkgZGVzY3JpcHRvciBmb3IgdGhlIEUxIGZlYXR1cmUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgdm9pZCBhZGRFMVByb3BlcnR5RGVzY3JpcHRvcihPYmplY3Qgb2JqZWN0KSB7DQorCQlpdGVtUHJvcGVydHlEZXNjcmlwdG9ycy5hZGQNCisJCQkoY3JlYXRlSXRlbVByb3BlcnR5RGVzY3JpcHRvcg0KKwkJCQkoKChDb21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5KWFkYXB0ZXJGYWN0b3J5KS5nZXRSb290QWRhcHRlckZhY3RvcnkoKSwNCisJCQkJIGdldFJlc291cmNlTG9jYXRvcigpLA0KKwkJCQkgZ2V0U3RyaW5nKCJfVUlfRGVuZ3VlTW9kZWxWZWN0b3JMYWJlbFZhbHVlX0UxX2ZlYXR1cmUiKSwNCisJCQkJIGdldFN0cmluZygiX1VJX1Byb3BlcnR5RGVzY3JpcHRvcl9kZXNjcmlwdGlvbiIsICJfVUlfRGVuZ3VlTW9kZWxWZWN0b3JMYWJlbFZhbHVlX0UxX2ZlYXR1cmUiLCAiX1VJX0Rlbmd1ZU1vZGVsVmVjdG9yTGFiZWxWYWx1ZV90eXBlIiksDQorCQkJCSBWZWN0b3JQYWNrYWdlLkxpdGVyYWxzLkRFTkdVRV9NT0RFTF9WRUNUT1JfTEFCRUxfVkFMVUVfX0UxLA0KKwkJCQkgdHJ1ZSwNCisJCQkJIGZhbHNlLA0KKwkJCQkgZmFsc2UsDQorCQkJCSBJdGVtUHJvcGVydHlEZXNjcmlwdG9yLlJFQUxfVkFMVUVfSU1BR0UsDQorCQkJCSBudWxsLA0KKwkJCQkgbnVsbCkpOw0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIGFkZHMgYSBwcm9wZXJ0eSBkZXNjcmlwdG9yIGZvciB0aGUgRTIgZmVhdHVyZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCB2b2lkIGFkZEUyUHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdCBvYmplY3QpIHsNCisJCWl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzLmFkZA0KKwkJCShjcmVhdGVJdGVtUHJvcGVydHlEZXNjcmlwdG9yDQorCQkJCSgoKENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnkpYWRhcHRlckZhY3RvcnkpLmdldFJvb3RBZGFwdGVyRmFjdG9yeSgpLA0KKwkJCQkgZ2V0UmVzb3VyY2VMb2NhdG9yKCksDQorCQkJCSBnZXRTdHJpbmcoIl9VSV9EZW5ndWVNb2RlbFZlY3RvckxhYmVsVmFsdWVfRTJfZmVhdHVyZSIpLA0KKwkJCQkgZ2V0U3RyaW5nKCJfVUlfUHJvcGVydHlEZXNjcmlwdG9yX2Rlc2NyaXB0aW9uIiwgIl9VSV9EZW5ndWVNb2RlbFZlY3RvckxhYmVsVmFsdWVfRTJfZmVhdHVyZSIsICJfVUlfRGVuZ3VlTW9kZWxWZWN0b3JMYWJlbFZhbHVlX3R5cGUiKSwNCisJCQkJIFZlY3RvclBhY2thZ2UuTGl0ZXJhbHMuREVOR1VFX01PREVMX1ZFQ1RPUl9MQUJFTF9WQUxVRV9fRTIsDQorCQkJCSB0cnVlLA0KKwkJCQkgZmFsc2UsDQorCQkJCSBmYWxzZSwNCisJCQkJIEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IuUkVBTF9WQUxVRV9JTUFHRSwNCisJCQkJIG51bGwsDQorCQkJCSBudWxsKSk7DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgYWRkcyBhIHByb3BlcnR5IGRlc2NyaXB0b3IgZm9yIHRoZSBFMyBmZWF0dXJlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIHZvaWQgYWRkRTNQcm9wZXJ0eURlc2NyaXB0b3IoT2JqZWN0IG9iamVjdCkgew0KKwkJaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMuYWRkDQorCQkJKGNyZWF0ZUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3INCisJCQkJKCgoQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSlhZGFwdGVyRmFjdG9yeSkuZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCksDQorCQkJCSBnZXRSZXNvdXJjZUxvY2F0b3IoKSwNCisJCQkJIGdldFN0cmluZygiX1VJX0Rlbmd1ZU1vZGVsVmVjdG9yTGFiZWxWYWx1ZV9FM19mZWF0dXJlIiksDQorCQkJCSBnZXRTdHJpbmcoIl9VSV9Qcm9wZXJ0eURlc2NyaXB0b3JfZGVzY3JpcHRpb24iLCAiX1VJX0Rlbmd1ZU1vZGVsVmVjdG9yTGFiZWxWYWx1ZV9FM19mZWF0dXJlIiwgIl9VSV9EZW5ndWVNb2RlbFZlY3RvckxhYmVsVmFsdWVfdHlwZSIpLA0KKwkJCQkgVmVjdG9yUGFja2FnZS5MaXRlcmFscy5ERU5HVUVfTU9ERUxfVkVDVE9SX0xBQkVMX1ZBTFVFX19FMywNCisJCQkJIHRydWUsDQorCQkJCSBmYWxzZSwNCisJCQkJIGZhbHNlLA0KKwkJCQkgSXRlbVByb3BlcnR5RGVzY3JpcHRvci5SRUFMX1ZBTFVFX0lNQUdFLA0KKwkJCQkgbnVsbCwNCisJCQkJIG51bGwpKTsNCisJfQ0KKw0KKwkvKioNCisJICogVGhpcyBhZGRzIGEgcHJvcGVydHkgZGVzY3JpcHRvciBmb3IgdGhlIEU0IGZlYXR1cmUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgdm9pZCBhZGRFNFByb3BlcnR5RGVzY3JpcHRvcihPYmplY3Qgb2JqZWN0KSB7DQorCQlpdGVtUHJvcGVydHlEZXNjcmlwdG9ycy5hZGQNCisJCQkoY3JlYXRlSXRlbVByb3BlcnR5RGVzY3JpcHRvcg0KKwkJCQkoKChDb21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5KWFkYXB0ZXJGYWN0b3J5KS5nZXRSb290QWRhcHRlckZhY3RvcnkoKSwNCisJCQkJIGdldFJlc291cmNlTG9jYXRvcigpLA0KKwkJCQkgZ2V0U3RyaW5nKCJfVUlfRGVuZ3VlTW9kZWxWZWN0b3JMYWJlbFZhbHVlX0U0X2ZlYXR1cmUiKSwNCisJCQkJIGdldFN0cmluZygiX1VJX1Byb3BlcnR5RGVzY3JpcHRvcl9kZXNjcmlwdGlvbiIsICJfVUlfRGVuZ3VlTW9kZWxWZWN0b3JMYWJlbFZhbHVlX0U0X2ZlYXR1cmUiLCAiX1VJX0Rlbmd1ZU1vZGVsVmVjdG9yTGFiZWxWYWx1ZV90eXBlIiksDQorCQkJCSBWZWN0b3JQYWNrYWdlLkxpdGVyYWxzLkRFTkdVRV9NT0RFTF9WRUNUT1JfTEFCRUxfVkFMVUVfX0U0LA0KKwkJCQkgdHJ1ZSwNCisJCQkJIGZhbHNlLA0KKwkJCQkgZmFsc2UsDQorCQkJCSBJdGVtUHJvcGVydHlEZXNjcmlwdG9yLlJFQUxfVkFMVUVfSU1BR0UsDQorCQkJCSBudWxsLA0KKwkJCQkgbnVsbCkpOw0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIGFkZHMgYSBwcm9wZXJ0eSBkZXNjcmlwdG9yIGZvciB0aGUgSTEgZmVhdHVyZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCB2b2lkIGFkZEkxUHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdCBvYmplY3QpIHsNCisJCWl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzLmFkZA0KKwkJCShjcmVhdGVJdGVtUHJvcGVydHlEZXNjcmlwdG9yDQorCQkJCSgoKENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnkpYWRhcHRlckZhY3RvcnkpLmdldFJvb3RBZGFwdGVyRmFjdG9yeSgpLA0KKwkJCQkgZ2V0UmVzb3VyY2VMb2NhdG9yKCksDQorCQkJCSBnZXRTdHJpbmcoIl9VSV9EZW5ndWVNb2RlbFZlY3RvckxhYmVsVmFsdWVfSTFfZmVhdHVyZSIpLA0KKwkJCQkgZ2V0U3RyaW5nKCJfVUlfUHJvcGVydHlEZXNjcmlwdG9yX2Rlc2NyaXB0aW9uIiwgIl9VSV9EZW5ndWVNb2RlbFZlY3RvckxhYmVsVmFsdWVfSTFfZmVhdHVyZSIsICJfVUlfRGVuZ3VlTW9kZWxWZWN0b3JMYWJlbFZhbHVlX3R5cGUiKSwNCisJCQkJIFZlY3RvclBhY2thZ2UuTGl0ZXJhbHMuREVOR1VFX01PREVMX1ZFQ1RPUl9MQUJFTF9WQUxVRV9fSTEsDQorCQkJCSB0cnVlLA0KKwkJCQkgZmFsc2UsDQorCQkJCSBmYWxzZSwNCisJCQkJIEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IuUkVBTF9WQUxVRV9JTUFHRSwNCisJCQkJIG51bGwsDQorCQkJCSBudWxsKSk7DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgYWRkcyBhIHByb3BlcnR5IGRlc2NyaXB0b3IgZm9yIHRoZSBJMiBmZWF0dXJlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIHZvaWQgYWRkSTJQcm9wZXJ0eURlc2NyaXB0b3IoT2JqZWN0IG9iamVjdCkgew0KKwkJaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMuYWRkDQorCQkJKGNyZWF0ZUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3INCisJCQkJKCgoQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSlhZGFwdGVyRmFjdG9yeSkuZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCksDQorCQkJCSBnZXRSZXNvdXJjZUxvY2F0b3IoKSwNCisJCQkJIGdldFN0cmluZygiX1VJX0Rlbmd1ZU1vZGVsVmVjdG9yTGFiZWxWYWx1ZV9JMl9mZWF0dXJlIiksDQorCQkJCSBnZXRTdHJpbmcoIl9VSV9Qcm9wZXJ0eURlc2NyaXB0b3JfZGVzY3JpcHRpb24iLCAiX1VJX0Rlbmd1ZU1vZGVsVmVjdG9yTGFiZWxWYWx1ZV9JMl9mZWF0dXJlIiwgIl9VSV9EZW5ndWVNb2RlbFZlY3RvckxhYmVsVmFsdWVfdHlwZSIpLA0KKwkJCQkgVmVjdG9yUGFja2FnZS5MaXRlcmFscy5ERU5HVUVfTU9ERUxfVkVDVE9SX0xBQkVMX1ZBTFVFX19JMiwNCisJCQkJIHRydWUsDQorCQkJCSBmYWxzZSwNCisJCQkJIGZhbHNlLA0KKwkJCQkgSXRlbVByb3BlcnR5RGVzY3JpcHRvci5SRUFMX1ZBTFVFX0lNQUdFLA0KKwkJCQkgbnVsbCwNCisJCQkJIG51bGwpKTsNCisJfQ0KKw0KKwkvKioNCisJICogVGhpcyBhZGRzIGEgcHJvcGVydHkgZGVzY3JpcHRvciBmb3IgdGhlIEkzIGZlYXR1cmUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgdm9pZCBhZGRJM1Byb3BlcnR5RGVzY3JpcHRvcihPYmplY3Qgb2JqZWN0KSB7DQorCQlpdGVtUHJvcGVydHlEZXNjcmlwdG9ycy5hZGQNCisJCQkoY3JlYXRlSXRlbVByb3BlcnR5RGVzY3JpcHRvcg0KKwkJCQkoKChDb21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5KWFkYXB0ZXJGYWN0b3J5KS5nZXRSb290QWRhcHRlckZhY3RvcnkoKSwNCisJCQkJIGdldFJlc291cmNlTG9jYXRvcigpLA0KKwkJCQkgZ2V0U3RyaW5nKCJfVUlfRGVuZ3VlTW9kZWxWZWN0b3JMYWJlbFZhbHVlX0kzX2ZlYXR1cmUiKSwNCisJCQkJIGdldFN0cmluZygiX1VJX1Byb3BlcnR5RGVzY3JpcHRvcl9kZXNjcmlwdGlvbiIsICJfVUlfRGVuZ3VlTW9kZWxWZWN0b3JMYWJlbFZhbHVlX0kzX2ZlYXR1cmUiLCAiX1VJX0Rlbmd1ZU1vZGVsVmVjdG9yTGFiZWxWYWx1ZV90eXBlIiksDQorCQkJCSBWZWN0b3JQYWNrYWdlLkxpdGVyYWxzLkRFTkdVRV9NT0RFTF9WRUNUT1JfTEFCRUxfVkFMVUVfX0kzLA0KKwkJCQkgdHJ1ZSwNCisJCQkJIGZhbHNlLA0KKwkJCQkgZmFsc2UsDQorCQkJCSBJdGVtUHJvcGVydHlEZXNjcmlwdG9yLlJFQUxfVkFMVUVfSU1BR0UsDQorCQkJCSBudWxsLA0KKwkJCQkgbnVsbCkpOw0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIGFkZHMgYSBwcm9wZXJ0eSBkZXNjcmlwdG9yIGZvciB0aGUgSTQgZmVhdHVyZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCB2b2lkIGFkZEk0UHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdCBvYmplY3QpIHsNCisJCWl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzLmFkZA0KKwkJCShjcmVhdGVJdGVtUHJvcGVydHlEZXNjcmlwdG9yDQorCQkJCSgoKENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnkpYWRhcHRlckZhY3RvcnkpLmdldFJvb3RBZGFwdGVyRmFjdG9yeSgpLA0KKwkJCQkgZ2V0UmVzb3VyY2VMb2NhdG9yKCksDQorCQkJCSBnZXRTdHJpbmcoIl9VSV9EZW5ndWVNb2RlbFZlY3RvckxhYmVsVmFsdWVfSTRfZmVhdHVyZSIpLA0KKwkJCQkgZ2V0U3RyaW5nKCJfVUlfUHJvcGVydHlEZXNjcmlwdG9yX2Rlc2NyaXB0aW9uIiwgIl9VSV9EZW5ndWVNb2RlbFZlY3RvckxhYmVsVmFsdWVfSTRfZmVhdHVyZSIsICJfVUlfRGVuZ3VlTW9kZWxWZWN0b3JMYWJlbFZhbHVlX3R5cGUiKSwNCisJCQkJIFZlY3RvclBhY2thZ2UuTGl0ZXJhbHMuREVOR1VFX01PREVMX1ZFQ1RPUl9MQUJFTF9WQUxVRV9fSTQsDQorCQkJCSB0cnVlLA0KKwkJCQkgZmFsc2UsDQorCQkJCSBmYWxzZSwNCisJCQkJIEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IuUkVBTF9WQUxVRV9JTUFHRSwNCisJCQkJIG51bGwsDQorCQkJCSBudWxsKSk7DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgYWRkcyBhIHByb3BlcnR5IGRlc2NyaXB0b3IgZm9yIHRoZSBJbmNpZGVuY2UxIGZlYXR1cmUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgdm9pZCBhZGRJbmNpZGVuY2UxUHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdCBvYmplY3QpIHsNCisJCWl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzLmFkZA0KKwkJCShjcmVhdGVJdGVtUHJvcGVydHlEZXNjcmlwdG9yDQorCQkJCSgoKENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnkpYWRhcHRlckZhY3RvcnkpLmdldFJvb3RBZGFwdGVyRmFjdG9yeSgpLA0KKwkJCQkgZ2V0UmVzb3VyY2VMb2NhdG9yKCksDQorCQkJCSBnZXRTdHJpbmcoIl9VSV9EZW5ndWVNb2RlbFZlY3RvckxhYmVsVmFsdWVfaW5jaWRlbmNlMV9mZWF0dXJlIiksDQorCQkJCSBnZXRTdHJpbmcoIl9VSV9Qcm9wZXJ0eURlc2NyaXB0b3JfZGVzY3JpcHRpb24iLCAiX1VJX0Rlbmd1ZU1vZGVsVmVjdG9yTGFiZWxWYWx1ZV9pbmNpZGVuY2UxX2ZlYXR1cmUiLCAiX1VJX0Rlbmd1ZU1vZGVsVmVjdG9yTGFiZWxWYWx1ZV90eXBlIiksDQorCQkJCSBWZWN0b3JQYWNrYWdlLkxpdGVyYWxzLkRFTkdVRV9NT0RFTF9WRUNUT1JfTEFCRUxfVkFMVUVfX0lOQ0lERU5DRTEsDQorCQkJCSB0cnVlLA0KKwkJCQkgZmFsc2UsDQorCQkJCSBmYWxzZSwNCisJCQkJIEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IuUkVBTF9WQUxVRV9JTUFHRSwNCisJCQkJIG51bGwsDQorCQkJCSBudWxsKSk7DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgYWRkcyBhIHByb3BlcnR5IGRlc2NyaXB0b3IgZm9yIHRoZSBJbmNpZGVuY2UyIGZlYXR1cmUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgdm9pZCBhZGRJbmNpZGVuY2UyUHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdCBvYmplY3QpIHsNCisJCWl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzLmFkZA0KKwkJCShjcmVhdGVJdGVtUHJvcGVydHlEZXNjcmlwdG9yDQorCQkJCSgoKENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnkpYWRhcHRlckZhY3RvcnkpLmdldFJvb3RBZGFwdGVyRmFjdG9yeSgpLA0KKwkJCQkgZ2V0UmVzb3VyY2VMb2NhdG9yKCksDQorCQkJCSBnZXRTdHJpbmcoIl9VSV9EZW5ndWVNb2RlbFZlY3RvckxhYmVsVmFsdWVfaW5jaWRlbmNlMl9mZWF0dXJlIiksDQorCQkJCSBnZXRTdHJpbmcoIl9VSV9Qcm9wZXJ0eURlc2NyaXB0b3JfZGVzY3JpcHRpb24iLCAiX1VJX0Rlbmd1ZU1vZGVsVmVjdG9yTGFiZWxWYWx1ZV9pbmNpZGVuY2UyX2ZlYXR1cmUiLCAiX1VJX0Rlbmd1ZU1vZGVsVmVjdG9yTGFiZWxWYWx1ZV90eXBlIiksDQorCQkJCSBWZWN0b3JQYWNrYWdlLkxpdGVyYWxzLkRFTkdVRV9NT0RFTF9WRUNUT1JfTEFCRUxfVkFMVUVfX0lOQ0lERU5DRTIsDQorCQkJCSB0cnVlLA0KKwkJCQkgZmFsc2UsDQorCQkJCSBmYWxzZSwNCisJCQkJIEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IuUkVBTF9WQUxVRV9JTUFHRSwNCisJCQkJIG51bGwsDQorCQkJCSBudWxsKSk7DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgYWRkcyBhIHByb3BlcnR5IGRlc2NyaXB0b3IgZm9yIHRoZSBJbmNpZGVuY2UzIGZlYXR1cmUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgdm9pZCBhZGRJbmNpZGVuY2UzUHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdCBvYmplY3QpIHsNCisJCWl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzLmFkZA0KKwkJCShjcmVhdGVJdGVtUHJvcGVydHlEZXNjcmlwdG9yDQorCQkJCSgoKENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnkpYWRhcHRlckZhY3RvcnkpLmdldFJvb3RBZGFwdGVyRmFjdG9yeSgpLA0KKwkJCQkgZ2V0UmVzb3VyY2VMb2NhdG9yKCksDQorCQkJCSBnZXRTdHJpbmcoIl9VSV9EZW5ndWVNb2RlbFZlY3RvckxhYmVsVmFsdWVfaW5jaWRlbmNlM19mZWF0dXJlIiksDQorCQkJCSBnZXRTdHJpbmcoIl9VSV9Qcm9wZXJ0eURlc2NyaXB0b3JfZGVzY3JpcHRpb24iLCAiX1VJX0Rlbmd1ZU1vZGVsVmVjdG9yTGFiZWxWYWx1ZV9pbmNpZGVuY2UzX2ZlYXR1cmUiLCAiX1VJX0Rlbmd1ZU1vZGVsVmVjdG9yTGFiZWxWYWx1ZV90eXBlIiksDQorCQkJCSBWZWN0b3JQYWNrYWdlLkxpdGVyYWxzLkRFTkdVRV9NT0RFTF9WRUNUT1JfTEFCRUxfVkFMVUVfX0lOQ0lERU5DRTMsDQorCQkJCSB0cnVlLA0KKwkJCQkgZmFsc2UsDQorCQkJCSBmYWxzZSwNCisJCQkJIEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IuUkVBTF9WQUxVRV9JTUFHRSwNCisJCQkJIG51bGwsDQorCQkJCSBudWxsKSk7DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgYWRkcyBhIHByb3BlcnR5IGRlc2NyaXB0b3IgZm9yIHRoZSBJbmNpZGVuY2U0IGZlYXR1cmUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgdm9pZCBhZGRJbmNpZGVuY2U0UHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdCBvYmplY3QpIHsNCisJCWl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzLmFkZA0KKwkJCShjcmVhdGVJdGVtUHJvcGVydHlEZXNjcmlwdG9yDQorCQkJCSgoKENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnkpYWRhcHRlckZhY3RvcnkpLmdldFJvb3RBZGFwdGVyRmFjdG9yeSgpLA0KKwkJCQkgZ2V0UmVzb3VyY2VMb2NhdG9yKCksDQorCQkJCSBnZXRTdHJpbmcoIl9VSV9EZW5ndWVNb2RlbFZlY3RvckxhYmVsVmFsdWVfaW5jaWRlbmNlNF9mZWF0dXJlIiksDQorCQkJCSBnZXRTdHJpbmcoIl9VSV9Qcm9wZXJ0eURlc2NyaXB0b3JfZGVzY3JpcHRpb24iLCAiX1VJX0Rlbmd1ZU1vZGVsVmVjdG9yTGFiZWxWYWx1ZV9pbmNpZGVuY2U0X2ZlYXR1cmUiLCAiX1VJX0Rlbmd1ZU1vZGVsVmVjdG9yTGFiZWxWYWx1ZV90eXBlIiksDQorCQkJCSBWZWN0b3JQYWNrYWdlLkxpdGVyYWxzLkRFTkdVRV9NT0RFTF9WRUNUT1JfTEFCRUxfVkFMVUVfX0lOQ0lERU5DRTQsDQorCQkJCSB0cnVlLA0KKwkJCQkgZmFsc2UsDQorCQkJCSBmYWxzZSwNCisJCQkJIEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IuUkVBTF9WQUxVRV9JTUFHRSwNCisJCQkJIG51bGwsDQorCQkJCSBudWxsKSk7DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgcmV0dXJucyBEZW5ndWVNb2RlbFZlY3RvckxhYmVsVmFsdWUuZ2lmLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJQE92ZXJyaWRlDQorCXB1YmxpYyBPYmplY3QgZ2V0SW1hZ2UoT2JqZWN0IG9iamVjdCkgew0KKwkJcmV0dXJuIG92ZXJsYXlJbWFnZShvYmplY3QsIGdldFJlc291cmNlTG9jYXRvcigpLmdldEltYWdlKCJmdWxsL29iajE2L0Rlbmd1ZU1vZGVsVmVjdG9yTGFiZWxWYWx1ZSIpKTsNCisJfQ0KKw0KKwkvKioNCisJICogVGhpcyByZXR1cm5zIHRoZSBsYWJlbCB0ZXh0IGZvciB0aGUgYWRhcHRlZCBjbGFzcy4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCUBPdmVycmlkZQ0KKwlwdWJsaWMgU3RyaW5nIGdldFRleHQoT2JqZWN0IG9iamVjdCkgew0KKwkJRGVuZ3VlTW9kZWxWZWN0b3JMYWJlbFZhbHVlIGRlbmd1ZU1vZGVsVmVjdG9yTGFiZWxWYWx1ZSA9IChEZW5ndWVNb2RlbFZlY3RvckxhYmVsVmFsdWUpb2JqZWN0Ow0KKwkJcmV0dXJuIGdldFN0cmluZygiX1VJX0Rlbmd1ZU1vZGVsVmVjdG9yTGFiZWxWYWx1ZV90eXBlIikgKyAiICIgKyBkZW5ndWVNb2RlbFZlY3RvckxhYmVsVmFsdWUuZ2V0UG9wdWxhdGlvbkNvdW50KCk7DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgaGFuZGxlcyBtb2RlbCBub3RpZmljYXRpb25zIGJ5IGNhbGxpbmcge0BsaW5rICN1cGRhdGVDaGlsZHJlbn0gdG8gdXBkYXRlIGFueSBjYWNoZWQNCisJICogY2hpbGRyZW4gYW5kIGJ5IGNyZWF0aW5nIGEgdmlld2VyIG5vdGlmaWNhdGlvbiwgd2hpY2ggaXQgcGFzc2VzIHRvIHtAbGluayAjZmlyZU5vdGlmeUNoYW5nZWR9Lg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJQE92ZXJyaWRlDQorCXB1YmxpYyB2b2lkIG5vdGlmeUNoYW5nZWQoTm90aWZpY2F0aW9uIG5vdGlmaWNhdGlvbikgew0KKwkJdXBkYXRlQ2hpbGRyZW4obm90aWZpY2F0aW9uKTsNCisNCisJCXN3aXRjaCAobm90aWZpY2F0aW9uLmdldEZlYXR1cmVJRChEZW5ndWVNb2RlbFZlY3RvckxhYmVsVmFsdWUuY2xhc3MpKSB7DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9WRUNUT1JfTEFCRUxfVkFMVUVfX0UxOg0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfVkVDVE9SX0xBQkVMX1ZBTFVFX19FMjoNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX1ZFQ1RPUl9MQUJFTF9WQUxVRV9fRTM6DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9WRUNUT1JfTEFCRUxfVkFMVUVfX0U0Og0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfVkVDVE9SX0xBQkVMX1ZBTFVFX19JMToNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX1ZFQ1RPUl9MQUJFTF9WQUxVRV9fSTI6DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9WRUNUT1JfTEFCRUxfVkFMVUVfX0kzOg0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfVkVDVE9SX0xBQkVMX1ZBTFVFX19JNDoNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX1ZFQ1RPUl9MQUJFTF9WQUxVRV9fSU5DSURFTkNFMToNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX1ZFQ1RPUl9MQUJFTF9WQUxVRV9fSU5DSURFTkNFMjoNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX1ZFQ1RPUl9MQUJFTF9WQUxVRV9fSU5DSURFTkNFMzoNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX1ZFQ1RPUl9MQUJFTF9WQUxVRV9fSU5DSURFTkNFNDoNCisJCQkJZmlyZU5vdGlmeUNoYW5nZWQobmV3IFZpZXdlck5vdGlmaWNhdGlvbihub3RpZmljYXRpb24sIG5vdGlmaWNhdGlvbi5nZXROb3RpZmllcigpLCBmYWxzZSwgdHJ1ZSkpOw0KKwkJCQlyZXR1cm47DQorCQl9DQorCQlzdXBlci5ub3RpZnlDaGFuZ2VkKG5vdGlmaWNhdGlvbik7DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgYWRkcyB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmVkaXQuY29tbWFuZC5Db21tYW5kUGFyYW1ldGVyfXMgZGVzY3JpYmluZyB0aGUgY2hpbGRyZW4NCisJICogdGhhdCBjYW4gYmUgY3JlYXRlZCB1bmRlciB0aGlzIG9iamVjdC4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCUBPdmVycmlkZQ0KKwlwcm90ZWN0ZWQgdm9pZCBjb2xsZWN0TmV3Q2hpbGREZXNjcmlwdG9ycyhDb2xsZWN0aW9uPE9iamVjdD4gbmV3Q2hpbGREZXNjcmlwdG9ycywgT2JqZWN0IG9iamVjdCkgew0KKwkJc3VwZXIuY29sbGVjdE5ld0NoaWxkRGVzY3JpcHRvcnMobmV3Q2hpbGREZXNjcmlwdG9ycywgb2JqZWN0KTsNCisJfQ0KKw0KKwkvKioNCisJICogUmV0dXJuIHRoZSByZXNvdXJjZSBsb2NhdG9yIGZvciB0aGlzIGl0ZW0gcHJvdmlkZXIncyByZXNvdXJjZXMuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlAT3ZlcnJpZGUNCisJcHVibGljIFJlc291cmNlTG9jYXRvciBnZXRSZXNvdXJjZUxvY2F0b3IoKSB7DQorCQlyZXR1cm4gVmVjdG9yRWRpdFBsdWdpbi5JTlNUQU5DRTsNCisJfQ0KKw0KK30NCmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3Ivc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy92ZWN0b3IvcHJvdmlkZXIvTWFjZG9uYWxkUm9zc0Rpc2Vhc2VNb2RlbEl0ZW1Qcm92aWRlci5qYXZhIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvdmVjdG9yL3Byb3ZpZGVyL01hY2RvbmFsZFJvc3NEaXNlYXNlTW9kZWxJdGVtUHJvdmlkZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lODIwNTU3Ci0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvdmVjdG9yL3Byb3ZpZGVyL01hY2RvbmFsZFJvc3NEaXNlYXNlTW9kZWxJdGVtUHJvdmlkZXIuamF2YQpAQCAtMCwwICsxLDI5MSBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLnByb3ZpZGVyOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAKKyAqIENvcHlyaWdodCAoYykgMjAxMSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4gCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIAorICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wIAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQgCisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbCAKKyAqIAorICogQ29udHJpYnV0b3JzOiAKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCitpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5BZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JRWRpdGluZ0RvbWFpbkl0ZW1Qcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbUxhYmVsUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1Qcm9wZXJ0eVNvdXJjZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JU3RydWN0dXJlZEl0ZW1Db250ZW50UHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVRyZWVJdGVtQ29udGVudFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuVmlld2VyTm90aWZpY2F0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuTWFjZG9uYWxkUm9zc0Rpc2Vhc2VNb2RlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLlZlY3RvclBhY2thZ2U7CisKKy8qKgorICogVGhpcyBpcyB0aGUgaXRlbSBwcm92aWRlciBhZGFwdGVyIGZvciBhIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLk1hY2RvbmFsZFJvc3NEaXNlYXNlTW9kZWx9IG9iamVjdC4KKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIE1hY2RvbmFsZFJvc3NEaXNlYXNlTW9kZWxJdGVtUHJvdmlkZXIKKwlleHRlbmRzIFZlY3RvckRpc2Vhc2VNb2RlbEl0ZW1Qcm92aWRlcgorCWltcGxlbWVudHMKKwkJSUVkaXRpbmdEb21haW5JdGVtUHJvdmlkZXIsCisJCUlTdHJ1Y3R1cmVkSXRlbUNvbnRlbnRQcm92aWRlciwKKwkJSVRyZWVJdGVtQ29udGVudFByb3ZpZGVyLAorCQlJSXRlbUxhYmVsUHJvdmlkZXIsCisJCUlJdGVtUHJvcGVydHlTb3VyY2UgeworCS8qKgorCSAqIFRoaXMgY29uc3RydWN0cyBhbiBpbnN0YW5jZSBmcm9tIGEgZmFjdG9yeSBhbmQgYSBub3RpZmllci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgTWFjZG9uYWxkUm9zc0Rpc2Vhc2VNb2RlbEl0ZW1Qcm92aWRlcihBZGFwdGVyRmFjdG9yeSBhZGFwdGVyRmFjdG9yeSkgeworCQlzdXBlcihhZGFwdGVyRmFjdG9yeSk7CisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIHRoZSBwcm9wZXJ0eSBkZXNjcmlwdG9ycyBmb3IgdGhlIGFkYXB0ZWQgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIExpc3Q8SUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I+IGdldFByb3BlcnR5RGVzY3JpcHRvcnMoT2JqZWN0IG9iamVjdCkgeworCQlpZiAoaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMgPT0gbnVsbCkgeworCQkJc3VwZXIuZ2V0UHJvcGVydHlEZXNjcmlwdG9ycyhvYmplY3QpOworCisJCQlhZGRCaXRpbmdSYXRlUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCk7CisJCQlhZGRJbmZlY3Rpb3VzQml0aW5nUHJvcG9ydGlvbkh1bWFuUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCk7CisJCQlhZGRJbmZlY3Rpb3VzQml0aW5nUHJvcG9ydGlvblZlY3RvclByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QpOworCQkJYWRkUmVjb3ZlcnlSYXRlUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCk7CisJCQlhZGRJbmN1YmF0aW9uUmF0ZVByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QpOworCQkJYWRkVmVjdG9ySW5jdWJhdGlvblJhdGVQcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0KTsKKwkJCWFkZEltbXVuaXR5TG9zc1JhdGVQcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0KTsKKwkJfQorCQlyZXR1cm4gaXRlbVByb3BlcnR5RGVzY3JpcHRvcnM7CisJfQorCisJLyoqCisJICogVGhpcyBhZGRzIGEgcHJvcGVydHkgZGVzY3JpcHRvciBmb3IgdGhlIEJpdGluZyBSYXRlIGZlYXR1cmUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgYWRkQml0aW5nUmF0ZVByb3BlcnR5RGVzY3JpcHRvcihPYmplY3Qgb2JqZWN0KSB7CisJCWl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzLmFkZAorCQkJKGNyZWF0ZUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IKKwkJCQkoKChDb21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5KWFkYXB0ZXJGYWN0b3J5KS5nZXRSb290QWRhcHRlckZhY3RvcnkoKSwKKwkJCQkgZ2V0UmVzb3VyY2VMb2NhdG9yKCksCisJCQkJIGdldFN0cmluZygiX1VJX01hY2RvbmFsZFJvc3NEaXNlYXNlTW9kZWxfYml0aW5nUmF0ZV9mZWF0dXJlIiksCisJCQkJIGdldFN0cmluZygiX1VJX1Byb3BlcnR5RGVzY3JpcHRvcl9kZXNjcmlwdGlvbiIsICJfVUlfTWFjZG9uYWxkUm9zc0Rpc2Vhc2VNb2RlbF9iaXRpbmdSYXRlX2ZlYXR1cmUiLCAiX1VJX01hY2RvbmFsZFJvc3NEaXNlYXNlTW9kZWxfdHlwZSIpLAorCQkJCSBWZWN0b3JQYWNrYWdlLkxpdGVyYWxzLk1BQ0RPTkFMRF9ST1NTX0RJU0VBU0VfTU9ERUxfX0JJVElOR19SQVRFLAorCQkJCSB0cnVlLAorCQkJCSBmYWxzZSwKKwkJCQkgZmFsc2UsCisJCQkJIEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IuUkVBTF9WQUxVRV9JTUFHRSwKKwkJCQkgbnVsbCwKKwkJCQkgbnVsbCkpOworCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyBhIHByb3BlcnR5IGRlc2NyaXB0b3IgZm9yIHRoZSBJbmZlY3Rpb3VzIEJpdGluZyBQcm9wb3J0aW9uIEh1bWFuIGZlYXR1cmUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgYWRkSW5mZWN0aW91c0JpdGluZ1Byb3BvcnRpb25IdW1hblByb3BlcnR5RGVzY3JpcHRvcihPYmplY3Qgb2JqZWN0KSB7CisJCWl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzLmFkZAorCQkJKGNyZWF0ZUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IKKwkJCQkoKChDb21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5KWFkYXB0ZXJGYWN0b3J5KS5nZXRSb290QWRhcHRlckZhY3RvcnkoKSwKKwkJCQkgZ2V0UmVzb3VyY2VMb2NhdG9yKCksCisJCQkJIGdldFN0cmluZygiX1VJX01hY2RvbmFsZFJvc3NEaXNlYXNlTW9kZWxfaW5mZWN0aW91c0JpdGluZ1Byb3BvcnRpb25IdW1hbl9mZWF0dXJlIiksCisJCQkJIGdldFN0cmluZygiX1VJX1Byb3BlcnR5RGVzY3JpcHRvcl9kZXNjcmlwdGlvbiIsICJfVUlfTWFjZG9uYWxkUm9zc0Rpc2Vhc2VNb2RlbF9pbmZlY3Rpb3VzQml0aW5nUHJvcG9ydGlvbkh1bWFuX2ZlYXR1cmUiLCAiX1VJX01hY2RvbmFsZFJvc3NEaXNlYXNlTW9kZWxfdHlwZSIpLAorCQkJCSBWZWN0b3JQYWNrYWdlLkxpdGVyYWxzLk1BQ0RPTkFMRF9ST1NTX0RJU0VBU0VfTU9ERUxfX0lORkVDVElPVVNfQklUSU5HX1BST1BPUlRJT05fSFVNQU4sCisJCQkJIHRydWUsCisJCQkJIGZhbHNlLAorCQkJCSBmYWxzZSwKKwkJCQkgSXRlbVByb3BlcnR5RGVzY3JpcHRvci5SRUFMX1ZBTFVFX0lNQUdFLAorCQkJCSBudWxsLAorCQkJCSBudWxsKSk7CisJfQorCisJLyoqCisJICogVGhpcyBhZGRzIGEgcHJvcGVydHkgZGVzY3JpcHRvciBmb3IgdGhlIEluZmVjdGlvdXMgQml0aW5nIFByb3BvcnRpb24gVmVjdG9yIGZlYXR1cmUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgYWRkSW5mZWN0aW91c0JpdGluZ1Byb3BvcnRpb25WZWN0b3JQcm9wZXJ0eURlc2NyaXB0b3IoT2JqZWN0IG9iamVjdCkgeworCQlpdGVtUHJvcGVydHlEZXNjcmlwdG9ycy5hZGQKKwkJCShjcmVhdGVJdGVtUHJvcGVydHlEZXNjcmlwdG9yCisJCQkJKCgoQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSlhZGFwdGVyRmFjdG9yeSkuZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCksCisJCQkJIGdldFJlc291cmNlTG9jYXRvcigpLAorCQkJCSBnZXRTdHJpbmcoIl9VSV9NYWNkb25hbGRSb3NzRGlzZWFzZU1vZGVsX2luZmVjdGlvdXNCaXRpbmdQcm9wb3J0aW9uVmVjdG9yX2ZlYXR1cmUiKSwKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfUHJvcGVydHlEZXNjcmlwdG9yX2Rlc2NyaXB0aW9uIiwgIl9VSV9NYWNkb25hbGRSb3NzRGlzZWFzZU1vZGVsX2luZmVjdGlvdXNCaXRpbmdQcm9wb3J0aW9uVmVjdG9yX2ZlYXR1cmUiLCAiX1VJX01hY2RvbmFsZFJvc3NEaXNlYXNlTW9kZWxfdHlwZSIpLAorCQkJCSBWZWN0b3JQYWNrYWdlLkxpdGVyYWxzLk1BQ0RPTkFMRF9ST1NTX0RJU0VBU0VfTU9ERUxfX0lORkVDVElPVVNfQklUSU5HX1BST1BPUlRJT05fVkVDVE9SLAorCQkJCSB0cnVlLAorCQkJCSBmYWxzZSwKKwkJCQkgZmFsc2UsCisJCQkJIEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IuUkVBTF9WQUxVRV9JTUFHRSwKKwkJCQkgbnVsbCwKKwkJCQkgbnVsbCkpOworCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyBhIHByb3BlcnR5IGRlc2NyaXB0b3IgZm9yIHRoZSBSZWNvdmVyeSBSYXRlIGZlYXR1cmUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgYWRkUmVjb3ZlcnlSYXRlUHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdCBvYmplY3QpIHsKKwkJaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMuYWRkCisJCQkoY3JlYXRlSXRlbVByb3BlcnR5RGVzY3JpcHRvcgorCQkJCSgoKENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnkpYWRhcHRlckZhY3RvcnkpLmdldFJvb3RBZGFwdGVyRmFjdG9yeSgpLAorCQkJCSBnZXRSZXNvdXJjZUxvY2F0b3IoKSwKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfTWFjZG9uYWxkUm9zc0Rpc2Vhc2VNb2RlbF9yZWNvdmVyeVJhdGVfZmVhdHVyZSIpLAorCQkJCSBnZXRTdHJpbmcoIl9VSV9Qcm9wZXJ0eURlc2NyaXB0b3JfZGVzY3JpcHRpb24iLCAiX1VJX01hY2RvbmFsZFJvc3NEaXNlYXNlTW9kZWxfcmVjb3ZlcnlSYXRlX2ZlYXR1cmUiLCAiX1VJX01hY2RvbmFsZFJvc3NEaXNlYXNlTW9kZWxfdHlwZSIpLAorCQkJCSBWZWN0b3JQYWNrYWdlLkxpdGVyYWxzLk1BQ0RPTkFMRF9ST1NTX0RJU0VBU0VfTU9ERUxfX1JFQ09WRVJZX1JBVEUsCisJCQkJIHRydWUsCisJCQkJIGZhbHNlLAorCQkJCSBmYWxzZSwKKwkJCQkgSXRlbVByb3BlcnR5RGVzY3JpcHRvci5SRUFMX1ZBTFVFX0lNQUdFLAorCQkJCSBudWxsLAorCQkJCSBudWxsKSk7CisJfQorCisJLyoqCisJICogVGhpcyBhZGRzIGEgcHJvcGVydHkgZGVzY3JpcHRvciBmb3IgdGhlIEluY3ViYXRpb24gUmF0ZSBmZWF0dXJlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIGFkZEluY3ViYXRpb25SYXRlUHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdCBvYmplY3QpIHsKKwkJaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMuYWRkCisJCQkoY3JlYXRlSXRlbVByb3BlcnR5RGVzY3JpcHRvcgorCQkJCSgoKENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnkpYWRhcHRlckZhY3RvcnkpLmdldFJvb3RBZGFwdGVyRmFjdG9yeSgpLAorCQkJCSBnZXRSZXNvdXJjZUxvY2F0b3IoKSwKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfTWFjZG9uYWxkUm9zc0Rpc2Vhc2VNb2RlbF9pbmN1YmF0aW9uUmF0ZV9mZWF0dXJlIiksCisJCQkJIGdldFN0cmluZygiX1VJX1Byb3BlcnR5RGVzY3JpcHRvcl9kZXNjcmlwdGlvbiIsICJfVUlfTWFjZG9uYWxkUm9zc0Rpc2Vhc2VNb2RlbF9pbmN1YmF0aW9uUmF0ZV9mZWF0dXJlIiwgIl9VSV9NYWNkb25hbGRSb3NzRGlzZWFzZU1vZGVsX3R5cGUiKSwKKwkJCQkgVmVjdG9yUGFja2FnZS5MaXRlcmFscy5NQUNET05BTERfUk9TU19ESVNFQVNFX01PREVMX19JTkNVQkFUSU9OX1JBVEUsCisJCQkJIHRydWUsCisJCQkJIGZhbHNlLAorCQkJCSBmYWxzZSwKKwkJCQkgSXRlbVByb3BlcnR5RGVzY3JpcHRvci5SRUFMX1ZBTFVFX0lNQUdFLAorCQkJCSBudWxsLAorCQkJCSBudWxsKSk7CisJfQorCisJLyoqCisJICogVGhpcyBhZGRzIGEgcHJvcGVydHkgZGVzY3JpcHRvciBmb3IgdGhlIFZlY3RvciBJbmN1YmF0aW9uIFJhdGUgZmVhdHVyZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBhZGRWZWN0b3JJbmN1YmF0aW9uUmF0ZVByb3BlcnR5RGVzY3JpcHRvcihPYmplY3Qgb2JqZWN0KSB7CisJCWl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzLmFkZAorCQkJKGNyZWF0ZUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IKKwkJCQkoKChDb21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5KWFkYXB0ZXJGYWN0b3J5KS5nZXRSb290QWRhcHRlckZhY3RvcnkoKSwKKwkJCQkgZ2V0UmVzb3VyY2VMb2NhdG9yKCksCisJCQkJIGdldFN0cmluZygiX1VJX01hY2RvbmFsZFJvc3NEaXNlYXNlTW9kZWxfdmVjdG9ySW5jdWJhdGlvblJhdGVfZmVhdHVyZSIpLAorCQkJCSBnZXRTdHJpbmcoIl9VSV9Qcm9wZXJ0eURlc2NyaXB0b3JfZGVzY3JpcHRpb24iLCAiX1VJX01hY2RvbmFsZFJvc3NEaXNlYXNlTW9kZWxfdmVjdG9ySW5jdWJhdGlvblJhdGVfZmVhdHVyZSIsICJfVUlfTWFjZG9uYWxkUm9zc0Rpc2Vhc2VNb2RlbF90eXBlIiksCisJCQkJIFZlY3RvclBhY2thZ2UuTGl0ZXJhbHMuTUFDRE9OQUxEX1JPU1NfRElTRUFTRV9NT0RFTF9fVkVDVE9SX0lOQ1VCQVRJT05fUkFURSwKKwkJCQkgdHJ1ZSwKKwkJCQkgZmFsc2UsCisJCQkJIGZhbHNlLAorCQkJCSBJdGVtUHJvcGVydHlEZXNjcmlwdG9yLlJFQUxfVkFMVUVfSU1BR0UsCisJCQkJIG51bGwsCisJCQkJIG51bGwpKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFkZHMgYSBwcm9wZXJ0eSBkZXNjcmlwdG9yIGZvciB0aGUgSW1tdW5pdHkgTG9zcyBSYXRlIGZlYXR1cmUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgYWRkSW1tdW5pdHlMb3NzUmF0ZVByb3BlcnR5RGVzY3JpcHRvcihPYmplY3Qgb2JqZWN0KSB7CisJCWl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzLmFkZAorCQkJKGNyZWF0ZUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IKKwkJCQkoKChDb21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5KWFkYXB0ZXJGYWN0b3J5KS5nZXRSb290QWRhcHRlckZhY3RvcnkoKSwKKwkJCQkgZ2V0UmVzb3VyY2VMb2NhdG9yKCksCisJCQkJIGdldFN0cmluZygiX1VJX01hY2RvbmFsZFJvc3NEaXNlYXNlTW9kZWxfaW1tdW5pdHlMb3NzUmF0ZV9mZWF0dXJlIiksCisJCQkJIGdldFN0cmluZygiX1VJX1Byb3BlcnR5RGVzY3JpcHRvcl9kZXNjcmlwdGlvbiIsICJfVUlfTWFjZG9uYWxkUm9zc0Rpc2Vhc2VNb2RlbF9pbW11bml0eUxvc3NSYXRlX2ZlYXR1cmUiLCAiX1VJX01hY2RvbmFsZFJvc3NEaXNlYXNlTW9kZWxfdHlwZSIpLAorCQkJCSBWZWN0b3JQYWNrYWdlLkxpdGVyYWxzLk1BQ0RPTkFMRF9ST1NTX0RJU0VBU0VfTU9ERUxfX0lNTVVOSVRZX0xPU1NfUkFURSwKKwkJCQkgdHJ1ZSwKKwkJCQkgZmFsc2UsCisJCQkJIGZhbHNlLAorCQkJCSBJdGVtUHJvcGVydHlEZXNjcmlwdG9yLlJFQUxfVkFMVUVfSU1BR0UsCisJCQkJIG51bGwsCisJCQkJIG51bGwpKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgTWFjZG9uYWxkUm9zc0Rpc2Vhc2VNb2RlbC5naWYuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBPYmplY3QgZ2V0SW1hZ2UoT2JqZWN0IG9iamVjdCkgeworCQlyZXR1cm4gb3ZlcmxheUltYWdlKG9iamVjdCwgZ2V0UmVzb3VyY2VMb2NhdG9yKCkuZ2V0SW1hZ2UoImZ1bGwvY3VzdG9tMTYvTWFjZG9uYWxkUm9zc0Rpc2Vhc2VNb2RlbCIpKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgdGhlIGxhYmVsIHRleHQgZm9yIHRoZSBhZGFwdGVkIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgU3RyaW5nIGdldFRleHQoT2JqZWN0IG9iamVjdCkgeworCQlyZXR1cm4gc3VwZXIuZ2V0VGV4dChvYmplY3QpOworCX0KKworCS8qKgorCSAqIFRoaXMgaGFuZGxlcyBtb2RlbCBub3RpZmljYXRpb25zIGJ5IGNhbGxpbmcge0BsaW5rICN1cGRhdGVDaGlsZHJlbn0gdG8gdXBkYXRlIGFueSBjYWNoZWQKKwkgKiBjaGlsZHJlbiBhbmQgYnkgY3JlYXRpbmcgYSB2aWV3ZXIgbm90aWZpY2F0aW9uLCB3aGljaCBpdCBwYXNzZXMgdG8ge0BsaW5rICNmaXJlTm90aWZ5Q2hhbmdlZH0uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgbm90aWZ5Q2hhbmdlZChOb3RpZmljYXRpb24gbm90aWZpY2F0aW9uKSB7CisJCXVwZGF0ZUNoaWxkcmVuKG5vdGlmaWNhdGlvbik7CisKKwkJc3dpdGNoIChub3RpZmljYXRpb24uZ2V0RmVhdHVyZUlEKE1hY2RvbmFsZFJvc3NEaXNlYXNlTW9kZWwuY2xhc3MpKSB7CisJCQljYXNlIFZlY3RvclBhY2thZ2UuTUFDRE9OQUxEX1JPU1NfRElTRUFTRV9NT0RFTF9fQklUSU5HX1JBVEU6CisJCQljYXNlIFZlY3RvclBhY2thZ2UuTUFDRE9OQUxEX1JPU1NfRElTRUFTRV9NT0RFTF9fSU5GRUNUSU9VU19CSVRJTkdfUFJPUE9SVElPTl9IVU1BTjoKKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5NQUNET05BTERfUk9TU19ESVNFQVNFX01PREVMX19JTkZFQ1RJT1VTX0JJVElOR19QUk9QT1JUSU9OX1ZFQ1RPUjoKKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5NQUNET05BTERfUk9TU19ESVNFQVNFX01PREVMX19SRUNPVkVSWV9SQVRFOgorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLk1BQ0RPTkFMRF9ST1NTX0RJU0VBU0VfTU9ERUxfX0lOQ1VCQVRJT05fUkFURToKKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5NQUNET05BTERfUk9TU19ESVNFQVNFX01PREVMX19WRUNUT1JfSU5DVUJBVElPTl9SQVRFOgorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLk1BQ0RPTkFMRF9ST1NTX0RJU0VBU0VfTU9ERUxfX0lNTVVOSVRZX0xPU1NfUkFURToKKwkJCQlmaXJlTm90aWZ5Q2hhbmdlZChuZXcgVmlld2VyTm90aWZpY2F0aW9uKG5vdGlmaWNhdGlvbiwgbm90aWZpY2F0aW9uLmdldE5vdGlmaWVyKCksIGZhbHNlLCB0cnVlKSk7CisJCQkJcmV0dXJuOworCQl9CisJCXN1cGVyLm5vdGlmeUNoYW5nZWQobm90aWZpY2F0aW9uKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFkZHMge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lZGl0LmNvbW1hbmQuQ29tbWFuZFBhcmFtZXRlcn1zIGRlc2NyaWJpbmcgdGhlIGNoaWxkcmVuCisJICogdGhhdCBjYW4gYmUgY3JlYXRlZCB1bmRlciB0aGlzIG9iamVjdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgdm9pZCBjb2xsZWN0TmV3Q2hpbGREZXNjcmlwdG9ycyhDb2xsZWN0aW9uPE9iamVjdD4gbmV3Q2hpbGREZXNjcmlwdG9ycywgT2JqZWN0IG9iamVjdCkgeworCQlzdXBlci5jb2xsZWN0TmV3Q2hpbGREZXNjcmlwdG9ycyhuZXdDaGlsZERlc2NyaXB0b3JzLCBvYmplY3QpOworCX0KKworfQpkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvdmVjdG9yL3Byb3ZpZGVyL1NpbXBsZURlbmd1ZU1vZGVsSXRlbVByb3ZpZGVyLmphdmEgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3Ivc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy92ZWN0b3IvcHJvdmlkZXIvU2ltcGxlRGVuZ3VlTW9kZWxJdGVtUHJvdmlkZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40Y2YwNjQ2Ci0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvdmVjdG9yL3Byb3ZpZGVyL1NpbXBsZURlbmd1ZU1vZGVsSXRlbVByb3ZpZGVyLmphdmEKQEAgLTAsMCArMSw3MjMgQEAKKy8qKg0KKyAqIDxjb3B5cmlnaHQ+DQorICogPC9jb3B5cmlnaHQ+DQorICoNCisgKiAkSWQkDQorICovDQorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLnByb3ZpZGVyOw0KKw0KKw0KK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsNCitpbXBvcnQgamF2YS51dGlsLkxpc3Q7DQorDQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LkFkYXB0ZXJGYWN0b3J5Ow0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb247DQorDQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkNvbXBvc2VhYmxlQWRhcHRlckZhY3Rvcnk7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklFZGl0aW5nRG9tYWluSXRlbVByb3ZpZGVyOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbUxhYmVsUHJvdmlkZXI7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtUHJvcGVydHlEZXNjcmlwdG9yOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbVByb3BlcnR5U291cmNlOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JU3RydWN0dXJlZEl0ZW1Db250ZW50UHJvdmlkZXI7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklUcmVlSXRlbUNvbnRlbnRQcm92aWRlcjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSXRlbVByb3BlcnR5RGVzY3JpcHRvcjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuVmlld2VyTm90aWZpY2F0aW9uOw0KKw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLlNpbXBsZURlbmd1ZU1vZGVsOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLlZlY3RvclBhY2thZ2U7DQorDQorLyoqDQorICogVGhpcyBpcyB0aGUgaXRlbSBwcm92aWRlciBhZGFwdGVyIGZvciBhIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLlNpbXBsZURlbmd1ZU1vZGVsfSBvYmplY3QuDQorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisgKiBAZ2VuZXJhdGVkDQorICovDQorcHVibGljIGNsYXNzIFNpbXBsZURlbmd1ZU1vZGVsSXRlbVByb3ZpZGVyDQorCWV4dGVuZHMgVmVjdG9yRGlzZWFzZU1vZGVsSXRlbVByb3ZpZGVyDQorCWltcGxlbWVudHMNCisJCUlFZGl0aW5nRG9tYWluSXRlbVByb3ZpZGVyLA0KKwkJSVN0cnVjdHVyZWRJdGVtQ29udGVudFByb3ZpZGVyLA0KKwkJSVRyZWVJdGVtQ29udGVudFByb3ZpZGVyLA0KKwkJSUl0ZW1MYWJlbFByb3ZpZGVyLA0KKwkJSUl0ZW1Qcm9wZXJ0eVNvdXJjZSB7DQorCS8qKg0KKwkgKiBUaGlzIGNvbnN0cnVjdHMgYW4gaW5zdGFuY2UgZnJvbSBhIGZhY3RvcnkgYW5kIGEgbm90aWZpZXIuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgU2ltcGxlRGVuZ3VlTW9kZWxJdGVtUHJvdmlkZXIoQWRhcHRlckZhY3RvcnkgYWRhcHRlckZhY3RvcnkpIHsNCisJCXN1cGVyKGFkYXB0ZXJGYWN0b3J5KTsNCisJfQ0KKw0KKwkvKioNCisJICogVGhpcyByZXR1cm5zIHRoZSBwcm9wZXJ0eSBkZXNjcmlwdG9ycyBmb3IgdGhlIGFkYXB0ZWQgY2xhc3MuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlAT3ZlcnJpZGUNCisJcHVibGljIExpc3Q8SUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I+IGdldFByb3BlcnR5RGVzY3JpcHRvcnMoT2JqZWN0IG9iamVjdCkgew0KKwkJaWYgKGl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzID09IG51bGwpIHsNCisJCQlzdXBlci5nZXRQcm9wZXJ0eURlc2NyaXB0b3JzKG9iamVjdCk7DQorDQorCQkJYWRkQml0aW5nUmF0ZVByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QpOw0KKwkJCWFkZEhvc3RJbmZlY3Rpdml0eTFQcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0KTsNCisJCQlhZGRIb3N0SW5mZWN0aXZpdHkyUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCk7DQorCQkJYWRkSG9zdEluZmVjdGl2aXR5M1Byb3BlcnR5RGVzY3JpcHRvcihvYmplY3QpOw0KKwkJCWFkZEhvc3RJbmZlY3Rpdml0eTRQcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0KTsNCisJCQlhZGRIb3N0UHJpbWFyeUluY3ViYXRpb25SYXRlUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCk7DQorCQkJYWRkSG9zdFByaW1hcnlSZWNvdmVyeVJhdGVQcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0KTsNCisJCQlhZGRIb3N0UHJpbWFyeUltbXVuaXR5TG9zc1JhdGVQcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0KTsNCisJCQlhZGRIb3N0UHJpbWFyeURlYXRoUmF0ZVByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QpOw0KKwkJCWFkZEhvc3RBREUxUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCk7DQorCQkJYWRkSG9zdEFERTJQcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0KTsNCisJCQlhZGRIb3N0QURFM1Byb3BlcnR5RGVzY3JpcHRvcihvYmplY3QpOw0KKwkJCWFkZEhvc3RBREU0UHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCk7DQorCQkJYWRkSG9zdFNlY29uZGFyeUluY3ViYXRpb25SYXRlUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCk7DQorCQkJYWRkSG9zdFNlY29uZGFyeVJlY292ZXJ5UmF0ZVByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QpOw0KKwkJCWFkZEhvc3RTZWNvbmRhcnlEZWF0aFJhdGVQcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0KTsNCisJCQlhZGRWZWN0b3JJbmZlY3Rpdml0eTFQcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0KTsNCisJCQlhZGRWZWN0b3JJbmZlY3Rpdml0eTJQcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0KTsNCisJCQlhZGRWZWN0b3JJbmZlY3Rpdml0eTNQcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0KTsNCisJCQlhZGRWZWN0b3JJbmZlY3Rpdml0eTRQcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0KTsNCisJCQlhZGRWZWN0b3JBREUxUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCk7DQorCQkJYWRkVmVjdG9yQURFMlByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QpOw0KKwkJCWFkZFZlY3RvckFERTNQcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0KTsNCisJCQlhZGRWZWN0b3JBREU0UHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCk7DQorCQkJYWRkVmVjdG9ySW5jdWJhdGlvblJhdGVQcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0KTsNCisJCX0NCisJCXJldHVybiBpdGVtUHJvcGVydHlEZXNjcmlwdG9yczsNCisJfQ0KKw0KKwkvKioNCisJICogVGhpcyBhZGRzIGEgcHJvcGVydHkgZGVzY3JpcHRvciBmb3IgdGhlIEJpdGluZyBSYXRlIGZlYXR1cmUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgdm9pZCBhZGRCaXRpbmdSYXRlUHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdCBvYmplY3QpIHsNCisJCWl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzLmFkZA0KKwkJCShjcmVhdGVJdGVtUHJvcGVydHlEZXNjcmlwdG9yDQorCQkJCSgoKENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnkpYWRhcHRlckZhY3RvcnkpLmdldFJvb3RBZGFwdGVyRmFjdG9yeSgpLA0KKwkJCQkgZ2V0UmVzb3VyY2VMb2NhdG9yKCksDQorCQkJCSBnZXRTdHJpbmcoIl9VSV9TaW1wbGVEZW5ndWVNb2RlbF9iaXRpbmdSYXRlX2ZlYXR1cmUiKSwNCisJCQkJIGdldFN0cmluZygiX1VJX1Byb3BlcnR5RGVzY3JpcHRvcl9kZXNjcmlwdGlvbiIsICJfVUlfU2ltcGxlRGVuZ3VlTW9kZWxfYml0aW5nUmF0ZV9mZWF0dXJlIiwgIl9VSV9TaW1wbGVEZW5ndWVNb2RlbF90eXBlIiksDQorCQkJCSBWZWN0b3JQYWNrYWdlLkxpdGVyYWxzLlNJTVBMRV9ERU5HVUVfTU9ERUxfX0JJVElOR19SQVRFLA0KKwkJCQkgdHJ1ZSwNCisJCQkJIGZhbHNlLA0KKwkJCQkgZmFsc2UsDQorCQkJCSBJdGVtUHJvcGVydHlEZXNjcmlwdG9yLlJFQUxfVkFMVUVfSU1BR0UsDQorCQkJCSBudWxsLA0KKwkJCQkgbnVsbCkpOw0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIGFkZHMgYSBwcm9wZXJ0eSBkZXNjcmlwdG9yIGZvciB0aGUgSG9zdCBJbmZlY3Rpdml0eTEgZmVhdHVyZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCB2b2lkIGFkZEhvc3RJbmZlY3Rpdml0eTFQcm9wZXJ0eURlc2NyaXB0b3IoT2JqZWN0IG9iamVjdCkgew0KKwkJaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMuYWRkDQorCQkJKGNyZWF0ZUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3INCisJCQkJKCgoQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSlhZGFwdGVyRmFjdG9yeSkuZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCksDQorCQkJCSBnZXRSZXNvdXJjZUxvY2F0b3IoKSwNCisJCQkJIGdldFN0cmluZygiX1VJX1NpbXBsZURlbmd1ZU1vZGVsX2hvc3RJbmZlY3Rpdml0eTFfZmVhdHVyZSIpLA0KKwkJCQkgZ2V0U3RyaW5nKCJfVUlfUHJvcGVydHlEZXNjcmlwdG9yX2Rlc2NyaXB0aW9uIiwgIl9VSV9TaW1wbGVEZW5ndWVNb2RlbF9ob3N0SW5mZWN0aXZpdHkxX2ZlYXR1cmUiLCAiX1VJX1NpbXBsZURlbmd1ZU1vZGVsX3R5cGUiKSwNCisJCQkJIFZlY3RvclBhY2thZ2UuTGl0ZXJhbHMuU0lNUExFX0RFTkdVRV9NT0RFTF9fSE9TVF9JTkZFQ1RJVklUWTEsDQorCQkJCSB0cnVlLA0KKwkJCQkgZmFsc2UsDQorCQkJCSBmYWxzZSwNCisJCQkJIEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IuUkVBTF9WQUxVRV9JTUFHRSwNCisJCQkJIG51bGwsDQorCQkJCSBudWxsKSk7DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgYWRkcyBhIHByb3BlcnR5IGRlc2NyaXB0b3IgZm9yIHRoZSBIb3N0IEluZmVjdGl2aXR5MiBmZWF0dXJlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIHZvaWQgYWRkSG9zdEluZmVjdGl2aXR5MlByb3BlcnR5RGVzY3JpcHRvcihPYmplY3Qgb2JqZWN0KSB7DQorCQlpdGVtUHJvcGVydHlEZXNjcmlwdG9ycy5hZGQNCisJCQkoY3JlYXRlSXRlbVByb3BlcnR5RGVzY3JpcHRvcg0KKwkJCQkoKChDb21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5KWFkYXB0ZXJGYWN0b3J5KS5nZXRSb290QWRhcHRlckZhY3RvcnkoKSwNCisJCQkJIGdldFJlc291cmNlTG9jYXRvcigpLA0KKwkJCQkgZ2V0U3RyaW5nKCJfVUlfU2ltcGxlRGVuZ3VlTW9kZWxfaG9zdEluZmVjdGl2aXR5Ml9mZWF0dXJlIiksDQorCQkJCSBnZXRTdHJpbmcoIl9VSV9Qcm9wZXJ0eURlc2NyaXB0b3JfZGVzY3JpcHRpb24iLCAiX1VJX1NpbXBsZURlbmd1ZU1vZGVsX2hvc3RJbmZlY3Rpdml0eTJfZmVhdHVyZSIsICJfVUlfU2ltcGxlRGVuZ3VlTW9kZWxfdHlwZSIpLA0KKwkJCQkgVmVjdG9yUGFja2FnZS5MaXRlcmFscy5TSU1QTEVfREVOR1VFX01PREVMX19IT1NUX0lORkVDVElWSVRZMiwNCisJCQkJIHRydWUsDQorCQkJCSBmYWxzZSwNCisJCQkJIGZhbHNlLA0KKwkJCQkgSXRlbVByb3BlcnR5RGVzY3JpcHRvci5SRUFMX1ZBTFVFX0lNQUdFLA0KKwkJCQkgbnVsbCwNCisJCQkJIG51bGwpKTsNCisJfQ0KKw0KKwkvKioNCisJICogVGhpcyBhZGRzIGEgcHJvcGVydHkgZGVzY3JpcHRvciBmb3IgdGhlIEhvc3QgSW5mZWN0aXZpdHkzIGZlYXR1cmUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgdm9pZCBhZGRIb3N0SW5mZWN0aXZpdHkzUHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdCBvYmplY3QpIHsNCisJCWl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzLmFkZA0KKwkJCShjcmVhdGVJdGVtUHJvcGVydHlEZXNjcmlwdG9yDQorCQkJCSgoKENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnkpYWRhcHRlckZhY3RvcnkpLmdldFJvb3RBZGFwdGVyRmFjdG9yeSgpLA0KKwkJCQkgZ2V0UmVzb3VyY2VMb2NhdG9yKCksDQorCQkJCSBnZXRTdHJpbmcoIl9VSV9TaW1wbGVEZW5ndWVNb2RlbF9ob3N0SW5mZWN0aXZpdHkzX2ZlYXR1cmUiKSwNCisJCQkJIGdldFN0cmluZygiX1VJX1Byb3BlcnR5RGVzY3JpcHRvcl9kZXNjcmlwdGlvbiIsICJfVUlfU2ltcGxlRGVuZ3VlTW9kZWxfaG9zdEluZmVjdGl2aXR5M19mZWF0dXJlIiwgIl9VSV9TaW1wbGVEZW5ndWVNb2RlbF90eXBlIiksDQorCQkJCSBWZWN0b3JQYWNrYWdlLkxpdGVyYWxzLlNJTVBMRV9ERU5HVUVfTU9ERUxfX0hPU1RfSU5GRUNUSVZJVFkzLA0KKwkJCQkgdHJ1ZSwNCisJCQkJIGZhbHNlLA0KKwkJCQkgZmFsc2UsDQorCQkJCSBJdGVtUHJvcGVydHlEZXNjcmlwdG9yLlJFQUxfVkFMVUVfSU1BR0UsDQorCQkJCSBudWxsLA0KKwkJCQkgbnVsbCkpOw0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIGFkZHMgYSBwcm9wZXJ0eSBkZXNjcmlwdG9yIGZvciB0aGUgSG9zdCBJbmZlY3Rpdml0eTQgZmVhdHVyZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCB2b2lkIGFkZEhvc3RJbmZlY3Rpdml0eTRQcm9wZXJ0eURlc2NyaXB0b3IoT2JqZWN0IG9iamVjdCkgew0KKwkJaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMuYWRkDQorCQkJKGNyZWF0ZUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3INCisJCQkJKCgoQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSlhZGFwdGVyRmFjdG9yeSkuZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCksDQorCQkJCSBnZXRSZXNvdXJjZUxvY2F0b3IoKSwNCisJCQkJIGdldFN0cmluZygiX1VJX1NpbXBsZURlbmd1ZU1vZGVsX2hvc3RJbmZlY3Rpdml0eTRfZmVhdHVyZSIpLA0KKwkJCQkgZ2V0U3RyaW5nKCJfVUlfUHJvcGVydHlEZXNjcmlwdG9yX2Rlc2NyaXB0aW9uIiwgIl9VSV9TaW1wbGVEZW5ndWVNb2RlbF9ob3N0SW5mZWN0aXZpdHk0X2ZlYXR1cmUiLCAiX1VJX1NpbXBsZURlbmd1ZU1vZGVsX3R5cGUiKSwNCisJCQkJIFZlY3RvclBhY2thZ2UuTGl0ZXJhbHMuU0lNUExFX0RFTkdVRV9NT0RFTF9fSE9TVF9JTkZFQ1RJVklUWTQsDQorCQkJCSB0cnVlLA0KKwkJCQkgZmFsc2UsDQorCQkJCSBmYWxzZSwNCisJCQkJIEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IuUkVBTF9WQUxVRV9JTUFHRSwNCisJCQkJIG51bGwsDQorCQkJCSBudWxsKSk7DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgYWRkcyBhIHByb3BlcnR5IGRlc2NyaXB0b3IgZm9yIHRoZSBIb3N0IFByaW1hcnkgSW5jdWJhdGlvbiBSYXRlIGZlYXR1cmUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgdm9pZCBhZGRIb3N0UHJpbWFyeUluY3ViYXRpb25SYXRlUHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdCBvYmplY3QpIHsNCisJCWl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzLmFkZA0KKwkJCShjcmVhdGVJdGVtUHJvcGVydHlEZXNjcmlwdG9yDQorCQkJCSgoKENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnkpYWRhcHRlckZhY3RvcnkpLmdldFJvb3RBZGFwdGVyRmFjdG9yeSgpLA0KKwkJCQkgZ2V0UmVzb3VyY2VMb2NhdG9yKCksDQorCQkJCSBnZXRTdHJpbmcoIl9VSV9TaW1wbGVEZW5ndWVNb2RlbF9ob3N0UHJpbWFyeUluY3ViYXRpb25SYXRlX2ZlYXR1cmUiKSwNCisJCQkJIGdldFN0cmluZygiX1VJX1Byb3BlcnR5RGVzY3JpcHRvcl9kZXNjcmlwdGlvbiIsICJfVUlfU2ltcGxlRGVuZ3VlTW9kZWxfaG9zdFByaW1hcnlJbmN1YmF0aW9uUmF0ZV9mZWF0dXJlIiwgIl9VSV9TaW1wbGVEZW5ndWVNb2RlbF90eXBlIiksDQorCQkJCSBWZWN0b3JQYWNrYWdlLkxpdGVyYWxzLlNJTVBMRV9ERU5HVUVfTU9ERUxfX0hPU1RfUFJJTUFSWV9JTkNVQkFUSU9OX1JBVEUsDQorCQkJCSB0cnVlLA0KKwkJCQkgZmFsc2UsDQorCQkJCSBmYWxzZSwNCisJCQkJIEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IuUkVBTF9WQUxVRV9JTUFHRSwNCisJCQkJIG51bGwsDQorCQkJCSBudWxsKSk7DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgYWRkcyBhIHByb3BlcnR5IGRlc2NyaXB0b3IgZm9yIHRoZSBIb3N0IFByaW1hcnkgUmVjb3ZlcnkgUmF0ZSBmZWF0dXJlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIHZvaWQgYWRkSG9zdFByaW1hcnlSZWNvdmVyeVJhdGVQcm9wZXJ0eURlc2NyaXB0b3IoT2JqZWN0IG9iamVjdCkgew0KKwkJaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMuYWRkDQorCQkJKGNyZWF0ZUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3INCisJCQkJKCgoQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSlhZGFwdGVyRmFjdG9yeSkuZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCksDQorCQkJCSBnZXRSZXNvdXJjZUxvY2F0b3IoKSwNCisJCQkJIGdldFN0cmluZygiX1VJX1NpbXBsZURlbmd1ZU1vZGVsX2hvc3RQcmltYXJ5UmVjb3ZlcnlSYXRlX2ZlYXR1cmUiKSwNCisJCQkJIGdldFN0cmluZygiX1VJX1Byb3BlcnR5RGVzY3JpcHRvcl9kZXNjcmlwdGlvbiIsICJfVUlfU2ltcGxlRGVuZ3VlTW9kZWxfaG9zdFByaW1hcnlSZWNvdmVyeVJhdGVfZmVhdHVyZSIsICJfVUlfU2ltcGxlRGVuZ3VlTW9kZWxfdHlwZSIpLA0KKwkJCQkgVmVjdG9yUGFja2FnZS5MaXRlcmFscy5TSU1QTEVfREVOR1VFX01PREVMX19IT1NUX1BSSU1BUllfUkVDT1ZFUllfUkFURSwNCisJCQkJIHRydWUsDQorCQkJCSBmYWxzZSwNCisJCQkJIGZhbHNlLA0KKwkJCQkgSXRlbVByb3BlcnR5RGVzY3JpcHRvci5SRUFMX1ZBTFVFX0lNQUdFLA0KKwkJCQkgbnVsbCwNCisJCQkJIG51bGwpKTsNCisJfQ0KKw0KKwkvKioNCisJICogVGhpcyBhZGRzIGEgcHJvcGVydHkgZGVzY3JpcHRvciBmb3IgdGhlIEhvc3QgUHJpbWFyeSBJbW11bml0eSBMb3NzIFJhdGUgZmVhdHVyZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCB2b2lkIGFkZEhvc3RQcmltYXJ5SW1tdW5pdHlMb3NzUmF0ZVByb3BlcnR5RGVzY3JpcHRvcihPYmplY3Qgb2JqZWN0KSB7DQorCQlpdGVtUHJvcGVydHlEZXNjcmlwdG9ycy5hZGQNCisJCQkoY3JlYXRlSXRlbVByb3BlcnR5RGVzY3JpcHRvcg0KKwkJCQkoKChDb21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5KWFkYXB0ZXJGYWN0b3J5KS5nZXRSb290QWRhcHRlckZhY3RvcnkoKSwNCisJCQkJIGdldFJlc291cmNlTG9jYXRvcigpLA0KKwkJCQkgZ2V0U3RyaW5nKCJfVUlfU2ltcGxlRGVuZ3VlTW9kZWxfaG9zdFByaW1hcnlJbW11bml0eUxvc3NSYXRlX2ZlYXR1cmUiKSwNCisJCQkJIGdldFN0cmluZygiX1VJX1Byb3BlcnR5RGVzY3JpcHRvcl9kZXNjcmlwdGlvbiIsICJfVUlfU2ltcGxlRGVuZ3VlTW9kZWxfaG9zdFByaW1hcnlJbW11bml0eUxvc3NSYXRlX2ZlYXR1cmUiLCAiX1VJX1NpbXBsZURlbmd1ZU1vZGVsX3R5cGUiKSwNCisJCQkJIFZlY3RvclBhY2thZ2UuTGl0ZXJhbHMuU0lNUExFX0RFTkdVRV9NT0RFTF9fSE9TVF9QUklNQVJZX0lNTVVOSVRZX0xPU1NfUkFURSwNCisJCQkJIHRydWUsDQorCQkJCSBmYWxzZSwNCisJCQkJIGZhbHNlLA0KKwkJCQkgSXRlbVByb3BlcnR5RGVzY3JpcHRvci5SRUFMX1ZBTFVFX0lNQUdFLA0KKwkJCQkgbnVsbCwNCisJCQkJIG51bGwpKTsNCisJfQ0KKw0KKwkvKioNCisJICogVGhpcyBhZGRzIGEgcHJvcGVydHkgZGVzY3JpcHRvciBmb3IgdGhlIEhvc3QgUHJpbWFyeSBEZWF0aCBSYXRlIGZlYXR1cmUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgdm9pZCBhZGRIb3N0UHJpbWFyeURlYXRoUmF0ZVByb3BlcnR5RGVzY3JpcHRvcihPYmplY3Qgb2JqZWN0KSB7DQorCQlpdGVtUHJvcGVydHlEZXNjcmlwdG9ycy5hZGQNCisJCQkoY3JlYXRlSXRlbVByb3BlcnR5RGVzY3JpcHRvcg0KKwkJCQkoKChDb21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5KWFkYXB0ZXJGYWN0b3J5KS5nZXRSb290QWRhcHRlckZhY3RvcnkoKSwNCisJCQkJIGdldFJlc291cmNlTG9jYXRvcigpLA0KKwkJCQkgZ2V0U3RyaW5nKCJfVUlfU2ltcGxlRGVuZ3VlTW9kZWxfaG9zdFByaW1hcnlEZWF0aFJhdGVfZmVhdHVyZSIpLA0KKwkJCQkgZ2V0U3RyaW5nKCJfVUlfUHJvcGVydHlEZXNjcmlwdG9yX2Rlc2NyaXB0aW9uIiwgIl9VSV9TaW1wbGVEZW5ndWVNb2RlbF9ob3N0UHJpbWFyeURlYXRoUmF0ZV9mZWF0dXJlIiwgIl9VSV9TaW1wbGVEZW5ndWVNb2RlbF90eXBlIiksDQorCQkJCSBWZWN0b3JQYWNrYWdlLkxpdGVyYWxzLlNJTVBMRV9ERU5HVUVfTU9ERUxfX0hPU1RfUFJJTUFSWV9ERUFUSF9SQVRFLA0KKwkJCQkgdHJ1ZSwNCisJCQkJIGZhbHNlLA0KKwkJCQkgZmFsc2UsDQorCQkJCSBJdGVtUHJvcGVydHlEZXNjcmlwdG9yLlJFQUxfVkFMVUVfSU1BR0UsDQorCQkJCSBudWxsLA0KKwkJCQkgbnVsbCkpOw0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIGFkZHMgYSBwcm9wZXJ0eSBkZXNjcmlwdG9yIGZvciB0aGUgSG9zdCBBREUxIGZlYXR1cmUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgdm9pZCBhZGRIb3N0QURFMVByb3BlcnR5RGVzY3JpcHRvcihPYmplY3Qgb2JqZWN0KSB7DQorCQlpdGVtUHJvcGVydHlEZXNjcmlwdG9ycy5hZGQNCisJCQkoY3JlYXRlSXRlbVByb3BlcnR5RGVzY3JpcHRvcg0KKwkJCQkoKChDb21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5KWFkYXB0ZXJGYWN0b3J5KS5nZXRSb290QWRhcHRlckZhY3RvcnkoKSwNCisJCQkJIGdldFJlc291cmNlTG9jYXRvcigpLA0KKwkJCQkgZ2V0U3RyaW5nKCJfVUlfU2ltcGxlRGVuZ3VlTW9kZWxfaG9zdEFERTFfZmVhdHVyZSIpLA0KKwkJCQkgZ2V0U3RyaW5nKCJfVUlfUHJvcGVydHlEZXNjcmlwdG9yX2Rlc2NyaXB0aW9uIiwgIl9VSV9TaW1wbGVEZW5ndWVNb2RlbF9ob3N0QURFMV9mZWF0dXJlIiwgIl9VSV9TaW1wbGVEZW5ndWVNb2RlbF90eXBlIiksDQorCQkJCSBWZWN0b3JQYWNrYWdlLkxpdGVyYWxzLlNJTVBMRV9ERU5HVUVfTU9ERUxfX0hPU1RfQURFMSwNCisJCQkJIHRydWUsDQorCQkJCSBmYWxzZSwNCisJCQkJIGZhbHNlLA0KKwkJCQkgSXRlbVByb3BlcnR5RGVzY3JpcHRvci5SRUFMX1ZBTFVFX0lNQUdFLA0KKwkJCQkgbnVsbCwNCisJCQkJIG51bGwpKTsNCisJfQ0KKw0KKwkvKioNCisJICogVGhpcyBhZGRzIGEgcHJvcGVydHkgZGVzY3JpcHRvciBmb3IgdGhlIEhvc3QgQURFMiBmZWF0dXJlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIHZvaWQgYWRkSG9zdEFERTJQcm9wZXJ0eURlc2NyaXB0b3IoT2JqZWN0IG9iamVjdCkgew0KKwkJaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMuYWRkDQorCQkJKGNyZWF0ZUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3INCisJCQkJKCgoQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSlhZGFwdGVyRmFjdG9yeSkuZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCksDQorCQkJCSBnZXRSZXNvdXJjZUxvY2F0b3IoKSwNCisJCQkJIGdldFN0cmluZygiX1VJX1NpbXBsZURlbmd1ZU1vZGVsX2hvc3RBREUyX2ZlYXR1cmUiKSwNCisJCQkJIGdldFN0cmluZygiX1VJX1Byb3BlcnR5RGVzY3JpcHRvcl9kZXNjcmlwdGlvbiIsICJfVUlfU2ltcGxlRGVuZ3VlTW9kZWxfaG9zdEFERTJfZmVhdHVyZSIsICJfVUlfU2ltcGxlRGVuZ3VlTW9kZWxfdHlwZSIpLA0KKwkJCQkgVmVjdG9yUGFja2FnZS5MaXRlcmFscy5TSU1QTEVfREVOR1VFX01PREVMX19IT1NUX0FERTIsDQorCQkJCSB0cnVlLA0KKwkJCQkgZmFsc2UsDQorCQkJCSBmYWxzZSwNCisJCQkJIEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IuUkVBTF9WQUxVRV9JTUFHRSwNCisJCQkJIG51bGwsDQorCQkJCSBudWxsKSk7DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgYWRkcyBhIHByb3BlcnR5IGRlc2NyaXB0b3IgZm9yIHRoZSBIb3N0IEFERTMgZmVhdHVyZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCB2b2lkIGFkZEhvc3RBREUzUHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdCBvYmplY3QpIHsNCisJCWl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzLmFkZA0KKwkJCShjcmVhdGVJdGVtUHJvcGVydHlEZXNjcmlwdG9yDQorCQkJCSgoKENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnkpYWRhcHRlckZhY3RvcnkpLmdldFJvb3RBZGFwdGVyRmFjdG9yeSgpLA0KKwkJCQkgZ2V0UmVzb3VyY2VMb2NhdG9yKCksDQorCQkJCSBnZXRTdHJpbmcoIl9VSV9TaW1wbGVEZW5ndWVNb2RlbF9ob3N0QURFM19mZWF0dXJlIiksDQorCQkJCSBnZXRTdHJpbmcoIl9VSV9Qcm9wZXJ0eURlc2NyaXB0b3JfZGVzY3JpcHRpb24iLCAiX1VJX1NpbXBsZURlbmd1ZU1vZGVsX2hvc3RBREUzX2ZlYXR1cmUiLCAiX1VJX1NpbXBsZURlbmd1ZU1vZGVsX3R5cGUiKSwNCisJCQkJIFZlY3RvclBhY2thZ2UuTGl0ZXJhbHMuU0lNUExFX0RFTkdVRV9NT0RFTF9fSE9TVF9BREUzLA0KKwkJCQkgdHJ1ZSwNCisJCQkJIGZhbHNlLA0KKwkJCQkgZmFsc2UsDQorCQkJCSBJdGVtUHJvcGVydHlEZXNjcmlwdG9yLlJFQUxfVkFMVUVfSU1BR0UsDQorCQkJCSBudWxsLA0KKwkJCQkgbnVsbCkpOw0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIGFkZHMgYSBwcm9wZXJ0eSBkZXNjcmlwdG9yIGZvciB0aGUgSG9zdCBBREU0IGZlYXR1cmUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgdm9pZCBhZGRIb3N0QURFNFByb3BlcnR5RGVzY3JpcHRvcihPYmplY3Qgb2JqZWN0KSB7DQorCQlpdGVtUHJvcGVydHlEZXNjcmlwdG9ycy5hZGQNCisJCQkoY3JlYXRlSXRlbVByb3BlcnR5RGVzY3JpcHRvcg0KKwkJCQkoKChDb21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5KWFkYXB0ZXJGYWN0b3J5KS5nZXRSb290QWRhcHRlckZhY3RvcnkoKSwNCisJCQkJIGdldFJlc291cmNlTG9jYXRvcigpLA0KKwkJCQkgZ2V0U3RyaW5nKCJfVUlfU2ltcGxlRGVuZ3VlTW9kZWxfaG9zdEFERTRfZmVhdHVyZSIpLA0KKwkJCQkgZ2V0U3RyaW5nKCJfVUlfUHJvcGVydHlEZXNjcmlwdG9yX2Rlc2NyaXB0aW9uIiwgIl9VSV9TaW1wbGVEZW5ndWVNb2RlbF9ob3N0QURFNF9mZWF0dXJlIiwgIl9VSV9TaW1wbGVEZW5ndWVNb2RlbF90eXBlIiksDQorCQkJCSBWZWN0b3JQYWNrYWdlLkxpdGVyYWxzLlNJTVBMRV9ERU5HVUVfTU9ERUxfX0hPU1RfQURFNCwNCisJCQkJIHRydWUsDQorCQkJCSBmYWxzZSwNCisJCQkJIGZhbHNlLA0KKwkJCQkgSXRlbVByb3BlcnR5RGVzY3JpcHRvci5SRUFMX1ZBTFVFX0lNQUdFLA0KKwkJCQkgbnVsbCwNCisJCQkJIG51bGwpKTsNCisJfQ0KKw0KKwkvKioNCisJICogVGhpcyBhZGRzIGEgcHJvcGVydHkgZGVzY3JpcHRvciBmb3IgdGhlIEhvc3QgU2Vjb25kYXJ5IEluY3ViYXRpb24gUmF0ZSBmZWF0dXJlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIHZvaWQgYWRkSG9zdFNlY29uZGFyeUluY3ViYXRpb25SYXRlUHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdCBvYmplY3QpIHsNCisJCWl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzLmFkZA0KKwkJCShjcmVhdGVJdGVtUHJvcGVydHlEZXNjcmlwdG9yDQorCQkJCSgoKENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnkpYWRhcHRlckZhY3RvcnkpLmdldFJvb3RBZGFwdGVyRmFjdG9yeSgpLA0KKwkJCQkgZ2V0UmVzb3VyY2VMb2NhdG9yKCksDQorCQkJCSBnZXRTdHJpbmcoIl9VSV9TaW1wbGVEZW5ndWVNb2RlbF9ob3N0U2Vjb25kYXJ5SW5jdWJhdGlvblJhdGVfZmVhdHVyZSIpLA0KKwkJCQkgZ2V0U3RyaW5nKCJfVUlfUHJvcGVydHlEZXNjcmlwdG9yX2Rlc2NyaXB0aW9uIiwgIl9VSV9TaW1wbGVEZW5ndWVNb2RlbF9ob3N0U2Vjb25kYXJ5SW5jdWJhdGlvblJhdGVfZmVhdHVyZSIsICJfVUlfU2ltcGxlRGVuZ3VlTW9kZWxfdHlwZSIpLA0KKwkJCQkgVmVjdG9yUGFja2FnZS5MaXRlcmFscy5TSU1QTEVfREVOR1VFX01PREVMX19IT1NUX1NFQ09OREFSWV9JTkNVQkFUSU9OX1JBVEUsDQorCQkJCSB0cnVlLA0KKwkJCQkgZmFsc2UsDQorCQkJCSBmYWxzZSwNCisJCQkJIEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IuUkVBTF9WQUxVRV9JTUFHRSwNCisJCQkJIG51bGwsDQorCQkJCSBudWxsKSk7DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgYWRkcyBhIHByb3BlcnR5IGRlc2NyaXB0b3IgZm9yIHRoZSBIb3N0IFNlY29uZGFyeSBSZWNvdmVyeSBSYXRlIGZlYXR1cmUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgdm9pZCBhZGRIb3N0U2Vjb25kYXJ5UmVjb3ZlcnlSYXRlUHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdCBvYmplY3QpIHsNCisJCWl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzLmFkZA0KKwkJCShjcmVhdGVJdGVtUHJvcGVydHlEZXNjcmlwdG9yDQorCQkJCSgoKENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnkpYWRhcHRlckZhY3RvcnkpLmdldFJvb3RBZGFwdGVyRmFjdG9yeSgpLA0KKwkJCQkgZ2V0UmVzb3VyY2VMb2NhdG9yKCksDQorCQkJCSBnZXRTdHJpbmcoIl9VSV9TaW1wbGVEZW5ndWVNb2RlbF9ob3N0U2Vjb25kYXJ5UmVjb3ZlcnlSYXRlX2ZlYXR1cmUiKSwNCisJCQkJIGdldFN0cmluZygiX1VJX1Byb3BlcnR5RGVzY3JpcHRvcl9kZXNjcmlwdGlvbiIsICJfVUlfU2ltcGxlRGVuZ3VlTW9kZWxfaG9zdFNlY29uZGFyeVJlY292ZXJ5UmF0ZV9mZWF0dXJlIiwgIl9VSV9TaW1wbGVEZW5ndWVNb2RlbF90eXBlIiksDQorCQkJCSBWZWN0b3JQYWNrYWdlLkxpdGVyYWxzLlNJTVBMRV9ERU5HVUVfTU9ERUxfX0hPU1RfU0VDT05EQVJZX1JFQ09WRVJZX1JBVEUsDQorCQkJCSB0cnVlLA0KKwkJCQkgZmFsc2UsDQorCQkJCSBmYWxzZSwNCisJCQkJIEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IuUkVBTF9WQUxVRV9JTUFHRSwNCisJCQkJIG51bGwsDQorCQkJCSBudWxsKSk7DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgYWRkcyBhIHByb3BlcnR5IGRlc2NyaXB0b3IgZm9yIHRoZSBIb3N0IFNlY29uZGFyeSBEZWF0aCBSYXRlIGZlYXR1cmUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgdm9pZCBhZGRIb3N0U2Vjb25kYXJ5RGVhdGhSYXRlUHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdCBvYmplY3QpIHsNCisJCWl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzLmFkZA0KKwkJCShjcmVhdGVJdGVtUHJvcGVydHlEZXNjcmlwdG9yDQorCQkJCSgoKENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnkpYWRhcHRlckZhY3RvcnkpLmdldFJvb3RBZGFwdGVyRmFjdG9yeSgpLA0KKwkJCQkgZ2V0UmVzb3VyY2VMb2NhdG9yKCksDQorCQkJCSBnZXRTdHJpbmcoIl9VSV9TaW1wbGVEZW5ndWVNb2RlbF9ob3N0U2Vjb25kYXJ5RGVhdGhSYXRlX2ZlYXR1cmUiKSwNCisJCQkJIGdldFN0cmluZygiX1VJX1Byb3BlcnR5RGVzY3JpcHRvcl9kZXNjcmlwdGlvbiIsICJfVUlfU2ltcGxlRGVuZ3VlTW9kZWxfaG9zdFNlY29uZGFyeURlYXRoUmF0ZV9mZWF0dXJlIiwgIl9VSV9TaW1wbGVEZW5ndWVNb2RlbF90eXBlIiksDQorCQkJCSBWZWN0b3JQYWNrYWdlLkxpdGVyYWxzLlNJTVBMRV9ERU5HVUVfTU9ERUxfX0hPU1RfU0VDT05EQVJZX0RFQVRIX1JBVEUsDQorCQkJCSB0cnVlLA0KKwkJCQkgZmFsc2UsDQorCQkJCSBmYWxzZSwNCisJCQkJIEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IuUkVBTF9WQUxVRV9JTUFHRSwNCisJCQkJIG51bGwsDQorCQkJCSBudWxsKSk7DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgYWRkcyBhIHByb3BlcnR5IGRlc2NyaXB0b3IgZm9yIHRoZSBWZWN0b3IgSW5mZWN0aXZpdHkxIGZlYXR1cmUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgdm9pZCBhZGRWZWN0b3JJbmZlY3Rpdml0eTFQcm9wZXJ0eURlc2NyaXB0b3IoT2JqZWN0IG9iamVjdCkgew0KKwkJaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMuYWRkDQorCQkJKGNyZWF0ZUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3INCisJCQkJKCgoQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSlhZGFwdGVyRmFjdG9yeSkuZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCksDQorCQkJCSBnZXRSZXNvdXJjZUxvY2F0b3IoKSwNCisJCQkJIGdldFN0cmluZygiX1VJX1NpbXBsZURlbmd1ZU1vZGVsX3ZlY3RvckluZmVjdGl2aXR5MV9mZWF0dXJlIiksDQorCQkJCSBnZXRTdHJpbmcoIl9VSV9Qcm9wZXJ0eURlc2NyaXB0b3JfZGVzY3JpcHRpb24iLCAiX1VJX1NpbXBsZURlbmd1ZU1vZGVsX3ZlY3RvckluZmVjdGl2aXR5MV9mZWF0dXJlIiwgIl9VSV9TaW1wbGVEZW5ndWVNb2RlbF90eXBlIiksDQorCQkJCSBWZWN0b3JQYWNrYWdlLkxpdGVyYWxzLlNJTVBMRV9ERU5HVUVfTU9ERUxfX1ZFQ1RPUl9JTkZFQ1RJVklUWTEsDQorCQkJCSB0cnVlLA0KKwkJCQkgZmFsc2UsDQorCQkJCSBmYWxzZSwNCisJCQkJIEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IuUkVBTF9WQUxVRV9JTUFHRSwNCisJCQkJIG51bGwsDQorCQkJCSBudWxsKSk7DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgYWRkcyBhIHByb3BlcnR5IGRlc2NyaXB0b3IgZm9yIHRoZSBWZWN0b3IgSW5mZWN0aXZpdHkyIGZlYXR1cmUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgdm9pZCBhZGRWZWN0b3JJbmZlY3Rpdml0eTJQcm9wZXJ0eURlc2NyaXB0b3IoT2JqZWN0IG9iamVjdCkgew0KKwkJaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMuYWRkDQorCQkJKGNyZWF0ZUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3INCisJCQkJKCgoQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSlhZGFwdGVyRmFjdG9yeSkuZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCksDQorCQkJCSBnZXRSZXNvdXJjZUxvY2F0b3IoKSwNCisJCQkJIGdldFN0cmluZygiX1VJX1NpbXBsZURlbmd1ZU1vZGVsX3ZlY3RvckluZmVjdGl2aXR5Ml9mZWF0dXJlIiksDQorCQkJCSBnZXRTdHJpbmcoIl9VSV9Qcm9wZXJ0eURlc2NyaXB0b3JfZGVzY3JpcHRpb24iLCAiX1VJX1NpbXBsZURlbmd1ZU1vZGVsX3ZlY3RvckluZmVjdGl2aXR5Ml9mZWF0dXJlIiwgIl9VSV9TaW1wbGVEZW5ndWVNb2RlbF90eXBlIiksDQorCQkJCSBWZWN0b3JQYWNrYWdlLkxpdGVyYWxzLlNJTVBMRV9ERU5HVUVfTU9ERUxfX1ZFQ1RPUl9JTkZFQ1RJVklUWTIsDQorCQkJCSB0cnVlLA0KKwkJCQkgZmFsc2UsDQorCQkJCSBmYWxzZSwNCisJCQkJIEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IuUkVBTF9WQUxVRV9JTUFHRSwNCisJCQkJIG51bGwsDQorCQkJCSBudWxsKSk7DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgYWRkcyBhIHByb3BlcnR5IGRlc2NyaXB0b3IgZm9yIHRoZSBWZWN0b3IgSW5mZWN0aXZpdHkzIGZlYXR1cmUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgdm9pZCBhZGRWZWN0b3JJbmZlY3Rpdml0eTNQcm9wZXJ0eURlc2NyaXB0b3IoT2JqZWN0IG9iamVjdCkgew0KKwkJaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMuYWRkDQorCQkJKGNyZWF0ZUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3INCisJCQkJKCgoQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSlhZGFwdGVyRmFjdG9yeSkuZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCksDQorCQkJCSBnZXRSZXNvdXJjZUxvY2F0b3IoKSwNCisJCQkJIGdldFN0cmluZygiX1VJX1NpbXBsZURlbmd1ZU1vZGVsX3ZlY3RvckluZmVjdGl2aXR5M19mZWF0dXJlIiksDQorCQkJCSBnZXRTdHJpbmcoIl9VSV9Qcm9wZXJ0eURlc2NyaXB0b3JfZGVzY3JpcHRpb24iLCAiX1VJX1NpbXBsZURlbmd1ZU1vZGVsX3ZlY3RvckluZmVjdGl2aXR5M19mZWF0dXJlIiwgIl9VSV9TaW1wbGVEZW5ndWVNb2RlbF90eXBlIiksDQorCQkJCSBWZWN0b3JQYWNrYWdlLkxpdGVyYWxzLlNJTVBMRV9ERU5HVUVfTU9ERUxfX1ZFQ1RPUl9JTkZFQ1RJVklUWTMsDQorCQkJCSB0cnVlLA0KKwkJCQkgZmFsc2UsDQorCQkJCSBmYWxzZSwNCisJCQkJIEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IuUkVBTF9WQUxVRV9JTUFHRSwNCisJCQkJIG51bGwsDQorCQkJCSBudWxsKSk7DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgYWRkcyBhIHByb3BlcnR5IGRlc2NyaXB0b3IgZm9yIHRoZSBWZWN0b3IgSW5mZWN0aXZpdHk0IGZlYXR1cmUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgdm9pZCBhZGRWZWN0b3JJbmZlY3Rpdml0eTRQcm9wZXJ0eURlc2NyaXB0b3IoT2JqZWN0IG9iamVjdCkgew0KKwkJaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMuYWRkDQorCQkJKGNyZWF0ZUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3INCisJCQkJKCgoQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSlhZGFwdGVyRmFjdG9yeSkuZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCksDQorCQkJCSBnZXRSZXNvdXJjZUxvY2F0b3IoKSwNCisJCQkJIGdldFN0cmluZygiX1VJX1NpbXBsZURlbmd1ZU1vZGVsX3ZlY3RvckluZmVjdGl2aXR5NF9mZWF0dXJlIiksDQorCQkJCSBnZXRTdHJpbmcoIl9VSV9Qcm9wZXJ0eURlc2NyaXB0b3JfZGVzY3JpcHRpb24iLCAiX1VJX1NpbXBsZURlbmd1ZU1vZGVsX3ZlY3RvckluZmVjdGl2aXR5NF9mZWF0dXJlIiwgIl9VSV9TaW1wbGVEZW5ndWVNb2RlbF90eXBlIiksDQorCQkJCSBWZWN0b3JQYWNrYWdlLkxpdGVyYWxzLlNJTVBMRV9ERU5HVUVfTU9ERUxfX1ZFQ1RPUl9JTkZFQ1RJVklUWTQsDQorCQkJCSB0cnVlLA0KKwkJCQkgZmFsc2UsDQorCQkJCSBmYWxzZSwNCisJCQkJIEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IuUkVBTF9WQUxVRV9JTUFHRSwNCisJCQkJIG51bGwsDQorCQkJCSBudWxsKSk7DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgYWRkcyBhIHByb3BlcnR5IGRlc2NyaXB0b3IgZm9yIHRoZSBWZWN0b3IgQURFMSBmZWF0dXJlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIHZvaWQgYWRkVmVjdG9yQURFMVByb3BlcnR5RGVzY3JpcHRvcihPYmplY3Qgb2JqZWN0KSB7DQorCQlpdGVtUHJvcGVydHlEZXNjcmlwdG9ycy5hZGQNCisJCQkoY3JlYXRlSXRlbVByb3BlcnR5RGVzY3JpcHRvcg0KKwkJCQkoKChDb21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5KWFkYXB0ZXJGYWN0b3J5KS5nZXRSb290QWRhcHRlckZhY3RvcnkoKSwNCisJCQkJIGdldFJlc291cmNlTG9jYXRvcigpLA0KKwkJCQkgZ2V0U3RyaW5nKCJfVUlfU2ltcGxlRGVuZ3VlTW9kZWxfdmVjdG9yQURFMV9mZWF0dXJlIiksDQorCQkJCSBnZXRTdHJpbmcoIl9VSV9Qcm9wZXJ0eURlc2NyaXB0b3JfZGVzY3JpcHRpb24iLCAiX1VJX1NpbXBsZURlbmd1ZU1vZGVsX3ZlY3RvckFERTFfZmVhdHVyZSIsICJfVUlfU2ltcGxlRGVuZ3VlTW9kZWxfdHlwZSIpLA0KKwkJCQkgVmVjdG9yUGFja2FnZS5MaXRlcmFscy5TSU1QTEVfREVOR1VFX01PREVMX19WRUNUT1JfQURFMSwNCisJCQkJIHRydWUsDQorCQkJCSBmYWxzZSwNCisJCQkJIGZhbHNlLA0KKwkJCQkgSXRlbVByb3BlcnR5RGVzY3JpcHRvci5SRUFMX1ZBTFVFX0lNQUdFLA0KKwkJCQkgbnVsbCwNCisJCQkJIG51bGwpKTsNCisJfQ0KKw0KKwkvKioNCisJICogVGhpcyBhZGRzIGEgcHJvcGVydHkgZGVzY3JpcHRvciBmb3IgdGhlIFZlY3RvciBBREUyIGZlYXR1cmUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgdm9pZCBhZGRWZWN0b3JBREUyUHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdCBvYmplY3QpIHsNCisJCWl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzLmFkZA0KKwkJCShjcmVhdGVJdGVtUHJvcGVydHlEZXNjcmlwdG9yDQorCQkJCSgoKENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnkpYWRhcHRlckZhY3RvcnkpLmdldFJvb3RBZGFwdGVyRmFjdG9yeSgpLA0KKwkJCQkgZ2V0UmVzb3VyY2VMb2NhdG9yKCksDQorCQkJCSBnZXRTdHJpbmcoIl9VSV9TaW1wbGVEZW5ndWVNb2RlbF92ZWN0b3JBREUyX2ZlYXR1cmUiKSwNCisJCQkJIGdldFN0cmluZygiX1VJX1Byb3BlcnR5RGVzY3JpcHRvcl9kZXNjcmlwdGlvbiIsICJfVUlfU2ltcGxlRGVuZ3VlTW9kZWxfdmVjdG9yQURFMl9mZWF0dXJlIiwgIl9VSV9TaW1wbGVEZW5ndWVNb2RlbF90eXBlIiksDQorCQkJCSBWZWN0b3JQYWNrYWdlLkxpdGVyYWxzLlNJTVBMRV9ERU5HVUVfTU9ERUxfX1ZFQ1RPUl9BREUyLA0KKwkJCQkgdHJ1ZSwNCisJCQkJIGZhbHNlLA0KKwkJCQkgZmFsc2UsDQorCQkJCSBJdGVtUHJvcGVydHlEZXNjcmlwdG9yLlJFQUxfVkFMVUVfSU1BR0UsDQorCQkJCSBudWxsLA0KKwkJCQkgbnVsbCkpOw0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIGFkZHMgYSBwcm9wZXJ0eSBkZXNjcmlwdG9yIGZvciB0aGUgVmVjdG9yIEFERTMgZmVhdHVyZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCB2b2lkIGFkZFZlY3RvckFERTNQcm9wZXJ0eURlc2NyaXB0b3IoT2JqZWN0IG9iamVjdCkgew0KKwkJaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMuYWRkDQorCQkJKGNyZWF0ZUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3INCisJCQkJKCgoQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSlhZGFwdGVyRmFjdG9yeSkuZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCksDQorCQkJCSBnZXRSZXNvdXJjZUxvY2F0b3IoKSwNCisJCQkJIGdldFN0cmluZygiX1VJX1NpbXBsZURlbmd1ZU1vZGVsX3ZlY3RvckFERTNfZmVhdHVyZSIpLA0KKwkJCQkgZ2V0U3RyaW5nKCJfVUlfUHJvcGVydHlEZXNjcmlwdG9yX2Rlc2NyaXB0aW9uIiwgIl9VSV9TaW1wbGVEZW5ndWVNb2RlbF92ZWN0b3JBREUzX2ZlYXR1cmUiLCAiX1VJX1NpbXBsZURlbmd1ZU1vZGVsX3R5cGUiKSwNCisJCQkJIFZlY3RvclBhY2thZ2UuTGl0ZXJhbHMuU0lNUExFX0RFTkdVRV9NT0RFTF9fVkVDVE9SX0FERTMsDQorCQkJCSB0cnVlLA0KKwkJCQkgZmFsc2UsDQorCQkJCSBmYWxzZSwNCisJCQkJIEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IuUkVBTF9WQUxVRV9JTUFHRSwNCisJCQkJIG51bGwsDQorCQkJCSBudWxsKSk7DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgYWRkcyBhIHByb3BlcnR5IGRlc2NyaXB0b3IgZm9yIHRoZSBWZWN0b3IgQURFNCBmZWF0dXJlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIHZvaWQgYWRkVmVjdG9yQURFNFByb3BlcnR5RGVzY3JpcHRvcihPYmplY3Qgb2JqZWN0KSB7DQorCQlpdGVtUHJvcGVydHlEZXNjcmlwdG9ycy5hZGQNCisJCQkoY3JlYXRlSXRlbVByb3BlcnR5RGVzY3JpcHRvcg0KKwkJCQkoKChDb21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5KWFkYXB0ZXJGYWN0b3J5KS5nZXRSb290QWRhcHRlckZhY3RvcnkoKSwNCisJCQkJIGdldFJlc291cmNlTG9jYXRvcigpLA0KKwkJCQkgZ2V0U3RyaW5nKCJfVUlfU2ltcGxlRGVuZ3VlTW9kZWxfdmVjdG9yQURFNF9mZWF0dXJlIiksDQorCQkJCSBnZXRTdHJpbmcoIl9VSV9Qcm9wZXJ0eURlc2NyaXB0b3JfZGVzY3JpcHRpb24iLCAiX1VJX1NpbXBsZURlbmd1ZU1vZGVsX3ZlY3RvckFERTRfZmVhdHVyZSIsICJfVUlfU2ltcGxlRGVuZ3VlTW9kZWxfdHlwZSIpLA0KKwkJCQkgVmVjdG9yUGFja2FnZS5MaXRlcmFscy5TSU1QTEVfREVOR1VFX01PREVMX19WRUNUT1JfQURFNCwNCisJCQkJIHRydWUsDQorCQkJCSBmYWxzZSwNCisJCQkJIGZhbHNlLA0KKwkJCQkgSXRlbVByb3BlcnR5RGVzY3JpcHRvci5SRUFMX1ZBTFVFX0lNQUdFLA0KKwkJCQkgbnVsbCwNCisJCQkJIG51bGwpKTsNCisJfQ0KKw0KKwkvKioNCisJICogVGhpcyBhZGRzIGEgcHJvcGVydHkgZGVzY3JpcHRvciBmb3IgdGhlIFZlY3RvciBJbmN1YmF0aW9uIFJhdGUgZmVhdHVyZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCB2b2lkIGFkZFZlY3RvckluY3ViYXRpb25SYXRlUHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdCBvYmplY3QpIHsNCisJCWl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzLmFkZA0KKwkJCShjcmVhdGVJdGVtUHJvcGVydHlEZXNjcmlwdG9yDQorCQkJCSgoKENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnkpYWRhcHRlckZhY3RvcnkpLmdldFJvb3RBZGFwdGVyRmFjdG9yeSgpLA0KKwkJCQkgZ2V0UmVzb3VyY2VMb2NhdG9yKCksDQorCQkJCSBnZXRTdHJpbmcoIl9VSV9TaW1wbGVEZW5ndWVNb2RlbF92ZWN0b3JJbmN1YmF0aW9uUmF0ZV9mZWF0dXJlIiksDQorCQkJCSBnZXRTdHJpbmcoIl9VSV9Qcm9wZXJ0eURlc2NyaXB0b3JfZGVzY3JpcHRpb24iLCAiX1VJX1NpbXBsZURlbmd1ZU1vZGVsX3ZlY3RvckluY3ViYXRpb25SYXRlX2ZlYXR1cmUiLCAiX1VJX1NpbXBsZURlbmd1ZU1vZGVsX3R5cGUiKSwNCisJCQkJIFZlY3RvclBhY2thZ2UuTGl0ZXJhbHMuU0lNUExFX0RFTkdVRV9NT0RFTF9fVkVDVE9SX0lOQ1VCQVRJT05fUkFURSwNCisJCQkJIHRydWUsDQorCQkJCSBmYWxzZSwNCisJCQkJIGZhbHNlLA0KKwkJCQkgSXRlbVByb3BlcnR5RGVzY3JpcHRvci5SRUFMX1ZBTFVFX0lNQUdFLA0KKwkJCQkgbnVsbCwNCisJCQkJIG51bGwpKTsNCisJfQ0KKw0KKwkvKioNCisJICogVGhpcyByZXR1cm5zIFNpbXBsZURlbmd1ZU1vZGVsLmdpZi4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCUBPdmVycmlkZQ0KKwlwdWJsaWMgT2JqZWN0IGdldEltYWdlKE9iamVjdCBvYmplY3QpIHsNCisJCXJldHVybiBvdmVybGF5SW1hZ2Uob2JqZWN0LCBnZXRSZXNvdXJjZUxvY2F0b3IoKS5nZXRJbWFnZSgiZnVsbC9vYmoxNi9TaW1wbGVEZW5ndWVNb2RlbCIpKTsNCisJfQ0KKw0KKwkvKioNCisJICogVGhpcyByZXR1cm5zIHRoZSBsYWJlbCB0ZXh0IGZvciB0aGUgYWRhcHRlZCBjbGFzcy4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCUBPdmVycmlkZQ0KKwlwdWJsaWMgU3RyaW5nIGdldFRleHQoT2JqZWN0IG9iamVjdCkgew0KKwkJU3RyaW5nIGxhYmVsID0gKChTaW1wbGVEZW5ndWVNb2RlbClvYmplY3QpLmdldERpc2Vhc2VOYW1lKCk7DQorCQlyZXR1cm4gbGFiZWwgPT0gbnVsbCB8fCBsYWJlbC5sZW5ndGgoKSA9PSAwID8NCisJCQlnZXRTdHJpbmcoIl9VSV9TaW1wbGVEZW5ndWVNb2RlbF90eXBlIikgOg0KKwkJCWdldFN0cmluZygiX1VJX1NpbXBsZURlbmd1ZU1vZGVsX3R5cGUiKSArICIgIiArIGxhYmVsOw0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIGhhbmRsZXMgbW9kZWwgbm90aWZpY2F0aW9ucyBieSBjYWxsaW5nIHtAbGluayAjdXBkYXRlQ2hpbGRyZW59IHRvIHVwZGF0ZSBhbnkgY2FjaGVkDQorCSAqIGNoaWxkcmVuIGFuZCBieSBjcmVhdGluZyBhIHZpZXdlciBub3RpZmljYXRpb24sIHdoaWNoIGl0IHBhc3NlcyB0byB7QGxpbmsgI2ZpcmVOb3RpZnlDaGFuZ2VkfS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCUBPdmVycmlkZQ0KKwlwdWJsaWMgdm9pZCBub3RpZnlDaGFuZ2VkKE5vdGlmaWNhdGlvbiBub3RpZmljYXRpb24pIHsNCisJCXVwZGF0ZUNoaWxkcmVuKG5vdGlmaWNhdGlvbik7DQorDQorCQlzd2l0Y2ggKG5vdGlmaWNhdGlvbi5nZXRGZWF0dXJlSUQoU2ltcGxlRGVuZ3VlTW9kZWwuY2xhc3MpKSB7DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLlNJTVBMRV9ERU5HVUVfTU9ERUxfX0JJVElOR19SQVRFOg0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5TSU1QTEVfREVOR1VFX01PREVMX19IT1NUX0lORkVDVElWSVRZMToNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuU0lNUExFX0RFTkdVRV9NT0RFTF9fSE9TVF9JTkZFQ1RJVklUWTI6DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLlNJTVBMRV9ERU5HVUVfTU9ERUxfX0hPU1RfSU5GRUNUSVZJVFkzOg0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5TSU1QTEVfREVOR1VFX01PREVMX19IT1NUX0lORkVDVElWSVRZNDoNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuU0lNUExFX0RFTkdVRV9NT0RFTF9fSE9TVF9QUklNQVJZX0lOQ1VCQVRJT05fUkFURToNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuU0lNUExFX0RFTkdVRV9NT0RFTF9fSE9TVF9QUklNQVJZX1JFQ09WRVJZX1JBVEU6DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLlNJTVBMRV9ERU5HVUVfTU9ERUxfX0hPU1RfUFJJTUFSWV9JTU1VTklUWV9MT1NTX1JBVEU6DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLlNJTVBMRV9ERU5HVUVfTU9ERUxfX0hPU1RfUFJJTUFSWV9ERUFUSF9SQVRFOg0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5TSU1QTEVfREVOR1VFX01PREVMX19IT1NUX0FERTE6DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLlNJTVBMRV9ERU5HVUVfTU9ERUxfX0hPU1RfQURFMjoNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuU0lNUExFX0RFTkdVRV9NT0RFTF9fSE9TVF9BREUzOg0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5TSU1QTEVfREVOR1VFX01PREVMX19IT1NUX0FERTQ6DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLlNJTVBMRV9ERU5HVUVfTU9ERUxfX0hPU1RfU0VDT05EQVJZX0lOQ1VCQVRJT05fUkFURToNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuU0lNUExFX0RFTkdVRV9NT0RFTF9fSE9TVF9TRUNPTkRBUllfUkVDT1ZFUllfUkFURToNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuU0lNUExFX0RFTkdVRV9NT0RFTF9fSE9TVF9TRUNPTkRBUllfREVBVEhfUkFURToNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuU0lNUExFX0RFTkdVRV9NT0RFTF9fVkVDVE9SX0lORkVDVElWSVRZMToNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuU0lNUExFX0RFTkdVRV9NT0RFTF9fVkVDVE9SX0lORkVDVElWSVRZMjoNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuU0lNUExFX0RFTkdVRV9NT0RFTF9fVkVDVE9SX0lORkVDVElWSVRZMzoNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuU0lNUExFX0RFTkdVRV9NT0RFTF9fVkVDVE9SX0lORkVDVElWSVRZNDoNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuU0lNUExFX0RFTkdVRV9NT0RFTF9fVkVDVE9SX0FERTE6DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLlNJTVBMRV9ERU5HVUVfTU9ERUxfX1ZFQ1RPUl9BREUyOg0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5TSU1QTEVfREVOR1VFX01PREVMX19WRUNUT1JfQURFMzoNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuU0lNUExFX0RFTkdVRV9NT0RFTF9fVkVDVE9SX0FERTQ6DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLlNJTVBMRV9ERU5HVUVfTU9ERUxfX1ZFQ1RPUl9JTkNVQkFUSU9OX1JBVEU6DQorCQkJCWZpcmVOb3RpZnlDaGFuZ2VkKG5ldyBWaWV3ZXJOb3RpZmljYXRpb24obm90aWZpY2F0aW9uLCBub3RpZmljYXRpb24uZ2V0Tm90aWZpZXIoKSwgZmFsc2UsIHRydWUpKTsNCisJCQkJcmV0dXJuOw0KKwkJfQ0KKwkJc3VwZXIubm90aWZ5Q2hhbmdlZChub3RpZmljYXRpb24pOw0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIGFkZHMge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lZGl0LmNvbW1hbmQuQ29tbWFuZFBhcmFtZXRlcn1zIGRlc2NyaWJpbmcgdGhlIGNoaWxkcmVuDQorCSAqIHRoYXQgY2FuIGJlIGNyZWF0ZWQgdW5kZXIgdGhpcyBvYmplY3QuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlAT3ZlcnJpZGUNCisJcHJvdGVjdGVkIHZvaWQgY29sbGVjdE5ld0NoaWxkRGVzY3JpcHRvcnMoQ29sbGVjdGlvbjxPYmplY3Q+IG5ld0NoaWxkRGVzY3JpcHRvcnMsIE9iamVjdCBvYmplY3QpIHsNCisJCXN1cGVyLmNvbGxlY3ROZXdDaGlsZERlc2NyaXB0b3JzKG5ld0NoaWxkRGVzY3JpcHRvcnMsIG9iamVjdCk7DQorCX0NCisNCit9DQpkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvdmVjdG9yL3Byb3ZpZGVyL1ZlY3RvckRpc2Vhc2VNb2RlbEl0ZW1Qcm92aWRlci5qYXZhIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvdmVjdG9yL3Byb3ZpZGVyL1ZlY3RvckRpc2Vhc2VNb2RlbEl0ZW1Qcm92aWRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQwNjUxYTYKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3Ivc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy92ZWN0b3IvcHJvdmlkZXIvVmVjdG9yRGlzZWFzZU1vZGVsSXRlbVByb3ZpZGVyLmphdmEKQEAgLTAsMCArMSwxNDggQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5wcm92aWRlcjsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogCisgKiBDb3B5cmlnaHQgKGMpIDIwMTEgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuIAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyAKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0IAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwgCisgKiAKKyAqIENvbnRyaWJ1dG9yczogCisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LkFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuUmVzb3VyY2VMb2NhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkNvbXBvc2VhYmxlQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUVkaXRpbmdEb21haW5JdGVtUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1MYWJlbFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtUHJvcGVydHlEZXNjcmlwdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtUHJvcGVydHlTb3VyY2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVN0cnVjdHVyZWRJdGVtQ29udGVudFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklUcmVlSXRlbUNvbnRlbnRQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JdGVtUHJvcGVydHlEZXNjcmlwdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLlZpZXdlck5vdGlmaWNhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQucHJvdmlkZXIuU3RhbmRhcmREaXNlYXNlTW9kZWxJdGVtUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5WZWN0b3JEaXNlYXNlTW9kZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5WZWN0b3JQYWNrYWdlOworCisvKioKKyAqIFRoaXMgaXMgdGhlIGl0ZW0gcHJvdmlkZXIgYWRhcHRlciBmb3IgYSB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5WZWN0b3JEaXNlYXNlTW9kZWx9IG9iamVjdC4KKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIFZlY3RvckRpc2Vhc2VNb2RlbEl0ZW1Qcm92aWRlcgorCWV4dGVuZHMgU3RhbmRhcmREaXNlYXNlTW9kZWxJdGVtUHJvdmlkZXIKKwlpbXBsZW1lbnRzCisJCUlFZGl0aW5nRG9tYWluSXRlbVByb3ZpZGVyLAorCQlJU3RydWN0dXJlZEl0ZW1Db250ZW50UHJvdmlkZXIsCisJCUlUcmVlSXRlbUNvbnRlbnRQcm92aWRlciwKKwkJSUl0ZW1MYWJlbFByb3ZpZGVyLAorCQlJSXRlbVByb3BlcnR5U291cmNlIHsKKwkvKioKKwkgKiBUaGlzIGNvbnN0cnVjdHMgYW4gaW5zdGFuY2UgZnJvbSBhIGZhY3RvcnkgYW5kIGEgbm90aWZpZXIuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFZlY3RvckRpc2Vhc2VNb2RlbEl0ZW1Qcm92aWRlcihBZGFwdGVyRmFjdG9yeSBhZGFwdGVyRmFjdG9yeSkgeworCQlzdXBlcihhZGFwdGVyRmFjdG9yeSk7CisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIHRoZSBwcm9wZXJ0eSBkZXNjcmlwdG9ycyBmb3IgdGhlIGFkYXB0ZWQgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIExpc3Q8SUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I+IGdldFByb3BlcnR5RGVzY3JpcHRvcnMoT2JqZWN0IG9iamVjdCkgeworCQlpZiAoaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMgPT0gbnVsbCkgeworCQkJc3VwZXIuZ2V0UHJvcGVydHlEZXNjcmlwdG9ycyhvYmplY3QpOworCisJCQlhZGRWZWN0b3JQb3B1bGF0aW9uSWRlbnRpZmllclByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QpOworCQl9CisJCXJldHVybiBpdGVtUHJvcGVydHlEZXNjcmlwdG9yczsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFkZHMgYSBwcm9wZXJ0eSBkZXNjcmlwdG9yIGZvciB0aGUgVmVjdG9yIFBvcHVsYXRpb24gSWRlbnRpZmllciBmZWF0dXJlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIGFkZFZlY3RvclBvcHVsYXRpb25JZGVudGlmaWVyUHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdCBvYmplY3QpIHsKKwkJaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMuYWRkCisJCQkoY3JlYXRlSXRlbVByb3BlcnR5RGVzY3JpcHRvcgorCQkJCSgoKENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnkpYWRhcHRlckZhY3RvcnkpLmdldFJvb3RBZGFwdGVyRmFjdG9yeSgpLAorCQkJCSBnZXRSZXNvdXJjZUxvY2F0b3IoKSwKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfVmVjdG9yRGlzZWFzZU1vZGVsX3ZlY3RvclBvcHVsYXRpb25JZGVudGlmaWVyX2ZlYXR1cmUiKSwKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfUHJvcGVydHlEZXNjcmlwdG9yX2Rlc2NyaXB0aW9uIiwgIl9VSV9WZWN0b3JEaXNlYXNlTW9kZWxfdmVjdG9yUG9wdWxhdGlvbklkZW50aWZpZXJfZmVhdHVyZSIsICJfVUlfVmVjdG9yRGlzZWFzZU1vZGVsX3R5cGUiKSwKKwkJCQkgVmVjdG9yUGFja2FnZS5MaXRlcmFscy5WRUNUT1JfRElTRUFTRV9NT0RFTF9fVkVDVE9SX1BPUFVMQVRJT05fSURFTlRJRklFUiwKKwkJCQkgdHJ1ZSwKKwkJCQkgZmFsc2UsCisJCQkJIGZhbHNlLAorCQkJCSBJdGVtUHJvcGVydHlEZXNjcmlwdG9yLkdFTkVSSUNfVkFMVUVfSU1BR0UsCisJCQkJIG51bGwsCisJCQkJIG51bGwpKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgdGhlIGxhYmVsIHRleHQgZm9yIHRoZSBhZGFwdGVkIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgU3RyaW5nIGdldFRleHQoT2JqZWN0IG9iamVjdCkgeworCQlyZXR1cm4gc3VwZXIuZ2V0VGV4dChvYmplY3QpOworCX0KKworCS8qKgorCSAqIFRoaXMgaGFuZGxlcyBtb2RlbCBub3RpZmljYXRpb25zIGJ5IGNhbGxpbmcge0BsaW5rICN1cGRhdGVDaGlsZHJlbn0gdG8gdXBkYXRlIGFueSBjYWNoZWQKKwkgKiBjaGlsZHJlbiBhbmQgYnkgY3JlYXRpbmcgYSB2aWV3ZXIgbm90aWZpY2F0aW9uLCB3aGljaCBpdCBwYXNzZXMgdG8ge0BsaW5rICNmaXJlTm90aWZ5Q2hhbmdlZH0uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgbm90aWZ5Q2hhbmdlZChOb3RpZmljYXRpb24gbm90aWZpY2F0aW9uKSB7CisJCXVwZGF0ZUNoaWxkcmVuKG5vdGlmaWNhdGlvbik7CisKKwkJc3dpdGNoIChub3RpZmljYXRpb24uZ2V0RmVhdHVyZUlEKFZlY3RvckRpc2Vhc2VNb2RlbC5jbGFzcykpIHsKKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5WRUNUT1JfRElTRUFTRV9NT0RFTF9fVkVDVE9SX1BPUFVMQVRJT05fSURFTlRJRklFUjoKKwkJCQlmaXJlTm90aWZ5Q2hhbmdlZChuZXcgVmlld2VyTm90aWZpY2F0aW9uKG5vdGlmaWNhdGlvbiwgbm90aWZpY2F0aW9uLmdldE5vdGlmaWVyKCksIGZhbHNlLCB0cnVlKSk7CisJCQkJcmV0dXJuOworCQl9CisJCXN1cGVyLm5vdGlmeUNoYW5nZWQobm90aWZpY2F0aW9uKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFkZHMge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lZGl0LmNvbW1hbmQuQ29tbWFuZFBhcmFtZXRlcn1zIGRlc2NyaWJpbmcgdGhlIGNoaWxkcmVuCisJICogdGhhdCBjYW4gYmUgY3JlYXRlZCB1bmRlciB0aGlzIG9iamVjdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgdm9pZCBjb2xsZWN0TmV3Q2hpbGREZXNjcmlwdG9ycyhDb2xsZWN0aW9uPE9iamVjdD4gbmV3Q2hpbGREZXNjcmlwdG9ycywgT2JqZWN0IG9iamVjdCkgeworCQlzdXBlci5jb2xsZWN0TmV3Q2hpbGREZXNjcmlwdG9ycyhuZXdDaGlsZERlc2NyaXB0b3JzLCBvYmplY3QpOworCX0KKworCS8qKgorCSAqIFJldHVybiB0aGUgcmVzb3VyY2UgbG9jYXRvciBmb3IgdGhpcyBpdGVtIHByb3ZpZGVyJ3MgcmVzb3VyY2VzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBSZXNvdXJjZUxvY2F0b3IgZ2V0UmVzb3VyY2VMb2NhdG9yKCkgeworCQlyZXR1cm4gVmVjdG9yRWRpdFBsdWdpbi5JTlNUQU5DRTsKKwl9CisKK30KZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3ZlY3Rvci9wcm92aWRlci9WZWN0b3JFZGl0UGx1Z2luLmphdmEgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3Ivc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy92ZWN0b3IvcHJvdmlkZXIvVmVjdG9yRWRpdFBsdWdpbi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZlMzBlNzQKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3Ivc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy92ZWN0b3IvcHJvdmlkZXIvVmVjdG9yRWRpdFBsdWdpbi5qYXZhCkBAIC0wLDAgKzEsMTA3IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IucHJvdmlkZXI7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIAorICogQ29weXJpZ2h0IChjKSAyMDExIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiAKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdCAKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sIAorICogCisgKiBDb250cmlidXRvcnM6IAorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiAKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5FTUZQbHVnaW47CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlJlc291cmNlTG9jYXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUucHJvdmlkZXIuRWNvcmVFZGl0UGx1Z2luOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24ucHJvdmlkZXIuQ29yZUVkaXRQbHVnaW47CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5lZGdlcy5wcm92aWRlci5EZWZpbml0aW9uc0VkaXRQbHVnaW47CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLnByb3ZpZGVyLkRpc2Vhc2Vtb2RlbHNFZGl0UGx1Z2luOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5wcm92aWRlci5TdGFuZGFyZEVkaXRQbHVnaW47CisKKy8qKgorICogVGhpcyBpcyB0aGUgY2VudHJhbCBzaW5nbGV0b24gZm9yIHRoZSBWZWN0b3IgZWRpdCBwbHVnaW4uCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBmaW5hbCBjbGFzcyBWZWN0b3JFZGl0UGx1Z2luIGV4dGVuZHMgRU1GUGx1Z2luIHsKKwkvKioKKwkgKiBLZWVwIHRyYWNrIG9mIHRoZSBzaW5nbGV0b24uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBWZWN0b3JFZGl0UGx1Z2luIElOU1RBTkNFID0gbmV3IFZlY3RvckVkaXRQbHVnaW4oKTsKKworCS8qKgorCSAqIEtlZXAgdHJhY2sgb2YgdGhlIHNpbmdsZXRvbi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcml2YXRlIHN0YXRpYyBJbXBsZW1lbnRhdGlvbiBwbHVnaW47CisKKwkvKioKKwkgKiBDcmVhdGUgdGhlIGluc3RhbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBWZWN0b3JFZGl0UGx1Z2luKCkgeworCQlzdXBlcgorCQkgIChuZXcgUmVzb3VyY2VMb2NhdG9yIFtdIHsKKwkJICAgICBEaXNlYXNlbW9kZWxzRWRpdFBsdWdpbi5JTlNUQU5DRSwKKwkJICAgICBDb3JlRWRpdFBsdWdpbi5JTlNUQU5DRSwKKwkJICAgICBFY29yZUVkaXRQbHVnaW4uSU5TVEFOQ0UsCisJCSAgICAgRGVmaW5pdGlvbnNFZGl0UGx1Z2luLklOU1RBTkNFLAorCQkgICAgIFN0YW5kYXJkRWRpdFBsdWdpbi5JTlNUQU5DRSwKKwkJICAgfSk7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgc2luZ2xldG9uIGluc3RhbmNlIG9mIHRoZSBFY2xpcHNlIHBsdWdpbi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIHNpbmdsZXRvbiBpbnN0YW5jZS4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIFJlc291cmNlTG9jYXRvciBnZXRQbHVnaW5SZXNvdXJjZUxvY2F0b3IoKSB7CisJCXJldHVybiBwbHVnaW47CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgc2luZ2xldG9uIGluc3RhbmNlIG9mIHRoZSBFY2xpcHNlIHBsdWdpbi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIHNpbmdsZXRvbiBpbnN0YW5jZS4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHN0YXRpYyBJbXBsZW1lbnRhdGlvbiBnZXRQbHVnaW4oKSB7CisJCXJldHVybiBwbHVnaW47CisJfQorCisJLyoqCisJICogVGhlIGFjdHVhbCBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgRWNsaXBzZSA8Yj5QbHVnaW48L2I+LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBzdGF0aWMgY2xhc3MgSW1wbGVtZW50YXRpb24gZXh0ZW5kcyBFY2xpcHNlUGx1Z2luIHsKKwkJLyoqCisJCSAqIENyZWF0ZXMgYW4gaW5zdGFuY2UuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlwdWJsaWMgSW1wbGVtZW50YXRpb24oKSB7CisJCQlzdXBlcigpOworCisJCQkvLyBSZW1lbWJlciB0aGUgc3RhdGljIGluc3RhbmNlLgorCQkJLy8KKwkJCXBsdWdpbiA9IHRoaXM7CisJCX0KKwl9CisKK30KZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3ZlY3Rvci9wcm92aWRlci9WZWN0b3JJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeS5qYXZhIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvdmVjdG9yL3Byb3ZpZGVyL1ZlY3Rvckl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjFkNWMzYQotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3ZlY3Rvci9wcm92aWRlci9WZWN0b3JJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeS5qYXZhCkBAIC0wLDAgKzEsMzUwIEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IucHJvdmlkZXI7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIAorICogQ29weXJpZ2h0IChjKSAyMDExIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiAKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdCAKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sIAorICogCisgKiBDb250cmlidXRvcnM6IAorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiAKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LkFkYXB0ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkNoYW5nZU5vdGlmaWVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkNvbXBvc2VhYmxlQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuQ29tcG9zZWRBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JQ2hhbmdlTm90aWZpZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSURpc3Bvc2FibGU7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUVkaXRpbmdEb21haW5JdGVtUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1MYWJlbFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtUHJvcGVydHlTb3VyY2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSU5vdGlmeUNoYW5nZWRMaXN0ZW5lcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JU3RydWN0dXJlZEl0ZW1Db250ZW50UHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVRyZWVJdGVtQ29udGVudFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IudXRpbC5WZWN0b3JBZGFwdGVyRmFjdG9yeTsKKworLyoqCisgKiBUaGlzIGlzIHRoZSBmYWN0b3J5IHRoYXQgaXMgdXNlZCB0byBwcm92aWRlIHRoZSBpbnRlcmZhY2VzIG5lZWRlZCB0byBzdXBwb3J0IFZpZXdlcnMuCisgKiBUaGUgYWRhcHRlcnMgZ2VuZXJhdGVkIGJ5IHRoaXMgZmFjdG9yeSBjb252ZXJ0IEVNRiBhZGFwdGVyIG5vdGlmaWNhdGlvbnMgaW50byBjYWxscyB0byB7QGxpbmsgI2ZpcmVOb3RpZnlDaGFuZ2VkIGZpcmVOb3RpZnlDaGFuZ2VkfS4KKyAqIFRoZSBhZGFwdGVycyBhbHNvIHN1cHBvcnQgRWNsaXBzZSBwcm9wZXJ0eSBzaGVldHMuCisgKiBOb3RlIHRoYXQgbW9zdCBvZiB0aGUgYWRhcHRlcnMgYXJlIHNoYXJlZCBhbW9uZyBtdWx0aXBsZSBpbnN0YW5jZXMuCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBWZWN0b3JJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSBleHRlbmRzIFZlY3RvckFkYXB0ZXJGYWN0b3J5IGltcGxlbWVudHMgQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSwgSUNoYW5nZU5vdGlmaWVyLCBJRGlzcG9zYWJsZSB7CisJLyoqCisJICogVGhpcyBrZWVwcyB0cmFjayBvZiB0aGUgcm9vdCBhZGFwdGVyIGZhY3RvcnkgdGhhdCBkZWxlZ2F0ZXMgdG8gdGhpcyBhZGFwdGVyIGZhY3RvcnkuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIENvbXBvc2VkQWRhcHRlckZhY3RvcnkgcGFyZW50QWRhcHRlckZhY3Rvcnk7CisKKwkvKioKKwkgKiBUaGlzIGlzIHVzZWQgdG8gaW1wbGVtZW50IHtAbGluayBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JQ2hhbmdlTm90aWZpZXJ9LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBJQ2hhbmdlTm90aWZpZXIgY2hhbmdlTm90aWZpZXIgPSBuZXcgQ2hhbmdlTm90aWZpZXIoKTsKKworCS8qKgorCSAqIFRoaXMga2VlcHMgdHJhY2sgb2YgYWxsIHRoZSBzdXBwb3J0ZWQgdHlwZXMgY2hlY2tlZCBieSB7QGxpbmsgI2lzRmFjdG9yeUZvclR5cGUgaXNGYWN0b3J5Rm9yVHlwZX0uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIENvbGxlY3Rpb248T2JqZWN0PiBzdXBwb3J0ZWRUeXBlcyA9IG5ldyBBcnJheUxpc3Q8T2JqZWN0PigpOworCisJLyoqCisJICogVGhpcyBjb25zdHJ1Y3RzIGFuIGluc3RhbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBWZWN0b3JJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSgpIHsKKwkJc3VwcG9ydGVkVHlwZXMuYWRkKElFZGl0aW5nRG9tYWluSXRlbVByb3ZpZGVyLmNsYXNzKTsKKwkJc3VwcG9ydGVkVHlwZXMuYWRkKElTdHJ1Y3R1cmVkSXRlbUNvbnRlbnRQcm92aWRlci5jbGFzcyk7CisJCXN1cHBvcnRlZFR5cGVzLmFkZChJVHJlZUl0ZW1Db250ZW50UHJvdmlkZXIuY2xhc3MpOworCQlzdXBwb3J0ZWRUeXBlcy5hZGQoSUl0ZW1MYWJlbFByb3ZpZGVyLmNsYXNzKTsKKwkJc3VwcG9ydGVkVHlwZXMuYWRkKElJdGVtUHJvcGVydHlTb3VyY2UuY2xhc3MpOworCX0KKworCS8qKgorCSAqIFRoaXMga2VlcHMgdHJhY2sgb2YgdGhlIG9uZSBhZGFwdGVyIHVzZWQgZm9yIGFsbCB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5NYWNkb25hbGRSb3NzRGlzZWFzZU1vZGVsfSBpbnN0YW5jZXMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIE1hY2RvbmFsZFJvc3NEaXNlYXNlTW9kZWxJdGVtUHJvdmlkZXIgbWFjZG9uYWxkUm9zc0Rpc2Vhc2VNb2RlbEl0ZW1Qcm92aWRlcjsKKworCS8qKgorCSAqIFRoaXMgY3JlYXRlcyBhbiBhZGFwdGVyIGZvciBhIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLk1hY2RvbmFsZFJvc3NEaXNlYXNlTW9kZWx9LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZU1hY2RvbmFsZFJvc3NEaXNlYXNlTW9kZWxBZGFwdGVyKCkgeworCQlpZiAobWFjZG9uYWxkUm9zc0Rpc2Vhc2VNb2RlbEl0ZW1Qcm92aWRlciA9PSBudWxsKSB7CisJCQltYWNkb25hbGRSb3NzRGlzZWFzZU1vZGVsSXRlbVByb3ZpZGVyID0gbmV3IE1hY2RvbmFsZFJvc3NEaXNlYXNlTW9kZWxJdGVtUHJvdmlkZXIodGhpcyk7CisJCX0KKworCQlyZXR1cm4gbWFjZG9uYWxkUm9zc0Rpc2Vhc2VNb2RlbEl0ZW1Qcm92aWRlcjsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGtlZXBzIHRyYWNrIG9mIHRoZSBvbmUgYWRhcHRlciB1c2VkIGZvciBhbGwge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWx9IGluc3RhbmNlcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgRGVuZ3VlTW9kZWxJdGVtUHJvdmlkZXIgZGVuZ3VlTW9kZWxJdGVtUHJvdmlkZXI7CisKKwkvKioKKwkgKiBUaGlzIGNyZWF0ZXMgYW4gYWRhcHRlciBmb3IgYSB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbH0uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlRGVuZ3VlTW9kZWxBZGFwdGVyKCkgeworCQlpZiAoZGVuZ3VlTW9kZWxJdGVtUHJvdmlkZXIgPT0gbnVsbCkgeworCQkJZGVuZ3VlTW9kZWxJdGVtUHJvdmlkZXIgPSBuZXcgRGVuZ3VlTW9kZWxJdGVtUHJvdmlkZXIodGhpcyk7CisJCX0KKworCQlyZXR1cm4gZGVuZ3VlTW9kZWxJdGVtUHJvdmlkZXI7CisJfQorCisJLyoqCisJICogVGhpcyBrZWVwcyB0cmFjayBvZiB0aGUgb25lIGFkYXB0ZXIgdXNlZCBmb3IgYWxsIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLlNpbXBsZURlbmd1ZU1vZGVsfSBpbnN0YW5jZXMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIFNpbXBsZURlbmd1ZU1vZGVsSXRlbVByb3ZpZGVyIHNpbXBsZURlbmd1ZU1vZGVsSXRlbVByb3ZpZGVyOworCisJLyoqCisJICogVGhpcyBjcmVhdGVzIGFuIGFkYXB0ZXIgZm9yIGEge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuU2ltcGxlRGVuZ3VlTW9kZWx9LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZVNpbXBsZURlbmd1ZU1vZGVsQWRhcHRlcigpIHsKKwkJaWYgKHNpbXBsZURlbmd1ZU1vZGVsSXRlbVByb3ZpZGVyID09IG51bGwpIHsKKwkJCXNpbXBsZURlbmd1ZU1vZGVsSXRlbVByb3ZpZGVyID0gbmV3IFNpbXBsZURlbmd1ZU1vZGVsSXRlbVByb3ZpZGVyKHRoaXMpOworCQl9CisKKwkJcmV0dXJuIHNpbXBsZURlbmd1ZU1vZGVsSXRlbVByb3ZpZGVyOworCX0KKworCS8qKgorCSAqIFRoaXMga2VlcHMgdHJhY2sgb2YgdGhlIG9uZSBhZGFwdGVyIHVzZWQgZm9yIGFsbCB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbEhvc3RMYWJlbH0gaW5zdGFuY2VzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBEZW5ndWVNb2RlbEhvc3RMYWJlbEl0ZW1Qcm92aWRlciBkZW5ndWVNb2RlbEhvc3RMYWJlbEl0ZW1Qcm92aWRlcjsKKworCS8qKgorCSAqIFRoaXMgY3JlYXRlcyBhbiBhZGFwdGVyIGZvciBhIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLkRlbmd1ZU1vZGVsSG9zdExhYmVsfS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVEZW5ndWVNb2RlbEhvc3RMYWJlbEFkYXB0ZXIoKSB7CisJCWlmIChkZW5ndWVNb2RlbEhvc3RMYWJlbEl0ZW1Qcm92aWRlciA9PSBudWxsKSB7CisJCQlkZW5ndWVNb2RlbEhvc3RMYWJlbEl0ZW1Qcm92aWRlciA9IG5ldyBEZW5ndWVNb2RlbEhvc3RMYWJlbEl0ZW1Qcm92aWRlcih0aGlzKTsKKwkJfQorCisJCXJldHVybiBkZW5ndWVNb2RlbEhvc3RMYWJlbEl0ZW1Qcm92aWRlcjsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGtlZXBzIHRyYWNrIG9mIHRoZSBvbmUgYWRhcHRlciB1c2VkIGZvciBhbGwge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZX0gaW5zdGFuY2VzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBEZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlSXRlbVByb3ZpZGVyIGRlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVJdGVtUHJvdmlkZXI7CisKKwkvKioKKwkgKiBUaGlzIGNyZWF0ZXMgYW4gYWRhcHRlciBmb3IgYSB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlfS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVEZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlQWRhcHRlcigpIHsKKwkJaWYgKGRlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVJdGVtUHJvdmlkZXIgPT0gbnVsbCkgeworCQkJZGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZUl0ZW1Qcm92aWRlciA9IG5ldyBEZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlSXRlbVByb3ZpZGVyKHRoaXMpOworCQl9CisKKwkJcmV0dXJuIGRlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVJdGVtUHJvdmlkZXI7CisJfQorCisJLyoqCisJICogVGhpcyBrZWVwcyB0cmFjayBvZiB0aGUgb25lIGFkYXB0ZXIgdXNlZCBmb3IgYWxsIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLkRlbmd1ZU1vZGVsVmVjdG9yTGFiZWx9IGluc3RhbmNlcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgRGVuZ3VlTW9kZWxWZWN0b3JMYWJlbEl0ZW1Qcm92aWRlciBkZW5ndWVNb2RlbFZlY3RvckxhYmVsSXRlbVByb3ZpZGVyOworCisJLyoqCisJICogVGhpcyBjcmVhdGVzIGFuIGFkYXB0ZXIgZm9yIGEge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWxWZWN0b3JMYWJlbH0uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlRGVuZ3VlTW9kZWxWZWN0b3JMYWJlbEFkYXB0ZXIoKSB7CisJCWlmIChkZW5ndWVNb2RlbFZlY3RvckxhYmVsSXRlbVByb3ZpZGVyID09IG51bGwpIHsKKwkJCWRlbmd1ZU1vZGVsVmVjdG9yTGFiZWxJdGVtUHJvdmlkZXIgPSBuZXcgRGVuZ3VlTW9kZWxWZWN0b3JMYWJlbEl0ZW1Qcm92aWRlcih0aGlzKTsKKwkJfQorCisJCXJldHVybiBkZW5ndWVNb2RlbFZlY3RvckxhYmVsSXRlbVByb3ZpZGVyOworCX0KKworCS8qKgorCSAqIFRoaXMga2VlcHMgdHJhY2sgb2YgdGhlIG9uZSBhZGFwdGVyIHVzZWQgZm9yIGFsbCB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbFZlY3RvckxhYmVsVmFsdWV9IGluc3RhbmNlcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgRGVuZ3VlTW9kZWxWZWN0b3JMYWJlbFZhbHVlSXRlbVByb3ZpZGVyIGRlbmd1ZU1vZGVsVmVjdG9yTGFiZWxWYWx1ZUl0ZW1Qcm92aWRlcjsKKworCS8qKgorCSAqIFRoaXMgY3JlYXRlcyBhbiBhZGFwdGVyIGZvciBhIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLkRlbmd1ZU1vZGVsVmVjdG9yTGFiZWxWYWx1ZX0uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlRGVuZ3VlTW9kZWxWZWN0b3JMYWJlbFZhbHVlQWRhcHRlcigpIHsKKwkJaWYgKGRlbmd1ZU1vZGVsVmVjdG9yTGFiZWxWYWx1ZUl0ZW1Qcm92aWRlciA9PSBudWxsKSB7CisJCQlkZW5ndWVNb2RlbFZlY3RvckxhYmVsVmFsdWVJdGVtUHJvdmlkZXIgPSBuZXcgRGVuZ3VlTW9kZWxWZWN0b3JMYWJlbFZhbHVlSXRlbVByb3ZpZGVyKHRoaXMpOworCQl9CisKKwkJcmV0dXJuIGRlbmd1ZU1vZGVsVmVjdG9yTGFiZWxWYWx1ZUl0ZW1Qcm92aWRlcjsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgdGhlIHJvb3QgYWRhcHRlciBmYWN0b3J5IHRoYXQgY29udGFpbnMgdGhpcyBmYWN0b3J5LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBDb21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5IGdldFJvb3RBZGFwdGVyRmFjdG9yeSgpIHsKKwkJcmV0dXJuIHBhcmVudEFkYXB0ZXJGYWN0b3J5ID09IG51bGwgPyB0aGlzIDogcGFyZW50QWRhcHRlckZhY3RvcnkuZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCk7CisJfQorCisJLyoqCisJICogVGhpcyBzZXRzIHRoZSBjb21wb3NlZCBhZGFwdGVyIGZhY3RvcnkgdGhhdCBjb250YWlucyB0aGlzIGZhY3RvcnkuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgc2V0UGFyZW50QWRhcHRlckZhY3RvcnkoQ29tcG9zZWRBZGFwdGVyRmFjdG9yeSBwYXJlbnRBZGFwdGVyRmFjdG9yeSkgeworCQl0aGlzLnBhcmVudEFkYXB0ZXJGYWN0b3J5ID0gcGFyZW50QWRhcHRlckZhY3Rvcnk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIGJvb2xlYW4gaXNGYWN0b3J5Rm9yVHlwZShPYmplY3QgdHlwZSkgeworCQlyZXR1cm4gc3VwcG9ydGVkVHlwZXMuY29udGFpbnModHlwZSkgfHwgc3VwZXIuaXNGYWN0b3J5Rm9yVHlwZSh0eXBlKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGltcGxlbWVudGF0aW9uIHN1YnN0aXR1dGVzIHRoZSBmYWN0b3J5IGl0c2VsZiBhcyB0aGUga2V5IGZvciB0aGUgYWRhcHRlci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgQWRhcHRlciBhZGFwdChOb3RpZmllciBub3RpZmllciwgT2JqZWN0IHR5cGUpIHsKKwkJcmV0dXJuIHN1cGVyLmFkYXB0KG5vdGlmaWVyLCB0aGlzKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgT2JqZWN0IGFkYXB0KE9iamVjdCBvYmplY3QsIE9iamVjdCB0eXBlKSB7CisJCWlmIChpc0ZhY3RvcnlGb3JUeXBlKHR5cGUpKSB7CisJCQlPYmplY3QgYWRhcHRlciA9IHN1cGVyLmFkYXB0KG9iamVjdCwgdHlwZSk7CisJCQlpZiAoISh0eXBlIGluc3RhbmNlb2YgQ2xhc3M8Pz4pIHx8ICgoKENsYXNzPD8+KXR5cGUpLmlzSW5zdGFuY2UoYWRhcHRlcikpKSB7CisJCQkJcmV0dXJuIGFkYXB0ZXI7CisJCQl9CisJCX0KKworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFkZHMgYSBsaXN0ZW5lci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBhZGRMaXN0ZW5lcihJTm90aWZ5Q2hhbmdlZExpc3RlbmVyIG5vdGlmeUNoYW5nZWRMaXN0ZW5lcikgeworCQljaGFuZ2VOb3RpZmllci5hZGRMaXN0ZW5lcihub3RpZnlDaGFuZ2VkTGlzdGVuZXIpOworCX0KKworCS8qKgorCSAqIFRoaXMgcmVtb3ZlcyBhIGxpc3RlbmVyLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIHJlbW92ZUxpc3RlbmVyKElOb3RpZnlDaGFuZ2VkTGlzdGVuZXIgbm90aWZ5Q2hhbmdlZExpc3RlbmVyKSB7CisJCWNoYW5nZU5vdGlmaWVyLnJlbW92ZUxpc3RlbmVyKG5vdGlmeUNoYW5nZWRMaXN0ZW5lcik7CisJfQorCisJLyoqCisJICogVGhpcyBkZWxlZ2F0ZXMgdG8ge0BsaW5rICNjaGFuZ2VOb3RpZmllcn0gYW5kIHRvIHtAbGluayAjcGFyZW50QWRhcHRlckZhY3Rvcnl9LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIGZpcmVOb3RpZnlDaGFuZ2VkKE5vdGlmaWNhdGlvbiBub3RpZmljYXRpb24pIHsKKwkJY2hhbmdlTm90aWZpZXIuZmlyZU5vdGlmeUNoYW5nZWQobm90aWZpY2F0aW9uKTsKKworCQlpZiAocGFyZW50QWRhcHRlckZhY3RvcnkgIT0gbnVsbCkgeworCQkJcGFyZW50QWRhcHRlckZhY3RvcnkuZmlyZU5vdGlmeUNoYW5nZWQobm90aWZpY2F0aW9uKTsKKwkJfQorCX0KKworCS8qKgorCSAqIFRoaXMgZGlzcG9zZXMgYWxsIG9mIHRoZSBpdGVtIHByb3ZpZGVycyBjcmVhdGVkIGJ5IHRoaXMgZmFjdG9yeS4gCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgZGlzcG9zZSgpIHsKKwkJaWYgKG1hY2RvbmFsZFJvc3NEaXNlYXNlTW9kZWxJdGVtUHJvdmlkZXIgIT0gbnVsbCkgbWFjZG9uYWxkUm9zc0Rpc2Vhc2VNb2RlbEl0ZW1Qcm92aWRlci5kaXNwb3NlKCk7CisJCWlmIChkZW5ndWVNb2RlbEl0ZW1Qcm92aWRlciAhPSBudWxsKSBkZW5ndWVNb2RlbEl0ZW1Qcm92aWRlci5kaXNwb3NlKCk7CisJCWlmIChzaW1wbGVEZW5ndWVNb2RlbEl0ZW1Qcm92aWRlciAhPSBudWxsKSBzaW1wbGVEZW5ndWVNb2RlbEl0ZW1Qcm92aWRlci5kaXNwb3NlKCk7CisJCWlmIChkZW5ndWVNb2RlbEhvc3RMYWJlbEl0ZW1Qcm92aWRlciAhPSBudWxsKSBkZW5ndWVNb2RlbEhvc3RMYWJlbEl0ZW1Qcm92aWRlci5kaXNwb3NlKCk7CisJCWlmIChkZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlSXRlbVByb3ZpZGVyICE9IG51bGwpIGRlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVJdGVtUHJvdmlkZXIuZGlzcG9zZSgpOworCQlpZiAoZGVuZ3VlTW9kZWxWZWN0b3JMYWJlbEl0ZW1Qcm92aWRlciAhPSBudWxsKSBkZW5ndWVNb2RlbFZlY3RvckxhYmVsSXRlbVByb3ZpZGVyLmRpc3Bvc2UoKTsKKwkJaWYgKGRlbmd1ZU1vZGVsVmVjdG9yTGFiZWxWYWx1ZUl0ZW1Qcm92aWRlciAhPSBudWxsKSBkZW5ndWVNb2RlbFZlY3RvckxhYmVsVmFsdWVJdGVtUHJvdmlkZXIuZGlzcG9zZSgpOworCX0KKworfQpkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvdmVjdG9yL3V0aWwvVmVjdG9yQWRhcHRlckZhY3RvcnkuamF2YSBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3ZlY3Rvci91dGlsL1ZlY3RvckFkYXB0ZXJGYWN0b3J5LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjFhNjU0NAotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3ZlY3Rvci91dGlsL1ZlY3RvckFkYXB0ZXJGYWN0b3J5LmphdmEKQEAgLTAsMCArMSw2MzQgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci51dGlsOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAKKyAqIENvcHlyaWdodCAoYykgMjAxMSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4gCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIAorICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wIAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQgCisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbCAKKyAqIAorICogQ29udHJpYnV0b3JzOiAKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LkFkYXB0ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuaW1wbC5BZGFwdGVyRmFjdG9yeUltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3Q7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5JZGVudGlmaWFibGU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5TYW5pdHlDaGVja2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5EeW5hbWljTGFiZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkR5bmFtaWNOb2RlTGFiZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkludGVncmF0aW9uTGFiZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkludGVncmF0aW9uTGFiZWxWYWx1ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguTGFiZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkxhYmVsVmFsdWU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLk5vZGVMYWJlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuRGVjb3JhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5JbnRlZ3JhdGlvbkRlY29yYXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuTm9kZURlY29yYXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuTW9kaWZpYWJsZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuRGlzZWFzZU1vZGVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5EaXNlYXNlTW9kZWxMYWJlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmREaXNlYXNlTW9kZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLio7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5NYWNkb25hbGRSb3NzRGlzZWFzZU1vZGVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuVmVjdG9yRGlzZWFzZU1vZGVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuVmVjdG9yUGFja2FnZTsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogVGhlIDxiPkFkYXB0ZXIgRmFjdG9yeTwvYj4gZm9yIHRoZSBtb2RlbC4KKyAqIEl0IHByb3ZpZGVzIGFuIGFkYXB0ZXIgPGNvZGU+Y3JlYXRlWFhYPC9jb2RlPiBtZXRob2QgZm9yIGVhY2ggY2xhc3Mgb2YgdGhlIG1vZGVsLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuVmVjdG9yUGFja2FnZQorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgVmVjdG9yQWRhcHRlckZhY3RvcnkgZXh0ZW5kcyBBZGFwdGVyRmFjdG9yeUltcGwgeworCS8qKgorCSAqIFRoZSBjYWNoZWQgbW9kZWwgcGFja2FnZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgc3RhdGljIFZlY3RvclBhY2thZ2UgbW9kZWxQYWNrYWdlOworCisJLyoqCisJICogQ3JlYXRlcyBhbiBpbnN0YW5jZSBvZiB0aGUgYWRhcHRlciBmYWN0b3J5LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBWZWN0b3JBZGFwdGVyRmFjdG9yeSgpIHsKKwkJaWYgKG1vZGVsUGFja2FnZSA9PSBudWxsKSB7CisJCQltb2RlbFBhY2thZ2UgPSBWZWN0b3JQYWNrYWdlLmVJTlNUQU5DRTsKKwkJfQorCX0KKworCS8qKgorCSAqIFJldHVybnMgd2hldGhlciB0aGlzIGZhY3RvcnkgaXMgYXBwbGljYWJsZSBmb3IgdGhlIHR5cGUgb2YgdGhlIG9iamVjdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyA8Y29kZT50cnVlPC9jb2RlPiBpZiB0aGUgb2JqZWN0IGlzIGVpdGhlciB0aGUgbW9kZWwncyBwYWNrYWdlIG9yIGlzIGFuIGluc3RhbmNlIG9iamVjdCBvZiB0aGUgbW9kZWwuCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB3aGV0aGVyIHRoaXMgZmFjdG9yeSBpcyBhcHBsaWNhYmxlIGZvciB0aGUgdHlwZSBvZiB0aGUgb2JqZWN0LgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgYm9vbGVhbiBpc0ZhY3RvcnlGb3JUeXBlKE9iamVjdCBvYmplY3QpIHsKKwkJaWYgKG9iamVjdCA9PSBtb2RlbFBhY2thZ2UpIHsKKwkJCXJldHVybiB0cnVlOworCQl9CisJCWlmIChvYmplY3QgaW5zdGFuY2VvZiBFT2JqZWN0KSB7CisJCQlyZXR1cm4gKChFT2JqZWN0KW9iamVjdCkuZUNsYXNzKCkuZ2V0RVBhY2thZ2UoKSA9PSBtb2RlbFBhY2thZ2U7CisJCX0KKwkJcmV0dXJuIGZhbHNlOworCX0KKworCS8qKgorCSAqIFRoZSBzd2l0Y2ggdGhhdCBkZWxlZ2F0ZXMgdG8gdGhlIDxjb2RlPmNyZWF0ZVhYWDwvY29kZT4gbWV0aG9kcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgVmVjdG9yU3dpdGNoPEFkYXB0ZXI+IG1vZGVsU3dpdGNoID0KKwkJbmV3IFZlY3RvclN3aXRjaDxBZGFwdGVyPigpIHsKKwkJCUBPdmVycmlkZQorCQkJcHVibGljIEFkYXB0ZXIgY2FzZU1hY2RvbmFsZFJvc3NEaXNlYXNlTW9kZWwoTWFjZG9uYWxkUm9zc0Rpc2Vhc2VNb2RlbCBvYmplY3QpIHsKKwkJCQlyZXR1cm4gY3JlYXRlTWFjZG9uYWxkUm9zc0Rpc2Vhc2VNb2RlbEFkYXB0ZXIoKTsKKwkJCX0KKwkJCUBPdmVycmlkZQorCQkJcHVibGljIEFkYXB0ZXIgY2FzZVZlY3RvckRpc2Vhc2VNb2RlbChWZWN0b3JEaXNlYXNlTW9kZWwgb2JqZWN0KSB7CisJCQkJcmV0dXJuIGNyZWF0ZVZlY3RvckRpc2Vhc2VNb2RlbEFkYXB0ZXIoKTsKKwkJCX0KKwkJCUBPdmVycmlkZQorCQkJcHVibGljIEFkYXB0ZXIgY2FzZURlbmd1ZU1vZGVsKERlbmd1ZU1vZGVsIG9iamVjdCkgeworCQkJCXJldHVybiBjcmVhdGVEZW5ndWVNb2RlbEFkYXB0ZXIoKTsKKwkJCX0KKwkJCUBPdmVycmlkZQorCQkJcHVibGljIEFkYXB0ZXIgY2FzZVNpbXBsZURlbmd1ZU1vZGVsKFNpbXBsZURlbmd1ZU1vZGVsIG9iamVjdCkgeworCQkJCXJldHVybiBjcmVhdGVTaW1wbGVEZW5ndWVNb2RlbEFkYXB0ZXIoKTsKKwkJCX0KKwkJCUBPdmVycmlkZQorCQkJcHVibGljIEFkYXB0ZXIgY2FzZURlbmd1ZU1vZGVsSG9zdExhYmVsKERlbmd1ZU1vZGVsSG9zdExhYmVsIG9iamVjdCkgeworCQkJCXJldHVybiBjcmVhdGVEZW5ndWVNb2RlbEhvc3RMYWJlbEFkYXB0ZXIoKTsKKwkJCX0KKwkJCUBPdmVycmlkZQorCQkJcHVibGljIEFkYXB0ZXIgY2FzZURlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWUoRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZSBvYmplY3QpIHsKKwkJCQlyZXR1cm4gY3JlYXRlRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZUFkYXB0ZXIoKTsKKwkJCX0KKwkJCUBPdmVycmlkZQorCQkJcHVibGljIEFkYXB0ZXIgY2FzZURlbmd1ZU1vZGVsVmVjdG9yTGFiZWwoRGVuZ3VlTW9kZWxWZWN0b3JMYWJlbCBvYmplY3QpIHsKKwkJCQlyZXR1cm4gY3JlYXRlRGVuZ3VlTW9kZWxWZWN0b3JMYWJlbEFkYXB0ZXIoKTsKKwkJCX0KKwkJCUBPdmVycmlkZQorCQkJcHVibGljIEFkYXB0ZXIgY2FzZURlbmd1ZU1vZGVsVmVjdG9yTGFiZWxWYWx1ZShEZW5ndWVNb2RlbFZlY3RvckxhYmVsVmFsdWUgb2JqZWN0KSB7CisJCQkJcmV0dXJuIGNyZWF0ZURlbmd1ZU1vZGVsVmVjdG9yTGFiZWxWYWx1ZUFkYXB0ZXIoKTsKKwkJCX0KKwkJCUBPdmVycmlkZQorCQkJcHVibGljIDxUPiBBZGFwdGVyIGNhc2VDb21wYXJhYmxlKENvbXBhcmFibGU8VD4gb2JqZWN0KSB7CisJCQkJcmV0dXJuIGNyZWF0ZUNvbXBhcmFibGVBZGFwdGVyKCk7CisJCQl9CisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyBBZGFwdGVyIGNhc2VTYW5pdHlDaGVja2VyKFNhbml0eUNoZWNrZXIgb2JqZWN0KSB7CisJCQkJcmV0dXJuIGNyZWF0ZVNhbml0eUNoZWNrZXJBZGFwdGVyKCk7CisJCQl9CisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyBBZGFwdGVyIGNhc2VJZGVudGlmaWFibGUoSWRlbnRpZmlhYmxlIG9iamVjdCkgeworCQkJCXJldHVybiBjcmVhdGVJZGVudGlmaWFibGVBZGFwdGVyKCk7CisJCQl9CisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyBBZGFwdGVyIGNhc2VEZWNvcmF0b3IoRGVjb3JhdG9yIG9iamVjdCkgeworCQkJCXJldHVybiBjcmVhdGVEZWNvcmF0b3JBZGFwdGVyKCk7CisJCQl9CisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyBBZGFwdGVyIGNhc2VOb2RlRGVjb3JhdG9yKE5vZGVEZWNvcmF0b3Igb2JqZWN0KSB7CisJCQkJcmV0dXJuIGNyZWF0ZU5vZGVEZWNvcmF0b3JBZGFwdGVyKCk7CisJCQl9CisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyBBZGFwdGVyIGNhc2VJbnRlZ3JhdGlvbkRlY29yYXRvcihJbnRlZ3JhdGlvbkRlY29yYXRvciBvYmplY3QpIHsKKwkJCQlyZXR1cm4gY3JlYXRlSW50ZWdyYXRpb25EZWNvcmF0b3JBZGFwdGVyKCk7CisJCQl9CisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyBBZGFwdGVyIGNhc2VNb2RpZmlhYmxlKE1vZGlmaWFibGUgb2JqZWN0KSB7CisJCQkJcmV0dXJuIGNyZWF0ZU1vZGlmaWFibGVBZGFwdGVyKCk7CisJCQl9CisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyBBZGFwdGVyIGNhc2VEaXNlYXNlTW9kZWwoRGlzZWFzZU1vZGVsIG9iamVjdCkgeworCQkJCXJldHVybiBjcmVhdGVEaXNlYXNlTW9kZWxBZGFwdGVyKCk7CisJCQl9CisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyBBZGFwdGVyIGNhc2VTdGFuZGFyZERpc2Vhc2VNb2RlbChTdGFuZGFyZERpc2Vhc2VNb2RlbCBvYmplY3QpIHsKKwkJCQlyZXR1cm4gY3JlYXRlU3RhbmRhcmREaXNlYXNlTW9kZWxBZGFwdGVyKCk7CisJCQl9CisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyBBZGFwdGVyIGNhc2VMYWJlbChMYWJlbCBvYmplY3QpIHsKKwkJCQlyZXR1cm4gY3JlYXRlTGFiZWxBZGFwdGVyKCk7CisJCQl9CisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyBBZGFwdGVyIGNhc2VEeW5hbWljTGFiZWwoRHluYW1pY0xhYmVsIG9iamVjdCkgeworCQkJCXJldHVybiBjcmVhdGVEeW5hbWljTGFiZWxBZGFwdGVyKCk7CisJCQl9CisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyBBZGFwdGVyIGNhc2VOb2RlTGFiZWwoTm9kZUxhYmVsIG9iamVjdCkgeworCQkJCXJldHVybiBjcmVhdGVOb2RlTGFiZWxBZGFwdGVyKCk7CisJCQl9CisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyBBZGFwdGVyIGNhc2VEeW5hbWljTm9kZUxhYmVsKER5bmFtaWNOb2RlTGFiZWwgb2JqZWN0KSB7CisJCQkJcmV0dXJuIGNyZWF0ZUR5bmFtaWNOb2RlTGFiZWxBZGFwdGVyKCk7CisJCQl9CisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyBBZGFwdGVyIGNhc2VJbnRlZ3JhdGlvbkxhYmVsKEludGVncmF0aW9uTGFiZWwgb2JqZWN0KSB7CisJCQkJcmV0dXJuIGNyZWF0ZUludGVncmF0aW9uTGFiZWxBZGFwdGVyKCk7CisJCQl9CisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyBBZGFwdGVyIGNhc2VEaXNlYXNlTW9kZWxMYWJlbChEaXNlYXNlTW9kZWxMYWJlbCBvYmplY3QpIHsKKwkJCQlyZXR1cm4gY3JlYXRlRGlzZWFzZU1vZGVsTGFiZWxBZGFwdGVyKCk7CisJCQl9CisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyBBZGFwdGVyIGNhc2VTdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsKFN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWwgb2JqZWN0KSB7CisJCQkJcmV0dXJuIGNyZWF0ZVN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWxBZGFwdGVyKCk7CisJCQl9CisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyBBZGFwdGVyIGNhc2VMYWJlbFZhbHVlKExhYmVsVmFsdWUgb2JqZWN0KSB7CisJCQkJcmV0dXJuIGNyZWF0ZUxhYmVsVmFsdWVBZGFwdGVyKCk7CisJCQl9CisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyBBZGFwdGVyIGNhc2VJbnRlZ3JhdGlvbkxhYmVsVmFsdWUoSW50ZWdyYXRpb25MYWJlbFZhbHVlIG9iamVjdCkgeworCQkJCXJldHVybiBjcmVhdGVJbnRlZ3JhdGlvbkxhYmVsVmFsdWVBZGFwdGVyKCk7CisJCQl9CisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyBBZGFwdGVyIGNhc2VEaXNlYXNlTW9kZWxMYWJlbFZhbHVlKERpc2Vhc2VNb2RlbExhYmVsVmFsdWUgb2JqZWN0KSB7CisJCQkJcmV0dXJuIGNyZWF0ZURpc2Vhc2VNb2RlbExhYmVsVmFsdWVBZGFwdGVyKCk7CisJCQl9CisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyBBZGFwdGVyIGNhc2VTdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsVmFsdWUoU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbFZhbHVlIG9iamVjdCkgeworCQkJCXJldHVybiBjcmVhdGVTdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsVmFsdWVBZGFwdGVyKCk7CisJCQl9CisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyBBZGFwdGVyIGRlZmF1bHRDYXNlKEVPYmplY3Qgb2JqZWN0KSB7CisJCQkJcmV0dXJuIGNyZWF0ZUVPYmplY3RBZGFwdGVyKCk7CisJCQl9CisJCX07CisKKwkvKioKKwkgKiBDcmVhdGVzIGFuIGFkYXB0ZXIgZm9yIHRoZSA8Y29kZT50YXJnZXQ8L2NvZGU+LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIHRhcmdldCB0aGUgb2JqZWN0IHRvIGFkYXB0LgorCSAqIEByZXR1cm4gdGhlIGFkYXB0ZXIgZm9yIHRoZSA8Y29kZT50YXJnZXQ8L2NvZGU+LgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVBZGFwdGVyKE5vdGlmaWVyIHRhcmdldCkgeworCQlyZXR1cm4gbW9kZWxTd2l0Y2guZG9Td2l0Y2goKEVPYmplY3QpdGFyZ2V0KTsKKwl9CisKKworCS8qKgorCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5NYWNkb25hbGRSb3NzRGlzZWFzZU1vZGVsIDxlbT5NYWNkb25hbGQgUm9zcyBEaXNlYXNlIE1vZGVsPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsKKwkgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuTWFjZG9uYWxkUm9zc0Rpc2Vhc2VNb2RlbAorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVNYWNkb25hbGRSb3NzRGlzZWFzZU1vZGVsQWRhcHRlcigpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLlZlY3RvckRpc2Vhc2VNb2RlbCA8ZW0+RGlzZWFzZSBNb2RlbDwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7CisJICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLlZlY3RvckRpc2Vhc2VNb2RlbAorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVWZWN0b3JEaXNlYXNlTW9kZWxBZGFwdGVyKCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWwgPGVtPkRlbmd1ZSBNb2RlbDwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7CisJICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLkRlbmd1ZU1vZGVsCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZURlbmd1ZU1vZGVsQWRhcHRlcigpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLlNpbXBsZURlbmd1ZU1vZGVsIDxlbT5TaW1wbGUgRGVuZ3VlIE1vZGVsPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsKKwkgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuU2ltcGxlRGVuZ3VlTW9kZWwKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlU2ltcGxlRGVuZ3VlTW9kZWxBZGFwdGVyKCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWxIb3N0TGFiZWwgPGVtPkRlbmd1ZSBNb2RlbCBIb3N0IExhYmVsPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsKKwkgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWxIb3N0TGFiZWwKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlRGVuZ3VlTW9kZWxIb3N0TGFiZWxBZGFwdGVyKCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZSA8ZW0+RGVuZ3VlIE1vZGVsIEhvc3QgTGFiZWwgVmFsdWU8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOworCSAqIGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZSB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5LgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZURlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVBZGFwdGVyKCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWxWZWN0b3JMYWJlbCA8ZW0+RGVuZ3VlIE1vZGVsIFZlY3RvciBMYWJlbDwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7CisJICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLkRlbmd1ZU1vZGVsVmVjdG9yTGFiZWwKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlRGVuZ3VlTW9kZWxWZWN0b3JMYWJlbEFkYXB0ZXIoKSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbFZlY3RvckxhYmVsVmFsdWUgPGVtPkRlbmd1ZSBNb2RlbCBWZWN0b3IgTGFiZWwgVmFsdWU8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOworCSAqIGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZSB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5LgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbFZlY3RvckxhYmVsVmFsdWUKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlRGVuZ3VlTW9kZWxWZWN0b3JMYWJlbFZhbHVlQWRhcHRlcigpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBqYXZhLmxhbmcuQ29tcGFyYWJsZSA8ZW0+Q29tcGFyYWJsZTwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7CisJICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCisJICogQHNlZSBqYXZhLmxhbmcuQ29tcGFyYWJsZQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVDb21wYXJhYmxlQWRhcHRlcigpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLklkZW50aWZpYWJsZSA8ZW0+SWRlbnRpZmlhYmxlPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsKKwkgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uSWRlbnRpZmlhYmxlCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZUlkZW50aWZpYWJsZUFkYXB0ZXIoKSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLkRlY29yYXRvciA8ZW0+RGVjb3JhdG9yPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsKKwkgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5EZWNvcmF0b3IKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlRGVjb3JhdG9yQWRhcHRlcigpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuTm9kZURlY29yYXRvciA8ZW0+Tm9kZSBEZWNvcmF0b3I8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOworCSAqIGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZSB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5LgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLk5vZGVEZWNvcmF0b3IKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlTm9kZURlY29yYXRvckFkYXB0ZXIoKSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5TYW5pdHlDaGVja2VyIDxlbT5TYW5pdHkgQ2hlY2tlcjwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7CisJICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLlNhbml0eUNoZWNrZXIKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlU2FuaXR5Q2hlY2tlckFkYXB0ZXIoKSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLk1vZGlmaWFibGUgPGVtPk1vZGlmaWFibGU8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOworCSAqIGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZSB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5LgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLk1vZGlmaWFibGUKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlTW9kaWZpYWJsZUFkYXB0ZXIoKSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLkRpc2Vhc2VNb2RlbCA8ZW0+RGlzZWFzZSBNb2RlbDwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7CisJICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuRGlzZWFzZU1vZGVsCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZURpc2Vhc2VNb2RlbEFkYXB0ZXIoKSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLkludGVncmF0aW9uRGVjb3JhdG9yIDxlbT5JbnRlZ3JhdGlvbiBEZWNvcmF0b3I8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOworCSAqIGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZSB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5LgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLkludGVncmF0aW9uRGVjb3JhdG9yCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZUludGVncmF0aW9uRGVjb3JhdG9yQWRhcHRlcigpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmREaXNlYXNlTW9kZWwgPGVtPkRpc2Vhc2UgTW9kZWw8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOworCSAqIGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZSB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5LgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkRGlzZWFzZU1vZGVsCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZVN0YW5kYXJkRGlzZWFzZU1vZGVsQWRhcHRlcigpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguTGFiZWwgPGVtPkxhYmVsPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsKKwkgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5MYWJlbAorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVMYWJlbEFkYXB0ZXIoKSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkR5bmFtaWNMYWJlbCA8ZW0+RHluYW1pYyBMYWJlbDwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7CisJICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguRHluYW1pY0xhYmVsCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZUR5bmFtaWNMYWJlbEFkYXB0ZXIoKSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLk5vZGVMYWJlbCA8ZW0+Tm9kZSBMYWJlbDwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7CisJICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguTm9kZUxhYmVsCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZU5vZGVMYWJlbEFkYXB0ZXIoKSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkR5bmFtaWNOb2RlTGFiZWwgPGVtPkR5bmFtaWMgTm9kZSBMYWJlbDwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7CisJICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguRHluYW1pY05vZGVMYWJlbAorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVEeW5hbWljTm9kZUxhYmVsQWRhcHRlcigpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuRGlzZWFzZU1vZGVsTGFiZWwgPGVtPkRpc2Vhc2UgTW9kZWwgTGFiZWw8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOworCSAqIGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZSB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5LgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLkRpc2Vhc2VNb2RlbExhYmVsCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZURpc2Vhc2VNb2RlbExhYmVsQWRhcHRlcigpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguSW50ZWdyYXRpb25MYWJlbCA8ZW0+SW50ZWdyYXRpb24gTGFiZWw8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOworCSAqIGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZSB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5LgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkludGVncmF0aW9uTGFiZWwKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlSW50ZWdyYXRpb25MYWJlbEFkYXB0ZXIoKSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWwgPGVtPkRpc2Vhc2UgTW9kZWwgTGFiZWw8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOworCSAqIGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZSB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5LgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWwKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbEFkYXB0ZXIoKSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkxhYmVsVmFsdWUgPGVtPkxhYmVsIFZhbHVlPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsKKwkgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5MYWJlbFZhbHVlCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZUxhYmVsVmFsdWVBZGFwdGVyKCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5JbnRlZ3JhdGlvbkxhYmVsVmFsdWUgPGVtPkludGVncmF0aW9uIExhYmVsIFZhbHVlPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsKKwkgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5JbnRlZ3JhdGlvbkxhYmVsVmFsdWUKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlSW50ZWdyYXRpb25MYWJlbFZhbHVlQWRhcHRlcigpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZSA8ZW0+RGlzZWFzZSBNb2RlbCBMYWJlbCBWYWx1ZTwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7CisJICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVEaXNlYXNlTW9kZWxMYWJlbFZhbHVlQWRhcHRlcigpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbFZhbHVlIDxlbT5EaXNlYXNlIE1vZGVsIExhYmVsIFZhbHVlPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsKKwkgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsVmFsdWUKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbFZhbHVlQWRhcHRlcigpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciB0aGUgZGVmYXVsdCBjYXNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbC4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlRU9iamVjdEFkYXB0ZXIoKSB7CisJCXJldHVybiBudWxsOworCX0KKworfSAvL1ZlY3RvckFkYXB0ZXJGYWN0b3J5CmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3Ivc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy92ZWN0b3IvdXRpbC9WZWN0b3JTd2l0Y2guamF2YSBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3ZlY3Rvci91dGlsL1ZlY3RvclN3aXRjaC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY4ODdkOWYKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3Ivc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy92ZWN0b3IvdXRpbC9WZWN0b3JTd2l0Y2guamF2YQpAQCAtMCwwICsxLDY3MiBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLnV0aWw7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIAorICogQ29weXJpZ2h0IChjKSAyMDExIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiAKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdCAKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sIAorICogCisgKiBDb250cmlidXRvcnM6IAorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiAKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uSWRlbnRpZmlhYmxlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uU2FuaXR5Q2hlY2tlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguRHluYW1pY0xhYmVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5EeW5hbWljTm9kZUxhYmVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5JbnRlZ3JhdGlvbkxhYmVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5JbnRlZ3JhdGlvbkxhYmVsVmFsdWU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkxhYmVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5MYWJlbFZhbHVlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5Ob2RlTGFiZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLkRlY29yYXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuSW50ZWdyYXRpb25EZWNvcmF0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLk5vZGVEZWNvcmF0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLk1vZGlmaWFibGU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLkRpc2Vhc2VNb2RlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuRGlzZWFzZU1vZGVsTGFiZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLkRpc2Vhc2VNb2RlbExhYmVsVmFsdWU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkRGlzZWFzZU1vZGVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsVmFsdWU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci4qOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuTWFjZG9uYWxkUm9zc0Rpc2Vhc2VNb2RlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLlZlY3RvckRpc2Vhc2VNb2RlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLlZlY3RvclBhY2thZ2U7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIFRoZSA8Yj5Td2l0Y2g8L2I+IGZvciB0aGUgbW9kZWwncyBpbmhlcml0YW5jZSBoaWVyYXJjaHkuCisgKiBJdCBzdXBwb3J0cyB0aGUgY2FsbCB7QGxpbmsgI2RvU3dpdGNoKEVPYmplY3QpIGRvU3dpdGNoKG9iamVjdCl9CisgKiB0byBpbnZva2UgdGhlIDxjb2RlPmNhc2VYWFg8L2NvZGU+IG1ldGhvZCBmb3IgZWFjaCBjbGFzcyBvZiB0aGUgbW9kZWwsCisgKiBzdGFydGluZyB3aXRoIHRoZSBhY3R1YWwgY2xhc3Mgb2YgdGhlIG9iamVjdAorICogYW5kIHByb2NlZWRpbmcgdXAgdGhlIGluaGVyaXRhbmNlIGhpZXJhcmNoeQorICogdW50aWwgYSBub24tbnVsbCByZXN1bHQgaXMgcmV0dXJuZWQsCisgKiB3aGljaCBpcyB0aGUgcmVzdWx0IG9mIHRoZSBzd2l0Y2guCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5WZWN0b3JQYWNrYWdlCisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBWZWN0b3JTd2l0Y2g8VDE+IHsKKwkvKioKKwkgKiBUaGUgY2FjaGVkIG1vZGVsIHBhY2thZ2UKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgc3RhdGljIFZlY3RvclBhY2thZ2UgbW9kZWxQYWNrYWdlOworCisJLyoqCisJICogQ3JlYXRlcyBhbiBpbnN0YW5jZSBvZiB0aGUgc3dpdGNoLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBWZWN0b3JTd2l0Y2goKSB7CisJCWlmIChtb2RlbFBhY2thZ2UgPT0gbnVsbCkgeworCQkJbW9kZWxQYWNrYWdlID0gVmVjdG9yUGFja2FnZS5lSU5TVEFOQ0U7CisJCX0KKwl9CisKKwkvKioKKwkgKiBDYWxscyA8Y29kZT5jYXNlWFhYPC9jb2RlPiBmb3IgZWFjaCBjbGFzcyBvZiB0aGUgbW9kZWwgdW50aWwgb25lIHJldHVybnMgYSBub24gbnVsbCByZXN1bHQ7IGl0IHlpZWxkcyB0aGF0IHJlc3VsdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIGZpcnN0IG5vbi1udWxsIHJlc3VsdCByZXR1cm5lZCBieSBhIDxjb2RlPmNhc2VYWFg8L2NvZGU+IGNhbGwuCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBUMSBkb1N3aXRjaChFT2JqZWN0IHRoZUVPYmplY3QpIHsKKwkJcmV0dXJuIGRvU3dpdGNoKHRoZUVPYmplY3QuZUNsYXNzKCksIHRoZUVPYmplY3QpOworCX0KKworCS8qKgorCSAqIENhbGxzIDxjb2RlPmNhc2VYWFg8L2NvZGU+IGZvciBlYWNoIGNsYXNzIG9mIHRoZSBtb2RlbCB1bnRpbCBvbmUgcmV0dXJucyBhIG5vbiBudWxsIHJlc3VsdDsgaXQgeWllbGRzIHRoYXQgcmVzdWx0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgZmlyc3Qgbm9uLW51bGwgcmVzdWx0IHJldHVybmVkIGJ5IGEgPGNvZGU+Y2FzZVhYWDwvY29kZT4gY2FsbC4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIFQxIGRvU3dpdGNoKEVDbGFzcyB0aGVFQ2xhc3MsIEVPYmplY3QgdGhlRU9iamVjdCkgeworCQlpZiAodGhlRUNsYXNzLmVDb250YWluZXIoKSA9PSBtb2RlbFBhY2thZ2UpIHsKKwkJCXJldHVybiBkb1N3aXRjaCh0aGVFQ2xhc3MuZ2V0Q2xhc3NpZmllcklEKCksIHRoZUVPYmplY3QpOworCQl9CisJCWVsc2UgeworCQkJTGlzdDxFQ2xhc3M+IGVTdXBlclR5cGVzID0gdGhlRUNsYXNzLmdldEVTdXBlclR5cGVzKCk7CisJCQlyZXR1cm4KKwkJCQllU3VwZXJUeXBlcy5pc0VtcHR5KCkgPworCQkJCQlkZWZhdWx0Q2FzZSh0aGVFT2JqZWN0KSA6CisJCQkJCWRvU3dpdGNoKGVTdXBlclR5cGVzLmdldCgwKSwgdGhlRU9iamVjdCk7CisJCX0KKwl9CisKKwkvKioKKwkgKiBDYWxscyA8Y29kZT5jYXNlWFhYPC9jb2RlPiBmb3IgZWFjaCBjbGFzcyBvZiB0aGUgbW9kZWwgdW50aWwgb25lIHJldHVybnMgYSBub24gbnVsbCByZXN1bHQ7IGl0IHlpZWxkcyB0aGF0IHJlc3VsdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIGZpcnN0IG5vbi1udWxsIHJlc3VsdCByZXR1cm5lZCBieSBhIDxjb2RlPmNhc2VYWFg8L2NvZGU+IGNhbGwuCisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBUMSBkb1N3aXRjaChpbnQgY2xhc3NpZmllcklELCBFT2JqZWN0IHRoZUVPYmplY3QpIHsKKwkJc3dpdGNoIChjbGFzc2lmaWVySUQpIHsKKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5NQUNET05BTERfUk9TU19ESVNFQVNFX01PREVMOiB7CisJCQkJTWFjZG9uYWxkUm9zc0Rpc2Vhc2VNb2RlbCBtYWNkb25hbGRSb3NzRGlzZWFzZU1vZGVsID0gKE1hY2RvbmFsZFJvc3NEaXNlYXNlTW9kZWwpdGhlRU9iamVjdDsKKwkJCQlUMSByZXN1bHQgPSBjYXNlTWFjZG9uYWxkUm9zc0Rpc2Vhc2VNb2RlbChtYWNkb25hbGRSb3NzRGlzZWFzZU1vZGVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VWZWN0b3JEaXNlYXNlTW9kZWwobWFjZG9uYWxkUm9zc0Rpc2Vhc2VNb2RlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlU3RhbmRhcmREaXNlYXNlTW9kZWwobWFjZG9uYWxkUm9zc0Rpc2Vhc2VNb2RlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlRGlzZWFzZU1vZGVsKG1hY2RvbmFsZFJvc3NEaXNlYXNlTW9kZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZUludGVncmF0aW9uRGVjb3JhdG9yKG1hY2RvbmFsZFJvc3NEaXNlYXNlTW9kZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZU1vZGlmaWFibGUobWFjZG9uYWxkUm9zc0Rpc2Vhc2VNb2RlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlTm9kZURlY29yYXRvcihtYWNkb25hbGRSb3NzRGlzZWFzZU1vZGVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VEZWNvcmF0b3IobWFjZG9uYWxkUm9zc0Rpc2Vhc2VNb2RlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlSWRlbnRpZmlhYmxlKG1hY2RvbmFsZFJvc3NEaXNlYXNlTW9kZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZUNvbXBhcmFibGUobWFjZG9uYWxkUm9zc0Rpc2Vhc2VNb2RlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlU2FuaXR5Q2hlY2tlcihtYWNkb25hbGRSb3NzRGlzZWFzZU1vZGVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGRlZmF1bHRDYXNlKHRoZUVPYmplY3QpOworCQkJCXJldHVybiByZXN1bHQ7CisJCQl9CisJCQljYXNlIFZlY3RvclBhY2thZ2UuVkVDVE9SX0RJU0VBU0VfTU9ERUw6IHsKKwkJCQlWZWN0b3JEaXNlYXNlTW9kZWwgdmVjdG9yRGlzZWFzZU1vZGVsID0gKFZlY3RvckRpc2Vhc2VNb2RlbCl0aGVFT2JqZWN0OworCQkJCVQxIHJlc3VsdCA9IGNhc2VWZWN0b3JEaXNlYXNlTW9kZWwodmVjdG9yRGlzZWFzZU1vZGVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VTdGFuZGFyZERpc2Vhc2VNb2RlbCh2ZWN0b3JEaXNlYXNlTW9kZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZURpc2Vhc2VNb2RlbCh2ZWN0b3JEaXNlYXNlTW9kZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZUludGVncmF0aW9uRGVjb3JhdG9yKHZlY3RvckRpc2Vhc2VNb2RlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlTW9kaWZpYWJsZSh2ZWN0b3JEaXNlYXNlTW9kZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZU5vZGVEZWNvcmF0b3IodmVjdG9yRGlzZWFzZU1vZGVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VEZWNvcmF0b3IodmVjdG9yRGlzZWFzZU1vZGVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VJZGVudGlmaWFibGUodmVjdG9yRGlzZWFzZU1vZGVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VDb21wYXJhYmxlKHZlY3RvckRpc2Vhc2VNb2RlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlU2FuaXR5Q2hlY2tlcih2ZWN0b3JEaXNlYXNlTW9kZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gZGVmYXVsdENhc2UodGhlRU9iamVjdCk7CisJCQkJcmV0dXJuIHJlc3VsdDsKKwkJCX0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUw6IHsKKwkJCQlEZW5ndWVNb2RlbCBkZW5ndWVNb2RlbCA9IChEZW5ndWVNb2RlbCl0aGVFT2JqZWN0OworCQkJCVQxIHJlc3VsdCA9IGNhc2VEZW5ndWVNb2RlbChkZW5ndWVNb2RlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlVmVjdG9yRGlzZWFzZU1vZGVsKGRlbmd1ZU1vZGVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VTdGFuZGFyZERpc2Vhc2VNb2RlbChkZW5ndWVNb2RlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlRGlzZWFzZU1vZGVsKGRlbmd1ZU1vZGVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VJbnRlZ3JhdGlvbkRlY29yYXRvcihkZW5ndWVNb2RlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlTW9kaWZpYWJsZShkZW5ndWVNb2RlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlTm9kZURlY29yYXRvcihkZW5ndWVNb2RlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlRGVjb3JhdG9yKGRlbmd1ZU1vZGVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VJZGVudGlmaWFibGUoZGVuZ3VlTW9kZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZUNvbXBhcmFibGUoZGVuZ3VlTW9kZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZVNhbml0eUNoZWNrZXIoZGVuZ3VlTW9kZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gZGVmYXVsdENhc2UodGhlRU9iamVjdCk7CisJCQkJcmV0dXJuIHJlc3VsdDsKKwkJCX0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5TSU1QTEVfREVOR1VFX01PREVMOiB7CisJCQkJU2ltcGxlRGVuZ3VlTW9kZWwgc2ltcGxlRGVuZ3VlTW9kZWwgPSAoU2ltcGxlRGVuZ3VlTW9kZWwpdGhlRU9iamVjdDsKKwkJCQlUMSByZXN1bHQgPSBjYXNlU2ltcGxlRGVuZ3VlTW9kZWwoc2ltcGxlRGVuZ3VlTW9kZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZVZlY3RvckRpc2Vhc2VNb2RlbChzaW1wbGVEZW5ndWVNb2RlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlU3RhbmRhcmREaXNlYXNlTW9kZWwoc2ltcGxlRGVuZ3VlTW9kZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZURpc2Vhc2VNb2RlbChzaW1wbGVEZW5ndWVNb2RlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlSW50ZWdyYXRpb25EZWNvcmF0b3Ioc2ltcGxlRGVuZ3VlTW9kZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZU1vZGlmaWFibGUoc2ltcGxlRGVuZ3VlTW9kZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZU5vZGVEZWNvcmF0b3Ioc2ltcGxlRGVuZ3VlTW9kZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZURlY29yYXRvcihzaW1wbGVEZW5ndWVNb2RlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlSWRlbnRpZmlhYmxlKHNpbXBsZURlbmd1ZU1vZGVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VDb21wYXJhYmxlKHNpbXBsZURlbmd1ZU1vZGVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VTYW5pdHlDaGVja2VyKHNpbXBsZURlbmd1ZU1vZGVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGRlZmF1bHRDYXNlKHRoZUVPYmplY3QpOworCQkJCXJldHVybiByZXN1bHQ7CisJCQl9CisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX0hPU1RfTEFCRUw6IHsKKwkJCQlEZW5ndWVNb2RlbEhvc3RMYWJlbCBkZW5ndWVNb2RlbEhvc3RMYWJlbCA9IChEZW5ndWVNb2RlbEhvc3RMYWJlbCl0aGVFT2JqZWN0OworCQkJCVQxIHJlc3VsdCA9IGNhc2VEZW5ndWVNb2RlbEhvc3RMYWJlbChkZW5ndWVNb2RlbEhvc3RMYWJlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbChkZW5ndWVNb2RlbEhvc3RMYWJlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlRGlzZWFzZU1vZGVsTGFiZWwoZGVuZ3VlTW9kZWxIb3N0TGFiZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZUludGVncmF0aW9uTGFiZWwoZGVuZ3VlTW9kZWxIb3N0TGFiZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZUR5bmFtaWNOb2RlTGFiZWwoZGVuZ3VlTW9kZWxIb3N0TGFiZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZUR5bmFtaWNMYWJlbChkZW5ndWVNb2RlbEhvc3RMYWJlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlTm9kZUxhYmVsKGRlbmd1ZU1vZGVsSG9zdExhYmVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VMYWJlbChkZW5ndWVNb2RlbEhvc3RMYWJlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlSWRlbnRpZmlhYmxlKGRlbmd1ZU1vZGVsSG9zdExhYmVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VDb21wYXJhYmxlKGRlbmd1ZU1vZGVsSG9zdExhYmVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VTYW5pdHlDaGVja2VyKGRlbmd1ZU1vZGVsSG9zdExhYmVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGRlZmF1bHRDYXNlKHRoZUVPYmplY3QpOworCQkJCXJldHVybiByZXN1bHQ7CisJCQl9CisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUU6IHsKKwkJCQlEZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlIGRlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWUgPSAoRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZSl0aGVFT2JqZWN0OworCQkJCVQxIHJlc3VsdCA9IGNhc2VEZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlKGRlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWUpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZVN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZShkZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VEaXNlYXNlTW9kZWxMYWJlbFZhbHVlKGRlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWUpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZUludGVncmF0aW9uTGFiZWxWYWx1ZShkZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VMYWJlbFZhbHVlKGRlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWUpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZVNhbml0eUNoZWNrZXIoZGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZSk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBkZWZhdWx0Q2FzZSh0aGVFT2JqZWN0KTsKKwkJCQlyZXR1cm4gcmVzdWx0OworCQkJfQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9WRUNUT1JfTEFCRUw6IHsKKwkJCQlEZW5ndWVNb2RlbFZlY3RvckxhYmVsIGRlbmd1ZU1vZGVsVmVjdG9yTGFiZWwgPSAoRGVuZ3VlTW9kZWxWZWN0b3JMYWJlbCl0aGVFT2JqZWN0OworCQkJCVQxIHJlc3VsdCA9IGNhc2VEZW5ndWVNb2RlbFZlY3RvckxhYmVsKGRlbmd1ZU1vZGVsVmVjdG9yTGFiZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZVN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWwoZGVuZ3VlTW9kZWxWZWN0b3JMYWJlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlRGlzZWFzZU1vZGVsTGFiZWwoZGVuZ3VlTW9kZWxWZWN0b3JMYWJlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlSW50ZWdyYXRpb25MYWJlbChkZW5ndWVNb2RlbFZlY3RvckxhYmVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VEeW5hbWljTm9kZUxhYmVsKGRlbmd1ZU1vZGVsVmVjdG9yTGFiZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZUR5bmFtaWNMYWJlbChkZW5ndWVNb2RlbFZlY3RvckxhYmVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VOb2RlTGFiZWwoZGVuZ3VlTW9kZWxWZWN0b3JMYWJlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlTGFiZWwoZGVuZ3VlTW9kZWxWZWN0b3JMYWJlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlSWRlbnRpZmlhYmxlKGRlbmd1ZU1vZGVsVmVjdG9yTGFiZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZUNvbXBhcmFibGUoZGVuZ3VlTW9kZWxWZWN0b3JMYWJlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlU2FuaXR5Q2hlY2tlcihkZW5ndWVNb2RlbFZlY3RvckxhYmVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGRlZmF1bHRDYXNlKHRoZUVPYmplY3QpOworCQkJCXJldHVybiByZXN1bHQ7CisJCQl9CisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX1ZFQ1RPUl9MQUJFTF9WQUxVRTogeworCQkJCURlbmd1ZU1vZGVsVmVjdG9yTGFiZWxWYWx1ZSBkZW5ndWVNb2RlbFZlY3RvckxhYmVsVmFsdWUgPSAoRGVuZ3VlTW9kZWxWZWN0b3JMYWJlbFZhbHVlKXRoZUVPYmplY3Q7CisJCQkJVDEgcmVzdWx0ID0gY2FzZURlbmd1ZU1vZGVsVmVjdG9yTGFiZWxWYWx1ZShkZW5ndWVNb2RlbFZlY3RvckxhYmVsVmFsdWUpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZVN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZShkZW5ndWVNb2RlbFZlY3RvckxhYmVsVmFsdWUpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZURpc2Vhc2VNb2RlbExhYmVsVmFsdWUoZGVuZ3VlTW9kZWxWZWN0b3JMYWJlbFZhbHVlKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VJbnRlZ3JhdGlvbkxhYmVsVmFsdWUoZGVuZ3VlTW9kZWxWZWN0b3JMYWJlbFZhbHVlKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VMYWJlbFZhbHVlKGRlbmd1ZU1vZGVsVmVjdG9yTGFiZWxWYWx1ZSk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlU2FuaXR5Q2hlY2tlcihkZW5ndWVNb2RlbFZlY3RvckxhYmVsVmFsdWUpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gZGVmYXVsdENhc2UodGhlRU9iamVjdCk7CisJCQkJcmV0dXJuIHJlc3VsdDsKKwkJCX0KKwkJCWRlZmF1bHQ6IHJldHVybiBkZWZhdWx0Q2FzZSh0aGVFT2JqZWN0KTsKKwkJfQorCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPk1hY2RvbmFsZCBSb3NzIERpc2Vhc2UgTW9kZWw8L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsKKwkgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KKwkgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5NYWNkb25hbGQgUm9zcyBEaXNlYXNlIE1vZGVsPC9lbT4nLgorCSAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVDEgY2FzZU1hY2RvbmFsZFJvc3NEaXNlYXNlTW9kZWwoTWFjZG9uYWxkUm9zc0Rpc2Vhc2VNb2RlbCBvYmplY3QpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+RGlzZWFzZSBNb2RlbDwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOworCSAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgorCSAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkRpc2Vhc2UgTW9kZWw8L2VtPicuCisJICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBUMSBjYXNlVmVjdG9yRGlzZWFzZU1vZGVsKFZlY3RvckRpc2Vhc2VNb2RlbCBvYmplY3QpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+RGVuZ3VlIE1vZGVsPC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7CisJICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCisJICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+RGVuZ3VlIE1vZGVsPC9lbT4nLgorCSAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVDEgY2FzZURlbmd1ZU1vZGVsKERlbmd1ZU1vZGVsIG9iamVjdCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5TaW1wbGUgRGVuZ3VlIE1vZGVsPC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7CisJICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCisJICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+U2ltcGxlIERlbmd1ZSBNb2RlbDwvZW0+Jy4KKwkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFQxIGNhc2VTaW1wbGVEZW5ndWVNb2RlbChTaW1wbGVEZW5ndWVNb2RlbCBvYmplY3QpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+RGVuZ3VlIE1vZGVsIEhvc3QgTGFiZWw8L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsKKwkgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KKwkgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5EZW5ndWUgTW9kZWwgSG9zdCBMYWJlbDwvZW0+Jy4KKwkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFQxIGNhc2VEZW5ndWVNb2RlbEhvc3RMYWJlbChEZW5ndWVNb2RlbEhvc3RMYWJlbCBvYmplY3QpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+RGVuZ3VlIE1vZGVsIEhvc3QgTGFiZWwgVmFsdWU8L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsKKwkgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KKwkgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5EZW5ndWUgTW9kZWwgSG9zdCBMYWJlbCBWYWx1ZTwvZW0+Jy4KKwkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFQxIGNhc2VEZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlKERlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWUgb2JqZWN0KSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkRlbmd1ZSBNb2RlbCBWZWN0b3IgTGFiZWw8L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsKKwkgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KKwkgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5EZW5ndWUgTW9kZWwgVmVjdG9yIExhYmVsPC9lbT4nLgorCSAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVDEgY2FzZURlbmd1ZU1vZGVsVmVjdG9yTGFiZWwoRGVuZ3VlTW9kZWxWZWN0b3JMYWJlbCBvYmplY3QpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+RGVuZ3VlIE1vZGVsIFZlY3RvciBMYWJlbCBWYWx1ZTwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOworCSAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgorCSAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkRlbmd1ZSBNb2RlbCBWZWN0b3IgTGFiZWwgVmFsdWU8L2VtPicuCisJICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBUMSBjYXNlRGVuZ3VlTW9kZWxWZWN0b3JMYWJlbFZhbHVlKERlbmd1ZU1vZGVsVmVjdG9yTGFiZWxWYWx1ZSBvYmplY3QpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+Q29tcGFyYWJsZTwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOworCSAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgorCSAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkNvbXBhcmFibGU8L2VtPicuCisJICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyA8VD4gVDEgY2FzZUNvbXBhcmFibGUoQ29tcGFyYWJsZTxUPiBvYmplY3QpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+SWRlbnRpZmlhYmxlPC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7CisJICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCisJICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+SWRlbnRpZmlhYmxlPC9lbT4nLgorCSAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVDEgY2FzZUlkZW50aWZpYWJsZShJZGVudGlmaWFibGUgb2JqZWN0KSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkRlY29yYXRvcjwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOworCSAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgorCSAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkRlY29yYXRvcjwvZW0+Jy4KKwkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFQxIGNhc2VEZWNvcmF0b3IoRGVjb3JhdG9yIG9iamVjdCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5Ob2RlIERlY29yYXRvcjwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOworCSAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgorCSAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPk5vZGUgRGVjb3JhdG9yPC9lbT4nLgorCSAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVDEgY2FzZU5vZGVEZWNvcmF0b3IoTm9kZURlY29yYXRvciBvYmplY3QpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+U2FuaXR5IENoZWNrZXI8L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsKKwkgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KKwkgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5TYW5pdHkgQ2hlY2tlcjwvZW0+Jy4KKwkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFQxIGNhc2VTYW5pdHlDaGVja2VyKFNhbml0eUNoZWNrZXIgb2JqZWN0KSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPk1vZGlmaWFibGU8L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsKKwkgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KKwkgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5Nb2RpZmlhYmxlPC9lbT4nLgorCSAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVDEgY2FzZU1vZGlmaWFibGUoTW9kaWZpYWJsZSBvYmplY3QpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+RGlzZWFzZSBNb2RlbDwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOworCSAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgorCSAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkRpc2Vhc2UgTW9kZWw8L2VtPicuCisJICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBUMSBjYXNlRGlzZWFzZU1vZGVsKERpc2Vhc2VNb2RlbCBvYmplY3QpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+SW50ZWdyYXRpb24gRGVjb3JhdG9yPC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7CisJICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCisJICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+SW50ZWdyYXRpb24gRGVjb3JhdG9yPC9lbT4nLgorCSAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVDEgY2FzZUludGVncmF0aW9uRGVjb3JhdG9yKEludGVncmF0aW9uRGVjb3JhdG9yIG9iamVjdCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5EaXNlYXNlIE1vZGVsPC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7CisJICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCisJICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+RGlzZWFzZSBNb2RlbDwvZW0+Jy4KKwkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFQxIGNhc2VTdGFuZGFyZERpc2Vhc2VNb2RlbChTdGFuZGFyZERpc2Vhc2VNb2RlbCBvYmplY3QpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+TGFiZWw8L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsKKwkgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KKwkgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5MYWJlbDwvZW0+Jy4KKwkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFQxIGNhc2VMYWJlbChMYWJlbCBvYmplY3QpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+RHluYW1pYyBMYWJlbDwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOworCSAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgorCSAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkR5bmFtaWMgTGFiZWw8L2VtPicuCisJICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBUMSBjYXNlRHluYW1pY0xhYmVsKER5bmFtaWNMYWJlbCBvYmplY3QpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+Tm9kZSBMYWJlbDwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOworCSAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgorCSAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPk5vZGUgTGFiZWw8L2VtPicuCisJICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBUMSBjYXNlTm9kZUxhYmVsKE5vZGVMYWJlbCBvYmplY3QpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+RHluYW1pYyBOb2RlIExhYmVsPC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7CisJICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCisJICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+RHluYW1pYyBOb2RlIExhYmVsPC9lbT4nLgorCSAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVDEgY2FzZUR5bmFtaWNOb2RlTGFiZWwoRHluYW1pY05vZGVMYWJlbCBvYmplY3QpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+RGlzZWFzZSBNb2RlbCBMYWJlbDwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOworCSAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgorCSAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkRpc2Vhc2UgTW9kZWwgTGFiZWw8L2VtPicuCisJICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBUMSBjYXNlRGlzZWFzZU1vZGVsTGFiZWwoRGlzZWFzZU1vZGVsTGFiZWwgb2JqZWN0KSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkludGVncmF0aW9uIExhYmVsPC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7CisJICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCisJICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+SW50ZWdyYXRpb24gTGFiZWw8L2VtPicuCisJICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBUMSBjYXNlSW50ZWdyYXRpb25MYWJlbChJbnRlZ3JhdGlvbkxhYmVsIG9iamVjdCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5EaXNlYXNlIE1vZGVsIExhYmVsPC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7CisJICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCisJICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+RGlzZWFzZSBNb2RlbCBMYWJlbDwvZW0+Jy4KKwkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFQxIGNhc2VTdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsKFN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWwgb2JqZWN0KSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkxhYmVsIFZhbHVlPC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7CisJICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCisJICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+TGFiZWwgVmFsdWU8L2VtPicuCisJICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBUMSBjYXNlTGFiZWxWYWx1ZShMYWJlbFZhbHVlIG9iamVjdCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5JbnRlZ3JhdGlvbiBMYWJlbCBWYWx1ZTwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOworCSAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgorCSAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkludGVncmF0aW9uIExhYmVsIFZhbHVlPC9lbT4nLgorCSAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVDEgY2FzZUludGVncmF0aW9uTGFiZWxWYWx1ZShJbnRlZ3JhdGlvbkxhYmVsVmFsdWUgb2JqZWN0KSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkRpc2Vhc2UgTW9kZWwgTGFiZWwgVmFsdWU8L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsKKwkgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KKwkgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5EaXNlYXNlIE1vZGVsIExhYmVsIFZhbHVlPC9lbT4nLgorCSAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVDEgY2FzZURpc2Vhc2VNb2RlbExhYmVsVmFsdWUoRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZSBvYmplY3QpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+RGlzZWFzZSBNb2RlbCBMYWJlbCBWYWx1ZTwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOworCSAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgorCSAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkRpc2Vhc2UgTW9kZWwgTGFiZWwgVmFsdWU8L2VtPicuCisJICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBUMSBjYXNlU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbFZhbHVlKFN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZSBvYmplY3QpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+RU9iamVjdDwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOworCSAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLCBidXQgdGhpcyBpcyB0aGUgbGFzdCBjYXNlIGFueXdheS4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KKwkgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5FT2JqZWN0PC9lbT4nLgorCSAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVDEgZGVmYXVsdENhc2UoRU9iamVjdCBvYmplY3QpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCit9IC8vVmVjdG9yU3dpdGNoCmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy8uY2xhc3NwYXRoIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMvLmNsYXNzcGF0aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMDRlODYxCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMvLmNsYXNzcGF0aApAQCAtMCwwICsxLDcgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8Y2xhc3NwYXRoPgorCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJzcmMiIHBhdGg9InNyYyIvPgorCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJjb24iIHBhdGg9Im9yZy5lY2xpcHNlLmpkdC5sYXVuY2hpbmcuSlJFX0NPTlRBSU5FUi9vcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwuZGVidWcudWkubGF1bmNoZXIuU3RhbmRhcmRWTVR5cGUvSjJTRS0xLjUiLz4KKwk8Y2xhc3NwYXRoZW50cnkga2luZD0iY29uIiBwYXRoPSJvcmcuZWNsaXBzZS5wZGUuY29yZS5yZXF1aXJlZFBsdWdpbnMiLz4KKwk8Y2xhc3NwYXRoZW50cnkga2luZD0ib3V0cHV0IiBwYXRoPSJiaW4iLz4KKzwvY2xhc3NwYXRoPgpkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMvLmZicHJlZnMgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy8uZmJwcmVmcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hN2QzNzI2Ci0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMvLmZicHJlZnMKQEAgLTAsMCArMSwxMjkgQEAKKyNGaW5kQnVncyBVc2VyIFByZWZlcmVuY2VzCisjRnJpIE1hciAxNiAxNToyMjowNiBFRFQgMjAwNworZGVmYXVsdF9kaXJlY3Rvcnk9Q1w6XFxQcm9ncmFtIEZpbGVzXFxlY2xpcHNlXFxlY2xpcHNlMy4yLjIKK2RldGVjdG9yQkNQTWV0aG9kUmV0dXJuQ2hlY2s9QkNQTWV0aG9kUmV0dXJuQ2hlY2t8ZmFsc2UKK2RldGVjdG9yQmFkQXBwbGV0Q29uc3RydWN0b3I9QmFkQXBwbGV0Q29uc3RydWN0b3J8ZmFsc2UKK2RldGVjdG9yQmFkUmVzdWx0U2V0QWNjZXNzPUJhZFJlc3VsdFNldEFjY2Vzc3x0cnVlCitkZXRlY3RvckJhZFN5bnRheEZvclJlZ3VsYXJFeHByZXNzaW9uPUJhZFN5bnRheEZvclJlZ3VsYXJFeHByZXNzaW9ufHRydWUKK2RldGVjdG9yQmFkVXNlT2ZSZXR1cm5WYWx1ZT1CYWRVc2VPZlJldHVyblZhbHVlfHRydWUKK2RldGVjdG9yQmFkbHlPdmVycmlkZGVuQWRhcHRlcj1CYWRseU92ZXJyaWRkZW5BZGFwdGVyfHRydWUKK2RldGVjdG9yQ2FsbGVkTWV0aG9kcz1DYWxsZWRNZXRob2RzfHRydWUKK2RldGVjdG9yQ2hlY2tDYWxscz1DaGVja0NhbGxzfGZhbHNlCitkZXRlY3RvckNoZWNrSW1tdXRhYmxlQW5ub3RhdGlvbj1DaGVja0ltbXV0YWJsZUFubm90YXRpb258dHJ1ZQorZGV0ZWN0b3JDbG9uZUlkaW9tPUNsb25lSWRpb218dHJ1ZQorZGV0ZWN0b3JDb21wYXJhdG9ySWRpb209Q29tcGFyYXRvcklkaW9tfHRydWUKK2RldGVjdG9yQ29uZnVzZWRJbmhlcml0YW5jZT1Db25mdXNlZEluaGVyaXRhbmNlfHRydWUKK2RldGVjdG9yQ29uZnVzaW9uQmV0d2VlbkluaGVyaXRlZEFuZE91dGVyTWV0aG9kPUNvbmZ1c2lvbkJldHdlZW5Jbmhlcml0ZWRBbmRPdXRlck1ldGhvZHx0cnVlCitkZXRlY3RvckRvSW5zaWRlRG9Qcml2aWxlZ2VkPURvSW5zaWRlRG9Qcml2aWxlZ2VkfHRydWUKK2RldGVjdG9yRG9udENhdGNoSWxsZWdhbE1vbml0b3JTdGF0ZUV4Y2VwdGlvbj1Eb250Q2F0Y2hJbGxlZ2FsTW9uaXRvclN0YXRlRXhjZXB0aW9ufHRydWUKK2RldGVjdG9yRHJvcHBlZEV4Y2VwdGlvbj1Ecm9wcGVkRXhjZXB0aW9ufHRydWUKK2RldGVjdG9yRHVtYk1ldGhvZEludm9jYXRpb25zPUR1bWJNZXRob2RJbnZvY2F0aW9uc3x0cnVlCitkZXRlY3RvckR1bWJNZXRob2RzPUR1bWJNZXRob2RzfHRydWUKK2RldGVjdG9yRHVwbGljYXRlQnJhbmNoZXM9RHVwbGljYXRlQnJhbmNoZXN8dHJ1ZQorZGV0ZWN0b3JFbXB0eVppcEZpbGVFbnRyeT1FbXB0eVppcEZpbGVFbnRyeXx0cnVlCitkZXRlY3RvckVxU3RyaW5nVGVzdD1FcVN0cmluZ1Rlc3R8ZmFsc2UKK2RldGVjdG9yRmluZEJhZENhc3Q9RmluZEJhZENhc3R8ZmFsc2UKK2RldGVjdG9yRmluZEJhZENhc3QyPUZpbmRCYWRDYXN0Mnx0cnVlCitkZXRlY3RvckZpbmRCYWRFcXVhbHNJbXBsZW1lbnRhdGlvbj1GaW5kQmFkRXF1YWxzSW1wbGVtZW50YXRpb258ZmFsc2UKK2RldGVjdG9yRmluZEJhZEZvckxvb3A9RmluZEJhZEZvckxvb3B8dHJ1ZQorZGV0ZWN0b3JGaW5kQnVnc1N1bW1hcnlTdGF0cz1GaW5kQnVnc1N1bW1hcnlTdGF0c3x0cnVlCitkZXRlY3RvckZpbmRDaXJjdWxhckRlcGVuZGVuY2llcz1GaW5kQ2lyY3VsYXJEZXBlbmRlbmNpZXN8ZmFsc2UKK2RldGVjdG9yRmluZERlYWRMb2NhbFN0b3Jlcz1GaW5kRGVhZExvY2FsU3RvcmVzfHRydWUKK2RldGVjdG9yRmluZERvdWJsZUNoZWNrPUZpbmREb3VibGVDaGVja3x0cnVlCitkZXRlY3RvckZpbmRFbXB0eVN5bmNocm9uaXplZEJsb2NrPUZpbmRFbXB0eVN5bmNocm9uaXplZEJsb2NrfHRydWUKK2RldGVjdG9yRmluZEZpZWxkU2VsZkFzc2lnbm1lbnQ9RmluZEZpZWxkU2VsZkFzc2lnbm1lbnR8dHJ1ZQorZGV0ZWN0b3JGaW5kRmluYWxpemVJbnZvY2F0aW9ucz1GaW5kRmluYWxpemVJbnZvY2F0aW9uc3x0cnVlCitkZXRlY3RvckZpbmRGbG9hdEVxdWFsaXR5PUZpbmRGbG9hdEVxdWFsaXR5fHRydWUKK2RldGVjdG9yRmluZEZsb2F0TWF0aD1GaW5kRmxvYXRNYXRofGZhbHNlCitkZXRlY3RvckZpbmRIRW1pc21hdGNoPUZpbmRIRW1pc21hdGNofHRydWUKK2RldGVjdG9yRmluZEluY29uc2lzdGVudFN5bmMyPUZpbmRJbmNvbnNpc3RlbnRTeW5jMnx0cnVlCitkZXRlY3RvckZpbmRKU1IxNjZMb2NrTW9uaXRvcmVudGVyPUZpbmRKU1IxNjZMb2NrTW9uaXRvcmVudGVyfHRydWUKK2RldGVjdG9yRmluZExvY2FsU2VsZkFzc2lnbm1lbnQyPUZpbmRMb2NhbFNlbGZBc3NpZ25tZW50Mnx0cnVlCitkZXRlY3RvckZpbmRNYXNrZWRGaWVsZHM9RmluZE1hc2tlZEZpZWxkc3x0cnVlCitkZXRlY3RvckZpbmRNaXNtYXRjaGVkV2FpdE9yTm90aWZ5PUZpbmRNaXNtYXRjaGVkV2FpdE9yTm90aWZ5fHRydWUKK2RldGVjdG9yRmluZE5ha2VkTm90aWZ5PUZpbmROYWtlZE5vdGlmeXx0cnVlCitkZXRlY3RvckZpbmROb25TZXJpYWxpemFibGVTdG9yZUludG9TZXNzaW9uPUZpbmROb25TZXJpYWxpemFibGVTdG9yZUludG9TZXNzaW9ufHRydWUKK2RldGVjdG9yRmluZE5vblNlcmlhbGl6YWJsZVZhbHVlUGFzc2VkVG9Xcml0ZU9iamVjdD1GaW5kTm9uU2VyaWFsaXphYmxlVmFsdWVQYXNzZWRUb1dyaXRlT2JqZWN0fHRydWUKK2RldGVjdG9yRmluZE5vblNob3J0Q2lyY3VpdD1GaW5kTm9uU2hvcnRDaXJjdWl0fHRydWUKK2RldGVjdG9yRmluZE51bGxEZXJlZj1GaW5kTnVsbERlcmVmfHRydWUKK2RldGVjdG9yRmluZE9wZW5TdHJlYW09RmluZE9wZW5TdHJlYW18dHJ1ZQorZGV0ZWN0b3JGaW5kUHV6emxlcnM9RmluZFB1enpsZXJzfHRydWUKK2RldGVjdG9yRmluZFJlZkNvbXBhcmlzb249RmluZFJlZkNvbXBhcmlzb258dHJ1ZQorZGV0ZWN0b3JGaW5kUmV0dXJuUmVmPUZpbmRSZXR1cm5SZWZ8dHJ1ZQorZGV0ZWN0b3JGaW5kUnVuSW52b2NhdGlvbnM9RmluZFJ1bkludm9jYXRpb25zfHRydWUKK2RldGVjdG9yRmluZFNlbGZDb21wYXJpc29uPUZpbmRTZWxmQ29tcGFyaXNvbnx0cnVlCitkZXRlY3RvckZpbmRTZWxmQ29tcGFyaXNvbjI9RmluZFNlbGZDb21wYXJpc29uMnx0cnVlCitkZXRlY3RvckZpbmRTbGVlcFdpdGhMb2NrSGVsZD1GaW5kU2xlZXBXaXRoTG9ja0hlbGR8dHJ1ZQorZGV0ZWN0b3JGaW5kU3Bpbkxvb3A9RmluZFNwaW5Mb29wfHRydWUKK2RldGVjdG9yRmluZFNxbEluamVjdGlvbj1GaW5kU3FsSW5qZWN0aW9ufHRydWUKK2RldGVjdG9yRmluZFR3b0xvY2tXYWl0PUZpbmRUd29Mb2NrV2FpdHx0cnVlCitkZXRlY3RvckZpbmRVbmNhbGxlZFByaXZhdGVNZXRob2RzPUZpbmRVbmNhbGxlZFByaXZhdGVNZXRob2RzfHRydWUKK2RldGVjdG9yRmluZFVuY29uZGl0aW9uYWxXYWl0PUZpbmRVbmNvbmRpdGlvbmFsV2FpdHx0cnVlCitkZXRlY3RvckZpbmRVbmluaXRpYWxpemVkR2V0PUZpbmRVbmluaXRpYWxpemVkR2V0fHRydWUKK2RldGVjdG9yRmluZFVucmVsYXRlZFR5cGVzSW5HZW5lcmljQ29udGFpbmVyPUZpbmRVbnJlbGF0ZWRUeXBlc0luR2VuZXJpY0NvbnRhaW5lcnx0cnVlCitkZXRlY3RvckZpbmRVbnJlbGVhc2VkTG9jaz1GaW5kVW5yZWxlYXNlZExvY2t8dHJ1ZQorZGV0ZWN0b3JGaW5kVW5zYXRpc2ZpZWRPYmxpZ2F0aW9uPUZpbmRVbnNhdGlzZmllZE9ibGlnYXRpb258ZmFsc2UKK2RldGVjdG9yRmluZFVuc3luY0dldD1GaW5kVW5zeW5jR2V0fHRydWUKK2RldGVjdG9yRmluZFVzZWxlc3NDb250cm9sRmxvdz1GaW5kVXNlbGVzc0NvbnRyb2xGbG93fHRydWUKK2RldGVjdG9ySHVnZVNoYXJlZFN0cmluZ0NvbnN0YW50cz1IdWdlU2hhcmVkU3RyaW5nQ29uc3RhbnRzfHRydWUKK2RldGVjdG9ySURpdlJlc3VsdENhc3RUb0RvdWJsZT1JRGl2UmVzdWx0Q2FzdFRvRG91YmxlfHRydWUKK2RldGVjdG9ySW5jb21wYXRNYXNrPUluY29tcGF0TWFza3x0cnVlCitkZXRlY3RvckluZWZmaWNpZW50TWVtYmVyQWNjZXNzPUluZWZmaWNpZW50TWVtYmVyQWNjZXNzfGZhbHNlCitkZXRlY3RvckluZWZmaWNpZW50VG9BcnJheT1JbmVmZmljaWVudFRvQXJyYXl8dHJ1ZQorZGV0ZWN0b3JJbmZpbml0ZUxvb3A9SW5maW5pdGVMb29wfHRydWUKK2RldGVjdG9ySW5maW5pdGVSZWN1cnNpdmVMb29wPUluZmluaXRlUmVjdXJzaXZlTG9vcHx0cnVlCitkZXRlY3RvckluZmluaXRlUmVjdXJzaXZlTG9vcDI9SW5maW5pdGVSZWN1cnNpdmVMb29wMnxmYWxzZQorZGV0ZWN0b3JJbmhlcml0YW5jZVVuc2FmZUdldFJlc291cmNlPUluaGVyaXRhbmNlVW5zYWZlR2V0UmVzb3VyY2V8dHJ1ZQorZGV0ZWN0b3JJbml0aWFsaXphdGlvbkNoYWluPUluaXRpYWxpemF0aW9uQ2hhaW58dHJ1ZQorZGV0ZWN0b3JJbnN0YW50aWF0ZVN0YXRpY0NsYXNzPUluc3RhbnRpYXRlU3RhdGljQ2xhc3N8dHJ1ZQorZGV0ZWN0b3JJbnZhbGlkSlVuaXRUZXN0PUludmFsaWRKVW5pdFRlc3R8dHJ1ZQorZGV0ZWN0b3JJdGVyYXRvcklkaW9tcz1JdGVyYXRvcklkaW9tc3x0cnVlCitkZXRlY3RvckxhenlJbml0PUxhenlJbml0fHRydWUKK2RldGVjdG9yTG9hZE9mS25vd25OdWxsVmFsdWU9TG9hZE9mS25vd25OdWxsVmFsdWV8dHJ1ZQorZGV0ZWN0b3JMb2NrZWRGaWVsZHM9TG9ja2VkRmllbGRzfGZhbHNlCitkZXRlY3Rvck1ldGhvZFJldHVybkNoZWNrPU1ldGhvZFJldHVybkNoZWNrfHRydWUKK2RldGVjdG9yTWV0aG9kcz1NZXRob2RzfHRydWUKK2RldGVjdG9yTXVsdGl0aHJlYWRlZEluc3RhbmNlQWNjZXNzPU11bHRpdGhyZWFkZWRJbnN0YW5jZUFjY2Vzc3x0cnVlCitkZXRlY3Rvck11dGFibGVMb2NrPU11dGFibGVMb2NrfHRydWUKK2RldGVjdG9yTXV0YWJsZVN0YXRpY0ZpZWxkcz1NdXRhYmxlU3RhdGljRmllbGRzfHRydWUKK2RldGVjdG9yTmFtaW5nPU5hbWluZ3x0cnVlCitkZXRlY3Rvck5vdGVBbm5vdGF0aW9uUmV0ZW50aW9uPU5vdGVBbm5vdGF0aW9uUmV0ZW50aW9ufHRydWUKK2RldGVjdG9yTm90ZUNoZWNrUmV0dXJuVmFsdWU9Tm90ZUNoZWNrUmV0dXJuVmFsdWV8dHJ1ZQorZGV0ZWN0b3JOb3RlQ2hlY2tSZXR1cm5WYWx1ZUFubm90YXRpb25zPU5vdGVDaGVja1JldHVyblZhbHVlQW5ub3RhdGlvbnN8dHJ1ZQorZGV0ZWN0b3JOb3RlSkNJUEFubm90YXRpb249Tm90ZUpDSVBBbm5vdGF0aW9ufHRydWUKK2RldGVjdG9yTm90ZU5vbk51bGxBbm5vdGF0aW9ucz1Ob3RlTm9uTnVsbEFubm90YXRpb25zfHRydWUKK2RldGVjdG9yTm90ZVN1cHByZXNzZWRXYXJuaW5ncz1Ob3RlU3VwcHJlc3NlZFdhcm5pbmdzfHRydWUKK2RldGVjdG9yTm90ZVVuY29uZGl0aW9uYWxQYXJhbURlcmVmcz1Ob3RlVW5jb25kaXRpb25hbFBhcmFtRGVyZWZzfHRydWUKK2RldGVjdG9yTnVtYmVyQ29uc3RydWN0b3I9TnVtYmVyQ29uc3RydWN0b3J8ZmFsc2UKK2RldGVjdG9yUHJlZmVyWmVyb0xlbmd0aEFycmF5cz1QcmVmZXJaZXJvTGVuZ3RoQXJyYXlzfHRydWUKK2RldGVjdG9yUHVibGljU2VtYXBob3Jlcz1QdWJsaWNTZW1hcGhvcmVzfGZhbHNlCitkZXRlY3RvclF1ZXN0aW9uYWJsZUJvb2xlYW5Bc3NpZ25tZW50PVF1ZXN0aW9uYWJsZUJvb2xlYW5Bc3NpZ25tZW50fHRydWUKK2RldGVjdG9yUmVhZFJldHVyblNob3VsZEJlQ2hlY2tlZD1SZWFkUmV0dXJuU2hvdWxkQmVDaGVja2VkfHRydWUKK2RldGVjdG9yUmVkdW5kYW50SW50ZXJmYWNlcz1SZWR1bmRhbnRJbnRlcmZhY2VzfHRydWUKK2RldGVjdG9yUmVzb2x2ZUFsbFJlZmVyZW5jZXM9UmVzb2x2ZUFsbFJlZmVyZW5jZXN8ZmFsc2UKK2RldGVjdG9yUnVudGltZUV4Y2VwdGlvbkNhcHR1cmU9UnVudGltZUV4Y2VwdGlvbkNhcHR1cmV8dHJ1ZQorZGV0ZWN0b3JTZXJpYWxpemFibGVJZGlvbT1TZXJpYWxpemFibGVJZGlvbXx0cnVlCitkZXRlY3RvclN0YXJ0SW5Db25zdHJ1Y3Rvcj1TdGFydEluQ29uc3RydWN0b3J8dHJ1ZQorZGV0ZWN0b3JTdHJpbmdDb25jYXRlbmF0aW9uPVN0cmluZ0NvbmNhdGVuYXRpb258dHJ1ZQorZGV0ZWN0b3JTdXBlcmZsdW91c0luc3RhbmNlT2Y9U3VwZXJmbHVvdXNJbnN0YW5jZU9mfHRydWUKK2RldGVjdG9yU3VzcGljaW91c1RocmVhZEludGVycnVwdGVkPVN1c3BpY2lvdXNUaHJlYWRJbnRlcnJ1cHRlZHx0cnVlCitkZXRlY3RvclN3aXRjaEZhbGx0aHJvdWdoPVN3aXRjaEZhbGx0aHJvdWdofHRydWUKK2RldGVjdG9yVGVzdEFTTT1UZXN0QVNNfGZhbHNlCitkZXRlY3RvclRlc3RpbmdHcm91bmQ9VGVzdGluZ0dyb3VuZHxmYWxzZQorZGV0ZWN0b3JUcmFpbkZpZWxkU3RvcmVUeXBlcz1UcmFpbkZpZWxkU3RvcmVUeXBlc3x0cnVlCitkZXRlY3RvclRyYWluTm9uTnVsbEFubm90YXRpb25zPVRyYWluTm9uTnVsbEFubm90YXRpb25zfHRydWUKK2RldGVjdG9yVHJhaW5VbmNvbmRpdGlvbmFsRGVyZWZQYXJhbXM9VHJhaW5VbmNvbmRpdGlvbmFsRGVyZWZQYXJhbXN8dHJ1ZQorZGV0ZWN0b3JVUkxQcm9ibGVtcz1VUkxQcm9ibGVtc3x0cnVlCitkZXRlY3RvclVuY2FsbGFibGVNZXRob2RPZkFub255bW91c0NsYXNzPVVuY2FsbGFibGVNZXRob2RPZkFub255bW91c0NsYXNzfHRydWUKK2RldGVjdG9yVW5uZWNlc3NhcnlNYXRoPVVubmVjZXNzYXJ5TWF0aHx0cnVlCitkZXRlY3RvclVucmVhZEZpZWxkcz1VbnJlYWRGaWVsZHN8dHJ1ZQorZGV0ZWN0b3JVc2VPYmplY3RFcXVhbHM9VXNlT2JqZWN0RXF1YWxzfGZhbHNlCitkZXRlY3RvclVzZWxlc3NTdWJjbGFzc01ldGhvZD1Vc2VsZXNzU3ViY2xhc3NNZXRob2R8ZmFsc2UKK2RldGVjdG9yVmFyQXJnc1Byb2JsZW1zPVZhckFyZ3NQcm9ibGVtc3x0cnVlCitkZXRlY3RvclZvbGF0aWxlVXNhZ2U9Vm9sYXRpbGVVc2FnZXx0cnVlCitkZXRlY3RvcldhaXRJbkxvb3A9V2FpdEluTG9vcHx0cnVlCitkZXRlY3Rvcldyb25nTWFwSXRlcmF0b3I9V3JvbmdNYXBJdGVyYXRvcnx0cnVlCitkZXRlY3RvclhNTEZhY3RvcnlCeXBhc3M9WE1MRmFjdG9yeUJ5cGFzc3x0cnVlCitkZXRlY3Rvcl90aHJlc2hvbGQ9MgorZmlsdGVyX3NldHRpbmdzPU1lZGl1bXxJMThOLE1UX0NPUlJFQ1RORVNTLE1BTElDSU9VU19DT0RFLEJBRF9QUkFDVElDRSxTVFlMRSxDT1JSRUNUTkVTUyxQRVJGT1JNQU5DRXxmYWxzZQorZmlsdGVyX3NldHRpbmdzX25lZz18CmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy8ucHJvamVjdCBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLy5wcm9qZWN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE4OWJlYjAKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy8ucHJvamVjdApAQCAtMCwwICsxLDI4IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPHByb2plY3REZXNjcmlwdGlvbj4KKwk8bmFtZT5vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHM8L25hbWU+CisJPGNvbW1lbnQ+PC9jb21tZW50PgorCTxwcm9qZWN0cz4KKwk8L3Byb2plY3RzPgorCTxidWlsZFNwZWM+CisJCTxidWlsZENvbW1hbmQ+CisJCQk8bmFtZT5vcmcuZWNsaXBzZS5qZHQuY29yZS5qYXZhYnVpbGRlcjwvbmFtZT4KKwkJCTxhcmd1bWVudHM+CisJCQk8L2FyZ3VtZW50cz4KKwkJPC9idWlsZENvbW1hbmQ+CisJCTxidWlsZENvbW1hbmQ+CisJCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuTWFuaWZlc3RCdWlsZGVyPC9uYW1lPgorCQkJPGFyZ3VtZW50cz4KKwkJCTwvYXJndW1lbnRzPgorCQk8L2J1aWxkQ29tbWFuZD4KKwkJPGJ1aWxkQ29tbWFuZD4KKwkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5TY2hlbWFCdWlsZGVyPC9uYW1lPgorCQkJPGFyZ3VtZW50cz4KKwkJCTwvYXJndW1lbnRzPgorCQk8L2J1aWxkQ29tbWFuZD4KKwk8L2J1aWxkU3BlYz4KKwk8bmF0dXJlcz4KKwkJPG5hdHVyZT5vcmcuZWNsaXBzZS5qZHQuY29yZS5qYXZhbmF0dXJlPC9uYXR1cmU+CisJCTxuYXR1cmU+b3JnLmVjbGlwc2UucGRlLlBsdWdpbk5hdHVyZTwvbmF0dXJlPgorCTwvbmF0dXJlcz4KKzwvcHJvamVjdERlc2NyaXB0aW9uPgpkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY0MDNhYjcKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMKQEAgLTAsMCArMSw2OSBAQAorI01vbiBKYW4gMjEgMTI6Mzk6NDcgRVNUIDIwMDgKK2VjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb2RlZ2VuLnRhcmdldFBsYXRmb3JtPTEuNQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29tcGxpYW5jZT0xLjUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmRvYy5jb21tZW50LnN1cHBvcnQ9ZW5hYmxlZAorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5hbm5vdGF0aW9uU3VwZXJJbnRlcmZhY2U9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5hc3NlcnRJZGVudGlmaWVyPWVycm9yCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmF1dG9ib3hpbmc9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5kZXByZWNhdGlvbj13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRlcHJlY2F0aW9uSW5EZXByZWNhdGVkQ29kZT1kaXNhYmxlZAorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5kZXByZWNhdGlvbldoZW5PdmVycmlkaW5nRGVwcmVjYXRlZE1ldGhvZD1kaXNhYmxlZAorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5kaXNjb3VyYWdlZFJlZmVyZW5jZT13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmVtcHR5U3RhdGVtZW50PWlnbm9yZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5lbnVtSWRlbnRpZmllcj1lcnJvcgorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5mYWxsdGhyb3VnaENhc2U9aWdub3JlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZpZWxkSGlkaW5nPWlnbm9yZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5maW5hbFBhcmFtZXRlckJvdW5kPWlnbm9yZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5maW5hbGx5QmxvY2tOb3RDb21wbGV0aW5nTm9ybWFsbHk9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5mb3JiaWRkZW5SZWZlcmVuY2U9ZXJyb3IKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaGlkZGVuQ2F0Y2hCbG9jaz13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmluY29tcGF0aWJsZU5vbkluaGVyaXRlZEludGVyZmFjZU1ldGhvZD13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmluY29tcGxldGVFbnVtU3dpdGNoPWlnbm9yZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbmRpcmVjdFN0YXRpY0FjY2Vzcz13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmludmFsaWRKYXZhZG9jPWlnbm9yZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbnZhbGlkSmF2YWRvY1RhZ3M9ZW5hYmxlZAorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbnZhbGlkSmF2YWRvY1RhZ3NEZXByZWNhdGVkUmVmPWVuYWJsZWQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW52YWxpZEphdmFkb2NUYWdzTm90VmlzaWJsZVJlZj1lbmFibGVkCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmludmFsaWRKYXZhZG9jVGFnc1Zpc2liaWxpdHk9cHVibGljCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmxvY2FsVmFyaWFibGVIaWRpbmc9aWdub3JlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1ldGhvZFdpdGhDb25zdHJ1Y3Rvck5hbWU9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nRGVwcmVjYXRlZEFubm90YXRpb249aWdub3JlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdKYXZhZG9jQ29tbWVudHM9aWdub3JlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdKYXZhZG9jQ29tbWVudHNPdmVycmlkaW5nPWVuYWJsZWQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0phdmFkb2NDb21tZW50c1Zpc2liaWxpdHk9cHVibGljCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdKYXZhZG9jVGFncz1pZ25vcmUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0phdmFkb2NUYWdzT3ZlcnJpZGluZz1lbmFibGVkCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdKYXZhZG9jVGFnc1Zpc2liaWxpdHk9cHVibGljCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdPdmVycmlkZUFubm90YXRpb249aWdub3JlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdTZXJpYWxWZXJzaW9uPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubm9FZmZlY3RBc3NpZ25tZW50PXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubm9JbXBsaWNpdFN0cmluZ0NvbnZlcnNpb249d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5ub25FeHRlcm5hbGl6ZWRTdHJpbmdMaXRlcmFsPWlnbm9yZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5udWxsUmVmZXJlbmNlPWlnbm9yZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5vdmVycmlkaW5nUGFja2FnZURlZmF1bHRNZXRob2Q9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5wYXJhbWV0ZXJBc3NpZ25tZW50PWlnbm9yZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5wb3NzaWJsZUFjY2lkZW50YWxCb29sZWFuQXNzaWdubWVudD13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnJhd1R5cGVSZWZlcmVuY2U9aWdub3JlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnNwZWNpYWxQYXJhbWV0ZXJIaWRpbmdGaWVsZD1kaXNhYmxlZAorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5zdGF0aWNBY2Nlc3NSZWNlaXZlcj13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnN1cHByZXNzV2FybmluZ3M9ZW5hYmxlZAorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5zeW50aGV0aWNBY2Nlc3NFbXVsYXRpb249aWdub3JlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnR5cGVQYXJhbWV0ZXJIaWRpbmc9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bmNoZWNrZWRUeXBlT3BlcmF0aW9uPWlnbm9yZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bmRvY3VtZW50ZWRFbXB0eUJsb2NrPWlnbm9yZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bmhhbmRsZWRXYXJuaW5nVG9rZW49d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bm5lY2Vzc2FyeUVsc2U9aWdub3JlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVubmVjZXNzYXJ5VHlwZUNoZWNrPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5xdWFsaWZpZWRGaWVsZEFjY2Vzcz1pZ25vcmUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkRGVjbGFyZWRUaHJvd25FeGNlcHRpb249d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWREZWNsYXJlZFRocm93bkV4Y2VwdGlvbldoZW5PdmVycmlkaW5nPWVuYWJsZWQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkSW1wb3J0PWlnbm9yZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRMYWJlbD13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZExvY2FsPWlnbm9yZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRQYXJhbWV0ZXI9aWdub3JlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZFBhcmFtZXRlcldoZW5JbXBsZW1lbnRpbmdBYnN0cmFjdD1lbmFibGVkCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZFBhcmFtZXRlcldoZW5PdmVycmlkaW5nQ29uY3JldGU9ZW5hYmxlZAorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRQcml2YXRlTWVtYmVyPWlnbm9yZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS52YXJhcmdzQXJndW1lbnROZWVkQ2FzdD13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5zb3VyY2U9MS41CmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LnVpLnByZWZzIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC51aS5wcmVmcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNzc1ZTg3Ci0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC51aS5wcmVmcwpAQCAtMCwwICsxLDUwIEBACisjV2VkIEp1bCAyNSAxMjoyNzowMCBFRFQgMjAwNworY2xlYW51cC5hZGRfZGVmYXVsdF9zZXJpYWxfdmVyc2lvbl9pZD10cnVlCitjbGVhbnVwLmFkZF9nZW5lcmF0ZWRfc2VyaWFsX3ZlcnNpb25faWQ9ZmFsc2UKK2NsZWFudXAuYWRkX21pc3NpbmdfYW5ub3RhdGlvbnM9dHJ1ZQorY2xlYW51cC5hZGRfbWlzc2luZ19kZXByZWNhdGVkX2Fubm90YXRpb25zPXRydWUKK2NsZWFudXAuYWRkX21pc3NpbmdfbmxzX3RhZ3M9ZmFsc2UKK2NsZWFudXAuYWRkX21pc3Npbmdfb3ZlcnJpZGVfYW5ub3RhdGlvbnM9dHJ1ZQorY2xlYW51cC5hZGRfc2VyaWFsX3ZlcnNpb25faWQ9ZmFsc2UKK2NsZWFudXAuYWx3YXlzX3VzZV9ibG9ja3M9dHJ1ZQorY2xlYW51cC5hbHdheXNfdXNlX3BhcmVudGhlc2VzX2luX2V4cHJlc3Npb25zPXRydWUKK2NsZWFudXAuYWx3YXlzX3VzZV90aGlzX2Zvcl9ub25fc3RhdGljX2ZpZWxkX2FjY2Vzcz1mYWxzZQorY2xlYW51cC5hbHdheXNfdXNlX3RoaXNfZm9yX25vbl9zdGF0aWNfbWV0aG9kX2FjY2Vzcz1mYWxzZQorY2xlYW51cC5jb252ZXJ0X3RvX2VuaGFuY2VkX2Zvcl9sb29wPXRydWUKK2NsZWFudXAuZm9ybWF0X3NvdXJjZV9jb2RlPXRydWUKK2NsZWFudXAubWFrZV9sb2NhbF92YXJpYWJsZV9maW5hbD10cnVlCitjbGVhbnVwLm1ha2VfcGFyYW1ldGVyc19maW5hbD10cnVlCitjbGVhbnVwLm1ha2VfcHJpdmF0ZV9maWVsZHNfZmluYWw9dHJ1ZQorY2xlYW51cC5tYWtlX3ZhcmlhYmxlX2RlY2xhcmF0aW9uc19maW5hbD10cnVlCitjbGVhbnVwLm5ldmVyX3VzZV9ibG9ja3M9ZmFsc2UKK2NsZWFudXAubmV2ZXJfdXNlX3BhcmVudGhlc2VzX2luX2V4cHJlc3Npb25zPWZhbHNlCitjbGVhbnVwLm9yZ2FuaXplX2ltcG9ydHM9dHJ1ZQorY2xlYW51cC5xdWFsaWZ5X3N0YXRpY19maWVsZF9hY2Nlc3Nlc193aXRoX2RlY2xhcmluZ19jbGFzcz1mYWxzZQorY2xlYW51cC5xdWFsaWZ5X3N0YXRpY19tZW1iZXJfYWNjZXNzZXNfdGhyb3VnaF9pbnN0YW5jZXNfd2l0aF9kZWNsYXJpbmdfY2xhc3M9dHJ1ZQorY2xlYW51cC5xdWFsaWZ5X3N0YXRpY19tZW1iZXJfYWNjZXNzZXNfdGhyb3VnaF9zdWJ0eXBlc193aXRoX2RlY2xhcmluZ19jbGFzcz10cnVlCitjbGVhbnVwLnF1YWxpZnlfc3RhdGljX21lbWJlcl9hY2Nlc3Nlc193aXRoX2RlY2xhcmluZ19jbGFzcz10cnVlCitjbGVhbnVwLnF1YWxpZnlfc3RhdGljX21ldGhvZF9hY2Nlc3Nlc193aXRoX2RlY2xhcmluZ19jbGFzcz1mYWxzZQorY2xlYW51cC5yZW1vdmVfcHJpdmF0ZV9jb25zdHJ1Y3RvcnM9dHJ1ZQorY2xlYW51cC5yZW1vdmVfdHJhaWxpbmdfd2hpdGVzcGFjZXM9dHJ1ZQorY2xlYW51cC5yZW1vdmVfdHJhaWxpbmdfd2hpdGVzcGFjZXNfYWxsPXRydWUKK2NsZWFudXAucmVtb3ZlX3RyYWlsaW5nX3doaXRlc3BhY2VzX2lnbm9yZV9lbXB0eT1mYWxzZQorY2xlYW51cC5yZW1vdmVfdW5uZWNlc3NhcnlfY2FzdHM9dHJ1ZQorY2xlYW51cC5yZW1vdmVfdW5uZWNlc3NhcnlfbmxzX3RhZ3M9dHJ1ZQorY2xlYW51cC5yZW1vdmVfdW51c2VkX2ltcG9ydHM9dHJ1ZQorY2xlYW51cC5yZW1vdmVfdW51c2VkX2xvY2FsX3ZhcmlhYmxlcz10cnVlCitjbGVhbnVwLnJlbW92ZV91bnVzZWRfcHJpdmF0ZV9maWVsZHM9dHJ1ZQorY2xlYW51cC5yZW1vdmVfdW51c2VkX3ByaXZhdGVfbWVtYmVycz10cnVlCitjbGVhbnVwLnJlbW92ZV91bnVzZWRfcHJpdmF0ZV9tZXRob2RzPXRydWUKK2NsZWFudXAucmVtb3ZlX3VudXNlZF9wcml2YXRlX3R5cGVzPXRydWUKK2NsZWFudXAuc29ydF9tZW1iZXJzPWZhbHNlCitjbGVhbnVwLnNvcnRfbWVtYmVyc19hbGw9ZmFsc2UKK2NsZWFudXAudXNlX2Jsb2Nrcz10cnVlCitjbGVhbnVwLnVzZV9ibG9ja3Nfb25seV9mb3JfcmV0dXJuX2FuZF90aHJvdz1mYWxzZQorY2xlYW51cC51c2VfcGFyZW50aGVzZXNfaW5fZXhwcmVzc2lvbnM9ZmFsc2UKK2NsZWFudXAudXNlX3RoaXNfZm9yX25vbl9zdGF0aWNfZmllbGRfYWNjZXNzPWZhbHNlCitjbGVhbnVwLnVzZV90aGlzX2Zvcl9ub25fc3RhdGljX2ZpZWxkX2FjY2Vzc19vbmx5X2lmX25lY2Vzc2FyeT10cnVlCitjbGVhbnVwLnVzZV90aGlzX2Zvcl9ub25fc3RhdGljX21ldGhvZF9hY2Nlc3M9ZmFsc2UKK2NsZWFudXAudXNlX3RoaXNfZm9yX25vbl9zdGF0aWNfbWV0aG9kX2FjY2Vzc19vbmx5X2lmX25lY2Vzc2FyeT10cnVlCitjbGVhbnVwX3Byb2ZpbGU9X2NsZWFudXAKK2NsZWFudXBfc2V0dGluZ3NfdmVyc2lvbj0yCitlY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQpkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMvTUVUQS1JTkYvTUFOSUZFU1QuTUYgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy9NRVRBLUlORi9NQU5JRkVTVC5NRgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNzI2YTBmCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMvTUVUQS1JTkYvTUFOSUZFU1QuTUYKQEAgLTAsMCArMSwyNyBAQAorTWFuaWZlc3QtVmVyc2lvbjogMS4wCitCdW5kbGUtTWFuaWZlc3RWZXJzaW9uOiAyCitCdW5kbGUtTmFtZTogJXBsdWdpbk5hbWUKK0J1bmRsZS1TeW1ib2xpY05hbWU6IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVsczsgc2luZ2xldG9uOj10cnVlCitCdW5kbGUtVmVyc2lvbjogMS4yLjEKK0J1bmRsZS1DbGFzc1BhdGg6IC4KK0J1bmRsZS1BY3RpdmF0b3I6IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5BY3RpdmF0b3IKK0J1bmRsZS1WZW5kb3I6ICVwcm92aWRlck5hbWUKK0J1bmRsZS1Mb2NhbGl6YXRpb246IHBsdWdpbgorRXhwb3J0LVBhY2thZ2U6IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscywKKyBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMucHJlZGljYXRlcy5kaXNlYXNlcHJlZGljYXRlcywKKyBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMucHJlZGljYXRlcy5kaXNlYXNlcHJlZGljYXRlcy5pbXBsLAorIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5wcmVkaWNhdGVzLmRpc2Vhc2VwcmVkaWNhdGVzLnByb3ZpZGVyLAorIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5wcmVkaWNhdGVzLmRpc2Vhc2VwcmVkaWNhdGVzLnV0aWwsCisgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLAorIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5pbXBsLAorIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5wcm92aWRlciwKKyBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQudXRpbAorUmVxdWlyZS1CdW5kbGU6IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZSwKKyBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zO3Zpc2liaWxpdHk6PXJlZXhwb3J0LAorIG9yZy5lY2xpcHNlLnN0ZW0udHJhbnNwb3J0LAorIG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVsczt2aXNpYmlsaXR5Oj1yZWV4cG9ydCwKKyBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuZWRpdDtidW5kbGUtdmVyc2lvbj0iMi42LjAiLAorIG9yZy5lY2xpcHNlLnN0ZW0uaW50ZXJ2ZW50aW9ucywKKyBvcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5CitCdW5kbGUtQWN0aXZhdGlvblBvbGljeTogbGF6eQorQnVuZGxlLVJlcXVpcmVkRXhlY3V0aW9uRW52aXJvbm1lbnQ6IEoyU0UtMS41CmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy9idWlsZC5wcm9wZXJ0aWVzIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMvYnVpbGQucHJvcGVydGllcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMDE5ZjdlCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMvYnVpbGQucHJvcGVydGllcwpAQCAtMCwwICsxLDE5IEBACisjIDxjb3B5cmlnaHQ+CisjIDwvY29weXJpZ2h0PgorIworIyAkSWQkCisKK2Jpbi5pbmNsdWRlcyA9IC4sXAorICAgICAgICAgICAgICAgaWNvbnMvLFwKKyAgICAgICAgICAgICAgIE1FVEEtSU5GLyxcCisgICAgICAgICAgICAgICBwbHVnaW4ueG1sLFwKKyAgICAgICAgICAgICAgIHBsdWdpbi5wcm9wZXJ0aWVzLFwKKyAgICAgICAgICAgICAgIGJpbi8sXAorICAgICAgICAgICAgICAgZXBsLXYxMC5odG1sLFwKKyAgICAgICAgICAgICAgIG5vdGljZS5odG1sLFwKKyAgICAgICAgICAgICAgIHBsdWdpbl9kZS5wcm9wZXJ0aWVzLFwKKyAgICAgICAgICAgICAgIHBsdWdpbl9rci5wcm9wZXJ0aWVzLFwKKyAgICAgICAgICAgICAgIHBsdWdpbl96aC5wcm9wZXJ0aWVzCitqYXJzLmNvbXBpbGUub3JkZXIgPSAuCitzb3VyY2UuLiA9IHNyYy8KK291dHB1dC4uID0gYmluLwpkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMvZXBsLXYxMC5odG1sIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMvZXBsLXYxMC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVkNGIxOTYKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy9lcGwtdjEwLmh0bWwKQEAgLTAsMCArMSwzMjggQEAKKzxodG1sIHhtbG5zOm89InVybjpzY2hlbWFzLW1pY3Jvc29mdC1jb206b2ZmaWNlOm9mZmljZSIKK3htbG5zOnc9InVybjpzY2hlbWFzLW1pY3Jvc29mdC1jb206b2ZmaWNlOndvcmQiCit4bWxucz0iaHR0cDovL3d3dy53My5vcmcvVFIvUkVDLWh0bWw0MCI+CisKKzxoZWFkPgorPG1ldGEgaHR0cC1lcXVpdj1Db250ZW50LVR5cGUgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PXdpbmRvd3MtMTI1MiI+Cis8bWV0YSBuYW1lPVByb2dJZCBjb250ZW50PVdvcmQuRG9jdW1lbnQ+Cis8bWV0YSBuYW1lPUdlbmVyYXRvciBjb250ZW50PSJNaWNyb3NvZnQgV29yZCA5Ij4KKzxtZXRhIG5hbWU9T3JpZ2luYXRvciBjb250ZW50PSJNaWNyb3NvZnQgV29yZCA5Ij4KKzxsaW5rIHJlbD1GaWxlLUxpc3QKK2hyZWY9Ii4vRWNsaXBzZSUyMEVQTCUyMDIwMDNfMTFfMTAlMjBGaW5hbF9maWxlcy9maWxlbGlzdC54bWwiPgorPHRpdGxlPkVjbGlwc2UgUHVibGljIExpY2Vuc2UgLSBWZXJzaW9uIDEuMDwvdGl0bGU+Cis8IS0tW2lmIGd0ZSBtc28gOV0+PHhtbD4KKyA8bzpEb2N1bWVudFByb3BlcnRpZXM+CisgIDxvOlJldmlzaW9uPjI8L286UmV2aXNpb24+CisgIDxvOlRvdGFsVGltZT4zPC9vOlRvdGFsVGltZT4KKyAgPG86Q3JlYXRlZD4yMDA0LTAzLTA1VDIzOjAzOjAwWjwvbzpDcmVhdGVkPgorICA8bzpMYXN0U2F2ZWQ+MjAwNC0wMy0wNVQyMzowMzowMFo8L286TGFzdFNhdmVkPgorICA8bzpQYWdlcz40PC9vOlBhZ2VzPgorICA8bzpXb3Jkcz4xNjI2PC9vOldvcmRzPgorICA8bzpDaGFyYWN0ZXJzPjkyNzA8L286Q2hhcmFjdGVycz4KKyAgIDxvOkxpbmVzPjc3PC9vOkxpbmVzPgorICA8bzpQYXJhZ3JhcGhzPjE4PC9vOlBhcmFncmFwaHM+CisgIDxvOkNoYXJhY3RlcnNXaXRoU3BhY2VzPjExMzg0PC9vOkNoYXJhY3RlcnNXaXRoU3BhY2VzPgorICA8bzpWZXJzaW9uPjkuNDQwMjwvbzpWZXJzaW9uPgorIDwvbzpEb2N1bWVudFByb3BlcnRpZXM+Cis8L3htbD48IVtlbmRpZl0tLT48IS0tW2lmIGd0ZSBtc28gOV0+PHhtbD4KKyA8dzpXb3JkRG9jdW1lbnQ+CisgIDx3OlRyYWNrUmV2aXNpb25zLz4KKyA8L3c6V29yZERvY3VtZW50PgorPC94bWw+PCFbZW5kaWZdLS0+Cis8c3R5bGU+Cis8IS0tCisgLyogRm9udCBEZWZpbml0aW9ucyAqLworQGZvbnQtZmFjZQorCXtmb250LWZhbWlseTpUYWhvbWE7CisJcGFub3NlLTE6MiAxMSA2IDQgMyA1IDQgNCAyIDQ7CisJbXNvLWZvbnQtY2hhcnNldDowOworCW1zby1nZW5lcmljLWZvbnQtZmFtaWx5OnN3aXNzOworCW1zby1mb250LXBpdGNoOnZhcmlhYmxlOworCW1zby1mb250LXNpZ25hdHVyZTo1NTM2Nzk0OTUgLTIxNDc0ODM2NDggOCAwIDY2MDQ3IDA7fQorIC8qIFN0eWxlIERlZmluaXRpb25zICovCitwLk1zb05vcm1hbCwgbGkuTXNvTm9ybWFsLCBkaXYuTXNvTm9ybWFsCisJe21zby1zdHlsZS1wYXJlbnQ6IiI7CisJbWFyZ2luOjBpbjsKKwltYXJnaW4tYm90dG9tOi4wMDAxcHQ7CisJbXNvLXBhZ2luYXRpb246d2lkb3ctb3JwaGFuOworCWZvbnQtc2l6ZToxMi4wcHQ7CisJZm9udC1mYW1pbHk6IlRpbWVzIE5ldyBSb21hbiI7CisJbXNvLWZhcmVhc3QtZm9udC1mYW1pbHk6IlRpbWVzIE5ldyBSb21hbiI7fQorcAorCXttYXJnaW4tcmlnaHQ6MGluOworCW1zby1tYXJnaW4tdG9wLWFsdDphdXRvOworCW1zby1tYXJnaW4tYm90dG9tLWFsdDphdXRvOworCW1hcmdpbi1sZWZ0OjBpbjsKKwltc28tcGFnaW5hdGlvbjp3aWRvdy1vcnBoYW47CisJZm9udC1zaXplOjEyLjBwdDsKKwlmb250LWZhbWlseToiVGltZXMgTmV3IFJvbWFuIjsKKwltc28tZmFyZWFzdC1mb250LWZhbWlseToiVGltZXMgTmV3IFJvbWFuIjt9CitwLkJhbGxvb25UZXh0LCBsaS5CYWxsb29uVGV4dCwgZGl2LkJhbGxvb25UZXh0CisJe21zby1zdHlsZS1uYW1lOiJCYWxsb29uIFRleHQiOworCW1hcmdpbjowaW47CisJbWFyZ2luLWJvdHRvbTouMDAwMXB0OworCW1zby1wYWdpbmF0aW9uOndpZG93LW9ycGhhbjsKKwlmb250LXNpemU6OC4wcHQ7CisJZm9udC1mYW1pbHk6VGFob21hOworCW1zby1mYXJlYXN0LWZvbnQtZmFtaWx5OiJUaW1lcyBOZXcgUm9tYW4iO30KK0BwYWdlIFNlY3Rpb24xCisJe3NpemU6OC41aW4gMTEuMGluOworCW1hcmdpbjoxLjBpbiAxLjI1aW4gMS4waW4gMS4yNWluOworCW1zby1oZWFkZXItbWFyZ2luOi41aW47CisJbXNvLWZvb3Rlci1tYXJnaW46LjVpbjsKKwltc28tcGFwZXItc291cmNlOjA7fQorZGl2LlNlY3Rpb24xCisJe3BhZ2U6U2VjdGlvbjE7fQorLS0+Cis8L3N0eWxlPgorPC9oZWFkPgorCis8Ym9keSBsYW5nPUVOLVVTIHN0eWxlPSd0YWItaW50ZXJ2YWw6LjVpbic+CisKKzxkaXYgY2xhc3M9U2VjdGlvbjE+CisKKzxwIGFsaWduPWNlbnRlciBzdHlsZT0ndGV4dC1hbGlnbjpjZW50ZXInPjxiPkVjbGlwc2UgUHVibGljIExpY2Vuc2UgLSB2IDEuMDwvYj4KKzwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPlRIRSBBQ0NPTVBBTllJTkcgUFJPR1JBTSBJUyBQUk9WSURFRCBVTkRFUgorVEhFIFRFUk1TIE9GIFRISVMgRUNMSVBTRSBQVUJMSUMgTElDRU5TRSAoJnF1b3Q7QUdSRUVNRU5UJnF1b3Q7KS4gQU5ZIFVTRSwKK1JFUFJPRFVDVElPTiBPUiBESVNUUklCVVRJT04gT0YgVEhFIFBST0dSQU0gQ09OU1RJVFVURVMgUkVDSVBJRU5UJ1MgQUNDRVBUQU5DRQorT0YgVEhJUyBBR1JFRU1FTlQuPC9zcGFuPiA8L3A+CisKKzxwPjxiPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4xLiBERUZJTklUSU9OUzwvc3Bhbj48L2I+IDwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPiZxdW90O0NvbnRyaWJ1dGlvbiZxdW90OyBtZWFuczo8L3NwYW4+IDwvcD4KKworPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YSkKK2luIHRoZSBjYXNlIG9mIHRoZSBpbml0aWFsIENvbnRyaWJ1dG9yLCB0aGUgaW5pdGlhbCBjb2RlIGFuZCBkb2N1bWVudGF0aW9uCitkaXN0cmlidXRlZCB1bmRlciB0aGlzIEFncmVlbWVudCwgYW5kPGJyIGNsZWFyPWxlZnQ+CitiKSBpbiB0aGUgY2FzZSBvZiBlYWNoIHN1YnNlcXVlbnQgQ29udHJpYnV0b3I6PC9zcGFuPjwvcD4KKworPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+aSkKK2NoYW5nZXMgdG8gdGhlIFByb2dyYW0sIGFuZDwvc3Bhbj48L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmlpKQorYWRkaXRpb25zIHRvIHRoZSBQcm9ncmFtOzwvc3Bhbj48L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPndoZXJlCitzdWNoIGNoYW5nZXMgYW5kL29yIGFkZGl0aW9ucyB0byB0aGUgUHJvZ3JhbSBvcmlnaW5hdGUgZnJvbSBhbmQgYXJlIGRpc3RyaWJ1dGVkCitieSB0aGF0IHBhcnRpY3VsYXIgQ29udHJpYnV0b3IuIEEgQ29udHJpYnV0aW9uICdvcmlnaW5hdGVzJyBmcm9tIGEgQ29udHJpYnV0b3IKK2lmIGl0IHdhcyBhZGRlZCB0byB0aGUgUHJvZ3JhbSBieSBzdWNoIENvbnRyaWJ1dG9yIGl0c2VsZiBvciBhbnlvbmUgYWN0aW5nIG9uCitzdWNoIENvbnRyaWJ1dG9yJ3MgYmVoYWxmLiBDb250cmlidXRpb25zIGRvIG5vdCBpbmNsdWRlIGFkZGl0aW9ucyB0byB0aGUKK1Byb2dyYW0gd2hpY2g6IChpKSBhcmUgc2VwYXJhdGUgbW9kdWxlcyBvZiBzb2Z0d2FyZSBkaXN0cmlidXRlZCBpbiBjb25qdW5jdGlvbgord2l0aCB0aGUgUHJvZ3JhbSB1bmRlciB0aGVpciBvd24gbGljZW5zZSBhZ3JlZW1lbnQsIGFuZCAoaWkpIGFyZSBub3QgZGVyaXZhdGl2ZQord29ya3Mgb2YgdGhlIFByb2dyYW0uIDwvc3Bhbj48L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4mcXVvdDtDb250cmlidXRvciZxdW90OyBtZWFucyBhbnkgcGVyc29uIG9yCitlbnRpdHkgdGhhdCBkaXN0cmlidXRlcyB0aGUgUHJvZ3JhbS48L3NwYW4+IDwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPiZxdW90O0xpY2Vuc2VkIFBhdGVudHMgJnF1b3Q7IG1lYW4gcGF0ZW50CitjbGFpbXMgbGljZW5zYWJsZSBieSBhIENvbnRyaWJ1dG9yIHdoaWNoIGFyZSBuZWNlc3NhcmlseSBpbmZyaW5nZWQgYnkgdGhlIHVzZQorb3Igc2FsZSBvZiBpdHMgQ29udHJpYnV0aW9uIGFsb25lIG9yIHdoZW4gY29tYmluZWQgd2l0aCB0aGUgUHJvZ3JhbS4gPC9zcGFuPjwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPiZxdW90O1Byb2dyYW0mcXVvdDsgbWVhbnMgdGhlIENvbnRyaWJ1dGlvbnMKK2Rpc3RyaWJ1dGVkIGluIGFjY29yZGFuY2Ugd2l0aCB0aGlzIEFncmVlbWVudC48L3NwYW4+IDwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPiZxdW90O1JlY2lwaWVudCZxdW90OyBtZWFucyBhbnlvbmUgd2hvCityZWNlaXZlcyB0aGUgUHJvZ3JhbSB1bmRlciB0aGlzIEFncmVlbWVudCwgaW5jbHVkaW5nIGFsbCBDb250cmlidXRvcnMuPC9zcGFuPiA8L3A+CisKKzxwPjxiPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4yLiBHUkFOVCBPRiBSSUdIVFM8L3NwYW4+PC9iPiA8L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmEpCitTdWJqZWN0IHRvIHRoZSB0ZXJtcyBvZiB0aGlzIEFncmVlbWVudCwgZWFjaCBDb250cmlidXRvciBoZXJlYnkgZ3JhbnRzIFJlY2lwaWVudAorYSBub24tZXhjbHVzaXZlLCB3b3JsZHdpZGUsIHJveWFsdHktZnJlZSBjb3B5cmlnaHQgbGljZW5zZSB0bzxzcGFuCitzdHlsZT0nY29sb3I6cmVkJz4gPC9zcGFuPnJlcHJvZHVjZSwgcHJlcGFyZSBkZXJpdmF0aXZlIHdvcmtzIG9mLCBwdWJsaWNseQorZGlzcGxheSwgcHVibGljbHkgcGVyZm9ybSwgZGlzdHJpYnV0ZSBhbmQgc3VibGljZW5zZSB0aGUgQ29udHJpYnV0aW9uIG9mIHN1Y2gKK0NvbnRyaWJ1dG9yLCBpZiBhbnksIGFuZCBzdWNoIGRlcml2YXRpdmUgd29ya3MsIGluIHNvdXJjZSBjb2RlIGFuZCBvYmplY3QgY29kZQorZm9ybS48L3NwYW4+PC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5iKQorU3ViamVjdCB0byB0aGUgdGVybXMgb2YgdGhpcyBBZ3JlZW1lbnQsIGVhY2ggQ29udHJpYnV0b3IgaGVyZWJ5IGdyYW50cworUmVjaXBpZW50IGEgbm9uLWV4Y2x1c2l2ZSwgd29ybGR3aWRlLDxzcGFuIHN0eWxlPSdjb2xvcjpncmVlbic+IDwvc3Bhbj5yb3lhbHR5LWZyZWUKK3BhdGVudCBsaWNlbnNlIHVuZGVyIExpY2Vuc2VkIFBhdGVudHMgdG8gbWFrZSwgdXNlLCBzZWxsLCBvZmZlciB0byBzZWxsLCBpbXBvcnQKK2FuZCBvdGhlcndpc2UgdHJhbnNmZXIgdGhlIENvbnRyaWJ1dGlvbiBvZiBzdWNoIENvbnRyaWJ1dG9yLCBpZiBhbnksIGluIHNvdXJjZQorY29kZSBhbmQgb2JqZWN0IGNvZGUgZm9ybS4gVGhpcyBwYXRlbnQgbGljZW5zZSBzaGFsbCBhcHBseSB0byB0aGUgY29tYmluYXRpb24KK29mIHRoZSBDb250cmlidXRpb24gYW5kIHRoZSBQcm9ncmFtIGlmLCBhdCB0aGUgdGltZSB0aGUgQ29udHJpYnV0aW9uIGlzIGFkZGVkCitieSB0aGUgQ29udHJpYnV0b3IsIHN1Y2ggYWRkaXRpb24gb2YgdGhlIENvbnRyaWJ1dGlvbiBjYXVzZXMgc3VjaCBjb21iaW5hdGlvbgordG8gYmUgY292ZXJlZCBieSB0aGUgTGljZW5zZWQgUGF0ZW50cy4gVGhlIHBhdGVudCBsaWNlbnNlIHNoYWxsIG5vdCBhcHBseSB0bworYW55IG90aGVyIGNvbWJpbmF0aW9ucyB3aGljaCBpbmNsdWRlIHRoZSBDb250cmlidXRpb24uIE5vIGhhcmR3YXJlIHBlciBzZSBpcworbGljZW5zZWQgaGVyZXVuZGVyLiA8L3NwYW4+PC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5jKQorUmVjaXBpZW50IHVuZGVyc3RhbmRzIHRoYXQgYWx0aG91Z2ggZWFjaCBDb250cmlidXRvciBncmFudHMgdGhlIGxpY2Vuc2VzIHRvIGl0cworQ29udHJpYnV0aW9ucyBzZXQgZm9ydGggaGVyZWluLCBubyBhc3N1cmFuY2VzIGFyZSBwcm92aWRlZCBieSBhbnkgQ29udHJpYnV0b3IKK3RoYXQgdGhlIFByb2dyYW0gZG9lcyBub3QgaW5mcmluZ2UgdGhlIHBhdGVudCBvciBvdGhlciBpbnRlbGxlY3R1YWwgcHJvcGVydHkKK3JpZ2h0cyBvZiBhbnkgb3RoZXIgZW50aXR5LiBFYWNoIENvbnRyaWJ1dG9yIGRpc2NsYWltcyBhbnkgbGlhYmlsaXR5IHRvIFJlY2lwaWVudAorZm9yIGNsYWltcyBicm91Z2h0IGJ5IGFueSBvdGhlciBlbnRpdHkgYmFzZWQgb24gaW5mcmluZ2VtZW50IG9mIGludGVsbGVjdHVhbAorcHJvcGVydHkgcmlnaHRzIG9yIG90aGVyd2lzZS4gQXMgYSBjb25kaXRpb24gdG8gZXhlcmNpc2luZyB0aGUgcmlnaHRzIGFuZAorbGljZW5zZXMgZ3JhbnRlZCBoZXJldW5kZXIsIGVhY2ggUmVjaXBpZW50IGhlcmVieSBhc3N1bWVzIHNvbGUgcmVzcG9uc2liaWxpdHkKK3RvIHNlY3VyZSBhbnkgb3RoZXIgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBuZWVkZWQsIGlmIGFueS4gRm9yIGV4YW1wbGUsCitpZiBhIHRoaXJkIHBhcnR5IHBhdGVudCBsaWNlbnNlIGlzIHJlcXVpcmVkIHRvIGFsbG93IFJlY2lwaWVudCB0byBkaXN0cmlidXRlCit0aGUgUHJvZ3JhbSwgaXQgaXMgUmVjaXBpZW50J3MgcmVzcG9uc2liaWxpdHkgdG8gYWNxdWlyZSB0aGF0IGxpY2Vuc2UgYmVmb3JlCitkaXN0cmlidXRpbmcgdGhlIFByb2dyYW0uPC9zcGFuPjwvcD4KKworPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+ZCkKK0VhY2ggQ29udHJpYnV0b3IgcmVwcmVzZW50cyB0aGF0IHRvIGl0cyBrbm93bGVkZ2UgaXQgaGFzIHN1ZmZpY2llbnQgY29weXJpZ2h0CityaWdodHMgaW4gaXRzIENvbnRyaWJ1dGlvbiwgaWYgYW55LCB0byBncmFudCB0aGUgY29weXJpZ2h0IGxpY2Vuc2Ugc2V0IGZvcnRoIGluCit0aGlzIEFncmVlbWVudC4gPC9zcGFuPjwvcD4KKworPHA+PGI+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPjMuIFJFUVVJUkVNRU5UUzwvc3Bhbj48L2I+IDwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkEgQ29udHJpYnV0b3IgbWF5IGNob29zZSB0byBkaXN0cmlidXRlIHRoZQorUHJvZ3JhbSBpbiBvYmplY3QgY29kZSBmb3JtIHVuZGVyIGl0cyBvd24gbGljZW5zZSBhZ3JlZW1lbnQsIHByb3ZpZGVkIHRoYXQ6PC9zcGFuPgorPC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5hKQoraXQgY29tcGxpZXMgd2l0aCB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhpcyBBZ3JlZW1lbnQ7IGFuZDwvc3Bhbj48L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmIpCitpdHMgbGljZW5zZSBhZ3JlZW1lbnQ6PC9zcGFuPjwvcD4KKworPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+aSkKK2VmZmVjdGl2ZWx5IGRpc2NsYWltcyBvbiBiZWhhbGYgb2YgYWxsIENvbnRyaWJ1dG9ycyBhbGwgd2FycmFudGllcyBhbmQKK2NvbmRpdGlvbnMsIGV4cHJlc3MgYW5kIGltcGxpZWQsIGluY2x1ZGluZyB3YXJyYW50aWVzIG9yIGNvbmRpdGlvbnMgb2YgdGl0bGUKK2FuZCBub24taW5mcmluZ2VtZW50LCBhbmQgaW1wbGllZCB3YXJyYW50aWVzIG9yIGNvbmRpdGlvbnMgb2YgbWVyY2hhbnRhYmlsaXR5CithbmQgZml0bmVzcyBmb3IgYSBwYXJ0aWN1bGFyIHB1cnBvc2U7IDwvc3Bhbj48L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmlpKQorZWZmZWN0aXZlbHkgZXhjbHVkZXMgb24gYmVoYWxmIG9mIGFsbCBDb250cmlidXRvcnMgYWxsIGxpYWJpbGl0eSBmb3IgZGFtYWdlcywKK2luY2x1ZGluZyBkaXJlY3QsIGluZGlyZWN0LCBzcGVjaWFsLCBpbmNpZGVudGFsIGFuZCBjb25zZXF1ZW50aWFsIGRhbWFnZXMsIHN1Y2gKK2FzIGxvc3QgcHJvZml0czsgPC9zcGFuPjwvcD4KKworPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+aWlpKQorc3RhdGVzIHRoYXQgYW55IHByb3Zpc2lvbnMgd2hpY2ggZGlmZmVyIGZyb20gdGhpcyBBZ3JlZW1lbnQgYXJlIG9mZmVyZWQgYnkgdGhhdAorQ29udHJpYnV0b3IgYWxvbmUgYW5kIG5vdCBieSBhbnkgb3RoZXIgcGFydHk7IGFuZDwvc3Bhbj48L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPml2KQorc3RhdGVzIHRoYXQgc291cmNlIGNvZGUgZm9yIHRoZSBQcm9ncmFtIGlzIGF2YWlsYWJsZSBmcm9tIHN1Y2ggQ29udHJpYnV0b3IsIGFuZAoraW5mb3JtcyBsaWNlbnNlZXMgaG93IHRvIG9idGFpbiBpdCBpbiBhIHJlYXNvbmFibGUgbWFubmVyIG9uIG9yIHRocm91Z2ggYQorbWVkaXVtIGN1c3RvbWFyaWx5IHVzZWQgZm9yIHNvZnR3YXJlIGV4Y2hhbmdlLjxzcGFuIHN0eWxlPSdjb2xvcjpibHVlJz4gPC9zcGFuPjwvc3Bhbj48L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5XaGVuIHRoZSBQcm9ncmFtIGlzIG1hZGUgYXZhaWxhYmxlIGluIHNvdXJjZQorY29kZSBmb3JtOjwvc3Bhbj4gPC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5hKQoraXQgbXVzdCBiZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGlzIEFncmVlbWVudDsgYW5kIDwvc3Bhbj48L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmIpIGEKK2NvcHkgb2YgdGhpcyBBZ3JlZW1lbnQgbXVzdCBiZSBpbmNsdWRlZCB3aXRoIGVhY2ggY29weSBvZiB0aGUgUHJvZ3JhbS4gPC9zcGFuPjwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkNvbnRyaWJ1dG9ycyBtYXkgbm90IHJlbW92ZSBvciBhbHRlciBhbnkKK2NvcHlyaWdodCBub3RpY2VzIGNvbnRhaW5lZCB3aXRoaW4gdGhlIFByb2dyYW0uIDwvc3Bhbj48L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5FYWNoIENvbnRyaWJ1dG9yIG11c3QgaWRlbnRpZnkgaXRzZWxmIGFzIHRoZQorb3JpZ2luYXRvciBvZiBpdHMgQ29udHJpYnV0aW9uLCBpZiBhbnksIGluIGEgbWFubmVyIHRoYXQgcmVhc29uYWJseSBhbGxvd3MKK3N1YnNlcXVlbnQgUmVjaXBpZW50cyB0byBpZGVudGlmeSB0aGUgb3JpZ2luYXRvciBvZiB0aGUgQ29udHJpYnV0aW9uLiA8L3NwYW4+PC9wPgorCis8cD48Yj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+NC4gQ09NTUVSQ0lBTCBESVNUUklCVVRJT048L3NwYW4+PC9iPiA8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5Db21tZXJjaWFsIGRpc3RyaWJ1dG9ycyBvZiBzb2Z0d2FyZSBtYXkKK2FjY2VwdCBjZXJ0YWluIHJlc3BvbnNpYmlsaXRpZXMgd2l0aCByZXNwZWN0IHRvIGVuZCB1c2VycywgYnVzaW5lc3MgcGFydG5lcnMKK2FuZCB0aGUgbGlrZS4gV2hpbGUgdGhpcyBsaWNlbnNlIGlzIGludGVuZGVkIHRvIGZhY2lsaXRhdGUgdGhlIGNvbW1lcmNpYWwgdXNlCitvZiB0aGUgUHJvZ3JhbSwgdGhlIENvbnRyaWJ1dG9yIHdobyBpbmNsdWRlcyB0aGUgUHJvZ3JhbSBpbiBhIGNvbW1lcmNpYWwKK3Byb2R1Y3Qgb2ZmZXJpbmcgc2hvdWxkIGRvIHNvIGluIGEgbWFubmVyIHdoaWNoIGRvZXMgbm90IGNyZWF0ZSBwb3RlbnRpYWwKK2xpYWJpbGl0eSBmb3Igb3RoZXIgQ29udHJpYnV0b3JzLiBUaGVyZWZvcmUsIGlmIGEgQ29udHJpYnV0b3IgaW5jbHVkZXMgdGhlCitQcm9ncmFtIGluIGEgY29tbWVyY2lhbCBwcm9kdWN0IG9mZmVyaW5nLCBzdWNoIENvbnRyaWJ1dG9yICgmcXVvdDtDb21tZXJjaWFsCitDb250cmlidXRvciZxdW90OykgaGVyZWJ5IGFncmVlcyB0byBkZWZlbmQgYW5kIGluZGVtbmlmeSBldmVyeSBvdGhlcgorQ29udHJpYnV0b3IgKCZxdW90O0luZGVtbmlmaWVkIENvbnRyaWJ1dG9yJnF1b3Q7KSBhZ2FpbnN0IGFueSBsb3NzZXMsIGRhbWFnZXMgYW5kCitjb3N0cyAoY29sbGVjdGl2ZWx5ICZxdW90O0xvc3NlcyZxdW90OykgYXJpc2luZyBmcm9tIGNsYWltcywgbGF3c3VpdHMgYW5kIG90aGVyCitsZWdhbCBhY3Rpb25zIGJyb3VnaHQgYnkgYSB0aGlyZCBwYXJ0eSBhZ2FpbnN0IHRoZSBJbmRlbW5pZmllZCBDb250cmlidXRvciB0bwordGhlIGV4dGVudCBjYXVzZWQgYnkgdGhlIGFjdHMgb3Igb21pc3Npb25zIG9mIHN1Y2ggQ29tbWVyY2lhbCBDb250cmlidXRvciBpbgorY29ubmVjdGlvbiB3aXRoIGl0cyBkaXN0cmlidXRpb24gb2YgdGhlIFByb2dyYW0gaW4gYSBjb21tZXJjaWFsIHByb2R1Y3QKK29mZmVyaW5nLiBUaGUgb2JsaWdhdGlvbnMgaW4gdGhpcyBzZWN0aW9uIGRvIG5vdCBhcHBseSB0byBhbnkgY2xhaW1zIG9yIExvc3NlcworcmVsYXRpbmcgdG8gYW55IGFjdHVhbCBvciBhbGxlZ2VkIGludGVsbGVjdHVhbCBwcm9wZXJ0eSBpbmZyaW5nZW1lbnQuIEluIG9yZGVyCit0byBxdWFsaWZ5LCBhbiBJbmRlbW5pZmllZCBDb250cmlidXRvciBtdXN0OiBhKSBwcm9tcHRseSBub3RpZnkgdGhlIENvbW1lcmNpYWwKK0NvbnRyaWJ1dG9yIGluIHdyaXRpbmcgb2Ygc3VjaCBjbGFpbSwgYW5kIGIpIGFsbG93IHRoZSBDb21tZXJjaWFsIENvbnRyaWJ1dG9yCit0byBjb250cm9sLCBhbmQgY29vcGVyYXRlIHdpdGggdGhlIENvbW1lcmNpYWwgQ29udHJpYnV0b3IgaW4sIHRoZSBkZWZlbnNlIGFuZAorYW55IHJlbGF0ZWQgc2V0dGxlbWVudCBuZWdvdGlhdGlvbnMuIFRoZSBJbmRlbW5pZmllZCBDb250cmlidXRvciBtYXkgcGFydGljaXBhdGUKK2luIGFueSBzdWNoIGNsYWltIGF0IGl0cyBvd24gZXhwZW5zZS48L3NwYW4+IDwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkZvciBleGFtcGxlLCBhIENvbnRyaWJ1dG9yIG1pZ2h0IGluY2x1ZGUgdGhlCitQcm9ncmFtIGluIGEgY29tbWVyY2lhbCBwcm9kdWN0IG9mZmVyaW5nLCBQcm9kdWN0IFguIFRoYXQgQ29udHJpYnV0b3IgaXMgdGhlbiBhCitDb21tZXJjaWFsIENvbnRyaWJ1dG9yLiBJZiB0aGF0IENvbW1lcmNpYWwgQ29udHJpYnV0b3IgdGhlbiBtYWtlcyBwZXJmb3JtYW5jZQorY2xhaW1zLCBvciBvZmZlcnMgd2FycmFudGllcyByZWxhdGVkIHRvIFByb2R1Y3QgWCwgdGhvc2UgcGVyZm9ybWFuY2UgY2xhaW1zIGFuZAord2FycmFudGllcyBhcmUgc3VjaCBDb21tZXJjaWFsIENvbnRyaWJ1dG9yJ3MgcmVzcG9uc2liaWxpdHkgYWxvbmUuIFVuZGVyIHRoaXMKK3NlY3Rpb24sIHRoZSBDb21tZXJjaWFsIENvbnRyaWJ1dG9yIHdvdWxkIGhhdmUgdG8gZGVmZW5kIGNsYWltcyBhZ2FpbnN0IHRoZQorb3RoZXIgQ29udHJpYnV0b3JzIHJlbGF0ZWQgdG8gdGhvc2UgcGVyZm9ybWFuY2UgY2xhaW1zIGFuZCB3YXJyYW50aWVzLCBhbmQgaWYgYQorY291cnQgcmVxdWlyZXMgYW55IG90aGVyIENvbnRyaWJ1dG9yIHRvIHBheSBhbnkgZGFtYWdlcyBhcyBhIHJlc3VsdCwgdGhlCitDb21tZXJjaWFsIENvbnRyaWJ1dG9yIG11c3QgcGF5IHRob3NlIGRhbWFnZXMuPC9zcGFuPiA8L3A+CisKKzxwPjxiPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz41LiBOTyBXQVJSQU5UWTwvc3Bhbj48L2I+IDwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkVYQ0VQVCBBUyBFWFBSRVNTTFkgU0VUIEZPUlRIIElOIFRISVMKK0FHUkVFTUVOVCwgVEhFIFBST0dSQU0gSVMgUFJPVklERUQgT04gQU4gJnF1b3Q7QVMgSVMmcXVvdDsgQkFTSVMsIFdJVEhPVVQKK1dBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgRUlUSEVSIEVYUFJFU1MgT1IgSU1QTElFRCBJTkNMVURJTkcsCitXSVRIT1VUIExJTUlUQVRJT04sIEFOWSBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgVElUTEUsIE5PTi1JTkZSSU5HRU1FTlQsCitNRVJDSEFOVEFCSUxJVFkgT1IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIEVhY2ggUmVjaXBpZW50IGlzIHNvbGVseQorcmVzcG9uc2libGUgZm9yIGRldGVybWluaW5nIHRoZSBhcHByb3ByaWF0ZW5lc3Mgb2YgdXNpbmcgYW5kIGRpc3RyaWJ1dGluZyB0aGUKK1Byb2dyYW0gYW5kIGFzc3VtZXMgYWxsIHJpc2tzIGFzc29jaWF0ZWQgd2l0aCBpdHMgZXhlcmNpc2Ugb2YgcmlnaHRzIHVuZGVyIHRoaXMKK0FncmVlbWVudCAsIGluY2x1ZGluZyBidXQgbm90IGxpbWl0ZWQgdG8gdGhlIHJpc2tzIGFuZCBjb3N0cyBvZiBwcm9ncmFtIGVycm9ycywKK2NvbXBsaWFuY2Ugd2l0aCBhcHBsaWNhYmxlIGxhd3MsIGRhbWFnZSB0byBvciBsb3NzIG9mIGRhdGEsIHByb2dyYW1zIG9yCitlcXVpcG1lbnQsIGFuZCB1bmF2YWlsYWJpbGl0eSBvciBpbnRlcnJ1cHRpb24gb2Ygb3BlcmF0aW9ucy4gPC9zcGFuPjwvcD4KKworPHA+PGI+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPjYuIERJU0NMQUlNRVIgT0YgTElBQklMSVRZPC9zcGFuPjwvYj4gPC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+RVhDRVBUIEFTIEVYUFJFU1NMWSBTRVQgRk9SVEggSU4gVEhJUworQUdSRUVNRU5ULCBORUlUSEVSIFJFQ0lQSUVOVCBOT1IgQU5ZIENPTlRSSUJVVE9SUyBTSEFMTCBIQVZFIEFOWSBMSUFCSUxJVFkgRk9SCitBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyhJTkNMVURJTkcgV0lUSE9VVCBMSU1JVEFUSU9OIExPU1QgUFJPRklUUyksIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCitPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORworTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPUiBESVNUUklCVVRJT04gT0YKK1RIRSBQUk9HUkFNIE9SIFRIRSBFWEVSQ0lTRSBPRiBBTlkgUklHSFRTIEdSQU5URUQgSEVSRVVOREVSLCBFVkVOIElGIEFEVklTRUQgT0YKK1RIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRVMuPC9zcGFuPiA8L3A+CisKKzxwPjxiPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz43LiBHRU5FUkFMPC9zcGFuPjwvYj4gPC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+SWYgYW55IHByb3Zpc2lvbiBvZiB0aGlzIEFncmVlbWVudCBpcyBpbnZhbGlkCitvciB1bmVuZm9yY2VhYmxlIHVuZGVyIGFwcGxpY2FibGUgbGF3LCBpdCBzaGFsbCBub3QgYWZmZWN0IHRoZSB2YWxpZGl0eSBvcgorZW5mb3JjZWFiaWxpdHkgb2YgdGhlIHJlbWFpbmRlciBvZiB0aGUgdGVybXMgb2YgdGhpcyBBZ3JlZW1lbnQsIGFuZCB3aXRob3V0CitmdXJ0aGVyIGFjdGlvbiBieSB0aGUgcGFydGllcyBoZXJldG8sIHN1Y2ggcHJvdmlzaW9uIHNoYWxsIGJlIHJlZm9ybWVkIHRvIHRoZQorbWluaW11bSBleHRlbnQgbmVjZXNzYXJ5IHRvIG1ha2Ugc3VjaCBwcm92aXNpb24gdmFsaWQgYW5kIGVuZm9yY2VhYmxlLjwvc3Bhbj4gPC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+SWYgUmVjaXBpZW50IGluc3RpdHV0ZXMgcGF0ZW50IGxpdGlnYXRpb24KK2FnYWluc3QgYW55IGVudGl0eSAoaW5jbHVkaW5nIGEgY3Jvc3MtY2xhaW0gb3IgY291bnRlcmNsYWltIGluIGEgbGF3c3VpdCkKK2FsbGVnaW5nIHRoYXQgdGhlIFByb2dyYW0gaXRzZWxmIChleGNsdWRpbmcgY29tYmluYXRpb25zIG9mIHRoZSBQcm9ncmFtIHdpdGgKK290aGVyIHNvZnR3YXJlIG9yIGhhcmR3YXJlKSBpbmZyaW5nZXMgc3VjaCBSZWNpcGllbnQncyBwYXRlbnQocyksIHRoZW4gc3VjaAorUmVjaXBpZW50J3MgcmlnaHRzIGdyYW50ZWQgdW5kZXIgU2VjdGlvbiAyKGIpIHNoYWxsIHRlcm1pbmF0ZSBhcyBvZiB0aGUgZGF0ZQorc3VjaCBsaXRpZ2F0aW9uIGlzIGZpbGVkLiA8L3NwYW4+PC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+QWxsIFJlY2lwaWVudCdzIHJpZ2h0cyB1bmRlciB0aGlzIEFncmVlbWVudAorc2hhbGwgdGVybWluYXRlIGlmIGl0IGZhaWxzIHRvIGNvbXBseSB3aXRoIGFueSBvZiB0aGUgbWF0ZXJpYWwgdGVybXMgb3IKK2NvbmRpdGlvbnMgb2YgdGhpcyBBZ3JlZW1lbnQgYW5kIGRvZXMgbm90IGN1cmUgc3VjaCBmYWlsdXJlIGluIGEgcmVhc29uYWJsZQorcGVyaW9kIG9mIHRpbWUgYWZ0ZXIgYmVjb21pbmcgYXdhcmUgb2Ygc3VjaCBub25jb21wbGlhbmNlLiBJZiBhbGwgUmVjaXBpZW50J3MKK3JpZ2h0cyB1bmRlciB0aGlzIEFncmVlbWVudCB0ZXJtaW5hdGUsIFJlY2lwaWVudCBhZ3JlZXMgdG8gY2Vhc2UgdXNlIGFuZAorZGlzdHJpYnV0aW9uIG9mIHRoZSBQcm9ncmFtIGFzIHNvb24gYXMgcmVhc29uYWJseSBwcmFjdGljYWJsZS4gSG93ZXZlciwKK1JlY2lwaWVudCdzIG9ibGlnYXRpb25zIHVuZGVyIHRoaXMgQWdyZWVtZW50IGFuZCBhbnkgbGljZW5zZXMgZ3JhbnRlZCBieQorUmVjaXBpZW50IHJlbGF0aW5nIHRvIHRoZSBQcm9ncmFtIHNoYWxsIGNvbnRpbnVlIGFuZCBzdXJ2aXZlLiA8L3NwYW4+PC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+RXZlcnlvbmUgaXMgcGVybWl0dGVkIHRvIGNvcHkgYW5kIGRpc3RyaWJ1dGUKK2NvcGllcyBvZiB0aGlzIEFncmVlbWVudCwgYnV0IGluIG9yZGVyIHRvIGF2b2lkIGluY29uc2lzdGVuY3kgdGhlIEFncmVlbWVudCBpcworY29weXJpZ2h0ZWQgYW5kIG1heSBvbmx5IGJlIG1vZGlmaWVkIGluIHRoZSBmb2xsb3dpbmcgbWFubmVyLiBUaGUgQWdyZWVtZW50CitTdGV3YXJkIHJlc2VydmVzIHRoZSByaWdodCB0byBwdWJsaXNoIG5ldyB2ZXJzaW9ucyAoaW5jbHVkaW5nIHJldmlzaW9ucykgb2YKK3RoaXMgQWdyZWVtZW50IGZyb20gdGltZSB0byB0aW1lLiBObyBvbmUgb3RoZXIgdGhhbiB0aGUgQWdyZWVtZW50IFN0ZXdhcmQgaGFzCit0aGUgcmlnaHQgdG8gbW9kaWZ5IHRoaXMgQWdyZWVtZW50LiBUaGUgRWNsaXBzZSBGb3VuZGF0aW9uIGlzIHRoZSBpbml0aWFsCitBZ3JlZW1lbnQgU3Rld2FyZC4gVGhlIEVjbGlwc2UgRm91bmRhdGlvbiBtYXkgYXNzaWduIHRoZSByZXNwb25zaWJpbGl0eSB0bworc2VydmUgYXMgdGhlIEFncmVlbWVudCBTdGV3YXJkIHRvIGEgc3VpdGFibGUgc2VwYXJhdGUgZW50aXR5LiBFYWNoIG5ldyB2ZXJzaW9uCitvZiB0aGUgQWdyZWVtZW50IHdpbGwgYmUgZ2l2ZW4gYSBkaXN0aW5ndWlzaGluZyB2ZXJzaW9uIG51bWJlci4gVGhlIFByb2dyYW0KKyhpbmNsdWRpbmcgQ29udHJpYnV0aW9ucykgbWF5IGFsd2F5cyBiZSBkaXN0cmlidXRlZCBzdWJqZWN0IHRvIHRoZSB2ZXJzaW9uIG9mCit0aGUgQWdyZWVtZW50IHVuZGVyIHdoaWNoIGl0IHdhcyByZWNlaXZlZC4gSW4gYWRkaXRpb24sIGFmdGVyIGEgbmV3IHZlcnNpb24gb2YKK3RoZSBBZ3JlZW1lbnQgaXMgcHVibGlzaGVkLCBDb250cmlidXRvciBtYXkgZWxlY3QgdG8gZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbQorKGluY2x1ZGluZyBpdHMgQ29udHJpYnV0aW9ucykgdW5kZXIgdGhlIG5ldyB2ZXJzaW9uLiBFeGNlcHQgYXMgZXhwcmVzc2x5IHN0YXRlZAoraW4gU2VjdGlvbnMgMihhKSBhbmQgMihiKSBhYm92ZSwgUmVjaXBpZW50IHJlY2VpdmVzIG5vIHJpZ2h0cyBvciBsaWNlbnNlcyB0bwordGhlIGludGVsbGVjdHVhbCBwcm9wZXJ0eSBvZiBhbnkgQ29udHJpYnV0b3IgdW5kZXIgdGhpcyBBZ3JlZW1lbnQsIHdoZXRoZXIKK2V4cHJlc3NseSwgYnkgaW1wbGljYXRpb24sIGVzdG9wcGVsIG9yIG90aGVyd2lzZS4gQWxsIHJpZ2h0cyBpbiB0aGUgUHJvZ3JhbSBub3QKK2V4cHJlc3NseSBncmFudGVkIHVuZGVyIHRoaXMgQWdyZWVtZW50IGFyZSByZXNlcnZlZC48L3NwYW4+IDwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPlRoaXMgQWdyZWVtZW50IGlzIGdvdmVybmVkIGJ5IHRoZSBsYXdzIG9mIHRoZQorU3RhdGUgb2YgTmV3IFlvcmsgYW5kIHRoZSBpbnRlbGxlY3R1YWwgcHJvcGVydHkgbGF3cyBvZiB0aGUgVW5pdGVkIFN0YXRlcyBvZgorQW1lcmljYS4gTm8gcGFydHkgdG8gdGhpcyBBZ3JlZW1lbnQgd2lsbCBicmluZyBhIGxlZ2FsIGFjdGlvbiB1bmRlciB0aGlzCitBZ3JlZW1lbnQgbW9yZSB0aGFuIG9uZSB5ZWFyIGFmdGVyIHRoZSBjYXVzZSBvZiBhY3Rpb24gYXJvc2UuIEVhY2ggcGFydHkgd2FpdmVzCitpdHMgcmlnaHRzIHRvIGEganVyeSB0cmlhbCBpbiBhbnkgcmVzdWx0aW5nIGxpdGlnYXRpb24uPC9zcGFuPiA8L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbD48IVtpZiAhc3VwcG9ydEVtcHR5UGFyYXNdPiZuYnNwOzwhW2VuZGlmXT48bzpwPjwvbzpwPjwvcD4KKworPC9kaXY+CisKKzwvYm9keT4KKworPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL2ljb25zL2Z1bGwvY3Rvb2wxNi9DcmVhdGVEaXNlYXNlTW9kZWxMYWJlbF9kaXNlYXNlTW9kZWxTdGF0ZV9BZ2dyZWdhdGluZ0Rpc2Vhc2VNb2RlbFN0YXRlLmdpZiBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL2ljb25zL2Z1bGwvY3Rvb2wxNi9DcmVhdGVEaXNlYXNlTW9kZWxMYWJlbF9kaXNlYXNlTW9kZWxTdGF0ZV9BZ2dyZWdhdGluZ0Rpc2Vhc2VNb2RlbFN0YXRlLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43Y2ZhZmEwCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMvaWNvbnMvZnVsbC9jdG9vbDE2L0NyZWF0ZURpc2Vhc2VNb2RlbExhYmVsX2Rpc2Vhc2VNb2RlbFN0YXRlX0FnZ3JlZ2F0aW5nRGlzZWFzZU1vZGVsU3RhdGUuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL2ljb25zL2Z1bGwvY3Rvb2wxNi9DcmVhdGVEaXNlYXNlTW9kZWxMYWJlbF9kaXNlYXNlTW9kZWxTdGF0ZV9TSURpc2Vhc2VNb2RlbFN0YXRlLmdpZiBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL2ljb25zL2Z1bGwvY3Rvb2wxNi9DcmVhdGVEaXNlYXNlTW9kZWxMYWJlbF9kaXNlYXNlTW9kZWxTdGF0ZV9TSURpc2Vhc2VNb2RlbFN0YXRlLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40OGY4MTExCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMvaWNvbnMvZnVsbC9jdG9vbDE2L0NyZWF0ZURpc2Vhc2VNb2RlbExhYmVsX2Rpc2Vhc2VNb2RlbFN0YXRlX1NJRGlzZWFzZU1vZGVsU3RhdGUuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL2ljb25zL2Z1bGwvY3Rvb2wxNi9DcmVhdGVEeW5hbWljTGFiZWxfbmV4dFZhbHVlX0FyZWFMYWJlbFZhbHVlLmdpZiBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL2ljb25zL2Z1bGwvY3Rvb2wxNi9DcmVhdGVEeW5hbWljTGFiZWxfbmV4dFZhbHVlX0FyZWFMYWJlbFZhbHVlLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZTQ3MTRmCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMvaWNvbnMvZnVsbC9jdG9vbDE2L0NyZWF0ZUR5bmFtaWNMYWJlbF9uZXh0VmFsdWVfQXJlYUxhYmVsVmFsdWUuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL2ljb25zL2Z1bGwvY3Rvb2wxNi9DcmVhdGVEeW5hbWljTGFiZWxfbmV4dFZhbHVlX0NvbW1vbkJvcmRlclJlbGF0aW9uc2hpcExhYmVsVmFsdWUuZ2lmIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMvaWNvbnMvZnVsbC9jdG9vbDE2L0NyZWF0ZUR5bmFtaWNMYWJlbF9uZXh0VmFsdWVfQ29tbW9uQm9yZGVyUmVsYXRpb25zaGlwTGFiZWxWYWx1ZS5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTExODAwYwotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL2ljb25zL2Z1bGwvY3Rvb2wxNi9DcmVhdGVEeW5hbWljTGFiZWxfbmV4dFZhbHVlX0NvbW1vbkJvcmRlclJlbGF0aW9uc2hpcExhYmVsVmFsdWUuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL2ljb25zL2Z1bGwvY3Rvb2wxNi9DcmVhdGVEeW5hbWljTGFiZWxfbmV4dFZhbHVlX1BoeXNpY2FsUmVsYXRpb25zaGlwTGFiZWxWYWx1ZS5naWYgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy9pY29ucy9mdWxsL2N0b29sMTYvQ3JlYXRlRHluYW1pY0xhYmVsX25leHRWYWx1ZV9QaHlzaWNhbFJlbGF0aW9uc2hpcExhYmVsVmFsdWUuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUzZGMzNGEKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy9pY29ucy9mdWxsL2N0b29sMTYvQ3JlYXRlRHluYW1pY0xhYmVsX25leHRWYWx1ZV9QaHlzaWNhbFJlbGF0aW9uc2hpcExhYmVsVmFsdWUuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL2ljb25zL2Z1bGwvY3Rvb2wxNi9DcmVhdGVEeW5hbWljTGFiZWxfbmV4dFZhbHVlX1BvcHVsYXRpb25MYWJlbFZhbHVlLmdpZiBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL2ljb25zL2Z1bGwvY3Rvb2wxNi9DcmVhdGVEeW5hbWljTGFiZWxfbmV4dFZhbHVlX1BvcHVsYXRpb25MYWJlbFZhbHVlLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kOWUyN2NlCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMvaWNvbnMvZnVsbC9jdG9vbDE2L0NyZWF0ZUR5bmFtaWNMYWJlbF9uZXh0VmFsdWVfUG9wdWxhdGlvbkxhYmVsVmFsdWUuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL2ljb25zL2Z1bGwvY3Rvb2wxNi9DcmVhdGVEeW5hbWljTGFiZWxfbmV4dFZhbHVlX1JlbGF0aXZlUGh5c2ljYWxSZWxhdGlvbnNoaXBMYWJlbFZhbHVlLmdpZiBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL2ljb25zL2Z1bGwvY3Rvb2wxNi9DcmVhdGVEeW5hbWljTGFiZWxfbmV4dFZhbHVlX1JlbGF0aXZlUGh5c2ljYWxSZWxhdGlvbnNoaXBMYWJlbFZhbHVlLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZmFkOGVjCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMvaWNvbnMvZnVsbC9jdG9vbDE2L0NyZWF0ZUR5bmFtaWNMYWJlbF9uZXh0VmFsdWVfUmVsYXRpdmVQaHlzaWNhbFJlbGF0aW9uc2hpcExhYmVsVmFsdWUuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL2ljb25zL2Z1bGwvY3Rvb2wxNi9DcmVhdGVEeW5hbWljTGFiZWxfbmV4dFZhbHVlX1NFSVJMYWJlbFZhbHVlLmdpZiBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL2ljb25zL2Z1bGwvY3Rvb2wxNi9DcmVhdGVEeW5hbWljTGFiZWxfbmV4dFZhbHVlX1NFSVJMYWJlbFZhbHVlLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NWE1MWQxCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMvaWNvbnMvZnVsbC9jdG9vbDE2L0NyZWF0ZUR5bmFtaWNMYWJlbF9uZXh0VmFsdWVfU0VJUkxhYmVsVmFsdWUuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL2ljb25zL2Z1bGwvY3Rvb2wxNi9DcmVhdGVEeW5hbWljTGFiZWxfbmV4dFZhbHVlX1NJTGFiZWxWYWx1ZS5naWYgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy9pY29ucy9mdWxsL2N0b29sMTYvQ3JlYXRlRHluYW1pY0xhYmVsX25leHRWYWx1ZV9TSUxhYmVsVmFsdWUuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFlNzI1OWMKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy9pY29ucy9mdWxsL2N0b29sMTYvQ3JlYXRlRHluYW1pY0xhYmVsX25leHRWYWx1ZV9TSUxhYmVsVmFsdWUuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL2ljb25zL2Z1bGwvY3Rvb2wxNi9DcmVhdGVEeW5hbWljTGFiZWxfbmV4dFZhbHVlX1NJUkxhYmVsVmFsdWUuZ2lmIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMvaWNvbnMvZnVsbC9jdG9vbDE2L0NyZWF0ZUR5bmFtaWNMYWJlbF9uZXh0VmFsdWVfU0lSTGFiZWxWYWx1ZS5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTkxYjg2YQotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL2ljb25zL2Z1bGwvY3Rvb2wxNi9DcmVhdGVEeW5hbWljTGFiZWxfbmV4dFZhbHVlX1NJUkxhYmVsVmFsdWUuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL2ljb25zL2Z1bGwvY3Rvb2wxNi9DcmVhdGVEeW5hbWljTGFiZWxfbmV4dFZhbHVlX1RyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsVmFsdWUuZ2lmIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMvaWNvbnMvZnVsbC9jdG9vbDE2L0NyZWF0ZUR5bmFtaWNMYWJlbF9uZXh0VmFsdWVfVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxWYWx1ZS5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDhmODExMQotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL2ljb25zL2Z1bGwvY3Rvb2wxNi9DcmVhdGVEeW5hbWljTGFiZWxfbmV4dFZhbHVlX1RyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsVmFsdWUuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL2ljb25zL2Z1bGwvY3Rvb2wxNi9DcmVhdGVJZGVudGlmaWFibGVfZHVibGluQ29yZV9EdWJsaW5Db3JlLmdpZiBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL2ljb25zL2Z1bGwvY3Rvb2wxNi9DcmVhdGVJZGVudGlmaWFibGVfZHVibGluQ29yZV9EdWJsaW5Db3JlLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMjRkY2YwCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMvaWNvbnMvZnVsbC9jdG9vbDE2L0NyZWF0ZUlkZW50aWZpYWJsZV9kdWJsaW5Db3JlX0R1YmxpbkNvcmUuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL2ljb25zL2Z1bGwvY3Rvb2wxNi9DcmVhdGVMYWJlbF9jdXJyZW50VmFsdWVfQXJlYUxhYmVsVmFsdWUuZ2lmIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMvaWNvbnMvZnVsbC9jdG9vbDE2L0NyZWF0ZUxhYmVsX2N1cnJlbnRWYWx1ZV9BcmVhTGFiZWxWYWx1ZS5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWU0NzE0ZgotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL2ljb25zL2Z1bGwvY3Rvb2wxNi9DcmVhdGVMYWJlbF9jdXJyZW50VmFsdWVfQXJlYUxhYmVsVmFsdWUuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL2ljb25zL2Z1bGwvY3Rvb2wxNi9DcmVhdGVMYWJlbF9jdXJyZW50VmFsdWVfQ29tbW9uQm9yZGVyUmVsYXRpb25zaGlwTGFiZWxWYWx1ZS5naWYgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy9pY29ucy9mdWxsL2N0b29sMTYvQ3JlYXRlTGFiZWxfY3VycmVudFZhbHVlX0NvbW1vbkJvcmRlclJlbGF0aW9uc2hpcExhYmVsVmFsdWUuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUxMTgwMGMKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy9pY29ucy9mdWxsL2N0b29sMTYvQ3JlYXRlTGFiZWxfY3VycmVudFZhbHVlX0NvbW1vbkJvcmRlclJlbGF0aW9uc2hpcExhYmVsVmFsdWUuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL2ljb25zL2Z1bGwvY3Rvb2wxNi9DcmVhdGVMYWJlbF9jdXJyZW50VmFsdWVfUGh5c2ljYWxSZWxhdGlvbnNoaXBMYWJlbFZhbHVlLmdpZiBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL2ljb25zL2Z1bGwvY3Rvb2wxNi9DcmVhdGVMYWJlbF9jdXJyZW50VmFsdWVfUGh5c2ljYWxSZWxhdGlvbnNoaXBMYWJlbFZhbHVlLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lM2RjMzRhCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMvaWNvbnMvZnVsbC9jdG9vbDE2L0NyZWF0ZUxhYmVsX2N1cnJlbnRWYWx1ZV9QaHlzaWNhbFJlbGF0aW9uc2hpcExhYmVsVmFsdWUuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL2ljb25zL2Z1bGwvY3Rvb2wxNi9DcmVhdGVMYWJlbF9jdXJyZW50VmFsdWVfUG9wdWxhdGlvbkxhYmVsVmFsdWUuZ2lmIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMvaWNvbnMvZnVsbC9jdG9vbDE2L0NyZWF0ZUxhYmVsX2N1cnJlbnRWYWx1ZV9Qb3B1bGF0aW9uTGFiZWxWYWx1ZS5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDllMjdjZQotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL2ljb25zL2Z1bGwvY3Rvb2wxNi9DcmVhdGVMYWJlbF9jdXJyZW50VmFsdWVfUG9wdWxhdGlvbkxhYmVsVmFsdWUuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL2ljb25zL2Z1bGwvY3Rvb2wxNi9DcmVhdGVMYWJlbF9jdXJyZW50VmFsdWVfUmVsYXRpdmVQaHlzaWNhbFJlbGF0aW9uc2hpcExhYmVsVmFsdWUuZ2lmIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMvaWNvbnMvZnVsbC9jdG9vbDE2L0NyZWF0ZUxhYmVsX2N1cnJlbnRWYWx1ZV9SZWxhdGl2ZVBoeXNpY2FsUmVsYXRpb25zaGlwTGFiZWxWYWx1ZS5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWZhZDhlYwotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL2ljb25zL2Z1bGwvY3Rvb2wxNi9DcmVhdGVMYWJlbF9jdXJyZW50VmFsdWVfUmVsYXRpdmVQaHlzaWNhbFJlbGF0aW9uc2hpcExhYmVsVmFsdWUuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL2ljb25zL2Z1bGwvY3Rvb2wxNi9DcmVhdGVMYWJlbF9jdXJyZW50VmFsdWVfU0VJUkxhYmVsVmFsdWUuZ2lmIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMvaWNvbnMvZnVsbC9jdG9vbDE2L0NyZWF0ZUxhYmVsX2N1cnJlbnRWYWx1ZV9TRUlSTGFiZWxWYWx1ZS5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODVhNTFkMQotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL2ljb25zL2Z1bGwvY3Rvb2wxNi9DcmVhdGVMYWJlbF9jdXJyZW50VmFsdWVfU0VJUkxhYmVsVmFsdWUuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL2ljb25zL2Z1bGwvY3Rvb2wxNi9DcmVhdGVMYWJlbF9jdXJyZW50VmFsdWVfU0lMYWJlbFZhbHVlLmdpZiBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL2ljb25zL2Z1bGwvY3Rvb2wxNi9DcmVhdGVMYWJlbF9jdXJyZW50VmFsdWVfU0lMYWJlbFZhbHVlLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZTcyNTljCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMvaWNvbnMvZnVsbC9jdG9vbDE2L0NyZWF0ZUxhYmVsX2N1cnJlbnRWYWx1ZV9TSUxhYmVsVmFsdWUuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL2ljb25zL2Z1bGwvY3Rvb2wxNi9DcmVhdGVMYWJlbF9jdXJyZW50VmFsdWVfU0lSTGFiZWxWYWx1ZS5naWYgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy9pY29ucy9mdWxsL2N0b29sMTYvQ3JlYXRlTGFiZWxfY3VycmVudFZhbHVlX1NJUkxhYmVsVmFsdWUuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk5MWI4NmEKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy9pY29ucy9mdWxsL2N0b29sMTYvQ3JlYXRlTGFiZWxfY3VycmVudFZhbHVlX1NJUkxhYmVsVmFsdWUuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL2ljb25zL2Z1bGwvY3Rvb2wxNi9DcmVhdGVMYWJlbF9jdXJyZW50VmFsdWVfVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxWYWx1ZS5naWYgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy9pY29ucy9mdWxsL2N0b29sMTYvQ3JlYXRlTGFiZWxfY3VycmVudFZhbHVlX1RyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsVmFsdWUuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ4ZjgxMTEKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy9pY29ucy9mdWxsL2N0b29sMTYvQ3JlYXRlTGFiZWxfY3VycmVudFZhbHVlX1RyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsVmFsdWUuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL2ljb25zL2Z1bGwvY3Rvb2wxNi9DcmVhdGVOYXJ5Qm9vbGVhbk9wZXJhdG9yX29wZXJhbmRzX0xhYmVsVmFsdWVUZXN0LmdpZiBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL2ljb25zL2Z1bGwvY3Rvb2wxNi9DcmVhdGVOYXJ5Qm9vbGVhbk9wZXJhdG9yX29wZXJhbmRzX0xhYmVsVmFsdWVUZXN0LmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNTM3NGMyCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMvaWNvbnMvZnVsbC9jdG9vbDE2L0NyZWF0ZU5hcnlCb29sZWFuT3BlcmF0b3Jfb3BlcmFuZHNfTGFiZWxWYWx1ZVRlc3QuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL2ljb25zL2Z1bGwvY3Rvb2wxNi9DcmVhdGVQcmVkaWNhdGVFeHByZXNzaW9uX3ByZWRpY2F0ZV9MYWJlbFZhbHVlVGVzdC5naWYgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy9pY29ucy9mdWxsL2N0b29sMTYvQ3JlYXRlUHJlZGljYXRlRXhwcmVzc2lvbl9wcmVkaWNhdGVfTGFiZWxWYWx1ZVRlc3QuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI5Y2Q4NzgKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy9pY29ucy9mdWxsL2N0b29sMTYvQ3JlYXRlUHJlZGljYXRlRXhwcmVzc2lvbl9wcmVkaWNhdGVfTGFiZWxWYWx1ZVRlc3QuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL2ljb25zL2Z1bGwvY3Rvb2wxNi9DcmVhdGVVbmFyeUJvb2xlYW5PcGVyYXRvcl9vcGVyYW5kX0xhYmVsVmFsdWVUZXN0LmdpZiBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL2ljb25zL2Z1bGwvY3Rvb2wxNi9DcmVhdGVVbmFyeUJvb2xlYW5PcGVyYXRvcl9vcGVyYW5kX0xhYmVsVmFsdWVUZXN0LmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZTJkODZkCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMvaWNvbnMvZnVsbC9jdG9vbDE2L0NyZWF0ZVVuYXJ5Qm9vbGVhbk9wZXJhdG9yX29wZXJhbmRfTGFiZWxWYWx1ZVRlc3QuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL2ljb25zL2Z1bGwvY3VzdG9tMTYvTGFiZWxWYWx1ZVRlc3QucG5nIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMvaWNvbnMvZnVsbC9jdXN0b20xNi9MYWJlbFZhbHVlVGVzdC5wbmcKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZTIyOTFjNgotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL2ljb25zL2Z1bGwvY3VzdG9tMTYvTGFiZWxWYWx1ZVRlc3QucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL2ljb25zL2Z1bGwvY3VzdG9tMTYvZGlzZWFzZS5naWYgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy9pY29ucy9mdWxsL2N1c3RvbTE2L2Rpc2Vhc2UuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRlNDA0ZTQKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy9pY29ucy9mdWxsL2N1c3RvbTE2L2Rpc2Vhc2UuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL2ljb25zL2Z1bGwvY3VzdG9tMTYvaW5mZWN0b3IuZ2lmIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMvaWNvbnMvZnVsbC9jdXN0b20xNi9pbmZlY3Rvci5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTFiYjY4NgotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL2ljb25zL2Z1bGwvY3VzdG9tMTYvaW5mZWN0b3IuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL2ljb25zL2Z1bGwvY3VzdG9tMTYvaW5mZWN0b3Jjb2xsZWN0aW9uLmdpZiBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL2ljb25zL2Z1bGwvY3VzdG9tMTYvaW5mZWN0b3Jjb2xsZWN0aW9uLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NzgwMWI2Ci0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMvaWNvbnMvZnVsbC9jdXN0b20xNi9pbmZlY3RvcmNvbGxlY3Rpb24uZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL2ljb25zL2Z1bGwvY3VzdG9tMTYvaW5vY3VsYXRvci5naWYgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy9pY29ucy9mdWxsL2N1c3RvbTE2L2lub2N1bGF0b3IuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYzN2EzNjIKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy9pY29ucy9mdWxsL2N1c3RvbTE2L2lub2N1bGF0b3IuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL2ljb25zL2Z1bGwvb2JqMTYvSW5mZWN0b3JJbm9jdWxhdG9yQ29sbGVjdGlvbi5naWYgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy9pY29ucy9mdWxsL29iajE2L0luZmVjdG9ySW5vY3VsYXRvckNvbGxlY3Rpb24uZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRiNzQxNGUKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy9pY29ucy9mdWxsL29iajE2L0luZmVjdG9ySW5vY3VsYXRvckNvbGxlY3Rpb24uZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL2ljb25zL2Z1bGwvb2JqMTYvSW5pdGlhbGl6ZXIuZ2lmIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMvaWNvbnMvZnVsbC9vYmoxNi9Jbml0aWFsaXplci5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDk4MzY0ZgotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL2ljb25zL2Z1bGwvb2JqMTYvSW5pdGlhbGl6ZXIuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL2ljb25zL2Z1bGwvb2JqMTYvTGFiZWxWYWx1ZVRlc3QuZ2lmIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMvaWNvbnMvZnVsbC9vYmoxNi9MYWJlbFZhbHVlVGVzdC5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzRhOGFmNAotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL2ljb25zL2Z1bGwvb2JqMTYvTGFiZWxWYWx1ZVRlc3QuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL2ljb25zL2Z1bGwvb2JqMTYvTmV3RGV0ZXJtaW5pc3RpY1NFSVJEaXNlYXNlTW9kZWwuZ2lmIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMvaWNvbnMvZnVsbC9vYmoxNi9OZXdEZXRlcm1pbmlzdGljU0VJUkRpc2Vhc2VNb2RlbC5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGI3NDE0ZQotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL2ljb25zL2Z1bGwvb2JqMTYvTmV3RGV0ZXJtaW5pc3RpY1NFSVJEaXNlYXNlTW9kZWwuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL2ljb25zL2Z1bGwvb2JqMTYvTmV3RGV0ZXJtaW5pc3RpY1NJRGlzZWFzZU1vZGVsLmdpZiBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL2ljb25zL2Z1bGwvb2JqMTYvTmV3RGV0ZXJtaW5pc3RpY1NJRGlzZWFzZU1vZGVsLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NTczMWZlCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMvaWNvbnMvZnVsbC9vYmoxNi9OZXdEZXRlcm1pbmlzdGljU0lEaXNlYXNlTW9kZWwuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL2ljb25zL2Z1bGwvb2JqMTYvTmV3RGV0ZXJtaW5pc3RpY1NJUkRpc2Vhc2VNb2RlbC5naWYgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy9pY29ucy9mdWxsL29iajE2L05ld0RldGVybWluaXN0aWNTSVJEaXNlYXNlTW9kZWwuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMwMGFlZGYKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy9pY29ucy9mdWxsL29iajE2L05ld0RldGVybWluaXN0aWNTSVJEaXNlYXNlTW9kZWwuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL2ljb25zL2Z1bGwvb2JqMTYvUG9pc3NvblNJRGlzZWFzZU1vZGVsLmdpZiBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL2ljb25zL2Z1bGwvb2JqMTYvUG9pc3NvblNJRGlzZWFzZU1vZGVsLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZTUzNDVmCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMvaWNvbnMvZnVsbC9vYmoxNi9Qb2lzc29uU0lEaXNlYXNlTW9kZWwuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL2ljb25zL2Z1bGwvb2JqMTYvU0lSSW5vY3VsYXRvci5naWYgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy9pY29ucy9mdWxsL29iajE2L1NJUklub2N1bGF0b3IuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk0Yzk1M2UKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy9pY29ucy9mdWxsL29iajE2L1NJUklub2N1bGF0b3IuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL2ljb25zL2Z1bGwvb2JqMTYvU3RvY2hhc3RpY1BvaXNzb25EaXNlYXNlTW9kZWwuZ2lmIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMvaWNvbnMvZnVsbC9vYmoxNi9TdG9jaGFzdGljUG9pc3NvbkRpc2Vhc2VNb2RlbC5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2I3YzQyOAotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL2ljb25zL2Z1bGwvb2JqMTYvU3RvY2hhc3RpY1BvaXNzb25EaXNlYXNlTW9kZWwuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL2ljb25zL2Z1bGwvb2JqMTYvU3RvY2hhc3RpY1BvaXNzb25TRUlSRGlzZWFzZU1vZGVsLmdpZiBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL2ljb25zL2Z1bGwvb2JqMTYvU3RvY2hhc3RpY1BvaXNzb25TRUlSRGlzZWFzZU1vZGVsLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMWY4YWZhCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMvaWNvbnMvZnVsbC9vYmoxNi9TdG9jaGFzdGljUG9pc3NvblNFSVJEaXNlYXNlTW9kZWwuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL2ljb25zL2Z1bGwvb2JqMTYvU3RvY2hhc3RpY1BvaXNzb25TSURpc2Vhc2VNb2RlbC5naWYgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy9pY29ucy9mdWxsL29iajE2L1N0b2NoYXN0aWNQb2lzc29uU0lEaXNlYXNlTW9kZWwuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU0YmMyMmQKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy9pY29ucy9mdWxsL29iajE2L1N0b2NoYXN0aWNQb2lzc29uU0lEaXNlYXNlTW9kZWwuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL2ljb25zL2Z1bGwvb2JqMTYvU3RvY2hhc3RpY1BvaXNzb25TSVJEaXNlYXNlTW9kZWwuZ2lmIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMvaWNvbnMvZnVsbC9vYmoxNi9TdG9jaGFzdGljUG9pc3NvblNJUkRpc2Vhc2VNb2RlbC5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGI3NDE0ZQotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL2ljb25zL2Z1bGwvb2JqMTYvU3RvY2hhc3RpY1BvaXNzb25TSVJEaXNlYXNlTW9kZWwuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL21vZGVsL2Rpc2Vhc2Vtb2RlbHMuZ2VubW9kZWwgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy9tb2RlbC9kaXNlYXNlbW9kZWxzLmdlbm1vZGVsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNmY2Y5OTIKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy9tb2RlbC9kaXNlYXNlbW9kZWxzLmdlbm1vZGVsCkBAIC0wLDAgKzEsMTYzIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/Pg0KKzxnZW5tb2RlbDpHZW5Nb2RlbCB4bWk6dmVyc2lvbj0iMi4wIg0KKyAgICB4bWxuczp4bWk9Imh0dHA6Ly93d3cub21nLm9yZy9YTUkiIHhtbG5zOmVjb3JlPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2VtZi8yMDAyL0Vjb3JlIg0KKyAgICB4bWxuczpnZW5tb2RlbD0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9lbWYvMjAwMi9HZW5Nb2RlbCIgbW9kZWxEaXJlY3Rvcnk9Ii9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMvc3JjIg0KKyAgICBlZGl0RGlyZWN0b3J5PSIvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL3NyYyIgZWRpdG9yRGlyZWN0b3J5PSIvb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzL3NyYyINCisgICAgbW9kZWxQbHVnaW5JRD0ib3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzIiBtb2RlbE5hbWU9IkRpc2Vhc2Vtb2RlbHMiIG5vbk5MU01hcmtlcnM9InRydWUiDQorICAgIHRlc3RzRGlyZWN0b3J5PSIvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kaXNlYXNlbW9kZWxzL3NyYyIgaW1wb3J0ZXJJRD0ib3JnLmVjbGlwc2UuZW1mLmltcG9ydGVyLmVjb3JlIg0KKyAgICBjb21wbGlhbmNlTGV2ZWw9IjUuMCIgY29weXJpZ2h0RmllbGRzPSJmYWxzZSIgcnVudGltZVZlcnNpb249IjIuNiIgdXNlZEdlblBhY2thZ2VzPSIuLi8uLi9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvbW9kZWwvY29yZS5nZW5tb2RlbCMvL2NvbW1vbiAuLi8uLi9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvbW9kZWwvY29yZS5nZW5tb2RlbCMvL2dyYXBoIC4uLy4uL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9tb2RlbC9jb3JlLmdlbm1vZGVsIy8vbW9kZWwgLi4vLi4vb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL21vZGVsL2NvcmUuZ2VubW9kZWwjLy9tb2RpZmllciAuLi8uLi9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvbW9kZWwvY29yZS5nZW5tb2RlbCMvL3ByZWRpY2F0ZSAuLi8uLi9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvbW9kZWwvY29yZS5nZW5tb2RlbCMvL3NjZW5hcmlvIC4uLy4uL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9tb2RlbC9jb3JlLmdlbm1vZGVsIy8vc2VxdWVuY2VyIC4uLy4uL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9tb2RlbC9jb3JlLmdlbm1vZGVsIy8vc29sdmVyIC4uLy4uL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvbW9kZWwvZGVmaW5pdGlvbnMuZ2VubW9kZWwjLy9sYWJlbHMgcGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5lbWYuZWNvcmUvbW9kZWwvRWNvcmUuZ2VubW9kZWwjLy9lY29yZSAuLi8uLi9vcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMvbW9kZWwvc3RhbmRhcmQuZ2VubW9kZWwjLy9zdGFuZGFyZCAuLi8uLi9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvbW9kZWwvY29yZS5nZW5tb2RlbCMvL2xvZ2dlciINCisgICAgcnVudGltZVBsYXRmb3JtPSJSQ1AiPg0KKyAgPGZvcmVpZ25Nb2RlbD5zdGFuZGFyZC5lY29yZTwvZm9yZWlnbk1vZGVsPg0KKyAgPGZvcmVpZ25Nb2RlbD5kaXNlYXNlcHJlZGljYXRlcy5lY29yZTwvZm9yZWlnbk1vZGVsPg0KKyAgPGdlblBhY2thZ2VzIHByZWZpeD0iU3RhbmRhcmQiIGJhc2VQYWNrYWdlPSJvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMiIGRpc3Bvc2FibGVQcm92aWRlckZhY3Rvcnk9InRydWUiDQorICAgICAgZ2VuZXJhdGVFeGFtcGxlQ2xhc3M9ImZhbHNlIiBlY29yZVBhY2thZ2U9InN0YW5kYXJkLmVjb3JlIy8iPg0KKyAgICA8Z2VuRGF0YVR5cGVzIGVjb3JlRGF0YVR5cGU9InN0YW5kYXJkLmVjb3JlIy8vUmFuZG9tIi8+DQorICAgIDxnZW5DbGFzc2VzIGltYWdlPSJmYWxzZSIgZWNvcmVDbGFzcz0ic3RhbmRhcmQuZWNvcmUjLy9EZXRlcm1pbmlzdGljU0VJUkRpc2Vhc2VNb2RlbCIvPg0KKyAgICA8Z2VuQ2xhc3NlcyBpbWFnZT0iZmFsc2UiIGVjb3JlQ2xhc3M9InN0YW5kYXJkLmVjb3JlIy8vRGV0ZXJtaW5pc3RpY1NJRGlzZWFzZU1vZGVsIi8+DQorICAgIDxnZW5DbGFzc2VzIGltYWdlPSJmYWxzZSIgZWNvcmVDbGFzcz0ic3RhbmRhcmQuZWNvcmUjLy9EZXRlcm1pbmlzdGljU0lSRGlzZWFzZU1vZGVsIi8+DQorICAgIDxnZW5DbGFzc2VzIGltYWdlPSJmYWxzZSIgZWNvcmVDbGFzcz0ic3RhbmRhcmQuZWNvcmUjLy9EaXNlYXNlTW9kZWwiPg0KKyAgICAgIDxnZW5GZWF0dXJlcyBjcmVhdGVDaGlsZD0iZmFsc2UiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RUF0dHJpYnV0ZSBzdGFuZGFyZC5lY29yZSMvL0Rpc2Vhc2VNb2RlbC9wb3B1bGF0aW9uSWRlbnRpZmllciIvPg0KKyAgICAgIDxnZW5GZWF0dXJlcyBjcmVhdGVDaGlsZD0iZmFsc2UiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RUF0dHJpYnV0ZSBzdGFuZGFyZC5lY29yZSMvL0Rpc2Vhc2VNb2RlbC90aW1lUGVyaW9kIi8+DQorICAgICAgPGdlbkZlYXR1cmVzIGNyZWF0ZUNoaWxkPSJmYWxzZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFQXR0cmlidXRlIHN0YW5kYXJkLmVjb3JlIy8vRGlzZWFzZU1vZGVsL2Rpc2Vhc2VOYW1lIi8+DQorICAgICAgPGdlbkZlYXR1cmVzIHByb3BlcnR5PSJOb25lIiBjcmVhdGVDaGlsZD0iZmFsc2UiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RUF0dHJpYnV0ZSBzdGFuZGFyZC5lY29yZSMvL0Rpc2Vhc2VNb2RlbC9maW5pdGVEaWZmZXJlbmNlIi8+DQorICAgICAgPGdlbkZlYXR1cmVzIGNyZWF0ZUNoaWxkPSJmYWxzZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFQXR0cmlidXRlIHN0YW5kYXJkLmVjb3JlIy8vRGlzZWFzZU1vZGVsL2ZyZXF1ZW5jeURlcGVuZGVudCIvPg0KKyAgICAgIDxnZW5PcGVyYXRpb25zIGVjb3JlT3BlcmF0aW9uPSJzdGFuZGFyZC5lY29yZSMvL0Rpc2Vhc2VNb2RlbC9jcmVhdGVEaXNlYXNlTW9kZWxMYWJlbCI+DQorICAgICAgICA8Z2VuUGFyYW1ldGVycyBlY29yZVBhcmFtZXRlcj0ic3RhbmRhcmQuZWNvcmUjLy9EaXNlYXNlTW9kZWwvY3JlYXRlRGlzZWFzZU1vZGVsTGFiZWwvcG9wdWxhdGlvbklkZW50aWZpZXIiLz4NCisgICAgICA8L2dlbk9wZXJhdGlvbnM+DQorICAgICAgPGdlbk9wZXJhdGlvbnMgZWNvcmVPcGVyYXRpb249InN0YW5kYXJkLmVjb3JlIy8vRGlzZWFzZU1vZGVsL2NyZWF0ZURpc2Vhc2VNb2RlbExhYmVsVmFsdWUiPg0KKyAgICAgICAgPGdlblBhcmFtZXRlcnMgZWNvcmVQYXJhbWV0ZXI9InN0YW5kYXJkLmVjb3JlIy8vRGlzZWFzZU1vZGVsL2NyZWF0ZURpc2Vhc2VNb2RlbExhYmVsVmFsdWUvcG9wdWxhdGlvbklkZW50aWZpZXIiLz4NCisgICAgICA8L2dlbk9wZXJhdGlvbnM+DQorICAgICAgPGdlbk9wZXJhdGlvbnMgZWNvcmVPcGVyYXRpb249InN0YW5kYXJkLmVjb3JlIy8vRGlzZWFzZU1vZGVsL2NyZWF0ZUluZmVjdG9yIi8+DQorICAgICAgPGdlbk9wZXJhdGlvbnMgZWNvcmVPcGVyYXRpb249InN0YW5kYXJkLmVjb3JlIy8vRGlzZWFzZU1vZGVsL2dldEFsbExhYmVsSWRlbnRpZmllcnMiLz4NCisgICAgICA8Z2VuT3BlcmF0aW9ucyBlY29yZU9wZXJhdGlvbj0ic3RhbmRhcmQuZWNvcmUjLy9EaXNlYXNlTW9kZWwvZ2V0UG9wdWxhdGlvbk1vZGVsTGFiZWxzIj4NCisgICAgICAgIDxnZW5QYXJhbWV0ZXJzIGVjb3JlUGFyYW1ldGVyPSJzdGFuZGFyZC5lY29yZSMvL0Rpc2Vhc2VNb2RlbC9nZXRQb3B1bGF0aW9uTW9kZWxMYWJlbHMvcG9wdWxhdGlvbklkZW50aWZpZXIiLz4NCisgICAgICAgIDxnZW5QYXJhbWV0ZXJzIGVjb3JlUGFyYW1ldGVyPSJzdGFuZGFyZC5lY29yZSMvL0Rpc2Vhc2VNb2RlbC9nZXRQb3B1bGF0aW9uTW9kZWxMYWJlbHMvZ3JhcGgiLz4NCisgICAgICA8L2dlbk9wZXJhdGlvbnM+DQorICAgIDwvZ2VuQ2xhc3Nlcz4NCisgICAgPGdlbkNsYXNzZXMgaW1hZ2U9ImZhbHNlIiBlY29yZUNsYXNzPSJzdGFuZGFyZC5lY29yZSMvL0Rpc2Vhc2VNb2RlbExhYmVsIj4NCisgICAgICA8Z2VuRmVhdHVyZXMgbm90aWZ5PSJmYWxzZSIgY3JlYXRlQ2hpbGQ9ImZhbHNlIiBwcm9wZXJ0eVNvcnRDaG9pY2VzPSJ0cnVlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVSZWZlcmVuY2Ugc3RhbmRhcmQuZWNvcmUjLy9EaXNlYXNlTW9kZWxMYWJlbC9wb3B1bGF0aW9uTGFiZWwiLz4NCisgICAgICA8Z2VuRmVhdHVyZXMgbm90aWZ5PSJmYWxzZSIgY3JlYXRlQ2hpbGQ9ImZhbHNlIiBwcm9wZXJ0eVNvcnRDaG9pY2VzPSJ0cnVlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVSZWZlcmVuY2Ugc3RhbmRhcmQuZWNvcmUjLy9EaXNlYXNlTW9kZWxMYWJlbC9wb3B1bGF0aW9uTW9kZWxMYWJlbCIvPg0KKyAgICAgIDxnZW5PcGVyYXRpb25zIGVjb3JlT3BlcmF0aW9uPSJzdGFuZGFyZC5lY29yZSMvL0Rpc2Vhc2VNb2RlbExhYmVsL3RvVG9vbHRpcFN0cmluZyIvPg0KKyAgICA8L2dlbkNsYXNzZXM+DQorICAgIDxnZW5DbGFzc2VzIGltYWdlPSJmYWxzZSIgZWNvcmVDbGFzcz0ic3RhbmRhcmQuZWNvcmUjLy9EaXNlYXNlTW9kZWxMYWJlbFZhbHVlIj4NCisgICAgICA8Z2VuRmVhdHVyZXMgcHJvcGVydHk9IlJlYWRvbmx5IiBjcmVhdGVDaGlsZD0iZmFsc2UiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RUF0dHJpYnV0ZSBzdGFuZGFyZC5lY29yZSMvL0Rpc2Vhc2VNb2RlbExhYmVsVmFsdWUvcG9wdWxhdGlvbkNvdW50Ii8+DQorICAgIDwvZ2VuQ2xhc3Nlcz4NCisgICAgPGdlbkNsYXNzZXMgaW1hZ2U9ImZhbHNlIiBlY29yZUNsYXNzPSJzdGFuZGFyZC5lY29yZSMvL0luZmVjdG9yIj4NCisgICAgICA8Z2VuRmVhdHVyZXMgbm90aWZ5PSJmYWxzZSIgY3JlYXRlQ2hpbGQ9ImZhbHNlIiBwcm9wZXJ0eVNvcnRDaG9pY2VzPSJ0cnVlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVSZWZlcmVuY2Ugc3RhbmRhcmQuZWNvcmUjLy9JbmZlY3Rvci9kaXNlYXNlTW9kZWwiLz4NCisgICAgICA8Z2VuRmVhdHVyZXMgY3JlYXRlQ2hpbGQ9ImZhbHNlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVBdHRyaWJ1dGUgc3RhbmRhcmQuZWNvcmUjLy9JbmZlY3Rvci90YXJnZXRVUkkiLz4NCisgICAgICA8Z2VuRmVhdHVyZXMgY3JlYXRlQ2hpbGQ9ImZhbHNlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVBdHRyaWJ1dGUgc3RhbmRhcmQuZWNvcmUjLy9JbmZlY3Rvci9kaXNlYXNlTmFtZSIvPg0KKyAgICAgIDxnZW5GZWF0dXJlcyBjcmVhdGVDaGlsZD0iZmFsc2UiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RUF0dHJpYnV0ZSBzdGFuZGFyZC5lY29yZSMvL0luZmVjdG9yL3RhcmdldElTT0tleSIvPg0KKyAgICAgIDxnZW5GZWF0dXJlcyBub3RpZnk9ImZhbHNlIiBjcmVhdGVDaGlsZD0iZmFsc2UiIHByb3BlcnR5U29ydENob2ljZXM9InRydWUiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RVJlZmVyZW5jZSBzdGFuZGFyZC5lY29yZSMvL0luZmVjdG9yL2xhYmVsc1RvSW5mZWN0Ii8+DQorICAgICAgPGdlbkZlYXR1cmVzIGNyZWF0ZUNoaWxkPSJmYWxzZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFQXR0cmlidXRlIHN0YW5kYXJkLmVjb3JlIy8vSW5mZWN0b3IvcG9wdWxhdGlvbklkZW50aWZpZXIiLz4NCisgICAgICA8Z2VuRmVhdHVyZXMgY3JlYXRlQ2hpbGQ9ImZhbHNlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVBdHRyaWJ1dGUgc3RhbmRhcmQuZWNvcmUjLy9JbmZlY3Rvci9pbmZlY3RQZXJjZW50YWdlIi8+DQorICAgICAgPGdlbkZlYXR1cmVzIGNyZWF0ZUNoaWxkPSJmYWxzZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFQXR0cmlidXRlIHN0YW5kYXJkLmVjb3JlIy8vSW5mZWN0b3IvdGFyZ2V0RmVhdHVyZSIvPg0KKyAgICA8L2dlbkNsYXNzZXM+DQorICAgIDxnZW5DbGFzc2VzIGltYWdlPSJmYWxzZSIgZWNvcmVDbGFzcz0ic3RhbmRhcmQuZWNvcmUjLy9TRUlSIj4NCisgICAgICA8Z2VuRmVhdHVyZXMgY3JlYXRlQ2hpbGQ9ImZhbHNlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVBdHRyaWJ1dGUgc3RhbmRhcmQuZWNvcmUjLy9TRUlSL2luY3ViYXRpb25SYXRlIi8+DQorICAgICAgPGdlbk9wZXJhdGlvbnMgZWNvcmVPcGVyYXRpb249InN0YW5kYXJkLmVjb3JlIy8vU0VJUi9nZXRBZGp1c3RlZEluY3ViYXRpb25SYXRlIj4NCisgICAgICAgIDxnZW5QYXJhbWV0ZXJzIGVjb3JlUGFyYW1ldGVyPSJzdGFuZGFyZC5lY29yZSMvL1NFSVIvZ2V0QWRqdXN0ZWRJbmN1YmF0aW9uUmF0ZS90aW1lRGVsdGEiLz4NCisgICAgICA8L2dlbk9wZXJhdGlvbnM+DQorICAgIDwvZ2VuQ2xhc3Nlcz4NCisgICAgPGdlbkNsYXNzZXMgaW1hZ2U9ImZhbHNlIiBlY29yZUNsYXNzPSJzdGFuZGFyZC5lY29yZSMvL1NFSVJMYWJlbCIvPg0KKyAgICA8Z2VuQ2xhc3NlcyBpbWFnZT0iZmFsc2UiIGVjb3JlQ2xhc3M9InN0YW5kYXJkLmVjb3JlIy8vU0VJUkxhYmVsVmFsdWUiPg0KKyAgICAgIDxnZW5GZWF0dXJlcyBjcmVhdGVDaGlsZD0iZmFsc2UiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RUF0dHJpYnV0ZSBzdGFuZGFyZC5lY29yZSMvL1NFSVJMYWJlbFZhbHVlL2UiLz4NCisgICAgPC9nZW5DbGFzc2VzPg0KKyAgICA8Z2VuQ2xhc3NlcyBpbWFnZT0iZmFsc2UiIGVjb3JlQ2xhc3M9InN0YW5kYXJkLmVjb3JlIy8vU0kiPg0KKyAgICAgIDxnZW5GZWF0dXJlcyBjcmVhdGVDaGlsZD0iZmFsc2UiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RUF0dHJpYnV0ZSBzdGFuZGFyZC5lY29yZSMvL1NJL3RyYW5zbWlzc2lvblJhdGUiLz4NCisgICAgICA8Z2VuRmVhdHVyZXMgY3JlYXRlQ2hpbGQ9ImZhbHNlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVBdHRyaWJ1dGUgc3RhbmRhcmQuZWNvcmUjLy9TSS9ub25MaW5lYXJpdHlDb2VmZmljaWVudCIvPg0KKyAgICAgIDxnZW5GZWF0dXJlcyBjcmVhdGVDaGlsZD0iZmFsc2UiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RUF0dHJpYnV0ZSBzdGFuZGFyZC5lY29yZSMvL1NJL3JlY292ZXJ5UmF0ZSIvPg0KKyAgICAgIDxnZW5GZWF0dXJlcyBjcmVhdGVDaGlsZD0iZmFsc2UiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RUF0dHJpYnV0ZSBzdGFuZGFyZC5lY29yZSMvL1NJL2luZmVjdGlvdXNNb3J0YWxpdHlSYXRlIi8+DQorICAgICAgPGdlbk9wZXJhdGlvbnMgZWNvcmVPcGVyYXRpb249InN0YW5kYXJkLmVjb3JlIy8vU0kvZ2V0QWRqdXN0ZWRJbmZlY3Rpb3VzTW9ydGFsaXR5UmF0ZSI+DQorICAgICAgICA8Z2VuUGFyYW1ldGVycyBlY29yZVBhcmFtZXRlcj0ic3RhbmRhcmQuZWNvcmUjLy9TSS9nZXRBZGp1c3RlZEluZmVjdGlvdXNNb3J0YWxpdHlSYXRlL3RpbWVEZWx0YSIvPg0KKyAgICAgIDwvZ2VuT3BlcmF0aW9ucz4NCisgICAgICA8Z2VuT3BlcmF0aW9ucyBlY29yZU9wZXJhdGlvbj0ic3RhbmRhcmQuZWNvcmUjLy9TSS9nZXRBZGp1c3RlZFRyYW5zbWlzc2lvblJhdGUiPg0KKyAgICAgICAgPGdlblBhcmFtZXRlcnMgZWNvcmVQYXJhbWV0ZXI9InN0YW5kYXJkLmVjb3JlIy8vU0kvZ2V0QWRqdXN0ZWRUcmFuc21pc3Npb25SYXRlL3RpbWVEZWx0YSIvPg0KKyAgICAgIDwvZ2VuT3BlcmF0aW9ucz4NCisgICAgICA8Z2VuT3BlcmF0aW9ucyBlY29yZU9wZXJhdGlvbj0ic3RhbmRhcmQuZWNvcmUjLy9TSS9nZXRBZGp1c3RlZFJlY292ZXJ5UmF0ZSI+DQorICAgICAgICA8Z2VuUGFyYW1ldGVycyBlY29yZVBhcmFtZXRlcj0ic3RhbmRhcmQuZWNvcmUjLy9TSS9nZXRBZGp1c3RlZFJlY292ZXJ5UmF0ZS90aW1lRGVsdGEiLz4NCisgICAgICA8L2dlbk9wZXJhdGlvbnM+DQorICAgIDwvZ2VuQ2xhc3Nlcz4NCisgICAgPGdlbkNsYXNzZXMgaW1hZ2U9ImZhbHNlIiBlY29yZUNsYXNzPSJzdGFuZGFyZC5lY29yZSMvL1NJSW5mZWN0b3IiPg0KKyAgICAgIDxnZW5GZWF0dXJlcyBjcmVhdGVDaGlsZD0iZmFsc2UiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RUF0dHJpYnV0ZSBzdGFuZGFyZC5lY29yZSMvL1NJSW5mZWN0b3IvaW5mZWN0aW91c0NvdW50Ii8+DQorICAgIDwvZ2VuQ2xhc3Nlcz4NCisgICAgPGdlbkNsYXNzZXMgaW1hZ2U9ImZhbHNlIiBlY29yZUNsYXNzPSJzdGFuZGFyZC5lY29yZSMvL1NJTGFiZWwiLz4NCisgICAgPGdlbkNsYXNzZXMgaW1hZ2U9ImZhbHNlIiBlY29yZUNsYXNzPSJzdGFuZGFyZC5lY29yZSMvL1NJTGFiZWxWYWx1ZSI+DQorICAgICAgPGdlbkZlYXR1cmVzIGNyZWF0ZUNoaWxkPSJmYWxzZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFQXR0cmlidXRlIHN0YW5kYXJkLmVjb3JlIy8vU0lMYWJlbFZhbHVlL2kiLz4NCisgICAgPC9nZW5DbGFzc2VzPg0KKyAgICA8Z2VuQ2xhc3NlcyBpbWFnZT0iZmFsc2UiIGVjb3JlQ2xhc3M9InN0YW5kYXJkLmVjb3JlIy8vU0lSIj4NCisgICAgICA8Z2VuRmVhdHVyZXMgY3JlYXRlQ2hpbGQ9ImZhbHNlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVBdHRyaWJ1dGUgc3RhbmRhcmQuZWNvcmUjLy9TSVIvaW1tdW5pdHlMb3NzUmF0ZSIvPg0KKyAgICAgIDxnZW5PcGVyYXRpb25zIGVjb3JlT3BlcmF0aW9uPSJzdGFuZGFyZC5lY29yZSMvL1NJUi9nZXRBZGp1c3RlZEltbXVuaXR5TG9zc1JhdGUiPg0KKyAgICAgICAgPGdlblBhcmFtZXRlcnMgZWNvcmVQYXJhbWV0ZXI9InN0YW5kYXJkLmVjb3JlIy8vU0lSL2dldEFkanVzdGVkSW1tdW5pdHlMb3NzUmF0ZS90aW1lRGVsdGEiLz4NCisgICAgICA8L2dlbk9wZXJhdGlvbnM+DQorICAgIDwvZ2VuQ2xhc3Nlcz4NCisgICAgPGdlbkNsYXNzZXMgaW1hZ2U9ImZhbHNlIiBlY29yZUNsYXNzPSJzdGFuZGFyZC5lY29yZSMvL1NJUkxhYmVsIi8+DQorICAgIDxnZW5DbGFzc2VzIGltYWdlPSJmYWxzZSIgZWNvcmVDbGFzcz0ic3RhbmRhcmQuZWNvcmUjLy9TSVJMYWJlbFZhbHVlIj4NCisgICAgICA8Z2VuRmVhdHVyZXMgY3JlYXRlQ2hpbGQ9ImZhbHNlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVBdHRyaWJ1dGUgc3RhbmRhcmQuZWNvcmUjLy9TSVJMYWJlbFZhbHVlL3IiLz4NCisgICAgPC9nZW5DbGFzc2VzPg0KKyAgICA8Z2VuQ2xhc3NlcyBpbWFnZT0iZmFsc2UiIGVjb3JlQ2xhc3M9InN0YW5kYXJkLmVjb3JlIy8vU3RhbmRhcmREaXNlYXNlTW9kZWwiPg0KKyAgICAgIDxnZW5GZWF0dXJlcyBjcmVhdGVDaGlsZD0iZmFsc2UiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RUF0dHJpYnV0ZSBzdGFuZGFyZC5lY29yZSMvL1N0YW5kYXJkRGlzZWFzZU1vZGVsL3JlZmVyZW5jZVBvcHVsYXRpb25EZW5zaXR5Ii8+DQorICAgICAgPGdlbkZlYXR1cmVzIGNyZWF0ZUNoaWxkPSJmYWxzZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFQXR0cmlidXRlIHN0YW5kYXJkLmVjb3JlIy8vU3RhbmRhcmREaXNlYXNlTW9kZWwvcm9hZE5ldHdvcmtJbmZlY3Rpb3VzUHJvcG9ydGlvbiIvPg0KKyAgICAgIDxnZW5GZWF0dXJlcyBjcmVhdGVDaGlsZD0iZmFsc2UiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RUF0dHJpYnV0ZSBzdGFuZGFyZC5lY29yZSMvL1N0YW5kYXJkRGlzZWFzZU1vZGVsL2NoYXJhY3RlcmlzdGljTWl4aW5nRGlzdGFuY2UiLz4NCisgICAgICA8Z2VuT3BlcmF0aW9ucyBlY29yZU9wZXJhdGlvbj0ic3RhbmRhcmQuZWNvcmUjLy9TdGFuZGFyZERpc2Vhc2VNb2RlbC9nZXRFZmZlY3RpdmVJbmZlY3Rpb3VzIj4NCisgICAgICAgIDxnZW5QYXJhbWV0ZXJzIGVjb3JlUGFyYW1ldGVyPSJzdGFuZGFyZC5lY29yZSMvL1N0YW5kYXJkRGlzZWFzZU1vZGVsL2dldEVmZmVjdGl2ZUluZmVjdGlvdXMvbm9kZSIvPg0KKyAgICAgICAgPGdlblBhcmFtZXRlcnMgZWNvcmVQYXJhbWV0ZXI9InN0YW5kYXJkLmVjb3JlIy8vU3RhbmRhcmREaXNlYXNlTW9kZWwvZ2V0RWZmZWN0aXZlSW5mZWN0aW91cy9kaXNlYXNlTGFiZWwiLz4NCisgICAgICAgIDxnZW5QYXJhbWV0ZXJzIGVjb3JlUGFyYW1ldGVyPSJzdGFuZGFyZC5lY29yZSMvL1N0YW5kYXJkRGlzZWFzZU1vZGVsL2dldEVmZmVjdGl2ZUluZmVjdGlvdXMvb25zaXRlSW5mZWN0aW91cyIvPg0KKyAgICAgIDwvZ2VuT3BlcmF0aW9ucz4NCisgICAgICA8Z2VuT3BlcmF0aW9ucyBlY29yZU9wZXJhdGlvbj0ic3RhbmRhcmQuZWNvcmUjLy9TdGFuZGFyZERpc2Vhc2VNb2RlbC9nZXROb3JtYWxpemVkRWZmZWN0aXZlSW5mZWN0aW91cyI+DQorICAgICAgICA8Z2VuUGFyYW1ldGVycyBlY29yZVBhcmFtZXRlcj0ic3RhbmRhcmQuZWNvcmUjLy9TdGFuZGFyZERpc2Vhc2VNb2RlbC9nZXROb3JtYWxpemVkRWZmZWN0aXZlSW5mZWN0aW91cy9ub2RlIi8+DQorICAgICAgICA8Z2VuUGFyYW1ldGVycyBlY29yZVBhcmFtZXRlcj0ic3RhbmRhcmQuZWNvcmUjLy9TdGFuZGFyZERpc2Vhc2VNb2RlbC9nZXROb3JtYWxpemVkRWZmZWN0aXZlSW5mZWN0aW91cy9kaXNlYXNlTGFiZWwiLz4NCisgICAgICAgIDxnZW5QYXJhbWV0ZXJzIGVjb3JlUGFyYW1ldGVyPSJzdGFuZGFyZC5lY29yZSMvL1N0YW5kYXJkRGlzZWFzZU1vZGVsL2dldE5vcm1hbGl6ZWRFZmZlY3RpdmVJbmZlY3Rpb3VzL29uc2l0ZUluZmVjdGlvdXMiLz4NCisgICAgICA8L2dlbk9wZXJhdGlvbnM+DQorICAgIDwvZ2VuQ2xhc3Nlcz4NCisgICAgPGdlbkNsYXNzZXMgaW1hZ2U9ImZhbHNlIiBlY29yZUNsYXNzPSJzdGFuZGFyZC5lY29yZSMvL1N0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWwiLz4NCisgICAgPGdlbkNsYXNzZXMgaW1hZ2U9ImZhbHNlIiBlY29yZUNsYXNzPSJzdGFuZGFyZC5lY29yZSMvL1N0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZSI+DQorICAgICAgPGdlbkZlYXR1cmVzIGNyZWF0ZUNoaWxkPSJmYWxzZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFQXR0cmlidXRlIHN0YW5kYXJkLmVjb3JlIy8vU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbFZhbHVlL3MiLz4NCisgICAgICA8Z2VuRmVhdHVyZXMgY3JlYXRlQ2hpbGQ9ImZhbHNlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVBdHRyaWJ1dGUgc3RhbmRhcmQuZWNvcmUjLy9TdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsVmFsdWUvaW5jaWRlbmNlIi8+DQorICAgICAgPGdlbkZlYXR1cmVzIGNyZWF0ZUNoaWxkPSJmYWxzZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFQXR0cmlidXRlIHN0YW5kYXJkLmVjb3JlIy8vU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbFZhbHVlL2Rpc2Vhc2VEZWF0aHMiLz4NCisgICAgPC9nZW5DbGFzc2VzPg0KKyAgICA8Z2VuQ2xhc3NlcyBpbWFnZT0iZmFsc2UiIGVjb3JlQ2xhc3M9InN0YW5kYXJkLmVjb3JlIy8vU3RhbmRhcmRJbmZlY3RvciIvPg0KKyAgICA8Z2VuQ2xhc3NlcyBpbWFnZT0iZmFsc2UiIGVjb3JlQ2xhc3M9InN0YW5kYXJkLmVjb3JlIy8vU3RvY2hhc3RpY1NFSVJEaXNlYXNlTW9kZWwiLz4NCisgICAgPGdlbkNsYXNzZXMgaW1hZ2U9ImZhbHNlIiBlY29yZUNsYXNzPSJzdGFuZGFyZC5lY29yZSMvL1N0b2NoYXN0aWNTSURpc2Vhc2VNb2RlbCIvPg0KKyAgICA8Z2VuQ2xhc3NlcyBpbWFnZT0iZmFsc2UiIGVjb3JlQ2xhc3M9InN0YW5kYXJkLmVjb3JlIy8vU3RvY2hhc3RpY1NJUkRpc2Vhc2VNb2RlbCIvPg0KKyAgICA8Z2VuQ2xhc3NlcyBpbWFnZT0iZmFsc2UiIGVjb3JlQ2xhc3M9InN0YW5kYXJkLmVjb3JlIy8vU3RvY2hhc3RpY0Rpc2Vhc2VNb2RlbCI+DQorICAgICAgPGdlbkZlYXR1cmVzIGNyZWF0ZUNoaWxkPSJmYWxzZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFQXR0cmlidXRlIHN0YW5kYXJkLmVjb3JlIy8vU3RvY2hhc3RpY0Rpc2Vhc2VNb2RlbC9zZWVkIi8+DQorICAgICAgPGdlbkZlYXR1cmVzIHByb3BlcnR5PSJSZWFkb25seSIgY3JlYXRlQ2hpbGQ9ImZhbHNlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVBdHRyaWJ1dGUgc3RhbmRhcmQuZWNvcmUjLy9TdG9jaGFzdGljRGlzZWFzZU1vZGVsL3JhbmRvbUdlbmVyYXRvciIvPg0KKyAgICA8L2dlbkNsYXNzZXM+DQorICAgIDxnZW5DbGFzc2VzIGltYWdlPSJmYWxzZSIgZWNvcmVDbGFzcz0ic3RhbmRhcmQuZWNvcmUjLy9TdGFuZGFyZFN0b2NoYXN0aWNEaXNlYXNlTW9kZWwiPg0KKyAgICAgIDxnZW5GZWF0dXJlcyBjcmVhdGVDaGlsZD0iZmFsc2UiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RUF0dHJpYnV0ZSBzdGFuZGFyZC5lY29yZSMvL1N0YW5kYXJkU3RvY2hhc3RpY0Rpc2Vhc2VNb2RlbC9nYWluIi8+DQorICAgICAgPGdlbk9wZXJhdGlvbnMgZWNvcmVPcGVyYXRpb249InN0YW5kYXJkLmVjb3JlIy8vU3RhbmRhcmRTdG9jaGFzdGljRGlzZWFzZU1vZGVsL2NvbXB1dGVOb2lzZSIvPg0KKyAgICA8L2dlbkNsYXNzZXM+DQorICAgIDxnZW5DbGFzc2VzIGVjb3JlQ2xhc3M9InN0YW5kYXJkLmVjb3JlIy8vU0lSSW5vY3VsYXRvciI+DQorICAgICAgPGdlbkZlYXR1cmVzIGNyZWF0ZUNoaWxkPSJmYWxzZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFQXR0cmlidXRlIHN0YW5kYXJkLmVjb3JlIy8vU0lSSW5vY3VsYXRvci9pbm9jdWxhdGVkUGVyY2VudGFnZSIvPg0KKyAgICAgIDxnZW5GZWF0dXJlcyBjcmVhdGVDaGlsZD0iZmFsc2UiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RUF0dHJpYnV0ZSBzdGFuZGFyZC5lY29yZSMvL1NJUklub2N1bGF0b3IvaW5vY3VsYXRlUGVyY2VudGFnZSIvPg0KKyAgICA8L2dlbkNsYXNzZXM+DQorICAgIDxnZW5DbGFzc2VzIGVjb3JlQ2xhc3M9InN0YW5kYXJkLmVjb3JlIy8vU3RvY2hhc3RpY1BvaXNzb25TSURpc2Vhc2VNb2RlbCIvPg0KKyAgICA8Z2VuQ2xhc3NlcyBlY29yZUNsYXNzPSJzdGFuZGFyZC5lY29yZSMvL1N0b2NoYXN0aWNQb2lzc29uU0lSRGlzZWFzZU1vZGVsIi8+DQorICAgIDxnZW5DbGFzc2VzIGVjb3JlQ2xhc3M9InN0YW5kYXJkLmVjb3JlIy8vU3RvY2hhc3RpY1BvaXNzb25TRUlSRGlzZWFzZU1vZGVsIi8+DQorICAgIDxnZW5DbGFzc2VzIGVjb3JlQ2xhc3M9InN0YW5kYXJkLmVjb3JlIy8vSW5mZWN0b3JJbm9jdWxhdG9yQ29sbGVjdGlvbiI+DQorICAgICAgPGdlbkZlYXR1cmVzIG5vdGlmeT0iZmFsc2UiIGNoaWxkcmVuPSJ0cnVlIiBjcmVhdGVDaGlsZD0iZmFsc2UiIHByb3BlcnR5U29ydENob2ljZXM9InRydWUiDQorICAgICAgICAgIGVjb3JlRmVhdHVyZT0iZWNvcmU6RVJlZmVyZW5jZSBzdGFuZGFyZC5lY29yZSMvL0luZmVjdG9ySW5vY3VsYXRvckNvbGxlY3Rpb24vbGlzdCIvPg0KKyAgICAgIDxnZW5GZWF0dXJlcyBjcmVhdGVDaGlsZD0iZmFsc2UiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RUF0dHJpYnV0ZSBzdGFuZGFyZC5lY29yZSMvL0luZmVjdG9ySW5vY3VsYXRvckNvbGxlY3Rpb24vaW1wb3J0Rm9sZGVyIi8+DQorICAgIDwvZ2VuQ2xhc3Nlcz4NCisgICAgPGdlbkNsYXNzZXMgZWNvcmVDbGFzcz0ic3RhbmRhcmQuZWNvcmUjLy9Jbml0aWFsaXplciI+DQorICAgICAgPGdlbkZlYXR1cmVzIGNyZWF0ZUNoaWxkPSJmYWxzZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFQXR0cmlidXRlIHN0YW5kYXJkLmVjb3JlIy8vSW5pdGlhbGl6ZXIvZGlzZWFzZU5hbWUiLz4NCisgICAgICA8Z2VuRmVhdHVyZXMgY3JlYXRlQ2hpbGQ9ImZhbHNlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVBdHRyaWJ1dGUgc3RhbmRhcmQuZWNvcmUjLy9Jbml0aWFsaXplci90YXJnZXRJU09LZXkiLz4NCisgICAgICA8Z2VuRmVhdHVyZXMgY3JlYXRlQ2hpbGQ9ImZhbHNlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVBdHRyaWJ1dGUgc3RhbmRhcmQuZWNvcmUjLy9Jbml0aWFsaXplci90YXJnZXRVUkkiLz4NCisgICAgICA8Z2VuRmVhdHVyZXMgY3JlYXRlQ2hpbGQ9ImZhbHNlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVBdHRyaWJ1dGUgc3RhbmRhcmQuZWNvcmUjLy9Jbml0aWFsaXplci9wb3B1bGF0aW9uSWRlbnRpZmllciIvPg0KKyAgICAgIDxnZW5GZWF0dXJlcyBjcmVhdGVDaGlsZD0iZmFsc2UiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RUF0dHJpYnV0ZSBzdGFuZGFyZC5lY29yZSMvL0luaXRpYWxpemVyL2NvbXBhcnRtZW50cyIvPg0KKyAgICAgIDxnZW5GZWF0dXJlcyBjcmVhdGVDaGlsZD0iZmFsc2UiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RUF0dHJpYnV0ZSBzdGFuZGFyZC5lY29yZSMvL0luaXRpYWxpemVyL2NvbXBhcnRtZW50VmFsdWVzIi8+DQorICAgICAgPGdlbkZlYXR1cmVzIGNyZWF0ZUNoaWxkPSJmYWxzZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFQXR0cmlidXRlIHN0YW5kYXJkLmVjb3JlIy8vSW5pdGlhbGl6ZXIvdXNlRnJhY3Rpb25zIi8+DQorICAgIDwvZ2VuQ2xhc3Nlcz4NCisgIDwvZ2VuUGFja2FnZXM+DQorICA8Z2VuUGFja2FnZXMgcHJlZml4PSJEaXNlYXNlcHJlZGljYXRlcyIgYmFzZVBhY2thZ2U9Im9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5wcmVkaWNhdGVzIg0KKyAgICAgIGRpc3Bvc2FibGVQcm92aWRlckZhY3Rvcnk9InRydWUiIGNoaWxkQ3JlYXRpb25FeHRlbmRlcnM9InRydWUiIGVjb3JlUGFja2FnZT0iZGlzZWFzZXByZWRpY2F0ZXMuZWNvcmUjLyI+DQorICAgIDxnZW5DbGFzc2VzIGVjb3JlQ2xhc3M9ImRpc2Vhc2VwcmVkaWNhdGVzLmVjb3JlIy8vTGFiZWxWYWx1ZVRlc3QiPg0KKyAgICAgIDxnZW5GZWF0dXJlcyBjcmVhdGVDaGlsZD0iZmFsc2UiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RUF0dHJpYnV0ZSBkaXNlYXNlcHJlZGljYXRlcy5lY29yZSMvL0xhYmVsVmFsdWVUZXN0L21vZGVsTmFtZSIvPg0KKyAgICAgIDxnZW5GZWF0dXJlcyBjcmVhdGVDaGlsZD0iZmFsc2UiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RUF0dHJpYnV0ZSBkaXNlYXNlcHJlZGljYXRlcy5lY29yZSMvL0xhYmVsVmFsdWVUZXN0L3RhcmdldFVSSSIvPg0KKyAgICAgIDxnZW5GZWF0dXJlcyBjcmVhdGVDaGlsZD0iZmFsc2UiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RUF0dHJpYnV0ZSBkaXNlYXNlcHJlZGljYXRlcy5lY29yZSMvL0xhYmVsVmFsdWVUZXN0L3N0YXRlIi8+DQorICAgICAgPGdlbkZlYXR1cmVzIGNyZWF0ZUNoaWxkPSJmYWxzZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFQXR0cmlidXRlIGRpc2Vhc2VwcmVkaWNhdGVzLmVjb3JlIy8vTGFiZWxWYWx1ZVRlc3QvdGhyZXNob2xkIi8+DQorICAgICAgPGdlbkZlYXR1cmVzIGNyZWF0ZUNoaWxkPSJmYWxzZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFQXR0cmlidXRlIGRpc2Vhc2VwcmVkaWNhdGVzLmVjb3JlIy8vTGFiZWxWYWx1ZVRlc3QvcHJlZGljYXRlIi8+DQorICAgICAgPGdlbkZlYXR1cmVzIGNyZWF0ZUNoaWxkPSJmYWxzZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFQXR0cmlidXRlIGRpc2Vhc2VwcmVkaWNhdGVzLmVjb3JlIy8vTGFiZWxWYWx1ZVRlc3QvcG9wdWxhdGlvbklkZW50aWZpZXIiLz4NCisgICAgPC9nZW5DbGFzc2VzPg0KKyAgPC9nZW5QYWNrYWdlcz4NCis8L2dlbm1vZGVsOkdlbk1vZGVsPg0KZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL21vZGVsL2Rpc2Vhc2VwcmVkaWNhdGVzLmVjb3JlIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMvbW9kZWwvZGlzZWFzZXByZWRpY2F0ZXMuZWNvcmUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjA3OGVhNwotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL21vZGVsL2Rpc2Vhc2VwcmVkaWNhdGVzLmVjb3JlCkBAIC0wLDAgKzEsMTggQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8ZWNvcmU6RVBhY2thZ2UgeG1pOnZlcnNpb249IjIuMCIKKyAgICB4bWxuczp4bWk9Imh0dHA6Ly93d3cub21nLm9yZy9YTUkiIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiCisgICAgeG1sbnM6ZWNvcmU9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDIvRWNvcmUiIG5hbWU9ImRpc2Vhc2VwcmVkaWNhdGVzIgorICAgIG5zVVJJPSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9kaXNlYXNlcHJlZGljYXRlcy5lY29yZSIgbnNQcmVmaXg9Im9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5kaXNlYXNlcHJlZGljYXRlcyI+CisgIDxlQ2xhc3NpZmllcnMgeHNpOnR5cGU9ImVjb3JlOkVDbGFzcyIgbmFtZT0iTGFiZWxWYWx1ZVRlc3QiIGVTdXBlclR5cGVzPSIuLi8uLi9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvbW9kZWwvcHJlZGljYXRlLmVjb3JlIy8vVGVzdCI+CisgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVBdHRyaWJ1dGUiIG5hbWU9Im1vZGVsTmFtZSIgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLmVtZi5lY29yZS9tb2RlbC9FY29yZS5lY29yZSMvL0VTdHJpbmciLz4KKyAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0idGFyZ2V0VVJJIiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIC4uLy4uL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9tb2RlbC9jb21tb24uZWNvcmUjLy9VUkkiLz4KKyAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0ic3RhdGUiIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgcGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5lbWYuZWNvcmUvbW9kZWwvRWNvcmUuZWNvcmUjLy9FU3RyaW5nIgorICAgICAgICBkZWZhdWx0VmFsdWVMaXRlcmFsPSJpbmNpZGVuY2UiLz4KKyAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0idGhyZXNob2xkIiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIHBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2UuZW1mLmVjb3JlL21vZGVsL0Vjb3JlLmVjb3JlIy8vRURvdWJsZSIKKyAgICAgICAgZGVmYXVsdFZhbHVlTGl0ZXJhbD0iMTAwIi8+CisgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVBdHRyaWJ1dGUiIG5hbWU9InByZWRpY2F0ZSIgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLmVtZi5lY29yZS9tb2RlbC9FY29yZS5lY29yZSMvL0VTdHJpbmciCisgICAgICAgIGRlZmF1bHRWYWx1ZUxpdGVyYWw9Ij4iLz4KKyAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0icG9wdWxhdGlvbklkZW50aWZpZXIiIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgcGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5lbWYuZWNvcmUvbW9kZWwvRWNvcmUuZWNvcmUjLy9FU3RyaW5nIgorICAgICAgICBkZWZhdWx0VmFsdWVMaXRlcmFsPSJodW1hbiIvPgorICA8L2VDbGFzc2lmaWVycz4KKzwvZWNvcmU6RVBhY2thZ2U+CmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy9tb2RlbC9zdGFuZGFyZC5lY29yZSBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL21vZGVsL3N0YW5kYXJkLmVjb3JlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRhZmEzYTYKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy9tb2RlbC9zdGFuZGFyZC5lY29yZQpAQCAtMCwwICsxLDE4MSBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4NCis8ZWNvcmU6RVBhY2thZ2UgeG1pOnZlcnNpb249IjIuMCINCisgICAgeG1sbnM6eG1pPSJodHRwOi8vd3d3Lm9tZy5vcmcvWE1JIiB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIg0KKyAgICB4bWxuczplY29yZT0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9lbWYvMjAwMi9FY29yZSIgbmFtZT0ic3RhbmRhcmQiDQorICAgIG5zVVJJPSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9zdGFuZGFyZC5lY29yZSIgbnNQcmVmaXg9Im9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZCI+DQorICA8ZUNsYXNzaWZpZXJzIHhzaTp0eXBlPSJlY29yZTpFQ2xhc3MiIG5hbWU9IkRldGVybWluaXN0aWNTRUlSRGlzZWFzZU1vZGVsIiBlU3VwZXJUeXBlcz0iIy8vU0VJUiIvPg0KKyAgPGVDbGFzc2lmaWVycyB4c2k6dHlwZT0iZWNvcmU6RUNsYXNzIiBuYW1lPSJEZXRlcm1pbmlzdGljU0lEaXNlYXNlTW9kZWwiIGVTdXBlclR5cGVzPSIjLy9TSSIvPg0KKyAgPGVDbGFzc2lmaWVycyB4c2k6dHlwZT0iZWNvcmU6RUNsYXNzIiBuYW1lPSJEZXRlcm1pbmlzdGljU0lSRGlzZWFzZU1vZGVsIiBlU3VwZXJUeXBlcz0iIy8vU0lSIi8+DQorICA8ZUNsYXNzaWZpZXJzIHhzaTp0eXBlPSJlY29yZTpFQ2xhc3MiIG5hbWU9IkRpc2Vhc2VNb2RlbCIgYWJzdHJhY3Q9InRydWUiIGVTdXBlclR5cGVzPSIuLi8uLi9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvbW9kZWwvbW9kZWwuZWNvcmUjLy9JbnRlZ3JhdGlvbkRlY29yYXRvciAuLi8uLi9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvbW9kZWwvbW9kaWZpZXIuZWNvcmUjLy9Nb2RpZmlhYmxlIj4NCisgICAgPGVPcGVyYXRpb25zIG5hbWU9ImNyZWF0ZURpc2Vhc2VNb2RlbExhYmVsIiBlVHlwZT0iIy8vRGlzZWFzZU1vZGVsTGFiZWwiPg0KKyAgICAgIDxlUGFyYW1ldGVycyBuYW1lPSJwb3B1bGF0aW9uSWRlbnRpZmllciIgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLmVtZi5lY29yZS9tb2RlbC9FY29yZS5lY29yZSMvL0VTdHJpbmciLz4NCisgICAgPC9lT3BlcmF0aW9ucz4NCisgICAgPGVPcGVyYXRpb25zIG5hbWU9ImNyZWF0ZURpc2Vhc2VNb2RlbExhYmVsVmFsdWUiIGVUeXBlPSIjLy9EaXNlYXNlTW9kZWxMYWJlbFZhbHVlIj4NCisgICAgICA8ZVBhcmFtZXRlcnMgbmFtZT0icG9wdWxhdGlvbklkZW50aWZpZXIiIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgcGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5lbWYuZWNvcmUvbW9kZWwvRWNvcmUuZWNvcmUjLy9FU3RyaW5nIi8+DQorICAgIDwvZU9wZXJhdGlvbnM+DQorICAgIDxlT3BlcmF0aW9ucyBuYW1lPSJjcmVhdGVJbmZlY3RvciIgZVR5cGU9IiMvL0luZmVjdG9yIi8+DQorICAgIDxlT3BlcmF0aW9ucyBuYW1lPSJnZXRBbGxMYWJlbElkZW50aWZpZXJzIiB1cHBlckJvdW5kPSItMSIgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLmVtZi5lY29yZS9tb2RlbC9FY29yZS5lY29yZSMvL0VTdHJpbmciLz4NCisgICAgPGVPcGVyYXRpb25zIG5hbWU9ImdldFBvcHVsYXRpb25Nb2RlbExhYmVscyIgdXBwZXJCb3VuZD0iLTEiIGVUeXBlPSJlY29yZTpFQ2xhc3MgLi4vLi4vb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzL21vZGVsL3N0YW5kYXJkLmVjb3JlIy8vUG9wdWxhdGlvbk1vZGVsTGFiZWwiPg0KKyAgICAgIDxlUGFyYW1ldGVycyBuYW1lPSJwb3B1bGF0aW9uSWRlbnRpZmllciIgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLmVtZi5lY29yZS9tb2RlbC9FY29yZS5lY29yZSMvL0VTdHJpbmciLz4NCisgICAgICA8ZVBhcmFtZXRlcnMgbmFtZT0iZ3JhcGgiIGVUeXBlPSJlY29yZTpFQ2xhc3MgLi4vLi4vb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL21vZGVsL2dyYXBoLmVjb3JlIy8vR3JhcGgiLz4NCisgICAgPC9lT3BlcmF0aW9ucz4NCisgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVBdHRyaWJ1dGUiIG5hbWU9InBvcHVsYXRpb25JZGVudGlmaWVyIiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDIvRWNvcmUjLy9FU3RyaW5nIg0KKyAgICAgICAgZGVmYXVsdFZhbHVlTGl0ZXJhbD0iaHVtYW4iLz4NCisgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVBdHRyaWJ1dGUiIG5hbWU9InRpbWVQZXJpb2QiIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9lbWYvMjAwMi9FY29yZSMvL0VMb25nIg0KKyAgICAgICAgZGVmYXVsdFZhbHVlTGl0ZXJhbD0iODY0MDAwMDAiLz4NCisgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVBdHRyaWJ1dGUiIG5hbWU9ImRpc2Vhc2VOYW1lIiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDIvRWNvcmUjLy9FU3RyaW5nIi8+DQorICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJmaW5pdGVEaWZmZXJlbmNlIiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDIvRWNvcmUjLy9FQm9vbGVhbiINCisgICAgICAgIGRlZmF1bHRWYWx1ZUxpdGVyYWw9InRydWUiLz4NCisgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVBdHRyaWJ1dGUiIG5hbWU9ImZyZXF1ZW5jeURlcGVuZGVudCIgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2VtZi8yMDAyL0Vjb3JlIy8vRUJvb2xlYW4iDQorICAgICAgICBkZWZhdWx0VmFsdWVMaXRlcmFsPSJ0cnVlIi8+DQorICA8L2VDbGFzc2lmaWVycz4NCisgIDxlQ2xhc3NpZmllcnMgeHNpOnR5cGU9ImVjb3JlOkVDbGFzcyIgbmFtZT0iRGlzZWFzZU1vZGVsTGFiZWwiIGFic3RyYWN0PSJ0cnVlIiBlU3VwZXJUeXBlcz0iLi4vLi4vb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL21vZGVsL2dyYXBoLmVjb3JlIy8vSW50ZWdyYXRpb25MYWJlbCI+DQorICAgIDxlT3BlcmF0aW9ucyBuYW1lPSJ0b1Rvb2x0aXBTdHJpbmciIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgcGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5lbWYuZWNvcmUvbW9kZWwvRWNvcmUuZWNvcmUjLy9FU3RyaW5nIi8+DQorICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFUmVmZXJlbmNlIiBuYW1lPSJwb3B1bGF0aW9uTGFiZWwiIGVUeXBlPSJlY29yZTpFQ2xhc3MgLi4vLi4vb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy9tb2RlbC9sYWJlbHMuZWNvcmUjLy9Qb3B1bGF0aW9uTGFiZWwiLz4NCisgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVSZWZlcmVuY2UiIG5hbWU9InBvcHVsYXRpb25Nb2RlbExhYmVsIiBlVHlwZT0iZWNvcmU6RUNsYXNzIC4uLy4uL29yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy9tb2RlbC9zdGFuZGFyZC5lY29yZSMvL1BvcHVsYXRpb25Nb2RlbExhYmVsIi8+DQorICA8L2VDbGFzc2lmaWVycz4NCisgIDxlQ2xhc3NpZmllcnMgeHNpOnR5cGU9ImVjb3JlOkVDbGFzcyIgbmFtZT0iRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZSIgYWJzdHJhY3Q9InRydWUiDQorICAgICAgZVN1cGVyVHlwZXM9Ii4uLy4uL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9tb2RlbC9ncmFwaC5lY29yZSMvL0ludGVncmF0aW9uTGFiZWxWYWx1ZSI+DQorICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJwb3B1bGF0aW9uQ291bnQiIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9lbWYvMjAwMi9FY29yZSMvL0VEb3VibGUiDQorICAgICAgICBjaGFuZ2VhYmxlPSJmYWxzZSIgdm9sYXRpbGU9InRydWUiIHRyYW5zaWVudD0idHJ1ZSIvPg0KKyAgPC9lQ2xhc3NpZmllcnM+DQorICA8ZUNsYXNzaWZpZXJzIHhzaTp0eXBlPSJlY29yZTpFQ2xhc3MiIG5hbWU9IkluZmVjdG9yIiBhYnN0cmFjdD0idHJ1ZSIgZVN1cGVyVHlwZXM9Ii4uLy4uL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9tb2RlbC9tb2RlbC5lY29yZSMvL05vZGVEZWNvcmF0b3IgLi4vLi4vb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL21vZGVsL21vZGlmaWVyLmVjb3JlIy8vTW9kaWZpYWJsZSI+DQorICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFUmVmZXJlbmNlIiBuYW1lPSJkaXNlYXNlTW9kZWwiIGVUeXBlPSIjLy9TdGFuZGFyZERpc2Vhc2VNb2RlbCIvPg0KKyAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0idGFyZ2V0VVJJIiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIC4uLy4uL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9tb2RlbC9jb21tb24uZWNvcmUjLy9VUkkiLz4NCisgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVBdHRyaWJ1dGUiIG5hbWU9ImRpc2Vhc2VOYW1lIiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDIvRWNvcmUjLy9FU3RyaW5nIi8+DQorICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJ0YXJnZXRJU09LZXkiIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9lbWYvMjAwMi9FY29yZSMvL0VTdHJpbmciLz4NCisgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVSZWZlcmVuY2UiIG5hbWU9ImxhYmVsc1RvSW5mZWN0IiB1cHBlckJvdW5kPSItMSINCisgICAgICAgIGVUeXBlPSIjLy9EaXNlYXNlTW9kZWxMYWJlbCIvPg0KKyAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0icG9wdWxhdGlvbklkZW50aWZpZXIiIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9lbWYvMjAwMi9FY29yZSMvL0VTdHJpbmciLz4NCisgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVBdHRyaWJ1dGUiIG5hbWU9ImluZmVjdFBlcmNlbnRhZ2UiIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgcGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5lbWYuZWNvcmUvbW9kZWwvRWNvcmUuZWNvcmUjLy9FQm9vbGVhbiINCisgICAgICAgIGRlZmF1bHRWYWx1ZUxpdGVyYWw9ImZhbHNlIi8+DQorICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJ0YXJnZXRGZWF0dXJlIiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIHBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2UuZW1mLmVjb3JlL21vZGVsL0Vjb3JlLmVjb3JlIy8vRVN0cmluZyINCisgICAgICAgIGRlZmF1bHRWYWx1ZUxpdGVyYWw9ImkiLz4NCisgIDwvZUNsYXNzaWZpZXJzPg0KKyAgPGVDbGFzc2lmaWVycyB4c2k6dHlwZT0iZWNvcmU6RUNsYXNzIiBuYW1lPSJTRUlSIiBhYnN0cmFjdD0idHJ1ZSIgZVN1cGVyVHlwZXM9IiMvL1NJUiI+DQorICAgIDxlT3BlcmF0aW9ucyBuYW1lPSJnZXRBZGp1c3RlZEluY3ViYXRpb25SYXRlIiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDIvRWNvcmUjLy9FRG91YmxlIj4NCisgICAgICA8ZVBhcmFtZXRlcnMgbmFtZT0idGltZURlbHRhIiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDIvRWNvcmUjLy9FTG9uZyIvPg0KKyAgICA8L2VPcGVyYXRpb25zPg0KKyAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0iaW5jdWJhdGlvblJhdGUiIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9lbWYvMjAwMi9FY29yZSMvL0VEb3VibGUiDQorICAgICAgICBkZWZhdWx0VmFsdWVMaXRlcmFsPSIwLjAiLz4NCisgIDwvZUNsYXNzaWZpZXJzPg0KKyAgPGVDbGFzc2lmaWVycyB4c2k6dHlwZT0iZWNvcmU6RUNsYXNzIiBuYW1lPSJTRUlSTGFiZWwiIGVTdXBlclR5cGVzPSIjLy9TdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsIi8+DQorICA8ZUNsYXNzaWZpZXJzIHhzaTp0eXBlPSJlY29yZTpFQ2xhc3MiIG5hbWU9IlNFSVJMYWJlbFZhbHVlIiBlU3VwZXJUeXBlcz0iIy8vU0lSTGFiZWxWYWx1ZSI+DQorICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJlIiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDIvRWNvcmUjLy9FRG91YmxlIi8+DQorICA8L2VDbGFzc2lmaWVycz4NCisgIDxlQ2xhc3NpZmllcnMgeHNpOnR5cGU9ImVjb3JlOkVDbGFzcyIgbmFtZT0iU0kiIGFic3RyYWN0PSJ0cnVlIiBlU3VwZXJUeXBlcz0iIy8vU3RhbmRhcmREaXNlYXNlTW9kZWwiPg0KKyAgICA8ZU9wZXJhdGlvbnMgbmFtZT0iZ2V0QWRqdXN0ZWRJbmZlY3Rpb3VzTW9ydGFsaXR5UmF0ZSIgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2VtZi8yMDAyL0Vjb3JlIy8vRURvdWJsZSI+DQorICAgICAgPGVQYXJhbWV0ZXJzIG5hbWU9InRpbWVEZWx0YSIgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2VtZi8yMDAyL0Vjb3JlIy8vRUxvbmciLz4NCisgICAgPC9lT3BlcmF0aW9ucz4NCisgICAgPGVPcGVyYXRpb25zIG5hbWU9ImdldEFkanVzdGVkVHJhbnNtaXNzaW9uUmF0ZSIgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2VtZi8yMDAyL0Vjb3JlIy8vRURvdWJsZSI+DQorICAgICAgPGVQYXJhbWV0ZXJzIG5hbWU9InRpbWVEZWx0YSIgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2VtZi8yMDAyL0Vjb3JlIy8vRUxvbmciLz4NCisgICAgPC9lT3BlcmF0aW9ucz4NCisgICAgPGVPcGVyYXRpb25zIG5hbWU9ImdldEFkanVzdGVkUmVjb3ZlcnlSYXRlIiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDIvRWNvcmUjLy9FRG91YmxlIj4NCisgICAgICA8ZVBhcmFtZXRlcnMgbmFtZT0idGltZURlbHRhIiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDIvRWNvcmUjLy9FTG9uZyIvPg0KKyAgICA8L2VPcGVyYXRpb25zPg0KKyAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0idHJhbnNtaXNzaW9uUmF0ZSIgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2VtZi8yMDAyL0Vjb3JlIy8vRURvdWJsZSINCisgICAgICAgIGRlZmF1bHRWYWx1ZUxpdGVyYWw9IjAuMCIvPg0KKyAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0ibm9uTGluZWFyaXR5Q29lZmZpY2llbnQiDQorICAgICAgICBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDIvRWNvcmUjLy9FRG91YmxlIiBkZWZhdWx0VmFsdWVMaXRlcmFsPSIxLjAiLz4NCisgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVBdHRyaWJ1dGUiIG5hbWU9InJlY292ZXJ5UmF0ZSIgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2VtZi8yMDAyL0Vjb3JlIy8vRURvdWJsZSINCisgICAgICAgIGRlZmF1bHRWYWx1ZUxpdGVyYWw9IjAuMCIvPg0KKyAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0iaW5mZWN0aW91c01vcnRhbGl0eVJhdGUiDQorICAgICAgICBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDIvRWNvcmUjLy9FRG91YmxlIiBkZWZhdWx0VmFsdWVMaXRlcmFsPSIwLjAiLz4NCisgIDwvZUNsYXNzaWZpZXJzPg0KKyAgPGVDbGFzc2lmaWVycyB4c2k6dHlwZT0iZWNvcmU6RUNsYXNzIiBuYW1lPSJTSUluZmVjdG9yIiBlU3VwZXJUeXBlcz0iIy8vU3RhbmRhcmRJbmZlY3RvciI+DQorICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJpbmZlY3Rpb3VzQ291bnQiIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9lbWYvMjAwMi9FY29yZSMvL0VEb3VibGUiDQorICAgICAgICBkZWZhdWx0VmFsdWVMaXRlcmFsPSIxIi8+DQorICA8L2VDbGFzc2lmaWVycz4NCisgIDxlQ2xhc3NpZmllcnMgeHNpOnR5cGU9ImVjb3JlOkVDbGFzcyIgbmFtZT0iU0lMYWJlbCIgZVN1cGVyVHlwZXM9IiMvL1N0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWwiLz4NCisgIDxlQ2xhc3NpZmllcnMgeHNpOnR5cGU9ImVjb3JlOkVDbGFzcyIgbmFtZT0iU0lMYWJlbFZhbHVlIiBlU3VwZXJUeXBlcz0iIy8vU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbFZhbHVlIj4NCisgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVBdHRyaWJ1dGUiIG5hbWU9ImkiIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9lbWYvMjAwMi9FY29yZSMvL0VEb3VibGUiLz4NCisgIDwvZUNsYXNzaWZpZXJzPg0KKyAgPGVDbGFzc2lmaWVycyB4c2k6dHlwZT0iZWNvcmU6RUNsYXNzIiBuYW1lPSJTSVIiIGFic3RyYWN0PSJ0cnVlIiBlU3VwZXJUeXBlcz0iIy8vU0kiPg0KKyAgICA8ZU9wZXJhdGlvbnMgbmFtZT0iZ2V0QWRqdXN0ZWRJbW11bml0eUxvc3NSYXRlIiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDIvRWNvcmUjLy9FRG91YmxlIj4NCisgICAgICA8ZVBhcmFtZXRlcnMgbmFtZT0idGltZURlbHRhIiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDIvRWNvcmUjLy9FTG9uZyIvPg0KKyAgICA8L2VPcGVyYXRpb25zPg0KKyAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0iaW1tdW5pdHlMb3NzUmF0ZSIgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2VtZi8yMDAyL0Vjb3JlIy8vRURvdWJsZSINCisgICAgICAgIGRlZmF1bHRWYWx1ZUxpdGVyYWw9IjAuMCIvPg0KKyAgPC9lQ2xhc3NpZmllcnM+DQorICA8ZUNsYXNzaWZpZXJzIHhzaTp0eXBlPSJlY29yZTpFQ2xhc3MiIG5hbWU9IlNJUkxhYmVsIiBlU3VwZXJUeXBlcz0iIy8vU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbCIvPg0KKyAgPGVDbGFzc2lmaWVycyB4c2k6dHlwZT0iZWNvcmU6RUNsYXNzIiBuYW1lPSJTSVJMYWJlbFZhbHVlIiBlU3VwZXJUeXBlcz0iIy8vU0lMYWJlbFZhbHVlIj4NCisgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVBdHRyaWJ1dGUiIG5hbWU9InIiIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9lbWYvMjAwMi9FY29yZSMvL0VEb3VibGUiLz4NCisgIDwvZUNsYXNzaWZpZXJzPg0KKyAgPGVDbGFzc2lmaWVycyB4c2k6dHlwZT0iZWNvcmU6RUNsYXNzIiBuYW1lPSJTdGFuZGFyZERpc2Vhc2VNb2RlbCIgYWJzdHJhY3Q9InRydWUiDQorICAgICAgZVN1cGVyVHlwZXM9IiMvL0Rpc2Vhc2VNb2RlbCI+DQorICAgIDxlT3BlcmF0aW9ucyBuYW1lPSJnZXRFZmZlY3RpdmVJbmZlY3Rpb3VzIiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDIvRWNvcmUjLy9FRG91YmxlIj4NCisgICAgICA8ZVBhcmFtZXRlcnMgbmFtZT0ibm9kZSIgZVR5cGU9ImVjb3JlOkVDbGFzcyAuLi8uLi9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvbW9kZWwvZ3JhcGguZWNvcmUjLy9Ob2RlIi8+DQorICAgICAgPGVQYXJhbWV0ZXJzIG5hbWU9ImRpc2Vhc2VMYWJlbCIgZVR5cGU9IiMvL1N0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWwiLz4NCisgICAgICA8ZVBhcmFtZXRlcnMgbmFtZT0ib25zaXRlSW5mZWN0aW91cyIgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2VtZi8yMDAyL0Vjb3JlIy8vRURvdWJsZSIvPg0KKyAgICA8L2VPcGVyYXRpb25zPg0KKyAgICA8ZU9wZXJhdGlvbnMgbmFtZT0iZ2V0Tm9ybWFsaXplZEVmZmVjdGl2ZUluZmVjdGlvdXMiIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9lbWYvMjAwMi9FY29yZSMvL0VEb3VibGUiPg0KKyAgICAgIDxlUGFyYW1ldGVycyBuYW1lPSJub2RlIiBlVHlwZT0iZWNvcmU6RUNsYXNzIC4uLy4uL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9tb2RlbC9ncmFwaC5lY29yZSMvL05vZGUiLz4NCisgICAgICA8ZVBhcmFtZXRlcnMgbmFtZT0iZGlzZWFzZUxhYmVsIiBlVHlwZT0iIy8vU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbCIvPg0KKyAgICAgIDxlUGFyYW1ldGVycyBuYW1lPSJvbnNpdGVJbmZlY3Rpb3VzIiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDIvRWNvcmUjLy9FRG91YmxlIi8+DQorICAgIDwvZU9wZXJhdGlvbnM+DQorICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJyZWZlcmVuY2VQb3B1bGF0aW9uRGVuc2l0eSINCisgICAgICAgIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9lbWYvMjAwMi9FY29yZSMvL0VEb3VibGUiIGRlZmF1bHRWYWx1ZUxpdGVyYWw9IjEwMCIvPg0KKyAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0icm9hZE5ldHdvcmtJbmZlY3Rpb3VzUHJvcG9ydGlvbiINCisgICAgICAgIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgcGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5lbWYuZWNvcmUvbW9kZWwvRWNvcmUuZWNvcmUjLy9FRG91YmxlIg0KKyAgICAgICAgZGVmYXVsdFZhbHVlTGl0ZXJhbD0iMC4wMSIvPg0KKyAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0iY2hhcmFjdGVyaXN0aWNNaXhpbmdEaXN0YW5jZSINCisgICAgICAgIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgcGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5lbWYuZWNvcmUvbW9kZWwvRWNvcmUuZWNvcmUjLy9FRG91YmxlIg0KKyAgICAgICAgZGVmYXVsdFZhbHVlTGl0ZXJhbD0iMi4yNSIvPg0KKyAgPC9lQ2xhc3NpZmllcnM+DQorICA8ZUNsYXNzaWZpZXJzIHhzaTp0eXBlPSJlY29yZTpFQ2xhc3MiIG5hbWU9IlN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWwiIGFic3RyYWN0PSJ0cnVlIg0KKyAgICAgIGVTdXBlclR5cGVzPSIjLy9EaXNlYXNlTW9kZWxMYWJlbCIvPg0KKyAgPGVDbGFzc2lmaWVycyB4c2k6dHlwZT0iZWNvcmU6RUNsYXNzIiBuYW1lPSJTdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsVmFsdWUiIGFic3RyYWN0PSJ0cnVlIg0KKyAgICAgIGVTdXBlclR5cGVzPSIjLy9EaXNlYXNlTW9kZWxMYWJlbFZhbHVlIj4NCisgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVBdHRyaWJ1dGUiIG5hbWU9InMiIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9lbWYvMjAwMi9FY29yZSMvL0VEb3VibGUiLz4NCisgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVBdHRyaWJ1dGUiIG5hbWU9ImluY2lkZW5jZSIgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLmVtZi5lY29yZS9tb2RlbC9FY29yZS5lY29yZSMvL0VEb3VibGUiDQorICAgICAgICBkZWZhdWx0VmFsdWVMaXRlcmFsPSIwLjAiLz4NCisgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVBdHRyaWJ1dGUiIG5hbWU9ImRpc2Vhc2VEZWF0aHMiIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgcGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5lbWYuZWNvcmUvbW9kZWwvRWNvcmUuZWNvcmUjLy9FRG91YmxlIg0KKyAgICAgICAgZGVmYXVsdFZhbHVlTGl0ZXJhbD0iMC4wIi8+DQorICA8L2VDbGFzc2lmaWVycz4NCisgIDxlQ2xhc3NpZmllcnMgeHNpOnR5cGU9ImVjb3JlOkVDbGFzcyIgbmFtZT0iU3RhbmRhcmRJbmZlY3RvciIgYWJzdHJhY3Q9InRydWUiIGVTdXBlclR5cGVzPSIjLy9JbmZlY3RvciIvPg0KKyAgPGVDbGFzc2lmaWVycyB4c2k6dHlwZT0iZWNvcmU6RUNsYXNzIiBuYW1lPSJTdG9jaGFzdGljU0VJUkRpc2Vhc2VNb2RlbCIgZVN1cGVyVHlwZXM9IiMvL1NFSVIgIy8vU3RhbmRhcmRTdG9jaGFzdGljRGlzZWFzZU1vZGVsIi8+DQorICA8ZUNsYXNzaWZpZXJzIHhzaTp0eXBlPSJlY29yZTpFQ2xhc3MiIG5hbWU9IlN0b2NoYXN0aWNTSURpc2Vhc2VNb2RlbCIgZVN1cGVyVHlwZXM9IiMvL1NJICMvL1N0YW5kYXJkU3RvY2hhc3RpY0Rpc2Vhc2VNb2RlbCIvPg0KKyAgPGVDbGFzc2lmaWVycyB4c2k6dHlwZT0iZWNvcmU6RUNsYXNzIiBuYW1lPSJTdG9jaGFzdGljU0lSRGlzZWFzZU1vZGVsIiBlU3VwZXJUeXBlcz0iIy8vU0lSICMvL1N0YW5kYXJkU3RvY2hhc3RpY0Rpc2Vhc2VNb2RlbCIvPg0KKyAgPGVDbGFzc2lmaWVycyB4c2k6dHlwZT0iZWNvcmU6RUNsYXNzIiBuYW1lPSJTdG9jaGFzdGljRGlzZWFzZU1vZGVsIiBhYnN0cmFjdD0idHJ1ZSINCisgICAgICBlU3VwZXJUeXBlcz0iIy8vRGlzZWFzZU1vZGVsIj4NCisgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVBdHRyaWJ1dGUiIG5hbWU9InNlZWQiIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9lbWYvMjAwMi9FY29yZSMvL0VMb25nIg0KKyAgICAgICAgZGVmYXVsdFZhbHVlTGl0ZXJhbD0iMCIvPg0KKyAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0icmFuZG9tR2VuZXJhdG9yIiBlVHlwZT0iIy8vUmFuZG9tIg0KKyAgICAgICAgY2hhbmdlYWJsZT0iZmFsc2UiIGRlZmF1bHRWYWx1ZUxpdGVyYWw9IjAiLz4NCisgIDwvZUNsYXNzaWZpZXJzPg0KKyAgPGVDbGFzc2lmaWVycyB4c2k6dHlwZT0iZWNvcmU6RUNsYXNzIiBuYW1lPSJTdGFuZGFyZFN0b2NoYXN0aWNEaXNlYXNlTW9kZWwiIGFic3RyYWN0PSJ0cnVlIg0KKyAgICAgIGVTdXBlclR5cGVzPSIjLy9TdG9jaGFzdGljRGlzZWFzZU1vZGVsIj4NCisgICAgPGVPcGVyYXRpb25zIG5hbWU9ImNvbXB1dGVOb2lzZSIgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2VtZi8yMDAyL0Vjb3JlIy8vRURvdWJsZSIvPg0KKyAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0iZ2FpbiIgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2VtZi8yMDAyL0Vjb3JlIy8vRURvdWJsZSINCisgICAgICAgIGRlZmF1bHRWYWx1ZUxpdGVyYWw9IjAuMDEiLz4NCisgIDwvZUNsYXNzaWZpZXJzPg0KKyAgPGVDbGFzc2lmaWVycyB4c2k6dHlwZT0iZWNvcmU6RUNsYXNzIiBuYW1lPSJTSVJJbm9jdWxhdG9yIiBlU3VwZXJUeXBlcz0iIy8vU0lJbmZlY3RvciI+DQorICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJpbm9jdWxhdGVkUGVyY2VudGFnZSIgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2VtZi8yMDAyL0Vjb3JlIy8vRURvdWJsZSINCisgICAgICAgIGRlZmF1bHRWYWx1ZUxpdGVyYWw9IjEiLz4NCisgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVBdHRyaWJ1dGUiIG5hbWU9Imlub2N1bGF0ZVBlcmNlbnRhZ2UiIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgcGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5lbWYuZWNvcmUvbW9kZWwvRWNvcmUuZWNvcmUjLy9FQm9vbGVhbiINCisgICAgICAgIGRlZmF1bHRWYWx1ZUxpdGVyYWw9InRydWUiLz4NCisgIDwvZUNsYXNzaWZpZXJzPg0KKyAgPGVDbGFzc2lmaWVycyB4c2k6dHlwZT0iZWNvcmU6RURhdGFUeXBlIiBuYW1lPSJSYW5kb20iIGluc3RhbmNlQ2xhc3NOYW1lPSJqYXZhLnV0aWwuUmFuZG9tIi8+DQorICA8ZUNsYXNzaWZpZXJzIHhzaTp0eXBlPSJlY29yZTpFQ2xhc3MiIG5hbWU9IlN0b2NoYXN0aWNQb2lzc29uU0lEaXNlYXNlTW9kZWwiIGVTdXBlclR5cGVzPSIjLy9TSSIvPg0KKyAgPGVDbGFzc2lmaWVycyB4c2k6dHlwZT0iZWNvcmU6RUNsYXNzIiBuYW1lPSJTdG9jaGFzdGljUG9pc3NvblNJUkRpc2Vhc2VNb2RlbCIgZVN1cGVyVHlwZXM9IiMvL1NJUiIvPg0KKyAgPGVDbGFzc2lmaWVycyB4c2k6dHlwZT0iZWNvcmU6RUNsYXNzIiBuYW1lPSJTdG9jaGFzdGljUG9pc3NvblNFSVJEaXNlYXNlTW9kZWwiIGVTdXBlclR5cGVzPSIjLy9TRUlSIi8+DQorICA8ZUNsYXNzaWZpZXJzIHhzaTp0eXBlPSJlY29yZTpFQ2xhc3MiIG5hbWU9IkluZmVjdG9ySW5vY3VsYXRvckNvbGxlY3Rpb24iIGVTdXBlclR5cGVzPSIuLi8uLi9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvbW9kZWwvbW9kZWwuZWNvcmUjLy9Ob2RlRGVjb3JhdG9yIC4uLy4uL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9tb2RlbC9tb2RpZmllci5lY29yZSMvL01vZGlmaWFibGUiPg0KKyAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RVJlZmVyZW5jZSIgbmFtZT0ibGlzdCIgdXBwZXJCb3VuZD0iLTEiIGVUeXBlPSIjLy9JbmZlY3RvciINCisgICAgICAgIGNvbnRhaW5tZW50PSJ0cnVlIi8+DQorICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJpbXBvcnRGb2xkZXIiIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgcGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5lbWYuZWNvcmUvbW9kZWwvRWNvcmUuZWNvcmUjLy9FU3RyaW5nIg0KKyAgICAgICAgZGVmYXVsdFZhbHVlTGl0ZXJhbD0iIi8+DQorICA8L2VDbGFzc2lmaWVycz4NCisgIDxlQ2xhc3NpZmllcnMgeHNpOnR5cGU9ImVjb3JlOkVDbGFzcyIgbmFtZT0iSW5pdGlhbGl6ZXIiIGVTdXBlclR5cGVzPSIuLi8uLi9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvbW9kZWwvbW9kZWwuZWNvcmUjLy9Ob2RlRGVjb3JhdG9yIj4NCisgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVBdHRyaWJ1dGUiIG5hbWU9ImRpc2Vhc2VOYW1lIiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDIvRWNvcmUjLy9FU3RyaW5nIi8+DQorICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJ0YXJnZXRJU09LZXkiIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9lbWYvMjAwMi9FY29yZSMvL0VTdHJpbmciLz4NCisgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVBdHRyaWJ1dGUiIG5hbWU9InRhcmdldFVSSSIgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSAuLi8uLi9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvbW9kZWwvY29tbW9uLmVjb3JlIy8vVVJJIi8+DQorICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJwb3B1bGF0aW9uSWRlbnRpZmllciIgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2VtZi8yMDAyL0Vjb3JlIy8vRVN0cmluZyIvPg0KKyAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0iY29tcGFydG1lbnRzIiB1cHBlckJvdW5kPSItMSINCisgICAgICAgIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgcGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5lbWYuZWNvcmUvbW9kZWwvRWNvcmUuZWNvcmUjLy9FU3RyaW5nIg0KKyAgICAgICAgZGVmYXVsdFZhbHVlTGl0ZXJhbD0iIi8+DQorICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJjb21wYXJ0bWVudFZhbHVlcyIgdW5pcXVlPSJmYWxzZSINCisgICAgICAgIHVwcGVyQm91bmQ9Ii0xIiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIHBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2UuZW1mLmVjb3JlL21vZGVsL0Vjb3JlLmVjb3JlIy8vRURvdWJsZSINCisgICAgICAgIGRlZmF1bHRWYWx1ZUxpdGVyYWw9IjAuMCIvPg0KKyAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0idXNlRnJhY3Rpb25zIiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIHBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2UuZW1mLmVjb3JlL21vZGVsL0Vjb3JlLmVjb3JlIy8vRUJvb2xlYW4iLz4NCisgIDwvZUNsYXNzaWZpZXJzPg0KKzwvZWNvcmU6RVBhY2thZ2U+DQpkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMvbm90aWNlLmh0bWwgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy9ub3RpY2UuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNmFmOTY2Ci0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMvbm90aWNlLmh0bWwKQEAgLTAsMCArMSw3OSBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMC8vRU4iPgorPGh0bWw+Cis8aGVhZD4KKzxtZXRhIGh0dHAtZXF1aXY9Q29udGVudC1UeXBlIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1pc28tODg1OS0xIj4KKzx0aXRsZT5FY2xpcHNlLm9yZyBTb2Z0d2FyZSBVc2VyIEFncmVlbWVudDwvdGl0bGU+Cis8L2hlYWQ+CisKKzxib2R5IGxhbmc9IkVOLVVTIiBsaW5rPWJsdWUgdmxpbms9cHVycGxlPgorPGgyPkVjbGlwc2UgRm91bmRhdGlvbiBTb2Z0d2FyZSBVc2VyIEFncmVlbWVudDwvaDI+Cis8cD5NYXJjaCAxNywgMjAwNTwvcD4KKworPGgzPlVzYWdlIE9mIENvbnRlbnQ8L2gzPgorCis8cD5USEUgRUNMSVBTRSBGT1VOREFUSU9OIE1BS0VTIEFWQUlMQUJMRSBTT0ZUV0FSRSwgRE9DVU1FTlRBVElPTiwgSU5GT1JNQVRJT04gQU5EL09SIE9USEVSIE1BVEVSSUFMUyBGT1IgT1BFTiBTT1VSQ0UgUFJPSkVDVFMKKyAgIChDT0xMRUNUSVZFTFkgJnF1b3Q7Q09OVEVOVCZxdW90OykuICBVU0UgT0YgVEhFIENPTlRFTlQgSVMgR09WRVJORUQgQlkgVEhFIFRFUk1TIEFORCBDT05ESVRJT05TIE9GIFRISVMgQUdSRUVNRU5UIEFORC9PUiBUSEUgVEVSTVMgQU5ECisgICBDT05ESVRJT05TIE9GIExJQ0VOU0UgQUdSRUVNRU5UUyBPUiBOT1RJQ0VTIElORElDQVRFRCBPUiBSRUZFUkVOQ0VEIEJFTE9XLiAgQlkgVVNJTkcgVEhFIENPTlRFTlQsIFlPVSBBR1JFRSBUSEFUIFlPVVIgVVNFCisgICBPRiBUSEUgQ09OVEVOVCBJUyBHT1ZFUk5FRCBCWSBUSElTIEFHUkVFTUVOVCBBTkQvT1IgVEhFIFRFUk1TIEFORCBDT05ESVRJT05TIE9GIEFOWSBBUFBMSUNBQkxFIExJQ0VOU0UgQUdSRUVNRU5UUyBPUgorICAgTk9USUNFUyBJTkRJQ0FURUQgT1IgUkVGRVJFTkNFRCBCRUxPVy4gIElGIFlPVSBETyBOT1QgQUdSRUUgVE8gVEhFIFRFUk1TIEFORCBDT05ESVRJT05TIE9GIFRISVMgQUdSRUVNRU5UIEFORCBUSEUgVEVSTVMgQU5ECisgICBDT05ESVRJT05TIE9GIEFOWSBBUFBMSUNBQkxFIExJQ0VOU0UgQUdSRUVNRU5UUyBPUiBOT1RJQ0VTIElORElDQVRFRCBPUiBSRUZFUkVOQ0VEIEJFTE9XLCBUSEVOIFlPVSBNQVkgTk9UIFVTRSBUSEUgQ09OVEVOVC48L3A+CisgICAKKzxoMz5BcHBsaWNhYmxlIExpY2Vuc2VzPC9oMz4gICAKKyAgIAorPHA+VW5sZXNzIG90aGVyd2lzZSBpbmRpY2F0ZWQsIGFsbCBDb250ZW50IG1hZGUgYXZhaWxhYmxlIGJ5IHRoZSBFY2xpcHNlIEZvdW5kYXRpb24gaXMgcHJvdmlkZWQgdG8geW91IHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMAorICAgKCZxdW90O0VQTCZxdW90OykuICBBIGNvcHkgb2YgdGhlIEVQTCBpcyBwcm92aWRlZCB3aXRoIHRoaXMgQ29udGVudCBhbmQgaXMgYWxzbyBhdmFpbGFibGUgYXQgPGEgaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwiPmh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sPC9hPi4KKyAgIEZvciBwdXJwb3NlcyBvZiB0aGUgRVBMLCAmcXVvdDtQcm9ncmFtJnF1b3Q7IHdpbGwgbWVhbiB0aGUgQ29udGVudC48L3A+CisKKzxwPkNvbnRlbnQgaW5jbHVkZXMsIGJ1dCBpcyBub3QgbGltaXRlZCB0bywgc291cmNlIGNvZGUsIG9iamVjdCBjb2RlLCBkb2N1bWVudGF0aW9uIGFuZCBvdGhlciBmaWxlcyBtYWludGFpbmVkIGluIHRoZSBFY2xpcHNlLm9yZyBDVlMgcmVwb3NpdG9yeSAoJnF1b3Q7UmVwb3NpdG9yeSZxdW90OykgaW4gQ1ZTCisgICBtb2R1bGVzICgmcXVvdDtNb2R1bGVzJnF1b3Q7KSBhbmQgbWFkZSBhdmFpbGFibGUgYXMgZG93bmxvYWRhYmxlIGFyY2hpdmVzICgmcXVvdDtEb3dubG9hZHMmcXVvdDspLjwvcD4KKyAgIAorPHVsPgorCTxsaT5Db250ZW50IG1heSBiZSBzdHJ1Y3R1cmVkIGFuZCBwYWNrYWdlZCBpbnRvIG1vZHVsZXMgdG8gZmFjaWxpdGF0ZSBkZWxpdmVyaW5nLCBleHRlbmRpbmcsIGFuZCB1cGdyYWRpbmcgdGhlIENvbnRlbnQuICBUeXBpY2FsIG1vZHVsZXMgbWF5IGluY2x1ZGUgcGx1Zy1pbnMgKCZxdW90O1BsdWctaW5zJnF1b3Q7KSwgcGx1Zy1pbiBmcmFnbWVudHMgKCZxdW90O0ZyYWdtZW50cyZxdW90OyksIGFuZCBmZWF0dXJlcyAoJnF1b3Q7RmVhdHVyZXMmcXVvdDspLjwvbGk+CisJPGxpPkVhY2ggUGx1Zy1pbiBvciBGcmFnbWVudCBtYXkgYmUgcGFja2FnZWQgYXMgYSBzdWItZGlyZWN0b3J5IG9yIEpBUiAoSmF2YSZ0cmFkZTsgQVJjaGl2ZSkgaW4gYSBkaXJlY3RvcnkgbmFtZWQgJnF1b3Q7cGx1Z2lucyZxdW90Oy48L2xpPgorCTxsaT5BIEZlYXR1cmUgaXMgYSBidW5kbGUgb2Ygb25lIG9yIG1vcmUgUGx1Zy1pbnMgYW5kL29yIEZyYWdtZW50cyBhbmQgYXNzb2NpYXRlZCBtYXRlcmlhbC4gIEVhY2ggRmVhdHVyZSBtYXkgYmUgcGFja2FnZWQgYXMgYSBzdWItZGlyZWN0b3J5IGluIGEgZGlyZWN0b3J5IG5hbWVkICZxdW90O2ZlYXR1cmVzJnF1b3Q7LiAgV2l0aGluIGEgRmVhdHVyZSwgZmlsZXMgbmFtZWQgJnF1b3Q7ZmVhdHVyZS54bWwmcXVvdDsgbWF5IGNvbnRhaW4gYSBsaXN0IG9mIHRoZSBuYW1lcyBhbmQgdmVyc2lvbiBudW1iZXJzIG9mIHRoZSBQbHVnLWlucworICAgICAgYW5kL29yIEZyYWdtZW50cyBhc3NvY2lhdGVkIHdpdGggdGhhdCBGZWF0dXJlLjwvbGk+CisJPGxpPkZlYXR1cmVzIG1heSBhbHNvIGluY2x1ZGUgb3RoZXIgRmVhdHVyZXMgKCZxdW90O0luY2x1ZGVkIEZlYXR1cmVzJnF1b3Q7KS4gV2l0aGluIGEgRmVhdHVyZSwgZmlsZXMgbmFtZWQgJnF1b3Q7ZmVhdHVyZS54bWwmcXVvdDsgbWF5IGNvbnRhaW4gYSBsaXN0IG9mIHRoZSBuYW1lcyBhbmQgdmVyc2lvbiBudW1iZXJzIG9mIEluY2x1ZGVkIEZlYXR1cmVzLjwvbGk+Cis8L3VsPiAgIAorIAorPHA+VGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIGdvdmVybmluZyBQbHVnLWlucyBhbmQgRnJhZ21lbnRzIHNob3VsZCBiZSBjb250YWluZWQgaW4gZmlsZXMgbmFtZWQgJnF1b3Q7YWJvdXQuaHRtbCZxdW90OyAoJnF1b3Q7QWJvdXRzJnF1b3Q7KS4gVGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIGdvdmVybmluZyBGZWF0dXJlcyBhbmQKK0luY2x1ZGVkIEZlYXR1cmVzIHNob3VsZCBiZSBjb250YWluZWQgaW4gZmlsZXMgbmFtZWQgJnF1b3Q7bGljZW5zZS5odG1sJnF1b3Q7ICgmcXVvdDtGZWF0dXJlIExpY2Vuc2VzJnF1b3Q7KS4gIEFib3V0cyBhbmQgRmVhdHVyZSBMaWNlbnNlcyBtYXkgYmUgbG9jYXRlZCBpbiBhbnkgZGlyZWN0b3J5IG9mIGEgRG93bmxvYWQgb3IgTW9kdWxlCitpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0byB0aGUgZm9sbG93aW5nIGxvY2F0aW9uczo8L3A+CisKKzx1bD4KKwk8bGk+VGhlIHRvcC1sZXZlbCAocm9vdCkgZGlyZWN0b3J5PC9saT4KKwk8bGk+UGx1Zy1pbiBhbmQgRnJhZ21lbnQgZGlyZWN0b3JpZXM8L2xpPgorCTxsaT5JbnNpZGUgUGx1Zy1pbnMgYW5kIEZyYWdtZW50cyBwYWNrYWdlZCBhcyBKQVJzPC9saT4KKwk8bGk+U3ViLWRpcmVjdG9yaWVzIG9mIHRoZSBkaXJlY3RvcnkgbmFtZWQgJnF1b3Q7c3JjJnF1b3Q7IG9mIGNlcnRhaW4gUGx1Zy1pbnM8L2xpPgorCTxsaT5GZWF0dXJlIGRpcmVjdG9yaWVzPC9saT4KKzwvdWw+CisJCQorPHA+Tm90ZTogaWYgYSBGZWF0dXJlIG1hZGUgYXZhaWxhYmxlIGJ5IHRoZSBFY2xpcHNlIEZvdW5kYXRpb24gaXMgaW5zdGFsbGVkIHVzaW5nIHRoZSBFY2xpcHNlIFVwZGF0ZSBNYW5hZ2VyLCB5b3UgbXVzdCBhZ3JlZSB0byBhIGxpY2Vuc2UgKCZxdW90O0ZlYXR1cmUgVXBkYXRlIExpY2Vuc2UmcXVvdDspIGR1cmluZyB0aGUKK2luc3RhbGxhdGlvbiBwcm9jZXNzLiAgSWYgdGhlIEZlYXR1cmUgY29udGFpbnMgSW5jbHVkZWQgRmVhdHVyZXMsIHRoZSBGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlIHNob3VsZCBlaXRoZXIgcHJvdmlkZSB5b3Ugd2l0aCB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgZ292ZXJuaW5nIHRoZSBJbmNsdWRlZCBGZWF0dXJlcyBvcgoraW5mb3JtIHlvdSB3aGVyZSB5b3UgY2FuIGxvY2F0ZSB0aGVtLiAgRmVhdHVyZSBVcGRhdGUgTGljZW5zZXMgbWF5IGJlIGZvdW5kIGluIHRoZSAmcXVvdDtsaWNlbnNlJnF1b3Q7IHByb3BlcnR5IG9mIGZpbGVzIG5hbWVkICZxdW90O2ZlYXR1cmUucHJvcGVydGllcyZxdW90OyBmb3VuZCB3aXRoaW4gYSBGZWF0dXJlLgorU3VjaCBBYm91dHMsIEZlYXR1cmUgTGljZW5zZXMsIGFuZCBGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlcyBjb250YWluIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyAob3IgcmVmZXJlbmNlcyB0byBzdWNoIHRlcm1zIGFuZCBjb25kaXRpb25zKSB0aGF0IGdvdmVybiB5b3VyIHVzZSBvZiB0aGUgYXNzb2NpYXRlZCBDb250ZW50IGluCit0aGF0IGRpcmVjdG9yeS48L3A+CisKKzxwPlRIRSBBQk9VVFMsIEZFQVRVUkUgTElDRU5TRVMsIEFORCBGRUFUVVJFIFVQREFURSBMSUNFTlNFUyBNQVkgUkVGRVIgVE8gVEhFIEVQTCBPUiBPVEhFUiBMSUNFTlNFIEFHUkVFTUVOVFMsIE5PVElDRVMgT1IgVEVSTVMgQU5EIENPTkRJVElPTlMuICBTT01FIE9GIFRIRVNFCitPVEhFUiBMSUNFTlNFIEFHUkVFTUVOVFMgTUFZIElOQ0xVREUgKEJVVCBBUkUgTk9UIExJTUlURUQgVE8pOjwvcD4KKworPHVsPgorCTxsaT5Db21tb24gUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjAgKGF2YWlsYWJsZSBhdCA8YSBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2NwbC12MTAuaHRtbCI+aHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9jcGwtdjEwLmh0bWw8L2E+KTwvbGk+CisJPGxpPkFwYWNoZSBTb2Z0d2FyZSBMaWNlbnNlIDEuMSAoYXZhaWxhYmxlIGF0IDxhIGhyZWY9Imh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFIj5odHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRTwvYT4pPC9saT4KKwk8bGk+QXBhY2hlIFNvZnR3YXJlIExpY2Vuc2UgMi4wIChhdmFpbGFibGUgYXQgPGEgaHJlZj0iaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wIj5odHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjA8L2E+KTwvbGk+CisJPGxpPklCTSBQdWJsaWMgTGljZW5zZSAxLjAgKGF2YWlsYWJsZSBhdCA8YSBocmVmPSJodHRwOi8vb3NzLnNvZnR3YXJlLmlibS5jb20vZGV2ZWxvcGVyd29ya3Mvb3BlbnNvdXJjZS9saWNlbnNlMTAuaHRtbCI+aHR0cDovL29zcy5zb2Z0d2FyZS5pYm0uY29tL2RldmVsb3BlcndvcmtzL29wZW5zb3VyY2UvbGljZW5zZTEwLmh0bWw8L2E+KTwvbGk+CQorCTxsaT5NZXRybyBMaW5rIFB1YmxpYyBMaWNlbnNlIDEuMDAgKGF2YWlsYWJsZSBhdCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW5ncm91cC5vcmcvb3Blbm1vdGlmL3N1cHBvcnRlcnMvbWV0cm9saW5rL2xpY2Vuc2UuaHRtbCI+aHR0cDovL3d3dy5vcGVuZ3JvdXAub3JnL29wZW5tb3RpZi9zdXBwb3J0ZXJzL21ldHJvbGluay9saWNlbnNlLmh0bWw8L2E+KTwvbGk+CisJPGxpPk1vemlsbGEgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjEgKGF2YWlsYWJsZSBhdCA8YSBocmVmPSJodHRwOi8vd3d3Lm1vemlsbGEub3JnL01QTC9NUEwtMS4xLmh0bWwiPmh0dHA6Ly93d3cubW96aWxsYS5vcmcvTVBML01QTC0xLjEuaHRtbDwvYT4pPC9saT4KKzwvdWw+CisKKzxwPklUIElTIFlPVVIgT0JMSUdBVElPTiBUTyBSRUFEIEFORCBBQ0NFUFQgQUxMIFNVQ0ggVEVSTVMgQU5EIENPTkRJVElPTlMgUFJJT1IgVE8gVVNFIE9GIFRIRSBDT05URU5ULiAgSWYgbm8gQWJvdXQsIEZlYXR1cmUgTGljZW5zZSwgb3IgRmVhdHVyZSBVcGRhdGUgTGljZW5zZSBpcyBwcm92aWRlZCwgcGxlYXNlCitjb250YWN0IHRoZSBFY2xpcHNlIEZvdW5kYXRpb24gdG8gZGV0ZXJtaW5lIHdoYXQgdGVybXMgYW5kIGNvbmRpdGlvbnMgZ292ZXJuIHRoYXQgcGFydGljdWxhciBDb250ZW50LjwvcD4KKworPGgzPkNyeXB0b2dyYXBoeTwvaDM+CisKKzxwPkNvbnRlbnQgbWF5IGNvbnRhaW4gZW5jcnlwdGlvbiBzb2Z0d2FyZS4gVGhlIGNvdW50cnkgaW4gd2hpY2ggeW91IGFyZSBjdXJyZW50bHkgbWF5IGhhdmUgcmVzdHJpY3Rpb25zIG9uIHRoZSBpbXBvcnQsIHBvc3Nlc3Npb24sIGFuZCB1c2UsIGFuZC9vciByZS1leHBvcnQgdG8KKyAgIGFub3RoZXIgY291bnRyeSwgb2YgZW5jcnlwdGlvbiBzb2Z0d2FyZS4gQkVGT1JFIHVzaW5nIGFueSBlbmNyeXB0aW9uIHNvZnR3YXJlLCBwbGVhc2UgY2hlY2sgdGhlIGNvdW50cnkncyBsYXdzLCByZWd1bGF0aW9ucyBhbmQgcG9saWNpZXMgY29uY2VybmluZyB0aGUgaW1wb3J0LAorICAgcG9zc2Vzc2lvbiwgb3IgdXNlLCBhbmQgcmUtZXhwb3J0IG9mIGVuY3J5cHRpb24gc29mdHdhcmUsIHRvIHNlZSBpZiB0aGlzIGlzIHBlcm1pdHRlZC48L3A+CisgICAKKzxzbWFsbD5KYXZhIGFuZCBhbGwgSmF2YS1iYXNlZCB0cmFkZW1hcmtzIGFyZSB0cmFkZW1hcmtzIG9mIFN1biBNaWNyb3N5c3RlbXMsIEluYy4gaW4gdGhlIFVuaXRlZCBTdGF0ZXMsIG90aGVyIGNvdW50cmllcywgb3IgYm90aC48L3NtYWxsPiAgIAorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMvcGx1Z2luLnByb3BlcnRpZXMgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy9wbHVnaW4ucHJvcGVydGllcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZmFiZTVlCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMvcGx1Z2luLnByb3BlcnRpZXMKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMvcGx1Z2luLnhtbCBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL3BsdWdpbi54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzRkZDhlZgotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL3BsdWdpbi54bWwKQEAgLTAsMCArMSwxOTMgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8P2VjbGlwc2UgdmVyc2lvbj0iMy4wIj8+CisKKzwhLS0KKyA8Y29weXJpZ2h0PgorIDwvY29weXJpZ2h0PgorCisgJElkJAorLS0+CisKKzxwbHVnaW4+CisgICA8ZXh0ZW5zaW9uLXBvaW50IGlkPSJkaXNlYXNlIiBuYW1lPSIlRVBfRGlzZWFzZSIgc2NoZW1hPSJzY2hlbWEvZGlzZWFzZS5leHNkIi8+CisgICA8ZXh0ZW5zaW9uLXBvaW50IGlkPSJkaXNlYXNlbW9kZWwiIG5hbWU9IiVFUF9EaXNlYXNlX01vZGVsIiBzY2hlbWE9InNjaGVtYS9kaXNlYXNlbW9kZWwuZXhzZCIvPgorICAgIAorICA8ZXh0ZW5zaW9uIHBvaW50PSJvcmcuZWNsaXBzZS5lbWYuZWRpdC5pdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yaWVzIj4KKyAgICA8ZmFjdG9yeSAKKyAgICAgICB1cmkgPSAiaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvc3RhbmRhcmQuZWNvcmUiIAorICAgICAgIGNsYXNzID0gIm9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5wcm92aWRlci5TdGFuZGFyZEl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5IiAKKyAgICAgICBzdXBwb3J0ZWRUeXBlcyA9IAorICAgICAgICAgIm9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklFZGl0aW5nRG9tYWluSXRlbVByb3ZpZGVyCisgICAgICAgICAgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVN0cnVjdHVyZWRJdGVtQ29udGVudFByb3ZpZGVyCisgICAgICAgICAgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVRyZWVJdGVtQ29udGVudFByb3ZpZGVyCisgICAgICAgICAgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1MYWJlbFByb3ZpZGVyCisgICAgICAgICAgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1Qcm9wZXJ0eVNvdXJjZSIgLz4KKyAgPC9leHRlbnNpb24+CisgIAorICA8ZXh0ZW5zaW9uIHBvaW50PSJvcmcuZWNsaXBzZS5lbWYuZWRpdC5pdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yaWVzIj4KKyAgICA8ZmFjdG9yeSAKKyAgICAgICB1cmkgPSAiaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvZGlzZWFzZXByZWRpY2F0ZXMuZWNvcmUiIAorICAgICAgIGNsYXNzID0gIm9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5wcmVkaWNhdGVzLmRpc2Vhc2VwcmVkaWNhdGVzLnByb3ZpZGVyLkRpc2Vhc2VwcmVkaWNhdGVzSXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkiIAorICAgICAgIHN1cHBvcnRlZFR5cGVzID0gCisgICAgICAgICAib3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUVkaXRpbmdEb21haW5JdGVtUHJvdmlkZXIKKyAgICAgICAgICBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JU3RydWN0dXJlZEl0ZW1Db250ZW50UHJvdmlkZXIKKyAgICAgICAgICBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JVHJlZUl0ZW1Db250ZW50UHJvdmlkZXIKKyAgICAgICAgICBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbUxhYmVsUHJvdmlkZXIKKyAgICAgICAgICBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbVByb3BlcnR5U291cmNlIiAvPgorICA8L2V4dGVuc2lvbj4KKworICA8ZXh0ZW5zaW9uIHBvaW50PSJvcmcuZWNsaXBzZS5lbWYuZWNvcmUuZ2VuZXJhdGVkX3BhY2thZ2UiPgorICAgIDxwYWNrYWdlCisgICAgICAgdXJpID0gImh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3N0YW5kYXJkLmVjb3JlIgorICAgICAgIGNsYXNzID0gIm9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZFBhY2thZ2UiCisgICAgICAgZ2VuTW9kZWwgPSAibW9kZWwvZGlzZWFzZW1vZGVscy5nZW5tb2RlbCIgLz4gCisgIDwvZXh0ZW5zaW9uPgorICA8ZXh0ZW5zaW9uIHBvaW50PSJvcmcuZWNsaXBzZS5lbWYuZWNvcmUuZ2VuZXJhdGVkX3BhY2thZ2UiPgorICAgIDxwYWNrYWdlCisgICAgICAgdXJpID0gImh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL2Rpc2Vhc2VwcmVkaWNhdGVzLmVjb3JlIgorICAgICAgIGNsYXNzID0gIm9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5wcmVkaWNhdGVzLmRpc2Vhc2VwcmVkaWNhdGVzLkRpc2Vhc2VwcmVkaWNhdGVzUGFja2FnZSIKKyAgICAgICBnZW5Nb2RlbCA9ICJtb2RlbC9kaXNlYXNlbW9kZWxzLmdlbm1vZGVsIiAvPiAKKyAgPC9leHRlbnNpb24+CisgIDxleHRlbnNpb24KKyAgICAgICAgcG9pbnQ9Im9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5kaXNlYXNlbW9kZWwiPgorICAgICA8Y2xhc3NkZWYgY2xhc3M9Im9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5pbXBsLkRldGVybWluaXN0aWNTSURpc2Vhc2VNb2RlbEltcGwiLz4KKyAgICAgPGR1Ymxpbl9jb3JlCisgICAgICAgICAgIGNhdGVnb3J5X2lkPSIvIgorICAgICAgICAgICBjcmVhdG9yPSIlZGNfY3JlYXRvcl9zdGVtdGVhbSIKKyAgICAgICAgICAgZGVzY3JpcHRpb249IiVkY19kZXNjX0RfU0kiCisgICAgICAgICAgIGlkZW50aWZpZXI9IiVkY19pZGVudGllciIKKyAgICAgICAgICAgbGljZW5zZT0iJWRjX2xpY2Vuc2UiCisgICAgICAgICAgIHB1Ymxpc2hlcj0iJWRjX3B1Ymxpc2hlciIKKyAgICAgICAgICAgc291cmNlPSIlZGNfU09VUkNFIgorICAgICAgICAgICB0aXRsZT0iJWRjX3RpdGxlX0RfU0kiLz4KKyAgPC9leHRlbnNpb24+CisgIDxleHRlbnNpb24KKyAgICAgICAgcG9pbnQ9Im9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5kaXNlYXNlbW9kZWwiPgorICAgICA8Y2xhc3NkZWYgY2xhc3M9Im9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5pbXBsLkRldGVybWluaXN0aWNTRUlSRGlzZWFzZU1vZGVsSW1wbCIvPgorICAgICA8ZHVibGluX2NvcmUKKyAgICAgICAgICAgY2F0ZWdvcnlfaWQ9Ii8iCisgICAgICAgICAgIGNyZWF0b3I9IiVkY19jcmVhdG9yX3N0ZW10ZWFtIgorICAgICAgICAgICBkZXNjcmlwdGlvbj0iJWRjX2Rlc2NfRF9TRUlSIgorICAgICAgICAgICBpZGVudGlmaWVyPSIlZGNfaWRlbnRpZXIiCisgICAgICAgICAgIGxpY2Vuc2U9IiVkY19saWNlbnNlIgorICAgICAgICAgICBwdWJsaXNoZXI9IiVkY19wdWJsaXNoZXIiCisgICAgICAgICAgIHNvdXJjZT0iJWRjX1NPVVJDRSIKKyAgICAgICAgICAgdGl0bGU9IiVkY190aXRsZV9EX1NFSVIiLz4KKyAgPC9leHRlbnNpb24+CisgIDxleHRlbnNpb24KKyAgICAgICAgcG9pbnQ9Im9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5kaXNlYXNlbW9kZWwiPgorICAgICA8Y2xhc3NkZWYgY2xhc3M9Im9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5pbXBsLkRldGVybWluaXN0aWNTSVJEaXNlYXNlTW9kZWxJbXBsIi8+CisgICAgIDxkdWJsaW5fY29yZQorICAgICAgICAgICBjYXRlZ29yeV9pZD0iLyIKKyAgICAgICAgICAgY3JlYXRvcj0iJWRjX2NyZWF0b3Jfc3RlbXRlYW0iCisgICAgICAgICAgIGRlc2NyaXB0aW9uPSIlZGNfZGVzY19EX1NJUiIKKyAgICAgICAgICAgaWRlbnRpZmllcj0iJWRjX2lkZW50aWVyIgorICAgICAgICAgICBsaWNlbnNlPSIlZGNfbGljZW5zZSIKKyAgICAgICAgICAgcHVibGlzaGVyPSIlZGNfcHVibGlzaGVyIgorICAgICAgICAgICBzb3VyY2U9IiVkY19TT1VSQ0UiCisgICAgICAgICAgIHRpdGxlPSIlZGNfdGl0bGVfRF9TSVIiLz4KKyAgPC9leHRlbnNpb24+CisgIDxleHRlbnNpb24KKyAgICAgICAgcG9pbnQ9Im9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5kaXNlYXNlbW9kZWwiPgorICAgICA8Y2xhc3NkZWYKKyAgICAgICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5pbXBsLlN0b2NoYXN0aWNTRUlSRGlzZWFzZU1vZGVsSW1wbCI+CisgICAgIDwvY2xhc3NkZWY+CisgICAgIDxkdWJsaW5fY29yZQorICAgICAgICAgICBjcmVhdG9yPSIlZGNfY3JlYXRvcl9zdGVtdGVhbSIKKyAgICAgICAgICAgZGVzY3JpcHRpb249IiVkY19kZXNjX1NfU0VJUiIKKyAgICAgICAgICAgaWRlbnRpZmllcj0iJWRjX2lkZW50aWVyIgorICAgICAgICAgICBsaWNlbnNlPSIlZGNfbGljZW5zZSIKKyAgICAgICAgICAgcHVibGlzaGVyPSIlZGNfcHVibGlzaGVyIgorICAgICAgICAgICBzb3VyY2U9IiVkY19TT1VSQ0UiCisgICAgICAgICAgIHRpdGxlPSIlZGNfdGl0bGVfU19TRUlSIj4KKyAgICAgPC9kdWJsaW5fY29yZT4KKyAgPC9leHRlbnNpb24+CisgIDxleHRlbnNpb24KKyAgICAgICAgcG9pbnQ9Im9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5kaXNlYXNlbW9kZWwiPgorICAgICA8Y2xhc3NkZWYKKyAgICAgICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5pbXBsLlN0b2NoYXN0aWNTSVJEaXNlYXNlTW9kZWxJbXBsIj4KKyAgICAgPC9jbGFzc2RlZj4KKyAgICAgPGR1Ymxpbl9jb3JlCisgICAgICAgICAgIGNyZWF0b3I9IiVkY19jcmVhdG9yX3N0ZW10ZWFtIgorICAgICAgICAgICBkZXNjcmlwdGlvbj0iJWRjX2Rlc2NfU19TSVIiCisgICAgICAgICAgIGlkZW50aWZpZXI9IiVkY19pZGVudGllciIKKyAgICAgICAgICAgbGljZW5zZT0iJWRjX2xpY2Vuc2UiCisgICAgICAgICAgIHB1Ymxpc2hlcj0iJWRjX3B1Ymxpc2hlciIKKyAgICAgICAgICAgc291cmNlPSIlZGNfU09VUkNFIgorICAgICAgICAgICB0aXRsZT0iJWRjX3RpdGxlX1NfU0lSIj4KKyAgICAgPC9kdWJsaW5fY29yZT4KKyAgPC9leHRlbnNpb24+CisgIDxleHRlbnNpb24KKyAgICAgICAgcG9pbnQ9Im9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5kaXNlYXNlbW9kZWwiPgorICAgICA8Y2xhc3NkZWYKKyAgICAgICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5pbXBsLlN0b2NoYXN0aWNTSURpc2Vhc2VNb2RlbEltcGwiPgorICAgICA8L2NsYXNzZGVmPgorICAgICA8ZHVibGluX2NvcmUKKyAgICAgICAgICAgY3JlYXRvcj0iJWRjX2NyZWF0b3Jfc3RlbXRlYW0iCisgICAgICAgICAgIGRlc2NyaXB0aW9uPSIlZGNfZGVzY19TX1NJIgorICAgICAgICAgICBpZGVudGlmaWVyPSIlZGNfaWRlbnRpZXIiCisgICAgICAgICAgIGxpY2Vuc2U9IiVkY19saWNlbnNlIgorICAgICAgICAgICBwdWJsaXNoZXI9IiVkY19wdWJsaXNoZXIiCisgICAgICAgICAgIHNvdXJjZT0iJWRjX1NPVVJDRSIKKyAgICAgICAgICAgdGl0bGU9IiVkY190aXRsZV9TX1NJIj4KKyAgICAgPC9kdWJsaW5fY29yZT4KKyAgPC9leHRlbnNpb24+CisgIDxleHRlbnNpb24KKyAgICAgICAgcG9pbnQ9Im9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5kaXNlYXNlbW9kZWwiPgorICAgICA8Y2xhc3NkZWYKKyAgICAgICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5pbXBsLlN0b2NoYXN0aWNQb2lzc29uU0lEaXNlYXNlTW9kZWxJbXBsIj4KKyAgICAgPC9jbGFzc2RlZj4KKyAgICAgPGR1Ymxpbl9jb3JlCisgICAgICAgICAgIGNyZWF0b3I9IiVkY19jcmVhdG9yX3N0ZW10ZWFtIgorICAgICAgICAgICBkZXNjcmlwdGlvbj0iJWRjX2Rlc2NfU19TSSIKKyAgICAgICAgICAgaWRlbnRpZmllcj0iJWRjX2lkZW50aWVyIgorICAgICAgICAgICBsaWNlbnNlPSIlZGNfbGljZW5zZSIKKyAgICAgICAgICAgcHVibGlzaGVyPSIlZGNfcHVibGlzaGVyIgorICAgICAgICAgICBzb3VyY2U9IiVkY19TT1VSQ0UiCisgICAgICAgICAgIHRpdGxlPSIlZGNfdGl0bGVfUFNfU0kiPgorICAgICA8L2R1Ymxpbl9jb3JlPgorICA8L2V4dGVuc2lvbj4KKyAgIDxleHRlbnNpb24KKyAgICAgICAgcG9pbnQ9Im9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5kaXNlYXNlbW9kZWwiPgorICAgICA8Y2xhc3NkZWYKKyAgICAgICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5pbXBsLlN0b2NoYXN0aWNQb2lzc29uU0lSRGlzZWFzZU1vZGVsSW1wbCI+CisgICAgIDwvY2xhc3NkZWY+CisgICAgIDxkdWJsaW5fY29yZQorICAgICAgICAgICBjcmVhdG9yPSIlZGNfY3JlYXRvcl9zdGVtdGVhbSIKKyAgICAgICAgICAgZGVzY3JpcHRpb249IiVkY19kZXNjX1NfU0kiCisgICAgICAgICAgIGlkZW50aWZpZXI9IiVkY19pZGVudGllciIKKyAgICAgICAgICAgbGljZW5zZT0iJWRjX2xpY2Vuc2UiCisgICAgICAgICAgIHB1Ymxpc2hlcj0iJWRjX3B1Ymxpc2hlciIKKyAgICAgICAgICAgc291cmNlPSIlZGNfU09VUkNFIgorICAgICAgICAgICB0aXRsZT0iJWRjX3RpdGxlX1BTX1NJUiI+CisgICAgIDwvZHVibGluX2NvcmU+CisgIDwvZXh0ZW5zaW9uPgorICAgPGV4dGVuc2lvbgorICAgICAgICBwb2ludD0ib3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmRpc2Vhc2Vtb2RlbCI+CisgICAgIDxjbGFzc2RlZgorICAgICAgICAgICBjbGFzcz0ib3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLmltcGwuU3RvY2hhc3RpY1BvaXNzb25TRUlSRGlzZWFzZU1vZGVsSW1wbCI+CisgICAgIDwvY2xhc3NkZWY+CisgICAgIDxkdWJsaW5fY29yZQorICAgICAgICAgICBjcmVhdG9yPSIlZGNfY3JlYXRvcl9zdGVtdGVhbSIKKyAgICAgICAgICAgZGVzY3JpcHRpb249IiVkY19kZXNjX1NfU0kiCisgICAgICAgICAgIGlkZW50aWZpZXI9IiVkY19pZGVudGllciIKKyAgICAgICAgICAgbGljZW5zZT0iJWRjX2xpY2Vuc2UiCisgICAgICAgICAgIHB1Ymxpc2hlcj0iJWRjX3B1Ymxpc2hlciIKKyAgICAgICAgICAgc291cmNlPSIlZGNfU09VUkNFIgorICAgICAgICAgICB0aXRsZT0iJWRjX3RpdGxlX1BTX1NFSVIiPgorICAgICA8L2R1Ymxpbl9jb3JlPgorICA8L2V4dGVuc2lvbj4KKyAgPGV4dGVuc2lvbgorICAgICAgICBwb2ludD0ib3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLnByZWZlcmVuY2VzIj4KKyAgICAgPGluaXRpYWxpemVyCisgICAgICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMucHJlZmVyZW5jZXMuUHJlZmVyZW5jZUluaXRpYWxpemVyIj4KKyAgICAgPC9pbml0aWFsaXplcj4KKyAgPC9leHRlbnNpb24+CisKKyAgPGV4dGVuc2lvbiBwb2ludD0ib3JnLmVjbGlwc2UuZW1mLmVkaXQuY2hpbGRDcmVhdGlvbkV4dGVuZGVycyI+CisgICAgICA8ZXh0ZW5kZXIKKyAgICAgICAgICAgIHVyaT0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvcHJlZGljYXRlLmVjb3JlIgorICAgICAgICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5wcmVkaWNhdGVzLmRpc2Vhc2VwcmVkaWNhdGVzLnByb3ZpZGVyLkRpc2Vhc2VwcmVkaWNhdGVzSXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkkUHJlZGljYXRlQ2hpbGRDcmVhdGlvbkV4dGVuZGVyIi8+CisgICA8L2V4dGVuc2lvbj4KKzwvcGx1Z2luPgorCmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy9wbHVnaW5fZGUucHJvcGVydGllcyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL3BsdWdpbl9kZS5wcm9wZXJ0aWVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgzMjcwMTkKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy9wbHVnaW5fZGUucHJvcGVydGllcwpAQCAtMCwwICsxLDI5NyBAQAorIy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjICogQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorIyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyMgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyMgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorIyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisjICoKKyMgKiBDb250cmlidXRvcnM6CisjICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorIyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisjIFRvIGNvZGUgZGV2ZWxvcGVyOgorIyAgIERvIE5PVCBjaGFuZ2UgdGhlIHByb3BlcnRpZXMgYmV0d2VlbiB0aGlzIGxpbmUgYW5kIHRoZQorIyAgICIlJSUgRU5EIE9GIFRSQU5TTEFURUQgUFJPUEVSVElFUyAlJSUiIGxpbmUuCisjICAgTWFrZSBhIG5ldyBwcm9wZXJ0eSBuYW1lLCBhcHBlbmQgdG8gdGhlIGVuZCBvZiB0aGUgZmlsZSBhbmQgY2hhbmdlCisjICAgdGhlIGNvZGUgdG8gdXNlIHRoZSBuZXcgcHJvcGVydHkuCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyMgJSUlIEVORCBPRiBUUkFOU0xBVEVEIFBST1BFUlRJRVMgJSUlCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK3BsdWdpbk5hbWU9S3JhbmtoZWl0c21vZGVsbGUgTW9kZWxsCitwcm92aWRlck5hbWU9RWNsaXBzZS5vcmcKKworIyBFeHRlbnNpb24gcG9pbnRzCitFUF9EaXNlYXNlPVNURU0gS3JhbmtoZWl0c2RlZmluaXRpb24KK0VQX0Rpc2Vhc2VfTW9kZWw9U1RFTSBLcmFua2hlaXRzbW9kZWxsCisKKyMgRHVibGluIENvcmUKK2RjX2NyZWF0b3JfZGFmb3JkPWRhZm9yZAorZGNfY3JlYXRvcl9rYXVmbWFuPUthdWZtYW4KK2RjX2NyZWF0b3JfZWRsdW5kPUVkbHVuZAorZGNfY3JlYXRvcl9kYXZpcz1kYXZpcworZGNfY3JlYXRvcl9zdGVtdGVhbT1TVEVNIFRlYW0KK2RjX1NPVVJDRT1odHRwOi8vd2lraS5lY2xpcHNlLm9yZy9JbnRyb2R1Y3Rpb25fdG9fQ29tcGFydG1lbnRfTW9kZWxzICh1bmQgUmVmZXJlbnplbiBnaWJ0IGVzLWluKQorZGNfaWRlbnRpZXI9U1RFTSBLcmFua2hlaXRzbW9kZWxsCitkY19wdWJsaXNoZXI9RGllIEVjbGlwc2UgRm91bmRhdGlvbgorZGNfbGljZW5zZT1FY2xpcHNlIFB1YmxpYyBMaWNlbnNlIChFUEwpCitkY19kZXNjX0RfU0k9RGV0ZXJtaW5pc3Rpc2NoZXMgU0kgS29tcGFydGltZW50LU1vZGVsbAorZGNfZGVzY19EX1NJUj1EZXRlcm1pbmlzdGlzY2hlcyBTSVIgS29tcGFydGltZW50LU1vZGVsbAorZGNfZGVzY19EX1NFSVI9RGV0ZXJtaW5pc3Rpc2NoZXMgU0VJUiBLb21wYXJ0aW1lbnQtTW9kZWxsCitkY19kZXNjX1NfU0k9U3RvY2hhc3Rpc2NoZXMgU0ktS29tcGFydGltZW50LU1vZGVsbAorZGNfZGVzY19TX1NJUj1TdG9jaGFzdGlzY2hlcyBTSVItS29tcGFydGltZW50LU1vZGVsbAorZGNfZGVzY19TX1NFSVI9U3RvY2hhc3Rpc2NoZXMgU0VJUi1Lb21wYXJ0aW1lbnQtTW9kZWxsCitkY19kZXNjX1BTX1NJPVN0b2NoYXN0aXNjaGVzIFBvaXNzb24gU0kgS29tcGFydGltZW50LU1vZGVsbAorZGNfZGVzY19QU19TSVI9U3RvY2hhc3Rpc2NoZXMgUG9pc3NvbiBTSVIgS29tcGFydGltZW50LU1vZGVsbAorZGNfZGVzY19QU19TRUlSPVN0b2NoYXN0aXNjaGVzIFBvaXNzb24gU0VJUiBLb21wYXJ0aW1lbnQtTW9kZWxsCitkY190aXRsZV9EX1NJPURldGVybWluaXN0aXNjaGVzIFNJCitkY190aXRsZV9EX1NJUj1EZXRlcm1pbmlzdGlzY2hlcyBTSVIKK2RjX3RpdGxlX0RfU0VJUj1EZXRlcm1pbmlzdGlzY2hlcyBTRUlSCitkY190aXRsZV9TX1NJPVN0b2NoYXN0aXNjaGVzIFNJCitkY190aXRsZV9TX1NJUj1TdG9jaGFzdGlzY2hlcyBTSVIKK2RjX3RpdGxlX1NfU0VJUj1TdG9jaGFzdGlzY2hlcyBTRUlSCitkY190aXRsZV9QU19TST1TdG9jaGFzdGlzY2hlIFBvaXNzb24gU0kKK2RjX3RpdGxlX1BTX1NJUj1TdG9jaGFzdGlzY2hlIFBvaXNzb24gU0lSCitkY190aXRsZV9QU19TRUlSPVN0b2NoYXN0aXNjaGUgUG9pc3NvbiBTRUlSCisKKworX1VJX0NyZWF0ZUNoaWxkX3RleHQ9ezB9CitfVUlfQ3JlYXRlQ2hpbGRfdGV4dDI9ezF9IHswfQorX1VJX0NyZWF0ZUNoaWxkX3RleHQzPXsxfQorX1VJX0NyZWF0ZUNoaWxkX3Rvb2x0aXA9TmV1ZXMgezB9IHVudGVyIHsxfSBGZWF0dXJlIGVyc3RlbGxlbgorX1VJX0NyZWF0ZUNoaWxkX2Rlc2NyaXB0aW9uPU5ldWVzIEtpbmQgdm9tIFR5cCB7MH0gZlx1MDBmY3IgZGFzIHsxfSBNZXJrbWFsIGRlciBhdXNnZXdcdTAwZTRobHRlbiB7Mn0gZXJzdGVsbGVuCitfVUlfQ3JlYXRlU2libGluZ19kZXNjcmlwdGlvbj1OZXVlcyBHZXNjaHdpc3RlcnRlaWwgdm9tIFR5cCB7MH0gZlx1MDBmY3IgZGVuIGF1c2dld1x1MDBlNGhsdGVuIHsyfSB1bnRlciBkZW0gezF9IE1lcmttYWwgZGVzIEVsdGVybnRlaWwgZXJzdGVsbGVuCisKK19VSV9Qcm9wZXJ0eURlc2NyaXB0b3JfZGVzY3JpcHRpb249ezB9IHZvbiB7MX0KKworX1VJX0RldGVybWluaXN0aWNTRUlSRGlzZWFzZU1vZGVsX3R5cGU9RGV0ZXJtaW5pc3Rpc2NoZXMgU0VJUiBLcmFua2hlaXRzbW9kZWxsCitfVUlfRGV0ZXJtaW5pc3RpY1NJRGlzZWFzZU1vZGVsX3R5cGU9RGV0ZXJtaW5pc3Rpc2NoZXMgU0kgS3JhbmtoZWl0c21vZGVsbAorX1VJX0RldGVybWluaXN0aWNTSVJEaXNlYXNlTW9kZWxfdHlwZT1EZXRlcm1pbmlzdGlzY2hlcyBTSVIgS3JhbmtoZWl0c21vZGVsbAorX1VJX0Rpc2Vhc2VNb2RlbF90eXBlPUtyYW5raGVpdHNtb2RlbGwKK19VSV9EaXNlYXNlTW9kZWxMYWJlbF90eXBlPUtyYW5raGVpdHNtb2RlbGwtTGFiZWwKK19VSV9EaXNlYXNlTW9kZWxMYWJlbFZhbHVlX3R5cGU9S3JhbmtoZWl0c21vZGVsbC1MYWJlbC1XZXJ0CitfVUlfRGlzZWFzZU1vZGVsU3RhdGVfdHlwZT1LcmFua3NoZWl0c21vZGVsbC1adXN0YW5kCitfVUlfSW5mZWN0b3JfdHlwZT1JbmZpemllcmVyCitfVUlfU0VJUl90eXBlPVNFSVIKK19VSV9TRUlSTGFiZWxfdHlwZT1TRUlSIExhYmVsCitfVUlfU0VJUkxhYmVsVmFsdWVfdHlwZT1TRUlSIExhYmVsd2VydAorX1VJX1NJX3R5cGU9U0kKK19VSV9TSURpc2Vhc2VNb2RlbFN0YXRlX3R5cGU9U0kgS3JhbmtoZWl0c21vZGVsbC1adXN0YW5kCitfVUlfU0lJbmZlY3Rvcl90eXBlPVNJIEluZml6aWVyZXIKK19VSV9TSUxhYmVsX3R5cGU9U0kgTGFiZWwKK19VSV9TSUxhYmVsVmFsdWVfdHlwZT1TSSBMYWJlbHdlcnQKK19VSV9TSVJfdHlwZT1TSVIKK19VSV9TSVJMYWJlbF90eXBlPVNJUiBMYWJlbAorX1VJX1NJUkxhYmVsVmFsdWVfdHlwZT1TSVIgTGFiZWx3ZXJ0CitfVUlfU3RhbmRhcmREaXNlYXNlTW9kZWxfdHlwZT1LcmFua2hlaXRzbW9kZWxsCitfVUlfU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbF90eXBlPUtyYW5raGVpdHNtb2RlbGwtTGFiZWwKK19VSV9TdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsVmFsdWVfdHlwZT1LcmFua2hlaXRzbW9kZWxsLUxhYmVsLVdlcnQKK19VSV9TdGFuZGFyZERpc2Vhc2VNb2RlbFN0YXRlX3R5cGU9S3JhbmtzaGVpdHNtb2RlbGwtWnVzdGFuZAorX1VJX1N0YW5kYXJkSW5mZWN0b3JfdHlwZT1JbmZpemllcmVyCitfVUlfU3RvY2hhc3RpY1NFSVJEaXNlYXNlTW9kZWxfdHlwZT1TdG9jaGFzdGlzY2hlcyBTRUlSLUtyYW5raGVpdHNtb2RlbGwKK19VSV9TdG9jaGFzdGljU0lEaXNlYXNlTW9kZWxfdHlwZT1TdG9jaGFzdGlzY2hlcyBTSS1LcmFua2hlaXRzbW9kZWxsCitfVUlfU3RvY2hhc3RpY1NJUkRpc2Vhc2VNb2RlbF90eXBlPVN0b2NoYXN0aXNjaGVzIFNJUi1LcmFua2hlaXRzbW9kZWxsCitfVUlfU2FuaXR5Q2hlY2tlcl90eXBlPVBsYXVzaWJpbGl0XHUwMGU0dHNwclx1MDBmY2ZlcgorX1VJX1Vua25vd25fdHlwZT1PYmpla3QKKworX1VJX1Vua25vd25fZGF0YXR5cGU9V2VydAorCitfVUlfRGlzZWFzZU1vZGVsX2JhY2tncm91bmRNb3J0YWxpdHlSYXRlX2ZlYXR1cmU9U3RlcmJsaWNoa2VpdHNyYXRlCitfVUlfRGlzZWFzZU1vZGVsX3BvcHVsYXRpb25JZGVudGlmaWVyX2ZlYXR1cmU9QmV2XHUwMGY2bGtlcnVuZ3NiZXplaWNobmVyCitfVUlfRGlzZWFzZU1vZGVsX3RpbWVQZXJpb2RfZmVhdHVyZT1aZWl0cmF1bQorX1VJX0Rpc2Vhc2VNb2RlbF9wb3B1bGF0aW9uQ291bnRfZmVhdHVyZT1CZXZcdTAwZjZsa2VydW5nc2FuemFobAorX1VJX0Rpc2Vhc2VNb2RlbF90b3RhbEFyZWFfZmVhdHVyZT1HZXNhbXRlIEZsXHUwMGU0Y2hlCitfVUlfRGlzZWFzZU1vZGVsX3BvcHVsYXRpb25EZW5zaXR5X2ZlYXR1cmU9QmV2XHUwMGY2bGtlcnVuZ3NkaWNodGUKK19VSV9EaXNlYXNlTW9kZWxMYWJlbF9wb3B1bGF0aW9uTGFiZWxfZmVhdHVyZT1CZXZcdTAwZjZsa2VydW5nc2xhYmVsCitfVUlfRGlzZWFzZU1vZGVsTGFiZWxfZGlzZWFzZU1vZGVsU3RhdGVfZmVhdHVyZT1LcmFua3NoZWl0c21vZGVsbC1adXN0YW5kCitfVUlfRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZV9iaXJ0aHNfZmVhdHVyZT1HZWJ1cnRlbgorX1VJX0Rpc2Vhc2VNb2RlbExhYmVsVmFsdWVfZGVhdGhzX2ZlYXR1cmU9VG9kZXNmXHUwMGU0bGxlCitfVUlfRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZV9kaXNlYXNlRGVhdGhzX2ZlYXR1cmU9VG9kZXNmXHUwMGU0bGxlIGR1cmNoIEtyYW5raGVpdAorX1VJX0Rpc2Vhc2VNb2RlbExhYmVsVmFsdWVfcG9wdWxhdGlvbkNvdW50X2ZlYXR1cmU9QmV2XHUwMGY2bGtlcnVuZ3NhbnphaGwKK19VSV9EaXNlYXNlTW9kZWxTdGF0ZV9sYWJlbF9mZWF0dXJlPUxhYmVsCitfVUlfRGlzZWFzZU1vZGVsU3RhdGVfcG9wdWxhdGlvbkRlbnNpdHlfZmVhdHVyZT1CZXZcdTAwZjZsa2VydW5nc2RpY2h0ZQorX1VJX0luZmVjdG9yX2Rpc2Vhc2VNb2RlbF9mZWF0dXJlPUtyYW5raGVpdHNtb2RlbGwKK19VSV9JbmZlY3Rvcl9wb3B1bGF0aW9uSWRlbnRpZmVyX2ZlYXR1cmU9QmV2XHUwMGY2bGtlcnVuZ3NiZXplaWNobmVyCitfVUlfSW5mZWN0b3JfdGFyZ2V0VVJJX2ZlYXR1cmU9WmllbC1VUkkKK19VSV9TRUlSX2luY3ViYXRpb25SYXRlX2ZlYXR1cmU9SW5rdWJhdGlvbnNyYXRlCitfVUlfU0VJUkxhYmVsX2N1cnJlbnRTRUlSVmFsdWVfZmVhdHVyZT1EZXJ6ZWl0aWdlciBTRUlSLVdlcnQKK19VSV9TRUlSTGFiZWxfbmV4dFNFSVJWYWx1ZV9mZWF0dXJlPU5cdTAwZTRjaHN0ZXIgU0VJUi1XZXJ0CitfVUlfU0VJUkxhYmVsVmFsdWVfZV9mZWF0dXJlPUUKK19VSV9TSV9pbmZlY3Rpb3VzTW9ydGFsaXR5X2ZlYXR1cmU9SW5mZWt0aVx1MDBmNnNlIE1vcnRhbGl0XHUwMGU0dAorX1VJX1NJX3RyYW5zbWlzc2lvblJhdGVfZmVhdHVyZT1cdTAwZGNiZXJ0cmFndW5nc3JhdGUKK19VSV9TSV9ub25MaW5lYXJpdHlDb2VmZmljaWVudF9mZWF0dXJlPU5pY2h0bGluZWFyaXRcdTAwZTR0cyBLb2VmZml6aWVudAorX1VJX1NJX3JlY292ZXJ5UmF0ZV9mZWF0dXJlPUdlbmVzdW5nc3JhdGUKK19VSV9TSUluZmVjdG9yX2luZmVjdGlvdXNDb3VudF9mZWF0dXJlPUluZmVrdGlcdTAwZjZzZSBBbnphaGwKK19VSV9TSUxhYmVsX2N1cnJlbnRTSVZhbHVlX2ZlYXR1cmU9RGVyemVpdGlnZXIgU0ktV2VydAorX1VJX1NJTGFiZWxfbmV4dFNJVmFsdWVfZmVhdHVyZT1OXHUwMGU0Y2hzdGVyIFNJLVdlcnQKK19VSV9TSUxhYmVsVmFsdWVfaV9mZWF0dXJlPUkKK19VSV9TSVJfaW1tdW5pdHlMb3NzUmF0ZV9mZWF0dXJlPUVudGltbXVuaXNpZXJ1bmdzcmF0ZQorX1VJX1NJUkxhYmVsX2N1cnJlbnRTSVJWYWx1ZV9mZWF0dXJlPURlcnplaXRpZ2VyIFNJUi1XZXJ0CitfVUlfU0lSTGFiZWxfbmV4dFNJUlZhbHVlX2ZlYXR1cmU9Tlx1MDBlNGNoc3RlciBTSVItV2VydAorX1VJX1NJUkxhYmVsVmFsdWVfcl9mZWF0dXJlPVIKK19VSV9TdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsX2N1cnJlbnRTdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsVmFsdWVfZmVhdHVyZT1EZXJ6ZWl0aWdlciBTdGFuZGFyZC1LcmFua2hlaXRzbW9kZWxsLUxhYmVsLVdlcnQKK19VSV9TdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsX25leHRTdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsVmFsdWVfZmVhdHVyZT1OXHUwMGU0Y2hzdGVyIFN0YW5kYXJkLUtyYW5raGVpdHNtb2RlbGwtTGFiZWx3ZXJ0CitfVUlfU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbFZhbHVlX3NfZmVhdHVyZT1TCitfVUlfU3RhbmRhcmREaXNlYXNlTW9kZWxTdGF0ZV90cmFuc21pc3Npb25SYXRlU2NhbGVGYWN0b3JfZmVhdHVyZT1cdTAwZGNiZXJ0cmFndW5nc3JhdGUtU2thbGllcnVuZ3NmYWt0b3IKK19VSV9Vbmtub3duX2ZlYXR1cmU9TmljaHQgc3BlemlmaXppZXJ0CisKK19VSV9EaXNlYXNlTW9kZWxfZGlzZWFzZU5hbWVfZmVhdHVyZT1OYW1lIGRlciBLcmFua2hlaXQKK19VSV9JbmZlY3Rvcl9kaXNlYXNlTmFtZV9mZWF0dXJlPU5hbWUgZGVyIEtyYW5raGVpdAorX1VJX0luZmVjdG9yX3RhcmdldElTT0tleV9mZWF0dXJlPVppZWwtSVNPLVNjaGxcdTAwZmNzc2VsCitfVUlfU3RhbmRhcmREaXNlYXNlTW9kZWxfdG90YWxQb3B1bGF0aW9uQ291bnRfZmVhdHVyZT1HZXNhbXRlIEJldlx1MDBmNmxrZXJ1bmdzemFobAorX1VJX1N0YW5kYXJkRGlzZWFzZU1vZGVsX3RvdGFsUG9wdWxhdGlvbkNvdW50UmVjaXByb2NhbF9mZWF0dXJlPUdlc2FtdGUgQmV2XHUwMGY2bGtlcnVuZ3N6YWhsLUtlaHJ3ZXJ0CitfVUlfU3RhbmRhcmREaXNlYXNlTW9kZWxfdG90YWxBcmVhX2ZlYXR1cmU9R2VzYW10ZSBGbFx1MDBlNGNoZQorX1VJX1N0YW5kYXJkRGlzZWFzZU1vZGVsU3RhdGVfYXJlYVJhdGlvX2ZlYXR1cmU9RmxcdTAwZTRjaGVudmVyaFx1MDBlNGx0bmlzCitfVUlfU0lMYWJlbFZhbHVlX2lSX2ZlYXR1cmU9SVIKK19VSV9TSUxhYmVsVmFsdWVfaUZfZmVhdHVyZT1JRgorX1VJX1NJX2luZmVjdGlvdXNNb3J0YWxpdHlSYXRlX2ZlYXR1cmU9SW5mZWt0aVx1MDBmNnNlIE1vcnRhbGl0XHUwMGU0dHNyYXRlCitfVUlfU3RhbmRhcmREaXNlYXNlTW9kZWxfcm9hZE5ldHdvcmtJbmZlY3Rpb3VzUHJvcG9ydGlvbl9mZWF0dXJlPVN0cmFcdTAwZGZlbm5ldHotQW5ncmVuemVuZGVyLUluZmVrdGlcdTAwZjZzZXItQW50ZWlsCitfVUlfU3RhbmRhcmREaXNlYXNlTW9kZWxfcGh5c2ljYWxseUFkamFjZW50SW5mZWN0aW91c1Byb3BvcnRpb25fZmVhdHVyZT1SXHUwMGU0dW1saWNoIGJlbmFjaGJhcnRlciBBbnN0ZWNrZW5kZW5hbnRlaWwKK19VSV9TdGFuZGFyZERpc2Vhc2VNb2RlbF9waHlzaWNhbGx5QWRqZWNlbnRJbmZlY3Rpb3VzX2ZlYXR1cmU9Ulx1MDBlNHVtbGljaCBiZW5hY2hiYXJ0ZSBBbnN0ZWNrZW5kZQorX1VJX1N0YW5kYXJkRGlzZWFzZU1vZGVsX3BoeXNpY2FsbHlBZGphY2VudEluZmVjdGlvdXNfZmVhdHVyZT1SXHUwMGU0dW1saWNoIGJlbmFjaGJhcnRlIEFuc3RlY2tlbmRlCitfVUlfU0lfcm9hZE5ldHdvcmtJbmZlY3Rpb3VzUHJvcG9ydGlvbl9mZWF0dXJlPVN0cmFcdTAwZGZlbm5ldHotSW5mZWt0aVx1MDBmNnNlci1BbnRlaWwKK19VSV9TSV9waHlzaWNhbGx5QWRqYWNlbnRJbmZlY3Rpb3VzUHJvcG9ydGlvbl9mZWF0dXJlPVJcdTAwZTR1bWxpY2ggYmVuYWNoYmFydGVyIEFuc3RlY2tlbmRlbmFudGVpbAorX1VJX0FnZ3JlZ2F0aW5nU0lEaXNlYXNlTW9kZWxfdHlwZT1TSSBLcmFua2hlaXRzbW9kZWxsIHdpcmQgYXVmc3VtbWllcnQKK19VSV9BZ2dyZWdhdGluZ0Rpc2Vhc2VNb2RlbFN0YXRlX3R5cGU9S3JhbmtoZWl0c21vZGVsbCB3aXJkIGF1ZnN1bW1pZXJ0CitfVUlfQWdncmVnYXRpbmdEaXNlYXNlTW9kZWxTdGF0ZV9jaGlsZHJlbnNMYWJlbHNfZmVhdHVyZT1LaW5kZXJsYWJlbAorX1VJX0Rpc2Vhc2VNb2RlbExhYmVsX2N1cnJlbnREaXNlYXNlTW9kZWxMYWJlbFZhbHVlX2ZlYXR1cmU9RGVyemVpdGlnZXIgS3JhbmtoZWl0c21vZGVsbC1MYWJlbC1XZXJ0CitfVUlfRGlzZWFzZU1vZGVsTGFiZWxfbmV4dERpc2Vhc2VNb2RlbExhYmVsVmFsdWVfZmVhdHVyZT1OXHUwMGU0Y2hzdGVyIEtyYW5raGVpdHNtb2RlbGwtTGFiZWx3ZXJ0CitfVUlfRVN0cmluZ1RvRUxpc3RNYXBFbnRyeV90eXBlPUVTdHJpbmcgVG8gRUxpc3QgTWFwIEVudHJ5CitfVUlfRVN0cmluZ1RvRUxpc3RNYXBFbnRyeV9rZXlfZmVhdHVyZT1TY2hsXHUwMGZjc3NlbAorX1VJX0VTdHJpbmdUb0VMaXN0TWFwRW50cnlfdmFsdWVfZmVhdHVyZT1XZXJ0CitfVUlfQWdncmVnYXRpbmdTRUlSRGlzZWFzZU1vZGVsX3R5cGU9U0VJUiBLcmFua2hlaXRzbW9kZWxsIHdpcmQgYXVmc3VtbWllcnQKK19VSV9BZ2dyZWdhdGluZ1NJUkRpc2Vhc2VNb2RlbF90eXBlPVNJUiBLcmFua2hlaXRzbW9kZWxsIHdpcmQgYXVmc3VtbWllcnQKK19VSV9JbmZlY3Rvcl9sYWJlbHNUb0luZmVjdF9mZWF0dXJlPVp1IGluZml6aWVyZW5kZSBMYWJlbHMKK19VSV9TdG9jaGFzdGljRGlzZWFzZU1vZGVsX3R5cGU9U3RvY2hhc3Rpc2NoZXMgS3JhbmtoZWl0c21vZGVsbAorX1VJX1N0YW5kYXJkU3RvY2hhc3RpY0Rpc2Vhc2VNb2RlbF90eXBlPVN0b2NoYXN0aXNjaGVzIEtyYW5raGVpdHNtb2RlbGwKK19VSV9TdG9jaGFzdGljRGlzZWFzZU1vZGVsX3NlZWRfZmVhdHVyZT1BbmZhbmdzd2VydAorX1VJX1N0b2NoYXN0aWNEaXNlYXNlTW9kZWxfcmFuZG9tR2VuZXJhdG9yX2ZlYXR1cmU9WnVmYWxsc2dlbmVyYXRvcgorX1VJX1N0YW5kYXJkU3RvY2hhc3RpY0Rpc2Vhc2VNb2RlbF9nYWluX2ZlYXR1cmU9WnVuYWhtZQorX1VJX0luZmVjdG9yX3BvcHVsYXRpb25JZGVudGlmaWVyX2ZlYXR1cmU9QmV2XHUwMGY2bGtlcnVuZ3NiZXplaWNobmVyCitfVUlfU3RhbmRhcmREaXNlYXNlTW9kZWxfcmVmZXJlbmNlUG9wdWxhdGlvbkRlbnNpdHlfZmVhdHVyZT1SZWZlcmVuY2UgQmV2XHUwMGY2bGtlcnVuZ3NkaWNodGUKK19VSV9TSUxhYmVsVmFsdWVfaW5jaWRlbmNlX2ZlYXR1cmU9SW56aWRlbnoKK19VSV9TdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsVmFsdWVfaW5jaWRlbmNlX2ZlYXR1cmU9SW56aWRlbnoKK19VSV9EaXNlYXNlTW9kZWxMYWJlbFZhbHVlX2luY2lkZW5jZV9mZWF0dXJlPUluemlkZW56CitfVUlfTmV3RGV0ZXJtaW5pc3RpY1NJRGlzZWFzZU1vZGVsX3R5cGU9TmV1ZXMgRGV0ZXJtaW5pc3Rpc2NoZXMgU0ktS3JhbmtlaXRzbW9kZWxsCitfVUlfTmV3RGV0ZXJtaW5pc3RpY1NJUkRpc2Vhc2VNb2RlbF90eXBlPU5ldWVzIERldGVybWluaXN0aXNjaGVzIFNJUi1LcmFua2VpdHNtb2RlbGwKK19VSV9OZXdEZXRlcm1pbmlzdGljU0VJUkRpc2Vhc2VNb2RlbF90eXBlPU5ldWVzIERldGVybWluaXN0aXNjaGVzIFNFSVItS3JhbmtlaXRzbW9kZWxsCitfVUlfU0lfZnJlcXVlbmN5RGVwZW5kZW50X2ZlYXR1cmU9RnJlcXVlbnphYmhcdTAwZTRuZ2lnCitfVUlfU3RhbmRhcmREaXNlYXNlTW9kZWxfc3RlcFNpemVfZmVhdHVyZT1TY2hyaXR0Z3JcdTAwZjZcdTAwZGZlCitfVUlfRGlzZWFzZU1vZGVsX3N0ZXBTaXplX2ZlYXR1cmU9U2Nocml0dGdyXHUwMGY2XHUwMGRmZQorX1VJX0Rpc2Vhc2VNb2RlbF9jdXJyZW50WF9mZWF0dXJlPURlcnplaXRpZ2VzIFgKK19VSV9EaXNlYXNlTW9kZWxfcmVsYXRpdmVUb2xlcmFuY2VfZmVhdHVyZT1SZWxhdGl2ZSBUb2xlcmFuegorX1VJX0Rpc2Vhc2VNb2RlbExhYmVsX2RlbHRhVmFsdWVfZmVhdHVyZT1EZWx0YS1XZXJ0CitfVUlfRGlzZWFzZU1vZGVsTGFiZWxfY3VycmVudFlfZmVhdHVyZT1EZXJ6ZWl0aWdlcyBZCitfVUlfRGlzZWFzZU1vZGVsX2Zpbml0ZURpZmZlcmVuY2VfZmVhdHVyZT1GaW5pdGUtRGlmZmVyZW56ZW4KK19VSV9EaXNlYXNlTW9kZWxfZnJlcXVlbmN5RGVwZW5kZW50X2ZlYXR1cmU9RnJlcXVlbnphYmhcdTAwZTRuZ2lnCitfVUlfU0lSSW5vY3VsYXRvcl90eXBlPVNJUiBJbW11bmlzaWVyZXIKK19VSV9TdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsX2RlbHRhU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbFZhbHVlX2ZlYXR1cmU9RGVsdGEtU3RhbmRhcmQtS3JhbmtoZWl0c21vZGVsbC1MYWJlbC1XZXJ0CitfVUlfU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbF9jdXJyZW50WVN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZV9mZWF0dXJlPURlcnplaXRpZ2VyIFktU3RhbmRhcmQtS3JhbmtoZWl0c21vZGVsbC1MYWJlbC1XZXJ0CitfVUlfU0lSSW5vY3VsYXRvcl9pbm9jdWxhdGVkUGVyY2VudGFnZV9mZWF0dXJlPUltbXVuaXNpZXJ0ZXIgQW50ZWlsCitfVUlfRGlzZWFzZU1vZGVsX2JhY2tncm91bmRCaXJ0aFJhdGVfZmVhdHVyZT1HZWJ1cnRlbnJhdGUKK19VSV9EaXNlYXNlTW9kZWxMYWJlbF9jdXJyZW50RGlzZWFzZU1vZGVsVGVtcExhYmVsVmFsdWVfZmVhdHVyZT1EZXJ6ZWl0aWdlciBLcmFua2hlaXRzbW9kZWxsLVRlbXAtTGFiZWwtV2VydAorCitfVUlfRGlzZWFzZU1vZGVsaW5nUFBhZ2U9S3JhbmtoZWl0c21vZGVsaWVydW5nCitfVUlfRGlzZWFzZU1vZGVsTGFiZWxfeVNjYWxlX2ZlYXR1cmU9WS1Ta2FsaWVydW5nCitfVUlfU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbF9jdXJyZW50TGFiZWxWYWx1ZV9mZWF0dXJlPURlcnplaXRpZ2VyIExhYmVsd2VydAorX1VJX1N0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWxfbmV4dExhYmVsVmFsdWVfZmVhdHVyZT1OXHUwMGU0Y2hzdGVyIExhYmVsd2VydAorX1VJX1N0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWxfZGVsdGFMYWJlbFZhbHVlX2ZlYXR1cmU9RGVsdGEtTGFiZWwtV2VydAorX1VJX1N0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWxfcHJvYmVMYWJlbFZhbHVlX2ZlYXR1cmU9UHJvYmUtTGFiZWx3ZXJ0CitfVUlfSW50ZWdyYXRpb25MYWJlbF90eXBlPUludGVncmF0aW9uc2xhYmVsCitfVUlfU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbF9vcmlnaW5hbExhYmVsVmFsdWVfZmVhdHVyZT1VcnNwclx1MDBmY25nbGljaGVyIExhYmVsd2VydAorX1VJX1N0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWxfdGVtcExhYmVsVmFsdWVfZmVhdHVyZT1UZW1wLUxhYmVsLVdlcnQKK19VSV9TSUxhYmVsX2N1cnJlbnRMYWJlbFZhbHVlX2ZlYXR1cmU9RGVyemVpdGlnZXIgTGFiZWx3ZXJ0CitfVUlfU0lMYWJlbF9uZXh0TGFiZWxWYWx1ZV9mZWF0dXJlPU5cdTAwZTRjaHN0ZXIgTGFiZWx3ZXJ0CitfVUlfU0lMYWJlbF9kZWx0YUxhYmVsVmFsdWVfZmVhdHVyZT1EZWx0YS1MYWJlbC1XZXJ0CitfVUlfU0lMYWJlbF9wcm9iZUxhYmVsVmFsdWVfZmVhdHVyZT1Qcm9iZS1MYWJlbHdlcnQKK19VSV9TSUxhYmVsX3RlbXBMYWJlbFZhbHVlX2ZlYXR1cmU9VGVtcC1MYWJlbC1XZXJ0CitfVUlfU0lMYWJlbF9vcmlnaW5hbExhYmVsVmFsdWVfZmVhdHVyZT1VcnNwclx1MDBmY25nbGljaGVyIExhYmVsd2VydAorX1VJX1NJTGFiZWxfZXJyb3JTY2FsZV9mZWF0dXJlPUdyXHUwMGY2XHUwMGRmZW5vcmRudW5nIGRlcyBGZWhsZXJzCitfVUlfU0VJUkxhYmVsX2N1cnJlbnRMYWJlbFZhbHVlX2ZlYXR1cmU9RGVyemVpdGlnZXIgTGFiZWx3ZXJ0CitfVUlfU0VJUkxhYmVsX25leHRMYWJlbFZhbHVlX2ZlYXR1cmU9Tlx1MDBlNGNoc3RlciBMYWJlbHdlcnQKK19VSV9TRUlSTGFiZWxfZGVsdGFMYWJlbFZhbHVlX2ZlYXR1cmU9RGVsdGEtTGFiZWwtV2VydAorX1VJX1NFSVJMYWJlbF9wcm9iZUxhYmVsVmFsdWVfZmVhdHVyZT1Qcm9iZS1MYWJlbHdlcnQKK19VSV9TRUlSTGFiZWxfdGVtcExhYmVsVmFsdWVfZmVhdHVyZT1UZW1wLUxhYmVsLVdlcnQKK19VSV9TRUlSTGFiZWxfb3JpZ2luYWxMYWJlbFZhbHVlX2ZlYXR1cmU9VXJzcHJcdTAwZmNuZ2xpY2hlciBMYWJlbHdlcnQKK19VSV9TRUlSTGFiZWxfZXJyb3JTY2FsZV9mZWF0dXJlPUdyXHUwMGY2XHUwMGRmZW5vcmRudW5nIGRlcyBGZWhsZXJzCitfVUlfU0lSTGFiZWxfY3VycmVudExhYmVsVmFsdWVfZmVhdHVyZT1EZXJ6ZWl0aWdlciBMYWJlbHdlcnQKK19VSV9TSVJMYWJlbF9uZXh0TGFiZWxWYWx1ZV9mZWF0dXJlPU5cdTAwZTRjaHN0ZXIgTGFiZWx3ZXJ0CitfVUlfU0lSTGFiZWxfZGVsdGFMYWJlbFZhbHVlX2ZlYXR1cmU9RGVsdGEtTGFiZWwtV2VydAorX1VJX1NJUkxhYmVsX3Byb2JlTGFiZWxWYWx1ZV9mZWF0dXJlPVByb2JlLUxhYmVsd2VydAorX1VJX1NJUkxhYmVsX3RlbXBMYWJlbFZhbHVlX2ZlYXR1cmU9VGVtcC1MYWJlbC1XZXJ0CitfVUlfU0lSTGFiZWxfb3JpZ2luYWxMYWJlbFZhbHVlX2ZlYXR1cmU9VXJzcHJcdTAwZmNuZ2xpY2hlciBMYWJlbHdlcnQKK19VSV9TSVJMYWJlbF9lcnJvclNjYWxlX2ZlYXR1cmU9R3JcdTAwZjZcdTAwZGZlbm9yZG51bmcgZGVzIEZlaGxlcnMKK19VSV9TRUlSTGFiZWxfZGVsdGFWYWx1ZV9mZWF0dXJlPURlbHRhLVdlcnQKK19VSV9TRUlSTGFiZWxfcHJvYmVWYWx1ZV9mZWF0dXJlPVByb2JlLVdlcnQKK19VSV9TRUlSTGFiZWxfdGVtcFZhbHVlX2ZlYXR1cmU9VGVtcC1XZXJ0CitfVUlfU0VJUkxhYmVsX29yaWdpbmFsVmFsdWVfZmVhdHVyZT1VcnNwclx1MDBmY25nbGljaGVyIFdlcnQKK19VSV9TSUxhYmVsX2RlbHRhVmFsdWVfZmVhdHVyZT1EZWx0YS1XZXJ0CitfVUlfU0lMYWJlbF9wcm9iZVZhbHVlX2ZlYXR1cmU9UHJvYmUtV2VydAorX1VJX1NJTGFiZWxfdGVtcFZhbHVlX2ZlYXR1cmU9VGVtcC1XZXJ0CitfVUlfU0lMYWJlbF9vcmlnaW5hbFZhbHVlX2ZlYXR1cmU9VXJzcHJcdTAwZmNuZ2xpY2hlciBXZXJ0CitfVUlfU0lSTGFiZWxfZGVsdGFWYWx1ZV9mZWF0dXJlPURlbHRhLVdlcnQKK19VSV9TSVJMYWJlbF9wcm9iZVZhbHVlX2ZlYXR1cmU9UHJvYmUtV2VydAorX1VJX1NJUkxhYmVsX3RlbXBWYWx1ZV9mZWF0dXJlPVRlbXAtV2VydAorX1VJX1NJUkxhYmVsX29yaWdpbmFsVmFsdWVfZmVhdHVyZT1VcnNwclx1MDBmY25nbGljaGVyIFdlcnQKK19VSV9JbnRlZ3JhdGlvbkRlY29yYXRvcl90eXBlPUludGVncmF0aW9uc2Rla29yYXRvcgorX1VJX0ludGVncmF0aW9uTGFiZWxWYWx1ZV90eXBlPUludGVncmF0aW9uc2xhYmVsd2VydAorX1VJX1BvaXNzb25TSURpc2Vhc2VNb2RlbF90eXBlPVBvaXNzb24gU0kgS3JhbmtoZWl0c21vZGVsbAorX1VJX1N0b2NoYXN0aWNQb2lzc29uU0lEaXNlYXNlTW9kZWxfdHlwZT1TdG9jaGFzdGlzY2hlcyBQb2lzc29uLVNJLUtyYW5raGVpdHNtb2RlbGwKK19VSV9TdG9jaGFzdGljUG9pc3NvblNJUkRpc2Vhc2VNb2RlbF90eXBlPVN0b2NoYXN0aXNjaGVzIFBvaXNzb24tU0lSLUtyYW5raGVpdHNtb2RlbGwKK19VSV9TdG9jaGFzdGljUG9pc3NvblNFSVJEaXNlYXNlTW9kZWxfdHlwZT1TdG9jaGFzdGlzY2hlcyBQb2lzc29uLVNFSVItS3JhbmtoZWl0c21vZGVsbAorX1VJX1N0b2NoYXN0aWNQb2lzc29uRGlzZWFzZU1vZGVsX3R5cGU9U3RvY2hhc3Rpc2NoZXMgUG9pc3Nvbi1LcmFua2hlaXRzbW9kZWxsCitfVUlfUG9wdWxhdGlvbk1vZGVsX3R5cGU9QmV2XHUwMGY2bGtlcnVuZ3Ntb2RlbGwKK19VSV9TdGFuZGFyZFBvcHVsYXRpb25Nb2RlbF90eXBlPUJldlx1MDBmNmxrZXJ1bmdzbW9kZWxsCitfVUlfUG9wdWxhdGlvbk1vZGVsTGFiZWxfdHlwZT1CZXZcdTAwZjZsa2VydW5nc21vZGVsbC1MYWJlbAorX1VJX1N0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWxfdHlwZT1CZXZcdTAwZjZsa2VydW5nc21vZGVsbC1MYWJlbAorX1VJX1BvcHVsYXRpb25Nb2RlbExhYmVsVmFsdWVfdHlwZT1CZXZcdTAwZjZsa2VydW5nc21vZGVsbC1MYWJlbHdlcnQKK19VSV9TdGFuZGFyZFBvcHVsYXRpb25Nb2RlbExhYmVsVmFsdWVfdHlwZT1CZXZcdTAwZjZsa2VydW5nc21vZGVsbC1MYWJlbHdlcnQKK19VSV9TdG9jaGFzdGljU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxfdHlwZT1TdG9jaGFzdGlzY2hlcyBTdGFuZGFyZC1CZXZcdTAwZjZsa2VydW5nc21vZGVsbAorX1VJX0RlbW9ncmFwaGljUG9wdWxhdGlvbk1vZGVsX3R5cGU9RGVtb2dyYXBoaXNjaGVzIEJldlx1MDBmNmxrZXJ1bmdzbW9kZWxsCitfVUlfUG9wdWxhdGlvbkdyb3VwX3R5cGU9QmV2XHUwMGY2bGtlcnVuZ3NncnVwcGUKK19VSV9EaXNlYXNlTW9kZWxMYWJlbF9wb3B1bGF0aW9uTW9kZWxMYWJlbF9mZWF0dXJlPUJldlx1MDBmNmxrZXJ1bmdzbW9kZWxsLUxhYmVsCitfVUlfUG9wdWxhdGlvbk1vZGVsX3BvcHVsYXRpb25JZGVudGlmaWVyX2ZlYXR1cmU9QmV2XHUwMGY2bGtlcnVuZ3NiZXplaWNobmVyCitfVUlfUG9wdWxhdGlvbk1vZGVsX25hbWVfZmVhdHVyZT1OYW1lCitfVUlfU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxfYmlydGhSYXRlX2ZlYXR1cmU9R2VidXJ0ZW5yYXRlCitfVUlfU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxfZGVhdGhSYXRlX2ZlYXR1cmU9U3RlcmJsaWNoa2VpdAorX1VJX1N0YW5kYXJkUG9wdWxhdGlvbk1vZGVsX3RpbWVQZXJpb2RfZmVhdHVyZT1aZWl0cmF1bQorX1VJX1BvcHVsYXRpb25Nb2RlbExhYmVsX3BvcHVsYXRpb25MYWJlbF9mZWF0dXJlPUJldlx1MDBmNmxrZXJ1bmdzbGFiZWwKK19VSV9Qb3B1bGF0aW9uTW9kZWxMYWJlbF9wb3B1bGF0aW9uSWRlbnRpZmllcl9mZWF0dXJlPUJldlx1MDBmNmxrZXJ1bmdzYmV6ZWljaG5lcgorX1VJX1N0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWxfZGVsdGFWYWx1ZV9mZWF0dXJlPURlbHRhLVdlcnQKK19VSV9TdGFuZGFyZFBvcHVsYXRpb25Nb2RlbExhYmVsX3Byb2JlVmFsdWVfZmVhdHVyZT1Qcm9iZS1XZXJ0CitfVUlfU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxMYWJlbF90ZW1wVmFsdWVfZmVhdHVyZT1UZW1wLVdlcnQKK19VSV9TdGFuZGFyZFBvcHVsYXRpb25Nb2RlbExhYmVsX29yaWdpbmFsVmFsdWVfZmVhdHVyZT1VcnNwclx1MDBmY25nbGljaGVyIFdlcnQKK19VSV9TdGFuZGFyZFBvcHVsYXRpb25Nb2RlbExhYmVsX2Vycm9yU2NhbGVfZmVhdHVyZT1Hclx1MDBmNlx1MDBkZmVub3JkbnVuZyBkZXMgRmVobGVycworX1VJX1N0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWxWYWx1ZV9jb3VudF9mZWF0dXJlPUFuemFobAorX1VJX1N0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWxWYWx1ZV9pbmNpZGVuY2VfZmVhdHVyZT1JbnppZGVuegorX1VJX1N0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWxWYWx1ZV9iaXJ0aHNfZmVhdHVyZT1HZWJ1cnRlbgorX1VJX1N0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWxWYWx1ZV9kZWF0aHNfZmVhdHVyZT1Ub2Rlc2ZcdTAwZTRsbGUKK19VSV9TdGFuZGFyZFBvcHVsYXRpb25Nb2RlbExhYmVsVmFsdWVfZGVuc2l0eV9mZWF0dXJlPURpY2h0ZQorX1VJX1N0b2NoYXN0aWNTdGFuZGFyZFBvcHVsYXRpb25Nb2RlbF9nYWluX2ZlYXR1cmU9WnVuYWhtZQorX1VJX0RlbW9ncmFwaGljUG9wdWxhdGlvbk1vZGVsX3BvcHVsYXRpb25Hcm91cHNfZmVhdHVyZT1CZXZcdTAwZjZsa2VydW5nc2dydXBwZW4KK19VSV9Qb3B1bGF0aW9uR3JvdXBfaWRlbnRpZmllcl9mZWF0dXJlPUJlemVpY2huZXIKK19VSV9Qb3B1bGF0aW9uR3JvdXBfZnJhY3Rpb25fZmVhdHVyZT1BbnRlaWwKK19VSV9TSUluZmVjdG9yX2luZmVjdGlvbnNfZmVhdHVyZT1JbmZla3Rpb25lbgorX1VJX1NJSW5mZWN0b3JfcGVyY2VudGFnZV9mZWF0dXJlPVByb3plbnRzYXR6CitfVUlfU0lSSW5vY3VsYXRvcl9pbm9jdWxhdGlvbnNfZmVhdHVyZT1JbW11bmlzaWVydW5nZW4KK19VSV9JbmZlY3Rvcl9wZXJjZW50YWdlX2ZlYXR1cmU9UHJvemVudHNhdHoKK19VSV9JbmZlY3Rvcl9pbmZlY3RQZXJjZW50YWdlX2ZlYXR1cmU9QW50ZWlsIGluZml6aWVyZW4KK19VSV9TSVJJbm9jdWxhdG9yX2lub2N1bGF0ZVBlcmNlbnRhZ2VfZmVhdHVyZT1BbnRlaWwgaW1tdW5pc2llcmVuCitfVUlfSW5mZWN0b3JJbm9jdWxhdG9yQ29sbGVjdGlvbl90eXBlPUluZml6aWVyZXIgSW1tdW5pc2llcmVyIFNhbW1sdW5nCitfVUlfSW5mZWN0b3JJbm9jdWxhdG9yQ29sbGVjdGlvbl9saXN0X2ZlYXR1cmU9TGlzdGUKK19VSV9JbmZlY3Rvcklub2N1bGF0b3JDb2xsZWN0aW9uX2ltcG9ydEZvbGRlcl9mZWF0dXJlPUltcG9ydCBWZXJ6ZWljaG5pcworX1VJX1NJX2NoYXJhY3RlcmlzdGljTWl4aW5nRGlzdGFuY2VfZmVhdHVyZT1DaGFyYWt0ZXJpc3Rpc2NoZSBNaXNjaGVudGZlcm51bmcKK19VSV9TdGFuZGFyZERpc2Vhc2VNb2RlbF9jaGFyYWN0ZXJpc3RpY01peGluZ0Rpc3RhbmNlX2ZlYXR1cmU9Q2hhcmFrdGVyaXN0aXNjaGUgTWlzY2hlbnRmZXJudW5nCitfVUlfU0lMYWJlbFZhbHVlX2Rpc2Vhc2VEZWF0aHNfZmVhdHVyZT1Ub2Rlc2ZcdTAwZTRsbGUgZHVyY2ggS3JhbmtoZWl0CitfVUlfU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbFZhbHVlX2Rpc2Vhc2VEZWF0aHNfZmVhdHVyZT1Ub2Rlc2ZcdTAwZTRsbGUgZHVyY2ggS3JhbmtoZWl0CitfVUlfSW5mZWN0b3JfdGFyZ2V0RmVhdHVyZV9mZWF0dXJlPVppZWwtRmVhdHVyZQorX1VJX0xhYmVsVmFsdWVUZXN0X3R5cGU9TGFiZWwgVmFsdWUgVGVzdAorX1VJX0xhYmVsVmFsdWVUZXN0X21vZGVsTmFtZV9mZWF0dXJlPU1vZGVsIE5hbWUKK19VSV9MYWJlbFZhbHVlVGVzdF90YXJnZXRVUklfZmVhdHVyZT1aaWVsLVVSSQorX1VJX0xhYmVsVmFsdWVUZXN0X3N0YXRlX2ZlYXR1cmU9U3RhdGUKK19VSV9MYWJlbFZhbHVlVGVzdF90aHJlc2hvbGRfZmVhdHVyZT1UaHJlc2hvbGQKK19VSV9MYWJlbFZhbHVlVGVzdF9wcmVkaWNhdGVfZmVhdHVyZT1FaWdlbnNjaGFmdAorX1VJX0xhYmVsVmFsdWVUZXN0X3BvcHVsYXRpb25JZGVudGlmaWVyX2ZlYXR1cmU9QmV2XHUwMGY2bGtlcnVuZ3NiZXplaWNobmVyCmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy9wbHVnaW5fa3IucHJvcGVydGllcyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL3BsdWdpbl9rci5wcm9wZXJ0aWVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBlYThiNmIKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy9wbHVnaW5fa3IucHJvcGVydGllcwpAQCAtMCwwICsxLDMwNyBAQAorIy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjICogQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorIyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyMgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyMgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorIyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisjICoKKyMgKiBDb250cmlidXRvcnM6CisjICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorIyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisjIFRvIGNvZGUgZGV2ZWxvcGVyOgorIyAgIERvIE5PVCBjaGFuZ2UgdGhlIHByb3BlcnRpZXMgYmV0d2VlbiB0aGlzIGxpbmUgYW5kIHRoZQorIyAgICIlJSUgRU5EIE9GIFRSQU5TTEFURUQgUFJPUEVSVElFUyAlJSUiIGxpbmUuCisjICAgTWFrZSBhIG5ldyBwcm9wZXJ0eSBuYW1lLCBhcHBlbmQgdG8gdGhlIGVuZCBvZiB0aGUgZmlsZSBhbmQgY2hhbmdlCisjICAgdGhlIGNvZGUgdG8gdXNlIHRoZSBuZXcgcHJvcGVydHkuCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyMgJSUlIEVORCBPRiBUUkFOU0xBVEVEIFBST1BFUlRJRVMgJSUlCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK3BsdWdpbk5hbWU9XHVjOWM4XHViY2QxIFx1YmFhOFx1YjM3OCBcdWJhYThcdWIzNzgKK3Byb3ZpZGVyTmFtZT1FY2xpcHNlLm9yZworCisjIEV4dGVuc2lvbiBwb2ludHMKK0VQX0Rpc2Vhc2U9U1RFTSBcdWM5YzhcdWJjZDEgXHVjODE1XHVjNzU4CitFUF9EaXNlYXNlX01vZGVsPVNURU0gXHVjOWM4XHViY2QxIFx1YmFhOFx1YjM3OAorCisjIER1YmxpbiBDb3JlCitkY19jcmVhdG9yX2RhZm9yZD1kYWZvcmQKK2RjX2NyZWF0b3Jfa2F1Zm1hbj1cdWNlNzRcdWQ1MDRcdWI5ZTgKK2RjX2NyZWF0b3JfZWRsdW5kPVx1YzVkMFx1YjRlNFx1YjdmMFx1YjRkYworZGNfY3JlYXRvcl9kYXZpcz1cdWIzNzBcdWM3NzRcdWJlNDRcdWMyYTQKK2RjX2NyZWF0b3Jfc3RlbXRlYW09U1RFTSBcdWQzMDAKK2RjX1NPVVJDRT1odHRwOi8vd2lraS5lY2xpcHNlLm9yZy9JbnRyb2R1Y3Rpb25fdG9fQ29tcGFydG1lbnRfTW9kZWxzIChcdWFkZjhcdWI5YWNcdWFjZTAgXHVjYzM4XHVhY2UwIFx1YmIzOFx1ZDVjY1x1YzVkMFx1YzExYykKK2RjX2lkZW50aWVyPVNURU0gXHVjOWM4XHViY2QxIFx1YmFhOFx1YjM3OAorZGNfcHVibGlzaGVyPVx1Yzc3NFx1ZDA3NFx1YjliZFx1YzJhNCBcdWM3YWNcdWIyZTgKK2RjX2xpY2Vuc2U9XHVjNzc0XHVkMDc0XHViOWJkXHVjMmE0IFx1YWNmNVx1YzZhOSBcdWMwYWNcdWM2YTkgXHVkNWM4XHVhYzAwXHVjMTFjIChFUEwpCitkY19kZXNjX0RfU0k9XHVhY2IwXHVjODE1XHVjODAxIFNJIFx1YWQ2Y1x1ZDY4ZCBcdWJhYThcdWIzNzgKK2RjX2Rlc2NfRF9TSVI9XHVhY2IwXHVjODE1XHVjODAxIFNJUiBcdWFkNmNcdWQ2OGQgXHViYWE4XHViMzc4CitkY19kZXNjX0RfU0VJUj1cdWFjYjBcdWM4MTVcdWM4MDEgU0VJUiBcdWFkNmNcdWQ2OGQgXHViYWE4XHViMzc4CitkY19kZXNjX1NfU0k9XHVkNjU1XHViOTYwXHVjODAxIFNJIFx1YWQ2Y1x1ZDY4ZCBcdWJhYThcdWIzNzgKK2RjX2Rlc2NfU19TSVI9XHVkNjU1XHViOTYwXHVjODAxIFNJUiBcdWFkNmNcdWQ2OGQgXHViYWE4XHViMzc4CitkY19kZXNjX1NfU0VJUj1cdWQ2NTVcdWI5NjBcdWM4MDEgU0VJUiBcdWFkNmNcdWQ2OGQgXHViYWE4XHViMzc4CitkY19kZXNjX1BTX1NJPVBvaXNzb24gXHVkNjU1XHViOTYwXHVjODAxIFNJIFx1YWQ2Y1x1ZDY4ZCBcdWJhYThcdWIzNzgKK2RjX2Rlc2NfUFNfU0lSPVBvaXNzb24gXHVkNjU1XHViOTYwXHVjNzU4IFNJUiBcdWFkNmNcdWQ2OGQgXHViYWE4XHViMzc4CitkY19kZXNjX1BTX1NFSVI9UG9pc3NvbiBcdWQ2NTVcdWI5NjBcdWM3NTggU0VJUiBcdWFkNmNcdWQ2OGQgXHViYWE4XHViMzc4CitkY190aXRsZV9EX1NJPVx1YWNiMFx1YzgxNVx1YzgwMSBTSQorZGNfdGl0bGVfRF9TSVI9XHVhY2IwXHVjODE1XHVjODAxIFNJUgorZGNfdGl0bGVfRF9TRUlSPVx1YWNiMFx1YzgxNVx1YzgwMSBTRUlSCitkY190aXRsZV9TX1NJPVx1ZDY1NVx1Yjk2MFx1YzgwMSBTSQorZGNfdGl0bGVfU19TSVI9XHVkNjU1XHViOTYwXHVjODAxIFNJUgorZGNfdGl0bGVfU19TRUlSPVx1ZDY1NVx1Yjk2MFx1YzgwMSBTRUlSCitkY190aXRsZV9QU19TST1Qb2lzc29uIFx1ZDY1NVx1Yjk2MFx1YzgwMSBTSQorZGNfdGl0bGVfUFNfU0lSPVBvaXNzb24gXHVkNjU1XHViOTYwXHVjNzU4IFNJUgorZGNfdGl0bGVfUFNfU0VJUj1Qb2lzc29uIFx1ZDY1NVx1Yjk2MFx1YzgwMSBTRUlSCisKKworX1VJX0NyZWF0ZUNoaWxkX3RleHQ9ezB9CitfVUlfQ3JlYXRlQ2hpbGRfdGV4dDI9ezF9IHswfQorX1VJX0NyZWF0ZUNoaWxkX3RleHQzPXsxfQorX1VJX0NyZWF0ZUNoaWxkX3Rvb2x0aXA9ezF9IFx1YWUzMFx1YjJhNSBcdWQ1NThcdWM1ZDAgXHVjMGM4IHswfSBcdWI5Y2NcdWI0ZTRcdWFlMzAKK19VSV9DcmVhdGVDaGlsZF9kZXNjcmlwdGlvbj1cdWMxMjBcdWQwZGRcdWQ1NWMgezJ9XHVjNzU4IHsxfSBcdWFlMzBcdWIyYTVcdWM1ZDAgXHViMzAwXHVkNTVjIFx1ZDYxNVx1YzJkZCB7MH1cdWM3NTggXHVjMGM4XHViODVjXHVjNmI0IENoaWxkXHViOTdjIFx1YjljY1x1YjRlZFx1YjJjOFx1YjJlNC4KK19VSV9DcmVhdGVTaWJsaW5nX2Rlc2NyaXB0aW9uPVx1YmQ4MFx1YmFhOFx1Yzc1OCBcdWMxMjBcdWQwZGRcdWI0MWMgezJ9XHVjNWQwXHVjMTFjIHsxfSBcdWFlMzBcdWIyYTVcdWM1ZDAgXHViMzAwXHVkNTVjIFx1ZDYxNVx1YzJkZCB7MH1cdWM3NTggXHVjMGM4XHViODVjXHVjNmI0IFx1ZDYxNVx1YzgxY1x1Yjk3YyBcdWI5Y2NcdWI0ZWRcdWIyYzhcdWIyZTQuCisKK19VSV9Qcm9wZXJ0eURlc2NyaXB0b3JfZGVzY3JpcHRpb249ezF9IFx1YzkxMSB7MH0KKworX1VJX0RldGVybWluaXN0aWNTRUlSRGlzZWFzZU1vZGVsX3R5cGU9XHVhY2IwXHVjODE1XHVjODAxIFNFSVIgXHVjOWM4XHViY2QxIFx1YmFhOFx1YjM3OAorX1VJX0RldGVybWluaXN0aWNTSURpc2Vhc2VNb2RlbF90eXBlPVx1YWNiMFx1YzgxNVx1YzgwMSBTSSBcdWM5YzhcdWJjZDEgXHViYWE4XHViMzc4CitfVUlfRGV0ZXJtaW5pc3RpY1NJUkRpc2Vhc2VNb2RlbF90eXBlPVx1YWNiMFx1YzgxNVx1YzgwMSBTSVIgXHVjOWM4XHViY2QxIFx1YmFhOFx1YjM3OAorX1VJX0Rpc2Vhc2VNb2RlbF90eXBlPVx1YzljOFx1YmNkMSBcdWJhYThcdWIzNzgKK19VSV9EaXNlYXNlTW9kZWxMYWJlbF90eXBlPVx1YzljOFx1YmNkMSBcdWJhYThcdWIzNzggXHViNzdjXHViY2E4CitfVUlfRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZV90eXBlPVx1YzljOFx1YmNkMSBcdWJhYThcdWIzNzggXHViNzdjXHViY2E4IFx1YWMxMgorX1VJX0Rpc2Vhc2VNb2RlbFN0YXRlX3R5cGU9XHVjOWM4XHViY2QxIFx1YmFhOFx1YjM3OCBcdWMwYzFcdWQwZGNcdWI5N2MgXHVkMWI1XHVkNTY5CitfVUlfSW5mZWN0b3JfdHlwZT1cdWM2MjRcdWM1ZmNcdWM2ZDAKK19VSV9TRUlSX3R5cGU9U0VJUgorX1VJX1NFSVJMYWJlbF90eXBlPVNFSVIgXHViNzdjXHViY2E4CitfVUlfU0VJUkxhYmVsVmFsdWVfdHlwZT1TRUlSIFx1Yjc3Y1x1YmNhOCBcdWFjMTIKK19VSV9TSV90eXBlPVNJCitfVUlfU0lEaXNlYXNlTW9kZWxTdGF0ZV90eXBlPVNJIFx1YzljOFx1YmNkMSBcdWJhYThcdWIzNzggXHVjMGMxXHVkNjY5CitfVUlfU0lJbmZlY3Rvcl90eXBlPVNJIFx1YzYyNFx1YzVmY1x1YzZkMAorX1VJX1NJTGFiZWxfdHlwZT1TSSBcdWI3N2NcdWJjYTgKK19VSV9TSUxhYmVsVmFsdWVfdHlwZT1TSSBcdWI3N2NcdWJjYTggXHVhYzEyCitfVUlfU0lSX3R5cGU9U0lSCitfVUlfU0lSTGFiZWxfdHlwZT1TSVIgXHViNzdjXHViY2E4CitfVUlfU0lSTGFiZWxWYWx1ZV90eXBlPVNJUiBcdWI3N2NcdWJjYTggXHVhYzEyCitfVUlfU3RhbmRhcmREaXNlYXNlTW9kZWxfdHlwZT1cdWM5YzhcdWJjZDEgXHViYWE4XHViMzc4CitfVUlfU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbF90eXBlPVx1YzljOFx1YmNkMSBcdWJhYThcdWIzNzggXHViNzdjXHViY2E4CitfVUlfU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbFZhbHVlX3R5cGU9XHVjOWM4XHViY2QxIFx1YmFhOFx1YjM3OCBcdWI3N2NcdWJjYTggXHVhYzEyCitfVUlfU3RhbmRhcmREaXNlYXNlTW9kZWxTdGF0ZV90eXBlPVx1YzljOFx1YmNkMSBcdWJhYThcdWIzNzggXHVjMGMxXHVkMGRjXHViOTdjIFx1ZDFiNVx1ZDU2OQorX1VJX1N0YW5kYXJkSW5mZWN0b3JfdHlwZT1cdWM2MjRcdWM1ZmNcdWM2ZDAKK19VSV9TdG9jaGFzdGljU0VJUkRpc2Vhc2VNb2RlbF90eXBlPVx1ZDY1NVx1Yjk2MFx1YzgwMSBTRUlSIFx1YzljOFx1YmNkMSBcdWJhYThcdWIzNzgKK19VSV9TdG9jaGFzdGljU0lEaXNlYXNlTW9kZWxfdHlwZT1cdWQ2NTVcdWI5NjBcdWM4MDEgU0kgXHVjOWM4XHViY2QxIFx1YmFhOFx1YjM3OAorX1VJX1N0b2NoYXN0aWNTSVJEaXNlYXNlTW9kZWxfdHlwZT1cdWQ2NTVcdWI5NjBcdWM4MDEgU0lSIFx1YzljOFx1YmNkMSBcdWJhYThcdWIzNzgKK19VSV9TYW5pdHlDaGVja2VyX3R5cGU9XHVjMGMxXHVkMGRjIFx1YzgxMFx1YWM4MFx1YWUzMAorX1VJX1Vua25vd25fdHlwZT1cdWFjMWNcdWNjYjQKKworX1VJX1Vua25vd25fZGF0YXR5cGU9XHVhYzEyCisKK19VSV9EaXNlYXNlTW9kZWxfYmFja2dyb3VuZE1vcnRhbGl0eVJhdGVfZmVhdHVyZT1cdWJjMzBcdWFjYmQgXHVjMGFjXHViOWRkXHViOTYwCitfVUlfRGlzZWFzZU1vZGVsX3BvcHVsYXRpb25JZGVudGlmaWVyX2ZlYXR1cmU9XHVjNzc4XHVhZDZjIFx1YzJkZFx1YmNjNFx1Yzc5MAorX1VJX0Rpc2Vhc2VNb2RlbF90aW1lUGVyaW9kX2ZlYXR1cmU9XHVhZTMwXHVhYzA0CitfVUlfRGlzZWFzZU1vZGVsX3BvcHVsYXRpb25Db3VudF9mZWF0dXJlPVx1Yzc3OFx1YWQ2YyBcdWNlNzRcdWM2YjRcdWQyYjgKK19VSV9EaXNlYXNlTW9kZWxfdG90YWxBcmVhX2ZlYXR1cmU9XHVjZDFkXHViYTc0XHVjODAxCitfVUlfRGlzZWFzZU1vZGVsX3BvcHVsYXRpb25EZW5zaXR5X2ZlYXR1cmU9XHVjNzc4XHVhZDZjIFx1YmMwMFx1YjNjNAorX1VJX0Rpc2Vhc2VNb2RlbExhYmVsX3BvcHVsYXRpb25MYWJlbF9mZWF0dXJlPVx1Yzc3OFx1YWQ2YyBcdWI3N2NcdWJjYTgKK19VSV9EaXNlYXNlTW9kZWxMYWJlbF9kaXNlYXNlTW9kZWxTdGF0ZV9mZWF0dXJlPVx1YzljOFx1YmNkMSBcdWJhYThcdWIzNzggXHVjMGMxXHVkMGRjXHViOTdjIFx1ZDFiNVx1ZDU2OQorX1VJX0Rpc2Vhc2VNb2RlbExhYmVsVmFsdWVfYmlydGhzX2ZlYXR1cmU9XHVjZDljXHVjMGIwCitfVUlfRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZV9kZWF0aHNfZmVhdHVyZT1cdWMwYWNcdWI5ZGQKK19VSV9EaXNlYXNlTW9kZWxMYWJlbFZhbHVlX2Rpc2Vhc2VEZWF0aHNfZmVhdHVyZT1cdWM5YzhcdWJjZDEgXHVjMGFjXHViOWRkCitfVUlfRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZV9wb3B1bGF0aW9uQ291bnRfZmVhdHVyZT1cdWM3NzhcdWFkNmMgXHVjZTc0XHVjNmI0XHVkMmI4CitfVUlfRGlzZWFzZU1vZGVsU3RhdGVfbGFiZWxfZmVhdHVyZT1cdWI3N2NcdWJjYTgKK19VSV9EaXNlYXNlTW9kZWxTdGF0ZV9wb3B1bGF0aW9uRGVuc2l0eV9mZWF0dXJlPVx1Yzc3OFx1YWQ2YyBcdWJjMDBcdWIzYzQKK19VSV9JbmZlY3Rvcl9kaXNlYXNlTW9kZWxfZmVhdHVyZT1cdWM5YzhcdWJjZDEgXHViYWE4XHViMzc4CitfVUlfSW5mZWN0b3JfcG9wdWxhdGlvbklkZW50aWZlcl9mZWF0dXJlPVx1Yzc3OFx1YWQ2YyBcdWMyZGRcdWJjYzRcdWM3OTAKK19VSV9JbmZlY3Rvcl90YXJnZXRVUklfZmVhdHVyZT1cdWIzMDBcdWMwYzEgVVJJCitfVUlfU0VJUl9pbmN1YmF0aW9uUmF0ZV9mZWF0dXJlPVx1YmQ4MFx1ZDY1NCBcdWMxOGRcdWIzYzQKK19VSV9TRUlSTGFiZWxfY3VycmVudFNFSVJWYWx1ZV9mZWF0dXJlPVx1ZDYwNFx1YzdhYyBTRUlSIFx1YWMxMgorX1VJX1NFSVJMYWJlbF9uZXh0U0VJUlZhbHVlX2ZlYXR1cmU9XHViMmU0XHVjNzRjIFNFSVIgXHVhYzEyCitfVUlfU0VJUkxhYmVsVmFsdWVfZV9mZWF0dXJlPUUKK19VSV9TSV9pbmZlY3Rpb3VzTW9ydGFsaXR5X2ZlYXR1cmU9XHVjODA0XHVjNWZjIFx1YzBhY1x1YjlkZFx1Yjk2MAorX1VJX1NJX3RyYW5zbWlzc2lvblJhdGVfZmVhdHVyZT1cdWM4MDRcdWMxYTEgXHVjMThkXHViM2M0CitfVUlfU0lfbm9uTGluZWFyaXR5Q29lZmZpY2llbnRfZmVhdHVyZT1cdWJlNDQgXHVjMTIwXHVkNjE1XHVjMTMxIFx1YWNjNFx1YzIxOAorX1VJX1NJX3JlY292ZXJ5UmF0ZV9mZWF0dXJlPVx1YmNmNVx1YWQ2YyBcdWMxOGRcdWIzYzQKK19VSV9TSUluZmVjdG9yX2luZmVjdGlvdXNDb3VudF9mZWF0dXJlPVx1YzgwNFx1YzVmYyBcdWQ2OWZcdWMyMTgKK19VSV9TSUxhYmVsX2N1cnJlbnRTSVZhbHVlX2ZlYXR1cmU9XHVkNjA0XHVjN2FjIFNJIFx1YWMxMgorX1VJX1NJTGFiZWxfbmV4dFNJVmFsdWVfZmVhdHVyZT1cdWIyZTRcdWM3NGMgU0kgXHVhYzEyCitfVUlfU0lMYWJlbFZhbHVlX2lfZmVhdHVyZT1JCitfVUlfU0lSX2ltbXVuaXR5TG9zc1JhdGVfZmVhdHVyZT1cdWJhNzRcdWM1ZWRcdWI4MjUgXHVjMTkwXHVjMmU0XHVjNzI4CitfVUlfU0lSTGFiZWxfY3VycmVudFNJUlZhbHVlX2ZlYXR1cmU9XHVkNjA0XHVjN2FjIFNJUiBcdWFjMTIKK19VSV9TSVJMYWJlbF9uZXh0U0lSVmFsdWVfZmVhdHVyZT1cdWIyZTRcdWM3NGMgU0lSIFx1YWMxMgorX1VJX1NJUkxhYmVsVmFsdWVfcl9mZWF0dXJlPVIKK19VSV9TdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsX2N1cnJlbnRTdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsVmFsdWVfZmVhdHVyZT1cdWQ2MDRcdWM3YWMgXHVkNDVjXHVjOTAwIFx1YzljOFx1YmNkMSBcdWJhYThcdWIzNzggXHViNzdjXHViY2E4IFx1YWMxMgorX1VJX1N0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWxfbmV4dFN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZV9mZWF0dXJlPVx1YjJlNFx1Yzc0YyBcdWQ0NWNcdWM5MDAgXHVjOWM4XHViY2QxIFx1YmFhOFx1YjM3OCBcdWI3N2NcdWJjYTggXHVhYzEyCitfVUlfU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbFZhbHVlX3NfZmVhdHVyZT1TCitfVUlfU3RhbmRhcmREaXNlYXNlTW9kZWxTdGF0ZV90cmFuc21pc3Npb25SYXRlU2NhbGVGYWN0b3JfZmVhdHVyZT1cdWM4MDRcdWMxYTEgXHVjMThkXHViM2M0IFx1YzJhNFx1Y2YwMFx1Yzc3YyBcdWQzMjlcdWQxMzAKK19VSV9Vbmtub3duX2ZlYXR1cmU9XHVjOWMwXHVjODE1XHViNDE4XHVjOWMwIFx1YzU0YVx1Yzc0YworCitfVUlfRGlzZWFzZU1vZGVsX2Rpc2Vhc2VOYW1lX2ZlYXR1cmU9XHVjOWM4XHViY2QxIFx1Yzc3NFx1Yjk4NAorX1VJX0luZmVjdG9yX2Rpc2Vhc2VOYW1lX2ZlYXR1cmU9XHVjOWM4XHViY2QxIFx1Yzc3NFx1Yjk4NAorX1VJX0luZmVjdG9yX3RhcmdldElTT0tleV9mZWF0dXJlPVx1YjMwMFx1YzBjMSBJU08gXHVkMGE0CitfVUlfU3RhbmRhcmREaXNlYXNlTW9kZWxfdG90YWxQb3B1bGF0aW9uQ291bnRfZmVhdHVyZT1cdWNkMWQgXHVjNzc4XHVhZDZjIFx1Y2U3NFx1YzZiNFx1ZDJiOAorX1VJX1N0YW5kYXJkRGlzZWFzZU1vZGVsX3RvdGFsUG9wdWxhdGlvbkNvdW50UmVjaXByb2NhbF9mZWF0dXJlPVx1Y2QxZCBcdWM3NzhcdWFkNmMgXHVjZTc0XHVjNmI0XHVkMmI4IFx1YzBjMVx1ZDYzOAorX1VJX1N0YW5kYXJkRGlzZWFzZU1vZGVsX3RvdGFsQXJlYV9mZWF0dXJlPVx1Y2QxZFx1YmE3NFx1YzgwMQorX1VJX1N0YW5kYXJkRGlzZWFzZU1vZGVsU3RhdGVfYXJlYVJhdGlvX2ZlYXR1cmU9XHVjOWMwXHVjNWVkIFx1YmU0NFx1YzcyOAorX1VJX1NJTGFiZWxWYWx1ZV9pUl9mZWF0dXJlPUlSCitfVUlfU0lMYWJlbFZhbHVlX2lGX2ZlYXR1cmU9SUYKK19VSV9TSV9pbmZlY3Rpb3VzTW9ydGFsaXR5UmF0ZV9mZWF0dXJlPVx1YzgwNFx1YzVmYyBcdWMwYWNcdWI5ZGRcdWI5NjAKK19VSV9TdGFuZGFyZERpc2Vhc2VNb2RlbF9yb2FkTmV0d29ya0luZmVjdGlvdXNQcm9wb3J0aW9uX2ZlYXR1cmU9XHViM2M0XHViODVjXHViOWRkIFx1Yzc3OFx1YzgxMSBcdWM4MDRcdWM1ZmNcdWMxMzEgXHViZTQ0XHVjNzI4CitfVUlfU3RhbmRhcmREaXNlYXNlTW9kZWxfcGh5c2ljYWxseUFkamFjZW50SW5mZWN0aW91c1Byb3BvcnRpb25fZmVhdHVyZT1cdWJiM2NcdWI5YWNcdWM4MDEgXHVjNzc4XHVjODExIFx1YzgwNFx1YzVmY1x1YzEzMSBcdWJlNDRcdWM3MjgKK19VSV9TdGFuZGFyZERpc2Vhc2VNb2RlbF9waHlzaWNhbGx5QWRqZWNlbnRJbmZlY3Rpb3VzX2ZlYXR1cmU9XHViYjNjXHViOWFjXHVjODAxIFx1Yzc3OFx1YzgxMSBcdWM4MDRcdWM1ZmNcdWMxMzEKK19VSV9TdGFuZGFyZERpc2Vhc2VNb2RlbF9waHlzaWNhbGx5QWRqYWNlbnRJbmZlY3Rpb3VzX2ZlYXR1cmU9XHViYjNjXHViOWFjXHVjODAxIFx1Yzc3OFx1YzgxMSBcdWM4MDRcdWM1ZmNcdWMxMzEKK19VSV9TSV9yb2FkTmV0d29ya0luZmVjdGlvdXNQcm9wb3J0aW9uX2ZlYXR1cmU9XHViM2M0XHViODVjXHViOWRkIFx1YzgwNFx1YzVmY1x1YzEzMSBcdWJlNDRcdWM3MjgKK19VSV9TSV9waHlzaWNhbGx5QWRqYWNlbnRJbmZlY3Rpb3VzUHJvcG9ydGlvbl9mZWF0dXJlPVx1YmIzY1x1YjlhY1x1YzgwMSBcdWM3NzhcdWM4MTEgXHVjODA0XHVjNWZjXHVjMTMxIFx1YmU0NFx1YzcyOAorX1VJX0FnZ3JlZ2F0aW5nU0lEaXNlYXNlTW9kZWxfdHlwZT1TSSBcdWM5YzhcdWJjZDEgXHViYWE4XHViMzc4XHVjNzQ0IFx1ZDFiNVx1ZDU2OQorX1VJX0FnZ3JlZ2F0aW5nRGlzZWFzZU1vZGVsU3RhdGVfdHlwZT1cdWM5YzhcdWJjZDEgXHViYWE4XHViMzc4IFx1YzBjMVx1ZDBkY1x1Yjk3YyBcdWQxYjVcdWQ1NjkKK19VSV9BZ2dyZWdhdGluZ0Rpc2Vhc2VNb2RlbFN0YXRlX2NoaWxkcmVuc0xhYmVsc19mZWF0dXJlPUNoaWxkcmVucyBcdWI3N2NcdWJjYTgKK19VSV9EaXNlYXNlTW9kZWxMYWJlbF9jdXJyZW50RGlzZWFzZU1vZGVsTGFiZWxWYWx1ZV9mZWF0dXJlPVx1ZDYwNFx1YzdhYyBcdWM5YzhcdWJjZDEgXHViYWE4XHViMzc4IFx1Yjc3Y1x1YmNhOCBcdWFjMTIKK19VSV9EaXNlYXNlTW9kZWxMYWJlbF9uZXh0RGlzZWFzZU1vZGVsTGFiZWxWYWx1ZV9mZWF0dXJlPVx1YjJlNFx1Yzc0YyBcdWM5YzhcdWJjZDEgXHViYWE4XHViMzc4IFx1Yjc3Y1x1YmNhOCBcdWFjMTIKK19VSV9FU3RyaW5nVG9FTGlzdE1hcEVudHJ5X3R5cGU9RXN0cmluZ1x1YzVkMFx1YzExYyBFbGlzdFx1Yjg1YyBNYXAgXHVjNzg1XHViODI1CitfVUlfRVN0cmluZ1RvRUxpc3RNYXBFbnRyeV9rZXlfZmVhdHVyZT1LZXkKK19VSV9FU3RyaW5nVG9FTGlzdE1hcEVudHJ5X3ZhbHVlX2ZlYXR1cmU9XHVhYzEyCitfVUlfQWdncmVnYXRpbmdTRUlSRGlzZWFzZU1vZGVsX3R5cGU9XHVkMWI1XHVkNTY5IFNFSVIgXHVjOWM4XHViY2QxIFx1YmFhOFx1YjM3OAorX1VJX0FnZ3JlZ2F0aW5nU0lSRGlzZWFzZU1vZGVsX3R5cGU9XHVkMWI1XHVkNTY5IFNJUiBcdWM5YzhcdWJjZDEgXHViYWE4XHViMzc4CitfVUlfSW5mZWN0b3JfbGFiZWxzVG9JbmZlY3RfZmVhdHVyZT1cdWM4MDRcdWM1ZmMgXHViNzdjXHViY2E4CitfVUlfU3RvY2hhc3RpY0Rpc2Vhc2VNb2RlbF90eXBlPVx1ZDY1NVx1Yjk2MFx1YzgwMSBcdWM5YzhcdWJjZDEgXHViYWE4XHViMzc4CitfVUlfU3RhbmRhcmRTdG9jaGFzdGljRGlzZWFzZU1vZGVsX3R5cGU9XHVkNjU1XHViOTYwXHVjODAxIFx1YzljOFx1YmNkMSBcdWJhYThcdWIzNzgKK19VSV9TdG9jaGFzdGljRGlzZWFzZU1vZGVsX3NlZWRfZmVhdHVyZT1cdWMyZGNcdWI0ZGMKK19VSV9TdG9jaGFzdGljRGlzZWFzZU1vZGVsX3JhbmRvbUdlbmVyYXRvcl9mZWF0dXJlPVx1Yjc5Y1x1YjM2NCBcdWMwZGRcdWMxMzFcdWFlMzAKK19VSV9TdGFuZGFyZFN0b2NoYXN0aWNEaXNlYXNlTW9kZWxfZ2Fpbl9mZWF0dXJlPVx1Yzc3NFx1YjRkZAorX1VJX0luZmVjdG9yX3BvcHVsYXRpb25JZGVudGlmaWVyX2ZlYXR1cmU9XHVjNzc4XHVhZDZjIFx1YzJkZFx1YmNjNFx1Yzc5MAorX1VJX1N0YW5kYXJkRGlzZWFzZU1vZGVsX3JlZmVyZW5jZVBvcHVsYXRpb25EZW5zaXR5X2ZlYXR1cmU9XHVjYzM4XHVjODcwIFx1Yzc3OFx1YWQ2YyBcdWJjMDBcdWIzYzQKK19VSV9TSUxhYmVsVmFsdWVfaW5jaWRlbmNlX2ZlYXR1cmU9XHViYzFjXHVjMGRkCitfVUlfU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbFZhbHVlX2luY2lkZW5jZV9mZWF0dXJlPVx1YmMxY1x1YzBkZAorX1VJX0Rpc2Vhc2VNb2RlbExhYmVsVmFsdWVfaW5jaWRlbmNlX2ZlYXR1cmU9XHViYzFjXHVjMGRkCitfVUlfTmV3RGV0ZXJtaW5pc3RpY1NJRGlzZWFzZU1vZGVsX3R5cGU9XHVjMGM4XHViODVjXHVjNmI0IFx1YWNiMFx1YzgxNSBTSSBcdWM5YzhcdWJjZDEgXHViYWE4XHViMzc4CitfVUlfTmV3RGV0ZXJtaW5pc3RpY1NJUkRpc2Vhc2VNb2RlbF90eXBlPVx1YzBjOFx1Yjg1Y1x1YzZiNCBcdWFjYjBcdWM4MTUgU0lSIFx1YzljOFx1YmNkMSBcdWJhYThcdWIzNzgKK19VSV9OZXdEZXRlcm1pbmlzdGljU0VJUkRpc2Vhc2VNb2RlbF90eXBlPVx1YzBjOFx1Yjg1Y1x1YzZiNCBcdWFjYjBcdWM4MTUgU0VJUiBcdWM5YzhcdWJjZDEgXHViYWE4XHViMzc4CitfVUlfU0lfZnJlcXVlbmN5RGVwZW5kZW50X2ZlYXR1cmU9XHVkNjlmXHVjMjE4XHVjNWQwIFx1Yzg4NVx1YzE4ZFx1YjQxYworX1VJX1N0YW5kYXJkRGlzZWFzZU1vZGVsX3N0ZXBTaXplX2ZlYXR1cmU9XHViMmU4XHVhY2M0IFx1ZDA2Y1x1YWUzMAorX1VJX0Rpc2Vhc2VNb2RlbF9zdGVwU2l6ZV9mZWF0dXJlPVx1YjJlOFx1YWNjNCBcdWQwNmNcdWFlMzAKK19VSV9EaXNlYXNlTW9kZWxfY3VycmVudFhfZmVhdHVyZT1cdWQ2MDRcdWM3YWMgWAorX1VJX0Rpc2Vhc2VNb2RlbF9yZWxhdGl2ZVRvbGVyYW5jZV9mZWF0dXJlPVx1YzBjMVx1YjMwMFx1YzgwMSBcdWIwYjRcdWMxMzEKK19VSV9EaXNlYXNlTW9kZWxMYWJlbF9kZWx0YVZhbHVlX2ZlYXR1cmU9XHViMzc4XHVkMGMwIFx1YWMxMgorX1VJX0Rpc2Vhc2VNb2RlbExhYmVsX2N1cnJlbnRZX2ZlYXR1cmU9XHVkNjA0XHVjN2FjIFkKK19VSV9EaXNlYXNlTW9kZWxfZmluaXRlRGlmZmVyZW5jZV9mZWF0dXJlPVx1YzcyMFx1ZDU1YyBcdWNjMjhcdWM3NzQKK19VSV9EaXNlYXNlTW9kZWxfZnJlcXVlbmN5RGVwZW5kZW50X2ZlYXR1cmU9XHVkNjlmXHVjMjE4XHVjNWQwIFx1Yzg4NVx1YzE4ZFx1YjQxYworX1VJX1NJUklub2N1bGF0b3JfdHlwZT1TSVIgXHVjODExXHVjODg1XHVjNzkwCitfVUlfU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbF9kZWx0YVN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZV9mZWF0dXJlPVx1YjM3OFx1ZDBjMCBcdWQ0NWNcdWM5MDAgXHVjOWM4XHViY2QxIFx1YmFhOFx1YjM3OCBcdWI3N2NcdWJjYTggXHVhYzEyCitfVUlfU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbF9jdXJyZW50WVN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZV9mZWF0dXJlPVx1ZDYwNFx1YzdhYyBZXHVjNzc4XHVhZDZjIFx1YzljOFx1YmNkMSBcdWJhYThcdWIzNzggXHViNzdjXHViY2E4IFx1YWMxMgorX1VJX1NJUklub2N1bGF0b3JfaW5vY3VsYXRlZFBlcmNlbnRhZ2VfZmVhdHVyZT1cdWM4MTFcdWM4ODUgXHViZTQ0XHVjNzI4CitfVUlfRGlzZWFzZU1vZGVsX2JhY2tncm91bmRCaXJ0aFJhdGVfZmVhdHVyZT1cdWJjMzBcdWFjYmQgXHVjZDljXHVjMGRkXHViOTYwCitfVUlfRGlzZWFzZU1vZGVsTGFiZWxfY3VycmVudERpc2Vhc2VNb2RlbFRlbXBMYWJlbFZhbHVlX2ZlYXR1cmU9XHVkNjA0XHVjN2FjIFx1YzljOFx1YmNkMSBcdWJhYThcdWIzNzggXHVjNjI4XHViM2M0IFx1Yjc3Y1x1YmNhOCBcdWFjMTIKKworX1VJX0Rpc2Vhc2VNb2RlbGluZ1BQYWdlPVx1YzljOFx1YmNkMSBcdWJhYThcdWIzNzhcdWI5YzEKK19VSV9EaXNlYXNlTW9kZWxMYWJlbF95U2NhbGVfZmVhdHVyZT1ZU2NhbGUKK19VSV9TdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsX2N1cnJlbnRMYWJlbFZhbHVlX2ZlYXR1cmU9XHVkNjA0XHVjN2FjIFx1Yjc3Y1x1YmNhOCBcdWFjMTIKK19VSV9TdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsX25leHRMYWJlbFZhbHVlX2ZlYXR1cmU9XHViMmU0XHVjNzRjIFx1Yjc3Y1x1YmNhOCBcdWFjMTIKK19VSV9TdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsX2RlbHRhTGFiZWxWYWx1ZV9mZWF0dXJlPVx1YjM3OFx1ZDBjMCBcdWI3N2NcdWJjYTggXHVhYzEyCitfVUlfU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbF9wcm9iZUxhYmVsVmFsdWVfZmVhdHVyZT1cdWQwZDBcdWMwYzlcdWM3OTAgXHViNzdjXHViY2E4IFx1YWMxMgorX1VJX0ludGVncmF0aW9uTGFiZWxfdHlwZT1cdWQxYjVcdWQ1NjkgXHViNzdjXHViY2E4CitfVUlfU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbF9vcmlnaW5hbExhYmVsVmFsdWVfZmVhdHVyZT1cdWM2ZDBcdWI3OTggXHViNzdjXHViY2E4IFx1YWMxMgorX1VJX1N0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWxfdGVtcExhYmVsVmFsdWVfZmVhdHVyZT1cdWM2MjhcdWIzYzQgXHViNzdjXHViY2E4IFx1YWMxMgorX1VJX1NJTGFiZWxfY3VycmVudExhYmVsVmFsdWVfZmVhdHVyZT1cdWQ2MDRcdWM3YWMgXHViNzdjXHViY2E4IFx1YWMxMgorX1VJX1NJTGFiZWxfbmV4dExhYmVsVmFsdWVfZmVhdHVyZT1cdWIyZTRcdWM3NGMgXHViNzdjXHViY2E4IFx1YWMxMgorX1VJX1NJTGFiZWxfZGVsdGFMYWJlbFZhbHVlX2ZlYXR1cmU9XHViMzc4XHVkMGMwIFx1Yjc3Y1x1YmNhOCBcdWFjMTIKK19VSV9TSUxhYmVsX3Byb2JlTGFiZWxWYWx1ZV9mZWF0dXJlPVx1ZDBkMFx1YzBjOVx1Yzc5MCBcdWI3N2NcdWJjYTggXHVhYzEyCitfVUlfU0lMYWJlbF90ZW1wTGFiZWxWYWx1ZV9mZWF0dXJlPVx1YzYyOFx1YjNjNCBcdWI3N2NcdWJjYTggXHVhYzEyCitfVUlfU0lMYWJlbF9vcmlnaW5hbExhYmVsVmFsdWVfZmVhdHVyZT1cdWM2ZDBcdWI3OTggXHViNzdjXHViY2E4IFx1YWMxMgorX1VJX1NJTGFiZWxfZXJyb3JTY2FsZV9mZWF0dXJlPVx1YzYyNFx1Yjk1OCBcdWMyYTRcdWNmMDBcdWM3N2MKK19VSV9TRUlSTGFiZWxfY3VycmVudExhYmVsVmFsdWVfZmVhdHVyZT1cdWQ2MDRcdWM3YWMgXHViNzdjXHViY2E4IFx1YWMxMgorX1VJX1NFSVJMYWJlbF9uZXh0TGFiZWxWYWx1ZV9mZWF0dXJlPVx1YjJlNFx1Yzc0YyBcdWI3N2NcdWJjYTggXHVhYzEyCitfVUlfU0VJUkxhYmVsX2RlbHRhTGFiZWxWYWx1ZV9mZWF0dXJlPVx1YjM3OFx1ZDBjMCBcdWI3N2NcdWJjYTggXHVhYzEyCitfVUlfU0VJUkxhYmVsX3Byb2JlTGFiZWxWYWx1ZV9mZWF0dXJlPVx1ZDBkMFx1YzBjOVx1Yzc5MCBcdWI3N2NcdWJjYTggXHVhYzEyCitfVUlfU0VJUkxhYmVsX3RlbXBMYWJlbFZhbHVlX2ZlYXR1cmU9XHVjNjI4XHViM2M0IFx1Yjc3Y1x1YmNhOCBcdWFjMTIKK19VSV9TRUlSTGFiZWxfb3JpZ2luYWxMYWJlbFZhbHVlX2ZlYXR1cmU9XHVjNmQwXHViNzk4IFx1Yjc3Y1x1YmNhOCBcdWFjMTIKK19VSV9TRUlSTGFiZWxfZXJyb3JTY2FsZV9mZWF0dXJlPVx1YzYyNFx1Yjk1OCBcdWMyYTRcdWNmMDBcdWM3N2MKK19VSV9TSVJMYWJlbF9jdXJyZW50TGFiZWxWYWx1ZV9mZWF0dXJlPVx1ZDYwNFx1YzdhYyBcdWI3N2NcdWJjYTggXHVhYzEyCitfVUlfU0lSTGFiZWxfbmV4dExhYmVsVmFsdWVfZmVhdHVyZT1cdWIyZTRcdWM3NGMgXHViNzdjXHViY2E4IFx1YWMxMgorX1VJX1NJUkxhYmVsX2RlbHRhTGFiZWxWYWx1ZV9mZWF0dXJlPVx1YjM3OFx1ZDBjMCBcdWI3N2NcdWJjYTggXHVhYzEyCitfVUlfU0lSTGFiZWxfcHJvYmVMYWJlbFZhbHVlX2ZlYXR1cmU9XHVkMGQwXHVjMGM5XHVjNzkwIFx1Yjc3Y1x1YmNhOCBcdWFjMTIKK19VSV9TSVJMYWJlbF90ZW1wTGFiZWxWYWx1ZV9mZWF0dXJlPVx1YzYyOFx1YjNjNCBcdWI3N2NcdWJjYTggXHVhYzEyCitfVUlfU0lSTGFiZWxfb3JpZ2luYWxMYWJlbFZhbHVlX2ZlYXR1cmU9XHVjNmQwXHViNzk4IFx1Yjc3Y1x1YmNhOCBcdWFjMTIKK19VSV9TSVJMYWJlbF9lcnJvclNjYWxlX2ZlYXR1cmU9XHVjNjI0XHViOTU4IFx1YzJhNFx1Y2YwMFx1Yzc3YworX1VJX1NFSVJMYWJlbF9kZWx0YVZhbHVlX2ZlYXR1cmU9XHViMzc4XHVkMGMwIFx1YWMxMgorX1VJX1NFSVJMYWJlbF9wcm9iZVZhbHVlX2ZlYXR1cmU9XHVkMGQwXHVjMGM5XHVjNzkwIFx1YWMxMgorX1VJX1NFSVJMYWJlbF90ZW1wVmFsdWVfZmVhdHVyZT1cdWM2MjhcdWIzYzQgXHVhYzEyCitfVUlfU0VJUkxhYmVsX29yaWdpbmFsVmFsdWVfZmVhdHVyZT1cdWM2ZDBcdWI3OTggXHVhYzEyCitfVUlfU0lMYWJlbF9kZWx0YVZhbHVlX2ZlYXR1cmU9XHViMzc4XHVkMGMwIFx1YWMxMgorX1VJX1NJTGFiZWxfcHJvYmVWYWx1ZV9mZWF0dXJlPVx1ZDBkMFx1YzBjOVx1Yzc5MCBcdWFjMTIKK19VSV9TSUxhYmVsX3RlbXBWYWx1ZV9mZWF0dXJlPVx1YzYyOFx1YjNjNCBcdWFjMTIKK19VSV9TSUxhYmVsX29yaWdpbmFsVmFsdWVfZmVhdHVyZT1cdWM2ZDBcdWI3OTggXHVhYzEyCitfVUlfU0lSTGFiZWxfZGVsdGFWYWx1ZV9mZWF0dXJlPVx1YjM3OFx1ZDBjMCBcdWFjMTIKK19VSV9TSVJMYWJlbF9wcm9iZVZhbHVlX2ZlYXR1cmU9XHVkMGQwXHVjMGM5XHVjNzkwIFx1YWMxMgorX1VJX1NJUkxhYmVsX3RlbXBWYWx1ZV9mZWF0dXJlPVx1YzYyOFx1YjNjNCBcdWFjMTIKK19VSV9TSVJMYWJlbF9vcmlnaW5hbFZhbHVlX2ZlYXR1cmU9XHVjNmQwXHViNzk4IFx1YWMxMgorX1VJX0ludGVncmF0aW9uRGVjb3JhdG9yX3R5cGU9XHVkMWI1XHVkNTY5IFx1YzdhNVx1YzJkZFx1Yzc5MAorX1VJX0ludGVncmF0aW9uTGFiZWxWYWx1ZV90eXBlPVx1ZDFiNVx1ZDU2OSBcdWI3N2NcdWJjYTggXHVhYzEyCitfVUlfUG9pc3NvblNJRGlzZWFzZU1vZGVsX3R5cGU9UG9pc3NvbiBTSSBcdWM5YzhcdWJjZDEgXHViYWE4XHViMzc4CitfVUlfU3RvY2hhc3RpY1BvaXNzb25TSURpc2Vhc2VNb2RlbF90eXBlPVx1ZDY1NVx1Yjk2MFx1YzgwMSBQb2lzc29uIFNJIFx1YzljOFx1YmNkMSBcdWJhYThcdWIzNzgKK19VSV9TdG9jaGFzdGljUG9pc3NvblNJUkRpc2Vhc2VNb2RlbF90eXBlPVx1ZDY1NVx1Yjk2MFx1YzgwMSBQb2lzc29uIFNJUiBcdWM5YzhcdWJjZDEgXHViYWE4XHViMzc4CitfVUlfU3RvY2hhc3RpY1BvaXNzb25TRUlSRGlzZWFzZU1vZGVsX3R5cGU9XHVkNjU1XHViOTYwXHVjODAxIFBvaXNzb24gU0VJUiBcdWM5YzhcdWJjZDEgXHViYWE4XHViMzc4CitfVUlfU3RvY2hhc3RpY1BvaXNzb25EaXNlYXNlTW9kZWxfdHlwZT1cdWQ2NTVcdWI5NjBcdWM4MDEgUG9pc3NvbiBcdWM5YzhcdWJjZDEgXHViYWE4XHViMzc4CitfVUlfUG9wdWxhdGlvbk1vZGVsX3R5cGU9XHVjNzc4XHVhZDZjIFx1YmFhOFx1YjM3OAorX1VJX1N0YW5kYXJkUG9wdWxhdGlvbk1vZGVsX3R5cGU9XHVjNzc4XHVhZDZjIFx1YmFhOFx1YjM3OAorX1VJX1BvcHVsYXRpb25Nb2RlbExhYmVsX3R5cGU9XHVjNzc4XHVhZDZjIFx1YmFhOFx1YjM3OCBcdWI3N2NcdWJjYTgKK19VSV9TdGFuZGFyZFBvcHVsYXRpb25Nb2RlbExhYmVsX3R5cGU9XHVjNzc4XHVhZDZjIFx1YmFhOFx1YjM3OCBcdWI3N2NcdWJjYTgKK19VSV9Qb3B1bGF0aW9uTW9kZWxMYWJlbFZhbHVlX3R5cGU9XHVjNzc4XHVhZDZjIFx1YmFhOFx1YjM3OCBcdWI3N2NcdWJjYTggXHVhYzEyCitfVUlfU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxMYWJlbFZhbHVlX3R5cGU9XHVjNzc4XHVhZDZjIFx1YmFhOFx1YjM3OCBcdWI3N2NcdWJjYTggXHVhYzEyCitfVUlfU3RvY2hhc3RpY1N0YW5kYXJkUG9wdWxhdGlvbk1vZGVsX3R5cGU9XHVkNjU1XHViOTYwXHVjODAxIFx1ZDQ1Y1x1YzkwMCBcdWM3NzhcdWFkNmMgXHViYWE4XHViMzc4CitfVUlfRGVtb2dyYXBoaWNQb3B1bGF0aW9uTW9kZWxfdHlwZT1cdWM3NzhcdWFkNmMgXHVjNzc4XHVhZDZjIFx1YmFhOFx1YjM3OAorX1VJX1BvcHVsYXRpb25Hcm91cF90eXBlPVx1Yzc3OFx1YWQ2YyBcdWFkZjhcdWI4ZjkKK19VSV9EaXNlYXNlTW9kZWxMYWJlbF9wb3B1bGF0aW9uTW9kZWxMYWJlbF9mZWF0dXJlPVx1Yzc3OFx1YWQ2YyBcdWJhYThcdWIzNzggXHViNzdjXHViY2E4CitfVUlfUG9wdWxhdGlvbk1vZGVsX3BvcHVsYXRpb25JZGVudGlmaWVyX2ZlYXR1cmU9XHVjNzc4XHVhZDZjIFx1YzJkZFx1YmNjNFx1Yzc5MAorX1VJX1BvcHVsYXRpb25Nb2RlbF9uYW1lX2ZlYXR1cmU9XHVjNzc0XHViOTg0CitfVUlfU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxfYmlydGhSYXRlX2ZlYXR1cmU9XHVjZDljXHVjMGRkXHViOTYwCitfVUlfU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxfZGVhdGhSYXRlX2ZlYXR1cmU9XHVjMGFjXHViOWRkXHViOTYwCitfVUlfU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxfdGltZVBlcmlvZF9mZWF0dXJlPVx1YWUzMFx1YWMwNAorX1VJX1BvcHVsYXRpb25Nb2RlbExhYmVsX3BvcHVsYXRpb25MYWJlbF9mZWF0dXJlPVx1Yzc3OFx1YWQ2YyBcdWI3N2NcdWJjYTgKK19VSV9Qb3B1bGF0aW9uTW9kZWxMYWJlbF9wb3B1bGF0aW9uSWRlbnRpZmllcl9mZWF0dXJlPVx1Yzc3OFx1YWQ2YyBcdWMyZGRcdWJjYzRcdWM3OTAKK19VSV9TdGFuZGFyZFBvcHVsYXRpb25Nb2RlbExhYmVsX2RlbHRhVmFsdWVfZmVhdHVyZT1cdWIzNzhcdWQwYzAgXHVhYzEyCitfVUlfU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxMYWJlbF9wcm9iZVZhbHVlX2ZlYXR1cmU9XHVkMGQwXHVjMGM5XHVjNzkwIFx1YWMxMgorX1VJX1N0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWxfdGVtcFZhbHVlX2ZlYXR1cmU9XHVjNjI4XHViM2M0IFx1YWMxMgorX1VJX1N0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWxfb3JpZ2luYWxWYWx1ZV9mZWF0dXJlPVx1YzZkMFx1Yjc5OCBcdWFjMTIKK19VSV9TdGFuZGFyZFBvcHVsYXRpb25Nb2RlbExhYmVsX2Vycm9yU2NhbGVfZmVhdHVyZT1cdWM2MjRcdWI5NTggXHVjMmE0XHVjZjAwXHVjNzdjCitfVUlfU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxMYWJlbFZhbHVlX2NvdW50X2ZlYXR1cmU9XHVkNjlmXHVjMjE4CitfVUlfU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxMYWJlbFZhbHVlX2luY2lkZW5jZV9mZWF0dXJlPVx1YmMxY1x1YzBkZAorX1VJX1N0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWxWYWx1ZV9iaXJ0aHNfZmVhdHVyZT1cdWNkOWNcdWMwYjAKK19VSV9TdGFuZGFyZFBvcHVsYXRpb25Nb2RlbExhYmVsVmFsdWVfZGVhdGhzX2ZlYXR1cmU9XHVjMGFjXHViOWRkCitfVUlfU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxMYWJlbFZhbHVlX2RlbnNpdHlfZmVhdHVyZT1cdWJjMDBcdWIzYzQKK19VSV9TdG9jaGFzdGljU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxfZ2Fpbl9mZWF0dXJlPVx1Yzc3NFx1YjRkZAorX1VJX0RlbW9ncmFwaGljUG9wdWxhdGlvbk1vZGVsX3BvcHVsYXRpb25Hcm91cHNfZmVhdHVyZT1cdWM3NzhcdWFkNmMgXHVhZGY4XHViOGY5CitfVUlfUG9wdWxhdGlvbkdyb3VwX2lkZW50aWZpZXJfZmVhdHVyZT1cdWMyZGRcdWJjYzRcdWM3OTAKK19VSV9Qb3B1bGF0aW9uR3JvdXBfZnJhY3Rpb25fZmVhdHVyZT1cdWJkODRcdWMyMTgKK19VSV9TSUluZmVjdG9yX2luZmVjdGlvbnNfZmVhdHVyZT1cdWM4MDRcdWM1ZmMKK19VSV9TSUluZmVjdG9yX3BlcmNlbnRhZ2VfZmVhdHVyZT1cdWJjMzFcdWJkODRcdWM3MjgKK19VSV9TSVJJbm9jdWxhdG9yX2lub2N1bGF0aW9uc19mZWF0dXJlPVx1YzYwOFx1YmMyOSBcdWM4MTFcdWM4ODUKK19VSV9JbmZlY3Rvcl9wZXJjZW50YWdlX2ZlYXR1cmU9XHViYzMxXHViZDg0XHVjNzI4CitfVUlfSW5mZWN0b3JfaW5mZWN0UGVyY2VudGFnZV9mZWF0dXJlPVx1YzgwNFx1YzVmYyBcdWJlNDRcdWM3MjgKK19VSV9TSVJJbm9jdWxhdG9yX2lub2N1bGF0ZVBlcmNlbnRhZ2VfZmVhdHVyZT1cdWM4MTFcdWM4ODUgXHViZTQ0XHVjNzI4CitfVUlfSW5mZWN0b3JJbm9jdWxhdG9yQ29sbGVjdGlvbl90eXBlPVx1YzYyNFx1YzVmY1x1YzZkMCBcdWM4MTFcdWM4ODVcdWM3OTAgXHVjMjE4XHVjOWQxXHVjNmQwCitfVUlfSW5mZWN0b3JJbm9jdWxhdG9yQ29sbGVjdGlvbl9saXN0X2ZlYXR1cmU9XHViYWE5XHViODVkCitfVUlfSW5mZWN0b3JJbm9jdWxhdG9yQ29sbGVjdGlvbl9pbXBvcnRGb2xkZXJfZmVhdHVyZT1cdWQzZjRcdWIzNTQgXHVhYzAwXHVjODM4XHVjNjI0XHVhZTMwCitfVUlfU0lfY2hhcmFjdGVyaXN0aWNNaXhpbmdEaXN0YW5jZV9mZWF0dXJlPVx1ZDJiOVx1YzEzMSBcdWQ2M2NcdWQ1NjkgXHVhYzcwXHViOWFjCitfVUlfU3RhbmRhcmREaXNlYXNlTW9kZWxfY2hhcmFjdGVyaXN0aWNNaXhpbmdEaXN0YW5jZV9mZWF0dXJlPVx1ZDJiOVx1YzEzMSBcdWQ2M2NcdWQ1NjkgXHVhYzcwXHViOWFjCitfVUlfU0lMYWJlbFZhbHVlX2Rpc2Vhc2VEZWF0aHNfZmVhdHVyZT1cdWM5YzhcdWJjZDEgXHVjMGFjXHViOWRkCitfVUlfU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbFZhbHVlX2Rpc2Vhc2VEZWF0aHNfZmVhdHVyZT1cdWM5YzhcdWJjZDEgXHVjMGFjXHViOWRkCitfVUlfSW5mZWN0b3JfdGFyZ2V0RmVhdHVyZV9mZWF0dXJlPVx1YjMwMFx1YzBjMSBcdWFlMzBcdWIyYTUKK19VSV9MYWJlbFZhbHVlVGVzdF90eXBlPUxhYmVsIFZhbHVlIFRlc3QKK19VSV9MYWJlbFZhbHVlVGVzdF9tb2RlbE5hbWVfZmVhdHVyZT1Nb2RlbCBOYW1lCitfVUlfTGFiZWxWYWx1ZVRlc3RfdGFyZ2V0VVJJX2ZlYXR1cmU9XHViMzAwXHVjMGMxIFVSSQorX1VJX0xhYmVsVmFsdWVUZXN0X3N0YXRlX2ZlYXR1cmU9U3RhdGUKK19VSV9MYWJlbFZhbHVlVGVzdF90aHJlc2hvbGRfZmVhdHVyZT1UaHJlc2hvbGQKK19VSV9MYWJlbFZhbHVlVGVzdF9wcmVkaWNhdGVfZmVhdHVyZT1cdWMyMjBcdWM1YjQKK19VSV9MYWJlbFZhbHVlVGVzdF9wb3B1bGF0aW9uSWRlbnRpZmllcl9mZWF0dXJlPVx1Yzc3OFx1YWQ2YyBcdWMyZGRcdWJjYzRcdWM3OTAKK19VSV9Jbml0aWFsaXplcl90eXBlPUluaXRpYWxpemVyCitfVUlfSW5pdGlhbGl6ZXJfZGlzZWFzZU5hbWVfZmVhdHVyZT1cdWM5YzhcdWJjZDEgXHVjNzc0XHViOTg0CitfVUlfSW5pdGlhbGl6ZXJfdGFyZ2V0SVNPS2V5X2ZlYXR1cmU9XHViMzAwXHVjMGMxIElTTyBcdWQwYTQKK19VSV9Jbml0aWFsaXplcl9wb3B1bGF0aW9uSWRlbnRpZmllcl9mZWF0dXJlPVx1Yzc3OFx1YWQ2YyBcdWMyZGRcdWJjYzRcdWM3OTAKK19VSV9Jbml0aWFsaXplcl90YXJnZXRGZWF0dXJlc19mZWF0dXJlPVRhcmdldCBGZWF0dXJlcworX1VJX0luaXRpYWxpemVyX3BlcmNlbnRhZ2VzX2ZlYXR1cmU9UGVyY2VudGFnZXMKK19VSV9Jbml0aWFsaXplcl9jb21wYXJ0bWVudHNfZmVhdHVyZT1Db21wYXJ0bWVudHMKK19VSV9Jbml0aWFsaXplcl9jb21wYXJ0bWVudFZhbHVlc19mZWF0dXJlPUNvbXBhcnRtZW50IFZhbHVlcworX1VJX0luaXRpYWxpemVyX3VzZVBlcmNlbnRhZ2VzX2ZlYXR1cmU9VXNlIFBlcmNlbnRhZ2VzCitfVUlfSW5pdGlhbGl6ZXJfdXNlRnJhY3Rpb25zX2ZlYXR1cmU9VXNlIEZyYWN0aW9ucwpkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMvcGx1Z2luX3poLnByb3BlcnRpZXMgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy9wbHVnaW5femgucHJvcGVydGllcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yODBiZGIwCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMvcGx1Z2luX3poLnByb3BlcnRpZXMKQEAgLTAsMCArMSwyOTcgQEAKKyMvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIyAqIENvcHlyaWdodCAoYykgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyMgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisjICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisjICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyMgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorIyAqCisjICogQ29udHJpYnV0b3JzOgorIyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorIyBUbyBjb2RlIGRldmVsb3BlcjoKKyMgICBEbyBOT1QgY2hhbmdlIHRoZSBwcm9wZXJ0aWVzIGJldHdlZW4gdGhpcyBsaW5lIGFuZCB0aGUKKyMgICAiJSUlIEVORCBPRiBUUkFOU0xBVEVEIFBST1BFUlRJRVMgJSUlIiBsaW5lLgorIyAgIE1ha2UgYSBuZXcgcHJvcGVydHkgbmFtZSwgYXBwZW5kIHRvIHRoZSBlbmQgb2YgdGhlIGZpbGUgYW5kIGNoYW5nZQorIyAgIHRoZSBjb2RlIHRvIHVzZSB0aGUgbmV3IHByb3BlcnR5LgorIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisjICUlJSBFTkQgT0YgVFJBTlNMQVRFRCBQUk9QRVJUSUVTICUlJQorIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitwbHVnaW5OYW1lPVx1NzViZVx1NzVjNVx1NmEyMVx1NTc4YgorcHJvdmlkZXJOYW1lPUVjbGlwc2Uub3JnCisKKyMgRXh0ZW5zaW9uIHBvaW50cworRVBfRGlzZWFzZT1TVEVNXHU3NWJlXHU3NWM1XHU3Njg0XHU1YjlhXHU0ZTQ5CitFUF9EaXNlYXNlX01vZGVsPVNURU1cdTc1YmVcdTc1YzVcdTZhMjFcdTU3OGIKKworIyBEdWJsaW4gQ29yZQorZGNfY3JlYXRvcl9kYWZvcmQ9RGFmb3JkCitkY19jcmVhdG9yX2thdWZtYW49S2F1Zm1hbgorZGNfY3JlYXRvcl9lZGx1bmQ9RWRsdW5kCitkY19jcmVhdG9yX2RhdmlzPURhdmlzCitkY19jcmVhdG9yX3N0ZW10ZWFtPVNURU1cdTU2ZTJcdTk2MWYKK2RjX1NPVVJDRT1odHRwOi8vd2lraS5lY2xpcHNlLm9yZy9JbnRyb2R1Y3Rpb25fdG9fQ29tcGFydG1lbnRfTW9kZWxzXHVmZjA4XHU1NDhjXHU1M2MyXHU4MDAzXHU4ZDQ0XHU2NTk5XHU0ZTJkXHVmZjA5CitkY19pZGVudGllcj1TVEVNXHU3NWJlXHU3NWM1XHU2YTIxXHU1NzhiCitkY19wdWJsaXNoZXI9RWNsaXBzZVx1NTdmYVx1OTFkMVx1NGYxYQorZGNfbGljZW5zZT1FY2xpcHNlXHU1MTZjXHU1MTcxXHU4YmI4XHU1M2VmXHVmZjA4RVBMXHVmZjA5CitkY19kZXNjX0RfU0k9XHU3ODZlXHU1YjlhXHU2MDI3U0lcdTZhMjFcdTU3OGIKK2RjX2Rlc2NfRF9TSVI9XHU3ODZlXHU1YjlhXHU2MDI3U0lSXHU2YTIxXHU1NzhiCitkY19kZXNjX0RfU0VJUj1cdTc4NmVcdTViOWFcdTYwMjdTRUlSXHU2YTIxXHU1NzhiCitkY19kZXNjX1NfU0k9XHU5NjhmXHU2NzNhU0lcdTZhMjFcdTU3OGIKK2RjX2Rlc2NfU19TSVI9XHU5NjhmXHU2NzNhU0lSXHU2YTIxXHU1NzhiCitkY19kZXNjX1NfU0VJUj1cdTk2OGZcdTY3M2FTRUlSXHU2YTIxXHU1NzhiCitkY19kZXNjX1BTX1NJPVx1NmNjYVx1Njc3ZVx1OTY4Zlx1NjczYVNJXHU1YmE0XHU2YTIxXHU1NzhiCitkY19kZXNjX1BTX1NJUj1cdTZjY2FcdTY3N2VcdTk2OGZcdTY3M2FTSVJcdTViYTRcdTZhMjFcdTU3OGIKK2RjX2Rlc2NfUFNfU0VJUj1cdTZjY2FcdTY3N2VcdTk2OGZcdTY3M2FTRUlSXHU1YmE0XHU2YTIxXHU1NzhiCitkY190aXRsZV9EX1NJPVx1Nzg2ZVx1NWI5YVx1NjAyN1NJCitkY190aXRsZV9EX1NJUj1cdTc4NmVcdTViOWFcdTYwMjdTSVIKK2RjX3RpdGxlX0RfU0VJUj1cdTc4NmVcdTViOWFcdTYwMjdTRUlSCitkY190aXRsZV9TX1NJPVx1OTY4Zlx1NjczYVNJCitkY190aXRsZV9TX1NJUj1cdTk2OGZcdTY3M2FTSVIKK2RjX3RpdGxlX1NfU0VJUj1cdTk2OGZcdTY3M2FTRUlSCitkY190aXRsZV9QU19TST1cdTZjY2FcdTY3N2VcdTk2OGZcdTY3M2FTSQorZGNfdGl0bGVfUFNfU0lSPVx1NmNjYVx1Njc3ZVx1OTY4Zlx1NjczYVNJUgorZGNfdGl0bGVfUFNfU0VJUj1cdTZjY2FcdTY3N2VcdTk2OGZcdTUzNzNTRUlSCisKKworX1VJX0NyZWF0ZUNoaWxkX3RleHQ9ezB9CitfVUlfQ3JlYXRlQ2hpbGRfdGV4dDI9ezF9IHswfQorX1VJX0NyZWF0ZUNoaWxkX3RleHQzPXsxfQorX1VJX0NyZWF0ZUNoaWxkX3Rvb2x0aXA9XHU1MjFiXHU1ZWZhXHU1NzI4ezF9IHswfVx1NjViMFx1NTI5Zlx1ODBmZAorX1VJX0NyZWF0ZUNoaWxkX2Rlc2NyaXB0aW9uPVx1NGUzYVx1OTAwOVx1NWI5YVx1NzY4NHsyfVx1NzY4NHsxfVx1NzI3OVx1NjAyN1x1Njc2NVx1NTIxYlx1NWVmYVx1NGUwMFx1NGUyYVx1NjViMFx1NzY4NHswfVx1NWI1MFx1N2M3YgorX1VJX0NyZWF0ZVNpYmxpbmdfZGVzY3JpcHRpb249XHU1NzI4ezF9XHU3Njg0XHU3MjM2XHU5NmM2XHU0ZTJkXHU0ZTNhXHU5MDA5XHU1YjlhXHU3Njg0ezJ9XHU2NzY1XHU1MjFiXHU1ZWZhXHU0ZTAwXHU0ZTJhezB9XHU3YzdiXHU1NzhiXHU3Njg0XHU2NWIwXHU3Njg0XHU1MTQ0XHU1ZjFmXHU3YzdiCisKK19VSV9Qcm9wZXJ0eURlc2NyaXB0b3JfZGVzY3JpcHRpb249ezB9XHU0ZWNlXHU1YzVlezF9CisKK19VSV9EZXRlcm1pbmlzdGljU0VJUkRpc2Vhc2VNb2RlbF90eXBlPVx1Nzg2ZVx1NWI5YVx1NjAyN1NFSVJcdTc1YmVcdTc1YzVcdTZhMjFcdTU3OGIKK19VSV9EZXRlcm1pbmlzdGljU0lEaXNlYXNlTW9kZWxfdHlwZT1cdTc4NmVcdTViOWFcdTYwMjdTSVx1NzViZVx1NzVjNVx1NmEyMVx1NTc4YgorX1VJX0RldGVybWluaXN0aWNTSVJEaXNlYXNlTW9kZWxfdHlwZT1cdTc4NmVcdTViOWFcdTYwMjdTSVJcdTc1YmVcdTc1YzVcdTZhMjFcdTU3OGIKK19VSV9EaXNlYXNlTW9kZWxfdHlwZT1cdTc1YmVcdTc1YzVcdTZhMjFcdTU3OGIKK19VSV9EaXNlYXNlTW9kZWxMYWJlbF90eXBlPVx1NzViZVx1NzVjNVx1NmEyMVx1NTc4Ylx1NjgwN1x1N2I3ZQorX1VJX0Rpc2Vhc2VNb2RlbExhYmVsVmFsdWVfdHlwZT1cdTc1YmVcdTc1YzVcdTZhMjFcdTU3OGJcdTY4MDdcdTdiN2VcdTUwM2MKK19VSV9EaXNlYXNlTW9kZWxTdGF0ZV90eXBlPVx1NzViZVx1NzVjNVx1NmEyMVx1NTc4Ylx1NzJiNlx1NjAwMQorX1VJX0luZmVjdG9yX3R5cGU9XHU2MTFmXHU2N2QzXHU4MDA1CitfVUlfU0VJUl90eXBlPVNFSVIKK19VSV9TRUlSTGFiZWxfdHlwZT1TRUlSXHU2ODA3XHU3YjdlCitfVUlfU0VJUkxhYmVsVmFsdWVfdHlwZT1TRUlSXHU2ODA3XHU3YjdlXHU1MDNjCitfVUlfU0lfdHlwZT1TSQorX1VJX1NJRGlzZWFzZU1vZGVsU3RhdGVfdHlwZT1TSVx1NzViZVx1NzVjNVx1NmEyMVx1NTc4Ylx1NzJiNlx1NjAwMQorX1VJX1NJSW5mZWN0b3JfdHlwZT1TSVx1NjExZlx1NjdkM1x1ODAwNQorX1VJX1NJTGFiZWxfdHlwZT1TSVx1NjgwN1x1N2I3ZQorX1VJX1NJTGFiZWxWYWx1ZV90eXBlPVNJXHU2ODA3XHU3YjdlXHU1MDNjCitfVUlfU0lSX3R5cGU9U0lSCitfVUlfU0lSTGFiZWxfdHlwZT1TSVJcdTY4MDdcdTdiN2UKK19VSV9TSVJMYWJlbFZhbHVlX3R5cGU9U0lSXHU2ODA3XHU3YjdlXHU1MDNjCitfVUlfU3RhbmRhcmREaXNlYXNlTW9kZWxfdHlwZT1cdTc1YmVcdTc1YzVcdTZhMjFcdTU3OGIKK19VSV9TdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsX3R5cGU9XHU3NWJlXHU3NWM1XHU2YTIxXHU1NzhiXHU2ODA3XHU3YjdlCitfVUlfU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbFZhbHVlX3R5cGU9XHU3NWJlXHU3NWM1XHU2YTIxXHU1NzhiXHU2ODA3XHU3YjdlXHU1MDNjCitfVUlfU3RhbmRhcmREaXNlYXNlTW9kZWxTdGF0ZV90eXBlPVx1NzViZVx1NzVjNVx1NmEyMVx1NTc4Ylx1NzJiNlx1NjAwMQorX1VJX1N0YW5kYXJkSW5mZWN0b3JfdHlwZT1cdTYxMWZcdTY3ZDNcdTgwMDUKK19VSV9TdG9jaGFzdGljU0VJUkRpc2Vhc2VNb2RlbF90eXBlPVx1OTY4Zlx1NjczYVNFSVJcdTc1YmVcdTc1YzVcdTZhMjFcdTU3OGIKK19VSV9TdG9jaGFzdGljU0lEaXNlYXNlTW9kZWxfdHlwZT1cdTk2OGZcdTY3M2FTSVx1NzViZVx1NzVjNVx1NmEyMVx1NTc4YgorX1VJX1N0b2NoYXN0aWNTSVJEaXNlYXNlTW9kZWxfdHlwZT1cdTk2OGZcdTY3M2FTSVJcdTc1YmVcdTc1YzVcdTZhMjFcdTU3OGIKK19VSV9TYW5pdHlDaGVja2VyX3R5cGU9XHU1YjhjXHU2NTc0XHU2MDI3XHU2OGMwXHU2N2U1CitfVUlfVW5rbm93bl90eXBlPVx1NWJmOVx1OGM2MQorCitfVUlfVW5rbm93bl9kYXRhdHlwZT1cdTRlZjdcdTUwM2MKKworX1VJX0Rpc2Vhc2VNb2RlbF9iYWNrZ3JvdW5kTW9ydGFsaXR5UmF0ZV9mZWF0dXJlPVx1ODBjY1x1NjY2Zlx1NmI3Ylx1NGVhMVx1NzM4NworX1VJX0Rpc2Vhc2VNb2RlbF9wb3B1bGF0aW9uSWRlbnRpZmllcl9mZWF0dXJlPVx1NzljZFx1N2ZhNFx1NjgwN1x1OGJjNlx1N2IyNgorX1VJX0Rpc2Vhc2VNb2RlbF90aW1lUGVyaW9kX2ZlYXR1cmU9XHU2NWY2XHU5NWY0XHU2YmI1CitfVUlfRGlzZWFzZU1vZGVsX3BvcHVsYXRpb25Db3VudF9mZWF0dXJlPVx1NzljZFx1N2ZhNFx1NjU3MAorX1VJX0Rpc2Vhc2VNb2RlbF90b3RhbEFyZWFfZmVhdHVyZT1cdTYwM2JcdTk3NjJcdTc5ZWYKK19VSV9EaXNlYXNlTW9kZWxfcG9wdWxhdGlvbkRlbnNpdHlfZmVhdHVyZT1cdTc5Y2RcdTdmYTRcdTViYzZcdTVlYTYKK19VSV9EaXNlYXNlTW9kZWxMYWJlbF9wb3B1bGF0aW9uTGFiZWxfZmVhdHVyZT1cdTc5Y2RcdTdmYTRcdTY4MDdcdTdiN2UKK19VSV9EaXNlYXNlTW9kZWxMYWJlbF9kaXNlYXNlTW9kZWxTdGF0ZV9mZWF0dXJlPVx1NzViZVx1NzVjNVx1NmEyMVx1NTc4Ylx1NzJiNlx1NjAwMQorX1VJX0Rpc2Vhc2VNb2RlbExhYmVsVmFsdWVfYmlydGhzX2ZlYXR1cmU9XHU1MWZhXHU3NTFmCitfVUlfRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZV9kZWF0aHNfZmVhdHVyZT1cdTZiN2JcdTRlYTEKK19VSV9EaXNlYXNlTW9kZWxMYWJlbFZhbHVlX2Rpc2Vhc2VEZWF0aHNfZmVhdHVyZT1cdTc1YmVcdTc1YzVcdTZiN2JcdTRlYTEKK19VSV9EaXNlYXNlTW9kZWxMYWJlbFZhbHVlX3BvcHVsYXRpb25Db3VudF9mZWF0dXJlPVx1NzljZFx1N2ZhNFx1NjU3MAorX1VJX0Rpc2Vhc2VNb2RlbFN0YXRlX2xhYmVsX2ZlYXR1cmU9XHU2ODA3XHU3YjdlCitfVUlfRGlzZWFzZU1vZGVsU3RhdGVfcG9wdWxhdGlvbkRlbnNpdHlfZmVhdHVyZT1cdTc5Y2RcdTdmYTRcdTViYzZcdTVlYTYKK19VSV9JbmZlY3Rvcl9kaXNlYXNlTW9kZWxfZmVhdHVyZT1cdTc1YmVcdTc1YzVcdTZhMjFcdTU3OGIKK19VSV9JbmZlY3Rvcl9wb3B1bGF0aW9uSWRlbnRpZmVyX2ZlYXR1cmU9XHU3OWNkXHU3ZmE0XHU2ODA3XHU4YmM2XHU3YjI2CitfVUlfSW5mZWN0b3JfdGFyZ2V0VVJJX2ZlYXR1cmU9XHU3NmVlXHU2ODA3VVJJCitfVUlfU0VJUl9pbmN1YmF0aW9uUmF0ZV9mZWF0dXJlPVx1NWI3NVx1NTMxNlx1NzM4NworX1VJX1NFSVJMYWJlbF9jdXJyZW50U0VJUlZhbHVlX2ZlYXR1cmU9XHU1ZjUzXHU1MjRkU0VJUlx1NTAzYworX1VJX1NFSVJMYWJlbF9uZXh0U0VJUlZhbHVlX2ZlYXR1cmU9XHU0ZTBiXHU0ZTAwXHU0ZTJhU0VJUlx1NGVmN1x1NTAzYworX1VJX1NFSVJMYWJlbFZhbHVlX2VfZmVhdHVyZT1cdTAwY2IKK19VSV9TSV9pbmZlY3Rpb3VzTW9ydGFsaXR5X2ZlYXR1cmU9XHU0ZjIwXHU2N2QzXHU3NWM1XHU2YjdiXHU0ZWExXHU3Mzg3CitfVUlfU0lfdHJhbnNtaXNzaW9uUmF0ZV9mZWF0dXJlPVx1NGYyMFx1OGY5M1x1OTAxZlx1NzM4NworX1VJX1NJX25vbkxpbmVhcml0eUNvZWZmaWNpZW50X2ZlYXR1cmU9XHU5NzVlXHU3ZWJmXHU2MDI3XHU3Y2ZiXHU2NTcwCitfVUlfU0lfcmVjb3ZlcnlSYXRlX2ZlYXR1cmU9XHU1ZWI3XHU1OTBkXHU3Mzg3CitfVUlfU0lJbmZlY3Rvcl9pbmZlY3Rpb3VzQ291bnRfZmVhdHVyZT1cdTRmMjBcdTY3ZDNcdTYwMjdcdThiYTFcdTY1NzAKK19VSV9TSUxhYmVsX2N1cnJlbnRTSVZhbHVlX2ZlYXR1cmU9XHU1ZjUzXHU1MjRkU0lcdTUwM2MKK19VSV9TSUxhYmVsX25leHRTSVZhbHVlX2ZlYXR1cmU9XHU0ZTBiXHU0ZTAwXHU0ZTJhU0lcdTUwM2MKK19VSV9TSUxhYmVsVmFsdWVfaV9mZWF0dXJlPUkKK19VSV9TSVJfaW1tdW5pdHlMb3NzUmF0ZV9mZWF0dXJlPVx1NTE0ZFx1NzVhYlx1NjM1Zlx1NTkzMVx1NzM4NworX1VJX1NJUkxhYmVsX2N1cnJlbnRTSVJWYWx1ZV9mZWF0dXJlPVx1NWY1M1x1NTI0ZFNJUlx1NTAzYworX1VJX1NJUkxhYmVsX25leHRTSVJWYWx1ZV9mZWF0dXJlPVx1NGUwYlx1NGUwMFx1NGUyYVNJUlx1NTAzYworX1VJX1NJUkxhYmVsVmFsdWVfcl9mZWF0dXJlPVIKK19VSV9TdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsX2N1cnJlbnRTdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsVmFsdWVfZmVhdHVyZT1cdTc2ZWVcdTUyNGRcdTc2ODRcdTY4MDdcdTUxYzZcdTc1YmVcdTc1YzVcdTZhMjFcdTU3OGJcdTY4MDdcdTdiN2VcdTUwM2MKK19VSV9TdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsX25leHRTdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsVmFsdWVfZmVhdHVyZT1cdTRlMGJcdTRlMDBcdTRlMmFcdTY4MDdcdTUxYzZcdTc1YmVcdTc1YzVcdTZhMjFcdTU3OGJcdTY4MDdcdTdiN2VcdTUwM2MKK19VSV9TdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsVmFsdWVfc19mZWF0dXJlPVMKK19VSV9TdGFuZGFyZERpc2Vhc2VNb2RlbFN0YXRlX3RyYW5zbWlzc2lvblJhdGVTY2FsZUZhY3Rvcl9mZWF0dXJlPVx1NGYyMFx1OGY5M1x1OTAxZlx1NzM4N1x1NmJkNFx1NGY4Ylx1NTZlMFx1NWI1MAorX1VJX1Vua25vd25fZmVhdHVyZT1cdTY3MmFcdTYzMDdcdTViOWEKKworX1VJX0Rpc2Vhc2VNb2RlbF9kaXNlYXNlTmFtZV9mZWF0dXJlPVx1NzViZVx1NzVjNVx1NTQwZFx1NzlmMAorX1VJX0luZmVjdG9yX2Rpc2Vhc2VOYW1lX2ZlYXR1cmU9XHU3NWJlXHU3NWM1XHU1NDBkXHU3OWYwCitfVUlfSW5mZWN0b3JfdGFyZ2V0SVNPS2V5X2ZlYXR1cmU9XHU3NmVlXHU2ODA3SVNPXHU0ZWUzXHU3ODAxCitfVUlfU3RhbmRhcmREaXNlYXNlTW9kZWxfdG90YWxQb3B1bGF0aW9uQ291bnRfZmVhdHVyZT1cdTYwM2JcdTc5Y2RcdTdmYTRcdTYyMTBcdTU0NThcdTY1NzBcdTc2ZWUKK19VSV9TdGFuZGFyZERpc2Vhc2VNb2RlbF90b3RhbFBvcHVsYXRpb25Db3VudFJlY2lwcm9jYWxfZmVhdHVyZT1cdTYwM2JcdTc5Y2RcdTdmYTRcdTYyMTBcdTU0NThcdTY1NzBcdTc2ZWVcdTc2ODRcdTUwMTJcdTY1NzAKK19VSV9TdGFuZGFyZERpc2Vhc2VNb2RlbF90b3RhbEFyZWFfZmVhdHVyZT1cdTYwM2JcdTk3NjJcdTc5ZWYKK19VSV9TdGFuZGFyZERpc2Vhc2VNb2RlbFN0YXRlX2FyZWFSYXRpb19mZWF0dXJlPVx1OTc2Mlx1NzllZlx1NmJkNAorX1VJX1NJTGFiZWxWYWx1ZV9pUl9mZWF0dXJlPUlSCitfVUlfU0lMYWJlbFZhbHVlX2lGX2ZlYXR1cmU9SUYKK19VSV9TSV9pbmZlY3Rpb3VzTW9ydGFsaXR5UmF0ZV9mZWF0dXJlPVx1NGYyMFx1NjdkM1x1NzVjNVx1NmI3Ylx1NGVhMVx1NzM4NworX1VJX1N0YW5kYXJkRGlzZWFzZU1vZGVsX3JvYWROZXR3b3JrSW5mZWN0aW91c1Byb3BvcnRpb25fZmVhdHVyZT1cdTkwMWFcdThmYzdcdTc2ZjhcdTkwYmJcdThkZWZcdTdmNTFcdTYxMWZcdTY3ZDNcdTc2ODRcdTZiZDRcdTRmOGIKK19VSV9TdGFuZGFyZERpc2Vhc2VNb2RlbF9waHlzaWNhbGx5QWRqYWNlbnRJbmZlY3Rpb3VzUHJvcG9ydGlvbl9mZWF0dXJlPVx1NWI5ZVx1OTY0NVx1NGUwYVx1NzZmOFx1OTBiYlx1NjExZlx1NjdkM1x1NmJkNFx1NGY4YgorX1VJX1N0YW5kYXJkRGlzZWFzZU1vZGVsX3BoeXNpY2FsbHlBZGplY2VudEluZmVjdGlvdXNfZmVhdHVyZT1cdTViOWVcdTk2NDVcdTRlMGFcdTc2ZjhcdTkwYmJcdTRmMjBcdTY3ZDNcdTYwMjcKK19VSV9TdGFuZGFyZERpc2Vhc2VNb2RlbF9waHlzaWNhbGx5QWRqYWNlbnRJbmZlY3Rpb3VzX2ZlYXR1cmU9XHU1YjllXHU5NjQ1XHU0ZTBhXHU3NmY4XHU5MGJiXHU0ZjIwXHU2N2QzXHU2MDI3CitfVUlfU0lfcm9hZE5ldHdvcmtJbmZlY3Rpb3VzUHJvcG9ydGlvbl9mZWF0dXJlPVx1OTAxYVx1OGZjN1x1OGRlZlx1N2Y1MVx1NjExZlx1NjdkM1x1NzY4NFx1NmJkNFx1NGY4YgorX1VJX1NJX3BoeXNpY2FsbHlBZGphY2VudEluZmVjdGlvdXNQcm9wb3J0aW9uX2ZlYXR1cmU9XHU1YjllXHU5NjQ1XHU0ZTBhXHU3NmY4XHU5MGJiXHU2MTFmXHU2N2QzXHU2YmQ0XHU0ZjhiCitfVUlfQWdncmVnYXRpbmdTSURpc2Vhc2VNb2RlbF90eXBlPVx1ODA1YVx1NTQwOFNJXHU3NWJlXHU3NWM1XHU2YTIxXHU1NzhiCitfVUlfQWdncmVnYXRpbmdEaXNlYXNlTW9kZWxTdGF0ZV90eXBlPVx1ODA1YVx1NTQwOFx1NzViZVx1NzVjNVx1NmEyMVx1NTc4Ylx1NzJiNlx1NjAwMQorX1VJX0FnZ3JlZ2F0aW5nRGlzZWFzZU1vZGVsU3RhdGVfY2hpbGRyZW5zTGFiZWxzX2ZlYXR1cmU9XHU1MTNmXHU3YWU1XHU2ODA3XHU3YjdlCitfVUlfRGlzZWFzZU1vZGVsTGFiZWxfY3VycmVudERpc2Vhc2VNb2RlbExhYmVsVmFsdWVfZmVhdHVyZT1cdTc2ZWVcdTUyNGRcdTc1YmVcdTc1YzVcdTZhMjFcdTU3OGJcdTY4MDdcdTdiN2VcdTUwM2MKK19VSV9EaXNlYXNlTW9kZWxMYWJlbF9uZXh0RGlzZWFzZU1vZGVsTGFiZWxWYWx1ZV9mZWF0dXJlPVx1NGUwYlx1NGUwMFx1NGUyYVx1NzViZVx1NzVjNVx1NmEyMVx1NTc4Ylx1NjgwN1x1N2I3ZVx1NTAzYworX1VJX0VTdHJpbmdUb0VMaXN0TWFwRW50cnlfdHlwZT1Fc3RyaW5nXHU1MjMwRUxpc3RcdTY2MjBcdTVjMDRcdTk4NzkKK19VSV9FU3RyaW5nVG9FTGlzdE1hcEVudHJ5X2tleV9mZWF0dXJlPVx1OTFjZFx1NzBiOQorX1VJX0VTdHJpbmdUb0VMaXN0TWFwRW50cnlfdmFsdWVfZmVhdHVyZT1cdTRlZjdcdTUwM2MKK19VSV9BZ2dyZWdhdGluZ1NFSVJEaXNlYXNlTW9kZWxfdHlwZT1cdTgwNWFcdTU0MDhTRUlSXHU3NWJlXHU3NWM1XHU2YTIxXHU1NzhiCitfVUlfQWdncmVnYXRpbmdTSVJEaXNlYXNlTW9kZWxfdHlwZT1cdTgwNWFcdTU0MDhTSVJcdTc1YmVcdTc1YzVcdTZhMjFcdTU3OGIKK19VSV9JbmZlY3Rvcl9sYWJlbHNUb0luZmVjdF9mZWF0dXJlPVx1NjgwN1x1OGJiMFx1NGUzYVx1NjExZlx1NjdkMworX1VJX1N0b2NoYXN0aWNEaXNlYXNlTW9kZWxfdHlwZT1cdTk2OGZcdTY3M2FcdTc1YmVcdTc1YzVcdTZhMjFcdTU3OGIKK19VSV9TdGFuZGFyZFN0b2NoYXN0aWNEaXNlYXNlTW9kZWxfdHlwZT1cdTk2OGZcdTY3M2FcdTc1YmVcdTc1YzVcdTZhMjFcdTU3OGIKK19VSV9TdG9jaGFzdGljRGlzZWFzZU1vZGVsX3NlZWRfZmVhdHVyZT1cdTY0YWRcdTc5Y2QKK19VSV9TdG9jaGFzdGljRGlzZWFzZU1vZGVsX3JhbmRvbUdlbmVyYXRvcl9mZWF0dXJlPVx1OTY4Zlx1NjczYVx1NzUxZlx1NjIxMAorX1VJX1N0YW5kYXJkU3RvY2hhc3RpY0Rpc2Vhc2VNb2RlbF9nYWluX2ZlYXR1cmU9XHU1ODllXHU3NmNhCitfVUlfSW5mZWN0b3JfcG9wdWxhdGlvbklkZW50aWZpZXJfZmVhdHVyZT1cdTc5Y2RcdTdmYTRcdTY4MDdcdThiYzZcdTdiMjYKK19VSV9TdGFuZGFyZERpc2Vhc2VNb2RlbF9yZWZlcmVuY2VQb3B1bGF0aW9uRGVuc2l0eV9mZWF0dXJlPVx1NTNjMlx1ODAwM1x1NzljZFx1N2ZhNFx1NWJjNlx1NWVhNgorX1VJX1NJTGFiZWxWYWx1ZV9pbmNpZGVuY2VfZmVhdHVyZT1cdTUzZDFcdTc1YzVcdTczODcKK19VSV9TdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsVmFsdWVfaW5jaWRlbmNlX2ZlYXR1cmU9XHU1M2QxXHU3NWM1XHU3Mzg3CitfVUlfRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZV9pbmNpZGVuY2VfZmVhdHVyZT1cdTUzZDFcdTc1YzVcdTczODcKK19VSV9OZXdEZXRlcm1pbmlzdGljU0lEaXNlYXNlTW9kZWxfdHlwZT1cdTY1YjBcdTVlZmFcdTc4NmVcdTViOWFcdTYwMjdTSVx1NzViZVx1NzVjNVx1NmEyMVx1NTc4YgorX1VJX05ld0RldGVybWluaXN0aWNTSVJEaXNlYXNlTW9kZWxfdHlwZT1cdTY1YjBcdTVlZmFcdTc4NmVcdTViOWFcdTYwMjdTSVJcdTc1YmVcdTc1YzVcdTZhMjFcdTU3OGIKK19VSV9OZXdEZXRlcm1pbmlzdGljU0VJUkRpc2Vhc2VNb2RlbF90eXBlPVx1NjViMFx1NWVmYVx1Nzg2ZVx1NWI5YVx1NjAyN1NFSVJcdTc1YmVcdTc1YzVcdTZhMjFcdTU3OGIKK19VSV9TSV9mcmVxdWVuY3lEZXBlbmRlbnRfZmVhdHVyZT1cdTk4OTFcdTczODdcdTc2ZjhcdTUxNzMKK19VSV9TdGFuZGFyZERpc2Vhc2VNb2RlbF9zdGVwU2l6ZV9mZWF0dXJlPVx1NmI2NVx1OTU3ZgorX1VJX0Rpc2Vhc2VNb2RlbF9zdGVwU2l6ZV9mZWF0dXJlPVx1NmI2NVx1OTU3ZgorX1VJX0Rpc2Vhc2VNb2RlbF9jdXJyZW50WF9mZWF0dXJlPVx1NzZlZVx1NTI0ZFx1NzY4NFgKK19VSV9EaXNlYXNlTW9kZWxfcmVsYXRpdmVUb2xlcmFuY2VfZmVhdHVyZT1cdTc2ZjhcdTViZjlcdTUxNmNcdTVkZWUKK19VSV9EaXNlYXNlTW9kZWxMYWJlbF9kZWx0YVZhbHVlX2ZlYXR1cmU9XHU1ZGVlXHU1MDNjCitfVUlfRGlzZWFzZU1vZGVsTGFiZWxfY3VycmVudFlfZmVhdHVyZT1cdTVmNTNcdTUyNGRcdTAxNzgKK19VSV9EaXNlYXNlTW9kZWxfZmluaXRlRGlmZmVyZW5jZV9mZWF0dXJlPVx1NjcwOVx1OTY1MFx1NWRlZVx1NTIwNgorX1VJX0Rpc2Vhc2VNb2RlbF9mcmVxdWVuY3lEZXBlbmRlbnRfZmVhdHVyZT1cdTk4OTFcdTczODdcdTc2ZjhcdTUxNzMKK19VSV9TSVJJbm9jdWxhdG9yX3R5cGU9U0lSXHU2M2E1XHU3OWNkXHU1NjY4CitfVUlfU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbF9kZWx0YVN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZV9mZWF0dXJlPVx1NjgwN1x1NTFjNlx1NzViZVx1NzVjNVx1NmEyMVx1NTc4Ylx1NjgwN1x1N2I3ZVx1NWRlZVx1NTAzYworX1VJX1N0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWxfY3VycmVudFlTdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsVmFsdWVfZmVhdHVyZT1cdTVmNTNcdTUyNGRcdTY4MDdcdTUxYzZcdTc1YmVcdTc1YzVcdTZhMjFcdTU3OGJcdTY4MDdcdTdiN2VcdTc2ODRZXHU1MDNjCitfVUlfU0lSSW5vY3VsYXRvcl9pbm9jdWxhdGVkUGVyY2VudGFnZV9mZWF0dXJlPVx1NjNhNVx1NzljZFx1NzY4NFx1NzY3ZVx1NTIwNlx1NmJkNAorX1VJX0Rpc2Vhc2VNb2RlbF9iYWNrZ3JvdW5kQmlydGhSYXRlX2ZlYXR1cmU9XHU4MGNjXHU2NjZmXHU1MWZhXHU3NTFmXHU3Mzg3CitfVUlfRGlzZWFzZU1vZGVsTGFiZWxfY3VycmVudERpc2Vhc2VNb2RlbFRlbXBMYWJlbFZhbHVlX2ZlYXR1cmU9XHU3NmVlXHU1MjRkXHU3NWJlXHU3NWM1XHU2YTIxXHU1NzhiXHU2ZTI5XHU1ZWE2XHU2ODA3XHU3YjdlXHU1MDNjCisKK19VSV9EaXNlYXNlTW9kZWxpbmdQUGFnZT1cdTc1YmVcdTc1YzVcdTZhMjFcdTU3OGIKK19VSV9EaXNlYXNlTW9kZWxMYWJlbF95U2NhbGVfZmVhdHVyZT1ZXHU3Njg0XHU1OTI3XHU1YzBmCitfVUlfU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbF9jdXJyZW50TGFiZWxWYWx1ZV9mZWF0dXJlPVx1NWY1M1x1NTI0ZFx1NjgwN1x1N2I3ZVx1NTAzYworX1VJX1N0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWxfbmV4dExhYmVsVmFsdWVfZmVhdHVyZT1cdTRlMGJcdTRlMDBcdTRlMmFcdTY4MDdcdTdiN2VcdTUwM2MKK19VSV9TdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsX2RlbHRhTGFiZWxWYWx1ZV9mZWF0dXJlPVx1NjgwN1x1N2I3ZVx1NjNkMlx1NTAzYworX1VJX1N0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWxfcHJvYmVMYWJlbFZhbHVlX2ZlYXR1cmU9XHU2ZDRiXHU4YmQ1XHU2ODA3XHU3YjdlXHU1MDNjCitfVUlfSW50ZWdyYXRpb25MYWJlbF90eXBlPVx1OTZjNlx1NjIxMFx1NjgwN1x1N2I3ZQorX1VJX1N0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWxfb3JpZ2luYWxMYWJlbFZhbHVlX2ZlYXR1cmU9XHU1MzlmXHU2NzY1XHU3Njg0XHU2ODA3XHU3YjdlXHU1MDNjCitfVUlfU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbF90ZW1wTGFiZWxWYWx1ZV9mZWF0dXJlPVx1NmUyOVx1NWVhNlx1NjgwN1x1N2I3ZVx1NTAzYworX1VJX1NJTGFiZWxfY3VycmVudExhYmVsVmFsdWVfZmVhdHVyZT1cdTVmNTNcdTUyNGRcdTY4MDdcdTdiN2VcdTUwM2MKK19VSV9TSUxhYmVsX25leHRMYWJlbFZhbHVlX2ZlYXR1cmU9XHU0ZTBiXHU0ZTAwXHU0ZTJhXHU2ODA3XHU3YjdlXHU1MDNjCitfVUlfU0lMYWJlbF9kZWx0YUxhYmVsVmFsdWVfZmVhdHVyZT1cdTY4MDdcdTdiN2VcdTYzZDJcdTUwM2MKK19VSV9TSUxhYmVsX3Byb2JlTGFiZWxWYWx1ZV9mZWF0dXJlPVx1NmQ0Ylx1OGJkNVx1NjgwN1x1N2I3ZVx1NTAzYworX1VJX1NJTGFiZWxfdGVtcExhYmVsVmFsdWVfZmVhdHVyZT1cdTZlMjlcdTVlYTZcdTY4MDdcdTdiN2VcdTUwM2MKK19VSV9TSUxhYmVsX29yaWdpbmFsTGFiZWxWYWx1ZV9mZWF0dXJlPVx1NTM5Zlx1Njc2NVx1NzY4NFx1NjgwN1x1N2I3ZVx1NTAzYworX1VJX1NJTGFiZWxfZXJyb3JTY2FsZV9mZWF0dXJlPVx1OTUxOVx1OGJlZlx1ODljNFx1NmEyMQorX1VJX1NFSVJMYWJlbF9jdXJyZW50TGFiZWxWYWx1ZV9mZWF0dXJlPVx1NWY1M1x1NTI0ZFx1NjgwN1x1N2I3ZVx1NTAzYworX1VJX1NFSVJMYWJlbF9uZXh0TGFiZWxWYWx1ZV9mZWF0dXJlPVx1NGUwYlx1NGUwMFx1NGUyYVx1NjgwN1x1N2I3ZVx1NTAzYworX1VJX1NFSVJMYWJlbF9kZWx0YUxhYmVsVmFsdWVfZmVhdHVyZT1cdTY4MDdcdTdiN2VcdTYzZDJcdTUwM2MKK19VSV9TRUlSTGFiZWxfcHJvYmVMYWJlbFZhbHVlX2ZlYXR1cmU9XHU2ZDRiXHU4YmQ1XHU2ODA3XHU3YjdlXHU1MDNjCitfVUlfU0VJUkxhYmVsX3RlbXBMYWJlbFZhbHVlX2ZlYXR1cmU9XHU2ZTI5XHU1ZWE2XHU2ODA3XHU3YjdlXHU1MDNjCitfVUlfU0VJUkxhYmVsX29yaWdpbmFsTGFiZWxWYWx1ZV9mZWF0dXJlPVx1NTM5Zlx1Njc2NVx1NzY4NFx1NjgwN1x1N2I3ZVx1NTAzYworX1VJX1NFSVJMYWJlbF9lcnJvclNjYWxlX2ZlYXR1cmU9XHU5NTE5XHU4YmVmXHU4OWM0XHU2YTIxCitfVUlfU0lSTGFiZWxfY3VycmVudExhYmVsVmFsdWVfZmVhdHVyZT1cdTVmNTNcdTUyNGRcdTY4MDdcdTdiN2VcdTUwM2MKK19VSV9TSVJMYWJlbF9uZXh0TGFiZWxWYWx1ZV9mZWF0dXJlPVx1NGUwYlx1NGUwMFx1NGUyYVx1NjgwN1x1N2I3ZVx1NTAzYworX1VJX1NJUkxhYmVsX2RlbHRhTGFiZWxWYWx1ZV9mZWF0dXJlPVx1NjgwN1x1N2I3ZVx1NjNkMlx1NTAzYworX1VJX1NJUkxhYmVsX3Byb2JlTGFiZWxWYWx1ZV9mZWF0dXJlPVx1NmQ0Ylx1OGJkNVx1NjgwN1x1N2I3ZVx1NTAzYworX1VJX1NJUkxhYmVsX3RlbXBMYWJlbFZhbHVlX2ZlYXR1cmU9XHU2ZTI5XHU1ZWE2XHU2ODA3XHU3YjdlXHU1MDNjCitfVUlfU0lSTGFiZWxfb3JpZ2luYWxMYWJlbFZhbHVlX2ZlYXR1cmU9XHU1MzlmXHU2NzY1XHU3Njg0XHU2ODA3XHU3YjdlXHU1MDNjCitfVUlfU0lSTGFiZWxfZXJyb3JTY2FsZV9mZWF0dXJlPVx1OTUxOVx1OGJlZlx1ODljNFx1NmEyMQorX1VJX1NFSVJMYWJlbF9kZWx0YVZhbHVlX2ZlYXR1cmU9XHU1ZGVlXHU1MDNjCitfVUlfU0VJUkxhYmVsX3Byb2JlVmFsdWVfZmVhdHVyZT1cdTZkNGJcdThiZDVcdTY4MDdcdTdiN2UKK19VSV9TRUlSTGFiZWxfdGVtcFZhbHVlX2ZlYXR1cmU9XHU2ZTI5XHU1ZWE2XHU1MDNjCitfVUlfU0VJUkxhYmVsX29yaWdpbmFsVmFsdWVfZmVhdHVyZT1cdTUzOWZcdTU5Y2JcdTUwM2MKK19VSV9TSUxhYmVsX2RlbHRhVmFsdWVfZmVhdHVyZT1cdTVkZWVcdTUwM2MKK19VSV9TSUxhYmVsX3Byb2JlVmFsdWVfZmVhdHVyZT1cdTZkNGJcdThiZDVcdTY4MDdcdTdiN2UKK19VSV9TSUxhYmVsX3RlbXBWYWx1ZV9mZWF0dXJlPVx1NmUyOVx1NWVhNlx1NTAzYworX1VJX1NJTGFiZWxfb3JpZ2luYWxWYWx1ZV9mZWF0dXJlPVx1NTM5Zlx1NTljYlx1NTAzYworX1VJX1NJUkxhYmVsX2RlbHRhVmFsdWVfZmVhdHVyZT1cdTVkZWVcdTUwM2MKK19VSV9TSVJMYWJlbF9wcm9iZVZhbHVlX2ZlYXR1cmU9XHU2ZDRiXHU4YmQ1XHU2ODA3XHU3YjdlCitfVUlfU0lSTGFiZWxfdGVtcFZhbHVlX2ZlYXR1cmU9XHU2ZTI5XHU1ZWE2XHU1MDNjCitfVUlfU0lSTGFiZWxfb3JpZ2luYWxWYWx1ZV9mZWF0dXJlPVx1NTM5Zlx1NTljYlx1NTAzYworX1VJX0ludGVncmF0aW9uRGVjb3JhdG9yX3R5cGU9XHU5NmM2XHU2MjEwXHU0ZmVlXHU5OTcwXHU1NjY4CitfVUlfSW50ZWdyYXRpb25MYWJlbFZhbHVlX3R5cGU9XHU5NmM2XHU2MjEwXHU2ODA3XHU3YjdlXHU1MDNjCitfVUlfUG9pc3NvblNJRGlzZWFzZU1vZGVsX3R5cGU9XHU2Y2NhXHU2NzdlU0lcdTc1YmVcdTc1YzVcdTZhMjFcdTU3OGIKK19VSV9TdG9jaGFzdGljUG9pc3NvblNJRGlzZWFzZU1vZGVsX3R5cGU9XHU5NjhmXHU2NzNhXHU2Y2NhXHU2NzdlU0lcdTc1YmVcdTc1YzVcdTZhMjFcdTU3OGIKK19VSV9TdG9jaGFzdGljUG9pc3NvblNJUkRpc2Vhc2VNb2RlbF90eXBlPVx1OTY4Zlx1NjczYVx1NmNjYVx1Njc3ZVNJUlx1NzViZVx1NzVjNVx1NmEyMVx1NTc4YgorX1VJX1N0b2NoYXN0aWNQb2lzc29uU0VJUkRpc2Vhc2VNb2RlbF90eXBlPVx1OTY4Zlx1NjczYVx1NmNjYVx1Njc3ZVNFSVJcdTc1YmVcdTc1YzVcdTZhMjFcdTU3OGIKK19VSV9TdG9jaGFzdGljUG9pc3NvbkRpc2Vhc2VNb2RlbF90eXBlPVx1OTY4Zlx1NjczYVx1NmNjYVx1Njc3ZVx1NzViZVx1NzVjNVx1NmEyMVx1NTc4YgorX1VJX1BvcHVsYXRpb25Nb2RlbF90eXBlPVx1NzljZFx1N2ZhNFx1NmEyMVx1NTc4YgorX1VJX1N0YW5kYXJkUG9wdWxhdGlvbk1vZGVsX3R5cGU9XHU3OWNkXHU3ZmE0XHU2YTIxXHU1NzhiCitfVUlfUG9wdWxhdGlvbk1vZGVsTGFiZWxfdHlwZT1cdTc5Y2RcdTdmYTRcdTZhMjFcdTU3OGJcdTY4MDdcdTdiN2UKK19VSV9TdGFuZGFyZFBvcHVsYXRpb25Nb2RlbExhYmVsX3R5cGU9XHU3OWNkXHU3ZmE0XHU2YTIxXHU1NzhiXHU2ODA3XHU3YjdlCitfVUlfUG9wdWxhdGlvbk1vZGVsTGFiZWxWYWx1ZV90eXBlPVx1NzljZFx1N2ZhNFx1NmEyMVx1NTc4Ylx1NzY4NFx1NjgwN1x1N2I3ZVx1NTAzYworX1VJX1N0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWxWYWx1ZV90eXBlPVx1NzljZFx1N2ZhNFx1NmEyMVx1NTc4Ylx1NzY4NFx1NjgwN1x1N2I3ZVx1NTAzYworX1VJX1N0b2NoYXN0aWNTdGFuZGFyZFBvcHVsYXRpb25Nb2RlbF90eXBlPVx1OTY4Zlx1NTM3M1x1NjgwN1x1NTFjNlx1NzljZFx1N2ZhNFx1NmEyMVx1NTc4YgorX1VJX0RlbW9ncmFwaGljUG9wdWxhdGlvbk1vZGVsX3R5cGU9XHU3OWNkXHU3ZmE0XHU3ZWRmXHU4YmExXHU1YjY2XHU2YTIxXHU1NzhiCitfVUlfUG9wdWxhdGlvbkdyb3VwX3R5cGU9XHU3OWNkXHU3ZmE0XHU1MjA2XHU3ZWM0CitfVUlfRGlzZWFzZU1vZGVsTGFiZWxfcG9wdWxhdGlvbk1vZGVsTGFiZWxfZmVhdHVyZT1cdTc5Y2RcdTdmYTRcdTZhMjFcdTU3OGJcdTY4MDdcdTdiN2UKK19VSV9Qb3B1bGF0aW9uTW9kZWxfcG9wdWxhdGlvbklkZW50aWZpZXJfZmVhdHVyZT1cdTc5Y2RcdTdmYTRcdTY4MDdcdThiYzZcdTdiMjYKK19VSV9Qb3B1bGF0aW9uTW9kZWxfbmFtZV9mZWF0dXJlPVx1NTQwZFx1NzlmMAorX1VJX1N0YW5kYXJkUG9wdWxhdGlvbk1vZGVsX2JpcnRoUmF0ZV9mZWF0dXJlPVx1NTFmYVx1NzUxZlx1NzM4NworX1VJX1N0YW5kYXJkUG9wdWxhdGlvbk1vZGVsX2RlYXRoUmF0ZV9mZWF0dXJlPVx1NmI3Ylx1NGVhMVx1NzM4NworX1VJX1N0YW5kYXJkUG9wdWxhdGlvbk1vZGVsX3RpbWVQZXJpb2RfZmVhdHVyZT1cdTY1ZjZcdTk1ZjRcdTZiYjUKK19VSV9Qb3B1bGF0aW9uTW9kZWxMYWJlbF9wb3B1bGF0aW9uTGFiZWxfZmVhdHVyZT1cdTc5Y2RcdTdmYTRcdTY4MDdcdTdiN2UKK19VSV9Qb3B1bGF0aW9uTW9kZWxMYWJlbF9wb3B1bGF0aW9uSWRlbnRpZmllcl9mZWF0dXJlPVx1NzljZFx1N2ZhNFx1NjgwN1x1OGJjNlx1N2IyNgorX1VJX1N0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWxfZGVsdGFWYWx1ZV9mZWF0dXJlPVx1NWRlZVx1NTAzYworX1VJX1N0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWxfcHJvYmVWYWx1ZV9mZWF0dXJlPVx1NmQ0Ylx1OGJkNVx1NjgwN1x1N2I3ZQorX1VJX1N0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWxfdGVtcFZhbHVlX2ZlYXR1cmU9XHU2ZTI5XHU1ZWE2XHU1MDNjCitfVUlfU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxMYWJlbF9vcmlnaW5hbFZhbHVlX2ZlYXR1cmU9XHU1MzlmXHU1OWNiXHU1MDNjCitfVUlfU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxMYWJlbF9lcnJvclNjYWxlX2ZlYXR1cmU9XHU5NTE5XHU4YmVmXHU4OWM0XHU2YTIxCitfVUlfU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxMYWJlbFZhbHVlX2NvdW50X2ZlYXR1cmU9XHU4YmExXHU2NTcwCitfVUlfU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxMYWJlbFZhbHVlX2luY2lkZW5jZV9mZWF0dXJlPVx1NTNkMVx1NzVjNVx1NzM4NworX1VJX1N0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWxWYWx1ZV9iaXJ0aHNfZmVhdHVyZT1cdTUxZmFcdTc1MWYKK19VSV9TdGFuZGFyZFBvcHVsYXRpb25Nb2RlbExhYmVsVmFsdWVfZGVhdGhzX2ZlYXR1cmU9XHU2YjdiXHU0ZWExCitfVUlfU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxMYWJlbFZhbHVlX2RlbnNpdHlfZmVhdHVyZT1cdTViYzZcdTVlYTYKK19VSV9TdG9jaGFzdGljU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxfZ2Fpbl9mZWF0dXJlPVx1NTg5ZVx1NzZjYQorX1VJX0RlbW9ncmFwaGljUG9wdWxhdGlvbk1vZGVsX3BvcHVsYXRpb25Hcm91cHNfZmVhdHVyZT1cdTc5Y2RcdTdmYTRcdTUyMDZcdTdlYzQKK19VSV9Qb3B1bGF0aW9uR3JvdXBfaWRlbnRpZmllcl9mZWF0dXJlPVx1NjgwN1x1OGJjNlx1N2IyNgorX1VJX1BvcHVsYXRpb25Hcm91cF9mcmFjdGlvbl9mZWF0dXJlPVx1NTIwNlx1NjU3MAorX1VJX1NJSW5mZWN0b3JfaW5mZWN0aW9uc19mZWF0dXJlPVx1NjExZlx1NjdkMworX1VJX1NJSW5mZWN0b3JfcGVyY2VudGFnZV9mZWF0dXJlPVx1NzY3ZVx1NTIwNlx1NmJkNAorX1VJX1NJUklub2N1bGF0b3JfaW5vY3VsYXRpb25zX2ZlYXR1cmU9XHU2M2E1XHU3OWNkCitfVUlfSW5mZWN0b3JfcGVyY2VudGFnZV9mZWF0dXJlPVx1NzY3ZVx1NTIwNlx1NmJkNAorX1VJX0luZmVjdG9yX2luZmVjdFBlcmNlbnRhZ2VfZmVhdHVyZT1cdTYxMWZcdTY3ZDNcdTc2ODRcdTc2N2VcdTUyMDZcdTZiZDQKK19VSV9TSVJJbm9jdWxhdG9yX2lub2N1bGF0ZVBlcmNlbnRhZ2VfZmVhdHVyZT1cdTYzYTVcdTc5Y2RcdTc2ODRcdTc2N2VcdTUyMDZcdTZiZDQKK19VSV9JbmZlY3Rvcklub2N1bGF0b3JDb2xsZWN0aW9uX3R5cGU9XHU2MTFmXHU2N2QzXHU4MDA1XHU1NDhjXHU2M2E1XHU3OWNkXHU1NjY4XHU3Njg0XHU5NmM2XHU1NDA4CitfVUlfSW5mZWN0b3JJbm9jdWxhdG9yQ29sbGVjdGlvbl9saXN0X2ZlYXR1cmU9XHU3NmVlXHU1ZjU1CitfVUlfSW5mZWN0b3JJbm9jdWxhdG9yQ29sbGVjdGlvbl9pbXBvcnRGb2xkZXJfZmVhdHVyZT1cdTViZmNcdTUxNjVcdTY1ODdcdTRlZjZcdTU5MzkKK19VSV9TSV9jaGFyYWN0ZXJpc3RpY01peGluZ0Rpc3RhbmNlX2ZlYXR1cmU9XHU3Mjc5XHU1ZjgxXHU2ZGY3XHU1NDA4XHU4ZGRkXHU3OWJiCitfVUlfU3RhbmRhcmREaXNlYXNlTW9kZWxfY2hhcmFjdGVyaXN0aWNNaXhpbmdEaXN0YW5jZV9mZWF0dXJlPVx1NzI3OVx1NWY4MVx1NmRmN1x1NTQwOFx1OGRkZFx1NzliYgorX1VJX1NJTGFiZWxWYWx1ZV9kaXNlYXNlRGVhdGhzX2ZlYXR1cmU9XHU3NWJlXHU3NWM1XHU2YjdiXHU0ZWExCitfVUlfU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbFZhbHVlX2Rpc2Vhc2VEZWF0aHNfZmVhdHVyZT1cdTc1YmVcdTc1YzVcdTZiN2JcdTRlYTEKK19VSV9JbmZlY3Rvcl90YXJnZXRGZWF0dXJlX2ZlYXR1cmU9XHU3NmVlXHU2ODA3XHU3Mjc5XHU1ZjgxCitfVUlfTGFiZWxWYWx1ZVRlc3RfdHlwZT1MYWJlbCBWYWx1ZSBUZXN0CitfVUlfTGFiZWxWYWx1ZVRlc3RfbW9kZWxOYW1lX2ZlYXR1cmU9TW9kZWwgTmFtZQorX1VJX0xhYmVsVmFsdWVUZXN0X3RhcmdldFVSSV9mZWF0dXJlPVx1NzZlZVx1NjgwN1VSSQorX1VJX0xhYmVsVmFsdWVUZXN0X3N0YXRlX2ZlYXR1cmU9U3RhdGUKK19VSV9MYWJlbFZhbHVlVGVzdF90aHJlc2hvbGRfZmVhdHVyZT1UaHJlc2hvbGQKK19VSV9MYWJlbFZhbHVlVGVzdF9wcmVkaWNhdGVfZmVhdHVyZT1cdTYzY2ZcdThmZjAKK19VSV9MYWJlbFZhbHVlVGVzdF9wb3B1bGF0aW9uSWRlbnRpZmllcl9mZWF0dXJlPVx1NzljZFx1N2ZhNFx1NjgwN1x1OGJjNlx1N2IyNgpkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMvc2NoZW1hL2Rpc2Vhc2UuZXhzZCBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL3NjaGVtYS9kaXNlYXNlLmV4c2QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDVkY2RlYgotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL3NjaGVtYS9kaXNlYXNlLmV4c2QKQEAgLTAsMCArMSw5NSBAQAorPD94bWwgdmVyc2lvbj0nMS4wJyBlbmNvZGluZz0nVVRGLTgnPz4KKzwhLS0gU2NoZW1hIGZpbGUgd3JpdHRlbiBieSBQREUgLS0+Cis8c2NoZW1hIHRhcmdldE5hbWVzcGFjZT0ib3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzIj4KKzxhbm5vdGF0aW9uPgorICAgICAgPGFwcEluZm8+CisgICAgICAgICA8bWV0YS5zY2hlbWEgcGx1Z2luPSJvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMiIGlkPSJkaXNlYXNlIiBuYW1lPSJTVEVNIERpc2Vhc2UgRGVmaW5pdGlvbiIvPgorICAgICAgPC9hcHBJbmZvPgorICAgICAgPGRvY3VtZW50YXRpb24+CisgICAgICAgICBbRW50ZXIgZGVzY3JpcHRpb24gb2YgdGhpcyBleHRlbnNpb24gcG9pbnQuXQorICAgICAgPC9kb2N1bWVudGF0aW9uPgorICAgPC9hbm5vdGF0aW9uPgorCisgICA8aW5jbHVkZSBzY2hlbWFMb2NhdGlvbj0ic2NoZW1hOi8vb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NjaGVtYS9zdGVtX2NhdGVnb3J5LmV4c2QiLz4KKworICAgPGluY2x1ZGUgc2NoZW1hTG9jYXRpb249InNjaGVtYTovL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zY2hlbWEvZHVibGluX2NvcmUuZXhzZCIvPgorCisgICA8ZWxlbWVudCBuYW1lPSJleHRlbnNpb24iPgorICAgICAgPGNvbXBsZXhUeXBlPgorICAgICAgICAgPHNlcXVlbmNlPgorICAgICAgICAgICAgPGVsZW1lbnQgcmVmPSJzdGVtX2NhdGVnb3J5IiBtaW5PY2N1cnM9IjEiIG1heE9jY3Vycz0idW5ib3VuZGVkIi8+CisgICAgICAgICAgICA8ZWxlbWVudCByZWY9ImR1Ymxpbl9jb3JlIiBtaW5PY2N1cnM9IjEiIG1heE9jY3Vycz0idW5ib3VuZGVkIi8+CisgICAgICAgICA8L3NlcXVlbmNlPgorICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJwb2ludCIgdHlwZT0ic3RyaW5nIiB1c2U9InJlcXVpcmVkIj4KKyAgICAgICAgICAgIDxhbm5vdGF0aW9uPgorICAgICAgICAgICAgICAgPGRvY3VtZW50YXRpb24+CisgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgIDwvZG9jdW1lbnRhdGlvbj4KKyAgICAgICAgICAgIDwvYW5ub3RhdGlvbj4KKyAgICAgICAgIDwvYXR0cmlidXRlPgorICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJpZCIgdHlwZT0ic3RyaW5nIj4KKyAgICAgICAgICAgIDxhbm5vdGF0aW9uPgorICAgICAgICAgICAgICAgPGRvY3VtZW50YXRpb24+CisgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgIDwvZG9jdW1lbnRhdGlvbj4KKyAgICAgICAgICAgIDwvYW5ub3RhdGlvbj4KKyAgICAgICAgIDwvYXR0cmlidXRlPgorICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJuYW1lIiB0eXBlPSJzdHJpbmciPgorICAgICAgICAgICAgPGFubm90YXRpb24+CisgICAgICAgICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KKyAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgorICAgICAgICAgICAgICAgPGFwcEluZm8+CisgICAgICAgICAgICAgICAgICA8bWV0YS5hdHRyaWJ1dGUgdHJhbnNsYXRhYmxlPSJ0cnVlIi8+CisgICAgICAgICAgICAgICA8L2FwcEluZm8+CisgICAgICAgICAgICA8L2Fubm90YXRpb24+CisgICAgICAgICA8L2F0dHJpYnV0ZT4KKyAgICAgIDwvY29tcGxleFR5cGU+CisgICA8L2VsZW1lbnQ+CisKKyAgIDxhbm5vdGF0aW9uPgorICAgICAgPGFwcEluZm8+CisgICAgICAgICA8bWV0YS5zZWN0aW9uIHR5cGU9InNpbmNlIi8+CisgICAgICA8L2FwcEluZm8+CisgICAgICA8ZG9jdW1lbnRhdGlvbj4KKyAgICAgICAgIFtFbnRlciB0aGUgZmlyc3QgcmVsZWFzZSBpbiB3aGljaCB0aGlzIGV4dGVuc2lvbiBwb2ludCBhcHBlYXJzLl0KKyAgICAgIDwvZG9jdW1lbnRhdGlvbj4KKyAgIDwvYW5ub3RhdGlvbj4KKworICAgPGFubm90YXRpb24+CisgICAgICA8YXBwSW5mbz4KKyAgICAgICAgIDxtZXRhLnNlY3Rpb24gdHlwZT0iZXhhbXBsZXMiLz4KKyAgICAgIDwvYXBwSW5mbz4KKyAgICAgIDxkb2N1bWVudGF0aW9uPgorICAgICAgICAgW0VudGVyIGV4dGVuc2lvbiBwb2ludCB1c2FnZSBleGFtcGxlIGhlcmUuXQorICAgICAgPC9kb2N1bWVudGF0aW9uPgorICAgPC9hbm5vdGF0aW9uPgorCisgICA8YW5ub3RhdGlvbj4KKyAgICAgIDxhcHBJbmZvPgorICAgICAgICAgPG1ldGEuc2VjdGlvbiB0eXBlPSJhcGlJbmZvIi8+CisgICAgICA8L2FwcEluZm8+CisgICAgICA8ZG9jdW1lbnRhdGlvbj4KKyAgICAgICAgIFtFbnRlciBBUEkgaW5mb3JtYXRpb24gaGVyZS5dCisgICAgICA8L2RvY3VtZW50YXRpb24+CisgICA8L2Fubm90YXRpb24+CisKKyAgIDxhbm5vdGF0aW9uPgorICAgICAgPGFwcEluZm8+CisgICAgICAgICA8bWV0YS5zZWN0aW9uIHR5cGU9ImltcGxlbWVudGF0aW9uIi8+CisgICAgICA8L2FwcEluZm8+CisgICAgICA8ZG9jdW1lbnRhdGlvbj4KKyAgICAgICAgIFtFbnRlciBpbmZvcm1hdGlvbiBhYm91dCBzdXBwbGllZCBpbXBsZW1lbnRhdGlvbiBvZiB0aGlzIGV4dGVuc2lvbiBwb2ludC5dCisgICAgICA8L2RvY3VtZW50YXRpb24+CisgICA8L2Fubm90YXRpb24+CisKKyAgIDxhbm5vdGF0aW9uPgorICAgICAgPGFwcEluZm8+CisgICAgICAgICA8bWV0YS5zZWN0aW9uIHR5cGU9ImNvcHlyaWdodCIvPgorICAgICAgPC9hcHBJbmZvPgorICAgICAgPGRvY3VtZW50YXRpb24+CisgICAgICAgICAKKyAgICAgIDwvZG9jdW1lbnRhdGlvbj4KKyAgIDwvYW5ub3RhdGlvbj4KKworPC9zY2hlbWE+CmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy9zY2hlbWEvZGlzZWFzZW1vZGVsLmV4c2QgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy9zY2hlbWEvZGlzZWFzZW1vZGVsLmV4c2QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWE5NWI5NAotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL3NjaGVtYS9kaXNlYXNlbW9kZWwuZXhzZApAQCAtMCwwICsxLDEwOCBAQAorPD94bWwgdmVyc2lvbj0nMS4wJyBlbmNvZGluZz0nVVRGLTgnPz4KKzwhLS0gU2NoZW1hIGZpbGUgd3JpdHRlbiBieSBQREUgLS0+Cis8c2NoZW1hIHRhcmdldE5hbWVzcGFjZT0ib3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzIj4KKzxhbm5vdGF0aW9uPgorICAgICAgPGFwcEluZm8+CisgICAgICAgICA8bWV0YS5zY2hlbWEgcGx1Z2luPSJvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMiIGlkPSJkaXNlYXNlbW9kZWwiIG5hbWU9IlNURU0gRGlzZWFzZSBNb2RlbCIvPgorICAgICAgPC9hcHBJbmZvPgorICAgICAgPGRvY3VtZW50YXRpb24+CisgICAgICAgICBbRW50ZXIgZGVzY3JpcHRpb24gb2YgdGhpcyBleHRlbnNpb24gcG9pbnQuXQorICAgICAgPC9kb2N1bWVudGF0aW9uPgorICAgPC9hbm5vdGF0aW9uPgorCisgICA8aW5jbHVkZSBzY2hlbWFMb2NhdGlvbj0ic2NoZW1hOi8vb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NjaGVtYS9kdWJsaW5fY29yZS5leHNkIi8+CisKKyAgIDxlbGVtZW50IG5hbWU9ImV4dGVuc2lvbiI+CisgICAgICA8Y29tcGxleFR5cGU+CisgICAgICAgICA8c2VxdWVuY2U+CisgICAgICAgICAgICA8ZWxlbWVudCByZWY9ImNsYXNzZGVmIi8+CisgICAgICAgICAgICA8ZWxlbWVudCByZWY9ImR1Ymxpbl9jb3JlIi8+CisgICAgICAgICA8L3NlcXVlbmNlPgorICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJwb2ludCIgdHlwZT0ic3RyaW5nIiB1c2U9InJlcXVpcmVkIj4KKyAgICAgICAgICAgIDxhbm5vdGF0aW9uPgorICAgICAgICAgICAgICAgPGRvY3VtZW50YXRpb24+CisgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgIDwvZG9jdW1lbnRhdGlvbj4KKyAgICAgICAgICAgIDwvYW5ub3RhdGlvbj4KKyAgICAgICAgIDwvYXR0cmlidXRlPgorICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJpZCIgdHlwZT0ic3RyaW5nIj4KKyAgICAgICAgICAgIDxhbm5vdGF0aW9uPgorICAgICAgICAgICAgICAgPGRvY3VtZW50YXRpb24+CisgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgIDwvZG9jdW1lbnRhdGlvbj4KKyAgICAgICAgICAgIDwvYW5ub3RhdGlvbj4KKyAgICAgICAgIDwvYXR0cmlidXRlPgorICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJuYW1lIiB0eXBlPSJzdHJpbmciPgorICAgICAgICAgICAgPGFubm90YXRpb24+CisgICAgICAgICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KKyAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgorICAgICAgICAgICAgICAgPGFwcEluZm8+CisgICAgICAgICAgICAgICAgICA8bWV0YS5hdHRyaWJ1dGUgdHJhbnNsYXRhYmxlPSJ0cnVlIi8+CisgICAgICAgICAgICAgICA8L2FwcEluZm8+CisgICAgICAgICAgICA8L2Fubm90YXRpb24+CisgICAgICAgICA8L2F0dHJpYnV0ZT4KKyAgICAgIDwvY29tcGxleFR5cGU+CisgICA8L2VsZW1lbnQ+CisKKyAgIDxlbGVtZW50IG5hbWU9ImNsYXNzZGVmIj4KKyAgICAgIDxjb21wbGV4VHlwZT4KKyAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0iY2xhc3MiIHR5cGU9InN0cmluZyIgdXNlPSJyZXF1aXJlZCI+CisgICAgICAgICAgICA8YW5ub3RhdGlvbj4KKyAgICAgICAgICAgICAgIDxkb2N1bWVudGF0aW9uPgorICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICA8L2RvY3VtZW50YXRpb24+CisgICAgICAgICAgICAgICA8YXBwSW5mbz4KKyAgICAgICAgICAgICAgICAgIDxtZXRhLmF0dHJpYnV0ZSBraW5kPSJqYXZhIiBiYXNlZE9uPSJvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuaW1wbC5EaXNlYXNlTW9kZWxJbXBsOm9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5EaXNlYXNlTW9kZWwiLz4KKyAgICAgICAgICAgICAgIDwvYXBwSW5mbz4KKyAgICAgICAgICAgIDwvYW5ub3RhdGlvbj4KKyAgICAgICAgIDwvYXR0cmlidXRlPgorICAgICAgPC9jb21wbGV4VHlwZT4KKyAgIDwvZWxlbWVudD4KKworICAgPGFubm90YXRpb24+CisgICAgICA8YXBwSW5mbz4KKyAgICAgICAgIDxtZXRhLnNlY3Rpb24gdHlwZT0ic2luY2UiLz4KKyAgICAgIDwvYXBwSW5mbz4KKyAgICAgIDxkb2N1bWVudGF0aW9uPgorICAgICAgICAgW0VudGVyIHRoZSBmaXJzdCByZWxlYXNlIGluIHdoaWNoIHRoaXMgZXh0ZW5zaW9uIHBvaW50IGFwcGVhcnMuXQorICAgICAgPC9kb2N1bWVudGF0aW9uPgorICAgPC9hbm5vdGF0aW9uPgorCisgICA8YW5ub3RhdGlvbj4KKyAgICAgIDxhcHBJbmZvPgorICAgICAgICAgPG1ldGEuc2VjdGlvbiB0eXBlPSJleGFtcGxlcyIvPgorICAgICAgPC9hcHBJbmZvPgorICAgICAgPGRvY3VtZW50YXRpb24+CisgICAgICAgICBbRW50ZXIgZXh0ZW5zaW9uIHBvaW50IHVzYWdlIGV4YW1wbGUgaGVyZS5dCisgICAgICA8L2RvY3VtZW50YXRpb24+CisgICA8L2Fubm90YXRpb24+CisKKyAgIDxhbm5vdGF0aW9uPgorICAgICAgPGFwcEluZm8+CisgICAgICAgICA8bWV0YS5zZWN0aW9uIHR5cGU9ImFwaUluZm8iLz4KKyAgICAgIDwvYXBwSW5mbz4KKyAgICAgIDxkb2N1bWVudGF0aW9uPgorICAgICAgICAgW0VudGVyIEFQSSBpbmZvcm1hdGlvbiBoZXJlLl0KKyAgICAgIDwvZG9jdW1lbnRhdGlvbj4KKyAgIDwvYW5ub3RhdGlvbj4KKworICAgPGFubm90YXRpb24+CisgICAgICA8YXBwSW5mbz4KKyAgICAgICAgIDxtZXRhLnNlY3Rpb24gdHlwZT0iaW1wbGVtZW50YXRpb24iLz4KKyAgICAgIDwvYXBwSW5mbz4KKyAgICAgIDxkb2N1bWVudGF0aW9uPgorICAgICAgICAgW0VudGVyIGluZm9ybWF0aW9uIGFib3V0IHN1cHBsaWVkIGltcGxlbWVudGF0aW9uIG9mIHRoaXMgZXh0ZW5zaW9uIHBvaW50Ll0KKyAgICAgIDwvZG9jdW1lbnRhdGlvbj4KKyAgIDwvYW5ub3RhdGlvbj4KKworICAgPGFubm90YXRpb24+CisgICAgICA8YXBwSW5mbz4KKyAgICAgICAgIDxtZXRhLnNlY3Rpb24gdHlwZT0iY29weXJpZ2h0Ii8+CisgICAgICA8L2FwcEluZm8+CisgICAgICA8ZG9jdW1lbnRhdGlvbj4KKyAgICAgICAgIAorICAgICAgPC9kb2N1bWVudGF0aW9uPgorICAgPC9hbm5vdGF0aW9uPgorCis8L3NjaGVtYT4KZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvQWN0aXZhdG9yLmphdmEgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL0FjdGl2YXRvci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBlNDhkYTAKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL0FjdGl2YXRvci5qYXZhCkBAIC0wLDAgKzEsMjE4IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVsczsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSUNvbmZpZ3VyYXRpb25FbGVtZW50OworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JRXh0ZW5zaW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JRXh0ZW5zaW9uUG9pbnQ7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklFeHRlbnNpb25SZWdpc3RyeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGxhdGZvcm07CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlN0YXR1czsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRVN0cnVjdHVyYWxGZWF0dXJlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5Db25zdGFudHM7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5EdWJsaW5Db3JlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5EaXNlYXNlTW9kZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLnByb3ZpZGVyLlN0YW5kYXJkSGlzdG9yeVByb3ZpZGVyQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLnByb3ZpZGVyLlN0YW5kYXJkUmVsYXRpdmVWYWx1ZUhpc3RvcnlQcm92aWRlckFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5wcm92aWRlci5TdGFuZGFyZFJlbGF0aXZlVmFsdWVQcm92aWRlckFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLnBsdWdpbi5BYnN0cmFjdFVJUGx1Z2luOworaW1wb3J0IG9yZy5vc2dpLmZyYW1ld29yay5CdW5kbGVDb250ZXh0OworCisvKioKKyAqIFRoZSBhY3RpdmF0b3IgY2xhc3MgY29udHJvbHMgdGhlIHBsdWctaW4gbGlmZSBjeWNsZQorICovCitwdWJsaWMgY2xhc3MgQWN0aXZhdG9yIGV4dGVuZHMgQWJzdHJhY3RVSVBsdWdpbiB7CisKKwkvKioKKwkgKiBUaGUgcGx1Zy1pbiBJRAorCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFBMVUdJTl9JRCA9IENvbnN0YW50cy5JRF9ST09UICsgIi5kaXNlYXNlbW9kZWxzIjsKKwkKKwlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBDTEFTU19GSUVMRCA9ICJjbGFzcyI7CisJCisKKwkvLyBUaGUgc2hhcmVkIGluc3RhbmNlCisJcHJpdmF0ZSBzdGF0aWMgQWN0aXZhdG9yIHBsdWdpbjsKKworCS8qKgorCSAqIFRoZSBjb25zdHJ1Y3RvcgorCSAqLworCXB1YmxpYyBBY3RpdmF0b3IoKSB7CisJCXBsdWdpbiA9IHRoaXM7CisJfQorCisJLyoqCisJICogQHBhcmFtIGNvbnRleHQKKwkgKiBAdGhyb3dzIEV4Y2VwdGlvbgorCSAqLworCXB1YmxpYyB2b2lkIHN0YXJ0KEJ1bmRsZUNvbnRleHQgY29udGV4dCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCXN1cGVyLnN0YXJ0KGNvbnRleHQpOworCQkvLyBXZSBjcmVhdGUgdGhlc2UgaW5zdGFuY2VzIHNvIHRoYXQgdGhlaXIgY29uc3RydWN0b3JzIHJ1biBhbmQgdGhleQorCQkvLyB0aGVuIGFkZCB0aGVtc2VsdmVzIHRvIGEgY29sbGVjdGlvbiBvZiBmYWN0b3JpZXMgbWFpbnRhaW5lZCBieSB0aGUKKwkJLy8gZmFjdG9yeSBpbnRlcmZhY2VzIHRoZXkgaW1wbGVtZW50IHJlc3BlY3RpdmVseS4KKwkJCisJCS8vIEFkZCB0byBSZWxhdGl2ZVZhbHVlUHJvdmlkZXJBZGFwdGVyRmFjdG9yeS5JTlNUQU5DRQorCQluZXcgU3RhbmRhcmRSZWxhdGl2ZVZhbHVlUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSgpOworCQkKKwkJLy8gQWRkIHRvIFJlbGF0aXZlVmFsdWVIaXN0b3J5UHJvdmlkZXJBZGFwdGVyRmFjdG9yeS5JTlNUQU5DRQorCQluZXcgU3RhbmRhcmRSZWxhdGl2ZVZhbHVlSGlzdG9yeVByb3ZpZGVyQWRhcHRlckZhY3RvcnkoKTsKKwkJCisJCS8vIEFkZCB0byBIaXN0b3J5UHJvdmlkZXJBZGFwdGVyRmFjdG9yeS5JTlNUQU5DRQorCQluZXcgU3RhbmRhcmRIaXN0b3J5UHJvdmlkZXJBZGFwdGVyRmFjdG9yeSgpOworCX0gLy8gc3RhcnQKKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBsdWdpbiNzdG9wKG9yZy5vc2dpLmZyYW1ld29yay5CdW5kbGVDb250ZXh0KQorCSAqLworCXB1YmxpYyB2b2lkIHN0b3AoQnVuZGxlQ29udGV4dCBjb250ZXh0KSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJcGx1Z2luID0gbnVsbDsKKwkJc3VwZXIuc3RvcChjb250ZXh0KTsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBzaGFyZWQgaW5zdGFuY2UKKwkgKiAKKwkgKiBAcmV0dXJuIHRoZSBzaGFyZWQgaW5zdGFuY2UKKwkgKi8KKwlwdWJsaWMgc3RhdGljIEFjdGl2YXRvciBnZXREZWZhdWx0KCkgeworCQlyZXR1cm4gcGx1Z2luOworCX0KKworCQorCS8qKgorCSAqCisJICogQHBhcmFtIGRpc2Vhc2VNb2RlbAorCSAqIEByZXR1cm4KKwkgKi8KKwlwdWJsaWMgc3RhdGljIER1YmxpbkNvcmUgZ2V0UGx1Z2luRHVibGluQ29yZShEaXNlYXNlTW9kZWwgZGlzZWFzZU1vZGVsICkgeworCQlTdHJpbmcgZGlzZWFzZU1vZGVsQ2xhc3MgPSBkaXNlYXNlTW9kZWwuZ2V0Q2xhc3MoKS5nZXROYW1lKCk7CisJCQorCQlEdWJsaW5Db3JlIGRjID0gbnVsbDsKKwkJZmluYWwgSUV4dGVuc2lvblJlZ2lzdHJ5IHJlZ2lzdHJ5ID0gUGxhdGZvcm0uZ2V0RXh0ZW5zaW9uUmVnaXN0cnkoKTsKKwkJCisgICAgICAgIElFeHRlbnNpb25Qb2ludFtdIGV4dGVuc2lvblBvaW50cyA9IHJlZ2lzdHJ5LmdldEV4dGVuc2lvblBvaW50cyhQTFVHSU5fSUQpOworICAgICAgICBmb3IoaW50IGsgPSAwOyBrIDwgZXh0ZW5zaW9uUG9pbnRzLmxlbmd0aDsgaysrKXsKKyAgICAgICAgCQorICAgICAgICAJIElFeHRlbnNpb25Qb2ludCBleHRlbnNpb25Qb2ludCA9IGV4dGVuc2lvblBvaW50c1trXTsKKyAgICAgICAgCSBJRXh0ZW5zaW9uW10gZXh0ZW5zaW9ucyA9IGV4dGVuc2lvblBvaW50LmdldEV4dGVuc2lvbnMoKTsKKyAgICAgICAgCSAvLyBGb3IgZWFjaCBleHRlbnNpb24gLi4uCisgICAgCSAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBleHRlbnNpb25zLmxlbmd0aDsgaSsrKSB7IAorICAgIAkgICAgICAgICBJRXh0ZW5zaW9uIGV4dGVuc2lvbiA9IGV4dGVuc2lvbnNbaV07CisgICAgCSAgICAgICAgIElDb25maWd1cmF0aW9uRWxlbWVudFtdIGVsZW1lbnRzID0gZXh0ZW5zaW9uLmdldENvbmZpZ3VyYXRpb25FbGVtZW50cygpOworICAgIAkgICAgICAgICAgICAKKyAgICAJICAgICAgICAgLy8gRm9yIGVhY2ggbWVtYmVyIG9mIHRoZSBleHRlbnNpb24gLi4uCisgICAgCSAgICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgZWxlbWVudHMubGVuZ3RoOyBqKyspIHsKKyAgICAJICAgICAgICAgICAgICAgIElDb25maWd1cmF0aW9uRWxlbWVudCBlbGVtZW50ID0gZWxlbWVudHNbal07CisgICAgCSAgICAgICAgICAgICAKKyAgICAJICAgICAgICAgICAgICAgIFN0cmluZ1tdIGtleXMgPSBlbGVtZW50LmdldEF0dHJpYnV0ZU5hbWVzKCk7CisgICAgCSAgICAgICAgICAgICAgICBmb3IgKGludCBtID0gMDsgbSA8IGtleXMubGVuZ3RoOyBtICsrKSB7CisgICAgCSAgICAgICAgICAgICAgICAJU3RyaW5nIHZhbHVlID0gZWxlbWVudC5nZXRBdHRyaWJ1dGUoa2V5c1ttXSk7CisgICAgCSAgICAgICAgICAgICAgICAJCisgICAgCSAgICAgICAgICAgICAgICAJaWYoKGtleXNbbV0uZXF1YWxzSWdub3JlQ2FzZShDTEFTU19GSUVMRCkmJih2YWx1ZS5lcXVhbHNJZ25vcmVDYXNlKGRpc2Vhc2VNb2RlbENsYXNzKSkpKXsKKyAgICAJICAgICAgICAgICAgICAgIAkJZGMgPSBkaXNlYXNlTW9kZWwuZ2V0RHVibGluQ29yZSgpOworICAgIAkgICAgICAgICAgICAgICAgCX0gZWxzZSB7CisgICAgCSAgICAgICAgICAgICAgICAJCWlmKGRjICE9IG51bGwpIHsJCisgICAgCSAgICAgICAgICAgICAgICAJCQlFU3RydWN0dXJhbEZlYXR1cmUgZmVhdHVyZSA9IGRjLmdldEZlYXR1cmUoa2V5c1ttXSk7CisgICAgCSAgICAgICAgICAgICAgICAJCQlpZigoZmVhdHVyZSAhPSBudWxsKSYmKHZhbHVlIT1udWxsKSkgeworICAgIAkgICAgICAgICAgICAgICAgCQkJCQlkYy5lU2V0KGZlYXR1cmUsIHZhbHVlKTsKKyAgICAJICAgICAgICAgICAgICAgIAkJCX0vLyBpZiBmZWF0dXJlL3ZhbHVlIG5vdCBudWxsCisgICAgCSAgICAgICAgICAgICAgICAJCX0vLyBpZiBkYyBub3QgbnVsbAorICAgIAkgICAgICAgICAgICAgICAgCX0vLyBpZi9lbHNlCisgICAgCSAgICAgICAgICAgICAgICB9ICAvL2ZvciBtIG5hbWUvdmFsdWUgcGFpcnMKKyAgICAgICAgICAgICAgICB9Ly8gZm9yIGogZWxlbWVudHMKKyAgICAJICAgICAgICAvLyBvbmNlIGl0J3Mgc2V0IHdlIGFyZSBkb25lCisgICAgCSAgICAgICAgaWYoZGMgIT0gbnVsbCkgcmV0dXJuIGRjOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIAorCQlyZXR1cm4gbnVsbDsKKwl9CisJLyoqCisJICogTG9nIGFuIGVycm9yIHRvIHRoZSBJTG9nIGZvciB0aGlzIHBsdWdpbgorCSAqIAorCSAqIEBwYXJhbSBtZXNzYWdlCisJICogICAgICAgICAgICB0aGUgbG9jYWxpemVkIGVycm9yIG1lc3NhZ2UgdGV4dAorCSAqIEBwYXJhbSBleGNlcHRpb24KKwkgKiAgICAgICAgICAgIHRoZSBhc3NvY2lhdGVkIGV4Y2VwdGlvbiwgb3IgbnVsbAorCSAqLworCXB1YmxpYyBzdGF0aWMgdm9pZCBsb2dFcnJvcihTdHJpbmcgbWVzc2FnZSwgVGhyb3dhYmxlIGV4Y2VwdGlvbikgeworCQkvLyBSdW5uaW5nIGFzIGEgcGx1Z2luPworCQlpZiAocGx1Z2luICE9IG51bGwpIHsKKwkJCS8vIFllcworCQkJcGx1Z2luLmdldExvZygpLmxvZygKKwkJCQkJbmV3IFN0YXR1cyhJU3RhdHVzLkVSUk9SLCBwbHVnaW4uZ2V0QnVuZGxlKCkKKwkJCQkJCQkuZ2V0U3ltYm9saWNOYW1lKCksIDAsIG1lc3NhZ2UsIGV4Y2VwdGlvbikpOworCQl9IGVsc2UgeworCQkJU3lzdGVtLmVyci5wcmludGxuKG1lc3NhZ2UpOworCQkJLy8gRXhjZXB0aW9uPworCQkJaWYgKGV4Y2VwdGlvbiAhPSBudWxsKSB7CisJCQkJLy8gWWVzCisJCQkJU3lzdGVtLmVyci5wcmludGxuKGV4Y2VwdGlvbi5nZXRNZXNzYWdlKCkpOworCQkJCWV4Y2VwdGlvbi5wcmludFN0YWNrVHJhY2UoU3lzdGVtLmVycik7CisJCQl9CisJCX0KKworCX0gLy8gbG9nRXJyb3IKKworCS8qKgorCSAqIExvZyBpbmZvcm1hdGlvbiB0byB0aGUgSUxvZyBmb3IgdGhpcyBwbHVnaW4KKwkgKiAKKwkgKiBAcGFyYW0gbWVzc2FnZQorCSAqICAgICAgICAgICAgdGhlIGxvY2FsaXplZCBpbmZvcm1hdGlvbiBtZXNzYWdlIHRleHQKKwkgKiBAcGFyYW0gZXhjZXB0aW9uCisJICogICAgICAgICAgICB0aGUgYXNzb2NpYXRlZCBleGNlcHRpb24sIG9yIG51bGwKKwkgKi8KKwlwdWJsaWMgc3RhdGljIHZvaWQgbG9nSW5mb3JtYXRpb24oU3RyaW5nIG1lc3NhZ2UsIFRocm93YWJsZSBleGNlcHRpb24pIHsKKwkJLy8gRG8gd2UgaGF2ZSBhIHBsdWdpbj8KKwkJaWYgKHBsdWdpbiAhPSBudWxsKSB7CisJCQkvLyBZZXMKKwkJCXBsdWdpbi5nZXRMb2coKS5sb2coCisJCQkJCW5ldyBTdGF0dXMoSVN0YXR1cy5JTkZPLCBwbHVnaW4uZ2V0QnVuZGxlKCkuZ2V0U3ltYm9saWNOYW1lKCksCisJCQkJCQkJMCwgbWVzc2FnZSwgZXhjZXB0aW9uKSk7CisJCX0KKwkJZWxzZSB7CisJCQkvLyBObworCQkJU3lzdGVtLm91dC5wcmludGxuKG1lc3NhZ2UpOworCQkJLy8gRXhjZXB0aW9uPworCQkJaWYgKGV4Y2VwdGlvbiAhPSBudWxsKSB7CisJCQkJLy8gWWVzCisJCQkJU3lzdGVtLm91dC5wcmludGxuKGV4Y2VwdGlvbi5nZXRNZXNzYWdlKCkpOworCQkJfSAvLyBpZiAKKwkJfQorCX0gLy8gbG9nSW5mb3JtYXRpb24KKwkKKwkKKwkvKioKKwkgKiBMb2cgaW5mb3JtYXRpb24gdG8gdGhlIElMb2cgZm9yIHRoaXMgcGx1Z2luCisJICogVGhlIG1ldGhvZCBpcyBvdmVybG9hZGVkIHRvIGFsbG93IGZvciBsb2dJbmZvcm1hdGlvbiB3aXRob3V0IGFuIGVycm9yIAorCSAqIG1ldGhvZCBzZXRzIHRoZSBlcnJvciB0byBudWxsLiBUaGlzIHNob3VsZCBiZSB1c2VkIGluc3RlYWQgb2YgU3lzdGVtLm91dC5wcmludGxuCisJICogdGhyb3VnaG91dCB0aGUgY29kZS4KKwkgKiBAcGFyYW0gbWVzc2FnZQorCSAqICAgICAgICAgICAgdGhlIGxvY2FsaXplZCBpbmZvcm1hdGlvbiBtZXNzYWdlIHRleHQKKwkgKgorCSAqLworCXB1YmxpYyBzdGF0aWMgdm9pZCBsb2dJbmZvcm1hdGlvbihTdHJpbmcgbWVzc2FnZSkgeworCQkvLyBEbyB3ZSBoYXZlIGEgcGx1Z2luPworCQlpZiAocGx1Z2luICE9IG51bGwpIHsKKwkJCS8vIFllcworCQkJcGx1Z2luLmdldExvZygpLmxvZygKKwkJCQkJbmV3IFN0YXR1cyhJU3RhdHVzLklORk8sIHBsdWdpbi5nZXRCdW5kbGUoKS5nZXRTeW1ib2xpY05hbWUoKSwKKwkJCQkJCQkwLCBtZXNzYWdlLCBudWxsKSk7CisJCX0KKwkJZWxzZSB7CisJCQkvLyBObworCQkJU3lzdGVtLm91dC5wcmludGxuKG1lc3NhZ2UpOworCQl9CisJfSAvLyBsb2dJbmZvcm1hdGlvbgorCQorfSAvLyBBY3RpdmF0b3IKZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvQ29uc3RhbnRzLmphdmEgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL0NvbnN0YW50cy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM3N2MyYjMKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL0NvbnN0YW50cy5qYXZhCkBAIC0wLDAgKzEsNDkgQEAKKy8vIENvbnN0YW50cy5qYXZhCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVsczsKKworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5EaXNlYXNlTW9kZWw7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioKKyAqIFRoaXMgaW50ZXJmYWNlIGNvbnRhaW5zIGNvbnN0YW50cyB0aGF0IGFyZSBzaWduaWZpY2FudCB0byB0aGUgU1RFTSBkaXNlYXNlCisgKiBtb2RlbCBkZWZpbml0aW9ucy4KKyAqLworcHVibGljIGludGVyZmFjZSBDb25zdGFudHMgeworCisJLyoqCisJICogVGhpcyBpcyB0aGUgZXh0ZW5zaW9uIHBvaW50IGlkIGZvciB0aGUgImRpc2Vhc2UgbW9kZWwiIGV4dGVuc2lvbiBwb2ludC4gQQorCSAqIHtAbGluayBEaXNlYXNlTW9kZWx9IGRlZmluZXMgdGhlIHVuZGVybHlpbmcgY29tcHV0YXRpb25hbCBtb2RlbCBmb3IgaG93IGEKKwkgKiBkaXNlYXNlIHByb3BhZ2F0ZXMuCisJICoge0B2YWx1ZX0KKwkgKi8KKwlTdHJpbmcgSURfRElTRUFTRV9NT0RFTF9FWFRFTlNJT05fUE9JTlQgPSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuQ29uc3RhbnRzLklEX1JPT1QKKwkrICIuZGlzZWFzZW1vZGVscy5kaXNlYXNlbW9kZWwiOworCisJCisJLyoqCisJICogVGhpcyBpcyB0aGUgZXh0ZW5zaW9uIHBvaW50IGlkIGZvciB0aGUgImRpc2Vhc2UiIGV4dGVuc2lvbiBwb2ludC4KKwkgKiB7QHZhbHVlfQorCSAqLworCVN0cmluZyBJRF9ESVNFQVNFX0VYVEVOU0lPTl9QT0lOVCA9IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5Db25zdGFudHMuSURfUk9PVAorCQkJKyAiLmRpc2Vhc2Vtb2RlbHMuZGlzZWFzZSI7CisKKwkvKioKKwkgKiBUaGlzIGlzIHRoZSBpZGVudGlmaWVyIG9mIHRoZSBlbGVtZW50IGluIGEKKwkgKiA8Y29kZT5Db25maWd1cmF0aW9uRWxlbWVudDwvY29kZT4gdGhhdCBzcGVjaWZpZXMgdGhlIG5hbWUgYW5kCisJICogaW1wbGVtZW50aW5nIGNsYXNzIGZvciBTVEVNICJkaXNlYXNlIG1vZGVscyIuCisJICogCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuQ29uc3RhbnRzI0VYRUNVVEFCTEVfTkFNRV9BVFRSSUJVVEUKKwkgKi8KKwlTdHJpbmcgRElTRUFTRV9NT0RFTF9FTEVNRU5UID0gImNsYXNzZGVmIjsKKworfSAvLyBDb25zdGFudHMKZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvcHJlZGljYXRlcy9kaXNlYXNlcHJlZGljYXRlcy9EaXNlYXNlcHJlZGljYXRlc0ZhY3RvcnkuamF2YSBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvcHJlZGljYXRlcy9kaXNlYXNlcHJlZGljYXRlcy9EaXNlYXNlcHJlZGljYXRlc0ZhY3RvcnkuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MmMyOGFkCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9wcmVkaWNhdGVzL2Rpc2Vhc2VwcmVkaWNhdGVzL0Rpc2Vhc2VwcmVkaWNhdGVzRmFjdG9yeS5qYXZhCkBAIC0wLDAgKzEsNTEgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnByZWRpY2F0ZXMuZGlzZWFzZXByZWRpY2F0ZXM7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIAorICogQ29weXJpZ2h0IChjKSAyMDExIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiAKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdCAKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sIAorICogCisgKiBDb250cmlidXRvcnM6IAorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiAKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVGYWN0b3J5OworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiBUaGUgPGI+RmFjdG9yeTwvYj4gZm9yIHRoZSBtb2RlbC4KKyAqIEl0IHByb3ZpZGVzIGEgY3JlYXRlIG1ldGhvZCBmb3IgZWFjaCBub24tYWJzdHJhY3QgY2xhc3Mgb2YgdGhlIG1vZGVsLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5wcmVkaWNhdGVzLmRpc2Vhc2VwcmVkaWNhdGVzLkRpc2Vhc2VwcmVkaWNhdGVzUGFja2FnZQorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgaW50ZXJmYWNlIERpc2Vhc2VwcmVkaWNhdGVzRmFjdG9yeSBleHRlbmRzIEVGYWN0b3J5IHsKKwkvKioKKwkgKiBUaGUgc2luZ2xldG9uIGluc3RhbmNlIG9mIHRoZSBmYWN0b3J5LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCURpc2Vhc2VwcmVkaWNhdGVzRmFjdG9yeSBlSU5TVEFOQ0UgPSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMucHJlZGljYXRlcy5kaXNlYXNlcHJlZGljYXRlcy5pbXBsLkRpc2Vhc2VwcmVkaWNhdGVzRmFjdG9yeUltcGwuaW5pdCgpOworCisJLyoqCisJICogUmV0dXJucyBhIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5MYWJlbCBWYWx1ZSBUZXN0PC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiBhIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5MYWJlbCBWYWx1ZSBUZXN0PC9lbT4nLgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlMYWJlbFZhbHVlVGVzdCBjcmVhdGVMYWJlbFZhbHVlVGVzdCgpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgcGFja2FnZSBzdXBwb3J0ZWQgYnkgdGhpcyBmYWN0b3J5LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgcGFja2FnZSBzdXBwb3J0ZWQgYnkgdGhpcyBmYWN0b3J5LgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlEaXNlYXNlcHJlZGljYXRlc1BhY2thZ2UgZ2V0RGlzZWFzZXByZWRpY2F0ZXNQYWNrYWdlKCk7CisKK30gLy9EaXNlYXNlcHJlZGljYXRlc0ZhY3RvcnkKZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvcHJlZGljYXRlcy9kaXNlYXNlcHJlZGljYXRlcy9EaXNlYXNlcHJlZGljYXRlc1BhY2thZ2UuamF2YSBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvcHJlZGljYXRlcy9kaXNlYXNlcHJlZGljYXRlcy9EaXNlYXNlcHJlZGljYXRlc1BhY2thZ2UuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42OTdmZmY2Ci0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9wcmVkaWNhdGVzL2Rpc2Vhc2VwcmVkaWNhdGVzL0Rpc2Vhc2VwcmVkaWNhdGVzUGFja2FnZS5qYXZhCkBAIC0wLDAgKzEsMzAwIEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5wcmVkaWNhdGVzLmRpc2Vhc2VwcmVkaWNhdGVzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAKKyAqIENvcHlyaWdodCAoYykgMjAxMSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4gCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIAorICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wIAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQgCisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbCAKKyAqIAorICogQ29udHJpYnV0b3JzOiAKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQXR0cmlidXRlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVQYWNrYWdlOworCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZS5QcmVkaWNhdGVQYWNrYWdlOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiBUaGUgPGI+UGFja2FnZTwvYj4gZm9yIHRoZSBtb2RlbC4KKyAqIEl0IGNvbnRhaW5zIGFjY2Vzc29ycyBmb3IgdGhlIG1ldGEgb2JqZWN0cyB0byByZXByZXNlbnQKKyAqIDx1bD4KKyAqICAgPGxpPmVhY2ggY2xhc3MsPC9saT4KKyAqICAgPGxpPmVhY2ggZmVhdHVyZSBvZiBlYWNoIGNsYXNzLDwvbGk+CisgKiAgIDxsaT5lYWNoIGVudW0sPC9saT4KKyAqICAgPGxpPmFuZCBlYWNoIGRhdGEgdHlwZTwvbGk+CisgKiA8L3VsPgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5wcmVkaWNhdGVzLmRpc2Vhc2VwcmVkaWNhdGVzLkRpc2Vhc2VwcmVkaWNhdGVzRmFjdG9yeQorICogQG1vZGVsIGtpbmQ9InBhY2thZ2UiCisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBpbnRlcmZhY2UgRGlzZWFzZXByZWRpY2F0ZXNQYWNrYWdlIGV4dGVuZHMgRVBhY2thZ2UgeworCS8qKgorCSAqIFRoZSBwYWNrYWdlIG5hbWUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJU3RyaW5nIGVOQU1FID0gImRpc2Vhc2VwcmVkaWNhdGVzIjsgLy8kTk9OLU5MUy0xJAorCisJLyoqCisJICogVGhlIHBhY2thZ2UgbmFtZXNwYWNlIFVSSS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlTdHJpbmcgZU5TX1VSSSA9ICJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9kaXNlYXNlcHJlZGljYXRlcy5lY29yZSI7IC8vJE5PTi1OTFMtMSQKKworCS8qKgorCSAqIFRoZSBwYWNrYWdlIG5hbWVzcGFjZSBuYW1lLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCVN0cmluZyBlTlNfUFJFRklYID0gIm9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5kaXNlYXNlcHJlZGljYXRlcyI7IC8vJE5PTi1OTFMtMSQKKworCS8qKgorCSAqIFRoZSBzaW5nbGV0b24gaW5zdGFuY2Ugb2YgdGhlIHBhY2thZ2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRGlzZWFzZXByZWRpY2F0ZXNQYWNrYWdlIGVJTlNUQU5DRSA9IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5wcmVkaWNhdGVzLmRpc2Vhc2VwcmVkaWNhdGVzLmltcGwuRGlzZWFzZXByZWRpY2F0ZXNQYWNrYWdlSW1wbC5pbml0KCk7CisKKwkvKioKKwkgKiBUaGUgbWV0YSBvYmplY3QgaWQgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5wcmVkaWNhdGVzLmRpc2Vhc2VwcmVkaWNhdGVzLmltcGwuTGFiZWxWYWx1ZVRlc3RJbXBsIDxlbT5MYWJlbCBWYWx1ZSBUZXN0PC9lbT59JyBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnByZWRpY2F0ZXMuZGlzZWFzZXByZWRpY2F0ZXMuaW1wbC5MYWJlbFZhbHVlVGVzdEltcGwKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5wcmVkaWNhdGVzLmRpc2Vhc2VwcmVkaWNhdGVzLmltcGwuRGlzZWFzZXByZWRpY2F0ZXNQYWNrYWdlSW1wbCNnZXRMYWJlbFZhbHVlVGVzdCgpCisJICogQGdlbmVyYXRlZAorCSAqLworCWludCBMQUJFTF9WQUxVRV9URVNUID0gMDsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5Nb2RlbCBOYW1lPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgTEFCRUxfVkFMVUVfVEVTVF9fTU9ERUxfTkFNRSA9IFByZWRpY2F0ZVBhY2thZ2UuVEVTVF9GRUFUVVJFX0NPVU5UICsgMDsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5UYXJnZXQgVVJJPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgTEFCRUxfVkFMVUVfVEVTVF9fVEFSR0VUX1VSSSA9IFByZWRpY2F0ZVBhY2thZ2UuVEVTVF9GRUFUVVJFX0NPVU5UICsgMTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5TdGF0ZTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IExBQkVMX1ZBTFVFX1RFU1RfX1NUQVRFID0gUHJlZGljYXRlUGFja2FnZS5URVNUX0ZFQVRVUkVfQ09VTlQgKyAyOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlRocmVzaG9sZDwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IExBQkVMX1ZBTFVFX1RFU1RfX1RIUkVTSE9MRCA9IFByZWRpY2F0ZVBhY2thZ2UuVEVTVF9GRUFUVVJFX0NPVU5UICsgMzsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5QcmVkaWNhdGU8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBMQUJFTF9WQUxVRV9URVNUX19QUkVESUNBVEUgPSBQcmVkaWNhdGVQYWNrYWdlLlRFU1RfRkVBVFVSRV9DT1VOVCArIDQ7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+UG9wdWxhdGlvbiBJZGVudGlmaWVyPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgTEFCRUxfVkFMVUVfVEVTVF9fUE9QVUxBVElPTl9JREVOVElGSUVSID0gUHJlZGljYXRlUGFja2FnZS5URVNUX0ZFQVRVUkVfQ09VTlQgKyA1OworCisJLyoqCisJICogVGhlIG51bWJlciBvZiBzdHJ1Y3R1cmFsIGZlYXR1cmVzIG9mIHRoZSAnPGVtPkxhYmVsIFZhbHVlIFRlc3Q8L2VtPicgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgTEFCRUxfVkFMVUVfVEVTVF9GRUFUVVJFX0NPVU5UID0gUHJlZGljYXRlUGFja2FnZS5URVNUX0ZFQVRVUkVfQ09VTlQgKyA2OworCisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMucHJlZGljYXRlcy5kaXNlYXNlcHJlZGljYXRlcy5MYWJlbFZhbHVlVGVzdCA8ZW0+TGFiZWwgVmFsdWUgVGVzdDwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJzxlbT5MYWJlbCBWYWx1ZSBUZXN0PC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnByZWRpY2F0ZXMuZGlzZWFzZXByZWRpY2F0ZXMuTGFiZWxWYWx1ZVRlc3QKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUNsYXNzIGdldExhYmVsVmFsdWVUZXN0KCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5wcmVkaWNhdGVzLmRpc2Vhc2VwcmVkaWNhdGVzLkxhYmVsVmFsdWVUZXN0I2dldE1vZGVsTmFtZSA8ZW0+TW9kZWwgTmFtZTwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPGVtPk1vZGVsIE5hbWU8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMucHJlZGljYXRlcy5kaXNlYXNlcHJlZGljYXRlcy5MYWJlbFZhbHVlVGVzdCNnZXRNb2RlbE5hbWUoKQorCSAqIEBzZWUgI2dldExhYmVsVmFsdWVUZXN0KCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUF0dHJpYnV0ZSBnZXRMYWJlbFZhbHVlVGVzdF9Nb2RlbE5hbWUoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnByZWRpY2F0ZXMuZGlzZWFzZXByZWRpY2F0ZXMuTGFiZWxWYWx1ZVRlc3QjZ2V0VGFyZ2V0VVJJIDxlbT5UYXJnZXQgVVJJPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+VGFyZ2V0IFVSSTwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5wcmVkaWNhdGVzLmRpc2Vhc2VwcmVkaWNhdGVzLkxhYmVsVmFsdWVUZXN0I2dldFRhcmdldFVSSSgpCisJICogQHNlZSAjZ2V0TGFiZWxWYWx1ZVRlc3QoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQXR0cmlidXRlIGdldExhYmVsVmFsdWVUZXN0X1RhcmdldFVSSSgpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMucHJlZGljYXRlcy5kaXNlYXNlcHJlZGljYXRlcy5MYWJlbFZhbHVlVGVzdCNnZXRTdGF0ZSA8ZW0+U3RhdGU8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxlbT5TdGF0ZTwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5wcmVkaWNhdGVzLmRpc2Vhc2VwcmVkaWNhdGVzLkxhYmVsVmFsdWVUZXN0I2dldFN0YXRlKCkKKwkgKiBAc2VlICNnZXRMYWJlbFZhbHVlVGVzdCgpCisJICogQGdlbmVyYXRlZAorCSAqLworCUVBdHRyaWJ1dGUgZ2V0TGFiZWxWYWx1ZVRlc3RfU3RhdGUoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnByZWRpY2F0ZXMuZGlzZWFzZXByZWRpY2F0ZXMuTGFiZWxWYWx1ZVRlc3QjZ2V0VGhyZXNob2xkIDxlbT5UaHJlc2hvbGQ8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxlbT5UaHJlc2hvbGQ8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMucHJlZGljYXRlcy5kaXNlYXNlcHJlZGljYXRlcy5MYWJlbFZhbHVlVGVzdCNnZXRUaHJlc2hvbGQoKQorCSAqIEBzZWUgI2dldExhYmVsVmFsdWVUZXN0KCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUF0dHJpYnV0ZSBnZXRMYWJlbFZhbHVlVGVzdF9UaHJlc2hvbGQoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnByZWRpY2F0ZXMuZGlzZWFzZXByZWRpY2F0ZXMuTGFiZWxWYWx1ZVRlc3QjZ2V0UHJlZGljYXRlIDxlbT5QcmVkaWNhdGU8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxlbT5QcmVkaWNhdGU8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMucHJlZGljYXRlcy5kaXNlYXNlcHJlZGljYXRlcy5MYWJlbFZhbHVlVGVzdCNnZXRQcmVkaWNhdGUoKQorCSAqIEBzZWUgI2dldExhYmVsVmFsdWVUZXN0KCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUF0dHJpYnV0ZSBnZXRMYWJlbFZhbHVlVGVzdF9QcmVkaWNhdGUoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnByZWRpY2F0ZXMuZGlzZWFzZXByZWRpY2F0ZXMuTGFiZWxWYWx1ZVRlc3QjZ2V0UG9wdWxhdGlvbklkZW50aWZpZXIgPGVtPlBvcHVsYXRpb24gSWRlbnRpZmllcjwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPGVtPlBvcHVsYXRpb24gSWRlbnRpZmllcjwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5wcmVkaWNhdGVzLmRpc2Vhc2VwcmVkaWNhdGVzLkxhYmVsVmFsdWVUZXN0I2dldFBvcHVsYXRpb25JZGVudGlmaWVyKCkKKwkgKiBAc2VlICNnZXRMYWJlbFZhbHVlVGVzdCgpCisJICogQGdlbmVyYXRlZAorCSAqLworCUVBdHRyaWJ1dGUgZ2V0TGFiZWxWYWx1ZVRlc3RfUG9wdWxhdGlvbklkZW50aWZpZXIoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIGZhY3RvcnkgdGhhdCBjcmVhdGVzIHRoZSBpbnN0YW5jZXMgb2YgdGhlIG1vZGVsLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgZmFjdG9yeSB0aGF0IGNyZWF0ZXMgdGhlIGluc3RhbmNlcyBvZiB0aGUgbW9kZWwuCisJICogQGdlbmVyYXRlZAorCSAqLworCURpc2Vhc2VwcmVkaWNhdGVzRmFjdG9yeSBnZXREaXNlYXNlcHJlZGljYXRlc0ZhY3RvcnkoKTsKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogRGVmaW5lcyBsaXRlcmFscyBmb3IgdGhlIG1ldGEgb2JqZWN0cyB0aGF0IHJlcHJlc2VudAorCSAqIDx1bD4KKwkgKiAgIDxsaT5lYWNoIGNsYXNzLDwvbGk+CisJICogICA8bGk+ZWFjaCBmZWF0dXJlIG9mIGVhY2ggY2xhc3MsPC9saT4KKwkgKiAgIDxsaT5lYWNoIGVudW0sPC9saT4KKwkgKiAgIDxsaT5hbmQgZWFjaCBkYXRhIHR5cGU8L2xpPgorCSAqIDwvdWw+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCWludGVyZmFjZSBMaXRlcmFscyB7CisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnByZWRpY2F0ZXMuZGlzZWFzZXByZWRpY2F0ZXMuaW1wbC5MYWJlbFZhbHVlVGVzdEltcGwgPGVtPkxhYmVsIFZhbHVlIFRlc3Q8L2VtPn0nIGNsYXNzLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMucHJlZGljYXRlcy5kaXNlYXNlcHJlZGljYXRlcy5pbXBsLkxhYmVsVmFsdWVUZXN0SW1wbAorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5wcmVkaWNhdGVzLmRpc2Vhc2VwcmVkaWNhdGVzLmltcGwuRGlzZWFzZXByZWRpY2F0ZXNQYWNrYWdlSW1wbCNnZXRMYWJlbFZhbHVlVGVzdCgpCisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVDbGFzcyBMQUJFTF9WQUxVRV9URVNUID0gZUlOU1RBTkNFLmdldExhYmVsVmFsdWVUZXN0KCk7CisKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5Nb2RlbCBOYW1lPC9iPjwvZW0+JyBhdHRyaWJ1dGUgZmVhdHVyZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVBdHRyaWJ1dGUgTEFCRUxfVkFMVUVfVEVTVF9fTU9ERUxfTkFNRSA9IGVJTlNUQU5DRS5nZXRMYWJlbFZhbHVlVGVzdF9Nb2RlbE5hbWUoKTsKKworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPlRhcmdldCBVUkk8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUF0dHJpYnV0ZSBMQUJFTF9WQUxVRV9URVNUX19UQVJHRVRfVVJJID0gZUlOU1RBTkNFLmdldExhYmVsVmFsdWVUZXN0X1RhcmdldFVSSSgpOworCisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+U3RhdGU8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUF0dHJpYnV0ZSBMQUJFTF9WQUxVRV9URVNUX19TVEFURSA9IGVJTlNUQU5DRS5nZXRMYWJlbFZhbHVlVGVzdF9TdGF0ZSgpOworCisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+VGhyZXNob2xkPC9iPjwvZW0+JyBhdHRyaWJ1dGUgZmVhdHVyZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVBdHRyaWJ1dGUgTEFCRUxfVkFMVUVfVEVTVF9fVEhSRVNIT0xEID0gZUlOU1RBTkNFLmdldExhYmVsVmFsdWVUZXN0X1RocmVzaG9sZCgpOworCisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+UHJlZGljYXRlPC9iPjwvZW0+JyBhdHRyaWJ1dGUgZmVhdHVyZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVBdHRyaWJ1dGUgTEFCRUxfVkFMVUVfVEVTVF9fUFJFRElDQVRFID0gZUlOU1RBTkNFLmdldExhYmVsVmFsdWVUZXN0X1ByZWRpY2F0ZSgpOworCisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+UG9wdWxhdGlvbiBJZGVudGlmaWVyPC9iPjwvZW0+JyBhdHRyaWJ1dGUgZmVhdHVyZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVBdHRyaWJ1dGUgTEFCRUxfVkFMVUVfVEVTVF9fUE9QVUxBVElPTl9JREVOVElGSUVSID0gZUlOU1RBTkNFLmdldExhYmVsVmFsdWVUZXN0X1BvcHVsYXRpb25JZGVudGlmaWVyKCk7CisKKwl9CisKK30gLy9EaXNlYXNlcHJlZGljYXRlc1BhY2thZ2UKZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvcHJlZGljYXRlcy9kaXNlYXNlcHJlZGljYXRlcy9MYWJlbFZhbHVlVGVzdC5qYXZhIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9wcmVkaWNhdGVzL2Rpc2Vhc2VwcmVkaWNhdGVzL0xhYmVsVmFsdWVUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmMzOTE2ZAotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvcHJlZGljYXRlcy9kaXNlYXNlcHJlZGljYXRlcy9MYWJlbFZhbHVlVGVzdC5qYXZhCkBAIC0wLDAgKzEsMjAwIEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5wcmVkaWNhdGVzLmRpc2Vhc2VwcmVkaWNhdGVzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAKKyAqIENvcHlyaWdodCAoYykgMjAxMSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4gCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIAorICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wIAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQgCisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbCAKKyAqIAorICogQ29udHJpYnV0b3JzOiAKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5VUkk7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlLlRlc3Q7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIEEgcmVwcmVzZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPkxhYmVsIFZhbHVlIFRlc3Q8L2I+PC9lbT4nLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKgorICogPHA+CisgKiBUaGUgZm9sbG93aW5nIGZlYXR1cmVzIGFyZSBzdXBwb3J0ZWQ6CisgKiA8dWw+CisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnByZWRpY2F0ZXMuZGlzZWFzZXByZWRpY2F0ZXMuTGFiZWxWYWx1ZVRlc3QjZ2V0TW9kZWxOYW1lIDxlbT5Nb2RlbCBOYW1lPC9lbT59PC9saT4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMucHJlZGljYXRlcy5kaXNlYXNlcHJlZGljYXRlcy5MYWJlbFZhbHVlVGVzdCNnZXRUYXJnZXRVUkkgPGVtPlRhcmdldCBVUkk8L2VtPn08L2xpPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5wcmVkaWNhdGVzLmRpc2Vhc2VwcmVkaWNhdGVzLkxhYmVsVmFsdWVUZXN0I2dldFN0YXRlIDxlbT5TdGF0ZTwvZW0+fTwvbGk+CisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnByZWRpY2F0ZXMuZGlzZWFzZXByZWRpY2F0ZXMuTGFiZWxWYWx1ZVRlc3QjZ2V0VGhyZXNob2xkIDxlbT5UaHJlc2hvbGQ8L2VtPn08L2xpPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5wcmVkaWNhdGVzLmRpc2Vhc2VwcmVkaWNhdGVzLkxhYmVsVmFsdWVUZXN0I2dldFByZWRpY2F0ZSA8ZW0+UHJlZGljYXRlPC9lbT59PC9saT4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMucHJlZGljYXRlcy5kaXNlYXNlcHJlZGljYXRlcy5MYWJlbFZhbHVlVGVzdCNnZXRQb3B1bGF0aW9uSWRlbnRpZmllciA8ZW0+UG9wdWxhdGlvbiBJZGVudGlmaWVyPC9lbT59PC9saT4KKyAqIDwvdWw+CisgKiA8L3A+CisgKgorICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMucHJlZGljYXRlcy5kaXNlYXNlcHJlZGljYXRlcy5EaXNlYXNlcHJlZGljYXRlc1BhY2thZ2UjZ2V0TGFiZWxWYWx1ZVRlc3QoKQorICogQG1vZGVsCisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBpbnRlcmZhY2UgTGFiZWxWYWx1ZVRlc3QgZXh0ZW5kcyBUZXN0IHsKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5Nb2RlbCBOYW1lPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8cD4KKwkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5Nb2RlbCBOYW1lPC9lbT4nIGF0dHJpYnV0ZSBpc24ndCBjbGVhciwKKwkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uCisJICogPC9wPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPk1vZGVsIE5hbWU8L2VtPicgYXR0cmlidXRlLgorCSAqIEBzZWUgI3NldE1vZGVsTmFtZShTdHJpbmcpCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMucHJlZGljYXRlcy5kaXNlYXNlcHJlZGljYXRlcy5EaXNlYXNlcHJlZGljYXRlc1BhY2thZ2UjZ2V0TGFiZWxWYWx1ZVRlc3RfTW9kZWxOYW1lKCkKKwkgKiBAbW9kZWwKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJU3RyaW5nIGdldE1vZGVsTmFtZSgpOworCisJLyoqCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnByZWRpY2F0ZXMuZGlzZWFzZXByZWRpY2F0ZXMuTGFiZWxWYWx1ZVRlc3QjZ2V0TW9kZWxOYW1lIDxlbT5Nb2RlbCBOYW1lPC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5Nb2RlbCBOYW1lPC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiBAc2VlICNnZXRNb2RlbE5hbWUoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwl2b2lkIHNldE1vZGVsTmFtZShTdHJpbmcgdmFsdWUpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+VGFyZ2V0IFVSSTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPHA+CisJICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+VGFyZ2V0IFVSSTwvZW0+JyBhdHRyaWJ1dGUgaXNuJ3QgY2xlYXIsCisJICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLgorCSAqIDwvcD4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5UYXJnZXQgVVJJPC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiBAc2VlICNzZXRUYXJnZXRVUkkoVVJJKQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnByZWRpY2F0ZXMuZGlzZWFzZXByZWRpY2F0ZXMuRGlzZWFzZXByZWRpY2F0ZXNQYWNrYWdlI2dldExhYmVsVmFsdWVUZXN0X1RhcmdldFVSSSgpCisJICogQG1vZGVsIGRhdGFUeXBlPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLlVSSSIKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJVVJJIGdldFRhcmdldFVSSSgpOworCisJLyoqCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnByZWRpY2F0ZXMuZGlzZWFzZXByZWRpY2F0ZXMuTGFiZWxWYWx1ZVRlc3QjZ2V0VGFyZ2V0VVJJIDxlbT5UYXJnZXQgVVJJPC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5UYXJnZXQgVVJJPC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiBAc2VlICNnZXRUYXJnZXRVUkkoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwl2b2lkIHNldFRhcmdldFVSSShVUkkgdmFsdWUpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+U3RhdGU8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyA8Y29kZT4iaW5jaWRlbmNlIjwvY29kZT4uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8cD4KKwkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5TdGF0ZTwvZW0+JyBhdHRyaWJ1dGUgaXNuJ3QgY2xlYXIsCisJICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLgorCSAqIDwvcD4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5TdGF0ZTwvZW0+JyBhdHRyaWJ1dGUuCisJICogQHNlZSAjc2V0U3RhdGUoU3RyaW5nKQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnByZWRpY2F0ZXMuZGlzZWFzZXByZWRpY2F0ZXMuRGlzZWFzZXByZWRpY2F0ZXNQYWNrYWdlI2dldExhYmVsVmFsdWVUZXN0X1N0YXRlKCkKKwkgKiBAbW9kZWwgZGVmYXVsdD0iaW5jaWRlbmNlIgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlTdHJpbmcgZ2V0U3RhdGUoKTsKKworCS8qKgorCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5wcmVkaWNhdGVzLmRpc2Vhc2VwcmVkaWNhdGVzLkxhYmVsVmFsdWVUZXN0I2dldFN0YXRlIDxlbT5TdGF0ZTwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+U3RhdGU8L2VtPicgYXR0cmlidXRlLgorCSAqIEBzZWUgI2dldFN0YXRlKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJdm9pZCBzZXRTdGF0ZShTdHJpbmcgdmFsdWUpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+VGhyZXNob2xkPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogVGhlIGRlZmF1bHQgdmFsdWUgaXMgPGNvZGU+IjEwMCI8L2NvZGU+LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPHA+CisJICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+VGhyZXNob2xkPC9lbT4nIGF0dHJpYnV0ZSBpc24ndCBjbGVhciwKKwkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uCisJICogPC9wPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPlRocmVzaG9sZDwvZW0+JyBhdHRyaWJ1dGUuCisJICogQHNlZSAjc2V0VGhyZXNob2xkKGRvdWJsZSkKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5wcmVkaWNhdGVzLmRpc2Vhc2VwcmVkaWNhdGVzLkRpc2Vhc2VwcmVkaWNhdGVzUGFja2FnZSNnZXRMYWJlbFZhbHVlVGVzdF9UaHJlc2hvbGQoKQorCSAqIEBtb2RlbCBkZWZhdWx0PSIxMDAiCisJICogQGdlbmVyYXRlZAorCSAqLworCWRvdWJsZSBnZXRUaHJlc2hvbGQoKTsKKworCS8qKgorCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5wcmVkaWNhdGVzLmRpc2Vhc2VwcmVkaWNhdGVzLkxhYmVsVmFsdWVUZXN0I2dldFRocmVzaG9sZCA8ZW0+VGhyZXNob2xkPC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5UaHJlc2hvbGQ8L2VtPicgYXR0cmlidXRlLgorCSAqIEBzZWUgI2dldFRocmVzaG9sZCgpCisJICogQGdlbmVyYXRlZAorCSAqLworCXZvaWQgc2V0VGhyZXNob2xkKGRvdWJsZSB2YWx1ZSk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5QcmVkaWNhdGU8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyA8Y29kZT4iPiI8L2NvZGU+LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPHA+CisJICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+UHJlZGljYXRlPC9lbT4nIGF0dHJpYnV0ZSBpc24ndCBjbGVhciwKKwkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uCisJICogPC9wPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPlByZWRpY2F0ZTwvZW0+JyBhdHRyaWJ1dGUuCisJICogQHNlZSAjc2V0UHJlZGljYXRlKFN0cmluZykKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5wcmVkaWNhdGVzLmRpc2Vhc2VwcmVkaWNhdGVzLkRpc2Vhc2VwcmVkaWNhdGVzUGFja2FnZSNnZXRMYWJlbFZhbHVlVGVzdF9QcmVkaWNhdGUoKQorCSAqIEBtb2RlbCBkZWZhdWx0PSI+IgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlTdHJpbmcgZ2V0UHJlZGljYXRlKCk7CisKKwkvKioKKwkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMucHJlZGljYXRlcy5kaXNlYXNlcHJlZGljYXRlcy5MYWJlbFZhbHVlVGVzdCNnZXRQcmVkaWNhdGUgPGVtPlByZWRpY2F0ZTwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+UHJlZGljYXRlPC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiBAc2VlICNnZXRQcmVkaWNhdGUoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwl2b2lkIHNldFByZWRpY2F0ZShTdHJpbmcgdmFsdWUpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+UG9wdWxhdGlvbiBJZGVudGlmaWVyPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogVGhlIGRlZmF1bHQgdmFsdWUgaXMgPGNvZGU+Imh1bWFuIjwvY29kZT4uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8cD4KKwkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5Qb3B1bGF0aW9uIElkZW50aWZpZXI8L2VtPicgYXR0cmlidXRlIGlzbid0IGNsZWFyLAorCSAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4KKwkgKiA8L3A+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+UG9wdWxhdGlvbiBJZGVudGlmaWVyPC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiBAc2VlICNzZXRQb3B1bGF0aW9uSWRlbnRpZmllcihTdHJpbmcpCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMucHJlZGljYXRlcy5kaXNlYXNlcHJlZGljYXRlcy5EaXNlYXNlcHJlZGljYXRlc1BhY2thZ2UjZ2V0TGFiZWxWYWx1ZVRlc3RfUG9wdWxhdGlvbklkZW50aWZpZXIoKQorCSAqIEBtb2RlbCBkZWZhdWx0PSJodW1hbiIKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJU3RyaW5nIGdldFBvcHVsYXRpb25JZGVudGlmaWVyKCk7CisKKwkvKioKKwkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMucHJlZGljYXRlcy5kaXNlYXNlcHJlZGljYXRlcy5MYWJlbFZhbHVlVGVzdCNnZXRQb3B1bGF0aW9uSWRlbnRpZmllciA8ZW0+UG9wdWxhdGlvbiBJZGVudGlmaWVyPC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5Qb3B1bGF0aW9uIElkZW50aWZpZXI8L2VtPicgYXR0cmlidXRlLgorCSAqIEBzZWUgI2dldFBvcHVsYXRpb25JZGVudGlmaWVyKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJdm9pZCBzZXRQb3B1bGF0aW9uSWRlbnRpZmllcihTdHJpbmcgdmFsdWUpOworCit9IC8vIExhYmVsVmFsdWVUZXN0CmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3ByZWRpY2F0ZXMvZGlzZWFzZXByZWRpY2F0ZXMvaW1wbC9EaXNlYXNlcHJlZGljYXRlc0ZhY3RvcnlJbXBsLmphdmEgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3ByZWRpY2F0ZXMvZGlzZWFzZXByZWRpY2F0ZXMvaW1wbC9EaXNlYXNlcHJlZGljYXRlc0ZhY3RvcnlJbXBsLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2M1NTRkYQotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvcHJlZGljYXRlcy9kaXNlYXNlcHJlZGljYXRlcy9pbXBsL0Rpc2Vhc2VwcmVkaWNhdGVzRmFjdG9yeUltcGwuamF2YQpAQCAtMCwwICsxLDEwNCBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMucHJlZGljYXRlcy5kaXNlYXNlcHJlZGljYXRlcy5pbXBsOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAKKyAqIENvcHlyaWdodCAoYykgMjAxMSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4gCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIAorICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wIAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQgCisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbCAKKyAqIAorICogQ29udHJpYnV0b3JzOiAKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3Q7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVQYWNrYWdlOworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLmltcGwuRUZhY3RvcnlJbXBsOworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnBsdWdpbi5FY29yZVBsdWdpbjsKKworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5wcmVkaWNhdGVzLmRpc2Vhc2VwcmVkaWNhdGVzLio7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIEFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBtb2RlbCA8Yj5GYWN0b3J5PC9iPi4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgRGlzZWFzZXByZWRpY2F0ZXNGYWN0b3J5SW1wbCBleHRlbmRzIEVGYWN0b3J5SW1wbCBpbXBsZW1lbnRzIERpc2Vhc2VwcmVkaWNhdGVzRmFjdG9yeSB7CisJLyoqCisJICogQ3JlYXRlcyB0aGUgZGVmYXVsdCBmYWN0b3J5IGltcGxlbWVudGF0aW9uLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBzdGF0aWMgRGlzZWFzZXByZWRpY2F0ZXNGYWN0b3J5IGluaXQoKSB7CisJCXRyeSB7CisJCQlEaXNlYXNlcHJlZGljYXRlc0ZhY3RvcnkgdGhlRGlzZWFzZXByZWRpY2F0ZXNGYWN0b3J5ID0gKERpc2Vhc2VwcmVkaWNhdGVzRmFjdG9yeSlFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFRmFjdG9yeSgiaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvZGlzZWFzZXByZWRpY2F0ZXMuZWNvcmUiKTsgLy8kTk9OLU5MUy0xJCAKKwkJCWlmICh0aGVEaXNlYXNlcHJlZGljYXRlc0ZhY3RvcnkgIT0gbnVsbCkgeworCQkJCXJldHVybiB0aGVEaXNlYXNlcHJlZGljYXRlc0ZhY3Rvcnk7CisJCQl9CisJCX0KKwkJY2F0Y2ggKEV4Y2VwdGlvbiBleGNlcHRpb24pIHsKKwkJCUVjb3JlUGx1Z2luLklOU1RBTkNFLmxvZyhleGNlcHRpb24pOworCQl9CisJCXJldHVybiBuZXcgRGlzZWFzZXByZWRpY2F0ZXNGYWN0b3J5SW1wbCgpOworCX0KKworCS8qKgorCSAqIENyZWF0ZXMgYW4gaW5zdGFuY2Ugb2YgdGhlIGZhY3RvcnkuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIERpc2Vhc2VwcmVkaWNhdGVzRmFjdG9yeUltcGwoKSB7CisJCXN1cGVyKCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIEVPYmplY3QgY3JlYXRlKEVDbGFzcyBlQ2xhc3MpIHsKKwkJc3dpdGNoIChlQ2xhc3MuZ2V0Q2xhc3NpZmllcklEKCkpIHsKKwkJCWNhc2UgRGlzZWFzZXByZWRpY2F0ZXNQYWNrYWdlLkxBQkVMX1ZBTFVFX1RFU1Q6IHJldHVybiBjcmVhdGVMYWJlbFZhbHVlVGVzdCgpOworCQkJZGVmYXVsdDoKKwkJCQl0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJUaGUgY2xhc3MgJyIgKyBlQ2xhc3MuZ2V0TmFtZSgpICsgIicgaXMgbm90IGEgdmFsaWQgY2xhc3NpZmllciIpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKKwkJfQorCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBMYWJlbFZhbHVlVGVzdCBjcmVhdGVMYWJlbFZhbHVlVGVzdCgpIHsKKwkJTGFiZWxWYWx1ZVRlc3RJbXBsIGxhYmVsVmFsdWVUZXN0ID0gbmV3IExhYmVsVmFsdWVUZXN0SW1wbCgpOworCQlyZXR1cm4gbGFiZWxWYWx1ZVRlc3Q7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIERpc2Vhc2VwcmVkaWNhdGVzUGFja2FnZSBnZXREaXNlYXNlcHJlZGljYXRlc1BhY2thZ2UoKSB7CisJCXJldHVybiAoRGlzZWFzZXByZWRpY2F0ZXNQYWNrYWdlKWdldEVQYWNrYWdlKCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZGVwcmVjYXRlZAorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlARGVwcmVjYXRlZAorCXB1YmxpYyBzdGF0aWMgRGlzZWFzZXByZWRpY2F0ZXNQYWNrYWdlIGdldFBhY2thZ2UoKSB7CisJCXJldHVybiBEaXNlYXNlcHJlZGljYXRlc1BhY2thZ2UuZUlOU1RBTkNFOworCX0KKworfSAvL0Rpc2Vhc2VwcmVkaWNhdGVzRmFjdG9yeUltcGwKZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvcHJlZGljYXRlcy9kaXNlYXNlcHJlZGljYXRlcy9pbXBsL0Rpc2Vhc2VwcmVkaWNhdGVzUGFja2FnZUltcGwuamF2YSBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvcHJlZGljYXRlcy9kaXNlYXNlcHJlZGljYXRlcy9pbXBsL0Rpc2Vhc2VwcmVkaWNhdGVzUGFja2FnZUltcGwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZGIxMDRmCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9wcmVkaWNhdGVzL2Rpc2Vhc2VwcmVkaWNhdGVzL2ltcGwvRGlzZWFzZXByZWRpY2F0ZXNQYWNrYWdlSW1wbC5qYXZhCkBAIC0wLDAgKzEsMjY3IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5wcmVkaWNhdGVzLmRpc2Vhc2VwcmVkaWNhdGVzLmltcGw7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIAorICogQ29weXJpZ2h0IChjKSAyMDExIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiAKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdCAKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sIAorICogCisgKiBDb250cmlidXRvcnM6IAorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiAKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVBdHRyaWJ1dGU7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzczsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRVBhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVjb3JlUGFja2FnZTsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5pbXBsLkVQYWNrYWdlSW1wbDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uQ29tbW9uUGFja2FnZTsKKworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5sb2dnZXIuTG9nZ2VyUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlLlByZWRpY2F0ZVBhY2thZ2U7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMucHJlZGljYXRlcy5kaXNlYXNlcHJlZGljYXRlcy5EaXNlYXNlcHJlZGljYXRlc0ZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnByZWRpY2F0ZXMuZGlzZWFzZXByZWRpY2F0ZXMuRGlzZWFzZXByZWRpY2F0ZXNQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5wcmVkaWNhdGVzLmRpc2Vhc2VwcmVkaWNhdGVzLkxhYmVsVmFsdWVUZXN0OworCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLmltcGwuU3RhbmRhcmRQYWNrYWdlSW1wbDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZFBhY2thZ2U7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIEFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBtb2RlbCA8Yj5QYWNrYWdlPC9iPi4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgRGlzZWFzZXByZWRpY2F0ZXNQYWNrYWdlSW1wbCBleHRlbmRzIEVQYWNrYWdlSW1wbCBpbXBsZW1lbnRzIERpc2Vhc2VwcmVkaWNhdGVzUGFja2FnZSB7CisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJpdmF0ZSBFQ2xhc3MgbGFiZWxWYWx1ZVRlc3RFQ2xhc3MgPSBudWxsOworCisJLyoqCisJICogQ3JlYXRlcyBhbiBpbnN0YW5jZSBvZiB0aGUgbW9kZWwgPGI+UGFja2FnZTwvYj4sIHJlZ2lzdGVyZWQgd2l0aAorCSAqIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRVBhY2thZ2UuUmVnaXN0cnkgRVBhY2thZ2UuUmVnaXN0cnl9IGJ5IHRoZSBwYWNrYWdlCisJICogcGFja2FnZSBVUkkgdmFsdWUuCisJICogPHA+Tm90ZTogdGhlIGNvcnJlY3Qgd2F5IHRvIGNyZWF0ZSB0aGUgcGFja2FnZSBpcyB2aWEgdGhlIHN0YXRpYworCSAqIGZhY3RvcnkgbWV0aG9kIHtAbGluayAjaW5pdCBpbml0KCl9LCB3aGljaCBhbHNvIHBlcmZvcm1zCisJICogaW5pdGlhbGl6YXRpb24gb2YgdGhlIHBhY2thZ2UsIG9yIHJldHVybnMgdGhlIHJlZ2lzdGVyZWQgcGFja2FnZSwKKwkgKiBpZiBvbmUgYWxyZWFkeSBleGlzdHMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FUGFja2FnZS5SZWdpc3RyeQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnByZWRpY2F0ZXMuZGlzZWFzZXByZWRpY2F0ZXMuRGlzZWFzZXByZWRpY2F0ZXNQYWNrYWdlI2VOU19VUkkKKwkgKiBAc2VlICNpbml0KCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJpdmF0ZSBEaXNlYXNlcHJlZGljYXRlc1BhY2thZ2VJbXBsKCkgeworCQlzdXBlcihlTlNfVVJJLCBEaXNlYXNlcHJlZGljYXRlc0ZhY3RvcnkuZUlOU1RBTkNFKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcml2YXRlIHN0YXRpYyBib29sZWFuIGlzSW5pdGVkID0gZmFsc2U7CisKKwkvKioKKwkgKiBDcmVhdGVzLCByZWdpc3RlcnMsIGFuZCBpbml0aWFsaXplcyB0aGUgPGI+UGFja2FnZTwvYj4gZm9yIHRoaXMgbW9kZWwsIGFuZCBmb3IgYW55IG90aGVycyB1cG9uIHdoaWNoIGl0IGRlcGVuZHMuCisJICogCisJICogPHA+VGhpcyBtZXRob2QgaXMgdXNlZCB0byBpbml0aWFsaXplIHtAbGluayBEaXNlYXNlcHJlZGljYXRlc1BhY2thZ2UjZUlOU1RBTkNFfSB3aGVuIHRoYXQgZmllbGQgaXMgYWNjZXNzZWQuCisJICogQ2xpZW50cyBzaG91bGQgbm90IGludm9rZSBpdCBkaXJlY3RseS4gSW5zdGVhZCwgdGhleSBzaG91bGQgc2ltcGx5IGFjY2VzcyB0aGF0IGZpZWxkIHRvIG9idGFpbiB0aGUgcGFja2FnZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI2VOU19VUkkKKwkgKiBAc2VlICNjcmVhdGVQYWNrYWdlQ29udGVudHMoKQorCSAqIEBzZWUgI2luaXRpYWxpemVQYWNrYWdlQ29udGVudHMoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgc3RhdGljIERpc2Vhc2VwcmVkaWNhdGVzUGFja2FnZSBpbml0KCkgeworCQlpZiAoaXNJbml0ZWQpIHJldHVybiAoRGlzZWFzZXByZWRpY2F0ZXNQYWNrYWdlKUVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVQYWNrYWdlKERpc2Vhc2VwcmVkaWNhdGVzUGFja2FnZS5lTlNfVVJJKTsKKworCQkvLyBPYnRhaW4gb3IgY3JlYXRlIGFuZCByZWdpc3RlciBwYWNrYWdlCisJCURpc2Vhc2VwcmVkaWNhdGVzUGFja2FnZUltcGwgdGhlRGlzZWFzZXByZWRpY2F0ZXNQYWNrYWdlID0gKERpc2Vhc2VwcmVkaWNhdGVzUGFja2FnZUltcGwpKEVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldChlTlNfVVJJKSBpbnN0YW5jZW9mIERpc2Vhc2VwcmVkaWNhdGVzUGFja2FnZUltcGwgPyBFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXQoZU5TX1VSSSkgOiBuZXcgRGlzZWFzZXByZWRpY2F0ZXNQYWNrYWdlSW1wbCgpKTsKKworCQlpc0luaXRlZCA9IHRydWU7CisKKwkJLy8gSW5pdGlhbGl6ZSBzaW1wbGUgZGVwZW5kZW5jaWVzCisJCVByZWRpY2F0ZVBhY2thZ2UuZUlOU1RBTkNFLmVDbGFzcygpOworCQlTdGFuZGFyZFBhY2thZ2UuZUlOU1RBTkNFLmVDbGFzcygpOworCQlMb2dnZXJQYWNrYWdlLmVJTlNUQU5DRS5lQ2xhc3MoKTsKKworCQkvLyBPYnRhaW4gb3IgY3JlYXRlIGFuZCByZWdpc3RlciBpbnRlcmRlcGVuZGVuY2llcworCQlTdGFuZGFyZFBhY2thZ2VJbXBsIHRoZVN0YW5kYXJkUGFja2FnZV8xID0gKFN0YW5kYXJkUGFja2FnZUltcGwpKEVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVQYWNrYWdlKG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZFBhY2thZ2UuZU5TX1VSSSkgaW5zdGFuY2VvZiBTdGFuZGFyZFBhY2thZ2VJbXBsID8gRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RVBhY2thZ2Uob3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkUGFja2FnZS5lTlNfVVJJKSA6IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZFBhY2thZ2UuZUlOU1RBTkNFKTsKKworCQkvLyBDcmVhdGUgcGFja2FnZSBtZXRhLWRhdGEgb2JqZWN0cworCQl0aGVEaXNlYXNlcHJlZGljYXRlc1BhY2thZ2UuY3JlYXRlUGFja2FnZUNvbnRlbnRzKCk7CisJCXRoZVN0YW5kYXJkUGFja2FnZV8xLmNyZWF0ZVBhY2thZ2VDb250ZW50cygpOworCisJCS8vIEluaXRpYWxpemUgY3JlYXRlZCBtZXRhLWRhdGEKKwkJdGhlRGlzZWFzZXByZWRpY2F0ZXNQYWNrYWdlLmluaXRpYWxpemVQYWNrYWdlQ29udGVudHMoKTsKKwkJdGhlU3RhbmRhcmRQYWNrYWdlXzEuaW5pdGlhbGl6ZVBhY2thZ2VDb250ZW50cygpOworCisJCS8vIE1hcmsgbWV0YS1kYXRhIHRvIGluZGljYXRlIGl0IGNhbid0IGJlIGNoYW5nZWQKKwkJdGhlRGlzZWFzZXByZWRpY2F0ZXNQYWNrYWdlLmZyZWV6ZSgpOworCisgIAorCQkvLyBVcGRhdGUgdGhlIHJlZ2lzdHJ5IGFuZCByZXR1cm4gdGhlIHBhY2thZ2UKKwkJRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UucHV0KERpc2Vhc2VwcmVkaWNhdGVzUGFja2FnZS5lTlNfVVJJLCB0aGVEaXNlYXNlcHJlZGljYXRlc1BhY2thZ2UpOworCQlyZXR1cm4gdGhlRGlzZWFzZXByZWRpY2F0ZXNQYWNrYWdlOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQ2xhc3MgZ2V0TGFiZWxWYWx1ZVRlc3QoKSB7CisJCXJldHVybiBsYWJlbFZhbHVlVGVzdEVDbGFzczsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUF0dHJpYnV0ZSBnZXRMYWJlbFZhbHVlVGVzdF9Nb2RlbE5hbWUoKSB7CisJCXJldHVybiAoRUF0dHJpYnV0ZSlsYWJlbFZhbHVlVGVzdEVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDApOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQXR0cmlidXRlIGdldExhYmVsVmFsdWVUZXN0X1RhcmdldFVSSSgpIHsKKwkJcmV0dXJuIChFQXR0cmlidXRlKWxhYmVsVmFsdWVUZXN0RUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVBdHRyaWJ1dGUgZ2V0TGFiZWxWYWx1ZVRlc3RfU3RhdGUoKSB7CisJCXJldHVybiAoRUF0dHJpYnV0ZSlsYWJlbFZhbHVlVGVzdEVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDIpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQXR0cmlidXRlIGdldExhYmVsVmFsdWVUZXN0X1RocmVzaG9sZCgpIHsKKwkJcmV0dXJuIChFQXR0cmlidXRlKWxhYmVsVmFsdWVUZXN0RUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMyk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVBdHRyaWJ1dGUgZ2V0TGFiZWxWYWx1ZVRlc3RfUHJlZGljYXRlKCkgeworCQlyZXR1cm4gKEVBdHRyaWJ1dGUpbGFiZWxWYWx1ZVRlc3RFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCg0KTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUF0dHJpYnV0ZSBnZXRMYWJlbFZhbHVlVGVzdF9Qb3B1bGF0aW9uSWRlbnRpZmllcigpIHsKKwkJcmV0dXJuIChFQXR0cmlidXRlKWxhYmVsVmFsdWVUZXN0RUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoNSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIERpc2Vhc2VwcmVkaWNhdGVzRmFjdG9yeSBnZXREaXNlYXNlcHJlZGljYXRlc0ZhY3RvcnkoKSB7CisJCXJldHVybiAoRGlzZWFzZXByZWRpY2F0ZXNGYWN0b3J5KWdldEVGYWN0b3J5SW5zdGFuY2UoKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcml2YXRlIGJvb2xlYW4gaXNDcmVhdGVkID0gZmFsc2U7CisKKwkvKioKKwkgKiBDcmVhdGVzIHRoZSBtZXRhLW1vZGVsIG9iamVjdHMgZm9yIHRoZSBwYWNrYWdlLiAgVGhpcyBtZXRob2QgaXMKKwkgKiBndWFyZGVkIHRvIGhhdmUgbm8gYWZmZWN0IG9uIGFueSBpbnZvY2F0aW9uIGJ1dCBpdHMgZmlyc3QuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgY3JlYXRlUGFja2FnZUNvbnRlbnRzKCkgeworCQlpZiAoaXNDcmVhdGVkKSByZXR1cm47CisJCWlzQ3JlYXRlZCA9IHRydWU7CisKKwkJLy8gQ3JlYXRlIGNsYXNzZXMgYW5kIHRoZWlyIGZlYXR1cmVzCisJCWxhYmVsVmFsdWVUZXN0RUNsYXNzID0gY3JlYXRlRUNsYXNzKExBQkVMX1ZBTFVFX1RFU1QpOworCQljcmVhdGVFQXR0cmlidXRlKGxhYmVsVmFsdWVUZXN0RUNsYXNzLCBMQUJFTF9WQUxVRV9URVNUX19NT0RFTF9OQU1FKTsKKwkJY3JlYXRlRUF0dHJpYnV0ZShsYWJlbFZhbHVlVGVzdEVDbGFzcywgTEFCRUxfVkFMVUVfVEVTVF9fVEFSR0VUX1VSSSk7CisJCWNyZWF0ZUVBdHRyaWJ1dGUobGFiZWxWYWx1ZVRlc3RFQ2xhc3MsIExBQkVMX1ZBTFVFX1RFU1RfX1NUQVRFKTsKKwkJY3JlYXRlRUF0dHJpYnV0ZShsYWJlbFZhbHVlVGVzdEVDbGFzcywgTEFCRUxfVkFMVUVfVEVTVF9fVEhSRVNIT0xEKTsKKwkJY3JlYXRlRUF0dHJpYnV0ZShsYWJlbFZhbHVlVGVzdEVDbGFzcywgTEFCRUxfVkFMVUVfVEVTVF9fUFJFRElDQVRFKTsKKwkJY3JlYXRlRUF0dHJpYnV0ZShsYWJlbFZhbHVlVGVzdEVDbGFzcywgTEFCRUxfVkFMVUVfVEVTVF9fUE9QVUxBVElPTl9JREVOVElGSUVSKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcml2YXRlIGJvb2xlYW4gaXNJbml0aWFsaXplZCA9IGZhbHNlOworCisJLyoqCisJICogQ29tcGxldGUgdGhlIGluaXRpYWxpemF0aW9uIG9mIHRoZSBwYWNrYWdlIGFuZCBpdHMgbWV0YS1tb2RlbC4gIFRoaXMKKwkgKiBtZXRob2QgaXMgZ3VhcmRlZCB0byBoYXZlIG5vIGFmZmVjdCBvbiBhbnkgaW52b2NhdGlvbiBidXQgaXRzIGZpcnN0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIGluaXRpYWxpemVQYWNrYWdlQ29udGVudHMoKSB7CisJCWlmIChpc0luaXRpYWxpemVkKSByZXR1cm47CisJCWlzSW5pdGlhbGl6ZWQgPSB0cnVlOworCisJCS8vIEluaXRpYWxpemUgcGFja2FnZQorCQlzZXROYW1lKGVOQU1FKTsKKwkJc2V0TnNQcmVmaXgoZU5TX1BSRUZJWCk7CisJCXNldE5zVVJJKGVOU19VUkkpOworCisJCS8vIE9idGFpbiBvdGhlciBkZXBlbmRlbnQgcGFja2FnZXMKKwkJUHJlZGljYXRlUGFja2FnZSB0aGVQcmVkaWNhdGVQYWNrYWdlID0gKFByZWRpY2F0ZVBhY2thZ2UpRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RVBhY2thZ2UoUHJlZGljYXRlUGFja2FnZS5lTlNfVVJJKTsKKwkJRWNvcmVQYWNrYWdlIHRoZUVjb3JlUGFja2FnZSA9IChFY29yZVBhY2thZ2UpRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RVBhY2thZ2UoRWNvcmVQYWNrYWdlLmVOU19VUkkpOworCQlDb21tb25QYWNrYWdlIHRoZUNvbW1vblBhY2thZ2UgPSAoQ29tbW9uUGFja2FnZSlFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShDb21tb25QYWNrYWdlLmVOU19VUkkpOworCisJCS8vIENyZWF0ZSB0eXBlIHBhcmFtZXRlcnMKKworCQkvLyBTZXQgYm91bmRzIGZvciB0eXBlIHBhcmFtZXRlcnMKKworCQkvLyBBZGQgc3VwZXJ0eXBlcyB0byBjbGFzc2VzCisJCWxhYmVsVmFsdWVUZXN0RUNsYXNzLmdldEVTdXBlclR5cGVzKCkuYWRkKHRoZVByZWRpY2F0ZVBhY2thZ2UuZ2V0VGVzdCgpKTsKKworCQkvLyBJbml0aWFsaXplIGNsYXNzZXMgYW5kIGZlYXR1cmVzOyBhZGQgb3BlcmF0aW9ucyBhbmQgcGFyYW1ldGVycworCQlpbml0RUNsYXNzKGxhYmVsVmFsdWVUZXN0RUNsYXNzLCBMYWJlbFZhbHVlVGVzdC5jbGFzcywgIkxhYmVsVmFsdWVUZXN0IiwgIUlTX0FCU1RSQUNULCAhSVNfSU5URVJGQUNFLCBJU19HRU5FUkFURURfSU5TVEFOQ0VfQ0xBU1MpOyAvLyROT04tTkxTLTEkCisJCWluaXRFQXR0cmlidXRlKGdldExhYmVsVmFsdWVUZXN0X01vZGVsTmFtZSgpLCB0aGVFY29yZVBhY2thZ2UuZ2V0RVN0cmluZygpLCAibW9kZWxOYW1lIiwgbnVsbCwgMCwgMSwgTGFiZWxWYWx1ZVRlc3QuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7IC8vJE5PTi1OTFMtMSQKKwkJaW5pdEVBdHRyaWJ1dGUoZ2V0TGFiZWxWYWx1ZVRlc3RfVGFyZ2V0VVJJKCksIHRoZUNvbW1vblBhY2thZ2UuZ2V0VVJJKCksICJ0YXJnZXRVUkkiLCBudWxsLCAwLCAxLCBMYWJlbFZhbHVlVGVzdC5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsgLy8kTk9OLU5MUy0xJAorCQlpbml0RUF0dHJpYnV0ZShnZXRMYWJlbFZhbHVlVGVzdF9TdGF0ZSgpLCB0aGVFY29yZVBhY2thZ2UuZ2V0RVN0cmluZygpLCAic3RhdGUiLCAiaW5jaWRlbmNlIiwgMCwgMSwgTGFiZWxWYWx1ZVRlc3QuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAorCQlpbml0RUF0dHJpYnV0ZShnZXRMYWJlbFZhbHVlVGVzdF9UaHJlc2hvbGQoKSwgdGhlRWNvcmVQYWNrYWdlLmdldEVEb3VibGUoKSwgInRocmVzaG9sZCIsICIxMDAiLCAwLCAxLCBMYWJlbFZhbHVlVGVzdC5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCisJCWluaXRFQXR0cmlidXRlKGdldExhYmVsVmFsdWVUZXN0X1ByZWRpY2F0ZSgpLCB0aGVFY29yZVBhY2thZ2UuZ2V0RVN0cmluZygpLCAicHJlZGljYXRlIiwgIj4iLCAwLCAxLCBMYWJlbFZhbHVlVGVzdC5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCisJCWluaXRFQXR0cmlidXRlKGdldExhYmVsVmFsdWVUZXN0X1BvcHVsYXRpb25JZGVudGlmaWVyKCksIHRoZUVjb3JlUGFja2FnZS5nZXRFU3RyaW5nKCksICJwb3B1bGF0aW9uSWRlbnRpZmllciIsICJodW1hbiIsIDAsIDEsIExhYmVsVmFsdWVUZXN0LmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKKworCQkvLyBDcmVhdGUgcmVzb3VyY2UKKwkJY3JlYXRlUmVzb3VyY2UoZU5TX1VSSSk7CisJfQorCit9IC8vRGlzZWFzZXByZWRpY2F0ZXNQYWNrYWdlSW1wbApkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9wcmVkaWNhdGVzL2Rpc2Vhc2VwcmVkaWNhdGVzL2ltcGwvTGFiZWxWYWx1ZVRlc3RJbXBsLmphdmEgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3ByZWRpY2F0ZXMvZGlzZWFzZXByZWRpY2F0ZXMvaW1wbC9MYWJlbFZhbHVlVGVzdEltcGwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZTkwY2ViCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9wcmVkaWNhdGVzL2Rpc2Vhc2VwcmVkaWNhdGVzL2ltcGwvTGFiZWxWYWx1ZVRlc3RJbXBsLmphdmEKQEAgLTAsMCArMSw1NjEgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnByZWRpY2F0ZXMuZGlzZWFzZXByZWRpY2F0ZXMuaW1wbDsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogCisgKiBDb3B5cmlnaHQgKGMpIDIwMTEgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuIAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyAKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0IAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwgCisgKiAKKyAqIENvbnRyaWJ1dG9yczogCisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqYXZhLnV0aWwuSGFzaFNldDsKK2ltcG9ydCBqYXZhLnV0aWwuU2V0OworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uOworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlVSSTsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQXR0cmlidXRlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVEYXRhVHlwZTsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5pbXBsLkVOb3RpZmljYXRpb25JbXBsOworCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkR5bmFtaWNMYWJlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguR3JhcGg7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkxhYmVsVmFsdWU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLk5vZGU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLk5vZGVMYWJlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuRGVjb3JhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5TVEVNVGltZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlLmltcGwuVGVzdEltcGw7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLkxvY2F0aW9uVXRpbGl0eTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMucHJlZGljYXRlcy5kaXNlYXNlcHJlZGljYXRlcy5EaXNlYXNlcHJlZGljYXRlc1BhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnByZWRpY2F0ZXMuZGlzZWFzZXByZWRpY2F0ZXMuTGFiZWxWYWx1ZVRlc3Q7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLkRpc2Vhc2VNb2RlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuRGlzZWFzZU1vZGVsTGFiZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLlBvcHVsYXRpb25Nb2RlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuUG9wdWxhdGlvbk1vZGVsTGFiZWw7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIEFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5MYWJlbCBWYWx1ZSBUZXN0PC9iPjwvZW0+Jy4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogPHA+CisgKiBUaGUgZm9sbG93aW5nIGZlYXR1cmVzIGFyZSBpbXBsZW1lbnRlZDoKKyAqIDx1bD4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMucHJlZGljYXRlcy5kaXNlYXNlcHJlZGljYXRlcy5pbXBsLkxhYmVsVmFsdWVUZXN0SW1wbCNnZXRNb2RlbE5hbWUgPGVtPk1vZGVsIE5hbWU8L2VtPn08L2xpPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5wcmVkaWNhdGVzLmRpc2Vhc2VwcmVkaWNhdGVzLmltcGwuTGFiZWxWYWx1ZVRlc3RJbXBsI2dldFRhcmdldFVSSSA8ZW0+VGFyZ2V0IFVSSTwvZW0+fTwvbGk+CisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnByZWRpY2F0ZXMuZGlzZWFzZXByZWRpY2F0ZXMuaW1wbC5MYWJlbFZhbHVlVGVzdEltcGwjZ2V0U3RhdGUgPGVtPlN0YXRlPC9lbT59PC9saT4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMucHJlZGljYXRlcy5kaXNlYXNlcHJlZGljYXRlcy5pbXBsLkxhYmVsVmFsdWVUZXN0SW1wbCNnZXRUaHJlc2hvbGQgPGVtPlRocmVzaG9sZDwvZW0+fTwvbGk+CisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnByZWRpY2F0ZXMuZGlzZWFzZXByZWRpY2F0ZXMuaW1wbC5MYWJlbFZhbHVlVGVzdEltcGwjZ2V0UHJlZGljYXRlIDxlbT5QcmVkaWNhdGU8L2VtPn08L2xpPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5wcmVkaWNhdGVzLmRpc2Vhc2VwcmVkaWNhdGVzLmltcGwuTGFiZWxWYWx1ZVRlc3RJbXBsI2dldFBvcHVsYXRpb25JZGVudGlmaWVyIDxlbT5Qb3B1bGF0aW9uIElkZW50aWZpZXI8L2VtPn08L2xpPgorICogPC91bD4KKyAqIDwvcD4KKyAqCisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBMYWJlbFZhbHVlVGVzdEltcGwgZXh0ZW5kcyBUZXN0SW1wbCBpbXBsZW1lbnRzIExhYmVsVmFsdWVUZXN0IHsKKwkvKioKKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0TW9kZWxOYW1lKCkgPGVtPk1vZGVsIE5hbWU8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI2dldE1vZGVsTmFtZSgpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBTdHJpbmcgTU9ERUxfTkFNRV9FREVGQVVMVCA9IG51bGw7CisKKwkvKioKKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRNb2RlbE5hbWUoKSA8ZW0+TW9kZWwgTmFtZTwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZ2V0TW9kZWxOYW1lKCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgU3RyaW5nIG1vZGVsTmFtZSA9IE1PREVMX05BTUVfRURFRkFVTFQ7CisKKwkvKioKKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0VGFyZ2V0VVJJKCkgPGVtPlRhcmdldCBVUkk8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI2dldFRhcmdldFVSSSgpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBVUkkgVEFSR0VUX1VSSV9FREVGQVVMVCA9IG51bGw7CisKKwkvKioKKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRUYXJnZXRVUkkoKSA8ZW0+VGFyZ2V0IFVSSTwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZ2V0VGFyZ2V0VVJJKCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgVVJJIHRhcmdldFVSSSA9IFRBUkdFVF9VUklfRURFRkFVTFQ7CisKKwkvKioKKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0U3RhdGUoKSA8ZW0+U3RhdGU8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI2dldFN0YXRlKCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIFN0cmluZyBTVEFURV9FREVGQVVMVCA9ICJpbmNpZGVuY2UiOyAvLyROT04tTkxTLTEkCisKKwkvKioKKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRTdGF0ZSgpIDxlbT5TdGF0ZTwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZ2V0U3RhdGUoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBTdHJpbmcgc3RhdGUgPSBTVEFURV9FREVGQVVMVDsKKworCS8qKgorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRUaHJlc2hvbGQoKSA8ZW0+VGhyZXNob2xkPC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNnZXRUaHJlc2hvbGQoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgZG91YmxlIFRIUkVTSE9MRF9FREVGQVVMVCA9IDEwMC4wOworCisJLyoqCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0VGhyZXNob2xkKCkgPGVtPlRocmVzaG9sZDwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZ2V0VGhyZXNob2xkKCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgZG91YmxlIHRocmVzaG9sZCA9IFRIUkVTSE9MRF9FREVGQVVMVDsKKworCS8qKgorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRQcmVkaWNhdGUoKSA8ZW0+UHJlZGljYXRlPC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNnZXRQcmVkaWNhdGUoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgU3RyaW5nIFBSRURJQ0FURV9FREVGQVVMVCA9ICI+IjsgLy8kTk9OLU5MUy0xJAorCisJLyoqCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0UHJlZGljYXRlKCkgPGVtPlByZWRpY2F0ZTwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZ2V0UHJlZGljYXRlKCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgU3RyaW5nIHByZWRpY2F0ZSA9IFBSRURJQ0FURV9FREVGQVVMVDsKKworCS8qKgorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRQb3B1bGF0aW9uSWRlbnRpZmllcigpIDxlbT5Qb3B1bGF0aW9uIElkZW50aWZpZXI8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI2dldFBvcHVsYXRpb25JZGVudGlmaWVyKCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIFN0cmluZyBQT1BVTEFUSU9OX0lERU5USUZJRVJfRURFRkFVTFQgPSAiaHVtYW4iOyAvLyROT04tTkxTLTEkCisKKwkvKioKKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRQb3B1bGF0aW9uSWRlbnRpZmllcigpIDxlbT5Qb3B1bGF0aW9uIElkZW50aWZpZXI8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI2dldFBvcHVsYXRpb25JZGVudGlmaWVyKCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgU3RyaW5nIHBvcHVsYXRpb25JZGVudGlmaWVyID0gUE9QVUxBVElPTl9JREVOVElGSUVSX0VERUZBVUxUOworCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIExhYmVsVmFsdWVUZXN0SW1wbCgpIHsKKwkJc3VwZXIoKTsKKwl9CisKKwlTZXQ8TGFiZWxWYWx1ZT4gbGFiZWxWYWx1ZUNhY2hlOworCUVBdHRyaWJ1dGUgYXR0cmlidXRlOworCQorCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgYm9vbGVhbiBldmFsdWF0ZShTVEVNVGltZSB0aW1lLCBsb25nIHRpbWVyUGVyaW9kLCBHcmFwaCBncmFwaCkgeworCQkvLyBGaXJzdCBmaW5kIHRoZSByZWdpb24gKG9yIHNldCBvZiByZWdpb25zIGNvbnRhaW5lZCkgYnkgdGhlIHRhcmdldElTT0tleQorCQkKKwkJaWYobGFiZWxWYWx1ZUNhY2hlID09IG51bGwpCisJCQlsYWJlbFZhbHVlQ2FjaGUgPSB0aGlzLmZpbmRMYWJlbFZhbHVlcyhncmFwaCk7CisJCQorCQlpZihsYWJlbFZhbHVlQ2FjaGUgPT0gbnVsbCkgcmV0dXJuIGZhbHNlOyAvLyBVbmFibGUgdG8gZmluZCB0aGUgZGlzZWFzZSBvciBvdGhlciBwcm9ibGVtCisJCWRvdWJsZSB0b3RhbENvdW50ID0gMC4wOworCQkKKwkJZm9yKExhYmVsVmFsdWUgY3VycmVudFZhbHVlOmxhYmVsVmFsdWVDYWNoZSkgeworCQkJZG91YmxlIHZhbCA9IChEb3VibGUpY3VycmVudFZhbHVlLmVHZXQoYXR0cmlidXRlKTsKKwkJCXRvdGFsQ291bnQgKz0gdmFsOworCQl9CisJCQorCQkvLyBDaGVjayB0aHJlc2hvbGQKKwkJCisJCWlmKHRoaXMuZ2V0UHJlZGljYXRlKCkuZXF1YWxzKCI9IikgJiYgdG90YWxDb3VudCA9PSB0aGlzLmdldFRocmVzaG9sZCgpKQorCQkJcmV0dXJuIHRydWU7CisJCWVsc2UgaWYodGhpcy5nZXRQcmVkaWNhdGUoKS5lcXVhbHMoIj4iKSAmJiB0b3RhbENvdW50ID4gdGhpcy5nZXRUaHJlc2hvbGQoKSkKKwkJCXJldHVybiB0cnVlOworCQllbHNlIGlmKHRoaXMuZ2V0UHJlZGljYXRlKCkuZXF1YWxzKCI8IikgJiYgdG90YWxDb3VudCA8IHRoaXMuZ2V0VGhyZXNob2xkKCkpCisJCQlyZXR1cm4gdHJ1ZTsKKwkJZWxzZSBpZih0aGlzLmdldFByZWRpY2F0ZSgpLmVxdWFscygiPj0iKSAmJiB0b3RhbENvdW50ID49IHRoaXMuZ2V0VGhyZXNob2xkKCkpCisJCQlyZXR1cm4gdHJ1ZTsKKwkJZWxzZSBpZih0aGlzLmdldFByZWRpY2F0ZSgpLmVxdWFscygiPD0iKSAmJiB0b3RhbENvdW50IDw9IHRoaXMuZ2V0VGhyZXNob2xkKCkpCisJCQlyZXR1cm4gdHJ1ZTsKKwkJCisJCXJldHVybiBmYWxzZTsKKwl9CisKKwlTZXQ8TGFiZWxWYWx1ZT4gZmluZExhYmVsVmFsdWVzKEdyYXBoIGdyYXBoKSB7CisJCQorCQlIYXNoU2V0PExhYmVsVmFsdWU+ICByZXR1cm5WYWx1ZSA9IG5ldyBIYXNoU2V0PExhYmVsVmFsdWU+KCk7CisJCQorCQlmaW5hbCBOb2RlIHBhcmVudCA9IGdyYXBoLmdldE5vZGUoZ2V0VGFyZ2V0VVJJKCkpOworCQlTZXQ8Tm9kZT4gY2hpbGRyZW4gPSBMb2NhdGlvblV0aWxpdHkuZ2V0QWxsQ2hpbGRyZW4ocGFyZW50KTsKKwkJY2hpbGRyZW4uYWRkKHBhcmVudCk7CisJCQorCQkvLyBGaW5kIHRoZSBtYXRjaGluZyBkaXNlYXNlL3BvcHVsYXRpb24gbW9kZWwKKwkJCisJCURlY29yYXRvciBkZWMgPSBudWxsOworCQkKKwkJZm9yKERlY29yYXRvciBkOmdyYXBoLmdldERlY29yYXRvcnMoKSkgeworCQkJaWYoZCBpbnN0YW5jZW9mIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5EaXNlYXNlTW9kZWwgJiYgCisJCQkJCSgoRGlzZWFzZU1vZGVsKWQpLmdldERpc2Vhc2VOYW1lKCkuZXF1YWxzKHRoaXMuZ2V0TW9kZWxOYW1lKCkpIHx8CisJCQkJCWQgaW5zdGFuY2VvZiBQb3B1bGF0aW9uTW9kZWwgJiYgKChQb3B1bGF0aW9uTW9kZWwpZCkuZ2V0TmFtZSgpLmVxdWFscyh0aGlzLmdldE1vZGVsTmFtZSgpKSkgeyBkZWMgPSBkO2JyZWFrO30KKwkJfQorCQkKKwkJaWYoZGVjID09IG51bGwpIC8vIE5vdCBmb3VuZAorCQkJcmV0dXJuIG51bGw7CisJCQorCQkvLyBOb3cgZmluZCB0aGUgbWF0Y2hpbmcgZGlzZWFzZSBsYWJlbCBhbmQgYWRkIHVwIHRoZSBzdGF0ZXMgCisJCQkKKwkJZm9yKE5vZGUgcmVnaW9uOmNoaWxkcmVuKSB7CisJCQlmb3IoTm9kZUxhYmVsIGxhYmVsIDogcmVnaW9uLmdldExhYmVscygpKSB7CisJCQkJaWYoIShsYWJlbCBpbnN0YW5jZW9mIER5bmFtaWNMYWJlbCkpIGNvbnRpbnVlOworCQkJCUR5bmFtaWNMYWJlbCBkbCA9IChEeW5hbWljTGFiZWwpbGFiZWw7CisJCQkJaWYoZGwuZ2V0RGVjb3JhdG9yKCkuZXF1YWxzKGRlYykgJiYgCisJCQkJCQkoZGwgaW5zdGFuY2VvZiBEaXNlYXNlTW9kZWxMYWJlbCAmJiAoKERpc2Vhc2VNb2RlbExhYmVsKWRsKS5nZXRQb3B1bGF0aW9uTW9kZWxMYWJlbCgpLmdldFBvcHVsYXRpb25JZGVudGlmaWVyKCkuZXF1YWxzKHRoaXMuZ2V0UG9wdWxhdGlvbklkZW50aWZpZXIoKSkpIHx8CisJCQkJCQkoZGwgaW5zdGFuY2VvZiBQb3B1bGF0aW9uTW9kZWxMYWJlbCAmJiAoKFBvcHVsYXRpb25Nb2RlbExhYmVsKWRsKS5nZXRQb3B1bGF0aW9uSWRlbnRpZmllcigpLmVxdWFscyh0aGlzLmdldFBvcHVsYXRpb25JZGVudGlmaWVyKCkpKSkgeworCQkJCQkKKwkJCQkJTGFiZWxWYWx1ZSBjdXJyZW50VmFsdWUgPSBkbC5nZXRDdXJyZW50VmFsdWUoKTsKKwkJCQkJLy8gRmluZCB0aGUgbWF0Y2hpbmcgc3RhdGUKKwkJCQkJZm9yKEVBdHRyaWJ1dGUgZWE6Y3VycmVudFZhbHVlLmVDbGFzcygpLmdldEVBbGxBdHRyaWJ1dGVzKCkpIHsKKwkJCQkJCUVEYXRhVHlwZSBlc2YgPWVhLmdldEVBdHRyaWJ1dGVUeXBlKCk7CisJCQkJCQlpZighZXNmLmdldE5hbWUoKS5lcXVhbHMoIkVEb3VibGUiKSkgY29udGludWU7CisJCQkJCQlpZihlYS5nZXROYW1lKCkuZXF1YWxzKHRoaXMuZ2V0U3RhdGUoKSkpIHsKKwkJCQkJCQlpZihhdHRyaWJ1dGUgPT0gbnVsbCkgYXR0cmlidXRlID0gZWE7CisJCQkJCQkJcmV0dXJuVmFsdWUuYWRkKGN1cnJlbnRWYWx1ZSk7CisJCQkJCQkJYnJlYWs7CisJCQkJCQl9CisJCQkJCX0KKwkJCQl9CisJCQl9CisJCX0KKworCQlyZXR1cm4gcmV0dXJuVmFsdWU7CisJfQorCQorCQorCS8qKgorCSAqIFJlc2V0IHRoZSBjYWNoZQorCSAqLworCQorCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIHJlc2V0KCkgeworCQl0aGlzLmF0dHJpYnV0ZSA9IG51bGw7CisJCXRoaXMubGFiZWxWYWx1ZUNhY2hlID0gbnVsbDsKKwl9CisJCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIEVDbGFzcyBlU3RhdGljQ2xhc3MoKSB7CisJCXJldHVybiBEaXNlYXNlcHJlZGljYXRlc1BhY2thZ2UuTGl0ZXJhbHMuTEFCRUxfVkFMVUVfVEVTVDsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgU3RyaW5nIGdldE1vZGVsTmFtZSgpIHsKKwkJcmV0dXJuIG1vZGVsTmFtZTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRNb2RlbE5hbWUoU3RyaW5nIG5ld01vZGVsTmFtZSkgeworCQlTdHJpbmcgb2xkTW9kZWxOYW1lID0gbW9kZWxOYW1lOworCQltb2RlbE5hbWUgPSBuZXdNb2RlbE5hbWU7CisJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkKKwkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIERpc2Vhc2VwcmVkaWNhdGVzUGFja2FnZS5MQUJFTF9WQUxVRV9URVNUX19NT0RFTF9OQU1FLCBvbGRNb2RlbE5hbWUsIG1vZGVsTmFtZSkpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBVUkkgZ2V0VGFyZ2V0VVJJKCkgeworCQlyZXR1cm4gdGFyZ2V0VVJJOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIHNldFRhcmdldFVSSShVUkkgbmV3VGFyZ2V0VVJJKSB7CisJCVVSSSBvbGRUYXJnZXRVUkkgPSB0YXJnZXRVUkk7CisJCXRhcmdldFVSSSA9IG5ld1RhcmdldFVSSTsKKwkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQorCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgRGlzZWFzZXByZWRpY2F0ZXNQYWNrYWdlLkxBQkVMX1ZBTFVFX1RFU1RfX1RBUkdFVF9VUkksIG9sZFRhcmdldFVSSSwgdGFyZ2V0VVJJKSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFN0cmluZyBnZXRTdGF0ZSgpIHsKKwkJcmV0dXJuIHN0YXRlOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIHNldFN0YXRlKFN0cmluZyBuZXdTdGF0ZSkgeworCQlTdHJpbmcgb2xkU3RhdGUgPSBzdGF0ZTsKKwkJc3RhdGUgPSBuZXdTdGF0ZTsKKwkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQorCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgRGlzZWFzZXByZWRpY2F0ZXNQYWNrYWdlLkxBQkVMX1ZBTFVFX1RFU1RfX1NUQVRFLCBvbGRTdGF0ZSwgc3RhdGUpKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgZG91YmxlIGdldFRocmVzaG9sZCgpIHsKKwkJcmV0dXJuIHRocmVzaG9sZDsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRUaHJlc2hvbGQoZG91YmxlIG5ld1RocmVzaG9sZCkgeworCQlkb3VibGUgb2xkVGhyZXNob2xkID0gdGhyZXNob2xkOworCQl0aHJlc2hvbGQgPSBuZXdUaHJlc2hvbGQ7CisJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkKKwkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIERpc2Vhc2VwcmVkaWNhdGVzUGFja2FnZS5MQUJFTF9WQUxVRV9URVNUX19USFJFU0hPTEQsIG9sZFRocmVzaG9sZCwgdGhyZXNob2xkKSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFN0cmluZyBnZXRQcmVkaWNhdGUoKSB7CisJCXJldHVybiBwcmVkaWNhdGU7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgc2V0UHJlZGljYXRlKFN0cmluZyBuZXdQcmVkaWNhdGUpIHsKKwkJU3RyaW5nIG9sZFByZWRpY2F0ZSA9IHByZWRpY2F0ZTsKKwkJcHJlZGljYXRlID0gbmV3UHJlZGljYXRlOworCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpCisJCQllTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBEaXNlYXNlcHJlZGljYXRlc1BhY2thZ2UuTEFCRUxfVkFMVUVfVEVTVF9fUFJFRElDQVRFLCBvbGRQcmVkaWNhdGUsIHByZWRpY2F0ZSkpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBTdHJpbmcgZ2V0UG9wdWxhdGlvbklkZW50aWZpZXIoKSB7CisJCXJldHVybiBwb3B1bGF0aW9uSWRlbnRpZmllcjsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRQb3B1bGF0aW9uSWRlbnRpZmllcihTdHJpbmcgbmV3UG9wdWxhdGlvbklkZW50aWZpZXIpIHsKKwkJU3RyaW5nIG9sZFBvcHVsYXRpb25JZGVudGlmaWVyID0gcG9wdWxhdGlvbklkZW50aWZpZXI7CisJCXBvcHVsYXRpb25JZGVudGlmaWVyID0gbmV3UG9wdWxhdGlvbklkZW50aWZpZXI7CisJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkKKwkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIERpc2Vhc2VwcmVkaWNhdGVzUGFja2FnZS5MQUJFTF9WQUxVRV9URVNUX19QT1BVTEFUSU9OX0lERU5USUZJRVIsIG9sZFBvcHVsYXRpb25JZGVudGlmaWVyLCBwb3B1bGF0aW9uSWRlbnRpZmllcikpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBPYmplY3QgZUdldChpbnQgZmVhdHVyZUlELCBib29sZWFuIHJlc29sdmUsIGJvb2xlYW4gY29yZVR5cGUpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJCWNhc2UgRGlzZWFzZXByZWRpY2F0ZXNQYWNrYWdlLkxBQkVMX1ZBTFVFX1RFU1RfX01PREVMX05BTUU6CisJCQkJcmV0dXJuIGdldE1vZGVsTmFtZSgpOworCQkJY2FzZSBEaXNlYXNlcHJlZGljYXRlc1BhY2thZ2UuTEFCRUxfVkFMVUVfVEVTVF9fVEFSR0VUX1VSSToKKwkJCQlyZXR1cm4gZ2V0VGFyZ2V0VVJJKCk7CisJCQljYXNlIERpc2Vhc2VwcmVkaWNhdGVzUGFja2FnZS5MQUJFTF9WQUxVRV9URVNUX19TVEFURToKKwkJCQlyZXR1cm4gZ2V0U3RhdGUoKTsKKwkJCWNhc2UgRGlzZWFzZXByZWRpY2F0ZXNQYWNrYWdlLkxBQkVMX1ZBTFVFX1RFU1RfX1RIUkVTSE9MRDoKKwkJCQlyZXR1cm4gZ2V0VGhyZXNob2xkKCk7CisJCQljYXNlIERpc2Vhc2VwcmVkaWNhdGVzUGFja2FnZS5MQUJFTF9WQUxVRV9URVNUX19QUkVESUNBVEU6CisJCQkJcmV0dXJuIGdldFByZWRpY2F0ZSgpOworCQkJY2FzZSBEaXNlYXNlcHJlZGljYXRlc1BhY2thZ2UuTEFCRUxfVkFMVUVfVEVTVF9fUE9QVUxBVElPTl9JREVOVElGSUVSOgorCQkJCXJldHVybiBnZXRQb3B1bGF0aW9uSWRlbnRpZmllcigpOworCQl9CisJCXJldHVybiBzdXBlci5lR2V0KGZlYXR1cmVJRCwgcmVzb2x2ZSwgY29yZVR5cGUpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGVTZXQoaW50IGZlYXR1cmVJRCwgT2JqZWN0IG5ld1ZhbHVlKSB7CisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7CisJCQljYXNlIERpc2Vhc2VwcmVkaWNhdGVzUGFja2FnZS5MQUJFTF9WQUxVRV9URVNUX19NT0RFTF9OQU1FOgorCQkJCXNldE1vZGVsTmFtZSgoU3RyaW5nKW5ld1ZhbHVlKTsKKwkJCQlyZXR1cm47CisJCQljYXNlIERpc2Vhc2VwcmVkaWNhdGVzUGFja2FnZS5MQUJFTF9WQUxVRV9URVNUX19UQVJHRVRfVVJJOgorCQkJCXNldFRhcmdldFVSSSgoVVJJKW5ld1ZhbHVlKTsKKwkJCQlyZXR1cm47CisJCQljYXNlIERpc2Vhc2VwcmVkaWNhdGVzUGFja2FnZS5MQUJFTF9WQUxVRV9URVNUX19TVEFURToKKwkJCQlzZXRTdGF0ZSgoU3RyaW5nKW5ld1ZhbHVlKTsKKwkJCQlyZXR1cm47CisJCQljYXNlIERpc2Vhc2VwcmVkaWNhdGVzUGFja2FnZS5MQUJFTF9WQUxVRV9URVNUX19USFJFU0hPTEQ6CisJCQkJc2V0VGhyZXNob2xkKChEb3VibGUpbmV3VmFsdWUpOworCQkJCXJldHVybjsKKwkJCWNhc2UgRGlzZWFzZXByZWRpY2F0ZXNQYWNrYWdlLkxBQkVMX1ZBTFVFX1RFU1RfX1BSRURJQ0FURToKKwkJCQlzZXRQcmVkaWNhdGUoKFN0cmluZyluZXdWYWx1ZSk7CisJCQkJcmV0dXJuOworCQkJY2FzZSBEaXNlYXNlcHJlZGljYXRlc1BhY2thZ2UuTEFCRUxfVkFMVUVfVEVTVF9fUE9QVUxBVElPTl9JREVOVElGSUVSOgorCQkJCXNldFBvcHVsYXRpb25JZGVudGlmaWVyKChTdHJpbmcpbmV3VmFsdWUpOworCQkJCXJldHVybjsKKwkJfQorCQlzdXBlci5lU2V0KGZlYXR1cmVJRCwgbmV3VmFsdWUpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGVVbnNldChpbnQgZmVhdHVyZUlEKSB7CisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7CisJCQljYXNlIERpc2Vhc2VwcmVkaWNhdGVzUGFja2FnZS5MQUJFTF9WQUxVRV9URVNUX19NT0RFTF9OQU1FOgorCQkJCXNldE1vZGVsTmFtZShNT0RFTF9OQU1FX0VERUZBVUxUKTsKKwkJCQlyZXR1cm47CisJCQljYXNlIERpc2Vhc2VwcmVkaWNhdGVzUGFja2FnZS5MQUJFTF9WQUxVRV9URVNUX19UQVJHRVRfVVJJOgorCQkJCXNldFRhcmdldFVSSShUQVJHRVRfVVJJX0VERUZBVUxUKTsKKwkJCQlyZXR1cm47CisJCQljYXNlIERpc2Vhc2VwcmVkaWNhdGVzUGFja2FnZS5MQUJFTF9WQUxVRV9URVNUX19TVEFURToKKwkJCQlzZXRTdGF0ZShTVEFURV9FREVGQVVMVCk7CisJCQkJcmV0dXJuOworCQkJY2FzZSBEaXNlYXNlcHJlZGljYXRlc1BhY2thZ2UuTEFCRUxfVkFMVUVfVEVTVF9fVEhSRVNIT0xEOgorCQkJCXNldFRocmVzaG9sZChUSFJFU0hPTERfRURFRkFVTFQpOworCQkJCXJldHVybjsKKwkJCWNhc2UgRGlzZWFzZXByZWRpY2F0ZXNQYWNrYWdlLkxBQkVMX1ZBTFVFX1RFU1RfX1BSRURJQ0FURToKKwkJCQlzZXRQcmVkaWNhdGUoUFJFRElDQVRFX0VERUZBVUxUKTsKKwkJCQlyZXR1cm47CisJCQljYXNlIERpc2Vhc2VwcmVkaWNhdGVzUGFja2FnZS5MQUJFTF9WQUxVRV9URVNUX19QT1BVTEFUSU9OX0lERU5USUZJRVI6CisJCQkJc2V0UG9wdWxhdGlvbklkZW50aWZpZXIoUE9QVUxBVElPTl9JREVOVElGSUVSX0VERUZBVUxUKTsKKwkJCQlyZXR1cm47CisJCX0KKwkJc3VwZXIuZVVuc2V0KGZlYXR1cmVJRCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIGJvb2xlYW4gZUlzU2V0KGludCBmZWF0dXJlSUQpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJCWNhc2UgRGlzZWFzZXByZWRpY2F0ZXNQYWNrYWdlLkxBQkVMX1ZBTFVFX1RFU1RfX01PREVMX05BTUU6CisJCQkJcmV0dXJuIE1PREVMX05BTUVfRURFRkFVTFQgPT0gbnVsbCA/IG1vZGVsTmFtZSAhPSBudWxsIDogIU1PREVMX05BTUVfRURFRkFVTFQuZXF1YWxzKG1vZGVsTmFtZSk7CisJCQljYXNlIERpc2Vhc2VwcmVkaWNhdGVzUGFja2FnZS5MQUJFTF9WQUxVRV9URVNUX19UQVJHRVRfVVJJOgorCQkJCXJldHVybiBUQVJHRVRfVVJJX0VERUZBVUxUID09IG51bGwgPyB0YXJnZXRVUkkgIT0gbnVsbCA6ICFUQVJHRVRfVVJJX0VERUZBVUxULmVxdWFscyh0YXJnZXRVUkkpOworCQkJY2FzZSBEaXNlYXNlcHJlZGljYXRlc1BhY2thZ2UuTEFCRUxfVkFMVUVfVEVTVF9fU1RBVEU6CisJCQkJcmV0dXJuIFNUQVRFX0VERUZBVUxUID09IG51bGwgPyBzdGF0ZSAhPSBudWxsIDogIVNUQVRFX0VERUZBVUxULmVxdWFscyhzdGF0ZSk7CisJCQljYXNlIERpc2Vhc2VwcmVkaWNhdGVzUGFja2FnZS5MQUJFTF9WQUxVRV9URVNUX19USFJFU0hPTEQ6CisJCQkJcmV0dXJuIHRocmVzaG9sZCAhPSBUSFJFU0hPTERfRURFRkFVTFQ7CisJCQljYXNlIERpc2Vhc2VwcmVkaWNhdGVzUGFja2FnZS5MQUJFTF9WQUxVRV9URVNUX19QUkVESUNBVEU6CisJCQkJcmV0dXJuIFBSRURJQ0FURV9FREVGQVVMVCA9PSBudWxsID8gcHJlZGljYXRlICE9IG51bGwgOiAhUFJFRElDQVRFX0VERUZBVUxULmVxdWFscyhwcmVkaWNhdGUpOworCQkJY2FzZSBEaXNlYXNlcHJlZGljYXRlc1BhY2thZ2UuTEFCRUxfVkFMVUVfVEVTVF9fUE9QVUxBVElPTl9JREVOVElGSUVSOgorCQkJCXJldHVybiBQT1BVTEFUSU9OX0lERU5USUZJRVJfRURFRkFVTFQgPT0gbnVsbCA/IHBvcHVsYXRpb25JZGVudGlmaWVyICE9IG51bGwgOiAhUE9QVUxBVElPTl9JREVOVElGSUVSX0VERUZBVUxULmVxdWFscyhwb3B1bGF0aW9uSWRlbnRpZmllcik7CisJCX0KKwkJcmV0dXJuIHN1cGVyLmVJc1NldChmZWF0dXJlSUQpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKSB7CisJCWlmIChlSXNQcm94eSgpKSByZXR1cm4gc3VwZXIudG9TdHJpbmcoKTsKKworCQlTdHJpbmdCdWZmZXIgcmVzdWx0ID0gbmV3IFN0cmluZ0J1ZmZlcihzdXBlci50b1N0cmluZygpKTsKKwkJcmVzdWx0LmFwcGVuZCgiIChtb2RlbE5hbWU6ICIpOyAvLyROT04tTkxTLTEkCisJCXJlc3VsdC5hcHBlbmQobW9kZWxOYW1lKTsKKwkJcmVzdWx0LmFwcGVuZCgiLCB0YXJnZXRVUkk6ICIpOyAvLyROT04tTkxTLTEkCisJCXJlc3VsdC5hcHBlbmQodGFyZ2V0VVJJKTsKKwkJcmVzdWx0LmFwcGVuZCgiLCBzdGF0ZTogIik7IC8vJE5PTi1OTFMtMSQKKwkJcmVzdWx0LmFwcGVuZChzdGF0ZSk7CisJCXJlc3VsdC5hcHBlbmQoIiwgdGhyZXNob2xkOiAiKTsgLy8kTk9OLU5MUy0xJAorCQlyZXN1bHQuYXBwZW5kKHRocmVzaG9sZCk7CisJCXJlc3VsdC5hcHBlbmQoIiwgcHJlZGljYXRlOiAiKTsgLy8kTk9OLU5MUy0xJAorCQlyZXN1bHQuYXBwZW5kKHByZWRpY2F0ZSk7CisJCXJlc3VsdC5hcHBlbmQoIiwgcG9wdWxhdGlvbklkZW50aWZpZXI6ICIpOyAvLyROT04tTkxTLTEkCisJCXJlc3VsdC5hcHBlbmQocG9wdWxhdGlvbklkZW50aWZpZXIpOworCQlyZXN1bHQuYXBwZW5kKCcpJyk7CisJCXJldHVybiByZXN1bHQudG9TdHJpbmcoKTsKKwl9CisKK30gLy9MYWJlbFZhbHVlVGVzdEltcGwKZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvcHJlZGljYXRlcy9kaXNlYXNlcHJlZGljYXRlcy9wcm92aWRlci9EaXNlYXNlcHJlZGljYXRlc0l0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5LmphdmEgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3ByZWRpY2F0ZXMvZGlzZWFzZXByZWRpY2F0ZXMvcHJvdmlkZXIvRGlzZWFzZXByZWRpY2F0ZXNJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJhNTZhOWIKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3ByZWRpY2F0ZXMvZGlzZWFzZXByZWRpY2F0ZXMvcHJvdmlkZXIvRGlzZWFzZXByZWRpY2F0ZXNJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeS5qYXZhCkBAIC0wLDAgKzEsMzQ2IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5wcmVkaWNhdGVzLmRpc2Vhc2VwcmVkaWNhdGVzLnByb3ZpZGVyOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAKKyAqIENvcHlyaWdodCAoYykgMjAxMSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4gCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIAorICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wIAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQgCisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbCAKKyAqIAorICogQ29udHJpYnV0b3JzOiAKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7CitpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5BZGFwdGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmllcjsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5SZXNvdXJjZUxvY2F0b3I7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LmNvbW1hbmQuQ29tbWFuZFBhcmFtZXRlcjsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LmRvbWFpbi5FZGl0aW5nRG9tYWluOworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuQ2hhbmdlTm90aWZpZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5Db21wb3NlZEFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklDaGFuZ2VOb3RpZmllcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JQ2hpbGRDcmVhdGlvbkV4dGVuZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklEaXNwb3NhYmxlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklFZGl0aW5nRG9tYWluSXRlbVByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtTGFiZWxQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbVByb3BlcnR5U291cmNlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklOb3RpZnlDaGFuZ2VkTGlzdGVuZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVN0cnVjdHVyZWRJdGVtQ29udGVudFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklUcmVlSXRlbUNvbnRlbnRQcm92aWRlcjsKKworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUuTmFyeUJvb2xlYW5PcGVyYXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlLlByZWRpY2F0ZUV4cHJlc3Npb247CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZS5QcmVkaWNhdGVQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUuVW5hcnlCb29sZWFuT3BlcmF0b3I7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlLnV0aWwuUHJlZGljYXRlU3dpdGNoOworCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnByZWRpY2F0ZXMuZGlzZWFzZXByZWRpY2F0ZXMuRGlzZWFzZXByZWRpY2F0ZXNGYWN0b3J5OworCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnByZWRpY2F0ZXMuZGlzZWFzZXByZWRpY2F0ZXMudXRpbC5EaXNlYXNlcHJlZGljYXRlc0FkYXB0ZXJGYWN0b3J5OworCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLnByb3ZpZGVyLkRpc2Vhc2Vtb2RlbHNFZGl0UGx1Z2luOworCisvKioKKyAqIFRoaXMgaXMgdGhlIGZhY3RvcnkgdGhhdCBpcyB1c2VkIHRvIHByb3ZpZGUgdGhlIGludGVyZmFjZXMgbmVlZGVkIHRvIHN1cHBvcnQgVmlld2Vycy4KKyAqIFRoZSBhZGFwdGVycyBnZW5lcmF0ZWQgYnkgdGhpcyBmYWN0b3J5IGNvbnZlcnQgRU1GIGFkYXB0ZXIgbm90aWZpY2F0aW9ucyBpbnRvIGNhbGxzIHRvIHtAbGluayAjZmlyZU5vdGlmeUNoYW5nZWQgZmlyZU5vdGlmeUNoYW5nZWR9LgorICogVGhlIGFkYXB0ZXJzIGFsc28gc3VwcG9ydCBFY2xpcHNlIHByb3BlcnR5IHNoZWV0cy4KKyAqIE5vdGUgdGhhdCBtb3N0IG9mIHRoZSBhZGFwdGVycyBhcmUgc2hhcmVkIGFtb25nIG11bHRpcGxlIGluc3RhbmNlcy4KKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIERpc2Vhc2VwcmVkaWNhdGVzSXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkgZXh0ZW5kcyBEaXNlYXNlcHJlZGljYXRlc0FkYXB0ZXJGYWN0b3J5IGltcGxlbWVudHMgQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSwgSUNoYW5nZU5vdGlmaWVyLCBJRGlzcG9zYWJsZSB7CisJLyoqCisJICogVGhpcyBrZWVwcyB0cmFjayBvZiB0aGUgcm9vdCBhZGFwdGVyIGZhY3RvcnkgdGhhdCBkZWxlZ2F0ZXMgdG8gdGhpcyBhZGFwdGVyIGZhY3RvcnkuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIENvbXBvc2VkQWRhcHRlckZhY3RvcnkgcGFyZW50QWRhcHRlckZhY3Rvcnk7CisKKwkvKioKKwkgKiBUaGlzIGlzIHVzZWQgdG8gaW1wbGVtZW50IHtAbGluayBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JQ2hhbmdlTm90aWZpZXJ9LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBJQ2hhbmdlTm90aWZpZXIgY2hhbmdlTm90aWZpZXIgPSBuZXcgQ2hhbmdlTm90aWZpZXIoKTsKKworCS8qKgorCSAqIFRoaXMga2VlcHMgdHJhY2sgb2YgYWxsIHRoZSBzdXBwb3J0ZWQgdHlwZXMgY2hlY2tlZCBieSB7QGxpbmsgI2lzRmFjdG9yeUZvclR5cGUgaXNGYWN0b3J5Rm9yVHlwZX0uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIENvbGxlY3Rpb248T2JqZWN0PiBzdXBwb3J0ZWRUeXBlcyA9IG5ldyBBcnJheUxpc3Q8T2JqZWN0PigpOworCisJLyoqCisJICogVGhpcyBjb25zdHJ1Y3RzIGFuIGluc3RhbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBEaXNlYXNlcHJlZGljYXRlc0l0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5KCkgeworCQlzdXBwb3J0ZWRUeXBlcy5hZGQoSUVkaXRpbmdEb21haW5JdGVtUHJvdmlkZXIuY2xhc3MpOworCQlzdXBwb3J0ZWRUeXBlcy5hZGQoSVN0cnVjdHVyZWRJdGVtQ29udGVudFByb3ZpZGVyLmNsYXNzKTsKKwkJc3VwcG9ydGVkVHlwZXMuYWRkKElUcmVlSXRlbUNvbnRlbnRQcm92aWRlci5jbGFzcyk7CisJCXN1cHBvcnRlZFR5cGVzLmFkZChJSXRlbUxhYmVsUHJvdmlkZXIuY2xhc3MpOworCQlzdXBwb3J0ZWRUeXBlcy5hZGQoSUl0ZW1Qcm9wZXJ0eVNvdXJjZS5jbGFzcyk7CisJfQorCisJLyoqCisJICogVGhpcyBrZWVwcyB0cmFjayBvZiB0aGUgb25lIGFkYXB0ZXIgdXNlZCBmb3IgYWxsIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMucHJlZGljYXRlcy5kaXNlYXNlcHJlZGljYXRlcy5MYWJlbFZhbHVlVGVzdH0gaW5zdGFuY2VzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBMYWJlbFZhbHVlVGVzdEl0ZW1Qcm92aWRlciBsYWJlbFZhbHVlVGVzdEl0ZW1Qcm92aWRlcjsKKworCS8qKgorCSAqIFRoaXMgY3JlYXRlcyBhbiBhZGFwdGVyIGZvciBhIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMucHJlZGljYXRlcy5kaXNlYXNlcHJlZGljYXRlcy5MYWJlbFZhbHVlVGVzdH0uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlTGFiZWxWYWx1ZVRlc3RBZGFwdGVyKCkgeworCQlpZiAobGFiZWxWYWx1ZVRlc3RJdGVtUHJvdmlkZXIgPT0gbnVsbCkgeworCQkJbGFiZWxWYWx1ZVRlc3RJdGVtUHJvdmlkZXIgPSBuZXcgTGFiZWxWYWx1ZVRlc3RJdGVtUHJvdmlkZXIodGhpcyk7CisJCX0KKworCQlyZXR1cm4gbGFiZWxWYWx1ZVRlc3RJdGVtUHJvdmlkZXI7CisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIHRoZSByb290IGFkYXB0ZXIgZmFjdG9yeSB0aGF0IGNvbnRhaW5zIHRoaXMgZmFjdG9yeS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSBnZXRSb290QWRhcHRlckZhY3RvcnkoKSB7CisJCXJldHVybiBwYXJlbnRBZGFwdGVyRmFjdG9yeSA9PSBudWxsID8gdGhpcyA6IHBhcmVudEFkYXB0ZXJGYWN0b3J5LmdldFJvb3RBZGFwdGVyRmFjdG9yeSgpOworCX0KKworCS8qKgorCSAqIFRoaXMgc2V0cyB0aGUgY29tcG9zZWQgYWRhcHRlciBmYWN0b3J5IHRoYXQgY29udGFpbnMgdGhpcyBmYWN0b3J5LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIHNldFBhcmVudEFkYXB0ZXJGYWN0b3J5KENvbXBvc2VkQWRhcHRlckZhY3RvcnkgcGFyZW50QWRhcHRlckZhY3RvcnkpIHsKKwkJdGhpcy5wYXJlbnRBZGFwdGVyRmFjdG9yeSA9IHBhcmVudEFkYXB0ZXJGYWN0b3J5OworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBib29sZWFuIGlzRmFjdG9yeUZvclR5cGUoT2JqZWN0IHR5cGUpIHsKKwkJcmV0dXJuIHN1cHBvcnRlZFR5cGVzLmNvbnRhaW5zKHR5cGUpIHx8IHN1cGVyLmlzRmFjdG9yeUZvclR5cGUodHlwZSk7CisJfQorCisJLyoqCisJICogVGhpcyBpbXBsZW1lbnRhdGlvbiBzdWJzdGl0dXRlcyB0aGUgZmFjdG9yeSBpdHNlbGYgYXMgdGhlIGtleSBmb3IgdGhlIGFkYXB0ZXIuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIEFkYXB0ZXIgYWRhcHQoTm90aWZpZXIgbm90aWZpZXIsIE9iamVjdCB0eXBlKSB7CisJCXJldHVybiBzdXBlci5hZGFwdChub3RpZmllciwgdGhpcyk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIE9iamVjdCBhZGFwdChPYmplY3Qgb2JqZWN0LCBPYmplY3QgdHlwZSkgeworCQlpZiAoaXNGYWN0b3J5Rm9yVHlwZSh0eXBlKSkgeworCQkJT2JqZWN0IGFkYXB0ZXIgPSBzdXBlci5hZGFwdChvYmplY3QsIHR5cGUpOworCQkJaWYgKCEodHlwZSBpbnN0YW5jZW9mIENsYXNzPD8+KSB8fCAoKChDbGFzczw/Pil0eXBlKS5pc0luc3RhbmNlKGFkYXB0ZXIpKSkgeworCQkJCXJldHVybiBhZGFwdGVyOworCQkJfQorCQl9CisKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogVGhpcyBhZGRzIGEgbGlzdGVuZXIuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgYWRkTGlzdGVuZXIoSU5vdGlmeUNoYW5nZWRMaXN0ZW5lciBub3RpZnlDaGFuZ2VkTGlzdGVuZXIpIHsKKwkJY2hhbmdlTm90aWZpZXIuYWRkTGlzdGVuZXIobm90aWZ5Q2hhbmdlZExpc3RlbmVyKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHJlbW92ZXMgYSBsaXN0ZW5lci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCByZW1vdmVMaXN0ZW5lcihJTm90aWZ5Q2hhbmdlZExpc3RlbmVyIG5vdGlmeUNoYW5nZWRMaXN0ZW5lcikgeworCQljaGFuZ2VOb3RpZmllci5yZW1vdmVMaXN0ZW5lcihub3RpZnlDaGFuZ2VkTGlzdGVuZXIpOworCX0KKworCS8qKgorCSAqIFRoaXMgZGVsZWdhdGVzIHRvIHtAbGluayAjY2hhbmdlTm90aWZpZXJ9IGFuZCB0byB7QGxpbmsgI3BhcmVudEFkYXB0ZXJGYWN0b3J5fS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBmaXJlTm90aWZ5Q2hhbmdlZChOb3RpZmljYXRpb24gbm90aWZpY2F0aW9uKSB7CisJCWNoYW5nZU5vdGlmaWVyLmZpcmVOb3RpZnlDaGFuZ2VkKG5vdGlmaWNhdGlvbik7CisKKwkJaWYgKHBhcmVudEFkYXB0ZXJGYWN0b3J5ICE9IG51bGwpIHsKKwkJCXBhcmVudEFkYXB0ZXJGYWN0b3J5LmZpcmVOb3RpZnlDaGFuZ2VkKG5vdGlmaWNhdGlvbik7CisJCX0KKwl9CisKKwkvKioKKwkgKiBUaGlzIGRpc3Bvc2VzIGFsbCBvZiB0aGUgaXRlbSBwcm92aWRlcnMgY3JlYXRlZCBieSB0aGlzIGZhY3RvcnkuIAorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIGRpc3Bvc2UoKSB7CisJCWlmIChsYWJlbFZhbHVlVGVzdEl0ZW1Qcm92aWRlciAhPSBudWxsKSBsYWJlbFZhbHVlVGVzdEl0ZW1Qcm92aWRlci5kaXNwb3NlKCk7CisJfQorCisJLyoqCisJICogQSBjaGlsZCBjcmVhdGlvbiBleHRlbmRlciBmb3IgdGhlIHtAbGluayBQcmVkaWNhdGVQYWNrYWdlfS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGNsYXNzIFByZWRpY2F0ZUNoaWxkQ3JlYXRpb25FeHRlbmRlciBpbXBsZW1lbnRzIElDaGlsZENyZWF0aW9uRXh0ZW5kZXIgeworCQkvKioKKwkJICogVGhlIHN3aXRjaCBmb3IgY3JlYXRpbmcgY2hpbGQgZGVzY3JpcHRvcnMgc3BlY2lmaWMgdG8gZWFjaCBleHRlbmRlZCBjbGFzcy4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCXByb3RlY3RlZCBzdGF0aWMgY2xhc3MgQ3JlYXRpb25Td2l0Y2ggZXh0ZW5kcyBQcmVkaWNhdGVTd2l0Y2g8T2JqZWN0PiB7CisJCQkvKioKKwkJCSAqIFRoZSBjaGlsZCBkZXNjcmlwdG9ycyBiZWluZyBwb3B1bGF0ZWQuCisJCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCQkgKiBAZ2VuZXJhdGVkCisJCQkgKi8KKwkJCXByb3RlY3RlZCBMaXN0PE9iamVjdD4gbmV3Q2hpbGREZXNjcmlwdG9yczsKKworCQkJLyoqCisJCQkgKiBUaGUgZG9tYWluIGluIHdoaWNoIHRvIGNyZWF0ZSB0aGUgY2hpbGRyZW4uCisJCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCQkgKiBAZ2VuZXJhdGVkCisJCQkgKi8KKwkJCXByb3RlY3RlZCBFZGl0aW5nRG9tYWluIGVkaXRpbmdEb21haW47CisKKwkJCS8qKgorCQkJICogQ3JlYXRlcyB0aGUgYSBzd2l0Y2ggZm9yIHBvcHVsYXRpbmcgY2hpbGQgZGVzY3JpcHRvcnMgaW4gdGhlIGdpdmVuIGRvbWFpbi4KKwkJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJCSAqIEBnZW5lcmF0ZWQKKwkJCSAqLworCQkJQ3JlYXRpb25Td2l0Y2goTGlzdDxPYmplY3Q+IG5ld0NoaWxkRGVzY3JpcHRvcnMsIEVkaXRpbmdEb21haW4gZWRpdGluZ0RvbWFpbikgeworCQkJCXRoaXMubmV3Q2hpbGREZXNjcmlwdG9ycyA9IG5ld0NoaWxkRGVzY3JpcHRvcnM7CisJCQkJdGhpcy5lZGl0aW5nRG9tYWluID0gZWRpdGluZ0RvbWFpbjsKKwkJCX0KKwkJCS8qKgorCQkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkJICogQGdlbmVyYXRlZAorCQkJICovCisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyBPYmplY3QgY2FzZU5hcnlCb29sZWFuT3BlcmF0b3IoTmFyeUJvb2xlYW5PcGVyYXRvciBvYmplY3QpIHsKKwkJCQluZXdDaGlsZERlc2NyaXB0b3JzLmFkZAorCQkJCQkoY3JlYXRlQ2hpbGRQYXJhbWV0ZXIKKwkJCQkJCShQcmVkaWNhdGVQYWNrYWdlLkxpdGVyYWxzLk5BUllfQk9PTEVBTl9PUEVSQVRPUl9fT1BFUkFORFMsCisJCQkJCQkgRGlzZWFzZXByZWRpY2F0ZXNGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVMYWJlbFZhbHVlVGVzdCgpKSk7CisKKwkJCQlyZXR1cm4gbnVsbDsKKwkJCX0KKyAKKwkJCS8qKgorCQkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkJICogQGdlbmVyYXRlZAorCQkJICovCisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyBPYmplY3QgY2FzZVVuYXJ5Qm9vbGVhbk9wZXJhdG9yKFVuYXJ5Qm9vbGVhbk9wZXJhdG9yIG9iamVjdCkgeworCQkJCW5ld0NoaWxkRGVzY3JpcHRvcnMuYWRkCisJCQkJCShjcmVhdGVDaGlsZFBhcmFtZXRlcgorCQkJCQkJKFByZWRpY2F0ZVBhY2thZ2UuTGl0ZXJhbHMuVU5BUllfQk9PTEVBTl9PUEVSQVRPUl9fT1BFUkFORCwKKwkJCQkJCSBEaXNlYXNlcHJlZGljYXRlc0ZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZUxhYmVsVmFsdWVUZXN0KCkpKTsKKworCQkJCXJldHVybiBudWxsOworCQkJfQorIAorCQkJLyoqCisJCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCQkgKiBAZ2VuZXJhdGVkCisJCQkgKi8KKwkJCUBPdmVycmlkZQorCQkJcHVibGljIE9iamVjdCBjYXNlUHJlZGljYXRlRXhwcmVzc2lvbihQcmVkaWNhdGVFeHByZXNzaW9uIG9iamVjdCkgeworCQkJCW5ld0NoaWxkRGVzY3JpcHRvcnMuYWRkCisJCQkJCShjcmVhdGVDaGlsZFBhcmFtZXRlcgorCQkJCQkJKFByZWRpY2F0ZVBhY2thZ2UuTGl0ZXJhbHMuUFJFRElDQVRFX0VYUFJFU1NJT05fX1BSRURJQ0FURSwKKwkJCQkJCSBEaXNlYXNlcHJlZGljYXRlc0ZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZUxhYmVsVmFsdWVUZXN0KCkpKTsKKworCQkJCXJldHVybiBudWxsOworCQkJfQorIAorCQkJLyoqCisJCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCQkgKiBAZ2VuZXJhdGVkCisJCQkgKi8KKwkJCXByb3RlY3RlZCBDb21tYW5kUGFyYW1ldGVyIGNyZWF0ZUNoaWxkUGFyYW1ldGVyKE9iamVjdCBmZWF0dXJlLCBPYmplY3QgY2hpbGQpIHsKKwkJCQlyZXR1cm4gbmV3IENvbW1hbmRQYXJhbWV0ZXIobnVsbCwgZmVhdHVyZSwgY2hpbGQpOworCQkJfQorCisJCX0KKworCQkvKioKKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCXB1YmxpYyBDb2xsZWN0aW9uPE9iamVjdD4gZ2V0TmV3Q2hpbGREZXNjcmlwdG9ycyhPYmplY3Qgb2JqZWN0LCBFZGl0aW5nRG9tYWluIGVkaXRpbmdEb21haW4pIHsKKwkJCUFycmF5TGlzdDxPYmplY3Q+IHJlc3VsdCA9IG5ldyBBcnJheUxpc3Q8T2JqZWN0PigpOworCQkgICBuZXcgQ3JlYXRpb25Td2l0Y2gocmVzdWx0LCBlZGl0aW5nRG9tYWluKS5kb1N3aXRjaCgoRU9iamVjdClvYmplY3QpOworCQkgICByZXR1cm4gcmVzdWx0OworCQl9CisKKwkJLyoqCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlwdWJsaWMgUmVzb3VyY2VMb2NhdG9yIGdldFJlc291cmNlTG9jYXRvcigpIHsKKwkJCXJldHVybiBEaXNlYXNlbW9kZWxzRWRpdFBsdWdpbi5JTlNUQU5DRTsKKwkJfQorCX0KKworfQpkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9wcmVkaWNhdGVzL2Rpc2Vhc2VwcmVkaWNhdGVzL3Byb3ZpZGVyL0xhYmVsVmFsdWVUZXN0SXRlbVByb3ZpZGVyLmphdmEgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3ByZWRpY2F0ZXMvZGlzZWFzZXByZWRpY2F0ZXMvcHJvdmlkZXIvTGFiZWxWYWx1ZVRlc3RJdGVtUHJvdmlkZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYzRmOTU5Ci0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9wcmVkaWNhdGVzL2Rpc2Vhc2VwcmVkaWNhdGVzL3Byb3ZpZGVyL0xhYmVsVmFsdWVUZXN0SXRlbVByb3ZpZGVyLmphdmEKQEAgLTAsMCArMSwzMjIgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnByZWRpY2F0ZXMuZGlzZWFzZXByZWRpY2F0ZXMucHJvdmlkZXI7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIAorICogQ29weXJpZ2h0IChjKSAyMDExIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiAKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdCAKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sIAorICogCisgKiBDb250cmlidXRvcnM6IAorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiAKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LkFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbjsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5SZXNvdXJjZUxvY2F0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlVSSTsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkNvbXBvc2VhYmxlQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUVkaXRpbmdEb21haW5JdGVtUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1MYWJlbFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtUHJvcGVydHlEZXNjcmlwdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtUHJvcGVydHlTb3VyY2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVN0cnVjdHVyZWRJdGVtQ29udGVudFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklUcmVlSXRlbUNvbnRlbnRQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JdGVtUHJvcGVydHlEZXNjcmlwdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLlZpZXdlck5vdGlmaWNhdGlvbjsKKworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUucHJvdmlkZXIuVGVzdEl0ZW1Qcm92aWRlcjsKKworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkuR2VvZ3JhcGhpY05hbWVzOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5wcmVkaWNhdGVzLmRpc2Vhc2VwcmVkaWNhdGVzLkRpc2Vhc2VwcmVkaWNhdGVzUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMucHJlZGljYXRlcy5kaXNlYXNlcHJlZGljYXRlcy5MYWJlbFZhbHVlVGVzdDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5wcm92aWRlci5EaXNlYXNlbW9kZWxzRWRpdFBsdWdpbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmludGVydmVudGlvbnMuU3RhbmRhcmRJbnRlcnZlbnRpb25MYWJlbDsKKworLyoqCisgKiBUaGlzIGlzIHRoZSBpdGVtIHByb3ZpZGVyIGFkYXB0ZXIgZm9yIGEge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5wcmVkaWNhdGVzLmRpc2Vhc2VwcmVkaWNhdGVzLkxhYmVsVmFsdWVUZXN0fSBvYmplY3QuCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBMYWJlbFZhbHVlVGVzdEl0ZW1Qcm92aWRlcgorCWV4dGVuZHMgVGVzdEl0ZW1Qcm92aWRlcgorCWltcGxlbWVudHMKKwkJSUVkaXRpbmdEb21haW5JdGVtUHJvdmlkZXIsCisJCUlTdHJ1Y3R1cmVkSXRlbUNvbnRlbnRQcm92aWRlciwKKwkJSVRyZWVJdGVtQ29udGVudFByb3ZpZGVyLAorCQlJSXRlbUxhYmVsUHJvdmlkZXIsCisJCUlJdGVtUHJvcGVydHlTb3VyY2UgeworCS8qKgorCSAqIFRoaXMgY29uc3RydWN0cyBhbiBpbnN0YW5jZSBmcm9tIGEgZmFjdG9yeSBhbmQgYSBub3RpZmllci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgTGFiZWxWYWx1ZVRlc3RJdGVtUHJvdmlkZXIoQWRhcHRlckZhY3RvcnkgYWRhcHRlckZhY3RvcnkpIHsKKwkJc3VwZXIoYWRhcHRlckZhY3RvcnkpOworCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyB0aGUgcHJvcGVydHkgZGVzY3JpcHRvcnMgZm9yIHRoZSBhZGFwdGVkIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBMaXN0PElJdGVtUHJvcGVydHlEZXNjcmlwdG9yPiBnZXRQcm9wZXJ0eURlc2NyaXB0b3JzKE9iamVjdCBvYmplY3QpIHsKKwkJaWYgKGl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzID09IG51bGwpIHsKKwkJCXN1cGVyLmdldFByb3BlcnR5RGVzY3JpcHRvcnMob2JqZWN0KTsKKworCQkJYWRkTW9kZWxOYW1lUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCk7CisJCQlhZGRUYXJnZXRVUklQcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0KTsKKwkJCWFkZFN0YXRlUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCk7CisJCQlhZGRUaHJlc2hvbGRQcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0KTsKKwkJCWFkZFByZWRpY2F0ZVByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QpOworCQkJYWRkUG9wdWxhdGlvbklkZW50aWZpZXJQcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0KTsKKwkJfQorCQlyZXR1cm4gaXRlbVByb3BlcnR5RGVzY3JpcHRvcnM7CisJfQorCisJLyoqCisJICogVGhpcyBhZGRzIGEgcHJvcGVydHkgZGVzY3JpcHRvciBmb3IgdGhlIE1vZGVsIE5hbWUgZmVhdHVyZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBhZGRNb2RlbE5hbWVQcm9wZXJ0eURlc2NyaXB0b3IoT2JqZWN0IG9iamVjdCkgeworCQlpdGVtUHJvcGVydHlEZXNjcmlwdG9ycy5hZGQKKwkJCShjcmVhdGVJdGVtUHJvcGVydHlEZXNjcmlwdG9yCisJCQkJKCgoQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSlhZGFwdGVyRmFjdG9yeSkuZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCksCisJCQkJIGdldFJlc291cmNlTG9jYXRvcigpLAorCQkJCSBnZXRTdHJpbmcoIl9VSV9MYWJlbFZhbHVlVGVzdF9tb2RlbE5hbWVfZmVhdHVyZSIpLCAvLyROT04tTkxTLTEkCisJCQkJIGdldFN0cmluZygiX1VJX1Byb3BlcnR5RGVzY3JpcHRvcl9kZXNjcmlwdGlvbiIsICJfVUlfTGFiZWxWYWx1ZVRlc3RfbW9kZWxOYW1lX2ZlYXR1cmUiLCAiX1VJX0xhYmVsVmFsdWVUZXN0X3R5cGUiKSwgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkIC8vJE5PTi1OTFMtMyQKKwkJCQkgRGlzZWFzZXByZWRpY2F0ZXNQYWNrYWdlLkxpdGVyYWxzLkxBQkVMX1ZBTFVFX1RFU1RfX01PREVMX05BTUUsCisJCQkJIHRydWUsCisJCQkJIGZhbHNlLAorCQkJCSBmYWxzZSwKKwkJCQkgSXRlbVByb3BlcnR5RGVzY3JpcHRvci5HRU5FUklDX1ZBTFVFX0lNQUdFLAorCQkJCSBudWxsLAorCQkJCSBudWxsKSk7CisJfQorCisJLyoqCisJICogVGhpcyBhZGRzIGEgcHJvcGVydHkgZGVzY3JpcHRvciBmb3IgdGhlIFRhcmdldCBVUkkgZmVhdHVyZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBhZGRUYXJnZXRVUklQcm9wZXJ0eURlc2NyaXB0b3IoT2JqZWN0IG9iamVjdCkgeworCQlpdGVtUHJvcGVydHlEZXNjcmlwdG9ycy5hZGQKKwkJCShjcmVhdGVJdGVtUHJvcGVydHlEZXNjcmlwdG9yCisJCQkJKCgoQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSlhZGFwdGVyRmFjdG9yeSkuZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCksCisJCQkJIGdldFJlc291cmNlTG9jYXRvcigpLAorCQkJCSBnZXRTdHJpbmcoIl9VSV9MYWJlbFZhbHVlVGVzdF90YXJnZXRVUklfZmVhdHVyZSIpLCAvLyROT04tTkxTLTEkCisJCQkJIGdldFN0cmluZygiX1VJX1Byb3BlcnR5RGVzY3JpcHRvcl9kZXNjcmlwdGlvbiIsICJfVUlfTGFiZWxWYWx1ZVRlc3RfdGFyZ2V0VVJJX2ZlYXR1cmUiLCAiX1VJX0xhYmVsVmFsdWVUZXN0X3R5cGUiKSwgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkIC8vJE5PTi1OTFMtMyQKKwkJCQkgRGlzZWFzZXByZWRpY2F0ZXNQYWNrYWdlLkxpdGVyYWxzLkxBQkVMX1ZBTFVFX1RFU1RfX1RBUkdFVF9VUkksCisJCQkJIHRydWUsCisJCQkJIGZhbHNlLAorCQkJCSBmYWxzZSwKKwkJCQkgSXRlbVByb3BlcnR5RGVzY3JpcHRvci5HRU5FUklDX1ZBTFVFX0lNQUdFLAorCQkJCSBudWxsLAorCQkJCSBudWxsKSk7CisJfQorCisJLyoqCisJICogVGhpcyBhZGRzIGEgcHJvcGVydHkgZGVzY3JpcHRvciBmb3IgdGhlIFN0YXRlIGZlYXR1cmUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgYWRkU3RhdGVQcm9wZXJ0eURlc2NyaXB0b3IoT2JqZWN0IG9iamVjdCkgeworCQlpdGVtUHJvcGVydHlEZXNjcmlwdG9ycy5hZGQKKwkJCShjcmVhdGVJdGVtUHJvcGVydHlEZXNjcmlwdG9yCisJCQkJKCgoQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSlhZGFwdGVyRmFjdG9yeSkuZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCksCisJCQkJIGdldFJlc291cmNlTG9jYXRvcigpLAorCQkJCSBnZXRTdHJpbmcoIl9VSV9MYWJlbFZhbHVlVGVzdF9zdGF0ZV9mZWF0dXJlIiksIC8vJE5PTi1OTFMtMSQKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfUHJvcGVydHlEZXNjcmlwdG9yX2Rlc2NyaXB0aW9uIiwgIl9VSV9MYWJlbFZhbHVlVGVzdF9zdGF0ZV9mZWF0dXJlIiwgIl9VSV9MYWJlbFZhbHVlVGVzdF90eXBlIiksIC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJCAvLyROT04tTkxTLTMkCisJCQkJIERpc2Vhc2VwcmVkaWNhdGVzUGFja2FnZS5MaXRlcmFscy5MQUJFTF9WQUxVRV9URVNUX19TVEFURSwKKwkJCQkgdHJ1ZSwKKwkJCQkgZmFsc2UsCisJCQkJIGZhbHNlLAorCQkJCSBJdGVtUHJvcGVydHlEZXNjcmlwdG9yLkdFTkVSSUNfVkFMVUVfSU1BR0UsCisJCQkJIG51bGwsCisJCQkJIG51bGwpKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFkZHMgYSBwcm9wZXJ0eSBkZXNjcmlwdG9yIGZvciB0aGUgVGhyZXNob2xkIGZlYXR1cmUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgYWRkVGhyZXNob2xkUHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdCBvYmplY3QpIHsKKwkJaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMuYWRkCisJCQkoY3JlYXRlSXRlbVByb3BlcnR5RGVzY3JpcHRvcgorCQkJCSgoKENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnkpYWRhcHRlckZhY3RvcnkpLmdldFJvb3RBZGFwdGVyRmFjdG9yeSgpLAorCQkJCSBnZXRSZXNvdXJjZUxvY2F0b3IoKSwKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfTGFiZWxWYWx1ZVRlc3RfdGhyZXNob2xkX2ZlYXR1cmUiKSwgLy8kTk9OLU5MUy0xJAorCQkJCSBnZXRTdHJpbmcoIl9VSV9Qcm9wZXJ0eURlc2NyaXB0b3JfZGVzY3JpcHRpb24iLCAiX1VJX0xhYmVsVmFsdWVUZXN0X3RocmVzaG9sZF9mZWF0dXJlIiwgIl9VSV9MYWJlbFZhbHVlVGVzdF90eXBlIiksIC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJCAvLyROT04tTkxTLTMkCisJCQkJIERpc2Vhc2VwcmVkaWNhdGVzUGFja2FnZS5MaXRlcmFscy5MQUJFTF9WQUxVRV9URVNUX19USFJFU0hPTEQsCisJCQkJIHRydWUsCisJCQkJIGZhbHNlLAorCQkJCSBmYWxzZSwKKwkJCQkgSXRlbVByb3BlcnR5RGVzY3JpcHRvci5SRUFMX1ZBTFVFX0lNQUdFLAorCQkJCSBudWxsLAorCQkJCSBudWxsKSk7CisJfQorCisJLyoqCisJICogVGhpcyBhZGRzIGEgcHJvcGVydHkgZGVzY3JpcHRvciBmb3IgdGhlIFByZWRpY2F0ZSBmZWF0dXJlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIGFkZFByZWRpY2F0ZVByb3BlcnR5RGVzY3JpcHRvcihPYmplY3Qgb2JqZWN0KSB7CisJCWl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzLmFkZAorCQkJKGNyZWF0ZUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IKKwkJCQkoKChDb21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5KWFkYXB0ZXJGYWN0b3J5KS5nZXRSb290QWRhcHRlckZhY3RvcnkoKSwKKwkJCQkgZ2V0UmVzb3VyY2VMb2NhdG9yKCksCisJCQkJIGdldFN0cmluZygiX1VJX0xhYmVsVmFsdWVUZXN0X3ByZWRpY2F0ZV9mZWF0dXJlIiksIC8vJE5PTi1OTFMtMSQKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfUHJvcGVydHlEZXNjcmlwdG9yX2Rlc2NyaXB0aW9uIiwgIl9VSV9MYWJlbFZhbHVlVGVzdF9wcmVkaWNhdGVfZmVhdHVyZSIsICJfVUlfTGFiZWxWYWx1ZVRlc3RfdHlwZSIpLCAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQgLy8kTk9OLU5MUy0zJAorCQkJCSBEaXNlYXNlcHJlZGljYXRlc1BhY2thZ2UuTGl0ZXJhbHMuTEFCRUxfVkFMVUVfVEVTVF9fUFJFRElDQVRFLAorCQkJCSB0cnVlLAorCQkJCSBmYWxzZSwKKwkJCQkgZmFsc2UsCisJCQkJIEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IuR0VORVJJQ19WQUxVRV9JTUFHRSwKKwkJCQkgbnVsbCwKKwkJCQkgbnVsbCkpOworCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyBhIHByb3BlcnR5IGRlc2NyaXB0b3IgZm9yIHRoZSBQb3B1bGF0aW9uIElkZW50aWZpZXIgZmVhdHVyZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBhZGRQb3B1bGF0aW9uSWRlbnRpZmllclByb3BlcnR5RGVzY3JpcHRvcihPYmplY3Qgb2JqZWN0KSB7CisJCWl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzLmFkZAorCQkJKGNyZWF0ZUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IKKwkJCQkoKChDb21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5KWFkYXB0ZXJGYWN0b3J5KS5nZXRSb290QWRhcHRlckZhY3RvcnkoKSwKKwkJCQkgZ2V0UmVzb3VyY2VMb2NhdG9yKCksCisJCQkJIGdldFN0cmluZygiX1VJX0xhYmVsVmFsdWVUZXN0X3BvcHVsYXRpb25JZGVudGlmaWVyX2ZlYXR1cmUiKSwgLy8kTk9OLU5MUy0xJAorCQkJCSBnZXRTdHJpbmcoIl9VSV9Qcm9wZXJ0eURlc2NyaXB0b3JfZGVzY3JpcHRpb24iLCAiX1VJX0xhYmVsVmFsdWVUZXN0X3BvcHVsYXRpb25JZGVudGlmaWVyX2ZlYXR1cmUiLCAiX1VJX0xhYmVsVmFsdWVUZXN0X3R5cGUiKSwgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkIC8vJE5PTi1OTFMtMyQKKwkJCQkgRGlzZWFzZXByZWRpY2F0ZXNQYWNrYWdlLkxpdGVyYWxzLkxBQkVMX1ZBTFVFX1RFU1RfX1BPUFVMQVRJT05fSURFTlRJRklFUiwKKwkJCQkgdHJ1ZSwKKwkJCQkgZmFsc2UsCisJCQkJIGZhbHNlLAorCQkJCSBJdGVtUHJvcGVydHlEZXNjcmlwdG9yLkdFTkVSSUNfVkFMVUVfSU1BR0UsCisJCQkJIG51bGwsCisJCQkJIG51bGwpKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgTGFiZWxWYWx1ZVRlc3QuZ2lmLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgT2JqZWN0IGdldEltYWdlKE9iamVjdCBvYmplY3QpIHsKKwkJcmV0dXJuIG92ZXJsYXlJbWFnZShvYmplY3QsIGdldFJlc291cmNlTG9jYXRvcigpLmdldEltYWdlKCJmdWxsL2N1c3RvbTE2L0xhYmVsVmFsdWVUZXN0LnBuZyIpKTsgLy8kTk9OLU5MUy0xJAorCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyB0aGUgbGFiZWwgdGV4dCBmb3IgdGhlIGFkYXB0ZWQgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFN0cmluZyBnZXRUZXh0R2VuKE9iamVjdCBvYmplY3QpIHsKKwkJU3RyaW5nIGxhYmVsID0gKChMYWJlbFZhbHVlVGVzdClvYmplY3QpLmdldE1vZGVsTmFtZSgpOworCQlyZXR1cm4gbGFiZWwgPT0gbnVsbCB8fCBsYWJlbC5sZW5ndGgoKSA9PSAwID8KKwkJCWdldFN0cmluZygiX1VJX0xhYmVsVmFsdWVUZXN0X3R5cGUiKSA6IC8vJE5PTi1OTFMtMSQKKwkJCWdldFN0cmluZygiX1VJX0xhYmVsVmFsdWVUZXN0X3R5cGUiKSArICIgIiArIGxhYmVsOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKKwl9CisJCisJLyoqCisJICogVGhpcyByZXR1cm5zIHRoZSBsYWJlbCB0ZXh0IGZvciB0aGUgYWRhcHRlZCBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIFN0cmluZyBnZXRUZXh0KE9iamVjdCBvYmplY3QpIHsKKwkJTGFiZWxWYWx1ZVRlc3QgbHZ0ZXN0ID0gICgoTGFiZWxWYWx1ZVRlc3QpIG9iamVjdCk7CisJCWZpbmFsIFVSSSB0YXJnZXRVUkkgPSBsdnRlc3QuZ2V0VGFyZ2V0VVJJKCk7CisJCVN0cmluZyBnZW9OYW1lID0gIiIsIElTT0tleSA9ICIiOworCQlpZih0YXJnZXRVUkkgIT0gbnVsbCkgeworCQkJZmluYWwgU3RyaW5nIGxhc3RTZWdtZW50ID0gdGFyZ2V0VVJJLmxhc3RTZWdtZW50KCk7CisJCQlJU09LZXkgPSBsYXN0U2VnbWVudDsKKwkJCWlmKElTT0tleSAhPSBudWxsICYmICFJU09LZXkudHJpbSgpLmVxdWFscygiIikpCisJCQlnZW9OYW1lID0gR2VvZ3JhcGhpY05hbWVzLmdldE5hbWUoSVNPS2V5KTsKKwkJfQorCQlmaW5hbCBTdHJpbmdCdWlsZGVyIHNiID0gbmV3IFN0cmluZ0J1aWxkZXIoCisJCQkJZ2VvTmFtZS5zdGFydHNXaXRoKCIhIikgPyBJU09LZXkgOiBnZW9OYW1lKTsKKwkJc2IuYXBwZW5kKCIgIik7CisJCXNiLmFwcGVuZChsdnRlc3QuZ2V0TW9kZWxOYW1lKCkpOworCQlzYi5hcHBlbmQoIiAiKTsKKwkJc2IuYXBwZW5kKGx2dGVzdC5nZXRTdGF0ZSgpKTsKKwkJc2IuYXBwZW5kKCIgIik7CisJCXNiLmFwcGVuZChsdnRlc3QuZ2V0UHJlZGljYXRlKCkpOworCQlzYi5hcHBlbmQoIiAiKTsKKwkJc2IuYXBwZW5kKGx2dGVzdC5nZXRUaHJlc2hvbGQoKSk7CisJCXJldHVybiBzYi50b1N0cmluZygpOworCX0KKwkKKworCS8qKgorCSAqIFRoaXMgaGFuZGxlcyBtb2RlbCBub3RpZmljYXRpb25zIGJ5IGNhbGxpbmcge0BsaW5rICN1cGRhdGVDaGlsZHJlbn0gdG8gdXBkYXRlIGFueSBjYWNoZWQKKwkgKiBjaGlsZHJlbiBhbmQgYnkgY3JlYXRpbmcgYSB2aWV3ZXIgbm90aWZpY2F0aW9uLCB3aGljaCBpdCBwYXNzZXMgdG8ge0BsaW5rICNmaXJlTm90aWZ5Q2hhbmdlZH0uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgbm90aWZ5Q2hhbmdlZChOb3RpZmljYXRpb24gbm90aWZpY2F0aW9uKSB7CisJCXVwZGF0ZUNoaWxkcmVuKG5vdGlmaWNhdGlvbik7CisKKwkJc3dpdGNoIChub3RpZmljYXRpb24uZ2V0RmVhdHVyZUlEKExhYmVsVmFsdWVUZXN0LmNsYXNzKSkgeworCQkJY2FzZSBEaXNlYXNlcHJlZGljYXRlc1BhY2thZ2UuTEFCRUxfVkFMVUVfVEVTVF9fTU9ERUxfTkFNRToKKwkJCWNhc2UgRGlzZWFzZXByZWRpY2F0ZXNQYWNrYWdlLkxBQkVMX1ZBTFVFX1RFU1RfX1RBUkdFVF9VUkk6CisJCQljYXNlIERpc2Vhc2VwcmVkaWNhdGVzUGFja2FnZS5MQUJFTF9WQUxVRV9URVNUX19TVEFURToKKwkJCWNhc2UgRGlzZWFzZXByZWRpY2F0ZXNQYWNrYWdlLkxBQkVMX1ZBTFVFX1RFU1RfX1RIUkVTSE9MRDoKKwkJCWNhc2UgRGlzZWFzZXByZWRpY2F0ZXNQYWNrYWdlLkxBQkVMX1ZBTFVFX1RFU1RfX1BSRURJQ0FURToKKwkJCWNhc2UgRGlzZWFzZXByZWRpY2F0ZXNQYWNrYWdlLkxBQkVMX1ZBTFVFX1RFU1RfX1BPUFVMQVRJT05fSURFTlRJRklFUjoKKwkJCQlmaXJlTm90aWZ5Q2hhbmdlZChuZXcgVmlld2VyTm90aWZpY2F0aW9uKG5vdGlmaWNhdGlvbiwgbm90aWZpY2F0aW9uLmdldE5vdGlmaWVyKCksIGZhbHNlLCB0cnVlKSk7CisJCQkJcmV0dXJuOworCQl9CisJCXN1cGVyLm5vdGlmeUNoYW5nZWQobm90aWZpY2F0aW9uKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFkZHMge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lZGl0LmNvbW1hbmQuQ29tbWFuZFBhcmFtZXRlcn1zIGRlc2NyaWJpbmcgdGhlIGNoaWxkcmVuCisJICogdGhhdCBjYW4gYmUgY3JlYXRlZCB1bmRlciB0aGlzIG9iamVjdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgdm9pZCBjb2xsZWN0TmV3Q2hpbGREZXNjcmlwdG9ycyhDb2xsZWN0aW9uPE9iamVjdD4gbmV3Q2hpbGREZXNjcmlwdG9ycywgT2JqZWN0IG9iamVjdCkgeworCQlzdXBlci5jb2xsZWN0TmV3Q2hpbGREZXNjcmlwdG9ycyhuZXdDaGlsZERlc2NyaXB0b3JzLCBvYmplY3QpOworCX0KKworCS8qKgorCSAqIFJldHVybiB0aGUgcmVzb3VyY2UgbG9jYXRvciBmb3IgdGhpcyBpdGVtIHByb3ZpZGVyJ3MgcmVzb3VyY2VzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBSZXNvdXJjZUxvY2F0b3IgZ2V0UmVzb3VyY2VMb2NhdG9yKCkgeworCQlyZXR1cm4gRGlzZWFzZW1vZGVsc0VkaXRQbHVnaW4uSU5TVEFOQ0U7CisJfQorCit9CmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3ByZWRpY2F0ZXMvZGlzZWFzZXByZWRpY2F0ZXMvdXRpbC9EaXNlYXNlcHJlZGljYXRlc0FkYXB0ZXJGYWN0b3J5LmphdmEgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3ByZWRpY2F0ZXMvZGlzZWFzZXByZWRpY2F0ZXMvdXRpbC9EaXNlYXNlcHJlZGljYXRlc0FkYXB0ZXJGYWN0b3J5LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTJkMGY2NgotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvcHJlZGljYXRlcy9kaXNlYXNlcHJlZGljYXRlcy91dGlsL0Rpc2Vhc2VwcmVkaWNhdGVzQWRhcHRlckZhY3RvcnkuamF2YQpAQCAtMCwwICsxLDE2OCBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMucHJlZGljYXRlcy5kaXNlYXNlcHJlZGljYXRlcy51dGlsOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAKKyAqIENvcHlyaWdodCAoYykgMjAxMSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4gCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIAorICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wIAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQgCisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbCAKKyAqIAorICogQ29udHJpYnV0b3JzOiAKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LkFkYXB0ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpZXI7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5pbXBsLkFkYXB0ZXJGYWN0b3J5SW1wbDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0OworCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZS5QcmVkaWNhdGU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZS5UZXN0OworCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnByZWRpY2F0ZXMuZGlzZWFzZXByZWRpY2F0ZXMuKjsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogVGhlIDxiPkFkYXB0ZXIgRmFjdG9yeTwvYj4gZm9yIHRoZSBtb2RlbC4KKyAqIEl0IHByb3ZpZGVzIGFuIGFkYXB0ZXIgPGNvZGU+Y3JlYXRlWFhYPC9jb2RlPiBtZXRob2QgZm9yIGVhY2ggY2xhc3Mgb2YgdGhlIG1vZGVsLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5wcmVkaWNhdGVzLmRpc2Vhc2VwcmVkaWNhdGVzLkRpc2Vhc2VwcmVkaWNhdGVzUGFja2FnZQorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgRGlzZWFzZXByZWRpY2F0ZXNBZGFwdGVyRmFjdG9yeSBleHRlbmRzIEFkYXB0ZXJGYWN0b3J5SW1wbCB7CisJLyoqCisJICogVGhlIGNhY2hlZCBtb2RlbCBwYWNrYWdlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBzdGF0aWMgRGlzZWFzZXByZWRpY2F0ZXNQYWNrYWdlIG1vZGVsUGFja2FnZTsKKworCS8qKgorCSAqIENyZWF0ZXMgYW4gaW5zdGFuY2Ugb2YgdGhlIGFkYXB0ZXIgZmFjdG9yeS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRGlzZWFzZXByZWRpY2F0ZXNBZGFwdGVyRmFjdG9yeSgpIHsKKwkJaWYgKG1vZGVsUGFja2FnZSA9PSBudWxsKSB7CisJCQltb2RlbFBhY2thZ2UgPSBEaXNlYXNlcHJlZGljYXRlc1BhY2thZ2UuZUlOU1RBTkNFOworCQl9CisJfQorCisJLyoqCisJICogUmV0dXJucyB3aGV0aGVyIHRoaXMgZmFjdG9yeSBpcyBhcHBsaWNhYmxlIGZvciB0aGUgdHlwZSBvZiB0aGUgb2JqZWN0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIDxjb2RlPnRydWU8L2NvZGU+IGlmIHRoZSBvYmplY3QgaXMgZWl0aGVyIHRoZSBtb2RlbCdzIHBhY2thZ2Ugb3IgaXMgYW4gaW5zdGFuY2Ugb2JqZWN0IG9mIHRoZSBtb2RlbC4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHdoZXRoZXIgdGhpcyBmYWN0b3J5IGlzIGFwcGxpY2FibGUgZm9yIHRoZSB0eXBlIG9mIHRoZSBvYmplY3QuCisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBib29sZWFuIGlzRmFjdG9yeUZvclR5cGUoT2JqZWN0IG9iamVjdCkgeworCQlpZiAob2JqZWN0ID09IG1vZGVsUGFja2FnZSkgeworCQkJcmV0dXJuIHRydWU7CisJCX0KKwkJaWYgKG9iamVjdCBpbnN0YW5jZW9mIEVPYmplY3QpIHsKKwkJCXJldHVybiAoKEVPYmplY3Qpb2JqZWN0KS5lQ2xhc3MoKS5nZXRFUGFja2FnZSgpID09IG1vZGVsUGFja2FnZTsKKwkJfQorCQlyZXR1cm4gZmFsc2U7CisJfQorCisJLyoqCisJICogVGhlIHN3aXRjaCB0aGF0IGRlbGVnYXRlcyB0byB0aGUgPGNvZGU+Y3JlYXRlWFhYPC9jb2RlPiBtZXRob2RzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBEaXNlYXNlcHJlZGljYXRlc1N3aXRjaDxBZGFwdGVyPiBtb2RlbFN3aXRjaCA9CisJCW5ldyBEaXNlYXNlcHJlZGljYXRlc1N3aXRjaDxBZGFwdGVyPigpIHsKKwkJCUBPdmVycmlkZQorCQkJcHVibGljIEFkYXB0ZXIgY2FzZUxhYmVsVmFsdWVUZXN0KExhYmVsVmFsdWVUZXN0IG9iamVjdCkgeworCQkJCXJldHVybiBjcmVhdGVMYWJlbFZhbHVlVGVzdEFkYXB0ZXIoKTsKKwkJCX0KKwkJCUBPdmVycmlkZQorCQkJcHVibGljIEFkYXB0ZXIgY2FzZVByZWRpY2F0ZShQcmVkaWNhdGUgb2JqZWN0KSB7CisJCQkJcmV0dXJuIGNyZWF0ZVByZWRpY2F0ZUFkYXB0ZXIoKTsKKwkJCX0KKwkJCUBPdmVycmlkZQorCQkJcHVibGljIEFkYXB0ZXIgY2FzZVRlc3QoVGVzdCBvYmplY3QpIHsKKwkJCQlyZXR1cm4gY3JlYXRlVGVzdEFkYXB0ZXIoKTsKKwkJCX0KKwkJCUBPdmVycmlkZQorCQkJcHVibGljIEFkYXB0ZXIgZGVmYXVsdENhc2UoRU9iamVjdCBvYmplY3QpIHsKKwkJCQlyZXR1cm4gY3JlYXRlRU9iamVjdEFkYXB0ZXIoKTsKKwkJCX0KKwkJfTsKKworCS8qKgorCSAqIENyZWF0ZXMgYW4gYWRhcHRlciBmb3IgdGhlIDxjb2RlPnRhcmdldDwvY29kZT4uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gdGFyZ2V0IHRoZSBvYmplY3QgdG8gYWRhcHQuCisJICogQHJldHVybiB0aGUgYWRhcHRlciBmb3IgdGhlIDxjb2RlPnRhcmdldDwvY29kZT4uCisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZUFkYXB0ZXIoTm90aWZpZXIgdGFyZ2V0KSB7CisJCXJldHVybiBtb2RlbFN3aXRjaC5kb1N3aXRjaCgoRU9iamVjdCl0YXJnZXQpOworCX0KKworCisJLyoqCisJICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMucHJlZGljYXRlcy5kaXNlYXNlcHJlZGljYXRlcy5MYWJlbFZhbHVlVGVzdCA8ZW0+TGFiZWwgVmFsdWUgVGVzdDwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7CisJICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMucHJlZGljYXRlcy5kaXNlYXNlcHJlZGljYXRlcy5MYWJlbFZhbHVlVGVzdAorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVMYWJlbFZhbHVlVGVzdEFkYXB0ZXIoKSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZS5QcmVkaWNhdGUgPGVtPlByZWRpY2F0ZTwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7CisJICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlLlByZWRpY2F0ZQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVQcmVkaWNhdGVBZGFwdGVyKCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUuVGVzdCA8ZW0+VGVzdDwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7CisJICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlLlRlc3QKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlVGVzdEFkYXB0ZXIoKSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgdGhlIGRlZmF1bHQgY2FzZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwuCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZUVPYmplY3RBZGFwdGVyKCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKK30gLy9EaXNlYXNlcHJlZGljYXRlc0FkYXB0ZXJGYWN0b3J5CmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3ByZWRpY2F0ZXMvZGlzZWFzZXByZWRpY2F0ZXMvdXRpbC9EaXNlYXNlcHJlZGljYXRlc1N3aXRjaC5qYXZhIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9wcmVkaWNhdGVzL2Rpc2Vhc2VwcmVkaWNhdGVzL3V0aWwvRGlzZWFzZXByZWRpY2F0ZXNTd2l0Y2guamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NDhkMjYxCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9wcmVkaWNhdGVzL2Rpc2Vhc2VwcmVkaWNhdGVzL3V0aWwvRGlzZWFzZXByZWRpY2F0ZXNTd2l0Y2guamF2YQpAQCAtMCwwICsxLDE3MCBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMucHJlZGljYXRlcy5kaXNlYXNlcHJlZGljYXRlcy51dGlsOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAKKyAqIENvcHlyaWdodCAoYykgMjAxMSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4gCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIAorICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wIAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQgCisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbCAKKyAqIAorICogQ29udHJpYnV0b3JzOiAKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGphdmEudXRpbC5MaXN0OworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzczsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUuUHJlZGljYXRlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUuVGVzdDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5wcmVkaWNhdGVzLmRpc2Vhc2VwcmVkaWNhdGVzLio7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIFRoZSA8Yj5Td2l0Y2g8L2I+IGZvciB0aGUgbW9kZWwncyBpbmhlcml0YW5jZSBoaWVyYXJjaHkuCisgKiBJdCBzdXBwb3J0cyB0aGUgY2FsbCB7QGxpbmsgI2RvU3dpdGNoKEVPYmplY3QpIGRvU3dpdGNoKG9iamVjdCl9CisgKiB0byBpbnZva2UgdGhlIDxjb2RlPmNhc2VYWFg8L2NvZGU+IG1ldGhvZCBmb3IgZWFjaCBjbGFzcyBvZiB0aGUgbW9kZWwsCisgKiBzdGFydGluZyB3aXRoIHRoZSBhY3R1YWwgY2xhc3Mgb2YgdGhlIG9iamVjdAorICogYW5kIHByb2NlZWRpbmcgdXAgdGhlIGluaGVyaXRhbmNlIGhpZXJhcmNoeQorICogdW50aWwgYSBub24tbnVsbCByZXN1bHQgaXMgcmV0dXJuZWQsCisgKiB3aGljaCBpcyB0aGUgcmVzdWx0IG9mIHRoZSBzd2l0Y2guCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnByZWRpY2F0ZXMuZGlzZWFzZXByZWRpY2F0ZXMuRGlzZWFzZXByZWRpY2F0ZXNQYWNrYWdlCisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBEaXNlYXNlcHJlZGljYXRlc1N3aXRjaDxUPiB7CisJLyoqCisJICogVGhlIGNhY2hlZCBtb2RlbCBwYWNrYWdlCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHN0YXRpYyBEaXNlYXNlcHJlZGljYXRlc1BhY2thZ2UgbW9kZWxQYWNrYWdlOworCisJLyoqCisJICogQ3JlYXRlcyBhbiBpbnN0YW5jZSBvZiB0aGUgc3dpdGNoLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBEaXNlYXNlcHJlZGljYXRlc1N3aXRjaCgpIHsKKwkJaWYgKG1vZGVsUGFja2FnZSA9PSBudWxsKSB7CisJCQltb2RlbFBhY2thZ2UgPSBEaXNlYXNlcHJlZGljYXRlc1BhY2thZ2UuZUlOU1RBTkNFOworCQl9CisJfQorCisJLyoqCisJICogQ2FsbHMgPGNvZGU+Y2FzZVhYWDwvY29kZT4gZm9yIGVhY2ggY2xhc3Mgb2YgdGhlIG1vZGVsIHVudGlsIG9uZSByZXR1cm5zIGEgbm9uIG51bGwgcmVzdWx0OyBpdCB5aWVsZHMgdGhhdCByZXN1bHQuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBmaXJzdCBub24tbnVsbCByZXN1bHQgcmV0dXJuZWQgYnkgYSA8Y29kZT5jYXNlWFhYPC9jb2RlPiBjYWxsLgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVCBkb1N3aXRjaChFT2JqZWN0IHRoZUVPYmplY3QpIHsKKwkJcmV0dXJuIGRvU3dpdGNoKHRoZUVPYmplY3QuZUNsYXNzKCksIHRoZUVPYmplY3QpOworCX0KKworCS8qKgorCSAqIENhbGxzIDxjb2RlPmNhc2VYWFg8L2NvZGU+IGZvciBlYWNoIGNsYXNzIG9mIHRoZSBtb2RlbCB1bnRpbCBvbmUgcmV0dXJucyBhIG5vbiBudWxsIHJlc3VsdDsgaXQgeWllbGRzIHRoYXQgcmVzdWx0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgZmlyc3Qgbm9uLW51bGwgcmVzdWx0IHJldHVybmVkIGJ5IGEgPGNvZGU+Y2FzZVhYWDwvY29kZT4gY2FsbC4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIFQgZG9Td2l0Y2goRUNsYXNzIHRoZUVDbGFzcywgRU9iamVjdCB0aGVFT2JqZWN0KSB7CisJCWlmICh0aGVFQ2xhc3MuZUNvbnRhaW5lcigpID09IG1vZGVsUGFja2FnZSkgeworCQkJcmV0dXJuIGRvU3dpdGNoKHRoZUVDbGFzcy5nZXRDbGFzc2lmaWVySUQoKSwgdGhlRU9iamVjdCk7CisJCX0KKwkJZWxzZSB7CisJCQlMaXN0PEVDbGFzcz4gZVN1cGVyVHlwZXMgPSB0aGVFQ2xhc3MuZ2V0RVN1cGVyVHlwZXMoKTsKKwkJCXJldHVybgorCQkJCWVTdXBlclR5cGVzLmlzRW1wdHkoKSA/CisJCQkJCWRlZmF1bHRDYXNlKHRoZUVPYmplY3QpIDoKKwkJCQkJZG9Td2l0Y2goZVN1cGVyVHlwZXMuZ2V0KDApLCB0aGVFT2JqZWN0KTsKKwkJfQorCX0KKworCS8qKgorCSAqIENhbGxzIDxjb2RlPmNhc2VYWFg8L2NvZGU+IGZvciBlYWNoIGNsYXNzIG9mIHRoZSBtb2RlbCB1bnRpbCBvbmUgcmV0dXJucyBhIG5vbiBudWxsIHJlc3VsdDsgaXQgeWllbGRzIHRoYXQgcmVzdWx0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgZmlyc3Qgbm9uLW51bGwgcmVzdWx0IHJldHVybmVkIGJ5IGEgPGNvZGU+Y2FzZVhYWDwvY29kZT4gY2FsbC4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIFQgZG9Td2l0Y2goaW50IGNsYXNzaWZpZXJJRCwgRU9iamVjdCB0aGVFT2JqZWN0KSB7CisJCXN3aXRjaCAoY2xhc3NpZmllcklEKSB7CisJCQljYXNlIERpc2Vhc2VwcmVkaWNhdGVzUGFja2FnZS5MQUJFTF9WQUxVRV9URVNUOiB7CisJCQkJTGFiZWxWYWx1ZVRlc3QgbGFiZWxWYWx1ZVRlc3QgPSAoTGFiZWxWYWx1ZVRlc3QpdGhlRU9iamVjdDsKKwkJCQlUIHJlc3VsdCA9IGNhc2VMYWJlbFZhbHVlVGVzdChsYWJlbFZhbHVlVGVzdCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlVGVzdChsYWJlbFZhbHVlVGVzdCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlUHJlZGljYXRlKGxhYmVsVmFsdWVUZXN0KTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGRlZmF1bHRDYXNlKHRoZUVPYmplY3QpOworCQkJCXJldHVybiByZXN1bHQ7CisJCQl9CisJCQlkZWZhdWx0OiByZXR1cm4gZGVmYXVsdENhc2UodGhlRU9iamVjdCk7CisJCX0KKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5MYWJlbCBWYWx1ZSBUZXN0PC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7CisJICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCisJICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+TGFiZWwgVmFsdWUgVGVzdDwvZW0+Jy4KKwkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFQgY2FzZUxhYmVsVmFsdWVUZXN0KExhYmVsVmFsdWVUZXN0IG9iamVjdCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5QcmVkaWNhdGU8L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsKKwkgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KKwkgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5QcmVkaWNhdGU8L2VtPicuCisJICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBUIGNhc2VQcmVkaWNhdGUoUHJlZGljYXRlIG9iamVjdCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5UZXN0PC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7CisJICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCisJICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+VGVzdDwvZW0+Jy4KKwkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFQgY2FzZVRlc3QoVGVzdCBvYmplY3QpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+RU9iamVjdDwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOworCSAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLCBidXQgdGhpcyBpcyB0aGUgbGFzdCBjYXNlIGFueXdheS4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KKwkgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5FT2JqZWN0PC9lbT4nLgorCSAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVCBkZWZhdWx0Q2FzZShFT2JqZWN0IG9iamVjdCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKK30gLy9EaXNlYXNlcHJlZGljYXRlc1N3aXRjaApkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9zdGFuZGFyZC9BZ2dyZWdhdGluZ1NFSVJEaXNlYXNlTW9kZWwuamF2YSBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvc3RhbmRhcmQvQWdncmVnYXRpbmdTRUlSRGlzZWFzZU1vZGVsLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWY4NmM3ZgotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvc3RhbmRhcmQvQWdncmVnYXRpbmdTRUlSRGlzZWFzZU1vZGVsLmphdmEKQEAgLTAsMCArMSw0MCBAQAorLy8gQWdncmVnYXRpbmdTRUlSRGlzZWFzZU1vZGVsLmphdmEKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkOworCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLkRlY29yYXRvcjsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworLyoqCisgKiBUaGlzIGludGVyZmFjZSBkZWZpbmVzIGEgY2xhc3MgaW4gYW4gRU1GIG1vZGVsIGZvciBhbiBhZ2dyZWdhdGluZyBTRUlSCisgKiBkaXNlYXNlIG1vZGVsLiBUaGlzIGRpc2Vhc2UgbW9kZWwgZGV0ZXJtaW5lcyBpdHMgZGlzZWFzZSBzdGF0ZSB2YWx1ZXMgYnkKKyAqIHN1bW1pbmcgKGFnZ3JlZ2F0aW5nKSB0aGUgKG5leHQpIHZhbHVlcyBvZiB0aGUgbGFiZWxzIG9mIG90aGVyIFNFSVIgZGlzZWFzZQorICogbW9kZWxzLiBUeXBpY2FsbHksIGl0IGlzIHBsYWNlZCBpbiBhIG1vZGVsIHRoYXQgY29udGFpbnMgdGhlIHRhcmdldCBTRUlSCisgKiBkaXNlYXNlIG1vZGVsIHNvIHRoYXQgaXRzCisgKiB7QGxpbmsgRGVjb3JhdG9yI3VwZGF0ZUxhYmVscyhvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuU1RFTVRpbWUsIGxvbmcpfQorICogbWV0aG9kIHdpbGwgYmUgY2FsbGVkIGFmdGVyIHRoZSBjb250YWluZWQgZGlzZWFzZSBtb2RlbC4gVGhpcyBlbnN1cmVzIHRoYXQKKyAqIHRoZSAibmV4dCIgdmFsdWVzIHRoYXQgdGhpcyBtb2RlbCBjb2xsZWN0cyB3aWxsIGJlIHZhbGlkIGJ5IHRoZSB0aW1lIGl0IHJ1bnMuCisgKiAKKyAqIEBzZWUgU0VJUkxhYmVsCisgKiBAc2VlIFNFSVJMYWJlbFZhbHVlCisgKiAKKyAqIEBtb2RlbAorICovCitwdWJsaWMgaW50ZXJmYWNlIEFnZ3JlZ2F0aW5nU0VJUkRpc2Vhc2VNb2RlbCBleHRlbmRzIEFnZ3JlZ2F0aW5nU0lSRGlzZWFzZU1vZGVsIHsKKwkvKioKKwkgKiBUaGlzIGlzIHRoZSBzZWdtZW50IG9mIHRoZSB0eXBlIFVSSSB0aGF0IHByZWZpeGVzIGFsbCBvdGhlciBzZWdtZW50cyBpbiBhCisJICogc3RhbmRhcmQgc3RvY2hhc3RpYyBTRUlSIGRpc2Vhc2UgbW9kZWwgdHlwZSBVUkkuCisJICovCisJU3RyaW5nIFVSSV9UWVBFX0FHR1JFR0FUSU5HX1NFSVJfRElTRUFTRV9NT0RFTF9TRUdNRU5UID0gVVJJX1RZUEVfQUdHUkVHQVRJTkdfU0lfRElTRUFTRV9NT0RFTF9TRUdNRU5UCisJCQkrICIvU0VJUiI7Cit9IC8vIEFnZ3JlZ2F0aW5nU0VJUkRpc2Vhc2VNb2RlbApkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9zdGFuZGFyZC9BZ2dyZWdhdGluZ1NJRGlzZWFzZU1vZGVsLmphdmEgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3N0YW5kYXJkL0FnZ3JlZ2F0aW5nU0lEaXNlYXNlTW9kZWwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMDRiYWY2Ci0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9zdGFuZGFyZC9BZ2dyZWdhdGluZ1NJRGlzZWFzZU1vZGVsLmphdmEKQEAgLTAsMCArMSw0MCBAQAorLy8gQWdncmVnYXRpbmdTSURpc2Vhc2VNb2RlbC5qYXZhCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5EZWNvcmF0b3I7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKKy8qKgorICogVGhpcyBpbnRlcmZhY2UgZGVmaW5lcyBhIGNsYXNzIGluIGFuIEVNRiBtb2RlbCBmb3IgYW4gYWdncmVnYXRpbmcgU0kgZGlzZWFzZQorICogbW9kZWwuIFRoaXMgZGlzZWFzZSBtb2RlbCBkZXRlcm1pbmVzIGl0cyBkaXNlYXNlIHN0YXRlIHZhbHVlcyBieSBzdW1taW5nCisgKiAoYWdncmVnYXRpbmcpIHRoZSAobmV4dCkgdmFsdWVzIG9mIHRoZSBsYWJlbHMgb2Ygb3RoZXIgU0kgZGlzZWFzZSBtb2RlbHMuCisgKiBUeXBpY2FsbHksIGl0IGlzIHBsYWNlZCBpbiBhIG1vZGVsIHRoYXQgY29udGFpbnMgdGhlIHRhcmdldCBTSSBkaXNlYXNlIG1vZGVsCisgKiBzbyB0aGF0IGl0cworICoge0BsaW5rIERlY29yYXRvciN1cGRhdGVMYWJlbHMob3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLlNURU1UaW1lLCBsb25nKX0KKyAqIG1ldGhvZCB3aWxsIGJlIGNhbGxlZCBhZnRlciB0aGUgY29udGFpbmVkIGRpc2Vhc2UgbW9kZWwuIFRoaXMgZW5zdXJlcyB0aGF0CisgKiB0aGUgIm5leHQiIHZhbHVlcyB0aGF0IHRoaXMgbW9kZWwgY29sbGVjdHMgd2lsbCBiZSB2YWxpZCBieSB0aGUgdGltZSBpdCBydW5zLgorICogCisgKiBAc2VlIFNJTGFiZWwKKyAqIEBzZWUgU0lMYWJlbFZhbHVlCisgKiAKKyAqIEBtb2RlbAorICovCitwdWJsaWMgaW50ZXJmYWNlIEFnZ3JlZ2F0aW5nU0lEaXNlYXNlTW9kZWwgZXh0ZW5kcyBTSSB7CisJLyoqCisJICogVGhpcyBpcyB0aGUgc2VnbWVudCBvZiB0aGUgdHlwZSBVUkkgdGhhdCBwcmVmaXhlcyBhbGwgb3RoZXIgc2VnbWVudHMgaW4gYQorCSAqIHN0YW5kYXJkIHN0b2NoYXN0aWMgU0kgZGlzZWFzZSBtb2RlbCB0eXBlIFVSSS4KKwkgKi8KKwlTdHJpbmcgVVJJX1RZUEVfQUdHUkVHQVRJTkdfU0lfRElTRUFTRV9NT0RFTF9TRUdNRU5UID0gVVJJX1RZUEVfU1RBTkRBUkRfU0lfRElTRUFTRV9NT0RFTF9TRUdNRU5UCisJCQkrICIvYWdncmVnYXRpbmciOworfSAvLyBBZ2dyZWdhdGluZ1NJRGlzZWFzZU1vZGVsCmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3N0YW5kYXJkL0FnZ3JlZ2F0aW5nU0lSRGlzZWFzZU1vZGVsLmphdmEgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3N0YW5kYXJkL0FnZ3JlZ2F0aW5nU0lSRGlzZWFzZU1vZGVsLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzliN2QyOQotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvc3RhbmRhcmQvQWdncmVnYXRpbmdTSVJEaXNlYXNlTW9kZWwuamF2YQpAQCAtMCwwICsxLDQwIEBACisvLyBBZ2dyZWdhdGluZ1NJUkRpc2Vhc2VNb2RlbC5qYXZhCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5EZWNvcmF0b3I7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKKy8qKgorICogVGhpcyBpbnRlcmZhY2UgZGVmaW5lcyBhIGNsYXNzIGluIGFuIEVNRiBtb2RlbCBmb3IgYW4gYWdncmVnYXRpbmcgU0lSIGRpc2Vhc2UKKyAqIG1vZGVsLiBUaGlzIGRpc2Vhc2UgbW9kZWwgZGV0ZXJtaW5lcyBpdHMgZGlzZWFzZSBzdGF0ZSB2YWx1ZXMgYnkgc3VtbWluZworICogKGFnZ3JlZ2F0aW5nKSB0aGUgKG5leHQpIHZhbHVlcyBvZiB0aGUgbGFiZWxzIG9mIG90aGVyIFNJUiBkaXNlYXNlIG1vZGVscy4KKyAqIFR5cGljYWxseSwgaXQgaXMgcGxhY2VkIGluIGEgbW9kZWwgdGhhdCBjb250YWlucyB0aGUgdGFyZ2V0IFNJUiBkaXNlYXNlIG1vZGVsCisgKiBzbyB0aGF0IGl0cworICoge0BsaW5rIERlY29yYXRvciN1cGRhdGVMYWJlbHMob3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLlNURU1UaW1lLCBsb25nKX0KKyAqIG1ldGhvZCB3aWxsIGJlIGNhbGxlZCBhZnRlciB0aGUgY29udGFpbmVkIGRpc2Vhc2UgbW9kZWwuIFRoaXMgZW5zdXJlcyB0aGF0CisgKiB0aGUgIm5leHQiIHZhbHVlcyB0aGF0IHRoaXMgbW9kZWwgY29sbGVjdHMgd2lsbCBiZSB2YWxpZCBieSB0aGUgdGltZSBpdCBydW5zLgorICogCisgKiBAc2VlIFNJUkxhYmVsCisgKiBAc2VlIFNJUkxhYmVsVmFsdWUKKyAqIAorICogQG1vZGVsCisgKi8KK3B1YmxpYyBpbnRlcmZhY2UgQWdncmVnYXRpbmdTSVJEaXNlYXNlTW9kZWwgZXh0ZW5kcyBBZ2dyZWdhdGluZ1NJRGlzZWFzZU1vZGVsIHsKKwkvKioKKwkgKiBUaGlzIGlzIHRoZSBzZWdtZW50IG9mIHRoZSB0eXBlIFVSSSB0aGF0IHByZWZpeGVzIGFsbCBvdGhlciBzZWdtZW50cyBpbiBhCisJICogc3RhbmRhcmQgc3RvY2hhc3RpYyBTSVIgZGlzZWFzZSBtb2RlbCB0eXBlIFVSSS4KKwkgKi8KKwlTdHJpbmcgVVJJX1RZUEVfQUdHUkVHQVRJTkdfU0lSX0RJU0VBU0VfTU9ERUxfU0VHTUVOVCA9IFVSSV9UWVBFX0FHR1JFR0FUSU5HX1NJX0RJU0VBU0VfTU9ERUxfU0VHTUVOVAorCQkJKyAiL1NJUiI7Cit9IC8vIEFnZ3JlZ2F0aW5nU0lSRGlzZWFzZU1vZGVsClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9zdGFuZGFyZC9EZXRlcm1pbmlzdGljU0VJUkRpc2Vhc2VNb2RlbC5qYXZhIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9zdGFuZGFyZC9EZXRlcm1pbmlzdGljU0VJUkRpc2Vhc2VNb2RlbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNhYjg1ZGIKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3N0YW5kYXJkL0RldGVybWluaXN0aWNTRUlSRGlzZWFzZU1vZGVsLmphdmEKQEAgLTAsMCArMSwzMiBAQAorLy8gRGV0ZXJtaW5pc3RpY1NFSVJEaXNlYXNlTW9kZWwuamF2YQorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQ7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioKKyAqIFRoaXMgaW50ZXJmYWNlIGRlZmluZXMgYSBjbGFzcyBpbiBhbiBFTUYgbW9kZWwgZm9yIGFuIERldGVybWluaXN0aWMgU0VJUgorICogZGlzZWFzZSBtb2RlbC4KKyAqIAorICogQHNlZSBTRUlSTGFiZWwKKyAqIEBzZWUgU0VJUkxhYmVsVmFsdWUKKyAqIAorICogQG1vZGVsCisgKi8KK3B1YmxpYyBpbnRlcmZhY2UgRGV0ZXJtaW5pc3RpY1NFSVJEaXNlYXNlTW9kZWwgZXh0ZW5kcyBTRUlSIHsKKworCS8qKgorCSAqIFRoaXMgaXMgdGhlIHNlZ21lbnQgb2YgdGhlIHR5cGUgVVJJIHRoYXQgcHJlZml4ZXMgYWxsIG90aGVyIHNlZ21lbnRzIGluIGEKKwkgKiBzdGFuZGFyZCBzdG9jaGFzdGljIFNFSVIgZGlzZWFzZSBtb2RlbCB0eXBlIFVSSS4KKwkgKi8KKwlTdHJpbmcgVVJJX1RZUEVfREVURVJNSU5JU1RJQ19TRUlSX0RJU0VBU0VfTU9ERUxfU0VHTUVOVCA9IFVSSV9UWVBFX1NUQU5EQVJEX1NFSVJfRElTRUFTRV9NT0RFTF9TRUdNRU5UCisJCQkrICIvc3RvY2hhc3RpYyI7Cit9IC8vIERldGVybWluaXN0aWNTRUlSRGlzZWFzZU1vZGVsCmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3N0YW5kYXJkL0RldGVybWluaXN0aWNTSURpc2Vhc2VNb2RlbC5qYXZhIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9zdGFuZGFyZC9EZXRlcm1pbmlzdGljU0lEaXNlYXNlTW9kZWwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZGE5N2U5Ci0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9zdGFuZGFyZC9EZXRlcm1pbmlzdGljU0lEaXNlYXNlTW9kZWwuamF2YQpAQCAtMCwwICsxLDMxIEBACisvLyBEZXRlcm1pbmlzdGljU0lEaXNlYXNlTW9kZWwuamF2YQorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQ7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioKKyAqIFRoaXMgaW50ZXJmYWNlIGRlZmluZXMgYSBjbGFzcyBpbiBhbiBFTUYgbW9kZWwgZm9yIGFuIERldGVybWluaXN0aWMgU0kKKyAqIGRpc2Vhc2UgbW9kZWwuCisgKiAKKyAqIEBzZWUgU0lMYWJlbAorICogQHNlZSBTSUxhYmVsVmFsdWUKKyAqIAorICogQG1vZGVsCisgKi8KK3B1YmxpYyBpbnRlcmZhY2UgRGV0ZXJtaW5pc3RpY1NJRGlzZWFzZU1vZGVsIGV4dGVuZHMgU0kgeworCS8qKgorCSAqIFRoaXMgaXMgdGhlIHNlZ21lbnQgb2YgdGhlIHR5cGUgVVJJIHRoYXQgcHJlZml4ZXMgYWxsIG90aGVyIHNlZ21lbnRzIGluIGEKKwkgKiBzdGFuZGFyZCBzdG9jaGFzdGljIFNJIGRpc2Vhc2UgbW9kZWwgdHlwZSBVUkkuCisJICovCisJU3RyaW5nIFVSSV9UWVBFX0RFVEVSTUlOSVNUSUNfU0lfRElTRUFTRV9NT0RFTF9TRUdNRU5UID0gVVJJX1RZUEVfU1RBTkRBUkRfU0lfRElTRUFTRV9NT0RFTF9TRUdNRU5UCisJCQkrICIvZGV0ZXJtaW5pc3RpYyI7Cit9IC8vIERldGVybWluaXN0aWNTSURpc2Vhc2VNb2RlbApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvc3RhbmRhcmQvRGV0ZXJtaW5pc3RpY1NJUkRpc2Vhc2VNb2RlbC5qYXZhIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9zdGFuZGFyZC9EZXRlcm1pbmlzdGljU0lSRGlzZWFzZU1vZGVsLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjc3ZTRhZgotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvc3RhbmRhcmQvRGV0ZXJtaW5pc3RpY1NJUkRpc2Vhc2VNb2RlbC5qYXZhCkBAIC0wLDAgKzEsMzEgQEAKKy8vIERldGVybWluaXN0aWNTSVJEaXNlYXNlTW9kZWwuamF2YQorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQ7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioKKyAqIFRoaXMgaW50ZXJmYWNlIGRlZmluZXMgYSBjbGFzcyBpbiBhbiBFTUYgbW9kZWwgZm9yIGFuIERldGVybWluaXN0aWMgU0lSCisgKiBkaXNlYXNlIG1vZGVsLgorICogCisgKiBAc2VlIFNJUkxhYmVsCisgKiBAc2VlIFNJUkxhYmVsVmFsdWUKKyAqIAorICogQG1vZGVsCisgKi8KK3B1YmxpYyBpbnRlcmZhY2UgRGV0ZXJtaW5pc3RpY1NJUkRpc2Vhc2VNb2RlbCBleHRlbmRzIFNJUiB7CisJLyoqCisJICogVGhpcyBpcyB0aGUgc2VnbWVudCBvZiB0aGUgdHlwZSBVUkkgdGhhdCBwcmVmaXhlcyBhbGwgb3RoZXIgc2VnbWVudHMgaW4gYQorCSAqIHN0YW5kYXJkIGRldGVybWluaXN0aWMgU0lSIGRpc2Vhc2UgbW9kZWwgdHlwZSBVUkkuCisJICovCisJU3RyaW5nIFVSSV9UWVBFX0RFVEVSTUlOSVNUSUNfU0lSX0RJU0VBU0VfTU9ERUxfU0VHTUVOVCA9IFVSSV9UWVBFX1NUQU5EQVJEX1NJUl9ESVNFQVNFX01PREVMX1NFR01FTlQKKwkJCSsgIi9kZXRlcm1pbmlzdGljIjsKK30gLy8gRGV0ZXJtaW5pc3RpY1NJUkRpc2Vhc2VNb2RlbApkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9zdGFuZGFyZC9EaXNlYXNlTW9kZWwuamF2YSBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvc3RhbmRhcmQvRGlzZWFzZU1vZGVsLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjkwY2JjYgotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvc3RhbmRhcmQvRGlzZWFzZU1vZGVsLmphdmEKQEAgLTAsMCArMSwxODUgQEAKKy8vIERpc2Vhc2VNb2RlbC5qYXZhCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZDsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuRUxpc3Q7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkdyYXBoOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uU2FuaXR5Q2hlY2tlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuSW50ZWdyYXRpb25EZWNvcmF0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLk5vZGVEZWNvcmF0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLk1vZGlmaWFibGU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLlBvcHVsYXRpb25Nb2RlbExhYmVsOworCisvKioKKyAqIFRoaXMgaW50ZXJmYWNlIGRlZmluZXMgYSBjbGFzcyBpbiBhbiBFTUYgbW9kZWwgZm9yIGFuIFNURU0gRGlzZWFzZSBtb2RlbC4gSXQKKyAqIGlzIHRoZSB0b3AtbGV2ZWwgZGlzZWFzZSBtb2RlbCwgYWxsIG90aGVyIGRpc2Vhc2UgbW9kZWxzIGRlcml2ZSBmcm9tIHRoaXMKKyAqIGNsYXNzLgorICogCisgKiBAbW9kZWwgYWJzdHJhY3Q9InRydWUiCisgKi8KK3B1YmxpYyBpbnRlcmZhY2UgRGlzZWFzZU1vZGVsIGV4dGVuZHMgSW50ZWdyYXRpb25EZWNvcmF0b3IsIE1vZGlmaWFibGUgeworCisJLyoqCisJICogVGhpcyBpcyB0aGUgc2VnbWVudCBvZiB0aGUgdHlwZSBVUkkgdGhhdCBwcmVmaXhlcyBhbGwgb3RoZXIgc2VnbWVudHMgaW4gYQorCSAqIGRpc2Vhc2UgbW9kZWwgdHlwZSBVUkkuCisJICovCisJU3RyaW5nIFVSSV9UWVBFX0RJU0VBU0VNT0RFTF9TRUdNRU5UID0gImRpc2Vhc2Vtb2RlbCI7CisKKwkvKioKKwkgKiBUaGlzIGlzIHRoZSBuYW1lIG9mIHRoZSBkaXNlYXNlCisJICogQHJldHVybiB0aGUgbmFtZSBvZiB0aGUgZGlzZWFzZQorCSAqIAorCSAqIEBtb2RlbAorCSAqLworCVN0cmluZyBnZXREaXNlYXNlTmFtZSgpOworCQorCS8qKgorCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5EaXNlYXNlTW9kZWwjZ2V0RGlzZWFzZU5hbWUgPGVtPkRpc2Vhc2UgTmFtZTwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+RGlzZWFzZSBOYW1lPC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiBAc2VlICNnZXREaXNlYXNlTmFtZSgpCisJICogQGdlbmVyYXRlZAorCSAqLworCXZvaWQgc2V0RGlzZWFzZU5hbWUoU3RyaW5nIHZhbHVlKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPkZpbml0ZSBEaWZmZXJlbmNlPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogVGhlIGRlZmF1bHQgdmFsdWUgaXMgPGNvZGU+InRydWUiPC9jb2RlPi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDxwPgorCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPkZpbml0ZSBEaWZmZXJlbmNlPC9lbT4nIGF0dHJpYnV0ZSBpc24ndCBjbGVhciwKKwkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uCisJICogPC9wPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPkZpbml0ZSBEaWZmZXJlbmNlPC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiBAc2VlICNzZXRGaW5pdGVEaWZmZXJlbmNlKGJvb2xlYW4pCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmRQYWNrYWdlI2dldERpc2Vhc2VNb2RlbF9GaW5pdGVEaWZmZXJlbmNlKCkKKwkgKiBAbW9kZWwgZGVmYXVsdD0idHJ1ZSIKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJYm9vbGVhbiBpc0Zpbml0ZURpZmZlcmVuY2UoKTsKKworCS8qKgorCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5EaXNlYXNlTW9kZWwjaXNGaW5pdGVEaWZmZXJlbmNlIDxlbT5GaW5pdGUgRGlmZmVyZW5jZTwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+RmluaXRlIERpZmZlcmVuY2U8L2VtPicgYXR0cmlidXRlLgorCSAqIEBzZWUgI2lzRmluaXRlRGlmZmVyZW5jZSgpCisJICogQGdlbmVyYXRlZAorCSAqLworCXZvaWQgc2V0RmluaXRlRGlmZmVyZW5jZShib29sZWFuIHZhbHVlKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPkZyZXF1ZW5jeSBEZXBlbmRlbnQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyA8Y29kZT4idHJ1ZSI8L2NvZGU+LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPHA+CisJICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+RnJlcXVlbmN5IERlcGVuZGVudDwvZW0+JyBhdHRyaWJ1dGUgaXNuJ3QgY2xlYXIsCisJICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLgorCSAqIDwvcD4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5GcmVxdWVuY3kgRGVwZW5kZW50PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiBAc2VlICNzZXRGcmVxdWVuY3lEZXBlbmRlbnQoYm9vbGVhbikKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZFBhY2thZ2UjZ2V0RGlzZWFzZU1vZGVsX0ZyZXF1ZW5jeURlcGVuZGVudCgpCisJICogQG1vZGVsIGRlZmF1bHQ9InRydWUiCisJICogQGdlbmVyYXRlZAorCSAqLworCWJvb2xlYW4gaXNGcmVxdWVuY3lEZXBlbmRlbnQoKTsKKworCS8qKgorCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5EaXNlYXNlTW9kZWwjaXNGcmVxdWVuY3lEZXBlbmRlbnQgPGVtPkZyZXF1ZW5jeSBEZXBlbmRlbnQ8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPkZyZXF1ZW5jeSBEZXBlbmRlbnQ8L2VtPicgYXR0cmlidXRlLgorCSAqIEBzZWUgI2lzRnJlcXVlbmN5RGVwZW5kZW50KCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJdm9pZCBzZXRGcmVxdWVuY3lEZXBlbmRlbnQoYm9vbGVhbiB2YWx1ZSk7CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBtb2RlbAorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlEaXNlYXNlTW9kZWxMYWJlbCBjcmVhdGVEaXNlYXNlTW9kZWxMYWJlbChTdHJpbmcgcG9wdWxhdGlvbklkZW50aWZpZXIpOworCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAbW9kZWwKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZSBjcmVhdGVEaXNlYXNlTW9kZWxMYWJlbFZhbHVlKFN0cmluZyBwb3B1bGF0aW9uSWRlbnRpZmllcik7CisKKwkvKioKKwkgKiBUaGlzIGlzIHRoZSBpZGVudGlmaWVyIG9mIHRoZSBwb3B1bGF0aW9uIGJlaW5nIGluZmVjdGVkIGJ5IGEgRGlzZWFzZS4KKwkgKiAKKwkgKiBAcmV0dXJuIHRoZSBpZGVudGlmaWVyIG9mIHRoZSBQb3B1bGF0aW9uIGFmZmVjdGVkIGJ5IHRoZSBkaXNlYXNlLgorCSAqIAorCSAqIEBtb2RlbCBkZWZhdWx0PSJodW1hbiIKKwkgKi8KKwlTdHJpbmcgZ2V0UG9wdWxhdGlvbklkZW50aWZpZXIoKTsKKworCS8qKgorCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5EaXNlYXNlTW9kZWwjZ2V0UG9wdWxhdGlvbklkZW50aWZpZXIgPGVtPlBvcHVsYXRpb24gSWRlbnRpZmllcjwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPlBvcHVsYXRpb24gSWRlbnRpZmllcjwvZW0+JyBhdHRyaWJ1dGUuCisJICogQHNlZSAjZ2V0UG9wdWxhdGlvbklkZW50aWZpZXIoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwl2b2lkIHNldFBvcHVsYXRpb25JZGVudGlmaWVyKFN0cmluZyB2YWx1ZSk7CisKKwkvKioKKwkgKiBUaGUgdGltZSBwZXJpb2QgZm9yIHRoZSBzcGVjaWZpZWQgcmF0ZXMuICBEZWZhdWx0OiAxIERheQorCSAqIEByZXR1cm4gdGhlIHRpbWUgcGVyaW9kIChtaWxsaXNlY29uZHMpIG9mIHRoZSByYXRlcyBzcGVjaWZpZWQgZm9yIHRoaXMKKwkgKiAgICAgICAgIGRpc2Vhc2UgbW9kZWwKKwkgKiAKKwkgKiBAbW9kZWwgZGVmYXVsdD0iODY0MDAwMDAiCisJICovCisJbG9uZyBnZXRUaW1lUGVyaW9kKCk7CisKKwkvKioKKwkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuRGlzZWFzZU1vZGVsI2dldFRpbWVQZXJpb2QgPGVtPlRpbWUgUGVyaW9kPC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+VGltZSBQZXJpb2Q8L2VtPicgYXR0cmlidXRlLgorCSAqIEBzZWUgI2dldFRpbWVQZXJpb2QoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwl2b2lkIHNldFRpbWVQZXJpb2QobG9uZyB2YWx1ZSk7CisJCisJLyoqCisJICogQHJldHVybiBhIG5ldyBpbnN0YW5jZSBvZiBhbiBpbmZlY3RvciBmb3IgdGhpcyBkaXNlYXNlIG1vZGVsLgorCSAqIAorCSAqIEBtb2RlbCB2b2xhdGlsZT0idHJ1ZSIgdHJhbnNpZW50PSJ0cnVlIiBjaGFuZ2VhYmxlPSJmYWxzZSIKKwkgKi8KKwlJbmZlY3RvciBjcmVhdGVJbmZlY3RvcigpOworCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAbW9kZWwga2luZD0ib3BlcmF0aW9uIgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFTGlzdDxTdHJpbmc+IGdldEFsbExhYmVsSWRlbnRpZmllcnMoKTsKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQG1vZGVsCisJICogQGdlbmVyYXRlZAorCSAqLworCUVMaXN0PFBvcHVsYXRpb25Nb2RlbExhYmVsPiBnZXRQb3B1bGF0aW9uTW9kZWxMYWJlbHMoU3RyaW5nIHBvcHVsYXRpb25JZGVudGlmaWVyLCBHcmFwaCBncmFwaCk7CisKK30gLy8gRGlzZWFzZU1vZGVsCmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3N0YW5kYXJkL0Rpc2Vhc2VNb2RlbExhYmVsLmphdmEgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3N0YW5kYXJkL0Rpc2Vhc2VNb2RlbExhYmVsLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTQ0ODU0NQotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvc3RhbmRhcmQvRGlzZWFzZU1vZGVsTGFiZWwuamF2YQpAQCAtMCwwICsxLDk4IEBACisvLyBEaXNlYXNlTW9kZWxMYWJlbC5qYXZhCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZDsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguSW50ZWdyYXRpb25MYWJlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuVVJJOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5TVEVNVVJJOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5EeW5hbWljTm9kZUxhYmVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLlBvcHVsYXRpb25MYWJlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuUG9wdWxhdGlvbk1vZGVsTGFiZWw7CisKKy8qKgorICogVGhpcyBpbnRlcmZhY2UgZGVmaW5lcyBhIGNsYXNzIGluIGFuIEVNRiBtb2RlbCBmb3IgYW4gU1RFTSBEaXNlYXNlIG1vZGVsCisgKiBsYWJlbC4gSXQgaXMgdGhlIHRvcC1sZXZlbCBkaXNlYXNlIG1vZGVsLCBhbGwgb3RoZXIgZGlzZWFzZSBtb2RlbCBsYWJlbHMKKyAqIGRlcml2ZSBmcm9tIHRoaXMgY2xhc3MuCisgKiAKKyAqIEBtb2RlbCBhYnN0cmFjdD0idHJ1ZSIKKyAqLworcHVibGljIGludGVyZmFjZSBEaXNlYXNlTW9kZWxMYWJlbCBleHRlbmRzIEludGVncmF0aW9uTGFiZWwgeworCisJLyoqCisJICogVGhpcyBpcyB0aGUgdG9wLWxldmVsIHNlZ21lbnQgZm9yIGFsbCB0eXBlIFVSSSdzIGZvciBkaXNlYXNlIG1vZGVsCisJICogbGFiZWxzLgorCSAqLworCVN0cmluZyBVUklfVFlQRV9ESVNFQVNFX01PREVMX0xBQkVMX1NFR01FTlQgPSBVUklfVFlQRV9EWU5BTUlDX0xBQkVMX1NFR01FTlQKKwkJCSsgIi9kaXNlYXNlbW9kZWwiOworCisJLyoqCisJICogVGhpcyBpcyB0aGUgdHlwZSBVUkkgZm9yIGRpc2Vhc2UgbW9kZWwgbGFiZWxzCisJICovCisJVVJJIFVSSV9UWVBFX1NJUl9MQUJFTCA9IFNURU1VUkkKKwkJCS5jcmVhdGVUeXBlVVJJKFVSSV9UWVBFX0RJU0VBU0VfTU9ERUxfTEFCRUxfU0VHTUVOVCk7CisKKwkvKioKKwkgKiBUaGlzIGlzIHRoZSBQb3B1bGF0aW9uIGJlaW5nIGluZmVjdGVkIGJ5IGEgRGlzZWFzZS4gVGhlIHZhbHVlcyBmb3IgdGhpcworCSAqIGRpc2Vhc2UgbW9kZWwgbGFiZWwgYXBwbHkgdG8gdGhlIHBvcHVsYXRpb24gcmVwcmVzZW50ZWQgYnkgdGhlIHBvcHVsYXRpb24KKwkgKiBsYWJlbC4KKwkgKiAKKwkgKiBAcmV0dXJuIHRoZSBQb3B1bGF0aW9uIGFmZmVjdGVkIGJ5IHRoZSBkaXNlYXNlLgorCSAqIAorCSAqIEBtb2RlbAorCSAqLworCVBvcHVsYXRpb25MYWJlbCBnZXRQb3B1bGF0aW9uTGFiZWwoKTsKKworCS8qKgorCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5EaXNlYXNlTW9kZWxMYWJlbCNnZXRQb3B1bGF0aW9uTGFiZWwgPGVtPlBvcHVsYXRpb24gTGFiZWw8L2VtPn0nIHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5Qb3B1bGF0aW9uIExhYmVsPC9lbT4nIHJlZmVyZW5jZS4KKwkgKiBAc2VlICNnZXRQb3B1bGF0aW9uTGFiZWwoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwl2b2lkIHNldFBvcHVsYXRpb25MYWJlbChQb3B1bGF0aW9uTGFiZWwgdmFsdWUpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+UG9wdWxhdGlvbiBNb2RlbCBMYWJlbDwvYj48L2VtPicgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPHA+CisJICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+UG9wdWxhdGlvbiBNb2RlbCBMYWJlbDwvZW0+JyByZWZlcmVuY2UgaXNuJ3QgY2xlYXIsCisJICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLgorCSAqIDwvcD4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5Qb3B1bGF0aW9uIE1vZGVsIExhYmVsPC9lbT4nIHJlZmVyZW5jZS4KKwkgKiBAc2VlICNzZXRQb3B1bGF0aW9uTW9kZWxMYWJlbChQb3B1bGF0aW9uTW9kZWxMYWJlbCkKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZFBhY2thZ2UjZ2V0RGlzZWFzZU1vZGVsTGFiZWxfUG9wdWxhdGlvbk1vZGVsTGFiZWwoKQorCSAqIEBtb2RlbAorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlQb3B1bGF0aW9uTW9kZWxMYWJlbCBnZXRQb3B1bGF0aW9uTW9kZWxMYWJlbCgpOworCisJLyoqCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLkRpc2Vhc2VNb2RlbExhYmVsI2dldFBvcHVsYXRpb25Nb2RlbExhYmVsIDxlbT5Qb3B1bGF0aW9uIE1vZGVsIExhYmVsPC9lbT59JyByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5Qb3B1bGF0aW9uIE1vZGVsIExhYmVsPC9lbT4nIHJlZmVyZW5jZS4KKwkgKiBAc2VlICNnZXRQb3B1bGF0aW9uTW9kZWxMYWJlbCgpCisJICogQGdlbmVyYXRlZAorCSAqLworCXZvaWQgc2V0UG9wdWxhdGlvbk1vZGVsTGFiZWwoUG9wdWxhdGlvbk1vZGVsTGFiZWwgdmFsdWUpOworCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAbW9kZWwKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJU3RyaW5nIHRvVG9vbHRpcFN0cmluZygpOworCQorfSAvLyBEaXNlYXNlTW9kZWxMYWJlbApkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9zdGFuZGFyZC9EaXNlYXNlTW9kZWxMYWJlbFZhbHVlLmphdmEgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3N0YW5kYXJkL0Rpc2Vhc2VNb2RlbExhYmVsVmFsdWUuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZDY1YjJmCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9zdGFuZGFyZC9EaXNlYXNlTW9kZWxMYWJlbFZhbHVlLmphdmEKQEAgLTAsMCArMSwzOSBAQAorLy8gRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZS5qYXZhCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZDsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguSW50ZWdyYXRpb25MYWJlbFZhbHVlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5MYWJlbFZhbHVlOworCisvKioKKyAqIFRoaXMgaW50ZXJmYWNlIGRlZmluZXMgYSBjbGFzcyBpbiBhbiBFTUYgbW9kZWwgZm9yIGFuIGRpc2Vhc2UgbW9kZWwgbGFiZWwKKyAqIHZhbHVlLiBUaGUgdmFsdWVzIG9mIHRoaXMgbGFiZWwgcmVjb3JkIHRoZSBudW1iZXIgb2YgcG9wdWxhdGlvbiBtZW1iZXJzIHdobworICogaGF2ZSBiZWVuICJib3JuIiBhbmQgd2hvIGhhdmUgImRpZWQiLgorICogCisgKiBAbW9kZWwgYWJzdHJhY3Q9InRydWUiCisgKi8KKworcHVibGljIGludGVyZmFjZSBEaXNlYXNlTW9kZWxMYWJlbFZhbHVlIGV4dGVuZHMgSW50ZWdyYXRpb25MYWJlbFZhbHVlIHsKKworCS8qKgorCSAqIFRoaXMgaXMgdGhlIG1heGltdW0gdmFsdWUgZm9yIGFueSBwb3B1bGF0aW9uLgorCSAqLworCWRvdWJsZSBNQVhfUE9QVUxBVElPTl9WQUxVRSA9IDFlMTI7CisKKwkvKioKKwkgKiBAcmV0dXJuIHRoZSBzdW0gb2YgdGhlIGxpdmluZyBwb3B1bGF0aW9uIG1lbWJlcnMgaW4gYWxsIHN0YXRlcworCSAqIAorCSAqIEBtb2RlbCB2b2xhdGlsZT0idHJ1ZSIgdHJhbnNpZW50PSJ0cnVlIiBjaGFuZ2VhYmxlPSJmYWxzZSIKKwkgKi8KKwlkb3VibGUgZ2V0UG9wdWxhdGlvbkNvdW50KCk7Cit9IC8vIERpc2Vhc2VNb2RlbExhYmVsVmFsdWUKZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvc3RhbmRhcmQvSW5mZWN0b3IuamF2YSBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvc3RhbmRhcmQvSW5mZWN0b3IuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMDFiNmNjCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9zdGFuZGFyZC9JbmZlY3Rvci5qYXZhCkBAIC0wLDAgKzEsMTcxIEBACisvLyBJbmZlY3Rvci5qYXZhCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZDsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuRUxpc3Q7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlVSSTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuTm9kZURlY29yYXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuTW9kaWZpYWJsZTsKKworLyoqCisgKiBUaGlzIGludGVyZmFjZSBkZWZpbmVzIGEgY2xhc3MgaW4gYW4gRU1GIG1vZGVsIGZvciB0aGUgaW5pdGlhbGl6YXRpb24gb2YgYW4KKyAqIGluZmVjdGlvdXMgcG9wdWxhdGlvbiBpbiBhIGRpc2Vhc2UgbW9kZWwuCisgKiAKKyAqIEBtb2RlbCBhYnN0cmFjdD0idHJ1ZSIKKyAqLworcHVibGljIGludGVyZmFjZSBJbmZlY3RvciBleHRlbmRzIE5vZGVEZWNvcmF0b3IsIE1vZGlmaWFibGUgeworCisJLyoqCisJICogVGhpcyBpcyB0aGUgc2VnbWVudCBvZiB0aGUgdHlwZSBVUkkgdGhhdCBwcmVmaXhlcyBhbGwgb3RoZXIgc2VnbWVudHMgaW4gYQorCSAqIGluZmVjdG9yIHR5cGUgVVJJLgorCSAqLworCVN0cmluZyBVUklfVFlQRV9JTkZFQ1RPUl9TRUdNRU5UID0gImluZmVjdG9yIjsKKworCS8qKgorCSAqIEByZXR1cm4gdGhlIG5hbWUgb2YgdGhlIGRpc2Vhc2UgdG8gYmUgaW5mZWN0ZWQKKwkgKiBAbW9kZWwKKwkgKi8KKwlTdHJpbmcgZ2V0RGlzZWFzZU5hbWUoKTsKKworCS8qKgorCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5JbmZlY3RvciNnZXREaXNlYXNlTmFtZSA8ZW0+RGlzZWFzZSBOYW1lPC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+RGlzZWFzZSBOYW1lPC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiBAc2VlICNnZXREaXNlYXNlTmFtZSgpCisJICogQGdlbmVyYXRlZAorCSAqLworCXZvaWQgc2V0RGlzZWFzZU5hbWUoU3RyaW5nIHZhbHVlKTsKKworCS8qKgorCSAqIEByZXR1cm4gdGhlIElTTzMxNjYgYmFzZWQga2V5IGZvciB0aGUge0BsaW5rIFJlZ2lvbn0gdG8gYmUgaW5mZWN0ZWQuCisJICogQG1vZGVsCisJICovCisJU3RyaW5nIGdldFRhcmdldElTT0tleSgpOworCisJLyoqCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLkluZmVjdG9yI2dldFRhcmdldElTT0tleSA8ZW0+VGFyZ2V0IElTTyBLZXk8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPlRhcmdldCBJU08gS2V5PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiBAc2VlICNnZXRUYXJnZXRJU09LZXkoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwl2b2lkIHNldFRhcmdldElTT0tleShTdHJpbmcgdmFsdWUpOworCisJLyoqCisJICogQHJldHVybiB0aGUgaWRlbnRpZmllciBvZiB0aGUgcG9wdWxhdGlvbiB0aGF0IGlzIHRvIGJlIGluZmVjdGVkCisJICogQG1vZGVsCisJICovCisJU3RyaW5nIGdldFBvcHVsYXRpb25JZGVudGlmaWVyKCk7CisKKwkvKioKKwkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuSW5mZWN0b3IjZ2V0UG9wdWxhdGlvbklkZW50aWZpZXIgPGVtPlBvcHVsYXRpb24gSWRlbnRpZmllcjwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+UG9wdWxhdGlvbiBJZGVudGlmaWVyPC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiBAc2VlICNnZXRQb3B1bGF0aW9uSWRlbnRpZmllcigpCisJICogQGdlbmVyYXRlZAorCSAqLworCXZvaWQgc2V0UG9wdWxhdGlvbklkZW50aWZpZXIoU3RyaW5nIHZhbHVlKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPkluZmVjdCBQZXJjZW50YWdlPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogVGhlIGRlZmF1bHQgdmFsdWUgaXMgPGNvZGU+ImZhbHNlIjwvY29kZT4uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8cD4KKwkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5JbmZlY3QgUGVyY2VudGFnZTwvZW0+JyBhdHRyaWJ1dGUgaXNuJ3QgY2xlYXIsCisJICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLgorCSAqIDwvcD4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5JbmZlY3QgUGVyY2VudGFnZTwvZW0+JyBhdHRyaWJ1dGUuCisJICogQHNlZSAjc2V0SW5mZWN0UGVyY2VudGFnZShib29sZWFuKQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkUGFja2FnZSNnZXRJbmZlY3Rvcl9JbmZlY3RQZXJjZW50YWdlKCkKKwkgKiBAbW9kZWwgZGVmYXVsdD0iZmFsc2UiCisJICogQGdlbmVyYXRlZAorCSAqLworCWJvb2xlYW4gaXNJbmZlY3RQZXJjZW50YWdlKCk7CisKKwkvKioKKwkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuSW5mZWN0b3IjaXNJbmZlY3RQZXJjZW50YWdlIDxlbT5JbmZlY3QgUGVyY2VudGFnZTwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+SW5mZWN0IFBlcmNlbnRhZ2U8L2VtPicgYXR0cmlidXRlLgorCSAqIEBzZWUgI2lzSW5mZWN0UGVyY2VudGFnZSgpCisJICogQGdlbmVyYXRlZAorCSAqLworCXZvaWQgc2V0SW5mZWN0UGVyY2VudGFnZShib29sZWFuIHZhbHVlKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPlRhcmdldCBGZWF0dXJlPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogVGhlIGRlZmF1bHQgdmFsdWUgaXMgPGNvZGU+ImkiPC9jb2RlPi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDxwPgorCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPlRhcmdldCBGZWF0dXJlPC9lbT4nIGF0dHJpYnV0ZSBpc24ndCBjbGVhciwKKwkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uCisJICogPC9wPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPlRhcmdldCBGZWF0dXJlPC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiBAc2VlICNzZXRUYXJnZXRGZWF0dXJlKFN0cmluZykKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZFBhY2thZ2UjZ2V0SW5mZWN0b3JfVGFyZ2V0RmVhdHVyZSgpCisJICogQG1vZGVsIGRlZmF1bHQ9ImkiCisJICogQGdlbmVyYXRlZAorCSAqLworCVN0cmluZyBnZXRUYXJnZXRGZWF0dXJlKCk7CisKKwkvKioKKwkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuSW5mZWN0b3IjZ2V0VGFyZ2V0RmVhdHVyZSA8ZW0+VGFyZ2V0IEZlYXR1cmU8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPlRhcmdldCBGZWF0dXJlPC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiBAc2VlICNnZXRUYXJnZXRGZWF0dXJlKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJdm9pZCBzZXRUYXJnZXRGZWF0dXJlKFN0cmluZyB2YWx1ZSk7CisKKwkvKioKKwkgKiBAcmV0dXJuIHRoZSBkaXNlYXNlIG1vZGVsIHRoYXQgdGhpcyBpbmZlY3RvciBpbml0aWFsaXplcworCSAqIEBtb2RlbCBjb250YWlubWVudD0iZmFsc2UiCisJICovCisJU3RhbmRhcmREaXNlYXNlTW9kZWwgZ2V0RGlzZWFzZU1vZGVsKCk7CisKKwkvKioKKwkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuSW5mZWN0b3IjZ2V0RGlzZWFzZU1vZGVsIDxlbT5EaXNlYXNlIE1vZGVsPC9lbT59JyByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+RGlzZWFzZSBNb2RlbDwvZW0+JyByZWZlcmVuY2UuCisJICogQHNlZSAjZ2V0RGlzZWFzZU1vZGVsKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJdm9pZCBzZXREaXNlYXNlTW9kZWwoU3RhbmRhcmREaXNlYXNlTW9kZWwgdmFsdWUpOworCisJLyoqCisJICogQHJldHVybiB0aGUgVVJJIG9mIHRoZSBub2RlIHRoYXQgd2lsbCByZWNlaXZlIHRoZSBpbmZlY3Rpb3VzIHBvcHVsYXRpb24KKwkgKiBAbW9kZWwKKwkgKi8KKwlVUkkgZ2V0VGFyZ2V0VVJJKCk7CisKKwkvKioKKwkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuSW5mZWN0b3IjZ2V0VGFyZ2V0VVJJIDxlbT5UYXJnZXQgVVJJPC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+VGFyZ2V0IFVSSTwvZW0+JyBhdHRyaWJ1dGUuCisJICogQHNlZSAjZ2V0VGFyZ2V0VVJJKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJdm9pZCBzZXRUYXJnZXRVUkkoVVJJIHZhbHVlKTsKKworCS8qKgorCSAqIEByZXR1cm4gdGhlIGxpc3Qgb2Yge0BsaW5rIERpc2Vhc2VMYWJlbH1zIHRoYXQgdGhpcyA8Y29kZT5JbmZlY3RvcjwvY29kZT4KKwkgKiAJIGlzIHJlc3BvbnNpYmxlIGZvciAiaW5mZWN0aW5nIi4KKwkgKiBAbW9kZWwgdHlwZT0iRGlzZWFzZU1vZGVsTGFiZWwiIGNvbnRhaW5tZW50PSJmYWxzZSIgCisJICovCisJRUxpc3Q8RGlzZWFzZU1vZGVsTGFiZWw+IGdldExhYmVsc1RvSW5mZWN0KCk7Cit9IC8vIEluZmVjdG9yCmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3N0YW5kYXJkL0luZmVjdG9ySW5vY3VsYXRvckNvbGxlY3Rpb24uamF2YSBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvc3RhbmRhcmQvSW5mZWN0b3JJbm9jdWxhdG9yQ29sbGVjdGlvbi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc4YmI3YjAKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3N0YW5kYXJkL0luZmVjdG9ySW5vY3VsYXRvckNvbGxlY3Rpb24uamF2YQpAQCAtMCwwICsxLDc4IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA5LDIwMTAgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQ7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuRUxpc3Q7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLk5vZGVEZWNvcmF0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLk1vZGlmaWFibGU7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIEEgcmVwcmVzZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPkluZmVjdG9yIElub2N1bGF0b3IgQ29sbGVjdGlvbjwvYj48L2VtPicuCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqCisgKiA8cD4KKyAqIFRoZSBmb2xsb3dpbmcgZmVhdHVyZXMgYXJlIHN1cHBvcnRlZDoKKyAqIDx1bD4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuSW5mZWN0b3JJbm9jdWxhdG9yQ29sbGVjdGlvbiNnZXRMaXN0IDxlbT5MaXN0PC9lbT59PC9saT4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuSW5mZWN0b3JJbm9jdWxhdG9yQ29sbGVjdGlvbiNnZXRJbXBvcnRGb2xkZXIgPGVtPkltcG9ydCBGb2xkZXI8L2VtPn08L2xpPgorICogPC91bD4KKyAqIDwvcD4KKyAqCisgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZFBhY2thZ2UjZ2V0SW5mZWN0b3JJbm9jdWxhdG9yQ29sbGVjdGlvbigpCisgKiBAbW9kZWwKKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGludGVyZmFjZSBJbmZlY3Rvcklub2N1bGF0b3JDb2xsZWN0aW9uIGV4dGVuZHMgTm9kZURlY29yYXRvciwgTW9kaWZpYWJsZSB7CisJLyoqCisJICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+TGlzdDwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3QuCisJICogVGhlIGxpc3QgY29udGVudHMgYXJlIG9mIHR5cGUge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5JbmZlY3Rvcn0uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8cD4KKwkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5MaXN0PC9lbT4nIHJlZmVyZW5jZSBsaXN0IGlzbid0IGNsZWFyLAorCSAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4KKwkgKiA8L3A+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+TGlzdDwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UgbGlzdC4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZFBhY2thZ2UjZ2V0SW5mZWN0b3JJbm9jdWxhdG9yQ29sbGVjdGlvbl9MaXN0KCkKKwkgKiBAbW9kZWwgY29udGFpbm1lbnQ9InRydWUiCisJICogQGdlbmVyYXRlZAorCSAqLworCUVMaXN0PEluZmVjdG9yPiBnZXRMaXN0KCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5JbXBvcnQgRm9sZGVyPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogVGhlIGRlZmF1bHQgdmFsdWUgaXMgPGNvZGU+IiI8L2NvZGU+LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPHA+CisJICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+SW1wb3J0IEZvbGRlcjwvZW0+JyBhdHRyaWJ1dGUgaXNuJ3QgY2xlYXIsCisJICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLgorCSAqIDwvcD4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5JbXBvcnQgRm9sZGVyPC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiBAc2VlICNzZXRJbXBvcnRGb2xkZXIoU3RyaW5nKQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkUGFja2FnZSNnZXRJbmZlY3Rvcklub2N1bGF0b3JDb2xsZWN0aW9uX0ltcG9ydEZvbGRlcigpCisJICogQG1vZGVsIGRlZmF1bHQ9IiIKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJU3RyaW5nIGdldEltcG9ydEZvbGRlcigpOworCisJLyoqCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLkluZmVjdG9ySW5vY3VsYXRvckNvbGxlY3Rpb24jZ2V0SW1wb3J0Rm9sZGVyIDxlbT5JbXBvcnQgRm9sZGVyPC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5JbXBvcnQgRm9sZGVyPC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiBAc2VlICNnZXRJbXBvcnRGb2xkZXIoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwl2b2lkIHNldEltcG9ydEZvbGRlcihTdHJpbmcgdmFsdWUpOworCit9IC8vIEluZmVjdG9ySW5vY3VsYXRvckNvbGxlY3Rpb24KZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvc3RhbmRhcmQvSW5pdGlhbGl6ZXIuamF2YSBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvc3RhbmRhcmQvSW5pdGlhbGl6ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNTA2ZTIwCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9zdGFuZGFyZC9Jbml0aWFsaXplci5qYXZhCkBAIC0wLDAgKzEsMTk5IEBACisvKioNCisgKiA8Y29weXJpZ2h0Pg0KKyAqIDwvY29weXJpZ2h0Pg0KKyAqDQorICogJElkJA0KKyAqLw0KK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkOw0KKw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuRUxpc3Q7DQorDQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5VUkk7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5Ob2RlRGVjb3JhdG9yOw0KKw0KKy8qKg0KKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorICogQSByZXByZXNlbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+SW5pdGlhbGl6ZXI8L2I+PC9lbT4nLg0KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKyAqDQorICogPHA+DQorICogVGhlIGZvbGxvd2luZyBmZWF0dXJlcyBhcmUgc3VwcG9ydGVkOg0KKyAqIDx1bD4NCisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLkluaXRpYWxpemVyI2dldERpc2Vhc2VOYW1lIDxlbT5EaXNlYXNlIE5hbWU8L2VtPn08L2xpPg0KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuSW5pdGlhbGl6ZXIjZ2V0VGFyZ2V0SVNPS2V5IDxlbT5UYXJnZXQgSVNPIEtleTwvZW0+fTwvbGk+DQorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5Jbml0aWFsaXplciNnZXRUYXJnZXRVUkkgPGVtPlRhcmdldCBVUkk8L2VtPn08L2xpPg0KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuSW5pdGlhbGl6ZXIjZ2V0UG9wdWxhdGlvbklkZW50aWZpZXIgPGVtPlBvcHVsYXRpb24gSWRlbnRpZmllcjwvZW0+fTwvbGk+DQorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5Jbml0aWFsaXplciNnZXRDb21wYXJ0bWVudHMgPGVtPkNvbXBhcnRtZW50czwvZW0+fTwvbGk+DQorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5Jbml0aWFsaXplciNnZXRDb21wYXJ0bWVudFZhbHVlcyA8ZW0+Q29tcGFydG1lbnQgVmFsdWVzPC9lbT59PC9saT4NCisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLkluaXRpYWxpemVyI2lzVXNlRnJhY3Rpb25zIDxlbT5Vc2UgRnJhY3Rpb25zPC9lbT59PC9saT4NCisgKiA8L3VsPg0KKyAqIDwvcD4NCisgKg0KKyAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkUGFja2FnZSNnZXRJbml0aWFsaXplcigpDQorICogQG1vZGVsDQorICogQGdlbmVyYXRlZA0KKyAqLw0KK3B1YmxpYyBpbnRlcmZhY2UgSW5pdGlhbGl6ZXIgZXh0ZW5kcyBOb2RlRGVjb3JhdG9yIHsNCisJLyoqDQorCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPkRpc2Vhc2UgTmFtZTwvYj48L2VtPicgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8cD4NCisJICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+RGlzZWFzZSBOYW1lPC9lbT4nIGF0dHJpYnV0ZSBpc24ndCBjbGVhciwNCisJICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLg0KKwkgKiA8L3A+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5EaXNlYXNlIE5hbWU8L2VtPicgYXR0cmlidXRlLg0KKwkgKiBAc2VlICNzZXREaXNlYXNlTmFtZShTdHJpbmcpDQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkUGFja2FnZSNnZXRJbml0aWFsaXplcl9EaXNlYXNlTmFtZSgpDQorCSAqIEBtb2RlbA0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlTdHJpbmcgZ2V0RGlzZWFzZU5hbWUoKTsNCisNCisJLyoqDQorCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5Jbml0aWFsaXplciNnZXREaXNlYXNlTmFtZSA8ZW0+RGlzZWFzZSBOYW1lPC9lbT59JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5EaXNlYXNlIE5hbWU8L2VtPicgYXR0cmlidXRlLg0KKwkgKiBAc2VlICNnZXREaXNlYXNlTmFtZSgpDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXZvaWQgc2V0RGlzZWFzZU5hbWUoU3RyaW5nIHZhbHVlKTsNCisNCisJLyoqDQorCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPlRhcmdldCBJU08gS2V5PC9iPjwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDxwPg0KKwkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5UYXJnZXQgSVNPIEtleTwvZW0+JyBhdHRyaWJ1dGUgaXNuJ3QgY2xlYXIsDQorCSAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4NCisJICogPC9wPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+VGFyZ2V0IElTTyBLZXk8L2VtPicgYXR0cmlidXRlLg0KKwkgKiBAc2VlICNzZXRUYXJnZXRJU09LZXkoU3RyaW5nKQ0KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZFBhY2thZ2UjZ2V0SW5pdGlhbGl6ZXJfVGFyZ2V0SVNPS2V5KCkNCisJICogQG1vZGVsDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCVN0cmluZyBnZXRUYXJnZXRJU09LZXkoKTsNCisNCisJLyoqDQorCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5Jbml0aWFsaXplciNnZXRUYXJnZXRJU09LZXkgPGVtPlRhcmdldCBJU08gS2V5PC9lbT59JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5UYXJnZXQgSVNPIEtleTwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIEBzZWUgI2dldFRhcmdldElTT0tleSgpDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXZvaWQgc2V0VGFyZ2V0SVNPS2V5KFN0cmluZyB2YWx1ZSk7DQorDQorCS8qKg0KKwkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5UYXJnZXQgVVJJPC9iPjwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDxwPg0KKwkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5UYXJnZXQgVVJJPC9lbT4nIGF0dHJpYnV0ZSBpc24ndCBjbGVhciwNCisJICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLg0KKwkgKiA8L3A+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5UYXJnZXQgVVJJPC9lbT4nIGF0dHJpYnV0ZS4NCisJICogQHNlZSAjc2V0VGFyZ2V0VVJJKFVSSSkNCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmRQYWNrYWdlI2dldEluaXRpYWxpemVyX1RhcmdldFVSSSgpDQorCSAqIEBtb2RlbCBkYXRhVHlwZT0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5VUkkiDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCVVSSSBnZXRUYXJnZXRVUkkoKTsNCisNCisJLyoqDQorCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5Jbml0aWFsaXplciNnZXRUYXJnZXRVUkkgPGVtPlRhcmdldCBVUkk8L2VtPn0nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPlRhcmdldCBVUkk8L2VtPicgYXR0cmlidXRlLg0KKwkgKiBAc2VlICNnZXRUYXJnZXRVUkkoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwl2b2lkIHNldFRhcmdldFVSSShVUkkgdmFsdWUpOw0KKw0KKwkvKioNCisJICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+UG9wdWxhdGlvbiBJZGVudGlmaWVyPC9iPjwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDxwPg0KKwkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5Qb3B1bGF0aW9uIElkZW50aWZpZXI8L2VtPicgYXR0cmlidXRlIGlzbid0IGNsZWFyLA0KKwkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uDQorCSAqIDwvcD4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPlBvcHVsYXRpb24gSWRlbnRpZmllcjwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIEBzZWUgI3NldFBvcHVsYXRpb25JZGVudGlmaWVyKFN0cmluZykNCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmRQYWNrYWdlI2dldEluaXRpYWxpemVyX1BvcHVsYXRpb25JZGVudGlmaWVyKCkNCisJICogQG1vZGVsDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCVN0cmluZyBnZXRQb3B1bGF0aW9uSWRlbnRpZmllcigpOw0KKw0KKwkvKioNCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLkluaXRpYWxpemVyI2dldFBvcHVsYXRpb25JZGVudGlmaWVyIDxlbT5Qb3B1bGF0aW9uIElkZW50aWZpZXI8L2VtPn0nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPlBvcHVsYXRpb24gSWRlbnRpZmllcjwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIEBzZWUgI2dldFBvcHVsYXRpb25JZGVudGlmaWVyKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJdm9pZCBzZXRQb3B1bGF0aW9uSWRlbnRpZmllcihTdHJpbmcgdmFsdWUpOw0KKw0KKwkvKioNCisJICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+Q29tcGFydG1lbnRzPC9iPjwvZW0+JyBhdHRyaWJ1dGUgbGlzdC4NCisJICogVGhlIGxpc3QgY29udGVudHMgYXJlIG9mIHR5cGUge0BsaW5rIGphdmEubGFuZy5TdHJpbmd9Lg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8cD4NCisJICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+Q29tcGFydG1lbnRzPC9lbT4nIGF0dHJpYnV0ZSBsaXN0IGlzbid0IGNsZWFyLA0KKwkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uDQorCSAqIDwvcD4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPkNvbXBhcnRtZW50czwvZW0+JyBhdHRyaWJ1dGUgbGlzdC4NCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmRQYWNrYWdlI2dldEluaXRpYWxpemVyX0NvbXBhcnRtZW50cygpDQorCSAqIEBtb2RlbCBkZWZhdWx0PSIiDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCUVMaXN0PFN0cmluZz4gZ2V0Q29tcGFydG1lbnRzKCk7DQorDQorCS8qKg0KKwkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5Db21wYXJ0bWVudCBWYWx1ZXM8L2I+PC9lbT4nIGF0dHJpYnV0ZSBsaXN0Lg0KKwkgKiBUaGUgbGlzdCBjb250ZW50cyBhcmUgb2YgdHlwZSB7QGxpbmsgamF2YS5sYW5nLkRvdWJsZX0uDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDxwPg0KKwkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5Db21wYXJ0bWVudCBWYWx1ZXM8L2VtPicgYXR0cmlidXRlIGxpc3QgaXNuJ3QgY2xlYXIsDQorCSAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4NCisJICogPC9wPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+Q29tcGFydG1lbnQgVmFsdWVzPC9lbT4nIGF0dHJpYnV0ZSBsaXN0Lg0KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZFBhY2thZ2UjZ2V0SW5pdGlhbGl6ZXJfQ29tcGFydG1lbnRWYWx1ZXMoKQ0KKwkgKiBAbW9kZWwgZGVmYXVsdD0iMC4wIiB1bmlxdWU9ImZhbHNlIg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlFTGlzdDxEb3VibGU+IGdldENvbXBhcnRtZW50VmFsdWVzKCk7DQorDQorCS8qKg0KKwkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5Vc2UgRnJhY3Rpb25zPC9iPjwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDxwPg0KKwkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5Vc2UgRnJhY3Rpb25zPC9lbT4nIGF0dHJpYnV0ZSBpc24ndCBjbGVhciwNCisJICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLg0KKwkgKiA8L3A+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5Vc2UgRnJhY3Rpb25zPC9lbT4nIGF0dHJpYnV0ZS4NCisJICogQHNlZSAjc2V0VXNlRnJhY3Rpb25zKGJvb2xlYW4pDQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkUGFja2FnZSNnZXRJbml0aWFsaXplcl9Vc2VGcmFjdGlvbnMoKQ0KKwkgKiBAbW9kZWwNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJYm9vbGVhbiBpc1VzZUZyYWN0aW9ucygpOw0KKw0KKwkvKioNCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLkluaXRpYWxpemVyI2lzVXNlRnJhY3Rpb25zIDxlbT5Vc2UgRnJhY3Rpb25zPC9lbT59JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5Vc2UgRnJhY3Rpb25zPC9lbT4nIGF0dHJpYnV0ZS4NCisJICogQHNlZSAjaXNVc2VGcmFjdGlvbnMoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwl2b2lkIHNldFVzZUZyYWN0aW9ucyhib29sZWFuIHZhbHVlKTsNCisNCit9IC8vIEluaXRpYWxpemVyDQpkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9zdGFuZGFyZC9TRUlSLmphdmEgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3N0YW5kYXJkL1NFSVIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YWQ1NDNhCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9zdGFuZGFyZC9TRUlSLmphdmEKQEAgLTAsMCArMSwyNTIgQEAKKy8vIFNFSVIuamF2YQorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQ7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlVSSTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuU1RFTVVSSTsKKworLyoqCisgKiBBIHtAbGluayBEaXNlYXNlTW9kZWx9IHdpdGggZm91ciBzdGF0ZXMgPGVtPlN1c2NlcHRpYmxlPC9lbT4sCisgKiA8ZW0+RXhwb3NlZDwvZW0+LCA8ZW0+SW5mZWN0aW91czwvZW0+IGFuZCA8ZW0+UmVjb3ZlcmVkPC9lbT4oU0VJUikuCisgKiAKKyAqIDxwPgorICogVGhlIGJhc2ljIDxlbT5TRUlSPC9lbT4gKFN1c2NlcHRpYmxlLCBFeHBvc2VkLCBJbmZlY3Rpb3VzLCBSZWNvdmVyZWQpCisgKiBkaXNlYXNlIG1vZGVsIGFzc3VtZXMgYSB1bmlmb3JtIHBvcHVsYXRpb24gYXQgYSBzaW5nbGUgbG9jYXRpb24gYW5kIHRoYXQgdGhlCisgKiBwb3B1bGF0aW9uIG1lbWJlcnMgYXJlIHdlbGwgIm1peGVkIiwgbWVhbmluZyB0aGF0IHRoZXkgYXJlIGVxdWFsbHkgbGlrZWx5IHRvCisgKiBtZWV0IGFuZCBpbmZlY3QgZWFjaCBvdGhlci4gVGhpcyBtb2RlbCwgZm9yIGEgbm9ybWFsaXplZCBwb3B1bGF0aW9uLCBpcworICogZGVmaW5lZCBieSB0aGUgdGhyZWUgZXF1YXRpb25zIGJlbG93OgorICogPHVsPgorICogPGxpPjxlbT4mRGVsdGE7cyA9ICZtdTsgICZtaW51czsgJmJldGE7cyBpICsgJmdhbW1hO3IgJm1pbnVzOyAmbXU7czwvZW0+CisgKiA8L2xpPgorICogPGxpPjxlbT4mRGVsdGE7ZSA9ICZiZXRhO3MgaSAmbWludXM7ICZwaGk7ZSAgJm1pbnVzOyAmbXU7ZTwvZW0+IDwvbGk+CisgKiA8bGk+PGVtPiZEZWx0YTtpID0gJnBoaTtlICZtaW51czsgJnNpZ21hO2kgICZtaW51czsgJm11O2k8L2VtPiA8L2xpPgorICogPGxpPjxlbT4mRGVsdGE7ciA9ICAgJnNpZ21hO2kgJm1pbnVzOyAmZ2FtbWE7ciAmbWludXM7ICZtdTtyPC9lbT4gPC9saT4KKyAqIDwvdWw+CisgKiAKKyAqIAorICogPHA+CisgKiBXaGVyZToKKyAqIDx1bD4KKyAqIDxsaT48ZW0+czwvZW0+IGlzIHRoZSBub3JtYWxpemVkIDxlbT5TdXNjZXB0aWJsZTwvZW0+IHBvcHVsYXRpb24gPC9saT4KKyAqIDxsaT4gPGVtPmk8L2VtPiBpcyB0aGUgbm9ybWFsaXplZCA8ZW0+SW5mZWN0aW91czwvZW0+IHBvcHVsYXRpb248L2xpPgorICogPGxpPiZtdTsgaXMgdGhlIDxlbT5iYWNrZ3JvdW5kIG1vcnRhbGl0eSByYXRlPC9lbT4sIGFuZCwgYmVjYXVzZSBpdCBpcworICogYXNzdW1lZCB0aGF0IHRoZSBwb3B1bGF0aW9uIHdhcyBub3QgZ3Jvd2luZyBvciBzaHJpbmtpbmcgc2lnbmlmaWNhbnRseSBiZWZvcmUKKyAqIHRoZSBvbnNldCBvZiB0aGUgZGlzZWFzZSwgJm11OyBpcyBhbHNvIGFzc3VtZWQgdG8gYmUgdGhlIGJpcnRoIHJhdGUuIDwvbGk+CisgKiA8bGk+IDxlbT4mYmV0YTs8L2VtPiBpcyB0aGUgZGlzZWFzZSA8ZW0+dHJhbnNtaXNzaW9uIChpbmZlY3Rpb24pIHJhdGU8L2VtPi4KKyAqIFRoaXMgY29lZmZpY2llbnQgZGV0ZXJtaW5lcyB0aGUgbnVtYmVyIG9mIHBvcHVsYXRpb24gbWVtYmVycyB0aGF0IGJlY29tZQorICogPGVtPkV4cG9zZWQ8L2VtPiBwZXIgcG9wdWxhdGlvbiBtZW1iZXIgaW4gdGhlIDxlbT5JbmZlY3Rpb3VzPC9lbT4gc3RhdGUsCisgKiBhc3N1bWluZyB0aGUgZW50aXJlIHBvcHVsYXRpb24gaXMgaW4gdGhlIDxlbT5TdXNjZXB0aWJsZTwvZW0+IHN0YXRlLiA8L2xpPgorICogPGxpPiAmc2lnbWE7IGlzIHRoZSA8ZW0+SW5mZWN0aW91czwvZW0+IHJlY292ZXJ5IHJhdGUuIFRoaXMgY29lZmZpY2llbnQKKyAqIGRldGVybWluZXMgdGhlIHJhdGUgYXQgd2hpY2ggPGVtPkluZmVjdGlvdXM8L2VtPiBwb3B1bGF0aW9uIG1lbWJlcnMKKyAqIDxlbT5SZWNvdmVyPC9lbT4uPC9saT4KKyAqIDxsaT48ZW0+JmdhbW1hOzwvZW0+IGlzIHRoZSA8ZW0+aW1tdW5pdHkgbG9zcyByYXRlPC9lbT4uIFRoaXMKKyAqIGNvZWZmaWNpZW50IGRldGVybWluZXMgdGhlIHJhdGUgYXQgd2hpY2ggPGVtPlJlY292ZXJlZDwvZW0+IHBvcHVsYXRpb24KKyAqIG1lbWJlcnMgbG9zZSB0aGVpciBpbW11bml0eSB0byB0aGUgZGlzZWFzZSBhbmQgYmVjb21lIDxlbT5TdXNjZXB0aWJsZTwvZW0+CisgKiBhZ2Fpbi48L2xpPgorICogPGxpPjxlbT4mcGhpOzwvZW0+IGlzIHRoZSA8ZW0+aW5jdWJhdGlvbiByYXRlPC9lbT4uIFRoaXMgY29lZmZpY2llbnQKKyAqIGRldGVybWluZXMgdGhlIHJhdGUgYXQgd2hpY2ggPGVtPkV4cG9zZWQ8L2VtPiBwb3B1bGF0aW9uIG1lbWJlcnMgYmVjb21lCisgKiA8ZW0+SW5mZWN0aW91czwvZW0+LjwvbGk+CisgKiA8L3VsPgorICogPC9wPgorICogRm9sbG93aW5nIGJhc2ljYWxseSB0aGUgc2FtZSBkZXJpdmF0aW9uIGFzIG91dGxpbmVkIGZvciB0aGUge0BsaW5rIFNJfSBhbmQKKyAqIHtAbGluayBTSVJ9IG1vZGVscywgdGhlc2UgYmVjb21lOgorICogCisgKiA8cD4KKyAqIExldAorICogPHVsPgorICogPGxpPjxlbT54PC9lbT4gYmUgdGhlIDxlbT5JbmZlY3Rpb3VzIE1vcnRhbGl0eTwvZW0+IHdoaWNoIGlzIHRoZQorICogcHJvcG9ydGlvbiBvZiB0aGUgcG9wdWxhdGlvbiBtZW1iZXJzIHdobyBiZWNvbWUgPGVtPkluZmVjdGlvdXM8L2VtPiB0aGF0CisgKiB3aWxsIGV2ZW50dWFsbHkgZGllLjwvbGk+CisgKiA8bGk+PGVtPiZtdTs8c3ViPmk8L3N1Yj48L2VtPiBiZSB0aGUgPGVtPkluZmVjdGlvdXMgTW9ydGFsaXR5IFJhdGU8L2VtPi4KKyAqIFRoaXMgaXMgdGhlIHJhdGUgYXQgd2hpY2ggZmF0YWxseSBpbmZlY3RlZCBwb3B1bGF0aW9uIG1lbWJlcnMgZGllCisgKiBzcGVjaWZpY2FsbHkgZHVlIHRvIHRoZSBkaXNlYXNlLiA8L2xpPgorICogPC91bD4KKyAqIFRodXMsIHdlIG5vdyBoYXZlIHR3byB0eXBlcyBvZiA8ZW0+SW5mZWN0aW91czwvZW0+IHBvcHVsYXRpb24gbWVtYmVycywKKyAqIHRob3NlIHRoYXQgd2lsbCBldmVudHVhbGx5IHJlY292ZXIgYXQgcmF0ZSA8ZW0+JnNpZ21hOzwvZW0+LCBhbmQgdGhvc2UgdGhhdAorICogd2lsbCBldmVudHVhbGx5IGRpZSBhdCByYXRlIDxlbT4mbXU7PHN1Yj5pPC9zdWI+PC9lbT4gKG9mIGNvdXJzZSwgbWVtYmVycworICogaW4gYWxsIHRocmVlIHN0YXRlcyBzdGlsbCBkaWUgYXQgdGhlIGJhY2tncm91bmQgcmF0ZSA8ZW0+Jm11OzwvZW0+KS4KKyAqIDwvcD4KKyAqIDxwPgorICogTGV0CisgKiA8dWw+CisgKiA8bGk+PGVtPiBpIDxzdXA+Ujwvc3VwPjwvZW0+IGJlIHRoZSBub3JtYWxpemVkIGluZmVjdGlvdXMgcG9wdWxhdGlvbiB0aGF0CisgKiB3aWxsIHJlY292ZXIuPC9saT4KKyAqIDxsaT48ZW0+IGkgPHN1cD5GPC9zdXA+PC9lbT4gYmUgdGhlIG5vcm1hbGl6ZWQgaW5mZWN0aW91cyBwb3B1bGF0aW9uIHRoYXQKKyAqIHdpbGwgZGllIGZyb20gdGhlIGRpc2Vhc2UuPC9saT4KKyAqIDxsaT48ZW0+IGkgPSBpIDxzdXA+Ujwvc3VwPiArICBpIDxzdXA+Rjwvc3VwPjwvZW0+IGJlIHRoZSB0b3RhbCBub3JtYWxpemVkCisgKiBpbmZlY3Rpb3VzIHBvcHVsYXRpb24gKGFzIGJlZm9yZSkuPC9saT4KKyAqIDwvdWw+CisgKiA8L3A+CisgKiAKKyAqIDxwPgorICogV2UgbW9kaWZ5IG91ciBtb2RlbCB0byBpbmNsdWRlIHRoZXNlIGFkZGl0aW9uYWwgc3RhdGVzIGFuZCByYXRlcy4KKyAqIDx1bD4KKyAqIDxsaT48ZW0+JkRlbHRhO3MgPSAmbXU7ICAmbWludXM7ICZiZXRhO3MgaSArICZnYW1tYTtyICAmbWludXM7ICZtdTsgczwvZW0+CisgKiA8L2xpPgorICogPGxpPjxlbT4mRGVsdGE7ZSA9ICZiZXRhO3MgaSAmbWludXM7ICZwaGk7ZSAgJm1pbnVzOyAmbXU7ZTwvZW0+IDwvbGk+CisgKiA8bGk+PGVtPiZEZWx0YTtpIDxzdXA+Ujwvc3VwPiA9ICgxLXgpJnBoaTtlICAmbWludXM7ICZzaWdtYTtpIDxzdXA+Ujwvc3VwPiAgJm1pbnVzOyAmbXU7aSA8c3VwPlI8L3N1cD48L2VtPgorICogPC9saT4KKyAqIDxsaT48ZW0+JkRlbHRhO2kgPHN1cD5GPC9zdXA+ID0geCZwaGk7ZSAgJm1pbnVzOyAoJm11OyArICZtdTs8c3ViPmk8L3N1Yj4pIGkgPHN1cD5GPC9zdXA+PC9lbT4KKyAqIDwvbGk+CisgKiA8bGk+PGVtPiZEZWx0YTtyID0gICAmc2lnbWE7aTxzdXA+Ujwvc3VwPiAmbWludXM7ICZnYW1tYTtyICZtaW51czsgJm11O3I8L2VtPgorICogPC9saT4KKyAqIAorICogPC91bD4KKyAqIDwvcD4KKyAqIDxoMz5TcGF0aWFsIEFkYXB0YXRpb248L2gzPgorICogPHA+CisgKiA8dWw+CisgKiA8bGk+PGVtPiZEZWx0YTtzIFA8c3ViPmw8L3N1Yj49ICZtdTtQPHN1Yj5sPC9zdWI+ICAmbWludXM7ICZiZXRhOzxzdWI+bDwvc3ViPiBzIGkgUDxzdWI+bDwvc3ViPiArICZnYW1tYTsgciBQPHN1Yj5sPC9zdWI+ICAmbWludXM7ICZtdTsgcyBQPHN1Yj5sPC9zdWI+PC9lbT4KKyAqIDwvbGk+CisgKiA8bGk+PGVtPiZEZWx0YTtlIFA8c3ViPmw8L3N1Yj49ICZiZXRhO3NpUDxzdWI+bDwvc3ViPiAmbWludXM7ICZwaGk7ZVA8c3ViPmw8L3N1Yj4gICZtaW51czsgJm11O2VQPHN1Yj5sPC9zdWI+PC9lbT4KKyAqIDwvbGk+CisgKiA8bGk+PGVtPiZEZWx0YTtpIDxzdXA+Ujwvc3VwPiBQPHN1Yj5sPC9zdWI+ID0gKDEteCkmcGhpO2UgUDxzdWI+bDwvc3ViPiAmbWludXM7ICZzaWdtYTsgaSA8c3VwPlI8L3N1cD4gUDxzdWI+bDwvc3ViPiAmbWludXM7ICZtdTtpIDxzdXA+Ujwvc3VwPiBQPHN1Yj5sPC9zdWI+PC9lbT4KKyAqIDwvbGk+CisgKiA8bGk+PGVtPiZEZWx0YTtpIDxzdXA+Rjwvc3VwPiBQPHN1Yj5sPC9zdWI+ID0geCAmcGhpO2UgUDxzdWI+bDwvc3ViPiAmbWludXM7ICgmbXU7ICsgJm11OzxzdWI+aTwvc3ViPikgaSA8c3VwPkY8L3N1cD4gUDxzdWI+bDwvc3ViPjwvZW0+CisgKiA8L2xpPgorICogPGxpPjxlbT4mRGVsdGE7ciBQPHN1Yj5sPC9zdWI+PSAgICZzaWdtYTtpPHN1cD5SPC9zdXA+UDxzdWI+bDwvc3ViPiAmbWludXM7ICZnYW1tYTtyIFA8c3ViPmw8L3N1Yj4mbWludXM7ICZtdTtyIFA8c3ViPmw8L3N1Yj48L2VtPgorICogPC9saT4KKyAqIDwvdWw+CisgKiA8cD4KKyAqIExldCA8ZW0+UzxzdWI+bDwvc3ViPiA9IHMgUDxzdWI+bDwvc3ViPjwvZW0+IGJlIHRoZSBudW1iZXIgb2YKKyAqIDxlbT5TdXNjZXB0aWJsZTwvZW0+IHBvcHVsYXRpb24gbWVtYmVycyBhdCBsb2NhdGlvbiA8ZW0+bDwvZW0+LgorICogU2ltaWxhcmx5LCBsZXQgPGVtPkk8c3ViPmw8L3N1Yj4gPSBpIFA8c3ViPmw8L3N1Yj48L2VtPiBiZSB0aGUgbnVtYmVyCisgKiBvZiBwb3B1bGF0aW9uIG1lbWJlcnMgYXQgbG9jYXRpb24gPGVtPmw8L2VtPiB0aGF0IGFyZSA8ZW0+SW5mZWN0aW91czwvZW0+CisgKiAoYm90aCBzdGF0ZXMgY29tYmluZWQpLCBhbmQgbGV0CisgKiA8ZW0+ciBQPHN1Yj5sPC9zdWI+IGJlIHRoZSA8ZW0+UmVjb3ZlcmVkPC9lbT4gcG9wdWxhdGlvbi4KKyAqIEZvciByZWFkYWJpbGl0eSwgd2UgZHJvcCB0aGUgPGVtPmw8L2VtPiBzdWJzY3JpcHQgYW5kIHN1YnN0aXR1dGUuCisgKiA8L3A+CisgKiBTdWJzdGl0dXRpbmcKKyAqICAKKyAqIDwvcD4KKyAqIDx1bD4KKyAqIDxsaT48ZW0+JkRlbHRhO1MgPSAmbXU7UDxzdWI+bDwvc3ViPiAgJm1pbnVzOyAmYmV0YTs8c3ViPmw8L3N1Yj4gUyBpICsgJmdhbW1hO1IgICZtaW51czsgJm11OyBTPC9lbT4KKyAqIDwvbGk+CisgKiA8bGk+PGVtPiZEZWx0YTtFID0gJmJldGE7UyBpICZtaW51czsgJnBoaTtFICAmbWludXM7ICZtdTtFPC9lbT4gPC9saT4KKyAqIDxsaT48ZW0+JkRlbHRhO0kgPHN1cD5SPC9zdXA+ID0gKDEteCkmcGhpO0UgICZtaW51czsgJnNpZ21hO0kgPHN1cD5SPC9zdXA+ICZtaW51czsgJm11O0kgPHN1cD5SPC9zdXA+IDwvZW0+CisgKiA8L2xpPgorICogPGxpPjxlbT4mRGVsdGE7SSA8c3VwPkY8L3N1cD4gPSB4JnBoaTtFICAgJm1pbnVzOyAoJm11OyArICZtdTs8c3ViPmk8L3N1Yj4pIEkgPHN1cD5GPC9zdXA+IDwvZW0+CisgKiA8L2xpPgorICogIDxsaT48ZW0+JkRlbHRhO1I9ICAgJnNpZ21hO0k8c3VwPlI8L3N1cD4gJm1pbnVzOyAmZ2FtbWE7UiAmbWludXM7ICZtdTtSPC9lbT4gPC9saT4KKyAqIDwvdWw+CisgKiAKKyAqICAgQ29udGludWluZyB3aXRoIDxlbT4gaSA9IEkvUDxzdWI+bDwvc3ViPjwvZW0+LCB3ZSBoYXZlOgorICogPHVsPgorICogPGxpPjxlbT4mRGVsdGE7UyA9ICZtdTtQPHN1Yj5sPC9zdWI+ICAmbWludXM7ICgmYmV0YTs8c3ViPmw8L3N1Yj4vUDxzdWI+bDwvc3ViPilTSSArICZnYW1tYTtSICAmbWludXM7ICZtdTsgUzwvZW0+CisgKiA8L2xpPgorICogPGxpPjxlbT4mRGVsdGE7RSA9ICgmYmV0YTs8c3ViPmw8L3N1Yj4vUDxzdWI+bDwvc3ViPilTSSAmbWludXM7ICZwaGk7RSAgJm1pbnVzOyAmbXU7RTwvZW0+IDwvbGk+CisgKiA8bGk+PGVtPiZEZWx0YTtJIDxzdXA+Ujwvc3VwPiA9ICgxLXgpJnBoaTtFICAmbWludXM7ICZzaWdtYTtJIDxzdXA+Ujwvc3VwPiAgJm1pbnVzOyAmbXU7SSA8c3VwPlI8L3N1cD4gPC9lbT4KKyAqIDwvbGk+CisgKiA8bGk+PGVtPiZEZWx0YTtJIDxzdXA+Rjwvc3VwPiA9IHgmcGhpO0UgICAmbWludXM7ICgmbXU7ICsgJm11OzxzdWI+aTwvc3ViPikgSSA8c3VwPkY8L3N1cD4gPC9lbT4KKyAqIDwvbGk+CisgKiAgIDxsaT48ZW0+JkRlbHRhO1I9ICAgJnNpZ21hO0k8c3VwPlI8L3N1cD4gJm1pbnVzOyAmZ2FtbWE7UiAmbWludXM7ICZtdTtSPC9lbT4gPC9saT4KKyAqIDwvdWw+CisgKiAKKyAqIExldHRpbmcKKyAqIDxlbT4mYmV0YTs8c3VwPio8L3N1cD4gPSAmYmV0YTs8c3ViPmw8L3N1Yj4vUDxzdWI+bDwvc3ViPiA9ICZiZXRhOyAoZDxzdWI+bDwvc3ViPi8oQVBEICogUDxzdWI+bDwvc3ViPikpCisgKiA8L2VtPgorICogZ2l2ZXM6CisgKiAKKyAqIDx1bD4KKyAqIDxsaT48ZW0+JkRlbHRhO1MgPSAmbXU7UDxzdWI+bDwvc3ViPiAgJm1pbnVzOyAmYmV0YTs8c3VwPio8L3N1cD4gUyBJICsgJmdhbW1hO1IgICZtaW51czsgJm11OyBTPC9lbT4KKyAqIDwvbGk+CisgKiA8bGk+PGVtPiZEZWx0YTtFID0gICZiZXRhOzxzdXA+Kjwvc3VwPiBTIEkgJm1pbnVzOyAmcGhpO0UgICZtaW51czsgJm11O0U8L2VtPiA8L2xpPgorICogPGxpPjxlbT4mRGVsdGE7SSA8c3VwPlI8L3N1cD4gPSAoMS14KSZwaGk7RSAmbWludXM7ICZzaWdtYTtJIDxzdXA+Ujwvc3VwPiAgJm1pbnVzOyAmbXU7SSA8c3VwPlI8L3N1cD4gPC9lbT4KKyAqIDwvbGk+CisgKiA8bGk+PGVtPiZEZWx0YTtJIDxzdXA+Rjwvc3VwPiA9IHgmcGhpO0UgICZtaW51czsgKCZtdTsgKyAmbXU7PHN1Yj5pPC9zdWI+KSBJIDxzdXA+Rjwvc3VwPiA8L2VtPgorICogPC9saT4KKyAqICAgPGxpPjxlbT4mRGVsdGE7Uj0gICAmc2lnbWE7STxzdXA+Ujwvc3VwPiAmbWludXM7ICZnYW1tYTtSICZtaW51czsgJm11O1I8L2VtPiA8L2xpPgorICogPC91bD4KKyAqIFRTRgorICogPHVsPgorICogPGxpPjxlbT5UU0Y8c3ViPmw8L3N1Yj4gPSAoKFMrRStJK1IpL0FyZWE8c3ViPmw8L3N1Yj4pIC8gKFAvQXJlYSAqIChTK0UrSStSKSk8L2VtPjwvbGk+CisgKiA8bGk+PGVtPlRTRjxzdWI+bDwvc3ViPiA9ICgxL0FyZWE8c3ViPmw8L3N1Yj4pIC8gKFAvQXJlYSApPC9lbT48L2xpPgorICogPGxpPjxlbT5UU0Y8c3ViPmw8L3N1Yj4gPSBBcmVhIC8gKFAgKkFyZWE8c3ViPmw8L3N1Yj4gKTwvZW0+PC9saT4KKyAqIDxsaT48ZW0+VFNGPHN1Yj5sPC9zdWI+ID0gKDEgLyBQKSogKEFyZWEvQXJlYTxzdWI+bDwvc3ViPiApPC9lbT48L2xpPgorICogPC91bD4KKyAqIDxoMz5OZWlnaGJvcmluZyBJbmZlY3Rpb3VzIFBvcHVsYXRpb25zPC9oMz4KKyAqIDwvcD4KKyAqIDx1bD4KKyAqIDxsaT48ZW0+JkRlbHRhO1MgPSAmbXU7UDxzdWI+bDwvc3ViPiAgJm1pbnVzOyAmYmV0YTs8c3VwPio8L3N1cD4gUyAoSSArIEk8c3ViPm5laWdoYm9yPC9zdWI+KCkgKSArICZnYW1tYTtSICAmbWludXM7ICZtdTsgUzwvZW0+CisgKiA8L2xpPgorICogPGxpPjxlbT4mRGVsdGE7RSA9ICAmYmV0YTs8c3VwPio8L3N1cD4gUyAoSSArIEk8c3ViPm5laWdoYm9yPC9zdWI+KCkgKSAmbWludXM7ICZwaGk7RSAgJm1pbnVzOyAmbXU7RTwvZW0+IDwvbGk+CisgKiA8bGk+PGVtPiZEZWx0YTtJIDxzdXA+Ujwvc3VwPiA9ICgxLXgpJnBoaTtFICZtaW51czsgJnNpZ21hO0kgPHN1cD5SPC9zdXA+ICAmbWludXM7ICZtdTtJIDxzdXA+Ujwvc3VwPiA8L2VtPgorICogPC9saT4KKyAqIDxsaT48ZW0+JkRlbHRhO0kgPHN1cD5GPC9zdXA+ID0geCZwaGk7RSAgJm1pbnVzOyAoJm11OyArICZtdTs8c3ViPmk8L3N1Yj4pIEkgPHN1cD5GPC9zdXA+IDwvZW0+CisgKiA8L2xpPgorICogPGxpPjxlbT4mRGVsdGE7Uj0gICAmc2lnbWE7STxzdXA+Ujwvc3VwPiAmbWludXM7ICZnYW1tYTtSICZtaW51czsgJm11O1I8L2VtPiA8L2xpPgorICogPC91bD4KKyAqIAorICogU3BlY2lmaWMgc3RhdGlzdGljcyBvbiB0aGUgdG90YWwgbnVtYmVyIG9mIGJpcnRocywgZGVhdGhzIGFuZCBkZWF0aHMgZHVlIHRvCisgKiB0aGUgZGlzZWFzZSBjYW4gYmUgY29tcHV0ZWQgYnkgYWRkaW5nIHRoZSBhcHByb3ByaWF0ZSB0ZXJtcyBvZiB0aGUgZXF1YXRpb25zCisgKiBhYm92ZS4KKyAqIDx1bD4KKyAqIDxsaT48ZW0+Qj0gJm11OyhTICsgRSArIEkgKyBSKTwvZW0+LCBpcyB0aGUgbnVtYmVyIG9mIDxlbT5CaXJ0aHM8L2VtPiA8L2xpPgorICogPGxpPjxlbT5EID0gJm11O1MgKyAmbXU7RSArICgmbXU7ICsgJm11OzxzdWI+aTwvc3ViPiApSTxzdXA+Rjwvc3VwPiArICZtdTtJPHN1cD5SPC9zdXA+ICsgJm11O1I8L2VtPixpcworICogdGhlIHRvdGFsIG51bWJlciBvZiA8ZW0+RGVhdGhzPC9lbT48L2xpPgorICogPGxpPjxlbT5ERD0gJm11OzxzdWI+aTwvc3ViPiBJPHN1cD5GPC9zdXA+PC9lbT4sIGlzIHRoZSBudW1iZXIgb2YKKyAqIDxlbT5EaXNlYXNlIERlYXRoczwvZW0+IDwvbGk+CisgKiA8L3VsPgorICogQHNlZSBTSVIKKyAqIEBzZWUgU0lSTGFiZWwKKyAqIEBzZWUgU0lSTGFiZWxWYWx1ZQorICogQHNlZSBTRUlSTGFiZWwKKyAqIEBzZWUgU0VJUkxhYmVsVmFsdWUKKyAqIAorICogQG1vZGVsIGFic3RyYWN0PSJ0cnVlIgorICovCitwdWJsaWMgaW50ZXJmYWNlIFNFSVIgZXh0ZW5kcyBTSVIgeworCisJLyoqCisJICogVGhpcyBpcyB0aGUgc2VnbWVudCBvZiB0aGUgdHlwZSBVUkkgdGhhdCBwcmVmaXhlcyBhbGwgb3RoZXIgc2VnbWVudHMgaW4gYQorCSAqIHN0YW5kYXJkIGRpc2Vhc2UgbW9kZWwgdHlwZSBVUkkuCisJICovCisJU3RyaW5nIFVSSV9UWVBFX1NUQU5EQVJEX1NFSVJfRElTRUFTRV9NT0RFTF9TRUdNRU5UID0gVVJJX1RZUEVfU1RBTkRBUkRfRElTRUFTRU1PREVMX1NFR01FTlQKKwkJCSsgIi9zZWlyIjsKKworCS8qKgorCSAqIFRoZSBUeXBlIFVSSSBmb3IgdGhlIHN0YW5kYXJkIFNFSVIgZGlzZWFzZSBtb2RlbAorCSAqLworCVVSSSBVUklfVFlQRV9TVEFOREFSRF9TRUlSX0RJU0VBU0VfTU9ERUwgPSBTVEVNVVJJCisJCQkuY3JlYXRlVHlwZVVSSShVUklfVFlQRV9TVEFOREFSRF9TRUlSX0RJU0VBU0VfTU9ERUxfU0VHTUVOVCk7CisKKwkvKioKKwkgKiBAcmV0dXJuIHRoZSBudW1iZXIgb2YgcG9wdWxhdGlvbiBtZW1iZXJzIGluIHRoZSA8ZW0+RXhwb3NlZDwvZW0+IHN0YXRlCisJICogICAgICAgICB0aGF0IG1vdmUgdG8gdGhlIDxlbT5pbmZlY3Rpb3VzPC9lbT4gc3RhdGUsIHBlciB0aW1lIHBlcmlvZC4KKwkgKiBAbW9kZWwgZGVmYXVsdD0iMC4wIgorCSAqLworCWRvdWJsZSBnZXRJbmN1YmF0aW9uUmF0ZSgpOworCisJLyoqCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlNFSVIjZ2V0SW5jdWJhdGlvblJhdGUgPGVtPkluY3ViYXRpb24gUmF0ZTwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPkluY3ViYXRpb24gUmF0ZTwvZW0+JyBhdHRyaWJ1dGUuCisJICogQHNlZSAjZ2V0SW5jdWJhdGlvblJhdGUoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwl2b2lkIHNldEluY3ViYXRpb25SYXRlKGRvdWJsZSB2YWx1ZSk7CisKKwkvKioKKwkgKiBDb21wdXRlIHRoZSBpbmN1YmF0aW9uIHJhdGUgYWRqdXN0ZWQgZm9yIGEgdGltZSBkZWx0YSBwb3RlbnRpYWxseQorCSAqIGRpZmZlcmVudCBmcm9tIHRoZSB0aW1lIHBlcmlvZCBzcGVjaWZpZWQgZm9yIHRoZSByYXRlLgorCSAqIAorCSAqIEBwYXJhbSB0aW1lRGVsdGEKKwkgKiAgICAgICAgICAgIHRoZSB0aW1lIHBlcmlvZCAobWlsbGlzZWNvbmRzKSB0byB3aGljaCB0aGUgcmF0ZSBpcyB0byBiZQorCSAqICAgICAgICAgICAgYWRqdXN0ZWQuCisJICogQHJldHVybiB0aGUgYWRqdXN0ZWQgcmF0ZQorCSAqIAorCSAqIEBtb2RlbCB2b2xhdGlsZT0idHJ1ZSIgdHJhbnNpZW50PSJ0cnVlIiBjaGFuZ2VhYmxlPSJmYWxzZSIKKwkgKi8KKwlkb3VibGUgZ2V0QWRqdXN0ZWRJbmN1YmF0aW9uUmF0ZShmaW5hbCBsb25nIHRpbWVEZWx0YSk7CisKK30gLy8gU0VJUgpkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9zdGFuZGFyZC9TRUlSTGFiZWwuamF2YSBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvc3RhbmRhcmQvU0VJUkxhYmVsLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2VhMTdkNAotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvc3RhbmRhcmQvU0VJUkxhYmVsLmphdmEKQEAgLTAsMCArMSwyMSBAQAorLyoqDQorICogPGNvcHlyaWdodD4NCisgKiA8L2NvcHlyaWdodD4NCisgKg0KKyAqICRJZCQNCisgKi8NCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZDsNCisNCisNCisvKioNCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKyAqIEEgcmVwcmVzZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPlNFSVIgTGFiZWw8L2I+PC9lbT4nLg0KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKyAqDQorICoNCisgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZFBhY2thZ2UjZ2V0U0VJUkxhYmVsKCkNCisgKiBAbW9kZWwNCisgKiBAZ2VuZXJhdGVkDQorICovDQorcHVibGljIGludGVyZmFjZSBTRUlSTGFiZWwgZXh0ZW5kcyBTdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsIHsNCit9IC8vIFNFSVJMYWJlbA0KZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvc3RhbmRhcmQvU0VJUkxhYmVsVmFsdWUuamF2YSBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvc3RhbmRhcmQvU0VJUkxhYmVsVmFsdWUuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YjExYTQ2Ci0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9zdGFuZGFyZC9TRUlSTGFiZWxWYWx1ZS5qYXZhCkBAIC0wLDAgKzEsNjIgQEAKKy8vIFNFSVJMYWJlbFZhbHVlLmphdmEKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqCisgKiBUaGlzIGludGVyZmFjZSBkZWZpbmVzIGEgY2xhc3MgaW4gYW4gRU1GIG1vZGVsIGZvciBhbiBTRUlSIGRpc2Vhc2UgbW9kZWwKKyAqIGxhYmVsIHZhbHVlLiBUaGUgdmFsdWVzIG9mIHRoaXMgbGFiZWwgcmVjb3JkIHRoZSBudW1iZXIgb2YgcG9wdWxhdGlvbiBtZW1iZXJzCisgKiB3aG8gYXJlIGluIG9uZSBvZiBmb3VyIHN0YXRlcyB3aXRoIHJlcHNlY3QgdG8gYSBwYXJ0aWN1bGFyIGRpc2Vhc2UuCisgKiA8dWw+CisgKiA8bGk+PGVtPlN1c2NlcHRpYmxlPC9lbT4gd2hpY2ggbWVhbnMgdGhhdCB0aGV5IGFyZSBub3QgaW5mZWN0ZWQgYnkgdGhlCisgKiBkaXNlYXNlLCBidXQgdGhleSBjYW4gYmVjb21lIGV4cG9zZWQgKGFuZCBsYXRlciBpbmZlY3RlZCkgdG8gdGhlIGRpc2Vhc2UuPC9saT4KKyAqIDxsaT48ZW0+RXhwb3NlZDwvZW0+IHdoaWNoIG1lYW5zIHRoYXQgdGhleSBhcmUgaW5mZWN0ZWQgd2l0aCB0aGUgZGlzZWFzZSwKKyAqIGJ1dCBhcmUgbm90IHlldCBpbmZlY3Rpb3VzIHRvIG90aGVycy4gPC9saT4KKyAqIDxsaT48ZW0+SW5mZWN0aW91czwvZW0+IHdoaWNoIG1lYW5zIHRoYXQgcG9wdWxhdGlvbiBtZW1iZXJzIGFyZSBpbmZlY3RlZAorICogd2l0aCB0aGUgZGlzZWFzZSBhbmQgdGhleSBjYW4gaW5mZWN0IG90aGVycy4gPC9saT4KKyAqIDxsaT48ZW0+UmVjb3ZlcmVkPC9lbT4gd2hpY2ggbWVhbnMgdGhhdCBwb3B1bGF0aW9uIG1lbWJlcnMgYXJlIG5vdAorICogaW5mZWN0ZWQgd2l0aCB0aGUgZGlzZWFzZSBhbmQgPGVtPmNhbm5vdDwvZW0+IGJlY29tZSBpbmZlY3RlZCBieSB0aGUKKyAqIGRpc2Vhc2UuIE5vdGUgdGhhdCBpbiBzb21lIGRpc2Vhc2UgbW9kZWxzIGEgcG9wdWxhdGlvbiBtZW1iZXIgaW4gdGhlCisgKiA8ZW0+UmVjb3ZlcmVkPC9lbT4gc3RhdGUgY291bGQgdHJhbnNpdGlvbiB0byB0aGUgPGVtPlN1c2NlcHRpYmxlPC9lbT4KKyAqIHN0YXRlIGFuZCB0aGVuIGJlY29tZSBhIGNhbmRpZGF0ZSBmb3IgcmUtaW5mZWN0aW9uLjwvbGk+CisgKiA8L3VsPgorICogPHA+CisgKiBTdWItY2xhc3NlcyBjb3VsZCBpbnRyb2R1Y2UgYWRkaXRpb25hbCBzdGF0ZXMgaW4gd2hpY2ggcG9wdWxhdGlvbiBtZW1iZXJzCisgKiBjb3VsZCBleGlzdC4KKyAqIDwvcD4KKyAqIAorICogQHNlZSBTSVIKKyAqIEBzZWUgU0lSTGFiZWwKKyAqIEBzZWUgU0lSTGFiZWxWYWx1ZQorICogQHNlZSBTRUlSCisgKiBAc2VlIFNFSVJMYWJlbAorICogCisgKiBAbW9kZWwKKyAqLworcHVibGljIGludGVyZmFjZSBTRUlSTGFiZWxWYWx1ZSBleHRlbmRzIFNJUkxhYmVsVmFsdWUgeworCisJLyoqCisJICogQHJldHVybiB0aGUgbnVtYmVyIG9mIHBvcHVsYXRpb24gbWVtYmVycyBpbiB0aGUgPGVtPkV4cG9zZWQ8L2VtPiBzdGF0ZS4KKwkgKiBAbW9kZWwKKwkgKi8KKwlkb3VibGUgZ2V0RSgpOworCisJLyoqCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlNFSVJMYWJlbFZhbHVlI2dldEUgPGVtPkU8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5FPC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiBAc2VlICNnZXRFKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJdm9pZCBzZXRFKGRvdWJsZSB2YWx1ZSk7CisKK30gLy8gU0VJUkxhYmVsVmFsdWUKZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvc3RhbmRhcmQvU0kuamF2YSBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvc3RhbmRhcmQvU0kuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZTVlMGYyCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9zdGFuZGFyZC9TSS5qYXZhCkBAIC0wLDAgKzEsNDcyIEBACisvLyBTSS5qYXZhCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZDsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNiwgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5UcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuaW1wbC5TSUltcGw7CisKKy8qKgorICogQSB7QGxpbmsgRGlzZWFzZU1vZGVsfSB3aXRoIHR3byBzdGF0ZXMgPGVtPlN1c2NlcHRpYmxlPC9lbT4gYW5kCisgKiA8ZW0+SW5mZWN0aW91czwvZW0+IChTSSkuCisgKiAKKyAqIDxwPgorICogVGhlIGJhc2ljIDxlbT5TSTwvZW0+IChTdXNjZXB0aWJsZSwgSW5mZWN0aW91cykgZGlzZWFzZSBtb2RlbCBhc3N1bWVzIGEKKyAqIHVuaWZvcm0gcG9wdWxhdGlvbiBhdCBhIHNpbmdsZSBsb2NhdGlvbiBhbmQgdGhhdCB0aGUgcG9wdWxhdGlvbiBtZW1iZXJzIGFyZQorICogd2VsbCAibWl4ZWQiLCBtZWFuaW5nIHRoYXQgdGhleSBhcmUgZXF1YWxseSBsaWtlbHkgdG8gbWVldCBhbmQgaW5mZWN0IGVhY2gKKyAqIG90aGVyLiBUaGlzIG1vZGVsLCBmb3IgYSBub3JtYWxpemVkIHBvcHVsYXRpb24sIGlzIGRlZmluZWQgYnkgdGhlIHR3bworICogZXF1YXRpb25zIGJlbG93OgorICogPHVsPgorICogPGxpPjxlbT4mRGVsdGE7cyA9ICZtdTsgICZtaW51czsgJmJldGE7cyBpICsgJnNpZ21hO2kgJm1pbnVzOyAmbXU7czwvZW0+CisgKiA8L2xpPgorICogPGxpPjxlbT4mRGVsdGE7aSA9ICZiZXRhO3MgaSAmbWludXM7ICZzaWdtYTtpICAmbWludXM7ICAJaTwvZW0+IDwvbGk+CisgKiA8L3VsPgorICogPHA+CisgKiBXaGVyZToKKyAqIDx1bD4KKyAqIDxsaT48ZW0+czwvZW0+IGlzIHRoZSBub3JtYWxpemVkIDxlbT5TdXNjZXB0aWJsZTwvZW0+IHBvcHVsYXRpb24gPC9saT4KKyAqIDxsaT4gPGVtPmk8L2VtPiBpcyB0aGUgbm9ybWFsaXplZCA8ZW0+SW5mZWN0aW91czwvZW0+IHBvcHVsYXRpb248L2xpPgorICogPGxpPiZtdTsgaXMgdGhlIGJhY2tncm91bmQgbW9ydGFsaXR5IHJhdGUsIGFuZCwgYmVjYXVzZSBpdCBpcyBhc3N1bWVkIHRoYXQKKyAqIHRoZSBwb3B1bGF0aW9uIHdhcyBub3QgZ3Jvd2luZyBvciBzaHJpbmtpbmcgc2lnbmlmaWNhbnRseSBiZWZvcmUgdGhlIG9uc2V0IG9mCisgKiB0aGUgZGlzZWFzZSwgJm11OyBpcyBhbHNvIGFzc3VtZWQgdG8gYmUgdGhlIGJpcnRoIHJhdGUuIDwvbGk+CisgKiA8bGk+IDxlbT4mYmV0YTs8L2VtPiBpcyB0aGUgZGlzZWFzZSB0cmFuc21pc3Npb24gKGluZmVjdGlvbikgcmF0ZS4gVGhpcworICogY29lZmZpY2llbnQgZGV0ZXJtaW5lcyB0aGUgbnVtYmVyIG9mIHBvcHVsYXRpb24gbWVtYmVycyB0aGF0IGJlY29tZQorICogaW5mZWN0ZWQvZXhwb3NlZCBwZXIgcG9wdWxhdGlvbiBtZW1iZXIgaW4gdGhlIDxlbT5JbmZlY3Rpb3VzPC9lbT4gc3RhdGUsCisgKiBhc3N1bWluZyB0aGUgZW50aXJlIHBvcHVsYXRpb24gaXMgaW4gdGhlIDxlbT5TdXNjZXB0aWJsZTwvZW0+IHN0YXRlLiA8L2xpPgorICogPGxpPiAmc2lnbWE7IGlzIHRoZSA8ZW0+SW5mZWN0aW91czwvZW0+IHJlY292ZXJ5IHJhdGUuIFRoaXMgY29lZmZpY2llbnQKKyAqIGRldGVybWluZXMgdGhlIHJhdGUgYXQgd2hpY2ggPGVtPkluZmVjdGlvdXM8L2VtPiBwb3B1bGF0aW9uIG1lbWJlcnMKKyAqIDxlbT5SZWNvdmVyPC9lbT4uIEluIHRoaXMgbW9kZWwgPGVtPnJlY292ZXJ5PC9lbT4gbWVhbnMgYmVjb21pbmcKKyAqIDxlbT5TdXNjZXB0aWJsZTwvZW0+IGFnYWluLjwvbGk+CisgKiA8L3VsPgorICogPC9wPgorICogPHA+CisgKiBJbiB0aGUgZmlyc3QgZXF1YXRpb24sIHRoZSA8ZW0+U3VzY2VwdGlibGU8L2VtPiBwb3B1bGF0aW9uIGluY3JlYXNlcyB3aGVuCisgKiBuZXcgbWVtYmVycyBhcmUgYm9ybi4gVGhpcyB2YWx1ZSBpcyB0aGUgYmlydGggcmF0ZSAmbXU7IG11bHRpcGxpZWQgYnkgdGhlCisgKiB0b3RhbCBwb3B1bGF0aW9uLCB3aGljaCwgYmVjYXVzZSB0aGUgdmFsdWVzIGFyZSBub3JtYWxpemVkLCBpcyAxLiBJdCBhbHNvCisgKiBpbmNyZWFzZXMgZHVlIHRvIDxlbT5JbmZlY3Rpb3VzPC9lbT4gcG9wdWxhdGlvbiBtZW1iZXJzIHJlY292ZXJpbmcuIFRoZQorICogPGVtPlN1c2NlcHRpYmxlPC9lbT4gcG9wdWxhdGlvbiBkZWNyZWFzZXMgYnkgbWVtYmVycyB3aG8gZGllLiBUaGF0IHZhbHVlIGlzCisgKiAmbXU7LCB0aGUgbW9ydGFsaXR5IHJhdGUsIG11bHRpcGxpZWQgYnkgdGhlIDxlbT5TdXNjZXB0aWJsZTwvZW0+CisgKiBwb3B1bGF0aW9uLCA8ZW0+czwvZW0+LiBUaGUgPGVtPlN1c2NlcHRpYmxlPC9lbT4gcG9wdWxhdGlvbiBhbHNvCisgKiBkZWNyZWFzZXMgYnkgaGF2aW5nIG1lbWJlcnMgYmVjb21lIDxlbT5pbmZlY3RlZDwvZW0+LiBUaGUgcHJvZHVjdCBvZgorICogPGVtPiZiZXRhOzwvZW0+IGFuZCA8ZW0+aTwvZW0+IGdpdmVzIHRoZSBub3JtYWxpemVkIG51bWJlciBvZgorICogPGVtPlN1c2NlcHRpYmxlPC9lbT4gcG9wdWxhdGlvbiBtZW1iZXJzIHRoYXQgd291bGQgYmVjb21lIGluZmVjdGVkIGZvciBlYWNoCisgKiA8ZW0+SW5mZWN0aW91czwvZW0+IHBvcHVsYXRpb24gbWVtYmVyIGFzc3VtaW5nIGFsbCBwb3B1bGF0aW9uIG1lbWJlcnMgYXJlCisgKiBpbiB0aGUgPGVtPlN1c2NlcHRpYmxlPC9lbT4gc3RhdGUuIE11bHRpcGx5aW5nIHRoYXQgYnkgPGVtPnM8L2VtPiwgdGhlCisgKiBmcmFjdGlvbiB0aGF0IGFjdHVhbGx5IGFyZSA8ZW0+U3VzY2VwdGlibGU8L2VtPiwgZ2l2ZXMgdGhlIG5vcm1hbGl6ZWQKKyAqIGFtb3VudCB0aGF0IGJlY29tZSA8ZW0+SW5mZWN0aW91czwvZW0+LgorICogPC9wPgorICogPHA+CisgKiBJbiB0aGUgc2Vjb25kIGVxdWF0aW9uLCB0aGUgPGVtPkluZmVjdGlvdXM8L2VtPiBwb3B1bGF0aW9uIGluY3JlYXNlcyBieSB0aGUKKyAqIG51bWJlciBvZiA8ZW0+U3VzY2VwdGlibGU8L2VtPiBwb3B1bGF0aW9uIG1lbWJlcnMgdGhhdCBiZWNvbWUKKyAqIDxlbT5JbmZlY3Rpb3VzPC9lbT4gKHRoZSBmaXJzdCB0ZXJtKS4gSXQgYWxzbyBkZWNyZWFzZXMgYnkgdGhlIHByb3BvcnRpb24KKyAqIHRoYXQgPGVtPlJlY292ZXI8L2VtPiBmcm9tIHRoZSBkaXNlYXNlIChtaWRkbGUgdGVybSkgYW5kIGJ5IHRoZSBwcm9wb3J0aW9uCisgKiB0aGF0IGRpZSAobGFzdCB0ZXJtKS4KKyAqIDwvcD4KKyAqIDxwPgorICogRnJlcXVlbnRseSwgYmVpbmcgaW5mZWN0ZWQgYnkgYSBkaXNlYXNlIHdpbGwgaW5jcmVhc2UgdGhlIGxpa2VsaWhvb2QgdGhhdCBhCisgKiBwb3B1bGF0aW9uIG1lbWJlciB3aWxsIGRpZS4gVGhlIG1vZGVsIGFib3ZlIG5lZWRzIHRvIGJlIGVuaGFuY2VkIHRvIGluY2x1ZGUKKyAqIHRoZSBsaWtlbGlob29kIG9mIGEgZmF0YWwgaW5mZWN0aW9uIGFuZCBhIHBvdGVudGlhbGx5IGRpZmZlcmVudCByYXRlIGF0IHdoaWNoCisgKiBpbmZlY3RlZCBtZW1iZXJzIGRpZS4KKyAqIDwvcD4KKyAqIDxwPgorICogTGV0CisgKiA8dWw+CisgKiA8bGk+PGVtPng8L2VtPiBiZSB0aGUgPGVtPkluZmVjdGlvdXMgTW9ydGFsaXR5PC9lbT4gd2hpY2ggaXMgdGhlCisgKiBwcm9wb3J0aW9uIG9mIHRoZSBwb3B1bGF0aW9uIG1lbWJlcnMgd2hvIGJlY29tZSA8ZW0+SW5mZWN0aW91czwvZW0+IHRoYXQKKyAqIHdpbGwgZXZlbnR1YWxseSBkaWUuPC9saT4KKyAqIDxsaT48ZW0+Jm11OzxzdWI+aTwvc3ViPjwvZW0+IGJlIHRoZSA8ZW0+SW5mZWN0aW91cyBNb3J0YWxpdHkgUmF0ZTwvZW0+LgorICogVGhpcyBpcyB0aGUgcmF0ZSBhdCB3aGljaCBmYXRhbGx5IGluZmVjdGVkIHBvcHVsYXRpb24gbWVtYmVycyBkaWUKKyAqIHNwZWNpZmljYWxseSBkdWUgdG8gdGhlIGRpc2Vhc2UuIDwvbGk+CisgKiA8L3VsPgorICogVGh1cywgd2Ugbm93IGhhdmUgdHdvIHR5cGVzIG9mIDxlbT5JbmZlY3Rpb3VzPC9lbT4gcG9wdWxhdGlvbiBtZW1iZXJzLAorICogdGhvc2UgdGhhdCB3aWxsIGV2ZW50dWFsbHkgcmVjb3ZlciBhdCByYXRlIDxlbT4mc2lnbWE7PC9lbT4sIGFuZCB0aG9zZQorICogdGhhdCB3aWxsIGV2ZW50dWFsbHkgZGllIGF0IHJhdGUgPGVtPiZtdTs8c3ViPmk8L3N1Yj48L2VtPiAob2YgY291cnNlLAorICogbWVtYmVycyBpbiBib3RoIHN0YXRlcyBzdGlsbCBkaWUgYXQgdGhlIGJhY2tncm91bmQgcmF0ZSA8ZW0+Jm11OzwvZW0+KS4KKyAqIDwvcD4KKyAqIDxwPgorICogTGV0CisgKiA8dWw+CisgKiA8bGk+PGVtPiBpIDxzdXA+Ujwvc3VwPjwvZW0+IGJlIHRoZSBub3JtYWxpemVkIGluZmVjdGlvdXMgcG9wdWxhdGlvbiB0aGF0CisgKiB3aWxsIHJlY292ZXIuPC9saT4KKyAqIDxsaT48ZW0+IGkgPHN1cD5GPC9zdXA+PC9lbT4gYmUgdGhlIG5vcm1hbGl6ZWQgaW5mZWN0aW91cyBwb3B1bGF0aW9uIHRoYXQKKyAqIHdpbGwgZGllIGZyb20gdGhlIGRpc2Vhc2UuPC9saT4KKyAqIDxsaT48ZW0+IGkgPSBpIDxzdXA+Ujwvc3VwPiArICBpIDxzdXA+Rjwvc3VwPjwvZW0+IGJlIHRoZSB0b3RhbCBub3JtYWxpemVkCisgKiBpbmZlY3Rpb3VzIHBvcHVsYXRpb24gKGFzIGJlZm9yZSkuPC9saT4KKyAqIDwvdWw+CisgKiA8L3A+CisgKiAKKyAqIDxwPgorICogV2UgbW9kaWZ5IG91ciBtb2RlbCB0byBpbmNsdWRlIHRoZXNlIGFkZGl0aW9uYWwgc3RhdGVzIGFuZCByYXRlcy4KKyAqIDx1bD4KKyAqIDxsaT48ZW0+JkRlbHRhO3MgPSAmbXU7ICAmbWludXM7ICZiZXRhO3MgaSArICZzaWdtYTtpIDxzdXA+Ujwvc3VwPiAgJm1pbnVzOyAmbXU7IHM8L2VtPgorICogPC9saT4KKyAqIDxsaT48ZW0+JkRlbHRhO2kgPHN1cD5SPC9zdXA+ID0gKDEteCkmYmV0YTtzIGkgJm1pbnVzOyAmc2lnbWE7aSA8c3VwPlI8L3N1cD4gICZtaW51czsgJm11O2kgPHN1cD5SPC9zdXA+PC9lbT4KKyAqIDwvbGk+CisgKiA8bGk+PGVtPiZEZWx0YTtpIDxzdXA+Rjwvc3VwPiA9IHggJmJldGE7cyBpICZtaW51czsgKCZtdTsgKyAmbXU7PHN1Yj5pPC9zdWI+KSBpIDxzdXA+Rjwvc3VwPjwvZW0+CisgKiA8L2xpPgorICogPC91bD4KKyAqIDwvcD4KKyAqIDxoMz5TcGF0aWFsIEFkYXB0YXRpb248L2gzPgorICogPHA+CisgKiBUaGUgIlNJIiBkaXNlYXNlIG1vZGVsIGNvbXB1dGF0aW9ucyBpbiBTVEVNIGVuaGFuY2UgdGhlc2UgZXF1YXRpb25zIGJ5CisgKiBhZGFwdGluZyB0aGVtIHRvIHBvcHVsYXRpb25zIHRoYXQgYXJlIHNwYXRpYWxseSBkaXN0cmlidXRlZC4gVGhpcyByZWxheGVzIHRoZQorICogYXNzdW1wdGlvbiB0aGF0IHRoZSBwb3B1bGF0aW9ucyBhcmUgYXQgYSBzaW5nbGUgbG9jYXRpb24gYW5kIG9wZW5zIHVwIHRoZQorICogcG9zc2liaWxpdHkgdGhhdCBkaWZmZXJlbnQgbG9jYXRpb25zIGNvdWxkIGhhdmUgZGlmZmVyZW50IGFyZWFzIGFuZCBudW1iZXJzCisgKiBvZiBwb3B1bGF0aW9uIG1lbWJlcnMgKGkuZS4sIGRpZmZlcmVudCBwb3B1bGF0aW9uIGRlbnNpdGllcykuIFRvIGFjY29tbW9kYXRlCisgKiB0aGlzIHNpdHVhdGlvbiBTVEVNIG1haW50YWlucyBzZXBhcmF0ZSBkaXNlYXNlIHN0YXRlIHZhbHVlcyBmb3IgZWFjaCBsb2NhdGlvbgorICogYW5kIHVzZXMgdW5ub3JtYWxpemVkIHZlcnNpb25zIG9mIHRoZSBlcXVhdGlvbnMgcHJlc2VudGVkIGFib3ZlLiBXZSBkZXZlbG9wCisgKiB0aG9zZSBiZWxvdy4KKyAqIDxwPgorICogVG8gYWNjb3VudCBmb3IgcG9wdWxhdGlvbiBkaWZmZXJlbmNlcyBhdCBkaWZmZXJlbnQgbG9jYXRpb25zLCB3ZSBkZWZpbmUgYSBuZXcKKyAqIHBhcmFtZXRlciA8ZW0+UDxzdWI+bDwvc3ViPjwvZW0+IHdoaWNoIGlzIHRoZSBudW1iZXIgb2YgcG9wdWxhdGlvbgorICogbWVtYmVycyBhdCBsb2NhdGlvbiA8ZW0+bDwvZW0+IChOb3RlOiA8ZW0+UDxzdWI+bDwvc3ViPiA9IFMgKyBJPC9lbT4pLgorICogV2UgYWxzbyBuZWVkIHRvIGFjY291bnQgZm9yIHZhcmlhYmlsaXR5IGluIHRoZSBkaXNlYXNlIHRyYW5zbWlzc2lvbgorICogKGluZmVjdGlvbikgcmF0ZSwgJmJldGE7LCBkdWUgdG8gcG90ZW50aWFsbHkgZGlmZmVyZW50IHBvcHVsYXRpb24gZGVuc2l0aWVzLgorICogVGhpcyBtb2RpZmljYXRpb24gaXMgYmFzZWQgdXBvbiB0aGUgYXNzdW1wdGlvbiB0aGF0IGxvY2F0aW9ucyB3aXRoIGdyZWF0ZXIKKyAqIHBvcHVsYXRpb24gZGVuc2l0aWVzIHdpbGwgaGF2ZSBhIGhpZ2hlciBlZmZlY3RpdmUgdHJhbnNtaXNzaW9uIHJhdGVzIHRoYW4KKyAqIGxvY2F0aW9ucyB3aXRoIGxvd2VyIGRlbnNpdGllcyAoaS5lLiwgb25lIHZhbHVlIGNhbid0IGJlIHVzZWQgZm9yIGFsbAorICogbG9jYXRpb25zKS4gVGh1cywgd2UgbmVlZCB0byByZXBsYWNlIHRoZSA8ZW0+JmJldGE7PC9lbT4gaW4gdGhlIG5vbi1zcGF0aWFsCisgKiB2ZXJzaW9ucyBvZiB0aGUgZXF1YXRpb25zIHdpdGggYSA8ZW0+JmJldGE7IDxzdWI+bDwvc3ViPjwvZW0+IHRoYXQgaXMKKyAqIHNwZWNpZmljIHRvIHRoZSBsb2NhdGlvbi4KKyAqIDwvcD4KKyAqIE1ha2luZyB0aGUgc3Vic3RpdHV0aW9uIGZvciA8ZW0+JmJldGE7PC9lbT4gYW5kIG11bHRpcGx5IGJvdGggc2lkZXMgb2YgdGhlCisgKiBlcXVhdGlvbnMgYnkgPGVtPlA8c3ViPmw8L3N1Yj48L2VtPiwgd2Ugb2J0YWluOgorICogPC9wPgorICogCisgKiA8dWw+CisgKiA8bGk+PGVtPiZEZWx0YTtzIFA8c3ViPmw8L3N1Yj49ICZtdTtQPHN1Yj5sPC9zdWI+ICAmbWludXM7ICZiZXRhOzxzdWI+bDwvc3ViPiBzIGkgUDxzdWI+bDwvc3ViPiArICZzaWdtYTsgaSA8c3VwPlI8L3N1cD5QPHN1Yj5sPC9zdWI+ICAmbWludXM7ICZtdTsgcyBQPHN1Yj5sPC9zdWI+PC9lbT4KKyAqIDwvbGk+CisgKiA8bGk+PGVtPiZEZWx0YTtpIDxzdXA+Ujwvc3VwPiBQPHN1Yj5sPC9zdWI+ID0gKDEteCkmYmV0YTs8c3ViPmw8L3N1Yj4gcyBpIFA8c3ViPmw8L3N1Yj4gJm1pbnVzOyAmc2lnbWE7IGkgPHN1cD5SPC9zdXA+IFA8c3ViPmw8L3N1Yj4gJm1pbnVzOyAmbXU7aSA8c3VwPlI8L3N1cD4gUDxzdWI+bDwvc3ViPjwvZW0+CisgKiA8L2xpPgorICogPGxpPjxlbT4mRGVsdGE7aSA8c3VwPkY8L3N1cD4gUDxzdWI+bDwvc3ViPiA9IHggJmJldGE7PHN1Yj5sPC9zdWI+cyBpIFA8c3ViPmw8L3N1Yj4gJm1pbnVzOyAoJm11OyArICZtdTs8c3ViPmk8L3N1Yj4pIGkgPHN1cD5GPC9zdXA+IFA8c3ViPmw8L3N1Yj48L2VtPgorICogPC9saT4KKyAqIDwvdWw+CisgKiAKKyAqIFdlIGNob29zZSB0aGUgdmFsdWUgZm9yIDxlbT4mYmV0YTs8c3ViPmw8L3N1Yj48L2VtPiB0byBiZSBvcmlnaW5hbAorICogPGVtPiZiZXRhOzwvZW0+IHNjYWxlZCBieSB0aGUgcmF0aW8gYmV0d2VlbiB0aGUgcG9wdWxhdGlvbiBkZW5zaXR5IGF0IHRoZQorICogbG9jYXRpb24gYW5kIHRoZSBhdmVyYWdlIHBvcHVsYXRpb24gZGVuc2l0eSBvZiBhbGwgbG9jYXRpb25zLgorICogPHVsPgorICogPGxpPiA8ZW0+ICZiZXRhOzxzdWI+bDwvc3ViPiA9ICZiZXRhOyBkPHN1Yj5sPC9zdWI+L0FQRDwvZW0+PC9saT4KKyAqIDwvdWw+CisgKiBXaGVyZSA8ZW0+ZDxzdWI+bDwvc3ViPjwvZW0+IGlzIHRoZSBwb3B1bGF0aW9uIGRlbnNpdHkgYXQgbG9jYXRpb24KKyAqIDxlbT5sPC9lbT4sIGFuZCA8ZW0+QVBEPC9lbT4gaXMgdGhlIGF2ZXJhZ2UgcG9wdWxhdGlvbiBkZW5zaXR5IGZvciBhbGwKKyAqIGxvY2F0aW9ucy4KKyAqIAorICogCisgKiAKKyAqIAorICogPHA+CisgKiBMZXQgPGVtPlM8c3ViPmw8L3N1Yj4gPSBzIFA8c3ViPmw8L3N1Yj48L2VtPiBiZSB0aGUgbnVtYmVyIG9mCisgKiA8ZW0+U3VzY2VwdGlibGU8L2VtPiBwb3B1bGF0aW9uIG1lbWJlcnMgYXQgbG9jYXRpb24gPGVtPmw8L2VtPi4gLCBsZXQKKyAqIDxlbT5JPHN1Yj5sPC9zdWI+ID0gaSBQPHN1Yj5sPC9zdWI+PC9lbT4gYmUgdGhlIG51bWJlciBvZiBwb3B1bGF0aW9uCisgKiBtZW1iZXJzIGF0IGxvY2F0aW9uIDxlbT5sPC9lbT4gdGhhdCBhcmUgPGVtPkluZmVjdGlvdXM8L2VtPiAoYm90aCBzdGF0ZXMKKyAqIGNvbWJpbmVkKS4gRm9yIHJlYWRhYmlsaXR5LCB3ZSBkcm9wIHRoZSA8ZW0+bDwvZW0+IHN1YnNjcmlwdCBhbmQKKyAqIHN1YnN0aXR1dGUuCisgKiA8L3A+CisgKiAKKyAqIAorICogPHVsPgorICogPGxpPjxlbT4mRGVsdGE7UyA9ICZtdTtQPHN1Yj5sPC9zdWI+ICAmbWludXM7ICZiZXRhOzxzdWI+bDwvc3ViPiBTIGkgKyAmc2lnbWE7SSA8c3VwPlI8L3N1cD4gICZtaW51czsgJm11OyBTPC9lbT4KKyAqIDwvbGk+CisgKiA8bGk+PGVtPiZEZWx0YTtJIDxzdXA+Ujwvc3VwPiA9ICgxLXgpJmJldGE7PHN1Yj5sPC9zdWI+IFMgaSAmbWludXM7ICZzaWdtYTtJIDxzdXA+Ujwvc3VwPiAmbWludXM7ICZtdTtJIDxzdXA+Ujwvc3VwPiA8L2VtPgorICogPC9saT4KKyAqIDxsaT48ZW0+JkRlbHRhO0kgPHN1cD5GPC9zdXA+ID0geCAmYmV0YTs8c3ViPmw8L3N1Yj5TIGkgICZtaW51czsgKCZtdTsgKyAmbXU7PHN1Yj5pPC9zdWI+KSBJIDxzdXA+Rjwvc3VwPiA8L2VtPgorICogPC9saT4KKyAqIDwvdWw+CisgKiAKKyAqIENvbnRpbnVpbmcgd2l0aCA8ZW0+IGkgPSBJL1A8c3ViPmw8L3N1Yj48L2VtPiwgd2UgaGF2ZToKKyAqIDx1bD4KKyAqIDxsaT48ZW0+JkRlbHRhO1MgPSAmbXU7UDxzdWI+bDwvc3ViPiAgJm1pbnVzOyAoJmJldGE7PHN1Yj5sPC9zdWI+L1A8c3ViPmw8L3N1Yj4pIFMgSSArICZzaWdtYTtJIDxzdXA+Ujwvc3VwPiAgJm1pbnVzOyAmbXU7IFM8L2VtPgorICogPC9saT4KKyAqIDxsaT48ZW0+JkRlbHRhO0kgPHN1cD5SPC9zdXA+ID0gKDEteCkoJmJldGE7PHN1Yj5sPC9zdWI+L1A8c3ViPmw8L3N1Yj4pIFMgSSAmbWludXM7ICZzaWdtYTtJIDxzdXA+Ujwvc3VwPiAgJm1pbnVzOyAmbXU7SSA8c3VwPlI8L3N1cD4gPC9lbT4KKyAqIDwvbGk+CisgKiA8bGk+PGVtPiZEZWx0YTtJIDxzdXA+Rjwvc3VwPiA9IHggKCZiZXRhOzxzdWI+bDwvc3ViPi9QPHN1Yj5sPC9zdWI+KSBTIEkgICZtaW51czsgKCZtdTsgKyAmbXU7PHN1Yj5pPC9zdWI+KSBJIDxzdXA+Rjwvc3VwPiA8L2VtPgorICogPC9saT4KKyAqIDwvdWw+CisgKiAKKyAqIExldHRpbmcKKyAqIDxlbT4mYmV0YTs8c3VwPio8L3N1cD4gPSAmYmV0YTs8c3ViPmw8L3N1Yj4vUDxzdWI+bDwvc3ViPiA9ICZiZXRhOyAoZDxzdWI+bDwvc3ViPi8oQVBEICogUDxzdWI+bDwvc3ViPikpCisgKiA8L2VtPgorICogZ2l2ZXM6CisgKiAKKyAqIDx1bD4KKyAqIDxsaT48ZW0+JkRlbHRhO1MgPSAmbXU7UDxzdWI+bDwvc3ViPiAgJm1pbnVzOyAmYmV0YTs8c3VwPio8L3N1cD4gUyBJICsgJnNpZ21hO0kgPHN1cD5SPC9zdXA+ICAmbWludXM7ICZtdTsgUzwvZW0+CisgKiA8L2xpPgorICogPGxpPjxlbT4mRGVsdGE7SSA8c3VwPlI8L3N1cD4gPSAoMS14KSZiZXRhOzxzdXA+Kjwvc3VwPiBTIEkgJm1pbnVzOyAmc2lnbWE7SSA8c3VwPlI8L3N1cD4gICZtaW51czsgJm11O0kgPHN1cD5SPC9zdXA+IDwvZW0+CisgKiA8L2xpPgorICogPGxpPjxlbT4mRGVsdGE7SSA8c3VwPkY8L3N1cD4gPSB4ICZiZXRhOzxzdXA+Kjwvc3VwPiBTIEkgICZtaW51czsgKCZtdTsgKyAmbXU7PHN1Yj5pPC9zdWI+KSBJIDxzdXA+Rjwvc3VwPiA8L2VtPgorICogPC9saT4KKyAqIDwvdWw+CisgKiAKKyAqIDxwPgorICogQ29tcHV0aW5nIDxlbT4mYmV0YTs8c3VwPio8L3N1cD48L2VtPiBpcyBzdHJhaWdodGZvcndhcmQuIExldAorICogPGVtPlRTRjxzdWI+bDwvc3ViPiA9IChkPHN1Yj5sPC9zdWI+LyhBUEQgKiBQPHN1Yj5sPC9zdWI+KTwvZW0+IGJlCisgKiB0aGUgPGVtPnRyYW5zbWlzc2lvbiBzY2FsZSBmYWN0b3I8L2VtPiBhdCBsb2NhdGlvbiA8ZW0+bDwvZW0+LgorICogPC9wPgorICogPHA+CisgKiBUaHVzCisgKiA8dWw+CisgKiA8bGk+PGVtPiZiZXRhOzxzdXA+Kjwvc3VwPiA9ICZiZXRhOyBUU0Y8c3ViPmw8L3N1Yj48L2VtPjwvbGk+CisgKiA8L3VsPgorICogPC9wPgorICogPHA+CisgKiBTdWJzdGl0dXRpbmcgPGVtPlA8c3ViPmw8L3N1Yj4gPSBTICsgSTwvZW0+LCA8ZW0+QVBEID0gUC9BcmVhPC9lbT4gYW5kCisgKiA8ZW0+ZDxzdWI+bDwvc3ViPiA9IChTK0kpL0FyZWE8c3ViPmw8L3N1Yj48L2VtPiwgd2hlcmUgPGVtPlA8L2VtPiBpcworICogdGhlIHRvdGFsIHBvcHVsYXRpb24gZm9yIGFsbCBsb2NhdGlvbnMsIDxlbT5BcmVhPHN1Yj5sPC9zdWI+PC9lbT4gaXMgdGhlCisgKiBhcmVhIG9mIGxvY2F0aW9uIDxlbT5sPC9lbT4sIGFuZCA8ZW0+QXJlYTwvZW0+IGlzIHRoZSB0b3RhbCBhcmVhIG9mIGFsbAorICogbG9jYXRpb25zLCB3ZSBnZXQ6CisgKiA8dWw+CisgKiA8bGk+PGVtPlRTRjxzdWI+bDwvc3ViPiA9ICgoUytJKS9BcmVhPHN1Yj5sPC9zdWI+KSAvIChQL0FyZWEgKiAgICAoUytJKSk8L2VtPjwvbGk+CisgKiA8bGk+PGVtPlRTRjxzdWI+bDwvc3ViPiA9ICgxL0FyZWE8c3ViPmw8L3N1Yj4pIC8gKFAvQXJlYSApPC9lbT48L2xpPgorICogPGxpPjxlbT5UU0Y8c3ViPmw8L3N1Yj4gPSBBcmVhIC8gKFAgKkFyZWE8c3ViPmw8L3N1Yj4gKTwvZW0+PC9saT4KKyAqIDxsaT48ZW0+VFNGPHN1Yj5sPC9zdWI+ID0gKDEgLyBQKSogKEFyZWEvQXJlYTxzdWI+bDwvc3ViPiApPC9lbT48L2xpPgorICogPC91bD4KKyAqIFNvIHRoZSA8ZW0+VFNGPHN1Yj5sPC9zdWI+PC9lbT4gaXMgdGhlIHByb2R1Y3Qgb2YgdGhlIHJlY2lwcm9jYWwgb2YgdGhlCisgKiB0b3RhbCBwb3B1bGF0aW9uIG9mIGFsbCBsb2NhdGlvbnMgYW5kIHRoZSBjb25zdGFudCByYXRpbyBiZXR3ZWVuIHRoZSBhcmVhIG9mCisgKiB0aGUgbG9jYXRpb24gYW5kIHRoZSB0b3RhbCBhcmVhIG9mIGFsbCBsb2NhdGlvbnMuIFRoZSBmb3JtZXIgY2FuIGJlIGNvbXB1dGVkCisgKiBieSBhY2N1bXVsYXRpbmcgdGhlIHBvcHVsYXRpb24gb2YgYWxsIGxvY2F0aW9ucyBhcyB0aGV5IGFyZSBnZW5lcmF0ZWQgYW5kIHRoZQorICogbGF0ZXIgcmF0aW8gY2FuIGJlIGNvbXB1dGVkIG9uY2UgYXQgdGhlIHN0YXJ0IG9mIHRoZSBzaW11bGF0aW9uLgorICogPC9wPgorICogCisgKiA8aDM+TmVpZ2hib3JpbmcgSW5mZWN0aW91cyBQb3B1bGF0aW9uczwvaDM+CisgKiA8cD4KKyAqIFRoZSBleHRlbnNpb24gb2YgdGhlIG5vbi1zcGF0aWFsIG1vZGVsIGludG8gYSBzcGF0aWFsIG9uZSBpbiBTVEVNIGFsc28gbmVlZHMKKyAqIHRvIGFjY291bnQgZm9yIGluZmVjdGlvdXMgcG9wdWxhdGlvbiBtZW1iZXJzIHRoYXQgcmVzaWRlIGluIGEgbG9jYXRpb24ncworICogIm5laWdoYm9ycyIuIENvbnNpZGVyIGEgbG9jYXRpb24gd2l0aCBubyBpbmZlY3Rpb25zIHRoYXQgaXMgcGh5c2ljYWxseQorICogYWRqYWNlbnQgdG8gc2V2ZXJhbCBsb2NhdGlvbnMgdGhhdCBoYXZlIGxhcmdlIGluZmVjdGlvdXMgcG9wdWxhdGlvbnMuIFRoaXMKKyAqIHBoeXNpY2FsIGFkamFjZW5jeSB3b3VsZCBuYXR1cmFsbHkgbGVhZCB0byBwb3B1bGF0aW9uLXRvLXBvcHVsYXRpb24gY29udGFjdAorICogYW5kIGV2ZW50dWFsbHkgdG8gZGlzZWFzZSB0cmFuc21pc3Npb24uIFdlIG5lZWQgdG8gZnVydGhlciBleHRlbmQgdGhlCisgKiBlcXVhdGlvbnMgd2UgYXJlIGhlcmUgdG8gaW5jb3Jwb3JhdGUgdGhpcyBhc3BlY3Qgb2YgYSBzcGF0aWFsbHkgZGlzdHJpYnV0ZWQKKyAqIHBvcHVsYXRpb24uCisgKiA8L3A+CisgKiA8cD4KKyAqIEluIFNURU0sIGEgbG9jYXRpb24gaGFzIGFub3RoZXIgbG9jYXRpb24gYXMgYSBuZWlnaGJvciA8ZW0+UmVsYXRpb25zaGlwPC9lbT4KKyAqIHRoYXQgbGlua3MgaXQgdG8gdGhhdCBsb2NhdGlvbi4gSWYgdGhlIDxlbT5SZWxhdGlvbnNoaXA8L2VtPiByZXByZXNlbnRzIHRoZQorICogZXhjaGFuZ2Ugb2Ygb2YgcG9wdWxhdGlvbiBtZW1iZXJzIChpLmUuLCBzb21lIGtpbmQgb2YKKyAqIHtAbGluayBUcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbCB0cmFuc3BvcnRhdGlvbiByZWxhdGlvbnNoaXB9IGxpa2UgcGF0aHdheXMsCisgKiByb2FkcyBvciBhaXIgdHJhdmVsKSB0aGVuIGl0IHdvdWxkIGJlIHBvc3NpYmxlIGZvciA8ZW0+SW5mZWN0aW91czwvZW0+CisgKiBwb3B1bGF0aW9uIG1lbWJlcnMgZnJvbSBhIG5laWdoYm9yIHRvICJ2aXNpdCIgYSBsb2NhdGlvbi4gV2UgbmVlZCB0byBhY2NvdW50CisgKiBmb3IgdGhpcyBwb3RlbnRpYWwgYnkgaW5jcmVhc2luZyB0aGUgImVmZmVjdGl2ZSIgPGVtPkluZmVjdGlvdXM8L2VtPgorICogcG9wdWxhdGlvbiBhdCBhIGxvY2F0aW9uIHdoZW4gZG9pbmcgb3VyIGNvbXB1dGF0aW9ucy4gRWFjaCBSZWxhdGlvbnNoaXAgaGFzIGEKKyAqIHJhdGUgYXQgd2hpY2ggcG9wdWxhdGlvbiBtZW1iZXJzIHRyYXZlbCBmcm9tIG9uZSBsb2NhdGlvbiB0byBhbm90aGVyLiBJdCBpcworICogYXNzdW1lZCB0aGF0IHRoZSB2aXNpdG9ycyB3b3VsZCBoYXZlIHRoZSBzYW1lIGxldmVsIG9mICJpbmZlY3Rpb3VzIGNvbnRhY3QiCisgKiBhcyBhbiBpbmZlY3Rpb3VzIG1lbWJlciBvZiB0aGUgcG9wdWxhdGlvbiBhdCB0aGUgY3VycmVudCBsb2NhdGlvbiAoaS5lLiwgdGhhdAorICogdGhleSBjb3VsZCBjb3VsZCBiZSBjb3VudGVkIGFzIGFuIGluZmVjdGlvdXMgbWVtYmVyIG9mIHRoZSBwb3B1bGF0aW9uIGF0IHRoZQorICogY3VycmVudCBsb2NhdGlvbikuCisgKiA8L3A+CisgKiA8cD4KKyAqIFRoZSBlcXVhdGlvbnMgYmVjb21lOgorICogPC9wPgorICogPHVsPgorICogPGxpPjxlbT4mRGVsdGE7UyA9ICZtdTtQPHN1Yj5sPC9zdWI+ICAmbWludXM7ICZiZXRhOzxzdXA+Kjwvc3VwPiBTIChJICsgSTxzdWI+bmVpZ2hib3I8L3N1Yj4oKSApICsgJnNpZ21hO0kgPHN1cD5SPC9zdXA+ICAmbWludXM7ICZtdTsgUzwvZW0+CisgKiA8L2xpPgorICogPGxpPjxlbT4mRGVsdGE7SSA8c3VwPlI8L3N1cD4gPSAoMS14KSZiZXRhOzxzdXA+Kjwvc3VwPiBTIChJICsgSTxzdWI+bmVpZ2hib3I8L3N1Yj4oKSApICZtaW51czsgJnNpZ21hO0kgPHN1cD5SPC9zdXA+ICAmbWludXM7ICZtdTtJIDxzdXA+Ujwvc3VwPiA8L2VtPgorICogPC9saT4KKyAqIDxsaT48ZW0+JkRlbHRhO0kgPHN1cD5GPC9zdXA+ID0geCAmYmV0YTs8c3VwPio8L3N1cD4gUyAoSSArIEk8c3ViPm5laWdoYm9yPC9zdWI+KCkgKSAgJm1pbnVzOyAoJm11OyArICZtdTs8c3ViPmk8L3N1Yj4pIEkgPHN1cD5GPC9zdXA+IDwvZW0+CisgKiA8L2xpPgorICogPC91bD4KKyAqIDwvcD4KKyAqIDxwPgorICogV2hlcmUKKyAqIDx1bD4KKyAqIDxsaT4KKyAqIDxlbT5JPHN1Yj5uZWlnaGJvcjwvc3ViPigpID0gJnN1bTsgPHN1Yj5tPC9zdWI+ICAgSSA8c3ViPm08L3N1Yj50cmFuc3BvcnQobSkvUDxzdWI+bTwvc3ViPjwvZW0+CisgKiBpcyB0aGUgbnVtYmVyIG9mIDxlbT5JbmZlY3Rpb3VzPC9lbT4gdmlzaXRvcnMgZnJvbSBuZWlnaGJvciA8ZW0+bTwvZW0+LjwvbGk+CisgKiA8bGk+dHJhbnNwb3J0KG0pID0gdGhlIHRoZSBudW1iZXIgb2YgcG9wdWxhdGlvbiBtZW1iZXJzIGFyZSB0cmFuc3BvcnRlZCBmcm9tCisgKiBuZWlnaGJvciA8ZW0+bTwvZW0+PC9saT4KKyAqIDxsaT5QPHN1Yj5tPC9zdWI+IGlzIHRoZSBudW1iZXIgb2YgcG9wdWxhdGlvbiBtZW1iZXJzIGF0IG5laWdoYm9yCisgKiA8ZW0+bTwvZW0+PC9saT4KKyAqIDxsaT5JPHN1Yj5tPC9zdWI+IGlzIHRoZSBudW1iZXIgb2YgPGVtPkluZmVjdGlvdXM8L2VtPiBwb3B1bGF0aW9uCisgKiBtZW1iZXJzIGF0IG5laWdoYm9yIDxlbT5tPC9lbT48L2xpPgorICogPC91bD4KKyAqIDwvcD4KKyAqIDxwPgorICogU3BlY2lmaWMgc3RhdGlzdGljcyBvbiB0aGUgdG90YWwgbnVtYmVyIG9mIGJpcnRocywgZGVhdGhzIGFuZCBkZWF0aHMgZHVlIHRvCisgKiB0aGUgZGlzZWFzZSBjYW4gYmUgY29tcHV0ZWQgYnkgYWRkaW5nIHRoZSBhcHByb3ByaWF0ZSB0ZXJtcyBvZiB0aGUgZXF1YXRpb25zCisgKiBhYm92ZS4KKyAqIDx1bD4KKyAqIDxsaT48ZW0+Qj0gJm11OyAoUyArIEkpPC9lbT4sIGlzIHRoZSBudW1iZXIgb2YgPGVtPkJpcnRoczwvZW0+IDwvbGk+CisgKiA8bGk+PGVtPkQgPSAmbXU7IFMgKyAoJm11OyArICZtdTs8c3ViPmk8L3N1Yj4gKUk8c3VwPkY8L3N1cD4gKyAmbXU7STxzdXA+Ujwvc3VwPjwvZW0+LGlzCisgKiB0aGUgdG90YWwgbnVtYmVyIG9mIDxlbT5EZWF0aHM8L2VtPjwvbGk+CisgKiA8bGk+PGVtPkREPSAmbXU7PHN1Yj5pPC9zdWI+IEk8c3VwPkY8L3N1cD48L2VtPiwgaXMgdGhlIG51bWJlciBvZgorICogPGVtPkRpc2Vhc2UgRGVhdGhzPC9lbT4gPC9saT4KKyAqIDwvdWw+CisgKiA8L3A+CisgKiAKKyAqIEBzZWUgU0lJbXBsI2NvbXB1dGVJbmZlY3Rpb3VzTW9ydGFsaXR5UmF0ZShkb3VibGUsIGRvdWJsZSkKKyAqIEBzZWUgU0lSTGFiZWwKKyAqIEBzZWUgU0lSTGFiZWwKKyAqIEBzZWUgU0lSTGFiZWxWYWx1ZQorICogQHNlZSBTRUlSCisgKiBAc2VlIFNFSVJMYWJlbAorICogQHNlZSBTRUlSTGFiZWxWYWx1ZQorICogCisgKiBAbW9kZWwgYWJzdHJhY3Q9InRydWUiCisgKi8KK3B1YmxpYyBpbnRlcmZhY2UgU0kgZXh0ZW5kcyBTdGFuZGFyZERpc2Vhc2VNb2RlbCB7CisJLyoqCisJICogVGhpcyBpcyB0aGUgc2VnbWVudCBvZiB0aGUgdHlwZSBVUkkgdGhhdCBwcmVmaXhlcyBhbGwgb3RoZXIgc2VnbWVudHMgaW4gYQorCSAqIHN0YW5kYXJkIGRpc2Vhc2UgbW9kZWwgdHlwZSBVUkkuCisJICovCisJU3RyaW5nIFVSSV9UWVBFX1NUQU5EQVJEX1NJX0RJU0VBU0VfTU9ERUxfU0VHTUVOVCA9IFVSSV9UWVBFX1NUQU5EQVJEX0RJU0VBU0VNT0RFTF9TRUdNRU5UCisJCQkrICIvc2kiOworCisJLyoqCisJICogVGhpcyBpcyB0aGUgcHJvcG9ydGlvbiB3aGljaCA8ZW0+SW5mZWN0aW91czwvZW0+IHBvcHVsYXRpb24KKwkgKiBtZW1iZXJzIGRpZSBwZXIgdGltZSBwZXJpb2QuIFRoaXMgaXMgPGVtPiZtdTs8c3ViPmk8L3N1Yj48L2VtPi4KKwkgKiAKKwkgKiBAcmV0dXJuIHRoZSBpbmNyZWFzZWQgcmF0ZSBhdCB3aGljaCBpbmZlY3RlZCBwb3B1bGF0aW9uIG1lbWJlcnMgdGhhdCBkaWUgcGVyCisJICogICAgICAgICB0aW1lIHBlcmlvZC4KKwkgKiBAc2VlIERpc2Vhc2VNb2RlbCNnZXRCYWNrZ3JvdW5kTW9ydGFsaXR5UmF0ZSgpCisJICogQG1vZGVsIGRlZmF1bHQ9IjAuMCIKKwkgKi8KKwlkb3VibGUgZ2V0SW5mZWN0aW91c01vcnRhbGl0eVJhdGUoKTsKKworCS8qKgorCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TSSNnZXRJbmZlY3Rpb3VzTW9ydGFsaXR5UmF0ZSA8ZW0+SW5mZWN0aW91cyBNb3J0YWxpdHkgUmF0ZTwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPkluZmVjdGlvdXMgTW9ydGFsaXR5IFJhdGU8L2VtPicgYXR0cmlidXRlLgorCSAqIEBzZWUgI2dldEluZmVjdGlvdXNNb3J0YWxpdHlSYXRlKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJdm9pZCBzZXRJbmZlY3Rpb3VzTW9ydGFsaXR5UmF0ZShkb3VibGUgdmFsdWUpOworCisJLyoqCisJICogQ29tcHV0ZSB0aGUgaW5mZWN0aW91cyBtb3J0YWxpdHkgcmF0ZSBhZGp1c3RlZCBmb3IgYSB0aW1lIGRlbHRhCisJICogcG90ZW50aWFsbHkgZGlmZmVyZW50IGZyb20gdGhlIHRpbWUgcGVyaW9kIHNwZWNpZmllZCBmb3IgdGhlIHJhdGUuCisJICogCisJICogQHBhcmFtIHRpbWVEZWx0YQorCSAqICAgICAgICAgICAgdGhlIHRpbWUgcGVyaW9kIChtaWxsaXNlY29uZHMpIHRvIHdoaWNoIHRoZSByYXRlIGlzIHRvIGJlCisJICogICAgICAgICAgICBhZGp1c3RlZC4KKwkgKiBAcmV0dXJuIHRoZSBhZGp1c3RlZCByYXRlCisJICogCisJICogQG1vZGVsIHZvbGF0aWxlPSJ0cnVlIiB0cmFuc2llbnQ9InRydWUiIGNoYW5nZWFibGU9ImZhbHNlIgorCSAqLworCWRvdWJsZSBnZXRBZGp1c3RlZEluZmVjdGlvdXNNb3J0YWxpdHlSYXRlKGZpbmFsIGxvbmcgdGltZURlbHRhKTsKKworCS8qKgorCSAqIFRoaXMgaXMgdGhlIHByb3BvcnRpb24gb2YgcG9wdWxhdGlvbiBtZW1iZXJzIHRoYXQgYmVjb21lIGluZmVjdGVkL2V4cG9zZWQKKwkgKiBwZXIgcG9wdWxhdGlvbiBtZW1iZXIgaW4gdGhlIDxlbT5JbmZlY3Rpb3VzPC9lbT4gc3RhdGUsIGFzc3VtaW5nIHRoZQorCSAqIGVudGlyZSBwb3B1bGF0aW9uIGlzIGluIHRoZSA8ZW0+U3VzY2VwdGlibGU8L2VtPiBzdGF0ZSwgcGVyIHRpbWUKKwkgKiBwZXJpb2QuCisJICogPHA+CisJICogSW4gdGhlIHJhdGUgZXF1YXRpb24gdGhpcyBjb2VmZmljaWVudCBpcyBub3JtYWxpemUgYnkgdGhlIHJhdGlvIG9mIHRoZQorCSAqIFN1c2NlcHRpYmxlIHBvcHVsYXRpb24gdG8gdGhlIHRvdGFsIHBvcHVsYXRpb24uIFRoZSBmaW5hbCB2YWx1ZSBtYXkgYWxzbworCSAqIGJlIHJlc2NhbGVkIGJhc2VkIG9uIHZhcmlhdGlvbnMgaW4gbG9jYWwgcG9wdWxhdGlvbiBkZW5zaXR5IChhYm92ZSBvcgorCSAqIGJlbG93IGF2ZXJhZ2UpLiBUaGlzIGlzIDxlbT4mYmV0YTs8L2VtPi4KKwkgKiA8L3A+CisJICogCisJICogQHJldHVybiB0aGUgbnVtYmVyIG9mIHBvcHVsYXRpb24gbWVtYmVycyB0aGF0IGJlY29tZSBpbmZlY3RlZCBwZXIgdGltZQorCSAqICAgICAgICAgcGVyaW9kCisJICogQG1vZGVsIGRlZmF1bHQ9IjAuMCIKKwkgKi8KKwlkb3VibGUgZ2V0VHJhbnNtaXNzaW9uUmF0ZSgpOworCisJLyoqCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlNJI2dldFRyYW5zbWlzc2lvblJhdGUgPGVtPlRyYW5zbWlzc2lvbiBSYXRlPC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+VHJhbnNtaXNzaW9uIFJhdGU8L2VtPicgYXR0cmlidXRlLgorCSAqIEBzZWUgI2dldFRyYW5zbWlzc2lvblJhdGUoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwl2b2lkIHNldFRyYW5zbWlzc2lvblJhdGUoZG91YmxlIHZhbHVlKTsKKworCS8qKgorCSAqIENvbXB1dGUgdGhlIHRyYW5zbWlzc2lvbiByYXRlIGFkanVzdGVkIGZvciBhIHRpbWUgZGVsdGEgcG90ZW50aWFsbHkKKwkgKiBkaWZmZXJlbnQgZnJvbSB0aGUgdGltZSBwZXJpb2Qgc3BlY2lmaWVkIGZvciB0aGUgcmF0ZS4KKwkgKiAKKwkgKiBAcGFyYW0gdGltZURlbHRhCisJICogICAgICAgICAgICB0aGUgdGltZSBwZXJpb2QgKG1pbGxpc2Vjb25kcykgdG8gd2hpY2ggdGhlIHJhdGUgaXMgdG8gYmUKKwkgKiAgICAgICAgICAgIGFkanVzdGVkLgorCSAqIEByZXR1cm4gdGhlIGFkanVzdGVkIHJhdGUKKwkgKiAKKwkgKiBAbW9kZWwgdm9sYXRpbGU9InRydWUiIHRyYW5zaWVudD0idHJ1ZSIgY2hhbmdlYWJsZT0iZmFsc2UiCisJICovCisJZG91YmxlIGdldEFkanVzdGVkVHJhbnNtaXNzaW9uUmF0ZShmaW5hbCBsb25nIHRpbWVEZWx0YSk7CisKKwkvKioKKwkgKiBCeSBkZWZhdWx0IHRoaXMgZXhwb25lbnQgaXMgb25lICgxLjApIGFuZCB0aGUgcmF0ZSBvZiBpbmZlY3Rpb24gc2NhbGVzIGFzCisJICogdGhlIHByb2R1Y3Qgb2YgdGhlIFN1c2NlcHRpYmxlIHBvcHVsYXRpb24gYW5kIHRoZSBJbmZlY3Rpb3VzIHBvcHVsYXRpb24uCisJICogSW4gYSBub25saW5lYXIgbW9kZWwgKHdoaWNoIGNhcHR1cmVzIHNhdHVyYXRpb24gb2YgdGhlIGltbXVuZSBzeXN0ZW0gZm9yCisJICogU3VzY2VwdGlibGUgcG9wdWxhdGlvbiksIHRoZSBJbmZlY3Rpb3VzIHRlcm0gaXMgcmFpc2UgdG8gdGhpcyBwb3dlciAoPj0KKwkgKiAxLjApIFRoaXMgZXhwb25lbnQgc2hvdWxkIG5ldmVyIGJlIGxlc3MgdGhhbiBvbmUgKHRoYXQgd291bGQgaW1wbHkKKwkgKiBTdXNjZXB0aWJsZSBwb3B1bGF0aW9uIHdvdWxkIGJlY29tZSBsZXNzIHN1c2NlcHRpYmxlIGFzIHRoZWlyIHByb2JhYmlsaXR5CisJICogb2YgZXhwb3N1cmUgaW5jcmVhc2VzLgorCSAqIAorCSAqIEByZXR1cm4gdGhlIG5vbi1saW5lYXJpdHkgY29lZmZpY2llbnQKKwkgKiBAbW9kZWwgZGVmYXVsdD0iMS4wIgorCSAqLworCWRvdWJsZSBnZXROb25MaW5lYXJpdHlDb2VmZmljaWVudCgpOworCisJLyoqCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlNJI2dldE5vbkxpbmVhcml0eUNvZWZmaWNpZW50IDxlbT5Ob24gTGluZWFyaXR5IENvZWZmaWNpZW50PC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+Tm9uIExpbmVhcml0eSBDb2VmZmljaWVudDwvZW0+JyBhdHRyaWJ1dGUuCisJICogQHNlZSAjZ2V0Tm9uTGluZWFyaXR5Q29lZmZpY2llbnQoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwl2b2lkIHNldE5vbkxpbmVhcml0eUNvZWZmaWNpZW50KGRvdWJsZSB2YWx1ZSk7CisKKwkvKioKKwkgKiBUaGlzIGNvZWZmaWNpZW50IGRldGVybWluZXMgdGhlIG51bWJlciBvZiBwb3B1bGF0aW9uIG1lbWJlcnMgdGhhdCByZWNvdmVyCisJICogZnJvbSB0aGUgZGlzZWFzZSBwZXIgcG9wdWxhdGlvbiBtZW1iZXIgaW4gdGhlIDxlbT5JbmZlY3Rpb3VzPC9lbT4KKwkgKiBzdGF0ZS4gVGhpcyBpcyA8ZW0+JnNpZ21hOzwvZW0+LgorCSAqIAorCSAqIEByZXR1cm4gdGhlIG51bWJlciBvZiBwb3B1bGF0aW9uIG1lbWJlcnMgdGhhdCByZWNvdmVyIHBlciB0aW1lIHBlcmlvZAorCSAqIEBtb2RlbCBkZWZhdWx0PSIwLjAiCisJICovCisJZG91YmxlIGdldFJlY292ZXJ5UmF0ZSgpOworCisJLyoqCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlNJI2dldFJlY292ZXJ5UmF0ZSA8ZW0+UmVjb3ZlcnkgUmF0ZTwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPlJlY292ZXJ5IFJhdGU8L2VtPicgYXR0cmlidXRlLgorCSAqIEBzZWUgI2dldFJlY292ZXJ5UmF0ZSgpCisJICogQGdlbmVyYXRlZAorCSAqLworCXZvaWQgc2V0UmVjb3ZlcnlSYXRlKGRvdWJsZSB2YWx1ZSk7CisKKwkvKioKKwkgKiBDb21wdXRlIHRoZSByZWNvdmVyeSByYXRlIGFkanVzdGVkIGZvciBhIHRpbWUgZGVsdGEgcG90ZW50aWFsbHkgZGlmZmVyZW50CisJICogZnJvbSB0aGUgdGltZSBwZXJpb2Qgc3BlY2lmaWVkIGZvciB0aGUgcmF0ZS4KKwkgKiAKKwkgKiBAcGFyYW0gdGltZURlbHRhCisJICogICAgICAgICAgICB0aGUgdGltZSBwZXJpb2QgKG1pbGxpc2Vjb25kcykgdG8gd2hpY2ggdGhlIHJhdGUgaXMgdG8gYmUKKwkgKiAgICAgICAgICAgIGFkanVzdGVkLgorCSAqIEByZXR1cm4gdGhlIGFkanVzdGVkIHJhdGUKKwkgKiAKKwkgKiBAbW9kZWwgdm9sYXRpbGU9InRydWUiIHRyYW5zaWVudD0idHJ1ZSIgY2hhbmdlYWJsZT0iZmFsc2UiCisJICovCisJZG91YmxlIGdldEFkanVzdGVkUmVjb3ZlcnlSYXRlKGZpbmFsIGxvbmcgdGltZURlbHRhKTsKKworCQorCS8qKgorCSAqIFRoaXMgcGFyYW1ldGVyIGFkanVzdCB0aGUgc3RyZW5ndGggb2YgbWl4aW5nIG9mIHBlb3BsZSBiZXR3ZWVuCisJICogYWRqYWNlbnQgbm9kZXMgPGNvZGU+Tm9kZTwvY29kZT5zIHRoYXQgYXJlIGNvbm5lY3RlZCBieSBvbmUgb3IgbW9yZSByb2Fkcy4KKwkgKiBFeGNoYW5nZSBvZiBwb3B1bGF0aW9uIG1lbWJlcnMgYnkgdGhlIHJvYWQgbmV0d29yayBjYW4gYWRkIG9yLCBvciBhdWdtZW50LCBtaXhpbmcKKwkgKiBiYXNlZCBvbiAgcGh5c2ljYWwgYWRqYWNlbmN5IGJhc2VkIG9uIHRoZSByZWxhdGl2ZSBzdHJlbmd0aCBvZiB0aGVzZSBpbmRlcGVuZGVudAorCSAqIG1peGluZyBwcm9wb3J0aW9ucy4gVHdvIDxjb2RlPk5vZGU8L2NvZGU+cyB0aGF0IGFyZSBjb25uZWN0ZWQgYnkgb25lIG9yIG1vcmUgcm9hZHMgZXhjaGFuZ2UgcG9wdWxhdGlvbiBtZW1iZXJzCisJICogYnkgcm9hZCB0cmFuc3BvcnQuIFRoaXMgaXMgdGhlIHRoZSBwcm9wb3J0aW9uIGV4Y2hhbmdlZCBQRVIgUk9BRC4KKwkgKiBBbiByb2FkIHRyYW5zcG9ydCBlZGdlIG1heSByZXByZXNlbnQgbXVsdGlwbGUgcm9hZHMgaW4gd2hpY2ggY2FzZSB0aGUgdmFsdWUgcmV0dXJuZWQKKwkgKiBpcyBzY2FsZWQgKG11bHRpcGxpZWQpIGJ5IHRoZSBudW1iZXIgb2Ygcm9hZHMgZW5jb2RlZCBieSB0aGF0IGVkZ2UuCisJICogVGhpcyBwcm9kdWN0IGlzIHRoZW4gdGhlIHByb3BvcnRpb24gb2YgdGhlIGluZmVjdGlvdXMgcG9wdWxhdGlvbiBtZW1iZXJzIGluIGFueSBhZGphY2VudCA8Y29kZT5Ob2RlPC9jb2RlPgorCSAqIHRvIGluY2x1ZGUgaW4gdGhlIGNvbXB1dGF0aW9ucyBvZiBhbm90aGVyIDxjb2RlPk5vZGU8L2NvZGU+LgorCSAqIAorCSAqIEByZXR1cm4gdGhlIHByb3BvcnRpb24gb2YgdGhlIGluZmVjdGlvdXMgcG9wdWxhdGlvbiBpbiBwaHlzaWNhbGx5CisJICogICAgICAgICBhZGphY2VudCA8Y29kZT5Ob2RlPC9jb2RlPnMgdGhhdCBjb250cmlidXRlIHRvIHRoZSBlZmZlY3RpdmUKKwkgKiAgICAgICAgIGluZmVjdGlvdXMgcG9wdWxhdGlvbiBhdCB0aGUgY3VycmVudCA8Y29kZT5Ob2RlPC9jb2RlPi4KKwkgKiBAbW9kZWwgZGVmYXVsdD0iMC4wMSIKKwkgKi8KKwlkb3VibGUgZ2V0Um9hZE5ldHdvcmtJbmZlY3Rpb3VzUHJvcG9ydGlvbigpOworCisKK30gLy8gU0kKZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvc3RhbmRhcmQvU0lJbmZlY3Rvci5qYXZhIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9zdGFuZGFyZC9TSUluZmVjdG9yLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGY4NDY1NwotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvc3RhbmRhcmQvU0lJbmZlY3Rvci5qYXZhCkBAIC0wLDAgKzEsNTkgQEAKKy8vIFNJSW5mZWN0b3IuamF2YQorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQ7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioKKyAqIFRoaXMgaW50ZXJmYWNlIGRlZmluZXMgYSBjbGFzcyBpbiBhbiBFTUYgbW9kZWwgZm9yIHRoZSBpbml0aWFsaXphdGlvbiBvZiBhbgorICogaW5mZWN0aW91cyBwb3B1bGF0aW9uIGluIGEgU3RhbmRhcmQgZGlzZWFzZSBtb2RlbC4KKyAqIAorICogVGhlIGluZmVjdG9yIHJlbW92ZXMgcG9wdWxhdGlvbiBtZW1iZXJzIGZyb20gdGhlIDxlbT5TdXNjZXB0aWJsZTwvZW0+IHN0YXRlCisgKiB0byB0aGUgPGVtPkluZmVjdGlvdXM8L2VtPiBzdGF0ZSBhdCBhdCBwYXJ0aWN1bGFyIG5vZGUuCisgKiAKKyAqIEBtb2RlbAorICovCitwdWJsaWMgaW50ZXJmYWNlIFNJSW5mZWN0b3IgZXh0ZW5kcyBTdGFuZGFyZEluZmVjdG9yIHsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPkluZmVjdGlvdXMgQ291bnQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyA8Y29kZT4iMSI8L2NvZGU+LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPHA+CisJICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+SW5mZWN0aW91cyBDb3VudDwvZW0+JyBhdHRyaWJ1dGUgaXNuJ3QgY2xlYXIsCisJICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLgorCSAqIDwvcD4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5JbmZlY3Rpb3VzIENvdW50PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiBAc2VlICNzZXRJbmZlY3Rpb3VzQ291bnQoZG91YmxlKQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkUGFja2FnZSNnZXRTSUluZmVjdG9yX0luZmVjdGlvdXNDb3VudCgpCisJICogQG1vZGVsIGRlZmF1bHQ9IjEiCisJICogQGdlbmVyYXRlZAorCSAqLworCWRvdWJsZSBnZXRJbmZlY3Rpb3VzQ291bnQoKTsKKworCS8qKgorCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TSUluZmVjdG9yI2dldEluZmVjdGlvdXNDb3VudCA8ZW0+SW5mZWN0aW91cyBDb3VudDwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+SW5mZWN0aW91cyBDb3VudDwvZW0+JyBhdHRyaWJ1dGUuCisJICogQHNlZSAjZ2V0SW5mZWN0aW91c0NvdW50KCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJdm9pZCBzZXRJbmZlY3Rpb3VzQ291bnQoZG91YmxlIHZhbHVlKTsKKworCS8qKgorCSAqIFRoaXMgaXMgdGhlIHNlZ21lbnQgb2YgdGhlIHR5cGUgVVJJIHRoYXQgcHJlZml4ZXMgYWxsIG90aGVyIHNlZ21lbnRzIGluIGEKKwkgKiBzdGFuZGFyZCBpbmZlY3RvciB0eXBlIFVSSS4KKwkgKi8KKwlTdHJpbmcgVVJJX1RZUEVfU0lfSU5GRUNUT1JfU0VHTUVOVCA9IFVSSV9UWVBFX1NUQU5EQVJEX0lORkVDVE9SX1NFR01FTlQKKwkJCSsgIi9zaSI7Cit9IC8vIFNJSW5mZWN0b3IKZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvc3RhbmRhcmQvU0lMYWJlbC5qYXZhIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9zdGFuZGFyZC9TSUxhYmVsLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjczMDM1NAotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvc3RhbmRhcmQvU0lMYWJlbC5qYXZhCkBAIC0wLDAgKzEsMjEgQEAKKy8qKg0KKyAqIDxjb3B5cmlnaHQ+DQorICogPC9jb3B5cmlnaHQ+DQorICoNCisgKiAkSWQkDQorICovDQorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQ7DQorDQorDQorLyoqDQorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisgKiBBIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5TSSBMYWJlbDwvYj48L2VtPicuDQorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorICoNCisgKg0KKyAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkUGFja2FnZSNnZXRTSUxhYmVsKCkNCisgKiBAbW9kZWwNCisgKiBAZ2VuZXJhdGVkDQorICovDQorcHVibGljIGludGVyZmFjZSBTSUxhYmVsIGV4dGVuZHMgU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbCB7DQorfSAvLyBTSUxhYmVsDQpkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9zdGFuZGFyZC9TSUxhYmVsVmFsdWUuamF2YSBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvc3RhbmRhcmQvU0lMYWJlbFZhbHVlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjJhZGZiNgotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvc3RhbmRhcmQvU0lMYWJlbFZhbHVlLmphdmEKQEAgLTAsMCArMSw2NiBAQAorLy8gU0lMYWJlbFZhbHVlLmphdmEKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA2LCAyMDA3LCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqCisgKiBUaGlzIGludGVyZmFjZSBkZWZpbmVzIGEgY2xhc3MgaW4gYW4gRU1GIG1vZGVsIGZvciBhbiBTSSBkaXNlYXNlIG1vZGVsIGxhYmVsCisgKiB2YWx1ZS4gVGhlIHZhbHVlcyBvZiB0aGlzIGxhYmVsIHJlY29yZCB0aGUgbnVtYmVyIG9mIHBvcHVsYXRpb24gbWVtYmVycyB3aG8KKyAqIGFyZSBpbiBvbmUgb2YgdHdvIHN0YXRlcyB3aXRoIHJlc3BlY3QgdG8gYSBwYXJ0aWN1bGFyIGRpc2Vhc2UuCisgKiA8dWw+CisgKiA8bGk+PGVtPlN1c2NlcHRpYmxlPC9lbT4gd2hpY2ggbWVhbnMgdGhhdCB0aGV5IGFyZSBub3QgaW5mZWN0ZWQgYnkgdGhlCisgKiBkaXNlYXNlLCBidXQgdGhleSBjYW4gYmVjb21lIGluZmVjdGVkIGJ5IHRoZSBkaXNlYXNlLjwvbGk+CisgKiA8bGk+PGVtPkluZmVjdGlvdXM8L2VtPiB3aGljaCBtZWFucyB0aGF0IHBvcHVsYXRpb24gbWVtYmVycyBhcmUgaW5mZWN0ZWQKKyAqIHdpdGggdGhlIGRpc2Vhc2UgYW5kIHRoZXkgY2FuIGluZmVjdCBvdGhlcnMuIDwvbGk+CisgKiA8L3VsPgorICogPHA+CisgKiBTdWItY2xhc3NlcyBjb3VsZCBpbnRyb2R1Y2UgYWRkaXRpb25hbCBzdGF0ZXMgaW4gd2hpY2ggcG9wdWxhdGlvbiBtZW1iZXJzCisgKiBjb3VsZCBleGlzdC4KKyAqIDwvcD4KKyAqIAorICogQHNlZSBTSVIKKyAqIEBzZWUgU0lSTGFiZWwKKyAqIEBzZWUgU0VJUgorICogQHNlZSBTRUlSTGFiZWwKKyAqIEBzZWUgU0VJUkxhYmVsVmFsdWUKKyAqIAorICogQG1vZGVsCisgKi8KK3B1YmxpYyBpbnRlcmZhY2UgU0lMYWJlbFZhbHVlIGV4dGVuZHMgU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbFZhbHVlIHsKKworCS8qKgorCSAqIEByZXR1cm4gdGhlIG51bWJlciBvZiBwb3B1bGF0aW9uIG1lbWJlcnMgaW4gdGhlIDxlbT5JbmZlY3Rpb3VzPC9lbT4KKwkgKiAgICAgICAgIHN0YXRlLgorCSAqIEBtb2RlbAorCSAqLworCWRvdWJsZSBnZXRJKCk7CisJCisJLyoqCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlNJTGFiZWxWYWx1ZSNnZXRJIDxlbT5JPC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5JPC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiBAc2VlICNnZXRJKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJdm9pZCBzZXRJKGRvdWJsZSB2YWx1ZSk7CisKKwkvKioKKwkgKiBAcmV0dXJuIHRoZSBpbmNpZGVuY2UgLSB3aGljaCBpcyB0aGUgIm5ldyBpbmZlY3Rpb3VzIiBvciAibmV3IGV4cG9zZWQiIG51bWJlciB0aGF0IGNvbWVzIGZyb20KKwkgKiB0aGUgaW50ZXJhY3Rpb24gdGVybSBpbiBhbnkgZGlzZWFzZSBtb2RlbC4gVGhpcyBjb3JyZXNwb25kcyB0byB0aGUgY291bnQgb2YgYWN0dWFsIG5ldyBkaXNlYXNlCisJICogcmVwb3J0cyBpbiByZWFsIHB1YmxpYyBoZWFsdGggc3VydmVpbGxhbmNlIHN0YXRpc3RpY3MuCisJICogQHNlZSAjZ2V0SSgpCisJICoKKwkgKi8KKwlkb3VibGUgZ2V0SW5jaWRlbmNlKCk7CisKK30gLy8gU0lMYWJlbFZhbHVlCmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3N0YW5kYXJkL1NJUi5qYXZhIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9zdGFuZGFyZC9TSVIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNTgwNjkzCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9zdGFuZGFyZC9TSVIuamF2YQpAQCAtMCwwICsxLDI0NyBAQAorLy8gU0lSLmphdmEKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5VUkk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLlNURU1VUkk7CisKKy8qKgorICogQSB7QGxpbmsgRGlzZWFzZU1vZGVsfSB3aXRoIHRocmVlIHN0YXRlcyA8ZW0+U3VzY2VwdGlibGU8L2VtPiwKKyAqIDxlbT5JbmZlY3Rpb3VzPC9lbT4gYW5kIDxlbT5SZWNvdmVyZWQ8L2VtPihTSVIpLgorICogCisgKiA8cD4KKyAqIFRoZSBiYXNpYyA8ZW0+U0lSPC9lbT4gKFN1c2NlcHRpYmxlLCBJbmZlY3Rpb3VzLCBSZWNvdmVyZWQpIGRpc2Vhc2UgbW9kZWwKKyAqIGFzc3VtZXMgYSB1bmlmb3JtIHBvcHVsYXRpb24gYXQgYSBzaW5nbGUgbG9jYXRpb24gYW5kIHRoYXQgdGhlIHBvcHVsYXRpb24KKyAqIG1lbWJlcnMgYXJlIHdlbGwgIm1peGVkIiwgbWVhbmluZyB0aGF0IHRoZXkgYXJlIGVxdWFsbHkgbGlrZWx5IHRvIG1lZXQgYW5kCisgKiBpbmZlY3QgZWFjaCBvdGhlci4gVGhpcyBtb2RlbCwgZm9yIGEgbm9ybWFsaXplZCBwb3B1bGF0aW9uLCBpcyBkZWZpbmVkIGJ5IHRoZQorICogdGhyZWUgZXF1YXRpb25zIGJlbG93OgorICogPHVsPgorICogPGxpPjxlbT4mRGVsdGE7cyA9ICZtdTsgICZtaW51czsgJmJldGE7cyBpICsgJmdhbW1hO3IgJm1pbnVzOyAmbXU7czwvZW0+CisgKiA8L2xpPgorICogPGxpPjxlbT4mRGVsdGE7aSA9ICZiZXRhO3MgaSAmbWludXM7ICZzaWdtYTtpICAmbWludXM7ICZtdTtpPC9lbT4gPC9saT4KKyAqIDxsaT48ZW0+JkRlbHRhO3IgPSAgICZzaWdtYTtpICZtaW51czsgJmdhbW1hO3IgJm1pbnVzOyAmbXU7cjwvZW0+IDwvbGk+CisgKiA8L3VsPgorICogCisgKiAKKyAqIDxwPgorICogV2hlcmU6CisgKiA8dWw+CisgKiA8bGk+PGVtPnM8L2VtPiBpcyB0aGUgbm9ybWFsaXplZCA8ZW0+U3VzY2VwdGlibGU8L2VtPiBwb3B1bGF0aW9uIDwvbGk+CisgKiA8bGk+IDxlbT5pPC9lbT4gaXMgdGhlIG5vcm1hbGl6ZWQgPGVtPkluZmVjdGlvdXM8L2VtPiBwb3B1bGF0aW9uPC9saT4KKyAqIDxsaT4mbXU7IGlzIHRoZSBiYWNrZ3JvdW5kIG1vcnRhbGl0eSByYXRlLCBhbmQsIGJlY2F1c2UgaXQgaXMgYXNzdW1lZCB0aGF0CisgKiB0aGUgcG9wdWxhdGlvbiB3YXMgbm90IGdyb3dpbmcgb3Igc2hyaW5raW5nIHNpZ25pZmljYW50bHkgYmVmb3JlIHRoZSBvbnNldCBvZgorICogdGhlIGRpc2Vhc2UsICZtdTsgaXMgYWxzbyBhc3N1bWVkIHRvIGJlIHRoZSBiaXJ0aCByYXRlLiA8L2xpPgorICogPGxpPiA8ZW0+JmJldGE7PC9lbT4gaXMgdGhlIGRpc2Vhc2UgdHJhbnNtaXNzaW9uIChpbmZlY3Rpb24pIHJhdGUuIFRoaXMKKyAqIGNvZWZmaWNpZW50IGRldGVybWluZXMgdGhlIG51bWJlciBvZiBwb3B1bGF0aW9uIG1lbWJlcnMgdGhhdCBiZWNvbWUKKyAqIGluZmVjdGVkL2V4cG9zZWQgcGVyIHBvcHVsYXRpb24gbWVtYmVyIGluIHRoZSA8ZW0+SW5mZWN0aW91czwvZW0+IHN0YXRlLAorICogYXNzdW1pbmcgdGhlIGVudGlyZSBwb3B1bGF0aW9uIGlzIGluIHRoZSA8ZW0+U3VzY2VwdGlibGU8L2VtPiBzdGF0ZS4gPC9saT4KKyAqIDxsaT4gJnNpZ21hOyBpcyB0aGUgPGVtPkluZmVjdGlvdXM8L2VtPiByZWNvdmVyeSByYXRlLiBUaGlzIGNvZWZmaWNpZW50CisgKiBkZXRlcm1pbmVzIHRoZSByYXRlIGF0IHdoaWNoIDxlbT5JbmZlY3Rpb3VzPC9lbT4gcG9wdWxhdGlvbiBtZW1iZXJzCisgKiA8ZW0+UmVjb3ZlcjwvZW0+LjwvbGk+CisgKiA8bGk+PGVtPiZnYW1tYTs8L2VtPiBpcyB0aGUgaW1tdW5pdHkgbG9zcyByYXRlLiBUaGlzIGNvZWZmaWNpZW50CisgKiBkZXRlcm1pbmVzIHRoZSByYXRlIGF0IHdoaWNoIDxlbT5SZWNvdmVyZWQ8L2VtPiBwb3B1bGF0aW9uIG1lbWJlcnMgbG9zZQorICogdGhlaXIgaW1tdW5pdHkgdG8gdGhlIGRpc2Vhc2UgYW5kIGJlY29tZSA8ZW0+U3VzY2VwdGlibGU8L2VtPiBhZ2Fpbi48L2xpPgorICogPC91bD4KKyAqIDwvcD4KKyAqIEZvbGxvd2luZyBiYXNpY2FsbHkgdGhlIHNhbWUgZGVyaXZhdGlvbiBhcyBvdXRsaW5lZCBpbiB7QGxpbmsgU0l9IGZvciB0aGUgU0kKKyAqIG1vZGVsLCB0aGVzZSBiZWNvbWU6CisgKiAKKyAqIDxwPgorICogTGV0CisgKiA8dWw+CisgKiA8bGk+PGVtPng8L2VtPiBiZSB0aGUgPGVtPkluZmVjdGlvdXMgTW9ydGFsaXR5PC9lbT4gd2hpY2ggaXMgdGhlCisgKiBwcm9wb3J0aW9uIG9mIHRoZSBwb3B1bGF0aW9uIG1lbWJlcnMgd2hvIGJlY29tZSA8ZW0+SW5mZWN0aW91czwvZW0+IHRoYXQKKyAqIHdpbGwgZXZlbnR1YWxseSBkaWUuPC9saT4KKyAqIDxsaT48ZW0+Jm11OzxzdWI+aTwvc3ViPjwvZW0+IGJlIHRoZSA8ZW0+SW5mZWN0aW91cyBNb3J0YWxpdHkgUmF0ZTwvZW0+LgorICogVGhpcyBpcyB0aGUgcmF0ZSBhdCB3aGljaCBmYXRhbGx5IGluZmVjdGVkIHBvcHVsYXRpb24gbWVtYmVycyBkaWUKKyAqIHNwZWNpZmljYWxseSBkdWUgdG8gdGhlIGRpc2Vhc2UuIDwvbGk+CisgKiA8L3VsPgorICogVGh1cywgd2Ugbm93IGhhdmUgdHdvIHR5cGVzIG9mIDxlbT5JbmZlY3Rpb3VzPC9lbT4gcG9wdWxhdGlvbiBtZW1iZXJzLAorICogdGhvc2UgdGhhdCB3aWxsIGV2ZW50dWFsbHkgcmVjb3ZlciBhdCByYXRlIDxlbT4mc2lnbWE7PC9lbT4sIGFuZCB0aG9zZSB0aGF0CisgKiB3aWxsIGV2ZW50dWFsbHkgZGllIGF0IHJhdGUgPGVtPiZtdTs8c3ViPmk8L3N1Yj48L2VtPiAob2YgY291cnNlLCBtZW1iZXJzCisgKiBpbiBhbGwgdGhyZWUgc3RhdGVzIHN0aWxsIGRpZSBhdCB0aGUgYmFja2dyb3VuZCByYXRlIDxlbT4mbXU7PC9lbT4pLgorICogPC9wPgorICogPHA+CisgKiBMZXQKKyAqIDx1bD4KKyAqIDxsaT48ZW0+IGkgPHN1cD5SPC9zdXA+PC9lbT4gYmUgdGhlIG5vcm1hbGl6ZWQgaW5mZWN0aW91cyBwb3B1bGF0aW9uIHRoYXQKKyAqIHdpbGwgcmVjb3Zlci48L2xpPgorICogPGxpPjxlbT4gaSA8c3VwPkY8L3N1cD48L2VtPiBiZSB0aGUgbm9ybWFsaXplZCBpbmZlY3Rpb3VzIHBvcHVsYXRpb24gdGhhdAorICogd2lsbCBkaWUgZnJvbSB0aGUgZGlzZWFzZS48L2xpPgorICogPGxpPjxlbT4gaSA9IGkgPHN1cD5SPC9zdXA+ICsgIGkgPHN1cD5GPC9zdXA+PC9lbT4gYmUgdGhlIHRvdGFsIG5vcm1hbGl6ZWQKKyAqIGluZmVjdGlvdXMgcG9wdWxhdGlvbiAoYXMgYmVmb3JlKS48L2xpPgorICogPC91bD4KKyAqIDwvcD4KKyAqIAorICogPHA+CisgKiBXZSBtb2RpZnkgb3VyIG1vZGVsIHRvIGluY2x1ZGUgdGhlc2UgYWRkaXRpb25hbCBzdGF0ZXMgYW5kIHJhdGVzLgorICogPHVsPgorICogPGxpPjxlbT4mRGVsdGE7cyA9ICZtdTsgICZtaW51czsgJmJldGE7cyBpICsgJmdhbW1hO3IgICZtaW51czsgJm11OyBzPC9lbT4KKyAqIDwvbGk+CisgKiA8bGk+PGVtPiZEZWx0YTtpIDxzdXA+Ujwvc3VwPiA9ICgxLXgpJmJldGE7cyBpICZtaW51czsgJnNpZ21hO2kgPHN1cD5SPC9zdXA+ICAmbWludXM7ICZtdTtpIDxzdXA+Ujwvc3VwPjwvZW0+CisgKiA8L2xpPgorICogPGxpPjxlbT4mRGVsdGE7aSA8c3VwPkY8L3N1cD4gPSB4ICZiZXRhO3MgaSAmbWludXM7ICgmbXU7ICsgJm11OzxzdWI+aTwvc3ViPikgaSA8c3VwPkY8L3N1cD48L2VtPgorICogPC9saT4KKyAqIDxsaT48ZW0+JkRlbHRhO3IgPSAgICZzaWdtYTtpPHN1cD5SPC9zdXA+ICZtaW51czsgJmdhbW1hO3IgJm1pbnVzOyAmbXU7cjwvZW0+CisgKiA8L2xpPgorICogCisgKiA8L3VsPgorICogPC9wPgorICogPGgzPlNwYXRpYWwgQWRhcHRhdGlvbjwvaDM+CisgKiA8cD4KKyAqIDx1bD4KKyAqIDxsaT48ZW0+JkRlbHRhO3MgUDxzdWI+bDwvc3ViPj0gJm11O1A8c3ViPmw8L3N1Yj4gICZtaW51czsgJmJldGE7PHN1Yj5sPC9zdWI+IHMgaSBQPHN1Yj5sPC9zdWI+ICsgJmdhbW1hOyByIFA8c3ViPmw8L3N1Yj4gICZtaW51czsgJm11OyBzIFA8c3ViPmw8L3N1Yj48L2VtPgorICogPC9saT4KKyAqIDxsaT48ZW0+JkRlbHRhO2kgPHN1cD5SPC9zdXA+IFA8c3ViPmw8L3N1Yj4gPSAoMS14KSZiZXRhOzxzdWI+bDwvc3ViPiBzIGkgUDxzdWI+bDwvc3ViPiAmbWludXM7ICZzaWdtYTsgaSA8c3VwPlI8L3N1cD4gUDxzdWI+bDwvc3ViPiAmbWludXM7ICZtdTtpIDxzdXA+Ujwvc3VwPiBQPHN1Yj5sPC9zdWI+PC9lbT4KKyAqIDwvbGk+CisgKiA8bGk+PGVtPiZEZWx0YTtpIDxzdXA+Rjwvc3VwPiBQPHN1Yj5sPC9zdWI+ID0geCAmYmV0YTs8c3ViPmw8L3N1Yj5zIGkgUDxzdWI+bDwvc3ViPiAmbWludXM7ICgmbXU7ICsgJm11OzxzdWI+aTwvc3ViPikgaSA8c3VwPkY8L3N1cD4gUDxzdWI+bDwvc3ViPjwvZW0+CisgKiA8L2xpPgorICogPGxpPjxlbT4mRGVsdGE7ciBQPHN1Yj5sPC9zdWI+PSAgICZzaWdtYTtpPHN1cD5SPC9zdXA+UDxzdWI+bDwvc3ViPiAmbWludXM7ICZnYW1tYTtyIFA8c3ViPmw8L3N1Yj4mbWludXM7ICZtdTtyIFA8c3ViPmw8L3N1Yj48L2VtPgorICogPC9saT4KKyAqIDwvdWw+CisgKiAKKyAqIDxwPgorICogTGV0IDxlbT5TPHN1Yj5sPC9zdWI+ID0gcyBQPHN1Yj5sPC9zdWI+PC9lbT4gYmUgdGhlIG51bWJlciBvZgorICogPGVtPlN1c2NlcHRpYmxlPC9lbT4gcG9wdWxhdGlvbiBtZW1iZXJzIGF0IGxvY2F0aW9uIDxlbT5sPC9lbT4uCisgKiBTaW1pbGFybHksIGxldCA8ZW0+STxzdWI+bDwvc3ViPiA9IGkgUDxzdWI+bDwvc3ViPjwvZW0+IGJlIHRoZSBudW1iZXIKKyAqIG9mIHBvcHVsYXRpb24gbWVtYmVycyBhdCBsb2NhdGlvbiA8ZW0+bDwvZW0+IHRoYXQgYXJlIDxlbT5JbmZlY3Rpb3VzPC9lbT4KKyAqIChib3RoIHN0YXRlcyBjb21iaW5lZCksIGFuZCBsZXQKKyAqIDxlbT5yIFA8c3ViPmw8L3N1Yj4gYmUgdGhlIDxlbT5SZWNvdmVyZWQ8L2VtPiBwb3B1bGF0aW9uLgorICogRm9yIHJlYWRhYmlsaXR5LCB3ZSBkcm9wIHRoZSA8ZW0+bDwvZW0+IHN1YnNjcmlwdCBhbmQgc3Vic3RpdHV0ZS4KKyAqIDwvcD4KKyAqIFN1YnN0aXR1dGluZworICogIAorICogPC9wPgorICogPHVsPgorICogPGxpPjxlbT4mRGVsdGE7UyA9ICZtdTtQPHN1Yj5sPC9zdWI+ICAmbWludXM7ICZiZXRhOzxzdWI+bDwvc3ViPiBTIGkgKyAmZ2FtbWE7UiAgJm1pbnVzOyAmbXU7IFM8L2VtPgorICogPC9saT4KKyAqIDxsaT48ZW0+JkRlbHRhO0kgPHN1cD5SPC9zdXA+ID0gKDEteCkmYmV0YTs8c3ViPmw8L3N1Yj4gUyBpICZtaW51czsgJnNpZ21hO0kgPHN1cD5SPC9zdXA+ICZtaW51czsgJm11O0kgPHN1cD5SPC9zdXA+IDwvZW0+CisgKiA8L2xpPgorICogPGxpPjxlbT4mRGVsdGE7SSA8c3VwPkY8L3N1cD4gPSB4ICZiZXRhOzxzdWI+bDwvc3ViPlMgaSAgJm1pbnVzOyAoJm11OyArICZtdTs8c3ViPmk8L3N1Yj4pIEkgPHN1cD5GPC9zdXA+IDwvZW0+CisgKiA8L2xpPgorICogIDxsaT48ZW0+JkRlbHRhO1I9ICAgJnNpZ21hO0k8c3VwPlI8L3N1cD4gJm1pbnVzOyAmZ2FtbWE7UiAmbWludXM7ICZtdTtSPC9lbT4gPC9saT4KKyAqIDwvdWw+CisgKiAKKyAqICAgQ29udGludWluZyB3aXRoIDxlbT4gaSA9IEkvUDxzdWI+bDwvc3ViPjwvZW0+LCB3ZSBoYXZlOgorICogPHVsPgorICogPGxpPjxlbT4mRGVsdGE7UyA9ICZtdTtQPHN1Yj5sPC9zdWI+ICAmbWludXM7ICgmYmV0YTs8c3ViPmw8L3N1Yj4vUDxzdWI+bDwvc3ViPikgUyBJICsgJmdhbW1hO1IgICZtaW51czsgJm11OyBTPC9lbT4KKyAqIDwvbGk+CisgKiA8bGk+PGVtPiZEZWx0YTtJIDxzdXA+Ujwvc3VwPiA9ICgxLXgpKCZiZXRhOzxzdWI+bDwvc3ViPi9QPHN1Yj5sPC9zdWI+KSBTIEkgJm1pbnVzOyAmc2lnbWE7SSA8c3VwPlI8L3N1cD4gICZtaW51czsgJm11O0kgPHN1cD5SPC9zdXA+IDwvZW0+CisgKiA8L2xpPgorICogPGxpPjxlbT4mRGVsdGE7SSA8c3VwPkY8L3N1cD4gPSB4ICgmYmV0YTs8c3ViPmw8L3N1Yj4vUDxzdWI+bDwvc3ViPikgUyBJICAmbWludXM7ICgmbXU7ICsgJm11OzxzdWI+aTwvc3ViPikgSSA8c3VwPkY8L3N1cD4gPC9lbT4KKyAqIDwvbGk+CisgKiAgIDxsaT48ZW0+JkRlbHRhO1I9ICAgJnNpZ21hO0k8c3VwPlI8L3N1cD4gJm1pbnVzOyAmZ2FtbWE7UiAmbWludXM7ICZtdTtSPC9lbT4gPC9saT4KKyAqIDwvdWw+CisgKiAKKyAqIExldHRpbmcKKyAqIDxlbT4mYmV0YTs8c3VwPio8L3N1cD4gPSAmYmV0YTs8c3ViPmw8L3N1Yj4vUDxzdWI+bDwvc3ViPiA9ICZiZXRhOyAoZDxzdWI+bDwvc3ViPi8oQVBEICogUDxzdWI+bDwvc3ViPikpCisgKiA8L2VtPgorICogZ2l2ZXM6CisgKiAKKyAqIDx1bD4KKyAqIDxsaT48ZW0+JkRlbHRhO1MgPSAmbXU7UDxzdWI+bDwvc3ViPiAgJm1pbnVzOyAmYmV0YTs8c3VwPio8L3N1cD4gUyBJICsgJmdhbW1hO1IgICZtaW51czsgJm11OyBTPC9lbT4KKyAqIDwvbGk+CisgKiA8bGk+PGVtPiZEZWx0YTtJIDxzdXA+Ujwvc3VwPiA9ICgxLXgpJmJldGE7PHN1cD4qPC9zdXA+IFMgSSAmbWludXM7ICZzaWdtYTtJIDxzdXA+Ujwvc3VwPiAgJm1pbnVzOyAmbXU7SSA8c3VwPlI8L3N1cD4gPC9lbT4KKyAqIDwvbGk+CisgKiA8bGk+PGVtPiZEZWx0YTtJIDxzdXA+Rjwvc3VwPiA9IHggJmJldGE7PHN1cD4qPC9zdXA+IFMgSSAgJm1pbnVzOyAoJm11OyArICZtdTs8c3ViPmk8L3N1Yj4pIEkgPHN1cD5GPC9zdXA+IDwvZW0+CisgKiA8L2xpPgorICogICA8bGk+PGVtPiZEZWx0YTtSPSAgICZzaWdtYTtJPHN1cD5SPC9zdXA+ICZtaW51czsgJmdhbW1hO1IgJm1pbnVzOyAmbXU7UjwvZW0+IDwvbGk+CisgKiA8L3VsPgorICogVFNGCisgKiA8dWw+CisgKiA8bGk+PGVtPlRTRjxzdWI+bDwvc3ViPiA9ICgoUytJK1IpL0FyZWE8c3ViPmw8L3N1Yj4pIC8gKFAvQXJlYSAqIChTK0krUikpPC9lbT48L2xpPgorICogPGxpPjxlbT5UU0Y8c3ViPmw8L3N1Yj4gPSAoMS9BcmVhPHN1Yj5sPC9zdWI+KSAvIChQL0FyZWEgKTwvZW0+PC9saT4KKyAqIDxsaT48ZW0+VFNGPHN1Yj5sPC9zdWI+ID0gQXJlYSAvIChQICpBcmVhPHN1Yj5sPC9zdWI+ICk8L2VtPjwvbGk+CisgKiA8bGk+PGVtPlRTRjxzdWI+bDwvc3ViPiA9ICgxIC8gUCkqIChBcmVhL0FyZWE8c3ViPmw8L3N1Yj4gKTwvZW0+PC9saT4KKyAqIDwvdWw+CisgKiA8aDM+TmVpZ2hib3JpbmcgSW5mZWN0aW91cyBQb3B1bGF0aW9uczwvaDM+CisgKiA8L3A+CisgKiA8dWw+CisgKiA8bGk+PGVtPiZEZWx0YTtTID0gJm11O1A8c3ViPmw8L3N1Yj4gICZtaW51czsgJmJldGE7PHN1cD4qPC9zdXA+IFMgKEkgKyBJPHN1Yj5uZWlnaGJvcjwvc3ViPigpICkgKyAmZ2FtbWE7UiAgJm1pbnVzOyAmbXU7IFM8L2VtPgorICogPC9saT4KKyAqIDxsaT48ZW0+JkRlbHRhO0kgPHN1cD5SPC9zdXA+ID0gKDEteCkmYmV0YTs8c3VwPio8L3N1cD4gUyAoSSArIEk8c3ViPm5laWdoYm9yPC9zdWI+KCkgKSAmbWludXM7ICZzaWdtYTtJIDxzdXA+Ujwvc3VwPiAgJm1pbnVzOyAmbXU7SSA8c3VwPlI8L3N1cD4gPC9lbT4KKyAqIDwvbGk+CisgKiA8bGk+PGVtPiZEZWx0YTtJIDxzdXA+Rjwvc3VwPiA9IHggJmJldGE7PHN1cD4qPC9zdXA+IFMgKEkgKyBJPHN1Yj5uZWlnaGJvcjwvc3ViPigpICkgICZtaW51czsgKCZtdTsgKyAmbXU7PHN1Yj5pPC9zdWI+KSBJIDxzdXA+Rjwvc3VwPiA8L2VtPgorICogPC9saT4KKyAqIDxsaT48ZW0+JkRlbHRhO1I9ICAgJnNpZ21hO0k8c3VwPlI8L3N1cD4gJm1pbnVzOyAmZ2FtbWE7UiAmbWludXM7ICZtdTtSPC9lbT4gPC9saT4KKyAqIDwvdWw+CisgKiAKKyAqIFNwZWNpZmljIHN0YXRpc3RpY3Mgb24gdGhlIHRvdGFsIG51bWJlciBvZiBiaXJ0aHMsIGRlYXRocyBhbmQgZGVhdGhzIGR1ZSB0bworICogdGhlIGRpc2Vhc2UgY2FuIGJlIGNvbXB1dGVkIGJ5IGFkZGluZyB0aGUgYXBwcm9wcmlhdGUgdGVybXMgb2YgdGhlIGVxdWF0aW9ucworICogYWJvdmUuCisgKiA8dWw+CisgKiA8bGk+PGVtPkI9ICZtdTsgKFMgKyBJICsgUik8L2VtPiwgaXMgdGhlIG51bWJlciBvZiA8ZW0+QmlydGhzPC9lbT4gPC9saT4KKyAqIDxsaT48ZW0+RCA9ICZtdTsgUyArICgmbXU7ICsgJm11OzxzdWI+aTwvc3ViPiApSTxzdXA+Rjwvc3VwPiArICZtdTtJPHN1cD5SPC9zdXA+ICsgJm11O1I8L2VtPixpcworICogdGhlIHRvdGFsIG51bWJlciBvZiA8ZW0+RGVhdGhzPC9lbT48L2xpPgorICogPGxpPjxlbT5ERD0gJm11OzxzdWI+aTwvc3ViPiBJPHN1cD5GPC9zdXA+PC9lbT4sIGlzIHRoZSBudW1iZXIgb2YKKyAqIDxlbT5EaXNlYXNlIERlYXRoczwvZW0+IDwvbGk+CisgKiA8L3VsPgorICogQHNlZSBTSQorICogQHNlZSBTSVJMYWJlbAorICogQHNlZSBTSVJMYWJlbFZhbHVlCisgKiBAc2VlIFNFSVIKKyAqIEBzZWUgU0VJUkxhYmVsCisgKiBAc2VlIFNFSVJMYWJlbFZhbHVlCisgKiAKKyAqIEBtb2RlbCBhYnN0cmFjdD0idHJ1ZSIKKyAqLworcHVibGljIGludGVyZmFjZSBTSVIgZXh0ZW5kcyBTSSB7CisJLyoqCisJICogVGhpcyBpcyB0aGUgc2VnbWVudCBvZiB0aGUgdHlwZSBVUkkgdGhhdCBwcmVmaXhlcyBhbGwgb3RoZXIgc2VnbWVudHMgaW4gYQorCSAqIHN0YW5kYXJkIGRpc2Vhc2UgbW9kZWwgdHlwZSBVUkkuCisJICovCisJU3RyaW5nIFVSSV9UWVBFX1NUQU5EQVJEX1NJUl9ESVNFQVNFX01PREVMX1NFR01FTlQgPSBVUklfVFlQRV9TVEFOREFSRF9ESVNFQVNFTU9ERUxfU0VHTUVOVAorCQkJKyAiL3NpciI7CisKKwkvKioKKwkgKiBUaGUgVHlwZSBVUkkgZm9yIHRoZSBzdGFuZGFyZCBTSVIgZGlzZWFzZSBtb2RlbAorCSAqLworCVVSSSBVUklfVFlQRV9TVEFOREFSRF9TSVJfRElTRUFTRV9NT0RFTCA9IFNURU1VUkkKKwkJCS5jcmVhdGVUeXBlVVJJKFVSSV9UWVBFX1NUQU5EQVJEX1NJUl9ESVNFQVNFX01PREVMX1NFR01FTlQpOworCisJLyoqCisJICogVGhpcyBjb2VmZmljaWVudCBkZXRlcm1pbmVzIHRoZSBudW1iZXIgb2YgcG9wdWxhdGlvbiBtZW1iZXJzIHRoYXQgbG9zZQorCSAqIHRoZWlyIGltbXVuaXR5IHRvIGEgZGlzZWFzZSBhbmQgYmVjb21lIFN1c2NlcHRpYmxlIHRvIHRoZSBkaXNlYXNlIHBlcgorCSAqIHBvcHVsYXRpb24gbWVtYmVyIGluIHRoZSA8ZW0+UmVjb3ZlcmVkPC9lbT4gc3RhdGUuIEEgdmFsdWUgb2YgemVybworCSAqICgwLjApLCB0aGUgZGVmYXVsdCwgbWVhbnMgdGhlIHBvcHVsYXRpb24gbWVtYmVycyBuZXZlciBsb3NlIHRoZWlyCisJICogaW1tdW5pdHkuIFRoaXMgaXMgPGVtPiZnYW1tYTs8L2VtPi4KKwkgKiAKKwkgKiBAcmV0dXJuIHRoZSBwcm9wb3J0aW9uIG9mIDxlbT5SZWNvdmVyZWQ8L2VtPiBwb3B1bGF0aW9uIG1lbWJlcnMgdGhhdAorCSAqICAgICAgICAgbG9zZSB0aGVpciBpbW11bml0eSBwZXIgdGltZSBwZXJpb2QuCisJICogQG1vZGVsIGRlZmF1bHQ9IjAuMCIKKwkgKi8KKwlkb3VibGUgZ2V0SW1tdW5pdHlMb3NzUmF0ZSgpOworCisJLyoqCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlNJUiNnZXRJbW11bml0eUxvc3NSYXRlIDxlbT5JbW11bml0eSBMb3NzIFJhdGU8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5JbW11bml0eSBMb3NzIFJhdGU8L2VtPicgYXR0cmlidXRlLgorCSAqIEBzZWUgI2dldEltbXVuaXR5TG9zc1JhdGUoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwl2b2lkIHNldEltbXVuaXR5TG9zc1JhdGUoZG91YmxlIHZhbHVlKTsKKworCS8qKgorCSAqIENvbXB1dGUgdGhlIGltbXVuaXR5IHJhdGUgYWRqdXN0ZWQgZm9yIGEgdGltZSBkZWx0YSBwb3RlbnRpYWxseSBkaWZmZXJlbnQKKwkgKiBmcm9tIHRoZSB0aW1lIHBlcmlvZCBzcGVjaWZpZWQgZm9yIHRoZSByYXRlLgorCSAqIAorCSAqIEBwYXJhbSB0aW1lRGVsdGEKKwkgKiAgICAgICAgICAgIHRoZSB0aW1lIHBlcmlvZCAobWlsbGlzZWNvbmRzKSB0byB3aGljaCB0aGUgcmF0ZSBpcyB0byBiZQorCSAqICAgICAgICAgICAgYWRqdXN0ZWQuCisJICogQHJldHVybiB0aGUgYWRqdXN0ZWQgcmF0ZQorCSAqIAorCSAqIEBtb2RlbCB2b2xhdGlsZT0idHJ1ZSIgdHJhbnNpZW50PSJ0cnVlIiBjaGFuZ2VhYmxlPSJmYWxzZSIKKwkgKi8KKwlkb3VibGUgZ2V0QWRqdXN0ZWRJbW11bml0eUxvc3NSYXRlKGZpbmFsIGxvbmcgdGltZURlbHRhKTsKKworfSAvLyBTSVIKZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvc3RhbmRhcmQvU0lSSW5vY3VsYXRvci5qYXZhIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9zdGFuZGFyZC9TSVJJbm9jdWxhdG9yLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDgxZTNhYQotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvc3RhbmRhcmQvU0lSSW5vY3VsYXRvci5qYXZhCkBAIC0wLDAgKzEsODcgQEAKKy8vIFNJUklub2N1bGF0b3IuamF2YQorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQ7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioKKyAqIFRoaXMgaW50ZXJmYWNlIGRlZmluZXMgYSBjbGFzcyBpbiBhbiBFTUYgbW9kZWwgZm9yIHRoZSBpbml0aWFsaXphdGlvbiBvZiBhbgorICogaW5vY3VsYXRlZCBwb3B1bGF0aW9uIGluIGEgU3RhbmRhcmQgZGlzZWFzZSBtb2RlbC4KKyAqIAorICogVGhlIGlub2N1bGF0b3IgcmVtb3ZlcyBhIGZyYWN0aW9uIG9mIHRoZSBwb3B1bGF0aW9uIGZyb20gdGhlIDxlbT5TdXNjZXB0aWJsZTwvZW0+IHN0YXRlCisgKiB0byB0aGUgPGVtPlJlY292ZXJlZDwvZW0+IHN0YXRlIGF0IGF0IHBhcnRpY3VsYXIgbm9kZS4KKyAqIAorICogQG1vZGVsCisgKi8KK3B1YmxpYyBpbnRlcmZhY2UgU0lSSW5vY3VsYXRvciBleHRlbmRzIFNJSW5mZWN0b3IgeworCisJLyoqCisJICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+SW5vY3VsYXRlZCBQZXJjZW50YWdlPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogVGhlIGRlZmF1bHQgdmFsdWUgaXMgPGNvZGU+IjEiPC9jb2RlPi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDxwPgorCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPklub2N1bGF0ZWQgUGVyY2VudGFnZTwvZW0+JyBhdHRyaWJ1dGUgaXNuJ3QgY2xlYXIsCisJICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLgorCSAqIDwvcD4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5Jbm9jdWxhdGVkIFBlcmNlbnRhZ2U8L2VtPicgYXR0cmlidXRlLgorCSAqIEBzZWUgI3NldElub2N1bGF0ZWRQZXJjZW50YWdlKGRvdWJsZSkKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZFBhY2thZ2UjZ2V0U0lSSW5vY3VsYXRvcl9Jbm9jdWxhdGVkUGVyY2VudGFnZSgpCisJICogQG1vZGVsIGRlZmF1bHQ9IjEiCisJICogQGdlbmVyYXRlZAorCSAqLworCWRvdWJsZSBnZXRJbm9jdWxhdGVkUGVyY2VudGFnZSgpOworCisJLyoqCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlNJUklub2N1bGF0b3IjZ2V0SW5vY3VsYXRlZFBlcmNlbnRhZ2UgPGVtPklub2N1bGF0ZWQgUGVyY2VudGFnZTwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+SW5vY3VsYXRlZCBQZXJjZW50YWdlPC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiBAc2VlICNnZXRJbm9jdWxhdGVkUGVyY2VudGFnZSgpCisJICogQGdlbmVyYXRlZAorCSAqLworCXZvaWQgc2V0SW5vY3VsYXRlZFBlcmNlbnRhZ2UoZG91YmxlIHZhbHVlKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPklub2N1bGF0ZSBQZXJjZW50YWdlPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogVGhlIGRlZmF1bHQgdmFsdWUgaXMgPGNvZGU+InRydWUiPC9jb2RlPi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDxwPgorCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPklub2N1bGF0ZSBQZXJjZW50YWdlPC9lbT4nIGF0dHJpYnV0ZSBpc24ndCBjbGVhciwKKwkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uCisJICogPC9wPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPklub2N1bGF0ZSBQZXJjZW50YWdlPC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiBAc2VlICNzZXRJbm9jdWxhdGVQZXJjZW50YWdlKGJvb2xlYW4pCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmRQYWNrYWdlI2dldFNJUklub2N1bGF0b3JfSW5vY3VsYXRlUGVyY2VudGFnZSgpCisJICogQG1vZGVsIGRlZmF1bHQ9InRydWUiCisJICogQGdlbmVyYXRlZAorCSAqLworCWJvb2xlYW4gaXNJbm9jdWxhdGVQZXJjZW50YWdlKCk7CisKKwkvKioKKwkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU0lSSW5vY3VsYXRvciNpc0lub2N1bGF0ZVBlcmNlbnRhZ2UgPGVtPklub2N1bGF0ZSBQZXJjZW50YWdlPC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5Jbm9jdWxhdGUgUGVyY2VudGFnZTwvZW0+JyBhdHRyaWJ1dGUuCisJICogQHNlZSAjaXNJbm9jdWxhdGVQZXJjZW50YWdlKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJdm9pZCBzZXRJbm9jdWxhdGVQZXJjZW50YWdlKGJvb2xlYW4gdmFsdWUpOworCisJLyoqCisJICogVGhpcyBpcyB0aGUgc2VnbWVudCBvZiB0aGUgdHlwZSBVUkkgdGhhdCBwcmVmaXhlcyBhbGwgb3RoZXIgc2VnbWVudHMgaW4gYQorCSAqIHN0YW5kYXJkIGluZmVjdG9yIG9yIGlub2N1bGF0b3IgdHlwZSBVUkkuCisJICovCisJU3RyaW5nIFVSSV9UWVBFX1NJUl9JTkZFQ1RPUl9TRUdNRU5UID0gVVJJX1RZUEVfU1RBTkRBUkRfSU5GRUNUT1JfU0VHTUVOVAorCQkJKyAiL3NpciI7CisKK30gLy8gU0lJbm9jdWxhdG9yCmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3N0YW5kYXJkL1NJUkxhYmVsLmphdmEgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3N0YW5kYXJkL1NJUkxhYmVsLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDUzZWNjNAotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvc3RhbmRhcmQvU0lSTGFiZWwuamF2YQpAQCAtMCwwICsxLDIxIEBACisvKioNCisgKiA8Y29weXJpZ2h0Pg0KKyAqIDwvY29weXJpZ2h0Pg0KKyAqDQorICogJElkJA0KKyAqLw0KK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkOw0KKw0KKw0KKy8qKg0KKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorICogQSByZXByZXNlbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+U0lSIExhYmVsPC9iPjwvZW0+Jy4NCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisgKg0KKyAqDQorICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmRQYWNrYWdlI2dldFNJUkxhYmVsKCkNCisgKiBAbW9kZWwNCisgKiBAZ2VuZXJhdGVkDQorICovDQorcHVibGljIGludGVyZmFjZSBTSVJMYWJlbCBleHRlbmRzIFN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWwgew0KK30gLy8gU0lSTGFiZWwNCmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3N0YW5kYXJkL1NJUkxhYmVsVmFsdWUuamF2YSBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvc3RhbmRhcmQvU0lSTGFiZWxWYWx1ZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNjYWY4M2QKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3N0YW5kYXJkL1NJUkxhYmVsVmFsdWUuamF2YQpAQCAtMCwwICsxLDYxIEBACisvLyBTSVJMYWJlbFZhbHVlLmphdmEKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqCisgKiBUaGlzIGludGVyZmFjZSBkZWZpbmVzIGEgY2xhc3MgaW4gYW4gRU1GIG1vZGVsIGZvciBhbiBTSVIgZGlzZWFzZSBtb2RlbCBsYWJlbAorICogdmFsdWUuIFRoZSB2YWx1ZXMgb2YgdGhpcyBsYWJlbCByZWNvcmQgdGhlIG51bWJlciBvZiBwb3B1bGF0aW9uIG1lbWJlcnMgd2hvCisgKiBhcmUgaW4gb25lIG9mIHRocmVlIHN0YXRlcyB3aXRoIHJlc3BlY3QgdG8gYSBwYXJ0aWN1bGFyIGRpc2Vhc2UuCisgKiA8dWw+CisgKiA8bGk+PGVtPlN1c2NlcHRpYmxlPC9lbT4gd2hpY2ggbWVhbnMgdGhhdCB0aGV5IGFyZSBub3QgaW5mZWN0ZWQgYnkgdGhlCisgKiBkaXNlYXNlLCBidXQgdGhleSBjYW4gYmVjb21lIGluZmVjdGVkIGJ5IHRoZSBkaXNlYXNlLjwvbGk+CisgKiA8bGk+PGVtPkluZmVjdGlvdXM8L2VtPiB3aGljaCBtZWFucyB0aGF0IHBvcHVsYXRpb24gbWVtYmVycyBhcmUgaW5mZWN0ZWQKKyAqIHdpdGggdGhlIGRpc2Vhc2UgYW5kIHRoZXkgY2FuIGluZmVjdCBvdGhlcnMuIDwvbGk+CisgKiA8bGk+PGVtPlJlY292ZXJlZDwvZW0+IHdoaWNoIG1lYW5zIHRoYXQgcG9wdWxhdGlvbiBtZW1iZXJzIGFyZSBub3QKKyAqIGluZmVjdGVkIHdpdGggdGhlIGRpc2Vhc2UgYW5kIDxlbT5jYW5ub3Q8L2VtPiBiZWNvbWUgaW5mZWN0ZWQgYnkgdGhlCisgKiBkaXNlYXNlLiBOb3RlIHRoYXQgaW4gc29tZSBkaXNlYXNlIG1vZGVscyBhIHBvcHVsYXRpb24gbWVtYmVyIGluIHRoZQorICogPGVtPlJlY292ZXJlZDwvZW0+IHN0YXRlIGNvdWxkIHRyYW5zaXRpb24gdG8gdGhlIDxlbT5TdXNjZXB0aWJsZTwvZW0+CisgKiBzdGF0ZSBhbmQgdGhlbiBiZWNvbWUgYSBjYW5kaWRhdGUgZm9yIHJlLWluZmVjdGlvbi48L2xpPgorICogPC91bD4KKyAqIDxwPgorICogU3ViLWNsYXNzZXMgY291bGQgaW50cm9kdWNlIGFkZGl0aW9uYWwgc3RhdGVzIGluIHdoaWNoIHBvcHVsYXRpb24gbWVtYmVycworICogY291bGQgZXhpc3QuCisgKiA8L3A+CisgKiAKKyAqIEBzZWUgU0lSCisgKiBAc2VlIFNJUkxhYmVsCisgKiBAc2VlIFNFSVIKKyAqIEBzZWUgU0VJUkxhYmVsCisgKiBAc2VlIFNFSVJMYWJlbFZhbHVlCisgKiAKKyAqIEBtb2RlbAorICovCitwdWJsaWMgaW50ZXJmYWNlIFNJUkxhYmVsVmFsdWUgZXh0ZW5kcyBTSUxhYmVsVmFsdWUgeworCisJLyoqCisJICogQHJldHVybiB0aGUgbnVtYmVyIG9mIHBvcHVsYXRpb24gbWVtYmVycyBpbiB0aGUgPGVtPlJlY292ZXJlZDwvZW0+CisJICogICAgICAgICBzdGF0ZS4KKwkgKiBAbW9kZWwKKwkgKi8KKwlkb3VibGUgZ2V0UigpOworCisJLyoqCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlNJUkxhYmVsVmFsdWUjZ2V0UiA8ZW0+UjwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPlI8L2VtPicgYXR0cmlidXRlLgorCSAqIEBzZWUgI2dldFIoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwl2b2lkIHNldFIoZG91YmxlIHZhbHVlKTsKKworfSAvLyBTSVJMYWJlbFZhbHVlCmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3N0YW5kYXJkL1N0YW5kYXJkRGlzZWFzZU1vZGVsLmphdmEgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3N0YW5kYXJkL1N0YW5kYXJkRGlzZWFzZU1vZGVsLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjZmZGZhMmYKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3N0YW5kYXJkL1N0YW5kYXJkRGlzZWFzZU1vZGVsLmphdmEKQEAgLTAsMCArMSwxNDcgQEAKKy8vIFN0YW5kYXJkRGlzZWFzZU1vZGVsLmphdmEKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkOworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLkVMaXN0OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5EeW5hbWljTGFiZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLk5vZGU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLkludGVncmF0aW9uRGVjb3JhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5TVEVNVGltZTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworLyoqCisgKiBUaGlzIGludGVyZmFjZSBkZWZpbmVzIGEgY2xhc3MgaW4gYW4gRU1GIG1vZGVsIGZvciBhIFN0YW5kYXJkIGRpc2Vhc2UgbW9kZWwuCisgKiAKKyAqIEBzZWUgU0lSCisgKiBAc2VlIFNJUkxhYmVsCisgKiBAc2VlIFNJUkxhYmVsVmFsdWUKKyAqIEBzZWUgU0VJUgorICogQHNlZSBTRUlSTGFiZWwKKyAqIEBzZWUgU0VJUkxhYmVsVmFsdWUKKyAqIAorICogQG1vZGVsIGFic3RyYWN0PSJ0cnVlIgorICovCitwdWJsaWMgaW50ZXJmYWNlIFN0YW5kYXJkRGlzZWFzZU1vZGVsIGV4dGVuZHMgRGlzZWFzZU1vZGVsIHsKKworCS8qKgorCSAqIFRoaXMgaXMgdGhlIHNlZ21lbnQgb2YgdGhlIHR5cGUgVVJJIHRoYXQgcHJlZml4ZXMgYWxsIG90aGVyIHNlZ21lbnRzIGluIGEKKwkgKiBzdGFuZGFyZCBkaXNlYXNlIG1vZGVsIHR5cGUgVVJJLgorCSAqLworCVN0cmluZyBVUklfVFlQRV9TVEFOREFSRF9ESVNFQVNFTU9ERUxfU0VHTUVOVCA9IFVSSV9UWVBFX0RJU0VBU0VNT0RFTF9TRUdNRU5UCisJCQkrICIvc3RhbmRhcmQiOworCisKKworCQorCS8qKgorCSAqIAkvKioKKwkgKiBUaGUgVHJhbnNtaXNzaW9uIENvZWZmaWNpZW50IChiZXRhKSBtdXN0IGJlIHNjYWxlZCBieQorCSAqIHRoZSBsb2NhbCBwb3B1bGF0aW9uIGRlbnNpdHkgZGl2aWRlZCBieSBhIHJlZmVyZW5jZQorCSAqIHBvcHVsYXRpb24gZGVuc2l0eSAoZS5nLiB0aGUgcGFydGljdWxhciBsb2NhdGlvbiB3aGVyZSBiZXRhIGlzIGtub3cgb3Igd2FzIG1lYXN1cmVkKQorCSAqIEZvciBleGFtcGxlLCBpbiB0aGUgVVMgdGhlIGF2ZyBwb3AgZGVuc2l0eSBpcyAzMi45IHBlb3BsZSBwZXIgc3F1YXJlIGttCisJICogSW4gQ2hpbmEsIDE0MS44IHBlb3BsZSBwZXIgc3Ega20sCisJICogSW4gRXVyb3BlIDY5LjcgcGVvcGxlIHBlciBzcSBrbQorICAgICAqIFRoZSBkZWZhdWx0IHZhbHVlIGlzIDEwMCBidXQgdGhpcyBzaG91bGQgYmUgc3BlY2lmaWVkIGZvciBhbnkKKyAgICAgKiBkaXNlYXNlIGFsb25nIHdpdGggdGhlIHZhbHVlIGJldGEuIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBpbgorICAgICAqIGdldFRyYW5zbWlzc2lvblJhdGVTY2FsZUZhY3RvciBhbmQgdXNlZCB0byBjb21wdXRlVHJhbnNpb25zIG1ldGhvZCBmb3IgYSBkaXNlYWVzIG1vZGVsLgorCSAqIEByZXR1cm4gdGhlIFJlZmVyZW5jZSBQb3B1bGF0aW9uIAorCSAqIEBzZWUgI1NJSW1wbC5nZXRUcmFuc21pc3Npb25SYXRlU2NhbGVGYWN0b3IoKQorCSAqIEBzZWUgI3NldFJlZmVyZW5jZVBvcHVsYXRpb25EZW5zaXR5KGRvdWJsZSkKKwkgKiBAbW9kZWwgZGVmYXVsdD0iMTAwIgorCSAqLworCWRvdWJsZSBnZXRSZWZlcmVuY2VQb3B1bGF0aW9uRGVuc2l0eSgpOworCisJLyoqCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkRGlzZWFzZU1vZGVsI2dldFJlZmVyZW5jZVBvcHVsYXRpb25EZW5zaXR5IDxlbT5SZWZlcmVuY2UgUG9wdWxhdGlvbiBEZW5zaXR5PC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5SZWZlcmVuY2UgUG9wdWxhdGlvbiBEZW5zaXR5PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiBAc2VlICNnZXRSZWZlcmVuY2VQb3B1bGF0aW9uRGVuc2l0eSgpCisJICogQGdlbmVyYXRlZAorCSAqLworCXZvaWQgc2V0UmVmZXJlbmNlUG9wdWxhdGlvbkRlbnNpdHkoZG91YmxlIHZhbHVlKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPlJvYWQgTmV0d29yayBJbmZlY3Rpb3VzIFByb3BvcnRpb248L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyA8Y29kZT4iMC4wMSI8L2NvZGU+LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPHA+CisJICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+Um9hZCBOZXR3b3JrIEluZmVjdGlvdXMgUHJvcG9ydGlvbjwvZW0+JyBhdHRyaWJ1dGUgaXNuJ3QgY2xlYXIsCisJICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLgorCSAqIDwvcD4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5Sb2FkIE5ldHdvcmsgSW5mZWN0aW91cyBQcm9wb3J0aW9uPC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiBAc2VlICNzZXRSb2FkTmV0d29ya0luZmVjdGlvdXNQcm9wb3J0aW9uKGRvdWJsZSkKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZFBhY2thZ2UjZ2V0U3RhbmRhcmREaXNlYXNlTW9kZWxfUm9hZE5ldHdvcmtJbmZlY3Rpb3VzUHJvcG9ydGlvbigpCisJICogQG1vZGVsIGRlZmF1bHQ9IjAuMDEiCisJICogQGdlbmVyYXRlZAorCSAqLworCWRvdWJsZSBnZXRSb2FkTmV0d29ya0luZmVjdGlvdXNQcm9wb3J0aW9uKCk7CisKKwkvKioKKwkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmREaXNlYXNlTW9kZWwjZ2V0Um9hZE5ldHdvcmtJbmZlY3Rpb3VzUHJvcG9ydGlvbiA8ZW0+Um9hZCBOZXR3b3JrIEluZmVjdGlvdXMgUHJvcG9ydGlvbjwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+Um9hZCBOZXR3b3JrIEluZmVjdGlvdXMgUHJvcG9ydGlvbjwvZW0+JyBhdHRyaWJ1dGUuCisJICogQHNlZSAjZ2V0Um9hZE5ldHdvcmtJbmZlY3Rpb3VzUHJvcG9ydGlvbigpCisJICogQGdlbmVyYXRlZAorCSAqLworCXZvaWQgc2V0Um9hZE5ldHdvcmtJbmZlY3Rpb3VzUHJvcG9ydGlvbihkb3VibGUgdmFsdWUpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+Q2hhcmFjdGVyaXN0aWMgTWl4aW5nIERpc3RhbmNlPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogVGhlIGRlZmF1bHQgdmFsdWUgaXMgPGNvZGU+IjIuMjUiPC9jb2RlPi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDxwPgorCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPkNoYXJhY3RlcmlzdGljIE1peGluZyBEaXN0YW5jZTwvZW0+JyBhdHRyaWJ1dGUgaXNuJ3QgY2xlYXIsCisJICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLgorCSAqIDwvcD4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5DaGFyYWN0ZXJpc3RpYyBNaXhpbmcgRGlzdGFuY2U8L2VtPicgYXR0cmlidXRlLgorCSAqIEBzZWUgI3NldENoYXJhY3RlcmlzdGljTWl4aW5nRGlzdGFuY2UoZG91YmxlKQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkUGFja2FnZSNnZXRTdGFuZGFyZERpc2Vhc2VNb2RlbF9DaGFyYWN0ZXJpc3RpY01peGluZ0Rpc3RhbmNlKCkKKwkgKiBAbW9kZWwgZGVmYXVsdD0iMi4yNSIKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJZG91YmxlIGdldENoYXJhY3RlcmlzdGljTWl4aW5nRGlzdGFuY2UoKTsKKworCS8qKgorCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZERpc2Vhc2VNb2RlbCNnZXRDaGFyYWN0ZXJpc3RpY01peGluZ0Rpc3RhbmNlIDxlbT5DaGFyYWN0ZXJpc3RpYyBNaXhpbmcgRGlzdGFuY2U8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPkNoYXJhY3RlcmlzdGljIE1peGluZyBEaXN0YW5jZTwvZW0+JyBhdHRyaWJ1dGUuCisJICogQHNlZSAjZ2V0Q2hhcmFjdGVyaXN0aWNNaXhpbmdEaXN0YW5jZSgpCisJICogQGdlbmVyYXRlZAorCSAqLworCXZvaWQgc2V0Q2hhcmFjdGVyaXN0aWNNaXhpbmdEaXN0YW5jZShkb3VibGUgdmFsdWUpOworCisJCisJCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAbW9kZWwKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJZG91YmxlIGdldEVmZmVjdGl2ZUluZmVjdGlvdXMoTm9kZSBub2RlLCBTdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsIGRpc2Vhc2VMYWJlbCwgZG91YmxlIG9uc2l0ZUluZmVjdGlvdXMpOworCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAbW9kZWwKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJZG91YmxlIGdldE5vcm1hbGl6ZWRFZmZlY3RpdmVJbmZlY3Rpb3VzKE5vZGUgbm9kZSwgU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbCBkaXNlYXNlTGFiZWwsIGRvdWJsZSBvbnNpdGVJbmZlY3Rpb3VzKTsKKworCit9IC8vIFN0YW5kYXJkRGlzZWFzZU1vZGVsCmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3N0YW5kYXJkL1N0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWwuamF2YSBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvc3RhbmRhcmQvU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBlMTVjMGMKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3N0YW5kYXJkL1N0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWwuamF2YQpAQCAtMCwwICsxLDIyIEBACisvKioNCisgKiA8Y29weXJpZ2h0Pg0KKyAqIDwvY29weXJpZ2h0Pg0KKyAqDQorICogJElkJA0KKyAqLw0KK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkOw0KKw0KKw0KKy8qKg0KKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorICogQSByZXByZXNlbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+RGlzZWFzZSBNb2RlbCBMYWJlbDwvYj48L2VtPicuDQorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorICoNCisgKg0KKyAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkUGFja2FnZSNnZXRTdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsKCkNCisgKiBAbW9kZWwgYWJzdHJhY3Q9InRydWUiDQorICogQGdlbmVyYXRlZA0KKyAqLw0KK3B1YmxpYyBpbnRlcmZhY2UgU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbCBleHRlbmRzIERpc2Vhc2VNb2RlbExhYmVsIHsNCisNCit9IC8vIFN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWwNCmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3N0YW5kYXJkL1N0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZS5qYXZhIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9zdGFuZGFyZC9TdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsVmFsdWUuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZGYyZmMwCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9zdGFuZGFyZC9TdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsVmFsdWUuamF2YQpAQCAtMCwwICsxLDEwNSBAQAorLy8gU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbFZhbHVlLmphdmEKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqCisgKiBUaGlzIGludGVyZmFjZSBkZWZpbmVzIGEgY2xhc3MgaW4gYW4gRU1GIG1vZGVsIGZvciBhbiBTdGFuZGFyZCBkaXNlYXNlIG1vZGVsCisgKiBsYWJlbCB2YWx1ZS4gSW4gYSBzdGFuZGFyZCBkaXNlYXNlIG1vZGVsIHBvcHVsYXRpb24gbWVtYmVycyBjYW4gYmUgaW4gYQorICogc2luZ2xlIDxlbT5TdXNjZXB0aWJsZTwvZW0+IHN0YXRlLCB3aGljaCBtZWFucyB0aGF0IHRoZXkgYXJlIG5vdCBleHBvc2VkIG9yCisgKiBpbmZlY3RlZCBieSBhIGRpc2Vhc2UuIFN1Yi1jbGFzc2VzIGNvdWxkIGludHJvZHVjZSBhZGRpdGlvbmFsIHN0YXRlcyBpbiB3aGljaAorICogcG9wdWxhdGlvbiBtZW1iZXJzIGNvdWxkIGV4aXN0LgorICogCisgKiBAc2VlIFNJUgorICogQHNlZSBTSVJMYWJlbAorICogQHNlZSBTSVJMYWJlbFZhbHVlCisgKiBAc2VlIFNFSVIKKyAqIEBzZWUgU0VJUkxhYmVsCisgKiBAc2VlIFNFSVJMYWJlbFZhbHVlCisgKiAKKyAqIEBtb2RlbCBhYnN0cmFjdD0idHJ1ZSIKKyAqLworCisKK3B1YmxpYyBpbnRlcmZhY2UgU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbFZhbHVlIGV4dGVuZHMgRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZSB7CisJLyoqCisJICogQHJldHVybiB0aGUgbnVtYmVyIG9mIHBvcHVsYXRpb24gbWVtYmVycyBpbiB0aGUgPGVtPlN1c2NlcHRpYmxlPC9lbT4KKwkgKiAgICAgICAgIHN0YXRlLgorCSAqIEBtb2RlbAorCSAqLworCWRvdWJsZSBnZXRTKCk7CisKKwkvKioKKwkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbFZhbHVlI2dldFMgPGVtPlM8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPlM8L2VtPicgYXR0cmlidXRlLgorCSAqIEBzZWUgI2dldFMoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwl2b2lkIHNldFMoZG91YmxlIHZhbHVlKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPkluY2lkZW5jZTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIGlzIDxjb2RlPiIwLjAiPC9jb2RlPi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDxwPgorCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPkluY2lkZW5jZTwvZW0+JyBhdHRyaWJ1dGUgaXNuJ3QgY2xlYXIsCisJICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLgorCSAqIDwvcD4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5JbmNpZGVuY2U8L2VtPicgYXR0cmlidXRlLgorCSAqIEBzZWUgI3NldEluY2lkZW5jZShkb3VibGUpCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmRQYWNrYWdlI2dldFN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZV9JbmNpZGVuY2UoKQorCSAqIEBtb2RlbCBkZWZhdWx0PSIwLjAiCisJICogQGdlbmVyYXRlZAorCSAqLworCWRvdWJsZSBnZXRJbmNpZGVuY2UoKTsKKworCS8qKgorCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsVmFsdWUjZ2V0SW5jaWRlbmNlIDxlbT5JbmNpZGVuY2U8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPkluY2lkZW5jZTwvZW0+JyBhdHRyaWJ1dGUuCisJICogQHNlZSAjZ2V0SW5jaWRlbmNlKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJdm9pZCBzZXRJbmNpZGVuY2UoZG91YmxlIHZhbHVlKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPkRpc2Vhc2UgRGVhdGhzPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogVGhlIGRlZmF1bHQgdmFsdWUgaXMgPGNvZGU+IjAuMCI8L2NvZGU+LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPHA+CisJICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+RGlzZWFzZSBEZWF0aHM8L2VtPicgYXR0cmlidXRlIGlzbid0IGNsZWFyLAorCSAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4KKwkgKiA8L3A+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+RGlzZWFzZSBEZWF0aHM8L2VtPicgYXR0cmlidXRlLgorCSAqIEBzZWUgI3NldERpc2Vhc2VEZWF0aHMoZG91YmxlKQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkUGFja2FnZSNnZXRTdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsVmFsdWVfRGlzZWFzZURlYXRocygpCisJICogQG1vZGVsIGRlZmF1bHQ9IjAuMCIKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJZG91YmxlIGdldERpc2Vhc2VEZWF0aHMoKTsKKworCS8qKgorCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsVmFsdWUjZ2V0RGlzZWFzZURlYXRocyA8ZW0+RGlzZWFzZSBEZWF0aHM8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPkRpc2Vhc2UgRGVhdGhzPC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiBAc2VlICNnZXREaXNlYXNlRGVhdGhzKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJdm9pZCBzZXREaXNlYXNlRGVhdGhzKGRvdWJsZSB2YWx1ZSk7CisJCit9IC8vIFN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZQpkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9zdGFuZGFyZC9TdGFuZGFyZEZhY3RvcnkuamF2YSBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvc3RhbmRhcmQvU3RhbmRhcmRGYWN0b3J5LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTAyN2M4ZQotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvc3RhbmRhcmQvU3RhbmRhcmRGYWN0b3J5LmphdmEKQEAgLTAsMCArMSwyMTUgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FRmFjdG9yeTsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogVGhlIDxiPkZhY3Rvcnk8L2I+IGZvciB0aGUgbW9kZWwuCisgKiBJdCBwcm92aWRlcyBhIGNyZWF0ZSBtZXRob2QgZm9yIGVhY2ggbm9uLWFic3RyYWN0IGNsYXNzIG9mIHRoZSBtb2RlbC4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmRQYWNrYWdlCisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBpbnRlcmZhY2UgU3RhbmRhcmRGYWN0b3J5IGV4dGVuZHMgRUZhY3RvcnkgeworCS8qKgorCSAqIFRoZSBzaW5nbGV0b24gaW5zdGFuY2Ugb2YgdGhlIGZhY3RvcnkuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJU3RhbmRhcmRGYWN0b3J5IGVJTlNUQU5DRSA9IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5pbXBsLlN0YW5kYXJkRmFjdG9yeUltcGwuaW5pdCgpOworCisJLyoqCisJICogUmV0dXJucyBhIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5EZXRlcm1pbmlzdGljIFNFSVIgRGlzZWFzZSBNb2RlbDwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+RGV0ZXJtaW5pc3RpYyBTRUlSIERpc2Vhc2UgTW9kZWw8L2VtPicuCisJICogQGdlbmVyYXRlZAorCSAqLworCURldGVybWluaXN0aWNTRUlSRGlzZWFzZU1vZGVsIGNyZWF0ZURldGVybWluaXN0aWNTRUlSRGlzZWFzZU1vZGVsKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPkRldGVybWluaXN0aWMgU0kgRGlzZWFzZSBNb2RlbDwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+RGV0ZXJtaW5pc3RpYyBTSSBEaXNlYXNlIE1vZGVsPC9lbT4nLgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlEZXRlcm1pbmlzdGljU0lEaXNlYXNlTW9kZWwgY3JlYXRlRGV0ZXJtaW5pc3RpY1NJRGlzZWFzZU1vZGVsKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPkRldGVybWluaXN0aWMgU0lSIERpc2Vhc2UgTW9kZWw8L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPkRldGVybWluaXN0aWMgU0lSIERpc2Vhc2UgTW9kZWw8L2VtPicuCisJICogQGdlbmVyYXRlZAorCSAqLworCURldGVybWluaXN0aWNTSVJEaXNlYXNlTW9kZWwgY3JlYXRlRGV0ZXJtaW5pc3RpY1NJUkRpc2Vhc2VNb2RlbCgpOworCisJLyoqCisJICogUmV0dXJucyBhIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5TRUlSIExhYmVsPC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiBhIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5TRUlSIExhYmVsPC9lbT4nLgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlTRUlSTGFiZWwgY3JlYXRlU0VJUkxhYmVsKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPlNFSVIgTGFiZWwgVmFsdWU8L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPlNFSVIgTGFiZWwgVmFsdWU8L2VtPicuCisJICogQGdlbmVyYXRlZAorCSAqLworCVNFSVJMYWJlbFZhbHVlIGNyZWF0ZVNFSVJMYWJlbFZhbHVlKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPlNJIEluZmVjdG9yPC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiBhIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5TSSBJbmZlY3RvcjwvZW0+Jy4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJU0lJbmZlY3RvciBjcmVhdGVTSUluZmVjdG9yKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPlNJIExhYmVsPC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiBhIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5TSSBMYWJlbDwvZW0+Jy4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJU0lMYWJlbCBjcmVhdGVTSUxhYmVsKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPlNJIExhYmVsIFZhbHVlPC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiBhIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5TSSBMYWJlbCBWYWx1ZTwvZW0+Jy4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJU0lMYWJlbFZhbHVlIGNyZWF0ZVNJTGFiZWxWYWx1ZSgpOworCisJLyoqCisJICogUmV0dXJucyBhIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5TSVIgTGFiZWw8L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPlNJUiBMYWJlbDwvZW0+Jy4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJU0lSTGFiZWwgY3JlYXRlU0lSTGFiZWwoKTsKKworCS8qKgorCSAqIFJldHVybnMgYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+U0lSIExhYmVsIFZhbHVlPC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiBhIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5TSVIgTGFiZWwgVmFsdWU8L2VtPicuCisJICogQGdlbmVyYXRlZAorCSAqLworCVNJUkxhYmVsVmFsdWUgY3JlYXRlU0lSTGFiZWxWYWx1ZSgpOworCisJLyoqCisJICogUmV0dXJucyBhIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5TdG9jaGFzdGljIFNFSVIgRGlzZWFzZSBNb2RlbDwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+U3RvY2hhc3RpYyBTRUlSIERpc2Vhc2UgTW9kZWw8L2VtPicuCisJICogQGdlbmVyYXRlZAorCSAqLworCVN0b2NoYXN0aWNTRUlSRGlzZWFzZU1vZGVsIGNyZWF0ZVN0b2NoYXN0aWNTRUlSRGlzZWFzZU1vZGVsKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPlN0b2NoYXN0aWMgU0kgRGlzZWFzZSBNb2RlbDwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+U3RvY2hhc3RpYyBTSSBEaXNlYXNlIE1vZGVsPC9lbT4nLgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlTdG9jaGFzdGljU0lEaXNlYXNlTW9kZWwgY3JlYXRlU3RvY2hhc3RpY1NJRGlzZWFzZU1vZGVsKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPlN0b2NoYXN0aWMgU0lSIERpc2Vhc2UgTW9kZWw8L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPlN0b2NoYXN0aWMgU0lSIERpc2Vhc2UgTW9kZWw8L2VtPicuCisJICogQGdlbmVyYXRlZAorCSAqLworCVN0b2NoYXN0aWNTSVJEaXNlYXNlTW9kZWwgY3JlYXRlU3RvY2hhc3RpY1NJUkRpc2Vhc2VNb2RlbCgpOworCisJCisKKwkvKioKKwkgKiBSZXR1cm5zIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPlNJUiBJbm9jdWxhdG9yPC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiBhIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5TSVIgSW5vY3VsYXRvcjwvZW0+Jy4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJU0lSSW5vY3VsYXRvciBjcmVhdGVTSVJJbm9jdWxhdG9yKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPlN0b2NoYXN0aWMgUG9pc3NvbiBTSSBEaXNlYXNlIE1vZGVsPC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiBhIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5TdG9jaGFzdGljIFBvaXNzb24gU0kgRGlzZWFzZSBNb2RlbDwvZW0+Jy4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJU3RvY2hhc3RpY1BvaXNzb25TSURpc2Vhc2VNb2RlbCBjcmVhdGVTdG9jaGFzdGljUG9pc3NvblNJRGlzZWFzZU1vZGVsKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPlN0b2NoYXN0aWMgUG9pc3NvbiBTSVIgRGlzZWFzZSBNb2RlbDwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+U3RvY2hhc3RpYyBQb2lzc29uIFNJUiBEaXNlYXNlIE1vZGVsPC9lbT4nLgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlTdG9jaGFzdGljUG9pc3NvblNJUkRpc2Vhc2VNb2RlbCBjcmVhdGVTdG9jaGFzdGljUG9pc3NvblNJUkRpc2Vhc2VNb2RlbCgpOworCisJLyoqCisJICogUmV0dXJucyBhIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5TdG9jaGFzdGljIFBvaXNzb24gU0VJUiBEaXNlYXNlIE1vZGVsPC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiBhIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5TdG9jaGFzdGljIFBvaXNzb24gU0VJUiBEaXNlYXNlIE1vZGVsPC9lbT4nLgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlTdG9jaGFzdGljUG9pc3NvblNFSVJEaXNlYXNlTW9kZWwgY3JlYXRlU3RvY2hhc3RpY1BvaXNzb25TRUlSRGlzZWFzZU1vZGVsKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPkluZmVjdG9yIElub2N1bGF0b3IgQ29sbGVjdGlvbjwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+SW5mZWN0b3IgSW5vY3VsYXRvciBDb2xsZWN0aW9uPC9lbT4nLgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlJbmZlY3Rvcklub2N1bGF0b3JDb2xsZWN0aW9uIGNyZWF0ZUluZmVjdG9ySW5vY3VsYXRvckNvbGxlY3Rpb24oKTsKKworCS8qKgorCSAqIFJldHVybnMgYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+SW5pdGlhbGl6ZXI8L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPkluaXRpYWxpemVyPC9lbT4nLgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlJbml0aWFsaXplciBjcmVhdGVJbml0aWFsaXplcigpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgcGFja2FnZSBzdXBwb3J0ZWQgYnkgdGhpcyBmYWN0b3J5LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgcGFja2FnZSBzdXBwb3J0ZWQgYnkgdGhpcyBmYWN0b3J5LgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlTdGFuZGFyZFBhY2thZ2UgZ2V0U3RhbmRhcmRQYWNrYWdlKCk7CisKK30gLy9TdGFuZGFyZEZhY3RvcnkKZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvc3RhbmRhcmQvU3RhbmRhcmRJbmZlY3Rvci5qYXZhIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9zdGFuZGFyZC9TdGFuZGFyZEluZmVjdG9yLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWQxZmQxOAotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvc3RhbmRhcmQvU3RhbmRhcmRJbmZlY3Rvci5qYXZhCkBAIC0wLDAgKzEsMzEgQEAKKy8vIFN0YW5kYXJkSW5mZWN0b3IuamF2YQorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQ7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioKKyAqIFRoaXMgaW50ZXJmYWNlIGRlZmluZXMgYSBjbGFzcyBpbiBhbiBFTUYgbW9kZWwgZm9yIHRoZSBpbml0aWFsaXphdGlvbiBvZiBhbgorICogaW5mZWN0aW91cyBwb3B1bGF0aW9uIGluIGEgU3RhbmRhcmQgZGlzZWFzZSBtb2RlbC4KKyAqIAorICogVGhlIGluZmVjdG9yIHJlbW92ZXMgcG9wdWxhdGlvbiBtZW1iZXJzIGZyb20gdGhlIDxlbT5TdXNjZXB0aWJsZTwvZW0+IHN0YXRlCisgKiB0byB0aGUgPGVtPkluZmVjdGlvdXM8L2VtPiBzdGF0ZS4KKyAqIAorICogQG1vZGVsIGFic3RyYWN0PSJ0cnVlIgorICovCitwdWJsaWMgaW50ZXJmYWNlIFN0YW5kYXJkSW5mZWN0b3IgZXh0ZW5kcyBJbmZlY3RvciB7CisJLyoqCisJICogVGhpcyBpcyB0aGUgc2VnbWVudCBvZiB0aGUgdHlwZSBVUkkgdGhhdCBwcmVmaXhlcyBhbGwgb3RoZXIgc2VnbWVudHMgaW4gYQorCSAqIHN0YW5kYXJkIGluZmVjdG9yIHR5cGUgVVJJLgorCSAqLworCVN0cmluZyBVUklfVFlQRV9TVEFOREFSRF9JTkZFQ1RPUl9TRUdNRU5UID0gVVJJX1RZUEVfSU5GRUNUT1JfU0VHTUVOVAorCQkJKyAiL3N0YW5kYXJkIjsKK30gLy8gU3RhbmRhcmRJbmZlY3RvcgpkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9zdGFuZGFyZC9TdGFuZGFyZFBhY2thZ2UuamF2YSBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvc3RhbmRhcmQvU3RhbmRhcmRQYWNrYWdlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGY5YzU2OQotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvc3RhbmRhcmQvU3RhbmRhcmRQYWNrYWdlLmphdmEKQEAgLTAsMCArMSw3MDM2IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZDsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUF0dHJpYnV0ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FRGF0YVR5cGU7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FUmVmZXJlbmNlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5HcmFwaFBhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLk1vZGVsUGFja2FnZTsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogVGhlIDxiPlBhY2thZ2U8L2I+IGZvciB0aGUgbW9kZWwuCisgKiBJdCBjb250YWlucyBhY2Nlc3NvcnMgZm9yIHRoZSBtZXRhIG9iamVjdHMgdG8gcmVwcmVzZW50CisgKiA8dWw+CisgKiAgIDxsaT5lYWNoIGNsYXNzLDwvbGk+CisgKiAgIDxsaT5lYWNoIGZlYXR1cmUgb2YgZWFjaCBjbGFzcyw8L2xpPgorICogICA8bGk+ZWFjaCBlbnVtLDwvbGk+CisgKiAgIDxsaT5hbmQgZWFjaCBkYXRhIHR5cGU8L2xpPgorICogPC91bD4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmRGYWN0b3J5CisgKiBAbW9kZWwga2luZD0icGFja2FnZSIKKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGludGVyZmFjZSBTdGFuZGFyZFBhY2thZ2UgZXh0ZW5kcyBFUGFja2FnZSB7CisJLyoqCisJICogVGhlIHBhY2thZ2UgbmFtZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlTdHJpbmcgZU5BTUUgPSAic3RhbmRhcmQiOworCisJLyoqCisJICogVGhlIHBhY2thZ2UgbmFtZXNwYWNlIFVSSS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlTdHJpbmcgZU5TX1VSSSA9ICJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9zdGFuZGFyZC5lY29yZSI7CisKKwkvKioKKwkgKiBUaGUgcGFja2FnZSBuYW1lc3BhY2UgbmFtZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlTdHJpbmcgZU5TX1BSRUZJWCA9ICJvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQiOworCisJLyoqCisJICogVGhlIHNpbmdsZXRvbiBpbnN0YW5jZSBvZiB0aGUgcGFja2FnZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlTdGFuZGFyZFBhY2thZ2UgZUlOU1RBTkNFID0gb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLmltcGwuU3RhbmRhcmRQYWNrYWdlSW1wbC5pbml0KCk7CisKKwkvKioKKwkgKiBUaGUgbWV0YSBvYmplY3QgaWQgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5pbXBsLkRpc2Vhc2VNb2RlbEltcGwgPGVtPkRpc2Vhc2UgTW9kZWw8L2VtPn0nIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuaW1wbC5EaXNlYXNlTW9kZWxJbXBsCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuaW1wbC5TdGFuZGFyZFBhY2thZ2VJbXBsI2dldERpc2Vhc2VNb2RlbCgpCisJICogQGdlbmVyYXRlZAorCSAqLworCWludCBESVNFQVNFX01PREVMID0gMzsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5VUkk8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBESVNFQVNFX01PREVMX19VUkkgPSBNb2RlbFBhY2thZ2UuSU5URUdSQVRJT05fREVDT1JBVE9SX19VUkk7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VHlwZSBVUkk8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBESVNFQVNFX01PREVMX19UWVBFX1VSSSA9IE1vZGVsUGFja2FnZS5JTlRFR1JBVElPTl9ERUNPUkFUT1JfX1RZUEVfVVJJOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkR1YmxpbiBDb3JlPC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgRElTRUFTRV9NT0RFTF9fRFVCTElOX0NPUkUgPSBNb2RlbFBhY2thZ2UuSU5URUdSQVRJT05fREVDT1JBVE9SX19EVUJMSU5fQ09SRTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5MYWJlbHMgVG8gVXBkYXRlPC9iPjwvZW0+JyByZWZlcmVuY2UgbGlzdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBESVNFQVNFX01PREVMX19MQUJFTFNfVE9fVVBEQVRFID0gTW9kZWxQYWNrYWdlLklOVEVHUkFUSU9OX0RFQ09SQVRPUl9fTEFCRUxTX1RPX1VQREFURTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5HcmFwaDwvYj48L2VtPicgY29udGFpbmVyIHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBESVNFQVNFX01PREVMX19HUkFQSCA9IE1vZGVsUGFja2FnZS5JTlRFR1JBVElPTl9ERUNPUkFUT1JfX0dSQVBIOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkVuYWJsZWQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBESVNFQVNFX01PREVMX19FTkFCTEVEID0gTW9kZWxQYWNrYWdlLklOVEVHUkFUSU9OX0RFQ09SQVRPUl9fRU5BQkxFRDsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5HcmFwaCBEZWNvcmF0ZWQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBESVNFQVNFX01PREVMX19HUkFQSF9ERUNPUkFURUQgPSBNb2RlbFBhY2thZ2UuSU5URUdSQVRJT05fREVDT1JBVE9SX19HUkFQSF9ERUNPUkFURUQ7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+UHJvZ3Jlc3M8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBESVNFQVNFX01PREVMX19QUk9HUkVTUyA9IE1vZGVsUGFja2FnZS5JTlRFR1JBVElPTl9ERUNPUkFUT1JfX1BST0dSRVNTOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlBvcHVsYXRpb24gSWRlbnRpZmllcjwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IERJU0VBU0VfTU9ERUxfX1BPUFVMQVRJT05fSURFTlRJRklFUiA9IE1vZGVsUGFja2FnZS5JTlRFR1JBVElPTl9ERUNPUkFUT1JfRkVBVFVSRV9DT1VOVCArIDA7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VGltZSBQZXJpb2Q8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBESVNFQVNFX01PREVMX19USU1FX1BFUklPRCA9IE1vZGVsUGFja2FnZS5JTlRFR1JBVElPTl9ERUNPUkFUT1JfRkVBVFVSRV9DT1VOVCArIDE7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RGlzZWFzZSBOYW1lPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgRElTRUFTRV9NT0RFTF9fRElTRUFTRV9OQU1FID0gTW9kZWxQYWNrYWdlLklOVEVHUkFUSU9OX0RFQ09SQVRPUl9GRUFUVVJFX0NPVU5UICsgMjsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5GaW5pdGUgRGlmZmVyZW5jZTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IERJU0VBU0VfTU9ERUxfX0ZJTklURV9ESUZGRVJFTkNFID0gTW9kZWxQYWNrYWdlLklOVEVHUkFUSU9OX0RFQ09SQVRPUl9GRUFUVVJFX0NPVU5UICsgMzsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5GcmVxdWVuY3kgRGVwZW5kZW50PC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgRElTRUFTRV9NT0RFTF9fRlJFUVVFTkNZX0RFUEVOREVOVCA9IE1vZGVsUGFja2FnZS5JTlRFR1JBVElPTl9ERUNPUkFUT1JfRkVBVFVSRV9DT1VOVCArIDQ7CisKKwkvKioKKwkgKiBUaGUgbnVtYmVyIG9mIHN0cnVjdHVyYWwgZmVhdHVyZXMgb2YgdGhlICc8ZW0+RGlzZWFzZSBNb2RlbDwvZW0+JyBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBESVNFQVNFX01PREVMX0ZFQVRVUkVfQ09VTlQgPSBNb2RlbFBhY2thZ2UuSU5URUdSQVRJT05fREVDT1JBVE9SX0ZFQVRVUkVfQ09VTlQgKyA1OworCisJLyoqCisJICogVGhlIG1ldGEgb2JqZWN0IGlkIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuaW1wbC5TdGFuZGFyZERpc2Vhc2VNb2RlbEltcGwgPGVtPkRpc2Vhc2UgTW9kZWw8L2VtPn0nIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuaW1wbC5TdGFuZGFyZERpc2Vhc2VNb2RlbEltcGwKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5pbXBsLlN0YW5kYXJkUGFja2FnZUltcGwjZ2V0U3RhbmRhcmREaXNlYXNlTW9kZWwoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlpbnQgU1RBTkRBUkRfRElTRUFTRV9NT0RFTCA9IDE3OworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlVSSTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNUQU5EQVJEX0RJU0VBU0VfTU9ERUxfX1VSSSA9IERJU0VBU0VfTU9ERUxfX1VSSTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5UeXBlIFVSSTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNUQU5EQVJEX0RJU0VBU0VfTU9ERUxfX1RZUEVfVVJJID0gRElTRUFTRV9NT0RFTF9fVFlQRV9VUkk7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RHVibGluIENvcmU8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTVEFOREFSRF9ESVNFQVNFX01PREVMX19EVUJMSU5fQ09SRSA9IERJU0VBU0VfTU9ERUxfX0RVQkxJTl9DT1JFOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkxhYmVscyBUbyBVcGRhdGU8L2I+PC9lbT4nIHJlZmVyZW5jZSBsaXN0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNUQU5EQVJEX0RJU0VBU0VfTU9ERUxfX0xBQkVMU19UT19VUERBVEUgPSBESVNFQVNFX01PREVMX19MQUJFTFNfVE9fVVBEQVRFOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkdyYXBoPC9iPjwvZW0+JyBjb250YWluZXIgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNUQU5EQVJEX0RJU0VBU0VfTU9ERUxfX0dSQVBIID0gRElTRUFTRV9NT0RFTF9fR1JBUEg7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RW5hYmxlZDwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNUQU5EQVJEX0RJU0VBU0VfTU9ERUxfX0VOQUJMRUQgPSBESVNFQVNFX01PREVMX19FTkFCTEVEOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkdyYXBoIERlY29yYXRlZDwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNUQU5EQVJEX0RJU0VBU0VfTU9ERUxfX0dSQVBIX0RFQ09SQVRFRCA9IERJU0VBU0VfTU9ERUxfX0dSQVBIX0RFQ09SQVRFRDsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5Qcm9ncmVzczwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNUQU5EQVJEX0RJU0VBU0VfTU9ERUxfX1BST0dSRVNTID0gRElTRUFTRV9NT0RFTF9fUFJPR1JFU1M7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+UG9wdWxhdGlvbiBJZGVudGlmaWVyPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU1RBTkRBUkRfRElTRUFTRV9NT0RFTF9fUE9QVUxBVElPTl9JREVOVElGSUVSID0gRElTRUFTRV9NT0RFTF9fUE9QVUxBVElPTl9JREVOVElGSUVSOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlRpbWUgUGVyaW9kPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU1RBTkRBUkRfRElTRUFTRV9NT0RFTF9fVElNRV9QRVJJT0QgPSBESVNFQVNFX01PREVMX19USU1FX1BFUklPRDsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5EaXNlYXNlIE5hbWU8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTVEFOREFSRF9ESVNFQVNFX01PREVMX19ESVNFQVNFX05BTUUgPSBESVNFQVNFX01PREVMX19ESVNFQVNFX05BTUU7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RmluaXRlIERpZmZlcmVuY2U8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTVEFOREFSRF9ESVNFQVNFX01PREVMX19GSU5JVEVfRElGRkVSRU5DRSA9IERJU0VBU0VfTU9ERUxfX0ZJTklURV9ESUZGRVJFTkNFOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkZyZXF1ZW5jeSBEZXBlbmRlbnQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTVEFOREFSRF9ESVNFQVNFX01PREVMX19GUkVRVUVOQ1lfREVQRU5ERU5UID0gRElTRUFTRV9NT0RFTF9fRlJFUVVFTkNZX0RFUEVOREVOVDsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5SZWZlcmVuY2UgUG9wdWxhdGlvbiBEZW5zaXR5PC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU1RBTkRBUkRfRElTRUFTRV9NT0RFTF9fUkVGRVJFTkNFX1BPUFVMQVRJT05fREVOU0lUWSA9IERJU0VBU0VfTU9ERUxfRkVBVFVSRV9DT1VOVCArIDA7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+Um9hZCBOZXR3b3JrIEluZmVjdGlvdXMgUHJvcG9ydGlvbjwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNUQU5EQVJEX0RJU0VBU0VfTU9ERUxfX1JPQURfTkVUV09SS19JTkZFQ1RJT1VTX1BST1BPUlRJT04gPSBESVNFQVNFX01PREVMX0ZFQVRVUkVfQ09VTlQgKyAxOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkNoYXJhY3RlcmlzdGljIE1peGluZyBEaXN0YW5jZTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNUQU5EQVJEX0RJU0VBU0VfTU9ERUxfX0NIQVJBQ1RFUklTVElDX01JWElOR19ESVNUQU5DRSA9IERJU0VBU0VfTU9ERUxfRkVBVFVSRV9DT1VOVCArIDI7CisKKwkvKioKKwkgKiBUaGUgbnVtYmVyIG9mIHN0cnVjdHVyYWwgZmVhdHVyZXMgb2YgdGhlICc8ZW0+RGlzZWFzZSBNb2RlbDwvZW0+JyBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTVEFOREFSRF9ESVNFQVNFX01PREVMX0ZFQVRVUkVfQ09VTlQgPSBESVNFQVNFX01PREVMX0ZFQVRVUkVfQ09VTlQgKyAzOworCisJLyoqCisJICogVGhlIG1ldGEgb2JqZWN0IGlkIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuaW1wbC5TSUltcGwgPGVtPlNJPC9lbT59JyBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLmltcGwuU0lJbXBsCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuaW1wbC5TdGFuZGFyZFBhY2thZ2VJbXBsI2dldFNJKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJaW50IFNJID0gMTA7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VVJJPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU0lfX1VSSSA9IFNUQU5EQVJEX0RJU0VBU0VfTU9ERUxfX1VSSTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5UeXBlIFVSSTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNJX19UWVBFX1VSSSA9IFNUQU5EQVJEX0RJU0VBU0VfTU9ERUxfX1RZUEVfVVJJOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkR1YmxpbiBDb3JlPC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU0lfX0RVQkxJTl9DT1JFID0gU1RBTkRBUkRfRElTRUFTRV9NT0RFTF9fRFVCTElOX0NPUkU7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+TGFiZWxzIFRvIFVwZGF0ZTwvYj48L2VtPicgcmVmZXJlbmNlIGxpc3QuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU0lfX0xBQkVMU19UT19VUERBVEUgPSBTVEFOREFSRF9ESVNFQVNFX01PREVMX19MQUJFTFNfVE9fVVBEQVRFOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkdyYXBoPC9iPjwvZW0+JyBjb250YWluZXIgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNJX19HUkFQSCA9IFNUQU5EQVJEX0RJU0VBU0VfTU9ERUxfX0dSQVBIOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkVuYWJsZWQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTSV9fRU5BQkxFRCA9IFNUQU5EQVJEX0RJU0VBU0VfTU9ERUxfX0VOQUJMRUQ7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+R3JhcGggRGVjb3JhdGVkPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU0lfX0dSQVBIX0RFQ09SQVRFRCA9IFNUQU5EQVJEX0RJU0VBU0VfTU9ERUxfX0dSQVBIX0RFQ09SQVRFRDsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5Qcm9ncmVzczwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNJX19QUk9HUkVTUyA9IFNUQU5EQVJEX0RJU0VBU0VfTU9ERUxfX1BST0dSRVNTOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlBvcHVsYXRpb24gSWRlbnRpZmllcjwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNJX19QT1BVTEFUSU9OX0lERU5USUZJRVIgPSBTVEFOREFSRF9ESVNFQVNFX01PREVMX19QT1BVTEFUSU9OX0lERU5USUZJRVI7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VGltZSBQZXJpb2Q8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTSV9fVElNRV9QRVJJT0QgPSBTVEFOREFSRF9ESVNFQVNFX01PREVMX19USU1FX1BFUklPRDsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5EaXNlYXNlIE5hbWU8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTSV9fRElTRUFTRV9OQU1FID0gU1RBTkRBUkRfRElTRUFTRV9NT0RFTF9fRElTRUFTRV9OQU1FOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkZpbml0ZSBEaWZmZXJlbmNlPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU0lfX0ZJTklURV9ESUZGRVJFTkNFID0gU1RBTkRBUkRfRElTRUFTRV9NT0RFTF9fRklOSVRFX0RJRkZFUkVOQ0U7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RnJlcXVlbmN5IERlcGVuZGVudDwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNJX19GUkVRVUVOQ1lfREVQRU5ERU5UID0gU1RBTkRBUkRfRElTRUFTRV9NT0RFTF9fRlJFUVVFTkNZX0RFUEVOREVOVDsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5SZWZlcmVuY2UgUG9wdWxhdGlvbiBEZW5zaXR5PC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU0lfX1JFRkVSRU5DRV9QT1BVTEFUSU9OX0RFTlNJVFkgPSBTVEFOREFSRF9ESVNFQVNFX01PREVMX19SRUZFUkVOQ0VfUE9QVUxBVElPTl9ERU5TSVRZOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlJvYWQgTmV0d29yayBJbmZlY3Rpb3VzIFByb3BvcnRpb248L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTSV9fUk9BRF9ORVRXT1JLX0lORkVDVElPVVNfUFJPUE9SVElPTiA9IFNUQU5EQVJEX0RJU0VBU0VfTU9ERUxfX1JPQURfTkVUV09SS19JTkZFQ1RJT1VTX1BST1BPUlRJT047CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+Q2hhcmFjdGVyaXN0aWMgTWl4aW5nIERpc3RhbmNlPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU0lfX0NIQVJBQ1RFUklTVElDX01JWElOR19ESVNUQU5DRSA9IFNUQU5EQVJEX0RJU0VBU0VfTU9ERUxfX0NIQVJBQ1RFUklTVElDX01JWElOR19ESVNUQU5DRTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5UcmFuc21pc3Npb24gUmF0ZTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNJX19UUkFOU01JU1NJT05fUkFURSA9IFNUQU5EQVJEX0RJU0VBU0VfTU9ERUxfRkVBVFVSRV9DT1VOVCArIDA7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+Tm9uIExpbmVhcml0eSBDb2VmZmljaWVudDwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNJX19OT05fTElORUFSSVRZX0NPRUZGSUNJRU5UID0gU1RBTkRBUkRfRElTRUFTRV9NT0RFTF9GRUFUVVJFX0NPVU5UICsgMTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5SZWNvdmVyeSBSYXRlPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU0lfX1JFQ09WRVJZX1JBVEUgPSBTVEFOREFSRF9ESVNFQVNFX01PREVMX0ZFQVRVUkVfQ09VTlQgKyAyOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkluZmVjdGlvdXMgTW9ydGFsaXR5IFJhdGU8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTSV9fSU5GRUNUSU9VU19NT1JUQUxJVFlfUkFURSA9IFNUQU5EQVJEX0RJU0VBU0VfTU9ERUxfRkVBVFVSRV9DT1VOVCArIDM7CisKKwkvKioKKwkgKiBUaGUgbnVtYmVyIG9mIHN0cnVjdHVyYWwgZmVhdHVyZXMgb2YgdGhlICc8ZW0+U0k8L2VtPicgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU0lfRkVBVFVSRV9DT1VOVCA9IFNUQU5EQVJEX0RJU0VBU0VfTU9ERUxfRkVBVFVSRV9DT1VOVCArIDQ7CisKKwkvKioKKwkgKiBUaGUgbWV0YSBvYmplY3QgaWQgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5pbXBsLlNJUkltcGwgPGVtPlNJUjwvZW0+fScgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5pbXBsLlNJUkltcGwKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5pbXBsLlN0YW5kYXJkUGFja2FnZUltcGwjZ2V0U0lSKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJaW50IFNJUiA9IDE0OworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlVSSTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNJUl9fVVJJID0gU0lfX1VSSTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5UeXBlIFVSSTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNJUl9fVFlQRV9VUkkgPSBTSV9fVFlQRV9VUkk7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RHVibGluIENvcmU8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTSVJfX0RVQkxJTl9DT1JFID0gU0lfX0RVQkxJTl9DT1JFOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkxhYmVscyBUbyBVcGRhdGU8L2I+PC9lbT4nIHJlZmVyZW5jZSBsaXN0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNJUl9fTEFCRUxTX1RPX1VQREFURSA9IFNJX19MQUJFTFNfVE9fVVBEQVRFOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkdyYXBoPC9iPjwvZW0+JyBjb250YWluZXIgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNJUl9fR1JBUEggPSBTSV9fR1JBUEg7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RW5hYmxlZDwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNJUl9fRU5BQkxFRCA9IFNJX19FTkFCTEVEOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkdyYXBoIERlY29yYXRlZDwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNJUl9fR1JBUEhfREVDT1JBVEVEID0gU0lfX0dSQVBIX0RFQ09SQVRFRDsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5Qcm9ncmVzczwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNJUl9fUFJPR1JFU1MgPSBTSV9fUFJPR1JFU1M7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+UG9wdWxhdGlvbiBJZGVudGlmaWVyPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU0lSX19QT1BVTEFUSU9OX0lERU5USUZJRVIgPSBTSV9fUE9QVUxBVElPTl9JREVOVElGSUVSOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlRpbWUgUGVyaW9kPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU0lSX19USU1FX1BFUklPRCA9IFNJX19USU1FX1BFUklPRDsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5EaXNlYXNlIE5hbWU8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTSVJfX0RJU0VBU0VfTkFNRSA9IFNJX19ESVNFQVNFX05BTUU7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RmluaXRlIERpZmZlcmVuY2U8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTSVJfX0ZJTklURV9ESUZGRVJFTkNFID0gU0lfX0ZJTklURV9ESUZGRVJFTkNFOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkZyZXF1ZW5jeSBEZXBlbmRlbnQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTSVJfX0ZSRVFVRU5DWV9ERVBFTkRFTlQgPSBTSV9fRlJFUVVFTkNZX0RFUEVOREVOVDsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5SZWZlcmVuY2UgUG9wdWxhdGlvbiBEZW5zaXR5PC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU0lSX19SRUZFUkVOQ0VfUE9QVUxBVElPTl9ERU5TSVRZID0gU0lfX1JFRkVSRU5DRV9QT1BVTEFUSU9OX0RFTlNJVFk7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+Um9hZCBOZXR3b3JrIEluZmVjdGlvdXMgUHJvcG9ydGlvbjwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNJUl9fUk9BRF9ORVRXT1JLX0lORkVDVElPVVNfUFJPUE9SVElPTiA9IFNJX19ST0FEX05FVFdPUktfSU5GRUNUSU9VU19QUk9QT1JUSU9OOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkNoYXJhY3RlcmlzdGljIE1peGluZyBEaXN0YW5jZTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNJUl9fQ0hBUkFDVEVSSVNUSUNfTUlYSU5HX0RJU1RBTkNFID0gU0lfX0NIQVJBQ1RFUklTVElDX01JWElOR19ESVNUQU5DRTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5UcmFuc21pc3Npb24gUmF0ZTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNJUl9fVFJBTlNNSVNTSU9OX1JBVEUgPSBTSV9fVFJBTlNNSVNTSU9OX1JBVEU7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+Tm9uIExpbmVhcml0eSBDb2VmZmljaWVudDwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNJUl9fTk9OX0xJTkVBUklUWV9DT0VGRklDSUVOVCA9IFNJX19OT05fTElORUFSSVRZX0NPRUZGSUNJRU5UOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlJlY292ZXJ5IFJhdGU8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTSVJfX1JFQ09WRVJZX1JBVEUgPSBTSV9fUkVDT1ZFUllfUkFURTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5JbmZlY3Rpb3VzIE1vcnRhbGl0eSBSYXRlPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU0lSX19JTkZFQ1RJT1VTX01PUlRBTElUWV9SQVRFID0gU0lfX0lORkVDVElPVVNfTU9SVEFMSVRZX1JBVEU7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+SW1tdW5pdHkgTG9zcyBSYXRlPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU0lSX19JTU1VTklUWV9MT1NTX1JBVEUgPSBTSV9GRUFUVVJFX0NPVU5UICsgMDsKKworCS8qKgorCSAqIFRoZSBudW1iZXIgb2Ygc3RydWN0dXJhbCBmZWF0dXJlcyBvZiB0aGUgJzxlbT5TSVI8L2VtPicgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU0lSX0ZFQVRVUkVfQ09VTlQgPSBTSV9GRUFUVVJFX0NPVU5UICsgMTsKKworCS8qKgorCSAqIFRoZSBtZXRhIG9iamVjdCBpZCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLmltcGwuU0VJUkltcGwgPGVtPlNFSVI8L2VtPn0nIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuaW1wbC5TRUlSSW1wbAorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLmltcGwuU3RhbmRhcmRQYWNrYWdlSW1wbCNnZXRTRUlSKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJaW50IFNFSVIgPSA3OworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlVSSTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNFSVJfX1VSSSA9IFNJUl9fVVJJOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlR5cGUgVVJJPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU0VJUl9fVFlQRV9VUkkgPSBTSVJfX1RZUEVfVVJJOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkR1YmxpbiBDb3JlPC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU0VJUl9fRFVCTElOX0NPUkUgPSBTSVJfX0RVQkxJTl9DT1JFOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkxhYmVscyBUbyBVcGRhdGU8L2I+PC9lbT4nIHJlZmVyZW5jZSBsaXN0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNFSVJfX0xBQkVMU19UT19VUERBVEUgPSBTSVJfX0xBQkVMU19UT19VUERBVEU7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+R3JhcGg8L2I+PC9lbT4nIGNvbnRhaW5lciByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU0VJUl9fR1JBUEggPSBTSVJfX0dSQVBIOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkVuYWJsZWQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTRUlSX19FTkFCTEVEID0gU0lSX19FTkFCTEVEOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkdyYXBoIERlY29yYXRlZDwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNFSVJfX0dSQVBIX0RFQ09SQVRFRCA9IFNJUl9fR1JBUEhfREVDT1JBVEVEOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlByb2dyZXNzPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU0VJUl9fUFJPR1JFU1MgPSBTSVJfX1BST0dSRVNTOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlBvcHVsYXRpb24gSWRlbnRpZmllcjwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNFSVJfX1BPUFVMQVRJT05fSURFTlRJRklFUiA9IFNJUl9fUE9QVUxBVElPTl9JREVOVElGSUVSOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlRpbWUgUGVyaW9kPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU0VJUl9fVElNRV9QRVJJT0QgPSBTSVJfX1RJTUVfUEVSSU9EOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkRpc2Vhc2UgTmFtZTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNFSVJfX0RJU0VBU0VfTkFNRSA9IFNJUl9fRElTRUFTRV9OQU1FOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkZpbml0ZSBEaWZmZXJlbmNlPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU0VJUl9fRklOSVRFX0RJRkZFUkVOQ0UgPSBTSVJfX0ZJTklURV9ESUZGRVJFTkNFOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkZyZXF1ZW5jeSBEZXBlbmRlbnQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTRUlSX19GUkVRVUVOQ1lfREVQRU5ERU5UID0gU0lSX19GUkVRVUVOQ1lfREVQRU5ERU5UOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlJlZmVyZW5jZSBQb3B1bGF0aW9uIERlbnNpdHk8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTRUlSX19SRUZFUkVOQ0VfUE9QVUxBVElPTl9ERU5TSVRZID0gU0lSX19SRUZFUkVOQ0VfUE9QVUxBVElPTl9ERU5TSVRZOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlJvYWQgTmV0d29yayBJbmZlY3Rpb3VzIFByb3BvcnRpb248L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTRUlSX19ST0FEX05FVFdPUktfSU5GRUNUSU9VU19QUk9QT1JUSU9OID0gU0lSX19ST0FEX05FVFdPUktfSU5GRUNUSU9VU19QUk9QT1JUSU9OOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkNoYXJhY3RlcmlzdGljIE1peGluZyBEaXN0YW5jZTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNFSVJfX0NIQVJBQ1RFUklTVElDX01JWElOR19ESVNUQU5DRSA9IFNJUl9fQ0hBUkFDVEVSSVNUSUNfTUlYSU5HX0RJU1RBTkNFOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlRyYW5zbWlzc2lvbiBSYXRlPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU0VJUl9fVFJBTlNNSVNTSU9OX1JBVEUgPSBTSVJfX1RSQU5TTUlTU0lPTl9SQVRFOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPk5vbiBMaW5lYXJpdHkgQ29lZmZpY2llbnQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTRUlSX19OT05fTElORUFSSVRZX0NPRUZGSUNJRU5UID0gU0lSX19OT05fTElORUFSSVRZX0NPRUZGSUNJRU5UOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlJlY292ZXJ5IFJhdGU8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTRUlSX19SRUNPVkVSWV9SQVRFID0gU0lSX19SRUNPVkVSWV9SQVRFOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkluZmVjdGlvdXMgTW9ydGFsaXR5IFJhdGU8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTRUlSX19JTkZFQ1RJT1VTX01PUlRBTElUWV9SQVRFID0gU0lSX19JTkZFQ1RJT1VTX01PUlRBTElUWV9SQVRFOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkltbXVuaXR5IExvc3MgUmF0ZTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNFSVJfX0lNTVVOSVRZX0xPU1NfUkFURSA9IFNJUl9fSU1NVU5JVFlfTE9TU19SQVRFOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkluY3ViYXRpb24gUmF0ZTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNFSVJfX0lOQ1VCQVRJT05fUkFURSA9IFNJUl9GRUFUVVJFX0NPVU5UICsgMDsKKworCS8qKgorCSAqIFRoZSBudW1iZXIgb2Ygc3RydWN0dXJhbCBmZWF0dXJlcyBvZiB0aGUgJzxlbT5TRUlSPC9lbT4nIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNFSVJfRkVBVFVSRV9DT1VOVCA9IFNJUl9GRUFUVVJFX0NPVU5UICsgMTsKKworCS8qKgorCSAqIFRoZSBtZXRhIG9iamVjdCBpZCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLmltcGwuRGV0ZXJtaW5pc3RpY1NFSVJEaXNlYXNlTW9kZWxJbXBsIDxlbT5EZXRlcm1pbmlzdGljIFNFSVIgRGlzZWFzZSBNb2RlbDwvZW0+fScgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5pbXBsLkRldGVybWluaXN0aWNTRUlSRGlzZWFzZU1vZGVsSW1wbAorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLmltcGwuU3RhbmRhcmRQYWNrYWdlSW1wbCNnZXREZXRlcm1pbmlzdGljU0VJUkRpc2Vhc2VNb2RlbCgpCisJICogQGdlbmVyYXRlZAorCSAqLworCWludCBERVRFUk1JTklTVElDX1NFSVJfRElTRUFTRV9NT0RFTCA9IDA7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VVJJPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgREVURVJNSU5JU1RJQ19TRUlSX0RJU0VBU0VfTU9ERUxfX1VSSSA9IFNFSVJfX1VSSTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5UeXBlIFVSSTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IERFVEVSTUlOSVNUSUNfU0VJUl9ESVNFQVNFX01PREVMX19UWVBFX1VSSSA9IFNFSVJfX1RZUEVfVVJJOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkR1YmxpbiBDb3JlPC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgREVURVJNSU5JU1RJQ19TRUlSX0RJU0VBU0VfTU9ERUxfX0RVQkxJTl9DT1JFID0gU0VJUl9fRFVCTElOX0NPUkU7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+TGFiZWxzIFRvIFVwZGF0ZTwvYj48L2VtPicgcmVmZXJlbmNlIGxpc3QuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgREVURVJNSU5JU1RJQ19TRUlSX0RJU0VBU0VfTU9ERUxfX0xBQkVMU19UT19VUERBVEUgPSBTRUlSX19MQUJFTFNfVE9fVVBEQVRFOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkdyYXBoPC9iPjwvZW0+JyBjb250YWluZXIgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IERFVEVSTUlOSVNUSUNfU0VJUl9ESVNFQVNFX01PREVMX19HUkFQSCA9IFNFSVJfX0dSQVBIOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkVuYWJsZWQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBERVRFUk1JTklTVElDX1NFSVJfRElTRUFTRV9NT0RFTF9fRU5BQkxFRCA9IFNFSVJfX0VOQUJMRUQ7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+R3JhcGggRGVjb3JhdGVkPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgREVURVJNSU5JU1RJQ19TRUlSX0RJU0VBU0VfTU9ERUxfX0dSQVBIX0RFQ09SQVRFRCA9IFNFSVJfX0dSQVBIX0RFQ09SQVRFRDsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5Qcm9ncmVzczwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IERFVEVSTUlOSVNUSUNfU0VJUl9ESVNFQVNFX01PREVMX19QUk9HUkVTUyA9IFNFSVJfX1BST0dSRVNTOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlBvcHVsYXRpb24gSWRlbnRpZmllcjwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IERFVEVSTUlOSVNUSUNfU0VJUl9ESVNFQVNFX01PREVMX19QT1BVTEFUSU9OX0lERU5USUZJRVIgPSBTRUlSX19QT1BVTEFUSU9OX0lERU5USUZJRVI7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VGltZSBQZXJpb2Q8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBERVRFUk1JTklTVElDX1NFSVJfRElTRUFTRV9NT0RFTF9fVElNRV9QRVJJT0QgPSBTRUlSX19USU1FX1BFUklPRDsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5EaXNlYXNlIE5hbWU8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBERVRFUk1JTklTVElDX1NFSVJfRElTRUFTRV9NT0RFTF9fRElTRUFTRV9OQU1FID0gU0VJUl9fRElTRUFTRV9OQU1FOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkZpbml0ZSBEaWZmZXJlbmNlPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgREVURVJNSU5JU1RJQ19TRUlSX0RJU0VBU0VfTU9ERUxfX0ZJTklURV9ESUZGRVJFTkNFID0gU0VJUl9fRklOSVRFX0RJRkZFUkVOQ0U7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RnJlcXVlbmN5IERlcGVuZGVudDwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IERFVEVSTUlOSVNUSUNfU0VJUl9ESVNFQVNFX01PREVMX19GUkVRVUVOQ1lfREVQRU5ERU5UID0gU0VJUl9fRlJFUVVFTkNZX0RFUEVOREVOVDsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5SZWZlcmVuY2UgUG9wdWxhdGlvbiBEZW5zaXR5PC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgREVURVJNSU5JU1RJQ19TRUlSX0RJU0VBU0VfTU9ERUxfX1JFRkVSRU5DRV9QT1BVTEFUSU9OX0RFTlNJVFkgPSBTRUlSX19SRUZFUkVOQ0VfUE9QVUxBVElPTl9ERU5TSVRZOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlJvYWQgTmV0d29yayBJbmZlY3Rpb3VzIFByb3BvcnRpb248L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBERVRFUk1JTklTVElDX1NFSVJfRElTRUFTRV9NT0RFTF9fUk9BRF9ORVRXT1JLX0lORkVDVElPVVNfUFJPUE9SVElPTiA9IFNFSVJfX1JPQURfTkVUV09SS19JTkZFQ1RJT1VTX1BST1BPUlRJT047CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+Q2hhcmFjdGVyaXN0aWMgTWl4aW5nIERpc3RhbmNlPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgREVURVJNSU5JU1RJQ19TRUlSX0RJU0VBU0VfTU9ERUxfX0NIQVJBQ1RFUklTVElDX01JWElOR19ESVNUQU5DRSA9IFNFSVJfX0NIQVJBQ1RFUklTVElDX01JWElOR19ESVNUQU5DRTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5UcmFuc21pc3Npb24gUmF0ZTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IERFVEVSTUlOSVNUSUNfU0VJUl9ESVNFQVNFX01PREVMX19UUkFOU01JU1NJT05fUkFURSA9IFNFSVJfX1RSQU5TTUlTU0lPTl9SQVRFOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPk5vbiBMaW5lYXJpdHkgQ29lZmZpY2llbnQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBERVRFUk1JTklTVElDX1NFSVJfRElTRUFTRV9NT0RFTF9fTk9OX0xJTkVBUklUWV9DT0VGRklDSUVOVCA9IFNFSVJfX05PTl9MSU5FQVJJVFlfQ09FRkZJQ0lFTlQ7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+UmVjb3ZlcnkgUmF0ZTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IERFVEVSTUlOSVNUSUNfU0VJUl9ESVNFQVNFX01PREVMX19SRUNPVkVSWV9SQVRFID0gU0VJUl9fUkVDT1ZFUllfUkFURTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5JbmZlY3Rpb3VzIE1vcnRhbGl0eSBSYXRlPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgREVURVJNSU5JU1RJQ19TRUlSX0RJU0VBU0VfTU9ERUxfX0lORkVDVElPVVNfTU9SVEFMSVRZX1JBVEUgPSBTRUlSX19JTkZFQ1RJT1VTX01PUlRBTElUWV9SQVRFOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkltbXVuaXR5IExvc3MgUmF0ZTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IERFVEVSTUlOSVNUSUNfU0VJUl9ESVNFQVNFX01PREVMX19JTU1VTklUWV9MT1NTX1JBVEUgPSBTRUlSX19JTU1VTklUWV9MT1NTX1JBVEU7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+SW5jdWJhdGlvbiBSYXRlPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgREVURVJNSU5JU1RJQ19TRUlSX0RJU0VBU0VfTU9ERUxfX0lOQ1VCQVRJT05fUkFURSA9IFNFSVJfX0lOQ1VCQVRJT05fUkFURTsKKworCS8qKgorCSAqIFRoZSBudW1iZXIgb2Ygc3RydWN0dXJhbCBmZWF0dXJlcyBvZiB0aGUgJzxlbT5EZXRlcm1pbmlzdGljIFNFSVIgRGlzZWFzZSBNb2RlbDwvZW0+JyBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBERVRFUk1JTklTVElDX1NFSVJfRElTRUFTRV9NT0RFTF9GRUFUVVJFX0NPVU5UID0gU0VJUl9GRUFUVVJFX0NPVU5UICsgMDsKKworCS8qKgorCSAqIFRoZSBtZXRhIG9iamVjdCBpZCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLmltcGwuRGV0ZXJtaW5pc3RpY1NJRGlzZWFzZU1vZGVsSW1wbCA8ZW0+RGV0ZXJtaW5pc3RpYyBTSSBEaXNlYXNlIE1vZGVsPC9lbT59JyBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLmltcGwuRGV0ZXJtaW5pc3RpY1NJRGlzZWFzZU1vZGVsSW1wbAorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLmltcGwuU3RhbmRhcmRQYWNrYWdlSW1wbCNnZXREZXRlcm1pbmlzdGljU0lEaXNlYXNlTW9kZWwoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlpbnQgREVURVJNSU5JU1RJQ19TSV9ESVNFQVNFX01PREVMID0gMTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5VUkk8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBERVRFUk1JTklTVElDX1NJX0RJU0VBU0VfTU9ERUxfX1VSSSA9IFNJX19VUkk7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VHlwZSBVUkk8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBERVRFUk1JTklTVElDX1NJX0RJU0VBU0VfTU9ERUxfX1RZUEVfVVJJID0gU0lfX1RZUEVfVVJJOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkR1YmxpbiBDb3JlPC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgREVURVJNSU5JU1RJQ19TSV9ESVNFQVNFX01PREVMX19EVUJMSU5fQ09SRSA9IFNJX19EVUJMSU5fQ09SRTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5MYWJlbHMgVG8gVXBkYXRlPC9iPjwvZW0+JyByZWZlcmVuY2UgbGlzdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBERVRFUk1JTklTVElDX1NJX0RJU0VBU0VfTU9ERUxfX0xBQkVMU19UT19VUERBVEUgPSBTSV9fTEFCRUxTX1RPX1VQREFURTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5HcmFwaDwvYj48L2VtPicgY29udGFpbmVyIHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBERVRFUk1JTklTVElDX1NJX0RJU0VBU0VfTU9ERUxfX0dSQVBIID0gU0lfX0dSQVBIOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkVuYWJsZWQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBERVRFUk1JTklTVElDX1NJX0RJU0VBU0VfTU9ERUxfX0VOQUJMRUQgPSBTSV9fRU5BQkxFRDsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5HcmFwaCBEZWNvcmF0ZWQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBERVRFUk1JTklTVElDX1NJX0RJU0VBU0VfTU9ERUxfX0dSQVBIX0RFQ09SQVRFRCA9IFNJX19HUkFQSF9ERUNPUkFURUQ7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+UHJvZ3Jlc3M8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBERVRFUk1JTklTVElDX1NJX0RJU0VBU0VfTU9ERUxfX1BST0dSRVNTID0gU0lfX1BST0dSRVNTOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlBvcHVsYXRpb24gSWRlbnRpZmllcjwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IERFVEVSTUlOSVNUSUNfU0lfRElTRUFTRV9NT0RFTF9fUE9QVUxBVElPTl9JREVOVElGSUVSID0gU0lfX1BPUFVMQVRJT05fSURFTlRJRklFUjsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5UaW1lIFBlcmlvZDwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IERFVEVSTUlOSVNUSUNfU0lfRElTRUFTRV9NT0RFTF9fVElNRV9QRVJJT0QgPSBTSV9fVElNRV9QRVJJT0Q7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RGlzZWFzZSBOYW1lPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgREVURVJNSU5JU1RJQ19TSV9ESVNFQVNFX01PREVMX19ESVNFQVNFX05BTUUgPSBTSV9fRElTRUFTRV9OQU1FOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkZpbml0ZSBEaWZmZXJlbmNlPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgREVURVJNSU5JU1RJQ19TSV9ESVNFQVNFX01PREVMX19GSU5JVEVfRElGRkVSRU5DRSA9IFNJX19GSU5JVEVfRElGRkVSRU5DRTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5GcmVxdWVuY3kgRGVwZW5kZW50PC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgREVURVJNSU5JU1RJQ19TSV9ESVNFQVNFX01PREVMX19GUkVRVUVOQ1lfREVQRU5ERU5UID0gU0lfX0ZSRVFVRU5DWV9ERVBFTkRFTlQ7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+UmVmZXJlbmNlIFBvcHVsYXRpb24gRGVuc2l0eTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IERFVEVSTUlOSVNUSUNfU0lfRElTRUFTRV9NT0RFTF9fUkVGRVJFTkNFX1BPUFVMQVRJT05fREVOU0lUWSA9IFNJX19SRUZFUkVOQ0VfUE9QVUxBVElPTl9ERU5TSVRZOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlJvYWQgTmV0d29yayBJbmZlY3Rpb3VzIFByb3BvcnRpb248L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBERVRFUk1JTklTVElDX1NJX0RJU0VBU0VfTU9ERUxfX1JPQURfTkVUV09SS19JTkZFQ1RJT1VTX1BST1BPUlRJT04gPSBTSV9fUk9BRF9ORVRXT1JLX0lORkVDVElPVVNfUFJPUE9SVElPTjsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5DaGFyYWN0ZXJpc3RpYyBNaXhpbmcgRGlzdGFuY2U8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBERVRFUk1JTklTVElDX1NJX0RJU0VBU0VfTU9ERUxfX0NIQVJBQ1RFUklTVElDX01JWElOR19ESVNUQU5DRSA9IFNJX19DSEFSQUNURVJJU1RJQ19NSVhJTkdfRElTVEFOQ0U7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VHJhbnNtaXNzaW9uIFJhdGU8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBERVRFUk1JTklTVElDX1NJX0RJU0VBU0VfTU9ERUxfX1RSQU5TTUlTU0lPTl9SQVRFID0gU0lfX1RSQU5TTUlTU0lPTl9SQVRFOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPk5vbiBMaW5lYXJpdHkgQ29lZmZpY2llbnQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBERVRFUk1JTklTVElDX1NJX0RJU0VBU0VfTU9ERUxfX05PTl9MSU5FQVJJVFlfQ09FRkZJQ0lFTlQgPSBTSV9fTk9OX0xJTkVBUklUWV9DT0VGRklDSUVOVDsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5SZWNvdmVyeSBSYXRlPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgREVURVJNSU5JU1RJQ19TSV9ESVNFQVNFX01PREVMX19SRUNPVkVSWV9SQVRFID0gU0lfX1JFQ09WRVJZX1JBVEU7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+SW5mZWN0aW91cyBNb3J0YWxpdHkgUmF0ZTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IERFVEVSTUlOSVNUSUNfU0lfRElTRUFTRV9NT0RFTF9fSU5GRUNUSU9VU19NT1JUQUxJVFlfUkFURSA9IFNJX19JTkZFQ1RJT1VTX01PUlRBTElUWV9SQVRFOworCisJLyoqCisJICogVGhlIG51bWJlciBvZiBzdHJ1Y3R1cmFsIGZlYXR1cmVzIG9mIHRoZSAnPGVtPkRldGVybWluaXN0aWMgU0kgRGlzZWFzZSBNb2RlbDwvZW0+JyBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBERVRFUk1JTklTVElDX1NJX0RJU0VBU0VfTU9ERUxfRkVBVFVSRV9DT1VOVCA9IFNJX0ZFQVRVUkVfQ09VTlQgKyAwOworCisJLyoqCisJICogVGhlIG1ldGEgb2JqZWN0IGlkIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuaW1wbC5EZXRlcm1pbmlzdGljU0lSRGlzZWFzZU1vZGVsSW1wbCA8ZW0+RGV0ZXJtaW5pc3RpYyBTSVIgRGlzZWFzZSBNb2RlbDwvZW0+fScgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5pbXBsLkRldGVybWluaXN0aWNTSVJEaXNlYXNlTW9kZWxJbXBsCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuaW1wbC5TdGFuZGFyZFBhY2thZ2VJbXBsI2dldERldGVybWluaXN0aWNTSVJEaXNlYXNlTW9kZWwoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlpbnQgREVURVJNSU5JU1RJQ19TSVJfRElTRUFTRV9NT0RFTCA9IDI7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VVJJPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgREVURVJNSU5JU1RJQ19TSVJfRElTRUFTRV9NT0RFTF9fVVJJID0gU0lSX19VUkk7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VHlwZSBVUkk8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBERVRFUk1JTklTVElDX1NJUl9ESVNFQVNFX01PREVMX19UWVBFX1VSSSA9IFNJUl9fVFlQRV9VUkk7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RHVibGluIENvcmU8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBERVRFUk1JTklTVElDX1NJUl9ESVNFQVNFX01PREVMX19EVUJMSU5fQ09SRSA9IFNJUl9fRFVCTElOX0NPUkU7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+TGFiZWxzIFRvIFVwZGF0ZTwvYj48L2VtPicgcmVmZXJlbmNlIGxpc3QuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgREVURVJNSU5JU1RJQ19TSVJfRElTRUFTRV9NT0RFTF9fTEFCRUxTX1RPX1VQREFURSA9IFNJUl9fTEFCRUxTX1RPX1VQREFURTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5HcmFwaDwvYj48L2VtPicgY29udGFpbmVyIHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBERVRFUk1JTklTVElDX1NJUl9ESVNFQVNFX01PREVMX19HUkFQSCA9IFNJUl9fR1JBUEg7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RW5hYmxlZDwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IERFVEVSTUlOSVNUSUNfU0lSX0RJU0VBU0VfTU9ERUxfX0VOQUJMRUQgPSBTSVJfX0VOQUJMRUQ7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+R3JhcGggRGVjb3JhdGVkPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgREVURVJNSU5JU1RJQ19TSVJfRElTRUFTRV9NT0RFTF9fR1JBUEhfREVDT1JBVEVEID0gU0lSX19HUkFQSF9ERUNPUkFURUQ7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+UHJvZ3Jlc3M8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBERVRFUk1JTklTVElDX1NJUl9ESVNFQVNFX01PREVMX19QUk9HUkVTUyA9IFNJUl9fUFJPR1JFU1M7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+UG9wdWxhdGlvbiBJZGVudGlmaWVyPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgREVURVJNSU5JU1RJQ19TSVJfRElTRUFTRV9NT0RFTF9fUE9QVUxBVElPTl9JREVOVElGSUVSID0gU0lSX19QT1BVTEFUSU9OX0lERU5USUZJRVI7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VGltZSBQZXJpb2Q8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBERVRFUk1JTklTVElDX1NJUl9ESVNFQVNFX01PREVMX19USU1FX1BFUklPRCA9IFNJUl9fVElNRV9QRVJJT0Q7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RGlzZWFzZSBOYW1lPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgREVURVJNSU5JU1RJQ19TSVJfRElTRUFTRV9NT0RFTF9fRElTRUFTRV9OQU1FID0gU0lSX19ESVNFQVNFX05BTUU7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RmluaXRlIERpZmZlcmVuY2U8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBERVRFUk1JTklTVElDX1NJUl9ESVNFQVNFX01PREVMX19GSU5JVEVfRElGRkVSRU5DRSA9IFNJUl9fRklOSVRFX0RJRkZFUkVOQ0U7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RnJlcXVlbmN5IERlcGVuZGVudDwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IERFVEVSTUlOSVNUSUNfU0lSX0RJU0VBU0VfTU9ERUxfX0ZSRVFVRU5DWV9ERVBFTkRFTlQgPSBTSVJfX0ZSRVFVRU5DWV9ERVBFTkRFTlQ7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+UmVmZXJlbmNlIFBvcHVsYXRpb24gRGVuc2l0eTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IERFVEVSTUlOSVNUSUNfU0lSX0RJU0VBU0VfTU9ERUxfX1JFRkVSRU5DRV9QT1BVTEFUSU9OX0RFTlNJVFkgPSBTSVJfX1JFRkVSRU5DRV9QT1BVTEFUSU9OX0RFTlNJVFk7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+Um9hZCBOZXR3b3JrIEluZmVjdGlvdXMgUHJvcG9ydGlvbjwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IERFVEVSTUlOSVNUSUNfU0lSX0RJU0VBU0VfTU9ERUxfX1JPQURfTkVUV09SS19JTkZFQ1RJT1VTX1BST1BPUlRJT04gPSBTSVJfX1JPQURfTkVUV09SS19JTkZFQ1RJT1VTX1BST1BPUlRJT047CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+Q2hhcmFjdGVyaXN0aWMgTWl4aW5nIERpc3RhbmNlPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgREVURVJNSU5JU1RJQ19TSVJfRElTRUFTRV9NT0RFTF9fQ0hBUkFDVEVSSVNUSUNfTUlYSU5HX0RJU1RBTkNFID0gU0lSX19DSEFSQUNURVJJU1RJQ19NSVhJTkdfRElTVEFOQ0U7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VHJhbnNtaXNzaW9uIFJhdGU8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBERVRFUk1JTklTVElDX1NJUl9ESVNFQVNFX01PREVMX19UUkFOU01JU1NJT05fUkFURSA9IFNJUl9fVFJBTlNNSVNTSU9OX1JBVEU7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+Tm9uIExpbmVhcml0eSBDb2VmZmljaWVudDwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IERFVEVSTUlOSVNUSUNfU0lSX0RJU0VBU0VfTU9ERUxfX05PTl9MSU5FQVJJVFlfQ09FRkZJQ0lFTlQgPSBTSVJfX05PTl9MSU5FQVJJVFlfQ09FRkZJQ0lFTlQ7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+UmVjb3ZlcnkgUmF0ZTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IERFVEVSTUlOSVNUSUNfU0lSX0RJU0VBU0VfTU9ERUxfX1JFQ09WRVJZX1JBVEUgPSBTSVJfX1JFQ09WRVJZX1JBVEU7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+SW5mZWN0aW91cyBNb3J0YWxpdHkgUmF0ZTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IERFVEVSTUlOSVNUSUNfU0lSX0RJU0VBU0VfTU9ERUxfX0lORkVDVElPVVNfTU9SVEFMSVRZX1JBVEUgPSBTSVJfX0lORkVDVElPVVNfTU9SVEFMSVRZX1JBVEU7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+SW1tdW5pdHkgTG9zcyBSYXRlPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgREVURVJNSU5JU1RJQ19TSVJfRElTRUFTRV9NT0RFTF9fSU1NVU5JVFlfTE9TU19SQVRFID0gU0lSX19JTU1VTklUWV9MT1NTX1JBVEU7CisKKwkvKioKKwkgKiBUaGUgbnVtYmVyIG9mIHN0cnVjdHVyYWwgZmVhdHVyZXMgb2YgdGhlICc8ZW0+RGV0ZXJtaW5pc3RpYyBTSVIgRGlzZWFzZSBNb2RlbDwvZW0+JyBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBERVRFUk1JTklTVElDX1NJUl9ESVNFQVNFX01PREVMX0ZFQVRVUkVfQ09VTlQgPSBTSVJfRkVBVFVSRV9DT1VOVCArIDA7CisKKwkvKioKKwkgKiBUaGUgbWV0YSBvYmplY3QgaWQgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5pbXBsLkRpc2Vhc2VNb2RlbExhYmVsSW1wbCA8ZW0+RGlzZWFzZSBNb2RlbCBMYWJlbDwvZW0+fScgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5pbXBsLkRpc2Vhc2VNb2RlbExhYmVsSW1wbAorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLmltcGwuU3RhbmRhcmRQYWNrYWdlSW1wbCNnZXREaXNlYXNlTW9kZWxMYWJlbCgpCisJICogQGdlbmVyYXRlZAorCSAqLworCWludCBESVNFQVNFX01PREVMX0xBQkVMID0gNDsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5VUkk8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBESVNFQVNFX01PREVMX0xBQkVMX19VUkkgPSBHcmFwaFBhY2thZ2UuSU5URUdSQVRJT05fTEFCRUxfX1VSSTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5UeXBlIFVSSTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IERJU0VBU0VfTU9ERUxfTEFCRUxfX1RZUEVfVVJJID0gR3JhcGhQYWNrYWdlLklOVEVHUkFUSU9OX0xBQkVMX19UWVBFX1VSSTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5EdWJsaW4gQ29yZTwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IERJU0VBU0VfTU9ERUxfTEFCRUxfX0RVQkxJTl9DT1JFID0gR3JhcGhQYWNrYWdlLklOVEVHUkFUSU9OX0xBQkVMX19EVUJMSU5fQ09SRTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5VUkkgT2YgSWRlbnRpZmlhYmxlIFRvIEJlIExhYmVsZWQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBESVNFQVNFX01PREVMX0xBQkVMX19VUklfT0ZfSURFTlRJRklBQkxFX1RPX0JFX0xBQkVMRUQgPSBHcmFwaFBhY2thZ2UuSU5URUdSQVRJT05fTEFCRUxfX1VSSV9PRl9JREVOVElGSUFCTEVfVE9fQkVfTEFCRUxFRDsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5DdXJyZW50IFZhbHVlPC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgRElTRUFTRV9NT0RFTF9MQUJFTF9fQ1VSUkVOVF9WQUxVRSA9IEdyYXBoUGFja2FnZS5JTlRFR1JBVElPTl9MQUJFTF9fQ1VSUkVOVF9WQUxVRTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5JZGVudGlmaWFibGU8L2I+PC9lbT4nIHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBESVNFQVNFX01PREVMX0xBQkVMX19JREVOVElGSUFCTEUgPSBHcmFwaFBhY2thZ2UuSU5URUdSQVRJT05fTEFCRUxfX0lERU5USUZJQUJMRTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5OZXh0IFZhbHVlIFZhbGlkPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgRElTRUFTRV9NT0RFTF9MQUJFTF9fTkVYVF9WQUxVRV9WQUxJRCA9IEdyYXBoUGFja2FnZS5JTlRFR1JBVElPTl9MQUJFTF9fTkVYVF9WQUxVRV9WQUxJRDsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5OZXh0IFZhbHVlPC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgRElTRUFTRV9NT0RFTF9MQUJFTF9fTkVYVF9WQUxVRSA9IEdyYXBoUGFja2FnZS5JTlRFR1JBVElPTl9MQUJFTF9fTkVYVF9WQUxVRTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5EZWNvcmF0b3I8L2I+PC9lbT4nIHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBESVNFQVNFX01PREVMX0xBQkVMX19ERUNPUkFUT1IgPSBHcmFwaFBhY2thZ2UuSU5URUdSQVRJT05fTEFCRUxfX0RFQ09SQVRPUjsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5Ob2RlPC9iPjwvZW0+JyByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgRElTRUFTRV9NT0RFTF9MQUJFTF9fTk9ERSA9IEdyYXBoUGFja2FnZS5JTlRFR1JBVElPTl9MQUJFTF9fTk9ERTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5EZWx0YSBWYWx1ZTwvYj48L2VtPicgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IERJU0VBU0VfTU9ERUxfTEFCRUxfX0RFTFRBX1ZBTFVFID0gR3JhcGhQYWNrYWdlLklOVEVHUkFUSU9OX0xBQkVMX19ERUxUQV9WQUxVRTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5UZW1wIFZhbHVlPC9iPjwvZW0+JyByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgRElTRUFTRV9NT0RFTF9MQUJFTF9fVEVNUF9WQUxVRSA9IEdyYXBoUGFja2FnZS5JTlRFR1JBVElPTl9MQUJFTF9fVEVNUF9WQUxVRTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5Qcm9iZSBWYWx1ZTwvYj48L2VtPicgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IERJU0VBU0VfTU9ERUxfTEFCRUxfX1BST0JFX1ZBTFVFID0gR3JhcGhQYWNrYWdlLklOVEVHUkFUSU9OX0xBQkVMX19QUk9CRV9WQUxVRTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5FcnJvciBTY2FsZTwvYj48L2VtPicgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IERJU0VBU0VfTU9ERUxfTEFCRUxfX0VSUk9SX1NDQUxFID0gR3JhcGhQYWNrYWdlLklOVEVHUkFUSU9OX0xBQkVMX19FUlJPUl9TQ0FMRTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5JZGVudGlmaWVyPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgRElTRUFTRV9NT0RFTF9MQUJFTF9fSURFTlRJRklFUiA9IEdyYXBoUGFja2FnZS5JTlRFR1JBVElPTl9MQUJFTF9fSURFTlRJRklFUjsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5Qb3B1bGF0aW9uIExhYmVsPC9iPjwvZW0+JyByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgRElTRUFTRV9NT0RFTF9MQUJFTF9fUE9QVUxBVElPTl9MQUJFTCA9IEdyYXBoUGFja2FnZS5JTlRFR1JBVElPTl9MQUJFTF9GRUFUVVJFX0NPVU5UICsgMDsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5Qb3B1bGF0aW9uIE1vZGVsIExhYmVsPC9iPjwvZW0+JyByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgRElTRUFTRV9NT0RFTF9MQUJFTF9fUE9QVUxBVElPTl9NT0RFTF9MQUJFTCA9IEdyYXBoUGFja2FnZS5JTlRFR1JBVElPTl9MQUJFTF9GRUFUVVJFX0NPVU5UICsgMTsKKworCS8qKgorCSAqIFRoZSBudW1iZXIgb2Ygc3RydWN0dXJhbCBmZWF0dXJlcyBvZiB0aGUgJzxlbT5EaXNlYXNlIE1vZGVsIExhYmVsPC9lbT4nIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IERJU0VBU0VfTU9ERUxfTEFCRUxfRkVBVFVSRV9DT1VOVCA9IEdyYXBoUGFja2FnZS5JTlRFR1JBVElPTl9MQUJFTF9GRUFUVVJFX0NPVU5UICsgMjsKKworCS8qKgorCSAqIFRoZSBtZXRhIG9iamVjdCBpZCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLmltcGwuRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZUltcGwgPGVtPkRpc2Vhc2UgTW9kZWwgTGFiZWwgVmFsdWU8L2VtPn0nIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuaW1wbC5EaXNlYXNlTW9kZWxMYWJlbFZhbHVlSW1wbAorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLmltcGwuU3RhbmRhcmRQYWNrYWdlSW1wbCNnZXREaXNlYXNlTW9kZWxMYWJlbFZhbHVlKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJaW50IERJU0VBU0VfTU9ERUxfTEFCRUxfVkFMVUUgPSA1OworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkFycml2YWxzPC9iPjwvZW0+JyByZWZlcmVuY2UgbGlzdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBESVNFQVNFX01PREVMX0xBQkVMX1ZBTFVFX19BUlJJVkFMUyA9IEdyYXBoUGFja2FnZS5JTlRFR1JBVElPTl9MQUJFTF9WQUxVRV9fQVJSSVZBTFM7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RGVwYXJ0dXJlczwvYj48L2VtPicgcmVmZXJlbmNlIGxpc3QuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgRElTRUFTRV9NT0RFTF9MQUJFTF9WQUxVRV9fREVQQVJUVVJFUyA9IEdyYXBoUGFja2FnZS5JTlRFR1JBVElPTl9MQUJFTF9WQUxVRV9fREVQQVJUVVJFUzsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5Qb3B1bGF0aW9uIENvdW50PC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgRElTRUFTRV9NT0RFTF9MQUJFTF9WQUxVRV9fUE9QVUxBVElPTl9DT1VOVCA9IEdyYXBoUGFja2FnZS5JTlRFR1JBVElPTl9MQUJFTF9WQUxVRV9GRUFUVVJFX0NPVU5UICsgMDsKKworCS8qKgorCSAqIFRoZSBudW1iZXIgb2Ygc3RydWN0dXJhbCBmZWF0dXJlcyBvZiB0aGUgJzxlbT5EaXNlYXNlIE1vZGVsIExhYmVsIFZhbHVlPC9lbT4nIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IERJU0VBU0VfTU9ERUxfTEFCRUxfVkFMVUVfRkVBVFVSRV9DT1VOVCA9IEdyYXBoUGFja2FnZS5JTlRFR1JBVElPTl9MQUJFTF9WQUxVRV9GRUFUVVJFX0NPVU5UICsgMTsKKworCS8qKgorCSAqIFRoZSBtZXRhIG9iamVjdCBpZCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLmltcGwuSW5mZWN0b3JJbXBsIDxlbT5JbmZlY3RvcjwvZW0+fScgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5pbXBsLkluZmVjdG9ySW1wbAorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLmltcGwuU3RhbmRhcmRQYWNrYWdlSW1wbCNnZXRJbmZlY3RvcigpCisJICogQGdlbmVyYXRlZAorCSAqLworCWludCBJTkZFQ1RPUiA9IDY7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VVJJPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgSU5GRUNUT1JfX1VSSSA9IE1vZGVsUGFja2FnZS5OT0RFX0RFQ09SQVRPUl9fVVJJOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlR5cGUgVVJJPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgSU5GRUNUT1JfX1RZUEVfVVJJID0gTW9kZWxQYWNrYWdlLk5PREVfREVDT1JBVE9SX19UWVBFX1VSSTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5EdWJsaW4gQ29yZTwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IElORkVDVE9SX19EVUJMSU5fQ09SRSA9IE1vZGVsUGFja2FnZS5OT0RFX0RFQ09SQVRPUl9fRFVCTElOX0NPUkU7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+TGFiZWxzIFRvIFVwZGF0ZTwvYj48L2VtPicgcmVmZXJlbmNlIGxpc3QuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgSU5GRUNUT1JfX0xBQkVMU19UT19VUERBVEUgPSBNb2RlbFBhY2thZ2UuTk9ERV9ERUNPUkFUT1JfX0xBQkVMU19UT19VUERBVEU7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+R3JhcGg8L2I+PC9lbT4nIGNvbnRhaW5lciByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgSU5GRUNUT1JfX0dSQVBIID0gTW9kZWxQYWNrYWdlLk5PREVfREVDT1JBVE9SX19HUkFQSDsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5FbmFibGVkPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgSU5GRUNUT1JfX0VOQUJMRUQgPSBNb2RlbFBhY2thZ2UuTk9ERV9ERUNPUkFUT1JfX0VOQUJMRUQ7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+R3JhcGggRGVjb3JhdGVkPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgSU5GRUNUT1JfX0dSQVBIX0RFQ09SQVRFRCA9IE1vZGVsUGFja2FnZS5OT0RFX0RFQ09SQVRPUl9fR1JBUEhfREVDT1JBVEVEOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlByb2dyZXNzPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgSU5GRUNUT1JfX1BST0dSRVNTID0gTW9kZWxQYWNrYWdlLk5PREVfREVDT1JBVE9SX19QUk9HUkVTUzsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5EaXNlYXNlIE1vZGVsPC9iPjwvZW0+JyByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgSU5GRUNUT1JfX0RJU0VBU0VfTU9ERUwgPSBNb2RlbFBhY2thZ2UuTk9ERV9ERUNPUkFUT1JfRkVBVFVSRV9DT1VOVCArIDA7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VGFyZ2V0IFVSSTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IElORkVDVE9SX19UQVJHRVRfVVJJID0gTW9kZWxQYWNrYWdlLk5PREVfREVDT1JBVE9SX0ZFQVRVUkVfQ09VTlQgKyAxOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkRpc2Vhc2UgTmFtZTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IElORkVDVE9SX19ESVNFQVNFX05BTUUgPSBNb2RlbFBhY2thZ2UuTk9ERV9ERUNPUkFUT1JfRkVBVFVSRV9DT1VOVCArIDI7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VGFyZ2V0IElTTyBLZXk8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBJTkZFQ1RPUl9fVEFSR0VUX0lTT19LRVkgPSBNb2RlbFBhY2thZ2UuTk9ERV9ERUNPUkFUT1JfRkVBVFVSRV9DT1VOVCArIDM7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+TGFiZWxzIFRvIEluZmVjdDwvYj48L2VtPicgcmVmZXJlbmNlIGxpc3QuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgSU5GRUNUT1JfX0xBQkVMU19UT19JTkZFQ1QgPSBNb2RlbFBhY2thZ2UuTk9ERV9ERUNPUkFUT1JfRkVBVFVSRV9DT1VOVCArIDQ7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+UG9wdWxhdGlvbiBJZGVudGlmaWVyPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgSU5GRUNUT1JfX1BPUFVMQVRJT05fSURFTlRJRklFUiA9IE1vZGVsUGFja2FnZS5OT0RFX0RFQ09SQVRPUl9GRUFUVVJFX0NPVU5UICsgNTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5JbmZlY3QgUGVyY2VudGFnZTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IElORkVDVE9SX19JTkZFQ1RfUEVSQ0VOVEFHRSA9IE1vZGVsUGFja2FnZS5OT0RFX0RFQ09SQVRPUl9GRUFUVVJFX0NPVU5UICsgNjsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5UYXJnZXQgRmVhdHVyZTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IElORkVDVE9SX19UQVJHRVRfRkVBVFVSRSA9IE1vZGVsUGFja2FnZS5OT0RFX0RFQ09SQVRPUl9GRUFUVVJFX0NPVU5UICsgNzsKKworCS8qKgorCSAqIFRoZSBudW1iZXIgb2Ygc3RydWN0dXJhbCBmZWF0dXJlcyBvZiB0aGUgJzxlbT5JbmZlY3RvcjwvZW0+JyBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBJTkZFQ1RPUl9GRUFUVVJFX0NPVU5UID0gTW9kZWxQYWNrYWdlLk5PREVfREVDT1JBVE9SX0ZFQVRVUkVfQ09VTlQgKyA4OworCisJLyoqCisJICogVGhlIG1ldGEgb2JqZWN0IGlkIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuaW1wbC5TdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsSW1wbCA8ZW0+RGlzZWFzZSBNb2RlbCBMYWJlbDwvZW0+fScgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5pbXBsLlN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWxJbXBsCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuaW1wbC5TdGFuZGFyZFBhY2thZ2VJbXBsI2dldFN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWwoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlpbnQgU1RBTkRBUkRfRElTRUFTRV9NT0RFTF9MQUJFTCA9IDE4OworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlVSSTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNUQU5EQVJEX0RJU0VBU0VfTU9ERUxfTEFCRUxfX1VSSSA9IERJU0VBU0VfTU9ERUxfTEFCRUxfX1VSSTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5UeXBlIFVSSTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNUQU5EQVJEX0RJU0VBU0VfTU9ERUxfTEFCRUxfX1RZUEVfVVJJID0gRElTRUFTRV9NT0RFTF9MQUJFTF9fVFlQRV9VUkk7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RHVibGluIENvcmU8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTVEFOREFSRF9ESVNFQVNFX01PREVMX0xBQkVMX19EVUJMSU5fQ09SRSA9IERJU0VBU0VfTU9ERUxfTEFCRUxfX0RVQkxJTl9DT1JFOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlVSSSBPZiBJZGVudGlmaWFibGUgVG8gQmUgTGFiZWxlZDwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNUQU5EQVJEX0RJU0VBU0VfTU9ERUxfTEFCRUxfX1VSSV9PRl9JREVOVElGSUFCTEVfVE9fQkVfTEFCRUxFRCA9IERJU0VBU0VfTU9ERUxfTEFCRUxfX1VSSV9PRl9JREVOVElGSUFCTEVfVE9fQkVfTEFCRUxFRDsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5DdXJyZW50IFZhbHVlPC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU1RBTkRBUkRfRElTRUFTRV9NT0RFTF9MQUJFTF9fQ1VSUkVOVF9WQUxVRSA9IERJU0VBU0VfTU9ERUxfTEFCRUxfX0NVUlJFTlRfVkFMVUU7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+SWRlbnRpZmlhYmxlPC9iPjwvZW0+JyByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU1RBTkRBUkRfRElTRUFTRV9NT0RFTF9MQUJFTF9fSURFTlRJRklBQkxFID0gRElTRUFTRV9NT0RFTF9MQUJFTF9fSURFTlRJRklBQkxFOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPk5leHQgVmFsdWUgVmFsaWQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTVEFOREFSRF9ESVNFQVNFX01PREVMX0xBQkVMX19ORVhUX1ZBTFVFX1ZBTElEID0gRElTRUFTRV9NT0RFTF9MQUJFTF9fTkVYVF9WQUxVRV9WQUxJRDsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5OZXh0IFZhbHVlPC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU1RBTkRBUkRfRElTRUFTRV9NT0RFTF9MQUJFTF9fTkVYVF9WQUxVRSA9IERJU0VBU0VfTU9ERUxfTEFCRUxfX05FWFRfVkFMVUU7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RGVjb3JhdG9yPC9iPjwvZW0+JyByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU1RBTkRBUkRfRElTRUFTRV9NT0RFTF9MQUJFTF9fREVDT1JBVE9SID0gRElTRUFTRV9NT0RFTF9MQUJFTF9fREVDT1JBVE9SOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPk5vZGU8L2I+PC9lbT4nIHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTVEFOREFSRF9ESVNFQVNFX01PREVMX0xBQkVMX19OT0RFID0gRElTRUFTRV9NT0RFTF9MQUJFTF9fTk9ERTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5EZWx0YSBWYWx1ZTwvYj48L2VtPicgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNUQU5EQVJEX0RJU0VBU0VfTU9ERUxfTEFCRUxfX0RFTFRBX1ZBTFVFID0gRElTRUFTRV9NT0RFTF9MQUJFTF9fREVMVEFfVkFMVUU7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VGVtcCBWYWx1ZTwvYj48L2VtPicgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNUQU5EQVJEX0RJU0VBU0VfTU9ERUxfTEFCRUxfX1RFTVBfVkFMVUUgPSBESVNFQVNFX01PREVMX0xBQkVMX19URU1QX1ZBTFVFOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlByb2JlIFZhbHVlPC9iPjwvZW0+JyByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU1RBTkRBUkRfRElTRUFTRV9NT0RFTF9MQUJFTF9fUFJPQkVfVkFMVUUgPSBESVNFQVNFX01PREVMX0xBQkVMX19QUk9CRV9WQUxVRTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5FcnJvciBTY2FsZTwvYj48L2VtPicgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNUQU5EQVJEX0RJU0VBU0VfTU9ERUxfTEFCRUxfX0VSUk9SX1NDQUxFID0gRElTRUFTRV9NT0RFTF9MQUJFTF9fRVJST1JfU0NBTEU7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+SWRlbnRpZmllcjwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNUQU5EQVJEX0RJU0VBU0VfTU9ERUxfTEFCRUxfX0lERU5USUZJRVIgPSBESVNFQVNFX01PREVMX0xBQkVMX19JREVOVElGSUVSOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlBvcHVsYXRpb24gTGFiZWw8L2I+PC9lbT4nIHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTVEFOREFSRF9ESVNFQVNFX01PREVMX0xBQkVMX19QT1BVTEFUSU9OX0xBQkVMID0gRElTRUFTRV9NT0RFTF9MQUJFTF9fUE9QVUxBVElPTl9MQUJFTDsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5Qb3B1bGF0aW9uIE1vZGVsIExhYmVsPC9iPjwvZW0+JyByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU1RBTkRBUkRfRElTRUFTRV9NT0RFTF9MQUJFTF9fUE9QVUxBVElPTl9NT0RFTF9MQUJFTCA9IERJU0VBU0VfTU9ERUxfTEFCRUxfX1BPUFVMQVRJT05fTU9ERUxfTEFCRUw7CisKKwkvKioKKwkgKiBUaGUgbnVtYmVyIG9mIHN0cnVjdHVyYWwgZmVhdHVyZXMgb2YgdGhlICc8ZW0+RGlzZWFzZSBNb2RlbCBMYWJlbDwvZW0+JyBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTVEFOREFSRF9ESVNFQVNFX01PREVMX0xBQkVMX0ZFQVRVUkVfQ09VTlQgPSBESVNFQVNFX01PREVMX0xBQkVMX0ZFQVRVUkVfQ09VTlQgKyAwOworCisJLyoqCisJICogVGhlIG1ldGEgb2JqZWN0IGlkIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuaW1wbC5TSUxhYmVsSW1wbCA8ZW0+U0kgTGFiZWw8L2VtPn0nIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuaW1wbC5TSUxhYmVsSW1wbAorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLmltcGwuU3RhbmRhcmRQYWNrYWdlSW1wbCNnZXRTSUxhYmVsKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJaW50IFNJX0xBQkVMID0gMTI7CisKKwkvKioKKwkgKiBUaGUgbWV0YSBvYmplY3QgaWQgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5pbXBsLlNJUkxhYmVsSW1wbCA8ZW0+U0lSIExhYmVsPC9lbT59JyBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLmltcGwuU0lSTGFiZWxJbXBsCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuaW1wbC5TdGFuZGFyZFBhY2thZ2VJbXBsI2dldFNJUkxhYmVsKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJaW50IFNJUl9MQUJFTCA9IDE1OworCisJLyoqCisJICogVGhlIG1ldGEgb2JqZWN0IGlkIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuaW1wbC5TRUlSTGFiZWxJbXBsIDxlbT5TRUlSIExhYmVsPC9lbT59JyBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLmltcGwuU0VJUkxhYmVsSW1wbAorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLmltcGwuU3RhbmRhcmRQYWNrYWdlSW1wbCNnZXRTRUlSTGFiZWwoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlpbnQgU0VJUl9MQUJFTCA9IDg7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VVJJPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU0VJUl9MQUJFTF9fVVJJID0gU1RBTkRBUkRfRElTRUFTRV9NT0RFTF9MQUJFTF9fVVJJOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlR5cGUgVVJJPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU0VJUl9MQUJFTF9fVFlQRV9VUkkgPSBTVEFOREFSRF9ESVNFQVNFX01PREVMX0xBQkVMX19UWVBFX1VSSTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5EdWJsaW4gQ29yZTwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNFSVJfTEFCRUxfX0RVQkxJTl9DT1JFID0gU1RBTkRBUkRfRElTRUFTRV9NT0RFTF9MQUJFTF9fRFVCTElOX0NPUkU7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VVJJIE9mIElkZW50aWZpYWJsZSBUbyBCZSBMYWJlbGVkPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU0VJUl9MQUJFTF9fVVJJX09GX0lERU5USUZJQUJMRV9UT19CRV9MQUJFTEVEID0gU1RBTkRBUkRfRElTRUFTRV9NT0RFTF9MQUJFTF9fVVJJX09GX0lERU5USUZJQUJMRV9UT19CRV9MQUJFTEVEOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkN1cnJlbnQgVmFsdWU8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTRUlSX0xBQkVMX19DVVJSRU5UX1ZBTFVFID0gU1RBTkRBUkRfRElTRUFTRV9NT0RFTF9MQUJFTF9fQ1VSUkVOVF9WQUxVRTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5JZGVudGlmaWFibGU8L2I+PC9lbT4nIHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTRUlSX0xBQkVMX19JREVOVElGSUFCTEUgPSBTVEFOREFSRF9ESVNFQVNFX01PREVMX0xBQkVMX19JREVOVElGSUFCTEU7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+TmV4dCBWYWx1ZSBWYWxpZDwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNFSVJfTEFCRUxfX05FWFRfVkFMVUVfVkFMSUQgPSBTVEFOREFSRF9ESVNFQVNFX01PREVMX0xBQkVMX19ORVhUX1ZBTFVFX1ZBTElEOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPk5leHQgVmFsdWU8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTRUlSX0xBQkVMX19ORVhUX1ZBTFVFID0gU1RBTkRBUkRfRElTRUFTRV9NT0RFTF9MQUJFTF9fTkVYVF9WQUxVRTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5EZWNvcmF0b3I8L2I+PC9lbT4nIHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTRUlSX0xBQkVMX19ERUNPUkFUT1IgPSBTVEFOREFSRF9ESVNFQVNFX01PREVMX0xBQkVMX19ERUNPUkFUT1I7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+Tm9kZTwvYj48L2VtPicgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNFSVJfTEFCRUxfX05PREUgPSBTVEFOREFSRF9ESVNFQVNFX01PREVMX0xBQkVMX19OT0RFOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkRlbHRhIFZhbHVlPC9iPjwvZW0+JyByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU0VJUl9MQUJFTF9fREVMVEFfVkFMVUUgPSBTVEFOREFSRF9ESVNFQVNFX01PREVMX0xBQkVMX19ERUxUQV9WQUxVRTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5UZW1wIFZhbHVlPC9iPjwvZW0+JyByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU0VJUl9MQUJFTF9fVEVNUF9WQUxVRSA9IFNUQU5EQVJEX0RJU0VBU0VfTU9ERUxfTEFCRUxfX1RFTVBfVkFMVUU7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+UHJvYmUgVmFsdWU8L2I+PC9lbT4nIHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTRUlSX0xBQkVMX19QUk9CRV9WQUxVRSA9IFNUQU5EQVJEX0RJU0VBU0VfTU9ERUxfTEFCRUxfX1BST0JFX1ZBTFVFOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkVycm9yIFNjYWxlPC9iPjwvZW0+JyByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU0VJUl9MQUJFTF9fRVJST1JfU0NBTEUgPSBTVEFOREFSRF9ESVNFQVNFX01PREVMX0xBQkVMX19FUlJPUl9TQ0FMRTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5JZGVudGlmaWVyPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU0VJUl9MQUJFTF9fSURFTlRJRklFUiA9IFNUQU5EQVJEX0RJU0VBU0VfTU9ERUxfTEFCRUxfX0lERU5USUZJRVI7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+UG9wdWxhdGlvbiBMYWJlbDwvYj48L2VtPicgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNFSVJfTEFCRUxfX1BPUFVMQVRJT05fTEFCRUwgPSBTVEFOREFSRF9ESVNFQVNFX01PREVMX0xBQkVMX19QT1BVTEFUSU9OX0xBQkVMOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlBvcHVsYXRpb24gTW9kZWwgTGFiZWw8L2I+PC9lbT4nIHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTRUlSX0xBQkVMX19QT1BVTEFUSU9OX01PREVMX0xBQkVMID0gU1RBTkRBUkRfRElTRUFTRV9NT0RFTF9MQUJFTF9fUE9QVUxBVElPTl9NT0RFTF9MQUJFTDsKKworCS8qKgorCSAqIFRoZSBudW1iZXIgb2Ygc3RydWN0dXJhbCBmZWF0dXJlcyBvZiB0aGUgJzxlbT5TRUlSIExhYmVsPC9lbT4nIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNFSVJfTEFCRUxfRkVBVFVSRV9DT1VOVCA9IFNUQU5EQVJEX0RJU0VBU0VfTU9ERUxfTEFCRUxfRkVBVFVSRV9DT1VOVCArIDA7CisKKwkvKioKKwkgKiBUaGUgbWV0YSBvYmplY3QgaWQgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5pbXBsLlN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZUltcGwgPGVtPkRpc2Vhc2UgTW9kZWwgTGFiZWwgVmFsdWU8L2VtPn0nIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuaW1wbC5TdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsVmFsdWVJbXBsCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuaW1wbC5TdGFuZGFyZFBhY2thZ2VJbXBsI2dldFN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZSgpCisJICogQGdlbmVyYXRlZAorCSAqLworCWludCBTVEFOREFSRF9ESVNFQVNFX01PREVMX0xBQkVMX1ZBTFVFID0gMTk7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+QXJyaXZhbHM8L2I+PC9lbT4nIHJlZmVyZW5jZSBsaXN0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNUQU5EQVJEX0RJU0VBU0VfTU9ERUxfTEFCRUxfVkFMVUVfX0FSUklWQUxTID0gRElTRUFTRV9NT0RFTF9MQUJFTF9WQUxVRV9fQVJSSVZBTFM7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RGVwYXJ0dXJlczwvYj48L2VtPicgcmVmZXJlbmNlIGxpc3QuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU1RBTkRBUkRfRElTRUFTRV9NT0RFTF9MQUJFTF9WQUxVRV9fREVQQVJUVVJFUyA9IERJU0VBU0VfTU9ERUxfTEFCRUxfVkFMVUVfX0RFUEFSVFVSRVM7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+UG9wdWxhdGlvbiBDb3VudDwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNUQU5EQVJEX0RJU0VBU0VfTU9ERUxfTEFCRUxfVkFMVUVfX1BPUFVMQVRJT05fQ09VTlQgPSBESVNFQVNFX01PREVMX0xBQkVMX1ZBTFVFX19QT1BVTEFUSU9OX0NPVU5UOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlM8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTVEFOREFSRF9ESVNFQVNFX01PREVMX0xBQkVMX1ZBTFVFX19TID0gRElTRUFTRV9NT0RFTF9MQUJFTF9WQUxVRV9GRUFUVVJFX0NPVU5UICsgMDsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5JbmNpZGVuY2U8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTVEFOREFSRF9ESVNFQVNFX01PREVMX0xBQkVMX1ZBTFVFX19JTkNJREVOQ0UgPSBESVNFQVNFX01PREVMX0xBQkVMX1ZBTFVFX0ZFQVRVUkVfQ09VTlQgKyAxOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkRpc2Vhc2UgRGVhdGhzPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU1RBTkRBUkRfRElTRUFTRV9NT0RFTF9MQUJFTF9WQUxVRV9fRElTRUFTRV9ERUFUSFMgPSBESVNFQVNFX01PREVMX0xBQkVMX1ZBTFVFX0ZFQVRVUkVfQ09VTlQgKyAyOworCisJLyoqCisJICogVGhlIG51bWJlciBvZiBzdHJ1Y3R1cmFsIGZlYXR1cmVzIG9mIHRoZSAnPGVtPkRpc2Vhc2UgTW9kZWwgTGFiZWwgVmFsdWU8L2VtPicgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU1RBTkRBUkRfRElTRUFTRV9NT0RFTF9MQUJFTF9WQUxVRV9GRUFUVVJFX0NPVU5UID0gRElTRUFTRV9NT0RFTF9MQUJFTF9WQUxVRV9GRUFUVVJFX0NPVU5UICsgMzsKKworCS8qKgorCSAqIFRoZSBtZXRhIG9iamVjdCBpZCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLmltcGwuU0lMYWJlbFZhbHVlSW1wbCA8ZW0+U0kgTGFiZWwgVmFsdWU8L2VtPn0nIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuaW1wbC5TSUxhYmVsVmFsdWVJbXBsCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuaW1wbC5TdGFuZGFyZFBhY2thZ2VJbXBsI2dldFNJTGFiZWxWYWx1ZSgpCisJICogQGdlbmVyYXRlZAorCSAqLworCWludCBTSV9MQUJFTF9WQUxVRSA9IDEzOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkFycml2YWxzPC9iPjwvZW0+JyByZWZlcmVuY2UgbGlzdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTSV9MQUJFTF9WQUxVRV9fQVJSSVZBTFMgPSBTVEFOREFSRF9ESVNFQVNFX01PREVMX0xBQkVMX1ZBTFVFX19BUlJJVkFMUzsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5EZXBhcnR1cmVzPC9iPjwvZW0+JyByZWZlcmVuY2UgbGlzdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTSV9MQUJFTF9WQUxVRV9fREVQQVJUVVJFUyA9IFNUQU5EQVJEX0RJU0VBU0VfTU9ERUxfTEFCRUxfVkFMVUVfX0RFUEFSVFVSRVM7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+UG9wdWxhdGlvbiBDb3VudDwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNJX0xBQkVMX1ZBTFVFX19QT1BVTEFUSU9OX0NPVU5UID0gU1RBTkRBUkRfRElTRUFTRV9NT0RFTF9MQUJFTF9WQUxVRV9fUE9QVUxBVElPTl9DT1VOVDsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5TPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU0lfTEFCRUxfVkFMVUVfX1MgPSBTVEFOREFSRF9ESVNFQVNFX01PREVMX0xBQkVMX1ZBTFVFX19TOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkluY2lkZW5jZTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNJX0xBQkVMX1ZBTFVFX19JTkNJREVOQ0UgPSBTVEFOREFSRF9ESVNFQVNFX01PREVMX0xBQkVMX1ZBTFVFX19JTkNJREVOQ0U7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RGlzZWFzZSBEZWF0aHM8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTSV9MQUJFTF9WQUxVRV9fRElTRUFTRV9ERUFUSFMgPSBTVEFOREFSRF9ESVNFQVNFX01PREVMX0xBQkVMX1ZBTFVFX19ESVNFQVNFX0RFQVRIUzsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5JPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU0lfTEFCRUxfVkFMVUVfX0kgPSBTVEFOREFSRF9ESVNFQVNFX01PREVMX0xBQkVMX1ZBTFVFX0ZFQVRVUkVfQ09VTlQgKyAwOworCisJLyoqCisJICogVGhlIG51bWJlciBvZiBzdHJ1Y3R1cmFsIGZlYXR1cmVzIG9mIHRoZSAnPGVtPlNJIExhYmVsIFZhbHVlPC9lbT4nIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNJX0xBQkVMX1ZBTFVFX0ZFQVRVUkVfQ09VTlQgPSBTVEFOREFSRF9ESVNFQVNFX01PREVMX0xBQkVMX1ZBTFVFX0ZFQVRVUkVfQ09VTlQgKyAxOworCisJLyoqCisJICogVGhlIG1ldGEgb2JqZWN0IGlkIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuaW1wbC5TSVJMYWJlbFZhbHVlSW1wbCA8ZW0+U0lSIExhYmVsIFZhbHVlPC9lbT59JyBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLmltcGwuU0lSTGFiZWxWYWx1ZUltcGwKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5pbXBsLlN0YW5kYXJkUGFja2FnZUltcGwjZ2V0U0lSTGFiZWxWYWx1ZSgpCisJICogQGdlbmVyYXRlZAorCSAqLworCWludCBTSVJfTEFCRUxfVkFMVUUgPSAxNjsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5BcnJpdmFsczwvYj48L2VtPicgcmVmZXJlbmNlIGxpc3QuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU0lSX0xBQkVMX1ZBTFVFX19BUlJJVkFMUyA9IFNJX0xBQkVMX1ZBTFVFX19BUlJJVkFMUzsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5EZXBhcnR1cmVzPC9iPjwvZW0+JyByZWZlcmVuY2UgbGlzdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTSVJfTEFCRUxfVkFMVUVfX0RFUEFSVFVSRVMgPSBTSV9MQUJFTF9WQUxVRV9fREVQQVJUVVJFUzsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5Qb3B1bGF0aW9uIENvdW50PC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU0lSX0xBQkVMX1ZBTFVFX19QT1BVTEFUSU9OX0NPVU5UID0gU0lfTEFCRUxfVkFMVUVfX1BPUFVMQVRJT05fQ09VTlQ7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+UzwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNJUl9MQUJFTF9WQUxVRV9fUyA9IFNJX0xBQkVMX1ZBTFVFX19TOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkluY2lkZW5jZTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNJUl9MQUJFTF9WQUxVRV9fSU5DSURFTkNFID0gU0lfTEFCRUxfVkFMVUVfX0lOQ0lERU5DRTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5EaXNlYXNlIERlYXRoczwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNJUl9MQUJFTF9WQUxVRV9fRElTRUFTRV9ERUFUSFMgPSBTSV9MQUJFTF9WQUxVRV9fRElTRUFTRV9ERUFUSFM7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+STwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNJUl9MQUJFTF9WQUxVRV9fSSA9IFNJX0xBQkVMX1ZBTFVFX19JOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlI8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTSVJfTEFCRUxfVkFMVUVfX1IgPSBTSV9MQUJFTF9WQUxVRV9GRUFUVVJFX0NPVU5UICsgMDsKKworCS8qKgorCSAqIFRoZSBudW1iZXIgb2Ygc3RydWN0dXJhbCBmZWF0dXJlcyBvZiB0aGUgJzxlbT5TSVIgTGFiZWwgVmFsdWU8L2VtPicgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU0lSX0xBQkVMX1ZBTFVFX0ZFQVRVUkVfQ09VTlQgPSBTSV9MQUJFTF9WQUxVRV9GRUFUVVJFX0NPVU5UICsgMTsKKworCS8qKgorCSAqIFRoZSBtZXRhIG9iamVjdCBpZCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLmltcGwuU0VJUkxhYmVsVmFsdWVJbXBsIDxlbT5TRUlSIExhYmVsIFZhbHVlPC9lbT59JyBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLmltcGwuU0VJUkxhYmVsVmFsdWVJbXBsCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuaW1wbC5TdGFuZGFyZFBhY2thZ2VJbXBsI2dldFNFSVJMYWJlbFZhbHVlKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJaW50IFNFSVJfTEFCRUxfVkFMVUUgPSA5OworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkFycml2YWxzPC9iPjwvZW0+JyByZWZlcmVuY2UgbGlzdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTRUlSX0xBQkVMX1ZBTFVFX19BUlJJVkFMUyA9IFNJUl9MQUJFTF9WQUxVRV9fQVJSSVZBTFM7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RGVwYXJ0dXJlczwvYj48L2VtPicgcmVmZXJlbmNlIGxpc3QuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU0VJUl9MQUJFTF9WQUxVRV9fREVQQVJUVVJFUyA9IFNJUl9MQUJFTF9WQUxVRV9fREVQQVJUVVJFUzsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5Qb3B1bGF0aW9uIENvdW50PC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU0VJUl9MQUJFTF9WQUxVRV9fUE9QVUxBVElPTl9DT1VOVCA9IFNJUl9MQUJFTF9WQUxVRV9fUE9QVUxBVElPTl9DT1VOVDsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5TPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU0VJUl9MQUJFTF9WQUxVRV9fUyA9IFNJUl9MQUJFTF9WQUxVRV9fUzsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5JbmNpZGVuY2U8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTRUlSX0xBQkVMX1ZBTFVFX19JTkNJREVOQ0UgPSBTSVJfTEFCRUxfVkFMVUVfX0lOQ0lERU5DRTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5EaXNlYXNlIERlYXRoczwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNFSVJfTEFCRUxfVkFMVUVfX0RJU0VBU0VfREVBVEhTID0gU0lSX0xBQkVMX1ZBTFVFX19ESVNFQVNFX0RFQVRIUzsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5JPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU0VJUl9MQUJFTF9WQUxVRV9fSSA9IFNJUl9MQUJFTF9WQUxVRV9fSTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5SPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU0VJUl9MQUJFTF9WQUxVRV9fUiA9IFNJUl9MQUJFTF9WQUxVRV9fUjsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5FPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU0VJUl9MQUJFTF9WQUxVRV9fRSA9IFNJUl9MQUJFTF9WQUxVRV9GRUFUVVJFX0NPVU5UICsgMDsKKworCS8qKgorCSAqIFRoZSBudW1iZXIgb2Ygc3RydWN0dXJhbCBmZWF0dXJlcyBvZiB0aGUgJzxlbT5TRUlSIExhYmVsIFZhbHVlPC9lbT4nIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNFSVJfTEFCRUxfVkFMVUVfRkVBVFVSRV9DT1VOVCA9IFNJUl9MQUJFTF9WQUxVRV9GRUFUVVJFX0NPVU5UICsgMTsKKworCS8qKgorCSAqIFRoZSBtZXRhIG9iamVjdCBpZCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLmltcGwuU3RhbmRhcmRJbmZlY3RvckltcGwgPGVtPkluZmVjdG9yPC9lbT59JyBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLmltcGwuU3RhbmRhcmRJbmZlY3RvckltcGwKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5pbXBsLlN0YW5kYXJkUGFja2FnZUltcGwjZ2V0U3RhbmRhcmRJbmZlY3RvcigpCisJICogQGdlbmVyYXRlZAorCSAqLworCWludCBTVEFOREFSRF9JTkZFQ1RPUiA9IDIwOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlVSSTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNUQU5EQVJEX0lORkVDVE9SX19VUkkgPSBJTkZFQ1RPUl9fVVJJOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlR5cGUgVVJJPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU1RBTkRBUkRfSU5GRUNUT1JfX1RZUEVfVVJJID0gSU5GRUNUT1JfX1RZUEVfVVJJOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkR1YmxpbiBDb3JlPC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU1RBTkRBUkRfSU5GRUNUT1JfX0RVQkxJTl9DT1JFID0gSU5GRUNUT1JfX0RVQkxJTl9DT1JFOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkxhYmVscyBUbyBVcGRhdGU8L2I+PC9lbT4nIHJlZmVyZW5jZSBsaXN0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNUQU5EQVJEX0lORkVDVE9SX19MQUJFTFNfVE9fVVBEQVRFID0gSU5GRUNUT1JfX0xBQkVMU19UT19VUERBVEU7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+R3JhcGg8L2I+PC9lbT4nIGNvbnRhaW5lciByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU1RBTkRBUkRfSU5GRUNUT1JfX0dSQVBIID0gSU5GRUNUT1JfX0dSQVBIOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkVuYWJsZWQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTVEFOREFSRF9JTkZFQ1RPUl9fRU5BQkxFRCA9IElORkVDVE9SX19FTkFCTEVEOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkdyYXBoIERlY29yYXRlZDwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNUQU5EQVJEX0lORkVDVE9SX19HUkFQSF9ERUNPUkFURUQgPSBJTkZFQ1RPUl9fR1JBUEhfREVDT1JBVEVEOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlByb2dyZXNzPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU1RBTkRBUkRfSU5GRUNUT1JfX1BST0dSRVNTID0gSU5GRUNUT1JfX1BST0dSRVNTOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkRpc2Vhc2UgTW9kZWw8L2I+PC9lbT4nIHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTVEFOREFSRF9JTkZFQ1RPUl9fRElTRUFTRV9NT0RFTCA9IElORkVDVE9SX19ESVNFQVNFX01PREVMOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlRhcmdldCBVUkk8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTVEFOREFSRF9JTkZFQ1RPUl9fVEFSR0VUX1VSSSA9IElORkVDVE9SX19UQVJHRVRfVVJJOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkRpc2Vhc2UgTmFtZTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNUQU5EQVJEX0lORkVDVE9SX19ESVNFQVNFX05BTUUgPSBJTkZFQ1RPUl9fRElTRUFTRV9OQU1FOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlRhcmdldCBJU08gS2V5PC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU1RBTkRBUkRfSU5GRUNUT1JfX1RBUkdFVF9JU09fS0VZID0gSU5GRUNUT1JfX1RBUkdFVF9JU09fS0VZOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkxhYmVscyBUbyBJbmZlY3Q8L2I+PC9lbT4nIHJlZmVyZW5jZSBsaXN0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNUQU5EQVJEX0lORkVDVE9SX19MQUJFTFNfVE9fSU5GRUNUID0gSU5GRUNUT1JfX0xBQkVMU19UT19JTkZFQ1Q7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+UG9wdWxhdGlvbiBJZGVudGlmaWVyPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU1RBTkRBUkRfSU5GRUNUT1JfX1BPUFVMQVRJT05fSURFTlRJRklFUiA9IElORkVDVE9SX19QT1BVTEFUSU9OX0lERU5USUZJRVI7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+SW5mZWN0IFBlcmNlbnRhZ2U8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTVEFOREFSRF9JTkZFQ1RPUl9fSU5GRUNUX1BFUkNFTlRBR0UgPSBJTkZFQ1RPUl9fSU5GRUNUX1BFUkNFTlRBR0U7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VGFyZ2V0IEZlYXR1cmU8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTVEFOREFSRF9JTkZFQ1RPUl9fVEFSR0VUX0ZFQVRVUkUgPSBJTkZFQ1RPUl9fVEFSR0VUX0ZFQVRVUkU7CisKKwkvKioKKwkgKiBUaGUgbnVtYmVyIG9mIHN0cnVjdHVyYWwgZmVhdHVyZXMgb2YgdGhlICc8ZW0+SW5mZWN0b3I8L2VtPicgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU1RBTkRBUkRfSU5GRUNUT1JfRkVBVFVSRV9DT1VOVCA9IElORkVDVE9SX0ZFQVRVUkVfQ09VTlQgKyAwOworCisJLyoqCisJICogVGhlIG1ldGEgb2JqZWN0IGlkIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuaW1wbC5TSUluZmVjdG9ySW1wbCA8ZW0+U0kgSW5mZWN0b3I8L2VtPn0nIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuaW1wbC5TSUluZmVjdG9ySW1wbAorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLmltcGwuU3RhbmRhcmRQYWNrYWdlSW1wbCNnZXRTSUluZmVjdG9yKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJaW50IFNJX0lORkVDVE9SID0gMTE7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VVJJPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU0lfSU5GRUNUT1JfX1VSSSA9IFNUQU5EQVJEX0lORkVDVE9SX19VUkk7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VHlwZSBVUkk8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTSV9JTkZFQ1RPUl9fVFlQRV9VUkkgPSBTVEFOREFSRF9JTkZFQ1RPUl9fVFlQRV9VUkk7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RHVibGluIENvcmU8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTSV9JTkZFQ1RPUl9fRFVCTElOX0NPUkUgPSBTVEFOREFSRF9JTkZFQ1RPUl9fRFVCTElOX0NPUkU7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+TGFiZWxzIFRvIFVwZGF0ZTwvYj48L2VtPicgcmVmZXJlbmNlIGxpc3QuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU0lfSU5GRUNUT1JfX0xBQkVMU19UT19VUERBVEUgPSBTVEFOREFSRF9JTkZFQ1RPUl9fTEFCRUxTX1RPX1VQREFURTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5HcmFwaDwvYj48L2VtPicgY29udGFpbmVyIHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTSV9JTkZFQ1RPUl9fR1JBUEggPSBTVEFOREFSRF9JTkZFQ1RPUl9fR1JBUEg7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RW5hYmxlZDwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNJX0lORkVDVE9SX19FTkFCTEVEID0gU1RBTkRBUkRfSU5GRUNUT1JfX0VOQUJMRUQ7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+R3JhcGggRGVjb3JhdGVkPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU0lfSU5GRUNUT1JfX0dSQVBIX0RFQ09SQVRFRCA9IFNUQU5EQVJEX0lORkVDVE9SX19HUkFQSF9ERUNPUkFURUQ7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+UHJvZ3Jlc3M8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTSV9JTkZFQ1RPUl9fUFJPR1JFU1MgPSBTVEFOREFSRF9JTkZFQ1RPUl9fUFJPR1JFU1M7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RGlzZWFzZSBNb2RlbDwvYj48L2VtPicgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNJX0lORkVDVE9SX19ESVNFQVNFX01PREVMID0gU1RBTkRBUkRfSU5GRUNUT1JfX0RJU0VBU0VfTU9ERUw7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VGFyZ2V0IFVSSTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNJX0lORkVDVE9SX19UQVJHRVRfVVJJID0gU1RBTkRBUkRfSU5GRUNUT1JfX1RBUkdFVF9VUkk7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RGlzZWFzZSBOYW1lPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU0lfSU5GRUNUT1JfX0RJU0VBU0VfTkFNRSA9IFNUQU5EQVJEX0lORkVDVE9SX19ESVNFQVNFX05BTUU7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VGFyZ2V0IElTTyBLZXk8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTSV9JTkZFQ1RPUl9fVEFSR0VUX0lTT19LRVkgPSBTVEFOREFSRF9JTkZFQ1RPUl9fVEFSR0VUX0lTT19LRVk7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+TGFiZWxzIFRvIEluZmVjdDwvYj48L2VtPicgcmVmZXJlbmNlIGxpc3QuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU0lfSU5GRUNUT1JfX0xBQkVMU19UT19JTkZFQ1QgPSBTVEFOREFSRF9JTkZFQ1RPUl9fTEFCRUxTX1RPX0lORkVDVDsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5Qb3B1bGF0aW9uIElkZW50aWZpZXI8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTSV9JTkZFQ1RPUl9fUE9QVUxBVElPTl9JREVOVElGSUVSID0gU1RBTkRBUkRfSU5GRUNUT1JfX1BPUFVMQVRJT05fSURFTlRJRklFUjsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5JbmZlY3QgUGVyY2VudGFnZTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNJX0lORkVDVE9SX19JTkZFQ1RfUEVSQ0VOVEFHRSA9IFNUQU5EQVJEX0lORkVDVE9SX19JTkZFQ1RfUEVSQ0VOVEFHRTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5UYXJnZXQgRmVhdHVyZTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNJX0lORkVDVE9SX19UQVJHRVRfRkVBVFVSRSA9IFNUQU5EQVJEX0lORkVDVE9SX19UQVJHRVRfRkVBVFVSRTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5JbmZlY3Rpb3VzIENvdW50PC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU0lfSU5GRUNUT1JfX0lORkVDVElPVVNfQ09VTlQgPSBTVEFOREFSRF9JTkZFQ1RPUl9GRUFUVVJFX0NPVU5UICsgMDsKKworCS8qKgorCSAqIFRoZSBudW1iZXIgb2Ygc3RydWN0dXJhbCBmZWF0dXJlcyBvZiB0aGUgJzxlbT5TSSBJbmZlY3RvcjwvZW0+JyBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTSV9JTkZFQ1RPUl9GRUFUVVJFX0NPVU5UID0gU1RBTkRBUkRfSU5GRUNUT1JfRkVBVFVSRV9DT1VOVCArIDE7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VVJJPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU0lfTEFCRUxfX1VSSSA9IFNUQU5EQVJEX0RJU0VBU0VfTU9ERUxfTEFCRUxfX1VSSTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5UeXBlIFVSSTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNJX0xBQkVMX19UWVBFX1VSSSA9IFNUQU5EQVJEX0RJU0VBU0VfTU9ERUxfTEFCRUxfX1RZUEVfVVJJOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkR1YmxpbiBDb3JlPC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU0lfTEFCRUxfX0RVQkxJTl9DT1JFID0gU1RBTkRBUkRfRElTRUFTRV9NT0RFTF9MQUJFTF9fRFVCTElOX0NPUkU7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VVJJIE9mIElkZW50aWZpYWJsZSBUbyBCZSBMYWJlbGVkPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU0lfTEFCRUxfX1VSSV9PRl9JREVOVElGSUFCTEVfVE9fQkVfTEFCRUxFRCA9IFNUQU5EQVJEX0RJU0VBU0VfTU9ERUxfTEFCRUxfX1VSSV9PRl9JREVOVElGSUFCTEVfVE9fQkVfTEFCRUxFRDsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5DdXJyZW50IFZhbHVlPC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU0lfTEFCRUxfX0NVUlJFTlRfVkFMVUUgPSBTVEFOREFSRF9ESVNFQVNFX01PREVMX0xBQkVMX19DVVJSRU5UX1ZBTFVFOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPklkZW50aWZpYWJsZTwvYj48L2VtPicgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNJX0xBQkVMX19JREVOVElGSUFCTEUgPSBTVEFOREFSRF9ESVNFQVNFX01PREVMX0xBQkVMX19JREVOVElGSUFCTEU7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+TmV4dCBWYWx1ZSBWYWxpZDwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNJX0xBQkVMX19ORVhUX1ZBTFVFX1ZBTElEID0gU1RBTkRBUkRfRElTRUFTRV9NT0RFTF9MQUJFTF9fTkVYVF9WQUxVRV9WQUxJRDsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5OZXh0IFZhbHVlPC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU0lfTEFCRUxfX05FWFRfVkFMVUUgPSBTVEFOREFSRF9ESVNFQVNFX01PREVMX0xBQkVMX19ORVhUX1ZBTFVFOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkRlY29yYXRvcjwvYj48L2VtPicgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNJX0xBQkVMX19ERUNPUkFUT1IgPSBTVEFOREFSRF9ESVNFQVNFX01PREVMX0xBQkVMX19ERUNPUkFUT1I7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+Tm9kZTwvYj48L2VtPicgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNJX0xBQkVMX19OT0RFID0gU1RBTkRBUkRfRElTRUFTRV9NT0RFTF9MQUJFTF9fTk9ERTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5EZWx0YSBWYWx1ZTwvYj48L2VtPicgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNJX0xBQkVMX19ERUxUQV9WQUxVRSA9IFNUQU5EQVJEX0RJU0VBU0VfTU9ERUxfTEFCRUxfX0RFTFRBX1ZBTFVFOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlRlbXAgVmFsdWU8L2I+PC9lbT4nIHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTSV9MQUJFTF9fVEVNUF9WQUxVRSA9IFNUQU5EQVJEX0RJU0VBU0VfTU9ERUxfTEFCRUxfX1RFTVBfVkFMVUU7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+UHJvYmUgVmFsdWU8L2I+PC9lbT4nIHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTSV9MQUJFTF9fUFJPQkVfVkFMVUUgPSBTVEFOREFSRF9ESVNFQVNFX01PREVMX0xBQkVMX19QUk9CRV9WQUxVRTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5FcnJvciBTY2FsZTwvYj48L2VtPicgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNJX0xBQkVMX19FUlJPUl9TQ0FMRSA9IFNUQU5EQVJEX0RJU0VBU0VfTU9ERUxfTEFCRUxfX0VSUk9SX1NDQUxFOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPklkZW50aWZpZXI8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTSV9MQUJFTF9fSURFTlRJRklFUiA9IFNUQU5EQVJEX0RJU0VBU0VfTU9ERUxfTEFCRUxfX0lERU5USUZJRVI7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+UG9wdWxhdGlvbiBMYWJlbDwvYj48L2VtPicgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNJX0xBQkVMX19QT1BVTEFUSU9OX0xBQkVMID0gU1RBTkRBUkRfRElTRUFTRV9NT0RFTF9MQUJFTF9fUE9QVUxBVElPTl9MQUJFTDsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5Qb3B1bGF0aW9uIE1vZGVsIExhYmVsPC9iPjwvZW0+JyByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU0lfTEFCRUxfX1BPUFVMQVRJT05fTU9ERUxfTEFCRUwgPSBTVEFOREFSRF9ESVNFQVNFX01PREVMX0xBQkVMX19QT1BVTEFUSU9OX01PREVMX0xBQkVMOworCisJLyoqCisJICogVGhlIG51bWJlciBvZiBzdHJ1Y3R1cmFsIGZlYXR1cmVzIG9mIHRoZSAnPGVtPlNJIExhYmVsPC9lbT4nIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNJX0xBQkVMX0ZFQVRVUkVfQ09VTlQgPSBTVEFOREFSRF9ESVNFQVNFX01PREVMX0xBQkVMX0ZFQVRVUkVfQ09VTlQgKyAwOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlVSSTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNJUl9MQUJFTF9fVVJJID0gU1RBTkRBUkRfRElTRUFTRV9NT0RFTF9MQUJFTF9fVVJJOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlR5cGUgVVJJPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU0lSX0xBQkVMX19UWVBFX1VSSSA9IFNUQU5EQVJEX0RJU0VBU0VfTU9ERUxfTEFCRUxfX1RZUEVfVVJJOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkR1YmxpbiBDb3JlPC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU0lSX0xBQkVMX19EVUJMSU5fQ09SRSA9IFNUQU5EQVJEX0RJU0VBU0VfTU9ERUxfTEFCRUxfX0RVQkxJTl9DT1JFOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlVSSSBPZiBJZGVudGlmaWFibGUgVG8gQmUgTGFiZWxlZDwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNJUl9MQUJFTF9fVVJJX09GX0lERU5USUZJQUJMRV9UT19CRV9MQUJFTEVEID0gU1RBTkRBUkRfRElTRUFTRV9NT0RFTF9MQUJFTF9fVVJJX09GX0lERU5USUZJQUJMRV9UT19CRV9MQUJFTEVEOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkN1cnJlbnQgVmFsdWU8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTSVJfTEFCRUxfX0NVUlJFTlRfVkFMVUUgPSBTVEFOREFSRF9ESVNFQVNFX01PREVMX0xBQkVMX19DVVJSRU5UX1ZBTFVFOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPklkZW50aWZpYWJsZTwvYj48L2VtPicgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNJUl9MQUJFTF9fSURFTlRJRklBQkxFID0gU1RBTkRBUkRfRElTRUFTRV9NT0RFTF9MQUJFTF9fSURFTlRJRklBQkxFOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPk5leHQgVmFsdWUgVmFsaWQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTSVJfTEFCRUxfX05FWFRfVkFMVUVfVkFMSUQgPSBTVEFOREFSRF9ESVNFQVNFX01PREVMX0xBQkVMX19ORVhUX1ZBTFVFX1ZBTElEOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPk5leHQgVmFsdWU8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTSVJfTEFCRUxfX05FWFRfVkFMVUUgPSBTVEFOREFSRF9ESVNFQVNFX01PREVMX0xBQkVMX19ORVhUX1ZBTFVFOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkRlY29yYXRvcjwvYj48L2VtPicgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNJUl9MQUJFTF9fREVDT1JBVE9SID0gU1RBTkRBUkRfRElTRUFTRV9NT0RFTF9MQUJFTF9fREVDT1JBVE9SOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPk5vZGU8L2I+PC9lbT4nIHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTSVJfTEFCRUxfX05PREUgPSBTVEFOREFSRF9ESVNFQVNFX01PREVMX0xBQkVMX19OT0RFOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkRlbHRhIFZhbHVlPC9iPjwvZW0+JyByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU0lSX0xBQkVMX19ERUxUQV9WQUxVRSA9IFNUQU5EQVJEX0RJU0VBU0VfTU9ERUxfTEFCRUxfX0RFTFRBX1ZBTFVFOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlRlbXAgVmFsdWU8L2I+PC9lbT4nIHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTSVJfTEFCRUxfX1RFTVBfVkFMVUUgPSBTVEFOREFSRF9ESVNFQVNFX01PREVMX0xBQkVMX19URU1QX1ZBTFVFOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlByb2JlIFZhbHVlPC9iPjwvZW0+JyByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU0lSX0xBQkVMX19QUk9CRV9WQUxVRSA9IFNUQU5EQVJEX0RJU0VBU0VfTU9ERUxfTEFCRUxfX1BST0JFX1ZBTFVFOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkVycm9yIFNjYWxlPC9iPjwvZW0+JyByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU0lSX0xBQkVMX19FUlJPUl9TQ0FMRSA9IFNUQU5EQVJEX0RJU0VBU0VfTU9ERUxfTEFCRUxfX0VSUk9SX1NDQUxFOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPklkZW50aWZpZXI8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTSVJfTEFCRUxfX0lERU5USUZJRVIgPSBTVEFOREFSRF9ESVNFQVNFX01PREVMX0xBQkVMX19JREVOVElGSUVSOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlBvcHVsYXRpb24gTGFiZWw8L2I+PC9lbT4nIHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTSVJfTEFCRUxfX1BPUFVMQVRJT05fTEFCRUwgPSBTVEFOREFSRF9ESVNFQVNFX01PREVMX0xBQkVMX19QT1BVTEFUSU9OX0xBQkVMOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlBvcHVsYXRpb24gTW9kZWwgTGFiZWw8L2I+PC9lbT4nIHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTSVJfTEFCRUxfX1BPUFVMQVRJT05fTU9ERUxfTEFCRUwgPSBTVEFOREFSRF9ESVNFQVNFX01PREVMX0xBQkVMX19QT1BVTEFUSU9OX01PREVMX0xBQkVMOworCisJLyoqCisJICogVGhlIG51bWJlciBvZiBzdHJ1Y3R1cmFsIGZlYXR1cmVzIG9mIHRoZSAnPGVtPlNJUiBMYWJlbDwvZW0+JyBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTSVJfTEFCRUxfRkVBVFVSRV9DT1VOVCA9IFNUQU5EQVJEX0RJU0VBU0VfTU9ERUxfTEFCRUxfRkVBVFVSRV9DT1VOVCArIDA7CisKKwkvKioKKwkgKiBUaGUgbWV0YSBvYmplY3QgaWQgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5pbXBsLlN0b2NoYXN0aWNTRUlSRGlzZWFzZU1vZGVsSW1wbCA8ZW0+U3RvY2hhc3RpYyBTRUlSIERpc2Vhc2UgTW9kZWw8L2VtPn0nIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuaW1wbC5TdG9jaGFzdGljU0VJUkRpc2Vhc2VNb2RlbEltcGwKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5pbXBsLlN0YW5kYXJkUGFja2FnZUltcGwjZ2V0U3RvY2hhc3RpY1NFSVJEaXNlYXNlTW9kZWwoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlpbnQgU1RPQ0hBU1RJQ19TRUlSX0RJU0VBU0VfTU9ERUwgPSAyMTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5VUkk8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTVE9DSEFTVElDX1NFSVJfRElTRUFTRV9NT0RFTF9fVVJJID0gU0VJUl9fVVJJOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlR5cGUgVVJJPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU1RPQ0hBU1RJQ19TRUlSX0RJU0VBU0VfTU9ERUxfX1RZUEVfVVJJID0gU0VJUl9fVFlQRV9VUkk7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RHVibGluIENvcmU8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTVE9DSEFTVElDX1NFSVJfRElTRUFTRV9NT0RFTF9fRFVCTElOX0NPUkUgPSBTRUlSX19EVUJMSU5fQ09SRTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5MYWJlbHMgVG8gVXBkYXRlPC9iPjwvZW0+JyByZWZlcmVuY2UgbGlzdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTVE9DSEFTVElDX1NFSVJfRElTRUFTRV9NT0RFTF9fTEFCRUxTX1RPX1VQREFURSA9IFNFSVJfX0xBQkVMU19UT19VUERBVEU7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+R3JhcGg8L2I+PC9lbT4nIGNvbnRhaW5lciByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU1RPQ0hBU1RJQ19TRUlSX0RJU0VBU0VfTU9ERUxfX0dSQVBIID0gU0VJUl9fR1JBUEg7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RW5hYmxlZDwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNUT0NIQVNUSUNfU0VJUl9ESVNFQVNFX01PREVMX19FTkFCTEVEID0gU0VJUl9fRU5BQkxFRDsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5HcmFwaCBEZWNvcmF0ZWQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTVE9DSEFTVElDX1NFSVJfRElTRUFTRV9NT0RFTF9fR1JBUEhfREVDT1JBVEVEID0gU0VJUl9fR1JBUEhfREVDT1JBVEVEOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlByb2dyZXNzPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU1RPQ0hBU1RJQ19TRUlSX0RJU0VBU0VfTU9ERUxfX1BST0dSRVNTID0gU0VJUl9fUFJPR1JFU1M7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+UG9wdWxhdGlvbiBJZGVudGlmaWVyPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU1RPQ0hBU1RJQ19TRUlSX0RJU0VBU0VfTU9ERUxfX1BPUFVMQVRJT05fSURFTlRJRklFUiA9IFNFSVJfX1BPUFVMQVRJT05fSURFTlRJRklFUjsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5UaW1lIFBlcmlvZDwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNUT0NIQVNUSUNfU0VJUl9ESVNFQVNFX01PREVMX19USU1FX1BFUklPRCA9IFNFSVJfX1RJTUVfUEVSSU9EOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkRpc2Vhc2UgTmFtZTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNUT0NIQVNUSUNfU0VJUl9ESVNFQVNFX01PREVMX19ESVNFQVNFX05BTUUgPSBTRUlSX19ESVNFQVNFX05BTUU7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RmluaXRlIERpZmZlcmVuY2U8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTVE9DSEFTVElDX1NFSVJfRElTRUFTRV9NT0RFTF9fRklOSVRFX0RJRkZFUkVOQ0UgPSBTRUlSX19GSU5JVEVfRElGRkVSRU5DRTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5GcmVxdWVuY3kgRGVwZW5kZW50PC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU1RPQ0hBU1RJQ19TRUlSX0RJU0VBU0VfTU9ERUxfX0ZSRVFVRU5DWV9ERVBFTkRFTlQgPSBTRUlSX19GUkVRVUVOQ1lfREVQRU5ERU5UOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlJlZmVyZW5jZSBQb3B1bGF0aW9uIERlbnNpdHk8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTVE9DSEFTVElDX1NFSVJfRElTRUFTRV9NT0RFTF9fUkVGRVJFTkNFX1BPUFVMQVRJT05fREVOU0lUWSA9IFNFSVJfX1JFRkVSRU5DRV9QT1BVTEFUSU9OX0RFTlNJVFk7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+Um9hZCBOZXR3b3JrIEluZmVjdGlvdXMgUHJvcG9ydGlvbjwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNUT0NIQVNUSUNfU0VJUl9ESVNFQVNFX01PREVMX19ST0FEX05FVFdPUktfSU5GRUNUSU9VU19QUk9QT1JUSU9OID0gU0VJUl9fUk9BRF9ORVRXT1JLX0lORkVDVElPVVNfUFJPUE9SVElPTjsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5DaGFyYWN0ZXJpc3RpYyBNaXhpbmcgRGlzdGFuY2U8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTVE9DSEFTVElDX1NFSVJfRElTRUFTRV9NT0RFTF9fQ0hBUkFDVEVSSVNUSUNfTUlYSU5HX0RJU1RBTkNFID0gU0VJUl9fQ0hBUkFDVEVSSVNUSUNfTUlYSU5HX0RJU1RBTkNFOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlRyYW5zbWlzc2lvbiBSYXRlPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU1RPQ0hBU1RJQ19TRUlSX0RJU0VBU0VfTU9ERUxfX1RSQU5TTUlTU0lPTl9SQVRFID0gU0VJUl9fVFJBTlNNSVNTSU9OX1JBVEU7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+Tm9uIExpbmVhcml0eSBDb2VmZmljaWVudDwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNUT0NIQVNUSUNfU0VJUl9ESVNFQVNFX01PREVMX19OT05fTElORUFSSVRZX0NPRUZGSUNJRU5UID0gU0VJUl9fTk9OX0xJTkVBUklUWV9DT0VGRklDSUVOVDsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5SZWNvdmVyeSBSYXRlPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU1RPQ0hBU1RJQ19TRUlSX0RJU0VBU0VfTU9ERUxfX1JFQ09WRVJZX1JBVEUgPSBTRUlSX19SRUNPVkVSWV9SQVRFOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkluZmVjdGlvdXMgTW9ydGFsaXR5IFJhdGU8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTVE9DSEFTVElDX1NFSVJfRElTRUFTRV9NT0RFTF9fSU5GRUNUSU9VU19NT1JUQUxJVFlfUkFURSA9IFNFSVJfX0lORkVDVElPVVNfTU9SVEFMSVRZX1JBVEU7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+SW1tdW5pdHkgTG9zcyBSYXRlPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU1RPQ0hBU1RJQ19TRUlSX0RJU0VBU0VfTU9ERUxfX0lNTVVOSVRZX0xPU1NfUkFURSA9IFNFSVJfX0lNTVVOSVRZX0xPU1NfUkFURTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5JbmN1YmF0aW9uIFJhdGU8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTVE9DSEFTVElDX1NFSVJfRElTRUFTRV9NT0RFTF9fSU5DVUJBVElPTl9SQVRFID0gU0VJUl9fSU5DVUJBVElPTl9SQVRFOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlNlZWQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTVE9DSEFTVElDX1NFSVJfRElTRUFTRV9NT0RFTF9fU0VFRCA9IFNFSVJfRkVBVFVSRV9DT1VOVCArIDA7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+UmFuZG9tIEdlbmVyYXRvcjwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNUT0NIQVNUSUNfU0VJUl9ESVNFQVNFX01PREVMX19SQU5ET01fR0VORVJBVE9SID0gU0VJUl9GRUFUVVJFX0NPVU5UICsgMTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5HYWluPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU1RPQ0hBU1RJQ19TRUlSX0RJU0VBU0VfTU9ERUxfX0dBSU4gPSBTRUlSX0ZFQVRVUkVfQ09VTlQgKyAyOworCisJLyoqCisJICogVGhlIG51bWJlciBvZiBzdHJ1Y3R1cmFsIGZlYXR1cmVzIG9mIHRoZSAnPGVtPlN0b2NoYXN0aWMgU0VJUiBEaXNlYXNlIE1vZGVsPC9lbT4nIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNUT0NIQVNUSUNfU0VJUl9ESVNFQVNFX01PREVMX0ZFQVRVUkVfQ09VTlQgPSBTRUlSX0ZFQVRVUkVfQ09VTlQgKyAzOworCisJLyoqCisJICogVGhlIG1ldGEgb2JqZWN0IGlkIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuaW1wbC5TdG9jaGFzdGljU0lEaXNlYXNlTW9kZWxJbXBsIDxlbT5TdG9jaGFzdGljIFNJIERpc2Vhc2UgTW9kZWw8L2VtPn0nIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuaW1wbC5TdG9jaGFzdGljU0lEaXNlYXNlTW9kZWxJbXBsCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuaW1wbC5TdGFuZGFyZFBhY2thZ2VJbXBsI2dldFN0b2NoYXN0aWNTSURpc2Vhc2VNb2RlbCgpCisJICogQGdlbmVyYXRlZAorCSAqLworCWludCBTVE9DSEFTVElDX1NJX0RJU0VBU0VfTU9ERUwgPSAyMjsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5VUkk8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTVE9DSEFTVElDX1NJX0RJU0VBU0VfTU9ERUxfX1VSSSA9IFNJX19VUkk7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VHlwZSBVUkk8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTVE9DSEFTVElDX1NJX0RJU0VBU0VfTU9ERUxfX1RZUEVfVVJJID0gU0lfX1RZUEVfVVJJOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkR1YmxpbiBDb3JlPC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU1RPQ0hBU1RJQ19TSV9ESVNFQVNFX01PREVMX19EVUJMSU5fQ09SRSA9IFNJX19EVUJMSU5fQ09SRTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5MYWJlbHMgVG8gVXBkYXRlPC9iPjwvZW0+JyByZWZlcmVuY2UgbGlzdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTVE9DSEFTVElDX1NJX0RJU0VBU0VfTU9ERUxfX0xBQkVMU19UT19VUERBVEUgPSBTSV9fTEFCRUxTX1RPX1VQREFURTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5HcmFwaDwvYj48L2VtPicgY29udGFpbmVyIHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTVE9DSEFTVElDX1NJX0RJU0VBU0VfTU9ERUxfX0dSQVBIID0gU0lfX0dSQVBIOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkVuYWJsZWQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTVE9DSEFTVElDX1NJX0RJU0VBU0VfTU9ERUxfX0VOQUJMRUQgPSBTSV9fRU5BQkxFRDsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5HcmFwaCBEZWNvcmF0ZWQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTVE9DSEFTVElDX1NJX0RJU0VBU0VfTU9ERUxfX0dSQVBIX0RFQ09SQVRFRCA9IFNJX19HUkFQSF9ERUNPUkFURUQ7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+UHJvZ3Jlc3M8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTVE9DSEFTVElDX1NJX0RJU0VBU0VfTU9ERUxfX1BST0dSRVNTID0gU0lfX1BST0dSRVNTOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlBvcHVsYXRpb24gSWRlbnRpZmllcjwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNUT0NIQVNUSUNfU0lfRElTRUFTRV9NT0RFTF9fUE9QVUxBVElPTl9JREVOVElGSUVSID0gU0lfX1BPUFVMQVRJT05fSURFTlRJRklFUjsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5UaW1lIFBlcmlvZDwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNUT0NIQVNUSUNfU0lfRElTRUFTRV9NT0RFTF9fVElNRV9QRVJJT0QgPSBTSV9fVElNRV9QRVJJT0Q7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RGlzZWFzZSBOYW1lPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU1RPQ0hBU1RJQ19TSV9ESVNFQVNFX01PREVMX19ESVNFQVNFX05BTUUgPSBTSV9fRElTRUFTRV9OQU1FOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkZpbml0ZSBEaWZmZXJlbmNlPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU1RPQ0hBU1RJQ19TSV9ESVNFQVNFX01PREVMX19GSU5JVEVfRElGRkVSRU5DRSA9IFNJX19GSU5JVEVfRElGRkVSRU5DRTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5GcmVxdWVuY3kgRGVwZW5kZW50PC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU1RPQ0hBU1RJQ19TSV9ESVNFQVNFX01PREVMX19GUkVRVUVOQ1lfREVQRU5ERU5UID0gU0lfX0ZSRVFVRU5DWV9ERVBFTkRFTlQ7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+UmVmZXJlbmNlIFBvcHVsYXRpb24gRGVuc2l0eTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNUT0NIQVNUSUNfU0lfRElTRUFTRV9NT0RFTF9fUkVGRVJFTkNFX1BPUFVMQVRJT05fREVOU0lUWSA9IFNJX19SRUZFUkVOQ0VfUE9QVUxBVElPTl9ERU5TSVRZOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlJvYWQgTmV0d29yayBJbmZlY3Rpb3VzIFByb3BvcnRpb248L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTVE9DSEFTVElDX1NJX0RJU0VBU0VfTU9ERUxfX1JPQURfTkVUV09SS19JTkZFQ1RJT1VTX1BST1BPUlRJT04gPSBTSV9fUk9BRF9ORVRXT1JLX0lORkVDVElPVVNfUFJPUE9SVElPTjsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5DaGFyYWN0ZXJpc3RpYyBNaXhpbmcgRGlzdGFuY2U8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTVE9DSEFTVElDX1NJX0RJU0VBU0VfTU9ERUxfX0NIQVJBQ1RFUklTVElDX01JWElOR19ESVNUQU5DRSA9IFNJX19DSEFSQUNURVJJU1RJQ19NSVhJTkdfRElTVEFOQ0U7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VHJhbnNtaXNzaW9uIFJhdGU8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTVE9DSEFTVElDX1NJX0RJU0VBU0VfTU9ERUxfX1RSQU5TTUlTU0lPTl9SQVRFID0gU0lfX1RSQU5TTUlTU0lPTl9SQVRFOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPk5vbiBMaW5lYXJpdHkgQ29lZmZpY2llbnQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTVE9DSEFTVElDX1NJX0RJU0VBU0VfTU9ERUxfX05PTl9MSU5FQVJJVFlfQ09FRkZJQ0lFTlQgPSBTSV9fTk9OX0xJTkVBUklUWV9DT0VGRklDSUVOVDsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5SZWNvdmVyeSBSYXRlPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU1RPQ0hBU1RJQ19TSV9ESVNFQVNFX01PREVMX19SRUNPVkVSWV9SQVRFID0gU0lfX1JFQ09WRVJZX1JBVEU7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+SW5mZWN0aW91cyBNb3J0YWxpdHkgUmF0ZTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNUT0NIQVNUSUNfU0lfRElTRUFTRV9NT0RFTF9fSU5GRUNUSU9VU19NT1JUQUxJVFlfUkFURSA9IFNJX19JTkZFQ1RJT1VTX01PUlRBTElUWV9SQVRFOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlNlZWQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTVE9DSEFTVElDX1NJX0RJU0VBU0VfTU9ERUxfX1NFRUQgPSBTSV9GRUFUVVJFX0NPVU5UICsgMDsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5SYW5kb20gR2VuZXJhdG9yPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU1RPQ0hBU1RJQ19TSV9ESVNFQVNFX01PREVMX19SQU5ET01fR0VORVJBVE9SID0gU0lfRkVBVFVSRV9DT1VOVCArIDE7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+R2FpbjwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNUT0NIQVNUSUNfU0lfRElTRUFTRV9NT0RFTF9fR0FJTiA9IFNJX0ZFQVRVUkVfQ09VTlQgKyAyOworCisJLyoqCisJICogVGhlIG51bWJlciBvZiBzdHJ1Y3R1cmFsIGZlYXR1cmVzIG9mIHRoZSAnPGVtPlN0b2NoYXN0aWMgU0kgRGlzZWFzZSBNb2RlbDwvZW0+JyBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTVE9DSEFTVElDX1NJX0RJU0VBU0VfTU9ERUxfRkVBVFVSRV9DT1VOVCA9IFNJX0ZFQVRVUkVfQ09VTlQgKyAzOworCisJLyoqCisJICogVGhlIG1ldGEgb2JqZWN0IGlkIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuaW1wbC5TdG9jaGFzdGljU0lSRGlzZWFzZU1vZGVsSW1wbCA8ZW0+U3RvY2hhc3RpYyBTSVIgRGlzZWFzZSBNb2RlbDwvZW0+fScgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5pbXBsLlN0b2NoYXN0aWNTSVJEaXNlYXNlTW9kZWxJbXBsCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuaW1wbC5TdGFuZGFyZFBhY2thZ2VJbXBsI2dldFN0b2NoYXN0aWNTSVJEaXNlYXNlTW9kZWwoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlpbnQgU1RPQ0hBU1RJQ19TSVJfRElTRUFTRV9NT0RFTCA9IDIzOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlVSSTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNUT0NIQVNUSUNfU0lSX0RJU0VBU0VfTU9ERUxfX1VSSSA9IFNJUl9fVVJJOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlR5cGUgVVJJPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU1RPQ0hBU1RJQ19TSVJfRElTRUFTRV9NT0RFTF9fVFlQRV9VUkkgPSBTSVJfX1RZUEVfVVJJOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkR1YmxpbiBDb3JlPC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU1RPQ0hBU1RJQ19TSVJfRElTRUFTRV9NT0RFTF9fRFVCTElOX0NPUkUgPSBTSVJfX0RVQkxJTl9DT1JFOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkxhYmVscyBUbyBVcGRhdGU8L2I+PC9lbT4nIHJlZmVyZW5jZSBsaXN0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNUT0NIQVNUSUNfU0lSX0RJU0VBU0VfTU9ERUxfX0xBQkVMU19UT19VUERBVEUgPSBTSVJfX0xBQkVMU19UT19VUERBVEU7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+R3JhcGg8L2I+PC9lbT4nIGNvbnRhaW5lciByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU1RPQ0hBU1RJQ19TSVJfRElTRUFTRV9NT0RFTF9fR1JBUEggPSBTSVJfX0dSQVBIOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkVuYWJsZWQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTVE9DSEFTVElDX1NJUl9ESVNFQVNFX01PREVMX19FTkFCTEVEID0gU0lSX19FTkFCTEVEOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkdyYXBoIERlY29yYXRlZDwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNUT0NIQVNUSUNfU0lSX0RJU0VBU0VfTU9ERUxfX0dSQVBIX0RFQ09SQVRFRCA9IFNJUl9fR1JBUEhfREVDT1JBVEVEOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlByb2dyZXNzPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU1RPQ0hBU1RJQ19TSVJfRElTRUFTRV9NT0RFTF9fUFJPR1JFU1MgPSBTSVJfX1BST0dSRVNTOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlBvcHVsYXRpb24gSWRlbnRpZmllcjwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNUT0NIQVNUSUNfU0lSX0RJU0VBU0VfTU9ERUxfX1BPUFVMQVRJT05fSURFTlRJRklFUiA9IFNJUl9fUE9QVUxBVElPTl9JREVOVElGSUVSOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlRpbWUgUGVyaW9kPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU1RPQ0hBU1RJQ19TSVJfRElTRUFTRV9NT0RFTF9fVElNRV9QRVJJT0QgPSBTSVJfX1RJTUVfUEVSSU9EOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkRpc2Vhc2UgTmFtZTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNUT0NIQVNUSUNfU0lSX0RJU0VBU0VfTU9ERUxfX0RJU0VBU0VfTkFNRSA9IFNJUl9fRElTRUFTRV9OQU1FOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkZpbml0ZSBEaWZmZXJlbmNlPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU1RPQ0hBU1RJQ19TSVJfRElTRUFTRV9NT0RFTF9fRklOSVRFX0RJRkZFUkVOQ0UgPSBTSVJfX0ZJTklURV9ESUZGRVJFTkNFOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkZyZXF1ZW5jeSBEZXBlbmRlbnQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTVE9DSEFTVElDX1NJUl9ESVNFQVNFX01PREVMX19GUkVRVUVOQ1lfREVQRU5ERU5UID0gU0lSX19GUkVRVUVOQ1lfREVQRU5ERU5UOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlJlZmVyZW5jZSBQb3B1bGF0aW9uIERlbnNpdHk8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTVE9DSEFTVElDX1NJUl9ESVNFQVNFX01PREVMX19SRUZFUkVOQ0VfUE9QVUxBVElPTl9ERU5TSVRZID0gU0lSX19SRUZFUkVOQ0VfUE9QVUxBVElPTl9ERU5TSVRZOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlJvYWQgTmV0d29yayBJbmZlY3Rpb3VzIFByb3BvcnRpb248L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTVE9DSEFTVElDX1NJUl9ESVNFQVNFX01PREVMX19ST0FEX05FVFdPUktfSU5GRUNUSU9VU19QUk9QT1JUSU9OID0gU0lSX19ST0FEX05FVFdPUktfSU5GRUNUSU9VU19QUk9QT1JUSU9OOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkNoYXJhY3RlcmlzdGljIE1peGluZyBEaXN0YW5jZTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNUT0NIQVNUSUNfU0lSX0RJU0VBU0VfTU9ERUxfX0NIQVJBQ1RFUklTVElDX01JWElOR19ESVNUQU5DRSA9IFNJUl9fQ0hBUkFDVEVSSVNUSUNfTUlYSU5HX0RJU1RBTkNFOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlRyYW5zbWlzc2lvbiBSYXRlPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU1RPQ0hBU1RJQ19TSVJfRElTRUFTRV9NT0RFTF9fVFJBTlNNSVNTSU9OX1JBVEUgPSBTSVJfX1RSQU5TTUlTU0lPTl9SQVRFOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPk5vbiBMaW5lYXJpdHkgQ29lZmZpY2llbnQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTVE9DSEFTVElDX1NJUl9ESVNFQVNFX01PREVMX19OT05fTElORUFSSVRZX0NPRUZGSUNJRU5UID0gU0lSX19OT05fTElORUFSSVRZX0NPRUZGSUNJRU5UOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlJlY292ZXJ5IFJhdGU8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTVE9DSEFTVElDX1NJUl9ESVNFQVNFX01PREVMX19SRUNPVkVSWV9SQVRFID0gU0lSX19SRUNPVkVSWV9SQVRFOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkluZmVjdGlvdXMgTW9ydGFsaXR5IFJhdGU8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTVE9DSEFTVElDX1NJUl9ESVNFQVNFX01PREVMX19JTkZFQ1RJT1VTX01PUlRBTElUWV9SQVRFID0gU0lSX19JTkZFQ1RJT1VTX01PUlRBTElUWV9SQVRFOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkltbXVuaXR5IExvc3MgUmF0ZTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNUT0NIQVNUSUNfU0lSX0RJU0VBU0VfTU9ERUxfX0lNTVVOSVRZX0xPU1NfUkFURSA9IFNJUl9fSU1NVU5JVFlfTE9TU19SQVRFOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlNlZWQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTVE9DSEFTVElDX1NJUl9ESVNFQVNFX01PREVMX19TRUVEID0gU0lSX0ZFQVRVUkVfQ09VTlQgKyAwOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlJhbmRvbSBHZW5lcmF0b3I8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTVE9DSEFTVElDX1NJUl9ESVNFQVNFX01PREVMX19SQU5ET01fR0VORVJBVE9SID0gU0lSX0ZFQVRVUkVfQ09VTlQgKyAxOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkdhaW48L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTVE9DSEFTVElDX1NJUl9ESVNFQVNFX01PREVMX19HQUlOID0gU0lSX0ZFQVRVUkVfQ09VTlQgKyAyOworCisJLyoqCisJICogVGhlIG51bWJlciBvZiBzdHJ1Y3R1cmFsIGZlYXR1cmVzIG9mIHRoZSAnPGVtPlN0b2NoYXN0aWMgU0lSIERpc2Vhc2UgTW9kZWw8L2VtPicgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU1RPQ0hBU1RJQ19TSVJfRElTRUFTRV9NT0RFTF9GRUFUVVJFX0NPVU5UID0gU0lSX0ZFQVRVUkVfQ09VTlQgKyAzOworCisJLyoqCisJICogVGhlIG1ldGEgb2JqZWN0IGlkIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuaW1wbC5TdG9jaGFzdGljRGlzZWFzZU1vZGVsSW1wbCA8ZW0+U3RvY2hhc3RpYyBEaXNlYXNlIE1vZGVsPC9lbT59JyBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLmltcGwuU3RvY2hhc3RpY0Rpc2Vhc2VNb2RlbEltcGwKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5pbXBsLlN0YW5kYXJkUGFja2FnZUltcGwjZ2V0U3RvY2hhc3RpY0Rpc2Vhc2VNb2RlbCgpCisJICogQGdlbmVyYXRlZAorCSAqLworCWludCBTVE9DSEFTVElDX0RJU0VBU0VfTU9ERUwgPSAyNDsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5VUkk8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTVE9DSEFTVElDX0RJU0VBU0VfTU9ERUxfX1VSSSA9IERJU0VBU0VfTU9ERUxfX1VSSTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5UeXBlIFVSSTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNUT0NIQVNUSUNfRElTRUFTRV9NT0RFTF9fVFlQRV9VUkkgPSBESVNFQVNFX01PREVMX19UWVBFX1VSSTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5EdWJsaW4gQ29yZTwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNUT0NIQVNUSUNfRElTRUFTRV9NT0RFTF9fRFVCTElOX0NPUkUgPSBESVNFQVNFX01PREVMX19EVUJMSU5fQ09SRTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5MYWJlbHMgVG8gVXBkYXRlPC9iPjwvZW0+JyByZWZlcmVuY2UgbGlzdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTVE9DSEFTVElDX0RJU0VBU0VfTU9ERUxfX0xBQkVMU19UT19VUERBVEUgPSBESVNFQVNFX01PREVMX19MQUJFTFNfVE9fVVBEQVRFOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkdyYXBoPC9iPjwvZW0+JyBjb250YWluZXIgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNUT0NIQVNUSUNfRElTRUFTRV9NT0RFTF9fR1JBUEggPSBESVNFQVNFX01PREVMX19HUkFQSDsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5FbmFibGVkPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU1RPQ0hBU1RJQ19ESVNFQVNFX01PREVMX19FTkFCTEVEID0gRElTRUFTRV9NT0RFTF9fRU5BQkxFRDsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5HcmFwaCBEZWNvcmF0ZWQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTVE9DSEFTVElDX0RJU0VBU0VfTU9ERUxfX0dSQVBIX0RFQ09SQVRFRCA9IERJU0VBU0VfTU9ERUxfX0dSQVBIX0RFQ09SQVRFRDsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5Qcm9ncmVzczwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNUT0NIQVNUSUNfRElTRUFTRV9NT0RFTF9fUFJPR1JFU1MgPSBESVNFQVNFX01PREVMX19QUk9HUkVTUzsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5Qb3B1bGF0aW9uIElkZW50aWZpZXI8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTVE9DSEFTVElDX0RJU0VBU0VfTU9ERUxfX1BPUFVMQVRJT05fSURFTlRJRklFUiA9IERJU0VBU0VfTU9ERUxfX1BPUFVMQVRJT05fSURFTlRJRklFUjsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5UaW1lIFBlcmlvZDwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNUT0NIQVNUSUNfRElTRUFTRV9NT0RFTF9fVElNRV9QRVJJT0QgPSBESVNFQVNFX01PREVMX19USU1FX1BFUklPRDsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5EaXNlYXNlIE5hbWU8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTVE9DSEFTVElDX0RJU0VBU0VfTU9ERUxfX0RJU0VBU0VfTkFNRSA9IERJU0VBU0VfTU9ERUxfX0RJU0VBU0VfTkFNRTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5GaW5pdGUgRGlmZmVyZW5jZTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNUT0NIQVNUSUNfRElTRUFTRV9NT0RFTF9fRklOSVRFX0RJRkZFUkVOQ0UgPSBESVNFQVNFX01PREVMX19GSU5JVEVfRElGRkVSRU5DRTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5GcmVxdWVuY3kgRGVwZW5kZW50PC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU1RPQ0hBU1RJQ19ESVNFQVNFX01PREVMX19GUkVRVUVOQ1lfREVQRU5ERU5UID0gRElTRUFTRV9NT0RFTF9fRlJFUVVFTkNZX0RFUEVOREVOVDsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5TZWVkPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU1RPQ0hBU1RJQ19ESVNFQVNFX01PREVMX19TRUVEID0gRElTRUFTRV9NT0RFTF9GRUFUVVJFX0NPVU5UICsgMDsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5SYW5kb20gR2VuZXJhdG9yPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU1RPQ0hBU1RJQ19ESVNFQVNFX01PREVMX19SQU5ET01fR0VORVJBVE9SID0gRElTRUFTRV9NT0RFTF9GRUFUVVJFX0NPVU5UICsgMTsKKworCS8qKgorCSAqIFRoZSBudW1iZXIgb2Ygc3RydWN0dXJhbCBmZWF0dXJlcyBvZiB0aGUgJzxlbT5TdG9jaGFzdGljIERpc2Vhc2UgTW9kZWw8L2VtPicgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU1RPQ0hBU1RJQ19ESVNFQVNFX01PREVMX0ZFQVRVUkVfQ09VTlQgPSBESVNFQVNFX01PREVMX0ZFQVRVUkVfQ09VTlQgKyAyOworCisJLyoqCisJICogVGhlIG1ldGEgb2JqZWN0IGlkIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuaW1wbC5TdGFuZGFyZFN0b2NoYXN0aWNEaXNlYXNlTW9kZWxJbXBsIDxlbT5TdG9jaGFzdGljIERpc2Vhc2UgTW9kZWw8L2VtPn0nIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuaW1wbC5TdGFuZGFyZFN0b2NoYXN0aWNEaXNlYXNlTW9kZWxJbXBsCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuaW1wbC5TdGFuZGFyZFBhY2thZ2VJbXBsI2dldFN0YW5kYXJkU3RvY2hhc3RpY0Rpc2Vhc2VNb2RlbCgpCisJICogQGdlbmVyYXRlZAorCSAqLworCWludCBTVEFOREFSRF9TVE9DSEFTVElDX0RJU0VBU0VfTU9ERUwgPSAyNTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5VUkk8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTVEFOREFSRF9TVE9DSEFTVElDX0RJU0VBU0VfTU9ERUxfX1VSSSA9IFNUT0NIQVNUSUNfRElTRUFTRV9NT0RFTF9fVVJJOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlR5cGUgVVJJPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU1RBTkRBUkRfU1RPQ0hBU1RJQ19ESVNFQVNFX01PREVMX19UWVBFX1VSSSA9IFNUT0NIQVNUSUNfRElTRUFTRV9NT0RFTF9fVFlQRV9VUkk7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RHVibGluIENvcmU8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTVEFOREFSRF9TVE9DSEFTVElDX0RJU0VBU0VfTU9ERUxfX0RVQkxJTl9DT1JFID0gU1RPQ0hBU1RJQ19ESVNFQVNFX01PREVMX19EVUJMSU5fQ09SRTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5MYWJlbHMgVG8gVXBkYXRlPC9iPjwvZW0+JyByZWZlcmVuY2UgbGlzdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTVEFOREFSRF9TVE9DSEFTVElDX0RJU0VBU0VfTU9ERUxfX0xBQkVMU19UT19VUERBVEUgPSBTVE9DSEFTVElDX0RJU0VBU0VfTU9ERUxfX0xBQkVMU19UT19VUERBVEU7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+R3JhcGg8L2I+PC9lbT4nIGNvbnRhaW5lciByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU1RBTkRBUkRfU1RPQ0hBU1RJQ19ESVNFQVNFX01PREVMX19HUkFQSCA9IFNUT0NIQVNUSUNfRElTRUFTRV9NT0RFTF9fR1JBUEg7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RW5hYmxlZDwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNUQU5EQVJEX1NUT0NIQVNUSUNfRElTRUFTRV9NT0RFTF9fRU5BQkxFRCA9IFNUT0NIQVNUSUNfRElTRUFTRV9NT0RFTF9fRU5BQkxFRDsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5HcmFwaCBEZWNvcmF0ZWQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTVEFOREFSRF9TVE9DSEFTVElDX0RJU0VBU0VfTU9ERUxfX0dSQVBIX0RFQ09SQVRFRCA9IFNUT0NIQVNUSUNfRElTRUFTRV9NT0RFTF9fR1JBUEhfREVDT1JBVEVEOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlByb2dyZXNzPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU1RBTkRBUkRfU1RPQ0hBU1RJQ19ESVNFQVNFX01PREVMX19QUk9HUkVTUyA9IFNUT0NIQVNUSUNfRElTRUFTRV9NT0RFTF9fUFJPR1JFU1M7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+UG9wdWxhdGlvbiBJZGVudGlmaWVyPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU1RBTkRBUkRfU1RPQ0hBU1RJQ19ESVNFQVNFX01PREVMX19QT1BVTEFUSU9OX0lERU5USUZJRVIgPSBTVE9DSEFTVElDX0RJU0VBU0VfTU9ERUxfX1BPUFVMQVRJT05fSURFTlRJRklFUjsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5UaW1lIFBlcmlvZDwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNUQU5EQVJEX1NUT0NIQVNUSUNfRElTRUFTRV9NT0RFTF9fVElNRV9QRVJJT0QgPSBTVE9DSEFTVElDX0RJU0VBU0VfTU9ERUxfX1RJTUVfUEVSSU9EOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkRpc2Vhc2UgTmFtZTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNUQU5EQVJEX1NUT0NIQVNUSUNfRElTRUFTRV9NT0RFTF9fRElTRUFTRV9OQU1FID0gU1RPQ0hBU1RJQ19ESVNFQVNFX01PREVMX19ESVNFQVNFX05BTUU7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RmluaXRlIERpZmZlcmVuY2U8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTVEFOREFSRF9TVE9DSEFTVElDX0RJU0VBU0VfTU9ERUxfX0ZJTklURV9ESUZGRVJFTkNFID0gU1RPQ0hBU1RJQ19ESVNFQVNFX01PREVMX19GSU5JVEVfRElGRkVSRU5DRTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5GcmVxdWVuY3kgRGVwZW5kZW50PC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU1RBTkRBUkRfU1RPQ0hBU1RJQ19ESVNFQVNFX01PREVMX19GUkVRVUVOQ1lfREVQRU5ERU5UID0gU1RPQ0hBU1RJQ19ESVNFQVNFX01PREVMX19GUkVRVUVOQ1lfREVQRU5ERU5UOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlNlZWQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTVEFOREFSRF9TVE9DSEFTVElDX0RJU0VBU0VfTU9ERUxfX1NFRUQgPSBTVE9DSEFTVElDX0RJU0VBU0VfTU9ERUxfX1NFRUQ7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+UmFuZG9tIEdlbmVyYXRvcjwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNUQU5EQVJEX1NUT0NIQVNUSUNfRElTRUFTRV9NT0RFTF9fUkFORE9NX0dFTkVSQVRPUiA9IFNUT0NIQVNUSUNfRElTRUFTRV9NT0RFTF9fUkFORE9NX0dFTkVSQVRPUjsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5HYWluPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU1RBTkRBUkRfU1RPQ0hBU1RJQ19ESVNFQVNFX01PREVMX19HQUlOID0gU1RPQ0hBU1RJQ19ESVNFQVNFX01PREVMX0ZFQVRVUkVfQ09VTlQgKyAwOworCisJLyoqCisJICogVGhlIG51bWJlciBvZiBzdHJ1Y3R1cmFsIGZlYXR1cmVzIG9mIHRoZSAnPGVtPlN0b2NoYXN0aWMgRGlzZWFzZSBNb2RlbDwvZW0+JyBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTVEFOREFSRF9TVE9DSEFTVElDX0RJU0VBU0VfTU9ERUxfRkVBVFVSRV9DT1VOVCA9IFNUT0NIQVNUSUNfRElTRUFTRV9NT0RFTF9GRUFUVVJFX0NPVU5UICsgMTsKKworCS8qKgorCSAqIFRoZSBtZXRhIG9iamVjdCBpZCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLmltcGwuU0lSSW5vY3VsYXRvckltcGwgPGVtPlNJUiBJbm9jdWxhdG9yPC9lbT59JyBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLmltcGwuU0lSSW5vY3VsYXRvckltcGwKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5pbXBsLlN0YW5kYXJkUGFja2FnZUltcGwjZ2V0U0lSSW5vY3VsYXRvcigpCisJICogQGdlbmVyYXRlZAorCSAqLworCWludCBTSVJfSU5PQ1VMQVRPUiA9IDI2OworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlVSSTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNJUl9JTk9DVUxBVE9SX19VUkkgPSBTSV9JTkZFQ1RPUl9fVVJJOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlR5cGUgVVJJPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU0lSX0lOT0NVTEFUT1JfX1RZUEVfVVJJID0gU0lfSU5GRUNUT1JfX1RZUEVfVVJJOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkR1YmxpbiBDb3JlPC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU0lSX0lOT0NVTEFUT1JfX0RVQkxJTl9DT1JFID0gU0lfSU5GRUNUT1JfX0RVQkxJTl9DT1JFOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkxhYmVscyBUbyBVcGRhdGU8L2I+PC9lbT4nIHJlZmVyZW5jZSBsaXN0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNJUl9JTk9DVUxBVE9SX19MQUJFTFNfVE9fVVBEQVRFID0gU0lfSU5GRUNUT1JfX0xBQkVMU19UT19VUERBVEU7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+R3JhcGg8L2I+PC9lbT4nIGNvbnRhaW5lciByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU0lSX0lOT0NVTEFUT1JfX0dSQVBIID0gU0lfSU5GRUNUT1JfX0dSQVBIOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkVuYWJsZWQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTSVJfSU5PQ1VMQVRPUl9fRU5BQkxFRCA9IFNJX0lORkVDVE9SX19FTkFCTEVEOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkdyYXBoIERlY29yYXRlZDwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNJUl9JTk9DVUxBVE9SX19HUkFQSF9ERUNPUkFURUQgPSBTSV9JTkZFQ1RPUl9fR1JBUEhfREVDT1JBVEVEOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlByb2dyZXNzPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU0lSX0lOT0NVTEFUT1JfX1BST0dSRVNTID0gU0lfSU5GRUNUT1JfX1BST0dSRVNTOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkRpc2Vhc2UgTW9kZWw8L2I+PC9lbT4nIHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTSVJfSU5PQ1VMQVRPUl9fRElTRUFTRV9NT0RFTCA9IFNJX0lORkVDVE9SX19ESVNFQVNFX01PREVMOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlRhcmdldCBVUkk8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTSVJfSU5PQ1VMQVRPUl9fVEFSR0VUX1VSSSA9IFNJX0lORkVDVE9SX19UQVJHRVRfVVJJOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkRpc2Vhc2UgTmFtZTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNJUl9JTk9DVUxBVE9SX19ESVNFQVNFX05BTUUgPSBTSV9JTkZFQ1RPUl9fRElTRUFTRV9OQU1FOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlRhcmdldCBJU08gS2V5PC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU0lSX0lOT0NVTEFUT1JfX1RBUkdFVF9JU09fS0VZID0gU0lfSU5GRUNUT1JfX1RBUkdFVF9JU09fS0VZOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkxhYmVscyBUbyBJbmZlY3Q8L2I+PC9lbT4nIHJlZmVyZW5jZSBsaXN0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNJUl9JTk9DVUxBVE9SX19MQUJFTFNfVE9fSU5GRUNUID0gU0lfSU5GRUNUT1JfX0xBQkVMU19UT19JTkZFQ1Q7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+UG9wdWxhdGlvbiBJZGVudGlmaWVyPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU0lSX0lOT0NVTEFUT1JfX1BPUFVMQVRJT05fSURFTlRJRklFUiA9IFNJX0lORkVDVE9SX19QT1BVTEFUSU9OX0lERU5USUZJRVI7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+SW5mZWN0IFBlcmNlbnRhZ2U8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTSVJfSU5PQ1VMQVRPUl9fSU5GRUNUX1BFUkNFTlRBR0UgPSBTSV9JTkZFQ1RPUl9fSU5GRUNUX1BFUkNFTlRBR0U7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VGFyZ2V0IEZlYXR1cmU8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTSVJfSU5PQ1VMQVRPUl9fVEFSR0VUX0ZFQVRVUkUgPSBTSV9JTkZFQ1RPUl9fVEFSR0VUX0ZFQVRVUkU7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+SW5mZWN0aW91cyBDb3VudDwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNJUl9JTk9DVUxBVE9SX19JTkZFQ1RJT1VTX0NPVU5UID0gU0lfSU5GRUNUT1JfX0lORkVDVElPVVNfQ09VTlQ7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+SW5vY3VsYXRlZCBQZXJjZW50YWdlPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU0lSX0lOT0NVTEFUT1JfX0lOT0NVTEFURURfUEVSQ0VOVEFHRSA9IFNJX0lORkVDVE9SX0ZFQVRVUkVfQ09VTlQgKyAwOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPklub2N1bGF0ZSBQZXJjZW50YWdlPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU0lSX0lOT0NVTEFUT1JfX0lOT0NVTEFURV9QRVJDRU5UQUdFID0gU0lfSU5GRUNUT1JfRkVBVFVSRV9DT1VOVCArIDE7CisKKwkvKioKKwkgKiBUaGUgbnVtYmVyIG9mIHN0cnVjdHVyYWwgZmVhdHVyZXMgb2YgdGhlICc8ZW0+U0lSIElub2N1bGF0b3I8L2VtPicgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU0lSX0lOT0NVTEFUT1JfRkVBVFVSRV9DT1VOVCA9IFNJX0lORkVDVE9SX0ZFQVRVUkVfQ09VTlQgKyAyOworCisJLyoqCisJICogVGhlIG1ldGEgb2JqZWN0IGlkIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuaW1wbC5TdG9jaGFzdGljUG9pc3NvblNJRGlzZWFzZU1vZGVsSW1wbCA8ZW0+U3RvY2hhc3RpYyBQb2lzc29uIFNJIERpc2Vhc2UgTW9kZWw8L2VtPn0nIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuaW1wbC5TdG9jaGFzdGljUG9pc3NvblNJRGlzZWFzZU1vZGVsSW1wbAorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLmltcGwuU3RhbmRhcmRQYWNrYWdlSW1wbCNnZXRTdG9jaGFzdGljUG9pc3NvblNJRGlzZWFzZU1vZGVsKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJaW50IFNUT0NIQVNUSUNfUE9JU1NPTl9TSV9ESVNFQVNFX01PREVMID0gMjc7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VVJJPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU1RPQ0hBU1RJQ19QT0lTU09OX1NJX0RJU0VBU0VfTU9ERUxfX1VSSSA9IFNJX19VUkk7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VHlwZSBVUkk8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTVE9DSEFTVElDX1BPSVNTT05fU0lfRElTRUFTRV9NT0RFTF9fVFlQRV9VUkkgPSBTSV9fVFlQRV9VUkk7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RHVibGluIENvcmU8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTVE9DSEFTVElDX1BPSVNTT05fU0lfRElTRUFTRV9NT0RFTF9fRFVCTElOX0NPUkUgPSBTSV9fRFVCTElOX0NPUkU7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+TGFiZWxzIFRvIFVwZGF0ZTwvYj48L2VtPicgcmVmZXJlbmNlIGxpc3QuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU1RPQ0hBU1RJQ19QT0lTU09OX1NJX0RJU0VBU0VfTU9ERUxfX0xBQkVMU19UT19VUERBVEUgPSBTSV9fTEFCRUxTX1RPX1VQREFURTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5HcmFwaDwvYj48L2VtPicgY29udGFpbmVyIHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTVE9DSEFTVElDX1BPSVNTT05fU0lfRElTRUFTRV9NT0RFTF9fR1JBUEggPSBTSV9fR1JBUEg7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RW5hYmxlZDwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNUT0NIQVNUSUNfUE9JU1NPTl9TSV9ESVNFQVNFX01PREVMX19FTkFCTEVEID0gU0lfX0VOQUJMRUQ7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+R3JhcGggRGVjb3JhdGVkPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU1RPQ0hBU1RJQ19QT0lTU09OX1NJX0RJU0VBU0VfTU9ERUxfX0dSQVBIX0RFQ09SQVRFRCA9IFNJX19HUkFQSF9ERUNPUkFURUQ7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+UHJvZ3Jlc3M8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTVE9DSEFTVElDX1BPSVNTT05fU0lfRElTRUFTRV9NT0RFTF9fUFJPR1JFU1MgPSBTSV9fUFJPR1JFU1M7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+UG9wdWxhdGlvbiBJZGVudGlmaWVyPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU1RPQ0hBU1RJQ19QT0lTU09OX1NJX0RJU0VBU0VfTU9ERUxfX1BPUFVMQVRJT05fSURFTlRJRklFUiA9IFNJX19QT1BVTEFUSU9OX0lERU5USUZJRVI7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VGltZSBQZXJpb2Q8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTVE9DSEFTVElDX1BPSVNTT05fU0lfRElTRUFTRV9NT0RFTF9fVElNRV9QRVJJT0QgPSBTSV9fVElNRV9QRVJJT0Q7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RGlzZWFzZSBOYW1lPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU1RPQ0hBU1RJQ19QT0lTU09OX1NJX0RJU0VBU0VfTU9ERUxfX0RJU0VBU0VfTkFNRSA9IFNJX19ESVNFQVNFX05BTUU7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RmluaXRlIERpZmZlcmVuY2U8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTVE9DSEFTVElDX1BPSVNTT05fU0lfRElTRUFTRV9NT0RFTF9fRklOSVRFX0RJRkZFUkVOQ0UgPSBTSV9fRklOSVRFX0RJRkZFUkVOQ0U7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RnJlcXVlbmN5IERlcGVuZGVudDwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNUT0NIQVNUSUNfUE9JU1NPTl9TSV9ESVNFQVNFX01PREVMX19GUkVRVUVOQ1lfREVQRU5ERU5UID0gU0lfX0ZSRVFVRU5DWV9ERVBFTkRFTlQ7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+UmVmZXJlbmNlIFBvcHVsYXRpb24gRGVuc2l0eTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNUT0NIQVNUSUNfUE9JU1NPTl9TSV9ESVNFQVNFX01PREVMX19SRUZFUkVOQ0VfUE9QVUxBVElPTl9ERU5TSVRZID0gU0lfX1JFRkVSRU5DRV9QT1BVTEFUSU9OX0RFTlNJVFk7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+Um9hZCBOZXR3b3JrIEluZmVjdGlvdXMgUHJvcG9ydGlvbjwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNUT0NIQVNUSUNfUE9JU1NPTl9TSV9ESVNFQVNFX01PREVMX19ST0FEX05FVFdPUktfSU5GRUNUSU9VU19QUk9QT1JUSU9OID0gU0lfX1JPQURfTkVUV09SS19JTkZFQ1RJT1VTX1BST1BPUlRJT047CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+Q2hhcmFjdGVyaXN0aWMgTWl4aW5nIERpc3RhbmNlPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU1RPQ0hBU1RJQ19QT0lTU09OX1NJX0RJU0VBU0VfTU9ERUxfX0NIQVJBQ1RFUklTVElDX01JWElOR19ESVNUQU5DRSA9IFNJX19DSEFSQUNURVJJU1RJQ19NSVhJTkdfRElTVEFOQ0U7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VHJhbnNtaXNzaW9uIFJhdGU8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTVE9DSEFTVElDX1BPSVNTT05fU0lfRElTRUFTRV9NT0RFTF9fVFJBTlNNSVNTSU9OX1JBVEUgPSBTSV9fVFJBTlNNSVNTSU9OX1JBVEU7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+Tm9uIExpbmVhcml0eSBDb2VmZmljaWVudDwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNUT0NIQVNUSUNfUE9JU1NPTl9TSV9ESVNFQVNFX01PREVMX19OT05fTElORUFSSVRZX0NPRUZGSUNJRU5UID0gU0lfX05PTl9MSU5FQVJJVFlfQ09FRkZJQ0lFTlQ7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+UmVjb3ZlcnkgUmF0ZTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNUT0NIQVNUSUNfUE9JU1NPTl9TSV9ESVNFQVNFX01PREVMX19SRUNPVkVSWV9SQVRFID0gU0lfX1JFQ09WRVJZX1JBVEU7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+SW5mZWN0aW91cyBNb3J0YWxpdHkgUmF0ZTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNUT0NIQVNUSUNfUE9JU1NPTl9TSV9ESVNFQVNFX01PREVMX19JTkZFQ1RJT1VTX01PUlRBTElUWV9SQVRFID0gU0lfX0lORkVDVElPVVNfTU9SVEFMSVRZX1JBVEU7CisKKwkvKioKKwkgKiBUaGUgbnVtYmVyIG9mIHN0cnVjdHVyYWwgZmVhdHVyZXMgb2YgdGhlICc8ZW0+U3RvY2hhc3RpYyBQb2lzc29uIFNJIERpc2Vhc2UgTW9kZWw8L2VtPicgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU1RPQ0hBU1RJQ19QT0lTU09OX1NJX0RJU0VBU0VfTU9ERUxfRkVBVFVSRV9DT1VOVCA9IFNJX0ZFQVRVUkVfQ09VTlQgKyAwOworCisJLyoqCisJICogVGhlIG1ldGEgb2JqZWN0IGlkIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuaW1wbC5TdG9jaGFzdGljUG9pc3NvblNJUkRpc2Vhc2VNb2RlbEltcGwgPGVtPlN0b2NoYXN0aWMgUG9pc3NvbiBTSVIgRGlzZWFzZSBNb2RlbDwvZW0+fScgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5pbXBsLlN0b2NoYXN0aWNQb2lzc29uU0lSRGlzZWFzZU1vZGVsSW1wbAorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLmltcGwuU3RhbmRhcmRQYWNrYWdlSW1wbCNnZXRTdG9jaGFzdGljUG9pc3NvblNJUkRpc2Vhc2VNb2RlbCgpCisJICogQGdlbmVyYXRlZAorCSAqLworCWludCBTVE9DSEFTVElDX1BPSVNTT05fU0lSX0RJU0VBU0VfTU9ERUwgPSAyODsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5VUkk8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTVE9DSEFTVElDX1BPSVNTT05fU0lSX0RJU0VBU0VfTU9ERUxfX1VSSSA9IFNJUl9fVVJJOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlR5cGUgVVJJPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU1RPQ0hBU1RJQ19QT0lTU09OX1NJUl9ESVNFQVNFX01PREVMX19UWVBFX1VSSSA9IFNJUl9fVFlQRV9VUkk7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RHVibGluIENvcmU8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTVE9DSEFTVElDX1BPSVNTT05fU0lSX0RJU0VBU0VfTU9ERUxfX0RVQkxJTl9DT1JFID0gU0lSX19EVUJMSU5fQ09SRTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5MYWJlbHMgVG8gVXBkYXRlPC9iPjwvZW0+JyByZWZlcmVuY2UgbGlzdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTVE9DSEFTVElDX1BPSVNTT05fU0lSX0RJU0VBU0VfTU9ERUxfX0xBQkVMU19UT19VUERBVEUgPSBTSVJfX0xBQkVMU19UT19VUERBVEU7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+R3JhcGg8L2I+PC9lbT4nIGNvbnRhaW5lciByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU1RPQ0hBU1RJQ19QT0lTU09OX1NJUl9ESVNFQVNFX01PREVMX19HUkFQSCA9IFNJUl9fR1JBUEg7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RW5hYmxlZDwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNUT0NIQVNUSUNfUE9JU1NPTl9TSVJfRElTRUFTRV9NT0RFTF9fRU5BQkxFRCA9IFNJUl9fRU5BQkxFRDsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5HcmFwaCBEZWNvcmF0ZWQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTVE9DSEFTVElDX1BPSVNTT05fU0lSX0RJU0VBU0VfTU9ERUxfX0dSQVBIX0RFQ09SQVRFRCA9IFNJUl9fR1JBUEhfREVDT1JBVEVEOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlByb2dyZXNzPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU1RPQ0hBU1RJQ19QT0lTU09OX1NJUl9ESVNFQVNFX01PREVMX19QUk9HUkVTUyA9IFNJUl9fUFJPR1JFU1M7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+UG9wdWxhdGlvbiBJZGVudGlmaWVyPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU1RPQ0hBU1RJQ19QT0lTU09OX1NJUl9ESVNFQVNFX01PREVMX19QT1BVTEFUSU9OX0lERU5USUZJRVIgPSBTSVJfX1BPUFVMQVRJT05fSURFTlRJRklFUjsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5UaW1lIFBlcmlvZDwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNUT0NIQVNUSUNfUE9JU1NPTl9TSVJfRElTRUFTRV9NT0RFTF9fVElNRV9QRVJJT0QgPSBTSVJfX1RJTUVfUEVSSU9EOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkRpc2Vhc2UgTmFtZTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNUT0NIQVNUSUNfUE9JU1NPTl9TSVJfRElTRUFTRV9NT0RFTF9fRElTRUFTRV9OQU1FID0gU0lSX19ESVNFQVNFX05BTUU7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RmluaXRlIERpZmZlcmVuY2U8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTVE9DSEFTVElDX1BPSVNTT05fU0lSX0RJU0VBU0VfTU9ERUxfX0ZJTklURV9ESUZGRVJFTkNFID0gU0lSX19GSU5JVEVfRElGRkVSRU5DRTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5GcmVxdWVuY3kgRGVwZW5kZW50PC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU1RPQ0hBU1RJQ19QT0lTU09OX1NJUl9ESVNFQVNFX01PREVMX19GUkVRVUVOQ1lfREVQRU5ERU5UID0gU0lSX19GUkVRVUVOQ1lfREVQRU5ERU5UOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlJlZmVyZW5jZSBQb3B1bGF0aW9uIERlbnNpdHk8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTVE9DSEFTVElDX1BPSVNTT05fU0lSX0RJU0VBU0VfTU9ERUxfX1JFRkVSRU5DRV9QT1BVTEFUSU9OX0RFTlNJVFkgPSBTSVJfX1JFRkVSRU5DRV9QT1BVTEFUSU9OX0RFTlNJVFk7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+Um9hZCBOZXR3b3JrIEluZmVjdGlvdXMgUHJvcG9ydGlvbjwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNUT0NIQVNUSUNfUE9JU1NPTl9TSVJfRElTRUFTRV9NT0RFTF9fUk9BRF9ORVRXT1JLX0lORkVDVElPVVNfUFJPUE9SVElPTiA9IFNJUl9fUk9BRF9ORVRXT1JLX0lORkVDVElPVVNfUFJPUE9SVElPTjsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5DaGFyYWN0ZXJpc3RpYyBNaXhpbmcgRGlzdGFuY2U8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTVE9DSEFTVElDX1BPSVNTT05fU0lSX0RJU0VBU0VfTU9ERUxfX0NIQVJBQ1RFUklTVElDX01JWElOR19ESVNUQU5DRSA9IFNJUl9fQ0hBUkFDVEVSSVNUSUNfTUlYSU5HX0RJU1RBTkNFOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlRyYW5zbWlzc2lvbiBSYXRlPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU1RPQ0hBU1RJQ19QT0lTU09OX1NJUl9ESVNFQVNFX01PREVMX19UUkFOU01JU1NJT05fUkFURSA9IFNJUl9fVFJBTlNNSVNTSU9OX1JBVEU7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+Tm9uIExpbmVhcml0eSBDb2VmZmljaWVudDwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNUT0NIQVNUSUNfUE9JU1NPTl9TSVJfRElTRUFTRV9NT0RFTF9fTk9OX0xJTkVBUklUWV9DT0VGRklDSUVOVCA9IFNJUl9fTk9OX0xJTkVBUklUWV9DT0VGRklDSUVOVDsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5SZWNvdmVyeSBSYXRlPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU1RPQ0hBU1RJQ19QT0lTU09OX1NJUl9ESVNFQVNFX01PREVMX19SRUNPVkVSWV9SQVRFID0gU0lSX19SRUNPVkVSWV9SQVRFOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkluZmVjdGlvdXMgTW9ydGFsaXR5IFJhdGU8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTVE9DSEFTVElDX1BPSVNTT05fU0lSX0RJU0VBU0VfTU9ERUxfX0lORkVDVElPVVNfTU9SVEFMSVRZX1JBVEUgPSBTSVJfX0lORkVDVElPVVNfTU9SVEFMSVRZX1JBVEU7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+SW1tdW5pdHkgTG9zcyBSYXRlPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU1RPQ0hBU1RJQ19QT0lTU09OX1NJUl9ESVNFQVNFX01PREVMX19JTU1VTklUWV9MT1NTX1JBVEUgPSBTSVJfX0lNTVVOSVRZX0xPU1NfUkFURTsKKworCS8qKgorCSAqIFRoZSBudW1iZXIgb2Ygc3RydWN0dXJhbCBmZWF0dXJlcyBvZiB0aGUgJzxlbT5TdG9jaGFzdGljIFBvaXNzb24gU0lSIERpc2Vhc2UgTW9kZWw8L2VtPicgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU1RPQ0hBU1RJQ19QT0lTU09OX1NJUl9ESVNFQVNFX01PREVMX0ZFQVRVUkVfQ09VTlQgPSBTSVJfRkVBVFVSRV9DT1VOVCArIDA7CisKKwkvKioKKwkgKiBUaGUgbWV0YSBvYmplY3QgaWQgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5pbXBsLlN0b2NoYXN0aWNQb2lzc29uU0VJUkRpc2Vhc2VNb2RlbEltcGwgPGVtPlN0b2NoYXN0aWMgUG9pc3NvbiBTRUlSIERpc2Vhc2UgTW9kZWw8L2VtPn0nIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuaW1wbC5TdG9jaGFzdGljUG9pc3NvblNFSVJEaXNlYXNlTW9kZWxJbXBsCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuaW1wbC5TdGFuZGFyZFBhY2thZ2VJbXBsI2dldFN0b2NoYXN0aWNQb2lzc29uU0VJUkRpc2Vhc2VNb2RlbCgpCisJICogQGdlbmVyYXRlZAorCSAqLworCWludCBTVE9DSEFTVElDX1BPSVNTT05fU0VJUl9ESVNFQVNFX01PREVMID0gMjk7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VVJJPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU1RPQ0hBU1RJQ19QT0lTU09OX1NFSVJfRElTRUFTRV9NT0RFTF9fVVJJID0gU0VJUl9fVVJJOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlR5cGUgVVJJPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU1RPQ0hBU1RJQ19QT0lTU09OX1NFSVJfRElTRUFTRV9NT0RFTF9fVFlQRV9VUkkgPSBTRUlSX19UWVBFX1VSSTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5EdWJsaW4gQ29yZTwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNUT0NIQVNUSUNfUE9JU1NPTl9TRUlSX0RJU0VBU0VfTU9ERUxfX0RVQkxJTl9DT1JFID0gU0VJUl9fRFVCTElOX0NPUkU7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+TGFiZWxzIFRvIFVwZGF0ZTwvYj48L2VtPicgcmVmZXJlbmNlIGxpc3QuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU1RPQ0hBU1RJQ19QT0lTU09OX1NFSVJfRElTRUFTRV9NT0RFTF9fTEFCRUxTX1RPX1VQREFURSA9IFNFSVJfX0xBQkVMU19UT19VUERBVEU7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+R3JhcGg8L2I+PC9lbT4nIGNvbnRhaW5lciByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU1RPQ0hBU1RJQ19QT0lTU09OX1NFSVJfRElTRUFTRV9NT0RFTF9fR1JBUEggPSBTRUlSX19HUkFQSDsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5FbmFibGVkPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU1RPQ0hBU1RJQ19QT0lTU09OX1NFSVJfRElTRUFTRV9NT0RFTF9fRU5BQkxFRCA9IFNFSVJfX0VOQUJMRUQ7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+R3JhcGggRGVjb3JhdGVkPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU1RPQ0hBU1RJQ19QT0lTU09OX1NFSVJfRElTRUFTRV9NT0RFTF9fR1JBUEhfREVDT1JBVEVEID0gU0VJUl9fR1JBUEhfREVDT1JBVEVEOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlByb2dyZXNzPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU1RPQ0hBU1RJQ19QT0lTU09OX1NFSVJfRElTRUFTRV9NT0RFTF9fUFJPR1JFU1MgPSBTRUlSX19QUk9HUkVTUzsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5Qb3B1bGF0aW9uIElkZW50aWZpZXI8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTVE9DSEFTVElDX1BPSVNTT05fU0VJUl9ESVNFQVNFX01PREVMX19QT1BVTEFUSU9OX0lERU5USUZJRVIgPSBTRUlSX19QT1BVTEFUSU9OX0lERU5USUZJRVI7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VGltZSBQZXJpb2Q8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTVE9DSEFTVElDX1BPSVNTT05fU0VJUl9ESVNFQVNFX01PREVMX19USU1FX1BFUklPRCA9IFNFSVJfX1RJTUVfUEVSSU9EOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkRpc2Vhc2UgTmFtZTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNUT0NIQVNUSUNfUE9JU1NPTl9TRUlSX0RJU0VBU0VfTU9ERUxfX0RJU0VBU0VfTkFNRSA9IFNFSVJfX0RJU0VBU0VfTkFNRTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5GaW5pdGUgRGlmZmVyZW5jZTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNUT0NIQVNUSUNfUE9JU1NPTl9TRUlSX0RJU0VBU0VfTU9ERUxfX0ZJTklURV9ESUZGRVJFTkNFID0gU0VJUl9fRklOSVRFX0RJRkZFUkVOQ0U7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RnJlcXVlbmN5IERlcGVuZGVudDwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNUT0NIQVNUSUNfUE9JU1NPTl9TRUlSX0RJU0VBU0VfTU9ERUxfX0ZSRVFVRU5DWV9ERVBFTkRFTlQgPSBTRUlSX19GUkVRVUVOQ1lfREVQRU5ERU5UOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlJlZmVyZW5jZSBQb3B1bGF0aW9uIERlbnNpdHk8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTVE9DSEFTVElDX1BPSVNTT05fU0VJUl9ESVNFQVNFX01PREVMX19SRUZFUkVOQ0VfUE9QVUxBVElPTl9ERU5TSVRZID0gU0VJUl9fUkVGRVJFTkNFX1BPUFVMQVRJT05fREVOU0lUWTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5Sb2FkIE5ldHdvcmsgSW5mZWN0aW91cyBQcm9wb3J0aW9uPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU1RPQ0hBU1RJQ19QT0lTU09OX1NFSVJfRElTRUFTRV9NT0RFTF9fUk9BRF9ORVRXT1JLX0lORkVDVElPVVNfUFJPUE9SVElPTiA9IFNFSVJfX1JPQURfTkVUV09SS19JTkZFQ1RJT1VTX1BST1BPUlRJT047CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+Q2hhcmFjdGVyaXN0aWMgTWl4aW5nIERpc3RhbmNlPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU1RPQ0hBU1RJQ19QT0lTU09OX1NFSVJfRElTRUFTRV9NT0RFTF9fQ0hBUkFDVEVSSVNUSUNfTUlYSU5HX0RJU1RBTkNFID0gU0VJUl9fQ0hBUkFDVEVSSVNUSUNfTUlYSU5HX0RJU1RBTkNFOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlRyYW5zbWlzc2lvbiBSYXRlPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU1RPQ0hBU1RJQ19QT0lTU09OX1NFSVJfRElTRUFTRV9NT0RFTF9fVFJBTlNNSVNTSU9OX1JBVEUgPSBTRUlSX19UUkFOU01JU1NJT05fUkFURTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5Ob24gTGluZWFyaXR5IENvZWZmaWNpZW50PC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU1RPQ0hBU1RJQ19QT0lTU09OX1NFSVJfRElTRUFTRV9NT0RFTF9fTk9OX0xJTkVBUklUWV9DT0VGRklDSUVOVCA9IFNFSVJfX05PTl9MSU5FQVJJVFlfQ09FRkZJQ0lFTlQ7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+UmVjb3ZlcnkgUmF0ZTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNUT0NIQVNUSUNfUE9JU1NPTl9TRUlSX0RJU0VBU0VfTU9ERUxfX1JFQ09WRVJZX1JBVEUgPSBTRUlSX19SRUNPVkVSWV9SQVRFOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkluZmVjdGlvdXMgTW9ydGFsaXR5IFJhdGU8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTVE9DSEFTVElDX1BPSVNTT05fU0VJUl9ESVNFQVNFX01PREVMX19JTkZFQ1RJT1VTX01PUlRBTElUWV9SQVRFID0gU0VJUl9fSU5GRUNUSU9VU19NT1JUQUxJVFlfUkFURTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5JbW11bml0eSBMb3NzIFJhdGU8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTVE9DSEFTVElDX1BPSVNTT05fU0VJUl9ESVNFQVNFX01PREVMX19JTU1VTklUWV9MT1NTX1JBVEUgPSBTRUlSX19JTU1VTklUWV9MT1NTX1JBVEU7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+SW5jdWJhdGlvbiBSYXRlPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU1RPQ0hBU1RJQ19QT0lTU09OX1NFSVJfRElTRUFTRV9NT0RFTF9fSU5DVUJBVElPTl9SQVRFID0gU0VJUl9fSU5DVUJBVElPTl9SQVRFOworCisJLyoqCisJICogVGhlIG51bWJlciBvZiBzdHJ1Y3R1cmFsIGZlYXR1cmVzIG9mIHRoZSAnPGVtPlN0b2NoYXN0aWMgUG9pc3NvbiBTRUlSIERpc2Vhc2UgTW9kZWw8L2VtPicgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU1RPQ0hBU1RJQ19QT0lTU09OX1NFSVJfRElTRUFTRV9NT0RFTF9GRUFUVVJFX0NPVU5UID0gU0VJUl9GRUFUVVJFX0NPVU5UICsgMDsKKworCS8qKgorCSAqIFRoZSBtZXRhIG9iamVjdCBpZCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLmltcGwuSW5mZWN0b3JJbm9jdWxhdG9yQ29sbGVjdGlvbkltcGwgPGVtPkluZmVjdG9yIElub2N1bGF0b3IgQ29sbGVjdGlvbjwvZW0+fScgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5pbXBsLkluZmVjdG9ySW5vY3VsYXRvckNvbGxlY3Rpb25JbXBsCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuaW1wbC5TdGFuZGFyZFBhY2thZ2VJbXBsI2dldEluZmVjdG9ySW5vY3VsYXRvckNvbGxlY3Rpb24oKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlpbnQgSU5GRUNUT1JfSU5PQ1VMQVRPUl9DT0xMRUNUSU9OID0gMzA7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VVJJPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgSU5GRUNUT1JfSU5PQ1VMQVRPUl9DT0xMRUNUSU9OX19VUkkgPSBNb2RlbFBhY2thZ2UuTk9ERV9ERUNPUkFUT1JfX1VSSTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5UeXBlIFVSSTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IElORkVDVE9SX0lOT0NVTEFUT1JfQ09MTEVDVElPTl9fVFlQRV9VUkkgPSBNb2RlbFBhY2thZ2UuTk9ERV9ERUNPUkFUT1JfX1RZUEVfVVJJOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkR1YmxpbiBDb3JlPC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgSU5GRUNUT1JfSU5PQ1VMQVRPUl9DT0xMRUNUSU9OX19EVUJMSU5fQ09SRSA9IE1vZGVsUGFja2FnZS5OT0RFX0RFQ09SQVRPUl9fRFVCTElOX0NPUkU7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+TGFiZWxzIFRvIFVwZGF0ZTwvYj48L2VtPicgcmVmZXJlbmNlIGxpc3QuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgSU5GRUNUT1JfSU5PQ1VMQVRPUl9DT0xMRUNUSU9OX19MQUJFTFNfVE9fVVBEQVRFID0gTW9kZWxQYWNrYWdlLk5PREVfREVDT1JBVE9SX19MQUJFTFNfVE9fVVBEQVRFOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkdyYXBoPC9iPjwvZW0+JyBjb250YWluZXIgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IElORkVDVE9SX0lOT0NVTEFUT1JfQ09MTEVDVElPTl9fR1JBUEggPSBNb2RlbFBhY2thZ2UuTk9ERV9ERUNPUkFUT1JfX0dSQVBIOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkVuYWJsZWQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBJTkZFQ1RPUl9JTk9DVUxBVE9SX0NPTExFQ1RJT05fX0VOQUJMRUQgPSBNb2RlbFBhY2thZ2UuTk9ERV9ERUNPUkFUT1JfX0VOQUJMRUQ7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+R3JhcGggRGVjb3JhdGVkPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgSU5GRUNUT1JfSU5PQ1VMQVRPUl9DT0xMRUNUSU9OX19HUkFQSF9ERUNPUkFURUQgPSBNb2RlbFBhY2thZ2UuTk9ERV9ERUNPUkFUT1JfX0dSQVBIX0RFQ09SQVRFRDsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5Qcm9ncmVzczwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IElORkVDVE9SX0lOT0NVTEFUT1JfQ09MTEVDVElPTl9fUFJPR1JFU1MgPSBNb2RlbFBhY2thZ2UuTk9ERV9ERUNPUkFUT1JfX1BST0dSRVNTOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkxpc3Q8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IElORkVDVE9SX0lOT0NVTEFUT1JfQ09MTEVDVElPTl9fTElTVCA9IE1vZGVsUGFja2FnZS5OT0RFX0RFQ09SQVRPUl9GRUFUVVJFX0NPVU5UICsgMDsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5JbXBvcnQgRm9sZGVyPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgSU5GRUNUT1JfSU5PQ1VMQVRPUl9DT0xMRUNUSU9OX19JTVBPUlRfRk9MREVSID0gTW9kZWxQYWNrYWdlLk5PREVfREVDT1JBVE9SX0ZFQVRVUkVfQ09VTlQgKyAxOworCisJLyoqCisJICogVGhlIG51bWJlciBvZiBzdHJ1Y3R1cmFsIGZlYXR1cmVzIG9mIHRoZSAnPGVtPkluZmVjdG9yIElub2N1bGF0b3IgQ29sbGVjdGlvbjwvZW0+JyBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBJTkZFQ1RPUl9JTk9DVUxBVE9SX0NPTExFQ1RJT05fRkVBVFVSRV9DT1VOVCA9IE1vZGVsUGFja2FnZS5OT0RFX0RFQ09SQVRPUl9GRUFUVVJFX0NPVU5UICsgMjsKKworCS8qKgorCSAqIFRoZSBtZXRhIG9iamVjdCBpZCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLmltcGwuSW5pdGlhbGl6ZXJJbXBsIDxlbT5Jbml0aWFsaXplcjwvZW0+fScgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5pbXBsLkluaXRpYWxpemVySW1wbAorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLmltcGwuU3RhbmRhcmRQYWNrYWdlSW1wbCNnZXRJbml0aWFsaXplcigpCisJICogQGdlbmVyYXRlZAorCSAqLworCWludCBJTklUSUFMSVpFUiA9IDMxOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlVSSTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IElOSVRJQUxJWkVSX19VUkkgPSBNb2RlbFBhY2thZ2UuTk9ERV9ERUNPUkFUT1JfX1VSSTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5UeXBlIFVSSTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IElOSVRJQUxJWkVSX19UWVBFX1VSSSA9IE1vZGVsUGFja2FnZS5OT0RFX0RFQ09SQVRPUl9fVFlQRV9VUkk7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RHVibGluIENvcmU8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBJTklUSUFMSVpFUl9fRFVCTElOX0NPUkUgPSBNb2RlbFBhY2thZ2UuTk9ERV9ERUNPUkFUT1JfX0RVQkxJTl9DT1JFOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkxhYmVscyBUbyBVcGRhdGU8L2I+PC9lbT4nIHJlZmVyZW5jZSBsaXN0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IElOSVRJQUxJWkVSX19MQUJFTFNfVE9fVVBEQVRFID0gTW9kZWxQYWNrYWdlLk5PREVfREVDT1JBVE9SX19MQUJFTFNfVE9fVVBEQVRFOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkdyYXBoPC9iPjwvZW0+JyBjb250YWluZXIgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IElOSVRJQUxJWkVSX19HUkFQSCA9IE1vZGVsUGFja2FnZS5OT0RFX0RFQ09SQVRPUl9fR1JBUEg7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RW5hYmxlZDwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IElOSVRJQUxJWkVSX19FTkFCTEVEID0gTW9kZWxQYWNrYWdlLk5PREVfREVDT1JBVE9SX19FTkFCTEVEOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkdyYXBoIERlY29yYXRlZDwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IElOSVRJQUxJWkVSX19HUkFQSF9ERUNPUkFURUQgPSBNb2RlbFBhY2thZ2UuTk9ERV9ERUNPUkFUT1JfX0dSQVBIX0RFQ09SQVRFRDsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5Qcm9ncmVzczwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IElOSVRJQUxJWkVSX19QUk9HUkVTUyA9IE1vZGVsUGFja2FnZS5OT0RFX0RFQ09SQVRPUl9fUFJPR1JFU1M7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RGlzZWFzZSBOYW1lPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgSU5JVElBTElaRVJfX0RJU0VBU0VfTkFNRSA9IE1vZGVsUGFja2FnZS5OT0RFX0RFQ09SQVRPUl9GRUFUVVJFX0NPVU5UICsgMDsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5UYXJnZXQgSVNPIEtleTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IElOSVRJQUxJWkVSX19UQVJHRVRfSVNPX0tFWSA9IE1vZGVsUGFja2FnZS5OT0RFX0RFQ09SQVRPUl9GRUFUVVJFX0NPVU5UICsgMTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5UYXJnZXQgVVJJPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgSU5JVElBTElaRVJfX1RBUkdFVF9VUkkgPSBNb2RlbFBhY2thZ2UuTk9ERV9ERUNPUkFUT1JfRkVBVFVSRV9DT1VOVCArIDI7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+UG9wdWxhdGlvbiBJZGVudGlmaWVyPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgSU5JVElBTElaRVJfX1BPUFVMQVRJT05fSURFTlRJRklFUiA9IE1vZGVsUGFja2FnZS5OT0RFX0RFQ09SQVRPUl9GRUFUVVJFX0NPVU5UICsgMzsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5Db21wYXJ0bWVudHM8L2I+PC9lbT4nIGF0dHJpYnV0ZSBsaXN0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IElOSVRJQUxJWkVSX19DT01QQVJUTUVOVFMgPSBNb2RlbFBhY2thZ2UuTk9ERV9ERUNPUkFUT1JfRkVBVFVSRV9DT1VOVCArIDQ7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+Q29tcGFydG1lbnQgVmFsdWVzPC9iPjwvZW0+JyBhdHRyaWJ1dGUgbGlzdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBJTklUSUFMSVpFUl9fQ09NUEFSVE1FTlRfVkFMVUVTID0gTW9kZWxQYWNrYWdlLk5PREVfREVDT1JBVE9SX0ZFQVRVUkVfQ09VTlQgKyA1OworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlVzZSBGcmFjdGlvbnM8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBJTklUSUFMSVpFUl9fVVNFX0ZSQUNUSU9OUyA9IE1vZGVsUGFja2FnZS5OT0RFX0RFQ09SQVRPUl9GRUFUVVJFX0NPVU5UICsgNjsKKworCS8qKgorCSAqIFRoZSBudW1iZXIgb2Ygc3RydWN0dXJhbCBmZWF0dXJlcyBvZiB0aGUgJzxlbT5Jbml0aWFsaXplcjwvZW0+JyBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBJTklUSUFMSVpFUl9GRUFUVVJFX0NPVU5UID0gTW9kZWxQYWNrYWdlLk5PREVfREVDT1JBVE9SX0ZFQVRVUkVfQ09VTlQgKyA3OworCisJLyoqCisJICogVGhlIG1ldGEgb2JqZWN0IGlkIGZvciB0aGUgJzxlbT5SYW5kb208L2VtPicgZGF0YSB0eXBlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSBqYXZhLnV0aWwuUmFuZG9tCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuaW1wbC5TdGFuZGFyZFBhY2thZ2VJbXBsI2dldFJhbmRvbSgpCisJICogQGdlbmVyYXRlZAorCSAqLworCWludCBSQU5ET00gPSAzMjsKKworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLkRldGVybWluaXN0aWNTRUlSRGlzZWFzZU1vZGVsIDxlbT5EZXRlcm1pbmlzdGljIFNFSVIgRGlzZWFzZSBNb2RlbDwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJzxlbT5EZXRlcm1pbmlzdGljIFNFSVIgRGlzZWFzZSBNb2RlbDwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5EZXRlcm1pbmlzdGljU0VJUkRpc2Vhc2VNb2RlbAorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQ2xhc3MgZ2V0RGV0ZXJtaW5pc3RpY1NFSVJEaXNlYXNlTW9kZWwoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5EZXRlcm1pbmlzdGljU0lEaXNlYXNlTW9kZWwgPGVtPkRldGVybWluaXN0aWMgU0kgRGlzZWFzZSBNb2RlbDwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJzxlbT5EZXRlcm1pbmlzdGljIFNJIERpc2Vhc2UgTW9kZWw8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuRGV0ZXJtaW5pc3RpY1NJRGlzZWFzZU1vZGVsCisJICogQGdlbmVyYXRlZAorCSAqLworCUVDbGFzcyBnZXREZXRlcm1pbmlzdGljU0lEaXNlYXNlTW9kZWwoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5EZXRlcm1pbmlzdGljU0lSRGlzZWFzZU1vZGVsIDxlbT5EZXRlcm1pbmlzdGljIFNJUiBEaXNlYXNlIE1vZGVsPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAnPGVtPkRldGVybWluaXN0aWMgU0lSIERpc2Vhc2UgTW9kZWw8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuRGV0ZXJtaW5pc3RpY1NJUkRpc2Vhc2VNb2RlbAorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQ2xhc3MgZ2V0RGV0ZXJtaW5pc3RpY1NJUkRpc2Vhc2VNb2RlbCgpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLkRpc2Vhc2VNb2RlbCA8ZW0+RGlzZWFzZSBNb2RlbDwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJzxlbT5EaXNlYXNlIE1vZGVsPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLkRpc2Vhc2VNb2RlbAorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQ2xhc3MgZ2V0RGlzZWFzZU1vZGVsKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5EaXNlYXNlTW9kZWwjZ2V0UG9wdWxhdGlvbklkZW50aWZpZXIgPGVtPlBvcHVsYXRpb24gSWRlbnRpZmllcjwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPGVtPlBvcHVsYXRpb24gSWRlbnRpZmllcjwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5EaXNlYXNlTW9kZWwjZ2V0UG9wdWxhdGlvbklkZW50aWZpZXIoKQorCSAqIEBzZWUgI2dldERpc2Vhc2VNb2RlbCgpCisJICogQGdlbmVyYXRlZAorCSAqLworCUVBdHRyaWJ1dGUgZ2V0RGlzZWFzZU1vZGVsX1BvcHVsYXRpb25JZGVudGlmaWVyKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5EaXNlYXNlTW9kZWwjZ2V0VGltZVBlcmlvZCA8ZW0+VGltZSBQZXJpb2Q8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxlbT5UaW1lIFBlcmlvZDwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5EaXNlYXNlTW9kZWwjZ2V0VGltZVBlcmlvZCgpCisJICogQHNlZSAjZ2V0RGlzZWFzZU1vZGVsKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUF0dHJpYnV0ZSBnZXREaXNlYXNlTW9kZWxfVGltZVBlcmlvZCgpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuRGlzZWFzZU1vZGVsI2dldERpc2Vhc2VOYW1lIDxlbT5EaXNlYXNlIE5hbWU8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxlbT5EaXNlYXNlIE5hbWU8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuRGlzZWFzZU1vZGVsI2dldERpc2Vhc2VOYW1lKCkKKwkgKiBAc2VlICNnZXREaXNlYXNlTW9kZWwoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQXR0cmlidXRlIGdldERpc2Vhc2VNb2RlbF9EaXNlYXNlTmFtZSgpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuRGlzZWFzZU1vZGVsI2lzRmluaXRlRGlmZmVyZW5jZSA8ZW0+RmluaXRlIERpZmZlcmVuY2U8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxlbT5GaW5pdGUgRGlmZmVyZW5jZTwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5EaXNlYXNlTW9kZWwjaXNGaW5pdGVEaWZmZXJlbmNlKCkKKwkgKiBAc2VlICNnZXREaXNlYXNlTW9kZWwoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQXR0cmlidXRlIGdldERpc2Vhc2VNb2RlbF9GaW5pdGVEaWZmZXJlbmNlKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5EaXNlYXNlTW9kZWwjaXNGcmVxdWVuY3lEZXBlbmRlbnQgPGVtPkZyZXF1ZW5jeSBEZXBlbmRlbnQ8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxlbT5GcmVxdWVuY3kgRGVwZW5kZW50PC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLkRpc2Vhc2VNb2RlbCNpc0ZyZXF1ZW5jeURlcGVuZGVudCgpCisJICogQHNlZSAjZ2V0RGlzZWFzZU1vZGVsKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUF0dHJpYnV0ZSBnZXREaXNlYXNlTW9kZWxfRnJlcXVlbmN5RGVwZW5kZW50KCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuRGlzZWFzZU1vZGVsTGFiZWwgPGVtPkRpc2Vhc2UgTW9kZWwgTGFiZWw8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICc8ZW0+RGlzZWFzZSBNb2RlbCBMYWJlbDwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5EaXNlYXNlTW9kZWxMYWJlbAorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQ2xhc3MgZ2V0RGlzZWFzZU1vZGVsTGFiZWwoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgcmVmZXJlbmNlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLkRpc2Vhc2VNb2RlbExhYmVsI2dldFBvcHVsYXRpb25MYWJlbCA8ZW0+UG9wdWxhdGlvbiBMYWJlbDwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIHJlZmVyZW5jZSAnPGVtPlBvcHVsYXRpb24gTGFiZWw8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuRGlzZWFzZU1vZGVsTGFiZWwjZ2V0UG9wdWxhdGlvbkxhYmVsKCkKKwkgKiBAc2VlICNnZXREaXNlYXNlTW9kZWxMYWJlbCgpCisJICogQGdlbmVyYXRlZAorCSAqLworCUVSZWZlcmVuY2UgZ2V0RGlzZWFzZU1vZGVsTGFiZWxfUG9wdWxhdGlvbkxhYmVsKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIHJlZmVyZW5jZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5EaXNlYXNlTW9kZWxMYWJlbCNnZXRQb3B1bGF0aW9uTW9kZWxMYWJlbCA8ZW0+UG9wdWxhdGlvbiBNb2RlbCBMYWJlbDwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIHJlZmVyZW5jZSAnPGVtPlBvcHVsYXRpb24gTW9kZWwgTGFiZWw8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuRGlzZWFzZU1vZGVsTGFiZWwjZ2V0UG9wdWxhdGlvbk1vZGVsTGFiZWwoKQorCSAqIEBzZWUgI2dldERpc2Vhc2VNb2RlbExhYmVsKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRVJlZmVyZW5jZSBnZXREaXNlYXNlTW9kZWxMYWJlbF9Qb3B1bGF0aW9uTW9kZWxMYWJlbCgpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLkRpc2Vhc2VNb2RlbExhYmVsVmFsdWUgPGVtPkRpc2Vhc2UgTW9kZWwgTGFiZWwgVmFsdWU8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICc8ZW0+RGlzZWFzZSBNb2RlbCBMYWJlbCBWYWx1ZTwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5EaXNlYXNlTW9kZWxMYWJlbFZhbHVlCisJICogQGdlbmVyYXRlZAorCSAqLworCUVDbGFzcyBnZXREaXNlYXNlTW9kZWxMYWJlbFZhbHVlKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5EaXNlYXNlTW9kZWxMYWJlbFZhbHVlI2dldFBvcHVsYXRpb25Db3VudCA8ZW0+UG9wdWxhdGlvbiBDb3VudDwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPGVtPlBvcHVsYXRpb24gQ291bnQ8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZSNnZXRQb3B1bGF0aW9uQ291bnQoKQorCSAqIEBzZWUgI2dldERpc2Vhc2VNb2RlbExhYmVsVmFsdWUoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQXR0cmlidXRlIGdldERpc2Vhc2VNb2RlbExhYmVsVmFsdWVfUG9wdWxhdGlvbkNvdW50KCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuSW5mZWN0b3IgPGVtPkluZmVjdG9yPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAnPGVtPkluZmVjdG9yPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLkluZmVjdG9yCisJICogQGdlbmVyYXRlZAorCSAqLworCUVDbGFzcyBnZXRJbmZlY3RvcigpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSByZWZlcmVuY2UgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuSW5mZWN0b3IjZ2V0RGlzZWFzZU1vZGVsIDxlbT5EaXNlYXNlIE1vZGVsPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgcmVmZXJlbmNlICc8ZW0+RGlzZWFzZSBNb2RlbDwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5JbmZlY3RvciNnZXREaXNlYXNlTW9kZWwoKQorCSAqIEBzZWUgI2dldEluZmVjdG9yKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRVJlZmVyZW5jZSBnZXRJbmZlY3Rvcl9EaXNlYXNlTW9kZWwoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLkluZmVjdG9yI2dldFRhcmdldFVSSSA8ZW0+VGFyZ2V0IFVSSTwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPGVtPlRhcmdldCBVUkk8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuSW5mZWN0b3IjZ2V0VGFyZ2V0VVJJKCkKKwkgKiBAc2VlICNnZXRJbmZlY3RvcigpCisJICogQGdlbmVyYXRlZAorCSAqLworCUVBdHRyaWJ1dGUgZ2V0SW5mZWN0b3JfVGFyZ2V0VVJJKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5JbmZlY3RvciNnZXREaXNlYXNlTmFtZSA8ZW0+RGlzZWFzZSBOYW1lPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+RGlzZWFzZSBOYW1lPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLkluZmVjdG9yI2dldERpc2Vhc2VOYW1lKCkKKwkgKiBAc2VlICNnZXRJbmZlY3RvcigpCisJICogQGdlbmVyYXRlZAorCSAqLworCUVBdHRyaWJ1dGUgZ2V0SW5mZWN0b3JfRGlzZWFzZU5hbWUoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLkluZmVjdG9yI2dldFRhcmdldElTT0tleSA8ZW0+VGFyZ2V0IElTTyBLZXk8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxlbT5UYXJnZXQgSVNPIEtleTwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5JbmZlY3RvciNnZXRUYXJnZXRJU09LZXkoKQorCSAqIEBzZWUgI2dldEluZmVjdG9yKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUF0dHJpYnV0ZSBnZXRJbmZlY3Rvcl9UYXJnZXRJU09LZXkoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgcmVmZXJlbmNlIGxpc3QgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuSW5mZWN0b3IjZ2V0TGFiZWxzVG9JbmZlY3QgPGVtPkxhYmVscyBUbyBJbmZlY3Q8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSByZWZlcmVuY2UgbGlzdCAnPGVtPkxhYmVscyBUbyBJbmZlY3Q8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuSW5mZWN0b3IjZ2V0TGFiZWxzVG9JbmZlY3QoKQorCSAqIEBzZWUgI2dldEluZmVjdG9yKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRVJlZmVyZW5jZSBnZXRJbmZlY3Rvcl9MYWJlbHNUb0luZmVjdCgpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuSW5mZWN0b3IjZ2V0UG9wdWxhdGlvbklkZW50aWZpZXIgPGVtPlBvcHVsYXRpb24gSWRlbnRpZmllcjwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPGVtPlBvcHVsYXRpb24gSWRlbnRpZmllcjwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5JbmZlY3RvciNnZXRQb3B1bGF0aW9uSWRlbnRpZmllcigpCisJICogQHNlZSAjZ2V0SW5mZWN0b3IoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQXR0cmlidXRlIGdldEluZmVjdG9yX1BvcHVsYXRpb25JZGVudGlmaWVyKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5JbmZlY3RvciNpc0luZmVjdFBlcmNlbnRhZ2UgPGVtPkluZmVjdCBQZXJjZW50YWdlPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+SW5mZWN0IFBlcmNlbnRhZ2U8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuSW5mZWN0b3IjaXNJbmZlY3RQZXJjZW50YWdlKCkKKwkgKiBAc2VlICNnZXRJbmZlY3RvcigpCisJICogQGdlbmVyYXRlZAorCSAqLworCUVBdHRyaWJ1dGUgZ2V0SW5mZWN0b3JfSW5mZWN0UGVyY2VudGFnZSgpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuSW5mZWN0b3IjZ2V0VGFyZ2V0RmVhdHVyZSA8ZW0+VGFyZ2V0IEZlYXR1cmU8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxlbT5UYXJnZXQgRmVhdHVyZTwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5JbmZlY3RvciNnZXRUYXJnZXRGZWF0dXJlKCkKKwkgKiBAc2VlICNnZXRJbmZlY3RvcigpCisJICogQGdlbmVyYXRlZAorCSAqLworCUVBdHRyaWJ1dGUgZ2V0SW5mZWN0b3JfVGFyZ2V0RmVhdHVyZSgpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlNFSVIgPGVtPlNFSVI8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICc8ZW0+U0VJUjwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TRUlSCisJICogQGdlbmVyYXRlZAorCSAqLworCUVDbGFzcyBnZXRTRUlSKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TRUlSI2dldEluY3ViYXRpb25SYXRlIDxlbT5JbmN1YmF0aW9uIFJhdGU8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxlbT5JbmN1YmF0aW9uIFJhdGU8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU0VJUiNnZXRJbmN1YmF0aW9uUmF0ZSgpCisJICogQHNlZSAjZ2V0U0VJUigpCisJICogQGdlbmVyYXRlZAorCSAqLworCUVBdHRyaWJ1dGUgZ2V0U0VJUl9JbmN1YmF0aW9uUmF0ZSgpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlNFSVJMYWJlbCA8ZW0+U0VJUiBMYWJlbDwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJzxlbT5TRUlSIExhYmVsPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlNFSVJMYWJlbAorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQ2xhc3MgZ2V0U0VJUkxhYmVsKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU0VJUkxhYmVsVmFsdWUgPGVtPlNFSVIgTGFiZWwgVmFsdWU8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICc8ZW0+U0VJUiBMYWJlbCBWYWx1ZTwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TRUlSTGFiZWxWYWx1ZQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQ2xhc3MgZ2V0U0VJUkxhYmVsVmFsdWUoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlNFSVJMYWJlbFZhbHVlI2dldEUgPGVtPkU8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxlbT5FPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlNFSVJMYWJlbFZhbHVlI2dldEUoKQorCSAqIEBzZWUgI2dldFNFSVJMYWJlbFZhbHVlKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUF0dHJpYnV0ZSBnZXRTRUlSTGFiZWxWYWx1ZV9FKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU0kgPGVtPlNJPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAnPGVtPlNJPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlNJCisJICogQGdlbmVyYXRlZAorCSAqLworCUVDbGFzcyBnZXRTSSgpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU0kjZ2V0VHJhbnNtaXNzaW9uUmF0ZSA8ZW0+VHJhbnNtaXNzaW9uIFJhdGU8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxlbT5UcmFuc21pc3Npb24gUmF0ZTwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TSSNnZXRUcmFuc21pc3Npb25SYXRlKCkKKwkgKiBAc2VlICNnZXRTSSgpCisJICogQGdlbmVyYXRlZAorCSAqLworCUVBdHRyaWJ1dGUgZ2V0U0lfVHJhbnNtaXNzaW9uUmF0ZSgpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU0kjZ2V0Tm9uTGluZWFyaXR5Q29lZmZpY2llbnQgPGVtPk5vbiBMaW5lYXJpdHkgQ29lZmZpY2llbnQ8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxlbT5Ob24gTGluZWFyaXR5IENvZWZmaWNpZW50PC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlNJI2dldE5vbkxpbmVhcml0eUNvZWZmaWNpZW50KCkKKwkgKiBAc2VlICNnZXRTSSgpCisJICogQGdlbmVyYXRlZAorCSAqLworCUVBdHRyaWJ1dGUgZ2V0U0lfTm9uTGluZWFyaXR5Q29lZmZpY2llbnQoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlNJI2dldFJlY292ZXJ5UmF0ZSA8ZW0+UmVjb3ZlcnkgUmF0ZTwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPGVtPlJlY292ZXJ5IFJhdGU8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU0kjZ2V0UmVjb3ZlcnlSYXRlKCkKKwkgKiBAc2VlICNnZXRTSSgpCisJICogQGdlbmVyYXRlZAorCSAqLworCUVBdHRyaWJ1dGUgZ2V0U0lfUmVjb3ZlcnlSYXRlKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TSSNnZXRJbmZlY3Rpb3VzTW9ydGFsaXR5UmF0ZSA8ZW0+SW5mZWN0aW91cyBNb3J0YWxpdHkgUmF0ZTwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPGVtPkluZmVjdGlvdXMgTW9ydGFsaXR5IFJhdGU8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU0kjZ2V0SW5mZWN0aW91c01vcnRhbGl0eVJhdGUoKQorCSAqIEBzZWUgI2dldFNJKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUF0dHJpYnV0ZSBnZXRTSV9JbmZlY3Rpb3VzTW9ydGFsaXR5UmF0ZSgpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlNJSW5mZWN0b3IgPGVtPlNJIEluZmVjdG9yPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAnPGVtPlNJIEluZmVjdG9yPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlNJSW5mZWN0b3IKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUNsYXNzIGdldFNJSW5mZWN0b3IoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlNJSW5mZWN0b3IjZ2V0SW5mZWN0aW91c0NvdW50IDxlbT5JbmZlY3Rpb3VzIENvdW50PC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+SW5mZWN0aW91cyBDb3VudDwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TSUluZmVjdG9yI2dldEluZmVjdGlvdXNDb3VudCgpCisJICogQHNlZSAjZ2V0U0lJbmZlY3RvcigpCisJICogQGdlbmVyYXRlZAorCSAqLworCUVBdHRyaWJ1dGUgZ2V0U0lJbmZlY3Rvcl9JbmZlY3Rpb3VzQ291bnQoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TSUxhYmVsIDxlbT5TSSBMYWJlbDwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJzxlbT5TSSBMYWJlbDwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TSUxhYmVsCisJICogQGdlbmVyYXRlZAorCSAqLworCUVDbGFzcyBnZXRTSUxhYmVsKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU0lMYWJlbFZhbHVlIDxlbT5TSSBMYWJlbCBWYWx1ZTwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJzxlbT5TSSBMYWJlbCBWYWx1ZTwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TSUxhYmVsVmFsdWUKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUNsYXNzIGdldFNJTGFiZWxWYWx1ZSgpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU0lMYWJlbFZhbHVlI2dldEkgPGVtPkk8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxlbT5JPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlNJTGFiZWxWYWx1ZSNnZXRJKCkKKwkgKiBAc2VlICNnZXRTSUxhYmVsVmFsdWUoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQXR0cmlidXRlIGdldFNJTGFiZWxWYWx1ZV9JKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU0lSIDxlbT5TSVI8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICc8ZW0+U0lSPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlNJUgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQ2xhc3MgZ2V0U0lSKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TSVIjZ2V0SW1tdW5pdHlMb3NzUmF0ZSA8ZW0+SW1tdW5pdHkgTG9zcyBSYXRlPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+SW1tdW5pdHkgTG9zcyBSYXRlPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlNJUiNnZXRJbW11bml0eUxvc3NSYXRlKCkKKwkgKiBAc2VlICNnZXRTSVIoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQXR0cmlidXRlIGdldFNJUl9JbW11bml0eUxvc3NSYXRlKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU0lSTGFiZWwgPGVtPlNJUiBMYWJlbDwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJzxlbT5TSVIgTGFiZWw8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU0lSTGFiZWwKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUNsYXNzIGdldFNJUkxhYmVsKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU0lSTGFiZWxWYWx1ZSA8ZW0+U0lSIExhYmVsIFZhbHVlPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAnPGVtPlNJUiBMYWJlbCBWYWx1ZTwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TSVJMYWJlbFZhbHVlCisJICogQGdlbmVyYXRlZAorCSAqLworCUVDbGFzcyBnZXRTSVJMYWJlbFZhbHVlKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TSVJMYWJlbFZhbHVlI2dldFIgPGVtPlI8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxlbT5SPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlNJUkxhYmVsVmFsdWUjZ2V0UigpCisJICogQHNlZSAjZ2V0U0lSTGFiZWxWYWx1ZSgpCisJICogQGdlbmVyYXRlZAorCSAqLworCUVBdHRyaWJ1dGUgZ2V0U0lSTGFiZWxWYWx1ZV9SKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmREaXNlYXNlTW9kZWwgPGVtPkRpc2Vhc2UgTW9kZWw8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICc8ZW0+RGlzZWFzZSBNb2RlbDwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZERpc2Vhc2VNb2RlbAorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQ2xhc3MgZ2V0U3RhbmRhcmREaXNlYXNlTW9kZWwoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkRGlzZWFzZU1vZGVsI2dldFJlZmVyZW5jZVBvcHVsYXRpb25EZW5zaXR5IDxlbT5SZWZlcmVuY2UgUG9wdWxhdGlvbiBEZW5zaXR5PC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+UmVmZXJlbmNlIFBvcHVsYXRpb24gRGVuc2l0eTwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZERpc2Vhc2VNb2RlbCNnZXRSZWZlcmVuY2VQb3B1bGF0aW9uRGVuc2l0eSgpCisJICogQHNlZSAjZ2V0U3RhbmRhcmREaXNlYXNlTW9kZWwoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQXR0cmlidXRlIGdldFN0YW5kYXJkRGlzZWFzZU1vZGVsX1JlZmVyZW5jZVBvcHVsYXRpb25EZW5zaXR5KCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZERpc2Vhc2VNb2RlbCNnZXRSb2FkTmV0d29ya0luZmVjdGlvdXNQcm9wb3J0aW9uIDxlbT5Sb2FkIE5ldHdvcmsgSW5mZWN0aW91cyBQcm9wb3J0aW9uPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+Um9hZCBOZXR3b3JrIEluZmVjdGlvdXMgUHJvcG9ydGlvbjwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZERpc2Vhc2VNb2RlbCNnZXRSb2FkTmV0d29ya0luZmVjdGlvdXNQcm9wb3J0aW9uKCkKKwkgKiBAc2VlICNnZXRTdGFuZGFyZERpc2Vhc2VNb2RlbCgpCisJICogQGdlbmVyYXRlZAorCSAqLworCUVBdHRyaWJ1dGUgZ2V0U3RhbmRhcmREaXNlYXNlTW9kZWxfUm9hZE5ldHdvcmtJbmZlY3Rpb3VzUHJvcG9ydGlvbigpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmREaXNlYXNlTW9kZWwjZ2V0Q2hhcmFjdGVyaXN0aWNNaXhpbmdEaXN0YW5jZSA8ZW0+Q2hhcmFjdGVyaXN0aWMgTWl4aW5nIERpc3RhbmNlPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+Q2hhcmFjdGVyaXN0aWMgTWl4aW5nIERpc3RhbmNlPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkRGlzZWFzZU1vZGVsI2dldENoYXJhY3RlcmlzdGljTWl4aW5nRGlzdGFuY2UoKQorCSAqIEBzZWUgI2dldFN0YW5kYXJkRGlzZWFzZU1vZGVsKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUF0dHJpYnV0ZSBnZXRTdGFuZGFyZERpc2Vhc2VNb2RlbF9DaGFyYWN0ZXJpc3RpY01peGluZ0Rpc3RhbmNlKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbCA8ZW0+RGlzZWFzZSBNb2RlbCBMYWJlbDwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJzxlbT5EaXNlYXNlIE1vZGVsIExhYmVsPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWwKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUNsYXNzIGdldFN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWwoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsVmFsdWUgPGVtPkRpc2Vhc2UgTW9kZWwgTGFiZWwgVmFsdWU8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICc8ZW0+RGlzZWFzZSBNb2RlbCBMYWJlbCBWYWx1ZTwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsVmFsdWUKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUNsYXNzIGdldFN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZSgpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbFZhbHVlI2dldFMgPGVtPlM8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxlbT5TPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZSNnZXRTKCkKKwkgKiBAc2VlICNnZXRTdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsVmFsdWUoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQXR0cmlidXRlIGdldFN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZV9TKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsVmFsdWUjZ2V0SW5jaWRlbmNlIDxlbT5JbmNpZGVuY2U8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxlbT5JbmNpZGVuY2U8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbFZhbHVlI2dldEluY2lkZW5jZSgpCisJICogQHNlZSAjZ2V0U3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbFZhbHVlKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUF0dHJpYnV0ZSBnZXRTdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsVmFsdWVfSW5jaWRlbmNlKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsVmFsdWUjZ2V0RGlzZWFzZURlYXRocyA8ZW0+RGlzZWFzZSBEZWF0aHM8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxlbT5EaXNlYXNlIERlYXRoczwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsVmFsdWUjZ2V0RGlzZWFzZURlYXRocygpCisJICogQHNlZSAjZ2V0U3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbFZhbHVlKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUF0dHJpYnV0ZSBnZXRTdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsVmFsdWVfRGlzZWFzZURlYXRocygpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkSW5mZWN0b3IgPGVtPkluZmVjdG9yPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAnPGVtPkluZmVjdG9yPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkSW5mZWN0b3IKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUNsYXNzIGdldFN0YW5kYXJkSW5mZWN0b3IoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdG9jaGFzdGljU0VJUkRpc2Vhc2VNb2RlbCA8ZW0+U3RvY2hhc3RpYyBTRUlSIERpc2Vhc2UgTW9kZWw8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICc8ZW0+U3RvY2hhc3RpYyBTRUlSIERpc2Vhc2UgTW9kZWw8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RvY2hhc3RpY1NFSVJEaXNlYXNlTW9kZWwKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUNsYXNzIGdldFN0b2NoYXN0aWNTRUlSRGlzZWFzZU1vZGVsKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RvY2hhc3RpY1NJRGlzZWFzZU1vZGVsIDxlbT5TdG9jaGFzdGljIFNJIERpc2Vhc2UgTW9kZWw8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICc8ZW0+U3RvY2hhc3RpYyBTSSBEaXNlYXNlIE1vZGVsPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlN0b2NoYXN0aWNTSURpc2Vhc2VNb2RlbAorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQ2xhc3MgZ2V0U3RvY2hhc3RpY1NJRGlzZWFzZU1vZGVsKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RvY2hhc3RpY1NJUkRpc2Vhc2VNb2RlbCA8ZW0+U3RvY2hhc3RpYyBTSVIgRGlzZWFzZSBNb2RlbDwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJzxlbT5TdG9jaGFzdGljIFNJUiBEaXNlYXNlIE1vZGVsPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlN0b2NoYXN0aWNTSVJEaXNlYXNlTW9kZWwKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUNsYXNzIGdldFN0b2NoYXN0aWNTSVJEaXNlYXNlTW9kZWwoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdG9jaGFzdGljRGlzZWFzZU1vZGVsIDxlbT5TdG9jaGFzdGljIERpc2Vhc2UgTW9kZWw8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICc8ZW0+U3RvY2hhc3RpYyBEaXNlYXNlIE1vZGVsPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlN0b2NoYXN0aWNEaXNlYXNlTW9kZWwKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUNsYXNzIGdldFN0b2NoYXN0aWNEaXNlYXNlTW9kZWwoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlN0b2NoYXN0aWNEaXNlYXNlTW9kZWwjZ2V0U2VlZCA8ZW0+U2VlZDwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPGVtPlNlZWQ8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RvY2hhc3RpY0Rpc2Vhc2VNb2RlbCNnZXRTZWVkKCkKKwkgKiBAc2VlICNnZXRTdG9jaGFzdGljRGlzZWFzZU1vZGVsKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUF0dHJpYnV0ZSBnZXRTdG9jaGFzdGljRGlzZWFzZU1vZGVsX1NlZWQoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlN0b2NoYXN0aWNEaXNlYXNlTW9kZWwjZ2V0UmFuZG9tR2VuZXJhdG9yIDxlbT5SYW5kb20gR2VuZXJhdG9yPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+UmFuZG9tIEdlbmVyYXRvcjwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdG9jaGFzdGljRGlzZWFzZU1vZGVsI2dldFJhbmRvbUdlbmVyYXRvcigpCisJICogQHNlZSAjZ2V0U3RvY2hhc3RpY0Rpc2Vhc2VNb2RlbCgpCisJICogQGdlbmVyYXRlZAorCSAqLworCUVBdHRyaWJ1dGUgZ2V0U3RvY2hhc3RpY0Rpc2Vhc2VNb2RlbF9SYW5kb21HZW5lcmF0b3IoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZFN0b2NoYXN0aWNEaXNlYXNlTW9kZWwgPGVtPlN0b2NoYXN0aWMgRGlzZWFzZSBNb2RlbDwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJzxlbT5TdG9jaGFzdGljIERpc2Vhc2UgTW9kZWw8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmRTdG9jaGFzdGljRGlzZWFzZU1vZGVsCisJICogQGdlbmVyYXRlZAorCSAqLworCUVDbGFzcyBnZXRTdGFuZGFyZFN0b2NoYXN0aWNEaXNlYXNlTW9kZWwoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkU3RvY2hhc3RpY0Rpc2Vhc2VNb2RlbCNnZXRHYWluIDxlbT5HYWluPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+R2FpbjwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZFN0b2NoYXN0aWNEaXNlYXNlTW9kZWwjZ2V0R2FpbigpCisJICogQHNlZSAjZ2V0U3RhbmRhcmRTdG9jaGFzdGljRGlzZWFzZU1vZGVsKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUF0dHJpYnV0ZSBnZXRTdGFuZGFyZFN0b2NoYXN0aWNEaXNlYXNlTW9kZWxfR2FpbigpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlNJUklub2N1bGF0b3IgPGVtPlNJUiBJbm9jdWxhdG9yPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAnPGVtPlNJUiBJbm9jdWxhdG9yPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlNJUklub2N1bGF0b3IKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUNsYXNzIGdldFNJUklub2N1bGF0b3IoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlNJUklub2N1bGF0b3IjZ2V0SW5vY3VsYXRlZFBlcmNlbnRhZ2UgPGVtPklub2N1bGF0ZWQgUGVyY2VudGFnZTwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPGVtPklub2N1bGF0ZWQgUGVyY2VudGFnZTwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TSVJJbm9jdWxhdG9yI2dldElub2N1bGF0ZWRQZXJjZW50YWdlKCkKKwkgKiBAc2VlICNnZXRTSVJJbm9jdWxhdG9yKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUF0dHJpYnV0ZSBnZXRTSVJJbm9jdWxhdG9yX0lub2N1bGF0ZWRQZXJjZW50YWdlKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TSVJJbm9jdWxhdG9yI2lzSW5vY3VsYXRlUGVyY2VudGFnZSA8ZW0+SW5vY3VsYXRlIFBlcmNlbnRhZ2U8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxlbT5Jbm9jdWxhdGUgUGVyY2VudGFnZTwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TSVJJbm9jdWxhdG9yI2lzSW5vY3VsYXRlUGVyY2VudGFnZSgpCisJICogQHNlZSAjZ2V0U0lSSW5vY3VsYXRvcigpCisJICogQGdlbmVyYXRlZAorCSAqLworCUVBdHRyaWJ1dGUgZ2V0U0lSSW5vY3VsYXRvcl9Jbm9jdWxhdGVQZXJjZW50YWdlKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RvY2hhc3RpY1BvaXNzb25TSURpc2Vhc2VNb2RlbCA8ZW0+U3RvY2hhc3RpYyBQb2lzc29uIFNJIERpc2Vhc2UgTW9kZWw8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICc8ZW0+U3RvY2hhc3RpYyBQb2lzc29uIFNJIERpc2Vhc2UgTW9kZWw8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RvY2hhc3RpY1BvaXNzb25TSURpc2Vhc2VNb2RlbAorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQ2xhc3MgZ2V0U3RvY2hhc3RpY1BvaXNzb25TSURpc2Vhc2VNb2RlbCgpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlN0b2NoYXN0aWNQb2lzc29uU0lSRGlzZWFzZU1vZGVsIDxlbT5TdG9jaGFzdGljIFBvaXNzb24gU0lSIERpc2Vhc2UgTW9kZWw8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICc8ZW0+U3RvY2hhc3RpYyBQb2lzc29uIFNJUiBEaXNlYXNlIE1vZGVsPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlN0b2NoYXN0aWNQb2lzc29uU0lSRGlzZWFzZU1vZGVsCisJICogQGdlbmVyYXRlZAorCSAqLworCUVDbGFzcyBnZXRTdG9jaGFzdGljUG9pc3NvblNJUkRpc2Vhc2VNb2RlbCgpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlN0b2NoYXN0aWNQb2lzc29uU0VJUkRpc2Vhc2VNb2RlbCA8ZW0+U3RvY2hhc3RpYyBQb2lzc29uIFNFSVIgRGlzZWFzZSBNb2RlbDwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJzxlbT5TdG9jaGFzdGljIFBvaXNzb24gU0VJUiBEaXNlYXNlIE1vZGVsPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlN0b2NoYXN0aWNQb2lzc29uU0VJUkRpc2Vhc2VNb2RlbAorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQ2xhc3MgZ2V0U3RvY2hhc3RpY1BvaXNzb25TRUlSRGlzZWFzZU1vZGVsKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuSW5mZWN0b3JJbm9jdWxhdG9yQ29sbGVjdGlvbiA8ZW0+SW5mZWN0b3IgSW5vY3VsYXRvciBDb2xsZWN0aW9uPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAnPGVtPkluZmVjdG9yIElub2N1bGF0b3IgQ29sbGVjdGlvbjwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5JbmZlY3Rvcklub2N1bGF0b3JDb2xsZWN0aW9uCisJICogQGdlbmVyYXRlZAorCSAqLworCUVDbGFzcyBnZXRJbmZlY3Rvcklub2N1bGF0b3JDb2xsZWN0aW9uKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0ICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLkluZmVjdG9ySW5vY3VsYXRvckNvbGxlY3Rpb24jZ2V0TGlzdCA8ZW0+TGlzdDwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0ICc8ZW0+TGlzdDwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5JbmZlY3Rvcklub2N1bGF0b3JDb2xsZWN0aW9uI2dldExpc3QoKQorCSAqIEBzZWUgI2dldEluZmVjdG9ySW5vY3VsYXRvckNvbGxlY3Rpb24oKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFUmVmZXJlbmNlIGdldEluZmVjdG9ySW5vY3VsYXRvckNvbGxlY3Rpb25fTGlzdCgpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuSW5mZWN0b3JJbm9jdWxhdG9yQ29sbGVjdGlvbiNnZXRJbXBvcnRGb2xkZXIgPGVtPkltcG9ydCBGb2xkZXI8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxlbT5JbXBvcnQgRm9sZGVyPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLkluZmVjdG9ySW5vY3VsYXRvckNvbGxlY3Rpb24jZ2V0SW1wb3J0Rm9sZGVyKCkKKwkgKiBAc2VlICNnZXRJbmZlY3Rvcklub2N1bGF0b3JDb2xsZWN0aW9uKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUF0dHJpYnV0ZSBnZXRJbmZlY3Rvcklub2N1bGF0b3JDb2xsZWN0aW9uX0ltcG9ydEZvbGRlcigpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLkluaXRpYWxpemVyIDxlbT5Jbml0aWFsaXplcjwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJzxlbT5Jbml0aWFsaXplcjwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5Jbml0aWFsaXplcgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQ2xhc3MgZ2V0SW5pdGlhbGl6ZXIoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLkluaXRpYWxpemVyI2dldERpc2Vhc2VOYW1lIDxlbT5EaXNlYXNlIE5hbWU8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxlbT5EaXNlYXNlIE5hbWU8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuSW5pdGlhbGl6ZXIjZ2V0RGlzZWFzZU5hbWUoKQorCSAqIEBzZWUgI2dldEluaXRpYWxpemVyKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUF0dHJpYnV0ZSBnZXRJbml0aWFsaXplcl9EaXNlYXNlTmFtZSgpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuSW5pdGlhbGl6ZXIjZ2V0VGFyZ2V0SVNPS2V5IDxlbT5UYXJnZXQgSVNPIEtleTwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPGVtPlRhcmdldCBJU08gS2V5PC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLkluaXRpYWxpemVyI2dldFRhcmdldElTT0tleSgpCisJICogQHNlZSAjZ2V0SW5pdGlhbGl6ZXIoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQXR0cmlidXRlIGdldEluaXRpYWxpemVyX1RhcmdldElTT0tleSgpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuSW5pdGlhbGl6ZXIjZ2V0VGFyZ2V0VVJJIDxlbT5UYXJnZXQgVVJJPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+VGFyZ2V0IFVSSTwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5Jbml0aWFsaXplciNnZXRUYXJnZXRVUkkoKQorCSAqIEBzZWUgI2dldEluaXRpYWxpemVyKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUF0dHJpYnV0ZSBnZXRJbml0aWFsaXplcl9UYXJnZXRVUkkoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLkluaXRpYWxpemVyI2dldFBvcHVsYXRpb25JZGVudGlmaWVyIDxlbT5Qb3B1bGF0aW9uIElkZW50aWZpZXI8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxlbT5Qb3B1bGF0aW9uIElkZW50aWZpZXI8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuSW5pdGlhbGl6ZXIjZ2V0UG9wdWxhdGlvbklkZW50aWZpZXIoKQorCSAqIEBzZWUgI2dldEluaXRpYWxpemVyKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUF0dHJpYnV0ZSBnZXRJbml0aWFsaXplcl9Qb3B1bGF0aW9uSWRlbnRpZmllcigpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgbGlzdCAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5Jbml0aWFsaXplciNnZXRDb21wYXJ0bWVudHMgPGVtPkNvbXBhcnRtZW50czwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSBsaXN0ICc8ZW0+Q29tcGFydG1lbnRzPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLkluaXRpYWxpemVyI2dldENvbXBhcnRtZW50cygpCisJICogQHNlZSAjZ2V0SW5pdGlhbGl6ZXIoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQXR0cmlidXRlIGdldEluaXRpYWxpemVyX0NvbXBhcnRtZW50cygpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgbGlzdCAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5Jbml0aWFsaXplciNnZXRDb21wYXJ0bWVudFZhbHVlcyA8ZW0+Q29tcGFydG1lbnQgVmFsdWVzPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlIGxpc3QgJzxlbT5Db21wYXJ0bWVudCBWYWx1ZXM8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuSW5pdGlhbGl6ZXIjZ2V0Q29tcGFydG1lbnRWYWx1ZXMoKQorCSAqIEBzZWUgI2dldEluaXRpYWxpemVyKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUF0dHJpYnV0ZSBnZXRJbml0aWFsaXplcl9Db21wYXJ0bWVudFZhbHVlcygpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuSW5pdGlhbGl6ZXIjaXNVc2VGcmFjdGlvbnMgPGVtPlVzZSBGcmFjdGlvbnM8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxlbT5Vc2UgRnJhY3Rpb25zPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLkluaXRpYWxpemVyI2lzVXNlRnJhY3Rpb25zKCkKKwkgKiBAc2VlICNnZXRJbml0aWFsaXplcigpCisJICogQGdlbmVyYXRlZAorCSAqLworCUVBdHRyaWJ1dGUgZ2V0SW5pdGlhbGl6ZXJfVXNlRnJhY3Rpb25zKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgZGF0YSB0eXBlICd7QGxpbmsgamF2YS51dGlsLlJhbmRvbSA8ZW0+UmFuZG9tPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciBkYXRhIHR5cGUgJzxlbT5SYW5kb208L2VtPicuCisJICogQHNlZSBqYXZhLnV0aWwuUmFuZG9tCisJICogQG1vZGVsIGluc3RhbmNlQ2xhc3M9ImphdmEudXRpbC5SYW5kb20iCisJICogQGdlbmVyYXRlZAorCSAqLworCUVEYXRhVHlwZSBnZXRSYW5kb20oKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIGZhY3RvcnkgdGhhdCBjcmVhdGVzIHRoZSBpbnN0YW5jZXMgb2YgdGhlIG1vZGVsLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgZmFjdG9yeSB0aGF0IGNyZWF0ZXMgdGhlIGluc3RhbmNlcyBvZiB0aGUgbW9kZWwuCisJICogQGdlbmVyYXRlZAorCSAqLworCVN0YW5kYXJkRmFjdG9yeSBnZXRTdGFuZGFyZEZhY3RvcnkoKTsKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogRGVmaW5lcyBsaXRlcmFscyBmb3IgdGhlIG1ldGEgb2JqZWN0cyB0aGF0IHJlcHJlc2VudAorCSAqIDx1bD4KKwkgKiAgIDxsaT5lYWNoIGNsYXNzLDwvbGk+CisJICogICA8bGk+ZWFjaCBmZWF0dXJlIG9mIGVhY2ggY2xhc3MsPC9saT4KKwkgKiAgIDxsaT5lYWNoIGVudW0sPC9saT4KKwkgKiAgIDxsaT5hbmQgZWFjaCBkYXRhIHR5cGU8L2xpPgorCSAqIDwvdWw+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCWludGVyZmFjZSBMaXRlcmFscyAgeworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5pbXBsLkRldGVybWluaXN0aWNTRUlSRGlzZWFzZU1vZGVsSW1wbCA8ZW0+RGV0ZXJtaW5pc3RpYyBTRUlSIERpc2Vhc2UgTW9kZWw8L2VtPn0nIGNsYXNzLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuaW1wbC5EZXRlcm1pbmlzdGljU0VJUkRpc2Vhc2VNb2RlbEltcGwKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuaW1wbC5TdGFuZGFyZFBhY2thZ2VJbXBsI2dldERldGVybWluaXN0aWNTRUlSRGlzZWFzZU1vZGVsKCkKKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUNsYXNzIERFVEVSTUlOSVNUSUNfU0VJUl9ESVNFQVNFX01PREVMID0gZUlOU1RBTkNFLmdldERldGVybWluaXN0aWNTRUlSRGlzZWFzZU1vZGVsKCk7CisKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuaW1wbC5EZXRlcm1pbmlzdGljU0lEaXNlYXNlTW9kZWxJbXBsIDxlbT5EZXRlcm1pbmlzdGljIFNJIERpc2Vhc2UgTW9kZWw8L2VtPn0nIGNsYXNzLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuaW1wbC5EZXRlcm1pbmlzdGljU0lEaXNlYXNlTW9kZWxJbXBsCisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLmltcGwuU3RhbmRhcmRQYWNrYWdlSW1wbCNnZXREZXRlcm1pbmlzdGljU0lEaXNlYXNlTW9kZWwoKQorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQ2xhc3MgREVURVJNSU5JU1RJQ19TSV9ESVNFQVNFX01PREVMID0gZUlOU1RBTkNFLmdldERldGVybWluaXN0aWNTSURpc2Vhc2VNb2RlbCgpOworCisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLmltcGwuRGV0ZXJtaW5pc3RpY1NJUkRpc2Vhc2VNb2RlbEltcGwgPGVtPkRldGVybWluaXN0aWMgU0lSIERpc2Vhc2UgTW9kZWw8L2VtPn0nIGNsYXNzLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuaW1wbC5EZXRlcm1pbmlzdGljU0lSRGlzZWFzZU1vZGVsSW1wbAorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5pbXBsLlN0YW5kYXJkUGFja2FnZUltcGwjZ2V0RGV0ZXJtaW5pc3RpY1NJUkRpc2Vhc2VNb2RlbCgpCisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVDbGFzcyBERVRFUk1JTklTVElDX1NJUl9ESVNFQVNFX01PREVMID0gZUlOU1RBTkNFLmdldERldGVybWluaXN0aWNTSVJEaXNlYXNlTW9kZWwoKTsKKworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5pbXBsLkRpc2Vhc2VNb2RlbEltcGwgPGVtPkRpc2Vhc2UgTW9kZWw8L2VtPn0nIGNsYXNzLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuaW1wbC5EaXNlYXNlTW9kZWxJbXBsCisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLmltcGwuU3RhbmRhcmRQYWNrYWdlSW1wbCNnZXREaXNlYXNlTW9kZWwoKQorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQ2xhc3MgRElTRUFTRV9NT0RFTCA9IGVJTlNUQU5DRS5nZXREaXNlYXNlTW9kZWwoKTsKKworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPlBvcHVsYXRpb24gSWRlbnRpZmllcjwvYj48L2VtPicgYXR0cmlidXRlIGZlYXR1cmUuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQXR0cmlidXRlIERJU0VBU0VfTU9ERUxfX1BPUFVMQVRJT05fSURFTlRJRklFUiA9IGVJTlNUQU5DRS5nZXREaXNlYXNlTW9kZWxfUG9wdWxhdGlvbklkZW50aWZpZXIoKTsKKworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPlRpbWUgUGVyaW9kPC9iPjwvZW0+JyBhdHRyaWJ1dGUgZmVhdHVyZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVBdHRyaWJ1dGUgRElTRUFTRV9NT0RFTF9fVElNRV9QRVJJT0QgPSBlSU5TVEFOQ0UuZ2V0RGlzZWFzZU1vZGVsX1RpbWVQZXJpb2QoKTsKKworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPkRpc2Vhc2UgTmFtZTwvYj48L2VtPicgYXR0cmlidXRlIGZlYXR1cmUuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQXR0cmlidXRlIERJU0VBU0VfTU9ERUxfX0RJU0VBU0VfTkFNRSA9IGVJTlNUQU5DRS5nZXREaXNlYXNlTW9kZWxfRGlzZWFzZU5hbWUoKTsKKworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPkZpbml0ZSBEaWZmZXJlbmNlPC9iPjwvZW0+JyBhdHRyaWJ1dGUgZmVhdHVyZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVBdHRyaWJ1dGUgRElTRUFTRV9NT0RFTF9fRklOSVRFX0RJRkZFUkVOQ0UgPSBlSU5TVEFOQ0UuZ2V0RGlzZWFzZU1vZGVsX0Zpbml0ZURpZmZlcmVuY2UoKTsKKworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPkZyZXF1ZW5jeSBEZXBlbmRlbnQ8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUF0dHJpYnV0ZSBESVNFQVNFX01PREVMX19GUkVRVUVOQ1lfREVQRU5ERU5UID0gZUlOU1RBTkNFLmdldERpc2Vhc2VNb2RlbF9GcmVxdWVuY3lEZXBlbmRlbnQoKTsKKworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5pbXBsLkRpc2Vhc2VNb2RlbExhYmVsSW1wbCA8ZW0+RGlzZWFzZSBNb2RlbCBMYWJlbDwvZW0+fScgY2xhc3MuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5pbXBsLkRpc2Vhc2VNb2RlbExhYmVsSW1wbAorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5pbXBsLlN0YW5kYXJkUGFja2FnZUltcGwjZ2V0RGlzZWFzZU1vZGVsTGFiZWwoKQorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQ2xhc3MgRElTRUFTRV9NT0RFTF9MQUJFTCA9IGVJTlNUQU5DRS5nZXREaXNlYXNlTW9kZWxMYWJlbCgpOworCisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+UG9wdWxhdGlvbiBMYWJlbDwvYj48L2VtPicgcmVmZXJlbmNlIGZlYXR1cmUuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFUmVmZXJlbmNlIERJU0VBU0VfTU9ERUxfTEFCRUxfX1BPUFVMQVRJT05fTEFCRUwgPSBlSU5TVEFOQ0UuZ2V0RGlzZWFzZU1vZGVsTGFiZWxfUG9wdWxhdGlvbkxhYmVsKCk7CisKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5Qb3B1bGF0aW9uIE1vZGVsIExhYmVsPC9iPjwvZW0+JyByZWZlcmVuY2UgZmVhdHVyZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVSZWZlcmVuY2UgRElTRUFTRV9NT0RFTF9MQUJFTF9fUE9QVUxBVElPTl9NT0RFTF9MQUJFTCA9IGVJTlNUQU5DRS5nZXREaXNlYXNlTW9kZWxMYWJlbF9Qb3B1bGF0aW9uTW9kZWxMYWJlbCgpOworCisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLmltcGwuRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZUltcGwgPGVtPkRpc2Vhc2UgTW9kZWwgTGFiZWwgVmFsdWU8L2VtPn0nIGNsYXNzLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuaW1wbC5EaXNlYXNlTW9kZWxMYWJlbFZhbHVlSW1wbAorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5pbXBsLlN0YW5kYXJkUGFja2FnZUltcGwjZ2V0RGlzZWFzZU1vZGVsTGFiZWxWYWx1ZSgpCisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVDbGFzcyBESVNFQVNFX01PREVMX0xBQkVMX1ZBTFVFID0gZUlOU1RBTkNFLmdldERpc2Vhc2VNb2RlbExhYmVsVmFsdWUoKTsKKworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPlBvcHVsYXRpb24gQ291bnQ8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUF0dHJpYnV0ZSBESVNFQVNFX01PREVMX0xBQkVMX1ZBTFVFX19QT1BVTEFUSU9OX0NPVU5UID0gZUlOU1RBTkNFLmdldERpc2Vhc2VNb2RlbExhYmVsVmFsdWVfUG9wdWxhdGlvbkNvdW50KCk7CisKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuaW1wbC5JbmZlY3RvckltcGwgPGVtPkluZmVjdG9yPC9lbT59JyBjbGFzcy4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLmltcGwuSW5mZWN0b3JJbXBsCisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLmltcGwuU3RhbmRhcmRQYWNrYWdlSW1wbCNnZXRJbmZlY3RvcigpCisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVDbGFzcyBJTkZFQ1RPUiA9IGVJTlNUQU5DRS5nZXRJbmZlY3RvcigpOworCisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+RGlzZWFzZSBNb2RlbDwvYj48L2VtPicgcmVmZXJlbmNlIGZlYXR1cmUuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFUmVmZXJlbmNlIElORkVDVE9SX19ESVNFQVNFX01PREVMID0gZUlOU1RBTkNFLmdldEluZmVjdG9yX0Rpc2Vhc2VNb2RlbCgpOworCisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+VGFyZ2V0IFVSSTwvYj48L2VtPicgYXR0cmlidXRlIGZlYXR1cmUuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQXR0cmlidXRlIElORkVDVE9SX19UQVJHRVRfVVJJID0gZUlOU1RBTkNFLmdldEluZmVjdG9yX1RhcmdldFVSSSgpOworCisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+RGlzZWFzZSBOYW1lPC9iPjwvZW0+JyBhdHRyaWJ1dGUgZmVhdHVyZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVBdHRyaWJ1dGUgSU5GRUNUT1JfX0RJU0VBU0VfTkFNRSA9IGVJTlNUQU5DRS5nZXRJbmZlY3Rvcl9EaXNlYXNlTmFtZSgpOworCisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+VGFyZ2V0IElTTyBLZXk8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUF0dHJpYnV0ZSBJTkZFQ1RPUl9fVEFSR0VUX0lTT19LRVkgPSBlSU5TVEFOQ0UuZ2V0SW5mZWN0b3JfVGFyZ2V0SVNPS2V5KCk7CisKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5MYWJlbHMgVG8gSW5mZWN0PC9iPjwvZW0+JyByZWZlcmVuY2UgbGlzdCBmZWF0dXJlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRVJlZmVyZW5jZSBJTkZFQ1RPUl9fTEFCRUxTX1RPX0lORkVDVCA9IGVJTlNUQU5DRS5nZXRJbmZlY3Rvcl9MYWJlbHNUb0luZmVjdCgpOworCisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+UG9wdWxhdGlvbiBJZGVudGlmaWVyPC9iPjwvZW0+JyBhdHRyaWJ1dGUgZmVhdHVyZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVBdHRyaWJ1dGUgSU5GRUNUT1JfX1BPUFVMQVRJT05fSURFTlRJRklFUiA9IGVJTlNUQU5DRS5nZXRJbmZlY3Rvcl9Qb3B1bGF0aW9uSWRlbnRpZmllcigpOworCisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+SW5mZWN0IFBlcmNlbnRhZ2U8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUF0dHJpYnV0ZSBJTkZFQ1RPUl9fSU5GRUNUX1BFUkNFTlRBR0UgPSBlSU5TVEFOQ0UuZ2V0SW5mZWN0b3JfSW5mZWN0UGVyY2VudGFnZSgpOworCisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+VGFyZ2V0IEZlYXR1cmU8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUF0dHJpYnV0ZSBJTkZFQ1RPUl9fVEFSR0VUX0ZFQVRVUkUgPSBlSU5TVEFOQ0UuZ2V0SW5mZWN0b3JfVGFyZ2V0RmVhdHVyZSgpOworCisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLmltcGwuU0VJUkltcGwgPGVtPlNFSVI8L2VtPn0nIGNsYXNzLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuaW1wbC5TRUlSSW1wbAorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5pbXBsLlN0YW5kYXJkUGFja2FnZUltcGwjZ2V0U0VJUigpCisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVDbGFzcyBTRUlSID0gZUlOU1RBTkNFLmdldFNFSVIoKTsKKworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPkluY3ViYXRpb24gUmF0ZTwvYj48L2VtPicgYXR0cmlidXRlIGZlYXR1cmUuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQXR0cmlidXRlIFNFSVJfX0lOQ1VCQVRJT05fUkFURSA9IGVJTlNUQU5DRS5nZXRTRUlSX0luY3ViYXRpb25SYXRlKCk7CisKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuaW1wbC5TRUlSTGFiZWxJbXBsIDxlbT5TRUlSIExhYmVsPC9lbT59JyBjbGFzcy4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLmltcGwuU0VJUkxhYmVsSW1wbAorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5pbXBsLlN0YW5kYXJkUGFja2FnZUltcGwjZ2V0U0VJUkxhYmVsKCkKKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUNsYXNzIFNFSVJfTEFCRUwgPSBlSU5TVEFOQ0UuZ2V0U0VJUkxhYmVsKCk7CisKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuaW1wbC5TRUlSTGFiZWxWYWx1ZUltcGwgPGVtPlNFSVIgTGFiZWwgVmFsdWU8L2VtPn0nIGNsYXNzLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuaW1wbC5TRUlSTGFiZWxWYWx1ZUltcGwKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuaW1wbC5TdGFuZGFyZFBhY2thZ2VJbXBsI2dldFNFSVJMYWJlbFZhbHVlKCkKKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUNsYXNzIFNFSVJfTEFCRUxfVkFMVUUgPSBlSU5TVEFOQ0UuZ2V0U0VJUkxhYmVsVmFsdWUoKTsKKworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPkU8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUF0dHJpYnV0ZSBTRUlSX0xBQkVMX1ZBTFVFX19FID0gZUlOU1RBTkNFLmdldFNFSVJMYWJlbFZhbHVlX0UoKTsKKworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5pbXBsLlNJSW1wbCA8ZW0+U0k8L2VtPn0nIGNsYXNzLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuaW1wbC5TSUltcGwKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuaW1wbC5TdGFuZGFyZFBhY2thZ2VJbXBsI2dldFNJKCkKKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUNsYXNzIFNJID0gZUlOU1RBTkNFLmdldFNJKCk7CisKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5UcmFuc21pc3Npb24gUmF0ZTwvYj48L2VtPicgYXR0cmlidXRlIGZlYXR1cmUuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQXR0cmlidXRlIFNJX19UUkFOU01JU1NJT05fUkFURSA9IGVJTlNUQU5DRS5nZXRTSV9UcmFuc21pc3Npb25SYXRlKCk7CisKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5Ob24gTGluZWFyaXR5IENvZWZmaWNpZW50PC9iPjwvZW0+JyBhdHRyaWJ1dGUgZmVhdHVyZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVBdHRyaWJ1dGUgU0lfX05PTl9MSU5FQVJJVFlfQ09FRkZJQ0lFTlQgPSBlSU5TVEFOQ0UuZ2V0U0lfTm9uTGluZWFyaXR5Q29lZmZpY2llbnQoKTsKKworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPlJlY292ZXJ5IFJhdGU8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUF0dHJpYnV0ZSBTSV9fUkVDT1ZFUllfUkFURSA9IGVJTlNUQU5DRS5nZXRTSV9SZWNvdmVyeVJhdGUoKTsKKworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPkluZmVjdGlvdXMgTW9ydGFsaXR5IFJhdGU8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUF0dHJpYnV0ZSBTSV9fSU5GRUNUSU9VU19NT1JUQUxJVFlfUkFURSA9IGVJTlNUQU5DRS5nZXRTSV9JbmZlY3Rpb3VzTW9ydGFsaXR5UmF0ZSgpOworCisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLmltcGwuU0lJbmZlY3RvckltcGwgPGVtPlNJIEluZmVjdG9yPC9lbT59JyBjbGFzcy4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLmltcGwuU0lJbmZlY3RvckltcGwKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuaW1wbC5TdGFuZGFyZFBhY2thZ2VJbXBsI2dldFNJSW5mZWN0b3IoKQorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQ2xhc3MgU0lfSU5GRUNUT1IgPSBlSU5TVEFOQ0UuZ2V0U0lJbmZlY3RvcigpOworCisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+SW5mZWN0aW91cyBDb3VudDwvYj48L2VtPicgYXR0cmlidXRlIGZlYXR1cmUuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQXR0cmlidXRlIFNJX0lORkVDVE9SX19JTkZFQ1RJT1VTX0NPVU5UID0gZUlOU1RBTkNFLmdldFNJSW5mZWN0b3JfSW5mZWN0aW91c0NvdW50KCk7CisKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuaW1wbC5TSUxhYmVsSW1wbCA8ZW0+U0kgTGFiZWw8L2VtPn0nIGNsYXNzLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuaW1wbC5TSUxhYmVsSW1wbAorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5pbXBsLlN0YW5kYXJkUGFja2FnZUltcGwjZ2V0U0lMYWJlbCgpCisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVDbGFzcyBTSV9MQUJFTCA9IGVJTlNUQU5DRS5nZXRTSUxhYmVsKCk7CisKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuaW1wbC5TSUxhYmVsVmFsdWVJbXBsIDxlbT5TSSBMYWJlbCBWYWx1ZTwvZW0+fScgY2xhc3MuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5pbXBsLlNJTGFiZWxWYWx1ZUltcGwKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuaW1wbC5TdGFuZGFyZFBhY2thZ2VJbXBsI2dldFNJTGFiZWxWYWx1ZSgpCisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVDbGFzcyBTSV9MQUJFTF9WQUxVRSA9IGVJTlNUQU5DRS5nZXRTSUxhYmVsVmFsdWUoKTsKKworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPkk8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUF0dHJpYnV0ZSBTSV9MQUJFTF9WQUxVRV9fSSA9IGVJTlNUQU5DRS5nZXRTSUxhYmVsVmFsdWVfSSgpOworCisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLmltcGwuU0lSSW1wbCA8ZW0+U0lSPC9lbT59JyBjbGFzcy4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLmltcGwuU0lSSW1wbAorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5pbXBsLlN0YW5kYXJkUGFja2FnZUltcGwjZ2V0U0lSKCkKKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUNsYXNzIFNJUiA9IGVJTlNUQU5DRS5nZXRTSVIoKTsKKworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPkltbXVuaXR5IExvc3MgUmF0ZTwvYj48L2VtPicgYXR0cmlidXRlIGZlYXR1cmUuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQXR0cmlidXRlIFNJUl9fSU1NVU5JVFlfTE9TU19SQVRFID0gZUlOU1RBTkNFLmdldFNJUl9JbW11bml0eUxvc3NSYXRlKCk7CisKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuaW1wbC5TSVJMYWJlbEltcGwgPGVtPlNJUiBMYWJlbDwvZW0+fScgY2xhc3MuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5pbXBsLlNJUkxhYmVsSW1wbAorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5pbXBsLlN0YW5kYXJkUGFja2FnZUltcGwjZ2V0U0lSTGFiZWwoKQorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQ2xhc3MgU0lSX0xBQkVMID0gZUlOU1RBTkNFLmdldFNJUkxhYmVsKCk7CisKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuaW1wbC5TSVJMYWJlbFZhbHVlSW1wbCA8ZW0+U0lSIExhYmVsIFZhbHVlPC9lbT59JyBjbGFzcy4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLmltcGwuU0lSTGFiZWxWYWx1ZUltcGwKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuaW1wbC5TdGFuZGFyZFBhY2thZ2VJbXBsI2dldFNJUkxhYmVsVmFsdWUoKQorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQ2xhc3MgU0lSX0xBQkVMX1ZBTFVFID0gZUlOU1RBTkNFLmdldFNJUkxhYmVsVmFsdWUoKTsKKworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPlI8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUF0dHJpYnV0ZSBTSVJfTEFCRUxfVkFMVUVfX1IgPSBlSU5TVEFOQ0UuZ2V0U0lSTGFiZWxWYWx1ZV9SKCk7CisKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuaW1wbC5TdGFuZGFyZERpc2Vhc2VNb2RlbEltcGwgPGVtPkRpc2Vhc2UgTW9kZWw8L2VtPn0nIGNsYXNzLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuaW1wbC5TdGFuZGFyZERpc2Vhc2VNb2RlbEltcGwKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuaW1wbC5TdGFuZGFyZFBhY2thZ2VJbXBsI2dldFN0YW5kYXJkRGlzZWFzZU1vZGVsKCkKKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUNsYXNzIFNUQU5EQVJEX0RJU0VBU0VfTU9ERUwgPSBlSU5TVEFOQ0UuZ2V0U3RhbmRhcmREaXNlYXNlTW9kZWwoKTsKKworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPlJlZmVyZW5jZSBQb3B1bGF0aW9uIERlbnNpdHk8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUF0dHJpYnV0ZSBTVEFOREFSRF9ESVNFQVNFX01PREVMX19SRUZFUkVOQ0VfUE9QVUxBVElPTl9ERU5TSVRZID0gZUlOU1RBTkNFLmdldFN0YW5kYXJkRGlzZWFzZU1vZGVsX1JlZmVyZW5jZVBvcHVsYXRpb25EZW5zaXR5KCk7CisKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5Sb2FkIE5ldHdvcmsgSW5mZWN0aW91cyBQcm9wb3J0aW9uPC9iPjwvZW0+JyBhdHRyaWJ1dGUgZmVhdHVyZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVBdHRyaWJ1dGUgU1RBTkRBUkRfRElTRUFTRV9NT0RFTF9fUk9BRF9ORVRXT1JLX0lORkVDVElPVVNfUFJPUE9SVElPTiA9IGVJTlNUQU5DRS5nZXRTdGFuZGFyZERpc2Vhc2VNb2RlbF9Sb2FkTmV0d29ya0luZmVjdGlvdXNQcm9wb3J0aW9uKCk7CisKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5DaGFyYWN0ZXJpc3RpYyBNaXhpbmcgRGlzdGFuY2U8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUF0dHJpYnV0ZSBTVEFOREFSRF9ESVNFQVNFX01PREVMX19DSEFSQUNURVJJU1RJQ19NSVhJTkdfRElTVEFOQ0UgPSBlSU5TVEFOQ0UuZ2V0U3RhbmRhcmREaXNlYXNlTW9kZWxfQ2hhcmFjdGVyaXN0aWNNaXhpbmdEaXN0YW5jZSgpOworCisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLmltcGwuU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbEltcGwgPGVtPkRpc2Vhc2UgTW9kZWwgTGFiZWw8L2VtPn0nIGNsYXNzLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuaW1wbC5TdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsSW1wbAorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5pbXBsLlN0YW5kYXJkUGFja2FnZUltcGwjZ2V0U3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbCgpCisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVDbGFzcyBTVEFOREFSRF9ESVNFQVNFX01PREVMX0xBQkVMID0gZUlOU1RBTkNFLmdldFN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWwoKTsKKworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5pbXBsLlN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZUltcGwgPGVtPkRpc2Vhc2UgTW9kZWwgTGFiZWwgVmFsdWU8L2VtPn0nIGNsYXNzLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuaW1wbC5TdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsVmFsdWVJbXBsCisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLmltcGwuU3RhbmRhcmRQYWNrYWdlSW1wbCNnZXRTdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsVmFsdWUoKQorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQ2xhc3MgU1RBTkRBUkRfRElTRUFTRV9NT0RFTF9MQUJFTF9WQUxVRSA9IGVJTlNUQU5DRS5nZXRTdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsVmFsdWUoKTsKKworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPlM8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUF0dHJpYnV0ZSBTVEFOREFSRF9ESVNFQVNFX01PREVMX0xBQkVMX1ZBTFVFX19TID0gZUlOU1RBTkNFLmdldFN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZV9TKCk7CisKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5JbmNpZGVuY2U8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUF0dHJpYnV0ZSBTVEFOREFSRF9ESVNFQVNFX01PREVMX0xBQkVMX1ZBTFVFX19JTkNJREVOQ0UgPSBlSU5TVEFOQ0UuZ2V0U3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbFZhbHVlX0luY2lkZW5jZSgpOworCisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+RGlzZWFzZSBEZWF0aHM8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUF0dHJpYnV0ZSBTVEFOREFSRF9ESVNFQVNFX01PREVMX0xBQkVMX1ZBTFVFX19ESVNFQVNFX0RFQVRIUyA9IGVJTlNUQU5DRS5nZXRTdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsVmFsdWVfRGlzZWFzZURlYXRocygpOworCisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLmltcGwuU3RhbmRhcmRJbmZlY3RvckltcGwgPGVtPkluZmVjdG9yPC9lbT59JyBjbGFzcy4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLmltcGwuU3RhbmRhcmRJbmZlY3RvckltcGwKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuaW1wbC5TdGFuZGFyZFBhY2thZ2VJbXBsI2dldFN0YW5kYXJkSW5mZWN0b3IoKQorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQ2xhc3MgU1RBTkRBUkRfSU5GRUNUT1IgPSBlSU5TVEFOQ0UuZ2V0U3RhbmRhcmRJbmZlY3RvcigpOworCisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLmltcGwuU3RvY2hhc3RpY1NFSVJEaXNlYXNlTW9kZWxJbXBsIDxlbT5TdG9jaGFzdGljIFNFSVIgRGlzZWFzZSBNb2RlbDwvZW0+fScgY2xhc3MuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5pbXBsLlN0b2NoYXN0aWNTRUlSRGlzZWFzZU1vZGVsSW1wbAorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5pbXBsLlN0YW5kYXJkUGFja2FnZUltcGwjZ2V0U3RvY2hhc3RpY1NFSVJEaXNlYXNlTW9kZWwoKQorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQ2xhc3MgU1RPQ0hBU1RJQ19TRUlSX0RJU0VBU0VfTU9ERUwgPSBlSU5TVEFOQ0UuZ2V0U3RvY2hhc3RpY1NFSVJEaXNlYXNlTW9kZWwoKTsKKworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5pbXBsLlN0b2NoYXN0aWNTSURpc2Vhc2VNb2RlbEltcGwgPGVtPlN0b2NoYXN0aWMgU0kgRGlzZWFzZSBNb2RlbDwvZW0+fScgY2xhc3MuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5pbXBsLlN0b2NoYXN0aWNTSURpc2Vhc2VNb2RlbEltcGwKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuaW1wbC5TdGFuZGFyZFBhY2thZ2VJbXBsI2dldFN0b2NoYXN0aWNTSURpc2Vhc2VNb2RlbCgpCisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVDbGFzcyBTVE9DSEFTVElDX1NJX0RJU0VBU0VfTU9ERUwgPSBlSU5TVEFOQ0UuZ2V0U3RvY2hhc3RpY1NJRGlzZWFzZU1vZGVsKCk7CisKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuaW1wbC5TdG9jaGFzdGljU0lSRGlzZWFzZU1vZGVsSW1wbCA8ZW0+U3RvY2hhc3RpYyBTSVIgRGlzZWFzZSBNb2RlbDwvZW0+fScgY2xhc3MuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5pbXBsLlN0b2NoYXN0aWNTSVJEaXNlYXNlTW9kZWxJbXBsCisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLmltcGwuU3RhbmRhcmRQYWNrYWdlSW1wbCNnZXRTdG9jaGFzdGljU0lSRGlzZWFzZU1vZGVsKCkKKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUNsYXNzIFNUT0NIQVNUSUNfU0lSX0RJU0VBU0VfTU9ERUwgPSBlSU5TVEFOQ0UuZ2V0U3RvY2hhc3RpY1NJUkRpc2Vhc2VNb2RlbCgpOworCisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLmltcGwuU3RvY2hhc3RpY0Rpc2Vhc2VNb2RlbEltcGwgPGVtPlN0b2NoYXN0aWMgRGlzZWFzZSBNb2RlbDwvZW0+fScgY2xhc3MuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5pbXBsLlN0b2NoYXN0aWNEaXNlYXNlTW9kZWxJbXBsCisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLmltcGwuU3RhbmRhcmRQYWNrYWdlSW1wbCNnZXRTdG9jaGFzdGljRGlzZWFzZU1vZGVsKCkKKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUNsYXNzIFNUT0NIQVNUSUNfRElTRUFTRV9NT0RFTCA9IGVJTlNUQU5DRS5nZXRTdG9jaGFzdGljRGlzZWFzZU1vZGVsKCk7CisKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5TZWVkPC9iPjwvZW0+JyBhdHRyaWJ1dGUgZmVhdHVyZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVBdHRyaWJ1dGUgU1RPQ0hBU1RJQ19ESVNFQVNFX01PREVMX19TRUVEID0gZUlOU1RBTkNFLmdldFN0b2NoYXN0aWNEaXNlYXNlTW9kZWxfU2VlZCgpOworCisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+UmFuZG9tIEdlbmVyYXRvcjwvYj48L2VtPicgYXR0cmlidXRlIGZlYXR1cmUuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQXR0cmlidXRlIFNUT0NIQVNUSUNfRElTRUFTRV9NT0RFTF9fUkFORE9NX0dFTkVSQVRPUiA9IGVJTlNUQU5DRS5nZXRTdG9jaGFzdGljRGlzZWFzZU1vZGVsX1JhbmRvbUdlbmVyYXRvcigpOworCisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLmltcGwuU3RhbmRhcmRTdG9jaGFzdGljRGlzZWFzZU1vZGVsSW1wbCA8ZW0+U3RvY2hhc3RpYyBEaXNlYXNlIE1vZGVsPC9lbT59JyBjbGFzcy4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLmltcGwuU3RhbmRhcmRTdG9jaGFzdGljRGlzZWFzZU1vZGVsSW1wbAorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5pbXBsLlN0YW5kYXJkUGFja2FnZUltcGwjZ2V0U3RhbmRhcmRTdG9jaGFzdGljRGlzZWFzZU1vZGVsKCkKKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUNsYXNzIFNUQU5EQVJEX1NUT0NIQVNUSUNfRElTRUFTRV9NT0RFTCA9IGVJTlNUQU5DRS5nZXRTdGFuZGFyZFN0b2NoYXN0aWNEaXNlYXNlTW9kZWwoKTsKKworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPkdhaW48L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUF0dHJpYnV0ZSBTVEFOREFSRF9TVE9DSEFTVElDX0RJU0VBU0VfTU9ERUxfX0dBSU4gPSBlSU5TVEFOQ0UuZ2V0U3RhbmRhcmRTdG9jaGFzdGljRGlzZWFzZU1vZGVsX0dhaW4oKTsKKworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5pbXBsLlNJUklub2N1bGF0b3JJbXBsIDxlbT5TSVIgSW5vY3VsYXRvcjwvZW0+fScgY2xhc3MuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5pbXBsLlNJUklub2N1bGF0b3JJbXBsCisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLmltcGwuU3RhbmRhcmRQYWNrYWdlSW1wbCNnZXRTSVJJbm9jdWxhdG9yKCkKKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUNsYXNzIFNJUl9JTk9DVUxBVE9SID0gZUlOU1RBTkNFLmdldFNJUklub2N1bGF0b3IoKTsKKworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPklub2N1bGF0ZWQgUGVyY2VudGFnZTwvYj48L2VtPicgYXR0cmlidXRlIGZlYXR1cmUuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQXR0cmlidXRlIFNJUl9JTk9DVUxBVE9SX19JTk9DVUxBVEVEX1BFUkNFTlRBR0UgPSBlSU5TVEFOQ0UuZ2V0U0lSSW5vY3VsYXRvcl9Jbm9jdWxhdGVkUGVyY2VudGFnZSgpOworCisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+SW5vY3VsYXRlIFBlcmNlbnRhZ2U8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUF0dHJpYnV0ZSBTSVJfSU5PQ1VMQVRPUl9fSU5PQ1VMQVRFX1BFUkNFTlRBR0UgPSBlSU5TVEFOQ0UuZ2V0U0lSSW5vY3VsYXRvcl9Jbm9jdWxhdGVQZXJjZW50YWdlKCk7CisKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuaW1wbC5TdG9jaGFzdGljUG9pc3NvblNJRGlzZWFzZU1vZGVsSW1wbCA8ZW0+U3RvY2hhc3RpYyBQb2lzc29uIFNJIERpc2Vhc2UgTW9kZWw8L2VtPn0nIGNsYXNzLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuaW1wbC5TdG9jaGFzdGljUG9pc3NvblNJRGlzZWFzZU1vZGVsSW1wbAorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5pbXBsLlN0YW5kYXJkUGFja2FnZUltcGwjZ2V0U3RvY2hhc3RpY1BvaXNzb25TSURpc2Vhc2VNb2RlbCgpCisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVDbGFzcyBTVE9DSEFTVElDX1BPSVNTT05fU0lfRElTRUFTRV9NT0RFTCA9IGVJTlNUQU5DRS5nZXRTdG9jaGFzdGljUG9pc3NvblNJRGlzZWFzZU1vZGVsKCk7CisKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuaW1wbC5TdG9jaGFzdGljUG9pc3NvblNJUkRpc2Vhc2VNb2RlbEltcGwgPGVtPlN0b2NoYXN0aWMgUG9pc3NvbiBTSVIgRGlzZWFzZSBNb2RlbDwvZW0+fScgY2xhc3MuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5pbXBsLlN0b2NoYXN0aWNQb2lzc29uU0lSRGlzZWFzZU1vZGVsSW1wbAorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5pbXBsLlN0YW5kYXJkUGFja2FnZUltcGwjZ2V0U3RvY2hhc3RpY1BvaXNzb25TSVJEaXNlYXNlTW9kZWwoKQorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQ2xhc3MgU1RPQ0hBU1RJQ19QT0lTU09OX1NJUl9ESVNFQVNFX01PREVMID0gZUlOU1RBTkNFLmdldFN0b2NoYXN0aWNQb2lzc29uU0lSRGlzZWFzZU1vZGVsKCk7CisKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuaW1wbC5TdG9jaGFzdGljUG9pc3NvblNFSVJEaXNlYXNlTW9kZWxJbXBsIDxlbT5TdG9jaGFzdGljIFBvaXNzb24gU0VJUiBEaXNlYXNlIE1vZGVsPC9lbT59JyBjbGFzcy4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLmltcGwuU3RvY2hhc3RpY1BvaXNzb25TRUlSRGlzZWFzZU1vZGVsSW1wbAorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5pbXBsLlN0YW5kYXJkUGFja2FnZUltcGwjZ2V0U3RvY2hhc3RpY1BvaXNzb25TRUlSRGlzZWFzZU1vZGVsKCkKKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUNsYXNzIFNUT0NIQVNUSUNfUE9JU1NPTl9TRUlSX0RJU0VBU0VfTU9ERUwgPSBlSU5TVEFOQ0UuZ2V0U3RvY2hhc3RpY1BvaXNzb25TRUlSRGlzZWFzZU1vZGVsKCk7CisKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuaW1wbC5JbmZlY3Rvcklub2N1bGF0b3JDb2xsZWN0aW9uSW1wbCA8ZW0+SW5mZWN0b3IgSW5vY3VsYXRvciBDb2xsZWN0aW9uPC9lbT59JyBjbGFzcy4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLmltcGwuSW5mZWN0b3JJbm9jdWxhdG9yQ29sbGVjdGlvbkltcGwKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuaW1wbC5TdGFuZGFyZFBhY2thZ2VJbXBsI2dldEluZmVjdG9ySW5vY3VsYXRvckNvbGxlY3Rpb24oKQorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQ2xhc3MgSU5GRUNUT1JfSU5PQ1VMQVRPUl9DT0xMRUNUSU9OID0gZUlOU1RBTkNFLmdldEluZmVjdG9ySW5vY3VsYXRvckNvbGxlY3Rpb24oKTsKKworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPkxpc3Q8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0IGZlYXR1cmUuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFUmVmZXJlbmNlIElORkVDVE9SX0lOT0NVTEFUT1JfQ09MTEVDVElPTl9fTElTVCA9IGVJTlNUQU5DRS5nZXRJbmZlY3Rvcklub2N1bGF0b3JDb2xsZWN0aW9uX0xpc3QoKTsKKworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPkltcG9ydCBGb2xkZXI8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUF0dHJpYnV0ZSBJTkZFQ1RPUl9JTk9DVUxBVE9SX0NPTExFQ1RJT05fX0lNUE9SVF9GT0xERVIgPSBlSU5TVEFOQ0UuZ2V0SW5mZWN0b3JJbm9jdWxhdG9yQ29sbGVjdGlvbl9JbXBvcnRGb2xkZXIoKTsKKworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5pbXBsLkluaXRpYWxpemVySW1wbCA8ZW0+SW5pdGlhbGl6ZXI8L2VtPn0nIGNsYXNzLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuaW1wbC5Jbml0aWFsaXplckltcGwKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuaW1wbC5TdGFuZGFyZFBhY2thZ2VJbXBsI2dldEluaXRpYWxpemVyKCkKKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUNsYXNzIElOSVRJQUxJWkVSID0gZUlOU1RBTkNFLmdldEluaXRpYWxpemVyKCk7CisKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5EaXNlYXNlIE5hbWU8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUF0dHJpYnV0ZSBJTklUSUFMSVpFUl9fRElTRUFTRV9OQU1FID0gZUlOU1RBTkNFLmdldEluaXRpYWxpemVyX0Rpc2Vhc2VOYW1lKCk7CisKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5UYXJnZXQgSVNPIEtleTwvYj48L2VtPicgYXR0cmlidXRlIGZlYXR1cmUuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQXR0cmlidXRlIElOSVRJQUxJWkVSX19UQVJHRVRfSVNPX0tFWSA9IGVJTlNUQU5DRS5nZXRJbml0aWFsaXplcl9UYXJnZXRJU09LZXkoKTsKKworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPlRhcmdldCBVUkk8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUF0dHJpYnV0ZSBJTklUSUFMSVpFUl9fVEFSR0VUX1VSSSA9IGVJTlNUQU5DRS5nZXRJbml0aWFsaXplcl9UYXJnZXRVUkkoKTsKKworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPlBvcHVsYXRpb24gSWRlbnRpZmllcjwvYj48L2VtPicgYXR0cmlidXRlIGZlYXR1cmUuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQXR0cmlidXRlIElOSVRJQUxJWkVSX19QT1BVTEFUSU9OX0lERU5USUZJRVIgPSBlSU5TVEFOQ0UuZ2V0SW5pdGlhbGl6ZXJfUG9wdWxhdGlvbklkZW50aWZpZXIoKTsKKworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPkNvbXBhcnRtZW50czwvYj48L2VtPicgYXR0cmlidXRlIGxpc3QgZmVhdHVyZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVBdHRyaWJ1dGUgSU5JVElBTElaRVJfX0NPTVBBUlRNRU5UUyA9IGVJTlNUQU5DRS5nZXRJbml0aWFsaXplcl9Db21wYXJ0bWVudHMoKTsKKworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPkNvbXBhcnRtZW50IFZhbHVlczwvYj48L2VtPicgYXR0cmlidXRlIGxpc3QgZmVhdHVyZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVBdHRyaWJ1dGUgSU5JVElBTElaRVJfX0NPTVBBUlRNRU5UX1ZBTFVFUyA9IGVJTlNUQU5DRS5nZXRJbml0aWFsaXplcl9Db21wYXJ0bWVudFZhbHVlcygpOworCisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+VXNlIEZyYWN0aW9uczwvYj48L2VtPicgYXR0cmlidXRlIGZlYXR1cmUuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQXR0cmlidXRlIElOSVRJQUxJWkVSX19VU0VfRlJBQ1RJT05TID0gZUlOU1RBTkNFLmdldEluaXRpYWxpemVyX1VzZUZyYWN0aW9ucygpOworCisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+UmFuZG9tPC9lbT4nIGRhdGEgdHlwZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBzZWUgamF2YS51dGlsLlJhbmRvbQorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5pbXBsLlN0YW5kYXJkUGFja2FnZUltcGwjZ2V0UmFuZG9tKCkKKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRURhdGFUeXBlIFJBTkRPTSA9IGVJTlNUQU5DRS5nZXRSYW5kb20oKTsKKworCX0KKworfSAvL1N0YW5kYXJkUGFja2FnZQpkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9zdGFuZGFyZC9TdGFuZGFyZFN0b2NoYXN0aWNEaXNlYXNlTW9kZWwuamF2YSBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvc3RhbmRhcmQvU3RhbmRhcmRTdG9jaGFzdGljRGlzZWFzZU1vZGVsLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjU2ZWI3NgotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvc3RhbmRhcmQvU3RhbmRhcmRTdG9jaGFzdGljRGlzZWFzZU1vZGVsLmphdmEKQEAgLTAsMCArMSw0NiBAQAorLy8gU3RhbmRhcmRTdG9jaGFzdGlEaXNlYXNlTW9kZWwuamF2YQorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQ7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKKy8qKgorICogVGhpcyBpbnRlcmZhY2UgaXMgYW4gRU1GIG1vZGVsLgorICogCisgKiBAbW9kZWwgYWJzdHJhY3Q9InRydWUiCisgKi8KK3B1YmxpYyBpbnRlcmZhY2UgU3RhbmRhcmRTdG9jaGFzdGljRGlzZWFzZU1vZGVsIGV4dGVuZHMgU3RvY2hhc3RpY0Rpc2Vhc2VNb2RlbCB7CisKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQG1vZGVsIGRlZmF1bHQ9IjAuMDEiCisJICovCisJcHVibGljIGRvdWJsZSBnZXRHYWluKCk7CisKKwkvKioKKwkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmRTdG9jaGFzdGljRGlzZWFzZU1vZGVsI2dldEdhaW4gPGVtPkdhaW48L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPkdhaW48L2VtPicgYXR0cmlidXRlLgorCSAqIEBzZWUgI2dldEdhaW4oKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwl2b2lkIHNldEdhaW4oZG91YmxlIHZhbHVlKTsKKworCS8qKgorCSAqIEBtb2RlbCB2b2xhdGlsZT0idHJ1ZSIgdHJhbnNpZW50PSJ0cnVlIiBjaGFuZ2VhYmxlPSJmYWxzZSIKKwkgKi8KKwlwdWJsaWMgZG91YmxlIGNvbXB1dGVOb2lzZSgpOworCQorfSAvLyBTdGFuZGFyZFN0b2NoYXN0aURpc2Vhc2VNb2RlbApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvc3RhbmRhcmQvU3RvY2hhc3RpY0Rpc2Vhc2VNb2RlbC5qYXZhIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9zdGFuZGFyZC9TdG9jaGFzdGljRGlzZWFzZU1vZGVsLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTBiZmIyMAotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvc3RhbmRhcmQvU3RvY2hhc3RpY0Rpc2Vhc2VNb2RlbC5qYXZhCkBAIC0wLDAgKzEsNDQgQEAKKy8vIFN0b2NoYXN0aWNEaXNlYXNlTW9kZWwuamF2YQorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQ7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgamF2YS51dGlsLlJhbmRvbTsKKworLyoqCisgKiBUaGlzIGludGVyZmFjZSBkZWZpbmVzIGFuIEVNRiBtb2RlbAorICogQG1vZGVsIGFic3RyYWN0PSJ0cnVlIgorICovCitwdWJsaWMgaW50ZXJmYWNlIFN0b2NoYXN0aWNEaXNlYXNlTW9kZWwgZXh0ZW5kcyBEaXNlYXNlTW9kZWwgeworCisJCisJLyoqCisJICogQHJldHVybiB0aGUgc2VlZCB1c2VkIHRvIGluaXRpYWxpemUgdGhlIHJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yLgorCSAqIEBtb2RlbCBkZWZhdWx0PSIwIgorCSAqLworCWxvbmcgZ2V0U2VlZCgpOworCisJLyoqCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlN0b2NoYXN0aWNEaXNlYXNlTW9kZWwjZ2V0U2VlZCA8ZW0+U2VlZDwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+U2VlZDwvZW0+JyBhdHRyaWJ1dGUuCisJICogQHNlZSAjZ2V0U2VlZCgpCisJICogQGdlbmVyYXRlZAorCSAqLworCXZvaWQgc2V0U2VlZChsb25nIHZhbHVlKTsKKworCS8qKgorCSAqIEBtb2RlbCBjaGFuZ2VhYmxlPSJmYWxzZSIgZGVmYXVsdD0iMCIKKwkgKi8KKwlSYW5kb20gZ2V0UmFuZG9tR2VuZXJhdG9yKCk7Cit9IC8vIFN0b2NoYXN0aWNEaXNlYXNlTW9kZWwKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3N0YW5kYXJkL1N0b2NoYXN0aWNQb2lzc29uU0VJUkRpc2Vhc2VNb2RlbC5qYXZhIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9zdGFuZGFyZC9TdG9jaGFzdGljUG9pc3NvblNFSVJEaXNlYXNlTW9kZWwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMzI1NzI0Ci0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9zdGFuZGFyZC9TdG9jaGFzdGljUG9pc3NvblNFSVJEaXNlYXNlTW9kZWwuamF2YQpAQCAtMCwwICsxLDI1IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDEwIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkOworCisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIEEgcmVwcmVzZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPlN0b2NoYXN0aWMgUG9pc3NvbiBTRUlSIERpc2Vhc2UgTW9kZWw8L2I+PC9lbT4nLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKgorICoKKyAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkUGFja2FnZSNnZXRTdG9jaGFzdGljUG9pc3NvblNFSVJEaXNlYXNlTW9kZWwoKQorICogQG1vZGVsCisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBpbnRlcmZhY2UgU3RvY2hhc3RpY1BvaXNzb25TRUlSRGlzZWFzZU1vZGVsIGV4dGVuZHMgU0VJUiB7Cit9IC8vIFN0b2NoYXN0aWNQb2lzc29uU0VJUkRpc2Vhc2VNb2RlbApkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9zdGFuZGFyZC9TdG9jaGFzdGljUG9pc3NvblNJRGlzZWFzZU1vZGVsLmphdmEgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3N0YW5kYXJkL1N0b2NoYXN0aWNQb2lzc29uU0lEaXNlYXNlTW9kZWwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YzdjZThiCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9zdGFuZGFyZC9TdG9jaGFzdGljUG9pc3NvblNJRGlzZWFzZU1vZGVsLmphdmEKQEAgLTAsMCArMSwyNSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAxMCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZDsKKworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiBBIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5TdG9jaGFzdGljIFBvaXNzb24gU0kgRGlzZWFzZSBNb2RlbDwvYj48L2VtPicuCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqCisgKgorICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmRQYWNrYWdlI2dldFN0b2NoYXN0aWNQb2lzc29uU0lEaXNlYXNlTW9kZWwoKQorICogQG1vZGVsCisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBpbnRlcmZhY2UgU3RvY2hhc3RpY1BvaXNzb25TSURpc2Vhc2VNb2RlbCBleHRlbmRzIFNJIHsKK30gLy8gU3RvY2hhc3RpY1BvaXNzb25TSURpc2Vhc2VNb2RlbApkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9zdGFuZGFyZC9TdG9jaGFzdGljUG9pc3NvblNJUkRpc2Vhc2VNb2RlbC5qYXZhIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9zdGFuZGFyZC9TdG9jaGFzdGljUG9pc3NvblNJUkRpc2Vhc2VNb2RlbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE4MGNmZTEKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3N0YW5kYXJkL1N0b2NoYXN0aWNQb2lzc29uU0lSRGlzZWFzZU1vZGVsLmphdmEKQEAgLTAsMCArMSwyNSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAxMCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZDsKKworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiBBIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5TdG9jaGFzdGljIFBvaXNzb24gU0lSIERpc2Vhc2UgTW9kZWw8L2I+PC9lbT4nLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKgorICoKKyAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkUGFja2FnZSNnZXRTdG9jaGFzdGljUG9pc3NvblNJUkRpc2Vhc2VNb2RlbCgpCisgKiBAbW9kZWwKKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGludGVyZmFjZSBTdG9jaGFzdGljUG9pc3NvblNJUkRpc2Vhc2VNb2RlbCBleHRlbmRzIFNJUiB7Cit9IC8vIFN0b2NoYXN0aWNQb2lzc29uU0lSRGlzZWFzZU1vZGVsCmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3N0YW5kYXJkL1N0b2NoYXN0aWNTRUlSRGlzZWFzZU1vZGVsLmphdmEgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3N0YW5kYXJkL1N0b2NoYXN0aWNTRUlSRGlzZWFzZU1vZGVsLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTdiYTY4ZQotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvc3RhbmRhcmQvU3RvY2hhc3RpY1NFSVJEaXNlYXNlTW9kZWwuamF2YQpAQCAtMCwwICsxLDMzIEBACisvLyBTdG9jaGFzdGljU0VJUkRpc2Vhc2VNb2RlbC5qYXZhCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZDsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKgorICogVGhpcyBpbnRlcmZhY2UgZGVmaW5lcyBhIGNsYXNzIGluIGFuIEVNRiBtb2RlbCBmb3IgYW4gU3RvY2hhc3RpYyBTRUlSIGRpc2Vhc2UKKyAqIG1vZGVsLgorICogCisgKiBAc2VlIFNFSVJMYWJlbAorICogQHNlZSBTRUlSTGFiZWxWYWx1ZQorICogCisgKiBAbW9kZWwKKyAqLworcHVibGljIGludGVyZmFjZSBTdG9jaGFzdGljU0VJUkRpc2Vhc2VNb2RlbCBleHRlbmRzIFNFSVIsIFN0YW5kYXJkU3RvY2hhc3RpY0Rpc2Vhc2VNb2RlbCB7CisKKwkvKioKKwkgKiBUaGlzIGlzIHRoZSBzZWdtZW50IG9mIHRoZSB0eXBlIFVSSSB0aGF0IHByZWZpeGVzIGFsbCBvdGhlciBzZWdtZW50cyBpbiBhCisJICogc3RhbmRhcmQgc3RvY2hhc3RpYyBTRUlSIGRpc2Vhc2UgbW9kZWwgdHlwZSBVUkkuCisJICovCisJU3RyaW5nIFVSSV9UWVBFX1NUT0NIQVNUSUNfU0VJUl9ESVNFQVNFX01PREVMX1NFR01FTlQgPSBVUklfVFlQRV9TVEFOREFSRF9TRUlSX0RJU0VBU0VfTU9ERUxfU0VHTUVOVAorCQkJKyAiL3N0b2NoYXN0aWMiOworCit9IC8vIFN0b2NoYXN0aWNTRUlSRGlzZWFzZU1vZGVsCmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3N0YW5kYXJkL1N0b2NoYXN0aWNTSURpc2Vhc2VNb2RlbC5qYXZhIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9zdGFuZGFyZC9TdG9jaGFzdGljU0lEaXNlYXNlTW9kZWwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YjkyNWI3Ci0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9zdGFuZGFyZC9TdG9jaGFzdGljU0lEaXNlYXNlTW9kZWwuamF2YQpAQCAtMCwwICsxLDMxIEBACisvLyBTdG9jaGFzdGljU0lEaXNlYXNlTW9kZWwuamF2YQorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQ7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioKKyAqIFRoaXMgaW50ZXJmYWNlIGRlZmluZXMgYSBjbGFzcyBpbiBhbiBFTUYgbW9kZWwgZm9yIGFuIFN0b2NoYXN0aWMgU0kgZGlzZWFzZQorICogbW9kZWwuCisgKiAKKyAqIEBzZWUgU0lMYWJlbAorICogQHNlZSBTSUxhYmVsVmFsdWUKKyAqIAorICogQG1vZGVsCisgKi8KK3B1YmxpYyBpbnRlcmZhY2UgU3RvY2hhc3RpY1NJRGlzZWFzZU1vZGVsIGV4dGVuZHMgU0ksIFN0YW5kYXJkU3RvY2hhc3RpY0Rpc2Vhc2VNb2RlbCB7CisJLyoqCisJICogVGhpcyBpcyB0aGUgc2VnbWVudCBvZiB0aGUgdHlwZSBVUkkgdGhhdCBwcmVmaXhlcyBhbGwgb3RoZXIgc2VnbWVudHMgaW4gYQorCSAqIHN0YW5kYXJkIHN0b2NoYXN0aWMgU0kgZGlzZWFzZSBtb2RlbCB0eXBlIFVSSS4KKwkgKi8KKwlTdHJpbmcgVVJJX1RZUEVfU1RPQ0hBU1RJQ19TSV9ESVNFQVNFX01PREVMX1NFR01FTlQgPSBVUklfVFlQRV9TVEFOREFSRF9TSV9ESVNFQVNFX01PREVMX1NFR01FTlQKKwkJCSsgIi9zdG9jaGFzdGljIjsKK30gLy8gU3RvY2hhc3RpY1NJRGlzZWFzZU1vZGVsCmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3N0YW5kYXJkL1N0b2NoYXN0aWNTSVJEaXNlYXNlTW9kZWwuamF2YSBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvc3RhbmRhcmQvU3RvY2hhc3RpY1NJUkRpc2Vhc2VNb2RlbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIyMmQwNDkKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3N0YW5kYXJkL1N0b2NoYXN0aWNTSVJEaXNlYXNlTW9kZWwuamF2YQpAQCAtMCwwICsxLDMxIEBACisvLyBTdG9jaGFzdGljU0lSRGlzZWFzZU1vZGVsLmphdmEKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqCisgKiBUaGlzIGludGVyZmFjZSBkZWZpbmVzIGEgY2xhc3MgaW4gYW4gRU1GIG1vZGVsIGZvciBhbiBTdG9jaGFzdGljIFNJUiBkaXNlYXNlCisgKiBtb2RlbC4KKyAqIAorICogQHNlZSBTSVJMYWJlbAorICogQHNlZSBTSVJMYWJlbFZhbHVlCisgKiAKKyAqIEBtb2RlbAorICovCitwdWJsaWMgaW50ZXJmYWNlIFN0b2NoYXN0aWNTSVJEaXNlYXNlTW9kZWwgZXh0ZW5kcyBTSVIsIFN0YW5kYXJkU3RvY2hhc3RpY0Rpc2Vhc2VNb2RlbCB7CisJLyoqCisJICogVGhpcyBpcyB0aGUgc2VnbWVudCBvZiB0aGUgdHlwZSBVUkkgdGhhdCBwcmVmaXhlcyBhbGwgb3RoZXIgc2VnbWVudHMgaW4gYQorCSAqIHN0YW5kYXJkIHN0b2NoYXN0aWMgU0lSIGRpc2Vhc2UgbW9kZWwgdHlwZSBVUkkuCisJICovCisJU3RyaW5nIFVSSV9UWVBFX1NUT0NIQVNUSUNfU0lSX0RJU0VBU0VfTU9ERUxfU0VHTUVOVCA9IFVSSV9UWVBFX1NUQU5EQVJEX1NJUl9ESVNFQVNFX01PREVMX1NFR01FTlQKKwkJCSsgIi9zdG9jaGFzdGljIjsKK30gLy8gU3RvY2hhc3RpY1NJUkRpc2Vhc2VNb2RlbApkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9zdGFuZGFyZC9pbXBsL0RldGVybWluaXN0aWNTRUlSRGlzZWFzZU1vZGVsSW1wbC5qYXZhIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9zdGFuZGFyZC9pbXBsL0RldGVybWluaXN0aWNTRUlSRGlzZWFzZU1vZGVsSW1wbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc3N2ZlNTQKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3N0YW5kYXJkL2ltcGwvRGV0ZXJtaW5pc3RpY1NFSVJEaXNlYXNlTW9kZWxJbXBsLmphdmEKQEAgLTAsMCArMSw2MiBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuaW1wbDsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5MYWJlbFZhbHVlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5EZXRlcm1pbmlzdGljU0VJUkRpc2Vhc2VNb2RlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmRGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZFBhY2thZ2U7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPkRldGVybWluaXN0aWMgU0VJUiBEaXNlYXNlIE1vZGVsPC9iPjwvZW0+Jy4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogPHA+CisgKiA8L3A+CisgKgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgRGV0ZXJtaW5pc3RpY1NFSVJEaXNlYXNlTW9kZWxJbXBsIGV4dGVuZHMgU0VJUkltcGwgaW1wbGVtZW50cworCQlEZXRlcm1pbmlzdGljU0VJUkRpc2Vhc2VNb2RlbCB7CisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBUaGUgY29uc3RydWN0b3IgbmVlZHMgdG8gYmUgcHVibGljIHNvIHRoYXQgdGhlIG5ldyBkaXNlYXNlIHdpemFyZCBjYW4KKwkgKiBjcmVhdGUgYW4gaW5zdGFuY2Ugb2YgdGhlIGNsYXNzIHdpdGhvdXQgdXNpbmcgdGhlIGZhY3RvcnkuCisJICogCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogCisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlwdWJsaWMgRGV0ZXJtaW5pc3RpY1NFSVJEaXNlYXNlTW9kZWxJbXBsKCkgeworCQlzdXBlcigpOworCX0gLy8gRGV0ZXJtaW5pc3RpY1NFSVJEaXNlYXNlTW9kZWxJbXBsCisKKwlwdWJsaWMgdm9pZCBkb01vZGVsU3BlY2lmaWNBZGp1c3RtZW50cyhMYWJlbFZhbHVlIGxhYmVsKSB7CisJCS8vIE5vdGhpbmcKKwl9CisJCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCBFQ2xhc3MgZVN0YXRpY0NsYXNzKCkgeworCQlyZXR1cm4gU3RhbmRhcmRQYWNrYWdlLkxpdGVyYWxzLkRFVEVSTUlOSVNUSUNfU0VJUl9ESVNFQVNFX01PREVMOworCX0KKworCUBPdmVycmlkZQorCXB1YmxpYyBib29sZWFuIGlzRGV0ZXJtaW5pc3RpYygpIHsKKwkJcmV0dXJuIHRydWU7CisJfQorCQorfSAvLyBEZXRlcm1pbmlzdGljU0VJUkRpc2Vhc2VNb2RlbEltcGwKZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvc3RhbmRhcmQvaW1wbC9EZXRlcm1pbmlzdGljU0lEaXNlYXNlTW9kZWxJbXBsLmphdmEgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3N0YW5kYXJkL2ltcGwvRGV0ZXJtaW5pc3RpY1NJRGlzZWFzZU1vZGVsSW1wbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYyZjg5OWQKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3N0YW5kYXJkL2ltcGwvRGV0ZXJtaW5pc3RpY1NJRGlzZWFzZU1vZGVsSW1wbC5qYXZhCkBAIC0wLDAgKzEsNjEgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLmltcGw7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzczsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguTGFiZWxWYWx1ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuRGV0ZXJtaW5pc3RpY1NJRGlzZWFzZU1vZGVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZEZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkUGFja2FnZTsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiBBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+RGV0ZXJtaW5pc3RpYyBTSSBEaXNlYXNlIE1vZGVsPC9iPjwvZW0+Jy4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogPHA+CisgKiA8L3A+CisgKgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgRGV0ZXJtaW5pc3RpY1NJRGlzZWFzZU1vZGVsSW1wbCBleHRlbmRzIFNJSW1wbCBpbXBsZW1lbnRzCisJCURldGVybWluaXN0aWNTSURpc2Vhc2VNb2RlbCB7CisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBUaGUgY29uc3RydWN0b3IgbmVlZHMgdG8gYmUgcHVibGljIHNvIHRoYXQgdGhlIG5ldyBkaXNlYXNlIHdpemFyZCBjYW4KKwkgKiBjcmVhdGUgYW4gaW5zdGFuY2Ugb2YgdGhlIGNsYXNzIHdpdGhvdXQgdXNpbmcgdGhlIGZhY3RvcnkuCisJICogCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogCisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlwdWJsaWMgRGV0ZXJtaW5pc3RpY1NJRGlzZWFzZU1vZGVsSW1wbCgpIHsKKwkJc3VwZXIoKTsKKwl9IC8vIERldGVybWluaXN0aWNTSURpc2Vhc2VNb2RlbEltcGwKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgRUNsYXNzIGVTdGF0aWNDbGFzcygpIHsKKwkJcmV0dXJuIFN0YW5kYXJkUGFja2FnZS5MaXRlcmFscy5ERVRFUk1JTklTVElDX1NJX0RJU0VBU0VfTU9ERUw7CisJfQorCisJcHVibGljIHZvaWQgZG9Nb2RlbFNwZWNpZmljQWRqdXN0bWVudHMoTGFiZWxWYWx1ZSBsYWJlbCkgeworCQkvLyBOb3RoaW5nCisJfQorCisJQE92ZXJyaWRlCisJcHVibGljIGJvb2xlYW4gaXNEZXRlcm1pbmlzdGljKCkgeworCQlyZXR1cm4gdHJ1ZTsKKwl9Cit9IC8vIERldGVybWluaXN0aWNTSURpc2Vhc2VNb2RlbEltcGwKZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvc3RhbmRhcmQvaW1wbC9EZXRlcm1pbmlzdGljU0lSRGlzZWFzZU1vZGVsSW1wbC5qYXZhIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9zdGFuZGFyZC9pbXBsL0RldGVybWluaXN0aWNTSVJEaXNlYXNlTW9kZWxJbXBsLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTUzZDk1NQotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvc3RhbmRhcmQvaW1wbC9EZXRlcm1pbmlzdGljU0lSRGlzZWFzZU1vZGVsSW1wbC5qYXZhCkBAIC0wLDAgKzEsNjAgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLmltcGw7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzczsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguTGFiZWxWYWx1ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuRGV0ZXJtaW5pc3RpY1NJUkRpc2Vhc2VNb2RlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmRGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZFBhY2thZ2U7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPkRldGVybWluaXN0aWMgU0lSIERpc2Vhc2UgTW9kZWw8L2I+PC9lbT4nLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiA8cD4KKyAqIDwvcD4KKyAqCisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBEZXRlcm1pbmlzdGljU0lSRGlzZWFzZU1vZGVsSW1wbCBleHRlbmRzIFNJUkltcGwgaW1wbGVtZW50cworCQlEZXRlcm1pbmlzdGljU0lSRGlzZWFzZU1vZGVsIHsKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIFRoZSBjb25zdHJ1Y3RvciBuZWVkcyB0byBiZSBwdWJsaWMgc28gdGhhdCB0aGUgbmV3IGRpc2Vhc2Ugd2l6YXJkIGNhbgorCSAqIGNyZWF0ZSBhbiBpbnN0YW5jZSBvZiB0aGUgY2xhc3Mgd2l0aG91dCB1c2luZyB0aGUgZmFjdG9yeS4KKwkgKiAKKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKi8KKwlwdWJsaWMgRGV0ZXJtaW5pc3RpY1NJUkRpc2Vhc2VNb2RlbEltcGwoKSB7CisJCXN1cGVyKCk7CisJfSAvLyBEZXRlcm1pbmlzdGljU0lSRGlzZWFzZU1vZGVsSW1wbAorCisJcHVibGljIHZvaWQgZG9Nb2RlbFNwZWNpZmljQWRqdXN0bWVudHMoTGFiZWxWYWx1ZSBsYWJlbCkgeworCQkvLyBOb3RoaW5nCisJfQorCisJQE92ZXJyaWRlCisJcHVibGljIGJvb2xlYW4gaXNEZXRlcm1pbmlzdGljKCkgeworCQlyZXR1cm4gdHJ1ZTsKKwl9CisJCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCBFQ2xhc3MgZVN0YXRpY0NsYXNzKCkgeworCQlyZXR1cm4gU3RhbmRhcmRQYWNrYWdlLkxpdGVyYWxzLkRFVEVSTUlOSVNUSUNfU0lSX0RJU0VBU0VfTU9ERUw7CisJfQorCit9IC8vIERldGVybWluaXN0aWNTSVJEaXNlYXNlTW9kZWxJbXBsCmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3N0YW5kYXJkL2ltcGwvRGlzZWFzZU1vZGVsSW1wbC5qYXZhIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9zdGFuZGFyZC9pbXBsL0Rpc2Vhc2VNb2RlbEltcGwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wOGIyNTI5Ci0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9zdGFuZGFyZC9pbXBsL0Rpc2Vhc2VNb2RlbEltcGwuamF2YQpAQCAtMCwwICsxLDcyOCBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuaW1wbDsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OworaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOworaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuQmFzaWNFTGlzdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuRUxpc3Q7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlVSSTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5pbXBsLkVOb3RpZmljYXRpb25JbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5pbXBsLkludGVncmF0aW9uRGVjb3JhdG9ySW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuU1RFTVVSSTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguR3JhcGg7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkxhYmVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5Ob2RlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5Ob2RlTGFiZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLk1vZGVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5Ob2RlRGVjb3JhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5TVEVNVGltZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuaW1wbC5Ob2RlRGVjb3JhdG9ySW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5Qb3B1bGF0aW9uTGFiZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLkRpc2Vhc2VNb2RlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuRGlzZWFzZU1vZGVsTGFiZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLkRpc2Vhc2VNb2RlbExhYmVsVmFsdWU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLkluZmVjdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZFBhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcnZlbnRpb25zLlN0YW5kYXJkSW50ZXJ2ZW50aW9uTGFiZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLkRlbW9ncmFwaGljUG9wdWxhdGlvbk1vZGVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5Qb3B1bGF0aW9uR3JvdXA7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLlBvcHVsYXRpb25Nb2RlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuUG9wdWxhdGlvbk1vZGVsTGFiZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWw7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnCisgKiA8ZW0+PGI+RGlzZWFzZSBNb2RlbDwvYj48L2VtPicuIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogPHA+CisgKiBUaGUgZm9sbG93aW5nIGZlYXR1cmVzIGFyZSBpbXBsZW1lbnRlZDoKKyAqIDx1bD4KKyAqIDxsaT4KKyAqIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuaW1wbC5EaXNlYXNlTW9kZWxJbXBsI2dldFBvcHVsYXRpb25JZGVudGlmaWVyCisgKiA8ZW0+UG9wdWxhdGlvbiBJZGVudGlmaWVyPC9lbT59PC9saT4KKyAqIDxsaT4KKyAqIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuaW1wbC5EaXNlYXNlTW9kZWxJbXBsI2dldFRpbWVQZXJpb2QKKyAqIDxlbT5UaW1lIFBlcmlvZDwvZW0+fTwvbGk+CisgKiA8bGk+CisgKiB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLmltcGwuRGlzZWFzZU1vZGVsSW1wbCNnZXREaXNlYXNlTmFtZQorICogPGVtPkRpc2Vhc2UgTmFtZTwvZW0+fTwvbGk+CisgKiA8bGk+CisgKiB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLmltcGwuRGlzZWFzZU1vZGVsSW1wbCNpc0Zpbml0ZURpZmZlcmVuY2UKKyAqIDxlbT5GaW5pdGUgRGlmZmVyZW5jZTwvZW0+fTwvbGk+CisgKiA8bGk+CisgKiB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLmltcGwuRGlzZWFzZU1vZGVsSW1wbCNpc0ZyZXF1ZW5jeURlcGVuZGVudAorICogPGVtPkZyZXF1ZW5jeSBEZXBlbmRlbnQ8L2VtPn08L2xpPgorICogPC91bD4KKyAqIDwvcD4KKyAqIAorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgYWJzdHJhY3QgY2xhc3MgRGlzZWFzZU1vZGVsSW1wbCBleHRlbmRzIEludGVncmF0aW9uRGVjb3JhdG9ySW1wbAorCQlpbXBsZW1lbnRzIERpc2Vhc2VNb2RlbCB7CisJLyoqCisJICogVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldFBvcHVsYXRpb25JZGVudGlmaWVyKCkKKwkgKiA8ZW0+UG9wdWxhdGlvbiBJZGVudGlmaWVyPC9lbT59JyBhdHRyaWJ1dGUuIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0KKwkgKiBlbmQtdXNlci1kb2MgLS0+CisJICogCisJICogQHNlZSAjZ2V0UG9wdWxhdGlvbklkZW50aWZpZXIoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgU3RyaW5nIFBPUFVMQVRJT05fSURFTlRJRklFUl9FREVGQVVMVCA9ICJodW1hbiI7CisKKwkvKioKKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRQb3B1bGF0aW9uSWRlbnRpZmllcigpCisJICogPGVtPlBvcHVsYXRpb24gSWRlbnRpZmllcjwvZW0+fScgYXR0cmlidXRlLiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tCisJICogZW5kLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBzZWUgI2dldFBvcHVsYXRpb25JZGVudGlmaWVyKCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgU3RyaW5nIHBvcHVsYXRpb25JZGVudGlmaWVyID0gUE9QVUxBVElPTl9JREVOVElGSUVSX0VERUZBVUxUOworCisJLyoqCisJICogVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldFRpbWVQZXJpb2QoKSA8ZW0+VGltZSBQZXJpb2Q8L2VtPn0nCisJICogYXR0cmlidXRlLiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAc2VlICNnZXRUaW1lUGVyaW9kKCkKKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBsb25nIFRJTUVfUEVSSU9EX0VERUZBVUxUID0gU1RFTVRpbWUuVW5pdHMuREFZCisJCQkuZ2V0TWlsbGlzZWNvbmRzKCk7CisKKwkvKioKKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRUaW1lUGVyaW9kKCkgPGVtPlRpbWUgUGVyaW9kPC9lbT59JworCSAqIGF0dHJpYnV0ZS4gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogCisJICogQHNlZSAjZ2V0VGltZVBlcmlvZCgpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIGxvbmcgdGltZVBlcmlvZCA9IFRJTUVfUEVSSU9EX0VERUZBVUxUOworCisJLyoqCisJICogVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldERpc2Vhc2VOYW1lKCkgPGVtPkRpc2Vhc2UgTmFtZTwvZW0+fQorCSAqICcgYXR0cmlidXRlLiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAc2VlICNnZXREaXNlYXNlTmFtZSgpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBTdHJpbmcgRElTRUFTRV9OQU1FX0VERUZBVUxUID0gbnVsbDsKKworCS8qKgorCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldERpc2Vhc2VOYW1lKCkgPGVtPkRpc2Vhc2UgTmFtZTwvZW0+fScKKwkgKiBhdHRyaWJ1dGUuIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBzZWUgI2dldERpc2Vhc2VOYW1lKCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgU3RyaW5nIGRpc2Vhc2VOYW1lID0gRElTRUFTRV9OQU1FX0VERUZBVUxUOworCisJLyoqCisJICogVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2lzRmluaXRlRGlmZmVyZW5jZSgpCisJICogPGVtPkZpbml0ZSBEaWZmZXJlbmNlPC9lbT59JyBhdHRyaWJ1dGUuIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0KKwkgKiBlbmQtdXNlci1kb2MgLS0+CisJICogCisJICogQHNlZSAjaXNGaW5pdGVEaWZmZXJlbmNlKCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIGJvb2xlYW4gRklOSVRFX0RJRkZFUkVOQ0VfRURFRkFVTFQgPSB0cnVlOworCisJLyoqCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjaXNGaW5pdGVEaWZmZXJlbmNlKCkKKwkgKiA8ZW0+RmluaXRlIERpZmZlcmVuY2U8L2VtPn0nIGF0dHJpYnV0ZS4gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLQorCSAqIGVuZC11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAc2VlICNpc0Zpbml0ZURpZmZlcmVuY2UoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBib29sZWFuIGZpbml0ZURpZmZlcmVuY2UgPSBGSU5JVEVfRElGRkVSRU5DRV9FREVGQVVMVDsKKworCS8qKgorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSAne0BsaW5rICNpc0ZyZXF1ZW5jeURlcGVuZGVudCgpCisJICogPGVtPkZyZXF1ZW5jeSBEZXBlbmRlbnQ8L2VtPn0nIGF0dHJpYnV0ZS4gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLQorCSAqIGVuZC11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAc2VlICNpc0ZyZXF1ZW5jeURlcGVuZGVudCgpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBib29sZWFuIEZSRVFVRU5DWV9ERVBFTkRFTlRfRURFRkFVTFQgPSB0cnVlOworCisJLyoqCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjaXNGcmVxdWVuY3lEZXBlbmRlbnQoKQorCSAqIDxlbT5GcmVxdWVuY3kgRGVwZW5kZW50PC9lbT59JyBhdHRyaWJ1dGUuIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0KKwkgKiBlbmQtdXNlci1kb2MgLS0+CisJICogCisJICogQHNlZSAjaXNGcmVxdWVuY3lEZXBlbmRlbnQoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBib29sZWFuIGZyZXF1ZW5jeURlcGVuZGVudCA9IEZSRVFVRU5DWV9ERVBFTkRFTlRfRURFRkFVTFQ7CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIERpc2Vhc2VNb2RlbEltcGwoKSB7CisJCXN1cGVyKCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogCisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCBFQ2xhc3MgZVN0YXRpY0NsYXNzKCkgeworCQlyZXR1cm4gU3RhbmRhcmRQYWNrYWdlLkxpdGVyYWxzLkRJU0VBU0VfTU9ERUw7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAcmV0dXJuCisJICogCisJICogICAgICAgICA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIGxvbmcgZ2V0VGltZVBlcmlvZCgpIHsKKwkJcmV0dXJuIHRpbWVQZXJpb2Q7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAcGFyYW0gbmV3VGltZVBlcmlvZAorCSAqIAorCSAqICAgICAgICAgICAgPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIHNldFRpbWVQZXJpb2QobG9uZyBuZXdUaW1lUGVyaW9kKSB7CisJCWxvbmcgb2xkVGltZVBlcmlvZCA9IHRpbWVQZXJpb2Q7CisJCXRpbWVQZXJpb2QgPSBuZXdUaW1lUGVyaW9kOworCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpCisJCQllTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULAorCQkJCQlTdGFuZGFyZFBhY2thZ2UuRElTRUFTRV9NT0RFTF9fVElNRV9QRVJJT0QsIG9sZFRpbWVQZXJpb2QsCisJCQkJCXRpbWVQZXJpb2QpKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEByZXR1cm4KKwkgKiAKKwkgKiAgICAgICAgIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgU3RyaW5nIGdldFBvcHVsYXRpb25JZGVudGlmaWVyKCkgeworCQlyZXR1cm4gcG9wdWxhdGlvbklkZW50aWZpZXI7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAcGFyYW0gbmV3UG9wdWxhdGlvbklkZW50aWZpZXIKKwkgKiAKKwkgKiAgICAgICAgICAgIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRQb3B1bGF0aW9uSWRlbnRpZmllcihTdHJpbmcgbmV3UG9wdWxhdGlvbklkZW50aWZpZXIpIHsKKwkJU3RyaW5nIG9sZFBvcHVsYXRpb25JZGVudGlmaWVyID0gcG9wdWxhdGlvbklkZW50aWZpZXI7CisJCXBvcHVsYXRpb25JZGVudGlmaWVyID0gbmV3UG9wdWxhdGlvbklkZW50aWZpZXI7CisJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkKKwkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsCisJCQkJCVN0YW5kYXJkUGFja2FnZS5ESVNFQVNFX01PREVMX19QT1BVTEFUSU9OX0lERU5USUZJRVIsCisJCQkJCW9sZFBvcHVsYXRpb25JZGVudGlmaWVyLCBwb3B1bGF0aW9uSWRlbnRpZmllcikpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgU3RyaW5nIGdldERpc2Vhc2VOYW1lKCkgeworCQlyZXR1cm4gZGlzZWFzZU5hbWU7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIHNldERpc2Vhc2VOYW1lKFN0cmluZyBuZXdEaXNlYXNlTmFtZSkgeworCQlTdHJpbmcgb2xkRGlzZWFzZU5hbWUgPSBkaXNlYXNlTmFtZTsKKwkJZGlzZWFzZU5hbWUgPSBuZXdEaXNlYXNlTmFtZTsKKwkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQorCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwKKwkJCQkJU3RhbmRhcmRQYWNrYWdlLkRJU0VBU0VfTU9ERUxfX0RJU0VBU0VfTkFNRSwKKwkJCQkJb2xkRGlzZWFzZU5hbWUsIGRpc2Vhc2VOYW1lKSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBib29sZWFuIGlzRmluaXRlRGlmZmVyZW5jZSgpIHsKKwkJcmV0dXJuIGZpbml0ZURpZmZlcmVuY2U7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIHNldEZpbml0ZURpZmZlcmVuY2UoYm9vbGVhbiBuZXdGaW5pdGVEaWZmZXJlbmNlKSB7CisJCWJvb2xlYW4gb2xkRmluaXRlRGlmZmVyZW5jZSA9IGZpbml0ZURpZmZlcmVuY2U7CisJCWZpbml0ZURpZmZlcmVuY2UgPSBuZXdGaW5pdGVEaWZmZXJlbmNlOworCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpCisJCQllTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULAorCQkJCQlTdGFuZGFyZFBhY2thZ2UuRElTRUFTRV9NT0RFTF9fRklOSVRFX0RJRkZFUkVOQ0UsCisJCQkJCW9sZEZpbml0ZURpZmZlcmVuY2UsIGZpbml0ZURpZmZlcmVuY2UpKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIGJvb2xlYW4gaXNGcmVxdWVuY3lEZXBlbmRlbnQoKSB7CisJCXJldHVybiBmcmVxdWVuY3lEZXBlbmRlbnQ7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIHNldEZyZXF1ZW5jeURlcGVuZGVudChib29sZWFuIG5ld0ZyZXF1ZW5jeURlcGVuZGVudCkgeworCQlib29sZWFuIG9sZEZyZXF1ZW5jeURlcGVuZGVudCA9IGZyZXF1ZW5jeURlcGVuZGVudDsKKwkJZnJlcXVlbmN5RGVwZW5kZW50ID0gbmV3RnJlcXVlbmN5RGVwZW5kZW50OworCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpCisJCQllTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULAorCQkJCQlTdGFuZGFyZFBhY2thZ2UuRElTRUFTRV9NT0RFTF9fRlJFUVVFTkNZX0RFUEVOREVOVCwKKwkJCQkJb2xkRnJlcXVlbmN5RGVwZW5kZW50LCBmcmVxdWVuY3lEZXBlbmRlbnQpKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIERpc2Vhc2VNb2RlbExhYmVsIGNyZWF0ZURpc2Vhc2VNb2RlbExhYmVsKFN0cmluZyBwb3B1bGF0aW9uSWRlbnRpZmllcikgeworCQkvLyBUT0RPOiBpbXBsZW1lbnQgdGhpcyBtZXRob2QKKwkJLy8gRW5zdXJlIHRoYXQgeW91IHJlbW92ZSBAZ2VuZXJhdGVkIG9yIG1hcmsgaXQgQGdlbmVyYXRlZCBOT1QKKwkJdGhyb3cgbmV3IFVuc3VwcG9ydGVkT3BlcmF0aW9uRXhjZXB0aW9uKCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBEaXNlYXNlTW9kZWxMYWJlbFZhbHVlIGNyZWF0ZURpc2Vhc2VNb2RlbExhYmVsVmFsdWUoCisJCQlTdHJpbmcgcG9wdWxhdGlvbklkZW50aWZpZXIpIHsKKwkJLy8gVE9ETzogaW1wbGVtZW50IHRoaXMgbWV0aG9kCisJCS8vIEVuc3VyZSB0aGF0IHlvdSByZW1vdmUgQGdlbmVyYXRlZCBvciBtYXJrIGl0IEBnZW5lcmF0ZWQgTk9UCisJCXRocm93IG5ldyBVbnN1cHBvcnRlZE9wZXJhdGlvbkV4Y2VwdGlvbigpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgSW5mZWN0b3IgY3JlYXRlSW5mZWN0b3IoKSB7CisJCS8vIFRPRE86IGltcGxlbWVudCB0aGlzIG1ldGhvZAorCQkvLyBFbnN1cmUgdGhhdCB5b3UgcmVtb3ZlIEBnZW5lcmF0ZWQgb3IgbWFyayBpdCBAZ2VuZXJhdGVkIE5PVAorCQl0aHJvdyBuZXcgVW5zdXBwb3J0ZWRPcGVyYXRpb25FeGNlcHRpb24oKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCXB1YmxpYyBFTGlzdDxTdHJpbmc+IGdldEFsbExhYmVsSWRlbnRpZmllcnMoKSB7CisJCUVMaXN0PFN0cmluZz4gaWRlbnRpZmllcnMgPSBuZXcgQmFzaWNFTGlzdDxTdHJpbmc+KCk7CisKKwkJaWRlbnRpZmllcnMuYWRkKGdldFBvcHVsYXRpb25JZGVudGlmaWVyKCkpOworCisJCXJldHVybiBpZGVudGlmaWVyczsKKwl9CisKKwkvKioKKwkgKiBTZWFyY2ggdGhyb3VnaCB0aGUgZ3JhcGggYW5kIGZpbmQgYWxsIG9mIHRoZSBwb3B1bGF0aW9uIG1vZGVsIGxhYmVscworCSAqIChpLmUuIGR5bmFtaWMgbGFiZWxzKSB0aGF0IGhhdmUgdGhlIHNhbWUgaWRlbnRpZmllci4KKwkgKiAKKwkgKiBAcGFyYW0gcG9wdWxhdGlvbklkZW50aWZpZXIKKwkgKiAgICAgICAgICAgIHRoZSBwb3B1bGF0aW9uIGJlaW5nIGxhYmVsZWQKKwkgKiBAcGFyYW0gZ3JhcGgKKwkgKiAgICAgICAgICAgIHRoZSBncmFwaCB0byBzZWFyY2gKKwkgKiBAcmV0dXJuIHRoZSBQb3B1bGF0aW9uTGFiZWwgaW5zdGFuY2VzIG9mIHRoZSBncmFwaCB0aGF0IG1hdGNoIHRoZQorCSAqICAgICAgICAgaWRlbnRpZmllci4KKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCXB1YmxpYyBFTGlzdDxQb3B1bGF0aW9uTW9kZWxMYWJlbD4gZ2V0UG9wdWxhdGlvbk1vZGVsTGFiZWxzKAorCQkJU3RyaW5nIHBvcHVsYXRpb25JZGVudGlmaWVyLCBHcmFwaCBncmFwaCkgeworCQlmaW5hbCBFTGlzdDxQb3B1bGF0aW9uTW9kZWxMYWJlbD4gcmV0VmFsdWUgPSBuZXcgQmFzaWNFTGlzdDxQb3B1bGF0aW9uTW9kZWxMYWJlbD4oKTsKKworCQkvLyBJdGVyYXRlIHRocm91Z2ggYWxsIG9mIHRoZSBwb3B1bGF0aW9uIGxhYmVscyBpbiB0aGUgZ3JhcGgKKwkJRUxpc3Q8Tm9kZUxhYmVsPiBsYWJlbHMgPSBncmFwaAorCQkJCS5nZXROb2RlTGFiZWxzQnlUeXBlVVJJKFBvcHVsYXRpb25Nb2RlbExhYmVsLlVSSV9UWVBFX0RZTkFNSUNfUE9QVUxBVElPTl9MQUJFTCk7CisJCWZvciAoTm9kZUxhYmVsIHBsIDogbGFiZWxzKSB7CisJCQlmaW5hbCBQb3B1bGF0aW9uTW9kZWxMYWJlbCBwb3B1bGF0aW9uTGFiZWwgPSAoUG9wdWxhdGlvbk1vZGVsTGFiZWwpIHBsOworCQkJLy8gSXMgdGhpcyBsYWJlbCBmb3IgdGhlIHBvcHVsYXRpb24gd2UncmUgbG9va2luZyBmb3I/CisJCQlpZiAocG9wdWxhdGlvbkxhYmVsLmdldFBvcHVsYXRpb25JZGVudGlmaWVyKCkuZXF1YWxzKAorCQkJCQlwb3B1bGF0aW9uSWRlbnRpZmllcikpIHsKKwkJCQkvLyBZZXMKKwkJCQkvLyBJZiB0aGVyZSBpcyBhIHByb2JsZW0gd2l0aCB0aGUgIm5vZGUgdXJpIiBvZiB0aGUgcG9wdWxhdGlvbgorCQkJCS8vIGxhYmVsIHRoZW4gaXQgd291bGQgbm90IGhhdmUgYmVlbiBhc3NvY2lhdGVkIHdpdGggYSBub2RlCisJCQkJLy8gaW5zdGFuY2UgaW4gdGhlIGdyYXBoIGF0IHRoaXMgcG9pbnQuIFRoaXMgaXMgYSBwcm9ibGVtIGZvcgorCQkJCS8vIGRpc2Vhc2UgbW9kZWxzIHRoYXQgYXJlIHRyeWluZyB0byBsYWJlbCB0aGUgbm9kZSAodGhlcmUgaXNuJ3QKKwkJCQkvLyBvbmUhKS4gU28gZmlsdGVyIG91dCB0aG9zZSBtaXN0YWtlcyBoZXJlLgorCisJCQkJLy8gRG9lcyB0aGUgcG9wdWxhdGlvbiBsYWJlbCBoYXZlIGFuIGFzc29jaWF0ZWQgbm9kZT8KKwkJCQlpZiAocG9wdWxhdGlvbkxhYmVsLmdldE5vZGUoKSAhPSBudWxsKSB7CisJCQkJCS8vIFllcworCQkJCQlyZXRWYWx1ZS5hZGQocG9wdWxhdGlvbkxhYmVsKTsKKwkJCQl9IC8vIGlmIHRoZSBwb3B1bGF0aW9uIGxhYmVsIGhhcyBhIG5vZGUKKwkJCX0gLy8gaWYgdGhlIHBvcHVsYXRpb24gd2UncmUgbG9va2luZyBmb3IKKwkJfSAvLyBmb3IgZWFjaCBwb3B1bGF0aW9uIGxhYmVsCisKKwkJcmV0dXJuIHJldFZhbHVlOworCX0KKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLmltcGwuRGVjb3JhdG9ySW1wbCNkZWNvcmF0ZUdyYXBoKG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5HcmFwaCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgYm9vbGVhbiBkZWNvcmF0ZUdyYXBoKFNURU1UaW1lIHRpbWUpIHsKKwkJaWYgKHRoaXMuaXNHcmFwaERlY29yYXRlZCgpKQorCQkJcmV0dXJuIHRydWU7CisJCS8vIElmIHdlIGFscmVhZHkgaGF2ZSBsYWJlbHMgdG8gdXBkYXRlIHdlJ3JlIGRvbmUKKwkJaWYgKGdldExhYmVsc1RvVXBkYXRlKCkuc2l6ZSgpID4gMCkKKwkJCXJldHVybiB0cnVlOworCQlib29sZWFuIHN1Y2Nlc3MgPSBmYWxzZTsKKworCQlmb3IgKGZpbmFsIEl0ZXJhdG9yPFBvcHVsYXRpb25Nb2RlbExhYmVsPiBwb3B1bGF0aW9uTW9kZWxMYWJlbEl0ZXIgPSBnZXRQb3B1bGF0aW9uTW9kZWxMYWJlbHMoCisJCQkJZ2V0UG9wdWxhdGlvbklkZW50aWZpZXIoKSwgZ2V0R3JhcGgoKSkuaXRlcmF0b3IoKTsgcG9wdWxhdGlvbk1vZGVsTGFiZWxJdGVyCisJCQkJLmhhc05leHQoKTspIHsKKwkJCXN1Y2Nlc3MgPSB0cnVlOworCQkJZmluYWwgUG9wdWxhdGlvbk1vZGVsTGFiZWwgcG9wdWxhdGlvbk1vZGVsTGFiZWwgPSBwb3B1bGF0aW9uTW9kZWxMYWJlbEl0ZXIKKwkJCQkJLm5leHQoKTsKKworCQkJZmluYWwgRGlzZWFzZU1vZGVsTGFiZWwgZG1sID0gY3JlYXRlRGlzZWFzZU1vZGVsTGFiZWwocG9wdWxhdGlvbk1vZGVsTGFiZWwKKwkJCQkJLmdldFBvcHVsYXRpb25JZGVudGlmaWVyKCkpOworCQkJRGlzZWFzZU1vZGVsTGFiZWxJbXBsLmxhYmVsTm9kZShkbWwsIHBvcHVsYXRpb25Nb2RlbExhYmVsLAorCQkJCQlwb3B1bGF0aW9uTW9kZWxMYWJlbC5nZXROb2RlKCkpOworCisJCQkvLyBNYWtlIGEgdW5pcXVlIFVSSSBmb3IgdGhlIGxhYmVsIHRoYXQncyB0aGUgc2FtZSBhY3Jvc3MgcnVubmluZworCQkJLy8gaW5zdGFuY2VzCisJCQlVUkkgdW5pcXVlID0gU1RFTVVSSS5jcmVhdGVVUkkoTGFiZWwuVVJJX1RZUEVfTEFCRUxfU0VHTUVOVCArICIvIgorCQkJCQkrIHBvcHVsYXRpb25Nb2RlbExhYmVsLmdldE5vZGUoKS5nZXRVUkkoKS5sYXN0U2VnbWVudCgpCisJCQkJCSsgIi8iICsgdGhpcy5nZXREaXNlYXNlTmFtZSgpICsgIi8iCisJCQkJCSsgZ2V0UG9wdWxhdGlvbklkZW50aWZpZXIoKSk7CisJCQlkbWwuc2V0VVJJKHVuaXF1ZSk7CisJCQlkbWwuZ2V0RHVibGluQ29yZSgpLnNldElkZW50aWZpZXIodW5pcXVlLnRvU3RyaW5nKCkpOworCisJCQlnZXRMYWJlbHNUb1VwZGF0ZSgpLmFkZChkbWwpOworCisJCQlnZXRHcmFwaCgpLnB1dE5vZGVMYWJlbChkbWwpOworCisJCQkvLyBJbml0aWFsaXplIHRoZSBkaXNlYXNlIG1vZGVsIHN0YXRlIChpZiBhbnkpLiBUaGUgc3RhdGUgaG9sZHMKKwkJCS8vIHZhbHVlcyB1c2VmdWwgZm9yIHRoZSBjb21wdXRhdGlvbiBvZiB0aGUgZGlzZWFzZSBtb2RlbAorCQkJLy8gc2ZpbmFsIERpc2Vhc2VNb2RlbFN0YXRlIGRpc2Vhc2VNb2RlbFN0YXRlID0KKwkJCS8vIGNyZWF0ZURpc2Vhc2VNb2RlbFN0YXRlKCk7CisKKwkJCS8vIENvbW1lbnRlZCBvdXQgNC8xLzEwIE5vdCB1c2VkIGFueSBtb3JlCisJCQkvLyBkbWwuc2V0RGlzZWFzZU1vZGVsU3RhdGUoaW5pdGlhbGl6ZURpc2Vhc2VTdGF0ZShkaXNlYXNlTW9kZWxTdGF0ZSwKKwkJCS8vIGRtbCkpOworCQl9IC8vIGZvciBlYWNoIHBvcHVsYXRpb24gbGFiZWwKKworCQkvLyBXZSd2ZSBtYWRlIG9uZSBwYXNzIGxhYmVsaW5nIHRoZSBOb2RlJ3Mgd2l0aCB0aGUgZGlzZWFzZSBtb2RlbCBsYWJlbCwKKwkJLy8gYW5kIHdlIGNyZWF0ZWQgRGlzZWFzZU1vZGVsU3RhdGUgaW5zdGFuY2VzIHRoYXQgYXJlIHNwZWNpZmljIHRvIHRoaXMKKwkJLy8gZGlzZWFzZSB0aGF0IGhvbGQgc3RhdGUgaW5mb3JtYXRpb24gdXNlZnVsIGluIGl0cyBjb21wdXRhdGlvbnMuCisJCS8vIEhhdmluZyBtYWRlIG9uZSBwYXNzIHdlIG5lZWQgdG8gZ2l2ZSB0aGUgZGlzZWFzZSBtb2RlbCBhbm90aGVyIGNoYW5jZQorCQkvLyB0byB1cGRhdGUgaXRzIHN0YXRlIGluZm9ybWF0aW9uIHdpdGggdGhpbmdzIGl0IGxlYXJuZWQgZHVyaW5nIHRoZQorCQkvLyBmaXJzdCBwYXNzIChlLmcuLCB0aGUgdG90YWwgcG9wdWxhdGlvbiBvciB0b3RhbCBhcmVhKS4KKworCQkvLyBDb21tZW50ZWQgb3V0IDQvMS8xMCBOb3QgdXNlZCBhbnkgbW9yZQorCisJCS8vIGZvciAoSXRlcmF0b3IgZGlzZXNlTW9kZWxMYWJlbEl0ZXIgPSBnZXRMYWJlbHNUb1VwZGF0ZSgpLml0ZXJhdG9yKCk7CisJCS8vIGRpc2VzZU1vZGVsTGFiZWxJdGVyLmhhc05leHQoKTspIHsKKwkJLy8gaW5pdGlhbGl6ZURpc2Vhc2VTdGF0ZSgoRGlzZWFzZU1vZGVsTGFiZWwpCisJCS8vIGRpc2VzZU1vZGVsTGFiZWxJdGVyLm5leHQoKSk7CisJCS8vIH0gLy8gZm9yIGVhY2ggbGFiZWwgdGhpcyBkaXNlYXNlIG1vZGVsIHVwZGF0ZXMKKworCQkvLyBUaGlzIGluaXRpYWxpemVzIHRoZSBkaXNlYXNlIG1vZGVsIHZhbHVlcyBmcm9tIHRoZSBwb3B1bGF0aW9uIHZhbHVlcy4KKwkJLy8gRm9yIGluc3RhbmNlIGZvciBTdGFuZGFyZERpc2Vhc2VNb2RlbHMsIGl0IGluaXRpYWxpemVzIHRoZQorCQkvLyBzdXNjZXB0aWFibGUgcG9wdWxhdGlvbiBmcm9tIHRoZSBwb3B1bGF0aW9uCisJCXJlc2V0TGFiZWxzKCk7CisJCXJldHVybiBzdWNjZXNzOworCX0gLy8gZGVjb3JhdGVHcmFwaAorCisJcHJvdGVjdGVkIGJvb2xlYW4gZmluZFBvcHVsYXRpb25Nb2RlbChNb2RlbCBtLCBTdHJpbmcgcG9wdWxhdGlvbikgeworCQlib29sZWFuIGZvdW5kID0gZmFsc2U7CisJCS8vIENoZWNrIHN1YiBtb2RlbHMgZmlyc3QKKwkJZm9yIChNb2RlbCBtMiA6IG0uZ2V0TW9kZWxzKCkpIHsKKwkJCWZvdW5kID0gZmluZFBvcHVsYXRpb25Nb2RlbChtMiwgcG9wdWxhdGlvbik7CisJCQlpZiAoZm91bmQpCisJCQkJYnJlYWs7CisJCX0KKwkJaWYgKGZvdW5kKQorCQkJcmV0dXJuIGZvdW5kOworCisJCWZvciAoTm9kZURlY29yYXRvciBkZWMgOiBtLmdldE5vZGVEZWNvcmF0b3JzKCkpIHsKKwkJCWlmIChkZWMgaW5zdGFuY2VvZiBEZW1vZ3JhcGhpY1BvcHVsYXRpb25Nb2RlbCkgeworCQkJCURlbW9ncmFwaGljUG9wdWxhdGlvbk1vZGVsIGRwbSA9IChEZW1vZ3JhcGhpY1BvcHVsYXRpb25Nb2RlbCkgZGVjOworCQkJCWlmIChkcG0uZ2V0UG9wdWxhdGlvbklkZW50aWZpZXIoKS5lcXVhbHMocG9wdWxhdGlvbikpIHsKKwkJCQkJZm91bmQgPSB0cnVlOworCQkJCQlicmVhazsKKwkJCQl9CisJCQkJLy8gQW55IG9mIHRoZSBncm91cHMgbWF0Y2g/CisJCQkJYm9vbGVhbiBtYXRjaCA9IGZhbHNlOworCQkJCWZvciAoUG9wdWxhdGlvbkdyb3VwIHBnIDogZHBtLmdldFBvcHVsYXRpb25Hcm91cHMoKSkgeworCQkJCQlpZiAocGcuZ2V0SWRlbnRpZmllcigpLmVxdWFscyhwb3B1bGF0aW9uKSkgeworCQkJCQkJbWF0Y2ggPSB0cnVlOworCQkJCQkJYnJlYWs7CisJCQkJCX0KKwkJCQl9CisJCQkJaWYgKG1hdGNoKSB7CisJCQkJCWZvdW5kID0gdHJ1ZTsKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJfSBlbHNlIGlmIChkZWMgaW5zdGFuY2VvZiBQb3B1bGF0aW9uTW9kZWwKKwkJCQkJJiYgKChQb3B1bGF0aW9uTW9kZWwpIGRlYykuZ2V0UG9wdWxhdGlvbklkZW50aWZpZXIoKQorCQkJCQkJCS5lcXVhbHMocG9wdWxhdGlvbikpIHsKKwkJCQlmb3VuZCA9IHRydWU7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwkJcmV0dXJuIGZvdW5kOworCX0KKworCXByb3RlY3RlZCBTdGFuZGFyZEludGVydmVudGlvbkxhYmVsIGZpbmRJbnRlcnZlbnRpb25MYWJlbChOb2RlIG5vZGUpIHsKKwkJZm9yIChOb2RlTGFiZWwgbCA6IG5vZGUuZ2V0TGFiZWxzKCkpCisJCQlpZiAobCBpbnN0YW5jZW9mIFN0YW5kYXJkSW50ZXJ2ZW50aW9uTGFiZWwKKwkJCQkJJiYgKChTdGFuZGFyZEludGVydmVudGlvbkxhYmVsKSBsKQorCQkJCQkJCS5nZXRQb3B1bGF0aW9uSWRlbnRpZmllcigpLmVxdWFscygKKwkJCQkJCQkJCXRoaXMuZ2V0UG9wdWxhdGlvbklkZW50aWZpZXIoKSkpCisJCQkJcmV0dXJuIChTdGFuZGFyZEludGVydmVudGlvbkxhYmVsKSBsOworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBQcmVwYXJlIHRoZSBkZWNvcmF0b3IuIEEgc3ViY2xhc3MgbmVlZHMgdG8gb3ZlcnJpZGUgdGhpcyBtZXRob2QgaWYKKwkgKiBwcmUtcHJvY2Vzc2luZyBzdGVwcyBhcmUgbmVjZXNzYXJ5IGJlZm9yZSB0aGUgZGVjb3JhdG9yIGlzIGJlaW5nIHVzZWQKKwkgKiAKKwkgKiAKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBwcmVwYXJlKE1vZGVsIG1vZGVsLCBTVEVNVGltZSB0aW1lKSB7CisKKwkJLy8gQ2hlY2sgd2hldGhlciBhIHBvcHVsYXRpb24gbW9kZWwgZXhpc3RzIGZvciB0aGUgZGlzZWFzZSBtb2RlbC4gSWYKKwkJLy8gbm90LCBjcmVhdGUKKwkJLy8gYSBuZXcgcG9wdWxhdGlvbiBtb2RlbCB3aXRoIGJpcnRoL2RlYXRoIHJhdGUgMC4KKworCQlib29sZWFuIGZvdW5kID0gZmluZFBvcHVsYXRpb25Nb2RlbChtb2RlbCwKKwkJCQl0aGlzLmdldFBvcHVsYXRpb25JZGVudGlmaWVyKCkpOworCisJCWlmICghZm91bmQpIHsKKwkJCS8vIENyZWF0ZSBhIG5ldyBzdGFuZGFyZCBwb3B1bGF0aW9uIG1vZGVsCisJCQlTdGFuZGFyZFBvcHVsYXRpb25Nb2RlbCBzcG0gPSBTdGFuZGFyZEZhY3RvcnkuZUlOU1RBTkNFCisJCQkJCS5jcmVhdGVTdGFuZGFyZFBvcHVsYXRpb25Nb2RlbCgpOworCQkJc3BtLnNldFBvcHVsYXRpb25JZGVudGlmaWVyKHRoaXMuZ2V0UG9wdWxhdGlvbklkZW50aWZpZXIoKSk7CisJCQlTdHJpbmcgdGl0bGUgPSAiQXV0byBHZW5lcmF0ZWQgIiArIHRoaXMuZ2V0UG9wdWxhdGlvbklkZW50aWZpZXIoKQorCQkJCQkrICIgcG9wdWxhdGlvbiBtb2RlbCI7CisJCQlTdHJpbmcgbmFtZSA9ICJhdXRvX2dlbl8iICsgdGhpcy5nZXRQb3B1bGF0aW9uSWRlbnRpZmllcigpCisJCQkJCSsgIl9wb3B1bGF0aW9uX21vZGVsIjsKKwkJCXNwbS5zZXRVUkkoU1RFTVVSSS5jcmVhdGVVUkkobmFtZSArICIvIgorCQkJCQkrIFNURU1VUkkuZ2VuZXJhdGVVbmlxdWVQYXJ0KCkpKTsKKwkJCXNwbS5zZXROYW1lKG5hbWUpOworCQkJc3BtLmdldER1YmxpbkNvcmUoKS5zZXRUaXRsZSh0aXRsZSk7CisJCQltb2RlbC5nZXROb2RlRGVjb3JhdG9ycygpLmFkZCgwLCBzcG0pOworCQl9CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAcGFyYW0gZmVhdHVyZUlECisJICogQHBhcmFtIHJlc29sdmUKKwkgKiBAcGFyYW0gY29yZVR5cGUKKwkgKiBAcmV0dXJuCisJICogCisJICogICAgICAgICA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIE9iamVjdCBlR2V0KGludCBmZWF0dXJlSUQsIGJvb2xlYW4gcmVzb2x2ZSwgYm9vbGVhbiBjb3JlVHlwZSkgeworCQlzd2l0Y2ggKGZlYXR1cmVJRCkgeworCQljYXNlIFN0YW5kYXJkUGFja2FnZS5ESVNFQVNFX01PREVMX19QT1BVTEFUSU9OX0lERU5USUZJRVI6CisJCQlyZXR1cm4gZ2V0UG9wdWxhdGlvbklkZW50aWZpZXIoKTsKKwkJY2FzZSBTdGFuZGFyZFBhY2thZ2UuRElTRUFTRV9NT0RFTF9fVElNRV9QRVJJT0Q6CisJCQlyZXR1cm4gZ2V0VGltZVBlcmlvZCgpOworCQljYXNlIFN0YW5kYXJkUGFja2FnZS5ESVNFQVNFX01PREVMX19ESVNFQVNFX05BTUU6CisJCQlyZXR1cm4gZ2V0RGlzZWFzZU5hbWUoKTsKKwkJY2FzZSBTdGFuZGFyZFBhY2thZ2UuRElTRUFTRV9NT0RFTF9fRklOSVRFX0RJRkZFUkVOQ0U6CisJCQlyZXR1cm4gaXNGaW5pdGVEaWZmZXJlbmNlKCk7CisJCWNhc2UgU3RhbmRhcmRQYWNrYWdlLkRJU0VBU0VfTU9ERUxfX0ZSRVFVRU5DWV9ERVBFTkRFTlQ6CisJCQlyZXR1cm4gaXNGcmVxdWVuY3lEZXBlbmRlbnQoKTsKKwkJfQorCQlyZXR1cm4gc3VwZXIuZUdldChmZWF0dXJlSUQsIHJlc29sdmUsIGNvcmVUeXBlKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBwYXJhbSBmZWF0dXJlSUQKKwkgKiBAcGFyYW0gbmV3VmFsdWUKKwkgKiAKKwkgKiAgICAgICAgICAgIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBlU2V0KGludCBmZWF0dXJlSUQsIE9iamVjdCBuZXdWYWx1ZSkgeworCQlzd2l0Y2ggKGZlYXR1cmVJRCkgeworCQljYXNlIFN0YW5kYXJkUGFja2FnZS5ESVNFQVNFX01PREVMX19QT1BVTEFUSU9OX0lERU5USUZJRVI6CisJCQlzZXRQb3B1bGF0aW9uSWRlbnRpZmllcigoU3RyaW5nKSBuZXdWYWx1ZSk7CisJCQlyZXR1cm47CisJCWNhc2UgU3RhbmRhcmRQYWNrYWdlLkRJU0VBU0VfTU9ERUxfX1RJTUVfUEVSSU9EOgorCQkJc2V0VGltZVBlcmlvZCgoTG9uZykgbmV3VmFsdWUpOworCQkJcmV0dXJuOworCQljYXNlIFN0YW5kYXJkUGFja2FnZS5ESVNFQVNFX01PREVMX19ESVNFQVNFX05BTUU6CisJCQlzZXREaXNlYXNlTmFtZSgoU3RyaW5nKSBuZXdWYWx1ZSk7CisJCQlyZXR1cm47CisJCWNhc2UgU3RhbmRhcmRQYWNrYWdlLkRJU0VBU0VfTU9ERUxfX0ZJTklURV9ESUZGRVJFTkNFOgorCQkJc2V0RmluaXRlRGlmZmVyZW5jZSgoQm9vbGVhbikgbmV3VmFsdWUpOworCQkJcmV0dXJuOworCQljYXNlIFN0YW5kYXJkUGFja2FnZS5ESVNFQVNFX01PREVMX19GUkVRVUVOQ1lfREVQRU5ERU5UOgorCQkJc2V0RnJlcXVlbmN5RGVwZW5kZW50KChCb29sZWFuKSBuZXdWYWx1ZSk7CisJCQlyZXR1cm47CisJCX0KKwkJc3VwZXIuZVNldChmZWF0dXJlSUQsIG5ld1ZhbHVlKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBwYXJhbSBmZWF0dXJlSUQKKwkgKiAKKwkgKiAgICAgICAgICAgIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBlVW5zZXQoaW50IGZlYXR1cmVJRCkgeworCQlzd2l0Y2ggKGZlYXR1cmVJRCkgeworCQljYXNlIFN0YW5kYXJkUGFja2FnZS5ESVNFQVNFX01PREVMX19QT1BVTEFUSU9OX0lERU5USUZJRVI6CisJCQlzZXRQb3B1bGF0aW9uSWRlbnRpZmllcihQT1BVTEFUSU9OX0lERU5USUZJRVJfRURFRkFVTFQpOworCQkJcmV0dXJuOworCQljYXNlIFN0YW5kYXJkUGFja2FnZS5ESVNFQVNFX01PREVMX19USU1FX1BFUklPRDoKKwkJCXNldFRpbWVQZXJpb2QoVElNRV9QRVJJT0RfRURFRkFVTFQpOworCQkJcmV0dXJuOworCQljYXNlIFN0YW5kYXJkUGFja2FnZS5ESVNFQVNFX01PREVMX19ESVNFQVNFX05BTUU6CisJCQlzZXREaXNlYXNlTmFtZShESVNFQVNFX05BTUVfRURFRkFVTFQpOworCQkJcmV0dXJuOworCQljYXNlIFN0YW5kYXJkUGFja2FnZS5ESVNFQVNFX01PREVMX19GSU5JVEVfRElGRkVSRU5DRToKKwkJCXNldEZpbml0ZURpZmZlcmVuY2UoRklOSVRFX0RJRkZFUkVOQ0VfRURFRkFVTFQpOworCQkJcmV0dXJuOworCQljYXNlIFN0YW5kYXJkUGFja2FnZS5ESVNFQVNFX01PREVMX19GUkVRVUVOQ1lfREVQRU5ERU5UOgorCQkJc2V0RnJlcXVlbmN5RGVwZW5kZW50KEZSRVFVRU5DWV9ERVBFTkRFTlRfRURFRkFVTFQpOworCQkJcmV0dXJuOworCQl9CisJCXN1cGVyLmVVbnNldChmZWF0dXJlSUQpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogCisJICogQHBhcmFtIGZlYXR1cmVJRAorCSAqIEByZXR1cm4KKwkgKiAKKwkgKiAgICAgICAgIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgYm9vbGVhbiBlSXNTZXQoaW50IGZlYXR1cmVJRCkgeworCQlzd2l0Y2ggKGZlYXR1cmVJRCkgeworCQljYXNlIFN0YW5kYXJkUGFja2FnZS5ESVNFQVNFX01PREVMX19QT1BVTEFUSU9OX0lERU5USUZJRVI6CisJCQlyZXR1cm4gUE9QVUxBVElPTl9JREVOVElGSUVSX0VERUZBVUxUID09IG51bGwgPyBwb3B1bGF0aW9uSWRlbnRpZmllciAhPSBudWxsCisJCQkJCTogIVBPUFVMQVRJT05fSURFTlRJRklFUl9FREVGQVVMVAorCQkJCQkJCS5lcXVhbHMocG9wdWxhdGlvbklkZW50aWZpZXIpOworCQljYXNlIFN0YW5kYXJkUGFja2FnZS5ESVNFQVNFX01PREVMX19USU1FX1BFUklPRDoKKwkJCXJldHVybiB0aW1lUGVyaW9kICE9IFRJTUVfUEVSSU9EX0VERUZBVUxUOworCQljYXNlIFN0YW5kYXJkUGFja2FnZS5ESVNFQVNFX01PREVMX19ESVNFQVNFX05BTUU6CisJCQlyZXR1cm4gRElTRUFTRV9OQU1FX0VERUZBVUxUID09IG51bGwgPyBkaXNlYXNlTmFtZSAhPSBudWxsCisJCQkJCTogIURJU0VBU0VfTkFNRV9FREVGQVVMVC5lcXVhbHMoZGlzZWFzZU5hbWUpOworCQljYXNlIFN0YW5kYXJkUGFja2FnZS5ESVNFQVNFX01PREVMX19GSU5JVEVfRElGRkVSRU5DRToKKwkJCXJldHVybiBmaW5pdGVEaWZmZXJlbmNlICE9IEZJTklURV9ESUZGRVJFTkNFX0VERUZBVUxUOworCQljYXNlIFN0YW5kYXJkUGFja2FnZS5ESVNFQVNFX01PREVMX19GUkVRVUVOQ1lfREVQRU5ERU5UOgorCQkJcmV0dXJuIGZyZXF1ZW5jeURlcGVuZGVudCAhPSBGUkVRVUVOQ1lfREVQRU5ERU5UX0VERUZBVUxUOworCQl9CisJCXJldHVybiBzdXBlci5lSXNTZXQoZmVhdHVyZUlEKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEByZXR1cm4KKwkgKiAKKwkgKiAgICAgICAgIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIFN0cmluZyB0b1N0cmluZygpIHsKKwkJaWYgKGVJc1Byb3h5KCkpCisJCQlyZXR1cm4gc3VwZXIudG9TdHJpbmcoKTsKKworCQlmaW5hbCBTdHJpbmdCdWZmZXIgcmVzdWx0ID0gbmV3IFN0cmluZ0J1ZmZlcigpOworCisJCWZpbmFsIFN0cmluZyB0aXRsZSA9IGdldER1YmxpbkNvcmUoKS5nZXRUaXRsZSgpOworCQlyZXN1bHQuYXBwZW5kKHRpdGxlID09IG51bGwgPyAiPGRpc2Vhc2UgbW9kZWw+IiA6IHRpdGxlKTsKKwkJcmVzdWx0LmFwcGVuZCgiKCIpOworCQlyZXN1bHQuYXBwZW5kKGdldFBvcHVsYXRpb25JZGVudGlmaWVyKCkpOworCQlyZXN1bHQuYXBwZW5kKCcpJyk7CisJCXJldHVybiByZXN1bHQudG9TdHJpbmcoKTsKKwl9IC8vIHRvU3RyaW5nCisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5pbXBsLk5vZGVEZWNvcmF0b3JJbXBsI3NhbmUoKQorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBib29sZWFuIHNhbmUoKSB7CisJCWJvb2xlYW4gcmV0VmFsdWUgPSBzdXBlci5zYW5lKCk7CisKKwkJcmV0VmFsdWUgPSByZXRWYWx1ZSAmJiBnZXREaXNlYXNlTmFtZSgpICE9IG51bGw7CisJCWFzc2VydCByZXRWYWx1ZTsKKworCQlyZXRWYWx1ZSA9IHJldFZhbHVlICYmIGdldFRpbWVQZXJpb2QoKSA+PSAwLjA7CisJCWFzc2VydCByZXRWYWx1ZTsKKworCQlyZXR1cm4gcmV0VmFsdWU7CisJfSAvLyBzYW5lCisKK30gLy8gRGlzZWFzZU1vZGVsSW1wbApkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9zdGFuZGFyZC9pbXBsL0Rpc2Vhc2VNb2RlbExhYmVsSW1wbC5qYXZhIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9zdGFuZGFyZC9pbXBsL0Rpc2Vhc2VNb2RlbExhYmVsSW1wbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY5NDkyZDMKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3N0YW5kYXJkL2ltcGwvRGlzZWFzZU1vZGVsTGFiZWxJbXBsLmphdmEKQEAgLTAsMCArMSwzMzQgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLmltcGw7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgamF2YS50ZXh0LkRlY2ltYWxGb3JtYXQ7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLkVMaXN0OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQXR0cmlidXRlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkludGVybmFsRU9iamVjdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuaW1wbC5FTm90aWZpY2F0aW9uSW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguaW1wbC5JbnRlZ3JhdGlvbkxhYmVsSW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguTm9kZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguaW1wbC5EeW5hbWljTm9kZUxhYmVsSW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5Qb3B1bGF0aW9uTGFiZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLkRpc2Vhc2VNb2RlbExhYmVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5EaXNlYXNlTW9kZWxMYWJlbFZhbHVlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZFBhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLlBvcHVsYXRpb25Nb2RlbExhYmVsOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IEFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJworICogPGVtPjxiPkRpc2Vhc2UgTW9kZWwgTGFiZWw8L2I+PC9lbT4nLiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIDxwPgorICogVGhlIGZvbGxvd2luZyBmZWF0dXJlcyBhcmUgaW1wbGVtZW50ZWQ6CisgKiA8dWw+CisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLmltcGwuRGlzZWFzZU1vZGVsTGFiZWxJbXBsI2dldFBvcHVsYXRpb25MYWJlbCA8ZW0+UG9wdWxhdGlvbiBMYWJlbDwvZW0+fTwvbGk+CisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLmltcGwuRGlzZWFzZU1vZGVsTGFiZWxJbXBsI2dldFBvcHVsYXRpb25Nb2RlbExhYmVsIDxlbT5Qb3B1bGF0aW9uIE1vZGVsIExhYmVsPC9lbT59PC9saT4KKyAqIDwvdWw+CisgKiA8L3A+CisgKgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgYWJzdHJhY3QgY2xhc3MgRGlzZWFzZU1vZGVsTGFiZWxJbXBsIGV4dGVuZHMgSW50ZWdyYXRpb25MYWJlbEltcGwKKwkJaW1wbGVtZW50cyBEaXNlYXNlTW9kZWxMYWJlbCB7CisJLyoqCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0UG9wdWxhdGlvbkxhYmVsKCkgPGVtPlBvcHVsYXRpb24gTGFiZWw8L2VtPn0nIHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tCisJICogZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI2dldFBvcHVsYXRpb25MYWJlbCgpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIFBvcHVsYXRpb25MYWJlbCBwb3B1bGF0aW9uTGFiZWw7CisKKwkvKioKKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRQb3B1bGF0aW9uTW9kZWxMYWJlbCgpIDxlbT5Qb3B1bGF0aW9uIE1vZGVsIExhYmVsPC9lbT59JyByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLQorCSAqIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNnZXRQb3B1bGF0aW9uTW9kZWxMYWJlbCgpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIFBvcHVsYXRpb25Nb2RlbExhYmVsIHBvcHVsYXRpb25Nb2RlbExhYmVsOworCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBEaXNlYXNlTW9kZWxMYWJlbEltcGwoKSB7CisJCXN1cGVyKCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCBFQ2xhc3MgZVN0YXRpY0NsYXNzKCkgeworCQlyZXR1cm4gU3RhbmRhcmRQYWNrYWdlLkxpdGVyYWxzLkRJU0VBU0VfTU9ERUxfTEFCRUw7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAcmV0dXJuCisJICogCisJICogICAgICAgICA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFBvcHVsYXRpb25MYWJlbCBnZXRQb3B1bGF0aW9uTGFiZWwoKSB7CisJCWlmIChwb3B1bGF0aW9uTGFiZWwgIT0gbnVsbCAmJiBwb3B1bGF0aW9uTGFiZWwuZUlzUHJveHkoKSkgeworCQkJSW50ZXJuYWxFT2JqZWN0IG9sZFBvcHVsYXRpb25MYWJlbCA9IChJbnRlcm5hbEVPYmplY3QpcG9wdWxhdGlvbkxhYmVsOworCQkJcG9wdWxhdGlvbkxhYmVsID0gKFBvcHVsYXRpb25MYWJlbCllUmVzb2x2ZVByb3h5KG9sZFBvcHVsYXRpb25MYWJlbCk7CisJCQlpZiAocG9wdWxhdGlvbkxhYmVsICE9IG9sZFBvcHVsYXRpb25MYWJlbCkgeworCQkJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkKKwkJCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlJFU09MVkUsIFN0YW5kYXJkUGFja2FnZS5ESVNFQVNFX01PREVMX0xBQkVMX19QT1BVTEFUSU9OX0xBQkVMLCBvbGRQb3B1bGF0aW9uTGFiZWwsIHBvcHVsYXRpb25MYWJlbCkpOworCQkJfQorCQl9CisJCXJldHVybiBwb3B1bGF0aW9uTGFiZWw7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAcmV0dXJuCisJICogCisJICogICAgICAgICA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFBvcHVsYXRpb25MYWJlbCBiYXNpY0dldFBvcHVsYXRpb25MYWJlbCgpIHsKKwkJcmV0dXJuIHBvcHVsYXRpb25MYWJlbDsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBwYXJhbSBuZXdQb3B1bGF0aW9uTGFiZWwKKwkgKiAKKwkgKiAgICAgICAgICAgIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRQb3B1bGF0aW9uTGFiZWwoUG9wdWxhdGlvbkxhYmVsIG5ld1BvcHVsYXRpb25MYWJlbCkgeworCQlQb3B1bGF0aW9uTGFiZWwgb2xkUG9wdWxhdGlvbkxhYmVsID0gcG9wdWxhdGlvbkxhYmVsOworCQlwb3B1bGF0aW9uTGFiZWwgPSBuZXdQb3B1bGF0aW9uTGFiZWw7CisJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkKKwkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIFN0YW5kYXJkUGFja2FnZS5ESVNFQVNFX01PREVMX0xBQkVMX19QT1BVTEFUSU9OX0xBQkVMLCBvbGRQb3B1bGF0aW9uTGFiZWwsIHBvcHVsYXRpb25MYWJlbCkpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgUG9wdWxhdGlvbk1vZGVsTGFiZWwgZ2V0UG9wdWxhdGlvbk1vZGVsTGFiZWwoKSB7CisJCWlmIChwb3B1bGF0aW9uTW9kZWxMYWJlbCAhPSBudWxsICYmIHBvcHVsYXRpb25Nb2RlbExhYmVsLmVJc1Byb3h5KCkpIHsKKwkJCUludGVybmFsRU9iamVjdCBvbGRQb3B1bGF0aW9uTW9kZWxMYWJlbCA9IChJbnRlcm5hbEVPYmplY3QpcG9wdWxhdGlvbk1vZGVsTGFiZWw7CisJCQlwb3B1bGF0aW9uTW9kZWxMYWJlbCA9IChQb3B1bGF0aW9uTW9kZWxMYWJlbCllUmVzb2x2ZVByb3h5KG9sZFBvcHVsYXRpb25Nb2RlbExhYmVsKTsKKwkJCWlmIChwb3B1bGF0aW9uTW9kZWxMYWJlbCAhPSBvbGRQb3B1bGF0aW9uTW9kZWxMYWJlbCkgeworCQkJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkKKwkJCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlJFU09MVkUsIFN0YW5kYXJkUGFja2FnZS5ESVNFQVNFX01PREVMX0xBQkVMX19QT1BVTEFUSU9OX01PREVMX0xBQkVMLCBvbGRQb3B1bGF0aW9uTW9kZWxMYWJlbCwgcG9wdWxhdGlvbk1vZGVsTGFiZWwpKTsKKwkJCX0KKwkJfQorCQlyZXR1cm4gcG9wdWxhdGlvbk1vZGVsTGFiZWw7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBQb3B1bGF0aW9uTW9kZWxMYWJlbCBiYXNpY0dldFBvcHVsYXRpb25Nb2RlbExhYmVsKCkgeworCQlyZXR1cm4gcG9wdWxhdGlvbk1vZGVsTGFiZWw7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIHNldFBvcHVsYXRpb25Nb2RlbExhYmVsKAorCQkJUG9wdWxhdGlvbk1vZGVsTGFiZWwgbmV3UG9wdWxhdGlvbk1vZGVsTGFiZWwpIHsKKwkJUG9wdWxhdGlvbk1vZGVsTGFiZWwgb2xkUG9wdWxhdGlvbk1vZGVsTGFiZWwgPSBwb3B1bGF0aW9uTW9kZWxMYWJlbDsKKwkJcG9wdWxhdGlvbk1vZGVsTGFiZWwgPSBuZXdQb3B1bGF0aW9uTW9kZWxMYWJlbDsKKwkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQorCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgU3RhbmRhcmRQYWNrYWdlLkRJU0VBU0VfTU9ERUxfTEFCRUxfX1BPUFVMQVRJT05fTU9ERUxfTEFCRUwsIG9sZFBvcHVsYXRpb25Nb2RlbExhYmVsLCBwb3B1bGF0aW9uTW9kZWxMYWJlbCkpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJcHVibGljIFN0cmluZyB0b1Rvb2x0aXBTdHJpbmcoKSB7CisJCURpc2Vhc2VNb2RlbExhYmVsVmFsdWUgY3VycmVudCA9IChEaXNlYXNlTW9kZWxMYWJlbFZhbHVlKSBnZXRDdXJyZW50VmFsdWUoKTsKKwkJZG91YmxlIHBvcHVsYXRpb25Db3VudCA9IGN1cnJlbnQuZ2V0UG9wdWxhdGlvbkNvdW50KCk7CisKKwkJaWYgKHBvcHVsYXRpb25Db3VudCA9PSAwKSB7CisJCQkvLyBBdm9pZCBkaXZpZGUgYnkgMCwgYWxsIHplcm9zIHdpbGwgYmUKKwkJCS8vIGRpc3BsYXllZCBmb3IgdGhlIGNvbXBhcnRtZW50cworCQkJcG9wdWxhdGlvbkNvdW50ID0gMTsKKwkJfQorCisJCURlY2ltYWxGb3JtYXQgZm9ybWF0UGVyY2VudGFnZSA9IG5ldyBEZWNpbWFsRm9ybWF0KCIjJSIpOworCQlFTGlzdDxFQXR0cmlidXRlPiBhdHRyaWJ1dGVzID0gY3VycmVudC5lQ2xhc3MoKS5nZXRFQWxsQXR0cmlidXRlcygpOworCQlTdHJpbmdCdWZmZXIgcmVzdWx0ID0gbmV3IFN0cmluZ0J1ZmZlcigpOworCQlpbnQgaSA9IDA7CisKKwkJcmVzdWx0LmFwcGVuZChnZXRJZGVudGlmaWVyKCkgKyAiOiAiKTsKKworCQlmb3IgKEVBdHRyaWJ1dGUgYXR0cmlidXRlIDogYXR0cmlidXRlcykgeworCQkJaWYgKCFhdHRyaWJ1dGUuZ2V0TmFtZSgpLnN0YXJ0c1dpdGgoImluY2lkZW5jZSIpCisJCQkJCSYmICFhdHRyaWJ1dGUuZ2V0TmFtZSgpLnN0YXJ0c1dpdGgoImRpc2Vhc2VEZWF0aHMiKQorCQkJCQkmJiAhYXR0cmlidXRlLmdldE5hbWUoKS5zdGFydHNXaXRoKCJwb3B1bGF0aW9uQ291bnQiKSkgeworCQkJCVN0cmluZyBuYW1lID0gYXR0cmlidXRlLmdldE5hbWUoKS50b1VwcGVyQ2FzZSgpOworCQkJCVN0cmluZyB2YWx1ZSA9IGZvcm1hdFBlcmNlbnRhZ2UuZm9ybWF0KChEb3VibGUpIGN1cnJlbnQKKwkJCQkJCS5lR2V0KGF0dHJpYnV0ZSkgLyBwb3B1bGF0aW9uQ291bnQpOworCisJCQkJaWYgKGkgIT0gMCAmJiBpICUgMTAgPT0gMCkgeworCQkJCQlyZXN1bHQuYXBwZW5kKCJcblx0Iik7CisJCQkJfQorCisJCQkJcmVzdWx0LmFwcGVuZChuYW1lICsgIjoiKTsKKwkJCQlyZXN1bHQuYXBwZW5kKHZhbHVlKTsKKwkJCQlyZXN1bHQuYXBwZW5kKCIsICIpOworCisJCQkJaSsrOworCQkJfQorCQl9CisKKwkJcmVzdWx0LmRlbGV0ZShyZXN1bHQubGVuZ3RoKCkgLSAyLCByZXN1bHQubGVuZ3RoKCkpOworCisJCXJldHVybiByZXN1bHQudG9TdHJpbmcoKTsKKwl9CisKKwkvKioKKwkgKiBMYWJlbCB0aGUgbm9kZSB3aXRoIHRoZSBkaXNlYXNlIG1vZGVsIGxhYmVsCisJICogCisJICogQHBhcmFtIGRtbAorCSAqICAgICAgICAgICAgdGhlIGRpc2Vhc2UgbW9kZWwgbGFiZWwKKwkgKiAKKwkgKiBAcGFyYW0gcG9wdWxhdGlvbk1vZGVsTGFiZWwKKwkgKiAgICAgICAgICAgIHRoZSBkeW5hbWljIHBvcHVsYXRpb24gbGFiZWwgYWZmZWN0ZWQgYnkgdGhlIGRpc2Vhc2UgKGUuZy4KKwkgKiAgICAgICAgICAgIHdvbWVuKQorCSAqIAorCSAqIEBwYXJhbSBub2RlCisJICogICAgICAgICAgICB0aGUgbm9kZSB0aGF0IGhhcyB0aGUgcG9wdWxhdGlvbiBiZWluZyBhZmZlY3RlZCBieSB0aGUgZGlzZWFzZQorCSAqLworCXB1YmxpYyBzdGF0aWMgdm9pZCBsYWJlbE5vZGUoZmluYWwgRGlzZWFzZU1vZGVsTGFiZWwgZG1sLAorCQkJZmluYWwgUG9wdWxhdGlvbk1vZGVsTGFiZWwgcG9wdWxhdGlvbk1vZGVsTGFiZWwsIGZpbmFsIE5vZGUgbm9kZSkgeworCQlkbWwuc2V0UG9wdWxhdGlvbkxhYmVsKHBvcHVsYXRpb25Nb2RlbExhYmVsLmdldFBvcHVsYXRpb25MYWJlbCgpKTsKKwkJZG1sLnNldFBvcHVsYXRpb25Nb2RlbExhYmVsKHBvcHVsYXRpb25Nb2RlbExhYmVsKTsKKwkJbm9kZS5nZXRMYWJlbHMoKS5hZGQoZG1sKTsKKwl9IC8vIGxhYmVsTm9kZQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAcGFyYW0gZmVhdHVyZUlECisJICogQHBhcmFtIHJlc29sdmUKKwkgKiBAcGFyYW0gY29yZVR5cGUKKwkgKiAKKwkgKiBAcmV0dXJuCisJICogCisJICogICAgICAgICA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIE9iamVjdCBlR2V0KGludCBmZWF0dXJlSUQsIGJvb2xlYW4gcmVzb2x2ZSwgYm9vbGVhbiBjb3JlVHlwZSkgeworCQlzd2l0Y2ggKGZlYXR1cmVJRCkgeworCQkJY2FzZSBTdGFuZGFyZFBhY2thZ2UuRElTRUFTRV9NT0RFTF9MQUJFTF9fUE9QVUxBVElPTl9MQUJFTDoKKwkJCQlpZiAocmVzb2x2ZSkgcmV0dXJuIGdldFBvcHVsYXRpb25MYWJlbCgpOworCQkJCXJldHVybiBiYXNpY0dldFBvcHVsYXRpb25MYWJlbCgpOworCQkJY2FzZSBTdGFuZGFyZFBhY2thZ2UuRElTRUFTRV9NT0RFTF9MQUJFTF9fUE9QVUxBVElPTl9NT0RFTF9MQUJFTDoKKwkJCQlpZiAocmVzb2x2ZSkgcmV0dXJuIGdldFBvcHVsYXRpb25Nb2RlbExhYmVsKCk7CisJCQkJcmV0dXJuIGJhc2ljR2V0UG9wdWxhdGlvbk1vZGVsTGFiZWwoKTsKKwkJfQorCQlyZXR1cm4gc3VwZXIuZUdldChmZWF0dXJlSUQsIHJlc29sdmUsIGNvcmVUeXBlKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBwYXJhbSBmZWF0dXJlSUQKKwkgKiBAcGFyYW0gbmV3VmFsdWUKKwkgKiAKKwkgKiAgICAgICAgICAgIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBlU2V0KGludCBmZWF0dXJlSUQsIE9iamVjdCBuZXdWYWx1ZSkgeworCQlzd2l0Y2ggKGZlYXR1cmVJRCkgeworCQkJY2FzZSBTdGFuZGFyZFBhY2thZ2UuRElTRUFTRV9NT0RFTF9MQUJFTF9fUE9QVUxBVElPTl9MQUJFTDoKKwkJCQlzZXRQb3B1bGF0aW9uTGFiZWwoKFBvcHVsYXRpb25MYWJlbCluZXdWYWx1ZSk7CisJCQkJcmV0dXJuOworCQkJY2FzZSBTdGFuZGFyZFBhY2thZ2UuRElTRUFTRV9NT0RFTF9MQUJFTF9fUE9QVUxBVElPTl9NT0RFTF9MQUJFTDoKKwkJCQlzZXRQb3B1bGF0aW9uTW9kZWxMYWJlbCgoUG9wdWxhdGlvbk1vZGVsTGFiZWwpbmV3VmFsdWUpOworCQkJCXJldHVybjsKKwkJfQorCQlzdXBlci5lU2V0KGZlYXR1cmVJRCwgbmV3VmFsdWUpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogCisJICogQHBhcmFtIGZlYXR1cmVJRAorCSAqIAorCSAqICAgICAgICAgICAgPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGVVbnNldChpbnQgZmVhdHVyZUlEKSB7CisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7CisJCQljYXNlIFN0YW5kYXJkUGFja2FnZS5ESVNFQVNFX01PREVMX0xBQkVMX19QT1BVTEFUSU9OX0xBQkVMOgorCQkJCXNldFBvcHVsYXRpb25MYWJlbCgoUG9wdWxhdGlvbkxhYmVsKW51bGwpOworCQkJCXJldHVybjsKKwkJCWNhc2UgU3RhbmRhcmRQYWNrYWdlLkRJU0VBU0VfTU9ERUxfTEFCRUxfX1BPUFVMQVRJT05fTU9ERUxfTEFCRUw6CisJCQkJc2V0UG9wdWxhdGlvbk1vZGVsTGFiZWwoKFBvcHVsYXRpb25Nb2RlbExhYmVsKW51bGwpOworCQkJCXJldHVybjsKKwkJfQorCQlzdXBlci5lVW5zZXQoZmVhdHVyZUlEKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBwYXJhbSBmZWF0dXJlSUQKKwkgKiAKKwkgKiBAcmV0dXJuCisJICogCisJICogICAgICAgICA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIGJvb2xlYW4gZUlzU2V0KGludCBmZWF0dXJlSUQpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJCWNhc2UgU3RhbmRhcmRQYWNrYWdlLkRJU0VBU0VfTU9ERUxfTEFCRUxfX1BPUFVMQVRJT05fTEFCRUw6CisJCQkJcmV0dXJuIHBvcHVsYXRpb25MYWJlbCAhPSBudWxsOworCQkJY2FzZSBTdGFuZGFyZFBhY2thZ2UuRElTRUFTRV9NT0RFTF9MQUJFTF9fUE9QVUxBVElPTl9NT0RFTF9MQUJFTDoKKwkJCQlyZXR1cm4gcG9wdWxhdGlvbk1vZGVsTGFiZWwgIT0gbnVsbDsKKwkJfQorCQlyZXR1cm4gc3VwZXIuZUlzU2V0KGZlYXR1cmVJRCk7CisJfQorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguaW1wbC5EeW5hbWljTm9kZUxhYmVsSW1wbCNzYW5lKCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgYm9vbGVhbiBzYW5lKCkgeworCQlib29sZWFuIHJldFZhbHVlID0gc3VwZXIuc2FuZSgpOworCisJCWFzc2VydCByZXRWYWx1ZTsKKworCQlyZXR1cm4gcmV0VmFsdWU7CisJfSAvLyBzYW5lCisKK30gLy8gRGlzZWFzZU1vZGVsTGFiZWxJbXBsCmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3N0YW5kYXJkL2ltcGwvRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZUltcGwuamF2YSBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvc3RhbmRhcmQvaW1wbC9EaXNlYXNlTW9kZWxMYWJlbFZhbHVlSW1wbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ1ZDA1NzMKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3N0YW5kYXJkL2ltcGwvRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZUltcGwuamF2YQpAQCAtMCwwICsxLDM5OSBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuaW1wbDsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKK2ltcG9ydCBqYXZhLnV0aWwuTWFwOworaW1wb3J0IGphdmEudXRpbC5UcmVlTWFwOworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLkJhc2ljRUxpc3Q7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLkVMaXN0OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQXR0cmlidXRlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmltcGwuSW50ZWdyYXRpb25MYWJlbFZhbHVlSW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUudXRpbC5FT2JqZWN0UmVzb2x2aW5nRUxpc3Q7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkV4Y2hhbmdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5JbnRlZ3JhdGlvbkxhYmVsVmFsdWU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkxhYmVsVmFsdWU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLk5vZGU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmltcGwuTGFiZWxWYWx1ZUltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLkRpc2Vhc2VNb2RlbExhYmVsVmFsdWU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmRQYWNrYWdlOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IEFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJworICogPGVtPjxiPkRpc2Vhc2UgTW9kZWwgTGFiZWwgVmFsdWU8L2I+PC9lbT4nLiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIDxwPgorICogVGhlIGZvbGxvd2luZyBmZWF0dXJlcyBhcmUgaW1wbGVtZW50ZWQ6CisgKiA8dWw+CisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLmltcGwuRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZUltcGwjZ2V0UG9wdWxhdGlvbkNvdW50IDxlbT5Qb3B1bGF0aW9uIENvdW50PC9lbT59PC9saT4KKyAqIDwvdWw+CisgKiA8L3A+CisgKgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgYWJzdHJhY3QgY2xhc3MgRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZUltcGwgZXh0ZW5kcyBJbnRlZ3JhdGlvbkxhYmVsVmFsdWVJbXBsCisJCWltcGxlbWVudHMgRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZSB7CisJcHVibGljIHN0YXRpYyBmaW5hbCBkb3VibGUgQUJTX1RPTEVSQU5DRSA9IDFFLTEyOyAvLyBmaXggaGFyZGNvZGVkPworCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBEaXNlYXNlTW9kZWxMYWJlbFZhbHVlSW1wbCgpIHsKKwkJc3VwZXIoKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIEVDbGFzcyBlU3RhdGljQ2xhc3MoKSB7CisJCXJldHVybiBTdGFuZGFyZFBhY2thZ2UuTGl0ZXJhbHMuRElTRUFTRV9NT0RFTF9MQUJFTF9WQUxVRTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCXB1YmxpYyBkb3VibGUgZ2V0UG9wdWxhdGlvbkNvdW50KCkgeworCQlFTGlzdDxFQXR0cmlidXRlPiBhdHRyaWJ1dGVzID0gZUNsYXNzKCkuZ2V0RUFsbEF0dHJpYnV0ZXMoKTsKKwkJZG91YmxlIGNvdW50ID0gMC4wOworCisJCWZvciAoRUF0dHJpYnV0ZSBhdHRyaWJ1dGUgOiBhdHRyaWJ1dGVzKSB7CisJCQlpZiAoYXR0cmlidXRlLmlzQ2hhbmdlYWJsZSgpCisJCQkJCSYmICFhdHRyaWJ1dGUuZ2V0TmFtZSgpLnN0YXJ0c1dpdGgoImluY2lkZW5jZSIpCisJCQkJCSYmICFhdHRyaWJ1dGUuZ2V0TmFtZSgpLnN0YXJ0c1dpdGgoImRpc2Vhc2VEZWF0aHMiKSkgeworCQkJCWNvdW50ICs9IChEb3VibGUpIGVHZXQoYXR0cmlidXRlKTsKKwkJCX0KKwkJfQorCisJCXJldHVybiBjb3VudDsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCXB1YmxpYyBJbnRlZ3JhdGlvbkxhYmVsVmFsdWUgc2V0KEludGVncmF0aW9uTGFiZWxWYWx1ZSB2YWx1ZSkgeworCQlFTGlzdDxFQXR0cmlidXRlPiBhdHRyaWJ1dGVzID0gZUNsYXNzKCkuZ2V0RUFsbEF0dHJpYnV0ZXMoKTsKKworCQlmb3IgKEVBdHRyaWJ1dGUgYXR0cmlidXRlIDogYXR0cmlidXRlcykgeworCQkJaWYgKGF0dHJpYnV0ZS5pc0NoYW5nZWFibGUoKSkgeworCQkJCWVTZXQoYXR0cmlidXRlLCB2YWx1ZS5lR2V0KGF0dHJpYnV0ZSkpOworCQkJfQorCQl9CisKKwkJcmV0dXJuIHRoaXM7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogCisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlwdWJsaWMgSW50ZWdyYXRpb25MYWJlbFZhbHVlIGFkZChJbnRlZ3JhdGlvbkxhYmVsVmFsdWUgdmFsdWUpIHsKKwkJRUxpc3Q8RUF0dHJpYnV0ZT4gYXR0cmlidXRlcyA9IGVDbGFzcygpLmdldEVBbGxBdHRyaWJ1dGVzKCk7CisKKwkJZm9yIChFQXR0cmlidXRlIGF0dHJpYnV0ZSA6IGF0dHJpYnV0ZXMpIHsKKwkJCWlmIChhdHRyaWJ1dGUuaXNDaGFuZ2VhYmxlKCkpIHsKKwkJCQllU2V0KGF0dHJpYnV0ZSwKKwkJCQkJCShEb3VibGUpIGVHZXQoYXR0cmlidXRlKQorCQkJCQkJCQkrIChEb3VibGUpIHZhbHVlLmVHZXQoYXR0cmlidXRlKSk7CisJCQl9CisJCX0KKworCQlyZXR1cm4gdGhpczsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCXB1YmxpYyBJbnRlZ3JhdGlvbkxhYmVsVmFsdWUgc3ViKEludGVncmF0aW9uTGFiZWxWYWx1ZSB2YWx1ZSkgeworCQlFTGlzdDxFQXR0cmlidXRlPiBhdHRyaWJ1dGVzID0gZUNsYXNzKCkuZ2V0RUFsbEF0dHJpYnV0ZXMoKTsKKworCQlmb3IgKEVBdHRyaWJ1dGUgYXR0cmlidXRlIDogYXR0cmlidXRlcykgeworCQkJaWYgKGF0dHJpYnV0ZS5pc0NoYW5nZWFibGUoKSkgeworCQkJCWVTZXQoYXR0cmlidXRlLAorCQkJCQkJKERvdWJsZSkgZUdldChhdHRyaWJ1dGUpCisJCQkJCQkJCS0gKERvdWJsZSkgdmFsdWUuZUdldChhdHRyaWJ1dGUpKTsKKwkJCX0KKwkJfQorCisJCXJldHVybiB0aGlzOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJcHVibGljIEludGVncmF0aW9uTGFiZWxWYWx1ZSBzY2FsZShkb3VibGUgc2NhbGVGYWN0b3IpIHsKKwkJRUxpc3Q8RUF0dHJpYnV0ZT4gYXR0cmlidXRlcyA9IGVDbGFzcygpLmdldEVBbGxBdHRyaWJ1dGVzKCk7CisKKwkJZm9yIChFQXR0cmlidXRlIGF0dHJpYnV0ZSA6IGF0dHJpYnV0ZXMpIHsKKwkJCWlmIChhdHRyaWJ1dGUuaXNDaGFuZ2VhYmxlKCkpIHsKKwkJCQllU2V0KGF0dHJpYnV0ZSwgc2NhbGVGYWN0b3IgKiAoRG91YmxlKSBlR2V0KGF0dHJpYnV0ZSkpOworCQkJfQorCQl9CisKKwkJcmV0dXJuIHRoaXM7CisJfQorCisJLyoqCisJICogVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldFBvcHVsYXRpb25Db3VudCgpIDxlbT5Qb3B1bGF0aW9uIENvdW50PC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLQorCSAqIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNnZXRQb3B1bGF0aW9uQ291bnQoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgZG91YmxlIFBPUFVMQVRJT05fQ09VTlRfRURFRkFVTFQgPSAwLjA7CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCXB1YmxpYyBJbnRlZ3JhdGlvbkxhYmVsVmFsdWUgYWRkKGRvdWJsZSBhZGRpdGlvbikgeworCQlFTGlzdDxFQXR0cmlidXRlPiBhdHRyaWJ1dGVzID0gZUNsYXNzKCkuZ2V0RUFsbEF0dHJpYnV0ZXMoKTsKKworCQlmb3IgKEVBdHRyaWJ1dGUgYXR0cmlidXRlIDogYXR0cmlidXRlcykgeworCQkJaWYgKGF0dHJpYnV0ZS5pc0NoYW5nZWFibGUoKQorCQkJCQkmJiAhYXR0cmlidXRlLmdldE5hbWUoKS5zdGFydHNXaXRoKCJpbmNpZGVuY2UiKSkgeworCQkJCWVTZXQoYXR0cmlidXRlLCAoRG91YmxlKSBlR2V0KGF0dHJpYnV0ZSkgKyBhZGRpdGlvbik7CisJCQl9CisJCX0KKworCQlyZXR1cm4gdGhpczsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCXB1YmxpYyBJbnRlZ3JhdGlvbkxhYmVsVmFsdWUgYWJzKCkgeworCQlFTGlzdDxFQXR0cmlidXRlPiBhdHRyaWJ1dGVzID0gZUNsYXNzKCkuZ2V0RUFsbEF0dHJpYnV0ZXMoKTsKKworCQlmb3IgKEVBdHRyaWJ1dGUgYXR0cmlidXRlIDogYXR0cmlidXRlcykgeworCQkJaWYgKGF0dHJpYnV0ZS5pc0NoYW5nZWFibGUoKQorCQkJCQkmJiAhYXR0cmlidXRlLmdldE5hbWUoKS5zdGFydHNXaXRoKCJpbmNpZGVuY2UiKSkgeworCQkJCWVTZXQoYXR0cmlidXRlLCBNYXRoLmFicygoRG91YmxlKSBlR2V0KGF0dHJpYnV0ZSkpKTsKKwkJCX0KKwkJfQorCisJCXJldHVybiB0aGlzOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJcHVibGljIGJvb2xlYW4gYXZvaWROZWdhdGl2ZShJbnRlZ3JhdGlvbkxhYmVsVmFsdWUgdmFsdWUpIHsKKwkJRUxpc3Q8RUF0dHJpYnV0ZT4gYXR0cmlidXRlcyA9IGVDbGFzcygpLmdldEVBbGxBdHRyaWJ1dGVzKCk7CisJCWJvb2xlYW4gYWRqdXN0ZWQgPSBmYWxzZTsKKworCQlmb3IgKEVBdHRyaWJ1dGUgYXR0cmlidXRlIDogYXR0cmlidXRlcykgeworCQkJaWYgKGF0dHJpYnV0ZS5pc0NoYW5nZWFibGUoKSkgeworCQkJCWRvdWJsZSBuZXdWYWx1ZSA9IChEb3VibGUpIGVHZXQoYXR0cmlidXRlKQorCQkJCQkJKyAoRG91YmxlKSB2YWx1ZS5lR2V0KGF0dHJpYnV0ZSk7CisKKwkJCQlpZiAobmV3VmFsdWUgPCAwLjApIHsKKwkJCQkJYWRqdXN0ZWQgPSB0cnVlOworCQkJCQllU2V0KGF0dHJpYnV0ZSwgLShEb3VibGUpIHZhbHVlLmVHZXQoYXR0cmlidXRlKSk7CisJCQkJfQorCQkJfQorCQl9CisKKwkJcmV0dXJuIGFkanVzdGVkOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJcHVibGljIGRvdWJsZSBjb21wdXRlRGVsdGFBZGp1c3RtZW50KEludGVncmF0aW9uTGFiZWxWYWx1ZSB2YWx1ZSkgeworCQlFTGlzdDxFQXR0cmlidXRlPiBhdHRyaWJ1dGVzID0gZUNsYXNzKCkuZ2V0RUFsbEF0dHJpYnV0ZXMoKTsKKwkJZG91YmxlIGZhY3RvciA9IDEuMDsKKworCQlmb3IgKEVBdHRyaWJ1dGUgYXR0cmlidXRlIDogYXR0cmlidXRlcykgeworCQkJaWYgKGF0dHJpYnV0ZS5pc0NoYW5nZWFibGUoKSkgeworCQkJCWRvdWJsZSBuZXdWYWx1ZSA9IChEb3VibGUpIGVHZXQoYXR0cmlidXRlKQorCQkJCQkJKyAoRG91YmxlKSB2YWx1ZS5lR2V0KGF0dHJpYnV0ZSk7CisKKwkJCQlpZiAobmV3VmFsdWUgPCBNSU5JTVVNX1ZBTFVFKSB7CisJCQkJCWZhY3RvciA9IE1hdGgubWluKGZhY3RvciwgLShEb3VibGUpIHZhbHVlLmVHZXQoYXR0cmlidXRlKQorCQkJCQkJCS8gKERvdWJsZSkgZUdldChhdHRyaWJ1dGUpKTsKKwkJCQl9CisJCQl9CisJCX0KKworCQlyZXR1cm4gZmFjdG9yOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJcHVibGljIEludGVncmF0aW9uTGFiZWxWYWx1ZSBkaXZpZGUoSW50ZWdyYXRpb25MYWJlbFZhbHVlIHZhbHVlKSB7CisJCUVMaXN0PEVBdHRyaWJ1dGU+IGF0dHJpYnV0ZXMgPSBlQ2xhc3MoKS5nZXRFQWxsQXR0cmlidXRlcygpOworCisJCWZvciAoRUF0dHJpYnV0ZSBhdHRyaWJ1dGUgOiBhdHRyaWJ1dGVzKSB7CisJCQlpZiAoYXR0cmlidXRlLmlzQ2hhbmdlYWJsZSgpCisJCQkJCSYmICFhdHRyaWJ1dGUuZ2V0TmFtZSgpLnN0YXJ0c1dpdGgoImluY2lkZW5jZSIpKSB7CisJCQkJZVNldChhdHRyaWJ1dGUsCisJCQkJCQlNYXRoLmFicygoRG91YmxlKSBlR2V0KGF0dHJpYnV0ZSkKKwkJCQkJCQkJLyAoRG91YmxlKSB2YWx1ZS5lR2V0KGF0dHJpYnV0ZSkpKTsKKwkJCX0KKwkJfQorCisJCXJldHVybiB0aGlzOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJcHVibGljIGRvdWJsZSBtYXgoKSB7CisJCUVMaXN0PEVBdHRyaWJ1dGU+IGF0dHJpYnV0ZXMgPSBlQ2xhc3MoKS5nZXRFQWxsQXR0cmlidXRlcygpOworCQlkb3VibGUgbWF4VmFsdWUgPSAwLjA7CisKKwkJZm9yIChFQXR0cmlidXRlIGF0dHJpYnV0ZSA6IGF0dHJpYnV0ZXMpIHsKKwkJCWlmIChhdHRyaWJ1dGUuaXNDaGFuZ2VhYmxlKCkKKwkJCQkJJiYgIWF0dHJpYnV0ZS5nZXROYW1lKCkuc3RhcnRzV2l0aCgiaW5jaWRlbmNlIikpIHsKKwkJCQltYXhWYWx1ZSA9IE1hdGgubWF4KG1heFZhbHVlLCAoRG91YmxlKSBlR2V0KGF0dHJpYnV0ZSkpOworCQkJfQorCQl9CisKKwkJcmV0dXJuIG1heFZhbHVlOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJcHVibGljIHZvaWQgcHJlcGFyZUN5Y2xlKCkgeworCQlFTGlzdDxFQXR0cmlidXRlPiBhdHRyaWJ1dGVzID0gZUNsYXNzKCkuZ2V0RUFsbEF0dHJpYnV0ZXMoKTsKKworCQlmb3IgKEVBdHRyaWJ1dGUgYXR0cmlidXRlIDogYXR0cmlidXRlcykgeworCQkJaWYgKGF0dHJpYnV0ZS5pc0NoYW5nZWFibGUoKQorCQkJCQkmJiBhdHRyaWJ1dGUuZ2V0TmFtZSgpLnN0YXJ0c1dpdGgoImluY2lkZW5jZSIpKSB7CisJCQkJZVNldChhdHRyaWJ1dGUsIDAuMCk7CisJCQl9CisJCX0KKwl9CisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5pbXBsLkxhYmVsVmFsdWVJbXBsI3Jlc2V0KCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCByZXNldCgpIHsKKwkJRUxpc3Q8RUF0dHJpYnV0ZT4gYXR0cmlidXRlcyA9IGVDbGFzcygpLmdldEVBbGxBdHRyaWJ1dGVzKCk7CisKKwkJZm9yIChFQXR0cmlidXRlIGF0dHJpYnV0ZSA6IGF0dHJpYnV0ZXMpIHsKKwkJCWlmIChhdHRyaWJ1dGUuaXNDaGFuZ2VhYmxlKCkpIHsKKwkJCQllU2V0KGF0dHJpYnV0ZSwgMC4wKTsKKwkJCX0KKwkJfQorCisJCWFycml2YWxzID0gbnVsbDsKKwkJZGVwYXJ0dXJlcyA9IG51bGw7CisJfSAvLyByZXNldAorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLlNhbml0eUNoZWNrZXIjc2FuZSgpCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIGJvb2xlYW4gc2FuZSgpIHsKKwkJRUxpc3Q8RUF0dHJpYnV0ZT4gYXR0cmlidXRlcyA9IGVDbGFzcygpLmdldEVBbGxBdHRyaWJ1dGVzKCk7CisJCWJvb2xlYW4gcmV0VmFsdWUgPSB0cnVlOworCisJCWZvciAoRUF0dHJpYnV0ZSBhdHRyaWJ1dGUgOiBhdHRyaWJ1dGVzKSB7CisJCQlpZiAoYXR0cmlidXRlLmlzQ2hhbmdlYWJsZSgpKSB7CisJCQkJcmV0VmFsdWUgPSAoRG91YmxlKSBlR2V0KGF0dHJpYnV0ZSkgPj0gMC4wOworCQkJCWFzc2VydCByZXRWYWx1ZTsKKwkJCQlyZXRWYWx1ZSA9IChEb3VibGUpIGVHZXQoYXR0cmlidXRlKSA8PSBNQVhfUE9QVUxBVElPTl9WQUxVRTsKKwkJCQlhc3NlcnQgcmV0VmFsdWU7CisJCQl9CisJCX0KKworCQlyZXR1cm4gcmV0VmFsdWU7CisJfSAvLyBzYW5lCisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBwYXJhbSBmZWF0dXJlSUQKKwkgKiBAcGFyYW0gcmVzb2x2ZQorCSAqIEBwYXJhbSBjb3JlVHlwZQorCSAqIEByZXR1cm4KKwkgKiAKKwkgKiAgICAgICAgIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgT2JqZWN0IGVHZXQoaW50IGZlYXR1cmVJRCwgYm9vbGVhbiByZXNvbHZlLCBib29sZWFuIGNvcmVUeXBlKSB7CisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7CisJCQljYXNlIFN0YW5kYXJkUGFja2FnZS5ESVNFQVNFX01PREVMX0xBQkVMX1ZBTFVFX19QT1BVTEFUSU9OX0NPVU5UOgorCQkJCXJldHVybiBnZXRQb3B1bGF0aW9uQ291bnQoKTsKKwkJfQorCQlyZXR1cm4gc3VwZXIuZUdldChmZWF0dXJlSUQsIHJlc29sdmUsIGNvcmVUeXBlKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBwYXJhbSBmZWF0dXJlSUQKKwkgKiBAcmV0dXJuCisJICogCisJICogICAgICAgICA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIGJvb2xlYW4gZUlzU2V0KGludCBmZWF0dXJlSUQpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJCWNhc2UgU3RhbmRhcmRQYWNrYWdlLkRJU0VBU0VfTU9ERUxfTEFCRUxfVkFMVUVfX1BPUFVMQVRJT05fQ09VTlQ6CisJCQkJcmV0dXJuIGdldFBvcHVsYXRpb25Db3VudCgpICE9IFBPUFVMQVRJT05fQ09VTlRfRURFRkFVTFQ7CisJCX0KKwkJcmV0dXJuIHN1cGVyLmVJc1NldChmZWF0dXJlSUQpOworCX0KKworCUBPdmVycmlkZQorCXB1YmxpYyBib29sZWFuIHNhbWVWYWx1ZShMYWJlbFZhbHVlIG90aGVyTGFiZWxWYWx1ZSkgeworCQlFTGlzdDxFQXR0cmlidXRlPiBhdHRyaWJ1dGVzID0gZUNsYXNzKCkuZ2V0RUFsbEF0dHJpYnV0ZXMoKTsKKworCQlmb3IgKEVBdHRyaWJ1dGUgYXR0cmlidXRlIDogYXR0cmlidXRlcykgeworCQkJaWYgKGF0dHJpYnV0ZS5pc0NoYW5nZWFibGUoKQorCQkJCQkmJiAhYXR0cmlidXRlLmdldE5hbWUoKS5zdGFydHNXaXRoKCJpbmNpZGVuY2UiKQorCQkJCQkmJiAhYXR0cmlidXRlLmdldE5hbWUoKS5zdGFydHNXaXRoKCJkaXNlYXNlRGVhdGhzIikpIHsKKwkJCQlpZiAoKChEb3VibGUpIGVHZXQoYXR0cmlidXRlKSkKKwkJCQkJCS5jb21wYXJlVG8oKERvdWJsZSkgb3RoZXJMYWJlbFZhbHVlLmVHZXQoYXR0cmlidXRlKSkgIT0gMCkgeworCQkJCQlyZXR1cm4gZmFsc2U7CisJCQkJfQorCQkJfQorCQl9CisKKwkJcmV0dXJuIHRydWU7CisJfQorfSAvLyBEaXNlYXNlTW9kZWxMYWJlbFZhbHVlSW1wbApkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9zdGFuZGFyZC9pbXBsL0luZmVjdG9ySW1wbC5qYXZhIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9zdGFuZGFyZC9pbXBsL0luZmVjdG9ySW1wbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU5MjUwYjAKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3N0YW5kYXJkL2ltcGwvSW5mZWN0b3JJbXBsLmphdmEKQEAgLTAsMCArMSw3NDcgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLmltcGw7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247CitpbXBvcnQgamF2YS51dGlsLkhhc2hTZXQ7CitpbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOworaW1wb3J0IGphdmEudXRpbC5TZXQ7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLkVMaXN0OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5FTWFwOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5VUkk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzczsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuSW50ZXJuYWxFT2JqZWN0OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5pbXBsLkVOb3RpZmljYXRpb25JbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS51dGlsLkVPYmplY3RSZXNvbHZpbmdFTGlzdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuVXRpbGl0eTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguRWRnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguR3JhcGg7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkxhYmVsVmFsdWU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLk5vZGU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLk5vZGVMYWJlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuRGVjb3JhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5Ob2RlRGVjb3JhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5TVEVNVGltZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuaW1wbC5Ob2RlRGVjb3JhdG9ySW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5SZWxhdGl2ZVBoeXNpY2FsUmVsYXRpb25zaGlwTGFiZWxWYWx1ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLm5vZGVzLmltcGwuUmVnaW9uSW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuQWN0aXZhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5EaXNlYXNlTW9kZWxMYWJlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuSW5mZWN0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLkluZmVjdG9ySW5vY3VsYXRvckNvbGxlY3Rpb247CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkRGlzZWFzZU1vZGVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZFBhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5Mb2NhdGlvblV0aWxpdHk7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPkluZmVjdG9yPC9iPjwvZW0+Jy4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogPHA+CisgKiBUaGUgZm9sbG93aW5nIGZlYXR1cmVzIGFyZSBpbXBsZW1lbnRlZDoKKyAqIDx1bD4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuaW1wbC5JbmZlY3RvckltcGwjZ2V0RGlzZWFzZU1vZGVsIDxlbT5EaXNlYXNlIE1vZGVsPC9lbT59PC9saT4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuaW1wbC5JbmZlY3RvckltcGwjZ2V0VGFyZ2V0VVJJIDxlbT5UYXJnZXQgVVJJPC9lbT59PC9saT4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuaW1wbC5JbmZlY3RvckltcGwjZ2V0RGlzZWFzZU5hbWUgPGVtPkRpc2Vhc2UgTmFtZTwvZW0+fTwvbGk+CisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLmltcGwuSW5mZWN0b3JJbXBsI2dldFRhcmdldElTT0tleSA8ZW0+VGFyZ2V0IElTTyBLZXk8L2VtPn08L2xpPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5pbXBsLkluZmVjdG9ySW1wbCNnZXRMYWJlbHNUb0luZmVjdCA8ZW0+TGFiZWxzIFRvIEluZmVjdDwvZW0+fTwvbGk+CisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLmltcGwuSW5mZWN0b3JJbXBsI2dldFBvcHVsYXRpb25JZGVudGlmaWVyIDxlbT5Qb3B1bGF0aW9uIElkZW50aWZpZXI8L2VtPn08L2xpPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5pbXBsLkluZmVjdG9ySW1wbCNpc0luZmVjdFBlcmNlbnRhZ2UgPGVtPkluZmVjdCBQZXJjZW50YWdlPC9lbT59PC9saT4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuaW1wbC5JbmZlY3RvckltcGwjZ2V0VGFyZ2V0RmVhdHVyZSA8ZW0+VGFyZ2V0IEZlYXR1cmU8L2VtPn08L2xpPgorICogPC91bD4KKyAqIDwvcD4KKyAqCisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBhYnN0cmFjdCBjbGFzcyBJbmZlY3RvckltcGwgZXh0ZW5kcyBOb2RlRGVjb3JhdG9ySW1wbCBpbXBsZW1lbnRzCisJCUluZmVjdG9yIHsKKwkvKioKKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXREaXNlYXNlTW9kZWwoKSA8ZW0+RGlzZWFzZSBNb2RlbDwvZW0+fScgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI2dldERpc2Vhc2VNb2RlbCgpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIFN0YW5kYXJkRGlzZWFzZU1vZGVsIGRpc2Vhc2VNb2RlbDsKKworCS8qKgorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRUYXJnZXRVUkkoKSA8ZW0+VGFyZ2V0IFVSSTwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI2dldFRhcmdldFVSSSgpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBVUkkgVEFSR0VUX1VSSV9FREVGQVVMVCA9IG51bGw7CisKKwkvKioKKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRUYXJnZXRVUkkoKSA8ZW0+VGFyZ2V0IFVSSTwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI2dldFRhcmdldFVSSSgpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIFVSSSB0YXJnZXRVUkkgPSBUQVJHRVRfVVJJX0VERUZBVUxUOworCisJLyoqCisJICogVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldERpc2Vhc2VOYW1lKCkgPGVtPkRpc2Vhc2UgTmFtZTwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI2dldERpc2Vhc2VOYW1lKCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIFN0cmluZyBESVNFQVNFX05BTUVfRURFRkFVTFQgPSBudWxsOworCisJLyoqCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0RGlzZWFzZU5hbWUoKSA8ZW0+RGlzZWFzZSBOYW1lPC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZ2V0RGlzZWFzZU5hbWUoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBTdHJpbmcgZGlzZWFzZU5hbWUgPSBESVNFQVNFX05BTUVfRURFRkFVTFQ7CisKKwkvKioKKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0VGFyZ2V0SVNPS2V5KCkgPGVtPlRhcmdldCBJU08gS2V5PC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZ2V0VGFyZ2V0SVNPS2V5KCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIFN0cmluZyBUQVJHRVRfSVNPX0tFWV9FREVGQVVMVCA9IG51bGw7CisKKwkvKioKKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRUYXJnZXRJU09LZXkoKSA8ZW0+VGFyZ2V0IElTTyBLZXk8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNnZXRUYXJnZXRJU09LZXkoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBTdHJpbmcgdGFyZ2V0SVNPS2V5ID0gVEFSR0VUX0lTT19LRVlfRURFRkFVTFQ7CisKKwkvKioKKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRMYWJlbHNUb0luZmVjdCgpIDxlbT5MYWJlbHMgVG8gSW5mZWN0PC9lbT59JyByZWZlcmVuY2UgbGlzdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI2dldExhYmVsc1RvSW5mZWN0KCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgRUxpc3Q8RGlzZWFzZU1vZGVsTGFiZWw+IGxhYmVsc1RvSW5mZWN0OworCisJLyoqCisJICogVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldFBvcHVsYXRpb25JZGVudGlmaWVyKCkgPGVtPlBvcHVsYXRpb24gSWRlbnRpZmllcjwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZ2V0UG9wdWxhdGlvbklkZW50aWZpZXIoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgU3RyaW5nIFBPUFVMQVRJT05fSURFTlRJRklFUl9FREVGQVVMVCA9IG51bGw7CisKKwkvKioKKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRQb3B1bGF0aW9uSWRlbnRpZmllcigpIDxlbT5Qb3B1bGF0aW9uIElkZW50aWZpZXI8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI2dldFBvcHVsYXRpb25JZGVudGlmaWVyKCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgU3RyaW5nIHBvcHVsYXRpb25JZGVudGlmaWVyID0gUE9QVUxBVElPTl9JREVOVElGSUVSX0VERUZBVUxUOworCisJLyoqCisJICogVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2lzSW5mZWN0UGVyY2VudGFnZSgpIDxlbT5JbmZlY3QgUGVyY2VudGFnZTwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjaXNJbmZlY3RQZXJjZW50YWdlKCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIGJvb2xlYW4gSU5GRUNUX1BFUkNFTlRBR0VfRURFRkFVTFQgPSBmYWxzZTsKKworCS8qKgorCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2lzSW5mZWN0UGVyY2VudGFnZSgpIDxlbT5JbmZlY3QgUGVyY2VudGFnZTwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjaXNJbmZlY3RQZXJjZW50YWdlKCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgYm9vbGVhbiBpbmZlY3RQZXJjZW50YWdlID0gSU5GRUNUX1BFUkNFTlRBR0VfRURFRkFVTFQ7CisKKwkvKioKKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0VGFyZ2V0RmVhdHVyZSgpIDxlbT5UYXJnZXQgRmVhdHVyZTwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZ2V0VGFyZ2V0RmVhdHVyZSgpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBTdHJpbmcgVEFSR0VUX0ZFQVRVUkVfRURFRkFVTFQgPSAiaSI7IC8vJE5PTi1OTFMtMSQKKworCS8qKgorCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldFRhcmdldEZlYXR1cmUoKSA8ZW0+VGFyZ2V0IEZlYXR1cmU8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI2dldFRhcmdldEZlYXR1cmUoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBTdHJpbmcgdGFyZ2V0RmVhdHVyZSA9IFRBUkdFVF9GRUFUVVJFX0VERUZBVUxUOworCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBJbmZlY3RvckltcGwoKSB7CisJCXN1cGVyKCk7CisJfQorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuaW1wbC5EZWNvcmF0b3JJbXBsI2RlY29yYXRlR3JhcGgob3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkdyYXBoKQorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBib29sZWFuIGRlY29yYXRlR3JhcGgoU1RFTVRpbWUgdGltZSkgeworCQlpZih0aGlzLmlzR3JhcGhEZWNvcmF0ZWQoKSkgcmV0dXJuIHRydWU7CisJCUdyYXBoIGdyYXBoID0gZ2V0R3JhcGgoKTsKKwkJaWYoZ3JhcGggPT0gbnVsbCAmJiB0aGlzLmVDb250YWluZXIoKSBpbnN0YW5jZW9mIEluZmVjdG9ySW5vY3VsYXRvckNvbGxlY3Rpb24pIC8vIE1pZ2h0IGJlIHBhcnQgb2YgYSBjb2xsZWN0aW9uCisJCQlncmFwaCA9ICgoTm9kZURlY29yYXRvcillQ29udGFpbmVyKCkpLmdldEdyYXBoKCk7CisJCQorCQkvLyBEbyB3ZSBuZWVkIHRvIGxvb2sgdXAgdGhlIGRpc2Vhc2UgbW9kZWwgZnJvbSBpdHMgbmFtZT8KKwkJaWYgKGdldERpc2Vhc2VNb2RlbCgpID09IG51bGwpIHsKKwkJCS8vIFllcworCQkJLy8gVGhlcmUncyBhIGRpc2Vhc2UgbW9kZWwgb3V0IHRoZXJlIHdpdGggb3VyIG5hbWUgb24gaXQKKwkJCS8vIChtYXliZSkuLi5sZXQncyBmaW5kIGl0CisJCQlmb3IgKEl0ZXJhdG9yPERlY29yYXRvcj4gZGVjb3JhdG9ySXRlciA9IGdyYXBoLmdldERlY29yYXRvcnMoKS5pdGVyYXRvcigpOyBkZWNvcmF0b3JJdGVyCisJCQkJCS5oYXNOZXh0KCk7KSB7CisJCQkJZmluYWwgRGVjb3JhdG9yIGRlY29yYXRvciA9IGRlY29yYXRvckl0ZXIubmV4dCgpOworCQkJCS8vIERpc2Vhc2UgTW9kZWw/CisJCQkJaWYgKGRlY29yYXRvciBpbnN0YW5jZW9mIFN0YW5kYXJkRGlzZWFzZU1vZGVsKSB7CisJCQkJCWZpbmFsIFN0YW5kYXJkRGlzZWFzZU1vZGVsIGRpc2Vhc2VNb2RlbCA9IChTdGFuZGFyZERpc2Vhc2VNb2RlbCkgZGVjb3JhdG9yOworCQkJCQkvLyBJcyB0aGlzIHRoZSBvbmUgd2UncmUgbG9va2luZyBmb3I/CisJCQkJCWlmIChkaXNlYXNlTW9kZWwuZ2V0RGlzZWFzZU5hbWUoKS5lcXVhbHNJZ25vcmVDYXNlKAorCQkJCQkJCWdldERpc2Vhc2VOYW1lKCkpKSB7CisJCQkJCQkvLyBZZXMKKwkJCQkJCXNldERpc2Vhc2VNb2RlbChkaXNlYXNlTW9kZWwpOworCQkJCQkJYnJlYWs7CisJCQkJCX0KKwkJCQl9CisJCQl9IC8vIGZvciBlYWNoIGRlY29yYXRvcgorCQl9IC8vIGlmIGxvb2sgdXAgZGlzZWFzZSBtb2RlbAorCisJCS8vIERpZCB3ZSBmaW5kIHRoZSBkaXNlYXNlIG1vZGVsIHdlJ3JlIHN1cHBvc2UgdG8gd29yayBmb3I/CisJCWlmIChnZXREaXNlYXNlTW9kZWwoKSAhPSBudWxsKSB7CisJCQkvLyBZZXMKKwkJCS8vIE5vdyB0cnkgdG8gZmluZCB0aGUgbm9kZSB0byBiZSBpbmZlY3RlZAorCQkJZmluYWwgTm9kZSBwYXJlbnQgPSBncmFwaC5nZXROb2RlKGdldFRhcmdldFVSSSgpKTsKKwkJCQorCQkJU2V0PE5vZGU+IGFsbE5vZGVzID0gbnVsbDsKKwkJCQorCQkJaWYodGhpcy5pc0luZmVjdFBlcmNlbnRhZ2UoKSkgeworCQkJCWFsbE5vZGVzID0gTG9jYXRpb25VdGlsaXR5LmdldEFsbENoaWxkcmVuKHBhcmVudCk7CQorCQkJCWFsbE5vZGVzLmFkZChwYXJlbnQpOworCQkJfSBlbHNlIHsKKwkJCQlhbGxOb2RlcyA9IG5ldyBIYXNoU2V0PE5vZGU+KCk7CisJCQkJYWxsTm9kZXMuYWRkKHBhcmVudCk7CisJCQl9CQkJCisKKwkJCUl0ZXJhdG9yPE5vZGU+IGl0ZXIgPSBhbGxOb2Rlcy5pdGVyYXRvcigpOworCQkJd2hpbGUoaXRlciE9bnVsbCAmJiBpdGVyLmhhc05leHQoKSkgeworCQkJCQlOb2RlIG5vZGUgPSBpdGVyLm5leHQoKTsKKwkJCQorCQkJCQkvLyBEaWQgd2UgZmluZCB0aGUgTm9kZT8KKwkJCQkJaWYgKG5vZGUgIT0gbnVsbCkgeworCQkJCQkJLy8gWWVzCisJCQkJCQlmb3IgKGZpbmFsIEl0ZXJhdG9yPE5vZGVMYWJlbD4gbGFiZWxJdGVyID0gbm9kZS5nZXRMYWJlbHMoKS5pdGVyYXRvcigpOyBsYWJlbEl0ZXIKKwkJCQkJCQkJLmhhc05leHQoKTspIHsKKwkJCQkJCQlmaW5hbCBOb2RlTGFiZWwgbm9kZUxhYmVsID0gbGFiZWxJdGVyLm5leHQoKTsKKwkJCQkJCQkvLyBJcyB0aGlzIGEgZGlzZWFzZSBsYWJlbD8KKwkJCQkJCQlpZiAobm9kZUxhYmVsIGluc3RhbmNlb2YgRGlzZWFzZU1vZGVsTGFiZWwpIHsKKwkJCQkJCQkJZmluYWwgRGlzZWFzZU1vZGVsTGFiZWwgZGlzZWFzZU1vZGVsTGFiZWwgPSAoRGlzZWFzZU1vZGVsTGFiZWwpIG5vZGVMYWJlbDsKKwkJCQkJCQkJLy8gWWVzCisJCQkJCQkJCS8vIElzIGl0IHVwZGF0ZWQgYnkgdGhpcyBkaXNlYXNlIG1vZGVsPworCQkJCQkJCQlpZiAoZGlzZWFzZU1vZGVsTGFiZWwuZ2V0RGVjb3JhdG9yKCkgPT0gZ2V0RGlzZWFzZU1vZGVsKCkgJiYgZGlzZWFzZU1vZGVsTGFiZWwuZ2V0UG9wdWxhdGlvbk1vZGVsTGFiZWwoKS5nZXRQb3B1bGF0aW9uSWRlbnRpZmllcigpLmVxdWFscyh0aGlzLmdldFBvcHVsYXRpb25JZGVudGlmaWVyKCkpKSB7CisJCQkJCQkJCQkvLyBZZXMKKwkJCQkJCQkJCWRvSW5pdGlhbGl6YXRpb24oZGlzZWFzZU1vZGVsTGFiZWwpOworCQkJCQkJCQkJZ2V0TGFiZWxzVG9JbmZlY3QoKS5hZGQoZGlzZWFzZU1vZGVsTGFiZWwpOworCQkJCQkJCQkJYnJlYWs7CisJCQkJCQkJCX0gLy8gaWYKKwkJCQkJCQl9CisJCQkJCQl9IC8vIGZvcgorCQkJCQl9IC8vIGlmIG5vZGUgdG8gaW5mZWN0IHdhcyBmb3VuZAorCQkJCWVsc2UgeworCQkJCQkvLyBObworCQkJCQkvLyBUaGUgdGFyZ2V0IFVSSSB3YXMgcHJvYmFibHkgYmFkCisJCQkJCUFjdGl2YXRvci5sb2dFcnJvcigiVGhlIG5vZGUgdG8gaW5mZWN0IHNwZWNpZmllZCBieSB0aGUgVVJJIFwiIgorCQkJCQkJCSsgZ2V0VGFyZ2V0VVJJKCkKKwkJCQkJCQkrICJcIiB3YXMgbm90IGZvdW5kLiAgVGhlIFVSSSBpcyBsaWtlbHkgaW5jb3JyZWN0LiIsCisJCQkJCQkJbnVsbCk7CisJCQkJfSAvLyBlbHNlIG5vZGUgbm90IGZvdW5kCisJCQl9IC8vIGZvciBlYWNoIG5vZGUKKwkJfSAvLyBpZiBkaXNlYXNlIG1vZGVsIGZvdW5kCisJCWVsc2UgeworCQkJLy8gTm8KKwkJCS8vIFRoZSBkaXNlYXNlIG5hbWUgd2FzIHByb2JhYmx5IHdyb25nCisJCQlBY3RpdmF0b3IubG9nRXJyb3IoIlRoZSBkaXNlYXNlIG5hbWVkIFwiIiArIGdldERpc2Vhc2VOYW1lKCkKKwkJCQkJKyAiXCIgd2FzIG5vdCBmb3VuZC4iLCBudWxsKTsKKwkJfSAvLyBlbHNlIG5vZGUgbm90IGZvdW5kCisKKwkJdGhpcy5zZXRQcm9ncmVzcygxLjApOyAvLyB3ZSdyZSBkb25lCisJCXJldHVybiB0cnVlOworCX0gLy8gZGVjb3JhdGVHcmFwaAorCisJLyoqCisJICogdGhpcyBtZXRob2QgY29uZmlybXMgdGhhdCBzcGVjaWZpYyBVUklzIGRlZmluZWQgaW4gYW4gaW5mZWN0b3IgYXJlIGFjdHVhbGx5IAorCSAqIHZhbGlkIFVSSXMgd2l0aGluIHRoZSBncmFwaC4gSXNzdWUgYSB3YXJuaW5nIG9uIHN0YXJ0dXAgaWYgdGhleSBhcmUgbm90LgorCSAqLworCXByb3RlY3RlZCB2b2lkIGNoZWNrSW5mZWN0b3JVUklzKCkgeworCQkKKwkJVVJJIHRhcmdldCA9IGdldFRhcmdldFVSSSgpOworCQkKKwkJaWYodGFyZ2V0IT1udWxsKSB7CisJCQlHcmFwaCBnID0gdGhpcy5nZXRHcmFwaCgpOworCQkJRU1hcDxVUkksTm9kZT4gbm9kZU1hcCA9IGcuZ2V0Tm9kZXMoKTsKKwkJCWlmKCFub2RlTWFwLmtleVNldCgpLmNvbnRhaW5zKHRhcmdldCkpIHsKKwkJCQlVdGlsaXR5LmRpc3BsYXlTY2VuYXJpb0NvbXBvc2l0aW9uV2FybmluZyhVdGlsaXR5LlVSSV9XQVJOSU5HKTsKKwkJCX0KKwkJfQorCX0vLyB2YWxpZGF0ZSBpbmZlY3RvcnMKKwkKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5pbXBsLkRlY29yYXRvckltcGwjcmVzZXRMYWJlbHMob3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkdyYXBoKQorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIHJlc2V0TGFiZWxzKCkgeworCQlmb3IgKGZpbmFsIEl0ZXJhdG9yPERpc2Vhc2VNb2RlbExhYmVsPiBub2RlSXRlciA9IGdldExhYmVsc1RvSW5mZWN0KCkuaXRlcmF0b3IoKTsgbm9kZUl0ZXIKKwkJCQkuaGFzTmV4dCgpOykgeworCQkJZmluYWwgRGlzZWFzZU1vZGVsTGFiZWwgZGlzZWFzZU1vZGVsTGFiZWwgPSBub2RlSXRlci5uZXh0KCk7CisJCQlkb0luaXRpYWxpemF0aW9uKGRpc2Vhc2VNb2RlbExhYmVsKTsKKwkJfSAvLyBmb3IKKwl9IC8vIHJlc2V0TGFiZWxzCisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5pbXBsLkRlY29yYXRvckltcGwjdXBkYXRlTGFiZWxzKG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5HcmFwaCwKKwkgKiAgICAgIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5TVEVNVGltZSwgbG9uZykKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCB1cGRhdGVMYWJlbHMoU1RFTVRpbWUgdGltZSwgbG9uZyB0aW1lclBlcmlvZCwgaW50IGN5Y2xlKSB7CisJCS8vIERvIG5vdGhpbmcKKwl9IC8vIHVwZGF0ZUxhYmVscworCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCBFQ2xhc3MgZVN0YXRpY0NsYXNzKCkgeworCQlyZXR1cm4gU3RhbmRhcmRQYWNrYWdlLkxpdGVyYWxzLklORkVDVE9SOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogCisJICogQHJldHVybgorCSAqIAorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgU3RhbmRhcmREaXNlYXNlTW9kZWwgZ2V0RGlzZWFzZU1vZGVsKCkgeworCQlpZiAoZGlzZWFzZU1vZGVsICE9IG51bGwgJiYgZGlzZWFzZU1vZGVsLmVJc1Byb3h5KCkpIHsKKwkJCUludGVybmFsRU9iamVjdCBvbGREaXNlYXNlTW9kZWwgPSAoSW50ZXJuYWxFT2JqZWN0KWRpc2Vhc2VNb2RlbDsKKwkJCWRpc2Vhc2VNb2RlbCA9IChTdGFuZGFyZERpc2Vhc2VNb2RlbCllUmVzb2x2ZVByb3h5KG9sZERpc2Vhc2VNb2RlbCk7CisJCQlpZiAoZGlzZWFzZU1vZGVsICE9IG9sZERpc2Vhc2VNb2RlbCkgeworCQkJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkKKwkJCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlJFU09MVkUsIFN0YW5kYXJkUGFja2FnZS5JTkZFQ1RPUl9fRElTRUFTRV9NT0RFTCwgb2xkRGlzZWFzZU1vZGVsLCBkaXNlYXNlTW9kZWwpKTsKKwkJCX0KKwkJfQorCQlyZXR1cm4gZGlzZWFzZU1vZGVsOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogCisJICogQHJldHVybgorCSAqIAorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgU3RhbmRhcmREaXNlYXNlTW9kZWwgYmFzaWNHZXREaXNlYXNlTW9kZWwoKSB7CisJCXJldHVybiBkaXNlYXNlTW9kZWw7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAcGFyYW0gbmV3RGlzZWFzZU1vZGVsCisJICogCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXREaXNlYXNlTW9kZWwoU3RhbmRhcmREaXNlYXNlTW9kZWwgbmV3RGlzZWFzZU1vZGVsKSB7CisJCVN0YW5kYXJkRGlzZWFzZU1vZGVsIG9sZERpc2Vhc2VNb2RlbCA9IGdldERpc2Vhc2VNb2RlbCgpOworCQlkaXNlYXNlTW9kZWwgPSBuZXdEaXNlYXNlTW9kZWw7CisJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkKKwkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsCisJCQkJCVN0YW5kYXJkUGFja2FnZS5JTkZFQ1RPUl9fRElTRUFTRV9NT0RFTCwgb2xkRGlzZWFzZU1vZGVsLAorCQkJCQlnZXREaXNlYXNlTW9kZWwoKSkpOworCQkKKwkJc2V0RGlzZWFzZU5hbWUoZ2V0RGlzZWFzZU1vZGVsKCkgIT0gbnVsbD8gZ2V0RGlzZWFzZU1vZGVsKCkuZ2V0RGlzZWFzZU5hbWUoKTpudWxsKTsKKwl9IC8vIHNldERpc2Vhc2VNb2RlbAorCisJCisJCisJCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAcmV0dXJuCisJICogCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlwdWJsaWMgVVJJIGdldFRhcmdldFVSSSgpIHsKKwkJLy8gSXMgaXQgc2V0PworCQlpZiAodGFyZ2V0VVJJID09IG51bGwpIHsKKwkJCS8vIE5vCisJCQl0YXJnZXRVUkkgPSBSZWdpb25JbXBsLmNyZWF0ZVJlZ2lvbk5vZGVVUkkoZ2V0VGFyZ2V0SVNPS2V5KCkpOworCQl9CisJCXJldHVybiB0YXJnZXRVUkk7CisJfSAvLyBnZXRUYXJnZXRVUkkKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogCisJICogQHBhcmFtIG5ld1RhcmdldFVSSQorCSAqIAorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRUYXJnZXRVUkkoVVJJIG5ld1RhcmdldFVSSSkgeworCQlVUkkgb2xkVGFyZ2V0VVJJID0gdGFyZ2V0VVJJOworCQl0YXJnZXRVUkkgPSBuZXdUYXJnZXRVUkk7CisJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkKKwkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIFN0YW5kYXJkUGFja2FnZS5JTkZFQ1RPUl9fVEFSR0VUX1VSSSwgb2xkVGFyZ2V0VVJJLCB0YXJnZXRVUkkpKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFN0cmluZyBnZXREaXNlYXNlTmFtZSgpIHsKKwkJcmV0dXJuIGRpc2Vhc2VOYW1lOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXREaXNlYXNlTmFtZShTdHJpbmcgbmV3RGlzZWFzZU5hbWUpIHsKKwkJU3RyaW5nIG9sZERpc2Vhc2VOYW1lID0gZGlzZWFzZU5hbWU7CisJCWRpc2Vhc2VOYW1lID0gbmV3RGlzZWFzZU5hbWU7CisJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkKKwkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIFN0YW5kYXJkUGFja2FnZS5JTkZFQ1RPUl9fRElTRUFTRV9OQU1FLCBvbGREaXNlYXNlTmFtZSwgZGlzZWFzZU5hbWUpKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFN0cmluZyBnZXRUYXJnZXRJU09LZXkoKSB7CisJCXJldHVybiB0YXJnZXRJU09LZXk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZ2V0VGFyZ2V0VVJJKCkKKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCXB1YmxpYyB2b2lkIHNldFRhcmdldElTT0tleShTdHJpbmcgbmV3VGFyZ2V0SVNPS2V5KSB7CisJCVN0cmluZyBvbGRUYXJnZXRJU09LZXkgPSB0YXJnZXRJU09LZXk7CisJCXRhcmdldElTT0tleSA9IG5ld1RhcmdldElTT0tleTsKKwkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQorCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgU3RhbmRhcmRQYWNrYWdlLklORkVDVE9SX19UQVJHRVRfSVNPX0tFWSwgb2xkVGFyZ2V0SVNPS2V5LCB0YXJnZXRJU09LZXkpKTsKKwkJLy8gVGhpcyB3aWxsIGNhdXNlIHRoZSBVUkkgdG8gYmUgcmVjcmVhdGVkIHdpdGggdGhlIG5ldyBJU08ga2V5CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVMaXN0PERpc2Vhc2VNb2RlbExhYmVsPiBnZXRMYWJlbHNUb0luZmVjdCgpIHsKKwkJaWYgKGxhYmVsc1RvSW5mZWN0ID09IG51bGwpIHsKKwkJCWxhYmVsc1RvSW5mZWN0ID0gbmV3IEVPYmplY3RSZXNvbHZpbmdFTGlzdDxEaXNlYXNlTW9kZWxMYWJlbD4oRGlzZWFzZU1vZGVsTGFiZWwuY2xhc3MsIHRoaXMsIFN0YW5kYXJkUGFja2FnZS5JTkZFQ1RPUl9fTEFCRUxTX1RPX0lORkVDVCk7CisJCX0KKwkJcmV0dXJuIGxhYmVsc1RvSW5mZWN0OworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBTdHJpbmcgZ2V0UG9wdWxhdGlvbklkZW50aWZpZXIoKSB7CisJCXJldHVybiBwb3B1bGF0aW9uSWRlbnRpZmllcjsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRQb3B1bGF0aW9uSWRlbnRpZmllcihTdHJpbmcgbmV3UG9wdWxhdGlvbklkZW50aWZpZXIpIHsKKwkJU3RyaW5nIG9sZFBvcHVsYXRpb25JZGVudGlmaWVyID0gcG9wdWxhdGlvbklkZW50aWZpZXI7CisJCXBvcHVsYXRpb25JZGVudGlmaWVyID0gbmV3UG9wdWxhdGlvbklkZW50aWZpZXI7CisJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkKKwkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIFN0YW5kYXJkUGFja2FnZS5JTkZFQ1RPUl9fUE9QVUxBVElPTl9JREVOVElGSUVSLCBvbGRQb3B1bGF0aW9uSWRlbnRpZmllciwgcG9wdWxhdGlvbklkZW50aWZpZXIpKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgYm9vbGVhbiBpc0luZmVjdFBlcmNlbnRhZ2UoKSB7CisJCXJldHVybiBpbmZlY3RQZXJjZW50YWdlOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIHNldEluZmVjdFBlcmNlbnRhZ2UoYm9vbGVhbiBuZXdJbmZlY3RQZXJjZW50YWdlKSB7CisJCWJvb2xlYW4gb2xkSW5mZWN0UGVyY2VudGFnZSA9IGluZmVjdFBlcmNlbnRhZ2U7CisJCWluZmVjdFBlcmNlbnRhZ2UgPSBuZXdJbmZlY3RQZXJjZW50YWdlOworCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpCisJCQllTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBTdGFuZGFyZFBhY2thZ2UuSU5GRUNUT1JfX0lORkVDVF9QRVJDRU5UQUdFLCBvbGRJbmZlY3RQZXJjZW50YWdlLCBpbmZlY3RQZXJjZW50YWdlKSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFN0cmluZyBnZXRUYXJnZXRGZWF0dXJlKCkgeworCQlyZXR1cm4gdGFyZ2V0RmVhdHVyZTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRUYXJnZXRGZWF0dXJlKFN0cmluZyBuZXdUYXJnZXRGZWF0dXJlKSB7CisJCVN0cmluZyBvbGRUYXJnZXRGZWF0dXJlID0gdGFyZ2V0RmVhdHVyZTsKKwkJdGFyZ2V0RmVhdHVyZSA9IG5ld1RhcmdldEZlYXR1cmU7CisJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkKKwkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIFN0YW5kYXJkUGFja2FnZS5JTkZFQ1RPUl9fVEFSR0VUX0ZFQVRVUkUsIG9sZFRhcmdldEZlYXR1cmUsIHRhcmdldEZlYXR1cmUpKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBwYXJhbSBmZWF0dXJlSUQKKwkgKiBAcGFyYW0gcmVzb2x2ZQorCSAqIEBwYXJhbSBjb3JlVHlwZQorCSAqIAorCSAqIEByZXR1cm4KKwkgKiAKKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIE9iamVjdCBlR2V0KGludCBmZWF0dXJlSUQsIGJvb2xlYW4gcmVzb2x2ZSwgYm9vbGVhbiBjb3JlVHlwZSkgeworCQlzd2l0Y2ggKGZlYXR1cmVJRCkgeworCQkJY2FzZSBTdGFuZGFyZFBhY2thZ2UuSU5GRUNUT1JfX0RJU0VBU0VfTU9ERUw6CisJCQkJaWYgKHJlc29sdmUpIHJldHVybiBnZXREaXNlYXNlTW9kZWwoKTsKKwkJCQlyZXR1cm4gYmFzaWNHZXREaXNlYXNlTW9kZWwoKTsKKwkJCWNhc2UgU3RhbmRhcmRQYWNrYWdlLklORkVDVE9SX19UQVJHRVRfVVJJOgorCQkJCXJldHVybiBnZXRUYXJnZXRVUkkoKTsKKwkJCWNhc2UgU3RhbmRhcmRQYWNrYWdlLklORkVDVE9SX19ESVNFQVNFX05BTUU6CisJCQkJcmV0dXJuIGdldERpc2Vhc2VOYW1lKCk7CisJCQljYXNlIFN0YW5kYXJkUGFja2FnZS5JTkZFQ1RPUl9fVEFSR0VUX0lTT19LRVk6CisJCQkJcmV0dXJuIGdldFRhcmdldElTT0tleSgpOworCQkJY2FzZSBTdGFuZGFyZFBhY2thZ2UuSU5GRUNUT1JfX0xBQkVMU19UT19JTkZFQ1Q6CisJCQkJcmV0dXJuIGdldExhYmVsc1RvSW5mZWN0KCk7CisJCQljYXNlIFN0YW5kYXJkUGFja2FnZS5JTkZFQ1RPUl9fUE9QVUxBVElPTl9JREVOVElGSUVSOgorCQkJCXJldHVybiBnZXRQb3B1bGF0aW9uSWRlbnRpZmllcigpOworCQkJY2FzZSBTdGFuZGFyZFBhY2thZ2UuSU5GRUNUT1JfX0lORkVDVF9QRVJDRU5UQUdFOgorCQkJCXJldHVybiBpc0luZmVjdFBlcmNlbnRhZ2UoKTsKKwkJCWNhc2UgU3RhbmRhcmRQYWNrYWdlLklORkVDVE9SX19UQVJHRVRfRkVBVFVSRToKKwkJCQlyZXR1cm4gZ2V0VGFyZ2V0RmVhdHVyZSgpOworCQl9CisJCXJldHVybiBzdXBlci5lR2V0KGZlYXR1cmVJRCwgcmVzb2x2ZSwgY29yZVR5cGUpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogCisJICogQHBhcmFtIGZlYXR1cmVJRAorCSAqIEBwYXJhbSBuZXdWYWx1ZQorCSAqIAorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAU3VwcHJlc3NXYXJuaW5ncygidW5jaGVja2VkIikKKwkJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgZVNldChpbnQgZmVhdHVyZUlELCBPYmplY3QgbmV3VmFsdWUpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJCWNhc2UgU3RhbmRhcmRQYWNrYWdlLklORkVDVE9SX19ESVNFQVNFX01PREVMOgorCQkJCXNldERpc2Vhc2VNb2RlbCgoU3RhbmRhcmREaXNlYXNlTW9kZWwpbmV3VmFsdWUpOworCQkJCXJldHVybjsKKwkJCWNhc2UgU3RhbmRhcmRQYWNrYWdlLklORkVDVE9SX19UQVJHRVRfVVJJOgorCQkJCXNldFRhcmdldFVSSSgoVVJJKW5ld1ZhbHVlKTsKKwkJCQlyZXR1cm47CisJCQljYXNlIFN0YW5kYXJkUGFja2FnZS5JTkZFQ1RPUl9fRElTRUFTRV9OQU1FOgorCQkJCXNldERpc2Vhc2VOYW1lKChTdHJpbmcpbmV3VmFsdWUpOworCQkJCXJldHVybjsKKwkJCWNhc2UgU3RhbmRhcmRQYWNrYWdlLklORkVDVE9SX19UQVJHRVRfSVNPX0tFWToKKwkJCQlzZXRUYXJnZXRJU09LZXkoKFN0cmluZyluZXdWYWx1ZSk7CisJCQkJcmV0dXJuOworCQkJY2FzZSBTdGFuZGFyZFBhY2thZ2UuSU5GRUNUT1JfX0xBQkVMU19UT19JTkZFQ1Q6CisJCQkJZ2V0TGFiZWxzVG9JbmZlY3QoKS5jbGVhcigpOworCQkJCWdldExhYmVsc1RvSW5mZWN0KCkuYWRkQWxsKChDb2xsZWN0aW9uPD8gZXh0ZW5kcyBEaXNlYXNlTW9kZWxMYWJlbD4pbmV3VmFsdWUpOworCQkJCXJldHVybjsKKwkJCWNhc2UgU3RhbmRhcmRQYWNrYWdlLklORkVDVE9SX19QT1BVTEFUSU9OX0lERU5USUZJRVI6CisJCQkJc2V0UG9wdWxhdGlvbklkZW50aWZpZXIoKFN0cmluZyluZXdWYWx1ZSk7CisJCQkJcmV0dXJuOworCQkJY2FzZSBTdGFuZGFyZFBhY2thZ2UuSU5GRUNUT1JfX0lORkVDVF9QRVJDRU5UQUdFOgorCQkJCXNldEluZmVjdFBlcmNlbnRhZ2UoKEJvb2xlYW4pbmV3VmFsdWUpOworCQkJCXJldHVybjsKKwkJCWNhc2UgU3RhbmRhcmRQYWNrYWdlLklORkVDVE9SX19UQVJHRVRfRkVBVFVSRToKKwkJCQlzZXRUYXJnZXRGZWF0dXJlKChTdHJpbmcpbmV3VmFsdWUpOworCQkJCXJldHVybjsKKwkJfQorCQlzdXBlci5lU2V0KGZlYXR1cmVJRCwgbmV3VmFsdWUpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogCisJICogQHBhcmFtIGZlYXR1cmVJRAorCSAqIAorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBlVW5zZXQoaW50IGZlYXR1cmVJRCkgeworCQlzd2l0Y2ggKGZlYXR1cmVJRCkgeworCQkJY2FzZSBTdGFuZGFyZFBhY2thZ2UuSU5GRUNUT1JfX0RJU0VBU0VfTU9ERUw6CisJCQkJc2V0RGlzZWFzZU1vZGVsKChTdGFuZGFyZERpc2Vhc2VNb2RlbCludWxsKTsKKwkJCQlyZXR1cm47CisJCQljYXNlIFN0YW5kYXJkUGFja2FnZS5JTkZFQ1RPUl9fVEFSR0VUX1VSSToKKwkJCQlzZXRUYXJnZXRVUkkoVEFSR0VUX1VSSV9FREVGQVVMVCk7CisJCQkJcmV0dXJuOworCQkJY2FzZSBTdGFuZGFyZFBhY2thZ2UuSU5GRUNUT1JfX0RJU0VBU0VfTkFNRToKKwkJCQlzZXREaXNlYXNlTmFtZShESVNFQVNFX05BTUVfRURFRkFVTFQpOworCQkJCXJldHVybjsKKwkJCWNhc2UgU3RhbmRhcmRQYWNrYWdlLklORkVDVE9SX19UQVJHRVRfSVNPX0tFWToKKwkJCQlzZXRUYXJnZXRJU09LZXkoVEFSR0VUX0lTT19LRVlfRURFRkFVTFQpOworCQkJCXJldHVybjsKKwkJCWNhc2UgU3RhbmRhcmRQYWNrYWdlLklORkVDVE9SX19MQUJFTFNfVE9fSU5GRUNUOgorCQkJCWdldExhYmVsc1RvSW5mZWN0KCkuY2xlYXIoKTsKKwkJCQlyZXR1cm47CisJCQljYXNlIFN0YW5kYXJkUGFja2FnZS5JTkZFQ1RPUl9fUE9QVUxBVElPTl9JREVOVElGSUVSOgorCQkJCXNldFBvcHVsYXRpb25JZGVudGlmaWVyKFBPUFVMQVRJT05fSURFTlRJRklFUl9FREVGQVVMVCk7CisJCQkJcmV0dXJuOworCQkJY2FzZSBTdGFuZGFyZFBhY2thZ2UuSU5GRUNUT1JfX0lORkVDVF9QRVJDRU5UQUdFOgorCQkJCXNldEluZmVjdFBlcmNlbnRhZ2UoSU5GRUNUX1BFUkNFTlRBR0VfRURFRkFVTFQpOworCQkJCXJldHVybjsKKwkJCWNhc2UgU3RhbmRhcmRQYWNrYWdlLklORkVDVE9SX19UQVJHRVRfRkVBVFVSRToKKwkJCQlzZXRUYXJnZXRGZWF0dXJlKFRBUkdFVF9GRUFUVVJFX0VERUZBVUxUKTsKKwkJCQlyZXR1cm47CisJCX0KKwkJc3VwZXIuZVVuc2V0KGZlYXR1cmVJRCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAcGFyYW0gZmVhdHVyZUlECisJICogCisJICogQHJldHVybgorCSAqIAorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgYm9vbGVhbiBlSXNTZXQoaW50IGZlYXR1cmVJRCkgeworCQlzd2l0Y2ggKGZlYXR1cmVJRCkgeworCQkJY2FzZSBTdGFuZGFyZFBhY2thZ2UuSU5GRUNUT1JfX0RJU0VBU0VfTU9ERUw6CisJCQkJcmV0dXJuIGRpc2Vhc2VNb2RlbCAhPSBudWxsOworCQkJY2FzZSBTdGFuZGFyZFBhY2thZ2UuSU5GRUNUT1JfX1RBUkdFVF9VUkk6CisJCQkJcmV0dXJuIFRBUkdFVF9VUklfRURFRkFVTFQgPT0gbnVsbCA/IHRhcmdldFVSSSAhPSBudWxsIDogIVRBUkdFVF9VUklfRURFRkFVTFQuZXF1YWxzKHRhcmdldFVSSSk7CisJCQljYXNlIFN0YW5kYXJkUGFja2FnZS5JTkZFQ1RPUl9fRElTRUFTRV9OQU1FOgorCQkJCXJldHVybiBESVNFQVNFX05BTUVfRURFRkFVTFQgPT0gbnVsbCA/IGRpc2Vhc2VOYW1lICE9IG51bGwgOiAhRElTRUFTRV9OQU1FX0VERUZBVUxULmVxdWFscyhkaXNlYXNlTmFtZSk7CisJCQljYXNlIFN0YW5kYXJkUGFja2FnZS5JTkZFQ1RPUl9fVEFSR0VUX0lTT19LRVk6CisJCQkJcmV0dXJuIFRBUkdFVF9JU09fS0VZX0VERUZBVUxUID09IG51bGwgPyB0YXJnZXRJU09LZXkgIT0gbnVsbCA6ICFUQVJHRVRfSVNPX0tFWV9FREVGQVVMVC5lcXVhbHModGFyZ2V0SVNPS2V5KTsKKwkJCWNhc2UgU3RhbmRhcmRQYWNrYWdlLklORkVDVE9SX19MQUJFTFNfVE9fSU5GRUNUOgorCQkJCXJldHVybiBsYWJlbHNUb0luZmVjdCAhPSBudWxsICYmICFsYWJlbHNUb0luZmVjdC5pc0VtcHR5KCk7CisJCQljYXNlIFN0YW5kYXJkUGFja2FnZS5JTkZFQ1RPUl9fUE9QVUxBVElPTl9JREVOVElGSUVSOgorCQkJCXJldHVybiBQT1BVTEFUSU9OX0lERU5USUZJRVJfRURFRkFVTFQgPT0gbnVsbCA/IHBvcHVsYXRpb25JZGVudGlmaWVyICE9IG51bGwgOiAhUE9QVUxBVElPTl9JREVOVElGSUVSX0VERUZBVUxULmVxdWFscyhwb3B1bGF0aW9uSWRlbnRpZmllcik7CisJCQljYXNlIFN0YW5kYXJkUGFja2FnZS5JTkZFQ1RPUl9fSU5GRUNUX1BFUkNFTlRBR0U6CisJCQkJcmV0dXJuIGluZmVjdFBlcmNlbnRhZ2UgIT0gSU5GRUNUX1BFUkNFTlRBR0VfRURFRkFVTFQ7CisJCQljYXNlIFN0YW5kYXJkUGFja2FnZS5JTkZFQ1RPUl9fVEFSR0VUX0ZFQVRVUkU6CisJCQkJcmV0dXJuIFRBUkdFVF9GRUFUVVJFX0VERUZBVUxUID09IG51bGwgPyB0YXJnZXRGZWF0dXJlICE9IG51bGwgOiAhVEFSR0VUX0ZFQVRVUkVfRURFRkFVTFQuZXF1YWxzKHRhcmdldEZlYXR1cmUpOworCQl9CisJCXJldHVybiBzdXBlci5lSXNTZXQoZmVhdHVyZUlEKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEByZXR1cm4KKwkgKiAKKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKSB7CisJCWlmIChlSXNQcm94eSgpKQorCQkJcmV0dXJuIHN1cGVyLnRvU3RyaW5nKCk7CisKKwkJU3RyaW5nQnVmZmVyIHJlc3VsdCA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKKwkJcmVzdWx0LmFwcGVuZCgiIChwb3B1bGF0aW9uSWRlbnRpZmllcjogIik7IC8vJE5PTi1OTFMtMSQKKwkJcmVzdWx0LmFwcGVuZChnZXRQb3B1bGF0aW9uSWRlbnRpZmllcigpICE9IG51bGwgPyBnZXRQb3B1bGF0aW9uSWRlbnRpZmllcigpIDogIlwiXCIiKTsKKwkJcmVzdWx0LmFwcGVuZCgiLCB0YXJnZXRVUkk6ICIpOyAvLyROT04tTkxTLTEkCisJCXJlc3VsdC5hcHBlbmQoZ2V0VGFyZ2V0VVJJKCkgIT0gbnVsbCA/IGdldFRhcmdldFVSSSgpIDogIlwiXCIiKTsKKwkJcmVzdWx0LmFwcGVuZCgiLCBkaXNlYXNlTmFtZTogIik7IC8vJE5PTi1OTFMtMSQKKwkJcmVzdWx0LmFwcGVuZChnZXREaXNlYXNlTmFtZSgpICE9IG51bGwgPyBnZXREaXNlYXNlTmFtZSgpIDogIlwiXCIiKTsKKwkJcmVzdWx0LmFwcGVuZCgiLCB0YXJnZXRJU09LZXk6ICIpOyAvLyROT04tTkxTLTEkCisJCXJlc3VsdC5hcHBlbmQoZ2V0VGFyZ2V0SVNPS2V5KCkgIT0gbnVsbCA/IGdldFRhcmdldElTT0tleSgpIDogIlwiXCIiKTsKKwkJcmVzdWx0LmFwcGVuZCgnKScpOworCQlyZXR1cm4gcmVzdWx0LnRvU3RyaW5nKCk7CisJfSAvLyB0b1N0cmluZworCisJCisJQE92ZXJyaWRlCisJcHVibGljIGJvb2xlYW4gc2FuZSgpIHsKKwkJYm9vbGVhbiByZXRWYWx1ZSA9IHN1cGVyLnNhbmUoKTsKKwkJY2hlY2tJbmZlY3RvclVSSXMoKTsvLyBpc3N1ZXMgd2FybmluZyBpZiBpbmZlY3RvciB1cmkgaXMgbm90IGluIHRoZSBncmFwaAorCQlyZXRWYWx1ZSA9IHJldFZhbHVlICYmICEoZ2V0VGFyZ2V0SVNPS2V5KCkgPT0gbnVsbCAmJiBnZXRUYXJnZXRVUkkoKSA9PSBudWxsKTsKKwkJYXNzZXJ0IHJldFZhbHVlOworCQkKKwkJcmV0dXJuIHJldFZhbHVlOworCX0gLy8gc2FuZQorCQorCisJLyoqCisJICogSW5pdGlhbGl6ZSB0aGUgZGlzZWFzZSBtb2RlbCBsYWJlbCB2YWx1ZQorCSAqIAorCSAqIEBwYXJhbSBkaXNlYXNlTW9kZWxMYWJlbAorCSAqICAgICAgICAgICAgdGhlIGRpc2Vhc2UgbW9kZWwgbGFiZWwgdG8gYmUgaW5pdGlhbGl6ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgYWJzdHJhY3Qgdm9pZCBkb0luaXRpYWxpemF0aW9uKAorCQkJZmluYWwgRGlzZWFzZU1vZGVsTGFiZWwgZGlzZWFzZU1vZGVsTGFiZWwpOworCit9IC8vIEluZmVjdG9ySW1wbApkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9zdGFuZGFyZC9pbXBsL0luZmVjdG9ySW5vY3VsYXRvckNvbGxlY3Rpb25JbXBsLmphdmEgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3N0YW5kYXJkL2ltcGwvSW5mZWN0b3JJbm9jdWxhdG9yQ29sbGVjdGlvbkltcGwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hOGFiZjUxCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9zdGFuZGFyZC9pbXBsL0luZmVjdG9ySW5vY3VsYXRvckNvbGxlY3Rpb25JbXBsLmphdmEKQEAgLTAsMCArMSwyNDYgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDksMjAxMCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5pbXBsOworCitpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uQ2hhaW47CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLkVMaXN0OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkludGVybmFsRU9iamVjdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuaW1wbC5FTm90aWZpY2F0aW9uSW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUudXRpbC5FT2JqZWN0Q29udGFpbm1lbnRFTGlzdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUudXRpbC5JbnRlcm5hbEVMaXN0OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5TVEVNVGltZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuaW1wbC5Ob2RlRGVjb3JhdG9ySW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuSW5mZWN0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLkluZmVjdG9ySW5vY3VsYXRvckNvbGxlY3Rpb247CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkUGFja2FnZTsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPkluZmVjdG9yIElub2N1bGF0b3IgQ29sbGVjdGlvbjwvYj48L2VtPicuCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIDxwPgorICogVGhlIGZvbGxvd2luZyBmZWF0dXJlcyBhcmUgaW1wbGVtZW50ZWQ6CisgKiA8dWw+CisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLmltcGwuSW5mZWN0b3JJbm9jdWxhdG9yQ29sbGVjdGlvbkltcGwjZ2V0TGlzdCA8ZW0+TGlzdDwvZW0+fTwvbGk+CisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLmltcGwuSW5mZWN0b3JJbm9jdWxhdG9yQ29sbGVjdGlvbkltcGwjZ2V0SW1wb3J0Rm9sZGVyIDxlbT5JbXBvcnQgRm9sZGVyPC9lbT59PC9saT4KKyAqIDwvdWw+CisgKiA8L3A+CisgKgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgSW5mZWN0b3JJbm9jdWxhdG9yQ29sbGVjdGlvbkltcGwgZXh0ZW5kcyBOb2RlRGVjb3JhdG9ySW1wbCBpbXBsZW1lbnRzIEluZmVjdG9ySW5vY3VsYXRvckNvbGxlY3Rpb24geworCS8qKgorCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldExpc3QoKSA8ZW0+TGlzdDwvZW0+fScgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3QuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNnZXRMaXN0KCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgRUxpc3Q8SW5mZWN0b3I+IGxpc3Q7CisKKwkvKioKKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0SW1wb3J0Rm9sZGVyKCkgPGVtPkltcG9ydCBGb2xkZXI8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI2dldEltcG9ydEZvbGRlcigpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBTdHJpbmcgSU1QT1JUX0ZPTERFUl9FREVGQVVMVCA9ICIiOyAvLyROT04tTkxTLTEkCisJLyoqCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0SW1wb3J0Rm9sZGVyKCkgPGVtPkltcG9ydCBGb2xkZXI8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI2dldEltcG9ydEZvbGRlcigpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIFN0cmluZyBpbXBvcnRGb2xkZXIgPSBJTVBPUlRfRk9MREVSX0VERUZBVUxUOworCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIEluZmVjdG9ySW5vY3VsYXRvckNvbGxlY3Rpb25JbXBsKCkgeworCQlzdXBlcigpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCBFQ2xhc3MgZVN0YXRpY0NsYXNzKCkgeworCQlyZXR1cm4gU3RhbmRhcmRQYWNrYWdlLkxpdGVyYWxzLklORkVDVE9SX0lOT0NVTEFUT1JfQ09MTEVDVElPTjsKKwl9CisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5pbXBsLkRlY29yYXRvckltcGwjZGVjb3JhdGVHcmFwaChvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguR3JhcGgpCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIGJvb2xlYW4gZGVjb3JhdGVHcmFwaChTVEVNVGltZSB0aW1lKSB7CisJCWlmKHRoaXMuaXNHcmFwaERlY29yYXRlZCgpKSByZXR1cm4gdHJ1ZTsKKwkJYm9vbGVhbiBzdWNjZXNzID0gdHJ1ZTsKKwkJaWYodGhpcy5nZXRMaXN0KCkgIT0gbnVsbCkKKwkJCWZvcihJbmZlY3RvciBpOnRoaXMuZ2V0TGlzdCgpKQorCQkJCWlmKCFpLmRlY29yYXRlR3JhcGgodGltZSkpIHN1Y2Nlc3MgPSBmYWxzZTsKKwkJcmV0dXJuIHN1Y2Nlc3M7CisJfQorCQorCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLmltcGwuRGVjb3JhdG9ySW1wbCNyZXNldExhYmVscyhvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguR3JhcGgpCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgcmVzZXRMYWJlbHMoKSB7CisJCWlmKHRoaXMuZ2V0TGlzdCgpICE9IG51bGwpCisJCQlmb3IoSW5mZWN0b3IgaTp0aGlzLmdldExpc3QoKSkgaS5yZXNldExhYmVscygpOworCX0KKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUxpc3Q8SW5mZWN0b3I+IGdldExpc3QoKSB7CisJCWlmIChsaXN0ID09IG51bGwpIHsKKwkJCWxpc3QgPSBuZXcgRU9iamVjdENvbnRhaW5tZW50RUxpc3Q8SW5mZWN0b3I+KEluZmVjdG9yLmNsYXNzLCB0aGlzLCBTdGFuZGFyZFBhY2thZ2UuSU5GRUNUT1JfSU5PQ1VMQVRPUl9DT0xMRUNUSU9OX19MSVNUKTsKKwkJfQorCQlyZXR1cm4gbGlzdDsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgU3RyaW5nIGdldEltcG9ydEZvbGRlcigpIHsKKwkJcmV0dXJuIGltcG9ydEZvbGRlcjsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRJbXBvcnRGb2xkZXIoU3RyaW5nIG5ld0ltcG9ydEZvbGRlcikgeworCQlTdHJpbmcgb2xkSW1wb3J0Rm9sZGVyID0gaW1wb3J0Rm9sZGVyOworCQlpbXBvcnRGb2xkZXIgPSBuZXdJbXBvcnRGb2xkZXI7CisJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkKKwkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIFN0YW5kYXJkUGFja2FnZS5JTkZFQ1RPUl9JTk9DVUxBVE9SX0NPTExFQ1RJT05fX0lNUE9SVF9GT0xERVIsIG9sZEltcG9ydEZvbGRlciwgaW1wb3J0Rm9sZGVyKSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIE5vdGlmaWNhdGlvbkNoYWluIGVJbnZlcnNlUmVtb3ZlKEludGVybmFsRU9iamVjdCBvdGhlckVuZCwgaW50IGZlYXR1cmVJRCwgTm90aWZpY2F0aW9uQ2hhaW4gbXNncykgeworCQlzd2l0Y2ggKGZlYXR1cmVJRCkgeworCQkJY2FzZSBTdGFuZGFyZFBhY2thZ2UuSU5GRUNUT1JfSU5PQ1VMQVRPUl9DT0xMRUNUSU9OX19MSVNUOgorCQkJCXJldHVybiAoKEludGVybmFsRUxpc3Q8Pz4pZ2V0TGlzdCgpKS5iYXNpY1JlbW92ZShvdGhlckVuZCwgbXNncyk7CisJCX0KKwkJcmV0dXJuIHN1cGVyLmVJbnZlcnNlUmVtb3ZlKG90aGVyRW5kLCBmZWF0dXJlSUQsIG1zZ3MpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBPYmplY3QgZUdldChpbnQgZmVhdHVyZUlELCBib29sZWFuIHJlc29sdmUsIGJvb2xlYW4gY29yZVR5cGUpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJCWNhc2UgU3RhbmRhcmRQYWNrYWdlLklORkVDVE9SX0lOT0NVTEFUT1JfQ09MTEVDVElPTl9fTElTVDoKKwkJCQlyZXR1cm4gZ2V0TGlzdCgpOworCQkJY2FzZSBTdGFuZGFyZFBhY2thZ2UuSU5GRUNUT1JfSU5PQ1VMQVRPUl9DT0xMRUNUSU9OX19JTVBPUlRfRk9MREVSOgorCQkJCXJldHVybiBnZXRJbXBvcnRGb2xkZXIoKTsKKwkJfQorCQlyZXR1cm4gc3VwZXIuZUdldChmZWF0dXJlSUQsIHJlc29sdmUsIGNvcmVUeXBlKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAU3VwcHJlc3NXYXJuaW5ncygidW5jaGVja2VkIikKKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBlU2V0KGludCBmZWF0dXJlSUQsIE9iamVjdCBuZXdWYWx1ZSkgeworCQlzd2l0Y2ggKGZlYXR1cmVJRCkgeworCQkJY2FzZSBTdGFuZGFyZFBhY2thZ2UuSU5GRUNUT1JfSU5PQ1VMQVRPUl9DT0xMRUNUSU9OX19MSVNUOgorCQkJCWdldExpc3QoKS5jbGVhcigpOworCQkJCWdldExpc3QoKS5hZGRBbGwoKENvbGxlY3Rpb248PyBleHRlbmRzIEluZmVjdG9yPiluZXdWYWx1ZSk7CisJCQkJcmV0dXJuOworCQkJY2FzZSBTdGFuZGFyZFBhY2thZ2UuSU5GRUNUT1JfSU5PQ1VMQVRPUl9DT0xMRUNUSU9OX19JTVBPUlRfRk9MREVSOgorCQkJCXNldEltcG9ydEZvbGRlcigoU3RyaW5nKW5ld1ZhbHVlKTsKKwkJCQlyZXR1cm47CisJCX0KKwkJc3VwZXIuZVNldChmZWF0dXJlSUQsIG5ld1ZhbHVlKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBlVW5zZXQoaW50IGZlYXR1cmVJRCkgeworCQlzd2l0Y2ggKGZlYXR1cmVJRCkgeworCQkJY2FzZSBTdGFuZGFyZFBhY2thZ2UuSU5GRUNUT1JfSU5PQ1VMQVRPUl9DT0xMRUNUSU9OX19MSVNUOgorCQkJCWdldExpc3QoKS5jbGVhcigpOworCQkJCXJldHVybjsKKwkJCWNhc2UgU3RhbmRhcmRQYWNrYWdlLklORkVDVE9SX0lOT0NVTEFUT1JfQ09MTEVDVElPTl9fSU1QT1JUX0ZPTERFUjoKKwkJCQlzZXRJbXBvcnRGb2xkZXIoSU1QT1JUX0ZPTERFUl9FREVGQVVMVCk7CisJCQkJcmV0dXJuOworCQl9CisJCXN1cGVyLmVVbnNldChmZWF0dXJlSUQpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBib29sZWFuIGVJc1NldChpbnQgZmVhdHVyZUlEKSB7CisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7CisJCQljYXNlIFN0YW5kYXJkUGFja2FnZS5JTkZFQ1RPUl9JTk9DVUxBVE9SX0NPTExFQ1RJT05fX0xJU1Q6CisJCQkJcmV0dXJuIGxpc3QgIT0gbnVsbCAmJiAhbGlzdC5pc0VtcHR5KCk7CisJCQljYXNlIFN0YW5kYXJkUGFja2FnZS5JTkZFQ1RPUl9JTk9DVUxBVE9SX0NPTExFQ1RJT05fX0lNUE9SVF9GT0xERVI6CisJCQkJcmV0dXJuIElNUE9SVF9GT0xERVJfRURFRkFVTFQgPT0gbnVsbCA/IGltcG9ydEZvbGRlciAhPSBudWxsIDogIUlNUE9SVF9GT0xERVJfRURFRkFVTFQuZXF1YWxzKGltcG9ydEZvbGRlcik7CisJCX0KKwkJcmV0dXJuIHN1cGVyLmVJc1NldChmZWF0dXJlSUQpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKSB7CisJCWlmIChlSXNQcm94eSgpKSByZXR1cm4gc3VwZXIudG9TdHJpbmcoKTsKKworCQlTdHJpbmdCdWZmZXIgcmVzdWx0ID0gbmV3IFN0cmluZ0J1ZmZlcihzdXBlci50b1N0cmluZygpKTsKKwkJcmVzdWx0LmFwcGVuZCgiIChpbXBvcnRGb2xkZXI6ICIpOyAvLyROT04tTkxTLTEkCisJCXJlc3VsdC5hcHBlbmQoaW1wb3J0Rm9sZGVyKTsKKwkJcmVzdWx0LmFwcGVuZCgnKScpOworCQlyZXR1cm4gcmVzdWx0LnRvU3RyaW5nKCk7CisJfQorCit9IC8vSW5mZWN0b3JJbm9jdWxhdG9yQ29sbGVjdGlvbkltcGwKZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvc3RhbmRhcmQvaW1wbC9Jbml0aWFsaXplckltcGwuamF2YSBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvc3RhbmRhcmQvaW1wbC9Jbml0aWFsaXplckltcGwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYTFlMjQ5Ci0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9zdGFuZGFyZC9pbXBsL0luaXRpYWxpemVySW1wbC5qYXZhCkBAIC0wLDAgKzEsNTcxIEBACisvKioNCisgKiA8Y29weXJpZ2h0Pg0KKyAqIDwvY29weXJpZ2h0Pg0KKyAqDQorICogJElkJA0KKyAqLw0KK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLmltcGw7DQorDQoraW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOw0KK2ltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7DQoraW1wb3J0IGphdmEudXRpbC5TZXQ7DQorDQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLkJhc2ljRUxpc3Q7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5FTGlzdDsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlVSSTsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVBdHRyaWJ1dGU7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5pbXBsLkVOb3RpZmljYXRpb25JbXBsOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUudXRpbC5FRGF0YVR5cGVFTGlzdDsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnV0aWwuRURhdGFUeXBlVW5pcXVlRUxpc3Q7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5HcmFwaDsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLk5vZGU7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5Ob2RlTGFiZWw7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5EZWNvcmF0b3I7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5TVEVNVGltZTsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLmltcGwuTm9kZURlY29yYXRvckltcGw7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuTG9jYXRpb25VdGlsaXR5Ow0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLm5vZGVzLmltcGwuUmVnaW9uSW1wbDsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLkFjdGl2YXRvcjsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLkRpc2Vhc2VNb2RlbDsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLkRpc2Vhc2VNb2RlbExhYmVsOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZTsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLkluaXRpYWxpemVyOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmREaXNlYXNlTW9kZWw7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZFBhY2thZ2U7DQorDQorLyoqDQorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnDQorICogPGVtPjxiPkluaXRpYWxpemVyPC9iPjwvZW0+Jy4gPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorICogPHA+DQorICogVGhlIGZvbGxvd2luZyBmZWF0dXJlcyBhcmUgaW1wbGVtZW50ZWQ6DQorICogPHVsPg0KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuaW1wbC5Jbml0aWFsaXplckltcGwjZ2V0RGlzZWFzZU5hbWUgPGVtPkRpc2Vhc2UgTmFtZTwvZW0+fTwvbGk+DQorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5pbXBsLkluaXRpYWxpemVySW1wbCNnZXRUYXJnZXRJU09LZXkgPGVtPlRhcmdldCBJU08gS2V5PC9lbT59PC9saT4NCisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLmltcGwuSW5pdGlhbGl6ZXJJbXBsI2dldFRhcmdldFVSSSA8ZW0+VGFyZ2V0IFVSSTwvZW0+fTwvbGk+DQorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5pbXBsLkluaXRpYWxpemVySW1wbCNnZXRQb3B1bGF0aW9uSWRlbnRpZmllciA8ZW0+UG9wdWxhdGlvbiBJZGVudGlmaWVyPC9lbT59PC9saT4NCisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLmltcGwuSW5pdGlhbGl6ZXJJbXBsI2dldENvbXBhcnRtZW50cyA8ZW0+Q29tcGFydG1lbnRzPC9lbT59PC9saT4NCisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLmltcGwuSW5pdGlhbGl6ZXJJbXBsI2dldENvbXBhcnRtZW50VmFsdWVzIDxlbT5Db21wYXJ0bWVudCBWYWx1ZXM8L2VtPn08L2xpPg0KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuaW1wbC5Jbml0aWFsaXplckltcGwjaXNVc2VGcmFjdGlvbnMgPGVtPlVzZSBGcmFjdGlvbnM8L2VtPn08L2xpPg0KKyAqIDwvdWw+DQorICogPC9wPg0KKyAqDQorICogQGdlbmVyYXRlZA0KKyAqLw0KK3B1YmxpYyBjbGFzcyBJbml0aWFsaXplckltcGwgZXh0ZW5kcyBOb2RlRGVjb3JhdG9ySW1wbCBpbXBsZW1lbnRzIEluaXRpYWxpemVyIHsNCisNCisJLyoqDQorCSAqIEFsbCB7QGxpbmsgRGlzZWFzZU1vZGVsTGFiZWx9cyB0aGF0IGFyZSBpbml0aWFsaXplZCBieSB0aGlzDQorCSAqIHtAbGluayBJbml0aWFsaXplcn0uDQorCSAqLw0KKwlwcml2YXRlIEVMaXN0PERpc2Vhc2VNb2RlbExhYmVsPiBsYWJlbHNUb0luaXRpYWxpemU7DQorDQorCS8qKg0KKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0RGlzZWFzZU5hbWUoKSA8ZW0+RGlzZWFzZSBOYW1lPC9lbT59JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAc2VlICNnZXREaXNlYXNlTmFtZSgpDQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgU3RyaW5nIERJU0VBU0VfTkFNRV9FREVGQVVMVCA9IG51bGw7DQorDQorCS8qKg0KKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXREaXNlYXNlTmFtZSgpIDxlbT5EaXNlYXNlIE5hbWU8L2VtPn0nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBzZWUgI2dldERpc2Vhc2VOYW1lKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJcHJvdGVjdGVkIFN0cmluZyBkaXNlYXNlTmFtZSA9IERJU0VBU0VfTkFNRV9FREVGQVVMVDsNCisNCisJLyoqDQorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRUYXJnZXRJU09LZXkoKSA8ZW0+VGFyZ2V0IElTTyBLZXk8L2VtPn0nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLQ0KKwkgKiBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBzZWUgI2dldFRhcmdldElTT0tleSgpDQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgU3RyaW5nIFRBUkdFVF9JU09fS0VZX0VERUZBVUxUID0gbnVsbDsNCisNCisJLyoqDQorCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldFRhcmdldElTT0tleSgpIDxlbT5UYXJnZXQgSVNPIEtleTwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tDQorCSAqIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHNlZSAjZ2V0VGFyZ2V0SVNPS2V5KCkNCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJcHJvdGVjdGVkIFN0cmluZyB0YXJnZXRJU09LZXkgPSBUQVJHRVRfSVNPX0tFWV9FREVGQVVMVDsNCisNCisJLyoqDQorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRUYXJnZXRVUkkoKSA8ZW0+VGFyZ2V0IFVSSTwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHNlZSAjZ2V0VGFyZ2V0VVJJKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBVUkkgVEFSR0VUX1VSSV9FREVGQVVMVCA9IG51bGw7DQorDQorCS8qKg0KKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRUYXJnZXRVUkkoKSA8ZW0+VGFyZ2V0IFVSSTwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHNlZSAjZ2V0VGFyZ2V0VVJJKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJcHJvdGVjdGVkIFVSSSB0YXJnZXRVUkkgPSBUQVJHRVRfVVJJX0VERUZBVUxUOw0KKw0KKwkvKioNCisJICogVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldFBvcHVsYXRpb25JZGVudGlmaWVyKCkgPGVtPlBvcHVsYXRpb24gSWRlbnRpZmllcjwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tDQorCSAqIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHNlZSAjZ2V0UG9wdWxhdGlvbklkZW50aWZpZXIoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqIEBvcmRlcmVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIFN0cmluZyBQT1BVTEFUSU9OX0lERU5USUZJRVJfRURFRkFVTFQgPSBudWxsOw0KKw0KKwkvKioNCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0UG9wdWxhdGlvbklkZW50aWZpZXIoKSA8ZW0+UG9wdWxhdGlvbiBJZGVudGlmaWVyPC9lbT59JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0NCisJICogZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAc2VlICNnZXRQb3B1bGF0aW9uSWRlbnRpZmllcigpDQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCXByb3RlY3RlZCBTdHJpbmcgcG9wdWxhdGlvbklkZW50aWZpZXIgPSBQT1BVTEFUSU9OX0lERU5USUZJRVJfRURFRkFVTFQ7DQorDQorCS8qKg0KKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRDb21wYXJ0bWVudHMoKSA8ZW0+Q29tcGFydG1lbnRzPC9lbT59JyBhdHRyaWJ1dGUgbGlzdC4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBzZWUgI2dldENvbXBhcnRtZW50cygpDQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCXByb3RlY3RlZCBFTGlzdDxTdHJpbmc+IGNvbXBhcnRtZW50czsNCisNCisJLyoqDQorCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldENvbXBhcnRtZW50VmFsdWVzKCkgPGVtPkNvbXBhcnRtZW50IFZhbHVlczwvZW0+fScgYXR0cmlidXRlIGxpc3QuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAc2VlICNnZXRDb21wYXJ0bWVudFZhbHVlcygpDQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCXByb3RlY3RlZCBFTGlzdDxEb3VibGU+IGNvbXBhcnRtZW50VmFsdWVzOw0KKw0KKwkvKioNCisJICogVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2lzVXNlRnJhY3Rpb25zKCkgPGVtPlVzZSBGcmFjdGlvbnM8L2VtPn0nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLQ0KKwkgKiBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBzZWUgI2lzVXNlRnJhY3Rpb25zKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBib29sZWFuIFVTRV9GUkFDVElPTlNfRURFRkFVTFQgPSBmYWxzZTsNCisNCisJLyoqDQorCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2lzVXNlRnJhY3Rpb25zKCkgPGVtPlVzZSBGcmFjdGlvbnM8L2VtPn0nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBzZWUgI2lzVXNlRnJhY3Rpb25zKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJcHJvdGVjdGVkIGJvb2xlYW4gdXNlRnJhY3Rpb25zID0gVVNFX0ZSQUNUSU9OU19FREVGQVVMVDsNCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgSW5pdGlhbGl6ZXJJbXBsKCkgew0KKwkJc3VwZXIoKTsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCUBPdmVycmlkZQ0KKwlwcm90ZWN0ZWQgRUNsYXNzIGVTdGF0aWNDbGFzcygpIHsNCisJCXJldHVybiBTdGFuZGFyZFBhY2thZ2UuTGl0ZXJhbHMuSU5JVElBTElaRVI7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgU3RyaW5nIGdldERpc2Vhc2VOYW1lKCkgew0KKwkJcmV0dXJuIGRpc2Vhc2VOYW1lOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIHZvaWQgc2V0RGlzZWFzZU5hbWUoU3RyaW5nIG5ld0Rpc2Vhc2VOYW1lKSB7DQorCQlTdHJpbmcgb2xkRGlzZWFzZU5hbWUgPSBkaXNlYXNlTmFtZTsNCisJCWRpc2Vhc2VOYW1lID0gbmV3RGlzZWFzZU5hbWU7DQorCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpDQorCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgU3RhbmRhcmRQYWNrYWdlLklOSVRJQUxJWkVSX19ESVNFQVNFX05BTUUsIG9sZERpc2Vhc2VOYW1lLCBkaXNlYXNlTmFtZSkpOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIFN0cmluZyBnZXRUYXJnZXRJU09LZXkoKSB7DQorCQlyZXR1cm4gdGFyZ2V0SVNPS2V5Ow0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIHZvaWQgc2V0VGFyZ2V0SVNPS2V5KFN0cmluZyBuZXdUYXJnZXRJU09LZXkpIHsNCisJCVN0cmluZyBvbGRUYXJnZXRJU09LZXkgPSB0YXJnZXRJU09LZXk7DQorCQl0YXJnZXRJU09LZXkgPSBuZXdUYXJnZXRJU09LZXk7DQorCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpDQorCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgU3RhbmRhcmRQYWNrYWdlLklOSVRJQUxJWkVSX19UQVJHRVRfSVNPX0tFWSwgb2xkVGFyZ2V0SVNPS2V5LCB0YXJnZXRJU09LZXkpKTsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBVUkkgZ2V0VGFyZ2V0VVJJKCkgew0KKwkJcmV0dXJuIHRhcmdldFVSSTsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyB2b2lkIHNldFRhcmdldFVSSShVUkkgbmV3VGFyZ2V0VVJJKSB7DQorCQlVUkkgb2xkVGFyZ2V0VVJJID0gdGFyZ2V0VVJJOw0KKwkJdGFyZ2V0VVJJID0gbmV3VGFyZ2V0VVJJOw0KKwkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQ0KKwkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIFN0YW5kYXJkUGFja2FnZS5JTklUSUFMSVpFUl9fVEFSR0VUX1VSSSwgb2xkVGFyZ2V0VVJJLCB0YXJnZXRVUkkpKTsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBTdHJpbmcgZ2V0UG9wdWxhdGlvbklkZW50aWZpZXIoKSB7DQorCQlyZXR1cm4gcG9wdWxhdGlvbklkZW50aWZpZXI7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgdm9pZCBzZXRQb3B1bGF0aW9uSWRlbnRpZmllcihTdHJpbmcgbmV3UG9wdWxhdGlvbklkZW50aWZpZXIpIHsNCisJCVN0cmluZyBvbGRQb3B1bGF0aW9uSWRlbnRpZmllciA9IHBvcHVsYXRpb25JZGVudGlmaWVyOw0KKwkJcG9wdWxhdGlvbklkZW50aWZpZXIgPSBuZXdQb3B1bGF0aW9uSWRlbnRpZmllcjsNCisJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkNCisJCQllTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBTdGFuZGFyZFBhY2thZ2UuSU5JVElBTElaRVJfX1BPUFVMQVRJT05fSURFTlRJRklFUiwgb2xkUG9wdWxhdGlvbklkZW50aWZpZXIsIHBvcHVsYXRpb25JZGVudGlmaWVyKSk7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgRUxpc3Q8U3RyaW5nPiBnZXRDb21wYXJ0bWVudHMoKSB7DQorCQlpZiAoY29tcGFydG1lbnRzID09IG51bGwpIHsNCisJCQljb21wYXJ0bWVudHMgPSBuZXcgRURhdGFUeXBlVW5pcXVlRUxpc3Q8U3RyaW5nPihTdHJpbmcuY2xhc3MsIHRoaXMsIFN0YW5kYXJkUGFja2FnZS5JTklUSUFMSVpFUl9fQ09NUEFSVE1FTlRTKTsNCisJCX0NCisJCXJldHVybiBjb21wYXJ0bWVudHM7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgRUxpc3Q8RG91YmxlPiBnZXRDb21wYXJ0bWVudFZhbHVlcygpIHsNCisJCWlmIChjb21wYXJ0bWVudFZhbHVlcyA9PSBudWxsKSB7DQorCQkJY29tcGFydG1lbnRWYWx1ZXMgPSBuZXcgRURhdGFUeXBlRUxpc3Q8RG91YmxlPihEb3VibGUuY2xhc3MsIHRoaXMsIFN0YW5kYXJkUGFja2FnZS5JTklUSUFMSVpFUl9fQ09NUEFSVE1FTlRfVkFMVUVTKTsNCisJCX0NCisJCXJldHVybiBjb21wYXJ0bWVudFZhbHVlczsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBib29sZWFuIGlzVXNlRnJhY3Rpb25zKCkgew0KKwkJcmV0dXJuIHVzZUZyYWN0aW9uczsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyB2b2lkIHNldFVzZUZyYWN0aW9ucyhib29sZWFuIG5ld1VzZUZyYWN0aW9ucykgew0KKwkJYm9vbGVhbiBvbGRVc2VGcmFjdGlvbnMgPSB1c2VGcmFjdGlvbnM7DQorCQl1c2VGcmFjdGlvbnMgPSBuZXdVc2VGcmFjdGlvbnM7DQorCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpDQorCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgU3RhbmRhcmRQYWNrYWdlLklOSVRJQUxJWkVSX19VU0VfRlJBQ1RJT05TLCBvbGRVc2VGcmFjdGlvbnMsIHVzZUZyYWN0aW9ucykpOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJQE92ZXJyaWRlDQorCXB1YmxpYyBPYmplY3QgZUdldChpbnQgZmVhdHVyZUlELCBib29sZWFuIHJlc29sdmUsIGJvb2xlYW4gY29yZVR5cGUpIHsNCisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7DQorCQkJY2FzZSBTdGFuZGFyZFBhY2thZ2UuSU5JVElBTElaRVJfX0RJU0VBU0VfTkFNRToNCisJCQkJcmV0dXJuIGdldERpc2Vhc2VOYW1lKCk7DQorCQkJY2FzZSBTdGFuZGFyZFBhY2thZ2UuSU5JVElBTElaRVJfX1RBUkdFVF9JU09fS0VZOg0KKwkJCQlyZXR1cm4gZ2V0VGFyZ2V0SVNPS2V5KCk7DQorCQkJY2FzZSBTdGFuZGFyZFBhY2thZ2UuSU5JVElBTElaRVJfX1RBUkdFVF9VUkk6DQorCQkJCXJldHVybiBnZXRUYXJnZXRVUkkoKTsNCisJCQljYXNlIFN0YW5kYXJkUGFja2FnZS5JTklUSUFMSVpFUl9fUE9QVUxBVElPTl9JREVOVElGSUVSOg0KKwkJCQlyZXR1cm4gZ2V0UG9wdWxhdGlvbklkZW50aWZpZXIoKTsNCisJCQljYXNlIFN0YW5kYXJkUGFja2FnZS5JTklUSUFMSVpFUl9fQ09NUEFSVE1FTlRTOg0KKwkJCQlyZXR1cm4gZ2V0Q29tcGFydG1lbnRzKCk7DQorCQkJY2FzZSBTdGFuZGFyZFBhY2thZ2UuSU5JVElBTElaRVJfX0NPTVBBUlRNRU5UX1ZBTFVFUzoNCisJCQkJcmV0dXJuIGdldENvbXBhcnRtZW50VmFsdWVzKCk7DQorCQkJY2FzZSBTdGFuZGFyZFBhY2thZ2UuSU5JVElBTElaRVJfX1VTRV9GUkFDVElPTlM6DQorCQkJCXJldHVybiBpc1VzZUZyYWN0aW9ucygpOw0KKwkJfQ0KKwkJcmV0dXJuIHN1cGVyLmVHZXQoZmVhdHVyZUlELCByZXNvbHZlLCBjb3JlVHlwZSk7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlAU3VwcHJlc3NXYXJuaW5ncygidW5jaGVja2VkIikNCisJQE92ZXJyaWRlDQorCXB1YmxpYyB2b2lkIGVTZXQoaW50IGZlYXR1cmVJRCwgT2JqZWN0IG5ld1ZhbHVlKSB7DQorCQlzd2l0Y2ggKGZlYXR1cmVJRCkgew0KKwkJCWNhc2UgU3RhbmRhcmRQYWNrYWdlLklOSVRJQUxJWkVSX19ESVNFQVNFX05BTUU6DQorCQkJCXNldERpc2Vhc2VOYW1lKChTdHJpbmcpbmV3VmFsdWUpOw0KKwkJCQlyZXR1cm47DQorCQkJY2FzZSBTdGFuZGFyZFBhY2thZ2UuSU5JVElBTElaRVJfX1RBUkdFVF9JU09fS0VZOg0KKwkJCQlzZXRUYXJnZXRJU09LZXkoKFN0cmluZyluZXdWYWx1ZSk7DQorCQkJCXJldHVybjsNCisJCQljYXNlIFN0YW5kYXJkUGFja2FnZS5JTklUSUFMSVpFUl9fVEFSR0VUX1VSSToNCisJCQkJc2V0VGFyZ2V0VVJJKChVUkkpbmV3VmFsdWUpOw0KKwkJCQlyZXR1cm47DQorCQkJY2FzZSBTdGFuZGFyZFBhY2thZ2UuSU5JVElBTElaRVJfX1BPUFVMQVRJT05fSURFTlRJRklFUjoNCisJCQkJc2V0UG9wdWxhdGlvbklkZW50aWZpZXIoKFN0cmluZyluZXdWYWx1ZSk7DQorCQkJCXJldHVybjsNCisJCQljYXNlIFN0YW5kYXJkUGFja2FnZS5JTklUSUFMSVpFUl9fQ09NUEFSVE1FTlRTOg0KKwkJCQlnZXRDb21wYXJ0bWVudHMoKS5jbGVhcigpOw0KKwkJCQlnZXRDb21wYXJ0bWVudHMoKS5hZGRBbGwoKENvbGxlY3Rpb248PyBleHRlbmRzIFN0cmluZz4pbmV3VmFsdWUpOw0KKwkJCQlyZXR1cm47DQorCQkJY2FzZSBTdGFuZGFyZFBhY2thZ2UuSU5JVElBTElaRVJfX0NPTVBBUlRNRU5UX1ZBTFVFUzoNCisJCQkJZ2V0Q29tcGFydG1lbnRWYWx1ZXMoKS5jbGVhcigpOw0KKwkJCQlnZXRDb21wYXJ0bWVudFZhbHVlcygpLmFkZEFsbCgoQ29sbGVjdGlvbjw/IGV4dGVuZHMgRG91YmxlPiluZXdWYWx1ZSk7DQorCQkJCXJldHVybjsNCisJCQljYXNlIFN0YW5kYXJkUGFja2FnZS5JTklUSUFMSVpFUl9fVVNFX0ZSQUNUSU9OUzoNCisJCQkJc2V0VXNlRnJhY3Rpb25zKChCb29sZWFuKW5ld1ZhbHVlKTsNCisJCQkJcmV0dXJuOw0KKwkJfQ0KKwkJc3VwZXIuZVNldChmZWF0dXJlSUQsIG5ld1ZhbHVlKTsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCUBPdmVycmlkZQ0KKwlwdWJsaWMgdm9pZCBlVW5zZXQoaW50IGZlYXR1cmVJRCkgew0KKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsNCisJCQljYXNlIFN0YW5kYXJkUGFja2FnZS5JTklUSUFMSVpFUl9fRElTRUFTRV9OQU1FOg0KKwkJCQlzZXREaXNlYXNlTmFtZShESVNFQVNFX05BTUVfRURFRkFVTFQpOw0KKwkJCQlyZXR1cm47DQorCQkJY2FzZSBTdGFuZGFyZFBhY2thZ2UuSU5JVElBTElaRVJfX1RBUkdFVF9JU09fS0VZOg0KKwkJCQlzZXRUYXJnZXRJU09LZXkoVEFSR0VUX0lTT19LRVlfRURFRkFVTFQpOw0KKwkJCQlyZXR1cm47DQorCQkJY2FzZSBTdGFuZGFyZFBhY2thZ2UuSU5JVElBTElaRVJfX1RBUkdFVF9VUkk6DQorCQkJCXNldFRhcmdldFVSSShUQVJHRVRfVVJJX0VERUZBVUxUKTsNCisJCQkJcmV0dXJuOw0KKwkJCWNhc2UgU3RhbmRhcmRQYWNrYWdlLklOSVRJQUxJWkVSX19QT1BVTEFUSU9OX0lERU5USUZJRVI6DQorCQkJCXNldFBvcHVsYXRpb25JZGVudGlmaWVyKFBPUFVMQVRJT05fSURFTlRJRklFUl9FREVGQVVMVCk7DQorCQkJCXJldHVybjsNCisJCQljYXNlIFN0YW5kYXJkUGFja2FnZS5JTklUSUFMSVpFUl9fQ09NUEFSVE1FTlRTOg0KKwkJCQlnZXRDb21wYXJ0bWVudHMoKS5jbGVhcigpOw0KKwkJCQlyZXR1cm47DQorCQkJY2FzZSBTdGFuZGFyZFBhY2thZ2UuSU5JVElBTElaRVJfX0NPTVBBUlRNRU5UX1ZBTFVFUzoNCisJCQkJZ2V0Q29tcGFydG1lbnRWYWx1ZXMoKS5jbGVhcigpOw0KKwkJCQlyZXR1cm47DQorCQkJY2FzZSBTdGFuZGFyZFBhY2thZ2UuSU5JVElBTElaRVJfX1VTRV9GUkFDVElPTlM6DQorCQkJCXNldFVzZUZyYWN0aW9ucyhVU0VfRlJBQ1RJT05TX0VERUZBVUxUKTsNCisJCQkJcmV0dXJuOw0KKwkJfQ0KKwkJc3VwZXIuZVVuc2V0KGZlYXR1cmVJRCk7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlAT3ZlcnJpZGUNCisJcHVibGljIGJvb2xlYW4gZUlzU2V0KGludCBmZWF0dXJlSUQpIHsNCisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7DQorCQkJY2FzZSBTdGFuZGFyZFBhY2thZ2UuSU5JVElBTElaRVJfX0RJU0VBU0VfTkFNRToNCisJCQkJcmV0dXJuIERJU0VBU0VfTkFNRV9FREVGQVVMVCA9PSBudWxsID8gZGlzZWFzZU5hbWUgIT0gbnVsbCA6ICFESVNFQVNFX05BTUVfRURFRkFVTFQuZXF1YWxzKGRpc2Vhc2VOYW1lKTsNCisJCQljYXNlIFN0YW5kYXJkUGFja2FnZS5JTklUSUFMSVpFUl9fVEFSR0VUX0lTT19LRVk6DQorCQkJCXJldHVybiBUQVJHRVRfSVNPX0tFWV9FREVGQVVMVCA9PSBudWxsID8gdGFyZ2V0SVNPS2V5ICE9IG51bGwgOiAhVEFSR0VUX0lTT19LRVlfRURFRkFVTFQuZXF1YWxzKHRhcmdldElTT0tleSk7DQorCQkJY2FzZSBTdGFuZGFyZFBhY2thZ2UuSU5JVElBTElaRVJfX1RBUkdFVF9VUkk6DQorCQkJCXJldHVybiBUQVJHRVRfVVJJX0VERUZBVUxUID09IG51bGwgPyB0YXJnZXRVUkkgIT0gbnVsbCA6ICFUQVJHRVRfVVJJX0VERUZBVUxULmVxdWFscyh0YXJnZXRVUkkpOw0KKwkJCWNhc2UgU3RhbmRhcmRQYWNrYWdlLklOSVRJQUxJWkVSX19QT1BVTEFUSU9OX0lERU5USUZJRVI6DQorCQkJCXJldHVybiBQT1BVTEFUSU9OX0lERU5USUZJRVJfRURFRkFVTFQgPT0gbnVsbCA/IHBvcHVsYXRpb25JZGVudGlmaWVyICE9IG51bGwgOiAhUE9QVUxBVElPTl9JREVOVElGSUVSX0VERUZBVUxULmVxdWFscyhwb3B1bGF0aW9uSWRlbnRpZmllcik7DQorCQkJY2FzZSBTdGFuZGFyZFBhY2thZ2UuSU5JVElBTElaRVJfX0NPTVBBUlRNRU5UUzoNCisJCQkJcmV0dXJuIGNvbXBhcnRtZW50cyAhPSBudWxsICYmICFjb21wYXJ0bWVudHMuaXNFbXB0eSgpOw0KKwkJCWNhc2UgU3RhbmRhcmRQYWNrYWdlLklOSVRJQUxJWkVSX19DT01QQVJUTUVOVF9WQUxVRVM6DQorCQkJCXJldHVybiBjb21wYXJ0bWVudFZhbHVlcyAhPSBudWxsICYmICFjb21wYXJ0bWVudFZhbHVlcy5pc0VtcHR5KCk7DQorCQkJY2FzZSBTdGFuZGFyZFBhY2thZ2UuSU5JVElBTElaRVJfX1VTRV9GUkFDVElPTlM6DQorCQkJCXJldHVybiB1c2VGcmFjdGlvbnMgIT0gVVNFX0ZSQUNUSU9OU19FREVGQVVMVDsNCisJCX0NCisJCXJldHVybiBzdXBlci5lSXNTZXQoZmVhdHVyZUlEKTsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCUBPdmVycmlkZQ0KKwlwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkgew0KKwkJaWYgKGVJc1Byb3h5KCkpIHJldHVybiBzdXBlci50b1N0cmluZygpOw0KKw0KKwkJU3RyaW5nQnVmZmVyIHJlc3VsdCA9IG5ldyBTdHJpbmdCdWZmZXIoc3VwZXIudG9TdHJpbmcoKSk7DQorCQlyZXN1bHQuYXBwZW5kKCIgKGRpc2Vhc2VOYW1lOiAiKTsgLy8kTk9OLU5MUy0xJA0KKwkJcmVzdWx0LmFwcGVuZChkaXNlYXNlTmFtZSk7DQorCQlyZXN1bHQuYXBwZW5kKCIsIHRhcmdldElTT0tleTogIik7IC8vJE5PTi1OTFMtMSQNCisJCXJlc3VsdC5hcHBlbmQodGFyZ2V0SVNPS2V5KTsNCisJCXJlc3VsdC5hcHBlbmQoIiwgdGFyZ2V0VVJJOiAiKTsgLy8kTk9OLU5MUy0xJA0KKwkJcmVzdWx0LmFwcGVuZCh0YXJnZXRVUkkpOw0KKwkJcmVzdWx0LmFwcGVuZCgiLCBwb3B1bGF0aW9uSWRlbnRpZmllcjogIik7IC8vJE5PTi1OTFMtMSQNCisJCXJlc3VsdC5hcHBlbmQocG9wdWxhdGlvbklkZW50aWZpZXIpOw0KKwkJcmVzdWx0LmFwcGVuZCgiLCBjb21wYXJ0bWVudHM6ICIpOyAvLyROT04tTkxTLTEkDQorCQlyZXN1bHQuYXBwZW5kKGNvbXBhcnRtZW50cyk7DQorCQlyZXN1bHQuYXBwZW5kKCIsIGNvbXBhcnRtZW50VmFsdWVzOiAiKTsgLy8kTk9OLU5MUy0xJA0KKwkJcmVzdWx0LmFwcGVuZChjb21wYXJ0bWVudFZhbHVlcyk7DQorCQlyZXN1bHQuYXBwZW5kKCIsIHVzZUZyYWN0aW9uczogIik7IC8vJE5PTi1OTFMtMSQNCisJCXJlc3VsdC5hcHBlbmQodXNlRnJhY3Rpb25zKTsNCisJCXJlc3VsdC5hcHBlbmQoJyknKTsNCisJCXJldHVybiByZXN1bHQudG9TdHJpbmcoKTsNCisJfQ0KKw0KKwlAT3ZlcnJpZGUNCisJcHVibGljIGJvb2xlYW4gZGVjb3JhdGVHcmFwaChTVEVNVGltZSB0aW1lKSB7DQorCQlpZiAoaXNHcmFwaERlY29yYXRlZCgpKSB7DQorCQkJcmV0dXJuIHRydWU7DQorCQl9DQorDQorCQlHcmFwaCBncmFwaCA9IGdldEdyYXBoKCk7DQorCQlEaXNlYXNlTW9kZWwgZGlzZWFzZU1vZGVsID0gbnVsbDsNCisJCWxhYmVsc1RvSW5pdGlhbGl6ZSA9IG5ldyBCYXNpY0VMaXN0PERpc2Vhc2VNb2RlbExhYmVsPigpOw0KKw0KKwkJLy8gVHJ5IHRvIGZpbmQgZGlzZWFzZSBtb2RlbA0KKwkJZm9yIChEZWNvcmF0b3IgZGVjb3JhdG9yIDogZ3JhcGguZ2V0RGVjb3JhdG9ycygpKSB7DQorCQkJaWYgKGRlY29yYXRvciBpbnN0YW5jZW9mIFN0YW5kYXJkRGlzZWFzZU1vZGVsKSB7DQorCQkJCVN0YW5kYXJkRGlzZWFzZU1vZGVsIG1vZGVsID0gKFN0YW5kYXJkRGlzZWFzZU1vZGVsKSBkZWNvcmF0b3I7DQorDQorCQkJCWlmIChtb2RlbC5nZXREaXNlYXNlTmFtZSgpLmVxdWFscyhnZXREaXNlYXNlTmFtZSgpKSkgew0KKwkJCQkJZGlzZWFzZU1vZGVsID0gbW9kZWw7DQorCQkJCQlicmVhazsNCisJCQkJfQ0KKwkJCX0NCisJCX0NCisNCisJCWlmIChkaXNlYXNlTW9kZWwgPT0gbnVsbCkgew0KKwkJCUFjdGl2YXRvci5sb2dFcnJvcigiVGhlIGRpc2Vhc2UgbmFtZWQgXCIiICsgZ2V0RGlzZWFzZU5hbWUoKQ0KKwkJCQkJKyAiXCIgd2FzIG5vdCBmb3VuZC4iLCBudWxsKTsNCisJCX0NCisNCisJCVVSSSB0YXJnZXQgPSBudWxsOw0KKw0KKwkJaWYgKGdldFRhcmdldFVSSSgpICE9IG51bGwpIHsNCisJCQl0YXJnZXQgPSBnZXRUYXJnZXRVUkkoKTsNCisJCX0gZWxzZSB7DQorCQkJdGFyZ2V0ID0gUmVnaW9uSW1wbC5jcmVhdGVSZWdpb25Ob2RlVVJJKGdldFRhcmdldElTT0tleSgpKTsNCisJCX0NCisNCisJCU5vZGUgcGFyZW50ID0gZ3JhcGguZ2V0Tm9kZSh0YXJnZXQpOw0KKwkJU2V0PE5vZGU+IGFsbE5vZGVzID0gTG9jYXRpb25VdGlsaXR5LmdldEFsbENoaWxkcmVuKHBhcmVudCk7DQorCQlhbGxOb2Rlcy5hZGQocGFyZW50KTsNCisNCisJCWZvciAoTm9kZSBub2RlIDogYWxsTm9kZXMpIHsNCisJCQlpZiAobm9kZSA9PSBudWxsKSB7DQorCQkJCUFjdGl2YXRvci5sb2dFcnJvcigiVGhlIG5vZGUgdG8gaW5mZWN0IHNwZWNpZmllZCBieSB0aGUgVVJJIFwiIg0KKwkJCQkJCSsgdGFyZ2V0DQorCQkJCQkJKyAiXCIgd2FzIG5vdCBmb3VuZC4gIFRoZSBVUkkgaXMgbGlrZWx5IGluY29ycmVjdC4iLA0KKwkJCQkJCW51bGwpOw0KKwkJCQljb250aW51ZTsNCisJCQl9DQorDQorCQkJLy8gVHJ5IHRvIGZpbmQgZGlzZWFzZSBsYWJlbA0KKwkJCWZvciAoTm9kZUxhYmVsIG5vZGVMYWJlbCA6IG5vZGUuZ2V0TGFiZWxzKCkpIHsNCisJCQkJaWYgKG5vZGVMYWJlbCBpbnN0YW5jZW9mIERpc2Vhc2VNb2RlbExhYmVsKSB7DQorCQkJCQlEaXNlYXNlTW9kZWxMYWJlbCBkaXNlYXNlTW9kZWxMYWJlbCA9IChEaXNlYXNlTW9kZWxMYWJlbCkgbm9kZUxhYmVsOw0KKw0KKwkJCQkJaWYgKGRpc2Vhc2VNb2RlbExhYmVsLmdldERlY29yYXRvcigpID09IGRpc2Vhc2VNb2RlbA0KKwkJCQkJCQkmJiBkaXNlYXNlTW9kZWxMYWJlbC5nZXRQb3B1bGF0aW9uTW9kZWxMYWJlbCgpDQorCQkJCQkJCQkJLmdldFBvcHVsYXRpb25JZGVudGlmaWVyKCkNCisJCQkJCQkJCQkuZXF1YWxzKHRoaXMuZ2V0UG9wdWxhdGlvbklkZW50aWZpZXIoKSkpIHsNCisJCQkJCQlkb0luaXRpYWxpemF0aW9uKGRpc2Vhc2VNb2RlbExhYmVsKTsNCisJCQkJCQlsYWJlbHNUb0luaXRpYWxpemUuYWRkKGRpc2Vhc2VNb2RlbExhYmVsKTsNCisJCQkJCQlicmVhazsNCisJCQkJCX0NCisJCQkJfQ0KKwkJCX0NCisJCX0NCisNCisJCXNldFByb2dyZXNzKDEuMCk7DQorCQlyZXR1cm4gdHJ1ZTsNCisJfQ0KKw0KKwlAT3ZlcnJpZGUNCisJcHVibGljIHZvaWQgcmVzZXRMYWJlbHMoKSB7DQorCQlmb3IgKERpc2Vhc2VNb2RlbExhYmVsIGxhYmVsIDogbGFiZWxzVG9Jbml0aWFsaXplKSB7DQorCQkJZG9Jbml0aWFsaXphdGlvbihsYWJlbCk7DQorCQl9DQorCX0NCisNCisJcHJpdmF0ZSB2b2lkIGRvSW5pdGlhbGl6YXRpb24oRGlzZWFzZU1vZGVsTGFiZWwgbGFiZWwpIHsNCisJCURpc2Vhc2VNb2RlbExhYmVsVmFsdWUgY3VycmVudCA9IChEaXNlYXNlTW9kZWxMYWJlbFZhbHVlKSBsYWJlbA0KKwkJCQkuZ2V0Q3VycmVudFZhbHVlKCk7DQorCQlkb3VibGUgcG9wdWxhdGlvbkNvdW50ID0gY3VycmVudC5nZXRQb3B1bGF0aW9uQ291bnQoKTsNCisJCUVMaXN0PEVBdHRyaWJ1dGU+IGF0dHJpYnV0ZXMgPSBjdXJyZW50LmVDbGFzcygpLmdldEVBbGxBdHRyaWJ1dGVzKCk7DQorCQlkb3VibGUgcG9wdWxhdGlvblRvSW5pdGlhbGl6ZSA9IDAuMDsNCisNCisJCWlmICghaXNVc2VGcmFjdGlvbnMoKSkgew0KKwkJCWZvciAoZG91YmxlIHYgOiBnZXRDb21wYXJ0bWVudFZhbHVlcygpKSB7DQorCQkJCXBvcHVsYXRpb25Ub0luaXRpYWxpemUgKz0gdjsNCisJCQl9DQorCQl9DQorDQorCQlpZiAocG9wdWxhdGlvblRvSW5pdGlhbGl6ZSA+IHBvcHVsYXRpb25Db3VudCkgew0KKwkJCUFjdGl2YXRvci5sb2dFcnJvcigNCisJCQkJCSJUb3RhbCBwb3B1bGF0aW9uIGNvdW50IGxvd2VyIHRoYW4gaW5pdGlhbGl6ZXIgdmFsdWVzLiIsDQorCQkJCQludWxsKTsNCisJCX0NCisNCisJCWZvciAoRUF0dHJpYnV0ZSBhdHRyaWJ1dGUgOiBhdHRyaWJ1dGVzKSB7DQorCQkJZm9yIChpbnQgaSA9IDA7IGkgPCBnZXRDb21wYXJ0bWVudHMoKS5zaXplKCk7IGkrKykgew0KKwkJCQlpZiAoYXR0cmlidXRlLmdldE5hbWUoKS5lcXVhbHMoZ2V0Q29tcGFydG1lbnRzKCkuZ2V0KGkpKSkgew0KKwkJCQkJaWYgKGlzVXNlRnJhY3Rpb25zKCkpIHsNCisJCQkJCQljdXJyZW50LmVTZXQoYXR0cmlidXRlLCBnZXRDb21wYXJ0bWVudFZhbHVlcygpLmdldChpKQ0KKwkJCQkJCQkJKiBwb3B1bGF0aW9uQ291bnQpOw0KKwkJCQkJfSBlbHNlIHsNCisJCQkJCQlpZiAoZ2V0Q29tcGFydG1lbnRzKCkuZ2V0KGkpLmVxdWFscygicyIpKSB7DQorCQkJCQkJCWN1cnJlbnQuZVNldChhdHRyaWJ1dGUsIHBvcHVsYXRpb25Db3VudA0KKwkJCQkJCQkJCS0gcG9wdWxhdGlvblRvSW5pdGlhbGl6ZSk7DQorCQkJCQkJfSBlbHNlIHsNCisJCQkJCQkJY3VycmVudC5lU2V0KGF0dHJpYnV0ZSwNCisJCQkJCQkJCQlnZXRDb21wYXJ0bWVudFZhbHVlcygpLmdldChpKSk7DQorCQkJCQkJfQ0KKwkJCQkJfQ0KKwkJCQl9DQorCQkJfQ0KKwkJfQ0KKwl9DQorDQorfSAvLyBJbml0aWFsaXplckltcGwNCmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3N0YW5kYXJkL2ltcGwvU0VJUkltcGwuamF2YSBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvc3RhbmRhcmQvaW1wbC9TRUlSSW1wbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMyMjliOWMKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3N0YW5kYXJkL2ltcGwvU0VJUkltcGwuamF2YQpAQCAtMCwwICsxLDM0NiBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuaW1wbDsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzczsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuaW1wbC5FTm90aWZpY2F0aW9uSW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguTm9kZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuU1RFTVRpbWU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLkRpc2Vhc2VNb2RlbExhYmVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5EaXNlYXNlTW9kZWxMYWJlbFZhbHVlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TRUlSOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TRUlSTGFiZWxWYWx1ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbFZhbHVlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZEZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmludGVydmVudGlvbnMuU3RhbmRhcmRJbnRlcnZlbnRpb25MYWJlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmludGVydmVudGlvbnMuU3RhbmRhcmRJbnRlcnZlbnRpb25MYWJlbFZhbHVlOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IEFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5TRUlSPC9iPjwvZW0+Jy4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogPHA+CisgKiBUaGUgZm9sbG93aW5nIGZlYXR1cmVzIGFyZSBpbXBsZW1lbnRlZDoKKyAqIDx1bD4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuaW1wbC5TRUlSSW1wbCNnZXRJbmN1YmF0aW9uUmF0ZSA8ZW0+SW5jdWJhdGlvbiBSYXRlPC9lbT59PC9saT4KKyAqIDwvdWw+CisgKiA8L3A+CisgKgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgYWJzdHJhY3QgY2xhc3MgU0VJUkltcGwgZXh0ZW5kcyBTSVJJbXBsIGltcGxlbWVudHMgU0VJUiB7CisKKwkvKioKKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0SW5jdWJhdGlvblJhdGUoKSA8ZW0+SW5jdWJhdGlvbiBSYXRlPC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZ2V0SW5jdWJhdGlvblJhdGUoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgZG91YmxlIElOQ1VCQVRJT05fUkFURV9FREVGQVVMVCA9IDAuMDsKKworCS8qKgorCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldEluY3ViYXRpb25SYXRlKCkgPGVtPkluY3ViYXRpb24gUmF0ZTwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI2dldEluY3ViYXRpb25SYXRlKCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgZG91YmxlIGluY3ViYXRpb25SYXRlID0gSU5DVUJBVElPTl9SQVRFX0VERUZBVUxUOworCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBTRUlSSW1wbCgpIHsKKwkJc3VwZXIoKTsKKwl9CisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5pbXBsLlNJSW1wbCNjb21wdXRlRGlzZWFzZURlbHRhcyhTdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsVmFsdWUsCisJICogICAgICBTdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsLCBsb25nKQorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBTdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsVmFsdWUgY29tcHV0ZURpc2Vhc2VEZWx0YXMoCisJCQlmaW5hbCBTVEVNVGltZSB0aW1lLCAKKwkJCWZpbmFsIFN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZSBjdXJyZW50U3RhdGUsCisJCQlmaW5hbCBTdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsIGRpc2Vhc2VMYWJlbCwgZmluYWwgbG9uZyB0aW1lRGVsdGEsIERpc2Vhc2VNb2RlbExhYmVsVmFsdWUgcmV0dXJuVmFsdWUpIHsKKwkJZmluYWwgU0VJUkxhYmVsVmFsdWUgY3VycmVudFNFSVIgPSAoU0VJUkxhYmVsVmFsdWUpIGN1cnJlbnRTdGF0ZTsKKwkJCisJCS8vIENvbXB1dGUgZGVhdGhzCisJCWZpbmFsIGRvdWJsZSBhZGp1c3RlZEluZmVjdGlvdXNNb3J0YWxpdHlSYXRlID0gZ2V0QWRqdXN0ZWRJbmZlY3Rpb3VzTW9ydGFsaXR5UmF0ZSh0aW1lRGVsdGEpOworCQlmaW5hbCBkb3VibGUgZGlzZWFzZURlYXRocyA9IGFkanVzdGVkSW5mZWN0aW91c01vcnRhbGl0eVJhdGUKKwkJCQkqIGN1cnJlbnRTRUlSLmdldEkoKTsKKwkKKwkJLy8gVGhpcyBpcyBiZXRhKgorCQlkb3VibGUgdHJhbnNtaXNzaW9uUmF0ZSA9IGdldEFkanVzdGVkVHJhbnNtaXNzaW9uUmF0ZSh0aW1lRGVsdGEpOworCQkKKwkJaWYoIXRoaXMuaXNGcmVxdWVuY3lEZXBlbmRlbnQoKSkgdHJhbnNtaXNzaW9uUmF0ZSAqPSBnZXRUcmFuc21pc3Npb25SYXRlU2NhbGVGYWN0b3IoZGlzZWFzZUxhYmVsKTsKKwkJCisJCQkKKwkJLy8gVGhlIGVmZmVjdGl2ZSBJbmZlY3Rpb3VzIHBvcHVsYXRpb24gIGlzIGEgZGltZW5zaW9ubGVzIG51bWJlciBub3JtYWxpemUgYnkgdG90YWwKKwkJLy8gcG9wdWxhdGlvbiB1c2VkIGluIHRlaCBjb21wdXRhdGlvbiBvZiBiZXRzKlMqaSB3aGVyZSBpID0gSWVmZmVjdGl2ZS9Qb3AuCisJCS8vIFRoaXMgaW5jbHVkZXMgYSBjb3JyZWN0aW9uIHRvIHRoZSBjdXJyZW50CisJCS8vIGluZmVjdGlvdXMgcG9wdWxhdGlvbiAoSWVmZmVjdGl2ZSkgYmFzZWQgb24gdGhlIGNvbnNlcnZlZCBleGNoYW5nZSBvZiBwZW9wbGUgKGNpcmN1bGF0aW9uKQorCQkvLyBiZXR3ZWVuIHJlZ2lvbnMuIE5vdGUgdGhhdCB0aGlzIGlzIG5vIHRoZSAiYXJyaXZhbHMiIGFuZCAiZGVwYXJ0dXJlcyIgd2hpY2ggYXJlCisJCS8vIGEgZGlmZmVyZW50IHByb2Nlc3MuCisJCWZpbmFsIGRvdWJsZSBlZmZlY3RpdmVJbmZlY3Rpb3VzID0gZ2V0Tm9ybWFsaXplZEVmZmVjdGl2ZUluZmVjdGlvdXMoZGlzZWFzZUxhYmVsLmdldE5vZGUoKSwgZGlzZWFzZUxhYmVsLCBjdXJyZW50U0VJUi5nZXRJKCkpOworCisJCS8qCisJCSAqIENvbXB1dGUgc3RhdGUgdHJhbnNpdGlvbnMKKwkJICogCisJCSAqIFJlZ2FyZGluZyBjb21wdXRpbmcgdGhlIG51bWJlciBvZiB0cmFuc2l0aW9ucyBmcm9tIFN1c2NlcHRpYmxlIHRvIEV4cG9zZWQ6CisJCSAqIEluIGEgbGluZWFyIG1vZGVsIHRoZSAiZWZmZWN0aXZlIiBudW1iZXIgb2YgaW5mZWN0aW91cyBwZW9wbGUgaXMganVzdAorCQkgKiB0aGUgbnVtYmVyIG9mIGluZmVjdGlvdXMgcGVvcGxlIEluIGEgbm9ubGluZWFyIG1vZGVsIHdlIGhhdmUgYQorCQkgKiBub25MaW5lYXJpdHkgZXhwb25lbnQgdGhhdCBpcyA+IDEgdGhpcyBtb2RlbHMgdGhlIGVmZmVjdCBvZiBpbW11bmUKKwkJICogc3lzdGVtIHNhdHVyYXRpb24gd2hlbiBTdXNjZXB0aWJsZSBwZW9wbGUgYXJlIGV4cG9zZWQgdG8gbGFyZ2UKKwkJICogbnVtYmVycyBvZiBpbmZlY3Rpb3VzIHBlb3BsZS4gdGhlbiB0aGUgImVmZmVjdGl2ZSIgbnVtYmVyIG9mCisJCSAqIGluZmVjdGlvdXMgcGVvcGxlIGlzIElebm9uTGluZWFyaXR5IGV4cG9uZW50IHRvIGFsbG93IGZvciBlaXRoZXIKKwkJICogbGluZWFyIG9yIG5vbmxpbmVhciBtb2RlbHMgd2UgYWx3YXlzIGNhbGN1bGF0ZSBJXm5vbkxpbmVhcml0eQorCQkgKiBleHBvbmVudCBhbmQgYWxsb3cgbm9uTGluZWFyaXR5IGV4cG9uZW50ID49IDEuMAorCQkgKi8KKwkJZG91YmxlIG51bWJlck9mSW5mZWN0ZWRUb1JlY292ZXJlZCA9IGdldEFkanVzdGVkUmVjb3ZlcnlSYXRlKHRpbWVEZWx0YSkKKwkJKiBjdXJyZW50U0VJUi5nZXRJKCk7CisJCWRvdWJsZSBudW1iZXJPZlJlY292ZXJlZFRvU3VzY2VwdGlibGUgPSBnZXRBZGp1c3RlZEltbXVuaXR5TG9zc1JhdGUodGltZURlbHRhKQorCQkqIGN1cnJlbnRTRUlSLmdldFIoKTsKKwkJLy8gTmVlZCB0byBjaGVja2VkIHdoYXQgZG8gZG8gaGVyZS4gSWYgbm9uIGxpbmVhciBjb2VmZmljaWVudCBpcyBub3QgMSBhbmQKKwkJLy8gdGhlIGVmZmVjdGl2ZSBpbmZlY3Rpb3VzIGlzIG5lZ2F0aXZlICh3aGljaCBpcyBwb3NzaWJsZSksIHdoYXQgZG8gZG8/IAorCQkvLyBMZXQncyBmYWxsIGJhY2sgb24gdGhlIGxpbmVhciBtZXRob2QgZm9yIG5vdy4KKwkJZG91YmxlIG51bWJlck9mU3VzY2VwdGlibGVUb0V4cG9zZWQgPSAwLjA7CisJCWlmKGdldE5vbkxpbmVhcml0eUNvZWZmaWNpZW50KCkgIT0gMS4wICYmIGVmZmVjdGl2ZUluZmVjdGlvdXMgPj0wLjApCisJCQludW1iZXJPZlN1c2NlcHRpYmxlVG9FeHBvc2VkID0gdHJhbnNtaXNzaW9uUmF0ZQorCQkJKiBjdXJyZW50U0VJUi5nZXRTKCkqIE1hdGgucG93KGVmZmVjdGl2ZUluZmVjdGlvdXMsIGdldE5vbkxpbmVhcml0eUNvZWZmaWNpZW50KCkpOworCQllbHNlIAorCQkJbnVtYmVyT2ZTdXNjZXB0aWJsZVRvRXhwb3NlZCA9IHRyYW5zbWlzc2lvblJhdGUKKwkJCSogY3VycmVudFNFSVIuZ2V0UygpKiBlZmZlY3RpdmVJbmZlY3Rpb3VzOworCQlkb3VibGUgbnVtYmVyT2ZFeHBvc2VkVG9JbmZlY3Rpb3VzID0gZ2V0QWRqdXN0ZWRJbmN1YmF0aW9uUmF0ZSh0aW1lRGVsdGEpCisJCSogY3VycmVudFNFSVIuZ2V0RSgpOworCQkJCisJCQorCQkvLyBEZXRlcm1pbmUgZGVsdGEgUworCQlkb3VibGUgZGVsdGFTID0gbnVtYmVyT2ZSZWNvdmVyZWRUb1N1c2NlcHRpYmxlIC0gbnVtYmVyT2ZTdXNjZXB0aWJsZVRvRXhwb3NlZDsKKwkJLy8gRGV0ZXJtaW5lIGRlbHRhIEUKKwkJZG91YmxlIGRlbHRhRSA9IG51bWJlck9mU3VzY2VwdGlibGVUb0V4cG9zZWQgLSBudW1iZXJPZkV4cG9zZWRUb0luZmVjdGlvdXM7CQkKKwkJLy8gRGV0ZXJtaW5lIGRlbHRhIEkKKwkJZG91YmxlIGRlbHRhSSA9IG51bWJlck9mRXhwb3NlZFRvSW5mZWN0aW91cyAtIG51bWJlck9mSW5mZWN0ZWRUb1JlY292ZXJlZCAtIGRpc2Vhc2VEZWF0aHM7CisJCS8vIERldGVybWluZSBkZWx0YSBSCisJCWRvdWJsZSBkZWx0YVIgPSBudW1iZXJPZkluZmVjdGVkVG9SZWNvdmVyZWQgLSBudW1iZXJPZlJlY292ZXJlZFRvU3VzY2VwdGlibGU7CisJCQorCQlTdGFuZGFyZEludGVydmVudGlvbkxhYmVsIHNjbCA9IGZpbmRJbnRlcnZlbnRpb25MYWJlbCgoTm9kZSlkaXNlYXNlTGFiZWwuZ2V0SWRlbnRpZmlhYmxlKCkpOworCQlpZihzY2wgIT0gbnVsbCkgeworCQkJZG91YmxlIHZhY2NpbmF0aW9ucyA9ICgoU3RhbmRhcmRJbnRlcnZlbnRpb25MYWJlbFZhbHVlKXNjbC5nZXRDdXJyZW50VmFsdWUoKSkuZ2V0VmFjY2luYXRpb25zKCk7CisJCQlkb3VibGUgaXNvbGF0aW9ucyA9ICgoU3RhbmRhcmRJbnRlcnZlbnRpb25MYWJlbFZhbHVlKXNjbC5nZXRDdXJyZW50VmFsdWUoKSkuZ2V0SXNvbGF0aW9ucygpOworCQkJdmFjY2luYXRpb25zICo9ICgoZG91YmxlKSB0aW1lRGVsdGEgLyAoZG91YmxlKSBnZXRUaW1lUGVyaW9kKCkpOworCQkJaXNvbGF0aW9ucyAqPSAoKGRvdWJsZSkgdGltZURlbHRhIC8gKGRvdWJsZSkgZ2V0VGltZVBlcmlvZCgpKTsKKwkJCWlmKGN1cnJlbnRTRUlSLmdldFMoKSA8IHZhY2NpbmF0aW9ucykgdmFjY2luYXRpb25zID0gY3VycmVudFNFSVIuZ2V0UygpOworCQkJaWYoY3VycmVudFNFSVIuZ2V0SSgpIDwgaXNvbGF0aW9ucykgaXNvbGF0aW9ucyA9IGN1cnJlbnRTRUlSLmdldEkoKTsKKwkJCQkJIAorCQkJZGVsdGFTIC09IHZhY2NpbmF0aW9uczsKKwkJCWRlbHRhUiArPSB2YWNjaW5hdGlvbnM7CisJCQlkZWx0YUkgLT0gaXNvbGF0aW9uczsKKwkJCWRlbHRhUiArPSBpc29sYXRpb25zOworCQl9CisJCVNFSVJMYWJlbFZhbHVlSW1wbCByZXQgPSAoU0VJUkxhYmVsVmFsdWVJbXBsKXJldHVyblZhbHVlOworCQlyZXQuc2V0UyhkZWx0YVMpOworCQlyZXQuc2V0RShkZWx0YUUpOworCQlyZXQuc2V0SShkZWx0YUkpOworCQlyZXQuc2V0SW5jaWRlbmNlKG51bWJlck9mU3VzY2VwdGlibGVUb0V4cG9zZWQpOworCQlyZXQuc2V0UihkZWx0YVIpOworCQlyZXQuc2V0RGlzZWFzZURlYXRocyhkaXNlYXNlRGVhdGhzKTsKKwkJcmV0dXJuIHJldDsKKwkKKwl9IC8vIGNvbXB1dGVEaXNlYXNlRGVsdGFzCisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5pbXBsLkRpc2Vhc2VNb2RlbEltcGwjY3JlYXRlRGlzZWFzZU1vZGVsTGFiZWwoKQorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBEaXNlYXNlTW9kZWxMYWJlbCBjcmVhdGVEaXNlYXNlTW9kZWxMYWJlbChTdHJpbmcgcG9wdWxhdGlvbklkZW50aWZpZXIpIHsKKwkJcmV0dXJuIFN0YW5kYXJkRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlU0VJUkxhYmVsKCk7CisJfSAvLyBjcmVhdGVEaXNlYXNlTW9kZWxMYWJlbAorCQorCUBPdmVycmlkZQorCXB1YmxpYyBEaXNlYXNlTW9kZWxMYWJlbFZhbHVlIGNyZWF0ZURpc2Vhc2VNb2RlbExhYmVsVmFsdWUoU3RyaW5nIHBvcHVsYXRpb25JZGVudGlmaWVyKSB7CisJCXJldHVybiBTdGFuZGFyZEZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZVNFSVJMYWJlbFZhbHVlKCk7CisJfSAvLyBjcmVhdGVEaXNlYXNlTW9kZWxMYWJlbFZhbHVlCisJCisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIEVDbGFzcyBlU3RhdGljQ2xhc3MoKSB7CisJCXJldHVybiBTdGFuZGFyZFBhY2thZ2UuTGl0ZXJhbHMuU0VJUjsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEByZXR1cm4KKwkgKiAKKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIGRvdWJsZSBnZXRJbmN1YmF0aW9uUmF0ZSgpIHsKKwkJcmV0dXJuIGluY3ViYXRpb25SYXRlOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogCisJICogQHBhcmFtIG5ld0luY3ViYXRpb25SYXRlCisJICogCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIHNldEluY3ViYXRpb25SYXRlKGRvdWJsZSBuZXdJbmN1YmF0aW9uUmF0ZSkgeworCQlkb3VibGUgb2xkSW5jdWJhdGlvblJhdGUgPSBpbmN1YmF0aW9uUmF0ZTsKKwkJaW5jdWJhdGlvblJhdGUgPSBuZXdJbmN1YmF0aW9uUmF0ZTsKKwkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQorCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgU3RhbmRhcmRQYWNrYWdlLlNFSVJfX0lOQ1VCQVRJT05fUkFURSwgb2xkSW5jdWJhdGlvblJhdGUsIGluY3ViYXRpb25SYXRlKSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAcGFyYW0gdGltZURlbHRhCisJICogICAgICAgICAgICB0aGUgdGltZSBwZXJpb2QgdG8gYWRqdXN0IHRoZSByYXRlIHRvCisJICogQHJldHVybiB0aGUgYWRqdXN0ZWQgcmF0ZQorCSAqIAorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJcHVibGljIGRvdWJsZSBnZXRBZGp1c3RlZEluY3ViYXRpb25SYXRlKGxvbmcgdGltZURlbHRhKSB7CisJCXJldHVybiBnZXRJbmN1YmF0aW9uUmF0ZSgpCisJCQkJKiAoKGRvdWJsZSkgdGltZURlbHRhIC8gKGRvdWJsZSkgZ2V0VGltZVBlcmlvZCgpKTsKKwl9IC8vIGdldEFkanVzdGVkSW5jdWJhdGlvblJhdGUKKworCQorCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogCisJICogQHBhcmFtIGZlYXR1cmVJRAorCSAqIEBwYXJhbSByZXNvbHZlCisJICogQHBhcmFtIGNvcmVUeXBlCisJICogCisJICogQHJldHVybgorCSAqIAorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgT2JqZWN0IGVHZXQoaW50IGZlYXR1cmVJRCwgYm9vbGVhbiByZXNvbHZlLCBib29sZWFuIGNvcmVUeXBlKSB7CisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7CisJCQljYXNlIFN0YW5kYXJkUGFja2FnZS5TRUlSX19JTkNVQkFUSU9OX1JBVEU6CisJCQkJcmV0dXJuIGdldEluY3ViYXRpb25SYXRlKCk7CisJCX0KKwkJcmV0dXJuIHN1cGVyLmVHZXQoZmVhdHVyZUlELCByZXNvbHZlLCBjb3JlVHlwZSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAcGFyYW0gZmVhdHVyZUlECisJICogQHBhcmFtIG5ld1ZhbHVlCisJICogCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGVTZXQoaW50IGZlYXR1cmVJRCwgT2JqZWN0IG5ld1ZhbHVlKSB7CisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7CisJCQljYXNlIFN0YW5kYXJkUGFja2FnZS5TRUlSX19JTkNVQkFUSU9OX1JBVEU6CisJCQkJc2V0SW5jdWJhdGlvblJhdGUoKERvdWJsZSluZXdWYWx1ZSk7CisJCQkJcmV0dXJuOworCQl9CisJCXN1cGVyLmVTZXQoZmVhdHVyZUlELCBuZXdWYWx1ZSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAcGFyYW0gZmVhdHVyZUlECisJICogCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGVVbnNldChpbnQgZmVhdHVyZUlEKSB7CisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7CisJCQljYXNlIFN0YW5kYXJkUGFja2FnZS5TRUlSX19JTkNVQkFUSU9OX1JBVEU6CisJCQkJc2V0SW5jdWJhdGlvblJhdGUoSU5DVUJBVElPTl9SQVRFX0VERUZBVUxUKTsKKwkJCQlyZXR1cm47CisJCX0KKwkJc3VwZXIuZVVuc2V0KGZlYXR1cmVJRCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAcGFyYW0gZmVhdHVyZUlECisJICogCisJICogQHJldHVybgorCSAqIAorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgYm9vbGVhbiBlSXNTZXQoaW50IGZlYXR1cmVJRCkgeworCQlzd2l0Y2ggKGZlYXR1cmVJRCkgeworCQkJY2FzZSBTdGFuZGFyZFBhY2thZ2UuU0VJUl9fSU5DVUJBVElPTl9SQVRFOgorCQkJCXJldHVybiBpbmN1YmF0aW9uUmF0ZSAhPSBJTkNVQkFUSU9OX1JBVEVfRURFRkFVTFQ7CisJCX0KKwkJcmV0dXJuIHN1cGVyLmVJc1NldChmZWF0dXJlSUQpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogCisJICogQHJldHVybgorCSAqIAorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkgeworCQlpZiAoZUlzUHJveHkoKSkgcmV0dXJuIHN1cGVyLnRvU3RyaW5nKCk7CisKKwkJU3RyaW5nQnVmZmVyIHJlc3VsdCA9IG5ldyBTdHJpbmdCdWZmZXIoc3VwZXIudG9TdHJpbmcoKSk7CisJCXJlc3VsdC5hcHBlbmQoIiAoaW5jdWJhdGlvblJhdGU6ICIpOyAvLyROT04tTkxTLTEkCisJCXJlc3VsdC5hcHBlbmQoaW5jdWJhdGlvblJhdGUpOworCQlyZXN1bHQuYXBwZW5kKCcpJyk7CisJCXJldHVybiByZXN1bHQudG9TdHJpbmcoKTsKKwl9CisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5pbXBsLk5vZGVEZWNvcmF0b3JJbXBsI3NhbmUoKQorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBib29sZWFuIHNhbmUoKSB7CisJCWJvb2xlYW4gcmV0VmFsdWUgPSBzdXBlci5zYW5lKCk7CisKKwkJcmV0VmFsdWUgPSByZXRWYWx1ZSAmJiBnZXRJbmN1YmF0aW9uUmF0ZSgpID49IElOQ1VCQVRJT05fUkFURV9FREVGQVVMVDsKKwkJYXNzZXJ0IHJldFZhbHVlOworCisJCXJldFZhbHVlID0gcmV0VmFsdWUgJiYgIURvdWJsZS5pc0luZmluaXRlKGdldEluY3ViYXRpb25SYXRlKCkpOworCQlhc3NlcnQgcmV0VmFsdWU7CisJCQorCQlyZXRWYWx1ZSA9IHJldFZhbHVlICYmICFEb3VibGUuaXNOYU4oZ2V0SW5jdWJhdGlvblJhdGUoKSk7CisJCWFzc2VydCByZXRWYWx1ZTsKKwkJCisJCXJldHVybiByZXRWYWx1ZTsKKwl9IC8vIHNhbmUKKworfSAvLyBTRUlSSW1wbApkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9zdGFuZGFyZC9pbXBsL1NFSVJMYWJlbEltcGwuamF2YSBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvc3RhbmRhcmQvaW1wbC9TRUlSTGFiZWxJbXBsLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmYxNzBmYQotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvc3RhbmRhcmQvaW1wbC9TRUlSTGFiZWxJbXBsLmphdmEKQEAgLTAsMCArMSw3NiBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuaW1wbDsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlVSSTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5JbnRlcm5hbEVPYmplY3Q7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLmltcGwuRU5vdGlmaWNhdGlvbkltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLlNURU1VUkk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkxhYmVsVmFsdWU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlNFSVJMYWJlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU0VJUkxhYmVsVmFsdWU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlNJTGFiZWxWYWx1ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmRGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZFBhY2thZ2U7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnCisgKiA8ZW0+PGI+U0VJUiBMYWJlbDwvYj48L2VtPicuIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogPHA+CisgKiA8L3A+CisgKgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgU0VJUkxhYmVsSW1wbCBleHRlbmRzIFN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWxJbXBsIGltcGxlbWVudHMKKwkJU0VJUkxhYmVsIHsKKworCS8qKgorCSAqIFRoaXMgaXMgdGhlIHRvcC1sZXZlbCBzZWdtZW50IGZvciBhbGwgdHlwZSBVUkkncyBmb3IgU0VJUiBkaXNlYXNlIG1vZGVsCisJICogbGFiZWxzLgorCSAqLworCVN0cmluZyBVUklfVFlQRV9TRUlSX0xBQkVMX1NFR01FTlQgPSBVUklfVFlQRV9TVEFOREFSRF9ESVNFQVNFX01PREVMX0xBQkVMX1NFR01FTlQKKwkJCSsgIi9zZWlyIjsKKworCS8qKgorCSAqIFRoaXMgaXMgdGhlIHR5cGUgVVJJIGZvciBzdGFuZGFyZCBTRUlSIGRpc2Vhc2UgbGFiZWxzCisJICovCisJVVJJIFVSSV9UWVBFX1NFSVJfTEFCRUwgPSBTVEVNVVJJCisJCQkuY3JlYXRlVHlwZVVSSShVUklfVFlQRV9TRUlSX0xBQkVMX1NFR01FTlQpOworCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogCisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlwcm90ZWN0ZWQgU0VJUkxhYmVsSW1wbCgpIHsKKwkJc3VwZXIoKTsKKwkJc2V0VHlwZVVSSShVUklfVFlQRV9TRUlSX0xBQkVMKTsKKwkJc2V0Q3VycmVudFZhbHVlKFN0YW5kYXJkRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlU0VJUkxhYmVsVmFsdWUoKSk7CisJCXNldE5leHRWYWx1ZShTdGFuZGFyZEZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZVNFSVJMYWJlbFZhbHVlKCkpOworCQlzZXRUZW1wVmFsdWUoU3RhbmRhcmRGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVTRUlSTGFiZWxWYWx1ZSgpKTsKKwkJc2V0UHJvYmVWYWx1ZShTdGFuZGFyZEZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZVNFSVJMYWJlbFZhbHVlKCkpOworCQlzZXRFcnJvclNjYWxlKFN0YW5kYXJkRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlU0VJUkxhYmVsVmFsdWUoKSk7CisJCXNldERlbHRhVmFsdWUoU3RhbmRhcmRGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVTRUlSTGFiZWxWYWx1ZSgpKTsKKwl9IC8vIFNFSVJMYWJlbEltcGwKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgRUNsYXNzIGVTdGF0aWNDbGFzcygpIHsKKwkJcmV0dXJuIFN0YW5kYXJkUGFja2FnZS5MaXRlcmFscy5TRUlSX0xBQkVMOworCX0KKworfSAvLyBTRUlSTGFiZWxJbXBsCmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3N0YW5kYXJkL2ltcGwvU0VJUkxhYmVsVmFsdWVJbXBsLmphdmEgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3N0YW5kYXJkL2ltcGwvU0VJUkxhYmVsVmFsdWVJbXBsLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODMxZTljZQotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvc3RhbmRhcmQvaW1wbC9TRUlSTGFiZWxWYWx1ZUltcGwuamF2YQpAQCAtMCwwICsxLDI2NCBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuaW1wbDsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLkVMaXN0OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQXR0cmlidXRlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLmltcGwuRU5vdGlmaWNhdGlvbkltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkludGVncmF0aW9uTGFiZWxWYWx1ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguTGFiZWxWYWx1ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU0VJUkxhYmVsVmFsdWU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkUGFja2FnZTsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiBBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICcKKyAqIDxlbT48Yj5TRUlSIExhYmVsIFZhbHVlPC9iPjwvZW0+Jy4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiA8cD4KKyAqIFRoZSBmb2xsb3dpbmcgZmVhdHVyZXMgYXJlIGltcGxlbWVudGVkOgorICogPHVsPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5pbXBsLlNFSVJMYWJlbFZhbHVlSW1wbCNnZXRFIDxlbT5FPC9lbT59PC9saT4KKyAqIDwvdWw+CisgKiA8L3A+CisgKgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgU0VJUkxhYmVsVmFsdWVJbXBsIGV4dGVuZHMgU0lSTGFiZWxWYWx1ZUltcGwgaW1wbGVtZW50cworCQlTRUlSTGFiZWxWYWx1ZSB7CisJLyoqCisJICogVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldEUoKSA8ZW0+RTwvZW0+fScgYXR0cmlidXRlLiA8IS0tCisJICogYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBzZWUgI2dldEUoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgZG91YmxlIEVfRURFRkFVTFQgPSAwLjA7CisKKwkvKioKKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRFKCkgPGVtPkU8L2VtPn0nIGF0dHJpYnV0ZS4gPCEtLQorCSAqIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAc2VlICNnZXRFKCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgZG91YmxlIGUgPSBFX0VERUZBVUxUOworCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBTRUlSTGFiZWxWYWx1ZUltcGwoKSB7CisJCXN1cGVyKCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBUaGlzIGlzIHVzZWQgdG8gY3JlYXRlIGluc3RhbmNlcyBmb3IgdGVzdGluZyBwdXJwb3Nlcy4KKwkgKiAKKwkgKiBAcGFyYW0gcworCSAqICAgICAgICAgICAgdGhlIG51bWJlciBvZiBzdXNjZXB0aWJsZSBwb3B1bGF0aW9uIG1lbWJlcnMKKwkgKiBAcGFyYW0gZQorCSAqICAgICAgICAgICAgdGhlIG51bWJlciBvZiBleHBvc2VkIHBvcHVsYXRpb24gbWVtYmVycworCSAqIEBwYXJhbSBpUgorCSAqICAgICAgICAgICAgdGhlIG51bWJlciBvZiByZWNvdmVyaW5nIGluZmVjdGlvdXMgcG9wdWxhdGlvbiBtZW1iZXJzCisJICogQHBhcmFtIGlGCisJICogICAgICAgICAgICB0aGUgbnVtYmVyIG9mIGZhdGFsbHkgaW5mZWN0aW91cyBwb3B1bGF0aW9uIG1lbWJlcnMKKwkgKiAKKwkgKiBAcGFyYW0gaW5jaWRlbmNlCisJICogICAgICAgICAgICB0aGUgbmV3IGluY2lkZW5jZSBmcm9tIHRoZSBpbnRlcmFjdGlvbiB0ZXJtIGluIHRoZSBjb21wYXJ0bWVudAorCSAqICAgICAgICAgICAgbW9kZWwKKwkgKiAKKwkgKiBAcGFyYW0gcgorCSAqICAgICAgICAgICAgdGhlIG51bWJlciBvZiByZWNvdmVyZWQgcG9wdWxhdGlvbiBtZW1iZXJzCisJICogQHBhcmFtIGJpcnRocworCSAqICAgICAgICAgICAgdGhlIG51bWJlciBvZiBiaXJ0aHMgdGhhdCBoYXZlIG9jY3VycmVkIGluIHRoZSBwb3B1bGF0aW9uCisJICogQHBhcmFtIGRlYXRocworCSAqICAgICAgICAgICAgdGhlIHRvdGFsIG51bWJlciBvZiBkZWF0aHMgdGhhdCBoYXZlIG9jY3VycmVkIGluIHRoZQorCSAqICAgICAgICAgICAgcG9wdWxhdGlvbgorCSAqIEBwYXJhbSBkaXNlYXNlRGVhdGhzCisJICogICAgICAgICAgICB0aGUgbnVtYmVyIG9mIGRlYXRocyBkdWUgdG8gdGhlIGRpc2Vhc2UgdGhhdCBoYXZlIG9jY3VycmVkIGluCisJICogICAgICAgICAgICB0aGUgcG9wdWxhdGlvbgorCSAqIAorCSAqICAgICAgICAgICAgPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICovCisJcHVibGljIFNFSVJMYWJlbFZhbHVlSW1wbChmaW5hbCBkb3VibGUgcywgZmluYWwgZG91YmxlIGUsIGZpbmFsIGRvdWJsZSBpLAorCQkJZG91YmxlIGluY2lkZW5jZSwgZmluYWwgZG91YmxlIHIsIGZpbmFsIGRvdWJsZSBkaXNlYXNlRGVhdGhzKSB7CisJCXN1cGVyKHMsIGksIGluY2lkZW5jZSwgciwgZGlzZWFzZURlYXRocyk7CisJCXRoaXMuc2V0RShlKTsKKwl9IC8vIFNFSVJMYWJlbFZhbHVlSW1wbAorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBUaGlzIGlzIHVzZWQgdG8gY3JlYXRlIGluc3RhbmNlcyBmb3IgdGVzdGluZyBwdXJwb3Nlcy4KKwkgKiAKKwkgKiBAcGFyYW0gcworCSAqICAgICAgICAgICAgdGhlIG51bWJlciBvZiBzdXNjZXB0aWJsZSBwb3B1bGF0aW9uIG1lbWJlcnMKKwkgKiBAcGFyYW0gZQorCSAqICAgICAgICAgICAgdGhlIG51bWJlciBvZiBleHBvc2VkIHBvcHVsYXRpb24gbWVtYmVycworCSAqIEBwYXJhbSBpUgorCSAqICAgICAgICAgICAgdGhlIG51bWJlciBvZiByZWNvdmVyaW5nIGluZmVjdGlvdXMgcG9wdWxhdGlvbiBtZW1iZXJzCisJICogQHBhcmFtIGlGCisJICogICAgICAgICAgICB0aGUgbnVtYmVyIG9mIGZhdGFsbHkgaW5mZWN0aW91cyBwb3B1bGF0aW9uIG1lbWJlcnMKKwkgKiAKKwkgKiBAcGFyYW0gcgorCSAqICAgICAgICAgICAgdGhlIG51bWJlciBvZiByZWNvdmVyZWQgcG9wdWxhdGlvbiBtZW1iZXJzCisJICogQHBhcmFtIGJpcnRocworCSAqICAgICAgICAgICAgdGhlIG51bWJlciBvZiBiaXJ0aHMgdGhhdCBoYXZlIG9jY3VycmVkIGluIHRoZSBwb3B1bGF0aW9uCisJICogQHBhcmFtIGRlYXRocworCSAqICAgICAgICAgICAgdGhlIHRvdGFsIG51bWJlciBvZiBkZWF0aHMgdGhhdCBoYXZlIG9jY3VycmVkIGluIHRoZQorCSAqICAgICAgICAgICAgcG9wdWxhdGlvbgorCSAqIEBwYXJhbSBkaXNlYXNlRGVhdGhzCisJICogICAgICAgICAgICB0aGUgbnVtYmVyIG9mIGRlYXRocyBkdWUgdG8gdGhlIGRpc2Vhc2UgdGhhdCBoYXZlIG9jY3VycmVkIGluCisJICogICAgICAgICAgICB0aGUgcG9wdWxhdGlvbgorCSAqIAorCSAqICAgICAgICAgICAgPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICovCisJcHVibGljIFNFSVJMYWJlbFZhbHVlSW1wbChmaW5hbCBkb3VibGUgcywgZmluYWwgZG91YmxlIGUsIGZpbmFsIGRvdWJsZSBpLAorCQkJZmluYWwgZG91YmxlIHIsIGZpbmFsIGRvdWJsZSBkaXNlYXNlRGVhdGhzKSB7CisJCXN1cGVyKHMsIGksIDAuMCwgciwgZGlzZWFzZURlYXRocyk7CisJCXRoaXMuc2V0RShlKTsKKwl9IC8vIFNFSVJMYWJlbFZhbHVlSW1wbAorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCBFQ2xhc3MgZVN0YXRpY0NsYXNzKCkgeworCQlyZXR1cm4gU3RhbmRhcmRQYWNrYWdlLkxpdGVyYWxzLlNFSVJfTEFCRUxfVkFMVUU7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAcmV0dXJuCisJICogCisJICogICAgICAgICA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIGRvdWJsZSBnZXRFKCkgeworCQlyZXR1cm4gZTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBwYXJhbSBuZXdFCisJICogCisJICogICAgICAgICAgICA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgc2V0RShkb3VibGUgbmV3RSkgeworCQlkb3VibGUgb2xkRSA9IGU7CisJCWUgPSBuZXdFOworCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpCisJCQllTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBTdGFuZGFyZFBhY2thZ2UuU0VJUl9MQUJFTF9WQUxVRV9fRSwgb2xkRSwgZSkpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogCisJICogQHBhcmFtIGZlYXR1cmVJRAorCSAqIEBwYXJhbSByZXNvbHZlCisJICogQHBhcmFtIGNvcmVUeXBlCisJICogQHJldHVybgorCSAqIAorCSAqICAgICAgICAgPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBPYmplY3QgZUdldChpbnQgZmVhdHVyZUlELCBib29sZWFuIHJlc29sdmUsIGJvb2xlYW4gY29yZVR5cGUpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJCWNhc2UgU3RhbmRhcmRQYWNrYWdlLlNFSVJfTEFCRUxfVkFMVUVfX0U6CisJCQkJcmV0dXJuIGdldEUoKTsKKwkJfQorCQlyZXR1cm4gc3VwZXIuZUdldChmZWF0dXJlSUQsIHJlc29sdmUsIGNvcmVUeXBlKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBwYXJhbSBmZWF0dXJlSUQKKwkgKiBAcGFyYW0gbmV3VmFsdWUKKwkgKiAKKwkgKiAgICAgICAgICAgIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBlU2V0KGludCBmZWF0dXJlSUQsIE9iamVjdCBuZXdWYWx1ZSkgeworCQlzd2l0Y2ggKGZlYXR1cmVJRCkgeworCQkJY2FzZSBTdGFuZGFyZFBhY2thZ2UuU0VJUl9MQUJFTF9WQUxVRV9fRToKKwkJCQlzZXRFKChEb3VibGUpbmV3VmFsdWUpOworCQkJCXJldHVybjsKKwkJfQorCQlzdXBlci5lU2V0KGZlYXR1cmVJRCwgbmV3VmFsdWUpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogCisJICogQHBhcmFtIGZlYXR1cmVJRAorCSAqIAorCSAqICAgICAgICAgICAgPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGVVbnNldChpbnQgZmVhdHVyZUlEKSB7CisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7CisJCQljYXNlIFN0YW5kYXJkUGFja2FnZS5TRUlSX0xBQkVMX1ZBTFVFX19FOgorCQkJCXNldEUoRV9FREVGQVVMVCk7CisJCQkJcmV0dXJuOworCQl9CisJCXN1cGVyLmVVbnNldChmZWF0dXJlSUQpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogCisJICogQHBhcmFtIGZlYXR1cmVJRAorCSAqIEByZXR1cm4KKwkgKiAKKwkgKiAgICAgICAgIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgYm9vbGVhbiBlSXNTZXQoaW50IGZlYXR1cmVJRCkgeworCQlzd2l0Y2ggKGZlYXR1cmVJRCkgeworCQkJY2FzZSBTdGFuZGFyZFBhY2thZ2UuU0VJUl9MQUJFTF9WQUxVRV9fRToKKwkJCQlyZXR1cm4gZSAhPSBFX0VERUZBVUxUOworCQl9CisJCXJldHVybiBzdXBlci5lSXNTZXQoZmVhdHVyZUlEKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkgeworCQlpZiAoZUlzUHJveHkoKSkgcmV0dXJuIHN1cGVyLnRvU3RyaW5nKCk7CisKKwkJU3RyaW5nQnVmZmVyIHJlc3VsdCA9IG5ldyBTdHJpbmdCdWZmZXIoc3VwZXIudG9TdHJpbmcoKSk7CisJCXJlc3VsdC5hcHBlbmQoIiAoZTogIik7IC8vJE5PTi1OTFMtMSQKKwkJcmVzdWx0LmFwcGVuZChlKTsKKwkJcmVzdWx0LmFwcGVuZCgnKScpOworCQlyZXR1cm4gcmVzdWx0LnRvU3RyaW5nKCk7CisJfQorCit9IC8vIFNFSVJMYWJlbFZhbHVlSW1wbApkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9zdGFuZGFyZC9pbXBsL1NJSW1wbC5qYXZhIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9zdGFuZGFyZC9pbXBsL1NJSW1wbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdlOWE2MDUKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3N0YW5kYXJkL2ltcGwvU0lJbXBsLmphdmEKQEAgLTAsMCArMSw1OTkgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLmltcGw7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLmltcGwuRU5vdGlmaWNhdGlvbkltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLlNURU1UaW1lOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5EaXNlYXNlTW9kZWxMYWJlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuSW5mZWN0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlNJOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TSUluZmVjdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TSUxhYmVsVmFsdWU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmRGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZFBhY2thZ2U7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPlNJPC9iPjwvZW0+Jy4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogPHA+CisgKiBUaGUgZm9sbG93aW5nIGZlYXR1cmVzIGFyZSBpbXBsZW1lbnRlZDoKKyAqIDx1bD4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuaW1wbC5TSUltcGwjZ2V0VHJhbnNtaXNzaW9uUmF0ZSA8ZW0+VHJhbnNtaXNzaW9uIFJhdGU8L2VtPn08L2xpPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5pbXBsLlNJSW1wbCNnZXROb25MaW5lYXJpdHlDb2VmZmljaWVudCA8ZW0+Tm9uIExpbmVhcml0eSBDb2VmZmljaWVudDwvZW0+fTwvbGk+CisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLmltcGwuU0lJbXBsI2dldFJlY292ZXJ5UmF0ZSA8ZW0+UmVjb3ZlcnkgUmF0ZTwvZW0+fTwvbGk+CisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLmltcGwuU0lJbXBsI2dldEluZmVjdGlvdXNNb3J0YWxpdHlSYXRlIDxlbT5JbmZlY3Rpb3VzIE1vcnRhbGl0eSBSYXRlPC9lbT59PC9saT4KKyAqIDwvdWw+CisgKiA8L3A+CisgKgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgYWJzdHJhY3QgY2xhc3MgU0lJbXBsIGV4dGVuZHMgU3RhbmRhcmREaXNlYXNlTW9kZWxJbXBsIGltcGxlbWVudHMgU0kgeworCS8qKgorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRUcmFuc21pc3Npb25SYXRlKCkgPGVtPlRyYW5zbWlzc2lvbiBSYXRlPC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZ2V0VHJhbnNtaXNzaW9uUmF0ZSgpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBkb3VibGUgVFJBTlNNSVNTSU9OX1JBVEVfRURFRkFVTFQgPSAwLjA7CisKKwkvKioKKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRUcmFuc21pc3Npb25SYXRlKCkgPGVtPlRyYW5zbWlzc2lvbiBSYXRlPC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZ2V0VHJhbnNtaXNzaW9uUmF0ZSgpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIGRvdWJsZSB0cmFuc21pc3Npb25SYXRlID0gVFJBTlNNSVNTSU9OX1JBVEVfRURFRkFVTFQ7CisKKwkvKioKKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0Tm9uTGluZWFyaXR5Q29lZmZpY2llbnQoKSA8ZW0+Tm9uIExpbmVhcml0eSBDb2VmZmljaWVudDwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI2dldE5vbkxpbmVhcml0eUNvZWZmaWNpZW50KCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIGRvdWJsZSBOT05fTElORUFSSVRZX0NPRUZGSUNJRU5UX0VERUZBVUxUID0gMS4wOworCisJLyoqCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0Tm9uTGluZWFyaXR5Q29lZmZpY2llbnQoKSA8ZW0+Tm9uIExpbmVhcml0eSBDb2VmZmljaWVudDwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI2dldE5vbkxpbmVhcml0eUNvZWZmaWNpZW50KCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgZG91YmxlIG5vbkxpbmVhcml0eUNvZWZmaWNpZW50ID0gTk9OX0xJTkVBUklUWV9DT0VGRklDSUVOVF9FREVGQVVMVDsKKworCS8qKgorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRSZWNvdmVyeVJhdGUoKSA8ZW0+UmVjb3ZlcnkgUmF0ZTwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI2dldFJlY292ZXJ5UmF0ZSgpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBkb3VibGUgUkVDT1ZFUllfUkFURV9FREVGQVVMVCA9IDAuMDsKKworCS8qKgorCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldFJlY292ZXJ5UmF0ZSgpIDxlbT5SZWNvdmVyeSBSYXRlPC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZ2V0UmVjb3ZlcnlSYXRlKCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgZG91YmxlIHJlY292ZXJ5UmF0ZSA9IFJFQ09WRVJZX1JBVEVfRURFRkFVTFQ7CisKKwkvKioKKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0SW5mZWN0aW91c01vcnRhbGl0eVJhdGUoKSA8ZW0+SW5mZWN0aW91cyBNb3J0YWxpdHkgUmF0ZTwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI2dldEluZmVjdGlvdXNNb3J0YWxpdHlSYXRlKCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIGRvdWJsZSBJTkZFQ1RJT1VTX01PUlRBTElUWV9SQVRFX0VERUZBVUxUID0gMC4wOworCisJLyoqCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0SW5mZWN0aW91c01vcnRhbGl0eVJhdGUoKSA8ZW0+SW5mZWN0aW91cyBNb3J0YWxpdHkgUmF0ZTwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI2dldEluZmVjdGlvdXNNb3J0YWxpdHlSYXRlKCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgZG91YmxlIGluZmVjdGlvdXNNb3J0YWxpdHlSYXRlID0gSU5GRUNUSU9VU19NT1JUQUxJVFlfUkFURV9FREVGQVVMVDsKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgU0lJbXBsKCkgeworCQlzdXBlcigpOworCX0KKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLmltcGwuU3RhbmRhcmREaXNlYXNlTW9kZWxJbXBsI2NvbXB1dGVUcmFuc2l0aW9ucyhvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbFZhbHVlLAorCSAqICAgICAgbG9uZywgZG91YmxlLCBsb25nKQorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBTdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsVmFsdWUgY29tcHV0ZURpc2Vhc2VEZWx0YXMoCisJCQlmaW5hbCBTVEVNVGltZSB0aW1lLAorCQkJZmluYWwgU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbFZhbHVlIGN1cnJlbnRTdGF0ZSwKKwkJCWZpbmFsIFN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWwgZGlzZWFzZUxhYmVsLCBmaW5hbCBsb25nIHRpbWVEZWx0YSwgRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZSByZXR1cm5WYWx1ZSkgeworCQkKKwkJZmluYWwgU0lMYWJlbFZhbHVlIGN1cnJlbnRTSSA9IChTSUxhYmVsVmFsdWUpIGN1cnJlbnRTdGF0ZTsKKwkJCisJCS8vIENvbXB1dGUgZGVhdGhzCisJCWZpbmFsIGRvdWJsZSBhZGp1c3RlZEluZmVjdGlvdXNNb3J0YWxpdHlSYXRlID0gZ2V0QWRqdXN0ZWRJbmZlY3Rpb3VzTW9ydGFsaXR5UmF0ZSh0aW1lRGVsdGEpOworCQlmaW5hbCBkb3VibGUgZGlzZWFzZURlYXRocyA9IGFkanVzdGVkSW5mZWN0aW91c01vcnRhbGl0eVJhdGUKKwkJCQkqIGN1cnJlbnRTSS5nZXRJKCk7CisJCQorCQkvLyBUaGlzIGlzIGJldGEqCisJCWRvdWJsZSB0cmFuc21pc3Npb25SYXRlID0gZ2V0QWRqdXN0ZWRUcmFuc21pc3Npb25SYXRlKHRpbWVEZWx0YSk7CisJCQkJCisJCWlmKCF0aGlzLmlzRnJlcXVlbmN5RGVwZW5kZW50KCkpIHRyYW5zbWlzc2lvblJhdGUgKj0gZ2V0VHJhbnNtaXNzaW9uUmF0ZVNjYWxlRmFjdG9yKGRpc2Vhc2VMYWJlbCk7CisKKwkJLy8gVGhlIGVmZmVjdGl2ZSBJbmZlY3Rpb3VzIHBvcHVsYXRpb24gIGlzIGEgZGltZW5zaW9ubGVzIG51bWJlciBub3JtYWxpemUgYnkgdG90YWwKKwkJLy8gcG9wdWxhdGlvbiB1c2VkIGluIHRlaCBjb21wdXRhdGlvbiBvZiBiZXRzKlMqaSB3aGVyZSBpID0gSWVmZmVjdGl2ZS9Qb3AuCisJCS8vIFRoaXMgaW5jbHVkZXMgYSBjb3JyZWN0aW9uIHRvIHRoZSBjdXJyZW50CisJCS8vIGluZmVjdGlvdXMgcG9wdWxhdGlvbiAoSWVmZmVjdGl2ZSkgYmFzZWQgb24gdGhlIGNvbnNlcnZlZCBleGNoYW5nZSBvZiBwZW9wbGUgKGNpcmN1bGF0aW9uKQorCQkvLyBiZXR3ZWVuIHJlZ2lvbnMuIE5vdGUgdGhhdCB0aGlzIGlzIG5vIHRoZSAiYXJyaXZhbHMiIGFuZCAiZGVwYXJ0dXJlcyIgd2hpY2ggYXJlCisJCS8vIGEgZGlmZmVyZW50IHByb2Nlc3MuCisJCWZpbmFsIGRvdWJsZSBlZmZlY3RpdmVJbmZlY3Rpb3VzID0gZ2V0Tm9ybWFsaXplZEVmZmVjdGl2ZUluZmVjdGlvdXMoZGlzZWFzZUxhYmVsLmdldE5vZGUoKSwgZGlzZWFzZUxhYmVsLCBjdXJyZW50U0kuZ2V0SSgpKTsKKworCQkvKgorCQkgKiBDb21wdXRlIHN0YXRlIHRyYW5zaXRpb25zCisJCSAqIAorCQkgKiBSZWdhcmRpbmcgY29tcHV0aW5nIHRoZSBudW1iZXIgb2YgdHJhbnNpdGlvbnMgZnJvbSBTdXNjZXB0aWJsZSB0byBFeHBvc2VkOgorCQkgKiBJbiBhIGxpbmVhciBtb2RlbCB0aGUgImVmZmVjdGl2ZSIgbnVtYmVyIG9mIGluZmVjdGlvdXMgcGVvcGxlIGlzIGp1c3QKKwkJICogdGhlIG51bWJlciBvZiBpbmZlY3Rpb3VzIHBlb3BsZSBJbiBhIG5vbmxpbmVhciBtb2RlbCB3ZSBoYXZlIGEKKwkJICogbm9uTGluZWFyaXR5IGV4cG9uZW50IHRoYXQgaXMgPiAxIHRoaXMgbW9kZWxzIHRoZSBlZmZlY3Qgb2YgaW1tdW5lCisJCSAqIHN5c3RlbSBzYXR1cmF0aW9uIHdoZW4gU3VzY2VwdGlibGUgcGVvcGxlIGFyZSBleHBvc2VkIHRvIGxhcmdlCisJCSAqIG51bWJlcnMgb2YgaW5mZWN0aW91cyBwZW9wbGUuIHRoZW4gdGhlICJlZmZlY3RpdmUiIG51bWJlciBvZgorCQkgKiBpbmZlY3Rpb3VzIHBlb3BsZSBpcyBJXm5vbkxpbmVhcml0eSBleHBvbmVudCB0byBhbGxvdyBmb3IgZWl0aGVyCisJCSAqIGxpbmVhciBvciBub25saW5lYXIgbW9kZWxzIHdlIGFsd2F5cyBjYWxjdWxhdGUgSV5ub25MaW5lYXJpdHkKKwkJICogZXhwb25lbnQgYW5kIGFsbG93IG5vbkxpbmVhcml0eSBleHBvbmVudCA+PSAxLjAKKwkJICovCisJCQorCQkvLyBOZWVkIHRvIGNoZWNrZWQgd2hhdCBkbyBkbyBoZXJlLiBJZiBub24gbGluZWFyIGNvZWZmaWNpZW50IGlzIG5vdCAxIGFuZAorCQkvLyB0aGUgZWZmZWN0aXZlIGluZmVjdGlvdXMgaXMgbmVnYXRpdmUgKHdoaWNoIGlzIHBvc3NpYmxlKSwgd2hhdCBkbyBkbz8gCisJCS8vIExldCdzIGZhbGwgYmFjayBvbiB0aGUgbGluZWFyIG1ldGhvZCBmb3Igbm93LgorCQlkb3VibGUgbnVtYmVyT2ZTdXNjZXB0aWJsZVRvSW5mZWN0ZWQgPSAwLjA7CisJCWlmKGdldE5vbkxpbmVhcml0eUNvZWZmaWNpZW50KCkgIT0gMS4wICYmIGVmZmVjdGl2ZUluZmVjdGlvdXMgPj0gMC4wKQorCQkJbnVtYmVyT2ZTdXNjZXB0aWJsZVRvSW5mZWN0ZWQgPSB0cmFuc21pc3Npb25SYXRlCisJCQkqIGN1cnJlbnRTSS5nZXRTKCkqIE1hdGgucG93KGVmZmVjdGl2ZUluZmVjdGlvdXMsIGdldE5vbkxpbmVhcml0eUNvZWZmaWNpZW50KCkpOworCQllbHNlCisJCQludW1iZXJPZlN1c2NlcHRpYmxlVG9JbmZlY3RlZCA9IHRyYW5zbWlzc2lvblJhdGUKKwkJCSogY3VycmVudFNJLmdldFMoKSogZWZmZWN0aXZlSW5mZWN0aW91czsKKwkJCisJCWRvdWJsZSBudW1iZXJPZkluZmVjdGVkVG9TdXNjZXB0aWJsZSA9IGdldEFkanVzdGVkUmVjb3ZlcnlSYXRlKHRpbWVEZWx0YSkKKwkJCQkqIGN1cnJlbnRTSS5nZXRJKCk7CisJCQorCQorCQkvLyBEZXRlcm1pbmUgZGVsdGEgUworCQlmaW5hbCBkb3VibGUgZGVsdGFTID0gLSBudW1iZXJPZlN1c2NlcHRpYmxlVG9JbmZlY3RlZCArIG51bWJlck9mSW5mZWN0ZWRUb1N1c2NlcHRpYmxlOworCQkvLyBEZXRlcm1pbmUgZGVsdGEgSQorCQlmaW5hbCBkb3VibGUgZGVsdGFJID0gbnVtYmVyT2ZTdXNjZXB0aWJsZVRvSW5mZWN0ZWQgLSBudW1iZXJPZkluZmVjdGVkVG9TdXNjZXB0aWJsZSAtIGRpc2Vhc2VEZWF0aHM7CQorCQorCQlTSUxhYmVsVmFsdWVJbXBsIHJldCA9IChTSUxhYmVsVmFsdWVJbXBsKXJldHVyblZhbHVlOworCQlyZXQuc2V0UyhkZWx0YVMpOworCQlyZXQuc2V0SShkZWx0YUkpOworCQlyZXQuc2V0SW5jaWRlbmNlKG51bWJlck9mU3VzY2VwdGlibGVUb0luZmVjdGVkKTsKKwkJcmV0LnNldERpc2Vhc2VEZWF0aHMoZGlzZWFzZURlYXRocyk7CisJCXJldHVybiByZXQ7CisJfSAvLyBjb21wdXRlRGlzZWFzZURlbHRhcworCQorCisJLyoqCisJICogVGhpcyBtZXRob2QgaXMgdXNlZCB0byBzY2FsZSB0aGUgdHJhbnNtaXNzaW9uIHJhdGUuCisgCSAqIGl0IHJldHVybnMgdGhlIGxvY2FsIGRlbnNpdHkgZGl2aWRlZCBieSBhICJyZWZlcmVuY2UiIGRlbnNpdHkKKwkgKiBAcGFyYW0gZGlzZWFzZUxhYmVsIHRoZSBsYWJlbCBiZWluZyBwcm9jZXNzZWQKKwkgKiBAcmV0dXJuIHRoZSB0cmFuc21pc3Npb24gcmF0ZSBzY2FsZSBmYWN0b3IgZm9yIHRoZSBsYWJlbCBiZWluZyBwcm9jZXNzZWQKKwkgKi8KKwlwdWJsaWMgZG91YmxlIGdldFRyYW5zbWlzc2lvblJhdGVTY2FsZUZhY3RvcigKKwkJCVN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWwgZGlzZWFzZUxhYmVsKSB7CisJCS8vZmluYWwgU3RhbmRhcmREaXNlYXNlTW9kZWxTdGF0ZSBzZG1zID0gKFN0YW5kYXJkRGlzZWFzZU1vZGVsU3RhdGUpIGRpc2Vhc2VMYWJlbAorCQkvLwkJLmdldERpc2Vhc2VNb2RlbFN0YXRlKCk7CisJCQorCQlkb3VibGUgcmVmZXJlbmNlRGVuc2l0eSA9IGdldFJlZmVyZW5jZVBvcHVsYXRpb25EZW5zaXR5KCk7CisJCS8vIGFzc2VydChyZWZlcmVuY2VEZW5zaXR5ID4gMCk7CisJCS8vIG5lZWQgZWRpdG9yIGNoZWNrIHNvIHJlZiBkZW5zaXR5IGFsd2F5cyA+MS4gRGVmYXVsdCBpcyAxMDAuCisJCWFzc2VydCBnZXRBcmVhKGRpc2Vhc2VMYWJlbC5nZXRQb3B1bGF0aW9uTGFiZWwoKSkgPiAwLjA7CisJCWRvdWJsZSBsb2NhbERlbnNpdHkgPSAoKFN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZSlkaXNlYXNlTGFiZWwuZ2V0VGVtcFZhbHVlKCkpLmdldFBvcHVsYXRpb25Db3VudCgpL2dldEFyZWEoZGlzZWFzZUxhYmVsLmdldFBvcHVsYXRpb25MYWJlbCgpKTsKKwkJcmV0dXJuIGxvY2FsRGVuc2l0eS9yZWZlcmVuY2VEZW5zaXR5OworCX0gLy8gZ2V0VHJhbnNtaXNzaW9uUmF0ZVNjYWxlRmFjdG9yCisKKwkKKwkvKioKKwkgKiBUaGUgPGVtPmluZmVjdGlvdXMgbW9ydGFsaXR5IHJhdGU8L2VtPiBpcyB0aGUgcmF0ZSBhdCB3aGljaAorCSAqIDxlbT5JbmZlY3Rpb3VzPC9lbT4gcG9wdWxhdGlvbiBtZW1iZXJzIGRpZS4gQmFzaWNhbGx5LCB0aGF0IHJhdGUgaXMKKwkgKiBzaW1wbHkgdGhlIHByb3BvcnRpb25hbCBmcmFjdGlvbiBvZiB0aGUgZmxvdyBpbnRvIHRoZSA8ZW0+SW5mZWN0aW91czwvZW0+CisJICogc3RhdGUuCisJICogCisJICogQHBhcmFtIGluZmVjdGlvdXNJbnB1dFJhdGUKKwkgKiAgICAgICAgICAgIHRoZSByYXRlIGF0IHdoaWNoIHBvcHVsYXRpb24gbWVtYmVycyBlbnRlciB0aGUgaW5mZWN0aW91cworCSAqICAgICAgICAgICAgc3RhdGUgKCZiZXRhOykKKwkgKiBAcGFyYW0gaW5mZWN0aW91c01vcnRhbGl0eQorCSAqICAgICAgICAgICAgdGhlIHByb3BvcnRpb24gb2YgcG9wdWxhdGlvbiBtZW1iZXJzIHRoYXQgZGllIGZyb20gdGhlIGRpc2Vhc2UKKwkgKiAgICAgICAgICAgICh4KQorCSAqIEByZXR1cm4gdGhlIHJhdGUgYXQgd2hpY2ggcG9wdWxhdGlvbiBtZW1iZXJzIGRpZSBmcm9tIHRoZSBkaXNlYXNlCisJICovCisvLwlwdWJsaWMgZG91YmxlIGNvbXB1dGVJbmZlY3Rpb3VzTW9ydGFsaXR5UmF0ZSgKKy8vCQkJZmluYWwgZG91YmxlIGluZmVjdGlvdXNJbnB1dFJhdGUsIGZpbmFsIGRvdWJsZSBpbmZlY3Rpb3VzTW9ydGFsaXR5KSB7CisvLwkJcmV0dXJuIGluZmVjdGlvdXNNb3J0YWxpdHkgKiBpbmZlY3Rpb3VzSW5wdXRSYXRlOworLy8JfSAvLyBjb21wdXRlSW5mZWN0aW91c01vcnRhbGl0eVJhdGUKKworCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuaW1wbC5EaXNlYXNlTW9kZWxJbXBsI2NyZWF0ZURpc2Vhc2VNb2RlbExhYmVsKCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgRGlzZWFzZU1vZGVsTGFiZWwgY3JlYXRlRGlzZWFzZU1vZGVsTGFiZWwoU3RyaW5nIHBvcHVsYXRpb25JZGVudGlmaWVyKSB7CisJCXJldHVybiBTdGFuZGFyZEZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZVNJTGFiZWwoKTsKKwl9IC8vIGNyZWF0ZURpc2Vhc2VNb2RlbExhYmVsCisKKwlAT3ZlcnJpZGUKKwlwdWJsaWMgRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZSBjcmVhdGVEaXNlYXNlTW9kZWxMYWJlbFZhbHVlKFN0cmluZyBwb3B1bGF0aW9uSWRlbnRpZmllcikgeworCQlyZXR1cm4gU3RhbmRhcmRGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVTSUxhYmVsVmFsdWUoKTsKKwl9IC8vIGNyZWF0ZURpc2Vhc2VNb2RlbExhYmVsVmFsdWUKKwkKKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLmltcGwuRGlzZWFzZU1vZGVsSW1wbCNjcmVhdGVJbmZlY3RvcigpCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIEluZmVjdG9yIGNyZWF0ZUluZmVjdG9yKCkgeworCQlTSUluZmVjdG9yIHJldFZhbHVlID0gU3RhbmRhcmRGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVTSUluZmVjdG9yKCk7CisJCXJldFZhbHVlLnNldERpc2Vhc2VOYW1lKHRoaXMuZ2V0RGlzZWFzZU5hbWUoKSk7CisJCXJldFZhbHVlLnNldFBvcHVsYXRpb25JZGVudGlmaWVyKGdldFBvcHVsYXRpb25JZGVudGlmaWVyKCkpOworCQlyZXR1cm4gcmV0VmFsdWU7CisJfSAvLyBjcmVhdGVJbmZlY3RvcgorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCBFQ2xhc3MgZVN0YXRpY0NsYXNzKCkgeworCQlyZXR1cm4gU3RhbmRhcmRQYWNrYWdlLkxpdGVyYWxzLlNJOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogCisJICogQHJldHVybgorCSAqIAorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgZG91YmxlIGdldFRyYW5zbWlzc2lvblJhdGUoKSB7CisJCXJldHVybiB0cmFuc21pc3Npb25SYXRlOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogCisJICogQHBhcmFtIG5ld1RyYW5zbWlzc2lvblJhdGUKKwkgKiAKKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgc2V0VHJhbnNtaXNzaW9uUmF0ZShkb3VibGUgbmV3VHJhbnNtaXNzaW9uUmF0ZSkgeworCQlkb3VibGUgb2xkVHJhbnNtaXNzaW9uUmF0ZSA9IHRyYW5zbWlzc2lvblJhdGU7CisJCXRyYW5zbWlzc2lvblJhdGUgPSBuZXdUcmFuc21pc3Npb25SYXRlOworCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpCisJCQllTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBTdGFuZGFyZFBhY2thZ2UuU0lfX1RSQU5TTUlTU0lPTl9SQVRFLCBvbGRUcmFuc21pc3Npb25SYXRlLCB0cmFuc21pc3Npb25SYXRlKSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAcmV0dXJuCisJICogCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBkb3VibGUgZ2V0UmVjb3ZlcnlSYXRlKCkgeworCQlyZXR1cm4gcmVjb3ZlcnlSYXRlOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogCisJICogQHBhcmFtIG5ld1JlY292ZXJ5UmF0ZQorCSAqIAorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRSZWNvdmVyeVJhdGUoZG91YmxlIG5ld1JlY292ZXJ5UmF0ZSkgeworCQlkb3VibGUgb2xkUmVjb3ZlcnlSYXRlID0gcmVjb3ZlcnlSYXRlOworCQlyZWNvdmVyeVJhdGUgPSBuZXdSZWNvdmVyeVJhdGU7CisJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkKKwkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIFN0YW5kYXJkUGFja2FnZS5TSV9fUkVDT1ZFUllfUkFURSwgb2xkUmVjb3ZlcnlSYXRlLCByZWNvdmVyeVJhdGUpKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIGRvdWJsZSBnZXRJbmZlY3Rpb3VzTW9ydGFsaXR5UmF0ZSgpIHsKKwkJcmV0dXJuIGluZmVjdGlvdXNNb3J0YWxpdHlSYXRlOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRJbmZlY3Rpb3VzTW9ydGFsaXR5UmF0ZShkb3VibGUgbmV3SW5mZWN0aW91c01vcnRhbGl0eVJhdGUpIHsKKwkJZG91YmxlIG9sZEluZmVjdGlvdXNNb3J0YWxpdHlSYXRlID0gaW5mZWN0aW91c01vcnRhbGl0eVJhdGU7CisJCWluZmVjdGlvdXNNb3J0YWxpdHlSYXRlID0gbmV3SW5mZWN0aW91c01vcnRhbGl0eVJhdGU7CisJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkKKwkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIFN0YW5kYXJkUGFja2FnZS5TSV9fSU5GRUNUSU9VU19NT1JUQUxJVFlfUkFURSwgb2xkSW5mZWN0aW91c01vcnRhbGl0eVJhdGUsIGluZmVjdGlvdXNNb3J0YWxpdHlSYXRlKSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCXB1YmxpYyBkb3VibGUgZ2V0QWRqdXN0ZWRJbmZlY3Rpb3VzTW9ydGFsaXR5UmF0ZShsb25nIHRpbWVEZWx0YSkgeworCQkvLyBUT0RPIHRoaXMgZGl2aXNpb24gY2FuIGJlIGVsaW1pbmF0ZWQgaWYgdGltZURlbHRhPT1nZXRUaW1lUGVyaW9kCisJCXJldHVybiBnZXRJbmZlY3Rpb3VzTW9ydGFsaXR5UmF0ZSgpCisJCSogKChkb3VibGUpIHRpbWVEZWx0YSAvIChkb3VibGUpIGdldFRpbWVQZXJpb2QoKSk7CisJfSAvLyBnZXRBZGp1c3RlZEluZmVjdGlvdXNNb3J0YWxpdHlSYXRlCisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEByZXR1cm4KKwkgKiAKKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIGRvdWJsZSBnZXROb25MaW5lYXJpdHlDb2VmZmljaWVudCgpIHsKKwkJcmV0dXJuIG5vbkxpbmVhcml0eUNvZWZmaWNpZW50OworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogCisJICogQHBhcmFtIG5ld05vbkxpbmVhcml0eUNvZWZmaWNpZW50CisJICogCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIHNldE5vbkxpbmVhcml0eUNvZWZmaWNpZW50KGRvdWJsZSBuZXdOb25MaW5lYXJpdHlDb2VmZmljaWVudCkgeworCQlkb3VibGUgb2xkTm9uTGluZWFyaXR5Q29lZmZpY2llbnQgPSBub25MaW5lYXJpdHlDb2VmZmljaWVudDsKKwkJbm9uTGluZWFyaXR5Q29lZmZpY2llbnQgPSBuZXdOb25MaW5lYXJpdHlDb2VmZmljaWVudDsKKwkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQorCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgU3RhbmRhcmRQYWNrYWdlLlNJX19OT05fTElORUFSSVRZX0NPRUZGSUNJRU5ULCBvbGROb25MaW5lYXJpdHlDb2VmZmljaWVudCwgbm9uTGluZWFyaXR5Q29lZmZpY2llbnQpKTsKKwl9CisKKwkvKioKKwkgKiBNb2RlbFNwZWNpZmljQWRqdXN0bWVudHMgZm9yIGEgU3RvY2hhc3RpYyBtb2RlbCBhZGRzIG5vaXNlIHRvIG9yIGFkanVzdHMgCisJICogdGhlIGRpc2Vhc2Ugc3RhdGUgdHJhbnNpdGlvbiB2YWx1ZXMgYnkgbXVsdGlwbHlpbmcKKwkgKiB0aGUgYWRkaXRpb25zIGJ5IGEgcmFuZG9tIHZhcmlhYmxlIHIgfiAoMSsvLXgpIHdpdGggeCBzbWFsbC4KKwkgKiBUaGUgcmVxdWlyZW1lbnRzIHRoYXQgbm8gbW9yZSBpbmRpdmlkdWFscyBjYW4gYmUgbW92ZWQgZnJvbSBhIHN0YXRlIHRoYW4gYXJlCisJICogYWxyZWFkeSBpbiB0aGF0IHN0YXRlIGlzIHN0aWxsIGVuZm9yY2VkLgorCSAqIAorCSAqLworCXB1YmxpYyB2b2lkIGRvTW9kZWxTcGVjaWZpY0FkanVzdG1lbnRzKFN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZSB2YWwpIHsKKwl9IC8vIGRvTW9kZWxTcGVjaWZpY0FkanVzdG1lbnRzCisJCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBSZXR1cm5zIHRoZSB0aW1lIGludGVydmFsIGRlbHRhVCBkaXZpZGVkIGJ5IHRoZSBpbml0aWFsIHRpbWUgcGVyaW9kCisJICogQHBhcmFtIHRpbWVEZWx0YQorCSAqIAorCSAqIEByZXR1cm4KKwkgKiAKKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCXB1YmxpYyBkb3VibGUgZ2V0QWRqdXN0ZWRUcmFuc21pc3Npb25SYXRlKGxvbmcgdGltZURlbHRhKSB7CisJCXJldHVybiBnZXRUcmFuc21pc3Npb25SYXRlKCkKKwkJCQkqICgoZG91YmxlKSB0aW1lRGVsdGEgLyAoZG91YmxlKSBnZXRUaW1lUGVyaW9kKCkpOworCX0gLy8gZ2V0QWRqdXN0ZWRUcmFuc21pc3Npb25SYXRlCisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBwYXJhbSB0aW1lRGVsdGEKKwkgKiAKKwkgKiBAcmV0dXJuCisJICogCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogCisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlwdWJsaWMgZG91YmxlIGdldEFkanVzdGVkUmVjb3ZlcnlSYXRlKGxvbmcgdGltZURlbHRhKSB7CisJCXJldHVybiBnZXRSZWNvdmVyeVJhdGUoKQorCQkJCSogKChkb3VibGUpIHRpbWVEZWx0YSAvIChkb3VibGUpIGdldFRpbWVQZXJpb2QoKSk7CisJfSAvLyBnZXRBZGp1c3RlZFJlY292ZXJ5UmF0ZQorCQorCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogCisJICogQHBhcmFtIGZlYXR1cmVJRAorCSAqIEBwYXJhbSByZXNvbHZlCisJICogQHBhcmFtIGNvcmVUeXBlCisJICogCisJICogQHJldHVybgorCSAqIAorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgT2JqZWN0IGVHZXQoaW50IGZlYXR1cmVJRCwgYm9vbGVhbiByZXNvbHZlLCBib29sZWFuIGNvcmVUeXBlKSB7CisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7CisJCQljYXNlIFN0YW5kYXJkUGFja2FnZS5TSV9fVFJBTlNNSVNTSU9OX1JBVEU6CisJCQkJcmV0dXJuIGdldFRyYW5zbWlzc2lvblJhdGUoKTsKKwkJCWNhc2UgU3RhbmRhcmRQYWNrYWdlLlNJX19OT05fTElORUFSSVRZX0NPRUZGSUNJRU5UOgorCQkJCXJldHVybiBnZXROb25MaW5lYXJpdHlDb2VmZmljaWVudCgpOworCQkJY2FzZSBTdGFuZGFyZFBhY2thZ2UuU0lfX1JFQ09WRVJZX1JBVEU6CisJCQkJcmV0dXJuIGdldFJlY292ZXJ5UmF0ZSgpOworCQkJY2FzZSBTdGFuZGFyZFBhY2thZ2UuU0lfX0lORkVDVElPVVNfTU9SVEFMSVRZX1JBVEU6CisJCQkJcmV0dXJuIGdldEluZmVjdGlvdXNNb3J0YWxpdHlSYXRlKCk7CisJCX0KKwkJcmV0dXJuIHN1cGVyLmVHZXQoZmVhdHVyZUlELCByZXNvbHZlLCBjb3JlVHlwZSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAcGFyYW0gZmVhdHVyZUlECisJICogQHBhcmFtIG5ld1ZhbHVlCisJICogCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGVTZXQoaW50IGZlYXR1cmVJRCwgT2JqZWN0IG5ld1ZhbHVlKSB7CisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7CisJCQljYXNlIFN0YW5kYXJkUGFja2FnZS5TSV9fVFJBTlNNSVNTSU9OX1JBVEU6CisJCQkJc2V0VHJhbnNtaXNzaW9uUmF0ZSgoRG91YmxlKW5ld1ZhbHVlKTsKKwkJCQlyZXR1cm47CisJCQljYXNlIFN0YW5kYXJkUGFja2FnZS5TSV9fTk9OX0xJTkVBUklUWV9DT0VGRklDSUVOVDoKKwkJCQlzZXROb25MaW5lYXJpdHlDb2VmZmljaWVudCgoRG91YmxlKW5ld1ZhbHVlKTsKKwkJCQlyZXR1cm47CisJCQljYXNlIFN0YW5kYXJkUGFja2FnZS5TSV9fUkVDT1ZFUllfUkFURToKKwkJCQlzZXRSZWNvdmVyeVJhdGUoKERvdWJsZSluZXdWYWx1ZSk7CisJCQkJcmV0dXJuOworCQkJY2FzZSBTdGFuZGFyZFBhY2thZ2UuU0lfX0lORkVDVElPVVNfTU9SVEFMSVRZX1JBVEU6CisJCQkJc2V0SW5mZWN0aW91c01vcnRhbGl0eVJhdGUoKERvdWJsZSluZXdWYWx1ZSk7CisJCQkJcmV0dXJuOworCQl9CisJCXN1cGVyLmVTZXQoZmVhdHVyZUlELCBuZXdWYWx1ZSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAcGFyYW0gZmVhdHVyZUlECisJICogCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGVVbnNldChpbnQgZmVhdHVyZUlEKSB7CisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7CisJCQljYXNlIFN0YW5kYXJkUGFja2FnZS5TSV9fVFJBTlNNSVNTSU9OX1JBVEU6CisJCQkJc2V0VHJhbnNtaXNzaW9uUmF0ZShUUkFOU01JU1NJT05fUkFURV9FREVGQVVMVCk7CisJCQkJcmV0dXJuOworCQkJY2FzZSBTdGFuZGFyZFBhY2thZ2UuU0lfX05PTl9MSU5FQVJJVFlfQ09FRkZJQ0lFTlQ6CisJCQkJc2V0Tm9uTGluZWFyaXR5Q29lZmZpY2llbnQoTk9OX0xJTkVBUklUWV9DT0VGRklDSUVOVF9FREVGQVVMVCk7CisJCQkJcmV0dXJuOworCQkJY2FzZSBTdGFuZGFyZFBhY2thZ2UuU0lfX1JFQ09WRVJZX1JBVEU6CisJCQkJc2V0UmVjb3ZlcnlSYXRlKFJFQ09WRVJZX1JBVEVfRURFRkFVTFQpOworCQkJCXJldHVybjsKKwkJCWNhc2UgU3RhbmRhcmRQYWNrYWdlLlNJX19JTkZFQ1RJT1VTX01PUlRBTElUWV9SQVRFOgorCQkJCXNldEluZmVjdGlvdXNNb3J0YWxpdHlSYXRlKElORkVDVElPVVNfTU9SVEFMSVRZX1JBVEVfRURFRkFVTFQpOworCQkJCXJldHVybjsKKwkJfQorCQlzdXBlci5lVW5zZXQoZmVhdHVyZUlEKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBwYXJhbSBmZWF0dXJlSUQKKwkgKiAKKwkgKiBAcmV0dXJuCisJICogCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBib29sZWFuIGVJc1NldChpbnQgZmVhdHVyZUlEKSB7CisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7CisJCQljYXNlIFN0YW5kYXJkUGFja2FnZS5TSV9fVFJBTlNNSVNTSU9OX1JBVEU6CisJCQkJcmV0dXJuIHRyYW5zbWlzc2lvblJhdGUgIT0gVFJBTlNNSVNTSU9OX1JBVEVfRURFRkFVTFQ7CisJCQljYXNlIFN0YW5kYXJkUGFja2FnZS5TSV9fTk9OX0xJTkVBUklUWV9DT0VGRklDSUVOVDoKKwkJCQlyZXR1cm4gbm9uTGluZWFyaXR5Q29lZmZpY2llbnQgIT0gTk9OX0xJTkVBUklUWV9DT0VGRklDSUVOVF9FREVGQVVMVDsKKwkJCWNhc2UgU3RhbmRhcmRQYWNrYWdlLlNJX19SRUNPVkVSWV9SQVRFOgorCQkJCXJldHVybiByZWNvdmVyeVJhdGUgIT0gUkVDT1ZFUllfUkFURV9FREVGQVVMVDsKKwkJCWNhc2UgU3RhbmRhcmRQYWNrYWdlLlNJX19JTkZFQ1RJT1VTX01PUlRBTElUWV9SQVRFOgorCQkJCXJldHVybiBpbmZlY3Rpb3VzTW9ydGFsaXR5UmF0ZSAhPSBJTkZFQ1RJT1VTX01PUlRBTElUWV9SQVRFX0VERUZBVUxUOworCQl9CisJCXJldHVybiBzdXBlci5lSXNTZXQoZmVhdHVyZUlEKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEByZXR1cm4KKwkgKiAKKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIFN0cmluZyB0b1N0cmluZygpIHsKKwkJaWYgKGVJc1Byb3h5KCkpIHJldHVybiBzdXBlci50b1N0cmluZygpOworCisJCVN0cmluZ0J1ZmZlciByZXN1bHQgPSBuZXcgU3RyaW5nQnVmZmVyKHN1cGVyLnRvU3RyaW5nKCkpOworCQlyZXN1bHQuYXBwZW5kKCIgKHRyYW5zbWlzc2lvblJhdGU6ICIpOyAvLyROT04tTkxTLTEkCisJCXJlc3VsdC5hcHBlbmQodHJhbnNtaXNzaW9uUmF0ZSk7CisJCXJlc3VsdC5hcHBlbmQoIiwgbm9uTGluZWFyaXR5Q29lZmZpY2llbnQ6ICIpOyAvLyROT04tTkxTLTEkCisJCXJlc3VsdC5hcHBlbmQobm9uTGluZWFyaXR5Q29lZmZpY2llbnQpOworCQlyZXN1bHQuYXBwZW5kKCIsIHJlY292ZXJ5UmF0ZTogIik7IC8vJE5PTi1OTFMtMSQKKwkJcmVzdWx0LmFwcGVuZChyZWNvdmVyeVJhdGUpOworCQlyZXN1bHQuYXBwZW5kKCIsIGluZmVjdGlvdXNNb3J0YWxpdHlSYXRlOiAiKTsgLy8kTk9OLU5MUy0xJAorCQlyZXN1bHQuYXBwZW5kKGluZmVjdGlvdXNNb3J0YWxpdHlSYXRlKTsKKwkJcmVzdWx0LmFwcGVuZCgnKScpOworCQlyZXR1cm4gcmVzdWx0LnRvU3RyaW5nKCk7CisJfQorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuaW1wbC5TdGFuZGFyZERpc2Vhc2VNb2RlbEltcGwjc2FuZSgpCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIGJvb2xlYW4gc2FuZSgpIHsKKwkJYm9vbGVhbiByZXRWYWx1ZSA9IHN1cGVyLnNhbmUoKTsKKwkJCisJCS8vIHRyYW5zbWlzc2lvblJhdGUKKwkJcmV0VmFsdWUgPSByZXRWYWx1ZSAmJiBnZXRUcmFuc21pc3Npb25SYXRlKCkgPj0gVFJBTlNNSVNTSU9OX1JBVEVfRURFRkFVTFQ7CisJCWFzc2VydCByZXRWYWx1ZTsKKworCQlyZXRWYWx1ZSA9IHJldFZhbHVlICYmICFEb3VibGUuaXNJbmZpbml0ZShnZXRUcmFuc21pc3Npb25SYXRlKCkpOworCQlhc3NlcnQgcmV0VmFsdWU7CisJCQorCQlyZXRWYWx1ZSA9IHJldFZhbHVlICYmICFEb3VibGUuaXNOYU4oZ2V0VHJhbnNtaXNzaW9uUmF0ZSgpKTsKKwkJYXNzZXJ0IHJldFZhbHVlOworCQkKKwkJLy8gcmVjb3ZlcnlSYXRlCisJCXJldFZhbHVlID0gcmV0VmFsdWUgJiYgZ2V0UmVjb3ZlcnlSYXRlKCkgPj0gUkVDT1ZFUllfUkFURV9FREVGQVVMVDsKKwkJYXNzZXJ0IHJldFZhbHVlOworCisJCXJldFZhbHVlID0gcmV0VmFsdWUgJiYgIURvdWJsZS5pc0luZmluaXRlKGdldFJlY292ZXJ5UmF0ZSgpKTsKKwkJYXNzZXJ0IHJldFZhbHVlOworCQkKKwkJcmV0VmFsdWUgPSByZXRWYWx1ZSAmJiAhRG91YmxlLmlzTmFOKGdldFJlY292ZXJ5UmF0ZSgpKTsKKwkJYXNzZXJ0IHJldFZhbHVlOworCQkKKwkJLy8gbm9uTGluZWFyaXR5Q29lZmZpY2llbnQKKwkJcmV0VmFsdWUgPSByZXRWYWx1ZQorCQkJCSYmIGdldE5vbkxpbmVhcml0eUNvZWZmaWNpZW50KCkgPj0gMC4wOworCQlhc3NlcnQgcmV0VmFsdWU7CisKKwkJcmV0VmFsdWUgPSByZXRWYWx1ZSAmJiAhRG91YmxlLmlzSW5maW5pdGUoZ2V0Tm9uTGluZWFyaXR5Q29lZmZpY2llbnQoKSk7CisJCWFzc2VydCByZXRWYWx1ZTsKKwkJCisJCXJldFZhbHVlID0gcmV0VmFsdWUgJiYgIURvdWJsZS5pc05hTihnZXROb25MaW5lYXJpdHlDb2VmZmljaWVudCgpKTsKKwkJYXNzZXJ0IHJldFZhbHVlOworCQkKKwkJcmV0dXJuIHJldFZhbHVlOworCX0gLy8gc2FuZQorCit9IC8vIFNJSW1wbApkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9zdGFuZGFyZC9pbXBsL1NJSW5mZWN0b3JJbXBsLmphdmEgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3N0YW5kYXJkL2ltcGwvU0lJbmZlY3RvckltcGwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYzFmZDMzCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9zdGFuZGFyZC9pbXBsL1NJSW5mZWN0b3JJbXBsLmphdmEKQEAgLTAsMCArMSwyNDMgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLmltcGw7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQXR0cmlidXRlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVTdHJ1Y3R1cmFsRmVhdHVyZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuaW1wbC5FTm90aWZpY2F0aW9uSW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguSW50ZWdyYXRpb25MYWJlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguTGFiZWxWYWx1ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuQWN0aXZhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5EaXNlYXNlTW9kZWxMYWJlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU0lJbmZlY3RvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbFZhbHVlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZFBhY2thZ2U7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPlNJIEluZmVjdG9yPC9iPjwvZW0+Jy4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogPHA+CisgKiBUaGUgZm9sbG93aW5nIGZlYXR1cmVzIGFyZSBpbXBsZW1lbnRlZDoKKyAqIDx1bD4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuaW1wbC5TSUluZmVjdG9ySW1wbCNnZXRJbmZlY3Rpb3VzQ291bnQgPGVtPkluZmVjdGlvdXMgQ291bnQ8L2VtPn08L2xpPgorICogPC91bD4KKyAqIDwvcD4KKyAqCisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBTSUluZmVjdG9ySW1wbCBleHRlbmRzIFN0YW5kYXJkSW5mZWN0b3JJbXBsIGltcGxlbWVudHMgU0lJbmZlY3RvciB7CisJLyoqCisJICogVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldEluZmVjdGlvdXNDb3VudCgpIDxlbT5JbmZlY3Rpb3VzIENvdW50PC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNnZXRJbmZlY3Rpb3VzQ291bnQoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgZG91YmxlIElORkVDVElPVVNfQ09VTlRfRURFRkFVTFQgPSAxLjA7CisKKwkvKioKKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRJbmZlY3Rpb3VzQ291bnQoKSA8ZW0+SW5mZWN0aW91cyBDb3VudDwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZ2V0SW5mZWN0aW91c0NvdW50KCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgZG91YmxlIGluZmVjdGlvdXNDb3VudCA9IElORkVDVElPVVNfQ09VTlRfRURFRkFVTFQ7CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIFNJSW5mZWN0b3JJbXBsKCkgeworCQlzdXBlcigpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgRUNsYXNzIGVTdGF0aWNDbGFzcygpIHsKKwkJcmV0dXJuIFN0YW5kYXJkUGFja2FnZS5MaXRlcmFscy5TSV9JTkZFQ1RPUjsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgZG91YmxlIGdldEluZmVjdGlvdXNDb3VudCgpIHsKKwkJcmV0dXJuIGluZmVjdGlvdXNDb3VudDsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRJbmZlY3Rpb3VzQ291bnQoZG91YmxlIG5ld0luZmVjdGlvdXNDb3VudCkgeworCQlkb3VibGUgb2xkSW5mZWN0aW91c0NvdW50ID0gaW5mZWN0aW91c0NvdW50OworCQlpbmZlY3Rpb3VzQ291bnQgPSBuZXdJbmZlY3Rpb3VzQ291bnQ7CisJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkKKwkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIFN0YW5kYXJkUGFja2FnZS5TSV9JTkZFQ1RPUl9fSU5GRUNUSU9VU19DT1VOVCwgb2xkSW5mZWN0aW91c0NvdW50LCBpbmZlY3Rpb3VzQ291bnQpKTsKKwl9CisKKwkvKioKKwkgKiBAcGFyYW0gZGlzZWFzZU1vZGVsTGFiZWwKKwkgKiAgICAgICAgICAgIHRoZSBkaXNlYXNlIG1vZGVsIGxhYmVsIHRvIGhhdmUgaXRzIGluZmVjdGlvdXMgdmFsdWUKKwkgKiAgICAgICAgICAgIGluaXRpYWxpemVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgZG9Jbml0aWFsaXphdGlvbihmaW5hbCBEaXNlYXNlTW9kZWxMYWJlbCBkaXNlYXNlTW9kZWxMYWJlbCkgeworCQlmaW5hbCBJbnRlZ3JhdGlvbkxhYmVsIHNpTGFiZWwgPSAoSW50ZWdyYXRpb25MYWJlbCkgZGlzZWFzZU1vZGVsTGFiZWw7CisJCWZpbmFsIFN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZSB2YWx1ZSA9IChTdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsVmFsdWUpc2lMYWJlbC5nZXRDdXJyZW50VmFsdWUoKTsKKwkJCisJCUVTdHJ1Y3R1cmFsRmVhdHVyZSBpbmZGZWF0dXJlID0gZmluZEZlYXR1cmUodGhpcy5nZXRUYXJnZXRGZWF0dXJlKCksIHZhbHVlKTsKKwkJaWYoaW5mRmVhdHVyZSA9PSBudWxsKSB7CisJCQlBY3RpdmF0b3IubG9nRXJyb3IoIlVuYWJsZSB0byBpbmZlY3QgaW50byBzdGF0ZSAiK3RoaXMuZ2V0VGFyZ2V0RmVhdHVyZSgpKyIgZm9yIGRpc2Vhc2UgbGFiZWwgIitzaUxhYmVsLCBuZXcgRXhjZXB0aW9uKCkpOworCQkJcmV0dXJuOworCQl9CisJCWRvdWJsZSBuZXdTVmFsdWUgPSAwLjA7CisJCWRvdWJsZSBjdXJyZW50UG9wID0gdmFsdWUuZ2V0UG9wdWxhdGlvbkNvdW50KCk7CisKKwkJCisJCWRvdWJsZSBhZGRpdGlvbmFsSW5mZWN0aW91cyA9IDAuMDsKKwkJaWYodGhpcy5pc0luZmVjdFBlcmNlbnRhZ2UoKSkKKwkJCWFkZGl0aW9uYWxJbmZlY3Rpb3VzID0gY3VycmVudFBvcCAqIChnZXRJbmZlY3Rpb3VzQ291bnQoKSAvIDEwMC4wKTsKKwkJZWxzZQorCQkJYWRkaXRpb25hbEluZmVjdGlvdXMgPSBnZXRJbmZlY3Rpb3VzQ291bnQoKTsKKworCQlpZihhZGRpdGlvbmFsSW5mZWN0aW91cyA+IHZhbHVlLmdldFMoKSkgYWRkaXRpb25hbEluZmVjdGlvdXMgPSB2YWx1ZS5nZXRTKCk7CisJCQorCQluZXdTVmFsdWUgPSB2YWx1ZS5nZXRTKCkgLSBhZGRpdGlvbmFsSW5mZWN0aW91czsKKwkJCisJCWRvdWJsZSBjdXJyZW50SW5mID0gKERvdWJsZSl2YWx1ZS5lR2V0KGluZkZlYXR1cmUpOworCQlmaW5hbCBkb3VibGUgbmV3SVZhbHVlID0gY3VycmVudEluZiArIGFkZGl0aW9uYWxJbmZlY3Rpb3VzOworCQkKKwkJbmV3U1ZhbHVlID0gbmV3U1ZhbHVlIDwgMCA/IDAgOiBuZXdTVmFsdWU7CisJCSgoU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbFZhbHVlKXNpTGFiZWwuZ2V0Q3VycmVudFZhbHVlKCkpLnNldFMobmV3U1ZhbHVlKTsKKwkJKChTdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsVmFsdWUpc2lMYWJlbC5nZXROZXh0VmFsdWUoKSkuc2V0UyhuZXdTVmFsdWUpOworCQkoKChTdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsVmFsdWUpc2lMYWJlbC5nZXRQcm9iZVZhbHVlKCkpKS5zZXRTKG5ld1NWYWx1ZSk7CisJCS8vIFdlIGNvdWxkIGRpdmlkZSB0aGVtIGJldHdlZW4gdGhlIHR3byBpbmZlY3Rpb3VzIHN0YXRlcywgCisJCS8vIGJ1dCB0aGlzIHNob3VsZCBiZSBva2F5CisJCSgoU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbFZhbHVlKXNpTGFiZWwuZ2V0Q3VycmVudFZhbHVlKCkpLmVTZXQoaW5mRmVhdHVyZSwgbmV3SVZhbHVlKTsKKwkJKChTdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsVmFsdWUpc2lMYWJlbC5nZXROZXh0VmFsdWUoKSkuZVNldChpbmZGZWF0dXJlLCBuZXdJVmFsdWUpOworCQkoKFN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZSlzaUxhYmVsLmdldFByb2JlVmFsdWUoKSkuZVNldChpbmZGZWF0dXJlLCBuZXdJVmFsdWUpOworCX0gLy8gZG9Jbml0aWFsaXphdGlvbgorCisJcHJvdGVjdGVkIEVTdHJ1Y3R1cmFsRmVhdHVyZSBmaW5kRmVhdHVyZShTdHJpbmcgbmFtZSwgTGFiZWxWYWx1ZSBsdikgeworCQlmb3IoRUF0dHJpYnV0ZSBlYTpsdi5lQ2xhc3MoKS5nZXRFQWxsQXR0cmlidXRlcygpKSB7CisJCQlpZihlYS5nZXROYW1lKCkuZXF1YWxzKG5hbWUpKSByZXR1cm4gZWE7CisJCX0KKwkJcmV0dXJuIG51bGw7CisJfQorCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogCisJICogQHBhcmFtIGZlYXR1cmVJRAorCSAqIEBwYXJhbSByZXNvbHZlCisJICogQHBhcmFtIGNvcmVUeXBlCisJICogCisJICogQHJldHVybgorCSAqIAorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgT2JqZWN0IGVHZXQoaW50IGZlYXR1cmVJRCwgYm9vbGVhbiByZXNvbHZlLCBib29sZWFuIGNvcmVUeXBlKSB7CisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7CisJCQljYXNlIFN0YW5kYXJkUGFja2FnZS5TSV9JTkZFQ1RPUl9fSU5GRUNUSU9VU19DT1VOVDoKKwkJCQlyZXR1cm4gZ2V0SW5mZWN0aW91c0NvdW50KCk7CisJCX0KKwkJcmV0dXJuIHN1cGVyLmVHZXQoZmVhdHVyZUlELCByZXNvbHZlLCBjb3JlVHlwZSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAcGFyYW0gZmVhdHVyZUlECisJICogQHBhcmFtIG5ld1ZhbHVlCisJICogCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGVTZXQoaW50IGZlYXR1cmVJRCwgT2JqZWN0IG5ld1ZhbHVlKSB7CisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7CisJCQljYXNlIFN0YW5kYXJkUGFja2FnZS5TSV9JTkZFQ1RPUl9fSU5GRUNUSU9VU19DT1VOVDoKKwkJCQlzZXRJbmZlY3Rpb3VzQ291bnQoKERvdWJsZSluZXdWYWx1ZSk7CisJCQkJcmV0dXJuOworCQl9CisJCXN1cGVyLmVTZXQoZmVhdHVyZUlELCBuZXdWYWx1ZSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAcGFyYW0gZmVhdHVyZUlECisJICogCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGVVbnNldChpbnQgZmVhdHVyZUlEKSB7CisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7CisJCQljYXNlIFN0YW5kYXJkUGFja2FnZS5TSV9JTkZFQ1RPUl9fSU5GRUNUSU9VU19DT1VOVDoKKwkJCQlzZXRJbmZlY3Rpb3VzQ291bnQoSU5GRUNUSU9VU19DT1VOVF9FREVGQVVMVCk7CisJCQkJcmV0dXJuOworCQl9CisJCXN1cGVyLmVVbnNldChmZWF0dXJlSUQpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogCisJICogQHBhcmFtIGZlYXR1cmVJRAorCSAqIAorCSAqIEByZXR1cm4KKwkgKiAKKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIGJvb2xlYW4gZUlzU2V0KGludCBmZWF0dXJlSUQpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJCWNhc2UgU3RhbmRhcmRQYWNrYWdlLlNJX0lORkVDVE9SX19JTkZFQ1RJT1VTX0NPVU5UOgorCQkJCXJldHVybiBpbmZlY3Rpb3VzQ291bnQgIT0gSU5GRUNUSU9VU19DT1VOVF9FREVGQVVMVDsKKwkJfQorCQlyZXR1cm4gc3VwZXIuZUlzU2V0KGZlYXR1cmVJRCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAcmV0dXJuCisJICogCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKSB7CisJCWlmIChlSXNQcm94eSgpKSByZXR1cm4gc3VwZXIudG9TdHJpbmcoKTsKKworCQlTdHJpbmdCdWZmZXIgcmVzdWx0ID0gbmV3IFN0cmluZ0J1ZmZlcihzdXBlci50b1N0cmluZygpKTsKKwkJcmVzdWx0LmFwcGVuZCgiIChpbmZlY3Rpb3VzQ291bnQ6ICIpOyAvLyROT04tTkxTLTEkCisJCXJlc3VsdC5hcHBlbmQoaW5mZWN0aW91c0NvdW50KTsKKwkJcmVzdWx0LmFwcGVuZCgnKScpOworCQlyZXR1cm4gcmVzdWx0LnRvU3RyaW5nKCk7CisJfQorCit9IC8vIFNJSW5mZWN0b3JJbXBsCmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3N0YW5kYXJkL2ltcGwvU0lMYWJlbEltcGwuamF2YSBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvc3RhbmRhcmQvaW1wbC9TSUxhYmVsSW1wbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFhYWE0YjkKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3N0YW5kYXJkL2ltcGwvU0lMYWJlbEltcGwuamF2YQpAQCAtMCwwICsxLDY1IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5pbXBsOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5JbnRlcm5hbEVPYmplY3Q7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLmltcGwuRU5vdGlmaWNhdGlvbkltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkxhYmVsVmFsdWU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlNJTGFiZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlNJTGFiZWxWYWx1ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmRGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZFBhY2thZ2U7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnCisgKiA8ZW0+PGI+U0kgTGFiZWw8L2I+PC9lbT4nLiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIDxwPgorICogPC9wPgorICoKKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIFNJTGFiZWxJbXBsIGV4dGVuZHMgU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbEltcGwgaW1wbGVtZW50cworCQlTSUxhYmVsIHsKKworCS8qKgorCSAqIFRoaXMgaXMgdGhlIHRvcC1sZXZlbCBzZWdtZW50IGZvciBhbGwgdHlwZSBVUkkncyBmb3IgU0kgZGlzZWFzZSBtb2RlbAorCSAqIGxhYmVscy4KKwkgKi8KKwlTdHJpbmcgVVJJX1RZUEVfU0lfTEFCRUxfU0VHTUVOVCA9IFVSSV9UWVBFX1NUQU5EQVJEX0RJU0VBU0VfTU9ERUxfTEFCRUxfU0VHTUVOVAorCQkJKyAiL3NpIjsKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJcHJvdGVjdGVkIFNJTGFiZWxJbXBsKCkgeworCQlzZXRDdXJyZW50VmFsdWUoU3RhbmRhcmRGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVTSUxhYmVsVmFsdWUoKSk7CisJCXNldE5leHRWYWx1ZShTdGFuZGFyZEZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZVNJTGFiZWxWYWx1ZSgpKTsKKwkJc2V0VGVtcFZhbHVlKFN0YW5kYXJkRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlU0lMYWJlbFZhbHVlKCkpOworCQlzZXRQcm9iZVZhbHVlKFN0YW5kYXJkRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlU0lMYWJlbFZhbHVlKCkpOworCQlzZXRFcnJvclNjYWxlKFN0YW5kYXJkRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlU0lMYWJlbFZhbHVlKCkpOworCQlzZXREZWx0YVZhbHVlKFN0YW5kYXJkRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlU0lMYWJlbFZhbHVlKCkpOworCX0gLy8gU0lMYWJlbEltcGwKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgRUNsYXNzIGVTdGF0aWNDbGFzcygpIHsKKwkJcmV0dXJuIFN0YW5kYXJkUGFja2FnZS5MaXRlcmFscy5TSV9MQUJFTDsKKwl9CisKK30gLy8gU0lMYWJlbEltcGwKZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvc3RhbmRhcmQvaW1wbC9TSUxhYmVsVmFsdWVJbXBsLmphdmEgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3N0YW5kYXJkL2ltcGwvU0lMYWJlbFZhbHVlSW1wbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZhMmQ4YmYKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3N0YW5kYXJkL2ltcGwvU0lMYWJlbFZhbHVlSW1wbC5qYXZhCkBAIC0wLDAgKzEsMjQ3IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5pbXBsOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5pbXBsLkVOb3RpZmljYXRpb25JbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5JbnRlZ3JhdGlvbkxhYmVsVmFsdWU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkxhYmVsVmFsdWU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLkRpc2Vhc2VNb2RlbExhYmVsVmFsdWU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlNJTGFiZWxWYWx1ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmRQYWNrYWdlOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IEFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5TSSBMYWJlbCBWYWx1ZTwvYj48L2VtPicuCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIDxwPgorICogVGhlIGZvbGxvd2luZyBmZWF0dXJlcyBhcmUgaW1wbGVtZW50ZWQ6CisgKiA8dWw+CisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLmltcGwuU0lMYWJlbFZhbHVlSW1wbCNnZXRJIDxlbT5JPC9lbT59PC9saT4KKyAqIDwvdWw+CisgKiA8L3A+CisgKgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgU0lMYWJlbFZhbHVlSW1wbCBleHRlbmRzIFN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZUltcGwKKwkJaW1wbGVtZW50cyBTSUxhYmVsVmFsdWUgeworCS8qKgorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRJKCkgPGVtPkk8L2VtPn0nIGF0dHJpYnV0ZS4gPCEtLQorCSAqIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAc2VlICNnZXRJKCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIGRvdWJsZSBJX0VERUZBVUxUID0gMC4wOworCisJLyoqCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0SSgpIDxlbT5JPC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNnZXRJKCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgZG91YmxlIGkgPSBJX0VERUZBVUxUOworCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBTSUxhYmVsVmFsdWVJbXBsKCkgeworCQlzdXBlcigpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogCisJICogVGhpcyBpcyB1c2VkIHRvIGNyZWF0ZSBpbnN0YW5jZXMgZm9yIHRlc3RpbmcgcHVycG9zZXMuCisJICogCisJICogQHBhcmFtIHMKKwkgKiAgICAgICAgICAgIHRoZSBudW1iZXIgb2Ygc3VzY2VwdGlibGUgcG9wdWxhdGlvbiBtZW1iZXJzCisJICogCisJICogQHBhcmFtIGlSCisJICogICAgICAgICAgICB0aGUgbnVtYmVyIG9mIHJlY292ZXJpbmcgaW5mZWN0aW91cyBwb3B1bGF0aW9uIG1lbWJlcnMKKwkgKiAKKwkgKiBAcGFyYW0gaUYKKwkgKiAgICAgICAgICAgIHRoZSBudW1iZXIgb2YgZmF0YWxseSBpbmZlY3Rpb3VzIHBvcHVsYXRpb24gbWVtYmVycworCSAqIAorCSAqIEBwYXJhbSBpbmNpZGVuY2UKKwkgKiAgICAgICAgICAgIHRoZSBuZXcgaW5jaWRlbmNlIGZyb20gdGhlIGludGVyYWN0aW9uIHRlcm0gaW4gdGhlIGNvbXBhcnRtZW50IG1vZGVsCisJICogCisJICogQHBhcmFtIGJpcnRocworCSAqICAgICAgICAgICAgdGhlIG51bWJlciBvZiBiaXJ0aHMgdGhhdCBoYXZlIG9jY3VycmVkIGluIHRoZSBwb3B1bGF0aW9uCisJICogQHBhcmFtIGRlYXRocworCSAqICAgICAgICAgICAgdGhlIHRvdGFsIG51bWJlciBvZiBkZWF0aHMgdGhhdCBoYXZlIG9jY3VycmVkIGluIHRoZSBwb3B1bGF0aW9uCisJICogQHBhcmFtIGRpc2Vhc2VEZWF0aHMKKwkgKiAgICAgICAgICAgIHRoZSBudW1iZXIgb2YgZGVhdGhzIGR1ZSB0byB0aGUgZGlzZWFzZSB0aGF0IGhhdmUgb2NjdXJyZWQgaW4KKwkgKiAgICAgICAgICAgIHRoZSBwb3B1bGF0aW9uCisJICogCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICovCisJcHVibGljIFNJTGFiZWxWYWx1ZUltcGwoZmluYWwgZG91YmxlIHMsIGZpbmFsIGRvdWJsZSBpLCBmaW5hbCBkb3VibGUgaW5jaWRlbmNlLAorCQkJZmluYWwgZG91YmxlIGRpc2Vhc2VEZWF0aHMpIHsKKwkJc3VwZXIocywgaW5jaWRlbmNlLCBkaXNlYXNlRGVhdGhzKTsKKwkJdGhpcy5zZXRJKGkpOworCX0gLy8gU0lMYWJlbFZhbHVlSW1wbAorCisJCisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIFRoaXMgaXMgdXNlZCB0byBjcmVhdGUgaW5zdGFuY2VzIGZvciB0ZXN0aW5nIHB1cnBvc2VzLgorCSAqIAorCSAqIEBwYXJhbSBzCisJICogICAgICAgICAgICB0aGUgbnVtYmVyIG9mIHN1c2NlcHRpYmxlIHBvcHVsYXRpb24gbWVtYmVycworCSAqIAorCSAqIEBwYXJhbSBpUgorCSAqICAgICAgICAgICAgdGhlIG51bWJlciBvZiByZWNvdmVyaW5nIGluZmVjdGlvdXMgcG9wdWxhdGlvbiBtZW1iZXJzCisJICogCisJICogQHBhcmFtIGlGCisJICogICAgICAgICAgICB0aGUgbnVtYmVyIG9mIGZhdGFsbHkgaW5mZWN0aW91cyBwb3B1bGF0aW9uIG1lbWJlcnMKKwkgKiAgICAgICAgICAgIAorCSAqIEBwYXJhbSBiaXJ0aHMKKwkgKiAgICAgICAgICAgIHRoZSBudW1iZXIgb2YgYmlydGhzIHRoYXQgaGF2ZSBvY2N1cnJlZCBpbiB0aGUgcG9wdWxhdGlvbgorCSAqIEBwYXJhbSBkZWF0aHMKKwkgKiAgICAgICAgICAgIHRoZSB0b3RhbCBudW1iZXIgb2YgZGVhdGhzIHRoYXQgaGF2ZSBvY2N1cnJlZCBpbiB0aGUgcG9wdWxhdGlvbgorCSAqIEBwYXJhbSBkaXNlYXNlRGVhdGhzCisJICogICAgICAgICAgICB0aGUgbnVtYmVyIG9mIGRlYXRocyBkdWUgdG8gdGhlIGRpc2Vhc2UgdGhhdCBoYXZlIG9jY3VycmVkIGluCisJICogICAgICAgICAgICB0aGUgcG9wdWxhdGlvbgorCSAqIAorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqLworCXB1YmxpYyBTSUxhYmVsVmFsdWVJbXBsKGZpbmFsIGRvdWJsZSBzLCBmaW5hbCBkb3VibGUgaSwgCisJCQlmaW5hbCBkb3VibGUgZGlzZWFzZURlYXRocykgeworCQlzdXBlcihzLCAwLCBkaXNlYXNlRGVhdGhzKTsKKwkJdGhpcy5zZXRJKGkpOworCQl0aGlzLnNldERpc2Vhc2VEZWF0aHMoZGlzZWFzZURlYXRocyk7CisJfSAvLyBTSUxhYmVsVmFsdWVJbXBsCisKKwkKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIEVDbGFzcyBlU3RhdGljQ2xhc3MoKSB7CisJCXJldHVybiBTdGFuZGFyZFBhY2thZ2UuTGl0ZXJhbHMuU0lfTEFCRUxfVkFMVUU7CisJfQorCisJCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIGRvdWJsZSBnZXRJKCkgeworCQlyZXR1cm4gaTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRJKGRvdWJsZSBuZXdJKSB7CisJCWRvdWJsZSBvbGRJID0gaTsKKwkJaSA9IG5ld0k7CisJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkKKwkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIFN0YW5kYXJkUGFja2FnZS5TSV9MQUJFTF9WQUxVRV9fSSwgb2xkSSwgaSkpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogCisJICogQHBhcmFtIGZlYXR1cmVJRAorCSAqIEBwYXJhbSByZXNvbHZlCisJICogQHBhcmFtIGNvcmVUeXBlCisJICogQHJldHVybgorCSAqIAorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgT2JqZWN0IGVHZXQoaW50IGZlYXR1cmVJRCwgYm9vbGVhbiByZXNvbHZlLCBib29sZWFuIGNvcmVUeXBlKSB7CisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7CisJCQljYXNlIFN0YW5kYXJkUGFja2FnZS5TSV9MQUJFTF9WQUxVRV9fSToKKwkJCQlyZXR1cm4gZ2V0SSgpOworCQl9CisJCXJldHVybiBzdXBlci5lR2V0KGZlYXR1cmVJRCwgcmVzb2x2ZSwgY29yZVR5cGUpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGVTZXQoaW50IGZlYXR1cmVJRCwgT2JqZWN0IG5ld1ZhbHVlKSB7CisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7CisJCQljYXNlIFN0YW5kYXJkUGFja2FnZS5TSV9MQUJFTF9WQUxVRV9fSToKKwkJCQlzZXRJKChEb3VibGUpbmV3VmFsdWUpOworCQkJCXJldHVybjsKKwkJfQorCQlzdXBlci5lU2V0KGZlYXR1cmVJRCwgbmV3VmFsdWUpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGVVbnNldChpbnQgZmVhdHVyZUlEKSB7CisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7CisJCQljYXNlIFN0YW5kYXJkUGFja2FnZS5TSV9MQUJFTF9WQUxVRV9fSToKKwkJCQlzZXRJKElfRURFRkFVTFQpOworCQkJCXJldHVybjsKKwkJfQorCQlzdXBlci5lVW5zZXQoZmVhdHVyZUlEKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBwYXJhbSBmZWF0dXJlSUQKKwkgKiBAcmV0dXJuCisJICogCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBib29sZWFuIGVJc1NldChpbnQgZmVhdHVyZUlEKSB7CisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7CisJCQljYXNlIFN0YW5kYXJkUGFja2FnZS5TSV9MQUJFTF9WQUxVRV9fSToKKwkJCQlyZXR1cm4gaSAhPSBJX0VERUZBVUxUOworCQl9CisJCXJldHVybiBzdXBlci5lSXNTZXQoZmVhdHVyZUlEKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkgeworCQlpZiAoZUlzUHJveHkoKSkgcmV0dXJuIHN1cGVyLnRvU3RyaW5nKCk7CisKKwkJU3RyaW5nQnVmZmVyIHJlc3VsdCA9IG5ldyBTdHJpbmdCdWZmZXIoc3VwZXIudG9TdHJpbmcoKSk7CisJCXJlc3VsdC5hcHBlbmQoIiAoaTogIik7IC8vJE5PTi1OTFMtMSQKKwkJcmVzdWx0LmFwcGVuZChpKTsKKwkJcmVzdWx0LmFwcGVuZCgnKScpOworCQlyZXR1cm4gcmVzdWx0LnRvU3RyaW5nKCk7CisJfQorCQorfSAvLyBTSUxhYmVsVmFsdWVJbXBsCmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3N0YW5kYXJkL2ltcGwvU0lSSW1wbC5qYXZhIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9zdGFuZGFyZC9pbXBsL1NJUkltcGwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMThjNzhjCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9zdGFuZGFyZC9pbXBsL1NJUkltcGwuamF2YQpAQCAtMCwwICsxLDM0MSBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuaW1wbDsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzczsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuaW1wbC5FTm90aWZpY2F0aW9uSW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguTm9kZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuU1RFTVRpbWU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLkRpc2Vhc2VNb2RlbExhYmVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5EaXNlYXNlTW9kZWxMYWJlbFZhbHVlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TSVI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlNJUkxhYmVsVmFsdWU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmRGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZFBhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcnZlbnRpb25zLlN0YW5kYXJkSW50ZXJ2ZW50aW9uTGFiZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcnZlbnRpb25zLlN0YW5kYXJkSW50ZXJ2ZW50aW9uTGFiZWxWYWx1ZTsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiBBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+U0lSPC9iPjwvZW0+Jy4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogPHA+CisgKiBUaGUgZm9sbG93aW5nIGZlYXR1cmVzIGFyZSBpbXBsZW1lbnRlZDoKKyAqIDx1bD4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuaW1wbC5TSVJJbXBsI2dldEltbXVuaXR5TG9zc1JhdGUgPGVtPkltbXVuaXR5IExvc3MgUmF0ZTwvZW0+fTwvbGk+CisgKiA8L3VsPgorICogPC9wPgorICoKKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGFic3RyYWN0IGNsYXNzIFNJUkltcGwgZXh0ZW5kcyBTSUltcGwgaW1wbGVtZW50cyBTSVIgeworCS8qKgorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRJbW11bml0eUxvc3NSYXRlKCkgPGVtPkltbXVuaXR5IExvc3MgUmF0ZTwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI2dldEltbXVuaXR5TG9zc1JhdGUoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgZG91YmxlIElNTVVOSVRZX0xPU1NfUkFURV9FREVGQVVMVCA9IDAuMDsKKworCS8qKgorCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldEltbXVuaXR5TG9zc1JhdGUoKSA8ZW0+SW1tdW5pdHkgTG9zcyBSYXRlPC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZ2V0SW1tdW5pdHlMb3NzUmF0ZSgpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIGRvdWJsZSBpbW11bml0eUxvc3NSYXRlID0gSU1NVU5JVFlfTE9TU19SQVRFX0VERUZBVUxUOworCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBTSVJJbXBsKCkgeworCQlzdXBlcigpOworCX0KKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLmltcGwuRGlzZWFzZU1vZGVsSW1wbCNjcmVhdGVEaXNlYXNlTW9kZWxMYWJlbCgpCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIERpc2Vhc2VNb2RlbExhYmVsIGNyZWF0ZURpc2Vhc2VNb2RlbExhYmVsKFN0cmluZyBwb3B1bGF0aW9uSWRlbnRpZmllcikgeworCQlyZXR1cm4gU3RhbmRhcmRGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVTSVJMYWJlbCgpOworCX0gLy8gY3JlYXRlRGlzZWFzZU1vZGVsTGFiZWwKKwkKKwlAT3ZlcnJpZGUKKwlwdWJsaWMgRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZSBjcmVhdGVEaXNlYXNlTW9kZWxMYWJlbFZhbHVlKFN0cmluZyBwb3B1bGF0aW9uSWRlbnRpZmllcikgeworCQlyZXR1cm4gU3RhbmRhcmRGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVTSVJMYWJlbFZhbHVlKCk7CisJfSAvLyBjcmVhdGVEaXNlYXNlTW9kZWxMYWJlbFZhbHVlCisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5pbXBsLlNJSW1wbCNjb21wdXRlVHJhbnNpdGlvbnMoU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbFZhbHVlLAorCSAqICAgICAgU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbCwgbG9uZykKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbFZhbHVlIGNvbXB1dGVEaXNlYXNlRGVsdGFzKAorCQkJZmluYWwgU1RFTVRpbWUgdGltZSwgCisJCQlmaW5hbCBTdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsVmFsdWUgY3VycmVudFN0YXRlLAorCQkJZmluYWwgU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbCBkaXNlYXNlTGFiZWwsIGZpbmFsIGxvbmcgdGltZURlbHRhLCBEaXNlYXNlTW9kZWxMYWJlbFZhbHVlIHJldHVyblZhbHVlKSB7CisJCWZpbmFsIFNJUkxhYmVsVmFsdWUgY3VycmVudFNJUiA9IChTSVJMYWJlbFZhbHVlKSBjdXJyZW50U3RhdGU7CisJCQorCQkvLyBDb21wdXRlIGRlYXRocworCQlmaW5hbCBkb3VibGUgYWRqdXN0ZWRJbmZlY3Rpb3VzTW9ydGFsaXR5UmF0ZSA9IGdldEFkanVzdGVkSW5mZWN0aW91c01vcnRhbGl0eVJhdGUodGltZURlbHRhKTsKKwkJZmluYWwgZG91YmxlIGRpc2Vhc2VEZWF0aHMgPSBhZGp1c3RlZEluZmVjdGlvdXNNb3J0YWxpdHlSYXRlCisJCQkJKiBjdXJyZW50U0lSLmdldEkoKTsKKwkJCisJCS8vIFRoaXMgaXMgYmV0YSoKKwkJZG91YmxlIHRyYW5zbWlzc2lvblJhdGUgPSBnZXRBZGp1c3RlZFRyYW5zbWlzc2lvblJhdGUodGltZURlbHRhKTsKKwkJCQkKKwkJaWYoIXRoaXMuaXNGcmVxdWVuY3lEZXBlbmRlbnQoKSkgdHJhbnNtaXNzaW9uUmF0ZSAqPSBnZXRUcmFuc21pc3Npb25SYXRlU2NhbGVGYWN0b3IoZGlzZWFzZUxhYmVsKTsKKworCQkvLyBUaGUgZWZmZWN0aXZlIEluZmVjdGlvdXMgcG9wdWxhdGlvbiAgaXMgYSBkaW1lbnNpb25sZXMgbnVtYmVyIG5vcm1hbGl6ZSBieSB0b3RhbAorCQkvLyBwb3B1bGF0aW9uIHVzZWQgaW4gdGVoIGNvbXB1dGF0aW9uIG9mIGJldHMqUyppIHdoZXJlIGkgPSBJZWZmZWN0aXZlL1BvcC4KKwkJLy8gVGhpcyBpbmNsdWRlcyBhIGNvcnJlY3Rpb24gdG8gdGhlIGN1cnJlbnQKKwkJLy8gaW5mZWN0aW91cyBwb3B1bGF0aW9uIChJZWZmZWN0aXZlKSBiYXNlZCBvbiB0aGUgY29uc2VydmVkIGV4Y2hhbmdlIG9mIHBlb3BsZSAoY2lyY3VsYXRpb24pCisJCS8vIGJldHdlZW4gcmVnaW9ucy4gTm90ZSB0aGF0IHRoaXMgaXMgbm8gdGhlICJhcnJpdmFscyIgYW5kICJkZXBhcnR1cmVzIiB3aGljaCBhcmUKKwkJLy8gYSBkaWZmZXJlbnQgcHJvY2Vzcy4KKwkJZmluYWwgZG91YmxlIGVmZmVjdGl2ZUluZmVjdGlvdXMgPSBnZXROb3JtYWxpemVkRWZmZWN0aXZlSW5mZWN0aW91cyhkaXNlYXNlTGFiZWwuZ2V0Tm9kZSgpLCBkaXNlYXNlTGFiZWwsIGN1cnJlbnRTSVIuZ2V0SSgpKTsKKworCQkvKgorCQkgKiBDb21wdXRlIHN0YXRlIHRyYW5zaXRpb25zCisJCSAqIAorCQkgKiBSZWdhcmRpbmcgY29tcHV0aW5nIHRoZSBudW1iZXIgb2YgdHJhbnNpdGlvbnMgZnJvbSBTdXNjZXB0aWJsZSB0byBFeHBvc2VkOgorCQkgKiBJbiBhIGxpbmVhciBtb2RlbCB0aGUgImVmZmVjdGl2ZSIgbnVtYmVyIG9mIGluZmVjdGlvdXMgcGVvcGxlIGlzIGp1c3QKKwkJICogdGhlIG51bWJlciBvZiBpbmZlY3Rpb3VzIHBlb3BsZSBJbiBhIG5vbmxpbmVhciBtb2RlbCB3ZSBoYXZlIGEKKwkJICogbm9uTGluZWFyaXR5IGV4cG9uZW50IHRoYXQgaXMgPiAxIHRoaXMgbW9kZWxzIHRoZSBlZmZlY3Qgb2YgaW1tdW5lCisJCSAqIHN5c3RlbSBzYXR1cmF0aW9uIHdoZW4gU3VzY2VwdGlibGUgcGVvcGxlIGFyZSBleHBvc2VkIHRvIGxhcmdlCisJCSAqIG51bWJlcnMgb2YgaW5mZWN0aW91cyBwZW9wbGUuIHRoZW4gdGhlICJlZmZlY3RpdmUiIG51bWJlciBvZgorCQkgKiBpbmZlY3Rpb3VzIHBlb3BsZSBpcyBJXm5vbkxpbmVhcml0eSBleHBvbmVudCB0byBhbGxvdyBmb3IgZWl0aGVyCisJCSAqIGxpbmVhciBvciBub25saW5lYXIgbW9kZWxzIHdlIGFsd2F5cyBjYWxjdWxhdGUgSV5ub25MaW5lYXJpdHkKKwkJICogZXhwb25lbnQgYW5kIGFsbG93IG5vbkxpbmVhcml0eSBleHBvbmVudCA+PSAxLjAKKwkJICovCisJCWRvdWJsZSBudW1iZXJPZkluZmVjdGVkVG9SZWNvdmVyZWQgPSBnZXRBZGp1c3RlZFJlY292ZXJ5UmF0ZSh0aW1lRGVsdGEpCisJCSogY3VycmVudFNJUi5nZXRJKCk7CisJCWRvdWJsZSBudW1iZXJPZlJlY292ZXJlZFRvU3VzY2VwdGlibGUgPSBnZXRBZGp1c3RlZEltbXVuaXR5TG9zc1JhdGUodGltZURlbHRhKQorCQkqIGN1cnJlbnRTSVIuZ2V0UigpOworCQkvLyBOZWVkIHRvIGNoZWNrZWQgd2hhdCBkbyBkbyBoZXJlLiBJZiBub24gbGluZWFyIGNvZWZmaWNpZW50IGlzIG5vdCAxIGFuZAorCQkvLyB0aGUgZWZmZWN0aXZlIGluZmVjdGlvdXMgaXMgbmVnYXRpdmUgKHdoaWNoIGlzIHBvc3NpYmxlKSwgd2hhdCBkbyBkbz8gCisJCS8vIExldCdzIGZhbGwgYmFjayBvbiB0aGUgbGluZWFyIG1ldGhvZCBmb3Igbm93LgorCQlkb3VibGUgbnVtYmVyT2ZTdXNjZXB0aWJsZVRvSW5mZWN0ZWQgPSAwLjA7CisJCWlmKGdldE5vbkxpbmVhcml0eUNvZWZmaWNpZW50KCkgIT0gMS4wICYmIGVmZmVjdGl2ZUluZmVjdGlvdXMgPj0gMC4wKQorCQkJbnVtYmVyT2ZTdXNjZXB0aWJsZVRvSW5mZWN0ZWQgPSB0cmFuc21pc3Npb25SYXRlCisJCQkqIGN1cnJlbnRTSVIuZ2V0UygpKiBNYXRoLnBvdyhlZmZlY3RpdmVJbmZlY3Rpb3VzLCBnZXROb25MaW5lYXJpdHlDb2VmZmljaWVudCgpKTsKKwkJZWxzZQorCQkJbnVtYmVyT2ZTdXNjZXB0aWJsZVRvSW5mZWN0ZWQgPSB0cmFuc21pc3Npb25SYXRlCisJCQkqIGN1cnJlbnRTSVIuZ2V0UygpKiBlZmZlY3RpdmVJbmZlY3Rpb3VzOworCQkKKwkJCisJCQorCQkvLyBEZXRlcm1pbmUgZGVsdGEgUworCQlkb3VibGUgZGVsdGFTID0gbnVtYmVyT2ZSZWNvdmVyZWRUb1N1c2NlcHRpYmxlIC0gbnVtYmVyT2ZTdXNjZXB0aWJsZVRvSW5mZWN0ZWQ7CisJCQkvLyBEZXRlcm1pbmUgZGVsdGEgSQorCQlkb3VibGUgZGVsdGFJID0gbnVtYmVyT2ZTdXNjZXB0aWJsZVRvSW5mZWN0ZWQtIG51bWJlck9mSW5mZWN0ZWRUb1JlY292ZXJlZCAtIGRpc2Vhc2VEZWF0aHM7CisJCS8vIERldGVybWluZSBkZWx0YSBSCisJCWRvdWJsZSBkZWx0YVIgPSBudW1iZXJPZkluZmVjdGVkVG9SZWNvdmVyZWQgLSBudW1iZXJPZlJlY292ZXJlZFRvU3VzY2VwdGlibGU7CisJCQorCQkvLyBJZiB0aGVyZSBpcyBhIGNvbnRyb2wgbGFiZWwgYXR0YWNoZWQgdG8gdGhlIHJlZ2lvbiwgd2UgbmVlZCB0byBhZGp1c3QgZm9yIGFueSBpbnRlcnZlbnRpb25zIGluIGVmZmVjdC4KKwkJCisJCVN0YW5kYXJkSW50ZXJ2ZW50aW9uTGFiZWwgc2NsID0gZmluZEludGVydmVudGlvbkxhYmVsKChOb2RlKWRpc2Vhc2VMYWJlbC5nZXRJZGVudGlmaWFibGUoKSk7CisJCWlmKHNjbCAhPSBudWxsKSB7CisJCQlkb3VibGUgdmFjY2luYXRpb25zID0gKChTdGFuZGFyZEludGVydmVudGlvbkxhYmVsVmFsdWUpc2NsLmdldEN1cnJlbnRWYWx1ZSgpKS5nZXRWYWNjaW5hdGlvbnMoKTsKKwkJCWRvdWJsZSBpc29sYXRpb25zID0gKChTdGFuZGFyZEludGVydmVudGlvbkxhYmVsVmFsdWUpc2NsLmdldEN1cnJlbnRWYWx1ZSgpKS5nZXRJc29sYXRpb25zKCk7CisJCQl2YWNjaW5hdGlvbnMgKj0gKChkb3VibGUpIHRpbWVEZWx0YSAvIChkb3VibGUpIGdldFRpbWVQZXJpb2QoKSk7CisJCQlpc29sYXRpb25zICo9ICgoZG91YmxlKSB0aW1lRGVsdGEgLyAoZG91YmxlKSBnZXRUaW1lUGVyaW9kKCkpOworCQkJCisJCQlpZihjdXJyZW50U0lSLmdldFMoKSA8IHZhY2NpbmF0aW9ucykgdmFjY2luYXRpb25zID0gY3VycmVudFNJUi5nZXRTKCk7CisJCQlpZihjdXJyZW50U0lSLmdldEkoKSA8IGlzb2xhdGlvbnMpIGlzb2xhdGlvbnMgPSBjdXJyZW50U0lSLmdldEkoKTsKKwkJCQorCQkJZGVsdGFTIC09IHZhY2NpbmF0aW9uczsKKwkJCWRlbHRhUiArPSB2YWNjaW5hdGlvbnM7CisJCQlkZWx0YUkgLT0gaXNvbGF0aW9uczsKKwkJCWRlbHRhUiArPSBpc29sYXRpb25zOworCQl9CisKKwkJU0lSTGFiZWxWYWx1ZUltcGwgcmV0ID0gKFNJUkxhYmVsVmFsdWVJbXBsKXJldHVyblZhbHVlOworCQlyZXQuc2V0UyhkZWx0YVMpOworCQlyZXQuc2V0SShkZWx0YUkpOworCQlyZXQuc2V0SW5jaWRlbmNlKG51bWJlck9mSW5mZWN0ZWRUb1JlY292ZXJlZCk7CisJCXJldC5zZXRSKGRlbHRhUik7CisJCXJldC5zZXREaXNlYXNlRGVhdGhzKGRpc2Vhc2VEZWF0aHMpOworCQlyZXR1cm4gcmV0OworCQkKKwl9IC8vIGNvbXB1dGVUcmFuc2l0aW9ucworCQorCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgRUNsYXNzIGVTdGF0aWNDbGFzcygpIHsKKwkJcmV0dXJuIFN0YW5kYXJkUGFja2FnZS5MaXRlcmFscy5TSVI7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAcmV0dXJuCisJICogCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBkb3VibGUgZ2V0SW1tdW5pdHlMb3NzUmF0ZSgpIHsKKwkJcmV0dXJuIGltbXVuaXR5TG9zc1JhdGU7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAcGFyYW0gbmV3SW1tdW5pdHlMb3NzUmF0ZQorCSAqIAorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRJbW11bml0eUxvc3NSYXRlKGRvdWJsZSBuZXdJbW11bml0eUxvc3NSYXRlKSB7CisJCWRvdWJsZSBvbGRJbW11bml0eUxvc3NSYXRlID0gaW1tdW5pdHlMb3NzUmF0ZTsKKwkJaW1tdW5pdHlMb3NzUmF0ZSA9IG5ld0ltbXVuaXR5TG9zc1JhdGU7CisJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkKKwkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIFN0YW5kYXJkUGFja2FnZS5TSVJfX0lNTVVOSVRZX0xPU1NfUkFURSwgb2xkSW1tdW5pdHlMb3NzUmF0ZSwgaW1tdW5pdHlMb3NzUmF0ZSkpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogCisJICogQHBhcmFtIHRpbWVEZWx0YQorCSAqIEByZXR1cm4KKwkgKiAKKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCXB1YmxpYyBkb3VibGUgZ2V0QWRqdXN0ZWRJbW11bml0eUxvc3NSYXRlKGxvbmcgdGltZURlbHRhKSB7CisJCXJldHVybiBnZXRJbW11bml0eUxvc3NSYXRlKCkKKwkJCQkqICgoZG91YmxlKSB0aW1lRGVsdGEgLyAoZG91YmxlKSBnZXRUaW1lUGVyaW9kKCkpOworCX0gLy8gZ2V0QWRqdXN0ZWRJbW11bml0eVJhdGUKKworCQorCQorCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogCisJICogQHBhcmFtIGZlYXR1cmVJRAorCSAqIEBwYXJhbSByZXNvbHZlCisJICogQHBhcmFtIGNvcmVUeXBlCisJICogQHJldHVybgorCSAqIAorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgT2JqZWN0IGVHZXQoaW50IGZlYXR1cmVJRCwgYm9vbGVhbiByZXNvbHZlLCBib29sZWFuIGNvcmVUeXBlKSB7CisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7CisJCQljYXNlIFN0YW5kYXJkUGFja2FnZS5TSVJfX0lNTVVOSVRZX0xPU1NfUkFURToKKwkJCQlyZXR1cm4gZ2V0SW1tdW5pdHlMb3NzUmF0ZSgpOworCQl9CisJCXJldHVybiBzdXBlci5lR2V0KGZlYXR1cmVJRCwgcmVzb2x2ZSwgY29yZVR5cGUpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogCisJICogQHBhcmFtIGZlYXR1cmVJRAorCSAqIEBwYXJhbSBuZXdWYWx1ZQorCSAqIAorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBlU2V0KGludCBmZWF0dXJlSUQsIE9iamVjdCBuZXdWYWx1ZSkgeworCQlzd2l0Y2ggKGZlYXR1cmVJRCkgeworCQkJY2FzZSBTdGFuZGFyZFBhY2thZ2UuU0lSX19JTU1VTklUWV9MT1NTX1JBVEU6CisJCQkJc2V0SW1tdW5pdHlMb3NzUmF0ZSgoRG91YmxlKW5ld1ZhbHVlKTsKKwkJCQlyZXR1cm47CisJCX0KKwkJc3VwZXIuZVNldChmZWF0dXJlSUQsIG5ld1ZhbHVlKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBwYXJhbSBmZWF0dXJlSUQKKwkgKiAKKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgZVVuc2V0KGludCBmZWF0dXJlSUQpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJCWNhc2UgU3RhbmRhcmRQYWNrYWdlLlNJUl9fSU1NVU5JVFlfTE9TU19SQVRFOgorCQkJCXNldEltbXVuaXR5TG9zc1JhdGUoSU1NVU5JVFlfTE9TU19SQVRFX0VERUZBVUxUKTsKKwkJCQlyZXR1cm47CisJCX0KKwkJc3VwZXIuZVVuc2V0KGZlYXR1cmVJRCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAcGFyYW0gZmVhdHVyZUlECisJICogQHJldHVybgorCSAqIAorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgYm9vbGVhbiBlSXNTZXQoaW50IGZlYXR1cmVJRCkgeworCQlzd2l0Y2ggKGZlYXR1cmVJRCkgeworCQkJY2FzZSBTdGFuZGFyZFBhY2thZ2UuU0lSX19JTU1VTklUWV9MT1NTX1JBVEU6CisJCQkJcmV0dXJuIGltbXVuaXR5TG9zc1JhdGUgIT0gSU1NVU5JVFlfTE9TU19SQVRFX0VERUZBVUxUOworCQl9CisJCXJldHVybiBzdXBlci5lSXNTZXQoZmVhdHVyZUlEKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEByZXR1cm4KKwkgKiAKKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIFN0cmluZyB0b1N0cmluZygpIHsKKwkJaWYgKGVJc1Byb3h5KCkpIHJldHVybiBzdXBlci50b1N0cmluZygpOworCisJCVN0cmluZ0J1ZmZlciByZXN1bHQgPSBuZXcgU3RyaW5nQnVmZmVyKHN1cGVyLnRvU3RyaW5nKCkpOworCQlyZXN1bHQuYXBwZW5kKCIgKGltbXVuaXR5TG9zc1JhdGU6ICIpOyAvLyROT04tTkxTLTEkCisJCXJlc3VsdC5hcHBlbmQoaW1tdW5pdHlMb3NzUmF0ZSk7CisJCXJlc3VsdC5hcHBlbmQoJyknKTsKKwkJcmV0dXJuIHJlc3VsdC50b1N0cmluZygpOworCX0KKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLmltcGwuU0lJbXBsI3NhbmUoKQorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBib29sZWFuIHNhbmUoKSB7CisJCWJvb2xlYW4gcmV0VmFsdWUgPSBzdXBlci5zYW5lKCk7CisKKwkJcmV0VmFsdWUgPSByZXRWYWx1ZSAmJiBnZXRJbW11bml0eUxvc3NSYXRlKCkgPj0gSU1NVU5JVFlfTE9TU19SQVRFX0VERUZBVUxUOworCQlhc3NlcnQgcmV0VmFsdWU7CisKKwkJcmV0VmFsdWUgPSByZXRWYWx1ZSAmJiAhRG91YmxlLmlzSW5maW5pdGUoZ2V0SW1tdW5pdHlMb3NzUmF0ZSgpKTsKKwkJYXNzZXJ0IHJldFZhbHVlOworCQkKKwkJcmV0VmFsdWUgPSByZXRWYWx1ZSAmJiAhRG91YmxlLmlzTmFOKGdldEltbXVuaXR5TG9zc1JhdGUoKSk7CisJCWFzc2VydCByZXRWYWx1ZTsKKwkJCisJCXJldHVybiByZXRWYWx1ZTsKKwl9IC8vIHNhbmUKKworfSAvLyBTSVJJbXBsCmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3N0YW5kYXJkL2ltcGwvU0lSSW5vY3VsYXRvckltcGwuamF2YSBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvc3RhbmRhcmQvaW1wbC9TSVJJbm9jdWxhdG9ySW1wbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNmOTMxY2IKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3N0YW5kYXJkL2ltcGwvU0lSSW5vY3VsYXRvckltcGwuamF2YQpAQCAtMCwwICsxLDQwOCBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuaW1wbDsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqYXZhLnV0aWwuSGFzaFNldDsKK2ltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7CitpbXBvcnQgamF2YS51dGlsLlNldDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FU3RydWN0dXJhbEZlYXR1cmU7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLmltcGwuRU5vdGlmaWNhdGlvbkltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkdyYXBoOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5JbnRlZ3JhdGlvbkxhYmVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5Ob2RlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5Ob2RlTGFiZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLkRlY29yYXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuTm9kZURlY29yYXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuU1RFTVRpbWU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLkFjdGl2YXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuRGlzZWFzZU1vZGVsTGFiZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLkluZmVjdG9ySW5vY3VsYXRvckNvbGxlY3Rpb247CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlNJUklub2N1bGF0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkRGlzZWFzZU1vZGVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsVmFsdWU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLkxvY2F0aW9uVXRpbGl0eTsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPlNJUiBJbm9jdWxhdG9yPC9iPjwvZW0+Jy4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogPHA+CisgKiBUaGUgZm9sbG93aW5nIGZlYXR1cmVzIGFyZSBpbXBsZW1lbnRlZDoKKyAqIDx1bD4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuaW1wbC5TSVJJbm9jdWxhdG9ySW1wbCNnZXRJbm9jdWxhdGVkUGVyY2VudGFnZSA8ZW0+SW5vY3VsYXRlZCBQZXJjZW50YWdlPC9lbT59PC9saT4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuaW1wbC5TSVJJbm9jdWxhdG9ySW1wbCNpc0lub2N1bGF0ZVBlcmNlbnRhZ2UgPGVtPklub2N1bGF0ZSBQZXJjZW50YWdlPC9lbT59PC9saT4KKyAqIDwvdWw+CisgKiA8L3A+CisgKgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgU0lSSW5vY3VsYXRvckltcGwgZXh0ZW5kcyBTSUluZmVjdG9ySW1wbCBpbXBsZW1lbnRzIFNJUklub2N1bGF0b3IgeworCS8qKgorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRJbm9jdWxhdGVkUGVyY2VudGFnZSgpIDxlbT5Jbm9jdWxhdGVkIFBlcmNlbnRhZ2U8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI2dldElub2N1bGF0ZWRQZXJjZW50YWdlKCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIGRvdWJsZSBJTk9DVUxBVEVEX1BFUkNFTlRBR0VfRURFRkFVTFQgPSAxLjA7CisKKwkvKioKKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRJbm9jdWxhdGVkUGVyY2VudGFnZSgpIDxlbT5Jbm9jdWxhdGVkIFBlcmNlbnRhZ2U8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI2dldElub2N1bGF0ZWRQZXJjZW50YWdlKCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgZG91YmxlIGlub2N1bGF0ZWRQZXJjZW50YWdlID0gSU5PQ1VMQVRFRF9QRVJDRU5UQUdFX0VERUZBVUxUOworCisJLyoqCisJICogVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2lzSW5vY3VsYXRlUGVyY2VudGFnZSgpIDxlbT5Jbm9jdWxhdGUgUGVyY2VudGFnZTwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjaXNJbm9jdWxhdGVQZXJjZW50YWdlKCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIGJvb2xlYW4gSU5PQ1VMQVRFX1BFUkNFTlRBR0VfRURFRkFVTFQgPSB0cnVlOworCisJLyoqCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjaXNJbm9jdWxhdGVQZXJjZW50YWdlKCkgPGVtPklub2N1bGF0ZSBQZXJjZW50YWdlPC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNpc0lub2N1bGF0ZVBlcmNlbnRhZ2UoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBib29sZWFuIGlub2N1bGF0ZVBlcmNlbnRhZ2UgPSBJTk9DVUxBVEVfUEVSQ0VOVEFHRV9FREVGQVVMVDsKKworCS8qKgorCSAqIE92ZXJyaWRlVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldEluZmVjdGlvdXNDb3VudCgpIDxlbT5JbmZlY3Rpb3VzIENvdW50PC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZ2V0SW5mZWN0aW91c0NvdW50KCkKKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBkb3VibGUgSU5GRUNUSU9VU19DT1VOVF9FREVGQVVMVCA9IDAuMDsKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBTSVJJbm9jdWxhdG9ySW1wbCgpIHsKKwkJc3VwZXIoKTsKKwl9CisJCisJCisJLyoqCisJICogRm9yIHRoZSBpbm5vY3VsYXRvciwgd2Ugbm90IG9ubHkgaW5ub2N1bGF0ZSB0aGUgcHJlc2VudCBub2RlIGJ1dCBldmVyeSBjaGlsZCB1bmRlcm5lYXRoIGl0CisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuaW1wbC5EZWNvcmF0b3JJbXBsI2RlY29yYXRlR3JhcGgob3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkdyYXBoKQorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBib29sZWFuIGRlY29yYXRlR3JhcGgoU1RFTVRpbWUgdGltZSkgeworCQlpZih0aGlzLmlzR3JhcGhEZWNvcmF0ZWQoKSkgcmV0dXJuIHRydWU7CisJCUdyYXBoIGdyYXBoID0gZ2V0R3JhcGgoKTsKKwkJaWYoZ3JhcGggPT0gbnVsbCAmJiB0aGlzLmVDb250YWluZXIoKSBpbnN0YW5jZW9mIEluZmVjdG9ySW5vY3VsYXRvckNvbGxlY3Rpb24pIC8vIE1pZ2h0IGJlIHBhcnQgb2YgYSBjb2xsZWN0aW9uCisJCQlncmFwaCA9ICgoTm9kZURlY29yYXRvcillQ29udGFpbmVyKCkpLmdldEdyYXBoKCk7CisJCisJCS8vIERvIHdlIG5lZWQgdG8gbG9vayB1cCB0aGUgZGlzZWFzZSBtb2RlbCBmcm9tIGl0cyBuYW1lPworCQlpZiAoZ2V0RGlzZWFzZU1vZGVsKCkgPT0gbnVsbCkgeworCQkJLy8gWWVzCisJCQkvLyBUaGVyZSdzIGEgZGlzZWFzZSBtb2RlbCBvdXQgdGhlcmUgd2l0aCBvdXIgbmFtZSBvbiBpdAorCQkJLy8gKG1heWJlKS4uLmxldCdzIGZpbmQgaXQKKwkJCWZvciAoSXRlcmF0b3I8RGVjb3JhdG9yPiBkZWNvcmF0b3JJdGVyID0gZ3JhcGguZ2V0RGVjb3JhdG9ycygpLml0ZXJhdG9yKCk7IGRlY29yYXRvckl0ZXIKKwkJCQkJLmhhc05leHQoKTspIHsKKwkJCQlmaW5hbCBEZWNvcmF0b3IgZGVjb3JhdG9yID0gZGVjb3JhdG9ySXRlci5uZXh0KCk7CisJCQkJLy8gRGlzZWFzZSBNb2RlbD8KKwkJCQlpZiAoZGVjb3JhdG9yIGluc3RhbmNlb2YgU3RhbmRhcmREaXNlYXNlTW9kZWwpIHsKKwkJCQkJZmluYWwgU3RhbmRhcmREaXNlYXNlTW9kZWwgZGlzZWFzZU1vZGVsID0gKFN0YW5kYXJkRGlzZWFzZU1vZGVsKSBkZWNvcmF0b3I7CisJCQkJCS8vIElzIHRoaXMgdGhlIG9uZSB3ZSdyZSBsb29raW5nIGZvcj8KKwkJCQkJaWYgKGRpc2Vhc2VNb2RlbC5nZXREaXNlYXNlTmFtZSgpLmVxdWFsc0lnbm9yZUNhc2UoCisJCQkJCQkJZ2V0RGlzZWFzZU5hbWUoKSkpIHsKKwkJCQkJCS8vIFllcworCQkJCQkJc2V0RGlzZWFzZU1vZGVsKGRpc2Vhc2VNb2RlbCk7CisJCQkJCQlicmVhazsKKwkJCQkJfQorCQkJCX0KKwkJCX0gLy8gZm9yIGVhY2ggZGVjb3JhdG9yCisJCX0gLy8gaWYgbG9vayB1cCBkaXNlYXNlIG1vZGVsCisKKwkJLy8gRGlkIHdlIGZpbmQgdGhlIGRpc2Vhc2UgbW9kZWwgd2UncmUgc3VwcG9zZSB0byB3b3JrIGZvcj8KKwkJaWYgKGdldERpc2Vhc2VNb2RlbCgpICE9IG51bGwpIHsKKwkJCS8vIFllcworCQkJLy8gTm93IHRyeSB0byBmaW5kIHRoZSBub2RlIHRvIGJlIGluZmVjdGVkCisJCQlmaW5hbCBOb2RlIHBhcmVudCA9IGdyYXBoLmdldE5vZGUoZ2V0VGFyZ2V0VVJJKCkpOworCQkJU2V0PE5vZGU+IGFsbE5vZGVzID0gbnVsbDsKKwkJCQorCQkJaWYodGhpcy5pc0lub2N1bGF0ZVBlcmNlbnRhZ2UoKSkgeworCQkJCWFsbE5vZGVzID0gTG9jYXRpb25VdGlsaXR5LmdldEFsbENoaWxkcmVuKHBhcmVudCk7CQorCQkJCWFsbE5vZGVzLmFkZChwYXJlbnQpOworCQkJfSBlbHNlIHsKKwkJCQlhbGxOb2RlcyA9IG5ldyBIYXNoU2V0PE5vZGU+KCk7CisJCQkJYWxsTm9kZXMuYWRkKHBhcmVudCk7CisJCQl9CQkJCisKKwkJCUl0ZXJhdG9yPE5vZGU+IGl0ZXIgPSBhbGxOb2Rlcy5pdGVyYXRvcigpOworCQkJd2hpbGUoaXRlciE9bnVsbCAmJiBpdGVyLmhhc05leHQoKSkgeworCQkJCU5vZGUgbm9kZSA9IGl0ZXIubmV4dCgpOworCQkJCS8vIERpZCB3ZSBmaW5kIHRoZSBOb2RlPworCQkJCWlmIChub2RlICE9IG51bGwpIHsKKwkJCQkJLy8gWWVzCisJCQkJCWZvciAoZmluYWwgSXRlcmF0b3I8Tm9kZUxhYmVsPiBsYWJlbEl0ZXIgPSBub2RlLmdldExhYmVscygpLml0ZXJhdG9yKCk7IGxhYmVsSXRlcgorCQkJCQkuaGFzTmV4dCgpOykgeworCQkJCQkJZmluYWwgTm9kZUxhYmVsIG5vZGVMYWJlbCA9IGxhYmVsSXRlci5uZXh0KCk7CisJCQkJCQkvLyBJcyB0aGlzIGEgZGlzZWFzZSBsYWJlbD8KKwkJCQkJCWlmIChub2RlTGFiZWwgaW5zdGFuY2VvZiBEaXNlYXNlTW9kZWxMYWJlbCkgeworCQkJCQkJCWZpbmFsIERpc2Vhc2VNb2RlbExhYmVsIGRpc2Vhc2VNb2RlbExhYmVsID0gKERpc2Vhc2VNb2RlbExhYmVsKSBub2RlTGFiZWw7CisJCQkJCQkJLy8gWWVzCisJCQkJCQkJLy8gSXMgaXQgdXBkYXRlZCBieSB0aGlzIGRpc2Vhc2UgbW9kZWw/CisJCQkJCQkJaWYgKGRpc2Vhc2VNb2RlbExhYmVsLmdldERlY29yYXRvcigpID09IGdldERpc2Vhc2VNb2RlbCgpICYmCisJCQkJCQkJCQlkaXNlYXNlTW9kZWxMYWJlbC5nZXRQb3B1bGF0aW9uTW9kZWxMYWJlbCgpLmdldFBvcHVsYXRpb25JZGVudGlmaWVyKCkuZXF1YWxzKGdldFBvcHVsYXRpb25JZGVudGlmaWVyKCkpKSB7CisJCQkJCQkJCS8vIFllcworCQkJCQkJCQlkb0luaXRpYWxpemF0aW9uKGRpc2Vhc2VNb2RlbExhYmVsKTsKKwkJCQkJCQkJZ2V0TGFiZWxzVG9JbmZlY3QoKS5hZGQoZGlzZWFzZU1vZGVsTGFiZWwpOworCQkJCQkJCQlicmVhazsKKwkJCQkJCQl9IC8vIGlmCisJCQkJCQl9CisJCQkJCX0gLy8gZm9yCisJCQkJfSAvLyBpZiBub2RlIHRvIGluZmVjdCB3YXMgZm91bmTvv70KKwkJCQllbHNlIHsKKwkJCQkJLy8gTm8KKwkJCQkJLy8gVGhlIHRhcmdldCBVUkkgd2FzIHByb2JhYmx5IGJhZAorCQkJCQlBY3RpdmF0b3IubG9nRXJyb3IoIlRoZSBub2RlIHRvIGluZmVjdCBzcGVjaWZpZWQgYnkgdGhlIFVSSSBcIiIKKwkJCQkJCQkrIGdldFRhcmdldFVSSSgpCisJCQkJCQkJKyAiXCIgd2FzIG5vdCBmb3VuZC4gIFRoZSBVUkkgaXMgbGlrZWx5IGluY29ycmVjdC4iLAorCQkJCQkJCW51bGwpOworCQkJCX0gLy8gZWxzZSBub2RlIG5vdCBmb3VuZAorCQkJfS8vIGFsbCBOT0RFUworCQkJCisJCX0gLy8gaWYgZGlzZWFzZSBtb2RlbCBmb3VuZAorCQllbHNlIHsKKwkJCS8vIE5vCisJCQkvLyBUaGUgZGlzZWFzZSBuYW1lIHdhcyBwcm9iYWJseSB3cm9uZworCQkJQWN0aXZhdG9yLmxvZ0Vycm9yKCJUaGUgZGlzZWFzZSBuYW1lZCBcIiIgKyBnZXREaXNlYXNlTmFtZSgpCisJCQkJCSsgIlwiIHdhcyBub3QgZm91bmQuIiwgbnVsbCk7CisJCX0gLy8gZWxzZSBub2RlIG5vdCBmb3VuZAorCisJCXRoaXMuc2V0UHJvZ3Jlc3MoMS4wKTsgLy8gd2UncmUgZG9uZQorCQlyZXR1cm4gdHJ1ZTsKKwl9IC8vIGRlY29yYXRlR3JhcGgKKworCS8qKgorCSAqIEBwYXJhbSBkaXNlYXNlTW9kZWxMYWJlbAorCSAqICAgICAgICAgICAgdGhlIGRpc2Vhc2UgbW9kZWwgbGFiZWwgdG8gaGF2ZSBpdHMgaW5mZWN0aW91cyB2YWx1ZQorCSAqICAgICAgICAgICAgaW5pdGlhbGl6ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgdm9pZCBkb0luaXRpYWxpemF0aW9uKGZpbmFsIERpc2Vhc2VNb2RlbExhYmVsIGRpc2Vhc2VNb2RlbExhYmVsKSB7CisJCS8vIFRoZSBkaXNlYXNlIG1vZGVsIGluIHF1ZXN0aW9uIG11c3QgaGF2ZSBhbiBSIHN0YXRlCisJCS8vIGlmIGl0IGlzIG5vdCBzb21lIHR5cGUgb2YgU0lSIG1vZGVsIHRoZW4gd2UgY2FuIG5vdCBpbm9jdWxhdGUKKwkJU3RyaW5nIGlub2N1bGF0ZUZlYXR1cmUgPSB0aGlzLmdldFRhcmdldEZlYXR1cmUoKTsKKwkJLy8gRml4IGZvciBiYWNrd2FyZHMgY29tcGF0YWJpbGl0eQorCQlpZihpbm9jdWxhdGVGZWF0dXJlLmVxdWFscygiaSIpKSBpbm9jdWxhdGVGZWF0dXJlID0gInIiOworCQkKKwkJRVN0cnVjdHVyYWxGZWF0dXJlIHJlY292ZXJlZEZlYXR1cmUgPSB0aGlzLmZpbmRGZWF0dXJlKGlub2N1bGF0ZUZlYXR1cmUsIGRpc2Vhc2VNb2RlbExhYmVsLmdldEN1cnJlbnRWYWx1ZSgpKTsKKwkJCisJCWlmKHJlY292ZXJlZEZlYXR1cmUgIT0gbnVsbCkgeworLy8JCQlkb3VibGUgY3VycmVudFBvcHVsYXRpb24gPSBkaXNlYXNlTW9kZWxMYWJlbC5nZXRQb3B1bGF0aW9uTGFiZWwoKS5nZXRDdXJyZW50UG9wdWxhdGlvblZhbHVlKCkuZ2V0Q291bnQoKTsKKwkJCVN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZSB2YWx1ZSA9IG51bGw7CisJCQlJbnRlZ3JhdGlvbkxhYmVsIGlMYWJlbCA9IG51bGw7CisJCQlpTGFiZWwgPSAoSW50ZWdyYXRpb25MYWJlbClkaXNlYXNlTW9kZWxMYWJlbDsKKwkJCQorCQkJdmFsdWUgPSAoU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbFZhbHVlKWlMYWJlbC5nZXRDdXJyZW50VmFsdWUoKTsKKwkJCisJCQlkb3VibGUgY3VycmVudFNWYWx1ZSA9IHZhbHVlLmdldFMoKTsKKwkJCWRvdWJsZSBjdXJyZW50UG9wID0gdmFsdWUuZ2V0UG9wdWxhdGlvbkNvdW50KCk7CisJCQkKKwkJCWRvdWJsZSB0cmVhdGVkID0gZ2V0SW5vY3VsYXRlZFBlcmNlbnRhZ2UoKTsKKwkJCisJCQlpZihpc0lub2N1bGF0ZVBlcmNlbnRhZ2UoKSAmJiB0cmVhdGVkID4gMTAwLjApIHsKKwkJCQlBY3RpdmF0b3IubG9nRXJyb3IoIklub2N1bGF0ZWQgUGVyY2VudGFnZSBtdXN0IGJlIDw9IDEwMCUuIFdhcyAiK3RyZWF0ZWQrIiBOb3cgcmVzZXR0aW5nIHRvIDEwMCUiLG51bGwpOworCQkJCXRyZWF0ZWQgPSAxMDAuMDsKKwkJCX0KKwkJCQorCQkJZG91YmxlIGlub2N1bGF0ZWROdW1iZXIgPSAwOworCQkJaWYoaXNJbm9jdWxhdGVQZXJjZW50YWdlKCkpCisJCQkJaW5vY3VsYXRlZE51bWJlciA9IGN1cnJlbnRQb3AqKHRyZWF0ZWQvMTAwLjApOworCQkJZWxzZSBpbm9jdWxhdGVkTnVtYmVyID0gdHJlYXRlZDsKKwkJCWlmKGlub2N1bGF0ZWROdW1iZXIgPiBjdXJyZW50U1ZhbHVlKSBpbm9jdWxhdGVkTnVtYmVyID0gY3VycmVudFNWYWx1ZTsKKwkJCQorCQkJZG91YmxlIG5ld1NWYWx1ZSA9IGN1cnJlbnRTVmFsdWUgLSBpbm9jdWxhdGVkTnVtYmVyOworCQkJLy8gY2hlY2sgZm9yIHJvdW5kIG9mZiBlcnJvcnMKKwkJCW5ld1NWYWx1ZSA9IG5ld1NWYWx1ZSA8IDAgPyAwIDogbmV3U1ZhbHVlOworCQkJaW5vY3VsYXRlZE51bWJlciA9IGlub2N1bGF0ZWROdW1iZXIgPCAwID8gMCA6IGlub2N1bGF0ZWROdW1iZXI7CisJCQkKKwkJCWZpbmFsIGRvdWJsZSBuZXdSVmFsdWUgPSAoRG91YmxlKXZhbHVlLmVHZXQocmVjb3ZlcmVkRmVhdHVyZSkgKyBpbm9jdWxhdGVkTnVtYmVyOworCQkJCisJCSAgICAoKFN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZSlpTGFiZWwuZ2V0Q3VycmVudFZhbHVlKCkpLnNldFMobmV3U1ZhbHVlKTsKKwkJCSgoU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbFZhbHVlKWlMYWJlbC5nZXROZXh0VmFsdWUoKSkuc2V0UyhuZXdTVmFsdWUpOworCQkJCisJCQkoKFN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZSlpTGFiZWwuZ2V0Q3VycmVudFZhbHVlKCkpLmVTZXQocmVjb3ZlcmVkRmVhdHVyZSwgbmV3UlZhbHVlKTsKKwkJCSgoU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbFZhbHVlKWlMYWJlbC5nZXROZXh0VmFsdWUoKSkuZVNldChyZWNvdmVyZWRGZWF0dXJlLCBuZXdSVmFsdWUpOworCQkJCisJCX1lbHNlIHsKKwkJCS8vIGxvZyBlcnJvcgorCQkJQWN0aXZhdG9yLmxvZ0Vycm9yKCJDYW5ub3QgaW5vY3VsYXRlLCB0aGUgZGlzZWFzZSBtb2RlbCBtdXN0IGhhdmUgYSByZWNvdmVyZWQgc3RhdGUgb2YgbmFtZSAiK2lub2N1bGF0ZUZlYXR1cmUsbnVsbCk7CisJCX0KKwkKKwl9IC8vIGRvSW5pdGlhbGl6YXRpb24KKwkKKwkKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgRUNsYXNzIGVTdGF0aWNDbGFzcygpIHsKKwkJcmV0dXJuIFN0YW5kYXJkUGFja2FnZS5MaXRlcmFscy5TSVJfSU5PQ1VMQVRPUjsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgZG91YmxlIGdldElub2N1bGF0ZWRQZXJjZW50YWdlKCkgeworCQlyZXR1cm4gaW5vY3VsYXRlZFBlcmNlbnRhZ2U7CisJfQorCisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRJbm9jdWxhdGVkUGVyY2VudGFnZShkb3VibGUgbmV3SW5vY3VsYXRlZFBlcmNlbnRhZ2UpIHsKKwkJZG91YmxlIG9sZElub2N1bGF0ZWRQZXJjZW50YWdlID0gaW5vY3VsYXRlZFBlcmNlbnRhZ2U7CisJCWlub2N1bGF0ZWRQZXJjZW50YWdlID0gbmV3SW5vY3VsYXRlZFBlcmNlbnRhZ2U7CisJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkKKwkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIFN0YW5kYXJkUGFja2FnZS5TSVJfSU5PQ1VMQVRPUl9fSU5PQ1VMQVRFRF9QRVJDRU5UQUdFLCBvbGRJbm9jdWxhdGVkUGVyY2VudGFnZSwgaW5vY3VsYXRlZFBlcmNlbnRhZ2UpKTsKKwl9CisKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBib29sZWFuIGlzSW5vY3VsYXRlUGVyY2VudGFnZSgpIHsKKwkJcmV0dXJuIGlub2N1bGF0ZVBlcmNlbnRhZ2U7CisJfQorCisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRJbm9jdWxhdGVQZXJjZW50YWdlKGJvb2xlYW4gbmV3SW5vY3VsYXRlUGVyY2VudGFnZSkgeworCQlib29sZWFuIG9sZElub2N1bGF0ZVBlcmNlbnRhZ2UgPSBpbm9jdWxhdGVQZXJjZW50YWdlOworCQlpbm9jdWxhdGVQZXJjZW50YWdlID0gbmV3SW5vY3VsYXRlUGVyY2VudGFnZTsKKwkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQorCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgU3RhbmRhcmRQYWNrYWdlLlNJUl9JTk9DVUxBVE9SX19JTk9DVUxBVEVfUEVSQ0VOVEFHRSwgb2xkSW5vY3VsYXRlUGVyY2VudGFnZSwgaW5vY3VsYXRlUGVyY2VudGFnZSkpOworCX0KKworCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIE9iamVjdCBlR2V0KGludCBmZWF0dXJlSUQsIGJvb2xlYW4gcmVzb2x2ZSwgYm9vbGVhbiBjb3JlVHlwZSkgeworCQlzd2l0Y2ggKGZlYXR1cmVJRCkgeworCQkJY2FzZSBTdGFuZGFyZFBhY2thZ2UuU0lSX0lOT0NVTEFUT1JfX0lOT0NVTEFURURfUEVSQ0VOVEFHRToKKwkJCQlyZXR1cm4gZ2V0SW5vY3VsYXRlZFBlcmNlbnRhZ2UoKTsKKwkJCWNhc2UgU3RhbmRhcmRQYWNrYWdlLlNJUl9JTk9DVUxBVE9SX19JTk9DVUxBVEVfUEVSQ0VOVEFHRToKKwkJCQlyZXR1cm4gaXNJbm9jdWxhdGVQZXJjZW50YWdlKCk7CisJCX0KKwkJcmV0dXJuIHN1cGVyLmVHZXQoZmVhdHVyZUlELCByZXNvbHZlLCBjb3JlVHlwZSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgZVNldChpbnQgZmVhdHVyZUlELCBPYmplY3QgbmV3VmFsdWUpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJCWNhc2UgU3RhbmRhcmRQYWNrYWdlLlNJUl9JTk9DVUxBVE9SX19JTk9DVUxBVEVEX1BFUkNFTlRBR0U6CisJCQkJc2V0SW5vY3VsYXRlZFBlcmNlbnRhZ2UoKERvdWJsZSluZXdWYWx1ZSk7CisJCQkJcmV0dXJuOworCQkJY2FzZSBTdGFuZGFyZFBhY2thZ2UuU0lSX0lOT0NVTEFUT1JfX0lOT0NVTEFURV9QRVJDRU5UQUdFOgorCQkJCXNldElub2N1bGF0ZVBlcmNlbnRhZ2UoKEJvb2xlYW4pbmV3VmFsdWUpOworCQkJCXJldHVybjsKKwkJfQorCQlzdXBlci5lU2V0KGZlYXR1cmVJRCwgbmV3VmFsdWUpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGVVbnNldChpbnQgZmVhdHVyZUlEKSB7CisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7CisJCQljYXNlIFN0YW5kYXJkUGFja2FnZS5TSVJfSU5PQ1VMQVRPUl9fSU5PQ1VMQVRFRF9QRVJDRU5UQUdFOgorCQkJCXNldElub2N1bGF0ZWRQZXJjZW50YWdlKElOT0NVTEFURURfUEVSQ0VOVEFHRV9FREVGQVVMVCk7CisJCQkJcmV0dXJuOworCQkJY2FzZSBTdGFuZGFyZFBhY2thZ2UuU0lSX0lOT0NVTEFUT1JfX0lOT0NVTEFURV9QRVJDRU5UQUdFOgorCQkJCXNldElub2N1bGF0ZVBlcmNlbnRhZ2UoSU5PQ1VMQVRFX1BFUkNFTlRBR0VfRURFRkFVTFQpOworCQkJCXJldHVybjsKKwkJfQorCQlzdXBlci5lVW5zZXQoZmVhdHVyZUlEKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgYm9vbGVhbiBlSXNTZXQoaW50IGZlYXR1cmVJRCkgeworCQlzd2l0Y2ggKGZlYXR1cmVJRCkgeworCQkJY2FzZSBTdGFuZGFyZFBhY2thZ2UuU0lSX0lOT0NVTEFUT1JfX0lOT0NVTEFURURfUEVSQ0VOVEFHRToKKwkJCQlyZXR1cm4gaW5vY3VsYXRlZFBlcmNlbnRhZ2UgIT0gSU5PQ1VMQVRFRF9QRVJDRU5UQUdFX0VERUZBVUxUOworCQkJY2FzZSBTdGFuZGFyZFBhY2thZ2UuU0lSX0lOT0NVTEFUT1JfX0lOT0NVTEFURV9QRVJDRU5UQUdFOgorCQkJCXJldHVybiBpbm9jdWxhdGVQZXJjZW50YWdlICE9IElOT0NVTEFURV9QRVJDRU5UQUdFX0VERUZBVUxUOworCQl9CisJCXJldHVybiBzdXBlci5lSXNTZXQoZmVhdHVyZUlEKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkgeworCQlpZiAoZUlzUHJveHkoKSkgcmV0dXJuIHN1cGVyLnRvU3RyaW5nKCk7CisKKwkJU3RyaW5nQnVmZmVyIHJlc3VsdCA9IG5ldyBTdHJpbmdCdWZmZXIoc3VwZXIudG9TdHJpbmcoKSk7CisJCXJlc3VsdC5hcHBlbmQoIiAoaW5vY3VsYXRlZFBlcmNlbnRhZ2U6ICIpOyAvLyROT04tTkxTLTEkCisJCXJlc3VsdC5hcHBlbmQoaW5vY3VsYXRlZFBlcmNlbnRhZ2UpOworCQlyZXN1bHQuYXBwZW5kKCIsIGlub2N1bGF0ZVBlcmNlbnRhZ2U6ICIpOyAvLyROT04tTkxTLTEkCisJCXJlc3VsdC5hcHBlbmQoaW5vY3VsYXRlUGVyY2VudGFnZSk7CisJCXJlc3VsdC5hcHBlbmQoJyknKTsKKwkJcmV0dXJuIHJlc3VsdC50b1N0cmluZygpOworCX0KKworfSAvL1NJUklub2N1bGF0b3JJbXBsCmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3N0YW5kYXJkL2ltcGwvU0lSTGFiZWxJbXBsLmphdmEgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3N0YW5kYXJkL2ltcGwvU0lSTGFiZWxJbXBsLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzI1OWVlYQotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvc3RhbmRhcmQvaW1wbC9TSVJMYWJlbEltcGwuamF2YQpAQCAtMCwwICsxLDc0IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5pbXBsOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuVVJJOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkludGVybmFsRU9iamVjdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuaW1wbC5FTm90aWZpY2F0aW9uSW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuU1RFTVVSSTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguTGFiZWxWYWx1ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU0lMYWJlbFZhbHVlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TSVJMYWJlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU0lSTGFiZWxWYWx1ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmRGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZFBhY2thZ2U7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnCisgKiA8ZW0+PGI+U0lSIExhYmVsPC9iPjwvZW0+Jy4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiA8cD4KKyAqIDwvcD4KKyAqCisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBTSVJMYWJlbEltcGwgZXh0ZW5kcyBTdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsSW1wbCBpbXBsZW1lbnRzCisJCVNJUkxhYmVsIHsKKworCS8qKgorCSAqIFRoaXMgaXMgdGhlIHRvcC1sZXZlbCBzZWdtZW50IGZvciBhbGwgdHlwZSBVUkkncyBmb3IgU0lSIGRpc2Vhc2UgbW9kZWwKKwkgKiBsYWJlbHMuCisJICovCisJU3RyaW5nIFVSSV9UWVBFX1NJUl9MQUJFTF9TRUdNRU5UID0gVVJJX1RZUEVfU1RBTkRBUkRfRElTRUFTRV9NT0RFTF9MQUJFTF9TRUdNRU5UCisJCQkrICIvc2lyIjsKKworCS8qKgorCSAqIFRoaXMgaXMgdGhlIHR5cGUgVVJJIGZvciBzdGFuZGFyZCBTSVIgZGlzZWFzZSBsYWJlbHMKKwkgKi8KKwlVUkkgVVJJX1RZUEVfU0lSX0xBQkVMID0gU1RFTVVSSS5jcmVhdGVUeXBlVVJJKFVSSV9UWVBFX1NJUl9MQUJFTF9TRUdNRU5UKTsKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJcHJvdGVjdGVkIFNJUkxhYmVsSW1wbCgpIHsKKwkJc3VwZXIoKTsKKwkJc2V0Q3VycmVudFZhbHVlKFN0YW5kYXJkRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlU0lSTGFiZWxWYWx1ZSgpKTsKKwkJc2V0TmV4dFZhbHVlKFN0YW5kYXJkRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlU0lSTGFiZWxWYWx1ZSgpKTsKKwkJc2V0VGVtcFZhbHVlKFN0YW5kYXJkRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlU0lSTGFiZWxWYWx1ZSgpKTsKKwkJc2V0UHJvYmVWYWx1ZShTdGFuZGFyZEZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZVNJUkxhYmVsVmFsdWUoKSk7CisJCXNldEVycm9yU2NhbGUoU3RhbmRhcmRGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVTSVJMYWJlbFZhbHVlKCkpOworCQlzZXREZWx0YVZhbHVlKFN0YW5kYXJkRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlU0lSTGFiZWxWYWx1ZSgpKTsKKwl9IC8vIFNJUkxhYmVsSW1wbAorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCBFQ2xhc3MgZVN0YXRpY0NsYXNzKCkgeworCQlyZXR1cm4gU3RhbmRhcmRQYWNrYWdlLkxpdGVyYWxzLlNJUl9MQUJFTDsKKwl9CisKK30gLy8gU0lSTGFiZWxJbXBsCmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3N0YW5kYXJkL2ltcGwvU0lSTGFiZWxWYWx1ZUltcGwuamF2YSBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvc3RhbmRhcmQvaW1wbC9TSVJMYWJlbFZhbHVlSW1wbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdjNTQwNzQKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3N0YW5kYXJkL2ltcGwvU0lSTGFiZWxWYWx1ZUltcGwuamF2YQpAQCAtMCwwICsxLDI2MyBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuaW1wbDsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzczsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuaW1wbC5FTm90aWZpY2F0aW9uSW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguSW50ZWdyYXRpb25MYWJlbFZhbHVlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5MYWJlbFZhbHVlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5EaXNlYXNlTW9kZWxMYWJlbFZhbHVlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TSVJMYWJlbFZhbHVlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZFBhY2thZ2U7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPlNJUiBMYWJlbCBWYWx1ZTwvYj48L2VtPicuCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIDxwPgorICogVGhlIGZvbGxvd2luZyBmZWF0dXJlcyBhcmUgaW1wbGVtZW50ZWQ6CisgKiA8dWw+CisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLmltcGwuU0lSTGFiZWxWYWx1ZUltcGwjZ2V0UiA8ZW0+UjwvZW0+fTwvbGk+CisgKiA8L3VsPgorICogPC9wPgorICoKKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIFNJUkxhYmVsVmFsdWVJbXBsIGV4dGVuZHMgU0lMYWJlbFZhbHVlSW1wbCBpbXBsZW1lbnRzCisJCVNJUkxhYmVsVmFsdWUgeworCS8qKgorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRSKCkgPGVtPlI8L2VtPn0nIGF0dHJpYnV0ZS4gPCEtLQorCSAqIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAc2VlICNnZXRSKCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIGRvdWJsZSBSX0VERUZBVUxUID0gMC4wOworCisJLyoqCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0UigpIDxlbT5SPC9lbT59JyBhdHRyaWJ1dGUuIDwhLS0KKwkgKiBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogCisJICogQHNlZSAjZ2V0UigpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIGRvdWJsZSByID0gUl9FREVGQVVMVDsKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgU0lSTGFiZWxWYWx1ZUltcGwoKSB7CisJCXN1cGVyKCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBUaGlzIGlzIHVzZWQgdG8gY3JlYXRlIGluc3RhbmNlcyBmb3IgdGVzdGluZyBwdXJwb3Nlcy4KKwkgKiAKKwkgKiBAcGFyYW0gcworCSAqICAgICAgICAgICAgdGhlIG51bWJlciBvZiBzdXNjZXB0aWJsZSBwb3B1bGF0aW9uIG1lbWJlcnMKKwkgKiAKKwkgKiBAcGFyYW0gaVIKKwkgKiAgICAgICAgICAgIHRoZSBudW1iZXIgb2YgcmVjb3ZlcmluZyBpbmZlY3Rpb3VzIHBvcHVsYXRpb24gbWVtYmVycworCSAqIAorCSAqIEBwYXJhbSBpRgorCSAqICAgICAgICAgICAgdGhlIG51bWJlciBvZiBmYXRhbGx5IGluZmVjdGlvdXMgcG9wdWxhdGlvbiBtZW1iZXJzCisJICogICAgICAgICAgICAKKwkgKiBAcGFyYW0gaW5jaWRlbmNlCisJICogICAgICAgICAgICB0aGUgbmV3IGluY2lkZW5jZSBmcm9tIHRoZSBpbnRlcmFjdGlvbiB0ZXJtIGluIHRoZSBjb21wYXJ0bWVudCBtb2RlbAorCSAqIAorCSAqIEBwYXJhbSByCisJICogICAgICAgICAgICB0aGUgbnVtYmVyIG9mIHJlY292ZXJlZCBwb3B1bGF0aW9uIG1lbWJlcnMKKwkgKiBAcGFyYW0gYmlydGhzCisJICogICAgICAgICAgICB0aGUgbnVtYmVyIG9mIGJpcnRocyB0aGF0IGhhdmUgb2NjdXJlZCBpbiB0aGUgcG9wdWxhdGlvbgorCSAqIEBwYXJhbSBkZWF0aHMKKwkgKiAgICAgICAgICAgIHRoZSB0b3RhbCBudW1iZXIgb2YgZGVhdGhzIHRoYXQgaGF2ZSBvY2N1cmVkIGluIHRoZSBwb3B1bGF0aW9uCisJICogQHBhcmFtIGRpc2Vhc2VEZWF0aHMKKwkgKiAgICAgICAgICAgIHRoZSBudW1iZXIgb2YgZGVhdGhzIGR1ZSB0byB0aGUgZGlzZWFzZSB0aGF0IGhhdmUgb2NjdXJlZCBpbgorCSAqICAgICAgICAgICAgdGhlIHBvcHVsYXRpb24KKwkgKiAKKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKi8KKwlwdWJsaWMgU0lSTGFiZWxWYWx1ZUltcGwoZmluYWwgZG91YmxlIHMsIGZpbmFsIGRvdWJsZSBpLCAKKwkJCWZpbmFsIGRvdWJsZSBpbmNpZGVuY2UsIGZpbmFsIGRvdWJsZSByLAorCQkJZmluYWwgZG91YmxlIGRpc2Vhc2VEZWF0aHMpIHsKKwkJc3VwZXIocywgaSwgaW5jaWRlbmNlLCBkaXNlYXNlRGVhdGhzKTsKKwkJdGhpcy5zZXRSKHIpOworCX0gLy8gU0lSTGFiZWxWYWx1ZUltcGwKKworCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBUaGlzIGlzIHVzZWQgdG8gY3JlYXRlIGluc3RhbmNlcyBmb3IgdGVzdGluZyBwdXJwb3Nlcy4KKwkgKiAKKwkgKiBAcGFyYW0gcworCSAqICAgICAgICAgICAgdGhlIG51bWJlciBvZiBzdXNjZXB0aWJsZSBwb3B1bGF0aW9uIG1lbWJlcnMKKwkgKiAKKwkgKiBAcGFyYW0gaVIKKwkgKiAgICAgICAgICAgIHRoZSBudW1iZXIgb2YgcmVjb3ZlcmluZyBpbmZlY3Rpb3VzIHBvcHVsYXRpb24gbWVtYmVycworCSAqIAorCSAqIEBwYXJhbSBpRgorCSAqICAgICAgICAgICAgdGhlIG51bWJlciBvZiBmYXRhbGx5IGluZmVjdGlvdXMgcG9wdWxhdGlvbiBtZW1iZXJzCisJICogICAgICAgICAgICAKKwkgKiBAcGFyYW0gcgorCSAqICAgICAgICAgICAgdGhlIG51bWJlciBvZiByZWNvdmVyZWQgcG9wdWxhdGlvbiBtZW1iZXJzCisJICogQHBhcmFtIGJpcnRocworCSAqICAgICAgICAgICAgdGhlIG51bWJlciBvZiBiaXJ0aHMgdGhhdCBoYXZlIG9jY3VyZWQgaW4gdGhlIHBvcHVsYXRpb24KKwkgKiBAcGFyYW0gZGVhdGhzCisJICogICAgICAgICAgICB0aGUgdG90YWwgbnVtYmVyIG9mIGRlYXRocyB0aGF0IGhhdmUgb2NjdXJlZCBpbiB0aGUgcG9wdWxhdGlvbgorCSAqIEBwYXJhbSBkaXNlYXNlRGVhdGhzCisJICogICAgICAgICAgICB0aGUgbnVtYmVyIG9mIGRlYXRocyBkdWUgdG8gdGhlIGRpc2Vhc2UgdGhhdCBoYXZlIG9jY3VyZWQgaW4KKwkgKiAgICAgICAgICAgIHRoZSBwb3B1bGF0aW9uCisJICogCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICovCisJcHVibGljIFNJUkxhYmVsVmFsdWVJbXBsKGZpbmFsIGRvdWJsZSBzLCBmaW5hbCBkb3VibGUgaSwgCisJCQlmaW5hbCBkb3VibGUgciwgIGZpbmFsIGRvdWJsZSBkaXNlYXNlRGVhdGhzKSB7CisJCXN1cGVyKHMsIGksIDAuMCwgZGlzZWFzZURlYXRocyk7CisJCXRoaXMuc2V0UihyKTsKKwl9IC8vIFNJUkxhYmVsVmFsdWVJbXBsCisKKwkKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIEVDbGFzcyBlU3RhdGljQ2xhc3MoKSB7CisJCXJldHVybiBTdGFuZGFyZFBhY2thZ2UuTGl0ZXJhbHMuU0lSX0xBQkVMX1ZBTFVFOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogCisJICogQHJldHVybiB0aGUgbnVtYmVyIG9mIEluZmVjdGlvdXMgcG9wdWxhdGlvbiBtZW1iZXJzLgorCSAqIAorCSAqIAorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgZG91YmxlIGdldFIoKSB7CisJCXJldHVybiByOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogCisJICogQHBhcmFtIG5ld1IKKwkgKiAKKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgc2V0Uihkb3VibGUgbmV3UikgeworCQlkb3VibGUgb2xkUiA9IHI7CisJCXIgPSBuZXdSOworCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpCisJCQllTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBTdGFuZGFyZFBhY2thZ2UuU0lSX0xBQkVMX1ZBTFVFX19SLCBvbGRSLCByKSk7CisJfQorCQorCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogCisJICogQHBhcmFtIGZlYXR1cmVJRAorCSAqIEBwYXJhbSByZXNvbHZlCisJICogQHBhcmFtIGNvcmVUeXBlCisJICogQHJldHVybgorCSAqIAorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgT2JqZWN0IGVHZXQoaW50IGZlYXR1cmVJRCwgYm9vbGVhbiByZXNvbHZlLCBib29sZWFuIGNvcmVUeXBlKSB7CisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7CisJCQljYXNlIFN0YW5kYXJkUGFja2FnZS5TSVJfTEFCRUxfVkFMVUVfX1I6CisJCQkJcmV0dXJuIGdldFIoKTsKKwkJfQorCQlyZXR1cm4gc3VwZXIuZUdldChmZWF0dXJlSUQsIHJlc29sdmUsIGNvcmVUeXBlKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBwYXJhbSBmZWF0dXJlSUQKKwkgKiBAcGFyYW0gbmV3VmFsdWUKKwkgKiAKKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgZVNldChpbnQgZmVhdHVyZUlELCBPYmplY3QgbmV3VmFsdWUpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJCWNhc2UgU3RhbmRhcmRQYWNrYWdlLlNJUl9MQUJFTF9WQUxVRV9fUjoKKwkJCQlzZXRSKChEb3VibGUpbmV3VmFsdWUpOworCQkJCXJldHVybjsKKwkJfQorCQlzdXBlci5lU2V0KGZlYXR1cmVJRCwgbmV3VmFsdWUpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogCisJICogQHBhcmFtIGZlYXR1cmVJRAorCSAqIAorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBlVW5zZXQoaW50IGZlYXR1cmVJRCkgeworCQlzd2l0Y2ggKGZlYXR1cmVJRCkgeworCQkJY2FzZSBTdGFuZGFyZFBhY2thZ2UuU0lSX0xBQkVMX1ZBTFVFX19SOgorCQkJCXNldFIoUl9FREVGQVVMVCk7CisJCQkJcmV0dXJuOworCQl9CisJCXN1cGVyLmVVbnNldChmZWF0dXJlSUQpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogCisJICogQHBhcmFtIGZlYXR1cmVJRAorCSAqIEByZXR1cm4KKwkgKiAKKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIGJvb2xlYW4gZUlzU2V0KGludCBmZWF0dXJlSUQpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJCWNhc2UgU3RhbmRhcmRQYWNrYWdlLlNJUl9MQUJFTF9WQUxVRV9fUjoKKwkJCQlyZXR1cm4gciAhPSBSX0VERUZBVUxUOworCQl9CisJCXJldHVybiBzdXBlci5lSXNTZXQoZmVhdHVyZUlEKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkgeworCQlpZiAoZUlzUHJveHkoKSkgcmV0dXJuIHN1cGVyLnRvU3RyaW5nKCk7CisKKwkJU3RyaW5nQnVmZmVyIHJlc3VsdCA9IG5ldyBTdHJpbmdCdWZmZXIoc3VwZXIudG9TdHJpbmcoKSk7CisJCXJlc3VsdC5hcHBlbmQoIiAocjogIik7IC8vJE5PTi1OTFMtMSQKKwkJcmVzdWx0LmFwcGVuZChyKTsKKwkJcmVzdWx0LmFwcGVuZCgnKScpOworCQlyZXR1cm4gcmVzdWx0LnRvU3RyaW5nKCk7CisJfQorCit9IC8vIFNJUkxhYmVsVmFsdWVJbXBsCmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3N0YW5kYXJkL2ltcGwvU3RhbmRhcmREaXNlYXNlTW9kZWxJbXBsLmphdmEgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3N0YW5kYXJkL2ltcGwvU3RhbmRhcmREaXNlYXNlTW9kZWxJbXBsLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWYyMDEyNwotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvc3RhbmRhcmQvaW1wbC9TdGFuZGFyZERpc2Vhc2VNb2RlbEltcGwuamF2YQpAQCAtMCwwICsxLDg2MSBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuaW1wbDsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLkVMaXN0OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQXR0cmlidXRlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLmltcGwuRU5vdGlmaWNhdGlvbkltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnV0aWwuRWNvcmVVdGlsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5EeW5hbWljTGFiZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkxhYmVsVmFsdWU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkVkZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkVkZ2VMYWJlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguRXhjaGFuZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkV4Y2hhbmdlVHlwZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguR3JhcGhGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5JbnRlZ3JhdGlvbkxhYmVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5JbnRlZ3JhdGlvbkxhYmVsVmFsdWU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLk5vZGU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLk5vZGVMYWJlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuU1RFTVRpbWU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuQXJlYUxhYmVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLkNvbW1vbkJvcmRlclJlbGF0aW9uc2hpcExhYmVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLkNvbW1vbkJvcmRlclJlbGF0aW9uc2hpcExhYmVsVmFsdWU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuUG9wdWxhdGlvbkxhYmVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLmltcGwuQ29tbW9uQm9yZGVyUmVsYXRpb25zaGlwTGFiZWxJbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLmltcGwuUm9hZFRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsSW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5pbXBsLlJvYWRUcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbFZhbHVlSW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLm5vZGVzLlJlZ2lvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuQWN0aXZhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5EaXNlYXNlTW9kZWxMYWJlbFZhbHVlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZERpc2Vhc2VNb2RlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbFZhbHVlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZFBhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWw7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPkRpc2Vhc2UgTW9kZWw8L2I+PC9lbT4nLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiA8cD4KKyAqIFRoZSBmb2xsb3dpbmcgZmVhdHVyZXMgYXJlIGltcGxlbWVudGVkOgorICogPHVsPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5pbXBsLlN0YW5kYXJkRGlzZWFzZU1vZGVsSW1wbCNnZXRSZWZlcmVuY2VQb3B1bGF0aW9uRGVuc2l0eSA8ZW0+UmVmZXJlbmNlIFBvcHVsYXRpb24gRGVuc2l0eTwvZW0+fTwvbGk+CisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLmltcGwuU3RhbmRhcmREaXNlYXNlTW9kZWxJbXBsI2dldFJvYWROZXR3b3JrSW5mZWN0aW91c1Byb3BvcnRpb24gPGVtPlJvYWQgTmV0d29yayBJbmZlY3Rpb3VzIFByb3BvcnRpb248L2VtPn08L2xpPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5pbXBsLlN0YW5kYXJkRGlzZWFzZU1vZGVsSW1wbCNnZXRDaGFyYWN0ZXJpc3RpY01peGluZ0Rpc3RhbmNlIDxlbT5DaGFyYWN0ZXJpc3RpYyBNaXhpbmcgRGlzdGFuY2U8L2VtPn08L2xpPgorICogPC91bD4KKyAqIDwvcD4KKyAqCisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBhYnN0cmFjdCBjbGFzcyBTdGFuZGFyZERpc2Vhc2VNb2RlbEltcGwgZXh0ZW5kcyBEaXNlYXNlTW9kZWxJbXBsCisJCWltcGxlbWVudHMgU3RhbmRhcmREaXNlYXNlTW9kZWwgeworCQorCS8qKgorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRSZWZlcmVuY2VQb3B1bGF0aW9uRGVuc2l0eSgpIDxlbT5SZWZlcmVuY2UgUG9wdWxhdGlvbiBEZW5zaXR5PC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNnZXRSZWZlcmVuY2VQb3B1bGF0aW9uRGVuc2l0eSgpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBkb3VibGUgUkVGRVJFTkNFX1BPUFVMQVRJT05fREVOU0lUWV9FREVGQVVMVCA9IDEwMC4wOworCisJLyoqCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0UmVmZXJlbmNlUG9wdWxhdGlvbkRlbnNpdHkoKSA8ZW0+UmVmZXJlbmNlIFBvcHVsYXRpb24gRGVuc2l0eTwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZ2V0UmVmZXJlbmNlUG9wdWxhdGlvbkRlbnNpdHkoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBkb3VibGUgcmVmZXJlbmNlUG9wdWxhdGlvbkRlbnNpdHkgPSBSRUZFUkVOQ0VfUE9QVUxBVElPTl9ERU5TSVRZX0VERUZBVUxUOworCisJCisJCQorCS8qKgorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRSb2FkTmV0d29ya0luZmVjdGlvdXNQcm9wb3J0aW9uKCkgPGVtPlJvYWQgTmV0d29yayBJbmZlY3Rpb3VzIFByb3BvcnRpb248L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI2dldFJvYWROZXR3b3JrSW5mZWN0aW91c1Byb3BvcnRpb24oKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgZG91YmxlIFJPQURfTkVUV09SS19JTkZFQ1RJT1VTX1BST1BPUlRJT05fRURFRkFVTFQgPSAwLjAxOworCisJLyoqCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0Um9hZE5ldHdvcmtJbmZlY3Rpb3VzUHJvcG9ydGlvbigpIDxlbT5Sb2FkIE5ldHdvcmsgSW5mZWN0aW91cyBQcm9wb3J0aW9uPC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNnZXRSb2FkTmV0d29ya0luZmVjdGlvdXNQcm9wb3J0aW9uKCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgZG91YmxlIHJvYWROZXR3b3JrSW5mZWN0aW91c1Byb3BvcnRpb24gPSBST0FEX05FVFdPUktfSU5GRUNUSU9VU19QUk9QT1JUSU9OX0VERUZBVUxUOworCisJLyoqCisJICogVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldENoYXJhY3RlcmlzdGljTWl4aW5nRGlzdGFuY2UoKSA8ZW0+Q2hhcmFjdGVyaXN0aWMgTWl4aW5nIERpc3RhbmNlPC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNnZXRDaGFyYWN0ZXJpc3RpY01peGluZ0Rpc3RhbmNlKCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIGRvdWJsZSBDSEFSQUNURVJJU1RJQ19NSVhJTkdfRElTVEFOQ0VfRURFRkFVTFQgPSAyLjI1OworCisJLyoqCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0Q2hhcmFjdGVyaXN0aWNNaXhpbmdEaXN0YW5jZSgpIDxlbT5DaGFyYWN0ZXJpc3RpYyBNaXhpbmcgRGlzdGFuY2U8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI2dldENoYXJhY3RlcmlzdGljTWl4aW5nRGlzdGFuY2UoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBkb3VibGUgY2hhcmFjdGVyaXN0aWNNaXhpbmdEaXN0YW5jZSA9IENIQVJBQ1RFUklTVElDX01JWElOR19ESVNUQU5DRV9FREVGQVVMVDsKKwkKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIFN0YW5kYXJkRGlzZWFzZU1vZGVsSW1wbCgpIHsKKwkJc3VwZXIoKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIEVDbGFzcyBlU3RhdGljQ2xhc3MoKSB7CisJCXJldHVybiBTdGFuZGFyZFBhY2thZ2UuTGl0ZXJhbHMuU1RBTkRBUkRfRElTRUFTRV9NT0RFTDsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgZG91YmxlIGdldFJlZmVyZW5jZVBvcHVsYXRpb25EZW5zaXR5KCkgeworCQlyZXR1cm4gcmVmZXJlbmNlUG9wdWxhdGlvbkRlbnNpdHk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgc2V0UmVmZXJlbmNlUG9wdWxhdGlvbkRlbnNpdHkoZG91YmxlIG5ld1JlZmVyZW5jZVBvcHVsYXRpb25EZW5zaXR5KSB7CisJCWRvdWJsZSBvbGRSZWZlcmVuY2VQb3B1bGF0aW9uRGVuc2l0eSA9IHJlZmVyZW5jZVBvcHVsYXRpb25EZW5zaXR5OworCQlyZWZlcmVuY2VQb3B1bGF0aW9uRGVuc2l0eSA9IG5ld1JlZmVyZW5jZVBvcHVsYXRpb25EZW5zaXR5OworCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpCisJCQllTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBTdGFuZGFyZFBhY2thZ2UuU1RBTkRBUkRfRElTRUFTRV9NT0RFTF9fUkVGRVJFTkNFX1BPUFVMQVRJT05fREVOU0lUWSwgb2xkUmVmZXJlbmNlUG9wdWxhdGlvbkRlbnNpdHksIHJlZmVyZW5jZVBvcHVsYXRpb25EZW5zaXR5KSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIGRvdWJsZSBnZXRSb2FkTmV0d29ya0luZmVjdGlvdXNQcm9wb3J0aW9uKCkgeworCQlyZXR1cm4gcm9hZE5ldHdvcmtJbmZlY3Rpb3VzUHJvcG9ydGlvbjsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRSb2FkTmV0d29ya0luZmVjdGlvdXNQcm9wb3J0aW9uKGRvdWJsZSBuZXdSb2FkTmV0d29ya0luZmVjdGlvdXNQcm9wb3J0aW9uKSB7CisJCWRvdWJsZSBvbGRSb2FkTmV0d29ya0luZmVjdGlvdXNQcm9wb3J0aW9uID0gcm9hZE5ldHdvcmtJbmZlY3Rpb3VzUHJvcG9ydGlvbjsKKwkJcm9hZE5ldHdvcmtJbmZlY3Rpb3VzUHJvcG9ydGlvbiA9IG5ld1JvYWROZXR3b3JrSW5mZWN0aW91c1Byb3BvcnRpb247CisJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkKKwkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIFN0YW5kYXJkUGFja2FnZS5TVEFOREFSRF9ESVNFQVNFX01PREVMX19ST0FEX05FVFdPUktfSU5GRUNUSU9VU19QUk9QT1JUSU9OLCBvbGRSb2FkTmV0d29ya0luZmVjdGlvdXNQcm9wb3J0aW9uLCByb2FkTmV0d29ya0luZmVjdGlvdXNQcm9wb3J0aW9uKSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIGRvdWJsZSBnZXRDaGFyYWN0ZXJpc3RpY01peGluZ0Rpc3RhbmNlKCkgeworCQlyZXR1cm4gY2hhcmFjdGVyaXN0aWNNaXhpbmdEaXN0YW5jZTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRDaGFyYWN0ZXJpc3RpY01peGluZ0Rpc3RhbmNlKGRvdWJsZSBuZXdDaGFyYWN0ZXJpc3RpY01peGluZ0Rpc3RhbmNlKSB7CisJCWRvdWJsZSBvbGRDaGFyYWN0ZXJpc3RpY01peGluZ0Rpc3RhbmNlID0gY2hhcmFjdGVyaXN0aWNNaXhpbmdEaXN0YW5jZTsKKwkJY2hhcmFjdGVyaXN0aWNNaXhpbmdEaXN0YW5jZSA9IG5ld0NoYXJhY3RlcmlzdGljTWl4aW5nRGlzdGFuY2U7CisJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkKKwkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIFN0YW5kYXJkUGFja2FnZS5TVEFOREFSRF9ESVNFQVNFX01PREVMX19DSEFSQUNURVJJU1RJQ19NSVhJTkdfRElTVEFOQ0UsIG9sZENoYXJhY3RlcmlzdGljTWl4aW5nRGlzdGFuY2UsIGNoYXJhY3RlcmlzdGljTWl4aW5nRGlzdGFuY2UpKTsKKwl9CisKKwkKKwkKKworCS8qKgorCSAqIGNhbGN1bGF0ZURlbHRhIHdpbGwgdXNlIHRoZSBjdXJyZW50IGxhYmVsIHZhbHVlcyB1cGRhdGVkIGJ5IAorCSAqIHRoZSBkaXNlYXNlIG1vZGVsIGFuZCB1cG9uIHJldHVybiB0aGUgZGVsdGEgbGFiZWwgdmFsdWVzCisJICogYXJlIHNldCB3aXRoIGFuIGVzdGltYXRlIG9mIHRoZSBkZXJpdmF0aXZlcyB0byBhZHZhbmNlIHRvIHRoZQorCSAqIG5leHQgc3RlcCAgCisJICogCisJICogQHBhcmFtIHRpbWUgY3VycmVudCB0aW1lCisJICogQHBhcmFtIHRpbWVEZWx0YSBkZWx0YSB0aW1lICBzdGVwCisJICogQHBhcmFtIGxhYmVscyBUaGUgbGFiZWxzIHRvIHVwZGF0ZQorCSAqLworCisJcHVibGljIHZvaWQgY2FsY3VsYXRlRGVsdGEoU1RFTVRpbWUgdGltZSwgbG9uZyB0aW1lRGVsdGEsIEVMaXN0PER5bmFtaWNMYWJlbD4gbGFiZWxzKSB7CisJCS8vIEl0ZXJhdGUgdGhyb3VnaCBlYWNoIG9mIHRoZSBsYWJlbHMgd2UgbmVlZCB0byB1cGRhdGUuCQkKKwkJLy8gUGxhY2UgaG9sZGVycyB0byBrZWVwIGRlbHRhIHZhbHVlcy4gCisJCQorCQlmb3IgKGZpbmFsIEl0ZXJhdG9yPER5bmFtaWNMYWJlbD4gY3VycmVudFN0YXRlTGFiZWxJdGVyID0gbGFiZWxzCisJCQkJLml0ZXJhdG9yKCk7IGN1cnJlbnRTdGF0ZUxhYmVsSXRlci5oYXNOZXh0KCk7KSB7CisJCQlmaW5hbCBTdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsIGRpc2Vhc2VMYWJlbCA9IChTdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsKSBjdXJyZW50U3RhdGVMYWJlbEl0ZXIKKwkJCQkJLm5leHQoKTsKKwkJCQorCQkJRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZSBiaXJ0aERlYXRoc0RlbHRhID0gdGhpcy5jcmVhdGVEaXNlYXNlTW9kZWxMYWJlbFZhbHVlKGRpc2Vhc2VMYWJlbC5nZXRJZGVudGlmaWVyKCkpOworCQkJRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZSBkaXNlYXNlRGVsdGEgPSB0aGlzLmNyZWF0ZURpc2Vhc2VNb2RlbExhYmVsVmFsdWUoZGlzZWFzZUxhYmVsLmdldElkZW50aWZpZXIoKSk7CisJCQkKKwkJCWFzc2VydCBkaXNlYXNlTGFiZWwuZ2V0UG9wdWxhdGlvbkxhYmVsKCkuZ2V0UG9wdWxhdGlvbklkZW50aWZpZXIoKQorCQkJCQkuZXF1YWxzKGdldFBvcHVsYXRpb25JZGVudGlmaWVyKCkpOworCQkJCisJCQkvLyBUaGlzIGN1cnJlbnQgc3RhdGUgb2YgdGhlIGRpc2Vhc2UgZm9yIHRoaXMgbGFiZWwgcHJvYmVkIGZvciB0aGUgCisJCQkvLyBuZXh0IGRlbHRhCisJCQkKKwkJCWZpbmFsIFN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZSBjdXJyZW50UHJvYmVTdGF0ZSA9IChTdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsVmFsdWUpZGlzZWFzZUxhYmVsCisJCQkJCS5nZXRQcm9iZVZhbHVlKCk7CisKKworCQkJLy8gQ29tcHV0ZSBkZWx0YSBjaGFuZ2VzCisJCQlmaW5hbCBTdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsVmFsdWUgZGlzZWFzZURlbHRhcyA9IGNvbXB1dGVEaXNlYXNlRGVsdGFzKHRpbWUsIGN1cnJlbnRQcm9iZVN0YXRlLCBkaXNlYXNlTGFiZWwsIHRpbWVEZWx0YSwgZGlzZWFzZURlbHRhKTsKKwkJCQorCisJCQkvKgorCQkJICogNSkgUmVjb3JkIHRoZSBuZXcgc3RhdGUgdmFyaWFibGUgdmFsdWVzLgorCQkJICogCisJCQkgKiBUaGVzZSB3aWxsIGJlY29tZSB0aGUgY3VycmVudCBzdGF0ZSB2YXJpYWJsZSB2YWx1ZXMgYXQgdGhlIGVuZCBvZgorCQkJICogdGhlIGN1cnJlbnQgc2ltdWxhdGlvbiBjeWNsZSBhbmQgYmVmb3JlIHRoZSBuZXh0LgorCQkJICovCisKKwkJCS8vIFRoaXMgaXMgdGhlIGRlbHRhIGRpc2Vhc2UgbGFiZWwKKwkJCWZpbmFsIFN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZSBkZWx0YVN0YXRlID0gKFN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZSlkaXNlYXNlTGFiZWwKKwkJCQkJLmdldERlbHRhVmFsdWUoKTsKKworCQkJCisJCQkvLyBSZXNldCB0aGUgc3RhdGUKKwkJCWRlbHRhU3RhdGUucmVzZXQoKTsKKwkJCQorCQkJLy8gMSkgVXBkYXRlIHRoZSBkZWx0YQorCQkJZGVsdGFTdGF0ZS5hZGQoKEludGVncmF0aW9uTGFiZWxWYWx1ZSlkaXNlYXNlRGVsdGFzKTsKKwkJCQorCQkJLy8gMikgU2V0IHRoZSBkZXBhcnR1cmVzCisJCQlkZWx0YVN0YXRlLmdldEFycml2YWxzKCkuY2xlYXIoKTsKKwkJCWRlbHRhU3RhdGUuZ2V0RGVwYXJ0dXJlcygpLmNsZWFyKCk7CisJCQkKKwkJCWlmKCgoU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbFZhbHVlKWRpc2Vhc2VEZWx0YXMpLmdldERpc2Vhc2VEZWF0aHMoKSA+IDAuMCkgeworCQkJCUV4Y2hhbmdlIGRlYXRoRXhjaGFuZ2UgPSBHcmFwaEZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZUV4Y2hhbmdlKCk7CisJCQkJCisJCQkJZGVhdGhFeGNoYW5nZS5zZXRUeXBlKEV4Y2hhbmdlVHlwZS5CSVJUSFNfQU5EX0RFQVRIUyk7CisJCQkJZGVhdGhFeGNoYW5nZS5zZXRDb3VudCgoKFN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZSlkaXNlYXNlRGVsdGFzKS5nZXREaXNlYXNlRGVhdGhzKCkpOworCQkJCWRlbHRhU3RhdGUuZ2V0RGVwYXJ0dXJlcygpLmFkZChkZWF0aEV4Y2hhbmdlKTsKKworCQkJfQorCQkJCQorCQorCQkJCisJCQorCQkJLy8gYW5kIHBhc3Mgb24gdGhlIGluY2lkZW5jZQorLy8JCQlpbnQgbj0wOworLy8JCQlmb3IoRVN0cnVjdHVyYWxGZWF0dXJlIGVzOmluY2lkZW5jZUZlYXR1cmVzKQorLy8JCQkJZGVsdGFTdGF0ZS5lU2V0KGVzLCBpbmNpZGVuY2VzLmdldChuKyspKTsKKwkJCQorCQkJYmlydGhEZWF0aHNEZWx0YS5yZXNldCgpOworCQkJZGlzZWFzZURlbHRhLnJlc2V0KCk7CisJCQkJCisJCX0gLy8gZm9yCisJfQorCisJCisJcHVibGljIHZvaWQgYXBwbHlFeHRlcm5hbERlbHRhcyhTVEVNVGltZSB0aW1lLCBsb25nIHRpbWVEZWx0YSwgRUxpc3Q8RHluYW1pY0xhYmVsPiBsYWJlbHMpIHsKKyAJCWZvciAoZmluYWwgSXRlcmF0b3I8RHluYW1pY0xhYmVsPiBjdXJyZW50U3RhdGVMYWJlbEl0ZXIgPSBsYWJlbHMKKwkJCQkuaXRlcmF0b3IoKTsgY3VycmVudFN0YXRlTGFiZWxJdGVyLmhhc05leHQoKTspIHsKKwkJCWZpbmFsIFN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWwgZGlzZWFzZUxhYmVsID0gKFN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWwpIGN1cnJlbnRTdGF0ZUxhYmVsSXRlcgorCQkJCQkubmV4dCgpOworCQkJCisJCQlTdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsVmFsdWUgbXlEZWx0YSA9IChTdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsVmFsdWUpZGlzZWFzZUxhYmVsLmdldERlbHRhVmFsdWUoKTsKKwkJCU5vZGUgbiA9IGRpc2Vhc2VMYWJlbC5nZXROb2RlKCk7CisJCQkKKwkJCQorCQkJLy8gRmluZCBvdGhlciBsYWJlbHMgb24gdGhlIG5vZGUgdGhhdCB3YW50cyB0byBleGNoYW5nZSBkYXRhCisJCQkKKwkJCUVMaXN0PE5vZGVMYWJlbD4gbGFicyA9IG4uZ2V0TGFiZWxzKCk7CisJCQlmb3IoTm9kZUxhYmVsIGw6bGFicykgeworCQkJCWlmKGwgaW5zdGFuY2VvZiBJbnRlZ3JhdGlvbkxhYmVsICYmICFsLmVxdWFscyhkaXNlYXNlTGFiZWwpCisJCQkJCQkmJiAoKEludGVncmF0aW9uTGFiZWwpbCkuZ2V0SWRlbnRpZmllcigpLmVxdWFscyhkaXNlYXNlTGFiZWwuZ2V0SWRlbnRpZmllcigpKSkgeworCQkJCQlJbnRlZ3JhdGlvbkxhYmVsVmFsdWUgc2RlTGFiZWxWYWx1ZSA9IChJbnRlZ3JhdGlvbkxhYmVsVmFsdWUpKChJbnRlZ3JhdGlvbkxhYmVsKWwpLmdldERlbHRhVmFsdWUoKTsKKwkJCQkJRUxpc3Q8RXhjaGFuZ2U+YXJyaXZhbHMgPSBzZGVMYWJlbFZhbHVlLmdldEFycml2YWxzKCk7CisJCQkJCUVMaXN0PEV4Y2hhbmdlPmRlcGFydHVyZXMgPSBzZGVMYWJlbFZhbHVlLmdldERlcGFydHVyZXMoKTsKKwkJCQkJaWYoYXJyaXZhbHMgPT0gbnVsbCB8fCBkZXBhcnR1cmVzID09IG51bGwpIHsKKwkJCQkJCUFjdGl2YXRvci5sb2dFcnJvcigiRXJyb3IsIG51bGwgYXJyaXZhbHMgb3IgZGVwYXJ0dXJlcyBmb3IgbGFiZWwgIitsLCBuZXcgRXhjZXB0aW9uKCkpOworCQkJCQkJY29udGludWU7CisJCQkJCX0KKwkJCQkJCisJCQkJCQorCQkJCQkvLyBBcnJpdmFscworCQkJCQlmb3IgKEV4Y2hhbmdlIGVudHJ5IDogYXJyaXZhbHMpIHsKKwkJCQkJLy9mb3IoTm9kZSBuMjphcnJpdmFscy5rZXlTZXQoKSkgeworCQkJCQkJaWYoZW50cnkuZ2V0VHlwZSgpID09IEV4Y2hhbmdlVHlwZS5CSVJUSFNfQU5EX0RFQVRIUykgeworCQkJCQkJCS8vIEJpcnRocyBnbyBpbnRvIHRoZSBTIHN0YXRlLgorCQkJCQkJCW15RGVsdGEuc2V0UyhteURlbHRhLmdldFMoKSArIGVudHJ5LmdldENvdW50KCkpOworCQkJCQkJfSBlbHNlIGlmIChlbnRyeS5nZXRUeXBlKCkgPT0gRXhjaGFuZ2VUeXBlLk1JR1JBVElPTikgeworCQkJCQkJCWRvdWJsZSBpbmZsb3cgPSBlbnRyeS5nZXRDb3VudCgpOworCQkJCQkJCS8vIEZpbmQgdGhlIGNvcnJlc3BvbmRpbmcgZGlzZWFzZSBsYWJlbCBvbiB0aGUgb3RoZXIgbm9kZQorCQkJCQkJCU5vZGUgb3RoZXJOb2RlID0gKE5vZGUpZW50cnkuZ2V0T3RoZXJMYWJlbCgpLmdldElkZW50aWZpYWJsZSgpOworCQkJCQkJCWZvcihOb2RlTGFiZWwgbmw6b3RoZXJOb2RlLmdldExhYmVscygpKQorCQkJCQkJCQlpZihubCBpbnN0YW5jZW9mIFN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWwgJiYgCisJCQkJCQkJCQkJKChTdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsKW5sKS5nZXREZWNvcmF0b3IoKS5lcXVhbHModGhpcykgJiYgCisJCQkJCQkJCQkJKChTdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsKW5sKS5nZXRQb3B1bGF0aW9uTW9kZWxMYWJlbCgpLmdldFBvcHVsYXRpb25JZGVudGlmaWVyKCkuZXF1YWxzKGRpc2Vhc2VMYWJlbC5nZXRJZGVudGlmaWVyKCkpKSB7CisJCQkJCQkJCQlTdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsVmFsdWUgdmFsdWUgPSAoU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbFZhbHVlKUVjb3JlVXRpbC5jb3B5KCgoU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbClubCkuZ2V0VGVtcFZhbHVlKCkpOyAKKwkJCQkJCQkJCQorCQkJCQkJCQkJaWYodmFsdWUuZ2V0UG9wdWxhdGlvbkNvdW50KCkgPiAwLjApIHsKKwkJCQkJCQkJCQl2YWx1ZS5zY2FsZShpbmZsb3cvdmFsdWUuZ2V0UG9wdWxhdGlvbkNvdW50KCkpOworCQkJCQkJCQkJfSAKKwkJCQkJCQkJCQorCQkJCQkJCQkJLy8gUmVtZW1iZXIgZGlzZWFzZSBkZWF0aHMgc2luY2UgaXQnbGwgYmUgb3ZlcndyaXR0ZW4gaW4gdGhlIGFkZAorCQkJCQkJCQkJZG91YmxlIGRpc2Vhc2VEZWF0aHMgPSBteURlbHRhLmdldERpc2Vhc2VEZWF0aHMoKTsKKwkJCQkJCQkJCW15RGVsdGEuYWRkKChJbnRlZ3JhdGlvbkxhYmVsVmFsdWUpdmFsdWUpOworCQkJCQkJCQkJbXlEZWx0YS5zZXREaXNlYXNlRGVhdGhzKGRpc2Vhc2VEZWF0aHMpOworCQkJCQkJCQkJCisJCQkJCQkJCX0KKwkJCQkJCX0gZWxzZSBpZiAoZW50cnkuZ2V0VHlwZSgpID09IEV4Y2hhbmdlVHlwZS5BR0lORykgeworCQkJCQkJCS8vIEZpbmQgdGhlIGRpc2Vhc2UgbGFiZWwgb2YgdGhlIG90aGVyIGFnZSBncm91cAorCQkJCQkJCVN0cmluZyBvdGhlckFnZUdyb3VwID0gKChTdGFuZGFyZFBvcHVsYXRpb25Nb2RlbExhYmVsKWVudHJ5LmdldE90aGVyTGFiZWwoKSkuZ2V0UG9wdWxhdGlvbklkZW50aWZpZXIoKTsKKwkJCQkJCQkKKwkJCQkJCQlmb3IgKE5vZGVMYWJlbCBubCA6IGxhYnMpIHsKKwkJCQkJCQkJaWYgKG5sIGluc3RhbmNlb2YgU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbCkgeworCQkJCQkJCQkJU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbCBvdGhlckRpc2Vhc2VMYWJlbCA9IChTdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsKSBubDsKKwkJCQkJCQkJCQorCQkJCQkJCQkJaWYgKG90aGVyRGlzZWFzZUxhYmVsLmdldERlY29yYXRvcigpLmVxdWFscyh0aGlzKSAmJiBvdGhlckRpc2Vhc2VMYWJlbC5nZXRJZGVudGlmaWVyKCkuZXF1YWxzKG90aGVyQWdlR3JvdXApKSB7CisJCQkJCQkJCQkJU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbFZhbHVlIHZhbHVlID0gKFN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZSlFY29yZVV0aWwuY29weShvdGhlckRpc2Vhc2VMYWJlbC5nZXRUZW1wVmFsdWUoKSk7CisJCQkJCQkJCQkJCisJCQkJCQkJCQkJaWYgKHZhbHVlLmdldFBvcHVsYXRpb25Db3VudCgpID4gMC4wKSB7CisJCQkJCQkJCQkJCXZhbHVlLnNjYWxlKGVudHJ5LmdldENvdW50KCkgLyB2YWx1ZS5nZXRQb3B1bGF0aW9uQ291bnQoKSk7CisJCQkJCQkJCQkJfQorCQkJCQkJCQkJCQorCQkJCQkJCQkJCWRvdWJsZSBkaXNlYXNlRGVhdGhzID0gbXlEZWx0YS5nZXREaXNlYXNlRGVhdGhzKCk7CisJCQkJCQkJCQkJbXlEZWx0YS5hZGQoKEludGVncmF0aW9uTGFiZWxWYWx1ZSl2YWx1ZSk7CisJCQkJCQkJCQkJbXlEZWx0YS5zZXREaXNlYXNlRGVhdGhzKGRpc2Vhc2VEZWF0aHMpOworCQkJCQkJCQkJfQorCQkJCQkJCQl9CisJCQkJCQkJfQorCQkJCQkJfQorCQkJCQl9CisJCQkJCQorCQkJCQkvLyBEZXBhcnR1cmVzCisJCQkJCisJCQkJCWZvcihFeGNoYW5nZSBlbnRyeSA6IGRlcGFydHVyZXMpIHsKKwkJCQkJCS8vIERlcGFydHVyZXMgYXJlIGVpdGhlciBkZWF0aHMgb3IgcG9wdWxhdGlvbiBtb3ZpbmcgdG8gb3RoZXIgbm9kZXMsIGhlbmNlIHdlIHN1YnN0cmFjdCBmcm9tIHRoZSBsb2NhbCBub2RlLgorCQkJCQkJCisJCQkJCQlTdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsVmFsdWUgY3VycmVudFN0YXRlID0gbnVsbDsKKwkJCQkJCWlmKGVudHJ5LmdldFR5cGUoKSA9PSBFeGNoYW5nZVR5cGUuQklSVEhTX0FORF9ERUFUSFMgfHwgZW50cnkuZ2V0VHlwZSgpID09IEV4Y2hhbmdlVHlwZS5BR0lORykgCisJCQkJCQkJY3VycmVudFN0YXRlID0gKFN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZSlFY29yZVV0aWwuY29weSgoU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbFZhbHVlKWRpc2Vhc2VMYWJlbC5nZXRQcm9iZVZhbHVlKCkpOyAvLyBTaG91bGQgYmUgc2FmZSB0byB1c2UgcHJvYmUgdmFsdWUgZm9yIGRlYXRocworCQkJCQkJZWxzZSBpZiAoZW50cnkuZ2V0VHlwZSgpID09IEV4Y2hhbmdlVHlwZS5NSUdSQVRJT04pCisJCQkJCQkJY3VycmVudFN0YXRlID0gKFN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZSlFY29yZVV0aWwuY29weSgoU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbFZhbHVlKWRpc2Vhc2VMYWJlbC5nZXRUZW1wVmFsdWUoKSk7IC8vIE5lZWQgdG8gdXNlIHRlbXAgdmFsdWUgZm9yIG1pZ3JhdGlvbiBvciBhbiBpbmJhbGFuY2Ugd2lsbCBvY2N5cgorCQkJCQkKKwkJCQkJCWRvdWJsZSBwb3B1bGF0aW9uQ291bnQgPSBjdXJyZW50U3RhdGUuZ2V0UG9wdWxhdGlvbkNvdW50KCk7CisJCQkJCQkKKwkJCQkJCWRvdWJsZSBvdXRmbG93ID0gZW50cnkuZ2V0Q291bnQoKTsKKwkJCQkJCWRvdWJsZSBmYWN0b3IgPSBvdXRmbG93L3BvcHVsYXRpb25Db3VudDsKKwkJCQkJCWlmKERvdWJsZS5pc05hTihmYWN0b3IpIHx8IERvdWJsZS5pc0luZmluaXRlKGZhY3RvcikpIGZhY3RvciA9IDAuMDsgLy9zYWZlCQkJCQkKKwkJCQkJCWN1cnJlbnRTdGF0ZS5zY2FsZShmYWN0b3IpOworCQkJCQkJCS8vIFJlbWVtYmVyIGRpc2Vhc2UgZGVhdGhzIHNpbmNlIHRoZXkgd2lsbCBiZSBvdmVyd3JpdHRlbiBieSBzdWIKKwkJCQkJCWRvdWJsZSBkaXNlYXNlRGVhdGhzID0gbXlEZWx0YS5nZXREaXNlYXNlRGVhdGhzKCk7CisJCQkJCQlteURlbHRhLnN1YigoSW50ZWdyYXRpb25MYWJlbFZhbHVlKWN1cnJlbnRTdGF0ZSk7CisJCQkJCQlteURlbHRhLnNldERpc2Vhc2VEZWF0aHMoZGlzZWFzZURlYXRocyk7CisKKwkJCQkJfQkKKwkJCQl9CisJCQkJCisJCQkJCisJCQl9CisJCX0KKwl9CisJCisJCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBPYmplY3QgZUdldChpbnQgZmVhdHVyZUlELCBib29sZWFuIHJlc29sdmUsIGJvb2xlYW4gY29yZVR5cGUpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJCWNhc2UgU3RhbmRhcmRQYWNrYWdlLlNUQU5EQVJEX0RJU0VBU0VfTU9ERUxfX1JFRkVSRU5DRV9QT1BVTEFUSU9OX0RFTlNJVFk6CisJCQkJcmV0dXJuIGdldFJlZmVyZW5jZVBvcHVsYXRpb25EZW5zaXR5KCk7CisJCQljYXNlIFN0YW5kYXJkUGFja2FnZS5TVEFOREFSRF9ESVNFQVNFX01PREVMX19ST0FEX05FVFdPUktfSU5GRUNUSU9VU19QUk9QT1JUSU9OOgorCQkJCXJldHVybiBnZXRSb2FkTmV0d29ya0luZmVjdGlvdXNQcm9wb3J0aW9uKCk7CisJCQljYXNlIFN0YW5kYXJkUGFja2FnZS5TVEFOREFSRF9ESVNFQVNFX01PREVMX19DSEFSQUNURVJJU1RJQ19NSVhJTkdfRElTVEFOQ0U6CisJCQkJcmV0dXJuIGdldENoYXJhY3RlcmlzdGljTWl4aW5nRGlzdGFuY2UoKTsKKwkJfQorCQlyZXR1cm4gc3VwZXIuZUdldChmZWF0dXJlSUQsIHJlc29sdmUsIGNvcmVUeXBlKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgZVNldChpbnQgZmVhdHVyZUlELCBPYmplY3QgbmV3VmFsdWUpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJCWNhc2UgU3RhbmRhcmRQYWNrYWdlLlNUQU5EQVJEX0RJU0VBU0VfTU9ERUxfX1JFRkVSRU5DRV9QT1BVTEFUSU9OX0RFTlNJVFk6CisJCQkJc2V0UmVmZXJlbmNlUG9wdWxhdGlvbkRlbnNpdHkoKERvdWJsZSluZXdWYWx1ZSk7CisJCQkJcmV0dXJuOworCQkJY2FzZSBTdGFuZGFyZFBhY2thZ2UuU1RBTkRBUkRfRElTRUFTRV9NT0RFTF9fUk9BRF9ORVRXT1JLX0lORkVDVElPVVNfUFJPUE9SVElPTjoKKwkJCQlzZXRSb2FkTmV0d29ya0luZmVjdGlvdXNQcm9wb3J0aW9uKChEb3VibGUpbmV3VmFsdWUpOworCQkJCXJldHVybjsKKwkJCWNhc2UgU3RhbmRhcmRQYWNrYWdlLlNUQU5EQVJEX0RJU0VBU0VfTU9ERUxfX0NIQVJBQ1RFUklTVElDX01JWElOR19ESVNUQU5DRToKKwkJCQlzZXRDaGFyYWN0ZXJpc3RpY01peGluZ0Rpc3RhbmNlKChEb3VibGUpbmV3VmFsdWUpOworCQkJCXJldHVybjsKKwkJfQorCQlzdXBlci5lU2V0KGZlYXR1cmVJRCwgbmV3VmFsdWUpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBlVW5zZXQoaW50IGZlYXR1cmVJRCkgeworCQlzd2l0Y2ggKGZlYXR1cmVJRCkgeworCQkJY2FzZSBTdGFuZGFyZFBhY2thZ2UuU1RBTkRBUkRfRElTRUFTRV9NT0RFTF9fUkVGRVJFTkNFX1BPUFVMQVRJT05fREVOU0lUWToKKwkJCQlzZXRSZWZlcmVuY2VQb3B1bGF0aW9uRGVuc2l0eShSRUZFUkVOQ0VfUE9QVUxBVElPTl9ERU5TSVRZX0VERUZBVUxUKTsKKwkJCQlyZXR1cm47CisJCQljYXNlIFN0YW5kYXJkUGFja2FnZS5TVEFOREFSRF9ESVNFQVNFX01PREVMX19ST0FEX05FVFdPUktfSU5GRUNUSU9VU19QUk9QT1JUSU9OOgorCQkJCXNldFJvYWROZXR3b3JrSW5mZWN0aW91c1Byb3BvcnRpb24oUk9BRF9ORVRXT1JLX0lORkVDVElPVVNfUFJPUE9SVElPTl9FREVGQVVMVCk7CisJCQkJcmV0dXJuOworCQkJY2FzZSBTdGFuZGFyZFBhY2thZ2UuU1RBTkRBUkRfRElTRUFTRV9NT0RFTF9fQ0hBUkFDVEVSSVNUSUNfTUlYSU5HX0RJU1RBTkNFOgorCQkJCXNldENoYXJhY3RlcmlzdGljTWl4aW5nRGlzdGFuY2UoQ0hBUkFDVEVSSVNUSUNfTUlYSU5HX0RJU1RBTkNFX0VERUZBVUxUKTsKKwkJCQlyZXR1cm47CisJCX0KKwkJc3VwZXIuZVVuc2V0KGZlYXR1cmVJRCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBib29sZWFuIGVJc1NldChpbnQgZmVhdHVyZUlEKSB7CisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7CisJCQljYXNlIFN0YW5kYXJkUGFja2FnZS5TVEFOREFSRF9ESVNFQVNFX01PREVMX19SRUZFUkVOQ0VfUE9QVUxBVElPTl9ERU5TSVRZOgorCQkJCXJldHVybiByZWZlcmVuY2VQb3B1bGF0aW9uRGVuc2l0eSAhPSBSRUZFUkVOQ0VfUE9QVUxBVElPTl9ERU5TSVRZX0VERUZBVUxUOworCQkJY2FzZSBTdGFuZGFyZFBhY2thZ2UuU1RBTkRBUkRfRElTRUFTRV9NT0RFTF9fUk9BRF9ORVRXT1JLX0lORkVDVElPVVNfUFJPUE9SVElPTjoKKwkJCQlyZXR1cm4gcm9hZE5ldHdvcmtJbmZlY3Rpb3VzUHJvcG9ydGlvbiAhPSBST0FEX05FVFdPUktfSU5GRUNUSU9VU19QUk9QT1JUSU9OX0VERUZBVUxUOworCQkJY2FzZSBTdGFuZGFyZFBhY2thZ2UuU1RBTkRBUkRfRElTRUFTRV9NT0RFTF9fQ0hBUkFDVEVSSVNUSUNfTUlYSU5HX0RJU1RBTkNFOgorCQkJCXJldHVybiBjaGFyYWN0ZXJpc3RpY01peGluZ0Rpc3RhbmNlICE9IENIQVJBQ1RFUklTVElDX01JWElOR19ESVNUQU5DRV9FREVGQVVMVDsKKwkJfQorCQlyZXR1cm4gc3VwZXIuZUlzU2V0KGZlYXR1cmVJRCk7CisJfQorCQorCS8qKgorCSAqIFN0YW5kYXJkIGRpc2Vhc2UgbW9kZWxzIGRvIG5vdCB1cGRhdGUgdGhlIGxhYmVscywgaXQncyB0aGUKKwkgKiB0YXNrIG9mIHRoZSBTb2x2ZXIgdG8gZG8gdGhhdC4KKwkgKiAKKwkgKiBTdGFuZGFyZCBEaXNlYXNlIE1vZGVscyAKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5pbXBsLkRlY29yYXRvckltcGwjdXBkYXRlTGFiZWxzKG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5HcmFwaCwKKwkgKiAgICAgIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5TVEVNVGltZSkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCB1cGRhdGVMYWJlbHMoZmluYWwgU1RFTVRpbWUgdGltZSwgZmluYWwgbG9uZyB0aW1lRGVsdGEsIGludCBjeWNsZSkgeworCQl0aHJvdyBuZXcgVW5zdXBwb3J0ZWRPcGVyYXRpb25FeGNlcHRpb24oKTsKKwl9CisJCisJLyoqCisJICogUG9wdWxhdGUgdGhlIHBpcGUgc3lzdGVtIG5vZGVzIGluaXRpYWxseQorCSAqLworCQorCQorCQorCisJCisJLyoqCisJICogVGhpcyBtZXRob2QgcmVwbGFjZXMgdGhlIG9uc2l0ZUluZmVjdGlvdXMgdmFsdWUgd2l0aCBhbiBlZmZlY3RpdmVJbmZlY3Rpb3VzIHBvcHVsYXRpb24KKwkgKiBzaXplIGJhc2VkIG9uIG1peGluZyB3aXRoIG5laWdoYm9yaW5nIHNpdGVzLiBJbiB0aGlzIGltcGxlbWVudGF0aW9uIHRoZSBlZGdlcyBhcmUgYmlkaXJlY3Rpb25hbAorCSAqIGFuZCBoYXZlIGEgZml4ZWQgd2VpZ2h0IGJhc2VkIG9uIGdldFBoeXNpY2FsbHlBZGphY2VudEluZmVjdGlvdXNQcm9wb3J0aW9uKCkgKGNhbGxlZCBpbiB0aGUgaGVscGVyIG1ldGhvZAorCSAqIGdldEluZmVjdGlvdXNDaGFuZ2VGcm9tTWl4aW5nKCkuIEJ1dCB0aGUgbWl4aW5nIGlzIGFsc28gd2VpZ2h0ZWQgYnkgdGhlIGFyZWFzIGFuZCBwb3B1bGF0aW9ucyBvZiBhIHNpdGUgcmVsYXRpdmUKKwkgKiB0byB0aGUgYXJlYSBhbmQgcG9wdWxhdGlvbiBvZiBpdCdzIG5laWdoYm9ycy4gTm90ZSB0aGF0IHRoZSB2YWx1ZSByZXR1cm5lZCBtdXN0IGJlIE5PUk1BTElaRUQgYnkgdGhlIHRvdGFsCisJICogcG9wdWxhdGlvbiBiZWNhdXNlIHRoZSBwcm9kdWN0IGJldGEgKiBTICogSWVmZmVjdGl2ZSBtdXN0IGhhdmUgdW5pdHMgb2YgcGVyc29ucy4gU2luY2UgUyBoYXMgdW5pdHMgb2YgcGVyc29ucworCSAqIHRoZSBJZWZmZWN0aXZlIG11c3QgYmUgZGltZW5zaW9ubGVzcyAobm9ybWFsaXplZCB0byB0aGUgcG9wdWxhdGlvbikuIGJldGEgaXMgdGhlIGluZmVjdGlvbiByYXRlIGFuZCBoYXMgdW5pdHMKKwkgKiBvZiBpbnZlcnNlIHRpbWUuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU0kuZ2V0Tm9ybWFsaXplZEVmZmVjdGl2ZUluZmVjdGlvdXMKKwkgKiBAcGFyYW0gbm9kZSB0aGUgbm9kZSB3ZSBhcmUgY3VycmVudGx5IGxvb2tpbmcgYXQgdG8gY29tcHV0ZSB0aGUgbmV4dCBkaXNlYXNlIHN0YXRlCisJICogQHBhcmFtIGRpc2Vhc2VMYWJlbCB0aGUgbGFiZWwgZm9yIHRoZSBjdXJyZW50IGRpc2Vhc2UgY29tcHV0YXRpb24KKwkgKiBAcGFyYW0gb25zaXRlSW5mZWN0aW91cyB0aGUgbnVtYmVyIG9mIGluZmVjdGlvdXMgcGVvcGxlIG9uIHNpdGUgKGF0IHRoZSBub2RlIGFib3ZlKQorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJcHVibGljIGRvdWJsZSBnZXROb3JtYWxpemVkRWZmZWN0aXZlSW5mZWN0aW91cyhmaW5hbCBOb2RlIG5vZGUsIGZpbmFsIFN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWwgZGlzZWFzZUxhYmVsLCBmaW5hbCBkb3VibGUgb25zaXRlSW5mZWN0aW91cykgeworCQlyZXR1cm4gZ2V0Tm9ybWFsaXplZEVmZmVjdGl2ZUluZmVjdGlvdXMobm9kZSwgZGlzZWFzZUxhYmVsLCAgb25zaXRlSW5mZWN0aW91cywgU3RhbmRhcmRQYWNrYWdlLkxpdGVyYWxzLlNJX0xBQkVMX1ZBTFVFX19JKTsKKwkKKwl9CisKKwkJCisJLyoqCisJICogVGFrZXMgYW4gYWRkaXRpb25hbCBhdHRyaWJ1dGUgdG8gdXNlIGZvciB0aGUgaW5mZWN0aW91cworCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJcHVibGljIGRvdWJsZSBnZXROb3JtYWxpemVkRWZmZWN0aXZlSW5mZWN0aW91cyhmaW5hbCBOb2RlIG5vZGUsIGZpbmFsIFN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWwgZGlzZWFzZUxhYmVsLCBmaW5hbCBkb3VibGUgb25zaXRlSW5mZWN0aW91cywgRUF0dHJpYnV0ZSBpbmZlY3Rpb3VzQXR0cmlidXRlKSB7CisgICAgICAgIC8vIHJ1bm5pbmcgdGFsbHkgb2YgY2hhbmdlcyBmcm9tIG1peGluZyB3aXRoIG90aGVyIG5vZGVzCisJCWRvdWJsZSBpbmZlY3Rpb3VzQ2hhbmdlRnJvbU1peGluZyA9IDAuMDsKKwkJZG91YmxlIGJvcmRlckRpdmlzb3IgPSAwLjA7CisJCWRvdWJsZSByb2FkRGl2aXNvciA9IDAuMDsKKwkJCisJCWZvciAoZmluYWwgSXRlcmF0b3I8RWRnZT4gY29tbW9uQm9yZGVyRWRnZUl0ZXIgPSBDb21tb25Cb3JkZXJSZWxhdGlvbnNoaXBMYWJlbEltcGwKKwkJCQkuZ2V0Q29tbW9uQm9yZGVyRWRnZXNGcm9tTm9kZShub2RlKS5pdGVyYXRvcigpOyBjb21tb25Cb3JkZXJFZGdlSXRlcgorCQkJCS5oYXNOZXh0KCk7KSB7CisJCQlmaW5hbCBFZGdlIGJvcmRlckVkZ2UgPSBjb21tb25Cb3JkZXJFZGdlSXRlci5uZXh0KCk7CisJCQkvLyBJZiBpdCBleGlzdHMsIHdlJ3JlIGxvb2tpbmcgZm9yIHRoZSBsYWJlbCB0aGlzIGRpc2Vhc2UgbW9kZWwKKwkJCS8vIHVwZGF0ZXMgb24gdGhlIG5vZGUgYXQgdGhlIG90aGVyIGVuZCBvZiB0aGUgYm9yZGVyIGVkZ2UuCisJCQlmaW5hbCBOb2RlIG90aGVyTm9kZSA9IGJvcmRlckVkZ2UuZ2V0T3RoZXJOb2RlKG5vZGUpOworCQkJU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbCBuZWlnaGJvckxhYmVsID0gbnVsbDsKKwkJCS8vIHN1bSB1cCB0aGUgY2hhbmdlcyBmcm9tIGVhY2ggY29ubmVjdGVkIG5vZGUuCisJCQkvLyBOT1RFOiBzb21lIG9mIHRoZXNlIGNoYW5nZXMgY291bGQgYmUgbmVnYXRpdmUKKwkJCQorCQkJQ29tbW9uQm9yZGVyUmVsYXRpb25zaGlwTGFiZWxWYWx1ZSBjYnJsdiA9IChDb21tb25Cb3JkZXJSZWxhdGlvbnNoaXBMYWJlbFZhbHVlKSgoQ29tbW9uQm9yZGVyUmVsYXRpb25zaGlwTGFiZWwpYm9yZGVyRWRnZS5nZXRMYWJlbCgpKS5nZXRDdXJyZW50VmFsdWUoKTsKKwkJCWRvdWJsZSBib3JkZXJMZW5ndGggPSBjYnJsdi5nZXRCb3JkZXJMZW5ndGgoKTsKKwkJCQorCQkJZG91YmxlIGNoYXJhY3RlcmlzdGljTWl4aW5nRGlzdGFuY2UgPSBnZXRDaGFyYWN0ZXJpc3RpY01peGluZ0Rpc3RhbmNlKCk7CisJCQkKKwkJCWRvdWJsZSBtaXhpbmdGYWN0b3IgPSAwLjA7IAorCQkJZG91YmxlIGZhY3RvciA9IDAuMDsKKwkJCWlmIChvdGhlck5vZGUgaW5zdGFuY2VvZiBSZWdpb24pIHsKKwkJCQlkb3VibGUgb3RoZXJBdmdFeHRlbnQgPSAtMS4wOworCQkJCWZvciAoZmluYWwgSXRlcmF0b3I8Tm9kZUxhYmVsPiBsYWJlbEl0ZXIgPSBvdGhlck5vZGUuZ2V0TGFiZWxzKCkuaXRlcmF0b3IoKTsgbGFiZWxJdGVyLmhhc05leHQoKTspIHsKKwkJCQkJZmluYWwgTm9kZUxhYmVsIG5vZGVMYWJlbCA9IGxhYmVsSXRlci5uZXh0KCk7CisJCQkJCS8vIElzIHRoaXMgYW4gYXJlYSBsYWJlbD8KKwkJCQkJLy8gT2xkIGNvZGUKKwkJCQkJLyoKKwkJCQkJaWYgKG5vZGVMYWJlbCBpbnN0YW5jZW9mIEFyZWFMYWJlbCkgeworCQkJCQkJLy8gWWVzCisJCQkJCQlmaW5hbCBBcmVhTGFiZWwgYXJlYUxhYmVsID0gKEFyZWFMYWJlbCkgbm9kZUxhYmVsOworCQkJCQkJb3RoZXJBdmdFeHRlbnQgPSBhcmVhTGFiZWwuZ2V0Q3VycmVudEFyZWFWYWx1ZSgpLmdldEF2ZXJhZ2VFeHRlbnQoKTsKKwkJCQkJCWJyZWFrOworCQkJCQl9CisJCQkJfSAvLyBmb3IKKwkJCQkvLyBJRiB3ZSBoYXZlIGEgdmFsaWQgYXJlYSAKKwkJCQlpZihvdGhlckF2Z0V4dGVudCA+PSAwLjApIHsKKwkJCQkJbWl4aW5nRmFjdG9yID0gKGNoYXJhY3RlcmlzdGljTWl4aW5nRGlzdGFuY2Uvb3RoZXJBdmdFeHRlbnQpIDsKKwkJCQkJaWYobWl4aW5nRmFjdG9yID4gMS4wKSBtaXhpbmdGYWN0b3IgPSAxLjA7CisJCQkJfQorCQkJCSovCisJCQkJCisJCQkJCS8vIEVuZCBPbGQgQ29kZQorCQkJCQkKKwkJCQkJLy8vIE5ldyBjb2RlCisJCQkJCQorCQkJCQlpZiAobm9kZUxhYmVsIGluc3RhbmNlb2YgQXJlYUxhYmVsKSB7CisJCQkJCQkvLyBZZXMKKwkJCQkJCWZpbmFsIEFyZWFMYWJlbCBhcmVhTGFiZWwgPSAoQXJlYUxhYmVsKSBub2RlTGFiZWw7CisJCQkJCQlkb3VibGUgYXJlYSA9ICBhcmVhTGFiZWwuZ2V0Q3VycmVudEFyZWFWYWx1ZSgpLmdldEFyZWEoKTsKKwkJCQkJCWlmKGFyZWEgPiAwLjApCisJCQkJCQkJZmFjdG9yID0gYm9yZGVyTGVuZ3RoIC8gYXJlYTsKKwkJCQkJCWJyZWFrOworCQkJCQl9CisJCQkJfSAvLyBmb3IKKwkJCQkvLyBJRiB3ZSBoYXZlIGEgdmFsaWQgYXJlYSAKKwkJCQkKKwkJCSAgIAorCQkJCW1peGluZ0ZhY3RvciA9IGNoYXJhY3RlcmlzdGljTWl4aW5nRGlzdGFuY2UqZmFjdG9yOworCQkJCWlmKG1peGluZ0ZhY3RvciA+IDEuMCkgbWl4aW5nRmFjdG9yID0gMS4wOworCQkJCQkKKwkJCQkvLyBFbmQgbmV3IGNvZGUKKwkJCX0KKworCQkJaW5mZWN0aW91c0NoYW5nZUZyb21NaXhpbmcgKz0gZ2V0SW5mZWN0aW91c0NoYW5nZUZyb21NaXhpbmcodGhpcywgb3RoZXJOb2RlLCBkaXNlYXNlTGFiZWwsIG9uc2l0ZUluZmVjdGlvdXMsIG1peGluZ0ZhY3RvciwgaW5mZWN0aW91c0F0dHJpYnV0ZSk7CisJCQlib3JkZXJEaXZpc29yICs9IG1peGluZ0ZhY3Rvcip0aGlzLmdldExvY2FsUG9wdWxhdGlvbih0aGlzLCBvdGhlck5vZGUpOworCQl9IC8vIGZvciBlYWNoIGJvcmRlciBlZGdlCisJCQorCQlmb3IgKGZpbmFsIEl0ZXJhdG9yPEVkZ2U+IHJvYWRFZGdlSXRlciA9IFJvYWRUcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbEltcGwuZ2V0Um9hZEVkZ2VzRnJvbU5vZGUobm9kZSkuaXRlcmF0b3IoKTsgCXJvYWRFZGdlSXRlci5oYXNOZXh0KCk7KSB7CisJCQlmaW5hbCBFZGdlIHJvYWRFZGdlID0gcm9hZEVkZ2VJdGVyLm5leHQoKTsKKwkJCQorCQkJLy8gZmluZCB0aGUgbnVtYmVyIG9mIGVkZ2VzIGZyb20gdGhlIHJvYWQgZWRnZSAtIGNvdWxkIGJlIG1vcmUgdGhhbiBvbmUKKwkJCS8vIGFsc28sIHJvYWRzIGhhdmUgZGlmZmVyZW5jdCBjYXBhY2l0aWVzCisJCQlmaW5hbCBFZGdlTGFiZWwgZWRnZUxhYmVsID0gcm9hZEVkZ2UuZ2V0TGFiZWwoKTsKKwkJCS8vIGluaXQgdGhlIG51bWJlciBvZiBjcm9zc2luZ3Mgb3IgdG90YWwgcm9hZCBjb25uZWN0aW9ucyBhY3Jvc3MgdGhlIGJvcmRlcgorCQkJZG91YmxlIG51bUNyb3NzaW5ncyA9IDEuMDsKKwkJCisJCQlpZiAoZWRnZUxhYmVsIGluc3RhbmNlb2YgUm9hZFRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsSW1wbCkgeworCQkJCVJvYWRUcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbFZhbHVlSW1wbCByb2FkTGFiZWxWYWx1ZSA9IChSb2FkVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxWYWx1ZUltcGwpKGVkZ2VMYWJlbC5nZXRDdXJyZW50VmFsdWUoKSk7CisJCQkJbnVtQ3Jvc3NpbmdzID0gcm9hZExhYmVsVmFsdWUuZ2V0TnVtYmVyQ3Jvc3NpbmdzKCk7CisJCQl9CisJCQlkb3VibGUgaW5mZWN0aW91c1Byb3BvcnRpb24gPSBnZXRSb2FkTmV0d29ya0luZmVjdGlvdXNQcm9wb3J0aW9uKCkgKiBudW1Dcm9zc2luZ3M7CisJCQkKKwkJCS8vIG11c3QgbmV2ZXIgYmUgZ3JlYXRlciB0aGFuIDEKKwkJCWlmKGluZmVjdGlvdXNQcm9wb3J0aW9uID4gMS4wKSBpbmZlY3Rpb3VzUHJvcG9ydGlvbiA9IDEuMDsKKwkJCQorCQkJLy8gSWYgaXQgZXhpc3RzLCB3ZSdyZSBsb29raW5nIGZvciB0aGUgbGFiZWwgdGhpcyBkaXNlYXNlIG1vZGVsCisJCQkvLyB1cGRhdGVzIG9uIHRoZSBub2RlIGF0IHRoZSBvdGhlciBlbmQgb2YgdGhlIGJvcmRlciBlZGdlLgorCQkJZmluYWwgTm9kZSBvdGhlck5vZGUgPSByb2FkRWRnZS5nZXRPdGhlck5vZGUobm9kZSk7CisJCQlTdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsIG5laWdoYm9yTGFiZWwgPSBudWxsOworCQkJLy8gc3VtIHVwIHRoZSBjaGFuZ2VzIGZyb20gZWFjaCBjb25uZWN0ZWQgbm9kZS4KKwkJCS8vIE5PVEU6IHNvbWUgb2YgdGhlc2UgY2hhbmdlcyBjb3VsZCBiZSBuZWdhdGl2ZQorCQkJaW5mZWN0aW91c0NoYW5nZUZyb21NaXhpbmcgKz0gZ2V0SW5mZWN0aW91c0NoYW5nZUZyb21NaXhpbmcodGhpcywgb3RoZXJOb2RlLCBkaXNlYXNlTGFiZWwsIG9uc2l0ZUluZmVjdGlvdXMsIGluZmVjdGlvdXNQcm9wb3J0aW9uKTsKKwkJCQorCQkJcm9hZERpdmlzb3IgKz0gaW5mZWN0aW91c1Byb3BvcnRpb24qdGhpcy5nZXRMb2NhbFBvcHVsYXRpb24odGhpcywgb3RoZXJOb2RlKTsKKwkJfSAvLyBmb3IgZWFjaCByb2FkIGVkZ2UKKwkJCisJCisJCS8vIHJldHVybiB0aGUgc3VtIG5vcm1hbGl6ZWQgdG8gdGhlIHRvdGFsIHBvcHVsYXRpb24KKwkJZG91YmxlIGRlbm9tID0gKChTdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsVmFsdWUpZGlzZWFzZUxhYmVsLmdldFRlbXBWYWx1ZSgpKS5nZXRQb3B1bGF0aW9uQ291bnQoKSArIGJvcmRlckRpdmlzb3IgKyByb2FkRGl2aXNvcjsKKwkJZG91YmxlIHJldFZhbCA9IDAuMDsKKwkJaWYgKGRlbm9tID4gMC4wKSB7CisJCQlyZXRWYWwgPSAoIG9uc2l0ZUluZmVjdGlvdXMgKyBpbmZlY3Rpb3VzQ2hhbmdlRnJvbU1peGluZyApIC8gZGVub207CisJCX0KKwkJCQorCQlyZXR1cm4gcmV0VmFsOworCisJfSAvLyBnZXROb3JtYWxpemVkRWZmZWN0aXZlSW5mZWN0aW91cworCisJLyoqCisJICogCisJICogQHBhcmFtIGRpc2Vhc2VNb2RlbAorCSAqIEBwYXJhbSBub2RlCisJICogQHJldHVybgorCSAqLworICAgIHByaXZhdGUgZG91YmxlIGdldExvY2FsUG9wdWxhdGlvbihmaW5hbCBTdGFuZGFyZERpc2Vhc2VNb2RlbCBkaXNlYXNlTW9kZWwsIE5vZGUgbm9kZSkgeworICAgIAlmb3IgKGZpbmFsIEl0ZXJhdG9yPE5vZGVMYWJlbD4gbGFiZWxJdGVyID0gbm9kZS5nZXRMYWJlbHMoKS5pdGVyYXRvcigpOyBsYWJlbEl0ZXIuaGFzTmV4dCgpOykgeworICAgIAkJZmluYWwgTm9kZUxhYmVsIG5vZGVMYWJlbCA9IGxhYmVsSXRlci5uZXh0KCk7CisgICAgCQkvLyBJcyB0aGlzIGEgZGlzZWFzZSBsYWJlbD8KKyAgICAJCWlmIChub2RlTGFiZWwgaW5zdGFuY2VvZiBTdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsKSB7CisgICAgCQkJZmluYWwgSW50ZWdyYXRpb25MYWJlbCBvdGhlclNJTGFiZWwgPSAoSW50ZWdyYXRpb25MYWJlbCkgbm9kZUxhYmVsOworICAgIAkJCS8vIFllcworICAgIAkJCS8vIElzIGl0IHVwZGF0ZWQgYnkgdGhpcyBkaXNlYXNlIG1vZGVsPworICAgIAkJCWlmIChkaXNlYXNlTW9kZWwgPT0gb3RoZXJTSUxhYmVsLmdldERlY29yYXRvcigpKSAKKyAgICAJCSAgICAgcmV0dXJuICgoU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbFZhbHVlKW90aGVyU0lMYWJlbC5nZXRUZW1wVmFsdWUoKSkuZ2V0UG9wdWxhdGlvbkNvdW50KCk7CisgICAgCQl9CisgICAgCX0KKyAgICAJcmV0dXJuIDAuMDsKKyAgICB9CisgICAgCisgICAgLyoqCisJICogVGhpcyBtZXRob2QgY29ycmVjdGx5IGNvbXB1dGVzIHRoZSBtaXhpbmcgb2YgdGhlIGluZmVjdGlvdXMgcG9wdWxhdGlvbiAob25zaXRlKSB3aXRoIHRoZSBpbmZlY3Rpb3VzIHBvcHVsYXRpb24KKwkgKiBhdCBuZWlnaGJvcmluZyBub2RlcworCSAqIEBwYXJhbSBkaXNlYXNlTW9kZWwKKwkgKiBAcGFyYW0gdGhlIG5vZGUKKwkgKiBAcGFyYW0gZGlzZWFzZUxhYmVsCisJICogQHBhcmFtIG9uc2l0ZUluZmVjdGlvdXMKKwkgKiBAcGFyYW0gY29ubmVjdGVkSW5mZWN0aW91c1Byb3BvcnRpb24gKHRoaXMgaXMgdGhlIHdlaWdodCBnaXZlbiB0byB0aGUgZWRnZSBjb25uZWN0aW9uKQorCSAqIEByZXR1cm4gdGhlIG51bWJlciBvZiBwb3B1bGF0aW9uIG1lbWJlcnMgYXQgYSBub2RlIGluZmVjdGVkIGJ5IHRoZSBkaXNlYXNlIG1vZGVsZWQgYnkgZGlzZWFzZU1vZGVsCisJICovCisJcHJvdGVjdGVkIGRvdWJsZSBnZXRJbmZlY3Rpb3VzQ2hhbmdlRnJvbU1peGluZyhmaW5hbCBTdGFuZGFyZERpc2Vhc2VNb2RlbCBkaXNlYXNlTW9kZWwsCisJCQlmaW5hbCBOb2RlIG5vZGUsIGZpbmFsIFN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWwgZGlzZWFzZUxhYmVsLCBmaW5hbCBkb3VibGUgb25zaXRlSW5mZWN0aW91cywgZG91YmxlIGNvbm5lY3RlZEluZmVjdGlvdXNQcm9wb3J0aW9uKSB7CisJCXJldHVybiBnZXRJbmZlY3Rpb3VzQ2hhbmdlRnJvbU1peGluZyhkaXNlYXNlTW9kZWwsIG5vZGUsIGRpc2Vhc2VMYWJlbCwgb25zaXRlSW5mZWN0aW91cywgY29ubmVjdGVkSW5mZWN0aW91c1Byb3BvcnRpb24sIFN0YW5kYXJkUGFja2FnZS5MaXRlcmFscy5TSV9MQUJFTF9WQUxVRV9fSSk7CisJfQorICAgIAorCS8qKgorCSAqIFRoaXMgbWV0aG9kIGNvcnJlY3RseSBjb21wdXRlcyB0aGUgbWl4aW5nIG9mIHRoZSBpbmZlY3Rpb3VzIHBvcHVsYXRpb24gKG9uc2l0ZSkgd2l0aCB0aGUgaW5mZWN0aW91cyBwb3B1bGF0aW9uCisJICogYXQgbmVpZ2hib3Jpbmcgbm9kZXMKKwkgKiBAcGFyYW0gZGlzZWFzZU1vZGVsCisJICogQHBhcmFtIHRoZSBub2RlCisJICogQHBhcmFtIGRpc2Vhc2VMYWJlbAorCSAqIEBwYXJhbSBvbnNpdGVJbmZlY3Rpb3VzCisJICogQHBhcmFtIGNvbm5lY3RlZEluZmVjdGlvdXNQcm9wb3J0aW9uICh0aGlzIGlzIHRoZSB3ZWlnaHQgZ2l2ZW4gdG8gdGhlIGVkZ2UgY29ubmVjdGlvbikKKwkgKiBAcmV0dXJuIHRoZSBudW1iZXIgb2YgcG9wdWxhdGlvbiBtZW1iZXJzIGF0IGEgbm9kZSBpbmZlY3RlZCBieSB0aGUgZGlzZWFzZSBtb2RlbGVkIGJ5IGRpc2Vhc2VNb2RlbAorCSAqLworCXByb3RlY3RlZCBkb3VibGUgZ2V0SW5mZWN0aW91c0NoYW5nZUZyb21NaXhpbmcoZmluYWwgU3RhbmRhcmREaXNlYXNlTW9kZWwgZGlzZWFzZU1vZGVsLAorCQkJZmluYWwgTm9kZSBub2RlLCBmaW5hbCBTdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsIGRpc2Vhc2VMYWJlbCwgZmluYWwgZG91YmxlIG9uc2l0ZUluZmVjdGlvdXMsIGRvdWJsZSBjb25uZWN0ZWRJbmZlY3Rpb3VzUHJvcG9ydGlvbiwgRUF0dHJpYnV0ZSBpbmZlY3Rpb3VzQXR0cmlidXRlKSB7CisJCWRvdWJsZSByZXRWYWx1ZSA9IDAuMDsKKworCQkvLyB0aGUgbG9jYWwgYXJlYQorCQkvL2RvdWJsZSBhMCA9IGdldEFyZWEoZGlzZWFzZUxhYmVsLmdldFBvcHVsYXRpb25MYWJlbCgpKTsKKwkJLy8gdGhlIGxvY2FsIHBvcHVsYXRpb24KKworCQkvL2RvdWJsZSBwMCA9ICgoU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbFZhbHVlKWRpc2Vhc2VMYWJlbC5nZXRUZW1wVmFsdWUoKSkuZ2V0UG9wdWxhdGlvbkNvdW50KCk7CisJCQorCQkvLyBpbmZlY3Rpb3VzIGZyb20gb3RoZXIgc2l0ZXMgbWl4aW5nIGhlcmUgYXQgc2l0ZSAwCisJCWRvdWJsZSBtaXhpbmcgPSAwLjA7CisJCQkKKwkJZm9yIChmaW5hbCBJdGVyYXRvcjxOb2RlTGFiZWw+IGxhYmVsSXRlciA9IG5vZGUuZ2V0TGFiZWxzKCkuaXRlcmF0b3IoKTsgbGFiZWxJdGVyCisJCQkJLmhhc05leHQoKTspIHsKKwkJCWZpbmFsIE5vZGVMYWJlbCBub2RlTGFiZWwgPSBsYWJlbEl0ZXIubmV4dCgpOworCQkJLy8gSXMgdGhpcyBhIGRpc2Vhc2UgbGFiZWw/CisJCQlpZiAobm9kZUxhYmVsIGluc3RhbmNlb2YgU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbCkgeworCQkJCWZpbmFsIFN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWwgb3RoZXJTSUxhYmVsID0gKFN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWwpIG5vZGVMYWJlbDsKKwkJCQkvLyBZZXMKKwkJCQkvLyBJcyBpdCB1cGRhdGVkIGJ5IHRoaXMgZGlzZWFzZSBtb2RlbD8KKwkJCQlpZiAoZGlzZWFzZU1vZGVsID09IG90aGVyU0lMYWJlbC5nZXREZWNvcmF0b3IoKSAmJiBvdGhlclNJTGFiZWwuZ2V0UG9wdWxhdGlvbkxhYmVsKCkuZ2V0UG9wdWxhdGlvbklkZW50aWZpZXIoKS5lcXVhbHMoZGlzZWFzZUxhYmVsLmdldFBvcHVsYXRpb25MYWJlbCgpLmdldFBvcHVsYXRpb25JZGVudGlmaWVyKCkpKSB7CisJCQkJCWlmKHRoaXMuaXNGcmVxdWVuY3lEZXBlbmRlbnQoKSkgeworCQkJCQkJZG91YmxlIElvdGhlciA9IChEb3VibGUpKChvdGhlclNJTGFiZWwuZ2V0VGVtcFZhbHVlKCkpKS5lR2V0KGluZmVjdGlvdXNBdHRyaWJ1dGUpOworCQkJCQkJLy9kb3VibGUgSW90aGVyID0gb3RoZXJTSUxhYmVsLmdldEN1cnJlbnRTSVZhbHVlKCkuZ2V0SSgpOworCQkJCQkJZG91YmxlIG1peGluZ0ZhY3RvciA9IGNvbm5lY3RlZEluZmVjdGlvdXNQcm9wb3J0aW9uOwkJCQkJCisJCQkJCQltaXhpbmcgPSBJb3RoZXIgKiBtaXhpbmdGYWN0b3I7CisJCQkJCX0gZWxzZSB7CisvLwkJCQkJCWRvdWJsZSBhMSA9IGdldEFyZWEob3RoZXJTSUxhYmVsLmdldFBvcHVsYXRpb25MYWJlbCgpKTsKKy8vCQkJCQkJZG91YmxlIHAxID0gKChTdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsVmFsdWUpb3RoZXJTSUxhYmVsLmdldFRlbXBWYWx1ZSgpKS5nZXRQb3B1bGF0aW9uQ291bnQoKTsKKy8vCQkJCQkJZG91YmxlIElvdGhlciA9IChvdGhlclNJTGFiZWwuZ2V0VGVtcFZhbHVlKCkpLmdldEkoKTsKKy8vCQkJCQkJZG91YmxlIG1peGluZ0ZhY3RvciA9IChhMCpwMSArIGExKnAwKSogY29ubmVjdGVkSW5mZWN0aW91c1Byb3BvcnRpb24gLyhhMSogKHAxK3AwKSkgOworCQkJCQkKKy8vCQkJCQkJbWl4aW5nID0gSW90aGVyICogbWl4aW5nRmFjdG9yOworCQkJCQl9CisJCQkJCQorCQkJCQlicmVhazsKKwkJCQl9IC8vIGlmCisJCQl9CisJCX0gLy8gZm9yCisKKwkJcmV0dXJuIG1peGluZzsKKwl9IC8vIGdldEluZmVjdGlvdXNDaGFuZ2VGcm9tTWl4aW5nCisJCisJLyoqCisJICogQHBhcmFtIHBvcHVsYXRpb25MYWJlbAorCSAqICAgICAgICAgICAgdGhlIHBvcHVsYXRpb24gbGFiZWwgdGhhdCBsYWJlbHMgdGhlIG5vZGUKKwkgKiBAcmV0dXJuIHRoZSBhcmVhIG9mIHRoZSBub2RlIGFzc29jaWF0ZWQgd2l0aCB0aGUgbGFiZWwKKwkgKi8KKwlwdWJsaWMgZG91YmxlIGdldEFyZWEoZmluYWwgUG9wdWxhdGlvbkxhYmVsIHBvcHVsYXRpb25MYWJlbCkgeworCQlkb3VibGUgcmV0VmFsdWUgPSAwLjA7CisKKwkJLy8gVGhlIHBvcHVsYXRpb24gbGFiZWwgY291bGQgaGF2ZSBhbiBhcmVhIHNwZWNpZmllZCBmb3IgdGhlIHBvcHVsYXRpb24KKwkJLy8gdGhhdCB3ZSBzaG91bGQgdXNlIGluc3RlYWQgb2YgdGhlIGFyZWEgb2YgdGhlIHJlZ2lvbiBsYWJlbGVkIGJ5IHRoZQorCQkvLyBwb3B1bGF0aW9uIGxhYmVsLiBUaGlzIHZhbHVlIHdvdWxkIGJlIHNwZWNpZmllZCBpZiB0aGUgcG9wdWxhdGlvbiB3YXMKKwkJLy8gZGVuc2VseSBwYWNrZWQgaW50byBhIHNtYWxsIGFyZWEgb2YgdGhlIGxhcmdlciByZWdpb24sIGZvciBpbnN0YW5jZQorCQkvLyBsaWtlIGEgY2l0eSBpbiBhbiBvdGhlcndpc2UgbGFyZ2UgZGVzZXJ0LgorCisJCXJldFZhbHVlID0gcG9wdWxhdGlvbkxhYmVsLmdldFBvcHVsYXRlZEFyZWEoKTsKKworCQkvLyBJcyB0aGVyZSBhbiBhcmVhIHNwZWNpZmllZCBmb3IgdGhlIHBvcHVsYXRpb24/CisJCWlmIChyZXRWYWx1ZSA9PSAwLjApIHsKKwkJCS8vIE5vCisJCQkvLyBPaywgZ28gZmluZCB0aGUgYXJlYSBsYWJlbCBhbmQgcmV0dXJuIHRoZSBhcmVhIG9mIHRoZSByZWdpb24KKwkJCWZvciAoZmluYWwgSXRlcmF0b3I8Tm9kZUxhYmVsPiBsYWJlbEl0ZXIgPSBwb3B1bGF0aW9uTGFiZWwuZ2V0Tm9kZSgpCisJCQkJCS5nZXRMYWJlbHMoKS5pdGVyYXRvcigpOyBsYWJlbEl0ZXIuaGFzTmV4dCgpOykgeworCQkJCWZpbmFsIE5vZGVMYWJlbCBub2RlTGFiZWwgPSBsYWJlbEl0ZXIubmV4dCgpOworCQkJCS8vIElzIHRoaXMgYW4gYXJlYSBsYWJlbD8KKwkJCQlpZiAobm9kZUxhYmVsIGluc3RhbmNlb2YgQXJlYUxhYmVsKSB7CisJCQkJCS8vIFllcworCQkJCQlmaW5hbCBBcmVhTGFiZWwgYXJlYUxhYmVsID0gKEFyZWFMYWJlbCkgbm9kZUxhYmVsOworCQkJCQlyZXRWYWx1ZSA9IGFyZWFMYWJlbC5nZXRDdXJyZW50QXJlYVZhbHVlKCkuZ2V0QXJlYSgpOworCQkJCQlicmVhazsKKwkJCQl9CisJCQl9IC8vIGZvcgorCQl9IC8vIElmIG5vIHBvcHVsYXRpb24gYXJlYSBzcGVjaWZpZWQKKworCQlyZXR1cm4gcmV0VmFsdWU7CisJfSAvLyBnZXRBcmVhCisKKwkvKioKKwkgKiBAcGFyYW0gcG9wdWxhdGlvbkxhYmVsCisJICogQHBhcmFtIGFyZWEKKwkgKi8KKwlwcml2YXRlIHZvaWQgcmVwb3J0QmFkQXJlYVZhbHVlKGZpbmFsIFBvcHVsYXRpb25MYWJlbCBwb3B1bGF0aW9uTGFiZWwsCisJCQlkb3VibGUgYXJlYSkgeworCQkvLyBUaGUgYmFkIHZhbHVlIGNvdWxkIGJlIHNwZWNpZmllZCBmb3IgdGhlIG5vZGUgb3IgYmUgYW4gb3ZlcnJpZGUKKwkJLy8gdmFsdWUgc3BlY2lmaWVkIGZvciB0aGUgcG9wdWxhdGlvbi4KKwkJLy8gSXMgdGhlIGJhZCB2YWx1ZSBmcm9tIHRoZSBub2RlPworCQlpZiAocG9wdWxhdGlvbkxhYmVsLmdldFBvcHVsYXRlZEFyZWEoKSA9PSAwLjApIHsKKwkJCS8vIFllcworCQkJQWN0aXZhdG9yLmxvZ0Vycm9yKCJUaGUgYXJlYSB2YWx1ZSBvZiBcIiIgKyBhcmVhCisJCQkJCSsgIlwiIHNwZWNpZmllZCBmb3IgXCIiCisJCQkJCSsgcG9wdWxhdGlvbkxhYmVsLmdldE5vZGUoKS50b1N0cmluZygpCisJCQkJCSsgIlwiIGlzIG5vdCBncmVhdGVyIHRoYW4gemVybyAoMC4wKSIsIG51bGwpOworCQl9IC8vIGlmIGJhZCB2YWx1ZSBmb3Igbm9kZSBhcmVhCisJCWVsc2UgeworCQkJQWN0aXZhdG9yLmxvZ0Vycm9yKCJUaGUgYXJlYSB2YWx1ZSBvZiBcIiIgKyBhcmVhCisJCQkJCSsgIlwiIHNwZWNpZmllZCBmb3IgdGhlIHBvcHVsYXRpb24gXCIiCisJCQkJCSsgcG9wdWxhdGlvbkxhYmVsLmdldE5hbWUoKSArICJcIiBmb3IgdGhlIHJlZ2lvbiBcIiIKKwkJCQkJKyBwb3B1bGF0aW9uTGFiZWwuZ2V0Tm9kZSgpLnRvU3RyaW5nKCkKKwkJCQkJKyAiXCIgaXMgbm90IGdyZWF0ZXIgdGhhbiB6ZXJvICgwLjApIiwgbnVsbCk7CisJCX0KKwl9IC8vIHJlcG9ydEJhZEFyZWFWYWx1ZQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIGRvdWJsZSBnZXRFZmZlY3RpdmVJbmZlY3Rpb3VzKE5vZGUgbm9kZSwgU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbCBkaXNlYXNlTGFiZWwsIGRvdWJsZSBvbnNpdGVJbmZlY3Rpb3VzKSB7CisJCS8vIFRPRE86IGltcGxlbWVudCB0aGlzIG1ldGhvZAorCQkvLyBFbnN1cmUgdGhhdCB5b3UgcmVtb3ZlIEBnZW5lcmF0ZWQgb3IgbWFyayBpdCBAZ2VuZXJhdGVkIE5PVAorCQl0aHJvdyBuZXcgVW5zdXBwb3J0ZWRPcGVyYXRpb25FeGNlcHRpb24oKTsKKwl9CisKKwkvKioKKwkgKiBjb21wdXRlRGlzZWFzZURlbHRhcy4gVGhpcyBtZXRob2QgY2FsY3VsYXRlcyB0aGUgZGVsdGEgY2hhbmdlcyBmb3IgZWFjaCBkaXNlYXNlIHN0YXRlIGRlcGVuZGluZyAKKwkgKiBvbiBkaXNlYXNlIHBhcmFtZXRlcnMgYW5kIG1peGluZyBmYWN0b3JzCisJICogCisJICogQHBhcmFtIHRpbWUgCisJICogCQkgIAkgIFNURU0gdGltZQorCSAqIEBwYXJhbSBjdXJyZW50U3RhdGUKKwkgKiAgICAgICAgICAgIHRoZSBjdXJyZW50IHN0YXRlIG9mIHRoZSBwb3B1bGF0aW9uCisJICogQHBhcmFtIGRpc2Vhc2VMYWJlbAorCSAqICAgICAgICAgICAgdGhlIGRpc2Vhc2UgbGFiZWwgZm9yIHdoaWNoIHRoZSBzdGF0ZSB0cmFuc2l0aW9ucyBhcmUgYmVpbmcKKwkgKiAgICAgICAgICAgIGNvbXB1dGVkLgorCSAqIEBwYXJhbSB0aW1lRGVsdGEKKwkgKiAgICAgICAgICAgIHRoZSB0aW1lIHBlcmlvZCAobWlsbGlzZWNvbmRzKSBvdmVyIHdoaWNoIHRoZSBwb3B1bGF0aW9uCisJICogICAgICAgICAgICBtZW1iZXJzIHRyYW5zaXRpb24gdG8gbmV3IHN0YXRlcworCSAqIEBwYXJhbSBjeWNsZQorCSAqIAkJCSAgdGhlIHNpbXVsYXRpb24gY3ljbGUgd2UncmUgaW4KKwkgKiBAcmV0dXJuIGEgZGlzZWFzZSBzdGF0ZSBsYWJlbCB2YWx1ZSB0aGF0IGNvbnRhaW5zIHRoZSBkZWx0YSBjaGFuZ2VzIGluCisJICogCQkgICBwb3B1bGF0aW9uIG1lbWJlcnMgZm9yIGVhY2ggc3RhdGUuCisJICovCisJCisJcHVibGljIGFic3RyYWN0IFN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZSBjb21wdXRlRGlzZWFzZURlbHRhcygKKwkJCWZpbmFsIFNURU1UaW1lIHRpbWUsCisJCQlmaW5hbCBTdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsVmFsdWUgY3VycmVudFN0YXRlLAorCQkJZmluYWwgU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbCBkaXNlYXNlTGFiZWwsIAorCQkJZmluYWwgbG9uZyB0aW1lRGVsdGEsIAorCQkJRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZSByZXR1cm5WYWx1ZSk7CisJCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgcmVzZXRMYWJlbHMoKSB7CisJCXN1cGVyLnJlc2V0TGFiZWxzKCk7CisKKwkJCisJCQorCQkKKwl9IC8vIHJlc2V0TGFiZWxzCisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIFN0cmluZyB0b1N0cmluZygpIHsKKwkJaWYgKGVJc1Byb3h5KCkpIHJldHVybiBzdXBlci50b1N0cmluZygpOworCisJCVN0cmluZ0J1ZmZlciByZXN1bHQgPSBuZXcgU3RyaW5nQnVmZmVyKHN1cGVyLnRvU3RyaW5nKCkpOworCQlyZXN1bHQuYXBwZW5kKCIgKHJlZmVyZW5jZVBvcHVsYXRpb25EZW5zaXR5OiAiKTsgLy8kTk9OLU5MUy0xJAorCQlyZXN1bHQuYXBwZW5kKHJlZmVyZW5jZVBvcHVsYXRpb25EZW5zaXR5KTsKKwkJcmVzdWx0LmFwcGVuZCgiLCByb2FkTmV0d29ya0luZmVjdGlvdXNQcm9wb3J0aW9uOiAiKTsgLy8kTk9OLU5MUy0xJAorCQlyZXN1bHQuYXBwZW5kKHJvYWROZXR3b3JrSW5mZWN0aW91c1Byb3BvcnRpb24pOworCQlyZXN1bHQuYXBwZW5kKCIsIGNoYXJhY3RlcmlzdGljTWl4aW5nRGlzdGFuY2U6ICIpOyAvLyROT04tTkxTLTEkCisJCXJlc3VsdC5hcHBlbmQoY2hhcmFjdGVyaXN0aWNNaXhpbmdEaXN0YW5jZSk7CisJCXJlc3VsdC5hcHBlbmQoJyknKTsKKwkJcmV0dXJuIHJlc3VsdC50b1N0cmluZygpOworCX0KKwkKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5pbXBsLkRpc2Vhc2VNb2RlbEltcGwjc2FuZSgpCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIGJvb2xlYW4gc2FuZSgpIHsKKwkJYm9vbGVhbiByZXRWYWx1ZSA9IHN1cGVyLnNhbmUoKTsKKworCQkKKwkJcmV0dXJuIHJldFZhbHVlOworCX0gLy8gc2FuZQorCit9IC8vIFN0YW5kYXJkRGlzZWFzZU1vZGVsSW1wbApkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9zdGFuZGFyZC9pbXBsL1N0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWxJbXBsLmphdmEgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3N0YW5kYXJkL2ltcGwvU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbEltcGwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZTMxNTdlCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9zdGFuZGFyZC9pbXBsL1N0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWxJbXBsLmphdmEKQEAgLTAsMCArMSwxNjcgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLmltcGw7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uOworaW1wb3J0IGphdmEudGV4dC5EZWNpbWFsRm9ybWF0OworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLkVMaXN0OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkludGVybmFsRU9iamVjdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuaW1wbC5FTm90aWZpY2F0aW9uSW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguR3JhcGhQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS51dGlsLkVjb3JlVXRpbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguRXhjaGFuZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkV4Y2hhbmdlVHlwZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguSW50ZWdyYXRpb25MYWJlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguTGFiZWxWYWx1ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguSW50ZWdyYXRpb25MYWJlbFZhbHVlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5MYWJlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuU1RFTVRpbWU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuUG9wdWxhdGlvbkxhYmVsVmFsdWU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmRQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5EZW1vZ3JhcGhpY1BvcHVsYXRpb25Nb2RlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuUG9wdWxhdGlvbkdyb3VwOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IEFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5EaXNlYXNlIE1vZGVsIExhYmVsPC9iPjwvZW0+Jy4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogPHA+CisgKiA8L3A+CisgKgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgYWJzdHJhY3QgY2xhc3MgU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbEltcGwgZXh0ZW5kcworCQlEaXNlYXNlTW9kZWxMYWJlbEltcGwgaW1wbGVtZW50cyBTdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsIHsKKwkKKwkvKioKKwkgKiBUaGlzIGlzIHRoZSB0b3AtbGV2ZWwgc2VnbWVudCBmb3IgYWxsIHR5cGUgVVJJJ3MgZm9yIHN0YW5kYXJkIGRpc2Vhc2UKKwkgKiBtb2RlbCBsYWJlbHMuCisJICovCisJU3RyaW5nIFVSSV9UWVBFX1NUQU5EQVJEX0RJU0VBU0VfTU9ERUxfTEFCRUxfU0VHTUVOVCA9IFVSSV9UWVBFX0RJU0VBU0VfTU9ERUxfTEFCRUxfU0VHTUVOVAorCQkJKyAiL3N0YW5kYXJkIjsKKwkKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIFN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWxJbXBsKCkgeworCQlzdXBlcigpOworCX0KKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmltcGwuRHluYW1pY0xhYmVsSW1wbCNyZXNldCgpCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgcmVzZXQoKSB7CisJCS8vIFRoZSBjYWxsIHRvIHN1cGVyLnJlc2V0IHdpbGwgcmVzZXQgdGhlIGxhYmVsIHZhbHVlIG9mIHRoaXMgbGFiZWwKKwkJLy8gd2hpY2ggd2lsbCB6ZXJvIG91dCBhbGwgb2YgdGhlIGRpc2Vhc2Ugc3RhdGUgdmFsdWVzLgorCQlzdXBlci5yZXNldCgpOworCQlnZXRUZW1wVmFsdWUoKS5yZXNldCgpOworCQlnZXREZWx0YVZhbHVlKCkucmVzZXQoKTsKKwkJZ2V0RXJyb3JTY2FsZSgpLnJlc2V0KCk7CisJCWdldFByb2JlVmFsdWUoKS5yZXNldCgpOworCQkvLyBJcyB0aGVyZSBhIHBvcHVsYXRpb24gaW5zdGFuY2UgYXNzb2NpYXRlZCB3aXRoIHRoaXMgaW5zdGFuY2U/CisJCWlmIChnZXRQb3B1bGF0aW9uTW9kZWxMYWJlbCgpICE9IG51bGwpIHsKKwkJCS8vIFllcworCQkJLy8gT2ssIHNldCB0aGUgc3VzY2VwdGlibGUgcG9wdWxhdGlvbiB0byB0aGUgY291bnQgb2YgdGhlIG51bWJlciBvZgorCQkJLy8gcG9wdWxhdGlvbiBtZW1iZXJzCisJCQlmaW5hbCBTdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsVmFsdWUgc1ZhbHVlID0gKFN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZSlnZXRDdXJyZW50VmFsdWUoKTsKKwkJCQorCQkJLy8gR2V0IHRoZSBmcmFjdGlvbiBvZiB0aGUgcG9wdWxhdGlvbiBncm91cCBpZiBEZW1vZ3JhcGhpY1BvcHVsYXRpb25Nb2RlbCBpcyB1c2VkCisJCQlkb3VibGUgZnJhY3Rpb24gPSAxLjA7CisJCQlpZiAoZ2V0UG9wdWxhdGlvbk1vZGVsTGFiZWwoKS5nZXREZWNvcmF0b3IoKSBpbnN0YW5jZW9mIERlbW9ncmFwaGljUG9wdWxhdGlvbk1vZGVsKSB7CisJCQkJRGVtb2dyYXBoaWNQb3B1bGF0aW9uTW9kZWwgbW9kZWwgPSAoRGVtb2dyYXBoaWNQb3B1bGF0aW9uTW9kZWwpIGdldFBvcHVsYXRpb25Nb2RlbExhYmVsKCkuZ2V0RGVjb3JhdG9yKCk7CisJCQkJCisJCQkJZm9yIChQb3B1bGF0aW9uR3JvdXAgZ3JvdXAgOiBtb2RlbC5nZXRQb3B1bGF0aW9uR3JvdXBzKCkpIHsKKwkJCQkJaWYgKGdyb3VwLmdldElkZW50aWZpZXIoKSA9PSBnZXRQb3B1bGF0aW9uTW9kZWxMYWJlbCgpLmdldFBvcHVsYXRpb25JZGVudGlmaWVyKCkpIHsKKwkJCQkJCWZyYWN0aW9uID0gZ3JvdXAuZ2V0RnJhY3Rpb24oKTsKKwkJCQkJfQorCQkJCX0KKwkJCX0KKwkJCQorCQkJLy8gVXNlIHRoZSBwb3B1bGF0aW9uIGxhYmVsIChub3QgcG9wdWxhdGlvbiBtb2RlbCBsYWJlbCkuCisJCQlzVmFsdWUuc2V0UygoKFBvcHVsYXRpb25MYWJlbFZhbHVlKWdldFBvcHVsYXRpb25Nb2RlbExhYmVsKCkuZ2V0UG9wdWxhdGlvbkxhYmVsKCkuZ2V0Q3VycmVudFZhbHVlKCkpLmdldENvdW50KCkgKiBmcmFjdGlvbik7CisJCQkKKwkJCS8vIFNldCB0aGUgbmV4dCB2YWx1ZSB0b28uIFRoaXMgaXMgdG8gYXZvaWQgc3dpdGNoaW5nIGJldHdlZW4gemVybyB2YWx1ZXMgYW5kIG5vbi16ZXJvIHZhbHVlcworCQkJLy8gd2hlbiB0aGUgZ3JhcGggdXBkYXRlcyB0byB0aGUgbmV4dCB2YWx1ZSBmb3Igbm9kZXMgdGhhdCBhcmUgbm90IGJlaW5nIHVwZGF0ZWQgYnkgdGhpcyBpbnN0YW5jZQorCQkJCisJCQkoKEludGVncmF0aW9uTGFiZWxWYWx1ZSlnZXROZXh0VmFsdWUoKSkuc2V0KChJbnRlZ3JhdGlvbkxhYmVsVmFsdWUpZ2V0Q3VycmVudFZhbHVlKCkpOworCQl9IC8vIGlmCisKKwl9IC8vIHJlc2V0CisKKwkvKioKKwkgKiBSZXR1cm4gdGhlIGlkZW50aWZpZXIgZm9yIHRoZSBsYWJlbCwgaS5lLiB0aGUgcG9wdWxhdGlvbiBpZGVudGlmaWVyCisJICogCisJICogQHJldHVybiBTdHJpbmcgVGhlIGlkZW50aWZpZXIKKwkgKi8KKwkKKwlwdWJsaWMgU3RyaW5nIGdldElkZW50aWZpZXIoKSB7CisJCXJldHVybiB0aGlzLmdldFBvcHVsYXRpb25Nb2RlbExhYmVsKCkuZ2V0UG9wdWxhdGlvbklkZW50aWZpZXIoKTsKKwl9CisJCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCBFQ2xhc3MgZVN0YXRpY0NsYXNzKCkgeworCQlyZXR1cm4gU3RhbmRhcmRQYWNrYWdlLkxpdGVyYWxzLlNUQU5EQVJEX0RJU0VBU0VfTU9ERUxfTEFCRUw7CisJfQorCisJcHVibGljIHZvaWQgcmVzZXQoU1RFTVRpbWUgdGltZSkgeworCQkvLyBBZGp1c3QgY3VycmVudCB2YWx1ZSBieSBhZGRpbmcvc3Vic3RyYWN0aW5nIGRlbHRhcyBieSBvdGhlciBtb2RlbHMgKHBvcHVsYXRpb24gbW9kZWxzKS4KKwkJLy8gV2UgZG8gdGhpcyB0byBzZXQgdGhlIHJpZ2h0IGNvdW50cyB0byBtYXRjaCB0aGUgcG9wdWxhdGlvbiBudW1iZXJzIGF0IHRoZSBiZWdpbm5pbmcKKwkJLy8gb2YgdGhlIHNpbXVsYXRpb24uCisJCQorCQlmb3IoTGFiZWwgbDp0aGlzLmdldE5vZGUoKS5nZXRMYWJlbHMoKSkgeworCQkJaWYobCBpbnN0YW5jZW9mIEludGVncmF0aW9uTGFiZWwpIHsKKwkJCQlpZighKChJbnRlZ3JhdGlvbkxhYmVsKWwpLmdldElkZW50aWZpZXIoKS5lcXVhbHModGhpcy5nZXRQb3B1bGF0aW9uTW9kZWxMYWJlbCgpLmdldFBvcHVsYXRpb25JZGVudGlmaWVyKCkpKQorCQkJCQljb250aW51ZTsKKwkJCQlJbnRlZ3JhdGlvbkxhYmVsIGlsID0gKEludGVncmF0aW9uTGFiZWwpbDsKKwkJCQlpZihsID09IHRoaXMpIGNvbnRpbnVlOworCQkJCUludGVncmF0aW9uTGFiZWxWYWx1ZSBkZWx0YSA9IChJbnRlZ3JhdGlvbkxhYmVsVmFsdWUpaWwuZ2V0RGVsdGFWYWx1ZSgpOworCQkJCQorCQkJCUVMaXN0PEV4Y2hhbmdlPiBhcnJpdmFscyA9IGRlbHRhLmdldEFycml2YWxzKCk7CisJCQkJRUxpc3Q8RXhjaGFuZ2U+IGRlcGFydHVyZXMgPSBkZWx0YS5nZXREZXBhcnR1cmVzKCk7CisJCQkJCisJCQkJLy8gV2Ugc2NhbGUgdGhlIGxhYmVsIHZhbHVlcyBiYWNrIHNpbmNlIGF0IHRoaXMgcG9pbnQgdGhlIGlubm9jdWxhdG9ycy9pbmZlY3RvcnMKKwkJCQkvLyBoYXZlIGFscmVhZHkgYmVlbiBhcHBsaWVkIGFuZCB3ZSBuZWVkIHRvIG1vZGlmeSBhbGwgc3RhdGVzIG9mIHRoZSBkaXNlYXNlCisJCQkJCisJCQkJZG91YmxlIHBvcENvdW50ID0gKChTdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsVmFsdWUpdGhpcy5nZXRDdXJyZW50VmFsdWUoKSkuZ2V0UG9wdWxhdGlvbkNvdW50KCk7CisJCQkJaWYoYXJyaXZhbHMgIT0gbnVsbCAmJiBhcnJpdmFscy5zaXplKCkgPT0gMSkgeworCQkJCQlhc3NlcnQoYXJyaXZhbHMuZ2V0KDApLmdldFR5cGUoKSA9PSBFeGNoYW5nZVR5cGUuQklSVEhTX0FORF9ERUFUSFMpOworCQkJCQlkb3VibGUgZmFjdG9yID0gYXJyaXZhbHMuZ2V0KDApLmdldENvdW50KCkgLyBwb3BDb3VudDsKKwkJCQkJaWYoRG91YmxlLmlzTmFOKGZhY3RvcikgfHwgRG91YmxlLmlzSW5maW5pdGUoZmFjdG9yKSkgZmFjdG9yID0gMC4wOy8vIGRvIG5vdGhpbmcKKwkJCQkJSW50ZWdyYXRpb25MYWJlbFZhbHVlIGFkZFYgPSAoSW50ZWdyYXRpb25MYWJlbFZhbHVlKUVjb3JlVXRpbC5jb3B5KHRoaXMuZ2V0Q3VycmVudFZhbHVlKCkpOworCQkJCQlhZGRWLnNjYWxlKGZhY3Rvcik7CisJCQkJCSgoSW50ZWdyYXRpb25MYWJlbFZhbHVlKXRoaXMuZ2V0Q3VycmVudFZhbHVlKCkpLmFkZCgoSW50ZWdyYXRpb25MYWJlbFZhbHVlKWFkZFYpOworCQkJCX0KKwkJCQlpZihkZXBhcnR1cmVzICE9IG51bGwgJiYgZGVwYXJ0dXJlcy5zaXplKCkgPT0gMSkgeworCQkJCQlhc3NlcnQoZGVwYXJ0dXJlcy5nZXQoMCkuZ2V0VHlwZSgpID09IEV4Y2hhbmdlVHlwZS5CSVJUSFNfQU5EX0RFQVRIUyk7CisJCQkJCWRvdWJsZSBmYWN0b3IgPSBkZXBhcnR1cmVzLmdldCgwKS5nZXRDb3VudCgpIC8gcG9wQ291bnQ7CisJCQkJCWlmKERvdWJsZS5pc05hTihmYWN0b3IpIHx8IERvdWJsZS5pc0luZmluaXRlKGZhY3RvcikpIGZhY3RvciA9IDAuMDsvLyBkbyBub3RoaW5nCisJCQkJCUludGVncmF0aW9uTGFiZWxWYWx1ZSBzdWJWID0gKEludGVncmF0aW9uTGFiZWxWYWx1ZSlFY29yZVV0aWwuY29weSh0aGlzLmdldEN1cnJlbnRWYWx1ZSgpKTsKKwkJCQkJc3ViVi5zY2FsZShmYWN0b3IpOworCQkJCQkoKEludGVncmF0aW9uTGFiZWxWYWx1ZSl0aGlzLmdldEN1cnJlbnRWYWx1ZSgpKS5zdWIoKEludGVncmF0aW9uTGFiZWxWYWx1ZSlzdWJWKTsKKwkJCQl9CisJCQkJCisJCQkJCQorCQkJfQorCQl9CisJfQorCQorCQorfSAvLyBTdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsSW1wbApkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9zdGFuZGFyZC9pbXBsL1N0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZUltcGwuamF2YSBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvc3RhbmRhcmQvaW1wbC9TdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsVmFsdWVJbXBsLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTM1ODNhNwotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvc3RhbmRhcmQvaW1wbC9TdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsVmFsdWVJbXBsLmphdmEKQEAgLTAsMCArMSwzMzEgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLmltcGw7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKK2ltcG9ydCBqYXZhLnRleHQuTnVtYmVyRm9ybWF0OworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLmltcGwuRU5vdGlmaWNhdGlvbkltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkludGVncmF0aW9uTGFiZWxWYWx1ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguTGFiZWxWYWx1ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbFZhbHVlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZFBhY2thZ2U7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPkRpc2Vhc2UgTW9kZWwgTGFiZWwgVmFsdWU8L2I+PC9lbT4nLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiA8cD4KKyAqIFRoZSBmb2xsb3dpbmcgZmVhdHVyZXMgYXJlIGltcGxlbWVudGVkOgorICogPHVsPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5pbXBsLlN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZUltcGwjZ2V0UyA8ZW0+UzwvZW0+fTwvbGk+CisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLmltcGwuU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbFZhbHVlSW1wbCNnZXRJbmNpZGVuY2UgPGVtPkluY2lkZW5jZTwvZW0+fTwvbGk+CisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLmltcGwuU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbFZhbHVlSW1wbCNnZXREaXNlYXNlRGVhdGhzIDxlbT5EaXNlYXNlIERlYXRoczwvZW0+fTwvbGk+CisgKiA8L3VsPgorICogPC9wPgorICoKKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGFic3RyYWN0IGNsYXNzIFN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZUltcGwgZXh0ZW5kcworCQlEaXNlYXNlTW9kZWxMYWJlbFZhbHVlSW1wbCBpbXBsZW1lbnRzIFN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZSB7CisJCisJLyoqCisJICogVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldFMoKSA8ZW0+UzwvZW0+fScgYXR0cmlidXRlLiA8IS0tCisJICogYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBzZWUgI2dldFMoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgZG91YmxlIFNfRURFRkFVTFQgPSAwLjA7CisKKwkvKioKKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRTKCkgPGVtPlM8L2VtPn0nIGF0dHJpYnV0ZS4gPCEtLQorCSAqIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAc2VlICNnZXRTKCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgZG91YmxlIHMgPSBTX0VERUZBVUxUOworCisJCisJLyoqCisJICogVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldEluY2lkZW5jZSgpIDxlbT5JbmNpZGVuY2U8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI2dldEluY2lkZW5jZSgpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBkb3VibGUgSU5DSURFTkNFX0VERUZBVUxUID0gMC4wOworCisJLyoqCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0SW5jaWRlbmNlKCkgPGVtPkluY2lkZW5jZTwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZ2V0SW5jaWRlbmNlKCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgZG91YmxlIGluY2lkZW5jZSA9IElOQ0lERU5DRV9FREVGQVVMVDsKKworCS8qKgorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXREaXNlYXNlRGVhdGhzKCkgPGVtPkRpc2Vhc2UgRGVhdGhzPC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNnZXREaXNlYXNlRGVhdGhzKCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIGRvdWJsZSBESVNFQVNFX0RFQVRIU19FREVGQVVMVCA9IDAuMDsKKworCS8qKgorCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldERpc2Vhc2VEZWF0aHMoKSA8ZW0+RGlzZWFzZSBEZWF0aHM8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI2dldERpc2Vhc2VEZWF0aHMoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBkb3VibGUgZGlzZWFzZURlYXRocyA9IERJU0VBU0VfREVBVEhTX0VERUZBVUxUOworCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBTdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsVmFsdWVJbXBsKCkgeworCQlzdXBlcigpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogCisJICogVGhpcyBpcyB1c2VkIHRvIGNyZWF0ZSBpbnN0YW5jZXMgZm9yIHRlc3RpbmcgcHVycG9zZXMuCisJICogCisJICogQHBhcmFtIHMKKwkgKiAgICAgICAgICAgIHRoZSBudW1iZXIgb2Ygc3VzY2VwdGlibGUgcG9wdWxhdGlvbiBtZW1iZXJzCisJICogCisJICogQHBhcmFtIGJpcnRocworCSAqICAgICAgICAgICAgdGhlIG51bWJlciBvZiBiaXJ0aHMgdGhhdCBoYXZlIG9jY3VyZWQgaW4gdGhlIHBvcHVsYXRpb24KKwkgKiBAcGFyYW0gZGVhdGhzCisJICogICAgICAgICAgICB0aGUgdG90YWwgbnVtYmVyIG9mIGRlYXRocyB0aGF0IGhhdmUgb2NjdXJlZCBpbiB0aGUgcG9wdWxhdGlvbgorCSAqIEBwYXJhbSBkaXNlYXNlRGVhdGhzCisJICogICAgICAgICAgICB0aGUgbnVtYmVyIG9mIGRlYXRocyBkdWUgdG8gdGhlIGRpc2Vhc2UgdGhhdCBoYXZlIG9jY3VyZWQgaW4KKwkgKiAgICAgICAgICAgIHRoZSBwb3B1bGF0aW9uCisJICogCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICovCisJcHVibGljIFN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZUltcGwoZmluYWwgZG91YmxlIHMsIGZpbmFsIGRvdWJsZSBpbmNpZGVuY2UsIGZpbmFsIGRvdWJsZSBkaXNlYXNlRGVhdGhzKSB7CisJCXN1cGVyKCk7CisJCXRoaXMuc2V0UyhzKTsKKwkJdGhpcy5zZXRJbmNpZGVuY2UoaW5jaWRlbmNlKTsKKwkJdGhpcy5zZXREaXNlYXNlRGVhdGhzKGRpc2Vhc2VEZWF0aHMpOworCX0gLy8gU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbFZhbHVlSW1wbAorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCBFQ2xhc3MgZVN0YXRpY0NsYXNzKCkgeworCQlyZXR1cm4gU3RhbmRhcmRQYWNrYWdlLkxpdGVyYWxzLlNUQU5EQVJEX0RJU0VBU0VfTU9ERUxfTEFCRUxfVkFMVUU7CisJfQorCisJCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAcmV0dXJuCisJICogCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBkb3VibGUgZ2V0UygpIHsKKwkJcmV0dXJuIHM7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAcGFyYW0gbmV3UworCSAqIAorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRTKGRvdWJsZSBuZXdTKSB7CisJCWRvdWJsZSBvbGRTID0gczsKKwkJcyA9IG5ld1M7CisJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkKKwkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIFN0YW5kYXJkUGFja2FnZS5TVEFOREFSRF9ESVNFQVNFX01PREVMX0xBQkVMX1ZBTFVFX19TLCBvbGRTLCBzKSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIGRvdWJsZSBnZXRJbmNpZGVuY2UoKSB7CisJCXJldHVybiBpbmNpZGVuY2U7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgc2V0SW5jaWRlbmNlKGRvdWJsZSBuZXdJbmNpZGVuY2UpIHsKKwkJZG91YmxlIG9sZEluY2lkZW5jZSA9IGluY2lkZW5jZTsKKwkJaW5jaWRlbmNlID0gbmV3SW5jaWRlbmNlOworCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpCisJCQllTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBTdGFuZGFyZFBhY2thZ2UuU1RBTkRBUkRfRElTRUFTRV9NT0RFTF9MQUJFTF9WQUxVRV9fSU5DSURFTkNFLCBvbGRJbmNpZGVuY2UsIGluY2lkZW5jZSkpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBkb3VibGUgZ2V0RGlzZWFzZURlYXRocygpIHsKKwkJcmV0dXJuIGRpc2Vhc2VEZWF0aHM7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgc2V0RGlzZWFzZURlYXRocyhkb3VibGUgbmV3RGlzZWFzZURlYXRocykgeworCQlkb3VibGUgb2xkRGlzZWFzZURlYXRocyA9IGRpc2Vhc2VEZWF0aHM7CisJCWRpc2Vhc2VEZWF0aHMgPSBuZXdEaXNlYXNlRGVhdGhzOworCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpCisJCQllTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBTdGFuZGFyZFBhY2thZ2UuU1RBTkRBUkRfRElTRUFTRV9NT0RFTF9MQUJFTF9WQUxVRV9fRElTRUFTRV9ERUFUSFMsIG9sZERpc2Vhc2VEZWF0aHMsIGRpc2Vhc2VEZWF0aHMpKTsKKwl9CisJCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAcGFyYW0gZmVhdHVyZUlECisJICogQHBhcmFtIHJlc29sdmUKKwkgKiBAcGFyYW0gY29yZVR5cGUKKwkgKiBAcmV0dXJuCisJICogCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBPYmplY3QgZUdldChpbnQgZmVhdHVyZUlELCBib29sZWFuIHJlc29sdmUsIGJvb2xlYW4gY29yZVR5cGUpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJCWNhc2UgU3RhbmRhcmRQYWNrYWdlLlNUQU5EQVJEX0RJU0VBU0VfTU9ERUxfTEFCRUxfVkFMVUVfX1M6CisJCQkJcmV0dXJuIGdldFMoKTsKKwkJCWNhc2UgU3RhbmRhcmRQYWNrYWdlLlNUQU5EQVJEX0RJU0VBU0VfTU9ERUxfTEFCRUxfVkFMVUVfX0lOQ0lERU5DRToKKwkJCQlyZXR1cm4gZ2V0SW5jaWRlbmNlKCk7CisJCQljYXNlIFN0YW5kYXJkUGFja2FnZS5TVEFOREFSRF9ESVNFQVNFX01PREVMX0xBQkVMX1ZBTFVFX19ESVNFQVNFX0RFQVRIUzoKKwkJCQlyZXR1cm4gZ2V0RGlzZWFzZURlYXRocygpOworCQl9CisJCXJldHVybiBzdXBlci5lR2V0KGZlYXR1cmVJRCwgcmVzb2x2ZSwgY29yZVR5cGUpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogCisJICogQHBhcmFtIGZlYXR1cmVJRAorCSAqIEBwYXJhbSBuZXdWYWx1ZQorCSAqIAorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBlU2V0KGludCBmZWF0dXJlSUQsIE9iamVjdCBuZXdWYWx1ZSkgeworCQlzd2l0Y2ggKGZlYXR1cmVJRCkgeworCQkJY2FzZSBTdGFuZGFyZFBhY2thZ2UuU1RBTkRBUkRfRElTRUFTRV9NT0RFTF9MQUJFTF9WQUxVRV9fUzoKKwkJCQlzZXRTKChEb3VibGUpbmV3VmFsdWUpOworCQkJCXJldHVybjsKKwkJCWNhc2UgU3RhbmRhcmRQYWNrYWdlLlNUQU5EQVJEX0RJU0VBU0VfTU9ERUxfTEFCRUxfVkFMVUVfX0lOQ0lERU5DRToKKwkJCQlzZXRJbmNpZGVuY2UoKERvdWJsZSluZXdWYWx1ZSk7CisJCQkJcmV0dXJuOworCQkJY2FzZSBTdGFuZGFyZFBhY2thZ2UuU1RBTkRBUkRfRElTRUFTRV9NT0RFTF9MQUJFTF9WQUxVRV9fRElTRUFTRV9ERUFUSFM6CisJCQkJc2V0RGlzZWFzZURlYXRocygoRG91YmxlKW5ld1ZhbHVlKTsKKwkJCQlyZXR1cm47CisJCX0KKwkJc3VwZXIuZVNldChmZWF0dXJlSUQsIG5ld1ZhbHVlKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBwYXJhbSBmZWF0dXJlSUQKKwkgKiAKKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgZVVuc2V0KGludCBmZWF0dXJlSUQpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJCWNhc2UgU3RhbmRhcmRQYWNrYWdlLlNUQU5EQVJEX0RJU0VBU0VfTU9ERUxfTEFCRUxfVkFMVUVfX1M6CisJCQkJc2V0UyhTX0VERUZBVUxUKTsKKwkJCQlyZXR1cm47CisJCQljYXNlIFN0YW5kYXJkUGFja2FnZS5TVEFOREFSRF9ESVNFQVNFX01PREVMX0xBQkVMX1ZBTFVFX19JTkNJREVOQ0U6CisJCQkJc2V0SW5jaWRlbmNlKElOQ0lERU5DRV9FREVGQVVMVCk7CisJCQkJcmV0dXJuOworCQkJY2FzZSBTdGFuZGFyZFBhY2thZ2UuU1RBTkRBUkRfRElTRUFTRV9NT0RFTF9MQUJFTF9WQUxVRV9fRElTRUFTRV9ERUFUSFM6CisJCQkJc2V0RGlzZWFzZURlYXRocyhESVNFQVNFX0RFQVRIU19FREVGQVVMVCk7CisJCQkJcmV0dXJuOworCQl9CisJCXN1cGVyLmVVbnNldChmZWF0dXJlSUQpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogCisJICogQHBhcmFtIGZlYXR1cmVJRAorCSAqIEByZXR1cm4KKwkgKiAKKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIGJvb2xlYW4gZUlzU2V0KGludCBmZWF0dXJlSUQpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJCWNhc2UgU3RhbmRhcmRQYWNrYWdlLlNUQU5EQVJEX0RJU0VBU0VfTU9ERUxfTEFCRUxfVkFMVUVfX1M6CisJCQkJcmV0dXJuIHMgIT0gU19FREVGQVVMVDsKKwkJCWNhc2UgU3RhbmRhcmRQYWNrYWdlLlNUQU5EQVJEX0RJU0VBU0VfTU9ERUxfTEFCRUxfVkFMVUVfX0lOQ0lERU5DRToKKwkJCQlyZXR1cm4gaW5jaWRlbmNlICE9IElOQ0lERU5DRV9FREVGQVVMVDsKKwkJCWNhc2UgU3RhbmRhcmRQYWNrYWdlLlNUQU5EQVJEX0RJU0VBU0VfTU9ERUxfTEFCRUxfVkFMVUVfX0RJU0VBU0VfREVBVEhTOgorCQkJCXJldHVybiBkaXNlYXNlRGVhdGhzICE9IERJU0VBU0VfREVBVEhTX0VERUZBVUxUOworCQl9CisJCXJldHVybiBzdXBlci5lSXNTZXQoZmVhdHVyZUlEKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkgeworCQlpZiAoZUlzUHJveHkoKSkgcmV0dXJuIHN1cGVyLnRvU3RyaW5nKCk7CisKKwkJU3RyaW5nQnVmZmVyIHJlc3VsdCA9IG5ldyBTdHJpbmdCdWZmZXIoc3VwZXIudG9TdHJpbmcoKSk7CisJCXJlc3VsdC5hcHBlbmQoIiAoczogIik7IC8vJE5PTi1OTFMtMSQKKwkJcmVzdWx0LmFwcGVuZChzKTsKKwkJcmVzdWx0LmFwcGVuZCgiLCBpbmNpZGVuY2U6ICIpOyAvLyROT04tTkxTLTEkCisJCXJlc3VsdC5hcHBlbmQoaW5jaWRlbmNlKTsKKwkJcmVzdWx0LmFwcGVuZCgiLCBkaXNlYXNlRGVhdGhzOiAiKTsgLy8kTk9OLU5MUy0xJAorCQlyZXN1bHQuYXBwZW5kKGRpc2Vhc2VEZWF0aHMpOworCQlyZXN1bHQuYXBwZW5kKCcpJyk7CisJCXJldHVybiByZXN1bHQudG9TdHJpbmcoKTsKKwl9CisKK30gLy8gU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbFZhbHVlSW1wbApkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9zdGFuZGFyZC9pbXBsL1N0YW5kYXJkRmFjdG9yeUltcGwuamF2YSBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvc3RhbmRhcmQvaW1wbC9TdGFuZGFyZEZhY3RvcnlJbXBsLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTg0N2NjZgotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvc3RhbmRhcmQvaW1wbC9TdGFuZGFyZEZhY3RvcnlJbXBsLmphdmEKQEAgLTAsMCArMSwzOTIgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLmltcGw7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgamF2YS51dGlsLlJhbmRvbTsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5FTGlzdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuVVJJOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVEYXRhVHlwZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRVBhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLmltcGwuRUZhY3RvcnlJbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5wbHVnaW4uRWNvcmVQbHVnaW47CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLio7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLkRldGVybWluaXN0aWNTRUlSRGlzZWFzZU1vZGVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5EZXRlcm1pbmlzdGljU0lEaXNlYXNlTW9kZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLkRldGVybWluaXN0aWNTSVJEaXNlYXNlTW9kZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLkluZmVjdG9ySW5vY3VsYXRvckNvbGxlY3Rpb247CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlNFSVJMYWJlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU0VJUkxhYmVsVmFsdWU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlNJSW5mZWN0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlNJTGFiZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlNJTGFiZWxWYWx1ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU0lSSW5vY3VsYXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU0lSTGFiZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlNJUkxhYmVsVmFsdWU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmRQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdG9jaGFzdGljUG9pc3NvblNFSVJEaXNlYXNlTW9kZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlN0b2NoYXN0aWNQb2lzc29uU0lEaXNlYXNlTW9kZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlN0b2NoYXN0aWNQb2lzc29uU0lSRGlzZWFzZU1vZGVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdG9jaGFzdGljU0VJUkRpc2Vhc2VNb2RlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RvY2hhc3RpY1NJRGlzZWFzZU1vZGVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdG9jaGFzdGljU0lSRGlzZWFzZU1vZGVsOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiBBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgbW9kZWwgPGI+RmFjdG9yeTwvYj4uCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIFN0YW5kYXJkRmFjdG9yeUltcGwgZXh0ZW5kcyBFRmFjdG9yeUltcGwgaW1wbGVtZW50cyBTdGFuZGFyZEZhY3RvcnkgeworCS8qKgorCSAqIENyZWF0ZXMgdGhlIGRlZmF1bHQgZmFjdG9yeSBpbXBsZW1lbnRhdGlvbi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgc3RhdGljIFN0YW5kYXJkRmFjdG9yeSBpbml0KCkgeworCQl0cnkgeworCQkJU3RhbmRhcmRGYWN0b3J5IHRoZVN0YW5kYXJkRmFjdG9yeSA9IChTdGFuZGFyZEZhY3RvcnkpRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RUZhY3RvcnkoImh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3N0YW5kYXJkLmVjb3JlIik7IC8vJE5PTi1OTFMtMSQgCisJCQlpZiAodGhlU3RhbmRhcmRGYWN0b3J5ICE9IG51bGwpIHsKKwkJCQlyZXR1cm4gdGhlU3RhbmRhcmRGYWN0b3J5OworCQkJfQorCQl9CisJCWNhdGNoIChFeGNlcHRpb24gZXhjZXB0aW9uKSB7CisJCQlFY29yZVBsdWdpbi5JTlNUQU5DRS5sb2coZXhjZXB0aW9uKTsKKwkJfQorCQlyZXR1cm4gbmV3IFN0YW5kYXJkRmFjdG9yeUltcGwoKTsKKwl9CisKKwkvKioKKwkgKiBDcmVhdGVzIGFuIGluc3RhbmNlIG9mIHRoZSBmYWN0b3J5LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBTdGFuZGFyZEZhY3RvcnlJbXBsKCkgeworCQlzdXBlcigpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBFT2JqZWN0IGNyZWF0ZShFQ2xhc3MgZUNsYXNzKSB7CisJCXN3aXRjaCAoZUNsYXNzLmdldENsYXNzaWZpZXJJRCgpKSB7CisJCQljYXNlIFN0YW5kYXJkUGFja2FnZS5ERVRFUk1JTklTVElDX1NFSVJfRElTRUFTRV9NT0RFTDogcmV0dXJuIGNyZWF0ZURldGVybWluaXN0aWNTRUlSRGlzZWFzZU1vZGVsKCk7CisJCQljYXNlIFN0YW5kYXJkUGFja2FnZS5ERVRFUk1JTklTVElDX1NJX0RJU0VBU0VfTU9ERUw6IHJldHVybiBjcmVhdGVEZXRlcm1pbmlzdGljU0lEaXNlYXNlTW9kZWwoKTsKKwkJCWNhc2UgU3RhbmRhcmRQYWNrYWdlLkRFVEVSTUlOSVNUSUNfU0lSX0RJU0VBU0VfTU9ERUw6IHJldHVybiBjcmVhdGVEZXRlcm1pbmlzdGljU0lSRGlzZWFzZU1vZGVsKCk7CisJCQljYXNlIFN0YW5kYXJkUGFja2FnZS5TRUlSX0xBQkVMOiByZXR1cm4gY3JlYXRlU0VJUkxhYmVsKCk7CisJCQljYXNlIFN0YW5kYXJkUGFja2FnZS5TRUlSX0xBQkVMX1ZBTFVFOiByZXR1cm4gY3JlYXRlU0VJUkxhYmVsVmFsdWUoKTsKKwkJCWNhc2UgU3RhbmRhcmRQYWNrYWdlLlNJX0lORkVDVE9SOiByZXR1cm4gY3JlYXRlU0lJbmZlY3RvcigpOworCQkJY2FzZSBTdGFuZGFyZFBhY2thZ2UuU0lfTEFCRUw6IHJldHVybiBjcmVhdGVTSUxhYmVsKCk7CisJCQljYXNlIFN0YW5kYXJkUGFja2FnZS5TSV9MQUJFTF9WQUxVRTogcmV0dXJuIGNyZWF0ZVNJTGFiZWxWYWx1ZSgpOworCQkJY2FzZSBTdGFuZGFyZFBhY2thZ2UuU0lSX0xBQkVMOiByZXR1cm4gY3JlYXRlU0lSTGFiZWwoKTsKKwkJCWNhc2UgU3RhbmRhcmRQYWNrYWdlLlNJUl9MQUJFTF9WQUxVRTogcmV0dXJuIGNyZWF0ZVNJUkxhYmVsVmFsdWUoKTsKKwkJCWNhc2UgU3RhbmRhcmRQYWNrYWdlLlNUT0NIQVNUSUNfU0VJUl9ESVNFQVNFX01PREVMOiByZXR1cm4gY3JlYXRlU3RvY2hhc3RpY1NFSVJEaXNlYXNlTW9kZWwoKTsKKwkJCWNhc2UgU3RhbmRhcmRQYWNrYWdlLlNUT0NIQVNUSUNfU0lfRElTRUFTRV9NT0RFTDogcmV0dXJuIGNyZWF0ZVN0b2NoYXN0aWNTSURpc2Vhc2VNb2RlbCgpOworCQkJY2FzZSBTdGFuZGFyZFBhY2thZ2UuU1RPQ0hBU1RJQ19TSVJfRElTRUFTRV9NT0RFTDogcmV0dXJuIGNyZWF0ZVN0b2NoYXN0aWNTSVJEaXNlYXNlTW9kZWwoKTsKKwkJCWNhc2UgU3RhbmRhcmRQYWNrYWdlLlNJUl9JTk9DVUxBVE9SOiByZXR1cm4gY3JlYXRlU0lSSW5vY3VsYXRvcigpOworCQkJY2FzZSBTdGFuZGFyZFBhY2thZ2UuU1RPQ0hBU1RJQ19QT0lTU09OX1NJX0RJU0VBU0VfTU9ERUw6IHJldHVybiBjcmVhdGVTdG9jaGFzdGljUG9pc3NvblNJRGlzZWFzZU1vZGVsKCk7CisJCQljYXNlIFN0YW5kYXJkUGFja2FnZS5TVE9DSEFTVElDX1BPSVNTT05fU0lSX0RJU0VBU0VfTU9ERUw6IHJldHVybiBjcmVhdGVTdG9jaGFzdGljUG9pc3NvblNJUkRpc2Vhc2VNb2RlbCgpOworCQkJY2FzZSBTdGFuZGFyZFBhY2thZ2UuU1RPQ0hBU1RJQ19QT0lTU09OX1NFSVJfRElTRUFTRV9NT0RFTDogcmV0dXJuIGNyZWF0ZVN0b2NoYXN0aWNQb2lzc29uU0VJUkRpc2Vhc2VNb2RlbCgpOworCQkJY2FzZSBTdGFuZGFyZFBhY2thZ2UuSU5GRUNUT1JfSU5PQ1VMQVRPUl9DT0xMRUNUSU9OOiByZXR1cm4gY3JlYXRlSW5mZWN0b3JJbm9jdWxhdG9yQ29sbGVjdGlvbigpOworCQkJY2FzZSBTdGFuZGFyZFBhY2thZ2UuSU5JVElBTElaRVI6IHJldHVybiBjcmVhdGVJbml0aWFsaXplcigpOworCQkJZGVmYXVsdDoKKwkJCQl0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJUaGUgY2xhc3MgJyIgKyBlQ2xhc3MuZ2V0TmFtZSgpICsgIicgaXMgbm90IGEgdmFsaWQgY2xhc3NpZmllciIpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKKwkJfQorCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBPYmplY3QgY3JlYXRlRnJvbVN0cmluZyhFRGF0YVR5cGUgZURhdGFUeXBlLCBTdHJpbmcgaW5pdGlhbFZhbHVlKSB7CisJCXN3aXRjaCAoZURhdGFUeXBlLmdldENsYXNzaWZpZXJJRCgpKSB7CisJCQljYXNlIFN0YW5kYXJkUGFja2FnZS5SQU5ET006CisJCQkJcmV0dXJuIGNyZWF0ZVJhbmRvbUZyb21TdHJpbmcoZURhdGFUeXBlLCBpbml0aWFsVmFsdWUpOworCQkJZGVmYXVsdDoKKwkJCQl0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJUaGUgZGF0YXR5cGUgJyIgKyBlRGF0YVR5cGUuZ2V0TmFtZSgpICsgIicgaXMgbm90IGEgdmFsaWQgY2xhc3NpZmllciIpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKKwkJfQorCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBTdHJpbmcgY29udmVydFRvU3RyaW5nKEVEYXRhVHlwZSBlRGF0YVR5cGUsIE9iamVjdCBpbnN0YW5jZVZhbHVlKSB7CisJCXN3aXRjaCAoZURhdGFUeXBlLmdldENsYXNzaWZpZXJJRCgpKSB7CisJCQljYXNlIFN0YW5kYXJkUGFja2FnZS5SQU5ET006CisJCQkJcmV0dXJuIGNvbnZlcnRSYW5kb21Ub1N0cmluZyhlRGF0YVR5cGUsIGluc3RhbmNlVmFsdWUpOworCQkJZGVmYXVsdDoKKwkJCQl0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJUaGUgZGF0YXR5cGUgJyIgKyBlRGF0YVR5cGUuZ2V0TmFtZSgpICsgIicgaXMgbm90IGEgdmFsaWQgY2xhc3NpZmllciIpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKKwkJfQorCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBEZXRlcm1pbmlzdGljU0VJUkRpc2Vhc2VNb2RlbCBjcmVhdGVEZXRlcm1pbmlzdGljU0VJUkRpc2Vhc2VNb2RlbCgpIHsKKwkJRGV0ZXJtaW5pc3RpY1NFSVJEaXNlYXNlTW9kZWxJbXBsIGRldGVybWluaXN0aWNTRUlSRGlzZWFzZU1vZGVsID0gbmV3IERldGVybWluaXN0aWNTRUlSRGlzZWFzZU1vZGVsSW1wbCgpOworCQlyZXR1cm4gZGV0ZXJtaW5pc3RpY1NFSVJEaXNlYXNlTW9kZWw7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIERldGVybWluaXN0aWNTSURpc2Vhc2VNb2RlbCBjcmVhdGVEZXRlcm1pbmlzdGljU0lEaXNlYXNlTW9kZWwoKSB7CisJCURldGVybWluaXN0aWNTSURpc2Vhc2VNb2RlbEltcGwgZGV0ZXJtaW5pc3RpY1NJRGlzZWFzZU1vZGVsID0gbmV3IERldGVybWluaXN0aWNTSURpc2Vhc2VNb2RlbEltcGwoKTsKKwkJcmV0dXJuIGRldGVybWluaXN0aWNTSURpc2Vhc2VNb2RlbDsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRGV0ZXJtaW5pc3RpY1NJUkRpc2Vhc2VNb2RlbCBjcmVhdGVEZXRlcm1pbmlzdGljU0lSRGlzZWFzZU1vZGVsKCkgeworCQlEZXRlcm1pbmlzdGljU0lSRGlzZWFzZU1vZGVsSW1wbCBkZXRlcm1pbmlzdGljU0lSRGlzZWFzZU1vZGVsID0gbmV3IERldGVybWluaXN0aWNTSVJEaXNlYXNlTW9kZWxJbXBsKCk7CisJCXJldHVybiBkZXRlcm1pbmlzdGljU0lSRGlzZWFzZU1vZGVsOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBTRUlSTGFiZWwgY3JlYXRlU0VJUkxhYmVsKCkgeworCQlTRUlSTGFiZWxJbXBsIHNlaXJMYWJlbCA9IG5ldyBTRUlSTGFiZWxJbXBsKCk7CisJCXJldHVybiBzZWlyTGFiZWw7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFNFSVJMYWJlbFZhbHVlIGNyZWF0ZVNFSVJMYWJlbFZhbHVlKCkgeworCQlTRUlSTGFiZWxWYWx1ZUltcGwgc2VpckxhYmVsVmFsdWUgPSBuZXcgU0VJUkxhYmVsVmFsdWVJbXBsKCk7CisJCXJldHVybiBzZWlyTGFiZWxWYWx1ZTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgU0lJbmZlY3RvciBjcmVhdGVTSUluZmVjdG9yKCkgeworCQlTSUluZmVjdG9ySW1wbCBzaUluZmVjdG9yID0gbmV3IFNJSW5mZWN0b3JJbXBsKCk7CisJCXJldHVybiBzaUluZmVjdG9yOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBTSUxhYmVsIGNyZWF0ZVNJTGFiZWwoKSB7CisJCVNJTGFiZWxJbXBsIHNpTGFiZWwgPSBuZXcgU0lMYWJlbEltcGwoKTsKKwkJcmV0dXJuIHNpTGFiZWw7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFNJTGFiZWxWYWx1ZSBjcmVhdGVTSUxhYmVsVmFsdWUoKSB7CisJCVNJTGFiZWxWYWx1ZUltcGwgc2lMYWJlbFZhbHVlID0gbmV3IFNJTGFiZWxWYWx1ZUltcGwoKTsKKwkJcmV0dXJuIHNpTGFiZWxWYWx1ZTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgU0lSTGFiZWwgY3JlYXRlU0lSTGFiZWwoKSB7CisJCVNJUkxhYmVsSW1wbCBzaXJMYWJlbCA9IG5ldyBTSVJMYWJlbEltcGwoKTsKKwkJcmV0dXJuIHNpckxhYmVsOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBTSVJMYWJlbFZhbHVlIGNyZWF0ZVNJUkxhYmVsVmFsdWUoKSB7CisJCVNJUkxhYmVsVmFsdWVJbXBsIHNpckxhYmVsVmFsdWUgPSBuZXcgU0lSTGFiZWxWYWx1ZUltcGwoKTsKKwkJcmV0dXJuIHNpckxhYmVsVmFsdWU7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFN0b2NoYXN0aWNTRUlSRGlzZWFzZU1vZGVsIGNyZWF0ZVN0b2NoYXN0aWNTRUlSRGlzZWFzZU1vZGVsKCkgeworCQlTdG9jaGFzdGljU0VJUkRpc2Vhc2VNb2RlbEltcGwgc3RvY2hhc3RpY1NFSVJEaXNlYXNlTW9kZWwgPSBuZXcgU3RvY2hhc3RpY1NFSVJEaXNlYXNlTW9kZWxJbXBsKCk7CisJCXJldHVybiBzdG9jaGFzdGljU0VJUkRpc2Vhc2VNb2RlbDsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgU3RvY2hhc3RpY1NJRGlzZWFzZU1vZGVsIGNyZWF0ZVN0b2NoYXN0aWNTSURpc2Vhc2VNb2RlbCgpIHsKKwkJU3RvY2hhc3RpY1NJRGlzZWFzZU1vZGVsSW1wbCBzdG9jaGFzdGljU0lEaXNlYXNlTW9kZWwgPSBuZXcgU3RvY2hhc3RpY1NJRGlzZWFzZU1vZGVsSW1wbCgpOworCQlyZXR1cm4gc3RvY2hhc3RpY1NJRGlzZWFzZU1vZGVsOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBTdG9jaGFzdGljU0lSRGlzZWFzZU1vZGVsIGNyZWF0ZVN0b2NoYXN0aWNTSVJEaXNlYXNlTW9kZWwoKSB7CisJCVN0b2NoYXN0aWNTSVJEaXNlYXNlTW9kZWxJbXBsIHN0b2NoYXN0aWNTSVJEaXNlYXNlTW9kZWwgPSBuZXcgU3RvY2hhc3RpY1NJUkRpc2Vhc2VNb2RlbEltcGwoKTsKKwkJcmV0dXJuIHN0b2NoYXN0aWNTSVJEaXNlYXNlTW9kZWw7CisJfQorCisJCisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgU0lSSW5vY3VsYXRvciBjcmVhdGVTSVJJbm9jdWxhdG9yKCkgeworCQlTSVJJbm9jdWxhdG9ySW1wbCBzaXJJbm9jdWxhdG9yID0gbmV3IFNJUklub2N1bGF0b3JJbXBsKCk7CisJCXJldHVybiBzaXJJbm9jdWxhdG9yOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBTdG9jaGFzdGljUG9pc3NvblNJRGlzZWFzZU1vZGVsIGNyZWF0ZVN0b2NoYXN0aWNQb2lzc29uU0lEaXNlYXNlTW9kZWwoKSB7CisJCVN0b2NoYXN0aWNQb2lzc29uU0lEaXNlYXNlTW9kZWxJbXBsIHN0b2NoYXN0aWNQb2lzc29uU0lEaXNlYXNlTW9kZWwgPSBuZXcgU3RvY2hhc3RpY1BvaXNzb25TSURpc2Vhc2VNb2RlbEltcGwoKTsKKwkJcmV0dXJuIHN0b2NoYXN0aWNQb2lzc29uU0lEaXNlYXNlTW9kZWw7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFN0b2NoYXN0aWNQb2lzc29uU0lSRGlzZWFzZU1vZGVsIGNyZWF0ZVN0b2NoYXN0aWNQb2lzc29uU0lSRGlzZWFzZU1vZGVsKCkgeworCQlTdG9jaGFzdGljUG9pc3NvblNJUkRpc2Vhc2VNb2RlbEltcGwgc3RvY2hhc3RpY1BvaXNzb25TSVJEaXNlYXNlTW9kZWwgPSBuZXcgU3RvY2hhc3RpY1BvaXNzb25TSVJEaXNlYXNlTW9kZWxJbXBsKCk7CisJCXJldHVybiBzdG9jaGFzdGljUG9pc3NvblNJUkRpc2Vhc2VNb2RlbDsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgU3RvY2hhc3RpY1BvaXNzb25TRUlSRGlzZWFzZU1vZGVsIGNyZWF0ZVN0b2NoYXN0aWNQb2lzc29uU0VJUkRpc2Vhc2VNb2RlbCgpIHsKKwkJU3RvY2hhc3RpY1BvaXNzb25TRUlSRGlzZWFzZU1vZGVsSW1wbCBzdG9jaGFzdGljUG9pc3NvblNFSVJEaXNlYXNlTW9kZWwgPSBuZXcgU3RvY2hhc3RpY1BvaXNzb25TRUlSRGlzZWFzZU1vZGVsSW1wbCgpOworCQlyZXR1cm4gc3RvY2hhc3RpY1BvaXNzb25TRUlSRGlzZWFzZU1vZGVsOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBJbmZlY3Rvcklub2N1bGF0b3JDb2xsZWN0aW9uIGNyZWF0ZUluZmVjdG9ySW5vY3VsYXRvckNvbGxlY3Rpb24oKSB7CisJCUluZmVjdG9ySW5vY3VsYXRvckNvbGxlY3Rpb25JbXBsIGluZmVjdG9ySW5vY3VsYXRvckNvbGxlY3Rpb24gPSBuZXcgSW5mZWN0b3JJbm9jdWxhdG9yQ29sbGVjdGlvbkltcGwoKTsKKwkJcmV0dXJuIGluZmVjdG9ySW5vY3VsYXRvckNvbGxlY3Rpb247CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEluaXRpYWxpemVyIGNyZWF0ZUluaXRpYWxpemVyKCkgeworCQlJbml0aWFsaXplckltcGwgaW5pdGlhbGl6ZXIgPSBuZXcgSW5pdGlhbGl6ZXJJbXBsKCk7CisJCXJldHVybiBpbml0aWFsaXplcjsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCXB1YmxpYyBVUkkgY3JlYXRlVVJJRnJvbVN0cmluZyhFRGF0YVR5cGUgZURhdGFUeXBlLCBTdHJpbmcgaW5pdGlhbFZhbHVlKSB7CisJCXJldHVybiBVUkkuY3JlYXRlVVJJKGluaXRpYWxWYWx1ZSk7CisJfSAvLyBjcmVhdGVVUklGcm9tU3RyaW5nCisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCXB1YmxpYyBTdHJpbmcgY29udmVydFVSSVRvU3RyaW5nKEVEYXRhVHlwZSBlRGF0YVR5cGUsIE9iamVjdCBpbnN0YW5jZVZhbHVlKSB7CisJCXJldHVybiBpbnN0YW5jZVZhbHVlLnRvU3RyaW5nKCk7CisJfSAvLyBjb252ZXJ0VVJJVG9TdHJpbmcKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlwdWJsaWMgUmFuZG9tIGNyZWF0ZVJhbmRvbUZyb21TdHJpbmcoRURhdGFUeXBlIGVEYXRhVHlwZSwgU3RyaW5nIGluaXRpYWxWYWx1ZSkgeworCQlyZXR1cm4gbmV3IFJhbmRvbShMb25nLnBhcnNlTG9uZyhpbml0aWFsVmFsdWUpKTsKKwl9IC8vIGNyZWF0ZVJhbmRvbUZyb21TdHJpbmcKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBTdHJpbmcgY29udmVydFJhbmRvbVRvU3RyaW5nKEVEYXRhVHlwZSBlRGF0YVR5cGUsIE9iamVjdCBpbnN0YW5jZVZhbHVlKSB7CisJCXJldHVybiBzdXBlci5jb252ZXJ0VG9TdHJpbmcoZURhdGFUeXBlLCBpbnN0YW5jZVZhbHVlKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgU3RhbmRhcmRQYWNrYWdlIGdldFN0YW5kYXJkUGFja2FnZSgpIHsKKwkJcmV0dXJuIChTdGFuZGFyZFBhY2thZ2UpZ2V0RVBhY2thZ2UoKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBkZXByZWNhdGVkCisJICogQGdlbmVyYXRlZAorCSAqLworCUBEZXByZWNhdGVkCisJcHVibGljIHN0YXRpYyBTdGFuZGFyZFBhY2thZ2UgZ2V0UGFja2FnZSgpIHsKKwkJcmV0dXJuIFN0YW5kYXJkUGFja2FnZS5lSU5TVEFOQ0U7CisJfQorCit9IC8vU3RhbmRhcmRGYWN0b3J5SW1wbApkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9zdGFuZGFyZC9pbXBsL1N0YW5kYXJkSW5mZWN0b3JJbXBsLmphdmEgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3N0YW5kYXJkL2ltcGwvU3RhbmRhcmRJbmZlY3RvckltcGwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMGI2NDQzCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9zdGFuZGFyZC9pbXBsL1N0YW5kYXJkSW5mZWN0b3JJbXBsLmphdmEKQEAgLTAsMCArMSw1MiBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuaW1wbDsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZEluZmVjdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZFBhY2thZ2U7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPkluZmVjdG9yPC9iPjwvZW0+Jy4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogPHA+CisgKiA8L3A+CisgKgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgYWJzdHJhY3QgY2xhc3MgU3RhbmRhcmRJbmZlY3RvckltcGwgZXh0ZW5kcyBJbmZlY3RvckltcGwgaW1wbGVtZW50cworCQlTdGFuZGFyZEluZmVjdG9yIHsKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIFN0YW5kYXJkSW5mZWN0b3JJbXBsKCkgeworCQlzdXBlcigpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgRUNsYXNzIGVTdGF0aWNDbGFzcygpIHsKKwkJcmV0dXJuIFN0YW5kYXJkUGFja2FnZS5MaXRlcmFscy5TVEFOREFSRF9JTkZFQ1RPUjsKKwl9CisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5pbXBsLk5vZGVEZWNvcmF0b3JJbXBsI3NhbmUoKQorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBib29sZWFuIHNhbmUoKSB7CisJCXJldHVybiBzdXBlci5zYW5lKCk7CisJfQorfSAvLyBTdGFuZGFyZEluZmVjdG9ySW1wbApkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9zdGFuZGFyZC9pbXBsL1N0YW5kYXJkUGFja2FnZUltcGwuamF2YSBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvc3RhbmRhcmQvaW1wbC9TdGFuZGFyZFBhY2thZ2VJbXBsLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTJjMDZlMAotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvc3RhbmRhcmQvaW1wbC9TdGFuZGFyZFBhY2thZ2VJbXBsLmphdmEKQEAgLTAsMCArMSwxNDcwIEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5pbXBsOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA2LCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGphdmEudXRpbC5SYW5kb207CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuRUxpc3Q7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVBdHRyaWJ1dGU7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzczsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRURhdGFUeXBlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FR2VuZXJpY1R5cGU7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPcGVyYXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FUmVmZXJlbmNlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FY29yZVBhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLmltcGwuRVBhY2thZ2VJbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uQ29tbW9uUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLlNhbml0eUNoZWNrZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkdyYXBoUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubG9nZ2VyLkxvZ2dlclBhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkludGVncmF0aW9uTGFiZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkludGVncmF0aW9uTGFiZWxWYWx1ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuSW50ZWdyYXRpb25EZWNvcmF0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLk1vZGVsUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuTW9kaWZpZXJQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUuUHJlZGljYXRlUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5MYWJlbHNQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5wcmVkaWNhdGVzLmRpc2Vhc2VwcmVkaWNhdGVzLkRpc2Vhc2VwcmVkaWNhdGVzUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMucHJlZGljYXRlcy5kaXNlYXNlcHJlZGljYXRlcy5pbXBsLkRpc2Vhc2VwcmVkaWNhdGVzUGFja2FnZUltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLkRldGVybWluaXN0aWNTRUlSRGlzZWFzZU1vZGVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5EZXRlcm1pbmlzdGljU0lEaXNlYXNlTW9kZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLkRldGVybWluaXN0aWNTSVJEaXNlYXNlTW9kZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLkRpc2Vhc2VNb2RlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuRGlzZWFzZU1vZGVsTGFiZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLkRpc2Vhc2VNb2RlbExhYmVsVmFsdWU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLkluZmVjdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5JbmZlY3Rvcklub2N1bGF0b3JDb2xsZWN0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5Jbml0aWFsaXplcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU0VJUkxhYmVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TRUlSTGFiZWxWYWx1ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU0lJbmZlY3RvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU0lMYWJlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU0lMYWJlbFZhbHVlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TSVJJbm9jdWxhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TSVJMYWJlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU0lSTGFiZWxWYWx1ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmREaXNlYXNlTW9kZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmRGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZEluZmVjdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZFBhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkU3RvY2hhc3RpY0Rpc2Vhc2VNb2RlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RvY2hhc3RpY0Rpc2Vhc2VNb2RlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RvY2hhc3RpY1BvaXNzb25TRUlSRGlzZWFzZU1vZGVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdG9jaGFzdGljUG9pc3NvblNJRGlzZWFzZU1vZGVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdG9jaGFzdGljUG9pc3NvblNJUkRpc2Vhc2VNb2RlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RvY2hhc3RpY1NFSVJEaXNlYXNlTW9kZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlN0b2NoYXN0aWNTSURpc2Vhc2VNb2RlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RvY2hhc3RpY1NJUkRpc2Vhc2VNb2RlbDsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIG1vZGVsIDxiPlBhY2thZ2U8L2I+LgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBTdGFuZGFyZFBhY2thZ2VJbXBsIGV4dGVuZHMgRVBhY2thZ2VJbXBsIGltcGxlbWVudHMgU3RhbmRhcmRQYWNrYWdlIHsKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcml2YXRlIEVDbGFzcyBkZXRlcm1pbmlzdGljU0VJUkRpc2Vhc2VNb2RlbEVDbGFzcyA9IG51bGw7CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcml2YXRlIEVDbGFzcyBkZXRlcm1pbmlzdGljU0lEaXNlYXNlTW9kZWxFQ2xhc3MgPSBudWxsOworCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJpdmF0ZSBFQ2xhc3MgZGV0ZXJtaW5pc3RpY1NJUkRpc2Vhc2VNb2RlbEVDbGFzcyA9IG51bGw7CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcml2YXRlIEVDbGFzcyBkaXNlYXNlTW9kZWxFQ2xhc3MgPSBudWxsOworCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJpdmF0ZSBFQ2xhc3MgZGlzZWFzZU1vZGVsTGFiZWxFQ2xhc3MgPSBudWxsOworCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJpdmF0ZSBFQ2xhc3MgZGlzZWFzZU1vZGVsTGFiZWxWYWx1ZUVDbGFzcyA9IG51bGw7CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcml2YXRlIEVDbGFzcyBpbmZlY3RvckVDbGFzcyA9IG51bGw7CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcml2YXRlIEVDbGFzcyBzZWlyRUNsYXNzID0gbnVsbDsKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByaXZhdGUgRUNsYXNzIHNlaXJMYWJlbEVDbGFzcyA9IG51bGw7CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcml2YXRlIEVDbGFzcyBzZWlyTGFiZWxWYWx1ZUVDbGFzcyA9IG51bGw7CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcml2YXRlIEVDbGFzcyBzaUVDbGFzcyA9IG51bGw7CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcml2YXRlIEVDbGFzcyBzaUluZmVjdG9yRUNsYXNzID0gbnVsbDsKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByaXZhdGUgRUNsYXNzIHNpTGFiZWxFQ2xhc3MgPSBudWxsOworCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJpdmF0ZSBFQ2xhc3Mgc2lMYWJlbFZhbHVlRUNsYXNzID0gbnVsbDsKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByaXZhdGUgRUNsYXNzIHNpckVDbGFzcyA9IG51bGw7CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcml2YXRlIEVDbGFzcyBzaXJMYWJlbEVDbGFzcyA9IG51bGw7CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcml2YXRlIEVDbGFzcyBzaXJMYWJlbFZhbHVlRUNsYXNzID0gbnVsbDsKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByaXZhdGUgRUNsYXNzIHN0YW5kYXJkRGlzZWFzZU1vZGVsRUNsYXNzID0gbnVsbDsKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByaXZhdGUgRUNsYXNzIHN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWxFQ2xhc3MgPSBudWxsOworCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJpdmF0ZSBFQ2xhc3Mgc3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbFZhbHVlRUNsYXNzID0gbnVsbDsKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByaXZhdGUgRUNsYXNzIHN0YW5kYXJkSW5mZWN0b3JFQ2xhc3MgPSBudWxsOworCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJpdmF0ZSBFQ2xhc3Mgc3RvY2hhc3RpY1NFSVJEaXNlYXNlTW9kZWxFQ2xhc3MgPSBudWxsOworCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJpdmF0ZSBFQ2xhc3Mgc3RvY2hhc3RpY1NJRGlzZWFzZU1vZGVsRUNsYXNzID0gbnVsbDsKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByaXZhdGUgRUNsYXNzIHN0b2NoYXN0aWNTSVJEaXNlYXNlTW9kZWxFQ2xhc3MgPSBudWxsOworCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJpdmF0ZSBFQ2xhc3Mgc3RvY2hhc3RpY0Rpc2Vhc2VNb2RlbEVDbGFzcyA9IG51bGw7CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcml2YXRlIEVDbGFzcyBzdGFuZGFyZFN0b2NoYXN0aWNEaXNlYXNlTW9kZWxFQ2xhc3MgPSBudWxsOworCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJpdmF0ZSBFQ2xhc3Mgc2lySW5vY3VsYXRvckVDbGFzcyA9IG51bGw7CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcml2YXRlIEVDbGFzcyBzdG9jaGFzdGljUG9pc3NvblNJRGlzZWFzZU1vZGVsRUNsYXNzID0gbnVsbDsKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByaXZhdGUgRUNsYXNzIHN0b2NoYXN0aWNQb2lzc29uU0lSRGlzZWFzZU1vZGVsRUNsYXNzID0gbnVsbDsKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByaXZhdGUgRUNsYXNzIHN0b2NoYXN0aWNQb2lzc29uU0VJUkRpc2Vhc2VNb2RlbEVDbGFzcyA9IG51bGw7CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcml2YXRlIEVDbGFzcyBpbmZlY3Rvcklub2N1bGF0b3JDb2xsZWN0aW9uRUNsYXNzID0gbnVsbDsKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByaXZhdGUgRUNsYXNzIGluaXRpYWxpemVyRUNsYXNzID0gbnVsbDsKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByaXZhdGUgRURhdGFUeXBlIHJhbmRvbUVEYXRhVHlwZSA9IG51bGw7CisKKwkvKioKKwkgKiBDcmVhdGVzIGFuIGluc3RhbmNlIG9mIHRoZSBtb2RlbCA8Yj5QYWNrYWdlPC9iPiwgcmVnaXN0ZXJlZCB3aXRoCisJICoge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FUGFja2FnZS5SZWdpc3RyeSBFUGFja2FnZS5SZWdpc3RyeX0gYnkgdGhlIHBhY2thZ2UKKwkgKiBwYWNrYWdlIFVSSSB2YWx1ZS4KKwkgKiA8cD5Ob3RlOiB0aGUgY29ycmVjdCB3YXkgdG8gY3JlYXRlIHRoZSBwYWNrYWdlIGlzIHZpYSB0aGUgc3RhdGljCisJICogZmFjdG9yeSBtZXRob2Qge0BsaW5rICNpbml0IGluaXQoKX0sIHdoaWNoIGFsc28gcGVyZm9ybXMKKwkgKiBpbml0aWFsaXphdGlvbiBvZiB0aGUgcGFja2FnZSwgb3IgcmV0dXJucyB0aGUgcmVnaXN0ZXJlZCBwYWNrYWdlLAorCSAqIGlmIG9uZSBhbHJlYWR5IGV4aXN0cy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVQYWNrYWdlLlJlZ2lzdHJ5CisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmRQYWNrYWdlI2VOU19VUkkKKwkgKiBAc2VlICNpbml0KCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJpdmF0ZSBTdGFuZGFyZFBhY2thZ2VJbXBsKCkgeworCQlzdXBlcihlTlNfVVJJLCBTdGFuZGFyZEZhY3RvcnkuZUlOU1RBTkNFKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcml2YXRlIHN0YXRpYyBib29sZWFuIGlzSW5pdGVkID0gZmFsc2U7CisKKwkvKioKKwkgKiBDcmVhdGVzLCByZWdpc3RlcnMsIGFuZCBpbml0aWFsaXplcyB0aGUgPGI+UGFja2FnZTwvYj4gZm9yIHRoaXMgbW9kZWwsIGFuZCBmb3IgYW55IG90aGVycyB1cG9uIHdoaWNoIGl0IGRlcGVuZHMuCisJICogCisJICogPHA+VGhpcyBtZXRob2QgaXMgdXNlZCB0byBpbml0aWFsaXplIHtAbGluayBTdGFuZGFyZFBhY2thZ2UjZUlOU1RBTkNFfSB3aGVuIHRoYXQgZmllbGQgaXMgYWNjZXNzZWQuCisJICogQ2xpZW50cyBzaG91bGQgbm90IGludm9rZSBpdCBkaXJlY3RseS4gSW5zdGVhZCwgdGhleSBzaG91bGQgc2ltcGx5IGFjY2VzcyB0aGF0IGZpZWxkIHRvIG9idGFpbiB0aGUgcGFja2FnZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI2VOU19VUkkKKwkgKiBAc2VlICNjcmVhdGVQYWNrYWdlQ29udGVudHMoKQorCSAqIEBzZWUgI2luaXRpYWxpemVQYWNrYWdlQ29udGVudHMoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgc3RhdGljIFN0YW5kYXJkUGFja2FnZSBpbml0KCkgeworCQlpZiAoaXNJbml0ZWQpIHJldHVybiAoU3RhbmRhcmRQYWNrYWdlKUVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVQYWNrYWdlKFN0YW5kYXJkUGFja2FnZS5lTlNfVVJJKTsKKworCQkvLyBPYnRhaW4gb3IgY3JlYXRlIGFuZCByZWdpc3RlciBwYWNrYWdlCisJCVN0YW5kYXJkUGFja2FnZUltcGwgdGhlU3RhbmRhcmRQYWNrYWdlID0gKFN0YW5kYXJkUGFja2FnZUltcGwpKEVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldChlTlNfVVJJKSBpbnN0YW5jZW9mIFN0YW5kYXJkUGFja2FnZUltcGwgPyBFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXQoZU5TX1VSSSkgOiBuZXcgU3RhbmRhcmRQYWNrYWdlSW1wbCgpKTsKKworCQlpc0luaXRlZCA9IHRydWU7CisKKwkJLy8gSW5pdGlhbGl6ZSBzaW1wbGUgZGVwZW5kZW5jaWVzCisJCVByZWRpY2F0ZVBhY2thZ2UuZUlOU1RBTkNFLmVDbGFzcygpOworCQlvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmRQYWNrYWdlLmVJTlNUQU5DRS5lQ2xhc3MoKTsKKwkJTG9nZ2VyUGFja2FnZS5lSU5TVEFOQ0UuZUNsYXNzKCk7CisKKwkJLy8gT2J0YWluIG9yIGNyZWF0ZSBhbmQgcmVnaXN0ZXIgaW50ZXJkZXBlbmRlbmNpZXMKKwkJRGlzZWFzZXByZWRpY2F0ZXNQYWNrYWdlSW1wbCB0aGVEaXNlYXNlcHJlZGljYXRlc1BhY2thZ2UgPSAoRGlzZWFzZXByZWRpY2F0ZXNQYWNrYWdlSW1wbCkoRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RVBhY2thZ2UoRGlzZWFzZXByZWRpY2F0ZXNQYWNrYWdlLmVOU19VUkkpIGluc3RhbmNlb2YgRGlzZWFzZXByZWRpY2F0ZXNQYWNrYWdlSW1wbCA/IEVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVQYWNrYWdlKERpc2Vhc2VwcmVkaWNhdGVzUGFja2FnZS5lTlNfVVJJKSA6IERpc2Vhc2VwcmVkaWNhdGVzUGFja2FnZS5lSU5TVEFOQ0UpOworCisJCS8vIENyZWF0ZSBwYWNrYWdlIG1ldGEtZGF0YSBvYmplY3RzCisJCXRoZVN0YW5kYXJkUGFja2FnZS5jcmVhdGVQYWNrYWdlQ29udGVudHMoKTsKKwkJdGhlRGlzZWFzZXByZWRpY2F0ZXNQYWNrYWdlLmNyZWF0ZVBhY2thZ2VDb250ZW50cygpOworCisJCS8vIEluaXRpYWxpemUgY3JlYXRlZCBtZXRhLWRhdGEKKwkJdGhlU3RhbmRhcmRQYWNrYWdlLmluaXRpYWxpemVQYWNrYWdlQ29udGVudHMoKTsKKwkJdGhlRGlzZWFzZXByZWRpY2F0ZXNQYWNrYWdlLmluaXRpYWxpemVQYWNrYWdlQ29udGVudHMoKTsKKworCQkvLyBNYXJrIG1ldGEtZGF0YSB0byBpbmRpY2F0ZSBpdCBjYW4ndCBiZSBjaGFuZ2VkCisJCXRoZVN0YW5kYXJkUGFja2FnZS5mcmVlemUoKTsKKworICAKKwkJLy8gVXBkYXRlIHRoZSByZWdpc3RyeSBhbmQgcmV0dXJuIHRoZSBwYWNrYWdlCisJCUVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLnB1dChTdGFuZGFyZFBhY2thZ2UuZU5TX1VSSSwgdGhlU3RhbmRhcmRQYWNrYWdlKTsKKwkJcmV0dXJuIHRoZVN0YW5kYXJkUGFja2FnZTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUNsYXNzIGdldERldGVybWluaXN0aWNTRUlSRGlzZWFzZU1vZGVsKCkgeworCQlyZXR1cm4gZGV0ZXJtaW5pc3RpY1NFSVJEaXNlYXNlTW9kZWxFQ2xhc3M7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVDbGFzcyBnZXREZXRlcm1pbmlzdGljU0lEaXNlYXNlTW9kZWwoKSB7CisJCXJldHVybiBkZXRlcm1pbmlzdGljU0lEaXNlYXNlTW9kZWxFQ2xhc3M7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVDbGFzcyBnZXREZXRlcm1pbmlzdGljU0lSRGlzZWFzZU1vZGVsKCkgeworCQlyZXR1cm4gZGV0ZXJtaW5pc3RpY1NJUkRpc2Vhc2VNb2RlbEVDbGFzczsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUNsYXNzIGdldERpc2Vhc2VNb2RlbCgpIHsKKwkJcmV0dXJuIGRpc2Vhc2VNb2RlbEVDbGFzczsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUF0dHJpYnV0ZSBnZXREaXNlYXNlTW9kZWxfUG9wdWxhdGlvbklkZW50aWZpZXIoKSB7CisJCXJldHVybiAoRUF0dHJpYnV0ZSlkaXNlYXNlTW9kZWxFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgwKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUF0dHJpYnV0ZSBnZXREaXNlYXNlTW9kZWxfVGltZVBlcmlvZCgpIHsKKwkJcmV0dXJuIChFQXR0cmlidXRlKWRpc2Vhc2VNb2RlbEVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDEpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQXR0cmlidXRlIGdldERpc2Vhc2VNb2RlbF9EaXNlYXNlTmFtZSgpIHsKKwkJcmV0dXJuIChFQXR0cmlidXRlKWRpc2Vhc2VNb2RlbEVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDIpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQXR0cmlidXRlIGdldERpc2Vhc2VNb2RlbF9GaW5pdGVEaWZmZXJlbmNlKCkgeworCQlyZXR1cm4gKEVBdHRyaWJ1dGUpZGlzZWFzZU1vZGVsRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMyk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVBdHRyaWJ1dGUgZ2V0RGlzZWFzZU1vZGVsX0ZyZXF1ZW5jeURlcGVuZGVudCgpIHsKKwkJcmV0dXJuIChFQXR0cmlidXRlKWRpc2Vhc2VNb2RlbEVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDQpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQ2xhc3MgZ2V0RGlzZWFzZU1vZGVsTGFiZWwoKSB7CisJCXJldHVybiBkaXNlYXNlTW9kZWxMYWJlbEVDbGFzczsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRVJlZmVyZW5jZSBnZXREaXNlYXNlTW9kZWxMYWJlbF9Qb3B1bGF0aW9uTGFiZWwoKSB7CisJCXJldHVybiAoRVJlZmVyZW5jZSlkaXNlYXNlTW9kZWxMYWJlbEVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDApOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFUmVmZXJlbmNlIGdldERpc2Vhc2VNb2RlbExhYmVsX1BvcHVsYXRpb25Nb2RlbExhYmVsKCkgeworCQlyZXR1cm4gKEVSZWZlcmVuY2UpZGlzZWFzZU1vZGVsTGFiZWxFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgxKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUNsYXNzIGdldERpc2Vhc2VNb2RlbExhYmVsVmFsdWUoKSB7CisJCXJldHVybiBkaXNlYXNlTW9kZWxMYWJlbFZhbHVlRUNsYXNzOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQXR0cmlidXRlIGdldERpc2Vhc2VNb2RlbExhYmVsVmFsdWVfUG9wdWxhdGlvbkNvdW50KCkgeworCQlyZXR1cm4gKEVBdHRyaWJ1dGUpZGlzZWFzZU1vZGVsTGFiZWxWYWx1ZUVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDApOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQ2xhc3MgZ2V0SW5mZWN0b3IoKSB7CisJCXJldHVybiBpbmZlY3RvckVDbGFzczsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRVJlZmVyZW5jZSBnZXRJbmZlY3Rvcl9EaXNlYXNlTW9kZWwoKSB7CisJCXJldHVybiAoRVJlZmVyZW5jZSlpbmZlY3RvckVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDApOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQXR0cmlidXRlIGdldEluZmVjdG9yX1RhcmdldFVSSSgpIHsKKwkJcmV0dXJuIChFQXR0cmlidXRlKWluZmVjdG9yRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVBdHRyaWJ1dGUgZ2V0SW5mZWN0b3JfRGlzZWFzZU5hbWUoKSB7CisJCXJldHVybiAoRUF0dHJpYnV0ZSlpbmZlY3RvckVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDIpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQXR0cmlidXRlIGdldEluZmVjdG9yX1RhcmdldElTT0tleSgpIHsKKwkJcmV0dXJuIChFQXR0cmlidXRlKWluZmVjdG9yRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMyk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVSZWZlcmVuY2UgZ2V0SW5mZWN0b3JfTGFiZWxzVG9JbmZlY3QoKSB7CisJCXJldHVybiAoRVJlZmVyZW5jZSlpbmZlY3RvckVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDQpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQXR0cmlidXRlIGdldEluZmVjdG9yX1BvcHVsYXRpb25JZGVudGlmaWVyKCkgeworCQlyZXR1cm4gKEVBdHRyaWJ1dGUpaW5mZWN0b3JFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCg1KTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUF0dHJpYnV0ZSBnZXRJbmZlY3Rvcl9JbmZlY3RQZXJjZW50YWdlKCkgeworCQlyZXR1cm4gKEVBdHRyaWJ1dGUpaW5mZWN0b3JFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCg2KTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUF0dHJpYnV0ZSBnZXRJbmZlY3Rvcl9UYXJnZXRGZWF0dXJlKCkgeworCQlyZXR1cm4gKEVBdHRyaWJ1dGUpaW5mZWN0b3JFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCg3KTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUNsYXNzIGdldFNFSVIoKSB7CisJCXJldHVybiBzZWlyRUNsYXNzOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQXR0cmlidXRlIGdldFNFSVJfSW5jdWJhdGlvblJhdGUoKSB7CisJCXJldHVybiAoRUF0dHJpYnV0ZSlzZWlyRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVDbGFzcyBnZXRTRUlSTGFiZWwoKSB7CisJCXJldHVybiBzZWlyTGFiZWxFQ2xhc3M7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVDbGFzcyBnZXRTRUlSTGFiZWxWYWx1ZSgpIHsKKwkJcmV0dXJuIHNlaXJMYWJlbFZhbHVlRUNsYXNzOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQXR0cmlidXRlIGdldFNFSVJMYWJlbFZhbHVlX0UoKSB7CisJCXJldHVybiAoRUF0dHJpYnV0ZSlzZWlyTGFiZWxWYWx1ZUVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDApOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQ2xhc3MgZ2V0U0koKSB7CisJCXJldHVybiBzaUVDbGFzczsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUF0dHJpYnV0ZSBnZXRTSV9UcmFuc21pc3Npb25SYXRlKCkgeworCQlyZXR1cm4gKEVBdHRyaWJ1dGUpc2lFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgwKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUF0dHJpYnV0ZSBnZXRTSV9Ob25MaW5lYXJpdHlDb2VmZmljaWVudCgpIHsKKwkJcmV0dXJuIChFQXR0cmlidXRlKXNpRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVBdHRyaWJ1dGUgZ2V0U0lfUmVjb3ZlcnlSYXRlKCkgeworCQlyZXR1cm4gKEVBdHRyaWJ1dGUpc2lFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgyKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUF0dHJpYnV0ZSBnZXRTSV9JbmZlY3Rpb3VzTW9ydGFsaXR5UmF0ZSgpIHsKKwkJcmV0dXJuIChFQXR0cmlidXRlKXNpRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMyk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVDbGFzcyBnZXRTSUluZmVjdG9yKCkgeworCQlyZXR1cm4gc2lJbmZlY3RvckVDbGFzczsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUF0dHJpYnV0ZSBnZXRTSUluZmVjdG9yX0luZmVjdGlvdXNDb3VudCgpIHsKKwkJcmV0dXJuIChFQXR0cmlidXRlKXNpSW5mZWN0b3JFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgwKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUNsYXNzIGdldFNJTGFiZWwoKSB7CisJCXJldHVybiBzaUxhYmVsRUNsYXNzOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQ2xhc3MgZ2V0U0lMYWJlbFZhbHVlKCkgeworCQlyZXR1cm4gc2lMYWJlbFZhbHVlRUNsYXNzOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQXR0cmlidXRlIGdldFNJTGFiZWxWYWx1ZV9JKCkgeworCQlyZXR1cm4gKEVBdHRyaWJ1dGUpc2lMYWJlbFZhbHVlRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVDbGFzcyBnZXRTSVIoKSB7CisJCXJldHVybiBzaXJFQ2xhc3M7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVBdHRyaWJ1dGUgZ2V0U0lSX0ltbXVuaXR5TG9zc1JhdGUoKSB7CisJCXJldHVybiAoRUF0dHJpYnV0ZSlzaXJFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgwKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUNsYXNzIGdldFNJUkxhYmVsKCkgeworCQlyZXR1cm4gc2lyTGFiZWxFQ2xhc3M7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVDbGFzcyBnZXRTSVJMYWJlbFZhbHVlKCkgeworCQlyZXR1cm4gc2lyTGFiZWxWYWx1ZUVDbGFzczsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUF0dHJpYnV0ZSBnZXRTSVJMYWJlbFZhbHVlX1IoKSB7CisJCXJldHVybiAoRUF0dHJpYnV0ZSlzaXJMYWJlbFZhbHVlRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVDbGFzcyBnZXRTdGFuZGFyZERpc2Vhc2VNb2RlbCgpIHsKKwkJcmV0dXJuIHN0YW5kYXJkRGlzZWFzZU1vZGVsRUNsYXNzOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQXR0cmlidXRlIGdldFN0YW5kYXJkRGlzZWFzZU1vZGVsX1JlZmVyZW5jZVBvcHVsYXRpb25EZW5zaXR5KCkgeworCQlyZXR1cm4gKEVBdHRyaWJ1dGUpc3RhbmRhcmREaXNlYXNlTW9kZWxFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgwKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUF0dHJpYnV0ZSBnZXRTdGFuZGFyZERpc2Vhc2VNb2RlbF9Sb2FkTmV0d29ya0luZmVjdGlvdXNQcm9wb3J0aW9uKCkgeworCQlyZXR1cm4gKEVBdHRyaWJ1dGUpc3RhbmRhcmREaXNlYXNlTW9kZWxFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgxKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUF0dHJpYnV0ZSBnZXRTdGFuZGFyZERpc2Vhc2VNb2RlbF9DaGFyYWN0ZXJpc3RpY01peGluZ0Rpc3RhbmNlKCkgeworCQlyZXR1cm4gKEVBdHRyaWJ1dGUpc3RhbmRhcmREaXNlYXNlTW9kZWxFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgyKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUNsYXNzIGdldFN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWwoKSB7CisJCXJldHVybiBzdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsRUNsYXNzOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQ2xhc3MgZ2V0U3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbFZhbHVlKCkgeworCQlyZXR1cm4gc3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbFZhbHVlRUNsYXNzOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQXR0cmlidXRlIGdldFN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZV9TKCkgeworCQlyZXR1cm4gKEVBdHRyaWJ1dGUpc3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbFZhbHVlRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVBdHRyaWJ1dGUgZ2V0U3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbFZhbHVlX0luY2lkZW5jZSgpIHsKKwkJcmV0dXJuIChFQXR0cmlidXRlKXN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZUVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDEpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQXR0cmlidXRlIGdldFN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZV9EaXNlYXNlRGVhdGhzKCkgeworCQlyZXR1cm4gKEVBdHRyaWJ1dGUpc3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbFZhbHVlRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMik7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVDbGFzcyBnZXRTdGFuZGFyZEluZmVjdG9yKCkgeworCQlyZXR1cm4gc3RhbmRhcmRJbmZlY3RvckVDbGFzczsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUNsYXNzIGdldFN0b2NoYXN0aWNTRUlSRGlzZWFzZU1vZGVsKCkgeworCQlyZXR1cm4gc3RvY2hhc3RpY1NFSVJEaXNlYXNlTW9kZWxFQ2xhc3M7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVDbGFzcyBnZXRTdG9jaGFzdGljU0lEaXNlYXNlTW9kZWwoKSB7CisJCXJldHVybiBzdG9jaGFzdGljU0lEaXNlYXNlTW9kZWxFQ2xhc3M7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVDbGFzcyBnZXRTdG9jaGFzdGljU0lSRGlzZWFzZU1vZGVsKCkgeworCQlyZXR1cm4gc3RvY2hhc3RpY1NJUkRpc2Vhc2VNb2RlbEVDbGFzczsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUNsYXNzIGdldFN0b2NoYXN0aWNEaXNlYXNlTW9kZWwoKSB7CisJCXJldHVybiBzdG9jaGFzdGljRGlzZWFzZU1vZGVsRUNsYXNzOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQXR0cmlidXRlIGdldFN0b2NoYXN0aWNEaXNlYXNlTW9kZWxfU2VlZCgpIHsKKwkJcmV0dXJuIChFQXR0cmlidXRlKXN0b2NoYXN0aWNEaXNlYXNlTW9kZWxFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgwKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUF0dHJpYnV0ZSBnZXRTdG9jaGFzdGljRGlzZWFzZU1vZGVsX1JhbmRvbUdlbmVyYXRvcigpIHsKKwkJcmV0dXJuIChFQXR0cmlidXRlKXN0b2NoYXN0aWNEaXNlYXNlTW9kZWxFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgxKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUNsYXNzIGdldFN0YW5kYXJkU3RvY2hhc3RpY0Rpc2Vhc2VNb2RlbCgpIHsKKwkJcmV0dXJuIHN0YW5kYXJkU3RvY2hhc3RpY0Rpc2Vhc2VNb2RlbEVDbGFzczsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUF0dHJpYnV0ZSBnZXRTdGFuZGFyZFN0b2NoYXN0aWNEaXNlYXNlTW9kZWxfR2FpbigpIHsKKwkJcmV0dXJuIChFQXR0cmlidXRlKXN0YW5kYXJkU3RvY2hhc3RpY0Rpc2Vhc2VNb2RlbEVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDApOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQ2xhc3MgZ2V0U0lSSW5vY3VsYXRvcigpIHsKKwkJcmV0dXJuIHNpcklub2N1bGF0b3JFQ2xhc3M7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVBdHRyaWJ1dGUgZ2V0U0lSSW5vY3VsYXRvcl9Jbm9jdWxhdGVkUGVyY2VudGFnZSgpIHsKKwkJcmV0dXJuIChFQXR0cmlidXRlKXNpcklub2N1bGF0b3JFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgwKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUF0dHJpYnV0ZSBnZXRTSVJJbm9jdWxhdG9yX0lub2N1bGF0ZVBlcmNlbnRhZ2UoKSB7CisJCXJldHVybiAoRUF0dHJpYnV0ZSlzaXJJbm9jdWxhdG9yRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVDbGFzcyBnZXRTdG9jaGFzdGljUG9pc3NvblNJRGlzZWFzZU1vZGVsKCkgeworCQlyZXR1cm4gc3RvY2hhc3RpY1BvaXNzb25TSURpc2Vhc2VNb2RlbEVDbGFzczsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUNsYXNzIGdldFN0b2NoYXN0aWNQb2lzc29uU0lSRGlzZWFzZU1vZGVsKCkgeworCQlyZXR1cm4gc3RvY2hhc3RpY1BvaXNzb25TSVJEaXNlYXNlTW9kZWxFQ2xhc3M7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVDbGFzcyBnZXRTdG9jaGFzdGljUG9pc3NvblNFSVJEaXNlYXNlTW9kZWwoKSB7CisJCXJldHVybiBzdG9jaGFzdGljUG9pc3NvblNFSVJEaXNlYXNlTW9kZWxFQ2xhc3M7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVDbGFzcyBnZXRJbmZlY3Rvcklub2N1bGF0b3JDb2xsZWN0aW9uKCkgeworCQlyZXR1cm4gaW5mZWN0b3JJbm9jdWxhdG9yQ29sbGVjdGlvbkVDbGFzczsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRVJlZmVyZW5jZSBnZXRJbmZlY3Rvcklub2N1bGF0b3JDb2xsZWN0aW9uX0xpc3QoKSB7CisJCXJldHVybiAoRVJlZmVyZW5jZSlpbmZlY3Rvcklub2N1bGF0b3JDb2xsZWN0aW9uRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVBdHRyaWJ1dGUgZ2V0SW5mZWN0b3JJbm9jdWxhdG9yQ29sbGVjdGlvbl9JbXBvcnRGb2xkZXIoKSB7CisJCXJldHVybiAoRUF0dHJpYnV0ZSlpbmZlY3Rvcklub2N1bGF0b3JDb2xsZWN0aW9uRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVDbGFzcyBnZXRJbml0aWFsaXplcigpIHsKKwkJcmV0dXJuIGluaXRpYWxpemVyRUNsYXNzOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQXR0cmlidXRlIGdldEluaXRpYWxpemVyX0Rpc2Vhc2VOYW1lKCkgeworCQlyZXR1cm4gKEVBdHRyaWJ1dGUpaW5pdGlhbGl6ZXJFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgwKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUF0dHJpYnV0ZSBnZXRJbml0aWFsaXplcl9UYXJnZXRJU09LZXkoKSB7CisJCXJldHVybiAoRUF0dHJpYnV0ZSlpbml0aWFsaXplckVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDEpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQXR0cmlidXRlIGdldEluaXRpYWxpemVyX1RhcmdldFVSSSgpIHsKKwkJcmV0dXJuIChFQXR0cmlidXRlKWluaXRpYWxpemVyRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMik7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVBdHRyaWJ1dGUgZ2V0SW5pdGlhbGl6ZXJfUG9wdWxhdGlvbklkZW50aWZpZXIoKSB7CisJCXJldHVybiAoRUF0dHJpYnV0ZSlpbml0aWFsaXplckVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDMpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQXR0cmlidXRlIGdldEluaXRpYWxpemVyX0NvbXBhcnRtZW50cygpIHsKKwkJcmV0dXJuIChFQXR0cmlidXRlKWluaXRpYWxpemVyRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoNCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVBdHRyaWJ1dGUgZ2V0SW5pdGlhbGl6ZXJfQ29tcGFydG1lbnRWYWx1ZXMoKSB7CisJCXJldHVybiAoRUF0dHJpYnV0ZSlpbml0aWFsaXplckVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDUpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQXR0cmlidXRlIGdldEluaXRpYWxpemVyX1VzZUZyYWN0aW9ucygpIHsKKwkJcmV0dXJuIChFQXR0cmlidXRlKWluaXRpYWxpemVyRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoNik7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVEYXRhVHlwZSBnZXRSYW5kb20oKSB7CisJCXJldHVybiByYW5kb21FRGF0YVR5cGU7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFN0YW5kYXJkRmFjdG9yeSBnZXRTdGFuZGFyZEZhY3RvcnkoKSB7CisJCXJldHVybiAoU3RhbmRhcmRGYWN0b3J5KWdldEVGYWN0b3J5SW5zdGFuY2UoKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcml2YXRlIGJvb2xlYW4gaXNDcmVhdGVkID0gZmFsc2U7CisKKwkvKioKKwkgKiBDcmVhdGVzIHRoZSBtZXRhLW1vZGVsIG9iamVjdHMgZm9yIHRoZSBwYWNrYWdlLiAgVGhpcyBtZXRob2QgaXMKKwkgKiBndWFyZGVkIHRvIGhhdmUgbm8gYWZmZWN0IG9uIGFueSBpbnZvY2F0aW9uIGJ1dCBpdHMgZmlyc3QuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgY3JlYXRlUGFja2FnZUNvbnRlbnRzKCkgeworCQlpZiAoaXNDcmVhdGVkKSByZXR1cm47CisJCWlzQ3JlYXRlZCA9IHRydWU7CisKKwkJLy8gQ3JlYXRlIGNsYXNzZXMgYW5kIHRoZWlyIGZlYXR1cmVzCisJCWRldGVybWluaXN0aWNTRUlSRGlzZWFzZU1vZGVsRUNsYXNzID0gY3JlYXRlRUNsYXNzKERFVEVSTUlOSVNUSUNfU0VJUl9ESVNFQVNFX01PREVMKTsKKworCQlkZXRlcm1pbmlzdGljU0lEaXNlYXNlTW9kZWxFQ2xhc3MgPSBjcmVhdGVFQ2xhc3MoREVURVJNSU5JU1RJQ19TSV9ESVNFQVNFX01PREVMKTsKKworCQlkZXRlcm1pbmlzdGljU0lSRGlzZWFzZU1vZGVsRUNsYXNzID0gY3JlYXRlRUNsYXNzKERFVEVSTUlOSVNUSUNfU0lSX0RJU0VBU0VfTU9ERUwpOworCisJCWRpc2Vhc2VNb2RlbEVDbGFzcyA9IGNyZWF0ZUVDbGFzcyhESVNFQVNFX01PREVMKTsKKwkJY3JlYXRlRUF0dHJpYnV0ZShkaXNlYXNlTW9kZWxFQ2xhc3MsIERJU0VBU0VfTU9ERUxfX1BPUFVMQVRJT05fSURFTlRJRklFUik7CisJCWNyZWF0ZUVBdHRyaWJ1dGUoZGlzZWFzZU1vZGVsRUNsYXNzLCBESVNFQVNFX01PREVMX19USU1FX1BFUklPRCk7CisJCWNyZWF0ZUVBdHRyaWJ1dGUoZGlzZWFzZU1vZGVsRUNsYXNzLCBESVNFQVNFX01PREVMX19ESVNFQVNFX05BTUUpOworCQljcmVhdGVFQXR0cmlidXRlKGRpc2Vhc2VNb2RlbEVDbGFzcywgRElTRUFTRV9NT0RFTF9fRklOSVRFX0RJRkZFUkVOQ0UpOworCQljcmVhdGVFQXR0cmlidXRlKGRpc2Vhc2VNb2RlbEVDbGFzcywgRElTRUFTRV9NT0RFTF9fRlJFUVVFTkNZX0RFUEVOREVOVCk7CisKKwkJZGlzZWFzZU1vZGVsTGFiZWxFQ2xhc3MgPSBjcmVhdGVFQ2xhc3MoRElTRUFTRV9NT0RFTF9MQUJFTCk7CisJCWNyZWF0ZUVSZWZlcmVuY2UoZGlzZWFzZU1vZGVsTGFiZWxFQ2xhc3MsIERJU0VBU0VfTU9ERUxfTEFCRUxfX1BPUFVMQVRJT05fTEFCRUwpOworCQljcmVhdGVFUmVmZXJlbmNlKGRpc2Vhc2VNb2RlbExhYmVsRUNsYXNzLCBESVNFQVNFX01PREVMX0xBQkVMX19QT1BVTEFUSU9OX01PREVMX0xBQkVMKTsKKworCQlkaXNlYXNlTW9kZWxMYWJlbFZhbHVlRUNsYXNzID0gY3JlYXRlRUNsYXNzKERJU0VBU0VfTU9ERUxfTEFCRUxfVkFMVUUpOworCQljcmVhdGVFQXR0cmlidXRlKGRpc2Vhc2VNb2RlbExhYmVsVmFsdWVFQ2xhc3MsIERJU0VBU0VfTU9ERUxfTEFCRUxfVkFMVUVfX1BPUFVMQVRJT05fQ09VTlQpOworCisJCWluZmVjdG9yRUNsYXNzID0gY3JlYXRlRUNsYXNzKElORkVDVE9SKTsKKwkJY3JlYXRlRVJlZmVyZW5jZShpbmZlY3RvckVDbGFzcywgSU5GRUNUT1JfX0RJU0VBU0VfTU9ERUwpOworCQljcmVhdGVFQXR0cmlidXRlKGluZmVjdG9yRUNsYXNzLCBJTkZFQ1RPUl9fVEFSR0VUX1VSSSk7CisJCWNyZWF0ZUVBdHRyaWJ1dGUoaW5mZWN0b3JFQ2xhc3MsIElORkVDVE9SX19ESVNFQVNFX05BTUUpOworCQljcmVhdGVFQXR0cmlidXRlKGluZmVjdG9yRUNsYXNzLCBJTkZFQ1RPUl9fVEFSR0VUX0lTT19LRVkpOworCQljcmVhdGVFUmVmZXJlbmNlKGluZmVjdG9yRUNsYXNzLCBJTkZFQ1RPUl9fTEFCRUxTX1RPX0lORkVDVCk7CisJCWNyZWF0ZUVBdHRyaWJ1dGUoaW5mZWN0b3JFQ2xhc3MsIElORkVDVE9SX19QT1BVTEFUSU9OX0lERU5USUZJRVIpOworCQljcmVhdGVFQXR0cmlidXRlKGluZmVjdG9yRUNsYXNzLCBJTkZFQ1RPUl9fSU5GRUNUX1BFUkNFTlRBR0UpOworCQljcmVhdGVFQXR0cmlidXRlKGluZmVjdG9yRUNsYXNzLCBJTkZFQ1RPUl9fVEFSR0VUX0ZFQVRVUkUpOworCisJCXNlaXJFQ2xhc3MgPSBjcmVhdGVFQ2xhc3MoU0VJUik7CisJCWNyZWF0ZUVBdHRyaWJ1dGUoc2VpckVDbGFzcywgU0VJUl9fSU5DVUJBVElPTl9SQVRFKTsKKworCQlzZWlyTGFiZWxFQ2xhc3MgPSBjcmVhdGVFQ2xhc3MoU0VJUl9MQUJFTCk7CisKKwkJc2VpckxhYmVsVmFsdWVFQ2xhc3MgPSBjcmVhdGVFQ2xhc3MoU0VJUl9MQUJFTF9WQUxVRSk7CisJCWNyZWF0ZUVBdHRyaWJ1dGUoc2VpckxhYmVsVmFsdWVFQ2xhc3MsIFNFSVJfTEFCRUxfVkFMVUVfX0UpOworCisJCXNpRUNsYXNzID0gY3JlYXRlRUNsYXNzKFNJKTsKKwkJY3JlYXRlRUF0dHJpYnV0ZShzaUVDbGFzcywgU0lfX1RSQU5TTUlTU0lPTl9SQVRFKTsKKwkJY3JlYXRlRUF0dHJpYnV0ZShzaUVDbGFzcywgU0lfX05PTl9MSU5FQVJJVFlfQ09FRkZJQ0lFTlQpOworCQljcmVhdGVFQXR0cmlidXRlKHNpRUNsYXNzLCBTSV9fUkVDT1ZFUllfUkFURSk7CisJCWNyZWF0ZUVBdHRyaWJ1dGUoc2lFQ2xhc3MsIFNJX19JTkZFQ1RJT1VTX01PUlRBTElUWV9SQVRFKTsKKworCQlzaUluZmVjdG9yRUNsYXNzID0gY3JlYXRlRUNsYXNzKFNJX0lORkVDVE9SKTsKKwkJY3JlYXRlRUF0dHJpYnV0ZShzaUluZmVjdG9yRUNsYXNzLCBTSV9JTkZFQ1RPUl9fSU5GRUNUSU9VU19DT1VOVCk7CisKKwkJc2lMYWJlbEVDbGFzcyA9IGNyZWF0ZUVDbGFzcyhTSV9MQUJFTCk7CisKKwkJc2lMYWJlbFZhbHVlRUNsYXNzID0gY3JlYXRlRUNsYXNzKFNJX0xBQkVMX1ZBTFVFKTsKKwkJY3JlYXRlRUF0dHJpYnV0ZShzaUxhYmVsVmFsdWVFQ2xhc3MsIFNJX0xBQkVMX1ZBTFVFX19JKTsKKworCQlzaXJFQ2xhc3MgPSBjcmVhdGVFQ2xhc3MoU0lSKTsKKwkJY3JlYXRlRUF0dHJpYnV0ZShzaXJFQ2xhc3MsIFNJUl9fSU1NVU5JVFlfTE9TU19SQVRFKTsKKworCQlzaXJMYWJlbEVDbGFzcyA9IGNyZWF0ZUVDbGFzcyhTSVJfTEFCRUwpOworCisJCXNpckxhYmVsVmFsdWVFQ2xhc3MgPSBjcmVhdGVFQ2xhc3MoU0lSX0xBQkVMX1ZBTFVFKTsKKwkJY3JlYXRlRUF0dHJpYnV0ZShzaXJMYWJlbFZhbHVlRUNsYXNzLCBTSVJfTEFCRUxfVkFMVUVfX1IpOworCisJCXN0YW5kYXJkRGlzZWFzZU1vZGVsRUNsYXNzID0gY3JlYXRlRUNsYXNzKFNUQU5EQVJEX0RJU0VBU0VfTU9ERUwpOworCQljcmVhdGVFQXR0cmlidXRlKHN0YW5kYXJkRGlzZWFzZU1vZGVsRUNsYXNzLCBTVEFOREFSRF9ESVNFQVNFX01PREVMX19SRUZFUkVOQ0VfUE9QVUxBVElPTl9ERU5TSVRZKTsKKwkJY3JlYXRlRUF0dHJpYnV0ZShzdGFuZGFyZERpc2Vhc2VNb2RlbEVDbGFzcywgU1RBTkRBUkRfRElTRUFTRV9NT0RFTF9fUk9BRF9ORVRXT1JLX0lORkVDVElPVVNfUFJPUE9SVElPTik7CisJCWNyZWF0ZUVBdHRyaWJ1dGUoc3RhbmRhcmREaXNlYXNlTW9kZWxFQ2xhc3MsIFNUQU5EQVJEX0RJU0VBU0VfTU9ERUxfX0NIQVJBQ1RFUklTVElDX01JWElOR19ESVNUQU5DRSk7CisKKwkJc3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbEVDbGFzcyA9IGNyZWF0ZUVDbGFzcyhTVEFOREFSRF9ESVNFQVNFX01PREVMX0xBQkVMKTsKKworCQlzdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsVmFsdWVFQ2xhc3MgPSBjcmVhdGVFQ2xhc3MoU1RBTkRBUkRfRElTRUFTRV9NT0RFTF9MQUJFTF9WQUxVRSk7CisJCWNyZWF0ZUVBdHRyaWJ1dGUoc3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbFZhbHVlRUNsYXNzLCBTVEFOREFSRF9ESVNFQVNFX01PREVMX0xBQkVMX1ZBTFVFX19TKTsKKwkJY3JlYXRlRUF0dHJpYnV0ZShzdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsVmFsdWVFQ2xhc3MsIFNUQU5EQVJEX0RJU0VBU0VfTU9ERUxfTEFCRUxfVkFMVUVfX0lOQ0lERU5DRSk7CisJCWNyZWF0ZUVBdHRyaWJ1dGUoc3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbFZhbHVlRUNsYXNzLCBTVEFOREFSRF9ESVNFQVNFX01PREVMX0xBQkVMX1ZBTFVFX19ESVNFQVNFX0RFQVRIUyk7CisKKwkJc3RhbmRhcmRJbmZlY3RvckVDbGFzcyA9IGNyZWF0ZUVDbGFzcyhTVEFOREFSRF9JTkZFQ1RPUik7CisKKwkJc3RvY2hhc3RpY1NFSVJEaXNlYXNlTW9kZWxFQ2xhc3MgPSBjcmVhdGVFQ2xhc3MoU1RPQ0hBU1RJQ19TRUlSX0RJU0VBU0VfTU9ERUwpOworCisJCXN0b2NoYXN0aWNTSURpc2Vhc2VNb2RlbEVDbGFzcyA9IGNyZWF0ZUVDbGFzcyhTVE9DSEFTVElDX1NJX0RJU0VBU0VfTU9ERUwpOworCisJCXN0b2NoYXN0aWNTSVJEaXNlYXNlTW9kZWxFQ2xhc3MgPSBjcmVhdGVFQ2xhc3MoU1RPQ0hBU1RJQ19TSVJfRElTRUFTRV9NT0RFTCk7CisKKwkJc3RvY2hhc3RpY0Rpc2Vhc2VNb2RlbEVDbGFzcyA9IGNyZWF0ZUVDbGFzcyhTVE9DSEFTVElDX0RJU0VBU0VfTU9ERUwpOworCQljcmVhdGVFQXR0cmlidXRlKHN0b2NoYXN0aWNEaXNlYXNlTW9kZWxFQ2xhc3MsIFNUT0NIQVNUSUNfRElTRUFTRV9NT0RFTF9fU0VFRCk7CisJCWNyZWF0ZUVBdHRyaWJ1dGUoc3RvY2hhc3RpY0Rpc2Vhc2VNb2RlbEVDbGFzcywgU1RPQ0hBU1RJQ19ESVNFQVNFX01PREVMX19SQU5ET01fR0VORVJBVE9SKTsKKworCQlzdGFuZGFyZFN0b2NoYXN0aWNEaXNlYXNlTW9kZWxFQ2xhc3MgPSBjcmVhdGVFQ2xhc3MoU1RBTkRBUkRfU1RPQ0hBU1RJQ19ESVNFQVNFX01PREVMKTsKKwkJY3JlYXRlRUF0dHJpYnV0ZShzdGFuZGFyZFN0b2NoYXN0aWNEaXNlYXNlTW9kZWxFQ2xhc3MsIFNUQU5EQVJEX1NUT0NIQVNUSUNfRElTRUFTRV9NT0RFTF9fR0FJTik7CisKKwkJc2lySW5vY3VsYXRvckVDbGFzcyA9IGNyZWF0ZUVDbGFzcyhTSVJfSU5PQ1VMQVRPUik7CisJCWNyZWF0ZUVBdHRyaWJ1dGUoc2lySW5vY3VsYXRvckVDbGFzcywgU0lSX0lOT0NVTEFUT1JfX0lOT0NVTEFURURfUEVSQ0VOVEFHRSk7CisJCWNyZWF0ZUVBdHRyaWJ1dGUoc2lySW5vY3VsYXRvckVDbGFzcywgU0lSX0lOT0NVTEFUT1JfX0lOT0NVTEFURV9QRVJDRU5UQUdFKTsKKworCQlzdG9jaGFzdGljUG9pc3NvblNJRGlzZWFzZU1vZGVsRUNsYXNzID0gY3JlYXRlRUNsYXNzKFNUT0NIQVNUSUNfUE9JU1NPTl9TSV9ESVNFQVNFX01PREVMKTsKKworCQlzdG9jaGFzdGljUG9pc3NvblNJUkRpc2Vhc2VNb2RlbEVDbGFzcyA9IGNyZWF0ZUVDbGFzcyhTVE9DSEFTVElDX1BPSVNTT05fU0lSX0RJU0VBU0VfTU9ERUwpOworCisJCXN0b2NoYXN0aWNQb2lzc29uU0VJUkRpc2Vhc2VNb2RlbEVDbGFzcyA9IGNyZWF0ZUVDbGFzcyhTVE9DSEFTVElDX1BPSVNTT05fU0VJUl9ESVNFQVNFX01PREVMKTsKKworCQlpbmZlY3Rvcklub2N1bGF0b3JDb2xsZWN0aW9uRUNsYXNzID0gY3JlYXRlRUNsYXNzKElORkVDVE9SX0lOT0NVTEFUT1JfQ09MTEVDVElPTik7CisJCWNyZWF0ZUVSZWZlcmVuY2UoaW5mZWN0b3JJbm9jdWxhdG9yQ29sbGVjdGlvbkVDbGFzcywgSU5GRUNUT1JfSU5PQ1VMQVRPUl9DT0xMRUNUSU9OX19MSVNUKTsKKwkJY3JlYXRlRUF0dHJpYnV0ZShpbmZlY3Rvcklub2N1bGF0b3JDb2xsZWN0aW9uRUNsYXNzLCBJTkZFQ1RPUl9JTk9DVUxBVE9SX0NPTExFQ1RJT05fX0lNUE9SVF9GT0xERVIpOworCisJCWluaXRpYWxpemVyRUNsYXNzID0gY3JlYXRlRUNsYXNzKElOSVRJQUxJWkVSKTsKKwkJY3JlYXRlRUF0dHJpYnV0ZShpbml0aWFsaXplckVDbGFzcywgSU5JVElBTElaRVJfX0RJU0VBU0VfTkFNRSk7CisJCWNyZWF0ZUVBdHRyaWJ1dGUoaW5pdGlhbGl6ZXJFQ2xhc3MsIElOSVRJQUxJWkVSX19UQVJHRVRfSVNPX0tFWSk7CisJCWNyZWF0ZUVBdHRyaWJ1dGUoaW5pdGlhbGl6ZXJFQ2xhc3MsIElOSVRJQUxJWkVSX19UQVJHRVRfVVJJKTsKKwkJY3JlYXRlRUF0dHJpYnV0ZShpbml0aWFsaXplckVDbGFzcywgSU5JVElBTElaRVJfX1BPUFVMQVRJT05fSURFTlRJRklFUik7CisJCWNyZWF0ZUVBdHRyaWJ1dGUoaW5pdGlhbGl6ZXJFQ2xhc3MsIElOSVRJQUxJWkVSX19DT01QQVJUTUVOVFMpOworCQljcmVhdGVFQXR0cmlidXRlKGluaXRpYWxpemVyRUNsYXNzLCBJTklUSUFMSVpFUl9fQ09NUEFSVE1FTlRfVkFMVUVTKTsKKwkJY3JlYXRlRUF0dHJpYnV0ZShpbml0aWFsaXplckVDbGFzcywgSU5JVElBTElaRVJfX1VTRV9GUkFDVElPTlMpOworCisJCS8vIENyZWF0ZSBkYXRhIHR5cGVzCisJCXJhbmRvbUVEYXRhVHlwZSA9IGNyZWF0ZUVEYXRhVHlwZShSQU5ET00pOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByaXZhdGUgYm9vbGVhbiBpc0luaXRpYWxpemVkID0gZmFsc2U7CisKKwkvKioKKwkgKiBDb21wbGV0ZSB0aGUgaW5pdGlhbGl6YXRpb24gb2YgdGhlIHBhY2thZ2UgYW5kIGl0cyBtZXRhLW1vZGVsLiAgVGhpcworCSAqIG1ldGhvZCBpcyBndWFyZGVkIHRvIGhhdmUgbm8gYWZmZWN0IG9uIGFueSBpbnZvY2F0aW9uIGJ1dCBpdHMgZmlyc3QuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgaW5pdGlhbGl6ZVBhY2thZ2VDb250ZW50cygpIHsKKwkJaWYgKGlzSW5pdGlhbGl6ZWQpIHJldHVybjsKKwkJaXNJbml0aWFsaXplZCA9IHRydWU7CisKKwkJLy8gSW5pdGlhbGl6ZSBwYWNrYWdlCisJCXNldE5hbWUoZU5BTUUpOworCQlzZXROc1ByZWZpeChlTlNfUFJFRklYKTsKKwkJc2V0TnNVUkkoZU5TX1VSSSk7CisKKwkJLy8gT2J0YWluIG90aGVyIGRlcGVuZGVudCBwYWNrYWdlcworCQlNb2RlbFBhY2thZ2UgdGhlTW9kZWxQYWNrYWdlID0gKE1vZGVsUGFja2FnZSlFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShNb2RlbFBhY2thZ2UuZU5TX1VSSSk7CisJCU1vZGlmaWVyUGFja2FnZSB0aGVNb2RpZmllclBhY2thZ2UgPSAoTW9kaWZpZXJQYWNrYWdlKUVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVQYWNrYWdlKE1vZGlmaWVyUGFja2FnZS5lTlNfVVJJKTsKKwkJRWNvcmVQYWNrYWdlIHRoZUVjb3JlUGFja2FnZSA9IChFY29yZVBhY2thZ2UpRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RVBhY2thZ2UoRWNvcmVQYWNrYWdlLmVOU19VUkkpOworCQlvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmRQYWNrYWdlIHRoZVN0YW5kYXJkUGFja2FnZV8xID0gKG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZFBhY2thZ2UpRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RVBhY2thZ2Uob3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkUGFja2FnZS5lTlNfVVJJKTsKKwkJR3JhcGhQYWNrYWdlIHRoZUdyYXBoUGFja2FnZSA9IChHcmFwaFBhY2thZ2UpRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RVBhY2thZ2UoR3JhcGhQYWNrYWdlLmVOU19VUkkpOworCQlMYWJlbHNQYWNrYWdlIHRoZUxhYmVsc1BhY2thZ2UgPSAoTGFiZWxzUGFja2FnZSlFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShMYWJlbHNQYWNrYWdlLmVOU19VUkkpOworCQlDb21tb25QYWNrYWdlIHRoZUNvbW1vblBhY2thZ2UgPSAoQ29tbW9uUGFja2FnZSlFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShDb21tb25QYWNrYWdlLmVOU19VUkkpOworCisJCS8vIENyZWF0ZSB0eXBlIHBhcmFtZXRlcnMKKworCQkvLyBTZXQgYm91bmRzIGZvciB0eXBlIHBhcmFtZXRlcnMKKworCQkvLyBBZGQgc3VwZXJ0eXBlcyB0byBjbGFzc2VzCisJCWRldGVybWluaXN0aWNTRUlSRGlzZWFzZU1vZGVsRUNsYXNzLmdldEVTdXBlclR5cGVzKCkuYWRkKHRoaXMuZ2V0U0VJUigpKTsKKwkJZGV0ZXJtaW5pc3RpY1NJRGlzZWFzZU1vZGVsRUNsYXNzLmdldEVTdXBlclR5cGVzKCkuYWRkKHRoaXMuZ2V0U0koKSk7CisJCWRldGVybWluaXN0aWNTSVJEaXNlYXNlTW9kZWxFQ2xhc3MuZ2V0RVN1cGVyVHlwZXMoKS5hZGQodGhpcy5nZXRTSVIoKSk7CisJCWRpc2Vhc2VNb2RlbEVDbGFzcy5nZXRFU3VwZXJUeXBlcygpLmFkZCh0aGVNb2RlbFBhY2thZ2UuZ2V0SW50ZWdyYXRpb25EZWNvcmF0b3IoKSk7CisJCWRpc2Vhc2VNb2RlbEVDbGFzcy5nZXRFU3VwZXJUeXBlcygpLmFkZCh0aGVNb2RpZmllclBhY2thZ2UuZ2V0TW9kaWZpYWJsZSgpKTsKKwkJZGlzZWFzZU1vZGVsTGFiZWxFQ2xhc3MuZ2V0RVN1cGVyVHlwZXMoKS5hZGQodGhlR3JhcGhQYWNrYWdlLmdldEludGVncmF0aW9uTGFiZWwoKSk7CisJCWRpc2Vhc2VNb2RlbExhYmVsVmFsdWVFQ2xhc3MuZ2V0RVN1cGVyVHlwZXMoKS5hZGQodGhlR3JhcGhQYWNrYWdlLmdldEludGVncmF0aW9uTGFiZWxWYWx1ZSgpKTsKKwkJaW5mZWN0b3JFQ2xhc3MuZ2V0RVN1cGVyVHlwZXMoKS5hZGQodGhlTW9kZWxQYWNrYWdlLmdldE5vZGVEZWNvcmF0b3IoKSk7CisJCWluZmVjdG9yRUNsYXNzLmdldEVTdXBlclR5cGVzKCkuYWRkKHRoZU1vZGlmaWVyUGFja2FnZS5nZXRNb2RpZmlhYmxlKCkpOworCQlzZWlyRUNsYXNzLmdldEVTdXBlclR5cGVzKCkuYWRkKHRoaXMuZ2V0U0lSKCkpOworCQlzZWlyTGFiZWxFQ2xhc3MuZ2V0RVN1cGVyVHlwZXMoKS5hZGQodGhpcy5nZXRTdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsKCkpOworCQlzZWlyTGFiZWxWYWx1ZUVDbGFzcy5nZXRFU3VwZXJUeXBlcygpLmFkZCh0aGlzLmdldFNJUkxhYmVsVmFsdWUoKSk7CisJCXNpRUNsYXNzLmdldEVTdXBlclR5cGVzKCkuYWRkKHRoaXMuZ2V0U3RhbmRhcmREaXNlYXNlTW9kZWwoKSk7CisJCXNpSW5mZWN0b3JFQ2xhc3MuZ2V0RVN1cGVyVHlwZXMoKS5hZGQodGhpcy5nZXRTdGFuZGFyZEluZmVjdG9yKCkpOworCQlzaUxhYmVsRUNsYXNzLmdldEVTdXBlclR5cGVzKCkuYWRkKHRoaXMuZ2V0U3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbCgpKTsKKwkJc2lMYWJlbFZhbHVlRUNsYXNzLmdldEVTdXBlclR5cGVzKCkuYWRkKHRoaXMuZ2V0U3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbFZhbHVlKCkpOworCQlzaXJFQ2xhc3MuZ2V0RVN1cGVyVHlwZXMoKS5hZGQodGhpcy5nZXRTSSgpKTsKKwkJc2lyTGFiZWxFQ2xhc3MuZ2V0RVN1cGVyVHlwZXMoKS5hZGQodGhpcy5nZXRTdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsKCkpOworCQlzaXJMYWJlbFZhbHVlRUNsYXNzLmdldEVTdXBlclR5cGVzKCkuYWRkKHRoaXMuZ2V0U0lMYWJlbFZhbHVlKCkpOworCQlzdGFuZGFyZERpc2Vhc2VNb2RlbEVDbGFzcy5nZXRFU3VwZXJUeXBlcygpLmFkZCh0aGlzLmdldERpc2Vhc2VNb2RlbCgpKTsKKwkJc3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbEVDbGFzcy5nZXRFU3VwZXJUeXBlcygpLmFkZCh0aGlzLmdldERpc2Vhc2VNb2RlbExhYmVsKCkpOworCQlzdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsVmFsdWVFQ2xhc3MuZ2V0RVN1cGVyVHlwZXMoKS5hZGQodGhpcy5nZXREaXNlYXNlTW9kZWxMYWJlbFZhbHVlKCkpOworCQlzdGFuZGFyZEluZmVjdG9yRUNsYXNzLmdldEVTdXBlclR5cGVzKCkuYWRkKHRoaXMuZ2V0SW5mZWN0b3IoKSk7CisJCXN0b2NoYXN0aWNTRUlSRGlzZWFzZU1vZGVsRUNsYXNzLmdldEVTdXBlclR5cGVzKCkuYWRkKHRoaXMuZ2V0U0VJUigpKTsKKwkJc3RvY2hhc3RpY1NFSVJEaXNlYXNlTW9kZWxFQ2xhc3MuZ2V0RVN1cGVyVHlwZXMoKS5hZGQodGhpcy5nZXRTdGFuZGFyZFN0b2NoYXN0aWNEaXNlYXNlTW9kZWwoKSk7CisJCXN0b2NoYXN0aWNTSURpc2Vhc2VNb2RlbEVDbGFzcy5nZXRFU3VwZXJUeXBlcygpLmFkZCh0aGlzLmdldFNJKCkpOworCQlzdG9jaGFzdGljU0lEaXNlYXNlTW9kZWxFQ2xhc3MuZ2V0RVN1cGVyVHlwZXMoKS5hZGQodGhpcy5nZXRTdGFuZGFyZFN0b2NoYXN0aWNEaXNlYXNlTW9kZWwoKSk7CisJCXN0b2NoYXN0aWNTSVJEaXNlYXNlTW9kZWxFQ2xhc3MuZ2V0RVN1cGVyVHlwZXMoKS5hZGQodGhpcy5nZXRTSVIoKSk7CisJCXN0b2NoYXN0aWNTSVJEaXNlYXNlTW9kZWxFQ2xhc3MuZ2V0RVN1cGVyVHlwZXMoKS5hZGQodGhpcy5nZXRTdGFuZGFyZFN0b2NoYXN0aWNEaXNlYXNlTW9kZWwoKSk7CisJCXN0b2NoYXN0aWNEaXNlYXNlTW9kZWxFQ2xhc3MuZ2V0RVN1cGVyVHlwZXMoKS5hZGQodGhpcy5nZXREaXNlYXNlTW9kZWwoKSk7CisJCXN0YW5kYXJkU3RvY2hhc3RpY0Rpc2Vhc2VNb2RlbEVDbGFzcy5nZXRFU3VwZXJUeXBlcygpLmFkZCh0aGlzLmdldFN0b2NoYXN0aWNEaXNlYXNlTW9kZWwoKSk7CisJCXNpcklub2N1bGF0b3JFQ2xhc3MuZ2V0RVN1cGVyVHlwZXMoKS5hZGQodGhpcy5nZXRTSUluZmVjdG9yKCkpOworCQlzdG9jaGFzdGljUG9pc3NvblNJRGlzZWFzZU1vZGVsRUNsYXNzLmdldEVTdXBlclR5cGVzKCkuYWRkKHRoaXMuZ2V0U0koKSk7CisJCXN0b2NoYXN0aWNQb2lzc29uU0lSRGlzZWFzZU1vZGVsRUNsYXNzLmdldEVTdXBlclR5cGVzKCkuYWRkKHRoaXMuZ2V0U0lSKCkpOworCQlzdG9jaGFzdGljUG9pc3NvblNFSVJEaXNlYXNlTW9kZWxFQ2xhc3MuZ2V0RVN1cGVyVHlwZXMoKS5hZGQodGhpcy5nZXRTRUlSKCkpOworCQlpbmZlY3Rvcklub2N1bGF0b3JDb2xsZWN0aW9uRUNsYXNzLmdldEVTdXBlclR5cGVzKCkuYWRkKHRoZU1vZGVsUGFja2FnZS5nZXROb2RlRGVjb3JhdG9yKCkpOworCQlpbmZlY3Rvcklub2N1bGF0b3JDb2xsZWN0aW9uRUNsYXNzLmdldEVTdXBlclR5cGVzKCkuYWRkKHRoZU1vZGlmaWVyUGFja2FnZS5nZXRNb2RpZmlhYmxlKCkpOworCQlpbml0aWFsaXplckVDbGFzcy5nZXRFU3VwZXJUeXBlcygpLmFkZCh0aGVNb2RlbFBhY2thZ2UuZ2V0Tm9kZURlY29yYXRvcigpKTsKKworCQkvLyBJbml0aWFsaXplIGNsYXNzZXMgYW5kIGZlYXR1cmVzOyBhZGQgb3BlcmF0aW9ucyBhbmQgcGFyYW1ldGVycworCQlpbml0RUNsYXNzKGRldGVybWluaXN0aWNTRUlSRGlzZWFzZU1vZGVsRUNsYXNzLCBEZXRlcm1pbmlzdGljU0VJUkRpc2Vhc2VNb2RlbC5jbGFzcywgIkRldGVybWluaXN0aWNTRUlSRGlzZWFzZU1vZGVsIiwgIUlTX0FCU1RSQUNULCAhSVNfSU5URVJGQUNFLCBJU19HRU5FUkFURURfSU5TVEFOQ0VfQ0xBU1MpOyAvLyROT04tTkxTLTEkCisKKwkJaW5pdEVDbGFzcyhkZXRlcm1pbmlzdGljU0lEaXNlYXNlTW9kZWxFQ2xhc3MsIERldGVybWluaXN0aWNTSURpc2Vhc2VNb2RlbC5jbGFzcywgIkRldGVybWluaXN0aWNTSURpc2Vhc2VNb2RlbCIsICFJU19BQlNUUkFDVCwgIUlTX0lOVEVSRkFDRSwgSVNfR0VORVJBVEVEX0lOU1RBTkNFX0NMQVNTKTsgLy8kTk9OLU5MUy0xJAorCisJCWluaXRFQ2xhc3MoZGV0ZXJtaW5pc3RpY1NJUkRpc2Vhc2VNb2RlbEVDbGFzcywgRGV0ZXJtaW5pc3RpY1NJUkRpc2Vhc2VNb2RlbC5jbGFzcywgIkRldGVybWluaXN0aWNTSVJEaXNlYXNlTW9kZWwiLCAhSVNfQUJTVFJBQ1QsICFJU19JTlRFUkZBQ0UsIElTX0dFTkVSQVRFRF9JTlNUQU5DRV9DTEFTUyk7IC8vJE5PTi1OTFMtMSQKKworCQlpbml0RUNsYXNzKGRpc2Vhc2VNb2RlbEVDbGFzcywgRGlzZWFzZU1vZGVsLmNsYXNzLCAiRGlzZWFzZU1vZGVsIiwgSVNfQUJTVFJBQ1QsICFJU19JTlRFUkZBQ0UsIElTX0dFTkVSQVRFRF9JTlNUQU5DRV9DTEFTUyk7IC8vJE5PTi1OTFMtMSQKKwkJaW5pdEVBdHRyaWJ1dGUoZ2V0RGlzZWFzZU1vZGVsX1BvcHVsYXRpb25JZGVudGlmaWVyKCksIGVjb3JlUGFja2FnZS5nZXRFU3RyaW5nKCksICJwb3B1bGF0aW9uSWRlbnRpZmllciIsICJodW1hbiIsIDAsIDEsIERpc2Vhc2VNb2RlbC5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCisJCWluaXRFQXR0cmlidXRlKGdldERpc2Vhc2VNb2RlbF9UaW1lUGVyaW9kKCksIGVjb3JlUGFja2FnZS5nZXRFTG9uZygpLCAidGltZVBlcmlvZCIsICI4NjQwMDAwMCIsIDAsIDEsIERpc2Vhc2VNb2RlbC5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCisJCWluaXRFQXR0cmlidXRlKGdldERpc2Vhc2VNb2RlbF9EaXNlYXNlTmFtZSgpLCBlY29yZVBhY2thZ2UuZ2V0RVN0cmluZygpLCAiZGlzZWFzZU5hbWUiLCBudWxsLCAwLCAxLCBEaXNlYXNlTW9kZWwuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7IC8vJE5PTi1OTFMtMSQKKwkJaW5pdEVBdHRyaWJ1dGUoZ2V0RGlzZWFzZU1vZGVsX0Zpbml0ZURpZmZlcmVuY2UoKSwgZWNvcmVQYWNrYWdlLmdldEVCb29sZWFuKCksICJmaW5pdGVEaWZmZXJlbmNlIiwgInRydWUiLCAwLCAxLCBEaXNlYXNlTW9kZWwuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAorCQlpbml0RUF0dHJpYnV0ZShnZXREaXNlYXNlTW9kZWxfRnJlcXVlbmN5RGVwZW5kZW50KCksIGVjb3JlUGFja2FnZS5nZXRFQm9vbGVhbigpLCAiZnJlcXVlbmN5RGVwZW5kZW50IiwgInRydWUiLCAwLCAxLCBEaXNlYXNlTW9kZWwuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAorCisJCUVPcGVyYXRpb24gb3AgPSBhZGRFT3BlcmF0aW9uKGRpc2Vhc2VNb2RlbEVDbGFzcywgdGhpcy5nZXREaXNlYXNlTW9kZWxMYWJlbCgpLCAiY3JlYXRlRGlzZWFzZU1vZGVsTGFiZWwiLCAwLCAxLCBJU19VTklRVUUsIElTX09SREVSRUQpOyAvLyROT04tTkxTLTEkCisJCWFkZEVQYXJhbWV0ZXIob3AsIHRoZUVjb3JlUGFja2FnZS5nZXRFU3RyaW5nKCksICJwb3B1bGF0aW9uSWRlbnRpZmllciIsIDAsIDEsIElTX1VOSVFVRSwgSVNfT1JERVJFRCk7IC8vJE5PTi1OTFMtMSQKKworCQlvcCA9IGFkZEVPcGVyYXRpb24oZGlzZWFzZU1vZGVsRUNsYXNzLCB0aGlzLmdldERpc2Vhc2VNb2RlbExhYmVsVmFsdWUoKSwgImNyZWF0ZURpc2Vhc2VNb2RlbExhYmVsVmFsdWUiLCAwLCAxLCBJU19VTklRVUUsIElTX09SREVSRUQpOyAvLyROT04tTkxTLTEkCisJCWFkZEVQYXJhbWV0ZXIob3AsIHRoZUVjb3JlUGFja2FnZS5nZXRFU3RyaW5nKCksICJwb3B1bGF0aW9uSWRlbnRpZmllciIsIDAsIDEsIElTX1VOSVFVRSwgSVNfT1JERVJFRCk7IC8vJE5PTi1OTFMtMSQKKworCQlhZGRFT3BlcmF0aW9uKGRpc2Vhc2VNb2RlbEVDbGFzcywgdGhpcy5nZXRJbmZlY3RvcigpLCAiY3JlYXRlSW5mZWN0b3IiLCAwLCAxLCBJU19VTklRVUUsIElTX09SREVSRUQpOyAvLyROT04tTkxTLTEkCisKKwkJYWRkRU9wZXJhdGlvbihkaXNlYXNlTW9kZWxFQ2xhc3MsIHRoZUVjb3JlUGFja2FnZS5nZXRFU3RyaW5nKCksICJnZXRBbGxMYWJlbElkZW50aWZpZXJzIiwgMCwgLTEsIElTX1VOSVFVRSwgSVNfT1JERVJFRCk7IC8vJE5PTi1OTFMtMSQKKworCQlvcCA9IGFkZEVPcGVyYXRpb24oZGlzZWFzZU1vZGVsRUNsYXNzLCB0aGVTdGFuZGFyZFBhY2thZ2VfMS5nZXRQb3B1bGF0aW9uTW9kZWxMYWJlbCgpLCAiZ2V0UG9wdWxhdGlvbk1vZGVsTGFiZWxzIiwgMCwgLTEsIElTX1VOSVFVRSwgSVNfT1JERVJFRCk7IC8vJE5PTi1OTFMtMSQKKwkJYWRkRVBhcmFtZXRlcihvcCwgdGhlRWNvcmVQYWNrYWdlLmdldEVTdHJpbmcoKSwgInBvcHVsYXRpb25JZGVudGlmaWVyIiwgMCwgMSwgSVNfVU5JUVVFLCBJU19PUkRFUkVEKTsgLy8kTk9OLU5MUy0xJAorCQlhZGRFUGFyYW1ldGVyKG9wLCB0aGVHcmFwaFBhY2thZ2UuZ2V0R3JhcGgoKSwgImdyYXBoIiwgMCwgMSwgSVNfVU5JUVVFLCBJU19PUkRFUkVEKTsgLy8kTk9OLU5MUy0xJAorCisJCWluaXRFQ2xhc3MoZGlzZWFzZU1vZGVsTGFiZWxFQ2xhc3MsIERpc2Vhc2VNb2RlbExhYmVsLmNsYXNzLCAiRGlzZWFzZU1vZGVsTGFiZWwiLCBJU19BQlNUUkFDVCwgIUlTX0lOVEVSRkFDRSwgSVNfR0VORVJBVEVEX0lOU1RBTkNFX0NMQVNTKTsgLy8kTk9OLU5MUy0xJAorCQlpbml0RVJlZmVyZW5jZShnZXREaXNlYXNlTW9kZWxMYWJlbF9Qb3B1bGF0aW9uTGFiZWwoKSwgdGhlTGFiZWxzUGFja2FnZS5nZXRQb3B1bGF0aW9uTGFiZWwoKSwgbnVsbCwgInBvcHVsYXRpb25MYWJlbCIsIG51bGwsIDAsIDEsIERpc2Vhc2VNb2RlbExhYmVsLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19DT01QT1NJVEUsIElTX1JFU09MVkVfUFJPWElFUywgIUlTX1VOU0VUVEFCTEUsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOyAvLyROT04tTkxTLTEkCisJCWluaXRFUmVmZXJlbmNlKGdldERpc2Vhc2VNb2RlbExhYmVsX1BvcHVsYXRpb25Nb2RlbExhYmVsKCksIHRoZVN0YW5kYXJkUGFja2FnZV8xLmdldFBvcHVsYXRpb25Nb2RlbExhYmVsKCksIG51bGwsICJwb3B1bGF0aW9uTW9kZWxMYWJlbCIsIG51bGwsIDAsIDEsIERpc2Vhc2VNb2RlbExhYmVsLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19DT01QT1NJVEUsIElTX1JFU09MVkVfUFJPWElFUywgIUlTX1VOU0VUVEFCTEUsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOyAvLyROT04tTkxTLTEkCisKKwkJYWRkRU9wZXJhdGlvbihkaXNlYXNlTW9kZWxMYWJlbEVDbGFzcywgdGhlRWNvcmVQYWNrYWdlLmdldEVTdHJpbmcoKSwgInRvVG9vbHRpcFN0cmluZyIsIDAsIDEsIElTX1VOSVFVRSwgSVNfT1JERVJFRCk7IC8vJE5PTi1OTFMtMSQKKworCQlpbml0RUNsYXNzKGRpc2Vhc2VNb2RlbExhYmVsVmFsdWVFQ2xhc3MsIERpc2Vhc2VNb2RlbExhYmVsVmFsdWUuY2xhc3MsICJEaXNlYXNlTW9kZWxMYWJlbFZhbHVlIiwgSVNfQUJTVFJBQ1QsICFJU19JTlRFUkZBQ0UsIElTX0dFTkVSQVRFRF9JTlNUQU5DRV9DTEFTUyk7IC8vJE5PTi1OTFMtMSQKKwkJaW5pdEVBdHRyaWJ1dGUoZ2V0RGlzZWFzZU1vZGVsTGFiZWxWYWx1ZV9Qb3B1bGF0aW9uQ291bnQoKSwgZWNvcmVQYWNrYWdlLmdldEVEb3VibGUoKSwgInBvcHVsYXRpb25Db3VudCIsIG51bGwsIDAsIDEsIERpc2Vhc2VNb2RlbExhYmVsVmFsdWUuY2xhc3MsIElTX1RSQU5TSUVOVCwgSVNfVk9MQVRJTEUsICFJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsgLy8kTk9OLU5MUy0xJAorCisJCWluaXRFQ2xhc3MoaW5mZWN0b3JFQ2xhc3MsIEluZmVjdG9yLmNsYXNzLCAiSW5mZWN0b3IiLCBJU19BQlNUUkFDVCwgIUlTX0lOVEVSRkFDRSwgSVNfR0VORVJBVEVEX0lOU1RBTkNFX0NMQVNTKTsgLy8kTk9OLU5MUy0xJAorCQlpbml0RVJlZmVyZW5jZShnZXRJbmZlY3Rvcl9EaXNlYXNlTW9kZWwoKSwgdGhpcy5nZXRTdGFuZGFyZERpc2Vhc2VNb2RlbCgpLCBudWxsLCAiZGlzZWFzZU1vZGVsIiwgbnVsbCwgMCwgMSwgSW5mZWN0b3IuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX0NPTVBPU0lURSwgSVNfUkVTT0xWRV9QUk9YSUVTLCAhSVNfVU5TRVRUQUJMRSwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7IC8vJE5PTi1OTFMtMSQKKwkJaW5pdEVBdHRyaWJ1dGUoZ2V0SW5mZWN0b3JfVGFyZ2V0VVJJKCksIHRoZUNvbW1vblBhY2thZ2UuZ2V0VVJJKCksICJ0YXJnZXRVUkkiLCBudWxsLCAwLCAxLCBJbmZlY3Rvci5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsgLy8kTk9OLU5MUy0xJAorCQlpbml0RUF0dHJpYnV0ZShnZXRJbmZlY3Rvcl9EaXNlYXNlTmFtZSgpLCBlY29yZVBhY2thZ2UuZ2V0RVN0cmluZygpLCAiZGlzZWFzZU5hbWUiLCBudWxsLCAwLCAxLCBJbmZlY3Rvci5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsgLy8kTk9OLU5MUy0xJAorCQlpbml0RUF0dHJpYnV0ZShnZXRJbmZlY3Rvcl9UYXJnZXRJU09LZXkoKSwgZWNvcmVQYWNrYWdlLmdldEVTdHJpbmcoKSwgInRhcmdldElTT0tleSIsIG51bGwsIDAsIDEsIEluZmVjdG9yLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOyAvLyROT04tTkxTLTEkCisJCWluaXRFUmVmZXJlbmNlKGdldEluZmVjdG9yX0xhYmVsc1RvSW5mZWN0KCksIHRoaXMuZ2V0RGlzZWFzZU1vZGVsTGFiZWwoKSwgbnVsbCwgImxhYmVsc1RvSW5mZWN0IiwgbnVsbCwgMCwgLTEsIEluZmVjdG9yLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19DT01QT1NJVEUsIElTX1JFU09MVkVfUFJPWElFUywgIUlTX1VOU0VUVEFCTEUsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOyAvLyROT04tTkxTLTEkCisJCWluaXRFQXR0cmlidXRlKGdldEluZmVjdG9yX1BvcHVsYXRpb25JZGVudGlmaWVyKCksIGVjb3JlUGFja2FnZS5nZXRFU3RyaW5nKCksICJwb3B1bGF0aW9uSWRlbnRpZmllciIsIG51bGwsIDAsIDEsIEluZmVjdG9yLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOyAvLyROT04tTkxTLTEkCisJCWluaXRFQXR0cmlidXRlKGdldEluZmVjdG9yX0luZmVjdFBlcmNlbnRhZ2UoKSwgdGhlRWNvcmVQYWNrYWdlLmdldEVCb29sZWFuKCksICJpbmZlY3RQZXJjZW50YWdlIiwgImZhbHNlIiwgMCwgMSwgSW5mZWN0b3IuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAorCQlpbml0RUF0dHJpYnV0ZShnZXRJbmZlY3Rvcl9UYXJnZXRGZWF0dXJlKCksIHRoZUVjb3JlUGFja2FnZS5nZXRFU3RyaW5nKCksICJ0YXJnZXRGZWF0dXJlIiwgImkiLCAwLCAxLCBJbmZlY3Rvci5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCisKKwkJaW5pdEVDbGFzcyhzZWlyRUNsYXNzLCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU0VJUi5jbGFzcywgIlNFSVIiLCBJU19BQlNUUkFDVCwgIUlTX0lOVEVSRkFDRSwgSVNfR0VORVJBVEVEX0lOU1RBTkNFX0NMQVNTKTsgLy8kTk9OLU5MUy0xJAorCQlpbml0RUF0dHJpYnV0ZShnZXRTRUlSX0luY3ViYXRpb25SYXRlKCksIGVjb3JlUGFja2FnZS5nZXRFRG91YmxlKCksICJpbmN1YmF0aW9uUmF0ZSIsICIwLjAiLCAwLCAxLCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU0VJUi5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCisKKwkJb3AgPSBhZGRFT3BlcmF0aW9uKHNlaXJFQ2xhc3MsIGVjb3JlUGFja2FnZS5nZXRFRG91YmxlKCksICJnZXRBZGp1c3RlZEluY3ViYXRpb25SYXRlIiwgMCwgMSwgSVNfVU5JUVVFLCBJU19PUkRFUkVEKTsgLy8kTk9OLU5MUy0xJAorCQlhZGRFUGFyYW1ldGVyKG9wLCBlY29yZVBhY2thZ2UuZ2V0RUxvbmcoKSwgInRpbWVEZWx0YSIsIDAsIDEsIElTX1VOSVFVRSwgSVNfT1JERVJFRCk7IC8vJE5PTi1OTFMtMSQKKworCQlpbml0RUNsYXNzKHNlaXJMYWJlbEVDbGFzcywgU0VJUkxhYmVsLmNsYXNzLCAiU0VJUkxhYmVsIiwgIUlTX0FCU1RSQUNULCAhSVNfSU5URVJGQUNFLCBJU19HRU5FUkFURURfSU5TVEFOQ0VfQ0xBU1MpOyAvLyROT04tTkxTLTEkCisKKwkJaW5pdEVDbGFzcyhzZWlyTGFiZWxWYWx1ZUVDbGFzcywgU0VJUkxhYmVsVmFsdWUuY2xhc3MsICJTRUlSTGFiZWxWYWx1ZSIsICFJU19BQlNUUkFDVCwgIUlTX0lOVEVSRkFDRSwgSVNfR0VORVJBVEVEX0lOU1RBTkNFX0NMQVNTKTsgLy8kTk9OLU5MUy0xJAorCQlpbml0RUF0dHJpYnV0ZShnZXRTRUlSTGFiZWxWYWx1ZV9FKCksIGVjb3JlUGFja2FnZS5nZXRFRG91YmxlKCksICJlIiwgbnVsbCwgMCwgMSwgU0VJUkxhYmVsVmFsdWUuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7IC8vJE5PTi1OTFMtMSQKKworCQlpbml0RUNsYXNzKHNpRUNsYXNzLCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU0kuY2xhc3MsICJTSSIsIElTX0FCU1RSQUNULCAhSVNfSU5URVJGQUNFLCBJU19HRU5FUkFURURfSU5TVEFOQ0VfQ0xBU1MpOyAvLyROT04tTkxTLTEkCisJCWluaXRFQXR0cmlidXRlKGdldFNJX1RyYW5zbWlzc2lvblJhdGUoKSwgZWNvcmVQYWNrYWdlLmdldEVEb3VibGUoKSwgInRyYW5zbWlzc2lvblJhdGUiLCAiMC4wIiwgMCwgMSwgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlNJLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKKwkJaW5pdEVBdHRyaWJ1dGUoZ2V0U0lfTm9uTGluZWFyaXR5Q29lZmZpY2llbnQoKSwgZWNvcmVQYWNrYWdlLmdldEVEb3VibGUoKSwgIm5vbkxpbmVhcml0eUNvZWZmaWNpZW50IiwgIjEuMCIsIDAsIDEsIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TSS5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCisJCWluaXRFQXR0cmlidXRlKGdldFNJX1JlY292ZXJ5UmF0ZSgpLCBlY29yZVBhY2thZ2UuZ2V0RURvdWJsZSgpLCAicmVjb3ZlcnlSYXRlIiwgIjAuMCIsIDAsIDEsIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TSS5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCisJCWluaXRFQXR0cmlidXRlKGdldFNJX0luZmVjdGlvdXNNb3J0YWxpdHlSYXRlKCksIGVjb3JlUGFja2FnZS5nZXRFRG91YmxlKCksICJpbmZlY3Rpb3VzTW9ydGFsaXR5UmF0ZSIsICIwLjAiLCAwLCAxLCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU0kuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAorCisJCW9wID0gYWRkRU9wZXJhdGlvbihzaUVDbGFzcywgZWNvcmVQYWNrYWdlLmdldEVEb3VibGUoKSwgImdldEFkanVzdGVkSW5mZWN0aW91c01vcnRhbGl0eVJhdGUiLCAwLCAxLCBJU19VTklRVUUsIElTX09SREVSRUQpOyAvLyROT04tTkxTLTEkCisJCWFkZEVQYXJhbWV0ZXIob3AsIGVjb3JlUGFja2FnZS5nZXRFTG9uZygpLCAidGltZURlbHRhIiwgMCwgMSwgSVNfVU5JUVVFLCBJU19PUkRFUkVEKTsgLy8kTk9OLU5MUy0xJAorCisJCW9wID0gYWRkRU9wZXJhdGlvbihzaUVDbGFzcywgZWNvcmVQYWNrYWdlLmdldEVEb3VibGUoKSwgImdldEFkanVzdGVkVHJhbnNtaXNzaW9uUmF0ZSIsIDAsIDEsIElTX1VOSVFVRSwgSVNfT1JERVJFRCk7IC8vJE5PTi1OTFMtMSQKKwkJYWRkRVBhcmFtZXRlcihvcCwgZWNvcmVQYWNrYWdlLmdldEVMb25nKCksICJ0aW1lRGVsdGEiLCAwLCAxLCBJU19VTklRVUUsIElTX09SREVSRUQpOyAvLyROT04tTkxTLTEkCisKKwkJb3AgPSBhZGRFT3BlcmF0aW9uKHNpRUNsYXNzLCBlY29yZVBhY2thZ2UuZ2V0RURvdWJsZSgpLCAiZ2V0QWRqdXN0ZWRSZWNvdmVyeVJhdGUiLCAwLCAxLCBJU19VTklRVUUsIElTX09SREVSRUQpOyAvLyROT04tTkxTLTEkCisJCWFkZEVQYXJhbWV0ZXIob3AsIGVjb3JlUGFja2FnZS5nZXRFTG9uZygpLCAidGltZURlbHRhIiwgMCwgMSwgSVNfVU5JUVVFLCBJU19PUkRFUkVEKTsgLy8kTk9OLU5MUy0xJAorCisJCWluaXRFQ2xhc3Moc2lJbmZlY3RvckVDbGFzcywgU0lJbmZlY3Rvci5jbGFzcywgIlNJSW5mZWN0b3IiLCAhSVNfQUJTVFJBQ1QsICFJU19JTlRFUkZBQ0UsIElTX0dFTkVSQVRFRF9JTlNUQU5DRV9DTEFTUyk7IC8vJE5PTi1OTFMtMSQKKwkJaW5pdEVBdHRyaWJ1dGUoZ2V0U0lJbmZlY3Rvcl9JbmZlY3Rpb3VzQ291bnQoKSwgZWNvcmVQYWNrYWdlLmdldEVEb3VibGUoKSwgImluZmVjdGlvdXNDb3VudCIsICIxIiwgMCwgMSwgU0lJbmZlY3Rvci5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCisKKwkJaW5pdEVDbGFzcyhzaUxhYmVsRUNsYXNzLCBTSUxhYmVsLmNsYXNzLCAiU0lMYWJlbCIsICFJU19BQlNUUkFDVCwgIUlTX0lOVEVSRkFDRSwgSVNfR0VORVJBVEVEX0lOU1RBTkNFX0NMQVNTKTsgLy8kTk9OLU5MUy0xJAorCisJCWluaXRFQ2xhc3Moc2lMYWJlbFZhbHVlRUNsYXNzLCBTSUxhYmVsVmFsdWUuY2xhc3MsICJTSUxhYmVsVmFsdWUiLCAhSVNfQUJTVFJBQ1QsICFJU19JTlRFUkZBQ0UsIElTX0dFTkVSQVRFRF9JTlNUQU5DRV9DTEFTUyk7IC8vJE5PTi1OTFMtMSQKKwkJaW5pdEVBdHRyaWJ1dGUoZ2V0U0lMYWJlbFZhbHVlX0koKSwgZWNvcmVQYWNrYWdlLmdldEVEb3VibGUoKSwgImkiLCBudWxsLCAwLCAxLCBTSUxhYmVsVmFsdWUuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7IC8vJE5PTi1OTFMtMSQKKworCQlpbml0RUNsYXNzKHNpckVDbGFzcywgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlNJUi5jbGFzcywgIlNJUiIsIElTX0FCU1RSQUNULCAhSVNfSU5URVJGQUNFLCBJU19HRU5FUkFURURfSU5TVEFOQ0VfQ0xBU1MpOyAvLyROT04tTkxTLTEkCisJCWluaXRFQXR0cmlidXRlKGdldFNJUl9JbW11bml0eUxvc3NSYXRlKCksIGVjb3JlUGFja2FnZS5nZXRFRG91YmxlKCksICJpbW11bml0eUxvc3NSYXRlIiwgIjAuMCIsIDAsIDEsIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TSVIuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAorCisJCW9wID0gYWRkRU9wZXJhdGlvbihzaXJFQ2xhc3MsIGVjb3JlUGFja2FnZS5nZXRFRG91YmxlKCksICJnZXRBZGp1c3RlZEltbXVuaXR5TG9zc1JhdGUiLCAwLCAxLCBJU19VTklRVUUsIElTX09SREVSRUQpOyAvLyROT04tTkxTLTEkCisJCWFkZEVQYXJhbWV0ZXIob3AsIGVjb3JlUGFja2FnZS5nZXRFTG9uZygpLCAidGltZURlbHRhIiwgMCwgMSwgSVNfVU5JUVVFLCBJU19PUkRFUkVEKTsgLy8kTk9OLU5MUy0xJAorCisJCWluaXRFQ2xhc3Moc2lyTGFiZWxFQ2xhc3MsIFNJUkxhYmVsLmNsYXNzLCAiU0lSTGFiZWwiLCAhSVNfQUJTVFJBQ1QsICFJU19JTlRFUkZBQ0UsIElTX0dFTkVSQVRFRF9JTlNUQU5DRV9DTEFTUyk7IC8vJE5PTi1OTFMtMSQKKworCQlpbml0RUNsYXNzKHNpckxhYmVsVmFsdWVFQ2xhc3MsIFNJUkxhYmVsVmFsdWUuY2xhc3MsICJTSVJMYWJlbFZhbHVlIiwgIUlTX0FCU1RSQUNULCAhSVNfSU5URVJGQUNFLCBJU19HRU5FUkFURURfSU5TVEFOQ0VfQ0xBU1MpOyAvLyROT04tTkxTLTEkCisJCWluaXRFQXR0cmlidXRlKGdldFNJUkxhYmVsVmFsdWVfUigpLCBlY29yZVBhY2thZ2UuZ2V0RURvdWJsZSgpLCAiciIsIG51bGwsIDAsIDEsIFNJUkxhYmVsVmFsdWUuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7IC8vJE5PTi1OTFMtMSQKKworCQlpbml0RUNsYXNzKHN0YW5kYXJkRGlzZWFzZU1vZGVsRUNsYXNzLCBTdGFuZGFyZERpc2Vhc2VNb2RlbC5jbGFzcywgIlN0YW5kYXJkRGlzZWFzZU1vZGVsIiwgSVNfQUJTVFJBQ1QsICFJU19JTlRFUkZBQ0UsIElTX0dFTkVSQVRFRF9JTlNUQU5DRV9DTEFTUyk7IC8vJE5PTi1OTFMtMSQKKwkJaW5pdEVBdHRyaWJ1dGUoZ2V0U3RhbmRhcmREaXNlYXNlTW9kZWxfUmVmZXJlbmNlUG9wdWxhdGlvbkRlbnNpdHkoKSwgZWNvcmVQYWNrYWdlLmdldEVEb3VibGUoKSwgInJlZmVyZW5jZVBvcHVsYXRpb25EZW5zaXR5IiwgIjEwMCIsIDAsIDEsIFN0YW5kYXJkRGlzZWFzZU1vZGVsLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKKwkJaW5pdEVBdHRyaWJ1dGUoZ2V0U3RhbmRhcmREaXNlYXNlTW9kZWxfUm9hZE5ldHdvcmtJbmZlY3Rpb3VzUHJvcG9ydGlvbigpLCB0aGVFY29yZVBhY2thZ2UuZ2V0RURvdWJsZSgpLCAicm9hZE5ldHdvcmtJbmZlY3Rpb3VzUHJvcG9ydGlvbiIsICIwLjAxIiwgMCwgMSwgU3RhbmRhcmREaXNlYXNlTW9kZWwuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAorCQlpbml0RUF0dHJpYnV0ZShnZXRTdGFuZGFyZERpc2Vhc2VNb2RlbF9DaGFyYWN0ZXJpc3RpY01peGluZ0Rpc3RhbmNlKCksIHRoZUVjb3JlUGFja2FnZS5nZXRFRG91YmxlKCksICJjaGFyYWN0ZXJpc3RpY01peGluZ0Rpc3RhbmNlIiwgIjIuMjUiLCAwLCAxLCBTdGFuZGFyZERpc2Vhc2VNb2RlbC5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCisKKwkJb3AgPSBhZGRFT3BlcmF0aW9uKHN0YW5kYXJkRGlzZWFzZU1vZGVsRUNsYXNzLCBlY29yZVBhY2thZ2UuZ2V0RURvdWJsZSgpLCAiZ2V0RWZmZWN0aXZlSW5mZWN0aW91cyIsIDAsIDEsIElTX1VOSVFVRSwgSVNfT1JERVJFRCk7IC8vJE5PTi1OTFMtMSQKKwkJYWRkRVBhcmFtZXRlcihvcCwgdGhlR3JhcGhQYWNrYWdlLmdldE5vZGUoKSwgIm5vZGUiLCAwLCAxLCBJU19VTklRVUUsIElTX09SREVSRUQpOyAvLyROT04tTkxTLTEkCisJCWFkZEVQYXJhbWV0ZXIob3AsIHRoaXMuZ2V0U3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbCgpLCAiZGlzZWFzZUxhYmVsIiwgMCwgMSwgSVNfVU5JUVVFLCBJU19PUkRFUkVEKTsgLy8kTk9OLU5MUy0xJAorCQlhZGRFUGFyYW1ldGVyKG9wLCBlY29yZVBhY2thZ2UuZ2V0RURvdWJsZSgpLCAib25zaXRlSW5mZWN0aW91cyIsIDAsIDEsIElTX1VOSVFVRSwgSVNfT1JERVJFRCk7IC8vJE5PTi1OTFMtMSQKKworCQlvcCA9IGFkZEVPcGVyYXRpb24oc3RhbmRhcmREaXNlYXNlTW9kZWxFQ2xhc3MsIGVjb3JlUGFja2FnZS5nZXRFRG91YmxlKCksICJnZXROb3JtYWxpemVkRWZmZWN0aXZlSW5mZWN0aW91cyIsIDAsIDEsIElTX1VOSVFVRSwgSVNfT1JERVJFRCk7IC8vJE5PTi1OTFMtMSQKKwkJYWRkRVBhcmFtZXRlcihvcCwgdGhlR3JhcGhQYWNrYWdlLmdldE5vZGUoKSwgIm5vZGUiLCAwLCAxLCBJU19VTklRVUUsIElTX09SREVSRUQpOyAvLyROT04tTkxTLTEkCisJCWFkZEVQYXJhbWV0ZXIob3AsIHRoaXMuZ2V0U3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbCgpLCAiZGlzZWFzZUxhYmVsIiwgMCwgMSwgSVNfVU5JUVVFLCBJU19PUkRFUkVEKTsgLy8kTk9OLU5MUy0xJAorCQlhZGRFUGFyYW1ldGVyKG9wLCBlY29yZVBhY2thZ2UuZ2V0RURvdWJsZSgpLCAib25zaXRlSW5mZWN0aW91cyIsIDAsIDEsIElTX1VOSVFVRSwgSVNfT1JERVJFRCk7IC8vJE5PTi1OTFMtMSQKKworCQlpbml0RUNsYXNzKHN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWxFQ2xhc3MsIFN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWwuY2xhc3MsICJTdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsIiwgSVNfQUJTVFJBQ1QsICFJU19JTlRFUkZBQ0UsIElTX0dFTkVSQVRFRF9JTlNUQU5DRV9DTEFTUyk7IC8vJE5PTi1OTFMtMSQKKworCQlpbml0RUNsYXNzKHN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZUVDbGFzcywgU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbFZhbHVlLmNsYXNzLCAiU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbFZhbHVlIiwgSVNfQUJTVFJBQ1QsICFJU19JTlRFUkZBQ0UsIElTX0dFTkVSQVRFRF9JTlNUQU5DRV9DTEFTUyk7IC8vJE5PTi1OTFMtMSQKKwkJaW5pdEVBdHRyaWJ1dGUoZ2V0U3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbFZhbHVlX1MoKSwgZWNvcmVQYWNrYWdlLmdldEVEb3VibGUoKSwgInMiLCBudWxsLCAwLCAxLCBTdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsVmFsdWUuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7IC8vJE5PTi1OTFMtMSQKKwkJaW5pdEVBdHRyaWJ1dGUoZ2V0U3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbFZhbHVlX0luY2lkZW5jZSgpLCB0aGVFY29yZVBhY2thZ2UuZ2V0RURvdWJsZSgpLCAiaW5jaWRlbmNlIiwgIjAuMCIsIDAsIDEsIFN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZS5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCisJCWluaXRFQXR0cmlidXRlKGdldFN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZV9EaXNlYXNlRGVhdGhzKCksIHRoZUVjb3JlUGFja2FnZS5nZXRFRG91YmxlKCksICJkaXNlYXNlRGVhdGhzIiwgIjAuMCIsIDAsIDEsIFN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZS5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCisKKwkJaW5pdEVDbGFzcyhzdGFuZGFyZEluZmVjdG9yRUNsYXNzLCBTdGFuZGFyZEluZmVjdG9yLmNsYXNzLCAiU3RhbmRhcmRJbmZlY3RvciIsIElTX0FCU1RSQUNULCAhSVNfSU5URVJGQUNFLCBJU19HRU5FUkFURURfSU5TVEFOQ0VfQ0xBU1MpOyAvLyROT04tTkxTLTEkCisKKwkJaW5pdEVDbGFzcyhzdG9jaGFzdGljU0VJUkRpc2Vhc2VNb2RlbEVDbGFzcywgU3RvY2hhc3RpY1NFSVJEaXNlYXNlTW9kZWwuY2xhc3MsICJTdG9jaGFzdGljU0VJUkRpc2Vhc2VNb2RlbCIsICFJU19BQlNUUkFDVCwgIUlTX0lOVEVSRkFDRSwgSVNfR0VORVJBVEVEX0lOU1RBTkNFX0NMQVNTKTsgLy8kTk9OLU5MUy0xJAorCisJCWluaXRFQ2xhc3Moc3RvY2hhc3RpY1NJRGlzZWFzZU1vZGVsRUNsYXNzLCBTdG9jaGFzdGljU0lEaXNlYXNlTW9kZWwuY2xhc3MsICJTdG9jaGFzdGljU0lEaXNlYXNlTW9kZWwiLCAhSVNfQUJTVFJBQ1QsICFJU19JTlRFUkZBQ0UsIElTX0dFTkVSQVRFRF9JTlNUQU5DRV9DTEFTUyk7IC8vJE5PTi1OTFMtMSQKKworCQlpbml0RUNsYXNzKHN0b2NoYXN0aWNTSVJEaXNlYXNlTW9kZWxFQ2xhc3MsIFN0b2NoYXN0aWNTSVJEaXNlYXNlTW9kZWwuY2xhc3MsICJTdG9jaGFzdGljU0lSRGlzZWFzZU1vZGVsIiwgIUlTX0FCU1RSQUNULCAhSVNfSU5URVJGQUNFLCBJU19HRU5FUkFURURfSU5TVEFOQ0VfQ0xBU1MpOyAvLyROT04tTkxTLTEkCisKKwkJaW5pdEVDbGFzcyhzdG9jaGFzdGljRGlzZWFzZU1vZGVsRUNsYXNzLCBTdG9jaGFzdGljRGlzZWFzZU1vZGVsLmNsYXNzLCAiU3RvY2hhc3RpY0Rpc2Vhc2VNb2RlbCIsIElTX0FCU1RSQUNULCAhSVNfSU5URVJGQUNFLCBJU19HRU5FUkFURURfSU5TVEFOQ0VfQ0xBU1MpOyAvLyROT04tTkxTLTEkCisJCWluaXRFQXR0cmlidXRlKGdldFN0b2NoYXN0aWNEaXNlYXNlTW9kZWxfU2VlZCgpLCBlY29yZVBhY2thZ2UuZ2V0RUxvbmcoKSwgInNlZWQiLCAiMCIsIDAsIDEsIFN0b2NoYXN0aWNEaXNlYXNlTW9kZWwuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAorCQlpbml0RUF0dHJpYnV0ZShnZXRTdG9jaGFzdGljRGlzZWFzZU1vZGVsX1JhbmRvbUdlbmVyYXRvcigpLCB0aGlzLmdldFJhbmRvbSgpLCAicmFuZG9tR2VuZXJhdG9yIiwgIjAiLCAwLCAxLCBTdG9jaGFzdGljRGlzZWFzZU1vZGVsLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsICFJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCisKKwkJaW5pdEVDbGFzcyhzdGFuZGFyZFN0b2NoYXN0aWNEaXNlYXNlTW9kZWxFQ2xhc3MsIFN0YW5kYXJkU3RvY2hhc3RpY0Rpc2Vhc2VNb2RlbC5jbGFzcywgIlN0YW5kYXJkU3RvY2hhc3RpY0Rpc2Vhc2VNb2RlbCIsIElTX0FCU1RSQUNULCAhSVNfSU5URVJGQUNFLCBJU19HRU5FUkFURURfSU5TVEFOQ0VfQ0xBU1MpOyAvLyROT04tTkxTLTEkCisJCWluaXRFQXR0cmlidXRlKGdldFN0YW5kYXJkU3RvY2hhc3RpY0Rpc2Vhc2VNb2RlbF9HYWluKCksIGVjb3JlUGFja2FnZS5nZXRFRG91YmxlKCksICJnYWluIiwgIjAuMDEiLCAwLCAxLCBTdGFuZGFyZFN0b2NoYXN0aWNEaXNlYXNlTW9kZWwuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAorCisJCWFkZEVPcGVyYXRpb24oc3RhbmRhcmRTdG9jaGFzdGljRGlzZWFzZU1vZGVsRUNsYXNzLCBlY29yZVBhY2thZ2UuZ2V0RURvdWJsZSgpLCAiY29tcHV0ZU5vaXNlIiwgMCwgMSwgSVNfVU5JUVVFLCBJU19PUkRFUkVEKTsgLy8kTk9OLU5MUy0xJAorCisJCWluaXRFQ2xhc3Moc2lySW5vY3VsYXRvckVDbGFzcywgU0lSSW5vY3VsYXRvci5jbGFzcywgIlNJUklub2N1bGF0b3IiLCAhSVNfQUJTVFJBQ1QsICFJU19JTlRFUkZBQ0UsIElTX0dFTkVSQVRFRF9JTlNUQU5DRV9DTEFTUyk7IC8vJE5PTi1OTFMtMSQKKwkJaW5pdEVBdHRyaWJ1dGUoZ2V0U0lSSW5vY3VsYXRvcl9Jbm9jdWxhdGVkUGVyY2VudGFnZSgpLCBlY29yZVBhY2thZ2UuZ2V0RURvdWJsZSgpLCAiaW5vY3VsYXRlZFBlcmNlbnRhZ2UiLCAiMSIsIDAsIDEsIFNJUklub2N1bGF0b3IuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAorCQlpbml0RUF0dHJpYnV0ZShnZXRTSVJJbm9jdWxhdG9yX0lub2N1bGF0ZVBlcmNlbnRhZ2UoKSwgdGhlRWNvcmVQYWNrYWdlLmdldEVCb29sZWFuKCksICJpbm9jdWxhdGVQZXJjZW50YWdlIiwgInRydWUiLCAwLCAxLCBTSVJJbm9jdWxhdG9yLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKKworCQlpbml0RUNsYXNzKHN0b2NoYXN0aWNQb2lzc29uU0lEaXNlYXNlTW9kZWxFQ2xhc3MsIFN0b2NoYXN0aWNQb2lzc29uU0lEaXNlYXNlTW9kZWwuY2xhc3MsICJTdG9jaGFzdGljUG9pc3NvblNJRGlzZWFzZU1vZGVsIiwgIUlTX0FCU1RSQUNULCAhSVNfSU5URVJGQUNFLCBJU19HRU5FUkFURURfSU5TVEFOQ0VfQ0xBU1MpOyAvLyROT04tTkxTLTEkCisKKwkJaW5pdEVDbGFzcyhzdG9jaGFzdGljUG9pc3NvblNJUkRpc2Vhc2VNb2RlbEVDbGFzcywgU3RvY2hhc3RpY1BvaXNzb25TSVJEaXNlYXNlTW9kZWwuY2xhc3MsICJTdG9jaGFzdGljUG9pc3NvblNJUkRpc2Vhc2VNb2RlbCIsICFJU19BQlNUUkFDVCwgIUlTX0lOVEVSRkFDRSwgSVNfR0VORVJBVEVEX0lOU1RBTkNFX0NMQVNTKTsgLy8kTk9OLU5MUy0xJAorCisJCWluaXRFQ2xhc3Moc3RvY2hhc3RpY1BvaXNzb25TRUlSRGlzZWFzZU1vZGVsRUNsYXNzLCBTdG9jaGFzdGljUG9pc3NvblNFSVJEaXNlYXNlTW9kZWwuY2xhc3MsICJTdG9jaGFzdGljUG9pc3NvblNFSVJEaXNlYXNlTW9kZWwiLCAhSVNfQUJTVFJBQ1QsICFJU19JTlRFUkZBQ0UsIElTX0dFTkVSQVRFRF9JTlNUQU5DRV9DTEFTUyk7IC8vJE5PTi1OTFMtMSQKKworCQlpbml0RUNsYXNzKGluZmVjdG9ySW5vY3VsYXRvckNvbGxlY3Rpb25FQ2xhc3MsIEluZmVjdG9ySW5vY3VsYXRvckNvbGxlY3Rpb24uY2xhc3MsICJJbmZlY3Rvcklub2N1bGF0b3JDb2xsZWN0aW9uIiwgIUlTX0FCU1RSQUNULCAhSVNfSU5URVJGQUNFLCBJU19HRU5FUkFURURfSU5TVEFOQ0VfQ0xBU1MpOyAvLyROT04tTkxTLTEkCisJCWluaXRFUmVmZXJlbmNlKGdldEluZmVjdG9ySW5vY3VsYXRvckNvbGxlY3Rpb25fTGlzdCgpLCB0aGlzLmdldEluZmVjdG9yKCksIG51bGwsICJsaXN0IiwgbnVsbCwgMCwgLTEsIEluZmVjdG9ySW5vY3VsYXRvckNvbGxlY3Rpb24uY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgSVNfQ09NUE9TSVRFLCAhSVNfUkVTT0xWRV9QUk9YSUVTLCAhSVNfVU5TRVRUQUJMRSwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7IC8vJE5PTi1OTFMtMSQKKwkJaW5pdEVBdHRyaWJ1dGUoZ2V0SW5mZWN0b3JJbm9jdWxhdG9yQ29sbGVjdGlvbl9JbXBvcnRGb2xkZXIoKSwgdGhlRWNvcmVQYWNrYWdlLmdldEVTdHJpbmcoKSwgImltcG9ydEZvbGRlciIsICIiLCAwLCAxLCBJbmZlY3Rvcklub2N1bGF0b3JDb2xsZWN0aW9uLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKKworCQlpbml0RUNsYXNzKGluaXRpYWxpemVyRUNsYXNzLCBJbml0aWFsaXplci5jbGFzcywgIkluaXRpYWxpemVyIiwgIUlTX0FCU1RSQUNULCAhSVNfSU5URVJGQUNFLCBJU19HRU5FUkFURURfSU5TVEFOQ0VfQ0xBU1MpOyAvLyROT04tTkxTLTEkCisJCWluaXRFQXR0cmlidXRlKGdldEluaXRpYWxpemVyX0Rpc2Vhc2VOYW1lKCksIGVjb3JlUGFja2FnZS5nZXRFU3RyaW5nKCksICJkaXNlYXNlTmFtZSIsIG51bGwsIDAsIDEsIEluaXRpYWxpemVyLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOyAvLyROT04tTkxTLTEkCisJCWluaXRFQXR0cmlidXRlKGdldEluaXRpYWxpemVyX1RhcmdldElTT0tleSgpLCBlY29yZVBhY2thZ2UuZ2V0RVN0cmluZygpLCAidGFyZ2V0SVNPS2V5IiwgbnVsbCwgMCwgMSwgSW5pdGlhbGl6ZXIuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7IC8vJE5PTi1OTFMtMSQKKwkJaW5pdEVBdHRyaWJ1dGUoZ2V0SW5pdGlhbGl6ZXJfVGFyZ2V0VVJJKCksIHRoZUNvbW1vblBhY2thZ2UuZ2V0VVJJKCksICJ0YXJnZXRVUkkiLCBudWxsLCAwLCAxLCBJbml0aWFsaXplci5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsgLy8kTk9OLU5MUy0xJAorCQlpbml0RUF0dHJpYnV0ZShnZXRJbml0aWFsaXplcl9Qb3B1bGF0aW9uSWRlbnRpZmllcigpLCBlY29yZVBhY2thZ2UuZ2V0RVN0cmluZygpLCAicG9wdWxhdGlvbklkZW50aWZpZXIiLCBudWxsLCAwLCAxLCBJbml0aWFsaXplci5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsgLy8kTk9OLU5MUy0xJAorCQlpbml0RUF0dHJpYnV0ZShnZXRJbml0aWFsaXplcl9Db21wYXJ0bWVudHMoKSwgdGhlRWNvcmVQYWNrYWdlLmdldEVTdHJpbmcoKSwgImNvbXBhcnRtZW50cyIsICIiLCAwLCAtMSwgSW5pdGlhbGl6ZXIuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAorCQlpbml0RUF0dHJpYnV0ZShnZXRJbml0aWFsaXplcl9Db21wYXJ0bWVudFZhbHVlcygpLCB0aGVFY29yZVBhY2thZ2UuZ2V0RURvdWJsZSgpLCAiY29tcGFydG1lbnRWYWx1ZXMiLCAiMC4wIiwgMCwgLTEsIEluaXRpYWxpemVyLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsICFJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCisJCWluaXRFQXR0cmlidXRlKGdldEluaXRpYWxpemVyX1VzZUZyYWN0aW9ucygpLCB0aGVFY29yZVBhY2thZ2UuZ2V0RUJvb2xlYW4oKSwgInVzZUZyYWN0aW9ucyIsIG51bGwsIDAsIDEsIEluaXRpYWxpemVyLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOyAvLyROT04tTkxTLTEkCisKKwkJLy8gSW5pdGlhbGl6ZSBkYXRhIHR5cGVzCisJCWluaXRFRGF0YVR5cGUocmFuZG9tRURhdGFUeXBlLCBSYW5kb20uY2xhc3MsICJSYW5kb20iLCBJU19TRVJJQUxJWkFCTEUsICFJU19HRU5FUkFURURfSU5TVEFOQ0VfQ0xBU1MpOyAvLyROT04tTkxTLTEkCisKKwkJLy8gQ3JlYXRlIHJlc291cmNlCisJCWNyZWF0ZVJlc291cmNlKGVOU19VUkkpOworCX0KKworfSAvL1N0YW5kYXJkUGFja2FnZUltcGwKZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvc3RhbmRhcmQvaW1wbC9TdGFuZGFyZFN0b2NoYXN0aWNEaXNlYXNlTW9kZWxJbXBsLmphdmEgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3N0YW5kYXJkL2ltcGwvU3RhbmRhcmRTdG9jaGFzdGljRGlzZWFzZU1vZGVsSW1wbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEwNWVlMWQKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3N0YW5kYXJkL2ltcGwvU3RhbmRhcmRTdG9jaGFzdGljRGlzZWFzZU1vZGVsSW1wbC5qYXZhCkBAIC0wLDAgKzEsMjAxIEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5pbXBsOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGphdmEudXRpbC5SYW5kb207CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzczsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuaW1wbC5FTm90aWZpY2F0aW9uSW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmRQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZFN0b2NoYXN0aWNEaXNlYXNlTW9kZWw7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIEFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5TdG9jaGFzdGljIERpc2Vhc2UgTW9kZWw8L2I+PC9lbT4nLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiA8cD4KKyAqIFRoZSBmb2xsb3dpbmcgZmVhdHVyZXMgYXJlIGltcGxlbWVudGVkOgorICogPHVsPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5pbXBsLlN0YW5kYXJkU3RvY2hhc3RpY0Rpc2Vhc2VNb2RlbEltcGwjZ2V0R2FpbiA8ZW0+R2FpbjwvZW0+fTwvbGk+CisgKiA8L3VsPgorICogPC9wPgorICoKKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGFic3RyYWN0IGNsYXNzIFN0YW5kYXJkU3RvY2hhc3RpY0Rpc2Vhc2VNb2RlbEltcGwgZXh0ZW5kcyBTdG9jaGFzdGljRGlzZWFzZU1vZGVsSW1wbCBpbXBsZW1lbnRzIFN0YW5kYXJkU3RvY2hhc3RpY0Rpc2Vhc2VNb2RlbCB7CisJLyoqCisJICogVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldEdhaW4oKSA8ZW0+R2FpbjwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZ2V0R2FpbigpCisJICogQGdlbmVyYXRlZCBOT1QKKwkgKiBAb3JkZXJlZAorCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgZG91YmxlIEdBSU5fRURFRkFVTFQgPSAwLjAxOworCisJLyoqCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0R2FpbigpIDxlbT5HYWluPC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNnZXRHYWluKCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgZG91YmxlIGdhaW4gPSBHQUlOX0VERUZBVUxUOworCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIFN0YW5kYXJkU3RvY2hhc3RpY0Rpc2Vhc2VNb2RlbEltcGwoKSB7CisJCXN1cGVyKCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIEVDbGFzcyBlU3RhdGljQ2xhc3MoKSB7CisJCXJldHVybiBTdGFuZGFyZFBhY2thZ2UuTGl0ZXJhbHMuU1RBTkRBUkRfU1RPQ0hBU1RJQ19ESVNFQVNFX01PREVMOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBkb3VibGUgZ2V0R2FpbigpIHsKKwkJcmV0dXJuIGdhaW47CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgc2V0R2Fpbihkb3VibGUgbmV3R2FpbikgeworCQlkb3VibGUgb2xkR2FpbiA9IGdhaW47CisJCWdhaW4gPSBuZXdHYWluOworCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpCisJCQllTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBTdGFuZGFyZFBhY2thZ2UuU1RBTkRBUkRfU1RPQ0hBU1RJQ19ESVNFQVNFX01PREVMX19HQUlOLCBvbGRHYWluLCBnYWluKSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBCeSBkZWZhdWx0IHRoaXMgY2FsbHMgdGhlIHN0YXRpYyBtZXRob2QgU3RhbmRhcmRTdG9jaGFzdGljRGlzZWFzZU1vZGVsSW1wbC5jb21wdXRlTm9pc2UoZ2FpbiwgcmFuZCkKKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCXB1YmxpYyBkb3VibGUgY29tcHV0ZU5vaXNlKCkgeworCQlyZXR1cm4gY29tcHV0ZU5vaXNlKGdldEdhaW4oKSwgZ2V0UmFuZG9tR2VuZXJhdG9yKCkpOworCX0KKwkKKworCS8qKgorCSAqIFRoaXMgbWV0aG9kIHJldHVybnMgYSBkb3VibGUgcHJlY2lzaW9uIHJhbmRvbSBub2lzZSB2YXJpYWJsZQorCSAqIHIgYmV0d2VlbiAoMS4wK3gpIGFuZCAoMS4wLXgpCisJICogd2hlcmUgeCBpcyBhIHByb2R1Y3QgRyogTWF0aC5yYW5kKCksIGFuZCBHIGlzIGEgZ2FpbiBmYWN0b3IgMDxHPG1heCBub2lzZQorCSAqIAorCSAqIEBwYXJhbSBnYWluCisJICogQHBhcmFtIHJhbmQKKwkgKiBAcmV0dXJuIG5vaXNlCisJICovCisJcHVibGljIHN0YXRpYyBkb3VibGUgY29tcHV0ZU5vaXNlKGZpbmFsIGRvdWJsZSBnYWluLCBmaW5hbCBSYW5kb20gcmFuZCkgeworICAgICAKKwkgICAgYXNzZXJ0IChnYWluIDw9IFN0b2NoYXN0aWNEaXNlYXNlTW9kZWxJbXBsLmdldE1BWF9HQUlOKCkpOiJTVE9DSEFTVElDIE5PSVNFIG11c3QgYmUgJ3NtYWxsJywgdGhlcmVmb3JlIGdhaW4gcGFyYW1ldGVyIG11c3QgYmUgPCBNQVhfR0FJTj0iK01BWF9HQUlOOyAvLyBtYXhpbXVtIG5vaXNlIHNob3VsZCBiZSAxJQorCQlkb3VibGUgeCA9ICgyLjAqcmFuZC5uZXh0RG91YmxlKCkpLTEuMDsgLy8gKy8tIDEKKwkJeCAqPSBnYWluOworCQl4ICs9IDEuMDsKKwkJYXNzZXJ0ICgoeD4wLjApJiYoeDwyLjApKSA6ICJyYW5kb20gbm9pc2Ugc2hvdWxkIGJlIGEgc21hbGwgcGVydHVyYmF0aW9uIEdhaW4gZmFjdG9yLCBnLCAgbXVzdCAwLjAgPCBnIDw8IDEuMCAiOworCQlyZXR1cm4geDsKKwkJCisJfSAvLyBnZXROb2lzZQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIE9iamVjdCBlR2V0KGludCBmZWF0dXJlSUQsIGJvb2xlYW4gcmVzb2x2ZSwgYm9vbGVhbiBjb3JlVHlwZSkgeworCQlzd2l0Y2ggKGZlYXR1cmVJRCkgeworCQkJY2FzZSBTdGFuZGFyZFBhY2thZ2UuU1RBTkRBUkRfU1RPQ0hBU1RJQ19ESVNFQVNFX01PREVMX19HQUlOOgorCQkJCXJldHVybiBnZXRHYWluKCk7CisJCX0KKwkJcmV0dXJuIHN1cGVyLmVHZXQoZmVhdHVyZUlELCByZXNvbHZlLCBjb3JlVHlwZSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgZVNldChpbnQgZmVhdHVyZUlELCBPYmplY3QgbmV3VmFsdWUpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJCWNhc2UgU3RhbmRhcmRQYWNrYWdlLlNUQU5EQVJEX1NUT0NIQVNUSUNfRElTRUFTRV9NT0RFTF9fR0FJTjoKKwkJCQlzZXRHYWluKChEb3VibGUpbmV3VmFsdWUpOworCQkJCXJldHVybjsKKwkJfQorCQlzdXBlci5lU2V0KGZlYXR1cmVJRCwgbmV3VmFsdWUpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGVVbnNldChpbnQgZmVhdHVyZUlEKSB7CisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7CisJCQljYXNlIFN0YW5kYXJkUGFja2FnZS5TVEFOREFSRF9TVE9DSEFTVElDX0RJU0VBU0VfTU9ERUxfX0dBSU46CisJCQkJc2V0R2FpbihHQUlOX0VERUZBVUxUKTsKKwkJCQlyZXR1cm47CisJCX0KKwkJc3VwZXIuZVVuc2V0KGZlYXR1cmVJRCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIGJvb2xlYW4gZUlzU2V0KGludCBmZWF0dXJlSUQpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJCWNhc2UgU3RhbmRhcmRQYWNrYWdlLlNUQU5EQVJEX1NUT0NIQVNUSUNfRElTRUFTRV9NT0RFTF9fR0FJTjoKKwkJCQlyZXR1cm4gZ2FpbiAhPSBHQUlOX0VERUZBVUxUOworCQl9CisJCXJldHVybiBzdXBlci5lSXNTZXQoZmVhdHVyZUlEKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkgeworCQlpZiAoZUlzUHJveHkoKSkgcmV0dXJuIHN1cGVyLnRvU3RyaW5nKCk7CisKKwkJU3RyaW5nQnVmZmVyIHJlc3VsdCA9IG5ldyBTdHJpbmdCdWZmZXIoc3VwZXIudG9TdHJpbmcoKSk7CisJCXJlc3VsdC5hcHBlbmQoIiAoZ2FpbjogIik7IC8vJE5PTi1OTFMtMSQKKwkJcmVzdWx0LmFwcGVuZChnYWluKTsKKwkJcmVzdWx0LmFwcGVuZCgnKScpOworCQlyZXR1cm4gcmVzdWx0LnRvU3RyaW5nKCk7CisJfQorCit9IC8vU3RhbmRhcmRTdG9jaGFzdGljRGlzZWFzZU1vZGVsSW1wbApkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9zdGFuZGFyZC9pbXBsL1N0b2NoYXN0aWNEaXNlYXNlTW9kZWxJbXBsLmphdmEgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3N0YW5kYXJkL2ltcGwvU3RvY2hhc3RpY0Rpc2Vhc2VNb2RlbEltcGwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYmU5ZDNmCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9zdGFuZGFyZC9pbXBsL1N0b2NoYXN0aWNEaXNlYXNlTW9kZWxJbXBsLmphdmEKQEAgLTAsMCArMSwyMjQgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLmltcGw7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgamF2YS51dGlsLlJhbmRvbTsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5pbXBsLkVOb3RpZmljYXRpb25JbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZEZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RvY2hhc3RpY0Rpc2Vhc2VNb2RlbDsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPlN0b2NoYXN0aWMgRGlzZWFzZSBNb2RlbDwvYj48L2VtPicuCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIDxwPgorICogVGhlIGZvbGxvd2luZyBmZWF0dXJlcyBhcmUgaW1wbGVtZW50ZWQ6CisgKiA8dWw+CisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLmltcGwuU3RvY2hhc3RpY0Rpc2Vhc2VNb2RlbEltcGwjZ2V0U2VlZCA8ZW0+U2VlZDwvZW0+fTwvbGk+CisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLmltcGwuU3RvY2hhc3RpY0Rpc2Vhc2VNb2RlbEltcGwjZ2V0UmFuZG9tR2VuZXJhdG9yIDxlbT5SYW5kb20gR2VuZXJhdG9yPC9lbT59PC9saT4KKyAqIDwvdWw+CisgKiA8L3A+CisgKgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgYWJzdHJhY3QgY2xhc3MgU3RvY2hhc3RpY0Rpc2Vhc2VNb2RlbEltcGwgZXh0ZW5kcyBEaXNlYXNlTW9kZWxJbXBsIGltcGxlbWVudHMgU3RvY2hhc3RpY0Rpc2Vhc2VNb2RlbCB7CisJLyoqCisJICogVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldFNlZWQoKSA8ZW0+U2VlZDwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZ2V0U2VlZCgpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBsb25nIFNFRURfRURFRkFVTFQgPSAwTDsKKworCS8qKgorCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldFNlZWQoKSA8ZW0+U2VlZDwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZ2V0U2VlZCgpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIGxvbmcgc2VlZCA9IFNFRURfRURFRkFVTFQ7CisJCisJLyoqCisJICogVGhpcyBpcyBhbiB1cHBlciBib3VuZCBvbiB0aGUgbWF4aW11bSBhbW91bnQgb2YgYWxsb3dlZCBub2lzZS4gCisJICogSW4gYW55IHN0b2NoYXN0aWMgbW9kZWwgdGhlIG5vaXNlIHNob3VsZCBjYXVzZSBvbmx5IGEgc21hbGwgcHVydHVyYmF0aW9uCisJICogb2YgdGhlIGRldGVybWluaXN0aWMgbW9kZWwgKHBlcmhhcHMgb2YgdGhlIG9yZGVyIG9mIHRoZSBiYWNrZ3JvdW5kIGRlYXRoIHJhdGUgb3IgYWJvdXQgMS81MCkuCisJICogVGhlIGRlZmF1bHQgdmFsdWUgc2V0IGhlcmUgbWF5IGJlIG92ZXJyaWRkZW4gYnkgc2V0dGVyIGEgc2V0dGVyIG1ldGhvZC4KKwkgKiovCisJc3RhdGljIGRvdWJsZSBNQVhfR0FJTiA9IDAuMDI7CisKKwkvKioKKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0UmFuZG9tR2VuZXJhdG9yKCkgPGVtPlJhbmRvbSBHZW5lcmF0b3I8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI2dldFJhbmRvbUdlbmVyYXRvcigpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBSYW5kb20gUkFORE9NX0dFTkVSQVRPUl9FREVGQVVMVCA9IChSYW5kb20pU3RhbmRhcmRGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVGcm9tU3RyaW5nKFN0YW5kYXJkUGFja2FnZS5lSU5TVEFOQ0UuZ2V0UmFuZG9tKCksICIwIik7CisKKwkvKioKKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRSYW5kb21HZW5lcmF0b3IoKSA8ZW0+UmFuZG9tIEdlbmVyYXRvcjwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZ2V0UmFuZG9tR2VuZXJhdG9yKCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgUmFuZG9tIHJhbmRvbUdlbmVyYXRvciA9IFJBTkRPTV9HRU5FUkFUT1JfRURFRkFVTFQ7CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgU3RvY2hhc3RpY0Rpc2Vhc2VNb2RlbEltcGwoKSB7CisJCXN1cGVyKCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIEVDbGFzcyBlU3RhdGljQ2xhc3MoKSB7CisJCXJldHVybiBTdGFuZGFyZFBhY2thZ2UuTGl0ZXJhbHMuU1RPQ0hBU1RJQ19ESVNFQVNFX01PREVMOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBsb25nIGdldFNlZWQoKSB7CisJCXJldHVybiBzZWVkOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRTZWVkKGxvbmcgbmV3U2VlZCkgeworCQlsb25nIG9sZFNlZWQgPSBnZXRTZWVkKCk7CisJCXNlZWQgPSBuZXdTZWVkOworCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpCisJCQllTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBTdGFuZGFyZFBhY2thZ2UuU1RPQ0hBU1RJQ19ESVNFQVNFX01PREVMX19TRUVELCBvbGRTZWVkLCBnZXRTZWVkKCkpKTsKKwkJZ2V0UmFuZG9tR2VuZXJhdG9yKCkuc2V0U2VlZChuZXdTZWVkKTsKKwl9IC8vIHNldFNlZWQKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBSYW5kb20gZ2V0UmFuZG9tR2VuZXJhdG9yKCkgeworCQlyZXR1cm4gcmFuZG9tR2VuZXJhdG9yOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBPYmplY3QgZUdldChpbnQgZmVhdHVyZUlELCBib29sZWFuIHJlc29sdmUsIGJvb2xlYW4gY29yZVR5cGUpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJCWNhc2UgU3RhbmRhcmRQYWNrYWdlLlNUT0NIQVNUSUNfRElTRUFTRV9NT0RFTF9fU0VFRDoKKwkJCQlyZXR1cm4gZ2V0U2VlZCgpOworCQkJY2FzZSBTdGFuZGFyZFBhY2thZ2UuU1RPQ0hBU1RJQ19ESVNFQVNFX01PREVMX19SQU5ET01fR0VORVJBVE9SOgorCQkJCXJldHVybiBnZXRSYW5kb21HZW5lcmF0b3IoKTsKKwkJfQorCQlyZXR1cm4gc3VwZXIuZUdldChmZWF0dXJlSUQsIHJlc29sdmUsIGNvcmVUeXBlKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBlU2V0KGludCBmZWF0dXJlSUQsIE9iamVjdCBuZXdWYWx1ZSkgeworCQlzd2l0Y2ggKGZlYXR1cmVJRCkgeworCQkJY2FzZSBTdGFuZGFyZFBhY2thZ2UuU1RPQ0hBU1RJQ19ESVNFQVNFX01PREVMX19TRUVEOgorCQkJCXNldFNlZWQoKExvbmcpbmV3VmFsdWUpOworCQkJCXJldHVybjsKKwkJfQorCQlzdXBlci5lU2V0KGZlYXR1cmVJRCwgbmV3VmFsdWUpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGVVbnNldChpbnQgZmVhdHVyZUlEKSB7CisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7CisJCQljYXNlIFN0YW5kYXJkUGFja2FnZS5TVE9DSEFTVElDX0RJU0VBU0VfTU9ERUxfX1NFRUQ6CisJCQkJc2V0U2VlZChTRUVEX0VERUZBVUxUKTsKKwkJCQlyZXR1cm47CisJCX0KKwkJc3VwZXIuZVVuc2V0KGZlYXR1cmVJRCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIGJvb2xlYW4gZUlzU2V0KGludCBmZWF0dXJlSUQpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJCWNhc2UgU3RhbmRhcmRQYWNrYWdlLlNUT0NIQVNUSUNfRElTRUFTRV9NT0RFTF9fU0VFRDoKKwkJCQlyZXR1cm4gc2VlZCAhPSBTRUVEX0VERUZBVUxUOworCQkJY2FzZSBTdGFuZGFyZFBhY2thZ2UuU1RPQ0hBU1RJQ19ESVNFQVNFX01PREVMX19SQU5ET01fR0VORVJBVE9SOgorCQkJCXJldHVybiBSQU5ET01fR0VORVJBVE9SX0VERUZBVUxUID09IG51bGwgPyByYW5kb21HZW5lcmF0b3IgIT0gbnVsbCA6ICFSQU5ET01fR0VORVJBVE9SX0VERUZBVUxULmVxdWFscyhyYW5kb21HZW5lcmF0b3IpOworCQl9CisJCXJldHVybiBzdXBlci5lSXNTZXQoZmVhdHVyZUlEKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkgeworCQlpZiAoZUlzUHJveHkoKSkgcmV0dXJuIHN1cGVyLnRvU3RyaW5nKCk7CisKKwkJU3RyaW5nQnVmZmVyIHJlc3VsdCA9IG5ldyBTdHJpbmdCdWZmZXIoc3VwZXIudG9TdHJpbmcoKSk7CisJCXJlc3VsdC5hcHBlbmQoIiAoc2VlZDogIik7IC8vJE5PTi1OTFMtMSQKKwkJcmVzdWx0LmFwcGVuZChzZWVkKTsKKwkJcmVzdWx0LmFwcGVuZCgiLCByYW5kb21HZW5lcmF0b3I6ICIpOyAvLyROT04tTkxTLTEkCisJCXJlc3VsdC5hcHBlbmQocmFuZG9tR2VuZXJhdG9yKTsKKwkJcmVzdWx0LmFwcGVuZCgnKScpOworCQlyZXR1cm4gcmVzdWx0LnRvU3RyaW5nKCk7CisJfQorCisJcHVibGljIHN0YXRpYyBkb3VibGUgZ2V0TUFYX0dBSU4oKSB7CisJCXJldHVybiBNQVhfR0FJTjsKKwl9CisKKwlwdWJsaWMgc3RhdGljIHZvaWQgc2V0TUFYX0dBSU4oZG91YmxlIG1heF9nYWluKSB7CisJCU1BWF9HQUlOID0gbWF4X2dhaW47CisJfQorCit9IC8vU3RvY2hhc3RpY0Rpc2Vhc2VNb2RlbEltcGwKZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvc3RhbmRhcmQvaW1wbC9TdG9jaGFzdGljUG9pc3NvblNFSVJEaXNlYXNlTW9kZWxJbXBsLmphdmEgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3N0YW5kYXJkL2ltcGwvU3RvY2hhc3RpY1BvaXNzb25TRUlSRGlzZWFzZU1vZGVsSW1wbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA0ZDU5OWQKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3N0YW5kYXJkL2ltcGwvU3RvY2hhc3RpY1BvaXNzb25TRUlSRGlzZWFzZU1vZGVsSW1wbC5qYXZhCkBAIC0wLDAgKzEsMTUxIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDEwIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLmltcGw7CisKK2ltcG9ydCBqYXZhLnV0aWwuUmFuZG9tOworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzczsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguTGFiZWxWYWx1ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubWF0aC5CaW5vbWlhbERpc3RyaWJ1dGlvblV0aWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLlNURU1UaW1lOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5EaXNlYXNlTW9kZWxMYWJlbFZhbHVlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TRUlSTGFiZWxWYWx1ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbFZhbHVlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZFBhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlN0b2NoYXN0aWNQb2lzc29uU0VJUkRpc2Vhc2VNb2RlbDsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPlN0b2NoYXN0aWMgUG9pc3NvbiBTRUlSIERpc2Vhc2UgTW9kZWw8L2I+PC9lbT4nLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiA8cD4KKyAqIDwvcD4KKyAqCisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBTdG9jaGFzdGljUG9pc3NvblNFSVJEaXNlYXNlTW9kZWxJbXBsIGV4dGVuZHMgU0VJUkltcGwgaW1wbGVtZW50cyBTdG9jaGFzdGljUG9pc3NvblNFSVJEaXNlYXNlTW9kZWwgeworCisJcHJpdmF0ZSBSYW5kb20gcmFuZCA9IG5ldyBSYW5kb20oKTsKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJcHVibGljIFN0b2NoYXN0aWNQb2lzc29uU0VJUkRpc2Vhc2VNb2RlbEltcGwoKSB7CisJCXN1cGVyKCk7CisJfQorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuaW1wbC5TSUltcGwjY29tcHV0ZURpc2Vhc2VEZWx0YXMoU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbFZhbHVlLAorCSAqICAgICAgU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbCwgbG9uZykKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbFZhbHVlIGNvbXB1dGVEaXNlYXNlRGVsdGFzKAorCQkJZmluYWwgU1RFTVRpbWUgdGltZSwgCisJCQlmaW5hbCBTdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsVmFsdWUgY3VycmVudFN0YXRlLAorCQkJZmluYWwgU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbCBkaXNlYXNlTGFiZWwsIGZpbmFsIGxvbmcgdGltZURlbHRhLCBEaXNlYXNlTW9kZWxMYWJlbFZhbHVlIHJldHVyblZhbHVlKSB7CisJCWZpbmFsIFNFSVJMYWJlbFZhbHVlIGN1cnJlbnRTRUlSID0gKFNFSVJMYWJlbFZhbHVlKSBjdXJyZW50U3RhdGU7CisJCisJCS8vIFRoaXMgaXMgYmV0YSoKKwkJZG91YmxlIHRyYW5zbWlzc2lvblJhdGUgPSBnZXRBZGp1c3RlZFRyYW5zbWlzc2lvblJhdGUodGltZURlbHRhKTsKKwkJCisJCWlmKCF0aGlzLmlzRnJlcXVlbmN5RGVwZW5kZW50KCkpIHRyYW5zbWlzc2lvblJhdGUgKj0gZ2V0VHJhbnNtaXNzaW9uUmF0ZVNjYWxlRmFjdG9yKGRpc2Vhc2VMYWJlbCk7CisJCQorCQkJCisJCS8vIFRoZSBlZmZlY3RpdmUgSW5mZWN0aW91cyBwb3B1bGF0aW9uICBpcyBhIGRpbWVuc2lvbmxlcyBudW1iZXIgbm9ybWFsaXplIGJ5IHRvdGFsCisJCS8vIHBvcHVsYXRpb24gdXNlZCBpbiB0ZWggY29tcHV0YXRpb24gb2YgYmV0cypTKmkgd2hlcmUgaSA9IEllZmZlY3RpdmUvUG9wLgorCQkvLyBUaGlzIGluY2x1ZGVzIGEgY29ycmVjdGlvbiB0byB0aGUgY3VycmVudAorCQkvLyBpbmZlY3Rpb3VzIHBvcHVsYXRpb24gKEllZmZlY3RpdmUpIGJhc2VkIG9uIHRoZSBjb25zZXJ2ZWQgZXhjaGFuZ2Ugb2YgcGVvcGxlIChjaXJjdWxhdGlvbikKKwkJLy8gYmV0d2VlbiByZWdpb25zLiBOb3RlIHRoYXQgdGhpcyBpcyBubyB0aGUgImFycml2YWxzIiBhbmQgImRlcGFydHVyZXMiIHdoaWNoIGFyZQorCQkvLyBhIGRpZmZlcmVudCBwcm9jZXNzLgorCQlmaW5hbCBkb3VibGUgZWZmZWN0aXZlSW5mZWN0aW91cyA9IGdldE5vcm1hbGl6ZWRFZmZlY3RpdmVJbmZlY3Rpb3VzKGRpc2Vhc2VMYWJlbC5nZXROb2RlKCksIGRpc2Vhc2VMYWJlbCwgY3VycmVudFNFSVIuZ2V0SSgpKTsKKworCQkvKgorCQkgKiBDb21wdXRlIHN0YXRlIHRyYW5zaXRpb25zCisJCSAqIAorCQkgKiBSZWdhcmRpbmcgY29tcHV0aW5nIHRoZSBudW1iZXIgb2YgdHJhbnNpdGlvbnMgZnJvbSBTdXNjZXB0aWJsZSB0byBFeHBvc2VkOgorCQkgKiBJbiBhIGxpbmVhciBtb2RlbCB0aGUgImVmZmVjdGl2ZSIgbnVtYmVyIG9mIGluZmVjdGlvdXMgcGVvcGxlIGlzIGp1c3QKKwkJICogdGhlIG51bWJlciBvZiBpbmZlY3Rpb3VzIHBlb3BsZSBJbiBhIG5vbmxpbmVhciBtb2RlbCB3ZSBoYXZlIGEKKwkJICogbm9uTGluZWFyaXR5IGV4cG9uZW50IHRoYXQgaXMgPiAxIHRoaXMgbW9kZWxzIHRoZSBlZmZlY3Qgb2YgaW1tdW5lCisJCSAqIHN5c3RlbSBzYXR1cmF0aW9uIHdoZW4gU3VzY2VwdGlibGUgcGVvcGxlIGFyZSBleHBvc2VkIHRvIGxhcmdlCisJCSAqIG51bWJlcnMgb2YgaW5mZWN0aW91cyBwZW9wbGUuIHRoZW4gdGhlICJlZmZlY3RpdmUiIG51bWJlciBvZgorCQkgKiBpbmZlY3Rpb3VzIHBlb3BsZSBpcyBJXm5vbkxpbmVhcml0eSBleHBvbmVudCB0byBhbGxvdyBmb3IgZWl0aGVyCisJCSAqIGxpbmVhciBvciBub25saW5lYXIgbW9kZWxzIHdlIGFsd2F5cyBjYWxjdWxhdGUgSV5ub25MaW5lYXJpdHkKKwkJICogZXhwb25lbnQgYW5kIGFsbG93IG5vbkxpbmVhcml0eSBleHBvbmVudCA+PSAxLjAKKwkJICovCisJCWRvdWJsZSBudW1iZXJPZkluZmVjdGVkVG9SZWNvdmVyZWQgPSBnZXRBZGp1c3RlZFJlY292ZXJ5UmF0ZSh0aW1lRGVsdGEpCisJCSogY3VycmVudFNFSVIuZ2V0SSgpOworCQlkb3VibGUgbnVtYmVyT2ZSZWNvdmVyZWRUb1N1c2NlcHRpYmxlID0gZ2V0QWRqdXN0ZWRJbW11bml0eUxvc3NSYXRlKHRpbWVEZWx0YSkKKwkJKiBjdXJyZW50U0VJUi5nZXRSKCk7CisJCQorCQlpbnQgUyA9IChpbnQpY3VycmVudFNFSVIuZ2V0UygpOworCQlkb3VibGUgcHJvYiA9IDAuMDsKKwkJaWYoZ2V0Tm9uTGluZWFyaXR5Q29lZmZpY2llbnQoKSAhPSAxLjAgJiYgZWZmZWN0aXZlSW5mZWN0aW91cyA+PSAwLjApCisJCQlwcm9iID0gdHJhbnNtaXNzaW9uUmF0ZSAqIE1hdGgucG93KGVmZmVjdGl2ZUluZmVjdGlvdXMsIGdldE5vbkxpbmVhcml0eUNvZWZmaWNpZW50KCkpOworCQllbHNlCisJCQlwcm9iID0gdHJhbnNtaXNzaW9uUmF0ZSAqIGVmZmVjdGl2ZUluZmVjdGlvdXM7CisJICAgIGRvdWJsZSBybmRWYXIgPSByYW5kLm5leHREb3VibGUoKTsKKwkgICAgaW50IHBpY2tOID0gMDsKKwkgICAgcGlja04gPSBCaW5vbWlhbERpc3RyaWJ1dGlvblV0aWwuZmFzdFBpY2tGcm9tQmlub21pYWxEaXN0KHByb2IsIFMsIHJuZFZhcik7CisJICAgIAkgIAorCQkvLyBNb3ZlIHBpY2tLIGZyb20gUyB0byBJOworCQkKKwkJZG91YmxlIG51bWJlck9mU3VzY2VwdGlibGVUb0V4cG9zZWQgPSBwaWNrTjsKKwkJCisJCQorCQkKKwkJZG91YmxlIG51bWJlck9mRXhwb3NlZFRvSW5mZWN0aW91cyA9IGdldEFkanVzdGVkSW5jdWJhdGlvblJhdGUodGltZURlbHRhKQorCQkqIGN1cnJlbnRTRUlSLmdldEUoKTsKKwkJCQorCQkKKwkJLy8gRGV0ZXJtaW5lIGRlbHRhIFMKKwkJZmluYWwgZG91YmxlIGRlbHRhUyA9IG51bWJlck9mUmVjb3ZlcmVkVG9TdXNjZXB0aWJsZSAtIG51bWJlck9mU3VzY2VwdGlibGVUb0V4cG9zZWQ7CisJCS8vIERldGVybWluZSBkZWx0YSBFCisJCWZpbmFsIGRvdWJsZSBkZWx0YUUgPSBudW1iZXJPZlN1c2NlcHRpYmxlVG9FeHBvc2VkIC0gbnVtYmVyT2ZFeHBvc2VkVG9JbmZlY3Rpb3VzOwkJCisJCS8vIERldGVybWluZSBkZWx0YSBJCisJCWZpbmFsIGRvdWJsZSBkZWx0YUkgPSBudW1iZXJPZkV4cG9zZWRUb0luZmVjdGlvdXMgLSBudW1iZXJPZkluZmVjdGVkVG9SZWNvdmVyZWQ7CisJCS8vIERldGVybWluZSBkZWx0YSBSCisJCWZpbmFsIGRvdWJsZSBkZWx0YVIgPSBudW1iZXJPZkluZmVjdGVkVG9SZWNvdmVyZWQgLSBudW1iZXJPZlJlY292ZXJlZFRvU3VzY2VwdGlibGU7CisJCQorCQlTRUlSTGFiZWxWYWx1ZUltcGwgcmV0ID0gKFNFSVJMYWJlbFZhbHVlSW1wbClyZXR1cm5WYWx1ZTsKKwkJcmV0LnNldFMoZGVsdGFTKTsKKwkJcmV0LnNldEUoZGVsdGFFKTsKKwkJcmV0LnNldEkoZGVsdGFJKTsKKwkJcmV0LnNldEluY2lkZW5jZShudW1iZXJPZlN1c2NlcHRpYmxlVG9FeHBvc2VkKTsKKwkJcmV0LnNldFIoZGVsdGFSKTsKKwkJcmV0LnNldERpc2Vhc2VEZWF0aHMoMCk7CisJCXJldHVybiByZXQ7CisJCisJfSAvLyBjb21wdXRlRGlzZWFzZURlbHRhcworCQorCUBPdmVycmlkZQorCXB1YmxpYyBib29sZWFuIGlzRGV0ZXJtaW5pc3RpYygpIHsKKwkJcmV0dXJuIGZhbHNlOworCX0KKwkKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgRUNsYXNzIGVTdGF0aWNDbGFzcygpIHsKKwkJcmV0dXJuIFN0YW5kYXJkUGFja2FnZS5MaXRlcmFscy5TVE9DSEFTVElDX1BPSVNTT05fU0VJUl9ESVNFQVNFX01PREVMOworCX0KKworCXB1YmxpYyB2b2lkIGRvTW9kZWxTcGVjaWZpY0FkanVzdG1lbnRzKExhYmVsVmFsdWUgbGFiZWwpIHsKKwkJLy8gVE9ETyBBdXRvLWdlbmVyYXRlZCBtZXRob2Qgc3R1YgorCQkKKwl9CisKKwkKK30gLy9TdG9jaGFzdGljUG9pc3NvblNFSVJEaXNlYXNlTW9kZWxJbXBsCmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3N0YW5kYXJkL2ltcGwvU3RvY2hhc3RpY1BvaXNzb25TSURpc2Vhc2VNb2RlbEltcGwuamF2YSBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvc3RhbmRhcmQvaW1wbC9TdG9jaGFzdGljUG9pc3NvblNJRGlzZWFzZU1vZGVsSW1wbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlkZmI3NTYKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3N0YW5kYXJkL2ltcGwvU3RvY2hhc3RpY1BvaXNzb25TSURpc2Vhc2VNb2RlbEltcGwuamF2YQpAQCAtMCwwICsxLDEyNCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAxMCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5pbXBsOworCitpbXBvcnQgamF2YS51dGlsLlJhbmRvbTsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkxhYmVsVmFsdWU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1hdGguQmlub21pYWxEaXN0cmlidXRpb25VdGlsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5TVEVNVGltZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU0lMYWJlbFZhbHVlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsVmFsdWU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RvY2hhc3RpY1BvaXNzb25TSURpc2Vhc2VNb2RlbDsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPlN0b2NoYXN0aWMgUG9pc3NvbiBTSSBEaXNlYXNlIE1vZGVsPC9iPjwvZW0+Jy4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogPHA+CisgKiA8L3A+CisgKgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgU3RvY2hhc3RpY1BvaXNzb25TSURpc2Vhc2VNb2RlbEltcGwgZXh0ZW5kcyBTSUltcGwgaW1wbGVtZW50cyBTdG9jaGFzdGljUG9pc3NvblNJRGlzZWFzZU1vZGVsIHsKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJcHVibGljIFN0b2NoYXN0aWNQb2lzc29uU0lEaXNlYXNlTW9kZWxJbXBsKCkgeworCQlzdXBlcigpOworCX0KKworCXByaXZhdGUgUmFuZG9tIHJhbmQgPSBuZXcgUmFuZG9tKCk7CisJCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuaW1wbC5TdGFuZGFyZERpc2Vhc2VNb2RlbEltcGwjY29tcHV0ZVRyYW5zaXRpb25zKG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsVmFsdWUsCisJICogICAgICBsb25nLCBkb3VibGUsIGxvbmcpCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIFN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZSBjb21wdXRlRGlzZWFzZURlbHRhcygKKwkJCWZpbmFsIFNURU1UaW1lIHRpbWUsCisJCQlmaW5hbCBTdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsVmFsdWUgY3VycmVudFN0YXRlLAorCQkJZmluYWwgU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbCBkaXNlYXNlTGFiZWwsIGZpbmFsIGxvbmcgdGltZURlbHRhLCBEaXNlYXNlTW9kZWxMYWJlbFZhbHVlIHJldHVyblZhbHVlKSB7CisJCSAKKwkJZmluYWwgU0lMYWJlbFZhbHVlIGN1cnJlbnRTSSA9IChTSUxhYmVsVmFsdWUpIGN1cnJlbnRTdGF0ZTsKKwkJCisJCS8vIFRoaXMgaXMgYmV0YSoKKwkJZG91YmxlIHRyYW5zbWlzc2lvblJhdGUgPSBnZXRBZGp1c3RlZFRyYW5zbWlzc2lvblJhdGUodGltZURlbHRhKTsKKwkJCQkKKwkJaWYoIXRoaXMuaXNGcmVxdWVuY3lEZXBlbmRlbnQoKSkgdHJhbnNtaXNzaW9uUmF0ZSAqPSBnZXRUcmFuc21pc3Npb25SYXRlU2NhbGVGYWN0b3IoZGlzZWFzZUxhYmVsKTsKKworCQkvLyBUaGUgZWZmZWN0aXZlIEluZmVjdGlvdXMgcG9wdWxhdGlvbiAgaXMgYSBkaW1lbnNpb25sZXMgbnVtYmVyIG5vcm1hbGl6ZSBieSB0b3RhbAorCQkvLyBwb3B1bGF0aW9uIHVzZWQgaW4gdGVoIGNvbXB1dGF0aW9uIG9mIGJldHMqUyppIHdoZXJlIGkgPSBJZWZmZWN0aXZlL1BvcC4KKwkJLy8gVGhpcyBpbmNsdWRlcyBhIGNvcnJlY3Rpb24gdG8gdGhlIGN1cnJlbnQKKwkJLy8gaW5mZWN0aW91cyBwb3B1bGF0aW9uIChJZWZmZWN0aXZlKSBiYXNlZCBvbiB0aGUgY29uc2VydmVkIGV4Y2hhbmdlIG9mIHBlb3BsZSAoY2lyY3VsYXRpb24pCisJCS8vIGJldHdlZW4gcmVnaW9ucy4gTm90ZSB0aGF0IHRoaXMgaXMgbm8gdGhlICJhcnJpdmFscyIgYW5kICJkZXBhcnR1cmVzIiB3aGljaCBhcmUKKwkJLy8gYSBkaWZmZXJlbnQgcHJvY2Vzcy4KKwkJZmluYWwgZG91YmxlIGVmZmVjdGl2ZUluZmVjdGlvdXMgPSBnZXROb3JtYWxpemVkRWZmZWN0aXZlSW5mZWN0aW91cyhkaXNlYXNlTGFiZWwuZ2V0Tm9kZSgpLCBkaXNlYXNlTGFiZWwsIGN1cnJlbnRTSS5nZXRJKCkpOworCisJCWludCBTID0gKGludCljdXJyZW50U0kuZ2V0UygpOworCQlkb3VibGUgcHJvYiA9IDAuMDsKKwkJaWYoZ2V0Tm9uTGluZWFyaXR5Q29lZmZpY2llbnQoKSAhPSAxLjAgJiYgZWZmZWN0aXZlSW5mZWN0aW91cyA+PSAwLjApCisJCQlwcm9iID0gdHJhbnNtaXNzaW9uUmF0ZSAqIE1hdGgucG93KGVmZmVjdGl2ZUluZmVjdGlvdXMsIGdldE5vbkxpbmVhcml0eUNvZWZmaWNpZW50KCkpOworCQllbHNlCisJCQlwcm9iID0gdHJhbnNtaXNzaW9uUmF0ZSAqIGVmZmVjdGl2ZUluZmVjdGlvdXM7CisJICAgIGRvdWJsZSBybmRWYXIgPSByYW5kLm5leHREb3VibGUoKTsKKwkgICAgaW50IHBpY2tOID0gMDsKKwkgICAgcGlja04gPSBCaW5vbWlhbERpc3RyaWJ1dGlvblV0aWwuZmFzdFBpY2tGcm9tQmlub21pYWxEaXN0KHByb2IsIFMsIHJuZFZhcik7CisJICAgIAkgIAorCQkvLyBNb3ZlIHBpY2tLIGZyb20gUyB0byBJOworCQkKKwkJZG91YmxlIG51bWJlck9mU3VzY2VwdGlibGVUb0luZmVjdGVkID0gcGlja047CisJCQorCQlkb3VibGUgbnVtYmVyT2ZJbmZlY3RlZFRvU3VzY2VwdGlibGUgPSBnZXRBZGp1c3RlZFJlY292ZXJ5UmF0ZSh0aW1lRGVsdGEpCisJCQkJKiBjdXJyZW50U0kuZ2V0SSgpOworCQkKKwkKKwkJLy8gRGV0ZXJtaW5lIGRlbHRhIFMKKwkJZmluYWwgZG91YmxlIGRlbHRhUyA9IC0gbnVtYmVyT2ZTdXNjZXB0aWJsZVRvSW5mZWN0ZWQgKyBudW1iZXJPZkluZmVjdGVkVG9TdXNjZXB0aWJsZTsKKwkJLy8gRGV0ZXJtaW5lIGRlbHRhIEkKKwkJZmluYWwgZG91YmxlIGRlbHRhSSA9IG51bWJlck9mU3VzY2VwdGlibGVUb0luZmVjdGVkIC0gbnVtYmVyT2ZJbmZlY3RlZFRvU3VzY2VwdGlibGU7CQorCQorCQlTSUxhYmVsVmFsdWVJbXBsIHJldCA9IChTSUxhYmVsVmFsdWVJbXBsKXJldHVyblZhbHVlOworCQlyZXQuc2V0UyhkZWx0YVMpOworCQlyZXQuc2V0SShkZWx0YUkpOworCQlyZXQuc2V0SW5jaWRlbmNlKG51bWJlck9mU3VzY2VwdGlibGVUb0luZmVjdGVkKTsKKwkJcmV0LnNldERpc2Vhc2VEZWF0aHMoMC4wKTsKKwkJcmV0dXJuIHJldDsKKwl9IC8vIGNvbXB1dGVEaXNlYXNlRGVsdGFzCisJCisJCSAKKwkJIHB1YmxpYyB2b2lkIGRvTW9kZWxTcGVjaWZpY0FkanVzdG1lbnRzKExhYmVsVmFsdWUgbGFiZWwpIHsKKwkJCQkvLyBUT0RPIEF1dG8tZ2VuZXJhdGVkIG1ldGhvZCBzdHViCisJCQkJCisJCQl9CisJCSAKKwkgQE92ZXJyaWRlCisJCXB1YmxpYyBib29sZWFuIGlzRGV0ZXJtaW5pc3RpYygpIHsKKwkJCXJldHVybiBmYWxzZTsKKwkJfQorCSAKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgRUNsYXNzIGVTdGF0aWNDbGFzcygpIHsKKwkJcmV0dXJuIFN0YW5kYXJkUGFja2FnZS5MaXRlcmFscy5TVE9DSEFTVElDX1BPSVNTT05fU0lfRElTRUFTRV9NT0RFTDsKKwl9CisKK30gLy9TdG9jaGFzdGljUG9pc3NvblNJRGlzZWFzZU1vZGVsSW1wbApkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9zdGFuZGFyZC9pbXBsL1N0b2NoYXN0aWNQb2lzc29uU0lSRGlzZWFzZU1vZGVsSW1wbC5qYXZhIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9zdGFuZGFyZC9pbXBsL1N0b2NoYXN0aWNQb2lzc29uU0lSRGlzZWFzZU1vZGVsSW1wbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVhOTdjZmEKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3N0YW5kYXJkL2ltcGwvU3RvY2hhc3RpY1BvaXNzb25TSVJEaXNlYXNlTW9kZWxJbXBsLmphdmEKQEAgLTAsMCArMSwxMzkgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTAgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuaW1wbDsKKworaW1wb3J0IGphdmEudXRpbC5SYW5kb207CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5MYWJlbFZhbHVlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tYXRoLkJpbm9taWFsRGlzdHJpYnV0aW9uVXRpbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuU1RFTVRpbWU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLkRpc2Vhc2VNb2RlbExhYmVsVmFsdWU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlNJUkxhYmVsVmFsdWU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmRQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdG9jaGFzdGljUG9pc3NvblNJUkRpc2Vhc2VNb2RlbDsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPlN0b2NoYXN0aWMgUG9pc3NvbiBTSVIgRGlzZWFzZSBNb2RlbDwvYj48L2VtPicuCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIDxwPgorICogPC9wPgorICoKKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIFN0b2NoYXN0aWNQb2lzc29uU0lSRGlzZWFzZU1vZGVsSW1wbCBleHRlbmRzIFNJUkltcGwgaW1wbGVtZW50cyBTdG9jaGFzdGljUG9pc3NvblNJUkRpc2Vhc2VNb2RlbCB7CisJcHJpdmF0ZSBSYW5kb20gcmFuZCA9IG5ldyBSYW5kb20oKTsKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJcHVibGljIFN0b2NoYXN0aWNQb2lzc29uU0lSRGlzZWFzZU1vZGVsSW1wbCgpIHsKKwkJc3VwZXIoKTsKKwl9CisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5pbXBsLlNJSW1wbCNjb21wdXRlVHJhbnNpdGlvbnMoU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbFZhbHVlLAorCSAqICAgICAgU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbCwgbG9uZykKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbFZhbHVlIGNvbXB1dGVEaXNlYXNlRGVsdGFzKAorCQkJZmluYWwgU1RFTVRpbWUgdGltZSwgCisJCQlmaW5hbCBTdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsVmFsdWUgY3VycmVudFN0YXRlLAorCQkJZmluYWwgU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbCBkaXNlYXNlTGFiZWwsIGZpbmFsIGxvbmcgdGltZURlbHRhLCBEaXNlYXNlTW9kZWxMYWJlbFZhbHVlIHJldHVyblZhbHVlKSB7CisJCWZpbmFsIFNJUkxhYmVsVmFsdWUgY3VycmVudFNJUiA9IChTSVJMYWJlbFZhbHVlKSBjdXJyZW50U3RhdGU7CisJCQorCQkvLyBUaGlzIGlzIGJldGEqCisJCWRvdWJsZSB0cmFuc21pc3Npb25SYXRlID0gZ2V0QWRqdXN0ZWRUcmFuc21pc3Npb25SYXRlKHRpbWVEZWx0YSk7CisJCQkJCisJCWlmKCF0aGlzLmlzRnJlcXVlbmN5RGVwZW5kZW50KCkpIHRyYW5zbWlzc2lvblJhdGUgKj0gZ2V0VHJhbnNtaXNzaW9uUmF0ZVNjYWxlRmFjdG9yKGRpc2Vhc2VMYWJlbCk7CisKKwkJLy8gVGhlIGVmZmVjdGl2ZSBJbmZlY3Rpb3VzIHBvcHVsYXRpb24gIGlzIGEgZGltZW5zaW9ubGVzIG51bWJlciBub3JtYWxpemUgYnkgdG90YWwKKwkJLy8gcG9wdWxhdGlvbiB1c2VkIGluIHRlaCBjb21wdXRhdGlvbiBvZiBiZXRzKlMqaSB3aGVyZSBpID0gSWVmZmVjdGl2ZS9Qb3AuCisJCS8vIFRoaXMgaW5jbHVkZXMgYSBjb3JyZWN0aW9uIHRvIHRoZSBjdXJyZW50CisJCS8vIGluZmVjdGlvdXMgcG9wdWxhdGlvbiAoSWVmZmVjdGl2ZSkgYmFzZWQgb24gdGhlIGNvbnNlcnZlZCBleGNoYW5nZSBvZiBwZW9wbGUgKGNpcmN1bGF0aW9uKQorCQkvLyBiZXR3ZWVuIHJlZ2lvbnMuIE5vdGUgdGhhdCB0aGlzIGlzIG5vIHRoZSAiYXJyaXZhbHMiIGFuZCAiZGVwYXJ0dXJlcyIgd2hpY2ggYXJlCisJCS8vIGEgZGlmZmVyZW50IHByb2Nlc3MuCisJCWZpbmFsIGRvdWJsZSBlZmZlY3RpdmVJbmZlY3Rpb3VzID0gZ2V0Tm9ybWFsaXplZEVmZmVjdGl2ZUluZmVjdGlvdXMoZGlzZWFzZUxhYmVsLmdldE5vZGUoKSwgZGlzZWFzZUxhYmVsLCBjdXJyZW50U0lSLmdldEkoKSk7CisKKwkJLyoKKwkJICogQ29tcHV0ZSBzdGF0ZSB0cmFuc2l0aW9ucworCQkgKiAKKwkJICogUmVnYXJkaW5nIGNvbXB1dGluZyB0aGUgbnVtYmVyIG9mIHRyYW5zaXRpb25zIGZyb20gU3VzY2VwdGlibGUgdG8gRXhwb3NlZDoKKwkJICogSW4gYSBsaW5lYXIgbW9kZWwgdGhlICJlZmZlY3RpdmUiIG51bWJlciBvZiBpbmZlY3Rpb3VzIHBlb3BsZSBpcyBqdXN0CisJCSAqIHRoZSBudW1iZXIgb2YgaW5mZWN0aW91cyBwZW9wbGUgSW4gYSBub25saW5lYXIgbW9kZWwgd2UgaGF2ZSBhCisJCSAqIG5vbkxpbmVhcml0eSBleHBvbmVudCB0aGF0IGlzID4gMSB0aGlzIG1vZGVscyB0aGUgZWZmZWN0IG9mIGltbXVuZQorCQkgKiBzeXN0ZW0gc2F0dXJhdGlvbiB3aGVuIFN1c2NlcHRpYmxlIHBlb3BsZSBhcmUgZXhwb3NlZCB0byBsYXJnZQorCQkgKiBudW1iZXJzIG9mIGluZmVjdGlvdXMgcGVvcGxlLiB0aGVuIHRoZSAiZWZmZWN0aXZlIiBudW1iZXIgb2YKKwkJICogaW5mZWN0aW91cyBwZW9wbGUgaXMgSV5ub25MaW5lYXJpdHkgZXhwb25lbnQgdG8gYWxsb3cgZm9yIGVpdGhlcgorCQkgKiBsaW5lYXIgb3Igbm9ubGluZWFyIG1vZGVscyB3ZSBhbHdheXMgY2FsY3VsYXRlIElebm9uTGluZWFyaXR5CisJCSAqIGV4cG9uZW50IGFuZCBhbGxvdyBub25MaW5lYXJpdHkgZXhwb25lbnQgPj0gMS4wCisJCSAqLworCQlkb3VibGUgbnVtYmVyT2ZJbmZlY3RlZFRvUmVjb3ZlcmVkID0gZ2V0QWRqdXN0ZWRSZWNvdmVyeVJhdGUodGltZURlbHRhKQorCQkqIGN1cnJlbnRTSVIuZ2V0SSgpOworCQlkb3VibGUgbnVtYmVyT2ZSZWNvdmVyZWRUb1N1c2NlcHRpYmxlID0gZ2V0QWRqdXN0ZWRJbW11bml0eUxvc3NSYXRlKHRpbWVEZWx0YSkKKwkJKiBjdXJyZW50U0lSLmdldFIoKTsKKwkJCisJCWludCBTID0gKGludCljdXJyZW50U0lSLmdldFMoKTsKKwkJZG91YmxlIHByb2IgPSAwLjA7CisJCWlmKGdldE5vbkxpbmVhcml0eUNvZWZmaWNpZW50KCkgIT0gMS4wICYmIGVmZmVjdGl2ZUluZmVjdGlvdXMgPj0gMC4wKQorCQkJcHJvYiA9IHRyYW5zbWlzc2lvblJhdGUgKiBNYXRoLnBvdyhlZmZlY3RpdmVJbmZlY3Rpb3VzLCBnZXROb25MaW5lYXJpdHlDb2VmZmljaWVudCgpKTsKKwkJZWxzZQorCQkJcHJvYiA9IHRyYW5zbWlzc2lvblJhdGUgKiBlZmZlY3RpdmVJbmZlY3Rpb3VzOworCSAgICBkb3VibGUgcm5kVmFyID0gcmFuZC5uZXh0RG91YmxlKCk7CisJICAgIGludCBwaWNrTiA9IDA7CisJICAgIHBpY2tOID0gQmlub21pYWxEaXN0cmlidXRpb25VdGlsLmZhc3RQaWNrRnJvbUJpbm9taWFsRGlzdChwcm9iLCBTLCBybmRWYXIpOworCSAgICAJICAKKwkJLy8gTW92ZSBwaWNrSyBmcm9tIFMgdG8gSTsKKwkJCisJCWRvdWJsZSBudW1iZXJPZlN1c2NlcHRpYmxlVG9JbmZlY3RlZCA9IHBpY2tOOworCQkKKwkJLy8gRGV0ZXJtaW5lIGRlbHRhIFMKKwkJZmluYWwgZG91YmxlIGRlbHRhUyA9IG51bWJlck9mUmVjb3ZlcmVkVG9TdXNjZXB0aWJsZSAtIG51bWJlck9mU3VzY2VwdGlibGVUb0luZmVjdGVkOworCQkJLy8gRGV0ZXJtaW5lIGRlbHRhIEkKKwkJZmluYWwgZG91YmxlIGRlbHRhSSA9IG51bWJlck9mU3VzY2VwdGlibGVUb0luZmVjdGVkLSBudW1iZXJPZkluZmVjdGVkVG9SZWNvdmVyZWQ7CisJCS8vIERldGVybWluZSBkZWx0YSBSCisJCWZpbmFsIGRvdWJsZSBkZWx0YVIgPSBudW1iZXJPZkluZmVjdGVkVG9SZWNvdmVyZWQgLSBudW1iZXJPZlJlY292ZXJlZFRvU3VzY2VwdGlibGU7CisJCQorCQlTSVJMYWJlbFZhbHVlSW1wbCByZXQgPSAoU0lSTGFiZWxWYWx1ZUltcGwpcmV0dXJuVmFsdWU7CisJCXJldC5zZXRTKGRlbHRhUyk7CisJCXJldC5zZXRJKGRlbHRhSSk7CisJCXJldC5zZXRJbmNpZGVuY2UobnVtYmVyT2ZJbmZlY3RlZFRvUmVjb3ZlcmVkKTsKKwkJcmV0LnNldFIoZGVsdGFSKTsKKwkJcmV0LnNldERpc2Vhc2VEZWF0aHMoMCk7CisJCXJldHVybiByZXQ7CisJCQorCX0gLy8gY29tcHV0ZVRyYW5zaXRpb25zCisJCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIEVDbGFzcyBlU3RhdGljQ2xhc3MoKSB7CisJCXJldHVybiBTdGFuZGFyZFBhY2thZ2UuTGl0ZXJhbHMuU1RPQ0hBU1RJQ19QT0lTU09OX1NJUl9ESVNFQVNFX01PREVMOworCX0KKworCXB1YmxpYyB2b2lkIGRvTW9kZWxTcGVjaWZpY0FkanVzdG1lbnRzKExhYmVsVmFsdWUgbGFiZWwpIHsKKwkJLy8gVE9ETyBBdXRvLWdlbmVyYXRlZCBtZXRob2Qgc3R1YgorCQkKKwl9CisKKwlAT3ZlcnJpZGUKKwlwdWJsaWMgYm9vbGVhbiBpc0RldGVybWluaXN0aWMoKSB7CisJCXJldHVybiBmYWxzZTsKKwl9CisJCit9IC8vU3RvY2hhc3RpY1BvaXNzb25TSVJEaXNlYXNlTW9kZWxJbXBsCmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3N0YW5kYXJkL2ltcGwvU3RvY2hhc3RpY1NFSVJEaXNlYXNlTW9kZWxJbXBsLmphdmEgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3N0YW5kYXJkL2ltcGwvU3RvY2hhc3RpY1NFSVJEaXNlYXNlTW9kZWxJbXBsLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTg4ODFjNgotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvc3RhbmRhcmQvaW1wbC9TdG9jaGFzdGljU0VJUkRpc2Vhc2VNb2RlbEltcGwuamF2YQpAQCAtMCwwICsxLDM3MCBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuaW1wbDsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqYXZhLnV0aWwuUmFuZG9tOworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLmltcGwuRU5vdGlmaWNhdGlvbkltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkxhYmVsVmFsdWU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlNJTGFiZWxWYWx1ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmRGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZFBhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkU3RvY2hhc3RpY0Rpc2Vhc2VNb2RlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RvY2hhc3RpY0Rpc2Vhc2VNb2RlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RvY2hhc3RpY1NFSVJEaXNlYXNlTW9kZWw7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPlN0b2NoYXN0aWMgU0VJUiBEaXNlYXNlIE1vZGVsPC9iPjwvZW0+Jy4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogPHA+CisgKiBUaGUgZm9sbG93aW5nIGZlYXR1cmVzIGFyZSBpbXBsZW1lbnRlZDoKKyAqIDx1bD4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuaW1wbC5TdG9jaGFzdGljU0VJUkRpc2Vhc2VNb2RlbEltcGwjZ2V0U2VlZCA8ZW0+U2VlZDwvZW0+fTwvbGk+CisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLmltcGwuU3RvY2hhc3RpY1NFSVJEaXNlYXNlTW9kZWxJbXBsI2dldFJhbmRvbUdlbmVyYXRvciA8ZW0+UmFuZG9tIEdlbmVyYXRvcjwvZW0+fTwvbGk+CisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLmltcGwuU3RvY2hhc3RpY1NFSVJEaXNlYXNlTW9kZWxJbXBsI2dldEdhaW4gPGVtPkdhaW48L2VtPn08L2xpPgorICogPC91bD4KKyAqIDwvcD4KKyAqCisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBTdG9jaGFzdGljU0VJUkRpc2Vhc2VNb2RlbEltcGwgZXh0ZW5kcyBTRUlSSW1wbCBpbXBsZW1lbnRzCisJCVN0b2NoYXN0aWNTRUlSRGlzZWFzZU1vZGVsIHsKKworCS8qKgorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRTZWVkKCkgPGVtPlNlZWQ8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI2dldFNlZWQoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgbG9uZyBTRUVEX0VERUZBVUxUID0gMEw7CisJLyoqCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0U2VlZCgpIDxlbT5TZWVkPC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNnZXRTZWVkKCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgbG9uZyBzZWVkID0gU0VFRF9FREVGQVVMVDsKKwkKKwkvKioKKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0UmFuZG9tR2VuZXJhdG9yKCkgPGVtPlJhbmRvbSBHZW5lcmF0b3I8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI2dldFJhbmRvbUdlbmVyYXRvcigpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBSYW5kb20gUkFORE9NX0dFTkVSQVRPUl9FREVGQVVMVCA9IChSYW5kb20pU3RhbmRhcmRGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVGcm9tU3RyaW5nKFN0YW5kYXJkUGFja2FnZS5lSU5TVEFOQ0UuZ2V0UmFuZG9tKCksICIwIik7CisJLyoqCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0UmFuZG9tR2VuZXJhdG9yKCkgPGVtPlJhbmRvbSBHZW5lcmF0b3I8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI2dldFJhbmRvbUdlbmVyYXRvcigpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIFJhbmRvbSByYW5kb21HZW5lcmF0b3IgPSBSQU5ET01fR0VORVJBVE9SX0VERUZBVUxUOworCS8qKgorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRHYWluKCkgPGVtPkdhaW48L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI2dldEdhaW4oKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgZG91YmxlIEdBSU5fRURFRkFVTFQgPSAwLjAxOworCS8qKgorCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldEdhaW4oKSA8ZW0+R2FpbjwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZ2V0R2FpbigpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIGRvdWJsZSBnYWluID0gR0FJTl9FREVGQVVMVDsKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogCisJICogVGhlIGNvbnN0cnVjdG9yIG5lZWRzIHRvIGJlIHB1YmxpYyBzbyB0aGF0IHRoZSBuZXcgZGlzZWFzZSB3aXphcmQgY2FuCisJICogY3JlYXRlIGFuIGluc3RhbmNlIG9mIHRoZSBjbGFzcyB3aXRob3V0IHVzaW5nIHRoZSBmYWN0b3J5LgorCSAqIAorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJcHVibGljIFN0b2NoYXN0aWNTRUlSRGlzZWFzZU1vZGVsSW1wbCgpIHsKKwkJc3VwZXIoKTsKKwl9CisKKwkvKioKKwkgKiBNb2RlbFNwZWNpZmljQWRqdXN0bWVudHMgZm9yIGEgU3RvY2hhc3RpYyBtb2RlbCBhZGRzIG5vaXNlIHRvCisJICogdGhlIEkgc3RhdGUuIEl0IHdpbGwgYmUgcHJvcGFnYXRlZCB0byBvdGhlciBzdGF0ZXMgYXV0b21hdGljYWxseQorCSAqIAorCSAqLworCQorCXB1YmxpYyB2b2lkIGRvTW9kZWxTcGVjaWZpY0FkanVzdG1lbnRzKAorCQkJZmluYWwgTGFiZWxWYWx1ZSBzdGF0ZSkgeworCQlmaW5hbCBTSUxhYmVsVmFsdWUgY3VycmVudFNJID0gKFNJTGFiZWxWYWx1ZSkgc3RhdGU7CisJCS8vZG91YmxlIG9sZEkgPSBjdXJyZW50U0kuZ2V0SSgpOworCQlkb3VibGUgaW5jaWRlbmNlID0gY3VycmVudFNJLmdldEluY2lkZW5jZSgpOworCQlkb3VibGUgbmV3SW5jaWRlbmNlID0gaW5jaWRlbmNlKmNvbXB1dGVOb2lzZSgpOworCQlkb3VibGUgZGlmZiA9IG5ld0luY2lkZW5jZSAtIGluY2lkZW5jZTsgCisJCQorCQlkb3VibGUgbmV3SSA9IGN1cnJlbnRTSS5nZXRJKCkgKyBkaWZmOworCQlkb3VibGUgbmV3UyA9IGN1cnJlbnRTSS5nZXRTKCkgLSBkaWZmOworCQlpZihuZXdJIDwgMC4wKSB7CisJCQlkb3VibGUgc2NhbGUgPSAoLW5ld0kpIC8gY3VycmVudFNJLmdldEkoKTsKKwkJCWlmKERvdWJsZS5pc0luZmluaXRlKHNjYWxlKSkKKwkJCQlzY2FsZSA9IDAuMDsgLy8gY2FuY2VsIG5vaXNlIGlmIDAKKwkJCWRpZmYgPSBkaWZmICogc2NhbGU7CisJCQluZXdJID0gY3VycmVudFNJLmdldEkoKSArIGRpZmY7IC8vIDAKKwkJCW5ld1MgPSBjdXJyZW50U0kuZ2V0UygpIC0gZGlmZjsKKwkJfQorCQlpZihuZXdTIDwgMC4wKSB7CisJCQlkb3VibGUgc2NhbGUgPSAoLW5ld1MpIC8gY3VycmVudFNJLmdldFMoKTsKKwkJCWlmKERvdWJsZS5pc0luZmluaXRlKHNjYWxlKSkKKwkJCQlzY2FsZSA9IDAuMDsgLy8gY2FuY2VsIG5vaXNlIGlmIDAKKwkJCWRpZmYgPSBkaWZmICogc2NhbGU7CisJCQluZXdJID0gY3VycmVudFNJLmdldEkoKSArIGRpZmY7CisJCQluZXdTID0gY3VycmVudFNJLmdldFMoKSAtIGRpZmY7IC8vIDAKKwkJfQorCQluZXdJbmNpZGVuY2UgPSBpbmNpZGVuY2UgKyBkaWZmOworCQljdXJyZW50U0kuc2V0UyhuZXdTKTsKKwkJY3VycmVudFNJLnNldEkobmV3SSk7CisJCWN1cnJlbnRTSS5zZXRJbmNpZGVuY2UobmV3SW5jaWRlbmNlKTsgCisJCXJldHVybjsKKwl9IC8vIGRvTW9kZWxTcGVjaWZpY0FkanVzdG1lbnRzCisJCisJCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCBFQ2xhc3MgZVN0YXRpY0NsYXNzKCkgeworCQlyZXR1cm4gU3RhbmRhcmRQYWNrYWdlLkxpdGVyYWxzLlNUT0NIQVNUSUNfU0VJUl9ESVNFQVNFX01PREVMOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBsb25nIGdldFNlZWQoKSB7CisJCXJldHVybiBzZWVkOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRTZWVkKGxvbmcgbmV3U2VlZCkgeworCQlsb25nIG9sZFNlZWQgPSBnZXRTZWVkKCk7CisJCXNlZWQgPSBuZXdTZWVkOworCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpCisJCQllTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBTdGFuZGFyZFBhY2thZ2UuU1RPQ0hBU1RJQ19TRUlSX0RJU0VBU0VfTU9ERUxfX1NFRUQsIG9sZFNlZWQsIGdldFNlZWQoKSkpOworCQlnZXRSYW5kb21HZW5lcmF0b3IoKS5zZXRTZWVkKG5ld1NlZWQpOworCX0gLy8gc2V0U2VlZAorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFJhbmRvbSBnZXRSYW5kb21HZW5lcmF0b3IoKSB7CisJCXJldHVybiByYW5kb21HZW5lcmF0b3I7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIGRvdWJsZSBnZXRHYWluKCkgeworCQlyZXR1cm4gZ2FpbjsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRHYWluKGRvdWJsZSBuZXdHYWluKSB7CisJCWRvdWJsZSBvbGRHYWluID0gZ2FpbjsKKwkJZ2FpbiA9IG5ld0dhaW47CisJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkKKwkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIFN0YW5kYXJkUGFja2FnZS5TVE9DSEFTVElDX1NFSVJfRElTRUFTRV9NT0RFTF9fR0FJTiwgb2xkR2FpbiwgZ2FpbikpOworCX0KKworCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBCeSBkZWZhdWx0IHRoaXMgY2FsbHMgdGhlIHN0YXRpYyBtZXRob2QgU3RhbmRhcmRTdG9jaGFzdGljRGlzZWFzZU1vZGVsSW1wbC5jb21wdXRlTm9pc2UoZ2FpbiwgcmFuZCkKKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCXB1YmxpYyBkb3VibGUgY29tcHV0ZU5vaXNlKCkgeworCQlyZXR1cm4gU3RhbmRhcmRTdG9jaGFzdGljRGlzZWFzZU1vZGVsSW1wbC5jb21wdXRlTm9pc2UoZ2V0R2FpbigpLCBnZXRSYW5kb21HZW5lcmF0b3IoKSk7CisJfQorCQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIE9iamVjdCBlR2V0KGludCBmZWF0dXJlSUQsIGJvb2xlYW4gcmVzb2x2ZSwgYm9vbGVhbiBjb3JlVHlwZSkgeworCQlzd2l0Y2ggKGZlYXR1cmVJRCkgeworCQkJY2FzZSBTdGFuZGFyZFBhY2thZ2UuU1RPQ0hBU1RJQ19TRUlSX0RJU0VBU0VfTU9ERUxfX1NFRUQ6CisJCQkJcmV0dXJuIGdldFNlZWQoKTsKKwkJCWNhc2UgU3RhbmRhcmRQYWNrYWdlLlNUT0NIQVNUSUNfU0VJUl9ESVNFQVNFX01PREVMX19SQU5ET01fR0VORVJBVE9SOgorCQkJCXJldHVybiBnZXRSYW5kb21HZW5lcmF0b3IoKTsKKwkJCWNhc2UgU3RhbmRhcmRQYWNrYWdlLlNUT0NIQVNUSUNfU0VJUl9ESVNFQVNFX01PREVMX19HQUlOOgorCQkJCXJldHVybiBnZXRHYWluKCk7CisJCX0KKwkJcmV0dXJuIHN1cGVyLmVHZXQoZmVhdHVyZUlELCByZXNvbHZlLCBjb3JlVHlwZSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgZVNldChpbnQgZmVhdHVyZUlELCBPYmplY3QgbmV3VmFsdWUpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJCWNhc2UgU3RhbmRhcmRQYWNrYWdlLlNUT0NIQVNUSUNfU0VJUl9ESVNFQVNFX01PREVMX19TRUVEOgorCQkJCXNldFNlZWQoKExvbmcpbmV3VmFsdWUpOworCQkJCXJldHVybjsKKwkJCWNhc2UgU3RhbmRhcmRQYWNrYWdlLlNUT0NIQVNUSUNfU0VJUl9ESVNFQVNFX01PREVMX19HQUlOOgorCQkJCXNldEdhaW4oKERvdWJsZSluZXdWYWx1ZSk7CisJCQkJcmV0dXJuOworCQl9CisJCXN1cGVyLmVTZXQoZmVhdHVyZUlELCBuZXdWYWx1ZSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgZVVuc2V0KGludCBmZWF0dXJlSUQpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJCWNhc2UgU3RhbmRhcmRQYWNrYWdlLlNUT0NIQVNUSUNfU0VJUl9ESVNFQVNFX01PREVMX19TRUVEOgorCQkJCXNldFNlZWQoU0VFRF9FREVGQVVMVCk7CisJCQkJcmV0dXJuOworCQkJY2FzZSBTdGFuZGFyZFBhY2thZ2UuU1RPQ0hBU1RJQ19TRUlSX0RJU0VBU0VfTU9ERUxfX0dBSU46CisJCQkJc2V0R2FpbihHQUlOX0VERUZBVUxUKTsKKwkJCQlyZXR1cm47CisJCX0KKwkJc3VwZXIuZVVuc2V0KGZlYXR1cmVJRCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIGJvb2xlYW4gZUlzU2V0KGludCBmZWF0dXJlSUQpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJCWNhc2UgU3RhbmRhcmRQYWNrYWdlLlNUT0NIQVNUSUNfU0VJUl9ESVNFQVNFX01PREVMX19TRUVEOgorCQkJCXJldHVybiBzZWVkICE9IFNFRURfRURFRkFVTFQ7CisJCQljYXNlIFN0YW5kYXJkUGFja2FnZS5TVE9DSEFTVElDX1NFSVJfRElTRUFTRV9NT0RFTF9fUkFORE9NX0dFTkVSQVRPUjoKKwkJCQlyZXR1cm4gUkFORE9NX0dFTkVSQVRPUl9FREVGQVVMVCA9PSBudWxsID8gcmFuZG9tR2VuZXJhdG9yICE9IG51bGwgOiAhUkFORE9NX0dFTkVSQVRPUl9FREVGQVVMVC5lcXVhbHMocmFuZG9tR2VuZXJhdG9yKTsKKwkJCWNhc2UgU3RhbmRhcmRQYWNrYWdlLlNUT0NIQVNUSUNfU0VJUl9ESVNFQVNFX01PREVMX19HQUlOOgorCQkJCXJldHVybiBnYWluICE9IEdBSU5fRURFRkFVTFQ7CisJCX0KKwkJcmV0dXJuIHN1cGVyLmVJc1NldChmZWF0dXJlSUQpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBpbnQgZUJhc2VTdHJ1Y3R1cmFsRmVhdHVyZUlEKGludCBkZXJpdmVkRmVhdHVyZUlELCBDbGFzczw/PiBiYXNlQ2xhc3MpIHsKKwkJaWYgKGJhc2VDbGFzcyA9PSBTdG9jaGFzdGljRGlzZWFzZU1vZGVsLmNsYXNzKSB7CisJCQlzd2l0Y2ggKGRlcml2ZWRGZWF0dXJlSUQpIHsKKwkJCQljYXNlIFN0YW5kYXJkUGFja2FnZS5TVE9DSEFTVElDX1NFSVJfRElTRUFTRV9NT0RFTF9fU0VFRDogcmV0dXJuIFN0YW5kYXJkUGFja2FnZS5TVE9DSEFTVElDX0RJU0VBU0VfTU9ERUxfX1NFRUQ7CisJCQkJY2FzZSBTdGFuZGFyZFBhY2thZ2UuU1RPQ0hBU1RJQ19TRUlSX0RJU0VBU0VfTU9ERUxfX1JBTkRPTV9HRU5FUkFUT1I6IHJldHVybiBTdGFuZGFyZFBhY2thZ2UuU1RPQ0hBU1RJQ19ESVNFQVNFX01PREVMX19SQU5ET01fR0VORVJBVE9SOworCQkJCWRlZmF1bHQ6IHJldHVybiAtMTsKKwkJCX0KKwkJfQorCQlpZiAoYmFzZUNsYXNzID09IFN0YW5kYXJkU3RvY2hhc3RpY0Rpc2Vhc2VNb2RlbC5jbGFzcykgeworCQkJc3dpdGNoIChkZXJpdmVkRmVhdHVyZUlEKSB7CisJCQkJY2FzZSBTdGFuZGFyZFBhY2thZ2UuU1RPQ0hBU1RJQ19TRUlSX0RJU0VBU0VfTU9ERUxfX0dBSU46IHJldHVybiBTdGFuZGFyZFBhY2thZ2UuU1RBTkRBUkRfU1RPQ0hBU1RJQ19ESVNFQVNFX01PREVMX19HQUlOOworCQkJCWRlZmF1bHQ6IHJldHVybiAtMTsKKwkJCX0KKwkJfQorCQlyZXR1cm4gc3VwZXIuZUJhc2VTdHJ1Y3R1cmFsRmVhdHVyZUlEKGRlcml2ZWRGZWF0dXJlSUQsIGJhc2VDbGFzcyk7CisJfQorCisJQE92ZXJyaWRlCisJcHVibGljIGJvb2xlYW4gaXNEZXRlcm1pbmlzdGljKCkgeworCQlyZXR1cm4gdHJ1ZTsKKwl9CisJCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIGludCBlRGVyaXZlZFN0cnVjdHVyYWxGZWF0dXJlSUQoaW50IGJhc2VGZWF0dXJlSUQsIENsYXNzPD8+IGJhc2VDbGFzcykgeworCQlpZiAoYmFzZUNsYXNzID09IFN0b2NoYXN0aWNEaXNlYXNlTW9kZWwuY2xhc3MpIHsKKwkJCXN3aXRjaCAoYmFzZUZlYXR1cmVJRCkgeworCQkJCWNhc2UgU3RhbmRhcmRQYWNrYWdlLlNUT0NIQVNUSUNfRElTRUFTRV9NT0RFTF9fU0VFRDogcmV0dXJuIFN0YW5kYXJkUGFja2FnZS5TVE9DSEFTVElDX1NFSVJfRElTRUFTRV9NT0RFTF9fU0VFRDsKKwkJCQljYXNlIFN0YW5kYXJkUGFja2FnZS5TVE9DSEFTVElDX0RJU0VBU0VfTU9ERUxfX1JBTkRPTV9HRU5FUkFUT1I6IHJldHVybiBTdGFuZGFyZFBhY2thZ2UuU1RPQ0hBU1RJQ19TRUlSX0RJU0VBU0VfTU9ERUxfX1JBTkRPTV9HRU5FUkFUT1I7CisJCQkJZGVmYXVsdDogcmV0dXJuIC0xOworCQkJfQorCQl9CisJCWlmIChiYXNlQ2xhc3MgPT0gU3RhbmRhcmRTdG9jaGFzdGljRGlzZWFzZU1vZGVsLmNsYXNzKSB7CisJCQlzd2l0Y2ggKGJhc2VGZWF0dXJlSUQpIHsKKwkJCQljYXNlIFN0YW5kYXJkUGFja2FnZS5TVEFOREFSRF9TVE9DSEFTVElDX0RJU0VBU0VfTU9ERUxfX0dBSU46IHJldHVybiBTdGFuZGFyZFBhY2thZ2UuU1RPQ0hBU1RJQ19TRUlSX0RJU0VBU0VfTU9ERUxfX0dBSU47CisJCQkJZGVmYXVsdDogcmV0dXJuIC0xOworCQkJfQorCQl9CisJCXJldHVybiBzdXBlci5lRGVyaXZlZFN0cnVjdHVyYWxGZWF0dXJlSUQoYmFzZUZlYXR1cmVJRCwgYmFzZUNsYXNzKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkgeworCQlpZiAoZUlzUHJveHkoKSkgcmV0dXJuIHN1cGVyLnRvU3RyaW5nKCk7CisKKwkJU3RyaW5nQnVmZmVyIHJlc3VsdCA9IG5ldyBTdHJpbmdCdWZmZXIoc3VwZXIudG9TdHJpbmcoKSk7CisJCXJlc3VsdC5hcHBlbmQoIiAoc2VlZDogIik7IC8vJE5PTi1OTFMtMSQKKwkJcmVzdWx0LmFwcGVuZChzZWVkKTsKKwkJcmVzdWx0LmFwcGVuZCgiLCByYW5kb21HZW5lcmF0b3I6ICIpOyAvLyROT04tTkxTLTEkCisJCXJlc3VsdC5hcHBlbmQocmFuZG9tR2VuZXJhdG9yKTsKKwkJcmVzdWx0LmFwcGVuZCgiLCBnYWluOiAiKTsgLy8kTk9OLU5MUy0xJAorCQlyZXN1bHQuYXBwZW5kKGdhaW4pOworCQlyZXN1bHQuYXBwZW5kKCcpJyk7CisJCXJldHVybiByZXN1bHQudG9TdHJpbmcoKTsKKwl9CisKK30gLy8gU3RvY2hhc3RpY1NFSVJEaXNlYXNlTW9kZWxJbXBsCmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3N0YW5kYXJkL2ltcGwvU3RvY2hhc3RpY1NJRGlzZWFzZU1vZGVsSW1wbC5qYXZhIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9zdGFuZGFyZC9pbXBsL1N0b2NoYXN0aWNTSURpc2Vhc2VNb2RlbEltcGwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NWE2NjgwCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9zdGFuZGFyZC9pbXBsL1N0b2NoYXN0aWNTSURpc2Vhc2VNb2RlbEltcGwuamF2YQpAQCAtMCwwICsxLDM2NyBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuaW1wbDsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqYXZhLnV0aWwuUmFuZG9tOworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLmltcGwuRU5vdGlmaWNhdGlvbkltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkxhYmVsVmFsdWU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlNJTGFiZWxWYWx1ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmRGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZFBhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkU3RvY2hhc3RpY0Rpc2Vhc2VNb2RlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RvY2hhc3RpY0Rpc2Vhc2VNb2RlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RvY2hhc3RpY1NJRGlzZWFzZU1vZGVsOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IEFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5TdG9jaGFzdGljIFNJIERpc2Vhc2UgTW9kZWw8L2I+PC9lbT4nLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiA8cD4KKyAqIFRoZSBmb2xsb3dpbmcgZmVhdHVyZXMgYXJlIGltcGxlbWVudGVkOgorICogPHVsPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5pbXBsLlN0b2NoYXN0aWNTSURpc2Vhc2VNb2RlbEltcGwjZ2V0U2VlZCA8ZW0+U2VlZDwvZW0+fTwvbGk+CisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLmltcGwuU3RvY2hhc3RpY1NJRGlzZWFzZU1vZGVsSW1wbCNnZXRSYW5kb21HZW5lcmF0b3IgPGVtPlJhbmRvbSBHZW5lcmF0b3I8L2VtPn08L2xpPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5pbXBsLlN0b2NoYXN0aWNTSURpc2Vhc2VNb2RlbEltcGwjZ2V0R2FpbiA8ZW0+R2FpbjwvZW0+fTwvbGk+CisgKiA8L3VsPgorICogPC9wPgorICoKKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIFN0b2NoYXN0aWNTSURpc2Vhc2VNb2RlbEltcGwgZXh0ZW5kcyBTSUltcGwgaW1wbGVtZW50cworCQlTdG9jaGFzdGljU0lEaXNlYXNlTW9kZWwgeworCisJLyoqCisJICogVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldFNlZWQoKSA8ZW0+U2VlZDwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZ2V0U2VlZCgpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBsb25nIFNFRURfRURFRkFVTFQgPSAwTDsKKwkvKioKKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRTZWVkKCkgPGVtPlNlZWQ8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI2dldFNlZWQoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBsb25nIHNlZWQgPSBTRUVEX0VERUZBVUxUOworCS8qKgorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRSYW5kb21HZW5lcmF0b3IoKSA8ZW0+UmFuZG9tIEdlbmVyYXRvcjwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZ2V0UmFuZG9tR2VuZXJhdG9yKCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIFJhbmRvbSBSQU5ET01fR0VORVJBVE9SX0VERUZBVUxUID0gKFJhbmRvbSlTdGFuZGFyZEZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZUZyb21TdHJpbmcoU3RhbmRhcmRQYWNrYWdlLmVJTlNUQU5DRS5nZXRSYW5kb20oKSwgIjAiKTsKKwkvKioKKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRSYW5kb21HZW5lcmF0b3IoKSA8ZW0+UmFuZG9tIEdlbmVyYXRvcjwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZ2V0UmFuZG9tR2VuZXJhdG9yKCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgUmFuZG9tIHJhbmRvbUdlbmVyYXRvciA9IFJBTkRPTV9HRU5FUkFUT1JfRURFRkFVTFQ7CisJLyoqCisJICogVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldEdhaW4oKSA8ZW0+R2FpbjwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZ2V0R2FpbigpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBkb3VibGUgR0FJTl9FREVGQVVMVCA9IDAuMDE7CisJLyoqCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0R2FpbigpIDxlbT5HYWluPC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNnZXRHYWluKCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgZG91YmxlIGdhaW4gPSBHQUlOX0VERUZBVUxUOworCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBUaGUgY29uc3RydWN0b3IgbmVlZHMgdG8gYmUgcHVibGljIHNvIHRoYXQgdGhlIG5ldyBkaXNlYXNlIHdpemFyZCBjYW4KKwkgKiBjcmVhdGUgYW4gaW5zdGFuY2Ugb2YgdGhlIGNsYXNzIHdpdGhvdXQgdXNpbmcgdGhlIGZhY3RvcnkuCisJICogCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogCisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlwdWJsaWMgU3RvY2hhc3RpY1NJRGlzZWFzZU1vZGVsSW1wbCgpIHsKKwkJc3VwZXIoKTsKKwl9IC8vIFN0b2NoYXN0aWNTSURpc2Vhc2VNb2RlbEltcGwKKworCS8qKgorCSAqIE1vZGVsU3BlY2lmaWNBZGp1c3RtZW50cyBmb3IgYSBTdG9jaGFzdGljIG1vZGVsIGFkZHMgbm9pc2UgdG8KKwkgKiB0aGUgSSBzdGF0ZS4gSXQgd2lsbCBiZSBwcm9wYWdhdGVkIHRvIG90aGVyIHN0YXRlcyBhdXRvbWF0aWNhbGx5CisJICogCisJICovCisJCisJcHVibGljIHZvaWQgZG9Nb2RlbFNwZWNpZmljQWRqdXN0bWVudHMoCisJCQlmaW5hbCBMYWJlbFZhbHVlIHN0YXRlKSB7CisJCWZpbmFsIFNJTGFiZWxWYWx1ZSBjdXJyZW50U0kgPSAoU0lMYWJlbFZhbHVlKSBzdGF0ZTsKKwkJLy9kb3VibGUgb2xkSSA9IGN1cnJlbnRTSS5nZXRJKCk7CisJCWRvdWJsZSBpbmNpZGVuY2UgPSBjdXJyZW50U0kuZ2V0SW5jaWRlbmNlKCk7CisJCWRvdWJsZSBuZXdJbmNpZGVuY2UgPSBpbmNpZGVuY2UqY29tcHV0ZU5vaXNlKCk7CisJCWRvdWJsZSBkaWZmID0gbmV3SW5jaWRlbmNlIC0gaW5jaWRlbmNlOyAKKwkJCisJCWRvdWJsZSBuZXdJID0gY3VycmVudFNJLmdldEkoKSArIGRpZmY7CisJCWRvdWJsZSBuZXdTID0gY3VycmVudFNJLmdldFMoKSAtIGRpZmY7CisJCWlmKG5ld0kgPCAwLjApIHsKKwkJCWRvdWJsZSBzY2FsZSA9ICgtbmV3SSkgLyBjdXJyZW50U0kuZ2V0SSgpOworCQkJaWYoRG91YmxlLmlzSW5maW5pdGUoc2NhbGUpKQorCQkJCXNjYWxlID0gMC4wOyAvLyBjYW5jZWwgbm9pc2UgaWYgMAorCQkJZGlmZiA9IGRpZmYgKiBzY2FsZTsKKwkJCW5ld0kgPSBjdXJyZW50U0kuZ2V0SSgpICsgZGlmZjsgLy8gMAorCQkJbmV3UyA9IGN1cnJlbnRTSS5nZXRTKCkgLSBkaWZmOworCQl9CisJCWlmKG5ld1MgPCAwLjApIHsKKwkJCWRvdWJsZSBzY2FsZSA9ICgtbmV3UykgLyBjdXJyZW50U0kuZ2V0UygpOworCQkJaWYoRG91YmxlLmlzSW5maW5pdGUoc2NhbGUpKQorCQkJCXNjYWxlID0gMC4wOyAvLyBjYW5jZWwgbm9pc2UgaWYgMAorCQkJZGlmZiA9IGRpZmYgKiBzY2FsZTsKKwkJCW5ld0kgPSBjdXJyZW50U0kuZ2V0SSgpICsgZGlmZjsKKwkJCW5ld1MgPSBjdXJyZW50U0kuZ2V0UygpIC0gZGlmZjsgLy8gMAorCQl9CisJCW5ld0luY2lkZW5jZSA9IGluY2lkZW5jZSArIGRpZmY7CisJCWN1cnJlbnRTSS5zZXRTKG5ld1MpOworCQljdXJyZW50U0kuc2V0SShuZXdJKTsKKwkJY3VycmVudFNJLnNldEluY2lkZW5jZShuZXdJbmNpZGVuY2UpOyAKKwkJcmV0dXJuOworCX0gLy8gZG9Nb2RlbFNwZWNpZmljQWRqdXN0bWVudHMKKwkKKwlAT3ZlcnJpZGUKKwlwdWJsaWMgYm9vbGVhbiBpc0RldGVybWluaXN0aWMoKSB7CisJCXJldHVybiB0cnVlOworCX0KKwkKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIEVDbGFzcyBlU3RhdGljQ2xhc3MoKSB7CisJCXJldHVybiBTdGFuZGFyZFBhY2thZ2UuTGl0ZXJhbHMuU1RPQ0hBU1RJQ19TSV9ESVNFQVNFX01PREVMOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBsb25nIGdldFNlZWQoKSB7CisJCXJldHVybiBzZWVkOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRTZWVkKGxvbmcgbmV3U2VlZCkgeworCQlsb25nIG9sZFNlZWQgPSBnZXRTZWVkKCk7CisJCXNlZWQgPSBuZXdTZWVkOworCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpCisJCQllTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBTdGFuZGFyZFBhY2thZ2UuU1RPQ0hBU1RJQ19TSV9ESVNFQVNFX01PREVMX19TRUVELCBvbGRTZWVkLCBnZXRTZWVkKCkpKTsKKwkJZ2V0UmFuZG9tR2VuZXJhdG9yKCkuc2V0U2VlZChuZXdTZWVkKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgUmFuZG9tIGdldFJhbmRvbUdlbmVyYXRvcigpIHsKKwkJcmV0dXJuIHJhbmRvbUdlbmVyYXRvcjsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgZG91YmxlIGdldEdhaW4oKSB7CisJCXJldHVybiBnYWluOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIHNldEdhaW4oZG91YmxlIG5ld0dhaW4pIHsKKwkJZG91YmxlIG9sZEdhaW4gPSBnYWluOworCQlnYWluID0gbmV3R2FpbjsKKwkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQorCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgU3RhbmRhcmRQYWNrYWdlLlNUT0NIQVNUSUNfU0lfRElTRUFTRV9NT0RFTF9fR0FJTiwgb2xkR2FpbiwgZ2FpbikpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogQnkgZGVmYXVsdCB0aGlzIGNhbGxzIHRoZSBzdGF0aWMgbWV0aG9kIFN0YW5kYXJkU3RvY2hhc3RpY0Rpc2Vhc2VNb2RlbEltcGwuY29tcHV0ZU5vaXNlKGdhaW4sIHJhbmQpCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlwdWJsaWMgZG91YmxlIGNvbXB1dGVOb2lzZSgpIHsKKwkJcmV0dXJuIFN0YW5kYXJkU3RvY2hhc3RpY0Rpc2Vhc2VNb2RlbEltcGwuY29tcHV0ZU5vaXNlKGdldEdhaW4oKSwgZ2V0UmFuZG9tR2VuZXJhdG9yKCkpOworCX0KKwkKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBPYmplY3QgZUdldChpbnQgZmVhdHVyZUlELCBib29sZWFuIHJlc29sdmUsIGJvb2xlYW4gY29yZVR5cGUpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJCWNhc2UgU3RhbmRhcmRQYWNrYWdlLlNUT0NIQVNUSUNfU0lfRElTRUFTRV9NT0RFTF9fU0VFRDoKKwkJCQlyZXR1cm4gZ2V0U2VlZCgpOworCQkJY2FzZSBTdGFuZGFyZFBhY2thZ2UuU1RPQ0hBU1RJQ19TSV9ESVNFQVNFX01PREVMX19SQU5ET01fR0VORVJBVE9SOgorCQkJCXJldHVybiBnZXRSYW5kb21HZW5lcmF0b3IoKTsKKwkJCWNhc2UgU3RhbmRhcmRQYWNrYWdlLlNUT0NIQVNUSUNfU0lfRElTRUFTRV9NT0RFTF9fR0FJTjoKKwkJCQlyZXR1cm4gZ2V0R2FpbigpOworCQl9CisJCXJldHVybiBzdXBlci5lR2V0KGZlYXR1cmVJRCwgcmVzb2x2ZSwgY29yZVR5cGUpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGVTZXQoaW50IGZlYXR1cmVJRCwgT2JqZWN0IG5ld1ZhbHVlKSB7CisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7CisJCQljYXNlIFN0YW5kYXJkUGFja2FnZS5TVE9DSEFTVElDX1NJX0RJU0VBU0VfTU9ERUxfX1NFRUQ6CisJCQkJc2V0U2VlZCgoTG9uZyluZXdWYWx1ZSk7CisJCQkJcmV0dXJuOworCQkJY2FzZSBTdGFuZGFyZFBhY2thZ2UuU1RPQ0hBU1RJQ19TSV9ESVNFQVNFX01PREVMX19HQUlOOgorCQkJCXNldEdhaW4oKERvdWJsZSluZXdWYWx1ZSk7CisJCQkJcmV0dXJuOworCQl9CisJCXN1cGVyLmVTZXQoZmVhdHVyZUlELCBuZXdWYWx1ZSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgZVVuc2V0KGludCBmZWF0dXJlSUQpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJCWNhc2UgU3RhbmRhcmRQYWNrYWdlLlNUT0NIQVNUSUNfU0lfRElTRUFTRV9NT0RFTF9fU0VFRDoKKwkJCQlzZXRTZWVkKFNFRURfRURFRkFVTFQpOworCQkJCXJldHVybjsKKwkJCWNhc2UgU3RhbmRhcmRQYWNrYWdlLlNUT0NIQVNUSUNfU0lfRElTRUFTRV9NT0RFTF9fR0FJTjoKKwkJCQlzZXRHYWluKEdBSU5fRURFRkFVTFQpOworCQkJCXJldHVybjsKKwkJfQorCQlzdXBlci5lVW5zZXQoZmVhdHVyZUlEKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgYm9vbGVhbiBlSXNTZXQoaW50IGZlYXR1cmVJRCkgeworCQlzd2l0Y2ggKGZlYXR1cmVJRCkgeworCQkJY2FzZSBTdGFuZGFyZFBhY2thZ2UuU1RPQ0hBU1RJQ19TSV9ESVNFQVNFX01PREVMX19TRUVEOgorCQkJCXJldHVybiBzZWVkICE9IFNFRURfRURFRkFVTFQ7CisJCQljYXNlIFN0YW5kYXJkUGFja2FnZS5TVE9DSEFTVElDX1NJX0RJU0VBU0VfTU9ERUxfX1JBTkRPTV9HRU5FUkFUT1I6CisJCQkJcmV0dXJuIFJBTkRPTV9HRU5FUkFUT1JfRURFRkFVTFQgPT0gbnVsbCA/IHJhbmRvbUdlbmVyYXRvciAhPSBudWxsIDogIVJBTkRPTV9HRU5FUkFUT1JfRURFRkFVTFQuZXF1YWxzKHJhbmRvbUdlbmVyYXRvcik7CisJCQljYXNlIFN0YW5kYXJkUGFja2FnZS5TVE9DSEFTVElDX1NJX0RJU0VBU0VfTU9ERUxfX0dBSU46CisJCQkJcmV0dXJuIGdhaW4gIT0gR0FJTl9FREVGQVVMVDsKKwkJfQorCQlyZXR1cm4gc3VwZXIuZUlzU2V0KGZlYXR1cmVJRCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIGludCBlQmFzZVN0cnVjdHVyYWxGZWF0dXJlSUQoaW50IGRlcml2ZWRGZWF0dXJlSUQsIENsYXNzPD8+IGJhc2VDbGFzcykgeworCQlpZiAoYmFzZUNsYXNzID09IFN0b2NoYXN0aWNEaXNlYXNlTW9kZWwuY2xhc3MpIHsKKwkJCXN3aXRjaCAoZGVyaXZlZEZlYXR1cmVJRCkgeworCQkJCWNhc2UgU3RhbmRhcmRQYWNrYWdlLlNUT0NIQVNUSUNfU0lfRElTRUFTRV9NT0RFTF9fU0VFRDogcmV0dXJuIFN0YW5kYXJkUGFja2FnZS5TVE9DSEFTVElDX0RJU0VBU0VfTU9ERUxfX1NFRUQ7CisJCQkJY2FzZSBTdGFuZGFyZFBhY2thZ2UuU1RPQ0hBU1RJQ19TSV9ESVNFQVNFX01PREVMX19SQU5ET01fR0VORVJBVE9SOiByZXR1cm4gU3RhbmRhcmRQYWNrYWdlLlNUT0NIQVNUSUNfRElTRUFTRV9NT0RFTF9fUkFORE9NX0dFTkVSQVRPUjsKKwkJCQlkZWZhdWx0OiByZXR1cm4gLTE7CisJCQl9CisJCX0KKwkJaWYgKGJhc2VDbGFzcyA9PSBTdGFuZGFyZFN0b2NoYXN0aWNEaXNlYXNlTW9kZWwuY2xhc3MpIHsKKwkJCXN3aXRjaCAoZGVyaXZlZEZlYXR1cmVJRCkgeworCQkJCWNhc2UgU3RhbmRhcmRQYWNrYWdlLlNUT0NIQVNUSUNfU0lfRElTRUFTRV9NT0RFTF9fR0FJTjogcmV0dXJuIFN0YW5kYXJkUGFja2FnZS5TVEFOREFSRF9TVE9DSEFTVElDX0RJU0VBU0VfTU9ERUxfX0dBSU47CisJCQkJZGVmYXVsdDogcmV0dXJuIC0xOworCQkJfQorCQl9CisJCXJldHVybiBzdXBlci5lQmFzZVN0cnVjdHVyYWxGZWF0dXJlSUQoZGVyaXZlZEZlYXR1cmVJRCwgYmFzZUNsYXNzKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgaW50IGVEZXJpdmVkU3RydWN0dXJhbEZlYXR1cmVJRChpbnQgYmFzZUZlYXR1cmVJRCwgQ2xhc3M8Pz4gYmFzZUNsYXNzKSB7CisJCWlmIChiYXNlQ2xhc3MgPT0gU3RvY2hhc3RpY0Rpc2Vhc2VNb2RlbC5jbGFzcykgeworCQkJc3dpdGNoIChiYXNlRmVhdHVyZUlEKSB7CisJCQkJY2FzZSBTdGFuZGFyZFBhY2thZ2UuU1RPQ0hBU1RJQ19ESVNFQVNFX01PREVMX19TRUVEOiByZXR1cm4gU3RhbmRhcmRQYWNrYWdlLlNUT0NIQVNUSUNfU0lfRElTRUFTRV9NT0RFTF9fU0VFRDsKKwkJCQljYXNlIFN0YW5kYXJkUGFja2FnZS5TVE9DSEFTVElDX0RJU0VBU0VfTU9ERUxfX1JBTkRPTV9HRU5FUkFUT1I6IHJldHVybiBTdGFuZGFyZFBhY2thZ2UuU1RPQ0hBU1RJQ19TSV9ESVNFQVNFX01PREVMX19SQU5ET01fR0VORVJBVE9SOworCQkJCWRlZmF1bHQ6IHJldHVybiAtMTsKKwkJCX0KKwkJfQorCQlpZiAoYmFzZUNsYXNzID09IFN0YW5kYXJkU3RvY2hhc3RpY0Rpc2Vhc2VNb2RlbC5jbGFzcykgeworCQkJc3dpdGNoIChiYXNlRmVhdHVyZUlEKSB7CisJCQkJY2FzZSBTdGFuZGFyZFBhY2thZ2UuU1RBTkRBUkRfU1RPQ0hBU1RJQ19ESVNFQVNFX01PREVMX19HQUlOOiByZXR1cm4gU3RhbmRhcmRQYWNrYWdlLlNUT0NIQVNUSUNfU0lfRElTRUFTRV9NT0RFTF9fR0FJTjsKKwkJCQlkZWZhdWx0OiByZXR1cm4gLTE7CisJCQl9CisJCX0KKwkJcmV0dXJuIHN1cGVyLmVEZXJpdmVkU3RydWN0dXJhbEZlYXR1cmVJRChiYXNlRmVhdHVyZUlELCBiYXNlQ2xhc3MpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKSB7CisJCWlmIChlSXNQcm94eSgpKSByZXR1cm4gc3VwZXIudG9TdHJpbmcoKTsKKworCQlTdHJpbmdCdWZmZXIgcmVzdWx0ID0gbmV3IFN0cmluZ0J1ZmZlcihzdXBlci50b1N0cmluZygpKTsKKwkJcmVzdWx0LmFwcGVuZCgiIChzZWVkOiAiKTsgLy8kTk9OLU5MUy0xJAorCQlyZXN1bHQuYXBwZW5kKHNlZWQpOworCQlyZXN1bHQuYXBwZW5kKCIsIHJhbmRvbUdlbmVyYXRvcjogIik7IC8vJE5PTi1OTFMtMSQKKwkJcmVzdWx0LmFwcGVuZChyYW5kb21HZW5lcmF0b3IpOworCQlyZXN1bHQuYXBwZW5kKCIsIGdhaW46ICIpOyAvLyROT04tTkxTLTEkCisJCXJlc3VsdC5hcHBlbmQoZ2Fpbik7CisJCXJlc3VsdC5hcHBlbmQoJyknKTsKKwkJcmV0dXJuIHJlc3VsdC50b1N0cmluZygpOworCX0KKworfSAvLyBTdG9jaGFzdGljU0lEaXNlYXNlTW9kZWxJbXBsCmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3N0YW5kYXJkL2ltcGwvU3RvY2hhc3RpY1NJUkRpc2Vhc2VNb2RlbEltcGwuamF2YSBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvc3RhbmRhcmQvaW1wbC9TdG9jaGFzdGljU0lSRGlzZWFzZU1vZGVsSW1wbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUwNmQ5NDAKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3N0YW5kYXJkL2ltcGwvU3RvY2hhc3RpY1NJUkRpc2Vhc2VNb2RlbEltcGwuamF2YQpAQCAtMCwwICsxLDM2OCBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuaW1wbDsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqYXZhLnV0aWwuUmFuZG9tOworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLmltcGwuRU5vdGlmaWNhdGlvbkltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkxhYmVsVmFsdWU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlNJTGFiZWxWYWx1ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmRGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZFBhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkU3RvY2hhc3RpY0Rpc2Vhc2VNb2RlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RvY2hhc3RpY0Rpc2Vhc2VNb2RlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RvY2hhc3RpY1NJUkRpc2Vhc2VNb2RlbDsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiBBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+U3RvY2hhc3RpYyBTSVIgRGlzZWFzZSBNb2RlbDwvYj48L2VtPicuCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIDxwPgorICogVGhlIGZvbGxvd2luZyBmZWF0dXJlcyBhcmUgaW1wbGVtZW50ZWQ6CisgKiA8dWw+CisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLmltcGwuU3RvY2hhc3RpY1NJUkRpc2Vhc2VNb2RlbEltcGwjZ2V0U2VlZCA8ZW0+U2VlZDwvZW0+fTwvbGk+CisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLmltcGwuU3RvY2hhc3RpY1NJUkRpc2Vhc2VNb2RlbEltcGwjZ2V0UmFuZG9tR2VuZXJhdG9yIDxlbT5SYW5kb20gR2VuZXJhdG9yPC9lbT59PC9saT4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuaW1wbC5TdG9jaGFzdGljU0lSRGlzZWFzZU1vZGVsSW1wbCNnZXRHYWluIDxlbT5HYWluPC9lbT59PC9saT4KKyAqIDwvdWw+CisgKiA8L3A+CisgKgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgU3RvY2hhc3RpY1NJUkRpc2Vhc2VNb2RlbEltcGwgZXh0ZW5kcyBTSVJJbXBsIGltcGxlbWVudHMKKwkJU3RvY2hhc3RpY1NJUkRpc2Vhc2VNb2RlbCB7CisKKwkvKioKKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0U2VlZCgpIDxlbT5TZWVkPC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNnZXRTZWVkKCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIGxvbmcgU0VFRF9FREVGQVVMVCA9IDBMOworCS8qKgorCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldFNlZWQoKSA8ZW0+U2VlZDwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZ2V0U2VlZCgpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIGxvbmcgc2VlZCA9IFNFRURfRURFRkFVTFQ7CisJLyoqCisJICogVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldFJhbmRvbUdlbmVyYXRvcigpIDxlbT5SYW5kb20gR2VuZXJhdG9yPC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNnZXRSYW5kb21HZW5lcmF0b3IoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgUmFuZG9tIFJBTkRPTV9HRU5FUkFUT1JfRURFRkFVTFQgPSAoUmFuZG9tKVN0YW5kYXJkRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlRnJvbVN0cmluZyhTdGFuZGFyZFBhY2thZ2UuZUlOU1RBTkNFLmdldFJhbmRvbSgpLCAiMCIpOworCS8qKgorCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldFJhbmRvbUdlbmVyYXRvcigpIDxlbT5SYW5kb20gR2VuZXJhdG9yPC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNnZXRSYW5kb21HZW5lcmF0b3IoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBSYW5kb20gcmFuZG9tR2VuZXJhdG9yID0gUkFORE9NX0dFTkVSQVRPUl9FREVGQVVMVDsKKwkvKioKKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0R2FpbigpIDxlbT5HYWluPC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNnZXRHYWluKCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIGRvdWJsZSBHQUlOX0VERUZBVUxUID0gMC4wMTsKKwkvKioKKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRHYWluKCkgPGVtPkdhaW48L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI2dldEdhaW4oKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBkb3VibGUgZ2FpbiA9IEdBSU5fRURFRkFVTFQ7CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIFRoZSBjb25zdHJ1Y3RvciBuZWVkcyB0byBiZSBwdWJsaWMgc28gdGhhdCB0aGUgbmV3IGRpc2Vhc2Ugd2l6YXJkIGNhbgorCSAqIGNyZWF0ZSBhbiBpbnN0YW5jZSBvZiB0aGUgY2xhc3Mgd2l0aG91dCB1c2luZyB0aGUgZmFjdG9yeS4KKwkgKiAKKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCXB1YmxpYyBTdG9jaGFzdGljU0lSRGlzZWFzZU1vZGVsSW1wbCgpIHsKKwkJc3VwZXIoKTsKKwl9IC8vIFN0b2NoYXN0aWNTSVJEaXNlYXNlTW9kZWxJbXBsCisJCisJLyoqCisJICogTW9kZWxTcGVjaWZpY0FkanVzdG1lbnRzIGZvciBhIFN0b2NoYXN0aWMgbW9kZWwgYWRkcyBub2lzZSB0bworCSAqIHRoZSBJIHN0YXRlLiBJdCB3aWxsIGJlIHByb3BhZ2F0ZWQgdG8gb3RoZXIgc3RhdGVzIGF1dG9tYXRpY2FsbHkKKwkgKiAKKwkgKi8KKwkKKwlwdWJsaWMgdm9pZCBkb01vZGVsU3BlY2lmaWNBZGp1c3RtZW50cygKKwkJCWZpbmFsIExhYmVsVmFsdWUgc3RhdGUpIHsKKwkJCWZpbmFsIFNJTGFiZWxWYWx1ZSBjdXJyZW50U0kgPSAoU0lMYWJlbFZhbHVlKSBzdGF0ZTsKKwkJCS8vZG91YmxlIG9sZEkgPSBjdXJyZW50U0kuZ2V0SSgpOworCQkJZG91YmxlIGluY2lkZW5jZSA9IGN1cnJlbnRTSS5nZXRJbmNpZGVuY2UoKTsKKwkJCWRvdWJsZSBuZXdJbmNpZGVuY2UgPSBpbmNpZGVuY2UqY29tcHV0ZU5vaXNlKCk7CisJCQlkb3VibGUgZGlmZiA9IG5ld0luY2lkZW5jZSAtIGluY2lkZW5jZTsgCisJCQkKKwkJCWRvdWJsZSBuZXdJID0gY3VycmVudFNJLmdldEkoKSArIGRpZmY7CisJCQlkb3VibGUgbmV3UyA9IGN1cnJlbnRTSS5nZXRTKCkgLSBkaWZmOworCQkJaWYobmV3SSA8IDAuMCkgeworCQkJCWRvdWJsZSBzY2FsZSA9ICgtbmV3SSkgLyBjdXJyZW50U0kuZ2V0SSgpOworCQkJCWlmKERvdWJsZS5pc0luZmluaXRlKHNjYWxlKSkKKwkJCQkJc2NhbGUgPSAwLjA7IC8vIGNhbmNlbCBub2lzZSBpZiAwCisJCQkJZGlmZiA9IGRpZmYgKiBzY2FsZTsKKwkJCQluZXdJID0gY3VycmVudFNJLmdldEkoKSArIGRpZmY7IC8vIDAKKwkJCQluZXdTID0gY3VycmVudFNJLmdldFMoKSAtIGRpZmY7CisJCQl9CisJCQlpZihuZXdTIDwgMC4wKSB7CisJCQkJZG91YmxlIHNjYWxlID0gKC1uZXdTKSAvIGN1cnJlbnRTSS5nZXRTKCk7CisJCQkJaWYoRG91YmxlLmlzSW5maW5pdGUoc2NhbGUpKQorCQkJCQlzY2FsZSA9IDAuMDsgLy8gY2FuY2VsIG5vaXNlIGlmIDAKKwkJCQlkaWZmID0gZGlmZiAqIHNjYWxlOworCQkJCW5ld0kgPSBjdXJyZW50U0kuZ2V0SSgpICsgZGlmZjsKKwkJCQluZXdTID0gY3VycmVudFNJLmdldFMoKSAtIGRpZmY7IC8vIDAKKwkJCX0KKwkJCW5ld0luY2lkZW5jZSA9IGluY2lkZW5jZSArIGRpZmY7CisJCQljdXJyZW50U0kuc2V0UyhuZXdTKTsKKwkJCWN1cnJlbnRTSS5zZXRJKG5ld0kpOworCQkJY3VycmVudFNJLnNldEluY2lkZW5jZShuZXdJbmNpZGVuY2UpOyAKKwkJCXJldHVybjsKKwkJCQorCX0gLy8gZG9Nb2RlbFNwZWNpZmljQWRqdXN0bWVudHMKKwkKKwlAT3ZlcnJpZGUKKwlwdWJsaWMgYm9vbGVhbiBpc0RldGVybWluaXN0aWMoKSB7CisJCXJldHVybiB0cnVlOworCX0KKwkKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIEVDbGFzcyBlU3RhdGljQ2xhc3MoKSB7CisJCXJldHVybiBTdGFuZGFyZFBhY2thZ2UuTGl0ZXJhbHMuU1RPQ0hBU1RJQ19TSVJfRElTRUFTRV9NT0RFTDsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgbG9uZyBnZXRTZWVkKCkgeworCQlyZXR1cm4gc2VlZDsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJcHVibGljIHZvaWQgc2V0U2VlZChsb25nIG5ld1NlZWQpIHsKKwkJbG9uZyBvbGRTZWVkID0gZ2V0U2VlZCgpOworCQlzZWVkID0gbmV3U2VlZDsKKwkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQorCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgU3RhbmRhcmRQYWNrYWdlLlNUT0NIQVNUSUNfU0lSX0RJU0VBU0VfTU9ERUxfX1NFRUQsIG9sZFNlZWQsIGdldFNlZWQoKSkpOworCQlnZXRSYW5kb21HZW5lcmF0b3IoKS5zZXRTZWVkKG5ld1NlZWQpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBSYW5kb20gZ2V0UmFuZG9tR2VuZXJhdG9yKCkgeworCQlyZXR1cm4gcmFuZG9tR2VuZXJhdG9yOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBkb3VibGUgZ2V0R2FpbigpIHsKKwkJcmV0dXJuIGdhaW47CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgc2V0R2Fpbihkb3VibGUgbmV3R2FpbikgeworCQlkb3VibGUgb2xkR2FpbiA9IGdhaW47CisJCWdhaW4gPSBuZXdHYWluOworCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpCisJCQllTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBTdGFuZGFyZFBhY2thZ2UuU1RPQ0hBU1RJQ19TSVJfRElTRUFTRV9NT0RFTF9fR0FJTiwgb2xkR2FpbiwgZ2FpbikpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogQnkgZGVmYXVsdCB0aGlzIGNhbGxzIHRoZSBzdGF0aWMgbWV0aG9kIFN0YW5kYXJkU3RvY2hhc3RpY0Rpc2Vhc2VNb2RlbEltcGwuY29tcHV0ZU5vaXNlKGdhaW4sIHJhbmQpCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlwdWJsaWMgZG91YmxlIGNvbXB1dGVOb2lzZSgpIHsKKwkJcmV0dXJuIFN0YW5kYXJkU3RvY2hhc3RpY0Rpc2Vhc2VNb2RlbEltcGwuY29tcHV0ZU5vaXNlKGdldEdhaW4oKSwgZ2V0UmFuZG9tR2VuZXJhdG9yKCkpOworCX0KKwkKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBPYmplY3QgZUdldChpbnQgZmVhdHVyZUlELCBib29sZWFuIHJlc29sdmUsIGJvb2xlYW4gY29yZVR5cGUpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJCWNhc2UgU3RhbmRhcmRQYWNrYWdlLlNUT0NIQVNUSUNfU0lSX0RJU0VBU0VfTU9ERUxfX1NFRUQ6CisJCQkJcmV0dXJuIGdldFNlZWQoKTsKKwkJCWNhc2UgU3RhbmRhcmRQYWNrYWdlLlNUT0NIQVNUSUNfU0lSX0RJU0VBU0VfTU9ERUxfX1JBTkRPTV9HRU5FUkFUT1I6CisJCQkJcmV0dXJuIGdldFJhbmRvbUdlbmVyYXRvcigpOworCQkJY2FzZSBTdGFuZGFyZFBhY2thZ2UuU1RPQ0hBU1RJQ19TSVJfRElTRUFTRV9NT0RFTF9fR0FJTjoKKwkJCQlyZXR1cm4gZ2V0R2FpbigpOworCQl9CisJCXJldHVybiBzdXBlci5lR2V0KGZlYXR1cmVJRCwgcmVzb2x2ZSwgY29yZVR5cGUpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGVTZXQoaW50IGZlYXR1cmVJRCwgT2JqZWN0IG5ld1ZhbHVlKSB7CisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7CisJCQljYXNlIFN0YW5kYXJkUGFja2FnZS5TVE9DSEFTVElDX1NJUl9ESVNFQVNFX01PREVMX19TRUVEOgorCQkJCXNldFNlZWQoKExvbmcpbmV3VmFsdWUpOworCQkJCXJldHVybjsKKwkJCWNhc2UgU3RhbmRhcmRQYWNrYWdlLlNUT0NIQVNUSUNfU0lSX0RJU0VBU0VfTU9ERUxfX0dBSU46CisJCQkJc2V0R2FpbigoRG91YmxlKW5ld1ZhbHVlKTsKKwkJCQlyZXR1cm47CisJCX0KKwkJc3VwZXIuZVNldChmZWF0dXJlSUQsIG5ld1ZhbHVlKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBlVW5zZXQoaW50IGZlYXR1cmVJRCkgeworCQlzd2l0Y2ggKGZlYXR1cmVJRCkgeworCQkJY2FzZSBTdGFuZGFyZFBhY2thZ2UuU1RPQ0hBU1RJQ19TSVJfRElTRUFTRV9NT0RFTF9fU0VFRDoKKwkJCQlzZXRTZWVkKFNFRURfRURFRkFVTFQpOworCQkJCXJldHVybjsKKwkJCWNhc2UgU3RhbmRhcmRQYWNrYWdlLlNUT0NIQVNUSUNfU0lSX0RJU0VBU0VfTU9ERUxfX0dBSU46CisJCQkJc2V0R2FpbihHQUlOX0VERUZBVUxUKTsKKwkJCQlyZXR1cm47CisJCX0KKwkJc3VwZXIuZVVuc2V0KGZlYXR1cmVJRCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIGJvb2xlYW4gZUlzU2V0KGludCBmZWF0dXJlSUQpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJCWNhc2UgU3RhbmRhcmRQYWNrYWdlLlNUT0NIQVNUSUNfU0lSX0RJU0VBU0VfTU9ERUxfX1NFRUQ6CisJCQkJcmV0dXJuIHNlZWQgIT0gU0VFRF9FREVGQVVMVDsKKwkJCWNhc2UgU3RhbmRhcmRQYWNrYWdlLlNUT0NIQVNUSUNfU0lSX0RJU0VBU0VfTU9ERUxfX1JBTkRPTV9HRU5FUkFUT1I6CisJCQkJcmV0dXJuIFJBTkRPTV9HRU5FUkFUT1JfRURFRkFVTFQgPT0gbnVsbCA/IHJhbmRvbUdlbmVyYXRvciAhPSBudWxsIDogIVJBTkRPTV9HRU5FUkFUT1JfRURFRkFVTFQuZXF1YWxzKHJhbmRvbUdlbmVyYXRvcik7CisJCQljYXNlIFN0YW5kYXJkUGFja2FnZS5TVE9DSEFTVElDX1NJUl9ESVNFQVNFX01PREVMX19HQUlOOgorCQkJCXJldHVybiBnYWluICE9IEdBSU5fRURFRkFVTFQ7CisJCX0KKwkJcmV0dXJuIHN1cGVyLmVJc1NldChmZWF0dXJlSUQpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBpbnQgZUJhc2VTdHJ1Y3R1cmFsRmVhdHVyZUlEKGludCBkZXJpdmVkRmVhdHVyZUlELCBDbGFzczw/PiBiYXNlQ2xhc3MpIHsKKwkJaWYgKGJhc2VDbGFzcyA9PSBTdG9jaGFzdGljRGlzZWFzZU1vZGVsLmNsYXNzKSB7CisJCQlzd2l0Y2ggKGRlcml2ZWRGZWF0dXJlSUQpIHsKKwkJCQljYXNlIFN0YW5kYXJkUGFja2FnZS5TVE9DSEFTVElDX1NJUl9ESVNFQVNFX01PREVMX19TRUVEOiByZXR1cm4gU3RhbmRhcmRQYWNrYWdlLlNUT0NIQVNUSUNfRElTRUFTRV9NT0RFTF9fU0VFRDsKKwkJCQljYXNlIFN0YW5kYXJkUGFja2FnZS5TVE9DSEFTVElDX1NJUl9ESVNFQVNFX01PREVMX19SQU5ET01fR0VORVJBVE9SOiByZXR1cm4gU3RhbmRhcmRQYWNrYWdlLlNUT0NIQVNUSUNfRElTRUFTRV9NT0RFTF9fUkFORE9NX0dFTkVSQVRPUjsKKwkJCQlkZWZhdWx0OiByZXR1cm4gLTE7CisJCQl9CisJCX0KKwkJaWYgKGJhc2VDbGFzcyA9PSBTdGFuZGFyZFN0b2NoYXN0aWNEaXNlYXNlTW9kZWwuY2xhc3MpIHsKKwkJCXN3aXRjaCAoZGVyaXZlZEZlYXR1cmVJRCkgeworCQkJCWNhc2UgU3RhbmRhcmRQYWNrYWdlLlNUT0NIQVNUSUNfU0lSX0RJU0VBU0VfTU9ERUxfX0dBSU46IHJldHVybiBTdGFuZGFyZFBhY2thZ2UuU1RBTkRBUkRfU1RPQ0hBU1RJQ19ESVNFQVNFX01PREVMX19HQUlOOworCQkJCWRlZmF1bHQ6IHJldHVybiAtMTsKKwkJCX0KKwkJfQorCQlyZXR1cm4gc3VwZXIuZUJhc2VTdHJ1Y3R1cmFsRmVhdHVyZUlEKGRlcml2ZWRGZWF0dXJlSUQsIGJhc2VDbGFzcyk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIGludCBlRGVyaXZlZFN0cnVjdHVyYWxGZWF0dXJlSUQoaW50IGJhc2VGZWF0dXJlSUQsIENsYXNzPD8+IGJhc2VDbGFzcykgeworCQlpZiAoYmFzZUNsYXNzID09IFN0b2NoYXN0aWNEaXNlYXNlTW9kZWwuY2xhc3MpIHsKKwkJCXN3aXRjaCAoYmFzZUZlYXR1cmVJRCkgeworCQkJCWNhc2UgU3RhbmRhcmRQYWNrYWdlLlNUT0NIQVNUSUNfRElTRUFTRV9NT0RFTF9fU0VFRDogcmV0dXJuIFN0YW5kYXJkUGFja2FnZS5TVE9DSEFTVElDX1NJUl9ESVNFQVNFX01PREVMX19TRUVEOworCQkJCWNhc2UgU3RhbmRhcmRQYWNrYWdlLlNUT0NIQVNUSUNfRElTRUFTRV9NT0RFTF9fUkFORE9NX0dFTkVSQVRPUjogcmV0dXJuIFN0YW5kYXJkUGFja2FnZS5TVE9DSEFTVElDX1NJUl9ESVNFQVNFX01PREVMX19SQU5ET01fR0VORVJBVE9SOworCQkJCWRlZmF1bHQ6IHJldHVybiAtMTsKKwkJCX0KKwkJfQorCQlpZiAoYmFzZUNsYXNzID09IFN0YW5kYXJkU3RvY2hhc3RpY0Rpc2Vhc2VNb2RlbC5jbGFzcykgeworCQkJc3dpdGNoIChiYXNlRmVhdHVyZUlEKSB7CisJCQkJY2FzZSBTdGFuZGFyZFBhY2thZ2UuU1RBTkRBUkRfU1RPQ0hBU1RJQ19ESVNFQVNFX01PREVMX19HQUlOOiByZXR1cm4gU3RhbmRhcmRQYWNrYWdlLlNUT0NIQVNUSUNfU0lSX0RJU0VBU0VfTU9ERUxfX0dBSU47CisJCQkJZGVmYXVsdDogcmV0dXJuIC0xOworCQkJfQorCQl9CisJCXJldHVybiBzdXBlci5lRGVyaXZlZFN0cnVjdHVyYWxGZWF0dXJlSUQoYmFzZUZlYXR1cmVJRCwgYmFzZUNsYXNzKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkgeworCQlpZiAoZUlzUHJveHkoKSkgcmV0dXJuIHN1cGVyLnRvU3RyaW5nKCk7CisKKwkJU3RyaW5nQnVmZmVyIHJlc3VsdCA9IG5ldyBTdHJpbmdCdWZmZXIoc3VwZXIudG9TdHJpbmcoKSk7CisJCXJlc3VsdC5hcHBlbmQoIiAoc2VlZDogIik7IC8vJE5PTi1OTFMtMSQKKwkJcmVzdWx0LmFwcGVuZChzZWVkKTsKKwkJcmVzdWx0LmFwcGVuZCgiLCByYW5kb21HZW5lcmF0b3I6ICIpOyAvLyROT04tTkxTLTEkCisJCXJlc3VsdC5hcHBlbmQocmFuZG9tR2VuZXJhdG9yKTsKKwkJcmVzdWx0LmFwcGVuZCgiLCBnYWluOiAiKTsgLy8kTk9OLU5MUy0xJAorCQlyZXN1bHQuYXBwZW5kKGdhaW4pOworCQlyZXN1bHQuYXBwZW5kKCcpJyk7CisJCXJldHVybiByZXN1bHQudG9TdHJpbmcoKTsKKwl9CisKK30gLy8gU3RvY2hhc3RpY1NJUkRpc2Vhc2VNb2RlbEltcGwKZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvc3RhbmRhcmQvcHJvdmlkZXIvQWdncmVnYXRpbmdEaXNlYXNlTW9kZWxTdGF0ZUl0ZW1Qcm92aWRlci5qYXZhIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9zdGFuZGFyZC9wcm92aWRlci9BZ2dyZWdhdGluZ0Rpc2Vhc2VNb2RlbFN0YXRlSXRlbVByb3ZpZGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2IwZGQxNAotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvc3RhbmRhcmQvcHJvdmlkZXIvQWdncmVnYXRpbmdEaXNlYXNlTW9kZWxTdGF0ZUl0ZW1Qcm92aWRlci5qYXZhCkBAIC0wLDAgKzEsMTI1IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5wcm92aWRlcjsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LkFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5Db21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklFZGl0aW5nRG9tYWluSXRlbVByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtTGFiZWxQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbVByb3BlcnR5RGVzY3JpcHRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbVByb3BlcnR5U291cmNlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklTdHJ1Y3R1cmVkSXRlbUNvbnRlbnRQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JVHJlZUl0ZW1Db250ZW50UHJvdmlkZXI7CisKKy8qKgorICogVGhpcyBpcyB0aGUgaXRlbSBwcm92aWRlciBhZGFwdGVyIGZvciBhIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuQWdncmVnYXRpbmdEaXNlYXNlTW9kZWxTdGF0ZX0gb2JqZWN0LgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgQWdncmVnYXRpbmdEaXNlYXNlTW9kZWxTdGF0ZUl0ZW1Qcm92aWRlcgorCWV4dGVuZHMgRGlzZWFzZU1vZGVsU3RhdGVJdGVtUHJvdmlkZXIKKwlpbXBsZW1lbnRzCQorCQlJRWRpdGluZ0RvbWFpbkl0ZW1Qcm92aWRlciwJCisJCUlTdHJ1Y3R1cmVkSXRlbUNvbnRlbnRQcm92aWRlciwJCisJCUlUcmVlSXRlbUNvbnRlbnRQcm92aWRlciwJCisJCUlJdGVtTGFiZWxQcm92aWRlciwJCisJCUlJdGVtUHJvcGVydHlTb3VyY2UgeworCS8qKgorCSAqIFRoaXMgY29uc3RydWN0cyBhbiBpbnN0YW5jZSBmcm9tIGEgZmFjdG9yeSBhbmQgYSBub3RpZmllci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQWdncmVnYXRpbmdEaXNlYXNlTW9kZWxTdGF0ZUl0ZW1Qcm92aWRlcihBZGFwdGVyRmFjdG9yeSBhZGFwdGVyRmFjdG9yeSkgeworCQlzdXBlcihhZGFwdGVyRmFjdG9yeSk7CisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIHRoZSBwcm9wZXJ0eSBkZXNjcmlwdG9ycyBmb3IgdGhlIGFkYXB0ZWQgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIExpc3Q8SUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I+IGdldFByb3BlcnR5RGVzY3JpcHRvcnMoT2JqZWN0IG9iamVjdCkgeworCQlpZiAoaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMgPT0gbnVsbCkgeworCQkJc3VwZXIuZ2V0UHJvcGVydHlEZXNjcmlwdG9ycyhvYmplY3QpOworCisJCQlhZGRDaGlsZHJlbnNMYWJlbHNQcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0KTsKKwkJfQorCQlyZXR1cm4gaXRlbVByb3BlcnR5RGVzY3JpcHRvcnM7CisJfQorCisJLyoqCisJICogVGhpcyBhZGRzIGEgcHJvcGVydHkgZGVzY3JpcHRvciBmb3IgdGhlIENoaWxkcmVucyBMYWJlbHMgZmVhdHVyZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBhZGRDaGlsZHJlbnNMYWJlbHNQcm9wZXJ0eURlc2NyaXB0b3IoT2JqZWN0IG9iamVjdCkgeworCQlpdGVtUHJvcGVydHlEZXNjcmlwdG9ycy5hZGQKKwkJCShjcmVhdGVJdGVtUHJvcGVydHlEZXNjcmlwdG9yCisJCQkJKCgoQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSlhZGFwdGVyRmFjdG9yeSkuZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCksCisJCQkJIGdldFJlc291cmNlTG9jYXRvcigpLAorCQkJCSBnZXRTdHJpbmcoIl9VSV9BZ2dyZWdhdGluZ0Rpc2Vhc2VNb2RlbFN0YXRlX2NoaWxkcmVuc0xhYmVsc19mZWF0dXJlIiksIC8vJE5PTi1OTFMtMSQKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfUHJvcGVydHlEZXNjcmlwdG9yX2Rlc2NyaXB0aW9uIiwgIl9VSV9BZ2dyZWdhdGluZ0Rpc2Vhc2VNb2RlbFN0YXRlX2NoaWxkcmVuc0xhYmVsc19mZWF0dXJlIiwgIl9VSV9BZ2dyZWdhdGluZ0Rpc2Vhc2VNb2RlbFN0YXRlX3R5cGUiKSwgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkIC8vJE5PTi1OTFMtMyQKKwkJCQkgbnVsbCwKKwkJCQkgdHJ1ZSwKKwkJCQkgZmFsc2UsCisJCQkJIHRydWUsCisJCQkJIG51bGwsCisJCQkJIG51bGwsCisJCQkJIG51bGwpKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgdGhlIGxhYmVsIHRleHQgZm9yIHRoZSBhZGFwdGVkIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBTdHJpbmcgZ2V0VGV4dChPYmplY3Qgb2JqZWN0KSB7CisJCXJldHVybiBnZXRTdHJpbmcoIl9VSV9BZ2dyZWdhdGluZ0Rpc2Vhc2VNb2RlbFN0YXRlX3R5cGUiKTsgLy8kTk9OLU5MUy0xJAorCX0KKworCS8qKgorCSAqIFRoaXMgaGFuZGxlcyBtb2RlbCBub3RpZmljYXRpb25zIGJ5IGNhbGxpbmcge0BsaW5rICN1cGRhdGVDaGlsZHJlbn0gdG8gdXBkYXRlIGFueSBjYWNoZWQKKwkgKiBjaGlsZHJlbiBhbmQgYnkgY3JlYXRpbmcgYSB2aWV3ZXIgbm90aWZpY2F0aW9uLCB3aGljaCBpdCBwYXNzZXMgdG8ge0BsaW5rICNmaXJlTm90aWZ5Q2hhbmdlZH0uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgbm90aWZ5Q2hhbmdlZChOb3RpZmljYXRpb24gbm90aWZpY2F0aW9uKSB7CisJCXVwZGF0ZUNoaWxkcmVuKG5vdGlmaWNhdGlvbik7CisJCXN1cGVyLm5vdGlmeUNoYW5nZWQobm90aWZpY2F0aW9uKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFkZHMge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lZGl0LmNvbW1hbmQuQ29tbWFuZFBhcmFtZXRlcn1zIGRlc2NyaWJpbmcgdGhlIGNoaWxkcmVuCisJICogdGhhdCBjYW4gYmUgY3JlYXRlZCB1bmRlciB0aGlzIG9iamVjdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgdm9pZCBjb2xsZWN0TmV3Q2hpbGREZXNjcmlwdG9ycyhDb2xsZWN0aW9uPE9iamVjdD4gbmV3Q2hpbGREZXNjcmlwdG9ycywgT2JqZWN0IG9iamVjdCkgeworCQlzdXBlci5jb2xsZWN0TmV3Q2hpbGREZXNjcmlwdG9ycyhuZXdDaGlsZERlc2NyaXB0b3JzLCBvYmplY3QpOworCX0KKworfQpkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9zdGFuZGFyZC9wcm92aWRlci9BZ2dyZWdhdGluZ1NFSVJEaXNlYXNlTW9kZWxJdGVtUHJvdmlkZXIuamF2YSBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvc3RhbmRhcmQvcHJvdmlkZXIvQWdncmVnYXRpbmdTRUlSRGlzZWFzZU1vZGVsSXRlbVByb3ZpZGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDMyMTIxZgotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvc3RhbmRhcmQvcHJvdmlkZXIvQWdncmVnYXRpbmdTRUlSRGlzZWFzZU1vZGVsSXRlbVByb3ZpZGVyLmphdmEKQEAgLTAsMCArMSwxMDEgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLnByb3ZpZGVyOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOworaW1wb3J0IGphdmEudXRpbC5MaXN0OworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklFZGl0aW5nRG9tYWluSXRlbVByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtTGFiZWxQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbVByb3BlcnR5RGVzY3JpcHRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbVByb3BlcnR5U291cmNlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklTdHJ1Y3R1cmVkSXRlbUNvbnRlbnRQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JVHJlZUl0ZW1Db250ZW50UHJvdmlkZXI7CisKKy8qKgorICogVGhpcyBpcyB0aGUgaXRlbSBwcm92aWRlciBhZGFwdGVyIGZvciBhIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuQWdncmVnYXRpbmdTRUlSRGlzZWFzZU1vZGVsfSBvYmplY3QuCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBBZ2dyZWdhdGluZ1NFSVJEaXNlYXNlTW9kZWxJdGVtUHJvdmlkZXIKKwlleHRlbmRzIEFnZ3JlZ2F0aW5nU0lSRGlzZWFzZU1vZGVsSXRlbVByb3ZpZGVyCisJaW1wbGVtZW50cwkKKwkJSUVkaXRpbmdEb21haW5JdGVtUHJvdmlkZXIsCQorCQlJU3RydWN0dXJlZEl0ZW1Db250ZW50UHJvdmlkZXIsCQorCQlJVHJlZUl0ZW1Db250ZW50UHJvdmlkZXIsCQorCQlJSXRlbUxhYmVsUHJvdmlkZXIsCQorCQlJSXRlbVByb3BlcnR5U291cmNlIHsKKwkvKioKKwkgKiBUaGlzIGNvbnN0cnVjdHMgYW4gaW5zdGFuY2UgZnJvbSBhIGZhY3RvcnkgYW5kIGEgbm90aWZpZXIuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEFnZ3JlZ2F0aW5nU0VJUkRpc2Vhc2VNb2RlbEl0ZW1Qcm92aWRlcihBZGFwdGVyRmFjdG9yeSBhZGFwdGVyRmFjdG9yeSkgeworCQlzdXBlcihhZGFwdGVyRmFjdG9yeSk7CisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIHRoZSBwcm9wZXJ0eSBkZXNjcmlwdG9ycyBmb3IgdGhlIGFkYXB0ZWQgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIExpc3Q8SUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I+IGdldFByb3BlcnR5RGVzY3JpcHRvcnMoT2JqZWN0IG9iamVjdCkgeworCQlpZiAoaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMgPT0gbnVsbCkgeworCQkJc3VwZXIuZ2V0UHJvcGVydHlEZXNjcmlwdG9ycyhvYmplY3QpOworCisJCX0KKwkJcmV0dXJuIGl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzOworCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyB0aGUgbGFiZWwgdGV4dCBmb3IgdGhlIGFkYXB0ZWQgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBTdHJpbmcgZ2V0VGV4dChPYmplY3Qgb2JqZWN0KSB7CisJCXJldHVybiBzdXBlci5nZXRUZXh0KG9iamVjdCk7CisJfQorCisJLyoqCisJICogVGhpcyBoYW5kbGVzIG1vZGVsIG5vdGlmaWNhdGlvbnMgYnkgY2FsbGluZyB7QGxpbmsgI3VwZGF0ZUNoaWxkcmVufSB0byB1cGRhdGUgYW55IGNhY2hlZAorCSAqIGNoaWxkcmVuIGFuZCBieSBjcmVhdGluZyBhIHZpZXdlciBub3RpZmljYXRpb24sIHdoaWNoIGl0IHBhc3NlcyB0byB7QGxpbmsgI2ZpcmVOb3RpZnlDaGFuZ2VkfS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBub3RpZnlDaGFuZ2VkKE5vdGlmaWNhdGlvbiBub3RpZmljYXRpb24pIHsKKwkJdXBkYXRlQ2hpbGRyZW4obm90aWZpY2F0aW9uKTsKKwkJc3VwZXIubm90aWZ5Q2hhbmdlZChub3RpZmljYXRpb24pOworCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmVkaXQuY29tbWFuZC5Db21tYW5kUGFyYW1ldGVyfXMgZGVzY3JpYmluZyB0aGUgY2hpbGRyZW4KKwkgKiB0aGF0IGNhbiBiZSBjcmVhdGVkIHVuZGVyIHRoaXMgb2JqZWN0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIGNvbGxlY3ROZXdDaGlsZERlc2NyaXB0b3JzKENvbGxlY3Rpb248T2JqZWN0PiBuZXdDaGlsZERlc2NyaXB0b3JzLCBPYmplY3Qgb2JqZWN0KSB7CisJCXN1cGVyLmNvbGxlY3ROZXdDaGlsZERlc2NyaXB0b3JzKG5ld0NoaWxkRGVzY3JpcHRvcnMsIG9iamVjdCk7CisJfQorCit9CmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3N0YW5kYXJkL3Byb3ZpZGVyL0FnZ3JlZ2F0aW5nU0lEaXNlYXNlTW9kZWxJdGVtUHJvdmlkZXIuamF2YSBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvc3RhbmRhcmQvcHJvdmlkZXIvQWdncmVnYXRpbmdTSURpc2Vhc2VNb2RlbEl0ZW1Qcm92aWRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZlODQwNjIKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3N0YW5kYXJkL3Byb3ZpZGVyL0FnZ3JlZ2F0aW5nU0lEaXNlYXNlTW9kZWxJdGVtUHJvdmlkZXIuamF2YQpAQCAtMCwwICsxLDExNiBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQucHJvdmlkZXI7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5BZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUVkaXRpbmdEb21haW5JdGVtUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1MYWJlbFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtUHJvcGVydHlEZXNjcmlwdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtUHJvcGVydHlTb3VyY2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVN0cnVjdHVyZWRJdGVtQ29udGVudFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklUcmVlSXRlbUNvbnRlbnRQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuQWdncmVnYXRpbmdTSURpc2Vhc2VNb2RlbDsKKworLyoqCisgKiBUaGlzIGlzIHRoZSBpdGVtIHByb3ZpZGVyIGFkYXB0ZXIgZm9yIGEge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5BZ2dyZWdhdGluZ1NJRGlzZWFzZU1vZGVsfSBvYmplY3QuCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBBZ2dyZWdhdGluZ1NJRGlzZWFzZU1vZGVsSXRlbVByb3ZpZGVyCisJZXh0ZW5kcyBTSUl0ZW1Qcm92aWRlcgorCWltcGxlbWVudHMJCisJCUlFZGl0aW5nRG9tYWluSXRlbVByb3ZpZGVyLAkKKwkJSVN0cnVjdHVyZWRJdGVtQ29udGVudFByb3ZpZGVyLAkKKwkJSVRyZWVJdGVtQ29udGVudFByb3ZpZGVyLAkKKwkJSUl0ZW1MYWJlbFByb3ZpZGVyLAkKKwkJSUl0ZW1Qcm9wZXJ0eVNvdXJjZSB7CisJLyoqCisJICogVGhpcyBjb25zdHJ1Y3RzIGFuIGluc3RhbmNlIGZyb20gYSBmYWN0b3J5IGFuZCBhIG5vdGlmaWVyLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBBZ2dyZWdhdGluZ1NJRGlzZWFzZU1vZGVsSXRlbVByb3ZpZGVyKEFkYXB0ZXJGYWN0b3J5IGFkYXB0ZXJGYWN0b3J5KSB7CisJCXN1cGVyKGFkYXB0ZXJGYWN0b3J5KTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgdGhlIHByb3BlcnR5IGRlc2NyaXB0b3JzIGZvciB0aGUgYWRhcHRlZCBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgTGlzdDxJSXRlbVByb3BlcnR5RGVzY3JpcHRvcj4gZ2V0UHJvcGVydHlEZXNjcmlwdG9ycyhPYmplY3Qgb2JqZWN0KSB7CisJCWlmIChpdGVtUHJvcGVydHlEZXNjcmlwdG9ycyA9PSBudWxsKSB7CisJCQlzdXBlci5nZXRQcm9wZXJ0eURlc2NyaXB0b3JzKG9iamVjdCk7CisKKwkJfQorCQlyZXR1cm4gaXRlbVByb3BlcnR5RGVzY3JpcHRvcnM7CisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIHRoZSBsYWJlbCB0ZXh0IGZvciB0aGUgYWRhcHRlZCBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIFN0cmluZyBnZXRUZXh0KE9iamVjdCBvYmplY3QpIHsKKwkJcmV0dXJuIHN1cGVyLmdldFRleHQob2JqZWN0KTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgdGhlIGxhYmVsIHRleHQgZm9yIHRoZSBhZGFwdGVkIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBTdHJpbmcgZ2V0VGV4dEdlbihPYmplY3Qgb2JqZWN0KSB7CisJCVN0cmluZyBsYWJlbCA9ICgoQWdncmVnYXRpbmdTSURpc2Vhc2VNb2RlbClvYmplY3QpLmdldERpc2Vhc2VOYW1lKCk7CisJCXJldHVybiBsYWJlbCA9PSBudWxsIHx8IGxhYmVsLmxlbmd0aCgpID09IDAgPworCQkJZ2V0U3RyaW5nKCJfVUlfQWdncmVnYXRpbmdTSURpc2Vhc2VNb2RlbF90eXBlIikgOiAvLyROT04tTkxTLTEkCisJCQlnZXRTdHJpbmcoIl9VSV9BZ2dyZWdhdGluZ1NJRGlzZWFzZU1vZGVsX3R5cGUiKSArICIgIiArIGxhYmVsOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKKwl9CisJCisJLyoqCisJICogVGhpcyBoYW5kbGVzIG1vZGVsIG5vdGlmaWNhdGlvbnMgYnkgY2FsbGluZyB7QGxpbmsgI3VwZGF0ZUNoaWxkcmVufSB0byB1cGRhdGUgYW55IGNhY2hlZAorCSAqIGNoaWxkcmVuIGFuZCBieSBjcmVhdGluZyBhIHZpZXdlciBub3RpZmljYXRpb24sIHdoaWNoIGl0IHBhc3NlcyB0byB7QGxpbmsgI2ZpcmVOb3RpZnlDaGFuZ2VkfS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBub3RpZnlDaGFuZ2VkKE5vdGlmaWNhdGlvbiBub3RpZmljYXRpb24pIHsKKwkJdXBkYXRlQ2hpbGRyZW4obm90aWZpY2F0aW9uKTsKKwkJc3VwZXIubm90aWZ5Q2hhbmdlZChub3RpZmljYXRpb24pOworCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmVkaXQuY29tbWFuZC5Db21tYW5kUGFyYW1ldGVyfXMgZGVzY3JpYmluZyB0aGUgY2hpbGRyZW4KKwkgKiB0aGF0IGNhbiBiZSBjcmVhdGVkIHVuZGVyIHRoaXMgb2JqZWN0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIGNvbGxlY3ROZXdDaGlsZERlc2NyaXB0b3JzKENvbGxlY3Rpb248T2JqZWN0PiBuZXdDaGlsZERlc2NyaXB0b3JzLCBPYmplY3Qgb2JqZWN0KSB7CisJCXN1cGVyLmNvbGxlY3ROZXdDaGlsZERlc2NyaXB0b3JzKG5ld0NoaWxkRGVzY3JpcHRvcnMsIG9iamVjdCk7CisJfQorCit9CmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3N0YW5kYXJkL3Byb3ZpZGVyL0FnZ3JlZ2F0aW5nU0lSRGlzZWFzZU1vZGVsSXRlbVByb3ZpZGVyLmphdmEgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3N0YW5kYXJkL3Byb3ZpZGVyL0FnZ3JlZ2F0aW5nU0lSRGlzZWFzZU1vZGVsSXRlbVByb3ZpZGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzYyNzhkYgotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvc3RhbmRhcmQvcHJvdmlkZXIvQWdncmVnYXRpbmdTSVJEaXNlYXNlTW9kZWxJdGVtUHJvdmlkZXIuamF2YQpAQCAtMCwwICsxLDEwNSBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQucHJvdmlkZXI7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5BZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUVkaXRpbmdEb21haW5JdGVtUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1MYWJlbFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtUHJvcGVydHlEZXNjcmlwdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtUHJvcGVydHlTb3VyY2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVN0cnVjdHVyZWRJdGVtQ29udGVudFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklUcmVlSXRlbUNvbnRlbnRQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuQWdncmVnYXRpbmdTSVJEaXNlYXNlTW9kZWw7CisKKy8qKgorICogVGhpcyBpcyB0aGUgaXRlbSBwcm92aWRlciBhZGFwdGVyIGZvciBhIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuQWdncmVnYXRpbmdTSVJEaXNlYXNlTW9kZWx9IG9iamVjdC4KKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIEFnZ3JlZ2F0aW5nU0lSRGlzZWFzZU1vZGVsSXRlbVByb3ZpZGVyCisJZXh0ZW5kcyBBZ2dyZWdhdGluZ1NJRGlzZWFzZU1vZGVsSXRlbVByb3ZpZGVyCisJaW1wbGVtZW50cwkKKwkJSUVkaXRpbmdEb21haW5JdGVtUHJvdmlkZXIsCQorCQlJU3RydWN0dXJlZEl0ZW1Db250ZW50UHJvdmlkZXIsCQorCQlJVHJlZUl0ZW1Db250ZW50UHJvdmlkZXIsCQorCQlJSXRlbUxhYmVsUHJvdmlkZXIsCQorCQlJSXRlbVByb3BlcnR5U291cmNlIHsKKwkvKioKKwkgKiBUaGlzIGNvbnN0cnVjdHMgYW4gaW5zdGFuY2UgZnJvbSBhIGZhY3RvcnkgYW5kIGEgbm90aWZpZXIuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEFnZ3JlZ2F0aW5nU0lSRGlzZWFzZU1vZGVsSXRlbVByb3ZpZGVyKEFkYXB0ZXJGYWN0b3J5IGFkYXB0ZXJGYWN0b3J5KSB7CisJCXN1cGVyKGFkYXB0ZXJGYWN0b3J5KTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgdGhlIHByb3BlcnR5IGRlc2NyaXB0b3JzIGZvciB0aGUgYWRhcHRlZCBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgTGlzdDxJSXRlbVByb3BlcnR5RGVzY3JpcHRvcj4gZ2V0UHJvcGVydHlEZXNjcmlwdG9ycyhPYmplY3Qgb2JqZWN0KSB7CisJCWlmIChpdGVtUHJvcGVydHlEZXNjcmlwdG9ycyA9PSBudWxsKSB7CisJCQlzdXBlci5nZXRQcm9wZXJ0eURlc2NyaXB0b3JzKG9iamVjdCk7CisKKwkJfQorCQlyZXR1cm4gaXRlbVByb3BlcnR5RGVzY3JpcHRvcnM7CisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIHRoZSBsYWJlbCB0ZXh0IGZvciB0aGUgYWRhcHRlZCBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgU3RyaW5nIGdldFRleHQoT2JqZWN0IG9iamVjdCkgeworCQlTdHJpbmcgbGFiZWwgPSAoKEFnZ3JlZ2F0aW5nU0lSRGlzZWFzZU1vZGVsKW9iamVjdCkuZ2V0RGlzZWFzZU5hbWUoKTsKKwkJcmV0dXJuIGxhYmVsID09IG51bGwgfHwgbGFiZWwubGVuZ3RoKCkgPT0gMCA/CisJCQlnZXRTdHJpbmcoIl9VSV9BZ2dyZWdhdGluZ1NJUkRpc2Vhc2VNb2RlbF90eXBlIikgOiAvLyROT04tTkxTLTEkCisJCQlnZXRTdHJpbmcoIl9VSV9BZ2dyZWdhdGluZ1NJUkRpc2Vhc2VNb2RlbF90eXBlIikgKyAiICIgKyBsYWJlbDsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCisJfQorCisJLyoqCisJICogVGhpcyBoYW5kbGVzIG1vZGVsIG5vdGlmaWNhdGlvbnMgYnkgY2FsbGluZyB7QGxpbmsgI3VwZGF0ZUNoaWxkcmVufSB0byB1cGRhdGUgYW55IGNhY2hlZAorCSAqIGNoaWxkcmVuIGFuZCBieSBjcmVhdGluZyBhIHZpZXdlciBub3RpZmljYXRpb24sIHdoaWNoIGl0IHBhc3NlcyB0byB7QGxpbmsgI2ZpcmVOb3RpZnlDaGFuZ2VkfS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBub3RpZnlDaGFuZ2VkKE5vdGlmaWNhdGlvbiBub3RpZmljYXRpb24pIHsKKwkJdXBkYXRlQ2hpbGRyZW4obm90aWZpY2F0aW9uKTsKKwkJc3VwZXIubm90aWZ5Q2hhbmdlZChub3RpZmljYXRpb24pOworCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmVkaXQuY29tbWFuZC5Db21tYW5kUGFyYW1ldGVyfXMgZGVzY3JpYmluZyB0aGUgY2hpbGRyZW4KKwkgKiB0aGF0IGNhbiBiZSBjcmVhdGVkIHVuZGVyIHRoaXMgb2JqZWN0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIGNvbGxlY3ROZXdDaGlsZERlc2NyaXB0b3JzKENvbGxlY3Rpb248T2JqZWN0PiBuZXdDaGlsZERlc2NyaXB0b3JzLCBPYmplY3Qgb2JqZWN0KSB7CisJCXN1cGVyLmNvbGxlY3ROZXdDaGlsZERlc2NyaXB0b3JzKG5ld0NoaWxkRGVzY3JpcHRvcnMsIG9iamVjdCk7CisJfQorCit9CmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3N0YW5kYXJkL3Byb3ZpZGVyL0RldGVybWluaXN0aWNTRUlSRGlzZWFzZU1vZGVsSXRlbVByb3ZpZGVyLmphdmEgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3N0YW5kYXJkL3Byb3ZpZGVyL0RldGVybWluaXN0aWNTRUlSRGlzZWFzZU1vZGVsSXRlbVByb3ZpZGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmJjYzY0YwotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvc3RhbmRhcmQvcHJvdmlkZXIvRGV0ZXJtaW5pc3RpY1NFSVJEaXNlYXNlTW9kZWxJdGVtUHJvdmlkZXIuamF2YQpAQCAtMCwwICsxLDEzMCBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQucHJvdmlkZXI7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5BZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUVkaXRpbmdEb21haW5JdGVtUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1MYWJlbFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtUHJvcGVydHlEZXNjcmlwdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtUHJvcGVydHlTb3VyY2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVN0cnVjdHVyZWRJdGVtQ29udGVudFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklUcmVlSXRlbUNvbnRlbnRQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuRGV0ZXJtaW5pc3RpY1NFSVJEaXNlYXNlTW9kZWw7CisKKy8qKgorICogVGhpcyBpcyB0aGUgaXRlbSBwcm92aWRlciBhZGFwdGVyIGZvciBhIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuRGV0ZXJtaW5pc3RpY1NFSVJEaXNlYXNlTW9kZWx9IG9iamVjdC4KKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgRGV0ZXJtaW5pc3RpY1NFSVJEaXNlYXNlTW9kZWxJdGVtUHJvdmlkZXIgZXh0ZW5kcyBTRUlSSXRlbVByb3ZpZGVyCisJCWltcGxlbWVudHMgSUVkaXRpbmdEb21haW5JdGVtUHJvdmlkZXIsIElTdHJ1Y3R1cmVkSXRlbUNvbnRlbnRQcm92aWRlciwKKwkJSVRyZWVJdGVtQ29udGVudFByb3ZpZGVyLCBJSXRlbUxhYmVsUHJvdmlkZXIsIElJdGVtUHJvcGVydHlTb3VyY2UgeworCS8qKgorCSAqIFRoaXMgY29uc3RydWN0cyBhbiBpbnN0YW5jZSBmcm9tIGEgZmFjdG9yeSBhbmQgYSBub3RpZmllci4gPCEtLQorCSAqIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBwYXJhbSBhZGFwdGVyRmFjdG9yeQorCSAqIAorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRGV0ZXJtaW5pc3RpY1NFSVJEaXNlYXNlTW9kZWxJdGVtUHJvdmlkZXIoCisJCQlBZGFwdGVyRmFjdG9yeSBhZGFwdGVyRmFjdG9yeSkgeworCQlzdXBlcihhZGFwdGVyRmFjdG9yeSk7CisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIHRoZSBwcm9wZXJ0eSBkZXNjcmlwdG9ycyBmb3IgdGhlIGFkYXB0ZWQgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAcGFyYW0gb2JqZWN0CisJICogQHJldHVybgorCSAqIAorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgTGlzdDxJSXRlbVByb3BlcnR5RGVzY3JpcHRvcj4gZ2V0UHJvcGVydHlEZXNjcmlwdG9ycyhPYmplY3Qgb2JqZWN0KSB7CisJCWlmIChpdGVtUHJvcGVydHlEZXNjcmlwdG9ycyA9PSBudWxsKSB7CisJCQlzdXBlci5nZXRQcm9wZXJ0eURlc2NyaXB0b3JzKG9iamVjdCk7CisKKwkJfQorCQlyZXR1cm4gaXRlbVByb3BlcnR5RGVzY3JpcHRvcnM7CisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIHRoZSBsYWJlbCB0ZXh0IGZvciB0aGUgYWRhcHRlZCBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBwYXJhbSBvYmplY3QKKwkgKiBAcmV0dXJuCisJICogCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgU3RyaW5nIGdldFRleHQoT2JqZWN0IG9iamVjdCkgeworCQlyZXR1cm4gc3VwZXIuZ2V0VGV4dChvYmplY3QpOworCX0KKwkKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgdGhlIGxhYmVsIHRleHQgZm9yIHRoZSBhZGFwdGVkIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogCisJICogQHBhcmFtIG9iamVjdAorCSAqIEByZXR1cm4KKwkgKiAKKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIFN0cmluZyBnZXRUZXh0R2VuKE9iamVjdCBvYmplY3QpIHsKKwkJU3RyaW5nIGxhYmVsID0gKChEZXRlcm1pbmlzdGljU0VJUkRpc2Vhc2VNb2RlbClvYmplY3QpLmdldERpc2Vhc2VOYW1lKCk7CisJCXJldHVybiBsYWJlbCA9PSBudWxsIHx8IGxhYmVsLmxlbmd0aCgpID09IDAgPworCQkJZ2V0U3RyaW5nKCJfVUlfRGV0ZXJtaW5pc3RpY1NFSVJEaXNlYXNlTW9kZWxfdHlwZSIpIDogLy8kTk9OLU5MUy0xJAorCQkJZ2V0U3RyaW5nKCJfVUlfRGV0ZXJtaW5pc3RpY1NFSVJEaXNlYXNlTW9kZWxfdHlwZSIpICsgIiAiICsgbGFiZWw7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAorCX0KKwkKKworCS8qKgorCSAqIFRoaXMgaGFuZGxlcyBtb2RlbCBub3RpZmljYXRpb25zIGJ5IGNhbGxpbmcge0BsaW5rICN1cGRhdGVDaGlsZHJlbn0gdG8gdXBkYXRlIGFueSBjYWNoZWQKKwkgKiBjaGlsZHJlbiBhbmQgYnkgY3JlYXRpbmcgYSB2aWV3ZXIgbm90aWZpY2F0aW9uLCB3aGljaCBpdCBwYXNzZXMgdG8ge0BsaW5rICNmaXJlTm90aWZ5Q2hhbmdlZH0uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAcGFyYW0gbm90aWZpY2F0aW9uCisJICogCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIG5vdGlmeUNoYW5nZWQoTm90aWZpY2F0aW9uIG5vdGlmaWNhdGlvbikgeworCQl1cGRhdGVDaGlsZHJlbihub3RpZmljYXRpb24pOworCQlzdXBlci5ub3RpZnlDaGFuZ2VkKG5vdGlmaWNhdGlvbik7CisJfQorCisJLyoqCisJICogVGhpcyBhZGRzIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuZWRpdC5jb21tYW5kLkNvbW1hbmRQYXJhbWV0ZXJ9cyBkZXNjcmliaW5nIHRoZSBjaGlsZHJlbgorCSAqIHRoYXQgY2FuIGJlIGNyZWF0ZWQgdW5kZXIgdGhpcyBvYmplY3QuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYworCSAqIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgY29sbGVjdE5ld0NoaWxkRGVzY3JpcHRvcnMoQ29sbGVjdGlvbjxPYmplY3Q+IG5ld0NoaWxkRGVzY3JpcHRvcnMsIE9iamVjdCBvYmplY3QpIHsKKwkJc3VwZXIuY29sbGVjdE5ld0NoaWxkRGVzY3JpcHRvcnMobmV3Q2hpbGREZXNjcmlwdG9ycywgb2JqZWN0KTsKKwl9CisKK30gLy8gRGV0ZXJtaW5pc3RpY1NFSVJEaXNlYXNlTW9kZWxJdGVtUHJvdmlkZXIKZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvc3RhbmRhcmQvcHJvdmlkZXIvRGV0ZXJtaW5pc3RpY1NJRGlzZWFzZU1vZGVsSXRlbVByb3ZpZGVyLmphdmEgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3N0YW5kYXJkL3Byb3ZpZGVyL0RldGVybWluaXN0aWNTSURpc2Vhc2VNb2RlbEl0ZW1Qcm92aWRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJmNmQ2YjcKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3N0YW5kYXJkL3Byb3ZpZGVyL0RldGVybWluaXN0aWNTSURpc2Vhc2VNb2RlbEl0ZW1Qcm92aWRlci5qYXZhCkBAIC0wLDAgKzEsMTMwIEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5wcm92aWRlcjsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LkFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JRWRpdGluZ0RvbWFpbkl0ZW1Qcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbUxhYmVsUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1Qcm9wZXJ0eVNvdXJjZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JU3RydWN0dXJlZEl0ZW1Db250ZW50UHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVRyZWVJdGVtQ29udGVudFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5EZXRlcm1pbmlzdGljU0lEaXNlYXNlTW9kZWw7CisKKy8qKgorICogVGhpcyBpcyB0aGUgaXRlbSBwcm92aWRlciBhZGFwdGVyIGZvciBhIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuRGV0ZXJtaW5pc3RpY1NJRGlzZWFzZU1vZGVsfSBvYmplY3QuCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIERldGVybWluaXN0aWNTSURpc2Vhc2VNb2RlbEl0ZW1Qcm92aWRlciBleHRlbmRzIFNJSXRlbVByb3ZpZGVyCisJCWltcGxlbWVudHMgSUVkaXRpbmdEb21haW5JdGVtUHJvdmlkZXIsIElTdHJ1Y3R1cmVkSXRlbUNvbnRlbnRQcm92aWRlciwKKwkJSVRyZWVJdGVtQ29udGVudFByb3ZpZGVyLCBJSXRlbUxhYmVsUHJvdmlkZXIsIElJdGVtUHJvcGVydHlTb3VyY2UgeworCS8qKgorCSAqIFRoaXMgY29uc3RydWN0cyBhbiBpbnN0YW5jZSBmcm9tIGEgZmFjdG9yeSBhbmQgYSBub3RpZmllci4gPCEtLQorCSAqIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBwYXJhbSBhZGFwdGVyRmFjdG9yeQorCSAqIAorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRGV0ZXJtaW5pc3RpY1NJRGlzZWFzZU1vZGVsSXRlbVByb3ZpZGVyKEFkYXB0ZXJGYWN0b3J5IGFkYXB0ZXJGYWN0b3J5KSB7CisJCXN1cGVyKGFkYXB0ZXJGYWN0b3J5KTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgdGhlIHByb3BlcnR5IGRlc2NyaXB0b3JzIGZvciB0aGUgYWRhcHRlZCBjbGFzcy4gPCEtLQorCSAqIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBwYXJhbSBvYmplY3QKKwkgKiBAcmV0dXJuCisJICogCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBMaXN0PElJdGVtUHJvcGVydHlEZXNjcmlwdG9yPiBnZXRQcm9wZXJ0eURlc2NyaXB0b3JzKE9iamVjdCBvYmplY3QpIHsKKwkJaWYgKGl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzID09IG51bGwpIHsKKwkJCXN1cGVyLmdldFByb3BlcnR5RGVzY3JpcHRvcnMob2JqZWN0KTsKKworCQl9CisJCXJldHVybiBpdGVtUHJvcGVydHlEZXNjcmlwdG9yczsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgdGhlIGxhYmVsIHRleHQgZm9yIHRoZSBhZGFwdGVkIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MKKwkgKiAtLT4KKwkgKiAKKwkgKiBAcGFyYW0gb2JqZWN0CisJICogQHJldHVybgorCSAqIAorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIFN0cmluZyBnZXRUZXh0KE9iamVjdCBvYmplY3QpIHsKKwkJcmV0dXJuIHN1cGVyLmdldFRleHQob2JqZWN0KTsKKwl9CisJCisJLyoqCisJICogVGhpcyByZXR1cm5zIHRoZSBsYWJlbCB0ZXh0IGZvciB0aGUgYWRhcHRlZCBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jCisJICogLS0+CisJICogCisJICogQHBhcmFtIG9iamVjdAorCSAqIEByZXR1cm4KKwkgKiAKKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIFN0cmluZyBnZXRUZXh0R2VuKE9iamVjdCBvYmplY3QpIHsKKwkJU3RyaW5nIGxhYmVsID0gKChEZXRlcm1pbmlzdGljU0lEaXNlYXNlTW9kZWwpb2JqZWN0KS5nZXREaXNlYXNlTmFtZSgpOworCQlyZXR1cm4gbGFiZWwgPT0gbnVsbCB8fCBsYWJlbC5sZW5ndGgoKSA9PSAwID8KKwkJCWdldFN0cmluZygiX1VJX0RldGVybWluaXN0aWNTSURpc2Vhc2VNb2RlbF90eXBlIikgOiAvLyROT04tTkxTLTEkCisJCQlnZXRTdHJpbmcoIl9VSV9EZXRlcm1pbmlzdGljU0lEaXNlYXNlTW9kZWxfdHlwZSIpICsgIiAiICsgbGFiZWw7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAorCX0KKworCS8qKgorCSAqIFRoaXMgaGFuZGxlcyBtb2RlbCBub3RpZmljYXRpb25zIGJ5IGNhbGxpbmcge0BsaW5rICN1cGRhdGVDaGlsZHJlbn0gdG8gdXBkYXRlIGFueSBjYWNoZWQKKwkgKiBjaGlsZHJlbiBhbmQgYnkgY3JlYXRpbmcgYSB2aWV3ZXIgbm90aWZpY2F0aW9uLCB3aGljaCBpdCBwYXNzZXMgdG8ge0BsaW5rICNmaXJlTm90aWZ5Q2hhbmdlZH0uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAcGFyYW0gbm90aWZpY2F0aW9uCisJICogCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIG5vdGlmeUNoYW5nZWQoTm90aWZpY2F0aW9uIG5vdGlmaWNhdGlvbikgeworCQl1cGRhdGVDaGlsZHJlbihub3RpZmljYXRpb24pOworCQlzdXBlci5ub3RpZnlDaGFuZ2VkKG5vdGlmaWNhdGlvbik7CisJfQorCisJLyoqCisJICogVGhpcyBhZGRzIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuZWRpdC5jb21tYW5kLkNvbW1hbmRQYXJhbWV0ZXJ9cyBkZXNjcmliaW5nIHRoZSBjaGlsZHJlbgorCSAqIHRoYXQgY2FuIGJlIGNyZWF0ZWQgdW5kZXIgdGhpcyBvYmplY3QuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYworCSAqIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgY29sbGVjdE5ld0NoaWxkRGVzY3JpcHRvcnMoQ29sbGVjdGlvbjxPYmplY3Q+IG5ld0NoaWxkRGVzY3JpcHRvcnMsIE9iamVjdCBvYmplY3QpIHsKKwkJc3VwZXIuY29sbGVjdE5ld0NoaWxkRGVzY3JpcHRvcnMobmV3Q2hpbGREZXNjcmlwdG9ycywgb2JqZWN0KTsKKwl9CisKK30KZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvc3RhbmRhcmQvcHJvdmlkZXIvRGV0ZXJtaW5pc3RpY1NJUkRpc2Vhc2VNb2RlbEl0ZW1Qcm92aWRlci5qYXZhIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9zdGFuZGFyZC9wcm92aWRlci9EZXRlcm1pbmlzdGljU0lSRGlzZWFzZU1vZGVsSXRlbVByb3ZpZGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2FlZTMzNQotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvc3RhbmRhcmQvcHJvdmlkZXIvRGV0ZXJtaW5pc3RpY1NJUkRpc2Vhc2VNb2RlbEl0ZW1Qcm92aWRlci5qYXZhCkBAIC0wLDAgKzEsMTMyIEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5wcm92aWRlcjsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LkFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JRWRpdGluZ0RvbWFpbkl0ZW1Qcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbUxhYmVsUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1Qcm9wZXJ0eVNvdXJjZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JU3RydWN0dXJlZEl0ZW1Db250ZW50UHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVRyZWVJdGVtQ29udGVudFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5EZXRlcm1pbmlzdGljU0lSRGlzZWFzZU1vZGVsOworCisvKioKKyAqIFRoaXMgaXMgdGhlIGl0ZW0gcHJvdmlkZXIgYWRhcHRlciBmb3IgYSB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLkRldGVybWluaXN0aWNTSVJEaXNlYXNlTW9kZWx9IG9iamVjdC4KKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgRGV0ZXJtaW5pc3RpY1NJUkRpc2Vhc2VNb2RlbEl0ZW1Qcm92aWRlciBleHRlbmRzIFNJUkl0ZW1Qcm92aWRlcgorCQlpbXBsZW1lbnRzIElFZGl0aW5nRG9tYWluSXRlbVByb3ZpZGVyLCBJU3RydWN0dXJlZEl0ZW1Db250ZW50UHJvdmlkZXIsCisJCUlUcmVlSXRlbUNvbnRlbnRQcm92aWRlciwgSUl0ZW1MYWJlbFByb3ZpZGVyLCBJSXRlbVByb3BlcnR5U291cmNlIHsKKwkvKioKKwkgKiBUaGlzIGNvbnN0cnVjdHMgYW4gaW5zdGFuY2UgZnJvbSBhIGZhY3RvcnkgYW5kIGEgbm90aWZpZXIuIDwhLS0KKwkgKiBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAcGFyYW0gYWRhcHRlckZhY3RvcnkKKwkgKiAKKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIERldGVybWluaXN0aWNTSVJEaXNlYXNlTW9kZWxJdGVtUHJvdmlkZXIoCisJCQlBZGFwdGVyRmFjdG9yeSBhZGFwdGVyRmFjdG9yeSkgeworCQlzdXBlcihhZGFwdGVyRmFjdG9yeSk7CisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIHRoZSBwcm9wZXJ0eSBkZXNjcmlwdG9ycyBmb3IgdGhlIGFkYXB0ZWQgY2xhc3MuIDwhLS0KKwkgKiBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAcGFyYW0gb2JqZWN0CisJICogQHJldHVybgorCSAqIAorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgTGlzdDxJSXRlbVByb3BlcnR5RGVzY3JpcHRvcj4gZ2V0UHJvcGVydHlEZXNjcmlwdG9ycyhPYmplY3Qgb2JqZWN0KSB7CisJCWlmIChpdGVtUHJvcGVydHlEZXNjcmlwdG9ycyA9PSBudWxsKSB7CisJCQlzdXBlci5nZXRQcm9wZXJ0eURlc2NyaXB0b3JzKG9iamVjdCk7CisKKwkJfQorCQlyZXR1cm4gaXRlbVByb3BlcnR5RGVzY3JpcHRvcnM7CisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIHRoZSBsYWJlbCB0ZXh0IGZvciB0aGUgYWRhcHRlZCBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jCisJICogLS0+CisJICogCisJICogQHBhcmFtIG9iamVjdAorCSAqIEByZXR1cm4KKwkgKiAKKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBTdHJpbmcgZ2V0VGV4dChPYmplY3Qgb2JqZWN0KSB7CisJCXJldHVybiBzdXBlci5nZXRUZXh0KG9iamVjdCk7CisJfQorCisJCisJLyoqCisJICogVGhpcyByZXR1cm5zIHRoZSBsYWJlbCB0ZXh0IGZvciB0aGUgYWRhcHRlZCBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jCisJICogLS0+CisJICogCisJICogQHBhcmFtIG9iamVjdAorCSAqIEByZXR1cm4KKwkgKiAKKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIFN0cmluZyBnZXRUZXh0R2VuKE9iamVjdCBvYmplY3QpIHsKKwkJU3RyaW5nIGxhYmVsID0gKChEZXRlcm1pbmlzdGljU0lSRGlzZWFzZU1vZGVsKW9iamVjdCkuZ2V0RGlzZWFzZU5hbWUoKTsKKwkJcmV0dXJuIGxhYmVsID09IG51bGwgfHwgbGFiZWwubGVuZ3RoKCkgPT0gMCA/CisJCQlnZXRTdHJpbmcoIl9VSV9EZXRlcm1pbmlzdGljU0lSRGlzZWFzZU1vZGVsX3R5cGUiKSA6IC8vJE5PTi1OTFMtMSQKKwkJCWdldFN0cmluZygiX1VJX0RldGVybWluaXN0aWNTSVJEaXNlYXNlTW9kZWxfdHlwZSIpICsgIiAiICsgbGFiZWw7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAorCX0KKwkKKwkvKioKKwkgKiBUaGlzIGhhbmRsZXMgbW9kZWwgbm90aWZpY2F0aW9ucyBieSBjYWxsaW5nIHtAbGluayAjdXBkYXRlQ2hpbGRyZW59IHRvIHVwZGF0ZSBhbnkgY2FjaGVkCisJICogY2hpbGRyZW4gYW5kIGJ5IGNyZWF0aW5nIGEgdmlld2VyIG5vdGlmaWNhdGlvbiwgd2hpY2ggaXQgcGFzc2VzIHRvIHtAbGluayAjZmlyZU5vdGlmeUNoYW5nZWR9LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogCisJICogQHBhcmFtIG5vdGlmaWNhdGlvbgorCSAqIAorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBub3RpZnlDaGFuZ2VkKE5vdGlmaWNhdGlvbiBub3RpZmljYXRpb24pIHsKKwkJdXBkYXRlQ2hpbGRyZW4obm90aWZpY2F0aW9uKTsKKwkJc3VwZXIubm90aWZ5Q2hhbmdlZChub3RpZmljYXRpb24pOworCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmVkaXQuY29tbWFuZC5Db21tYW5kUGFyYW1ldGVyfXMgZGVzY3JpYmluZyB0aGUgY2hpbGRyZW4KKwkgKiB0aGF0IGNhbiBiZSBjcmVhdGVkIHVuZGVyIHRoaXMgb2JqZWN0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MKKwkgKiAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIGNvbGxlY3ROZXdDaGlsZERlc2NyaXB0b3JzKENvbGxlY3Rpb248T2JqZWN0PiBuZXdDaGlsZERlc2NyaXB0b3JzLCBPYmplY3Qgb2JqZWN0KSB7CisJCXN1cGVyLmNvbGxlY3ROZXdDaGlsZERlc2NyaXB0b3JzKG5ld0NoaWxkRGVzY3JpcHRvcnMsIG9iamVjdCk7CisJfQorCit9CmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3N0YW5kYXJkL3Byb3ZpZGVyL0Rpc2Vhc2VNb2RlbEl0ZW1Qcm92aWRlci5qYXZhIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9zdGFuZGFyZC9wcm92aWRlci9EaXNlYXNlTW9kZWxJdGVtUHJvdmlkZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMTQwMzY2Ci0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9zdGFuZGFyZC9wcm92aWRlci9EaXNlYXNlTW9kZWxJdGVtUHJvdmlkZXIuamF2YQpAQCAtMCwwICsxLDI3OSBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQucHJvdmlkZXI7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5BZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlJlc291cmNlTG9jYXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5Db21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklFZGl0aW5nRG9tYWluSXRlbVByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtTGFiZWxQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbVByb3BlcnR5RGVzY3JpcHRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbVByb3BlcnR5U291cmNlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklTdHJ1Y3R1cmVkSXRlbUNvbnRlbnRQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JVHJlZUl0ZW1Db250ZW50UHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSXRlbVByb3BlcnR5RGVzY3JpcHRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5WaWV3ZXJOb3RpZmljYXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLnByb3ZpZGVyLkludGVncmF0aW9uRGVjb3JhdG9ySXRlbVByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5wcm92aWRlci5Ob2RlRGVjb3JhdG9ySXRlbVByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5EaXNlYXNlTW9kZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkUGFja2FnZTsKKworLyoqCisgKiBUaGlzIGlzIHRoZSBpdGVtIHByb3ZpZGVyIGFkYXB0ZXIgZm9yIGEKKyAqIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuRGlzZWFzZU1vZGVsfSBvYmplY3QuIDwhLS0KKyAqIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIAorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgRGlzZWFzZU1vZGVsSXRlbVByb3ZpZGVyIGV4dGVuZHMgSW50ZWdyYXRpb25EZWNvcmF0b3JJdGVtUHJvdmlkZXIKKwkJaW1wbGVtZW50cyBJRWRpdGluZ0RvbWFpbkl0ZW1Qcm92aWRlciwgSVN0cnVjdHVyZWRJdGVtQ29udGVudFByb3ZpZGVyLAorCQlJVHJlZUl0ZW1Db250ZW50UHJvdmlkZXIsIElJdGVtTGFiZWxQcm92aWRlciwgSUl0ZW1Qcm9wZXJ0eVNvdXJjZSB7CisJLyoqCisJICogVGhpcyBjb25zdHJ1Y3RzIGFuIGluc3RhbmNlIGZyb20gYSBmYWN0b3J5IGFuZCBhIG5vdGlmaWVyLiA8IS0tCisJICogYmVnaW4tdXNlci1kb2MgLS0+CisJICogCisJICogQHBhcmFtIGFkYXB0ZXJGYWN0b3J5CisJICogCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBEaXNlYXNlTW9kZWxJdGVtUHJvdmlkZXIoQWRhcHRlckZhY3RvcnkgYWRhcHRlckZhY3RvcnkpIHsKKwkJc3VwZXIoYWRhcHRlckZhY3RvcnkpOworCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyB0aGUgcHJvcGVydHkgZGVzY3JpcHRvcnMgZm9yIHRoZSBhZGFwdGVkIGNsYXNzLiA8IS0tCisJICogYmVnaW4tdXNlci1kb2MgLS0+CisJICogCisJICogQHBhcmFtIG9iamVjdAorCSAqIEByZXR1cm4KKwkgKiAKKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBMaXN0IGdldFByb3BlcnR5RGVzY3JpcHRvcnMoT2JqZWN0IG9iamVjdCkgeworCQlpZiAoaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMgPT0gbnVsbCkgeworCQkJc3VwZXIuZ2V0UHJvcGVydHlEZXNjcmlwdG9ycyhvYmplY3QpOworCisJCQkvLyBNb2RpZmllZCB0byByZW9yZGVyIGhvdyB0aGUgcHJvcGVydGllcyBhcHBlYXIuICBUaGlzCisJCQkvLyBoZWxwcyBpbiB0aGUgbmV3IGRpc2Vhc2Ugd2l6YXJkLgorCQkJYWRkRGlzZWFzZU5hbWVQcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0KTsKKwkJCWFkZFBvcHVsYXRpb25JZGVudGlmaWVyUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCk7CisJCQlhZGRUaW1lUGVyaW9kUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCk7CisJCQkKKwkJCWFkZEZyZXF1ZW5jeURlcGVuZGVudFByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QpOworCQkJCisJCQkKKwkJCS8vIE9sZCBvcmRlcgorCQkJLy8JCQlhZGRCYWNrZ3JvdW5kTW9ydGFsaXR5UmF0ZVByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QpOworCQkJLy8JCQlhZGRQb3B1bGF0aW9uSWRlbnRpZmllclByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QpOworCQkJLy8JCQlhZGRUaW1lUGVyaW9kUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCk7CisJCQkvLwkJCWFkZERpc2Vhc2VOYW1lUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCk7CisJCX0KKwkJcmV0dXJuIGl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzOworCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyB0aGUgcHJvcGVydHkgZGVzY3JpcHRvcnMgZm9yIHRoZSBhZGFwdGVkIGNsYXNzLiA8IS0tCisJICogYmVnaW4tdXNlci1kb2MgLS0+CisJICogCisJICogQHBhcmFtIG9iamVjdAorCSAqIEByZXR1cm4KKwkgKiAKKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkIAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBMaXN0PElJdGVtUHJvcGVydHlEZXNjcmlwdG9yPiBnZXRQcm9wZXJ0eURlc2NyaXB0b3JzR2VuKE9iamVjdCBvYmplY3QpIHsKKwkJaWYgKGl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzID09IG51bGwpIHsKKwkJCXN1cGVyLmdldFByb3BlcnR5RGVzY3JpcHRvcnMob2JqZWN0KTsKKworCQkJYWRkUG9wdWxhdGlvbklkZW50aWZpZXJQcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0KTsKKwkJCWFkZFRpbWVQZXJpb2RQcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0KTsKKwkJCWFkZERpc2Vhc2VOYW1lUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCk7CisJCQlhZGRGcmVxdWVuY3lEZXBlbmRlbnRQcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0KTsKKwkJfQorCQlyZXR1cm4gaXRlbVByb3BlcnR5RGVzY3JpcHRvcnM7CisJfQorCQorCS8qKgorCSAqIFRoaXMgYWRkcyBhIHByb3BlcnR5IGRlc2NyaXB0b3IgZm9yIHRoZSBUaW1lIFBlcmlvZCBmZWF0dXJlLiA8IS0tCisJICogYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBhZGRUaW1lUGVyaW9kUHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdCBvYmplY3QpIHsKKwkJaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMuYWRkCisJCQkoY3JlYXRlSXRlbVByb3BlcnR5RGVzY3JpcHRvcgorCQkJCSgoKENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnkpYWRhcHRlckZhY3RvcnkpLmdldFJvb3RBZGFwdGVyRmFjdG9yeSgpLAorCQkJCSBnZXRSZXNvdXJjZUxvY2F0b3IoKSwKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfRGlzZWFzZU1vZGVsX3RpbWVQZXJpb2RfZmVhdHVyZSIpLCAvLyROT04tTkxTLTEkCisJCQkJIGdldFN0cmluZygiX1VJX1Byb3BlcnR5RGVzY3JpcHRvcl9kZXNjcmlwdGlvbiIsICJfVUlfRGlzZWFzZU1vZGVsX3RpbWVQZXJpb2RfZmVhdHVyZSIsICJfVUlfRGlzZWFzZU1vZGVsX3R5cGUiKSwgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkIC8vJE5PTi1OTFMtMyQKKwkJCQkgU3RhbmRhcmRQYWNrYWdlLkxpdGVyYWxzLkRJU0VBU0VfTU9ERUxfX1RJTUVfUEVSSU9ELAorCQkJCSB0cnVlLAorCQkJCSBmYWxzZSwKKwkJCQkgZmFsc2UsCisJCQkJIEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IuSU5URUdSQUxfVkFMVUVfSU1BR0UsCisJCQkJIG51bGwsCisJCQkJIG51bGwpKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFkZHMgYSBwcm9wZXJ0eSBkZXNjcmlwdG9yIGZvciB0aGUgUG9wdWxhdGlvbiBJZGVudGlmaWVyIGZlYXR1cmUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIGFkZFBvcHVsYXRpb25JZGVudGlmaWVyUHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdCBvYmplY3QpIHsKKwkJaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMuYWRkCisJCQkoY3JlYXRlSXRlbVByb3BlcnR5RGVzY3JpcHRvcgorCQkJCSgoKENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnkpYWRhcHRlckZhY3RvcnkpLmdldFJvb3RBZGFwdGVyRmFjdG9yeSgpLAorCQkJCSBnZXRSZXNvdXJjZUxvY2F0b3IoKSwKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfRGlzZWFzZU1vZGVsX3BvcHVsYXRpb25JZGVudGlmaWVyX2ZlYXR1cmUiKSwgLy8kTk9OLU5MUy0xJAorCQkJCSBnZXRTdHJpbmcoIl9VSV9Qcm9wZXJ0eURlc2NyaXB0b3JfZGVzY3JpcHRpb24iLCAiX1VJX0Rpc2Vhc2VNb2RlbF9wb3B1bGF0aW9uSWRlbnRpZmllcl9mZWF0dXJlIiwgIl9VSV9EaXNlYXNlTW9kZWxfdHlwZSIpLCAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQgLy8kTk9OLU5MUy0zJAorCQkJCSBTdGFuZGFyZFBhY2thZ2UuTGl0ZXJhbHMuRElTRUFTRV9NT0RFTF9fUE9QVUxBVElPTl9JREVOVElGSUVSLAorCQkJCSB0cnVlLAorCQkJCSBmYWxzZSwKKwkJCQkgZmFsc2UsCisJCQkJIEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IuR0VORVJJQ19WQUxVRV9JTUFHRSwKKwkJCQkgbnVsbCwKKwkJCQkgbnVsbCkpOworCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyBhIHByb3BlcnR5IGRlc2NyaXB0b3IgZm9yIHRoZSBEaXNlYXNlIE5hbWUgZmVhdHVyZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBhZGREaXNlYXNlTmFtZVByb3BlcnR5RGVzY3JpcHRvcihPYmplY3Qgb2JqZWN0KSB7CisJCWl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzLmFkZAorCQkJKGNyZWF0ZUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IKKwkJCQkoKChDb21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5KWFkYXB0ZXJGYWN0b3J5KS5nZXRSb290QWRhcHRlckZhY3RvcnkoKSwKKwkJCQkgZ2V0UmVzb3VyY2VMb2NhdG9yKCksCisJCQkJIGdldFN0cmluZygiX1VJX0Rpc2Vhc2VNb2RlbF9kaXNlYXNlTmFtZV9mZWF0dXJlIiksIC8vJE5PTi1OTFMtMSQKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfUHJvcGVydHlEZXNjcmlwdG9yX2Rlc2NyaXB0aW9uIiwgIl9VSV9EaXNlYXNlTW9kZWxfZGlzZWFzZU5hbWVfZmVhdHVyZSIsICJfVUlfRGlzZWFzZU1vZGVsX3R5cGUiKSwgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkIC8vJE5PTi1OTFMtMyQKKwkJCQkgU3RhbmRhcmRQYWNrYWdlLkxpdGVyYWxzLkRJU0VBU0VfTU9ERUxfX0RJU0VBU0VfTkFNRSwKKwkJCQkgdHJ1ZSwKKwkJCQkgZmFsc2UsCisJCQkJIGZhbHNlLAorCQkJCSBJdGVtUHJvcGVydHlEZXNjcmlwdG9yLkdFTkVSSUNfVkFMVUVfSU1BR0UsCisJCQkJIG51bGwsCisJCQkJIG51bGwpKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFkZHMgYSBwcm9wZXJ0eSBkZXNjcmlwdG9yIGZvciB0aGUgRnJlcXVlbmN5IERlcGVuZGVudCBmZWF0dXJlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIGFkZEZyZXF1ZW5jeURlcGVuZGVudFByb3BlcnR5RGVzY3JpcHRvcihPYmplY3Qgb2JqZWN0KSB7CisJCWl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzLmFkZAorCQkJKGNyZWF0ZUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IKKwkJCQkoKChDb21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5KWFkYXB0ZXJGYWN0b3J5KS5nZXRSb290QWRhcHRlckZhY3RvcnkoKSwKKwkJCQkgZ2V0UmVzb3VyY2VMb2NhdG9yKCksCisJCQkJIGdldFN0cmluZygiX1VJX0Rpc2Vhc2VNb2RlbF9mcmVxdWVuY3lEZXBlbmRlbnRfZmVhdHVyZSIpLCAvLyROT04tTkxTLTEkCisJCQkJIGdldFN0cmluZygiX1VJX1Byb3BlcnR5RGVzY3JpcHRvcl9kZXNjcmlwdGlvbiIsICJfVUlfRGlzZWFzZU1vZGVsX2ZyZXF1ZW5jeURlcGVuZGVudF9mZWF0dXJlIiwgIl9VSV9EaXNlYXNlTW9kZWxfdHlwZSIpLCAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQgLy8kTk9OLU5MUy0zJAorCQkJCSBTdGFuZGFyZFBhY2thZ2UuTGl0ZXJhbHMuRElTRUFTRV9NT0RFTF9fRlJFUVVFTkNZX0RFUEVOREVOVCwKKwkJCQkgdHJ1ZSwKKwkJCQkgZmFsc2UsCisJCQkJIGZhbHNlLAorCQkJCSBJdGVtUHJvcGVydHlEZXNjcmlwdG9yLkJPT0xFQU5fVkFMVUVfSU1BR0UsCisJCQkJIG51bGwsCisJCQkJIG51bGwpKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgZGlzZWFzZS5naWYuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBPYmplY3QgZ2V0SW1hZ2UoT2JqZWN0IG9iamVjdCkgeworCQlyZXR1cm4gb3ZlcmxheUltYWdlKG9iamVjdCwgZ2V0UmVzb3VyY2VMb2NhdG9yKCkuZ2V0SW1hZ2UoImZ1bGwvY3VzdG9tMTYvZGlzZWFzZSIpKTsKKwl9CisJCisJLyoqCisJICogVGhpcyByZXR1cm5zIHRoZSBsYWJlbCB0ZXh0IGZvciB0aGUgYWRhcHRlZCBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jCisJICogLS0+CisJICogCisJICogQHBhcmFtIG9iamVjdAorCSAqIEByZXR1cm4KKwkgKiAKKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBTdHJpbmcgZ2V0VGV4dChPYmplY3Qgb2JqZWN0KSB7CisJCXJldHVybiBzdXBlci5nZXRUZXh0KG9iamVjdCk7CisJfQorCisJLyoqCisJICogVGhpcyBoYW5kbGVzIG1vZGVsIG5vdGlmaWNhdGlvbnMgYnkgY2FsbGluZyB7QGxpbmsgI3VwZGF0ZUNoaWxkcmVufSB0byB1cGRhdGUgYW55IGNhY2hlZAorCSAqIGNoaWxkcmVuIGFuZCBieSBjcmVhdGluZyBhIHZpZXdlciBub3RpZmljYXRpb24sIHdoaWNoIGl0IHBhc3NlcyB0byB7QGxpbmsgI2ZpcmVOb3RpZnlDaGFuZ2VkfS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBwYXJhbSBub3RpZmljYXRpb24KKwkgKiAKKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgbm90aWZ5Q2hhbmdlZChOb3RpZmljYXRpb24gbm90aWZpY2F0aW9uKSB7CisJCXVwZGF0ZUNoaWxkcmVuKG5vdGlmaWNhdGlvbik7CisKKwkJc3dpdGNoIChub3RpZmljYXRpb24uZ2V0RmVhdHVyZUlEKERpc2Vhc2VNb2RlbC5jbGFzcykpIHsKKwkJCWNhc2UgU3RhbmRhcmRQYWNrYWdlLkRJU0VBU0VfTU9ERUxfX1BPUFVMQVRJT05fSURFTlRJRklFUjoKKwkJCWNhc2UgU3RhbmRhcmRQYWNrYWdlLkRJU0VBU0VfTU9ERUxfX1RJTUVfUEVSSU9EOgorCQkJY2FzZSBTdGFuZGFyZFBhY2thZ2UuRElTRUFTRV9NT0RFTF9fRElTRUFTRV9OQU1FOgorCQkJY2FzZSBTdGFuZGFyZFBhY2thZ2UuRElTRUFTRV9NT0RFTF9fRklOSVRFX0RJRkZFUkVOQ0U6CisJCQljYXNlIFN0YW5kYXJkUGFja2FnZS5ESVNFQVNFX01PREVMX19GUkVRVUVOQ1lfREVQRU5ERU5UOgorCQkJCWZpcmVOb3RpZnlDaGFuZ2VkKG5ldyBWaWV3ZXJOb3RpZmljYXRpb24obm90aWZpY2F0aW9uLCBub3RpZmljYXRpb24uZ2V0Tm90aWZpZXIoKSwgZmFsc2UsIHRydWUpKTsKKwkJCQlyZXR1cm47CisJCX0KKwkJc3VwZXIubm90aWZ5Q2hhbmdlZChub3RpZmljYXRpb24pOworCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmVkaXQuY29tbWFuZC5Db21tYW5kUGFyYW1ldGVyfXMgZGVzY3JpYmluZyB0aGUgY2hpbGRyZW4KKwkgKiB0aGF0IGNhbiBiZSBjcmVhdGVkIHVuZGVyIHRoaXMgb2JqZWN0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MKKwkgKiAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIGNvbGxlY3ROZXdDaGlsZERlc2NyaXB0b3JzKENvbGxlY3Rpb248T2JqZWN0PiBuZXdDaGlsZERlc2NyaXB0b3JzLCBPYmplY3Qgb2JqZWN0KSB7CisJCXN1cGVyLmNvbGxlY3ROZXdDaGlsZERlc2NyaXB0b3JzKG5ld0NoaWxkRGVzY3JpcHRvcnMsIG9iamVjdCk7CisJfQorCisJLyoqCisJICogUmV0dXJuIHRoZSByZXNvdXJjZSBsb2NhdG9yIGZvciB0aGlzIGl0ZW0gcHJvdmlkZXIncyByZXNvdXJjZXMuIDwhLS0KKwkgKiBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAcmV0dXJuCisJICogCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBSZXNvdXJjZUxvY2F0b3IgZ2V0UmVzb3VyY2VMb2NhdG9yKCkgeworCQlyZXR1cm4gRGlzZWFzZW1vZGVsc0VkaXRQbHVnaW4uSU5TVEFOQ0U7CisJfQorCit9CmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3N0YW5kYXJkL3Byb3ZpZGVyL0Rpc2Vhc2VNb2RlbExhYmVsSXRlbVByb3ZpZGVyLmphdmEgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3N0YW5kYXJkL3Byb3ZpZGVyL0Rpc2Vhc2VNb2RlbExhYmVsSXRlbVByb3ZpZGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWUxMjEwOQotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvc3RhbmRhcmQvcHJvdmlkZXIvRGlzZWFzZU1vZGVsTGFiZWxJdGVtUHJvdmlkZXIuamF2YQpAQCAtMCwwICsxLDE4MSBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQucHJvdmlkZXI7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5BZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlJlc291cmNlTG9jYXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuVVJJOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkNvbXBvc2VhYmxlQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUVkaXRpbmdEb21haW5JdGVtUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1MYWJlbFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtUHJvcGVydHlEZXNjcmlwdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtUHJvcGVydHlTb3VyY2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVN0cnVjdHVyZWRJdGVtQ29udGVudFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklUcmVlSXRlbUNvbnRlbnRQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGgucHJvdmlkZXIuSW50ZWdyYXRpb25MYWJlbEl0ZW1Qcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGgucHJvdmlkZXIuRHluYW1pY05vZGVMYWJlbEl0ZW1Qcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuRGlzZWFzZU1vZGVsTGFiZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkUGFja2FnZTsKKworLyoqCisgKiBUaGlzIGlzIHRoZSBpdGVtIHByb3ZpZGVyIGFkYXB0ZXIgZm9yIGEge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5EaXNlYXNlTW9kZWxMYWJlbH0gb2JqZWN0LgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBEaXNlYXNlTW9kZWxMYWJlbEl0ZW1Qcm92aWRlciBleHRlbmRzIEludGVncmF0aW9uTGFiZWxJdGVtUHJvdmlkZXIKKwkJaW1wbGVtZW50cyBJRWRpdGluZ0RvbWFpbkl0ZW1Qcm92aWRlciwgSVN0cnVjdHVyZWRJdGVtQ29udGVudFByb3ZpZGVyLAorCQlJVHJlZUl0ZW1Db250ZW50UHJvdmlkZXIsIElJdGVtTGFiZWxQcm92aWRlciwgSUl0ZW1Qcm9wZXJ0eVNvdXJjZSB7CisJLyoqCisJICogVGhpcyBjb25zdHJ1Y3RzIGFuIGluc3RhbmNlIGZyb20gYSBmYWN0b3J5IGFuZCBhIG5vdGlmaWVyLiA8IS0tCisJICogYmVnaW4tdXNlci1kb2MgLS0+CisJICogCisJICogQHBhcmFtIGFkYXB0ZXJGYWN0b3J5CisJICogCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBEaXNlYXNlTW9kZWxMYWJlbEl0ZW1Qcm92aWRlcihBZGFwdGVyRmFjdG9yeSBhZGFwdGVyRmFjdG9yeSkgeworCQlzdXBlcihhZGFwdGVyRmFjdG9yeSk7CisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIHRoZSBwcm9wZXJ0eSBkZXNjcmlwdG9ycyBmb3IgdGhlIGFkYXB0ZWQgY2xhc3MuIDwhLS0KKwkgKiBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAcGFyYW0gb2JqZWN0CisJICogQHJldHVybgorCSAqIAorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgTGlzdDxJSXRlbVByb3BlcnR5RGVzY3JpcHRvcj4gZ2V0UHJvcGVydHlEZXNjcmlwdG9ycyhPYmplY3Qgb2JqZWN0KSB7CisJCWlmIChpdGVtUHJvcGVydHlEZXNjcmlwdG9ycyA9PSBudWxsKSB7CisJCQlzdXBlci5nZXRQcm9wZXJ0eURlc2NyaXB0b3JzKG9iamVjdCk7CisKKwkJCWFkZFBvcHVsYXRpb25MYWJlbFByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QpOworCQkJYWRkUG9wdWxhdGlvbk1vZGVsTGFiZWxQcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0KTsKKwkJfQorCQlyZXR1cm4gaXRlbVByb3BlcnR5RGVzY3JpcHRvcnM7CisJfQorCisJLyoqCisJICogVGhpcyBhZGRzIGEgcHJvcGVydHkgZGVzY3JpcHRvciBmb3IgdGhlIFBvcHVsYXRpb24gTGFiZWwgZmVhdHVyZS4gPCEtLQorCSAqIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgYWRkUG9wdWxhdGlvbkxhYmVsUHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdCBvYmplY3QpIHsKKwkJaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMuYWRkCisJCQkoY3JlYXRlSXRlbVByb3BlcnR5RGVzY3JpcHRvcgorCQkJCSgoKENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnkpYWRhcHRlckZhY3RvcnkpLmdldFJvb3RBZGFwdGVyRmFjdG9yeSgpLAorCQkJCSBnZXRSZXNvdXJjZUxvY2F0b3IoKSwKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfRGlzZWFzZU1vZGVsTGFiZWxfcG9wdWxhdGlvbkxhYmVsX2ZlYXR1cmUiKSwgLy8kTk9OLU5MUy0xJAorCQkJCSBnZXRTdHJpbmcoIl9VSV9Qcm9wZXJ0eURlc2NyaXB0b3JfZGVzY3JpcHRpb24iLCAiX1VJX0Rpc2Vhc2VNb2RlbExhYmVsX3BvcHVsYXRpb25MYWJlbF9mZWF0dXJlIiwgIl9VSV9EaXNlYXNlTW9kZWxMYWJlbF90eXBlIiksIC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJCAvLyROT04tTkxTLTMkCisJCQkJIFN0YW5kYXJkUGFja2FnZS5MaXRlcmFscy5ESVNFQVNFX01PREVMX0xBQkVMX19QT1BVTEFUSU9OX0xBQkVMLAorCQkJCSB0cnVlLAorCQkJCSBmYWxzZSwKKwkJCQkgdHJ1ZSwKKwkJCQkgbnVsbCwKKwkJCQkgbnVsbCwKKwkJCQkgbnVsbCkpOworCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyBhIHByb3BlcnR5IGRlc2NyaXB0b3IgZm9yIHRoZSBQb3B1bGF0aW9uIE1vZGVsIExhYmVsIGZlYXR1cmUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgYWRkUG9wdWxhdGlvbk1vZGVsTGFiZWxQcm9wZXJ0eURlc2NyaXB0b3IoT2JqZWN0IG9iamVjdCkgeworCQlpdGVtUHJvcGVydHlEZXNjcmlwdG9ycy5hZGQKKwkJCShjcmVhdGVJdGVtUHJvcGVydHlEZXNjcmlwdG9yCisJCQkJKCgoQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSlhZGFwdGVyRmFjdG9yeSkuZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCksCisJCQkJIGdldFJlc291cmNlTG9jYXRvcigpLAorCQkJCSBnZXRTdHJpbmcoIl9VSV9EaXNlYXNlTW9kZWxMYWJlbF9wb3B1bGF0aW9uTW9kZWxMYWJlbF9mZWF0dXJlIiksIC8vJE5PTi1OTFMtMSQKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfUHJvcGVydHlEZXNjcmlwdG9yX2Rlc2NyaXB0aW9uIiwgIl9VSV9EaXNlYXNlTW9kZWxMYWJlbF9wb3B1bGF0aW9uTW9kZWxMYWJlbF9mZWF0dXJlIiwgIl9VSV9EaXNlYXNlTW9kZWxMYWJlbF90eXBlIiksIC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJCAvLyROT04tTkxTLTMkCisJCQkJIFN0YW5kYXJkUGFja2FnZS5MaXRlcmFscy5ESVNFQVNFX01PREVMX0xBQkVMX19QT1BVTEFUSU9OX01PREVMX0xBQkVMLAorCQkJCSB0cnVlLAorCQkJCSBmYWxzZSwKKwkJCQkgdHJ1ZSwKKwkJCQkgbnVsbCwKKwkJCQkgbnVsbCwKKwkJCQkgbnVsbCkpOworCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyB0aGUgbGFiZWwgdGV4dCBmb3IgdGhlIGFkYXB0ZWQgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYworCSAqIC0tPgorCSAqIAorCSAqIEBwYXJhbSBvYmplY3QKKwkgKiBAcmV0dXJuCisJICogCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBTdHJpbmcgZ2V0VGV4dChPYmplY3Qgb2JqZWN0KSB7CisJCVVSSSBsYWJlbFZhbHVlID0gKChEaXNlYXNlTW9kZWxMYWJlbClvYmplY3QpLmdldFVSSSgpOworCQlTdHJpbmcgbGFiZWwgPSBsYWJlbFZhbHVlID09IG51bGwgPyBudWxsIDogbGFiZWxWYWx1ZS50b1N0cmluZygpOworCQlyZXR1cm4gbGFiZWwgPT0gbnVsbCB8fCBsYWJlbC5sZW5ndGgoKSA9PSAwID8KKwkJCWdldFN0cmluZygiX1VJX0Rpc2Vhc2VNb2RlbExhYmVsX3R5cGUiKSA6IC8vJE5PTi1OTFMtMSQKKwkJCWdldFN0cmluZygiX1VJX0Rpc2Vhc2VNb2RlbExhYmVsX3R5cGUiKSArICIgIiArIGxhYmVsOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKKwl9CisKKwkvKioKKwkgKiBUaGlzIGhhbmRsZXMgbW9kZWwgbm90aWZpY2F0aW9ucyBieSBjYWxsaW5nIHtAbGluayAjdXBkYXRlQ2hpbGRyZW59IHRvIHVwZGF0ZSBhbnkgY2FjaGVkCisJICogY2hpbGRyZW4gYW5kIGJ5IGNyZWF0aW5nIGEgdmlld2VyIG5vdGlmaWNhdGlvbiwgd2hpY2ggaXQgcGFzc2VzIHRvIHtAbGluayAjZmlyZU5vdGlmeUNoYW5nZWR9LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogCisJICogQHBhcmFtIG5vdGlmaWNhdGlvbgorCSAqIAorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBub3RpZnlDaGFuZ2VkKE5vdGlmaWNhdGlvbiBub3RpZmljYXRpb24pIHsKKwkJdXBkYXRlQ2hpbGRyZW4obm90aWZpY2F0aW9uKTsKKwkJc3VwZXIubm90aWZ5Q2hhbmdlZChub3RpZmljYXRpb24pOworCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmVkaXQuY29tbWFuZC5Db21tYW5kUGFyYW1ldGVyfXMgZGVzY3JpYmluZyB0aGUgY2hpbGRyZW4KKwkgKiB0aGF0IGNhbiBiZSBjcmVhdGVkIHVuZGVyIHRoaXMgb2JqZWN0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MKKwkgKiAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIGNvbGxlY3ROZXdDaGlsZERlc2NyaXB0b3JzKENvbGxlY3Rpb248T2JqZWN0PiBuZXdDaGlsZERlc2NyaXB0b3JzLCBPYmplY3Qgb2JqZWN0KSB7CisJCXN1cGVyLmNvbGxlY3ROZXdDaGlsZERlc2NyaXB0b3JzKG5ld0NoaWxkRGVzY3JpcHRvcnMsIG9iamVjdCk7CisJfQorCisJLyoqCisJICogUmV0dXJuIHRoZSByZXNvdXJjZSBsb2NhdG9yIGZvciB0aGlzIGl0ZW0gcHJvdmlkZXIncyByZXNvdXJjZXMuIDwhLS0KKwkgKiBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAcmV0dXJuCisJICogCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBSZXNvdXJjZUxvY2F0b3IgZ2V0UmVzb3VyY2VMb2NhdG9yKCkgeworCQlyZXR1cm4gRGlzZWFzZW1vZGVsc0VkaXRQbHVnaW4uSU5TVEFOQ0U7CisJfQorCit9CmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3N0YW5kYXJkL3Byb3ZpZGVyL0Rpc2Vhc2VNb2RlbExhYmVsVmFsdWVJdGVtUHJvdmlkZXIuamF2YSBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvc3RhbmRhcmQvcHJvdmlkZXIvRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZUl0ZW1Qcm92aWRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ4YTk3YmMKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3N0YW5kYXJkL3Byb3ZpZGVyL0Rpc2Vhc2VNb2RlbExhYmVsVmFsdWVJdGVtUHJvdmlkZXIuamF2YQpAQCAtMCwwICsxLDE2MyBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQucHJvdmlkZXI7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5BZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlJlc291cmNlTG9jYXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5Db21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklFZGl0aW5nRG9tYWluSXRlbVByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtTGFiZWxQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbVByb3BlcnR5RGVzY3JpcHRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbVByb3BlcnR5U291cmNlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklTdHJ1Y3R1cmVkSXRlbUNvbnRlbnRQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JVHJlZUl0ZW1Db250ZW50UHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSXRlbVByb3BlcnR5RGVzY3JpcHRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5WaWV3ZXJOb3RpZmljYXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLnByb3ZpZGVyLkludGVncmF0aW9uTGFiZWxWYWx1ZUl0ZW1Qcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguR3JhcGhQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5wcm92aWRlci5MYWJlbFZhbHVlSXRlbVByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5EaXNlYXNlTW9kZWxMYWJlbFZhbHVlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZFBhY2thZ2U7CisKKy8qKgorICogVGhpcyBpcyB0aGUgaXRlbSBwcm92aWRlciBhZGFwdGVyIGZvciBhIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZX0gb2JqZWN0LgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBEaXNlYXNlTW9kZWxMYWJlbFZhbHVlSXRlbVByb3ZpZGVyIGV4dGVuZHMgSW50ZWdyYXRpb25MYWJlbFZhbHVlSXRlbVByb3ZpZGVyCisJCWltcGxlbWVudHMgSUVkaXRpbmdEb21haW5JdGVtUHJvdmlkZXIsIElTdHJ1Y3R1cmVkSXRlbUNvbnRlbnRQcm92aWRlciwKKwkJSVRyZWVJdGVtQ29udGVudFByb3ZpZGVyLCBJSXRlbUxhYmVsUHJvdmlkZXIsIElJdGVtUHJvcGVydHlTb3VyY2UgeworCS8qKgorCSAqIFRoaXMgY29uc3RydWN0cyBhbiBpbnN0YW5jZSBmcm9tIGEgZmFjdG9yeSBhbmQgYSBub3RpZmllci4gPCEtLQorCSAqIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBwYXJhbSBhZGFwdGVyRmFjdG9yeQorCSAqIAorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZUl0ZW1Qcm92aWRlcihBZGFwdGVyRmFjdG9yeSBhZGFwdGVyRmFjdG9yeSkgeworCQlzdXBlcihhZGFwdGVyRmFjdG9yeSk7CisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIHRoZSBwcm9wZXJ0eSBkZXNjcmlwdG9ycyBmb3IgdGhlIGFkYXB0ZWQgY2xhc3MuIDwhLS0KKwkgKiBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAcGFyYW0gb2JqZWN0CisJICogQHJldHVybgorCSAqIAorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgTGlzdDxJSXRlbVByb3BlcnR5RGVzY3JpcHRvcj4gZ2V0UHJvcGVydHlEZXNjcmlwdG9ycyhPYmplY3Qgb2JqZWN0KSB7CisJCWlmIChpdGVtUHJvcGVydHlEZXNjcmlwdG9ycyA9PSBudWxsKSB7CisJCQlzdXBlci5nZXRQcm9wZXJ0eURlc2NyaXB0b3JzKG9iamVjdCk7CisKKwkJCWFkZFBvcHVsYXRpb25Db3VudFByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QpOworCQl9CisJCXJldHVybiBpdGVtUHJvcGVydHlEZXNjcmlwdG9yczsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFkZHMgYSBwcm9wZXJ0eSBkZXNjcmlwdG9yIGZvciB0aGUgUG9wdWxhdGlvbiBDb3VudCBmZWF0dXJlLiA8IS0tCisJICogYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBhZGRQb3B1bGF0aW9uQ291bnRQcm9wZXJ0eURlc2NyaXB0b3IoT2JqZWN0IG9iamVjdCkgeworCQlpdGVtUHJvcGVydHlEZXNjcmlwdG9ycy5hZGQKKwkJCShjcmVhdGVJdGVtUHJvcGVydHlEZXNjcmlwdG9yCisJCQkJKCgoQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSlhZGFwdGVyRmFjdG9yeSkuZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCksCisJCQkJIGdldFJlc291cmNlTG9jYXRvcigpLAorCQkJCSBnZXRTdHJpbmcoIl9VSV9EaXNlYXNlTW9kZWxMYWJlbFZhbHVlX3BvcHVsYXRpb25Db3VudF9mZWF0dXJlIiksIC8vJE5PTi1OTFMtMSQKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfUHJvcGVydHlEZXNjcmlwdG9yX2Rlc2NyaXB0aW9uIiwgIl9VSV9EaXNlYXNlTW9kZWxMYWJlbFZhbHVlX3BvcHVsYXRpb25Db3VudF9mZWF0dXJlIiwgIl9VSV9EaXNlYXNlTW9kZWxMYWJlbFZhbHVlX3R5cGUiKSwgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkIC8vJE5PTi1OTFMtMyQKKwkJCQkgU3RhbmRhcmRQYWNrYWdlLkxpdGVyYWxzLkRJU0VBU0VfTU9ERUxfTEFCRUxfVkFMVUVfX1BPUFVMQVRJT05fQ09VTlQsCisJCQkJIGZhbHNlLAorCQkJCSBmYWxzZSwKKwkJCQkgZmFsc2UsCisJCQkJIEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IuUkVBTF9WQUxVRV9JTUFHRSwKKwkJCQkgbnVsbCwKKwkJCQkgbnVsbCkpOworCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyB0aGUgbGFiZWwgdGV4dCBmb3IgdGhlIGFkYXB0ZWQgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYworCSAqIC0tPgorCSAqIAorCSAqIEBwYXJhbSBvYmplY3QKKwkgKiBAcmV0dXJuCisJICogCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBTdHJpbmcgZ2V0VGV4dChPYmplY3Qgb2JqZWN0KSB7CisJCURpc2Vhc2VNb2RlbExhYmVsVmFsdWUgZGlzZWFzZU1vZGVsTGFiZWxWYWx1ZSA9IChEaXNlYXNlTW9kZWxMYWJlbFZhbHVlKW9iamVjdDsKKwkJcmV0dXJuIGdldFN0cmluZygiX1VJX0Rpc2Vhc2VNb2RlbExhYmVsVmFsdWVfdHlwZSIpICsgIiAiICsgZGlzZWFzZU1vZGVsTGFiZWxWYWx1ZS5nZXRQb3B1bGF0aW9uQ291bnQoKTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCisJfQorCisJLyoqCisJICogVGhpcyBoYW5kbGVzIG1vZGVsIG5vdGlmaWNhdGlvbnMgYnkgY2FsbGluZyB7QGxpbmsgI3VwZGF0ZUNoaWxkcmVufSB0byB1cGRhdGUgYW55IGNhY2hlZAorCSAqIGNoaWxkcmVuIGFuZCBieSBjcmVhdGluZyBhIHZpZXdlciBub3RpZmljYXRpb24sIHdoaWNoIGl0IHBhc3NlcyB0byB7QGxpbmsgI2ZpcmVOb3RpZnlDaGFuZ2VkfS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBwYXJhbSBub3RpZmljYXRpb24KKwkgKiAKKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgbm90aWZ5Q2hhbmdlZChOb3RpZmljYXRpb24gbm90aWZpY2F0aW9uKSB7CisJCXVwZGF0ZUNoaWxkcmVuKG5vdGlmaWNhdGlvbik7CisKKwkJc3dpdGNoIChub3RpZmljYXRpb24uZ2V0RmVhdHVyZUlEKERpc2Vhc2VNb2RlbExhYmVsVmFsdWUuY2xhc3MpKSB7CisJCQljYXNlIFN0YW5kYXJkUGFja2FnZS5ESVNFQVNFX01PREVMX0xBQkVMX1ZBTFVFX19QT1BVTEFUSU9OX0NPVU5UOgorCQkJCWZpcmVOb3RpZnlDaGFuZ2VkKG5ldyBWaWV3ZXJOb3RpZmljYXRpb24obm90aWZpY2F0aW9uLCBub3RpZmljYXRpb24uZ2V0Tm90aWZpZXIoKSwgZmFsc2UsIHRydWUpKTsKKwkJCQlyZXR1cm47CisJCX0KKwkJc3VwZXIubm90aWZ5Q2hhbmdlZChub3RpZmljYXRpb24pOworCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmVkaXQuY29tbWFuZC5Db21tYW5kUGFyYW1ldGVyfXMgZGVzY3JpYmluZyB0aGUgY2hpbGRyZW4KKwkgKiB0aGF0IGNhbiBiZSBjcmVhdGVkIHVuZGVyIHRoaXMgb2JqZWN0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MKKwkgKiAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIGNvbGxlY3ROZXdDaGlsZERlc2NyaXB0b3JzKENvbGxlY3Rpb248T2JqZWN0PiBuZXdDaGlsZERlc2NyaXB0b3JzLCBPYmplY3Qgb2JqZWN0KSB7CisJCXN1cGVyLmNvbGxlY3ROZXdDaGlsZERlc2NyaXB0b3JzKG5ld0NoaWxkRGVzY3JpcHRvcnMsIG9iamVjdCk7CisJfQorCisJLyoqCisJICogUmV0dXJuIHRoZSByZXNvdXJjZSBsb2NhdG9yIGZvciB0aGlzIGl0ZW0gcHJvdmlkZXIncyByZXNvdXJjZXMuIDwhLS0KKwkgKiBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAcmV0dXJuCisJICogCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBSZXNvdXJjZUxvY2F0b3IgZ2V0UmVzb3VyY2VMb2NhdG9yKCkgeworCQlyZXR1cm4gRGlzZWFzZW1vZGVsc0VkaXRQbHVnaW4uSU5TVEFOQ0U7CisJfQorCit9CmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3N0YW5kYXJkL3Byb3ZpZGVyL0Rpc2Vhc2VNb2RlbFN0YXRlSXRlbVByb3ZpZGVyLmphdmEgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3N0YW5kYXJkL3Byb3ZpZGVyL0Rpc2Vhc2VNb2RlbFN0YXRlSXRlbVByb3ZpZGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWZkZTA3YQotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvc3RhbmRhcmQvcHJvdmlkZXIvRGlzZWFzZU1vZGVsU3RhdGVJdGVtUHJvdmlkZXIuamF2YQpAQCAtMCwwICsxLDEyOCBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQucHJvdmlkZXI7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5BZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlJlc291cmNlTG9jYXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JRWRpdGluZ0RvbWFpbkl0ZW1Qcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbUxhYmVsUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1Qcm9wZXJ0eVNvdXJjZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JU3RydWN0dXJlZEl0ZW1Db250ZW50UHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVRyZWVJdGVtQ29udGVudFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkl0ZW1Qcm92aWRlckFkYXB0ZXI7CisKKy8vaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZFBhY2thZ2U7CisKKy8qKgorICogVGhpcyBpcyB0aGUgaXRlbSBwcm92aWRlciBhZGFwdGVyIGZvciBhIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuRGlzZWFzZU1vZGVsU3RhdGV9IG9iamVjdC4KKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgRGlzZWFzZU1vZGVsU3RhdGVJdGVtUHJvdmlkZXIgZXh0ZW5kcyBJdGVtUHJvdmlkZXJBZGFwdGVyCisJCWltcGxlbWVudHMgSUVkaXRpbmdEb21haW5JdGVtUHJvdmlkZXIsIElTdHJ1Y3R1cmVkSXRlbUNvbnRlbnRQcm92aWRlciwKKwkJSVRyZWVJdGVtQ29udGVudFByb3ZpZGVyLCBJSXRlbUxhYmVsUHJvdmlkZXIsIElJdGVtUHJvcGVydHlTb3VyY2UgeworCS8qKgorCSAqIFRoaXMgY29uc3RydWN0cyBhbiBpbnN0YW5jZSBmcm9tIGEgZmFjdG9yeSBhbmQgYSBub3RpZmllci4gPCEtLQorCSAqIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBwYXJhbSBhZGFwdGVyRmFjdG9yeQorCSAqIAorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRGlzZWFzZU1vZGVsU3RhdGVJdGVtUHJvdmlkZXIoQWRhcHRlckZhY3RvcnkgYWRhcHRlckZhY3RvcnkpIHsKKwkJc3VwZXIoYWRhcHRlckZhY3RvcnkpOworCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyB0aGUgcHJvcGVydHkgZGVzY3JpcHRvcnMgZm9yIHRoZSBhZGFwdGVkIGNsYXNzLiA8IS0tCisJICogYmVnaW4tdXNlci1kb2MgLS0+CisJICogCisJICogQHBhcmFtIG9iamVjdAorCSAqIEByZXR1cm4KKwkgKiAKKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIExpc3Q8SUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I+IGdldFByb3BlcnR5RGVzY3JpcHRvcnMoT2JqZWN0IG9iamVjdCkgeworCQlpZiAoaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMgPT0gbnVsbCkgeworCQkJc3VwZXIuZ2V0UHJvcGVydHlEZXNjcmlwdG9ycyhvYmplY3QpOworCisJCX0KKwkJcmV0dXJuIGl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzOworCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyB0aGUgbGFiZWwgdGV4dCBmb3IgdGhlIGFkYXB0ZWQgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYworCSAqIC0tPgorCSAqIAorCSAqIEBwYXJhbSBvYmplY3QKKwkgKiBAcmV0dXJuCisJICogCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBTdHJpbmcgZ2V0VGV4dChPYmplY3Qgb2JqZWN0KSB7CisJCXJldHVybiBnZXRTdHJpbmcoIl9VSV9EaXNlYXNlTW9kZWxTdGF0ZV90eXBlIik7IC8vJE5PTi1OTFMtMSQKKwl9CisKKwkvKioKKwkgKiBUaGlzIGhhbmRsZXMgbW9kZWwgbm90aWZpY2F0aW9ucyBieSBjYWxsaW5nIHtAbGluayAjdXBkYXRlQ2hpbGRyZW59IHRvIHVwZGF0ZSBhbnkgY2FjaGVkCisJICogY2hpbGRyZW4gYW5kIGJ5IGNyZWF0aW5nIGEgdmlld2VyIG5vdGlmaWNhdGlvbiwgd2hpY2ggaXQgcGFzc2VzIHRvIHtAbGluayAjZmlyZU5vdGlmeUNoYW5nZWR9LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogCisJICogQHBhcmFtIG5vdGlmaWNhdGlvbgorCSAqIAorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBub3RpZnlDaGFuZ2VkKE5vdGlmaWNhdGlvbiBub3RpZmljYXRpb24pIHsKKwkJdXBkYXRlQ2hpbGRyZW4obm90aWZpY2F0aW9uKTsKKwkJc3VwZXIubm90aWZ5Q2hhbmdlZChub3RpZmljYXRpb24pOworCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmVkaXQuY29tbWFuZC5Db21tYW5kUGFyYW1ldGVyfXMgZGVzY3JpYmluZyB0aGUgY2hpbGRyZW4KKwkgKiB0aGF0IGNhbiBiZSBjcmVhdGVkIHVuZGVyIHRoaXMgb2JqZWN0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MKKwkgKiAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIGNvbGxlY3ROZXdDaGlsZERlc2NyaXB0b3JzKENvbGxlY3Rpb248T2JqZWN0PiBuZXdDaGlsZERlc2NyaXB0b3JzLCBPYmplY3Qgb2JqZWN0KSB7CisJCXN1cGVyLmNvbGxlY3ROZXdDaGlsZERlc2NyaXB0b3JzKG5ld0NoaWxkRGVzY3JpcHRvcnMsIG9iamVjdCk7CisJfQorCisJLyoqCisJICogUmV0dXJuIHRoZSByZXNvdXJjZSBsb2NhdG9yIGZvciB0aGlzIGl0ZW0gcHJvdmlkZXIncyByZXNvdXJjZXMuIDwhLS0KKwkgKiBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAcmV0dXJuCisJICogCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBSZXNvdXJjZUxvY2F0b3IgZ2V0UmVzb3VyY2VMb2NhdG9yKCkgeworCQlyZXR1cm4gRGlzZWFzZW1vZGVsc0VkaXRQbHVnaW4uSU5TVEFOQ0U7CisJfQorCit9CmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3N0YW5kYXJkL3Byb3ZpZGVyL0Rpc2Vhc2Vtb2RlbHNFZGl0UGx1Z2luLmphdmEgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3N0YW5kYXJkL3Byb3ZpZGVyL0Rpc2Vhc2Vtb2RlbHNFZGl0UGx1Z2luLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzQ2NGJmZQotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvc3RhbmRhcmQvcHJvdmlkZXIvRGlzZWFzZW1vZGVsc0VkaXRQbHVnaW4uamF2YQpAQCAtMCwwICsxLDEwNCBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQucHJvdmlkZXI7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5FTUZQbHVnaW47CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlJlc291cmNlTG9jYXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUucHJvdmlkZXIuRWNvcmVFZGl0UGx1Z2luOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24ucHJvdmlkZXIuQ29yZUVkaXRQbHVnaW47CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5lZGdlcy5wcm92aWRlci5EZWZpbml0aW9uc0VkaXRQbHVnaW47CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLnByb3ZpZGVyLlN0YW5kYXJkRWRpdFBsdWdpbjsKKworLyoqCisgKiBUaGlzIGlzIHRoZSBjZW50cmFsIHNpbmdsZXRvbiBmb3IgdGhlIERpc2Vhc2Vtb2RlbHMgZWRpdCBwbHVnaW4uCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBmaW5hbCBjbGFzcyBEaXNlYXNlbW9kZWxzRWRpdFBsdWdpbiBleHRlbmRzIEVNRlBsdWdpbiB7CisJLyoqCisJICogS2VlcCB0cmFjayBvZiB0aGUgc2luZ2xldG9uLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgRGlzZWFzZW1vZGVsc0VkaXRQbHVnaW4gSU5TVEFOQ0UgPSBuZXcgRGlzZWFzZW1vZGVsc0VkaXRQbHVnaW4oKTsKKworCS8qKgorCSAqIEtlZXAgdHJhY2sgb2YgdGhlIHNpbmdsZXRvbi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcml2YXRlIHN0YXRpYyBJbXBsZW1lbnRhdGlvbiBwbHVnaW47CisKKwkvKioKKwkgKiBDcmVhdGUgdGhlIGluc3RhbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlwdWJsaWMgRGlzZWFzZW1vZGVsc0VkaXRQbHVnaW4oKSB7CisJCXN1cGVyCisJCSAgKG5ldyBSZXNvdXJjZUxvY2F0b3IgW10geworCQkgICAgIENvcmVFZGl0UGx1Z2luLklOU1RBTkNFLAorCQkgICAgIC8qRWNvcmVFZGl0UGx1Z2luLklOU1RBTkNFLCovCisJCSAgICAgRGVmaW5pdGlvbnNFZGl0UGx1Z2luLklOU1RBTkNFLAorCQkgICB9KTsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBzaW5nbGV0b24gaW5zdGFuY2Ugb2YgdGhlIEVjbGlwc2UgcGx1Z2luLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgc2luZ2xldG9uIGluc3RhbmNlLgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgUmVzb3VyY2VMb2NhdG9yIGdldFBsdWdpblJlc291cmNlTG9jYXRvcigpIHsKKwkJcmV0dXJuIHBsdWdpbjsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBzaW5nbGV0b24gaW5zdGFuY2Ugb2YgdGhlIEVjbGlwc2UgcGx1Z2luLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgc2luZ2xldG9uIGluc3RhbmNlLgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgc3RhdGljIEltcGxlbWVudGF0aW9uIGdldFBsdWdpbigpIHsKKwkJcmV0dXJuIHBsdWdpbjsKKwl9CisKKwkvKioKKwkgKiBUaGUgYWN0dWFsIGltcGxlbWVudGF0aW9uIG9mIHRoZSBFY2xpcHNlIDxiPlBsdWdpbjwvYj4uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHN0YXRpYyBjbGFzcyBJbXBsZW1lbnRhdGlvbiBleHRlbmRzIEVjbGlwc2VQbHVnaW4geworCQkvKioKKwkJICogQ3JlYXRlcyBhbiBpbnN0YW5jZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCXB1YmxpYyBJbXBsZW1lbnRhdGlvbigpIHsKKwkJCXN1cGVyKCk7CisKKwkJCS8vIFJlbWVtYmVyIHRoZSBzdGF0aWMgaW5zdGFuY2UuCisJCQkvLworCQkJcGx1Z2luID0gdGhpczsKKwkJfQorCX0KKworfQpkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9zdGFuZGFyZC9wcm92aWRlci9JbmZlY3Rvcklub2N1bGF0b3JDb2xsZWN0aW9uSXRlbVByb3ZpZGVyLmphdmEgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3N0YW5kYXJkL3Byb3ZpZGVyL0luZmVjdG9ySW5vY3VsYXRvckNvbGxlY3Rpb25JdGVtUHJvdmlkZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NzYzMTllCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9zdGFuZGFyZC9wcm92aWRlci9JbmZlY3Rvcklub2N1bGF0b3JDb2xsZWN0aW9uSXRlbVByb3ZpZGVyLmphdmEKQEAgLTAsMCArMSwyMzMgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDksMjAxMCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5wcm92aWRlcjsKKworCitpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5BZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlJlc291cmNlTG9jYXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuVVJJOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FU3RydWN0dXJhbEZlYXR1cmU7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JRWRpdGluZ0RvbWFpbkl0ZW1Qcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbUxhYmVsUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1Qcm9wZXJ0eVNvdXJjZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JU3RydWN0dXJlZEl0ZW1Db250ZW50UHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVRyZWVJdGVtQ29udGVudFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuVmlld2VyTm90aWZpY2F0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5wcm92aWRlci5Ob2RlRGVjb3JhdG9ySXRlbVByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5JbmZlY3Rvcklub2N1bGF0b3JDb2xsZWN0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZFBhY2thZ2U7CisKKy8qKgorICogVGhpcyBpcyB0aGUgaXRlbSBwcm92aWRlciBhZGFwdGVyIGZvciBhIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuSW5mZWN0b3JJbm9jdWxhdG9yQ29sbGVjdGlvbn0gb2JqZWN0LgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgSW5mZWN0b3JJbm9jdWxhdG9yQ29sbGVjdGlvbkl0ZW1Qcm92aWRlcgorCWV4dGVuZHMgTm9kZURlY29yYXRvckl0ZW1Qcm92aWRlcgorCWltcGxlbWVudHMKKwkJSUVkaXRpbmdEb21haW5JdGVtUHJvdmlkZXIsCisJCUlTdHJ1Y3R1cmVkSXRlbUNvbnRlbnRQcm92aWRlciwKKwkJSVRyZWVJdGVtQ29udGVudFByb3ZpZGVyLAorCQlJSXRlbUxhYmVsUHJvdmlkZXIsCisJCUlJdGVtUHJvcGVydHlTb3VyY2UgeworCS8qKgorCSAqIFRoaXMgY29uc3RydWN0cyBhbiBpbnN0YW5jZSBmcm9tIGEgZmFjdG9yeSBhbmQgYSBub3RpZmllci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgSW5mZWN0b3JJbm9jdWxhdG9yQ29sbGVjdGlvbkl0ZW1Qcm92aWRlcihBZGFwdGVyRmFjdG9yeSBhZGFwdGVyRmFjdG9yeSkgeworCQlzdXBlcihhZGFwdGVyRmFjdG9yeSk7CisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIHRoZSBwcm9wZXJ0eSBkZXNjcmlwdG9ycyBmb3IgdGhlIGFkYXB0ZWQgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIExpc3Q8SUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I+IGdldFByb3BlcnR5RGVzY3JpcHRvcnMoT2JqZWN0IG9iamVjdCkgeworCQlpZiAoaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMgPT0gbnVsbCkgeworCQkJc3VwZXIuZ2V0UHJvcGVydHlEZXNjcmlwdG9ycyhvYmplY3QpOworCisJCQlhZGRMaXN0UHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCk7CisJCQlhZGRJbXBvcnRGb2xkZXJQcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0KTsKKwkJfQorCQlyZXR1cm4gaXRlbVByb3BlcnR5RGVzY3JpcHRvcnM7CisJfQorCisJLyoqCisJICogVGhpcyBhZGRzIGEgcHJvcGVydHkgZGVzY3JpcHRvciBmb3IgdGhlIExpc3QgZmVhdHVyZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBhZGRMaXN0UHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdCBvYmplY3QpIHsKKwkJaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMuYWRkCisJCQkoY3JlYXRlSXRlbVByb3BlcnR5RGVzY3JpcHRvcgorCQkJCSgoKENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnkpYWRhcHRlckZhY3RvcnkpLmdldFJvb3RBZGFwdGVyRmFjdG9yeSgpLAorCQkJCSBnZXRSZXNvdXJjZUxvY2F0b3IoKSwKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfSW5mZWN0b3JJbm9jdWxhdG9yQ29sbGVjdGlvbl9saXN0X2ZlYXR1cmUiKSwgLy8kTk9OLU5MUy0xJAorCQkJCSBnZXRTdHJpbmcoIl9VSV9Qcm9wZXJ0eURlc2NyaXB0b3JfZGVzY3JpcHRpb24iLCAiX1VJX0luZmVjdG9ySW5vY3VsYXRvckNvbGxlY3Rpb25fbGlzdF9mZWF0dXJlIiwgIl9VSV9JbmZlY3Rvcklub2N1bGF0b3JDb2xsZWN0aW9uX3R5cGUiKSwgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkIC8vJE5PTi1OTFMtMyQKKwkJCQkgU3RhbmRhcmRQYWNrYWdlLkxpdGVyYWxzLklORkVDVE9SX0lOT0NVTEFUT1JfQ09MTEVDVElPTl9fTElTVCwKKwkJCQkgdHJ1ZSwKKwkJCQkgZmFsc2UsCisJCQkJIHRydWUsCisJCQkJIG51bGwsCisJCQkJIG51bGwsCisJCQkJIG51bGwpKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFkZHMgYSBwcm9wZXJ0eSBkZXNjcmlwdG9yIGZvciB0aGUgSW1wb3J0IEZvbGRlciBmZWF0dXJlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIGFkZEltcG9ydEZvbGRlclByb3BlcnR5RGVzY3JpcHRvcihPYmplY3Qgb2JqZWN0KSB7CisJCWl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzLmFkZAorCQkJKGNyZWF0ZUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IKKwkJCQkoKChDb21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5KWFkYXB0ZXJGYWN0b3J5KS5nZXRSb290QWRhcHRlckZhY3RvcnkoKSwKKwkJCQkgZ2V0UmVzb3VyY2VMb2NhdG9yKCksCisJCQkJIGdldFN0cmluZygiX1VJX0luZmVjdG9ySW5vY3VsYXRvckNvbGxlY3Rpb25faW1wb3J0Rm9sZGVyX2ZlYXR1cmUiKSwgLy8kTk9OLU5MUy0xJAorCQkJCSBnZXRTdHJpbmcoIl9VSV9Qcm9wZXJ0eURlc2NyaXB0b3JfZGVzY3JpcHRpb24iLCAiX1VJX0luZmVjdG9ySW5vY3VsYXRvckNvbGxlY3Rpb25faW1wb3J0Rm9sZGVyX2ZlYXR1cmUiLCAiX1VJX0luZmVjdG9ySW5vY3VsYXRvckNvbGxlY3Rpb25fdHlwZSIpLCAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQgLy8kTk9OLU5MUy0zJAorCQkJCSBTdGFuZGFyZFBhY2thZ2UuTGl0ZXJhbHMuSU5GRUNUT1JfSU5PQ1VMQVRPUl9DT0xMRUNUSU9OX19JTVBPUlRfRk9MREVSLAorCQkJCSB0cnVlLAorCQkJCSBmYWxzZSwKKwkJCQkgZmFsc2UsCisJCQkJIEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IuR0VORVJJQ19WQUxVRV9JTUFHRSwKKwkJCQkgbnVsbCwKKwkJCQkgbnVsbCkpOworCX0KKworCS8qKgorCSAqIFRoaXMgc3BlY2lmaWVzIGhvdyB0byBpbXBsZW1lbnQge0BsaW5rICNnZXRDaGlsZHJlbn0gYW5kIGlzIHVzZWQgdG8gZGVkdWNlIGFuIGFwcHJvcHJpYXRlIGZlYXR1cmUgZm9yIGFuCisJICoge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lZGl0LmNvbW1hbmQuQWRkQ29tbWFuZH0sIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuZWRpdC5jb21tYW5kLlJlbW92ZUNvbW1hbmR9IG9yCisJICoge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lZGl0LmNvbW1hbmQuTW92ZUNvbW1hbmR9IGluIHtAbGluayAjY3JlYXRlQ29tbWFuZH0uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIENvbGxlY3Rpb248PyBleHRlbmRzIEVTdHJ1Y3R1cmFsRmVhdHVyZT4gZ2V0Q2hpbGRyZW5GZWF0dXJlcyhPYmplY3Qgb2JqZWN0KSB7CisJCWlmIChjaGlsZHJlbkZlYXR1cmVzID09IG51bGwpIHsKKwkJCXN1cGVyLmdldENoaWxkcmVuRmVhdHVyZXMob2JqZWN0KTsKKwkJCWNoaWxkcmVuRmVhdHVyZXMuYWRkKFN0YW5kYXJkUGFja2FnZS5MaXRlcmFscy5JTkZFQ1RPUl9JTk9DVUxBVE9SX0NPTExFQ1RJT05fX0xJU1QpOworCQl9CisJCXJldHVybiBjaGlsZHJlbkZlYXR1cmVzOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCBFU3RydWN0dXJhbEZlYXR1cmUgZ2V0Q2hpbGRGZWF0dXJlKE9iamVjdCBvYmplY3QsIE9iamVjdCBjaGlsZCkgeworCQkvLyBDaGVjayB0aGUgdHlwZSBvZiB0aGUgc3BlY2lmaWVkIGNoaWxkIG9iamVjdCBhbmQgcmV0dXJuIHRoZSBwcm9wZXIgZmVhdHVyZSB0byB1c2UgZm9yCisJCS8vIGFkZGluZyAoc2VlIHtAbGluayBBZGRDb21tYW5kfSkgaXQgYXMgYSBjaGlsZC4KKworCQlyZXR1cm4gc3VwZXIuZ2V0Q2hpbGRGZWF0dXJlKG9iamVjdCwgY2hpbGQpOworCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyBJbmZlY3Rvcklub2N1bGF0b3JDb2xsZWN0aW9uLmdpZi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIE9iamVjdCBnZXRJbWFnZShPYmplY3Qgb2JqZWN0KSB7CisJCXJldHVybiBvdmVybGF5SW1hZ2Uob2JqZWN0LCBnZXRSZXNvdXJjZUxvY2F0b3IoKS5nZXRJbWFnZSgiZnVsbC9jdXN0b20xNi9pbmZlY3RvcmNvbGxlY3Rpb24uZ2lmIikpOyAvLyROT04tTkxTLTEkCisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIHRoZSBsYWJlbCB0ZXh0IGZvciB0aGUgYWRhcHRlZCBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIFN0cmluZyBnZXRUZXh0KE9iamVjdCBvYmplY3QpIHsKKwkJU3RyaW5nIGxhYmVsID0gKChJbmZlY3Rvcklub2N1bGF0b3JDb2xsZWN0aW9uKW9iamVjdCkuZ2V0VVJJKCkubGFzdFNlZ21lbnQoKTsKKwkJcmV0dXJuIGxhYmVsID09IG51bGwgfHwgbGFiZWwubGVuZ3RoKCkgPT0gMCA/CisJCQlnZXRTdHJpbmcoIl9VSV9JbmZlY3Rvcklub2N1bGF0b3JDb2xsZWN0aW9uX3R5cGUiKSA6IC8vJE5PTi1OTFMtMSQKKwkJCWxhYmVsOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKKwl9CisKKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyB0aGUgbGFiZWwgdGV4dCBmb3IgdGhlIGFkYXB0ZWQgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIFN0cmluZyBnZXRUZXh0R2VuKE9iamVjdCBvYmplY3QpIHsKKwkJVVJJIGxhYmVsVmFsdWUgPSAoKEluZmVjdG9ySW5vY3VsYXRvckNvbGxlY3Rpb24pb2JqZWN0KS5nZXRVUkkoKTsKKwkJU3RyaW5nIGxhYmVsID0gbGFiZWxWYWx1ZSA9PSBudWxsID8gbnVsbCA6IGxhYmVsVmFsdWUudG9TdHJpbmcoKTsKKwkJcmV0dXJuIGxhYmVsID09IG51bGwgfHwgbGFiZWwubGVuZ3RoKCkgPT0gMCA/CisJCQlnZXRTdHJpbmcoIl9VSV9JbmZlY3Rvcklub2N1bGF0b3JDb2xsZWN0aW9uX3R5cGUiKSA6IC8vJE5PTi1OTFMtMSQKKwkJCWdldFN0cmluZygiX1VJX0luZmVjdG9ySW5vY3VsYXRvckNvbGxlY3Rpb25fdHlwZSIpICsgIiAiICsgbGFiZWw7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAorCX0KKwkKKwkvKioKKwkgKiBUaGlzIGhhbmRsZXMgbW9kZWwgbm90aWZpY2F0aW9ucyBieSBjYWxsaW5nIHtAbGluayAjdXBkYXRlQ2hpbGRyZW59IHRvIHVwZGF0ZSBhbnkgY2FjaGVkCisJICogY2hpbGRyZW4gYW5kIGJ5IGNyZWF0aW5nIGEgdmlld2VyIG5vdGlmaWNhdGlvbiwgd2hpY2ggaXQgcGFzc2VzIHRvIHtAbGluayAjZmlyZU5vdGlmeUNoYW5nZWR9LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIG5vdGlmeUNoYW5nZWQoTm90aWZpY2F0aW9uIG5vdGlmaWNhdGlvbikgeworCQl1cGRhdGVDaGlsZHJlbihub3RpZmljYXRpb24pOworCisJCXN3aXRjaCAobm90aWZpY2F0aW9uLmdldEZlYXR1cmVJRChJbmZlY3Rvcklub2N1bGF0b3JDb2xsZWN0aW9uLmNsYXNzKSkgeworCQkJY2FzZSBTdGFuZGFyZFBhY2thZ2UuSU5GRUNUT1JfSU5PQ1VMQVRPUl9DT0xMRUNUSU9OX19JTVBPUlRfRk9MREVSOgorCQkJCWZpcmVOb3RpZnlDaGFuZ2VkKG5ldyBWaWV3ZXJOb3RpZmljYXRpb24obm90aWZpY2F0aW9uLCBub3RpZmljYXRpb24uZ2V0Tm90aWZpZXIoKSwgZmFsc2UsIHRydWUpKTsKKwkJCQlyZXR1cm47CisJCX0KKwkJc3VwZXIubm90aWZ5Q2hhbmdlZChub3RpZmljYXRpb24pOworCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmVkaXQuY29tbWFuZC5Db21tYW5kUGFyYW1ldGVyfXMgZGVzY3JpYmluZyB0aGUgY2hpbGRyZW4KKwkgKiB0aGF0IGNhbiBiZSBjcmVhdGVkIHVuZGVyIHRoaXMgb2JqZWN0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIGNvbGxlY3ROZXdDaGlsZERlc2NyaXB0b3JzKENvbGxlY3Rpb248T2JqZWN0PiBuZXdDaGlsZERlc2NyaXB0b3JzLCBPYmplY3Qgb2JqZWN0KSB7CisJCXN1cGVyLmNvbGxlY3ROZXdDaGlsZERlc2NyaXB0b3JzKG5ld0NoaWxkRGVzY3JpcHRvcnMsIG9iamVjdCk7CisJfQorCisJLyoqCisJICogUmV0dXJuIHRoZSByZXNvdXJjZSBsb2NhdG9yIGZvciB0aGlzIGl0ZW0gcHJvdmlkZXIncyByZXNvdXJjZXMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIFJlc291cmNlTG9jYXRvciBnZXRSZXNvdXJjZUxvY2F0b3IoKSB7CisJCXJldHVybiBEaXNlYXNlbW9kZWxzRWRpdFBsdWdpbi5JTlNUQU5DRTsKKwl9CisKK30KZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvc3RhbmRhcmQvcHJvdmlkZXIvSW5mZWN0b3JJdGVtUHJvdmlkZXIuamF2YSBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvc3RhbmRhcmQvcHJvdmlkZXIvSW5mZWN0b3JJdGVtUHJvdmlkZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMDA0MjVkCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9zdGFuZGFyZC9wcm92aWRlci9JbmZlY3Rvckl0ZW1Qcm92aWRlci5qYXZhCkBAIC0wLDAgKzEsMzM4IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5wcm92aWRlcjsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LkFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuUmVzb3VyY2VMb2NhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkNvbXBvc2VhYmxlQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUVkaXRpbmdEb21haW5JdGVtUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1MYWJlbFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtUHJvcGVydHlEZXNjcmlwdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtUHJvcGVydHlTb3VyY2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVN0cnVjdHVyZWRJdGVtQ29udGVudFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklUcmVlSXRlbUNvbnRlbnRQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JdGVtUHJvcGVydHlEZXNjcmlwdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLlZpZXdlck5vdGlmaWNhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwucHJvdmlkZXIuTm9kZURlY29yYXRvckl0ZW1Qcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuSW5mZWN0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkUGFja2FnZTsKKworLyoqCisgKiBUaGlzIGlzIHRoZSBpdGVtIHByb3ZpZGVyIGFkYXB0ZXIgZm9yIGEKKyAqIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuSW5mZWN0b3J9IG9iamVjdC4gPCEtLQorICogYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogCisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBJbmZlY3Rvckl0ZW1Qcm92aWRlciBleHRlbmRzIE5vZGVEZWNvcmF0b3JJdGVtUHJvdmlkZXIgaW1wbGVtZW50cworCQlJRWRpdGluZ0RvbWFpbkl0ZW1Qcm92aWRlciwgSVN0cnVjdHVyZWRJdGVtQ29udGVudFByb3ZpZGVyLAorCQlJVHJlZUl0ZW1Db250ZW50UHJvdmlkZXIsIElJdGVtTGFiZWxQcm92aWRlciwgSUl0ZW1Qcm9wZXJ0eVNvdXJjZSB7CisJLyoqCisJICogVGhpcyBjb25zdHJ1Y3RzIGFuIGluc3RhbmNlIGZyb20gYSBmYWN0b3J5IGFuZCBhIG5vdGlmaWVyLiA8IS0tCisJICogYmVnaW4tdXNlci1kb2MgLS0+CisJICogCisJICogQHBhcmFtIGFkYXB0ZXJGYWN0b3J5CisJICogCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBJbmZlY3Rvckl0ZW1Qcm92aWRlcihBZGFwdGVyRmFjdG9yeSBhZGFwdGVyRmFjdG9yeSkgeworCQlzdXBlcihhZGFwdGVyRmFjdG9yeSk7CisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIHRoZSBwcm9wZXJ0eSBkZXNjcmlwdG9ycyBmb3IgdGhlIGFkYXB0ZWQgY2xhc3MuIDwhLS0KKwkgKiBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAcGFyYW0gb2JqZWN0CisJICogQHJldHVybgorCSAqIAorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgTGlzdDxJSXRlbVByb3BlcnR5RGVzY3JpcHRvcj4gZ2V0UHJvcGVydHlEZXNjcmlwdG9ycyhPYmplY3Qgb2JqZWN0KSB7CisJCWlmIChpdGVtUHJvcGVydHlEZXNjcmlwdG9ycyA9PSBudWxsKSB7CisJCQlzdXBlci5nZXRQcm9wZXJ0eURlc2NyaXB0b3JzKG9iamVjdCk7CisKKwkJCWFkZERpc2Vhc2VNb2RlbFByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QpOworCQkJYWRkVGFyZ2V0VVJJUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCk7CisJCQlhZGREaXNlYXNlTmFtZVByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QpOworCQkJYWRkVGFyZ2V0SVNPS2V5UHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCk7CisJCQlhZGRMYWJlbHNUb0luZmVjdFByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QpOworCQkJYWRkUG9wdWxhdGlvbklkZW50aWZpZXJQcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0KTsKKwkJCWFkZEluZmVjdFBlcmNlbnRhZ2VQcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0KTsKKwkJCWFkZFRhcmdldEZlYXR1cmVQcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0KTsKKwkJfQorCQlyZXR1cm4gaXRlbVByb3BlcnR5RGVzY3JpcHRvcnM7CisJfQorCisJLyoqCisJICogVGhpcyBhZGRzIGEgcHJvcGVydHkgZGVzY3JpcHRvciBmb3IgdGhlIERpc2Vhc2UgTW9kZWwgZmVhdHVyZS4gPCEtLQorCSAqIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgYWRkRGlzZWFzZU1vZGVsUHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdCBvYmplY3QpIHsKKwkJaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMuYWRkCisJCQkoY3JlYXRlSXRlbVByb3BlcnR5RGVzY3JpcHRvcgorCQkJCSgoKENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnkpYWRhcHRlckZhY3RvcnkpLmdldFJvb3RBZGFwdGVyRmFjdG9yeSgpLAorCQkJCSBnZXRSZXNvdXJjZUxvY2F0b3IoKSwKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfSW5mZWN0b3JfZGlzZWFzZU1vZGVsX2ZlYXR1cmUiKSwgLy8kTk9OLU5MUy0xJAorCQkJCSBnZXRTdHJpbmcoIl9VSV9Qcm9wZXJ0eURlc2NyaXB0b3JfZGVzY3JpcHRpb24iLCAiX1VJX0luZmVjdG9yX2Rpc2Vhc2VNb2RlbF9mZWF0dXJlIiwgIl9VSV9JbmZlY3Rvcl90eXBlIiksIC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJCAvLyROT04tTkxTLTMkCisJCQkJIFN0YW5kYXJkUGFja2FnZS5MaXRlcmFscy5JTkZFQ1RPUl9fRElTRUFTRV9NT0RFTCwKKwkJCQkgdHJ1ZSwKKwkJCQkgZmFsc2UsCisJCQkJIHRydWUsCisJCQkJIG51bGwsCisJCQkJIG51bGwsCisJCQkJIG51bGwpKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFkZHMgYSBwcm9wZXJ0eSBkZXNjcmlwdG9yIGZvciB0aGUgVGFyZ2V0IFVSSSBmZWF0dXJlLiA8IS0tCisJICogYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBhZGRUYXJnZXRVUklQcm9wZXJ0eURlc2NyaXB0b3IoT2JqZWN0IG9iamVjdCkgeworCQlpdGVtUHJvcGVydHlEZXNjcmlwdG9ycy5hZGQKKwkJCShjcmVhdGVJdGVtUHJvcGVydHlEZXNjcmlwdG9yCisJCQkJKCgoQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSlhZGFwdGVyRmFjdG9yeSkuZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCksCisJCQkJIGdldFJlc291cmNlTG9jYXRvcigpLAorCQkJCSBnZXRTdHJpbmcoIl9VSV9JbmZlY3Rvcl90YXJnZXRVUklfZmVhdHVyZSIpLCAvLyROT04tTkxTLTEkCisJCQkJIGdldFN0cmluZygiX1VJX1Byb3BlcnR5RGVzY3JpcHRvcl9kZXNjcmlwdGlvbiIsICJfVUlfSW5mZWN0b3JfdGFyZ2V0VVJJX2ZlYXR1cmUiLCAiX1VJX0luZmVjdG9yX3R5cGUiKSwgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkIC8vJE5PTi1OTFMtMyQKKwkJCQkgU3RhbmRhcmRQYWNrYWdlLkxpdGVyYWxzLklORkVDVE9SX19UQVJHRVRfVVJJLAorCQkJCSB0cnVlLAorCQkJCSBmYWxzZSwKKwkJCQkgZmFsc2UsCisJCQkJIEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IuR0VORVJJQ19WQUxVRV9JTUFHRSwKKwkJCQkgbnVsbCwKKwkJCQkgbnVsbCkpOworCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyBhIHByb3BlcnR5IGRlc2NyaXB0b3IgZm9yIHRoZSBEaXNlYXNlIE5hbWUgZmVhdHVyZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBhZGREaXNlYXNlTmFtZVByb3BlcnR5RGVzY3JpcHRvcihPYmplY3Qgb2JqZWN0KSB7CisJCWl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzLmFkZAorCQkJKGNyZWF0ZUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IKKwkJCQkoKChDb21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5KWFkYXB0ZXJGYWN0b3J5KS5nZXRSb290QWRhcHRlckZhY3RvcnkoKSwKKwkJCQkgZ2V0UmVzb3VyY2VMb2NhdG9yKCksCisJCQkJIGdldFN0cmluZygiX1VJX0luZmVjdG9yX2Rpc2Vhc2VOYW1lX2ZlYXR1cmUiKSwgLy8kTk9OLU5MUy0xJAorCQkJCSBnZXRTdHJpbmcoIl9VSV9Qcm9wZXJ0eURlc2NyaXB0b3JfZGVzY3JpcHRpb24iLCAiX1VJX0luZmVjdG9yX2Rpc2Vhc2VOYW1lX2ZlYXR1cmUiLCAiX1VJX0luZmVjdG9yX3R5cGUiKSwgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkIC8vJE5PTi1OTFMtMyQKKwkJCQkgU3RhbmRhcmRQYWNrYWdlLkxpdGVyYWxzLklORkVDVE9SX19ESVNFQVNFX05BTUUsCisJCQkJIHRydWUsCisJCQkJIGZhbHNlLAorCQkJCSBmYWxzZSwKKwkJCQkgSXRlbVByb3BlcnR5RGVzY3JpcHRvci5HRU5FUklDX1ZBTFVFX0lNQUdFLAorCQkJCSBudWxsLAorCQkJCSBudWxsKSk7CisJfQorCisJLyoqCisJICogVGhpcyBhZGRzIGEgcHJvcGVydHkgZGVzY3JpcHRvciBmb3IgdGhlIFRhcmdldCBJU08gS2V5IGZlYXR1cmUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgYWRkVGFyZ2V0SVNPS2V5UHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdCBvYmplY3QpIHsKKwkJaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMuYWRkCisJCQkoY3JlYXRlSXRlbVByb3BlcnR5RGVzY3JpcHRvcgorCQkJCSgoKENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnkpYWRhcHRlckZhY3RvcnkpLmdldFJvb3RBZGFwdGVyRmFjdG9yeSgpLAorCQkJCSBnZXRSZXNvdXJjZUxvY2F0b3IoKSwKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfSW5mZWN0b3JfdGFyZ2V0SVNPS2V5X2ZlYXR1cmUiKSwgLy8kTk9OLU5MUy0xJAorCQkJCSBnZXRTdHJpbmcoIl9VSV9Qcm9wZXJ0eURlc2NyaXB0b3JfZGVzY3JpcHRpb24iLCAiX1VJX0luZmVjdG9yX3RhcmdldElTT0tleV9mZWF0dXJlIiwgIl9VSV9JbmZlY3Rvcl90eXBlIiksIC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJCAvLyROT04tTkxTLTMkCisJCQkJIFN0YW5kYXJkUGFja2FnZS5MaXRlcmFscy5JTkZFQ1RPUl9fVEFSR0VUX0lTT19LRVksCisJCQkJIHRydWUsCisJCQkJIGZhbHNlLAorCQkJCSBmYWxzZSwKKwkJCQkgSXRlbVByb3BlcnR5RGVzY3JpcHRvci5HRU5FUklDX1ZBTFVFX0lNQUdFLAorCQkJCSBudWxsLAorCQkJCSBudWxsKSk7CisJfQorCisJLyoqCisJICogVGhpcyBhZGRzIGEgcHJvcGVydHkgZGVzY3JpcHRvciBmb3IgdGhlIExhYmVscyBUbyBJbmZlY3QgZmVhdHVyZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBhZGRMYWJlbHNUb0luZmVjdFByb3BlcnR5RGVzY3JpcHRvcihPYmplY3Qgb2JqZWN0KSB7CisJCWl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzLmFkZAorCQkJKGNyZWF0ZUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IKKwkJCQkoKChDb21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5KWFkYXB0ZXJGYWN0b3J5KS5nZXRSb290QWRhcHRlckZhY3RvcnkoKSwKKwkJCQkgZ2V0UmVzb3VyY2VMb2NhdG9yKCksCisJCQkJIGdldFN0cmluZygiX1VJX0luZmVjdG9yX2xhYmVsc1RvSW5mZWN0X2ZlYXR1cmUiKSwgLy8kTk9OLU5MUy0xJAorCQkJCSBnZXRTdHJpbmcoIl9VSV9Qcm9wZXJ0eURlc2NyaXB0b3JfZGVzY3JpcHRpb24iLCAiX1VJX0luZmVjdG9yX2xhYmVsc1RvSW5mZWN0X2ZlYXR1cmUiLCAiX1VJX0luZmVjdG9yX3R5cGUiKSwgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkIC8vJE5PTi1OTFMtMyQKKwkJCQkgU3RhbmRhcmRQYWNrYWdlLkxpdGVyYWxzLklORkVDVE9SX19MQUJFTFNfVE9fSU5GRUNULAorCQkJCSB0cnVlLAorCQkJCSBmYWxzZSwKKwkJCQkgdHJ1ZSwKKwkJCQkgbnVsbCwKKwkJCQkgbnVsbCwKKwkJCQkgbnVsbCkpOworCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyBhIHByb3BlcnR5IGRlc2NyaXB0b3IgZm9yIHRoZSBQb3B1bGF0aW9uIElkZW50aWZpZXIgZmVhdHVyZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBhZGRQb3B1bGF0aW9uSWRlbnRpZmllclByb3BlcnR5RGVzY3JpcHRvcihPYmplY3Qgb2JqZWN0KSB7CisJCWl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzLmFkZAorCQkJKGNyZWF0ZUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IKKwkJCQkoKChDb21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5KWFkYXB0ZXJGYWN0b3J5KS5nZXRSb290QWRhcHRlckZhY3RvcnkoKSwKKwkJCQkgZ2V0UmVzb3VyY2VMb2NhdG9yKCksCisJCQkJIGdldFN0cmluZygiX1VJX0luZmVjdG9yX3BvcHVsYXRpb25JZGVudGlmaWVyX2ZlYXR1cmUiKSwgLy8kTk9OLU5MUy0xJAorCQkJCSBnZXRTdHJpbmcoIl9VSV9Qcm9wZXJ0eURlc2NyaXB0b3JfZGVzY3JpcHRpb24iLCAiX1VJX0luZmVjdG9yX3BvcHVsYXRpb25JZGVudGlmaWVyX2ZlYXR1cmUiLCAiX1VJX0luZmVjdG9yX3R5cGUiKSwgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkIC8vJE5PTi1OTFMtMyQKKwkJCQkgU3RhbmRhcmRQYWNrYWdlLkxpdGVyYWxzLklORkVDVE9SX19QT1BVTEFUSU9OX0lERU5USUZJRVIsCisJCQkJIHRydWUsCisJCQkJIGZhbHNlLAorCQkJCSBmYWxzZSwKKwkJCQkgSXRlbVByb3BlcnR5RGVzY3JpcHRvci5HRU5FUklDX1ZBTFVFX0lNQUdFLAorCQkJCSBudWxsLAorCQkJCSBudWxsKSk7CisJfQorCisJLyoqCisJICogVGhpcyBhZGRzIGEgcHJvcGVydHkgZGVzY3JpcHRvciBmb3IgdGhlIEluZmVjdCBQZXJjZW50YWdlIGZlYXR1cmUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgYWRkSW5mZWN0UGVyY2VudGFnZVByb3BlcnR5RGVzY3JpcHRvcihPYmplY3Qgb2JqZWN0KSB7CisJCWl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzLmFkZAorCQkJKGNyZWF0ZUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IKKwkJCQkoKChDb21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5KWFkYXB0ZXJGYWN0b3J5KS5nZXRSb290QWRhcHRlckZhY3RvcnkoKSwKKwkJCQkgZ2V0UmVzb3VyY2VMb2NhdG9yKCksCisJCQkJIGdldFN0cmluZygiX1VJX0luZmVjdG9yX2luZmVjdFBlcmNlbnRhZ2VfZmVhdHVyZSIpLCAvLyROT04tTkxTLTEkCisJCQkJIGdldFN0cmluZygiX1VJX1Byb3BlcnR5RGVzY3JpcHRvcl9kZXNjcmlwdGlvbiIsICJfVUlfSW5mZWN0b3JfaW5mZWN0UGVyY2VudGFnZV9mZWF0dXJlIiwgIl9VSV9JbmZlY3Rvcl90eXBlIiksIC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJCAvLyROT04tTkxTLTMkCisJCQkJIFN0YW5kYXJkUGFja2FnZS5MaXRlcmFscy5JTkZFQ1RPUl9fSU5GRUNUX1BFUkNFTlRBR0UsCisJCQkJIHRydWUsCisJCQkJIGZhbHNlLAorCQkJCSBmYWxzZSwKKwkJCQkgSXRlbVByb3BlcnR5RGVzY3JpcHRvci5CT09MRUFOX1ZBTFVFX0lNQUdFLAorCQkJCSBudWxsLAorCQkJCSBudWxsKSk7CisJfQorCisJLyoqCisJICogVGhpcyBhZGRzIGEgcHJvcGVydHkgZGVzY3JpcHRvciBmb3IgdGhlIFRhcmdldCBGZWF0dXJlIGZlYXR1cmUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgYWRkVGFyZ2V0RmVhdHVyZVByb3BlcnR5RGVzY3JpcHRvcihPYmplY3Qgb2JqZWN0KSB7CisJCWl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzLmFkZAorCQkJKGNyZWF0ZUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IKKwkJCQkoKChDb21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5KWFkYXB0ZXJGYWN0b3J5KS5nZXRSb290QWRhcHRlckZhY3RvcnkoKSwKKwkJCQkgZ2V0UmVzb3VyY2VMb2NhdG9yKCksCisJCQkJIGdldFN0cmluZygiX1VJX0luZmVjdG9yX3RhcmdldEZlYXR1cmVfZmVhdHVyZSIpLCAvLyROT04tTkxTLTEkCisJCQkJIGdldFN0cmluZygiX1VJX1Byb3BlcnR5RGVzY3JpcHRvcl9kZXNjcmlwdGlvbiIsICJfVUlfSW5mZWN0b3JfdGFyZ2V0RmVhdHVyZV9mZWF0dXJlIiwgIl9VSV9JbmZlY3Rvcl90eXBlIiksIC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJCAvLyROT04tTkxTLTMkCisJCQkJIFN0YW5kYXJkUGFja2FnZS5MaXRlcmFscy5JTkZFQ1RPUl9fVEFSR0VUX0ZFQVRVUkUsCisJCQkJIHRydWUsCisJCQkJIGZhbHNlLAorCQkJCSBmYWxzZSwKKwkJCQkgSXRlbVByb3BlcnR5RGVzY3JpcHRvci5HRU5FUklDX1ZBTFVFX0lNQUdFLAorCQkJCSBudWxsLAorCQkJCSBudWxsKSk7CisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIGluZmVjdG9yLmdpZi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIE9iamVjdCBnZXRJbWFnZShPYmplY3Qgb2JqZWN0KSB7CisJCXJldHVybiBvdmVybGF5SW1hZ2Uob2JqZWN0LCBnZXRSZXNvdXJjZUxvY2F0b3IoKS5nZXRJbWFnZSgiZnVsbC9jdXN0b20xNi9pbmZlY3RvciIpKTsKKwl9CisJCisJLyoqCisJICogVGhpcyByZXR1cm5zIHRoZSBsYWJlbCB0ZXh0IGZvciB0aGUgYWRhcHRlZCBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBwYXJhbSBvYmplY3QKKwkgKiBAcmV0dXJuCisJICogCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgU3RyaW5nIGdldFRleHQoT2JqZWN0IG9iamVjdCkgeworCQlyZXR1cm4gc3VwZXIuZ2V0VGV4dChvYmplY3QpOworCX0KKworCS8qKgorCSAqIFRoaXMgaGFuZGxlcyBtb2RlbCBub3RpZmljYXRpb25zIGJ5IGNhbGxpbmcge0BsaW5rICN1cGRhdGVDaGlsZHJlbn0gdG8gdXBkYXRlIGFueSBjYWNoZWQKKwkgKiBjaGlsZHJlbiBhbmQgYnkgY3JlYXRpbmcgYSB2aWV3ZXIgbm90aWZpY2F0aW9uLCB3aGljaCBpdCBwYXNzZXMgdG8ge0BsaW5rICNmaXJlTm90aWZ5Q2hhbmdlZH0uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAcGFyYW0gbm90aWZpY2F0aW9uCisJICogCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIG5vdGlmeUNoYW5nZWQoTm90aWZpY2F0aW9uIG5vdGlmaWNhdGlvbikgeworCQl1cGRhdGVDaGlsZHJlbihub3RpZmljYXRpb24pOworCisJCXN3aXRjaCAobm90aWZpY2F0aW9uLmdldEZlYXR1cmVJRChJbmZlY3Rvci5jbGFzcykpIHsKKwkJCWNhc2UgU3RhbmRhcmRQYWNrYWdlLklORkVDVE9SX19UQVJHRVRfVVJJOgorCQkJY2FzZSBTdGFuZGFyZFBhY2thZ2UuSU5GRUNUT1JfX0RJU0VBU0VfTkFNRToKKwkJCWNhc2UgU3RhbmRhcmRQYWNrYWdlLklORkVDVE9SX19UQVJHRVRfSVNPX0tFWToKKwkJCWNhc2UgU3RhbmRhcmRQYWNrYWdlLklORkVDVE9SX19QT1BVTEFUSU9OX0lERU5USUZJRVI6CisJCQljYXNlIFN0YW5kYXJkUGFja2FnZS5JTkZFQ1RPUl9fSU5GRUNUX1BFUkNFTlRBR0U6CisJCQljYXNlIFN0YW5kYXJkUGFja2FnZS5JTkZFQ1RPUl9fVEFSR0VUX0ZFQVRVUkU6CisJCQkJZmlyZU5vdGlmeUNoYW5nZWQobmV3IFZpZXdlck5vdGlmaWNhdGlvbihub3RpZmljYXRpb24sIG5vdGlmaWNhdGlvbi5nZXROb3RpZmllcigpLCBmYWxzZSwgdHJ1ZSkpOworCQkJCXJldHVybjsKKwkJfQorCQlzdXBlci5ub3RpZnlDaGFuZ2VkKG5vdGlmaWNhdGlvbik7CisJfQorCisJLyoqCisJICogVGhpcyBhZGRzIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuZWRpdC5jb21tYW5kLkNvbW1hbmRQYXJhbWV0ZXJ9cyBkZXNjcmliaW5nIHRoZSBjaGlsZHJlbgorCSAqIHRoYXQgY2FuIGJlIGNyZWF0ZWQgdW5kZXIgdGhpcyBvYmplY3QuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYworCSAqIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgY29sbGVjdE5ld0NoaWxkRGVzY3JpcHRvcnMoQ29sbGVjdGlvbjxPYmplY3Q+IG5ld0NoaWxkRGVzY3JpcHRvcnMsIE9iamVjdCBvYmplY3QpIHsKKwkJc3VwZXIuY29sbGVjdE5ld0NoaWxkRGVzY3JpcHRvcnMobmV3Q2hpbGREZXNjcmlwdG9ycywgb2JqZWN0KTsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm4gdGhlIHJlc291cmNlIGxvY2F0b3IgZm9yIHRoaXMgaXRlbSBwcm92aWRlcidzIHJlc291cmNlcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEByZXR1cm4KKwkgKiAKKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIFJlc291cmNlTG9jYXRvciBnZXRSZXNvdXJjZUxvY2F0b3IoKSB7CisJCXJldHVybiBEaXNlYXNlbW9kZWxzRWRpdFBsdWdpbi5JTlNUQU5DRTsKKwl9CisKK30KZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvc3RhbmRhcmQvcHJvdmlkZXIvSW5pdGlhbGl6ZXJJdGVtUHJvdmlkZXIuamF2YSBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvc3RhbmRhcmQvcHJvdmlkZXIvSW5pdGlhbGl6ZXJJdGVtUHJvdmlkZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNjc0ZTcyCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9zdGFuZGFyZC9wcm92aWRlci9Jbml0aWFsaXplckl0ZW1Qcm92aWRlci5qYXZhCkBAIC0wLDAgKzEsMzE2IEBACisvKioNCisgKiA8Y29weXJpZ2h0Pg0KKyAqIDwvY29weXJpZ2h0Pg0KKyAqDQorICogJElkJA0KKyAqLw0KK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLnByb3ZpZGVyOw0KKw0KKw0KK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsNCitpbXBvcnQgamF2YS51dGlsLkxpc3Q7DQorDQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LkFkYXB0ZXJGYWN0b3J5Ow0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb247DQorDQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5SZXNvdXJjZUxvY2F0b3I7DQorDQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkNvbXBvc2VhYmxlQWRhcHRlckZhY3Rvcnk7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklFZGl0aW5nRG9tYWluSXRlbVByb3ZpZGVyOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbUxhYmVsUHJvdmlkZXI7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtUHJvcGVydHlEZXNjcmlwdG9yOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbVByb3BlcnR5U291cmNlOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JU3RydWN0dXJlZEl0ZW1Db250ZW50UHJvdmlkZXI7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklUcmVlSXRlbUNvbnRlbnRQcm92aWRlcjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSXRlbVByb3BlcnR5RGVzY3JpcHRvcjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuVmlld2VyTm90aWZpY2F0aW9uOw0KKw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwucHJvdmlkZXIuTm9kZURlY29yYXRvckl0ZW1Qcm92aWRlcjsNCisNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLkluaXRpYWxpemVyOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmRQYWNrYWdlOw0KKw0KKy8qKg0KKyAqIFRoaXMgaXMgdGhlIGl0ZW0gcHJvdmlkZXIgYWRhcHRlciBmb3IgYSB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLkluaXRpYWxpemVyfSBvYmplY3QuDQorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisgKiBAZ2VuZXJhdGVkDQorICovDQorcHVibGljIGNsYXNzIEluaXRpYWxpemVySXRlbVByb3ZpZGVyDQorCWV4dGVuZHMgTm9kZURlY29yYXRvckl0ZW1Qcm92aWRlcg0KKwlpbXBsZW1lbnRzDQorCQlJRWRpdGluZ0RvbWFpbkl0ZW1Qcm92aWRlciwNCisJCUlTdHJ1Y3R1cmVkSXRlbUNvbnRlbnRQcm92aWRlciwNCisJCUlUcmVlSXRlbUNvbnRlbnRQcm92aWRlciwNCisJCUlJdGVtTGFiZWxQcm92aWRlciwNCisJCUlJdGVtUHJvcGVydHlTb3VyY2Ugew0KKwkvKioNCisJICogVGhpcyBjb25zdHJ1Y3RzIGFuIGluc3RhbmNlIGZyb20gYSBmYWN0b3J5IGFuZCBhIG5vdGlmaWVyLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIEluaXRpYWxpemVySXRlbVByb3ZpZGVyKEFkYXB0ZXJGYWN0b3J5IGFkYXB0ZXJGYWN0b3J5KSB7DQorCQlzdXBlcihhZGFwdGVyRmFjdG9yeSk7DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgcmV0dXJucyB0aGUgcHJvcGVydHkgZGVzY3JpcHRvcnMgZm9yIHRoZSBhZGFwdGVkIGNsYXNzLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJQE92ZXJyaWRlDQorCXB1YmxpYyBMaXN0PElJdGVtUHJvcGVydHlEZXNjcmlwdG9yPiBnZXRQcm9wZXJ0eURlc2NyaXB0b3JzKE9iamVjdCBvYmplY3QpIHsNCisJCWlmIChpdGVtUHJvcGVydHlEZXNjcmlwdG9ycyA9PSBudWxsKSB7DQorCQkJc3VwZXIuZ2V0UHJvcGVydHlEZXNjcmlwdG9ycyhvYmplY3QpOw0KKw0KKwkJCWFkZERpc2Vhc2VOYW1lUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCk7DQorCQkJYWRkVGFyZ2V0SVNPS2V5UHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCk7DQorCQkJYWRkVGFyZ2V0VVJJUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCk7DQorCQkJYWRkUG9wdWxhdGlvbklkZW50aWZpZXJQcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0KTsNCisJCQlhZGRDb21wYXJ0bWVudHNQcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0KTsNCisJCQlhZGRDb21wYXJ0bWVudFZhbHVlc1Byb3BlcnR5RGVzY3JpcHRvcihvYmplY3QpOw0KKwkJCWFkZFVzZUZyYWN0aW9uc1Byb3BlcnR5RGVzY3JpcHRvcihvYmplY3QpOw0KKwkJfQ0KKwkJcmV0dXJuIGl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzOw0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIGFkZHMgYSBwcm9wZXJ0eSBkZXNjcmlwdG9yIGZvciB0aGUgRGlzZWFzZSBOYW1lIGZlYXR1cmUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgdm9pZCBhZGREaXNlYXNlTmFtZVByb3BlcnR5RGVzY3JpcHRvcihPYmplY3Qgb2JqZWN0KSB7DQorCQlpdGVtUHJvcGVydHlEZXNjcmlwdG9ycy5hZGQNCisJCQkoY3JlYXRlSXRlbVByb3BlcnR5RGVzY3JpcHRvcg0KKwkJCQkoKChDb21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5KWFkYXB0ZXJGYWN0b3J5KS5nZXRSb290QWRhcHRlckZhY3RvcnkoKSwNCisJCQkJIGdldFJlc291cmNlTG9jYXRvcigpLA0KKwkJCQkgZ2V0U3RyaW5nKCJfVUlfSW5pdGlhbGl6ZXJfZGlzZWFzZU5hbWVfZmVhdHVyZSIpLCAvLyROT04tTkxTLTEkDQorCQkJCSBnZXRTdHJpbmcoIl9VSV9Qcm9wZXJ0eURlc2NyaXB0b3JfZGVzY3JpcHRpb24iLCAiX1VJX0luaXRpYWxpemVyX2Rpc2Vhc2VOYW1lX2ZlYXR1cmUiLCAiX1VJX0luaXRpYWxpemVyX3R5cGUiKSwgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkIC8vJE5PTi1OTFMtMyQNCisJCQkJIFN0YW5kYXJkUGFja2FnZS5MaXRlcmFscy5JTklUSUFMSVpFUl9fRElTRUFTRV9OQU1FLA0KKwkJCQkgdHJ1ZSwNCisJCQkJIGZhbHNlLA0KKwkJCQkgZmFsc2UsDQorCQkJCSBJdGVtUHJvcGVydHlEZXNjcmlwdG9yLkdFTkVSSUNfVkFMVUVfSU1BR0UsDQorCQkJCSBudWxsLA0KKwkJCQkgbnVsbCkpOw0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIGFkZHMgYSBwcm9wZXJ0eSBkZXNjcmlwdG9yIGZvciB0aGUgVGFyZ2V0IElTTyBLZXkgZmVhdHVyZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCB2b2lkIGFkZFRhcmdldElTT0tleVByb3BlcnR5RGVzY3JpcHRvcihPYmplY3Qgb2JqZWN0KSB7DQorCQlpdGVtUHJvcGVydHlEZXNjcmlwdG9ycy5hZGQNCisJCQkoY3JlYXRlSXRlbVByb3BlcnR5RGVzY3JpcHRvcg0KKwkJCQkoKChDb21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5KWFkYXB0ZXJGYWN0b3J5KS5nZXRSb290QWRhcHRlckZhY3RvcnkoKSwNCisJCQkJIGdldFJlc291cmNlTG9jYXRvcigpLA0KKwkJCQkgZ2V0U3RyaW5nKCJfVUlfSW5pdGlhbGl6ZXJfdGFyZ2V0SVNPS2V5X2ZlYXR1cmUiKSwgLy8kTk9OLU5MUy0xJA0KKwkJCQkgZ2V0U3RyaW5nKCJfVUlfUHJvcGVydHlEZXNjcmlwdG9yX2Rlc2NyaXB0aW9uIiwgIl9VSV9Jbml0aWFsaXplcl90YXJnZXRJU09LZXlfZmVhdHVyZSIsICJfVUlfSW5pdGlhbGl6ZXJfdHlwZSIpLCAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQgLy8kTk9OLU5MUy0zJA0KKwkJCQkgU3RhbmRhcmRQYWNrYWdlLkxpdGVyYWxzLklOSVRJQUxJWkVSX19UQVJHRVRfSVNPX0tFWSwNCisJCQkJIHRydWUsDQorCQkJCSBmYWxzZSwNCisJCQkJIGZhbHNlLA0KKwkJCQkgSXRlbVByb3BlcnR5RGVzY3JpcHRvci5HRU5FUklDX1ZBTFVFX0lNQUdFLA0KKwkJCQkgbnVsbCwNCisJCQkJIG51bGwpKTsNCisJfQ0KKw0KKwkvKioNCisJICogVGhpcyBhZGRzIGEgcHJvcGVydHkgZGVzY3JpcHRvciBmb3IgdGhlIFRhcmdldCBVUkkgZmVhdHVyZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCB2b2lkIGFkZFRhcmdldFVSSVByb3BlcnR5RGVzY3JpcHRvcihPYmplY3Qgb2JqZWN0KSB7DQorCQlpdGVtUHJvcGVydHlEZXNjcmlwdG9ycy5hZGQNCisJCQkoY3JlYXRlSXRlbVByb3BlcnR5RGVzY3JpcHRvcg0KKwkJCQkoKChDb21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5KWFkYXB0ZXJGYWN0b3J5KS5nZXRSb290QWRhcHRlckZhY3RvcnkoKSwNCisJCQkJIGdldFJlc291cmNlTG9jYXRvcigpLA0KKwkJCQkgZ2V0U3RyaW5nKCJfVUlfSW5pdGlhbGl6ZXJfdGFyZ2V0VVJJX2ZlYXR1cmUiKSwgLy8kTk9OLU5MUy0xJA0KKwkJCQkgZ2V0U3RyaW5nKCJfVUlfUHJvcGVydHlEZXNjcmlwdG9yX2Rlc2NyaXB0aW9uIiwgIl9VSV9Jbml0aWFsaXplcl90YXJnZXRVUklfZmVhdHVyZSIsICJfVUlfSW5pdGlhbGl6ZXJfdHlwZSIpLCAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQgLy8kTk9OLU5MUy0zJA0KKwkJCQkgU3RhbmRhcmRQYWNrYWdlLkxpdGVyYWxzLklOSVRJQUxJWkVSX19UQVJHRVRfVVJJLA0KKwkJCQkgdHJ1ZSwNCisJCQkJIGZhbHNlLA0KKwkJCQkgZmFsc2UsDQorCQkJCSBJdGVtUHJvcGVydHlEZXNjcmlwdG9yLkdFTkVSSUNfVkFMVUVfSU1BR0UsDQorCQkJCSBudWxsLA0KKwkJCQkgbnVsbCkpOw0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIGFkZHMgYSBwcm9wZXJ0eSBkZXNjcmlwdG9yIGZvciB0aGUgUG9wdWxhdGlvbiBJZGVudGlmaWVyIGZlYXR1cmUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgdm9pZCBhZGRQb3B1bGF0aW9uSWRlbnRpZmllclByb3BlcnR5RGVzY3JpcHRvcihPYmplY3Qgb2JqZWN0KSB7DQorCQlpdGVtUHJvcGVydHlEZXNjcmlwdG9ycy5hZGQNCisJCQkoY3JlYXRlSXRlbVByb3BlcnR5RGVzY3JpcHRvcg0KKwkJCQkoKChDb21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5KWFkYXB0ZXJGYWN0b3J5KS5nZXRSb290QWRhcHRlckZhY3RvcnkoKSwNCisJCQkJIGdldFJlc291cmNlTG9jYXRvcigpLA0KKwkJCQkgZ2V0U3RyaW5nKCJfVUlfSW5pdGlhbGl6ZXJfcG9wdWxhdGlvbklkZW50aWZpZXJfZmVhdHVyZSIpLCAvLyROT04tTkxTLTEkDQorCQkJCSBnZXRTdHJpbmcoIl9VSV9Qcm9wZXJ0eURlc2NyaXB0b3JfZGVzY3JpcHRpb24iLCAiX1VJX0luaXRpYWxpemVyX3BvcHVsYXRpb25JZGVudGlmaWVyX2ZlYXR1cmUiLCAiX1VJX0luaXRpYWxpemVyX3R5cGUiKSwgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkIC8vJE5PTi1OTFMtMyQNCisJCQkJIFN0YW5kYXJkUGFja2FnZS5MaXRlcmFscy5JTklUSUFMSVpFUl9fUE9QVUxBVElPTl9JREVOVElGSUVSLA0KKwkJCQkgdHJ1ZSwNCisJCQkJIGZhbHNlLA0KKwkJCQkgZmFsc2UsDQorCQkJCSBJdGVtUHJvcGVydHlEZXNjcmlwdG9yLkdFTkVSSUNfVkFMVUVfSU1BR0UsDQorCQkJCSBudWxsLA0KKwkJCQkgbnVsbCkpOw0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIGFkZHMgYSBwcm9wZXJ0eSBkZXNjcmlwdG9yIGZvciB0aGUgQ29tcGFydG1lbnRzIGZlYXR1cmUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgdm9pZCBhZGRDb21wYXJ0bWVudHNQcm9wZXJ0eURlc2NyaXB0b3IoT2JqZWN0IG9iamVjdCkgew0KKwkJaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMuYWRkDQorCQkJKGNyZWF0ZUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3INCisJCQkJKCgoQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSlhZGFwdGVyRmFjdG9yeSkuZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCksDQorCQkJCSBnZXRSZXNvdXJjZUxvY2F0b3IoKSwNCisJCQkJIGdldFN0cmluZygiX1VJX0luaXRpYWxpemVyX2NvbXBhcnRtZW50c19mZWF0dXJlIiksIC8vJE5PTi1OTFMtMSQNCisJCQkJIGdldFN0cmluZygiX1VJX1Byb3BlcnR5RGVzY3JpcHRvcl9kZXNjcmlwdGlvbiIsICJfVUlfSW5pdGlhbGl6ZXJfY29tcGFydG1lbnRzX2ZlYXR1cmUiLCAiX1VJX0luaXRpYWxpemVyX3R5cGUiKSwgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkIC8vJE5PTi1OTFMtMyQNCisJCQkJIFN0YW5kYXJkUGFja2FnZS5MaXRlcmFscy5JTklUSUFMSVpFUl9fQ09NUEFSVE1FTlRTLA0KKwkJCQkgdHJ1ZSwNCisJCQkJIGZhbHNlLA0KKwkJCQkgZmFsc2UsDQorCQkJCSBJdGVtUHJvcGVydHlEZXNjcmlwdG9yLkdFTkVSSUNfVkFMVUVfSU1BR0UsDQorCQkJCSBudWxsLA0KKwkJCQkgbnVsbCkpOw0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIGFkZHMgYSBwcm9wZXJ0eSBkZXNjcmlwdG9yIGZvciB0aGUgQ29tcGFydG1lbnQgVmFsdWVzIGZlYXR1cmUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgdm9pZCBhZGRDb21wYXJ0bWVudFZhbHVlc1Byb3BlcnR5RGVzY3JpcHRvcihPYmplY3Qgb2JqZWN0KSB7DQorCQlpdGVtUHJvcGVydHlEZXNjcmlwdG9ycy5hZGQNCisJCQkoY3JlYXRlSXRlbVByb3BlcnR5RGVzY3JpcHRvcg0KKwkJCQkoKChDb21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5KWFkYXB0ZXJGYWN0b3J5KS5nZXRSb290QWRhcHRlckZhY3RvcnkoKSwNCisJCQkJIGdldFJlc291cmNlTG9jYXRvcigpLA0KKwkJCQkgZ2V0U3RyaW5nKCJfVUlfSW5pdGlhbGl6ZXJfY29tcGFydG1lbnRWYWx1ZXNfZmVhdHVyZSIpLCAvLyROT04tTkxTLTEkDQorCQkJCSBnZXRTdHJpbmcoIl9VSV9Qcm9wZXJ0eURlc2NyaXB0b3JfZGVzY3JpcHRpb24iLCAiX1VJX0luaXRpYWxpemVyX2NvbXBhcnRtZW50VmFsdWVzX2ZlYXR1cmUiLCAiX1VJX0luaXRpYWxpemVyX3R5cGUiKSwgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkIC8vJE5PTi1OTFMtMyQNCisJCQkJIFN0YW5kYXJkUGFja2FnZS5MaXRlcmFscy5JTklUSUFMSVpFUl9fQ09NUEFSVE1FTlRfVkFMVUVTLA0KKwkJCQkgdHJ1ZSwNCisJCQkJIGZhbHNlLA0KKwkJCQkgZmFsc2UsDQorCQkJCSBJdGVtUHJvcGVydHlEZXNjcmlwdG9yLlJFQUxfVkFMVUVfSU1BR0UsDQorCQkJCSBudWxsLA0KKwkJCQkgbnVsbCkpOw0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIGFkZHMgYSBwcm9wZXJ0eSBkZXNjcmlwdG9yIGZvciB0aGUgVXNlIEZyYWN0aW9ucyBmZWF0dXJlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIHZvaWQgYWRkVXNlRnJhY3Rpb25zUHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdCBvYmplY3QpIHsNCisJCWl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzLmFkZA0KKwkJCShjcmVhdGVJdGVtUHJvcGVydHlEZXNjcmlwdG9yDQorCQkJCSgoKENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnkpYWRhcHRlckZhY3RvcnkpLmdldFJvb3RBZGFwdGVyRmFjdG9yeSgpLA0KKwkJCQkgZ2V0UmVzb3VyY2VMb2NhdG9yKCksDQorCQkJCSBnZXRTdHJpbmcoIl9VSV9Jbml0aWFsaXplcl91c2VGcmFjdGlvbnNfZmVhdHVyZSIpLCAvLyROT04tTkxTLTEkDQorCQkJCSBnZXRTdHJpbmcoIl9VSV9Qcm9wZXJ0eURlc2NyaXB0b3JfZGVzY3JpcHRpb24iLCAiX1VJX0luaXRpYWxpemVyX3VzZUZyYWN0aW9uc19mZWF0dXJlIiwgIl9VSV9Jbml0aWFsaXplcl90eXBlIiksIC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJCAvLyROT04tTkxTLTMkDQorCQkJCSBTdGFuZGFyZFBhY2thZ2UuTGl0ZXJhbHMuSU5JVElBTElaRVJfX1VTRV9GUkFDVElPTlMsDQorCQkJCSB0cnVlLA0KKwkJCQkgZmFsc2UsDQorCQkJCSBmYWxzZSwNCisJCQkJIEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IuQk9PTEVBTl9WQUxVRV9JTUFHRSwNCisJCQkJIG51bGwsDQorCQkJCSBudWxsKSk7DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgcmV0dXJucyBJbml0aWFsaXplci5naWYuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlAT3ZlcnJpZGUNCisJcHVibGljIE9iamVjdCBnZXRJbWFnZShPYmplY3Qgb2JqZWN0KSB7DQorCQlyZXR1cm4gb3ZlcmxheUltYWdlKG9iamVjdCwgZ2V0UmVzb3VyY2VMb2NhdG9yKCkuZ2V0SW1hZ2UoImZ1bGwvb2JqMTYvSW5pdGlhbGl6ZXIiKSk7IC8vJE5PTi1OTFMtMSQNCisJfQ0KKw0KKwkvKioNCisJICogVGhpcyByZXR1cm5zIHRoZSBsYWJlbCB0ZXh0IGZvciB0aGUgYWRhcHRlZCBjbGFzcy4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCUBPdmVycmlkZQ0KKwlwdWJsaWMgU3RyaW5nIGdldFRleHRHZW4oT2JqZWN0IG9iamVjdCkgew0KKwkJU3RyaW5nIGxhYmVsID0gKChJbml0aWFsaXplcilvYmplY3QpLmdldERpc2Vhc2VOYW1lKCk7DQorCQlyZXR1cm4gbGFiZWwgPT0gbnVsbCB8fCBsYWJlbC5sZW5ndGgoKSA9PSAwID8NCisJCQlnZXRTdHJpbmcoIl9VSV9Jbml0aWFsaXplcl90eXBlIikgOiAvLyROT04tTkxTLTEkDQorCQkJZ2V0U3RyaW5nKCJfVUlfSW5pdGlhbGl6ZXJfdHlwZSIpICsgIiAiICsgbGFiZWw7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJA0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIHJldHVybnMgdGhlIGxhYmVsIHRleHQgZm9yIHRoZSBhZGFwdGVkIGNsYXNzLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZCBOT1QNCisJICovDQorCUBPdmVycmlkZQ0KKwlwdWJsaWMgU3RyaW5nIGdldFRleHQoT2JqZWN0IG9iamVjdCkgew0KKwkJcmV0dXJuIHN1cGVyLmdldFRleHQob2JqZWN0KTsNCisJfQ0KKwkvKioNCisJICogVGhpcyBoYW5kbGVzIG1vZGVsIG5vdGlmaWNhdGlvbnMgYnkgY2FsbGluZyB7QGxpbmsgI3VwZGF0ZUNoaWxkcmVufSB0byB1cGRhdGUgYW55IGNhY2hlZA0KKwkgKiBjaGlsZHJlbiBhbmQgYnkgY3JlYXRpbmcgYSB2aWV3ZXIgbm90aWZpY2F0aW9uLCB3aGljaCBpdCBwYXNzZXMgdG8ge0BsaW5rICNmaXJlTm90aWZ5Q2hhbmdlZH0uDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlAT3ZlcnJpZGUNCisJcHVibGljIHZvaWQgbm90aWZ5Q2hhbmdlZChOb3RpZmljYXRpb24gbm90aWZpY2F0aW9uKSB7DQorCQl1cGRhdGVDaGlsZHJlbihub3RpZmljYXRpb24pOw0KKw0KKwkJc3dpdGNoIChub3RpZmljYXRpb24uZ2V0RmVhdHVyZUlEKEluaXRpYWxpemVyLmNsYXNzKSkgew0KKwkJCWNhc2UgU3RhbmRhcmRQYWNrYWdlLklOSVRJQUxJWkVSX19ESVNFQVNFX05BTUU6DQorCQkJY2FzZSBTdGFuZGFyZFBhY2thZ2UuSU5JVElBTElaRVJfX1RBUkdFVF9JU09fS0VZOg0KKwkJCWNhc2UgU3RhbmRhcmRQYWNrYWdlLklOSVRJQUxJWkVSX19UQVJHRVRfVVJJOg0KKwkJCWNhc2UgU3RhbmRhcmRQYWNrYWdlLklOSVRJQUxJWkVSX19QT1BVTEFUSU9OX0lERU5USUZJRVI6DQorCQkJY2FzZSBTdGFuZGFyZFBhY2thZ2UuSU5JVElBTElaRVJfX0NPTVBBUlRNRU5UUzoNCisJCQljYXNlIFN0YW5kYXJkUGFja2FnZS5JTklUSUFMSVpFUl9fQ09NUEFSVE1FTlRfVkFMVUVTOg0KKwkJCWNhc2UgU3RhbmRhcmRQYWNrYWdlLklOSVRJQUxJWkVSX19VU0VfRlJBQ1RJT05TOg0KKwkJCQlmaXJlTm90aWZ5Q2hhbmdlZChuZXcgVmlld2VyTm90aWZpY2F0aW9uKG5vdGlmaWNhdGlvbiwgbm90aWZpY2F0aW9uLmdldE5vdGlmaWVyKCksIGZhbHNlLCB0cnVlKSk7DQorCQkJCXJldHVybjsNCisJCX0NCisJCXN1cGVyLm5vdGlmeUNoYW5nZWQobm90aWZpY2F0aW9uKTsNCisJfQ0KKw0KKwkvKioNCisJICogVGhpcyBhZGRzIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuZWRpdC5jb21tYW5kLkNvbW1hbmRQYXJhbWV0ZXJ9cyBkZXNjcmliaW5nIHRoZSBjaGlsZHJlbg0KKwkgKiB0aGF0IGNhbiBiZSBjcmVhdGVkIHVuZGVyIHRoaXMgb2JqZWN0Lg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJQE92ZXJyaWRlDQorCXByb3RlY3RlZCB2b2lkIGNvbGxlY3ROZXdDaGlsZERlc2NyaXB0b3JzKENvbGxlY3Rpb248T2JqZWN0PiBuZXdDaGlsZERlc2NyaXB0b3JzLCBPYmplY3Qgb2JqZWN0KSB7DQorCQlzdXBlci5jb2xsZWN0TmV3Q2hpbGREZXNjcmlwdG9ycyhuZXdDaGlsZERlc2NyaXB0b3JzLCBvYmplY3QpOw0KKwl9DQorDQorCS8qKg0KKwkgKiBSZXR1cm4gdGhlIHJlc291cmNlIGxvY2F0b3IgZm9yIHRoaXMgaXRlbSBwcm92aWRlcidzIHJlc291cmNlcy4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCUBPdmVycmlkZQ0KKwlwdWJsaWMgUmVzb3VyY2VMb2NhdG9yIGdldFJlc291cmNlTG9jYXRvcigpIHsNCisJCXJldHVybiBEaXNlYXNlbW9kZWxzRWRpdFBsdWdpbi5JTlNUQU5DRTsNCisJfQ0KKw0KK30NCmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3N0YW5kYXJkL3Byb3ZpZGVyL1NFSVJJdGVtUHJvdmlkZXIuamF2YSBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvc3RhbmRhcmQvcHJvdmlkZXIvU0VJUkl0ZW1Qcm92aWRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVkZTQ0MGIKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3N0YW5kYXJkL3Byb3ZpZGVyL1NFSVJJdGVtUHJvdmlkZXIuamF2YQpAQCAtMCwwICsxLDE1NyBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQucHJvdmlkZXI7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5BZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JRWRpdGluZ0RvbWFpbkl0ZW1Qcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbUxhYmVsUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1Qcm9wZXJ0eVNvdXJjZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JU3RydWN0dXJlZEl0ZW1Db250ZW50UHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVRyZWVJdGVtQ29udGVudFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuVmlld2VyTm90aWZpY2F0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TRUlSOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZFBhY2thZ2U7CisKKy8qKgorICogVGhpcyBpcyB0aGUgaXRlbSBwcm92aWRlciBhZGFwdGVyIGZvciBhCisgKiB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlNFSVJ9IG9iamVjdC4gPCEtLQorICogYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogCisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBTRUlSSXRlbVByb3ZpZGVyIGV4dGVuZHMgU0lSSXRlbVByb3ZpZGVyIGltcGxlbWVudHMKKwkJSUVkaXRpbmdEb21haW5JdGVtUHJvdmlkZXIsIElTdHJ1Y3R1cmVkSXRlbUNvbnRlbnRQcm92aWRlciwKKwkJSVRyZWVJdGVtQ29udGVudFByb3ZpZGVyLCBJSXRlbUxhYmVsUHJvdmlkZXIsIElJdGVtUHJvcGVydHlTb3VyY2UgeworCS8qKgorCSAqIFRoaXMgY29uc3RydWN0cyBhbiBpbnN0YW5jZSBmcm9tIGEgZmFjdG9yeSBhbmQgYSBub3RpZmllci4gPCEtLQorCSAqIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBwYXJhbSBhZGFwdGVyRmFjdG9yeQorCSAqIAorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgU0VJUkl0ZW1Qcm92aWRlcihBZGFwdGVyRmFjdG9yeSBhZGFwdGVyRmFjdG9yeSkgeworCQlzdXBlcihhZGFwdGVyRmFjdG9yeSk7CisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIHRoZSBwcm9wZXJ0eSBkZXNjcmlwdG9ycyBmb3IgdGhlIGFkYXB0ZWQgY2xhc3MuIDwhLS0KKwkgKiBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAcGFyYW0gb2JqZWN0CisJICogQHJldHVybgorCSAqIAorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgTGlzdDxJSXRlbVByb3BlcnR5RGVzY3JpcHRvcj4gZ2V0UHJvcGVydHlEZXNjcmlwdG9ycyhPYmplY3Qgb2JqZWN0KSB7CisJCWlmIChpdGVtUHJvcGVydHlEZXNjcmlwdG9ycyA9PSBudWxsKSB7CisJCQlzdXBlci5nZXRQcm9wZXJ0eURlc2NyaXB0b3JzKG9iamVjdCk7CisKKwkJCWFkZEluY3ViYXRpb25SYXRlUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCk7CisJCX0KKwkJcmV0dXJuIGl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzOworCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyBhIHByb3BlcnR5IGRlc2NyaXB0b3IgZm9yIHRoZSBJbmN1YmF0aW9uIFJhdGUgZmVhdHVyZS4gPCEtLQorCSAqIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgYWRkSW5jdWJhdGlvblJhdGVQcm9wZXJ0eURlc2NyaXB0b3IoT2JqZWN0IG9iamVjdCkgeworCQlpdGVtUHJvcGVydHlEZXNjcmlwdG9ycy5hZGQKKwkJCShjcmVhdGVJdGVtUHJvcGVydHlEZXNjcmlwdG9yCisJCQkJKCgoQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSlhZGFwdGVyRmFjdG9yeSkuZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCksCisJCQkJIGdldFJlc291cmNlTG9jYXRvcigpLAorCQkJCSBnZXRTdHJpbmcoIl9VSV9TRUlSX2luY3ViYXRpb25SYXRlX2ZlYXR1cmUiKSwgLy8kTk9OLU5MUy0xJAorCQkJCSBnZXRTdHJpbmcoIl9VSV9Qcm9wZXJ0eURlc2NyaXB0b3JfZGVzY3JpcHRpb24iLCAiX1VJX1NFSVJfaW5jdWJhdGlvblJhdGVfZmVhdHVyZSIsICJfVUlfU0VJUl90eXBlIiksIC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJCAvLyROT04tTkxTLTMkCisJCQkJIFN0YW5kYXJkUGFja2FnZS5MaXRlcmFscy5TRUlSX19JTkNVQkFUSU9OX1JBVEUsCisJCQkJIHRydWUsCisJCQkJIGZhbHNlLAorCQkJCSBmYWxzZSwKKwkJCQkgSXRlbVByb3BlcnR5RGVzY3JpcHRvci5SRUFMX1ZBTFVFX0lNQUdFLAorCQkJCSBudWxsLAorCQkJCSBudWxsKSk7CisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIHRoZSBsYWJlbCB0ZXh0IGZvciB0aGUgYWRhcHRlZCBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jCisJICogLS0+CisJICogCisJICogQHBhcmFtIG9iamVjdAorCSAqIEByZXR1cm4KKwkgKiAKKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBTdHJpbmcgZ2V0VGV4dChPYmplY3Qgb2JqZWN0KSB7CisJCXJldHVybiBzdXBlci5nZXRUZXh0KG9iamVjdCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAcGFyYW0gbm90aWZpY2F0aW9uCisJICogICAgICAgICAgICA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCXB1YmxpYyB2b2lkIG5vdGlmeUNoYW5nZWQoTm90aWZpY2F0aW9uIG5vdGlmaWNhdGlvbikgeworCQl1cGRhdGVDaGlsZHJlbihub3RpZmljYXRpb24pOworCQlzdXBlci5ub3RpZnlDaGFuZ2VkKG5vdGlmaWNhdGlvbik7CisJfQorCisJLyoqCisJICogVGhpcyBoYW5kbGVzIG1vZGVsIG5vdGlmaWNhdGlvbnMgYnkgY2FsbGluZyB7QGxpbmsgI3VwZGF0ZUNoaWxkcmVufSB0byB1cGRhdGUgYW55IGNhY2hlZAorCSAqIGNoaWxkcmVuIGFuZCBieSBjcmVhdGluZyBhIHZpZXdlciBub3RpZmljYXRpb24sIHdoaWNoIGl0IHBhc3NlcyB0byB7QGxpbmsgI2ZpcmVOb3RpZnlDaGFuZ2VkfS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBwYXJhbSBub3RpZmljYXRpb24KKwkgKiAgICAgICAgICAgIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKy8vCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIG5vdGlmeUNoYW5nZWRHZW4oTm90aWZpY2F0aW9uIG5vdGlmaWNhdGlvbikgeworCQl1cGRhdGVDaGlsZHJlbihub3RpZmljYXRpb24pOworCisJCXN3aXRjaCAobm90aWZpY2F0aW9uLmdldEZlYXR1cmVJRChTRUlSLmNsYXNzKSkgeworCQkJY2FzZSBTdGFuZGFyZFBhY2thZ2UuU0VJUl9fSU5DVUJBVElPTl9SQVRFOgorCQkJCWZpcmVOb3RpZnlDaGFuZ2VkKG5ldyBWaWV3ZXJOb3RpZmljYXRpb24obm90aWZpY2F0aW9uLCBub3RpZmljYXRpb24uZ2V0Tm90aWZpZXIoKSwgZmFsc2UsIHRydWUpKTsKKwkJCQlyZXR1cm47CisJCX0KKwkJc3VwZXIubm90aWZ5Q2hhbmdlZChub3RpZmljYXRpb24pOworCX0KKwkKKwkvKioKKwkgKiBUaGlzIGFkZHMge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lZGl0LmNvbW1hbmQuQ29tbWFuZFBhcmFtZXRlcn1zIGRlc2NyaWJpbmcgdGhlIGNoaWxkcmVuCisJICogdGhhdCBjYW4gYmUgY3JlYXRlZCB1bmRlciB0aGlzIG9iamVjdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jCisJICogLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgdm9pZCBjb2xsZWN0TmV3Q2hpbGREZXNjcmlwdG9ycyhDb2xsZWN0aW9uPE9iamVjdD4gbmV3Q2hpbGREZXNjcmlwdG9ycywgT2JqZWN0IG9iamVjdCkgeworCQlzdXBlci5jb2xsZWN0TmV3Q2hpbGREZXNjcmlwdG9ycyhuZXdDaGlsZERlc2NyaXB0b3JzLCBvYmplY3QpOworCX0KKworfQpkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9zdGFuZGFyZC9wcm92aWRlci9TRUlSTGFiZWxJdGVtUHJvdmlkZXIuamF2YSBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvc3RhbmRhcmQvcHJvdmlkZXIvU0VJUkxhYmVsSXRlbVByb3ZpZGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2M4ZWQxYwotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvc3RhbmRhcmQvcHJvdmlkZXIvU0VJUkxhYmVsSXRlbVByb3ZpZGVyLmphdmEKQEAgLTAsMCArMSwxMjAgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLnByb3ZpZGVyOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOworaW1wb3J0IGphdmEudXRpbC5MaXN0OworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5VUkk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JRWRpdGluZ0RvbWFpbkl0ZW1Qcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbUxhYmVsUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1Qcm9wZXJ0eVNvdXJjZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JU3RydWN0dXJlZEl0ZW1Db250ZW50UHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVRyZWVJdGVtQ29udGVudFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TRUlSTGFiZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkUGFja2FnZTsKKworLyoqCisgKiBUaGlzIGlzIHRoZSBpdGVtIHByb3ZpZGVyIGFkYXB0ZXIgZm9yIGEKKyAqIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU0VJUkxhYmVsfSBvYmplY3QuIDwhLS0KKyAqIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIAorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgU0VJUkxhYmVsSXRlbVByb3ZpZGVyIGV4dGVuZHMgU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbEl0ZW1Qcm92aWRlcgorCQlpbXBsZW1lbnRzIElFZGl0aW5nRG9tYWluSXRlbVByb3ZpZGVyLCBJU3RydWN0dXJlZEl0ZW1Db250ZW50UHJvdmlkZXIsCisJCUlUcmVlSXRlbUNvbnRlbnRQcm92aWRlciwgSUl0ZW1MYWJlbFByb3ZpZGVyLCBJSXRlbVByb3BlcnR5U291cmNlIHsKKwkvKioKKwkgKiBUaGlzIGNvbnN0cnVjdHMgYW4gaW5zdGFuY2UgZnJvbSBhIGZhY3RvcnkgYW5kIGEgbm90aWZpZXIuIDwhLS0KKwkgKiBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAcGFyYW0gYWRhcHRlckZhY3RvcnkKKwkgKiAKKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFNFSVJMYWJlbEl0ZW1Qcm92aWRlcihBZGFwdGVyRmFjdG9yeSBhZGFwdGVyRmFjdG9yeSkgeworCQlzdXBlcihhZGFwdGVyRmFjdG9yeSk7CisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIHRoZSBwcm9wZXJ0eSBkZXNjcmlwdG9ycyBmb3IgdGhlIGFkYXB0ZWQgY2xhc3MuIDwhLS0KKwkgKiBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAcGFyYW0gb2JqZWN0CisJICogQHJldHVybgorCSAqIAorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgTGlzdDxJSXRlbVByb3BlcnR5RGVzY3JpcHRvcj4gZ2V0UHJvcGVydHlEZXNjcmlwdG9ycyhPYmplY3Qgb2JqZWN0KSB7CisJCWlmIChpdGVtUHJvcGVydHlEZXNjcmlwdG9ycyA9PSBudWxsKSB7CisJCQlzdXBlci5nZXRQcm9wZXJ0eURlc2NyaXB0b3JzKG9iamVjdCk7CisKKwkJfQorCQlyZXR1cm4gaXRlbVByb3BlcnR5RGVzY3JpcHRvcnM7CisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIHRoZSBsYWJlbCB0ZXh0IGZvciB0aGUgYWRhcHRlZCBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jCisJICogLS0+CisJICogCisJICogQHBhcmFtIG9iamVjdAorCSAqIEByZXR1cm4KKwkgKiAKKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIFN0cmluZyBnZXRUZXh0KE9iamVjdCBvYmplY3QpIHsKKwkJVVJJIGxhYmVsVmFsdWUgPSAoKFNFSVJMYWJlbClvYmplY3QpLmdldFVSSSgpOworCQlTdHJpbmcgbGFiZWwgPSBsYWJlbFZhbHVlID09IG51bGwgPyBudWxsIDogbGFiZWxWYWx1ZS50b1N0cmluZygpOworCQlyZXR1cm4gbGFiZWwgPT0gbnVsbCB8fCBsYWJlbC5sZW5ndGgoKSA9PSAwID8KKwkJCWdldFN0cmluZygiX1VJX1NFSVJMYWJlbF90eXBlIikgOiAvLyROT04tTkxTLTEkCisJCQlnZXRTdHJpbmcoIl9VSV9TRUlSTGFiZWxfdHlwZSIpICsgIiAiICsgbGFiZWw7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAorCX0KKworCS8qKgorCSAqIFRoaXMgaGFuZGxlcyBtb2RlbCBub3RpZmljYXRpb25zIGJ5IGNhbGxpbmcge0BsaW5rICN1cGRhdGVDaGlsZHJlbn0gdG8gdXBkYXRlIGFueSBjYWNoZWQKKwkgKiBjaGlsZHJlbiBhbmQgYnkgY3JlYXRpbmcgYSB2aWV3ZXIgbm90aWZpY2F0aW9uLCB3aGljaCBpdCBwYXNzZXMgdG8ge0BsaW5rICNmaXJlTm90aWZ5Q2hhbmdlZH0uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAcGFyYW0gbm90aWZpY2F0aW9uCisJICogCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIG5vdGlmeUNoYW5nZWQoTm90aWZpY2F0aW9uIG5vdGlmaWNhdGlvbikgeworCQl1cGRhdGVDaGlsZHJlbihub3RpZmljYXRpb24pOworCQlzdXBlci5ub3RpZnlDaGFuZ2VkKG5vdGlmaWNhdGlvbik7CisJfQorCisJLyoqCisJICogVGhpcyBhZGRzIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuZWRpdC5jb21tYW5kLkNvbW1hbmRQYXJhbWV0ZXJ9cyBkZXNjcmliaW5nIHRoZSBjaGlsZHJlbgorCSAqIHRoYXQgY2FuIGJlIGNyZWF0ZWQgdW5kZXIgdGhpcyBvYmplY3QuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYworCSAqIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgY29sbGVjdE5ld0NoaWxkRGVzY3JpcHRvcnMoQ29sbGVjdGlvbjxPYmplY3Q+IG5ld0NoaWxkRGVzY3JpcHRvcnMsIE9iamVjdCBvYmplY3QpIHsKKwkJc3VwZXIuY29sbGVjdE5ld0NoaWxkRGVzY3JpcHRvcnMobmV3Q2hpbGREZXNjcmlwdG9ycywgb2JqZWN0KTsKKwl9CisKK30KZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvc3RhbmRhcmQvcHJvdmlkZXIvU0VJUkxhYmVsVmFsdWVJdGVtUHJvdmlkZXIuamF2YSBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvc3RhbmRhcmQvcHJvdmlkZXIvU0VJUkxhYmVsVmFsdWVJdGVtUHJvdmlkZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zOGNmOTA4Ci0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9zdGFuZGFyZC9wcm92aWRlci9TRUlSTGFiZWxWYWx1ZUl0ZW1Qcm92aWRlci5qYXZhCkBAIC0wLDAgKzEsMTQ1IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5wcm92aWRlcjsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LkFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5Db21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklFZGl0aW5nRG9tYWluSXRlbVByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtTGFiZWxQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbVByb3BlcnR5RGVzY3JpcHRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbVByb3BlcnR5U291cmNlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklTdHJ1Y3R1cmVkSXRlbUNvbnRlbnRQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JVHJlZUl0ZW1Db250ZW50UHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSXRlbVByb3BlcnR5RGVzY3JpcHRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5WaWV3ZXJOb3RpZmljYXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlNFSVJMYWJlbFZhbHVlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZFBhY2thZ2U7CisKKy8qKgorICogVGhpcyBpcyB0aGUgaXRlbSBwcm92aWRlciBhZGFwdGVyIGZvciBhIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU0VJUkxhYmVsVmFsdWV9IG9iamVjdC4KKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgU0VJUkxhYmVsVmFsdWVJdGVtUHJvdmlkZXIgZXh0ZW5kcyBTSVJMYWJlbFZhbHVlSXRlbVByb3ZpZGVyCisJCWltcGxlbWVudHMgSUVkaXRpbmdEb21haW5JdGVtUHJvdmlkZXIsIElTdHJ1Y3R1cmVkSXRlbUNvbnRlbnRQcm92aWRlciwKKwkJSVRyZWVJdGVtQ29udGVudFByb3ZpZGVyLCBJSXRlbUxhYmVsUHJvdmlkZXIsIElJdGVtUHJvcGVydHlTb3VyY2UgeworCS8qKgorCSAqIFRoaXMgY29uc3RydWN0cyBhbiBpbnN0YW5jZSBmcm9tIGEgZmFjdG9yeSBhbmQgYSBub3RpZmllci4gPCEtLQorCSAqIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBwYXJhbSBhZGFwdGVyRmFjdG9yeQorCSAqIAorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgU0VJUkxhYmVsVmFsdWVJdGVtUHJvdmlkZXIoQWRhcHRlckZhY3RvcnkgYWRhcHRlckZhY3RvcnkpIHsKKwkJc3VwZXIoYWRhcHRlckZhY3RvcnkpOworCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyB0aGUgcHJvcGVydHkgZGVzY3JpcHRvcnMgZm9yIHRoZSBhZGFwdGVkIGNsYXNzLiA8IS0tCisJICogYmVnaW4tdXNlci1kb2MgLS0+CisJICogCisJICogQHBhcmFtIG9iamVjdAorCSAqIEByZXR1cm4KKwkgKiAKKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIExpc3Q8SUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I+IGdldFByb3BlcnR5RGVzY3JpcHRvcnMoT2JqZWN0IG9iamVjdCkgeworCQlpZiAoaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMgPT0gbnVsbCkgeworCQkJc3VwZXIuZ2V0UHJvcGVydHlEZXNjcmlwdG9ycyhvYmplY3QpOworCisJCQlhZGRFUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCk7CisJCX0KKwkJcmV0dXJuIGl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzOworCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyBhIHByb3BlcnR5IGRlc2NyaXB0b3IgZm9yIHRoZSBFIGZlYXR1cmUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYworCSAqIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgYWRkRVByb3BlcnR5RGVzY3JpcHRvcihPYmplY3Qgb2JqZWN0KSB7CisJCWl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzLmFkZAorCQkJKGNyZWF0ZUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IKKwkJCQkoKChDb21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5KWFkYXB0ZXJGYWN0b3J5KS5nZXRSb290QWRhcHRlckZhY3RvcnkoKSwKKwkJCQkgZ2V0UmVzb3VyY2VMb2NhdG9yKCksCisJCQkJIGdldFN0cmluZygiX1VJX1NFSVJMYWJlbFZhbHVlX2VfZmVhdHVyZSIpLCAvLyROT04tTkxTLTEkCisJCQkJIGdldFN0cmluZygiX1VJX1Byb3BlcnR5RGVzY3JpcHRvcl9kZXNjcmlwdGlvbiIsICJfVUlfU0VJUkxhYmVsVmFsdWVfZV9mZWF0dXJlIiwgIl9VSV9TRUlSTGFiZWxWYWx1ZV90eXBlIiksIC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJCAvLyROT04tTkxTLTMkCisJCQkJIFN0YW5kYXJkUGFja2FnZS5MaXRlcmFscy5TRUlSX0xBQkVMX1ZBTFVFX19FLAorCQkJCSB0cnVlLAorCQkJCSBmYWxzZSwKKwkJCQkgZmFsc2UsCisJCQkJIEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IuUkVBTF9WQUxVRV9JTUFHRSwKKwkJCQkgbnVsbCwKKwkJCQkgbnVsbCkpOworCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyB0aGUgbGFiZWwgdGV4dCBmb3IgdGhlIGFkYXB0ZWQgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYworCSAqIC0tPgorCSAqIAorCSAqIEBwYXJhbSBvYmplY3QKKwkgKiBAcmV0dXJuCisJICogCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBTdHJpbmcgZ2V0VGV4dChPYmplY3Qgb2JqZWN0KSB7CisJCVNFSVJMYWJlbFZhbHVlIHNlaXJMYWJlbFZhbHVlID0gKFNFSVJMYWJlbFZhbHVlKW9iamVjdDsKKwkJcmV0dXJuIGdldFN0cmluZygiX1VJX1NFSVJMYWJlbFZhbHVlX3R5cGUiKSArICIgIiArIHNlaXJMYWJlbFZhbHVlLmdldFBvcHVsYXRpb25Db3VudCgpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKKwl9CisKKwkvKioKKwkgKiBUaGlzIGhhbmRsZXMgbW9kZWwgbm90aWZpY2F0aW9ucyBieSBjYWxsaW5nIHtAbGluayAjdXBkYXRlQ2hpbGRyZW59IHRvIHVwZGF0ZSBhbnkgY2FjaGVkCisJICogY2hpbGRyZW4gYW5kIGJ5IGNyZWF0aW5nIGEgdmlld2VyIG5vdGlmaWNhdGlvbiwgd2hpY2ggaXQgcGFzc2VzIHRvIHtAbGluayAjZmlyZU5vdGlmeUNoYW5nZWR9LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogCisJICogQHBhcmFtIG5vdGlmaWNhdGlvbgorCSAqIAorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBub3RpZnlDaGFuZ2VkKE5vdGlmaWNhdGlvbiBub3RpZmljYXRpb24pIHsKKwkJdXBkYXRlQ2hpbGRyZW4obm90aWZpY2F0aW9uKTsKKworCQlzd2l0Y2ggKG5vdGlmaWNhdGlvbi5nZXRGZWF0dXJlSUQoU0VJUkxhYmVsVmFsdWUuY2xhc3MpKSB7CisJCQljYXNlIFN0YW5kYXJkUGFja2FnZS5TRUlSX0xBQkVMX1ZBTFVFX19FOgorCQkJCWZpcmVOb3RpZnlDaGFuZ2VkKG5ldyBWaWV3ZXJOb3RpZmljYXRpb24obm90aWZpY2F0aW9uLCBub3RpZmljYXRpb24uZ2V0Tm90aWZpZXIoKSwgZmFsc2UsIHRydWUpKTsKKwkJCQlyZXR1cm47CisJCX0KKwkJc3VwZXIubm90aWZ5Q2hhbmdlZChub3RpZmljYXRpb24pOworCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmVkaXQuY29tbWFuZC5Db21tYW5kUGFyYW1ldGVyfXMgZGVzY3JpYmluZyB0aGUgY2hpbGRyZW4KKwkgKiB0aGF0IGNhbiBiZSBjcmVhdGVkIHVuZGVyIHRoaXMgb2JqZWN0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MKKwkgKiAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIGNvbGxlY3ROZXdDaGlsZERlc2NyaXB0b3JzKENvbGxlY3Rpb248T2JqZWN0PiBuZXdDaGlsZERlc2NyaXB0b3JzLCBPYmplY3Qgb2JqZWN0KSB7CisJCXN1cGVyLmNvbGxlY3ROZXdDaGlsZERlc2NyaXB0b3JzKG5ld0NoaWxkRGVzY3JpcHRvcnMsIG9iamVjdCk7CisJfQorCit9CmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3N0YW5kYXJkL3Byb3ZpZGVyL1NJSW5mZWN0b3JJdGVtUHJvdmlkZXIuamF2YSBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvc3RhbmRhcmQvcHJvdmlkZXIvU0lJbmZlY3Rvckl0ZW1Qcm92aWRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQzZWY1MjkKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3N0YW5kYXJkL3Byb3ZpZGVyL1NJSW5mZWN0b3JJdGVtUHJvdmlkZXIuamF2YQpAQCAtMCwwICsxLDE2NSBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQucHJvdmlkZXI7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5BZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JRWRpdGluZ0RvbWFpbkl0ZW1Qcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbUxhYmVsUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1Qcm9wZXJ0eVNvdXJjZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JU3RydWN0dXJlZEl0ZW1Db250ZW50UHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVRyZWVJdGVtQ29udGVudFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuVmlld2VyTm90aWZpY2F0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TSUluZmVjdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZFBhY2thZ2U7CisKKy8qKgorICogVGhpcyBpcyB0aGUgaXRlbSBwcm92aWRlciBhZGFwdGVyIGZvciBhCisgKiB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlNJSW5mZWN0b3J9IG9iamVjdC4gPCEtLQorICogYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogCisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBTSUluZmVjdG9ySXRlbVByb3ZpZGVyIGV4dGVuZHMgU3RhbmRhcmRJbmZlY3Rvckl0ZW1Qcm92aWRlcgorCQlpbXBsZW1lbnRzIElFZGl0aW5nRG9tYWluSXRlbVByb3ZpZGVyLCBJU3RydWN0dXJlZEl0ZW1Db250ZW50UHJvdmlkZXIsCisJCUlUcmVlSXRlbUNvbnRlbnRQcm92aWRlciwgSUl0ZW1MYWJlbFByb3ZpZGVyLCBJSXRlbVByb3BlcnR5U291cmNlIHsKKwkvKioKKwkgKiBUaGlzIGNvbnN0cnVjdHMgYW4gaW5zdGFuY2UgZnJvbSBhIGZhY3RvcnkgYW5kIGEgbm90aWZpZXIuIDwhLS0KKwkgKiBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAcGFyYW0gYWRhcHRlckZhY3RvcnkKKwkgKiAKKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFNJSW5mZWN0b3JJdGVtUHJvdmlkZXIoQWRhcHRlckZhY3RvcnkgYWRhcHRlckZhY3RvcnkpIHsKKwkJc3VwZXIoYWRhcHRlckZhY3RvcnkpOworCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyB0aGUgcHJvcGVydHkgZGVzY3JpcHRvcnMgZm9yIHRoZSBhZGFwdGVkIGNsYXNzLiA8IS0tCisJICogYmVnaW4tdXNlci1kb2MgLS0+CisJICogCisJICogQHBhcmFtIG9iamVjdAorCSAqIEByZXR1cm4KKwkgKiAKKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIExpc3Q8SUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I+IGdldFByb3BlcnR5RGVzY3JpcHRvcnMoT2JqZWN0IG9iamVjdCkgeworCQlpZiAoaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMgPT0gbnVsbCkgeworCQkJc3VwZXIuZ2V0UHJvcGVydHlEZXNjcmlwdG9ycyhvYmplY3QpOworCisJCQlhZGRJbmZlY3Rpb3VzQ291bnRQcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0KTsKKwkJfQorCQlyZXR1cm4gaXRlbVByb3BlcnR5RGVzY3JpcHRvcnM7CisJfQorCisJLyoqCisJICogVGhpcyBhZGRzIGEgcHJvcGVydHkgZGVzY3JpcHRvciBmb3IgdGhlIEluZmVjdGlvdXMgQ291bnQgZmVhdHVyZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBhZGRJbmZlY3Rpb3VzQ291bnRQcm9wZXJ0eURlc2NyaXB0b3IoT2JqZWN0IG9iamVjdCkgeworCQlpdGVtUHJvcGVydHlEZXNjcmlwdG9ycy5hZGQKKwkJCShjcmVhdGVJdGVtUHJvcGVydHlEZXNjcmlwdG9yCisJCQkJKCgoQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSlhZGFwdGVyRmFjdG9yeSkuZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCksCisJCQkJIGdldFJlc291cmNlTG9jYXRvcigpLAorCQkJCSBnZXRTdHJpbmcoIl9VSV9TSUluZmVjdG9yX2luZmVjdGlvdXNDb3VudF9mZWF0dXJlIiksIC8vJE5PTi1OTFMtMSQKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfUHJvcGVydHlEZXNjcmlwdG9yX2Rlc2NyaXB0aW9uIiwgIl9VSV9TSUluZmVjdG9yX2luZmVjdGlvdXNDb3VudF9mZWF0dXJlIiwgIl9VSV9TSUluZmVjdG9yX3R5cGUiKSwgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkIC8vJE5PTi1OTFMtMyQKKwkJCQkgU3RhbmRhcmRQYWNrYWdlLkxpdGVyYWxzLlNJX0lORkVDVE9SX19JTkZFQ1RJT1VTX0NPVU5ULAorCQkJCSB0cnVlLAorCQkJCSBmYWxzZSwKKwkJCQkgZmFsc2UsCisJCQkJIEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IuUkVBTF9WQUxVRV9JTUFHRSwKKwkJCQkgbnVsbCwKKwkJCQkgbnVsbCkpOworCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyB0aGUgbGFiZWwgdGV4dCBmb3IgdGhlIGFkYXB0ZWQgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYworCSAqIC0tPgorCSAqIAorCSAqIEBwYXJhbSBvYmplY3QKKwkgKiBAcmV0dXJuCisJICogCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgU3RyaW5nIGdldFRleHQoT2JqZWN0IG9iamVjdCkgeworCQlyZXR1cm4gc3VwZXIuZ2V0VGV4dChvYmplY3QpOworCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyB0aGUgbGFiZWwgdGV4dCBmb3IgdGhlIGFkYXB0ZWQgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYworCSAqIC0tPgorCSAqIAorCSAqIEBwYXJhbSBvYmplY3QKKwkgKiBAcmV0dXJuCisJICogCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBTdHJpbmcgZ2V0VGV4dEdlbihPYmplY3Qgb2JqZWN0KSB7CisJCVN0cmluZyBsYWJlbCA9ICgoU0lJbmZlY3RvcilvYmplY3QpLmdldERpc2Vhc2VOYW1lKCk7CisJCXJldHVybiBsYWJlbCA9PSBudWxsIHx8IGxhYmVsLmxlbmd0aCgpID09IDAgPworCQkJZ2V0U3RyaW5nKCJfVUlfU0lJbmZlY3Rvcl90eXBlIikgOiAvLyROT04tTkxTLTEkCisJCQlnZXRTdHJpbmcoIl9VSV9TSUluZmVjdG9yX3R5cGUiKSArICIgIiArIGxhYmVsOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKKwl9CisJCisJLyoqCisJICogVGhpcyBoYW5kbGVzIG1vZGVsIG5vdGlmaWNhdGlvbnMgYnkgY2FsbGluZyB7QGxpbmsgI3VwZGF0ZUNoaWxkcmVufSB0byB1cGRhdGUgYW55IGNhY2hlZAorCSAqIGNoaWxkcmVuIGFuZCBieSBjcmVhdGluZyBhIHZpZXdlciBub3RpZmljYXRpb24sIHdoaWNoIGl0IHBhc3NlcyB0byB7QGxpbmsgI2ZpcmVOb3RpZnlDaGFuZ2VkfS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBwYXJhbSBub3RpZmljYXRpb24KKwkgKiAKKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgbm90aWZ5Q2hhbmdlZChOb3RpZmljYXRpb24gbm90aWZpY2F0aW9uKSB7CisJCXVwZGF0ZUNoaWxkcmVuKG5vdGlmaWNhdGlvbik7CisKKwkJc3dpdGNoIChub3RpZmljYXRpb24uZ2V0RmVhdHVyZUlEKFNJSW5mZWN0b3IuY2xhc3MpKSB7CisJCQljYXNlIFN0YW5kYXJkUGFja2FnZS5TSV9JTkZFQ1RPUl9fSU5GRUNUSU9VU19DT1VOVDoKKwkJCQlmaXJlTm90aWZ5Q2hhbmdlZChuZXcgVmlld2VyTm90aWZpY2F0aW9uKG5vdGlmaWNhdGlvbiwgbm90aWZpY2F0aW9uLmdldE5vdGlmaWVyKCksIGZhbHNlLCB0cnVlKSk7CisJCQkJcmV0dXJuOworCQl9CisJCXN1cGVyLm5vdGlmeUNoYW5nZWQobm90aWZpY2F0aW9uKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFkZHMge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lZGl0LmNvbW1hbmQuQ29tbWFuZFBhcmFtZXRlcn1zIGRlc2NyaWJpbmcgdGhlIGNoaWxkcmVuCisJICogdGhhdCBjYW4gYmUgY3JlYXRlZCB1bmRlciB0aGlzIG9iamVjdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jCisJICogLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgdm9pZCBjb2xsZWN0TmV3Q2hpbGREZXNjcmlwdG9ycyhDb2xsZWN0aW9uPE9iamVjdD4gbmV3Q2hpbGREZXNjcmlwdG9ycywgT2JqZWN0IG9iamVjdCkgeworCQlzdXBlci5jb2xsZWN0TmV3Q2hpbGREZXNjcmlwdG9ycyhuZXdDaGlsZERlc2NyaXB0b3JzLCBvYmplY3QpOworCX0KKworfQpkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9zdGFuZGFyZC9wcm92aWRlci9TSUl0ZW1Qcm92aWRlci5qYXZhIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9zdGFuZGFyZC9wcm92aWRlci9TSUl0ZW1Qcm92aWRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFmYzhkN2YKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3N0YW5kYXJkL3Byb3ZpZGVyL1NJSXRlbVByb3ZpZGVyLmphdmEKQEAgLTAsMCArMSwyNDEgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLnByb3ZpZGVyOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA2LCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOworaW1wb3J0IGphdmEudXRpbC5MaXN0OworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkNvbXBvc2VhYmxlQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUVkaXRpbmdEb21haW5JdGVtUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1MYWJlbFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtUHJvcGVydHlEZXNjcmlwdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtUHJvcGVydHlTb3VyY2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVN0cnVjdHVyZWRJdGVtQ29udGVudFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklUcmVlSXRlbUNvbnRlbnRQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JdGVtUHJvcGVydHlEZXNjcmlwdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLlZpZXdlck5vdGlmaWNhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU0k7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkUGFja2FnZTsKKworLyoqCisgKiBUaGlzIGlzIHRoZSBpdGVtIHByb3ZpZGVyIGFkYXB0ZXIgZm9yIGEKKyAqIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU0l9IG9iamVjdC4gPCEtLQorICogYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogCisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBTSUl0ZW1Qcm92aWRlciBleHRlbmRzIFN0YW5kYXJkRGlzZWFzZU1vZGVsSXRlbVByb3ZpZGVyIGltcGxlbWVudHMKKwkJSUVkaXRpbmdEb21haW5JdGVtUHJvdmlkZXIsIElTdHJ1Y3R1cmVkSXRlbUNvbnRlbnRQcm92aWRlciwKKwkJSVRyZWVJdGVtQ29udGVudFByb3ZpZGVyLCBJSXRlbUxhYmVsUHJvdmlkZXIsIElJdGVtUHJvcGVydHlTb3VyY2UgeworCS8qKgorCSAqIFRoaXMgY29uc3RydWN0cyBhbiBpbnN0YW5jZSBmcm9tIGEgZmFjdG9yeSBhbmQgYSBub3RpZmllci4gPCEtLQorCSAqIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBwYXJhbSBhZGFwdGVyRmFjdG9yeQorCSAqIAorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgU0lJdGVtUHJvdmlkZXIoQWRhcHRlckZhY3RvcnkgYWRhcHRlckZhY3RvcnkpIHsKKwkJc3VwZXIoYWRhcHRlckZhY3RvcnkpOworCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyB0aGUgcHJvcGVydHkgZGVzY3JpcHRvcnMgZm9yIHRoZSBhZGFwdGVkIGNsYXNzLiA8IS0tCisJICogYmVnaW4tdXNlci1kb2MgLS0+CisJICogCisJICogQHBhcmFtIG9iamVjdAorCSAqIEByZXR1cm4KKwkgKiAKKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCXB1YmxpYyBMaXN0IGdldFByb3BlcnR5RGVzY3JpcHRvcnMoT2JqZWN0IG9iamVjdCkgeworCQlpZiAoaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMgPT0gbnVsbCkgeworCQkJc3VwZXIuZ2V0UHJvcGVydHlEZXNjcmlwdG9ycyhvYmplY3QpOworCQkJCisJCQlhZGRUcmFuc21pc3Npb25SYXRlUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCk7CisJCQlhZGROb25MaW5lYXJpdHlDb2VmZmljaWVudFByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QpOworCQkJYWRkUmVjb3ZlcnlSYXRlUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCk7CisJCQlhZGRJbmZlY3Rpb3VzTW9ydGFsaXR5UmF0ZVByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QpOworCQkJLy8gYWRkUGh5c2ljYWxseUFkamFjZW50SW5mZWN0aW91c1Byb3BvcnRpb25Qcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0KTsgRGVwcmVjYXRlZCEKKwkJfQorCQlyZXR1cm4gaXRlbVByb3BlcnR5RGVzY3JpcHRvcnM7CisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIHRoZSBwcm9wZXJ0eSBkZXNjcmlwdG9ycyBmb3IgdGhlIGFkYXB0ZWQgY2xhc3MuIDwhLS0KKwkgKiBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAcGFyYW0gb2JqZWN0CisJICogQHJldHVybgorCSAqIAorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgTGlzdDxJSXRlbVByb3BlcnR5RGVzY3JpcHRvcj4gZ2V0UHJvcGVydHlEZXNjcmlwdG9yc0dlbihPYmplY3Qgb2JqZWN0KSB7CisJCWlmIChpdGVtUHJvcGVydHlEZXNjcmlwdG9ycyA9PSBudWxsKSB7CisJCQlzdXBlci5nZXRQcm9wZXJ0eURlc2NyaXB0b3JzKG9iamVjdCk7CisKKwkJCWFkZFRyYW5zbWlzc2lvblJhdGVQcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0KTsKKwkJCWFkZE5vbkxpbmVhcml0eUNvZWZmaWNpZW50UHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCk7CisJCQlhZGRSZWNvdmVyeVJhdGVQcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0KTsKKwkJCWFkZEluZmVjdGlvdXNNb3J0YWxpdHlSYXRlUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCk7CisJCX0KKwkJcmV0dXJuIGl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzOworCX0KKwkKKwkvKioKKwkgKiBUaGlzIGFkZHMgYSBwcm9wZXJ0eSBkZXNjcmlwdG9yIGZvciB0aGUgVHJhbnNtaXNzaW9uIFJhdGUgZmVhdHVyZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBhZGRUcmFuc21pc3Npb25SYXRlUHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdCBvYmplY3QpIHsKKwkJaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMuYWRkCisJCQkoY3JlYXRlSXRlbVByb3BlcnR5RGVzY3JpcHRvcgorCQkJCSgoKENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnkpYWRhcHRlckZhY3RvcnkpLmdldFJvb3RBZGFwdGVyRmFjdG9yeSgpLAorCQkJCSBnZXRSZXNvdXJjZUxvY2F0b3IoKSwKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfU0lfdHJhbnNtaXNzaW9uUmF0ZV9mZWF0dXJlIiksIC8vJE5PTi1OTFMtMSQKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfUHJvcGVydHlEZXNjcmlwdG9yX2Rlc2NyaXB0aW9uIiwgIl9VSV9TSV90cmFuc21pc3Npb25SYXRlX2ZlYXR1cmUiLCAiX1VJX1NJX3R5cGUiKSwgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkIC8vJE5PTi1OTFMtMyQKKwkJCQkgU3RhbmRhcmRQYWNrYWdlLkxpdGVyYWxzLlNJX19UUkFOU01JU1NJT05fUkFURSwKKwkJCQkgdHJ1ZSwKKwkJCQkgZmFsc2UsCisJCQkJIGZhbHNlLAorCQkJCSBJdGVtUHJvcGVydHlEZXNjcmlwdG9yLlJFQUxfVkFMVUVfSU1BR0UsCisJCQkJIG51bGwsCisJCQkJIG51bGwpKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFkZHMgYSBwcm9wZXJ0eSBkZXNjcmlwdG9yIGZvciB0aGUgUmVjb3ZlcnkgUmF0ZSBmZWF0dXJlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIGFkZFJlY292ZXJ5UmF0ZVByb3BlcnR5RGVzY3JpcHRvcihPYmplY3Qgb2JqZWN0KSB7CisJCWl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzLmFkZAorCQkJKGNyZWF0ZUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IKKwkJCQkoKChDb21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5KWFkYXB0ZXJGYWN0b3J5KS5nZXRSb290QWRhcHRlckZhY3RvcnkoKSwKKwkJCQkgZ2V0UmVzb3VyY2VMb2NhdG9yKCksCisJCQkJIGdldFN0cmluZygiX1VJX1NJX3JlY292ZXJ5UmF0ZV9mZWF0dXJlIiksIC8vJE5PTi1OTFMtMSQKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfUHJvcGVydHlEZXNjcmlwdG9yX2Rlc2NyaXB0aW9uIiwgIl9VSV9TSV9yZWNvdmVyeVJhdGVfZmVhdHVyZSIsICJfVUlfU0lfdHlwZSIpLCAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQgLy8kTk9OLU5MUy0zJAorCQkJCSBTdGFuZGFyZFBhY2thZ2UuTGl0ZXJhbHMuU0lfX1JFQ09WRVJZX1JBVEUsCisJCQkJIHRydWUsCisJCQkJIGZhbHNlLAorCQkJCSBmYWxzZSwKKwkJCQkgSXRlbVByb3BlcnR5RGVzY3JpcHRvci5SRUFMX1ZBTFVFX0lNQUdFLAorCQkJCSBudWxsLAorCQkJCSBudWxsKSk7CisJfQorCisJLyoqCisJICogVGhpcyBhZGRzIGEgcHJvcGVydHkgZGVzY3JpcHRvciBmb3IgdGhlIEluZmVjdGlvdXMgTW9ydGFsaXR5IFJhdGUgZmVhdHVyZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBhZGRJbmZlY3Rpb3VzTW9ydGFsaXR5UmF0ZVByb3BlcnR5RGVzY3JpcHRvcihPYmplY3Qgb2JqZWN0KSB7CisJCWl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzLmFkZAorCQkJKGNyZWF0ZUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IKKwkJCQkoKChDb21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5KWFkYXB0ZXJGYWN0b3J5KS5nZXRSb290QWRhcHRlckZhY3RvcnkoKSwKKwkJCQkgZ2V0UmVzb3VyY2VMb2NhdG9yKCksCisJCQkJIGdldFN0cmluZygiX1VJX1NJX2luZmVjdGlvdXNNb3J0YWxpdHlSYXRlX2ZlYXR1cmUiKSwgLy8kTk9OLU5MUy0xJAorCQkJCSBnZXRTdHJpbmcoIl9VSV9Qcm9wZXJ0eURlc2NyaXB0b3JfZGVzY3JpcHRpb24iLCAiX1VJX1NJX2luZmVjdGlvdXNNb3J0YWxpdHlSYXRlX2ZlYXR1cmUiLCAiX1VJX1NJX3R5cGUiKSwgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkIC8vJE5PTi1OTFMtMyQKKwkJCQkgU3RhbmRhcmRQYWNrYWdlLkxpdGVyYWxzLlNJX19JTkZFQ1RJT1VTX01PUlRBTElUWV9SQVRFLAorCQkJCSB0cnVlLAorCQkJCSBmYWxzZSwKKwkJCQkgZmFsc2UsCisJCQkJIEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IuUkVBTF9WQUxVRV9JTUFHRSwKKwkJCQkgbnVsbCwKKwkJCQkgbnVsbCkpOworCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyBhIHByb3BlcnR5IGRlc2NyaXB0b3IgZm9yIHRoZSBOb24gTGluZWFyaXR5IENvZWZmaWNpZW50IGZlYXR1cmUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgYWRkTm9uTGluZWFyaXR5Q29lZmZpY2llbnRQcm9wZXJ0eURlc2NyaXB0b3IoT2JqZWN0IG9iamVjdCkgeworCQlpdGVtUHJvcGVydHlEZXNjcmlwdG9ycy5hZGQKKwkJCShjcmVhdGVJdGVtUHJvcGVydHlEZXNjcmlwdG9yCisJCQkJKCgoQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSlhZGFwdGVyRmFjdG9yeSkuZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCksCisJCQkJIGdldFJlc291cmNlTG9jYXRvcigpLAorCQkJCSBnZXRTdHJpbmcoIl9VSV9TSV9ub25MaW5lYXJpdHlDb2VmZmljaWVudF9mZWF0dXJlIiksIC8vJE5PTi1OTFMtMSQKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfUHJvcGVydHlEZXNjcmlwdG9yX2Rlc2NyaXB0aW9uIiwgIl9VSV9TSV9ub25MaW5lYXJpdHlDb2VmZmljaWVudF9mZWF0dXJlIiwgIl9VSV9TSV90eXBlIiksIC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJCAvLyROT04tTkxTLTMkCisJCQkJIFN0YW5kYXJkUGFja2FnZS5MaXRlcmFscy5TSV9fTk9OX0xJTkVBUklUWV9DT0VGRklDSUVOVCwKKwkJCQkgdHJ1ZSwKKwkJCQkgZmFsc2UsCisJCQkJIGZhbHNlLAorCQkJCSBJdGVtUHJvcGVydHlEZXNjcmlwdG9yLlJFQUxfVkFMVUVfSU1BR0UsCisJCQkJIG51bGwsCisJCQkJIG51bGwpKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgdGhlIGxhYmVsIHRleHQgZm9yIHRoZSBhZGFwdGVkIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MKKwkgKiAtLT4KKwkgKiAKKwkgKiBAcGFyYW0gb2JqZWN0CisJICogQHJldHVybgorCSAqIAorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIFN0cmluZyBnZXRUZXh0KE9iamVjdCBvYmplY3QpIHsKKwkJcmV0dXJuIHN1cGVyLmdldFRleHQob2JqZWN0KTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGhhbmRsZXMgbW9kZWwgbm90aWZpY2F0aW9ucyBieSBjYWxsaW5nIHtAbGluayAjdXBkYXRlQ2hpbGRyZW59IHRvIHVwZGF0ZSBhbnkgY2FjaGVkCisJICogY2hpbGRyZW4gYW5kIGJ5IGNyZWF0aW5nIGEgdmlld2VyIG5vdGlmaWNhdGlvbiwgd2hpY2ggaXQgcGFzc2VzIHRvIHtAbGluayAjZmlyZU5vdGlmeUNoYW5nZWR9LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogCisJICogQHBhcmFtIG5vdGlmaWNhdGlvbgorCSAqIAorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBub3RpZnlDaGFuZ2VkKE5vdGlmaWNhdGlvbiBub3RpZmljYXRpb24pIHsKKwkJdXBkYXRlQ2hpbGRyZW4obm90aWZpY2F0aW9uKTsKKworCQlzd2l0Y2ggKG5vdGlmaWNhdGlvbi5nZXRGZWF0dXJlSUQoU0kuY2xhc3MpKSB7CisJCQljYXNlIFN0YW5kYXJkUGFja2FnZS5TSV9fVFJBTlNNSVNTSU9OX1JBVEU6CisJCQljYXNlIFN0YW5kYXJkUGFja2FnZS5TSV9fTk9OX0xJTkVBUklUWV9DT0VGRklDSUVOVDoKKwkJCWNhc2UgU3RhbmRhcmRQYWNrYWdlLlNJX19SRUNPVkVSWV9SQVRFOgorCQkJY2FzZSBTdGFuZGFyZFBhY2thZ2UuU0lfX0lORkVDVElPVVNfTU9SVEFMSVRZX1JBVEU6CisJCQkJZmlyZU5vdGlmeUNoYW5nZWQobmV3IFZpZXdlck5vdGlmaWNhdGlvbihub3RpZmljYXRpb24sIG5vdGlmaWNhdGlvbi5nZXROb3RpZmllcigpLCBmYWxzZSwgdHJ1ZSkpOworCQkJCXJldHVybjsKKwkJfQorCQlzdXBlci5ub3RpZnlDaGFuZ2VkKG5vdGlmaWNhdGlvbik7CisJfQorCisJLyoqCisJICogVGhpcyBhZGRzIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuZWRpdC5jb21tYW5kLkNvbW1hbmRQYXJhbWV0ZXJ9cyBkZXNjcmliaW5nIHRoZSBjaGlsZHJlbgorCSAqIHRoYXQgY2FuIGJlIGNyZWF0ZWQgdW5kZXIgdGhpcyBvYmplY3QuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYworCSAqIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgY29sbGVjdE5ld0NoaWxkRGVzY3JpcHRvcnMoQ29sbGVjdGlvbjxPYmplY3Q+IG5ld0NoaWxkRGVzY3JpcHRvcnMsIE9iamVjdCBvYmplY3QpIHsKKwkJc3VwZXIuY29sbGVjdE5ld0NoaWxkRGVzY3JpcHRvcnMobmV3Q2hpbGREZXNjcmlwdG9ycywgb2JqZWN0KTsKKwl9CisKK30KZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvc3RhbmRhcmQvcHJvdmlkZXIvU0lMYWJlbEl0ZW1Qcm92aWRlci5qYXZhIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9zdGFuZGFyZC9wcm92aWRlci9TSUxhYmVsSXRlbVByb3ZpZGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTliOTgxYQotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvc3RhbmRhcmQvcHJvdmlkZXIvU0lMYWJlbEl0ZW1Qcm92aWRlci5qYXZhCkBAIC0wLDAgKzEsMTE5IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5wcm92aWRlcjsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LkFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuVVJJOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkNvbXBvc2VhYmxlQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUVkaXRpbmdEb21haW5JdGVtUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1MYWJlbFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtUHJvcGVydHlEZXNjcmlwdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtUHJvcGVydHlTb3VyY2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVN0cnVjdHVyZWRJdGVtQ29udGVudFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklUcmVlSXRlbUNvbnRlbnRQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU0lMYWJlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmRQYWNrYWdlOworCisvKioKKyAqIFRoaXMgaXMgdGhlIGl0ZW0gcHJvdmlkZXIgYWRhcHRlciBmb3IgYQorICoge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TSUxhYmVsfSBvYmplY3QuIDwhLS0KKyAqIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIAorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgU0lMYWJlbEl0ZW1Qcm92aWRlciBleHRlbmRzIFN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWxJdGVtUHJvdmlkZXIKKwkJaW1wbGVtZW50cyBJRWRpdGluZ0RvbWFpbkl0ZW1Qcm92aWRlciwgSVN0cnVjdHVyZWRJdGVtQ29udGVudFByb3ZpZGVyLAorCQlJVHJlZUl0ZW1Db250ZW50UHJvdmlkZXIsIElJdGVtTGFiZWxQcm92aWRlciwgSUl0ZW1Qcm9wZXJ0eVNvdXJjZSB7CisJLyoqCisJICogVGhpcyBjb25zdHJ1Y3RzIGFuIGluc3RhbmNlIGZyb20gYSBmYWN0b3J5IGFuZCBhIG5vdGlmaWVyLiA8IS0tCisJICogYmVnaW4tdXNlci1kb2MgLS0+CisJICogCisJICogQHBhcmFtIGFkYXB0ZXJGYWN0b3J5CisJICogCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBTSUxhYmVsSXRlbVByb3ZpZGVyKEFkYXB0ZXJGYWN0b3J5IGFkYXB0ZXJGYWN0b3J5KSB7CisJCXN1cGVyKGFkYXB0ZXJGYWN0b3J5KTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgdGhlIHByb3BlcnR5IGRlc2NyaXB0b3JzIGZvciB0aGUgYWRhcHRlZCBjbGFzcy4gPCEtLQorCSAqIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBwYXJhbSBvYmplY3QKKwkgKiBAcmV0dXJuCisJICogCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBMaXN0PElJdGVtUHJvcGVydHlEZXNjcmlwdG9yPiBnZXRQcm9wZXJ0eURlc2NyaXB0b3JzKE9iamVjdCBvYmplY3QpIHsKKwkJaWYgKGl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzID09IG51bGwpIHsKKwkJCXN1cGVyLmdldFByb3BlcnR5RGVzY3JpcHRvcnMob2JqZWN0KTsKKworCQl9CisJCXJldHVybiBpdGVtUHJvcGVydHlEZXNjcmlwdG9yczsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgdGhlIGxhYmVsIHRleHQgZm9yIHRoZSBhZGFwdGVkIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogCisJICogQHBhcmFtIG9iamVjdAorCSAqIEByZXR1cm4KKwkgKiAKKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIFN0cmluZyBnZXRUZXh0KE9iamVjdCBvYmplY3QpIHsKKwkJVVJJIGxhYmVsVmFsdWUgPSAoKFNJTGFiZWwpb2JqZWN0KS5nZXRVUkkoKTsKKwkJU3RyaW5nIGxhYmVsID0gbGFiZWxWYWx1ZSA9PSBudWxsID8gbnVsbCA6IGxhYmVsVmFsdWUudG9TdHJpbmcoKTsKKwkJcmV0dXJuIGxhYmVsID09IG51bGwgfHwgbGFiZWwubGVuZ3RoKCkgPT0gMCA/CisJCQlnZXRTdHJpbmcoIl9VSV9TSUxhYmVsX3R5cGUiKSA6IC8vJE5PTi1OTFMtMSQKKwkJCWdldFN0cmluZygiX1VJX1NJTGFiZWxfdHlwZSIpICsgIiAiICsgbGFiZWw7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAorCX0KKworCS8qKgorCSAqIFRoaXMgaGFuZGxlcyBtb2RlbCBub3RpZmljYXRpb25zIGJ5IGNhbGxpbmcge0BsaW5rICN1cGRhdGVDaGlsZHJlbn0gdG8gdXBkYXRlIGFueSBjYWNoZWQKKwkgKiBjaGlsZHJlbiBhbmQgYnkgY3JlYXRpbmcgYSB2aWV3ZXIgbm90aWZpY2F0aW9uLCB3aGljaCBpdCBwYXNzZXMgdG8ge0BsaW5rICNmaXJlTm90aWZ5Q2hhbmdlZH0uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAcGFyYW0gbm90aWZpY2F0aW9uCisJICogCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIG5vdGlmeUNoYW5nZWQoTm90aWZpY2F0aW9uIG5vdGlmaWNhdGlvbikgeworCQl1cGRhdGVDaGlsZHJlbihub3RpZmljYXRpb24pOworCQlzdXBlci5ub3RpZnlDaGFuZ2VkKG5vdGlmaWNhdGlvbik7CisJfQorCisJLyoqCisJICogVGhpcyBhZGRzIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuZWRpdC5jb21tYW5kLkNvbW1hbmRQYXJhbWV0ZXJ9cyBkZXNjcmliaW5nIHRoZSBjaGlsZHJlbgorCSAqIHRoYXQgY2FuIGJlIGNyZWF0ZWQgdW5kZXIgdGhpcyBvYmplY3QuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYworCSAqIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgY29sbGVjdE5ld0NoaWxkRGVzY3JpcHRvcnMoQ29sbGVjdGlvbjxPYmplY3Q+IG5ld0NoaWxkRGVzY3JpcHRvcnMsIE9iamVjdCBvYmplY3QpIHsKKwkJc3VwZXIuY29sbGVjdE5ld0NoaWxkRGVzY3JpcHRvcnMobmV3Q2hpbGREZXNjcmlwdG9ycywgb2JqZWN0KTsKKwl9CisKK30KZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvc3RhbmRhcmQvcHJvdmlkZXIvU0lMYWJlbFZhbHVlSXRlbVByb3ZpZGVyLmphdmEgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3N0YW5kYXJkL3Byb3ZpZGVyL1NJTGFiZWxWYWx1ZUl0ZW1Qcm92aWRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ0N2U0MzQKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3N0YW5kYXJkL3Byb3ZpZGVyL1NJTGFiZWxWYWx1ZUl0ZW1Qcm92aWRlci5qYXZhCkBAIC0wLDAgKzEsMTQ4IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5wcm92aWRlcjsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LkFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5Db21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklFZGl0aW5nRG9tYWluSXRlbVByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtTGFiZWxQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbVByb3BlcnR5RGVzY3JpcHRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbVByb3BlcnR5U291cmNlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklTdHJ1Y3R1cmVkSXRlbUNvbnRlbnRQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JVHJlZUl0ZW1Db250ZW50UHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSXRlbVByb3BlcnR5RGVzY3JpcHRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5WaWV3ZXJOb3RpZmljYXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlNJTGFiZWxWYWx1ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmRQYWNrYWdlOworCisvKioKKyAqIFRoaXMgaXMgdGhlIGl0ZW0gcHJvdmlkZXIgYWRhcHRlciBmb3IgYQorICoge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TSUxhYmVsVmFsdWV9IG9iamVjdC4gPCEtLQorICogYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogCisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBTSUxhYmVsVmFsdWVJdGVtUHJvdmlkZXIgZXh0ZW5kcworCQlTdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsVmFsdWVJdGVtUHJvdmlkZXIgaW1wbGVtZW50cworCQlJRWRpdGluZ0RvbWFpbkl0ZW1Qcm92aWRlciwgSVN0cnVjdHVyZWRJdGVtQ29udGVudFByb3ZpZGVyLAorCQlJVHJlZUl0ZW1Db250ZW50UHJvdmlkZXIsIElJdGVtTGFiZWxQcm92aWRlciwgSUl0ZW1Qcm9wZXJ0eVNvdXJjZSB7CisJLyoqCisJICogVGhpcyBjb25zdHJ1Y3RzIGFuIGluc3RhbmNlIGZyb20gYSBmYWN0b3J5IGFuZCBhIG5vdGlmaWVyLiA8IS0tCisJICogYmVnaW4tdXNlci1kb2MgLS0+CisJICogCisJICogQHBhcmFtIGFkYXB0ZXJGYWN0b3J5CisJICogCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBTSUxhYmVsVmFsdWVJdGVtUHJvdmlkZXIoQWRhcHRlckZhY3RvcnkgYWRhcHRlckZhY3RvcnkpIHsKKwkJc3VwZXIoYWRhcHRlckZhY3RvcnkpOworCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyB0aGUgcHJvcGVydHkgZGVzY3JpcHRvcnMgZm9yIHRoZSBhZGFwdGVkIGNsYXNzLiA8IS0tCisJICogYmVnaW4tdXNlci1kb2MgLS0+CisJICogCisJICogQHBhcmFtIG9iamVjdAorCSAqIEByZXR1cm4KKwkgKiAKKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIExpc3Q8SUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I+IGdldFByb3BlcnR5RGVzY3JpcHRvcnMoT2JqZWN0IG9iamVjdCkgeworCQlpZiAoaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMgPT0gbnVsbCkgeworCQkJc3VwZXIuZ2V0UHJvcGVydHlEZXNjcmlwdG9ycyhvYmplY3QpOworCisJCQlhZGRJUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCk7CisJCX0KKwkJcmV0dXJuIGl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzOworCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyBhIHByb3BlcnR5IGRlc2NyaXB0b3IgZm9yIHRoZSBJIGZlYXR1cmUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYworCSAqIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgYWRkSVByb3BlcnR5RGVzY3JpcHRvcihPYmplY3Qgb2JqZWN0KSB7CisJCWl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzLmFkZAorCQkJKGNyZWF0ZUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IKKwkJCQkoKChDb21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5KWFkYXB0ZXJGYWN0b3J5KS5nZXRSb290QWRhcHRlckZhY3RvcnkoKSwKKwkJCQkgZ2V0UmVzb3VyY2VMb2NhdG9yKCksCisJCQkJIGdldFN0cmluZygiX1VJX1NJTGFiZWxWYWx1ZV9pX2ZlYXR1cmUiKSwgLy8kTk9OLU5MUy0xJAorCQkJCSBnZXRTdHJpbmcoIl9VSV9Qcm9wZXJ0eURlc2NyaXB0b3JfZGVzY3JpcHRpb24iLCAiX1VJX1NJTGFiZWxWYWx1ZV9pX2ZlYXR1cmUiLCAiX1VJX1NJTGFiZWxWYWx1ZV90eXBlIiksIC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJCAvLyROT04tTkxTLTMkCisJCQkJIFN0YW5kYXJkUGFja2FnZS5MaXRlcmFscy5TSV9MQUJFTF9WQUxVRV9fSSwKKwkJCQkgdHJ1ZSwKKwkJCQkgZmFsc2UsCisJCQkJIGZhbHNlLAorCQkJCSBJdGVtUHJvcGVydHlEZXNjcmlwdG9yLlJFQUxfVkFMVUVfSU1BR0UsCisJCQkJIG51bGwsCisJCQkJIG51bGwpKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgdGhlIGxhYmVsIHRleHQgZm9yIHRoZSBhZGFwdGVkIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MKKwkgKiAtLT4KKwkgKiAKKwkgKiBAcGFyYW0gb2JqZWN0CisJICogQHJldHVybgorCSAqIAorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgU3RyaW5nIGdldFRleHQoT2JqZWN0IG9iamVjdCkgeworCQlTSUxhYmVsVmFsdWUgc2lMYWJlbFZhbHVlID0gKFNJTGFiZWxWYWx1ZSlvYmplY3Q7CisJCXJldHVybiBnZXRTdHJpbmcoIl9VSV9TSUxhYmVsVmFsdWVfdHlwZSIpICsgIiAiICsgc2lMYWJlbFZhbHVlLmdldFBvcHVsYXRpb25Db3VudCgpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKKwl9CisKKwkvKioKKwkgKiBUaGlzIGhhbmRsZXMgbW9kZWwgbm90aWZpY2F0aW9ucyBieSBjYWxsaW5nIHtAbGluayAjdXBkYXRlQ2hpbGRyZW59IHRvIHVwZGF0ZSBhbnkgY2FjaGVkCisJICogY2hpbGRyZW4gYW5kIGJ5IGNyZWF0aW5nIGEgdmlld2VyIG5vdGlmaWNhdGlvbiwgd2hpY2ggaXQgcGFzc2VzIHRvIHtAbGluayAjZmlyZU5vdGlmeUNoYW5nZWR9LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogCisJICogQHBhcmFtIG5vdGlmaWNhdGlvbgorCSAqIAorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBub3RpZnlDaGFuZ2VkKE5vdGlmaWNhdGlvbiBub3RpZmljYXRpb24pIHsKKwkJdXBkYXRlQ2hpbGRyZW4obm90aWZpY2F0aW9uKTsKKworCQlzd2l0Y2ggKG5vdGlmaWNhdGlvbi5nZXRGZWF0dXJlSUQoU0lMYWJlbFZhbHVlLmNsYXNzKSkgeworCQkJY2FzZSBTdGFuZGFyZFBhY2thZ2UuU0lfTEFCRUxfVkFMVUVfX0k6CisJCQkJZmlyZU5vdGlmeUNoYW5nZWQobmV3IFZpZXdlck5vdGlmaWNhdGlvbihub3RpZmljYXRpb24sIG5vdGlmaWNhdGlvbi5nZXROb3RpZmllcigpLCBmYWxzZSwgdHJ1ZSkpOworCQkJCXJldHVybjsKKwkJfQorCQlzdXBlci5ub3RpZnlDaGFuZ2VkKG5vdGlmaWNhdGlvbik7CisJfQorCisJLyoqCisJICogVGhpcyBhZGRzIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuZWRpdC5jb21tYW5kLkNvbW1hbmRQYXJhbWV0ZXJ9cyBkZXNjcmliaW5nIHRoZSBjaGlsZHJlbgorCSAqIHRoYXQgY2FuIGJlIGNyZWF0ZWQgdW5kZXIgdGhpcyBvYmplY3QuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYworCSAqIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgY29sbGVjdE5ld0NoaWxkRGVzY3JpcHRvcnMoQ29sbGVjdGlvbjxPYmplY3Q+IG5ld0NoaWxkRGVzY3JpcHRvcnMsIE9iamVjdCBvYmplY3QpIHsKKwkJc3VwZXIuY29sbGVjdE5ld0NoaWxkRGVzY3JpcHRvcnMobmV3Q2hpbGREZXNjcmlwdG9ycywgb2JqZWN0KTsKKwl9CisKK30KZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvc3RhbmRhcmQvcHJvdmlkZXIvU0lSSW5vY3VsYXRvckl0ZW1Qcm92aWRlci5qYXZhIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9zdGFuZGFyZC9wcm92aWRlci9TSVJJbm9jdWxhdG9ySXRlbVByb3ZpZGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWIzYzU0MwotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvc3RhbmRhcmQvcHJvdmlkZXIvU0lSSW5vY3VsYXRvckl0ZW1Qcm92aWRlci5qYXZhCkBAIC0wLDAgKzEsMTg1IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5wcm92aWRlcjsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOworaW1wb3J0IGphdmEudXRpbC5MaXN0OworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkNvbXBvc2VhYmxlQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUVkaXRpbmdEb21haW5JdGVtUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1MYWJlbFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtUHJvcGVydHlEZXNjcmlwdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtUHJvcGVydHlTb3VyY2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVN0cnVjdHVyZWRJdGVtQ29udGVudFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklUcmVlSXRlbUNvbnRlbnRQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JdGVtUHJvcGVydHlEZXNjcmlwdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLlZpZXdlck5vdGlmaWNhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU0lSSW5vY3VsYXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmRQYWNrYWdlOworCisvKioKKyAqIFRoaXMgaXMgdGhlIGl0ZW0gcHJvdmlkZXIgYWRhcHRlciBmb3IgYSB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlNJUklub2N1bGF0b3J9IG9iamVjdC4KKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIFNJUklub2N1bGF0b3JJdGVtUHJvdmlkZXIKKwlleHRlbmRzIFNJSW5mZWN0b3JJdGVtUHJvdmlkZXIKKwlpbXBsZW1lbnRzCisJCUlFZGl0aW5nRG9tYWluSXRlbVByb3ZpZGVyLAorCQlJU3RydWN0dXJlZEl0ZW1Db250ZW50UHJvdmlkZXIsCisJCUlUcmVlSXRlbUNvbnRlbnRQcm92aWRlciwKKwkJSUl0ZW1MYWJlbFByb3ZpZGVyLAorCQlJSXRlbVByb3BlcnR5U291cmNlIHsKKwkvKioKKwkgKiBUaGlzIGNvbnN0cnVjdHMgYW4gaW5zdGFuY2UgZnJvbSBhIGZhY3RvcnkgYW5kIGEgbm90aWZpZXIuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFNJUklub2N1bGF0b3JJdGVtUHJvdmlkZXIoQWRhcHRlckZhY3RvcnkgYWRhcHRlckZhY3RvcnkpIHsKKwkJc3VwZXIoYWRhcHRlckZhY3RvcnkpOworCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyB0aGUgcHJvcGVydHkgZGVzY3JpcHRvcnMgZm9yIHRoZSBhZGFwdGVkIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBMaXN0PElJdGVtUHJvcGVydHlEZXNjcmlwdG9yPiBnZXRQcm9wZXJ0eURlc2NyaXB0b3JzKE9iamVjdCBvYmplY3QpIHsKKwkJaWYgKGl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzID09IG51bGwpIHsKKwkJCXN1cGVyLmdldFByb3BlcnR5RGVzY3JpcHRvcnMob2JqZWN0KTsKKworCQkJYWRkSW5vY3VsYXRlZFBlcmNlbnRhZ2VQcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0KTsKKwkJCWFkZElub2N1bGF0ZVBlcmNlbnRhZ2VQcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0KTsKKwkJfQorCQlyZXR1cm4gaXRlbVByb3BlcnR5RGVzY3JpcHRvcnM7CisJfQorCisJLyoqCisJICogVGhpcyBhZGRzIGEgcHJvcGVydHkgZGVzY3JpcHRvciBmb3IgdGhlIElub2N1bGF0ZWQgUGVyY2VudGFnZSBmZWF0dXJlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIGFkZElub2N1bGF0ZWRQZXJjZW50YWdlUHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdCBvYmplY3QpIHsKKwkJaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMuYWRkCisJCQkoY3JlYXRlSXRlbVByb3BlcnR5RGVzY3JpcHRvcgorCQkJCSgoKENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnkpYWRhcHRlckZhY3RvcnkpLmdldFJvb3RBZGFwdGVyRmFjdG9yeSgpLAorCQkJCSBnZXRSZXNvdXJjZUxvY2F0b3IoKSwKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfU0lSSW5vY3VsYXRvcl9pbm9jdWxhdGVkUGVyY2VudGFnZV9mZWF0dXJlIiksIC8vJE5PTi1OTFMtMSQKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfUHJvcGVydHlEZXNjcmlwdG9yX2Rlc2NyaXB0aW9uIiwgIl9VSV9TSVJJbm9jdWxhdG9yX2lub2N1bGF0ZWRQZXJjZW50YWdlX2ZlYXR1cmUiLCAiX1VJX1NJUklub2N1bGF0b3JfdHlwZSIpLCAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQgLy8kTk9OLU5MUy0zJAorCQkJCSBTdGFuZGFyZFBhY2thZ2UuTGl0ZXJhbHMuU0lSX0lOT0NVTEFUT1JfX0lOT0NVTEFURURfUEVSQ0VOVEFHRSwKKwkJCQkgdHJ1ZSwKKwkJCQkgZmFsc2UsCisJCQkJIGZhbHNlLAorCQkJCSBJdGVtUHJvcGVydHlEZXNjcmlwdG9yLlJFQUxfVkFMVUVfSU1BR0UsCisJCQkJIG51bGwsCisJCQkJIG51bGwpKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFkZHMgYSBwcm9wZXJ0eSBkZXNjcmlwdG9yIGZvciB0aGUgSW5vY3VsYXRlIFBlcmNlbnRhZ2UgZmVhdHVyZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBhZGRJbm9jdWxhdGVQZXJjZW50YWdlUHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdCBvYmplY3QpIHsKKwkJaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMuYWRkCisJCQkoY3JlYXRlSXRlbVByb3BlcnR5RGVzY3JpcHRvcgorCQkJCSgoKENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnkpYWRhcHRlckZhY3RvcnkpLmdldFJvb3RBZGFwdGVyRmFjdG9yeSgpLAorCQkJCSBnZXRSZXNvdXJjZUxvY2F0b3IoKSwKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfU0lSSW5vY3VsYXRvcl9pbm9jdWxhdGVQZXJjZW50YWdlX2ZlYXR1cmUiKSwgLy8kTk9OLU5MUy0xJAorCQkJCSBnZXRTdHJpbmcoIl9VSV9Qcm9wZXJ0eURlc2NyaXB0b3JfZGVzY3JpcHRpb24iLCAiX1VJX1NJUklub2N1bGF0b3JfaW5vY3VsYXRlUGVyY2VudGFnZV9mZWF0dXJlIiwgIl9VSV9TSVJJbm9jdWxhdG9yX3R5cGUiKSwgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkIC8vJE5PTi1OTFMtMyQKKwkJCQkgU3RhbmRhcmRQYWNrYWdlLkxpdGVyYWxzLlNJUl9JTk9DVUxBVE9SX19JTk9DVUxBVEVfUEVSQ0VOVEFHRSwKKwkJCQkgdHJ1ZSwKKwkJCQkgZmFsc2UsCisJCQkJIGZhbHNlLAorCQkJCSBJdGVtUHJvcGVydHlEZXNjcmlwdG9yLkJPT0xFQU5fVkFMVUVfSU1BR0UsCisJCQkJIG51bGwsCisJCQkJIG51bGwpKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgU0lSSW5vY3VsYXRvci5naWYuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBPYmplY3QgZ2V0SW1hZ2UoT2JqZWN0IG9iamVjdCkgeworCQlyZXR1cm4gb3ZlcmxheUltYWdlKG9iamVjdCwgZ2V0UmVzb3VyY2VMb2NhdG9yKCkuZ2V0SW1hZ2UoImZ1bGwvY3VzdG9tMTYvaW5vY3VsYXRvciIpKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgdGhlIGxhYmVsIHRleHQgZm9yIHRoZSBhZGFwdGVkIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgU3RyaW5nIGdldFRleHQoT2JqZWN0IG9iamVjdCkgeworCQlyZXR1cm4gc3VwZXIuZ2V0VGV4dChvYmplY3QpOworCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyB0aGUgbGFiZWwgdGV4dCBmb3IgdGhlIGFkYXB0ZWQgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIFN0cmluZyBnZXRUZXh0R2VuKE9iamVjdCBvYmplY3QpIHsKKwkJU3RyaW5nIGxhYmVsID0gKChTSVJJbm9jdWxhdG9yKW9iamVjdCkuZ2V0RGlzZWFzZU5hbWUoKTsKKwkJcmV0dXJuIGxhYmVsID09IG51bGwgfHwgbGFiZWwubGVuZ3RoKCkgPT0gMCA/CisJCQlnZXRTdHJpbmcoIl9VSV9TSVJJbm9jdWxhdG9yX3R5cGUiKSA6IC8vJE5PTi1OTFMtMSQKKwkJCWdldFN0cmluZygiX1VJX1NJUklub2N1bGF0b3JfdHlwZSIpICsgIiAiICsgbGFiZWw7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAorCX0KKwkKKwkvKioKKwkgKiBUaGlzIGhhbmRsZXMgbW9kZWwgbm90aWZpY2F0aW9ucyBieSBjYWxsaW5nIHtAbGluayAjdXBkYXRlQ2hpbGRyZW59IHRvIHVwZGF0ZSBhbnkgY2FjaGVkCisJICogY2hpbGRyZW4gYW5kIGJ5IGNyZWF0aW5nIGEgdmlld2VyIG5vdGlmaWNhdGlvbiwgd2hpY2ggaXQgcGFzc2VzIHRvIHtAbGluayAjZmlyZU5vdGlmeUNoYW5nZWR9LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIG5vdGlmeUNoYW5nZWQoTm90aWZpY2F0aW9uIG5vdGlmaWNhdGlvbikgeworCQl1cGRhdGVDaGlsZHJlbihub3RpZmljYXRpb24pOworCisJCXN3aXRjaCAobm90aWZpY2F0aW9uLmdldEZlYXR1cmVJRChTSVJJbm9jdWxhdG9yLmNsYXNzKSkgeworCQkJY2FzZSBTdGFuZGFyZFBhY2thZ2UuU0lSX0lOT0NVTEFUT1JfX0lOT0NVTEFURURfUEVSQ0VOVEFHRToKKwkJCWNhc2UgU3RhbmRhcmRQYWNrYWdlLlNJUl9JTk9DVUxBVE9SX19JTk9DVUxBVEVfUEVSQ0VOVEFHRToKKwkJCQlmaXJlTm90aWZ5Q2hhbmdlZChuZXcgVmlld2VyTm90aWZpY2F0aW9uKG5vdGlmaWNhdGlvbiwgbm90aWZpY2F0aW9uLmdldE5vdGlmaWVyKCksIGZhbHNlLCB0cnVlKSk7CisJCQkJcmV0dXJuOworCQl9CisJCXN1cGVyLm5vdGlmeUNoYW5nZWQobm90aWZpY2F0aW9uKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFkZHMge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lZGl0LmNvbW1hbmQuQ29tbWFuZFBhcmFtZXRlcn1zIGRlc2NyaWJpbmcgdGhlIGNoaWxkcmVuCisJICogdGhhdCBjYW4gYmUgY3JlYXRlZCB1bmRlciB0aGlzIG9iamVjdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgdm9pZCBjb2xsZWN0TmV3Q2hpbGREZXNjcmlwdG9ycyhDb2xsZWN0aW9uPE9iamVjdD4gbmV3Q2hpbGREZXNjcmlwdG9ycywgT2JqZWN0IG9iamVjdCkgeworCQlzdXBlci5jb2xsZWN0TmV3Q2hpbGREZXNjcmlwdG9ycyhuZXdDaGlsZERlc2NyaXB0b3JzLCBvYmplY3QpOworCX0KKworfQpkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9zdGFuZGFyZC9wcm92aWRlci9TSVJJdGVtUHJvdmlkZXIuamF2YSBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvc3RhbmRhcmQvcHJvdmlkZXIvU0lSSXRlbVByb3ZpZGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDM3NDc1MAotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvc3RhbmRhcmQvcHJvdmlkZXIvU0lSSXRlbVByb3ZpZGVyLmphdmEKQEAgLTAsMCArMSwxNjMgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLnByb3ZpZGVyOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOworaW1wb3J0IGphdmEudXRpbC5MaXN0OworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkNvbXBvc2VhYmxlQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUVkaXRpbmdEb21haW5JdGVtUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1MYWJlbFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtUHJvcGVydHlEZXNjcmlwdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtUHJvcGVydHlTb3VyY2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVN0cnVjdHVyZWRJdGVtQ29udGVudFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklUcmVlSXRlbUNvbnRlbnRQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JdGVtUHJvcGVydHlEZXNjcmlwdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLlZpZXdlck5vdGlmaWNhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU0lSOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZFBhY2thZ2U7CisKKy8qKgorICogVGhpcyBpcyB0aGUgaXRlbSBwcm92aWRlciBhZGFwdGVyIGZvciBhCisgKiB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlNJUn0gb2JqZWN0LiA8IS0tCisgKiBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiAKKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIFNJUkl0ZW1Qcm92aWRlciBleHRlbmRzIFNJSXRlbVByb3ZpZGVyIGltcGxlbWVudHMKKwkJSUVkaXRpbmdEb21haW5JdGVtUHJvdmlkZXIsIElTdHJ1Y3R1cmVkSXRlbUNvbnRlbnRQcm92aWRlciwKKwkJSVRyZWVJdGVtQ29udGVudFByb3ZpZGVyLCBJSXRlbUxhYmVsUHJvdmlkZXIsIElJdGVtUHJvcGVydHlTb3VyY2UgeworCS8qKgorCSAqIFRoaXMgY29uc3RydWN0cyBhbiBpbnN0YW5jZSBmcm9tIGEgZmFjdG9yeSBhbmQgYSBub3RpZmllci4gPCEtLQorCSAqIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBwYXJhbSBhZGFwdGVyRmFjdG9yeQorCSAqIAorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgU0lSSXRlbVByb3ZpZGVyKEFkYXB0ZXJGYWN0b3J5IGFkYXB0ZXJGYWN0b3J5KSB7CisJCXN1cGVyKGFkYXB0ZXJGYWN0b3J5KTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgdGhlIHByb3BlcnR5IGRlc2NyaXB0b3JzIGZvciB0aGUgYWRhcHRlZCBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBwYXJhbSBvYmplY3QKKwkgKiBAcmV0dXJuCisJICogCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBMaXN0PElJdGVtUHJvcGVydHlEZXNjcmlwdG9yPiBnZXRQcm9wZXJ0eURlc2NyaXB0b3JzKE9iamVjdCBvYmplY3QpIHsKKwkJaWYgKGl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzID09IG51bGwpIHsKKwkJCXN1cGVyLmdldFByb3BlcnR5RGVzY3JpcHRvcnMob2JqZWN0KTsKKworCQkJYWRkSW1tdW5pdHlMb3NzUmF0ZVByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QpOworCQl9CisJCXJldHVybiBpdGVtUHJvcGVydHlEZXNjcmlwdG9yczsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFkZHMgYSBwcm9wZXJ0eSBkZXNjcmlwdG9yIGZvciB0aGUgSW1tdW5pdHkgTG9zcyBSYXRlIGZlYXR1cmUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgYWRkSW1tdW5pdHlMb3NzUmF0ZVByb3BlcnR5RGVzY3JpcHRvcihPYmplY3Qgb2JqZWN0KSB7CisJCWl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzLmFkZAorCQkJKGNyZWF0ZUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IKKwkJCQkoKChDb21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5KWFkYXB0ZXJGYWN0b3J5KS5nZXRSb290QWRhcHRlckZhY3RvcnkoKSwKKwkJCQkgZ2V0UmVzb3VyY2VMb2NhdG9yKCksCisJCQkJIGdldFN0cmluZygiX1VJX1NJUl9pbW11bml0eUxvc3NSYXRlX2ZlYXR1cmUiKSwgLy8kTk9OLU5MUy0xJAorCQkJCSBnZXRTdHJpbmcoIl9VSV9Qcm9wZXJ0eURlc2NyaXB0b3JfZGVzY3JpcHRpb24iLCAiX1VJX1NJUl9pbW11bml0eUxvc3NSYXRlX2ZlYXR1cmUiLCAiX1VJX1NJUl90eXBlIiksIC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJCAvLyROT04tTkxTLTMkCisJCQkJIFN0YW5kYXJkUGFja2FnZS5MaXRlcmFscy5TSVJfX0lNTVVOSVRZX0xPU1NfUkFURSwKKwkJCQkgdHJ1ZSwKKwkJCQkgZmFsc2UsCisJCQkJIGZhbHNlLAorCQkJCSBJdGVtUHJvcGVydHlEZXNjcmlwdG9yLlJFQUxfVkFMVUVfSU1BR0UsCisJCQkJIG51bGwsCisJCQkJIG51bGwpKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgdGhlIGxhYmVsIHRleHQgZm9yIHRoZSBhZGFwdGVkIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogCisJICogQHBhcmFtIG9iamVjdAorCSAqIEByZXR1cm4KKwkgKiAKKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBTdHJpbmcgZ2V0VGV4dChPYmplY3Qgb2JqZWN0KSB7CisJCXJldHVybiBzdXBlci5nZXRUZXh0KG9iamVjdCk7CisJfQorCQorCS8qKgorCSAqIFRoaXMgcmV0dXJucyB0aGUgbGFiZWwgdGV4dCBmb3IgdGhlIGFkYXB0ZWQgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAcGFyYW0gb2JqZWN0CisJICogQHJldHVybgorCSAqIAorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgU3RyaW5nIGdldFRleHRHZW4oT2JqZWN0IG9iamVjdCkgeworCQlTdHJpbmcgbGFiZWwgPSAoKFNJUilvYmplY3QpLmdldERpc2Vhc2VOYW1lKCk7CisJCXJldHVybiBsYWJlbCA9PSBudWxsIHx8IGxhYmVsLmxlbmd0aCgpID09IDAgPworCQkJZ2V0U3RyaW5nKCJfVUlfU0lSX3R5cGUiKSA6IC8vJE5PTi1OTFMtMSQKKwkJCWdldFN0cmluZygiX1VJX1NJUl90eXBlIikgKyAiICIgKyBsYWJlbDsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCisJfQorCisJLyoqCisJICogVGhpcyBoYW5kbGVzIG1vZGVsIG5vdGlmaWNhdGlvbnMgYnkgY2FsbGluZyB7QGxpbmsgI3VwZGF0ZUNoaWxkcmVufSB0byB1cGRhdGUgYW55IGNhY2hlZAorCSAqIGNoaWxkcmVuIGFuZCBieSBjcmVhdGluZyBhIHZpZXdlciBub3RpZmljYXRpb24sIHdoaWNoIGl0IHBhc3NlcyB0byB7QGxpbmsgI2ZpcmVOb3RpZnlDaGFuZ2VkfS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBwYXJhbSBub3RpZmljYXRpb24KKwkgKiAKKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgbm90aWZ5Q2hhbmdlZChOb3RpZmljYXRpb24gbm90aWZpY2F0aW9uKSB7CisJCXVwZGF0ZUNoaWxkcmVuKG5vdGlmaWNhdGlvbik7CisKKwkJc3dpdGNoIChub3RpZmljYXRpb24uZ2V0RmVhdHVyZUlEKFNJUi5jbGFzcykpIHsKKwkJCWNhc2UgU3RhbmRhcmRQYWNrYWdlLlNJUl9fSU1NVU5JVFlfTE9TU19SQVRFOgorCQkJCWZpcmVOb3RpZnlDaGFuZ2VkKG5ldyBWaWV3ZXJOb3RpZmljYXRpb24obm90aWZpY2F0aW9uLCBub3RpZmljYXRpb24uZ2V0Tm90aWZpZXIoKSwgZmFsc2UsIHRydWUpKTsKKwkJCQlyZXR1cm47CisJCX0KKwkJc3VwZXIubm90aWZ5Q2hhbmdlZChub3RpZmljYXRpb24pOworCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmVkaXQuY29tbWFuZC5Db21tYW5kUGFyYW1ldGVyfXMgZGVzY3JpYmluZyB0aGUgY2hpbGRyZW4KKwkgKiB0aGF0IGNhbiBiZSBjcmVhdGVkIHVuZGVyIHRoaXMgb2JqZWN0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MKKwkgKiAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIGNvbGxlY3ROZXdDaGlsZERlc2NyaXB0b3JzKENvbGxlY3Rpb248T2JqZWN0PiBuZXdDaGlsZERlc2NyaXB0b3JzLCBPYmplY3Qgb2JqZWN0KSB7CisJCXN1cGVyLmNvbGxlY3ROZXdDaGlsZERlc2NyaXB0b3JzKG5ld0NoaWxkRGVzY3JpcHRvcnMsIG9iamVjdCk7CisJfQorCit9CmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3N0YW5kYXJkL3Byb3ZpZGVyL1NJUkxhYmVsSXRlbVByb3ZpZGVyLmphdmEgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3N0YW5kYXJkL3Byb3ZpZGVyL1NJUkxhYmVsSXRlbVByb3ZpZGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTZlMmMxMwotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvc3RhbmRhcmQvcHJvdmlkZXIvU0lSTGFiZWxJdGVtUHJvdmlkZXIuamF2YQpAQCAtMCwwICsxLDEyMCBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQucHJvdmlkZXI7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5BZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlVSSTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5Db21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklFZGl0aW5nRG9tYWluSXRlbVByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtTGFiZWxQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbVByb3BlcnR5RGVzY3JpcHRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbVByb3BlcnR5U291cmNlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklTdHJ1Y3R1cmVkSXRlbUNvbnRlbnRQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JVHJlZUl0ZW1Db250ZW50UHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlNJUkxhYmVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZFBhY2thZ2U7CisKKy8qKgorICogVGhpcyBpcyB0aGUgaXRlbSBwcm92aWRlciBhZGFwdGVyIGZvciBhCisgKiB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlNJUkxhYmVsfSBvYmplY3QuIDwhLS0KKyAqIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIAorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgU0lSTGFiZWxJdGVtUHJvdmlkZXIgZXh0ZW5kcyBTdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsSXRlbVByb3ZpZGVyCisJCWltcGxlbWVudHMgSUVkaXRpbmdEb21haW5JdGVtUHJvdmlkZXIsIElTdHJ1Y3R1cmVkSXRlbUNvbnRlbnRQcm92aWRlciwKKwkJSVRyZWVJdGVtQ29udGVudFByb3ZpZGVyLCBJSXRlbUxhYmVsUHJvdmlkZXIsIElJdGVtUHJvcGVydHlTb3VyY2UgeworCS8qKgorCSAqIFRoaXMgY29uc3RydWN0cyBhbiBpbnN0YW5jZSBmcm9tIGEgZmFjdG9yeSBhbmQgYSBub3RpZmllci4gPCEtLQorCSAqIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBwYXJhbSBhZGFwdGVyRmFjdG9yeQorCSAqIAorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgU0lSTGFiZWxJdGVtUHJvdmlkZXIoQWRhcHRlckZhY3RvcnkgYWRhcHRlckZhY3RvcnkpIHsKKwkJc3VwZXIoYWRhcHRlckZhY3RvcnkpOworCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyB0aGUgcHJvcGVydHkgZGVzY3JpcHRvcnMgZm9yIHRoZSBhZGFwdGVkIGNsYXNzLiA8IS0tCisJICogYmVnaW4tdXNlci1kb2MgLS0+CisJICogCisJICogQHBhcmFtIG9iamVjdAorCSAqIEByZXR1cm4KKwkgKiAKKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIExpc3Q8SUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I+IGdldFByb3BlcnR5RGVzY3JpcHRvcnMoT2JqZWN0IG9iamVjdCkgeworCQlpZiAoaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMgPT0gbnVsbCkgeworCQkJc3VwZXIuZ2V0UHJvcGVydHlEZXNjcmlwdG9ycyhvYmplY3QpOworCisJCX0KKwkJcmV0dXJuIGl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzOworCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyB0aGUgbGFiZWwgdGV4dCBmb3IgdGhlIGFkYXB0ZWQgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYworCSAqIC0tPgorCSAqIAorCSAqIEBwYXJhbSBvYmplY3QKKwkgKiBAcmV0dXJuCisJICogCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBTdHJpbmcgZ2V0VGV4dChPYmplY3Qgb2JqZWN0KSB7CisJCVVSSSBsYWJlbFZhbHVlID0gKChTSVJMYWJlbClvYmplY3QpLmdldFVSSSgpOworCQlTdHJpbmcgbGFiZWwgPSBsYWJlbFZhbHVlID09IG51bGwgPyBudWxsIDogbGFiZWxWYWx1ZS50b1N0cmluZygpOworCQlyZXR1cm4gbGFiZWwgPT0gbnVsbCB8fCBsYWJlbC5sZW5ndGgoKSA9PSAwID8KKwkJCWdldFN0cmluZygiX1VJX1NJUkxhYmVsX3R5cGUiKSA6IC8vJE5PTi1OTFMtMSQKKwkJCWdldFN0cmluZygiX1VJX1NJUkxhYmVsX3R5cGUiKSArICIgIiArIGxhYmVsOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKKwl9CisKKwkvKioKKwkgKiBUaGlzIGhhbmRsZXMgbW9kZWwgbm90aWZpY2F0aW9ucyBieSBjYWxsaW5nIHtAbGluayAjdXBkYXRlQ2hpbGRyZW59IHRvIHVwZGF0ZSBhbnkgY2FjaGVkCisJICogY2hpbGRyZW4gYW5kIGJ5IGNyZWF0aW5nIGEgdmlld2VyIG5vdGlmaWNhdGlvbiwgd2hpY2ggaXQgcGFzc2VzIHRvIHtAbGluayAjZmlyZU5vdGlmeUNoYW5nZWR9LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogCisJICogQHBhcmFtIG5vdGlmaWNhdGlvbgorCSAqIAorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBub3RpZnlDaGFuZ2VkKE5vdGlmaWNhdGlvbiBub3RpZmljYXRpb24pIHsKKwkJdXBkYXRlQ2hpbGRyZW4obm90aWZpY2F0aW9uKTsKKwkJc3VwZXIubm90aWZ5Q2hhbmdlZChub3RpZmljYXRpb24pOworCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmVkaXQuY29tbWFuZC5Db21tYW5kUGFyYW1ldGVyfXMgZGVzY3JpYmluZyB0aGUgY2hpbGRyZW4KKwkgKiB0aGF0IGNhbiBiZSBjcmVhdGVkIHVuZGVyIHRoaXMgb2JqZWN0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MKKwkgKiAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIGNvbGxlY3ROZXdDaGlsZERlc2NyaXB0b3JzKENvbGxlY3Rpb248T2JqZWN0PiBuZXdDaGlsZERlc2NyaXB0b3JzLCBPYmplY3Qgb2JqZWN0KSB7CisJCXN1cGVyLmNvbGxlY3ROZXdDaGlsZERlc2NyaXB0b3JzKG5ld0NoaWxkRGVzY3JpcHRvcnMsIG9iamVjdCk7CisJfQorCit9CmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3N0YW5kYXJkL3Byb3ZpZGVyL1NJUkxhYmVsVmFsdWVJdGVtUHJvdmlkZXIuamF2YSBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvc3RhbmRhcmQvcHJvdmlkZXIvU0lSTGFiZWxWYWx1ZUl0ZW1Qcm92aWRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRkMjQ2ZDAKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3N0YW5kYXJkL3Byb3ZpZGVyL1NJUkxhYmVsVmFsdWVJdGVtUHJvdmlkZXIuamF2YQpAQCAtMCwwICsxLDE0NSBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQucHJvdmlkZXI7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5BZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JRWRpdGluZ0RvbWFpbkl0ZW1Qcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbUxhYmVsUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1Qcm9wZXJ0eVNvdXJjZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JU3RydWN0dXJlZEl0ZW1Db250ZW50UHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVRyZWVJdGVtQ29udGVudFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuVmlld2VyTm90aWZpY2F0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TSVJMYWJlbFZhbHVlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZFBhY2thZ2U7CisKKy8qKgorICogVGhpcyBpcyB0aGUgaXRlbSBwcm92aWRlciBhZGFwdGVyIGZvciBhIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU0lSTGFiZWxWYWx1ZX0gb2JqZWN0LgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBTSVJMYWJlbFZhbHVlSXRlbVByb3ZpZGVyIGV4dGVuZHMgU0lMYWJlbFZhbHVlSXRlbVByb3ZpZGVyCisJCWltcGxlbWVudHMgSUVkaXRpbmdEb21haW5JdGVtUHJvdmlkZXIsIElTdHJ1Y3R1cmVkSXRlbUNvbnRlbnRQcm92aWRlciwKKwkJSVRyZWVJdGVtQ29udGVudFByb3ZpZGVyLCBJSXRlbUxhYmVsUHJvdmlkZXIsIElJdGVtUHJvcGVydHlTb3VyY2UgeworCS8qKgorCSAqIFRoaXMgY29uc3RydWN0cyBhbiBpbnN0YW5jZSBmcm9tIGEgZmFjdG9yeSBhbmQgYSBub3RpZmllci4gPCEtLQorCSAqIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBwYXJhbSBhZGFwdGVyRmFjdG9yeQorCSAqIAorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgU0lSTGFiZWxWYWx1ZUl0ZW1Qcm92aWRlcihBZGFwdGVyRmFjdG9yeSBhZGFwdGVyRmFjdG9yeSkgeworCQlzdXBlcihhZGFwdGVyRmFjdG9yeSk7CisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIHRoZSBwcm9wZXJ0eSBkZXNjcmlwdG9ycyBmb3IgdGhlIGFkYXB0ZWQgY2xhc3MuIDwhLS0KKwkgKiBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAcGFyYW0gb2JqZWN0CisJICogQHJldHVybgorCSAqIAorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgTGlzdDxJSXRlbVByb3BlcnR5RGVzY3JpcHRvcj4gZ2V0UHJvcGVydHlEZXNjcmlwdG9ycyhPYmplY3Qgb2JqZWN0KSB7CisJCWlmIChpdGVtUHJvcGVydHlEZXNjcmlwdG9ycyA9PSBudWxsKSB7CisJCQlzdXBlci5nZXRQcm9wZXJ0eURlc2NyaXB0b3JzKG9iamVjdCk7CisKKwkJCWFkZFJQcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0KTsKKwkJfQorCQlyZXR1cm4gaXRlbVByb3BlcnR5RGVzY3JpcHRvcnM7CisJfQorCisJLyoqCisJICogVGhpcyBhZGRzIGEgcHJvcGVydHkgZGVzY3JpcHRvciBmb3IgdGhlIFIgZmVhdHVyZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jCisJICogLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBhZGRSUHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdCBvYmplY3QpIHsKKwkJaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMuYWRkCisJCQkoY3JlYXRlSXRlbVByb3BlcnR5RGVzY3JpcHRvcgorCQkJCSgoKENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnkpYWRhcHRlckZhY3RvcnkpLmdldFJvb3RBZGFwdGVyRmFjdG9yeSgpLAorCQkJCSBnZXRSZXNvdXJjZUxvY2F0b3IoKSwKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfU0lSTGFiZWxWYWx1ZV9yX2ZlYXR1cmUiKSwgLy8kTk9OLU5MUy0xJAorCQkJCSBnZXRTdHJpbmcoIl9VSV9Qcm9wZXJ0eURlc2NyaXB0b3JfZGVzY3JpcHRpb24iLCAiX1VJX1NJUkxhYmVsVmFsdWVfcl9mZWF0dXJlIiwgIl9VSV9TSVJMYWJlbFZhbHVlX3R5cGUiKSwgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkIC8vJE5PTi1OTFMtMyQKKwkJCQkgU3RhbmRhcmRQYWNrYWdlLkxpdGVyYWxzLlNJUl9MQUJFTF9WQUxVRV9fUiwKKwkJCQkgdHJ1ZSwKKwkJCQkgZmFsc2UsCisJCQkJIGZhbHNlLAorCQkJCSBJdGVtUHJvcGVydHlEZXNjcmlwdG9yLlJFQUxfVkFMVUVfSU1BR0UsCisJCQkJIG51bGwsCisJCQkJIG51bGwpKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgdGhlIGxhYmVsIHRleHQgZm9yIHRoZSBhZGFwdGVkIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MKKwkgKiAtLT4KKwkgKiAKKwkgKiBAcGFyYW0gb2JqZWN0CisJICogQHJldHVybgorCSAqIAorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgU3RyaW5nIGdldFRleHQoT2JqZWN0IG9iamVjdCkgeworCQlTSVJMYWJlbFZhbHVlIHNpckxhYmVsVmFsdWUgPSAoU0lSTGFiZWxWYWx1ZSlvYmplY3Q7CisJCXJldHVybiBnZXRTdHJpbmcoIl9VSV9TSVJMYWJlbFZhbHVlX3R5cGUiKSArICIgIiArIHNpckxhYmVsVmFsdWUuZ2V0UG9wdWxhdGlvbkNvdW50KCk7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAorCX0KKworCS8qKgorCSAqIFRoaXMgaGFuZGxlcyBtb2RlbCBub3RpZmljYXRpb25zIGJ5IGNhbGxpbmcge0BsaW5rICN1cGRhdGVDaGlsZHJlbn0gdG8gdXBkYXRlIGFueSBjYWNoZWQKKwkgKiBjaGlsZHJlbiBhbmQgYnkgY3JlYXRpbmcgYSB2aWV3ZXIgbm90aWZpY2F0aW9uLCB3aGljaCBpdCBwYXNzZXMgdG8ge0BsaW5rICNmaXJlTm90aWZ5Q2hhbmdlZH0uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAcGFyYW0gbm90aWZpY2F0aW9uCisJICogCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIG5vdGlmeUNoYW5nZWQoTm90aWZpY2F0aW9uIG5vdGlmaWNhdGlvbikgeworCQl1cGRhdGVDaGlsZHJlbihub3RpZmljYXRpb24pOworCisJCXN3aXRjaCAobm90aWZpY2F0aW9uLmdldEZlYXR1cmVJRChTSVJMYWJlbFZhbHVlLmNsYXNzKSkgeworCQkJY2FzZSBTdGFuZGFyZFBhY2thZ2UuU0lSX0xBQkVMX1ZBTFVFX19SOgorCQkJCWZpcmVOb3RpZnlDaGFuZ2VkKG5ldyBWaWV3ZXJOb3RpZmljYXRpb24obm90aWZpY2F0aW9uLCBub3RpZmljYXRpb24uZ2V0Tm90aWZpZXIoKSwgZmFsc2UsIHRydWUpKTsKKwkJCQlyZXR1cm47CisJCX0KKwkJc3VwZXIubm90aWZ5Q2hhbmdlZChub3RpZmljYXRpb24pOworCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmVkaXQuY29tbWFuZC5Db21tYW5kUGFyYW1ldGVyfXMgZGVzY3JpYmluZyB0aGUgY2hpbGRyZW4KKwkgKiB0aGF0IGNhbiBiZSBjcmVhdGVkIHVuZGVyIHRoaXMgb2JqZWN0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MKKwkgKiAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIGNvbGxlY3ROZXdDaGlsZERlc2NyaXB0b3JzKENvbGxlY3Rpb248T2JqZWN0PiBuZXdDaGlsZERlc2NyaXB0b3JzLCBPYmplY3Qgb2JqZWN0KSB7CisJCXN1cGVyLmNvbGxlY3ROZXdDaGlsZERlc2NyaXB0b3JzKG5ld0NoaWxkRGVzY3JpcHRvcnMsIG9iamVjdCk7CisJfQorCit9CmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3N0YW5kYXJkL3Byb3ZpZGVyL1N0YW5kYXJkRGlzZWFzZU1vZGVsSXRlbVByb3ZpZGVyLmphdmEgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3N0YW5kYXJkL3Byb3ZpZGVyL1N0YW5kYXJkRGlzZWFzZU1vZGVsSXRlbVByb3ZpZGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWY5NWM5YQotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvc3RhbmRhcmQvcHJvdmlkZXIvU3RhbmRhcmREaXNlYXNlTW9kZWxJdGVtUHJvdmlkZXIuamF2YQpAQCAtMCwwICsxLDIxNSBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQucHJvdmlkZXI7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5BZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JRWRpdGluZ0RvbWFpbkl0ZW1Qcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbUxhYmVsUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1Qcm9wZXJ0eVNvdXJjZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JU3RydWN0dXJlZEl0ZW1Db250ZW50UHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVRyZWVJdGVtQ29udGVudFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuVmlld2VyTm90aWZpY2F0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZERpc2Vhc2VNb2RlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmRQYWNrYWdlOworCisvKioKKyAqIFRoaXMgaXMgdGhlIGl0ZW0gcHJvdmlkZXIgYWRhcHRlciBmb3IgYSB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkRGlzZWFzZU1vZGVsfSBvYmplY3QuCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIFN0YW5kYXJkRGlzZWFzZU1vZGVsSXRlbVByb3ZpZGVyIGV4dGVuZHMgRGlzZWFzZU1vZGVsSXRlbVByb3ZpZGVyCisJCWltcGxlbWVudHMgSUVkaXRpbmdEb21haW5JdGVtUHJvdmlkZXIsIElTdHJ1Y3R1cmVkSXRlbUNvbnRlbnRQcm92aWRlciwKKwkJSVRyZWVJdGVtQ29udGVudFByb3ZpZGVyLCBJSXRlbUxhYmVsUHJvdmlkZXIsIElJdGVtUHJvcGVydHlTb3VyY2UgeworCS8qKgorCSAqIFRoaXMgY29uc3RydWN0cyBhbiBpbnN0YW5jZSBmcm9tIGEgZmFjdG9yeSBhbmQgYSBub3RpZmllci4gPCEtLQorCSAqIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBwYXJhbSBhZGFwdGVyRmFjdG9yeQorCSAqIAorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgU3RhbmRhcmREaXNlYXNlTW9kZWxJdGVtUHJvdmlkZXIoQWRhcHRlckZhY3RvcnkgYWRhcHRlckZhY3RvcnkpIHsKKwkJc3VwZXIoYWRhcHRlckZhY3RvcnkpOworCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyB0aGUgcHJvcGVydHkgZGVzY3JpcHRvcnMgZm9yIHRoZSBhZGFwdGVkIGNsYXNzLiA8IS0tCisJICogYmVnaW4tdXNlci1kb2MgLS0+CisJICogCisJICogQHBhcmFtIG9iamVjdAorCSAqIEByZXR1cm4KKwkgKiAKKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCXB1YmxpYyBMaXN0IGdldFByb3BlcnR5RGVzY3JpcHRvcnMoT2JqZWN0IG9iamVjdCkgeworCQlpZiAoaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMgPT0gbnVsbCkgeworCQkJc3VwZXIuZ2V0UHJvcGVydHlEZXNjcmlwdG9ycyhvYmplY3QpOworCQkJYWRkUmVmZXJlbmNlUG9wdWxhdGlvbkRlbnNpdHlQcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0KTsKKwkJCWFkZFJvYWROZXR3b3JrSW5mZWN0aW91c1Byb3BvcnRpb25Qcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0KTsKKwkJCWFkZENoYXJhY3RlcmlzdGljTWl4aW5nRGlzdGFuY2VQcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0KTsKKwkJCS8vYWRkVG90YWxQb3B1bGF0aW9uQ291bnRQcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0KTsKKwkJCS8vYWRkVG90YWxQb3B1bGF0aW9uQ291bnRSZWNpcHJvY2FsUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCk7CisJCQkvL2FkZFRvdGFsQXJlYVByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QpOworCQl9CisJCXJldHVybiBpdGVtUHJvcGVydHlEZXNjcmlwdG9yczsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgdGhlIHByb3BlcnR5IGRlc2NyaXB0b3JzIGZvciB0aGUgYWRhcHRlZCBjbGFzcy4gPCEtLQorCSAqIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBwYXJhbSBvYmplY3QKKwkgKiBAcmV0dXJuCisJICogCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBMaXN0PElJdGVtUHJvcGVydHlEZXNjcmlwdG9yPiBnZXRQcm9wZXJ0eURlc2NyaXB0b3JzR2VuKE9iamVjdCBvYmplY3QpIHsKKwkJaWYgKGl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzID09IG51bGwpIHsKKwkJCXN1cGVyLmdldFByb3BlcnR5RGVzY3JpcHRvcnMob2JqZWN0KTsKKworCQkJYWRkUmVmZXJlbmNlUG9wdWxhdGlvbkRlbnNpdHlQcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0KTsKKwkJCWFkZFJvYWROZXR3b3JrSW5mZWN0aW91c1Byb3BvcnRpb25Qcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0KTsKKwkJCWFkZENoYXJhY3RlcmlzdGljTWl4aW5nRGlzdGFuY2VQcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0KTsKKwkJfQorCQlyZXR1cm4gaXRlbVByb3BlcnR5RGVzY3JpcHRvcnM7CisJfQorCQorCS8qKgorCSAqIFRoaXMgYWRkcyBhIHByb3BlcnR5IGRlc2NyaXB0b3IgZm9yIHRoZSBSZWZlcmVuY2UgUG9wdWxhdGlvbiBEZW5zaXR5IGZlYXR1cmUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgYWRkUmVmZXJlbmNlUG9wdWxhdGlvbkRlbnNpdHlQcm9wZXJ0eURlc2NyaXB0b3IoT2JqZWN0IG9iamVjdCkgeworCQlpdGVtUHJvcGVydHlEZXNjcmlwdG9ycy5hZGQKKwkJCShjcmVhdGVJdGVtUHJvcGVydHlEZXNjcmlwdG9yCisJCQkJKCgoQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSlhZGFwdGVyRmFjdG9yeSkuZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCksCisJCQkJIGdldFJlc291cmNlTG9jYXRvcigpLAorCQkJCSBnZXRTdHJpbmcoIl9VSV9TdGFuZGFyZERpc2Vhc2VNb2RlbF9yZWZlcmVuY2VQb3B1bGF0aW9uRGVuc2l0eV9mZWF0dXJlIiksIC8vJE5PTi1OTFMtMSQKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfUHJvcGVydHlEZXNjcmlwdG9yX2Rlc2NyaXB0aW9uIiwgIl9VSV9TdGFuZGFyZERpc2Vhc2VNb2RlbF9yZWZlcmVuY2VQb3B1bGF0aW9uRGVuc2l0eV9mZWF0dXJlIiwgIl9VSV9TdGFuZGFyZERpc2Vhc2VNb2RlbF90eXBlIiksIC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJCAvLyROT04tTkxTLTMkCisJCQkJIFN0YW5kYXJkUGFja2FnZS5MaXRlcmFscy5TVEFOREFSRF9ESVNFQVNFX01PREVMX19SRUZFUkVOQ0VfUE9QVUxBVElPTl9ERU5TSVRZLAorCQkJCSB0cnVlLAorCQkJCSBmYWxzZSwKKwkJCQkgZmFsc2UsCisJCQkJIEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IuUkVBTF9WQUxVRV9JTUFHRSwKKwkJCQkgbnVsbCwKKwkJCQkgbnVsbCkpOworCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyBhIHByb3BlcnR5IGRlc2NyaXB0b3IgZm9yIHRoZSBSb2FkIE5ldHdvcmsgSW5mZWN0aW91cyBQcm9wb3J0aW9uIGZlYXR1cmUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgYWRkUm9hZE5ldHdvcmtJbmZlY3Rpb3VzUHJvcG9ydGlvblByb3BlcnR5RGVzY3JpcHRvcihPYmplY3Qgb2JqZWN0KSB7CisJCWl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzLmFkZAorCQkJKGNyZWF0ZUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IKKwkJCQkoKChDb21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5KWFkYXB0ZXJGYWN0b3J5KS5nZXRSb290QWRhcHRlckZhY3RvcnkoKSwKKwkJCQkgZ2V0UmVzb3VyY2VMb2NhdG9yKCksCisJCQkJIGdldFN0cmluZygiX1VJX1N0YW5kYXJkRGlzZWFzZU1vZGVsX3JvYWROZXR3b3JrSW5mZWN0aW91c1Byb3BvcnRpb25fZmVhdHVyZSIpLCAvLyROT04tTkxTLTEkCisJCQkJIGdldFN0cmluZygiX1VJX1Byb3BlcnR5RGVzY3JpcHRvcl9kZXNjcmlwdGlvbiIsICJfVUlfU3RhbmRhcmREaXNlYXNlTW9kZWxfcm9hZE5ldHdvcmtJbmZlY3Rpb3VzUHJvcG9ydGlvbl9mZWF0dXJlIiwgIl9VSV9TdGFuZGFyZERpc2Vhc2VNb2RlbF90eXBlIiksIC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJCAvLyROT04tTkxTLTMkCisJCQkJIFN0YW5kYXJkUGFja2FnZS5MaXRlcmFscy5TVEFOREFSRF9ESVNFQVNFX01PREVMX19ST0FEX05FVFdPUktfSU5GRUNUSU9VU19QUk9QT1JUSU9OLAorCQkJCSB0cnVlLAorCQkJCSBmYWxzZSwKKwkJCQkgZmFsc2UsCisJCQkJIEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IuUkVBTF9WQUxVRV9JTUFHRSwKKwkJCQkgbnVsbCwKKwkJCQkgbnVsbCkpOworCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyBhIHByb3BlcnR5IGRlc2NyaXB0b3IgZm9yIHRoZSBDaGFyYWN0ZXJpc3RpYyBNaXhpbmcgRGlzdGFuY2UgZmVhdHVyZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBhZGRDaGFyYWN0ZXJpc3RpY01peGluZ0Rpc3RhbmNlUHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdCBvYmplY3QpIHsKKwkJaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMuYWRkCisJCQkoY3JlYXRlSXRlbVByb3BlcnR5RGVzY3JpcHRvcgorCQkJCSgoKENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnkpYWRhcHRlckZhY3RvcnkpLmdldFJvb3RBZGFwdGVyRmFjdG9yeSgpLAorCQkJCSBnZXRSZXNvdXJjZUxvY2F0b3IoKSwKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfU3RhbmRhcmREaXNlYXNlTW9kZWxfY2hhcmFjdGVyaXN0aWNNaXhpbmdEaXN0YW5jZV9mZWF0dXJlIiksIC8vJE5PTi1OTFMtMSQKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfUHJvcGVydHlEZXNjcmlwdG9yX2Rlc2NyaXB0aW9uIiwgIl9VSV9TdGFuZGFyZERpc2Vhc2VNb2RlbF9jaGFyYWN0ZXJpc3RpY01peGluZ0Rpc3RhbmNlX2ZlYXR1cmUiLCAiX1VJX1N0YW5kYXJkRGlzZWFzZU1vZGVsX3R5cGUiKSwgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkIC8vJE5PTi1OTFMtMyQKKwkJCQkgU3RhbmRhcmRQYWNrYWdlLkxpdGVyYWxzLlNUQU5EQVJEX0RJU0VBU0VfTU9ERUxfX0NIQVJBQ1RFUklTVElDX01JWElOR19ESVNUQU5DRSwKKwkJCQkgdHJ1ZSwKKwkJCQkgZmFsc2UsCisJCQkJIGZhbHNlLAorCQkJCSBJdGVtUHJvcGVydHlEZXNjcmlwdG9yLlJFQUxfVkFMVUVfSU1BR0UsCisJCQkJIG51bGwsCisJCQkJIG51bGwpKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgdGhlIGxhYmVsIHRleHQgZm9yIHRoZSBhZGFwdGVkIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MKKwkgKiAtLT4KKwkgKiAKKwkgKiBAcGFyYW0gb2JqZWN0CisJICogQHJldHVybgorCSAqIAorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIFN0cmluZyBnZXRUZXh0KE9iamVjdCBvYmplY3QpIHsKKwkJcmV0dXJuIHN1cGVyLmdldFRleHQob2JqZWN0KTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGhhbmRsZXMgbW9kZWwgbm90aWZpY2F0aW9ucyBieSBjYWxsaW5nIHtAbGluayAjdXBkYXRlQ2hpbGRyZW59IHRvIHVwZGF0ZSBhbnkgY2FjaGVkCisJICogY2hpbGRyZW4gYW5kIGJ5IGNyZWF0aW5nIGEgdmlld2VyIG5vdGlmaWNhdGlvbiwgd2hpY2ggaXQgcGFzc2VzIHRvIHtAbGluayAjZmlyZU5vdGlmeUNoYW5nZWR9LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogCisJICogQHBhcmFtIG5vdGlmaWNhdGlvbgorCSAqIAorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBub3RpZnlDaGFuZ2VkKE5vdGlmaWNhdGlvbiBub3RpZmljYXRpb24pIHsKKwkJdXBkYXRlQ2hpbGRyZW4obm90aWZpY2F0aW9uKTsKKworCQlzd2l0Y2ggKG5vdGlmaWNhdGlvbi5nZXRGZWF0dXJlSUQoU3RhbmRhcmREaXNlYXNlTW9kZWwuY2xhc3MpKSB7CisJCQljYXNlIFN0YW5kYXJkUGFja2FnZS5TVEFOREFSRF9ESVNFQVNFX01PREVMX19SRUZFUkVOQ0VfUE9QVUxBVElPTl9ERU5TSVRZOgorCQkJY2FzZSBTdGFuZGFyZFBhY2thZ2UuU1RBTkRBUkRfRElTRUFTRV9NT0RFTF9fUk9BRF9ORVRXT1JLX0lORkVDVElPVVNfUFJPUE9SVElPTjoKKwkJCWNhc2UgU3RhbmRhcmRQYWNrYWdlLlNUQU5EQVJEX0RJU0VBU0VfTU9ERUxfX0NIQVJBQ1RFUklTVElDX01JWElOR19ESVNUQU5DRToKKwkJCQlmaXJlTm90aWZ5Q2hhbmdlZChuZXcgVmlld2VyTm90aWZpY2F0aW9uKG5vdGlmaWNhdGlvbiwgbm90aWZpY2F0aW9uLmdldE5vdGlmaWVyKCksIGZhbHNlLCB0cnVlKSk7CisJCQkJcmV0dXJuOworCQl9CisJCXN1cGVyLm5vdGlmeUNoYW5nZWQobm90aWZpY2F0aW9uKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFkZHMge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lZGl0LmNvbW1hbmQuQ29tbWFuZFBhcmFtZXRlcn1zIGRlc2NyaWJpbmcgdGhlIGNoaWxkcmVuCisJICogdGhhdCBjYW4gYmUgY3JlYXRlZCB1bmRlciB0aGlzIG9iamVjdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jCisJICogLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgdm9pZCBjb2xsZWN0TmV3Q2hpbGREZXNjcmlwdG9ycyhDb2xsZWN0aW9uPE9iamVjdD4gbmV3Q2hpbGREZXNjcmlwdG9ycywgT2JqZWN0IG9iamVjdCkgeworCQlzdXBlci5jb2xsZWN0TmV3Q2hpbGREZXNjcmlwdG9ycyhuZXdDaGlsZERlc2NyaXB0b3JzLCBvYmplY3QpOworCX0KKworfQpkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9zdGFuZGFyZC9wcm92aWRlci9TdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsSXRlbVByb3ZpZGVyLmphdmEgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3N0YW5kYXJkL3Byb3ZpZGVyL1N0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWxJdGVtUHJvdmlkZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMTNhYjIxCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9zdGFuZGFyZC9wcm92aWRlci9TdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsSXRlbVByb3ZpZGVyLmphdmEKQEAgLTAsMCArMSwxMjMgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLnByb3ZpZGVyOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOworaW1wb3J0IGphdmEudXRpbC5MaXN0OworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5VUkk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JRWRpdGluZ0RvbWFpbkl0ZW1Qcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbUxhYmVsUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1Qcm9wZXJ0eVNvdXJjZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JU3RydWN0dXJlZEl0ZW1Db250ZW50UHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVRyZWVJdGVtQ29udGVudFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuVmlld2VyTm90aWZpY2F0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5HcmFwaFBhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkUGFja2FnZTsKKworLyoqCisgKiBUaGlzIGlzIHRoZSBpdGVtIHByb3ZpZGVyIGFkYXB0ZXIgZm9yIGEge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsfSBvYmplY3QuCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIFN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWxJdGVtUHJvdmlkZXIgZXh0ZW5kcworCQlEaXNlYXNlTW9kZWxMYWJlbEl0ZW1Qcm92aWRlciBpbXBsZW1lbnRzIElFZGl0aW5nRG9tYWluSXRlbVByb3ZpZGVyLAorCQlJU3RydWN0dXJlZEl0ZW1Db250ZW50UHJvdmlkZXIsIElUcmVlSXRlbUNvbnRlbnRQcm92aWRlciwKKwkJSUl0ZW1MYWJlbFByb3ZpZGVyLCBJSXRlbVByb3BlcnR5U291cmNlIHsKKwkvKioKKwkgKiBUaGlzIGNvbnN0cnVjdHMgYW4gaW5zdGFuY2UgZnJvbSBhIGZhY3RvcnkgYW5kIGEgbm90aWZpZXIuIDwhLS0KKwkgKiBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAcGFyYW0gYWRhcHRlckZhY3RvcnkKKwkgKiAKKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWxJdGVtUHJvdmlkZXIoQWRhcHRlckZhY3RvcnkgYWRhcHRlckZhY3RvcnkpIHsKKwkJc3VwZXIoYWRhcHRlckZhY3RvcnkpOworCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyB0aGUgcHJvcGVydHkgZGVzY3JpcHRvcnMgZm9yIHRoZSBhZGFwdGVkIGNsYXNzLiA8IS0tCisJICogYmVnaW4tdXNlci1kb2MgLS0+CisJICogCisJICogQHBhcmFtIG9iamVjdAorCSAqIEByZXR1cm4KKwkgKiAKKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIExpc3Q8SUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I+IGdldFByb3BlcnR5RGVzY3JpcHRvcnMoT2JqZWN0IG9iamVjdCkgeworCQlpZiAoaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMgPT0gbnVsbCkgeworCQkJc3VwZXIuZ2V0UHJvcGVydHlEZXNjcmlwdG9ycyhvYmplY3QpOworCisJCX0KKwkJcmV0dXJuIGl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzOworCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyB0aGUgbGFiZWwgdGV4dCBmb3IgdGhlIGFkYXB0ZWQgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYworCSAqIC0tPgorCSAqIAorCSAqIEBwYXJhbSBvYmplY3QKKwkgKiAKKwkgKiBAcmV0dXJuCisJICogCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBTdHJpbmcgZ2V0VGV4dChPYmplY3Qgb2JqZWN0KSB7CisJCVVSSSBsYWJlbFZhbHVlID0gKChTdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsKW9iamVjdCkuZ2V0VVJJKCk7CisJCVN0cmluZyBsYWJlbCA9IGxhYmVsVmFsdWUgPT0gbnVsbCA/IG51bGwgOiBsYWJlbFZhbHVlLnRvU3RyaW5nKCk7CisJCXJldHVybiBsYWJlbCA9PSBudWxsIHx8IGxhYmVsLmxlbmd0aCgpID09IDAgPworCQkJZ2V0U3RyaW5nKCJfVUlfU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbF90eXBlIikgOiAvLyROT04tTkxTLTEkCisJCQlnZXRTdHJpbmcoIl9VSV9TdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsX3R5cGUiKSArICIgIiArIGxhYmVsOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKKwl9CisKKwkvKioKKwkgKiBUaGlzIGhhbmRsZXMgbW9kZWwgbm90aWZpY2F0aW9ucyBieSBjYWxsaW5nIHtAbGluayAjdXBkYXRlQ2hpbGRyZW59IHRvIHVwZGF0ZSBhbnkgY2FjaGVkCisJICogY2hpbGRyZW4gYW5kIGJ5IGNyZWF0aW5nIGEgdmlld2VyIG5vdGlmaWNhdGlvbiwgd2hpY2ggaXQgcGFzc2VzIHRvIHtAbGluayAjZmlyZU5vdGlmeUNoYW5nZWR9LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogCisJICogQHBhcmFtIG5vdGlmaWNhdGlvbgorCSAqIAorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBub3RpZnlDaGFuZ2VkKE5vdGlmaWNhdGlvbiBub3RpZmljYXRpb24pIHsKKwkJdXBkYXRlQ2hpbGRyZW4obm90aWZpY2F0aW9uKTsKKwkJc3VwZXIubm90aWZ5Q2hhbmdlZChub3RpZmljYXRpb24pOworCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmVkaXQuY29tbWFuZC5Db21tYW5kUGFyYW1ldGVyfXMgZGVzY3JpYmluZyB0aGUgY2hpbGRyZW4KKwkgKiB0aGF0IGNhbiBiZSBjcmVhdGVkIHVuZGVyIHRoaXMgb2JqZWN0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MKKwkgKiAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIGNvbGxlY3ROZXdDaGlsZERlc2NyaXB0b3JzKENvbGxlY3Rpb248T2JqZWN0PiBuZXdDaGlsZERlc2NyaXB0b3JzLCBPYmplY3Qgb2JqZWN0KSB7CisJCXN1cGVyLmNvbGxlY3ROZXdDaGlsZERlc2NyaXB0b3JzKG5ld0NoaWxkRGVzY3JpcHRvcnMsIG9iamVjdCk7CisJfQorCit9CmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3N0YW5kYXJkL3Byb3ZpZGVyL1N0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZUl0ZW1Qcm92aWRlci5qYXZhIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9zdGFuZGFyZC9wcm92aWRlci9TdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsVmFsdWVJdGVtUHJvdmlkZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lM2U2YWM0Ci0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9zdGFuZGFyZC9wcm92aWRlci9TdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsVmFsdWVJdGVtUHJvdmlkZXIuamF2YQpAQCAtMCwwICsxLDE5NSBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQucHJvdmlkZXI7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5BZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JRWRpdGluZ0RvbWFpbkl0ZW1Qcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbUxhYmVsUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1Qcm9wZXJ0eVNvdXJjZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JU3RydWN0dXJlZEl0ZW1Db250ZW50UHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVRyZWVJdGVtQ29udGVudFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuVmlld2VyTm90aWZpY2F0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsVmFsdWU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkUGFja2FnZTsKKworLyoqCisgKiBUaGlzIGlzIHRoZSBpdGVtIHByb3ZpZGVyIGFkYXB0ZXIgZm9yIGEge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsVmFsdWV9IG9iamVjdC4KKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbFZhbHVlSXRlbVByb3ZpZGVyIGV4dGVuZHMKKwkJRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZUl0ZW1Qcm92aWRlciBpbXBsZW1lbnRzCisJCUlFZGl0aW5nRG9tYWluSXRlbVByb3ZpZGVyLCBJU3RydWN0dXJlZEl0ZW1Db250ZW50UHJvdmlkZXIsCisJCUlUcmVlSXRlbUNvbnRlbnRQcm92aWRlciwgSUl0ZW1MYWJlbFByb3ZpZGVyLCBJSXRlbVByb3BlcnR5U291cmNlIHsKKwkvKioKKwkgKiBUaGlzIGNvbnN0cnVjdHMgYW4gaW5zdGFuY2UgZnJvbSBhIGZhY3RvcnkgYW5kIGEgbm90aWZpZXIuIDwhLS0KKwkgKiBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAcGFyYW0gYWRhcHRlckZhY3RvcnkKKwkgKiAKKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZUl0ZW1Qcm92aWRlcigKKwkJCUFkYXB0ZXJGYWN0b3J5IGFkYXB0ZXJGYWN0b3J5KSB7CisJCXN1cGVyKGFkYXB0ZXJGYWN0b3J5KTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgdGhlIHByb3BlcnR5IGRlc2NyaXB0b3JzIGZvciB0aGUgYWRhcHRlZCBjbGFzcy4gPCEtLQorCSAqIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBwYXJhbSBvYmplY3QKKwkgKiBAcmV0dXJuCisJICogCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBMaXN0PElJdGVtUHJvcGVydHlEZXNjcmlwdG9yPiBnZXRQcm9wZXJ0eURlc2NyaXB0b3JzKE9iamVjdCBvYmplY3QpIHsKKwkJaWYgKGl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzID09IG51bGwpIHsKKwkJCXN1cGVyLmdldFByb3BlcnR5RGVzY3JpcHRvcnMob2JqZWN0KTsKKworCQkJYWRkU1Byb3BlcnR5RGVzY3JpcHRvcihvYmplY3QpOworCQkJYWRkSW5jaWRlbmNlUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCk7CisJCQlhZGREaXNlYXNlRGVhdGhzUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCk7CisJCX0KKwkJcmV0dXJuIGl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzOworCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyBhIHByb3BlcnR5IGRlc2NyaXB0b3IgZm9yIHRoZSBTIGZlYXR1cmUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYworCSAqIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgYWRkU1Byb3BlcnR5RGVzY3JpcHRvcihPYmplY3Qgb2JqZWN0KSB7CisJCWl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzLmFkZAorCQkJKGNyZWF0ZUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IKKwkJCQkoKChDb21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5KWFkYXB0ZXJGYWN0b3J5KS5nZXRSb290QWRhcHRlckZhY3RvcnkoKSwKKwkJCQkgZ2V0UmVzb3VyY2VMb2NhdG9yKCksCisJCQkJIGdldFN0cmluZygiX1VJX1N0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZV9zX2ZlYXR1cmUiKSwgLy8kTk9OLU5MUy0xJAorCQkJCSBnZXRTdHJpbmcoIl9VSV9Qcm9wZXJ0eURlc2NyaXB0b3JfZGVzY3JpcHRpb24iLCAiX1VJX1N0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZV9zX2ZlYXR1cmUiLCAiX1VJX1N0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZV90eXBlIiksIC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJCAvLyROT04tTkxTLTMkCisJCQkJIFN0YW5kYXJkUGFja2FnZS5MaXRlcmFscy5TVEFOREFSRF9ESVNFQVNFX01PREVMX0xBQkVMX1ZBTFVFX19TLAorCQkJCSB0cnVlLAorCQkJCSBmYWxzZSwKKwkJCQkgZmFsc2UsCisJCQkJIEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IuUkVBTF9WQUxVRV9JTUFHRSwKKwkJCQkgbnVsbCwKKwkJCQkgbnVsbCkpOworCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyBhIHByb3BlcnR5IGRlc2NyaXB0b3IgZm9yIHRoZSBJbmNpZGVuY2UgZmVhdHVyZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBhZGRJbmNpZGVuY2VQcm9wZXJ0eURlc2NyaXB0b3IoT2JqZWN0IG9iamVjdCkgeworCQlpdGVtUHJvcGVydHlEZXNjcmlwdG9ycy5hZGQKKwkJCShjcmVhdGVJdGVtUHJvcGVydHlEZXNjcmlwdG9yCisJCQkJKCgoQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSlhZGFwdGVyRmFjdG9yeSkuZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCksCisJCQkJIGdldFJlc291cmNlTG9jYXRvcigpLAorCQkJCSBnZXRTdHJpbmcoIl9VSV9TdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsVmFsdWVfaW5jaWRlbmNlX2ZlYXR1cmUiKSwgLy8kTk9OLU5MUy0xJAorCQkJCSBnZXRTdHJpbmcoIl9VSV9Qcm9wZXJ0eURlc2NyaXB0b3JfZGVzY3JpcHRpb24iLCAiX1VJX1N0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZV9pbmNpZGVuY2VfZmVhdHVyZSIsICJfVUlfU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbFZhbHVlX3R5cGUiKSwgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkIC8vJE5PTi1OTFMtMyQKKwkJCQkgU3RhbmRhcmRQYWNrYWdlLkxpdGVyYWxzLlNUQU5EQVJEX0RJU0VBU0VfTU9ERUxfTEFCRUxfVkFMVUVfX0lOQ0lERU5DRSwKKwkJCQkgdHJ1ZSwKKwkJCQkgZmFsc2UsCisJCQkJIGZhbHNlLAorCQkJCSBJdGVtUHJvcGVydHlEZXNjcmlwdG9yLlJFQUxfVkFMVUVfSU1BR0UsCisJCQkJIG51bGwsCisJCQkJIG51bGwpKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFkZHMgYSBwcm9wZXJ0eSBkZXNjcmlwdG9yIGZvciB0aGUgRGlzZWFzZSBEZWF0aHMgZmVhdHVyZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBhZGREaXNlYXNlRGVhdGhzUHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdCBvYmplY3QpIHsKKwkJaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMuYWRkCisJCQkoY3JlYXRlSXRlbVByb3BlcnR5RGVzY3JpcHRvcgorCQkJCSgoKENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnkpYWRhcHRlckZhY3RvcnkpLmdldFJvb3RBZGFwdGVyRmFjdG9yeSgpLAorCQkJCSBnZXRSZXNvdXJjZUxvY2F0b3IoKSwKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbFZhbHVlX2Rpc2Vhc2VEZWF0aHNfZmVhdHVyZSIpLCAvLyROT04tTkxTLTEkCisJCQkJIGdldFN0cmluZygiX1VJX1Byb3BlcnR5RGVzY3JpcHRvcl9kZXNjcmlwdGlvbiIsICJfVUlfU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbFZhbHVlX2Rpc2Vhc2VEZWF0aHNfZmVhdHVyZSIsICJfVUlfU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbFZhbHVlX3R5cGUiKSwgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkIC8vJE5PTi1OTFMtMyQKKwkJCQkgU3RhbmRhcmRQYWNrYWdlLkxpdGVyYWxzLlNUQU5EQVJEX0RJU0VBU0VfTU9ERUxfTEFCRUxfVkFMVUVfX0RJU0VBU0VfREVBVEhTLAorCQkJCSB0cnVlLAorCQkJCSBmYWxzZSwKKwkJCQkgZmFsc2UsCisJCQkJIEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IuUkVBTF9WQUxVRV9JTUFHRSwKKwkJCQkgbnVsbCwKKwkJCQkgbnVsbCkpOworCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyB0aGUgbGFiZWwgdGV4dCBmb3IgdGhlIGFkYXB0ZWQgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYworCSAqIC0tPgorCSAqIAorCSAqIEBwYXJhbSBvYmplY3QKKwkgKiBAcmV0dXJuCisJICogCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBTdHJpbmcgZ2V0VGV4dChPYmplY3Qgb2JqZWN0KSB7CisJCVN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZSBzdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsVmFsdWUgPSAoU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbFZhbHVlKW9iamVjdDsKKwkJcmV0dXJuIGdldFN0cmluZygiX1VJX1N0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZV90eXBlIikgKyAiICIgKyBzdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsVmFsdWUuZ2V0UG9wdWxhdGlvbkNvdW50KCk7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAorCX0KKworCS8qKgorCSAqIFRoaXMgaGFuZGxlcyBtb2RlbCBub3RpZmljYXRpb25zIGJ5IGNhbGxpbmcge0BsaW5rICN1cGRhdGVDaGlsZHJlbn0gdG8gdXBkYXRlIGFueSBjYWNoZWQKKwkgKiBjaGlsZHJlbiBhbmQgYnkgY3JlYXRpbmcgYSB2aWV3ZXIgbm90aWZpY2F0aW9uLCB3aGljaCBpdCBwYXNzZXMgdG8ge0BsaW5rICNmaXJlTm90aWZ5Q2hhbmdlZH0uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAcGFyYW0gbm90aWZpY2F0aW9uCisJICogCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIG5vdGlmeUNoYW5nZWQoTm90aWZpY2F0aW9uIG5vdGlmaWNhdGlvbikgeworCQl1cGRhdGVDaGlsZHJlbihub3RpZmljYXRpb24pOworCisJCXN3aXRjaCAobm90aWZpY2F0aW9uLmdldEZlYXR1cmVJRChTdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsVmFsdWUuY2xhc3MpKSB7CisJCQljYXNlIFN0YW5kYXJkUGFja2FnZS5TVEFOREFSRF9ESVNFQVNFX01PREVMX0xBQkVMX1ZBTFVFX19TOgorCQkJY2FzZSBTdGFuZGFyZFBhY2thZ2UuU1RBTkRBUkRfRElTRUFTRV9NT0RFTF9MQUJFTF9WQUxVRV9fSU5DSURFTkNFOgorCQkJY2FzZSBTdGFuZGFyZFBhY2thZ2UuU1RBTkRBUkRfRElTRUFTRV9NT0RFTF9MQUJFTF9WQUxVRV9fRElTRUFTRV9ERUFUSFM6CisJCQkJZmlyZU5vdGlmeUNoYW5nZWQobmV3IFZpZXdlck5vdGlmaWNhdGlvbihub3RpZmljYXRpb24sIG5vdGlmaWNhdGlvbi5nZXROb3RpZmllcigpLCBmYWxzZSwgdHJ1ZSkpOworCQkJCXJldHVybjsKKwkJfQorCQlzdXBlci5ub3RpZnlDaGFuZ2VkKG5vdGlmaWNhdGlvbik7CisJfQorCisJLyoqCisJICogVGhpcyBhZGRzIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuZWRpdC5jb21tYW5kLkNvbW1hbmRQYXJhbWV0ZXJ9cyBkZXNjcmliaW5nIHRoZSBjaGlsZHJlbgorCSAqIHRoYXQgY2FuIGJlIGNyZWF0ZWQgdW5kZXIgdGhpcyBvYmplY3QuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYworCSAqIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgY29sbGVjdE5ld0NoaWxkRGVzY3JpcHRvcnMoQ29sbGVjdGlvbjxPYmplY3Q+IG5ld0NoaWxkRGVzY3JpcHRvcnMsIE9iamVjdCBvYmplY3QpIHsKKwkJc3VwZXIuY29sbGVjdE5ld0NoaWxkRGVzY3JpcHRvcnMobmV3Q2hpbGREZXNjcmlwdG9ycywgb2JqZWN0KTsKKwl9CisKK30KZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvc3RhbmRhcmQvcHJvdmlkZXIvU3RhbmRhcmRIaXN0b3J5UHJvdmlkZXJBZGFwdGVyRmFjdG9yeS5qYXZhIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9zdGFuZGFyZC9wcm92aWRlci9TdGFuZGFyZEhpc3RvcnlQcm92aWRlckFkYXB0ZXJGYWN0b3J5LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzZlMzYzMwotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvc3RhbmRhcmQvcHJvdmlkZXIvU3RhbmRhcmRIaXN0b3J5UHJvdmlkZXJBZGFwdGVyRmFjdG9yeS5qYXZhCkBAIC0wLDAgKzEsMjkxIEBACisvLyBTdGFuZGFyZEhpc3RvcnlQcm92aWRlckFkYXB0ZXJGYWN0b3J5LmphdmEKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLnByb3ZpZGVyOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uczsKK2ltcG9ydCBqYXZhLnV0aWwuRGF0ZTsKK2ltcG9ydCBqYXZhLnV0aWwuTWFwOworaW1wb3J0IGphdmEudXRpbC5UcmVlTWFwOworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuQWRhcHRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnV0aWwuRWNvcmVVdGlsOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkNoYW5nZU5vdGlmaWVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkNvbXBvc2VhYmxlQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuQ29tcG9zZWRBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JQ2hhbmdlTm90aWZpZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSU5vdGlmeUNoYW5nZWRMaXN0ZW5lcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmFkYXB0ZXJzLmhpc3RvcnkuSGlzdG9yeVByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uYWRhcHRlcnMuaGlzdG9yeS5IaXN0b3J5UHJvdmlkZXJBZGFwdGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uYWRhcHRlcnMuaGlzdG9yeS5IaXN0b3J5UHJvdmlkZXJBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLklkZW50aWZpYWJsZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguR3JhcGhQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5MYWJlbFZhbHVlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5Nb2RlbEZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLlNURU1UaW1lOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuYWRhcHRlcnMucmVsYXRpdmV2YWx1ZS5SZWxhdGl2ZVZhbHVlUHJvdmlkZXJBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuRGlzZWFzZU1vZGVsTGFiZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLnV0aWwuU3RhbmRhcmRBZGFwdGVyRmFjdG9yeTsKKworLyoqCisgKiBUaGlzIGNsYXNzIHJlcHJlc2VudHMKKyAqLworcHVibGljIGNsYXNzIFN0YW5kYXJkSGlzdG9yeVByb3ZpZGVyQWRhcHRlckZhY3RvcnkgZXh0ZW5kcworCQlTdGFuZGFyZEFkYXB0ZXJGYWN0b3J5IGltcGxlbWVudHMgUmVsYXRpdmVWYWx1ZVByb3ZpZGVyQWRhcHRlckZhY3RvcnkgeworCisJLyoqCisJICogVGhpcyBrZWVwcyB0cmFjayBvZiB0aGUgcm9vdCBhZGFwdGVyIGZhY3RvcnkgdGhhdCBkZWxlZ2F0ZXMgdG8gdGhpcworCSAqIGFkYXB0ZXIgZmFjdG9yeS4KKwkgKi8KKwlwcm90ZWN0ZWQgQ29tcG9zZWRBZGFwdGVyRmFjdG9yeSBwYXJlbnRBZGFwdGVyRmFjdG9yeTsKKworCS8qKgorCSAqIFRoaXMgaXMgdXNlZCB0byBpbXBsZW1lbnQKKwkgKiB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUNoYW5nZU5vdGlmaWVyfS4KKwkgKi8KKwlwcm90ZWN0ZWQgSUNoYW5nZU5vdGlmaWVyIGNoYW5nZU5vdGlmaWVyID0gbmV3IENoYW5nZU5vdGlmaWVyKCk7CisKKwkvKioKKwkgKiBEZWZhdWx0IENvbnN0cnVjdG9yCisJICovCisJcHVibGljIFN0YW5kYXJkSGlzdG9yeVByb3ZpZGVyQWRhcHRlckZhY3RvcnkoKSB7CisJCXN1cGVyKCk7CisJCUhpc3RvcnlQcm92aWRlckFkYXB0ZXJGYWN0b3J5LklOU1RBTkNFLmFkZEFkYXB0ZXJGYWN0b3J5KHRoaXMpOworCX0gLy8gU3RhbmRhcmRIaXN0b3J5UHJvdmlkZXJBZGFwdGVyRmFjdG9yeQorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQudXRpbC5TdGFuZGFyZEFkYXB0ZXJGYWN0b3J5I2NyZWF0ZURpc2Vhc2VNb2RlbExhYmVsQWRhcHRlcigpCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlRGlzZWFzZU1vZGVsTGFiZWxBZGFwdGVyKCkgeworCQlyZXR1cm4gbmV3IERpc2Vhc2VNb2RlbExhYmVsSGlzdG9yeVByb3ZpZGVyKCk7CisJfSAvLyBjcmVhdGVEaXNlYXNlTW9kZWxMYWJlbEFkYXB0ZXIKKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUNoYW5nZU5vdGlmaWVyI2FkZExpc3RlbmVyKG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklOb3RpZnlDaGFuZ2VkTGlzdGVuZXIpCisJICovCisJcHVibGljIHZvaWQgYWRkTGlzdGVuZXIoZmluYWwgSU5vdGlmeUNoYW5nZWRMaXN0ZW5lciBub3RpZnlDaGFuZ2VkTGlzdGVuZXIpIHsKKwkJY2hhbmdlTm90aWZpZXIuYWRkTGlzdGVuZXIobm90aWZ5Q2hhbmdlZExpc3RlbmVyKTsKKwl9CisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklDaGFuZ2VOb3RpZmllciNmaXJlTm90aWZ5Q2hhbmdlZChvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb24pCisJICovCisJcHVibGljIHZvaWQgZmlyZU5vdGlmeUNoYW5nZWQoZmluYWwgTm90aWZpY2F0aW9uIG5vdGlmaWNhdGlvbikgeworCQljaGFuZ2VOb3RpZmllci5maXJlTm90aWZ5Q2hhbmdlZChub3RpZmljYXRpb24pOworCQlpZiAocGFyZW50QWRhcHRlckZhY3RvcnkgIT0gbnVsbCkgeworCQkJcGFyZW50QWRhcHRlckZhY3RvcnkuZmlyZU5vdGlmeUNoYW5nZWQobm90aWZpY2F0aW9uKTsKKwkJfQorCX0KKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUNoYW5nZU5vdGlmaWVyI3JlbW92ZUxpc3RlbmVyKG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklOb3RpZnlDaGFuZ2VkTGlzdGVuZXIpCisJICovCisJcHVibGljIHZvaWQgcmVtb3ZlTGlzdGVuZXIoCisJCQlmaW5hbCBJTm90aWZ5Q2hhbmdlZExpc3RlbmVyIG5vdGlmeUNoYW5nZWRMaXN0ZW5lcikgeworCQljaGFuZ2VOb3RpZmllci5yZW1vdmVMaXN0ZW5lcihub3RpZnlDaGFuZ2VkTGlzdGVuZXIpOworCX0KKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSNnZXRSb290QWRhcHRlckZhY3RvcnkoKQorCSAqLworCXB1YmxpYyBDb21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5IGdldFJvb3RBZGFwdGVyRmFjdG9yeSgpIHsKKwkJcmV0dXJuIHBhcmVudEFkYXB0ZXJGYWN0b3J5ID09IG51bGwgPyB0aGlzIDogcGFyZW50QWRhcHRlckZhY3RvcnkKKwkJCQkuZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCk7CisJfQorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5Db21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5I3NldFBhcmVudEFkYXB0ZXJGYWN0b3J5KG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkNvbXBvc2VkQWRhcHRlckZhY3RvcnkpCisJICovCisJcHVibGljIHZvaWQgc2V0UGFyZW50QWRhcHRlckZhY3RvcnkoCisJCQlmaW5hbCBDb21wb3NlZEFkYXB0ZXJGYWN0b3J5IHBhcmVudEFkYXB0ZXJGYWN0b3J5KSB7CisJCXRoaXMucGFyZW50QWRhcHRlckZhY3RvcnkgPSBwYXJlbnRBZGFwdGVyRmFjdG9yeTsKKwl9CisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC51dGlsLlN0YW5kYXJkQWRhcHRlckZhY3RvcnkjaXNGYWN0b3J5Rm9yVHlwZShqYXZhLmxhbmcuT2JqZWN0KQorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBib29sZWFuIGlzRmFjdG9yeUZvclR5cGUoZmluYWwgT2JqZWN0IHR5cGUpIHsKKwkJcmV0dXJuIHR5cGUgPT0gSGlzdG9yeVByb3ZpZGVyLmNsYXNzIHx8IHN1cGVyLmlzRmFjdG9yeUZvclR5cGUodHlwZSk7CisJfSAvLyBpc0ZhY3RvcnlGb3JUeXBlCisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklEaXNwb3NhYmxlI2Rpc3Bvc2UoKQorCSAqLworCXB1YmxpYyB2b2lkIGRpc3Bvc2UoKSB7CisJCS8vIE5vdGhpbmcKKwl9CisKKwkvKioKKwkgKiBUaGlzIGNsYXNzIGlzIGEgSGlzdG9yeSBQcm92aWRlciBmb3IgRGlzZWFzZU1vZGVsTGFiZWwgaW5zdGFuY2VzLiBJdAorCSAqIHByb3ZpZGVzIGEgY29sbGVjdGlvbiBvZiBoaXN0b3JpYyB2YWx1ZXMgb2YgYSBEaXNlYXNlTW9kZWxMYWJlbAorCSAqLworCXByaXZhdGUgc3RhdGljIGNsYXNzIERpc2Vhc2VNb2RlbExhYmVsSGlzdG9yeVByb3ZpZGVyIGV4dGVuZHMKKwkJCUhpc3RvcnlQcm92aWRlckFkYXB0ZXIgaW1wbGVtZW50cyBIaXN0b3J5UHJvdmlkZXIgeworCisJCWxvbmcgY3ljbGUgPSAwTDsKKwkJZmluYWwgU1RFTVRpbWUgc3RhcnRUaW1lID0gTW9kZWxGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVTVEVNVGltZSgpOworCisJCWZpbmFsIE1hcDxTVEVNVGltZSwgRGlzZWFzZU1vZGVsTGFiZWw+IGhpc3RvcnkgPSBDb2xsZWN0aW9ucy5zeW5jaHJvbml6ZWRNYXAobmV3IFRyZWVNYXA8U1RFTVRpbWUsIERpc2Vhc2VNb2RlbExhYmVsPigpKTsKKworCQkKKwkJLyoqCisJCSAqIEBzZWUgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuaW1wbC5BZGFwdGVySW1wbCNub3RpZnlDaGFuZ2VkKG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbikKKwkJICovCisJCUBPdmVycmlkZQorCQlwdWJsaWMgdm9pZCBub3RpZnlDaGFuZ2VkKGZpbmFsIE5vdGlmaWNhdGlvbiBtc2cpIHsKKwkJCXN3aXRjaCAobXNnLmdldEV2ZW50VHlwZSgpKSB7CisJCQljYXNlIE5vdGlmaWNhdGlvbi5TRVQ6CisJCQkJLy8gSXMgaXQgc2V0dGluZyB0aGUgbmV4dFZhbHVlPworCQkJCXN3aXRjaCAobXNnLmdldEZlYXR1cmVJRChMYWJlbFZhbHVlLmNsYXNzKSkgeworCQkJCWNhc2UgR3JhcGhQYWNrYWdlLkRZTkFNSUNfTEFCRUxfX05FWFRfVkFMVUU6CisJCQkJCS8vIElmIHRoZSBuZXh0IHZhbHVlIG51bGw/CisJCQkJCQorCQkJCQlpZiAobXNnLmdldE5ld1ZhbHVlKCkgIT0gbnVsbCkgeworCQkJCQkJLy8gTm8KKwkJCQkJCVNURU1UaW1lIHRpbWVLZXkgPSBnZW5lcmF0ZU5leHRTVEVNVGltZShjeWNsZSsrKTsKKwkJCQkJCXN5bmNocm9uaXplZCAoaGlzdG9yeSkgeworCQkJCQkJCS8vIE1ha2Ugb2YgY29weSBvZiB0aGUgZGlzZWFzZSBtb2RlbCBsYWJlbAorCQkJCQkJCWZpbmFsIERpc2Vhc2VNb2RlbExhYmVsIGRtbCA9IChEaXNlYXNlTW9kZWxMYWJlbClFY29yZVV0aWwKKwkJCQkJCQkJCS5jb3B5KChEaXNlYXNlTW9kZWxMYWJlbCkgZ2V0VGFyZ2V0KCkpOworCQkJCQkJCS8vIFdoZW4geW91IGNvcHkgYW4gRU9iamVjdCwgdGhlIHJlZmVyZW5jZXMgYXJlCisJCQkJCQkJLy8gY29waWVkIGFzIHdlbGwgdGhpcyBtZWFucyB0aGF0IHRoZSBOb2RlIHRoYXQKKwkJCQkJCQkvLyByZWZlcmVuY2VkIHRoZSBvcmlnaW5hbCBEaXNlYXNlTW9kZWxMYWJlbCB3aWxsCisJCQkJCQkJLy8gYWxzbyByZWZlcmVuY2UgdGhlIGNvcHkuIFRoaXMgYWRkcyB0aGUgY29weSB0bworCQkJCQkJCS8vIHRoZSBsaXN0IG9mIExhYmVscyBtYWludGFpbmVkIGJ5IHRoZSBOb2RlLiBXZQorCQkJCQkJCS8vIG5lZWQgdG8gcmVtb3ZlIGl0IGZyb20gdGhlIGxpc3Qgc28gdGhhdCB3ZSBkb24ndAorCQkJCQkJCS8vIGdldCBleHRyYW5lb3VzIExhYmVscyBoYW5naW5nIGFyb3VuZC4KKwkJCQkJCQlkbWwuZ2V0Tm9kZSgpLmdldExhYmVscygpLnJlbW92ZShkbWwpOworCQkJCQkJCWhpc3RvcnkucHV0KHRpbWVLZXksIGRtbCk7CisJCQkJCQl9Ly8gc3luY2hyb25pemVkCisJCQkJCQlmaXJlSGlzdG9yeUV4dGVuZGVkKCk7CisJCQkJCX0gLy8gaWYgbm90IG51bGwKKwkJCQkJYnJlYWs7CisKKwkJCQlkZWZhdWx0OgorCQkJCQlicmVhazsKKwkJCQl9IC8vIHN3aXRjaCBMYWJlbFZhbHVlIGZlYXR1cmUgSWQKKwkJCQlicmVhazsKKworCQkJZGVmYXVsdDoKKwkJCQlicmVhazsKKwkJCX0gLy8gc3dpdGNoCisKKwkJfSAvLyBub3RpZnlDaGFuZ2VkCisKKwkJLyoqCisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5hZGFwdGVycy5oaXN0b3J5Lkhpc3RvcnlQcm92aWRlckFkYXB0ZXIjZ2V0QWxsSGlzdG9yaWNUaW1lVmFsdWVzKCkKKwkJICovCisJCUBPdmVycmlkZQorCQlwdWJsaWMgU1RFTVRpbWVbXSBnZXRBbGxIaXN0b3JpY1RpbWVWYWx1ZXMoKSB7CisJCQlTVEVNVGltZVtdIHRpbWUgPSBudWxsOworCQkJc3luY2hyb25pemVkKGhpc3RvcnkpIHsKKwkJCQl0aW1lPWhpc3Rvcnkua2V5U2V0KCkudG9BcnJheShuZXcgU1RFTVRpbWVbMF0pOworCQkJfQorCQkJcmV0dXJuIHRpbWU7CisJCX0KKworCQkvKioKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmFkYXB0ZXJzLmhpc3RvcnkuSGlzdG9yeVByb3ZpZGVyQWRhcHRlciNnZXRBbGxIaXN0b3JpY0luc3RhbmNlcygpCisJCSAqLworCQlAT3ZlcnJpZGUKKwkJcHVibGljIElkZW50aWZpYWJsZVtdIGdldEFsbEhpc3RvcmljSW5zdGFuY2VzKCkgeworCQkJSWRlbnRpZmlhYmxlW10gYWxsSW5zdGFuY2VzID0gbnVsbDsKKwkJCXN5bmNocm9uaXplZChoaXN0b3J5KSB7CisJCQkJYWxsSW5zdGFuY2VzPWhpc3RvcnkudmFsdWVzKCkudG9BcnJheShuZXcgSWRlbnRpZmlhYmxlWzBdKTsKKwkJCX0KKwkJCXJldHVybiBhbGxJbnN0YW5jZXM7CisJCX0KKworCQkKKworCQkvKioKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmFkYXB0ZXJzLmhpc3RvcnkuSGlzdG9yeVByb3ZpZGVyQWRhcHRlciNnZXRIaXN0b3JpY0luc3RhbmNlcygpCisJCSAqLworCQlAT3ZlcnJpZGUKKwkJcHVibGljIElkZW50aWZpYWJsZVtdIGdldEhpc3RvcmljSW5zdGFuY2VzKFNURU1UaW1lW10gdGltZVJhbmdlKSB7CisJCQlJZGVudGlmaWFibGVbXSBhbGxWYWx1ZXMgPSBnZXRBbGxIaXN0b3JpY0luc3RhbmNlcygpOworCQkJSWRlbnRpZmlhYmxlW10gcmV0VmFsID0gbmV3IElkZW50aWZpYWJsZVt0aW1lUmFuZ2UubGVuZ3RoXTsKKwkJCVN5c3RlbS5hcnJheWNvcHkoYWxsVmFsdWVzLCAwLCByZXRWYWwsIDAsIHRpbWVSYW5nZS5sZW5ndGgpOworCQkJcmV0dXJuIHJldFZhbDsKKwkJfQorCQkKKwkJLyoqCisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5hZGFwdGVycy5oaXN0b3J5Lkhpc3RvcnlQcm92aWRlckFkYXB0ZXIjZ2V0RWFybGllc3RDeWNsZU51bWJlcigpCisJCSAqLworCQlAT3ZlcnJpZGUKKwkJcHVibGljIGludCBnZXRFYXJsaWVzdEN5Y2xlTnVtYmVyKCkgeworCQkJbG9uZyByZXRWYWx1ZSA9IDA7CisJCQlzeW5jaHJvbml6ZWQoaGlzdG9yeSkgeworCQkJCXRyeSB7CisJCQkJCXJldFZhbHVlID0gaGlzdG9yeS5rZXlTZXQoKS50b0FycmF5KG5ldyBMb25nWzBdKVswXS5sb25nVmFsdWUoKTsKKwkJCQl9IGNhdGNoIChmaW5hbCBSdW50aW1lRXhjZXB0aW9uIGUpIHsKKwkJCQkJLy8gSWdub3JlLCByZXR1cm4gMAorCQkJCX0KKwkJCX0KKwkJCXJldHVybiAoaW50KSByZXRWYWx1ZTsKKwkJfSAvLyBnZXRFYXJsaWVzdEN5Y2xlTnVtYmVyCisKKwkJLyoqCisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5hZGFwdGVycy5oaXN0b3J5Lkhpc3RvcnlQcm92aWRlckFkYXB0ZXIjZ2V0RWFybGllc3RUaW1lVmFsdWUoKQorCQkgKi8KKwkJQE92ZXJyaWRlCisJCXB1YmxpYyBTVEVNVGltZSBnZXRFYXJsaWVzdFRpbWVWYWx1ZSgpIHsKKwkJCXJldHVybiBnZW5lcmF0ZUhpc3RvcmljU1RFTVRpbWUoZ2V0RWFybGllc3RDeWNsZU51bWJlcigpKTsKKwkJfQorCisJCS8qKgorCQkgKiBAcmV0dXJuCisJCSAqLworCQlwcml2YXRlIFNURU1UaW1lIGdlbmVyYXRlSGlzdG9yaWNTVEVNVGltZShmaW5hbCBpbnQgZGF5c0luUGFzdCkgeworCQkJZmluYWwgU1RFTVRpbWUgcmV0VmFsdWUgPSBNb2RlbEZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZVNURU1UaW1lKCk7CisJCQlmaW5hbCBsb25nIGRheXNBZ28gPSByZXRWYWx1ZS5nZXRUaW1lKCkuZ2V0VGltZSgpIC0gZGF5c0luUGFzdAorCQkJCQkqIFNURU1UaW1lLlVuaXRzLkRBWS5nZXRNaWxsaXNlY29uZHMoKTsKKwkJCXJldFZhbHVlLnNldFRpbWUobmV3IERhdGUoZGF5c0FnbykpOworCQkJcmV0dXJuIHJldFZhbHVlOworCQl9IC8vIGdlbmVyYXRlSGlzdG9yaWNTVEVNVGltZQorCQkKKworCQkvKioKKwkJICogQHJldHVybgorCQkgKi8KKwkJcHJpdmF0ZSBTVEVNVGltZSBnZW5lcmF0ZU5leHRTVEVNVGltZShmaW5hbCBsb25nIGRheXNJbkZ1dHVyZSkgeworCQkJZmluYWwgU1RFTVRpbWUgcmV0VmFsdWUgPSBNb2RlbEZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZVNURU1UaW1lKCk7CisJCQlmaW5hbCBsb25nIGRheSA9IHN0YXJ0VGltZS5nZXRUaW1lKCkuZ2V0VGltZSgpICsgZGF5c0luRnV0dXJlCisJCQkJCSogU1RFTVRpbWUuVW5pdHMuREFZLmdldE1pbGxpc2Vjb25kcygpOworCQkJcmV0VmFsdWUuc2V0VGltZShuZXcgRGF0ZShkYXkpKTsKKwkJCXJldHVybiByZXRWYWx1ZTsKKwkJfSAvLyBnZW5lcmF0ZUhpc3RvcmljU1RFTVRpbWUKKwkJCisJCQorCisJCS8qKgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uYWRhcHRlcnMuaGlzdG9yeS5IaXN0b3J5UHJvdmlkZXJBZGFwdGVyI3Jlc2V0KCkKKwkJICovCisJCUBPdmVycmlkZQorCQlwdWJsaWMgdm9pZCByZXNldCgpIHsKKworCQkJY3ljbGUgPSAwOworCQkJc3luY2hyb25pemVkKGhpc3RvcnkpIHsKKwkJCQloaXN0b3J5LmNsZWFyKCk7CisJCQl9CisJCQkKKwkJCS8vIFRoZSBzdXBlciBjbGFzcyB3aWxsIHRlbGwgdGhlIGxpc3RlbmVycyB0aGF0IHRoZSBoaXN0b3J5IGhhcworCQkJLy8gY2hhbmdlZC4KKwkJCXN1cGVyLnJlc2V0KCk7CisJCX0KKworCX0gLy8gRGlzZWFzZU1vZGVsTGFiZWxIaXN0b3J5UHJvdmlkZXIKKworfSAvLyBTdGFuZGFyZEhpc3RvcnlQcm92aWRlckFkYXB0ZXJGYWN0b3J5CmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3N0YW5kYXJkL3Byb3ZpZGVyL1N0YW5kYXJkSW5mZWN0b3JJdGVtUHJvdmlkZXIuamF2YSBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvc3RhbmRhcmQvcHJvdmlkZXIvU3RhbmRhcmRJbmZlY3Rvckl0ZW1Qcm92aWRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE4ODMxM2UKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3N0YW5kYXJkL3Byb3ZpZGVyL1N0YW5kYXJkSW5mZWN0b3JJdGVtUHJvdmlkZXIuamF2YQpAQCAtMCwwICsxLDExMSBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQucHJvdmlkZXI7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5BZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUVkaXRpbmdEb21haW5JdGVtUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1MYWJlbFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtUHJvcGVydHlEZXNjcmlwdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtUHJvcGVydHlTb3VyY2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVN0cnVjdHVyZWRJdGVtQ29udGVudFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklUcmVlSXRlbUNvbnRlbnRQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmRJbmZlY3RvcjsKKworLyoqCisgKiBUaGlzIGlzIHRoZSBpdGVtIHByb3ZpZGVyIGFkYXB0ZXIgZm9yIGEge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZEluZmVjdG9yfSBvYmplY3QuCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIFN0YW5kYXJkSW5mZWN0b3JJdGVtUHJvdmlkZXIgZXh0ZW5kcyBJbmZlY3Rvckl0ZW1Qcm92aWRlcgorCQlpbXBsZW1lbnRzIElFZGl0aW5nRG9tYWluSXRlbVByb3ZpZGVyLCBJU3RydWN0dXJlZEl0ZW1Db250ZW50UHJvdmlkZXIsCisJCUlUcmVlSXRlbUNvbnRlbnRQcm92aWRlciwgSUl0ZW1MYWJlbFByb3ZpZGVyLCBJSXRlbVByb3BlcnR5U291cmNlIHsKKwkvKioKKwkgKiBUaGlzIGNvbnN0cnVjdHMgYW4gaW5zdGFuY2UgZnJvbSBhIGZhY3RvcnkgYW5kIGEgbm90aWZpZXIuIDwhLS0KKwkgKiBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAcGFyYW0gYWRhcHRlckZhY3RvcnkKKwkgKiAKKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFN0YW5kYXJkSW5mZWN0b3JJdGVtUHJvdmlkZXIoQWRhcHRlckZhY3RvcnkgYWRhcHRlckZhY3RvcnkpIHsKKwkJc3VwZXIoYWRhcHRlckZhY3RvcnkpOworCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyB0aGUgcHJvcGVydHkgZGVzY3JpcHRvcnMgZm9yIHRoZSBhZGFwdGVkIGNsYXNzLiA8IS0tCisJICogYmVnaW4tdXNlci1kb2MgLS0+CisJICogCisJICogQHBhcmFtIG9iamVjdAorCSAqIEByZXR1cm4KKwkgKiAKKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIExpc3Q8SUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I+IGdldFByb3BlcnR5RGVzY3JpcHRvcnMoT2JqZWN0IG9iamVjdCkgeworCQlpZiAoaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMgPT0gbnVsbCkgeworCQkJc3VwZXIuZ2V0UHJvcGVydHlEZXNjcmlwdG9ycyhvYmplY3QpOworCisJCX0KKwkJcmV0dXJuIGl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzOworCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyB0aGUgbGFiZWwgdGV4dCBmb3IgdGhlIGFkYXB0ZWQgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYworCSAqIC0tPgorCSAqIAorCSAqIEBwYXJhbSBvYmplY3QKKwkgKiBAcmV0dXJuCisJICogCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgU3RyaW5nIGdldFRleHQoT2JqZWN0IG9iamVjdCkgeworCQlyZXR1cm4gc3VwZXIuZ2V0VGV4dChvYmplY3QpOworCX0KKworCS8qKgorCSAqIFRoaXMgaGFuZGxlcyBtb2RlbCBub3RpZmljYXRpb25zIGJ5IGNhbGxpbmcge0BsaW5rICN1cGRhdGVDaGlsZHJlbn0gdG8gdXBkYXRlIGFueSBjYWNoZWQKKwkgKiBjaGlsZHJlbiBhbmQgYnkgY3JlYXRpbmcgYSB2aWV3ZXIgbm90aWZpY2F0aW9uLCB3aGljaCBpdCBwYXNzZXMgdG8ge0BsaW5rICNmaXJlTm90aWZ5Q2hhbmdlZH0uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAcGFyYW0gbm90aWZpY2F0aW9uCisJICogCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIG5vdGlmeUNoYW5nZWQoTm90aWZpY2F0aW9uIG5vdGlmaWNhdGlvbikgeworCQl1cGRhdGVDaGlsZHJlbihub3RpZmljYXRpb24pOworCQlzdXBlci5ub3RpZnlDaGFuZ2VkKG5vdGlmaWNhdGlvbik7CisJfQorCisJLyoqCisJICogVGhpcyBhZGRzIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuZWRpdC5jb21tYW5kLkNvbW1hbmRQYXJhbWV0ZXJ9cyBkZXNjcmliaW5nIHRoZSBjaGlsZHJlbgorCSAqIHRoYXQgY2FuIGJlIGNyZWF0ZWQgdW5kZXIgdGhpcyBvYmplY3QuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYworCSAqIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgY29sbGVjdE5ld0NoaWxkRGVzY3JpcHRvcnMoQ29sbGVjdGlvbjxPYmplY3Q+IG5ld0NoaWxkRGVzY3JpcHRvcnMsIE9iamVjdCBvYmplY3QpIHsKKwkJc3VwZXIuY29sbGVjdE5ld0NoaWxkRGVzY3JpcHRvcnMobmV3Q2hpbGREZXNjcmlwdG9ycywgb2JqZWN0KTsKKwl9CisKK30KZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvc3RhbmRhcmQvcHJvdmlkZXIvU3RhbmRhcmRJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeS5qYXZhIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9zdGFuZGFyZC9wcm92aWRlci9TdGFuZGFyZEl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGExMDAwOAotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvc3RhbmRhcmQvcHJvdmlkZXIvU3RhbmRhcmRJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeS5qYXZhCkBAIC0wLDAgKzEsNzAyIEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5wcm92aWRlcjsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OworaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuQWRhcHRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuQ2hhbmdlTm90aWZpZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5Db21wb3NlZEFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklDaGFuZ2VOb3RpZmllcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JRGlzcG9zYWJsZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JRWRpdGluZ0RvbWFpbkl0ZW1Qcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbUxhYmVsUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1Qcm9wZXJ0eVNvdXJjZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JTm90aWZ5Q2hhbmdlZExpc3RlbmVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklTdHJ1Y3R1cmVkSXRlbUNvbnRlbnRQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JVHJlZUl0ZW1Db250ZW50UHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLnV0aWwuU3RhbmRhcmRBZGFwdGVyRmFjdG9yeTsKKworLyoqCisgKiBUaGlzIGlzIHRoZSBmYWN0b3J5IHRoYXQgaXMgdXNlZCB0byBwcm92aWRlIHRoZSBpbnRlcmZhY2VzIG5lZWRlZCB0byBzdXBwb3J0IFZpZXdlcnMuCisgKiBUaGUgYWRhcHRlcnMgZ2VuZXJhdGVkIGJ5IHRoaXMgZmFjdG9yeSBjb252ZXJ0IEVNRiBhZGFwdGVyIG5vdGlmaWNhdGlvbnMgaW50byBjYWxscyB0byB7QGxpbmsgI2ZpcmVOb3RpZnlDaGFuZ2VkIGZpcmVOb3RpZnlDaGFuZ2VkfS4KKyAqIFRoZSBhZGFwdGVycyBhbHNvIHN1cHBvcnQgRWNsaXBzZSBwcm9wZXJ0eSBzaGVldHMuCisgKiBOb3RlIHRoYXQgbW9zdCBvZiB0aGUgYWRhcHRlcnMgYXJlIHNoYXJlZCBhbW9uZyBtdWx0aXBsZSBpbnN0YW5jZXMuCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tCisgKiBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBTdGFuZGFyZEl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5IGV4dGVuZHMgU3RhbmRhcmRBZGFwdGVyRmFjdG9yeQorCQlpbXBsZW1lbnRzIENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnksIElDaGFuZ2VOb3RpZmllciwgSURpc3Bvc2FibGUgeworCS8qKgorCSAqIFRoaXMga2VlcHMgdHJhY2sgb2YgdGhlIHJvb3QgYWRhcHRlciBmYWN0b3J5IHRoYXQgZGVsZWdhdGVzIHRvIHRoaXMgYWRhcHRlciBmYWN0b3J5LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgQ29tcG9zZWRBZGFwdGVyRmFjdG9yeSBwYXJlbnRBZGFwdGVyRmFjdG9yeTsKKworCS8qKgorCSAqIFRoaXMgaXMgdXNlZCB0byBpbXBsZW1lbnQKKwkgKiB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUNoYW5nZU5vdGlmaWVyfS4gPCEtLQorCSAqIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIElDaGFuZ2VOb3RpZmllciBjaGFuZ2VOb3RpZmllciA9IG5ldyBDaGFuZ2VOb3RpZmllcigpOworCisJLyoqCisJICogVGhpcyBrZWVwcyB0cmFjayBvZiBhbGwgdGhlIHN1cHBvcnRlZCB0eXBlcyBjaGVja2VkIGJ5IHtAbGluayAjaXNGYWN0b3J5Rm9yVHlwZSBpc0ZhY3RvcnlGb3JUeXBlfS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tCisJICogZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgQ29sbGVjdGlvbjxPYmplY3Q+IHN1cHBvcnRlZFR5cGVzID0gbmV3IEFycmF5TGlzdDxPYmplY3Q+KCk7CisKKwkvKioKKwkgKiBUaGlzIGNvbnN0cnVjdHMgYW4gaW5zdGFuY2UuIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jCisJICogLS0+CisJICogCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBTdGFuZGFyZEl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5KCkgeworCQlzdXBwb3J0ZWRUeXBlcy5hZGQoSUVkaXRpbmdEb21haW5JdGVtUHJvdmlkZXIuY2xhc3MpOworCQlzdXBwb3J0ZWRUeXBlcy5hZGQoSVN0cnVjdHVyZWRJdGVtQ29udGVudFByb3ZpZGVyLmNsYXNzKTsKKwkJc3VwcG9ydGVkVHlwZXMuYWRkKElUcmVlSXRlbUNvbnRlbnRQcm92aWRlci5jbGFzcyk7CisJCXN1cHBvcnRlZFR5cGVzLmFkZChJSXRlbUxhYmVsUHJvdmlkZXIuY2xhc3MpOworCQlzdXBwb3J0ZWRUeXBlcy5hZGQoSUl0ZW1Qcm9wZXJ0eVNvdXJjZS5jbGFzcyk7CisJfQorCisJLyoqCisJICogVGhpcyBrZWVwcyB0cmFjayBvZiB0aGUgb25lIGFkYXB0ZXIgdXNlZCBmb3IgYWxsIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU0VJUkxhYmVsfSBpbnN0YW5jZXMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBTRUlSTGFiZWxJdGVtUHJvdmlkZXIgc2VpckxhYmVsSXRlbVByb3ZpZGVyOworCisJLyoqCisJICogVGhpcyBjcmVhdGVzIGFuIGFkYXB0ZXIgZm9yIGEKKwkgKiB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlNFSVJMYWJlbH0uIDwhLS0KKwkgKiBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAcmV0dXJuCisJICogCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZVNFSVJMYWJlbEFkYXB0ZXIoKSB7CisJCWlmIChzZWlyTGFiZWxJdGVtUHJvdmlkZXIgPT0gbnVsbCkgeworCQkJc2VpckxhYmVsSXRlbVByb3ZpZGVyID0gbmV3IFNFSVJMYWJlbEl0ZW1Qcm92aWRlcih0aGlzKTsKKwkJfQorCisJCXJldHVybiBzZWlyTGFiZWxJdGVtUHJvdmlkZXI7CisJfQorCisJLyoqCisJICogVGhpcyBrZWVwcyB0cmFjayBvZiB0aGUgb25lIGFkYXB0ZXIgdXNlZCBmb3IgYWxsIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU0VJUkxhYmVsVmFsdWV9IGluc3RhbmNlcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIFNFSVJMYWJlbFZhbHVlSXRlbVByb3ZpZGVyIHNlaXJMYWJlbFZhbHVlSXRlbVByb3ZpZGVyOworCisJLyoqCisJICogVGhpcyBjcmVhdGVzIGFuIGFkYXB0ZXIgZm9yIGEKKwkgKiB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlNFSVJMYWJlbFZhbHVlfS4gPCEtLQorCSAqIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEByZXR1cm4KKwkgKiAKKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlU0VJUkxhYmVsVmFsdWVBZGFwdGVyKCkgeworCQlpZiAoc2VpckxhYmVsVmFsdWVJdGVtUHJvdmlkZXIgPT0gbnVsbCkgeworCQkJc2VpckxhYmVsVmFsdWVJdGVtUHJvdmlkZXIgPSBuZXcgU0VJUkxhYmVsVmFsdWVJdGVtUHJvdmlkZXIodGhpcyk7CisJCX0KKworCQlyZXR1cm4gc2VpckxhYmVsVmFsdWVJdGVtUHJvdmlkZXI7CisJfQorCisJLyoqCisJICogVGhpcyBrZWVwcyB0cmFjayBvZiB0aGUgb25lIGFkYXB0ZXIgdXNlZCBmb3IgYWxsIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU0lSTGFiZWx9IGluc3RhbmNlcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIFNJUkxhYmVsSXRlbVByb3ZpZGVyIHNpckxhYmVsSXRlbVByb3ZpZGVyOworCisJLyoqCisJICogVGhpcyBjcmVhdGVzIGFuIGFkYXB0ZXIgZm9yIGEKKwkgKiB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlNJUkxhYmVsfS4gPCEtLQorCSAqIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEByZXR1cm4KKwkgKiAKKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlU0lSTGFiZWxBZGFwdGVyKCkgeworCQlpZiAoc2lyTGFiZWxJdGVtUHJvdmlkZXIgPT0gbnVsbCkgeworCQkJc2lyTGFiZWxJdGVtUHJvdmlkZXIgPSBuZXcgU0lSTGFiZWxJdGVtUHJvdmlkZXIodGhpcyk7CisJCX0KKworCQlyZXR1cm4gc2lyTGFiZWxJdGVtUHJvdmlkZXI7CisJfQorCisJLyoqCisJICogVGhpcyBrZWVwcyB0cmFjayBvZiB0aGUgb25lIGFkYXB0ZXIgdXNlZCBmb3IgYWxsIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU0lSTGFiZWxWYWx1ZX0gaW5zdGFuY2VzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgU0lSTGFiZWxWYWx1ZUl0ZW1Qcm92aWRlciBzaXJMYWJlbFZhbHVlSXRlbVByb3ZpZGVyOworCisJLyoqCisJICogVGhpcyBjcmVhdGVzIGFuIGFkYXB0ZXIgZm9yIGEKKwkgKiB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlNJUkxhYmVsVmFsdWV9LiA8IS0tCisJICogYmVnaW4tdXNlci1kb2MgLS0+CisJICogCisJICogQHJldHVybgorCSAqIAorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVTSVJMYWJlbFZhbHVlQWRhcHRlcigpIHsKKwkJaWYgKHNpckxhYmVsVmFsdWVJdGVtUHJvdmlkZXIgPT0gbnVsbCkgeworCQkJc2lyTGFiZWxWYWx1ZUl0ZW1Qcm92aWRlciA9IG5ldyBTSVJMYWJlbFZhbHVlSXRlbVByb3ZpZGVyKHRoaXMpOworCQl9CisKKwkJcmV0dXJuIHNpckxhYmVsVmFsdWVJdGVtUHJvdmlkZXI7CisJfQorCisJLyoqCisJICogVGhpcyBrZWVwcyB0cmFjayBvZiB0aGUgb25lIGFkYXB0ZXIgdXNlZCBmb3IgYWxsIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RvY2hhc3RpY1NFSVJEaXNlYXNlTW9kZWx9IGluc3RhbmNlcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIFN0b2NoYXN0aWNTRUlSRGlzZWFzZU1vZGVsSXRlbVByb3ZpZGVyIHN0b2NoYXN0aWNTRUlSRGlzZWFzZU1vZGVsSXRlbVByb3ZpZGVyOworCisJLyoqCisJICogVGhpcyBjcmVhdGVzIGFuIGFkYXB0ZXIgZm9yIGEge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdG9jaGFzdGljU0VJUkRpc2Vhc2VNb2RlbH0uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAcmV0dXJuCisJICogCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZVN0b2NoYXN0aWNTRUlSRGlzZWFzZU1vZGVsQWRhcHRlcigpIHsKKwkJaWYgKHN0b2NoYXN0aWNTRUlSRGlzZWFzZU1vZGVsSXRlbVByb3ZpZGVyID09IG51bGwpIHsKKwkJCXN0b2NoYXN0aWNTRUlSRGlzZWFzZU1vZGVsSXRlbVByb3ZpZGVyID0gbmV3IFN0b2NoYXN0aWNTRUlSRGlzZWFzZU1vZGVsSXRlbVByb3ZpZGVyKHRoaXMpOworCQl9CisKKwkJcmV0dXJuIHN0b2NoYXN0aWNTRUlSRGlzZWFzZU1vZGVsSXRlbVByb3ZpZGVyOworCX0KKworCS8qKgorCSAqIFRoaXMga2VlcHMgdHJhY2sgb2YgdGhlIG9uZSBhZGFwdGVyIHVzZWQgZm9yIGFsbCB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLkRldGVybWluaXN0aWNTRUlSRGlzZWFzZU1vZGVsfSBpbnN0YW5jZXMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBEZXRlcm1pbmlzdGljU0VJUkRpc2Vhc2VNb2RlbEl0ZW1Qcm92aWRlciBkZXRlcm1pbmlzdGljU0VJUkRpc2Vhc2VNb2RlbEl0ZW1Qcm92aWRlcjsKKworCS8qKgorCSAqIFRoaXMgY3JlYXRlcyBhbiBhZGFwdGVyIGZvciBhIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuRGV0ZXJtaW5pc3RpY1NFSVJEaXNlYXNlTW9kZWx9LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogCisJICogQHJldHVybgorCSAqIAorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVEZXRlcm1pbmlzdGljU0VJUkRpc2Vhc2VNb2RlbEFkYXB0ZXIoKSB7CisJCWlmIChkZXRlcm1pbmlzdGljU0VJUkRpc2Vhc2VNb2RlbEl0ZW1Qcm92aWRlciA9PSBudWxsKSB7CisJCQlkZXRlcm1pbmlzdGljU0VJUkRpc2Vhc2VNb2RlbEl0ZW1Qcm92aWRlciA9IG5ldyBEZXRlcm1pbmlzdGljU0VJUkRpc2Vhc2VNb2RlbEl0ZW1Qcm92aWRlcih0aGlzKTsKKwkJfQorCisJCXJldHVybiBkZXRlcm1pbmlzdGljU0VJUkRpc2Vhc2VNb2RlbEl0ZW1Qcm92aWRlcjsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGtlZXBzIHRyYWNrIG9mIHRoZSBvbmUgYWRhcHRlciB1c2VkIGZvciBhbGwge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TSUxhYmVsfSBpbnN0YW5jZXMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBTSUxhYmVsSXRlbVByb3ZpZGVyIHNpTGFiZWxJdGVtUHJvdmlkZXI7CisKKwkvKioKKwkgKiBUaGlzIGNyZWF0ZXMgYW4gYWRhcHRlciBmb3IgYQorCSAqIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU0lMYWJlbH0uIDwhLS0KKwkgKiBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAcmV0dXJuCisJICogCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZVNJTGFiZWxBZGFwdGVyKCkgeworCQlpZiAoc2lMYWJlbEl0ZW1Qcm92aWRlciA9PSBudWxsKSB7CisJCQlzaUxhYmVsSXRlbVByb3ZpZGVyID0gbmV3IFNJTGFiZWxJdGVtUHJvdmlkZXIodGhpcyk7CisJCX0KKworCQlyZXR1cm4gc2lMYWJlbEl0ZW1Qcm92aWRlcjsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGtlZXBzIHRyYWNrIG9mIHRoZSBvbmUgYWRhcHRlciB1c2VkIGZvciBhbGwge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TSUxhYmVsVmFsdWV9IGluc3RhbmNlcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIFNJTGFiZWxWYWx1ZUl0ZW1Qcm92aWRlciBzaUxhYmVsVmFsdWVJdGVtUHJvdmlkZXI7CisKKwkvKioKKwkgKiBUaGlzIGNyZWF0ZXMgYW4gYWRhcHRlciBmb3IgYQorCSAqIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU0lMYWJlbFZhbHVlfS4gPCEtLQorCSAqIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEByZXR1cm4KKwkgKiAKKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlU0lMYWJlbFZhbHVlQWRhcHRlcigpIHsKKwkJaWYgKHNpTGFiZWxWYWx1ZUl0ZW1Qcm92aWRlciA9PSBudWxsKSB7CisJCQlzaUxhYmVsVmFsdWVJdGVtUHJvdmlkZXIgPSBuZXcgU0lMYWJlbFZhbHVlSXRlbVByb3ZpZGVyKHRoaXMpOworCQl9CisKKwkJcmV0dXJuIHNpTGFiZWxWYWx1ZUl0ZW1Qcm92aWRlcjsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGtlZXBzIHRyYWNrIG9mIHRoZSBvbmUgYWRhcHRlciB1c2VkIGZvciBhbGwge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TSUluZmVjdG9yfSBpbnN0YW5jZXMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBTSUluZmVjdG9ySXRlbVByb3ZpZGVyIHNpSW5mZWN0b3JJdGVtUHJvdmlkZXI7CisKKwkvKioKKwkgKiBUaGlzIGNyZWF0ZXMgYW4gYWRhcHRlciBmb3IgYQorCSAqIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU0lJbmZlY3Rvcn0uIDwhLS0KKwkgKiBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAcmV0dXJuCisJICogCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZVNJSW5mZWN0b3JBZGFwdGVyKCkgeworCQlpZiAoc2lJbmZlY3Rvckl0ZW1Qcm92aWRlciA9PSBudWxsKSB7CisJCQlzaUluZmVjdG9ySXRlbVByb3ZpZGVyID0gbmV3IFNJSW5mZWN0b3JJdGVtUHJvdmlkZXIodGhpcyk7CisJCX0KKworCQlyZXR1cm4gc2lJbmZlY3Rvckl0ZW1Qcm92aWRlcjsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGtlZXBzIHRyYWNrIG9mIHRoZSBvbmUgYWRhcHRlciB1c2VkIGZvciBhbGwge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5EZXRlcm1pbmlzdGljU0lSRGlzZWFzZU1vZGVsfSBpbnN0YW5jZXMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBEZXRlcm1pbmlzdGljU0lSRGlzZWFzZU1vZGVsSXRlbVByb3ZpZGVyIGRldGVybWluaXN0aWNTSVJEaXNlYXNlTW9kZWxJdGVtUHJvdmlkZXI7CisKKwkvKioKKwkgKiBUaGlzIGNyZWF0ZXMgYW4gYWRhcHRlciBmb3IgYSB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLkRldGVybWluaXN0aWNTSVJEaXNlYXNlTW9kZWx9LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogCisJICogQHJldHVybgorCSAqIAorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVEZXRlcm1pbmlzdGljU0lSRGlzZWFzZU1vZGVsQWRhcHRlcigpIHsKKwkJaWYgKGRldGVybWluaXN0aWNTSVJEaXNlYXNlTW9kZWxJdGVtUHJvdmlkZXIgPT0gbnVsbCkgeworCQkJZGV0ZXJtaW5pc3RpY1NJUkRpc2Vhc2VNb2RlbEl0ZW1Qcm92aWRlciA9IG5ldyBEZXRlcm1pbmlzdGljU0lSRGlzZWFzZU1vZGVsSXRlbVByb3ZpZGVyKHRoaXMpOworCQl9CisKKwkJcmV0dXJuIGRldGVybWluaXN0aWNTSVJEaXNlYXNlTW9kZWxJdGVtUHJvdmlkZXI7CisJfQorCisJLyoqCisJICogVGhpcyBrZWVwcyB0cmFjayBvZiB0aGUgb25lIGFkYXB0ZXIgdXNlZCBmb3IgYWxsIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuRGV0ZXJtaW5pc3RpY1NJRGlzZWFzZU1vZGVsfSBpbnN0YW5jZXMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBEZXRlcm1pbmlzdGljU0lEaXNlYXNlTW9kZWxJdGVtUHJvdmlkZXIgZGV0ZXJtaW5pc3RpY1NJRGlzZWFzZU1vZGVsSXRlbVByb3ZpZGVyOworCisJLyoqCisJICogVGhpcyBjcmVhdGVzIGFuIGFkYXB0ZXIgZm9yIGEge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5EZXRlcm1pbmlzdGljU0lEaXNlYXNlTW9kZWx9LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogCisJICogQHJldHVybgorCSAqIAorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVEZXRlcm1pbmlzdGljU0lEaXNlYXNlTW9kZWxBZGFwdGVyKCkgeworCQlpZiAoZGV0ZXJtaW5pc3RpY1NJRGlzZWFzZU1vZGVsSXRlbVByb3ZpZGVyID09IG51bGwpIHsKKwkJCWRldGVybWluaXN0aWNTSURpc2Vhc2VNb2RlbEl0ZW1Qcm92aWRlciA9IG5ldyBEZXRlcm1pbmlzdGljU0lEaXNlYXNlTW9kZWxJdGVtUHJvdmlkZXIodGhpcyk7CisJCX0KKworCQlyZXR1cm4gZGV0ZXJtaW5pc3RpY1NJRGlzZWFzZU1vZGVsSXRlbVByb3ZpZGVyOworCX0KKworCS8qKgorCSAqIFRoaXMga2VlcHMgdHJhY2sgb2YgdGhlIG9uZSBhZGFwdGVyIHVzZWQgZm9yIGFsbCB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlN0b2NoYXN0aWNTSVJEaXNlYXNlTW9kZWx9IGluc3RhbmNlcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIFN0b2NoYXN0aWNTSVJEaXNlYXNlTW9kZWxJdGVtUHJvdmlkZXIgc3RvY2hhc3RpY1NJUkRpc2Vhc2VNb2RlbEl0ZW1Qcm92aWRlcjsKKworCS8qKgorCSAqIFRoaXMgY3JlYXRlcyBhbiBhZGFwdGVyIGZvciBhIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RvY2hhc3RpY1NJUkRpc2Vhc2VNb2RlbH0uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAcmV0dXJuCisJICogCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZVN0b2NoYXN0aWNTSVJEaXNlYXNlTW9kZWxBZGFwdGVyKCkgeworCQlpZiAoc3RvY2hhc3RpY1NJUkRpc2Vhc2VNb2RlbEl0ZW1Qcm92aWRlciA9PSBudWxsKSB7CisJCQlzdG9jaGFzdGljU0lSRGlzZWFzZU1vZGVsSXRlbVByb3ZpZGVyID0gbmV3IFN0b2NoYXN0aWNTSVJEaXNlYXNlTW9kZWxJdGVtUHJvdmlkZXIodGhpcyk7CisJCX0KKworCQlyZXR1cm4gc3RvY2hhc3RpY1NJUkRpc2Vhc2VNb2RlbEl0ZW1Qcm92aWRlcjsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGtlZXBzIHRyYWNrIG9mIHRoZSBvbmUgYWRhcHRlciB1c2VkIGZvciBhbGwge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TSVJJbm9jdWxhdG9yfSBpbnN0YW5jZXMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIFNJUklub2N1bGF0b3JJdGVtUHJvdmlkZXIgc2lySW5vY3VsYXRvckl0ZW1Qcm92aWRlcjsKKworCS8qKgorCSAqIFRoaXMgY3JlYXRlcyBhbiBhZGFwdGVyIGZvciBhIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU0lSSW5vY3VsYXRvcn0uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlU0lSSW5vY3VsYXRvckFkYXB0ZXIoKSB7CisJCWlmIChzaXJJbm9jdWxhdG9ySXRlbVByb3ZpZGVyID09IG51bGwpIHsKKwkJCXNpcklub2N1bGF0b3JJdGVtUHJvdmlkZXIgPSBuZXcgU0lSSW5vY3VsYXRvckl0ZW1Qcm92aWRlcih0aGlzKTsKKwkJfQorCisJCXJldHVybiBzaXJJbm9jdWxhdG9ySXRlbVByb3ZpZGVyOworCX0KKworCS8qKgorCSAqIFRoaXMga2VlcHMgdHJhY2sgb2YgdGhlIG9uZSBhZGFwdGVyIHVzZWQgZm9yIGFsbCB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlN0b2NoYXN0aWNQb2lzc29uU0lEaXNlYXNlTW9kZWx9IGluc3RhbmNlcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgU3RvY2hhc3RpY1BvaXNzb25TSURpc2Vhc2VNb2RlbEl0ZW1Qcm92aWRlciBzdG9jaGFzdGljUG9pc3NvblNJRGlzZWFzZU1vZGVsSXRlbVByb3ZpZGVyOworCisJLyoqCisJICogVGhpcyBjcmVhdGVzIGFuIGFkYXB0ZXIgZm9yIGEge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdG9jaGFzdGljUG9pc3NvblNJRGlzZWFzZU1vZGVsfS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVTdG9jaGFzdGljUG9pc3NvblNJRGlzZWFzZU1vZGVsQWRhcHRlcigpIHsKKwkJaWYgKHN0b2NoYXN0aWNQb2lzc29uU0lEaXNlYXNlTW9kZWxJdGVtUHJvdmlkZXIgPT0gbnVsbCkgeworCQkJc3RvY2hhc3RpY1BvaXNzb25TSURpc2Vhc2VNb2RlbEl0ZW1Qcm92aWRlciA9IG5ldyBTdG9jaGFzdGljUG9pc3NvblNJRGlzZWFzZU1vZGVsSXRlbVByb3ZpZGVyKHRoaXMpOworCQl9CisKKwkJcmV0dXJuIHN0b2NoYXN0aWNQb2lzc29uU0lEaXNlYXNlTW9kZWxJdGVtUHJvdmlkZXI7CisJfQorCisJLyoqCisJICogVGhpcyBrZWVwcyB0cmFjayBvZiB0aGUgb25lIGFkYXB0ZXIgdXNlZCBmb3IgYWxsIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RvY2hhc3RpY1BvaXNzb25TSVJEaXNlYXNlTW9kZWx9IGluc3RhbmNlcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgU3RvY2hhc3RpY1BvaXNzb25TSVJEaXNlYXNlTW9kZWxJdGVtUHJvdmlkZXIgc3RvY2hhc3RpY1BvaXNzb25TSVJEaXNlYXNlTW9kZWxJdGVtUHJvdmlkZXI7CisKKwkvKioKKwkgKiBUaGlzIGNyZWF0ZXMgYW4gYWRhcHRlciBmb3IgYSB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlN0b2NoYXN0aWNQb2lzc29uU0lSRGlzZWFzZU1vZGVsfS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVTdG9jaGFzdGljUG9pc3NvblNJUkRpc2Vhc2VNb2RlbEFkYXB0ZXIoKSB7CisJCWlmIChzdG9jaGFzdGljUG9pc3NvblNJUkRpc2Vhc2VNb2RlbEl0ZW1Qcm92aWRlciA9PSBudWxsKSB7CisJCQlzdG9jaGFzdGljUG9pc3NvblNJUkRpc2Vhc2VNb2RlbEl0ZW1Qcm92aWRlciA9IG5ldyBTdG9jaGFzdGljUG9pc3NvblNJUkRpc2Vhc2VNb2RlbEl0ZW1Qcm92aWRlcih0aGlzKTsKKwkJfQorCisJCXJldHVybiBzdG9jaGFzdGljUG9pc3NvblNJUkRpc2Vhc2VNb2RlbEl0ZW1Qcm92aWRlcjsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGtlZXBzIHRyYWNrIG9mIHRoZSBvbmUgYWRhcHRlciB1c2VkIGZvciBhbGwge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdG9jaGFzdGljUG9pc3NvblNFSVJEaXNlYXNlTW9kZWx9IGluc3RhbmNlcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgU3RvY2hhc3RpY1BvaXNzb25TRUlSRGlzZWFzZU1vZGVsSXRlbVByb3ZpZGVyIHN0b2NoYXN0aWNQb2lzc29uU0VJUkRpc2Vhc2VNb2RlbEl0ZW1Qcm92aWRlcjsKKworCS8qKgorCSAqIFRoaXMgY3JlYXRlcyBhbiBhZGFwdGVyIGZvciBhIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RvY2hhc3RpY1BvaXNzb25TRUlSRGlzZWFzZU1vZGVsfS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVTdG9jaGFzdGljUG9pc3NvblNFSVJEaXNlYXNlTW9kZWxBZGFwdGVyKCkgeworCQlpZiAoc3RvY2hhc3RpY1BvaXNzb25TRUlSRGlzZWFzZU1vZGVsSXRlbVByb3ZpZGVyID09IG51bGwpIHsKKwkJCXN0b2NoYXN0aWNQb2lzc29uU0VJUkRpc2Vhc2VNb2RlbEl0ZW1Qcm92aWRlciA9IG5ldyBTdG9jaGFzdGljUG9pc3NvblNFSVJEaXNlYXNlTW9kZWxJdGVtUHJvdmlkZXIodGhpcyk7CisJCX0KKworCQlyZXR1cm4gc3RvY2hhc3RpY1BvaXNzb25TRUlSRGlzZWFzZU1vZGVsSXRlbVByb3ZpZGVyOworCX0KKworCS8qKgorCSAqIFRoaXMga2VlcHMgdHJhY2sgb2YgdGhlIG9uZSBhZGFwdGVyIHVzZWQgZm9yIGFsbCB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLkluZmVjdG9ySW5vY3VsYXRvckNvbGxlY3Rpb259IGluc3RhbmNlcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgSW5mZWN0b3JJbm9jdWxhdG9yQ29sbGVjdGlvbkl0ZW1Qcm92aWRlciBpbmZlY3Rvcklub2N1bGF0b3JDb2xsZWN0aW9uSXRlbVByb3ZpZGVyOworCisJLyoqCisJICogVGhpcyBjcmVhdGVzIGFuIGFkYXB0ZXIgZm9yIGEge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5JbmZlY3Rvcklub2N1bGF0b3JDb2xsZWN0aW9ufS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVJbmZlY3Rvcklub2N1bGF0b3JDb2xsZWN0aW9uQWRhcHRlcigpIHsKKwkJaWYgKGluZmVjdG9ySW5vY3VsYXRvckNvbGxlY3Rpb25JdGVtUHJvdmlkZXIgPT0gbnVsbCkgeworCQkJaW5mZWN0b3JJbm9jdWxhdG9yQ29sbGVjdGlvbkl0ZW1Qcm92aWRlciA9IG5ldyBJbmZlY3Rvcklub2N1bGF0b3JDb2xsZWN0aW9uSXRlbVByb3ZpZGVyKHRoaXMpOworCQl9CisKKwkJcmV0dXJuIGluZmVjdG9ySW5vY3VsYXRvckNvbGxlY3Rpb25JdGVtUHJvdmlkZXI7CisJfQorCisJLyoqCisJICogVGhpcyBrZWVwcyB0cmFjayBvZiB0aGUgb25lIGFkYXB0ZXIgdXNlZCBmb3IgYWxsIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuSW5pdGlhbGl6ZXJ9IGluc3RhbmNlcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgSW5pdGlhbGl6ZXJJdGVtUHJvdmlkZXIgaW5pdGlhbGl6ZXJJdGVtUHJvdmlkZXI7CisKKwkvKioKKwkgKiBUaGlzIGNyZWF0ZXMgYW4gYWRhcHRlciBmb3IgYSB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLkluaXRpYWxpemVyfS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVJbml0aWFsaXplckFkYXB0ZXIoKSB7CisJCWlmIChpbml0aWFsaXplckl0ZW1Qcm92aWRlciA9PSBudWxsKSB7CisJCQlpbml0aWFsaXplckl0ZW1Qcm92aWRlciA9IG5ldyBJbml0aWFsaXplckl0ZW1Qcm92aWRlcih0aGlzKTsKKwkJfQorCisJCXJldHVybiBpbml0aWFsaXplckl0ZW1Qcm92aWRlcjsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGtlZXBzIHRyYWNrIG9mIHRoZSBvbmUgYWRhcHRlciB1c2VkIGZvciBhbGwge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdG9jaGFzdGljU0lEaXNlYXNlTW9kZWx9IGluc3RhbmNlcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIFN0b2NoYXN0aWNTSURpc2Vhc2VNb2RlbEl0ZW1Qcm92aWRlciBzdG9jaGFzdGljU0lEaXNlYXNlTW9kZWxJdGVtUHJvdmlkZXI7CisKKwkvKioKKwkgKiBUaGlzIGNyZWF0ZXMgYW4gYWRhcHRlciBmb3IgYSB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlN0b2NoYXN0aWNTSURpc2Vhc2VNb2RlbH0uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAcmV0dXJuCisJICogCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZVN0b2NoYXN0aWNTSURpc2Vhc2VNb2RlbEFkYXB0ZXIoKSB7CisJCWlmIChzdG9jaGFzdGljU0lEaXNlYXNlTW9kZWxJdGVtUHJvdmlkZXIgPT0gbnVsbCkgeworCQkJc3RvY2hhc3RpY1NJRGlzZWFzZU1vZGVsSXRlbVByb3ZpZGVyID0gbmV3IFN0b2NoYXN0aWNTSURpc2Vhc2VNb2RlbEl0ZW1Qcm92aWRlcih0aGlzKTsKKwkJfQorCisJCXJldHVybiBzdG9jaGFzdGljU0lEaXNlYXNlTW9kZWxJdGVtUHJvdmlkZXI7CisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIHRoZSByb290IGFkYXB0ZXIgZmFjdG9yeSB0aGF0IGNvbnRhaW5zIHRoaXMgZmFjdG9yeS4gPCEtLQorCSAqIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEByZXR1cm4KKwkgKiAKKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnkgZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCkgeworCQlyZXR1cm4gcGFyZW50QWRhcHRlckZhY3RvcnkgPT0gbnVsbCA/IHRoaXMgOiBwYXJlbnRBZGFwdGVyRmFjdG9yeS5nZXRSb290QWRhcHRlckZhY3RvcnkoKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHNldHMgdGhlIGNvbXBvc2VkIGFkYXB0ZXIgZmFjdG9yeSB0aGF0IGNvbnRhaW5zIHRoaXMgZmFjdG9yeS4gPCEtLQorCSAqIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBwYXJhbSBwYXJlbnRBZGFwdGVyRmFjdG9yeQorCSAqIAorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRQYXJlbnRBZGFwdGVyRmFjdG9yeSgKKwkJCUNvbXBvc2VkQWRhcHRlckZhY3RvcnkgcGFyZW50QWRhcHRlckZhY3RvcnkpIHsKKwkJdGhpcy5wYXJlbnRBZGFwdGVyRmFjdG9yeSA9IHBhcmVudEFkYXB0ZXJGYWN0b3J5OworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogCisJICogQHBhcmFtIHR5cGUKKwkgKiBAcmV0dXJuCisJICogCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBib29sZWFuIGlzRmFjdG9yeUZvclR5cGUoT2JqZWN0IHR5cGUpIHsKKwkJcmV0dXJuIHN1cHBvcnRlZFR5cGVzLmNvbnRhaW5zKHR5cGUpIHx8IHN1cGVyLmlzRmFjdG9yeUZvclR5cGUodHlwZSk7CisJfQorCisJLyoqCisJICogVGhpcyBpbXBsZW1lbnRhdGlvbiBzdWJzdGl0dXRlcyB0aGUgZmFjdG9yeSBpdHNlbGYgYXMgdGhlIGtleSBmb3IgdGhlIGFkYXB0ZXIuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAcGFyYW0gbm90aWZpZXIKKwkgKiBAcGFyYW0gdHlwZQorCSAqIEByZXR1cm4KKwkgKiAKKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIEFkYXB0ZXIgYWRhcHQoTm90aWZpZXIgbm90aWZpZXIsIE9iamVjdCB0eXBlKSB7CisJCXJldHVybiBzdXBlci5hZGFwdChub3RpZmllciwgdGhpcyk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAcGFyYW0gb2JqZWN0CisJICogQHBhcmFtIHR5cGUKKwkgKiBAcmV0dXJuCisJICogCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBPYmplY3QgYWRhcHQoT2JqZWN0IG9iamVjdCwgT2JqZWN0IHR5cGUpIHsKKwkJaWYgKGlzRmFjdG9yeUZvclR5cGUodHlwZSkpIHsKKwkJCU9iamVjdCBhZGFwdGVyID0gc3VwZXIuYWRhcHQob2JqZWN0LCB0eXBlKTsKKwkJCWlmICghKHR5cGUgaW5zdGFuY2VvZiBDbGFzczw/PikgfHwgKCgoQ2xhc3M8Pz4pdHlwZSkuaXNJbnN0YW5jZShhZGFwdGVyKSkpIHsKKwkJCQlyZXR1cm4gYWRhcHRlcjsKKwkJCX0KKwkJfQorCisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyBhIGxpc3RlbmVyLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogCisJICogQHBhcmFtIG5vdGlmeUNoYW5nZWRMaXN0ZW5lcgorCSAqIAorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBhZGRMaXN0ZW5lcihJTm90aWZ5Q2hhbmdlZExpc3RlbmVyIG5vdGlmeUNoYW5nZWRMaXN0ZW5lcikgeworCQljaGFuZ2VOb3RpZmllci5hZGRMaXN0ZW5lcihub3RpZnlDaGFuZ2VkTGlzdGVuZXIpOworCX0KKworCS8qKgorCSAqIFRoaXMgcmVtb3ZlcyBhIGxpc3RlbmVyLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogCisJICogQHBhcmFtIG5vdGlmeUNoYW5nZWRMaXN0ZW5lcgorCSAqIAorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCByZW1vdmVMaXN0ZW5lcihJTm90aWZ5Q2hhbmdlZExpc3RlbmVyIG5vdGlmeUNoYW5nZWRMaXN0ZW5lcikgeworCQljaGFuZ2VOb3RpZmllci5yZW1vdmVMaXN0ZW5lcihub3RpZnlDaGFuZ2VkTGlzdGVuZXIpOworCX0KKworCS8qKgorCSAqIFRoaXMgZGVsZWdhdGVzIHRvIHtAbGluayAjY2hhbmdlTm90aWZpZXJ9IGFuZCB0byB7QGxpbmsgI3BhcmVudEFkYXB0ZXJGYWN0b3J5fS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBwYXJhbSBub3RpZmljYXRpb24KKwkgKiAKKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgZmlyZU5vdGlmeUNoYW5nZWQoTm90aWZpY2F0aW9uIG5vdGlmaWNhdGlvbikgeworCQljaGFuZ2VOb3RpZmllci5maXJlTm90aWZ5Q2hhbmdlZChub3RpZmljYXRpb24pOworCisJCWlmIChwYXJlbnRBZGFwdGVyRmFjdG9yeSAhPSBudWxsKSB7CisJCQlwYXJlbnRBZGFwdGVyRmFjdG9yeS5maXJlTm90aWZ5Q2hhbmdlZChub3RpZmljYXRpb24pOworCQl9CisJfQorCisJLyoqCisJICogVGhpcyBkaXNwb3NlcyBhbGwgb2YgdGhlIGl0ZW0gcHJvdmlkZXJzIGNyZWF0ZWQgYnkgdGhpcyBmYWN0b3J5LiA8IS0tCisJICogYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBkaXNwb3NlKCkgeworCQlpZiAoZGV0ZXJtaW5pc3RpY1NFSVJEaXNlYXNlTW9kZWxJdGVtUHJvdmlkZXIgIT0gbnVsbCkgZGV0ZXJtaW5pc3RpY1NFSVJEaXNlYXNlTW9kZWxJdGVtUHJvdmlkZXIuZGlzcG9zZSgpOworCQlpZiAoZGV0ZXJtaW5pc3RpY1NJRGlzZWFzZU1vZGVsSXRlbVByb3ZpZGVyICE9IG51bGwpIGRldGVybWluaXN0aWNTSURpc2Vhc2VNb2RlbEl0ZW1Qcm92aWRlci5kaXNwb3NlKCk7CisJCWlmIChkZXRlcm1pbmlzdGljU0lSRGlzZWFzZU1vZGVsSXRlbVByb3ZpZGVyICE9IG51bGwpIGRldGVybWluaXN0aWNTSVJEaXNlYXNlTW9kZWxJdGVtUHJvdmlkZXIuZGlzcG9zZSgpOworCQlpZiAoc2VpckxhYmVsSXRlbVByb3ZpZGVyICE9IG51bGwpIHNlaXJMYWJlbEl0ZW1Qcm92aWRlci5kaXNwb3NlKCk7CisJCWlmIChzZWlyTGFiZWxWYWx1ZUl0ZW1Qcm92aWRlciAhPSBudWxsKSBzZWlyTGFiZWxWYWx1ZUl0ZW1Qcm92aWRlci5kaXNwb3NlKCk7CisJCWlmIChzaUluZmVjdG9ySXRlbVByb3ZpZGVyICE9IG51bGwpIHNpSW5mZWN0b3JJdGVtUHJvdmlkZXIuZGlzcG9zZSgpOworCQlpZiAoc2lMYWJlbEl0ZW1Qcm92aWRlciAhPSBudWxsKSBzaUxhYmVsSXRlbVByb3ZpZGVyLmRpc3Bvc2UoKTsKKwkJaWYgKHNpTGFiZWxWYWx1ZUl0ZW1Qcm92aWRlciAhPSBudWxsKSBzaUxhYmVsVmFsdWVJdGVtUHJvdmlkZXIuZGlzcG9zZSgpOworCQlpZiAoc2lyTGFiZWxJdGVtUHJvdmlkZXIgIT0gbnVsbCkgc2lyTGFiZWxJdGVtUHJvdmlkZXIuZGlzcG9zZSgpOworCQlpZiAoc2lyTGFiZWxWYWx1ZUl0ZW1Qcm92aWRlciAhPSBudWxsKSBzaXJMYWJlbFZhbHVlSXRlbVByb3ZpZGVyLmRpc3Bvc2UoKTsKKwkJaWYgKHN0b2NoYXN0aWNTRUlSRGlzZWFzZU1vZGVsSXRlbVByb3ZpZGVyICE9IG51bGwpIHN0b2NoYXN0aWNTRUlSRGlzZWFzZU1vZGVsSXRlbVByb3ZpZGVyLmRpc3Bvc2UoKTsKKwkJaWYgKHN0b2NoYXN0aWNTSURpc2Vhc2VNb2RlbEl0ZW1Qcm92aWRlciAhPSBudWxsKSBzdG9jaGFzdGljU0lEaXNlYXNlTW9kZWxJdGVtUHJvdmlkZXIuZGlzcG9zZSgpOworCQlpZiAoc3RvY2hhc3RpY1NJUkRpc2Vhc2VNb2RlbEl0ZW1Qcm92aWRlciAhPSBudWxsKSBzdG9jaGFzdGljU0lSRGlzZWFzZU1vZGVsSXRlbVByb3ZpZGVyLmRpc3Bvc2UoKTsKKwkJaWYgKHNpcklub2N1bGF0b3JJdGVtUHJvdmlkZXIgIT0gbnVsbCkgc2lySW5vY3VsYXRvckl0ZW1Qcm92aWRlci5kaXNwb3NlKCk7CisJCWlmIChzdG9jaGFzdGljUG9pc3NvblNJRGlzZWFzZU1vZGVsSXRlbVByb3ZpZGVyICE9IG51bGwpIHN0b2NoYXN0aWNQb2lzc29uU0lEaXNlYXNlTW9kZWxJdGVtUHJvdmlkZXIuZGlzcG9zZSgpOworCQlpZiAoc3RvY2hhc3RpY1BvaXNzb25TSVJEaXNlYXNlTW9kZWxJdGVtUHJvdmlkZXIgIT0gbnVsbCkgc3RvY2hhc3RpY1BvaXNzb25TSVJEaXNlYXNlTW9kZWxJdGVtUHJvdmlkZXIuZGlzcG9zZSgpOworCQlpZiAoc3RvY2hhc3RpY1BvaXNzb25TRUlSRGlzZWFzZU1vZGVsSXRlbVByb3ZpZGVyICE9IG51bGwpIHN0b2NoYXN0aWNQb2lzc29uU0VJUkRpc2Vhc2VNb2RlbEl0ZW1Qcm92aWRlci5kaXNwb3NlKCk7CisJCWlmIChpbmZlY3Rvcklub2N1bGF0b3JDb2xsZWN0aW9uSXRlbVByb3ZpZGVyICE9IG51bGwpIGluZmVjdG9ySW5vY3VsYXRvckNvbGxlY3Rpb25JdGVtUHJvdmlkZXIuZGlzcG9zZSgpOworCQlpZiAoaW5pdGlhbGl6ZXJJdGVtUHJvdmlkZXIgIT0gbnVsbCkgaW5pdGlhbGl6ZXJJdGVtUHJvdmlkZXIuZGlzcG9zZSgpOworCX0KKworfQpkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9zdGFuZGFyZC9wcm92aWRlci9TdGFuZGFyZFJlbGF0aXZlVmFsdWVIaXN0b3J5UHJvdmlkZXJBZGFwdGVyRmFjdG9yeS5qYXZhIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9zdGFuZGFyZC9wcm92aWRlci9TdGFuZGFyZFJlbGF0aXZlVmFsdWVIaXN0b3J5UHJvdmlkZXJBZGFwdGVyRmFjdG9yeS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZjMDMxMjcKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3N0YW5kYXJkL3Byb3ZpZGVyL1N0YW5kYXJkUmVsYXRpdmVWYWx1ZUhpc3RvcnlQcm92aWRlckFkYXB0ZXJGYWN0b3J5LmphdmEKQEAgLTAsMCArMSwzMzIgQEAKKy8vIFN0YW5kYXJkUmVsYXRpdmVIaXN0b3J5VmFsdWVQcm92aWRlckFkYXB0ZXJGYWN0b3J5LmphdmEKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLnByb3ZpZGVyOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGphdmEudXRpbC5MaXN0OworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuQWRhcHRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVTdHJ1Y3R1cmFsRmVhdHVyZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5DaGFuZ2VOb3RpZmllcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5Db21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkNvbXBvc2VkQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUNoYW5nZU5vdGlmaWVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtUHJvcGVydHlEZXNjcmlwdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklOb3RpZnlDaGFuZ2VkTGlzdGVuZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSXRlbVByb3BlcnR5RGVzY3JpcHRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmFkYXB0ZXJzLmhpc3RvcnkuSGlzdG9yeVByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uYWRhcHRlcnMuaGlzdG9yeS5IaXN0b3J5UHJvdmlkZXJBZGFwdGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uYWRhcHRlcnMuaGlzdG9yeS5IaXN0b3J5UHJvdmlkZXJBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLklkZW50aWZpYWJsZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuU1RFTVRpbWU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5hZGFwdGVycy5yZWxhdGl2ZXZhbHVlLlJlbGF0aXZlVmFsdWVQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmFkYXB0ZXJzLnJlbGF0aXZldmFsdWUuUmVsYXRpdmVWYWx1ZVByb3ZpZGVyQWRhcHRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmFkYXB0ZXJzLnJlbGF0aXZldmFsdWUuUmVsYXRpdmVWYWx1ZVByb3ZpZGVyQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5hZGFwdGVycy5yZWxhdGl2ZXZhbHVlLmhpc3RvcnkuUmVsYXRpdmVWYWx1ZUhpc3RvcnlQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmFkYXB0ZXJzLnJlbGF0aXZldmFsdWUuaGlzdG9yeS5SZWxhdGl2ZVZhbHVlSGlzdG9yeVByb3ZpZGVyQWRhcHRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmFkYXB0ZXJzLnJlbGF0aXZldmFsdWUuaGlzdG9yeS5SZWxhdGl2ZVZhbHVlSGlzdG9yeVByb3ZpZGVyQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLkRpc2Vhc2VNb2RlbExhYmVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5EaXNlYXNlTW9kZWxMYWJlbFZhbHVlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC51dGlsLlN0YW5kYXJkQWRhcHRlckZhY3Rvcnk7CisKKy8qKgorICogVGhpcyBjbGFzcyBpcyBhIGZhY3RvcnkgZm9yIHRoaXMgbW9kZWwgdGhhdCBjcmVhdGVzCisgKiB7QGxpbmsgUmVsYXRpdmVWYWx1ZUhpc3RvcnlQcm92aWRlcn0ncyBmb3IgY2xhc3NlcyBpbiB0aGUgbW9kZWwuCisgKi8KK3B1YmxpYyBjbGFzcyBTdGFuZGFyZFJlbGF0aXZlVmFsdWVIaXN0b3J5UHJvdmlkZXJBZGFwdGVyRmFjdG9yeSBleHRlbmRzCisJCVN0YW5kYXJkQWRhcHRlckZhY3RvcnkgaW1wbGVtZW50cworCQlSZWxhdGl2ZVZhbHVlSGlzdG9yeVByb3ZpZGVyQWRhcHRlckZhY3RvcnkgeworCisJLyoqCisJICogVGhpcyBrZWVwcyB0cmFjayBvZiB0aGUgcm9vdCBhZGFwdGVyIGZhY3RvcnkgdGhhdCBkZWxlZ2F0ZXMgdG8gdGhpcworCSAqIGFkYXB0ZXIgZmFjdG9yeS4KKwkgKi8KKwlwcm90ZWN0ZWQgQ29tcG9zZWRBZGFwdGVyRmFjdG9yeSBwYXJlbnRBZGFwdGVyRmFjdG9yeTsKKworCS8qKgorCSAqIFRoaXMgaXMgdXNlZCB0byBpbXBsZW1lbnQKKwkgKiB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUNoYW5nZU5vdGlmaWVyfS4KKwkgKi8KKwlwcm90ZWN0ZWQgSUNoYW5nZU5vdGlmaWVyIGNoYW5nZU5vdGlmaWVyID0gbmV3IENoYW5nZU5vdGlmaWVyKCk7CisKKwkvKioKKwkgKiBUaGlzIGZhY3RvcnkgaXMgdXNlZCB0byBjcmVhdGUgaXRlbSBwcm92aWRlcnMgZm9yIHRoZSBhZGFwdGVkIGNsYXNzZXMuCisJICogVGhlIGl0ZW0gcHJvdmlkZXJzIGFyZSB1c2VkIGFzIHByb3BlcnR5IHNvdXJjZXMgdG8gZ2V0IHRoZSBwcm9wZXJ0aWVzCisJICogdGhhdCBjYW4gaGF2ZSByZWxhdGl2ZSB2YWx1ZXMuCisJICovCisJLy9wcml2YXRlIHN0YXRpYyBTdGFuZGFyZEl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5IGl0ZW1Qcm92aWRlckZhY3Rvcnk7CisKKwlwcml2YXRlIEhpc3RvcnlQcm92aWRlckFkYXB0ZXIgaGlzdG9yeVByb3ZpZGVyQWRhcHRlciA9IG51bGw7CisKKwkvKioKKwkgKiBEZWZhdWx0IENvbnN0cnVjdG9yCisJICovCisJcHVibGljIFN0YW5kYXJkUmVsYXRpdmVWYWx1ZUhpc3RvcnlQcm92aWRlckFkYXB0ZXJGYWN0b3J5KCkgeworCQlzdXBlcigpOworCQlSZWxhdGl2ZVZhbHVlSGlzdG9yeVByb3ZpZGVyQWRhcHRlckZhY3RvcnkuSU5TVEFOQ0UKKwkJCQkuYWRkQWRhcHRlckZhY3RvcnkodGhpcyk7CisJfSAvLyBTdGFuZGFyZFJlbGF0aXZlSGlzdG9yeVZhbHVlUHJvdmlkZXJBZGFwdGVyRmFjdG9yeQorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQudXRpbC5TdGFuZGFyZEFkYXB0ZXJGYWN0b3J5I2NyZWF0ZUFkYXB0ZXIob3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpZXIpCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlQWRhcHRlcihOb3RpZmllciB0YXJnZXQpIHsKKwkJQWRhcHRlciByZXRWYWx1ZSA9IG51bGw7CisKKwkJLy8gQmVmb3JlIHdlIGNyZWF0ZSBvdXIgYWRhcHRlciwgd2UgdHJ5IHRvIGFkYXB0IHRoZSB0YXJnZXQgdG8gYQorCQkvLyBIaXN0b3J5UHJvdmlkZXIuIElmIHdlIGNhbid0IHRoZW4gd2UncmUgZG9uZSBhbmQgcmV0dXJuIG51bGwgdG8KKwkJLy8gaW5kaWNhdGUgdGhhdCB0aGlzIGZhY3RvcnkgY2FuJ3QgY3JlYXRlIHRoZSBhZGFwdGVyLiBJZiBub3QsIHRoZW4gd2UKKwkJLy8gcmVtZW1iZXIgdGhlIGhpc3RvcnkgcHJvdmlkZXIgYW5kIGxldCB0aGUgc3VwZXIgY2xhc3MncyBtZXRob2QgZG8gdGhlCisJCS8vIHN3aXRjaCBvbiB0aGUgdHlwZS4KKwkJaGlzdG9yeVByb3ZpZGVyQWRhcHRlciA9IChIaXN0b3J5UHJvdmlkZXJBZGFwdGVyKSBIaXN0b3J5UHJvdmlkZXJBZGFwdGVyRmFjdG9yeS5JTlNUQU5DRQorCQkJCS5hZGFwdCh0YXJnZXQsIEhpc3RvcnlQcm92aWRlci5jbGFzcyk7CisKKwkJLy8gRGlkIHdlIHN1Y2NlZWQ/CisJCWlmIChoaXN0b3J5UHJvdmlkZXJBZGFwdGVyICE9IG51bGwpIHsKKwkJCS8vIFllcworCQkJcmV0VmFsdWUgPSBzdXBlci5jcmVhdGVBZGFwdGVyKHRhcmdldCk7CisJCX0gLy8gaWYKKworCQlyZXR1cm4gcmV0VmFsdWU7CisJfSAvLyBjcmVhdGVBZGFwdGVyCisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC51dGlsLlN0YW5kYXJkQWRhcHRlckZhY3RvcnkjY3JlYXRlRGlzZWFzZU1vZGVsTGFiZWxBZGFwdGVyKCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVEaXNlYXNlTW9kZWxMYWJlbEFkYXB0ZXIoKSB7CisJCXJldHVybiBuZXcgRGlzZWFzZU1vZGVsTGFiZWxSZWxhdGl2ZVZhbHVlSGlzdG9yeVByb3ZpZGVyKAorCQkJCWhpc3RvcnlQcm92aWRlckFkYXB0ZXIpOworCX0gLy8gY3JlYXRlRGlzZWFzZU1vZGVsTGFiZWxBZGFwdGVyCisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklDaGFuZ2VOb3RpZmllciNhZGRMaXN0ZW5lcihvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JTm90aWZ5Q2hhbmdlZExpc3RlbmVyKQorCSAqLworCXB1YmxpYyB2b2lkIGFkZExpc3RlbmVyKGZpbmFsIElOb3RpZnlDaGFuZ2VkTGlzdGVuZXIgbm90aWZ5Q2hhbmdlZExpc3RlbmVyKSB7CisJCWNoYW5nZU5vdGlmaWVyLmFkZExpc3RlbmVyKG5vdGlmeUNoYW5nZWRMaXN0ZW5lcik7CisJfSAvLyBhZGRMaXN0ZW5lcgorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JQ2hhbmdlTm90aWZpZXIjZmlyZU5vdGlmeUNoYW5nZWQob3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uKQorCSAqLworCXB1YmxpYyB2b2lkIGZpcmVOb3RpZnlDaGFuZ2VkKGZpbmFsIE5vdGlmaWNhdGlvbiBub3RpZmljYXRpb24pIHsKKwkJY2hhbmdlTm90aWZpZXIuZmlyZU5vdGlmeUNoYW5nZWQobm90aWZpY2F0aW9uKTsKKwkJaWYgKHBhcmVudEFkYXB0ZXJGYWN0b3J5ICE9IG51bGwpIHsKKwkJCXBhcmVudEFkYXB0ZXJGYWN0b3J5LmZpcmVOb3RpZnlDaGFuZ2VkKG5vdGlmaWNhdGlvbik7CisJCX0KKwl9IC8vIGZpcmVOb3RpZnlDaGFuZ2VkCisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklDaGFuZ2VOb3RpZmllciNyZW1vdmVMaXN0ZW5lcihvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JTm90aWZ5Q2hhbmdlZExpc3RlbmVyKQorCSAqLworCXB1YmxpYyB2b2lkIHJlbW92ZUxpc3RlbmVyKAorCQkJZmluYWwgSU5vdGlmeUNoYW5nZWRMaXN0ZW5lciBub3RpZnlDaGFuZ2VkTGlzdGVuZXIpIHsKKwkJY2hhbmdlTm90aWZpZXIucmVtb3ZlTGlzdGVuZXIobm90aWZ5Q2hhbmdlZExpc3RlbmVyKTsKKwl9IC8vIHJlbW92ZUxpc3RlbmVyCisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkNvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnkjZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCkKKwkgKi8KKwlwdWJsaWMgQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSBnZXRSb290QWRhcHRlckZhY3RvcnkoKSB7CisJCXJldHVybiBwYXJlbnRBZGFwdGVyRmFjdG9yeSA9PSBudWxsID8gdGhpcyA6IHBhcmVudEFkYXB0ZXJGYWN0b3J5CisJCQkJLmdldFJvb3RBZGFwdGVyRmFjdG9yeSgpOworCX0gLy8gZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5CisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkNvbXBvc2VhYmxlQWRhcHRlckZhY3Rvcnkjc2V0UGFyZW50QWRhcHRlckZhY3Rvcnkob3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuQ29tcG9zZWRBZGFwdGVyRmFjdG9yeSkKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRQYXJlbnRBZGFwdGVyRmFjdG9yeSgKKwkJCWZpbmFsIENvbXBvc2VkQWRhcHRlckZhY3RvcnkgcGFyZW50QWRhcHRlckZhY3RvcnkpIHsKKwkJdGhpcy5wYXJlbnRBZGFwdGVyRmFjdG9yeSA9IHBhcmVudEFkYXB0ZXJGYWN0b3J5OworCX0gLy8gc2V0UGFyZW50QWRhcHRlckZhY3RvcnkKKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuQWRhcHRlckZhY3RvcnkjaXNGYWN0b3J5Rm9yVHlwZShqYXZhLmxhbmcuT2JqZWN0KQorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBib29sZWFuIGlzRmFjdG9yeUZvclR5cGUoZmluYWwgT2JqZWN0IHR5cGUpIHsKKwkJcmV0dXJuIHR5cGUgPT0gUmVsYXRpdmVWYWx1ZUhpc3RvcnlQcm92aWRlci5jbGFzcworCQkJCXx8IHN1cGVyLmlzRmFjdG9yeUZvclR5cGUodHlwZSk7CisJfQorCisJLyoqCisJICogVGhpcyBkaXNwb3NlcyBhbGwgb2YgdGhlIGl0ZW0gcHJvdmlkZXJzIGNyZWF0ZWQgYnkgdGhpcyBmYWN0b3J5LgorCSAqIAorCSAqIEBzZWUgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSURpc3Bvc2FibGUjZGlzcG9zZSgpCisJICovCisJcHVibGljIHZvaWQgZGlzcG9zZSgpIHsKKwkJLy8gTm90aGluZworCX0gLy8gZGlzcG9zZQorCisJLyoqCisJICogQHJldHVybiB0aGUgaW5zdGFuY2Ugb2YgdGhlIFJlbGF0aXZlIFZhbHVlIFByb3ZpZGVyIEFkYXB0ZXIgRmFjdG9yeQorCSAqLworCXByaXZhdGUgc3RhdGljIFJlbGF0aXZlVmFsdWVQcm92aWRlckFkYXB0ZXJGYWN0b3J5IGdldFJlbGF0aXZlVmFsdWVQcm92aWRlckFkYXB0ZXJGYWN0b3J5KCkgeworCQlyZXR1cm4gUmVsYXRpdmVWYWx1ZVByb3ZpZGVyQWRhcHRlckZhY3RvcnkuSU5TVEFOQ0U7CisJfSAvLyBnZXRSZWxhdGl2ZVZhbHVlUHJvdmlkZXJBZGFwdGVyRmFjdG9yeQorCisJLyoqCisJICogVGhpcyBjbGFzcyBpcyBhIFJlbGF0aXZlIFZhbHVlIEhpc3RvcnkgUHJvdmlkZXIgZm9yIERpc2Vhc2VNb2RlbExhYmVsCisJICogaW5zdGFuY2VzLiBJdCBwcm92aWRlcyBhIGNvbGxlY3Rpb24gb2YgdGhlIHByb3BlcnRpZXMgdGhhdCBjYW4gaGF2ZQorCSAqIHJlbGF0aXZlIHZhbHVlcyBhbmQgd2lsbCBjb21wdXRlIHRoZSB2YWx1ZSBiZXR3ZWVuIDAuMCBhbmQgMS4wIGZvciBhbnkgb2YKKwkgKiB0aG9zZSBwcm9wZXJ0aWVzLiBJdCB3aWxsIGFsc28gcHJvdmlkZSBoaXN0b3JpYyByZWxhdGl2ZSB2YWx1ZXMuCisJICogCisJICogQHNlZSBEaXNlYXNlTW9kZWxMYWJlbFZhbHVlUmVsYXRpdmVWYWx1ZUhpc3RvcnlQcm92aWRlcgorCSAqLworCXB1YmxpYyBzdGF0aWMgY2xhc3MgRGlzZWFzZU1vZGVsTGFiZWxSZWxhdGl2ZVZhbHVlSGlzdG9yeVByb3ZpZGVyIGV4dGVuZHMKKwkJCVJlbGF0aXZlVmFsdWVIaXN0b3J5UHJvdmlkZXJBZGFwdGVyIGltcGxlbWVudHMKKwkJCVJlbGF0aXZlVmFsdWVIaXN0b3J5UHJvdmlkZXIgeworCisJCXByaXZhdGUgSGlzdG9yeVByb3ZpZGVyQWRhcHRlciBoaXN0b3J5UHJvdmlkZXJBZGFwdGVyID0gbnVsbDsKKworCQkvKioKKwkJICogQHBhcmFtIGhpc3RvcnlQcm92aWRlckFkYXB0ZXIKKwkJICovCisJCXB1YmxpYyBEaXNlYXNlTW9kZWxMYWJlbFJlbGF0aXZlVmFsdWVIaXN0b3J5UHJvdmlkZXIoCisJCQkJZmluYWwgSGlzdG9yeVByb3ZpZGVyQWRhcHRlciBoaXN0b3J5UHJvdmlkZXJBZGFwdGVyKSB7CisJCQl0aGlzLmhpc3RvcnlQcm92aWRlckFkYXB0ZXIgPSBoaXN0b3J5UHJvdmlkZXJBZGFwdGVyOworCQkJaGlzdG9yeVByb3ZpZGVyQWRhcHRlci5hZGRFeHRlbnNpb25MaXN0ZW5lcih0aGlzKTsKKwkJfSAvLyBEaXNlYXNlTW9kZWxMYWJlbFJlbGF0aXZlVmFsdWVIaXN0b3J5UHJvdmlkZXIKKworCQkvKioKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmFkYXB0ZXJzLnJlbGF0aXZldmFsdWUuUmVsYXRpdmVWYWx1ZVByb3ZpZGVyQWRhcHRlciNnZXRQcm9wZXJ0aWVzKCkKKwkJICovCisJCUBPdmVycmlkZQorCQlwdWJsaWMgTGlzdDxJSXRlbVByb3BlcnR5RGVzY3JpcHRvcj4gZ2V0UHJvcGVydGllcygpIHsKKwkJCWZpbmFsIERpc2Vhc2VNb2RlbExhYmVsIGRtbCA9IChEaXNlYXNlTW9kZWxMYWJlbCkgZ2V0VGFyZ2V0KCk7CisJCQlmaW5hbCBSZWxhdGl2ZVZhbHVlUHJvdmlkZXIgcnZwID0gKFJlbGF0aXZlVmFsdWVQcm92aWRlcikgZ2V0UmVsYXRpdmVWYWx1ZVByb3ZpZGVyQWRhcHRlckZhY3RvcnkoKQorCQkJCQkuYWRhcHQoZG1sLmdldEN1cnJlbnRWYWx1ZSgpLCBSZWxhdGl2ZVZhbHVlUHJvdmlkZXIuY2xhc3MpOworCQkJcmV0dXJuIHJ2cC5nZXRQcm9wZXJ0aWVzKCk7CisJCX0gLy8gZ2V0UHJvcGVydGllcworCisJCS8qKgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuYWRhcHRlcnMucmVsYXRpdmV2YWx1ZS5SZWxhdGl2ZVZhbHVlUHJvdmlkZXJBZGFwdGVyI2dldFJlbGF0aXZlVmFsdWUob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVTdHJ1Y3R1cmFsRmVhdHVyZSkKKwkJICovCisJCUBPdmVycmlkZQorCQlwdWJsaWMgZG91YmxlIGdldFJlbGF0aXZlVmFsdWUoZmluYWwgRVN0cnVjdHVyYWxGZWF0dXJlIGZlYXR1cmUpIHsKKwkJCWZpbmFsIERpc2Vhc2VNb2RlbExhYmVsIGRtbCA9IChEaXNlYXNlTW9kZWxMYWJlbCkgZ2V0VGFyZ2V0KCk7CisJCQlmaW5hbCBSZWxhdGl2ZVZhbHVlUHJvdmlkZXIgcnZwID0gKFJlbGF0aXZlVmFsdWVQcm92aWRlcikgZ2V0UmVsYXRpdmVWYWx1ZVByb3ZpZGVyQWRhcHRlckZhY3RvcnkoKQorCQkJCQkuYWRhcHQoZG1sLmdldEN1cnJlbnRWYWx1ZSgpLCBSZWxhdGl2ZVZhbHVlUHJvdmlkZXIuY2xhc3MpOworCQkJcmV0dXJuIHJ2cC5nZXRSZWxhdGl2ZVZhbHVlKGZlYXR1cmUpOworCQl9IC8vIGdldFJlbGF0aXZlVmFsdWUKKworCQkvKioKKwkJICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgZGVub21pbmF0b3Igb3Igc2NhbGUgdXNlZCB0byBjb252ZXJ0IHRvIHJlbGF0aXZlCisJCSAqIHZhbHVlcyBpbiB0aGUgcmFuZ2UgMC0xLiBGb3IgZXhhbXBsZSwgaW4gYW4gRXBpZGVtaWMgQ29tcGFydG1lbnQgbW9kZWwKKwkJICogdGhlIHN0YXRlIHZhbHVlcyBhcmUgbm9ybWFsaXplZCBieSBwb3B1bGF0aW9uLgorCQkgKiBJdCBpcyByZXF1aXJlZCB3aGVuZXZlciB3ZSBuZWVkIHRvIHN3aXRjaCBiZXR3ZWVuIHJlbGF0aXZlIGFuZCBhYnNvbHV0ZSB2YWx1ZXMKKwkJICogb3IgY2FuIGJlIHVzZWQgdG8gY3JlYXRlIGEgbGFiZWwgc2hvd2luZyB0aGUgbWF4aW11bSBzY2FsZSBmb3IgYW55IHJlbGF0aXZlIHZhbHVlLgorCQkgKiBAcmV0dXJuIHRoZSBkZW5vbWluYXRvciBvciBzY2FsZSB1c2VkIHRvIG5vcm1hbGl6ZSB0aGUgcmVsYXRpdmUgdmFsdWUKKwkJICovCisJCXB1YmxpYyBkb3VibGUgZ2V0RGVub21pbmF0b3IoZmluYWwgRVN0cnVjdHVyYWxGZWF0dXJlIGZlYXR1cmUpIHsKKwkJCWZpbmFsIERpc2Vhc2VNb2RlbExhYmVsIGRtbCA9IChEaXNlYXNlTW9kZWxMYWJlbCkgZ2V0VGFyZ2V0KCk7CisJCQlEaXNlYXNlTW9kZWxMYWJlbFZhbHVlIGRtbHYgPSAoRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZSlkbWwuZ2V0Q3VycmVudFZhbHVlKCk7CisJCQkvL2ZpbmFsIGRvdWJsZSBwb3B1bGF0aW9uQ291bnQgPSBkbWx2LmdldFBvcHVsYXRpb25Db3VudCgpOworCQkJcmV0dXJuIGRtbHYuZ2V0UG9wdWxhdGlvbkNvdW50KCk7CisJCX0KKwkJCisJCS8qKgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuYWRhcHRlcnMucmVsYXRpdmV2YWx1ZS5oaXN0b3J5LlJlbGF0aXZlVmFsdWVIaXN0b3J5UHJvdmlkZXIjZ2V0UmVsYXRpdmVWYWx1ZShvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JdGVtUHJvcGVydHlEZXNjcmlwdG9yLAorCQkgKiAgICAgIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5TVEVNVGltZSkKKwkJICovCisJCUBPdmVycmlkZQorCQlwdWJsaWMgZG91YmxlIGdldFJlbGF0aXZlVmFsdWUoZmluYWwgSXRlbVByb3BlcnR5RGVzY3JpcHRvciBwcm9wZXJ0eSwKKwkJCQlmaW5hbCBTVEVNVGltZSB0aW1lKSB7CisJCQlyZXR1cm4gZ2V0UmVsYXRpdmVWYWx1ZSgoRVN0cnVjdHVyYWxGZWF0dXJlKSBwcm9wZXJ0eQorCQkJCQkuZ2V0RmVhdHVyZShudWxsKSwgdGltZSk7CisJCX0KKworCQkvKioKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmFkYXB0ZXJzLnJlbGF0aXZldmFsdWUuaGlzdG9yeS5SZWxhdGl2ZVZhbHVlSGlzdG9yeVByb3ZpZGVyQWRhcHRlciNnZXRSZWxhdGl2ZVZhbHVlKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FU3RydWN0dXJhbEZlYXR1cmUsCisJCSAqICAgICAgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLlNURU1UaW1lKQorCQkgKi8KKwkJQE92ZXJyaWRlCisJCXB1YmxpYyBkb3VibGUgZ2V0UmVsYXRpdmVWYWx1ZShmaW5hbCBFU3RydWN0dXJhbEZlYXR1cmUgZmVhdHVyZSwKKwkJCQlmaW5hbCBTVEVNVGltZSB0aW1lKSB7CisJCQloaXN0b3J5UHJvdmlkZXJBZGFwdGVyLnNldFRhcmdldChnZXRUYXJnZXQoKSk7CisJCQlmaW5hbCBEaXNlYXNlTW9kZWxMYWJlbCBkbWwgPSAoRGlzZWFzZU1vZGVsTGFiZWwpIGhpc3RvcnlQcm92aWRlckFkYXB0ZXIKKwkJCQkJLmdldEluc3RhbmNlKHRpbWUpOworCQkJZmluYWwgUmVsYXRpdmVWYWx1ZVByb3ZpZGVyQWRhcHRlciBydnAgPSAoUmVsYXRpdmVWYWx1ZVByb3ZpZGVyQWRhcHRlcikgUmVsYXRpdmVWYWx1ZVByb3ZpZGVyQWRhcHRlckZhY3RvcnkuSU5TVEFOQ0UKKwkJCQkJLmFkYXB0KGRtbCwgUmVsYXRpdmVWYWx1ZVByb3ZpZGVyLmNsYXNzKTsKKwkJCXJldHVybiBydnAuZ2V0UmVsYXRpdmVWYWx1ZShmZWF0dXJlKTsKKwkJfSAvLyBnZXRSZWxhdGl2ZVZhbHVlCisKKwkJLyoqCisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5hZGFwdGVycy5yZWxhdGl2ZXZhbHVlLmhpc3RvcnkuUmVsYXRpdmVWYWx1ZUhpc3RvcnlQcm92aWRlciNnZXRBbGxIaXN0b3JpY1JlbGF0aXZlVmFsdWVzKG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IpCisJCSAqLworCQlAT3ZlcnJpZGUKKwkJcHVibGljIGRvdWJsZVtdIGdldEFsbEhpc3RvcmljUmVsYXRpdmVWYWx1ZXMoCisJCQkJZmluYWwgSXRlbVByb3BlcnR5RGVzY3JpcHRvciBwcm9wZXJ0eSkgeworCQkJcmV0dXJuIGdldEFsbEhpc3RvcmljUmVsYXRpdmVWYWx1ZXMoKEVTdHJ1Y3R1cmFsRmVhdHVyZSkgcHJvcGVydHkKKwkJCQkJLmdldEZlYXR1cmUobnVsbCkpOworCQl9CisKKwkJLyoqCisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5hZGFwdGVycy5yZWxhdGl2ZXZhbHVlLmhpc3RvcnkuUmVsYXRpdmVWYWx1ZUhpc3RvcnlQcm92aWRlckFkYXB0ZXIjZ2V0QWxsSGlzdG9yaWNSZWxhdGl2ZVZhbHVlcyhvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRVN0cnVjdHVyYWxGZWF0dXJlKQorCQkgKi8KKwkJQE92ZXJyaWRlCisJCXB1YmxpYyBkb3VibGVbXSBnZXRBbGxIaXN0b3JpY1JlbGF0aXZlVmFsdWVzKAorCQkJCWZpbmFsIEVTdHJ1Y3R1cmFsRmVhdHVyZSBmZWF0dXJlKSB7CisJCQloaXN0b3J5UHJvdmlkZXJBZGFwdGVyLnNldFRhcmdldChnZXRUYXJnZXQoKSk7CisJCQlmaW5hbCBJZGVudGlmaWFibGVbXSBoaXN0b3JpY1ZhbHVlcyA9IGhpc3RvcnlQcm92aWRlckFkYXB0ZXIKKwkJCQkJLmdldEFsbEhpc3RvcmljSW5zdGFuY2VzKCk7CisJCQlmaW5hbCBkb3VibGVbXSByZXRWYWx1ZSA9IG5ldyBkb3VibGVbaGlzdG9yaWNWYWx1ZXMubGVuZ3RoXTsKKworCQkJaW50IGkgPSAwOworCQkJZm9yIChJZGVudGlmaWFibGUgaWRlbnRpZmlhYmxlIDogaGlzdG9yaWNWYWx1ZXMpIHsKKwkJCQlmaW5hbCBEaXNlYXNlTW9kZWxMYWJlbCBkbWwgPSAoRGlzZWFzZU1vZGVsTGFiZWwpIGlkZW50aWZpYWJsZTsKKwkJCQlmaW5hbCBSZWxhdGl2ZVZhbHVlUHJvdmlkZXJBZGFwdGVyIHJ2cCA9IChSZWxhdGl2ZVZhbHVlUHJvdmlkZXJBZGFwdGVyKSBSZWxhdGl2ZVZhbHVlUHJvdmlkZXJBZGFwdGVyRmFjdG9yeS5JTlNUQU5DRQorCQkJCQkJLmFkYXB0KGRtbCwgUmVsYXRpdmVWYWx1ZVByb3ZpZGVyLmNsYXNzKTsKKwkJCQlyZXRWYWx1ZVtpKytdID0gcnZwLmdldFJlbGF0aXZlVmFsdWUoZmVhdHVyZSk7CisJCQl9IC8vIGZvciBlYWNoIElkZW50aWZpYWJsZQorCisJCQlyZXR1cm4gcmV0VmFsdWU7CisJCX0gLy8gZ2V0QWxsSGlzdG9yaWNSZWxhdGl2ZVZhbHVlcworCQkKKworCQkvKioKKwkJICogCisJCSAqIEBwYXJhbSBwcm9wZXJ0eQorCQkgKiBAcGFyYW0gdGltZVJhbmdlCisJCSAqIEByZXR1cm4KKwkJICovCisJCXB1YmxpYyBkb3VibGVbXSBnZXRIaXN0b3JpY0luc3RhbmNlcyhmaW5hbCBJdGVtUHJvcGVydHlEZXNjcmlwdG9yIHByb3BlcnR5LCBTVEVNVGltZVtdIHRpbWVSYW5nZSkgeworCQkJZG91YmxlW10gYWxsVmFsdWVzID0gZ2V0QWxsSGlzdG9yaWNSZWxhdGl2ZVZhbHVlcyhwcm9wZXJ0eSk7CisJCQlkb3VibGVbXSByZXRWYWwgPSBuZXcgZG91YmxlW3RpbWVSYW5nZS5sZW5ndGhdOworCQkJU3lzdGVtLmFycmF5Y29weShhbGxWYWx1ZXMsIDAsIHJldFZhbCwgMCwgdGltZVJhbmdlLmxlbmd0aCk7CisJCQlyZXR1cm4gcmV0VmFsOworCQl9CisKKwkJLyoqCisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5hZGFwdGVycy5yZWxhdGl2ZXZhbHVlLmhpc3RvcnkuUmVsYXRpdmVWYWx1ZUhpc3RvcnlQcm92aWRlckFkYXB0ZXIjZ2V0RWFybGllc3RUaW1lVmFsdWUoKQorCQkgKi8KKwkJQE92ZXJyaWRlCisJCXB1YmxpYyBTVEVNVGltZSBnZXRFYXJsaWVzdFRpbWVWYWx1ZSgpIHsKKwkJCWhpc3RvcnlQcm92aWRlckFkYXB0ZXIuc2V0VGFyZ2V0KGdldFRhcmdldCgpKTsKKwkJCXJldHVybiBoaXN0b3J5UHJvdmlkZXJBZGFwdGVyLmdldEVhcmxpZXN0VGltZVZhbHVlKCk7CisJCX0gLy8gZ2V0RWFybGllc3RUaW1lVmFsdWUKKworCQkvKioKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmFkYXB0ZXJzLnJlbGF0aXZldmFsdWUuaGlzdG9yeS5SZWxhdGl2ZVZhbHVlSGlzdG9yeVByb3ZpZGVyQWRhcHRlciNnZXRBbGxIaXN0b3JpY1RpbWVWYWx1ZXMoKQorCQkgKi8KKwkJQE92ZXJyaWRlCisJCXB1YmxpYyBTVEVNVGltZVtdIGdldEFsbEhpc3RvcmljVGltZVZhbHVlcygpIHsKKwkJCWhpc3RvcnlQcm92aWRlckFkYXB0ZXIuc2V0VGFyZ2V0KGdldFRhcmdldCgpKTsKKwkJCXJldHVybiBoaXN0b3J5UHJvdmlkZXJBZGFwdGVyLmdldEFsbEhpc3RvcmljVGltZVZhbHVlcygpOworCQl9IC8vIGdldEFsbEhpc3RvcmljVGltZVZhbHVlcworCisJfSAvLyBEaXNlYXNlTW9kZWxMYWJlbFJlbGF0aXZlVmFsdWVIaXN0b3J5UHJvdmlkZXIKKworfSAvLyBTdGFuZGFyZFJlbGF0aXZlVmFsdWVIaXN0b3J5UHJvdmlkZXJBZGFwdGVyRmFjdG9yeQpkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9zdGFuZGFyZC9wcm92aWRlci9TdGFuZGFyZFJlbGF0aXZlVmFsdWVQcm92aWRlckFkYXB0ZXJGYWN0b3J5LmphdmEgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3N0YW5kYXJkL3Byb3ZpZGVyL1N0YW5kYXJkUmVsYXRpdmVWYWx1ZVByb3ZpZGVyQWRhcHRlckZhY3RvcnkuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iY2Q4ZDMzCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9zdGFuZGFyZC9wcm92aWRlci9TdGFuZGFyZFJlbGF0aXZlVmFsdWVQcm92aWRlckFkYXB0ZXJGYWN0b3J5LmphdmEKQEAgLTAsMCArMSwzMzggQEAKKy8vIFN0YW5kYXJkUmVsYXRpdmVWYWx1ZVByb3ZpZGVyQWRhcHRlckZhY3RvcnkuamF2YQorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQucHJvdmlkZXI7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LkFkYXB0ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FUmVmZXJlbmNlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FU3RydWN0dXJhbEZlYXR1cmU7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuQ2hhbmdlTm90aWZpZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5Db21wb3NlZEFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklDaGFuZ2VOb3RpZmllcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbVByb3BlcnR5RGVzY3JpcHRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbVByb3BlcnR5U291cmNlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklOb3RpZnlDaGFuZ2VkTGlzdGVuZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkucHJvdmlkZXIuUHJvcGVydHlTb3VyY2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5hZGFwdGVycy5yZWxhdGl2ZXZhbHVlLlJlbGF0aXZlVmFsdWVQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmFkYXB0ZXJzLnJlbGF0aXZldmFsdWUuUmVsYXRpdmVWYWx1ZVByb3ZpZGVyQWRhcHRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmFkYXB0ZXJzLnJlbGF0aXZldmFsdWUuUmVsYXRpdmVWYWx1ZVByb3ZpZGVyQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLkRpc2Vhc2VNb2RlbExhYmVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5EaXNlYXNlTW9kZWxMYWJlbFZhbHVlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TRUlSTGFiZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlNFSVJMYWJlbFZhbHVlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TSUxhYmVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TSUxhYmVsVmFsdWU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlNJUkxhYmVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TSVJMYWJlbFZhbHVlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsVmFsdWU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLnV0aWwuU3RhbmRhcmRBZGFwdGVyRmFjdG9yeTsKKworLyoqCisgKiBUaGlzIGNsYXNzIGlzIGEgZmFjdG9yeSBmb3IgdGhpcyBtb2RlbCB0aGF0IGNyZWF0ZXMKKyAqIHtAbGluayBSZWxhdGl2ZVZhbHVlUHJvdmlkZXJ9J3MgZm9yIGNsYXNzZXMgaW4gdGhlIG1vZGVsLgorICovCitwdWJsaWMgY2xhc3MgU3RhbmRhcmRSZWxhdGl2ZVZhbHVlUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSBleHRlbmRzCisJCVN0YW5kYXJkQWRhcHRlckZhY3RvcnkgaW1wbGVtZW50cyBSZWxhdGl2ZVZhbHVlUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSB7CisKKwkvKioKKwkgKiBUaGlzIGtlZXBzIHRyYWNrIG9mIHRoZSByb290IGFkYXB0ZXIgZmFjdG9yeSB0aGF0IGRlbGVnYXRlcyB0byB0aGlzCisJICogYWRhcHRlciBmYWN0b3J5LgorCSAqLworCXByb3RlY3RlZCBDb21wb3NlZEFkYXB0ZXJGYWN0b3J5IHBhcmVudEFkYXB0ZXJGYWN0b3J5OworCisJLyoqCisJICogVGhpcyBpcyB1c2VkIHRvIGltcGxlbWVudAorCSAqIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JQ2hhbmdlTm90aWZpZXJ9LgorCSAqLworCXByb3RlY3RlZCBJQ2hhbmdlTm90aWZpZXIgY2hhbmdlTm90aWZpZXIgPSBuZXcgQ2hhbmdlTm90aWZpZXIoKTsKKworCS8qKgorCSAqIFRoaXMgZmFjdG9yeSBpcyB1c2VkIHRvIGNyZWF0ZSBpdGVtIHByb3ZpZGVycyBmb3IgdGhlIGFkYXB0ZWQgY2xhc3Nlcy4KKwkgKiBUaGUgaXRlbSBwcm92aWRlcnMgYXJlIHVzZWQgYXMgcHJvcGVydHkgc291cmNlcyB0byBnZXQgdGhlIHByb3BlcnRpZXMKKwkgKiB0aGF0IGNhbiBoYXZlIHJlbGF0aXZlIHZhbHVlcy4KKwkgKi8KKwlwcml2YXRlIHN0YXRpYyBTdGFuZGFyZEl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5IGl0ZW1Qcm92aWRlckZhY3Rvcnk7CisKKwkvKioKKwkgKiBDb25zdHJ1Y3RvcgorCSAqLworCXB1YmxpYyBTdGFuZGFyZFJlbGF0aXZlVmFsdWVQcm92aWRlckFkYXB0ZXJGYWN0b3J5KCkgeworCQlzdXBlcigpOworCQlSZWxhdGl2ZVZhbHVlUHJvdmlkZXJBZGFwdGVyRmFjdG9yeS5JTlNUQU5DRS5hZGRBZGFwdGVyRmFjdG9yeSh0aGlzKTsKKwl9IC8vIFN0YW5kYXJkUmVsYXRpdmVWYWx1ZVByb3ZpZGVyQWRhcHRlckZhY3RvcnkKKworCS8qKgorCSAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBieSB0aGUge0BsaW5rIFN0YW5kYXJkU3dpdGNofSBpbnN0YW5jZSBpbiB0aGUKKwkgKiBwYXJlbnQge0BsaW5rIFN0YW5kYXJkQWRhcHRlckZhY3Rvcnl9IGZvciBhbGwgY2FzZXMgZm9yIGNsYXNzZXMgZGVyaXZlZAorCSAqIGZyb20ge0BsaW5rIERpc2Vhc2VNb2RlbExhYmVsfSAoZS5nLiwge0BsaW5rIFNJTGFiZWx9LCB7QGxpbmsgU0lSTGFiZWx9LAorCSAqIHtAbGluayBTRUlSTGFiZWx9KS4KKwkgKiAKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC51dGlsLlN0YW5kYXJkQWRhcHRlckZhY3RvcnkjY3JlYXRlRGlzZWFzZU1vZGVsTGFiZWxBZGFwdGVyKCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVEaXNlYXNlTW9kZWxMYWJlbEFkYXB0ZXIoKSB7CisJCS8vIEl0IHNlZW1zIHRoYXQgeW91IGNhbid0IGhhdmUgc2luZ2xldG9uIGFkYXB0ZXJzIHRoYXQgcHJvdmlkZQorCQkvLyBiZWhhdmlvcmFsIGV4dGVuc2lvbnMgd2l0aG91dCBleHBsaWNpdGx5IHNldHRpbmcgdGhlIHRhcmdldAorCQkvLyBlYWNoIHRpbWUgaXQgaXMgYWRhcHRlZAorCQlyZXR1cm4gbmV3IERpc2Vhc2VNb2RlbExhYmVsUmVsYXRpdmVWYWx1ZVByb3ZpZGVyKCk7CisJfSAvLyBjcmVhdGVEaXNlYXNlTW9kZWxMYWJlbEFkYXB0ZXIKKworCS8qKgorCSAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBieSB0aGUge0BsaW5rIFN0YW5kYXJkU3dpdGNofSBpbnN0YW5jZSBpbiB0aGUKKwkgKiBwYXJlbnQge0BsaW5rIFN0YW5kYXJkQWRhcHRlckZhY3Rvcnl9IGZvciBhbGwgY2FzZXMgZm9yIGNsYXNzZXMgZGVyaXZlZAorCSAqIGZyb20ge0BsaW5rIERpc2Vhc2VNb2RlbExhYmVsVmFsdWV9IChlLmcuLCB7QGxpbmsgU0lMYWJlbFZhbHVlfSwKKwkgKiB7QGxpbmsgU0lSTGFiZWxWYWx1ZX0sIHtAbGluayBTRUlSTGFiZWxWYWx1ZX0pLgorCSAqIAorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLnV0aWwuU3RhbmRhcmRBZGFwdGVyRmFjdG9yeSNjcmVhdGVEaXNlYXNlTW9kZWxMYWJlbFZhbHVlQWRhcHRlcigpCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZUFkYXB0ZXIoKSB7CisJCS8vIEl0IHNlZW1zIHRoYXQgeW91IGNhbid0IGhhdmUgc2luZ2xldG9uIGFkYXB0ZXJzIHRoYXQgcHJvdmlkZQorCQkvLyBiZWhhdmlvcmFsIGV4dGVuc2lvbnMgd2l0aG91dCBleHBsaWNpdGx5IHNldHRpbmcgdGhlIHRhcmdldAorCQkvLyBlYWNoIHRpbWUgaXQgaXMgYWRhcHRlZAorCQlyZXR1cm4gbmV3IERpc2Vhc2VNb2RlbExhYmVsVmFsdWVSZWxhdGl2ZVZhbHVlUHJvdmlkZXIoKTsKKwl9IC8vIGNyZWF0ZURpc2Vhc2VNb2RlbExhYmVsVmFsdWVBZGFwdGVyCisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklDaGFuZ2VOb3RpZmllciNhZGRMaXN0ZW5lcihvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JTm90aWZ5Q2hhbmdlZExpc3RlbmVyKQorCSAqLworCXB1YmxpYyB2b2lkIGFkZExpc3RlbmVyKElOb3RpZnlDaGFuZ2VkTGlzdGVuZXIgbm90aWZ5Q2hhbmdlZExpc3RlbmVyKSB7CisJCWNoYW5nZU5vdGlmaWVyLmFkZExpc3RlbmVyKG5vdGlmeUNoYW5nZWRMaXN0ZW5lcik7CisJfSAvLyBhZGRMaXN0ZW5lcgorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JQ2hhbmdlTm90aWZpZXIjZmlyZU5vdGlmeUNoYW5nZWQob3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uKQorCSAqLworCXB1YmxpYyB2b2lkIGZpcmVOb3RpZnlDaGFuZ2VkKE5vdGlmaWNhdGlvbiBub3RpZmljYXRpb24pIHsKKwkJY2hhbmdlTm90aWZpZXIuZmlyZU5vdGlmeUNoYW5nZWQobm90aWZpY2F0aW9uKTsKKwkJaWYgKHBhcmVudEFkYXB0ZXJGYWN0b3J5ICE9IG51bGwpIHsKKwkJCXBhcmVudEFkYXB0ZXJGYWN0b3J5LmZpcmVOb3RpZnlDaGFuZ2VkKG5vdGlmaWNhdGlvbik7CisJCX0KKwl9IC8vIGZpcmVOb3RpZnlDaGFuZ2VkCisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklDaGFuZ2VOb3RpZmllciNyZW1vdmVMaXN0ZW5lcihvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JTm90aWZ5Q2hhbmdlZExpc3RlbmVyKQorCSAqLworCXB1YmxpYyB2b2lkIHJlbW92ZUxpc3RlbmVyKElOb3RpZnlDaGFuZ2VkTGlzdGVuZXIgbm90aWZ5Q2hhbmdlZExpc3RlbmVyKSB7CisJCWNoYW5nZU5vdGlmaWVyLnJlbW92ZUxpc3RlbmVyKG5vdGlmeUNoYW5nZWRMaXN0ZW5lcik7CisJfSAvLyByZW1vdmVMaXN0ZW5lcgorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5Db21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5I2dldFJvb3RBZGFwdGVyRmFjdG9yeSgpCisJICovCisJcHVibGljIENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnkgZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCkgeworCQlyZXR1cm4gcGFyZW50QWRhcHRlckZhY3RvcnkgPT0gbnVsbCA/IHRoaXMgOiBwYXJlbnRBZGFwdGVyRmFjdG9yeQorCQkJCS5nZXRSb290QWRhcHRlckZhY3RvcnkoKTsKKwl9IC8vIGdldFJvb3RBZGFwdGVyRmFjdG9yeQorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5Db21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5I3NldFBhcmVudEFkYXB0ZXJGYWN0b3J5KG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkNvbXBvc2VkQWRhcHRlckZhY3RvcnkpCisJICovCisJcHVibGljIHZvaWQgc2V0UGFyZW50QWRhcHRlckZhY3RvcnkoCisJCQlDb21wb3NlZEFkYXB0ZXJGYWN0b3J5IHBhcmVudEFkYXB0ZXJGYWN0b3J5KSB7CisJCXRoaXMucGFyZW50QWRhcHRlckZhY3RvcnkgPSBwYXJlbnRBZGFwdGVyRmFjdG9yeTsKKwl9IC8vIHNldFBhcmVudEFkYXB0ZXJGYWN0b3J5CisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC51dGlsLlN0YW5kYXJkQWRhcHRlckZhY3RvcnkjaXNGYWN0b3J5Rm9yVHlwZShqYXZhLmxhbmcuT2JqZWN0KQorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBib29sZWFuIGlzRmFjdG9yeUZvclR5cGUoT2JqZWN0IHR5cGUpIHsKKwkJcmV0dXJuIHR5cGUgPT0gUmVsYXRpdmVWYWx1ZVByb3ZpZGVyLmNsYXNzCisJCQkJfHwgc3VwZXIuaXNGYWN0b3J5Rm9yVHlwZSh0eXBlKTsKKwl9IC8vIGlzRmFjdG9yeUZvclR5cGUKKworCS8qKgorCSAqIFRoaXMgZGlzcG9zZXMgYWxsIG9mIHRoZSBpdGVtIHByb3ZpZGVycyBjcmVhdGVkIGJ5IHRoaXMgZmFjdG9yeS4KKwkgKiAKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklEaXNwb3NhYmxlI2Rpc3Bvc2UoKQorCSAqLworCXB1YmxpYyB2b2lkIGRpc3Bvc2UoKSB7CisJCS8vIE5vdGhpbmcKKwl9IC8vIGRpc3Bvc2UKKworCS8qKgorCSAqIEByZXR1cm4gdGhlIGluc3RhbmNlIG9mIHRoZSBSZWxhdGl2ZSBWYWx1ZSBQcm92aWRlciBBZGFwdGVyIEZhY3RvcnkKKwkgKi8KKwlwcml2YXRlIHN0YXRpYyBSZWxhdGl2ZVZhbHVlUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSBnZXRSZWxhdGl2ZVZhbHVlUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSgpIHsKKwkJcmV0dXJuIFJlbGF0aXZlVmFsdWVQcm92aWRlckFkYXB0ZXJGYWN0b3J5LklOU1RBTkNFOworCX0gLy8gZ2V0UmVsYXRpdmVWYWx1ZVByb3ZpZGVyQWRhcHRlckZhY3RvcnkKKworCS8qKgorCSAqIEByZXR1cm4gdGhlIGluc3RhbmNlIG9mIHRoZSBTdGFuZGFyZCBJdGVtIFByb3ZpZGVyIGZhY3RvcnkuCisJICovCisJcHJpdmF0ZSBzdGF0aWMgU3RhbmRhcmRJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSBnZXRJdGVtUHJvdmlkZXJGYWN0b3J5KCkgeworCQlpZiAoaXRlbVByb3ZpZGVyRmFjdG9yeSA9PSBudWxsKSB7CisJCQlpdGVtUHJvdmlkZXJGYWN0b3J5ID0gbmV3IFN0YW5kYXJkSXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkoKTsKKwkJfQorCQlyZXR1cm4gaXRlbVByb3ZpZGVyRmFjdG9yeTsKKwl9IC8vIGdldEl0ZW1Qcm92aWRlckZhY3RvcnkKKworCS8qKgorCSAqIFRoaXMgY2xhc3MgaXMgYSBSZWxhdGl2ZSBWYWx1ZSBQcm92aWRlciBmb3IgRGlzZWFzZU1vZGVsTGFiZWwgaW5zdGFuY2VzLgorCSAqIEl0IHByb3ZpZGVzIGEgY29sbGVjdGlvbiBvZiB0aGUgcHJvcGVydGllcyB0aGF0IGNhbiBoYXZlIHJlbGF0aXZlIHZhbHVlcworCSAqIGFuZCB3aWxsIGNvbXB1dGUgdGhlIHZhbHVlIGJldHdlZW4gMC4wIGFuZCAxLjAgZm9yIGFueSBvZiB0aG9zZQorCSAqIHByb3BlcnRpZXMuCisJICogCisJICogQHNlZSBEaXNlYXNlTW9kZWxMYWJlbFZhbHVlUmVsYXRpdmVWYWx1ZVByb3ZpZGVyCisJICovCisJcHVibGljIHN0YXRpYyBjbGFzcyBEaXNlYXNlTW9kZWxMYWJlbFJlbGF0aXZlVmFsdWVQcm92aWRlciBleHRlbmRzCisJCQlSZWxhdGl2ZVZhbHVlUHJvdmlkZXJBZGFwdGVyIGltcGxlbWVudHMgUmVsYXRpdmVWYWx1ZVByb3ZpZGVyIHsKKworCQkvKioKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmFkYXB0ZXJzLnJlbGF0aXZldmFsdWUuUmVsYXRpdmVWYWx1ZVByb3ZpZGVyQWRhcHRlciNnZXRQcm9wZXJ0aWVzKCkKKwkJICovCisJCUBPdmVycmlkZQorCQlwdWJsaWMgTGlzdDxJSXRlbVByb3BlcnR5RGVzY3JpcHRvcj4gZ2V0UHJvcGVydGllcygpIHsKKwkJCWZpbmFsIERpc2Vhc2VNb2RlbExhYmVsIGRtbCA9IChEaXNlYXNlTW9kZWxMYWJlbCkgZ2V0VGFyZ2V0KCk7CisJCQlmaW5hbCBSZWxhdGl2ZVZhbHVlUHJvdmlkZXIgcnZwID0gKFJlbGF0aXZlVmFsdWVQcm92aWRlcikgZ2V0UmVsYXRpdmVWYWx1ZVByb3ZpZGVyQWRhcHRlckZhY3RvcnkoKQorCQkJCQkuYWRhcHQoZG1sLmdldEN1cnJlbnRWYWx1ZSgpLCBSZWxhdGl2ZVZhbHVlUHJvdmlkZXIuY2xhc3MpOworCQkJcmV0dXJuIHJ2cC5nZXRQcm9wZXJ0aWVzKCk7CisJCX0gLy8gZ2V0UHJvcGVydGllcworCisJCS8qKgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuYWRhcHRlcnMucmVsYXRpdmV2YWx1ZS5SZWxhdGl2ZVZhbHVlUHJvdmlkZXJBZGFwdGVyI2dldFJlbGF0aXZlVmFsdWUob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVTdHJ1Y3R1cmFsRmVhdHVyZSkKKwkJICovCisJCUBPdmVycmlkZQorCQlwdWJsaWMgZG91YmxlIGdldFJlbGF0aXZlVmFsdWUoRVN0cnVjdHVyYWxGZWF0dXJlIGZlYXR1cmUpIHsKKwkJCWZpbmFsIERpc2Vhc2VNb2RlbExhYmVsIGRtbCA9IChEaXNlYXNlTW9kZWxMYWJlbCkgZ2V0VGFyZ2V0KCk7CisJCQlmaW5hbCBSZWxhdGl2ZVZhbHVlUHJvdmlkZXIgcnZwID0gKFJlbGF0aXZlVmFsdWVQcm92aWRlcikgZ2V0UmVsYXRpdmVWYWx1ZVByb3ZpZGVyQWRhcHRlckZhY3RvcnkoKQorCQkJCQkuYWRhcHQoZG1sLmdldEN1cnJlbnRWYWx1ZSgpLCBSZWxhdGl2ZVZhbHVlUHJvdmlkZXIuY2xhc3MpOworCQkJcmV0dXJuIHJ2cC5nZXRSZWxhdGl2ZVZhbHVlKGZlYXR1cmUpOworCQl9IC8vIGdldFJlbGF0aXZlVmFsdWUKKwkJCisJCS8qKgorCQkgKiB0aGlzIGhlbHBlciBtZXRob2QgcmV0dXJucyB0aGUgYWJzb2x1dGUgdG90YWwgcG9wdWxhdGlvbi4KKwkJICogSXQgaXMgcmVxdWlyZWQgd2hlbmV2ZXIgd2UgbmVlZCB0byBzd2l0Y2ggYmV0d2VlbiByZWxhdGl2ZSBhbmQgYWJzb2x1dGUgdmFsdWVzCisJCSAqIEByZXR1cm4gdGhlIHRvdGFsIGN1cnJlbnQgcG9wdWxhdGlvbiBjb3VudCAoYWJzb2x1dGUpCisJCSAqLworCQlwdWJsaWMgZG91YmxlIGdldERlbm9taW5hdG9yKGZpbmFsIEVTdHJ1Y3R1cmFsRmVhdHVyZSBmZWF0dXJlKSB7CisJCQlmaW5hbCBEaXNlYXNlTW9kZWxMYWJlbCBkbWwgPSAoRGlzZWFzZU1vZGVsTGFiZWwpIGdldFRhcmdldCgpOworCQkJRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZSBkbWx2ID0gKFN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZSlkbWwuZ2V0Q3VycmVudFZhbHVlKCk7CisJCQkvL2ZpbmFsIGRvdWJsZSBwb3B1bGF0aW9uQ291bnQgPSBkbWx2LmdldFBvcHVsYXRpb25Db3VudCgpOworCQkJcmV0dXJuIGRtbHYuZ2V0UG9wdWxhdGlvbkNvdW50KCk7CisJCX0KKwkJCisJCQorCQkKKworCX0gLy8gRGlzZWFzZU1vZGVsTGFiZWxSZWxhdGl2ZVZhbHVlUHJvdmlkZXIKKworCS8qKgorCSAqIFRoaXMgY2xhc3MgaXMgYSBSZWxhdGl2ZSBWYWx1ZSBQcm92aWRlciBmb3IgRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZQorCSAqIGluc3RhbmNlcy4gSXQgcHJvdmlkZXMgYSBjb2xsZWN0aW9uIG9mIHRoZSBwcm9wZXJ0aWVzIHRoYXQgY2FuIGhhdmUKKwkgKiByZWxhdGl2ZSB2YWx1ZXMgYW5kIHdpbGwgY29tcHV0ZSB0aGUgdmFsdWUgYmV0d2VlbiAwLjAgYW5kIDEuMCBmb3IgYW55IG9mCisJICogdGhvc2UgcHJvcGVydGllcy4KKwkgKiA8cD4KKwkgKiBUaGUge0BsaW5rIERpc2Vhc2VNb2RlbExhYmVsVmFsdWVSZWxhdGl2ZVZhbHVlUHJvdmlkZXJ9IGluc3RhbmNlIHRoYXQgd2UKKwkgKiBjcmVhdGUgaGVyZSBmaWx0ZXJzIG91dCB0aGUgcHJvcGVydGllcyB0aGF0IGFyZSBub3QgcmVsYXRpdmUgYW5kIGNhbgorCSAqIHJlZmxlY3RpdmVseSBjb21wdXRlIHRoZSByZWxhdGl2ZSB2YWx1ZSwgd2l0aCByZXNwZWN0IHRvIHRoZSBwb3B1bGF0aW9uCisJICogY291bnQgZm9yIHRoZSBkaXNlYXNlIG1vZGVsIGxhYmVsIHZhbHVlLCBmb3IgdGhlIHJlbWFpbmluZyBwcm9wZXJ0aWVzLiBJZgorCSAqIGEgbmV3IHN1Yi1jbGFzcyBvZiB7QGxpbmsgRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZX0gaXMgaW50cm9kdWNlZCB0aGF0IGhhcworCSAqIG90aGVyIG5vbi1yZWxhdGl2ZSBwcm9wZXJ0aWVzLCB0aGV5IHdvdWxkIG5vdCBiZSBmaWx0ZXJlZCBvdXQgYnkgdGhpcworCSAqIHtAbGluayBSZWxhdGl2ZVZhbHVlUHJvdmlkZXJ9IHNvIGEgY29ycmVzcG9uZGluZyBzdWItY2xhc3Mgb2YKKwkgKiB7QGxpbmsgRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZVJlbGF0aXZlVmFsdWVQcm92aWRlcn0gd291bGQgbmVlZCB0byBiZQorCSAqIGRlZmluZWQgdGhhdCBpbXBsZW1lbnRlZCB7QGxpbmsgUmVsYXRpdmVWYWx1ZVByb3ZpZGVyI2dldFByb3BlcnRpZXMoKX0KKwkgKiBzdWNoIHRoYXQgaXQgZmlyc3QgY2FsbGVkIGl0cyBzdXBlci1jbGFzcworCSAqIDxjb2RlPnN1cGVyLmdldFByb3BlcnRpZXM8L2NvZGU+IChpLmUuLAorCSAqIHtAbGluayBEaXNlYXNlTW9kZWxMYWJlbFZhbHVlUmVsYXRpdmVWYWx1ZVByb3ZpZGVyI2dldFByb3BlcnRpZXMoKX0pIHRvCisJICogZ2V0IHRoZSBsaXN0IG9mIGZpbHRlcmVkIHByb3BlcnRpZXMuIFRoZW4sIGl0IHdvdWxkIG5lZWQgdG8gcmVtb3ZlIGFueQorCSAqIG5vbi1yZWxhdGl2ZSBwcm9wZXJ0aWVzIHRoYXQgaXQga25vd3MgYWJvdXQgZnJvbSB0aGF0IGxpc3QuCisJICogPHA+CisJICogVGhlcmUgd291bGQgcHJvYmFibHkgYmUgbm8gbmVlZCBmb3IgdGhlIG5ldyBjbGFzcyB0byBvdmVycmlkZQorCSAqIHtAbGluayBEaXNlYXNlTW9kZWxMYWJlbFZhbHVlUmVsYXRpdmVWYWx1ZVByb3ZpZGVyI2dldFJlbGF0aXZlVmFsdWUoRVN0cnVjdHVyYWxGZWF0dXJlKX0KKwkgKiBhcyB0aGUgcmVsYXRpdmUgdmFsdWVzIGFyZSBjb21wdXRlZCBzdWNoIHRoYXQgdGhlIG5ldyBwcm9wZXJ0eSB2YWx1ZXMgYXJlCisJICogb2J0YWluZWQgcmVmbGV4aXZlbHksIHNvIHRoZXkgc2hvdWxkIGJlIGZvdW5kLiBUaGlzIGFzc3VtZXMgdGhhdCB0aGUgbmV3CisJICogdmFsdWVzIGFyZSByZWxhdGl2ZSB0byB0aGUgcG9wdWxhdGlvbiBjb3VudCAoaS5lLiwKKwkgKiB7QGxpbmsgRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZSNnZXRQb3B1bGF0aW9uQ291bnQoKX0pLiBJZiB0aGV5J3JlCisJICogcmVsYXRpdmUgdG8gc29tZSBvdGhlciB2YWx1ZSB0aGVuIGFuIG92ZXJyaWRlIHdvdWxkIGJlIG5lY2Vzc2FyeS4KKwkgKi8KKwlwdWJsaWMgc3RhdGljIGNsYXNzIERpc2Vhc2VNb2RlbExhYmVsVmFsdWVSZWxhdGl2ZVZhbHVlUHJvdmlkZXIgZXh0ZW5kcworCQkJUmVsYXRpdmVWYWx1ZVByb3ZpZGVyQWRhcHRlciBpbXBsZW1lbnRzIFJlbGF0aXZlVmFsdWVQcm92aWRlciB7CisKKwkJLyoqCisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5hZGFwdGVycy5yZWxhdGl2ZXZhbHVlLlJlbGF0aXZlVmFsdWVQcm92aWRlckFkYXB0ZXIjZ2V0UHJvcGVydGllcygpCisJCSAqLworCQlAT3ZlcnJpZGUKKwkJcHVibGljIExpc3Q8SUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I+IGdldFByb3BlcnRpZXMoKSB7CisJCQlmaW5hbCBMaXN0PElJdGVtUHJvcGVydHlEZXNjcmlwdG9yPiByZXRWYWx1ZSA9IG5ldyBBcnJheUxpc3Q8SUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I+KCk7CisJCQlmaW5hbCBTdGFuZGFyZEl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5IGl0ZW1Qcm92aWRlckZhY3RvcnkgPSBnZXRJdGVtUHJvdmlkZXJGYWN0b3J5KCk7CisJCQlmaW5hbCBEaXNlYXNlTW9kZWxMYWJlbFZhbHVlIGRtbHYgPSAoRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZSkgZ2V0VGFyZ2V0KCk7CisJCQlmaW5hbCBJSXRlbVByb3BlcnR5U291cmNlIHByb3BlcnR5U291cmNlID0gKElJdGVtUHJvcGVydHlTb3VyY2UpIGl0ZW1Qcm92aWRlckZhY3RvcnkKKwkJCQkJLmFkYXB0KGRtbHYsIFByb3BlcnR5U291cmNlLmNsYXNzKTsKKwkJCWZpbmFsIExpc3Q8SUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I+IHByb3BlcnRpZXMgPSBwcm9wZXJ0eVNvdXJjZQorCQkJCQkuZ2V0UHJvcGVydHlEZXNjcmlwdG9ycyhudWxsKTsKKwkJCS8vIFRoZSBsaXN0IG9mIHByb3BlcnR5IGRlc2NyaXB0b3JzIGluY2x1ZGVzIG9uZXMgdGhhdCBkbyBub3QgaGF2ZQorCQkJLy8gcmVsYXRpdmUgdmFsdWVzLiBXZSBmaWx0ZXIgdGhvc2Ugb3V0IGhlcmUgYW5kIHJldHVybiB0aGUgcmVzdC4KKwkJCWZvciAoSUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IgZGVzY3JpcHRvciA6IHByb3BlcnRpZXMpIHsKKwkJCQkvLyBEb2VzIHRoaXMgcHJvcGVydHkgaGF2ZSBhIHJlbGF0aXZlIHZhbHVlPworCQkJCWZpbmFsIEVTdHJ1Y3R1cmFsRmVhdHVyZSBmZWF0dXJlID0gKEVTdHJ1Y3R1cmFsRmVhdHVyZSkgZGVzY3JpcHRvcgorCQkJCQkJLmdldEZlYXR1cmUobnVsbCk7CisJCQkJCisJCQkJaWYoZmVhdHVyZSBpbnN0YW5jZW9mIEVSZWZlcmVuY2UpIGNvbnRpbnVlOworCQkJCWZpbmFsIGludCBmZWF0dXJlSWQgPSBmZWF0dXJlLmdldEZlYXR1cmVJRCgpOworCQkJCQorCQkJCQorCQkJCS8vIG5ldworLy8JCQkJaWYgKCEoZmVhdHVyZUlkID09IFN0YW5kYXJkUGFja2FnZS5TSV9MQUJFTF9WQUxVRV9fRElTRUFTRV9ERUFUSFMgCisvLwkJCQkJCXx8IGZlYXR1cmVJZCA9PSBTdGFuZGFyZFBhY2thZ2UuRElTRUFTRV9NT0RFTF9MQUJFTF9WQUxVRV9fUE9QVUxBVElPTl9DT1VOVCkpIHsKKwkJCQkJLy8gWWVzCisJCQkJCXJldFZhbHVlLmFkZChkZXNjcmlwdG9yKTsKKy8vCQkJCX0gLy8gaWYgaGFzIHJlbGF0aXZlIHZhbHVlCisJCQkJLy8gT2xkCisJCQkJLyoKKwkJCQlpZiAoIShmZWF0dXJlSWQgPT0gU3RhbmRhcmRQYWNrYWdlLkRJU0VBU0VfTU9ERUxfTEFCRUxfVkFMVUVfX0JJUlRIUworCQkJCQkJfHwgZmVhdHVyZUlkID09IFN0YW5kYXJkUGFja2FnZS5ESVNFQVNFX01PREVMX0xBQkVMX1ZBTFVFX19ERUFUSFMKKwkJCQkJCXx8IGZlYXR1cmVJZCA9PSBTdGFuZGFyZFBhY2thZ2UuRElTRUFTRV9NT0RFTF9MQUJFTF9WQUxVRV9fRElTRUFTRV9ERUFUSFMgfHwgZmVhdHVyZUlkID09IFN0YW5kYXJkUGFja2FnZS5ESVNFQVNFX01PREVMX0xBQkVMX1ZBTFVFX19QT1BVTEFUSU9OX0NPVU5UKSkgeworCQkJCQkvLyBZZXMKKwkJCQkJcmV0VmFsdWUuYWRkKGRlc2NyaXB0b3IpOworCQkJCX0gLy8gaWYgaGFzIHJlbGF0aXZlIHZhbHVlCisJCQkJKi8KKwkJCQkKKwkJCX0gLy8gZm9yCisJCQlyZXR1cm4gcmV0VmFsdWU7CisJCX0gLy8gZ2V0UHJvcGVydGllcworCisJCS8qKgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuYWRhcHRlcnMucmVsYXRpdmV2YWx1ZS5SZWxhdGl2ZVZhbHVlUHJvdmlkZXIjZ2V0UmVsYXRpdmVWYWx1ZShFU3RydWN0dXJhbEZlYXR1cmUpCisJCSAqLworCQlwdWJsaWMgZG91YmxlIGdldFJlbGF0aXZlVmFsdWUoZmluYWwgRVN0cnVjdHVyYWxGZWF0dXJlIGZlYXR1cmUpIHsKKwkJCWZpbmFsIERpc2Vhc2VNb2RlbExhYmVsVmFsdWUgZG1sdiA9IChEaXNlYXNlTW9kZWxMYWJlbFZhbHVlKSBnZXRUYXJnZXQoKTsKKwkJCWZpbmFsIGRvdWJsZSBzdGF0ZUNvdW50ID0gKChEb3VibGUpIGRtbHYuZUdldChmZWF0dXJlKSkKKwkJCQkJLmRvdWJsZVZhbHVlKCk7CisJCQlmaW5hbCBkb3VibGUgcG9wdWxhdGlvbkNvdW50ID0gZG1sdi5nZXRQb3B1bGF0aW9uQ291bnQoKTsKKwkJCWZpbmFsIGRvdWJsZSByZXRWYWx1ZSA9IHBvcHVsYXRpb25Db3VudCA8PSAwLjAgPyAwLjAKKwkJCQkJOiAoc3RhdGVDb3VudCAvIHBvcHVsYXRpb25Db3VudCk7CisJCQlyZXR1cm4gcmV0VmFsdWU7CisJCX0gLy8gZ2V0UmVsYXRpdmVWYWx1ZQorCQkKKwkJLyoqCisJCSAqIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIGRlbm9taW5hdG9yIG9yIHNjYWxlIHVzZWQgdG8gY29udmVydCB0byByZWxhdGl2ZQorCQkgKiB2YWx1ZXMgaW4gdGhlIHJhbmdlIDAtMS4gRm9yIGV4YW1wbGUsIGluIGFuIEVwaWRlbWljIENvbXBhcnRtZW50IG1vZGVsCisJCSAqIHRoZSBzdGF0ZSB2YWx1ZXMgYXJlIG5vcm1hbGl6ZWQgYnkgcG9wdWxhdGlvbi4KKwkJICogSXQgaXMgcmVxdWlyZWQgd2hlbmV2ZXIgd2UgbmVlZCB0byBzd2l0Y2ggYmV0d2VlbiByZWxhdGl2ZSBhbmQgYWJzb2x1dGUgdmFsdWVzCisJCSAqIG9yIGNhbiBiZSB1c2VkIHRvIGNyZWF0ZSBhIGxhYmVsIHNob3dpbmcgdGhlIG1heGltdW0gc2NhbGUgZm9yIGFueSByZWxhdGl2ZSB2YWx1ZS4KKwkJICogQHJldHVybiB0aGUgZGVub21pbmF0b3Igb3Igc2NhbGUgdXNlZCB0byBub3JtYWxpemUgdGhlIHJlbGF0aXZlIHZhbHVlCisJCSAqLworCQlwdWJsaWMgZG91YmxlIGdldERlbm9taW5hdG9yKGZpbmFsIEVTdHJ1Y3R1cmFsRmVhdHVyZSBmZWF0dXJlKSB7CisJCQlmaW5hbCBEaXNlYXNlTW9kZWxMYWJlbFZhbHVlIGRtbHYgPSAoRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZSkgZ2V0VGFyZ2V0KCk7CisJCQkvL2ZpbmFsIGRvdWJsZSBwb3B1bGF0aW9uQ291bnQgPSBkbWx2LmdldFBvcHVsYXRpb25Db3VudCgpOworCQkJcmV0dXJuIGRtbHYuZ2V0UG9wdWxhdGlvbkNvdW50KCk7CisJCX0KKwkJCisJfSAvLyBEaXNlYXNlTW9kZWxMYWJlbFZhbHVlUmVsYXRpdmVWYWx1ZVByb3ZpZGVyCit9IC8vIFN0YW5kYXJkUmVsYXRpdmVWYWx1ZVByb3ZpZGVyQWRhcHRlckZhY3RvcnkKZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvc3RhbmRhcmQvcHJvdmlkZXIvU3RhbmRhcmRTdG9jaGFzdGljRGlzZWFzZU1vZGVsSXRlbVByb3ZpZGVyLmphdmEgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3N0YW5kYXJkL3Byb3ZpZGVyL1N0YW5kYXJkU3RvY2hhc3RpY0Rpc2Vhc2VNb2RlbEl0ZW1Qcm92aWRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkxYWZmOWIKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3N0YW5kYXJkL3Byb3ZpZGVyL1N0YW5kYXJkU3RvY2hhc3RpY0Rpc2Vhc2VNb2RlbEl0ZW1Qcm92aWRlci5qYXZhCkBAIC0wLDAgKzEsMTQ5IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5wcm92aWRlcjsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LkFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5Db21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklFZGl0aW5nRG9tYWluSXRlbVByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtTGFiZWxQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbVByb3BlcnR5RGVzY3JpcHRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbVByb3BlcnR5U291cmNlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklTdHJ1Y3R1cmVkSXRlbUNvbnRlbnRQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JVHJlZUl0ZW1Db250ZW50UHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSXRlbVByb3BlcnR5RGVzY3JpcHRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5WaWV3ZXJOb3RpZmljYXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmRTdG9jaGFzdGljRGlzZWFzZU1vZGVsOworCisvKioKKyAqIFRoaXMgaXMgdGhlIGl0ZW0gcHJvdmlkZXIgYWRhcHRlciBmb3IgYSB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkU3RvY2hhc3RpY0Rpc2Vhc2VNb2RlbH0gb2JqZWN0LgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgU3RhbmRhcmRTdG9jaGFzdGljRGlzZWFzZU1vZGVsSXRlbVByb3ZpZGVyCisJZXh0ZW5kcyBTdG9jaGFzdGljRGlzZWFzZU1vZGVsSXRlbVByb3ZpZGVyCisJaW1wbGVtZW50cwkKKwkJSUVkaXRpbmdEb21haW5JdGVtUHJvdmlkZXIsCQorCQlJU3RydWN0dXJlZEl0ZW1Db250ZW50UHJvdmlkZXIsCQorCQlJVHJlZUl0ZW1Db250ZW50UHJvdmlkZXIsCQorCQlJSXRlbUxhYmVsUHJvdmlkZXIsCQorCQlJSXRlbVByb3BlcnR5U291cmNlIHsKKwkvKioKKwkgKiBUaGlzIGNvbnN0cnVjdHMgYW4gaW5zdGFuY2UgZnJvbSBhIGZhY3RvcnkgYW5kIGEgbm90aWZpZXIuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFN0YW5kYXJkU3RvY2hhc3RpY0Rpc2Vhc2VNb2RlbEl0ZW1Qcm92aWRlcihBZGFwdGVyRmFjdG9yeSBhZGFwdGVyRmFjdG9yeSkgeworCQlzdXBlcihhZGFwdGVyRmFjdG9yeSk7CisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIHRoZSBwcm9wZXJ0eSBkZXNjcmlwdG9ycyBmb3IgdGhlIGFkYXB0ZWQgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIExpc3Q8SUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I+IGdldFByb3BlcnR5RGVzY3JpcHRvcnMoT2JqZWN0IG9iamVjdCkgeworCQlpZiAoaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMgPT0gbnVsbCkgeworCQkJc3VwZXIuZ2V0UHJvcGVydHlEZXNjcmlwdG9ycyhvYmplY3QpOworCisJCQlhZGRHYWluUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCk7CisJCX0KKwkJcmV0dXJuIGl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzOworCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyBhIHByb3BlcnR5IGRlc2NyaXB0b3IgZm9yIHRoZSBHYWluIGZlYXR1cmUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgYWRkR2FpblByb3BlcnR5RGVzY3JpcHRvcihPYmplY3Qgb2JqZWN0KSB7CisJCWl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzLmFkZAorCQkJKGNyZWF0ZUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IKKwkJCQkoKChDb21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5KWFkYXB0ZXJGYWN0b3J5KS5nZXRSb290QWRhcHRlckZhY3RvcnkoKSwKKwkJCQkgZ2V0UmVzb3VyY2VMb2NhdG9yKCksCisJCQkJIGdldFN0cmluZygiX1VJX1N0YW5kYXJkU3RvY2hhc3RpY0Rpc2Vhc2VNb2RlbF9nYWluX2ZlYXR1cmUiKSwgLy8kTk9OLU5MUy0xJAorCQkJCSBnZXRTdHJpbmcoIl9VSV9Qcm9wZXJ0eURlc2NyaXB0b3JfZGVzY3JpcHRpb24iLCAiX1VJX1N0YW5kYXJkU3RvY2hhc3RpY0Rpc2Vhc2VNb2RlbF9nYWluX2ZlYXR1cmUiLCAiX1VJX1N0YW5kYXJkU3RvY2hhc3RpY0Rpc2Vhc2VNb2RlbF90eXBlIiksIC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJCAvLyROT04tTkxTLTMkCisJCQkJIFN0YW5kYXJkUGFja2FnZS5MaXRlcmFscy5TVEFOREFSRF9TVE9DSEFTVElDX0RJU0VBU0VfTU9ERUxfX0dBSU4sCisJCQkJIHRydWUsCisJCQkJIGZhbHNlLAorCQkJCSBmYWxzZSwKKwkJCQkgSXRlbVByb3BlcnR5RGVzY3JpcHRvci5SRUFMX1ZBTFVFX0lNQUdFLAorCQkJCSBudWxsLAorCQkJCSBudWxsKSk7CisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIHRoZSBsYWJlbCB0ZXh0IGZvciB0aGUgYWRhcHRlZCBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIFN0cmluZyBnZXRUZXh0KE9iamVjdCBvYmplY3QpIHsKKwkJcmV0dXJuIHN1cGVyLmdldFRleHQob2JqZWN0KTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgdGhlIGxhYmVsIHRleHQgZm9yIHRoZSBhZGFwdGVkIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBTdHJpbmcgZ2V0VGV4dEdlbihPYmplY3Qgb2JqZWN0KSB7CisJCVN0cmluZyBsYWJlbCA9ICgoU3RhbmRhcmRTdG9jaGFzdGljRGlzZWFzZU1vZGVsKW9iamVjdCkuZ2V0RGlzZWFzZU5hbWUoKTsKKwkJcmV0dXJuIGxhYmVsID09IG51bGwgfHwgbGFiZWwubGVuZ3RoKCkgPT0gMCA/CisJCQlnZXRTdHJpbmcoIl9VSV9TdGFuZGFyZFN0b2NoYXN0aWNEaXNlYXNlTW9kZWxfdHlwZSIpIDogLy8kTk9OLU5MUy0xJAorCQkJZ2V0U3RyaW5nKCJfVUlfU3RhbmRhcmRTdG9jaGFzdGljRGlzZWFzZU1vZGVsX3R5cGUiKSArICIgIiArIGxhYmVsOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKKwl9CisJCisJLyoqCisJICogVGhpcyBoYW5kbGVzIG1vZGVsIG5vdGlmaWNhdGlvbnMgYnkgY2FsbGluZyB7QGxpbmsgI3VwZGF0ZUNoaWxkcmVufSB0byB1cGRhdGUgYW55IGNhY2hlZAorCSAqIGNoaWxkcmVuIGFuZCBieSBjcmVhdGluZyBhIHZpZXdlciBub3RpZmljYXRpb24sIHdoaWNoIGl0IHBhc3NlcyB0byB7QGxpbmsgI2ZpcmVOb3RpZnlDaGFuZ2VkfS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBub3RpZnlDaGFuZ2VkKE5vdGlmaWNhdGlvbiBub3RpZmljYXRpb24pIHsKKwkJdXBkYXRlQ2hpbGRyZW4obm90aWZpY2F0aW9uKTsKKworCQlzd2l0Y2ggKG5vdGlmaWNhdGlvbi5nZXRGZWF0dXJlSUQoU3RhbmRhcmRTdG9jaGFzdGljRGlzZWFzZU1vZGVsLmNsYXNzKSkgeworCQkJY2FzZSBTdGFuZGFyZFBhY2thZ2UuU1RBTkRBUkRfU1RPQ0hBU1RJQ19ESVNFQVNFX01PREVMX19HQUlOOgorCQkJCWZpcmVOb3RpZnlDaGFuZ2VkKG5ldyBWaWV3ZXJOb3RpZmljYXRpb24obm90aWZpY2F0aW9uLCBub3RpZmljYXRpb24uZ2V0Tm90aWZpZXIoKSwgZmFsc2UsIHRydWUpKTsKKwkJCQlyZXR1cm47CisJCX0KKwkJc3VwZXIubm90aWZ5Q2hhbmdlZChub3RpZmljYXRpb24pOworCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmVkaXQuY29tbWFuZC5Db21tYW5kUGFyYW1ldGVyfXMgZGVzY3JpYmluZyB0aGUgY2hpbGRyZW4KKwkgKiB0aGF0IGNhbiBiZSBjcmVhdGVkIHVuZGVyIHRoaXMgb2JqZWN0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIGNvbGxlY3ROZXdDaGlsZERlc2NyaXB0b3JzKENvbGxlY3Rpb248T2JqZWN0PiBuZXdDaGlsZERlc2NyaXB0b3JzLCBPYmplY3Qgb2JqZWN0KSB7CisJCXN1cGVyLmNvbGxlY3ROZXdDaGlsZERlc2NyaXB0b3JzKG5ld0NoaWxkRGVzY3JpcHRvcnMsIG9iamVjdCk7CisJfQorCit9CmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3N0YW5kYXJkL3Byb3ZpZGVyL1N0b2NoYXN0aWNEaXNlYXNlTW9kZWxJdGVtUHJvdmlkZXIuamF2YSBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvc3RhbmRhcmQvcHJvdmlkZXIvU3RvY2hhc3RpY0Rpc2Vhc2VNb2RlbEl0ZW1Qcm92aWRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUyNTc1ZGIKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3N0YW5kYXJkL3Byb3ZpZGVyL1N0b2NoYXN0aWNEaXNlYXNlTW9kZWxJdGVtUHJvdmlkZXIuamF2YQpAQCAtMCwwICsxLDE3OSBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQucHJvdmlkZXI7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5BZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JRWRpdGluZ0RvbWFpbkl0ZW1Qcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbUxhYmVsUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1Qcm9wZXJ0eVNvdXJjZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JU3RydWN0dXJlZEl0ZW1Db250ZW50UHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVRyZWVJdGVtQ29udGVudFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuVmlld2VyTm90aWZpY2F0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZFBhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlN0b2NoYXN0aWNEaXNlYXNlTW9kZWw7CisKKy8qKgorICogVGhpcyBpcyB0aGUgaXRlbSBwcm92aWRlciBhZGFwdGVyIGZvciBhIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RvY2hhc3RpY0Rpc2Vhc2VNb2RlbH0gb2JqZWN0LgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgU3RvY2hhc3RpY0Rpc2Vhc2VNb2RlbEl0ZW1Qcm92aWRlcgorCWV4dGVuZHMgRGlzZWFzZU1vZGVsSXRlbVByb3ZpZGVyCisJaW1wbGVtZW50cwkKKwkJSUVkaXRpbmdEb21haW5JdGVtUHJvdmlkZXIsCQorCQlJU3RydWN0dXJlZEl0ZW1Db250ZW50UHJvdmlkZXIsCQorCQlJVHJlZUl0ZW1Db250ZW50UHJvdmlkZXIsCQorCQlJSXRlbUxhYmVsUHJvdmlkZXIsCQorCQlJSXRlbVByb3BlcnR5U291cmNlIHsKKwkvKioKKwkgKiBUaGlzIGNvbnN0cnVjdHMgYW4gaW5zdGFuY2UgZnJvbSBhIGZhY3RvcnkgYW5kIGEgbm90aWZpZXIuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFN0b2NoYXN0aWNEaXNlYXNlTW9kZWxJdGVtUHJvdmlkZXIoQWRhcHRlckZhY3RvcnkgYWRhcHRlckZhY3RvcnkpIHsKKwkJc3VwZXIoYWRhcHRlckZhY3RvcnkpOworCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyB0aGUgcHJvcGVydHkgZGVzY3JpcHRvcnMgZm9yIHRoZSBhZGFwdGVkIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgTGlzdDxJSXRlbVByb3BlcnR5RGVzY3JpcHRvcj4gZ2V0UHJvcGVydHlEZXNjcmlwdG9ycyhPYmplY3Qgb2JqZWN0KSB7CisJCWlmIChpdGVtUHJvcGVydHlEZXNjcmlwdG9ycyA9PSBudWxsKSB7CisJCQlzdXBlci5nZXRQcm9wZXJ0eURlc2NyaXB0b3JzKG9iamVjdCk7CisKKwkJCWFkZFNlZWRQcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0KTsKKwkJCS8vIGFkZFJhbmRvbUdlbmVyYXRvclByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QpOworCQl9CisJCXJldHVybiBpdGVtUHJvcGVydHlEZXNjcmlwdG9yczsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgdGhlIHByb3BlcnR5IGRlc2NyaXB0b3JzIGZvciB0aGUgYWRhcHRlZCBjbGFzcy4gPCEtLQorCSAqIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBwYXJhbSBvYmplY3QKKwkgKiBAcmV0dXJuCisJICogCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBMaXN0PElJdGVtUHJvcGVydHlEZXNjcmlwdG9yPiBnZXRQcm9wZXJ0eURlc2NyaXB0b3JzR2VuKE9iamVjdCBvYmplY3QpIHsKKwkJaWYgKGl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzID09IG51bGwpIHsKKwkJCXN1cGVyLmdldFByb3BlcnR5RGVzY3JpcHRvcnMob2JqZWN0KTsKKworCQkJYWRkU2VlZFByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QpOworCQkJYWRkUmFuZG9tR2VuZXJhdG9yUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCk7CisJCX0KKwkJcmV0dXJuIGl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzOworCX0KKwkKKwkvKioKKwkgKiBUaGlzIGFkZHMgYSBwcm9wZXJ0eSBkZXNjcmlwdG9yIGZvciB0aGUgU2VlZCBmZWF0dXJlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIGFkZFNlZWRQcm9wZXJ0eURlc2NyaXB0b3IoT2JqZWN0IG9iamVjdCkgeworCQlpdGVtUHJvcGVydHlEZXNjcmlwdG9ycy5hZGQKKwkJCShjcmVhdGVJdGVtUHJvcGVydHlEZXNjcmlwdG9yCisJCQkJKCgoQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSlhZGFwdGVyRmFjdG9yeSkuZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCksCisJCQkJIGdldFJlc291cmNlTG9jYXRvcigpLAorCQkJCSBnZXRTdHJpbmcoIl9VSV9TdG9jaGFzdGljRGlzZWFzZU1vZGVsX3NlZWRfZmVhdHVyZSIpLCAvLyROT04tTkxTLTEkCisJCQkJIGdldFN0cmluZygiX1VJX1Byb3BlcnR5RGVzY3JpcHRvcl9kZXNjcmlwdGlvbiIsICJfVUlfU3RvY2hhc3RpY0Rpc2Vhc2VNb2RlbF9zZWVkX2ZlYXR1cmUiLCAiX1VJX1N0b2NoYXN0aWNEaXNlYXNlTW9kZWxfdHlwZSIpLCAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQgLy8kTk9OLU5MUy0zJAorCQkJCSBTdGFuZGFyZFBhY2thZ2UuTGl0ZXJhbHMuU1RPQ0hBU1RJQ19ESVNFQVNFX01PREVMX19TRUVELAorCQkJCSB0cnVlLAorCQkJCSBmYWxzZSwKKwkJCQkgZmFsc2UsCisJCQkJIEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IuSU5URUdSQUxfVkFMVUVfSU1BR0UsCisJCQkJIG51bGwsCisJCQkJIG51bGwpKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFkZHMgYSBwcm9wZXJ0eSBkZXNjcmlwdG9yIGZvciB0aGUgUmFuZG9tIEdlbmVyYXRvciBmZWF0dXJlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIGFkZFJhbmRvbUdlbmVyYXRvclByb3BlcnR5RGVzY3JpcHRvcihPYmplY3Qgb2JqZWN0KSB7CisJCWl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzLmFkZAorCQkJKGNyZWF0ZUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IKKwkJCQkoKChDb21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5KWFkYXB0ZXJGYWN0b3J5KS5nZXRSb290QWRhcHRlckZhY3RvcnkoKSwKKwkJCQkgZ2V0UmVzb3VyY2VMb2NhdG9yKCksCisJCQkJIGdldFN0cmluZygiX1VJX1N0b2NoYXN0aWNEaXNlYXNlTW9kZWxfcmFuZG9tR2VuZXJhdG9yX2ZlYXR1cmUiKSwgLy8kTk9OLU5MUy0xJAorCQkJCSBnZXRTdHJpbmcoIl9VSV9Qcm9wZXJ0eURlc2NyaXB0b3JfZGVzY3JpcHRpb24iLCAiX1VJX1N0b2NoYXN0aWNEaXNlYXNlTW9kZWxfcmFuZG9tR2VuZXJhdG9yX2ZlYXR1cmUiLCAiX1VJX1N0b2NoYXN0aWNEaXNlYXNlTW9kZWxfdHlwZSIpLCAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQgLy8kTk9OLU5MUy0zJAorCQkJCSBTdGFuZGFyZFBhY2thZ2UuTGl0ZXJhbHMuU1RPQ0hBU1RJQ19ESVNFQVNFX01PREVMX19SQU5ET01fR0VORVJBVE9SLAorCQkJCSBmYWxzZSwKKwkJCQkgZmFsc2UsCisJCQkJIGZhbHNlLAorCQkJCSBJdGVtUHJvcGVydHlEZXNjcmlwdG9yLkdFTkVSSUNfVkFMVUVfSU1BR0UsCisJCQkJIG51bGwsCisJCQkJIG51bGwpKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgdGhlIGxhYmVsIHRleHQgZm9yIHRoZSBhZGFwdGVkIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgU3RyaW5nIGdldFRleHQoT2JqZWN0IG9iamVjdCkgeworCQlyZXR1cm4gc3VwZXIuZ2V0VGV4dChvYmplY3QpOworCX0KKworCS8qKgorCSAqIFRoaXMgaGFuZGxlcyBtb2RlbCBub3RpZmljYXRpb25zIGJ5IGNhbGxpbmcge0BsaW5rICN1cGRhdGVDaGlsZHJlbn0gdG8gdXBkYXRlIGFueSBjYWNoZWQKKwkgKiBjaGlsZHJlbiBhbmQgYnkgY3JlYXRpbmcgYSB2aWV3ZXIgbm90aWZpY2F0aW9uLCB3aGljaCBpdCBwYXNzZXMgdG8ge0BsaW5rICNmaXJlTm90aWZ5Q2hhbmdlZH0uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgbm90aWZ5Q2hhbmdlZChOb3RpZmljYXRpb24gbm90aWZpY2F0aW9uKSB7CisJCXVwZGF0ZUNoaWxkcmVuKG5vdGlmaWNhdGlvbik7CisKKwkJc3dpdGNoIChub3RpZmljYXRpb24uZ2V0RmVhdHVyZUlEKFN0b2NoYXN0aWNEaXNlYXNlTW9kZWwuY2xhc3MpKSB7CisJCQljYXNlIFN0YW5kYXJkUGFja2FnZS5TVE9DSEFTVElDX0RJU0VBU0VfTU9ERUxfX1NFRUQ6CisJCQljYXNlIFN0YW5kYXJkUGFja2FnZS5TVE9DSEFTVElDX0RJU0VBU0VfTU9ERUxfX1JBTkRPTV9HRU5FUkFUT1I6CisJCQkJZmlyZU5vdGlmeUNoYW5nZWQobmV3IFZpZXdlck5vdGlmaWNhdGlvbihub3RpZmljYXRpb24sIG5vdGlmaWNhdGlvbi5nZXROb3RpZmllcigpLCBmYWxzZSwgdHJ1ZSkpOworCQkJCXJldHVybjsKKwkJfQorCQlzdXBlci5ub3RpZnlDaGFuZ2VkKG5vdGlmaWNhdGlvbik7CisJfQorCisJLyoqCisJICogVGhpcyBhZGRzIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuZWRpdC5jb21tYW5kLkNvbW1hbmRQYXJhbWV0ZXJ9cyBkZXNjcmliaW5nIHRoZSBjaGlsZHJlbgorCSAqIHRoYXQgY2FuIGJlIGNyZWF0ZWQgdW5kZXIgdGhpcyBvYmplY3QuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgY29sbGVjdE5ld0NoaWxkRGVzY3JpcHRvcnMoQ29sbGVjdGlvbjxPYmplY3Q+IG5ld0NoaWxkRGVzY3JpcHRvcnMsIE9iamVjdCBvYmplY3QpIHsKKwkJc3VwZXIuY29sbGVjdE5ld0NoaWxkRGVzY3JpcHRvcnMobmV3Q2hpbGREZXNjcmlwdG9ycywgb2JqZWN0KTsKKwl9CisKK30KZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvc3RhbmRhcmQvcHJvdmlkZXIvU3RvY2hhc3RpY1BvaXNzb25TRUlSRGlzZWFzZU1vZGVsSXRlbVByb3ZpZGVyLmphdmEgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3N0YW5kYXJkL3Byb3ZpZGVyL1N0b2NoYXN0aWNQb2lzc29uU0VJUkRpc2Vhc2VNb2RlbEl0ZW1Qcm92aWRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU3ZGYwZjcKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3N0YW5kYXJkL3Byb3ZpZGVyL1N0b2NoYXN0aWNQb2lzc29uU0VJUkRpc2Vhc2VNb2RlbEl0ZW1Qcm92aWRlci5qYXZhCkBAIC0wLDAgKzEsMTI4IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDEwIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLnByb3ZpZGVyOworCisKK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LkFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JRWRpdGluZ0RvbWFpbkl0ZW1Qcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbUxhYmVsUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1Qcm9wZXJ0eVNvdXJjZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JU3RydWN0dXJlZEl0ZW1Db250ZW50UHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVRyZWVJdGVtQ29udGVudFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdG9jaGFzdGljUG9pc3NvblNFSVJEaXNlYXNlTW9kZWw7CisKKy8qKgorICogVGhpcyBpcyB0aGUgaXRlbSBwcm92aWRlciBhZGFwdGVyIGZvciBhIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RvY2hhc3RpY1BvaXNzb25TRUlSRGlzZWFzZU1vZGVsfSBvYmplY3QuCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBTdG9jaGFzdGljUG9pc3NvblNFSVJEaXNlYXNlTW9kZWxJdGVtUHJvdmlkZXIKKwlleHRlbmRzIFNFSVJJdGVtUHJvdmlkZXIKKwlpbXBsZW1lbnRzCisJCUlFZGl0aW5nRG9tYWluSXRlbVByb3ZpZGVyLAorCQlJU3RydWN0dXJlZEl0ZW1Db250ZW50UHJvdmlkZXIsCisJCUlUcmVlSXRlbUNvbnRlbnRQcm92aWRlciwKKwkJSUl0ZW1MYWJlbFByb3ZpZGVyLAorCQlJSXRlbVByb3BlcnR5U291cmNlIHsKKwkvKioKKwkgKiBUaGlzIGNvbnN0cnVjdHMgYW4gaW5zdGFuY2UgZnJvbSBhIGZhY3RvcnkgYW5kIGEgbm90aWZpZXIuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFN0b2NoYXN0aWNQb2lzc29uU0VJUkRpc2Vhc2VNb2RlbEl0ZW1Qcm92aWRlcihBZGFwdGVyRmFjdG9yeSBhZGFwdGVyRmFjdG9yeSkgeworCQlzdXBlcihhZGFwdGVyRmFjdG9yeSk7CisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIHRoZSBwcm9wZXJ0eSBkZXNjcmlwdG9ycyBmb3IgdGhlIGFkYXB0ZWQgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIExpc3Q8SUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I+IGdldFByb3BlcnR5RGVzY3JpcHRvcnMoT2JqZWN0IG9iamVjdCkgeworCQlpZiAoaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMgPT0gbnVsbCkgeworCQkJc3VwZXIuZ2V0UHJvcGVydHlEZXNjcmlwdG9ycyhvYmplY3QpOworCisJCX0KKwkJcmV0dXJuIGl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzOworCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyBUaGlzIHJldHVybnMgZGlzZWFzZS5naWYuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBPYmplY3QgZ2V0SW1hZ2UoT2JqZWN0IG9iamVjdCkgeworCQlyZXR1cm4gb3ZlcmxheUltYWdlKG9iamVjdCwgZ2V0UmVzb3VyY2VMb2NhdG9yKCkuZ2V0SW1hZ2UoImZ1bGwvY3VzdG9tMTYvZGlzZWFzZSIpKTsgLy8kTk9OLU5MUy0xJAorCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyB0aGUgbGFiZWwgdGV4dCBmb3IgdGhlIGFkYXB0ZWQgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBTdHJpbmcgZ2V0VGV4dChPYmplY3Qgb2JqZWN0KSB7CisJCXJldHVybiBzdXBlci5nZXRUZXh0KG9iamVjdCk7CisJfQorCisJCisJLyoqCisJICogVGhpcyByZXR1cm5zIHRoZSBsYWJlbCB0ZXh0IGZvciB0aGUgYWRhcHRlZCBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgU3RyaW5nIGdldFRleHRHZW4oT2JqZWN0IG9iamVjdCkgeworCQlTdHJpbmcgbGFiZWwgPSAoKFN0b2NoYXN0aWNQb2lzc29uU0VJUkRpc2Vhc2VNb2RlbClvYmplY3QpLmdldERpc2Vhc2VOYW1lKCk7CisJCXJldHVybiBsYWJlbCA9PSBudWxsIHx8IGxhYmVsLmxlbmd0aCgpID09IDAgPworCQkJZ2V0U3RyaW5nKCJfVUlfU3RvY2hhc3RpY1BvaXNzb25TRUlSRGlzZWFzZU1vZGVsX3R5cGUiKSA6IC8vJE5PTi1OTFMtMSQKKwkJCWdldFN0cmluZygiX1VJX1N0b2NoYXN0aWNQb2lzc29uU0VJUkRpc2Vhc2VNb2RlbF90eXBlIikgKyAiICIgKyBsYWJlbDsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCisJfQorCQorCS8qKgorCSAqIFRoaXMgaGFuZGxlcyBtb2RlbCBub3RpZmljYXRpb25zIGJ5IGNhbGxpbmcge0BsaW5rICN1cGRhdGVDaGlsZHJlbn0gdG8gdXBkYXRlIGFueSBjYWNoZWQKKwkgKiBjaGlsZHJlbiBhbmQgYnkgY3JlYXRpbmcgYSB2aWV3ZXIgbm90aWZpY2F0aW9uLCB3aGljaCBpdCBwYXNzZXMgdG8ge0BsaW5rICNmaXJlTm90aWZ5Q2hhbmdlZH0uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgbm90aWZ5Q2hhbmdlZChOb3RpZmljYXRpb24gbm90aWZpY2F0aW9uKSB7CisJCXVwZGF0ZUNoaWxkcmVuKG5vdGlmaWNhdGlvbik7CisJCXN1cGVyLm5vdGlmeUNoYW5nZWQobm90aWZpY2F0aW9uKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFkZHMge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lZGl0LmNvbW1hbmQuQ29tbWFuZFBhcmFtZXRlcn1zIGRlc2NyaWJpbmcgdGhlIGNoaWxkcmVuCisJICogdGhhdCBjYW4gYmUgY3JlYXRlZCB1bmRlciB0aGlzIG9iamVjdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgdm9pZCBjb2xsZWN0TmV3Q2hpbGREZXNjcmlwdG9ycyhDb2xsZWN0aW9uPE9iamVjdD4gbmV3Q2hpbGREZXNjcmlwdG9ycywgT2JqZWN0IG9iamVjdCkgeworCQlzdXBlci5jb2xsZWN0TmV3Q2hpbGREZXNjcmlwdG9ycyhuZXdDaGlsZERlc2NyaXB0b3JzLCBvYmplY3QpOworCX0KKworfQpkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9zdGFuZGFyZC9wcm92aWRlci9TdG9jaGFzdGljUG9pc3NvblNJRGlzZWFzZU1vZGVsSXRlbVByb3ZpZGVyLmphdmEgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3N0YW5kYXJkL3Byb3ZpZGVyL1N0b2NoYXN0aWNQb2lzc29uU0lEaXNlYXNlTW9kZWxJdGVtUHJvdmlkZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMjIzM2UzCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9zdGFuZGFyZC9wcm92aWRlci9TdG9jaGFzdGljUG9pc3NvblNJRGlzZWFzZU1vZGVsSXRlbVByb3ZpZGVyLmphdmEKQEAgLTAsMCArMSwxMjcgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTAgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQucHJvdmlkZXI7CisKKworaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOworaW1wb3J0IGphdmEudXRpbC5MaXN0OworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklFZGl0aW5nRG9tYWluSXRlbVByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtTGFiZWxQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbVByb3BlcnR5RGVzY3JpcHRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbVByb3BlcnR5U291cmNlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklTdHJ1Y3R1cmVkSXRlbUNvbnRlbnRQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JVHJlZUl0ZW1Db250ZW50UHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlN0b2NoYXN0aWNQb2lzc29uU0lEaXNlYXNlTW9kZWw7CisKKy8qKgorICogVGhpcyBpcyB0aGUgaXRlbSBwcm92aWRlciBhZGFwdGVyIGZvciBhIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RvY2hhc3RpY1BvaXNzb25TSURpc2Vhc2VNb2RlbH0gb2JqZWN0LgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgU3RvY2hhc3RpY1BvaXNzb25TSURpc2Vhc2VNb2RlbEl0ZW1Qcm92aWRlcgorCWV4dGVuZHMgU0lJdGVtUHJvdmlkZXIKKwlpbXBsZW1lbnRzCisJCUlFZGl0aW5nRG9tYWluSXRlbVByb3ZpZGVyLAorCQlJU3RydWN0dXJlZEl0ZW1Db250ZW50UHJvdmlkZXIsCisJCUlUcmVlSXRlbUNvbnRlbnRQcm92aWRlciwKKwkJSUl0ZW1MYWJlbFByb3ZpZGVyLAorCQlJSXRlbVByb3BlcnR5U291cmNlIHsKKwkvKioKKwkgKiBUaGlzIGNvbnN0cnVjdHMgYW4gaW5zdGFuY2UgZnJvbSBhIGZhY3RvcnkgYW5kIGEgbm90aWZpZXIuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFN0b2NoYXN0aWNQb2lzc29uU0lEaXNlYXNlTW9kZWxJdGVtUHJvdmlkZXIoQWRhcHRlckZhY3RvcnkgYWRhcHRlckZhY3RvcnkpIHsKKwkJc3VwZXIoYWRhcHRlckZhY3RvcnkpOworCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyB0aGUgcHJvcGVydHkgZGVzY3JpcHRvcnMgZm9yIHRoZSBhZGFwdGVkIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgTGlzdDxJSXRlbVByb3BlcnR5RGVzY3JpcHRvcj4gZ2V0UHJvcGVydHlEZXNjcmlwdG9ycyhPYmplY3Qgb2JqZWN0KSB7CisJCWlmIChpdGVtUHJvcGVydHlEZXNjcmlwdG9ycyA9PSBudWxsKSB7CisJCQlzdXBlci5nZXRQcm9wZXJ0eURlc2NyaXB0b3JzKG9iamVjdCk7CisKKwkJfQorCQlyZXR1cm4gaXRlbVByb3BlcnR5RGVzY3JpcHRvcnM7CisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIFRoaXMgcmV0dXJucyBkaXNlYXNlLmdpZi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIE9iamVjdCBnZXRJbWFnZShPYmplY3Qgb2JqZWN0KSB7CisJCXJldHVybiBvdmVybGF5SW1hZ2Uob2JqZWN0LCBnZXRSZXNvdXJjZUxvY2F0b3IoKS5nZXRJbWFnZSgiZnVsbC9jdXN0b20xNi9kaXNlYXNlIikpOyAvLyROT04tTkxTLTEkCisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIHRoZSBsYWJlbCB0ZXh0IGZvciB0aGUgYWRhcHRlZCBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIFN0cmluZyBnZXRUZXh0KE9iamVjdCBvYmplY3QpIHsKKwkJcmV0dXJuIHN1cGVyLmdldFRleHQob2JqZWN0KTsKKwl9CisJCisJLyoqCisJICogVGhpcyByZXR1cm5zIHRoZSBsYWJlbCB0ZXh0IGZvciB0aGUgYWRhcHRlZCBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgU3RyaW5nIGdldFRleHRHZW4oT2JqZWN0IG9iamVjdCkgeworCQlTdHJpbmcgbGFiZWwgPSAoKFN0b2NoYXN0aWNQb2lzc29uU0lEaXNlYXNlTW9kZWwpb2JqZWN0KS5nZXREaXNlYXNlTmFtZSgpOworCQlyZXR1cm4gbGFiZWwgPT0gbnVsbCB8fCBsYWJlbC5sZW5ndGgoKSA9PSAwID8KKwkJCWdldFN0cmluZygiX1VJX1N0b2NoYXN0aWNQb2lzc29uU0lEaXNlYXNlTW9kZWxfdHlwZSIpIDogLy8kTk9OLU5MUy0xJAorCQkJZ2V0U3RyaW5nKCJfVUlfU3RvY2hhc3RpY1BvaXNzb25TSURpc2Vhc2VNb2RlbF90eXBlIikgKyAiICIgKyBsYWJlbDsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCisJfQorCisJLyoqCisJICogVGhpcyBoYW5kbGVzIG1vZGVsIG5vdGlmaWNhdGlvbnMgYnkgY2FsbGluZyB7QGxpbmsgI3VwZGF0ZUNoaWxkcmVufSB0byB1cGRhdGUgYW55IGNhY2hlZAorCSAqIGNoaWxkcmVuIGFuZCBieSBjcmVhdGluZyBhIHZpZXdlciBub3RpZmljYXRpb24sIHdoaWNoIGl0IHBhc3NlcyB0byB7QGxpbmsgI2ZpcmVOb3RpZnlDaGFuZ2VkfS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBub3RpZnlDaGFuZ2VkKE5vdGlmaWNhdGlvbiBub3RpZmljYXRpb24pIHsKKwkJdXBkYXRlQ2hpbGRyZW4obm90aWZpY2F0aW9uKTsKKwkJc3VwZXIubm90aWZ5Q2hhbmdlZChub3RpZmljYXRpb24pOworCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmVkaXQuY29tbWFuZC5Db21tYW5kUGFyYW1ldGVyfXMgZGVzY3JpYmluZyB0aGUgY2hpbGRyZW4KKwkgKiB0aGF0IGNhbiBiZSBjcmVhdGVkIHVuZGVyIHRoaXMgb2JqZWN0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIGNvbGxlY3ROZXdDaGlsZERlc2NyaXB0b3JzKENvbGxlY3Rpb248T2JqZWN0PiBuZXdDaGlsZERlc2NyaXB0b3JzLCBPYmplY3Qgb2JqZWN0KSB7CisJCXN1cGVyLmNvbGxlY3ROZXdDaGlsZERlc2NyaXB0b3JzKG5ld0NoaWxkRGVzY3JpcHRvcnMsIG9iamVjdCk7CisJfQorCit9CmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3N0YW5kYXJkL3Byb3ZpZGVyL1N0b2NoYXN0aWNQb2lzc29uU0lSRGlzZWFzZU1vZGVsSXRlbVByb3ZpZGVyLmphdmEgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3N0YW5kYXJkL3Byb3ZpZGVyL1N0b2NoYXN0aWNQb2lzc29uU0lSRGlzZWFzZU1vZGVsSXRlbVByb3ZpZGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjJiZWE2NgotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvc3RhbmRhcmQvcHJvdmlkZXIvU3RvY2hhc3RpY1BvaXNzb25TSVJEaXNlYXNlTW9kZWxJdGVtUHJvdmlkZXIuamF2YQpAQCAtMCwwICsxLDEyNyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAxMCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5wcm92aWRlcjsKKworCitpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5BZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUVkaXRpbmdEb21haW5JdGVtUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1MYWJlbFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtUHJvcGVydHlEZXNjcmlwdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtUHJvcGVydHlTb3VyY2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVN0cnVjdHVyZWRJdGVtQ29udGVudFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklUcmVlSXRlbUNvbnRlbnRQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RvY2hhc3RpY1BvaXNzb25TSVJEaXNlYXNlTW9kZWw7CisKKy8qKgorICogVGhpcyBpcyB0aGUgaXRlbSBwcm92aWRlciBhZGFwdGVyIGZvciBhIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RvY2hhc3RpY1BvaXNzb25TSVJEaXNlYXNlTW9kZWx9IG9iamVjdC4KKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIFN0b2NoYXN0aWNQb2lzc29uU0lSRGlzZWFzZU1vZGVsSXRlbVByb3ZpZGVyCisJZXh0ZW5kcyBTSVJJdGVtUHJvdmlkZXIKKwlpbXBsZW1lbnRzCisJCUlFZGl0aW5nRG9tYWluSXRlbVByb3ZpZGVyLAorCQlJU3RydWN0dXJlZEl0ZW1Db250ZW50UHJvdmlkZXIsCisJCUlUcmVlSXRlbUNvbnRlbnRQcm92aWRlciwKKwkJSUl0ZW1MYWJlbFByb3ZpZGVyLAorCQlJSXRlbVByb3BlcnR5U291cmNlIHsKKwkvKioKKwkgKiBUaGlzIGNvbnN0cnVjdHMgYW4gaW5zdGFuY2UgZnJvbSBhIGZhY3RvcnkgYW5kIGEgbm90aWZpZXIuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFN0b2NoYXN0aWNQb2lzc29uU0lSRGlzZWFzZU1vZGVsSXRlbVByb3ZpZGVyKEFkYXB0ZXJGYWN0b3J5IGFkYXB0ZXJGYWN0b3J5KSB7CisJCXN1cGVyKGFkYXB0ZXJGYWN0b3J5KTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgdGhlIHByb3BlcnR5IGRlc2NyaXB0b3JzIGZvciB0aGUgYWRhcHRlZCBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgTGlzdDxJSXRlbVByb3BlcnR5RGVzY3JpcHRvcj4gZ2V0UHJvcGVydHlEZXNjcmlwdG9ycyhPYmplY3Qgb2JqZWN0KSB7CisJCWlmIChpdGVtUHJvcGVydHlEZXNjcmlwdG9ycyA9PSBudWxsKSB7CisJCQlzdXBlci5nZXRQcm9wZXJ0eURlc2NyaXB0b3JzKG9iamVjdCk7CisKKwkJfQorCQlyZXR1cm4gaXRlbVByb3BlcnR5RGVzY3JpcHRvcnM7CisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIFRoaXMgcmV0dXJucyBkaXNlYXNlLmdpZi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIE9iamVjdCBnZXRJbWFnZShPYmplY3Qgb2JqZWN0KSB7CisJCXJldHVybiBvdmVybGF5SW1hZ2Uob2JqZWN0LCBnZXRSZXNvdXJjZUxvY2F0b3IoKS5nZXRJbWFnZSgiZnVsbC9jdXN0b20xNi9kaXNlYXNlIikpOyAvLyROT04tTkxTLTEkCisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIHRoZSBsYWJlbCB0ZXh0IGZvciB0aGUgYWRhcHRlZCBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIFN0cmluZyBnZXRUZXh0KE9iamVjdCBvYmplY3QpIHsKKwkJcmV0dXJuIHN1cGVyLmdldFRleHQob2JqZWN0KTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgdGhlIGxhYmVsIHRleHQgZm9yIHRoZSBhZGFwdGVkIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgU3RyaW5nIGdldFRleHRHZW4oT2JqZWN0IG9iamVjdCkgeworCQlTdHJpbmcgbGFiZWwgPSAoKFN0b2NoYXN0aWNQb2lzc29uU0lSRGlzZWFzZU1vZGVsKW9iamVjdCkuZ2V0RGlzZWFzZU5hbWUoKTsKKwkJcmV0dXJuIGxhYmVsID09IG51bGwgfHwgbGFiZWwubGVuZ3RoKCkgPT0gMCA/CisJCQlnZXRTdHJpbmcoIl9VSV9TdG9jaGFzdGljUG9pc3NvblNJUkRpc2Vhc2VNb2RlbF90eXBlIikgOiAvLyROT04tTkxTLTEkCisJCQlnZXRTdHJpbmcoIl9VSV9TdG9jaGFzdGljUG9pc3NvblNJUkRpc2Vhc2VNb2RlbF90eXBlIikgKyAiICIgKyBsYWJlbDsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCisJfQorCQorCS8qKgorCSAqIFRoaXMgaGFuZGxlcyBtb2RlbCBub3RpZmljYXRpb25zIGJ5IGNhbGxpbmcge0BsaW5rICN1cGRhdGVDaGlsZHJlbn0gdG8gdXBkYXRlIGFueSBjYWNoZWQKKwkgKiBjaGlsZHJlbiBhbmQgYnkgY3JlYXRpbmcgYSB2aWV3ZXIgbm90aWZpY2F0aW9uLCB3aGljaCBpdCBwYXNzZXMgdG8ge0BsaW5rICNmaXJlTm90aWZ5Q2hhbmdlZH0uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgbm90aWZ5Q2hhbmdlZChOb3RpZmljYXRpb24gbm90aWZpY2F0aW9uKSB7CisJCXVwZGF0ZUNoaWxkcmVuKG5vdGlmaWNhdGlvbik7CisJCXN1cGVyLm5vdGlmeUNoYW5nZWQobm90aWZpY2F0aW9uKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFkZHMge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lZGl0LmNvbW1hbmQuQ29tbWFuZFBhcmFtZXRlcn1zIGRlc2NyaWJpbmcgdGhlIGNoaWxkcmVuCisJICogdGhhdCBjYW4gYmUgY3JlYXRlZCB1bmRlciB0aGlzIG9iamVjdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgdm9pZCBjb2xsZWN0TmV3Q2hpbGREZXNjcmlwdG9ycyhDb2xsZWN0aW9uPE9iamVjdD4gbmV3Q2hpbGREZXNjcmlwdG9ycywgT2JqZWN0IG9iamVjdCkgeworCQlzdXBlci5jb2xsZWN0TmV3Q2hpbGREZXNjcmlwdG9ycyhuZXdDaGlsZERlc2NyaXB0b3JzLCBvYmplY3QpOworCX0KKworfQpkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9zdGFuZGFyZC9wcm92aWRlci9TdG9jaGFzdGljU0VJUkRpc2Vhc2VNb2RlbEl0ZW1Qcm92aWRlci5qYXZhIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9zdGFuZGFyZC9wcm92aWRlci9TdG9jaGFzdGljU0VJUkRpc2Vhc2VNb2RlbEl0ZW1Qcm92aWRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM5NWYwZTIKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3N0YW5kYXJkL3Byb3ZpZGVyL1N0b2NoYXN0aWNTRUlSRGlzZWFzZU1vZGVsSXRlbVByb3ZpZGVyLmphdmEKQEAgLTAsMCArMSwyMTMgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLnByb3ZpZGVyOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA2LCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOworaW1wb3J0IGphdmEudXRpbC5MaXN0OworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkNvbXBvc2VhYmxlQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUVkaXRpbmdEb21haW5JdGVtUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1MYWJlbFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtUHJvcGVydHlEZXNjcmlwdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtUHJvcGVydHlTb3VyY2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVN0cnVjdHVyZWRJdGVtQ29udGVudFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklUcmVlSXRlbUNvbnRlbnRQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JdGVtUHJvcGVydHlEZXNjcmlwdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLlZpZXdlck5vdGlmaWNhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmRQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdG9jaGFzdGljU0VJUkRpc2Vhc2VNb2RlbDsKKworLyoqCisgKiBUaGlzIGlzIHRoZSBpdGVtIHByb3ZpZGVyIGFkYXB0ZXIgZm9yIGEge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdG9jaGFzdGljU0VJUkRpc2Vhc2VNb2RlbH0gb2JqZWN0LgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBTdG9jaGFzdGljU0VJUkRpc2Vhc2VNb2RlbEl0ZW1Qcm92aWRlciBleHRlbmRzIFNFSVJJdGVtUHJvdmlkZXIKKwkJaW1wbGVtZW50cyBJRWRpdGluZ0RvbWFpbkl0ZW1Qcm92aWRlciwgSVN0cnVjdHVyZWRJdGVtQ29udGVudFByb3ZpZGVyLAorCQlJVHJlZUl0ZW1Db250ZW50UHJvdmlkZXIsIElJdGVtTGFiZWxQcm92aWRlciwgSUl0ZW1Qcm9wZXJ0eVNvdXJjZSB7CisJLyoqCisJICogVGhpcyBjb25zdHJ1Y3RzIGFuIGluc3RhbmNlIGZyb20gYSBmYWN0b3J5IGFuZCBhIG5vdGlmaWVyLiA8IS0tCisJICogYmVnaW4tdXNlci1kb2MgLS0+CisJICogCisJICogQHBhcmFtIGFkYXB0ZXJGYWN0b3J5CisJICogCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBTdG9jaGFzdGljU0VJUkRpc2Vhc2VNb2RlbEl0ZW1Qcm92aWRlcihBZGFwdGVyRmFjdG9yeSBhZGFwdGVyRmFjdG9yeSkgeworCQlzdXBlcihhZGFwdGVyRmFjdG9yeSk7CisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIHRoZSBwcm9wZXJ0eSBkZXNjcmlwdG9ycyBmb3IgdGhlIGFkYXB0ZWQgY2xhc3MuIDwhLS0KKwkgKiBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAcGFyYW0gb2JqZWN0CisJICogQHJldHVybgorCSAqIAorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIExpc3Q8SUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I+IGdldFByb3BlcnR5RGVzY3JpcHRvcnMoT2JqZWN0IG9iamVjdCkgeworCQlpZiAoaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMgPT0gbnVsbCkgeworCQkJc3VwZXIuZ2V0UHJvcGVydHlEZXNjcmlwdG9ycyhvYmplY3QpOworCisJCQlhZGRTZWVkUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCk7CisJCQkvL2FkZFJhbmRvbUdlbmVyYXRvclByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QpOworCQkJYWRkR2FpblByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QpOworCQl9CisJCXJldHVybiBpdGVtUHJvcGVydHlEZXNjcmlwdG9yczsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgdGhlIHByb3BlcnR5IGRlc2NyaXB0b3JzIGZvciB0aGUgYWRhcHRlZCBjbGFzcy4gPCEtLQorCSAqIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBwYXJhbSBvYmplY3QKKwkgKiBAcmV0dXJuCisJICogCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBMaXN0PElJdGVtUHJvcGVydHlEZXNjcmlwdG9yPiBnZXRQcm9wZXJ0eURlc2NyaXB0b3JzR2VuKE9iamVjdCBvYmplY3QpIHsKKwkJaWYgKGl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzID09IG51bGwpIHsKKwkJCXN1cGVyLmdldFByb3BlcnR5RGVzY3JpcHRvcnMob2JqZWN0KTsKKworCQkJYWRkU2VlZFByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QpOworCQkJYWRkUmFuZG9tR2VuZXJhdG9yUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCk7CisJCQlhZGRHYWluUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCk7CisJCX0KKwkJcmV0dXJuIGl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzOworCX0KKwkKKwkvKioKKwkgKiBUaGlzIGFkZHMgYSBwcm9wZXJ0eSBkZXNjcmlwdG9yIGZvciB0aGUgU2VlZCBmZWF0dXJlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIGFkZFNlZWRQcm9wZXJ0eURlc2NyaXB0b3IoT2JqZWN0IG9iamVjdCkgeworCQlpdGVtUHJvcGVydHlEZXNjcmlwdG9ycy5hZGQKKwkJCShjcmVhdGVJdGVtUHJvcGVydHlEZXNjcmlwdG9yCisJCQkJKCgoQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSlhZGFwdGVyRmFjdG9yeSkuZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCksCisJCQkJIGdldFJlc291cmNlTG9jYXRvcigpLAorCQkJCSBnZXRTdHJpbmcoIl9VSV9TdG9jaGFzdGljRGlzZWFzZU1vZGVsX3NlZWRfZmVhdHVyZSIpLCAvLyROT04tTkxTLTEkCisJCQkJIGdldFN0cmluZygiX1VJX1Byb3BlcnR5RGVzY3JpcHRvcl9kZXNjcmlwdGlvbiIsICJfVUlfU3RvY2hhc3RpY0Rpc2Vhc2VNb2RlbF9zZWVkX2ZlYXR1cmUiLCAiX1VJX1N0b2NoYXN0aWNEaXNlYXNlTW9kZWxfdHlwZSIpLCAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQgLy8kTk9OLU5MUy0zJAorCQkJCSBTdGFuZGFyZFBhY2thZ2UuTGl0ZXJhbHMuU1RPQ0hBU1RJQ19ESVNFQVNFX01PREVMX19TRUVELAorCQkJCSB0cnVlLAorCQkJCSBmYWxzZSwKKwkJCQkgZmFsc2UsCisJCQkJIEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IuSU5URUdSQUxfVkFMVUVfSU1BR0UsCisJCQkJIG51bGwsCisJCQkJIG51bGwpKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFkZHMgYSBwcm9wZXJ0eSBkZXNjcmlwdG9yIGZvciB0aGUgUmFuZG9tIEdlbmVyYXRvciBmZWF0dXJlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIGFkZFJhbmRvbUdlbmVyYXRvclByb3BlcnR5RGVzY3JpcHRvcihPYmplY3Qgb2JqZWN0KSB7CisJCWl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzLmFkZAorCQkJKGNyZWF0ZUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IKKwkJCQkoKChDb21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5KWFkYXB0ZXJGYWN0b3J5KS5nZXRSb290QWRhcHRlckZhY3RvcnkoKSwKKwkJCQkgZ2V0UmVzb3VyY2VMb2NhdG9yKCksCisJCQkJIGdldFN0cmluZygiX1VJX1N0b2NoYXN0aWNEaXNlYXNlTW9kZWxfcmFuZG9tR2VuZXJhdG9yX2ZlYXR1cmUiKSwgLy8kTk9OLU5MUy0xJAorCQkJCSBnZXRTdHJpbmcoIl9VSV9Qcm9wZXJ0eURlc2NyaXB0b3JfZGVzY3JpcHRpb24iLCAiX1VJX1N0b2NoYXN0aWNEaXNlYXNlTW9kZWxfcmFuZG9tR2VuZXJhdG9yX2ZlYXR1cmUiLCAiX1VJX1N0b2NoYXN0aWNEaXNlYXNlTW9kZWxfdHlwZSIpLCAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQgLy8kTk9OLU5MUy0zJAorCQkJCSBTdGFuZGFyZFBhY2thZ2UuTGl0ZXJhbHMuU1RPQ0hBU1RJQ19ESVNFQVNFX01PREVMX19SQU5ET01fR0VORVJBVE9SLAorCQkJCSBmYWxzZSwKKwkJCQkgZmFsc2UsCisJCQkJIGZhbHNlLAorCQkJCSBJdGVtUHJvcGVydHlEZXNjcmlwdG9yLkdFTkVSSUNfVkFMVUVfSU1BR0UsCisJCQkJIG51bGwsCisJCQkJIG51bGwpKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFkZHMgYSBwcm9wZXJ0eSBkZXNjcmlwdG9yIGZvciB0aGUgR2FpbiBmZWF0dXJlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIGFkZEdhaW5Qcm9wZXJ0eURlc2NyaXB0b3IoT2JqZWN0IG9iamVjdCkgeworCQlpdGVtUHJvcGVydHlEZXNjcmlwdG9ycy5hZGQKKwkJCShjcmVhdGVJdGVtUHJvcGVydHlEZXNjcmlwdG9yCisJCQkJKCgoQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSlhZGFwdGVyRmFjdG9yeSkuZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCksCisJCQkJIGdldFJlc291cmNlTG9jYXRvcigpLAorCQkJCSBnZXRTdHJpbmcoIl9VSV9TdGFuZGFyZFN0b2NoYXN0aWNEaXNlYXNlTW9kZWxfZ2Fpbl9mZWF0dXJlIiksIC8vJE5PTi1OTFMtMSQKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfUHJvcGVydHlEZXNjcmlwdG9yX2Rlc2NyaXB0aW9uIiwgIl9VSV9TdGFuZGFyZFN0b2NoYXN0aWNEaXNlYXNlTW9kZWxfZ2Fpbl9mZWF0dXJlIiwgIl9VSV9TdGFuZGFyZFN0b2NoYXN0aWNEaXNlYXNlTW9kZWxfdHlwZSIpLCAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQgLy8kTk9OLU5MUy0zJAorCQkJCSBTdGFuZGFyZFBhY2thZ2UuTGl0ZXJhbHMuU1RBTkRBUkRfU1RPQ0hBU1RJQ19ESVNFQVNFX01PREVMX19HQUlOLAorCQkJCSB0cnVlLAorCQkJCSBmYWxzZSwKKwkJCQkgZmFsc2UsCisJCQkJIEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IuUkVBTF9WQUxVRV9JTUFHRSwKKwkJCQkgbnVsbCwKKwkJCQkgbnVsbCkpOworCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyB0aGUgbGFiZWwgdGV4dCBmb3IgdGhlIGFkYXB0ZWQgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYworCSAqIC0tPgorCSAqIAorCSAqIEBwYXJhbSBvYmplY3QKKwkgKiBAcmV0dXJuCisJICogCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgU3RyaW5nIGdldFRleHQoT2JqZWN0IG9iamVjdCkgeworCQlyZXR1cm4gc3VwZXIuZ2V0VGV4dChvYmplY3QpOworCX0KKworCS8qKgorCSAqIFRoaXMgaGFuZGxlcyBtb2RlbCBub3RpZmljYXRpb25zIGJ5IGNhbGxpbmcge0BsaW5rICN1cGRhdGVDaGlsZHJlbn0gdG8gdXBkYXRlIGFueSBjYWNoZWQKKwkgKiBjaGlsZHJlbiBhbmQgYnkgY3JlYXRpbmcgYSB2aWV3ZXIgbm90aWZpY2F0aW9uLCB3aGljaCBpdCBwYXNzZXMgdG8ge0BsaW5rICNmaXJlTm90aWZ5Q2hhbmdlZH0uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAcGFyYW0gbm90aWZpY2F0aW9uCisJICogCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIG5vdGlmeUNoYW5nZWQoTm90aWZpY2F0aW9uIG5vdGlmaWNhdGlvbikgeworCQl1cGRhdGVDaGlsZHJlbihub3RpZmljYXRpb24pOworCisJCXN3aXRjaCAobm90aWZpY2F0aW9uLmdldEZlYXR1cmVJRChTdG9jaGFzdGljU0VJUkRpc2Vhc2VNb2RlbC5jbGFzcykpIHsKKwkJCWNhc2UgU3RhbmRhcmRQYWNrYWdlLlNUT0NIQVNUSUNfU0VJUl9ESVNFQVNFX01PREVMX19TRUVEOgorCQkJY2FzZSBTdGFuZGFyZFBhY2thZ2UuU1RPQ0hBU1RJQ19TRUlSX0RJU0VBU0VfTU9ERUxfX1JBTkRPTV9HRU5FUkFUT1I6CisJCQljYXNlIFN0YW5kYXJkUGFja2FnZS5TVE9DSEFTVElDX1NFSVJfRElTRUFTRV9NT0RFTF9fR0FJTjoKKwkJCQlmaXJlTm90aWZ5Q2hhbmdlZChuZXcgVmlld2VyTm90aWZpY2F0aW9uKG5vdGlmaWNhdGlvbiwgbm90aWZpY2F0aW9uLmdldE5vdGlmaWVyKCksIGZhbHNlLCB0cnVlKSk7CisJCQkJcmV0dXJuOworCQl9CisJCXN1cGVyLm5vdGlmeUNoYW5nZWQobm90aWZpY2F0aW9uKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFkZHMge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lZGl0LmNvbW1hbmQuQ29tbWFuZFBhcmFtZXRlcn1zIGRlc2NyaWJpbmcgdGhlIGNoaWxkcmVuCisJICogdGhhdCBjYW4gYmUgY3JlYXRlZCB1bmRlciB0aGlzIG9iamVjdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jCisJICogLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgdm9pZCBjb2xsZWN0TmV3Q2hpbGREZXNjcmlwdG9ycyhDb2xsZWN0aW9uPE9iamVjdD4gbmV3Q2hpbGREZXNjcmlwdG9ycywgT2JqZWN0IG9iamVjdCkgeworCQlzdXBlci5jb2xsZWN0TmV3Q2hpbGREZXNjcmlwdG9ycyhuZXdDaGlsZERlc2NyaXB0b3JzLCBvYmplY3QpOworCX0KKworfQpkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9zdGFuZGFyZC9wcm92aWRlci9TdG9jaGFzdGljU0lEaXNlYXNlTW9kZWxJdGVtUHJvdmlkZXIuamF2YSBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvc3RhbmRhcmQvcHJvdmlkZXIvU3RvY2hhc3RpY1NJRGlzZWFzZU1vZGVsSXRlbVByb3ZpZGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmJkNmViYQotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvc3RhbmRhcmQvcHJvdmlkZXIvU3RvY2hhc3RpY1NJRGlzZWFzZU1vZGVsSXRlbVByb3ZpZGVyLmphdmEKQEAgLTAsMCArMSwyMzIgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLnByb3ZpZGVyOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA2LCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOworaW1wb3J0IGphdmEudXRpbC5MaXN0OworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkNvbXBvc2VhYmxlQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUVkaXRpbmdEb21haW5JdGVtUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1MYWJlbFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtUHJvcGVydHlEZXNjcmlwdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtUHJvcGVydHlTb3VyY2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVN0cnVjdHVyZWRJdGVtQ29udGVudFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklUcmVlSXRlbUNvbnRlbnRQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JdGVtUHJvcGVydHlEZXNjcmlwdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLlZpZXdlck5vdGlmaWNhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmRQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdG9jaGFzdGljU0lEaXNlYXNlTW9kZWw7CisKKy8qKgorICogVGhpcyBpcyB0aGUgaXRlbSBwcm92aWRlciBhZGFwdGVyIGZvciBhIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RvY2hhc3RpY1NJRGlzZWFzZU1vZGVsfSBvYmplY3QuCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIFN0b2NoYXN0aWNTSURpc2Vhc2VNb2RlbEl0ZW1Qcm92aWRlciBleHRlbmRzIFNJSXRlbVByb3ZpZGVyCisJCWltcGxlbWVudHMgSUVkaXRpbmdEb21haW5JdGVtUHJvdmlkZXIsIElTdHJ1Y3R1cmVkSXRlbUNvbnRlbnRQcm92aWRlciwKKwkJSVRyZWVJdGVtQ29udGVudFByb3ZpZGVyLCBJSXRlbUxhYmVsUHJvdmlkZXIsIElJdGVtUHJvcGVydHlTb3VyY2UgeworCS8qKgorCSAqIFRoaXMgY29uc3RydWN0cyBhbiBpbnN0YW5jZSBmcm9tIGEgZmFjdG9yeSBhbmQgYSBub3RpZmllci4gPCEtLQorCSAqIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBwYXJhbSBhZGFwdGVyRmFjdG9yeQorCSAqIAorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgU3RvY2hhc3RpY1NJRGlzZWFzZU1vZGVsSXRlbVByb3ZpZGVyKEFkYXB0ZXJGYWN0b3J5IGFkYXB0ZXJGYWN0b3J5KSB7CisJCXN1cGVyKGFkYXB0ZXJGYWN0b3J5KTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgdGhlIHByb3BlcnR5IGRlc2NyaXB0b3JzIGZvciB0aGUgYWRhcHRlZCBjbGFzcy4gPCEtLQorCSAqIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBwYXJhbSBvYmplY3QKKwkgKiBAcmV0dXJuCisJICogCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgTGlzdDxJSXRlbVByb3BlcnR5RGVzY3JpcHRvcj4gZ2V0UHJvcGVydHlEZXNjcmlwdG9ycyhPYmplY3Qgb2JqZWN0KSB7CisJCWlmIChpdGVtUHJvcGVydHlEZXNjcmlwdG9ycyA9PSBudWxsKSB7CisJCQlzdXBlci5nZXRQcm9wZXJ0eURlc2NyaXB0b3JzKG9iamVjdCk7CisKKwkJCWFkZFNlZWRQcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0KTsKKwkJCS8vYWRkUmFuZG9tR2VuZXJhdG9yUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCk7CisJCQlhZGRHYWluUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCk7CisJCX0KKwkJcmV0dXJuIGl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzOworCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyB0aGUgcHJvcGVydHkgZGVzY3JpcHRvcnMgZm9yIHRoZSBhZGFwdGVkIGNsYXNzLiA8IS0tCisJICogYmVnaW4tdXNlci1kb2MgLS0+CisJICogCisJICogQHBhcmFtIG9iamVjdAorCSAqIEByZXR1cm4KKwkgKiAKKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIExpc3Q8SUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I+IGdldFByb3BlcnR5RGVzY3JpcHRvcnNHZW4oT2JqZWN0IG9iamVjdCkgeworCQlpZiAoaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMgPT0gbnVsbCkgeworCQkJc3VwZXIuZ2V0UHJvcGVydHlEZXNjcmlwdG9ycyhvYmplY3QpOworCisJCQlhZGRTZWVkUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCk7CisJCQlhZGRSYW5kb21HZW5lcmF0b3JQcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0KTsKKwkJCWFkZEdhaW5Qcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0KTsKKwkJfQorCQlyZXR1cm4gaXRlbVByb3BlcnR5RGVzY3JpcHRvcnM7CisJfQorCQorCS8qKgorCSAqIFRoaXMgYWRkcyBhIHByb3BlcnR5IGRlc2NyaXB0b3IgZm9yIHRoZSBTZWVkIGZlYXR1cmUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgYWRkU2VlZFByb3BlcnR5RGVzY3JpcHRvcihPYmplY3Qgb2JqZWN0KSB7CisJCWl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzLmFkZAorCQkJKGNyZWF0ZUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IKKwkJCQkoKChDb21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5KWFkYXB0ZXJGYWN0b3J5KS5nZXRSb290QWRhcHRlckZhY3RvcnkoKSwKKwkJCQkgZ2V0UmVzb3VyY2VMb2NhdG9yKCksCisJCQkJIGdldFN0cmluZygiX1VJX1N0b2NoYXN0aWNEaXNlYXNlTW9kZWxfc2VlZF9mZWF0dXJlIiksIC8vJE5PTi1OTFMtMSQKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfUHJvcGVydHlEZXNjcmlwdG9yX2Rlc2NyaXB0aW9uIiwgIl9VSV9TdG9jaGFzdGljRGlzZWFzZU1vZGVsX3NlZWRfZmVhdHVyZSIsICJfVUlfU3RvY2hhc3RpY0Rpc2Vhc2VNb2RlbF90eXBlIiksIC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJCAvLyROT04tTkxTLTMkCisJCQkJIFN0YW5kYXJkUGFja2FnZS5MaXRlcmFscy5TVE9DSEFTVElDX0RJU0VBU0VfTU9ERUxfX1NFRUQsCisJCQkJIHRydWUsCisJCQkJIGZhbHNlLAorCQkJCSBmYWxzZSwKKwkJCQkgSXRlbVByb3BlcnR5RGVzY3JpcHRvci5JTlRFR1JBTF9WQUxVRV9JTUFHRSwKKwkJCQkgbnVsbCwKKwkJCQkgbnVsbCkpOworCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyBhIHByb3BlcnR5IGRlc2NyaXB0b3IgZm9yIHRoZSBSYW5kb20gR2VuZXJhdG9yIGZlYXR1cmUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgYWRkUmFuZG9tR2VuZXJhdG9yUHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdCBvYmplY3QpIHsKKwkJaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMuYWRkCisJCQkoY3JlYXRlSXRlbVByb3BlcnR5RGVzY3JpcHRvcgorCQkJCSgoKENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnkpYWRhcHRlckZhY3RvcnkpLmdldFJvb3RBZGFwdGVyRmFjdG9yeSgpLAorCQkJCSBnZXRSZXNvdXJjZUxvY2F0b3IoKSwKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfU3RvY2hhc3RpY0Rpc2Vhc2VNb2RlbF9yYW5kb21HZW5lcmF0b3JfZmVhdHVyZSIpLCAvLyROT04tTkxTLTEkCisJCQkJIGdldFN0cmluZygiX1VJX1Byb3BlcnR5RGVzY3JpcHRvcl9kZXNjcmlwdGlvbiIsICJfVUlfU3RvY2hhc3RpY0Rpc2Vhc2VNb2RlbF9yYW5kb21HZW5lcmF0b3JfZmVhdHVyZSIsICJfVUlfU3RvY2hhc3RpY0Rpc2Vhc2VNb2RlbF90eXBlIiksIC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJCAvLyROT04tTkxTLTMkCisJCQkJIFN0YW5kYXJkUGFja2FnZS5MaXRlcmFscy5TVE9DSEFTVElDX0RJU0VBU0VfTU9ERUxfX1JBTkRPTV9HRU5FUkFUT1IsCisJCQkJIGZhbHNlLAorCQkJCSBmYWxzZSwKKwkJCQkgZmFsc2UsCisJCQkJIEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IuR0VORVJJQ19WQUxVRV9JTUFHRSwKKwkJCQkgbnVsbCwKKwkJCQkgbnVsbCkpOworCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyBhIHByb3BlcnR5IGRlc2NyaXB0b3IgZm9yIHRoZSBHYWluIGZlYXR1cmUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgYWRkR2FpblByb3BlcnR5RGVzY3JpcHRvcihPYmplY3Qgb2JqZWN0KSB7CisJCWl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzLmFkZAorCQkJKGNyZWF0ZUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IKKwkJCQkoKChDb21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5KWFkYXB0ZXJGYWN0b3J5KS5nZXRSb290QWRhcHRlckZhY3RvcnkoKSwKKwkJCQkgZ2V0UmVzb3VyY2VMb2NhdG9yKCksCisJCQkJIGdldFN0cmluZygiX1VJX1N0YW5kYXJkU3RvY2hhc3RpY0Rpc2Vhc2VNb2RlbF9nYWluX2ZlYXR1cmUiKSwgLy8kTk9OLU5MUy0xJAorCQkJCSBnZXRTdHJpbmcoIl9VSV9Qcm9wZXJ0eURlc2NyaXB0b3JfZGVzY3JpcHRpb24iLCAiX1VJX1N0YW5kYXJkU3RvY2hhc3RpY0Rpc2Vhc2VNb2RlbF9nYWluX2ZlYXR1cmUiLCAiX1VJX1N0YW5kYXJkU3RvY2hhc3RpY0Rpc2Vhc2VNb2RlbF90eXBlIiksIC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJCAvLyROT04tTkxTLTMkCisJCQkJIFN0YW5kYXJkUGFja2FnZS5MaXRlcmFscy5TVEFOREFSRF9TVE9DSEFTVElDX0RJU0VBU0VfTU9ERUxfX0dBSU4sCisJCQkJIHRydWUsCisJCQkJIGZhbHNlLAorCQkJCSBmYWxzZSwKKwkJCQkgSXRlbVByb3BlcnR5RGVzY3JpcHRvci5SRUFMX1ZBTFVFX0lNQUdFLAorCQkJCSBudWxsLAorCQkJCSBudWxsKSk7CisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIHRoZSBsYWJlbCB0ZXh0IGZvciB0aGUgYWRhcHRlZCBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jCisJICogLS0+CisJICogCisJICogQHBhcmFtIG9iamVjdAorCSAqIEByZXR1cm4KKwkgKiAKKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBTdHJpbmcgZ2V0VGV4dChPYmplY3Qgb2JqZWN0KSB7CisJCXJldHVybiBzdXBlci5nZXRUZXh0KG9iamVjdCk7CisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIHRoZSBsYWJlbCB0ZXh0IGZvciB0aGUgYWRhcHRlZCBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jCisJICogLS0+CisJICogCisJICogQHBhcmFtIG9iamVjdAorCSAqIEByZXR1cm4KKwkgKiAKKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIFN0cmluZyBnZXRUZXh0R2VuKE9iamVjdCBvYmplY3QpIHsKKwkJU3RyaW5nIGxhYmVsID0gKChTdG9jaGFzdGljU0lEaXNlYXNlTW9kZWwpb2JqZWN0KS5nZXREaXNlYXNlTmFtZSgpOworCQlyZXR1cm4gbGFiZWwgPT0gbnVsbCB8fCBsYWJlbC5sZW5ndGgoKSA9PSAwID8KKwkJCWdldFN0cmluZygiX1VJX1N0b2NoYXN0aWNTSURpc2Vhc2VNb2RlbF90eXBlIikgOiAvLyROT04tTkxTLTEkCisJCQlnZXRTdHJpbmcoIl9VSV9TdG9jaGFzdGljU0lEaXNlYXNlTW9kZWxfdHlwZSIpICsgIiAiICsgbGFiZWw7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAorCX0KKwkKKwkvKioKKwkgKiBUaGlzIGhhbmRsZXMgbW9kZWwgbm90aWZpY2F0aW9ucyBieSBjYWxsaW5nIHtAbGluayAjdXBkYXRlQ2hpbGRyZW59IHRvIHVwZGF0ZSBhbnkgY2FjaGVkCisJICogY2hpbGRyZW4gYW5kIGJ5IGNyZWF0aW5nIGEgdmlld2VyIG5vdGlmaWNhdGlvbiwgd2hpY2ggaXQgcGFzc2VzIHRvIHtAbGluayAjZmlyZU5vdGlmeUNoYW5nZWR9LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogCisJICogQHBhcmFtIG5vdGlmaWNhdGlvbgorCSAqIAorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBub3RpZnlDaGFuZ2VkKE5vdGlmaWNhdGlvbiBub3RpZmljYXRpb24pIHsKKwkJdXBkYXRlQ2hpbGRyZW4obm90aWZpY2F0aW9uKTsKKworCQlzd2l0Y2ggKG5vdGlmaWNhdGlvbi5nZXRGZWF0dXJlSUQoU3RvY2hhc3RpY1NJRGlzZWFzZU1vZGVsLmNsYXNzKSkgeworCQkJY2FzZSBTdGFuZGFyZFBhY2thZ2UuU1RPQ0hBU1RJQ19TSV9ESVNFQVNFX01PREVMX19TRUVEOgorCQkJY2FzZSBTdGFuZGFyZFBhY2thZ2UuU1RPQ0hBU1RJQ19TSV9ESVNFQVNFX01PREVMX19SQU5ET01fR0VORVJBVE9SOgorCQkJY2FzZSBTdGFuZGFyZFBhY2thZ2UuU1RPQ0hBU1RJQ19TSV9ESVNFQVNFX01PREVMX19HQUlOOgorCQkJCWZpcmVOb3RpZnlDaGFuZ2VkKG5ldyBWaWV3ZXJOb3RpZmljYXRpb24obm90aWZpY2F0aW9uLCBub3RpZmljYXRpb24uZ2V0Tm90aWZpZXIoKSwgZmFsc2UsIHRydWUpKTsKKwkJCQlyZXR1cm47CisJCX0KKwkJc3VwZXIubm90aWZ5Q2hhbmdlZChub3RpZmljYXRpb24pOworCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmVkaXQuY29tbWFuZC5Db21tYW5kUGFyYW1ldGVyfXMgZGVzY3JpYmluZyB0aGUgY2hpbGRyZW4KKwkgKiB0aGF0IGNhbiBiZSBjcmVhdGVkIHVuZGVyIHRoaXMgb2JqZWN0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MKKwkgKiAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIGNvbGxlY3ROZXdDaGlsZERlc2NyaXB0b3JzKENvbGxlY3Rpb248T2JqZWN0PiBuZXdDaGlsZERlc2NyaXB0b3JzLCBPYmplY3Qgb2JqZWN0KSB7CisJCXN1cGVyLmNvbGxlY3ROZXdDaGlsZERlc2NyaXB0b3JzKG5ld0NoaWxkRGVzY3JpcHRvcnMsIG9iamVjdCk7CisJfQorCit9CmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3N0YW5kYXJkL3Byb3ZpZGVyL1N0b2NoYXN0aWNTSVJEaXNlYXNlTW9kZWxJdGVtUHJvdmlkZXIuamF2YSBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvc3RhbmRhcmQvcHJvdmlkZXIvU3RvY2hhc3RpY1NJUkRpc2Vhc2VNb2RlbEl0ZW1Qcm92aWRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJkOWViNzAKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3N0YW5kYXJkL3Byb3ZpZGVyL1N0b2NoYXN0aWNTSVJEaXNlYXNlTW9kZWxJdGVtUHJvdmlkZXIuamF2YQpAQCAtMCwwICsxLDIxMyBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQucHJvdmlkZXI7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5BZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JRWRpdGluZ0RvbWFpbkl0ZW1Qcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbUxhYmVsUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1Qcm9wZXJ0eVNvdXJjZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JU3RydWN0dXJlZEl0ZW1Db250ZW50UHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVRyZWVJdGVtQ29udGVudFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuVmlld2VyTm90aWZpY2F0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZFBhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlN0b2NoYXN0aWNTSVJEaXNlYXNlTW9kZWw7CisKKy8qKgorICogVGhpcyBpcyB0aGUgaXRlbSBwcm92aWRlciBhZGFwdGVyIGZvciBhIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RvY2hhc3RpY1NJUkRpc2Vhc2VNb2RlbH0gb2JqZWN0LgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBTdG9jaGFzdGljU0lSRGlzZWFzZU1vZGVsSXRlbVByb3ZpZGVyIGV4dGVuZHMgU0lSSXRlbVByb3ZpZGVyCisJCWltcGxlbWVudHMgSUVkaXRpbmdEb21haW5JdGVtUHJvdmlkZXIsIElTdHJ1Y3R1cmVkSXRlbUNvbnRlbnRQcm92aWRlciwKKwkJSVRyZWVJdGVtQ29udGVudFByb3ZpZGVyLCBJSXRlbUxhYmVsUHJvdmlkZXIsIElJdGVtUHJvcGVydHlTb3VyY2UgeworCS8qKgorCSAqIFRoaXMgY29uc3RydWN0cyBhbiBpbnN0YW5jZSBmcm9tIGEgZmFjdG9yeSBhbmQgYSBub3RpZmllci4gPCEtLQorCSAqIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBwYXJhbSBhZGFwdGVyRmFjdG9yeQorCSAqIAorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgU3RvY2hhc3RpY1NJUkRpc2Vhc2VNb2RlbEl0ZW1Qcm92aWRlcihBZGFwdGVyRmFjdG9yeSBhZGFwdGVyRmFjdG9yeSkgeworCQlzdXBlcihhZGFwdGVyRmFjdG9yeSk7CisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIHRoZSBwcm9wZXJ0eSBkZXNjcmlwdG9ycyBmb3IgdGhlIGFkYXB0ZWQgY2xhc3MuIDwhLS0KKwkgKiBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAcGFyYW0gb2JqZWN0CisJICogQHJldHVybgorCSAqIAorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIExpc3Q8SUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I+IGdldFByb3BlcnR5RGVzY3JpcHRvcnMoT2JqZWN0IG9iamVjdCkgeworCQlpZiAoaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMgPT0gbnVsbCkgeworCQkJc3VwZXIuZ2V0UHJvcGVydHlEZXNjcmlwdG9ycyhvYmplY3QpOworCisJCQlhZGRTZWVkUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCk7CisJCQkvL2FkZFJhbmRvbUdlbmVyYXRvclByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QpOworCQkJYWRkR2FpblByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QpOworCQl9CisJCXJldHVybiBpdGVtUHJvcGVydHlEZXNjcmlwdG9yczsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgdGhlIHByb3BlcnR5IGRlc2NyaXB0b3JzIGZvciB0aGUgYWRhcHRlZCBjbGFzcy4gPCEtLQorCSAqIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBwYXJhbSBvYmplY3QKKwkgKiBAcmV0dXJuCisJICogCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBMaXN0PElJdGVtUHJvcGVydHlEZXNjcmlwdG9yPiBnZXRQcm9wZXJ0eURlc2NyaXB0b3JzR2VuKE9iamVjdCBvYmplY3QpIHsKKwkJaWYgKGl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzID09IG51bGwpIHsKKwkJCXN1cGVyLmdldFByb3BlcnR5RGVzY3JpcHRvcnMob2JqZWN0KTsKKworCQkJYWRkU2VlZFByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QpOworCQkJYWRkUmFuZG9tR2VuZXJhdG9yUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCk7CisJCQlhZGRHYWluUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCk7CisJCX0KKwkJcmV0dXJuIGl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzOworCX0KKwkKKwkvKioKKwkgKiBUaGlzIGFkZHMgYSBwcm9wZXJ0eSBkZXNjcmlwdG9yIGZvciB0aGUgU2VlZCBmZWF0dXJlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIGFkZFNlZWRQcm9wZXJ0eURlc2NyaXB0b3IoT2JqZWN0IG9iamVjdCkgeworCQlpdGVtUHJvcGVydHlEZXNjcmlwdG9ycy5hZGQKKwkJCShjcmVhdGVJdGVtUHJvcGVydHlEZXNjcmlwdG9yCisJCQkJKCgoQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSlhZGFwdGVyRmFjdG9yeSkuZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCksCisJCQkJIGdldFJlc291cmNlTG9jYXRvcigpLAorCQkJCSBnZXRTdHJpbmcoIl9VSV9TdG9jaGFzdGljRGlzZWFzZU1vZGVsX3NlZWRfZmVhdHVyZSIpLCAvLyROT04tTkxTLTEkCisJCQkJIGdldFN0cmluZygiX1VJX1Byb3BlcnR5RGVzY3JpcHRvcl9kZXNjcmlwdGlvbiIsICJfVUlfU3RvY2hhc3RpY0Rpc2Vhc2VNb2RlbF9zZWVkX2ZlYXR1cmUiLCAiX1VJX1N0b2NoYXN0aWNEaXNlYXNlTW9kZWxfdHlwZSIpLCAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQgLy8kTk9OLU5MUy0zJAorCQkJCSBTdGFuZGFyZFBhY2thZ2UuTGl0ZXJhbHMuU1RPQ0hBU1RJQ19ESVNFQVNFX01PREVMX19TRUVELAorCQkJCSB0cnVlLAorCQkJCSBmYWxzZSwKKwkJCQkgZmFsc2UsCisJCQkJIEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IuSU5URUdSQUxfVkFMVUVfSU1BR0UsCisJCQkJIG51bGwsCisJCQkJIG51bGwpKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFkZHMgYSBwcm9wZXJ0eSBkZXNjcmlwdG9yIGZvciB0aGUgUmFuZG9tIEdlbmVyYXRvciBmZWF0dXJlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIGFkZFJhbmRvbUdlbmVyYXRvclByb3BlcnR5RGVzY3JpcHRvcihPYmplY3Qgb2JqZWN0KSB7CisJCWl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzLmFkZAorCQkJKGNyZWF0ZUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IKKwkJCQkoKChDb21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5KWFkYXB0ZXJGYWN0b3J5KS5nZXRSb290QWRhcHRlckZhY3RvcnkoKSwKKwkJCQkgZ2V0UmVzb3VyY2VMb2NhdG9yKCksCisJCQkJIGdldFN0cmluZygiX1VJX1N0b2NoYXN0aWNEaXNlYXNlTW9kZWxfcmFuZG9tR2VuZXJhdG9yX2ZlYXR1cmUiKSwgLy8kTk9OLU5MUy0xJAorCQkJCSBnZXRTdHJpbmcoIl9VSV9Qcm9wZXJ0eURlc2NyaXB0b3JfZGVzY3JpcHRpb24iLCAiX1VJX1N0b2NoYXN0aWNEaXNlYXNlTW9kZWxfcmFuZG9tR2VuZXJhdG9yX2ZlYXR1cmUiLCAiX1VJX1N0b2NoYXN0aWNEaXNlYXNlTW9kZWxfdHlwZSIpLCAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQgLy8kTk9OLU5MUy0zJAorCQkJCSBTdGFuZGFyZFBhY2thZ2UuTGl0ZXJhbHMuU1RPQ0hBU1RJQ19ESVNFQVNFX01PREVMX19SQU5ET01fR0VORVJBVE9SLAorCQkJCSBmYWxzZSwKKwkJCQkgZmFsc2UsCisJCQkJIGZhbHNlLAorCQkJCSBJdGVtUHJvcGVydHlEZXNjcmlwdG9yLkdFTkVSSUNfVkFMVUVfSU1BR0UsCisJCQkJIG51bGwsCisJCQkJIG51bGwpKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFkZHMgYSBwcm9wZXJ0eSBkZXNjcmlwdG9yIGZvciB0aGUgR2FpbiBmZWF0dXJlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIGFkZEdhaW5Qcm9wZXJ0eURlc2NyaXB0b3IoT2JqZWN0IG9iamVjdCkgeworCQlpdGVtUHJvcGVydHlEZXNjcmlwdG9ycy5hZGQKKwkJCShjcmVhdGVJdGVtUHJvcGVydHlEZXNjcmlwdG9yCisJCQkJKCgoQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSlhZGFwdGVyRmFjdG9yeSkuZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCksCisJCQkJIGdldFJlc291cmNlTG9jYXRvcigpLAorCQkJCSBnZXRTdHJpbmcoIl9VSV9TdGFuZGFyZFN0b2NoYXN0aWNEaXNlYXNlTW9kZWxfZ2Fpbl9mZWF0dXJlIiksIC8vJE5PTi1OTFMtMSQKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfUHJvcGVydHlEZXNjcmlwdG9yX2Rlc2NyaXB0aW9uIiwgIl9VSV9TdGFuZGFyZFN0b2NoYXN0aWNEaXNlYXNlTW9kZWxfZ2Fpbl9mZWF0dXJlIiwgIl9VSV9TdGFuZGFyZFN0b2NoYXN0aWNEaXNlYXNlTW9kZWxfdHlwZSIpLCAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQgLy8kTk9OLU5MUy0zJAorCQkJCSBTdGFuZGFyZFBhY2thZ2UuTGl0ZXJhbHMuU1RBTkRBUkRfU1RPQ0hBU1RJQ19ESVNFQVNFX01PREVMX19HQUlOLAorCQkJCSB0cnVlLAorCQkJCSBmYWxzZSwKKwkJCQkgZmFsc2UsCisJCQkJIEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IuUkVBTF9WQUxVRV9JTUFHRSwKKwkJCQkgbnVsbCwKKwkJCQkgbnVsbCkpOworCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyB0aGUgbGFiZWwgdGV4dCBmb3IgdGhlIGFkYXB0ZWQgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYworCSAqIC0tPgorCSAqIAorCSAqIEBwYXJhbSBvYmplY3QKKwkgKiBAcmV0dXJuCisJICogCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgU3RyaW5nIGdldFRleHQoT2JqZWN0IG9iamVjdCkgeworCQlyZXR1cm4gc3VwZXIuZ2V0VGV4dChvYmplY3QpOworCX0KKworCS8qKgorCSAqIFRoaXMgaGFuZGxlcyBtb2RlbCBub3RpZmljYXRpb25zIGJ5IGNhbGxpbmcge0BsaW5rICN1cGRhdGVDaGlsZHJlbn0gdG8gdXBkYXRlIGFueSBjYWNoZWQKKwkgKiBjaGlsZHJlbiBhbmQgYnkgY3JlYXRpbmcgYSB2aWV3ZXIgbm90aWZpY2F0aW9uLCB3aGljaCBpdCBwYXNzZXMgdG8ge0BsaW5rICNmaXJlTm90aWZ5Q2hhbmdlZH0uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAcGFyYW0gbm90aWZpY2F0aW9uCisJICogCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIG5vdGlmeUNoYW5nZWQoTm90aWZpY2F0aW9uIG5vdGlmaWNhdGlvbikgeworCQl1cGRhdGVDaGlsZHJlbihub3RpZmljYXRpb24pOworCisJCXN3aXRjaCAobm90aWZpY2F0aW9uLmdldEZlYXR1cmVJRChTdG9jaGFzdGljU0lSRGlzZWFzZU1vZGVsLmNsYXNzKSkgeworCQkJY2FzZSBTdGFuZGFyZFBhY2thZ2UuU1RPQ0hBU1RJQ19TSVJfRElTRUFTRV9NT0RFTF9fU0VFRDoKKwkJCWNhc2UgU3RhbmRhcmRQYWNrYWdlLlNUT0NIQVNUSUNfU0lSX0RJU0VBU0VfTU9ERUxfX1JBTkRPTV9HRU5FUkFUT1I6CisJCQljYXNlIFN0YW5kYXJkUGFja2FnZS5TVE9DSEFTVElDX1NJUl9ESVNFQVNFX01PREVMX19HQUlOOgorCQkJCWZpcmVOb3RpZnlDaGFuZ2VkKG5ldyBWaWV3ZXJOb3RpZmljYXRpb24obm90aWZpY2F0aW9uLCBub3RpZmljYXRpb24uZ2V0Tm90aWZpZXIoKSwgZmFsc2UsIHRydWUpKTsKKwkJCQlyZXR1cm47CisJCX0KKwkJc3VwZXIubm90aWZ5Q2hhbmdlZChub3RpZmljYXRpb24pOworCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmVkaXQuY29tbWFuZC5Db21tYW5kUGFyYW1ldGVyfXMgZGVzY3JpYmluZyB0aGUgY2hpbGRyZW4KKwkgKiB0aGF0IGNhbiBiZSBjcmVhdGVkIHVuZGVyIHRoaXMgb2JqZWN0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MKKwkgKiAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIGNvbGxlY3ROZXdDaGlsZERlc2NyaXB0b3JzKENvbGxlY3Rpb248T2JqZWN0PiBuZXdDaGlsZERlc2NyaXB0b3JzLCBPYmplY3Qgb2JqZWN0KSB7CisJCXN1cGVyLmNvbGxlY3ROZXdDaGlsZERlc2NyaXB0b3JzKG5ld0NoaWxkRGVzY3JpcHRvcnMsIG9iamVjdCk7CisJfQorCit9CmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3N0YW5kYXJkL3V0aWwvU3RhbmRhcmRBZGFwdGVyRmFjdG9yeS5qYXZhIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9zdGFuZGFyZC91dGlsL1N0YW5kYXJkQWRhcHRlckZhY3RvcnkuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZGY1NmZkCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9zdGFuZGFyZC91dGlsL1N0YW5kYXJkQWRhcHRlckZhY3RvcnkuamF2YQpAQCAtMCwwICsxLDk1NCBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQudXRpbDsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8vaW1wb3J0IGphdmEudXRpbC5NYXA7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5BZGFwdGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LmltcGwuQWRhcHRlckZhY3RvcnlJbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uSWRlbnRpZmlhYmxlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uU2FuaXR5Q2hlY2tlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguRHluYW1pY0xhYmVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5EeW5hbWljTm9kZUxhYmVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5JbnRlZ3JhdGlvbkxhYmVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5JbnRlZ3JhdGlvbkxhYmVsVmFsdWU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkxhYmVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5MYWJlbFZhbHVlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5Ob2RlTGFiZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLkRlY29yYXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuSW50ZWdyYXRpb25EZWNvcmF0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLk5vZGVEZWNvcmF0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLk1vZGlmaWFibGU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLio7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLkRldGVybWluaXN0aWNTRUlSRGlzZWFzZU1vZGVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5EZXRlcm1pbmlzdGljU0lEaXNlYXNlTW9kZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLkRldGVybWluaXN0aWNTSVJEaXNlYXNlTW9kZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLkRpc2Vhc2VNb2RlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuRGlzZWFzZU1vZGVsTGFiZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLkRpc2Vhc2VNb2RlbExhYmVsVmFsdWU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLkluZmVjdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5JbmZlY3Rvcklub2N1bGF0b3JDb2xsZWN0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TRUlSOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TRUlSTGFiZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlNFSVJMYWJlbFZhbHVlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TSTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU0lJbmZlY3RvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU0lMYWJlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU0lMYWJlbFZhbHVlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TSVI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlNJUklub2N1bGF0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlNJUkxhYmVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TSVJMYWJlbFZhbHVlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZERpc2Vhc2VNb2RlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbFZhbHVlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZEluZmVjdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZFBhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkU3RvY2hhc3RpY0Rpc2Vhc2VNb2RlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RvY2hhc3RpY0Rpc2Vhc2VNb2RlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RvY2hhc3RpY1BvaXNzb25TRUlSRGlzZWFzZU1vZGVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdG9jaGFzdGljUG9pc3NvblNJRGlzZWFzZU1vZGVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdG9jaGFzdGljUG9pc3NvblNJUkRpc2Vhc2VNb2RlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RvY2hhc3RpY1NFSVJEaXNlYXNlTW9kZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlN0b2NoYXN0aWNTSURpc2Vhc2VNb2RlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RvY2hhc3RpY1NJUkRpc2Vhc2VNb2RlbDsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiBUaGUgPGI+QWRhcHRlciBGYWN0b3J5PC9iPiBmb3IgdGhlIG1vZGVsLiBJdAorICogcHJvdmlkZXMgYW4gYWRhcHRlciA8Y29kZT5jcmVhdGVYWFg8L2NvZGU+IG1ldGhvZCBmb3IgZWFjaCBjbGFzcyBvZiB0aGUKKyAqIG1vZGVsLiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkUGFja2FnZQorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgU3RhbmRhcmRBZGFwdGVyRmFjdG9yeSBleHRlbmRzIEFkYXB0ZXJGYWN0b3J5SW1wbCB7CisJLyoqCisJICogVGhlIGNhY2hlZCBtb2RlbCBwYWNrYWdlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgc3RhdGljIFN0YW5kYXJkUGFja2FnZSBtb2RlbFBhY2thZ2U7CisKKwkvKioKKwkgKiBDcmVhdGVzIGFuIGluc3RhbmNlIG9mIHRoZSBhZGFwdGVyIGZhY3RvcnkuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLQorCSAqIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFN0YW5kYXJkQWRhcHRlckZhY3RvcnkoKSB7CisJCWlmIChtb2RlbFBhY2thZ2UgPT0gbnVsbCkgeworCQkJbW9kZWxQYWNrYWdlID0gU3RhbmRhcmRQYWNrYWdlLmVJTlNUQU5DRTsKKwkJfQorCX0KKworCS8qKgorCSAqIFJldHVybnMgd2hldGhlciB0aGlzIGZhY3RvcnkgaXMgYXBwbGljYWJsZSBmb3IgdGhlIHR5cGUgb2YgdGhlIG9iamVjdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgPGNvZGU+dHJ1ZTwvY29kZT4KKwkgKiBpZiB0aGUgb2JqZWN0IGlzIGVpdGhlciB0aGUgbW9kZWwncyBwYWNrYWdlIG9yIGlzIGFuIGluc3RhbmNlIG9iamVjdCBvZgorCSAqIHRoZSBtb2RlbC4KKwkgKiAKKwkgKiBAcGFyYW0gb2JqZWN0CisJICogCisJICogCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB3aGV0aGVyIHRoaXMgZmFjdG9yeSBpcyBhcHBsaWNhYmxlIGZvciB0aGUgdHlwZSBvZiB0aGUgb2JqZWN0LgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgYm9vbGVhbiBpc0ZhY3RvcnlGb3JUeXBlKE9iamVjdCBvYmplY3QpIHsKKwkJaWYgKG9iamVjdCA9PSBtb2RlbFBhY2thZ2UpIHsKKwkJCXJldHVybiB0cnVlOworCQl9CisJCWlmIChvYmplY3QgaW5zdGFuY2VvZiBFT2JqZWN0KSB7CisJCQlyZXR1cm4gKChFT2JqZWN0KW9iamVjdCkuZUNsYXNzKCkuZ2V0RVBhY2thZ2UoKSA9PSBtb2RlbFBhY2thZ2U7CisJCX0KKwkJcmV0dXJuIGZhbHNlOworCX0KKworCS8qKgorCSAqIFRoZSBzd2l0Y2ggdGhlIGRlbGVnYXRlcyB0byB0aGUgPGNvZGU+Y3JlYXRlWFhYPC9jb2RlPiBtZXRob2RzLiA8IS0tCisJICogYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgU3RhbmRhcmRTd2l0Y2g8QWRhcHRlcj4gbW9kZWxTd2l0Y2ggPQorCQluZXcgU3RhbmRhcmRTd2l0Y2g8QWRhcHRlcj4oKSB7CisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyBBZGFwdGVyIGNhc2VEZXRlcm1pbmlzdGljU0VJUkRpc2Vhc2VNb2RlbChEZXRlcm1pbmlzdGljU0VJUkRpc2Vhc2VNb2RlbCBvYmplY3QpIHsKKwkJCQlyZXR1cm4gY3JlYXRlRGV0ZXJtaW5pc3RpY1NFSVJEaXNlYXNlTW9kZWxBZGFwdGVyKCk7CisJCQl9CisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyBBZGFwdGVyIGNhc2VEZXRlcm1pbmlzdGljU0lEaXNlYXNlTW9kZWwoRGV0ZXJtaW5pc3RpY1NJRGlzZWFzZU1vZGVsIG9iamVjdCkgeworCQkJCXJldHVybiBjcmVhdGVEZXRlcm1pbmlzdGljU0lEaXNlYXNlTW9kZWxBZGFwdGVyKCk7CisJCQl9CisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyBBZGFwdGVyIGNhc2VEZXRlcm1pbmlzdGljU0lSRGlzZWFzZU1vZGVsKERldGVybWluaXN0aWNTSVJEaXNlYXNlTW9kZWwgb2JqZWN0KSB7CisJCQkJcmV0dXJuIGNyZWF0ZURldGVybWluaXN0aWNTSVJEaXNlYXNlTW9kZWxBZGFwdGVyKCk7CisJCQl9CisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyBBZGFwdGVyIGNhc2VEaXNlYXNlTW9kZWwoRGlzZWFzZU1vZGVsIG9iamVjdCkgeworCQkJCXJldHVybiBjcmVhdGVEaXNlYXNlTW9kZWxBZGFwdGVyKCk7CisJCQl9CisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyBBZGFwdGVyIGNhc2VEaXNlYXNlTW9kZWxMYWJlbChEaXNlYXNlTW9kZWxMYWJlbCBvYmplY3QpIHsKKwkJCQlyZXR1cm4gY3JlYXRlRGlzZWFzZU1vZGVsTGFiZWxBZGFwdGVyKCk7CisJCQl9CisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyBBZGFwdGVyIGNhc2VEaXNlYXNlTW9kZWxMYWJlbFZhbHVlKERpc2Vhc2VNb2RlbExhYmVsVmFsdWUgb2JqZWN0KSB7CisJCQkJcmV0dXJuIGNyZWF0ZURpc2Vhc2VNb2RlbExhYmVsVmFsdWVBZGFwdGVyKCk7CisJCQl9CisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyBBZGFwdGVyIGNhc2VJbmZlY3RvcihJbmZlY3RvciBvYmplY3QpIHsKKwkJCQlyZXR1cm4gY3JlYXRlSW5mZWN0b3JBZGFwdGVyKCk7CisJCQl9CisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyBBZGFwdGVyIGNhc2VTRUlSKFNFSVIgb2JqZWN0KSB7CisJCQkJcmV0dXJuIGNyZWF0ZVNFSVJBZGFwdGVyKCk7CisJCQl9CisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyBBZGFwdGVyIGNhc2VTRUlSTGFiZWwoU0VJUkxhYmVsIG9iamVjdCkgeworCQkJCXJldHVybiBjcmVhdGVTRUlSTGFiZWxBZGFwdGVyKCk7CisJCQl9CisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyBBZGFwdGVyIGNhc2VTRUlSTGFiZWxWYWx1ZShTRUlSTGFiZWxWYWx1ZSBvYmplY3QpIHsKKwkJCQlyZXR1cm4gY3JlYXRlU0VJUkxhYmVsVmFsdWVBZGFwdGVyKCk7CisJCQl9CisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyBBZGFwdGVyIGNhc2VTSShTSSBvYmplY3QpIHsKKwkJCQlyZXR1cm4gY3JlYXRlU0lBZGFwdGVyKCk7CisJCQl9CisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyBBZGFwdGVyIGNhc2VTSUluZmVjdG9yKFNJSW5mZWN0b3Igb2JqZWN0KSB7CisJCQkJcmV0dXJuIGNyZWF0ZVNJSW5mZWN0b3JBZGFwdGVyKCk7CisJCQl9CisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyBBZGFwdGVyIGNhc2VTSUxhYmVsKFNJTGFiZWwgb2JqZWN0KSB7CisJCQkJcmV0dXJuIGNyZWF0ZVNJTGFiZWxBZGFwdGVyKCk7CisJCQl9CisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyBBZGFwdGVyIGNhc2VTSUxhYmVsVmFsdWUoU0lMYWJlbFZhbHVlIG9iamVjdCkgeworCQkJCXJldHVybiBjcmVhdGVTSUxhYmVsVmFsdWVBZGFwdGVyKCk7CisJCQl9CisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyBBZGFwdGVyIGNhc2VTSVIoU0lSIG9iamVjdCkgeworCQkJCXJldHVybiBjcmVhdGVTSVJBZGFwdGVyKCk7CisJCQl9CisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyBBZGFwdGVyIGNhc2VTSVJMYWJlbChTSVJMYWJlbCBvYmplY3QpIHsKKwkJCQlyZXR1cm4gY3JlYXRlU0lSTGFiZWxBZGFwdGVyKCk7CisJCQl9CisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyBBZGFwdGVyIGNhc2VTSVJMYWJlbFZhbHVlKFNJUkxhYmVsVmFsdWUgb2JqZWN0KSB7CisJCQkJcmV0dXJuIGNyZWF0ZVNJUkxhYmVsVmFsdWVBZGFwdGVyKCk7CisJCQl9CisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyBBZGFwdGVyIGNhc2VTdGFuZGFyZERpc2Vhc2VNb2RlbChTdGFuZGFyZERpc2Vhc2VNb2RlbCBvYmplY3QpIHsKKwkJCQlyZXR1cm4gY3JlYXRlU3RhbmRhcmREaXNlYXNlTW9kZWxBZGFwdGVyKCk7CisJCQl9CisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyBBZGFwdGVyIGNhc2VTdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsKFN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWwgb2JqZWN0KSB7CisJCQkJcmV0dXJuIGNyZWF0ZVN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWxBZGFwdGVyKCk7CisJCQl9CisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyBBZGFwdGVyIGNhc2VTdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsVmFsdWUoU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbFZhbHVlIG9iamVjdCkgeworCQkJCXJldHVybiBjcmVhdGVTdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsVmFsdWVBZGFwdGVyKCk7CisJCQl9CisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyBBZGFwdGVyIGNhc2VTdGFuZGFyZEluZmVjdG9yKFN0YW5kYXJkSW5mZWN0b3Igb2JqZWN0KSB7CisJCQkJcmV0dXJuIGNyZWF0ZVN0YW5kYXJkSW5mZWN0b3JBZGFwdGVyKCk7CisJCQl9CisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyBBZGFwdGVyIGNhc2VTdG9jaGFzdGljU0VJUkRpc2Vhc2VNb2RlbChTdG9jaGFzdGljU0VJUkRpc2Vhc2VNb2RlbCBvYmplY3QpIHsKKwkJCQlyZXR1cm4gY3JlYXRlU3RvY2hhc3RpY1NFSVJEaXNlYXNlTW9kZWxBZGFwdGVyKCk7CisJCQl9CisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyBBZGFwdGVyIGNhc2VTdG9jaGFzdGljU0lEaXNlYXNlTW9kZWwoU3RvY2hhc3RpY1NJRGlzZWFzZU1vZGVsIG9iamVjdCkgeworCQkJCXJldHVybiBjcmVhdGVTdG9jaGFzdGljU0lEaXNlYXNlTW9kZWxBZGFwdGVyKCk7CisJCQl9CisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyBBZGFwdGVyIGNhc2VTdG9jaGFzdGljU0lSRGlzZWFzZU1vZGVsKFN0b2NoYXN0aWNTSVJEaXNlYXNlTW9kZWwgb2JqZWN0KSB7CisJCQkJcmV0dXJuIGNyZWF0ZVN0b2NoYXN0aWNTSVJEaXNlYXNlTW9kZWxBZGFwdGVyKCk7CisJCQl9CisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyBBZGFwdGVyIGNhc2VTdG9jaGFzdGljRGlzZWFzZU1vZGVsKFN0b2NoYXN0aWNEaXNlYXNlTW9kZWwgb2JqZWN0KSB7CisJCQkJcmV0dXJuIGNyZWF0ZVN0b2NoYXN0aWNEaXNlYXNlTW9kZWxBZGFwdGVyKCk7CisJCQl9CisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyBBZGFwdGVyIGNhc2VTdGFuZGFyZFN0b2NoYXN0aWNEaXNlYXNlTW9kZWwoU3RhbmRhcmRTdG9jaGFzdGljRGlzZWFzZU1vZGVsIG9iamVjdCkgeworCQkJCXJldHVybiBjcmVhdGVTdGFuZGFyZFN0b2NoYXN0aWNEaXNlYXNlTW9kZWxBZGFwdGVyKCk7CisJCQl9CisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyBBZGFwdGVyIGNhc2VTSVJJbm9jdWxhdG9yKFNJUklub2N1bGF0b3Igb2JqZWN0KSB7CisJCQkJcmV0dXJuIGNyZWF0ZVNJUklub2N1bGF0b3JBZGFwdGVyKCk7CisJCQl9CisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyBBZGFwdGVyIGNhc2VTdG9jaGFzdGljUG9pc3NvblNJRGlzZWFzZU1vZGVsKFN0b2NoYXN0aWNQb2lzc29uU0lEaXNlYXNlTW9kZWwgb2JqZWN0KSB7CisJCQkJcmV0dXJuIGNyZWF0ZVN0b2NoYXN0aWNQb2lzc29uU0lEaXNlYXNlTW9kZWxBZGFwdGVyKCk7CisJCQl9CisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyBBZGFwdGVyIGNhc2VTdG9jaGFzdGljUG9pc3NvblNJUkRpc2Vhc2VNb2RlbChTdG9jaGFzdGljUG9pc3NvblNJUkRpc2Vhc2VNb2RlbCBvYmplY3QpIHsKKwkJCQlyZXR1cm4gY3JlYXRlU3RvY2hhc3RpY1BvaXNzb25TSVJEaXNlYXNlTW9kZWxBZGFwdGVyKCk7CisJCQl9CisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyBBZGFwdGVyIGNhc2VTdG9jaGFzdGljUG9pc3NvblNFSVJEaXNlYXNlTW9kZWwoU3RvY2hhc3RpY1BvaXNzb25TRUlSRGlzZWFzZU1vZGVsIG9iamVjdCkgeworCQkJCXJldHVybiBjcmVhdGVTdG9jaGFzdGljUG9pc3NvblNFSVJEaXNlYXNlTW9kZWxBZGFwdGVyKCk7CisJCQl9CisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyBBZGFwdGVyIGNhc2VJbmZlY3Rvcklub2N1bGF0b3JDb2xsZWN0aW9uKEluZmVjdG9ySW5vY3VsYXRvckNvbGxlY3Rpb24gb2JqZWN0KSB7CisJCQkJcmV0dXJuIGNyZWF0ZUluZmVjdG9ySW5vY3VsYXRvckNvbGxlY3Rpb25BZGFwdGVyKCk7CisJCQl9CisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyBBZGFwdGVyIGNhc2VJbml0aWFsaXplcihJbml0aWFsaXplciBvYmplY3QpIHsKKwkJCQlyZXR1cm4gY3JlYXRlSW5pdGlhbGl6ZXJBZGFwdGVyKCk7CisJCQl9CisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyA8VD4gQWRhcHRlciBjYXNlQ29tcGFyYWJsZShDb21wYXJhYmxlPFQ+IG9iamVjdCkgeworCQkJCXJldHVybiBjcmVhdGVDb21wYXJhYmxlQWRhcHRlcigpOworCQkJfQorCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgQWRhcHRlciBjYXNlU2FuaXR5Q2hlY2tlcihTYW5pdHlDaGVja2VyIG9iamVjdCkgeworCQkJCXJldHVybiBjcmVhdGVTYW5pdHlDaGVja2VyQWRhcHRlcigpOworCQkJfQorCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgQWRhcHRlciBjYXNlSWRlbnRpZmlhYmxlKElkZW50aWZpYWJsZSBvYmplY3QpIHsKKwkJCQlyZXR1cm4gY3JlYXRlSWRlbnRpZmlhYmxlQWRhcHRlcigpOworCQkJfQorCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgQWRhcHRlciBjYXNlRGVjb3JhdG9yKERlY29yYXRvciBvYmplY3QpIHsKKwkJCQlyZXR1cm4gY3JlYXRlRGVjb3JhdG9yQWRhcHRlcigpOworCQkJfQorCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgQWRhcHRlciBjYXNlTm9kZURlY29yYXRvcihOb2RlRGVjb3JhdG9yIG9iamVjdCkgeworCQkJCXJldHVybiBjcmVhdGVOb2RlRGVjb3JhdG9yQWRhcHRlcigpOworCQkJfQorCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgQWRhcHRlciBjYXNlSW50ZWdyYXRpb25EZWNvcmF0b3IoSW50ZWdyYXRpb25EZWNvcmF0b3Igb2JqZWN0KSB7CisJCQkJcmV0dXJuIGNyZWF0ZUludGVncmF0aW9uRGVjb3JhdG9yQWRhcHRlcigpOworCQkJfQorCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgQWRhcHRlciBjYXNlTW9kaWZpYWJsZShNb2RpZmlhYmxlIG9iamVjdCkgeworCQkJCXJldHVybiBjcmVhdGVNb2RpZmlhYmxlQWRhcHRlcigpOworCQkJfQorCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgQWRhcHRlciBjYXNlTGFiZWwoTGFiZWwgb2JqZWN0KSB7CisJCQkJcmV0dXJuIGNyZWF0ZUxhYmVsQWRhcHRlcigpOworCQkJfQorCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgQWRhcHRlciBjYXNlRHluYW1pY0xhYmVsKER5bmFtaWNMYWJlbCBvYmplY3QpIHsKKwkJCQlyZXR1cm4gY3JlYXRlRHluYW1pY0xhYmVsQWRhcHRlcigpOworCQkJfQorCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgQWRhcHRlciBjYXNlTm9kZUxhYmVsKE5vZGVMYWJlbCBvYmplY3QpIHsKKwkJCQlyZXR1cm4gY3JlYXRlTm9kZUxhYmVsQWRhcHRlcigpOworCQkJfQorCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgQWRhcHRlciBjYXNlRHluYW1pY05vZGVMYWJlbChEeW5hbWljTm9kZUxhYmVsIG9iamVjdCkgeworCQkJCXJldHVybiBjcmVhdGVEeW5hbWljTm9kZUxhYmVsQWRhcHRlcigpOworCQkJfQorCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgQWRhcHRlciBjYXNlSW50ZWdyYXRpb25MYWJlbChJbnRlZ3JhdGlvbkxhYmVsIG9iamVjdCkgeworCQkJCXJldHVybiBjcmVhdGVJbnRlZ3JhdGlvbkxhYmVsQWRhcHRlcigpOworCQkJfQorCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgQWRhcHRlciBjYXNlTGFiZWxWYWx1ZShMYWJlbFZhbHVlIG9iamVjdCkgeworCQkJCXJldHVybiBjcmVhdGVMYWJlbFZhbHVlQWRhcHRlcigpOworCQkJfQorCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgQWRhcHRlciBjYXNlSW50ZWdyYXRpb25MYWJlbFZhbHVlKEludGVncmF0aW9uTGFiZWxWYWx1ZSBvYmplY3QpIHsKKwkJCQlyZXR1cm4gY3JlYXRlSW50ZWdyYXRpb25MYWJlbFZhbHVlQWRhcHRlcigpOworCQkJfQorCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgQWRhcHRlciBkZWZhdWx0Q2FzZShFT2JqZWN0IG9iamVjdCkgeworCQkJCXJldHVybiBjcmVhdGVFT2JqZWN0QWRhcHRlcigpOworCQkJfQorCQl9OworCisJLyoqCisJICogQ3JlYXRlcyBhbiBhZGFwdGVyIGZvciB0aGUgPGNvZGU+dGFyZ2V0PC9jb2RlPi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jCisJICogLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSB0YXJnZXQgdGhlIG9iamVjdCB0byBhZGFwdC4KKwkgKiBAcmV0dXJuIHRoZSBhZGFwdGVyIGZvciB0aGUgPGNvZGU+dGFyZ2V0PC9jb2RlPi4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlQWRhcHRlcihOb3RpZmllciB0YXJnZXQpIHsKKwkJcmV0dXJuIG1vZGVsU3dpdGNoLmRvU3dpdGNoKChFT2JqZWN0KXRhcmdldCk7CisJfQorCisKKwkvKioKKwkgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TRUlSIDxlbT5TRUlSPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQKKwkgKiB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsgaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlCisJICogd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU0VJUgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVTRUlSQWRhcHRlcigpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU0VJUkxhYmVsIDxlbT5TRUlSIExhYmVsPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQKKwkgKiB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsgaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlCisJICogd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU0VJUkxhYmVsCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZVNFSVJMYWJlbEFkYXB0ZXIoKSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlNFSVJMYWJlbFZhbHVlIDxlbT5TRUlSIExhYmVsIFZhbHVlPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQKKwkgKiB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsgaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlCisJICogd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU0VJUkxhYmVsVmFsdWUKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlU0VJUkxhYmVsVmFsdWVBZGFwdGVyKCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TSVIgPGVtPlNJUjwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0CisJICogd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7IGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZQorCSAqIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlNJUgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVTSVJBZGFwdGVyKCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TSVJMYWJlbCA8ZW0+U0lSIExhYmVsPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQKKwkgKiB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsgaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlCisJICogd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU0lSTGFiZWwKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlU0lSTGFiZWxBZGFwdGVyKCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TSVJMYWJlbFZhbHVlIDxlbT5TSVIgTGFiZWwgVmFsdWU8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdAorCSAqIHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOyBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2UKKwkgKiB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5LiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TSVJMYWJlbFZhbHVlCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZVNJUkxhYmVsVmFsdWVBZGFwdGVyKCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZERpc2Vhc2VNb2RlbCA8ZW0+RGlzZWFzZSBNb2RlbDwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0CisJICogd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7IGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZQorCSAqIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkRGlzZWFzZU1vZGVsCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZVN0YW5kYXJkRGlzZWFzZU1vZGVsQWRhcHRlcigpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuRGlzZWFzZU1vZGVsIDxlbT5EaXNlYXNlIE1vZGVsPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQKKwkgKiB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsgaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlCisJICogd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuRGlzZWFzZU1vZGVsCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZURpc2Vhc2VNb2RlbEFkYXB0ZXIoKSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLkRpc2Vhc2VNb2RlbExhYmVsIDxlbT5EaXNlYXNlIE1vZGVsIExhYmVsPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQKKwkgKiB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsgaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlCisJICogd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuRGlzZWFzZU1vZGVsTGFiZWwKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlRGlzZWFzZU1vZGVsTGFiZWxBZGFwdGVyKCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdG9jaGFzdGljU0VJUkRpc2Vhc2VNb2RlbCA8ZW0+U3RvY2hhc3RpYyBTRUlSIERpc2Vhc2UgTW9kZWw8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdAorCSAqIHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOyBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2UKKwkgKiB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5LiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdG9jaGFzdGljU0VJUkRpc2Vhc2VNb2RlbAorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVTdG9jaGFzdGljU0VJUkRpc2Vhc2VNb2RlbEFkYXB0ZXIoKSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkSW5mZWN0b3IgPGVtPkluZmVjdG9yPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQKKwkgKiB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsgaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlCisJICogd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmRJbmZlY3RvcgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVTdGFuZGFyZEluZmVjdG9yQWRhcHRlcigpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuRGV0ZXJtaW5pc3RpY1NFSVJEaXNlYXNlTW9kZWwgPGVtPkRldGVybWluaXN0aWMgU0VJUiBEaXNlYXNlIE1vZGVsPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQKKwkgKiB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsgaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlCisJICogd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuRGV0ZXJtaW5pc3RpY1NFSVJEaXNlYXNlTW9kZWwKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlRGV0ZXJtaW5pc3RpY1NFSVJEaXNlYXNlTW9kZWxBZGFwdGVyKCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5EaXNlYXNlTW9kZWxMYWJlbFZhbHVlIDxlbT5EaXNlYXNlIE1vZGVsIExhYmVsIFZhbHVlPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQKKwkgKiB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsgaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlCisJICogd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVEaXNlYXNlTW9kZWxMYWJlbFZhbHVlQWRhcHRlcigpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbFZhbHVlIDxlbT5EaXNlYXNlIE1vZGVsIExhYmVsIFZhbHVlPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQKKwkgKiB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsgaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlCisJICogd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbFZhbHVlCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZVN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZUFkYXB0ZXIoKSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWwgPGVtPkRpc2Vhc2UgTW9kZWwgTGFiZWw8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdAorCSAqIHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOyBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2UKKwkgKiB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5LiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZVN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWxBZGFwdGVyKCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TSSA8ZW0+U0k8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdAorCSAqIHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOyBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2UKKwkgKiB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5LiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TSQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVTSUFkYXB0ZXIoKSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlNJTGFiZWwgPGVtPlNJIExhYmVsPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQKKwkgKiB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsgaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlCisJICogd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU0lMYWJlbAorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVTSUxhYmVsQWRhcHRlcigpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU0lMYWJlbFZhbHVlIDxlbT5TSSBMYWJlbCBWYWx1ZTwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0CisJICogd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7IGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZQorCSAqIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlNJTGFiZWxWYWx1ZQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVTSUxhYmVsVmFsdWVBZGFwdGVyKCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5JbmZlY3RvciA8ZW0+SW5mZWN0b3I8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdAorCSAqIHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOyBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2UKKwkgKiB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5LiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5JbmZlY3RvcgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVJbmZlY3RvckFkYXB0ZXIoKSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlNJSW5mZWN0b3IgPGVtPlNJIEluZmVjdG9yPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQKKwkgKiB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsgaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlCisJICogd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU0lJbmZlY3RvcgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVTSUluZmVjdG9yQWRhcHRlcigpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuRGV0ZXJtaW5pc3RpY1NJUkRpc2Vhc2VNb2RlbCA8ZW0+RGV0ZXJtaW5pc3RpYyBTSVIgRGlzZWFzZSBNb2RlbDwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0CisJICogd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7IGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZQorCSAqIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLkRldGVybWluaXN0aWNTSVJEaXNlYXNlTW9kZWwKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlRGV0ZXJtaW5pc3RpY1NJUkRpc2Vhc2VNb2RlbEFkYXB0ZXIoKSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLkRldGVybWluaXN0aWNTSURpc2Vhc2VNb2RlbCA8ZW0+RGV0ZXJtaW5pc3RpYyBTSSBEaXNlYXNlIE1vZGVsPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQKKwkgKiB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsgaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlCisJICogd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuRGV0ZXJtaW5pc3RpY1NJRGlzZWFzZU1vZGVsCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZURldGVybWluaXN0aWNTSURpc2Vhc2VNb2RlbEFkYXB0ZXIoKSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlN0b2NoYXN0aWNTSVJEaXNlYXNlTW9kZWwgPGVtPlN0b2NoYXN0aWMgU0lSIERpc2Vhc2UgTW9kZWw8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdAorCSAqIHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOyBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2UKKwkgKiB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5LiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdG9jaGFzdGljU0lSRGlzZWFzZU1vZGVsCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZVN0b2NoYXN0aWNTSVJEaXNlYXNlTW9kZWxBZGFwdGVyKCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdG9jaGFzdGljU0lEaXNlYXNlTW9kZWwgPGVtPlN0b2NoYXN0aWMgU0kgRGlzZWFzZSBNb2RlbDwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7CisJICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RvY2hhc3RpY1NJRGlzZWFzZU1vZGVsCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZVN0b2NoYXN0aWNTSURpc2Vhc2VNb2RlbEFkYXB0ZXIoKSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5TYW5pdHlDaGVja2VyIDxlbT5TYW5pdHkgQ2hlY2tlcjwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7CisJICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLlNhbml0eUNoZWNrZXIKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlU2FuaXR5Q2hlY2tlckFkYXB0ZXIoKSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkludGVncmF0aW9uTGFiZWwgPGVtPkludGVncmF0aW9uIExhYmVsPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsKKwkgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5JbnRlZ3JhdGlvbkxhYmVsCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZUludGVncmF0aW9uTGFiZWxBZGFwdGVyKCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5JbnRlZ3JhdGlvbkxhYmVsVmFsdWUgPGVtPkludGVncmF0aW9uIExhYmVsIFZhbHVlPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsKKwkgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5JbnRlZ3JhdGlvbkxhYmVsVmFsdWUKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlSW50ZWdyYXRpb25MYWJlbFZhbHVlQWRhcHRlcigpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuSW50ZWdyYXRpb25EZWNvcmF0b3IgPGVtPkludGVncmF0aW9uIERlY29yYXRvcjwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7CisJICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuSW50ZWdyYXRpb25EZWNvcmF0b3IKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlSW50ZWdyYXRpb25EZWNvcmF0b3JBZGFwdGVyKCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdG9jaGFzdGljRGlzZWFzZU1vZGVsIDxlbT5TdG9jaGFzdGljIERpc2Vhc2UgTW9kZWw8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOworCSAqIGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZSB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5LgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlN0b2NoYXN0aWNEaXNlYXNlTW9kZWwKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlU3RvY2hhc3RpY0Rpc2Vhc2VNb2RlbEFkYXB0ZXIoKSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkU3RvY2hhc3RpY0Rpc2Vhc2VNb2RlbCA8ZW0+U3RvY2hhc3RpYyBEaXNlYXNlIE1vZGVsPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsKKwkgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZFN0b2NoYXN0aWNEaXNlYXNlTW9kZWwKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlU3RhbmRhcmRTdG9jaGFzdGljRGlzZWFzZU1vZGVsQWRhcHRlcigpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU0lSSW5vY3VsYXRvciA8ZW0+U0lSIElub2N1bGF0b3I8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOworCSAqIGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZSB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5LgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlNJUklub2N1bGF0b3IKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlU0lSSW5vY3VsYXRvckFkYXB0ZXIoKSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlN0b2NoYXN0aWNQb2lzc29uU0lEaXNlYXNlTW9kZWwgPGVtPlN0b2NoYXN0aWMgUG9pc3NvbiBTSSBEaXNlYXNlIE1vZGVsPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsKKwkgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdG9jaGFzdGljUG9pc3NvblNJRGlzZWFzZU1vZGVsCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZVN0b2NoYXN0aWNQb2lzc29uU0lEaXNlYXNlTW9kZWxBZGFwdGVyKCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdG9jaGFzdGljUG9pc3NvblNJUkRpc2Vhc2VNb2RlbCA8ZW0+U3RvY2hhc3RpYyBQb2lzc29uIFNJUiBEaXNlYXNlIE1vZGVsPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsKKwkgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdG9jaGFzdGljUG9pc3NvblNJUkRpc2Vhc2VNb2RlbAorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVTdG9jaGFzdGljUG9pc3NvblNJUkRpc2Vhc2VNb2RlbEFkYXB0ZXIoKSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlN0b2NoYXN0aWNQb2lzc29uU0VJUkRpc2Vhc2VNb2RlbCA8ZW0+U3RvY2hhc3RpYyBQb2lzc29uIFNFSVIgRGlzZWFzZSBNb2RlbDwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7CisJICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RvY2hhc3RpY1BvaXNzb25TRUlSRGlzZWFzZU1vZGVsCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZVN0b2NoYXN0aWNQb2lzc29uU0VJUkRpc2Vhc2VNb2RlbEFkYXB0ZXIoKSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLkluZmVjdG9ySW5vY3VsYXRvckNvbGxlY3Rpb24gPGVtPkluZmVjdG9yIElub2N1bGF0b3IgQ29sbGVjdGlvbjwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7CisJICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuSW5mZWN0b3JJbm9jdWxhdG9yQ29sbGVjdGlvbgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVJbmZlY3Rvcklub2N1bGF0b3JDb2xsZWN0aW9uQWRhcHRlcigpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuSW5pdGlhbGl6ZXIgPGVtPkluaXRpYWxpemVyPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsKKwkgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5Jbml0aWFsaXplcgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVJbml0aWFsaXplckFkYXB0ZXIoKSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgamF2YS5sYW5nLkNvbXBhcmFibGUgPGVtPkNvbXBhcmFibGU8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOworCSAqIGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZSB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5LgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgorCSAqIEBzZWUgamF2YS5sYW5nLkNvbXBhcmFibGUKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlQ29tcGFyYWJsZUFkYXB0ZXIoKSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5JZGVudGlmaWFibGUgPGVtPklkZW50aWZpYWJsZTwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0CisJICogd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7IGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZQorCSAqIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5JZGVudGlmaWFibGUKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlSWRlbnRpZmlhYmxlQWRhcHRlcigpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuRGVjb3JhdG9yIDxlbT5EZWNvcmF0b3I8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdAorCSAqIHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOyBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2UKKwkgKiB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5LiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5EZWNvcmF0b3IKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlRGVjb3JhdG9yQWRhcHRlcigpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuTm9kZURlY29yYXRvciA8ZW0+Tm9kZSBEZWNvcmF0b3I8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdAorCSAqIHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOyBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2UKKwkgKiB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5LiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5Ob2RlRGVjb3JhdG9yCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZU5vZGVEZWNvcmF0b3JBZGFwdGVyKCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5Nb2RpZmlhYmxlIDxlbT5Nb2RpZmlhYmxlPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsKKwkgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5Nb2RpZmlhYmxlCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZU1vZGlmaWFibGVBZGFwdGVyKCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5MYWJlbCA8ZW0+TGFiZWw8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdAorCSAqIHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOyBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2UKKwkgKiB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5LiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5MYWJlbAorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVMYWJlbEFkYXB0ZXIoKSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkR5bmFtaWNMYWJlbCA8ZW0+RHluYW1pYyBMYWJlbDwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0CisJICogd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7IGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZQorCSAqIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkR5bmFtaWNMYWJlbAorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVEeW5hbWljTGFiZWxBZGFwdGVyKCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5Ob2RlTGFiZWwgPGVtPk5vZGUgTGFiZWw8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdAorCSAqIHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOyBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2UKKwkgKiB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5LiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5Ob2RlTGFiZWwKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlTm9kZUxhYmVsQWRhcHRlcigpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguRHluYW1pY05vZGVMYWJlbCA8ZW0+RHluYW1pYyBOb2RlIExhYmVsPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQKKwkgKiB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsgaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlCisJICogd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguRHluYW1pY05vZGVMYWJlbAorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVEeW5hbWljTm9kZUxhYmVsQWRhcHRlcigpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguTGFiZWxWYWx1ZSA8ZW0+TGFiZWwgVmFsdWU8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdAorCSAqIHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOyBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2UKKwkgKiB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5LiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5MYWJlbFZhbHVlCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZUxhYmVsVmFsdWVBZGFwdGVyKCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIHRoZSBkZWZhdWx0IGNhc2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gVGhpcworCSAqIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsLiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlRU9iamVjdEFkYXB0ZXIoKSB7CisJCXJldHVybiBudWxsOworCX0KKworfSAvLyBTdGFuZGFyZEFkYXB0ZXJGYWN0b3J5CmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3N0YW5kYXJkL3V0aWwvU3RhbmRhcmRTd2l0Y2guamF2YSBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvc3RhbmRhcmQvdXRpbC9TdGFuZGFyZFN3aXRjaC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNlN2Q2YzIKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3N0YW5kYXJkL3V0aWwvU3RhbmRhcmRTd2l0Y2guamF2YQpAQCAtMCwwICsxLDEyNjEgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLnV0aWw7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uSWRlbnRpZmlhYmxlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uU2FuaXR5Q2hlY2tlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguRHluYW1pY0xhYmVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5EeW5hbWljTm9kZUxhYmVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5JbnRlZ3JhdGlvbkxhYmVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5JbnRlZ3JhdGlvbkxhYmVsVmFsdWU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkxhYmVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5MYWJlbFZhbHVlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5Ob2RlTGFiZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLkRlY29yYXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuSW50ZWdyYXRpb25EZWNvcmF0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLk5vZGVEZWNvcmF0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLk1vZGlmaWFibGU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLio7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLkRldGVybWluaXN0aWNTRUlSRGlzZWFzZU1vZGVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5EZXRlcm1pbmlzdGljU0lEaXNlYXNlTW9kZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLkRldGVybWluaXN0aWNTSVJEaXNlYXNlTW9kZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLkRpc2Vhc2VNb2RlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuRGlzZWFzZU1vZGVsTGFiZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLkRpc2Vhc2VNb2RlbExhYmVsVmFsdWU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLkluZmVjdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5JbmZlY3Rvcklub2N1bGF0b3JDb2xsZWN0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TRUlSOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TRUlSTGFiZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlNFSVJMYWJlbFZhbHVlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TSTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU0lJbmZlY3RvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU0lMYWJlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU0lMYWJlbFZhbHVlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TSVI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlNJUklub2N1bGF0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlNJUkxhYmVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TSVJMYWJlbFZhbHVlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZERpc2Vhc2VNb2RlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbFZhbHVlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZEluZmVjdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZFBhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkU3RvY2hhc3RpY0Rpc2Vhc2VNb2RlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RvY2hhc3RpY0Rpc2Vhc2VNb2RlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RvY2hhc3RpY1BvaXNzb25TRUlSRGlzZWFzZU1vZGVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdG9jaGFzdGljUG9pc3NvblNJRGlzZWFzZU1vZGVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdG9jaGFzdGljUG9pc3NvblNJUkRpc2Vhc2VNb2RlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RvY2hhc3RpY1NFSVJEaXNlYXNlTW9kZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlN0b2NoYXN0aWNTSURpc2Vhc2VNb2RlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RvY2hhc3RpY1NJUkRpc2Vhc2VNb2RlbDsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiBUaGUgPGI+U3dpdGNoPC9iPiBmb3IgdGhlIG1vZGVsJ3MgaW5oZXJpdGFuY2UKKyAqIGhpZXJhcmNoeS4gSXQgc3VwcG9ydHMgdGhlIGNhbGwge0BsaW5rICNkb1N3aXRjaChFT2JqZWN0KSBkb1N3aXRjaChvYmplY3QpfQorICogdG8gaW52b2tlIHRoZSA8Y29kZT5jYXNlWFhYPC9jb2RlPiBtZXRob2QgZm9yIGVhY2ggY2xhc3Mgb2YgdGhlIG1vZGVsLAorICogc3RhcnRpbmcgd2l0aCB0aGUgYWN0dWFsIGNsYXNzIG9mIHRoZSBvYmplY3QgYW5kIHByb2NlZWRpbmcgdXAgdGhlCisgKiBpbmhlcml0YW5jZSBoaWVyYXJjaHkgdW50aWwgYSBub24tbnVsbCByZXN1bHQgaXMgcmV0dXJuZWQsIHdoaWNoIGlzIHRoZQorICogcmVzdWx0IG9mIHRoZSBzd2l0Y2guIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmRQYWNrYWdlCisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBTdGFuZGFyZFN3aXRjaDxUMT4geworCS8qKgorCSAqIFRoZSBjYWNoZWQgbW9kZWwgcGFja2FnZQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgc3RhdGljIFN0YW5kYXJkUGFja2FnZSBtb2RlbFBhY2thZ2U7CisKKwkvKioKKwkgKiBDcmVhdGVzIGFuIGluc3RhbmNlIG9mIHRoZSBzd2l0Y2guCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLQorCSAqIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFN0YW5kYXJkU3dpdGNoKCkgeworCQlpZiAobW9kZWxQYWNrYWdlID09IG51bGwpIHsKKwkJCW1vZGVsUGFja2FnZSA9IFN0YW5kYXJkUGFja2FnZS5lSU5TVEFOQ0U7CisJCX0KKwl9CisKKwkvKioKKwkgKiBDYWxscyA8Y29kZT5jYXNlWFhYPC9jb2RlPiBmb3IgZWFjaCBjbGFzcyBvZiB0aGUgbW9kZWwgdW50aWwgb25lIHJldHVybnMgYSBub24gbnVsbCByZXN1bHQ7IGl0IHlpZWxkcyB0aGF0IHJlc3VsdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBwYXJhbSB0aGVFT2JqZWN0CisJICogCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgZmlyc3Qgbm9uLW51bGwgcmVzdWx0IHJldHVybmVkIGJ5IGEgPGNvZGU+Y2FzZVhYWDwvY29kZT4gY2FsbC4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFQxIGRvU3dpdGNoKEVPYmplY3QgdGhlRU9iamVjdCkgeworCQlyZXR1cm4gZG9Td2l0Y2godGhlRU9iamVjdC5lQ2xhc3MoKSwgdGhlRU9iamVjdCk7CisJfQorCisJLyoqCisJICogQ2FsbHMgPGNvZGU+Y2FzZVhYWDwvY29kZT4gZm9yIGVhY2ggY2xhc3Mgb2YgdGhlIG1vZGVsIHVudGlsIG9uZSByZXR1cm5zIGEgbm9uIG51bGwgcmVzdWx0OyBpdCB5aWVsZHMgdGhhdCByZXN1bHQuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBmaXJzdCBub24tbnVsbCByZXN1bHQgcmV0dXJuZWQgYnkgYSA8Y29kZT5jYXNlWFhYPC9jb2RlPiBjYWxsLgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgVDEgZG9Td2l0Y2goRUNsYXNzIHRoZUVDbGFzcywgRU9iamVjdCB0aGVFT2JqZWN0KSB7CisJCWlmICh0aGVFQ2xhc3MuZUNvbnRhaW5lcigpID09IG1vZGVsUGFja2FnZSkgeworCQkJcmV0dXJuIGRvU3dpdGNoKHRoZUVDbGFzcy5nZXRDbGFzc2lmaWVySUQoKSwgdGhlRU9iamVjdCk7CisJCX0KKwkJZWxzZSB7CisJCQlMaXN0PEVDbGFzcz4gZVN1cGVyVHlwZXMgPSB0aGVFQ2xhc3MuZ2V0RVN1cGVyVHlwZXMoKTsKKwkJCXJldHVybgorCQkJCWVTdXBlclR5cGVzLmlzRW1wdHkoKSA/CisJCQkJCWRlZmF1bHRDYXNlKHRoZUVPYmplY3QpIDoKKwkJCQkJZG9Td2l0Y2goZVN1cGVyVHlwZXMuZ2V0KDApLCB0aGVFT2JqZWN0KTsKKwkJfQorCX0KKworCS8qKgorCSAqIENhbGxzIDxjb2RlPmNhc2VYWFg8L2NvZGU+IGZvciBlYWNoIGNsYXNzIG9mIHRoZSBtb2RlbCB1bnRpbCBvbmUgcmV0dXJucyBhIG5vbiBudWxsIHJlc3VsdDsgaXQgeWllbGRzIHRoYXQgcmVzdWx0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgZmlyc3Qgbm9uLW51bGwgcmVzdWx0IHJldHVybmVkIGJ5IGEgPGNvZGU+Y2FzZVhYWDwvY29kZT4gY2FsbC4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIFQxIGRvU3dpdGNoKGludCBjbGFzc2lmaWVySUQsIEVPYmplY3QgdGhlRU9iamVjdCkgeworCQlzd2l0Y2ggKGNsYXNzaWZpZXJJRCkgeworCQkJY2FzZSBTdGFuZGFyZFBhY2thZ2UuREVURVJNSU5JU1RJQ19TRUlSX0RJU0VBU0VfTU9ERUw6IHsKKwkJCQlEZXRlcm1pbmlzdGljU0VJUkRpc2Vhc2VNb2RlbCBkZXRlcm1pbmlzdGljU0VJUkRpc2Vhc2VNb2RlbCA9IChEZXRlcm1pbmlzdGljU0VJUkRpc2Vhc2VNb2RlbCl0aGVFT2JqZWN0OworCQkJCVQxIHJlc3VsdCA9IGNhc2VEZXRlcm1pbmlzdGljU0VJUkRpc2Vhc2VNb2RlbChkZXRlcm1pbmlzdGljU0VJUkRpc2Vhc2VNb2RlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlU0VJUihkZXRlcm1pbmlzdGljU0VJUkRpc2Vhc2VNb2RlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlU0lSKGRldGVybWluaXN0aWNTRUlSRGlzZWFzZU1vZGVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VTSShkZXRlcm1pbmlzdGljU0VJUkRpc2Vhc2VNb2RlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlU3RhbmRhcmREaXNlYXNlTW9kZWwoZGV0ZXJtaW5pc3RpY1NFSVJEaXNlYXNlTW9kZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZURpc2Vhc2VNb2RlbChkZXRlcm1pbmlzdGljU0VJUkRpc2Vhc2VNb2RlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlSW50ZWdyYXRpb25EZWNvcmF0b3IoZGV0ZXJtaW5pc3RpY1NFSVJEaXNlYXNlTW9kZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZU1vZGlmaWFibGUoZGV0ZXJtaW5pc3RpY1NFSVJEaXNlYXNlTW9kZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZU5vZGVEZWNvcmF0b3IoZGV0ZXJtaW5pc3RpY1NFSVJEaXNlYXNlTW9kZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZURlY29yYXRvcihkZXRlcm1pbmlzdGljU0VJUkRpc2Vhc2VNb2RlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlSWRlbnRpZmlhYmxlKGRldGVybWluaXN0aWNTRUlSRGlzZWFzZU1vZGVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VDb21wYXJhYmxlKGRldGVybWluaXN0aWNTRUlSRGlzZWFzZU1vZGVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VTYW5pdHlDaGVja2VyKGRldGVybWluaXN0aWNTRUlSRGlzZWFzZU1vZGVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGRlZmF1bHRDYXNlKHRoZUVPYmplY3QpOworCQkJCXJldHVybiByZXN1bHQ7CisJCQl9CisJCQljYXNlIFN0YW5kYXJkUGFja2FnZS5ERVRFUk1JTklTVElDX1NJX0RJU0VBU0VfTU9ERUw6IHsKKwkJCQlEZXRlcm1pbmlzdGljU0lEaXNlYXNlTW9kZWwgZGV0ZXJtaW5pc3RpY1NJRGlzZWFzZU1vZGVsID0gKERldGVybWluaXN0aWNTSURpc2Vhc2VNb2RlbCl0aGVFT2JqZWN0OworCQkJCVQxIHJlc3VsdCA9IGNhc2VEZXRlcm1pbmlzdGljU0lEaXNlYXNlTW9kZWwoZGV0ZXJtaW5pc3RpY1NJRGlzZWFzZU1vZGVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VTSShkZXRlcm1pbmlzdGljU0lEaXNlYXNlTW9kZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZVN0YW5kYXJkRGlzZWFzZU1vZGVsKGRldGVybWluaXN0aWNTSURpc2Vhc2VNb2RlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlRGlzZWFzZU1vZGVsKGRldGVybWluaXN0aWNTSURpc2Vhc2VNb2RlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlSW50ZWdyYXRpb25EZWNvcmF0b3IoZGV0ZXJtaW5pc3RpY1NJRGlzZWFzZU1vZGVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VNb2RpZmlhYmxlKGRldGVybWluaXN0aWNTSURpc2Vhc2VNb2RlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlTm9kZURlY29yYXRvcihkZXRlcm1pbmlzdGljU0lEaXNlYXNlTW9kZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZURlY29yYXRvcihkZXRlcm1pbmlzdGljU0lEaXNlYXNlTW9kZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZUlkZW50aWZpYWJsZShkZXRlcm1pbmlzdGljU0lEaXNlYXNlTW9kZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZUNvbXBhcmFibGUoZGV0ZXJtaW5pc3RpY1NJRGlzZWFzZU1vZGVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VTYW5pdHlDaGVja2VyKGRldGVybWluaXN0aWNTSURpc2Vhc2VNb2RlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBkZWZhdWx0Q2FzZSh0aGVFT2JqZWN0KTsKKwkJCQlyZXR1cm4gcmVzdWx0OworCQkJfQorCQkJY2FzZSBTdGFuZGFyZFBhY2thZ2UuREVURVJNSU5JU1RJQ19TSVJfRElTRUFTRV9NT0RFTDogeworCQkJCURldGVybWluaXN0aWNTSVJEaXNlYXNlTW9kZWwgZGV0ZXJtaW5pc3RpY1NJUkRpc2Vhc2VNb2RlbCA9IChEZXRlcm1pbmlzdGljU0lSRGlzZWFzZU1vZGVsKXRoZUVPYmplY3Q7CisJCQkJVDEgcmVzdWx0ID0gY2FzZURldGVybWluaXN0aWNTSVJEaXNlYXNlTW9kZWwoZGV0ZXJtaW5pc3RpY1NJUkRpc2Vhc2VNb2RlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlU0lSKGRldGVybWluaXN0aWNTSVJEaXNlYXNlTW9kZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZVNJKGRldGVybWluaXN0aWNTSVJEaXNlYXNlTW9kZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZVN0YW5kYXJkRGlzZWFzZU1vZGVsKGRldGVybWluaXN0aWNTSVJEaXNlYXNlTW9kZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZURpc2Vhc2VNb2RlbChkZXRlcm1pbmlzdGljU0lSRGlzZWFzZU1vZGVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VJbnRlZ3JhdGlvbkRlY29yYXRvcihkZXRlcm1pbmlzdGljU0lSRGlzZWFzZU1vZGVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VNb2RpZmlhYmxlKGRldGVybWluaXN0aWNTSVJEaXNlYXNlTW9kZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZU5vZGVEZWNvcmF0b3IoZGV0ZXJtaW5pc3RpY1NJUkRpc2Vhc2VNb2RlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlRGVjb3JhdG9yKGRldGVybWluaXN0aWNTSVJEaXNlYXNlTW9kZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZUlkZW50aWZpYWJsZShkZXRlcm1pbmlzdGljU0lSRGlzZWFzZU1vZGVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VDb21wYXJhYmxlKGRldGVybWluaXN0aWNTSVJEaXNlYXNlTW9kZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZVNhbml0eUNoZWNrZXIoZGV0ZXJtaW5pc3RpY1NJUkRpc2Vhc2VNb2RlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBkZWZhdWx0Q2FzZSh0aGVFT2JqZWN0KTsKKwkJCQlyZXR1cm4gcmVzdWx0OworCQkJfQorCQkJY2FzZSBTdGFuZGFyZFBhY2thZ2UuRElTRUFTRV9NT0RFTDogeworCQkJCURpc2Vhc2VNb2RlbCBkaXNlYXNlTW9kZWwgPSAoRGlzZWFzZU1vZGVsKXRoZUVPYmplY3Q7CisJCQkJVDEgcmVzdWx0ID0gY2FzZURpc2Vhc2VNb2RlbChkaXNlYXNlTW9kZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZUludGVncmF0aW9uRGVjb3JhdG9yKGRpc2Vhc2VNb2RlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlTW9kaWZpYWJsZShkaXNlYXNlTW9kZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZU5vZGVEZWNvcmF0b3IoZGlzZWFzZU1vZGVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VEZWNvcmF0b3IoZGlzZWFzZU1vZGVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VJZGVudGlmaWFibGUoZGlzZWFzZU1vZGVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VDb21wYXJhYmxlKGRpc2Vhc2VNb2RlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlU2FuaXR5Q2hlY2tlcihkaXNlYXNlTW9kZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gZGVmYXVsdENhc2UodGhlRU9iamVjdCk7CisJCQkJcmV0dXJuIHJlc3VsdDsKKwkJCX0KKwkJCWNhc2UgU3RhbmRhcmRQYWNrYWdlLkRJU0VBU0VfTU9ERUxfTEFCRUw6IHsKKwkJCQlEaXNlYXNlTW9kZWxMYWJlbCBkaXNlYXNlTW9kZWxMYWJlbCA9IChEaXNlYXNlTW9kZWxMYWJlbCl0aGVFT2JqZWN0OworCQkJCVQxIHJlc3VsdCA9IGNhc2VEaXNlYXNlTW9kZWxMYWJlbChkaXNlYXNlTW9kZWxMYWJlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlSW50ZWdyYXRpb25MYWJlbChkaXNlYXNlTW9kZWxMYWJlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlRHluYW1pY05vZGVMYWJlbChkaXNlYXNlTW9kZWxMYWJlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlRHluYW1pY0xhYmVsKGRpc2Vhc2VNb2RlbExhYmVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VOb2RlTGFiZWwoZGlzZWFzZU1vZGVsTGFiZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZUxhYmVsKGRpc2Vhc2VNb2RlbExhYmVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VJZGVudGlmaWFibGUoZGlzZWFzZU1vZGVsTGFiZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZUNvbXBhcmFibGUoZGlzZWFzZU1vZGVsTGFiZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZVNhbml0eUNoZWNrZXIoZGlzZWFzZU1vZGVsTGFiZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gZGVmYXVsdENhc2UodGhlRU9iamVjdCk7CisJCQkJcmV0dXJuIHJlc3VsdDsKKwkJCX0KKwkJCWNhc2UgU3RhbmRhcmRQYWNrYWdlLkRJU0VBU0VfTU9ERUxfTEFCRUxfVkFMVUU6IHsKKwkJCQlEaXNlYXNlTW9kZWxMYWJlbFZhbHVlIGRpc2Vhc2VNb2RlbExhYmVsVmFsdWUgPSAoRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZSl0aGVFT2JqZWN0OworCQkJCVQxIHJlc3VsdCA9IGNhc2VEaXNlYXNlTW9kZWxMYWJlbFZhbHVlKGRpc2Vhc2VNb2RlbExhYmVsVmFsdWUpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZUludGVncmF0aW9uTGFiZWxWYWx1ZShkaXNlYXNlTW9kZWxMYWJlbFZhbHVlKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VMYWJlbFZhbHVlKGRpc2Vhc2VNb2RlbExhYmVsVmFsdWUpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZVNhbml0eUNoZWNrZXIoZGlzZWFzZU1vZGVsTGFiZWxWYWx1ZSk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBkZWZhdWx0Q2FzZSh0aGVFT2JqZWN0KTsKKwkJCQlyZXR1cm4gcmVzdWx0OworCQkJfQorCQkJY2FzZSBTdGFuZGFyZFBhY2thZ2UuSU5GRUNUT1I6IHsKKwkJCQlJbmZlY3RvciBpbmZlY3RvciA9IChJbmZlY3Rvcil0aGVFT2JqZWN0OworCQkJCVQxIHJlc3VsdCA9IGNhc2VJbmZlY3RvcihpbmZlY3Rvcik7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlTm9kZURlY29yYXRvcihpbmZlY3Rvcik7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlTW9kaWZpYWJsZShpbmZlY3Rvcik7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlRGVjb3JhdG9yKGluZmVjdG9yKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VJZGVudGlmaWFibGUoaW5mZWN0b3IpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZUNvbXBhcmFibGUoaW5mZWN0b3IpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZVNhbml0eUNoZWNrZXIoaW5mZWN0b3IpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gZGVmYXVsdENhc2UodGhlRU9iamVjdCk7CisJCQkJcmV0dXJuIHJlc3VsdDsKKwkJCX0KKwkJCWNhc2UgU3RhbmRhcmRQYWNrYWdlLlNFSVI6IHsKKwkJCQlTRUlSIHNlaXIgPSAoU0VJUil0aGVFT2JqZWN0OworCQkJCVQxIHJlc3VsdCA9IGNhc2VTRUlSKHNlaXIpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZVNJUihzZWlyKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VTSShzZWlyKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VTdGFuZGFyZERpc2Vhc2VNb2RlbChzZWlyKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VEaXNlYXNlTW9kZWwoc2Vpcik7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlSW50ZWdyYXRpb25EZWNvcmF0b3Ioc2Vpcik7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlTW9kaWZpYWJsZShzZWlyKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VOb2RlRGVjb3JhdG9yKHNlaXIpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZURlY29yYXRvcihzZWlyKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VJZGVudGlmaWFibGUoc2Vpcik7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlQ29tcGFyYWJsZShzZWlyKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VTYW5pdHlDaGVja2VyKHNlaXIpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gZGVmYXVsdENhc2UodGhlRU9iamVjdCk7CisJCQkJcmV0dXJuIHJlc3VsdDsKKwkJCX0KKwkJCWNhc2UgU3RhbmRhcmRQYWNrYWdlLlNFSVJfTEFCRUw6IHsKKwkJCQlTRUlSTGFiZWwgc2VpckxhYmVsID0gKFNFSVJMYWJlbCl0aGVFT2JqZWN0OworCQkJCVQxIHJlc3VsdCA9IGNhc2VTRUlSTGFiZWwoc2VpckxhYmVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VTdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsKHNlaXJMYWJlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlRGlzZWFzZU1vZGVsTGFiZWwoc2VpckxhYmVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VJbnRlZ3JhdGlvbkxhYmVsKHNlaXJMYWJlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlRHluYW1pY05vZGVMYWJlbChzZWlyTGFiZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZUR5bmFtaWNMYWJlbChzZWlyTGFiZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZU5vZGVMYWJlbChzZWlyTGFiZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZUxhYmVsKHNlaXJMYWJlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlSWRlbnRpZmlhYmxlKHNlaXJMYWJlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlQ29tcGFyYWJsZShzZWlyTGFiZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZVNhbml0eUNoZWNrZXIoc2VpckxhYmVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGRlZmF1bHRDYXNlKHRoZUVPYmplY3QpOworCQkJCXJldHVybiByZXN1bHQ7CisJCQl9CisJCQljYXNlIFN0YW5kYXJkUGFja2FnZS5TRUlSX0xBQkVMX1ZBTFVFOiB7CisJCQkJU0VJUkxhYmVsVmFsdWUgc2VpckxhYmVsVmFsdWUgPSAoU0VJUkxhYmVsVmFsdWUpdGhlRU9iamVjdDsKKwkJCQlUMSByZXN1bHQgPSBjYXNlU0VJUkxhYmVsVmFsdWUoc2VpckxhYmVsVmFsdWUpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZVNJUkxhYmVsVmFsdWUoc2VpckxhYmVsVmFsdWUpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZVNJTGFiZWxWYWx1ZShzZWlyTGFiZWxWYWx1ZSk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbFZhbHVlKHNlaXJMYWJlbFZhbHVlKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VEaXNlYXNlTW9kZWxMYWJlbFZhbHVlKHNlaXJMYWJlbFZhbHVlKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VJbnRlZ3JhdGlvbkxhYmVsVmFsdWUoc2VpckxhYmVsVmFsdWUpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZUxhYmVsVmFsdWUoc2VpckxhYmVsVmFsdWUpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZVNhbml0eUNoZWNrZXIoc2VpckxhYmVsVmFsdWUpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gZGVmYXVsdENhc2UodGhlRU9iamVjdCk7CisJCQkJcmV0dXJuIHJlc3VsdDsKKwkJCX0KKwkJCWNhc2UgU3RhbmRhcmRQYWNrYWdlLlNJOiB7CisJCQkJU0kgc2kgPSAoU0kpdGhlRU9iamVjdDsKKwkJCQlUMSByZXN1bHQgPSBjYXNlU0koc2kpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZVN0YW5kYXJkRGlzZWFzZU1vZGVsKHNpKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VEaXNlYXNlTW9kZWwoc2kpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZUludGVncmF0aW9uRGVjb3JhdG9yKHNpKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VNb2RpZmlhYmxlKHNpKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VOb2RlRGVjb3JhdG9yKHNpKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VEZWNvcmF0b3Ioc2kpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZUlkZW50aWZpYWJsZShzaSk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlQ29tcGFyYWJsZShzaSk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlU2FuaXR5Q2hlY2tlcihzaSk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBkZWZhdWx0Q2FzZSh0aGVFT2JqZWN0KTsKKwkJCQlyZXR1cm4gcmVzdWx0OworCQkJfQorCQkJY2FzZSBTdGFuZGFyZFBhY2thZ2UuU0lfSU5GRUNUT1I6IHsKKwkJCQlTSUluZmVjdG9yIHNpSW5mZWN0b3IgPSAoU0lJbmZlY3Rvcil0aGVFT2JqZWN0OworCQkJCVQxIHJlc3VsdCA9IGNhc2VTSUluZmVjdG9yKHNpSW5mZWN0b3IpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZVN0YW5kYXJkSW5mZWN0b3Ioc2lJbmZlY3Rvcik7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlSW5mZWN0b3Ioc2lJbmZlY3Rvcik7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlTm9kZURlY29yYXRvcihzaUluZmVjdG9yKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VNb2RpZmlhYmxlKHNpSW5mZWN0b3IpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZURlY29yYXRvcihzaUluZmVjdG9yKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VJZGVudGlmaWFibGUoc2lJbmZlY3Rvcik7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlQ29tcGFyYWJsZShzaUluZmVjdG9yKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VTYW5pdHlDaGVja2VyKHNpSW5mZWN0b3IpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gZGVmYXVsdENhc2UodGhlRU9iamVjdCk7CisJCQkJcmV0dXJuIHJlc3VsdDsKKwkJCX0KKwkJCWNhc2UgU3RhbmRhcmRQYWNrYWdlLlNJX0xBQkVMOiB7CisJCQkJU0lMYWJlbCBzaUxhYmVsID0gKFNJTGFiZWwpdGhlRU9iamVjdDsKKwkJCQlUMSByZXN1bHQgPSBjYXNlU0lMYWJlbChzaUxhYmVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VTdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsKHNpTGFiZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZURpc2Vhc2VNb2RlbExhYmVsKHNpTGFiZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZUludGVncmF0aW9uTGFiZWwoc2lMYWJlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlRHluYW1pY05vZGVMYWJlbChzaUxhYmVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VEeW5hbWljTGFiZWwoc2lMYWJlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlTm9kZUxhYmVsKHNpTGFiZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZUxhYmVsKHNpTGFiZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZUlkZW50aWZpYWJsZShzaUxhYmVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VDb21wYXJhYmxlKHNpTGFiZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZVNhbml0eUNoZWNrZXIoc2lMYWJlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBkZWZhdWx0Q2FzZSh0aGVFT2JqZWN0KTsKKwkJCQlyZXR1cm4gcmVzdWx0OworCQkJfQorCQkJY2FzZSBTdGFuZGFyZFBhY2thZ2UuU0lfTEFCRUxfVkFMVUU6IHsKKwkJCQlTSUxhYmVsVmFsdWUgc2lMYWJlbFZhbHVlID0gKFNJTGFiZWxWYWx1ZSl0aGVFT2JqZWN0OworCQkJCVQxIHJlc3VsdCA9IGNhc2VTSUxhYmVsVmFsdWUoc2lMYWJlbFZhbHVlKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VTdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsVmFsdWUoc2lMYWJlbFZhbHVlKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VEaXNlYXNlTW9kZWxMYWJlbFZhbHVlKHNpTGFiZWxWYWx1ZSk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlSW50ZWdyYXRpb25MYWJlbFZhbHVlKHNpTGFiZWxWYWx1ZSk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlTGFiZWxWYWx1ZShzaUxhYmVsVmFsdWUpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZVNhbml0eUNoZWNrZXIoc2lMYWJlbFZhbHVlKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGRlZmF1bHRDYXNlKHRoZUVPYmplY3QpOworCQkJCXJldHVybiByZXN1bHQ7CisJCQl9CisJCQljYXNlIFN0YW5kYXJkUGFja2FnZS5TSVI6IHsKKwkJCQlTSVIgc2lyID0gKFNJUil0aGVFT2JqZWN0OworCQkJCVQxIHJlc3VsdCA9IGNhc2VTSVIoc2lyKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VTSShzaXIpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZVN0YW5kYXJkRGlzZWFzZU1vZGVsKHNpcik7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlRGlzZWFzZU1vZGVsKHNpcik7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlSW50ZWdyYXRpb25EZWNvcmF0b3Ioc2lyKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VNb2RpZmlhYmxlKHNpcik7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlTm9kZURlY29yYXRvcihzaXIpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZURlY29yYXRvcihzaXIpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZUlkZW50aWZpYWJsZShzaXIpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZUNvbXBhcmFibGUoc2lyKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VTYW5pdHlDaGVja2VyKHNpcik7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBkZWZhdWx0Q2FzZSh0aGVFT2JqZWN0KTsKKwkJCQlyZXR1cm4gcmVzdWx0OworCQkJfQorCQkJY2FzZSBTdGFuZGFyZFBhY2thZ2UuU0lSX0xBQkVMOiB7CisJCQkJU0lSTGFiZWwgc2lyTGFiZWwgPSAoU0lSTGFiZWwpdGhlRU9iamVjdDsKKwkJCQlUMSByZXN1bHQgPSBjYXNlU0lSTGFiZWwoc2lyTGFiZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZVN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWwoc2lyTGFiZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZURpc2Vhc2VNb2RlbExhYmVsKHNpckxhYmVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VJbnRlZ3JhdGlvbkxhYmVsKHNpckxhYmVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VEeW5hbWljTm9kZUxhYmVsKHNpckxhYmVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VEeW5hbWljTGFiZWwoc2lyTGFiZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZU5vZGVMYWJlbChzaXJMYWJlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlTGFiZWwoc2lyTGFiZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZUlkZW50aWZpYWJsZShzaXJMYWJlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlQ29tcGFyYWJsZShzaXJMYWJlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlU2FuaXR5Q2hlY2tlcihzaXJMYWJlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBkZWZhdWx0Q2FzZSh0aGVFT2JqZWN0KTsKKwkJCQlyZXR1cm4gcmVzdWx0OworCQkJfQorCQkJY2FzZSBTdGFuZGFyZFBhY2thZ2UuU0lSX0xBQkVMX1ZBTFVFOiB7CisJCQkJU0lSTGFiZWxWYWx1ZSBzaXJMYWJlbFZhbHVlID0gKFNJUkxhYmVsVmFsdWUpdGhlRU9iamVjdDsKKwkJCQlUMSByZXN1bHQgPSBjYXNlU0lSTGFiZWxWYWx1ZShzaXJMYWJlbFZhbHVlKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VTSUxhYmVsVmFsdWUoc2lyTGFiZWxWYWx1ZSk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbFZhbHVlKHNpckxhYmVsVmFsdWUpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZURpc2Vhc2VNb2RlbExhYmVsVmFsdWUoc2lyTGFiZWxWYWx1ZSk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlSW50ZWdyYXRpb25MYWJlbFZhbHVlKHNpckxhYmVsVmFsdWUpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZUxhYmVsVmFsdWUoc2lyTGFiZWxWYWx1ZSk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlU2FuaXR5Q2hlY2tlcihzaXJMYWJlbFZhbHVlKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGRlZmF1bHRDYXNlKHRoZUVPYmplY3QpOworCQkJCXJldHVybiByZXN1bHQ7CisJCQl9CisJCQljYXNlIFN0YW5kYXJkUGFja2FnZS5TVEFOREFSRF9ESVNFQVNFX01PREVMOiB7CisJCQkJU3RhbmRhcmREaXNlYXNlTW9kZWwgc3RhbmRhcmREaXNlYXNlTW9kZWwgPSAoU3RhbmRhcmREaXNlYXNlTW9kZWwpdGhlRU9iamVjdDsKKwkJCQlUMSByZXN1bHQgPSBjYXNlU3RhbmRhcmREaXNlYXNlTW9kZWwoc3RhbmRhcmREaXNlYXNlTW9kZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZURpc2Vhc2VNb2RlbChzdGFuZGFyZERpc2Vhc2VNb2RlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlSW50ZWdyYXRpb25EZWNvcmF0b3Ioc3RhbmRhcmREaXNlYXNlTW9kZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZU1vZGlmaWFibGUoc3RhbmRhcmREaXNlYXNlTW9kZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZU5vZGVEZWNvcmF0b3Ioc3RhbmRhcmREaXNlYXNlTW9kZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZURlY29yYXRvcihzdGFuZGFyZERpc2Vhc2VNb2RlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlSWRlbnRpZmlhYmxlKHN0YW5kYXJkRGlzZWFzZU1vZGVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VDb21wYXJhYmxlKHN0YW5kYXJkRGlzZWFzZU1vZGVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VTYW5pdHlDaGVja2VyKHN0YW5kYXJkRGlzZWFzZU1vZGVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGRlZmF1bHRDYXNlKHRoZUVPYmplY3QpOworCQkJCXJldHVybiByZXN1bHQ7CisJCQl9CisJCQljYXNlIFN0YW5kYXJkUGFja2FnZS5TVEFOREFSRF9ESVNFQVNFX01PREVMX0xBQkVMOiB7CisJCQkJU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbCBzdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsID0gKFN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWwpdGhlRU9iamVjdDsKKwkJCQlUMSByZXN1bHQgPSBjYXNlU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbChzdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VEaXNlYXNlTW9kZWxMYWJlbChzdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VJbnRlZ3JhdGlvbkxhYmVsKHN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZUR5bmFtaWNOb2RlTGFiZWwoc3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlRHluYW1pY0xhYmVsKHN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZU5vZGVMYWJlbChzdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VMYWJlbChzdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VJZGVudGlmaWFibGUoc3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlQ29tcGFyYWJsZShzdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VTYW5pdHlDaGVja2VyKHN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gZGVmYXVsdENhc2UodGhlRU9iamVjdCk7CisJCQkJcmV0dXJuIHJlc3VsdDsKKwkJCX0KKwkJCWNhc2UgU3RhbmRhcmRQYWNrYWdlLlNUQU5EQVJEX0RJU0VBU0VfTU9ERUxfTEFCRUxfVkFMVUU6IHsKKwkJCQlTdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsVmFsdWUgc3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbFZhbHVlID0gKFN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZSl0aGVFT2JqZWN0OworCQkJCVQxIHJlc3VsdCA9IGNhc2VTdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsVmFsdWUoc3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbFZhbHVlKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VEaXNlYXNlTW9kZWxMYWJlbFZhbHVlKHN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZSk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlSW50ZWdyYXRpb25MYWJlbFZhbHVlKHN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZSk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlTGFiZWxWYWx1ZShzdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsVmFsdWUpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZVNhbml0eUNoZWNrZXIoc3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbFZhbHVlKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGRlZmF1bHRDYXNlKHRoZUVPYmplY3QpOworCQkJCXJldHVybiByZXN1bHQ7CisJCQl9CisJCQljYXNlIFN0YW5kYXJkUGFja2FnZS5TVEFOREFSRF9JTkZFQ1RPUjogeworCQkJCVN0YW5kYXJkSW5mZWN0b3Igc3RhbmRhcmRJbmZlY3RvciA9IChTdGFuZGFyZEluZmVjdG9yKXRoZUVPYmplY3Q7CisJCQkJVDEgcmVzdWx0ID0gY2FzZVN0YW5kYXJkSW5mZWN0b3Ioc3RhbmRhcmRJbmZlY3Rvcik7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlSW5mZWN0b3Ioc3RhbmRhcmRJbmZlY3Rvcik7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlTm9kZURlY29yYXRvcihzdGFuZGFyZEluZmVjdG9yKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VNb2RpZmlhYmxlKHN0YW5kYXJkSW5mZWN0b3IpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZURlY29yYXRvcihzdGFuZGFyZEluZmVjdG9yKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VJZGVudGlmaWFibGUoc3RhbmRhcmRJbmZlY3Rvcik7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlQ29tcGFyYWJsZShzdGFuZGFyZEluZmVjdG9yKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VTYW5pdHlDaGVja2VyKHN0YW5kYXJkSW5mZWN0b3IpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gZGVmYXVsdENhc2UodGhlRU9iamVjdCk7CisJCQkJcmV0dXJuIHJlc3VsdDsKKwkJCX0KKwkJCWNhc2UgU3RhbmRhcmRQYWNrYWdlLlNUT0NIQVNUSUNfU0VJUl9ESVNFQVNFX01PREVMOiB7CisJCQkJU3RvY2hhc3RpY1NFSVJEaXNlYXNlTW9kZWwgc3RvY2hhc3RpY1NFSVJEaXNlYXNlTW9kZWwgPSAoU3RvY2hhc3RpY1NFSVJEaXNlYXNlTW9kZWwpdGhlRU9iamVjdDsKKwkJCQlUMSByZXN1bHQgPSBjYXNlU3RvY2hhc3RpY1NFSVJEaXNlYXNlTW9kZWwoc3RvY2hhc3RpY1NFSVJEaXNlYXNlTW9kZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZVNFSVIoc3RvY2hhc3RpY1NFSVJEaXNlYXNlTW9kZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZVN0YW5kYXJkU3RvY2hhc3RpY0Rpc2Vhc2VNb2RlbChzdG9jaGFzdGljU0VJUkRpc2Vhc2VNb2RlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlU0lSKHN0b2NoYXN0aWNTRUlSRGlzZWFzZU1vZGVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VTdG9jaGFzdGljRGlzZWFzZU1vZGVsKHN0b2NoYXN0aWNTRUlSRGlzZWFzZU1vZGVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VTSShzdG9jaGFzdGljU0VJUkRpc2Vhc2VNb2RlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlU3RhbmRhcmREaXNlYXNlTW9kZWwoc3RvY2hhc3RpY1NFSVJEaXNlYXNlTW9kZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZURpc2Vhc2VNb2RlbChzdG9jaGFzdGljU0VJUkRpc2Vhc2VNb2RlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlSW50ZWdyYXRpb25EZWNvcmF0b3Ioc3RvY2hhc3RpY1NFSVJEaXNlYXNlTW9kZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZU1vZGlmaWFibGUoc3RvY2hhc3RpY1NFSVJEaXNlYXNlTW9kZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZU5vZGVEZWNvcmF0b3Ioc3RvY2hhc3RpY1NFSVJEaXNlYXNlTW9kZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZURlY29yYXRvcihzdG9jaGFzdGljU0VJUkRpc2Vhc2VNb2RlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlSWRlbnRpZmlhYmxlKHN0b2NoYXN0aWNTRUlSRGlzZWFzZU1vZGVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VDb21wYXJhYmxlKHN0b2NoYXN0aWNTRUlSRGlzZWFzZU1vZGVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VTYW5pdHlDaGVja2VyKHN0b2NoYXN0aWNTRUlSRGlzZWFzZU1vZGVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGRlZmF1bHRDYXNlKHRoZUVPYmplY3QpOworCQkJCXJldHVybiByZXN1bHQ7CisJCQl9CisJCQljYXNlIFN0YW5kYXJkUGFja2FnZS5TVE9DSEFTVElDX1NJX0RJU0VBU0VfTU9ERUw6IHsKKwkJCQlTdG9jaGFzdGljU0lEaXNlYXNlTW9kZWwgc3RvY2hhc3RpY1NJRGlzZWFzZU1vZGVsID0gKFN0b2NoYXN0aWNTSURpc2Vhc2VNb2RlbCl0aGVFT2JqZWN0OworCQkJCVQxIHJlc3VsdCA9IGNhc2VTdG9jaGFzdGljU0lEaXNlYXNlTW9kZWwoc3RvY2hhc3RpY1NJRGlzZWFzZU1vZGVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VTSShzdG9jaGFzdGljU0lEaXNlYXNlTW9kZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZVN0YW5kYXJkU3RvY2hhc3RpY0Rpc2Vhc2VNb2RlbChzdG9jaGFzdGljU0lEaXNlYXNlTW9kZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZVN0YW5kYXJkRGlzZWFzZU1vZGVsKHN0b2NoYXN0aWNTSURpc2Vhc2VNb2RlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlU3RvY2hhc3RpY0Rpc2Vhc2VNb2RlbChzdG9jaGFzdGljU0lEaXNlYXNlTW9kZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZURpc2Vhc2VNb2RlbChzdG9jaGFzdGljU0lEaXNlYXNlTW9kZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZUludGVncmF0aW9uRGVjb3JhdG9yKHN0b2NoYXN0aWNTSURpc2Vhc2VNb2RlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlTW9kaWZpYWJsZShzdG9jaGFzdGljU0lEaXNlYXNlTW9kZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZU5vZGVEZWNvcmF0b3Ioc3RvY2hhc3RpY1NJRGlzZWFzZU1vZGVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VEZWNvcmF0b3Ioc3RvY2hhc3RpY1NJRGlzZWFzZU1vZGVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VJZGVudGlmaWFibGUoc3RvY2hhc3RpY1NJRGlzZWFzZU1vZGVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VDb21wYXJhYmxlKHN0b2NoYXN0aWNTSURpc2Vhc2VNb2RlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlU2FuaXR5Q2hlY2tlcihzdG9jaGFzdGljU0lEaXNlYXNlTW9kZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gZGVmYXVsdENhc2UodGhlRU9iamVjdCk7CisJCQkJcmV0dXJuIHJlc3VsdDsKKwkJCX0KKwkJCWNhc2UgU3RhbmRhcmRQYWNrYWdlLlNUT0NIQVNUSUNfU0lSX0RJU0VBU0VfTU9ERUw6IHsKKwkJCQlTdG9jaGFzdGljU0lSRGlzZWFzZU1vZGVsIHN0b2NoYXN0aWNTSVJEaXNlYXNlTW9kZWwgPSAoU3RvY2hhc3RpY1NJUkRpc2Vhc2VNb2RlbCl0aGVFT2JqZWN0OworCQkJCVQxIHJlc3VsdCA9IGNhc2VTdG9jaGFzdGljU0lSRGlzZWFzZU1vZGVsKHN0b2NoYXN0aWNTSVJEaXNlYXNlTW9kZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZVNJUihzdG9jaGFzdGljU0lSRGlzZWFzZU1vZGVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VTdGFuZGFyZFN0b2NoYXN0aWNEaXNlYXNlTW9kZWwoc3RvY2hhc3RpY1NJUkRpc2Vhc2VNb2RlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlU0koc3RvY2hhc3RpY1NJUkRpc2Vhc2VNb2RlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlU3RvY2hhc3RpY0Rpc2Vhc2VNb2RlbChzdG9jaGFzdGljU0lSRGlzZWFzZU1vZGVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VTdGFuZGFyZERpc2Vhc2VNb2RlbChzdG9jaGFzdGljU0lSRGlzZWFzZU1vZGVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VEaXNlYXNlTW9kZWwoc3RvY2hhc3RpY1NJUkRpc2Vhc2VNb2RlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlSW50ZWdyYXRpb25EZWNvcmF0b3Ioc3RvY2hhc3RpY1NJUkRpc2Vhc2VNb2RlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlTW9kaWZpYWJsZShzdG9jaGFzdGljU0lSRGlzZWFzZU1vZGVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VOb2RlRGVjb3JhdG9yKHN0b2NoYXN0aWNTSVJEaXNlYXNlTW9kZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZURlY29yYXRvcihzdG9jaGFzdGljU0lSRGlzZWFzZU1vZGVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VJZGVudGlmaWFibGUoc3RvY2hhc3RpY1NJUkRpc2Vhc2VNb2RlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlQ29tcGFyYWJsZShzdG9jaGFzdGljU0lSRGlzZWFzZU1vZGVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VTYW5pdHlDaGVja2VyKHN0b2NoYXN0aWNTSVJEaXNlYXNlTW9kZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gZGVmYXVsdENhc2UodGhlRU9iamVjdCk7CisJCQkJcmV0dXJuIHJlc3VsdDsKKwkJCX0KKwkJCWNhc2UgU3RhbmRhcmRQYWNrYWdlLlNUT0NIQVNUSUNfRElTRUFTRV9NT0RFTDogeworCQkJCVN0b2NoYXN0aWNEaXNlYXNlTW9kZWwgc3RvY2hhc3RpY0Rpc2Vhc2VNb2RlbCA9IChTdG9jaGFzdGljRGlzZWFzZU1vZGVsKXRoZUVPYmplY3Q7CisJCQkJVDEgcmVzdWx0ID0gY2FzZVN0b2NoYXN0aWNEaXNlYXNlTW9kZWwoc3RvY2hhc3RpY0Rpc2Vhc2VNb2RlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlRGlzZWFzZU1vZGVsKHN0b2NoYXN0aWNEaXNlYXNlTW9kZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZUludGVncmF0aW9uRGVjb3JhdG9yKHN0b2NoYXN0aWNEaXNlYXNlTW9kZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZU1vZGlmaWFibGUoc3RvY2hhc3RpY0Rpc2Vhc2VNb2RlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlTm9kZURlY29yYXRvcihzdG9jaGFzdGljRGlzZWFzZU1vZGVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VEZWNvcmF0b3Ioc3RvY2hhc3RpY0Rpc2Vhc2VNb2RlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlSWRlbnRpZmlhYmxlKHN0b2NoYXN0aWNEaXNlYXNlTW9kZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZUNvbXBhcmFibGUoc3RvY2hhc3RpY0Rpc2Vhc2VNb2RlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlU2FuaXR5Q2hlY2tlcihzdG9jaGFzdGljRGlzZWFzZU1vZGVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGRlZmF1bHRDYXNlKHRoZUVPYmplY3QpOworCQkJCXJldHVybiByZXN1bHQ7CisJCQl9CisJCQljYXNlIFN0YW5kYXJkUGFja2FnZS5TVEFOREFSRF9TVE9DSEFTVElDX0RJU0VBU0VfTU9ERUw6IHsKKwkJCQlTdGFuZGFyZFN0b2NoYXN0aWNEaXNlYXNlTW9kZWwgc3RhbmRhcmRTdG9jaGFzdGljRGlzZWFzZU1vZGVsID0gKFN0YW5kYXJkU3RvY2hhc3RpY0Rpc2Vhc2VNb2RlbCl0aGVFT2JqZWN0OworCQkJCVQxIHJlc3VsdCA9IGNhc2VTdGFuZGFyZFN0b2NoYXN0aWNEaXNlYXNlTW9kZWwoc3RhbmRhcmRTdG9jaGFzdGljRGlzZWFzZU1vZGVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VTdG9jaGFzdGljRGlzZWFzZU1vZGVsKHN0YW5kYXJkU3RvY2hhc3RpY0Rpc2Vhc2VNb2RlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlRGlzZWFzZU1vZGVsKHN0YW5kYXJkU3RvY2hhc3RpY0Rpc2Vhc2VNb2RlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlSW50ZWdyYXRpb25EZWNvcmF0b3Ioc3RhbmRhcmRTdG9jaGFzdGljRGlzZWFzZU1vZGVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VNb2RpZmlhYmxlKHN0YW5kYXJkU3RvY2hhc3RpY0Rpc2Vhc2VNb2RlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlTm9kZURlY29yYXRvcihzdGFuZGFyZFN0b2NoYXN0aWNEaXNlYXNlTW9kZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZURlY29yYXRvcihzdGFuZGFyZFN0b2NoYXN0aWNEaXNlYXNlTW9kZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZUlkZW50aWZpYWJsZShzdGFuZGFyZFN0b2NoYXN0aWNEaXNlYXNlTW9kZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZUNvbXBhcmFibGUoc3RhbmRhcmRTdG9jaGFzdGljRGlzZWFzZU1vZGVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VTYW5pdHlDaGVja2VyKHN0YW5kYXJkU3RvY2hhc3RpY0Rpc2Vhc2VNb2RlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBkZWZhdWx0Q2FzZSh0aGVFT2JqZWN0KTsKKwkJCQlyZXR1cm4gcmVzdWx0OworCQkJfQorCQkJY2FzZSBTdGFuZGFyZFBhY2thZ2UuU0lSX0lOT0NVTEFUT1I6IHsKKwkJCQlTSVJJbm9jdWxhdG9yIHNpcklub2N1bGF0b3IgPSAoU0lSSW5vY3VsYXRvcil0aGVFT2JqZWN0OworCQkJCVQxIHJlc3VsdCA9IGNhc2VTSVJJbm9jdWxhdG9yKHNpcklub2N1bGF0b3IpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZVNJSW5mZWN0b3Ioc2lySW5vY3VsYXRvcik7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlU3RhbmRhcmRJbmZlY3RvcihzaXJJbm9jdWxhdG9yKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VJbmZlY3RvcihzaXJJbm9jdWxhdG9yKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VOb2RlRGVjb3JhdG9yKHNpcklub2N1bGF0b3IpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZU1vZGlmaWFibGUoc2lySW5vY3VsYXRvcik7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlRGVjb3JhdG9yKHNpcklub2N1bGF0b3IpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZUlkZW50aWZpYWJsZShzaXJJbm9jdWxhdG9yKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VDb21wYXJhYmxlKHNpcklub2N1bGF0b3IpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZVNhbml0eUNoZWNrZXIoc2lySW5vY3VsYXRvcik7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBkZWZhdWx0Q2FzZSh0aGVFT2JqZWN0KTsKKwkJCQlyZXR1cm4gcmVzdWx0OworCQkJfQorCQkJY2FzZSBTdGFuZGFyZFBhY2thZ2UuU1RPQ0hBU1RJQ19QT0lTU09OX1NJX0RJU0VBU0VfTU9ERUw6IHsKKwkJCQlTdG9jaGFzdGljUG9pc3NvblNJRGlzZWFzZU1vZGVsIHN0b2NoYXN0aWNQb2lzc29uU0lEaXNlYXNlTW9kZWwgPSAoU3RvY2hhc3RpY1BvaXNzb25TSURpc2Vhc2VNb2RlbCl0aGVFT2JqZWN0OworCQkJCVQxIHJlc3VsdCA9IGNhc2VTdG9jaGFzdGljUG9pc3NvblNJRGlzZWFzZU1vZGVsKHN0b2NoYXN0aWNQb2lzc29uU0lEaXNlYXNlTW9kZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZVNJKHN0b2NoYXN0aWNQb2lzc29uU0lEaXNlYXNlTW9kZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZVN0YW5kYXJkRGlzZWFzZU1vZGVsKHN0b2NoYXN0aWNQb2lzc29uU0lEaXNlYXNlTW9kZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZURpc2Vhc2VNb2RlbChzdG9jaGFzdGljUG9pc3NvblNJRGlzZWFzZU1vZGVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VJbnRlZ3JhdGlvbkRlY29yYXRvcihzdG9jaGFzdGljUG9pc3NvblNJRGlzZWFzZU1vZGVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VNb2RpZmlhYmxlKHN0b2NoYXN0aWNQb2lzc29uU0lEaXNlYXNlTW9kZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZU5vZGVEZWNvcmF0b3Ioc3RvY2hhc3RpY1BvaXNzb25TSURpc2Vhc2VNb2RlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlRGVjb3JhdG9yKHN0b2NoYXN0aWNQb2lzc29uU0lEaXNlYXNlTW9kZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZUlkZW50aWZpYWJsZShzdG9jaGFzdGljUG9pc3NvblNJRGlzZWFzZU1vZGVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VDb21wYXJhYmxlKHN0b2NoYXN0aWNQb2lzc29uU0lEaXNlYXNlTW9kZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZVNhbml0eUNoZWNrZXIoc3RvY2hhc3RpY1BvaXNzb25TSURpc2Vhc2VNb2RlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBkZWZhdWx0Q2FzZSh0aGVFT2JqZWN0KTsKKwkJCQlyZXR1cm4gcmVzdWx0OworCQkJfQorCQkJY2FzZSBTdGFuZGFyZFBhY2thZ2UuU1RPQ0hBU1RJQ19QT0lTU09OX1NJUl9ESVNFQVNFX01PREVMOiB7CisJCQkJU3RvY2hhc3RpY1BvaXNzb25TSVJEaXNlYXNlTW9kZWwgc3RvY2hhc3RpY1BvaXNzb25TSVJEaXNlYXNlTW9kZWwgPSAoU3RvY2hhc3RpY1BvaXNzb25TSVJEaXNlYXNlTW9kZWwpdGhlRU9iamVjdDsKKwkJCQlUMSByZXN1bHQgPSBjYXNlU3RvY2hhc3RpY1BvaXNzb25TSVJEaXNlYXNlTW9kZWwoc3RvY2hhc3RpY1BvaXNzb25TSVJEaXNlYXNlTW9kZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZVNJUihzdG9jaGFzdGljUG9pc3NvblNJUkRpc2Vhc2VNb2RlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlU0koc3RvY2hhc3RpY1BvaXNzb25TSVJEaXNlYXNlTW9kZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZVN0YW5kYXJkRGlzZWFzZU1vZGVsKHN0b2NoYXN0aWNQb2lzc29uU0lSRGlzZWFzZU1vZGVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VEaXNlYXNlTW9kZWwoc3RvY2hhc3RpY1BvaXNzb25TSVJEaXNlYXNlTW9kZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZUludGVncmF0aW9uRGVjb3JhdG9yKHN0b2NoYXN0aWNQb2lzc29uU0lSRGlzZWFzZU1vZGVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VNb2RpZmlhYmxlKHN0b2NoYXN0aWNQb2lzc29uU0lSRGlzZWFzZU1vZGVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VOb2RlRGVjb3JhdG9yKHN0b2NoYXN0aWNQb2lzc29uU0lSRGlzZWFzZU1vZGVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VEZWNvcmF0b3Ioc3RvY2hhc3RpY1BvaXNzb25TSVJEaXNlYXNlTW9kZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZUlkZW50aWZpYWJsZShzdG9jaGFzdGljUG9pc3NvblNJUkRpc2Vhc2VNb2RlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlQ29tcGFyYWJsZShzdG9jaGFzdGljUG9pc3NvblNJUkRpc2Vhc2VNb2RlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlU2FuaXR5Q2hlY2tlcihzdG9jaGFzdGljUG9pc3NvblNJUkRpc2Vhc2VNb2RlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBkZWZhdWx0Q2FzZSh0aGVFT2JqZWN0KTsKKwkJCQlyZXR1cm4gcmVzdWx0OworCQkJfQorCQkJY2FzZSBTdGFuZGFyZFBhY2thZ2UuU1RPQ0hBU1RJQ19QT0lTU09OX1NFSVJfRElTRUFTRV9NT0RFTDogeworCQkJCVN0b2NoYXN0aWNQb2lzc29uU0VJUkRpc2Vhc2VNb2RlbCBzdG9jaGFzdGljUG9pc3NvblNFSVJEaXNlYXNlTW9kZWwgPSAoU3RvY2hhc3RpY1BvaXNzb25TRUlSRGlzZWFzZU1vZGVsKXRoZUVPYmplY3Q7CisJCQkJVDEgcmVzdWx0ID0gY2FzZVN0b2NoYXN0aWNQb2lzc29uU0VJUkRpc2Vhc2VNb2RlbChzdG9jaGFzdGljUG9pc3NvblNFSVJEaXNlYXNlTW9kZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZVNFSVIoc3RvY2hhc3RpY1BvaXNzb25TRUlSRGlzZWFzZU1vZGVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VTSVIoc3RvY2hhc3RpY1BvaXNzb25TRUlSRGlzZWFzZU1vZGVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VTSShzdG9jaGFzdGljUG9pc3NvblNFSVJEaXNlYXNlTW9kZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZVN0YW5kYXJkRGlzZWFzZU1vZGVsKHN0b2NoYXN0aWNQb2lzc29uU0VJUkRpc2Vhc2VNb2RlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlRGlzZWFzZU1vZGVsKHN0b2NoYXN0aWNQb2lzc29uU0VJUkRpc2Vhc2VNb2RlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlSW50ZWdyYXRpb25EZWNvcmF0b3Ioc3RvY2hhc3RpY1BvaXNzb25TRUlSRGlzZWFzZU1vZGVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VNb2RpZmlhYmxlKHN0b2NoYXN0aWNQb2lzc29uU0VJUkRpc2Vhc2VNb2RlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlTm9kZURlY29yYXRvcihzdG9jaGFzdGljUG9pc3NvblNFSVJEaXNlYXNlTW9kZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZURlY29yYXRvcihzdG9jaGFzdGljUG9pc3NvblNFSVJEaXNlYXNlTW9kZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZUlkZW50aWZpYWJsZShzdG9jaGFzdGljUG9pc3NvblNFSVJEaXNlYXNlTW9kZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZUNvbXBhcmFibGUoc3RvY2hhc3RpY1BvaXNzb25TRUlSRGlzZWFzZU1vZGVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VTYW5pdHlDaGVja2VyKHN0b2NoYXN0aWNQb2lzc29uU0VJUkRpc2Vhc2VNb2RlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBkZWZhdWx0Q2FzZSh0aGVFT2JqZWN0KTsKKwkJCQlyZXR1cm4gcmVzdWx0OworCQkJfQorCQkJY2FzZSBTdGFuZGFyZFBhY2thZ2UuSU5GRUNUT1JfSU5PQ1VMQVRPUl9DT0xMRUNUSU9OOiB7CisJCQkJSW5mZWN0b3JJbm9jdWxhdG9yQ29sbGVjdGlvbiBpbmZlY3Rvcklub2N1bGF0b3JDb2xsZWN0aW9uID0gKEluZmVjdG9ySW5vY3VsYXRvckNvbGxlY3Rpb24pdGhlRU9iamVjdDsKKwkJCQlUMSByZXN1bHQgPSBjYXNlSW5mZWN0b3JJbm9jdWxhdG9yQ29sbGVjdGlvbihpbmZlY3Rvcklub2N1bGF0b3JDb2xsZWN0aW9uKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VOb2RlRGVjb3JhdG9yKGluZmVjdG9ySW5vY3VsYXRvckNvbGxlY3Rpb24pOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZU1vZGlmaWFibGUoaW5mZWN0b3JJbm9jdWxhdG9yQ29sbGVjdGlvbik7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlRGVjb3JhdG9yKGluZmVjdG9ySW5vY3VsYXRvckNvbGxlY3Rpb24pOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZUlkZW50aWZpYWJsZShpbmZlY3Rvcklub2N1bGF0b3JDb2xsZWN0aW9uKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VDb21wYXJhYmxlKGluZmVjdG9ySW5vY3VsYXRvckNvbGxlY3Rpb24pOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZVNhbml0eUNoZWNrZXIoaW5mZWN0b3JJbm9jdWxhdG9yQ29sbGVjdGlvbik7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBkZWZhdWx0Q2FzZSh0aGVFT2JqZWN0KTsKKwkJCQlyZXR1cm4gcmVzdWx0OworCQkJfQorCQkJY2FzZSBTdGFuZGFyZFBhY2thZ2UuSU5JVElBTElaRVI6IHsKKwkJCQlJbml0aWFsaXplciBpbml0aWFsaXplciA9IChJbml0aWFsaXplcil0aGVFT2JqZWN0OworCQkJCVQxIHJlc3VsdCA9IGNhc2VJbml0aWFsaXplcihpbml0aWFsaXplcik7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlTm9kZURlY29yYXRvcihpbml0aWFsaXplcik7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlRGVjb3JhdG9yKGluaXRpYWxpemVyKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VJZGVudGlmaWFibGUoaW5pdGlhbGl6ZXIpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZUNvbXBhcmFibGUoaW5pdGlhbGl6ZXIpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZVNhbml0eUNoZWNrZXIoaW5pdGlhbGl6ZXIpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gZGVmYXVsdENhc2UodGhlRU9iamVjdCk7CisJCQkJcmV0dXJuIHJlc3VsdDsKKwkJCX0KKwkJCWRlZmF1bHQ6IHJldHVybiBkZWZhdWx0Q2FzZSh0aGVFT2JqZWN0KTsKKwkJfQorCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPlNFSVI8L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7IHJldHVybmluZyBhCisJICogbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgorCSAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPlNFSVI8L2VtPicuCisJICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBUMSBjYXNlU0VJUihTRUlSIG9iamVjdCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5TRUlSIExhYmVsPC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOyByZXR1cm5pbmcgYQorCSAqIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KKwkgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5TRUlSIExhYmVsPC9lbT4nLgorCSAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVDEgY2FzZVNFSVJMYWJlbChTRUlSTGFiZWwgb2JqZWN0KSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPlNFSVIgTGFiZWwgVmFsdWU8L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7IHJldHVybmluZyBhCisJICogbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgorCSAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPlNFSVIgTGFiZWwgVmFsdWU8L2VtPicuCisJICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBUMSBjYXNlU0VJUkxhYmVsVmFsdWUoU0VJUkxhYmVsVmFsdWUgb2JqZWN0KSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPlNJUjwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsgcmV0dXJuaW5nIGEKKwkgKiBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCisJICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+U0lSPC9lbT4nLgorCSAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVDEgY2FzZVNJUihTSVIgb2JqZWN0KSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPlNJUiBMYWJlbDwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsgcmV0dXJuaW5nIGEKKwkgKiBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCisJICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+U0lSIExhYmVsPC9lbT4nLgorCSAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVDEgY2FzZVNJUkxhYmVsKFNJUkxhYmVsIG9iamVjdCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5TSVIgTGFiZWwgVmFsdWU8L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7IHJldHVybmluZyBhCisJICogbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgorCSAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPlNJUiBMYWJlbCBWYWx1ZTwvZW0+Jy4KKwkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFQxIGNhc2VTSVJMYWJlbFZhbHVlKFNJUkxhYmVsVmFsdWUgb2JqZWN0KSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkRpc2Vhc2UgTW9kZWw8L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7IHJldHVybmluZyBhCisJICogbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgorCSAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkRpc2Vhc2UgTW9kZWw8L2VtPicuCisJICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBUMSBjYXNlU3RhbmRhcmREaXNlYXNlTW9kZWwoU3RhbmRhcmREaXNlYXNlTW9kZWwgb2JqZWN0KSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkRpc2Vhc2UgTW9kZWw8L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7IHJldHVybmluZyBhCisJICogbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgorCSAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkRpc2Vhc2UgTW9kZWw8L2VtPicuCisJICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBUMSBjYXNlRGlzZWFzZU1vZGVsKERpc2Vhc2VNb2RlbCBvYmplY3QpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+RGlzZWFzZSBNb2RlbCBMYWJlbDwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsgcmV0dXJuaW5nIGEKKwkgKiBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCisJICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+RGlzZWFzZSBNb2RlbCBMYWJlbDwvZW0+Jy4KKwkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFQxIGNhc2VEaXNlYXNlTW9kZWxMYWJlbChEaXNlYXNlTW9kZWxMYWJlbCBvYmplY3QpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+U3RvY2hhc3RpYyBTRUlSIERpc2Vhc2UgTW9kZWw8L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7IHJldHVybmluZyBhCisJICogbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgorCSAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPlN0b2NoYXN0aWMgU0VJUiBEaXNlYXNlIE1vZGVsPC9lbT4nLgorCSAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVDEgY2FzZVN0b2NoYXN0aWNTRUlSRGlzZWFzZU1vZGVsKAorCQkJU3RvY2hhc3RpY1NFSVJEaXNlYXNlTW9kZWwgb2JqZWN0KSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkluZmVjdG9yPC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOyByZXR1cm5pbmcgYQorCSAqIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KKwkgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5JbmZlY3RvcjwvZW0+Jy4KKwkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFQxIGNhc2VTdGFuZGFyZEluZmVjdG9yKFN0YW5kYXJkSW5mZWN0b3Igb2JqZWN0KSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkRldGVybWluaXN0aWMgU0VJUiBEaXNlYXNlIE1vZGVsPC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOyByZXR1cm5pbmcgYQorCSAqIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KKwkgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5EZXRlcm1pbmlzdGljIFNFSVIgRGlzZWFzZSBNb2RlbDwvZW0+Jy4KKwkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFQxIGNhc2VEZXRlcm1pbmlzdGljU0VJUkRpc2Vhc2VNb2RlbCgKKwkJCURldGVybWluaXN0aWNTRUlSRGlzZWFzZU1vZGVsIG9iamVjdCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5EaXNlYXNlIE1vZGVsIExhYmVsIFZhbHVlPC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOyByZXR1cm5pbmcgYQorCSAqIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KKwkgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5EaXNlYXNlIE1vZGVsIExhYmVsIFZhbHVlPC9lbT4nLgorCSAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVDEgY2FzZURpc2Vhc2VNb2RlbExhYmVsVmFsdWUoRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZSBvYmplY3QpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+RGlzZWFzZSBNb2RlbCBMYWJlbCBWYWx1ZTwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsgcmV0dXJuaW5nIGEKKwkgKiBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCisJICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+RGlzZWFzZSBNb2RlbCBMYWJlbCBWYWx1ZTwvZW0+Jy4KKwkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFQxIGNhc2VTdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsVmFsdWUoCisJCQlTdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsVmFsdWUgb2JqZWN0KSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkRpc2Vhc2UgTW9kZWwgTGFiZWw8L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7IHJldHVybmluZyBhCisJICogbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgorCSAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkRpc2Vhc2UgTW9kZWwgTGFiZWw8L2VtPicuCisJICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBUMSBjYXNlU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbChTdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsIG9iamVjdCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5TSTwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsgcmV0dXJuaW5nIGEKKwkgKiBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCisJICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+U0k8L2VtPicuCisJICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBUMSBjYXNlU0koU0kgb2JqZWN0KSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPlNJIExhYmVsPC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOyByZXR1cm5pbmcgYQorCSAqIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KKwkgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5TSSBMYWJlbDwvZW0+Jy4KKwkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFQxIGNhc2VTSUxhYmVsKFNJTGFiZWwgb2JqZWN0KSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPlNJIExhYmVsIFZhbHVlPC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOyByZXR1cm5pbmcgYQorCSAqIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KKwkgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5TSSBMYWJlbCBWYWx1ZTwvZW0+Jy4KKwkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFQxIGNhc2VTSUxhYmVsVmFsdWUoU0lMYWJlbFZhbHVlIG9iamVjdCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5JbmZlY3RvcjwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsgcmV0dXJuaW5nIGEKKwkgKiBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCisJICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+SW5mZWN0b3I8L2VtPicuCisJICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBUMSBjYXNlSW5mZWN0b3IoSW5mZWN0b3Igb2JqZWN0KSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPlNJIEluZmVjdG9yPC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOyByZXR1cm5pbmcgYQorCSAqIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KKwkgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5TSSBJbmZlY3RvcjwvZW0+Jy4KKwkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFQxIGNhc2VTSUluZmVjdG9yKFNJSW5mZWN0b3Igb2JqZWN0KSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkRldGVybWluaXN0aWMgU0lSIERpc2Vhc2UgTW9kZWw8L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7IHJldHVybmluZyBhCisJICogbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgorCSAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkRldGVybWluaXN0aWMgU0lSIERpc2Vhc2UgTW9kZWw8L2VtPicuCisJICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBUMSBjYXNlRGV0ZXJtaW5pc3RpY1NJUkRpc2Vhc2VNb2RlbCgKKwkJCURldGVybWluaXN0aWNTSVJEaXNlYXNlTW9kZWwgb2JqZWN0KSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkRldGVybWluaXN0aWMgU0kgRGlzZWFzZSBNb2RlbDwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsgcmV0dXJuaW5nIGEKKwkgKiBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCisJICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+RGV0ZXJtaW5pc3RpYyBTSSBEaXNlYXNlIE1vZGVsPC9lbT4nLgorCSAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVDEgY2FzZURldGVybWluaXN0aWNTSURpc2Vhc2VNb2RlbCgKKwkJCURldGVybWluaXN0aWNTSURpc2Vhc2VNb2RlbCBvYmplY3QpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+U3RvY2hhc3RpYyBTSVIgRGlzZWFzZSBNb2RlbDwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsgcmV0dXJuaW5nIGEKKwkgKiBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCisJICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+U3RvY2hhc3RpYyBTSVIgRGlzZWFzZSBNb2RlbDwvZW0+Jy4KKwkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFQxIGNhc2VTdG9jaGFzdGljU0lSRGlzZWFzZU1vZGVsKFN0b2NoYXN0aWNTSVJEaXNlYXNlTW9kZWwgb2JqZWN0KSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPlN0b2NoYXN0aWMgU0kgRGlzZWFzZSBNb2RlbDwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOworCSAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgorCSAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPlN0b2NoYXN0aWMgU0kgRGlzZWFzZSBNb2RlbDwvZW0+Jy4KKwkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFQxIGNhc2VTdG9jaGFzdGljU0lEaXNlYXNlTW9kZWwoU3RvY2hhc3RpY1NJRGlzZWFzZU1vZGVsIG9iamVjdCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5TYW5pdHkgQ2hlY2tlcjwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOworCSAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgorCSAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPlNhbml0eSBDaGVja2VyPC9lbT4nLgorCSAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVDEgY2FzZVNhbml0eUNoZWNrZXIoU2FuaXR5Q2hlY2tlciBvYmplY3QpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+SW50ZWdyYXRpb24gTGFiZWw8L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsKKwkgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KKwkgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5JbnRlZ3JhdGlvbiBMYWJlbDwvZW0+Jy4KKwkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFQxIGNhc2VJbnRlZ3JhdGlvbkxhYmVsKEludGVncmF0aW9uTGFiZWwgb2JqZWN0KSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkludGVncmF0aW9uIExhYmVsIFZhbHVlPC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7CisJICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCisJICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+SW50ZWdyYXRpb24gTGFiZWwgVmFsdWU8L2VtPicuCisJICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBUMSBjYXNlSW50ZWdyYXRpb25MYWJlbFZhbHVlKEludGVncmF0aW9uTGFiZWxWYWx1ZSBvYmplY3QpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+SW50ZWdyYXRpb24gRGVjb3JhdG9yPC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7CisJICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCisJICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+SW50ZWdyYXRpb24gRGVjb3JhdG9yPC9lbT4nLgorCSAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVDEgY2FzZUludGVncmF0aW9uRGVjb3JhdG9yKEludGVncmF0aW9uRGVjb3JhdG9yIG9iamVjdCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5TdG9jaGFzdGljIERpc2Vhc2UgTW9kZWw8L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsKKwkgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KKwkgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5TdG9jaGFzdGljIERpc2Vhc2UgTW9kZWw8L2VtPicuCisJICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBUMSBjYXNlU3RvY2hhc3RpY0Rpc2Vhc2VNb2RlbChTdG9jaGFzdGljRGlzZWFzZU1vZGVsIG9iamVjdCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5TdG9jaGFzdGljIERpc2Vhc2UgTW9kZWw8L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsKKwkgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KKwkgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5TdG9jaGFzdGljIERpc2Vhc2UgTW9kZWw8L2VtPicuCisJICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBUMSBjYXNlU3RhbmRhcmRTdG9jaGFzdGljRGlzZWFzZU1vZGVsKFN0YW5kYXJkU3RvY2hhc3RpY0Rpc2Vhc2VNb2RlbCBvYmplY3QpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+U0lSIElub2N1bGF0b3I8L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsKKwkgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KKwkgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5TSVIgSW5vY3VsYXRvcjwvZW0+Jy4KKwkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFQxIGNhc2VTSVJJbm9jdWxhdG9yKFNJUklub2N1bGF0b3Igb2JqZWN0KSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPlN0b2NoYXN0aWMgUG9pc3NvbiBTSSBEaXNlYXNlIE1vZGVsPC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7CisJICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCisJICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+U3RvY2hhc3RpYyBQb2lzc29uIFNJIERpc2Vhc2UgTW9kZWw8L2VtPicuCisJICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBUMSBjYXNlU3RvY2hhc3RpY1BvaXNzb25TSURpc2Vhc2VNb2RlbChTdG9jaGFzdGljUG9pc3NvblNJRGlzZWFzZU1vZGVsIG9iamVjdCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5TdG9jaGFzdGljIFBvaXNzb24gU0lSIERpc2Vhc2UgTW9kZWw8L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsKKwkgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KKwkgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5TdG9jaGFzdGljIFBvaXNzb24gU0lSIERpc2Vhc2UgTW9kZWw8L2VtPicuCisJICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBUMSBjYXNlU3RvY2hhc3RpY1BvaXNzb25TSVJEaXNlYXNlTW9kZWwoU3RvY2hhc3RpY1BvaXNzb25TSVJEaXNlYXNlTW9kZWwgb2JqZWN0KSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPlN0b2NoYXN0aWMgUG9pc3NvbiBTRUlSIERpc2Vhc2UgTW9kZWw8L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsKKwkgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KKwkgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5TdG9jaGFzdGljIFBvaXNzb24gU0VJUiBEaXNlYXNlIE1vZGVsPC9lbT4nLgorCSAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVDEgY2FzZVN0b2NoYXN0aWNQb2lzc29uU0VJUkRpc2Vhc2VNb2RlbChTdG9jaGFzdGljUG9pc3NvblNFSVJEaXNlYXNlTW9kZWwgb2JqZWN0KSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkluZmVjdG9yIElub2N1bGF0b3IgQ29sbGVjdGlvbjwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOworCSAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgorCSAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkluZmVjdG9yIElub2N1bGF0b3IgQ29sbGVjdGlvbjwvZW0+Jy4KKwkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFQxIGNhc2VJbmZlY3Rvcklub2N1bGF0b3JDb2xsZWN0aW9uKEluZmVjdG9ySW5vY3VsYXRvckNvbGxlY3Rpb24gb2JqZWN0KSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkluaXRpYWxpemVyPC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7CisJICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCisJICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+SW5pdGlhbGl6ZXI8L2VtPicuCisJICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBUMSBjYXNlSW5pdGlhbGl6ZXIoSW5pdGlhbGl6ZXIgb2JqZWN0KSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkNvbXBhcmFibGU8L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsKKwkgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KKwkgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5Db21wYXJhYmxlPC9lbT4nLgorCSAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgPFQ+IFQxIGNhc2VDb21wYXJhYmxlKENvbXBhcmFibGU8VD4gb2JqZWN0KSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPklkZW50aWZpYWJsZTwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsgcmV0dXJuaW5nIGEKKwkgKiBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCisJICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+SWRlbnRpZmlhYmxlPC9lbT4nLgorCSAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVDEgY2FzZUlkZW50aWZpYWJsZShJZGVudGlmaWFibGUgb2JqZWN0KSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkRlY29yYXRvcjwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsgcmV0dXJuaW5nIGEKKwkgKiBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCisJICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+RGVjb3JhdG9yPC9lbT4nLgorCSAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVDEgY2FzZURlY29yYXRvcihEZWNvcmF0b3Igb2JqZWN0KSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPk5vZGUgRGVjb3JhdG9yPC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOyByZXR1cm5pbmcgYQorCSAqIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KKwkgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5Ob2RlIERlY29yYXRvcjwvZW0+Jy4KKwkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFQxIGNhc2VOb2RlRGVjb3JhdG9yKE5vZGVEZWNvcmF0b3Igb2JqZWN0KSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPk1vZGlmaWFibGU8L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsKKwkgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KKwkgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5Nb2RpZmlhYmxlPC9lbT4nLgorCSAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVDEgY2FzZU1vZGlmaWFibGUoTW9kaWZpYWJsZSBvYmplY3QpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+TGFiZWw8L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7IHJldHVybmluZyBhCisJICogbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgorCSAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkxhYmVsPC9lbT4nLgorCSAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVDEgY2FzZUxhYmVsKExhYmVsIG9iamVjdCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5EeW5hbWljIExhYmVsPC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOyByZXR1cm5pbmcgYQorCSAqIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KKwkgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5EeW5hbWljIExhYmVsPC9lbT4nLgorCSAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVDEgY2FzZUR5bmFtaWNMYWJlbChEeW5hbWljTGFiZWwgb2JqZWN0KSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPk5vZGUgTGFiZWw8L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7IHJldHVybmluZyBhCisJICogbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgorCSAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPk5vZGUgTGFiZWw8L2VtPicuCisJICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBUMSBjYXNlTm9kZUxhYmVsKE5vZGVMYWJlbCBvYmplY3QpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+RHluYW1pYyBOb2RlIExhYmVsPC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOyByZXR1cm5pbmcgYQorCSAqIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KKwkgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5EeW5hbWljIE5vZGUgTGFiZWw8L2VtPicuCisJICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBUMSBjYXNlRHluYW1pY05vZGVMYWJlbChEeW5hbWljTm9kZUxhYmVsIG9iamVjdCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5MYWJlbCBWYWx1ZTwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsgcmV0dXJuaW5nIGEKKwkgKiBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCisJICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+TGFiZWwgVmFsdWU8L2VtPicuCisJICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBUMSBjYXNlTGFiZWxWYWx1ZShMYWJlbFZhbHVlIG9iamVjdCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5FT2JqZWN0PC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOyByZXR1cm5pbmcgYQorCSAqIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLCBidXQgdGhpcyBpcyB0aGUgbGFzdCBjYXNlCisJICogYW55d2F5LiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KKwkgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5FT2JqZWN0PC9lbT4nLgorCSAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVDEgZGVmYXVsdENhc2UoRU9iamVjdCBvYmplY3QpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCit9IC8vIFN0YW5kYXJkU3dpdGNoCmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZXMvLmNsYXNzcGF0aCBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlcy8uY2xhc3NwYXRoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMwNGU4NjEKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZXMvLmNsYXNzcGF0aApAQCAtMCwwICsxLDcgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8Y2xhc3NwYXRoPgorCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJzcmMiIHBhdGg9InNyYyIvPgorCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJjb24iIHBhdGg9Im9yZy5lY2xpcHNlLmpkdC5sYXVuY2hpbmcuSlJFX0NPTlRBSU5FUi9vcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwuZGVidWcudWkubGF1bmNoZXIuU3RhbmRhcmRWTVR5cGUvSjJTRS0xLjUiLz4KKwk8Y2xhc3NwYXRoZW50cnkga2luZD0iY29uIiBwYXRoPSJvcmcuZWNsaXBzZS5wZGUuY29yZS5yZXF1aXJlZFBsdWdpbnMiLz4KKwk8Y2xhc3NwYXRoZW50cnkga2luZD0ib3V0cHV0IiBwYXRoPSJiaW4iLz4KKzwvY2xhc3NwYXRoPgpkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2VzLy5wcm9qZWN0IGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2VzLy5wcm9qZWN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg4ZGVkNWUKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZXMvLnByb2plY3QKQEAgLTAsMCArMSwyOCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxwcm9qZWN0RGVzY3JpcHRpb24+CisJPG5hbWU+b3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlczwvbmFtZT4KKwk8Y29tbWVudD48L2NvbW1lbnQ+CisJPHByb2plY3RzPgorCTwvcHJvamVjdHM+CisJPGJ1aWxkU3BlYz4KKwkJPGJ1aWxkQ29tbWFuZD4KKwkJCTxuYW1lPm9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFidWlsZGVyPC9uYW1lPgorCQkJPGFyZ3VtZW50cz4KKwkJCTwvYXJndW1lbnRzPgorCQk8L2J1aWxkQ29tbWFuZD4KKwkJPGJ1aWxkQ29tbWFuZD4KKwkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5NYW5pZmVzdEJ1aWxkZXI8L25hbWU+CisJCQk8YXJndW1lbnRzPgorCQkJPC9hcmd1bWVudHM+CisJCTwvYnVpbGRDb21tYW5kPgorCQk8YnVpbGRDb21tYW5kPgorCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLlNjaGVtYUJ1aWxkZXI8L25hbWU+CisJCQk8YXJndW1lbnRzPgorCQkJPC9hcmd1bWVudHM+CisJCTwvYnVpbGRDb21tYW5kPgorCTwvYnVpbGRTcGVjPgorCTxuYXR1cmVzPgorCQk8bmF0dXJlPm9yZy5lY2xpcHNlLnBkZS5QbHVnaW5OYXR1cmU8L25hdHVyZT4KKwkJPG5hdHVyZT5vcmcuZWNsaXBzZS5qZHQuY29yZS5qYXZhbmF0dXJlPC9uYXR1cmU+CisJPC9uYXR1cmVzPgorPC9wcm9qZWN0RGVzY3JpcHRpb24+CmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZXMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2VzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lOTFmN2Y4Ci0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2VzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcwpAQCAtMCwwICsxLDcgQEAKKyNNb24gSmFuIDIxIDEyOjQwOjM5IEVTVCAyMDA4CitlY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29kZWdlbi50YXJnZXRQbGF0Zm9ybT0xLjUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvbXBsaWFuY2U9MS41CitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmFzc2VydElkZW50aWZpZXI9ZXJyb3IKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZW51bUlkZW50aWZpZXI9ZXJyb3IKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnNvdXJjZT0xLjUKZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlcy9NRVRBLUlORi9NQU5JRkVTVC5NRiBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlcy9NRVRBLUlORi9NQU5JRkVTVC5NRgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYzM4OWFhCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2VzL01FVEEtSU5GL01BTklGRVNULk1GCkBAIC0wLDAgKzEsMTIgQEAKK01hbmlmZXN0LVZlcnNpb246IDEuMAorQnVuZGxlLU1hbmlmZXN0VmVyc2lvbjogMgorQnVuZGxlLU5hbWU6ICVwbHVnaW5OYW1lCitCdW5kbGUtU3ltYm9saWNOYW1lOiBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2VzO3NpbmdsZXRvbjo9dHJ1ZQorQnVuZGxlLVZlcnNpb246IDEuMi4xCitCdW5kbGUtQWN0aXZhdG9yOiBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2VzLkFjdGl2YXRvcgorQnVuZGxlLUxvY2FsaXphdGlvbjogcGx1Z2luCitSZXF1aXJlLUJ1bmRsZTogb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lCitCdW5kbGUtQWN0aXZhdGlvblBvbGljeTogbGF6eQorQnVuZGxlLVZlbmRvcjogJXByb3ZpZGVyTmFtZQorQnVuZGxlLVJlcXVpcmVkRXhlY3V0aW9uRW52aXJvbm1lbnQ6IEoyU0UtMS41CitFeHBvcnQtUGFja2FnZTogb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlcwpkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2VzL2J1aWxkLnByb3BlcnRpZXMgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZXMvYnVpbGQucHJvcGVydGllcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NGI1NTBhCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2VzL2J1aWxkLnByb3BlcnRpZXMKQEAgLTAsMCArMSwxMiBAQAorc291cmNlLi4gPSBzcmMvCitvdXRwdXQuLiA9IGJpbi8KK2Jpbi5pbmNsdWRlcyA9IE1FVEEtSU5GLyxcCisgICAgICAgICAgICAgICAuLFwKKyAgICAgICAgICAgICAgIHBsdWdpbi54bWwsXAorICAgICAgICAgICAgICAgcmVzb3VyY2VzLyxcCisgICAgICAgICAgICAgICBwbHVnaW4ucHJvcGVydGllcyxcCisgICAgICAgICAgICAgICBlcGwtdjEwLmh0bWwsXAorICAgICAgICAgICAgICAgbm90aWNlLmh0bWwsXAorICAgICAgICAgICAgICAgcGx1Z2luX2RlLnByb3BlcnRpZXMsXAorICAgICAgICAgICAgICAgcGx1Z2luX2tyLnByb3BlcnRpZXMsXAorICAgICAgICAgICAgICAgcGx1Z2luX3poLnByb3BlcnRpZXMKZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlcy9lcGwtdjEwLmh0bWwgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZXMvZXBsLXYxMC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVkNGIxOTYKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZXMvZXBsLXYxMC5odG1sCkBAIC0wLDAgKzEsMzI4IEBACis8aHRtbCB4bWxuczpvPSJ1cm46c2NoZW1hcy1taWNyb3NvZnQtY29tOm9mZmljZTpvZmZpY2UiCit4bWxuczp3PSJ1cm46c2NoZW1hcy1taWNyb3NvZnQtY29tOm9mZmljZTp3b3JkIgoreG1sbnM9Imh0dHA6Ly93d3cudzMub3JnL1RSL1JFQy1odG1sNDAiPgorCis8aGVhZD4KKzxtZXRhIGh0dHAtZXF1aXY9Q29udGVudC1UeXBlIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD13aW5kb3dzLTEyNTIiPgorPG1ldGEgbmFtZT1Qcm9nSWQgY29udGVudD1Xb3JkLkRvY3VtZW50PgorPG1ldGEgbmFtZT1HZW5lcmF0b3IgY29udGVudD0iTWljcm9zb2Z0IFdvcmQgOSI+Cis8bWV0YSBuYW1lPU9yaWdpbmF0b3IgY29udGVudD0iTWljcm9zb2Z0IFdvcmQgOSI+Cis8bGluayByZWw9RmlsZS1MaXN0CitocmVmPSIuL0VjbGlwc2UlMjBFUEwlMjAyMDAzXzExXzEwJTIwRmluYWxfZmlsZXMvZmlsZWxpc3QueG1sIj4KKzx0aXRsZT5FY2xpcHNlIFB1YmxpYyBMaWNlbnNlIC0gVmVyc2lvbiAxLjA8L3RpdGxlPgorPCEtLVtpZiBndGUgbXNvIDldPjx4bWw+CisgPG86RG9jdW1lbnRQcm9wZXJ0aWVzPgorICA8bzpSZXZpc2lvbj4yPC9vOlJldmlzaW9uPgorICA8bzpUb3RhbFRpbWU+MzwvbzpUb3RhbFRpbWU+CisgIDxvOkNyZWF0ZWQ+MjAwNC0wMy0wNVQyMzowMzowMFo8L286Q3JlYXRlZD4KKyAgPG86TGFzdFNhdmVkPjIwMDQtMDMtMDVUMjM6MDM6MDBaPC9vOkxhc3RTYXZlZD4KKyAgPG86UGFnZXM+NDwvbzpQYWdlcz4KKyAgPG86V29yZHM+MTYyNjwvbzpXb3Jkcz4KKyAgPG86Q2hhcmFjdGVycz45MjcwPC9vOkNoYXJhY3RlcnM+CisgICA8bzpMaW5lcz43NzwvbzpMaW5lcz4KKyAgPG86UGFyYWdyYXBocz4xODwvbzpQYXJhZ3JhcGhzPgorICA8bzpDaGFyYWN0ZXJzV2l0aFNwYWNlcz4xMTM4NDwvbzpDaGFyYWN0ZXJzV2l0aFNwYWNlcz4KKyAgPG86VmVyc2lvbj45LjQ0MDI8L286VmVyc2lvbj4KKyA8L286RG9jdW1lbnRQcm9wZXJ0aWVzPgorPC94bWw+PCFbZW5kaWZdLS0+PCEtLVtpZiBndGUgbXNvIDldPjx4bWw+CisgPHc6V29yZERvY3VtZW50PgorICA8dzpUcmFja1JldmlzaW9ucy8+CisgPC93OldvcmREb2N1bWVudD4KKzwveG1sPjwhW2VuZGlmXS0tPgorPHN0eWxlPgorPCEtLQorIC8qIEZvbnQgRGVmaW5pdGlvbnMgKi8KK0Bmb250LWZhY2UKKwl7Zm9udC1mYW1pbHk6VGFob21hOworCXBhbm9zZS0xOjIgMTEgNiA0IDMgNSA0IDQgMiA0OworCW1zby1mb250LWNoYXJzZXQ6MDsKKwltc28tZ2VuZXJpYy1mb250LWZhbWlseTpzd2lzczsKKwltc28tZm9udC1waXRjaDp2YXJpYWJsZTsKKwltc28tZm9udC1zaWduYXR1cmU6NTUzNjc5NDk1IC0yMTQ3NDgzNjQ4IDggMCA2NjA0NyAwO30KKyAvKiBTdHlsZSBEZWZpbml0aW9ucyAqLworcC5Nc29Ob3JtYWwsIGxpLk1zb05vcm1hbCwgZGl2Lk1zb05vcm1hbAorCXttc28tc3R5bGUtcGFyZW50OiIiOworCW1hcmdpbjowaW47CisJbWFyZ2luLWJvdHRvbTouMDAwMXB0OworCW1zby1wYWdpbmF0aW9uOndpZG93LW9ycGhhbjsKKwlmb250LXNpemU6MTIuMHB0OworCWZvbnQtZmFtaWx5OiJUaW1lcyBOZXcgUm9tYW4iOworCW1zby1mYXJlYXN0LWZvbnQtZmFtaWx5OiJUaW1lcyBOZXcgUm9tYW4iO30KK3AKKwl7bWFyZ2luLXJpZ2h0OjBpbjsKKwltc28tbWFyZ2luLXRvcC1hbHQ6YXV0bzsKKwltc28tbWFyZ2luLWJvdHRvbS1hbHQ6YXV0bzsKKwltYXJnaW4tbGVmdDowaW47CisJbXNvLXBhZ2luYXRpb246d2lkb3ctb3JwaGFuOworCWZvbnQtc2l6ZToxMi4wcHQ7CisJZm9udC1mYW1pbHk6IlRpbWVzIE5ldyBSb21hbiI7CisJbXNvLWZhcmVhc3QtZm9udC1mYW1pbHk6IlRpbWVzIE5ldyBSb21hbiI7fQorcC5CYWxsb29uVGV4dCwgbGkuQmFsbG9vblRleHQsIGRpdi5CYWxsb29uVGV4dAorCXttc28tc3R5bGUtbmFtZToiQmFsbG9vbiBUZXh0IjsKKwltYXJnaW46MGluOworCW1hcmdpbi1ib3R0b206LjAwMDFwdDsKKwltc28tcGFnaW5hdGlvbjp3aWRvdy1vcnBoYW47CisJZm9udC1zaXplOjguMHB0OworCWZvbnQtZmFtaWx5OlRhaG9tYTsKKwltc28tZmFyZWFzdC1mb250LWZhbWlseToiVGltZXMgTmV3IFJvbWFuIjt9CitAcGFnZSBTZWN0aW9uMQorCXtzaXplOjguNWluIDExLjBpbjsKKwltYXJnaW46MS4waW4gMS4yNWluIDEuMGluIDEuMjVpbjsKKwltc28taGVhZGVyLW1hcmdpbjouNWluOworCW1zby1mb290ZXItbWFyZ2luOi41aW47CisJbXNvLXBhcGVyLXNvdXJjZTowO30KK2Rpdi5TZWN0aW9uMQorCXtwYWdlOlNlY3Rpb24xO30KKy0tPgorPC9zdHlsZT4KKzwvaGVhZD4KKworPGJvZHkgbGFuZz1FTi1VUyBzdHlsZT0ndGFiLWludGVydmFsOi41aW4nPgorCis8ZGl2IGNsYXNzPVNlY3Rpb24xPgorCis8cCBhbGlnbj1jZW50ZXIgc3R5bGU9J3RleHQtYWxpZ246Y2VudGVyJz48Yj5FY2xpcHNlIFB1YmxpYyBMaWNlbnNlIC0gdiAxLjA8L2I+Cis8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5USEUgQUNDT01QQU5ZSU5HIFBST0dSQU0gSVMgUFJPVklERUQgVU5ERVIKK1RIRSBURVJNUyBPRiBUSElTIEVDTElQU0UgUFVCTElDIExJQ0VOU0UgKCZxdW90O0FHUkVFTUVOVCZxdW90OykuIEFOWSBVU0UsCitSRVBST0RVQ1RJT04gT1IgRElTVFJJQlVUSU9OIE9GIFRIRSBQUk9HUkFNIENPTlNUSVRVVEVTIFJFQ0lQSUVOVCdTIEFDQ0VQVEFOQ0UKK09GIFRISVMgQUdSRUVNRU5ULjwvc3Bhbj4gPC9wPgorCis8cD48Yj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+MS4gREVGSU5JVElPTlM8L3NwYW4+PC9iPiA8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4mcXVvdDtDb250cmlidXRpb24mcXVvdDsgbWVhbnM6PC9zcGFuPiA8L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmEpCitpbiB0aGUgY2FzZSBvZiB0aGUgaW5pdGlhbCBDb250cmlidXRvciwgdGhlIGluaXRpYWwgY29kZSBhbmQgZG9jdW1lbnRhdGlvbgorZGlzdHJpYnV0ZWQgdW5kZXIgdGhpcyBBZ3JlZW1lbnQsIGFuZDxiciBjbGVhcj1sZWZ0PgorYikgaW4gdGhlIGNhc2Ugb2YgZWFjaCBzdWJzZXF1ZW50IENvbnRyaWJ1dG9yOjwvc3Bhbj48L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmkpCitjaGFuZ2VzIHRvIHRoZSBQcm9ncmFtLCBhbmQ8L3NwYW4+PC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5paSkKK2FkZGl0aW9ucyB0byB0aGUgUHJvZ3JhbTs8L3NwYW4+PC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz53aGVyZQorc3VjaCBjaGFuZ2VzIGFuZC9vciBhZGRpdGlvbnMgdG8gdGhlIFByb2dyYW0gb3JpZ2luYXRlIGZyb20gYW5kIGFyZSBkaXN0cmlidXRlZAorYnkgdGhhdCBwYXJ0aWN1bGFyIENvbnRyaWJ1dG9yLiBBIENvbnRyaWJ1dGlvbiAnb3JpZ2luYXRlcycgZnJvbSBhIENvbnRyaWJ1dG9yCitpZiBpdCB3YXMgYWRkZWQgdG8gdGhlIFByb2dyYW0gYnkgc3VjaCBDb250cmlidXRvciBpdHNlbGYgb3IgYW55b25lIGFjdGluZyBvbgorc3VjaCBDb250cmlidXRvcidzIGJlaGFsZi4gQ29udHJpYnV0aW9ucyBkbyBub3QgaW5jbHVkZSBhZGRpdGlvbnMgdG8gdGhlCitQcm9ncmFtIHdoaWNoOiAoaSkgYXJlIHNlcGFyYXRlIG1vZHVsZXMgb2Ygc29mdHdhcmUgZGlzdHJpYnV0ZWQgaW4gY29uanVuY3Rpb24KK3dpdGggdGhlIFByb2dyYW0gdW5kZXIgdGhlaXIgb3duIGxpY2Vuc2UgYWdyZWVtZW50LCBhbmQgKGlpKSBhcmUgbm90IGRlcml2YXRpdmUKK3dvcmtzIG9mIHRoZSBQcm9ncmFtLiA8L3NwYW4+PC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+JnF1b3Q7Q29udHJpYnV0b3ImcXVvdDsgbWVhbnMgYW55IHBlcnNvbiBvcgorZW50aXR5IHRoYXQgZGlzdHJpYnV0ZXMgdGhlIFByb2dyYW0uPC9zcGFuPiA8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4mcXVvdDtMaWNlbnNlZCBQYXRlbnRzICZxdW90OyBtZWFuIHBhdGVudAorY2xhaW1zIGxpY2Vuc2FibGUgYnkgYSBDb250cmlidXRvciB3aGljaCBhcmUgbmVjZXNzYXJpbHkgaW5mcmluZ2VkIGJ5IHRoZSB1c2UKK29yIHNhbGUgb2YgaXRzIENvbnRyaWJ1dGlvbiBhbG9uZSBvciB3aGVuIGNvbWJpbmVkIHdpdGggdGhlIFByb2dyYW0uIDwvc3Bhbj48L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4mcXVvdDtQcm9ncmFtJnF1b3Q7IG1lYW5zIHRoZSBDb250cmlidXRpb25zCitkaXN0cmlidXRlZCBpbiBhY2NvcmRhbmNlIHdpdGggdGhpcyBBZ3JlZW1lbnQuPC9zcGFuPiA8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4mcXVvdDtSZWNpcGllbnQmcXVvdDsgbWVhbnMgYW55b25lIHdobworcmVjZWl2ZXMgdGhlIFByb2dyYW0gdW5kZXIgdGhpcyBBZ3JlZW1lbnQsIGluY2x1ZGluZyBhbGwgQ29udHJpYnV0b3JzLjwvc3Bhbj4gPC9wPgorCis8cD48Yj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+Mi4gR1JBTlQgT0YgUklHSFRTPC9zcGFuPjwvYj4gPC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5hKQorU3ViamVjdCB0byB0aGUgdGVybXMgb2YgdGhpcyBBZ3JlZW1lbnQsIGVhY2ggQ29udHJpYnV0b3IgaGVyZWJ5IGdyYW50cyBSZWNpcGllbnQKK2Egbm9uLWV4Y2x1c2l2ZSwgd29ybGR3aWRlLCByb3lhbHR5LWZyZWUgY29weXJpZ2h0IGxpY2Vuc2UgdG88c3Bhbgorc3R5bGU9J2NvbG9yOnJlZCc+IDwvc3Bhbj5yZXByb2R1Y2UsIHByZXBhcmUgZGVyaXZhdGl2ZSB3b3JrcyBvZiwgcHVibGljbHkKK2Rpc3BsYXksIHB1YmxpY2x5IHBlcmZvcm0sIGRpc3RyaWJ1dGUgYW5kIHN1YmxpY2Vuc2UgdGhlIENvbnRyaWJ1dGlvbiBvZiBzdWNoCitDb250cmlidXRvciwgaWYgYW55LCBhbmQgc3VjaCBkZXJpdmF0aXZlIHdvcmtzLCBpbiBzb3VyY2UgY29kZSBhbmQgb2JqZWN0IGNvZGUKK2Zvcm0uPC9zcGFuPjwvcD4KKworPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YikKK1N1YmplY3QgdG8gdGhlIHRlcm1zIG9mIHRoaXMgQWdyZWVtZW50LCBlYWNoIENvbnRyaWJ1dG9yIGhlcmVieSBncmFudHMKK1JlY2lwaWVudCBhIG5vbi1leGNsdXNpdmUsIHdvcmxkd2lkZSw8c3BhbiBzdHlsZT0nY29sb3I6Z3JlZW4nPiA8L3NwYW4+cm95YWx0eS1mcmVlCitwYXRlbnQgbGljZW5zZSB1bmRlciBMaWNlbnNlZCBQYXRlbnRzIHRvIG1ha2UsIHVzZSwgc2VsbCwgb2ZmZXIgdG8gc2VsbCwgaW1wb3J0CithbmQgb3RoZXJ3aXNlIHRyYW5zZmVyIHRoZSBDb250cmlidXRpb24gb2Ygc3VjaCBDb250cmlidXRvciwgaWYgYW55LCBpbiBzb3VyY2UKK2NvZGUgYW5kIG9iamVjdCBjb2RlIGZvcm0uIFRoaXMgcGF0ZW50IGxpY2Vuc2Ugc2hhbGwgYXBwbHkgdG8gdGhlIGNvbWJpbmF0aW9uCitvZiB0aGUgQ29udHJpYnV0aW9uIGFuZCB0aGUgUHJvZ3JhbSBpZiwgYXQgdGhlIHRpbWUgdGhlIENvbnRyaWJ1dGlvbiBpcyBhZGRlZAorYnkgdGhlIENvbnRyaWJ1dG9yLCBzdWNoIGFkZGl0aW9uIG9mIHRoZSBDb250cmlidXRpb24gY2F1c2VzIHN1Y2ggY29tYmluYXRpb24KK3RvIGJlIGNvdmVyZWQgYnkgdGhlIExpY2Vuc2VkIFBhdGVudHMuIFRoZSBwYXRlbnQgbGljZW5zZSBzaGFsbCBub3QgYXBwbHkgdG8KK2FueSBvdGhlciBjb21iaW5hdGlvbnMgd2hpY2ggaW5jbHVkZSB0aGUgQ29udHJpYnV0aW9uLiBObyBoYXJkd2FyZSBwZXIgc2UgaXMKK2xpY2Vuc2VkIGhlcmV1bmRlci4gPC9zcGFuPjwvcD4KKworPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YykKK1JlY2lwaWVudCB1bmRlcnN0YW5kcyB0aGF0IGFsdGhvdWdoIGVhY2ggQ29udHJpYnV0b3IgZ3JhbnRzIHRoZSBsaWNlbnNlcyB0byBpdHMKK0NvbnRyaWJ1dGlvbnMgc2V0IGZvcnRoIGhlcmVpbiwgbm8gYXNzdXJhbmNlcyBhcmUgcHJvdmlkZWQgYnkgYW55IENvbnRyaWJ1dG9yCit0aGF0IHRoZSBQcm9ncmFtIGRvZXMgbm90IGluZnJpbmdlIHRoZSBwYXRlbnQgb3Igb3RoZXIgaW50ZWxsZWN0dWFsIHByb3BlcnR5CityaWdodHMgb2YgYW55IG90aGVyIGVudGl0eS4gRWFjaCBDb250cmlidXRvciBkaXNjbGFpbXMgYW55IGxpYWJpbGl0eSB0byBSZWNpcGllbnQKK2ZvciBjbGFpbXMgYnJvdWdodCBieSBhbnkgb3RoZXIgZW50aXR5IGJhc2VkIG9uIGluZnJpbmdlbWVudCBvZiBpbnRlbGxlY3R1YWwKK3Byb3BlcnR5IHJpZ2h0cyBvciBvdGhlcndpc2UuIEFzIGEgY29uZGl0aW9uIHRvIGV4ZXJjaXNpbmcgdGhlIHJpZ2h0cyBhbmQKK2xpY2Vuc2VzIGdyYW50ZWQgaGVyZXVuZGVyLCBlYWNoIFJlY2lwaWVudCBoZXJlYnkgYXNzdW1lcyBzb2xlIHJlc3BvbnNpYmlsaXR5Cit0byBzZWN1cmUgYW55IG90aGVyIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgbmVlZGVkLCBpZiBhbnkuIEZvciBleGFtcGxlLAoraWYgYSB0aGlyZCBwYXJ0eSBwYXRlbnQgbGljZW5zZSBpcyByZXF1aXJlZCB0byBhbGxvdyBSZWNpcGllbnQgdG8gZGlzdHJpYnV0ZQordGhlIFByb2dyYW0sIGl0IGlzIFJlY2lwaWVudCdzIHJlc3BvbnNpYmlsaXR5IHRvIGFjcXVpcmUgdGhhdCBsaWNlbnNlIGJlZm9yZQorZGlzdHJpYnV0aW5nIHRoZSBQcm9ncmFtLjwvc3Bhbj48L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmQpCitFYWNoIENvbnRyaWJ1dG9yIHJlcHJlc2VudHMgdGhhdCB0byBpdHMga25vd2xlZGdlIGl0IGhhcyBzdWZmaWNpZW50IGNvcHlyaWdodAorcmlnaHRzIGluIGl0cyBDb250cmlidXRpb24sIGlmIGFueSwgdG8gZ3JhbnQgdGhlIGNvcHlyaWdodCBsaWNlbnNlIHNldCBmb3J0aCBpbgordGhpcyBBZ3JlZW1lbnQuIDwvc3Bhbj48L3A+CisKKzxwPjxiPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4zLiBSRVFVSVJFTUVOVFM8L3NwYW4+PC9iPiA8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5BIENvbnRyaWJ1dG9yIG1heSBjaG9vc2UgdG8gZGlzdHJpYnV0ZSB0aGUKK1Byb2dyYW0gaW4gb2JqZWN0IGNvZGUgZm9ybSB1bmRlciBpdHMgb3duIGxpY2Vuc2UgYWdyZWVtZW50LCBwcm92aWRlZCB0aGF0Ojwvc3Bhbj4KKzwvcD4KKworPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YSkKK2l0IGNvbXBsaWVzIHdpdGggdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoaXMgQWdyZWVtZW50OyBhbmQ8L3NwYW4+PC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5iKQoraXRzIGxpY2Vuc2UgYWdyZWVtZW50Ojwvc3Bhbj48L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmkpCitlZmZlY3RpdmVseSBkaXNjbGFpbXMgb24gYmVoYWxmIG9mIGFsbCBDb250cmlidXRvcnMgYWxsIHdhcnJhbnRpZXMgYW5kCitjb25kaXRpb25zLCBleHByZXNzIGFuZCBpbXBsaWVkLCBpbmNsdWRpbmcgd2FycmFudGllcyBvciBjb25kaXRpb25zIG9mIHRpdGxlCithbmQgbm9uLWluZnJpbmdlbWVudCwgYW5kIGltcGxpZWQgd2FycmFudGllcyBvciBjb25kaXRpb25zIG9mIG1lcmNoYW50YWJpbGl0eQorYW5kIGZpdG5lc3MgZm9yIGEgcGFydGljdWxhciBwdXJwb3NlOyA8L3NwYW4+PC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5paSkKK2VmZmVjdGl2ZWx5IGV4Y2x1ZGVzIG9uIGJlaGFsZiBvZiBhbGwgQ29udHJpYnV0b3JzIGFsbCBsaWFiaWxpdHkgZm9yIGRhbWFnZXMsCitpbmNsdWRpbmcgZGlyZWN0LCBpbmRpcmVjdCwgc3BlY2lhbCwgaW5jaWRlbnRhbCBhbmQgY29uc2VxdWVudGlhbCBkYW1hZ2VzLCBzdWNoCithcyBsb3N0IHByb2ZpdHM7IDwvc3Bhbj48L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmlpaSkKK3N0YXRlcyB0aGF0IGFueSBwcm92aXNpb25zIHdoaWNoIGRpZmZlciBmcm9tIHRoaXMgQWdyZWVtZW50IGFyZSBvZmZlcmVkIGJ5IHRoYXQKK0NvbnRyaWJ1dG9yIGFsb25lIGFuZCBub3QgYnkgYW55IG90aGVyIHBhcnR5OyBhbmQ8L3NwYW4+PC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5pdikKK3N0YXRlcyB0aGF0IHNvdXJjZSBjb2RlIGZvciB0aGUgUHJvZ3JhbSBpcyBhdmFpbGFibGUgZnJvbSBzdWNoIENvbnRyaWJ1dG9yLCBhbmQKK2luZm9ybXMgbGljZW5zZWVzIGhvdyB0byBvYnRhaW4gaXQgaW4gYSByZWFzb25hYmxlIG1hbm5lciBvbiBvciB0aHJvdWdoIGEKK21lZGl1bSBjdXN0b21hcmlseSB1c2VkIGZvciBzb2Z0d2FyZSBleGNoYW5nZS48c3BhbiBzdHlsZT0nY29sb3I6Ymx1ZSc+IDwvc3Bhbj48L3NwYW4+PC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+V2hlbiB0aGUgUHJvZ3JhbSBpcyBtYWRlIGF2YWlsYWJsZSBpbiBzb3VyY2UKK2NvZGUgZm9ybTo8L3NwYW4+IDwvcD4KKworPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YSkKK2l0IG11c3QgYmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhpcyBBZ3JlZW1lbnQ7IGFuZCA8L3NwYW4+PC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5iKSBhCitjb3B5IG9mIHRoaXMgQWdyZWVtZW50IG11c3QgYmUgaW5jbHVkZWQgd2l0aCBlYWNoIGNvcHkgb2YgdGhlIFByb2dyYW0uIDwvc3Bhbj48L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5Db250cmlidXRvcnMgbWF5IG5vdCByZW1vdmUgb3IgYWx0ZXIgYW55Citjb3B5cmlnaHQgbm90aWNlcyBjb250YWluZWQgd2l0aGluIHRoZSBQcm9ncmFtLiA8L3NwYW4+PC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+RWFjaCBDb250cmlidXRvciBtdXN0IGlkZW50aWZ5IGl0c2VsZiBhcyB0aGUKK29yaWdpbmF0b3Igb2YgaXRzIENvbnRyaWJ1dGlvbiwgaWYgYW55LCBpbiBhIG1hbm5lciB0aGF0IHJlYXNvbmFibHkgYWxsb3dzCitzdWJzZXF1ZW50IFJlY2lwaWVudHMgdG8gaWRlbnRpZnkgdGhlIG9yaWdpbmF0b3Igb2YgdGhlIENvbnRyaWJ1dGlvbi4gPC9zcGFuPjwvcD4KKworPHA+PGI+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPjQuIENPTU1FUkNJQUwgRElTVFJJQlVUSU9OPC9zcGFuPjwvYj4gPC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+Q29tbWVyY2lhbCBkaXN0cmlidXRvcnMgb2Ygc29mdHdhcmUgbWF5CithY2NlcHQgY2VydGFpbiByZXNwb25zaWJpbGl0aWVzIHdpdGggcmVzcGVjdCB0byBlbmQgdXNlcnMsIGJ1c2luZXNzIHBhcnRuZXJzCithbmQgdGhlIGxpa2UuIFdoaWxlIHRoaXMgbGljZW5zZSBpcyBpbnRlbmRlZCB0byBmYWNpbGl0YXRlIHRoZSBjb21tZXJjaWFsIHVzZQorb2YgdGhlIFByb2dyYW0sIHRoZSBDb250cmlidXRvciB3aG8gaW5jbHVkZXMgdGhlIFByb2dyYW0gaW4gYSBjb21tZXJjaWFsCitwcm9kdWN0IG9mZmVyaW5nIHNob3VsZCBkbyBzbyBpbiBhIG1hbm5lciB3aGljaCBkb2VzIG5vdCBjcmVhdGUgcG90ZW50aWFsCitsaWFiaWxpdHkgZm9yIG90aGVyIENvbnRyaWJ1dG9ycy4gVGhlcmVmb3JlLCBpZiBhIENvbnRyaWJ1dG9yIGluY2x1ZGVzIHRoZQorUHJvZ3JhbSBpbiBhIGNvbW1lcmNpYWwgcHJvZHVjdCBvZmZlcmluZywgc3VjaCBDb250cmlidXRvciAoJnF1b3Q7Q29tbWVyY2lhbAorQ29udHJpYnV0b3ImcXVvdDspIGhlcmVieSBhZ3JlZXMgdG8gZGVmZW5kIGFuZCBpbmRlbW5pZnkgZXZlcnkgb3RoZXIKK0NvbnRyaWJ1dG9yICgmcXVvdDtJbmRlbW5pZmllZCBDb250cmlidXRvciZxdW90OykgYWdhaW5zdCBhbnkgbG9zc2VzLCBkYW1hZ2VzIGFuZAorY29zdHMgKGNvbGxlY3RpdmVseSAmcXVvdDtMb3NzZXMmcXVvdDspIGFyaXNpbmcgZnJvbSBjbGFpbXMsIGxhd3N1aXRzIGFuZCBvdGhlcgorbGVnYWwgYWN0aW9ucyBicm91Z2h0IGJ5IGEgdGhpcmQgcGFydHkgYWdhaW5zdCB0aGUgSW5kZW1uaWZpZWQgQ29udHJpYnV0b3IgdG8KK3RoZSBleHRlbnQgY2F1c2VkIGJ5IHRoZSBhY3RzIG9yIG9taXNzaW9ucyBvZiBzdWNoIENvbW1lcmNpYWwgQ29udHJpYnV0b3IgaW4KK2Nvbm5lY3Rpb24gd2l0aCBpdHMgZGlzdHJpYnV0aW9uIG9mIHRoZSBQcm9ncmFtIGluIGEgY29tbWVyY2lhbCBwcm9kdWN0CitvZmZlcmluZy4gVGhlIG9ibGlnYXRpb25zIGluIHRoaXMgc2VjdGlvbiBkbyBub3QgYXBwbHkgdG8gYW55IGNsYWltcyBvciBMb3NzZXMKK3JlbGF0aW5nIHRvIGFueSBhY3R1YWwgb3IgYWxsZWdlZCBpbnRlbGxlY3R1YWwgcHJvcGVydHkgaW5mcmluZ2VtZW50LiBJbiBvcmRlcgordG8gcXVhbGlmeSwgYW4gSW5kZW1uaWZpZWQgQ29udHJpYnV0b3IgbXVzdDogYSkgcHJvbXB0bHkgbm90aWZ5IHRoZSBDb21tZXJjaWFsCitDb250cmlidXRvciBpbiB3cml0aW5nIG9mIHN1Y2ggY2xhaW0sIGFuZCBiKSBhbGxvdyB0aGUgQ29tbWVyY2lhbCBDb250cmlidXRvcgordG8gY29udHJvbCwgYW5kIGNvb3BlcmF0ZSB3aXRoIHRoZSBDb21tZXJjaWFsIENvbnRyaWJ1dG9yIGluLCB0aGUgZGVmZW5zZSBhbmQKK2FueSByZWxhdGVkIHNldHRsZW1lbnQgbmVnb3RpYXRpb25zLiBUaGUgSW5kZW1uaWZpZWQgQ29udHJpYnV0b3IgbWF5IHBhcnRpY2lwYXRlCitpbiBhbnkgc3VjaCBjbGFpbSBhdCBpdHMgb3duIGV4cGVuc2UuPC9zcGFuPiA8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5Gb3IgZXhhbXBsZSwgYSBDb250cmlidXRvciBtaWdodCBpbmNsdWRlIHRoZQorUHJvZ3JhbSBpbiBhIGNvbW1lcmNpYWwgcHJvZHVjdCBvZmZlcmluZywgUHJvZHVjdCBYLiBUaGF0IENvbnRyaWJ1dG9yIGlzIHRoZW4gYQorQ29tbWVyY2lhbCBDb250cmlidXRvci4gSWYgdGhhdCBDb21tZXJjaWFsIENvbnRyaWJ1dG9yIHRoZW4gbWFrZXMgcGVyZm9ybWFuY2UKK2NsYWltcywgb3Igb2ZmZXJzIHdhcnJhbnRpZXMgcmVsYXRlZCB0byBQcm9kdWN0IFgsIHRob3NlIHBlcmZvcm1hbmNlIGNsYWltcyBhbmQKK3dhcnJhbnRpZXMgYXJlIHN1Y2ggQ29tbWVyY2lhbCBDb250cmlidXRvcidzIHJlc3BvbnNpYmlsaXR5IGFsb25lLiBVbmRlciB0aGlzCitzZWN0aW9uLCB0aGUgQ29tbWVyY2lhbCBDb250cmlidXRvciB3b3VsZCBoYXZlIHRvIGRlZmVuZCBjbGFpbXMgYWdhaW5zdCB0aGUKK290aGVyIENvbnRyaWJ1dG9ycyByZWxhdGVkIHRvIHRob3NlIHBlcmZvcm1hbmNlIGNsYWltcyBhbmQgd2FycmFudGllcywgYW5kIGlmIGEKK2NvdXJ0IHJlcXVpcmVzIGFueSBvdGhlciBDb250cmlidXRvciB0byBwYXkgYW55IGRhbWFnZXMgYXMgYSByZXN1bHQsIHRoZQorQ29tbWVyY2lhbCBDb250cmlidXRvciBtdXN0IHBheSB0aG9zZSBkYW1hZ2VzLjwvc3Bhbj4gPC9wPgorCis8cD48Yj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+NS4gTk8gV0FSUkFOVFk8L3NwYW4+PC9iPiA8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5FWENFUFQgQVMgRVhQUkVTU0xZIFNFVCBGT1JUSCBJTiBUSElTCitBR1JFRU1FTlQsIFRIRSBQUk9HUkFNIElTIFBST1ZJREVEIE9OIEFOICZxdW90O0FTIElTJnF1b3Q7IEJBU0lTLCBXSVRIT1VUCitXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIEVJVEhFUiBFWFBSRVNTIE9SIElNUExJRUQgSU5DTFVESU5HLAorV0lUSE9VVCBMSU1JVEFUSU9OLCBBTlkgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIFRJVExFLCBOT04tSU5GUklOR0VNRU5ULAorTUVSQ0hBTlRBQklMSVRZIE9SIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBFYWNoIFJlY2lwaWVudCBpcyBzb2xlbHkKK3Jlc3BvbnNpYmxlIGZvciBkZXRlcm1pbmluZyB0aGUgYXBwcm9wcmlhdGVuZXNzIG9mIHVzaW5nIGFuZCBkaXN0cmlidXRpbmcgdGhlCitQcm9ncmFtIGFuZCBhc3N1bWVzIGFsbCByaXNrcyBhc3NvY2lhdGVkIHdpdGggaXRzIGV4ZXJjaXNlIG9mIHJpZ2h0cyB1bmRlciB0aGlzCitBZ3JlZW1lbnQgLCBpbmNsdWRpbmcgYnV0IG5vdCBsaW1pdGVkIHRvIHRoZSByaXNrcyBhbmQgY29zdHMgb2YgcHJvZ3JhbSBlcnJvcnMsCitjb21wbGlhbmNlIHdpdGggYXBwbGljYWJsZSBsYXdzLCBkYW1hZ2UgdG8gb3IgbG9zcyBvZiBkYXRhLCBwcm9ncmFtcyBvcgorZXF1aXBtZW50LCBhbmQgdW5hdmFpbGFiaWxpdHkgb3IgaW50ZXJydXB0aW9uIG9mIG9wZXJhdGlvbnMuIDwvc3Bhbj48L3A+CisKKzxwPjxiPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz42LiBESVNDTEFJTUVSIE9GIExJQUJJTElUWTwvc3Bhbj48L2I+IDwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkVYQ0VQVCBBUyBFWFBSRVNTTFkgU0VUIEZPUlRIIElOIFRISVMKK0FHUkVFTUVOVCwgTkVJVEhFUiBSRUNJUElFTlQgTk9SIEFOWSBDT05UUklCVVRPUlMgU0hBTEwgSEFWRSBBTlkgTElBQklMSVRZIEZPUgorQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisoSU5DTFVESU5HIFdJVEhPVVQgTElNSVRBVElPTiBMT1NUIFBST0ZJVFMpLCBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcKK05FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT1IgRElTVFJJQlVUSU9OIE9GCitUSEUgUFJPR1JBTSBPUiBUSEUgRVhFUkNJU0UgT0YgQU5ZIFJJR0hUUyBHUkFOVEVEIEhFUkVVTkRFUiwgRVZFTiBJRiBBRFZJU0VEIE9GCitUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLjwvc3Bhbj4gPC9wPgorCis8cD48Yj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+Ny4gR0VORVJBTDwvc3Bhbj48L2I+IDwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPklmIGFueSBwcm92aXNpb24gb2YgdGhpcyBBZ3JlZW1lbnQgaXMgaW52YWxpZAorb3IgdW5lbmZvcmNlYWJsZSB1bmRlciBhcHBsaWNhYmxlIGxhdywgaXQgc2hhbGwgbm90IGFmZmVjdCB0aGUgdmFsaWRpdHkgb3IKK2VuZm9yY2VhYmlsaXR5IG9mIHRoZSByZW1haW5kZXIgb2YgdGhlIHRlcm1zIG9mIHRoaXMgQWdyZWVtZW50LCBhbmQgd2l0aG91dAorZnVydGhlciBhY3Rpb24gYnkgdGhlIHBhcnRpZXMgaGVyZXRvLCBzdWNoIHByb3Zpc2lvbiBzaGFsbCBiZSByZWZvcm1lZCB0byB0aGUKK21pbmltdW0gZXh0ZW50IG5lY2Vzc2FyeSB0byBtYWtlIHN1Y2ggcHJvdmlzaW9uIHZhbGlkIGFuZCBlbmZvcmNlYWJsZS48L3NwYW4+IDwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPklmIFJlY2lwaWVudCBpbnN0aXR1dGVzIHBhdGVudCBsaXRpZ2F0aW9uCithZ2FpbnN0IGFueSBlbnRpdHkgKGluY2x1ZGluZyBhIGNyb3NzLWNsYWltIG9yIGNvdW50ZXJjbGFpbSBpbiBhIGxhd3N1aXQpCithbGxlZ2luZyB0aGF0IHRoZSBQcm9ncmFtIGl0c2VsZiAoZXhjbHVkaW5nIGNvbWJpbmF0aW9ucyBvZiB0aGUgUHJvZ3JhbSB3aXRoCitvdGhlciBzb2Z0d2FyZSBvciBoYXJkd2FyZSkgaW5mcmluZ2VzIHN1Y2ggUmVjaXBpZW50J3MgcGF0ZW50KHMpLCB0aGVuIHN1Y2gKK1JlY2lwaWVudCdzIHJpZ2h0cyBncmFudGVkIHVuZGVyIFNlY3Rpb24gMihiKSBzaGFsbCB0ZXJtaW5hdGUgYXMgb2YgdGhlIGRhdGUKK3N1Y2ggbGl0aWdhdGlvbiBpcyBmaWxlZC4gPC9zcGFuPjwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkFsbCBSZWNpcGllbnQncyByaWdodHMgdW5kZXIgdGhpcyBBZ3JlZW1lbnQKK3NoYWxsIHRlcm1pbmF0ZSBpZiBpdCBmYWlscyB0byBjb21wbHkgd2l0aCBhbnkgb2YgdGhlIG1hdGVyaWFsIHRlcm1zIG9yCitjb25kaXRpb25zIG9mIHRoaXMgQWdyZWVtZW50IGFuZCBkb2VzIG5vdCBjdXJlIHN1Y2ggZmFpbHVyZSBpbiBhIHJlYXNvbmFibGUKK3BlcmlvZCBvZiB0aW1lIGFmdGVyIGJlY29taW5nIGF3YXJlIG9mIHN1Y2ggbm9uY29tcGxpYW5jZS4gSWYgYWxsIFJlY2lwaWVudCdzCityaWdodHMgdW5kZXIgdGhpcyBBZ3JlZW1lbnQgdGVybWluYXRlLCBSZWNpcGllbnQgYWdyZWVzIHRvIGNlYXNlIHVzZSBhbmQKK2Rpc3RyaWJ1dGlvbiBvZiB0aGUgUHJvZ3JhbSBhcyBzb29uIGFzIHJlYXNvbmFibHkgcHJhY3RpY2FibGUuIEhvd2V2ZXIsCitSZWNpcGllbnQncyBvYmxpZ2F0aW9ucyB1bmRlciB0aGlzIEFncmVlbWVudCBhbmQgYW55IGxpY2Vuc2VzIGdyYW50ZWQgYnkKK1JlY2lwaWVudCByZWxhdGluZyB0byB0aGUgUHJvZ3JhbSBzaGFsbCBjb250aW51ZSBhbmQgc3Vydml2ZS4gPC9zcGFuPjwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkV2ZXJ5b25lIGlzIHBlcm1pdHRlZCB0byBjb3B5IGFuZCBkaXN0cmlidXRlCitjb3BpZXMgb2YgdGhpcyBBZ3JlZW1lbnQsIGJ1dCBpbiBvcmRlciB0byBhdm9pZCBpbmNvbnNpc3RlbmN5IHRoZSBBZ3JlZW1lbnQgaXMKK2NvcHlyaWdodGVkIGFuZCBtYXkgb25seSBiZSBtb2RpZmllZCBpbiB0aGUgZm9sbG93aW5nIG1hbm5lci4gVGhlIEFncmVlbWVudAorU3Rld2FyZCByZXNlcnZlcyB0aGUgcmlnaHQgdG8gcHVibGlzaCBuZXcgdmVyc2lvbnMgKGluY2x1ZGluZyByZXZpc2lvbnMpIG9mCit0aGlzIEFncmVlbWVudCBmcm9tIHRpbWUgdG8gdGltZS4gTm8gb25lIG90aGVyIHRoYW4gdGhlIEFncmVlbWVudCBTdGV3YXJkIGhhcwordGhlIHJpZ2h0IHRvIG1vZGlmeSB0aGlzIEFncmVlbWVudC4gVGhlIEVjbGlwc2UgRm91bmRhdGlvbiBpcyB0aGUgaW5pdGlhbAorQWdyZWVtZW50IFN0ZXdhcmQuIFRoZSBFY2xpcHNlIEZvdW5kYXRpb24gbWF5IGFzc2lnbiB0aGUgcmVzcG9uc2liaWxpdHkgdG8KK3NlcnZlIGFzIHRoZSBBZ3JlZW1lbnQgU3Rld2FyZCB0byBhIHN1aXRhYmxlIHNlcGFyYXRlIGVudGl0eS4gRWFjaCBuZXcgdmVyc2lvbgorb2YgdGhlIEFncmVlbWVudCB3aWxsIGJlIGdpdmVuIGEgZGlzdGluZ3Vpc2hpbmcgdmVyc2lvbiBudW1iZXIuIFRoZSBQcm9ncmFtCisoaW5jbHVkaW5nIENvbnRyaWJ1dGlvbnMpIG1heSBhbHdheXMgYmUgZGlzdHJpYnV0ZWQgc3ViamVjdCB0byB0aGUgdmVyc2lvbiBvZgordGhlIEFncmVlbWVudCB1bmRlciB3aGljaCBpdCB3YXMgcmVjZWl2ZWQuIEluIGFkZGl0aW9uLCBhZnRlciBhIG5ldyB2ZXJzaW9uIG9mCit0aGUgQWdyZWVtZW50IGlzIHB1Ymxpc2hlZCwgQ29udHJpYnV0b3IgbWF5IGVsZWN0IHRvIGRpc3RyaWJ1dGUgdGhlIFByb2dyYW0KKyhpbmNsdWRpbmcgaXRzIENvbnRyaWJ1dGlvbnMpIHVuZGVyIHRoZSBuZXcgdmVyc2lvbi4gRXhjZXB0IGFzIGV4cHJlc3NseSBzdGF0ZWQKK2luIFNlY3Rpb25zIDIoYSkgYW5kIDIoYikgYWJvdmUsIFJlY2lwaWVudCByZWNlaXZlcyBubyByaWdodHMgb3IgbGljZW5zZXMgdG8KK3RoZSBpbnRlbGxlY3R1YWwgcHJvcGVydHkgb2YgYW55IENvbnRyaWJ1dG9yIHVuZGVyIHRoaXMgQWdyZWVtZW50LCB3aGV0aGVyCitleHByZXNzbHksIGJ5IGltcGxpY2F0aW9uLCBlc3RvcHBlbCBvciBvdGhlcndpc2UuIEFsbCByaWdodHMgaW4gdGhlIFByb2dyYW0gbm90CitleHByZXNzbHkgZ3JhbnRlZCB1bmRlciB0aGlzIEFncmVlbWVudCBhcmUgcmVzZXJ2ZWQuPC9zcGFuPiA8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5UaGlzIEFncmVlbWVudCBpcyBnb3Zlcm5lZCBieSB0aGUgbGF3cyBvZiB0aGUKK1N0YXRlIG9mIE5ldyBZb3JrIGFuZCB0aGUgaW50ZWxsZWN0dWFsIHByb3BlcnR5IGxhd3Mgb2YgdGhlIFVuaXRlZCBTdGF0ZXMgb2YKK0FtZXJpY2EuIE5vIHBhcnR5IHRvIHRoaXMgQWdyZWVtZW50IHdpbGwgYnJpbmcgYSBsZWdhbCBhY3Rpb24gdW5kZXIgdGhpcworQWdyZWVtZW50IG1vcmUgdGhhbiBvbmUgeWVhciBhZnRlciB0aGUgY2F1c2Ugb2YgYWN0aW9uIGFyb3NlLiBFYWNoIHBhcnR5IHdhaXZlcworaXRzIHJpZ2h0cyB0byBhIGp1cnkgdHJpYWwgaW4gYW55IHJlc3VsdGluZyBsaXRpZ2F0aW9uLjwvc3Bhbj4gPC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWw+PCFbaWYgIXN1cHBvcnRFbXB0eVBhcmFzXT4mbmJzcDs8IVtlbmRpZl0+PG86cD48L286cD48L3A+CisKKzwvZGl2PgorCis8L2JvZHk+CisKKzwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZXMvbm90aWNlLmh0bWwgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZXMvbm90aWNlLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzZhZjk2NgotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlcy9ub3RpY2UuaHRtbApAQCAtMCwwICsxLDc5IEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wLy9FTiI+Cis8aHRtbD4KKzxoZWFkPgorPG1ldGEgaHR0cC1lcXVpdj1Db250ZW50LVR5cGUgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PWlzby04ODU5LTEiPgorPHRpdGxlPkVjbGlwc2Uub3JnIFNvZnR3YXJlIFVzZXIgQWdyZWVtZW50PC90aXRsZT4KKzwvaGVhZD4KKworPGJvZHkgbGFuZz0iRU4tVVMiIGxpbms9Ymx1ZSB2bGluaz1wdXJwbGU+Cis8aDI+RWNsaXBzZSBGb3VuZGF0aW9uIFNvZnR3YXJlIFVzZXIgQWdyZWVtZW50PC9oMj4KKzxwPk1hcmNoIDE3LCAyMDA1PC9wPgorCis8aDM+VXNhZ2UgT2YgQ29udGVudDwvaDM+CisKKzxwPlRIRSBFQ0xJUFNFIEZPVU5EQVRJT04gTUFLRVMgQVZBSUxBQkxFIFNPRlRXQVJFLCBET0NVTUVOVEFUSU9OLCBJTkZPUk1BVElPTiBBTkQvT1IgT1RIRVIgTUFURVJJQUxTIEZPUiBPUEVOIFNPVVJDRSBQUk9KRUNUUworICAgKENPTExFQ1RJVkVMWSAmcXVvdDtDT05URU5UJnF1b3Q7KS4gIFVTRSBPRiBUSEUgQ09OVEVOVCBJUyBHT1ZFUk5FRCBCWSBUSEUgVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgVEhJUyBBR1JFRU1FTlQgQU5EL09SIFRIRSBURVJNUyBBTkQKKyAgIENPTkRJVElPTlMgT0YgTElDRU5TRSBBR1JFRU1FTlRTIE9SIE5PVElDRVMgSU5ESUNBVEVEIE9SIFJFRkVSRU5DRUQgQkVMT1cuICBCWSBVU0lORyBUSEUgQ09OVEVOVCwgWU9VIEFHUkVFIFRIQVQgWU9VUiBVU0UKKyAgIE9GIFRIRSBDT05URU5UIElTIEdPVkVSTkVEIEJZIFRISVMgQUdSRUVNRU5UIEFORC9PUiBUSEUgVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgQU5ZIEFQUExJQ0FCTEUgTElDRU5TRSBBR1JFRU1FTlRTIE9SCisgICBOT1RJQ0VTIElORElDQVRFRCBPUiBSRUZFUkVOQ0VEIEJFTE9XLiAgSUYgWU9VIERPIE5PVCBBR1JFRSBUTyBUSEUgVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgVEhJUyBBR1JFRU1FTlQgQU5EIFRIRSBURVJNUyBBTkQKKyAgIENPTkRJVElPTlMgT0YgQU5ZIEFQUExJQ0FCTEUgTElDRU5TRSBBR1JFRU1FTlRTIE9SIE5PVElDRVMgSU5ESUNBVEVEIE9SIFJFRkVSRU5DRUQgQkVMT1csIFRIRU4gWU9VIE1BWSBOT1QgVVNFIFRIRSBDT05URU5ULjwvcD4KKyAgIAorPGgzPkFwcGxpY2FibGUgTGljZW5zZXM8L2gzPiAgIAorICAgCis8cD5Vbmxlc3Mgb3RoZXJ3aXNlIGluZGljYXRlZCwgYWxsIENvbnRlbnQgbWFkZSBhdmFpbGFibGUgYnkgdGhlIEVjbGlwc2UgRm91bmRhdGlvbiBpcyBwcm92aWRlZCB0byB5b3UgdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4wCisgICAoJnF1b3Q7RVBMJnF1b3Q7KS4gIEEgY29weSBvZiB0aGUgRVBMIGlzIHByb3ZpZGVkIHdpdGggdGhpcyBDb250ZW50IGFuZCBpcyBhbHNvIGF2YWlsYWJsZSBhdCA8YSBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbCI+aHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWw8L2E+LgorICAgRm9yIHB1cnBvc2VzIG9mIHRoZSBFUEwsICZxdW90O1Byb2dyYW0mcXVvdDsgd2lsbCBtZWFuIHRoZSBDb250ZW50LjwvcD4KKworPHA+Q29udGVudCBpbmNsdWRlcywgYnV0IGlzIG5vdCBsaW1pdGVkIHRvLCBzb3VyY2UgY29kZSwgb2JqZWN0IGNvZGUsIGRvY3VtZW50YXRpb24gYW5kIG90aGVyIGZpbGVzIG1haW50YWluZWQgaW4gdGhlIEVjbGlwc2Uub3JnIENWUyByZXBvc2l0b3J5ICgmcXVvdDtSZXBvc2l0b3J5JnF1b3Q7KSBpbiBDVlMKKyAgIG1vZHVsZXMgKCZxdW90O01vZHVsZXMmcXVvdDspIGFuZCBtYWRlIGF2YWlsYWJsZSBhcyBkb3dubG9hZGFibGUgYXJjaGl2ZXMgKCZxdW90O0Rvd25sb2FkcyZxdW90OykuPC9wPgorICAgCis8dWw+CisJPGxpPkNvbnRlbnQgbWF5IGJlIHN0cnVjdHVyZWQgYW5kIHBhY2thZ2VkIGludG8gbW9kdWxlcyB0byBmYWNpbGl0YXRlIGRlbGl2ZXJpbmcsIGV4dGVuZGluZywgYW5kIHVwZ3JhZGluZyB0aGUgQ29udGVudC4gIFR5cGljYWwgbW9kdWxlcyBtYXkgaW5jbHVkZSBwbHVnLWlucyAoJnF1b3Q7UGx1Zy1pbnMmcXVvdDspLCBwbHVnLWluIGZyYWdtZW50cyAoJnF1b3Q7RnJhZ21lbnRzJnF1b3Q7KSwgYW5kIGZlYXR1cmVzICgmcXVvdDtGZWF0dXJlcyZxdW90OykuPC9saT4KKwk8bGk+RWFjaCBQbHVnLWluIG9yIEZyYWdtZW50IG1heSBiZSBwYWNrYWdlZCBhcyBhIHN1Yi1kaXJlY3Rvcnkgb3IgSkFSIChKYXZhJnRyYWRlOyBBUmNoaXZlKSBpbiBhIGRpcmVjdG9yeSBuYW1lZCAmcXVvdDtwbHVnaW5zJnF1b3Q7LjwvbGk+CisJPGxpPkEgRmVhdHVyZSBpcyBhIGJ1bmRsZSBvZiBvbmUgb3IgbW9yZSBQbHVnLWlucyBhbmQvb3IgRnJhZ21lbnRzIGFuZCBhc3NvY2lhdGVkIG1hdGVyaWFsLiAgRWFjaCBGZWF0dXJlIG1heSBiZSBwYWNrYWdlZCBhcyBhIHN1Yi1kaXJlY3RvcnkgaW4gYSBkaXJlY3RvcnkgbmFtZWQgJnF1b3Q7ZmVhdHVyZXMmcXVvdDsuICBXaXRoaW4gYSBGZWF0dXJlLCBmaWxlcyBuYW1lZCAmcXVvdDtmZWF0dXJlLnhtbCZxdW90OyBtYXkgY29udGFpbiBhIGxpc3Qgb2YgdGhlIG5hbWVzIGFuZCB2ZXJzaW9uIG51bWJlcnMgb2YgdGhlIFBsdWctaW5zCisgICAgICBhbmQvb3IgRnJhZ21lbnRzIGFzc29jaWF0ZWQgd2l0aCB0aGF0IEZlYXR1cmUuPC9saT4KKwk8bGk+RmVhdHVyZXMgbWF5IGFsc28gaW5jbHVkZSBvdGhlciBGZWF0dXJlcyAoJnF1b3Q7SW5jbHVkZWQgRmVhdHVyZXMmcXVvdDspLiBXaXRoaW4gYSBGZWF0dXJlLCBmaWxlcyBuYW1lZCAmcXVvdDtmZWF0dXJlLnhtbCZxdW90OyBtYXkgY29udGFpbiBhIGxpc3Qgb2YgdGhlIG5hbWVzIGFuZCB2ZXJzaW9uIG51bWJlcnMgb2YgSW5jbHVkZWQgRmVhdHVyZXMuPC9saT4KKzwvdWw+ICAgCisgCis8cD5UaGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgZ292ZXJuaW5nIFBsdWctaW5zIGFuZCBGcmFnbWVudHMgc2hvdWxkIGJlIGNvbnRhaW5lZCBpbiBmaWxlcyBuYW1lZCAmcXVvdDthYm91dC5odG1sJnF1b3Q7ICgmcXVvdDtBYm91dHMmcXVvdDspLiBUaGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgZ292ZXJuaW5nIEZlYXR1cmVzIGFuZAorSW5jbHVkZWQgRmVhdHVyZXMgc2hvdWxkIGJlIGNvbnRhaW5lZCBpbiBmaWxlcyBuYW1lZCAmcXVvdDtsaWNlbnNlLmh0bWwmcXVvdDsgKCZxdW90O0ZlYXR1cmUgTGljZW5zZXMmcXVvdDspLiAgQWJvdXRzIGFuZCBGZWF0dXJlIExpY2Vuc2VzIG1heSBiZSBsb2NhdGVkIGluIGFueSBkaXJlY3Rvcnkgb2YgYSBEb3dubG9hZCBvciBNb2R1bGUKK2luY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvIHRoZSBmb2xsb3dpbmcgbG9jYXRpb25zOjwvcD4KKworPHVsPgorCTxsaT5UaGUgdG9wLWxldmVsIChyb290KSBkaXJlY3Rvcnk8L2xpPgorCTxsaT5QbHVnLWluIGFuZCBGcmFnbWVudCBkaXJlY3RvcmllczwvbGk+CisJPGxpPkluc2lkZSBQbHVnLWlucyBhbmQgRnJhZ21lbnRzIHBhY2thZ2VkIGFzIEpBUnM8L2xpPgorCTxsaT5TdWItZGlyZWN0b3JpZXMgb2YgdGhlIGRpcmVjdG9yeSBuYW1lZCAmcXVvdDtzcmMmcXVvdDsgb2YgY2VydGFpbiBQbHVnLWluczwvbGk+CisJPGxpPkZlYXR1cmUgZGlyZWN0b3JpZXM8L2xpPgorPC91bD4KKwkJCis8cD5Ob3RlOiBpZiBhIEZlYXR1cmUgbWFkZSBhdmFpbGFibGUgYnkgdGhlIEVjbGlwc2UgRm91bmRhdGlvbiBpcyBpbnN0YWxsZWQgdXNpbmcgdGhlIEVjbGlwc2UgVXBkYXRlIE1hbmFnZXIsIHlvdSBtdXN0IGFncmVlIHRvIGEgbGljZW5zZSAoJnF1b3Q7RmVhdHVyZSBVcGRhdGUgTGljZW5zZSZxdW90OykgZHVyaW5nIHRoZQoraW5zdGFsbGF0aW9uIHByb2Nlc3MuICBJZiB0aGUgRmVhdHVyZSBjb250YWlucyBJbmNsdWRlZCBGZWF0dXJlcywgdGhlIEZlYXR1cmUgVXBkYXRlIExpY2Vuc2Ugc2hvdWxkIGVpdGhlciBwcm92aWRlIHlvdSB3aXRoIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBnb3Zlcm5pbmcgdGhlIEluY2x1ZGVkIEZlYXR1cmVzIG9yCitpbmZvcm0geW91IHdoZXJlIHlvdSBjYW4gbG9jYXRlIHRoZW0uICBGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlcyBtYXkgYmUgZm91bmQgaW4gdGhlICZxdW90O2xpY2Vuc2UmcXVvdDsgcHJvcGVydHkgb2YgZmlsZXMgbmFtZWQgJnF1b3Q7ZmVhdHVyZS5wcm9wZXJ0aWVzJnF1b3Q7IGZvdW5kIHdpdGhpbiBhIEZlYXR1cmUuCitTdWNoIEFib3V0cywgRmVhdHVyZSBMaWNlbnNlcywgYW5kIEZlYXR1cmUgVXBkYXRlIExpY2Vuc2VzIGNvbnRhaW4gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIChvciByZWZlcmVuY2VzIHRvIHN1Y2ggdGVybXMgYW5kIGNvbmRpdGlvbnMpIHRoYXQgZ292ZXJuIHlvdXIgdXNlIG9mIHRoZSBhc3NvY2lhdGVkIENvbnRlbnQgaW4KK3RoYXQgZGlyZWN0b3J5LjwvcD4KKworPHA+VEhFIEFCT1VUUywgRkVBVFVSRSBMSUNFTlNFUywgQU5EIEZFQVRVUkUgVVBEQVRFIExJQ0VOU0VTIE1BWSBSRUZFUiBUTyBUSEUgRVBMIE9SIE9USEVSIExJQ0VOU0UgQUdSRUVNRU5UUywgTk9USUNFUyBPUiBURVJNUyBBTkQgQ09ORElUSU9OUy4gIFNPTUUgT0YgVEhFU0UKK09USEVSIExJQ0VOU0UgQUdSRUVNRU5UUyBNQVkgSU5DTFVERSAoQlVUIEFSRSBOT1QgTElNSVRFRCBUTyk6PC9wPgorCis8dWw+CisJPGxpPkNvbW1vbiBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMCAoYXZhaWxhYmxlIGF0IDxhIGhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvY3BsLXYxMC5odG1sIj5odHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2NwbC12MTAuaHRtbDwvYT4pPC9saT4KKwk8bGk+QXBhY2hlIFNvZnR3YXJlIExpY2Vuc2UgMS4xIChhdmFpbGFibGUgYXQgPGEgaHJlZj0iaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UiPmh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFPC9hPik8L2xpPgorCTxsaT5BcGFjaGUgU29mdHdhcmUgTGljZW5zZSAyLjAgKGF2YWlsYWJsZSBhdCA8YSBocmVmPSJodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAiPmh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMDwvYT4pPC9saT4KKwk8bGk+SUJNIFB1YmxpYyBMaWNlbnNlIDEuMCAoYXZhaWxhYmxlIGF0IDxhIGhyZWY9Imh0dHA6Ly9vc3Muc29mdHdhcmUuaWJtLmNvbS9kZXZlbG9wZXJ3b3Jrcy9vcGVuc291cmNlL2xpY2Vuc2UxMC5odG1sIj5odHRwOi8vb3NzLnNvZnR3YXJlLmlibS5jb20vZGV2ZWxvcGVyd29ya3Mvb3BlbnNvdXJjZS9saWNlbnNlMTAuaHRtbDwvYT4pPC9saT4JCisJPGxpPk1ldHJvIExpbmsgUHVibGljIExpY2Vuc2UgMS4wMCAoYXZhaWxhYmxlIGF0IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbmdyb3VwLm9yZy9vcGVubW90aWYvc3VwcG9ydGVycy9tZXRyb2xpbmsvbGljZW5zZS5odG1sIj5odHRwOi8vd3d3Lm9wZW5ncm91cC5vcmcvb3Blbm1vdGlmL3N1cHBvcnRlcnMvbWV0cm9saW5rL2xpY2Vuc2UuaHRtbDwvYT4pPC9saT4KKwk8bGk+TW96aWxsYSBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMSAoYXZhaWxhYmxlIGF0IDxhIGhyZWY9Imh0dHA6Ly93d3cubW96aWxsYS5vcmcvTVBML01QTC0xLjEuaHRtbCI+aHR0cDovL3d3dy5tb3ppbGxhLm9yZy9NUEwvTVBMLTEuMS5odG1sPC9hPik8L2xpPgorPC91bD4KKworPHA+SVQgSVMgWU9VUiBPQkxJR0FUSU9OIFRPIFJFQUQgQU5EIEFDQ0VQVCBBTEwgU1VDSCBURVJNUyBBTkQgQ09ORElUSU9OUyBQUklPUiBUTyBVU0UgT0YgVEhFIENPTlRFTlQuICBJZiBubyBBYm91dCwgRmVhdHVyZSBMaWNlbnNlLCBvciBGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlIGlzIHByb3ZpZGVkLCBwbGVhc2UKK2NvbnRhY3QgdGhlIEVjbGlwc2UgRm91bmRhdGlvbiB0byBkZXRlcm1pbmUgd2hhdCB0ZXJtcyBhbmQgY29uZGl0aW9ucyBnb3Zlcm4gdGhhdCBwYXJ0aWN1bGFyIENvbnRlbnQuPC9wPgorCis8aDM+Q3J5cHRvZ3JhcGh5PC9oMz4KKworPHA+Q29udGVudCBtYXkgY29udGFpbiBlbmNyeXB0aW9uIHNvZnR3YXJlLiBUaGUgY291bnRyeSBpbiB3aGljaCB5b3UgYXJlIGN1cnJlbnRseSBtYXkgaGF2ZSByZXN0cmljdGlvbnMgb24gdGhlIGltcG9ydCwgcG9zc2Vzc2lvbiwgYW5kIHVzZSwgYW5kL29yIHJlLWV4cG9ydCB0bworICAgYW5vdGhlciBjb3VudHJ5LCBvZiBlbmNyeXB0aW9uIHNvZnR3YXJlLiBCRUZPUkUgdXNpbmcgYW55IGVuY3J5cHRpb24gc29mdHdhcmUsIHBsZWFzZSBjaGVjayB0aGUgY291bnRyeSdzIGxhd3MsIHJlZ3VsYXRpb25zIGFuZCBwb2xpY2llcyBjb25jZXJuaW5nIHRoZSBpbXBvcnQsCisgICBwb3NzZXNzaW9uLCBvciB1c2UsIGFuZCByZS1leHBvcnQgb2YgZW5jcnlwdGlvbiBzb2Z0d2FyZSwgdG8gc2VlIGlmIHRoaXMgaXMgcGVybWl0dGVkLjwvcD4KKyAgIAorPHNtYWxsPkphdmEgYW5kIGFsbCBKYXZhLWJhc2VkIHRyYWRlbWFya3MgYXJlIHRyYWRlbWFya3Mgb2YgU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiBpbiB0aGUgVW5pdGVkIFN0YXRlcywgb3RoZXIgY291bnRyaWVzLCBvciBib3RoLjwvc21hbGw+ICAgCis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZXMvcGx1Z2luLnByb3BlcnRpZXMgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZXMvcGx1Z2luLnByb3BlcnRpZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODRjMmU0ZQotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlcy9wbHVnaW4ucHJvcGVydGllcwpAQCAtMCwwICsxLDQyIEBACisjLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyMgKiBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisjICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworIyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorIyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisjICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyMgKgorIyAqIENvbnRyaWJ1dG9yczoKKyMgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisjICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyMgRGlzZWFzZSBDYXRlZ29yaWVzCitwbHVnaW5OYW1lID0gU1RFTSBEaXNlYXNlcyBNb2RlbAorcHJvdmlkZXJOYW1lID0gRWNsaXBzZS5vcmcKKworX1VJX1NURU0gPSBTVEVNCitfVUlfQnVpbHRpbiA9IEJ1aWx0LWluCisKKyMgRHVibGluIENvcmUKK2RjX2NyZWF0b3JfZGFmb3JkID0gZGFmb3JkCitkY19jcmVhdG9yX2thdWZtYW4gPSBrYXVmbWFuCitkY19jcmVhdG9yX2VkbHVuZCA9IGVkbHVuZAorZGNfY3JlYXRvcl9kYXZpcyA9IGRhdmlzCitkY19wdWIgPSBFY2xpcHNlLm9yZworI2RjX2NyZWF0b3Jfa2F1Zm1hbiA9IGthdWZtYW4KK2RjX3NmbHVfZF9zZWlyX2Rlc2MgPSBQYW5kZW1pYyBEZW1vIChTRUlSKQorZGNfc2ZsdV9kX3NlaXJfdGl0bGUgPSBQYW5kZW1pYyBEZW1vCisKK2RjX2FnZ19zZWlyX2Rlc2MgPSBUaGlzICZxdW90O0Rpc2Vhc2UgTW9kZWwmcXVvdDsgYWdncmVnYXRlcyB0aGUgdmFsdWVzIHByb2R1Y2VkIGJ5IG90aGVyIFNFSVIgZGlzZWFzZSBtb2RlbHMgYWN0aW5nIG9uIEh1bWFuIHBvcHVsYXRpb25zLgorZGNfYWdnX3NlaXJfdGl0bGUgPSBBZ2dyZWdhdGluZyBTRUlSIEh1bWFuCisKK2RjX2luZl9tc2V4X2Rlc2MgPSBUaGlzIGlzIGFuICZxdW90O0luZmVjdG9yJnF1b3Q7IHRoYXQgaW5mZWN0cyB0ZW4gKDEwKSBIdW1hbnMgd2l0aCBhIFBhbmRlbWljIERlbW8gRGlzZWFzZSwgaW4gTWlkZGxlc2V4LCBNQSAKK2RjX2luZl9tc2V4X3RpdGxlID0gVGVuICgxMCkgSHVtYW5zIEluZmVjdGVkIHdpdGggYSBQYW5kZW1pYyBEZW1vIERpc2Vhc2UsIGluIE1pZGRsZXNleCwgTUEKKworZGNfZmx1X2Rfc2Vpcl9kZXNjID0gSW5mbHVlbnphIChTRUlSKQorZGNfZmx1X2Rfc2Vpcl90aXRsZSA9IEluZmx1ZW56YQorCitkY19zYW1fZF9zZWlyX2Rlc2MgPSBTYWxtb25lbGxhIChTRUlSKQorZGNfc2FtX2Rfc2Vpcl90aXRsZSA9IFNhbG1vbmVsbGEKKworZGNfc2hpZ19kX3NlaXJfZGVzYyA9IFNoaWdlbGxhIChTRUlSKQorZGNfc2hpZ19kX3NlaXJfdGl0bGUgPSBTaGlnZWxsYQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlcy9wbHVnaW4ueG1sIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2VzL3BsdWdpbi54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDFhYTE2MwotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlcy9wbHVnaW4ueG1sCkBAIC0wLDAgKzEsMjYgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8P2VjbGlwc2UgdmVyc2lvbj0iMy4yIj8+Cis8cGx1Z2luPgorICAgPGV4dGVuc2lvbgorICAgICAgICAgcG9pbnQ9Im9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5kaXNlYXNlIj4KKyAgICAgIDxzdGVtX2NhdGVnb3J5CisgICAgICAgICAgICBpZD0ib3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlcy5zdGVtIgorICAgICAgICAgICAgbmFtZT0iJV9VSV9TVEVNIgorICAgICAgICAgICAgcGFyZW50X2lkPSIvIi8+CisgICAgICA8c3RlbV9jYXRlZ29yeQorICAgICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZXMuc3RlbS5idWlsdGluIgorICAgICAgICAgICAgbmFtZT0iJV9VSV9CdWlsdGluIgorICAgICAgICAgICAgcGFyZW50X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2VzLnN0ZW0iLz4KKyAgICAgIDxkdWJsaW5fY29yZQorICAgICAgICAgICAgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZXMuc3RlbS5idWlsdGluIgorICAgICAgICAgICAgY3JlYXRlZD0iMjAwNy0wMi0xNSIKKyAgICAgICAgICAgIGNyZWF0b3I9IiVkY19jcmVhdG9yX2RhZm9yZCIKKyAgICAgICAgICAgIGRlc2NyaXB0aW9uPSIlZGNfZmx1X2Rfc2Vpcl9kZXNjIgorICAgICAgICAgICAgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9zdGFuZGFyZC5lY29yZSIKKyAgICAgICAgICAgIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlcy9yZXNvdXJjZXMvZGlzZWFzZXMvaW5mbHVlbnphX2RldGVybWluaXN0aWNfc2Vpci5zdGFuZGFyZCIKKyAgICAgICAgICAgIHB1Ymxpc2hlcj0iJWRjX3B1YiIKKyAgICAgICAgICAgIHRpdGxlPSIlZGNfZmx1X2Rfc2Vpcl90aXRsZSIvPgorICAgPC9leHRlbnNpb24+CisKKworPC9wbHVnaW4+CmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZXMvcGx1Z2luX2RlLnByb3BlcnRpZXMgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZXMvcGx1Z2luX2RlLnByb3BlcnRpZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzY4OWY0NAotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlcy9wbHVnaW5fZGUucHJvcGVydGllcwpAQCAtMCwwICsxLDQyIEBACisjLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyMgKiBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisjICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworIyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorIyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisjICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyMgKgorIyAqIENvbnRyaWJ1dG9yczoKKyMgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisjICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyMgRGlzZWFzZSBDYXRlZ29yaWVzCitwbHVnaW5OYW1lPVNURU0gS3JhbmtoZWl0ZW4tTW9kZWxsCitwcm92aWRlck5hbWU9RWNsaXBzZS5vcmcKKworX1VJX1NURU09U1RFTQorX1VJX0J1aWx0aW49RWluZ2ViYXV0CisKKyMgRHVibGluIENvcmUKK2RjX2NyZWF0b3JfZGFmb3JkPWRhZm9yZAorZGNfY3JlYXRvcl9rYXVmbWFuPUthdWZtYW4KK2RjX2NyZWF0b3JfZWRsdW5kPUVkbHVuZAorZGNfY3JlYXRvcl9kYXZpcz1kYXZpcworZGNfcHViPUVjbGlwc2Uub3JnCisjZGNfY3JlYXRvcl9rYXVmbWFuID0ga2F1Zm1hbgorZGNfc2ZsdV9kX3NlaXJfZGVzYz1QYW5kZW1pZSBEZW1vIChTRUlSKQorZGNfc2ZsdV9kX3NlaXJfdGl0bGU9UGFuZGVtaWUgRGVtbworCitkY19hZ2dfc2Vpcl9kZXNjPURpZXNlICJLcmFua2hlaXRzbW9kZWxsIiBzdW1taWVydCBkaWUgV2VydGUgdm9uIGFuZGVyZW4gU0VJUiBLcmFua2hlaXRzbW9kZWxsZW4gYXVmLCB3ZWxjaGUgYXVmIGRlciBtZW5zY2hsaWNoZW4gQmV2XHUwMGY2bGtlcnVuZyBvcGVyaWVyZW4uCitkY19hZ2dfc2Vpcl90aXRsZT1TRUlSIEh1bWFuIHdpcmQgYXVmc3VtbWllcnQKKworZGNfaW5mX21zZXhfZGVzYz1EaWVzIGlzdCBlaW4gIkluZml6aWVyZXIiLCBkZXIgemVobiAoMTApIE1lbnNjaGVuIG1pdCBlaW5lciBQYW5kZW1pZS1EZW1vLUtyYW5raGVpdCBpbmZpemllcnQsIGluIE1pZGRsZXNleCwgTUEKK2RjX2luZl9tc2V4X3RpdGxlPVplaG4gKDEwKSBNZW5zY2hlbiBtaXQgZWluZXIgUGFuZGVtaWUtRGVtby1LcmFua2hlaXQgaW5maXppZXJ0LCBpbiBNaWRkbGVzZXgsIE1BCisKK2RjX2ZsdV9kX3NlaXJfZGVzYz1JbmZsdWVuemEgKFNFSVIpCitkY19mbHVfZF9zZWlyX3RpdGxlPUluZmx1ZW56YQorCitkY19zYW1fZF9zZWlyX2Rlc2M9U2FsbW9uZWxsYSAoU0VJUikKK2RjX3NhbV9kX3NlaXJfdGl0bGU9U2FsbW9uZWxsYQorCitkY19zaGlnX2Rfc2Vpcl9kZXNjPVNoaWdlbGxhIChTRUlSKQorZGNfc2hpZ19kX3NlaXJfdGl0bGU9U2hpZ2VsbGEKZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlcy9wbHVnaW5fa3IucHJvcGVydGllcyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlcy9wbHVnaW5fa3IucHJvcGVydGllcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iN2VlNGVjCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2VzL3BsdWdpbl9rci5wcm9wZXJ0aWVzCkBAIC0wLDAgKzEsNDIgQEAKKyMvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIyAqIENvcHlyaWdodCAoYykgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyMgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisjICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisjICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyMgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorIyAqCisjICogQ29udHJpYnV0b3JzOgorIyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworIyBEaXNlYXNlIENhdGVnb3JpZXMKK3BsdWdpbk5hbWU9U1RFTSBcdWM5YzhcdWJjZDEgXHViYWE4XHViMzc4Citwcm92aWRlck5hbWU9RWNsaXBzZS5vcmcKKworX1VJX1NURU09U1RFTQorX1VJX0J1aWx0aW49XHVkM2VjXHVkNTY4XHViNDFjCisKKyMgRHVibGluIENvcmUKK2RjX2NyZWF0b3JfZGFmb3JkPWRhZm9yZAorZGNfY3JlYXRvcl9rYXVmbWFuPVx1Y2U3NFx1ZDUwNFx1YjllOAorZGNfY3JlYXRvcl9lZGx1bmQ9XHVjNWQwXHViNGU0XHViN2YwXHViNGRjCitkY19jcmVhdG9yX2RhdmlzPVx1YjM3MFx1Yzc3NFx1YmU0NFx1YzJhNAorZGNfcHViPUVjbGlwc2Uub3JnCisjZGNfY3JlYXRvcl9rYXVmbWFuID0ga2F1Zm1hbgorZGNfc2ZsdV9kX3NlaXJfZGVzYz1cdWM4MDRcdWM1ZmNcdWJjZDEgXHViMzcwXHViYWE4IChTRUlSKQorZGNfc2ZsdV9kX3NlaXJfdGl0bGU9XHVjODA0XHVjNWZjXHViY2QxIFx1YjM3MFx1YmFhOAorCitkY19hZ2dfc2Vpcl9kZXNjPVx1Yzc3NCAmcXVvdDtcdWM5YzhcdWJjZDEgXHViYWE4XHViMzc4JnF1b3Q7XHViMjk0IFx1Yzc3OFx1YWQ2Y1x1YzVkMCBcdWM2MDFcdWQ1YTVcdWM3NDQgXHVjOGZjXHViMjk0IFx1YjJlNFx1Yjk3OCBTRUlSIFx1YzljOFx1YmNkMSBcdWJhYThcdWIzNzhcdWM1ZDBcdWMxMWMgXHVjMGIwXHVjZDljXHViNDFjIFx1YWMxMlx1Yzc0NCBcdWQxYjVcdWQ1NjlcdWQ1NjgKK2RjX2FnZ19zZWlyX3RpdGxlPVNFSVIgXHVjNzc4XHVhYzA0XHVjNzQ0IFx1ZDFiNVx1ZDU2OQorCitkY19pbmZfbXNleF9kZXNjPVx1Yzc3NFx1YWM4M1x1Yzc0MCBcdWJiZjhcdWI0ZTRcdWMxMzlcdWMyYTQsIFx1YjllNFx1YzBhY1x1Y2Q5NFx1YzEzOFx1Y2UyMFx1YzhmY1x1Yzc1OCBcdWM4ZmNcdWJiZmMgXHVjNWY0XHViYTg1XHVjNzQ0IFx1YWMxMFx1YzVmY1x1ZDU1YyAmcXVvdDtcdWM2MjRcdWM1ZmNcdWM2ZDAmcXVvdDtcdWM3ODQKK2RjX2luZl9tc2V4X3RpdGxlPVx1YmJmOFx1YjRlNFx1YzEzOVx1YzJhNCwgTUFcdWM1ZDAgXHVjNzIwXHVkNTg5XHVjMTMxIFx1YjM3MFx1YmFhOCBcdWM5YzhcdWJjZDFcdWM1ZDAgXHVjODA0XHVjNWZjXHViNDFjIDEwXHViYTg1CisKK2RjX2ZsdV9kX3NlaXJfZGVzYz1cdWM3NzhcdWQ1MGNcdWI4ZThcdWM1ZDRcdWM3OTAgKFNFSVIpCitkY19mbHVfZF9zZWlyX3RpdGxlPVx1Yzc3OFx1ZDUwY1x1YjhlOFx1YzVkNFx1Yzc5MAorCitkY19zYW1fZF9zZWlyX2Rlc2M9XHVjMGI0XHViYWE4XHViMTJjXHViNzdjXHVhZGUwIChTRUlSKQorZGNfc2FtX2Rfc2Vpcl90aXRsZT1cdWMwYjRcdWJhYThcdWIxMmNcdWI3N2NcdWFkZTAKKworZGNfc2hpZ19kX3NlaXJfZGVzYz1cdWMyZGNcdWFjOTRcdWI3N2MgKFNFSVIpCitkY19zaGlnX2Rfc2Vpcl90aXRsZT1cdWMyZGNcdWFjOTRcdWI3N2MKZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlcy9wbHVnaW5femgucHJvcGVydGllcyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlcy9wbHVnaW5femgucHJvcGVydGllcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNGU2N2EyCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2VzL3BsdWdpbl96aC5wcm9wZXJ0aWVzCkBAIC0wLDAgKzEsNDIgQEAKKyMvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIyAqIENvcHlyaWdodCAoYykgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyMgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisjICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisjICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyMgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorIyAqCisjICogQ29udHJpYnV0b3JzOgorIyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworIyBEaXNlYXNlIENhdGVnb3JpZXMKK3BsdWdpbk5hbWU9U1RFTVx1NzViZVx1NzVjNVx1NmEyMVx1NTc4YgorcHJvdmlkZXJOYW1lPUVjbGlwc2Uub3JnCisKK19VSV9TVEVNPVNURU0KK19VSV9CdWlsdGluPVx1NTE4NVx1N2Y2ZQorCisjIER1YmxpbiBDb3JlCitkY19jcmVhdG9yX2RhZm9yZD1EYWZvcmQKK2RjX2NyZWF0b3Jfa2F1Zm1hbj1LYXVmbWFuCitkY19jcmVhdG9yX2VkbHVuZD1FZGx1bmQKK2RjX2NyZWF0b3JfZGF2aXM9RGF2aXMKK2RjX3B1Yj1FY2xpcHNlLm9yZworI2RjX2NyZWF0b3Jfa2F1Zm1hbiA9IGthdWZtYW4KK2RjX3NmbHVfZF9zZWlyX2Rlc2M9XHU2ZDQxXHU4ODRjXHU3NWM1XHU2ZjE0XHU3OTNhXHVmZjA4U0VJUlx1ZmYwOQorZGNfc2ZsdV9kX3NlaXJfdGl0bGU9XHU2ZDQxXHU4ODRjXHU3NWM1XHU2ZjE0XHU3OTNhCisKK2RjX2FnZ19zZWlyX2Rlc2M9XHU4ZmQ5XHU2NjJmXHU0ZTAwXHU0ZTJhXHU3NWJlXHU3NWM1XHU2YTIxXHU1NzhiXHVmZjBjXHU3ZDJmXHU1MmEwXHU0ZTg2XHU1MTc2XHU0ZWQ2XHU1N2ZhXHU0ZThlXHU0ZWJhXHU3YzdiXHU3OWNkXHU3ZmE0XHU3Njg0U0VJUlx1NmEyMVx1NTc4Ylx1NzUxZlx1NjIxMFx1NzY4NFx1NjU3MFx1NjM2ZVx1MzAwMgorZGNfYWdnX3NlaXJfdGl0bGU9XHU4MDVhXHU1NDA4U0VJUlx1NGViYQorCitkY19pbmZfbXNleF9kZXNjPVx1OGZkOVx1NjYyZlx1NGUwMFx1NGUyYVx1NGYyMFx1NjdkM1x1NTY2OFx1ZmYwY1x1ODBmZFx1NTkxZlx1NTcyOE1pZGRsZXNleCwgTUFcdThmZDlcdTRlMmFcdTU3MzBcdTY1YjlcdTc2ODRcdTZkNDFcdTg4NGNcdTc1YzVcdTgzMDNcdTRmOGJcdTZhMjFcdTU3OGJcdTRlMmRcdTRmMjBcdTY3ZDMxMFx1NGUyYVx1NGViYVx1MzAwMgorZGNfaW5mX21zZXhfdGl0bGU9MTBcdTRlMmFcdTRlYmFcdTU3MjhcdTlhNmNcdThkNWJcdThiZjhcdTU4NWVcdTc2ODRcdTdjNzNcdTVmYjdcdTU4NWVcdTc5ZDFcdTY1YWZcdTg4YWJcdTZkNDFcdTYxMWZcdTZhMjFcdTYyZGZcdTc1YzVcdTZiZDJcdTYxMWZcdTY3ZDMKKworZGNfZmx1X2Rfc2Vpcl9kZXNjPVx1NmQ0MVx1NjExZlx1ZmYwOFNFSVJcdWZmMDkKK2RjX2ZsdV9kX3NlaXJfdGl0bGU9XHU2ZDQxXHU2MTFmCisKK2RjX3NhbV9kX3NlaXJfZGVzYz1cdTZjOTlcdTk1ZThcdTZjMGZcdTgzY2NcdWZmMDhTRUlSXHVmZjA5CitkY19zYW1fZF9zZWlyX3RpdGxlPVx1NmM5OVx1OTVlOFx1NmMwZlx1ODNjYworCitkY19zaGlnX2Rfc2Vpcl9kZXNjPVx1NzVlMlx1NzViZVx1Njc0Nlx1ODNjY1x1ZmYwOFNFSVJcdWZmMDkKK2RjX3NoaWdfZF9zZWlyX3RpdGxlPVx1NzVlMlx1NzViZVx1Njc0Nlx1ODNjYwpkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2VzL3Jlc291cmNlcy9kaXNlYXNlcy9pbmZsdWVuemFfZGV0ZXJtaW5pc3RpY19zZWlyLnN0YW5kYXJkIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2VzL3Jlc291cmNlcy9kaXNlYXNlcy9pbmZsdWVuemFfZGV0ZXJtaW5pc3RpY19zZWlyLnN0YW5kYXJkCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQyZTdmY2IKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZXMvcmVzb3VyY2VzL2Rpc2Vhc2VzL2luZmx1ZW56YV9kZXRlcm1pbmlzdGljX3NlaXIuc3RhbmRhcmQKQEAgLTAsMCArMSw0IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJBU0NJSSI/PgorPG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZDpEZXRlcm1pbmlzdGljU0VJUkRpc2Vhc2VNb2RlbCB4bWk6dmVyc2lvbj0iMi4wIiB4bWxuczp4bWk9Imh0dHA6Ly93d3cub21nLm9yZy9YTUkiIHhtbG5zOm9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvc3RhbmRhcmQuZWNvcmUiIHVSST0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2VzL3Jlc291cmNlcy9kaXNlYXNlcy9pbmZsdWVuemFfZGV0ZXJtaW5pc3RpY19zZWlyLnN0YW5kYXJkIiB0eXBlVVJJPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vaWRlbnRpZmlhYmxlMSIgZGlzZWFzZU5hbWU9IkluZmx1ZW56YSIgdHJhbnNtaXNzaW9uUmF0ZT0iMS4wIiBub25MaW5lYXJpdHlDb2VmZmljaWVudD0iMS4wIiByZWNvdmVyeVJhdGU9IjAuMTc1IiBpbmZlY3Rpb3VzTW9ydGFsaXR5UmF0ZT0iMC4wIiBjaGFyYWN0ZXJpc3RpY01peGluZ0Rpc3RhbmNlPSIyLjI1IiBpbmN1YmF0aW9uUmF0ZT0iMC42NyI+CisgIDxkdWJsaW5Db3JlIHRpdGxlPSJEZW1vIERldGVybWluaXN0aWMgU0VJUiIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2VzL3Jlc291cmNlcy9kaXNlYXNlcy9pbmZsdWVuemFfZGV0ZXJtaW5pc3RpY19zZWlyLnN0YW5kYXJkIiBkZXNjcmlwdGlvbj0iMSBNb2RlbCBEZWNvcmF0b3IiIGNyZWF0b3I9ImRhZm9yZCIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9zdGFuZGFyZC5lY29yZSIvPgorPC9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQ6RGV0ZXJtaW5pc3RpY1NFSVJEaXNlYXNlTW9kZWw+CmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZXMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZXMvQWN0aXZhdG9yLmphdmEgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZXMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZXMvQWN0aXZhdG9yLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGIzZjAyZAotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlcy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlcy9BY3RpdmF0b3IuamF2YQpAQCAtMCwwICsxLDYzIEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZXM7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBsdWdpbjsKK2ltcG9ydCBvcmcub3NnaS5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dDsKKworLyoqCisgKiBUaGUgYWN0aXZhdG9yIGNsYXNzIGNvbnRyb2xzIHRoZSBwbHVnLWluIGxpZmUgY3ljbGUKKyAqLworcHVibGljIGNsYXNzIEFjdGl2YXRvciBleHRlbmRzIFBsdWdpbiB7CisKKwkvKioKKwkgKiBUaGUgcGx1Zy1pbiBJRAorCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFBMVUdJTl9JRCA9ICJvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2VzIjsgLy8kTk9OLU5MUy0xJAorCisJLy8gVGhlIHNoYXJlZCBpbnN0YW5jZQorCXByaXZhdGUgc3RhdGljIEFjdGl2YXRvciBwbHVnaW47CisJCisJLyoqCisJICogVGhlIGNvbnN0cnVjdG9yCisJICovCisJcHVibGljIEFjdGl2YXRvcigpIHsKKwkJcGx1Z2luID0gdGhpczsKKwl9CisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QbHVnaW4jc3RhcnQob3JnLm9zZ2kuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHQpCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgc3RhcnQoQnVuZGxlQ29udGV4dCBjb250ZXh0KSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJc3VwZXIuc3RhcnQoY29udGV4dCk7CisJfQorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGx1Z2luI3N0b3Aob3JnLm9zZ2kuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHQpCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgc3RvcChCdW5kbGVDb250ZXh0IGNvbnRleHQpIHRocm93cyBFeGNlcHRpb24geworCQlwbHVnaW4gPSBudWxsOworCQlzdXBlci5zdG9wKGNvbnRleHQpOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIHNoYXJlZCBpbnN0YW5jZQorCSAqCisJICogQHJldHVybiB0aGUgc2hhcmVkIGluc3RhbmNlCisJICovCisJcHVibGljIHN0YXRpYyBBY3RpdmF0b3IgZ2V0RGVmYXVsdCgpIHsKKwkJcmV0dXJuIHBsdWdpbjsKKwl9CisKK30gLy8gQWN0aXZhdG9yCmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uaW50ZXJuYWwuZGlzZWFzZW1vZGVscy5tb2RlbHMvLmNsYXNzcGF0aCBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcm5hbC5kaXNlYXNlbW9kZWxzLm1vZGVscy8uY2xhc3NwYXRoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMwNGU4NjEKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uaW50ZXJuYWwuZGlzZWFzZW1vZGVscy5tb2RlbHMvLmNsYXNzcGF0aApAQCAtMCwwICsxLDcgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8Y2xhc3NwYXRoPgorCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJzcmMiIHBhdGg9InNyYyIvPgorCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJjb24iIHBhdGg9Im9yZy5lY2xpcHNlLmpkdC5sYXVuY2hpbmcuSlJFX0NPTlRBSU5FUi9vcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwuZGVidWcudWkubGF1bmNoZXIuU3RhbmRhcmRWTVR5cGUvSjJTRS0xLjUiLz4KKwk8Y2xhc3NwYXRoZW50cnkga2luZD0iY29uIiBwYXRoPSJvcmcuZWNsaXBzZS5wZGUuY29yZS5yZXF1aXJlZFBsdWdpbnMiLz4KKwk8Y2xhc3NwYXRoZW50cnkga2luZD0ib3V0cHV0IiBwYXRoPSJiaW4iLz4KKzwvY2xhc3NwYXRoPgpkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmludGVybmFsLmRpc2Vhc2Vtb2RlbHMubW9kZWxzLy5jdnNpZ25vcmUgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uaW50ZXJuYWwuZGlzZWFzZW1vZGVscy5tb2RlbHMvLmN2c2lnbm9yZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YzU5NWE2Ci0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmludGVybmFsLmRpc2Vhc2Vtb2RlbHMubW9kZWxzLy5jdnNpZ25vcmUKQEAgLTAsMCArMSBAQAordGVtcApkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmludGVybmFsLmRpc2Vhc2Vtb2RlbHMubW9kZWxzLy5wcm9qZWN0IGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmludGVybmFsLmRpc2Vhc2Vtb2RlbHMubW9kZWxzLy5wcm9qZWN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFmNDYxN2UKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uaW50ZXJuYWwuZGlzZWFzZW1vZGVscy5tb2RlbHMvLnByb2plY3QKQEAgLTAsMCArMSwyOCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxwcm9qZWN0RGVzY3JpcHRpb24+CisJPG5hbWU+b3JnLmVjbGlwc2Uuc3RlbS5pbnRlcm5hbC5kaXNlYXNlbW9kZWxzLm1vZGVsczwvbmFtZT4KKwk8Y29tbWVudD48L2NvbW1lbnQ+CisJPHByb2plY3RzPgorCTwvcHJvamVjdHM+CisJPGJ1aWxkU3BlYz4KKwkJPGJ1aWxkQ29tbWFuZD4KKwkJCTxuYW1lPm9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFidWlsZGVyPC9uYW1lPgorCQkJPGFyZ3VtZW50cz4KKwkJCTwvYXJndW1lbnRzPgorCQk8L2J1aWxkQ29tbWFuZD4KKwkJPGJ1aWxkQ29tbWFuZD4KKwkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5NYW5pZmVzdEJ1aWxkZXI8L25hbWU+CisJCQk8YXJndW1lbnRzPgorCQkJPC9hcmd1bWVudHM+CisJCTwvYnVpbGRDb21tYW5kPgorCQk8YnVpbGRDb21tYW5kPgorCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLlNjaGVtYUJ1aWxkZXI8L25hbWU+CisJCQk8YXJndW1lbnRzPgorCQkJPC9hcmd1bWVudHM+CisJCTwvYnVpbGRDb21tYW5kPgorCTwvYnVpbGRTcGVjPgorCTxuYXR1cmVzPgorCQk8bmF0dXJlPm9yZy5lY2xpcHNlLnBkZS5QbHVnaW5OYXR1cmU8L25hdHVyZT4KKwkJPG5hdHVyZT5vcmcuZWNsaXBzZS5qZHQuY29yZS5qYXZhbmF0dXJlPC9uYXR1cmU+CisJPC9uYXR1cmVzPgorPC9wcm9qZWN0RGVzY3JpcHRpb24+CmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uaW50ZXJuYWwuZGlzZWFzZW1vZGVscy5tb2RlbHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmludGVybmFsLmRpc2Vhc2Vtb2RlbHMubW9kZWxzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNGI2MmNhCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmludGVybmFsLmRpc2Vhc2Vtb2RlbHMubW9kZWxzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcwpAQCAtMCwwICsxLDIxIEBACisjVHVlIFNlcCAwMSAxNjo1OTo1MCBFRFQgMjAwOQorZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvZGVnZW4uaW5saW5lSnNyQnl0ZWNvZGU9ZW5hYmxlZAorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29kZWdlbi50YXJnZXRQbGF0Zm9ybT0xLjUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvbXBsaWFuY2U9MS41CitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5kb2MuY29tbWVudC5zdXBwb3J0PWRpc2FibGVkCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmFzc2VydElkZW50aWZpZXI9ZXJyb3IKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZW51bUlkZW50aWZpZXI9ZXJyb3IKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW52YWxpZEphdmFkb2M9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbnZhbGlkSmF2YWRvY1RhZ3M9ZW5hYmxlZAorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbnZhbGlkSmF2YWRvY1RhZ3NEZXByZWNhdGVkUmVmPWVuYWJsZWQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW52YWxpZEphdmFkb2NUYWdzTm90VmlzaWJsZVJlZj1lbmFibGVkCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmludmFsaWRKYXZhZG9jVGFnc1Zpc2liaWxpdHk9cHVibGljCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdKYXZhZG9jQ29tbWVudHM9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nSmF2YWRvY0NvbW1lbnRzT3ZlcnJpZGluZz1lbmFibGVkCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdKYXZhZG9jQ29tbWVudHNWaXNpYmlsaXR5PXB1YmxpYworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nSmF2YWRvY1RhZ0Rlc2NyaXB0aW9uPXJldHVybl90YWcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0phdmFkb2NUYWdzPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0phdmFkb2NUYWdzT3ZlcnJpZGluZz1lbmFibGVkCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdKYXZhZG9jVGFnc1Zpc2liaWxpdHk9cHVibGljCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5zb3VyY2U9MS41CmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uaW50ZXJuYWwuZGlzZWFzZW1vZGVscy5tb2RlbHMvTUVUQS1JTkYvTUFOSUZFU1QuTUYgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uaW50ZXJuYWwuZGlzZWFzZW1vZGVscy5tb2RlbHMvTUVUQS1JTkYvTUFOSUZFU1QuTUYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjljNTg5OQotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcm5hbC5kaXNlYXNlbW9kZWxzLm1vZGVscy9NRVRBLUlORi9NQU5JRkVTVC5NRgpAQCAtMCwwICsxLDE5IEBACitNYW5pZmVzdC1WZXJzaW9uOiAxLjAKK0J1bmRsZS1NYW5pZmVzdFZlcnNpb246IDIKK0J1bmRsZS1OYW1lOiBTVEVNIEludGVybmFsIERpc2Vhc2UgTW9kZWxzCitCdW5kbGUtU3ltYm9saWNOYW1lOiBvcmcuZWNsaXBzZS5zdGVtLmludGVybmFsLmRpc2Vhc2Vtb2RlbHMubW9kZWxzCitCdW5kbGUtVmVyc2lvbjogMS4yLjEKK1JlcXVpcmUtQnVuZGxlOiBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUsCisgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLAorIG9yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHksCisgb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmRpc2Vhc2Vtb2RlbHMubW9kZWxzLAorIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscywKKyBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMsCisgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlcywKKyBvcmcuZWNsaXBzZS5zdGVtLmludGVybmFsLmRhdGEsCisgb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcm5hbC5kYXRhLmdlb2dyYXBoeSwKKyBvcmcuZWNsaXBzZS5zdGVtLmludGVybmFsLmRhdGEuZ2VvZ3JhcGh5Lm1vZGVscywKKyBvcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5LnBvcHVsYXRpb24uaHVtYW4ubW9kZWxzCitCdW5kbGUtUmVxdWlyZWRFeGVjdXRpb25FbnZpcm9ubWVudDogSjJTRS0xLjUKK0J1bmRsZS1BY3RpdmF0aW9uUG9saWN5OiBsYXp5CitCdW5kbGUtVmVuZG9yOiBFY2xpcHNlLm9yZwpkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmludGVybmFsLmRpc2Vhc2Vtb2RlbHMubW9kZWxzL2J1aWxkLnByb3BlcnRpZXMgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uaW50ZXJuYWwuZGlzZWFzZW1vZGVscy5tb2RlbHMvYnVpbGQucHJvcGVydGllcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNGQyZTRkCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmludGVybmFsLmRpc2Vhc2Vtb2RlbHMubW9kZWxzL2J1aWxkLnByb3BlcnRpZXMKQEAgLTAsMCArMSw0IEBACitzb3VyY2UuLiA9IHNyYy8KK291dHB1dC4uID0gYmluLworYmluLmluY2x1ZGVzID0gTUVUQS1JTkYvLFwKKyAgICAgICAgICAgICAgIC4KZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcm5hbC5kaXNlYXNlbW9kZWxzLm1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9pbnRlcm5hbC9kYXRhL3NwZWNpZmljYXRpb25zL0Rpc2Vhc2VNb2RlbE1vZGVsU3BlY2lmaWNhdGlvbi5qYXZhIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmludGVybmFsLmRpc2Vhc2Vtb2RlbHMubW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2ludGVybmFsL2RhdGEvc3BlY2lmaWNhdGlvbnMvRGlzZWFzZU1vZGVsTW9kZWxTcGVjaWZpY2F0aW9uLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2EyM2Q5YQotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcm5hbC5kaXNlYXNlbW9kZWxzLm1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9pbnRlcm5hbC9kYXRhL3NwZWNpZmljYXRpb25zL0Rpc2Vhc2VNb2RlbE1vZGVsU3BlY2lmaWNhdGlvbi5qYXZhCkBAIC0wLDAgKzEsMjExIEBACisvLyBEaXNlYXNlTW9kZWxNb2RlbFNwZWNpZmljYXRpb24uamF2YQorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmludGVybmFsLmRhdGEuc3BlY2lmaWNhdGlvbnM7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDkgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgamF2YS5pby5GaWxlOworaW1wb3J0IGphdmEudXRpbC5NYXA7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuVVJJOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5wbHVnaW4uRWNvcmVQbHVnaW47CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLlV0aWxpdHk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLk1vZGVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5Nb2RlbFBhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS5JU09LZXk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLkRpc2Vhc2VNb2RlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmRQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uaW50ZXJuYWwuZGF0YS5nZW5lcmF0ZWRwbHVnaW4uRHVibGluQ29yZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmludGVybmFsLmRhdGEuZ2VvZ3JhcGh5LnNwZWNpZmljYXRpb25zLkFkbWluTGV2ZWxTZXQ7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcm5hbC5kYXRhLmdlb2dyYXBoeS5zcGVjaWZpY2F0aW9ucy5Db3VudHJ5R3JhcGhQcm9wZXJ0eUZpbGVTcGVjaWZpY2F0aW9uOworCisvKioKKyAqIFRoaXMgY2xhc3MgcmVwcmVzZW50cyBhIHtAbGluayBNb2RlbFNwZWNpZmljYXRpb259IGZvciBhIERpc2Vhc2UgbW9kZWwuCisgKi8KK3B1YmxpYyBjbGFzcyBEaXNlYXNlTW9kZWxNb2RlbFNwZWNpZmljYXRpb24gZXh0ZW5kcyBNb2RlbFNwZWNpZmljYXRpb24KKwkJaW1wbGVtZW50cyBDb21wYXJhYmxlPERpc2Vhc2VNb2RlbE1vZGVsU3BlY2lmaWNhdGlvbj4geworCisJLyoqCisJICogVGhpcyBpcyByZWZlcmVuY2VkIHRvIGNhdXNlIHRoZSB7QGxpbmsgTW9kZWxQYWNrYWdlfSB0byByZWdpc3RlciBpdHNlbGYKKwkgKiBhcyBhIHBhY2thZ2UuCisJICovCisJQFN1cHByZXNzV2FybmluZ3MoInVudXNlZCIpCisJcHJpdmF0ZSBmaW5hbCBNb2RlbFBhY2thZ2UgbW9kZWxQYWNrYWdlID0gTW9kZWxQYWNrYWdlLmVJTlNUQU5DRTsKKwlAU3VwcHJlc3NXYXJuaW5ncygidW51c2VkIikKKwlwcml2YXRlIGZpbmFsIFN0YW5kYXJkUGFja2FnZSBzdGFuZGFyZFBhY2thZ2UgPSBTdGFuZGFyZFBhY2thZ2UuZUlOU1RBTkNFOworCisJcHJpdmF0ZSBmaW5hbCBEdWJsaW5Db3JlIHBvcHVsYXRpb25Nb2RlbERDOworCUBTdXBwcmVzc1dhcm5pbmdzKCJ1bnVzZWQiKQorCXByaXZhdGUgZmluYWwgRHVibGluQ29yZSBkaXNlYXNlTW9kZWxEQzsKKworCXByaXZhdGUgZmluYWwgRGlzZWFzZU1vZGVsIGRpc2Vhc2VNb2RlbDsKKwkKKwlwcml2YXRlIGZpbmFsIElTT0tleSBpc29LZXk7CisJcHJpdmF0ZSBmaW5hbCBBZG1pbkxldmVsU2V0IGFkbWluTGV2ZWxTZXQ7CisJcHJpdmF0ZSBmaW5hbCBTdHJpbmcgZGlzZWFzZU5hbWU7CisKKwlzdGF0aWMgeworCQkvLyBUaGlzIHNldHMgdXAgdGhlIG1hcHBpbmcgYmV0d2VlbiB0aGUgInBsYXRmb3JtIiBVUkkncyBhbmQgdGhlCisJCS8vIHByb2plY3RzIGluIHRoZSBmaWxlIHN5c3RlbS4KKworCQkvLyBDV0QgaXMgdGhlIGN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnkKKwkJZmluYWwgU3RyaW5nIENXRCA9IFN5c3RlbS5nZXRQcm9wZXJ0eSgidXNlci5kaXIiKTsgLy8kTk9OLU5MUy0xJAorCQkvLyBXT1JLU1BBQ0UgaXMgdGhlIGRpcmVjdG9yeSBvZiB0aGUgcGFyZW50IHdvcmtzcGFjZQorCQlmaW5hbCBTdHJpbmcgV09SS1NQQUNFID0gQ1dELnN1YnN0cmluZygwLCBDV0QKKwkJCQkubGFzdEluZGV4T2YoRmlsZS5zZXBhcmF0b3IpKTsKKworCQkvLyBUaGUgcGF0aCB0byB0aGUgZ2VuZXJhdGVkIHBvcHVsYXRpb24gZGF0YSBwcm9qZWN0CisJCWZpbmFsIFN0cmluZyBIVU1BTl9QT1BVTEFUSU9OX01PREVMU19QUk9KRUNUX1JPT1QgPSBXT1JLU1BBQ0UKKwkJCQkrIEZpbGUuc2VwYXJhdG9yCisJCQkJKyBvcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5LnBvcHVsYXRpb24uaHVtYW4ubW9kZWxzLkFjdGl2YXRvci5QTFVHSU5fSUQKKwkJCQkrIEZpbGUuc2VwYXJhdG9yOworCisJCS8vIFRoZSBwYXRoIHRvIHRoZSBkaXNlYXNlcyBwcm9qZWN0CisJCWZpbmFsIFN0cmluZyBESVNFQVNFU19QUk9KRUNUX1JPT1QgPSBXT1JLU1BBQ0UgKyBGaWxlLnNlcGFyYXRvcgorCQkJCSsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlcy5BY3RpdmF0b3IuUExVR0lOX0lECisJCQkJKyBGaWxlLnNlcGFyYXRvcjsKKworCQlmaW5hbCBNYXA8U3RyaW5nLCBVUkk+IHBsYXRmb3JtUmVzb3VyY2VNYXAgPSBFY29yZVBsdWdpbgorCQkJCS5nZXRQbGF0Zm9ybVJlc291cmNlTWFwKCk7CisKKwkJLy8gUmVnaXN0ZXIgdGhlIG1hcHBpbmcgYmV0d2VlbiB0aGUgcHJvamVjdCBpZCBhbmQgdGhlIGFic29sdXRlIHBhdGggdG8KKwkJLy8gdGhlIHByb2plY3QgaW4gdGhlIGZpbGUgc3lzdGVtLiBUaGlzIHdpbGwgYmUgZm91bmQgbGF0ZXIgd2hlbgorCQkvLyBkZXNlcmlhbGl6aW5nIHdoZW4gdGhlIHBsYXRmb3JtIFVSSSBpcyBtYXBwZWQuCisKKwkJcGxhdGZvcm1SZXNvdXJjZU1hcAorCQkJCS5wdXQoCisJCQkJCQlvcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5LnBvcHVsYXRpb24uaHVtYW4ubW9kZWxzLkFjdGl2YXRvci5QTFVHSU5fSUQsCisJCQkJCQlVUkkuY3JlYXRlRmlsZVVSSShIVU1BTl9QT1BVTEFUSU9OX01PREVMU19QUk9KRUNUX1JPT1QpKTsKKworCQlwbGF0Zm9ybVJlc291cmNlTWFwLnB1dCgKKwkJCQlvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2VzLkFjdGl2YXRvci5QTFVHSU5fSUQsIFVSSQorCQkJCQkJLmNyZWF0ZUZpbGVVUkkoRElTRUFTRVNfUFJPSkVDVF9ST09UKSk7CisJfSAvLyBzdGF0aWMKKworCS8qKgorCSAqIEBwYXJhbSBpc29LZXkKKwkgKiAgICAgICAgICAgIHRoZSB7QGxpbmsgSVNPS2V5fSBmb3IgYSBzaW5nbGUgcmVnaW9uCisJICogQHBhcmFtIGxldmVsU2V0CisJICogICAgICAgICAgICB0aGUge0BsaW5rIEFkbWluTGV2ZWxTZXR9IGNvdmVyZWQKKwkgKiBAcGFyYW0gcG9wdWxhdGlvbk1vZGVsREMKKwkgKiAgICAgICAgICAgIHtAbGluayBEdWJsaW5Db3JlfSBpbnN0YW5jZSB0aGF0IGRlc2NyaWJlcyB0aGUgcG9wdWxhdGlvbgorCSAqICAgICAgICAgICAgbW9kZWwKKwkgKiBAcGFyYW0gZGlzZWFzZU1vZGVsREMKKwkgKiAgICAgICAgICAgIHtAbGluayBEdWJsaW5Db3JlfSBpbnN0YW5jZSB0aGF0IGRlc2NyaWJlcyBhIGRpc2Vhc2UgbW9kZWwKKwkgKiBAcGFyYW0gZGlzZWFzZU1vZGVsIAorCSAqLworCXB1YmxpYyBEaXNlYXNlTW9kZWxNb2RlbFNwZWNpZmljYXRpb24oSVNPS2V5IGlzb0tleSwKKwkJCUFkbWluTGV2ZWxTZXQgbGV2ZWxTZXQsIER1YmxpbkNvcmUgcG9wdWxhdGlvbk1vZGVsREMsCisJCQlEdWJsaW5Db3JlIGRpc2Vhc2VNb2RlbERDLCBmaW5hbCBEaXNlYXNlTW9kZWwgZGlzZWFzZU1vZGVsKSB7CisJCXRoaXMuaXNvS2V5ID0gaXNvS2V5OworCQl0aGlzLmFkbWluTGV2ZWxTZXQgPSBsZXZlbFNldDsKKwkJdGhpcy5wb3B1bGF0aW9uTW9kZWxEQyA9IHBvcHVsYXRpb25Nb2RlbERDOworCQl0aGlzLmRpc2Vhc2VNb2RlbERDID0gZGlzZWFzZU1vZGVsREM7CisJCXRoaXMuZGlzZWFzZU1vZGVsID0gZGlzZWFzZU1vZGVsOworCQl0aGlzLmRpc2Vhc2VOYW1lID0gZGlzZWFzZU1vZGVsLmdldERpc2Vhc2VOYW1lKCk7CisJfSAvLyBEaXNlYXNlTW9kZWxNb2RlbFNwZWNpZmljYXRpb24KKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcm5hbC5kYXRhLnNwZWNpZmljYXRpb25zLk1vZGVsU3BlY2lmaWNhdGlvbiNjcmVhdGVJZGVudGlmaWFibGVJbnN0YW5jZSgpCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIE1vZGVsIGNyZWF0ZUlkZW50aWZpYWJsZUluc3RhbmNlKCkgeworCQlmaW5hbCBNb2RlbCByZXRWYWx1ZSA9IHN1cGVyLmNyZWF0ZUlkZW50aWZpYWJsZUluc3RhbmNlKCk7CisJCS8vIFRoZSBnZW5lcmF0ZWQgR3JhcGhzIGV0Yy4sIGFsbCBoYXZlIGR1YmxpbiBjb3JlIHRoYXQgcmVmZXJlbmNlcworCQkvLyB0aGVtIGFzIHBsdWdpbnMuIFRoaXMgaXMgYXMgaXQgc2hvdWxkIGJlIHdoZW4gU1RFTSBpcyBydW5uaW5nLAorCQkvLyBidXQgcmlnaHQgbm93IHdlJ3JlIHJ1bm5pbmcgc3RhbmQtYWxvbmUgYW5kIHdhbnQgdG8gYWNjZXNzIHRoZQorCQkvLyBwbHVnaW5zIGFzIHByb2plY3RzICh0aGV5IGFyZW4ndCBwbHVnZ2VkIGludG8gb3VyIHJ1bm5pbmcgdmVyc2lvbgorCQkvLyBvZiBFY2xpcHNlKS4gU3Vic3RpdHV0ZSAicmVzb3VyY2UiIGZvciAicGx1Z2luIiBpbiB0aGUgVVJJJ3Mgd2UKKwkJLy8gdXNlIGFuZCBhbGwgd2lsbCBiZSB3ZWxsLgorCisJCXJldFZhbHVlCisJCQkJLmdldE1vZGVscygpCisJCQkJLmFkZCgKKwkJCQkJCShNb2RlbCkgVXRpbGl0eQorCQkJCQkJCQkuZ2V0SWRlbnRpZmlhYmxlKGdldElkZW50aWZpYWJsZVByb2plY3RVUkkocG9wdWxhdGlvbk1vZGVsREMpKSk7CisJCQorCQlyZXRWYWx1ZS5nZXROb2RlRGVjb3JhdG9ycygpLmFkZChkaXNlYXNlTW9kZWwpOworCQlyZXR1cm4gcmV0VmFsdWU7CisJfSAvLyBjcmVhdGVJZGVudGlmaWFibGVJbnN0YW5jZQorCisJcHVibGljIGludCBjb21wYXJlVG8oRGlzZWFzZU1vZGVsTW9kZWxTcGVjaWZpY2F0aW9uIHBtcykgeworCQlyZXR1cm4gYWRtaW5MZXZlbFNldC5nZXROdW1BZG1pbkxldmVscygpID4gcG1zLmFkbWluTGV2ZWxTZXQKKwkJCQkuZ2V0TnVtQWRtaW5MZXZlbHMoKSA/IDEgOiAtMTsKKwl9IC8vIGNvbXBhcmVUbworCisJLyoqCisJICogQHNlZSBqYXZhLmxhbmcuT2JqZWN0I3RvU3RyaW5nKCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkgeworCQlmaW5hbCBTdHJpbmdCdWlsZGVyIHNiID0gbmV3IFN0cmluZ0J1aWxkZXIoKTsKKwkJc2IuYXBwZW5kKGlzb0tleSk7CisJCXNiLmFwcGVuZCgiOiIpOyAvLyROT04tTkxTLTEkCisJCXNiLmFwcGVuZChkaXNlYXNlTmFtZSk7CisJCXNiLmFwcGVuZCgiICIpOyAvLyROT04tTkxTLTEkCisJCXNiLmFwcGVuZChhZG1pbkxldmVsU2V0LnRvU3RyaW5nKCkpOworCQlyZXR1cm4gc2IudG9TdHJpbmcoKTsKKwl9IC8vIHRvU3RyaW5nCisKKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgU3RyaW5nIGdldFJlbGF0aXZlU2VyaWFsaXphdGlvblBhdGgoKSB7CisJCWZpbmFsIFN0cmluZ0J1aWxkZXIgc2IgPSBuZXcgU3RyaW5nQnVpbGRlcigpOworCQlzYi5hcHBlbmQoQ291bnRyeUdyYXBoUHJvcGVydHlGaWxlU3BlY2lmaWNhdGlvbi5DT1VOVFJZX0RJUik7CisJCXNiLmFwcGVuZChGaWxlLnNlcGFyYXRvckNoYXIpOworCQlzYi5hcHBlbmQoaXNvS2V5LnRvU3RyaW5nKCkpOworCQlyZXR1cm4gc2IudG9TdHJpbmcoKTsKKwl9CisKKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgU3RyaW5nIGdldFNlcmlhbGl6YXRpb25GaWxlTmFtZVJvb3QoKSB7CisJCWZpbmFsIFN0cmluZ0J1aWxkZXIgc2IgPSBuZXcgU3RyaW5nQnVpbGRlcihpc29LZXkudG9TdHJpbmcoKSk7CisJCXNiLmFwcGVuZCgiXyIpOyAvLyROT04tTkxTLTEkCisJCXNiLmFwcGVuZChhZG1pbkxldmVsU2V0LnRvU3RyaW5nKCkpOworCQlzYi5hcHBlbmQoIl9kaXNlYXNlXyIpOyAvLyROT04tTkxTLTEkCisJCXNiLmFwcGVuZChkaXNlYXNlTmFtZS5yZXBsYWNlKCIgIiwgIl8iKSk7ICAvLyROT04tTkxTLTEkLy8kTk9OLU5MUy0yJAorCQlyZXR1cm4gc2IudG9TdHJpbmcoKTsKKwl9CisKKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgU3RyaW5nIGdldFRhcmdldFBsdWdpbklkKCkgeworCQlyZXR1cm4gb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmRpc2Vhc2Vtb2RlbHMubW9kZWxzLkFjdGl2YXRvci5QTFVHSU5fSUQ7CisJfQorCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIFN0cmluZyBnZXRUaXRsZURlc2NyaXB0b3IoKSB7CisJCWZpbmFsIFN0cmluZ0J1aWxkZXIgc2IgPSBuZXcgU3RyaW5nQnVpbGRlcihpc29LZXkudG9TdHJpbmcoKSk7CisJCXNiLmFwcGVuZCgiIERpc2Vhc2UgIik7IC8vJE5PTi1OTFMtMSQKKwkJc2IuYXBwZW5kKGRpc2Vhc2VOYW1lKTsKKwkJc2IKKwkJCQkuYXBwZW5kKGFkbWluTGV2ZWxTZXQuZ2V0TnVtQWRtaW5MZXZlbHMoKSA+IDEgPyAiIChMZXZlbHM6ICIgOiAiIChMZXZlbDogIik7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAorCQlzYi5hcHBlbmQoYWRtaW5MZXZlbFNldC50b1N0cmluZygiLCIpKTsgLy8kTk9OLU5MUy0xJAorCQlzYi5hcHBlbmQoIikiKTsgLy8kTk9OLU5MUy0xJAorCQlyZXR1cm4gc2IudG9TdHJpbmcoKTsKKwl9CisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uaW50ZXJuYWwuZGF0YS5zcGVjaWZpY2F0aW9ucy5JZGVudGlmaWFibGVTcGVjaWZpY2F0aW9uI2NyZWF0ZUR1YmluQ29yZUNvdmVyYWdlKCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgU3RyaW5nIGNyZWF0ZUR1YmluQ29yZUNvdmVyYWdlKCkgeworCQlyZXR1cm4gcG9wdWxhdGlvbk1vZGVsREMuZ2V0Q292ZXJhZ2UoKTsKKwl9CisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uaW50ZXJuYWwuZGF0YS5zcGVjaWZpY2F0aW9ucy5JZGVudGlmaWFibGVTcGVjaWZpY2F0aW9uI2NyZWF0ZUR1YmluQ29yZVN1YmplY3QoKQorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCBTdHJpbmcgY3JlYXRlRHViaW5Db3JlU3ViamVjdCgpIHsKKwkJcmV0dXJuIEdyYXBoUHJvcGVydHlGaWxlU3BlY2lmaWNhdGlvbi5jcmVhdGVEdWJsaW5Db3JlU3ViamVjdFN0cmluZygKKwkJCQlNb2RlbFBhY2thZ2UuTGl0ZXJhbHMuTU9ERUwuZ2V0TmFtZSgpLCAiZGlzZWFzZSIpOyAvLyROT04tTkxTLTEkCisJfQorCit9IC8vIERpc2Vhc2VNb2RlbE1vZGVsU3BlY2lmaWNhdGlvbgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcm5hbC5kaXNlYXNlbW9kZWxzLm1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9pbnRlcm5hbC9kaXNlYXNlbW9kZWxzL21vZGVscy9EaXNlYXNlTW9kZWxNb2RlbEdlbmVyYXRvci5qYXZhIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmludGVybmFsLmRpc2Vhc2Vtb2RlbHMubW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2ludGVybmFsL2Rpc2Vhc2Vtb2RlbHMvbW9kZWxzL0Rpc2Vhc2VNb2RlbE1vZGVsR2VuZXJhdG9yLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjc4ZjFjZgotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcm5hbC5kaXNlYXNlbW9kZWxzLm1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9pbnRlcm5hbC9kaXNlYXNlbW9kZWxzL21vZGVscy9EaXNlYXNlTW9kZWxNb2RlbEdlbmVyYXRvci5qYXZhCkBAIC0wLDAgKzEsMjY5IEBACisvLyBEaXNlYXNlTW9kZWxNb2RlbEdlbmVyYXRvci5qYXZhCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uaW50ZXJuYWwuZGlzZWFzZW1vZGVscy5tb2RlbHM7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDkgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgamF2YS5pby5GaWxlOworaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247CitpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuTWFwOworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlVSSTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUucGx1Z2luLkVjb3JlUGx1Z2luOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5Db25zdGFudHM7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLlV0aWxpdHk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5JZGVudGlmaWFibGU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLk1vZGVsUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5LklTT0tleTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuQWdncmVnYXRpbmdTSURpc2Vhc2VNb2RlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuRGlzZWFzZU1vZGVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZFBhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcm5hbC5kYXRhLk1vZGVsR2VuZXJhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uaW50ZXJuYWwuZGF0YS5QbHVnaW5GaWxlR2VuZXJhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uaW50ZXJuYWwuZGF0YS5nZW5lcmF0ZWRwbHVnaW4uRHVibGluQ29yZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmludGVybmFsLmRhdGEuZ2VuZXJhdGVkcGx1Z2luLkV4dGVuc2lvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmludGVybmFsLmRhdGEuZ2VuZXJhdGVkcGx1Z2luLkdlbmVyYXRlZHBsdWdpbkZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcm5hbC5kYXRhLmdlbmVyYXRlZHBsdWdpbi5QbHVnaW47CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcm5hbC5kYXRhLmdlbmVyYXRlZHBsdWdpbi5TdGVtQ2F0ZWdvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcm5hbC5kYXRhLmdlb2dyYXBoeS5tb2RlbHMuR2VvZ3JhcGh5TW9kZWxHZW5lcmF0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcm5hbC5kYXRhLmdlb2dyYXBoeS5zcGVjaWZpY2F0aW9ucy5BZG1pbkxldmVsU2V0OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uaW50ZXJuYWwuZGF0YS5nZW9ncmFwaHkuc3BlY2lmaWNhdGlvbnMuQ291bnRyeUdyYXBoUHJvcGVydHlGaWxlU3BlY2lmaWNhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmludGVybmFsLmRhdGEuc3BlY2lmaWNhdGlvbnMuRGlzZWFzZU1vZGVsTW9kZWxTcGVjaWZpY2F0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uaW50ZXJuYWwuZGF0YS5zcGVjaWZpY2F0aW9ucy5JZGVudGlmaWFibGVTcGVjaWZpY2F0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uaW50ZXJuYWwuZGF0YS5zcGVjaWZpY2F0aW9ucy5Nb2RlbFNwZWNpZmljYXRpb247CisKKy8qKgorICogVGhpcyBjbGFzcyBwcm9jZXNzZXMgdGhlIGdlbmVyYXRlZCBwb3B1bGF0aW9uIG1vZGVsIGZpbGVzIHRvIGNyZWF0ZSBEaXNlYXNlCisgKiBtb2RlbCBtb2RlbHMuCisgKi8KK3B1YmxpYyBjbGFzcyBEaXNlYXNlTW9kZWxNb2RlbEdlbmVyYXRvciBleHRlbmRzIEdlb2dyYXBoeU1vZGVsR2VuZXJhdG9yIHsKKworCUBTdXBwcmVzc1dhcm5pbmdzKCJ1bnVzZWQiKQorCXByaXZhdGUgZmluYWwgU3RhbmRhcmRQYWNrYWdlIHN0YW5kYXJkUGFja2FnZSA9IFN0YW5kYXJkUGFja2FnZS5lSU5TVEFOQ0U7CisJQFN1cHByZXNzV2FybmluZ3MoInVudXNlZCIpCisJcHJpdmF0ZSBmaW5hbCBNb2RlbFBhY2thZ2UgbW9kZWxQYWNrYWdlID0gTW9kZWxQYWNrYWdlLmVJTlNUQU5DRTsKKworCXN0YXRpYyB7CisJCS8vIFRoaXMgc2V0cyB1cCB0aGUgbWFwcGluZyBiZXR3ZWVuIHRoZSAicGxhdGZvcm0iIFVSSSdzIGFuZCB0aGUKKwkJLy8gcHJvamVjdHMgaW4gdGhlIGZpbGUgc3lzdGVtLgorCisJCS8vIENXRCBpcyB0aGUgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeQorCQlmaW5hbCBTdHJpbmcgQ1dEID0gU3lzdGVtLmdldFByb3BlcnR5KCJ1c2VyLmRpciIpOyAvLyROT04tTkxTLTEkCisJCS8vIFdPUktTUEFDRSBpcyB0aGUgZGlyZWN0b3J5IG9mIHRoZSBwYXJlbnQgd29ya3NwYWNlCisJCWZpbmFsIFN0cmluZyBXT1JLU1BBQ0UgPSBDV0Quc3Vic3RyaW5nKDAsIENXRAorCQkJCS5sYXN0SW5kZXhPZihGaWxlLnNlcGFyYXRvcikpOworCisJCS8vIFRoZSBwYXRoIHRvIHRoZSBnZW5lcmF0ZWQgcG9wdWxhdGlvbiBkYXRhIHByb2plY3QKKwkJZmluYWwgU3RyaW5nIEhVTUFOX1BPUFVMQVRJT05fTU9ERUxTX1BST0pFQ1RfUk9PVCA9IFdPUktTUEFDRQorCQkJCSsgRmlsZS5zZXBhcmF0b3IKKwkJCQkrIG9yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkucG9wdWxhdGlvbi5odW1hbi5tb2RlbHMuQWN0aXZhdG9yLlBMVUdJTl9JRAorCQkJCSsgRmlsZS5zZXBhcmF0b3I7CisKKwkJLy8gVGhlIHBhdGggdG8gdGhlIGRpc2Vhc2VzIHByb2plY3QKKwkJZmluYWwgU3RyaW5nIERJU0VBU0VTX1BST0pFQ1RfUk9PVCA9IFdPUktTUEFDRSArIEZpbGUuc2VwYXJhdG9yCisJCQkJKyBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2VzLkFjdGl2YXRvci5QTFVHSU5fSUQKKwkJCQkrIEZpbGUuc2VwYXJhdG9yOworCisJCWZpbmFsIE1hcDxTdHJpbmcsIFVSST4gcGxhdGZvcm1SZXNvdXJjZU1hcCA9IEVjb3JlUGx1Z2luCisJCQkJLmdldFBsYXRmb3JtUmVzb3VyY2VNYXAoKTsKKworCQkvLyBSZWdpc3RlciB0aGUgbWFwcGluZyBiZXR3ZWVuIHRoZSBwcm9qZWN0IGlkIGFuZCB0aGUgYWJzb2x1dGUgcGF0aCB0bworCQkvLyB0aGUgcHJvamVjdCBpbiB0aGUgZmlsZSBzeXN0ZW0uIFRoaXMgd2lsbCBiZSBmb3VuZCBsYXRlciB3aGVuCisJCS8vIGRlc2VyaWFsaXppbmcgd2hlbiB0aGUgcGxhdGZvcm0gVVJJIGlzIG1hcHBlZC4KKworCQlwbGF0Zm9ybVJlc291cmNlTWFwCisJCQkJLnB1dCgKKwkJCQkJCW9yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkucG9wdWxhdGlvbi5odW1hbi5tb2RlbHMuQWN0aXZhdG9yLlBMVUdJTl9JRCwKKwkJCQkJCVVSSS5jcmVhdGVGaWxlVVJJKEhVTUFOX1BPUFVMQVRJT05fTU9ERUxTX1BST0pFQ1RfUk9PVCkpOworCisJCXBsYXRmb3JtUmVzb3VyY2VNYXAucHV0KAorCQkJCW9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZXMuQWN0aXZhdG9yLlBMVUdJTl9JRCwgVVJJCisJCQkJCQkuY3JlYXRlRmlsZVVSSShESVNFQVNFU19QUk9KRUNUX1JPT1QpKTsKKwl9IC8vIHN0YXRpYworCisJLyoqCisJICogVGhlIGlkIG9mIHRoZSBEaXNlYXNlIE1vZGVsIGNhdGVnb3J5CisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgSURfTU9ERUxfRElTRUFTRV9DQVRFR09SWSA9IFBsdWdpbkZpbGVHZW5lcmF0b3IuSURfTU9ERUxfQ0FURUdPUlkKKwkJCSsgIi5kaXNlYXNlIjsgLy8kTk9OLU5MUy0xJAorCisJLyoqCisJICogQHBhcmFtIGFyZ3MKKwkgKiAgICAgICAgICAgIFswXSB0aGUgVVJJIG9mIHRoZSBnZW5lcmF0ZWQgcG9wdWxhdGlvbiBtb2RlbCBwbHVnaW4ueG1sIGZpbGUKKwkgKiAgICAgICAgICAgIFsxXSB0aGUgbmFtZSBvZiB0aGUgcHJvamVjdCB3aXRoIHRoZSBwb3B1bGF0aW9uIG1vZGVscyBbMl0gdGhlCisJICogICAgICAgICAgICBuYW1lIG9mIHRoZSBwcm9qZWN0IHdpdGggdGhlIGRpc2Vhc2UgbW9kZWxzCisJICovCisJcHVibGljIHN0YXRpYyB2b2lkIG1haW4oZmluYWwgU3RyaW5nW10gYXJncykgeworCQkvLyBJcyB0aGUgcGx1Z2luIGZpbGUgc3BlY2lmaWVkPworCQlpZiAoYXJncy5sZW5ndGggPT0gMCkgeworCQkJLy8gWWVzCisJCQlTeXN0ZW0uZXJyLnByaW50bG4oIk1pc3Npbmcgc3BlY2lmaWNhdGlvbiBvZiB0aGUgcGx1Z2luIGZpbGUiKTsgLy8kTk9OLU5MUy0xJAorCQl9IC8vIGlmCisJCWVsc2UgeworCisJCQlmaW5hbCBTdHJpbmcgR0VORVJBVEVEX0ZJTEVTX1BBVEggPSBhcmdzWzBdOworCisJCQlmaW5hbCBTdHJpbmcgcG9wdWxhdGlvbk1vZGVsUHJvamVjdE5hbWUgPSBhcmdzWzFdOworCQkJZmluYWwgU3RyaW5nIGRpc2Vhc2VNb2RlbFByb2plY3ROYW1lID0gYXJnc1syXTsKKworCQkJZmluYWwgU3RyaW5nIEdFTkVSQVRFRF9NT0RFTFNfUEFUSCA9IEdFTkVSQVRFRF9GSUxFU19QQVRICisJCQkJCSsgRmlsZS5zZXBhcmF0b3IgKyAicmVzb3VyY2VzIiArIEZpbGUuc2VwYXJhdG9yICsgImRhdGEiOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKKworCQkJZmluYWwgRmlsZSBwb3B1bGF0aW9uTW9kZWxQbHVnaW5GaWxlID0gbmV3IEZpbGUoCisJCQkJCSIuLiIJKyBGaWxlLnNlcGFyYXRvciArIHBvcHVsYXRpb25Nb2RlbFByb2plY3ROYW1lICsgRmlsZS5zZXBhcmF0b3IgKyBQbHVnaW5GaWxlR2VuZXJhdG9yLlBMVUdJTl9YTUxfRklMRV9OQU1FKTsgLy8kTk9OLU5MUy0xJAorCQkJZmluYWwgVVJJIHBvcHVsYXRpb25Nb2RlbFBsdWdpbkZpbGVVUkkgPSBVUkkKKwkJCQkJLmNyZWF0ZUZpbGVVUkkocG9wdWxhdGlvbk1vZGVsUGx1Z2luRmlsZS5nZXRBYnNvbHV0ZVBhdGgoKSk7CisKKwkJCWZpbmFsIEZpbGUgZGlzZWFzZU1vZGVsUGx1Z2luRmlsZSA9IG5ldyBGaWxlKAorCQkJCQkiLi4iCSsgRmlsZS5zZXBhcmF0b3IgKyBkaXNlYXNlTW9kZWxQcm9qZWN0TmFtZSArIEZpbGUuc2VwYXJhdG9yICsgUGx1Z2luRmlsZUdlbmVyYXRvci5QTFVHSU5fWE1MX0ZJTEVfTkFNRSk7IC8vJE5PTi1OTFMtMSQKKwkJCWZpbmFsIFVSSSBkaXNlYXNlTW9kZWxQbHVnaW5GaWxlVVJJID0gVVJJCisJCQkJCS5jcmVhdGVGaWxlVVJJKGRpc2Vhc2VNb2RlbFBsdWdpbkZpbGUuZ2V0QWJzb2x1dGVQYXRoKCkpOworCisJCQlmaW5hbCBEaXNlYXNlTW9kZWxNb2RlbEdlbmVyYXRvciBkbW1nID0gbmV3IERpc2Vhc2VNb2RlbE1vZGVsR2VuZXJhdG9yKCk7CisJCQlmaW5hbCBNYXA8SVNPS2V5LCBMaXN0PERpc2Vhc2VNb2RlbE1vZGVsU3BlY2lmaWNhdGlvbj4+IG1vZGVsU3BlY2lmaWNhdGlvbnMgPSBkbW1nCisJCQkJCS5wcm9jZXNzRmlsZXMyKHBvcHVsYXRpb25Nb2RlbFBsdWdpbkZpbGVVUkksCisJCQkJCQkJZGlzZWFzZU1vZGVsUGx1Z2luRmlsZVVSSSk7CisKKwkJCWZvciAoZmluYWwgSVNPS2V5IGlzb0tleSA6IHNvcnRJU09LZXlzKG1vZGVsU3BlY2lmaWNhdGlvbnMpKSB7CisJCQkJLy8gTm93IHNlcmlhbGl6ZSB0aGUgSWRlbnRpZmlhYmxlcworCQkJCWZvciAoZmluYWwgTW9kZWxTcGVjaWZpY2F0aW9uIGdtcyA6IG1vZGVsU3BlY2lmaWNhdGlvbnMKKwkJCQkJCS5nZXQoaXNvS2V5KSkgeworCQkJCQl0cnkgeworCQkJCQkJZ21zLnNlcmlhbGl6ZShHRU5FUkFURURfTU9ERUxTX1BBVEgpOworCQkJCQl9IGNhdGNoIChmaW5hbCBJT0V4Y2VwdGlvbiBlKSB7CisJCQkJCQllLnByaW50U3RhY2tUcmFjZSgpOworCQkJCQl9CisJCQkJfSAvLyBmb3IgZ21zCisJCQl9IC8vIGZvciBpc29LZXkKKworCQkJLy8gQ3JlYXRlIHRoZSBpbnN0YW5jZSBvZiBwbHVnaW4ueG1sIHRoYXQgd2UnbGwgc2VyaWFsaXplIGxhdGVyCisJCQlmaW5hbCBQbHVnaW4gcGx1Z2lueG1sID0gR2VuZXJhdGVkcGx1Z2luRmFjdG9yeS5lSU5TVEFOQ0UKKwkJCQkJLmNyZWF0ZVBsdWdpbigpOworCQkJZmluYWwgRXh0ZW5zaW9uIGV4dGVuc2lvbiA9IEdlbmVyYXRlZHBsdWdpbkZhY3RvcnkuZUlOU1RBTkNFCisJCQkJCS5jcmVhdGVFeHRlbnNpb24oKTsKKworCQkJLy8gQWRkIHRoZSAibW9kZWwiIGV4dGVuc2lvbiBwb2ludAorCQkJZXh0ZW5zaW9uLnNldFBvaW50KENvbnN0YW50cy5JRF9NT0RFTF9FWFRFTlNJT05fUE9JTlQpOworCisJCQlwbHVnaW54bWwuZ2V0RXh0ZW5zaW9uZWxlbWVudCgpLmFkZChleHRlbnNpb24pOworCisJCQkvLyBOb3cgYWRkIHRoZSBkdWJsaW4gY29yZSBlbnRyaWVzIHRvIHRoZSBwbHVnaW4ueG1sIGZpbGUgZm9yCisJCQkvLyBlYWNoIG9mIHRoZSBtb2RlbHMKKwkJCWZvciAoZmluYWwgSVNPS2V5IGlzb0tleSA6IHNvcnRJU09LZXlzKG1vZGVsU3BlY2lmaWNhdGlvbnMpKSB7CisJCQkJZmluYWwgU3RlbUNhdGVnb3J5IGNvdW50cnlDYXRlZ29yeSA9IEdlbmVyYXRlZHBsdWdpbkZhY3RvcnkuZUlOU1RBTkNFCisJCQkJCQkuY3JlYXRlU3RlbUNhdGVnb3J5KCk7CisJCQkJZmluYWwgU3RyaW5nIENPVU5UUllfQ0FUQUdPUllfU1RSSU5HID0gSURfTU9ERUxfR0VPR1JBUEhZX1BPTElUSUNBTF9DT1VOVFJJRVNfQ0FURUdPUlkKKwkJCQkJCSsgIi4iICsgaXNvS2V5LnRvU3RyaW5nKCkudG9Mb3dlckNhc2UoKTsgLy8kTk9OLU5MUy0xJAorCQkJCWNvdW50cnlDYXRlZ29yeS5zZXRJZChDT1VOVFJZX0NBVEFHT1JZX1NUUklORyk7CisJCQkJY291bnRyeUNhdGVnb3J5LnNldE5hbWUoaXNvS2V5LnRvU3RyaW5nKCkpOworCQkJCWNvdW50cnlDYXRlZ29yeQorCQkJCQkJLnNldFBhcmVudElkKElEX01PREVMX0dFT0dSQVBIWV9QT0xJVElDQUxfQ09VTlRSSUVTX0NBVEVHT1JZKTsKKwkJCQlmb3IgKGZpbmFsIE1vZGVsU3BlY2lmaWNhdGlvbiBnbXMgOiBtb2RlbFNwZWNpZmljYXRpb25zCisJCQkJCQkuZ2V0KGlzb0tleSkpIHsKKwkJCQkJZmluYWwgRHVibGluQ29yZSBkYyA9IEdlbmVyYXRlZHBsdWdpbkZhY3RvcnkuZUlOU1RBTkNFCisJCQkJCQkJLmNyZWF0ZUR1YmxpbkNvcmUoKTsKKwkJCQkJZGMuc2V0Q2F0ZWdvcnlJZChDT1VOVFJZX0NBVEFHT1JZX1NUUklORyk7CisJCQkJCWV4dGVuc2lvbi5nZXREdWJsaW5Db3JlcygpLmFkZCgKKwkJCQkJCQlwb3B1bGF0ZUdlbmVyYXRlZERDKGRjLCBnbXMuZ2V0RHVibGluQ29yZSgpKSk7CisJCQkJfSAvLyBmb3IgZ21zCisJCQl9IC8vIGZvciBpc29LZXkKKworCQkJZmluYWwgVVJJIFRFTVBfUExVR0lOWE1MX1VSSSA9IFVSSQorCQkJCQkuY3JlYXRlRmlsZVVSSShHRU5FUkFURURfRklMRVNfUEFUSCArIEZpbGUuc2VwYXJhdG9yCisJCQkJCQkJKyBQbHVnaW5GaWxlR2VuZXJhdG9yLlBMVUdJTl9YTUxfRklMRV9OQU1FKTsKKworCQkJLy8gU2VyaWFsaXplIHRoZSBwbHVnaW4ueG1sIGZpbGUuCisJCQlNb2RlbEdlbmVyYXRvci53cml0ZVBsdWdpbnhtbChwbHVnaW54bWwsIFRFTVBfUExVR0lOWE1MX1VSSSk7CisKKwkJCS8vIENyZWF0ZSB0aGUgcGx1Z2luLnByb3BlcnRpZXMgZmlsZQorCQkJY3JlYXRlUGx1Z2luUHJvcGVydHRpZXMoR0VORVJBVEVEX0ZJTEVTX1BBVEgpOworCQl9IC8vIGVsc2UKKworCX0gLy8gbWFpbgorCisJcHJvdGVjdGVkIE1hcDxJU09LZXksIExpc3Q8RGlzZWFzZU1vZGVsTW9kZWxTcGVjaWZpY2F0aW9uPj4gcHJvY2Vzc0ZpbGVzMigKKwkJCWZpbmFsIFVSSSBwb3B1bGF0aW9uTW9kZWxQbHVnaW5GaWxlVVJJLAorCQkJZmluYWwgVVJJIGRpc2Vhc2VNb2RlbFBsdWdpbkZpbGVVUkkpIHsKKwkJZmluYWwgSGFzaE1hcDxJU09LZXksIExpc3Q8RGlzZWFzZU1vZGVsTW9kZWxTcGVjaWZpY2F0aW9uPj4gcmV0VmFsdWUgPSBuZXcgSGFzaE1hcDxJU09LZXksIExpc3Q8RGlzZWFzZU1vZGVsTW9kZWxTcGVjaWZpY2F0aW9uPj4oKTsKKworCQkvLyBHZXQgdGhlIGNvbnRlbnRzIG9mIHRoZSBwb3B1bGF0aW9uIHBsdWcueG1sIGZpbGUKKwkJZmluYWwgUGx1Z2luIHBvcHVsYXRpb25QbHVnaW5YTUwgPSBnZXRQbHVnaW54bWwocG9wdWxhdGlvbk1vZGVsUGx1Z2luRmlsZVVSSSk7CisJCWZpbmFsIFBsdWdpbiBkaXNlYXNlTW9kZWxQbHVnaW5YTUwgPSBnZXRQbHVnaW54bWwoZGlzZWFzZU1vZGVsUGx1Z2luRmlsZVVSSSk7CisKKwkJLy8gUG9wdWxhdGUgdGhlIG1hcCBvZiBwb3B1bGF0aW9uIG1vZGVscyBieSBJU09LZXkgYW5kIEFkbWluaXN0cmF0aW9uCisJCS8vIGxldmVsCisJCWZpbmFsIE1hcDxJU09LZXksIE1hcDxBZG1pbkxldmVsU2V0LCBEdWJsaW5Db3JlPj4gcG9wdWxhdGlvbk1vZGVsTWFwID0gbmV3IEhhc2hNYXA8SVNPS2V5LCBNYXA8QWRtaW5MZXZlbFNldCwgRHVibGluQ29yZT4+KCk7CisKKwkJZm9yIChFeHRlbnNpb24gZXh0ZW5zaW9uIDogcG9wdWxhdGlvblBsdWdpblhNTC5nZXRFeHRlbnNpb25lbGVtZW50KCkpIHsKKwkJCWZvciAoRHVibGluQ29yZSBkYyA6IGV4dGVuc2lvbi5nZXREdWJsaW5Db3JlcygpKSB7CisJCQkJZmluYWwgTWFwPElTT0tleSwgQWRtaW5MZXZlbFNldD4gaXNvS2V5QWRtaW5MZXZlbFNldE1hcCA9IENvdW50cnlHcmFwaFByb3BlcnR5RmlsZVNwZWNpZmljYXRpb24KKwkJCQkJCS5wYXJzZUR1YmxpbkNvcmVDb3ZlcmFnZVN0cmluZyhkYy5nZXRDb3ZlcmFnZSgpKTsKKwkJCQlmaW5hbCBBZG1pbkxldmVsU2V0IGFkbWluTGV2ZWxTZXQgPSAoQWRtaW5MZXZlbFNldCkgaXNvS2V5QWRtaW5MZXZlbFNldE1hcAorCQkJCQkJLnZhbHVlcygpLnRvQXJyYXkoKVswXTsKKwkJCQlmaW5hbCBJU09LZXkgaXNvS2V5ID0gKElTT0tleSkgaXNvS2V5QWRtaW5MZXZlbFNldE1hcC5rZXlTZXQoKQorCQkJCQkJLnRvQXJyYXkoKVswXTsKKworCQkJCU1hcDxBZG1pbkxldmVsU2V0LCBEdWJsaW5Db3JlPiB0ZW1wID0gcG9wdWxhdGlvbk1vZGVsTWFwCisJCQkJCQkuZ2V0KGlzb0tleSk7CisJCQkJaWYgKHRlbXAgPT0gbnVsbCkgeworCQkJCQl0ZW1wID0gbmV3IEhhc2hNYXA8QWRtaW5MZXZlbFNldCwgRHVibGluQ29yZT4oKTsKKwkJCQkJcG9wdWxhdGlvbk1vZGVsTWFwLnB1dChpc29LZXksIHRlbXApOworCQkJCX0KKwkJCQl0ZW1wLnB1dChhZG1pbkxldmVsU2V0LCBkYyk7CisJCQl9IC8vIGZvciBkYworCQl9IC8vIGZvciBleHRlbnNpb24KKworCQlmaW5hbCBNYXA8RHVibGluQ29yZSwgRGlzZWFzZU1vZGVsPiBkY0Rpc2Vhc2VNb2RlbE1hcCA9IG5ldyBIYXNoTWFwPER1YmxpbkNvcmUsIERpc2Vhc2VNb2RlbD4oKTsKKwkJLy8gUG9wdWxhdGUgdGhlIGNvbGxlY3Rpb24gb2YgZGlzZWFzZSBtb2RlbHMKKwkJZm9yIChFeHRlbnNpb24gZXh0ZW5zaW9uIDogZGlzZWFzZU1vZGVsUGx1Z2luWE1MLmdldEV4dGVuc2lvbmVsZW1lbnQoKSkgeworCQkJZm9yIChEdWJsaW5Db3JlIGRpc2Vhc2VNb2RlbERDIDogZXh0ZW5zaW9uLmdldER1YmxpbkNvcmVzKCkpIHsKKwkJCQlmaW5hbCBJZGVudGlmaWFibGUgZG0gPSBVdGlsaXR5CisJCQkJCQkuZ2V0SWRlbnRpZmlhYmxlKElkZW50aWZpYWJsZVNwZWNpZmljYXRpb24KKwkJCQkJCQkJLmdldElkZW50aWZpYWJsZVByb2plY3RVUkkoZGlzZWFzZU1vZGVsREMpKTsKKwkJCQkvLyBJcyB0aGlzIGEgc3RhbmRhcmQsIG5vbi1hZ2dyZWdhdGluZyBkaXNlYXNlIG1vZGVsPworCQkJCWlmICgoZG0gaW5zdGFuY2VvZiBEaXNlYXNlTW9kZWwpCisJCQkJCQkmJiAhKGRtIGluc3RhbmNlb2YgQWdncmVnYXRpbmdTSURpc2Vhc2VNb2RlbCkpIHsKKwkJCQkJZGNEaXNlYXNlTW9kZWxNYXAucHV0KGRpc2Vhc2VNb2RlbERDLCAoRGlzZWFzZU1vZGVsKSBkbSk7CisJCQkJfQorCisJCQl9IC8vIGZvciBkYworCQl9IC8vIGZvciBleHRlbnNpb24KKworCQkvLyBDcmVhdGUgdGhlIGRpc2Vhc2UgbW9kZWwgbW9kZWxzCisJCWZvciAoSVNPS2V5IGlzb0tleSA6IHNvcnRJU09LZXlzKHBvcHVsYXRpb25Nb2RlbE1hcCkpIHsKKwkJCWZpbmFsIExpc3Q8RGlzZWFzZU1vZGVsTW9kZWxTcGVjaWZpY2F0aW9uPiBnbXNMaXN0ID0gbmV3IEFycmF5TGlzdDxEaXNlYXNlTW9kZWxNb2RlbFNwZWNpZmljYXRpb24+KCk7CisKKwkJCWZpbmFsIE1hcDxBZG1pbkxldmVsU2V0LCBEdWJsaW5Db3JlPiBhZG1pblNldERDTWFwID0gcG9wdWxhdGlvbk1vZGVsTWFwCisJCQkJCS5nZXQoaXNvS2V5KTsKKwkJCWZvciAoQWRtaW5MZXZlbFNldCBhZG1pbkxldmVsU2V0IDogYWRtaW5TZXREQ01hcC5rZXlTZXQoKSkgeworCQkJCWZpbmFsIER1YmxpbkNvcmUgcG9wdWxhdGlvbk1vZGVsREMgPSBhZG1pblNldERDTWFwCisJCQkJCQkuZ2V0KGFkbWluTGV2ZWxTZXQpOworCisJCQkJLy8gSXRlcmF0ZSB0aHJvdWdoIGVhY2ggb2YgdGhlIGRpc2Vhc2UgbW9kZWxzIGFuZCBjcmVhdGUgb25lCisJCQkJLy8gbW9kZWwgZm9yIGVhY2ggZm9yIHRoZSBjdXJyZW50IElTT0tleQorCQkJCWZvciAoRHVibGluQ29yZSBkaXNlYXNlTW9kZWxEQyA6IGRjRGlzZWFzZU1vZGVsTWFwLmtleVNldCgpKSB7CisJCQkJCWZpbmFsIERpc2Vhc2VNb2RlbE1vZGVsU3BlY2lmaWNhdGlvbiB0ZW1wID0gbmV3IERpc2Vhc2VNb2RlbE1vZGVsU3BlY2lmaWNhdGlvbigKKwkJCQkJCQlpc29LZXksIGFkbWluTGV2ZWxTZXQsIHBvcHVsYXRpb25Nb2RlbERDLAorCQkJCQkJCWRpc2Vhc2VNb2RlbERDLCBkY0Rpc2Vhc2VNb2RlbE1hcAorCQkJCQkJCQkJLmdldChkaXNlYXNlTW9kZWxEQykpOworCisJCQkJCWdtc0xpc3QuYWRkKHRlbXApOworCQkJCX0gLy8gZm9yIGRpc2Vhc2VEQ3MKKwkJCX0gLy8gZm9yIGFkbWluTGV2ZWwKKwkJCXJldFZhbHVlLnB1dChpc29LZXksIGdtc0xpc3QpOworCQl9IC8vIGZvciBlYWNoIGlzb0tleQorCQlyZXR1cm4gcmV0VmFsdWU7CisJfSAvLyBwcm9jZXNzRmlsZXMKKworfSAvLyBEaXNlYXNlTW9kZWxNb2RlbEdlbmVyYXRvcgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcm5hbC5kaXNlYXNlbW9kZWxzLm1vZGVscy91cGRhdGUueG1sIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmludGVybmFsLmRpc2Vhc2Vtb2RlbHMubW9kZWxzL3VwZGF0ZS54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGFhNWZhMwotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcm5hbC5kaXNlYXNlbW9kZWxzLm1vZGVscy91cGRhdGUueG1sCkBAIC0wLDAgKzEsMTYzIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiPz4KKzwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAKKyAgICAgQU5UIHNjcmlwdCB0byBidWlsZCBvcmcuZWNsaXNwZS5vaGYuc3RlbS5nZW9ncmFwaHkgcHJvamVjdCAKKyAgICAgYW5kIHRoZSBpbml0aWFsIHNldCBvZiBTVEVNIHNjZW5hcmlvcy4gIAorICAgICBUaGlzIG11c3QgYmUgcnVuIGFmdGVyIGluc3RhbGxpbmcgdGhlIFNURU0gd29ya3NwYWNlIGFuZCBhZnRlciBjaGFuZ2VzCisgICAgIHRvIGNvZGUgZ2VuZXJhdGVkIGJ5IEVNRiBtb2RlbHMuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPgorPHByb2plY3QgbmFtZT0iU1RFTSBJbnRlcm5hbCBEaXNlYXNlIE1vZGVscyIgZGVmYXVsdD0idXBkYXRlX2FsbCI+CisJPGRlc2NyaXB0aW9uPgorICAgICBVc2UgdGhlIHByb3BlcnRpZXMgZmlsZXMgdG8gcG9wdWxhdGUgdGhlIG9yZy5lY2xpcHNlLnN0ZW0uZGF0YS5kaXNlYXNlbW9kZWxzLm1vZGVscyBwbHVnaW4KKyAgICA8L2Rlc2NyaXB0aW9uPgorCisJPCEtLSBQIHIgbyBqIGUgYyB0ICBTIHAgZSBjIGkgZiBpIGMgYSB0IGkgbyBuIHMgLS0+CisKKwk8IS0tIFRoZSBuYW1lIG9mIHRoZSBwcm9qZWN0IC0tPgorCTxwcm9wZXJ0eSBuYW1lPSJwcm9qZWN0Lm5hbWUiIHZhbHVlPSJzdGVtIiAvPgorCisJCisJPCEtLSBBcmUgd2UgcnVubmluZyBoZWFkbGVzcz8gLS0+CisJPGNvbmRpdGlvbiBwcm9wZXJ0eT0icnVubmluZ0hlYWRsZXNzIiA+CisJCTxpc3NldCBwcm9wZXJ0eT0iYnVpbGREaXJlY3RvcnkiIC8+CisJPC9jb25kaXRpb24+CisJCisJPCEtLSBUaGUgYnVpbGREaXJlY3RvcnkgcHJvcGVydHkgaXMgc2V0IGluIGEgaGVhZGxlc3MgYnVpbGQgLS0+CisJPGNvbmRpdGlvbiBwcm9wZXJ0eT0icGx1Z2luUm9vdERpcmVjdG9yeSIgdmFsdWU9IiR7YnVpbGREaXJlY3Rvcnl9L3BsdWdpbnMiIGVsc2U9Ii4uIj4KKwkJPGlzc2V0IHByb3BlcnR5PSJydW5uaW5nSGVhZGxlc3MiIC8+CisJPC9jb25kaXRpb24+CisKKwk8IS0tIFRoZSBiYXNlTG9jYXRpb24gcHJvcGVydHkgaXMgdGhlIGxvY2F0aW9uIG9mIHRoZSBlY2xpcHNlIGhvbWUgaW5zdGFsbGF0aW9uIC0tPgorCTwhLS0gSXQgaXMgdXNlZCB0byBmaW5kIGVjbGlwc2UgcGx1Z2lucyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0+CisJPCEtLSBJdCBpcyBzZXQgaW4gYSBoZWFkbGVzcyBidWlsZCwgYnV0IG5vdCBvbmUgc3RhcnRlZCBtYW51YWxseSBmcm9tIEVjbGlwc2UgICAtLT4KKwk8Y29uZGl0aW9uIHByb3BlcnR5PSJiYXNlTG9jYXRpb24iIHZhbHVlPSIke2VjbGlwc2UucGRlYnVpbGQuaG9tZX0uLi8uLiI+CisJCTxub3Q+CisJCQk8aXNzZXQgcHJvcGVydHk9InJ1bm5pbmdIZWFkbGVzcyIgLz4KKwkJPC9ub3Q+CisJPC9jb25kaXRpb24+CisKKwk8IS0tIFRoaXMgaXMgdGhlIGxvY2F0aW9uIG9mIHRoZSBjbGFzcyBmaWxlcyBvZiB0aGUgYnVpbHQgcGx1Zy1pbnMgICAgIC0tPgorCTwhLS0gSWYgdGhpcyBpcyBhIG1hbnVhbCBidWlsZCBzdGFydGVkIGZyb20gRWNsaXBzZSB0aGVuIHRoZSBkaXJlY3RvcnkgLS0+CisJPCEtLSBpcyAiYmluIiwgaWYgaXRzIGEgaGVhZGxlc3MgYnVpbGQgdGhlbiB0aGUgZGlyZWN0b3J5IGlzICJAZG90IiAgICAtLT4KKwk8IS0tIFRoZSBwcm9wZXJ0eSBiYXNlTG9jYXRpb24gaXMgc2V0IGluIGEgaGVhZGxlc3MgYnVpbGQgICAgICAgICAgICAgIC0tPgorCTxjb25kaXRpb24gcHJvcGVydHk9InRhcmdldEJpbiIgdmFsdWU9IkBkb3QiIGVsc2U9ImJpbiI+CisJCTxpc3NldCBwcm9wZXJ0eT0icnVubmluZ0hlYWRsZXNzIiAvPgorCTwvY29uZGl0aW9uPgorCQorCQorCTwhLS0gVGhlIHByZWZpeCBmb3IgZnVsbHkgcXVhbGlmaWVkIG5hbWVzIC0tPgorCTxwcm9wZXJ0eSBuYW1lPSJJRF9ST09UIiB2YWx1ZT0ib3JnLmVjbGlwc2Uuc3RlbSIgLz4KKworCTwhLS0gVGhlIG5hbWUgb2YgdGhlIHBsdWdpbiB0aGF0IGNvbnRhaW5zIHRoZSBwbHVnaW4ueG1sIGZpbGUgdG8gc2NhbiAtLT4KKwk8cHJvcGVydHkgbmFtZT0ic2Nhbi5wbHVnaW4iIHZhbHVlPSIke0lEX1JPT1R9LmRhdGEuZ2VvZ3JhcGh5LnBvcHVsYXRpb24uaHVtYW4ubW9kZWxzIiAvPgorCQorCTwhLS0gVGhlIG5hbWUgb2YgdGhlIHNvdXJjZSBwbHVnaW4gKGkuZS4sIHRoZSBvbmUgdGhhdCBjb250YWlucyB0aGlzIGZpbGUgLS0+CisJPHByb3BlcnR5IG5hbWU9InNvdXJjZS5wbHVnaW4iIHZhbHVlPSIke0lEX1JPT1R9LmludGVybmFsLmRpc2Vhc2Vtb2RlbHMubW9kZWxzIiAvPgorCisJPCEtLSBUaGUgbmFtZSBvZiB0aGUgcGx1Z2luIHdpdGggdGhlIGRpc2Vhc2VzIC0tPgorCTxwcm9wZXJ0eSBuYW1lPSJkaXNlYXNlLnBsdWdpbiIgIHZhbHVlPSIke0lEX1JPT1R9LmRpc2Vhc2VzIiAvPgorCQorCTwhLS0gVGhlIG5hbWUgb2YgdGhlIHRhcmdldCBwbHVnaW4gLS0+CisJPHByb3BlcnR5IG5hbWU9InRhcmdldC5wbHVnaW4iIHZhbHVlPSIke0lEX1JPT1R9LmRhdGEuZGlzZWFzZW1vZGVscy5tb2RlbHMiIC8+CisKKwk8IS0tIFRoZSBwYXRoIHRvIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGUgc291cmNlIHBsdWdpbiAtLT4KKwk8cHJvcGVydHkgbmFtZT0icGF0aC5zb3VyY2VwbHVnaW4iIGxvY2F0aW9uPSIke3BsdWdpblJvb3REaXJlY3Rvcnl9LyR7c291cmNlLnBsdWdpbn0iIC8+CisKKwk8IS0tIFRoZSBwYXRoIHRvIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGUgcGx1Z2luIHRoYXQgd2lsbCBiZSBhdWdtZW50ZWQgd2l0aCBnZW5lcmF0ZWQgY29udGVudCAtLT4KKwk8cHJvcGVydHkgbmFtZT0icGF0aC50YXJnZXRwbHVnaW4iIGxvY2F0aW9uPSIke3BsdWdpblJvb3REaXJlY3Rvcnl9LyR7dGFyZ2V0LnBsdWdpbn0iIC8+CisKKwk8IS0tIFRoZSBwYXRoIHRvIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGUgcmVzb3VyY2UgZmlsZXMgLS0+CisJPHByb3BlcnR5IG5hbWU9InBhdGgucmVzb3VyY2UuZmlsZXMiIHZhbHVlPSIke3BhdGguc291cmNlcGx1Z2lufS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5IiAvPgorCisJPCEtLSBUaGUgcGF0aCB0byB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhlIHBsdWdpbiB0aGF0IHdpbGwgYmUgYXVnbWVudGVkIHdpdGggZ2VuZXJhdGVkIGNvbnRlbnQtLT4KKwk8cHJvcGVydHkgbmFtZT0icGF0aC5nZW5lcmF0ZWQuZmlsZXMiIHZhbHVlPSIke3BhdGguc291cmNlcGx1Z2lufS90ZW1wIiAvPgorCisJPCEtLSBUaGUgcGF0aCB0byB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgZ2VvZ3JhcGh5IHNvdXJjZSBjb2RlIC0tPgorCTxwcm9wZXJ0eSBuYW1lPSJwYXRoLmdlb2dyYXBoeS5zcmMiIHZhbHVlPSIke3BhdGgudGFyZ2V0cGx1Z2lufS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kYXRhL2dlb2dyYXBoeS9wb3B1bGF0aW9uL2h1bWFuL21vZGVscyIgLz4KKworCTwhLS0gVGhlIG5hbWUgb2YgdGhlIHBsdWdpbi54bWwgZmlsZSB0aGF0IHdpbGwgYmUgYXVnbWVudGVkIHdpdGggZ2VuZXJhdGVkIGNvbnRlbnQtLT4KKwk8cHJvcGVydHkgbmFtZT0iZmlsZS50YXJnZXQucGx1Z2lueG1sIiB2YWx1ZT0iJHtwYXRoLnRhcmdldHBsdWdpbn0vcGx1Z2luLnhtbCIgLz4KKworCTwhLS0gVGhlIG5hbWUgb2YgdGhlIHBsdWdpbi5wcm9wZXJ0aWVzIGZpbGUgdGhhdCB3aWxsIGJlIGF1Z21lbnRlZCB3aXRoIGdlbmVyYXRlZCBjb250ZW50LS0+CisJPHByb3BlcnR5IG5hbWU9ImZpbGUudGFyZ2V0LnBsdWdpbnByb3BlcnRpZXMiIHZhbHVlPSIke3BhdGgudGFyZ2V0cGx1Z2lufS9wbHVnaW4ucHJvcGVydGllcyIgLz4KKworCTwhLS0gVGhlIG5hbWUgb2YgdGhlIHBsdWdpbi54bWwgZmlsZSB0aGF0IHRoYXQgaXMgdGhlIGFnZ3JlZ2F0aW9uIG9mIHRoZSBnZW5lcmF0ZWQgY29udGVudC0tPgorCTxwcm9wZXJ0eSBuYW1lPSJmaWxlLnV0aWwucGx1Z2lueG1sIiB2YWx1ZT0iJHtwYXRoLmdlbmVyYXRlZC5maWxlc30vcGx1Z2luLnhtbCIgLz4KKworCTwhLS0gVGhlIG5hbWUgb2YgdGhlIHBsdWdpbi5wcm9wZXJ0aWVzIGZpbGUgdGhhdCB0aGF0IGlzIHRoZSBhZ2dyZWdhdGlvbiBvZiB0aGUgZ2VuZXJhdGVkIGNvbnRlbnQtLT4KKwk8cHJvcGVydHkgbmFtZT0iZmlsZS51dGlsLnBsdWdpbnByb3BlcnRpZXMiIHZhbHVlPSIke3BhdGguZ2VuZXJhdGVkLmZpbGVzfS9wbHVnaW4ucHJvcGVydGllcyIgLz4KKworICAgIDwhLS0gVGhlIG5hbWUgb2YgdGhlIHBsdWdpbi54bWwgZmlsZSB0aGF0IHRoYXQgaXMgdGhlIGFnZ3JlZ2F0aW9uIG9mIHRoZSBnZW5lcmF0ZWQgY29udGVudC0tPgorICAgIDxwcm9wZXJ0eSBuYW1lPSJmaWxlLnRhcmdldC5wbHVnaW5wcm9wZXJ0aWVzIiB2YWx1ZT0iJHtwYXRoLmdlbmVyYXRlZC5maWxlc30vcGx1Z2luLnByb3BlcnRpZXMiIC8+CisKKwk8IS0tIFRoZSBjbGFzcyBwYXRoIHRvIHVzZSAtLT4KKwk8cGF0aCBpZD0iY2xhc3NwYXRoLnJ1bnRpbWUiPiAKKwkJPHBhdGhlbGVtZW50IGxvY2F0aW9uPSIke3BhdGguc291cmNlcGx1Z2lufS8ke3RhcmdldEJpbn0iIC8+CisJCTxwYXRoZWxlbWVudCBsb2NhdGlvbj0iJHtwbHVnaW5Sb290RGlyZWN0b3J5fS8ke0lEX1JPT1R9LmNvcmUvJHt0YXJnZXRCaW59IiAvPgorCQk8cGF0aGVsZW1lbnQgbG9jYXRpb249IiR7cGx1Z2luUm9vdERpcmVjdG9yeX0vJHtJRF9ST09UfS5kZWZpbml0aW9ucy8ke3RhcmdldEJpbn0iIC8+CisJICAgIDxwYXRoZWxlbWVudCBsb2NhdGlvbj0iJHtwbHVnaW5Sb290RGlyZWN0b3J5fS8ke0lEX1JPT1R9LmludGVybmFsLmRhdGEvJHt0YXJnZXRCaW59IiAvPgorCQk8cGF0aGVsZW1lbnQgbG9jYXRpb249IiR7cGx1Z2luUm9vdERpcmVjdG9yeX0vJHtJRF9ST09UfS5pbnRlcm5hbC5kYXRhLmdlb2dyYXBoeS8ke3RhcmdldEJpbn0iIC8+CisJCTxwYXRoZWxlbWVudCBsb2NhdGlvbj0iJHtwbHVnaW5Sb290RGlyZWN0b3J5fS8ke0lEX1JPT1R9LmludGVybmFsLmRhdGEuZ2VvZ3JhcGh5Lm1vZGVscy8ke3RhcmdldEJpbn0iIC8+CisJCTxwYXRoZWxlbWVudCBsb2NhdGlvbj0iJHtwbHVnaW5Sb290RGlyZWN0b3J5fS8ke0lEX1JPT1R9LmRhdGEuZ2VvZ3JhcGh5LyR7dGFyZ2V0QmlufSIgLz4KKwkJPHBhdGhlbGVtZW50IGxvY2F0aW9uPSIke3BsdWdpblJvb3REaXJlY3Rvcnl9LyR7SURfUk9PVH0uZGlzZWFzZW1vZGVscy8ke3RhcmdldEJpbn0iIC8+CisJCTxwYXRoZWxlbWVudCBsb2NhdGlvbj0iJHtwbHVnaW5Sb290RGlyZWN0b3J5fS8ke0lEX1JPT1R9LnBvcHVsYXRpb25tb2RlbHMvJHt0YXJnZXRCaW59IiAvPgorCQk8ZmlsZXNldCBkaXI9IiR7YmFzZUxvY2F0aW9ufS9wbHVnaW5zLyI+CisJCQk8aW5jbHVkZSBuYW1lPSIqZW1mKi5qYXIiIC8+CisJCTwvZmlsZXNldD4KKwkJPGZpbGVzZXQgZGlyPSIke3BsdWdpblJvb3REaXJlY3Rvcnl9LyR7SURfUk9PVH0uaW50ZXJuYWwuZGF0YS9saWIvIj4KKwkJCTxpbmNsdWRlIG5hbWU9IiplbWYqLmphciIgLz4KKwkJPC9maWxlc2V0PgkJCisJPC9wYXRoPgorCisJPHRhcmdldCBuYW1lPSJ1cGRhdGVfYWxsIiBkZXBlbmRzPSJ1cGRhdGUiIC8+CisKKwk8IS0tIFVwZGF0ZSB0aGUgZ2VvZ3JhcGh5IHBsdWdpbiB3aXRoIHRoZSBsYXRlc3QgZGVmaW5pdGlvbnMgLS0+CisJPHRhcmdldCBuYW1lPSJ1cGRhdGUiIGRlcGVuZHM9InVwZGF0ZV9kaXNlYXNlX21vZGVscywgdXBkYXRlX2Rpc2Vhc2Vtb2RlbHNfbW9kZWxzX3BsdWdpbl94bWwsIHVwZGF0ZV9kaXNlYXNlbW9kZWxzX21vZGVsc19wbHVnaW5fcHJvcGVydGllcyIgLz4KKworCTx0YXJnZXQgbmFtZT0idXBkYXRlX2Rpc2Vhc2Vtb2RlbHNfbW9kZWxzX3BsdWdpbl94bWwiIGRlcGVuZHM9ImNyZWF0ZV9jYW5kaWRhdGVzIj4KKwkJPGNvcHkgdG9maWxlPSIke2ZpbGUudGFyZ2V0LnBsdWdpbnhtbH0iIGZpbGU9IiR7ZmlsZS51dGlsLnBsdWdpbnhtbH0iIG92ZXJ3cml0ZT0idHJ1ZSIgLz4KKwk8L3RhcmdldD4KKworCTx0YXJnZXQgbmFtZT0idXBkYXRlX2Rpc2Vhc2Vtb2RlbHNfbW9kZWxzX3BsdWdpbl9wcm9wZXJ0aWVzIiBkZXBlbmRzPSJjcmVhdGVfY2FuZGlkYXRlcyI+CisJCTxjb3B5IHRvZmlsZT0iJHtmaWxlLnRhcmdldC5wbHVnaW5wcm9wZXJ0aWVzfSIgZmlsZT0iJHtmaWxlLnV0aWwucGx1Z2lucHJvcGVydGllc30iIG92ZXJ3cml0ZT0idHJ1ZSIgLz4KKwk8L3RhcmdldD4KKworCTwhLS0gVXBkYXRlIHRoZSBncmFwaCBmaWxlcyBpbiB0aGUgZ2VvZ3JhcGh5IHBsdWdpbiAtLT4KKwk8dGFyZ2V0IG5hbWU9InVwZGF0ZV9kaXNlYXNlX21vZGVscyIgZGVwZW5kcz0iY3JlYXRlX2NhbmRpZGF0ZXMiPgorCQk8Y29weSB0b2Rpcj0iJHtwYXRoLnRhcmdldHBsdWdpbn0vcmVzb3VyY2VzL2RhdGEvIiBvdmVyd3JpdGU9InRydWUiPgorCQkJPGZpbGVzZXQgZGlyPSIke3BhdGguZ2VuZXJhdGVkLmZpbGVzfS9yZXNvdXJjZXMvZGF0YSI+CisJCQkJPGluY2x1ZGUgbmFtZT0iKiovKi5tb2RlbCIgLz4KKwkJCTwvZmlsZXNldD4KKwkJPC9jb3B5PgorCTwvdGFyZ2V0PgorCQorCTwhLS0gQ3JlYXRlIHRoZSBtb2RlbCBmaWxlcyBmb3IgY291bnRyaWVzIGFuZCB0aGUgcGx1Z2luLnhtbCBhbmQgcGx1Z2luLnByb3BlcnRpZXMgZnJhZ21lbnRzIC0tPgorCTx0YXJnZXQgbmFtZT0iY3JlYXRlX2NhbmRpZGF0ZXMiIGRlcGVuZHM9ImNsZWFuIj4KKwkJPCEtLSBUaGVyZSBpcyBhIHByb2JsZW0gaGVyZSB3aXRoIHNwZWNpZnlpbmcgZm9yaz0idHJ1ZSIgIG1heG1lbW9yeT0iNzY4bSIuICBJdCBjYXVzZXMgYW4gSU9FeGNlcHRpb24gb24gc29tZSBtYWNoaW5lcyAtLT4KKwkJPGphdmEgY2xhc3NuYW1lPSIke0lEX1JPT1R9LmludGVybmFsLmRpc2Vhc2Vtb2RlbHMubW9kZWxzLkRpc2Vhc2VNb2RlbE1vZGVsR2VuZXJhdG9yIiBmb3JrPSJ0cnVlIiBtYXhtZW1vcnk9IjEwMjRtIj4KKwkJCTxjbGFzc3BhdGggcmVmaWQ9ImNsYXNzcGF0aC5ydW50aW1lIiAvPgorCQkJPGFyZyB2YWx1ZT0iJHtwYXRoLmdlbmVyYXRlZC5maWxlc30iIC8+CisJCQk8YXJnIHZhbHVlPSIke3NjYW4ucGx1Z2lufSIgLz4KKwkJCTxhcmcgdmFsdWU9IiR7ZGlzZWFzZS5wbHVnaW59IiAvPgorCQkJPGp2bWFyZyB2YWx1ZT0iLVhtczEwMjRtIi8+CisJCQk8anZtYXJnIHZhbHVlPSItWG14MTAyNG0iLz4KKwkJPC9qYXZhPgorCTwvdGFyZ2V0PgorCisJPCEtLSBjbGVhbiBvdXQgdGhlIC4uLi90ZW1wL2RhdGEgZGlyZWN0b3JpZXMgLS0+CisJPCEtLSBjbGVhbiBvdXQgdGhlIHRhcmdldCBkaXJlY3RvcmllcyAtLT4KKwk8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJjcmVhdGVfZ2VuZXJhdGVkX2ZpbGVzX2RpciI+CisJCTxkZWxldGUgaW5jbHVkZUVtcHR5RGlycz0idHJ1ZSIgcXVpZXQ9InRydWUiPgorCQkJPGZpbGVzZXQgZGlyPSIke3BhdGguZ2VuZXJhdGVkLmZpbGVzfS8iPgorCQkJCTxpbmNsdWRlIG5hbWU9IioqLyoiIC8+CisJCQk8L2ZpbGVzZXQ+CisJCQk8ZmlsZXNldCBkaXI9IiR7cGF0aC50YXJnZXRwbHVnaW59L3Jlc291cmNlcy9kYXRhLyI+CisJCQkJPGluY2x1ZGUgbmFtZT0iY291bnRyeS8qKi8qIiAvPgorCQkJPC9maWxlc2V0PgorCQk8L2RlbGV0ZT4KKwk8L3RhcmdldD4KKworCTx0YXJnZXQgbmFtZT0iY3JlYXRlX2dlbmVyYXRlZF9maWxlc19kaXIiPgorCQk8bWtkaXIgZGlyPSIke3BhdGguZ2VuZXJhdGVkLmZpbGVzfS9yZXNvdXJjZXMvZGF0YSIvPgkJCisJPC90YXJnZXQ+Cis8L3Byb2plY3Q+CmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uaW50ZXJuYWwuZGlzZWFzZW1vZGVscy5zY2VuYXJpb3MvLmNsYXNzcGF0aCBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcm5hbC5kaXNlYXNlbW9kZWxzLnNjZW5hcmlvcy8uY2xhc3NwYXRoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMwNGU4NjEKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uaW50ZXJuYWwuZGlzZWFzZW1vZGVscy5zY2VuYXJpb3MvLmNsYXNzcGF0aApAQCAtMCwwICsxLDcgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8Y2xhc3NwYXRoPgorCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJzcmMiIHBhdGg9InNyYyIvPgorCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJjb24iIHBhdGg9Im9yZy5lY2xpcHNlLmpkdC5sYXVuY2hpbmcuSlJFX0NPTlRBSU5FUi9vcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwuZGVidWcudWkubGF1bmNoZXIuU3RhbmRhcmRWTVR5cGUvSjJTRS0xLjUiLz4KKwk8Y2xhc3NwYXRoZW50cnkga2luZD0iY29uIiBwYXRoPSJvcmcuZWNsaXBzZS5wZGUuY29yZS5yZXF1aXJlZFBsdWdpbnMiLz4KKwk8Y2xhc3NwYXRoZW50cnkga2luZD0ib3V0cHV0IiBwYXRoPSJiaW4iLz4KKzwvY2xhc3NwYXRoPgpkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmludGVybmFsLmRpc2Vhc2Vtb2RlbHMuc2NlbmFyaW9zLy5jdnNpZ25vcmUgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uaW50ZXJuYWwuZGlzZWFzZW1vZGVscy5zY2VuYXJpb3MvLmN2c2lnbm9yZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YzU5NWE2Ci0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmludGVybmFsLmRpc2Vhc2Vtb2RlbHMuc2NlbmFyaW9zLy5jdnNpZ25vcmUKQEAgLTAsMCArMSBAQAordGVtcApkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmludGVybmFsLmRpc2Vhc2Vtb2RlbHMuc2NlbmFyaW9zLy5wcm9qZWN0IGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmludGVybmFsLmRpc2Vhc2Vtb2RlbHMuc2NlbmFyaW9zLy5wcm9qZWN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM5YTFjNjcKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uaW50ZXJuYWwuZGlzZWFzZW1vZGVscy5zY2VuYXJpb3MvLnByb2plY3QKQEAgLTAsMCArMSwyOCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxwcm9qZWN0RGVzY3JpcHRpb24+CisJPG5hbWU+b3JnLmVjbGlwc2Uuc3RlbS5pbnRlcm5hbC5kaXNlYXNlbW9kZWxzLnNjZW5hcmlvczwvbmFtZT4KKwk8Y29tbWVudD48L2NvbW1lbnQ+CisJPHByb2plY3RzPgorCTwvcHJvamVjdHM+CisJPGJ1aWxkU3BlYz4KKwkJPGJ1aWxkQ29tbWFuZD4KKwkJCTxuYW1lPm9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFidWlsZGVyPC9uYW1lPgorCQkJPGFyZ3VtZW50cz4KKwkJCTwvYXJndW1lbnRzPgorCQk8L2J1aWxkQ29tbWFuZD4KKwkJPGJ1aWxkQ29tbWFuZD4KKwkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5NYW5pZmVzdEJ1aWxkZXI8L25hbWU+CisJCQk8YXJndW1lbnRzPgorCQkJPC9hcmd1bWVudHM+CisJCTwvYnVpbGRDb21tYW5kPgorCQk8YnVpbGRDb21tYW5kPgorCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLlNjaGVtYUJ1aWxkZXI8L25hbWU+CisJCQk8YXJndW1lbnRzPgorCQkJPC9hcmd1bWVudHM+CisJCTwvYnVpbGRDb21tYW5kPgorCTwvYnVpbGRTcGVjPgorCTxuYXR1cmVzPgorCQk8bmF0dXJlPm9yZy5lY2xpcHNlLnBkZS5QbHVnaW5OYXR1cmU8L25hdHVyZT4KKwkJPG5hdHVyZT5vcmcuZWNsaXBzZS5qZHQuY29yZS5qYXZhbmF0dXJlPC9uYXR1cmU+CisJPC9uYXR1cmVzPgorPC9wcm9qZWN0RGVzY3JpcHRpb24+CmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uaW50ZXJuYWwuZGlzZWFzZW1vZGVscy5zY2VuYXJpb3MvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmludGVybmFsLmRpc2Vhc2Vtb2RlbHMuc2NlbmFyaW9zLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xM2I3MDVmCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmludGVybmFsLmRpc2Vhc2Vtb2RlbHMuc2NlbmFyaW9zLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcwpAQCAtMCwwICsxLDIxIEBACisjVHVlIFNlcCAwMSAxNjo1OTozMiBFRFQgMjAwOQorZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvZGVnZW4uaW5saW5lSnNyQnl0ZWNvZGU9ZW5hYmxlZAorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29kZWdlbi50YXJnZXRQbGF0Zm9ybT0xLjUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvbXBsaWFuY2U9MS41CitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5kb2MuY29tbWVudC5zdXBwb3J0PWRpc2FibGVkCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmFzc2VydElkZW50aWZpZXI9ZXJyb3IKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZW51bUlkZW50aWZpZXI9ZXJyb3IKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW52YWxpZEphdmFkb2M9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbnZhbGlkSmF2YWRvY1RhZ3M9ZW5hYmxlZAorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbnZhbGlkSmF2YWRvY1RhZ3NEZXByZWNhdGVkUmVmPWVuYWJsZWQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW52YWxpZEphdmFkb2NUYWdzTm90VmlzaWJsZVJlZj1lbmFibGVkCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmludmFsaWRKYXZhZG9jVGFnc1Zpc2liaWxpdHk9cHVibGljCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdKYXZhZG9jQ29tbWVudHM9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nSmF2YWRvY0NvbW1lbnRzT3ZlcnJpZGluZz1lbmFibGVkCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdKYXZhZG9jQ29tbWVudHNWaXNpYmlsaXR5PXB1YmxpYworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nSmF2YWRvY1RhZ0Rlc2NyaXB0aW9uPXJldHVybl90YWcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0phdmFkb2NUYWdzPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0phdmFkb2NUYWdzT3ZlcnJpZGluZz1lbmFibGVkCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdKYXZhZG9jVGFnc1Zpc2liaWxpdHk9cHVibGljCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5zb3VyY2U9MS41CmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uaW50ZXJuYWwuZGlzZWFzZW1vZGVscy5zY2VuYXJpb3MvTUVUQS1JTkYvTUFOSUZFU1QuTUYgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uaW50ZXJuYWwuZGlzZWFzZW1vZGVscy5zY2VuYXJpb3MvTUVUQS1JTkYvTUFOSUZFU1QuTUYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTkzMjk1ZgotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcm5hbC5kaXNlYXNlbW9kZWxzLnNjZW5hcmlvcy9NRVRBLUlORi9NQU5JRkVTVC5NRgpAQCAtMCwwICsxLDIwIEBACitNYW5pZmVzdC1WZXJzaW9uOiAxLjAKK0J1bmRsZS1NYW5pZmVzdFZlcnNpb246IDIKK0J1bmRsZS1OYW1lOiBTVEVNIEludGVybmFsIERpc2Vhc2UgU2NlbmFyaW9zCitCdW5kbGUtU3ltYm9saWNOYW1lOiBvcmcuZWNsaXBzZS5zdGVtLmludGVybmFsLmRpc2Vhc2Vtb2RlbHMuc2NlbmFyaW9zCitCdW5kbGUtVmVyc2lvbjogMS4yLjEKK1JlcXVpcmUtQnVuZGxlOiBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUsCisgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbiwKKyBvcmcuZWNsaXBzZS5zdGVtLmNvcmUsCisgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLAorIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZXMsCisgb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeSwKKyBvcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5LnBvcHVsYXRpb24uaHVtYW4sCisgb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS5wb3B1bGF0aW9uLmh1bWFuLm1vZGVscywKKyBvcmcuZWNsaXBzZS5zdGVtLmRhdGEuZGlzZWFzZW1vZGVscy5tb2RlbHMsCisgb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmRpc2Vhc2Vtb2RlbHMuc2NlbmFyaW9zLAorIG9yZy5lY2xpcHNlLnN0ZW0uaW50ZXJuYWwuZGF0YSwKKyBvcmcuZWNsaXBzZS5zdGVtLmludGVybmFsLmRhdGEuZ2VvZ3JhcGh5LAorIG9yZy5lY2xpcHNlLnN0ZW0uaW50ZXJuYWwuZGF0YS5nZW9ncmFwaHkubW9kZWxzCitCdW5kbGUtUmVxdWlyZWRFeGVjdXRpb25FbnZpcm9ubWVudDogSjJTRS0xLjUKK0J1bmRsZS1WZW5kb3I6IEVjbGlwc2Uub3JnCmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uaW50ZXJuYWwuZGlzZWFzZW1vZGVscy5zY2VuYXJpb3MvYnVpbGQucHJvcGVydGllcyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcm5hbC5kaXNlYXNlbW9kZWxzLnNjZW5hcmlvcy9idWlsZC5wcm9wZXJ0aWVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM0ZDJlNGQKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uaW50ZXJuYWwuZGlzZWFzZW1vZGVscy5zY2VuYXJpb3MvYnVpbGQucHJvcGVydGllcwpAQCAtMCwwICsxLDQgQEAKK3NvdXJjZS4uID0gc3JjLworb3V0cHV0Li4gPSBiaW4vCitiaW4uaW5jbHVkZXMgPSBNRVRBLUlORi8sXAorICAgICAgICAgICAgICAgLgpkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmludGVybmFsLmRpc2Vhc2Vtb2RlbHMuc2NlbmFyaW9zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2ludGVybmFsL2RhdGEvc3BlY2lmaWNhdGlvbnMvRGlzZWFzZU1vZGVsU2NlbmFyaW9TcGVjaWZpY2F0aW9uLmphdmEgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uaW50ZXJuYWwuZGlzZWFzZW1vZGVscy5zY2VuYXJpb3Mvc3JjL29yZy9lY2xpcHNlL3N0ZW0vaW50ZXJuYWwvZGF0YS9zcGVjaWZpY2F0aW9ucy9EaXNlYXNlTW9kZWxTY2VuYXJpb1NwZWNpZmljYXRpb24uamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYWNkMTQzCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmludGVybmFsLmRpc2Vhc2Vtb2RlbHMuc2NlbmFyaW9zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2ludGVybmFsL2RhdGEvc3BlY2lmaWNhdGlvbnMvRGlzZWFzZU1vZGVsU2NlbmFyaW9TcGVjaWZpY2F0aW9uLmphdmEKQEAgLTAsMCArMSwzMzggQEAKKy8vIERpc2Vhc2VNb2RlbFNjZW5hcmlvU3BlY2lmaWNhdGlvbi5qYXZhCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uaW50ZXJuYWwuZGF0YS5zcGVjaWZpY2F0aW9uczsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqYXZhLmlvLkZpbGU7CitpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLnNxbC5EYXRlOworaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CitpbXBvcnQgamF2YS51dGlsLk1hcDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5FTWFwOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5VUkk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkludGVybmFsRU9iamVjdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUucGx1Z2luLkVjb3JlUGx1Z2luOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5TVEVNVVJJOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5VdGlsaXR5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uSWRlbnRpZmlhYmxlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5HcmFwaDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguTm9kZUxhYmVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5Nb2RlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuTW9kZWxGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5Nb2RlbFBhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLk5vZGVEZWNvcmF0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLlNURU1UaW1lOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zY2VuYXJpby5TY2VuYXJpbzsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2NlbmFyaW8uU2NlbmFyaW9GYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zY2VuYXJpby5TY2VuYXJpb1BhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNlcXVlbmNlci5TZXF1ZW5jZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNlcXVlbmNlci5TZXF1ZW5jZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkuSVNPS2V5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5EaXNlYXNlTW9kZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlNJSW5mZWN0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmRQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uaW50ZXJuYWwuZGF0YS5nZW5lcmF0ZWRwbHVnaW4uRHVibGluQ29yZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmludGVybmFsLmRhdGEuZ2VvZ3JhcGh5LnNwZWNpZmljYXRpb25zLkFkbWluTGV2ZWxTZXQ7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcm5hbC5kYXRhLmdlb2dyYXBoeS5zcGVjaWZpY2F0aW9ucy5Db3VudHJ5R3JhcGhQcm9wZXJ0eUZpbGVTcGVjaWZpY2F0aW9uOworCisvKioKKyAqIFRoaXMgY2xhc3MgcmVwcmVzZW50cworICovCitwdWJsaWMgY2xhc3MgRGlzZWFzZU1vZGVsU2NlbmFyaW9TcGVjaWZpY2F0aW9uIGV4dGVuZHMKKwkJSWRlbnRpZmlhYmxlU3BlY2lmaWNhdGlvbiBpbXBsZW1lbnRzCisJCUNvbXBhcmFibGU8RGlzZWFzZU1vZGVsU2NlbmFyaW9TcGVjaWZpY2F0aW9uPiB7CisKKwkvKioKKwkgKiBUaGUgbnVtYmVyIG9mIHBlb3BsZSB0aGF0IHdpbGwgYmUgaW5mZWN0ZWQKKwkgKi8KKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgSU5GRUNUSU9VU19DT1VOVCA9IDEwMDAwOworCisJQFN1cHByZXNzV2FybmluZ3MoInVudXNlZCIpCisJcHJpdmF0ZSBmaW5hbCBNb2RlbFBhY2thZ2UgbW9kZWxQYWNrYWdlID0gTW9kZWxQYWNrYWdlLmVJTlNUQU5DRTsKKwlAU3VwcHJlc3NXYXJuaW5ncygidW51c2VkIikKKwlwcml2YXRlIGZpbmFsIFN0YW5kYXJkUGFja2FnZSBzdGFuZGFyZFBhY2thZ2UgPSBTdGFuZGFyZFBhY2thZ2UuZUlOU1RBTkNFOworCisJcHJpdmF0ZSBmaW5hbCBEdWJsaW5Db3JlIGRpc2Vhc2VNb2RlbE1vZGVsREM7CisKKwlwcml2YXRlIGZpbmFsIElTT0tleSBpc29LZXk7CisJcHJpdmF0ZSBmaW5hbCBBZG1pbkxldmVsU2V0IGFkbWluTGV2ZWxTZXQ7CisJcHJpdmF0ZSBNb2RlbCBkaXNlYXNlTW9kZWxNb2RlbDsKKwlwcml2YXRlIERpc2Vhc2VNb2RlbCBkaXNlYXNlTW9kZWw7CisJcHJpdmF0ZSBTZXF1ZW5jZXIgc2VxdWVuY2VyOworCXByaXZhdGUgU0lJbmZlY3RvciBpbmZlY3RvcjsKKwlwcml2YXRlIFN0cmluZyBpbmZlY3RlZFJlZ2lvbk5hbWU7CisKKwlzdGF0aWMgeworCQkvLyBUaGlzIHNldHMgdXAgdGhlIG1hcHBpbmcgYmV0d2VlbiB0aGUgInBsYXRmb3JtIiBVUkkncyBhbmQgdGhlCisJCS8vIHByb2plY3RzIGluIHRoZSBmaWxlIHN5c3RlbS4KKworCQkvLyBDV0QgaXMgdGhlIGN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnkKKwkJZmluYWwgU3RyaW5nIENXRCA9IFN5c3RlbS5nZXRQcm9wZXJ0eSgidXNlci5kaXIiKTsgLy8kTk9OLU5MUy0xJAorCQkvLyBXT1JLU1BBQ0UgaXMgdGhlIGRpcmVjdG9yeSBvZiB0aGUgcGFyZW50IHdvcmtzcGFjZQorCQlmaW5hbCBTdHJpbmcgV09SS1NQQUNFID0gQ1dELnN1YnN0cmluZygwLCBDV0QKKwkJCQkubGFzdEluZGV4T2YoRmlsZS5zZXBhcmF0b3IpKTsKKworCQkvLyBUaGUgcGF0aCB0byB0aGUgZGlzZWFzZSBtb2RlbHMgcHJvamVjdAorCQlmaW5hbCBTdHJpbmcgRElTRUFTRVNfTU9ERUxTX01PREVMU19QUk9KRUNUX1JPT1QgPSBXT1JLU1BBQ0UKKwkJCQkrIEZpbGUuc2VwYXJhdG9yCisJCQkJKyBvcmcuZWNsaXBzZS5zdGVtLmRhdGEuZGlzZWFzZW1vZGVscy5tb2RlbHMuQWN0aXZhdG9yLlBMVUdJTl9JRAorCQkJCSsgRmlsZS5zZXBhcmF0b3I7CisKKwkJLy8gVGhlIHBhdGggdG8gdGhlIGRpc2Vhc2VzIHByb2plY3QKKwkJZmluYWwgU3RyaW5nIERJU0VBU0VTX1BST0pFQ1RfUk9PVCA9IFdPUktTUEFDRSArIEZpbGUuc2VwYXJhdG9yCisJCQkJKyBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2VzLkFjdGl2YXRvci5QTFVHSU5fSUQKKwkJCQkrIEZpbGUuc2VwYXJhdG9yOworCisJCS8vIFRoZSBwYXRoIHRvIHRoZSBwb3B1bGF0aW9uIG1vZGVsIHByb2plY3QKKwkJZmluYWwgU3RyaW5nIFBPUFVMQVRJT05fREFUQV9QUk9KRUNUX1JPT1QgPSBXT1JLU1BBQ0UKKwkJCQkrIEZpbGUuc2VwYXJhdG9yCisJCQkJKyBvcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5LnBvcHVsYXRpb24uaHVtYW4uQWN0aXZhdG9yLlBMVUdJTl9JRAorCQkJCSsgRmlsZS5zZXBhcmF0b3I7CisKKwkJLy8gVGhlIHBhdGggdG8gdGhlIHBvcHVsYXRpb24gbW9kZWwgcHJvamVjdAorCQlmaW5hbCBTdHJpbmcgUE9QVUxBVElPTl9NT0RFTF9QUk9KRUNUX1JPT1QgPSBXT1JLU1BBQ0UKKwkJCQkrIEZpbGUuc2VwYXJhdG9yCisJCQkJKyBvcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5LnBvcHVsYXRpb24uaHVtYW4ubW9kZWxzLkFjdGl2YXRvci5QTFVHSU5fSUQKKwkJCQkrIEZpbGUuc2VwYXJhdG9yOworCisJCWZpbmFsIE1hcDxTdHJpbmcsIFVSST4gcGxhdGZvcm1SZXNvdXJjZU1hcCA9IEVjb3JlUGx1Z2luCisJCQkJLmdldFBsYXRmb3JtUmVzb3VyY2VNYXAoKTsKKworCQkvLyBSZWdpc3RlciB0aGUgbWFwcGluZyBiZXR3ZWVuIHRoZSBwcm9qZWN0IGlkIGFuZCB0aGUgYWJzb2x1dGUgcGF0aCB0bworCQkvLyB0aGUgcHJvamVjdCBpbiB0aGUgZmlsZSBzeXN0ZW0uIFRoaXMgd2lsbCBiZSBmb3VuZCBsYXRlciB3aGVuCisJCS8vIGRlc2VyaWFsaXppbmcgd2hlbiB0aGUgcGxhdGZvcm0gVVJJIGlzIG1hcHBlZC4KKworCQlwbGF0Zm9ybVJlc291cmNlTWFwCisJCQkJLnB1dCgKKwkJCQkJCW9yZy5lY2xpcHNlLnN0ZW0uZGF0YS5kaXNlYXNlbW9kZWxzLm1vZGVscy5BY3RpdmF0b3IuUExVR0lOX0lELAorCQkJCQkJVVJJLmNyZWF0ZUZpbGVVUkkoRElTRUFTRVNfTU9ERUxTX01PREVMU19QUk9KRUNUX1JPT1QpKTsKKworCQlwbGF0Zm9ybVJlc291cmNlTWFwLnB1dCgKKwkJCQlvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2VzLkFjdGl2YXRvci5QTFVHSU5fSUQsIFVSSQorCQkJCQkJLmNyZWF0ZUZpbGVVUkkoRElTRUFTRVNfUFJPSkVDVF9ST09UKSk7CisKKwkJcGxhdGZvcm1SZXNvdXJjZU1hcAorCQkJCS5wdXQoCisJCQkJCQlvcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5LnBvcHVsYXRpb24uaHVtYW4uQWN0aXZhdG9yLlBMVUdJTl9JRCwKKwkJCQkJCVVSSS5jcmVhdGVGaWxlVVJJKFBPUFVMQVRJT05fREFUQV9QUk9KRUNUX1JPT1QpKTsKKworCQlwbGF0Zm9ybVJlc291cmNlTWFwCisJCQkJLnB1dCgKKwkJCQkJCW9yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkucG9wdWxhdGlvbi5odW1hbi5tb2RlbHMuQWN0aXZhdG9yLlBMVUdJTl9JRCwKKwkJCQkJCVVSSS5jcmVhdGVGaWxlVVJJKFBPUFVMQVRJT05fTU9ERUxfUFJPSkVDVF9ST09UKSk7CisJfSAvLyBzdGF0aWMKKworCS8qKgorCSAqIEBwYXJhbSBpc29LZXkKKwkgKiBAcGFyYW0gYWRtaW5MZXZlbFNldAorCSAqIEBwYXJhbSBkaXNlYXNlTW9kZWxNb2RlbERDCisJICovCisJcHVibGljIERpc2Vhc2VNb2RlbFNjZW5hcmlvU3BlY2lmaWNhdGlvbihmaW5hbCBJU09LZXkgaXNvS2V5LAorCQkJZmluYWwgQWRtaW5MZXZlbFNldCBhZG1pbkxldmVsU2V0LCBEdWJsaW5Db3JlIGRpc2Vhc2VNb2RlbE1vZGVsREMpIHsKKwkJdGhpcy5kaXNlYXNlTW9kZWxNb2RlbERDID0gZGlzZWFzZU1vZGVsTW9kZWxEQzsKKworCQl0aGlzLmlzb0tleSA9IGlzb0tleTsKKwkJdGhpcy5hZG1pbkxldmVsU2V0ID0gYWRtaW5MZXZlbFNldDsKKwkJZ2V0RHVibGluQ29yZSgpLnNldEZvcm1hdChTY2VuYXJpb1BhY2thZ2UuZU5TX1VSSSk7CisJfSAvLyBEaXNlYXNlTW9kZWxTY2VuYXJpb1NwZWNpZmljYXRpb24KKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcm5hbC5kYXRhLnNwZWNpZmljYXRpb25zLk1vZGVsU3BlY2lmaWNhdGlvbiNjcmVhdGVJZGVudGlmaWFibGVJbnN0YW5jZSgpCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIFNjZW5hcmlvIGNyZWF0ZUlkZW50aWZpYWJsZUluc3RhbmNlKCkgeworCQlmaW5hbCBTY2VuYXJpbyByZXRWYWx1ZSA9IFNjZW5hcmlvRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlU2NlbmFyaW8oKTsKKwkJLy8gVGhlIGdlbmVyYXRlZCBHcmFwaHMgZXRjLiwgYWxsIGhhdmUgZHVibGluIGNvcmUgdGhhdCByZWZlcmVuY2VzCisJCS8vIHRoZW0gYXMgcGx1Z2lucy4gVGhpcyBpcyBhcyBpdCBzaG91bGQgYmUgd2hlbiBTVEVNIGlzIHJ1bm5pbmcsCisJCS8vIGJ1dCByaWdodCBub3cgd2UncmUgcnVubmluZyBzdGFuZC1hbG9uZSBhbmQgd2FudCB0byBhY2Nlc3MgdGhlCisJCS8vIHBsdWdpbnMgYXMgcHJvamVjdHMgKHRoZXkgYXJlbid0IHBsdWdnZWQgaW50byBvdXIgcnVubmluZyB2ZXJzaW9uCisJCS8vIG9mIEVjbGlwc2UpLiBTdWJzdGl0dXRlICJyZXNvdXJjZSIgZm9yICJwbHVnaW4iIGluIHRoZSBVUkkncyB3ZQorCQkvLyB1c2UgYW5kIGFsbCB3aWxsIGJlIHdlbGwuCisKKwkJZGlzZWFzZU1vZGVsTW9kZWwgPSAoTW9kZWwpIFV0aWxpdHkKKwkJCQkuZ2V0SWRlbnRpZmlhYmxlKGdldElkZW50aWZpYWJsZVByb2plY3RVUkkoZGlzZWFzZU1vZGVsTW9kZWxEQykpOworCQlyZXRWYWx1ZS5zZXRNb2RlbChkaXNlYXNlTW9kZWxNb2RlbCk7CisKKwkJZGlzZWFzZU1vZGVsID0gZXh0cmFjdERpc2Vhc2VNb2RlbChkaXNlYXNlTW9kZWxNb2RlbCk7CisJCXNlcXVlbmNlciA9IGNyZWF0ZVNlcXVlbmNlcigpOworCQlyZXRWYWx1ZS5zZXRTZXF1ZW5jZXIoc2VxdWVuY2VyKTsKKwkJaW5mZWN0b3IgPSBjcmVhdGVJbmZlY3RvcihkaXNlYXNlTW9kZWxNb2RlbCk7CisJCXJldFZhbHVlLmdldFNjZW5hcmlvRGVjb3JhdG9ycygpLmFkZChpbmZlY3Rvcik7CisJCXJldHVybiByZXRWYWx1ZTsKKwl9IC8vIGNyZWF0ZUlkZW50aWZpYWJsZUluc3RhbmNlCisKKwlwcml2YXRlIERpc2Vhc2VNb2RlbCBleHRyYWN0RGlzZWFzZU1vZGVsKE1vZGVsIGRpc2Vhc2VNb2RlbE1vZGVsKSB7CisJCURpc2Vhc2VNb2RlbCByZXRWYWx1ZSA9IG51bGw7CisKKwkJaW50IHBvcyA9IC0xOworCQlmb3IgKE5vZGVEZWNvcmF0b3Igbm9kZURlY29yYXRvciA6IGRpc2Vhc2VNb2RlbE1vZGVsCisJCQkJLmdldE5vZGVEZWNvcmF0b3JzKCkpIHsKKwkJCWlmIChub2RlRGVjb3JhdG9yLmVJc1Byb3h5KCkpIHsKKwkJCQlyZXRWYWx1ZSA9IChEaXNlYXNlTW9kZWwpIFV0aWxpdHkKKwkJCQkJCS5nZXRJZGVudGlmaWFibGUoVVJJCisJCQkJCQkJCS5jcmVhdGVVUkkoSWRlbnRpZmlhYmxlU3BlY2lmaWNhdGlvbgorCQkJCQkJCQkJCS5jb252ZXJ0VG9Qcm9qZWN0VVJJKCgoSW50ZXJuYWxFT2JqZWN0KSBub2RlRGVjb3JhdG9yKQorCQkJCQkJCQkJCQkJLmVQcm94eVVSSSgpLnRvU3RyaW5nKCkpKSk7CisJCQkJKytwb3M7CisJCQkJYnJlYWs7CisJCQl9CisJCX0gLy8gZm9yIGVhY2ggbm9kZURlY29yYXRvcgorCQkvLyBSZXBsYWNlIHdpdGggdGhlIGFjdHVhbCBkaXNlYXNlIG1vZGVsCisJCWlmKHBvcyA+PTApIGRpc2Vhc2VNb2RlbE1vZGVsLmdldE5vZGVEZWNvcmF0b3JzKCkuc2V0KHBvcywgcmV0VmFsdWUpOworCisJCXJldHVybiByZXRWYWx1ZTsKKwl9IC8vIGV4dHJhY3REaXNlYXNlTW9kZWwKKworCUBPdmVycmlkZQorCXByb3RlY3RlZCBTdHJpbmcgZ2V0UmVsYXRpdmVTZXJpYWxpemF0aW9uUGF0aCgpIHsKKwkJZmluYWwgU3RyaW5nQnVpbGRlciBzYiA9IG5ldyBTdHJpbmdCdWlsZGVyKCk7CisJCXNiLmFwcGVuZChDb3VudHJ5R3JhcGhQcm9wZXJ0eUZpbGVTcGVjaWZpY2F0aW9uLkNPVU5UUllfRElSKTsKKwkJc2IuYXBwZW5kKEZpbGUuc2VwYXJhdG9yQ2hhcik7CisJCXNiLmFwcGVuZChpc29LZXkudG9TdHJpbmcoKSk7CisJCXJldHVybiBzYi50b1N0cmluZygpOworCX0KKworCUBPdmVycmlkZQorCXByb3RlY3RlZCBTdHJpbmcgZ2V0U2VyaWFsaXphdGlvbkZpbGVOYW1lUm9vdCgpIHsKKwkJZmluYWwgU3RyaW5nQnVpbGRlciBzYiA9IG5ldyBTdHJpbmdCdWlsZGVyKGlzb0tleS50b1N0cmluZygpKTsKKwkJc2IuYXBwZW5kKCJfIik7IC8vJE5PTi1OTFMtMSQKKwkJc2IuYXBwZW5kKGFkbWluTGV2ZWxTZXQudG9TdHJpbmcoKSk7CisJCXNiLmFwcGVuZCgiX2Rpc2Vhc2VfIik7IC8vJE5PTi1OTFMtMSQKKwkJaWYgKGRpc2Vhc2VNb2RlbCAhPSBudWxsKSB7CisJCQlzYi5hcHBlbmQoZGlzZWFzZU1vZGVsLmdldERpc2Vhc2VOYW1lKCkudHJpbSgpLnJlcGxhY2UoIiAiLCAiXyIpKTsgLy8kTk9OLU5MUy0xJC8vJE5PTi1OTFMtMiQKKwkJfQorCQlyZXR1cm4gc2IudG9TdHJpbmcoKTsKKwl9CisKKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgU3RyaW5nIGdldFRhcmdldFBsdWdpbklkKCkgeworCQlyZXR1cm4gb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmRpc2Vhc2Vtb2RlbHMuc2NlbmFyaW9zLkFjdGl2YXRvci5QTFVHSU5fSUQ7CisJfQorCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIFN0cmluZyBnZXRUaXRsZURlc2NyaXB0b3IoKSB7CisJCWZpbmFsIFN0cmluZ0J1aWxkZXIgc2IgPSBuZXcgU3RyaW5nQnVpbGRlcihpc29LZXkudG9TdHJpbmcoKSk7CisJCXNiLmFwcGVuZCgiICIpOyAvLyROT04tTkxTLTEkCisJCXNiCisJCQkJLmFwcGVuZChhZG1pbkxldmVsU2V0LmdldE51bUFkbWluTGV2ZWxzKCkgPiAxID8gIiAoTGV2ZWxzOiAiIDogIiAoTGV2ZWw6ICIpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKKwkJc2IuYXBwZW5kKGFkbWluTGV2ZWxTZXQudG9TdHJpbmcoIiwiKSk7IC8vJE5PTi1OTFMtMSQKKwkJc2IuYXBwZW5kKCIpICIpOyAvLyROT04tTkxTLTEkCisJCXNiLmFwcGVuZChkaXNlYXNlTW9kZWwuZ2V0RGlzZWFzZU5hbWUoKSk7CisJCXNiLmFwcGVuZCgiLCAiKTsgLy8kTk9OLU5MUy0xJAorCQlzYi5hcHBlbmQoaW5mZWN0b3IuZ2V0SW5mZWN0aW91c0NvdW50KCkpOworCQlzYi5hcHBlbmQoIiBpbmZlY3Rpb25zIGluICIpOyAvLyROT04tTkxTLTEkCisJCXNiLmFwcGVuZChpbmZlY3RlZFJlZ2lvbk5hbWUpOworCisJCXJldHVybiBzYi50b1N0cmluZygpOworCX0gLy8gZ2V0VGl0bGVEZXNjcmlwdG9yCisKKwlwcml2YXRlIFNlcXVlbmNlciBjcmVhdGVTZXF1ZW5jZXIoKSB7CisJCWZpbmFsIFNlcXVlbmNlciByZXRWYWx1ZSA9IFNlcXVlbmNlckZhY3RvcnkuZUlOU1RBTkNFCisJCQkJLmNyZWF0ZVNlcXVlbnRpYWxTZXF1ZW5jZXIoKTsKKworCQlmaW5hbCBTVEVNVGltZSBzdGFydFRpbWUgPSBNb2RlbEZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZVNURU1UaW1lKCk7CisJCXN0YXJ0VGltZS5zZXRUaW1lKERhdGUudmFsdWVPZigiMjAwMC0wMS0wMSIpKTsgLy8kTk9OLU5MUy0xJAorCQlyZXRWYWx1ZS5zZXRTdGFydFRpbWUoc3RhcnRUaW1lKTsKKworCQlyZXRWYWx1ZS5zZXRDeWNsZSgoaW50KSBTVEVNVGltZS5Vbml0cy5EQVkuZ2V0TWlsbGlzZWNvbmRzKCkpOworCQlyZXRWYWx1ZS5zZXRVUkkoU1RFTVVSSS5jcmVhdGVVUkkoInNlcXVlbmNlci8iK1NURU1VUkkuZ2VuZXJhdGVVbmlxdWVQYXJ0KCkpKTsKKwkJcmV0dXJuIHJldFZhbHVlOworCX0gLy8gY3JlYXRlU2VxdWVuY2VyCisKKwlwcml2YXRlIFNJSW5mZWN0b3IgY3JlYXRlSW5mZWN0b3IoTW9kZWwgZGlzZWFzZU1vZGVsTW9kZWwpIHsKKwkJU0lJbmZlY3RvciByZXRWYWx1ZSA9IG51bGw7CisJCS8vIFdlIG5lZWQgdG8gZGVzY2VuZCBpbnRvIHRoZSBtb2RlbCBhbmQgZmluZCBvbmUgbG9jYXRpb24gdGhhdCBjYW4gYmUKKwkJLy8gcGxhY2Ugd2hlcmUgdGhlIGluZmVjdGlvbiBzdGFydHMuCisKKwkJZm9yIChNb2RlbCBtb2RlbCA6IGRpc2Vhc2VNb2RlbE1vZGVsLmdldE1vZGVscygpKSB7CisJCQlpZiAobW9kZWwuZUlzUHJveHkoKSkgeworCQkJCWZpbmFsIE1vZGVsIHBvcHVsYXRpb25Nb2RlbCA9IChNb2RlbCkgVXRpbGl0eQorCQkJCQkJLmdldElkZW50aWZpYWJsZShVUkkKKwkJCQkJCQkJLmNyZWF0ZVVSSShJZGVudGlmaWFibGVTcGVjaWZpY2F0aW9uCisJCQkJCQkJCQkJLmNvbnZlcnRUb1Byb2plY3RVUkkoKChJbnRlcm5hbEVPYmplY3QpIG1vZGVsKQorCQkJCQkJCQkJCQkJLmVQcm94eVVSSSgpLnRvU3RyaW5nKCkpKSk7CisJCQkJLy8gVGhlIHBvcHVsYXRpb24gbW9kZWw/CisJCQkJaWYgKHBvcHVsYXRpb25Nb2RlbC5nZXRVUkkoKS50b1N0cmluZygpLmNvbnRhaW5zKCJwb3B1bGF0aW9uIikpIHsgLy8kTk9OLU5MUy0xJAorCQkJCQkvLyBZZXMKKwkJCQkJZmluYWwgR3JhcGggcG9wdWxhdGlvbkdyYXBoID0gcG9wdWxhdGlvbk1vZGVsLmdldEdyYXBocygpCisJCQkJCQkJLmdldCgwKTsKKworCQkJCQlmaW5hbCBHcmFwaCBwb3VsYXRpb25EYXRhID0gKEdyYXBoKSBVdGlsaXR5CisJCQkJCQkJLmdldElkZW50aWZpYWJsZShVUkkKKwkJCQkJCQkJCS5jcmVhdGVVUkkoSWRlbnRpZmlhYmxlU3BlY2lmaWNhdGlvbgorCQkJCQkJCQkJCQkuY29udmVydFRvUHJvamVjdFVSSSgoKEludGVybmFsRU9iamVjdCkgcG9wdWxhdGlvbkdyYXBoKQorCQkJCQkJCQkJCQkJCS5lUHJveHlVUkkoKS50b1N0cmluZygpKSkpOworCisJCQkJCWZpbmFsIEVNYXA8VVJJLCBOb2RlTGFiZWw+IGRhdGEgPSBwb3VsYXRpb25EYXRhCisJCQkJCQkJLmdldE5vZGVMYWJlbHMoKTsKKwkJCQkJZmluYWwgTm9kZUxhYmVsIG5vZGVMYWJlbCA9IChOb2RlTGFiZWwpIGRhdGEudmFsdWVzKCkKKwkJCQkJCQkudG9BcnJheSgpWzBdOworCQkJCQlmaW5hbCBVUkkgdGFyZ2V0VVJJID0gbm9kZUxhYmVsCisJCQkJCQkJLmdldFVSSU9mSWRlbnRpZmlhYmxlVG9CZUxhYmVsZWQoKTsKKworCQkJCQlmaW5hbCBTdHJpbmcgdGFyZ2V0SVNPS2V5U3RyaW5nID0gdGFyZ2V0VVJJLmxhc3RTZWdtZW50KCk7CisKKwkJCQkJLy8gaW5mZWN0ZWRSZWdpb25OYW1lID0gR2VvZ3JhcGhpY05hbWVzCisJCQkJCS8vIC5nZXROYW1lKHRhcmdldElTT0tleVN0cmluZyk7CisJCQkJCWluZmVjdGVkUmVnaW9uTmFtZSA9IHRhcmdldElTT0tleVN0cmluZzsKKworCQkJCQlyZXRWYWx1ZSA9IFN0YW5kYXJkRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlU0lJbmZlY3RvcigpOworCQkJCQlyZXRWYWx1ZS5zZXRVUkkoU1RFTVVSSS5jcmVhdGVVUkkoIkluZmVjdG9yLyIrU1RFTVVSSS5nZW5lcmF0ZVVuaXF1ZVBhcnQoKSkpOworCQkJCQlyZXRWYWx1ZS5zZXRUYXJnZXRVUkkodGFyZ2V0VVJJKTsKKwkJCQkJcmV0VmFsdWUuc2V0RGlzZWFzZU5hbWUoZGlzZWFzZU1vZGVsLmdldERpc2Vhc2VOYW1lKCkpOworCQkJCQlyZXRWYWx1ZS5zZXRQb3B1bGF0aW9uSWRlbnRpZmllcihkaXNlYXNlTW9kZWwKKwkJCQkJCQkuZ2V0UG9wdWxhdGlvbklkZW50aWZpZXIoKSk7CisJCQkJCXJldFZhbHVlLnNldEluZmVjdGlvdXNDb3VudChJTkZFQ1RJT1VTX0NPVU5UKTsKKwkJCQkJcmV0VmFsdWUuc2V0SW5mZWN0UGVyY2VudGFnZShmYWxzZSk7CisJCQkJCXJldFZhbHVlLmdldER1YmxpbkNvcmUoKS5zZXRUaXRsZSgKKwkJCQkJCQkiSW5mZWN0ICIgKyBJTkZFQ1RJT1VTX0NPVU5UICsgIiAiIC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAorCQkJCQkJCQkJKyBkaXNlYXNlTW9kZWwuZ2V0UG9wdWxhdGlvbklkZW50aWZpZXIoKQorCQkJCQkJCQkJKyAiIGluICIgKyBpbmZlY3RlZFJlZ2lvbk5hbWUpOyAvLyROT04tTkxTLTEkCisJCQkJCWJyZWFrOworCQkJCX0KKwkJCX0KKwkJfSAvLyBmb3IgZWFjaCBub2RlRGVjb3JhdG9yCisKKwkJcmV0dXJuIHJldFZhbHVlOworCX0gLy8gY3JlYXRlSW5mZWN0b3IKKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcm5hbC5kYXRhLnNwZWNpZmljYXRpb25zLklkZW50aWZpYWJsZVNwZWNpZmljYXRpb24jc2VyaWFsaXplKGphdmEubGFuZy5TdHJpbmcpCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgc2VyaWFsaXplKFN0cmluZyBkaXJlY3RvcnkpIHRocm93cyBJT0V4Y2VwdGlvbiB7CisJCWZpbmFsIExpc3Q8SWRlbnRpZmlhYmxlPiBzZXQgPSBuZXcgQXJyYXlMaXN0PElkZW50aWZpYWJsZT4oKTsKKwkJc2V0LmFkZChnZXRJZGVudGlmaWFibGUoKSk7CisJCXNldC5hZGQoc2VxdWVuY2VyKTsKKwkJaWYgKGluZmVjdG9yICE9IG51bGwpIHsKKwkJCXNldC5hZGQoaW5mZWN0b3IpOworCQl9CisKKwkJVXRpbGl0eS5zZXJpYWxpemVJZGVudGlmaWFibGVzKHNldCwgY29udmVydGVyLm5vcm1hbGl6ZShVUkkKKwkJCQkuY3JlYXRlRmlsZVVSSShkaXJlY3RvcnkgKyBGaWxlLnNlcGFyYXRvcgorCQkJCQkJKyBnZXRSZWxhdGl2ZVNlcmlhbGl6YXRpb25QYXRoQW5kRmlsZU5hbWUoKSkpKTsKKwl9IC8vIHNlcmlhbGl6ZQorCisJcHVibGljIGludCBjb21wYXJlVG8oRGlzZWFzZU1vZGVsU2NlbmFyaW9TcGVjaWZpY2F0aW9uIG8pIHsKKwkJLy8gVE9ETyBBdXRvLWdlbmVyYXRlZCBtZXRob2Qgc3R1YgorCQlyZXR1cm4gMDsKKwl9CisKKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgU3RyaW5nIGdldFNlcmlhbGl6YXRpb25GaWxlTmFtZUV4dGVuc2lvbigpIHsKKwkJcmV0dXJuIFNjZW5hcmlvUGFja2FnZS5lTkFNRTsKKwl9CisKK30gLy8gRGlzZWFzZU1vZGVsU2NlbmFyaW9TcGVjaWZpY2F0aW9uClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmludGVybmFsLmRpc2Vhc2Vtb2RlbHMuc2NlbmFyaW9zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2ludGVybmFsL2Rpc2Vhc2Vtb2RlbHMvc2NlbmFyaW9zL0Rpc2Vhc2VNb2RlbFNjZW5hcmlvR2VuZXJhdG9yLmphdmEgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uaW50ZXJuYWwuZGlzZWFzZW1vZGVscy5zY2VuYXJpb3Mvc3JjL29yZy9lY2xpcHNlL3N0ZW0vaW50ZXJuYWwvZGlzZWFzZW1vZGVscy9zY2VuYXJpb3MvRGlzZWFzZU1vZGVsU2NlbmFyaW9HZW5lcmF0b3IuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NmYyZTMyCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmludGVybmFsLmRpc2Vhc2Vtb2RlbHMuc2NlbmFyaW9zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2ludGVybmFsL2Rpc2Vhc2Vtb2RlbHMvc2NlbmFyaW9zL0Rpc2Vhc2VNb2RlbFNjZW5hcmlvR2VuZXJhdG9yLmphdmEKQEAgLTAsMCArMSwyNjQgQEAKKy8vIERpc2Vhc2VTY2VuYXJpb0dlbmVyYXRvci5qYXZhCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uaW50ZXJuYWwuZGlzZWFzZW1vZGVscy5zY2VuYXJpb3M7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDkgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgamF2YS5pby5GaWxlOworaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247CitpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuTWFwOworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlVSSTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUucGx1Z2luLkVjb3JlUGx1Z2luOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5Db25zdGFudHM7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLk1vZGVsUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5LklTT0tleTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmRQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uaW50ZXJuYWwuZGF0YS5Nb2RlbEdlbmVyYXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmludGVybmFsLmRhdGEuUGx1Z2luRmlsZUdlbmVyYXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmludGVybmFsLmRhdGEuZ2VuZXJhdGVkcGx1Z2luLkR1YmxpbkNvcmU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcm5hbC5kYXRhLmdlbmVyYXRlZHBsdWdpbi5FeHRlbnNpb247CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcm5hbC5kYXRhLmdlbmVyYXRlZHBsdWdpbi5HZW5lcmF0ZWRwbHVnaW5GYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uaW50ZXJuYWwuZGF0YS5nZW5lcmF0ZWRwbHVnaW4uUGx1Z2luOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uaW50ZXJuYWwuZGF0YS5nZW5lcmF0ZWRwbHVnaW4uU3RlbUNhdGVnb3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uaW50ZXJuYWwuZGF0YS5nZW9ncmFwaHkuR2VvZ3JhcGh5UGx1Z2luRmlsZUdlbmVyYXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmludGVybmFsLmRhdGEuZ2VvZ3JhcGh5Lm1vZGVscy5HZW9ncmFwaHlNb2RlbEdlbmVyYXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmludGVybmFsLmRhdGEuZ2VvZ3JhcGh5LnNwZWNpZmljYXRpb25zLkFkbWluTGV2ZWxTZXQ7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcm5hbC5kYXRhLmdlb2dyYXBoeS5zcGVjaWZpY2F0aW9ucy5Db3VudHJ5R3JhcGhQcm9wZXJ0eUZpbGVTcGVjaWZpY2F0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uaW50ZXJuYWwuZGF0YS5zcGVjaWZpY2F0aW9ucy5EaXNlYXNlTW9kZWxTY2VuYXJpb1NwZWNpZmljYXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcm5hbC5kYXRhLnNwZWNpZmljYXRpb25zLklkZW50aWZpYWJsZVNwZWNpZmljYXRpb247CisKKy8qKgorICogVGhpcyBjbGFzcyBwcm9jZXNzZXMgdGhlIGdlbmVyYXRlZCBkaXNlYXNlIG1vZGVsIG1vZGVsIGZpbGVzIHRvIGNyZWF0ZQorICogRGlzZWFzZSBtb2RlbCBzY2VuYXJpb3MuCisgKi8KK3B1YmxpYyBjbGFzcyBEaXNlYXNlTW9kZWxTY2VuYXJpb0dlbmVyYXRvciBleHRlbmRzIEdlb2dyYXBoeU1vZGVsR2VuZXJhdG9yIHsKKworCUBTdXBwcmVzc1dhcm5pbmdzKCJ1bnVzZWQiKQorCXByaXZhdGUgZmluYWwgTW9kZWxQYWNrYWdlIG1vZGVsUGFja2FnZSA9IE1vZGVsUGFja2FnZS5lSU5TVEFOQ0U7CisJQFN1cHByZXNzV2FybmluZ3MoInVudXNlZCIpCisJcHJpdmF0ZSBmaW5hbCBTdGFuZGFyZFBhY2thZ2Ugc3RhbmRhcmRQYWNrYWdlID0gU3RhbmRhcmRQYWNrYWdlLmVJTlNUQU5DRTsKKworCS8qKgorCSAqIFRoZSBpZCBvZiB0aGUgR2VvZ3JhcGh5IGNhdGVnb3J5CisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgSURfU0NFTkFSSU9fR0VPR1JBUEhZX0NBVEVHT1JZID0gUGx1Z2luRmlsZUdlbmVyYXRvci5JRF9TQ0VOQVJJT19DQVRFR09SWQorCQkJKyAiLmdlb2dyYXBoeSI7IC8vJE5PTi1OTFMtMSQKKworCS8qKgorCSAqIFRoZSBpZCBvZiB0aGUgUG9saXRpY2FsIGNhdGVnb3J5CisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgSURfU0NFTkFSSU9fR0VPR1JBUEhZX1BPTElUSUNBTF9DQVRFR09SWSA9IElEX1NDRU5BUklPX0dFT0dSQVBIWV9DQVRFR09SWQorCQkJKyAiLnBvbGl0aWNhbCI7IC8vJE5PTi1OTFMtMSQKKworCS8qKgorCSAqIFRoZSBpZCBvZiB0aGUgQ291bnRyaWVzIGNhdGVnb3J5CisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgSURfU0NFTkFSSU9fR0VPR1JBUEhZX1BPTElUSUNBTF9DT1VOVFJJRVNfQ0FURUdPUlkgPSBJRF9TQ0VOQVJJT19HRU9HUkFQSFlfUE9MSVRJQ0FMX0NBVEVHT1JZCisJCQkrICIuY291bnRyaWVzIjsgLy8kTk9OLU5MUy0xJAorCisJCisJc3RhdGljIHsKKwkJLy8gVGhpcyBzZXRzIHVwIHRoZSBtYXBwaW5nIGJldHdlZW4gdGhlICJwbGF0Zm9ybSIgVVJJJ3MgYW5kIHRoZQorCQkvLyBwcm9qZWN0cyBpbiB0aGUgZmlsZSBzeXN0ZW0uCisKKwkJLy8gQ1dEIGlzIHRoZSBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5CisJCWZpbmFsIFN0cmluZyBDV0QgPSBTeXN0ZW0uZ2V0UHJvcGVydHkoInVzZXIuZGlyIik7IC8vJE5PTi1OTFMtMSQKKwkJLy8gV09SS1NQQUNFIGlzIHRoZSBkaXJlY3Rvcnkgb2YgdGhlIHBhcmVudCB3b3Jrc3BhY2UKKwkJZmluYWwgU3RyaW5nIFdPUktTUEFDRSA9IENXRC5zdWJzdHJpbmcoMCwgQ1dECisJCQkJLmxhc3RJbmRleE9mKEZpbGUuc2VwYXJhdG9yKSk7CisKKwkJLy8gVGhlIHBhdGggdG8gdGhlIGRpc2Vhc2VzIHByb2plY3QKKwkJZmluYWwgU3RyaW5nIERJU0VBU0VTX01PREVMU19NT0RFTFNfUFJPSkVDVF9ST09UID0gV09SS1NQQUNFCisJCQkJKyBGaWxlLnNlcGFyYXRvcgorCQkJCSsgb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmRpc2Vhc2Vtb2RlbHMubW9kZWxzLkFjdGl2YXRvci5QTFVHSU5fSUQKKwkJCQkrIEZpbGUuc2VwYXJhdG9yOworCisJCS8vIFRoZSBwYXRoIHRvIHRoZSBkaXNlYXNlcyBwcm9qZWN0CisJCWZpbmFsIFN0cmluZyBESVNFQVNFU19QUk9KRUNUX1JPT1QgPSBXT1JLU1BBQ0UgKyBGaWxlLnNlcGFyYXRvcgorCQkJCSsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlcy5BY3RpdmF0b3IuUExVR0lOX0lECisJCQkJKyBGaWxlLnNlcGFyYXRvcjsKKworCQlmaW5hbCBNYXA8U3RyaW5nLCBVUkk+IHBsYXRmb3JtUmVzb3VyY2VNYXAgPSBFY29yZVBsdWdpbgorCQkJCS5nZXRQbGF0Zm9ybVJlc291cmNlTWFwKCk7CisKKwkJLy8gUmVnaXN0ZXIgdGhlIG1hcHBpbmcgYmV0d2VlbiB0aGUgcHJvamVjdCBpZCBhbmQgdGhlIGFic29sdXRlIHBhdGggdG8KKwkJLy8gdGhlIHByb2plY3QgaW4gdGhlIGZpbGUgc3lzdGVtLiBUaGlzIHdpbGwgYmUgZm91bmQgbGF0ZXIgd2hlbgorCQkvLyBkZXNlcmlhbGl6aW5nIHdoZW4gdGhlIHBsYXRmb3JtIFVSSSBpcyBtYXBwZWQuCisKKwkJcGxhdGZvcm1SZXNvdXJjZU1hcAorCQkJCS5wdXQoCisJCQkJCQlvcmcuZWNsaXBzZS5zdGVtLmRhdGEuZGlzZWFzZW1vZGVscy5tb2RlbHMuQWN0aXZhdG9yLlBMVUdJTl9JRCwKKwkJCQkJCVVSSS5jcmVhdGVGaWxlVVJJKERJU0VBU0VTX01PREVMU19NT0RFTFNfUFJPSkVDVF9ST09UKSk7CisKKwkJcGxhdGZvcm1SZXNvdXJjZU1hcC5wdXQoCisJCQkJb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlcy5BY3RpdmF0b3IuUExVR0lOX0lELCBVUkkKKwkJCQkJCS5jcmVhdGVGaWxlVVJJKERJU0VBU0VTX1BST0pFQ1RfUk9PVCkpOworCX0gLy8gc3RhdGljCisKKwkvKioKKwkgKiBAcGFyYW0gYXJncworCSAqICAgICAgICAgICAgdGhlIFVSSSBvZiB0aGUgZ2VuZXJhdGVkIGdlb2dyYXBoeSBwbHVnaW4ueG1sIGZpbGUKKwkgKi8KKwlwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihmaW5hbCBTdHJpbmdbXSBhcmdzKSB7CisJCS8vIElzIHRoZSBwbHVnaW4gZmlsZSBzcGVjaWZpZWQ/CisJCWlmIChhcmdzLmxlbmd0aCA9PSAwKSB7CisJCQkvLyBZZXMKKwkJCVN5c3RlbS5lcnIucHJpbnRsbigiTWlzc2luZyBzcGVjaWZpY2F0aW9uIG9mIHRoZSBwbHVnaW4gZmlsZSIpOyAvLyROT04tTkxTLTEkCisJCX0gLy8gaWYKKwkJZWxzZSB7CisKKwkJCWZpbmFsIFN0cmluZyBHRU5FUkFURURfRklMRVNfUEFUSCA9IGFyZ3NbMF07CisJCQlmaW5hbCBTdHJpbmcgZGlzZWFzZU1vZGVsTW9kZWxQcm9qZWNOYW1lID0gYXJnc1sxXTsKKworCQkJZmluYWwgU3RyaW5nIEdFTkVSQVRFRF9TQ0VOQVJJT1NfUEFUSCA9IEdFTkVSQVRFRF9GSUxFU19QQVRICisJCQkJCSsgRmlsZS5zZXBhcmF0b3IgKyAicmVzb3VyY2VzIiArIEZpbGUuc2VwYXJhdG9yICsgImRhdGEiOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKKworCQkJZmluYWwgRmlsZSBkaXNlYXNlTW9kZWxNb2RlbFBsdWdpbkZpbGUgPSBuZXcgRmlsZSgKKwkJCQkJIi4uIgkrIEZpbGUuc2VwYXJhdG9yICsgZGlzZWFzZU1vZGVsTW9kZWxQcm9qZWNOYW1lICsgRmlsZS5zZXBhcmF0b3IgKyBQbHVnaW5GaWxlR2VuZXJhdG9yLlBMVUdJTl9YTUxfRklMRV9OQU1FKTsgLy8kTk9OLU5MUy0xJAorCQkJZmluYWwgVVJJIGRpc2Vhc2VNb2RlbE1vZGVsUGx1Z2luRmlsZVVSSSA9IFVSSQorCQkJCQkuY3JlYXRlRmlsZVVSSShkaXNlYXNlTW9kZWxNb2RlbFBsdWdpbkZpbGUKKwkJCQkJCQkuZ2V0QWJzb2x1dGVQYXRoKCkpOworCisJCQlEaXNlYXNlTW9kZWxTY2VuYXJpb0dlbmVyYXRvciBkbXNnID0gbmV3IERpc2Vhc2VNb2RlbFNjZW5hcmlvR2VuZXJhdG9yKCk7CisKKwkJCWZpbmFsIE1hcDxJU09LZXksIExpc3Q8RGlzZWFzZU1vZGVsU2NlbmFyaW9TcGVjaWZpY2F0aW9uPj4gc2NlbmFyaW9TcGVjaWZpY2F0aW9ucyA9IGRtc2cKKwkJCQkJLnByb2Nlc3NGaWxlczIoZGlzZWFzZU1vZGVsTW9kZWxQbHVnaW5GaWxlVVJJKTsKKworCQkJZm9yIChmaW5hbCBJU09LZXkgaXNvS2V5IDogc29ydElTT0tleXMoc2NlbmFyaW9TcGVjaWZpY2F0aW9ucykpIHsKKwkJCQkvLyBOb3cgc2VyaWFsaXplIHRoZSBJZGVudGlmaWFibGVzCisJCQkJZm9yIChmaW5hbCBJZGVudGlmaWFibGVTcGVjaWZpY2F0aW9uIGdtcyA6IHNjZW5hcmlvU3BlY2lmaWNhdGlvbnMKKwkJCQkJCS5nZXQoaXNvS2V5KSkgeworCQkJCQl0cnkgeworCQkJCQkJZ21zLnNlcmlhbGl6ZShHRU5FUkFURURfU0NFTkFSSU9TX1BBVEgpOworCQkJCQl9IGNhdGNoIChmaW5hbCBJT0V4Y2VwdGlvbiBlKSB7CisJCQkJCQllLnByaW50U3RhY2tUcmFjZSgpOworCQkJCQl9CisJCQkJfSAvLyBmb3IgZ21zCisJCQl9IC8vIGZvciBpc29LZXkKKworCQkJLy8gQ3JlYXRlIHRoZSBpbnN0YW5jZSBvZiBwbHVnaW4ueG1sIHRoYXQgd2UnbGwgc2VyaWFsaXplIGxhdGVyCisJCQlmaW5hbCBQbHVnaW4gcGx1Z2lueG1sID0gR2VuZXJhdGVkcGx1Z2luRmFjdG9yeS5lSU5TVEFOQ0UKKwkJCQkJLmNyZWF0ZVBsdWdpbigpOworCQkJZmluYWwgRXh0ZW5zaW9uIGV4dGVuc2lvbiA9IEdlbmVyYXRlZHBsdWdpbkZhY3RvcnkuZUlOU1RBTkNFCisJCQkJCS5jcmVhdGVFeHRlbnNpb24oKTsKKworCQkJLy8gQWRkIHRoZSAic2NlbmFyaW8iIGV4dGVuc2lvbiBwb2ludAorCQkJZXh0ZW5zaW9uLnNldFBvaW50KENvbnN0YW50cy5JRF9TQ0VOQVJJT19FWFRFTlNJT05fUE9JTlQpOworCisJCQkvLyBBZGQgdGhlIGNhdGVnb3JpZXMgdG8gdGhlIGV4dGVuc2lvbgorCQkJYWRkQ2F0YWdvcmllc1RvRXh0ZW5zaW9uKGV4dGVuc2lvbik7CisJCQkKKwkJCXBsdWdpbnhtbC5nZXRFeHRlbnNpb25lbGVtZW50KCkuYWRkKGV4dGVuc2lvbik7CisKKwkJCS8vIE5vdyBhZGQgdGhlIGR1YmxpbiBjb3JlIGVudHJpZXMgdG8gdGhlIHBsdWdpbi54bWwgZmlsZSBmb3IKKwkJCS8vIGVhY2ggb2YgdGhlIG1vZGVscworCQkJZm9yIChmaW5hbCBJU09LZXkgaXNvS2V5IDogc29ydElTT0tleXMoc2NlbmFyaW9TcGVjaWZpY2F0aW9ucykpIHsKKwkJCQlmaW5hbCBTdGVtQ2F0ZWdvcnkgY291bnRyeUNhdGVnb3J5ID0gR2VuZXJhdGVkcGx1Z2luRmFjdG9yeS5lSU5TVEFOQ0UKKwkJCQkJCS5jcmVhdGVTdGVtQ2F0ZWdvcnkoKTsKKwkJCQlmaW5hbCBTdHJpbmcgQ09VTlRSWV9DQVRBR09SWV9TVFJJTkcgPSBJRF9TQ0VOQVJJT19HRU9HUkFQSFlfUE9MSVRJQ0FMX0NPVU5UUklFU19DQVRFR09SWQorCQkJCQkJKyAiLiIgKyBpc29LZXkudG9TdHJpbmcoKS50b0xvd2VyQ2FzZSgpOyAvLyROT04tTkxTLTEkCisJCQkJY291bnRyeUNhdGVnb3J5LnNldElkKENPVU5UUllfQ0FUQUdPUllfU1RSSU5HKTsKKwkJCQljb3VudHJ5Q2F0ZWdvcnkuc2V0TmFtZShpc29LZXkudG9TdHJpbmcoKSk7CisJCQkJY291bnRyeUNhdGVnb3J5CisJCQkJCQkuc2V0UGFyZW50SWQoSURfU0NFTkFSSU9fR0VPR1JBUEhZX1BPTElUSUNBTF9DT1VOVFJJRVNfQ0FURUdPUlkpOworCQkJCWV4dGVuc2lvbi5nZXRDYXRlZ29yaWVzKCkuYWRkKGNvdW50cnlDYXRlZ29yeSk7CisJCQkJZm9yIChmaW5hbCBJZGVudGlmaWFibGVTcGVjaWZpY2F0aW9uIGdtcyA6IHNjZW5hcmlvU3BlY2lmaWNhdGlvbnMKKwkJCQkJCS5nZXQoaXNvS2V5KSkgeworCQkJCQlmaW5hbCBEdWJsaW5Db3JlIGRjID0gR2VuZXJhdGVkcGx1Z2luRmFjdG9yeS5lSU5TVEFOQ0UKKwkJCQkJCQkuY3JlYXRlRHVibGluQ29yZSgpOworCQkJCQlkYy5zZXRDYXRlZ29yeUlkKENPVU5UUllfQ0FUQUdPUllfU1RSSU5HKTsKKwkJCQkJZXh0ZW5zaW9uLmdldER1YmxpbkNvcmVzKCkuYWRkKAorCQkJCQkJCXBvcHVsYXRlR2VuZXJhdGVkREMoZGMsIGdtcy5nZXREdWJsaW5Db3JlKCkpKTsKKwkJCQl9IC8vIGZvciBnbXMKKwkJCX0gLy8gZm9yIGlzb0tleQorCisJCQlmaW5hbCBVUkkgVEVNUF9QTFVHSU5YTUxfVVJJID0gVVJJCisJCQkJCS5jcmVhdGVGaWxlVVJJKEdFTkVSQVRFRF9GSUxFU19QQVRIICsgRmlsZS5zZXBhcmF0b3IKKwkJCQkJCQkrIFBsdWdpbkZpbGVHZW5lcmF0b3IuUExVR0lOX1hNTF9GSUxFX05BTUUpOworCisJCQkvLyBTZXJpYWxpemUgdGhlIHBsdWdpbi54bWwgZmlsZS4KKwkJCU1vZGVsR2VuZXJhdG9yLndyaXRlUGx1Z2lueG1sKHBsdWdpbnhtbCwgVEVNUF9QTFVHSU5YTUxfVVJJKTsKKworCQkJLy8gQ3JlYXRlIHRoZSBwbHVnaW4ucHJvcGVydGllcyBmaWxlCisJCQljcmVhdGVQbHVnaW5Qcm9wZXJ0dGllcyhHRU5FUkFURURfRklMRVNfUEFUSCk7CisJCX0gLy8gZWxzZQorCX0gLy8gbWFpbgorCisJcHJpdmF0ZSBNYXA8SVNPS2V5LCBMaXN0PERpc2Vhc2VNb2RlbFNjZW5hcmlvU3BlY2lmaWNhdGlvbj4+IHByb2Nlc3NGaWxlczIoCisJCQlVUkkgZGlzZWFzZU1vZGVsTW9kZWxQbHVnaW5GaWxlVVJJKSB7CisKKwkJZmluYWwgTWFwPElTT0tleSwgTGlzdDxEaXNlYXNlTW9kZWxTY2VuYXJpb1NwZWNpZmljYXRpb24+PiByZXRWYWx1ZSA9IG5ldyBIYXNoTWFwPElTT0tleSwgTGlzdDxEaXNlYXNlTW9kZWxTY2VuYXJpb1NwZWNpZmljYXRpb24+PigpOworCisJCS8vIEdldCB0aGUgY29udGVudHMgb2YgdGhlIGRpc2Vhc2UgbW9kZWwgbW9kZWwgcGx1Zy54bWwgZmlsZQorCQlmaW5hbCBQbHVnaW4gZGlzZWFzZU1vZGVsUGx1Z2luWE1MID0gZ2V0UGx1Z2lueG1sKGRpc2Vhc2VNb2RlbE1vZGVsUGx1Z2luRmlsZVVSSSk7CisKKwkJZm9yIChFeHRlbnNpb24gZXh0ZW5zaW9uIDogZGlzZWFzZU1vZGVsUGx1Z2luWE1MLmdldEV4dGVuc2lvbmVsZW1lbnQoKSkgeworCQkJZm9yIChEdWJsaW5Db3JlIGRjIDogZXh0ZW5zaW9uLmdldER1YmxpbkNvcmVzKCkpIHsKKwkJCQlmaW5hbCBNYXA8SVNPS2V5LCBBZG1pbkxldmVsU2V0PiBpc29LZXlBZG1pbkxldmVsU2V0TWFwID0gQ291bnRyeUdyYXBoUHJvcGVydHlGaWxlU3BlY2lmaWNhdGlvbgorCQkJCQkJLnBhcnNlRHVibGluQ29yZUNvdmVyYWdlU3RyaW5nKGRjLmdldENvdmVyYWdlKCkpOworCQkJCWZpbmFsIEFkbWluTGV2ZWxTZXQgYWRtaW5MZXZlbFNldCA9IChBZG1pbkxldmVsU2V0KSBpc29LZXlBZG1pbkxldmVsU2V0TWFwCisJCQkJCQkudmFsdWVzKCkudG9BcnJheSgpWzBdOworCQkJCWZpbmFsIElTT0tleSBpc29LZXkgPSAoSVNPS2V5KSBpc29LZXlBZG1pbkxldmVsU2V0TWFwLmtleVNldCgpCisJCQkJCQkudG9BcnJheSgpWzBdOworCisJCQkJTGlzdDxEaXNlYXNlTW9kZWxTY2VuYXJpb1NwZWNpZmljYXRpb24+IHRlbXAgPSByZXRWYWx1ZQorCQkJCQkJLmdldChpc29LZXkpOworCQkJCWlmICh0ZW1wID09IG51bGwpIHsKKwkJCQkJdGVtcCA9IG5ldyBBcnJheUxpc3Q8RGlzZWFzZU1vZGVsU2NlbmFyaW9TcGVjaWZpY2F0aW9uPigpOworCQkJCQlyZXRWYWx1ZS5wdXQoaXNvS2V5LCB0ZW1wKTsKKwkJCQl9CisJCQkJdGVtcC5hZGQobmV3IERpc2Vhc2VNb2RlbFNjZW5hcmlvU3BlY2lmaWNhdGlvbihpc29LZXksCisJCQkJCQlhZG1pbkxldmVsU2V0LCBkYykpOworCQkJfSAvLyBmb3IgZGMKKwkJfSAvLyBmb3IgRGlzZWFzZSBNb2RlbHMKKworCQlyZXR1cm4gcmV0VmFsdWU7CisJfSAvLyBwcm9jZXNzRmlsZXMyCisJCisJcHJpdmF0ZSBzdGF0aWMgdm9pZCBhZGRDYXRhZ29yaWVzVG9FeHRlbnNpb24oZmluYWwgRXh0ZW5zaW9uIGV4dGVuc2lvbikgeworCisJCWZpbmFsIFN0ZW1DYXRlZ29yeSBzY2VuYXJpb0NhdGFnb3J5ID0gR2VuZXJhdGVkcGx1Z2luRmFjdG9yeS5lSU5TVEFOQ0UKKwkJCQkuY3JlYXRlU3RlbUNhdGVnb3J5KCk7CisJCXNjZW5hcmlvQ2F0YWdvcnkuc2V0SWQoUGx1Z2luRmlsZUdlbmVyYXRvci5JRF9TQ0VOQVJJT19DQVRFR09SWSk7CisJCXNjZW5hcmlvQ2F0YWdvcnkuc2V0TmFtZSgiJSIgKyBQbHVnaW5GaWxlR2VuZXJhdG9yLlVJX1NURU1fQ0FURUdPUllfTkFNRSk7IC8vJE5PTi1OTFMtMSQKKwkJc2NlbmFyaW9DYXRhZ29yeS5zZXRQYXJlbnRJZCgiLyIpOyAvLyROT04tTkxTLTEkCisJCWV4dGVuc2lvbi5nZXRDYXRlZ29yaWVzKCkuYWRkKHNjZW5hcmlvQ2F0YWdvcnkpOworCisJCWZpbmFsIFN0ZW1DYXRlZ29yeSBnZW9ncmFwaHlDYXRhZ29yeSA9IEdlbmVyYXRlZHBsdWdpbkZhY3RvcnkuZUlOU1RBTkNFCisJCQkJLmNyZWF0ZVN0ZW1DYXRlZ29yeSgpOworCQlnZW9ncmFwaHlDYXRhZ29yeS5zZXRJZChJRF9TQ0VOQVJJT19HRU9HUkFQSFlfQ0FURUdPUlkpOworCQlnZW9ncmFwaHlDYXRhZ29yeQorCQkJCS5zZXROYW1lKCIlIiArIEdlb2dyYXBoeVBsdWdpbkZpbGVHZW5lcmF0b3IuVUlfR0VPR1JBUEhZX0NBVEVHT1JZX05BTUUpOyAvLyROT04tTkxTLTEkCisJCWdlb2dyYXBoeUNhdGFnb3J5LnNldFBhcmVudElkKFBsdWdpbkZpbGVHZW5lcmF0b3IuSURfU0NFTkFSSU9fQ0FURUdPUlkpOworCQlleHRlbnNpb24uZ2V0Q2F0ZWdvcmllcygpLmFkZChnZW9ncmFwaHlDYXRhZ29yeSk7CisKKwkJZmluYWwgU3RlbUNhdGVnb3J5IHBvbGl0aWNhbENhdGFnb3J5ID0gR2VuZXJhdGVkcGx1Z2luRmFjdG9yeS5lSU5TVEFOQ0UKKwkJCQkuY3JlYXRlU3RlbUNhdGVnb3J5KCk7CisJCXBvbGl0aWNhbENhdGFnb3J5LnNldElkKElEX1NDRU5BUklPX0dFT0dSQVBIWV9QT0xJVElDQUxfQ0FURUdPUlkpOworCQlwb2xpdGljYWxDYXRhZ29yeQorCQkJCS5zZXROYW1lKCIlIiArIEdlb2dyYXBoeVBsdWdpbkZpbGVHZW5lcmF0b3IuVUlfUE9MSVRJQ0FMX0NBVEVHT1JZX05BTUUpOyAvLyROT04tTkxTLTEkCisJCXBvbGl0aWNhbENhdGFnb3J5LnNldFBhcmVudElkKElEX1NDRU5BUklPX0dFT0dSQVBIWV9DQVRFR09SWSk7CisJCWV4dGVuc2lvbi5nZXRDYXRlZ29yaWVzKCkuYWRkKHBvbGl0aWNhbENhdGFnb3J5KTsKKworCQlmaW5hbCBTdGVtQ2F0ZWdvcnkgY291bnRyaWVzQ2F0YWdvcnkgPSBHZW5lcmF0ZWRwbHVnaW5GYWN0b3J5LmVJTlNUQU5DRQorCQkJCS5jcmVhdGVTdGVtQ2F0ZWdvcnkoKTsKKwkJY291bnRyaWVzQ2F0YWdvcnkKKwkJCQkuc2V0SWQoSURfU0NFTkFSSU9fR0VPR1JBUEhZX1BPTElUSUNBTF9DT1VOVFJJRVNfQ0FURUdPUlkpOworCQljb3VudHJpZXNDYXRhZ29yeQorCQkJCS5zZXROYW1lKCIlIiArIEdlb2dyYXBoeVBsdWdpbkZpbGVHZW5lcmF0b3IuVUlfQ09VTlRSSUVTX0NBVEVHT1JZX05BTUUpOyAvLyROT04tTkxTLTEkCisJCWNvdW50cmllc0NhdGFnb3J5LnNldFBhcmVudElkKElEX1NDRU5BUklPX0dFT0dSQVBIWV9QT0xJVElDQUxfQ0FURUdPUlkpOworCQlleHRlbnNpb24uZ2V0Q2F0ZWdvcmllcygpLmFkZChjb3VudHJpZXNDYXRhZ29yeSk7CisJfSAvLyBhZGRDYXRhZ29yaWVzVG9FeHRlbnNpb24KK30gLy8gRGlzZWFzZU1vZGVsU2NlbmFyaW9HZW5lcmF0b3IKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uaW50ZXJuYWwuZGlzZWFzZW1vZGVscy5zY2VuYXJpb3MvdXBkYXRlLnhtbCBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcm5hbC5kaXNlYXNlbW9kZWxzLnNjZW5hcmlvcy91cGRhdGUueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNiODFhZDAKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uaW50ZXJuYWwuZGlzZWFzZW1vZGVscy5zY2VuYXJpb3MvdXBkYXRlLnhtbApAQCAtMCwwICsxLDE2MiBAQAorPD94bWwgdmVyc2lvbj0iMS4wIj8+Cis8IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gCisgICAgIEFOVCBzY3JpcHQgdG8gYnVpbGQgb3JnLmVjbGlzcGUub2hmLnN0ZW0uZ2VvZ3JhcGh5IHByb2plY3QgCisgICAgIGFuZCB0aGUgaW5pdGlhbCBzZXQgb2YgU1RFTSBzY2VuYXJpb3MuICAKKyAgICAgVGhpcyBtdXN0IGJlIHJ1biBhZnRlciBpbnN0YWxsaW5nIHRoZSBTVEVNIHdvcmtzcGFjZSBhbmQgYWZ0ZXIgY2hhbmdlcworICAgICB0byBjb2RlIGdlbmVyYXRlZCBieSBFTUYgbW9kZWxzLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4KKzxwcm9qZWN0IG5hbWU9IlNURU0gSW50ZXJuYWwgRGlzZWFzZSBNb2RlbCBTY2VuYXJpb3MiIGRlZmF1bHQ9InVwZGF0ZV9hbGwiPgorCTxkZXNjcmlwdGlvbj4KKyAgICAgVXNlIHRoZSBwcm9wZXJ0aWVzIGZpbGVzIHRvIHBvcHVsYXRlIHRoZSBvcmcuZWNsaXBzZS5zdGVtLmRhdGEuZGlzZWFzZW1vZGVscy5tb2RlbHMgcGx1Z2luCisgICAgPC9kZXNjcmlwdGlvbj4KKworCTwhLS0gUCByIG8gaiBlIGMgdCAgUyBwIGUgYyBpIGYgaSBjIGEgdCBpIG8gbiBzIC0tPgorCisJPCEtLSBUaGUgbmFtZSBvZiB0aGUgcHJvamVjdCAtLT4KKwk8cHJvcGVydHkgbmFtZT0icHJvamVjdC5uYW1lIiB2YWx1ZT0ic3RlbSIgLz4KKworCQorCTwhLS0gQXJlIHdlIHJ1bm5pbmcgaGVhZGxlc3M/IC0tPgorCTxjb25kaXRpb24gcHJvcGVydHk9InJ1bm5pbmdIZWFkbGVzcyIgPgorCQk8aXNzZXQgcHJvcGVydHk9ImJ1aWxkRGlyZWN0b3J5IiAvPgorCTwvY29uZGl0aW9uPgorCQorCTwhLS0gVGhlIGJ1aWxkRGlyZWN0b3J5IHByb3BlcnR5IGlzIHNldCBpbiBhIGhlYWRsZXNzIGJ1aWxkIC0tPgorCTxjb25kaXRpb24gcHJvcGVydHk9InBsdWdpblJvb3REaXJlY3RvcnkiIHZhbHVlPSIke2J1aWxkRGlyZWN0b3J5fS9wbHVnaW5zIiBlbHNlPSIuLiI+CisJCTxpc3NldCBwcm9wZXJ0eT0icnVubmluZ0hlYWRsZXNzIiAvPgorCTwvY29uZGl0aW9uPgorCisJPCEtLSBUaGUgYmFzZUxvY2F0aW9uIHByb3BlcnR5IGlzIHRoZSBsb2NhdGlvbiBvZiB0aGUgZWNsaXBzZSBob21lIGluc3RhbGxhdGlvbiAtLT4KKwk8IS0tIEl0IGlzIHVzZWQgdG8gZmluZCBlY2xpcHNlIHBsdWdpbnMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPgorCTwhLS0gSXQgaXMgc2V0IGluIGEgaGVhZGxlc3MgYnVpbGQsIGJ1dCBub3Qgb25lIHN0YXJ0ZWQgbWFudWFsbHkgZnJvbSBFY2xpcHNlICAgLS0+CisJPGNvbmRpdGlvbiBwcm9wZXJ0eT0iYmFzZUxvY2F0aW9uIiB2YWx1ZT0iJHtlY2xpcHNlLnBkZWJ1aWxkLmhvbWV9Li4vLi4iPgorCQk8bm90PgorCQkJPGlzc2V0IHByb3BlcnR5PSJydW5uaW5nSGVhZGxlc3MiIC8+CisJCTwvbm90PgorCTwvY29uZGl0aW9uPgorCisJPCEtLSBUaGlzIGlzIHRoZSBsb2NhdGlvbiBvZiB0aGUgY2xhc3MgZmlsZXMgb2YgdGhlIGJ1aWx0IHBsdWctaW5zICAgICAtLT4KKwk8IS0tIElmIHRoaXMgaXMgYSBtYW51YWwgYnVpbGQgc3RhcnRlZCBmcm9tIEVjbGlwc2UgdGhlbiB0aGUgZGlyZWN0b3J5IC0tPgorCTwhLS0gaXMgImJpbiIsIGlmIGl0cyBhIGhlYWRsZXNzIGJ1aWxkIHRoZW4gdGhlIGRpcmVjdG9yeSBpcyAiQGRvdCIgICAgLS0+CisJPCEtLSBUaGUgcHJvcGVydHkgYmFzZUxvY2F0aW9uIGlzIHNldCBpbiBhIGhlYWRsZXNzIGJ1aWxkICAgICAgICAgICAgICAtLT4KKwk8Y29uZGl0aW9uIHByb3BlcnR5PSJ0YXJnZXRCaW4iIHZhbHVlPSJAZG90IiBlbHNlPSJiaW4iPgorCQk8aXNzZXQgcHJvcGVydHk9InJ1bm5pbmdIZWFkbGVzcyIgLz4KKwk8L2NvbmRpdGlvbj4KKwkKKwkKKwk8IS0tIFRoZSBwcmVmaXggZm9yIGZ1bGx5IHF1YWxpZmllZCBuYW1lcyAtLT4KKwk8cHJvcGVydHkgbmFtZT0iSURfUk9PVCIgdmFsdWU9Im9yZy5lY2xpcHNlLnN0ZW0iIC8+CisKKwk8IS0tIFRoZSBuYW1lIG9mIHRoZSBwbHVnaW4gdGhhdCBjb250YWlucyB0aGUgcGx1Z2luLnhtbCBmaWxlIHRvIHNjYW4gLS0+CisJPHByb3BlcnR5IG5hbWU9InNjYW4ucGx1Z2luIiB2YWx1ZT0iJHtJRF9ST09UfS5kYXRhLmRpc2Vhc2Vtb2RlbHMubW9kZWxzIiAvPgorCQorCTwhLS0gVGhlIG5hbWUgb2YgdGhlIHNvdXJjZSBwbHVnaW4gKGkuZS4sIHRoZSBvbmUgdGhhdCBjb250YWlucyB0aGlzIGZpbGUgLS0+CisJPHByb3BlcnR5IG5hbWU9InNvdXJjZS5wbHVnaW4iIHZhbHVlPSIke0lEX1JPT1R9LmludGVybmFsLmRpc2Vhc2Vtb2RlbHMuc2NlbmFyaW9zIiAvPgorCisJPCEtLSBUaGUgbmFtZSBvZiB0aGUgcGx1Z2luIHdpdGggdGhlIGRpc2Vhc2VzIC0tPgorCTxwcm9wZXJ0eSBuYW1lPSJkaXNlYXNlLnBsdWdpbiIgIHZhbHVlPSIke0lEX1JPT1R9LmRpc2Vhc2VzIiAvPgorCQorCTwhLS0gVGhlIG5hbWUgb2YgdGhlIHRhcmdldCBwbHVnaW4gLS0+CisJPHByb3BlcnR5IG5hbWU9InRhcmdldC5wbHVnaW4iIHZhbHVlPSIke0lEX1JPT1R9LmRhdGEuZGlzZWFzZW1vZGVscy5zY2VuYXJpb3MiIC8+CisKKwk8IS0tIFRoZSBwYXRoIHRvIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGUgc291cmNlIHBsdWdpbiAtLT4KKwk8cHJvcGVydHkgbmFtZT0icGF0aC5zb3VyY2VwbHVnaW4iIGxvY2F0aW9uPSIke3BsdWdpblJvb3REaXJlY3Rvcnl9LyR7c291cmNlLnBsdWdpbn0iIC8+CisKKwk8IS0tIFRoZSBwYXRoIHRvIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGUgcGx1Z2luIHRoYXQgd2lsbCBiZSBhdWdtZW50ZWQgd2l0aCBnZW5lcmF0ZWQgY29udGVudCAtLT4KKwk8cHJvcGVydHkgbmFtZT0icGF0aC50YXJnZXRwbHVnaW4iIGxvY2F0aW9uPSIke3BsdWdpblJvb3REaXJlY3Rvcnl9LyR7dGFyZ2V0LnBsdWdpbn0iIC8+CisKKwk8IS0tIFRoZSBwYXRoIHRvIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGUgcmVzb3VyY2UgZmlsZXMgLS0+CisJPHByb3BlcnR5IG5hbWU9InBhdGgucmVzb3VyY2UuZmlsZXMiIHZhbHVlPSIke3BhdGguc291cmNlcGx1Z2lufS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5IiAvPgorCisJPCEtLSBUaGUgcGF0aCB0byB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhlIHBsdWdpbiB0aGF0IHdpbGwgYmUgYXVnbWVudGVkIHdpdGggZ2VuZXJhdGVkIGNvbnRlbnQtLT4KKwk8cHJvcGVydHkgbmFtZT0icGF0aC5nZW5lcmF0ZWQuZmlsZXMiIHZhbHVlPSIke3BhdGguc291cmNlcGx1Z2lufS90ZW1wIiAvPgorCisJPCEtLSBUaGUgcGF0aCB0byB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgZ2VvZ3JhcGh5IHNvdXJjZSBjb2RlIC0tPgorCTxwcm9wZXJ0eSBuYW1lPSJwYXRoLmdlb2dyYXBoeS5zcmMiIHZhbHVlPSIke3BhdGgudGFyZ2V0cGx1Z2lufS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kYXRhL2dlb2dyYXBoeS9wb3B1bGF0aW9uL2h1bWFuL21vZGVscyIgLz4KKworCTwhLS0gVGhlIG5hbWUgb2YgdGhlIHBsdWdpbi54bWwgZmlsZSB0aGF0IHdpbGwgYmUgYXVnbWVudGVkIHdpdGggZ2VuZXJhdGVkIGNvbnRlbnQtLT4KKwk8cHJvcGVydHkgbmFtZT0iZmlsZS50YXJnZXQucGx1Z2lueG1sIiB2YWx1ZT0iJHtwYXRoLnRhcmdldHBsdWdpbn0vcGx1Z2luLnhtbCIgLz4KKworCTwhLS0gVGhlIG5hbWUgb2YgdGhlIHBsdWdpbi5wcm9wZXJ0aWVzIGZpbGUgdGhhdCB3aWxsIGJlIGF1Z21lbnRlZCB3aXRoIGdlbmVyYXRlZCBjb250ZW50LS0+CisJPHByb3BlcnR5IG5hbWU9ImZpbGUudGFyZ2V0LnBsdWdpbnByb3BlcnRpZXMiIHZhbHVlPSIke3BhdGgudGFyZ2V0cGx1Z2lufS9wbHVnaW4ucHJvcGVydGllcyIgLz4KKworCTwhLS0gVGhlIG5hbWUgb2YgdGhlIHBsdWdpbi54bWwgZmlsZSB0aGF0IHRoYXQgaXMgdGhlIGFnZ3JlZ2F0aW9uIG9mIHRoZSBnZW5lcmF0ZWQgY29udGVudC0tPgorCTxwcm9wZXJ0eSBuYW1lPSJmaWxlLnV0aWwucGx1Z2lueG1sIiB2YWx1ZT0iJHtwYXRoLmdlbmVyYXRlZC5maWxlc30vcGx1Z2luLnhtbCIgLz4KKworCTwhLS0gVGhlIG5hbWUgb2YgdGhlIHBsdWdpbi5wcm9wZXJ0aWVzIGZpbGUgdGhhdCB0aGF0IGlzIHRoZSBhZ2dyZWdhdGlvbiBvZiB0aGUgZ2VuZXJhdGVkIGNvbnRlbnQtLT4KKwk8cHJvcGVydHkgbmFtZT0iZmlsZS51dGlsLnBsdWdpbnByb3BlcnRpZXMiIHZhbHVlPSIke3BhdGguZ2VuZXJhdGVkLmZpbGVzfS9wbHVnaW4ucHJvcGVydGllcyIgLz4KKworICAgIDwhLS0gVGhlIG5hbWUgb2YgdGhlIHBsdWdpbi54bWwgZmlsZSB0aGF0IHRoYXQgaXMgdGhlIGFnZ3JlZ2F0aW9uIG9mIHRoZSBnZW5lcmF0ZWQgY29udGVudC0tPgorICAgIDxwcm9wZXJ0eSBuYW1lPSJmaWxlLnRhcmdldC5wbHVnaW5wcm9wZXJ0aWVzIiB2YWx1ZT0iJHtwYXRoLmdlbmVyYXRlZC5maWxlc30vcGx1Z2luLnByb3BlcnRpZXMiIC8+CisKKwk8IS0tIFRoZSBjbGFzcyBwYXRoIHRvIHVzZSAtLT4KKwk8cGF0aCBpZD0iY2xhc3NwYXRoLnJ1bnRpbWUiPiAKKwkJPHBhdGhlbGVtZW50IGxvY2F0aW9uPSIke3BhdGguc291cmNlcGx1Z2lufS8ke3RhcmdldEJpbn0iIC8+CisJCTxwYXRoZWxlbWVudCBsb2NhdGlvbj0iJHtwbHVnaW5Sb290RGlyZWN0b3J5fS8ke0lEX1JPT1R9LmNvcmUvJHt0YXJnZXRCaW59IiAvPgorCQk8cGF0aGVsZW1lbnQgbG9jYXRpb249IiR7cGx1Z2luUm9vdERpcmVjdG9yeX0vJHtJRF9ST09UfS5kZWZpbml0aW9ucy8ke3RhcmdldEJpbn0iIC8+CisJICAgIDxwYXRoZWxlbWVudCBsb2NhdGlvbj0iJHtwbHVnaW5Sb290RGlyZWN0b3J5fS8ke0lEX1JPT1R9LmludGVybmFsLmRhdGEvJHt0YXJnZXRCaW59IiAvPgorCQk8cGF0aGVsZW1lbnQgbG9jYXRpb249IiR7cGx1Z2luUm9vdERpcmVjdG9yeX0vJHtJRF9ST09UfS5pbnRlcm5hbC5kYXRhLmdlb2dyYXBoeS8ke3RhcmdldEJpbn0iIC8+CisJCTxwYXRoZWxlbWVudCBsb2NhdGlvbj0iJHtwbHVnaW5Sb290RGlyZWN0b3J5fS8ke0lEX1JPT1R9LmludGVybmFsLmRhdGEuZ2VvZ3JhcGh5Lm1vZGVscy8ke3RhcmdldEJpbn0iIC8+CisJCTxwYXRoZWxlbWVudCBsb2NhdGlvbj0iJHtwbHVnaW5Sb290RGlyZWN0b3J5fS8ke0lEX1JPT1R9LmRhdGEuZ2VvZ3JhcGh5LyR7dGFyZ2V0QmlufSIgLz4KKwkJPHBhdGhlbGVtZW50IGxvY2F0aW9uPSIke3BsdWdpblJvb3REaXJlY3Rvcnl9LyR7SURfUk9PVH0uZGlzZWFzZW1vZGVscy8ke3RhcmdldEJpbn0iIC8+CisJCTxwYXRoZWxlbWVudCBsb2NhdGlvbj0iJHtwbHVnaW5Sb290RGlyZWN0b3J5fS8ke0lEX1JPT1R9LnBvcHVsYXRpb25tb2RlbHMvJHt0YXJnZXRCaW59IiAvPgorCQk8ZmlsZXNldCBkaXI9IiR7YmFzZUxvY2F0aW9ufS9wbHVnaW5zLyI+CisJCQk8aW5jbHVkZSBuYW1lPSIqZW1mKi5qYXIiIC8+CisJCTwvZmlsZXNldD4KKwkJPGZpbGVzZXQgZGlyPSIke3BsdWdpblJvb3REaXJlY3Rvcnl9LyR7SURfUk9PVH0uaW50ZXJuYWwuZGF0YS9saWIvIj4KKwkJCTxpbmNsdWRlIG5hbWU9IiplbWYqLmphciIgLz4KKwkJPC9maWxlc2V0PgkJCisJPC9wYXRoPgorCisJPHRhcmdldCBuYW1lPSJ1cGRhdGVfYWxsIiBkZXBlbmRzPSJ1cGRhdGUiIC8+CisKKwk8IS0tIFVwZGF0ZSB0aGUgZ2VvZ3JhcGh5IHBsdWdpbiB3aXRoIHRoZSBsYXRlc3QgZGVmaW5pdGlvbnMgLS0+CisJPHRhcmdldCBuYW1lPSJ1cGRhdGUiIGRlcGVuZHM9InVwZGF0ZV9kaXNlYXNlX3NjZW5hcmlvcywgdXBkYXRlX2Rpc2Vhc2Vtb2RlbHNfc2NlbmFyaW9zX3BsdWdpbl94bWwsIHVwZGF0ZV9kaXNlYXNlbW9kZWxzX3NjZW5hcmlvc19wbHVnaW5fcHJvcGVydGllcyIgLz4KKworCTx0YXJnZXQgbmFtZT0idXBkYXRlX2Rpc2Vhc2Vtb2RlbHNfc2NlbmFyaW9zX3BsdWdpbl94bWwiIGRlcGVuZHM9ImNyZWF0ZV9jYW5kaWRhdGVzIj4KKwkJPGNvcHkgdG9maWxlPSIke2ZpbGUudGFyZ2V0LnBsdWdpbnhtbH0iIGZpbGU9IiR7ZmlsZS51dGlsLnBsdWdpbnhtbH0iIG92ZXJ3cml0ZT0idHJ1ZSIgLz4KKwk8L3RhcmdldD4KKworCTx0YXJnZXQgbmFtZT0idXBkYXRlX2Rpc2Vhc2Vtb2RlbHNfc2NlbmFyaW9zX3BsdWdpbl9wcm9wZXJ0aWVzIiBkZXBlbmRzPSJjcmVhdGVfY2FuZGlkYXRlcyI+CisJCTxjb3B5IHRvZmlsZT0iJHtmaWxlLnRhcmdldC5wbHVnaW5wcm9wZXJ0aWVzfSIgZmlsZT0iJHtmaWxlLnV0aWwucGx1Z2lucHJvcGVydGllc30iIG92ZXJ3cml0ZT0idHJ1ZSIgLz4KKwk8L3RhcmdldD4KKworCTwhLS0gVXBkYXRlIHRoZSBncmFwaCBmaWxlcyBpbiB0aGUgZ2VvZ3JhcGh5IHBsdWdpbiAtLT4KKwk8dGFyZ2V0IG5hbWU9InVwZGF0ZV9kaXNlYXNlX3NjZW5hcmlvcyIgZGVwZW5kcz0iY3JlYXRlX2NhbmRpZGF0ZXMiPgorCQk8Y29weSB0b2Rpcj0iJHtwYXRoLnRhcmdldHBsdWdpbn0vcmVzb3VyY2VzL2RhdGEvIiBvdmVyd3JpdGU9InRydWUiPgorCQkJPGZpbGVzZXQgZGlyPSIke3BhdGguZ2VuZXJhdGVkLmZpbGVzfS9yZXNvdXJjZXMvZGF0YSI+CisJCQkJPGluY2x1ZGUgbmFtZT0iKiovKi5zY2VuYXJpbyIgLz4KKwkJCTwvZmlsZXNldD4KKwkJPC9jb3B5PgorCTwvdGFyZ2V0PgorCQorCTwhLS0gQ3JlYXRlIHRoZSBtb2RlbCBmaWxlcyBmb3IgY291bnRyaWVzIGFuZCB0aGUgcGx1Z2luLnhtbCBhbmQgcGx1Z2luLnByb3BlcnRpZXMgZnJhZ21lbnRzIC0tPgorCTx0YXJnZXQgbmFtZT0iY3JlYXRlX2NhbmRpZGF0ZXMiIGRlcGVuZHM9ImNsZWFuIj4KKwkJPCEtLSBUaGVyZSBpcyBhIHByb2JsZW0gaGVyZSB3aXRoIHNwZWNpZnlpbmcgZm9yaz0idHJ1ZSIgIG1heG1lbW9yeT0iNzY4bSIuICBJdCBjYXVzZXMgYW4gSU9FeGNlcHRpb24gb24gc29tZSBtYWNoaW5lcyAtLT4KKwkJPGphdmEgY2xhc3NuYW1lPSIke0lEX1JPT1R9LmludGVybmFsLmRpc2Vhc2Vtb2RlbHMuc2NlbmFyaW9zLkRpc2Vhc2VNb2RlbFNjZW5hcmlvR2VuZXJhdG9yIiBmb3JrPSJ0cnVlIiBtYXhtZW1vcnk9IjEwMjRtIj4KKwkJCTxjbGFzc3BhdGggcmVmaWQ9ImNsYXNzcGF0aC5ydW50aW1lIiAvPgorCQkJPGFyZyB2YWx1ZT0iJHtwYXRoLmdlbmVyYXRlZC5maWxlc30iIC8+CisJCQk8YXJnIHZhbHVlPSIke3NjYW4ucGx1Z2lufSIgLz4KKwkJCTxqdm1hcmcgdmFsdWU9Ii1YbXMxMDI0bSIvPgorCQkJPGp2bWFyZyB2YWx1ZT0iLVhteDEwMjRtIi8+CisJCTwvamF2YT4KKwk8L3RhcmdldD4KKworCTwhLS0gY2xlYW4gb3V0IHRoZSAuLi4vdGVtcC9kYXRhIGRpcmVjdG9yaWVzIC0tPgorCTwhLS0gY2xlYW4gb3V0IHRoZSB0YXJnZXQgZGlyZWN0b3JpZXMgLS0+CisJPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iY3JlYXRlX2dlbmVyYXRlZF9maWxlc19kaXIiPgorCQk8ZGVsZXRlIGluY2x1ZGVFbXB0eURpcnM9InRydWUiIHF1aWV0PSJ0cnVlIj4KKwkJCTxmaWxlc2V0IGRpcj0iJHtwYXRoLmdlbmVyYXRlZC5maWxlc30vIj4KKwkJCQk8aW5jbHVkZSBuYW1lPSIqKi8qIiAvPgorCQkJPC9maWxlc2V0PgorCQkJPGZpbGVzZXQgZGlyPSIke3BhdGgudGFyZ2V0cGx1Z2lufS9yZXNvdXJjZXMvZGF0YS8iPgorCQkJCTxpbmNsdWRlIG5hbWU9ImNvdW50cnkvKiovKiIgLz4KKwkJCTwvZmlsZXNldD4KKwkJPC9kZWxldGU+CisJPC90YXJnZXQ+CisKKwk8dGFyZ2V0IG5hbWU9ImNyZWF0ZV9nZW5lcmF0ZWRfZmlsZXNfZGlyIj4KKwkJPG1rZGlyIGRpcj0iJHtwYXRoLmdlbmVyYXRlZC5maWxlc30vcmVzb3VyY2VzL2RhdGEiLz4JCQorCTwvdGFyZ2V0PgorPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmludGVydmVudGlvbnMvLmNsYXNzcGF0aCBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcnZlbnRpb25zLy5jbGFzc3BhdGgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTIxZTUyNwotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcnZlbnRpb25zLy5jbGFzc3BhdGgKQEAgLTAsMCArMSw3IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPGNsYXNzcGF0aD4KKwk8Y2xhc3NwYXRoZW50cnkga2luZD0ic3JjIiBwYXRoPSJzcmMiLz4KKwk8Y2xhc3NwYXRoZW50cnkga2luZD0iY29uIiBwYXRoPSJvcmcuZWNsaXBzZS5qZHQubGF1bmNoaW5nLkpSRV9DT05UQUlORVIvb3JnLmVjbGlwc2UuamR0LmludGVybmFsLmRlYnVnLnVpLmxhdW5jaGVyLlN0YW5kYXJkVk1UeXBlL0phdmFTRS0xLjYiLz4KKwk8Y2xhc3NwYXRoZW50cnkga2luZD0iY29uIiBwYXRoPSJvcmcuZWNsaXBzZS5wZGUuY29yZS5yZXF1aXJlZFBsdWdpbnMiLz4KKwk8Y2xhc3NwYXRoZW50cnkga2luZD0ib3V0cHV0IiBwYXRoPSJiaW4iLz4KKzwvY2xhc3NwYXRoPgpkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmludGVydmVudGlvbnMvLnByb2plY3QgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uaW50ZXJ2ZW50aW9ucy8ucHJvamVjdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNmMxZTJkCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmludGVydmVudGlvbnMvLnByb2plY3QKQEAgLTAsMCArMSwyOCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxwcm9qZWN0RGVzY3JpcHRpb24+CisJPG5hbWU+b3JnLmVjbGlwc2Uuc3RlbS5pbnRlcnZlbnRpb25zPC9uYW1lPgorCTxjb21tZW50PjwvY29tbWVudD4KKwk8cHJvamVjdHM+CisJPC9wcm9qZWN0cz4KKwk8YnVpbGRTcGVjPgorCQk8YnVpbGRDb21tYW5kPgorCQkJPG5hbWU+b3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YWJ1aWxkZXI8L25hbWU+CisJCQk8YXJndW1lbnRzPgorCQkJPC9hcmd1bWVudHM+CisJCTwvYnVpbGRDb21tYW5kPgorCQk8YnVpbGRDb21tYW5kPgorCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLk1hbmlmZXN0QnVpbGRlcjwvbmFtZT4KKwkJCTxhcmd1bWVudHM+CisJCQk8L2FyZ3VtZW50cz4KKwkJPC9idWlsZENvbW1hbmQ+CisJCTxidWlsZENvbW1hbmQ+CisJCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuU2NoZW1hQnVpbGRlcjwvbmFtZT4KKwkJCTxhcmd1bWVudHM+CisJCQk8L2FyZ3VtZW50cz4KKwkJPC9idWlsZENvbW1hbmQ+CisJPC9idWlsZFNwZWM+CisJPG5hdHVyZXM+CisJCTxuYXR1cmU+b3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YW5hdHVyZTwvbmF0dXJlPgorCQk8bmF0dXJlPm9yZy5lY2xpcHNlLnBkZS5QbHVnaW5OYXR1cmU8L25hdHVyZT4KKwk8L25hdHVyZXM+Cis8L3Byb2plY3REZXNjcmlwdGlvbj4KZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcnZlbnRpb25zL01FVEEtSU5GL01BTklGRVNULk1GIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmludGVydmVudGlvbnMvTUVUQS1JTkYvTUFOSUZFU1QuTUYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWQ4N2M2ZgotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcnZlbnRpb25zL01FVEEtSU5GL01BTklGRVNULk1GCkBAIC0wLDAgKzEsMjMgQEAKK01hbmlmZXN0LVZlcnNpb246IDEuMAorQnVuZGxlLU1hbmlmZXN0VmVyc2lvbjogMgorQnVuZGxlLU5hbWU6ICVwbHVnaW5OYW1lCitCdW5kbGUtU3ltYm9saWNOYW1lOiBvcmcuZWNsaXBzZS5zdGVtLmludGVydmVudGlvbnM7c2luZ2xldG9uOj10cnVlCitCdW5kbGUtVmVyc2lvbjogMS4yLjEKK0J1bmRsZS1DbGFzc1BhdGg6IC4KK0J1bmRsZS1BY3RpdmF0b3I6IG9yZy5lY2xpcHNlLnN0ZW0uaW50ZXJ2ZW50aW9ucy5wcm92aWRlci5JbnRlcnZlbnRpb25zRWRpdFBsdWdpbiRJbXBsZW1lbnRhdGlvbgorQnVuZGxlLVZlbmRvcjogJXByb3ZpZGVyTmFtZQorQnVuZGxlLUxvY2FsaXphdGlvbjogcGx1Z2luCitCdW5kbGUtUmVxdWlyZWRFeGVjdXRpb25FbnZpcm9ubWVudDogSmF2YVNFLTEuNgorRXhwb3J0LVBhY2thZ2U6IG9yZy5lY2xpcHNlLnN0ZW0uaW50ZXJ2ZW50aW9ucywKKyBvcmcuZWNsaXBzZS5zdGVtLmludGVydmVudGlvbnMuaW1wbCwKKyBvcmcuZWNsaXBzZS5zdGVtLmludGVydmVudGlvbnMucHJvdmlkZXIsCisgb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcnZlbnRpb25zLnV0aWwKK1JlcXVpcmUtQnVuZGxlOiBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUsCisgb3JnLmVjbGlwc2UuZW1mLmVjb3JlO3Zpc2liaWxpdHk6PXJlZXhwb3J0LAorIG9yZy5lY2xpcHNlLnN0ZW0uY29yZTt2aXNpYmlsaXR5Oj1yZWV4cG9ydCwKKyBvcmcuZWNsaXBzZS5lbWYuZWRpdDt2aXNpYmlsaXR5Oj1yZWV4cG9ydCwKKyBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuZWRpdDt2aXNpYmlsaXR5Oj1yZWV4cG9ydCwKKyBvcmcuZWNsaXBzZS5zdGVtLmdyYXBoZ2VuZXJhdG9yczt2aXNpYmlsaXR5Oj1yZWV4cG9ydCwKKyBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLAorIG9yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkKK0J1bmRsZS1BY3RpdmF0aW9uUG9saWN5OiBsYXp5CmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uaW50ZXJ2ZW50aW9ucy9idWlsZC5wcm9wZXJ0aWVzIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmludGVydmVudGlvbnMvYnVpbGQucHJvcGVydGllcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MzFmZDlhCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmludGVydmVudGlvbnMvYnVpbGQucHJvcGVydGllcwpAQCAtMCwwICsxLDE3IEBACisKKyMgPGNvcHlyaWdodD4KKyMgPC9jb3B5cmlnaHQ+CisjCisjICRJZCQKKworYmluLmluY2x1ZGVzID0gLixcCisgICAgICAgICAgICAgICBpY29ucy8sXAorICAgICAgICAgICAgICAgTUVUQS1JTkYvLFwKKyAgICAgICAgICAgICAgIHBsdWdpbi54bWwsXAorICAgICAgICAgICAgICAgcGx1Z2luLnByb3BlcnRpZXMsXAorICAgICAgICAgICAgICAgcGx1Z2luX2RlLnByb3BlcnRpZXMsXAorICAgICAgICAgICAgICAgcGx1Z2luX3poLnByb3BlcnRpZXMsXAorICAgICAgICAgICAgICAgcGx1Z2luX2tyLnByb3BlcnRpZXMKK2phcnMuY29tcGlsZS5vcmRlciA9IC4KK3NvdXJjZS4uID0gc3JjLworb3V0cHV0Li4gPSBiaW4vCmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uaW50ZXJ2ZW50aW9ucy9pY29ucy9mdWxsL2N0b29sMTYvQ3JlYXRlTmFyeUJvb2xlYW5PcGVyYXRvcl9vcGVyYW5kc19EaXNlYXNlU3RhdGVUZXN0LmdpZiBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcnZlbnRpb25zL2ljb25zL2Z1bGwvY3Rvb2wxNi9DcmVhdGVOYXJ5Qm9vbGVhbk9wZXJhdG9yX29wZXJhbmRzX0Rpc2Vhc2VTdGF0ZVRlc3QuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU5YjE1ZTIKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uaW50ZXJ2ZW50aW9ucy9pY29ucy9mdWxsL2N0b29sMTYvQ3JlYXRlTmFyeUJvb2xlYW5PcGVyYXRvcl9vcGVyYW5kc19EaXNlYXNlU3RhdGVUZXN0LmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uaW50ZXJ2ZW50aW9ucy9pY29ucy9mdWxsL2N0b29sMTYvQ3JlYXRlTmFyeUJvb2xlYW5PcGVyYXRvcl9vcGVyYW5kc19MYWJlbFZhbHVlVGVzdC5naWYgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uaW50ZXJ2ZW50aW9ucy9pY29ucy9mdWxsL2N0b29sMTYvQ3JlYXRlTmFyeUJvb2xlYW5PcGVyYXRvcl9vcGVyYW5kc19MYWJlbFZhbHVlVGVzdC5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzUzNzRjMgotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcnZlbnRpb25zL2ljb25zL2Z1bGwvY3Rvb2wxNi9DcmVhdGVOYXJ5Qm9vbGVhbk9wZXJhdG9yX29wZXJhbmRzX0xhYmVsVmFsdWVUZXN0LmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uaW50ZXJ2ZW50aW9ucy9pY29ucy9mdWxsL2N0b29sMTYvQ3JlYXRlUHJlZGljYXRlRXhwcmVzc2lvbl9wcmVkaWNhdGVfRGlzZWFzZVN0YXRlVGVzdC5naWYgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uaW50ZXJ2ZW50aW9ucy9pY29ucy9mdWxsL2N0b29sMTYvQ3JlYXRlUHJlZGljYXRlRXhwcmVzc2lvbl9wcmVkaWNhdGVfRGlzZWFzZVN0YXRlVGVzdC5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTE0NDQ5OAotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcnZlbnRpb25zL2ljb25zL2Z1bGwvY3Rvb2wxNi9DcmVhdGVQcmVkaWNhdGVFeHByZXNzaW9uX3ByZWRpY2F0ZV9EaXNlYXNlU3RhdGVUZXN0LmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uaW50ZXJ2ZW50aW9ucy9pY29ucy9mdWxsL2N0b29sMTYvQ3JlYXRlUHJlZGljYXRlRXhwcmVzc2lvbl9wcmVkaWNhdGVfTGFiZWxWYWx1ZVRlc3QuZ2lmIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmludGVydmVudGlvbnMvaWNvbnMvZnVsbC9jdG9vbDE2L0NyZWF0ZVByZWRpY2F0ZUV4cHJlc3Npb25fcHJlZGljYXRlX0xhYmVsVmFsdWVUZXN0LmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iOWNkODc4Ci0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmludGVydmVudGlvbnMvaWNvbnMvZnVsbC9jdG9vbDE2L0NyZWF0ZVByZWRpY2F0ZUV4cHJlc3Npb25fcHJlZGljYXRlX0xhYmVsVmFsdWVUZXN0LmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uaW50ZXJ2ZW50aW9ucy9pY29ucy9mdWxsL2N0b29sMTYvQ3JlYXRlVW5hcnlCb29sZWFuT3BlcmF0b3Jfb3BlcmFuZF9EaXNlYXNlU3RhdGVUZXN0LmdpZiBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcnZlbnRpb25zL2ljb25zL2Z1bGwvY3Rvb2wxNi9DcmVhdGVVbmFyeUJvb2xlYW5PcGVyYXRvcl9vcGVyYW5kX0Rpc2Vhc2VTdGF0ZVRlc3QuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMzNzM1ZDkKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uaW50ZXJ2ZW50aW9ucy9pY29ucy9mdWxsL2N0b29sMTYvQ3JlYXRlVW5hcnlCb29sZWFuT3BlcmF0b3Jfb3BlcmFuZF9EaXNlYXNlU3RhdGVUZXN0LmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uaW50ZXJ2ZW50aW9ucy9pY29ucy9mdWxsL2N0b29sMTYvQ3JlYXRlVW5hcnlCb29sZWFuT3BlcmF0b3Jfb3BlcmFuZF9MYWJlbFZhbHVlVGVzdC5naWYgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uaW50ZXJ2ZW50aW9ucy9pY29ucy9mdWxsL2N0b29sMTYvQ3JlYXRlVW5hcnlCb29sZWFuT3BlcmF0b3Jfb3BlcmFuZF9MYWJlbFZhbHVlVGVzdC5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWUyZDg2ZAotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcnZlbnRpb25zL2ljb25zL2Z1bGwvY3Rvb2wxNi9DcmVhdGVVbmFyeUJvb2xlYW5PcGVyYXRvcl9vcGVyYW5kX0xhYmVsVmFsdWVUZXN0LmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uaW50ZXJ2ZW50aW9ucy9pY29ucy9mdWxsL2N1c3RvbW9iajE2L1N0YW5kYXJkSW50ZXJ2ZW50aW9uTGFiZWwucG5nIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmludGVydmVudGlvbnMvaWNvbnMvZnVsbC9jdXN0b21vYmoxNi9TdGFuZGFyZEludGVydmVudGlvbkxhYmVsLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5mMWE1ZTQ0Ci0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmludGVydmVudGlvbnMvaWNvbnMvZnVsbC9jdXN0b21vYmoxNi9TdGFuZGFyZEludGVydmVudGlvbkxhYmVsLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uaW50ZXJ2ZW50aW9ucy9pY29ucy9mdWxsL2N1c3RvbW9iajE2L1N0YW5kYXJkSW50ZXJ2ZW50aW9uTGFiZWxWYWx1ZS5wbmcgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uaW50ZXJ2ZW50aW9ucy9pY29ucy9mdWxsL2N1c3RvbW9iajE2L1N0YW5kYXJkSW50ZXJ2ZW50aW9uTGFiZWxWYWx1ZS5wbmcKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZjFhNWU0NAotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcnZlbnRpb25zL2ljb25zL2Z1bGwvY3VzdG9tb2JqMTYvU3RhbmRhcmRJbnRlcnZlbnRpb25MYWJlbFZhbHVlLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uaW50ZXJ2ZW50aW9ucy9pY29ucy9mdWxsL29iajE2L0NvbnRyb2xHcmFwaEdlbmVyYXRvci5naWYgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uaW50ZXJ2ZW50aW9ucy9pY29ucy9mdWxsL29iajE2L0NvbnRyb2xHcmFwaEdlbmVyYXRvci5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWE5YmM3NQotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcnZlbnRpb25zL2ljb25zL2Z1bGwvb2JqMTYvQ29udHJvbEdyYXBoR2VuZXJhdG9yLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uaW50ZXJ2ZW50aW9ucy9pY29ucy9mdWxsL29iajE2L0Rpc2Vhc2VTdGF0ZVRlc3QuZ2lmIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmludGVydmVudGlvbnMvaWNvbnMvZnVsbC9vYmoxNi9EaXNlYXNlU3RhdGVUZXN0LmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41OTE1NTkxCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmludGVydmVudGlvbnMvaWNvbnMvZnVsbC9vYmoxNi9EaXNlYXNlU3RhdGVUZXN0LmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uaW50ZXJ2ZW50aW9ucy9pY29ucy9mdWxsL29iajE2L0luY2lkZW5jZVRlc3QuZ2lmIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmludGVydmVudGlvbnMvaWNvbnMvZnVsbC9vYmoxNi9JbmNpZGVuY2VUZXN0LmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NTczMWZlCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmludGVydmVudGlvbnMvaWNvbnMvZnVsbC9vYmoxNi9JbmNpZGVuY2VUZXN0LmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uaW50ZXJ2ZW50aW9ucy9pY29ucy9mdWxsL29iajE2L0xhYmVsVmFsdWVUZXN0LmdpZiBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcnZlbnRpb25zL2ljb25zL2Z1bGwvb2JqMTYvTGFiZWxWYWx1ZVRlc3QuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM0YThhZjQKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uaW50ZXJ2ZW50aW9ucy9pY29ucy9mdWxsL29iajE2L0xhYmVsVmFsdWVUZXN0LmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uaW50ZXJ2ZW50aW9ucy9pY29ucy9mdWxsL29iajE2L01pZ3JhdGlvbkVkZ2VHcmFwaEdlbmVyYXRvci5naWYgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uaW50ZXJ2ZW50aW9ucy9pY29ucy9mdWxsL29iajE2L01pZ3JhdGlvbkVkZ2VHcmFwaEdlbmVyYXRvci5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2I3YzQyOAotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcnZlbnRpb25zL2ljb25zL2Z1bGwvb2JqMTYvTWlncmF0aW9uRWRnZUdyYXBoR2VuZXJhdG9yLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uaW50ZXJ2ZW50aW9ucy9pY29ucy9mdWxsL29iajE2L1BhamVrTmV0R3JhcGhHZW5lcmF0b3IuZ2lmIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmludGVydmVudGlvbnMvaWNvbnMvZnVsbC9vYmoxNi9QYWpla05ldEdyYXBoR2VuZXJhdG9yLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMzQ1NTFiCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmludGVydmVudGlvbnMvaWNvbnMvZnVsbC9vYmoxNi9QYWpla05ldEdyYXBoR2VuZXJhdG9yLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uaW50ZXJ2ZW50aW9ucy9pY29ucy9mdWxsL29iajE2L1BsYXRlQ2FycmVlR2xvYmVHcmFwaEdlbmVyYXRvci5naWYgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uaW50ZXJ2ZW50aW9ucy9pY29ucy9mdWxsL29iajE2L1BsYXRlQ2FycmVlR2xvYmVHcmFwaEdlbmVyYXRvci5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTBkMjIyOQotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcnZlbnRpb25zL2ljb25zL2Z1bGwvb2JqMTYvUGxhdGVDYXJyZWVHbG9iZUdyYXBoR2VuZXJhdG9yLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uaW50ZXJ2ZW50aW9ucy9pY29ucy9mdWxsL29iajE2L1NxdWFyZUxhdHRpY2VHcmFwaEdlbmVyYXRvci5naWYgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uaW50ZXJ2ZW50aW9ucy9pY29ucy9mdWxsL29iajE2L1NxdWFyZUxhdHRpY2VHcmFwaEdlbmVyYXRvci5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzM5ZWJiZgotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcnZlbnRpb25zL2ljb25zL2Z1bGwvb2JqMTYvU3F1YXJlTGF0dGljZUdyYXBoR2VuZXJhdG9yLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uaW50ZXJ2ZW50aW9ucy9pY29ucy9mdWxsL29iajE2L1N0YW5kYXJkQ29udHJvbExhYmVsLmdpZiBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcnZlbnRpb25zL2ljb25zL2Z1bGwvb2JqMTYvU3RhbmRhcmRDb250cm9sTGFiZWwuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkwNDE1OTgKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uaW50ZXJ2ZW50aW9ucy9pY29ucy9mdWxsL29iajE2L1N0YW5kYXJkQ29udHJvbExhYmVsLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uaW50ZXJ2ZW50aW9ucy9pY29ucy9mdWxsL29iajE2L1N0YW5kYXJkQ29udHJvbExhYmVsVmFsdWUuZ2lmIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmludGVydmVudGlvbnMvaWNvbnMvZnVsbC9vYmoxNi9TdGFuZGFyZENvbnRyb2xMYWJlbFZhbHVlLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMzhmYjhkCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmludGVydmVudGlvbnMvaWNvbnMvZnVsbC9vYmoxNi9TdGFuZGFyZENvbnRyb2xMYWJlbFZhbHVlLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uaW50ZXJ2ZW50aW9ucy9pY29ucy9mdWxsL29iajE2L1N0YW5kYXJkSW50ZXJ2ZW50aW9uTGFiZWwuZ2lmIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmludGVydmVudGlvbnMvaWNvbnMvZnVsbC9vYmoxNi9TdGFuZGFyZEludGVydmVudGlvbkxhYmVsLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MzllYmJmCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmludGVydmVudGlvbnMvaWNvbnMvZnVsbC9vYmoxNi9TdGFuZGFyZEludGVydmVudGlvbkxhYmVsLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uaW50ZXJ2ZW50aW9ucy9pY29ucy9mdWxsL29iajE2L1N0YW5kYXJkSW50ZXJ2ZW50aW9uTGFiZWxWYWx1ZS5naWYgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uaW50ZXJ2ZW50aW9ucy9pY29ucy9mdWxsL29iajE2L1N0YW5kYXJkSW50ZXJ2ZW50aW9uTGFiZWxWYWx1ZS5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTM1MDBkYQotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcnZlbnRpb25zL2ljb25zL2Z1bGwvb2JqMTYvU3RhbmRhcmRJbnRlcnZlbnRpb25MYWJlbFZhbHVlLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uaW50ZXJ2ZW50aW9ucy9tb2RlbC9pbnRlcnZlbnRpb25zLmVjb3JlIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmludGVydmVudGlvbnMvbW9kZWwvaW50ZXJ2ZW50aW9ucy5lY29yZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNDVjODEyCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmludGVydmVudGlvbnMvbW9kZWwvaW50ZXJ2ZW50aW9ucy5lY29yZQpAQCAtMCwwICsxLDI2IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPGVjb3JlOkVQYWNrYWdlIHhtaTp2ZXJzaW9uPSIyLjAiCisgICAgeG1sbnM6eG1pPSJodHRwOi8vd3d3Lm9tZy5vcmcvWE1JIiB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIgorICAgIHhtbG5zOmVjb3JlPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2VtZi8yMDAyL0Vjb3JlIiBuYW1lPSJpbnRlcnZlbnRpb25zIgorICAgIG5zVVJJPSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vaW50ZXJ2ZW50aW9ucy5lY29yZSIgbnNQcmVmaXg9Im9yZy5lY2xpcHNlLnN0ZW0uaW50ZXJ2ZW50aW9ucyI+CisgIDxlQ2xhc3NpZmllcnMgeHNpOnR5cGU9ImVjb3JlOkVDbGFzcyIgbmFtZT0iSW50ZXJ2ZW50aW9uTGFiZWwiIGFic3RyYWN0PSJ0cnVlIiBlU3VwZXJUeXBlcz0iLi4vLi4vb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL21vZGVsL2dyYXBoLmVjb3JlIy8vU3RhdGljTm9kZUxhYmVsIi8+CisgIDxlQ2xhc3NpZmllcnMgeHNpOnR5cGU9ImVjb3JlOkVDbGFzcyIgbmFtZT0iU3RhbmRhcmRJbnRlcnZlbnRpb25MYWJlbCIgZVN1cGVyVHlwZXM9IiMvL0ludGVydmVudGlvbkxhYmVsIj4KKyAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0icG9wdWxhdGlvbklkZW50aWZpZXIiIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgcGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5lbWYuZWNvcmUvbW9kZWwvRWNvcmUuZWNvcmUjLy9FU3RyaW5nIgorICAgICAgICBkZWZhdWx0VmFsdWVMaXRlcmFsPSJodW1hbiIvPgorICA8L2VDbGFzc2lmaWVycz4KKyAgPGVDbGFzc2lmaWVycyB4c2k6dHlwZT0iZWNvcmU6RUNsYXNzIiBuYW1lPSJDb250cm9sR3JhcGhHZW5lcmF0b3IiIGVTdXBlclR5cGVzPSIuLi8uLi9vcmcuZWNsaXBzZS5zdGVtLmdyYXBoZ2VuZXJhdG9ycy9tb2RlbC9ncmFwaGdlbmVyYXRvcnMuZWNvcmUjLy9HcmFwaEdlbmVyYXRvciI+CisgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVBdHRyaWJ1dGUiIG5hbWU9InZhY2NpbmF0aW9uRnJhY3Rpb24iIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgcGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5lbWYuZWNvcmUvbW9kZWwvRWNvcmUuZWNvcmUjLy9FRG91YmxlIgorICAgICAgICBkZWZhdWx0VmFsdWVMaXRlcmFsPSIwLjAiLz4KKyAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0iaXNvbGF0aW9uRnJhY3Rpb24iIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgcGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5lbWYuZWNvcmUvbW9kZWwvRWNvcmUuZWNvcmUjLy9FRG91YmxlIgorICAgICAgICBkZWZhdWx0VmFsdWVMaXRlcmFsPSIwLjAiLz4KKyAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0icG9wdWxhdGlvbklkZW50aWZpZXIiIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgcGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5lbWYuZWNvcmUvbW9kZWwvRWNvcmUuZWNvcmUjLy9FU3RyaW5nIgorICAgICAgICBkZWZhdWx0VmFsdWVMaXRlcmFsPSJodW1hbiIvPgorICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJsb2NhdGlvbiIgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSAuLi8uLi9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvbW9kZWwvY29tbW9uLmVjb3JlIy8vVVJJIi8+CisgIDwvZUNsYXNzaWZpZXJzPgorICA8ZUNsYXNzaWZpZXJzIHhzaTp0eXBlPSJlY29yZTpFQ2xhc3MiIG5hbWU9IkludGVydmVudGlvbkxhYmVsVmFsdWUiIGFic3RyYWN0PSJ0cnVlIgorICAgICAgZVN1cGVyVHlwZXM9Ii4uLy4uL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9tb2RlbC9ncmFwaC5lY29yZSMvL0xhYmVsVmFsdWUiLz4KKyAgPGVDbGFzc2lmaWVycyB4c2k6dHlwZT0iZWNvcmU6RUNsYXNzIiBuYW1lPSJTdGFuZGFyZEludGVydmVudGlvbkxhYmVsVmFsdWUiIGVTdXBlclR5cGVzPSIjLy9JbnRlcnZlbnRpb25MYWJlbFZhbHVlIj4KKyAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0idmFjY2luYXRpb25zIiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIHBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2UuZW1mLmVjb3JlL21vZGVsL0Vjb3JlLmVjb3JlIy8vRURvdWJsZSIvPgorICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJpc29sYXRpb25zIiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIHBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2UuZW1mLmVjb3JlL21vZGVsL0Vjb3JlLmVjb3JlIy8vRURvdWJsZSIvPgorICA8L2VDbGFzc2lmaWVycz4KKzwvZWNvcmU6RVBhY2thZ2U+CmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uaW50ZXJ2ZW50aW9ucy9tb2RlbC9pbnRlcnZlbnRpb25zLmdlbm1vZGVsIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmludGVydmVudGlvbnMvbW9kZWwvaW50ZXJ2ZW50aW9ucy5nZW5tb2RlbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNDU0MzNhCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmludGVydmVudGlvbnMvbW9kZWwvaW50ZXJ2ZW50aW9ucy5nZW5tb2RlbApAQCAtMCwwICsxLDMzIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPGdlbm1vZGVsOkdlbk1vZGVsIHhtaTp2ZXJzaW9uPSIyLjAiCisgICAgeG1sbnM6eG1pPSJodHRwOi8vd3d3Lm9tZy5vcmcvWE1JIiB4bWxuczplY29yZT0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9lbWYvMjAwMi9FY29yZSIKKyAgICB4bWxuczpnZW5tb2RlbD0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9lbWYvMjAwMi9HZW5Nb2RlbCIgbW9kZWxEaXJlY3Rvcnk9Ii9vcmcuZWNsaXBzZS5zdGVtLmludGVydmVudGlvbnMvc3JjIgorICAgIGVkaXREaXJlY3Rvcnk9Ii9vcmcuZWNsaXBzZS5zdGVtLmludGVydmVudGlvbnMvc3JjIiBlZGl0b3JEaXJlY3Rvcnk9Ii9vcmcuZWNsaXBzZS5zdGVtLnVpLmludGVydmVudGlvbnMvc3JjIgorICAgIG1vZGVsUGx1Z2luSUQ9Im9yZy5lY2xpcHNlLnN0ZW0uaW50ZXJ2ZW50aW9ucyIgbW9kZWxOYW1lPSJJbnRlcnZlbnRpb25zIiBlZGl0UGx1Z2luQ2xhc3M9Im9yZy5lY2xpcHNlLnN0ZW0uaW50ZXJ2ZW50aW9ucy5wcm92aWRlci5JbnRlcnZlbnRpb25zRWRpdFBsdWdpbiIKKyAgICBlZGl0b3JQbHVnaW5DbGFzcz0ib3JnLmVjbGlwc2Uuc3RlbS5pbnRlcnZlbnRpb25zLnByZXNlbnRhdGlvbi5JbnRlcnZlbnRpb25zRWRpdG9yUGx1Z2luIgorICAgIHRlc3RzRGlyZWN0b3J5PSIvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5pbnRlcnZlbnRpb25zL3NyYyIgdGVzdFN1aXRlQ2xhc3M9Im9yZy5lY2xpcHNlLnN0ZW0uaW50ZXJ2ZW50aW9ucy50ZXN0cy5JbnRlcnZlbnRpb25zQWxsVGVzdHMiCisgICAgaW1wb3J0ZXJJRD0ib3JnLmVjbGlwc2UuZW1mLmltcG9ydGVyLmVjb3JlIiBjb21wbGlhbmNlTGV2ZWw9IjYuMCIgY29weXJpZ2h0RmllbGRzPSJmYWxzZSIKKyAgICBlZGl0b3JQbHVnaW5JRD0ib3JnLmVjbGlwc2Uuc3RlbS51aS5pbnRlcnZlbnRpb25zIiB0ZXN0c1BsdWdpbklEPSJvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmludGVydmVudGlvbnMiCisgICAgb3B0aW1pemVkSGFzQ2hpbGRyZW49InRydWUiIHVzZWRHZW5QYWNrYWdlcz0iLi4vLi4vb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL21vZGVsL2NvcmUuZ2VubW9kZWwjLy9jb21tb24gLi4vLi4vb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL21vZGVsL2NvcmUuZ2VubW9kZWwjLy9ncmFwaCAuLi8uLi9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvbW9kZWwvY29yZS5nZW5tb2RlbCMvL21vZGVsIC4uLy4uL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9tb2RlbC9jb3JlLmdlbm1vZGVsIy8vbW9kaWZpZXIgLi4vLi4vb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL21vZGVsL2NvcmUuZ2VubW9kZWwjLy9wcmVkaWNhdGUgLi4vLi4vb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL21vZGVsL2NvcmUuZ2VubW9kZWwjLy9zY2VuYXJpbyAuLi8uLi9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvbW9kZWwvY29yZS5nZW5tb2RlbCMvL3NlcXVlbmNlciAuLi8uLi9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvbW9kZWwvY29yZS5nZW5tb2RlbCMvL3NvbHZlciBwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLmVtZi5lY29yZS9tb2RlbC9FY29yZS5nZW5tb2RlbCMvL2Vjb3JlIC4uLy4uL29yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhnZW5lcmF0b3JzL21vZGVsL2dyYXBoZ2VuZXJhdG9yLmdlbm1vZGVsIy8vZ3JhcGhnZW5lcmF0b3JzIj4KKyAgPGZvcmVpZ25Nb2RlbD5pbnRlcnZlbnRpb25zLmVjb3JlPC9mb3JlaWduTW9kZWw+CisgIDxnZW5QYWNrYWdlcyBwcmVmaXg9IkludGVydmVudGlvbnMiIGJhc2VQYWNrYWdlPSJvcmcuZWNsaXBzZS5zdGVtIiBkaXNwb3NhYmxlUHJvdmlkZXJGYWN0b3J5PSJ0cnVlIgorICAgICAgZWNvcmVQYWNrYWdlPSJpbnRlcnZlbnRpb25zLmVjb3JlIy8iPgorICAgIDxnZW5DbGFzc2VzIGltYWdlPSJmYWxzZSIgZWNvcmVDbGFzcz0iaW50ZXJ2ZW50aW9ucy5lY29yZSMvL0NvbnRyb2xMYWJlbCI+CisgICAgICA8Z2VuRmVhdHVyZXMgcHJvcGVydHk9Ik5vbmUiIGNoaWxkcmVuPSJ0cnVlIiBjcmVhdGVDaGlsZD0iZmFsc2UiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RVJlZmVyZW5jZSBpbnRlcnZlbnRpb25zLmVjb3JlIy8vQ29udHJvbExhYmVsL29yaWdpbmFsVmFsdWUiLz4KKyAgICA8L2dlbkNsYXNzZXM+CisgICAgPGdlbkNsYXNzZXMgZWNvcmVDbGFzcz0iaW50ZXJ2ZW50aW9ucy5lY29yZSMvL1N0YW5kYXJkQ29udHJvbExhYmVsIj4KKyAgICAgIDxnZW5GZWF0dXJlcyBjcmVhdGVDaGlsZD0iZmFsc2UiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RUF0dHJpYnV0ZSBpbnRlcnZlbnRpb25zLmVjb3JlIy8vU3RhbmRhcmRDb250cm9sTGFiZWwvcG9wdWxhdGlvbklkZW50aWZpZXIiLz4KKyAgICA8L2dlbkNsYXNzZXM+CisgICAgPGdlbkNsYXNzZXMgZWNvcmVDbGFzcz0iaW50ZXJ2ZW50aW9ucy5lY29yZSMvL0NvbnRyb2xHcmFwaEdlbmVyYXRvciI+CisgICAgICA8Z2VuRmVhdHVyZXMgY3JlYXRlQ2hpbGQ9ImZhbHNlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVBdHRyaWJ1dGUgaW50ZXJ2ZW50aW9ucy5lY29yZSMvL0NvbnRyb2xHcmFwaEdlbmVyYXRvci92YWNjaW5hdGlvbkZyYWN0aW9uIi8+CisgICAgICA8Z2VuRmVhdHVyZXMgY3JlYXRlQ2hpbGQ9ImZhbHNlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVBdHRyaWJ1dGUgaW50ZXJ2ZW50aW9ucy5lY29yZSMvL0NvbnRyb2xHcmFwaEdlbmVyYXRvci9pc29sYXRpb25GcmFjdGlvbiIvPgorICAgICAgPGdlbkZlYXR1cmVzIGNyZWF0ZUNoaWxkPSJmYWxzZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFQXR0cmlidXRlIGludGVydmVudGlvbnMuZWNvcmUjLy9Db250cm9sR3JhcGhHZW5lcmF0b3IvcG9wdWxhdGlvbklkZW50aWZpZXIiLz4KKyAgICAgIDxnZW5GZWF0dXJlcyBjcmVhdGVDaGlsZD0iZmFsc2UiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RUF0dHJpYnV0ZSBpbnRlcnZlbnRpb25zLmVjb3JlIy8vQ29udHJvbEdyYXBoR2VuZXJhdG9yL2xvY2F0aW9uIi8+CisgICAgPC9nZW5DbGFzc2VzPgorICAgIDxnZW5DbGFzc2VzIGltYWdlPSJmYWxzZSIgZWNvcmVDbGFzcz0iaW50ZXJ2ZW50aW9ucy5lY29yZSMvL0NvbnRyb2xMYWJlbFZhbHVlIi8+CisgICAgPGdlbkNsYXNzZXMgZWNvcmVDbGFzcz0iaW50ZXJ2ZW50aW9ucy5lY29yZSMvL1N0YW5kYXJkQ29udHJvbExhYmVsVmFsdWUiPgorICAgICAgPGdlbkZlYXR1cmVzIGNyZWF0ZUNoaWxkPSJmYWxzZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFQXR0cmlidXRlIGludGVydmVudGlvbnMuZWNvcmUjLy9TdGFuZGFyZENvbnRyb2xMYWJlbFZhbHVlL3ZhY2NpbmF0aW9ucyIvPgorICAgICAgPGdlbkZlYXR1cmVzIGNyZWF0ZUNoaWxkPSJmYWxzZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFQXR0cmlidXRlIGludGVydmVudGlvbnMuZWNvcmUjLy9TdGFuZGFyZENvbnRyb2xMYWJlbFZhbHVlL2lzb2xhdGlvbnMiLz4KKyAgICA8L2dlbkNsYXNzZXM+CisgIDwvZ2VuUGFja2FnZXM+Cis8L2dlbm1vZGVsOkdlbk1vZGVsPgpkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmludGVydmVudGlvbnMvcGx1Z2luLnByb3BlcnRpZXMgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uaW50ZXJ2ZW50aW9ucy9wbHVnaW4ucHJvcGVydGllcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNGFiNTg4Ci0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmludGVydmVudGlvbnMvcGx1Z2luLnByb3BlcnRpZXMKQEAgLTAsMCArMSw5OSBAQAorCisjKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAKKyMgKiBDb3B5cmlnaHQgKGMpIDIwMTEgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuIAorIyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgCisjICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wIAorIyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0IAorIyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sIAorIyAqIAorIyAqIENvbnRyaWJ1dG9yczogCisjICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiAKKyMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworcGx1Z2luTmFtZSA9IEludGVydmVudGlvbnMgTW9kZWwKK3Byb3ZpZGVyTmFtZSA9IHd3dy5leGFtcGxlLm9yZworX1VJX0NyZWF0ZUNoaWxkX3RleHQgPSB7MH0KK19VSV9DcmVhdGVDaGlsZF90ZXh0MiA9IHsxfSB7MH0KK19VSV9DcmVhdGVDaGlsZF90ZXh0MyA9IHsxfQorX1VJX0NyZWF0ZUNoaWxkX3Rvb2x0aXAgPSBDcmVhdGUgTmV3IHswfSBVbmRlciB7MX0gRmVhdHVyZQorX1VJX0NyZWF0ZUNoaWxkX2Rlc2NyaXB0aW9uID0gQ3JlYXRlIGEgbmV3IGNoaWxkIG9mIHR5cGUgezB9IGZvciB0aGUgezF9IGZlYXR1cmUgb2YgdGhlIHNlbGVjdGVkIHsyfS4KK19VSV9DcmVhdGVTaWJsaW5nX2Rlc2NyaXB0aW9uID0gQ3JlYXRlIGEgbmV3IHNpYmxpbmcgb2YgdHlwZSB7MH0gZm9yIHRoZSBzZWxlY3RlZCB7Mn0sIHVuZGVyIHRoZSB7MX0gZmVhdHVyZSBvZiB0aGVpciBwYXJlbnQuCitfVUlfUHJvcGVydHlEZXNjcmlwdG9yX2Rlc2NyaXB0aW9uID0gVGhlIHswfSBvZiB0aGUgezF9CitfVUlfSW5jaWRlbmNlVGVzdF90eXBlID0gSW5jaWRlbmNlIFRlc3QKK19VSV9Vbmtub3duX3R5cGUgPSBPYmplY3QKK19VSV9Vbmtub3duX2RhdGF0eXBlPSBWYWx1ZQorX1VJX1Vua25vd25fZmVhdHVyZSA9IFVuc3BlY2lmaWVkCitfVUlfRGlzZWFzZVN0YXRlVGVzdF90eXBlID0gRGlzZWFzZSBTdGF0ZSBUZXN0CitfVUlfRGlzZWFzZVN0YXRlVGVzdF9kaXNlYXNlTmFtZV9mZWF0dXJlID0gRGlzZWFzZSBOYW1lCitfVUlfRGlzZWFzZVN0YXRlVGVzdF90YXJnZXRJU09LZXlfZmVhdHVyZSA9IFRhcmdldCBJU08gS2V5CitfVUlfRGlzZWFzZVN0YXRlVGVzdF9zdGF0ZV9mZWF0dXJlID0gU3RhdGUKK19VSV9EaXNlYXNlU3RhdGVUZXN0X3RocmVzaG9sZF9mZWF0dXJlID0gVGhyZXNob2xkCitfVUlfRGlzZWFzZVN0YXRlVGVzdF9wcmVkaWNhdGVfZmVhdHVyZSA9IFByZWRpY2F0ZQorX1VJX0Rpc2Vhc2VTdGF0ZVRlc3RfdGFyZ2V0VVJJX2ZlYXR1cmUgPSBUYXJnZXQgVVJJCitfVUlfRGlzZWFzZVN0YXRlVGVzdF9wb3B1bGF0aW9uSWRlbnRpZmllcl9mZWF0dXJlID0gUG9wdWxhdGlvbiBJZGVudGlmaWVyCitfVUlfTGFiZWxWYWx1ZVRlc3RfdHlwZSA9IExhYmVsIFZhbHVlIFRlc3QKK19VSV9MYWJlbFZhbHVlVGVzdF9kaXNlYXNlTmFtZV9mZWF0dXJlID0gRGlzZWFzZSBOYW1lCitfVUlfTGFiZWxWYWx1ZVRlc3RfdGFyZ2V0VVJJX2ZlYXR1cmUgPSBUYXJnZXQgVVJJCitfVUlfTGFiZWxWYWx1ZVRlc3Rfc3RhdGVfZmVhdHVyZSA9IFN0YXRlCitfVUlfTGFiZWxWYWx1ZVRlc3RfdGhyZXNob2xkX2ZlYXR1cmUgPSBUaHJlc2hvbGQKK19VSV9MYWJlbFZhbHVlVGVzdF9wcmVkaWNhdGVfZmVhdHVyZSA9IFByZWRpY2F0ZQorX1VJX0xhYmVsVmFsdWVUZXN0X3BvcHVsYXRpb25JZGVudGlmaWVyX2ZlYXR1cmUgPSBQb3B1bGF0aW9uIElkZW50aWZpZXIKK19VSV9MYWJlbFZhbHVlVGVzdF9tb2RlbE5hbWVfZmVhdHVyZSA9IE1vZGVsIE5hbWUKK19VSV9Db250cm9sTGFiZWxfdHlwZSA9IENvbnRyb2wgTGFiZWwKK19VSV9TdGFuZGFyZENvbnRyb2xMYWJlbF90eXBlID0gU3RhbmRhcmQgQ29udHJvbCBMYWJlbAorX1VJX1N0YW5kYXJkQ29udHJvbExhYmVsX3ZhY2NpbmF0aW9uc19mZWF0dXJlID0gVmFjY2luYXRpb25zCitfVUlfU3RhbmRhcmRDb250cm9sTGFiZWxfaXNvbGF0aW9uc19mZWF0dXJlID0gSXNvbGF0aW9ucworX1VJX0NvbnRyb2xHcmFwaEdlbmVyYXRvcl90eXBlID0gQ29udHJvbCBHcmFwaCBHZW5lcmF0b3IKK19VSV9HcmFwaEdlbmVyYXRvcl90eXBlID0gR3JhcGggR2VuZXJhdG9yCitfVUlfTGF0dGljZUdyYXBoR2VuZXJhdG9yX3R5cGUgPSBMYXR0aWNlIEdyYXBoIEdlbmVyYXRvcgorX1VJX1NxdWFyZUxhdHRpY2VHcmFwaEdlbmVyYXRvcl90eXBlID0gU3F1YXJlIExhdHRpY2UgR3JhcGggR2VuZXJhdG9yCitfVUlfTWlncmF0aW9uRWRnZUdyYXBoR2VuZXJhdG9yX3R5cGUgPSBNaWdyYXRpb24gRWRnZSBHcmFwaCBHZW5lcmF0b3IKK19VSV9QbGF0ZUNhcnJlZUdsb2JlR3JhcGhHZW5lcmF0b3JfdHlwZSA9IFBsYXRlIENhcnJlZSBHbG9iZSBHcmFwaCBHZW5lcmF0b3IKK19VSV9QYWpla05ldEdyYXBoR2VuZXJhdG9yX3R5cGUgPSBQYWplayBOZXQgR3JhcGggR2VuZXJhdG9yCitfVUlfTGF0dGljZUdyYXBoR2VuZXJhdG9yX3VzZU5lYXJlc3ROZWlnaGJvcnNfZmVhdHVyZSA9IFVzZSBOZWFyZXN0IE5laWdoYm9ycworX1VJX0xhdHRpY2VHcmFwaEdlbmVyYXRvcl91c2VOZXh0TmVhcmVzdE5laWdoYm9yc19mZWF0dXJlID0gVXNlIE5leHQgTmVhcmVzdCBOZWlnaGJvcnMKK19VSV9MYXR0aWNlR3JhcGhHZW5lcmF0b3JfcGVyaW9kaWNCb3VuZGFyaWVzX2ZlYXR1cmUgPSBQZXJpb2RpYyBCb3VuZGFyaWVzCitfVUlfU3F1YXJlTGF0dGljZUdyYXBoR2VuZXJhdG9yX3hTaXplX2ZlYXR1cmUgPSBYU2l6ZQorX1VJX1NxdWFyZUxhdHRpY2VHcmFwaEdlbmVyYXRvcl95U2l6ZV9mZWF0dXJlID0gWVNpemUKK19VSV9TcXVhcmVMYXR0aWNlR3JhcGhHZW5lcmF0b3JfYXJlYV9mZWF0dXJlID0gQXJlYQorX1VJX01pZ3JhdGlvbkVkZ2VHcmFwaEdlbmVyYXRvcl9sb2NhdGlvbl9mZWF0dXJlID0gTG9jYXRpb24KK19VSV9NaWdyYXRpb25FZGdlR3JhcGhHZW5lcmF0b3JfbWlncmF0aW9uUmF0ZV9mZWF0dXJlID0gTWlncmF0aW9uIFJhdGUKK19VSV9NaWdyYXRpb25FZGdlR3JhcGhHZW5lcmF0b3JfcG9wdWxhdGlvbl9mZWF0dXJlID0gUG9wdWxhdGlvbgorX1VJX1BsYXRlQ2FycmVlR2xvYmVHcmFwaEdlbmVyYXRvcl9hbmd1bGFyU3RlcF9mZWF0dXJlID0gQW5ndWxhciBTdGVwCitfVUlfUGxhdGVDYXJyZWVHbG9iZUdyYXBoR2VuZXJhdG9yX3JhZGl1c19mZWF0dXJlID0gUmFkaXVzCitfVUlfUGFqZWtOZXRHcmFwaEdlbmVyYXRvcl9kYXRhRmlsZV9uZXRfZmVhdHVyZSA9IERhdGEgRmlsZSBuZXQKK19VSV9QYWpla05ldEdyYXBoR2VuZXJhdG9yX2FyZWFfZmVhdHVyZSA9IEFyZWEKK19VSV9QYWpla05ldEdyYXBoR2VuZXJhdG9yX2NvbnRhaW5lcl9mZWF0dXJlID0gQ29udGFpbmVyCitfVUlfUGFqZWtOZXRHcmFwaEdlbmVyYXRvcl9zY2FsaW5nRmFjdG9yX2ZlYXR1cmUgPSBTY2FsaW5nIEZhY3RvcgorX1VJX1BhamVrTmV0R3JhcGhHZW5lcmF0b3JfZml0X2ZlYXR1cmUgPSBGaXQKK19VSV9QYWpla05ldEdyYXBoR2VuZXJhdG9yX2VuZm9yY2VDb250YWlubWVudF9mZWF0dXJlID0gRW5mb3JjZSBDb250YWlubWVudAorCisjIENvbnRyb2wgR3JhcGggR2VuZXJhdG9yIER1YmxpbiBDb3JlCitkY19jZ2dfY3JlYXRvcl9zZWQgPSBTVEVNIFRlYW0KK2RjX2NnZ19pZGVudGllciA9IAorZGNfY2dnX2xpY2Vuc2UgPSBFUEwgMS4wCitkY19jZ2dfcHVibGlzaGVyID0gRWNsaXBzZQorZGNfY2dnX3NvdXJjZSA9IAorZGNfY2dnX2Rlc2MgPSBBIGdyYXBoIHdpdGggY29udHJvbCBsYWJlbHMgZm9yIGludGVydmVudGlvbnMgZXRjLgorZGNfY2dnX3RpdGxlID0gQ29udHJvbCBMYWJlbCBHcmFwaCBHZW5lcmF0b3IKKyAKK19VSV9Db250cm9sR3JhcGhHZW5lcmF0b3JfdmFjY2luYXRlRnJhY3Rpb25fZmVhdHVyZSA9IFZhY2NpbmF0ZSBGcmFjdGlvbgorX1VJX0NvbnRyb2xHcmFwaEdlbmVyYXRvcl9pc29sYXRpb25GcmFjdGlvbl9mZWF0dXJlID0gSXNvbGF0aW9uIEZyYWN0aW9uCitfVUlfQ29udHJvbEdyYXBoR2VuZXJhdG9yX3ZhY2NpbmF0aW9uRnJhY3Rpb25fZmVhdHVyZSA9IFZhY2NpbmF0aW9uIEZyYWN0aW9uCitfVUlfQ29udHJvbExhYmVsVmFsdWVfdHlwZSA9IENvbnRyb2wgTGFiZWwgVmFsdWUKK19VSV9Db250cm9sTGFiZWxfb3JpZ2luYWxWYWx1ZV9mZWF0dXJlID0gT3JpZ2luYWwgVmFsdWUKK19VSV9Db250cm9sTGFiZWxWYWx1ZV92YWNjaW5hdGlvbnNfZmVhdHVyZSA9IFZhY2NpbmF0aW9ucworX1VJX0NvbnRyb2xMYWJlbFZhbHVlX2lzb2xhdGlvbnNfZmVhdHVyZSA9IElzb2xhdGlvbnMKK19VSV9TdGFuZGFyZENvbnRyb2xMYWJlbF9wb3B1bGF0aW9uSWRlbnRpZmllcl9mZWF0dXJlID0gUG9wdWxhdGlvbiBJZGVudGlmaWVyCitfVUlfQ29udHJvbEdyYXBoR2VuZXJhdG9yX3BvcHVsYXRpb25JZGVudGlmaWVyX2ZlYXR1cmUgPSBQb3B1bGF0aW9uIElkZW50aWZpZXIKK19VSV9Db250cm9sR3JhcGhHZW5lcmF0b3JfbG9jYXRpb25fZmVhdHVyZSA9IExvY2F0aW9uCitfVUlfU3RhbmRhcmRDb250cm9sTGFiZWxWYWx1ZV90eXBlID0gU3RhbmRhcmQgQ29udHJvbCBMYWJlbCBWYWx1ZQorX1VJX1N0YW5kYXJkQ29udHJvbExhYmVsVmFsdWVfdmFjY2luYXRpb25zX2ZlYXR1cmUgPSBWYWNjaW5hdGlvbnMKK19VSV9TdGFuZGFyZENvbnRyb2xMYWJlbFZhbHVlX2lzb2xhdGlvbnNfZmVhdHVyZSA9IElzb2xhdGlvbnMKK19VSV9JbnRlcnZlbnRpb25MYWJlbF90eXBlID0gSW50ZXJ2ZW50aW9uIExhYmVsCitfVUlfU3RhbmRhcmRJbnRlcnZlbnRpb25MYWJlbF90eXBlID0gU3RhbmRhcmQgSW50ZXJ2ZW50aW9uIExhYmVsCitfVUlfSW50ZXJ2ZW50aW9uTGFiZWxWYWx1ZV90eXBlID0gSW50ZXJ2ZW50aW9uIExhYmVsIFZhbHVlCitfVUlfU3RhbmRhcmRJbnRlcnZlbnRpb25MYWJlbFZhbHVlX3R5cGUgPSBTdGFuZGFyZCBJbnRlcnZlbnRpb24gTGFiZWwgVmFsdWUKK19VSV9TdGFuZGFyZEludGVydmVudGlvbkxhYmVsX3BvcHVsYXRpb25JZGVudGlmaWVyX2ZlYXR1cmUgPSBQb3B1bGF0aW9uIElkZW50aWZpZXIKK19VSV9TdGFuZGFyZEludGVydmVudGlvbkxhYmVsVmFsdWVfdmFjY2luYXRpb25zX2ZlYXR1cmUgPSBWYWNjaW5hdGlvbnMKK19VSV9TdGFuZGFyZEludGVydmVudGlvbkxhYmVsVmFsdWVfaXNvbGF0aW9uc19mZWF0dXJlID0gSXNvbGF0aW9ucwpkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmludGVydmVudGlvbnMvcGx1Z2luLnhtbCBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcnZlbnRpb25zL3BsdWdpbi54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWIyNjQ5OQotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcnZlbnRpb25zL3BsdWdpbi54bWwKQEAgLTAsMCArMSw0OCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzw/ZWNsaXBzZSB2ZXJzaW9uPSIzLjAiPz4KKworPCEtLQorIDxjb3B5cmlnaHQ+CisgPC9jb3B5cmlnaHQ+CisKKyAkSWQkCistLT4KKworPHBsdWdpbj4KKworICAgPGV4dGVuc2lvbiBwb2ludD0ib3JnLmVjbGlwc2UuZW1mLmVkaXQuaXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcmllcyI+CisgICAgICA8ZmFjdG9yeQorICAgICAgICAgICAgdXJpPSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vaW50ZXJ2ZW50aW9ucy5lY29yZSIKKyAgICAgICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS5zdGVtLmludGVydmVudGlvbnMucHJvdmlkZXIuSW50ZXJ2ZW50aW9uc0l0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5IgorICAgICAgICAgICAgc3VwcG9ydGVkVHlwZXM9CisgICAgICAgICAgICAgICJvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JRWRpdGluZ0RvbWFpbkl0ZW1Qcm92aWRlcgorICAgICAgICAgICAgICAgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVN0cnVjdHVyZWRJdGVtQ29udGVudFByb3ZpZGVyCisgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JVHJlZUl0ZW1Db250ZW50UHJvdmlkZXIKKyAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtTGFiZWxQcm92aWRlcgorICAgICAgICAgICAgICAgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1Qcm9wZXJ0eVNvdXJjZSIvPgorICAgPC9leHRlbnNpb24+CisKKyAgIDxleHRlbnNpb24gcG9pbnQ9Im9yZy5lY2xpcHNlLmVtZi5lY29yZS5nZW5lcmF0ZWRfcGFja2FnZSI+CisgICAgICA8cGFja2FnZQorICAgICAgICAgICAgdXJpPSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vaW50ZXJ2ZW50aW9ucy5lY29yZSIKKyAgICAgICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS5zdGVtLmludGVydmVudGlvbnMuSW50ZXJ2ZW50aW9uc1BhY2thZ2UiCisgICAgICAgICAgICBnZW5Nb2RlbD0ibW9kZWwvaW50ZXJ2ZW50aW9ucy5nZW5tb2RlbCIvPgorICAgPC9leHRlbnNpb24+CisKKzxleHRlbnNpb24KKyAgICBwb2ludD0ib3JnLmVjbGlwc2Uuc3RlbS5ncmFwaGdlbmVyYXRvcnMuZ3JhcGhnZW5lcmF0b3IiPgorICAgIDxjbGFzc2RlZgorICAgICAgICBjbGFzcz0ib3JnLmVjbGlwc2Uuc3RlbS5pbnRlcnZlbnRpb25zLmltcGwuQ29udHJvbEdyYXBoR2VuZXJhdG9ySW1wbCI+CisgICAgPC9jbGFzc2RlZj4KKyAgICA8ZHVibGluX2NvcmUKKyAgICAgICAgICAgIGNyZWF0b3I9IiVkY19jZ2dfY3JlYXRvcl9zZWQiCisgICAgICAgICAgIGlkZW50aWZpZXI9IiVkY19jZ2dfaWRlbnRpZXIiCisgICAgICAgICAgIGxpY2Vuc2U9IiVkY19jZ2dfbGljZW5zZSIKKyAgICAgICAgICAgcHVibGlzaGVyPSIlZGNfY2dnX3B1Ymxpc2hlciIKKyAgICAgICAgICAgc291cmNlPSIlZGNfY2dnX3NvdXJjZSIKKyAgICAgICAgICAgZGVzY3JpcHRpb249IiVkY19jZ2dfZGVzYyIKKyAgICAgICAgICAgdGl0bGU9IiVkY19jZ2dfdGl0bGUiPgorICAgIDwvZHVibGluX2NvcmU+CisgIDwvZXh0ZW5zaW9uPgorICAKKzwvcGx1Z2luPgpkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmludGVydmVudGlvbnMvcGx1Z2luX2RlLnByb3BlcnRpZXMgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uaW50ZXJ2ZW50aW9ucy9wbHVnaW5fZGUucHJvcGVydGllcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMTk0NzhhCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmludGVydmVudGlvbnMvcGx1Z2luX2RlLnByb3BlcnRpZXMKQEAgLTAsMCArMSw5OSBAQAorCisjKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAKKyMgKiBDb3B5cmlnaHQgKGMpIDIwMTEgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuIAorIyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgCisjICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wIAorIyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0IAorIyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sIAorIyAqIAorIyAqIENvbnRyaWJ1dG9yczogCisjICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiAKKyMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworcGx1Z2luTmFtZT1JbnRlcnZlbnRpb25zIE1vZGVsCitwcm92aWRlck5hbWU9d3d3LmV4YW1wbGUub3JnCitfVUlfQ3JlYXRlQ2hpbGRfdGV4dD17MH0KK19VSV9DcmVhdGVDaGlsZF90ZXh0Mj17MX0gezB9CitfVUlfQ3JlYXRlQ2hpbGRfdGV4dDM9ezF9CitfVUlfQ3JlYXRlQ2hpbGRfdG9vbHRpcD1OZXVlcyB7MH0gdW50ZXIgezF9IEZlYXR1cmUgZXJzdGVsbGVuCitfVUlfQ3JlYXRlQ2hpbGRfZGVzY3JpcHRpb249TmV1ZXMgS2luZCB2b20gVHlwIHswfSBmXHUwMGZjciBkYXMgezF9IE1lcmttYWwgZGVyIGF1c2dld1x1MDBlNGhsdGVuIHsyfSBlcnN0ZWxsZW4KK19VSV9DcmVhdGVTaWJsaW5nX2Rlc2NyaXB0aW9uPU5ldWVzIEdlc2Nod2lzdGVydGVpbCB2b20gVHlwIHswfSBmXHUwMGZjciBkZW4gYXVzZ2V3XHUwMGU0aGx0ZW4gezJ9IHVudGVyIGRlbSB7MX0gTWVya21hbCBkZXMgRWx0ZXJudGVpbCBlcnN0ZWxsZW4KK19VSV9Qcm9wZXJ0eURlc2NyaXB0b3JfZGVzY3JpcHRpb249ezB9IHZvbiB7MX0KK19VSV9JbmNpZGVuY2VUZXN0X3R5cGU9SW5jaWRlbmNlIFRlc3QKK19VSV9Vbmtub3duX3R5cGU9T2JqZWt0CitfVUlfVW5rbm93bl9kYXRhdHlwZT1XZXJ0CitfVUlfVW5rbm93bl9mZWF0dXJlPU5pY2h0IHNwZXppZml6aWVydAorX1VJX0Rpc2Vhc2VTdGF0ZVRlc3RfdHlwZT1EaXNlYXNlIFN0YXRlIFRlc3QKK19VSV9EaXNlYXNlU3RhdGVUZXN0X2Rpc2Vhc2VOYW1lX2ZlYXR1cmU9TmFtZSBkZXIgS3JhbmtoZWl0CitfVUlfRGlzZWFzZVN0YXRlVGVzdF90YXJnZXRJU09LZXlfZmVhdHVyZT1aaWVsLUlTTy1TY2hsXHUwMGZjc3NlbAorX1VJX0Rpc2Vhc2VTdGF0ZVRlc3Rfc3RhdGVfZmVhdHVyZT1TdGF0ZQorX1VJX0Rpc2Vhc2VTdGF0ZVRlc3RfdGhyZXNob2xkX2ZlYXR1cmU9VGhyZXNob2xkCitfVUlfRGlzZWFzZVN0YXRlVGVzdF9wcmVkaWNhdGVfZmVhdHVyZT1FaWdlbnNjaGFmdAorX1VJX0Rpc2Vhc2VTdGF0ZVRlc3RfdGFyZ2V0VVJJX2ZlYXR1cmU9WmllbC1VUkkKK19VSV9EaXNlYXNlU3RhdGVUZXN0X3BvcHVsYXRpb25JZGVudGlmaWVyX2ZlYXR1cmU9QmV2XHUwMGY2bGtlcnVuZ3NiZXplaWNobmVyCitfVUlfTGFiZWxWYWx1ZVRlc3RfdHlwZT1MYWJlbCBWYWx1ZSBUZXN0CitfVUlfTGFiZWxWYWx1ZVRlc3RfZGlzZWFzZU5hbWVfZmVhdHVyZT1OYW1lIGRlciBLcmFua2hlaXQKK19VSV9MYWJlbFZhbHVlVGVzdF90YXJnZXRVUklfZmVhdHVyZT1aaWVsLVVSSQorX1VJX0xhYmVsVmFsdWVUZXN0X3N0YXRlX2ZlYXR1cmU9U3RhdGUKK19VSV9MYWJlbFZhbHVlVGVzdF90aHJlc2hvbGRfZmVhdHVyZT1UaHJlc2hvbGQKK19VSV9MYWJlbFZhbHVlVGVzdF9wcmVkaWNhdGVfZmVhdHVyZT1FaWdlbnNjaGFmdAorX1VJX0xhYmVsVmFsdWVUZXN0X3BvcHVsYXRpb25JZGVudGlmaWVyX2ZlYXR1cmU9QmV2XHUwMGY2bGtlcnVuZ3NiZXplaWNobmVyCitfVUlfTGFiZWxWYWx1ZVRlc3RfbW9kZWxOYW1lX2ZlYXR1cmU9TW9kZWwgTmFtZQorX1VJX0NvbnRyb2xMYWJlbF90eXBlPUNvbnRyb2wgTGFiZWwKK19VSV9TdGFuZGFyZENvbnRyb2xMYWJlbF90eXBlPVN0YW5kYXJkIENvbnRyb2wgTGFiZWwKK19VSV9TdGFuZGFyZENvbnRyb2xMYWJlbF92YWNjaW5hdGlvbnNfZmVhdHVyZT1WYWNjaW5hdGlvbnMKK19VSV9TdGFuZGFyZENvbnRyb2xMYWJlbF9pc29sYXRpb25zX2ZlYXR1cmU9SXNvbGF0aW9ucworX1VJX0NvbnRyb2xHcmFwaEdlbmVyYXRvcl90eXBlPUNvbnRyb2wgR3JhcGggR2VuZXJhdG9yCitfVUlfR3JhcGhHZW5lcmF0b3JfdHlwZT1HcmFwaCBHZW5lcmF0b3IKK19VSV9MYXR0aWNlR3JhcGhHZW5lcmF0b3JfdHlwZT1HaXR0ZXIgR3JhcGggR2VuZXJhdG9yCitfVUlfU3F1YXJlTGF0dGljZUdyYXBoR2VuZXJhdG9yX3R5cGU9UXVhZHJhdC1HaXR0ZXItR3JhcGgtR2VuZXJhdG9yCitfVUlfTWlncmF0aW9uRWRnZUdyYXBoR2VuZXJhdG9yX3R5cGU9TWlncmF0aW9uc2thbnRlbmdyYXBoLUdlbmVyYXRvcgorX1VJX1BsYXRlQ2FycmVlR2xvYmVHcmFwaEdlbmVyYXRvcl90eXBlPVBsYXRlIENhcnJlZSBXZWx0IEdyYXBoIEdlbmVyYXRvcgorX1VJX1BhamVrTmV0R3JhcGhHZW5lcmF0b3JfdHlwZT1QYWplayBOZXR6IEdyYXBoIEdlbmVyYXRvcgorX1VJX0xhdHRpY2VHcmFwaEdlbmVyYXRvcl91c2VOZWFyZXN0TmVpZ2hib3JzX2ZlYXR1cmU9Tlx1MDBlNGNoc3RlIE5hY2hiYXJuIGJlbnV0emVuCitfVUlfTGF0dGljZUdyYXBoR2VuZXJhdG9yX3VzZU5leHROZWFyZXN0TmVpZ2hib3JzX2ZlYXR1cmU9Tlx1MDBlNGNoc3RlIG5cdTAwZTRjaHN0ZSBOYWNoYmFybiBiZW51dHplbgorX1VJX0xhdHRpY2VHcmFwaEdlbmVyYXRvcl9wZXJpb2RpY0JvdW5kYXJpZXNfZmVhdHVyZT1QZXJpb2Rpc2NoZSBHcmVuemVuCitfVUlfU3F1YXJlTGF0dGljZUdyYXBoR2VuZXJhdG9yX3hTaXplX2ZlYXR1cmU9WC1Hclx1MDBmNlx1MDBkZmUKK19VSV9TcXVhcmVMYXR0aWNlR3JhcGhHZW5lcmF0b3JfeVNpemVfZmVhdHVyZT1ZLUdyXHUwMGY2XHUwMGRmZQorX1VJX1NxdWFyZUxhdHRpY2VHcmFwaEdlbmVyYXRvcl9hcmVhX2ZlYXR1cmU9RmxcdTAwZTRjaGUKK19VSV9NaWdyYXRpb25FZGdlR3JhcGhHZW5lcmF0b3JfbG9jYXRpb25fZmVhdHVyZT1PcnQKK19VSV9NaWdyYXRpb25FZGdlR3JhcGhHZW5lcmF0b3JfbWlncmF0aW9uUmF0ZV9mZWF0dXJlPU1pZ3JhdGlvbnNyYXRlCitfVUlfTWlncmF0aW9uRWRnZUdyYXBoR2VuZXJhdG9yX3BvcHVsYXRpb25fZmVhdHVyZT1CZXZcdTAwZjZsa2VydW5nCitfVUlfUGxhdGVDYXJyZWVHbG9iZUdyYXBoR2VuZXJhdG9yX2FuZ3VsYXJTdGVwX2ZlYXR1cmU9V2lua2Vsc2Nocml0dAorX1VJX1BsYXRlQ2FycmVlR2xvYmVHcmFwaEdlbmVyYXRvcl9yYWRpdXNfZmVhdHVyZT1SYWRpdXMKK19VSV9QYWpla05ldEdyYXBoR2VuZXJhdG9yX2RhdGFGaWxlX25ldF9mZWF0dXJlPURhdGVuZmlsZSBuZXQKK19VSV9QYWpla05ldEdyYXBoR2VuZXJhdG9yX2FyZWFfZmVhdHVyZT1GbFx1MDBlNGNoZQorX1VJX1BhamVrTmV0R3JhcGhHZW5lcmF0b3JfY29udGFpbmVyX2ZlYXR1cmU9QmVoXHUwMGU0bHRlcm4KK19VSV9QYWpla05ldEdyYXBoR2VuZXJhdG9yX3NjYWxpbmdGYWN0b3JfZmVhdHVyZT1Ta2FsaWVydW5nc2Zha3RvcgorX1VJX1BhamVrTmV0R3JhcGhHZW5lcmF0b3JfZml0X2ZlYXR1cmU9QW5wYXNzZW4KK19VSV9QYWpla05ldEdyYXBoR2VuZXJhdG9yX2VuZm9yY2VDb250YWlubWVudF9mZWF0dXJlPUNvbnRhaW5tZW50IEVyendpbmdlbgorCisjIENvbnRyb2wgR3JhcGggR2VuZXJhdG9yIER1YmxpbiBDb3JlCitkY19jZ2dfY3JlYXRvcl9zZWQ9U1RFTSBUZWFtCitkY19jZ2dfaWRlbnRpZXI9CitkY19jZ2dfbGljZW5zZT1FUEwgMS4wCitkY19jZ2dfcHVibGlzaGVyPUVjbGlwc2UKK2RjX2NnZ19zb3VyY2U9CitkY19jZ2dfZGVzYz1BIGdyYXBoIHdpdGggY29udHJvbCBsYWJlbHMgZm9yIGludGVydmVudGlvbnMgZXRjLgorZGNfY2dnX3RpdGxlPUNvbnRyb2wgTGFiZWwgR3JhcGggR2VuZXJhdG9yCisgCitfVUlfQ29udHJvbEdyYXBoR2VuZXJhdG9yX3ZhY2NpbmF0ZUZyYWN0aW9uX2ZlYXR1cmU9VmFjY2luYXRlIEZyYWN0aW9uCitfVUlfQ29udHJvbEdyYXBoR2VuZXJhdG9yX2lzb2xhdGlvbkZyYWN0aW9uX2ZlYXR1cmU9SXNvbGF0aW9uIEZyYWN0aW9uCitfVUlfQ29udHJvbEdyYXBoR2VuZXJhdG9yX3ZhY2NpbmF0aW9uRnJhY3Rpb25fZmVhdHVyZT1WYWNjaW5hdGlvbiBGcmFjdGlvbgorX1VJX0NvbnRyb2xMYWJlbFZhbHVlX3R5cGU9Q29udHJvbCBMYWJlbCBWYWx1ZQorX1VJX0NvbnRyb2xMYWJlbF9vcmlnaW5hbFZhbHVlX2ZlYXR1cmU9VXJzcHJcdTAwZmNuZ2xpY2hlciBXZXJ0CitfVUlfQ29udHJvbExhYmVsVmFsdWVfdmFjY2luYXRpb25zX2ZlYXR1cmU9VmFjY2luYXRpb25zCitfVUlfQ29udHJvbExhYmVsVmFsdWVfaXNvbGF0aW9uc19mZWF0dXJlPUlzb2xhdGlvbnMKK19VSV9TdGFuZGFyZENvbnRyb2xMYWJlbF9wb3B1bGF0aW9uSWRlbnRpZmllcl9mZWF0dXJlPUJldlx1MDBmNmxrZXJ1bmdzYmV6ZWljaG5lcgorX1VJX0NvbnRyb2xHcmFwaEdlbmVyYXRvcl9wb3B1bGF0aW9uSWRlbnRpZmllcl9mZWF0dXJlPUJldlx1MDBmNmxrZXJ1bmdzYmV6ZWljaG5lcgorX1VJX0NvbnRyb2xHcmFwaEdlbmVyYXRvcl9sb2NhdGlvbl9mZWF0dXJlPU9ydAorX1VJX1N0YW5kYXJkQ29udHJvbExhYmVsVmFsdWVfdHlwZT1TdGFuZGFyZCBDb250cm9sIExhYmVsIFZhbHVlCitfVUlfU3RhbmRhcmRDb250cm9sTGFiZWxWYWx1ZV92YWNjaW5hdGlvbnNfZmVhdHVyZT1WYWNjaW5hdGlvbnMKK19VSV9TdGFuZGFyZENvbnRyb2xMYWJlbFZhbHVlX2lzb2xhdGlvbnNfZmVhdHVyZT1Jc29sYXRpb25zCitfVUlfSW50ZXJ2ZW50aW9uTGFiZWxfdHlwZT1JbnRlcnZlbnRpb24gTGFiZWwKK19VSV9TdGFuZGFyZEludGVydmVudGlvbkxhYmVsX3R5cGU9U3RhbmRhcmQgSW50ZXJ2ZW50aW9uIExhYmVsCitfVUlfSW50ZXJ2ZW50aW9uTGFiZWxWYWx1ZV90eXBlPUludGVydmVudGlvbiBMYWJlbCBWYWx1ZQorX1VJX1N0YW5kYXJkSW50ZXJ2ZW50aW9uTGFiZWxWYWx1ZV90eXBlPVN0YW5kYXJkIEludGVydmVudGlvbiBMYWJlbCBWYWx1ZQorX1VJX1N0YW5kYXJkSW50ZXJ2ZW50aW9uTGFiZWxfcG9wdWxhdGlvbklkZW50aWZpZXJfZmVhdHVyZT1CZXZcdTAwZjZsa2VydW5nc2JlemVpY2huZXIKK19VSV9TdGFuZGFyZEludGVydmVudGlvbkxhYmVsVmFsdWVfdmFjY2luYXRpb25zX2ZlYXR1cmU9VmFjY2luYXRpb25zCitfVUlfU3RhbmRhcmRJbnRlcnZlbnRpb25MYWJlbFZhbHVlX2lzb2xhdGlvbnNfZmVhdHVyZT1Jc29sYXRpb25zCmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uaW50ZXJ2ZW50aW9ucy9wbHVnaW5fa3IucHJvcGVydGllcyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcnZlbnRpb25zL3BsdWdpbl9rci5wcm9wZXJ0aWVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE0ODdmODMKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uaW50ZXJ2ZW50aW9ucy9wbHVnaW5fa3IucHJvcGVydGllcwpAQCAtMCwwICsxLDk5IEBACisKKyMqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIAorIyAqIENvcHlyaWdodCAoYykgMjAxMSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4gCisjICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyAKKyMgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgCisjICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQgCisjICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwgCisjICogCisjICogQ29udHJpYnV0b3JzOiAKKyMgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIAorIyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitwbHVnaW5OYW1lPUludGVydmVudGlvbnMgTW9kZWwKK3Byb3ZpZGVyTmFtZT13d3cuZXhhbXBsZS5vcmcKK19VSV9DcmVhdGVDaGlsZF90ZXh0PXswfQorX1VJX0NyZWF0ZUNoaWxkX3RleHQyPXsxfSB7MH0KK19VSV9DcmVhdGVDaGlsZF90ZXh0Mz17MX0KK19VSV9DcmVhdGVDaGlsZF90b29sdGlwPXsxfSBcdWFlMzBcdWIyYTUgXHVkNTU4XHVjNWQwIFx1YzBjOCB7MH0gXHViOWNjXHViNGU0XHVhZTMwCitfVUlfQ3JlYXRlQ2hpbGRfZGVzY3JpcHRpb249XHVjMTIwXHVkMGRkXHVkNTVjIHsyfVx1Yzc1OCB7MX0gXHVhZTMwXHViMmE1XHVjNWQwIFx1YjMwMFx1ZDU1YyBcdWQ2MTVcdWMyZGQgezB9XHVjNzU4IFx1YzBjOFx1Yjg1Y1x1YzZiNCBDaGlsZFx1Yjk3YyBcdWI5Y2NcdWI0ZWRcdWIyYzhcdWIyZTQuCitfVUlfQ3JlYXRlU2libGluZ19kZXNjcmlwdGlvbj1cdWJkODBcdWJhYThcdWM3NTggXHVjMTIwXHVkMGRkXHViNDFjIHsyfVx1YzVkMFx1YzExYyB7MX0gXHVhZTMwXHViMmE1XHVjNWQwIFx1YjMwMFx1ZDU1YyBcdWQ2MTVcdWMyZGQgezB9XHVjNzU4IFx1YzBjOFx1Yjg1Y1x1YzZiNCBcdWQ2MTVcdWM4MWNcdWI5N2MgXHViOWNjXHViNGVkXHViMmM4XHViMmU0LgorX1VJX1Byb3BlcnR5RGVzY3JpcHRvcl9kZXNjcmlwdGlvbj17MX0gXHVjOTExIHswfQorX1VJX0luY2lkZW5jZVRlc3RfdHlwZT1JbmNpZGVuY2UgVGVzdAorX1VJX1Vua25vd25fdHlwZT1cdWFjMWNcdWNjYjQKK19VSV9Vbmtub3duX2RhdGF0eXBlPVx1YWMxMgorX1VJX1Vua25vd25fZmVhdHVyZT1cdWM5YzBcdWM4MTVcdWI0MThcdWM5YzAgXHVjNTRhXHVjNzRjCitfVUlfRGlzZWFzZVN0YXRlVGVzdF90eXBlPURpc2Vhc2UgU3RhdGUgVGVzdAorX1VJX0Rpc2Vhc2VTdGF0ZVRlc3RfZGlzZWFzZU5hbWVfZmVhdHVyZT1cdWM5YzhcdWJjZDEgXHVjNzc0XHViOTg0CitfVUlfRGlzZWFzZVN0YXRlVGVzdF90YXJnZXRJU09LZXlfZmVhdHVyZT1cdWIzMDBcdWMwYzEgSVNPIFx1ZDBhNAorX1VJX0Rpc2Vhc2VTdGF0ZVRlc3Rfc3RhdGVfZmVhdHVyZT1TdGF0ZQorX1VJX0Rpc2Vhc2VTdGF0ZVRlc3RfdGhyZXNob2xkX2ZlYXR1cmU9VGhyZXNob2xkCitfVUlfRGlzZWFzZVN0YXRlVGVzdF9wcmVkaWNhdGVfZmVhdHVyZT1cdWMyMjBcdWM1YjQKK19VSV9EaXNlYXNlU3RhdGVUZXN0X3RhcmdldFVSSV9mZWF0dXJlPVx1YjMwMFx1YzBjMSBVUkkKK19VSV9EaXNlYXNlU3RhdGVUZXN0X3BvcHVsYXRpb25JZGVudGlmaWVyX2ZlYXR1cmU9XHVjNzc4XHVhZDZjIFx1YzJkZFx1YmNjNFx1Yzc5MAorX1VJX0xhYmVsVmFsdWVUZXN0X3R5cGU9TGFiZWwgVmFsdWUgVGVzdAorX1VJX0xhYmVsVmFsdWVUZXN0X2Rpc2Vhc2VOYW1lX2ZlYXR1cmU9XHVjOWM4XHViY2QxIFx1Yzc3NFx1Yjk4NAorX1VJX0xhYmVsVmFsdWVUZXN0X3RhcmdldFVSSV9mZWF0dXJlPVx1YjMwMFx1YzBjMSBVUkkKK19VSV9MYWJlbFZhbHVlVGVzdF9zdGF0ZV9mZWF0dXJlPVN0YXRlCitfVUlfTGFiZWxWYWx1ZVRlc3RfdGhyZXNob2xkX2ZlYXR1cmU9VGhyZXNob2xkCitfVUlfTGFiZWxWYWx1ZVRlc3RfcHJlZGljYXRlX2ZlYXR1cmU9XHVjMjIwXHVjNWI0CitfVUlfTGFiZWxWYWx1ZVRlc3RfcG9wdWxhdGlvbklkZW50aWZpZXJfZmVhdHVyZT1cdWM3NzhcdWFkNmMgXHVjMmRkXHViY2M0XHVjNzkwCitfVUlfTGFiZWxWYWx1ZVRlc3RfbW9kZWxOYW1lX2ZlYXR1cmU9TW9kZWwgTmFtZQorX1VJX0NvbnRyb2xMYWJlbF90eXBlPUNvbnRyb2wgTGFiZWwKK19VSV9TdGFuZGFyZENvbnRyb2xMYWJlbF90eXBlPVN0YW5kYXJkIENvbnRyb2wgTGFiZWwKK19VSV9TdGFuZGFyZENvbnRyb2xMYWJlbF92YWNjaW5hdGlvbnNfZmVhdHVyZT1WYWNjaW5hdGlvbnMKK19VSV9TdGFuZGFyZENvbnRyb2xMYWJlbF9pc29sYXRpb25zX2ZlYXR1cmU9SXNvbGF0aW9ucworX1VJX0NvbnRyb2xHcmFwaEdlbmVyYXRvcl90eXBlPUNvbnRyb2wgR3JhcGggR2VuZXJhdG9yCitfVUlfR3JhcGhHZW5lcmF0b3JfdHlwZT1cdWFkZjhcdWI3OThcdWQ1MDQgXHVjMGRkXHVjMTMxXHVhZTMwCitfVUlfTGF0dGljZUdyYXBoR2VuZXJhdG9yX3R5cGU9XHVhY2E5XHVjNzkwIFx1YWRmOFx1Yjc5OFx1ZDUwNCBcdWMwZGRcdWMxMzFcdWFlMzAKK19VSV9TcXVhcmVMYXR0aWNlR3JhcGhHZW5lcmF0b3JfdHlwZT1cdWMwYWNcdWFjMDFcdWQ2MTUgXHVhY2E5XHVjNzkwIFx1YWRmOFx1Yjc5OFx1ZDUwNCBcdWMwZGRcdWMxMzFcdWFlMzAKK19VSV9NaWdyYXRpb25FZGdlR3JhcGhHZW5lcmF0b3JfdHlwZT1cdWM3NzRcdWIzZDkgXHVhYzAwXHVjN2E1XHVjNzkwXHViOWFjIFx1YzBkZFx1YzEzMVx1YWUzMCBcdWFkZjhcdWI3OThcdWQ1MDQKK19VSV9QbGF0ZUNhcnJlZUdsb2JlR3JhcGhHZW5lcmF0b3JfdHlwZT1QbGF0ZSBDYXJyZWUgXHVhZTAwXHViODVjXHViZTBjIFx1YWRmOFx1Yjc5OFx1ZDUwNCBcdWMwZGRcdWMxMzFcdWFlMzAKK19VSV9QYWpla05ldEdyYXBoR2VuZXJhdG9yX3R5cGU9UGFqZWsgXHViMTI0XHVkMmI4IFx1YWRmOFx1Yjc5OFx1ZDUwNCBcdWMwZGRcdWMxMzFcdWFlMzAKK19VSV9MYXR0aWNlR3JhcGhHZW5lcmF0b3JfdXNlTmVhcmVzdE5laWdoYm9yc19mZWF0dXJlPVx1YWMwMFx1YzdhNSBcdWFjMDBcdWFlNGNcdWM2YjQgXHVjNzc0XHVjNmMzIFx1YzBhY1x1YzZhOQorX1VJX0xhdHRpY2VHcmFwaEdlbmVyYXRvcl91c2VOZXh0TmVhcmVzdE5laWdoYm9yc19mZWF0dXJlPVx1YjJlNFx1Yzc0Y1x1YzczY1x1Yjg1YyBcdWFjMDBcdWM3YTUgXHVhYzAwXHVhZTRjXHVjNmI0IFx1Yzc3NFx1YzZjMyBcdWMwYWNcdWM2YTkKK19VSV9MYXR0aWNlR3JhcGhHZW5lcmF0b3JfcGVyaW9kaWNCb3VuZGFyaWVzX2ZlYXR1cmU9XHVjMmRjXHVhYzA0IFx1YjJlOFx1YzcwNCBcdWFjYmRcdWFjYzQKK19VSV9TcXVhcmVMYXR0aWNlR3JhcGhHZW5lcmF0b3JfeFNpemVfZmVhdHVyZT1YXHVkMDZjXHVhZTMwCitfVUlfU3F1YXJlTGF0dGljZUdyYXBoR2VuZXJhdG9yX3lTaXplX2ZlYXR1cmU9WVx1ZDA2Y1x1YWUzMAorX1VJX1NxdWFyZUxhdHRpY2VHcmFwaEdlbmVyYXRvcl9hcmVhX2ZlYXR1cmU9XHVjOWMwXHVjNWVkCitfVUlfTWlncmF0aW9uRWRnZUdyYXBoR2VuZXJhdG9yX2xvY2F0aW9uX2ZlYXR1cmU9XHVjNzA0XHVjZTU4CitfVUlfTWlncmF0aW9uRWRnZUdyYXBoR2VuZXJhdG9yX21pZ3JhdGlvblJhdGVfZmVhdHVyZT1cdWM3NzRcdWIzZDlcdWM3MjgKK19VSV9NaWdyYXRpb25FZGdlR3JhcGhHZW5lcmF0b3JfcG9wdWxhdGlvbl9mZWF0dXJlPVx1Yzc3OFx1YWQ2YworX1VJX1BsYXRlQ2FycmVlR2xvYmVHcmFwaEdlbmVyYXRvcl9hbmd1bGFyU3RlcF9mZWF0dXJlPVx1YWMwMVx1YjNjNCBcdWIyZThcdWFjYzQKK19VSV9QbGF0ZUNhcnJlZUdsb2JlR3JhcGhHZW5lcmF0b3JfcmFkaXVzX2ZlYXR1cmU9XHViYzE4XHVjOWMwXHViOTg0CitfVUlfUGFqZWtOZXRHcmFwaEdlbmVyYXRvcl9kYXRhRmlsZV9uZXRfZmVhdHVyZT1cdWIzNzBcdWM3NzRcdWQxMzAgXHVkMzBjXHVjNzdjIG5ldAorX1VJX1BhamVrTmV0R3JhcGhHZW5lcmF0b3JfYXJlYV9mZWF0dXJlPVx1YzljMFx1YzVlZAorX1VJX1BhamVrTmV0R3JhcGhHZW5lcmF0b3JfY29udGFpbmVyX2ZlYXR1cmU9XHVjZWU4XHVkMTRjXHVjNzc0XHViMTA4CitfVUlfUGFqZWtOZXRHcmFwaEdlbmVyYXRvcl9zY2FsaW5nRmFjdG9yX2ZlYXR1cmU9XHVkNjU1XHVjN2E1XHVjMTMxIFx1YzY5NFx1YzE4YworX1VJX1BhamVrTmV0R3JhcGhHZW5lcmF0b3JfZml0X2ZlYXR1cmU9XHViOWRlXHVjZDk0XHVhZTMwCitfVUlfUGFqZWtOZXRHcmFwaEdlbmVyYXRvcl9lbmZvcmNlQ29udGFpbm1lbnRfZmVhdHVyZT1cdWJkMDlcdWMxYzRcdWI5N2MgXHVjMmRjXHVkNTg5CisKKyMgQ29udHJvbCBHcmFwaCBHZW5lcmF0b3IgRHVibGluIENvcmUKK2RjX2NnZ19jcmVhdG9yX3NlZD1TVEVNIFx1ZDMwMAorZGNfY2dnX2lkZW50aWVyPQorZGNfY2dnX2xpY2Vuc2U9RVBMIDEuMAorZGNfY2dnX3B1Ymxpc2hlcj1FY2xpcHNlCitkY19jZ2dfc291cmNlPQorZGNfY2dnX2Rlc2M9QSBncmFwaCB3aXRoIGNvbnRyb2wgbGFiZWxzIGZvciBpbnRlcnZlbnRpb25zIGV0Yy4KK2RjX2NnZ190aXRsZT1Db250cm9sIExhYmVsIEdyYXBoIEdlbmVyYXRvcgorIAorX1VJX0NvbnRyb2xHcmFwaEdlbmVyYXRvcl92YWNjaW5hdGVGcmFjdGlvbl9mZWF0dXJlPVZhY2NpbmF0ZSBGcmFjdGlvbgorX1VJX0NvbnRyb2xHcmFwaEdlbmVyYXRvcl9pc29sYXRpb25GcmFjdGlvbl9mZWF0dXJlPUlzb2xhdGlvbiBGcmFjdGlvbgorX1VJX0NvbnRyb2xHcmFwaEdlbmVyYXRvcl92YWNjaW5hdGlvbkZyYWN0aW9uX2ZlYXR1cmU9VmFjY2luYXRpb24gRnJhY3Rpb24KK19VSV9Db250cm9sTGFiZWxWYWx1ZV90eXBlPUNvbnRyb2wgTGFiZWwgVmFsdWUKK19VSV9Db250cm9sTGFiZWxfb3JpZ2luYWxWYWx1ZV9mZWF0dXJlPVx1YzZkMFx1Yjc5OCBcdWFjMTIKK19VSV9Db250cm9sTGFiZWxWYWx1ZV92YWNjaW5hdGlvbnNfZmVhdHVyZT1WYWNjaW5hdGlvbnMKK19VSV9Db250cm9sTGFiZWxWYWx1ZV9pc29sYXRpb25zX2ZlYXR1cmU9SXNvbGF0aW9ucworX1VJX1N0YW5kYXJkQ29udHJvbExhYmVsX3BvcHVsYXRpb25JZGVudGlmaWVyX2ZlYXR1cmU9XHVjNzc4XHVhZDZjIFx1YzJkZFx1YmNjNFx1Yzc5MAorX1VJX0NvbnRyb2xHcmFwaEdlbmVyYXRvcl9wb3B1bGF0aW9uSWRlbnRpZmllcl9mZWF0dXJlPVx1Yzc3OFx1YWQ2YyBcdWMyZGRcdWJjYzRcdWM3OTAKK19VSV9Db250cm9sR3JhcGhHZW5lcmF0b3JfbG9jYXRpb25fZmVhdHVyZT1cdWM3MDRcdWNlNTgKK19VSV9TdGFuZGFyZENvbnRyb2xMYWJlbFZhbHVlX3R5cGU9U3RhbmRhcmQgQ29udHJvbCBMYWJlbCBWYWx1ZQorX1VJX1N0YW5kYXJkQ29udHJvbExhYmVsVmFsdWVfdmFjY2luYXRpb25zX2ZlYXR1cmU9VmFjY2luYXRpb25zCitfVUlfU3RhbmRhcmRDb250cm9sTGFiZWxWYWx1ZV9pc29sYXRpb25zX2ZlYXR1cmU9SXNvbGF0aW9ucworX1VJX0ludGVydmVudGlvbkxhYmVsX3R5cGU9SW50ZXJ2ZW50aW9uIExhYmVsCitfVUlfU3RhbmRhcmRJbnRlcnZlbnRpb25MYWJlbF90eXBlPVN0YW5kYXJkIEludGVydmVudGlvbiBMYWJlbAorX1VJX0ludGVydmVudGlvbkxhYmVsVmFsdWVfdHlwZT1JbnRlcnZlbnRpb24gTGFiZWwgVmFsdWUKK19VSV9TdGFuZGFyZEludGVydmVudGlvbkxhYmVsVmFsdWVfdHlwZT1TdGFuZGFyZCBJbnRlcnZlbnRpb24gTGFiZWwgVmFsdWUKK19VSV9TdGFuZGFyZEludGVydmVudGlvbkxhYmVsX3BvcHVsYXRpb25JZGVudGlmaWVyX2ZlYXR1cmU9XHVjNzc4XHVhZDZjIFx1YzJkZFx1YmNjNFx1Yzc5MAorX1VJX1N0YW5kYXJkSW50ZXJ2ZW50aW9uTGFiZWxWYWx1ZV92YWNjaW5hdGlvbnNfZmVhdHVyZT1WYWNjaW5hdGlvbnMKK19VSV9TdGFuZGFyZEludGVydmVudGlvbkxhYmVsVmFsdWVfaXNvbGF0aW9uc19mZWF0dXJlPUlzb2xhdGlvbnMKZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcnZlbnRpb25zL3BsdWdpbl96aC5wcm9wZXJ0aWVzIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmludGVydmVudGlvbnMvcGx1Z2luX3poLnByb3BlcnRpZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTBmNTI0NgotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcnZlbnRpb25zL3BsdWdpbl96aC5wcm9wZXJ0aWVzCkBAIC0wLDAgKzEsOTkgQEAKKworIyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogCisjICogQ29weXJpZ2h0IChjKSAyMDExIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiAKKyMgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIAorIyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCAKKyMgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdCAKKyMgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbCAKKyMgKiAKKyMgKiBDb250cmlidXRvcnM6IAorIyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gCisjICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3BsdWdpbk5hbWU9SW50ZXJ2ZW50aW9ucyBNb2RlbAorcHJvdmlkZXJOYW1lPXd3dy5leGFtcGxlLm9yZworX1VJX0NyZWF0ZUNoaWxkX3RleHQ9ezB9CitfVUlfQ3JlYXRlQ2hpbGRfdGV4dDI9ezF9IHswfQorX1VJX0NyZWF0ZUNoaWxkX3RleHQzPXsxfQorX1VJX0NyZWF0ZUNoaWxkX3Rvb2x0aXA9XHU1MjFiXHU1ZWZhXHU1NzI4ezF9IHswfVx1NjViMFx1NTI5Zlx1ODBmZAorX1VJX0NyZWF0ZUNoaWxkX2Rlc2NyaXB0aW9uPVx1NGUzYVx1OTAwOVx1NWI5YVx1NzY4NHsyfVx1NzY4NHsxfVx1NzI3OVx1NjAyN1x1Njc2NVx1NTIxYlx1NWVmYVx1NGUwMFx1NGUyYVx1NjViMFx1NzY4NHswfVx1NWI1MFx1N2M3YgorX1VJX0NyZWF0ZVNpYmxpbmdfZGVzY3JpcHRpb249XHU1NzI4ezF9XHU3Njg0XHU3MjM2XHU5NmM2XHU0ZTJkXHU0ZTNhXHU5MDA5XHU1YjlhXHU3Njg0ezJ9XHU2NzY1XHU1MjFiXHU1ZWZhXHU0ZTAwXHU0ZTJhezB9XHU3YzdiXHU1NzhiXHU3Njg0XHU2NWIwXHU3Njg0XHU1MTQ0XHU1ZjFmXHU3YzdiCitfVUlfUHJvcGVydHlEZXNjcmlwdG9yX2Rlc2NyaXB0aW9uPXswfVx1NGVjZVx1NWM1ZXsxfQorX1VJX0luY2lkZW5jZVRlc3RfdHlwZT1JbmNpZGVuY2UgVGVzdAorX1VJX1Vua25vd25fdHlwZT1cdTViZjlcdThjNjEKK19VSV9Vbmtub3duX2RhdGF0eXBlPVx1NGVmN1x1NTAzYworX1VJX1Vua25vd25fZmVhdHVyZT1cdTY3MmFcdTYzMDdcdTViOWEKK19VSV9EaXNlYXNlU3RhdGVUZXN0X3R5cGU9RGlzZWFzZSBTdGF0ZSBUZXN0CitfVUlfRGlzZWFzZVN0YXRlVGVzdF9kaXNlYXNlTmFtZV9mZWF0dXJlPVx1NzViZVx1NzVjNVx1NTQwZFx1NzlmMAorX1VJX0Rpc2Vhc2VTdGF0ZVRlc3RfdGFyZ2V0SVNPS2V5X2ZlYXR1cmU9XHU3NmVlXHU2ODA3SVNPXHU0ZWUzXHU3ODAxCitfVUlfRGlzZWFzZVN0YXRlVGVzdF9zdGF0ZV9mZWF0dXJlPVN0YXRlCitfVUlfRGlzZWFzZVN0YXRlVGVzdF90aHJlc2hvbGRfZmVhdHVyZT1UaHJlc2hvbGQKK19VSV9EaXNlYXNlU3RhdGVUZXN0X3ByZWRpY2F0ZV9mZWF0dXJlPVx1NjNjZlx1OGZmMAorX1VJX0Rpc2Vhc2VTdGF0ZVRlc3RfdGFyZ2V0VVJJX2ZlYXR1cmU9XHU3NmVlXHU2ODA3VVJJCitfVUlfRGlzZWFzZVN0YXRlVGVzdF9wb3B1bGF0aW9uSWRlbnRpZmllcl9mZWF0dXJlPVx1NzljZFx1N2ZhNFx1NjgwN1x1OGJjNlx1N2IyNgorX1VJX0xhYmVsVmFsdWVUZXN0X3R5cGU9TGFiZWwgVmFsdWUgVGVzdAorX1VJX0xhYmVsVmFsdWVUZXN0X2Rpc2Vhc2VOYW1lX2ZlYXR1cmU9XHU3NWJlXHU3NWM1XHU1NDBkXHU3OWYwCitfVUlfTGFiZWxWYWx1ZVRlc3RfdGFyZ2V0VVJJX2ZlYXR1cmU9XHU3NmVlXHU2ODA3VVJJCitfVUlfTGFiZWxWYWx1ZVRlc3Rfc3RhdGVfZmVhdHVyZT1TdGF0ZQorX1VJX0xhYmVsVmFsdWVUZXN0X3RocmVzaG9sZF9mZWF0dXJlPVRocmVzaG9sZAorX1VJX0xhYmVsVmFsdWVUZXN0X3ByZWRpY2F0ZV9mZWF0dXJlPVx1NjNjZlx1OGZmMAorX1VJX0xhYmVsVmFsdWVUZXN0X3BvcHVsYXRpb25JZGVudGlmaWVyX2ZlYXR1cmU9XHU3OWNkXHU3ZmE0XHU2ODA3XHU4YmM2XHU3YjI2CitfVUlfTGFiZWxWYWx1ZVRlc3RfbW9kZWxOYW1lX2ZlYXR1cmU9TW9kZWwgTmFtZQorX1VJX0NvbnRyb2xMYWJlbF90eXBlPUNvbnRyb2wgTGFiZWwKK19VSV9TdGFuZGFyZENvbnRyb2xMYWJlbF90eXBlPVN0YW5kYXJkIENvbnRyb2wgTGFiZWwKK19VSV9TdGFuZGFyZENvbnRyb2xMYWJlbF92YWNjaW5hdGlvbnNfZmVhdHVyZT1WYWNjaW5hdGlvbnMKK19VSV9TdGFuZGFyZENvbnRyb2xMYWJlbF9pc29sYXRpb25zX2ZlYXR1cmU9SXNvbGF0aW9ucworX1VJX0NvbnRyb2xHcmFwaEdlbmVyYXRvcl90eXBlPUNvbnRyb2wgR3JhcGggR2VuZXJhdG9yCitfVUlfR3JhcGhHZW5lcmF0b3JfdHlwZT1cdTU2ZmVcdTc1MWZcdTYyMTBcdTU2NjgKK19VSV9MYXR0aWNlR3JhcGhHZW5lcmF0b3JfdHlwZT1cdTY4M2NcdTViNTBcdTU2ZmVcdTVmNjJcdTc1MWZcdTYyMTBcdTU2NjgKK19VSV9TcXVhcmVMYXR0aWNlR3JhcGhHZW5lcmF0b3JfdHlwZT1cdTY1YjlcdTVmNjJcdTY4M2NcdTViNTBcdTU2ZmVcdTc1MWZcdTYyMTBcdTU2NjgKK19VSV9NaWdyYXRpb25FZGdlR3JhcGhHZW5lcmF0b3JfdHlwZT1cdThmYzFcdTc5ZmJcdThmYjlcdTdmMThcdTU2ZmVcdTVmNjJcdTc1MWZcdTYyMTBcdTU2NjgKK19VSV9QbGF0ZUNhcnJlZUdsb2JlR3JhcGhHZW5lcmF0b3JfdHlwZT1cdTdiNDlcdThkZGRcdTU3MzBcdTc0MDNcdTU2ZmVcdTVmNjJcdTc1MWZcdTYyMTBcdTU2NjgKK19VSV9QYWpla05ldEdyYXBoR2VuZXJhdG9yX3R5cGU9UGFqZWtcdTdmNTFcdTdlZGNcdTU2ZmVcdTVmNjJcdTc1MWZcdTYyMTBcdTU2NjgKK19VSV9MYXR0aWNlR3JhcGhHZW5lcmF0b3JfdXNlTmVhcmVzdE5laWdoYm9yc19mZWF0dXJlPVx1NGY3Zlx1NzUyOFx1NjcwMFx1OGZkMVx1NzY4NFx1OTBiYlx1NWM0NQorX1VJX0xhdHRpY2VHcmFwaEdlbmVyYXRvcl91c2VOZXh0TmVhcmVzdE5laWdoYm9yc19mZWF0dXJlPVx1NGY3Zlx1NzUyOFx1NGUwYlx1NGUwMFx1NGUyYVx1NjcwMFx1OGZkMVx1NzY4NFx1OTBiYlx1NWM0NQorX1VJX0xhdHRpY2VHcmFwaEdlbmVyYXRvcl9wZXJpb2RpY0JvdW5kYXJpZXNfZmVhdHVyZT1cdTU0NjhcdTY3MWZcdThmYjlcdTc1NGMKK19VSV9TcXVhcmVMYXR0aWNlR3JhcGhHZW5lcmF0b3JfeFNpemVfZmVhdHVyZT1YXHU3Njg0XHU1OTI3XHU1YzBmCitfVUlfU3F1YXJlTGF0dGljZUdyYXBoR2VuZXJhdG9yX3lTaXplX2ZlYXR1cmU9WVx1NzY4NFx1NTkyN1x1NWMwZgorX1VJX1NxdWFyZUxhdHRpY2VHcmFwaEdlbmVyYXRvcl9hcmVhX2ZlYXR1cmU9XHU5NzYyXHU3OWVmCitfVUlfTWlncmF0aW9uRWRnZUdyYXBoR2VuZXJhdG9yX2xvY2F0aW9uX2ZlYXR1cmU9XHU1NzMwXHU3MGI5CitfVUlfTWlncmF0aW9uRWRnZUdyYXBoR2VuZXJhdG9yX21pZ3JhdGlvblJhdGVfZmVhdHVyZT1cdThmYzFcdTc5ZmJcdTczODcKK19VSV9NaWdyYXRpb25FZGdlR3JhcGhHZW5lcmF0b3JfcG9wdWxhdGlvbl9mZWF0dXJlPVx1NzljZFx1N2ZhNAorX1VJX1BsYXRlQ2FycmVlR2xvYmVHcmFwaEdlbmVyYXRvcl9hbmd1bGFyU3RlcF9mZWF0dXJlPVx1ODlkMlx1NmI2NVx1OTU3ZgorX1VJX1BsYXRlQ2FycmVlR2xvYmVHcmFwaEdlbmVyYXRvcl9yYWRpdXNfZmVhdHVyZT1cdTUzNGFcdTVmODQKK19VSV9QYWpla05ldEdyYXBoR2VuZXJhdG9yX2RhdGFGaWxlX25ldF9mZWF0dXJlPVx1NjU3MFx1NjM2ZVx1NjU4N1x1NGVmNlx1N2Y1MVx1N2VkYworX1VJX1BhamVrTmV0R3JhcGhHZW5lcmF0b3JfYXJlYV9mZWF0dXJlPVx1OTc2Mlx1NzllZgorX1VJX1BhamVrTmV0R3JhcGhHZW5lcmF0b3JfY29udGFpbmVyX2ZlYXR1cmU9XHU1YmI5XHU1NjY4CitfVUlfUGFqZWtOZXRHcmFwaEdlbmVyYXRvcl9zY2FsaW5nRmFjdG9yX2ZlYXR1cmU9XHU3ZjI5XHU2NTNlXHU1NmUwXHU1YjUwCitfVUlfUGFqZWtOZXRHcmFwaEdlbmVyYXRvcl9maXRfZmVhdHVyZT1cdTkwMDJcdTU0MDgKK19VSV9QYWpla05ldEdyYXBoR2VuZXJhdG9yX2VuZm9yY2VDb250YWlubWVudF9mZWF0dXJlPVx1NWYzYVx1NTIzNlx1OTA0Zlx1NTIzNgorCisjIENvbnRyb2wgR3JhcGggR2VuZXJhdG9yIER1YmxpbiBDb3JlCitkY19jZ2dfY3JlYXRvcl9zZWQ9U1RFTVx1NTZlMlx1OTYxZgorZGNfY2dnX2lkZW50aWVyPQorZGNfY2dnX2xpY2Vuc2U9RVBMIDEuMAorZGNfY2dnX3B1Ymxpc2hlcj1FY2xpcHNlCitkY19jZ2dfc291cmNlPQorZGNfY2dnX2Rlc2M9QSBncmFwaCB3aXRoIGNvbnRyb2wgbGFiZWxzIGZvciBpbnRlcnZlbnRpb25zIGV0Yy4KK2RjX2NnZ190aXRsZT1Db250cm9sIExhYmVsIEdyYXBoIEdlbmVyYXRvcgorIAorX1VJX0NvbnRyb2xHcmFwaEdlbmVyYXRvcl92YWNjaW5hdGVGcmFjdGlvbl9mZWF0dXJlPVZhY2NpbmF0ZSBGcmFjdGlvbgorX1VJX0NvbnRyb2xHcmFwaEdlbmVyYXRvcl9pc29sYXRpb25GcmFjdGlvbl9mZWF0dXJlPUlzb2xhdGlvbiBGcmFjdGlvbgorX1VJX0NvbnRyb2xHcmFwaEdlbmVyYXRvcl92YWNjaW5hdGlvbkZyYWN0aW9uX2ZlYXR1cmU9VmFjY2luYXRpb24gRnJhY3Rpb24KK19VSV9Db250cm9sTGFiZWxWYWx1ZV90eXBlPUNvbnRyb2wgTGFiZWwgVmFsdWUKK19VSV9Db250cm9sTGFiZWxfb3JpZ2luYWxWYWx1ZV9mZWF0dXJlPVx1NTM5Zlx1NTljYlx1NTAzYworX1VJX0NvbnRyb2xMYWJlbFZhbHVlX3ZhY2NpbmF0aW9uc19mZWF0dXJlPVZhY2NpbmF0aW9ucworX1VJX0NvbnRyb2xMYWJlbFZhbHVlX2lzb2xhdGlvbnNfZmVhdHVyZT1Jc29sYXRpb25zCitfVUlfU3RhbmRhcmRDb250cm9sTGFiZWxfcG9wdWxhdGlvbklkZW50aWZpZXJfZmVhdHVyZT1cdTc5Y2RcdTdmYTRcdTY4MDdcdThiYzZcdTdiMjYKK19VSV9Db250cm9sR3JhcGhHZW5lcmF0b3JfcG9wdWxhdGlvbklkZW50aWZpZXJfZmVhdHVyZT1cdTc5Y2RcdTdmYTRcdTY4MDdcdThiYzZcdTdiMjYKK19VSV9Db250cm9sR3JhcGhHZW5lcmF0b3JfbG9jYXRpb25fZmVhdHVyZT1cdTU3MzBcdTcwYjkKK19VSV9TdGFuZGFyZENvbnRyb2xMYWJlbFZhbHVlX3R5cGU9U3RhbmRhcmQgQ29udHJvbCBMYWJlbCBWYWx1ZQorX1VJX1N0YW5kYXJkQ29udHJvbExhYmVsVmFsdWVfdmFjY2luYXRpb25zX2ZlYXR1cmU9VmFjY2luYXRpb25zCitfVUlfU3RhbmRhcmRDb250cm9sTGFiZWxWYWx1ZV9pc29sYXRpb25zX2ZlYXR1cmU9SXNvbGF0aW9ucworX1VJX0ludGVydmVudGlvbkxhYmVsX3R5cGU9SW50ZXJ2ZW50aW9uIExhYmVsCitfVUlfU3RhbmRhcmRJbnRlcnZlbnRpb25MYWJlbF90eXBlPVN0YW5kYXJkIEludGVydmVudGlvbiBMYWJlbAorX1VJX0ludGVydmVudGlvbkxhYmVsVmFsdWVfdHlwZT1JbnRlcnZlbnRpb24gTGFiZWwgVmFsdWUKK19VSV9TdGFuZGFyZEludGVydmVudGlvbkxhYmVsVmFsdWVfdHlwZT1TdGFuZGFyZCBJbnRlcnZlbnRpb24gTGFiZWwgVmFsdWUKK19VSV9TdGFuZGFyZEludGVydmVudGlvbkxhYmVsX3BvcHVsYXRpb25JZGVudGlmaWVyX2ZlYXR1cmU9XHU3OWNkXHU3ZmE0XHU2ODA3XHU4YmM2XHU3YjI2CitfVUlfU3RhbmRhcmRJbnRlcnZlbnRpb25MYWJlbFZhbHVlX3ZhY2NpbmF0aW9uc19mZWF0dXJlPVZhY2NpbmF0aW9ucworX1VJX1N0YW5kYXJkSW50ZXJ2ZW50aW9uTGFiZWxWYWx1ZV9pc29sYXRpb25zX2ZlYXR1cmU9SXNvbGF0aW9ucwpkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmludGVydmVudGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vaW50ZXJ2ZW50aW9ucy9Db250cm9sR3JhcGhHZW5lcmF0b3IuamF2YSBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcnZlbnRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2ludGVydmVudGlvbnMvQ29udHJvbEdyYXBoR2VuZXJhdG9yLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzU1YzIxZQotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcnZlbnRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2ludGVydmVudGlvbnMvQ29udHJvbEdyYXBoR2VuZXJhdG9yLmphdmEKQEAgLTAsMCArMSwxNDggQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcnZlbnRpb25zOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAKKyAqIENvcHlyaWdodCAoYykgMjAxMSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4gCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIAorICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wIAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQgCisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbCAKKyAqIAorICogQ29udHJpYnV0b3JzOiAKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5VUkk7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3Q7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaGdlbmVyYXRvcnMuR3JhcGhHZW5lcmF0b3I7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIEEgcmVwcmVzZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPkNvbnRyb2wgR3JhcGggR2VuZXJhdG9yPC9iPjwvZW0+Jy4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICoKKyAqIDxwPgorICogVGhlIGZvbGxvd2luZyBmZWF0dXJlcyBhcmUgc3VwcG9ydGVkOgorICogPHVsPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uaW50ZXJ2ZW50aW9ucy5Db250cm9sR3JhcGhHZW5lcmF0b3IjZ2V0VmFjY2luYXRpb25GcmFjdGlvbiA8ZW0+VmFjY2luYXRpb24gRnJhY3Rpb248L2VtPn08L2xpPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uaW50ZXJ2ZW50aW9ucy5Db250cm9sR3JhcGhHZW5lcmF0b3IjZ2V0SXNvbGF0aW9uRnJhY3Rpb24gPGVtPklzb2xhdGlvbiBGcmFjdGlvbjwvZW0+fTwvbGk+CisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcnZlbnRpb25zLkNvbnRyb2xHcmFwaEdlbmVyYXRvciNnZXRQb3B1bGF0aW9uSWRlbnRpZmllciA8ZW0+UG9wdWxhdGlvbiBJZGVudGlmaWVyPC9lbT59PC9saT4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmludGVydmVudGlvbnMuQ29udHJvbEdyYXBoR2VuZXJhdG9yI2dldExvY2F0aW9uIDxlbT5Mb2NhdGlvbjwvZW0+fTwvbGk+CisgKiA8L3VsPgorICogPC9wPgorICoKKyAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcnZlbnRpb25zLkludGVydmVudGlvbnNQYWNrYWdlI2dldENvbnRyb2xHcmFwaEdlbmVyYXRvcigpCisgKiBAbW9kZWwKKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGludGVyZmFjZSBDb250cm9sR3JhcGhHZW5lcmF0b3IgZXh0ZW5kcyBHcmFwaEdlbmVyYXRvciB7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5WYWNjaW5hdGlvbiBGcmFjdGlvbjwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIGlzIDxjb2RlPiIwLjAiPC9jb2RlPi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDxwPgorCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPlZhY2NpbmF0aW9uIEZyYWN0aW9uPC9lbT4nIGF0dHJpYnV0ZSBpc24ndCBjbGVhciwKKwkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uCisJICogPC9wPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPlZhY2NpbmF0aW9uIEZyYWN0aW9uPC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiBAc2VlICNzZXRWYWNjaW5hdGlvbkZyYWN0aW9uKGRvdWJsZSkKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uaW50ZXJ2ZW50aW9ucy5JbnRlcnZlbnRpb25zUGFja2FnZSNnZXRDb250cm9sR3JhcGhHZW5lcmF0b3JfVmFjY2luYXRpb25GcmFjdGlvbigpCisJICogQG1vZGVsIGRlZmF1bHQ9IjAuMCIKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJZG91YmxlIGdldFZhY2NpbmF0aW9uRnJhY3Rpb24oKTsKKworCS8qKgorCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uaW50ZXJ2ZW50aW9ucy5Db250cm9sR3JhcGhHZW5lcmF0b3IjZ2V0VmFjY2luYXRpb25GcmFjdGlvbiA8ZW0+VmFjY2luYXRpb24gRnJhY3Rpb248L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPlZhY2NpbmF0aW9uIEZyYWN0aW9uPC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiBAc2VlICNnZXRWYWNjaW5hdGlvbkZyYWN0aW9uKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJdm9pZCBzZXRWYWNjaW5hdGlvbkZyYWN0aW9uKGRvdWJsZSB2YWx1ZSk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5Jc29sYXRpb24gRnJhY3Rpb248L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyA8Y29kZT4iMC4wIjwvY29kZT4uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8cD4KKwkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5Jc29sYXRpb24gRnJhY3Rpb248L2VtPicgYXR0cmlidXRlIGlzbid0IGNsZWFyLAorCSAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4KKwkgKiA8L3A+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+SXNvbGF0aW9uIEZyYWN0aW9uPC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiBAc2VlICNzZXRJc29sYXRpb25GcmFjdGlvbihkb3VibGUpCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmludGVydmVudGlvbnMuSW50ZXJ2ZW50aW9uc1BhY2thZ2UjZ2V0Q29udHJvbEdyYXBoR2VuZXJhdG9yX0lzb2xhdGlvbkZyYWN0aW9uKCkKKwkgKiBAbW9kZWwgZGVmYXVsdD0iMC4wIgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlkb3VibGUgZ2V0SXNvbGF0aW9uRnJhY3Rpb24oKTsKKworCS8qKgorCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uaW50ZXJ2ZW50aW9ucy5Db250cm9sR3JhcGhHZW5lcmF0b3IjZ2V0SXNvbGF0aW9uRnJhY3Rpb24gPGVtPklzb2xhdGlvbiBGcmFjdGlvbjwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+SXNvbGF0aW9uIEZyYWN0aW9uPC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiBAc2VlICNnZXRJc29sYXRpb25GcmFjdGlvbigpCisJICogQGdlbmVyYXRlZAorCSAqLworCXZvaWQgc2V0SXNvbGF0aW9uRnJhY3Rpb24oZG91YmxlIHZhbHVlKTsKKwkKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5Qb3B1bGF0aW9uIElkZW50aWZpZXI8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyA8Y29kZT4iaHVtYW4iPC9jb2RlPi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDxwPgorCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPlBvcHVsYXRpb24gSWRlbnRpZmllcjwvZW0+JyBhdHRyaWJ1dGUgaXNuJ3QgY2xlYXIsCisJICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLgorCSAqIDwvcD4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5Qb3B1bGF0aW9uIElkZW50aWZpZXI8L2VtPicgYXR0cmlidXRlLgorCSAqIEBzZWUgI3NldFBvcHVsYXRpb25JZGVudGlmaWVyKFN0cmluZykKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uaW50ZXJ2ZW50aW9ucy5JbnRlcnZlbnRpb25zUGFja2FnZSNnZXRDb250cm9sR3JhcGhHZW5lcmF0b3JfUG9wdWxhdGlvbklkZW50aWZpZXIoKQorCSAqIEBtb2RlbCBkZWZhdWx0PSJodW1hbiIKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJU3RyaW5nIGdldFBvcHVsYXRpb25JZGVudGlmaWVyKCk7CisKKwkvKioKKwkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmludGVydmVudGlvbnMuQ29udHJvbEdyYXBoR2VuZXJhdG9yI2dldFBvcHVsYXRpb25JZGVudGlmaWVyIDxlbT5Qb3B1bGF0aW9uIElkZW50aWZpZXI8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPlBvcHVsYXRpb24gSWRlbnRpZmllcjwvZW0+JyBhdHRyaWJ1dGUuCisJICogQHNlZSAjZ2V0UG9wdWxhdGlvbklkZW50aWZpZXIoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwl2b2lkIHNldFBvcHVsYXRpb25JZGVudGlmaWVyKFN0cmluZyB2YWx1ZSk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5Mb2NhdGlvbjwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPHA+CisJICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+TG9jYXRpb248L2VtPicgYXR0cmlidXRlIGlzbid0IGNsZWFyLAorCSAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4KKwkgKiA8L3A+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+TG9jYXRpb248L2VtPicgYXR0cmlidXRlLgorCSAqIEBzZWUgI3NldExvY2F0aW9uKFVSSSkKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uaW50ZXJ2ZW50aW9ucy5JbnRlcnZlbnRpb25zUGFja2FnZSNnZXRDb250cm9sR3JhcGhHZW5lcmF0b3JfTG9jYXRpb24oKQorCSAqIEBtb2RlbCBkYXRhVHlwZT0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5VUkkiCisJICogQGdlbmVyYXRlZAorCSAqLworCVVSSSBnZXRMb2NhdGlvbigpOworCisJLyoqCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcnZlbnRpb25zLkNvbnRyb2xHcmFwaEdlbmVyYXRvciNnZXRMb2NhdGlvbiA8ZW0+TG9jYXRpb248L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPkxvY2F0aW9uPC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiBAc2VlICNnZXRMb2NhdGlvbigpCisJICogQGdlbmVyYXRlZAorCSAqLworCXZvaWQgc2V0TG9jYXRpb24oVVJJIHZhbHVlKTsKKworCXB1YmxpYyB2b2lkIHNldFByb2plY3QoSVByb2plY3QgcCApOworCQorfSAvLyBDb250cm9sR3JhcGhHZW5lcmF0b3IKZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcnZlbnRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2ludGVydmVudGlvbnMvRGlzZWFzZVN0YXRlVGVzdC5qYXZhIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmludGVydmVudGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vaW50ZXJ2ZW50aW9ucy9EaXNlYXNlU3RhdGVUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzgzMWZkZgotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcnZlbnRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2ludGVydmVudGlvbnMvRGlzZWFzZVN0YXRlVGVzdC5qYXZhCkBAIC0wLDAgKzEsMTk4IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uaW50ZXJ2ZW50aW9uczsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogCisgKiBDb3B5cmlnaHQgKGMpIDIwMTEgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuIAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyAKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0IAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwgCisgKiAKKyAqIENvbnRyaWJ1dG9yczogCisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuVVJJOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUuVGVzdDsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogQSByZXByZXNlbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+RGlzZWFzZSBTdGF0ZSBUZXN0PC9iPjwvZW0+Jy4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICoKKyAqIDxwPgorICogVGhlIGZvbGxvd2luZyBmZWF0dXJlcyBhcmUgc3VwcG9ydGVkOgorICogPHVsPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uaW50ZXJ2ZW50aW9ucy5EaXNlYXNlU3RhdGVUZXN0I2dldERpc2Vhc2VOYW1lIDxlbT5EaXNlYXNlIE5hbWU8L2VtPn08L2xpPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uaW50ZXJ2ZW50aW9ucy5EaXNlYXNlU3RhdGVUZXN0I2dldFRhcmdldFVSSSA8ZW0+VGFyZ2V0IFVSSTwvZW0+fTwvbGk+CisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcnZlbnRpb25zLkRpc2Vhc2VTdGF0ZVRlc3QjZ2V0U3RhdGUgPGVtPlN0YXRlPC9lbT59PC9saT4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmludGVydmVudGlvbnMuRGlzZWFzZVN0YXRlVGVzdCNnZXRUaHJlc2hvbGQgPGVtPlRocmVzaG9sZDwvZW0+fTwvbGk+CisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcnZlbnRpb25zLkRpc2Vhc2VTdGF0ZVRlc3QjZ2V0UHJlZGljYXRlIDxlbT5QcmVkaWNhdGU8L2VtPn08L2xpPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uaW50ZXJ2ZW50aW9ucy5EaXNlYXNlU3RhdGVUZXN0I2dldFBvcHVsYXRpb25JZGVudGlmaWVyIDxlbT5Qb3B1bGF0aW9uIElkZW50aWZpZXI8L2VtPn08L2xpPgorICogPC91bD4KKyAqIDwvcD4KKyAqCisgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uaW50ZXJ2ZW50aW9ucy5JbnRlcnZlbnRpb25zUGFja2FnZSNnZXREaXNlYXNlU3RhdGVUZXN0KCkKKyAqIEBtb2RlbAorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgaW50ZXJmYWNlIERpc2Vhc2VTdGF0ZVRlc3QgZXh0ZW5kcyBUZXN0IHsKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5EaXNlYXNlIE5hbWU8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDxwPgorCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPkRpc2Vhc2UgTmFtZTwvZW0+JyBhdHRyaWJ1dGUgaXNuJ3QgY2xlYXIsCisJICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLgorCSAqIDwvcD4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5EaXNlYXNlIE5hbWU8L2VtPicgYXR0cmlidXRlLgorCSAqIEBzZWUgI3NldERpc2Vhc2VOYW1lKFN0cmluZykKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uaW50ZXJ2ZW50aW9ucy5JbnRlcnZlbnRpb25zUGFja2FnZSNnZXREaXNlYXNlU3RhdGVUZXN0X0Rpc2Vhc2VOYW1lKCkKKwkgKiBAbW9kZWwKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJU3RyaW5nIGdldERpc2Vhc2VOYW1lKCk7CisKKwkvKioKKwkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmludGVydmVudGlvbnMuRGlzZWFzZVN0YXRlVGVzdCNnZXREaXNlYXNlTmFtZSA8ZW0+RGlzZWFzZSBOYW1lPC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5EaXNlYXNlIE5hbWU8L2VtPicgYXR0cmlidXRlLgorCSAqIEBzZWUgI2dldERpc2Vhc2VOYW1lKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJdm9pZCBzZXREaXNlYXNlTmFtZShTdHJpbmcgdmFsdWUpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+VGFyZ2V0IFVSSTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPHA+CisJICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+VGFyZ2V0IFVSSTwvZW0+JyBhdHRyaWJ1dGUgaXNuJ3QgY2xlYXIsCisJICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLgorCSAqIDwvcD4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5UYXJnZXQgVVJJPC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiBAc2VlICNzZXRUYXJnZXRVUkkoVVJJKQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcnZlbnRpb25zLkludGVydmVudGlvbnNQYWNrYWdlI2dldERpc2Vhc2VTdGF0ZVRlc3RfVGFyZ2V0VVJJKCkKKwkgKiBAbW9kZWwgZGF0YVR5cGU9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uVVJJIgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlVUkkgZ2V0VGFyZ2V0VVJJKCk7CisKKwkvKioKKwkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmludGVydmVudGlvbnMuRGlzZWFzZVN0YXRlVGVzdCNnZXRUYXJnZXRVUkkgPGVtPlRhcmdldCBVUkk8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPlRhcmdldCBVUkk8L2VtPicgYXR0cmlidXRlLgorCSAqIEBzZWUgI2dldFRhcmdldFVSSSgpCisJICogQGdlbmVyYXRlZAorCSAqLworCXZvaWQgc2V0VGFyZ2V0VVJJKFVSSSB2YWx1ZSk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5TdGF0ZTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIGlzIDxjb2RlPiJpbmNpZGVuY2UiPC9jb2RlPi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDxwPgorCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPlN0YXRlPC9lbT4nIGF0dHJpYnV0ZSBpc24ndCBjbGVhciwKKwkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uCisJICogPC9wPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPlN0YXRlPC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiBAc2VlICNzZXRTdGF0ZShTdHJpbmcpCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmludGVydmVudGlvbnMuSW50ZXJ2ZW50aW9uc1BhY2thZ2UjZ2V0RGlzZWFzZVN0YXRlVGVzdF9TdGF0ZSgpCisJICogQG1vZGVsIGRlZmF1bHQ9ImluY2lkZW5jZSIKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJU3RyaW5nIGdldFN0YXRlKCk7CisKKwkvKioKKwkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmludGVydmVudGlvbnMuRGlzZWFzZVN0YXRlVGVzdCNnZXRTdGF0ZSA8ZW0+U3RhdGU8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPlN0YXRlPC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiBAc2VlICNnZXRTdGF0ZSgpCisJICogQGdlbmVyYXRlZAorCSAqLworCXZvaWQgc2V0U3RhdGUoU3RyaW5nIHZhbHVlKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPlRocmVzaG9sZDwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIGlzIDxjb2RlPiIxMDAiPC9jb2RlPi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDxwPgorCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPlRocmVzaG9sZDwvZW0+JyBhdHRyaWJ1dGUgaXNuJ3QgY2xlYXIsCisJICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLgorCSAqIDwvcD4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5UaHJlc2hvbGQ8L2VtPicgYXR0cmlidXRlLgorCSAqIEBzZWUgI3NldFRocmVzaG9sZChkb3VibGUpCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmludGVydmVudGlvbnMuSW50ZXJ2ZW50aW9uc1BhY2thZ2UjZ2V0RGlzZWFzZVN0YXRlVGVzdF9UaHJlc2hvbGQoKQorCSAqIEBtb2RlbCBkZWZhdWx0PSIxMDAiCisJICogQGdlbmVyYXRlZAorCSAqLworCWRvdWJsZSBnZXRUaHJlc2hvbGQoKTsKKworCS8qKgorCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uaW50ZXJ2ZW50aW9ucy5EaXNlYXNlU3RhdGVUZXN0I2dldFRocmVzaG9sZCA8ZW0+VGhyZXNob2xkPC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5UaHJlc2hvbGQ8L2VtPicgYXR0cmlidXRlLgorCSAqIEBzZWUgI2dldFRocmVzaG9sZCgpCisJICogQGdlbmVyYXRlZAorCSAqLworCXZvaWQgc2V0VGhyZXNob2xkKGRvdWJsZSB2YWx1ZSk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5QcmVkaWNhdGU8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyA8Y29kZT4iPiI8L2NvZGU+LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPHA+CisJICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+UHJlZGljYXRlPC9lbT4nIGF0dHJpYnV0ZSBpc24ndCBjbGVhciwKKwkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uCisJICogPC9wPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPlByZWRpY2F0ZTwvZW0+JyBhdHRyaWJ1dGUuCisJICogQHNlZSAjc2V0UHJlZGljYXRlKFN0cmluZykKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uaW50ZXJ2ZW50aW9ucy5JbnRlcnZlbnRpb25zUGFja2FnZSNnZXREaXNlYXNlU3RhdGVUZXN0X1ByZWRpY2F0ZSgpCisJICogQG1vZGVsIGRlZmF1bHQ9Ij4iCisJICogQGdlbmVyYXRlZAorCSAqLworCVN0cmluZyBnZXRQcmVkaWNhdGUoKTsKKworCS8qKgorCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uaW50ZXJ2ZW50aW9ucy5EaXNlYXNlU3RhdGVUZXN0I2dldFByZWRpY2F0ZSA8ZW0+UHJlZGljYXRlPC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5QcmVkaWNhdGU8L2VtPicgYXR0cmlidXRlLgorCSAqIEBzZWUgI2dldFByZWRpY2F0ZSgpCisJICogQGdlbmVyYXRlZAorCSAqLworCXZvaWQgc2V0UHJlZGljYXRlKFN0cmluZyB2YWx1ZSk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5Qb3B1bGF0aW9uIElkZW50aWZpZXI8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDxwPgorCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPlBvcHVsYXRpb24gSWRlbnRpZmllcjwvZW0+JyBhdHRyaWJ1dGUgaXNuJ3QgY2xlYXIsCisJICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLgorCSAqIDwvcD4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5Qb3B1bGF0aW9uIElkZW50aWZpZXI8L2VtPicgYXR0cmlidXRlLgorCSAqIEBzZWUgI3NldFBvcHVsYXRpb25JZGVudGlmaWVyKFN0cmluZykKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uaW50ZXJ2ZW50aW9ucy5JbnRlcnZlbnRpb25zUGFja2FnZSNnZXREaXNlYXNlU3RhdGVUZXN0X1BvcHVsYXRpb25JZGVudGlmaWVyKCkKKwkgKiBAbW9kZWwKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJU3RyaW5nIGdldFBvcHVsYXRpb25JZGVudGlmaWVyKCk7CisKKwkvKioKKwkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmludGVydmVudGlvbnMuRGlzZWFzZVN0YXRlVGVzdCNnZXRQb3B1bGF0aW9uSWRlbnRpZmllciA8ZW0+UG9wdWxhdGlvbiBJZGVudGlmaWVyPC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5Qb3B1bGF0aW9uIElkZW50aWZpZXI8L2VtPicgYXR0cmlidXRlLgorCSAqIEBzZWUgI2dldFBvcHVsYXRpb25JZGVudGlmaWVyKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJdm9pZCBzZXRQb3B1bGF0aW9uSWRlbnRpZmllcihTdHJpbmcgdmFsdWUpOworCit9IC8vIERpc2Vhc2VTdGF0ZVRlc3QKZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcnZlbnRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2ludGVydmVudGlvbnMvSW50ZXJ2ZW50aW9uTGFiZWwuamF2YSBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcnZlbnRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2ludGVydmVudGlvbnMvSW50ZXJ2ZW50aW9uTGFiZWwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYTM1NWJiCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmludGVydmVudGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vaW50ZXJ2ZW50aW9ucy9JbnRlcnZlbnRpb25MYWJlbC5qYXZhCkBAIC0wLDAgKzEsMjcgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcnZlbnRpb25zOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAKKyAqIENvcHlyaWdodCAoYykgMjAxMSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4gCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIAorICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wIAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQgCisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbCAKKyAqIAorICogQ29udHJpYnV0b3JzOiAKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5TdGF0aWNOb2RlTGFiZWw7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIEEgcmVwcmVzZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPkludGVydmVudGlvbiBMYWJlbDwvYj48L2VtPicuCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqCisgKgorICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmludGVydmVudGlvbnMuSW50ZXJ2ZW50aW9uc1BhY2thZ2UjZ2V0SW50ZXJ2ZW50aW9uTGFiZWwoKQorICogQG1vZGVsIGFic3RyYWN0PSJ0cnVlIgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgaW50ZXJmYWNlIEludGVydmVudGlvbkxhYmVsIGV4dGVuZHMgU3RhdGljTm9kZUxhYmVsIHsKK30gLy8gSW50ZXJ2ZW50aW9uTGFiZWwKZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcnZlbnRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2ludGVydmVudGlvbnMvSW50ZXJ2ZW50aW9uTGFiZWxWYWx1ZS5qYXZhIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmludGVydmVudGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vaW50ZXJ2ZW50aW9ucy9JbnRlcnZlbnRpb25MYWJlbFZhbHVlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDk3M2M3YgotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcnZlbnRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2ludGVydmVudGlvbnMvSW50ZXJ2ZW50aW9uTGFiZWxWYWx1ZS5qYXZhCkBAIC0wLDAgKzEsMjcgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcnZlbnRpb25zOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAKKyAqIENvcHlyaWdodCAoYykgMjAxMSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4gCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIAorICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wIAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQgCisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbCAKKyAqIAorICogQ29udHJpYnV0b3JzOiAKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5MYWJlbFZhbHVlOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiBBIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5JbnRlcnZlbnRpb24gTGFiZWwgVmFsdWU8L2I+PC9lbT4nLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKgorICoKKyAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcnZlbnRpb25zLkludGVydmVudGlvbnNQYWNrYWdlI2dldEludGVydmVudGlvbkxhYmVsVmFsdWUoKQorICogQG1vZGVsIGFic3RyYWN0PSJ0cnVlIgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgaW50ZXJmYWNlIEludGVydmVudGlvbkxhYmVsVmFsdWUgZXh0ZW5kcyBMYWJlbFZhbHVlIHsKK30gLy8gSW50ZXJ2ZW50aW9uTGFiZWxWYWx1ZQpkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmludGVydmVudGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vaW50ZXJ2ZW50aW9ucy9JbnRlcnZlbnRpb25zRmFjdG9yeS5qYXZhIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmludGVydmVudGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vaW50ZXJ2ZW50aW9ucy9JbnRlcnZlbnRpb25zRmFjdG9yeS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY2OTI2MzcKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uaW50ZXJ2ZW50aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9pbnRlcnZlbnRpb25zL0ludGVydmVudGlvbnNGYWN0b3J5LmphdmEKQEAgLTAsMCArMSw2OSBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmludGVydmVudGlvbnM7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIAorICogQ29weXJpZ2h0IChjKSAyMDExIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiAKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdCAKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sIAorICogCisgKiBDb250cmlidXRvcnM6IAorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiAKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVGYWN0b3J5OworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiBUaGUgPGI+RmFjdG9yeTwvYj4gZm9yIHRoZSBtb2RlbC4KKyAqIEl0IHByb3ZpZGVzIGEgY3JlYXRlIG1ldGhvZCBmb3IgZWFjaCBub24tYWJzdHJhY3QgY2xhc3Mgb2YgdGhlIG1vZGVsLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uaW50ZXJ2ZW50aW9ucy5JbnRlcnZlbnRpb25zUGFja2FnZQorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgaW50ZXJmYWNlIEludGVydmVudGlvbnNGYWN0b3J5IGV4dGVuZHMgRUZhY3RvcnkgeworCS8qKgorCSAqIFRoZSBzaW5nbGV0b24gaW5zdGFuY2Ugb2YgdGhlIGZhY3RvcnkuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJSW50ZXJ2ZW50aW9uc0ZhY3RvcnkgZUlOU1RBTkNFID0gb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcnZlbnRpb25zLmltcGwuSW50ZXJ2ZW50aW9uc0ZhY3RvcnlJbXBsLmluaXQoKTsKKworCS8qKgorCSAqIFJldHVybnMgYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+U3RhbmRhcmQgSW50ZXJ2ZW50aW9uIExhYmVsPC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiBhIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5TdGFuZGFyZCBJbnRlcnZlbnRpb24gTGFiZWw8L2VtPicuCisJICogQGdlbmVyYXRlZAorCSAqLworCVN0YW5kYXJkSW50ZXJ2ZW50aW9uTGFiZWwgY3JlYXRlU3RhbmRhcmRJbnRlcnZlbnRpb25MYWJlbCgpOworCisJLyoqCisJICogUmV0dXJucyBhIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5Db250cm9sIEdyYXBoIEdlbmVyYXRvcjwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+Q29udHJvbCBHcmFwaCBHZW5lcmF0b3I8L2VtPicuCisJICogQGdlbmVyYXRlZAorCSAqLworCUNvbnRyb2xHcmFwaEdlbmVyYXRvciBjcmVhdGVDb250cm9sR3JhcGhHZW5lcmF0b3IoKTsKKworCS8qKgorCSAqIFJldHVybnMgYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+U3RhbmRhcmQgSW50ZXJ2ZW50aW9uIExhYmVsIFZhbHVlPC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiBhIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5TdGFuZGFyZCBJbnRlcnZlbnRpb24gTGFiZWwgVmFsdWU8L2VtPicuCisJICogQGdlbmVyYXRlZAorCSAqLworCVN0YW5kYXJkSW50ZXJ2ZW50aW9uTGFiZWxWYWx1ZSBjcmVhdGVTdGFuZGFyZEludGVydmVudGlvbkxhYmVsVmFsdWUoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIHBhY2thZ2Ugc3VwcG9ydGVkIGJ5IHRoaXMgZmFjdG9yeS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIHBhY2thZ2Ugc3VwcG9ydGVkIGJ5IHRoaXMgZmFjdG9yeS4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJSW50ZXJ2ZW50aW9uc1BhY2thZ2UgZ2V0SW50ZXJ2ZW50aW9uc1BhY2thZ2UoKTsKKworfSAvL0ludGVydmVudGlvbnNGYWN0b3J5CmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uaW50ZXJ2ZW50aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9pbnRlcnZlbnRpb25zL0ludGVydmVudGlvbnNQYWNrYWdlLmphdmEgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uaW50ZXJ2ZW50aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9pbnRlcnZlbnRpb25zL0ludGVydmVudGlvbnNQYWNrYWdlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGMyZTFhNQotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcnZlbnRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2ludGVydmVudGlvbnMvSW50ZXJ2ZW50aW9uc1BhY2thZ2UuamF2YQpAQCAtMCwwICsxLDYzOSBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmludGVydmVudGlvbnM7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIAorICogQ29weXJpZ2h0IChjKSAyMDExIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiAKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdCAKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sIAorICogCisgKiBDb250cmlidXRvcnM6IAorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiAKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVBdHRyaWJ1dGU7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzczsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRVBhY2thZ2U7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguR3JhcGhQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhnZW5lcmF0b3JzLkdyYXBoZ2VuZXJhdG9yc1BhY2thZ2U7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIFRoZSA8Yj5QYWNrYWdlPC9iPiBmb3IgdGhlIG1vZGVsLgorICogSXQgY29udGFpbnMgYWNjZXNzb3JzIGZvciB0aGUgbWV0YSBvYmplY3RzIHRvIHJlcHJlc2VudAorICogPHVsPgorICogICA8bGk+ZWFjaCBjbGFzcyw8L2xpPgorICogICA8bGk+ZWFjaCBmZWF0dXJlIG9mIGVhY2ggY2xhc3MsPC9saT4KKyAqICAgPGxpPmVhY2ggZW51bSw8L2xpPgorICogICA8bGk+YW5kIGVhY2ggZGF0YSB0eXBlPC9saT4KKyAqIDwvdWw+CisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcnZlbnRpb25zLkludGVydmVudGlvbnNGYWN0b3J5CisgKiBAbW9kZWwga2luZD0icGFja2FnZSIKKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGludGVyZmFjZSBJbnRlcnZlbnRpb25zUGFja2FnZSBleHRlbmRzIEVQYWNrYWdlIHsKKwkvKioKKwkgKiBUaGUgcGFja2FnZSBuYW1lLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCVN0cmluZyBlTkFNRSA9ICJpbnRlcnZlbnRpb25zIjsKKworCS8qKgorCSAqIFRoZSBwYWNrYWdlIG5hbWVzcGFjZSBVUkkuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJU3RyaW5nIGVOU19VUkkgPSAiaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2ludGVydmVudGlvbnMuZWNvcmUiOworCisJLyoqCisJICogVGhlIHBhY2thZ2UgbmFtZXNwYWNlIG5hbWUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJU3RyaW5nIGVOU19QUkVGSVggPSAib3JnLmVjbGlwc2Uuc3RlbS5pbnRlcnZlbnRpb25zIjsKKworCS8qKgorCSAqIFRoZSBzaW5nbGV0b24gaW5zdGFuY2Ugb2YgdGhlIHBhY2thZ2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJSW50ZXJ2ZW50aW9uc1BhY2thZ2UgZUlOU1RBTkNFID0gb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcnZlbnRpb25zLmltcGwuSW50ZXJ2ZW50aW9uc1BhY2thZ2VJbXBsLmluaXQoKTsKKworCS8qKgorCSAqIFRoZSBtZXRhIG9iamVjdCBpZCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcnZlbnRpb25zLmltcGwuSW50ZXJ2ZW50aW9uTGFiZWxJbXBsIDxlbT5JbnRlcnZlbnRpb24gTGFiZWw8L2VtPn0nIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmludGVydmVudGlvbnMuaW1wbC5JbnRlcnZlbnRpb25MYWJlbEltcGwKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uaW50ZXJ2ZW50aW9ucy5pbXBsLkludGVydmVudGlvbnNQYWNrYWdlSW1wbCNnZXRJbnRlcnZlbnRpb25MYWJlbCgpCisJICogQGdlbmVyYXRlZAorCSAqLworCWludCBJTlRFUlZFTlRJT05fTEFCRUwgPSAwOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlVSSTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IElOVEVSVkVOVElPTl9MQUJFTF9fVVJJID0gR3JhcGhQYWNrYWdlLlNUQVRJQ19OT0RFX0xBQkVMX19VUkk7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VHlwZSBVUkk8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBJTlRFUlZFTlRJT05fTEFCRUxfX1RZUEVfVVJJID0gR3JhcGhQYWNrYWdlLlNUQVRJQ19OT0RFX0xBQkVMX19UWVBFX1VSSTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5EdWJsaW4gQ29yZTwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IElOVEVSVkVOVElPTl9MQUJFTF9fRFVCTElOX0NPUkUgPSBHcmFwaFBhY2thZ2UuU1RBVElDX05PREVfTEFCRUxfX0RVQkxJTl9DT1JFOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlVSSSBPZiBJZGVudGlmaWFibGUgVG8gQmUgTGFiZWxlZDwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IElOVEVSVkVOVElPTl9MQUJFTF9fVVJJX09GX0lERU5USUZJQUJMRV9UT19CRV9MQUJFTEVEID0gR3JhcGhQYWNrYWdlLlNUQVRJQ19OT0RFX0xBQkVMX19VUklfT0ZfSURFTlRJRklBQkxFX1RPX0JFX0xBQkVMRUQ7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+Q3VycmVudCBWYWx1ZTwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IElOVEVSVkVOVElPTl9MQUJFTF9fQ1VSUkVOVF9WQUxVRSA9IEdyYXBoUGFja2FnZS5TVEFUSUNfTk9ERV9MQUJFTF9fQ1VSUkVOVF9WQUxVRTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5JZGVudGlmaWFibGU8L2I+PC9lbT4nIHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBJTlRFUlZFTlRJT05fTEFCRUxfX0lERU5USUZJQUJMRSA9IEdyYXBoUGFja2FnZS5TVEFUSUNfTk9ERV9MQUJFTF9fSURFTlRJRklBQkxFOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPk5vZGU8L2I+PC9lbT4nIHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBJTlRFUlZFTlRJT05fTEFCRUxfX05PREUgPSBHcmFwaFBhY2thZ2UuU1RBVElDX05PREVfTEFCRUxfX05PREU7CisKKwkvKioKKwkgKiBUaGUgbnVtYmVyIG9mIHN0cnVjdHVyYWwgZmVhdHVyZXMgb2YgdGhlICc8ZW0+SW50ZXJ2ZW50aW9uIExhYmVsPC9lbT4nIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IElOVEVSVkVOVElPTl9MQUJFTF9GRUFUVVJFX0NPVU5UID0gR3JhcGhQYWNrYWdlLlNUQVRJQ19OT0RFX0xBQkVMX0ZFQVRVUkVfQ09VTlQgKyAwOworCisJLyoqCisJICogVGhlIG1ldGEgb2JqZWN0IGlkIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmludGVydmVudGlvbnMuaW1wbC5TdGFuZGFyZEludGVydmVudGlvbkxhYmVsSW1wbCA8ZW0+U3RhbmRhcmQgSW50ZXJ2ZW50aW9uIExhYmVsPC9lbT59JyBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcnZlbnRpb25zLmltcGwuU3RhbmRhcmRJbnRlcnZlbnRpb25MYWJlbEltcGwKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uaW50ZXJ2ZW50aW9ucy5pbXBsLkludGVydmVudGlvbnNQYWNrYWdlSW1wbCNnZXRTdGFuZGFyZEludGVydmVudGlvbkxhYmVsKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJaW50IFNUQU5EQVJEX0lOVEVSVkVOVElPTl9MQUJFTCA9IDE7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VVJJPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU1RBTkRBUkRfSU5URVJWRU5USU9OX0xBQkVMX19VUkkgPSBJTlRFUlZFTlRJT05fTEFCRUxfX1VSSTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5UeXBlIFVSSTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNUQU5EQVJEX0lOVEVSVkVOVElPTl9MQUJFTF9fVFlQRV9VUkkgPSBJTlRFUlZFTlRJT05fTEFCRUxfX1RZUEVfVVJJOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkR1YmxpbiBDb3JlPC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU1RBTkRBUkRfSU5URVJWRU5USU9OX0xBQkVMX19EVUJMSU5fQ09SRSA9IElOVEVSVkVOVElPTl9MQUJFTF9fRFVCTElOX0NPUkU7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VVJJIE9mIElkZW50aWZpYWJsZSBUbyBCZSBMYWJlbGVkPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU1RBTkRBUkRfSU5URVJWRU5USU9OX0xBQkVMX19VUklfT0ZfSURFTlRJRklBQkxFX1RPX0JFX0xBQkVMRUQgPSBJTlRFUlZFTlRJT05fTEFCRUxfX1VSSV9PRl9JREVOVElGSUFCTEVfVE9fQkVfTEFCRUxFRDsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5DdXJyZW50IFZhbHVlPC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU1RBTkRBUkRfSU5URVJWRU5USU9OX0xBQkVMX19DVVJSRU5UX1ZBTFVFID0gSU5URVJWRU5USU9OX0xBQkVMX19DVVJSRU5UX1ZBTFVFOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPklkZW50aWZpYWJsZTwvYj48L2VtPicgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNUQU5EQVJEX0lOVEVSVkVOVElPTl9MQUJFTF9fSURFTlRJRklBQkxFID0gSU5URVJWRU5USU9OX0xBQkVMX19JREVOVElGSUFCTEU7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+Tm9kZTwvYj48L2VtPicgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNUQU5EQVJEX0lOVEVSVkVOVElPTl9MQUJFTF9fTk9ERSA9IElOVEVSVkVOVElPTl9MQUJFTF9fTk9ERTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5Qb3B1bGF0aW9uIElkZW50aWZpZXI8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTVEFOREFSRF9JTlRFUlZFTlRJT05fTEFCRUxfX1BPUFVMQVRJT05fSURFTlRJRklFUiA9IElOVEVSVkVOVElPTl9MQUJFTF9GRUFUVVJFX0NPVU5UICsgMDsKKworCS8qKgorCSAqIFRoZSBudW1iZXIgb2Ygc3RydWN0dXJhbCBmZWF0dXJlcyBvZiB0aGUgJzxlbT5TdGFuZGFyZCBJbnRlcnZlbnRpb24gTGFiZWw8L2VtPicgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU1RBTkRBUkRfSU5URVJWRU5USU9OX0xBQkVMX0ZFQVRVUkVfQ09VTlQgPSBJTlRFUlZFTlRJT05fTEFCRUxfRkVBVFVSRV9DT1VOVCArIDE7CisKKwkvKioKKwkgKiBUaGUgbWV0YSBvYmplY3QgaWQgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uaW50ZXJ2ZW50aW9ucy5pbXBsLkNvbnRyb2xHcmFwaEdlbmVyYXRvckltcGwgPGVtPkNvbnRyb2wgR3JhcGggR2VuZXJhdG9yPC9lbT59JyBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcnZlbnRpb25zLmltcGwuQ29udHJvbEdyYXBoR2VuZXJhdG9ySW1wbAorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcnZlbnRpb25zLmltcGwuSW50ZXJ2ZW50aW9uc1BhY2thZ2VJbXBsI2dldENvbnRyb2xHcmFwaEdlbmVyYXRvcigpCisJICogQGdlbmVyYXRlZAorCSAqLworCWludCBDT05UUk9MX0dSQVBIX0dFTkVSQVRPUiA9IDI7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VVJJPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgQ09OVFJPTF9HUkFQSF9HRU5FUkFUT1JfX1VSSSA9IEdyYXBoZ2VuZXJhdG9yc1BhY2thZ2UuR1JBUEhfR0VORVJBVE9SX19VUkk7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VHlwZSBVUkk8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBDT05UUk9MX0dSQVBIX0dFTkVSQVRPUl9fVFlQRV9VUkkgPSBHcmFwaGdlbmVyYXRvcnNQYWNrYWdlLkdSQVBIX0dFTkVSQVRPUl9fVFlQRV9VUkk7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RHVibGluIENvcmU8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBDT05UUk9MX0dSQVBIX0dFTkVSQVRPUl9fRFVCTElOX0NPUkUgPSBHcmFwaGdlbmVyYXRvcnNQYWNrYWdlLkdSQVBIX0dFTkVSQVRPUl9fRFVCTElOX0NPUkU7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VmFjY2luYXRpb24gRnJhY3Rpb248L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBDT05UUk9MX0dSQVBIX0dFTkVSQVRPUl9fVkFDQ0lOQVRJT05fRlJBQ1RJT04gPSBHcmFwaGdlbmVyYXRvcnNQYWNrYWdlLkdSQVBIX0dFTkVSQVRPUl9GRUFUVVJFX0NPVU5UICsgMDsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5Jc29sYXRpb24gRnJhY3Rpb248L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBDT05UUk9MX0dSQVBIX0dFTkVSQVRPUl9fSVNPTEFUSU9OX0ZSQUNUSU9OID0gR3JhcGhnZW5lcmF0b3JzUGFja2FnZS5HUkFQSF9HRU5FUkFUT1JfRkVBVFVSRV9DT1VOVCArIDE7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+UG9wdWxhdGlvbiBJZGVudGlmaWVyPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgQ09OVFJPTF9HUkFQSF9HRU5FUkFUT1JfX1BPUFVMQVRJT05fSURFTlRJRklFUiA9IEdyYXBoZ2VuZXJhdG9yc1BhY2thZ2UuR1JBUEhfR0VORVJBVE9SX0ZFQVRVUkVfQ09VTlQgKyAyOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkxvY2F0aW9uPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgQ09OVFJPTF9HUkFQSF9HRU5FUkFUT1JfX0xPQ0FUSU9OID0gR3JhcGhnZW5lcmF0b3JzUGFja2FnZS5HUkFQSF9HRU5FUkFUT1JfRkVBVFVSRV9DT1VOVCArIDM7CisKKwkvKioKKwkgKiBUaGUgbnVtYmVyIG9mIHN0cnVjdHVyYWwgZmVhdHVyZXMgb2YgdGhlICc8ZW0+Q29udHJvbCBHcmFwaCBHZW5lcmF0b3I8L2VtPicgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgQ09OVFJPTF9HUkFQSF9HRU5FUkFUT1JfRkVBVFVSRV9DT1VOVCA9IEdyYXBoZ2VuZXJhdG9yc1BhY2thZ2UuR1JBUEhfR0VORVJBVE9SX0ZFQVRVUkVfQ09VTlQgKyA0OworCisKKwkvKioKKwkgKiBUaGUgbWV0YSBvYmplY3QgaWQgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uaW50ZXJ2ZW50aW9ucy5pbXBsLkludGVydmVudGlvbkxhYmVsVmFsdWVJbXBsIDxlbT5JbnRlcnZlbnRpb24gTGFiZWwgVmFsdWU8L2VtPn0nIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmludGVydmVudGlvbnMuaW1wbC5JbnRlcnZlbnRpb25MYWJlbFZhbHVlSW1wbAorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcnZlbnRpb25zLmltcGwuSW50ZXJ2ZW50aW9uc1BhY2thZ2VJbXBsI2dldEludGVydmVudGlvbkxhYmVsVmFsdWUoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlpbnQgSU5URVJWRU5USU9OX0xBQkVMX1ZBTFVFID0gMzsKKworCS8qKgorCSAqIFRoZSBudW1iZXIgb2Ygc3RydWN0dXJhbCBmZWF0dXJlcyBvZiB0aGUgJzxlbT5JbnRlcnZlbnRpb24gTGFiZWwgVmFsdWU8L2VtPicgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgSU5URVJWRU5USU9OX0xBQkVMX1ZBTFVFX0ZFQVRVUkVfQ09VTlQgPSBHcmFwaFBhY2thZ2UuTEFCRUxfVkFMVUVfRkVBVFVSRV9DT1VOVCArIDA7CisKKwkvKioKKwkgKiBUaGUgbWV0YSBvYmplY3QgaWQgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uaW50ZXJ2ZW50aW9ucy5pbXBsLlN0YW5kYXJkSW50ZXJ2ZW50aW9uTGFiZWxWYWx1ZUltcGwgPGVtPlN0YW5kYXJkIEludGVydmVudGlvbiBMYWJlbCBWYWx1ZTwvZW0+fScgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uaW50ZXJ2ZW50aW9ucy5pbXBsLlN0YW5kYXJkSW50ZXJ2ZW50aW9uTGFiZWxWYWx1ZUltcGwKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uaW50ZXJ2ZW50aW9ucy5pbXBsLkludGVydmVudGlvbnNQYWNrYWdlSW1wbCNnZXRTdGFuZGFyZEludGVydmVudGlvbkxhYmVsVmFsdWUoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlpbnQgU1RBTkRBUkRfSU5URVJWRU5USU9OX0xBQkVMX1ZBTFVFID0gNDsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5WYWNjaW5hdGlvbnM8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTVEFOREFSRF9JTlRFUlZFTlRJT05fTEFCRUxfVkFMVUVfX1ZBQ0NJTkFUSU9OUyA9IElOVEVSVkVOVElPTl9MQUJFTF9WQUxVRV9GRUFUVVJFX0NPVU5UICsgMDsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5Jc29sYXRpb25zPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU1RBTkRBUkRfSU5URVJWRU5USU9OX0xBQkVMX1ZBTFVFX19JU09MQVRJT05TID0gSU5URVJWRU5USU9OX0xBQkVMX1ZBTFVFX0ZFQVRVUkVfQ09VTlQgKyAxOworCisJLyoqCisJICogVGhlIG51bWJlciBvZiBzdHJ1Y3R1cmFsIGZlYXR1cmVzIG9mIHRoZSAnPGVtPlN0YW5kYXJkIEludGVydmVudGlvbiBMYWJlbCBWYWx1ZTwvZW0+JyBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTVEFOREFSRF9JTlRFUlZFTlRJT05fTEFCRUxfVkFMVUVfRkVBVFVSRV9DT1VOVCA9IElOVEVSVkVOVElPTl9MQUJFTF9WQUxVRV9GRUFUVVJFX0NPVU5UICsgMjsKKworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcnZlbnRpb25zLkludGVydmVudGlvbkxhYmVsIDxlbT5JbnRlcnZlbnRpb24gTGFiZWw8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICc8ZW0+SW50ZXJ2ZW50aW9uIExhYmVsPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcnZlbnRpb25zLkludGVydmVudGlvbkxhYmVsCisJICogQGdlbmVyYXRlZAorCSAqLworCUVDbGFzcyBnZXRJbnRlcnZlbnRpb25MYWJlbCgpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcnZlbnRpb25zLlN0YW5kYXJkSW50ZXJ2ZW50aW9uTGFiZWwgPGVtPlN0YW5kYXJkIEludGVydmVudGlvbiBMYWJlbDwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJzxlbT5TdGFuZGFyZCBJbnRlcnZlbnRpb24gTGFiZWw8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmludGVydmVudGlvbnMuU3RhbmRhcmRJbnRlcnZlbnRpb25MYWJlbAorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQ2xhc3MgZ2V0U3RhbmRhcmRJbnRlcnZlbnRpb25MYWJlbCgpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmludGVydmVudGlvbnMuU3RhbmRhcmRJbnRlcnZlbnRpb25MYWJlbCNnZXRQb3B1bGF0aW9uSWRlbnRpZmllciA8ZW0+UG9wdWxhdGlvbiBJZGVudGlmaWVyPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+UG9wdWxhdGlvbiBJZGVudGlmaWVyPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcnZlbnRpb25zLlN0YW5kYXJkSW50ZXJ2ZW50aW9uTGFiZWwjZ2V0UG9wdWxhdGlvbklkZW50aWZpZXIoKQorCSAqIEBzZWUgI2dldFN0YW5kYXJkSW50ZXJ2ZW50aW9uTGFiZWwoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQXR0cmlidXRlIGdldFN0YW5kYXJkSW50ZXJ2ZW50aW9uTGFiZWxfUG9wdWxhdGlvbklkZW50aWZpZXIoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uaW50ZXJ2ZW50aW9ucy5Db250cm9sR3JhcGhHZW5lcmF0b3IgPGVtPkNvbnRyb2wgR3JhcGggR2VuZXJhdG9yPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAnPGVtPkNvbnRyb2wgR3JhcGggR2VuZXJhdG9yPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcnZlbnRpb25zLkNvbnRyb2xHcmFwaEdlbmVyYXRvcgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQ2xhc3MgZ2V0Q29udHJvbEdyYXBoR2VuZXJhdG9yKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uaW50ZXJ2ZW50aW9ucy5Db250cm9sR3JhcGhHZW5lcmF0b3IjZ2V0VmFjY2luYXRpb25GcmFjdGlvbiA8ZW0+VmFjY2luYXRpb24gRnJhY3Rpb248L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxlbT5WYWNjaW5hdGlvbiBGcmFjdGlvbjwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uaW50ZXJ2ZW50aW9ucy5Db250cm9sR3JhcGhHZW5lcmF0b3IjZ2V0VmFjY2luYXRpb25GcmFjdGlvbigpCisJICogQHNlZSAjZ2V0Q29udHJvbEdyYXBoR2VuZXJhdG9yKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUF0dHJpYnV0ZSBnZXRDb250cm9sR3JhcGhHZW5lcmF0b3JfVmFjY2luYXRpb25GcmFjdGlvbigpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmludGVydmVudGlvbnMuQ29udHJvbEdyYXBoR2VuZXJhdG9yI2dldElzb2xhdGlvbkZyYWN0aW9uIDxlbT5Jc29sYXRpb24gRnJhY3Rpb248L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxlbT5Jc29sYXRpb24gRnJhY3Rpb248L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmludGVydmVudGlvbnMuQ29udHJvbEdyYXBoR2VuZXJhdG9yI2dldElzb2xhdGlvbkZyYWN0aW9uKCkKKwkgKiBAc2VlICNnZXRDb250cm9sR3JhcGhHZW5lcmF0b3IoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQXR0cmlidXRlIGdldENvbnRyb2xHcmFwaEdlbmVyYXRvcl9Jc29sYXRpb25GcmFjdGlvbigpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmludGVydmVudGlvbnMuQ29udHJvbEdyYXBoR2VuZXJhdG9yI2dldFBvcHVsYXRpb25JZGVudGlmaWVyIDxlbT5Qb3B1bGF0aW9uIElkZW50aWZpZXI8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxlbT5Qb3B1bGF0aW9uIElkZW50aWZpZXI8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmludGVydmVudGlvbnMuQ29udHJvbEdyYXBoR2VuZXJhdG9yI2dldFBvcHVsYXRpb25JZGVudGlmaWVyKCkKKwkgKiBAc2VlICNnZXRDb250cm9sR3JhcGhHZW5lcmF0b3IoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQXR0cmlidXRlIGdldENvbnRyb2xHcmFwaEdlbmVyYXRvcl9Qb3B1bGF0aW9uSWRlbnRpZmllcigpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmludGVydmVudGlvbnMuQ29udHJvbEdyYXBoR2VuZXJhdG9yI2dldExvY2F0aW9uIDxlbT5Mb2NhdGlvbjwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPGVtPkxvY2F0aW9uPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcnZlbnRpb25zLkNvbnRyb2xHcmFwaEdlbmVyYXRvciNnZXRMb2NhdGlvbigpCisJICogQHNlZSAjZ2V0Q29udHJvbEdyYXBoR2VuZXJhdG9yKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUF0dHJpYnV0ZSBnZXRDb250cm9sR3JhcGhHZW5lcmF0b3JfTG9jYXRpb24oKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uaW50ZXJ2ZW50aW9ucy5JbnRlcnZlbnRpb25MYWJlbFZhbHVlIDxlbT5JbnRlcnZlbnRpb24gTGFiZWwgVmFsdWU8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICc8ZW0+SW50ZXJ2ZW50aW9uIExhYmVsIFZhbHVlPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcnZlbnRpb25zLkludGVydmVudGlvbkxhYmVsVmFsdWUKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUNsYXNzIGdldEludGVydmVudGlvbkxhYmVsVmFsdWUoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uaW50ZXJ2ZW50aW9ucy5TdGFuZGFyZEludGVydmVudGlvbkxhYmVsVmFsdWUgPGVtPlN0YW5kYXJkIEludGVydmVudGlvbiBMYWJlbCBWYWx1ZTwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJzxlbT5TdGFuZGFyZCBJbnRlcnZlbnRpb24gTGFiZWwgVmFsdWU8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmludGVydmVudGlvbnMuU3RhbmRhcmRJbnRlcnZlbnRpb25MYWJlbFZhbHVlCisJICogQGdlbmVyYXRlZAorCSAqLworCUVDbGFzcyBnZXRTdGFuZGFyZEludGVydmVudGlvbkxhYmVsVmFsdWUoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcnZlbnRpb25zLlN0YW5kYXJkSW50ZXJ2ZW50aW9uTGFiZWxWYWx1ZSNnZXRWYWNjaW5hdGlvbnMgPGVtPlZhY2NpbmF0aW9uczwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPGVtPlZhY2NpbmF0aW9uczwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uaW50ZXJ2ZW50aW9ucy5TdGFuZGFyZEludGVydmVudGlvbkxhYmVsVmFsdWUjZ2V0VmFjY2luYXRpb25zKCkKKwkgKiBAc2VlICNnZXRTdGFuZGFyZEludGVydmVudGlvbkxhYmVsVmFsdWUoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQXR0cmlidXRlIGdldFN0YW5kYXJkSW50ZXJ2ZW50aW9uTGFiZWxWYWx1ZV9WYWNjaW5hdGlvbnMoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcnZlbnRpb25zLlN0YW5kYXJkSW50ZXJ2ZW50aW9uTGFiZWxWYWx1ZSNnZXRJc29sYXRpb25zIDxlbT5Jc29sYXRpb25zPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+SXNvbGF0aW9uczwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uaW50ZXJ2ZW50aW9ucy5TdGFuZGFyZEludGVydmVudGlvbkxhYmVsVmFsdWUjZ2V0SXNvbGF0aW9ucygpCisJICogQHNlZSAjZ2V0U3RhbmRhcmRJbnRlcnZlbnRpb25MYWJlbFZhbHVlKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUF0dHJpYnV0ZSBnZXRTdGFuZGFyZEludGVydmVudGlvbkxhYmVsVmFsdWVfSXNvbGF0aW9ucygpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgZmFjdG9yeSB0aGF0IGNyZWF0ZXMgdGhlIGluc3RhbmNlcyBvZiB0aGUgbW9kZWwuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBmYWN0b3J5IHRoYXQgY3JlYXRlcyB0aGUgaW5zdGFuY2VzIG9mIHRoZSBtb2RlbC4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJSW50ZXJ2ZW50aW9uc0ZhY3RvcnkgZ2V0SW50ZXJ2ZW50aW9uc0ZhY3RvcnkoKTsKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogRGVmaW5lcyBsaXRlcmFscyBmb3IgdGhlIG1ldGEgb2JqZWN0cyB0aGF0IHJlcHJlc2VudAorCSAqIDx1bD4KKwkgKiAgIDxsaT5lYWNoIGNsYXNzLDwvbGk+CisJICogICA8bGk+ZWFjaCBmZWF0dXJlIG9mIGVhY2ggY2xhc3MsPC9saT4KKwkgKiAgIDxsaT5lYWNoIGVudW0sPC9saT4KKwkgKiAgIDxsaT5hbmQgZWFjaCBkYXRhIHR5cGU8L2xpPgorCSAqIDwvdWw+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCWludGVyZmFjZSBMaXRlcmFscyB7CisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcnZlbnRpb25zLmltcGwuSW50ZXJ2ZW50aW9uTGFiZWxJbXBsIDxlbT5JbnRlcnZlbnRpb24gTGFiZWw8L2VtPn0nIGNsYXNzLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmludGVydmVudGlvbnMuaW1wbC5JbnRlcnZlbnRpb25MYWJlbEltcGwKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmludGVydmVudGlvbnMuaW1wbC5JbnRlcnZlbnRpb25zUGFja2FnZUltcGwjZ2V0SW50ZXJ2ZW50aW9uTGFiZWwoKQorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQ2xhc3MgSU5URVJWRU5USU9OX0xBQkVMID0gZUlOU1RBTkNFLmdldEludGVydmVudGlvbkxhYmVsKCk7CisKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmludGVydmVudGlvbnMuaW1wbC5TdGFuZGFyZEludGVydmVudGlvbkxhYmVsSW1wbCA8ZW0+U3RhbmRhcmQgSW50ZXJ2ZW50aW9uIExhYmVsPC9lbT59JyBjbGFzcy4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcnZlbnRpb25zLmltcGwuU3RhbmRhcmRJbnRlcnZlbnRpb25MYWJlbEltcGwKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmludGVydmVudGlvbnMuaW1wbC5JbnRlcnZlbnRpb25zUGFja2FnZUltcGwjZ2V0U3RhbmRhcmRJbnRlcnZlbnRpb25MYWJlbCgpCisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVDbGFzcyBTVEFOREFSRF9JTlRFUlZFTlRJT05fTEFCRUwgPSBlSU5TVEFOQ0UuZ2V0U3RhbmRhcmRJbnRlcnZlbnRpb25MYWJlbCgpOworCisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+UG9wdWxhdGlvbiBJZGVudGlmaWVyPC9iPjwvZW0+JyBhdHRyaWJ1dGUgZmVhdHVyZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVBdHRyaWJ1dGUgU1RBTkRBUkRfSU5URVJWRU5USU9OX0xBQkVMX19QT1BVTEFUSU9OX0lERU5USUZJRVIgPSBlSU5TVEFOQ0UuZ2V0U3RhbmRhcmRJbnRlcnZlbnRpb25MYWJlbF9Qb3B1bGF0aW9uSWRlbnRpZmllcigpOworCisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcnZlbnRpb25zLmltcGwuQ29udHJvbEdyYXBoR2VuZXJhdG9ySW1wbCA8ZW0+Q29udHJvbCBHcmFwaCBHZW5lcmF0b3I8L2VtPn0nIGNsYXNzLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmludGVydmVudGlvbnMuaW1wbC5Db250cm9sR3JhcGhHZW5lcmF0b3JJbXBsCisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcnZlbnRpb25zLmltcGwuSW50ZXJ2ZW50aW9uc1BhY2thZ2VJbXBsI2dldENvbnRyb2xHcmFwaEdlbmVyYXRvcigpCisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVDbGFzcyBDT05UUk9MX0dSQVBIX0dFTkVSQVRPUiA9IGVJTlNUQU5DRS5nZXRDb250cm9sR3JhcGhHZW5lcmF0b3IoKTsKKworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPlZhY2NpbmF0aW9uIEZyYWN0aW9uPC9iPjwvZW0+JyBhdHRyaWJ1dGUgZmVhdHVyZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVBdHRyaWJ1dGUgQ09OVFJPTF9HUkFQSF9HRU5FUkFUT1JfX1ZBQ0NJTkFUSU9OX0ZSQUNUSU9OID0gZUlOU1RBTkNFLmdldENvbnRyb2xHcmFwaEdlbmVyYXRvcl9WYWNjaW5hdGlvbkZyYWN0aW9uKCk7CisKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5Jc29sYXRpb24gRnJhY3Rpb248L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUF0dHJpYnV0ZSBDT05UUk9MX0dSQVBIX0dFTkVSQVRPUl9fSVNPTEFUSU9OX0ZSQUNUSU9OID0gZUlOU1RBTkNFLmdldENvbnRyb2xHcmFwaEdlbmVyYXRvcl9Jc29sYXRpb25GcmFjdGlvbigpOworCisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+UG9wdWxhdGlvbiBJZGVudGlmaWVyPC9iPjwvZW0+JyBhdHRyaWJ1dGUgZmVhdHVyZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVBdHRyaWJ1dGUgQ09OVFJPTF9HUkFQSF9HRU5FUkFUT1JfX1BPUFVMQVRJT05fSURFTlRJRklFUiA9IGVJTlNUQU5DRS5nZXRDb250cm9sR3JhcGhHZW5lcmF0b3JfUG9wdWxhdGlvbklkZW50aWZpZXIoKTsKKworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPkxvY2F0aW9uPC9iPjwvZW0+JyBhdHRyaWJ1dGUgZmVhdHVyZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVBdHRyaWJ1dGUgQ09OVFJPTF9HUkFQSF9HRU5FUkFUT1JfX0xPQ0FUSU9OID0gZUlOU1RBTkNFLmdldENvbnRyb2xHcmFwaEdlbmVyYXRvcl9Mb2NhdGlvbigpOworCisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcnZlbnRpb25zLmltcGwuSW50ZXJ2ZW50aW9uTGFiZWxWYWx1ZUltcGwgPGVtPkludGVydmVudGlvbiBMYWJlbCBWYWx1ZTwvZW0+fScgY2xhc3MuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uaW50ZXJ2ZW50aW9ucy5pbXBsLkludGVydmVudGlvbkxhYmVsVmFsdWVJbXBsCisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcnZlbnRpb25zLmltcGwuSW50ZXJ2ZW50aW9uc1BhY2thZ2VJbXBsI2dldEludGVydmVudGlvbkxhYmVsVmFsdWUoKQorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQ2xhc3MgSU5URVJWRU5USU9OX0xBQkVMX1ZBTFVFID0gZUlOU1RBTkNFLmdldEludGVydmVudGlvbkxhYmVsVmFsdWUoKTsKKworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uaW50ZXJ2ZW50aW9ucy5pbXBsLlN0YW5kYXJkSW50ZXJ2ZW50aW9uTGFiZWxWYWx1ZUltcGwgPGVtPlN0YW5kYXJkIEludGVydmVudGlvbiBMYWJlbCBWYWx1ZTwvZW0+fScgY2xhc3MuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uaW50ZXJ2ZW50aW9ucy5pbXBsLlN0YW5kYXJkSW50ZXJ2ZW50aW9uTGFiZWxWYWx1ZUltcGwKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmludGVydmVudGlvbnMuaW1wbC5JbnRlcnZlbnRpb25zUGFja2FnZUltcGwjZ2V0U3RhbmRhcmRJbnRlcnZlbnRpb25MYWJlbFZhbHVlKCkKKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUNsYXNzIFNUQU5EQVJEX0lOVEVSVkVOVElPTl9MQUJFTF9WQUxVRSA9IGVJTlNUQU5DRS5nZXRTdGFuZGFyZEludGVydmVudGlvbkxhYmVsVmFsdWUoKTsKKworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPlZhY2NpbmF0aW9uczwvYj48L2VtPicgYXR0cmlidXRlIGZlYXR1cmUuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQXR0cmlidXRlIFNUQU5EQVJEX0lOVEVSVkVOVElPTl9MQUJFTF9WQUxVRV9fVkFDQ0lOQVRJT05TID0gZUlOU1RBTkNFLmdldFN0YW5kYXJkSW50ZXJ2ZW50aW9uTGFiZWxWYWx1ZV9WYWNjaW5hdGlvbnMoKTsKKworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPklzb2xhdGlvbnM8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUF0dHJpYnV0ZSBTVEFOREFSRF9JTlRFUlZFTlRJT05fTEFCRUxfVkFMVUVfX0lTT0xBVElPTlMgPSBlSU5TVEFOQ0UuZ2V0U3RhbmRhcmRJbnRlcnZlbnRpb25MYWJlbFZhbHVlX0lzb2xhdGlvbnMoKTsKKworCX0KKworfSAvL0ludGVydmVudGlvbnNQYWNrYWdlCmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uaW50ZXJ2ZW50aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9pbnRlcnZlbnRpb25zL1N0YW5kYXJkSW50ZXJ2ZW50aW9uTGFiZWwuamF2YSBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcnZlbnRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2ludGVydmVudGlvbnMvU3RhbmRhcmRJbnRlcnZlbnRpb25MYWJlbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEwMmI2YzEKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uaW50ZXJ2ZW50aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9pbnRlcnZlbnRpb25zL1N0YW5kYXJkSW50ZXJ2ZW50aW9uTGFiZWwuamF2YQpAQCAtMCwwICsxLDU5IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uaW50ZXJ2ZW50aW9uczsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogCisgKiBDb3B5cmlnaHQgKGMpIDIwMTEgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuIAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyAKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0IAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwgCisgKiAKKyAqIENvbnRyaWJ1dG9yczogCisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogQSByZXByZXNlbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+U3RhbmRhcmQgSW50ZXJ2ZW50aW9uIExhYmVsPC9iPjwvZW0+Jy4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICoKKyAqIDxwPgorICogVGhlIGZvbGxvd2luZyBmZWF0dXJlcyBhcmUgc3VwcG9ydGVkOgorICogPHVsPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uaW50ZXJ2ZW50aW9ucy5TdGFuZGFyZEludGVydmVudGlvbkxhYmVsI2dldFBvcHVsYXRpb25JZGVudGlmaWVyIDxlbT5Qb3B1bGF0aW9uIElkZW50aWZpZXI8L2VtPn08L2xpPgorICogPC91bD4KKyAqIDwvcD4KKyAqCisgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uaW50ZXJ2ZW50aW9ucy5JbnRlcnZlbnRpb25zUGFja2FnZSNnZXRTdGFuZGFyZEludGVydmVudGlvbkxhYmVsKCkKKyAqIEBtb2RlbAorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgaW50ZXJmYWNlIFN0YW5kYXJkSW50ZXJ2ZW50aW9uTGFiZWwgZXh0ZW5kcyBJbnRlcnZlbnRpb25MYWJlbCB7CisJLyoqCisJICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+UG9wdWxhdGlvbiBJZGVudGlmaWVyPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogVGhlIGRlZmF1bHQgdmFsdWUgaXMgPGNvZGU+Imh1bWFuIjwvY29kZT4uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8cD4KKwkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5Qb3B1bGF0aW9uIElkZW50aWZpZXI8L2VtPicgYXR0cmlidXRlIGlzbid0IGNsZWFyLAorCSAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4KKwkgKiA8L3A+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+UG9wdWxhdGlvbiBJZGVudGlmaWVyPC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiBAc2VlICNzZXRQb3B1bGF0aW9uSWRlbnRpZmllcihTdHJpbmcpCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmludGVydmVudGlvbnMuSW50ZXJ2ZW50aW9uc1BhY2thZ2UjZ2V0U3RhbmRhcmRJbnRlcnZlbnRpb25MYWJlbF9Qb3B1bGF0aW9uSWRlbnRpZmllcigpCisJICogQG1vZGVsIGRlZmF1bHQ9Imh1bWFuIgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlTdHJpbmcgZ2V0UG9wdWxhdGlvbklkZW50aWZpZXIoKTsKKworCS8qKgorCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uaW50ZXJ2ZW50aW9ucy5TdGFuZGFyZEludGVydmVudGlvbkxhYmVsI2dldFBvcHVsYXRpb25JZGVudGlmaWVyIDxlbT5Qb3B1bGF0aW9uIElkZW50aWZpZXI8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPlBvcHVsYXRpb24gSWRlbnRpZmllcjwvZW0+JyBhdHRyaWJ1dGUuCisJICogQHNlZSAjZ2V0UG9wdWxhdGlvbklkZW50aWZpZXIoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwl2b2lkIHNldFBvcHVsYXRpb25JZGVudGlmaWVyKFN0cmluZyB2YWx1ZSk7CisKK30gLy8gU3RhbmRhcmRJbnRlcnZlbnRpb25MYWJlbApkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmludGVydmVudGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vaW50ZXJ2ZW50aW9ucy9TdGFuZGFyZEludGVydmVudGlvbkxhYmVsVmFsdWUuamF2YSBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcnZlbnRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2ludGVydmVudGlvbnMvU3RhbmRhcmRJbnRlcnZlbnRpb25MYWJlbFZhbHVlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzQ5YTI2NwotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcnZlbnRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2ludGVydmVudGlvbnMvU3RhbmRhcmRJbnRlcnZlbnRpb25MYWJlbFZhbHVlLmphdmEKQEAgLTAsMCArMSw4NSBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmludGVydmVudGlvbnM7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIAorICogQ29weXJpZ2h0IChjKSAyMDExIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiAKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdCAKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sIAorICogCisgKiBDb250cmlidXRvcnM6IAorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiAKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIEEgcmVwcmVzZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPlN0YW5kYXJkIEludGVydmVudGlvbiBMYWJlbCBWYWx1ZTwvYj48L2VtPicuCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqCisgKiA8cD4KKyAqIFRoZSBmb2xsb3dpbmcgZmVhdHVyZXMgYXJlIHN1cHBvcnRlZDoKKyAqIDx1bD4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmludGVydmVudGlvbnMuU3RhbmRhcmRJbnRlcnZlbnRpb25MYWJlbFZhbHVlI2dldFZhY2NpbmF0aW9ucyA8ZW0+VmFjY2luYXRpb25zPC9lbT59PC9saT4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmludGVydmVudGlvbnMuU3RhbmRhcmRJbnRlcnZlbnRpb25MYWJlbFZhbHVlI2dldElzb2xhdGlvbnMgPGVtPklzb2xhdGlvbnM8L2VtPn08L2xpPgorICogPC91bD4KKyAqIDwvcD4KKyAqCisgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uaW50ZXJ2ZW50aW9ucy5JbnRlcnZlbnRpb25zUGFja2FnZSNnZXRTdGFuZGFyZEludGVydmVudGlvbkxhYmVsVmFsdWUoKQorICogQG1vZGVsCisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBpbnRlcmZhY2UgU3RhbmRhcmRJbnRlcnZlbnRpb25MYWJlbFZhbHVlIGV4dGVuZHMgSW50ZXJ2ZW50aW9uTGFiZWxWYWx1ZSB7CisJLyoqCisJICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+VmFjY2luYXRpb25zPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8cD4KKwkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5WYWNjaW5hdGlvbnM8L2VtPicgYXR0cmlidXRlIGlzbid0IGNsZWFyLAorCSAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4KKwkgKiA8L3A+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+VmFjY2luYXRpb25zPC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiBAc2VlICNzZXRWYWNjaW5hdGlvbnMoZG91YmxlKQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcnZlbnRpb25zLkludGVydmVudGlvbnNQYWNrYWdlI2dldFN0YW5kYXJkSW50ZXJ2ZW50aW9uTGFiZWxWYWx1ZV9WYWNjaW5hdGlvbnMoKQorCSAqIEBtb2RlbAorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlkb3VibGUgZ2V0VmFjY2luYXRpb25zKCk7CisKKwkvKioKKwkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmludGVydmVudGlvbnMuU3RhbmRhcmRJbnRlcnZlbnRpb25MYWJlbFZhbHVlI2dldFZhY2NpbmF0aW9ucyA8ZW0+VmFjY2luYXRpb25zPC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5WYWNjaW5hdGlvbnM8L2VtPicgYXR0cmlidXRlLgorCSAqIEBzZWUgI2dldFZhY2NpbmF0aW9ucygpCisJICogQGdlbmVyYXRlZAorCSAqLworCXZvaWQgc2V0VmFjY2luYXRpb25zKGRvdWJsZSB2YWx1ZSk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5Jc29sYXRpb25zPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8cD4KKwkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5Jc29sYXRpb25zPC9lbT4nIGF0dHJpYnV0ZSBpc24ndCBjbGVhciwKKwkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uCisJICogPC9wPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPklzb2xhdGlvbnM8L2VtPicgYXR0cmlidXRlLgorCSAqIEBzZWUgI3NldElzb2xhdGlvbnMoZG91YmxlKQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcnZlbnRpb25zLkludGVydmVudGlvbnNQYWNrYWdlI2dldFN0YW5kYXJkSW50ZXJ2ZW50aW9uTGFiZWxWYWx1ZV9Jc29sYXRpb25zKCkKKwkgKiBAbW9kZWwKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJZG91YmxlIGdldElzb2xhdGlvbnMoKTsKKworCS8qKgorCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uaW50ZXJ2ZW50aW9ucy5TdGFuZGFyZEludGVydmVudGlvbkxhYmVsVmFsdWUjZ2V0SXNvbGF0aW9ucyA8ZW0+SXNvbGF0aW9uczwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+SXNvbGF0aW9uczwvZW0+JyBhdHRyaWJ1dGUuCisJICogQHNlZSAjZ2V0SXNvbGF0aW9ucygpCisJICogQGdlbmVyYXRlZAorCSAqLworCXZvaWQgc2V0SXNvbGF0aW9ucyhkb3VibGUgdmFsdWUpOworCit9IC8vIFN0YW5kYXJkSW50ZXJ2ZW50aW9uTGFiZWxWYWx1ZQpkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmludGVydmVudGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vaW50ZXJ2ZW50aW9ucy9pbXBsL0NvbnRyb2xHcmFwaEdlbmVyYXRvckltcGwuamF2YSBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcnZlbnRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2ludGVydmVudGlvbnMvaW1wbC9Db250cm9sR3JhcGhHZW5lcmF0b3JJbXBsLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGI3M2I3MgotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcnZlbnRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2ludGVydmVudGlvbnMvaW1wbC9Db250cm9sR3JhcGhHZW5lcmF0b3JJbXBsLmphdmEKQEAgLTAsMCArMSw0MzEgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcnZlbnRpb25zLmltcGw7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIAorICogQ29weXJpZ2h0IChjKSAyMDExIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiAKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdCAKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sIAorICogCisgKiBDb250cmlidXRvcnM6IAorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiAKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgamF2YS50ZXh0LlNpbXBsZURhdGVGb3JtYXQ7CitpbXBvcnQgamF2YS51dGlsLkNhbGVuZGFyOworaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKK2ltcG9ydCBqYXZhLnV0aWwuU2V0OworCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlVSSTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLmltcGwuRU5vdGlmaWNhdGlvbkltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLlNURU1VUkk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5EdWJsaW5Db3JlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5HcmFwaDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguR3JhcGhGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5Ob2RlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5Ob2RlTGFiZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5Mb2NhdGlvblV0aWxpdHk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuUG9wdWxhdGlvbkxhYmVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLlBvcHVsYXRpb25MYWJlbFZhbHVlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhnZW5lcmF0b3JzLmltcGwuR3JhcGhHZW5lcmF0b3JJbXBsOworCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcnZlbnRpb25zLkNvbnRyb2xHcmFwaEdlbmVyYXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmludGVydmVudGlvbnMuSW50ZXJ2ZW50aW9uc0ZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcnZlbnRpb25zLkludGVydmVudGlvbnNQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uaW50ZXJ2ZW50aW9ucy5TdGFuZGFyZEludGVydmVudGlvbkxhYmVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uaW50ZXJ2ZW50aW9ucy5TdGFuZGFyZEludGVydmVudGlvbkxhYmVsVmFsdWU7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIEFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5Db250cm9sIEdyYXBoIEdlbmVyYXRvcjwvYj48L2VtPicuCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIDxwPgorICogVGhlIGZvbGxvd2luZyBmZWF0dXJlcyBhcmUgaW1wbGVtZW50ZWQ6CisgKiA8dWw+CisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcnZlbnRpb25zLmltcGwuQ29udHJvbEdyYXBoR2VuZXJhdG9ySW1wbCNnZXRWYWNjaW5hdGlvbkZyYWN0aW9uIDxlbT5WYWNjaW5hdGlvbiBGcmFjdGlvbjwvZW0+fTwvbGk+CisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcnZlbnRpb25zLmltcGwuQ29udHJvbEdyYXBoR2VuZXJhdG9ySW1wbCNnZXRJc29sYXRpb25GcmFjdGlvbiA8ZW0+SXNvbGF0aW9uIEZyYWN0aW9uPC9lbT59PC9saT4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmludGVydmVudGlvbnMuaW1wbC5Db250cm9sR3JhcGhHZW5lcmF0b3JJbXBsI2dldFBvcHVsYXRpb25JZGVudGlmaWVyIDxlbT5Qb3B1bGF0aW9uIElkZW50aWZpZXI8L2VtPn08L2xpPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uaW50ZXJ2ZW50aW9ucy5pbXBsLkNvbnRyb2xHcmFwaEdlbmVyYXRvckltcGwjZ2V0TG9jYXRpb24gPGVtPkxvY2F0aW9uPC9lbT59PC9saT4KKyAqIDwvdWw+CisgKiA8L3A+CisgKgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgQ29udHJvbEdyYXBoR2VuZXJhdG9ySW1wbCBleHRlbmRzIEdyYXBoR2VuZXJhdG9ySW1wbCBpbXBsZW1lbnRzIENvbnRyb2xHcmFwaEdlbmVyYXRvciB7CisJCisJLyoqIAorCSAqIENvbnRyb2wgZ3JhcGggdHlwZQorCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIENPTlRST0xfR1JBUEhfVFlQRT0iQ29udHJvbCBHcmFwaCI7CisKKwkvKioKKwkgKiBUaGUgVVJJIHNlZ21lbnQgdXNlZCB0byBpZGVudGlmeSBpdCBhcyBhbiBpbnRlcnZlbnRpb24gbGFiZWwKKwkgKi8KKwkKKwlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBJTlRFUlZFTlRJT05fTEFCRUxfVVJJX1NFR01FTlQgPSAiaW50ZXJ2ZW50aW9uIjsKKwkKKwkKKwkvKioKKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0VmFjY2luYXRpb25GcmFjdGlvbigpIDxlbT5WYWNjaW5hdGlvbiBGcmFjdGlvbjwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZ2V0VmFjY2luYXRpb25GcmFjdGlvbigpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBkb3VibGUgVkFDQ0lOQVRJT05fRlJBQ1RJT05fRURFRkFVTFQgPSAwLjA7CisJLyoqCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0VmFjY2luYXRpb25GcmFjdGlvbigpIDxlbT5WYWNjaW5hdGlvbiBGcmFjdGlvbjwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZ2V0VmFjY2luYXRpb25GcmFjdGlvbigpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIGRvdWJsZSB2YWNjaW5hdGlvbkZyYWN0aW9uID0gVkFDQ0lOQVRJT05fRlJBQ1RJT05fRURFRkFVTFQ7CisJLyoqCisJICogVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldElzb2xhdGlvbkZyYWN0aW9uKCkgPGVtPklzb2xhdGlvbiBGcmFjdGlvbjwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZ2V0SXNvbGF0aW9uRnJhY3Rpb24oKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgZG91YmxlIElTT0xBVElPTl9GUkFDVElPTl9FREVGQVVMVCA9IDAuMDsKKwkvKioKKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRJc29sYXRpb25GcmFjdGlvbigpIDxlbT5Jc29sYXRpb24gRnJhY3Rpb248L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI2dldElzb2xhdGlvbkZyYWN0aW9uKCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgZG91YmxlIGlzb2xhdGlvbkZyYWN0aW9uID0gSVNPTEFUSU9OX0ZSQUNUSU9OX0VERUZBVUxUOworCisJLyoqCisJICogVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldFBvcHVsYXRpb25JZGVudGlmaWVyKCkgPGVtPlBvcHVsYXRpb24gSWRlbnRpZmllcjwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZ2V0UG9wdWxhdGlvbklkZW50aWZpZXIoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgU3RyaW5nIFBPUFVMQVRJT05fSURFTlRJRklFUl9FREVGQVVMVCA9ICJodW1hbiI7CisJLyoqCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0UG9wdWxhdGlvbklkZW50aWZpZXIoKSA8ZW0+UG9wdWxhdGlvbiBJZGVudGlmaWVyPC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNnZXRQb3B1bGF0aW9uSWRlbnRpZmllcigpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIFN0cmluZyBwb3B1bGF0aW9uSWRlbnRpZmllciA9IFBPUFVMQVRJT05fSURFTlRJRklFUl9FREVGQVVMVDsKKworCS8qKgorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRMb2NhdGlvbigpIDxlbT5Mb2NhdGlvbjwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZ2V0TG9jYXRpb24oKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgVVJJIExPQ0FUSU9OX0VERUZBVUxUID0gbnVsbDsKKworCisJLyoqCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0TG9jYXRpb24oKSA8ZW0+TG9jYXRpb248L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI2dldExvY2F0aW9uKCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgVVJJIGxvY2F0aW9uID0gTE9DQVRJT05fRURFRkFVTFQ7CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJcHVibGljIENvbnRyb2xHcmFwaEdlbmVyYXRvckltcGwoKSB7CisJCXN1cGVyKCk7CisJfQorCisJCisJLyoqCisJICogSVByb2plY3QgdG8gY3JlYXRlIGNvbnRyb2wgbm9kZSBsYWJlbHMgaW4KKwkgKi8KKwlwcml2YXRlIElQcm9qZWN0IHByb2plY3Q7CisJcHVibGljIElQcm9qZWN0IGdldFByb2plY3QoKSB7CisJCXJldHVybiBwcm9qZWN0OyAKKwl9CisJcHVibGljIHZvaWQgc2V0UHJvamVjdChJUHJvamVjdCBwKSB7CisJCXRoaXMucHJvamVjdCA9IHA7CisJfQorCQorCQorCS8qKgorCSAqIEdlbmVyYXRlIGNvbnRyb2wgbGFiZWxzCisJICogCisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwkKKwlAT3ZlcnJpZGUKKwlwdWJsaWMgR3JhcGggZ2V0R3JhcGgoKSB7CisJCWZpbmFsIEdyYXBoIGdyYXBoID0gR3JhcGhGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVHcmFwaCgpOworCQlmaW5hbCBEdWJsaW5Db3JlIGRjID0gZ3JhcGguZ2V0RHVibGluQ29yZSgpOworCQlkYy5wb3B1bGF0ZSgpOworCQlkYy5zZXRUaXRsZShDT05UUk9MX0dSQVBIX1RZUEUpOworCQlkYy5zZXRTb3VyY2UodGhpcy5nZXRDbGFzcygpLmdldFNpbXBsZU5hbWUoKSk7CisJCUNhbGVuZGFyIGMgPSBDYWxlbmRhci5nZXRJbnN0YW5jZSgpOworICAgICAgICBTaW1wbGVEYXRlRm9ybWF0IGZvcm1hdHRlciA9IG5ldyBTaW1wbGVEYXRlRm9ybWF0KCJFIHl5eXkuTU0uZGQgJ2F0JyBoaDptbTpzcyBhIHp6eiIpOworICAgICAgICBTdHJpbmcgdmFsaWQgPSBmb3JtYXR0ZXIuZm9ybWF0KGMuZ2V0VGltZSgpKTsKKyAgICAgICAJZGMuc2V0VmFsaWQodmFsaWQpOworICAgICAgIAlTZXQ8Tm9kZT4gYWxsTm9kZXMgPSBMb2NhdGlvblV0aWxpdHkuZ2V0Tm9kZXMocHJvamVjdCwgdGhpcy5nZXRMb2NhdGlvbigpKTsKKwkJCisJCUl0ZXJhdG9yPE5vZGU+IGl0ZXIgPSBhbGxOb2Rlcy5pdGVyYXRvcigpOworCQl3aGlsZSgoaXRlciE9bnVsbCkmJihpdGVyLmhhc05leHQoKSkpeworICAgICAgIAkgCQlOb2RlIG4gPSBpdGVyLm5leHQoKTsKKwkJCisgICAgICAgCSAJCQorICAgICAgIAkgCQlTdGFuZGFyZEludGVydmVudGlvbkxhYmVsIHNjbCA9IEludGVydmVudGlvbnNGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVTdGFuZGFyZEludGVydmVudGlvbkxhYmVsKCk7CisgICAgICAgCSAJCQorCQkJCisgICAgICAgCSAJCXNjbC5zZXRVUklPZklkZW50aWZpYWJsZVRvQmVMYWJlbGVkKG4uZ2V0VVJJKCkpOworICAgICAgIAkgCQlzY2wuc2V0UG9wdWxhdGlvbklkZW50aWZpZXIodGhpcy5nZXRQb3B1bGF0aW9uSWRlbnRpZmllcigpKTsKKyAgICAgICAJIAkJCisgICAgICAgCSAJCVN0YW5kYXJkSW50ZXJ2ZW50aW9uTGFiZWxWYWx1ZSBjdXJyZW50VmFsdWUgPSBJbnRlcnZlbnRpb25zRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlU3RhbmRhcmRJbnRlcnZlbnRpb25MYWJlbFZhbHVlKCk7CisgICAJIAkJCisgICAgICAgCSAJCXNjbC5zZXRDdXJyZW50VmFsdWUoY3VycmVudFZhbHVlKTsKKyAgICAgICAJIAkJCisgICAgICAgCSAJCXNjbC5zZXRVUkkoU1RFTVVSSS5jcmVhdGVVUkkoSU5URVJWRU5USU9OX0xBQkVMX1VSSV9TRUdNRU5UKyIvIituLmdldFVSSSgpLmxhc3RTZWdtZW50KCkpKTsKKyAgICAgICAJIAkJCisgICAgICAgCSAJCS8vIFdlIG5lZWQgdG8gZmluZCB0aGUgcG9wdWxhdGlvbiBsYWJlbCB0byBnZXQgdGhlIGFjdHVhbCBpbml0aWFsIG51bWJlciBvZgorICAgICAgIAkgCQkvLyBkYWlseSBpc29sYXRpb25zL3ZhY2NpbmF0aW9ucworICAgICAgIAkgCQkKKyAgICAgICAJIAkJZG91YmxlIHBvcHVsYXRpb24gPSAwLjA7CisgICAgICAgCSAJCWZvcihOb2RlTGFiZWwgbGFiOm4uZ2V0TGFiZWxzKCkpIHsKKyAgICAgICAJIAkJCWlmKGxhYiBpbnN0YW5jZW9mIFBvcHVsYXRpb25MYWJlbCkgeworICAgICAgIAkgCQkJCVBvcHVsYXRpb25MYWJlbFZhbHVlIHBsdiA9ICgoUG9wdWxhdGlvbkxhYmVsKWxhYikuZ2V0Q3VycmVudFBvcHVsYXRpb25WYWx1ZSgpOworICAgICAgIAkgCQkJCXBvcHVsYXRpb24gPSBwbHYuZ2V0Q291bnQoKTsKKyAgICAgICAJIAkJCQlicmVhazsKKyAgICAgICAJIAkJCX0KKyAgICAgICAJIAkJfQorICAgICAgIAkgCQljdXJyZW50VmFsdWUuc2V0SXNvbGF0aW9ucyh0aGlzLmdldElzb2xhdGlvbkZyYWN0aW9uKCkqcG9wdWxhdGlvbik7CisgICAgICAgCSAJCWN1cnJlbnRWYWx1ZS5zZXRWYWNjaW5hdGlvbnModGhpcy5nZXRWYWNjaW5hdGlvbkZyYWN0aW9uKCkqcG9wdWxhdGlvbik7CisgICAJIAkJCQkJCQorCQkJCWdyYXBoLnB1dE5vZGVMYWJlbChzY2wpOworCQl9CisKKwkJYXNzZXJ0IGdyYXBoLnNhbmUoKTsKKworCQlyZXR1cm4gZ3JhcGg7CisKKwl9CisJCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIEVDbGFzcyBlU3RhdGljQ2xhc3MoKSB7CisJCXJldHVybiBJbnRlcnZlbnRpb25zUGFja2FnZS5MaXRlcmFscy5DT05UUk9MX0dSQVBIX0dFTkVSQVRPUjsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgZG91YmxlIGdldFZhY2NpbmF0aW9uRnJhY3Rpb24oKSB7CisJCXJldHVybiB2YWNjaW5hdGlvbkZyYWN0aW9uOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIHNldFZhY2NpbmF0aW9uRnJhY3Rpb24oZG91YmxlIG5ld1ZhY2NpbmF0aW9uRnJhY3Rpb24pIHsKKwkJZG91YmxlIG9sZFZhY2NpbmF0aW9uRnJhY3Rpb24gPSB2YWNjaW5hdGlvbkZyYWN0aW9uOworCQl2YWNjaW5hdGlvbkZyYWN0aW9uID0gbmV3VmFjY2luYXRpb25GcmFjdGlvbjsKKwkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQorCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgSW50ZXJ2ZW50aW9uc1BhY2thZ2UuQ09OVFJPTF9HUkFQSF9HRU5FUkFUT1JfX1ZBQ0NJTkFUSU9OX0ZSQUNUSU9OLCBvbGRWYWNjaW5hdGlvbkZyYWN0aW9uLCB2YWNjaW5hdGlvbkZyYWN0aW9uKSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIGRvdWJsZSBnZXRJc29sYXRpb25GcmFjdGlvbigpIHsKKwkJcmV0dXJuIGlzb2xhdGlvbkZyYWN0aW9uOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIHNldElzb2xhdGlvbkZyYWN0aW9uKGRvdWJsZSBuZXdJc29sYXRpb25GcmFjdGlvbikgeworCQlkb3VibGUgb2xkSXNvbGF0aW9uRnJhY3Rpb24gPSBpc29sYXRpb25GcmFjdGlvbjsKKwkJaXNvbGF0aW9uRnJhY3Rpb24gPSBuZXdJc29sYXRpb25GcmFjdGlvbjsKKwkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQorCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgSW50ZXJ2ZW50aW9uc1BhY2thZ2UuQ09OVFJPTF9HUkFQSF9HRU5FUkFUT1JfX0lTT0xBVElPTl9GUkFDVElPTiwgb2xkSXNvbGF0aW9uRnJhY3Rpb24sIGlzb2xhdGlvbkZyYWN0aW9uKSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFN0cmluZyBnZXRQb3B1bGF0aW9uSWRlbnRpZmllcigpIHsKKwkJcmV0dXJuIHBvcHVsYXRpb25JZGVudGlmaWVyOworCX0KKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRQb3B1bGF0aW9uSWRlbnRpZmllcihTdHJpbmcgbmV3UG9wdWxhdGlvbklkZW50aWZpZXIpIHsKKwkJU3RyaW5nIG9sZFBvcHVsYXRpb25JZGVudGlmaWVyID0gcG9wdWxhdGlvbklkZW50aWZpZXI7CisJCXBvcHVsYXRpb25JZGVudGlmaWVyID0gbmV3UG9wdWxhdGlvbklkZW50aWZpZXI7CisJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkKKwkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIEludGVydmVudGlvbnNQYWNrYWdlLkNPTlRST0xfR1JBUEhfR0VORVJBVE9SX19QT1BVTEFUSU9OX0lERU5USUZJRVIsIG9sZFBvcHVsYXRpb25JZGVudGlmaWVyLCBwb3B1bGF0aW9uSWRlbnRpZmllcikpOworCX0KKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVVJJIGdldExvY2F0aW9uKCkgeworCQlyZXR1cm4gbG9jYXRpb247CisJfQorCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIHNldExvY2F0aW9uKFVSSSBuZXdMb2NhdGlvbikgeworCQlVUkkgb2xkTG9jYXRpb24gPSBsb2NhdGlvbjsKKwkJbG9jYXRpb24gPSBuZXdMb2NhdGlvbjsKKwkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQorCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgSW50ZXJ2ZW50aW9uc1BhY2thZ2UuQ09OVFJPTF9HUkFQSF9HRU5FUkFUT1JfX0xPQ0FUSU9OLCBvbGRMb2NhdGlvbiwgbG9jYXRpb24pKTsKKwl9CisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIE9iamVjdCBlR2V0KGludCBmZWF0dXJlSUQsIGJvb2xlYW4gcmVzb2x2ZSwgYm9vbGVhbiBjb3JlVHlwZSkgeworCQlzd2l0Y2ggKGZlYXR1cmVJRCkgeworCQkJY2FzZSBJbnRlcnZlbnRpb25zUGFja2FnZS5DT05UUk9MX0dSQVBIX0dFTkVSQVRPUl9fVkFDQ0lOQVRJT05fRlJBQ1RJT046CisJCQkJcmV0dXJuIGdldFZhY2NpbmF0aW9uRnJhY3Rpb24oKTsKKwkJCWNhc2UgSW50ZXJ2ZW50aW9uc1BhY2thZ2UuQ09OVFJPTF9HUkFQSF9HRU5FUkFUT1JfX0lTT0xBVElPTl9GUkFDVElPTjoKKwkJCQlyZXR1cm4gZ2V0SXNvbGF0aW9uRnJhY3Rpb24oKTsKKwkJCWNhc2UgSW50ZXJ2ZW50aW9uc1BhY2thZ2UuQ09OVFJPTF9HUkFQSF9HRU5FUkFUT1JfX1BPUFVMQVRJT05fSURFTlRJRklFUjoKKwkJCQlyZXR1cm4gZ2V0UG9wdWxhdGlvbklkZW50aWZpZXIoKTsKKwkJCWNhc2UgSW50ZXJ2ZW50aW9uc1BhY2thZ2UuQ09OVFJPTF9HUkFQSF9HRU5FUkFUT1JfX0xPQ0FUSU9OOgorCQkJCXJldHVybiBnZXRMb2NhdGlvbigpOworCQl9CisJCXJldHVybiBzdXBlci5lR2V0KGZlYXR1cmVJRCwgcmVzb2x2ZSwgY29yZVR5cGUpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGVTZXQoaW50IGZlYXR1cmVJRCwgT2JqZWN0IG5ld1ZhbHVlKSB7CisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7CisJCQljYXNlIEludGVydmVudGlvbnNQYWNrYWdlLkNPTlRST0xfR1JBUEhfR0VORVJBVE9SX19WQUNDSU5BVElPTl9GUkFDVElPTjoKKwkJCQlzZXRWYWNjaW5hdGlvbkZyYWN0aW9uKChEb3VibGUpbmV3VmFsdWUpOworCQkJCXJldHVybjsKKwkJCWNhc2UgSW50ZXJ2ZW50aW9uc1BhY2thZ2UuQ09OVFJPTF9HUkFQSF9HRU5FUkFUT1JfX0lTT0xBVElPTl9GUkFDVElPTjoKKwkJCQlzZXRJc29sYXRpb25GcmFjdGlvbigoRG91YmxlKW5ld1ZhbHVlKTsKKwkJCQlyZXR1cm47CisJCQljYXNlIEludGVydmVudGlvbnNQYWNrYWdlLkNPTlRST0xfR1JBUEhfR0VORVJBVE9SX19QT1BVTEFUSU9OX0lERU5USUZJRVI6CisJCQkJc2V0UG9wdWxhdGlvbklkZW50aWZpZXIoKFN0cmluZyluZXdWYWx1ZSk7CisJCQkJcmV0dXJuOworCQkJY2FzZSBJbnRlcnZlbnRpb25zUGFja2FnZS5DT05UUk9MX0dSQVBIX0dFTkVSQVRPUl9fTE9DQVRJT046CisJCQkJc2V0TG9jYXRpb24oKFVSSSluZXdWYWx1ZSk7CisJCQkJcmV0dXJuOworCQl9CisJCXN1cGVyLmVTZXQoZmVhdHVyZUlELCBuZXdWYWx1ZSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgZVVuc2V0KGludCBmZWF0dXJlSUQpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJCWNhc2UgSW50ZXJ2ZW50aW9uc1BhY2thZ2UuQ09OVFJPTF9HUkFQSF9HRU5FUkFUT1JfX1ZBQ0NJTkFUSU9OX0ZSQUNUSU9OOgorCQkJCXNldFZhY2NpbmF0aW9uRnJhY3Rpb24oVkFDQ0lOQVRJT05fRlJBQ1RJT05fRURFRkFVTFQpOworCQkJCXJldHVybjsKKwkJCWNhc2UgSW50ZXJ2ZW50aW9uc1BhY2thZ2UuQ09OVFJPTF9HUkFQSF9HRU5FUkFUT1JfX0lTT0xBVElPTl9GUkFDVElPTjoKKwkJCQlzZXRJc29sYXRpb25GcmFjdGlvbihJU09MQVRJT05fRlJBQ1RJT05fRURFRkFVTFQpOworCQkJCXJldHVybjsKKwkJCWNhc2UgSW50ZXJ2ZW50aW9uc1BhY2thZ2UuQ09OVFJPTF9HUkFQSF9HRU5FUkFUT1JfX1BPUFVMQVRJT05fSURFTlRJRklFUjoKKwkJCQlzZXRQb3B1bGF0aW9uSWRlbnRpZmllcihQT1BVTEFUSU9OX0lERU5USUZJRVJfRURFRkFVTFQpOworCQkJCXJldHVybjsKKwkJCWNhc2UgSW50ZXJ2ZW50aW9uc1BhY2thZ2UuQ09OVFJPTF9HUkFQSF9HRU5FUkFUT1JfX0xPQ0FUSU9OOgorCQkJCXNldExvY2F0aW9uKExPQ0FUSU9OX0VERUZBVUxUKTsKKwkJCQlyZXR1cm47CisJCX0KKwkJc3VwZXIuZVVuc2V0KGZlYXR1cmVJRCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIGJvb2xlYW4gZUlzU2V0KGludCBmZWF0dXJlSUQpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJCWNhc2UgSW50ZXJ2ZW50aW9uc1BhY2thZ2UuQ09OVFJPTF9HUkFQSF9HRU5FUkFUT1JfX1ZBQ0NJTkFUSU9OX0ZSQUNUSU9OOgorCQkJCXJldHVybiB2YWNjaW5hdGlvbkZyYWN0aW9uICE9IFZBQ0NJTkFUSU9OX0ZSQUNUSU9OX0VERUZBVUxUOworCQkJY2FzZSBJbnRlcnZlbnRpb25zUGFja2FnZS5DT05UUk9MX0dSQVBIX0dFTkVSQVRPUl9fSVNPTEFUSU9OX0ZSQUNUSU9OOgorCQkJCXJldHVybiBpc29sYXRpb25GcmFjdGlvbiAhPSBJU09MQVRJT05fRlJBQ1RJT05fRURFRkFVTFQ7CisJCQljYXNlIEludGVydmVudGlvbnNQYWNrYWdlLkNPTlRST0xfR1JBUEhfR0VORVJBVE9SX19QT1BVTEFUSU9OX0lERU5USUZJRVI6CisJCQkJcmV0dXJuIFBPUFVMQVRJT05fSURFTlRJRklFUl9FREVGQVVMVCA9PSBudWxsID8gcG9wdWxhdGlvbklkZW50aWZpZXIgIT0gbnVsbCA6ICFQT1BVTEFUSU9OX0lERU5USUZJRVJfRURFRkFVTFQuZXF1YWxzKHBvcHVsYXRpb25JZGVudGlmaWVyKTsKKwkJCWNhc2UgSW50ZXJ2ZW50aW9uc1BhY2thZ2UuQ09OVFJPTF9HUkFQSF9HRU5FUkFUT1JfX0xPQ0FUSU9OOgorCQkJCXJldHVybiBMT0NBVElPTl9FREVGQVVMVCA9PSBudWxsID8gbG9jYXRpb24gIT0gbnVsbCA6ICFMT0NBVElPTl9FREVGQVVMVC5lcXVhbHMobG9jYXRpb24pOworCQl9CisJCXJldHVybiBzdXBlci5lSXNTZXQoZmVhdHVyZUlEKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkgeworCQlpZiAoZUlzUHJveHkoKSkgcmV0dXJuIHN1cGVyLnRvU3RyaW5nKCk7CisKKwkJU3RyaW5nQnVmZmVyIHJlc3VsdCA9IG5ldyBTdHJpbmdCdWZmZXIoc3VwZXIudG9TdHJpbmcoKSk7CisJCXJlc3VsdC5hcHBlbmQoIiAodmFjY2luYXRpb25GcmFjdGlvbjogIik7CisJCXJlc3VsdC5hcHBlbmQodmFjY2luYXRpb25GcmFjdGlvbik7CisJCXJlc3VsdC5hcHBlbmQoIiwgaXNvbGF0aW9uRnJhY3Rpb246ICIpOworCQlyZXN1bHQuYXBwZW5kKGlzb2xhdGlvbkZyYWN0aW9uKTsKKwkJcmVzdWx0LmFwcGVuZCgiLCBwb3B1bGF0aW9uSWRlbnRpZmllcjogIik7CisJCXJlc3VsdC5hcHBlbmQocG9wdWxhdGlvbklkZW50aWZpZXIpOworCQlyZXN1bHQuYXBwZW5kKCIsIGxvY2F0aW9uOiAiKTsKKwkJcmVzdWx0LmFwcGVuZChsb2NhdGlvbik7CisJCXJlc3VsdC5hcHBlbmQoJyknKTsKKwkJcmV0dXJuIHJlc3VsdC50b1N0cmluZygpOworCX0KKworfSAvL0NvbnRyb2xHcmFwaEdlbmVyYXRvckltcGwKZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcnZlbnRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2ludGVydmVudGlvbnMvaW1wbC9JbnRlcnZlbnRpb25MYWJlbEltcGwuamF2YSBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcnZlbnRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2ludGVydmVudGlvbnMvaW1wbC9JbnRlcnZlbnRpb25MYWJlbEltcGwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMmZmNTI3Ci0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmludGVydmVudGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vaW50ZXJ2ZW50aW9ucy9pbXBsL0ludGVydmVudGlvbkxhYmVsSW1wbC5qYXZhCkBAIC0wLDAgKzEsNTAgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcnZlbnRpb25zLmltcGw7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIAorICogQ29weXJpZ2h0IChjKSAyMDExIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiAKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdCAKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sIAorICogCisgKiBDb250cmlidXRvcnM6IAorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiAKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzczsKKworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5pbXBsLlN0YXRpY05vZGVMYWJlbEltcGw7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmludGVydmVudGlvbnMuSW50ZXJ2ZW50aW9uTGFiZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcnZlbnRpb25zLkludGVydmVudGlvbnNQYWNrYWdlOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiBBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+SW50ZXJ2ZW50aW9uIExhYmVsPC9iPjwvZW0+Jy4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogPHA+CisgKiA8L3A+CisgKgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgYWJzdHJhY3QgY2xhc3MgSW50ZXJ2ZW50aW9uTGFiZWxJbXBsIGV4dGVuZHMgU3RhdGljTm9kZUxhYmVsSW1wbCBpbXBsZW1lbnRzIEludGVydmVudGlvbkxhYmVsIHsKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgSW50ZXJ2ZW50aW9uTGFiZWxJbXBsKCkgeworCQlzdXBlcigpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCBFQ2xhc3MgZVN0YXRpY0NsYXNzKCkgeworCQlyZXR1cm4gSW50ZXJ2ZW50aW9uc1BhY2thZ2UuTGl0ZXJhbHMuSU5URVJWRU5USU9OX0xBQkVMOworCX0KKworfSAvL0ludGVydmVudGlvbkxhYmVsSW1wbApkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmludGVydmVudGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vaW50ZXJ2ZW50aW9ucy9pbXBsL0ludGVydmVudGlvbkxhYmVsVmFsdWVJbXBsLmphdmEgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uaW50ZXJ2ZW50aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9pbnRlcnZlbnRpb25zL2ltcGwvSW50ZXJ2ZW50aW9uTGFiZWxWYWx1ZUltcGwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZGU5NjdjCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmludGVydmVudGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vaW50ZXJ2ZW50aW9ucy9pbXBsL0ludGVydmVudGlvbkxhYmVsVmFsdWVJbXBsLmphdmEKQEAgLTAsMCArMSw1MCBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmludGVydmVudGlvbnMuaW1wbDsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogCisgKiBDb3B5cmlnaHQgKGMpIDIwMTEgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuIAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyAKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0IAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwgCisgKiAKKyAqIENvbnRyaWJ1dG9yczogCisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOworCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmltcGwuTGFiZWxWYWx1ZUltcGw7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmludGVydmVudGlvbnMuSW50ZXJ2ZW50aW9uTGFiZWxWYWx1ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmludGVydmVudGlvbnMuSW50ZXJ2ZW50aW9uc1BhY2thZ2U7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIEFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5JbnRlcnZlbnRpb24gTGFiZWwgVmFsdWU8L2I+PC9lbT4nLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiA8cD4KKyAqIDwvcD4KKyAqCisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBhYnN0cmFjdCBjbGFzcyBJbnRlcnZlbnRpb25MYWJlbFZhbHVlSW1wbCBleHRlbmRzIExhYmVsVmFsdWVJbXBsIGltcGxlbWVudHMgSW50ZXJ2ZW50aW9uTGFiZWxWYWx1ZSB7CisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIEludGVydmVudGlvbkxhYmVsVmFsdWVJbXBsKCkgeworCQlzdXBlcigpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCBFQ2xhc3MgZVN0YXRpY0NsYXNzKCkgeworCQlyZXR1cm4gSW50ZXJ2ZW50aW9uc1BhY2thZ2UuTGl0ZXJhbHMuSU5URVJWRU5USU9OX0xBQkVMX1ZBTFVFOworCX0KKworfSAvL0ludGVydmVudGlvbkxhYmVsVmFsdWVJbXBsCmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uaW50ZXJ2ZW50aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9pbnRlcnZlbnRpb25zL2ltcGwvSW50ZXJ2ZW50aW9uc0ZhY3RvcnlJbXBsLmphdmEgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uaW50ZXJ2ZW50aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9pbnRlcnZlbnRpb25zL2ltcGwvSW50ZXJ2ZW50aW9uc0ZhY3RvcnlJbXBsLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDQ2MjYwMwotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcnZlbnRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2ludGVydmVudGlvbnMvaW1wbC9JbnRlcnZlbnRpb25zRmFjdG9yeUltcGwuamF2YQpAQCAtMCwwICsxLDEyNiBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmludGVydmVudGlvbnMuaW1wbDsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogCisgKiBDb3B5cmlnaHQgKGMpIDIwMTEgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuIAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyAKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0IAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwgCisgKiAKKyAqIENvbnRyaWJ1dG9yczogCisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FUGFja2FnZTsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5pbXBsLkVGYWN0b3J5SW1wbDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5wbHVnaW4uRWNvcmVQbHVnaW47CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmludGVydmVudGlvbnMuKjsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIG1vZGVsIDxiPkZhY3Rvcnk8L2I+LgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBJbnRlcnZlbnRpb25zRmFjdG9yeUltcGwgZXh0ZW5kcyBFRmFjdG9yeUltcGwgaW1wbGVtZW50cyBJbnRlcnZlbnRpb25zRmFjdG9yeSB7CisJLyoqCisJICogQ3JlYXRlcyB0aGUgZGVmYXVsdCBmYWN0b3J5IGltcGxlbWVudGF0aW9uLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBzdGF0aWMgSW50ZXJ2ZW50aW9uc0ZhY3RvcnkgaW5pdCgpIHsKKwkJdHJ5IHsKKwkJCUludGVydmVudGlvbnNGYWN0b3J5IHRoZUludGVydmVudGlvbnNGYWN0b3J5ID0gKEludGVydmVudGlvbnNGYWN0b3J5KUVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVGYWN0b3J5KCJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vaW50ZXJ2ZW50aW9ucy5lY29yZSIpOyAKKwkJCWlmICh0aGVJbnRlcnZlbnRpb25zRmFjdG9yeSAhPSBudWxsKSB7CisJCQkJcmV0dXJuIHRoZUludGVydmVudGlvbnNGYWN0b3J5OworCQkJfQorCQl9CisJCWNhdGNoIChFeGNlcHRpb24gZXhjZXB0aW9uKSB7CisJCQlFY29yZVBsdWdpbi5JTlNUQU5DRS5sb2coZXhjZXB0aW9uKTsKKwkJfQorCQlyZXR1cm4gbmV3IEludGVydmVudGlvbnNGYWN0b3J5SW1wbCgpOworCX0KKworCS8qKgorCSAqIENyZWF0ZXMgYW4gaW5zdGFuY2Ugb2YgdGhlIGZhY3RvcnkuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEludGVydmVudGlvbnNGYWN0b3J5SW1wbCgpIHsKKwkJc3VwZXIoKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgRU9iamVjdCBjcmVhdGUoRUNsYXNzIGVDbGFzcykgeworCQlzd2l0Y2ggKGVDbGFzcy5nZXRDbGFzc2lmaWVySUQoKSkgeworCQkJY2FzZSBJbnRlcnZlbnRpb25zUGFja2FnZS5TVEFOREFSRF9JTlRFUlZFTlRJT05fTEFCRUw6IHJldHVybiBjcmVhdGVTdGFuZGFyZEludGVydmVudGlvbkxhYmVsKCk7CisJCQljYXNlIEludGVydmVudGlvbnNQYWNrYWdlLkNPTlRST0xfR1JBUEhfR0VORVJBVE9SOiByZXR1cm4gY3JlYXRlQ29udHJvbEdyYXBoR2VuZXJhdG9yKCk7CisJCQljYXNlIEludGVydmVudGlvbnNQYWNrYWdlLlNUQU5EQVJEX0lOVEVSVkVOVElPTl9MQUJFTF9WQUxVRTogcmV0dXJuIGNyZWF0ZVN0YW5kYXJkSW50ZXJ2ZW50aW9uTGFiZWxWYWx1ZSgpOworCQkJZGVmYXVsdDoKKwkJCQl0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJUaGUgY2xhc3MgJyIgKyBlQ2xhc3MuZ2V0TmFtZSgpICsgIicgaXMgbm90IGEgdmFsaWQgY2xhc3NpZmllciIpOworCQl9CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFN0YW5kYXJkSW50ZXJ2ZW50aW9uTGFiZWwgY3JlYXRlU3RhbmRhcmRJbnRlcnZlbnRpb25MYWJlbCgpIHsKKwkJU3RhbmRhcmRJbnRlcnZlbnRpb25MYWJlbEltcGwgc3RhbmRhcmRJbnRlcnZlbnRpb25MYWJlbCA9IG5ldyBTdGFuZGFyZEludGVydmVudGlvbkxhYmVsSW1wbCgpOworCQlyZXR1cm4gc3RhbmRhcmRJbnRlcnZlbnRpb25MYWJlbDsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQ29udHJvbEdyYXBoR2VuZXJhdG9yIGNyZWF0ZUNvbnRyb2xHcmFwaEdlbmVyYXRvcigpIHsKKwkJQ29udHJvbEdyYXBoR2VuZXJhdG9ySW1wbCBjb250cm9sR3JhcGhHZW5lcmF0b3IgPSBuZXcgQ29udHJvbEdyYXBoR2VuZXJhdG9ySW1wbCgpOworCQlyZXR1cm4gY29udHJvbEdyYXBoR2VuZXJhdG9yOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBTdGFuZGFyZEludGVydmVudGlvbkxhYmVsVmFsdWUgY3JlYXRlU3RhbmRhcmRJbnRlcnZlbnRpb25MYWJlbFZhbHVlKCkgeworCQlTdGFuZGFyZEludGVydmVudGlvbkxhYmVsVmFsdWVJbXBsIHN0YW5kYXJkSW50ZXJ2ZW50aW9uTGFiZWxWYWx1ZSA9IG5ldyBTdGFuZGFyZEludGVydmVudGlvbkxhYmVsVmFsdWVJbXBsKCk7CisJCXJldHVybiBzdGFuZGFyZEludGVydmVudGlvbkxhYmVsVmFsdWU7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEludGVydmVudGlvbnNQYWNrYWdlIGdldEludGVydmVudGlvbnNQYWNrYWdlKCkgeworCQlyZXR1cm4gKEludGVydmVudGlvbnNQYWNrYWdlKWdldEVQYWNrYWdlKCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZGVwcmVjYXRlZAorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlARGVwcmVjYXRlZAorCXB1YmxpYyBzdGF0aWMgSW50ZXJ2ZW50aW9uc1BhY2thZ2UgZ2V0UGFja2FnZSgpIHsKKwkJcmV0dXJuIEludGVydmVudGlvbnNQYWNrYWdlLmVJTlNUQU5DRTsKKwl9CisKK30gLy9JbnRlcnZlbnRpb25zRmFjdG9yeUltcGwKZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcnZlbnRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2ludGVydmVudGlvbnMvaW1wbC9JbnRlcnZlbnRpb25zUGFja2FnZUltcGwuamF2YSBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcnZlbnRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2ludGVydmVudGlvbnMvaW1wbC9JbnRlcnZlbnRpb25zUGFja2FnZUltcGwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zY2ZjN2U1Ci0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmludGVydmVudGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vaW50ZXJ2ZW50aW9ucy9pbXBsL0ludGVydmVudGlvbnNQYWNrYWdlSW1wbC5qYXZhCkBAIC0wLDAgKzEsMzU0IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uaW50ZXJ2ZW50aW9ucy5pbXBsOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAKKyAqIENvcHlyaWdodCAoYykgMjAxMSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4gCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIAorICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wIAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQgCisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbCAKKyAqIAorICogQ29udHJpYnV0b3JzOiAKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQXR0cmlidXRlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FY29yZVBhY2thZ2U7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuaW1wbC5FUGFja2FnZUltcGw7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLkNvbW1vblBhY2thZ2U7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguR3JhcGhQYWNrYWdlOworCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZS5QcmVkaWNhdGVQYWNrYWdlOworCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaGdlbmVyYXRvcnMuR3JhcGhnZW5lcmF0b3JzUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmludGVydmVudGlvbnMuQ29udHJvbEdyYXBoR2VuZXJhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uaW50ZXJ2ZW50aW9ucy5JbnRlcnZlbnRpb25MYWJlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmludGVydmVudGlvbnMuSW50ZXJ2ZW50aW9uTGFiZWxWYWx1ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmludGVydmVudGlvbnMuSW50ZXJ2ZW50aW9uc0ZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcnZlbnRpb25zLkludGVydmVudGlvbnNQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uaW50ZXJ2ZW50aW9ucy5TdGFuZGFyZEludGVydmVudGlvbkxhYmVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uaW50ZXJ2ZW50aW9ucy5TdGFuZGFyZEludGVydmVudGlvbkxhYmVsVmFsdWU7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIEFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBtb2RlbCA8Yj5QYWNrYWdlPC9iPi4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgSW50ZXJ2ZW50aW9uc1BhY2thZ2VJbXBsIGV4dGVuZHMgRVBhY2thZ2VJbXBsIGltcGxlbWVudHMgSW50ZXJ2ZW50aW9uc1BhY2thZ2UgeworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByaXZhdGUgRUNsYXNzIGludGVydmVudGlvbkxhYmVsRUNsYXNzID0gbnVsbDsKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcml2YXRlIEVDbGFzcyBzdGFuZGFyZEludGVydmVudGlvbkxhYmVsRUNsYXNzID0gbnVsbDsKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcml2YXRlIEVDbGFzcyBjb250cm9sR3JhcGhHZW5lcmF0b3JFQ2xhc3MgPSBudWxsOworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByaXZhdGUgRUNsYXNzIGludGVydmVudGlvbkxhYmVsVmFsdWVFQ2xhc3MgPSBudWxsOworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByaXZhdGUgRUNsYXNzIHN0YW5kYXJkSW50ZXJ2ZW50aW9uTGFiZWxWYWx1ZUVDbGFzcyA9IG51bGw7CisJLyoqCisJICogQ3JlYXRlcyBhbiBpbnN0YW5jZSBvZiB0aGUgbW9kZWwgPGI+UGFja2FnZTwvYj4sIHJlZ2lzdGVyZWQgd2l0aAorCSAqIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRVBhY2thZ2UuUmVnaXN0cnkgRVBhY2thZ2UuUmVnaXN0cnl9IGJ5IHRoZSBwYWNrYWdlCisJICogcGFja2FnZSBVUkkgdmFsdWUuCisJICogPHA+Tm90ZTogdGhlIGNvcnJlY3Qgd2F5IHRvIGNyZWF0ZSB0aGUgcGFja2FnZSBpcyB2aWEgdGhlIHN0YXRpYworCSAqIGZhY3RvcnkgbWV0aG9kIHtAbGluayAjaW5pdCBpbml0KCl9LCB3aGljaCBhbHNvIHBlcmZvcm1zCisJICogaW5pdGlhbGl6YXRpb24gb2YgdGhlIHBhY2thZ2UsIG9yIHJldHVybnMgdGhlIHJlZ2lzdGVyZWQgcGFja2FnZSwKKwkgKiBpZiBvbmUgYWxyZWFkeSBleGlzdHMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FUGFja2FnZS5SZWdpc3RyeQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcnZlbnRpb25zLkludGVydmVudGlvbnNQYWNrYWdlI2VOU19VUkkKKwkgKiBAc2VlICNpbml0KCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJpdmF0ZSBJbnRlcnZlbnRpb25zUGFja2FnZUltcGwoKSB7CisJCXN1cGVyKGVOU19VUkksIEludGVydmVudGlvbnNGYWN0b3J5LmVJTlNUQU5DRSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJpdmF0ZSBzdGF0aWMgYm9vbGVhbiBpc0luaXRlZCA9IGZhbHNlOworCisJLyoqCisJICogQ3JlYXRlcywgcmVnaXN0ZXJzLCBhbmQgaW5pdGlhbGl6ZXMgdGhlIDxiPlBhY2thZ2U8L2I+IGZvciB0aGlzIG1vZGVsLCBhbmQgZm9yIGFueSBvdGhlcnMgdXBvbiB3aGljaCBpdCBkZXBlbmRzLgorCSAqIAorCSAqIDxwPlRoaXMgbWV0aG9kIGlzIHVzZWQgdG8gaW5pdGlhbGl6ZSB7QGxpbmsgSW50ZXJ2ZW50aW9uc1BhY2thZ2UjZUlOU1RBTkNFfSB3aGVuIHRoYXQgZmllbGQgaXMgYWNjZXNzZWQuCisJICogQ2xpZW50cyBzaG91bGQgbm90IGludm9rZSBpdCBkaXJlY3RseS4gSW5zdGVhZCwgdGhleSBzaG91bGQgc2ltcGx5IGFjY2VzcyB0aGF0IGZpZWxkIHRvIG9idGFpbiB0aGUgcGFja2FnZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI2VOU19VUkkKKwkgKiBAc2VlICNjcmVhdGVQYWNrYWdlQ29udGVudHMoKQorCSAqIEBzZWUgI2luaXRpYWxpemVQYWNrYWdlQ29udGVudHMoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgc3RhdGljIEludGVydmVudGlvbnNQYWNrYWdlIGluaXQoKSB7CisJCWlmIChpc0luaXRlZCkgcmV0dXJuIChJbnRlcnZlbnRpb25zUGFja2FnZSlFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShJbnRlcnZlbnRpb25zUGFja2FnZS5lTlNfVVJJKTsKKworCQkvLyBPYnRhaW4gb3IgY3JlYXRlIGFuZCByZWdpc3RlciBwYWNrYWdlCisJCUludGVydmVudGlvbnNQYWNrYWdlSW1wbCB0aGVJbnRlcnZlbnRpb25zUGFja2FnZSA9IChJbnRlcnZlbnRpb25zUGFja2FnZUltcGwpKEVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldChlTlNfVVJJKSBpbnN0YW5jZW9mIEludGVydmVudGlvbnNQYWNrYWdlSW1wbCA/IEVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldChlTlNfVVJJKSA6IG5ldyBJbnRlcnZlbnRpb25zUGFja2FnZUltcGwoKSk7CisKKwkJaXNJbml0ZWQgPSB0cnVlOworCisJCS8vIEluaXRpYWxpemUgc2ltcGxlIGRlcGVuZGVuY2llcworCQlQcmVkaWNhdGVQYWNrYWdlLmVJTlNUQU5DRS5lQ2xhc3MoKTsKKwkJR3JhcGhnZW5lcmF0b3JzUGFja2FnZS5lSU5TVEFOQ0UuZUNsYXNzKCk7CisKKwkJLy8gQ3JlYXRlIHBhY2thZ2UgbWV0YS1kYXRhIG9iamVjdHMKKwkJdGhlSW50ZXJ2ZW50aW9uc1BhY2thZ2UuY3JlYXRlUGFja2FnZUNvbnRlbnRzKCk7CisKKwkJLy8gSW5pdGlhbGl6ZSBjcmVhdGVkIG1ldGEtZGF0YQorCQl0aGVJbnRlcnZlbnRpb25zUGFja2FnZS5pbml0aWFsaXplUGFja2FnZUNvbnRlbnRzKCk7CisKKwkJLy8gTWFyayBtZXRhLWRhdGEgdG8gaW5kaWNhdGUgaXQgY2FuJ3QgYmUgY2hhbmdlZAorCQl0aGVJbnRlcnZlbnRpb25zUGFja2FnZS5mcmVlemUoKTsKKworICAKKwkJLy8gVXBkYXRlIHRoZSByZWdpc3RyeSBhbmQgcmV0dXJuIHRoZSBwYWNrYWdlCisJCUVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLnB1dChJbnRlcnZlbnRpb25zUGFja2FnZS5lTlNfVVJJLCB0aGVJbnRlcnZlbnRpb25zUGFja2FnZSk7CisJCXJldHVybiB0aGVJbnRlcnZlbnRpb25zUGFja2FnZTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUNsYXNzIGdldEludGVydmVudGlvbkxhYmVsKCkgeworCQlyZXR1cm4gaW50ZXJ2ZW50aW9uTGFiZWxFQ2xhc3M7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVDbGFzcyBnZXRTdGFuZGFyZEludGVydmVudGlvbkxhYmVsKCkgeworCQlyZXR1cm4gc3RhbmRhcmRJbnRlcnZlbnRpb25MYWJlbEVDbGFzczsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUF0dHJpYnV0ZSBnZXRTdGFuZGFyZEludGVydmVudGlvbkxhYmVsX1BvcHVsYXRpb25JZGVudGlmaWVyKCkgeworCQlyZXR1cm4gKEVBdHRyaWJ1dGUpc3RhbmRhcmRJbnRlcnZlbnRpb25MYWJlbEVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDApOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQ2xhc3MgZ2V0Q29udHJvbEdyYXBoR2VuZXJhdG9yKCkgeworCQlyZXR1cm4gY29udHJvbEdyYXBoR2VuZXJhdG9yRUNsYXNzOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQXR0cmlidXRlIGdldENvbnRyb2xHcmFwaEdlbmVyYXRvcl9WYWNjaW5hdGlvbkZyYWN0aW9uKCkgeworCQlyZXR1cm4gKEVBdHRyaWJ1dGUpY29udHJvbEdyYXBoR2VuZXJhdG9yRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVBdHRyaWJ1dGUgZ2V0Q29udHJvbEdyYXBoR2VuZXJhdG9yX0lzb2xhdGlvbkZyYWN0aW9uKCkgeworCQlyZXR1cm4gKEVBdHRyaWJ1dGUpY29udHJvbEdyYXBoR2VuZXJhdG9yRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVBdHRyaWJ1dGUgZ2V0Q29udHJvbEdyYXBoR2VuZXJhdG9yX1BvcHVsYXRpb25JZGVudGlmaWVyKCkgeworCQlyZXR1cm4gKEVBdHRyaWJ1dGUpY29udHJvbEdyYXBoR2VuZXJhdG9yRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMik7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVBdHRyaWJ1dGUgZ2V0Q29udHJvbEdyYXBoR2VuZXJhdG9yX0xvY2F0aW9uKCkgeworCQlyZXR1cm4gKEVBdHRyaWJ1dGUpY29udHJvbEdyYXBoR2VuZXJhdG9yRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMyk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVDbGFzcyBnZXRJbnRlcnZlbnRpb25MYWJlbFZhbHVlKCkgeworCQlyZXR1cm4gaW50ZXJ2ZW50aW9uTGFiZWxWYWx1ZUVDbGFzczsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUNsYXNzIGdldFN0YW5kYXJkSW50ZXJ2ZW50aW9uTGFiZWxWYWx1ZSgpIHsKKwkJcmV0dXJuIHN0YW5kYXJkSW50ZXJ2ZW50aW9uTGFiZWxWYWx1ZUVDbGFzczsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUF0dHJpYnV0ZSBnZXRTdGFuZGFyZEludGVydmVudGlvbkxhYmVsVmFsdWVfVmFjY2luYXRpb25zKCkgeworCQlyZXR1cm4gKEVBdHRyaWJ1dGUpc3RhbmRhcmRJbnRlcnZlbnRpb25MYWJlbFZhbHVlRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVBdHRyaWJ1dGUgZ2V0U3RhbmRhcmRJbnRlcnZlbnRpb25MYWJlbFZhbHVlX0lzb2xhdGlvbnMoKSB7CisJCXJldHVybiAoRUF0dHJpYnV0ZSlzdGFuZGFyZEludGVydmVudGlvbkxhYmVsVmFsdWVFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgxKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgSW50ZXJ2ZW50aW9uc0ZhY3RvcnkgZ2V0SW50ZXJ2ZW50aW9uc0ZhY3RvcnkoKSB7CisJCXJldHVybiAoSW50ZXJ2ZW50aW9uc0ZhY3RvcnkpZ2V0RUZhY3RvcnlJbnN0YW5jZSgpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByaXZhdGUgYm9vbGVhbiBpc0NyZWF0ZWQgPSBmYWxzZTsKKworCS8qKgorCSAqIENyZWF0ZXMgdGhlIG1ldGEtbW9kZWwgb2JqZWN0cyBmb3IgdGhlIHBhY2thZ2UuICBUaGlzIG1ldGhvZCBpcworCSAqIGd1YXJkZWQgdG8gaGF2ZSBubyBhZmZlY3Qgb24gYW55IGludm9jYXRpb24gYnV0IGl0cyBmaXJzdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBjcmVhdGVQYWNrYWdlQ29udGVudHMoKSB7CisJCWlmIChpc0NyZWF0ZWQpIHJldHVybjsKKwkJaXNDcmVhdGVkID0gdHJ1ZTsKKworCQkvLyBDcmVhdGUgY2xhc3NlcyBhbmQgdGhlaXIgZmVhdHVyZXMKKwkJaW50ZXJ2ZW50aW9uTGFiZWxFQ2xhc3MgPSBjcmVhdGVFQ2xhc3MoSU5URVJWRU5USU9OX0xBQkVMKTsKKworCQlzdGFuZGFyZEludGVydmVudGlvbkxhYmVsRUNsYXNzID0gY3JlYXRlRUNsYXNzKFNUQU5EQVJEX0lOVEVSVkVOVElPTl9MQUJFTCk7CisJCWNyZWF0ZUVBdHRyaWJ1dGUoc3RhbmRhcmRJbnRlcnZlbnRpb25MYWJlbEVDbGFzcywgU1RBTkRBUkRfSU5URVJWRU5USU9OX0xBQkVMX19QT1BVTEFUSU9OX0lERU5USUZJRVIpOworCisJCWNvbnRyb2xHcmFwaEdlbmVyYXRvckVDbGFzcyA9IGNyZWF0ZUVDbGFzcyhDT05UUk9MX0dSQVBIX0dFTkVSQVRPUik7CisJCWNyZWF0ZUVBdHRyaWJ1dGUoY29udHJvbEdyYXBoR2VuZXJhdG9yRUNsYXNzLCBDT05UUk9MX0dSQVBIX0dFTkVSQVRPUl9fVkFDQ0lOQVRJT05fRlJBQ1RJT04pOworCQljcmVhdGVFQXR0cmlidXRlKGNvbnRyb2xHcmFwaEdlbmVyYXRvckVDbGFzcywgQ09OVFJPTF9HUkFQSF9HRU5FUkFUT1JfX0lTT0xBVElPTl9GUkFDVElPTik7CisJCWNyZWF0ZUVBdHRyaWJ1dGUoY29udHJvbEdyYXBoR2VuZXJhdG9yRUNsYXNzLCBDT05UUk9MX0dSQVBIX0dFTkVSQVRPUl9fUE9QVUxBVElPTl9JREVOVElGSUVSKTsKKwkJY3JlYXRlRUF0dHJpYnV0ZShjb250cm9sR3JhcGhHZW5lcmF0b3JFQ2xhc3MsIENPTlRST0xfR1JBUEhfR0VORVJBVE9SX19MT0NBVElPTik7CisKKwkJaW50ZXJ2ZW50aW9uTGFiZWxWYWx1ZUVDbGFzcyA9IGNyZWF0ZUVDbGFzcyhJTlRFUlZFTlRJT05fTEFCRUxfVkFMVUUpOworCisJCXN0YW5kYXJkSW50ZXJ2ZW50aW9uTGFiZWxWYWx1ZUVDbGFzcyA9IGNyZWF0ZUVDbGFzcyhTVEFOREFSRF9JTlRFUlZFTlRJT05fTEFCRUxfVkFMVUUpOworCQljcmVhdGVFQXR0cmlidXRlKHN0YW5kYXJkSW50ZXJ2ZW50aW9uTGFiZWxWYWx1ZUVDbGFzcywgU1RBTkRBUkRfSU5URVJWRU5USU9OX0xBQkVMX1ZBTFVFX19WQUNDSU5BVElPTlMpOworCQljcmVhdGVFQXR0cmlidXRlKHN0YW5kYXJkSW50ZXJ2ZW50aW9uTGFiZWxWYWx1ZUVDbGFzcywgU1RBTkRBUkRfSU5URVJWRU5USU9OX0xBQkVMX1ZBTFVFX19JU09MQVRJT05TKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcml2YXRlIGJvb2xlYW4gaXNJbml0aWFsaXplZCA9IGZhbHNlOworCisJLyoqCisJICogQ29tcGxldGUgdGhlIGluaXRpYWxpemF0aW9uIG9mIHRoZSBwYWNrYWdlIGFuZCBpdHMgbWV0YS1tb2RlbC4gIFRoaXMKKwkgKiBtZXRob2QgaXMgZ3VhcmRlZCB0byBoYXZlIG5vIGFmZmVjdCBvbiBhbnkgaW52b2NhdGlvbiBidXQgaXRzIGZpcnN0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIGluaXRpYWxpemVQYWNrYWdlQ29udGVudHMoKSB7CisJCWlmIChpc0luaXRpYWxpemVkKSByZXR1cm47CisJCWlzSW5pdGlhbGl6ZWQgPSB0cnVlOworCisJCS8vIEluaXRpYWxpemUgcGFja2FnZQorCQlzZXROYW1lKGVOQU1FKTsKKwkJc2V0TnNQcmVmaXgoZU5TX1BSRUZJWCk7CisJCXNldE5zVVJJKGVOU19VUkkpOworCisJCS8vIE9idGFpbiBvdGhlciBkZXBlbmRlbnQgcGFja2FnZXMKKwkJR3JhcGhQYWNrYWdlIHRoZUdyYXBoUGFja2FnZSA9IChHcmFwaFBhY2thZ2UpRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RVBhY2thZ2UoR3JhcGhQYWNrYWdlLmVOU19VUkkpOworCQlFY29yZVBhY2thZ2UgdGhlRWNvcmVQYWNrYWdlID0gKEVjb3JlUGFja2FnZSlFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShFY29yZVBhY2thZ2UuZU5TX1VSSSk7CisJCUdyYXBoZ2VuZXJhdG9yc1BhY2thZ2UgdGhlR3JhcGhnZW5lcmF0b3JzUGFja2FnZSA9IChHcmFwaGdlbmVyYXRvcnNQYWNrYWdlKUVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVQYWNrYWdlKEdyYXBoZ2VuZXJhdG9yc1BhY2thZ2UuZU5TX1VSSSk7CisJCUNvbW1vblBhY2thZ2UgdGhlQ29tbW9uUGFja2FnZSA9IChDb21tb25QYWNrYWdlKUVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVQYWNrYWdlKENvbW1vblBhY2thZ2UuZU5TX1VSSSk7CisKKwkJLy8gQ3JlYXRlIHR5cGUgcGFyYW1ldGVycworCisJCS8vIFNldCBib3VuZHMgZm9yIHR5cGUgcGFyYW1ldGVycworCisJCS8vIEFkZCBzdXBlcnR5cGVzIHRvIGNsYXNzZXMKKwkJaW50ZXJ2ZW50aW9uTGFiZWxFQ2xhc3MuZ2V0RVN1cGVyVHlwZXMoKS5hZGQodGhlR3JhcGhQYWNrYWdlLmdldFN0YXRpY05vZGVMYWJlbCgpKTsKKwkJc3RhbmRhcmRJbnRlcnZlbnRpb25MYWJlbEVDbGFzcy5nZXRFU3VwZXJUeXBlcygpLmFkZCh0aGlzLmdldEludGVydmVudGlvbkxhYmVsKCkpOworCQljb250cm9sR3JhcGhHZW5lcmF0b3JFQ2xhc3MuZ2V0RVN1cGVyVHlwZXMoKS5hZGQodGhlR3JhcGhnZW5lcmF0b3JzUGFja2FnZS5nZXRHcmFwaEdlbmVyYXRvcigpKTsKKwkJaW50ZXJ2ZW50aW9uTGFiZWxWYWx1ZUVDbGFzcy5nZXRFU3VwZXJUeXBlcygpLmFkZCh0aGVHcmFwaFBhY2thZ2UuZ2V0TGFiZWxWYWx1ZSgpKTsKKwkJc3RhbmRhcmRJbnRlcnZlbnRpb25MYWJlbFZhbHVlRUNsYXNzLmdldEVTdXBlclR5cGVzKCkuYWRkKHRoaXMuZ2V0SW50ZXJ2ZW50aW9uTGFiZWxWYWx1ZSgpKTsKKworCQkvLyBJbml0aWFsaXplIGNsYXNzZXMgYW5kIGZlYXR1cmVzOyBhZGQgb3BlcmF0aW9ucyBhbmQgcGFyYW1ldGVycworCQlpbml0RUNsYXNzKGludGVydmVudGlvbkxhYmVsRUNsYXNzLCBJbnRlcnZlbnRpb25MYWJlbC5jbGFzcywgIkludGVydmVudGlvbkxhYmVsIiwgSVNfQUJTVFJBQ1QsICFJU19JTlRFUkZBQ0UsIElTX0dFTkVSQVRFRF9JTlNUQU5DRV9DTEFTUyk7CisKKwkJaW5pdEVDbGFzcyhzdGFuZGFyZEludGVydmVudGlvbkxhYmVsRUNsYXNzLCBTdGFuZGFyZEludGVydmVudGlvbkxhYmVsLmNsYXNzLCAiU3RhbmRhcmRJbnRlcnZlbnRpb25MYWJlbCIsICFJU19BQlNUUkFDVCwgIUlTX0lOVEVSRkFDRSwgSVNfR0VORVJBVEVEX0lOU1RBTkNFX0NMQVNTKTsKKwkJaW5pdEVBdHRyaWJ1dGUoZ2V0U3RhbmRhcmRJbnRlcnZlbnRpb25MYWJlbF9Qb3B1bGF0aW9uSWRlbnRpZmllcigpLCB0aGVFY29yZVBhY2thZ2UuZ2V0RVN0cmluZygpLCAicG9wdWxhdGlvbklkZW50aWZpZXIiLCAiaHVtYW4iLCAwLCAxLCBTdGFuZGFyZEludGVydmVudGlvbkxhYmVsLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOworCisJCWluaXRFQ2xhc3MoY29udHJvbEdyYXBoR2VuZXJhdG9yRUNsYXNzLCBDb250cm9sR3JhcGhHZW5lcmF0b3IuY2xhc3MsICJDb250cm9sR3JhcGhHZW5lcmF0b3IiLCAhSVNfQUJTVFJBQ1QsICFJU19JTlRFUkZBQ0UsIElTX0dFTkVSQVRFRF9JTlNUQU5DRV9DTEFTUyk7CisJCWluaXRFQXR0cmlidXRlKGdldENvbnRyb2xHcmFwaEdlbmVyYXRvcl9WYWNjaW5hdGlvbkZyYWN0aW9uKCksIHRoZUVjb3JlUGFja2FnZS5nZXRFRG91YmxlKCksICJ2YWNjaW5hdGlvbkZyYWN0aW9uIiwgIjAuMCIsIDAsIDEsIENvbnRyb2xHcmFwaEdlbmVyYXRvci5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsKKwkJaW5pdEVBdHRyaWJ1dGUoZ2V0Q29udHJvbEdyYXBoR2VuZXJhdG9yX0lzb2xhdGlvbkZyYWN0aW9uKCksIHRoZUVjb3JlUGFja2FnZS5nZXRFRG91YmxlKCksICJpc29sYXRpb25GcmFjdGlvbiIsICIwLjAiLCAwLCAxLCBDb250cm9sR3JhcGhHZW5lcmF0b3IuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7CisJCWluaXRFQXR0cmlidXRlKGdldENvbnRyb2xHcmFwaEdlbmVyYXRvcl9Qb3B1bGF0aW9uSWRlbnRpZmllcigpLCB0aGVFY29yZVBhY2thZ2UuZ2V0RVN0cmluZygpLCAicG9wdWxhdGlvbklkZW50aWZpZXIiLCAiaHVtYW4iLCAwLCAxLCBDb250cm9sR3JhcGhHZW5lcmF0b3IuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7CisJCWluaXRFQXR0cmlidXRlKGdldENvbnRyb2xHcmFwaEdlbmVyYXRvcl9Mb2NhdGlvbigpLCB0aGVDb21tb25QYWNrYWdlLmdldFVSSSgpLCAibG9jYXRpb24iLCBudWxsLCAwLCAxLCBDb250cm9sR3JhcGhHZW5lcmF0b3IuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7CisKKwkJaW5pdEVDbGFzcyhpbnRlcnZlbnRpb25MYWJlbFZhbHVlRUNsYXNzLCBJbnRlcnZlbnRpb25MYWJlbFZhbHVlLmNsYXNzLCAiSW50ZXJ2ZW50aW9uTGFiZWxWYWx1ZSIsIElTX0FCU1RSQUNULCAhSVNfSU5URVJGQUNFLCBJU19HRU5FUkFURURfSU5TVEFOQ0VfQ0xBU1MpOworCisJCWluaXRFQ2xhc3Moc3RhbmRhcmRJbnRlcnZlbnRpb25MYWJlbFZhbHVlRUNsYXNzLCBTdGFuZGFyZEludGVydmVudGlvbkxhYmVsVmFsdWUuY2xhc3MsICJTdGFuZGFyZEludGVydmVudGlvbkxhYmVsVmFsdWUiLCAhSVNfQUJTVFJBQ1QsICFJU19JTlRFUkZBQ0UsIElTX0dFTkVSQVRFRF9JTlNUQU5DRV9DTEFTUyk7CisJCWluaXRFQXR0cmlidXRlKGdldFN0YW5kYXJkSW50ZXJ2ZW50aW9uTGFiZWxWYWx1ZV9WYWNjaW5hdGlvbnMoKSwgdGhlRWNvcmVQYWNrYWdlLmdldEVEb3VibGUoKSwgInZhY2NpbmF0aW9ucyIsIG51bGwsIDAsIDEsIFN0YW5kYXJkSW50ZXJ2ZW50aW9uTGFiZWxWYWx1ZS5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsKKwkJaW5pdEVBdHRyaWJ1dGUoZ2V0U3RhbmRhcmRJbnRlcnZlbnRpb25MYWJlbFZhbHVlX0lzb2xhdGlvbnMoKSwgdGhlRWNvcmVQYWNrYWdlLmdldEVEb3VibGUoKSwgImlzb2xhdGlvbnMiLCBudWxsLCAwLCAxLCBTdGFuZGFyZEludGVydmVudGlvbkxhYmVsVmFsdWUuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7CisKKwkJLy8gQ3JlYXRlIHJlc291cmNlCisJCWNyZWF0ZVJlc291cmNlKGVOU19VUkkpOworCX0KKworfSAvL0ludGVydmVudGlvbnNQYWNrYWdlSW1wbApkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmludGVydmVudGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vaW50ZXJ2ZW50aW9ucy9pbXBsL1N0YW5kYXJkSW50ZXJ2ZW50aW9uTGFiZWxJbXBsLmphdmEgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uaW50ZXJ2ZW50aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9pbnRlcnZlbnRpb25zL2ltcGwvU3RhbmRhcmRJbnRlcnZlbnRpb25MYWJlbEltcGwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZGE4MWVlCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmludGVydmVudGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vaW50ZXJ2ZW50aW9ucy9pbXBsL1N0YW5kYXJkSW50ZXJ2ZW50aW9uTGFiZWxJbXBsLmphdmEKQEAgLTAsMCArMSwxNzEgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcnZlbnRpb25zLmltcGw7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIAorICogQ29weXJpZ2h0IChjKSAyMDExIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiAKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdCAKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sIAorICogCisgKiBDb250cmlidXRvcnM6IAorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiAKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uOworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzczsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5pbXBsLkVOb3RpZmljYXRpb25JbXBsOworCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcnZlbnRpb25zLkludGVydmVudGlvbnNQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uaW50ZXJ2ZW50aW9ucy5TdGFuZGFyZEludGVydmVudGlvbkxhYmVsOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiBBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+U3RhbmRhcmQgSW50ZXJ2ZW50aW9uIExhYmVsPC9iPjwvZW0+Jy4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogPHA+CisgKiBUaGUgZm9sbG93aW5nIGZlYXR1cmVzIGFyZSBpbXBsZW1lbnRlZDoKKyAqIDx1bD4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmludGVydmVudGlvbnMuaW1wbC5TdGFuZGFyZEludGVydmVudGlvbkxhYmVsSW1wbCNnZXRQb3B1bGF0aW9uSWRlbnRpZmllciA8ZW0+UG9wdWxhdGlvbiBJZGVudGlmaWVyPC9lbT59PC9saT4KKyAqIDwvdWw+CisgKiA8L3A+CisgKgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgU3RhbmRhcmRJbnRlcnZlbnRpb25MYWJlbEltcGwgZXh0ZW5kcyBJbnRlcnZlbnRpb25MYWJlbEltcGwgaW1wbGVtZW50cyBTdGFuZGFyZEludGVydmVudGlvbkxhYmVsIHsKKwkvKioKKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0UG9wdWxhdGlvbklkZW50aWZpZXIoKSA8ZW0+UG9wdWxhdGlvbiBJZGVudGlmaWVyPC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNnZXRQb3B1bGF0aW9uSWRlbnRpZmllcigpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBTdHJpbmcgUE9QVUxBVElPTl9JREVOVElGSUVSX0VERUZBVUxUID0gImh1bWFuIjsKKworCS8qKgorCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldFBvcHVsYXRpb25JZGVudGlmaWVyKCkgPGVtPlBvcHVsYXRpb24gSWRlbnRpZmllcjwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZ2V0UG9wdWxhdGlvbklkZW50aWZpZXIoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBTdHJpbmcgcG9wdWxhdGlvbklkZW50aWZpZXIgPSBQT1BVTEFUSU9OX0lERU5USUZJRVJfRURFRkFVTFQ7CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgU3RhbmRhcmRJbnRlcnZlbnRpb25MYWJlbEltcGwoKSB7CisJCXN1cGVyKCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIEVDbGFzcyBlU3RhdGljQ2xhc3MoKSB7CisJCXJldHVybiBJbnRlcnZlbnRpb25zUGFja2FnZS5MaXRlcmFscy5TVEFOREFSRF9JTlRFUlZFTlRJT05fTEFCRUw7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFN0cmluZyBnZXRQb3B1bGF0aW9uSWRlbnRpZmllcigpIHsKKwkJcmV0dXJuIHBvcHVsYXRpb25JZGVudGlmaWVyOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIHNldFBvcHVsYXRpb25JZGVudGlmaWVyKFN0cmluZyBuZXdQb3B1bGF0aW9uSWRlbnRpZmllcikgeworCQlTdHJpbmcgb2xkUG9wdWxhdGlvbklkZW50aWZpZXIgPSBwb3B1bGF0aW9uSWRlbnRpZmllcjsKKwkJcG9wdWxhdGlvbklkZW50aWZpZXIgPSBuZXdQb3B1bGF0aW9uSWRlbnRpZmllcjsKKwkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQorCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgSW50ZXJ2ZW50aW9uc1BhY2thZ2UuU1RBTkRBUkRfSU5URVJWRU5USU9OX0xBQkVMX19QT1BVTEFUSU9OX0lERU5USUZJRVIsIG9sZFBvcHVsYXRpb25JZGVudGlmaWVyLCBwb3B1bGF0aW9uSWRlbnRpZmllcikpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBPYmplY3QgZUdldChpbnQgZmVhdHVyZUlELCBib29sZWFuIHJlc29sdmUsIGJvb2xlYW4gY29yZVR5cGUpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJCWNhc2UgSW50ZXJ2ZW50aW9uc1BhY2thZ2UuU1RBTkRBUkRfSU5URVJWRU5USU9OX0xBQkVMX19QT1BVTEFUSU9OX0lERU5USUZJRVI6CisJCQkJcmV0dXJuIGdldFBvcHVsYXRpb25JZGVudGlmaWVyKCk7CisJCX0KKwkJcmV0dXJuIHN1cGVyLmVHZXQoZmVhdHVyZUlELCByZXNvbHZlLCBjb3JlVHlwZSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgZVNldChpbnQgZmVhdHVyZUlELCBPYmplY3QgbmV3VmFsdWUpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJCWNhc2UgSW50ZXJ2ZW50aW9uc1BhY2thZ2UuU1RBTkRBUkRfSU5URVJWRU5USU9OX0xBQkVMX19QT1BVTEFUSU9OX0lERU5USUZJRVI6CisJCQkJc2V0UG9wdWxhdGlvbklkZW50aWZpZXIoKFN0cmluZyluZXdWYWx1ZSk7CisJCQkJcmV0dXJuOworCQl9CisJCXN1cGVyLmVTZXQoZmVhdHVyZUlELCBuZXdWYWx1ZSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgZVVuc2V0KGludCBmZWF0dXJlSUQpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJCWNhc2UgSW50ZXJ2ZW50aW9uc1BhY2thZ2UuU1RBTkRBUkRfSU5URVJWRU5USU9OX0xBQkVMX19QT1BVTEFUSU9OX0lERU5USUZJRVI6CisJCQkJc2V0UG9wdWxhdGlvbklkZW50aWZpZXIoUE9QVUxBVElPTl9JREVOVElGSUVSX0VERUZBVUxUKTsKKwkJCQlyZXR1cm47CisJCX0KKwkJc3VwZXIuZVVuc2V0KGZlYXR1cmVJRCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIGJvb2xlYW4gZUlzU2V0KGludCBmZWF0dXJlSUQpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJCWNhc2UgSW50ZXJ2ZW50aW9uc1BhY2thZ2UuU1RBTkRBUkRfSU5URVJWRU5USU9OX0xBQkVMX19QT1BVTEFUSU9OX0lERU5USUZJRVI6CisJCQkJcmV0dXJuIFBPUFVMQVRJT05fSURFTlRJRklFUl9FREVGQVVMVCA9PSBudWxsID8gcG9wdWxhdGlvbklkZW50aWZpZXIgIT0gbnVsbCA6ICFQT1BVTEFUSU9OX0lERU5USUZJRVJfRURFRkFVTFQuZXF1YWxzKHBvcHVsYXRpb25JZGVudGlmaWVyKTsKKwkJfQorCQlyZXR1cm4gc3VwZXIuZUlzU2V0KGZlYXR1cmVJRCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIFN0cmluZyB0b1N0cmluZygpIHsKKwkJaWYgKGVJc1Byb3h5KCkpIHJldHVybiBzdXBlci50b1N0cmluZygpOworCisJCVN0cmluZ0J1ZmZlciByZXN1bHQgPSBuZXcgU3RyaW5nQnVmZmVyKHN1cGVyLnRvU3RyaW5nKCkpOworCQlyZXN1bHQuYXBwZW5kKCIgKHBvcHVsYXRpb25JZGVudGlmaWVyOiAiKTsKKwkJcmVzdWx0LmFwcGVuZChwb3B1bGF0aW9uSWRlbnRpZmllcik7CisJCXJlc3VsdC5hcHBlbmQoJyknKTsKKwkJcmV0dXJuIHJlc3VsdC50b1N0cmluZygpOworCX0KKworfSAvL1N0YW5kYXJkSW50ZXJ2ZW50aW9uTGFiZWxJbXBsCmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uaW50ZXJ2ZW50aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9pbnRlcnZlbnRpb25zL2ltcGwvU3RhbmRhcmRJbnRlcnZlbnRpb25MYWJlbFZhbHVlSW1wbC5qYXZhIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmludGVydmVudGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vaW50ZXJ2ZW50aW9ucy9pbXBsL1N0YW5kYXJkSW50ZXJ2ZW50aW9uTGFiZWxWYWx1ZUltcGwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NGMxMmIyCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmludGVydmVudGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vaW50ZXJ2ZW50aW9ucy9pbXBsL1N0YW5kYXJkSW50ZXJ2ZW50aW9uTGFiZWxWYWx1ZUltcGwuamF2YQpAQCAtMCwwICsxLDIyNSBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmludGVydmVudGlvbnMuaW1wbDsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogCisgKiBDb3B5cmlnaHQgKGMpIDIwMTEgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuIAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyAKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0IAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwgCisgKiAKKyAqIENvbnRyaWJ1dG9yczogCisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb247CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLmltcGwuRU5vdGlmaWNhdGlvbkltcGw7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmludGVydmVudGlvbnMuSW50ZXJ2ZW50aW9uc1BhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcnZlbnRpb25zLlN0YW5kYXJkSW50ZXJ2ZW50aW9uTGFiZWxWYWx1ZTsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPlN0YW5kYXJkIEludGVydmVudGlvbiBMYWJlbCBWYWx1ZTwvYj48L2VtPicuCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIDxwPgorICogVGhlIGZvbGxvd2luZyBmZWF0dXJlcyBhcmUgaW1wbGVtZW50ZWQ6CisgKiA8dWw+CisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcnZlbnRpb25zLmltcGwuU3RhbmRhcmRJbnRlcnZlbnRpb25MYWJlbFZhbHVlSW1wbCNnZXRWYWNjaW5hdGlvbnMgPGVtPlZhY2NpbmF0aW9uczwvZW0+fTwvbGk+CisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcnZlbnRpb25zLmltcGwuU3RhbmRhcmRJbnRlcnZlbnRpb25MYWJlbFZhbHVlSW1wbCNnZXRJc29sYXRpb25zIDxlbT5Jc29sYXRpb25zPC9lbT59PC9saT4KKyAqIDwvdWw+CisgKiA8L3A+CisgKgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgU3RhbmRhcmRJbnRlcnZlbnRpb25MYWJlbFZhbHVlSW1wbCBleHRlbmRzIEludGVydmVudGlvbkxhYmVsVmFsdWVJbXBsIGltcGxlbWVudHMgU3RhbmRhcmRJbnRlcnZlbnRpb25MYWJlbFZhbHVlIHsKKwkvKioKKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0VmFjY2luYXRpb25zKCkgPGVtPlZhY2NpbmF0aW9uczwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZ2V0VmFjY2luYXRpb25zKCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIGRvdWJsZSBWQUNDSU5BVElPTlNfRURFRkFVTFQgPSAwLjA7CisKKwkvKioKKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRWYWNjaW5hdGlvbnMoKSA8ZW0+VmFjY2luYXRpb25zPC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNnZXRWYWNjaW5hdGlvbnMoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBkb3VibGUgdmFjY2luYXRpb25zID0gVkFDQ0lOQVRJT05TX0VERUZBVUxUOworCisJLyoqCisJICogVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldElzb2xhdGlvbnMoKSA8ZW0+SXNvbGF0aW9uczwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZ2V0SXNvbGF0aW9ucygpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBkb3VibGUgSVNPTEFUSU9OU19FREVGQVVMVCA9IDAuMDsKKworCS8qKgorCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldElzb2xhdGlvbnMoKSA8ZW0+SXNvbGF0aW9uczwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZ2V0SXNvbGF0aW9ucygpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIGRvdWJsZSBpc29sYXRpb25zID0gSVNPTEFUSU9OU19FREVGQVVMVDsKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBTdGFuZGFyZEludGVydmVudGlvbkxhYmVsVmFsdWVJbXBsKCkgeworCQlzdXBlcigpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCBFQ2xhc3MgZVN0YXRpY0NsYXNzKCkgeworCQlyZXR1cm4gSW50ZXJ2ZW50aW9uc1BhY2thZ2UuTGl0ZXJhbHMuU1RBTkRBUkRfSU5URVJWRU5USU9OX0xBQkVMX1ZBTFVFOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBkb3VibGUgZ2V0VmFjY2luYXRpb25zKCkgeworCQlyZXR1cm4gdmFjY2luYXRpb25zOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIHNldFZhY2NpbmF0aW9ucyhkb3VibGUgbmV3VmFjY2luYXRpb25zKSB7CisJCWRvdWJsZSBvbGRWYWNjaW5hdGlvbnMgPSB2YWNjaW5hdGlvbnM7CisJCXZhY2NpbmF0aW9ucyA9IG5ld1ZhY2NpbmF0aW9uczsKKwkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQorCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgSW50ZXJ2ZW50aW9uc1BhY2thZ2UuU1RBTkRBUkRfSU5URVJWRU5USU9OX0xBQkVMX1ZBTFVFX19WQUNDSU5BVElPTlMsIG9sZFZhY2NpbmF0aW9ucywgdmFjY2luYXRpb25zKSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIGRvdWJsZSBnZXRJc29sYXRpb25zKCkgeworCQlyZXR1cm4gaXNvbGF0aW9uczsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRJc29sYXRpb25zKGRvdWJsZSBuZXdJc29sYXRpb25zKSB7CisJCWRvdWJsZSBvbGRJc29sYXRpb25zID0gaXNvbGF0aW9uczsKKwkJaXNvbGF0aW9ucyA9IG5ld0lzb2xhdGlvbnM7CisJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkKKwkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIEludGVydmVudGlvbnNQYWNrYWdlLlNUQU5EQVJEX0lOVEVSVkVOVElPTl9MQUJFTF9WQUxVRV9fSVNPTEFUSU9OUywgb2xkSXNvbGF0aW9ucywgaXNvbGF0aW9ucykpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBPYmplY3QgZUdldChpbnQgZmVhdHVyZUlELCBib29sZWFuIHJlc29sdmUsIGJvb2xlYW4gY29yZVR5cGUpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJCWNhc2UgSW50ZXJ2ZW50aW9uc1BhY2thZ2UuU1RBTkRBUkRfSU5URVJWRU5USU9OX0xBQkVMX1ZBTFVFX19WQUNDSU5BVElPTlM6CisJCQkJcmV0dXJuIGdldFZhY2NpbmF0aW9ucygpOworCQkJY2FzZSBJbnRlcnZlbnRpb25zUGFja2FnZS5TVEFOREFSRF9JTlRFUlZFTlRJT05fTEFCRUxfVkFMVUVfX0lTT0xBVElPTlM6CisJCQkJcmV0dXJuIGdldElzb2xhdGlvbnMoKTsKKwkJfQorCQlyZXR1cm4gc3VwZXIuZUdldChmZWF0dXJlSUQsIHJlc29sdmUsIGNvcmVUeXBlKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBlU2V0KGludCBmZWF0dXJlSUQsIE9iamVjdCBuZXdWYWx1ZSkgeworCQlzd2l0Y2ggKGZlYXR1cmVJRCkgeworCQkJY2FzZSBJbnRlcnZlbnRpb25zUGFja2FnZS5TVEFOREFSRF9JTlRFUlZFTlRJT05fTEFCRUxfVkFMVUVfX1ZBQ0NJTkFUSU9OUzoKKwkJCQlzZXRWYWNjaW5hdGlvbnMoKERvdWJsZSluZXdWYWx1ZSk7CisJCQkJcmV0dXJuOworCQkJY2FzZSBJbnRlcnZlbnRpb25zUGFja2FnZS5TVEFOREFSRF9JTlRFUlZFTlRJT05fTEFCRUxfVkFMVUVfX0lTT0xBVElPTlM6CisJCQkJc2V0SXNvbGF0aW9ucygoRG91YmxlKW5ld1ZhbHVlKTsKKwkJCQlyZXR1cm47CisJCX0KKwkJc3VwZXIuZVNldChmZWF0dXJlSUQsIG5ld1ZhbHVlKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBlVW5zZXQoaW50IGZlYXR1cmVJRCkgeworCQlzd2l0Y2ggKGZlYXR1cmVJRCkgeworCQkJY2FzZSBJbnRlcnZlbnRpb25zUGFja2FnZS5TVEFOREFSRF9JTlRFUlZFTlRJT05fTEFCRUxfVkFMVUVfX1ZBQ0NJTkFUSU9OUzoKKwkJCQlzZXRWYWNjaW5hdGlvbnMoVkFDQ0lOQVRJT05TX0VERUZBVUxUKTsKKwkJCQlyZXR1cm47CisJCQljYXNlIEludGVydmVudGlvbnNQYWNrYWdlLlNUQU5EQVJEX0lOVEVSVkVOVElPTl9MQUJFTF9WQUxVRV9fSVNPTEFUSU9OUzoKKwkJCQlzZXRJc29sYXRpb25zKElTT0xBVElPTlNfRURFRkFVTFQpOworCQkJCXJldHVybjsKKwkJfQorCQlzdXBlci5lVW5zZXQoZmVhdHVyZUlEKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgYm9vbGVhbiBlSXNTZXQoaW50IGZlYXR1cmVJRCkgeworCQlzd2l0Y2ggKGZlYXR1cmVJRCkgeworCQkJY2FzZSBJbnRlcnZlbnRpb25zUGFja2FnZS5TVEFOREFSRF9JTlRFUlZFTlRJT05fTEFCRUxfVkFMVUVfX1ZBQ0NJTkFUSU9OUzoKKwkJCQlyZXR1cm4gdmFjY2luYXRpb25zICE9IFZBQ0NJTkFUSU9OU19FREVGQVVMVDsKKwkJCWNhc2UgSW50ZXJ2ZW50aW9uc1BhY2thZ2UuU1RBTkRBUkRfSU5URVJWRU5USU9OX0xBQkVMX1ZBTFVFX19JU09MQVRJT05TOgorCQkJCXJldHVybiBpc29sYXRpb25zICE9IElTT0xBVElPTlNfRURFRkFVTFQ7CisJCX0KKwkJcmV0dXJuIHN1cGVyLmVJc1NldChmZWF0dXJlSUQpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKSB7CisJCWlmIChlSXNQcm94eSgpKSByZXR1cm4gc3VwZXIudG9TdHJpbmcoKTsKKworCQlTdHJpbmdCdWZmZXIgcmVzdWx0ID0gbmV3IFN0cmluZ0J1ZmZlcihzdXBlci50b1N0cmluZygpKTsKKwkJcmVzdWx0LmFwcGVuZCgiICh2YWNjaW5hdGlvbnM6ICIpOworCQlyZXN1bHQuYXBwZW5kKHZhY2NpbmF0aW9ucyk7CisJCXJlc3VsdC5hcHBlbmQoIiwgaXNvbGF0aW9uczogIik7CisJCXJlc3VsdC5hcHBlbmQoaXNvbGF0aW9ucyk7CisJCXJlc3VsdC5hcHBlbmQoJyknKTsKKwkJcmV0dXJuIHJlc3VsdC50b1N0cmluZygpOworCX0KKworfSAvL1N0YW5kYXJkSW50ZXJ2ZW50aW9uTGFiZWxWYWx1ZUltcGwKZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcnZlbnRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2ludGVydmVudGlvbnMvcHJvdmlkZXIvQ29udHJvbEdyYXBoR2VuZXJhdG9ySXRlbVByb3ZpZGVyLmphdmEgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uaW50ZXJ2ZW50aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9pbnRlcnZlbnRpb25zL3Byb3ZpZGVyL0NvbnRyb2xHcmFwaEdlbmVyYXRvckl0ZW1Qcm92aWRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFiZjRmNjQKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uaW50ZXJ2ZW50aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9pbnRlcnZlbnRpb25zL3Byb3ZpZGVyL0NvbnRyb2xHcmFwaEdlbmVyYXRvckl0ZW1Qcm92aWRlci5qYXZhCkBAIC0wLDAgKzEsMjUxIEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uaW50ZXJ2ZW50aW9ucy5wcm92aWRlcjsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogCisgKiBDb3B5cmlnaHQgKGMpIDIwMTEgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuIAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyAKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0IAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwgCisgKiAKKyAqIENvbnRyaWJ1dG9yczogCisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworCitpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5BZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb247CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuUmVzb3VyY2VMb2NhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5VUkk7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5Db21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklFZGl0aW5nRG9tYWluSXRlbVByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtTGFiZWxQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbVByb3BlcnR5RGVzY3JpcHRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbVByb3BlcnR5U291cmNlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklTdHJ1Y3R1cmVkSXRlbUNvbnRlbnRQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JVHJlZUl0ZW1Db250ZW50UHJvdmlkZXI7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JdGVtUHJvcGVydHlEZXNjcmlwdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLlZpZXdlck5vdGlmaWNhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmdyYXBoZ2VuZXJhdG9ycy5wcm92aWRlci5HcmFwaEdlbmVyYXRvckl0ZW1Qcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmludGVydmVudGlvbnMuQ29udHJvbEdyYXBoR2VuZXJhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uaW50ZXJ2ZW50aW9ucy5JbnRlcnZlbnRpb25zUGFja2FnZTsKKworLyoqCisgKiBUaGlzIGlzIHRoZSBpdGVtIHByb3ZpZGVyIGFkYXB0ZXIgZm9yIGEge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uaW50ZXJ2ZW50aW9ucy5Db250cm9sR3JhcGhHZW5lcmF0b3J9IG9iamVjdC4KKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIENvbnRyb2xHcmFwaEdlbmVyYXRvckl0ZW1Qcm92aWRlcgorCWV4dGVuZHMgR3JhcGhHZW5lcmF0b3JJdGVtUHJvdmlkZXIKKwlpbXBsZW1lbnRzCisJCUlFZGl0aW5nRG9tYWluSXRlbVByb3ZpZGVyLAorCQlJU3RydWN0dXJlZEl0ZW1Db250ZW50UHJvdmlkZXIsCisJCUlUcmVlSXRlbUNvbnRlbnRQcm92aWRlciwKKwkJSUl0ZW1MYWJlbFByb3ZpZGVyLAorCQlJSXRlbVByb3BlcnR5U291cmNlIHsKKwkvKioKKwkgKiBUaGlzIGNvbnN0cnVjdHMgYW4gaW5zdGFuY2UgZnJvbSBhIGZhY3RvcnkgYW5kIGEgbm90aWZpZXIuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIENvbnRyb2xHcmFwaEdlbmVyYXRvckl0ZW1Qcm92aWRlcihBZGFwdGVyRmFjdG9yeSBhZGFwdGVyRmFjdG9yeSkgeworCQlzdXBlcihhZGFwdGVyRmFjdG9yeSk7CisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIHRoZSBwcm9wZXJ0eSBkZXNjcmlwdG9ycyBmb3IgdGhlIGFkYXB0ZWQgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIExpc3Q8SUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I+IGdldFByb3BlcnR5RGVzY3JpcHRvcnMoT2JqZWN0IG9iamVjdCkgeworCQlpZiAoaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMgPT0gbnVsbCkgeworCQkJc3VwZXIuZ2V0UHJvcGVydHlEZXNjcmlwdG9ycyhvYmplY3QpOworCisJCQlhZGRWYWNjaW5hdGlvbkZyYWN0aW9uUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCk7CisJCQlhZGRJc29sYXRpb25GcmFjdGlvblByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QpOworCQkJYWRkUG9wdWxhdGlvbklkZW50aWZpZXJQcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0KTsKKwkJCWFkZExvY2F0aW9uUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCk7CisJCX0KKwkJcmV0dXJuIGl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzOworCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyBhIHByb3BlcnR5IGRlc2NyaXB0b3IgZm9yIHRoZSBWYWNjaW5hdGlvbiBGcmFjdGlvbiBmZWF0dXJlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIGFkZFZhY2NpbmF0aW9uRnJhY3Rpb25Qcm9wZXJ0eURlc2NyaXB0b3IoT2JqZWN0IG9iamVjdCkgeworCQlpdGVtUHJvcGVydHlEZXNjcmlwdG9ycy5hZGQKKwkJCShjcmVhdGVJdGVtUHJvcGVydHlEZXNjcmlwdG9yCisJCQkJKCgoQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSlhZGFwdGVyRmFjdG9yeSkuZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCksCisJCQkJIGdldFJlc291cmNlTG9jYXRvcigpLAorCQkJCSBnZXRTdHJpbmcoIl9VSV9Db250cm9sR3JhcGhHZW5lcmF0b3JfdmFjY2luYXRpb25GcmFjdGlvbl9mZWF0dXJlIiksCisJCQkJIGdldFN0cmluZygiX1VJX1Byb3BlcnR5RGVzY3JpcHRvcl9kZXNjcmlwdGlvbiIsICJfVUlfQ29udHJvbEdyYXBoR2VuZXJhdG9yX3ZhY2NpbmF0aW9uRnJhY3Rpb25fZmVhdHVyZSIsICJfVUlfQ29udHJvbEdyYXBoR2VuZXJhdG9yX3R5cGUiKSwKKwkJCQkgSW50ZXJ2ZW50aW9uc1BhY2thZ2UuTGl0ZXJhbHMuQ09OVFJPTF9HUkFQSF9HRU5FUkFUT1JfX1ZBQ0NJTkFUSU9OX0ZSQUNUSU9OLAorCQkJCSB0cnVlLAorCQkJCSBmYWxzZSwKKwkJCQkgZmFsc2UsCisJCQkJIEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IuUkVBTF9WQUxVRV9JTUFHRSwKKwkJCQkgbnVsbCwKKwkJCQkgbnVsbCkpOworCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyBhIHByb3BlcnR5IGRlc2NyaXB0b3IgZm9yIHRoZSBJc29sYXRpb24gRnJhY3Rpb24gZmVhdHVyZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBhZGRJc29sYXRpb25GcmFjdGlvblByb3BlcnR5RGVzY3JpcHRvcihPYmplY3Qgb2JqZWN0KSB7CisJCWl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzLmFkZAorCQkJKGNyZWF0ZUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IKKwkJCQkoKChDb21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5KWFkYXB0ZXJGYWN0b3J5KS5nZXRSb290QWRhcHRlckZhY3RvcnkoKSwKKwkJCQkgZ2V0UmVzb3VyY2VMb2NhdG9yKCksCisJCQkJIGdldFN0cmluZygiX1VJX0NvbnRyb2xHcmFwaEdlbmVyYXRvcl9pc29sYXRpb25GcmFjdGlvbl9mZWF0dXJlIiksCisJCQkJIGdldFN0cmluZygiX1VJX1Byb3BlcnR5RGVzY3JpcHRvcl9kZXNjcmlwdGlvbiIsICJfVUlfQ29udHJvbEdyYXBoR2VuZXJhdG9yX2lzb2xhdGlvbkZyYWN0aW9uX2ZlYXR1cmUiLCAiX1VJX0NvbnRyb2xHcmFwaEdlbmVyYXRvcl90eXBlIiksCisJCQkJIEludGVydmVudGlvbnNQYWNrYWdlLkxpdGVyYWxzLkNPTlRST0xfR1JBUEhfR0VORVJBVE9SX19JU09MQVRJT05fRlJBQ1RJT04sCisJCQkJIHRydWUsCisJCQkJIGZhbHNlLAorCQkJCSBmYWxzZSwKKwkJCQkgSXRlbVByb3BlcnR5RGVzY3JpcHRvci5SRUFMX1ZBTFVFX0lNQUdFLAorCQkJCSBudWxsLAorCQkJCSBudWxsKSk7CisJfQorCisJLyoqCisJICogVGhpcyBhZGRzIGEgcHJvcGVydHkgZGVzY3JpcHRvciBmb3IgdGhlIFBvcHVsYXRpb24gSWRlbnRpZmllciBmZWF0dXJlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIGFkZFBvcHVsYXRpb25JZGVudGlmaWVyUHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdCBvYmplY3QpIHsKKwkJaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMuYWRkCisJCQkoY3JlYXRlSXRlbVByb3BlcnR5RGVzY3JpcHRvcgorCQkJCSgoKENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnkpYWRhcHRlckZhY3RvcnkpLmdldFJvb3RBZGFwdGVyRmFjdG9yeSgpLAorCQkJCSBnZXRSZXNvdXJjZUxvY2F0b3IoKSwKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfQ29udHJvbEdyYXBoR2VuZXJhdG9yX3BvcHVsYXRpb25JZGVudGlmaWVyX2ZlYXR1cmUiKSwKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfUHJvcGVydHlEZXNjcmlwdG9yX2Rlc2NyaXB0aW9uIiwgIl9VSV9Db250cm9sR3JhcGhHZW5lcmF0b3JfcG9wdWxhdGlvbklkZW50aWZpZXJfZmVhdHVyZSIsICJfVUlfQ29udHJvbEdyYXBoR2VuZXJhdG9yX3R5cGUiKSwKKwkJCQkgSW50ZXJ2ZW50aW9uc1BhY2thZ2UuTGl0ZXJhbHMuQ09OVFJPTF9HUkFQSF9HRU5FUkFUT1JfX1BPUFVMQVRJT05fSURFTlRJRklFUiwKKwkJCQkgdHJ1ZSwKKwkJCQkgZmFsc2UsCisJCQkJIGZhbHNlLAorCQkJCSBJdGVtUHJvcGVydHlEZXNjcmlwdG9yLkdFTkVSSUNfVkFMVUVfSU1BR0UsCisJCQkJIG51bGwsCisJCQkJIG51bGwpKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFkZHMgYSBwcm9wZXJ0eSBkZXNjcmlwdG9yIGZvciB0aGUgTG9jYXRpb24gZmVhdHVyZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBhZGRMb2NhdGlvblByb3BlcnR5RGVzY3JpcHRvcihPYmplY3Qgb2JqZWN0KSB7CisJCWl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzLmFkZAorCQkJKGNyZWF0ZUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IKKwkJCQkoKChDb21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5KWFkYXB0ZXJGYWN0b3J5KS5nZXRSb290QWRhcHRlckZhY3RvcnkoKSwKKwkJCQkgZ2V0UmVzb3VyY2VMb2NhdG9yKCksCisJCQkJIGdldFN0cmluZygiX1VJX0NvbnRyb2xHcmFwaEdlbmVyYXRvcl9sb2NhdGlvbl9mZWF0dXJlIiksCisJCQkJIGdldFN0cmluZygiX1VJX1Byb3BlcnR5RGVzY3JpcHRvcl9kZXNjcmlwdGlvbiIsICJfVUlfQ29udHJvbEdyYXBoR2VuZXJhdG9yX2xvY2F0aW9uX2ZlYXR1cmUiLCAiX1VJX0NvbnRyb2xHcmFwaEdlbmVyYXRvcl90eXBlIiksCisJCQkJIEludGVydmVudGlvbnNQYWNrYWdlLkxpdGVyYWxzLkNPTlRST0xfR1JBUEhfR0VORVJBVE9SX19MT0NBVElPTiwKKwkJCQkgdHJ1ZSwKKwkJCQkgZmFsc2UsCisJCQkJIGZhbHNlLAorCQkJCSBJdGVtUHJvcGVydHlEZXNjcmlwdG9yLkdFTkVSSUNfVkFMVUVfSU1BR0UsCisJCQkJIG51bGwsCisJCQkJIG51bGwpKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgYm9vbGVhbiBoYXNDaGlsZHJlbihPYmplY3Qgb2JqZWN0KSB7CisJCXJldHVybiBoYXNDaGlsZHJlbihvYmplY3QsIHRydWUpOworCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyBDb250cm9sR3JhcGhHZW5lcmF0b3IuZ2lmLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBPYmplY3QgZ2V0SW1hZ2UoT2JqZWN0IG9iamVjdCkgeworCQlyZXR1cm4gb3ZlcmxheUltYWdlKG9iamVjdCwgZ2V0UmVzb3VyY2VMb2NhdG9yKCkuZ2V0SW1hZ2UoImZ1bGwvb2JqMTYvQ29udHJvbEdyYXBoR2VuZXJhdG9yIikpOworCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyB0aGUgbGFiZWwgdGV4dCBmb3IgdGhlIGFkYXB0ZWQgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIFN0cmluZyBnZXRUZXh0KE9iamVjdCBvYmplY3QpIHsKKwkJVVJJIGxhYmVsVmFsdWUgPSAoKENvbnRyb2xHcmFwaEdlbmVyYXRvcilvYmplY3QpLmdldFVSSSgpOworCQlTdHJpbmcgbGFiZWwgPSBsYWJlbFZhbHVlID09IG51bGwgPyBudWxsIDogbGFiZWxWYWx1ZS50b1N0cmluZygpOworCQlyZXR1cm4gbGFiZWwgPT0gbnVsbCB8fCBsYWJlbC5sZW5ndGgoKSA9PSAwID8KKwkJCWdldFN0cmluZygiX1VJX0NvbnRyb2xHcmFwaEdlbmVyYXRvcl90eXBlIikgOgorCQkJZ2V0U3RyaW5nKCJfVUlfQ29udHJvbEdyYXBoR2VuZXJhdG9yX3R5cGUiKSArICIgIiArIGxhYmVsOworCX0KKworCS8qKgorCSAqIFRoaXMgaGFuZGxlcyBtb2RlbCBub3RpZmljYXRpb25zIGJ5IGNhbGxpbmcge0BsaW5rICN1cGRhdGVDaGlsZHJlbn0gdG8gdXBkYXRlIGFueSBjYWNoZWQKKwkgKiBjaGlsZHJlbiBhbmQgYnkgY3JlYXRpbmcgYSB2aWV3ZXIgbm90aWZpY2F0aW9uLCB3aGljaCBpdCBwYXNzZXMgdG8ge0BsaW5rICNmaXJlTm90aWZ5Q2hhbmdlZH0uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgbm90aWZ5Q2hhbmdlZChOb3RpZmljYXRpb24gbm90aWZpY2F0aW9uKSB7CisJCXVwZGF0ZUNoaWxkcmVuKG5vdGlmaWNhdGlvbik7CisKKwkJc3dpdGNoIChub3RpZmljYXRpb24uZ2V0RmVhdHVyZUlEKENvbnRyb2xHcmFwaEdlbmVyYXRvci5jbGFzcykpIHsKKwkJCWNhc2UgSW50ZXJ2ZW50aW9uc1BhY2thZ2UuQ09OVFJPTF9HUkFQSF9HRU5FUkFUT1JfX1ZBQ0NJTkFUSU9OX0ZSQUNUSU9OOgorCQkJY2FzZSBJbnRlcnZlbnRpb25zUGFja2FnZS5DT05UUk9MX0dSQVBIX0dFTkVSQVRPUl9fSVNPTEFUSU9OX0ZSQUNUSU9OOgorCQkJY2FzZSBJbnRlcnZlbnRpb25zUGFja2FnZS5DT05UUk9MX0dSQVBIX0dFTkVSQVRPUl9fUE9QVUxBVElPTl9JREVOVElGSUVSOgorCQkJY2FzZSBJbnRlcnZlbnRpb25zUGFja2FnZS5DT05UUk9MX0dSQVBIX0dFTkVSQVRPUl9fTE9DQVRJT046CisJCQkJZmlyZU5vdGlmeUNoYW5nZWQobmV3IFZpZXdlck5vdGlmaWNhdGlvbihub3RpZmljYXRpb24sIG5vdGlmaWNhdGlvbi5nZXROb3RpZmllcigpLCBmYWxzZSwgdHJ1ZSkpOworCQkJCXJldHVybjsKKwkJfQorCQlzdXBlci5ub3RpZnlDaGFuZ2VkKG5vdGlmaWNhdGlvbik7CisJfQorCisJLyoqCisJICogVGhpcyBhZGRzIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuZWRpdC5jb21tYW5kLkNvbW1hbmRQYXJhbWV0ZXJ9cyBkZXNjcmliaW5nIHRoZSBjaGlsZHJlbgorCSAqIHRoYXQgY2FuIGJlIGNyZWF0ZWQgdW5kZXIgdGhpcyBvYmplY3QuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgY29sbGVjdE5ld0NoaWxkRGVzY3JpcHRvcnMoQ29sbGVjdGlvbjxPYmplY3Q+IG5ld0NoaWxkRGVzY3JpcHRvcnMsIE9iamVjdCBvYmplY3QpIHsKKwkJc3VwZXIuY29sbGVjdE5ld0NoaWxkRGVzY3JpcHRvcnMobmV3Q2hpbGREZXNjcmlwdG9ycywgb2JqZWN0KTsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm4gdGhlIHJlc291cmNlIGxvY2F0b3IgZm9yIHRoaXMgaXRlbSBwcm92aWRlcidzIHJlc291cmNlcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgUmVzb3VyY2VMb2NhdG9yIGdldFJlc291cmNlTG9jYXRvcigpIHsKKwkJcmV0dXJuIEludGVydmVudGlvbnNFZGl0UGx1Z2luLklOU1RBTkNFOworCX0KKworfQpkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmludGVydmVudGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vaW50ZXJ2ZW50aW9ucy9wcm92aWRlci9JbnRlcnZlbnRpb25MYWJlbEl0ZW1Qcm92aWRlci5qYXZhIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmludGVydmVudGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vaW50ZXJ2ZW50aW9ucy9wcm92aWRlci9JbnRlcnZlbnRpb25MYWJlbEl0ZW1Qcm92aWRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFlZjdmYjcKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uaW50ZXJ2ZW50aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9pbnRlcnZlbnRpb25zL3Byb3ZpZGVyL0ludGVydmVudGlvbkxhYmVsSXRlbVByb3ZpZGVyLmphdmEKQEAgLTAsMCArMSwxMzUgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcnZlbnRpb25zLnByb3ZpZGVyOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAKKyAqIENvcHlyaWdodCAoYykgMjAxMSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4gCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIAorICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wIAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQgCisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbCAKKyAqIAorICogQ29udHJpYnV0b3JzOiAKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCitpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5BZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb247CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuUmVzb3VyY2VMb2NhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5VUkk7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JRWRpdGluZ0RvbWFpbkl0ZW1Qcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbUxhYmVsUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1Qcm9wZXJ0eVNvdXJjZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JU3RydWN0dXJlZEl0ZW1Db250ZW50UHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVRyZWVJdGVtQ29udGVudFByb3ZpZGVyOworCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLnByb3ZpZGVyLlN0YXRpY05vZGVMYWJlbEl0ZW1Qcm92aWRlcjsKKworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uaW50ZXJ2ZW50aW9ucy5JbnRlcnZlbnRpb25MYWJlbDsKKworLyoqCisgKiBUaGlzIGlzIHRoZSBpdGVtIHByb3ZpZGVyIGFkYXB0ZXIgZm9yIGEge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uaW50ZXJ2ZW50aW9ucy5JbnRlcnZlbnRpb25MYWJlbH0gb2JqZWN0LgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgSW50ZXJ2ZW50aW9uTGFiZWxJdGVtUHJvdmlkZXIKKwlleHRlbmRzIFN0YXRpY05vZGVMYWJlbEl0ZW1Qcm92aWRlcgorCWltcGxlbWVudHMKKwkJSUVkaXRpbmdEb21haW5JdGVtUHJvdmlkZXIsCisJCUlTdHJ1Y3R1cmVkSXRlbUNvbnRlbnRQcm92aWRlciwKKwkJSVRyZWVJdGVtQ29udGVudFByb3ZpZGVyLAorCQlJSXRlbUxhYmVsUHJvdmlkZXIsCisJCUlJdGVtUHJvcGVydHlTb3VyY2UgeworCS8qKgorCSAqIFRoaXMgY29uc3RydWN0cyBhbiBpbnN0YW5jZSBmcm9tIGEgZmFjdG9yeSBhbmQgYSBub3RpZmllci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgSW50ZXJ2ZW50aW9uTGFiZWxJdGVtUHJvdmlkZXIoQWRhcHRlckZhY3RvcnkgYWRhcHRlckZhY3RvcnkpIHsKKwkJc3VwZXIoYWRhcHRlckZhY3RvcnkpOworCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyB0aGUgcHJvcGVydHkgZGVzY3JpcHRvcnMgZm9yIHRoZSBhZGFwdGVkIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBMaXN0PElJdGVtUHJvcGVydHlEZXNjcmlwdG9yPiBnZXRQcm9wZXJ0eURlc2NyaXB0b3JzKE9iamVjdCBvYmplY3QpIHsKKwkJaWYgKGl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzID09IG51bGwpIHsKKwkJCXN1cGVyLmdldFByb3BlcnR5RGVzY3JpcHRvcnMob2JqZWN0KTsKKworCQl9CisJCXJldHVybiBpdGVtUHJvcGVydHlEZXNjcmlwdG9yczsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgYm9vbGVhbiBoYXNDaGlsZHJlbihPYmplY3Qgb2JqZWN0KSB7CisJCXJldHVybiBoYXNDaGlsZHJlbihvYmplY3QsIHRydWUpOworCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyB0aGUgbGFiZWwgdGV4dCBmb3IgdGhlIGFkYXB0ZWQgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIFN0cmluZyBnZXRUZXh0KE9iamVjdCBvYmplY3QpIHsKKwkJVVJJIGxhYmVsVmFsdWUgPSAoKEludGVydmVudGlvbkxhYmVsKW9iamVjdCkuZ2V0VVJJKCk7CisJCVN0cmluZyBsYWJlbCA9IGxhYmVsVmFsdWUgPT0gbnVsbCA/IG51bGwgOiBsYWJlbFZhbHVlLnRvU3RyaW5nKCk7CisJCXJldHVybiBsYWJlbCA9PSBudWxsIHx8IGxhYmVsLmxlbmd0aCgpID09IDAgPworCQkJZ2V0U3RyaW5nKCJfVUlfSW50ZXJ2ZW50aW9uTGFiZWxfdHlwZSIpIDoKKwkJCWdldFN0cmluZygiX1VJX0ludGVydmVudGlvbkxhYmVsX3R5cGUiKSArICIgIiArIGxhYmVsOworCX0KKworCS8qKgorCSAqIFRoaXMgaGFuZGxlcyBtb2RlbCBub3RpZmljYXRpb25zIGJ5IGNhbGxpbmcge0BsaW5rICN1cGRhdGVDaGlsZHJlbn0gdG8gdXBkYXRlIGFueSBjYWNoZWQKKwkgKiBjaGlsZHJlbiBhbmQgYnkgY3JlYXRpbmcgYSB2aWV3ZXIgbm90aWZpY2F0aW9uLCB3aGljaCBpdCBwYXNzZXMgdG8ge0BsaW5rICNmaXJlTm90aWZ5Q2hhbmdlZH0uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgbm90aWZ5Q2hhbmdlZChOb3RpZmljYXRpb24gbm90aWZpY2F0aW9uKSB7CisJCXVwZGF0ZUNoaWxkcmVuKG5vdGlmaWNhdGlvbik7CisJCXN1cGVyLm5vdGlmeUNoYW5nZWQobm90aWZpY2F0aW9uKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFkZHMge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lZGl0LmNvbW1hbmQuQ29tbWFuZFBhcmFtZXRlcn1zIGRlc2NyaWJpbmcgdGhlIGNoaWxkcmVuCisJICogdGhhdCBjYW4gYmUgY3JlYXRlZCB1bmRlciB0aGlzIG9iamVjdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgdm9pZCBjb2xsZWN0TmV3Q2hpbGREZXNjcmlwdG9ycyhDb2xsZWN0aW9uPE9iamVjdD4gbmV3Q2hpbGREZXNjcmlwdG9ycywgT2JqZWN0IG9iamVjdCkgeworCQlzdXBlci5jb2xsZWN0TmV3Q2hpbGREZXNjcmlwdG9ycyhuZXdDaGlsZERlc2NyaXB0b3JzLCBvYmplY3QpOworCX0KKworCS8qKgorCSAqIFJldHVybiB0aGUgcmVzb3VyY2UgbG9jYXRvciBmb3IgdGhpcyBpdGVtIHByb3ZpZGVyJ3MgcmVzb3VyY2VzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBSZXNvdXJjZUxvY2F0b3IgZ2V0UmVzb3VyY2VMb2NhdG9yKCkgeworCQlyZXR1cm4gSW50ZXJ2ZW50aW9uc0VkaXRQbHVnaW4uSU5TVEFOQ0U7CisJfQorCit9CmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uaW50ZXJ2ZW50aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9pbnRlcnZlbnRpb25zL3Byb3ZpZGVyL0ludGVydmVudGlvbkxhYmVsVmFsdWVJdGVtUHJvdmlkZXIuamF2YSBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcnZlbnRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2ludGVydmVudGlvbnMvcHJvdmlkZXIvSW50ZXJ2ZW50aW9uTGFiZWxWYWx1ZUl0ZW1Qcm92aWRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc2ZjgzOTYKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uaW50ZXJ2ZW50aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9pbnRlcnZlbnRpb25zL3Byb3ZpZGVyL0ludGVydmVudGlvbkxhYmVsVmFsdWVJdGVtUHJvdmlkZXIuamF2YQpAQCAtMCwwICsxLDEyOCBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmludGVydmVudGlvbnMucHJvdmlkZXI7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIAorICogQ29weXJpZ2h0IChjKSAyMDExIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiAKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdCAKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sIAorICogCisgKiBDb250cmlidXRvcnM6IAorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiAKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LkFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbjsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5SZXNvdXJjZUxvY2F0b3I7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JRWRpdGluZ0RvbWFpbkl0ZW1Qcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbUxhYmVsUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1Qcm9wZXJ0eVNvdXJjZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JU3RydWN0dXJlZEl0ZW1Db250ZW50UHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVRyZWVJdGVtQ29udGVudFByb3ZpZGVyOworCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLnByb3ZpZGVyLkxhYmVsVmFsdWVJdGVtUHJvdmlkZXI7CisKKy8qKgorICogVGhpcyBpcyB0aGUgaXRlbSBwcm92aWRlciBhZGFwdGVyIGZvciBhIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmludGVydmVudGlvbnMuSW50ZXJ2ZW50aW9uTGFiZWxWYWx1ZX0gb2JqZWN0LgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgSW50ZXJ2ZW50aW9uTGFiZWxWYWx1ZUl0ZW1Qcm92aWRlcgorCWV4dGVuZHMgTGFiZWxWYWx1ZUl0ZW1Qcm92aWRlcgorCWltcGxlbWVudHMKKwkJSUVkaXRpbmdEb21haW5JdGVtUHJvdmlkZXIsCisJCUlTdHJ1Y3R1cmVkSXRlbUNvbnRlbnRQcm92aWRlciwKKwkJSVRyZWVJdGVtQ29udGVudFByb3ZpZGVyLAorCQlJSXRlbUxhYmVsUHJvdmlkZXIsCisJCUlJdGVtUHJvcGVydHlTb3VyY2UgeworCS8qKgorCSAqIFRoaXMgY29uc3RydWN0cyBhbiBpbnN0YW5jZSBmcm9tIGEgZmFjdG9yeSBhbmQgYSBub3RpZmllci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgSW50ZXJ2ZW50aW9uTGFiZWxWYWx1ZUl0ZW1Qcm92aWRlcihBZGFwdGVyRmFjdG9yeSBhZGFwdGVyRmFjdG9yeSkgeworCQlzdXBlcihhZGFwdGVyRmFjdG9yeSk7CisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIHRoZSBwcm9wZXJ0eSBkZXNjcmlwdG9ycyBmb3IgdGhlIGFkYXB0ZWQgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIExpc3Q8SUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I+IGdldFByb3BlcnR5RGVzY3JpcHRvcnMoT2JqZWN0IG9iamVjdCkgeworCQlpZiAoaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMgPT0gbnVsbCkgeworCQkJc3VwZXIuZ2V0UHJvcGVydHlEZXNjcmlwdG9ycyhvYmplY3QpOworCisJCX0KKwkJcmV0dXJuIGl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBib29sZWFuIGhhc0NoaWxkcmVuKE9iamVjdCBvYmplY3QpIHsKKwkJcmV0dXJuIGhhc0NoaWxkcmVuKG9iamVjdCwgdHJ1ZSk7CisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIHRoZSBsYWJlbCB0ZXh0IGZvciB0aGUgYWRhcHRlZCBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgU3RyaW5nIGdldFRleHQoT2JqZWN0IG9iamVjdCkgeworCQlyZXR1cm4gZ2V0U3RyaW5nKCJfVUlfSW50ZXJ2ZW50aW9uTGFiZWxWYWx1ZV90eXBlIik7CisJfQorCisJLyoqCisJICogVGhpcyBoYW5kbGVzIG1vZGVsIG5vdGlmaWNhdGlvbnMgYnkgY2FsbGluZyB7QGxpbmsgI3VwZGF0ZUNoaWxkcmVufSB0byB1cGRhdGUgYW55IGNhY2hlZAorCSAqIGNoaWxkcmVuIGFuZCBieSBjcmVhdGluZyBhIHZpZXdlciBub3RpZmljYXRpb24sIHdoaWNoIGl0IHBhc3NlcyB0byB7QGxpbmsgI2ZpcmVOb3RpZnlDaGFuZ2VkfS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBub3RpZnlDaGFuZ2VkKE5vdGlmaWNhdGlvbiBub3RpZmljYXRpb24pIHsKKwkJdXBkYXRlQ2hpbGRyZW4obm90aWZpY2F0aW9uKTsKKwkJc3VwZXIubm90aWZ5Q2hhbmdlZChub3RpZmljYXRpb24pOworCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmVkaXQuY29tbWFuZC5Db21tYW5kUGFyYW1ldGVyfXMgZGVzY3JpYmluZyB0aGUgY2hpbGRyZW4KKwkgKiB0aGF0IGNhbiBiZSBjcmVhdGVkIHVuZGVyIHRoaXMgb2JqZWN0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIGNvbGxlY3ROZXdDaGlsZERlc2NyaXB0b3JzKENvbGxlY3Rpb248T2JqZWN0PiBuZXdDaGlsZERlc2NyaXB0b3JzLCBPYmplY3Qgb2JqZWN0KSB7CisJCXN1cGVyLmNvbGxlY3ROZXdDaGlsZERlc2NyaXB0b3JzKG5ld0NoaWxkRGVzY3JpcHRvcnMsIG9iamVjdCk7CisJfQorCisJLyoqCisJICogUmV0dXJuIHRoZSByZXNvdXJjZSBsb2NhdG9yIGZvciB0aGlzIGl0ZW0gcHJvdmlkZXIncyByZXNvdXJjZXMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIFJlc291cmNlTG9jYXRvciBnZXRSZXNvdXJjZUxvY2F0b3IoKSB7CisJCXJldHVybiBJbnRlcnZlbnRpb25zRWRpdFBsdWdpbi5JTlNUQU5DRTsKKwl9CisKK30KZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcnZlbnRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2ludGVydmVudGlvbnMvcHJvdmlkZXIvSW50ZXJ2ZW50aW9uc0VkaXRQbHVnaW4uamF2YSBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcnZlbnRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2ludGVydmVudGlvbnMvcHJvdmlkZXIvSW50ZXJ2ZW50aW9uc0VkaXRQbHVnaW4uamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNjY1Mzc4Ci0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmludGVydmVudGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vaW50ZXJ2ZW50aW9ucy9wcm92aWRlci9JbnRlcnZlbnRpb25zRWRpdFBsdWdpbi5qYXZhCkBAIC0wLDAgKzEsMTIyIEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uaW50ZXJ2ZW50aW9ucy5wcm92aWRlcjsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogCisgKiBDb3B5cmlnaHQgKGMpIDIwMTEgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuIAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyAKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0IAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwgCisgKiAKKyAqIENvbnRyaWJ1dG9yczogCisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGxhdGZvcm07CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5FTUZQbHVnaW47CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuUmVzb3VyY2VMb2NhdG9yOworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnByb3ZpZGVyLkVjb3JlRWRpdFBsdWdpbjsKKworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24ucHJvdmlkZXIuQ29yZUVkaXRQbHVnaW47CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaGdlbmVyYXRvcnMucHJvdmlkZXIuR3JhcGhnZW5lcmF0b3JFZGl0UGx1Z2luOworaW1wb3J0IG9yZy5vc2dpLmZyYW1ld29yay5CdW5kbGU7CisKKy8qKgorICogVGhpcyBpcyB0aGUgY2VudHJhbCBzaW5nbGV0b24gZm9yIHRoZSBJbnRlcnZlbnRpb25zIGVkaXQgcGx1Z2luLgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgZmluYWwgY2xhc3MgSW50ZXJ2ZW50aW9uc0VkaXRQbHVnaW4gZXh0ZW5kcyBFTUZQbHVnaW4geworCQorCXByaXZhdGUgc3RhdGljIFN0cmluZyBJTlRFUlZFTlRJT05fVUlfQlVORExFID0gIm9yZy5lY2xpcHNlLnN0ZW0udWkuaW50ZXJ2ZW50aW9ucyI7CisJCisJLyoqCisJICogS2VlcCB0cmFjayBvZiB0aGUgc2luZ2xldG9uLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgSW50ZXJ2ZW50aW9uc0VkaXRQbHVnaW4gSU5TVEFOQ0UgPSBuZXcgSW50ZXJ2ZW50aW9uc0VkaXRQbHVnaW4oKTsKKworCS8qKgorCSAqIEtlZXAgdHJhY2sgb2YgdGhlIHNpbmdsZXRvbi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcml2YXRlIHN0YXRpYyBJbXBsZW1lbnRhdGlvbiBwbHVnaW47CisKKwkvKioKKwkgKiBDcmVhdGUgdGhlIGluc3RhbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBJbnRlcnZlbnRpb25zRWRpdFBsdWdpbigpIHsKKwkJc3VwZXIKKwkJICAobmV3IFJlc291cmNlTG9jYXRvciBbXSB7CisJCSAgICAgQ29yZUVkaXRQbHVnaW4uSU5TVEFOQ0UsCisJCSAgICAgRWNvcmVFZGl0UGx1Z2luLklOU1RBTkNFLAorCQkgICAgIEdyYXBoZ2VuZXJhdG9yRWRpdFBsdWdpbi5JTlNUQU5DRSwKKwkJICAgfSk7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgc2luZ2xldG9uIGluc3RhbmNlIG9mIHRoZSBFY2xpcHNlIHBsdWdpbi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIHNpbmdsZXRvbiBpbnN0YW5jZS4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIFJlc291cmNlTG9jYXRvciBnZXRQbHVnaW5SZXNvdXJjZUxvY2F0b3IoKSB7CisJCXJldHVybiBwbHVnaW47CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgc2luZ2xldG9uIGluc3RhbmNlIG9mIHRoZSBFY2xpcHNlIHBsdWdpbi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIHNpbmdsZXRvbiBpbnN0YW5jZS4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHN0YXRpYyBJbXBsZW1lbnRhdGlvbiBnZXRQbHVnaW4oKSB7CisJCXJldHVybiBwbHVnaW47CisJfQorCisJLyoqCisJICogVGhlIGFjdHVhbCBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgRWNsaXBzZSA8Yj5QbHVnaW48L2I+LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBzdGF0aWMgY2xhc3MgSW1wbGVtZW50YXRpb24gZXh0ZW5kcyBFY2xpcHNlUGx1Z2luIHsKKwkJLyoqCisJCSAqIENyZWF0ZXMgYW4gaW5zdGFuY2UuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkIE5PVAorCQkgKi8KKwkJcHVibGljIEltcGxlbWVudGF0aW9uKCkgeworCQkJc3VwZXIoKTsKKworCQkJLy8gUmVtZW1iZXIgdGhlIHN0YXRpYyBpbnN0YW5jZS4KKwkJCS8vCisJCQlwbHVnaW4gPSB0aGlzOworCQkJCisJCQkvLyBXZSBuZWVkIHRvIHN0YXJ0IHRoZSB1aSBwbHVnaW4gaGVyZSB0byBtYWtlIHN1cmUgdG8gcmVnaXN0ZXIgdGhlIG5ldyBncmFwaCBnZW5lcmF0b3IgaW4gdGhlIFVJCisJCQkKKwkJCUJ1bmRsZSB1aUJ1bmRsZSA9IFBsYXRmb3JtLmdldEJ1bmRsZShJTlRFUlZFTlRJT05fVUlfQlVORExFKTsKKwkJCWlmICh1aUJ1bmRsZSAhPSBudWxsKSB7CisJCQkJdHJ5IHsKKwkJCQkJdWlCdW5kbGUuc3RhcnQoQnVuZGxlLlNUQVJUX1RSQU5TSUVOVCk7CisJCQkJfSBjYXRjaChFeGNlcHRpb24gZSkgeworCQkJCQllLnByaW50U3RhY2tUcmFjZSgpOworCQkJCX0KKwkJCX0gCisJCX0KKwl9CisKK30KZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcnZlbnRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2ludGVydmVudGlvbnMvcHJvdmlkZXIvSW50ZXJ2ZW50aW9uc0l0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5LmphdmEgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uaW50ZXJ2ZW50aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9pbnRlcnZlbnRpb25zL3Byb3ZpZGVyL0ludGVydmVudGlvbnNJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAxZGM4ZjIKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uaW50ZXJ2ZW50aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9pbnRlcnZlbnRpb25zL3Byb3ZpZGVyL0ludGVydmVudGlvbnNJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeS5qYXZhCkBAIC0wLDAgKzEsMjU1IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uaW50ZXJ2ZW50aW9ucy5wcm92aWRlcjsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogCisgKiBDb3B5cmlnaHQgKGMpIDIwMTEgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuIAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyAKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0IAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwgCisgKiAKKyAqIENvbnRyaWJ1dG9yczogCisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OworaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LkFkYXB0ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWVyOworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuQ2hhbmdlTm90aWZpZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5Db21wb3NlZEFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklDaGFuZ2VOb3RpZmllcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JRGlzcG9zYWJsZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JRWRpdGluZ0RvbWFpbkl0ZW1Qcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbUxhYmVsUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1Qcm9wZXJ0eVNvdXJjZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JTm90aWZ5Q2hhbmdlZExpc3RlbmVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklTdHJ1Y3R1cmVkSXRlbUNvbnRlbnRQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JVHJlZUl0ZW1Db250ZW50UHJvdmlkZXI7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmludGVydmVudGlvbnMudXRpbC5JbnRlcnZlbnRpb25zQWRhcHRlckZhY3Rvcnk7CisKKy8qKgorICogVGhpcyBpcyB0aGUgZmFjdG9yeSB0aGF0IGlzIHVzZWQgdG8gcHJvdmlkZSB0aGUgaW50ZXJmYWNlcyBuZWVkZWQgdG8gc3VwcG9ydCBWaWV3ZXJzLgorICogVGhlIGFkYXB0ZXJzIGdlbmVyYXRlZCBieSB0aGlzIGZhY3RvcnkgY29udmVydCBFTUYgYWRhcHRlciBub3RpZmljYXRpb25zIGludG8gY2FsbHMgdG8ge0BsaW5rICNmaXJlTm90aWZ5Q2hhbmdlZCBmaXJlTm90aWZ5Q2hhbmdlZH0uCisgKiBUaGUgYWRhcHRlcnMgYWxzbyBzdXBwb3J0IEVjbGlwc2UgcHJvcGVydHkgc2hlZXRzLgorICogTm90ZSB0aGF0IG1vc3Qgb2YgdGhlIGFkYXB0ZXJzIGFyZSBzaGFyZWQgYW1vbmcgbXVsdGlwbGUgaW5zdGFuY2VzLgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgSW50ZXJ2ZW50aW9uc0l0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5IGV4dGVuZHMgSW50ZXJ2ZW50aW9uc0FkYXB0ZXJGYWN0b3J5IGltcGxlbWVudHMgQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSwgSUNoYW5nZU5vdGlmaWVyLCBJRGlzcG9zYWJsZSB7CisJLyoqCisJICogVGhpcyBrZWVwcyB0cmFjayBvZiB0aGUgcm9vdCBhZGFwdGVyIGZhY3RvcnkgdGhhdCBkZWxlZ2F0ZXMgdG8gdGhpcyBhZGFwdGVyIGZhY3RvcnkuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIENvbXBvc2VkQWRhcHRlckZhY3RvcnkgcGFyZW50QWRhcHRlckZhY3Rvcnk7CisKKwkvKioKKwkgKiBUaGlzIGlzIHVzZWQgdG8gaW1wbGVtZW50IHtAbGluayBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JQ2hhbmdlTm90aWZpZXJ9LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBJQ2hhbmdlTm90aWZpZXIgY2hhbmdlTm90aWZpZXIgPSBuZXcgQ2hhbmdlTm90aWZpZXIoKTsKKworCS8qKgorCSAqIFRoaXMga2VlcHMgdHJhY2sgb2YgYWxsIHRoZSBzdXBwb3J0ZWQgdHlwZXMgY2hlY2tlZCBieSB7QGxpbmsgI2lzRmFjdG9yeUZvclR5cGUgaXNGYWN0b3J5Rm9yVHlwZX0uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIENvbGxlY3Rpb248T2JqZWN0PiBzdXBwb3J0ZWRUeXBlcyA9IG5ldyBBcnJheUxpc3Q8T2JqZWN0PigpOworCisJLyoqCisJICogVGhpcyBjb25zdHJ1Y3RzIGFuIGluc3RhbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBJbnRlcnZlbnRpb25zSXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkoKSB7CisJCXN1cHBvcnRlZFR5cGVzLmFkZChJRWRpdGluZ0RvbWFpbkl0ZW1Qcm92aWRlci5jbGFzcyk7CisJCXN1cHBvcnRlZFR5cGVzLmFkZChJU3RydWN0dXJlZEl0ZW1Db250ZW50UHJvdmlkZXIuY2xhc3MpOworCQlzdXBwb3J0ZWRUeXBlcy5hZGQoSVRyZWVJdGVtQ29udGVudFByb3ZpZGVyLmNsYXNzKTsKKwkJc3VwcG9ydGVkVHlwZXMuYWRkKElJdGVtTGFiZWxQcm92aWRlci5jbGFzcyk7CisJCXN1cHBvcnRlZFR5cGVzLmFkZChJSXRlbVByb3BlcnR5U291cmNlLmNsYXNzKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGtlZXBzIHRyYWNrIG9mIHRoZSBvbmUgYWRhcHRlciB1c2VkIGZvciBhbGwge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uaW50ZXJ2ZW50aW9ucy5TdGFuZGFyZEludGVydmVudGlvbkxhYmVsfSBpbnN0YW5jZXMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIFN0YW5kYXJkSW50ZXJ2ZW50aW9uTGFiZWxJdGVtUHJvdmlkZXIgc3RhbmRhcmRJbnRlcnZlbnRpb25MYWJlbEl0ZW1Qcm92aWRlcjsKKworCS8qKgorCSAqIFRoaXMgY3JlYXRlcyBhbiBhZGFwdGVyIGZvciBhIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmludGVydmVudGlvbnMuU3RhbmRhcmRJbnRlcnZlbnRpb25MYWJlbH0uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlU3RhbmRhcmRJbnRlcnZlbnRpb25MYWJlbEFkYXB0ZXIoKSB7CisJCWlmIChzdGFuZGFyZEludGVydmVudGlvbkxhYmVsSXRlbVByb3ZpZGVyID09IG51bGwpIHsKKwkJCXN0YW5kYXJkSW50ZXJ2ZW50aW9uTGFiZWxJdGVtUHJvdmlkZXIgPSBuZXcgU3RhbmRhcmRJbnRlcnZlbnRpb25MYWJlbEl0ZW1Qcm92aWRlcih0aGlzKTsKKwkJfQorCisJCXJldHVybiBzdGFuZGFyZEludGVydmVudGlvbkxhYmVsSXRlbVByb3ZpZGVyOworCX0KKworCS8qKgorCSAqIFRoaXMga2VlcHMgdHJhY2sgb2YgdGhlIG9uZSBhZGFwdGVyIHVzZWQgZm9yIGFsbCB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcnZlbnRpb25zLkNvbnRyb2xHcmFwaEdlbmVyYXRvcn0gaW5zdGFuY2VzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBDb250cm9sR3JhcGhHZW5lcmF0b3JJdGVtUHJvdmlkZXIgY29udHJvbEdyYXBoR2VuZXJhdG9ySXRlbVByb3ZpZGVyOworCisJLyoqCisJICogVGhpcyBjcmVhdGVzIGFuIGFkYXB0ZXIgZm9yIGEge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uaW50ZXJ2ZW50aW9ucy5Db250cm9sR3JhcGhHZW5lcmF0b3J9LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZUNvbnRyb2xHcmFwaEdlbmVyYXRvckFkYXB0ZXIoKSB7CisJCWlmIChjb250cm9sR3JhcGhHZW5lcmF0b3JJdGVtUHJvdmlkZXIgPT0gbnVsbCkgeworCQkJY29udHJvbEdyYXBoR2VuZXJhdG9ySXRlbVByb3ZpZGVyID0gbmV3IENvbnRyb2xHcmFwaEdlbmVyYXRvckl0ZW1Qcm92aWRlcih0aGlzKTsKKwkJfQorCisJCXJldHVybiBjb250cm9sR3JhcGhHZW5lcmF0b3JJdGVtUHJvdmlkZXI7CisJfQorCisJLyoqCisJICogVGhpcyBrZWVwcyB0cmFjayBvZiB0aGUgb25lIGFkYXB0ZXIgdXNlZCBmb3IgYWxsIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmludGVydmVudGlvbnMuU3RhbmRhcmRJbnRlcnZlbnRpb25MYWJlbFZhbHVlfSBpbnN0YW5jZXMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIFN0YW5kYXJkSW50ZXJ2ZW50aW9uTGFiZWxWYWx1ZUl0ZW1Qcm92aWRlciBzdGFuZGFyZEludGVydmVudGlvbkxhYmVsVmFsdWVJdGVtUHJvdmlkZXI7CisKKwkvKioKKwkgKiBUaGlzIGNyZWF0ZXMgYW4gYWRhcHRlciBmb3IgYSB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcnZlbnRpb25zLlN0YW5kYXJkSW50ZXJ2ZW50aW9uTGFiZWxWYWx1ZX0uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlU3RhbmRhcmRJbnRlcnZlbnRpb25MYWJlbFZhbHVlQWRhcHRlcigpIHsKKwkJaWYgKHN0YW5kYXJkSW50ZXJ2ZW50aW9uTGFiZWxWYWx1ZUl0ZW1Qcm92aWRlciA9PSBudWxsKSB7CisJCQlzdGFuZGFyZEludGVydmVudGlvbkxhYmVsVmFsdWVJdGVtUHJvdmlkZXIgPSBuZXcgU3RhbmRhcmRJbnRlcnZlbnRpb25MYWJlbFZhbHVlSXRlbVByb3ZpZGVyKHRoaXMpOworCQl9CisKKwkJcmV0dXJuIHN0YW5kYXJkSW50ZXJ2ZW50aW9uTGFiZWxWYWx1ZUl0ZW1Qcm92aWRlcjsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgdGhlIHJvb3QgYWRhcHRlciBmYWN0b3J5IHRoYXQgY29udGFpbnMgdGhpcyBmYWN0b3J5LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBDb21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5IGdldFJvb3RBZGFwdGVyRmFjdG9yeSgpIHsKKwkJcmV0dXJuIHBhcmVudEFkYXB0ZXJGYWN0b3J5ID09IG51bGwgPyB0aGlzIDogcGFyZW50QWRhcHRlckZhY3RvcnkuZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCk7CisJfQorCisJLyoqCisJICogVGhpcyBzZXRzIHRoZSBjb21wb3NlZCBhZGFwdGVyIGZhY3RvcnkgdGhhdCBjb250YWlucyB0aGlzIGZhY3RvcnkuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgc2V0UGFyZW50QWRhcHRlckZhY3RvcnkoQ29tcG9zZWRBZGFwdGVyRmFjdG9yeSBwYXJlbnRBZGFwdGVyRmFjdG9yeSkgeworCQl0aGlzLnBhcmVudEFkYXB0ZXJGYWN0b3J5ID0gcGFyZW50QWRhcHRlckZhY3Rvcnk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIGJvb2xlYW4gaXNGYWN0b3J5Rm9yVHlwZShPYmplY3QgdHlwZSkgeworCQlyZXR1cm4gc3VwcG9ydGVkVHlwZXMuY29udGFpbnModHlwZSkgfHwgc3VwZXIuaXNGYWN0b3J5Rm9yVHlwZSh0eXBlKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGltcGxlbWVudGF0aW9uIHN1YnN0aXR1dGVzIHRoZSBmYWN0b3J5IGl0c2VsZiBhcyB0aGUga2V5IGZvciB0aGUgYWRhcHRlci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgQWRhcHRlciBhZGFwdChOb3RpZmllciBub3RpZmllciwgT2JqZWN0IHR5cGUpIHsKKwkJcmV0dXJuIHN1cGVyLmFkYXB0KG5vdGlmaWVyLCB0aGlzKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgT2JqZWN0IGFkYXB0KE9iamVjdCBvYmplY3QsIE9iamVjdCB0eXBlKSB7CisJCWlmIChpc0ZhY3RvcnlGb3JUeXBlKHR5cGUpKSB7CisJCQlPYmplY3QgYWRhcHRlciA9IHN1cGVyLmFkYXB0KG9iamVjdCwgdHlwZSk7CisJCQlpZiAoISh0eXBlIGluc3RhbmNlb2YgQ2xhc3M8Pz4pIHx8ICgoKENsYXNzPD8+KXR5cGUpLmlzSW5zdGFuY2UoYWRhcHRlcikpKSB7CisJCQkJcmV0dXJuIGFkYXB0ZXI7CisJCQl9CisJCX0KKworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFkZHMgYSBsaXN0ZW5lci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBhZGRMaXN0ZW5lcihJTm90aWZ5Q2hhbmdlZExpc3RlbmVyIG5vdGlmeUNoYW5nZWRMaXN0ZW5lcikgeworCQljaGFuZ2VOb3RpZmllci5hZGRMaXN0ZW5lcihub3RpZnlDaGFuZ2VkTGlzdGVuZXIpOworCX0KKworCS8qKgorCSAqIFRoaXMgcmVtb3ZlcyBhIGxpc3RlbmVyLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIHJlbW92ZUxpc3RlbmVyKElOb3RpZnlDaGFuZ2VkTGlzdGVuZXIgbm90aWZ5Q2hhbmdlZExpc3RlbmVyKSB7CisJCWNoYW5nZU5vdGlmaWVyLnJlbW92ZUxpc3RlbmVyKG5vdGlmeUNoYW5nZWRMaXN0ZW5lcik7CisJfQorCisJLyoqCisJICogVGhpcyBkZWxlZ2F0ZXMgdG8ge0BsaW5rICNjaGFuZ2VOb3RpZmllcn0gYW5kIHRvIHtAbGluayAjcGFyZW50QWRhcHRlckZhY3Rvcnl9LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIGZpcmVOb3RpZnlDaGFuZ2VkKE5vdGlmaWNhdGlvbiBub3RpZmljYXRpb24pIHsKKwkJY2hhbmdlTm90aWZpZXIuZmlyZU5vdGlmeUNoYW5nZWQobm90aWZpY2F0aW9uKTsKKworCQlpZiAocGFyZW50QWRhcHRlckZhY3RvcnkgIT0gbnVsbCkgeworCQkJcGFyZW50QWRhcHRlckZhY3RvcnkuZmlyZU5vdGlmeUNoYW5nZWQobm90aWZpY2F0aW9uKTsKKwkJfQorCX0KKworCS8qKgorCSAqIFRoaXMgZGlzcG9zZXMgYWxsIG9mIHRoZSBpdGVtIHByb3ZpZGVycyBjcmVhdGVkIGJ5IHRoaXMgZmFjdG9yeS4gCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgZGlzcG9zZSgpIHsKKwkJaWYgKHN0YW5kYXJkSW50ZXJ2ZW50aW9uTGFiZWxJdGVtUHJvdmlkZXIgIT0gbnVsbCkgc3RhbmRhcmRJbnRlcnZlbnRpb25MYWJlbEl0ZW1Qcm92aWRlci5kaXNwb3NlKCk7CisJCWlmIChjb250cm9sR3JhcGhHZW5lcmF0b3JJdGVtUHJvdmlkZXIgIT0gbnVsbCkgY29udHJvbEdyYXBoR2VuZXJhdG9ySXRlbVByb3ZpZGVyLmRpc3Bvc2UoKTsKKwkJaWYgKHN0YW5kYXJkSW50ZXJ2ZW50aW9uTGFiZWxWYWx1ZUl0ZW1Qcm92aWRlciAhPSBudWxsKSBzdGFuZGFyZEludGVydmVudGlvbkxhYmVsVmFsdWVJdGVtUHJvdmlkZXIuZGlzcG9zZSgpOworCX0KKworfQpkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmludGVydmVudGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vaW50ZXJ2ZW50aW9ucy9wcm92aWRlci9TdGFuZGFyZEludGVydmVudGlvbkxhYmVsSXRlbVByb3ZpZGVyLmphdmEgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uaW50ZXJ2ZW50aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9pbnRlcnZlbnRpb25zL3Byb3ZpZGVyL1N0YW5kYXJkSW50ZXJ2ZW50aW9uTGFiZWxJdGVtUHJvdmlkZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNTIyOGExCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmludGVydmVudGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vaW50ZXJ2ZW50aW9ucy9wcm92aWRlci9TdGFuZGFyZEludGVydmVudGlvbkxhYmVsSXRlbVByb3ZpZGVyLmphdmEKQEAgLTAsMCArMSwxNzUgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcnZlbnRpb25zLnByb3ZpZGVyOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAKKyAqIENvcHlyaWdodCAoYykgMjAxMSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4gCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIAorICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wIAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQgCisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbCAKKyAqIAorICogQ29udHJpYnV0b3JzOiAKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCitpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5BZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb247CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuVVJJOworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JRWRpdGluZ0RvbWFpbkl0ZW1Qcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbUxhYmVsUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1Qcm9wZXJ0eVNvdXJjZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JU3RydWN0dXJlZEl0ZW1Db250ZW50UHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVRyZWVJdGVtQ29udGVudFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuVmlld2VyTm90aWZpY2F0aW9uOworCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS5HZW9ncmFwaGljTmFtZXM7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcnZlbnRpb25zLkludGVydmVudGlvbnNQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uaW50ZXJ2ZW50aW9ucy5TdGFuZGFyZEludGVydmVudGlvbkxhYmVsOworCisvKioKKyAqIFRoaXMgaXMgdGhlIGl0ZW0gcHJvdmlkZXIgYWRhcHRlciBmb3IgYSB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcnZlbnRpb25zLlN0YW5kYXJkSW50ZXJ2ZW50aW9uTGFiZWx9IG9iamVjdC4KKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIFN0YW5kYXJkSW50ZXJ2ZW50aW9uTGFiZWxJdGVtUHJvdmlkZXIKKwlleHRlbmRzIEludGVydmVudGlvbkxhYmVsSXRlbVByb3ZpZGVyCisJaW1wbGVtZW50cworCQlJRWRpdGluZ0RvbWFpbkl0ZW1Qcm92aWRlciwKKwkJSVN0cnVjdHVyZWRJdGVtQ29udGVudFByb3ZpZGVyLAorCQlJVHJlZUl0ZW1Db250ZW50UHJvdmlkZXIsCisJCUlJdGVtTGFiZWxQcm92aWRlciwKKwkJSUl0ZW1Qcm9wZXJ0eVNvdXJjZSB7CisJLyoqCisJICogVGhpcyBjb25zdHJ1Y3RzIGFuIGluc3RhbmNlIGZyb20gYSBmYWN0b3J5IGFuZCBhIG5vdGlmaWVyLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBTdGFuZGFyZEludGVydmVudGlvbkxhYmVsSXRlbVByb3ZpZGVyKEFkYXB0ZXJGYWN0b3J5IGFkYXB0ZXJGYWN0b3J5KSB7CisJCXN1cGVyKGFkYXB0ZXJGYWN0b3J5KTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgdGhlIHByb3BlcnR5IGRlc2NyaXB0b3JzIGZvciB0aGUgYWRhcHRlZCBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgTGlzdDxJSXRlbVByb3BlcnR5RGVzY3JpcHRvcj4gZ2V0UHJvcGVydHlEZXNjcmlwdG9ycyhPYmplY3Qgb2JqZWN0KSB7CisJCWlmIChpdGVtUHJvcGVydHlEZXNjcmlwdG9ycyA9PSBudWxsKSB7CisJCQlzdXBlci5nZXRQcm9wZXJ0eURlc2NyaXB0b3JzKG9iamVjdCk7CisKKwkJCWFkZFBvcHVsYXRpb25JZGVudGlmaWVyUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCk7CisJCX0KKwkJcmV0dXJuIGl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzOworCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyBhIHByb3BlcnR5IGRlc2NyaXB0b3IgZm9yIHRoZSBQb3B1bGF0aW9uIElkZW50aWZpZXIgZmVhdHVyZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBhZGRQb3B1bGF0aW9uSWRlbnRpZmllclByb3BlcnR5RGVzY3JpcHRvcihPYmplY3Qgb2JqZWN0KSB7CisJCWl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzLmFkZAorCQkJKGNyZWF0ZUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IKKwkJCQkoKChDb21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5KWFkYXB0ZXJGYWN0b3J5KS5nZXRSb290QWRhcHRlckZhY3RvcnkoKSwKKwkJCQkgZ2V0UmVzb3VyY2VMb2NhdG9yKCksCisJCQkJIGdldFN0cmluZygiX1VJX1N0YW5kYXJkSW50ZXJ2ZW50aW9uTGFiZWxfcG9wdWxhdGlvbklkZW50aWZpZXJfZmVhdHVyZSIpLAorCQkJCSBnZXRTdHJpbmcoIl9VSV9Qcm9wZXJ0eURlc2NyaXB0b3JfZGVzY3JpcHRpb24iLCAiX1VJX1N0YW5kYXJkSW50ZXJ2ZW50aW9uTGFiZWxfcG9wdWxhdGlvbklkZW50aWZpZXJfZmVhdHVyZSIsICJfVUlfU3RhbmRhcmRJbnRlcnZlbnRpb25MYWJlbF90eXBlIiksCisJCQkJIEludGVydmVudGlvbnNQYWNrYWdlLkxpdGVyYWxzLlNUQU5EQVJEX0lOVEVSVkVOVElPTl9MQUJFTF9fUE9QVUxBVElPTl9JREVOVElGSUVSLAorCQkJCSB0cnVlLAorCQkJCSBmYWxzZSwKKwkJCQkgZmFsc2UsCisJCQkJIEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IuR0VORVJJQ19WQUxVRV9JTUFHRSwKKwkJCQkgbnVsbCwKKwkJCQkgbnVsbCkpOworCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyBTdGFuZGFyZEludGVydmVudGlvbkxhYmVsLmdpZi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIE9iamVjdCBnZXRJbWFnZShPYmplY3Qgb2JqZWN0KSB7CisJCXJldHVybiBvdmVybGF5SW1hZ2Uob2JqZWN0LCBnZXRSZXNvdXJjZUxvY2F0b3IoKS5nZXRJbWFnZSgiZnVsbC9jdXN0b21vYmoxNi9TdGFuZGFyZEludGVydmVudGlvbkxhYmVsLnBuZyIpKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgdGhlIGxhYmVsIHRleHQgZm9yIHRoZSBhZGFwdGVkIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgU3RyaW5nIGdldFRleHQoT2JqZWN0IG9iamVjdCkgeworCQlmaW5hbCBVUkkgbGFiZWxVUkkgPSAoKFN0YW5kYXJkSW50ZXJ2ZW50aW9uTGFiZWwpIG9iamVjdCkuZ2V0VVJJKCk7CisJCWZpbmFsIFN0cmluZyBsYXN0U2VnbWVudCA9IGxhYmVsVVJJLmxhc3RTZWdtZW50KCk7CisJCWZpbmFsIFN0cmluZyBJU09LZXkgPSBsYXN0U2VnbWVudDsKKwkJCisJCWZpbmFsIFN0cmluZyBnZW9OYW1lID0gR2VvZ3JhcGhpY05hbWVzLmdldE5hbWUoSVNPS2V5KTsKKworCQlmaW5hbCBTdHJpbmdCdWlsZGVyIHNiID0gbmV3IFN0cmluZ0J1aWxkZXIoCisJCQkJZ2VvTmFtZS5zdGFydHNXaXRoKCIhIikgPyBJU09LZXkgOiBnZW9OYW1lKTsKKwkJcmV0dXJuIHNiLnRvU3RyaW5nKCk7CisJfQorCQorCS8qKgorCSAqIFRoaXMgcmV0dXJucyB0aGUgbGFiZWwgdGV4dCBmb3IgdGhlIGFkYXB0ZWQgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIFN0cmluZyBnZXRUZXh0R2VuKE9iamVjdCBvYmplY3QpIHsKKwkJVVJJIGxhYmVsVmFsdWUgPSAoKFN0YW5kYXJkSW50ZXJ2ZW50aW9uTGFiZWwpb2JqZWN0KS5nZXRVUkkoKTsKKwkJU3RyaW5nIGxhYmVsID0gbGFiZWxWYWx1ZSA9PSBudWxsID8gbnVsbCA6IGxhYmVsVmFsdWUudG9TdHJpbmcoKTsKKwkJcmV0dXJuIGxhYmVsID09IG51bGwgfHwgbGFiZWwubGVuZ3RoKCkgPT0gMCA/CisJCQlnZXRTdHJpbmcoIl9VSV9TdGFuZGFyZEludGVydmVudGlvbkxhYmVsX3R5cGUiKSA6CisJCQlnZXRTdHJpbmcoIl9VSV9TdGFuZGFyZEludGVydmVudGlvbkxhYmVsX3R5cGUiKSArICIgIiArIGxhYmVsOworCX0KKworCS8qKgorCSAqIFRoaXMgaGFuZGxlcyBtb2RlbCBub3RpZmljYXRpb25zIGJ5IGNhbGxpbmcge0BsaW5rICN1cGRhdGVDaGlsZHJlbn0gdG8gdXBkYXRlIGFueSBjYWNoZWQKKwkgKiBjaGlsZHJlbiBhbmQgYnkgY3JlYXRpbmcgYSB2aWV3ZXIgbm90aWZpY2F0aW9uLCB3aGljaCBpdCBwYXNzZXMgdG8ge0BsaW5rICNmaXJlTm90aWZ5Q2hhbmdlZH0uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgbm90aWZ5Q2hhbmdlZChOb3RpZmljYXRpb24gbm90aWZpY2F0aW9uKSB7CisJCXVwZGF0ZUNoaWxkcmVuKG5vdGlmaWNhdGlvbik7CisKKwkJc3dpdGNoIChub3RpZmljYXRpb24uZ2V0RmVhdHVyZUlEKFN0YW5kYXJkSW50ZXJ2ZW50aW9uTGFiZWwuY2xhc3MpKSB7CisJCQljYXNlIEludGVydmVudGlvbnNQYWNrYWdlLlNUQU5EQVJEX0lOVEVSVkVOVElPTl9MQUJFTF9fUE9QVUxBVElPTl9JREVOVElGSUVSOgorCQkJCWZpcmVOb3RpZnlDaGFuZ2VkKG5ldyBWaWV3ZXJOb3RpZmljYXRpb24obm90aWZpY2F0aW9uLCBub3RpZmljYXRpb24uZ2V0Tm90aWZpZXIoKSwgZmFsc2UsIHRydWUpKTsKKwkJCQlyZXR1cm47CisJCX0KKwkJc3VwZXIubm90aWZ5Q2hhbmdlZChub3RpZmljYXRpb24pOworCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmVkaXQuY29tbWFuZC5Db21tYW5kUGFyYW1ldGVyfXMgZGVzY3JpYmluZyB0aGUgY2hpbGRyZW4KKwkgKiB0aGF0IGNhbiBiZSBjcmVhdGVkIHVuZGVyIHRoaXMgb2JqZWN0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIGNvbGxlY3ROZXdDaGlsZERlc2NyaXB0b3JzKENvbGxlY3Rpb248T2JqZWN0PiBuZXdDaGlsZERlc2NyaXB0b3JzLCBPYmplY3Qgb2JqZWN0KSB7CisJCXN1cGVyLmNvbGxlY3ROZXdDaGlsZERlc2NyaXB0b3JzKG5ld0NoaWxkRGVzY3JpcHRvcnMsIG9iamVjdCk7CisJfQorCit9CmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uaW50ZXJ2ZW50aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9pbnRlcnZlbnRpb25zL3Byb3ZpZGVyL1N0YW5kYXJkSW50ZXJ2ZW50aW9uTGFiZWxWYWx1ZUl0ZW1Qcm92aWRlci5qYXZhIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmludGVydmVudGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vaW50ZXJ2ZW50aW9ucy9wcm92aWRlci9TdGFuZGFyZEludGVydmVudGlvbkxhYmVsVmFsdWVJdGVtUHJvdmlkZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNTg1YmUyCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmludGVydmVudGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vaW50ZXJ2ZW50aW9ucy9wcm92aWRlci9TdGFuZGFyZEludGVydmVudGlvbkxhYmVsVmFsdWVJdGVtUHJvdmlkZXIuamF2YQpAQCAtMCwwICsxLDE4NiBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmludGVydmVudGlvbnMucHJvdmlkZXI7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIAorICogQ29weXJpZ2h0IChjKSAyMDExIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiAKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdCAKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sIAorICogCisgKiBDb250cmlidXRvcnM6IAorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiAKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LkFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbjsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkNvbXBvc2VhYmxlQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUVkaXRpbmdEb21haW5JdGVtUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1MYWJlbFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtUHJvcGVydHlEZXNjcmlwdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtUHJvcGVydHlTb3VyY2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVN0cnVjdHVyZWRJdGVtQ29udGVudFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklUcmVlSXRlbUNvbnRlbnRQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JdGVtUHJvcGVydHlEZXNjcmlwdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLlZpZXdlck5vdGlmaWNhdGlvbjsKKworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uaW50ZXJ2ZW50aW9ucy5JbnRlcnZlbnRpb25zUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmludGVydmVudGlvbnMuU3RhbmRhcmRJbnRlcnZlbnRpb25MYWJlbFZhbHVlOworCisvKioKKyAqIFRoaXMgaXMgdGhlIGl0ZW0gcHJvdmlkZXIgYWRhcHRlciBmb3IgYSB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcnZlbnRpb25zLlN0YW5kYXJkSW50ZXJ2ZW50aW9uTGFiZWxWYWx1ZX0gb2JqZWN0LgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgU3RhbmRhcmRJbnRlcnZlbnRpb25MYWJlbFZhbHVlSXRlbVByb3ZpZGVyCisJZXh0ZW5kcyBJbnRlcnZlbnRpb25MYWJlbFZhbHVlSXRlbVByb3ZpZGVyCisJaW1wbGVtZW50cworCQlJRWRpdGluZ0RvbWFpbkl0ZW1Qcm92aWRlciwKKwkJSVN0cnVjdHVyZWRJdGVtQ29udGVudFByb3ZpZGVyLAorCQlJVHJlZUl0ZW1Db250ZW50UHJvdmlkZXIsCisJCUlJdGVtTGFiZWxQcm92aWRlciwKKwkJSUl0ZW1Qcm9wZXJ0eVNvdXJjZSB7CisJLyoqCisJICogVGhpcyBjb25zdHJ1Y3RzIGFuIGluc3RhbmNlIGZyb20gYSBmYWN0b3J5IGFuZCBhIG5vdGlmaWVyLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBTdGFuZGFyZEludGVydmVudGlvbkxhYmVsVmFsdWVJdGVtUHJvdmlkZXIoQWRhcHRlckZhY3RvcnkgYWRhcHRlckZhY3RvcnkpIHsKKwkJc3VwZXIoYWRhcHRlckZhY3RvcnkpOworCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyB0aGUgcHJvcGVydHkgZGVzY3JpcHRvcnMgZm9yIHRoZSBhZGFwdGVkIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBMaXN0PElJdGVtUHJvcGVydHlEZXNjcmlwdG9yPiBnZXRQcm9wZXJ0eURlc2NyaXB0b3JzKE9iamVjdCBvYmplY3QpIHsKKwkJaWYgKGl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzID09IG51bGwpIHsKKwkJCXN1cGVyLmdldFByb3BlcnR5RGVzY3JpcHRvcnMob2JqZWN0KTsKKworCQkJYWRkVmFjY2luYXRpb25zUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCk7CisJCQlhZGRJc29sYXRpb25zUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCk7CisJCX0KKwkJcmV0dXJuIGl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzOworCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyBhIHByb3BlcnR5IGRlc2NyaXB0b3IgZm9yIHRoZSBWYWNjaW5hdGlvbnMgZmVhdHVyZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBhZGRWYWNjaW5hdGlvbnNQcm9wZXJ0eURlc2NyaXB0b3IoT2JqZWN0IG9iamVjdCkgeworCQlpdGVtUHJvcGVydHlEZXNjcmlwdG9ycy5hZGQKKwkJCShjcmVhdGVJdGVtUHJvcGVydHlEZXNjcmlwdG9yCisJCQkJKCgoQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSlhZGFwdGVyRmFjdG9yeSkuZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCksCisJCQkJIGdldFJlc291cmNlTG9jYXRvcigpLAorCQkJCSBnZXRTdHJpbmcoIl9VSV9TdGFuZGFyZEludGVydmVudGlvbkxhYmVsVmFsdWVfdmFjY2luYXRpb25zX2ZlYXR1cmUiKSwKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfUHJvcGVydHlEZXNjcmlwdG9yX2Rlc2NyaXB0aW9uIiwgIl9VSV9TdGFuZGFyZEludGVydmVudGlvbkxhYmVsVmFsdWVfdmFjY2luYXRpb25zX2ZlYXR1cmUiLCAiX1VJX1N0YW5kYXJkSW50ZXJ2ZW50aW9uTGFiZWxWYWx1ZV90eXBlIiksCisJCQkJIEludGVydmVudGlvbnNQYWNrYWdlLkxpdGVyYWxzLlNUQU5EQVJEX0lOVEVSVkVOVElPTl9MQUJFTF9WQUxVRV9fVkFDQ0lOQVRJT05TLAorCQkJCSB0cnVlLAorCQkJCSBmYWxzZSwKKwkJCQkgZmFsc2UsCisJCQkJIEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IuUkVBTF9WQUxVRV9JTUFHRSwKKwkJCQkgbnVsbCwKKwkJCQkgbnVsbCkpOworCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyBhIHByb3BlcnR5IGRlc2NyaXB0b3IgZm9yIHRoZSBJc29sYXRpb25zIGZlYXR1cmUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgYWRkSXNvbGF0aW9uc1Byb3BlcnR5RGVzY3JpcHRvcihPYmplY3Qgb2JqZWN0KSB7CisJCWl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzLmFkZAorCQkJKGNyZWF0ZUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IKKwkJCQkoKChDb21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5KWFkYXB0ZXJGYWN0b3J5KS5nZXRSb290QWRhcHRlckZhY3RvcnkoKSwKKwkJCQkgZ2V0UmVzb3VyY2VMb2NhdG9yKCksCisJCQkJIGdldFN0cmluZygiX1VJX1N0YW5kYXJkSW50ZXJ2ZW50aW9uTGFiZWxWYWx1ZV9pc29sYXRpb25zX2ZlYXR1cmUiKSwKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfUHJvcGVydHlEZXNjcmlwdG9yX2Rlc2NyaXB0aW9uIiwgIl9VSV9TdGFuZGFyZEludGVydmVudGlvbkxhYmVsVmFsdWVfaXNvbGF0aW9uc19mZWF0dXJlIiwgIl9VSV9TdGFuZGFyZEludGVydmVudGlvbkxhYmVsVmFsdWVfdHlwZSIpLAorCQkJCSBJbnRlcnZlbnRpb25zUGFja2FnZS5MaXRlcmFscy5TVEFOREFSRF9JTlRFUlZFTlRJT05fTEFCRUxfVkFMVUVfX0lTT0xBVElPTlMsCisJCQkJIHRydWUsCisJCQkJIGZhbHNlLAorCQkJCSBmYWxzZSwKKwkJCQkgSXRlbVByb3BlcnR5RGVzY3JpcHRvci5SRUFMX1ZBTFVFX0lNQUdFLAorCQkJCSBudWxsLAorCQkJCSBudWxsKSk7CisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIFN0YW5kYXJkSW50ZXJ2ZW50aW9uTGFiZWxWYWx1ZS5naWYuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBPYmplY3QgZ2V0SW1hZ2UoT2JqZWN0IG9iamVjdCkgeworCQlyZXR1cm4gb3ZlcmxheUltYWdlKG9iamVjdCwgZ2V0UmVzb3VyY2VMb2NhdG9yKCkuZ2V0SW1hZ2UoImZ1bGwvY3VzdG9tb2JqMTYvU3RhbmRhcmRJbnRlcnZlbnRpb25MYWJlbFZhbHVlLnBuZyIpKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgdGhlIGxhYmVsIHRleHQgZm9yIHRoZSBhZGFwdGVkIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCQorCXB1YmxpYyBTdHJpbmcgZ2V0VGV4dEdlbihPYmplY3Qgb2JqZWN0KSB7CisJCVN0YW5kYXJkSW50ZXJ2ZW50aW9uTGFiZWxWYWx1ZSBzdGFuZGFyZEludGVydmVudGlvbkxhYmVsVmFsdWUgPSAoU3RhbmRhcmRJbnRlcnZlbnRpb25MYWJlbFZhbHVlKW9iamVjdDsKKwkJcmV0dXJuIGdldFN0cmluZygiX1VJX1N0YW5kYXJkSW50ZXJ2ZW50aW9uTGFiZWxWYWx1ZV90eXBlIikgKyAiICIgKyBzdGFuZGFyZEludGVydmVudGlvbkxhYmVsVmFsdWUuZ2V0VmFjY2luYXRpb25zKCk7CisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIHRoZSBsYWJlbCB0ZXh0IGZvciB0aGUgYWRhcHRlZCBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIFN0cmluZyBnZXRUZXh0KE9iamVjdCBvYmplY3QpIHsKKwkJU3RhbmRhcmRJbnRlcnZlbnRpb25MYWJlbFZhbHVlIHN0YW5kYXJkSW50ZXJ2ZW50aW9uTGFiZWxWYWx1ZSA9IChTdGFuZGFyZEludGVydmVudGlvbkxhYmVsVmFsdWUpb2JqZWN0OworCQlyZXR1cm4gc3RhbmRhcmRJbnRlcnZlbnRpb25MYWJlbFZhbHVlLmdldFZhY2NpbmF0aW9ucygpKyIgdmFjY2luYXRpb25zOiAiK3N0YW5kYXJkSW50ZXJ2ZW50aW9uTGFiZWxWYWx1ZS5nZXRJc29sYXRpb25zKCkrIiBpc29sYXRpb25zIjsKKwl9CisJCisJLyoqCisJICogVGhpcyBoYW5kbGVzIG1vZGVsIG5vdGlmaWNhdGlvbnMgYnkgY2FsbGluZyB7QGxpbmsgI3VwZGF0ZUNoaWxkcmVufSB0byB1cGRhdGUgYW55IGNhY2hlZAorCSAqIGNoaWxkcmVuIGFuZCBieSBjcmVhdGluZyBhIHZpZXdlciBub3RpZmljYXRpb24sIHdoaWNoIGl0IHBhc3NlcyB0byB7QGxpbmsgI2ZpcmVOb3RpZnlDaGFuZ2VkfS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBub3RpZnlDaGFuZ2VkKE5vdGlmaWNhdGlvbiBub3RpZmljYXRpb24pIHsKKwkJdXBkYXRlQ2hpbGRyZW4obm90aWZpY2F0aW9uKTsKKworCQlzd2l0Y2ggKG5vdGlmaWNhdGlvbi5nZXRGZWF0dXJlSUQoU3RhbmRhcmRJbnRlcnZlbnRpb25MYWJlbFZhbHVlLmNsYXNzKSkgeworCQkJY2FzZSBJbnRlcnZlbnRpb25zUGFja2FnZS5TVEFOREFSRF9JTlRFUlZFTlRJT05fTEFCRUxfVkFMVUVfX1ZBQ0NJTkFUSU9OUzoKKwkJCWNhc2UgSW50ZXJ2ZW50aW9uc1BhY2thZ2UuU1RBTkRBUkRfSU5URVJWRU5USU9OX0xBQkVMX1ZBTFVFX19JU09MQVRJT05TOgorCQkJCWZpcmVOb3RpZnlDaGFuZ2VkKG5ldyBWaWV3ZXJOb3RpZmljYXRpb24obm90aWZpY2F0aW9uLCBub3RpZmljYXRpb24uZ2V0Tm90aWZpZXIoKSwgZmFsc2UsIHRydWUpKTsKKwkJCQlyZXR1cm47CisJCX0KKwkJc3VwZXIubm90aWZ5Q2hhbmdlZChub3RpZmljYXRpb24pOworCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmVkaXQuY29tbWFuZC5Db21tYW5kUGFyYW1ldGVyfXMgZGVzY3JpYmluZyB0aGUgY2hpbGRyZW4KKwkgKiB0aGF0IGNhbiBiZSBjcmVhdGVkIHVuZGVyIHRoaXMgb2JqZWN0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIGNvbGxlY3ROZXdDaGlsZERlc2NyaXB0b3JzKENvbGxlY3Rpb248T2JqZWN0PiBuZXdDaGlsZERlc2NyaXB0b3JzLCBPYmplY3Qgb2JqZWN0KSB7CisJCXN1cGVyLmNvbGxlY3ROZXdDaGlsZERlc2NyaXB0b3JzKG5ld0NoaWxkRGVzY3JpcHRvcnMsIG9iamVjdCk7CisJfQorCit9CmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uaW50ZXJ2ZW50aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9pbnRlcnZlbnRpb25zL3V0aWwvSW50ZXJ2ZW50aW9uc0FkYXB0ZXJGYWN0b3J5LmphdmEgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uaW50ZXJ2ZW50aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9pbnRlcnZlbnRpb25zL3V0aWwvSW50ZXJ2ZW50aW9uc0FkYXB0ZXJGYWN0b3J5LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWRiYjg0OAotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcnZlbnRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2ludGVydmVudGlvbnMvdXRpbC9JbnRlcnZlbnRpb25zQWRhcHRlckZhY3RvcnkuamF2YQpAQCAtMCwwICsxLDM5MCBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmludGVydmVudGlvbnMudXRpbDsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogCisgKiBDb3B5cmlnaHQgKGMpIDIwMTEgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuIAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyAKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0IAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwgCisgKiAKKyAqIENvbnRyaWJ1dG9yczogCisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5BZGFwdGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWVyOworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuaW1wbC5BZGFwdGVyRmFjdG9yeUltcGw7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uSWRlbnRpZmlhYmxlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uU2FuaXR5Q2hlY2tlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguTGFiZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkxhYmVsVmFsdWU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLk5vZGVMYWJlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguU3RhdGljTGFiZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLlN0YXRpY05vZGVMYWJlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuTW9kaWZpYWJsZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmdyYXBoZ2VuZXJhdG9ycy5HcmFwaEdlbmVyYXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmludGVydmVudGlvbnMuKjsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogVGhlIDxiPkFkYXB0ZXIgRmFjdG9yeTwvYj4gZm9yIHRoZSBtb2RlbC4KKyAqIEl0IHByb3ZpZGVzIGFuIGFkYXB0ZXIgPGNvZGU+Y3JlYXRlWFhYPC9jb2RlPiBtZXRob2QgZm9yIGVhY2ggY2xhc3Mgb2YgdGhlIG1vZGVsLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uaW50ZXJ2ZW50aW9ucy5JbnRlcnZlbnRpb25zUGFja2FnZQorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgSW50ZXJ2ZW50aW9uc0FkYXB0ZXJGYWN0b3J5IGV4dGVuZHMgQWRhcHRlckZhY3RvcnlJbXBsIHsKKwkvKioKKwkgKiBUaGUgY2FjaGVkIG1vZGVsIHBhY2thZ2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHN0YXRpYyBJbnRlcnZlbnRpb25zUGFja2FnZSBtb2RlbFBhY2thZ2U7CisKKwkvKioKKwkgKiBDcmVhdGVzIGFuIGluc3RhbmNlIG9mIHRoZSBhZGFwdGVyIGZhY3RvcnkuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEludGVydmVudGlvbnNBZGFwdGVyRmFjdG9yeSgpIHsKKwkJaWYgKG1vZGVsUGFja2FnZSA9PSBudWxsKSB7CisJCQltb2RlbFBhY2thZ2UgPSBJbnRlcnZlbnRpb25zUGFja2FnZS5lSU5TVEFOQ0U7CisJCX0KKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHdoZXRoZXIgdGhpcyBmYWN0b3J5IGlzIGFwcGxpY2FibGUgZm9yIHRoZSB0eXBlIG9mIHRoZSBvYmplY3QuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgPGNvZGU+dHJ1ZTwvY29kZT4gaWYgdGhlIG9iamVjdCBpcyBlaXRoZXIgdGhlIG1vZGVsJ3MgcGFja2FnZSBvciBpcyBhbiBpbnN0YW5jZSBvYmplY3Qgb2YgdGhlIG1vZGVsLgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gd2hldGhlciB0aGlzIGZhY3RvcnkgaXMgYXBwbGljYWJsZSBmb3IgdGhlIHR5cGUgb2YgdGhlIG9iamVjdC4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIGJvb2xlYW4gaXNGYWN0b3J5Rm9yVHlwZShPYmplY3Qgb2JqZWN0KSB7CisJCWlmIChvYmplY3QgPT0gbW9kZWxQYWNrYWdlKSB7CisJCQlyZXR1cm4gdHJ1ZTsKKwkJfQorCQlpZiAob2JqZWN0IGluc3RhbmNlb2YgRU9iamVjdCkgeworCQkJcmV0dXJuICgoRU9iamVjdClvYmplY3QpLmVDbGFzcygpLmdldEVQYWNrYWdlKCkgPT0gbW9kZWxQYWNrYWdlOworCQl9CisJCXJldHVybiBmYWxzZTsKKwl9CisKKwkvKioKKwkgKiBUaGUgc3dpdGNoIHRoYXQgZGVsZWdhdGVzIHRvIHRoZSA8Y29kZT5jcmVhdGVYWFg8L2NvZGU+IG1ldGhvZHMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIEludGVydmVudGlvbnNTd2l0Y2g8QWRhcHRlcj4gbW9kZWxTd2l0Y2ggPQorCQluZXcgSW50ZXJ2ZW50aW9uc1N3aXRjaDxBZGFwdGVyPigpIHsKKwkJCUBPdmVycmlkZQorCQkJcHVibGljIEFkYXB0ZXIgY2FzZUludGVydmVudGlvbkxhYmVsKEludGVydmVudGlvbkxhYmVsIG9iamVjdCkgeworCQkJCXJldHVybiBjcmVhdGVJbnRlcnZlbnRpb25MYWJlbEFkYXB0ZXIoKTsKKwkJCX0KKwkJCUBPdmVycmlkZQorCQkJcHVibGljIEFkYXB0ZXIgY2FzZVN0YW5kYXJkSW50ZXJ2ZW50aW9uTGFiZWwoU3RhbmRhcmRJbnRlcnZlbnRpb25MYWJlbCBvYmplY3QpIHsKKwkJCQlyZXR1cm4gY3JlYXRlU3RhbmRhcmRJbnRlcnZlbnRpb25MYWJlbEFkYXB0ZXIoKTsKKwkJCX0KKwkJCUBPdmVycmlkZQorCQkJcHVibGljIEFkYXB0ZXIgY2FzZUNvbnRyb2xHcmFwaEdlbmVyYXRvcihDb250cm9sR3JhcGhHZW5lcmF0b3Igb2JqZWN0KSB7CisJCQkJcmV0dXJuIGNyZWF0ZUNvbnRyb2xHcmFwaEdlbmVyYXRvckFkYXB0ZXIoKTsKKwkJCX0KKwkJCUBPdmVycmlkZQorCQkJcHVibGljIEFkYXB0ZXIgY2FzZUludGVydmVudGlvbkxhYmVsVmFsdWUoSW50ZXJ2ZW50aW9uTGFiZWxWYWx1ZSBvYmplY3QpIHsKKwkJCQlyZXR1cm4gY3JlYXRlSW50ZXJ2ZW50aW9uTGFiZWxWYWx1ZUFkYXB0ZXIoKTsKKwkJCX0KKwkJCUBPdmVycmlkZQorCQkJcHVibGljIEFkYXB0ZXIgY2FzZVN0YW5kYXJkSW50ZXJ2ZW50aW9uTGFiZWxWYWx1ZShTdGFuZGFyZEludGVydmVudGlvbkxhYmVsVmFsdWUgb2JqZWN0KSB7CisJCQkJcmV0dXJuIGNyZWF0ZVN0YW5kYXJkSW50ZXJ2ZW50aW9uTGFiZWxWYWx1ZUFkYXB0ZXIoKTsKKwkJCX0KKwkJCUBPdmVycmlkZQorCQkJcHVibGljIDxUPiBBZGFwdGVyIGNhc2VDb21wYXJhYmxlKENvbXBhcmFibGU8VD4gb2JqZWN0KSB7CisJCQkJcmV0dXJuIGNyZWF0ZUNvbXBhcmFibGVBZGFwdGVyKCk7CisJCQl9CisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyBBZGFwdGVyIGNhc2VJZGVudGlmaWFibGUoSWRlbnRpZmlhYmxlIG9iamVjdCkgeworCQkJCXJldHVybiBjcmVhdGVJZGVudGlmaWFibGVBZGFwdGVyKCk7CisJCQl9CisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyBBZGFwdGVyIGNhc2VMYWJlbChMYWJlbCBvYmplY3QpIHsKKwkJCQlyZXR1cm4gY3JlYXRlTGFiZWxBZGFwdGVyKCk7CisJCQl9CisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyBBZGFwdGVyIGNhc2VOb2RlTGFiZWwoTm9kZUxhYmVsIG9iamVjdCkgeworCQkJCXJldHVybiBjcmVhdGVOb2RlTGFiZWxBZGFwdGVyKCk7CisJCQl9CisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyBBZGFwdGVyIGNhc2VNb2RpZmlhYmxlKE1vZGlmaWFibGUgb2JqZWN0KSB7CisJCQkJcmV0dXJuIGNyZWF0ZU1vZGlmaWFibGVBZGFwdGVyKCk7CisJCQl9CisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyBBZGFwdGVyIGNhc2VTdGF0aWNMYWJlbChTdGF0aWNMYWJlbCBvYmplY3QpIHsKKwkJCQlyZXR1cm4gY3JlYXRlU3RhdGljTGFiZWxBZGFwdGVyKCk7CisJCQl9CisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyBBZGFwdGVyIGNhc2VTdGF0aWNOb2RlTGFiZWwoU3RhdGljTm9kZUxhYmVsIG9iamVjdCkgeworCQkJCXJldHVybiBjcmVhdGVTdGF0aWNOb2RlTGFiZWxBZGFwdGVyKCk7CisJCQl9CisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyBBZGFwdGVyIGNhc2VHcmFwaEdlbmVyYXRvcihHcmFwaEdlbmVyYXRvciBvYmplY3QpIHsKKwkJCQlyZXR1cm4gY3JlYXRlR3JhcGhHZW5lcmF0b3JBZGFwdGVyKCk7CisJCQl9CisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyBBZGFwdGVyIGNhc2VTYW5pdHlDaGVja2VyKFNhbml0eUNoZWNrZXIgb2JqZWN0KSB7CisJCQkJcmV0dXJuIGNyZWF0ZVNhbml0eUNoZWNrZXJBZGFwdGVyKCk7CisJCQl9CisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyBBZGFwdGVyIGNhc2VMYWJlbFZhbHVlKExhYmVsVmFsdWUgb2JqZWN0KSB7CisJCQkJcmV0dXJuIGNyZWF0ZUxhYmVsVmFsdWVBZGFwdGVyKCk7CisJCQl9CisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyBBZGFwdGVyIGRlZmF1bHRDYXNlKEVPYmplY3Qgb2JqZWN0KSB7CisJCQkJcmV0dXJuIGNyZWF0ZUVPYmplY3RBZGFwdGVyKCk7CisJCQl9CisJCX07CisKKwkvKioKKwkgKiBDcmVhdGVzIGFuIGFkYXB0ZXIgZm9yIHRoZSA8Y29kZT50YXJnZXQ8L2NvZGU+LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIHRhcmdldCB0aGUgb2JqZWN0IHRvIGFkYXB0LgorCSAqIEByZXR1cm4gdGhlIGFkYXB0ZXIgZm9yIHRoZSA8Y29kZT50YXJnZXQ8L2NvZGU+LgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVBZGFwdGVyKE5vdGlmaWVyIHRhcmdldCkgeworCQlyZXR1cm4gbW9kZWxTd2l0Y2guZG9Td2l0Y2goKEVPYmplY3QpdGFyZ2V0KTsKKwl9CisKKworCS8qKgorCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcnZlbnRpb25zLkludGVydmVudGlvbkxhYmVsIDxlbT5JbnRlcnZlbnRpb24gTGFiZWw8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOworCSAqIGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZSB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5LgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcnZlbnRpb25zLkludGVydmVudGlvbkxhYmVsCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZUludGVydmVudGlvbkxhYmVsQWRhcHRlcigpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmludGVydmVudGlvbnMuU3RhbmRhcmRJbnRlcnZlbnRpb25MYWJlbCA8ZW0+U3RhbmRhcmQgSW50ZXJ2ZW50aW9uIExhYmVsPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsKKwkgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uaW50ZXJ2ZW50aW9ucy5TdGFuZGFyZEludGVydmVudGlvbkxhYmVsCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZVN0YW5kYXJkSW50ZXJ2ZW50aW9uTGFiZWxBZGFwdGVyKCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uaW50ZXJ2ZW50aW9ucy5Db250cm9sR3JhcGhHZW5lcmF0b3IgPGVtPkNvbnRyb2wgR3JhcGggR2VuZXJhdG9yPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsKKwkgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uaW50ZXJ2ZW50aW9ucy5Db250cm9sR3JhcGhHZW5lcmF0b3IKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlQ29udHJvbEdyYXBoR2VuZXJhdG9yQWRhcHRlcigpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmludGVydmVudGlvbnMuSW50ZXJ2ZW50aW9uTGFiZWxWYWx1ZSA8ZW0+SW50ZXJ2ZW50aW9uIExhYmVsIFZhbHVlPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsKKwkgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uaW50ZXJ2ZW50aW9ucy5JbnRlcnZlbnRpb25MYWJlbFZhbHVlCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZUludGVydmVudGlvbkxhYmVsVmFsdWVBZGFwdGVyKCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uaW50ZXJ2ZW50aW9ucy5TdGFuZGFyZEludGVydmVudGlvbkxhYmVsVmFsdWUgPGVtPlN0YW5kYXJkIEludGVydmVudGlvbiBMYWJlbCBWYWx1ZTwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7CisJICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmludGVydmVudGlvbnMuU3RhbmRhcmRJbnRlcnZlbnRpb25MYWJlbFZhbHVlCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZVN0YW5kYXJkSW50ZXJ2ZW50aW9uTGFiZWxWYWx1ZUFkYXB0ZXIoKSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5TYW5pdHlDaGVja2VyIDxlbT5TYW5pdHkgQ2hlY2tlcjwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7CisJICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLlNhbml0eUNoZWNrZXIKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlU2FuaXR5Q2hlY2tlckFkYXB0ZXIoKSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkxhYmVsVmFsdWUgPGVtPkxhYmVsIFZhbHVlPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsKKwkgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5MYWJlbFZhbHVlCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZUxhYmVsVmFsdWVBZGFwdGVyKCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIGphdmEubGFuZy5Db21wYXJhYmxlIDxlbT5Db21wYXJhYmxlPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsKKwkgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KKwkgKiBAc2VlIGphdmEubGFuZy5Db21wYXJhYmxlCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZUNvbXBhcmFibGVBZGFwdGVyKCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uSWRlbnRpZmlhYmxlIDxlbT5JZGVudGlmaWFibGU8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOworCSAqIGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZSB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5LgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5JZGVudGlmaWFibGUKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlSWRlbnRpZmlhYmxlQWRhcHRlcigpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguTGFiZWwgPGVtPkxhYmVsPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsKKwkgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5MYWJlbAorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVMYWJlbEFkYXB0ZXIoKSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLk5vZGVMYWJlbCA8ZW0+Tm9kZSBMYWJlbDwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7CisJICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguTm9kZUxhYmVsCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZU5vZGVMYWJlbEFkYXB0ZXIoKSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLk1vZGlmaWFibGUgPGVtPk1vZGlmaWFibGU8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOworCSAqIGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZSB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5LgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLk1vZGlmaWFibGUKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlTW9kaWZpYWJsZUFkYXB0ZXIoKSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLlN0YXRpY0xhYmVsIDxlbT5TdGF0aWMgTGFiZWw8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOworCSAqIGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZSB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5LgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLlN0YXRpY0xhYmVsCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZVN0YXRpY0xhYmVsQWRhcHRlcigpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguU3RhdGljTm9kZUxhYmVsIDxlbT5TdGF0aWMgTm9kZSBMYWJlbDwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7CisJICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguU3RhdGljTm9kZUxhYmVsCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZVN0YXRpY05vZGVMYWJlbEFkYXB0ZXIoKSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaGdlbmVyYXRvcnMuR3JhcGhHZW5lcmF0b3IgPGVtPkdyYXBoIEdlbmVyYXRvcjwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7CisJICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmdyYXBoZ2VuZXJhdG9ycy5HcmFwaEdlbmVyYXRvcgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVHcmFwaEdlbmVyYXRvckFkYXB0ZXIoKSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgdGhlIGRlZmF1bHQgY2FzZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwuCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZUVPYmplY3RBZGFwdGVyKCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKK30gLy9JbnRlcnZlbnRpb25zQWRhcHRlckZhY3RvcnkKZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcnZlbnRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2ludGVydmVudGlvbnMvdXRpbC9JbnRlcnZlbnRpb25zU3dpdGNoLmphdmEgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uaW50ZXJ2ZW50aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9pbnRlcnZlbnRpb25zL3V0aWwvSW50ZXJ2ZW50aW9uc1N3aXRjaC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ0ODkzYTEKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uaW50ZXJ2ZW50aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9pbnRlcnZlbnRpb25zL3V0aWwvSW50ZXJ2ZW50aW9uc1N3aXRjaC5qYXZhCkBAIC0wLDAgKzEsNDAxIEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uaW50ZXJ2ZW50aW9ucy51dGlsOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAKKyAqIENvcHlyaWdodCAoYykgMjAxMSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4gCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIAorICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wIAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQgCisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbCAKKyAqIAorICogQ29udHJpYnV0b3JzOiAKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGphdmEudXRpbC5MaXN0OworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzczsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uSWRlbnRpZmlhYmxlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uU2FuaXR5Q2hlY2tlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguTGFiZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkxhYmVsVmFsdWU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLk5vZGVMYWJlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguU3RhdGljTGFiZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLlN0YXRpY05vZGVMYWJlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuTW9kaWZpYWJsZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmdyYXBoZ2VuZXJhdG9ycy5HcmFwaEdlbmVyYXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmludGVydmVudGlvbnMuKjsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogVGhlIDxiPlN3aXRjaDwvYj4gZm9yIHRoZSBtb2RlbCdzIGluaGVyaXRhbmNlIGhpZXJhcmNoeS4KKyAqIEl0IHN1cHBvcnRzIHRoZSBjYWxsIHtAbGluayAjZG9Td2l0Y2goRU9iamVjdCkgZG9Td2l0Y2gob2JqZWN0KX0KKyAqIHRvIGludm9rZSB0aGUgPGNvZGU+Y2FzZVhYWDwvY29kZT4gbWV0aG9kIGZvciBlYWNoIGNsYXNzIG9mIHRoZSBtb2RlbCwKKyAqIHN0YXJ0aW5nIHdpdGggdGhlIGFjdHVhbCBjbGFzcyBvZiB0aGUgb2JqZWN0CisgKiBhbmQgcHJvY2VlZGluZyB1cCB0aGUgaW5oZXJpdGFuY2UgaGllcmFyY2h5CisgKiB1bnRpbCBhIG5vbi1udWxsIHJlc3VsdCBpcyByZXR1cm5lZCwKKyAqIHdoaWNoIGlzIHRoZSByZXN1bHQgb2YgdGhlIHN3aXRjaC4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmludGVydmVudGlvbnMuSW50ZXJ2ZW50aW9uc1BhY2thZ2UKKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIEludGVydmVudGlvbnNTd2l0Y2g8VDE+IHsKKwkvKioKKwkgKiBUaGUgY2FjaGVkIG1vZGVsIHBhY2thZ2UKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgc3RhdGljIEludGVydmVudGlvbnNQYWNrYWdlIG1vZGVsUGFja2FnZTsKKworCS8qKgorCSAqIENyZWF0ZXMgYW4gaW5zdGFuY2Ugb2YgdGhlIHN3aXRjaC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgSW50ZXJ2ZW50aW9uc1N3aXRjaCgpIHsKKwkJaWYgKG1vZGVsUGFja2FnZSA9PSBudWxsKSB7CisJCQltb2RlbFBhY2thZ2UgPSBJbnRlcnZlbnRpb25zUGFja2FnZS5lSU5TVEFOQ0U7CisJCX0KKwl9CisKKwkvKioKKwkgKiBDYWxscyA8Y29kZT5jYXNlWFhYPC9jb2RlPiBmb3IgZWFjaCBjbGFzcyBvZiB0aGUgbW9kZWwgdW50aWwgb25lIHJldHVybnMgYSBub24gbnVsbCByZXN1bHQ7IGl0IHlpZWxkcyB0aGF0IHJlc3VsdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIGZpcnN0IG5vbi1udWxsIHJlc3VsdCByZXR1cm5lZCBieSBhIDxjb2RlPmNhc2VYWFg8L2NvZGU+IGNhbGwuCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBUMSBkb1N3aXRjaChFT2JqZWN0IHRoZUVPYmplY3QpIHsKKwkJcmV0dXJuIGRvU3dpdGNoKHRoZUVPYmplY3QuZUNsYXNzKCksIHRoZUVPYmplY3QpOworCX0KKworCS8qKgorCSAqIENhbGxzIDxjb2RlPmNhc2VYWFg8L2NvZGU+IGZvciBlYWNoIGNsYXNzIG9mIHRoZSBtb2RlbCB1bnRpbCBvbmUgcmV0dXJucyBhIG5vbiBudWxsIHJlc3VsdDsgaXQgeWllbGRzIHRoYXQgcmVzdWx0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgZmlyc3Qgbm9uLW51bGwgcmVzdWx0IHJldHVybmVkIGJ5IGEgPGNvZGU+Y2FzZVhYWDwvY29kZT4gY2FsbC4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIFQxIGRvU3dpdGNoKEVDbGFzcyB0aGVFQ2xhc3MsIEVPYmplY3QgdGhlRU9iamVjdCkgeworCQlpZiAodGhlRUNsYXNzLmVDb250YWluZXIoKSA9PSBtb2RlbFBhY2thZ2UpIHsKKwkJCXJldHVybiBkb1N3aXRjaCh0aGVFQ2xhc3MuZ2V0Q2xhc3NpZmllcklEKCksIHRoZUVPYmplY3QpOworCQl9CisJCWVsc2UgeworCQkJTGlzdDxFQ2xhc3M+IGVTdXBlclR5cGVzID0gdGhlRUNsYXNzLmdldEVTdXBlclR5cGVzKCk7CisJCQlyZXR1cm4KKwkJCQllU3VwZXJUeXBlcy5pc0VtcHR5KCkgPworCQkJCQlkZWZhdWx0Q2FzZSh0aGVFT2JqZWN0KSA6CisJCQkJCWRvU3dpdGNoKGVTdXBlclR5cGVzLmdldCgwKSwgdGhlRU9iamVjdCk7CisJCX0KKwl9CisKKwkvKioKKwkgKiBDYWxscyA8Y29kZT5jYXNlWFhYPC9jb2RlPiBmb3IgZWFjaCBjbGFzcyBvZiB0aGUgbW9kZWwgdW50aWwgb25lIHJldHVybnMgYSBub24gbnVsbCByZXN1bHQ7IGl0IHlpZWxkcyB0aGF0IHJlc3VsdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIGZpcnN0IG5vbi1udWxsIHJlc3VsdCByZXR1cm5lZCBieSBhIDxjb2RlPmNhc2VYWFg8L2NvZGU+IGNhbGwuCisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBUMSBkb1N3aXRjaChpbnQgY2xhc3NpZmllcklELCBFT2JqZWN0IHRoZUVPYmplY3QpIHsKKwkJc3dpdGNoIChjbGFzc2lmaWVySUQpIHsKKwkJCWNhc2UgSW50ZXJ2ZW50aW9uc1BhY2thZ2UuSU5URVJWRU5USU9OX0xBQkVMOiB7CisJCQkJSW50ZXJ2ZW50aW9uTGFiZWwgaW50ZXJ2ZW50aW9uTGFiZWwgPSAoSW50ZXJ2ZW50aW9uTGFiZWwpdGhlRU9iamVjdDsKKwkJCQlUMSByZXN1bHQgPSBjYXNlSW50ZXJ2ZW50aW9uTGFiZWwoaW50ZXJ2ZW50aW9uTGFiZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZVN0YXRpY05vZGVMYWJlbChpbnRlcnZlbnRpb25MYWJlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlTm9kZUxhYmVsKGludGVydmVudGlvbkxhYmVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VTdGF0aWNMYWJlbChpbnRlcnZlbnRpb25MYWJlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlTGFiZWwoaW50ZXJ2ZW50aW9uTGFiZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZU1vZGlmaWFibGUoaW50ZXJ2ZW50aW9uTGFiZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZUlkZW50aWZpYWJsZShpbnRlcnZlbnRpb25MYWJlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlQ29tcGFyYWJsZShpbnRlcnZlbnRpb25MYWJlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBkZWZhdWx0Q2FzZSh0aGVFT2JqZWN0KTsKKwkJCQlyZXR1cm4gcmVzdWx0OworCQkJfQorCQkJY2FzZSBJbnRlcnZlbnRpb25zUGFja2FnZS5TVEFOREFSRF9JTlRFUlZFTlRJT05fTEFCRUw6IHsKKwkJCQlTdGFuZGFyZEludGVydmVudGlvbkxhYmVsIHN0YW5kYXJkSW50ZXJ2ZW50aW9uTGFiZWwgPSAoU3RhbmRhcmRJbnRlcnZlbnRpb25MYWJlbCl0aGVFT2JqZWN0OworCQkJCVQxIHJlc3VsdCA9IGNhc2VTdGFuZGFyZEludGVydmVudGlvbkxhYmVsKHN0YW5kYXJkSW50ZXJ2ZW50aW9uTGFiZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZUludGVydmVudGlvbkxhYmVsKHN0YW5kYXJkSW50ZXJ2ZW50aW9uTGFiZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZVN0YXRpY05vZGVMYWJlbChzdGFuZGFyZEludGVydmVudGlvbkxhYmVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VOb2RlTGFiZWwoc3RhbmRhcmRJbnRlcnZlbnRpb25MYWJlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlU3RhdGljTGFiZWwoc3RhbmRhcmRJbnRlcnZlbnRpb25MYWJlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlTGFiZWwoc3RhbmRhcmRJbnRlcnZlbnRpb25MYWJlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlTW9kaWZpYWJsZShzdGFuZGFyZEludGVydmVudGlvbkxhYmVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VJZGVudGlmaWFibGUoc3RhbmRhcmRJbnRlcnZlbnRpb25MYWJlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlQ29tcGFyYWJsZShzdGFuZGFyZEludGVydmVudGlvbkxhYmVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGRlZmF1bHRDYXNlKHRoZUVPYmplY3QpOworCQkJCXJldHVybiByZXN1bHQ7CisJCQl9CisJCQljYXNlIEludGVydmVudGlvbnNQYWNrYWdlLkNPTlRST0xfR1JBUEhfR0VORVJBVE9SOiB7CisJCQkJQ29udHJvbEdyYXBoR2VuZXJhdG9yIGNvbnRyb2xHcmFwaEdlbmVyYXRvciA9IChDb250cm9sR3JhcGhHZW5lcmF0b3IpdGhlRU9iamVjdDsKKwkJCQlUMSByZXN1bHQgPSBjYXNlQ29udHJvbEdyYXBoR2VuZXJhdG9yKGNvbnRyb2xHcmFwaEdlbmVyYXRvcik7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlR3JhcGhHZW5lcmF0b3IoY29udHJvbEdyYXBoR2VuZXJhdG9yKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VJZGVudGlmaWFibGUoY29udHJvbEdyYXBoR2VuZXJhdG9yKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VDb21wYXJhYmxlKGNvbnRyb2xHcmFwaEdlbmVyYXRvcik7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBkZWZhdWx0Q2FzZSh0aGVFT2JqZWN0KTsKKwkJCQlyZXR1cm4gcmVzdWx0OworCQkJfQorCQkJY2FzZSBJbnRlcnZlbnRpb25zUGFja2FnZS5JTlRFUlZFTlRJT05fTEFCRUxfVkFMVUU6IHsKKwkJCQlJbnRlcnZlbnRpb25MYWJlbFZhbHVlIGludGVydmVudGlvbkxhYmVsVmFsdWUgPSAoSW50ZXJ2ZW50aW9uTGFiZWxWYWx1ZSl0aGVFT2JqZWN0OworCQkJCVQxIHJlc3VsdCA9IGNhc2VJbnRlcnZlbnRpb25MYWJlbFZhbHVlKGludGVydmVudGlvbkxhYmVsVmFsdWUpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZUxhYmVsVmFsdWUoaW50ZXJ2ZW50aW9uTGFiZWxWYWx1ZSk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlU2FuaXR5Q2hlY2tlcihpbnRlcnZlbnRpb25MYWJlbFZhbHVlKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGRlZmF1bHRDYXNlKHRoZUVPYmplY3QpOworCQkJCXJldHVybiByZXN1bHQ7CisJCQl9CisJCQljYXNlIEludGVydmVudGlvbnNQYWNrYWdlLlNUQU5EQVJEX0lOVEVSVkVOVElPTl9MQUJFTF9WQUxVRTogeworCQkJCVN0YW5kYXJkSW50ZXJ2ZW50aW9uTGFiZWxWYWx1ZSBzdGFuZGFyZEludGVydmVudGlvbkxhYmVsVmFsdWUgPSAoU3RhbmRhcmRJbnRlcnZlbnRpb25MYWJlbFZhbHVlKXRoZUVPYmplY3Q7CisJCQkJVDEgcmVzdWx0ID0gY2FzZVN0YW5kYXJkSW50ZXJ2ZW50aW9uTGFiZWxWYWx1ZShzdGFuZGFyZEludGVydmVudGlvbkxhYmVsVmFsdWUpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZUludGVydmVudGlvbkxhYmVsVmFsdWUoc3RhbmRhcmRJbnRlcnZlbnRpb25MYWJlbFZhbHVlKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VMYWJlbFZhbHVlKHN0YW5kYXJkSW50ZXJ2ZW50aW9uTGFiZWxWYWx1ZSk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlU2FuaXR5Q2hlY2tlcihzdGFuZGFyZEludGVydmVudGlvbkxhYmVsVmFsdWUpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gZGVmYXVsdENhc2UodGhlRU9iamVjdCk7CisJCQkJcmV0dXJuIHJlc3VsdDsKKwkJCX0KKwkJCWRlZmF1bHQ6IHJldHVybiBkZWZhdWx0Q2FzZSh0aGVFT2JqZWN0KTsKKwkJfQorCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkludGVydmVudGlvbiBMYWJlbDwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOworCSAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgorCSAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkludGVydmVudGlvbiBMYWJlbDwvZW0+Jy4KKwkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFQxIGNhc2VJbnRlcnZlbnRpb25MYWJlbChJbnRlcnZlbnRpb25MYWJlbCBvYmplY3QpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+U3RhbmRhcmQgSW50ZXJ2ZW50aW9uIExhYmVsPC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7CisJICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCisJICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+U3RhbmRhcmQgSW50ZXJ2ZW50aW9uIExhYmVsPC9lbT4nLgorCSAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVDEgY2FzZVN0YW5kYXJkSW50ZXJ2ZW50aW9uTGFiZWwoU3RhbmRhcmRJbnRlcnZlbnRpb25MYWJlbCBvYmplY3QpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+Q29udHJvbCBHcmFwaCBHZW5lcmF0b3I8L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsKKwkgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KKwkgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5Db250cm9sIEdyYXBoIEdlbmVyYXRvcjwvZW0+Jy4KKwkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFQxIGNhc2VDb250cm9sR3JhcGhHZW5lcmF0b3IoQ29udHJvbEdyYXBoR2VuZXJhdG9yIG9iamVjdCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5JbnRlcnZlbnRpb24gTGFiZWwgVmFsdWU8L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsKKwkgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KKwkgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5JbnRlcnZlbnRpb24gTGFiZWwgVmFsdWU8L2VtPicuCisJICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBUMSBjYXNlSW50ZXJ2ZW50aW9uTGFiZWxWYWx1ZShJbnRlcnZlbnRpb25MYWJlbFZhbHVlIG9iamVjdCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5TdGFuZGFyZCBJbnRlcnZlbnRpb24gTGFiZWwgVmFsdWU8L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsKKwkgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KKwkgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5TdGFuZGFyZCBJbnRlcnZlbnRpb24gTGFiZWwgVmFsdWU8L2VtPicuCisJICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBUMSBjYXNlU3RhbmRhcmRJbnRlcnZlbnRpb25MYWJlbFZhbHVlKFN0YW5kYXJkSW50ZXJ2ZW50aW9uTGFiZWxWYWx1ZSBvYmplY3QpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+U2FuaXR5IENoZWNrZXI8L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsKKwkgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KKwkgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5TYW5pdHkgQ2hlY2tlcjwvZW0+Jy4KKwkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFQxIGNhc2VTYW5pdHlDaGVja2VyKFNhbml0eUNoZWNrZXIgb2JqZWN0KSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkxhYmVsIFZhbHVlPC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7CisJICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCisJICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+TGFiZWwgVmFsdWU8L2VtPicuCisJICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBUMSBjYXNlTGFiZWxWYWx1ZShMYWJlbFZhbHVlIG9iamVjdCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5Db21wYXJhYmxlPC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7CisJICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCisJICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+Q29tcGFyYWJsZTwvZW0+Jy4KKwkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIDxUPiBUMSBjYXNlQ29tcGFyYWJsZShDb21wYXJhYmxlPFQ+IG9iamVjdCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5JZGVudGlmaWFibGU8L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsKKwkgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KKwkgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5JZGVudGlmaWFibGU8L2VtPicuCisJICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBUMSBjYXNlSWRlbnRpZmlhYmxlKElkZW50aWZpYWJsZSBvYmplY3QpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+TGFiZWw8L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsKKwkgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KKwkgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5MYWJlbDwvZW0+Jy4KKwkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFQxIGNhc2VMYWJlbChMYWJlbCBvYmplY3QpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+Tm9kZSBMYWJlbDwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOworCSAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgorCSAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPk5vZGUgTGFiZWw8L2VtPicuCisJICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBUMSBjYXNlTm9kZUxhYmVsKE5vZGVMYWJlbCBvYmplY3QpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+TW9kaWZpYWJsZTwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOworCSAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgorCSAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPk1vZGlmaWFibGU8L2VtPicuCisJICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBUMSBjYXNlTW9kaWZpYWJsZShNb2RpZmlhYmxlIG9iamVjdCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5TdGF0aWMgTGFiZWw8L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsKKwkgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KKwkgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5TdGF0aWMgTGFiZWw8L2VtPicuCisJICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBUMSBjYXNlU3RhdGljTGFiZWwoU3RhdGljTGFiZWwgb2JqZWN0KSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPlN0YXRpYyBOb2RlIExhYmVsPC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7CisJICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCisJICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+U3RhdGljIE5vZGUgTGFiZWw8L2VtPicuCisJICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBUMSBjYXNlU3RhdGljTm9kZUxhYmVsKFN0YXRpY05vZGVMYWJlbCBvYmplY3QpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+R3JhcGggR2VuZXJhdG9yPC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7CisJICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCisJICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+R3JhcGggR2VuZXJhdG9yPC9lbT4nLgorCSAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVDEgY2FzZUdyYXBoR2VuZXJhdG9yKEdyYXBoR2VuZXJhdG9yIG9iamVjdCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5FT2JqZWN0PC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7CisJICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2gsIGJ1dCB0aGlzIGlzIHRoZSBsYXN0IGNhc2UgYW55d2F5LgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgorCSAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkVPYmplY3Q8L2VtPicuCisJICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBUMSBkZWZhdWx0Q2FzZShFT2JqZWN0IG9iamVjdCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKK30gLy9JbnRlcnZlbnRpb25zU3dpdGNoCmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy5leGFtcGxlLy5jbGFzc3BhdGggYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy5leGFtcGxlLy5jbGFzc3BhdGgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzA0ZTg2MQotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzLmV4YW1wbGUvLmNsYXNzcGF0aApAQCAtMCwwICsxLDcgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8Y2xhc3NwYXRoPgorCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJzcmMiIHBhdGg9InNyYyIvPgorCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJjb24iIHBhdGg9Im9yZy5lY2xpcHNlLmpkdC5sYXVuY2hpbmcuSlJFX0NPTlRBSU5FUi9vcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwuZGVidWcudWkubGF1bmNoZXIuU3RhbmRhcmRWTVR5cGUvSjJTRS0xLjUiLz4KKwk8Y2xhc3NwYXRoZW50cnkga2luZD0iY29uIiBwYXRoPSJvcmcuZWNsaXBzZS5wZGUuY29yZS5yZXF1aXJlZFBsdWdpbnMiLz4KKwk8Y2xhc3NwYXRoZW50cnkga2luZD0ib3V0cHV0IiBwYXRoPSJiaW4iLz4KKzwvY2xhc3NwYXRoPgpkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMuZXhhbXBsZS8ucHJvamVjdCBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzLmV4YW1wbGUvLnByb2plY3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWExMDNiMgotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzLmV4YW1wbGUvLnByb2plY3QKQEAgLTAsMCArMSwyOCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxwcm9qZWN0RGVzY3JpcHRpb24+CisJPG5hbWU+b3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzLmV4YW1wbGU8L25hbWU+CisJPGNvbW1lbnQ+PC9jb21tZW50PgorCTxwcm9qZWN0cz4KKwk8L3Byb2plY3RzPgorCTxidWlsZFNwZWM+CisJCTxidWlsZENvbW1hbmQ+CisJCQk8bmFtZT5vcmcuZWNsaXBzZS5qZHQuY29yZS5qYXZhYnVpbGRlcjwvbmFtZT4KKwkJCTxhcmd1bWVudHM+CisJCQk8L2FyZ3VtZW50cz4KKwkJPC9idWlsZENvbW1hbmQ+CisJCTxidWlsZENvbW1hbmQ+CisJCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuTWFuaWZlc3RCdWlsZGVyPC9uYW1lPgorCQkJPGFyZ3VtZW50cz4KKwkJCTwvYXJndW1lbnRzPgorCQk8L2J1aWxkQ29tbWFuZD4KKwkJPGJ1aWxkQ29tbWFuZD4KKwkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5TY2hlbWFCdWlsZGVyPC9uYW1lPgorCQkJPGFyZ3VtZW50cz4KKwkJCTwvYXJndW1lbnRzPgorCQk8L2J1aWxkQ29tbWFuZD4KKwk8L2J1aWxkU3BlYz4KKwk8bmF0dXJlcz4KKwkJPG5hdHVyZT5vcmcuZWNsaXBzZS5qZHQuY29yZS5qYXZhbmF0dXJlPC9uYXR1cmU+CisJCTxuYXR1cmU+b3JnLmVjbGlwc2UucGRlLlBsdWdpbk5hdHVyZTwvbmF0dXJlPgorCTwvbmF0dXJlcz4KKzwvcHJvamVjdERlc2NyaXB0aW9uPgpkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMuZXhhbXBsZS9NRVRBLUlORi9NQU5JRkVTVC5NRiBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzLmV4YW1wbGUvTUVUQS1JTkYvTUFOSUZFU1QuTUYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmU5NTJiZgotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzLmV4YW1wbGUvTUVUQS1JTkYvTUFOSUZFU1QuTUYKQEAgLTAsMCArMSwxNiBAQAorTWFuaWZlc3QtVmVyc2lvbjogMS4wCitCdW5kbGUtTWFuaWZlc3RWZXJzaW9uOiAyCitCdW5kbGUtTmFtZTogJXBsdWdpbk5hbWUKK0J1bmRsZS1TeW1ib2xpY05hbWU6IG9yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy5leGFtcGxlO3NpbmdsZXRvbjo9dHJ1ZQorQnVuZGxlLVZlcnNpb246IDEuMi4xCitCdW5kbGUtQ2xhc3NQYXRoOiAuCitCdW5kbGUtQWN0aXZhdG9yOiBvcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMuZXhhbXBsZS5wcmVzZW50YXRpb24uRXhhbXBsZUVkaXRvclBsdWdpbiRJbXBsZW1lbnRhdGlvbgorQnVuZGxlLVZlbmRvcjogJXByb3ZpZGVyTmFtZQorQnVuZGxlLUxvY2FsaXphdGlvbjogcGx1Z2luCitCdW5kbGUtUmVxdWlyZWRFeGVjdXRpb25FbnZpcm9ubWVudDogSjJTRS0xLjUKK0V4cG9ydC1QYWNrYWdlOiBvcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMuZXhhbXBsZS5wcmVzZW50YXRpb24KK1JlcXVpcmUtQnVuZGxlOiBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXhhbXBsZTt2aXNpYmlsaXR5Oj1yZWV4cG9ydCwKKyBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuZWRpdDt2aXNpYmlsaXR5Oj1yZWV4cG9ydCwKKyBvcmcuZWNsaXBzZS5zdGVtLnVpLAorIG9yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscworQnVuZGxlLUFjdGl2YXRpb25Qb2xpY3k6IGxhenkKZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzLmV4YW1wbGUvYnVpbGQucHJvcGVydGllcyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzLmV4YW1wbGUvYnVpbGQucHJvcGVydGllcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYmJiNWM0Ci0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMuZXhhbXBsZS9idWlsZC5wcm9wZXJ0aWVzCkBAIC0wLDAgKzEsMTcgQEAKKworIyA8Y29weXJpZ2h0PgorIyA8L2NvcHlyaWdodD4KKyMKKyMgJElkOiBidWlsZC5wcm9wZXJ0aWVzLHYgMS4xIDIwMDgvMTIvMTUgMjE6NDk6NTYgamthdWZtYW4gRXhwICQKKworYmluLmluY2x1ZGVzID0gLixcCisgICAgICAgICAgICAgICBpY29ucy8sXAorICAgICAgICAgICAgICAgTUVUQS1JTkYvLFwKKyAgICAgICAgICAgICAgIHBsdWdpbi54bWwsXAorICAgICAgICAgICAgICAgcGx1Z2luLnByb3BlcnRpZXMsXAorICAgICAgICAgICAgICAgcGx1Z2luX2RlLnByb3BlcnRpZXMsXAorICAgICAgICAgICAgICAgcGx1Z2luX2tyLnByb3BlcnRpZXMsXAorICAgICAgICAgICAgICAgcGx1Z2luX3poLnByb3BlcnRpZXMKK2phcnMuY29tcGlsZS5vcmRlciA9IC4KK3NvdXJjZS4uID0gc3JjLworb3V0cHV0Li4gPSBiaW4vCmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy5leGFtcGxlL2ljb25zL2Z1bGwvb2JqMTYvRXhhbXBsZU1vZGVsRmlsZS5naWYgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy5leGFtcGxlL2ljb25zL2Z1bGwvb2JqMTYvRXhhbXBsZU1vZGVsRmlsZS5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2MwNGRhZQotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzLmV4YW1wbGUvaWNvbnMvZnVsbC9vYmoxNi9FeGFtcGxlTW9kZWxGaWxlLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy5leGFtcGxlL3BsdWdpbi5wcm9wZXJ0aWVzIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMuZXhhbXBsZS9wbHVnaW4ucHJvcGVydGllcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iM2NhMWNiCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMuZXhhbXBsZS9wbHVnaW4ucHJvcGVydGllcwpAQCAtMCwwICsxLDQ3IEBACisKKyMgPGNvcHlyaWdodD4KKyMgPC9jb3B5cmlnaHQ+CisjCisjICRJZDogcGx1Z2luLnByb3BlcnRpZXMsdiAxLjMgMjAwOS8wMy8xMSAwMzo0NToyNiBzZWRsdW5kIEV4cCAkCisKK3BsdWdpbk5hbWUgPSBTVEVNIEV4YW1wbGUgRGlzZWFzZSBNb2RlbCBVSQorcHJvdmlkZXJOYW1lID0gRWNsaXBzZS5vcmcKKworX1VJX0V4YW1wbGVFZGl0b3JfbWVudSA9ICZFeGFtcGxlIEVkaXRvcgorCitfVUlfQ3JlYXRlQ2hpbGRfbWVudV9pdGVtID0gJk5ldyBDaGlsZAorX1VJX0NyZWF0ZVNpYmxpbmdfbWVudV9pdGVtID0gTiZldyBTaWJsaW5nCisKK19VSV9TaG93UHJvcGVydGllc1ZpZXdfbWVudV9pdGVtID0gU2hvdyAmUHJvcGVydGllcyBWaWV3CitfVUlfUmVmcmVzaFZpZXdlcl9tZW51X2l0ZW0gPSAmUmVmcmVzaAorCitfVUlfU2VsZWN0aW9uUGFnZV9sYWJlbCA9IFNlbGVjdGlvbgorCitfVUlfTm9PYmplY3RTZWxlY3RlZCA9IFNlbGVjdGVkIE5vdGhpbmcKK19VSV9TaW5nbGVPYmplY3RTZWxlY3RlZCA9IFNlbGVjdGVkIE9iamVjdDogezB9CitfVUlfTXVsdGlPYmplY3RTZWxlY3RlZCA9IFNlbGVjdGVkIHswfSBPYmplY3RzCisKK19VSV9PcGVuRWRpdG9yRXJyb3JfbGFiZWwgPSBPcGVuIEVkaXRvcgorCitfVUlfV2l6YXJkX2NhdGVnb3J5ID0gRXhhbXBsZSBFTUYgTW9kZWwgQ3JlYXRpb24gV2l6YXJkcworCitfVUlfQ3JlYXRlTW9kZWxFcnJvcl9tZXNzYWdlID0gUHJvYmxlbXMgZW5jb3VudGVyZWQgaW4gZmlsZSAiezB9IgorCitfVUlfRXhhbXBsZUVkaXRvcl9sYWJlbCA9IEV4YW1wbGUgTW9kZWwgRWRpdG9yCisKK19VSV9FeGFtcGxlRWRpdG9yRmlsZW5hbWVEZWZhdWx0QmFzZSA9IE15CitfVUlfRXhhbXBsZUVkaXRvckZpbGVuYW1lRXh0ZW5zaW9ucyA9IGV4YW1wbGUKKworX1VJX1dpemFyZF9sYWJlbCA9IE5ldworCitfV0FSTl9GaWxlbmFtZUV4dGVuc2lvbiA9IFRoZSBmaWxlIG5hbWUgbXVzdCBlbmQgaW4gJycuezB9JycKK19XQVJOX0ZpbGVuYW1lRXh0ZW5zaW9ucyA9IFRoZSBmaWxlIG5hbWUgbXVzdCBoYXZlIG9uZSBvZiB0aGUgZm9sbG93aW5nIGV4dGVuc2lvbnM6IHswfQorCitfVUlfTW9kZWxPYmplY3QgPSAmTW9kZWwgT2JqZWN0CitfVUlfWE1MRW5jb2RpbmcgPSAmWE1MIEVuY29kaW5nCitfVUlfWE1MRW5jb2RpbmdDaG9pY2VzID0gVVRGLTggQVNDSUkgVVRGLTE2IFVURi0xNkJFIFVURi0xNkxFIElTTy04ODU5LTEKK19VSV9XaXphcmRfaW5pdGlhbF9vYmplY3RfZGVzY3JpcHRpb24gPSBTZWxlY3QgYSBtb2RlbCBvYmplY3QgdG8gY3JlYXRlCisKK19VSV9GaWxlQ29uZmxpY3RfbGFiZWwgPSBGaWxlIENvbmZsaWN0CitfV0FSTl9GaWxlQ29uZmxpY3QgPSBUaGVyZSBhcmUgdW5zYXZlZCBjaGFuZ2VzIHRoYXQgY29uZmxpY3Qgd2l0aCBjaGFuZ2VzIG1hZGUgb3V0c2lkZSB0aGUgZWRpdG9yLiAgRG8geW91IHdpc2ggdG8gZGlzY2FyZCB0aGlzIGVkaXRvcidzIGNoYW5nZXM/CisKZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzLmV4YW1wbGUvcGx1Z2luLnhtbCBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzLmV4YW1wbGUvcGx1Z2luLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYmIwYjMyCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMuZXhhbXBsZS9wbHVnaW4ueG1sCkBAIC0wLDAgKzEsNDcgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8P2VjbGlwc2UgdmVyc2lvbj0iMy4wIj8+CisKKzwhLS0KKyA8Y29weXJpZ2h0PgorIDwvY29weXJpZ2h0PgorCisgJElkOiBwbHVnaW4ueG1sLHYgMS40IDIwMDkvMDMvMTEgMDM6NDU6MjYgc2VkbHVuZCBFeHAgJAorLS0+CisKKzxwbHVnaW4+CisKKworICA8ZXh0ZW5zaW9uCisgICAgcG9pbnQgPSAib3JnLmVjbGlwc2UudWkubmV3V2l6YXJkcyI+CisgICAgPGNhdGVnb3J5CisgICAgICBpZCA9ICJvcmcuZWNsaXBzZS5lbWYuZWNvcmUuV2l6YXJkLmNhdGVnb3J5LklEIgorICAgICAgbmFtZT0iJV9VSV9XaXphcmRfY2F0ZWdvcnkiPgorICAgIDwvY2F0ZWdvcnk+CisgICAgPHdpemFyZAorICAgICAgaWQgPSAib3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4YW1wbGUucHJlc2VudGF0aW9uLkV4YW1wbGVNb2RlbFdpemFyZElEIgorICAgICAgbmFtZSA9ICIlX1VJX0V4YW1wbGVNb2RlbFdpemFyZF9sYWJlbCIKKyAgICAgIGNsYXNzID0gIm9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leGFtcGxlLnByZXNlbnRhdGlvbi5FeGFtcGxlTW9kZWxXaXphcmQiCisgICAgICBjYXRlZ29yeSA9ICJvcmcuZWNsaXBzZS5lbWYuZWNvcmUuV2l6YXJkLmNhdGVnb3J5LklEIgorICAgICAgaWNvbiA9ICJpY29ucy9mdWxsL29iajE2L0V4YW1wbGVNb2RlbEZpbGUuZ2lmIj4KKyAgICAgIDxkZXNjcmlwdGlvbj4lX1VJX0V4YW1wbGVNb2RlbFdpemFyZF9kZXNjcmlwdGlvbjwvZGVzY3JpcHRpb24+CisgICAgICA8c2VsZWN0aW9uIGNsYXNzID0gIm9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklSZXNvdXJjZSIgLz4KKyAgICA8L3dpemFyZD4KKyAgPC9leHRlbnNpb24+CisKKyAgPGV4dGVuc2lvbiBwb2ludCA9ICJvcmcuZWNsaXBzZS51aS5lZGl0b3JzIj4KKyAgICA8ZWRpdG9yCisgICAgICAgIGlkID0gIm9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leGFtcGxlLnByZXNlbnRhdGlvbi5FeGFtcGxlRWRpdG9ySUQiCisgICAgICAgIG5hbWUgPSAiJV9VSV9FeGFtcGxlRWRpdG9yX2xhYmVsIgorICAgICAgICBpY29uID0gImljb25zL2Z1bGwvb2JqMTYvRXhhbXBsZU1vZGVsRmlsZS5naWYiCisgICAgICAgIGV4dGVuc2lvbnMgPSAiZXhhbXBsZSIKKyAgICAgICAgY2xhc3MgPSAib3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4YW1wbGUucHJlc2VudGF0aW9uLkV4YW1wbGVFZGl0b3IiIAorICAgICAgICBjb250cmlidXRvckNsYXNzPSJvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXhhbXBsZS5wcmVzZW50YXRpb24uRXhhbXBsZUFjdGlvbkJhckNvbnRyaWJ1dG9yIiA+CisgICAgPC9lZGl0b3I+CisgIDwvZXh0ZW5zaW9uPgorICA8ZXh0ZW5zaW9uCisgICAgICAgIHBvaW50PSJvcmcuZWNsaXBzZS51aS5zdGFydHVwIj4KKyAgICAgPHN0YXJ0dXAKKyAgICAgICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy5leGFtcGxlLnByZXNlbnRhdGlvbi5FeGFtcGxlUHJvcGVydHlTdHJpbmdQcm92aWRlckFkYXB0ZXJGYWN0b3J5Ij4KKyAgICAgPC9zdGFydHVwPgorICA8L2V4dGVuc2lvbj4KKzwvcGx1Z2luPgpkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMuZXhhbXBsZS9wbHVnaW5fZGUucHJvcGVydGllcyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzLmV4YW1wbGUvcGx1Z2luX2RlLnByb3BlcnRpZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDljMzQxMwotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzLmV4YW1wbGUvcGx1Z2luX2RlLnByb3BlcnRpZXMKQEAgLTAsMCArMSw0NyBAQAorCisjIDxjb3B5cmlnaHQ+CisjIDwvY29weXJpZ2h0PgorIworIyAkSWQ6IHBsdWdpbi5wcm9wZXJ0aWVzLHYgMS4zIDIwMDkvMDMvMTEgMDM6NDU6MjYgc2VkbHVuZCBFeHAgJAorCitwbHVnaW5OYW1lPVNURU0gQmVpc3BpZWwtS3JhbmtoZWl0c21vZGVsbC1CZW51dHplcm9iZXJmbFx1MDBlNGNoZQorcHJvdmlkZXJOYW1lPUVjbGlwc2Uub3JnCisKK19VSV9FeGFtcGxlRWRpdG9yX21lbnU9JkV4YW1wbGUgRWRpdG9yCisKK19VSV9DcmVhdGVDaGlsZF9tZW51X2l0ZW09Jk5ldyBDaGlsZAorX1VJX0NyZWF0ZVNpYmxpbmdfbWVudV9pdGVtPU4mZXVlcyBHZXNjaHdpc3RlcnRlaWwKKworX1VJX1Nob3dQcm9wZXJ0aWVzVmlld19tZW51X2l0ZW09U2hvdyAmIFByb3BlcnRpZXMgVmlldworX1VJX1JlZnJlc2hWaWV3ZXJfbWVudV9pdGVtPSZSZWZyZXNoCisKK19VSV9TZWxlY3Rpb25QYWdlX2xhYmVsPUF1c3dhaGwKKworX1VJX05vT2JqZWN0U2VsZWN0ZWQ9TmljaHRzIGF1c2dld1x1MDBlNGhsdAorX1VJX1NpbmdsZU9iamVjdFNlbGVjdGVkPUF1c2dld1x1MDBlNGhsdGVzIE9iamVrdDogezB9CitfVUlfTXVsdGlPYmplY3RTZWxlY3RlZD1BdXNnZXdcdTAwZTRobHRlIHswfSBPYmpla3RlCisKK19VSV9PcGVuRWRpdG9yRXJyb3JfbGFiZWw9RWRpdG9yIFx1MDBmNmZmbmVuCisKK19VSV9XaXphcmRfY2F0ZWdvcnk9QmVpc3BpZWwgRU1GIE1vZGVsbCBFcnN0ZWxsdW5nc2Fzc2lzdGVudAorCitfVUlfQ3JlYXRlTW9kZWxFcnJvcl9tZXNzYWdlPUF1ZmdldHJldGVuZSBQcm9ibGVtZSBpbiBkZXIgRGF0ZWkgInswfSIKKworX1VJX0V4YW1wbGVFZGl0b3JfbGFiZWw9QmVpc3BpZWwgTW9kZWxsLUVkaXRvcgorCitfVUlfRXhhbXBsZUVkaXRvckZpbGVuYW1lRGVmYXVsdEJhc2U9TWVpbgorX1VJX0V4YW1wbGVFZGl0b3JGaWxlbmFtZUV4dGVuc2lvbnM9QmVpc3BpZWwKKworX1VJX1dpemFyZF9sYWJlbD1OZXUKKworX1dBUk5fRmlsZW5hbWVFeHRlbnNpb249RGVyIERhdGVpbmFtZSBtdXNzIGF1ZiAiLnswfSIgZW5kZW4KK19XQVJOX0ZpbGVuYW1lRXh0ZW5zaW9ucz1EZXIgRGF0ZWluYW1lIG11c3MgZWluZSBkZXIgZm9sZ2VuZGVuIEVuZHVuZ2VuIGhhYmVuOiB7MH0KKworX1VJX01vZGVsT2JqZWN0PSZNb2RlbCBPYmplY3QKK19VSV9YTUxFbmNvZGluZz0mWE1MIEVuY29kaW5nCitfVUlfWE1MRW5jb2RpbmdDaG9pY2VzPVVURi04IEFTQ0lJIFVURi0xNiBVVEYtMTZCRSBVVEYtMTZMRSBJU08tODg1OS0xCitfVUlfV2l6YXJkX2luaXRpYWxfb2JqZWN0X2Rlc2NyaXB0aW9uPVp1IGVyemV1Z2VuZGVzIE1vZGVsbG9iamVrdCB3XHUwMGU0aGxlbgorCitfVUlfRmlsZUNvbmZsaWN0X2xhYmVsPURhdGVpa29uZmxpa3QKK19XQVJOX0ZpbGVDb25mbGljdD1FcyBnaWJ0IG5pY2h0IGdlc3BlaWNoZXJ0ZSBcdTAwYzRuZGVydW5nZW4sIGRpZSBLb25mbGlrdGUgbWl0IFx1MDBjNG5kZXJ1bmdlbiBhdVx1MDBkZmVyaGFsYiBkZXMgRWRpdG9ycyBlcnpldWdlbi4gTVx1MDBmNmNodGVuIFNpZSBkaWUgXHUwMGM0bmRlcnVuZ2VuIGltIEVkaXRvciB2ZXJ3ZXJmZW4/CisKZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzLmV4YW1wbGUvcGx1Z2luX2tyLnByb3BlcnRpZXMgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy5leGFtcGxlL3BsdWdpbl9rci5wcm9wZXJ0aWVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUzODk5YjkKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy5leGFtcGxlL3BsdWdpbl9rci5wcm9wZXJ0aWVzCkBAIC0wLDAgKzEsNDcgQEAKKworIyA8Y29weXJpZ2h0PgorIyA8L2NvcHlyaWdodD4KKyMKKyMgJElkOiBwbHVnaW4ucHJvcGVydGllcyx2IDEuMyAyMDA5LzAzLzExIDAzOjQ1OjI2IHNlZGx1bmQgRXhwICQKKworcGx1Z2luTmFtZT1TVEVNIFx1YzYwOCBcdWM5YzhcdWJjZDEgXHViYWE4XHViMzc4IFVJCitwcm92aWRlck5hbWU9RWNsaXBzZS5vcmcKKworX1VJX0V4YW1wbGVFZGl0b3JfbWVudT0mRXhhbXBsZSBFZGl0b3IKKworX1VJX0NyZWF0ZUNoaWxkX21lbnVfaXRlbT0mTmV3IENoaWxkCitfVUlfQ3JlYXRlU2libGluZ19tZW51X2l0ZW09TiYgIFx1ZDYxNVx1YzgxYyBcdWM3OTBcdWI5ZTQKKworX1VJX1Nob3dQcm9wZXJ0aWVzVmlld19tZW51X2l0ZW09XHVkNDVjXHVjMmRjIFx1YmMwZiBcdWMxOGRcdWMxMzFcdWJjZjRcdWFlMzAKK19VSV9SZWZyZXNoVmlld2VyX21lbnVfaXRlbT0mUmVmcmVzaAorCitfVUlfU2VsZWN0aW9uUGFnZV9sYWJlbD1cdWMxMjBcdWQwZGQKKworX1VJX05vT2JqZWN0U2VsZWN0ZWQ9XHVjNTQ0XHViYjM0XHVhYzgzXHViM2M0IFx1YzU0OCBcdWMxMjBcdWQwZGRcdWQ1NjgKK19VSV9TaW5nbGVPYmplY3RTZWxlY3RlZD1cdWMxMjBcdWQwZGRcdWQ1NWMgXHVhYzFkXHVjY2I0IDogezB9CitfVUlfTXVsdGlPYmplY3RTZWxlY3RlZD1cdWMxMjBcdWQwZGRcdWI0MWMgezB9IFx1YWMxZFx1Y2NiNAorCitfVUlfT3BlbkVkaXRvckVycm9yX2xhYmVsPVx1YzYyNFx1ZDUwOCBcdWM1ZDBcdWI1MTRcdWQxMzAKKworX1VJX1dpemFyZF9jYXRlZ29yeT1cdWM2MDhcdWM4MWMgRU1GIFx1YmFhOFx1YjM3OCBcdWMwZGRcdWMxMzEgXHViOWM4XHViYzk1XHVjMGFjCisKK19VSV9DcmVhdGVNb2RlbEVycm9yX21lc3NhZ2U9XHVkMzBjXHVjNzdjICd7MH0gIlx1YzVkMFx1YzExYyBcdWJiMzhcdWM4MWMgXHViYzFjXHVjMGRkCisKK19VSV9FeGFtcGxlRWRpdG9yX2xhYmVsPVx1YzYwOFx1YzgxYyBcdWJhYThcdWIzNzggXHVkM2I4XHVjOWQxXHVhZTMwCisKK19VSV9FeGFtcGxlRWRpdG9yRmlsZW5hbWVEZWZhdWx0QmFzZT1cdWIwOThcdWM3NTgKK19VSV9FeGFtcGxlRWRpdG9yRmlsZW5hbWVFeHRlbnNpb25zPVx1YzYwOAorCitfVUlfV2l6YXJkX2xhYmVsPVx1YzBjOFx1Yjg1Y1x1YzZiNAorCitfV0FSTl9GaWxlbmFtZUV4dGVuc2lvbj1cdWQzMGNcdWM3N2MgXHVjNzc0XHViOTg0XHVjNzQwICIuezB9Ilx1Yjg1YyBcdWIwNWRcdWIwOThcdWM1N2NcdWQ1NjguCitfV0FSTl9GaWxlbmFtZUV4dGVuc2lvbnM9XHVkMzBjXHVjNzdjIFx1Yzc3NFx1Yjk4NFx1Yzc0MCBcdWIyZTRcdWM3NGMgXHVkNjU1XHVjN2E1XHVjNzkwIFx1YzkxMSBcdWQ1NThcdWIwOThcdWI5N2MgXHVhYzAwXHVjODM4XHVjNTdjXHVkNTY4IDogezB9CisKK19VSV9Nb2RlbE9iamVjdD0mTW9kZWwgT2JqZWN0CitfVUlfWE1MRW5jb2Rpbmc9JlhNTCBFbmNvZGluZworX1VJX1hNTEVuY29kaW5nQ2hvaWNlcz1VVEYgLSA4IEFTQ0lJIFVURiAtIDE2IFVURiAtIDE2QkUgVVRGIC0gMTZMRSBJU08gLSA4ODU5IC0gMQorX1VJX1dpemFyZF9pbml0aWFsX29iamVjdF9kZXNjcmlwdGlvbj1cdWMwZGRcdWMxMzFcdWQ1NjAgXHViYWE4XHViMzc4IFx1YWMxY1x1Y2NiNCBcdWMxMjBcdWQwZGQKKworX1VJX0ZpbGVDb25mbGljdF9sYWJlbD1cdWQzMGNcdWM3N2MgXHVjZGE5XHViM2NjCitfV0FSTl9GaWxlQ29uZmxpY3Q9XHVjODAwXHVjN2E1XHViNDE4XHVjOWMwIFx1YzU0YVx1Yzc0MCBcdWMwYWNcdWQ1NmRcdWI0ZTRcdWM3NzQgXHVkM2I4XHVjOWQxXHVhZTMwIFx1YzY3OFx1YmQ4MFx1Yzc1OCBcdWJjYzBcdWFjYmQgXHVjMGFjXHVkNTZkXHViNGU0XHVhY2ZjIFx1Y2RhOVx1YjNjY1x1ZDU2OC4gXHVjNzc0IFx1ZDNiOFx1YzlkMVx1YWUzMFx1Yzc1OCBcdWJjYzBcdWFjYmQgXHVjMGFjXHVkNTZkXHViNGU0XHVjNzQ0IFx1Y2RlOFx1YzE4YyBcdWQ1NThcdWMyZGNcdWFjYTBcdWMyYjVcdWIyYzhcdWFlNGM/CisKZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzLmV4YW1wbGUvcGx1Z2luX3poLnByb3BlcnRpZXMgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy5leGFtcGxlL3BsdWdpbl96aC5wcm9wZXJ0aWVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEwNjRmYjYKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy5leGFtcGxlL3BsdWdpbl96aC5wcm9wZXJ0aWVzCkBAIC0wLDAgKzEsNDcgQEAKKworIyA8Y29weXJpZ2h0PgorIyA8L2NvcHlyaWdodD4KKyMKKyMgJElkOiBwbHVnaW4ucHJvcGVydGllcyx2IDEuMyAyMDA5LzAzLzExIDAzOjQ1OjI2IHNlZGx1bmQgRXhwICQKKworcGx1Z2luTmFtZT1TVEVNXHU0ZjhiXHU3NWJlXHU3NWM1XHU2YTIxXHU1NzhiXHU3Njg0XHU3NTI4XHU2MjM3XHU3NTRjXHU5NzYyCitwcm92aWRlck5hbWU9RWNsaXBzZS5vcmcKKworX1VJX0V4YW1wbGVFZGl0b3JfbWVudT0mRXhhbXBsZSBFZGl0b3IKKworX1VJX0NyZWF0ZUNoaWxkX21lbnVfaXRlbT0mTmV3IENoaWxkCitfVUlfQ3JlYXRlU2libGluZ19tZW51X2l0ZW09XHU2NWIwXHU3NTFmXHU2MjEwXHU0ZTAwXHU0ZTJhXHU1MTQ0XHU1ZjFmXHU3YzdiCisKK19VSV9TaG93UHJvcGVydGllc1ZpZXdfbWVudV9pdGVtPVx1NjYzZVx1NzkzYVx1NTQ4Y1x1NWM1ZVx1NjAyN1x1NjdlNVx1NzcwYgorX1VJX1JlZnJlc2hWaWV3ZXJfbWVudV9pdGVtPSZSZWZyZXNoCisKK19VSV9TZWxlY3Rpb25QYWdlX2xhYmVsPVx1OTAwOVx1NjJlOQorCitfVUlfTm9PYmplY3RTZWxlY3RlZD1cdTY1ZTBcdTkwMDlcdTViOWFcdTUxODVcdTViYjkKK19VSV9TaW5nbGVPYmplY3RTZWxlY3RlZD1cdTkwMDlcdTYyZTlcdTViZjlcdThjNjFcdWZmMWF7MH0KK19VSV9NdWx0aU9iamVjdFNlbGVjdGVkPVx1OTAwOVx1NjJlOXswfVx1NWJmOVx1OGM2MQorCitfVUlfT3BlbkVkaXRvckVycm9yX2xhYmVsPVx1NjI1M1x1NWYwMFx1N2YxNlx1OGY5MVx1NTY2OAorCitfVUlfV2l6YXJkX2NhdGVnb3J5PVx1NGY4Ylx1NTk4MkVNRlx1NmEyMVx1NTc4Ylx1NTIxYlx1NWVmYVx1NTQxMVx1NWJmYworCitfVUlfQ3JlYXRlTW9kZWxFcnJvcl9tZXNzYWdlPVx1NTcyOFx1NjU4N1x1NGVmNlx1MjAxY3swfVx1MjAxZFx1NGUyZFx1OTA0N1x1NTIzMFx1NzY4NFx1OTVlZVx1OTg5OAorCitfVUlfRXhhbXBsZUVkaXRvcl9sYWJlbD1cdTZhMjFcdTU3OGJcdTdmMTZcdThmOTFcdTU2NjhcdTc5M2FcdTRmOGIKKworX1VJX0V4YW1wbGVFZGl0b3JGaWxlbmFtZURlZmF1bHRCYXNlPVx1NjIxMVx1NzY4NAorX1VJX0V4YW1wbGVFZGl0b3JGaWxlbmFtZUV4dGVuc2lvbnM9XHU0ZjhiXHU1OTgyCisKK19VSV9XaXphcmRfbGFiZWw9XHU2NWIwXHU1ZWZhCisKK19XQVJOX0ZpbGVuYW1lRXh0ZW5zaW9uPVx1NjU4N1x1NGVmNlx1NTQwZFx1NWZjNVx1OTg3Ylx1NGVlNSd7MH0gJydcdTdlZDNcdTVjM2UKK19XQVJOX0ZpbGVuYW1lRXh0ZW5zaW9ucz1cdTY1ODdcdTRlZjZcdTU0MGRcdTVmYzVcdTk4N2JcdTUxNzdcdTY3MDlcdTRlZTVcdTRlMGJcdTYyNjlcdTVjNTVcdTU0MGRcdTRlNGJcdTRlMDBcdWZmMWF7MH0KKworX1VJX01vZGVsT2JqZWN0PSZNb2RlbCBPYmplY3QKK19VSV9YTUxFbmNvZGluZz0mWE1MIEVuY29kaW5nCitfVUlfWE1MRW5jb2RpbmdDaG9pY2VzPVVURi04IEFTQ0lJIFVURi0xNiBVVEYtMTZCRSBVVEYtMTZMRSBJU08tODg1OS0xCitfVUlfV2l6YXJkX2luaXRpYWxfb2JqZWN0X2Rlc2NyaXB0aW9uPVx1OTAwOVx1NjJlOVx1NTIxYlx1NWVmYVx1NGUwMFx1NGUyYVx1NmEyMVx1NTc4Ylx1NWJmOVx1OGM2MQorCitfVUlfRmlsZUNvbmZsaWN0X2xhYmVsPVx1NjU4N1x1NGVmNlx1NTFiMlx1N2E4MQorX1dBUk5fRmlsZUNvbmZsaWN0PVx1NjcwOVx1NjcyYVx1NGZkZFx1NWI1OFx1NzY4NFx1NjZmNFx1NjUzOVx1NGUwZVx1N2YxNlx1OGY5MVx1NTY2OFx1NTkxNlx1NzY4NFx1NjZmNFx1NjUzOVx1NTFiMlx1N2E4MVx1MzAwMlx1NGY2MFx1NjBmM1x1NjUzZVx1NWYwM1x1OGZkOVx1NGUyYVx1N2YxNlx1OGY5MVx1NTY2OFx1NzY4NFx1NjZmNFx1NjUzOVx1NTQxN1x1ZmYxZgorCmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy5leGFtcGxlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvZXhhbXBsZS9wcmVzZW50YXRpb24vRXhhbXBsZUFjdGlvbkJhckNvbnRyaWJ1dG9yLmphdmEgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy5leGFtcGxlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvZXhhbXBsZS9wcmVzZW50YXRpb24vRXhhbXBsZUFjdGlvbkJhckNvbnRyaWJ1dG9yLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDI1ZTZiNAotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzLmV4YW1wbGUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9leGFtcGxlL3ByZXNlbnRhdGlvbi9FeGFtcGxlQWN0aW9uQmFyQ29udHJpYnV0b3IuamF2YQpAQCAtMCwwICsxLDQzMSBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXhhbXBsZS5wcmVzZW50YXRpb247CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDkgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udWkudmlld2VyLklWaWV3ZXJQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5kb21haW4uRWRpdGluZ0RvbWFpbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5kb21haW4uSUVkaXRpbmdEb21haW5Qcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5hY3Rpb24uQ29udHJvbEFjdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5hY3Rpb24uQ3JlYXRlQ2hpbGRBY3Rpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkuYWN0aW9uLkNyZWF0ZVNpYmxpbmdBY3Rpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkuYWN0aW9uLkVkaXRpbmdEb21haW5BY3Rpb25CYXJDb250cmlidXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5hY3Rpb24uTG9hZFJlc291cmNlQWN0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmFjdGlvbi5WYWxpZGF0ZUFjdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uQWN0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5BY3Rpb25Db250cmlidXRpb25JdGVtOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JQWN0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JQ29udHJpYnV0aW9uSXRlbTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSUNvbnRyaWJ1dGlvbk1hbmFnZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklNZW51TGlzdGVuZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklNZW51TWFuYWdlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSVRvb2xCYXJNYW5hZ2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5NZW51TWFuYWdlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uU2VwYXJhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5TdWJDb250cmlidXRpb25JdGVtOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU3RydWN0dXJlZFNlbGVjdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlNlbGVjdGlvbkNoYW5nZWRFdmVudDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlZpZXdlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMuZXhhbXBsZS5wcmVzZW50YXRpb24uRXhhbXBsZUVkaXRvclBsdWdpbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5JRWRpdG9yUGFydDsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5QYXJ0SW5pdEV4Y2VwdGlvbjsKKworLyoqCisgKiBUaGlzIGlzIHRoZSBhY3Rpb24gYmFyIGNvbnRyaWJ1dG9yIGZvciB0aGUgRXhhbXBsZSBtb2RlbCBlZGl0b3IuCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBFeGFtcGxlQWN0aW9uQmFyQ29udHJpYnV0b3IKKwlleHRlbmRzIEVkaXRpbmdEb21haW5BY3Rpb25CYXJDb250cmlidXRvcgorCWltcGxlbWVudHMgSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lciB7CisJLyoqCisJICogVGhpcyBrZWVwcyB0cmFjayBvZiB0aGUgYWN0aXZlIGVkaXRvci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgSUVkaXRvclBhcnQgYWN0aXZlRWRpdG9yUGFydDsKKworCS8qKgorCSAqIFRoaXMga2VlcHMgdHJhY2sgb2YgdGhlIGN1cnJlbnQgc2VsZWN0aW9uIHByb3ZpZGVyLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBJU2VsZWN0aW9uUHJvdmlkZXIgc2VsZWN0aW9uUHJvdmlkZXI7CisKKwkvKioKKwkgKiBUaGlzIGFjdGlvbiBvcGVucyB0aGUgUHJvcGVydGllcyB2aWV3LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBJQWN0aW9uIHNob3dQcm9wZXJ0aWVzVmlld0FjdGlvbiA9CisJCW5ldyBBY3Rpb24oRXhhbXBsZUVkaXRvclBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoIl9VSV9TaG93UHJvcGVydGllc1ZpZXdfbWVudV9pdGVtIikpIC8vJE5PTi1OTFMtMSQKKwkJeworCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgdm9pZCBydW4oKSB7CisJCQkJdHJ5IHsKKwkJCQkJZ2V0UGFnZSgpLnNob3dWaWV3KCJvcmcuZWNsaXBzZS51aS52aWV3cy5Qcm9wZXJ0eVNoZWV0Iik7IC8vJE5PTi1OTFMtMSQKKwkJCQl9CisJCQkJY2F0Y2ggKFBhcnRJbml0RXhjZXB0aW9uIGV4Y2VwdGlvbikgeworCQkJCQlFeGFtcGxlRWRpdG9yUGx1Z2luLklOU1RBTkNFLmxvZyhleGNlcHRpb24pOworCQkJCX0KKwkJCX0KKwkJfTsKKworCS8qKgorCSAqIFRoaXMgYWN0aW9uIHJlZnJlc2hlcyB0aGUgdmlld2VyIG9mIHRoZSBjdXJyZW50IGVkaXRvciBpZiB0aGUgZWRpdG9yCisJICogaW1wbGVtZW50cyB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51aS52aWV3ZXIuSVZpZXdlclByb3ZpZGVyfS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgSUFjdGlvbiByZWZyZXNoVmlld2VyQWN0aW9uID0KKwkJbmV3IEFjdGlvbihFeGFtcGxlRWRpdG9yUGx1Z2luLklOU1RBTkNFLmdldFN0cmluZygiX1VJX1JlZnJlc2hWaWV3ZXJfbWVudV9pdGVtIikpIC8vJE5PTi1OTFMtMSQKKwkJeworCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgYm9vbGVhbiBpc0VuYWJsZWQoKSB7CisJCQkJcmV0dXJuIGFjdGl2ZUVkaXRvclBhcnQgaW5zdGFuY2VvZiBJVmlld2VyUHJvdmlkZXI7CisJCQl9CisKKwkJCUBPdmVycmlkZQorCQkJcHVibGljIHZvaWQgcnVuKCkgeworCQkJCWlmIChhY3RpdmVFZGl0b3JQYXJ0IGluc3RhbmNlb2YgSVZpZXdlclByb3ZpZGVyKSB7CisJCQkJCVZpZXdlciB2aWV3ZXIgPSAoKElWaWV3ZXJQcm92aWRlcilhY3RpdmVFZGl0b3JQYXJ0KS5nZXRWaWV3ZXIoKTsKKwkJCQkJaWYgKHZpZXdlciAhPSBudWxsKSB7CisJCQkJCQl2aWV3ZXIucmVmcmVzaCgpOworCQkJCQl9CisJCQkJfQorCQkJfQorCQl9OworCisJLyoqCisJICogVGhpcyB3aWxsIGNvbnRhaW4gb25lIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5hY3Rpb24uQ3JlYXRlQ2hpbGRBY3Rpb259IGNvcnJlc3BvbmRpbmcgdG8gZWFjaCBkZXNjcmlwdG9yCisJICogZ2VuZXJhdGVkIGZvciB0aGUgY3VycmVudCBzZWxlY3Rpb24gYnkgdGhlIGl0ZW0gcHJvdmlkZXIuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIENvbGxlY3Rpb248SUFjdGlvbj4gY3JlYXRlQ2hpbGRBY3Rpb25zOworCisJLyoqCisJICogVGhpcyBpcyB0aGUgbWVudSBtYW5hZ2VyIGludG8gd2hpY2ggbWVudSBjb250cmlidXRpb24gaXRlbXMgc2hvdWxkIGJlIGFkZGVkIGZvciBDcmVhdGVDaGlsZCBhY3Rpb25zLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBJTWVudU1hbmFnZXIgY3JlYXRlQ2hpbGRNZW51TWFuYWdlcjsKKworCS8qKgorCSAqIFRoaXMgd2lsbCBjb250YWluIG9uZSB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkuYWN0aW9uLkNyZWF0ZVNpYmxpbmdBY3Rpb259IGNvcnJlc3BvbmRpbmcgdG8gZWFjaCBkZXNjcmlwdG9yCisJICogZ2VuZXJhdGVkIGZvciB0aGUgY3VycmVudCBzZWxlY3Rpb24gYnkgdGhlIGl0ZW0gcHJvdmlkZXIuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIENvbGxlY3Rpb248SUFjdGlvbj4gY3JlYXRlU2libGluZ0FjdGlvbnM7CisKKwkvKioKKwkgKiBUaGlzIGlzIHRoZSBtZW51IG1hbmFnZXIgaW50byB3aGljaCBtZW51IGNvbnRyaWJ1dGlvbiBpdGVtcyBzaG91bGQgYmUgYWRkZWQgZm9yIENyZWF0ZVNpYmxpbmcgYWN0aW9ucy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgSU1lbnVNYW5hZ2VyIGNyZWF0ZVNpYmxpbmdNZW51TWFuYWdlcjsKKworCS8qKgorCSAqIFRoaXMgY3JlYXRlcyBhbiBpbnN0YW5jZSBvZiB0aGUgY29udHJpYnV0b3IuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEV4YW1wbGVBY3Rpb25CYXJDb250cmlidXRvcigpIHsKKwkJc3VwZXIoQURESVRJT05TX0xBU1RfU1RZTEUpOworCQlsb2FkUmVzb3VyY2VBY3Rpb24gPSBuZXcgTG9hZFJlc291cmNlQWN0aW9uKCk7CisJCXZhbGlkYXRlQWN0aW9uID0gbmV3IFZhbGlkYXRlQWN0aW9uKCk7CisJCWNvbnRyb2xBY3Rpb24gPSBuZXcgQ29udHJvbEFjdGlvbigpOworCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyBTZXBhcmF0b3JzIGZvciBlZGl0b3IgYWRkaXRpb25zIHRvIHRoZSB0b29sIGJhci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBjb250cmlidXRlVG9Ub29sQmFyKElUb29sQmFyTWFuYWdlciB0b29sQmFyTWFuYWdlcikgeworCQl0b29sQmFyTWFuYWdlci5hZGQobmV3IFNlcGFyYXRvcigiZXhhbXBsZS1zZXR0aW5ncyIpKTsgLy8kTk9OLU5MUy0xJAorCQl0b29sQmFyTWFuYWdlci5hZGQobmV3IFNlcGFyYXRvcigiZXhhbXBsZS1hZGRpdGlvbnMiKSk7IC8vJE5PTi1OTFMtMSQKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFkZHMgdG8gdGhlIG1lbnUgYmFyIGEgbWVudSBhbmQgc29tZSBzZXBhcmF0b3JzIGZvciBlZGl0b3IgYWRkaXRpb25zLAorCSAqIGFzIHdlbGwgYXMgdGhlIHN1Yi1tZW51cyBmb3Igb2JqZWN0IGNyZWF0aW9uIGl0ZW1zLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGNvbnRyaWJ1dGVUb01lbnUoSU1lbnVNYW5hZ2VyIG1lbnVNYW5hZ2VyKSB7CisJCXN1cGVyLmNvbnRyaWJ1dGVUb01lbnUobWVudU1hbmFnZXIpOworCisJCUlNZW51TWFuYWdlciBzdWJtZW51TWFuYWdlciA9IG5ldyBNZW51TWFuYWdlcihFeGFtcGxlRWRpdG9yUGx1Z2luLklOU1RBTkNFLmdldFN0cmluZygiX1VJX0V4YW1wbGVFZGl0b3JfbWVudSIpLCAib3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4YW1wbGVNZW51SUQiKTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCisJCW1lbnVNYW5hZ2VyLmluc2VydEFmdGVyKCJhZGRpdGlvbnMiLCBzdWJtZW51TWFuYWdlcik7IC8vJE5PTi1OTFMtMSQKKwkJc3VibWVudU1hbmFnZXIuYWRkKG5ldyBTZXBhcmF0b3IoInNldHRpbmdzIikpOyAvLyROT04tTkxTLTEkCisJCXN1Ym1lbnVNYW5hZ2VyLmFkZChuZXcgU2VwYXJhdG9yKCJhY3Rpb25zIikpOyAvLyROT04tTkxTLTEkCisJCXN1Ym1lbnVNYW5hZ2VyLmFkZChuZXcgU2VwYXJhdG9yKCJhZGRpdGlvbnMiKSk7IC8vJE5PTi1OTFMtMSQKKwkJc3VibWVudU1hbmFnZXIuYWRkKG5ldyBTZXBhcmF0b3IoImFkZGl0aW9ucy1lbmQiKSk7IC8vJE5PTi1OTFMtMSQKKworCQkvLyBQcmVwYXJlIGZvciBDcmVhdGVDaGlsZCBpdGVtIGFkZGl0aW9uIG9yIHJlbW92YWwuCisJCS8vCisJCWNyZWF0ZUNoaWxkTWVudU1hbmFnZXIgPSBuZXcgTWVudU1hbmFnZXIoRXhhbXBsZUVkaXRvclBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoIl9VSV9DcmVhdGVDaGlsZF9tZW51X2l0ZW0iKSk7IC8vJE5PTi1OTFMtMSQKKwkJc3VibWVudU1hbmFnZXIuaW5zZXJ0QmVmb3JlKCJhZGRpdGlvbnMiLCBjcmVhdGVDaGlsZE1lbnVNYW5hZ2VyKTsgLy8kTk9OLU5MUy0xJAorCisJCS8vIFByZXBhcmUgZm9yIENyZWF0ZVNpYmxpbmcgaXRlbSBhZGRpdGlvbiBvciByZW1vdmFsLgorCQkvLworCQljcmVhdGVTaWJsaW5nTWVudU1hbmFnZXIgPSBuZXcgTWVudU1hbmFnZXIoRXhhbXBsZUVkaXRvclBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoIl9VSV9DcmVhdGVTaWJsaW5nX21lbnVfaXRlbSIpKTsgLy8kTk9OLU5MUy0xJAorCQlzdWJtZW51TWFuYWdlci5pbnNlcnRCZWZvcmUoImFkZGl0aW9ucyIsIGNyZWF0ZVNpYmxpbmdNZW51TWFuYWdlcik7IC8vJE5PTi1OTFMtMSQKKworCQkvLyBGb3JjZSBhbiB1cGRhdGUgYmVjYXVzZSBFY2xpcHNlIGhpZGVzIGVtcHR5IG1lbnVzIG5vdy4KKwkJLy8KKwkJc3VibWVudU1hbmFnZXIuYWRkTWVudUxpc3RlbmVyCisJCQkobmV3IElNZW51TGlzdGVuZXIoKSB7CisJCQkJIHB1YmxpYyB2b2lkIG1lbnVBYm91dFRvU2hvdyhJTWVudU1hbmFnZXIgbWVudU1hbmFnZXIpIHsKKwkJCQkJIG1lbnVNYW5hZ2VyLnVwZGF0ZUFsbCh0cnVlKTsKKwkJCQkgfQorCQkJIH0pOworCisJCWFkZEdsb2JhbEFjdGlvbnMoc3VibWVudU1hbmFnZXIpOworCX0KKworCS8qKgorCSAqIFdoZW4gdGhlIGFjdGl2ZSBlZGl0b3IgY2hhbmdlcywgdGhpcyByZW1lbWJlcnMgdGhlIGNoYW5nZSBhbmQgcmVnaXN0ZXJzIHdpdGggaXQgYXMgYSBzZWxlY3Rpb24gcHJvdmlkZXIuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgc2V0QWN0aXZlRWRpdG9yKElFZGl0b3JQYXJ0IHBhcnQpIHsKKwkJc3VwZXIuc2V0QWN0aXZlRWRpdG9yKHBhcnQpOworCQlhY3RpdmVFZGl0b3JQYXJ0ID0gcGFydDsKKworCQkvLyBTd2l0Y2ggdG8gdGhlIG5ldyBzZWxlY3Rpb24gcHJvdmlkZXIuCisJCS8vCisJCWlmIChzZWxlY3Rpb25Qcm92aWRlciAhPSBudWxsKSB7CisJCQlzZWxlY3Rpb25Qcm92aWRlci5yZW1vdmVTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIodGhpcyk7CisJCX0KKwkJaWYgKHBhcnQgPT0gbnVsbCkgeworCQkJc2VsZWN0aW9uUHJvdmlkZXIgPSBudWxsOworCQl9CisJCWVsc2UgeworCQkJc2VsZWN0aW9uUHJvdmlkZXIgPSBwYXJ0LmdldFNpdGUoKS5nZXRTZWxlY3Rpb25Qcm92aWRlcigpOworCQkJc2VsZWN0aW9uUHJvdmlkZXIuYWRkU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyKHRoaXMpOworCisJCQkvLyBGYWtlIGEgc2VsZWN0aW9uIGNoYW5nZWQgZXZlbnQgdG8gdXBkYXRlIHRoZSBtZW51cy4KKwkJCS8vCisJCQlpZiAoc2VsZWN0aW9uUHJvdmlkZXIuZ2V0U2VsZWN0aW9uKCkgIT0gbnVsbCkgeworCQkJCXNlbGVjdGlvbkNoYW5nZWQobmV3IFNlbGVjdGlvbkNoYW5nZWRFdmVudChzZWxlY3Rpb25Qcm92aWRlciwgc2VsZWN0aW9uUHJvdmlkZXIuZ2V0U2VsZWN0aW9uKCkpKTsKKwkJCX0KKwkJfQorCX0KKworCS8qKgorCSAqIFRoaXMgaW1wbGVtZW50cyB7QGxpbmsgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyfSwKKwkgKiBoYW5kbGluZyB7QGxpbmsgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5TZWxlY3Rpb25DaGFuZ2VkRXZlbnR9cyBieSBxdWVyeWluZyBmb3IgdGhlIGNoaWxkcmVuIGFuZCBzaWJsaW5ncworCSAqIHRoYXQgY2FuIGJlIGFkZGVkIHRvIHRoZSBzZWxlY3RlZCBvYmplY3QgYW5kIHVwZGF0aW5nIHRoZSBtZW51cyBhY2NvcmRpbmdseS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSBldmVudCAKKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgc2VsZWN0aW9uQ2hhbmdlZChTZWxlY3Rpb25DaGFuZ2VkRXZlbnQgZXZlbnQpIHsKKwkJLy8gUmVtb3ZlIGFueSBtZW51IGl0ZW1zIGZvciBvbGQgc2VsZWN0aW9uLgorCQkvLworCQlpZiAoY3JlYXRlQ2hpbGRNZW51TWFuYWdlciAhPSBudWxsKSB7CisJCQlkZXBvcHVsYXRlTWFuYWdlcihjcmVhdGVDaGlsZE1lbnVNYW5hZ2VyLCBjcmVhdGVDaGlsZEFjdGlvbnMpOworCQl9CisJCWlmIChjcmVhdGVTaWJsaW5nTWVudU1hbmFnZXIgIT0gbnVsbCkgeworCQkJZGVwb3B1bGF0ZU1hbmFnZXIoY3JlYXRlU2libGluZ01lbnVNYW5hZ2VyLCBjcmVhdGVTaWJsaW5nQWN0aW9ucyk7CisJCX0KKworCQkvLyBRdWVyeSB0aGUgbmV3IHNlbGVjdGlvbiBmb3IgYXBwcm9wcmlhdGUgbmV3IGNoaWxkL3NpYmxpbmcgZGVzY3JpcHRvcnMKKwkJLy8KKwkJQ29sbGVjdGlvbjw/PiBuZXdDaGlsZERlc2NyaXB0b3JzID0gbnVsbDsKKwkJQ29sbGVjdGlvbjw/PiBuZXdTaWJsaW5nRGVzY3JpcHRvcnMgPSBudWxsOworCisJCUlTZWxlY3Rpb24gc2VsZWN0aW9uID0gZXZlbnQuZ2V0U2VsZWN0aW9uKCk7CisJCWlmIChzZWxlY3Rpb24gaW5zdGFuY2VvZiBJU3RydWN0dXJlZFNlbGVjdGlvbiAmJiAoKElTdHJ1Y3R1cmVkU2VsZWN0aW9uKXNlbGVjdGlvbikuc2l6ZSgpID09IDEpIHsKKwkJCU9iamVjdCBvYmplY3QgPSAoKElTdHJ1Y3R1cmVkU2VsZWN0aW9uKXNlbGVjdGlvbikuZ2V0Rmlyc3RFbGVtZW50KCk7CisKKwkJCUVkaXRpbmdEb21haW4gZG9tYWluID0gKChJRWRpdGluZ0RvbWFpblByb3ZpZGVyKWFjdGl2ZUVkaXRvclBhcnQpLmdldEVkaXRpbmdEb21haW4oKTsKKworCQkJbmV3Q2hpbGREZXNjcmlwdG9ycyA9IGRvbWFpbi5nZXROZXdDaGlsZERlc2NyaXB0b3JzKG9iamVjdCwgbnVsbCk7CisJCQluZXdTaWJsaW5nRGVzY3JpcHRvcnMgPSBkb21haW4uZ2V0TmV3Q2hpbGREZXNjcmlwdG9ycyhudWxsLCBvYmplY3QpOworCQl9CisKKwkJLy8gR2VuZXJhdGUgYWN0aW9ucyBmb3Igc2VsZWN0aW9uOyBwb3B1bGF0ZSBhbmQgcmVkcmF3IHRoZSBtZW51cy4KKwkJLy8KKwkJY3JlYXRlQ2hpbGRBY3Rpb25zID0gZ2VuZXJhdGVDcmVhdGVDaGlsZEFjdGlvbnMobmV3Q2hpbGREZXNjcmlwdG9ycywgc2VsZWN0aW9uKTsKKwkJY3JlYXRlU2libGluZ0FjdGlvbnMgPSBnZW5lcmF0ZUNyZWF0ZVNpYmxpbmdBY3Rpb25zKG5ld1NpYmxpbmdEZXNjcmlwdG9ycywgc2VsZWN0aW9uKTsKKworCQlpZiAoY3JlYXRlQ2hpbGRNZW51TWFuYWdlciAhPSBudWxsKSB7CisJCQlwb3B1bGF0ZU1hbmFnZXIoY3JlYXRlQ2hpbGRNZW51TWFuYWdlciwgY3JlYXRlQ2hpbGRBY3Rpb25zLCBudWxsKTsKKwkJCWNyZWF0ZUNoaWxkTWVudU1hbmFnZXIudXBkYXRlKHRydWUpOworCQl9CisJCWlmIChjcmVhdGVTaWJsaW5nTWVudU1hbmFnZXIgIT0gbnVsbCkgeworCQkJcG9wdWxhdGVNYW5hZ2VyKGNyZWF0ZVNpYmxpbmdNZW51TWFuYWdlciwgY3JlYXRlU2libGluZ0FjdGlvbnMsIG51bGwpOworCQkJY3JlYXRlU2libGluZ01lbnVNYW5hZ2VyLnVwZGF0ZSh0cnVlKTsKKwkJfQorCX0KKworCS8qKgorCSAqIFRoaXMgZ2VuZXJhdGVzIGEge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmFjdGlvbi5DcmVhdGVDaGlsZEFjdGlvbn0gZm9yIGVhY2ggb2JqZWN0IGluIDxjb2RlPmRlc2NyaXB0b3JzPC9jb2RlPiwKKwkgKiBhbmQgcmV0dXJucyB0aGUgY29sbGVjdGlvbiBvZiB0aGVzZSBhY3Rpb25zLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBDb2xsZWN0aW9uPElBY3Rpb24+IGdlbmVyYXRlQ3JlYXRlQ2hpbGRBY3Rpb25zKENvbGxlY3Rpb248Pz4gZGVzY3JpcHRvcnMsIElTZWxlY3Rpb24gc2VsZWN0aW9uKSB7CisJCUNvbGxlY3Rpb248SUFjdGlvbj4gYWN0aW9ucyA9IG5ldyBBcnJheUxpc3Q8SUFjdGlvbj4oKTsKKwkJaWYgKGRlc2NyaXB0b3JzICE9IG51bGwpIHsKKwkJCWZvciAoT2JqZWN0IGRlc2NyaXB0b3IgOiBkZXNjcmlwdG9ycykgeworCQkJCWFjdGlvbnMuYWRkKG5ldyBDcmVhdGVDaGlsZEFjdGlvbihhY3RpdmVFZGl0b3JQYXJ0LCBzZWxlY3Rpb24sIGRlc2NyaXB0b3IpKTsKKwkJCX0KKwkJfQorCQlyZXR1cm4gYWN0aW9uczsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGdlbmVyYXRlcyBhIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5hY3Rpb24uQ3JlYXRlU2libGluZ0FjdGlvbn0gZm9yIGVhY2ggb2JqZWN0IGluIDxjb2RlPmRlc2NyaXB0b3JzPC9jb2RlPiwKKwkgKiBhbmQgcmV0dXJucyB0aGUgY29sbGVjdGlvbiBvZiB0aGVzZSBhY3Rpb25zLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBDb2xsZWN0aW9uPElBY3Rpb24+IGdlbmVyYXRlQ3JlYXRlU2libGluZ0FjdGlvbnMoQ29sbGVjdGlvbjw/PiBkZXNjcmlwdG9ycywgSVNlbGVjdGlvbiBzZWxlY3Rpb24pIHsKKwkJQ29sbGVjdGlvbjxJQWN0aW9uPiBhY3Rpb25zID0gbmV3IEFycmF5TGlzdDxJQWN0aW9uPigpOworCQlpZiAoZGVzY3JpcHRvcnMgIT0gbnVsbCkgeworCQkJZm9yIChPYmplY3QgZGVzY3JpcHRvciA6IGRlc2NyaXB0b3JzKSB7CisJCQkJYWN0aW9ucy5hZGQobmV3IENyZWF0ZVNpYmxpbmdBY3Rpb24oYWN0aXZlRWRpdG9yUGFydCwgc2VsZWN0aW9uLCBkZXNjcmlwdG9yKSk7CisJCQl9CisJCX0KKwkJcmV0dXJuIGFjdGlvbnM7CisJfQorCisJLyoqCisJICogVGhpcyBwb3B1bGF0ZXMgdGhlIHNwZWNpZmllZCA8Y29kZT5tYW5hZ2VyPC9jb2RlPiB3aXRoIHtAbGluayBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uQWN0aW9uQ29udHJpYnV0aW9uSXRlbX1zCisJICogYmFzZWQgb24gdGhlIHtAbGluayBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSUFjdGlvbn1zIGNvbnRhaW5lZCBpbiB0aGUgPGNvZGU+YWN0aW9uczwvY29kZT4gY29sbGVjdGlvbiwKKwkgKiBieSBpbnNlcnRpbmcgdGhlbSBiZWZvcmUgdGhlIHNwZWNpZmllZCBjb250cmlidXRpb24gaXRlbSA8Y29kZT5jb250cmlidXRpb25JRDwvY29kZT4uCisJICogSWYgPGNvZGU+Y29udHJpYnV0aW9uSUQ8L2NvZGU+IGlzIDxjb2RlPm51bGw8L2NvZGU+LCB0aGV5IGFyZSBzaW1wbHkgYWRkZWQuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgcG9wdWxhdGVNYW5hZ2VyKElDb250cmlidXRpb25NYW5hZ2VyIG1hbmFnZXIsIENvbGxlY3Rpb248PyBleHRlbmRzIElBY3Rpb24+IGFjdGlvbnMsIFN0cmluZyBjb250cmlidXRpb25JRCkgeworCQlpZiAoYWN0aW9ucyAhPSBudWxsKSB7CisJCQlmb3IgKElBY3Rpb24gYWN0aW9uIDogYWN0aW9ucykgeworCQkJCWlmIChjb250cmlidXRpb25JRCAhPSBudWxsKSB7CisJCQkJCW1hbmFnZXIuaW5zZXJ0QmVmb3JlKGNvbnRyaWJ1dGlvbklELCBhY3Rpb24pOworCQkJCX0KKwkJCQllbHNlIHsKKwkJCQkJbWFuYWdlci5hZGQoYWN0aW9uKTsKKwkJCQl9CisJCQl9CisJCX0KKwl9CisJCQorCS8qKgorCSAqIFRoaXMgcmVtb3ZlcyBmcm9tIHRoZSBzcGVjaWZpZWQgPGNvZGU+bWFuYWdlcjwvY29kZT4gYWxsIHtAbGluayBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uQWN0aW9uQ29udHJpYnV0aW9uSXRlbX1zCisJICogYmFzZWQgb24gdGhlIHtAbGluayBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSUFjdGlvbn1zIGNvbnRhaW5lZCBpbiB0aGUgPGNvZGU+YWN0aW9uczwvY29kZT4gY29sbGVjdGlvbi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBkZXBvcHVsYXRlTWFuYWdlcihJQ29udHJpYnV0aW9uTWFuYWdlciBtYW5hZ2VyLCBDb2xsZWN0aW9uPD8gZXh0ZW5kcyBJQWN0aW9uPiBhY3Rpb25zKSB7CisJCWlmIChhY3Rpb25zICE9IG51bGwpIHsKKwkJCUlDb250cmlidXRpb25JdGVtW10gaXRlbXMgPSBtYW5hZ2VyLmdldEl0ZW1zKCk7CisJCQlmb3IgKGludCBpID0gMDsgaSA8IGl0ZW1zLmxlbmd0aDsgaSsrKSB7CisJCQkJLy8gTG9vayBpbnRvIFN1YkNvbnRyaWJ1dGlvbkl0ZW1zCisJCQkJLy8KKwkJCQlJQ29udHJpYnV0aW9uSXRlbSBjb250cmlidXRpb25JdGVtID0gaXRlbXNbaV07CisJCQkJd2hpbGUgKGNvbnRyaWJ1dGlvbkl0ZW0gaW5zdGFuY2VvZiBTdWJDb250cmlidXRpb25JdGVtKSB7CisJCQkJCWNvbnRyaWJ1dGlvbkl0ZW0gPSAoKFN1YkNvbnRyaWJ1dGlvbkl0ZW0pY29udHJpYnV0aW9uSXRlbSkuZ2V0SW5uZXJJdGVtKCk7CisJCQkJfQorCisJCQkJLy8gRGVsZXRlIHRoZSBBY3Rpb25Db250cmlidXRpb25JdGVtcyB3aXRoIG1hdGNoaW5nIGFjdGlvbi4KKwkJCQkvLworCQkJCWlmIChjb250cmlidXRpb25JdGVtIGluc3RhbmNlb2YgQWN0aW9uQ29udHJpYnV0aW9uSXRlbSkgeworCQkJCQlJQWN0aW9uIGFjdGlvbiA9ICgoQWN0aW9uQ29udHJpYnV0aW9uSXRlbSljb250cmlidXRpb25JdGVtKS5nZXRBY3Rpb24oKTsKKwkJCQkJaWYgKGFjdGlvbnMuY29udGFpbnMoYWN0aW9uKSkgeworCQkJCQkJbWFuYWdlci5yZW1vdmUoY29udHJpYnV0aW9uSXRlbSk7CisJCQkJCX0KKwkJCQl9CisJCQl9CisJCX0KKwl9CisKKwkvKioKKwkgKiBUaGlzIHBvcHVsYXRlcyB0aGUgcG9wLXVwIG1lbnUgYmVmb3JlIGl0IGFwcGVhcnMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgbWVudUFib3V0VG9TaG93KElNZW51TWFuYWdlciBtZW51TWFuYWdlcikgeworCQlzdXBlci5tZW51QWJvdXRUb1Nob3cobWVudU1hbmFnZXIpOworCQlNZW51TWFuYWdlciBzdWJtZW51TWFuYWdlciA9IG51bGw7CisKKwkJc3VibWVudU1hbmFnZXIgPSBuZXcgTWVudU1hbmFnZXIoRXhhbXBsZUVkaXRvclBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoIl9VSV9DcmVhdGVDaGlsZF9tZW51X2l0ZW0iKSk7IC8vJE5PTi1OTFMtMSQKKwkJcG9wdWxhdGVNYW5hZ2VyKHN1Ym1lbnVNYW5hZ2VyLCBjcmVhdGVDaGlsZEFjdGlvbnMsIG51bGwpOworCQltZW51TWFuYWdlci5pbnNlcnRCZWZvcmUoImVkaXQiLCBzdWJtZW51TWFuYWdlcik7IC8vJE5PTi1OTFMtMSQKKworCQlzdWJtZW51TWFuYWdlciA9IG5ldyBNZW51TWFuYWdlcihFeGFtcGxlRWRpdG9yUGx1Z2luLklOU1RBTkNFLmdldFN0cmluZygiX1VJX0NyZWF0ZVNpYmxpbmdfbWVudV9pdGVtIikpOyAvLyROT04tTkxTLTEkCisJCXBvcHVsYXRlTWFuYWdlcihzdWJtZW51TWFuYWdlciwgY3JlYXRlU2libGluZ0FjdGlvbnMsIG51bGwpOworCQltZW51TWFuYWdlci5pbnNlcnRCZWZvcmUoImVkaXQiLCBzdWJtZW51TWFuYWdlcik7IC8vJE5PTi1OTFMtMSQKKwl9CisKKwkvKioKKwkgKiBUaGlzIGluc2VydHMgZ2xvYmFsIGFjdGlvbnMgYmVmb3JlIHRoZSAiYWRkaXRpb25zLWVuZCIgc2VwYXJhdG9yLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIGFkZEdsb2JhbEFjdGlvbnMoSU1lbnVNYW5hZ2VyIG1lbnVNYW5hZ2VyKSB7CisJCW1lbnVNYW5hZ2VyLmluc2VydEFmdGVyKCJhZGRpdGlvbnMtZW5kIiwgbmV3IFNlcGFyYXRvcigidWktYWN0aW9ucyIpKTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCisJCW1lbnVNYW5hZ2VyLmluc2VydEFmdGVyKCJ1aS1hY3Rpb25zIiwgc2hvd1Byb3BlcnRpZXNWaWV3QWN0aW9uKTsgLy8kTk9OLU5MUy0xJAorCisJCXJlZnJlc2hWaWV3ZXJBY3Rpb24uc2V0RW5hYmxlZChyZWZyZXNoVmlld2VyQWN0aW9uLmlzRW5hYmxlZCgpKTsJCQorCQltZW51TWFuYWdlci5pbnNlcnRBZnRlcigidWktYWN0aW9ucyIsIHJlZnJlc2hWaWV3ZXJBY3Rpb24pOyAvLyROT04tTkxTLTEkCisKKwkJc3VwZXIuYWRkR2xvYmFsQWN0aW9ucyhtZW51TWFuYWdlcik7CisJfQorCisJLyoqCisJICogVGhpcyBlbnN1cmVzIHRoYXQgYSBkZWxldGUgYWN0aW9uIHdpbGwgY2xlYW4gdXAgYWxsIHJlZmVyZW5jZXMgdG8gZGVsZXRlZCBvYmplY3RzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCBib29sZWFuIHJlbW92ZUFsbFJlZmVyZW5jZXNPbkRlbGV0ZSgpIHsKKwkJcmV0dXJuIHRydWU7CisJfQorCit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMuZXhhbXBsZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL2V4YW1wbGUvcHJlc2VudGF0aW9uL0V4YW1wbGVFZGl0b3IuamF2YSBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzLmV4YW1wbGUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9leGFtcGxlL3ByZXNlbnRhdGlvbi9FeGFtcGxlRWRpdG9yLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjdjOGFmNQotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzLmV4YW1wbGUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9leGFtcGxlL3ByZXNlbnRhdGlvbi9FeGFtcGxlRWRpdG9yLmphdmEKQEAgLTAsMCArMSwxNTUzIEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leGFtcGxlLnByZXNlbnRhdGlvbjsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247CitpbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbTsKK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OworaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOworaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uczsKK2ltcG9ydCBqYXZhLnV0aWwuRXZlbnRPYmplY3Q7CitpbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7CitpbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOworaW1wb3J0IGphdmEudXRpbC5MaW5rZWRIYXNoTWFwOworaW1wb3J0IGphdmEudXRpbC5MaXN0OworaW1wb3J0IGphdmEudXRpbC5NYXA7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JRmlsZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JTWFya2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklSZXNvdXJjZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUmVzb3VyY2VDaGFuZ2VFdmVudDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUmVzb3VyY2VDaGFuZ2VMaXN0ZW5lcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUmVzb3VyY2VEZWx0YTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUmVzb3VyY2VEZWx0YVZpc2l0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuUmVzb3VyY2VzUGx1Z2luOworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5Db3JlRXhjZXB0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUGF0aDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVByb2dyZXNzTW9uaXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuTnVsbFByb2dyZXNzTW9uaXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLmNvbW1hbmQuQmFzaWNDb21tYW5kU3RhY2s7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5jb21tYW5kLkNvbW1hbmQ7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5jb21tYW5kLkNvbW1hbmRTdGFjazsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLmNvbW1hbmQuQ29tbWFuZFN0YWNrTGlzdGVuZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udWkuTWFya2VySGVscGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udWkuZWRpdG9yLlByb2JsZW1FZGl0b3JQYXJ0OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udWkudmlld2VyLklWaWV3ZXJQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuQmFzaWNEaWFnbm9zdGljOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5EaWFnbm9zdGljOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5VUkk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3Q7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVWYWxpZGF0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnByb3ZpZGVyLkVjb3JlSXRlbVByb3ZpZGVyQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnJlc291cmNlLlJlc291cmNlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5yZXNvdXJjZS5SZXNvdXJjZVNldDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUudXRpbC5FQ29udGVudEFkYXB0ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnV0aWwuRWNvcmVVdGlsOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LmRvbWFpbi5BZGFwdGVyRmFjdG9yeUVkaXRpbmdEb21haW47CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQuZG9tYWluLkVkaXRpbmdEb21haW47CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQuZG9tYWluLklFZGl0aW5nRG9tYWluUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuQWRhcHRlckZhY3RvcnlJdGVtRGVsZWdhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkNvbXBvc2VkQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuUmVmbGVjdGl2ZUl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLnJlc291cmNlLlJlc291cmNlSXRlbVByb3ZpZGVyQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkuYWN0aW9uLkVkaXRpbmdEb21haW5BY3Rpb25CYXJDb250cmlidXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5jZWxsZWRpdG9yLkFkYXB0ZXJGYWN0b3J5VHJlZUVkaXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5kbmQuRWRpdGluZ0RvbWFpblZpZXdlckRyb3BBZGFwdGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmRuZC5Mb2NhbFRyYW5zZmVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmRuZC5WaWV3ZXJEcmFnQWRhcHRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5wcm92aWRlci5BZGFwdGVyRmFjdG9yeUNvbnRlbnRQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5wcm92aWRlci5BZGFwdGVyRmFjdG9yeUxhYmVsUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkucHJvdmlkZXIuVW53cmFwcGluZ1NlbGVjdGlvblByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLnV0aWwuRWRpdFVJTWFya2VySGVscGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLnV0aWwuRWRpdFVJVXRpbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS52aWV3LkV4dGVuZGVkUHJvcGVydHlTaGVldFBhZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklNZW51TGlzdGVuZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklNZW51TWFuYWdlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSVN0YXR1c0xpbmVNYW5hZ2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JVG9vbEJhck1hbmFnZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLk1lbnVNYW5hZ2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5TZXBhcmF0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuZGlhbG9ncy5NZXNzYWdlRGlhbG9nOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmRpYWxvZ3MuUHJvZ3Jlc3NNb25pdG9yRGlhbG9nOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU3RydWN0dXJlZFNlbGVjdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlNlbGVjdGlvbkNoYW5nZWRFdmVudDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlN0cnVjdHVyZWRTZWxlY3Rpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5TdHJ1Y3R1cmVkVmlld2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuVHJlZVZpZXdlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlZpZXdlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLnByb3ZpZGVyLkNvbW1vbkl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5wcm92aWRlci5HcmFwaEl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5sb2dnZXIucHJvdmlkZXIuTG9nZ2VySXRlbVByb3ZpZGVyQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLnByb3ZpZGVyLk1vZGVsSXRlbVByb3ZpZGVyQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLnByb3ZpZGVyLk1vZGlmaWVySXRlbVByb3ZpZGVyQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNjZW5hcmlvLnByb3ZpZGVyLlNjZW5hcmlvSXRlbVByb3ZpZGVyQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNlcXVlbmNlci5wcm92aWRlci5TZXF1ZW5jZXJJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc29sdmVyLnByb3ZpZGVyLlNvbHZlckl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLnByb3ZpZGVyLkxhYmVsc0l0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leGFtcGxlLnByb3ZpZGVyLkV4YW1wbGVJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQucHJvdmlkZXIuU3RhbmRhcmRJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMuZXhhbXBsZS5wcmVzZW50YXRpb24uRXhhbXBsZUVkaXRvclBsdWdpbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuU1dUOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5jdXN0b20uQ1RhYkZvbGRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZG5kLkRORDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZG5kLlRyYW5zZmVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuQ29udHJvbEFkYXB0ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5Db250cm9sRXZlbnQ7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmdyYXBoaWNzLlBvaW50OworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5NZW51OworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlRyZWU7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuSUFjdGlvbkJhcnM7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuSUVkaXRvcklucHV0OworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklFZGl0b3JQYXJ0OworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklFZGl0b3JTaXRlOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklQYXJ0TGlzdGVuZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaFBhcnQ7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuUGFydEluaXRFeGNlcHRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuYWN0aW9ucy5Xb3Jrc3BhY2VNb2RpZnlPcGVyYXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuZGlhbG9ncy5TYXZlQXNEaWFsb2c7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuaWRlLklHb3RvTWFya2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLnBhcnQuRmlsZUVkaXRvcklucHV0OworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLnBhcnQuTXVsdGlQYWdlRWRpdG9yUGFydDsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS52aWV3cy5jb250ZW50b3V0bGluZS5Db250ZW50T3V0bGluZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS52aWV3cy5jb250ZW50b3V0bGluZS5Db250ZW50T3V0bGluZVBhZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkudmlld3MuY29udGVudG91dGxpbmUuSUNvbnRlbnRPdXRsaW5lUGFnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS52aWV3cy5wcm9wZXJ0aWVzLklQcm9wZXJ0eVNoZWV0UGFnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS52aWV3cy5wcm9wZXJ0aWVzLlByb3BlcnR5U2hlZXQ7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkudmlld3MucHJvcGVydGllcy5Qcm9wZXJ0eVNoZWV0UGFnZTsKKworCisvKioKKyAqIFRoaXMgaXMgYW4gZXhhbXBsZSBvZiBhIEV4YW1wbGUgbW9kZWwgZWRpdG9yLgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgRXhhbXBsZUVkaXRvcgorCWV4dGVuZHMgTXVsdGlQYWdlRWRpdG9yUGFydAorCWltcGxlbWVudHMgSUVkaXRpbmdEb21haW5Qcm92aWRlciwgSVNlbGVjdGlvblByb3ZpZGVyLCBJTWVudUxpc3RlbmVyLCBJVmlld2VyUHJvdmlkZXIsIElHb3RvTWFya2VyIHsKKwkvKioKKwkgKiBUaGlzIGtlZXBzIHRyYWNrIG9mIHRoZSBlZGl0aW5nIGRvbWFpbiB0aGF0IGlzIHVzZWQgdG8gdHJhY2sgYWxsIGNoYW5nZXMgdG8gdGhlIG1vZGVsLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBBZGFwdGVyRmFjdG9yeUVkaXRpbmdEb21haW4gZWRpdGluZ0RvbWFpbjsKKworCS8qKgorCSAqIFRoaXMgaXMgdGhlIG9uZSBhZGFwdGVyIGZhY3RvcnkgdXNlZCBmb3IgcHJvdmlkaW5nIHZpZXdzIG9mIHRoZSBtb2RlbC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgQ29tcG9zZWRBZGFwdGVyRmFjdG9yeSBhZGFwdGVyRmFjdG9yeTsKKworCS8qKgorCSAqIFRoaXMgaXMgdGhlIGNvbnRlbnQgb3V0bGluZSBwYWdlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBJQ29udGVudE91dGxpbmVQYWdlIGNvbnRlbnRPdXRsaW5lUGFnZTsKKworCS8qKgorCSAqIFRoaXMgaXMgYSBrbHVkZ2UuLi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgSVN0YXR1c0xpbmVNYW5hZ2VyIGNvbnRlbnRPdXRsaW5lU3RhdHVzTGluZU1hbmFnZXI7CisKKwkvKioKKwkgKiBUaGlzIGlzIHRoZSBjb250ZW50IG91dGxpbmUgcGFnZSdzIHZpZXdlci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgVHJlZVZpZXdlciBjb250ZW50T3V0bGluZVZpZXdlcjsKKworCS8qKgorCSAqIFRoaXMgaXMgdGhlIHByb3BlcnR5IHNoZWV0IHBhZ2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIFByb3BlcnR5U2hlZXRQYWdlIHByb3BlcnR5U2hlZXRQYWdlOworCisJLyoqCisJICogVGhpcyBpcyB0aGUgdmlld2VyIHRoYXQgc2hhZG93cyB0aGUgc2VsZWN0aW9uIGluIHRoZSBjb250ZW50IG91dGxpbmUuCisJICogVGhlIHBhcmVudCByZWxhdGlvbiBtdXN0IGJlIGNvcnJlY3RseSBkZWZpbmVkIGZvciB0aGlzIHRvIHdvcmsuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIFRyZWVWaWV3ZXIgc2VsZWN0aW9uVmlld2VyOworCisJLyoqCisJICogVGhpcyBrZWVwcyB0cmFjayBvZiB0aGUgYWN0aXZlIGNvbnRlbnQgdmlld2VyLCB3aGljaCBtYXkgYmUgZWl0aGVyIG9uZSBvZiB0aGUgdmlld2VycyBpbiB0aGUgcGFnZXMgb3IgdGhlIGNvbnRlbnQgb3V0bGluZSB2aWV3ZXIuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIFZpZXdlciBjdXJyZW50Vmlld2VyOworCisJLyoqCisJICogVGhpcyBsaXN0ZW5zIHRvIHdoaWNoIGV2ZXIgdmlld2VyIGlzIGFjdGl2ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lciBzZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXI7CisKKwkvKioKKwkgKiBUaGlzIGtlZXBzIHRyYWNrIG9mIGFsbCB0aGUge0BsaW5rIG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcn1zIHRoYXQgYXJlIGxpc3RlbmluZyB0byB0aGlzIGVkaXRvci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgQ29sbGVjdGlvbjxJU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyPiBzZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXJzID0gbmV3IEFycmF5TGlzdDxJU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyPigpOworCisJLyoqCisJICogVGhpcyBrZWVwcyB0cmFjayBvZiB0aGUgc2VsZWN0aW9uIG9mIHRoZSBlZGl0b3IgYXMgYSB3aG9sZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgSVNlbGVjdGlvbiBlZGl0b3JTZWxlY3Rpb24gPSBTdHJ1Y3R1cmVkU2VsZWN0aW9uLkVNUFRZOworCisJLyoqCisJICogVGhlIE1hcmtlckhlbHBlciBpcyByZXNwb25zaWJsZSBmb3IgY3JlYXRpbmcgd29ya3NwYWNlIHJlc291cmNlIG1hcmtlcnMgcHJlc2VudGVkCisJICogaW4gRWNsaXBzZSdzIFByb2JsZW1zIFZpZXcuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIE1hcmtlckhlbHBlciBtYXJrZXJIZWxwZXIgPSBuZXcgRWRpdFVJTWFya2VySGVscGVyKCk7CisKKwkvKioKKwkgKiBUaGlzIGxpc3RlbnMgZm9yIHdoZW4gdGhlIG91dGxpbmUgYmVjb21lcyBhY3RpdmUKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgSVBhcnRMaXN0ZW5lciBwYXJ0TGlzdGVuZXIgPQorCQluZXcgSVBhcnRMaXN0ZW5lcigpIHsKKwkJCXB1YmxpYyB2b2lkIHBhcnRBY3RpdmF0ZWQoSVdvcmtiZW5jaFBhcnQgcCkgeworCQkJCWlmIChwIGluc3RhbmNlb2YgQ29udGVudE91dGxpbmUpIHsKKwkJCQkJaWYgKCgoQ29udGVudE91dGxpbmUpcCkuZ2V0Q3VycmVudFBhZ2UoKSA9PSBjb250ZW50T3V0bGluZVBhZ2UpIHsKKwkJCQkJCWdldEFjdGlvbkJhckNvbnRyaWJ1dG9yKCkuc2V0QWN0aXZlRWRpdG9yKEV4YW1wbGVFZGl0b3IudGhpcyk7CisKKwkJCQkJCXNldEN1cnJlbnRWaWV3ZXIoY29udGVudE91dGxpbmVWaWV3ZXIpOworCQkJCQl9CisJCQkJfQorCQkJCWVsc2UgaWYgKHAgaW5zdGFuY2VvZiBQcm9wZXJ0eVNoZWV0KSB7CisJCQkJCWlmICgoKFByb3BlcnR5U2hlZXQpcCkuZ2V0Q3VycmVudFBhZ2UoKSA9PSBwcm9wZXJ0eVNoZWV0UGFnZSkgeworCQkJCQkJZ2V0QWN0aW9uQmFyQ29udHJpYnV0b3IoKS5zZXRBY3RpdmVFZGl0b3IoRXhhbXBsZUVkaXRvci50aGlzKTsKKwkJCQkJCWhhbmRsZUFjdGl2YXRlKCk7CisJCQkJCX0KKwkJCQl9CisJCQkJZWxzZSBpZiAocCA9PSBFeGFtcGxlRWRpdG9yLnRoaXMpIHsKKwkJCQkJaGFuZGxlQWN0aXZhdGUoKTsKKwkJCQl9CisJCQl9CisJCQlwdWJsaWMgdm9pZCBwYXJ0QnJvdWdodFRvVG9wKElXb3JrYmVuY2hQYXJ0IHApIHsKKwkJCQkvLyBJZ25vcmUuCisJCQl9CisJCQlwdWJsaWMgdm9pZCBwYXJ0Q2xvc2VkKElXb3JrYmVuY2hQYXJ0IHApIHsKKwkJCQkvLyBJZ25vcmUuCisJCQl9CisJCQlwdWJsaWMgdm9pZCBwYXJ0RGVhY3RpdmF0ZWQoSVdvcmtiZW5jaFBhcnQgcCkgeworCQkJCS8vIElnbm9yZS4KKwkJCX0KKwkJCXB1YmxpYyB2b2lkIHBhcnRPcGVuZWQoSVdvcmtiZW5jaFBhcnQgcCkgeworCQkJCS8vIElnbm9yZS4KKwkJCX0KKwkJfTsKKworCS8qKgorCSAqIFJlc291cmNlcyB0aGF0IGhhdmUgYmVlbiByZW1vdmVkIHNpbmNlIGxhc3QgYWN0aXZhdGlvbi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgQ29sbGVjdGlvbjxSZXNvdXJjZT4gcmVtb3ZlZFJlc291cmNlcyA9IG5ldyBBcnJheUxpc3Q8UmVzb3VyY2U+KCk7CisKKwkvKioKKwkgKiBSZXNvdXJjZXMgdGhhdCBoYXZlIGJlZW4gY2hhbmdlZCBzaW5jZSBsYXN0IGFjdGl2YXRpb24uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIENvbGxlY3Rpb248UmVzb3VyY2U+IGNoYW5nZWRSZXNvdXJjZXMgPSBuZXcgQXJyYXlMaXN0PFJlc291cmNlPigpOworCisJLyoqCisJICogUmVzb3VyY2VzIHRoYXQgaGF2ZSBiZWVuIHNhdmVkLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBDb2xsZWN0aW9uPFJlc291cmNlPiBzYXZlZFJlc291cmNlcyA9IG5ldyBBcnJheUxpc3Q8UmVzb3VyY2U+KCk7CisKKwkvKioKKwkgKiBNYXAgdG8gc3RvcmUgdGhlIGRpYWdub3N0aWMgYXNzb2NpYXRlZCB3aXRoIGEgcmVzb3VyY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIE1hcDxSZXNvdXJjZSwgRGlhZ25vc3RpYz4gcmVzb3VyY2VUb0RpYWdub3N0aWNNYXAgPSBuZXcgTGlua2VkSGFzaE1hcDxSZXNvdXJjZSwgRGlhZ25vc3RpYz4oKTsKKworCS8qKgorCSAqIENvbnRyb2xzIHdoZXRoZXIgdGhlIHByb2JsZW0gaW5kaWNhdGlvbiBzaG91bGQgYmUgdXBkYXRlZC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgYm9vbGVhbiB1cGRhdGVQcm9ibGVtSW5kaWNhdGlvbiA9IHRydWU7CisKKwkvKioKKwkgKiBBZGFwdGVyIHVzZWQgdG8gdXBkYXRlIHRoZSBwcm9ibGVtIGluZGljYXRpb24gd2hlbiByZXNvdXJjZXMgYXJlIGRlbWFuZGVkIGxvYWRlZC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgRUNvbnRlbnRBZGFwdGVyIHByb2JsZW1JbmRpY2F0aW9uQWRhcHRlciA9IAorCQluZXcgRUNvbnRlbnRBZGFwdGVyKCkgeworCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgdm9pZCBub3RpZnlDaGFuZ2VkKE5vdGlmaWNhdGlvbiBub3RpZmljYXRpb24pIHsKKwkJCQlpZiAobm90aWZpY2F0aW9uLmdldE5vdGlmaWVyKCkgaW5zdGFuY2VvZiBSZXNvdXJjZSkgeworCQkJCQlzd2l0Y2ggKG5vdGlmaWNhdGlvbi5nZXRGZWF0dXJlSUQoUmVzb3VyY2UuY2xhc3MpKSB7CisJCQkJCQljYXNlIFJlc291cmNlLlJFU09VUkNFX19JU19MT0FERUQ6CisJCQkJCQljYXNlIFJlc291cmNlLlJFU09VUkNFX19FUlJPUlM6CisJCQkJCQljYXNlIFJlc291cmNlLlJFU09VUkNFX19XQVJOSU5HUzogeworCQkJCQkJCVJlc291cmNlIHJlc291cmNlID0gKFJlc291cmNlKW5vdGlmaWNhdGlvbi5nZXROb3RpZmllcigpOworCQkJCQkJCURpYWdub3N0aWMgZGlhZ25vc3RpYyA9IGFuYWx5emVSZXNvdXJjZVByb2JsZW1zKHJlc291cmNlLCBudWxsKTsKKwkJCQkJCQlpZiAoZGlhZ25vc3RpYy5nZXRTZXZlcml0eSgpICE9IERpYWdub3N0aWMuT0spIHsKKwkJCQkJCQkJcmVzb3VyY2VUb0RpYWdub3N0aWNNYXAucHV0KHJlc291cmNlLCBkaWFnbm9zdGljKTsKKwkJCQkJCQl9CisJCQkJCQkJZWxzZSB7CisJCQkJCQkJCXJlc291cmNlVG9EaWFnbm9zdGljTWFwLnJlbW92ZShyZXNvdXJjZSk7CisJCQkJCQkJfQorCisJCQkJCQkJaWYgKHVwZGF0ZVByb2JsZW1JbmRpY2F0aW9uKSB7CisJCQkJCQkJCWdldFNpdGUoKS5nZXRTaGVsbCgpLmdldERpc3BsYXkoKS5hc3luY0V4ZWMKKwkJCQkJCQkJCShuZXcgUnVubmFibGUoKSB7CisJCQkJCQkJCQkJIHB1YmxpYyB2b2lkIHJ1bigpIHsKKwkJCQkJCQkJCQkJIHVwZGF0ZVByb2JsZW1JbmRpY2F0aW9uKCk7CisJCQkJCQkJCQkJIH0KKwkJCQkJCQkJCSB9KTsKKwkJCQkJCQl9CisJCQkJCQkJYnJlYWs7CisJCQkJCQl9CisJCQkJCX0KKwkJCQl9CisJCQkJZWxzZSB7CisJCQkJCXN1cGVyLm5vdGlmeUNoYW5nZWQobm90aWZpY2F0aW9uKTsKKwkJCQl9CisJCQl9CisKKwkJCUBPdmVycmlkZQorCQkJcHJvdGVjdGVkIHZvaWQgc2V0VGFyZ2V0KFJlc291cmNlIHRhcmdldCkgeworCQkJCWJhc2ljU2V0VGFyZ2V0KHRhcmdldCk7CisJCQl9CisKKwkJCUBPdmVycmlkZQorCQkJcHJvdGVjdGVkIHZvaWQgdW5zZXRUYXJnZXQoUmVzb3VyY2UgdGFyZ2V0KSB7CisJCQkJYmFzaWNVbnNldFRhcmdldCh0YXJnZXQpOworCQkJfQorCQl9OworCisJLyoqCisJICogVGhpcyBsaXN0ZW5zIGZvciB3b3Jrc3BhY2UgY2hhbmdlcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgSVJlc291cmNlQ2hhbmdlTGlzdGVuZXIgcmVzb3VyY2VDaGFuZ2VMaXN0ZW5lciA9CisJCW5ldyBJUmVzb3VyY2VDaGFuZ2VMaXN0ZW5lcigpIHsKKwkJCXB1YmxpYyB2b2lkIHJlc291cmNlQ2hhbmdlZChJUmVzb3VyY2VDaGFuZ2VFdmVudCBldmVudCkgeworCQkJCUlSZXNvdXJjZURlbHRhIGRlbHRhID0gZXZlbnQuZ2V0RGVsdGEoKTsKKwkJCQl0cnkgeworCQkJCQljbGFzcyBSZXNvdXJjZURlbHRhVmlzaXRvciBpbXBsZW1lbnRzIElSZXNvdXJjZURlbHRhVmlzaXRvciB7CisJCQkJCQlwcm90ZWN0ZWQgUmVzb3VyY2VTZXQgcmVzb3VyY2VTZXQgPSBlZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCk7CisJCQkJCQlwcm90ZWN0ZWQgQ29sbGVjdGlvbjxSZXNvdXJjZT4gY2hhbmdlZFJlc291cmNlcyA9IG5ldyBBcnJheUxpc3Q8UmVzb3VyY2U+KCk7CisJCQkJCQlwcm90ZWN0ZWQgQ29sbGVjdGlvbjxSZXNvdXJjZT4gcmVtb3ZlZFJlc291cmNlcyA9IG5ldyBBcnJheUxpc3Q8UmVzb3VyY2U+KCk7CisKKwkJCQkJCXB1YmxpYyBib29sZWFuIHZpc2l0KElSZXNvdXJjZURlbHRhIGRlbHRhKSB7CisJCQkJCQkJaWYgKGRlbHRhLmdldFJlc291cmNlKCkuZ2V0VHlwZSgpID09IElSZXNvdXJjZS5GSUxFKSB7CisJCQkJCQkJCWlmIChkZWx0YS5nZXRLaW5kKCkgPT0gSVJlc291cmNlRGVsdGEuUkVNT1ZFRCB8fAorCQkJCQkJCQkgICAgZGVsdGEuZ2V0S2luZCgpID09IElSZXNvdXJjZURlbHRhLkNIQU5HRUQgJiYgZGVsdGEuZ2V0RmxhZ3MoKSAhPSBJUmVzb3VyY2VEZWx0YS5NQVJLRVJTKSB7CisJCQkJCQkJCQlSZXNvdXJjZSByZXNvdXJjZSA9IHJlc291cmNlU2V0LmdldFJlc291cmNlKFVSSS5jcmVhdGVQbGF0Zm9ybVJlc291cmNlVVJJKGRlbHRhLmdldEZ1bGxQYXRoKCkudG9TdHJpbmcoKSwgdHJ1ZSksIGZhbHNlKTsKKwkJCQkJCQkJCWlmIChyZXNvdXJjZSAhPSBudWxsKSB7CisJCQkJCQkJCQkJaWYgKGRlbHRhLmdldEtpbmQoKSA9PSBJUmVzb3VyY2VEZWx0YS5SRU1PVkVEKSB7CisJCQkJCQkJCQkJCXJlbW92ZWRSZXNvdXJjZXMuYWRkKHJlc291cmNlKTsKKwkJCQkJCQkJCQl9CisJCQkJCQkJCQkJZWxzZSBpZiAoIXNhdmVkUmVzb3VyY2VzLnJlbW92ZShyZXNvdXJjZSkpIHsKKwkJCQkJCQkJCQkJY2hhbmdlZFJlc291cmNlcy5hZGQocmVzb3VyY2UpOworCQkJCQkJCQkJCX0KKwkJCQkJCQkJCX0KKwkJCQkJCQkJfQorCQkJCQkJCX0KKworCQkJCQkJCXJldHVybiB0cnVlOworCQkJCQkJfQorCisJCQkJCQlwdWJsaWMgQ29sbGVjdGlvbjxSZXNvdXJjZT4gZ2V0Q2hhbmdlZFJlc291cmNlcygpIHsKKwkJCQkJCQlyZXR1cm4gY2hhbmdlZFJlc291cmNlczsKKwkJCQkJCX0KKworCQkJCQkJcHVibGljIENvbGxlY3Rpb248UmVzb3VyY2U+IGdldFJlbW92ZWRSZXNvdXJjZXMoKSB7CisJCQkJCQkJcmV0dXJuIHJlbW92ZWRSZXNvdXJjZXM7CisJCQkJCQl9CisJCQkJCX0KKworCQkJCQlmaW5hbCBSZXNvdXJjZURlbHRhVmlzaXRvciB2aXNpdG9yID0gbmV3IFJlc291cmNlRGVsdGFWaXNpdG9yKCk7CisJCQkJCWRlbHRhLmFjY2VwdCh2aXNpdG9yKTsKKworCQkJCQlpZiAoIXZpc2l0b3IuZ2V0UmVtb3ZlZFJlc291cmNlcygpLmlzRW1wdHkoKSkgeworCQkJCQkJZ2V0U2l0ZSgpLmdldFNoZWxsKCkuZ2V0RGlzcGxheSgpLmFzeW5jRXhlYworCQkJCQkJCShuZXcgUnVubmFibGUoKSB7CisJCQkJCQkJCSBwdWJsaWMgdm9pZCBydW4oKSB7CisJCQkJCQkJCQkgcmVtb3ZlZFJlc291cmNlcy5hZGRBbGwodmlzaXRvci5nZXRSZW1vdmVkUmVzb3VyY2VzKCkpOworCQkJCQkJCQkJIGlmICghaXNEaXJ0eSgpKSB7CisJCQkJCQkJCQkJIGdldFNpdGUoKS5nZXRQYWdlKCkuY2xvc2VFZGl0b3IoRXhhbXBsZUVkaXRvci50aGlzLCBmYWxzZSk7CisJCQkJCQkJCQkgfQorCQkJCQkJCQkgfQorCQkJCQkJCSB9KTsKKwkJCQkJfQorCisJCQkJCWlmICghdmlzaXRvci5nZXRDaGFuZ2VkUmVzb3VyY2VzKCkuaXNFbXB0eSgpKSB7CisJCQkJCQlnZXRTaXRlKCkuZ2V0U2hlbGwoKS5nZXREaXNwbGF5KCkuYXN5bmNFeGVjCisJCQkJCQkJKG5ldyBSdW5uYWJsZSgpIHsKKwkJCQkJCQkJIHB1YmxpYyB2b2lkIHJ1bigpIHsKKwkJCQkJCQkJCSBjaGFuZ2VkUmVzb3VyY2VzLmFkZEFsbCh2aXNpdG9yLmdldENoYW5nZWRSZXNvdXJjZXMoKSk7CisJCQkJCQkJCQkgaWYgKGdldFNpdGUoKS5nZXRQYWdlKCkuZ2V0QWN0aXZlRWRpdG9yKCkgPT0gRXhhbXBsZUVkaXRvci50aGlzKSB7CisJCQkJCQkJCQkJIGhhbmRsZUFjdGl2YXRlKCk7CisJCQkJCQkJCQkgfQorCQkJCQkJCQkgfQorCQkJCQkJCSB9KTsKKwkJCQkJfQorCQkJCX0KKwkJCQljYXRjaCAoQ29yZUV4Y2VwdGlvbiBleGNlcHRpb24pIHsKKwkJCQkJRXhhbXBsZUVkaXRvclBsdWdpbi5JTlNUQU5DRS5sb2coZXhjZXB0aW9uKTsKKwkJCQl9CisJCQl9CisJCX07CisKKwkvKioKKwkgKiBIYW5kbGVzIGFjdGl2YXRpb24gb2YgdGhlIGVkaXRvciBvciBpdCdzIGFzc29jaWF0ZWQgdmlld3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgaGFuZGxlQWN0aXZhdGUoKSB7CisJCS8vIFJlY29tcHV0ZSB0aGUgcmVhZCBvbmx5IHN0YXRlLgorCQkvLworCQlpZiAoZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVRvUmVhZE9ubHlNYXAoKSAhPSBudWxsKSB7CisJCSAgZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVRvUmVhZE9ubHlNYXAoKS5jbGVhcigpOworCisJCSAgLy8gUmVmcmVzaCBhbnkgYWN0aW9ucyB0aGF0IG1heSBiZWNvbWUgZW5hYmxlZCBvciBkaXNhYmxlZC4KKwkJICAvLworCQkgIHNldFNlbGVjdGlvbihnZXRTZWxlY3Rpb24oKSk7CisJCX0KKworCQlpZiAoIXJlbW92ZWRSZXNvdXJjZXMuaXNFbXB0eSgpKSB7CisJCQlpZiAoaGFuZGxlRGlydHlDb25mbGljdCgpKSB7CisJCQkJZ2V0U2l0ZSgpLmdldFBhZ2UoKS5jbG9zZUVkaXRvcihFeGFtcGxlRWRpdG9yLnRoaXMsIGZhbHNlKTsKKwkJCX0KKwkJCWVsc2UgeworCQkJCXJlbW92ZWRSZXNvdXJjZXMuY2xlYXIoKTsKKwkJCQljaGFuZ2VkUmVzb3VyY2VzLmNsZWFyKCk7CisJCQkJc2F2ZWRSZXNvdXJjZXMuY2xlYXIoKTsKKwkJCX0KKwkJfQorCQllbHNlIGlmICghY2hhbmdlZFJlc291cmNlcy5pc0VtcHR5KCkpIHsKKwkJCWNoYW5nZWRSZXNvdXJjZXMucmVtb3ZlQWxsKHNhdmVkUmVzb3VyY2VzKTsKKwkJCWhhbmRsZUNoYW5nZWRSZXNvdXJjZXMoKTsKKwkJCWNoYW5nZWRSZXNvdXJjZXMuY2xlYXIoKTsKKwkJCXNhdmVkUmVzb3VyY2VzLmNsZWFyKCk7CisJCX0KKwl9CisKKwkvKioKKwkgKiBIYW5kbGVzIHdoYXQgdG8gZG8gd2l0aCBjaGFuZ2VkIHJlc291cmNlcyBvbiBhY3RpdmF0aW9uLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIGhhbmRsZUNoYW5nZWRSZXNvdXJjZXMoKSB7CisJCWlmICghY2hhbmdlZFJlc291cmNlcy5pc0VtcHR5KCkgJiYgKCFpc0RpcnR5KCkgfHwgaGFuZGxlRGlydHlDb25mbGljdCgpKSkgeworCQkJaWYgKGlzRGlydHkoKSkgeworCQkJCWNoYW5nZWRSZXNvdXJjZXMuYWRkQWxsKGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKS5nZXRSZXNvdXJjZXMoKSk7CisJCQl9CisJCQllZGl0aW5nRG9tYWluLmdldENvbW1hbmRTdGFjaygpLmZsdXNoKCk7CisKKwkJCXVwZGF0ZVByb2JsZW1JbmRpY2F0aW9uID0gZmFsc2U7CisJCQlmb3IgKFJlc291cmNlIHJlc291cmNlIDogY2hhbmdlZFJlc291cmNlcykgeworCQkJCWlmIChyZXNvdXJjZS5pc0xvYWRlZCgpKSB7CisJCQkJCXJlc291cmNlLnVubG9hZCgpOworCQkJCQl0cnkgeworCQkJCQkJcmVzb3VyY2UubG9hZChDb2xsZWN0aW9ucy5FTVBUWV9NQVApOworCQkJCQl9CisJCQkJCWNhdGNoIChJT0V4Y2VwdGlvbiBleGNlcHRpb24pIHsKKwkJCQkJCWlmICghcmVzb3VyY2VUb0RpYWdub3N0aWNNYXAuY29udGFpbnNLZXkocmVzb3VyY2UpKSB7CisJCQkJCQkJcmVzb3VyY2VUb0RpYWdub3N0aWNNYXAucHV0KHJlc291cmNlLCBhbmFseXplUmVzb3VyY2VQcm9ibGVtcyhyZXNvdXJjZSwgZXhjZXB0aW9uKSk7CisJCQkJCQl9CisJCQkJCX0KKwkJCQl9CisJCQl9CisKKwkJCWlmIChBZGFwdGVyRmFjdG9yeUVkaXRpbmdEb21haW4uaXNTdGFsZShlZGl0b3JTZWxlY3Rpb24pKSB7CisJCQkJc2V0U2VsZWN0aW9uKFN0cnVjdHVyZWRTZWxlY3Rpb24uRU1QVFkpOworCQkJfQorCisJCQl1cGRhdGVQcm9ibGVtSW5kaWNhdGlvbiA9IHRydWU7CisJCQl1cGRhdGVQcm9ibGVtSW5kaWNhdGlvbigpOworCQl9CisJfQorICAKKwkvKioKKwkgKiBVcGRhdGVzIHRoZSBwcm9ibGVtcyBpbmRpY2F0aW9uIHdpdGggdGhlIGluZm9ybWF0aW9uIGRlc2NyaWJlZCBpbiB0aGUgc3BlY2lmaWVkIGRpYWdub3N0aWMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgdXBkYXRlUHJvYmxlbUluZGljYXRpb24oKSB7CisJCWlmICh1cGRhdGVQcm9ibGVtSW5kaWNhdGlvbikgeworCQkJQmFzaWNEaWFnbm9zdGljIGRpYWdub3N0aWMgPQorCQkJCW5ldyBCYXNpY0RpYWdub3N0aWMKKwkJCQkJKERpYWdub3N0aWMuT0ssCisJCQkJCSAib3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzLmV4YW1wbGUuZWRpdG9yIiwgLy8kTk9OLU5MUy0xJAorCQkJCQkgMCwKKwkJCQkJIG51bGwsCisJCQkJCSBuZXcgT2JqZWN0IFtdIHsgZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpIH0pOworCQkJZm9yIChEaWFnbm9zdGljIGNoaWxkRGlhZ25vc3RpYyA6IHJlc291cmNlVG9EaWFnbm9zdGljTWFwLnZhbHVlcygpKSB7CisJCQkJaWYgKGNoaWxkRGlhZ25vc3RpYy5nZXRTZXZlcml0eSgpICE9IERpYWdub3N0aWMuT0spIHsKKwkJCQkJZGlhZ25vc3RpYy5hZGQoY2hpbGREaWFnbm9zdGljKTsKKwkJCQl9CisJCQl9CisKKwkJCWludCBsYXN0RWRpdG9yUGFnZSA9IGdldFBhZ2VDb3VudCgpIC0gMTsKKwkJCWlmIChsYXN0RWRpdG9yUGFnZSA+PSAwICYmIGdldEVkaXRvcihsYXN0RWRpdG9yUGFnZSkgaW5zdGFuY2VvZiBQcm9ibGVtRWRpdG9yUGFydCkgeworCQkJCSgoUHJvYmxlbUVkaXRvclBhcnQpZ2V0RWRpdG9yKGxhc3RFZGl0b3JQYWdlKSkuc2V0RGlhZ25vc3RpYyhkaWFnbm9zdGljKTsKKwkJCQlpZiAoZGlhZ25vc3RpYy5nZXRTZXZlcml0eSgpICE9IERpYWdub3N0aWMuT0spIHsKKwkJCQkJc2V0QWN0aXZlUGFnZShsYXN0RWRpdG9yUGFnZSk7CisJCQkJfQorCQkJfQorCQkJZWxzZSBpZiAoZGlhZ25vc3RpYy5nZXRTZXZlcml0eSgpICE9IERpYWdub3N0aWMuT0spIHsKKwkJCQlQcm9ibGVtRWRpdG9yUGFydCBwcm9ibGVtRWRpdG9yUGFydCA9IG5ldyBQcm9ibGVtRWRpdG9yUGFydCgpOworCQkJCXByb2JsZW1FZGl0b3JQYXJ0LnNldERpYWdub3N0aWMoZGlhZ25vc3RpYyk7CisJCQkJcHJvYmxlbUVkaXRvclBhcnQuc2V0TWFya2VySGVscGVyKG1hcmtlckhlbHBlcik7CisJCQkJdHJ5IHsKKwkJCQkJYWRkUGFnZSgrK2xhc3RFZGl0b3JQYWdlLCBwcm9ibGVtRWRpdG9yUGFydCwgZ2V0RWRpdG9ySW5wdXQoKSk7CisJCQkJCXNldFBhZ2VUZXh0KGxhc3RFZGl0b3JQYWdlLCBwcm9ibGVtRWRpdG9yUGFydC5nZXRQYXJ0TmFtZSgpKTsKKwkJCQkJc2V0QWN0aXZlUGFnZShsYXN0RWRpdG9yUGFnZSk7CisJCQkJCXNob3dUYWJzKCk7CisJCQkJfQorCQkJCWNhdGNoIChQYXJ0SW5pdEV4Y2VwdGlvbiBleGNlcHRpb24pIHsKKwkJCQkJRXhhbXBsZUVkaXRvclBsdWdpbi5JTlNUQU5DRS5sb2coZXhjZXB0aW9uKTsKKwkJCQl9CisJCQl9CisKKwkJCWlmIChtYXJrZXJIZWxwZXIuaGFzTWFya2VycyhlZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkpKSB7CisJCQkJbWFya2VySGVscGVyLmRlbGV0ZU1hcmtlcnMoZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpKTsKKwkJCQlpZiAoZGlhZ25vc3RpYy5nZXRTZXZlcml0eSgpICE9IERpYWdub3N0aWMuT0spIHsKKwkJCQkJdHJ5IHsKKwkJCQkJCW1hcmtlckhlbHBlci5jcmVhdGVNYXJrZXJzKGRpYWdub3N0aWMpOworCQkJCQl9CisJCQkJCWNhdGNoIChDb3JlRXhjZXB0aW9uIGV4Y2VwdGlvbikgeworCQkJCQkJRXhhbXBsZUVkaXRvclBsdWdpbi5JTlNUQU5DRS5sb2coZXhjZXB0aW9uKTsKKwkJCQkJfQorCQkJCX0KKwkJCX0KKwkJfQorCX0KKworCS8qKgorCSAqIFNob3dzIGEgZGlhbG9nIHRoYXQgYXNrcyBpZiBjb25mbGljdGluZyBjaGFuZ2VzIHNob3VsZCBiZSBkaXNjYXJkZWQuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIGJvb2xlYW4gaGFuZGxlRGlydHlDb25mbGljdCgpIHsKKwkJcmV0dXJuCisJCQlNZXNzYWdlRGlhbG9nLm9wZW5RdWVzdGlvbgorCQkJCShnZXRTaXRlKCkuZ2V0U2hlbGwoKSwKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfRmlsZUNvbmZsaWN0X2xhYmVsIiksIC8vJE5PTi1OTFMtMSQKKwkJCQkgZ2V0U3RyaW5nKCJfV0FSTl9GaWxlQ29uZmxpY3QiKSk7IC8vJE5PTi1OTFMtMSQKKwl9CisKKwkvKioKKwkgKiBUaGlzIGNyZWF0ZXMgYSBtb2RlbCBlZGl0b3IuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEV4YW1wbGVFZGl0b3IoKSB7CisJCXN1cGVyKCk7CisJCWluaXRpYWxpemVFZGl0aW5nRG9tYWluKCk7CisJfQorCisJLyoqCisJICogVGhpcyBzZXRzIHVwIHRoZSBlZGl0aW5nIGRvbWFpbiBmb3IgdGhlIG1vZGVsIGVkaXRvci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBpbml0aWFsaXplRWRpdGluZ0RvbWFpbigpIHsKKwkJLy8gQ3JlYXRlIGFuIGFkYXB0ZXIgZmFjdG9yeSB0aGF0IHlpZWxkcyBpdGVtIHByb3ZpZGVycy4KKwkJLy8KKwkJYWRhcHRlckZhY3RvcnkgPSBuZXcgQ29tcG9zZWRBZGFwdGVyRmFjdG9yeShDb21wb3NlZEFkYXB0ZXJGYWN0b3J5LkRlc2NyaXB0b3IuUmVnaXN0cnkuSU5TVEFOQ0UpOworCisJCWFkYXB0ZXJGYWN0b3J5LmFkZEFkYXB0ZXJGYWN0b3J5KG5ldyBSZXNvdXJjZUl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5KCkpOworCQlhZGFwdGVyRmFjdG9yeS5hZGRBZGFwdGVyRmFjdG9yeShuZXcgRXhhbXBsZUl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5KCkpOworCQlhZGFwdGVyRmFjdG9yeS5hZGRBZGFwdGVyRmFjdG9yeShuZXcgU3RhbmRhcmRJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSgpKTsKKwkJYWRhcHRlckZhY3RvcnkuYWRkQWRhcHRlckZhY3RvcnkobmV3IENvbW1vbkl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5KCkpOworCQlhZGFwdGVyRmFjdG9yeS5hZGRBZGFwdGVyRmFjdG9yeShuZXcgTW9kZWxJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSgpKTsKKwkJYWRhcHRlckZhY3RvcnkuYWRkQWRhcHRlckZhY3RvcnkobmV3IEdyYXBoSXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkoKSk7CisJCWFkYXB0ZXJGYWN0b3J5LmFkZEFkYXB0ZXJGYWN0b3J5KG5ldyBNb2RpZmllckl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5KCkpOworCQlhZGFwdGVyRmFjdG9yeS5hZGRBZGFwdGVyRmFjdG9yeShuZXcgRWNvcmVJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSgpKTsKKwkJYWRhcHRlckZhY3RvcnkuYWRkQWRhcHRlckZhY3RvcnkobmV3IFNjZW5hcmlvSXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkoKSk7CisJCWFkYXB0ZXJGYWN0b3J5LmFkZEFkYXB0ZXJGYWN0b3J5KG5ldyBTZXF1ZW5jZXJJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSgpKTsKKwkJYWRhcHRlckZhY3RvcnkuYWRkQWRhcHRlckZhY3RvcnkobmV3IExhYmVsc0l0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5KCkpOworCQlhZGFwdGVyRmFjdG9yeS5hZGRBZGFwdGVyRmFjdG9yeShuZXcgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLnByb3ZpZGVyLlN0YW5kYXJkSXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkoKSk7CisJCWFkYXB0ZXJGYWN0b3J5LmFkZEFkYXB0ZXJGYWN0b3J5KG5ldyBTb2x2ZXJJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSgpKTsKKwkJYWRhcHRlckZhY3RvcnkuYWRkQWRhcHRlckZhY3RvcnkobmV3IExvZ2dlckl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5KCkpOworCQlhZGFwdGVyRmFjdG9yeS5hZGRBZGFwdGVyRmFjdG9yeShuZXcgUmVmbGVjdGl2ZUl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5KCkpOworCisJCS8vIENyZWF0ZSB0aGUgY29tbWFuZCBzdGFjayB0aGF0IHdpbGwgbm90aWZ5IHRoaXMgZWRpdG9yIGFzIGNvbW1hbmRzIGFyZSBleGVjdXRlZC4KKwkJLy8KKwkJQmFzaWNDb21tYW5kU3RhY2sgY29tbWFuZFN0YWNrID0gbmV3IEJhc2ljQ29tbWFuZFN0YWNrKCk7CisKKwkJLy8gQWRkIGEgbGlzdGVuZXIgdG8gc2V0IHRoZSBtb3N0IHJlY2VudCBjb21tYW5kJ3MgYWZmZWN0ZWQgb2JqZWN0cyB0byBiZSB0aGUgc2VsZWN0aW9uIG9mIHRoZSB2aWV3ZXIgd2l0aCBmb2N1cy4KKwkJLy8KKwkJY29tbWFuZFN0YWNrLmFkZENvbW1hbmRTdGFja0xpc3RlbmVyCisJCQkobmV3IENvbW1hbmRTdGFja0xpc3RlbmVyKCkgeworCQkJCSBwdWJsaWMgdm9pZCBjb21tYW5kU3RhY2tDaGFuZ2VkKGZpbmFsIEV2ZW50T2JqZWN0IGV2ZW50KSB7CisJCQkJCSBnZXRDb250YWluZXIoKS5nZXREaXNwbGF5KCkuYXN5bmNFeGVjCisJCQkJCQkgKG5ldyBSdW5uYWJsZSgpIHsKKwkJCQkJCQkgIHB1YmxpYyB2b2lkIHJ1bigpIHsKKwkJCQkJCQkJICBmaXJlUHJvcGVydHlDaGFuZ2UoSUVkaXRvclBhcnQuUFJPUF9ESVJUWSk7CisKKwkJCQkJCQkJICAvLyBUcnkgdG8gc2VsZWN0IHRoZSBhZmZlY3RlZCBvYmplY3RzLgorCQkJCQkJCQkgIC8vCisJCQkJCQkJCSAgQ29tbWFuZCBtb3N0UmVjZW50Q29tbWFuZCA9ICgoQ29tbWFuZFN0YWNrKWV2ZW50LmdldFNvdXJjZSgpKS5nZXRNb3N0UmVjZW50Q29tbWFuZCgpOworCQkJCQkJCQkgIGlmIChtb3N0UmVjZW50Q29tbWFuZCAhPSBudWxsKSB7CisJCQkJCQkJCQkgIHNldFNlbGVjdGlvblRvVmlld2VyKG1vc3RSZWNlbnRDb21tYW5kLmdldEFmZmVjdGVkT2JqZWN0cygpKTsKKwkJCQkJCQkJICB9CisJCQkJCQkJCSAgaWYgKHByb3BlcnR5U2hlZXRQYWdlICE9IG51bGwgJiYgIXByb3BlcnR5U2hlZXRQYWdlLmdldENvbnRyb2woKS5pc0Rpc3Bvc2VkKCkpIHsKKwkJCQkJCQkJCSAgcHJvcGVydHlTaGVldFBhZ2UucmVmcmVzaCgpOworCQkJCQkJCQkgIH0KKwkJCQkJCQkgIH0KKwkJCQkJCSAgfSk7CisJCQkJIH0KKwkJCSB9KTsKKworCQkvLyBDcmVhdGUgdGhlIGVkaXRpbmcgZG9tYWluIHdpdGggYSBzcGVjaWFsIGNvbW1hbmQgc3RhY2suCisJCS8vCisJCWVkaXRpbmdEb21haW4gPSBuZXcgQWRhcHRlckZhY3RvcnlFZGl0aW5nRG9tYWluKGFkYXB0ZXJGYWN0b3J5LCBjb21tYW5kU3RhY2ssIG5ldyBIYXNoTWFwPFJlc291cmNlLCBCb29sZWFuPigpKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGlzIGhlcmUgZm9yIHRoZSBsaXN0ZW5lciB0byBiZSBhYmxlIHRvIGNhbGwgaXQuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJCQlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgdm9pZCBmaXJlUHJvcGVydHlDaGFuZ2UoaW50IGFjdGlvbikgeworCQlzdXBlci5maXJlUHJvcGVydHlDaGFuZ2UoYWN0aW9uKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHNldHMgdGhlIHNlbGVjdGlvbiBpbnRvIHdoaWNoZXZlciB2aWV3ZXIgaXMgYWN0aXZlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogQHBhcmFtIGNvbGxlY3Rpb24gCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIHNldFNlbGVjdGlvblRvVmlld2VyKENvbGxlY3Rpb248Pz4gY29sbGVjdGlvbikgeworCQlmaW5hbCBDb2xsZWN0aW9uPD8+IHRoZVNlbGVjdGlvbiA9IGNvbGxlY3Rpb247CisJCS8vIE1ha2Ugc3VyZSBpdCdzIG9rYXkuCisJCS8vCisJCWlmICh0aGVTZWxlY3Rpb24gIT0gbnVsbCAmJiAhdGhlU2VsZWN0aW9uLmlzRW1wdHkoKSkgeworCQkJUnVubmFibGUgcnVubmFibGUgPQorCQkJCW5ldyBSdW5uYWJsZSgpIHsKKwkJCQkJcHVibGljIHZvaWQgcnVuKCkgeworCQkJCQkJLy8gVHJ5IHRvIHNlbGVjdCB0aGUgaXRlbXMgaW4gdGhlIGN1cnJlbnQgY29udGVudCB2aWV3ZXIgb2YgdGhlIGVkaXRvci4KKwkJCQkJCS8vCisJCQkJCQlpZiAoY3VycmVudFZpZXdlciAhPSBudWxsKSB7CisJCQkJCQkJY3VycmVudFZpZXdlci5zZXRTZWxlY3Rpb24obmV3IFN0cnVjdHVyZWRTZWxlY3Rpb24odGhlU2VsZWN0aW9uLnRvQXJyYXkoKSksIHRydWUpOworCQkJCQkJfQorCQkJCQl9CisJCQkJfTsKKwkJCWdldFNpdGUoKS5nZXRTaGVsbCgpLmdldERpc3BsYXkoKS5hc3luY0V4ZWMocnVubmFibGUpOworCQl9CisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIHRoZSBlZGl0aW5nIGRvbWFpbiBhcyByZXF1aXJlZCBieSB0aGUge0BsaW5rIElFZGl0aW5nRG9tYWluUHJvdmlkZXJ9IGludGVyZmFjZS4KKwkgKiBUaGlzIGlzIGltcG9ydGFudCBmb3IgaW1wbGVtZW50aW5nIHRoZSBzdGF0aWMgbWV0aG9kcyBvZiB7QGxpbmsgQWRhcHRlckZhY3RvcnlFZGl0aW5nRG9tYWlufQorCSAqIGFuZCBmb3Igc3VwcG9ydGluZyB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkuYWN0aW9uLkNvbW1hbmRBY3Rpb259LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogQHJldHVybiAKKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVkaXRpbmdEb21haW4gZ2V0RWRpdGluZ0RvbWFpbigpIHsKKwkJcmV0dXJuIGVkaXRpbmdEb21haW47CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIGNsYXNzIFJldmVyc2VBZGFwdGVyRmFjdG9yeUNvbnRlbnRQcm92aWRlciBleHRlbmRzIEFkYXB0ZXJGYWN0b3J5Q29udGVudFByb3ZpZGVyIHsKKwkJLyoqCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIEBwYXJhbSBhZGFwdGVyRmFjdG9yeSAKKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCXB1YmxpYyBSZXZlcnNlQWRhcHRlckZhY3RvcnlDb250ZW50UHJvdmlkZXIoQWRhcHRlckZhY3RvcnkgYWRhcHRlckZhY3RvcnkpIHsKKwkJCXN1cGVyKGFkYXB0ZXJGYWN0b3J5KTsKKwkJfQorCisJCS8qKgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJQE92ZXJyaWRlCisJCXB1YmxpYyBPYmplY3QgW10gZ2V0RWxlbWVudHMoT2JqZWN0IG9iamVjdCkgeworCQkJT2JqZWN0IHBhcmVudCA9IHN1cGVyLmdldFBhcmVudChvYmplY3QpOworCQkJcmV0dXJuIChwYXJlbnQgPT0gbnVsbCA/IENvbGxlY3Rpb25zLkVNUFRZX1NFVCA6IENvbGxlY3Rpb25zLnNpbmdsZXRvbihwYXJlbnQpKS50b0FycmF5KCk7CisJCX0KKworCQkvKioKKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUBPdmVycmlkZQorCQlwdWJsaWMgT2JqZWN0IFtdIGdldENoaWxkcmVuKE9iamVjdCBvYmplY3QpIHsKKwkJCU9iamVjdCBwYXJlbnQgPSBzdXBlci5nZXRQYXJlbnQob2JqZWN0KTsKKwkJCXJldHVybiAocGFyZW50ID09IG51bGwgPyBDb2xsZWN0aW9ucy5FTVBUWV9TRVQgOiBDb2xsZWN0aW9ucy5zaW5nbGV0b24ocGFyZW50KSkudG9BcnJheSgpOworCQl9CisKKwkJLyoqCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlAT3ZlcnJpZGUKKwkJcHVibGljIGJvb2xlYW4gaGFzQ2hpbGRyZW4oT2JqZWN0IG9iamVjdCkgeworCQkJT2JqZWN0IHBhcmVudCA9IHN1cGVyLmdldFBhcmVudChvYmplY3QpOworCQkJcmV0dXJuIHBhcmVudCAhPSBudWxsOworCQl9CisKKwkJLyoqCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlAT3ZlcnJpZGUKKwkJcHVibGljIE9iamVjdCBnZXRQYXJlbnQoT2JqZWN0IG9iamVjdCkgeworCQkJcmV0dXJuIG51bGw7CisJCX0KKwl9CisKKwkvKioKKwkgKiBUaGlzIG1ha2VzIHN1cmUgdGhhdCBvbmUgY29udGVudCB2aWV3ZXIsIGVpdGhlciBmb3IgdGhlIGN1cnJlbnQgcGFnZSBvciB0aGUgb3V0bGluZSB2aWV3LCBpZiBpdCBoYXMgZm9jdXMsCisJICogaXMgdGhlIGN1cnJlbnQgb25lLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogQHBhcmFtIHZpZXdlciAKKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgc2V0Q3VycmVudFZpZXdlcihWaWV3ZXIgdmlld2VyKSB7CisJCS8vIElmIGl0IGlzIGNoYW5naW5nLi4uCisJCS8vCisJCWlmIChjdXJyZW50Vmlld2VyICE9IHZpZXdlcikgeworCQkJaWYgKHNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lciA9PSBudWxsKSB7CisJCQkJLy8gQ3JlYXRlIHRoZSBsaXN0ZW5lciBvbiBkZW1hbmQuCisJCQkJLy8KKwkJCQlzZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIgPQorCQkJCQluZXcgSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcigpIHsKKwkJCQkJCS8vIFRoaXMganVzdCBub3RpZmllcyB0aG9zZSB0aGluZ3MgdGhhdCBhcmUgYWZmZWN0ZWQgYnkgdGhlIHNlY3Rpb24uCisJCQkJCQkvLworCQkJCQkJcHVibGljIHZvaWQgc2VsZWN0aW9uQ2hhbmdlZChTZWxlY3Rpb25DaGFuZ2VkRXZlbnQgc2VsZWN0aW9uQ2hhbmdlZEV2ZW50KSB7CisJCQkJCQkJc2V0U2VsZWN0aW9uKHNlbGVjdGlvbkNoYW5nZWRFdmVudC5nZXRTZWxlY3Rpb24oKSk7CisJCQkJCQl9CisJCQkJCX07CisJCQl9CisKKwkJCS8vIFN0b3AgbGlzdGVuaW5nIHRvIHRoZSBvbGQgb25lLgorCQkJLy8KKwkJCWlmIChjdXJyZW50Vmlld2VyICE9IG51bGwpIHsKKwkJCQljdXJyZW50Vmlld2VyLnJlbW92ZVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcihzZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIpOworCQkJfQorCisJCQkvLyBTdGFydCBsaXN0ZW5pbmcgdG8gdGhlIG5ldyBvbmUuCisJCQkvLworCQkJaWYgKHZpZXdlciAhPSBudWxsKSB7CisJCQkJdmlld2VyLmFkZFNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcihzZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIpOworCQkJfQorCisJCQkvLyBSZW1lbWJlciBpdC4KKwkJCS8vCisJCQljdXJyZW50Vmlld2VyID0gdmlld2VyOworCisJCQkvLyBTZXQgdGhlIGVkaXRvcnMgc2VsZWN0aW9uIGJhc2VkIG9uIHRoZSBjdXJyZW50IHZpZXdlcidzIHNlbGVjdGlvbi4KKwkJCS8vCisJCQlzZXRTZWxlY3Rpb24oY3VycmVudFZpZXdlciA9PSBudWxsID8gU3RydWN0dXJlZFNlbGVjdGlvbi5FTVBUWSA6IGN1cnJlbnRWaWV3ZXIuZ2V0U2VsZWN0aW9uKCkpOworCQl9CisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIHRoZSB2aWV3ZXIgYXMgcmVxdWlyZWQgYnkgdGhlIHtAbGluayBJVmlld2VyUHJvdmlkZXJ9IGludGVyZmFjZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBWaWV3ZXIgZ2V0Vmlld2VyKCkgeworCQlyZXR1cm4gY3VycmVudFZpZXdlcjsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGNyZWF0ZXMgYSBjb250ZXh0IG1lbnUgZm9yIHRoZSB2aWV3ZXIgYW5kIGFkZHMgYSBsaXN0ZW5lciBhcyB3ZWxsIHJlZ2lzdGVyaW5nIHRoZSBtZW51IGZvciBleHRlbnNpb24uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgY3JlYXRlQ29udGV4dE1lbnVGb3IoU3RydWN0dXJlZFZpZXdlciB2aWV3ZXIpIHsKKwkJTWVudU1hbmFnZXIgY29udGV4dE1lbnUgPSBuZXcgTWVudU1hbmFnZXIoIiNQb3BVcCIpOyAvLyROT04tTkxTLTEkCisJCWNvbnRleHRNZW51LmFkZChuZXcgU2VwYXJhdG9yKCJhZGRpdGlvbnMiKSk7IC8vJE5PTi1OTFMtMSQKKwkJY29udGV4dE1lbnUuc2V0UmVtb3ZlQWxsV2hlblNob3duKHRydWUpOworCQljb250ZXh0TWVudS5hZGRNZW51TGlzdGVuZXIodGhpcyk7CisJCU1lbnUgbWVudT0gY29udGV4dE1lbnUuY3JlYXRlQ29udGV4dE1lbnUodmlld2VyLmdldENvbnRyb2woKSk7CisJCXZpZXdlci5nZXRDb250cm9sKCkuc2V0TWVudShtZW51KTsKKwkJZ2V0U2l0ZSgpLnJlZ2lzdGVyQ29udGV4dE1lbnUoY29udGV4dE1lbnUsIG5ldyBVbndyYXBwaW5nU2VsZWN0aW9uUHJvdmlkZXIodmlld2VyKSk7CisKKwkJaW50IGRuZE9wZXJhdGlvbnMgPSBETkQuRFJPUF9DT1BZIHwgRE5ELkRST1BfTU9WRSB8IERORC5EUk9QX0xJTks7CisJCVRyYW5zZmVyW10gdHJhbnNmZXJzID0gbmV3IFRyYW5zZmVyW10geyBMb2NhbFRyYW5zZmVyLmdldEluc3RhbmNlKCkgfTsKKwkJdmlld2VyLmFkZERyYWdTdXBwb3J0KGRuZE9wZXJhdGlvbnMsIHRyYW5zZmVycywgbmV3IFZpZXdlckRyYWdBZGFwdGVyKHZpZXdlcikpOworCQl2aWV3ZXIuYWRkRHJvcFN1cHBvcnQoZG5kT3BlcmF0aW9ucywgdHJhbnNmZXJzLCBuZXcgRWRpdGluZ0RvbWFpblZpZXdlckRyb3BBZGFwdGVyKGVkaXRpbmdEb21haW4sIHZpZXdlcikpOworCX0KKworCS8qKgorCSAqIFRoaXMgaXMgdGhlIG1ldGhvZCBjYWxsZWQgdG8gbG9hZCBhIHJlc291cmNlIGludG8gdGhlIGVkaXRpbmcgZG9tYWluJ3MgcmVzb3VyY2Ugc2V0IGJhc2VkIG9uIHRoZSBlZGl0b3IncyBpbnB1dC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBjcmVhdGVNb2RlbCgpIHsKKwkJVVJJIHJlc291cmNlVVJJID0gRWRpdFVJVXRpbC5nZXRVUkkoZ2V0RWRpdG9ySW5wdXQoKSk7CisJCUV4Y2VwdGlvbiBleGNlcHRpb24gPSBudWxsOworCQlSZXNvdXJjZSByZXNvdXJjZSA9IG51bGw7CisJCXRyeSB7CisJCQkvLyBMb2FkIHRoZSByZXNvdXJjZSB0aHJvdWdoIHRoZSBlZGl0aW5nIGRvbWFpbi4KKwkJCS8vCisJCQlyZXNvdXJjZSA9IGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKS5nZXRSZXNvdXJjZShyZXNvdXJjZVVSSSwgdHJ1ZSk7CisJCX0KKwkJY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CisJCQlleGNlcHRpb24gPSBlOworCQkJcmVzb3VyY2UgPSBlZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkuZ2V0UmVzb3VyY2UocmVzb3VyY2VVUkksIGZhbHNlKTsKKwkJfQorCisJCURpYWdub3N0aWMgZGlhZ25vc3RpYyA9IGFuYWx5emVSZXNvdXJjZVByb2JsZW1zKHJlc291cmNlLCBleGNlcHRpb24pOworCQlpZiAoZGlhZ25vc3RpYy5nZXRTZXZlcml0eSgpICE9IERpYWdub3N0aWMuT0spIHsKKwkJCXJlc291cmNlVG9EaWFnbm9zdGljTWFwLnB1dChyZXNvdXJjZSwgIGFuYWx5emVSZXNvdXJjZVByb2JsZW1zKHJlc291cmNlLCBleGNlcHRpb24pKTsKKwkJfQorCQllZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkuZUFkYXB0ZXJzKCkuYWRkKHByb2JsZW1JbmRpY2F0aW9uQWRhcHRlcik7CisJfQorCisJLyoqCisJICogUmV0dXJucyBhIGRpYWdub3N0aWMgZGVzY3JpYmluZyB0aGUgZXJyb3JzIGFuZCB3YXJuaW5ncyBsaXN0ZWQgaW4gdGhlIHJlc291cmNlCisJICogYW5kIHRoZSBzcGVjaWZpZWQgZXhjZXB0aW9uIChpZiBhbnkpLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogQHBhcmFtIHJlc291cmNlIAorCSAqIEBwYXJhbSBleGNlcHRpb24gCisJICogQHJldHVybiAKKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIERpYWdub3N0aWMgYW5hbHl6ZVJlc291cmNlUHJvYmxlbXMoUmVzb3VyY2UgcmVzb3VyY2UsIEV4Y2VwdGlvbiBleGNlcHRpb24pIHsKKwkJaWYgKCFyZXNvdXJjZS5nZXRFcnJvcnMoKS5pc0VtcHR5KCkgfHwgIXJlc291cmNlLmdldFdhcm5pbmdzKCkuaXNFbXB0eSgpKSB7CisJCQlCYXNpY0RpYWdub3N0aWMgYmFzaWNEaWFnbm9zdGljID0KKwkJCQluZXcgQmFzaWNEaWFnbm9zdGljCisJCQkJCShEaWFnbm9zdGljLkVSUk9SLAorCQkJCQkgIm9yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy5leGFtcGxlLmVkaXRvciIsIC8vJE5PTi1OTFMtMSQKKwkJCQkJIDAsCisJCQkJCSBnZXRTdHJpbmcoIl9VSV9DcmVhdGVNb2RlbEVycm9yX21lc3NhZ2UiLCByZXNvdXJjZS5nZXRVUkkoKSksIC8vJE5PTi1OTFMtMSQKKwkJCQkJIG5ldyBPYmplY3QgW10geyBleGNlcHRpb24gPT0gbnVsbCA/IChPYmplY3QpcmVzb3VyY2UgOiBleGNlcHRpb24gfSk7CisJCQliYXNpY0RpYWdub3N0aWMubWVyZ2UoRWNvcmVVdGlsLmNvbXB1dGVEaWFnbm9zdGljKHJlc291cmNlLCB0cnVlKSk7CisJCQlyZXR1cm4gYmFzaWNEaWFnbm9zdGljOworCQl9CisJCWVsc2UgaWYgKGV4Y2VwdGlvbiAhPSBudWxsKSB7CisJCQlyZXR1cm4KKwkJCQluZXcgQmFzaWNEaWFnbm9zdGljCisJCQkJCShEaWFnbm9zdGljLkVSUk9SLAorCQkJCQkgIm9yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy5leGFtcGxlLmVkaXRvciIsIC8vJE5PTi1OTFMtMSQKKwkJCQkJIDAsCisJCQkJCSBnZXRTdHJpbmcoIl9VSV9DcmVhdGVNb2RlbEVycm9yX21lc3NhZ2UiLCByZXNvdXJjZS5nZXRVUkkoKSksIC8vJE5PTi1OTFMtMSQKKwkJCQkJIG5ldyBPYmplY3RbXSB7IGV4Y2VwdGlvbiB9KTsKKwkJfQorCQllbHNlIHsKKwkJCXJldHVybiBEaWFnbm9zdGljLk9LX0lOU1RBTkNFOworCQl9CisJfQorCisJLyoqCisJICogVGhpcyBpcyB0aGUgbWV0aG9kIHVzZWQgYnkgdGhlIGZyYW1ld29yayB0byBpbnN0YWxsIHlvdXIgb3duIGNvbnRyb2xzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGNyZWF0ZVBhZ2VzKCkgeworCQkvLyBDcmVhdGVzIHRoZSBtb2RlbCBmcm9tIHRoZSBlZGl0b3IgaW5wdXQKKwkJLy8KKwkJY3JlYXRlTW9kZWwoKTsKKworCQkvLyBPbmx5IGNyZWF0ZXMgdGhlIG90aGVyIHBhZ2VzIGlmIHRoZXJlIGlzIHNvbWV0aGluZyB0aGF0IGNhbiBiZSBlZGl0ZWQKKwkJLy8KKwkJaWYgKCFnZXRFZGl0aW5nRG9tYWluKCkuZ2V0UmVzb3VyY2VTZXQoKS5nZXRSZXNvdXJjZXMoKS5pc0VtcHR5KCkpIHsKKwkJCS8vIENyZWF0ZSBhIHBhZ2UgZm9yIHRoZSBzZWxlY3Rpb24gdHJlZSB2aWV3LgorCQkJLy8KKwkJCVRyZWUgdHJlZSA9IG5ldyBUcmVlKGdldENvbnRhaW5lcigpLCBTV1QuTVVMVEkpOworCQkJc2VsZWN0aW9uVmlld2VyID0gbmV3IFRyZWVWaWV3ZXIodHJlZSk7CisJCQlzZXRDdXJyZW50Vmlld2VyKHNlbGVjdGlvblZpZXdlcik7CisKKwkJCXNlbGVjdGlvblZpZXdlci5zZXRDb250ZW50UHJvdmlkZXIobmV3IEFkYXB0ZXJGYWN0b3J5Q29udGVudFByb3ZpZGVyKGFkYXB0ZXJGYWN0b3J5KSk7CisJCQlzZWxlY3Rpb25WaWV3ZXIuc2V0TGFiZWxQcm92aWRlcihuZXcgQWRhcHRlckZhY3RvcnlMYWJlbFByb3ZpZGVyKGFkYXB0ZXJGYWN0b3J5KSk7CisJCQlzZWxlY3Rpb25WaWV3ZXIuc2V0SW5wdXQoZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpKTsKKwkJCXNlbGVjdGlvblZpZXdlci5zZXRTZWxlY3Rpb24obmV3IFN0cnVjdHVyZWRTZWxlY3Rpb24oZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpLmdldFJlc291cmNlcygpLmdldCgwKSksIHRydWUpOworCisJCQluZXcgQWRhcHRlckZhY3RvcnlUcmVlRWRpdG9yKHNlbGVjdGlvblZpZXdlci5nZXRUcmVlKCksIGFkYXB0ZXJGYWN0b3J5KTsKKworCQkJY3JlYXRlQ29udGV4dE1lbnVGb3Ioc2VsZWN0aW9uVmlld2VyKTsKKwkJCWludCBwYWdlSW5kZXggPSBhZGRQYWdlKHRyZWUpOworCQkJc2V0UGFnZVRleHQocGFnZUluZGV4LCBnZXRTdHJpbmcoIl9VSV9TZWxlY3Rpb25QYWdlX2xhYmVsIikpOyAvLyROT04tTkxTLTEkCisKKwkJCWdldFNpdGUoKS5nZXRTaGVsbCgpLmdldERpc3BsYXkoKS5hc3luY0V4ZWMKKwkJCQkobmV3IFJ1bm5hYmxlKCkgeworCQkJCQkgcHVibGljIHZvaWQgcnVuKCkgeworCQkJCQkJIHNldEFjdGl2ZVBhZ2UoMCk7CisJCQkJCSB9CisJCQkJIH0pOworCQl9CisKKwkJLy8gRW5zdXJlcyB0aGF0IHRoaXMgZWRpdG9yIHdpbGwgb25seSBkaXNwbGF5IHRoZSBwYWdlJ3MgdGFiCisJCS8vIGFyZWEgaWYgdGhlcmUgYXJlIG1vcmUgdGhhbiBvbmUgcGFnZQorCQkvLworCQlnZXRDb250YWluZXIoKS5hZGRDb250cm9sTGlzdGVuZXIKKwkJCShuZXcgQ29udHJvbEFkYXB0ZXIoKSB7CisJCQkJYm9vbGVhbiBndWFyZCA9IGZhbHNlOworCQkJCUBPdmVycmlkZQorCQkJCXB1YmxpYyB2b2lkIGNvbnRyb2xSZXNpemVkKENvbnRyb2xFdmVudCBldmVudCkgeworCQkJCQlpZiAoIWd1YXJkKSB7CisJCQkJCQlndWFyZCA9IHRydWU7CisJCQkJCQloaWRlVGFicygpOworCQkJCQkJZ3VhcmQgPSBmYWxzZTsKKwkJCQkJfQorCQkJCX0KKwkJCSB9KTsKKworCQlnZXRTaXRlKCkuZ2V0U2hlbGwoKS5nZXREaXNwbGF5KCkuYXN5bmNFeGVjCisJCQkobmV3IFJ1bm5hYmxlKCkgeworCQkJCSBwdWJsaWMgdm9pZCBydW4oKSB7CisJCQkJCSB1cGRhdGVQcm9ibGVtSW5kaWNhdGlvbigpOworCQkJCSB9CisJCQkgfSk7CisJfQorCisJLyoqCisJICogSWYgdGhlcmUgaXMganVzdCBvbmUgcGFnZSBpbiB0aGUgbXVsdGktcGFnZSBlZGl0b3IgcGFydCwKKwkgKiB0aGlzIGhpZGVzIHRoZSBzaW5nbGUgdGFiIGF0IHRoZSBib3R0b20uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgaGlkZVRhYnMoKSB7CisJCWlmIChnZXRQYWdlQ291bnQoKSA8PSAxKSB7CisJCQlzZXRQYWdlVGV4dCgwLCAiIik7IC8vJE5PTi1OTFMtMSQKKwkJCWlmIChnZXRDb250YWluZXIoKSBpbnN0YW5jZW9mIENUYWJGb2xkZXIpIHsKKwkJCQkoKENUYWJGb2xkZXIpZ2V0Q29udGFpbmVyKCkpLnNldFRhYkhlaWdodCgxKTsKKwkJCQlQb2ludCBwb2ludCA9IGdldENvbnRhaW5lcigpLmdldFNpemUoKTsKKwkJCQlnZXRDb250YWluZXIoKS5zZXRTaXplKHBvaW50LngsIHBvaW50LnkgKyA2KTsKKwkJCX0KKwkJfQorCX0KKworCS8qKgorCSAqIElmIHRoZXJlIGlzIG1vcmUgdGhhbiBvbmUgcGFnZSBpbiB0aGUgbXVsdGktcGFnZSBlZGl0b3IgcGFydCwKKwkgKiB0aGlzIHNob3dzIHRoZSB0YWJzIGF0IHRoZSBib3R0b20uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgc2hvd1RhYnMoKSB7CisJCWlmIChnZXRQYWdlQ291bnQoKSA+IDEpIHsKKwkJCXNldFBhZ2VUZXh0KDAsIGdldFN0cmluZygiX1VJX1NlbGVjdGlvblBhZ2VfbGFiZWwiKSk7IC8vJE5PTi1OTFMtMSQKKwkJCWlmIChnZXRDb250YWluZXIoKSBpbnN0YW5jZW9mIENUYWJGb2xkZXIpIHsKKwkJCQkoKENUYWJGb2xkZXIpZ2V0Q29udGFpbmVyKCkpLnNldFRhYkhlaWdodChTV1QuREVGQVVMVCk7CisJCQkJUG9pbnQgcG9pbnQgPSBnZXRDb250YWluZXIoKS5nZXRTaXplKCk7CisJCQkJZ2V0Q29udGFpbmVyKCkuc2V0U2l6ZShwb2ludC54LCBwb2ludC55IC0gNik7CisJCQl9CisJCX0KKwl9CisKKwkvKioKKwkgKiBUaGlzIGlzIHVzZWQgdG8gdHJhY2sgdGhlIGFjdGl2ZSB2aWV3ZXIuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgcGFnZUNoYW5nZShpbnQgcGFnZUluZGV4KSB7CisJCXN1cGVyLnBhZ2VDaGFuZ2UocGFnZUluZGV4KTsKKworCQlpZiAoY29udGVudE91dGxpbmVQYWdlICE9IG51bGwpIHsKKwkJCWhhbmRsZUNvbnRlbnRPdXRsaW5lU2VsZWN0aW9uKGNvbnRlbnRPdXRsaW5lUGFnZS5nZXRTZWxlY3Rpb24oKSk7CisJCX0KKwl9CisKKwkvKioKKwkgKiBUaGlzIGlzIGhvdyB0aGUgZnJhbWV3b3JrIGRldGVybWluZXMgd2hpY2ggaW50ZXJmYWNlcyB3ZSBpbXBsZW1lbnQuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQFN1cHByZXNzV2FybmluZ3MoInVuY2hlY2tlZCIpCisJQE92ZXJyaWRlCisJcHVibGljIE9iamVjdCBnZXRBZGFwdGVyKENsYXNzIGtleSkgeworCQlpZiAoa2V5LmVxdWFscyhJQ29udGVudE91dGxpbmVQYWdlLmNsYXNzKSkgeworCQkJcmV0dXJuIHNob3dPdXRsaW5lVmlldygpID8gZ2V0Q29udGVudE91dGxpbmVQYWdlKCkgOiBudWxsOworCQl9CisJCWVsc2UgaWYgKGtleS5lcXVhbHMoSVByb3BlcnR5U2hlZXRQYWdlLmNsYXNzKSkgeworCQkJcmV0dXJuIGdldFByb3BlcnR5U2hlZXRQYWdlKCk7CisJCX0KKwkJZWxzZSBpZiAoa2V5LmVxdWFscyhJR290b01hcmtlci5jbGFzcykpIHsKKwkJCXJldHVybiB0aGlzOworCQl9CisJCWVsc2UgeworCQkJcmV0dXJuIHN1cGVyLmdldEFkYXB0ZXIoa2V5KTsKKwkJfQorCX0KKworCS8qKgorCSAqIFRoaXMgYWNjZXNzZXMgYSBjYWNoZWQgdmVyc2lvbiBvZiB0aGUgY29udGVudCBvdXRsaW5lci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBJQ29udGVudE91dGxpbmVQYWdlIGdldENvbnRlbnRPdXRsaW5lUGFnZSgpIHsKKwkJaWYgKGNvbnRlbnRPdXRsaW5lUGFnZSA9PSBudWxsKSB7CisJCQkvLyBUaGUgY29udGVudCBvdXRsaW5lIGlzIGp1c3QgYSB0cmVlLgorCQkJLy8KKwkJCWNsYXNzIE15Q29udGVudE91dGxpbmVQYWdlIGV4dGVuZHMgQ29udGVudE91dGxpbmVQYWdlIHsKKwkJCQlAT3ZlcnJpZGUKKwkJCQlwdWJsaWMgdm9pZCBjcmVhdGVDb250cm9sKENvbXBvc2l0ZSBwYXJlbnQpIHsKKwkJCQkJc3VwZXIuY3JlYXRlQ29udHJvbChwYXJlbnQpOworCQkJCQljb250ZW50T3V0bGluZVZpZXdlciA9IGdldFRyZWVWaWV3ZXIoKTsKKwkJCQkJY29udGVudE91dGxpbmVWaWV3ZXIuYWRkU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyKHRoaXMpOworCisJCQkJCS8vIFNldCB1cCB0aGUgdHJlZSB2aWV3ZXIuCisJCQkJCS8vCisJCQkJCWNvbnRlbnRPdXRsaW5lVmlld2VyLnNldENvbnRlbnRQcm92aWRlcihuZXcgQWRhcHRlckZhY3RvcnlDb250ZW50UHJvdmlkZXIoYWRhcHRlckZhY3RvcnkpKTsKKwkJCQkJY29udGVudE91dGxpbmVWaWV3ZXIuc2V0TGFiZWxQcm92aWRlcihuZXcgQWRhcHRlckZhY3RvcnlMYWJlbFByb3ZpZGVyKGFkYXB0ZXJGYWN0b3J5KSk7CisJCQkJCWNvbnRlbnRPdXRsaW5lVmlld2VyLnNldElucHV0KGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKSk7CisKKwkJCQkJLy8gTWFrZSBzdXJlIG91ciBwb3B1cHMgd29yay4KKwkJCQkJLy8KKwkJCQkJY3JlYXRlQ29udGV4dE1lbnVGb3IoY29udGVudE91dGxpbmVWaWV3ZXIpOworCisJCQkJCWlmICghZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpLmdldFJlc291cmNlcygpLmlzRW1wdHkoKSkgeworCQkJCQkgIC8vIFNlbGVjdCB0aGUgcm9vdCBvYmplY3QgaW4gdGhlIHZpZXcuCisJCQkJCSAgLy8KKwkJCQkJICBjb250ZW50T3V0bGluZVZpZXdlci5zZXRTZWxlY3Rpb24obmV3IFN0cnVjdHVyZWRTZWxlY3Rpb24oZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpLmdldFJlc291cmNlcygpLmdldCgwKSksIHRydWUpOworCQkJCQl9CisJCQkJfQorCisJCQkJQE92ZXJyaWRlCisJCQkJcHVibGljIHZvaWQgbWFrZUNvbnRyaWJ1dGlvbnMoSU1lbnVNYW5hZ2VyIG1lbnVNYW5hZ2VyLCBJVG9vbEJhck1hbmFnZXIgdG9vbEJhck1hbmFnZXIsIElTdGF0dXNMaW5lTWFuYWdlciBzdGF0dXNMaW5lTWFuYWdlcikgeworCQkJCQlzdXBlci5tYWtlQ29udHJpYnV0aW9ucyhtZW51TWFuYWdlciwgdG9vbEJhck1hbmFnZXIsIHN0YXR1c0xpbmVNYW5hZ2VyKTsKKwkJCQkJY29udGVudE91dGxpbmVTdGF0dXNMaW5lTWFuYWdlciA9IHN0YXR1c0xpbmVNYW5hZ2VyOworCQkJCX0KKworCQkJCUBPdmVycmlkZQorCQkJCXB1YmxpYyB2b2lkIHNldEFjdGlvbkJhcnMoSUFjdGlvbkJhcnMgYWN0aW9uQmFycykgeworCQkJCQlzdXBlci5zZXRBY3Rpb25CYXJzKGFjdGlvbkJhcnMpOworCQkJCQlnZXRBY3Rpb25CYXJDb250cmlidXRvcigpLnNoYXJlR2xvYmFsQWN0aW9ucyh0aGlzLCBhY3Rpb25CYXJzKTsKKwkJCQl9CisJCQl9CisKKwkJCWNvbnRlbnRPdXRsaW5lUGFnZSA9IG5ldyBNeUNvbnRlbnRPdXRsaW5lUGFnZSgpOworCisJCQkvLyBMaXN0ZW4gdG8gc2VsZWN0aW9uIHNvIHRoYXQgd2UgY2FuIGhhbmRsZSBpdCBpcyBhIHNwZWNpYWwgd2F5LgorCQkJLy8KKwkJCWNvbnRlbnRPdXRsaW5lUGFnZS5hZGRTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIKKwkJCQkobmV3IElTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIoKSB7CisJCQkJCSAvLyBUaGlzIGVuc3VyZXMgdGhhdCB3ZSBoYW5kbGUgc2VsZWN0aW9ucyBjb3JyZWN0bHkuCisJCQkJCSAvLworCQkJCQkgcHVibGljIHZvaWQgc2VsZWN0aW9uQ2hhbmdlZChTZWxlY3Rpb25DaGFuZ2VkRXZlbnQgZXZlbnQpIHsKKwkJCQkJCSBoYW5kbGVDb250ZW50T3V0bGluZVNlbGVjdGlvbihldmVudC5nZXRTZWxlY3Rpb24oKSk7CisJCQkJCSB9CisJCQkJIH0pOworCQl9CisKKwkJcmV0dXJuIGNvbnRlbnRPdXRsaW5lUGFnZTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFjY2Vzc2VzIGEgY2FjaGVkIHZlcnNpb24gb2YgdGhlIHByb3BlcnR5IHNoZWV0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogQHJldHVybiAKKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIElQcm9wZXJ0eVNoZWV0UGFnZSBnZXRQcm9wZXJ0eVNoZWV0UGFnZSgpIHsKKwkJaWYgKHByb3BlcnR5U2hlZXRQYWdlID09IG51bGwpIHsKKwkJCXByb3BlcnR5U2hlZXRQYWdlID0KKwkJCQluZXcgRXh0ZW5kZWRQcm9wZXJ0eVNoZWV0UGFnZShlZGl0aW5nRG9tYWluKSB7CisJCQkJCUBPdmVycmlkZQorCQkJCQlwdWJsaWMgdm9pZCBzZXRTZWxlY3Rpb25Ub1ZpZXdlcihMaXN0PD8+IHNlbGVjdGlvbikgeworCQkJCQkJRXhhbXBsZUVkaXRvci50aGlzLnNldFNlbGVjdGlvblRvVmlld2VyKHNlbGVjdGlvbik7CisJCQkJCQlFeGFtcGxlRWRpdG9yLnRoaXMuc2V0Rm9jdXMoKTsKKwkJCQkJfQorCisJCQkJCUBPdmVycmlkZQorCQkJCQlwdWJsaWMgdm9pZCBzZXRBY3Rpb25CYXJzKElBY3Rpb25CYXJzIGFjdGlvbkJhcnMpIHsKKwkJCQkJCXN1cGVyLnNldEFjdGlvbkJhcnMoYWN0aW9uQmFycyk7CisJCQkJCQlnZXRBY3Rpb25CYXJDb250cmlidXRvcigpLnNoYXJlR2xvYmFsQWN0aW9ucyh0aGlzLCBhY3Rpb25CYXJzKTsKKwkJCQkJfQorCQkJCX07CisJCQlwcm9wZXJ0eVNoZWV0UGFnZS5zZXRQcm9wZXJ0eVNvdXJjZVByb3ZpZGVyKG5ldyBBZGFwdGVyRmFjdG9yeUNvbnRlbnRQcm92aWRlcihhZGFwdGVyRmFjdG9yeSkpOworCQl9CisKKwkJcmV0dXJuIHByb3BlcnR5U2hlZXRQYWdlOworCX0KKworCS8qKgorCSAqIFRoaXMgZGVhbHMgd2l0aCBob3cgd2Ugd2FudCBzZWxlY3Rpb24gaW4gdGhlIG91dGxpbmVyIHRvIGFmZmVjdCB0aGUgb3RoZXIgdmlld3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gc2VsZWN0aW9uIAorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBoYW5kbGVDb250ZW50T3V0bGluZVNlbGVjdGlvbihJU2VsZWN0aW9uIHNlbGVjdGlvbikgeworCQlpZiAoc2VsZWN0aW9uVmlld2VyICE9IG51bGwgJiYgIXNlbGVjdGlvbi5pc0VtcHR5KCkgJiYgc2VsZWN0aW9uIGluc3RhbmNlb2YgSVN0cnVjdHVyZWRTZWxlY3Rpb24pIHsKKwkJCUl0ZXJhdG9yPD8+IHNlbGVjdGVkRWxlbWVudHMgPSAoKElTdHJ1Y3R1cmVkU2VsZWN0aW9uKXNlbGVjdGlvbikuaXRlcmF0b3IoKTsKKwkJCWlmIChzZWxlY3RlZEVsZW1lbnRzLmhhc05leHQoKSkgeworCQkJCS8vIEdldCB0aGUgZmlyc3Qgc2VsZWN0ZWQgZWxlbWVudC4KKwkJCQkvLworCQkJCU9iamVjdCBzZWxlY3RlZEVsZW1lbnQgPSBzZWxlY3RlZEVsZW1lbnRzLm5leHQoKTsKKworCQkJCUFycmF5TGlzdDxPYmplY3Q+IHNlbGVjdGlvbkxpc3QgPSBuZXcgQXJyYXlMaXN0PE9iamVjdD4oKTsKKwkJCQlzZWxlY3Rpb25MaXN0LmFkZChzZWxlY3RlZEVsZW1lbnQpOworCQkJCXdoaWxlIChzZWxlY3RlZEVsZW1lbnRzLmhhc05leHQoKSkgeworCQkJCQlzZWxlY3Rpb25MaXN0LmFkZChzZWxlY3RlZEVsZW1lbnRzLm5leHQoKSk7CisJCQkJfQorCisJCQkJLy8gU2V0IHRoZSBzZWxlY3Rpb24gdG8gdGhlIHdpZGdldC4KKwkJCQkvLworCQkJCXNlbGVjdGlvblZpZXdlci5zZXRTZWxlY3Rpb24obmV3IFN0cnVjdHVyZWRTZWxlY3Rpb24oc2VsZWN0aW9uTGlzdCkpOworCQkJfQorCQl9CisJfQorCisJLyoqCisJICogVGhpcyBpcyBmb3IgaW1wbGVtZW50aW5nIHtAbGluayBJRWRpdG9yUGFydH0gYW5kIHNpbXBseSB0ZXN0cyB0aGUgY29tbWFuZCBzdGFjay4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgYm9vbGVhbiBpc0RpcnR5KCkgeworCQlyZXR1cm4gKChCYXNpY0NvbW1hbmRTdGFjayllZGl0aW5nRG9tYWluLmdldENvbW1hbmRTdGFjaygpKS5pc1NhdmVOZWVkZWQoKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGlzIGZvciBpbXBsZW1lbnRpbmcge0BsaW5rIElFZGl0b3JQYXJ0fSBhbmQgc2ltcGx5IHNhdmVzIHRoZSBtb2RlbCBmaWxlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGRvU2F2ZShJUHJvZ3Jlc3NNb25pdG9yIHByb2dyZXNzTW9uaXRvcikgeworCQkvLyBTYXZlIG9ubHkgcmVzb3VyY2VzIHRoYXQgaGF2ZSBhY3R1YWxseSBjaGFuZ2VkLgorCQkvLworCQlmaW5hbCBNYXA8T2JqZWN0LCBPYmplY3Q+IHNhdmVPcHRpb25zID0gbmV3IEhhc2hNYXA8T2JqZWN0LCBPYmplY3Q+KCk7CisJCXNhdmVPcHRpb25zLnB1dChSZXNvdXJjZS5PUFRJT05fU0FWRV9PTkxZX0lGX0NIQU5HRUQsIFJlc291cmNlLk9QVElPTl9TQVZFX09OTFlfSUZfQ0hBTkdFRF9NRU1PUllfQlVGRkVSKTsKKworCQkvLyBEbyB0aGUgd29yayB3aXRoaW4gYW4gb3BlcmF0aW9uIGJlY2F1c2UgdGhpcyBpcyBhIGxvbmcgcnVubmluZyBhY3Rpdml0eSB0aGF0IG1vZGlmaWVzIHRoZSB3b3JrYmVuY2guCisJCS8vCisJCVdvcmtzcGFjZU1vZGlmeU9wZXJhdGlvbiBvcGVyYXRpb24gPQorCQkJbmV3IFdvcmtzcGFjZU1vZGlmeU9wZXJhdGlvbigpIHsKKwkJCQkvLyBUaGlzIGlzIHRoZSBtZXRob2QgdGhhdCBnZXRzIGludm9rZWQgd2hlbiB0aGUgb3BlcmF0aW9uIHJ1bnMuCisJCQkJLy8KKwkJCQlAT3ZlcnJpZGUKKwkJCQlwdWJsaWMgdm9pZCBleGVjdXRlKElQcm9ncmVzc01vbml0b3IgbW9uaXRvcikgeworCQkJCQkvLyBTYXZlIHRoZSByZXNvdXJjZXMgdG8gdGhlIGZpbGUgc3lzdGVtLgorCQkJCQkvLworCQkJCQlib29sZWFuIGZpcnN0ID0gdHJ1ZTsKKwkJCQkJZm9yIChSZXNvdXJjZSByZXNvdXJjZSA6IGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKS5nZXRSZXNvdXJjZXMoKSkgeworCQkJCQkJaWYgKChmaXJzdCB8fCAhcmVzb3VyY2UuZ2V0Q29udGVudHMoKS5pc0VtcHR5KCkgfHwgaXNQZXJzaXN0ZWQocmVzb3VyY2UpKSAmJiAhZWRpdGluZ0RvbWFpbi5pc1JlYWRPbmx5KHJlc291cmNlKSkgeworCQkJCQkJCXRyeSB7CisJCQkJCQkJCWxvbmcgdGltZVN0YW1wID0gcmVzb3VyY2UuZ2V0VGltZVN0YW1wKCk7CisJCQkJCQkJCXJlc291cmNlLnNhdmUoc2F2ZU9wdGlvbnMpOworCQkJCQkJCQlpZiAocmVzb3VyY2UuZ2V0VGltZVN0YW1wKCkgIT0gdGltZVN0YW1wKSB7CisJCQkJCQkJCQlzYXZlZFJlc291cmNlcy5hZGQocmVzb3VyY2UpOworCQkJCQkJCQl9CisJCQkJCQkJfQorCQkJCQkJCWNhdGNoIChFeGNlcHRpb24gZXhjZXB0aW9uKSB7CisJCQkJCQkJCXJlc291cmNlVG9EaWFnbm9zdGljTWFwLnB1dChyZXNvdXJjZSwgYW5hbHl6ZVJlc291cmNlUHJvYmxlbXMocmVzb3VyY2UsIGV4Y2VwdGlvbikpOworCQkJCQkJCX0KKwkJCQkJCQlmaXJzdCA9IGZhbHNlOworCQkJCQkJfQorCQkJCQl9CisJCQkJfQorCQkJfTsKKworCQl1cGRhdGVQcm9ibGVtSW5kaWNhdGlvbiA9IGZhbHNlOworCQl0cnkgeworCQkJLy8gVGhpcyBydW5zIHRoZSBvcHRpb25zLCBhbmQgc2hvd3MgcHJvZ3Jlc3MuCisJCQkvLworCQkJbmV3IFByb2dyZXNzTW9uaXRvckRpYWxvZyhnZXRTaXRlKCkuZ2V0U2hlbGwoKSkucnVuKHRydWUsIGZhbHNlLCBvcGVyYXRpb24pOworCisJCQkvLyBSZWZyZXNoIHRoZSBuZWNlc3Nhcnkgc3RhdGUuCisJCQkvLworCQkJKChCYXNpY0NvbW1hbmRTdGFjayllZGl0aW5nRG9tYWluLmdldENvbW1hbmRTdGFjaygpKS5zYXZlSXNEb25lKCk7CisJCQlmaXJlUHJvcGVydHlDaGFuZ2UoSUVkaXRvclBhcnQuUFJPUF9ESVJUWSk7CisJCX0KKwkJY2F0Y2ggKEV4Y2VwdGlvbiBleGNlcHRpb24pIHsKKwkJCS8vIFNvbWV0aGluZyB3ZW50IHdyb25nIHRoYXQgc2hvdWxkbid0LgorCQkJLy8KKwkJCUV4YW1wbGVFZGl0b3JQbHVnaW4uSU5TVEFOQ0UubG9nKGV4Y2VwdGlvbik7CisJCX0KKwkJdXBkYXRlUHJvYmxlbUluZGljYXRpb24gPSB0cnVlOworCQl1cGRhdGVQcm9ibGVtSW5kaWNhdGlvbigpOworCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyB3aGV0aGVyIHNvbWV0aGluZyBoYXMgYmVlbiBwZXJzaXN0ZWQgdG8gdGhlIFVSSSBvZiB0aGUgc3BlY2lmaWVkIHJlc291cmNlLgorCSAqIFRoZSBpbXBsZW1lbnRhdGlvbiB1c2VzIHRoZSBVUkkgY29udmVydGVyIGZyb20gdGhlIGVkaXRvcidzIHJlc291cmNlIHNldCB0byB0cnkgdG8gb3BlbiBhbiBpbnB1dCBzdHJlYW0uIAorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBib29sZWFuIGlzUGVyc2lzdGVkKFJlc291cmNlIHJlc291cmNlKSB7CisJCWJvb2xlYW4gcmVzdWx0ID0gZmFsc2U7CisJCXRyeSB7CisJCQlJbnB1dFN0cmVhbSBzdHJlYW0gPSBlZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkuZ2V0VVJJQ29udmVydGVyKCkuY3JlYXRlSW5wdXRTdHJlYW0ocmVzb3VyY2UuZ2V0VVJJKCkpOworCQkJaWYgKHN0cmVhbSAhPSBudWxsKSB7CisJCQkJcmVzdWx0ID0gdHJ1ZTsKKwkJCQlzdHJlYW0uY2xvc2UoKTsKKwkJCX0KKwkJfQorCQljYXRjaCAoSU9FeGNlcHRpb24gZSkgeworCQkJLy8gSWdub3JlCisJCX0KKwkJcmV0dXJuIHJlc3VsdDsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFsd2F5cyByZXR1cm5zIHRydWUgYmVjYXVzZSBpdCBpcyBub3QgY3VycmVudGx5IHN1cHBvcnRlZC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgYm9vbGVhbiBpc1NhdmVBc0FsbG93ZWQoKSB7CisJCXJldHVybiB0cnVlOworCX0KKworCS8qKgorCSAqIFRoaXMgYWxzbyBjaGFuZ2VzIHRoZSBlZGl0b3IncyBpbnB1dC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBkb1NhdmVBcygpIHsKKwkJU2F2ZUFzRGlhbG9nIHNhdmVBc0RpYWxvZyA9IG5ldyBTYXZlQXNEaWFsb2coZ2V0U2l0ZSgpLmdldFNoZWxsKCkpOworCQlzYXZlQXNEaWFsb2cub3BlbigpOworCQlJUGF0aCBwYXRoID0gc2F2ZUFzRGlhbG9nLmdldFJlc3VsdCgpOworCQlpZiAocGF0aCAhPSBudWxsKSB7CisJCQlJRmlsZSBmaWxlID0gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmdldFJvb3QoKS5nZXRGaWxlKHBhdGgpOworCQkJaWYgKGZpbGUgIT0gbnVsbCkgeworCQkJCWRvU2F2ZUFzKFVSSS5jcmVhdGVQbGF0Zm9ybVJlc291cmNlVVJJKGZpbGUuZ2V0RnVsbFBhdGgoKS50b1N0cmluZygpLCB0cnVlKSwgbmV3IEZpbGVFZGl0b3JJbnB1dChmaWxlKSk7CisJCQl9CisJCX0KKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBkb1NhdmVBcyhVUkkgdXJpLCBJRWRpdG9ySW5wdXQgZWRpdG9ySW5wdXQpIHsKKwkJKGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKS5nZXRSZXNvdXJjZXMoKS5nZXQoMCkpLnNldFVSSSh1cmkpOworCQlzZXRJbnB1dFdpdGhOb3RpZnkoZWRpdG9ySW5wdXQpOworCQlzZXRQYXJ0TmFtZShlZGl0b3JJbnB1dC5nZXROYW1lKCkpOworCQlJUHJvZ3Jlc3NNb25pdG9yIHByb2dyZXNzTW9uaXRvciA9CisJCQlnZXRBY3Rpb25CYXJzKCkuZ2V0U3RhdHVzTGluZU1hbmFnZXIoKSAhPSBudWxsID8KKwkJCQlnZXRBY3Rpb25CYXJzKCkuZ2V0U3RhdHVzTGluZU1hbmFnZXIoKS5nZXRQcm9ncmVzc01vbml0b3IoKSA6CisJCQkJbmV3IE51bGxQcm9ncmVzc01vbml0b3IoKTsKKwkJZG9TYXZlKHByb2dyZXNzTW9uaXRvcik7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gbWFya2VyIAorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBnb3RvTWFya2VyKElNYXJrZXIgbWFya2VyKSB7CisJCXRyeSB7CisJCQlpZiAobWFya2VyLmdldFR5cGUoKS5lcXVhbHMoRVZhbGlkYXRvci5NQVJLRVIpKSB7CisJCQkJU3RyaW5nIHVyaUF0dHJpYnV0ZSA9IG1hcmtlci5nZXRBdHRyaWJ1dGUoRVZhbGlkYXRvci5VUklfQVRUUklCVVRFLCBudWxsKTsKKwkJCQlpZiAodXJpQXR0cmlidXRlICE9IG51bGwpIHsKKwkJCQkJVVJJIHVyaSA9IFVSSS5jcmVhdGVVUkkodXJpQXR0cmlidXRlKTsKKwkJCQkJRU9iamVjdCBlT2JqZWN0ID0gZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpLmdldEVPYmplY3QodXJpLCB0cnVlKTsKKwkJCQkJaWYgKGVPYmplY3QgIT0gbnVsbCkgeworCQkJCQkgIHNldFNlbGVjdGlvblRvVmlld2VyKENvbGxlY3Rpb25zLnNpbmdsZXRvbihlZGl0aW5nRG9tYWluLmdldFdyYXBwZXIoZU9iamVjdCkpKTsKKwkJCQkJfQorCQkJCX0KKwkJCX0KKwkJfQorCQljYXRjaCAoQ29yZUV4Y2VwdGlvbiBleGNlcHRpb24pIHsKKwkJCUV4YW1wbGVFZGl0b3JQbHVnaW4uSU5TVEFOQ0UubG9nKGV4Y2VwdGlvbik7CisJCX0KKwl9CisKKwkvKioKKwkgKiBUaGlzIGlzIGNhbGxlZCBkdXJpbmcgc3RhcnR1cC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBpbml0KElFZGl0b3JTaXRlIHNpdGUsIElFZGl0b3JJbnB1dCBlZGl0b3JJbnB1dCkgeworCQlzZXRTaXRlKHNpdGUpOworCQlzZXRJbnB1dFdpdGhOb3RpZnkoZWRpdG9ySW5wdXQpOworCQlzZXRQYXJ0TmFtZShlZGl0b3JJbnB1dC5nZXROYW1lKCkpOworCQlzaXRlLnNldFNlbGVjdGlvblByb3ZpZGVyKHRoaXMpOworCQlzaXRlLmdldFBhZ2UoKS5hZGRQYXJ0TGlzdGVuZXIocGFydExpc3RlbmVyKTsKKwkJUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmFkZFJlc291cmNlQ2hhbmdlTGlzdGVuZXIocmVzb3VyY2VDaGFuZ2VMaXN0ZW5lciwgSVJlc291cmNlQ2hhbmdlRXZlbnQuUE9TVF9DSEFOR0UpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIHNldEZvY3VzKCkgeworCQlnZXRDb250cm9sKGdldEFjdGl2ZVBhZ2UoKSkuc2V0Rm9jdXMoKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGltcGxlbWVudHMge0BsaW5rIG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvblByb3ZpZGVyfS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSBsaXN0ZW5lciAKKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgYWRkU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyKElTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIgbGlzdGVuZXIpIHsKKwkJc2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVycy5hZGQobGlzdGVuZXIpOworCX0KKworCS8qKgorCSAqIFRoaXMgaW1wbGVtZW50cyB7QGxpbmsgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uUHJvdmlkZXJ9LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogQHBhcmFtIGxpc3RlbmVyIAorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCByZW1vdmVTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIoSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lciBsaXN0ZW5lcikgeworCQlzZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXJzLnJlbW92ZShsaXN0ZW5lcik7CisJfQorCisJLyoqCisJICogVGhpcyBpbXBsZW1lbnRzIHtAbGluayBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb25Qcm92aWRlcn0gdG8gcmV0dXJuIHRoaXMgZWRpdG9yJ3Mgb3ZlcmFsbCBzZWxlY3Rpb24uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBJU2VsZWN0aW9uIGdldFNlbGVjdGlvbigpIHsKKwkJcmV0dXJuIGVkaXRvclNlbGVjdGlvbjsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGltcGxlbWVudHMge0BsaW5rIG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvblByb3ZpZGVyfSB0byBzZXQgdGhpcyBlZGl0b3IncyBvdmVyYWxsIHNlbGVjdGlvbi4KKwkgKiBDYWxsaW5nIHRoaXMgcmVzdWx0IHdpbGwgbm90aWZ5IHRoZSBsaXN0ZW5lcnMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gc2VsZWN0aW9uIAorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPiAKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgc2V0U2VsZWN0aW9uKElTZWxlY3Rpb24gc2VsZWN0aW9uKSB7CisJCWVkaXRvclNlbGVjdGlvbiA9IHNlbGVjdGlvbjsKKworCQlmb3IgKElTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIgbGlzdGVuZXIgOiBzZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXJzKSB7CisJCQlsaXN0ZW5lci5zZWxlY3Rpb25DaGFuZ2VkKG5ldyBTZWxlY3Rpb25DaGFuZ2VkRXZlbnQodGhpcywgc2VsZWN0aW9uKSk7CisJCX0KKwkJc2V0U3RhdHVzTGluZU1hbmFnZXIoc2VsZWN0aW9uKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSBzZWxlY3Rpb24gCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIHNldFN0YXR1c0xpbmVNYW5hZ2VyKElTZWxlY3Rpb24gc2VsZWN0aW9uKSB7CisJCUlTdGF0dXNMaW5lTWFuYWdlciBzdGF0dXNMaW5lTWFuYWdlciA9IGN1cnJlbnRWaWV3ZXIgIT0gbnVsbCAmJiBjdXJyZW50Vmlld2VyID09IGNvbnRlbnRPdXRsaW5lVmlld2VyID8KKwkJCWNvbnRlbnRPdXRsaW5lU3RhdHVzTGluZU1hbmFnZXIgOiBnZXRBY3Rpb25CYXJzKCkuZ2V0U3RhdHVzTGluZU1hbmFnZXIoKTsKKworCQlpZiAoc3RhdHVzTGluZU1hbmFnZXIgIT0gbnVsbCkgeworCQkJaWYgKHNlbGVjdGlvbiBpbnN0YW5jZW9mIElTdHJ1Y3R1cmVkU2VsZWN0aW9uKSB7CisJCQkJQ29sbGVjdGlvbjw/PiBjb2xsZWN0aW9uID0gKChJU3RydWN0dXJlZFNlbGVjdGlvbilzZWxlY3Rpb24pLnRvTGlzdCgpOworCQkJCXN3aXRjaCAoY29sbGVjdGlvbi5zaXplKCkpIHsKKwkJCQkJY2FzZSAwOiB7CisJCQkJCQlzdGF0dXNMaW5lTWFuYWdlci5zZXRNZXNzYWdlKGdldFN0cmluZygiX1VJX05vT2JqZWN0U2VsZWN0ZWQiKSk7IC8vJE5PTi1OTFMtMSQKKwkJCQkJCWJyZWFrOworCQkJCQl9CisJCQkJCWNhc2UgMTogeworCQkJCQkJU3RyaW5nIHRleHQgPSBuZXcgQWRhcHRlckZhY3RvcnlJdGVtRGVsZWdhdG9yKGFkYXB0ZXJGYWN0b3J5KS5nZXRUZXh0KGNvbGxlY3Rpb24uaXRlcmF0b3IoKS5uZXh0KCkpOworCQkJCQkJc3RhdHVzTGluZU1hbmFnZXIuc2V0TWVzc2FnZShnZXRTdHJpbmcoIl9VSV9TaW5nbGVPYmplY3RTZWxlY3RlZCIsIHRleHQpKTsgLy8kTk9OLU5MUy0xJAorCQkJCQkJYnJlYWs7CisJCQkJCX0KKwkJCQkJZGVmYXVsdDogeworCQkJCQkJc3RhdHVzTGluZU1hbmFnZXIuc2V0TWVzc2FnZShnZXRTdHJpbmcoIl9VSV9NdWx0aU9iamVjdFNlbGVjdGVkIiwgSW50ZWdlci50b1N0cmluZyhjb2xsZWN0aW9uLnNpemUoKSkpKTsgLy8kTk9OLU5MUy0xJAorCQkJCQkJYnJlYWs7CisJCQkJCX0KKwkJCQl9CisJCQl9CisJCQllbHNlIHsKKwkJCQlzdGF0dXNMaW5lTWFuYWdlci5zZXRNZXNzYWdlKCIiKTsgLy8kTk9OLU5MUy0xJAorCQkJfQorCQl9CisJfQorCisJLyoqCisJICogVGhpcyBsb29rcyB1cCBhIHN0cmluZyBpbiB0aGUgcGx1Z2luJ3MgcGx1Z2luLnByb3BlcnRpZXMgZmlsZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcml2YXRlIHN0YXRpYyBTdHJpbmcgZ2V0U3RyaW5nKFN0cmluZyBrZXkpIHsKKwkJcmV0dXJuIEV4YW1wbGVFZGl0b3JQbHVnaW4uSU5TVEFOQ0UuZ2V0U3RyaW5nKGtleSk7CisJfQorCisJLyoqCisJICogVGhpcyBsb29rcyB1cCBhIHN0cmluZyBpbiBwbHVnaW4ucHJvcGVydGllcywgbWFraW5nIGEgc3Vic3RpdHV0aW9uLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByaXZhdGUgc3RhdGljIFN0cmluZyBnZXRTdHJpbmcoU3RyaW5nIGtleSwgT2JqZWN0IHMxKSB7CisJCXJldHVybiBFeGFtcGxlRWRpdG9yUGx1Z2luLklOU1RBTkNFLmdldFN0cmluZyhrZXksIG5ldyBPYmplY3QgW10geyBzMSB9KTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGltcGxlbWVudHMge0BsaW5rIG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JTWVudUxpc3RlbmVyfSB0byBoZWxwIGZpbGwgdGhlIGNvbnRleHQgbWVudXMgd2l0aCBjb250cmlidXRpb25zIGZyb20gdGhlIEVkaXQgbWVudS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSBtZW51TWFuYWdlciAKKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgbWVudUFib3V0VG9TaG93KElNZW51TWFuYWdlciBtZW51TWFuYWdlcikgeworCQkoKElNZW51TGlzdGVuZXIpZ2V0RWRpdG9yU2l0ZSgpLmdldEFjdGlvbkJhckNvbnRyaWJ1dG9yKCkpLm1lbnVBYm91dFRvU2hvdyhtZW51TWFuYWdlcik7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIAorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPiAKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVkaXRpbmdEb21haW5BY3Rpb25CYXJDb250cmlidXRvciBnZXRBY3Rpb25CYXJDb250cmlidXRvcigpIHsKKwkJcmV0dXJuIChFZGl0aW5nRG9tYWluQWN0aW9uQmFyQ29udHJpYnV0b3IpZ2V0RWRpdG9yU2l0ZSgpLmdldEFjdGlvbkJhckNvbnRyaWJ1dG9yKCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIAorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgSUFjdGlvbkJhcnMgZ2V0QWN0aW9uQmFycygpIHsKKwkJcmV0dXJuIGdldEFjdGlvbkJhckNvbnRyaWJ1dG9yKCkuZ2V0QWN0aW9uQmFycygpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogQHJldHVybiAKKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEFkYXB0ZXJGYWN0b3J5IGdldEFkYXB0ZXJGYWN0b3J5KCkgeworCQlyZXR1cm4gYWRhcHRlckZhY3Rvcnk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgZGlzcG9zZSgpIHsKKwkJdXBkYXRlUHJvYmxlbUluZGljYXRpb24gPSBmYWxzZTsKKworCQlSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkucmVtb3ZlUmVzb3VyY2VDaGFuZ2VMaXN0ZW5lcihyZXNvdXJjZUNoYW5nZUxpc3RlbmVyKTsKKworCQlnZXRTaXRlKCkuZ2V0UGFnZSgpLnJlbW92ZVBhcnRMaXN0ZW5lcihwYXJ0TGlzdGVuZXIpOworCisJCWFkYXB0ZXJGYWN0b3J5LmRpc3Bvc2UoKTsKKworCQlpZiAoZ2V0QWN0aW9uQmFyQ29udHJpYnV0b3IoKS5nZXRBY3RpdmVFZGl0b3IoKSA9PSB0aGlzKSB7CisJCQlnZXRBY3Rpb25CYXJDb250cmlidXRvcigpLnNldEFjdGl2ZUVkaXRvcihudWxsKTsKKwkJfQorCisJCWlmIChwcm9wZXJ0eVNoZWV0UGFnZSAhPSBudWxsKSB7CisJCQlwcm9wZXJ0eVNoZWV0UGFnZS5kaXNwb3NlKCk7CisJCX0KKworCQlpZiAoY29udGVudE91dGxpbmVQYWdlICE9IG51bGwpIHsKKwkJCWNvbnRlbnRPdXRsaW5lUGFnZS5kaXNwb3NlKCk7CisJCX0KKworCQlzdXBlci5kaXNwb3NlKCk7CisJfQorCisJLyoqCisJICogUmV0dXJucyB3aGV0aGVyIHRoZSBvdXRsaW5lIHZpZXcgc2hvdWxkIGJlIHByZXNlbnRlZCB0byB0aGUgdXNlci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgYm9vbGVhbiBzaG93T3V0bGluZVZpZXcoKSB7CisJCXJldHVybiBmYWxzZTsKKwl9Cit9CmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy5leGFtcGxlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL2Rpc2Vhc2Vtb2RlbHMvZXhhbXBsZS9wcmVzZW50YXRpb24vRXhhbXBsZURpc2Vhc2VNb2RlbEFkYXB0ZXIuamF2YSBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzLmV4YW1wbGUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvZGlzZWFzZW1vZGVscy9leGFtcGxlL3ByZXNlbnRhdGlvbi9FeGFtcGxlRGlzZWFzZU1vZGVsQWRhcHRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYwMmIwNGUKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy5leGFtcGxlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL2Rpc2Vhc2Vtb2RlbHMvZXhhbXBsZS9wcmVzZW50YXRpb24vRXhhbXBsZURpc2Vhc2VNb2RlbEFkYXB0ZXIuamF2YQpAQCAtMCwwICsxLDQwIEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy5leGFtcGxlLnByZXNlbnRhdGlvbjsKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDcsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3Q7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLkRpc2Vhc2VNb2RlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnVpLmFkYXB0ZXJzLmRpc2Vhc2Vtb2RlbHByb3BlcnR5ZWRpdG9yLkRpc2Vhc2VNb2RlbFByb3BlcnR5RWRpdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udWkuYWRhcHRlcnMuZGlzZWFzZW1vZGVscHJvcGVydHllZGl0b3IuRGlzZWFzZU1vZGVsUHJvcGVydHlFZGl0b3JBZGFwdGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udWkud2l6YXJkcy5EaXNlYXNlTW9kZWxQcm9wZXJ0eUNvbXBvc2l0ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLk1vZGlmeUxpc3RlbmVyOworCisvKioKKyAqICAKKyAqIEFkYXB0ZXIgZm9yIFByb3BlcnR5IEVkaXRvcgorICoKKyAqLworcHVibGljIGNsYXNzIEV4YW1wbGVEaXNlYXNlTW9kZWxBZGFwdGVyIGV4dGVuZHMKKwkJRGlzZWFzZU1vZGVsUHJvcGVydHlFZGl0b3JBZGFwdGVyIHsKKworCS8qKgorCSAqIAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBEaXNlYXNlTW9kZWxQcm9wZXJ0eUVkaXRvciBjcmVhdGVEaXNlYXNlTW9kZWxQcm9wZXJ0eUVkaXRvcigKKwkJCURpc2Vhc2VNb2RlbFByb3BlcnR5Q29tcG9zaXRlIGRpc2Vhc2VNb2RlbFByb3BlcnR5Q29tcG9zaXRlLAorCQkJaW50IHN0eWxlLCBNb2RpZnlMaXN0ZW5lciBwcm9qZWN0VmFsaWRhdG9yLCBJUHJvamVjdCBwcm9qZWN0KSB7CisJCXJldHVybiBuZXcgRXhhbXBsZURpc2Vhc2VNb2RlbFByb3BlcnR5RWRpdG9yKAorCQkJCWRpc2Vhc2VNb2RlbFByb3BlcnR5Q29tcG9zaXRlLCBzdHlsZSwKKwkJCQkoRGlzZWFzZU1vZGVsKSBnZXRUYXJnZXQoKSwgcHJvamVjdFZhbGlkYXRvciwgcHJvamVjdCk7CisJfSAvLyBjcmVhdGVEaXNlYXNlTW9kZWxQcm9wZXJ0eUVkaXRvcgorCit9IC8vIEV4YW1wbGVEaXNlYXNlTW9kZWxBZGFwdGVyCmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy5leGFtcGxlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL2Rpc2Vhc2Vtb2RlbHMvZXhhbXBsZS9wcmVzZW50YXRpb24vRXhhbXBsZURpc2Vhc2VNb2RlbFByb3BlcnR5RWRpdG9yLmphdmEgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy5leGFtcGxlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL2Rpc2Vhc2Vtb2RlbHMvZXhhbXBsZS9wcmVzZW50YXRpb24vRXhhbXBsZURpc2Vhc2VNb2RlbFByb3BlcnR5RWRpdG9yLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjUwY2Q4NgotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzLmV4YW1wbGUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvZGlzZWFzZW1vZGVscy9leGFtcGxlL3ByZXNlbnRhdGlvbi9FeGFtcGxlRGlzZWFzZU1vZGVsUHJvcGVydHlFZGl0b3IuamF2YQpAQCAtMCwwICsxLDE0NCBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMuZXhhbXBsZS5wcmVzZW50YXRpb247CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDcsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3Q7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4YW1wbGUuRXhhbXBsZURpc2Vhc2VNb2RlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXhhbXBsZS5FeGFtcGxlUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuRGlzZWFzZU1vZGVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udWkud2l6YXJkcy5TdGFuZGFyZERpc2Vhc2VNb2RlbFByb3BlcnR5RWRpdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuTW9kaWZ5TGlzdGVuZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlRleHQ7CisKKy8qKgorICoKKyAqLworcHVibGljIGNsYXNzIEV4YW1wbGVEaXNlYXNlTW9kZWxQcm9wZXJ0eUVkaXRvciBleHRlbmRzCisJCVN0YW5kYXJkRGlzZWFzZU1vZGVsUHJvcGVydHlFZGl0b3IgeworCisJLyoqCisJICogQHBhcmFtIHBhcmVudAorCSAqIEBwYXJhbSBzdHlsZQorCSAqIEBwYXJhbSBkaXNlYXNlTW9kZWwKKwkgKiBAcGFyYW0gcHJvamVjdFZhbGlkYXRvcgorCSAqLworCXB1YmxpYyBFeGFtcGxlRGlzZWFzZU1vZGVsUHJvcGVydHlFZGl0b3IoQ29tcG9zaXRlIHBhcmVudCwgaW50IHN0eWxlLAorCQkJRGlzZWFzZU1vZGVsIGRpc2Vhc2VNb2RlbCwgTW9kaWZ5TGlzdGVuZXIgcHJvamVjdFZhbGlkYXRvciwKKwkJCUlQcm9qZWN0IHByb2plY3QpIHsKKwkJc3VwZXIocGFyZW50LCBzdHlsZSwgZGlzZWFzZU1vZGVsLCBwcm9qZWN0VmFsaWRhdG9yLCBwcm9qZWN0KTsKKwl9IC8vIEV4YW1wbGVEaXNlYXNlTW9kZWxQcm9wZXJ0eUVkaXRvcgorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnVpLndpemFyZHMuU3RhbmRhcmREaXNlYXNlTW9kZWxQcm9wZXJ0eUVkaXRvciNwb3B1bGF0ZShvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuRGlzZWFzZU1vZGVsKQorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIHBvcHVsYXRlKERpc2Vhc2VNb2RlbCBkaXNlYXNlTW9kZWwpIHsKKwkJc3VwZXIucG9wdWxhdGUoZGlzZWFzZU1vZGVsKTsKKworCQlpZiAoZGlzZWFzZU1vZGVsIGluc3RhbmNlb2YgRXhhbXBsZURpc2Vhc2VNb2RlbCkgeworCQkJRXhhbXBsZURpc2Vhc2VNb2RlbCBtb2RlbCA9IChFeGFtcGxlRGlzZWFzZU1vZGVsKSBkaXNlYXNlTW9kZWw7CisKKwkJCW1vZGVsLnNldFNlYXNvbmFsTW9kdWxhdGlvbkV4cG9uZW50KERvdWJsZQorCQkJCQkucGFyc2VEb3VibGUobWFwCisJCQkJCQkJLmdldChFeGFtcGxlUGFja2FnZS5MaXRlcmFscy5FWEFNUExFX0RJU0VBU0VfTU9ERUxfX1NFQVNPTkFMX01PRFVMQVRJT05fRVhQT05FTlQpCisJCQkJCQkJLmdldFRleHQoKSkpOworCQkJbW9kZWwuc2V0TW9kdWxhdGlvblBlcmlvZChEb3VibGUKKwkJCQkJLnBhcnNlRG91YmxlKG1hcAorCQkJCQkJCS5nZXQoRXhhbXBsZVBhY2thZ2UuTGl0ZXJhbHMuRVhBTVBMRV9ESVNFQVNFX01PREVMX19NT0RVTEFUSU9OX1BFUklPRCkKKwkJCQkJCQkuZ2V0VGV4dCgpKSk7CisJCQltb2RlbC5zZXRNb2R1bGF0aW9uUGhhc2VTaGlmdChEb3VibGUKKwkJCQkJLnBhcnNlRG91YmxlKG1hcAorCQkJCQkJCS5nZXQoRXhhbXBsZVBhY2thZ2UuTGl0ZXJhbHMuRVhBTVBMRV9ESVNFQVNFX01PREVMX19NT0RVTEFUSU9OX1BIQVNFX1NISUZUKQorCQkJCQkJCS5nZXRUZXh0KCkpKTsKKwkJCW1vZGVsLnNldFNlYXNvbmFsTW9kdWxhdGlvbkZsb29yKERvdWJsZQorCQkJCQkucGFyc2VEb3VibGUobWFwCisJCQkJCQkJLmdldChFeGFtcGxlUGFja2FnZS5MaXRlcmFscy5FWEFNUExFX0RJU0VBU0VfTU9ERUxfX1NFQVNPTkFMX01PRFVMQVRJT05fRkxPT1IpCisJCQkJCQkJLmdldFRleHQoKSkpOworCQl9CisJfQorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnVpLndpemFyZHMuU3RhbmRhcmREaXNlYXNlTW9kZWxQcm9wZXJ0eUVkaXRvciN2YWxpZGF0ZSgpCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIGJvb2xlYW4gdmFsaWRhdGUoKSB7CisJCWlmICghc3VwZXIudmFsaWRhdGUoKSkgeworCQkJcmV0dXJuIGZhbHNlOworCQl9CisKKwkJVGV4dCB0ZXh0OworCisJCS8vIFNlYXNvbmFsIE1vZHVsYXRpb24gRXhwb25lbnQKKwkJdGV4dCA9IG1hcAorCQkJCS5nZXQoRXhhbXBsZVBhY2thZ2UuTGl0ZXJhbHMuRVhBTVBMRV9ESVNFQVNFX01PREVMX19TRUFTT05BTF9NT0RVTEFUSU9OX0VYUE9ORU5UKTsKKwkJaWYgKHRleHQgIT0gbnVsbCkgeworCQkJaWYgKHRleHQuZ2V0VGV4dCgpLmVxdWFscygiIikpIHsKKwkJCQllcnJvck1lc3NhZ2UgPSBFeGFtcGxlRGlzZWFzZVdpemFyZE1lc3NhZ2VzCisJCQkJCQkuZ2V0U3RyaW5nKCJzZWFzb25hbE1vZHVsYXRpb25FeHBvbmVudE1JU1NJTkciKTsgLy8kTk9OLU5MUy0xJAorCQkJCXJldHVybiBmYWxzZTsKKwkJCX0gZWxzZSBpZiAoIWlzVmFsaWREb3VibGVWYWx1ZSh0ZXh0LmdldFRleHQoKSkpIHsKKwkJCQllcnJvck1lc3NhZ2UgPSBFeGFtcGxlRGlzZWFzZVdpemFyZE1lc3NhZ2VzCisJCQkJCQkuZ2V0U3RyaW5nKCJzZWFzb25hbE1vZHVsYXRpb25FeHBvbmVudElOVkFMSUQiKTsgLy8kTk9OLU5MUy0xJAorCQkJCXJldHVybiBmYWxzZTsKKwkJCX0KKwkJfQorCisJCS8vIE1vZHVsYXRpb24gUGVyaW9kCisJCXRleHQgPSBtYXAKKwkJCQkuZ2V0KEV4YW1wbGVQYWNrYWdlLkxpdGVyYWxzLkVYQU1QTEVfRElTRUFTRV9NT0RFTF9fTU9EVUxBVElPTl9QRVJJT0QpOworCQlpZiAodGV4dCAhPSBudWxsKSB7CisJCQlpZiAodGV4dC5nZXRUZXh0KCkuZXF1YWxzKCIiKSkgeworCQkJCWVycm9yTWVzc2FnZSA9IEV4YW1wbGVEaXNlYXNlV2l6YXJkTWVzc2FnZXMKKwkJCQkJCS5nZXRTdHJpbmcoIm1vZHVsYXRpb25QZXJpb2RNSVNTSU5HIik7IC8vJE5PTi1OTFMtMSQKKwkJCQlyZXR1cm4gZmFsc2U7CisJCQl9IGVsc2UgaWYgKCFpc1ZhbGlkRG91YmxlVmFsdWUodGV4dC5nZXRUZXh0KCkpKSB7CisJCQkJZXJyb3JNZXNzYWdlID0gRXhhbXBsZURpc2Vhc2VXaXphcmRNZXNzYWdlcworCQkJCQkJLmdldFN0cmluZygibW9kdWxhdGlvblBlcmlvZElOVkFMSUQiKTsgLy8kTk9OLU5MUy0xJAorCQkJCXJldHVybiBmYWxzZTsKKwkJCX0KKwkJfQorCisJCS8vIE1vZHVsYXRpb24gUGhhc2UgU2hpZnQKKwkJdGV4dCA9IG1hcAorCQkJCS5nZXQoRXhhbXBsZVBhY2thZ2UuTGl0ZXJhbHMuRVhBTVBMRV9ESVNFQVNFX01PREVMX19NT0RVTEFUSU9OX1BIQVNFX1NISUZUKTsKKwkJaWYgKHRleHQgIT0gbnVsbCkgeworCQkJaWYgKHRleHQuZ2V0VGV4dCgpLmVxdWFscygiIikpIHsKKwkJCQllcnJvck1lc3NhZ2UgPSBFeGFtcGxlRGlzZWFzZVdpemFyZE1lc3NhZ2VzCisJCQkJCQkuZ2V0U3RyaW5nKCJtb2R1bGF0aW9uUGhhc2VNSVNTSU5HIik7IC8vJE5PTi1OTFMtMSQKKwkJCQlyZXR1cm4gZmFsc2U7CisJCQl9IGVsc2UgaWYgKCFpc1ZhbGlkRG91YmxlVmFsdWUodGV4dC5nZXRUZXh0KCkpKSB7CisJCQkJZXJyb3JNZXNzYWdlID0gRXhhbXBsZURpc2Vhc2VXaXphcmRNZXNzYWdlcworCQkJCQkJLmdldFN0cmluZygibW9kdWxhdGlvblBoYXNlSU5WQUxJRCIpOyAvLyROT04tTkxTLTEkCisJCQkJcmV0dXJuIGZhbHNlOworCQkJfQorCQl9CisKKwkJLy8gU2Vhc29uYWwgTW9kdWxhdGlvbiBGbG9vcgorCQl0ZXh0ID0gbWFwCisJCQkJLmdldChFeGFtcGxlUGFja2FnZS5MaXRlcmFscy5FWEFNUExFX0RJU0VBU0VfTU9ERUxfX1NFQVNPTkFMX01PRFVMQVRJT05fRkxPT1IpOworCQlpZiAodGV4dCAhPSBudWxsKSB7CisJCQlpZiAodGV4dC5nZXRUZXh0KCkuZXF1YWxzKCIiKSkgeworCQkJCWVycm9yTWVzc2FnZSA9IEV4YW1wbGVEaXNlYXNlV2l6YXJkTWVzc2FnZXMKKwkJCQkJCS5nZXRTdHJpbmcoInNlYXNvbmFsTW9kdWxhdGlvbkZsb29yTUlTU0lORyIpOyAvLyROT04tTkxTLTEkCisJCQkJcmV0dXJuIGZhbHNlOworCQkJfSBlbHNlIGlmICghaXNWYWxpZERvdWJsZVZhbHVlKHRleHQuZ2V0VGV4dCgpKSkgeworCQkJCWVycm9yTWVzc2FnZSA9IEV4YW1wbGVEaXNlYXNlV2l6YXJkTWVzc2FnZXMKKwkJCQkJCS5nZXRTdHJpbmcoInNlYXNvbmFsTW9kdWxhdGlvbkZsb29ySU5WQUxJRCIpOyAvLyROT04tTkxTLTEkCisJCQkJcmV0dXJuIGZhbHNlOworCQkJfQorCQl9CisKKwkJcmV0dXJuIHRydWU7CisJfQorCit9IC8vIEV4YW1wbGVEaXNlYXNlTW9kZWxQcm9wZXJ0eUVkaXRvcgpkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMuZXhhbXBsZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9kaXNlYXNlbW9kZWxzL2V4YW1wbGUvcHJlc2VudGF0aW9uL0V4YW1wbGVEaXNlYXNlTW9kZWxQcm9wZXJ0eUVkaXRvckFkYXB0ZXJGYWN0b3J5LmphdmEgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy5leGFtcGxlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL2Rpc2Vhc2Vtb2RlbHMvZXhhbXBsZS9wcmVzZW50YXRpb24vRXhhbXBsZURpc2Vhc2VNb2RlbFByb3BlcnR5RWRpdG9yQWRhcHRlckZhY3RvcnkuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZTI0Njk3Ci0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMuZXhhbXBsZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9kaXNlYXNlbW9kZWxzL2V4YW1wbGUvcHJlc2VudGF0aW9uL0V4YW1wbGVEaXNlYXNlTW9kZWxQcm9wZXJ0eUVkaXRvckFkYXB0ZXJGYWN0b3J5LmphdmEKQEAgLTAsMCArMSw1MSBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMuZXhhbXBsZS5wcmVzZW50YXRpb247CisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA3LCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LkFkYXB0ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4YW1wbGUudXRpbC5FeGFtcGxlQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS51aS5hZGFwdGVycy5kaXNlYXNlbW9kZWxwcm9wZXJ0eWVkaXRvci5EaXNlYXNlTW9kZWxQcm9wZXJ0eUVkaXRvckFkYXB0ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS51aS5hZGFwdGVycy5kaXNlYXNlbW9kZWxwcm9wZXJ0eWVkaXRvci5EaXNlYXNlTW9kZWxQcm9wZXJ0eUVkaXRvckFkYXB0ZXJGYWN0b3J5OworCisvKioKKyAqIEBhdXRob3IgamFtZXMKKyAqIAorICovCitwdWJsaWMgY2xhc3MgRXhhbXBsZURpc2Vhc2VNb2RlbFByb3BlcnR5RWRpdG9yQWRhcHRlckZhY3RvcnkgZXh0ZW5kcworCQlFeGFtcGxlQWRhcHRlckZhY3RvcnkgaW1wbGVtZW50cworCQlEaXNlYXNlTW9kZWxQcm9wZXJ0eUVkaXRvckFkYXB0ZXJGYWN0b3J5IHsKKworCS8qKgorCSAqIAorCSAqLworCXB1YmxpYyBFeGFtcGxlRGlzZWFzZU1vZGVsUHJvcGVydHlFZGl0b3JBZGFwdGVyRmFjdG9yeSgpIHsKKwkJc3VwZXIoKTsKKwkJRGlzZWFzZU1vZGVsUHJvcGVydHlFZGl0b3JBZGFwdGVyRmFjdG9yeS5JTlNUQU5DRQorCQkJCS5hZGRBZGFwdGVyRmFjdG9yeSh0aGlzKTsKKwl9CisKKwkvKioKKwkgKiAKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVFeGFtcGxlRGlzZWFzZU1vZGVsQWRhcHRlcigpIHsKKwkJcmV0dXJuIG5ldyBFeGFtcGxlRGlzZWFzZU1vZGVsQWRhcHRlcigpOworCX0KKworCS8qKgorCSAqIAorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4YW1wbGUudXRpbC5FeGFtcGxlQWRhcHRlckZhY3RvcnkjaXNGYWN0b3J5Rm9yVHlwZShqYXZhLmxhbmcuT2JqZWN0KQorCSAqLworCXB1YmxpYyBib29sZWFuIGlzRmFjdG9yeUZvclR5cGUoT2JqZWN0IHR5cGUpIHsKKwkJcmV0dXJuIHR5cGUgPT0gRGlzZWFzZU1vZGVsUHJvcGVydHlFZGl0b3JBZGFwdGVyLmNsYXNzCisJCQkJfHwgc3VwZXIuaXNGYWN0b3J5Rm9yVHlwZSh0eXBlKTsKKwl9Cit9IC8vIEV4YW1wbGVEaXNlYXNlTW9kZWxQcm9wZXJ0eUVkaXRvckFkYXB0ZXJGYWN0b3J5CmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy5leGFtcGxlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL2Rpc2Vhc2Vtb2RlbHMvZXhhbXBsZS9wcmVzZW50YXRpb24vRXhhbXBsZURpc2Vhc2VXaXphcmRNZXNzYWdlcy5qYXZhIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMuZXhhbXBsZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9kaXNlYXNlbW9kZWxzL2V4YW1wbGUvcHJlc2VudGF0aW9uL0V4YW1wbGVEaXNlYXNlV2l6YXJkTWVzc2FnZXMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YTlmM2Q4Ci0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMuZXhhbXBsZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9kaXNlYXNlbW9kZWxzL2V4YW1wbGUvcHJlc2VudGF0aW9uL0V4YW1wbGVEaXNlYXNlV2l6YXJkTWVzc2FnZXMuamF2YQpAQCAtMCwwICsxLDQ2IEBACisvLyBFeGFtcGxlRGlzZWFzZVdpemFyZE1lc3NhZ2VzLmphdmEKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzLmV4YW1wbGUucHJlc2VudGF0aW9uOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA3LCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGphdmEudXRpbC5NaXNzaW5nUmVzb3VyY2VFeGNlcHRpb247CitpbXBvcnQgamF2YS51dGlsLlJlc291cmNlQnVuZGxlOworCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLkNvbnN0YW50czsKKworLyoqCisgKiBUaGlzIGNsYXNzIGlzIHRoZSBSZXNvdXJjZSBCdW5kbGUgZm9yIHRoaXMgcGFja2FnZS4KKyAqLworcHVibGljIGNsYXNzIEV4YW1wbGVEaXNlYXNlV2l6YXJkTWVzc2FnZXMgeworCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBCVU5ETEVfTkFNRSA9IENvbnN0YW50cy5JRF9ST09UCisJCQkrICIudWkuZGlzZWFzZW1vZGVscy5leGFtcGxlLnByZXNlbnRhdGlvbi5leGFtcGxlZGlzZWFzZW1lc3NhZ2VzIjsgLy8kTk9OLU5MUy0xJAorCisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgUmVzb3VyY2VCdW5kbGUgUkVTT1VSQ0VfQlVORExFID0gUmVzb3VyY2VCdW5kbGUKKwkJCS5nZXRCdW5kbGUoQlVORExFX05BTUUpOworCisJLyoqCisJICogCisJICovCisJcHVibGljIEV4YW1wbGVEaXNlYXNlV2l6YXJkTWVzc2FnZXMoKSB7CisJCS8vIGVtcHR5CisJfQorCisJLyoqCisJICogQHBhcmFtIGtleQorCSAqICAgICAgICAgICAgdGhlIGtleSBmb3IgdGhlIG1lc3NhZ2UKKwkgKiBAcmV0dXJuIHRoZSBzdHJpbmcgdGhhdCBtYXRjaGVzIHRoZSBrZXkKKwkgKiBAdGhyb3dzIE1pc3NpbmdSZXNvdXJjZUV4Y2VwdGlvbiBpZiB0aGUga2V5IGNhbm5vdCBiZSBmb3VuZAorCSAqLworCXB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldFN0cmluZyhmaW5hbCBTdHJpbmcga2V5KSB0aHJvd3MgTWlzc2luZ1Jlc291cmNlRXhjZXB0aW9ueworCQkJcmV0dXJuIFJFU09VUkNFX0JVTkRMRS5nZXRTdHJpbmcoa2V5KTsKKwl9IC8vIGdldFN0cmluZworfSAvLyBFeGFtcGxlRGlzZWFzZVdpemFyZE1lc3NhZ2VzCmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy5leGFtcGxlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL2Rpc2Vhc2Vtb2RlbHMvZXhhbXBsZS9wcmVzZW50YXRpb24vRXhhbXBsZUVkaXRvclBsdWdpbi5qYXZhIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMuZXhhbXBsZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9kaXNlYXNlbW9kZWxzL2V4YW1wbGUvcHJlc2VudGF0aW9uL0V4YW1wbGVFZGl0b3JQbHVnaW4uamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMjhhZThiCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMuZXhhbXBsZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9kaXNlYXNlbW9kZWxzL2V4YW1wbGUvcHJlc2VudGF0aW9uL0V4YW1wbGVFZGl0b3JQbHVnaW4uamF2YQpAQCAtMCwwICsxLDEyMSBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMuZXhhbXBsZS5wcmVzZW50YXRpb247CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDkgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5FTUZQbHVnaW47CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51aS5FY2xpcHNlVUlQbHVnaW47CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlJlc291cmNlTG9jYXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUucHJvdmlkZXIuRWNvcmVFZGl0UGx1Z2luOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24ucHJvdmlkZXIuQ29yZUVkaXRQbHVnaW47CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5lZGdlcy5wcm92aWRlci5EZWZpbml0aW9uc0VkaXRQbHVnaW47CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLnByb3ZpZGVyLkRpc2Vhc2Vtb2RlbHNFZGl0UGx1Z2luOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5wcm92aWRlci5TdGFuZGFyZEVkaXRQbHVnaW47CitpbXBvcnQgb3JnLm9zZ2kuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHQ7CisKKy8qKgorICogVGhpcyBpcyB0aGUgY2VudHJhbCBzaW5nbGV0b24gZm9yIHRoZSBFeGFtcGxlIGVkaXRvciBwbHVnaW4uCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK0BTdXBwcmVzc1dhcm5pbmdzKCJzeW50aGV0aWMtYWNjZXNzIikKK3B1YmxpYyBmaW5hbCBjbGFzcyBFeGFtcGxlRWRpdG9yUGx1Z2luIGV4dGVuZHMgRU1GUGx1Z2luIHsKKwkvKioKKwkgKiBLZWVwIHRyYWNrIG9mIHRoZSBzaW5nbGV0b24uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBFeGFtcGxlRWRpdG9yUGx1Z2luIElOU1RBTkNFID0gbmV3IEV4YW1wbGVFZGl0b3JQbHVnaW4oKTsKKwkKKwkvKioKKwkgKiBLZWVwIHRyYWNrIG9mIHRoZSBzaW5nbGV0b24uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJpdmF0ZSBzdGF0aWMgSW1wbGVtZW50YXRpb24gcGx1Z2luOworCisJLyoqCisJICogQ3JlYXRlIHRoZSBpbnN0YW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRXhhbXBsZUVkaXRvclBsdWdpbigpIHsKKwkJc3VwZXIKKwkJCShuZXcgUmVzb3VyY2VMb2NhdG9yIFtdIHsKKwkJCQlEaXNlYXNlbW9kZWxzRWRpdFBsdWdpbi5JTlNUQU5DRSwKKwkJCQlDb3JlRWRpdFBsdWdpbi5JTlNUQU5DRSwKKwkJCQlFY29yZUVkaXRQbHVnaW4uSU5TVEFOQ0UsCisJCQkJRGVmaW5pdGlvbnNFZGl0UGx1Z2luLklOU1RBTkNFLAorCQkJCVN0YW5kYXJkRWRpdFBsdWdpbi5JTlNUQU5DRSwKKwkJCX0pOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIHNpbmdsZXRvbiBpbnN0YW5jZSBvZiB0aGUgRWNsaXBzZSBwbHVnaW4uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBzaW5nbGV0b24gaW5zdGFuY2UuCisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBSZXNvdXJjZUxvY2F0b3IgZ2V0UGx1Z2luUmVzb3VyY2VMb2NhdG9yKCkgeworCQlyZXR1cm4gcGx1Z2luOworCX0KKwkKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBzaW5nbGV0b24gaW5zdGFuY2Ugb2YgdGhlIEVjbGlwc2UgcGx1Z2luLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgc2luZ2xldG9uIGluc3RhbmNlLgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgc3RhdGljIEltcGxlbWVudGF0aW9uIGdldFBsdWdpbigpIHsKKwkJcmV0dXJuIHBsdWdpbjsKKwl9CisJCisJLyoqCisJICogVGhlIGFjdHVhbCBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgRWNsaXBzZSA8Yj5QbHVnaW48L2I+LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBzdGF0aWMgY2xhc3MgSW1wbGVtZW50YXRpb24gZXh0ZW5kcyBFY2xpcHNlVUlQbHVnaW4geworCQkvKioKKwkJICogQ3JlYXRlcyBhbiBpbnN0YW5jZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCXB1YmxpYyBJbXBsZW1lbnRhdGlvbigpIHsKKwkJCXN1cGVyKCk7CisJCisJCQkvLyBSZW1lbWJlciB0aGUgc3RhdGljIGluc3RhbmNlLgorCQkJLy8KKwkJCXBsdWdpbiA9IHRoaXM7CisJCX0KKwkJCisJCS8qKgorCQkgKiAKKwkJICogQHNlZSBvcmcuZWNsaXBzZS51aS5wbHVnaW4uQWJzdHJhY3RVSVBsdWdpbiNzdGFydChvcmcub3NnaS5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dCkKKwkJICovCisJCUBPdmVycmlkZQorCQlwdWJsaWMgdm9pZCBzdGFydChCdW5kbGVDb250ZXh0IGNvbnRleHQpIHRocm93cyBFeGNlcHRpb24geworCQkJc3VwZXIuc3RhcnQoY29udGV4dCk7CisvLwkJCW5ldyBFeGFtcGxlUHJvcGVydHlTdHJpbmdQcm92aWRlckFkYXB0ZXJGYWN0b3J5KCk7CisJCQluZXcgRXhhbXBsZURpc2Vhc2VNb2RlbFByb3BlcnR5RWRpdG9yQWRhcHRlckZhY3RvcnkoKTsKKwkJfQorCX0KKworfQpkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMuZXhhbXBsZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9kaXNlYXNlbW9kZWxzL2V4YW1wbGUvcHJlc2VudGF0aW9uL0V4YW1wbGVQcm9wZXJ0eVN0cmluZ1Byb3ZpZGVyQWRhcHRlckZhY3RvcnkuamF2YSBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzLmV4YW1wbGUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvZGlzZWFzZW1vZGVscy9leGFtcGxlL3ByZXNlbnRhdGlvbi9FeGFtcGxlUHJvcGVydHlTdHJpbmdQcm92aWRlckFkYXB0ZXJGYWN0b3J5LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGJiYjViMgotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzLmV4YW1wbGUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvZGlzZWFzZW1vZGVscy9leGFtcGxlL3ByZXNlbnRhdGlvbi9FeGFtcGxlUHJvcGVydHlTdHJpbmdQcm92aWRlckFkYXB0ZXJGYWN0b3J5LmphdmEKQEAgLTAsMCArMSwxMjUgQEAKKy8vIEV4YW1wbGVQcm9wZXJ0eVN0cmluZ1Byb3ZpZGVyQWRhcHRlckZhY3RvcnkuamF2YQorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMuZXhhbXBsZS5wcmVzZW50YXRpb247CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNywgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqYXZhLnV0aWwuTWlzc2luZ1Jlc291cmNlRXhjZXB0aW9uOworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuQWRhcHRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRVN0cnVjdHVyYWxGZWF0dXJlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtUHJvcGVydHlEZXNjcmlwdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leGFtcGxlLnV0aWwuRXhhbXBsZUFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udWkuYWRhcHRlcnMucHJvcGVydHlzdHJpbmdzLlByb3BlcnR5U3RyaW5nUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS51aS5hZGFwdGVycy5wcm9wZXJ0eXN0cmluZ3MuUHJvcGVydHlTdHJpbmdQcm92aWRlckFkYXB0ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS51aS5hZGFwdGVycy5wcm9wZXJ0eXN0cmluZ3MuUHJvcGVydHlTdHJpbmdQcm92aWRlckFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udWkud2l6YXJkcy5TdGFuZGFyZFByb3BlcnR5U3RyaW5nUHJvdmlkZXJBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5JU3RhcnR1cDsKKworLyoqCisgKiBUaGlzIGNsYXNzIHJlcHJlc2VudHMKKyAqLworcHVibGljIGNsYXNzIEV4YW1wbGVQcm9wZXJ0eVN0cmluZ1Byb3ZpZGVyQWRhcHRlckZhY3RvcnkgZXh0ZW5kcworCQlFeGFtcGxlQWRhcHRlckZhY3RvcnkgaW1wbGVtZW50cworCQlQcm9wZXJ0eVN0cmluZ1Byb3ZpZGVyQWRhcHRlckZhY3RvcnksIElTdGFydHVwIHsKKworCVByb3BlcnR5U3RyaW5nUHJvdmlkZXJBZGFwdGVyIGFkYXB0ZXIgPSBudWxsOworCisJLyoqCisJICogRGVmYXVsdCBDb25zdHJ1Y3RvcgorCSAqLworCXB1YmxpYyBFeGFtcGxlUHJvcGVydHlTdHJpbmdQcm92aWRlckFkYXB0ZXJGYWN0b3J5KCkgeworCQlzdXBlcigpOworCQlQcm9wZXJ0eVN0cmluZ1Byb3ZpZGVyQWRhcHRlckZhY3RvcnkuSU5TVEFOQ0UuYWRkQWRhcHRlckZhY3RvcnkodGhpcyk7CisJfQorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS51aS5JU3RhcnR1cCNlYXJseVN0YXJ0dXAoKQorCSAqLworCXB1YmxpYyB2b2lkIGVhcmx5U3RhcnR1cCgpIHsKKwkJLy8gTm90aGluZyB0byBkbyBoZXJlLiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgYWZ0ZXIgdGhlIGNvbnN0cnVjdG9yIGhhcworCQkvLyBydW4gd2hpY2ggaXMgdGhlIGVudGlyZSBwb2ludCBvZiBlYXJseSBhY3RpdmF0aW9uIHdoaWNoIGNhdXNlcyB0aGUKKwkJLy8gZmFjdG9yeSB0byBiZSBhZGRlZCB0byB0aGUgUHJvcGVydHlTdHJpbmdQcm92aWRlckFkYXB0ZXJGYWN0b3J5LklOU1RBTkNFCisJfQorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5pbXBsLkFkYXB0ZXJGYWN0b3J5SW1wbCNpc0ZhY3RvcnlGb3JUeXBlKGphdmEubGFuZy5PYmplY3QpCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIGJvb2xlYW4gaXNGYWN0b3J5Rm9yVHlwZShPYmplY3QgdHlwZSkgeworCQlyZXR1cm4gc3VwZXIuaXNGYWN0b3J5Rm9yVHlwZSh0eXBlKQorCQkJCXx8IHR5cGUgPT0gUHJvcGVydHlTdHJpbmdQcm92aWRlci5jbGFzczsKKwl9CisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leGFtcGxlLnV0aWwuRXhhbXBsZUFkYXB0ZXJGYWN0b3J5I2NyZWF0ZUV4YW1wbGVEaXNlYXNlTW9kZWxBZGFwdGVyKCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVFeGFtcGxlRGlzZWFzZU1vZGVsQWRhcHRlcigpIHsKKwkJLy8gSGF2ZSB3ZSBjcmVhdGVkIG9uZSBiZWZvcmU/CisJCWlmIChhZGFwdGVyID09IG51bGwpIHsKKwkJCS8vIE5vCisJCQlhZGFwdGVyID0gbmV3ICBTdGFuZGFyZFByb3BlcnR5U3RyaW5nUHJvdmlkZXJBZGFwdGVyRmFjdG9yeS5TdGFuZGFyZFByb3BlcnR5U3RyaW5nUHJvdmlkZXJBZGFwdGVyKCkgeworCisJCQkJLyoqCisJCQkJICogQHBhcmFtIGRlc2NyaXB0b3IKKwkJCQkgKiBAcmV0dXJuIHRoZSBOTFMnZCBuYW1lIG9mIHRoZSBwcm9wZXJ0eSB0byBkaXNwbGF5IHRvIHRoZSB1c2VyCisJCQkJICovCisJCQkJcHVibGljIFN0cmluZyBnZXRQcm9wZXJ0eU5hbWUoSUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IgZGVzY3JpcHRvcikgeworCQkJCQl0cnkgeworCQkJCQkJcmV0dXJuIEV4YW1wbGVEaXNlYXNlV2l6YXJkTWVzc2FnZXMKKwkJCQkJCQkJLmdldFN0cmluZygoKEVTdHJ1Y3R1cmFsRmVhdHVyZSkgZGVzY3JpcHRvcgorCQkJCQkJCQkJCS5nZXRGZWF0dXJlKG51bGwpKS5nZXROYW1lKCkpOworCQkJCQl9IGNhdGNoIChNaXNzaW5nUmVzb3VyY2VFeGNlcHRpb24gZSkgeworCQkJCQkJcmV0dXJuIHN1cGVyLmdldFByb3BlcnR5TmFtZShkZXNjcmlwdG9yKTsKKwkJCQkJfQorCQkJCX0gLy8gZ2V0UHJvcGVydHlOYW1lCisKKwkJCQkvKioKKwkJCQkgKiBAcGFyYW0gZGVzY3JpcHRvcgorCQkJCSAqIEByZXR1cm4gdGhlIE5MUydkIHRvb2wgdGlwIHRleHQgdGhhdCBkZXNjcmliZXMgdGhlIHByb3BlcnR5CisJCQkJICovCisJCQkJcHVibGljIFN0cmluZyBnZXRQcm9wZXJ0eVRvb2xUaXAoCisJCQkJCQlJSXRlbVByb3BlcnR5RGVzY3JpcHRvciBkZXNjcmlwdG9yKSB7CisJCQkJCXRyeSB7CisJCQkJCQlmaW5hbCBFU3RydWN0dXJhbEZlYXR1cmUgZmVhdHVyZSA9IChFU3RydWN0dXJhbEZlYXR1cmUpIGRlc2NyaXB0b3IKKwkJCQkJCQkJLmdldEZlYXR1cmUobnVsbCk7CisJCQkJCQlyZXR1cm4gRXhhbXBsZURpc2Vhc2VXaXphcmRNZXNzYWdlcy5nZXRTdHJpbmcoZmVhdHVyZQorCQkJCQkJCQkuZ2V0TmFtZSgpCisJCQkJCQkJCSsgVFRfU1VGRklYKTsKKwkJCQkJfSBjYXRjaCAoTWlzc2luZ1Jlc291cmNlRXhjZXB0aW9uIGUpIHsKKwkJCQkJCXJldHVybiBzdXBlci5nZXRQcm9wZXJ0eVRvb2xUaXAoZGVzY3JpcHRvcik7CisJCQkJCX0KKwkJCQl9IC8vIGdldFByb3BlcnR5VG9vbFRpcAorCisJCQkJLyoqCisJCQkJICogQHBhcmFtIGRlc2NyaXB0b3IKKwkJCQkgKiBAcmV0dXJuIHRoZSBOTFMnZCB0ZXh0IHRoYXQgcmVwcmVzZW50cyB0aGUgdW5pdHMgb2YgdGhlCisJCQkJICogICAgICAgICBwcm9wZXJ0eQorCQkJCSAqLworCQkJCXB1YmxpYyBTdHJpbmcgZ2V0UHJvcGVydHlVbml0cygKKwkJCQkJCUlJdGVtUHJvcGVydHlEZXNjcmlwdG9yIGRlc2NyaXB0b3IpIHsKKwkJCQkJdHJ5IHsKKwkJCQkJCWZpbmFsIEVTdHJ1Y3R1cmFsRmVhdHVyZSBmZWF0dXJlID0gKEVTdHJ1Y3R1cmFsRmVhdHVyZSkgZGVzY3JpcHRvcgorCQkJCQkJCQkuZ2V0RmVhdHVyZShudWxsKTsKKwkJCQkJCXJldHVybiBFeGFtcGxlRGlzZWFzZVdpemFyZE1lc3NhZ2VzLmdldFN0cmluZyhmZWF0dXJlCisJCQkJCQkJCS5nZXROYW1lKCkKKwkJCQkJCQkJKyBVTklUX1NVRkZJWCk7CisJCQkJCX0gY2F0Y2ggKE1pc3NpbmdSZXNvdXJjZUV4Y2VwdGlvbiBlKSB7CisJCQkJCQlyZXR1cm4gc3VwZXIuZ2V0UHJvcGVydHlVbml0cyhkZXNjcmlwdG9yKTsKKwkJCQkJfQorCQkJCX0gLy8gZ2V0UHJvcGVydHlVbml0cworCQkJfTsKKwkJfSAvLyBpZiB3ZSBkaWRuJ3QgY3JlYXRlIG9uZSBiZWZvcmUKKwkJcmV0dXJuIGFkYXB0ZXI7CisJfS8vIGNyZWF0ZUV4YW1wbGVEaXNlYXNlTW9kZWxBZGFwdGVyKCkKKworfSAvLyBFeGFtcGxlUHJvcGVydHlTdHJpbmdQcm92aWRlckFkYXB0ZXJGYWN0b3J5CmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy5leGFtcGxlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL2Rpc2Vhc2Vtb2RlbHMvZXhhbXBsZS9wcmVzZW50YXRpb24vZXhhbXBsZWRpc2Vhc2VtZXNzYWdlcy5wcm9wZXJ0aWVzIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMuZXhhbXBsZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9kaXNlYXNlbW9kZWxzL2V4YW1wbGUvcHJlc2VudGF0aW9uL2V4YW1wbGVkaXNlYXNlbWVzc2FnZXMucHJvcGVydGllcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMTgwNTdiCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMuZXhhbXBsZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9kaXNlYXNlbW9kZWxzL2V4YW1wbGUvcHJlc2VudGF0aW9uL2V4YW1wbGVkaXNlYXNlbWVzc2FnZXMucHJvcGVydGllcwpAQCAtMCwwICsxLDM4IEBACisjIGRpc2Vhc2V3aXphcmRtZXNzYWdlcy5wcm9wZXJ0aWVzCisjCisjLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyMgKiBDb3B5cmlnaHQgKGMpIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisjICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworIyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorIyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisjICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyMgKgorIyAqIENvbnRyaWJ1dG9yczoKKyMgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisjICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworc2Vhc29uYWxNb2R1bGF0aW9uRXhwb25lbnQgPSBTZWFzb25hbCBNb2R1bGF0aW9uIEV4cG9uZW50CitzZWFzb25hbE1vZHVsYXRpb25FeHBvbmVudFRUID0gU2Vhc29uYWwgTW9kdWxhdGlvbiBFeHBvbmVudAorc2Vhc29uYWxNb2R1bGF0aW9uRXhwb25lbnRVTklUID0KK3NlYXNvbmFsTW9kdWxhdGlvbkV4cG9uZW50TUlTU0lORyA9IE1pc3NpbmcgU2Vhc29uYWwgTW9kdWxhdGlvbiBFeHBvbmVudC4KK3NlYXNvbmFsTW9kdWxhdGlvbkV4cG9uZW50SU5WQUxJRCA9IFNlYXNvbmFsIE1vZHVsYXRpb24gRXhwb25lbnQgaXMgaW52YWxpZC4KKworbW9kdWxhdGlvblBlcmlvZCA9IE1vZHVsYXRpb24gUGVyaW9kCittb2R1bGF0aW9uUGVyaW9kVFQgPSBNb2R1bGF0aW9uIFBlcmlvZAorbW9kdWxhdGlvblBlcmlvZFVOSVQgPSBEYXlzCittb2R1bGF0aW9uUGVyaW9kTUlTU0lORyA9IE1pc3NpbmcgTW9kdWxhdGlvbiBQZXJpb2QuCittb2R1bGF0aW9uUGVyaW9kSU5WQUxJRCA9IE1vZHVsYXRpb24gUGVyaW9kIGlzIGludmFsaWQuCisKK21vZHVsYXRpb25QaGFzZVNoaWZ0ID0gTW9kdWxhdGlvbiBQaGFzZSBTaGlmdAorbW9kdWxhdGlvblBoYXNlU2hpZnRUVCA9IE1vZHVsYXRpb24gUGhhc2UgU2hpZnQKK21vZHVsYXRpb25QaGFzZVNoaWZ0VU5JVCA9IERheXMKK21vZHVsYXRpb25QaGFzZU1JU1NJTkcgPSBNaXNzaW5nIE1vZHVsYXRpb24gUGhhc2UgU2hpZnQuCittb2R1bGF0aW9uUGhhc2VJTlZBTElEID0gTW9kdWxhdGlvbiBQaGFzZSBTaGlmdCBpcyBpbnZhbGlkLgorCitzZWFzb25hbE1vZHVsYXRpb25GbG9vciA9IFNlYXNvbmFsIE1vZHVsYXRpb24gRmxvb3IKK3NlYXNvbmFsTW9kdWxhdGlvbkZsb29yVFQgPSBTZWFzb25hbCBNb2R1bGF0aW9uIEZsb29yCitzZWFzb25hbE1vZHVsYXRpb25GbG9vclVOSVQgPQorc2Vhc29uYWxNb2R1bGF0aW9uRmxvb3JNSVNTSU5HID0gTWlzc2luZyBTZWFzb25hbCBNb2R1bGF0aW9uIEZsb29yLgorc2Vhc29uYWxNb2R1bGF0aW9uRmxvb3JJTlZBTElEID0gU2Vhc29uYWwgTW9kdWxhdGlvbiBGbG9vciBpcyBpbnZhbGlkLgorCmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy5leHBlcmltZW50YWwvLmNsYXNzcGF0aCBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzLmV4cGVyaW1lbnRhbC8uY2xhc3NwYXRoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMwNGU4NjEKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy5leHBlcmltZW50YWwvLmNsYXNzcGF0aApAQCAtMCwwICsxLDcgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8Y2xhc3NwYXRoPgorCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJzcmMiIHBhdGg9InNyYyIvPgorCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJjb24iIHBhdGg9Im9yZy5lY2xpcHNlLmpkdC5sYXVuY2hpbmcuSlJFX0NPTlRBSU5FUi9vcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwuZGVidWcudWkubGF1bmNoZXIuU3RhbmRhcmRWTVR5cGUvSjJTRS0xLjUiLz4KKwk8Y2xhc3NwYXRoZW50cnkga2luZD0iY29uIiBwYXRoPSJvcmcuZWNsaXBzZS5wZGUuY29yZS5yZXF1aXJlZFBsdWdpbnMiLz4KKwk8Y2xhc3NwYXRoZW50cnkga2luZD0ib3V0cHV0IiBwYXRoPSJiaW4iLz4KKzwvY2xhc3NwYXRoPgpkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMuZXhwZXJpbWVudGFsLy5wcm9qZWN0IGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMuZXhwZXJpbWVudGFsLy5wcm9qZWN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBhZTczMWEKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy5leHBlcmltZW50YWwvLnByb2plY3QKQEAgLTAsMCArMSwyOCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxwcm9qZWN0RGVzY3JpcHRpb24+CisJPG5hbWU+b3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzLmV4cGVyaW1lbnRhbDwvbmFtZT4KKwk8Y29tbWVudD48L2NvbW1lbnQ+CisJPHByb2plY3RzPgorCTwvcHJvamVjdHM+CisJPGJ1aWxkU3BlYz4KKwkJPGJ1aWxkQ29tbWFuZD4KKwkJCTxuYW1lPm9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFidWlsZGVyPC9uYW1lPgorCQkJPGFyZ3VtZW50cz4KKwkJCTwvYXJndW1lbnRzPgorCQk8L2J1aWxkQ29tbWFuZD4KKwkJPGJ1aWxkQ29tbWFuZD4KKwkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5NYW5pZmVzdEJ1aWxkZXI8L25hbWU+CisJCQk8YXJndW1lbnRzPgorCQkJPC9hcmd1bWVudHM+CisJCTwvYnVpbGRDb21tYW5kPgorCQk8YnVpbGRDb21tYW5kPgorCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLlNjaGVtYUJ1aWxkZXI8L25hbWU+CisJCQk8YXJndW1lbnRzPgorCQkJPC9hcmd1bWVudHM+CisJCTwvYnVpbGRDb21tYW5kPgorCTwvYnVpbGRTcGVjPgorCTxuYXR1cmVzPgorCQk8bmF0dXJlPm9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFuYXR1cmU8L25hdHVyZT4KKwkJPG5hdHVyZT5vcmcuZWNsaXBzZS5wZGUuUGx1Z2luTmF0dXJlPC9uYXR1cmU+CisJPC9uYXR1cmVzPgorPC9wcm9qZWN0RGVzY3JpcHRpb24+CmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy5leHBlcmltZW50YWwvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMuZXhwZXJpbWVudGFsLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMjhlNjVkCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMuZXhwZXJpbWVudGFsLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcwpAQCAtMCwwICsxLDggQEAKKyNXZWQgTWFyIDMwIDE1OjI4OjQzIFBEVCAyMDExCitlY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29kZWdlbi5pbmxpbmVKc3JCeXRlY29kZT1lbmFibGVkCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb2RlZ2VuLnRhcmdldFBsYXRmb3JtPTEuNQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29tcGxpYW5jZT0xLjUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uYXNzZXJ0SWRlbnRpZmllcj1lcnJvcgorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5lbnVtSWRlbnRpZmllcj1lcnJvcgorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuc291cmNlPTEuNQpkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMuZXhwZXJpbWVudGFsL01FVEEtSU5GL01BTklGRVNULk1GIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMuZXhwZXJpbWVudGFsL01FVEEtSU5GL01BTklGRVNULk1GCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJkYjJlZmEKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy5leHBlcmltZW50YWwvTUVUQS1JTkYvTUFOSUZFU1QuTUYKQEAgLTAsMCArMSwyMyBAQAorTWFuaWZlc3QtVmVyc2lvbjogMS4wCitCdW5kbGUtTWFuaWZlc3RWZXJzaW9uOiAyCitCdW5kbGUtTmFtZTogJXBsdWdpbk5hbWUKK0J1bmRsZS1TeW1ib2xpY05hbWU6IG9yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy5leHBlcmltZW50YWw7c2luZ2xldG9uOj10cnVlCitCdW5kbGUtVmVyc2lvbjogMS4yLjEKK0J1bmRsZS1DbGFzc1BhdGg6IC4KK0J1bmRsZS1BY3RpdmF0b3I6IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leHBlcmltZW50YWwucHJlc2VudGF0aW9uLkV4cGVyaW1lbnRhbEVkaXRvclBsdWdpbiRJbXBsZW1lbnRhdGlvbgorQnVuZGxlLVZlbmRvcjogJXByb3ZpZGVyTmFtZQorQnVuZGxlLUxvY2FsaXphdGlvbjogcGx1Z2luCitCdW5kbGUtUmVxdWlyZWRFeGVjdXRpb25FbnZpcm9ubWVudDogSjJTRS0xLjUKK0V4cG9ydC1QYWNrYWdlOiBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXhwZXJpbWVudGFsLnByZXNlbnRhdGlvbgorUmVxdWlyZS1CdW5kbGU6IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZSwKKyBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlczt2aXNpYmlsaXR5Oj1yZWV4cG9ydCwKKyBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXhwZXJpbWVudGFsO3Zpc2liaWxpdHk6PXJlZXhwb3J0LAorIG9yZy5lY2xpcHNlLmVtZi5lY29yZS54bWk7dmlzaWJpbGl0eTo9cmVleHBvcnQsCisgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWk7dmlzaWJpbGl0eTo9cmVleHBvcnQsCisgb3JnLmVjbGlwc2UudWkuaWRlO3Zpc2liaWxpdHk6PXJlZXhwb3J0LAorIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVsczt2aXNpYmlsaXR5Oj1yZWV4cG9ydCwKKyBvcmcuZWNsaXBzZS5zdGVtLmNvcmU7dmlzaWJpbGl0eTo9cmVleHBvcnQsCisgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9uczt2aXNpYmlsaXR5Oj1yZWV4cG9ydCwKKyBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuZWRpdDt2aXNpYmlsaXR5Oj1yZWV4cG9ydCwKKyBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHM7dmlzaWJpbGl0eTo9cmVleHBvcnQKK0J1bmRsZS1BY3RpdmF0aW9uUG9saWN5OiBsYXp5CmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy5leHBlcmltZW50YWwvYnVpbGQucHJvcGVydGllcyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzLmV4cGVyaW1lbnRhbC9idWlsZC5wcm9wZXJ0aWVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZhOTZkMjAKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy5leHBlcmltZW50YWwvYnVpbGQucHJvcGVydGllcwpAQCAtMCwwICsxLDE3IEBACisKKyMgPGNvcHlyaWdodD4KKyMgPC9jb3B5cmlnaHQ+CisjCisjICRJZCQKKworYmluLmluY2x1ZGVzID0gLixcCisgICAgICAgICAgICAgICBpY29ucy8sXAorICAgICAgICAgICAgICAgTUVUQS1JTkYvLFwKKyAgICAgICAgICAgICAgIHBsdWdpbi54bWwsXAorICAgICAgICAgICAgICAgcGx1Z2luLnByb3BlcnRpZXMsXAorICAgICAgICAgICAgICAgcGx1Z2luX2RlLnByb3BlcnRpZXMsXAorICAgICAgICAgICAgICAgcGx1Z2luX2tyLnByb3BlcnRpZXMsXAorICAgICAgICAgICAgICAgcGx1Z2luX3poLnByb3BlcnRpZXMKK2phcnMuY29tcGlsZS5vcmRlciA9IC4KK3NvdXJjZS4uID0gc3JjLworb3V0cHV0Li4gPSBiaW4vCmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy5leHBlcmltZW50YWwvaWNvbnMvZnVsbC9vYmoxNi9FeHBlcmltZW50YWxNb2RlbEZpbGUuZ2lmIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMuZXhwZXJpbWVudGFsL2ljb25zL2Z1bGwvb2JqMTYvRXhwZXJpbWVudGFsTW9kZWxGaWxlLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZTVlMTlhCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMuZXhwZXJpbWVudGFsL2ljb25zL2Z1bGwvb2JqMTYvRXhwZXJpbWVudGFsTW9kZWxGaWxlLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy5leHBlcmltZW50YWwvaWNvbnMvZnVsbC93aXpiYW4vTmV3RXhwZXJpbWVudGFsLmdpZiBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzLmV4cGVyaW1lbnRhbC9pY29ucy9mdWxsL3dpemJhbi9OZXdFeHBlcmltZW50YWwuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVkYjU0MjMKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy5leHBlcmltZW50YWwvaWNvbnMvZnVsbC93aXpiYW4vTmV3RXhwZXJpbWVudGFsLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy5leHBlcmltZW50YWwvcGx1Z2luLnByb3BlcnRpZXMgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy5leHBlcmltZW50YWwvcGx1Z2luLnByb3BlcnRpZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmJhMzg3NwotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzLmV4cGVyaW1lbnRhbC9wbHVnaW4ucHJvcGVydGllcwpAQCAtMCwwICsxLDU3IEBACisKKyMgPGNvcHlyaWdodD4KKyMgPC9jb3B5cmlnaHQ+CisjCisjICRJZCQKKworcGx1Z2luTmFtZSA9IEV4cGVyaW1lbnRhbCBFZGl0b3IKK3Byb3ZpZGVyTmFtZSA9IHd3dy5leGFtcGxlLm9yZworCitfVUlfRXhwZXJpbWVudGFsRWRpdG9yX21lbnUgPSAmRXhwZXJpbWVudGFsIEVkaXRvcgorCitfVUlfQ3JlYXRlQ2hpbGRfbWVudV9pdGVtID0gJk5ldyBDaGlsZAorX1VJX0NyZWF0ZVNpYmxpbmdfbWVudV9pdGVtID0gTiZldyBTaWJsaW5nCisKK19VSV9TaG93UHJvcGVydGllc1ZpZXdfbWVudV9pdGVtID0gU2hvdyAmUHJvcGVydGllcyBWaWV3CitfVUlfUmVmcmVzaFZpZXdlcl9tZW51X2l0ZW0gPSAmUmVmcmVzaAorCitfVUlfU2VsZWN0aW9uUGFnZV9sYWJlbCA9IFNlbGVjdGlvbgorX1VJX1BhcmVudFBhZ2VfbGFiZWwgPSBQYXJlbnQKK19VSV9MaXN0UGFnZV9sYWJlbCA9IExpc3QKK19VSV9UcmVlUGFnZV9sYWJlbCA9IFRyZWUKK19VSV9UYWJsZVBhZ2VfbGFiZWwgPSBUYWJsZQorX1VJX1RyZWVXaXRoQ29sdW1uc1BhZ2VfbGFiZWwgPSBUcmVlIHdpdGggQ29sdW1ucworX1VJX09iamVjdENvbHVtbl9sYWJlbCA9IE9iamVjdAorX1VJX1NlbGZDb2x1bW5fbGFiZWwgPSBTZWxmCisKK19VSV9Ob09iamVjdFNlbGVjdGVkID0gU2VsZWN0ZWQgTm90aGluZworX1VJX1NpbmdsZU9iamVjdFNlbGVjdGVkID0gU2VsZWN0ZWQgT2JqZWN0OiB7MH0KK19VSV9NdWx0aU9iamVjdFNlbGVjdGVkID0gU2VsZWN0ZWQgezB9IE9iamVjdHMKKworX1VJX09wZW5FZGl0b3JFcnJvcl9sYWJlbCA9IE9wZW4gRWRpdG9yCisKK19VSV9XaXphcmRfY2F0ZWdvcnkgPSBFeGFtcGxlIEVNRiBNb2RlbCBDcmVhdGlvbiBXaXphcmRzCisKK19VSV9DcmVhdGVNb2RlbEVycm9yX21lc3NhZ2UgPSBQcm9ibGVtcyBlbmNvdW50ZXJlZCBpbiBmaWxlICJ7MH0iCisKK19VSV9FeHBlcmltZW50YWxNb2RlbFdpemFyZF9sYWJlbCA9IEV4cGVyaW1lbnRhbCBNb2RlbAorX1VJX0V4cGVyaW1lbnRhbE1vZGVsV2l6YXJkX2Rlc2NyaXB0aW9uID0gQ3JlYXRlIGEgbmV3IEV4cGVyaW1lbnRhbCBtb2RlbAorCitfVUlfRXhwZXJpbWVudGFsRWRpdG9yX2xhYmVsID0gRXhwZXJpbWVudGFsIE1vZGVsIEVkaXRvcgorCitfVUlfRXhwZXJpbWVudGFsRWRpdG9yRmlsZW5hbWVEZWZhdWx0QmFzZSA9IE15CitfVUlfRXhwZXJpbWVudGFsRWRpdG9yRmlsZW5hbWVFeHRlbnNpb25zID0gZXhwZXJpbWVudGFsCisKK19VSV9XaXphcmRfbGFiZWwgPSBOZXcKKworX1dBUk5fRmlsZW5hbWVFeHRlbnNpb24gPSBUaGUgZmlsZSBuYW1lIG11c3QgZW5kIGluICcnLnswfScnCitfV0FSTl9GaWxlbmFtZUV4dGVuc2lvbnMgPSBUaGUgZmlsZSBuYW1lIG11c3QgaGF2ZSBvbmUgb2YgdGhlIGZvbGxvd2luZyBleHRlbnNpb25zOiB7MH0KKworX1VJX01vZGVsT2JqZWN0ID0gJk1vZGVsIE9iamVjdAorX1VJX1hNTEVuY29kaW5nID0gJlhNTCBFbmNvZGluZworX1VJX1hNTEVuY29kaW5nQ2hvaWNlcyA9IFVURi04IEFTQ0lJIFVURi0xNiBVVEYtMTZCRSBVVEYtMTZMRSBJU08tODg1OS0xCitfVUlfV2l6YXJkX2luaXRpYWxfb2JqZWN0X2Rlc2NyaXB0aW9uID0gU2VsZWN0IGEgbW9kZWwgb2JqZWN0IHRvIGNyZWF0ZQorCitfVUlfRmlsZUNvbmZsaWN0X2xhYmVsID0gRmlsZSBDb25mbGljdAorX1dBUk5fRmlsZUNvbmZsaWN0ID0gVGhlcmUgYXJlIHVuc2F2ZWQgY2hhbmdlcyB0aGF0IGNvbmZsaWN0IHdpdGggY2hhbmdlcyBtYWRlIG91dHNpZGUgdGhlIGVkaXRvci4gIERvIHlvdSB3aXNoIHRvIGRpc2NhcmQgdGhpcyBlZGl0b3IncyBjaGFuZ2VzPworCmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy5leHBlcmltZW50YWwvcGx1Z2luLnhtbCBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzLmV4cGVyaW1lbnRhbC9wbHVnaW4ueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ3ZWRlYjgKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy5leHBlcmltZW50YWwvcGx1Z2luLnhtbApAQCAtMCwwICsxLDQzIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPD9lY2xpcHNlIHZlcnNpb249IjMuMCI/PgorCis8IS0tCisgPGNvcHlyaWdodD4KKyA8L2NvcHlyaWdodD4KKworICRJZCQKKy0tPgorCis8cGx1Z2luPgorCisgICA8ZXh0ZW5zaW9uIHBvaW50PSJvcmcuZWNsaXBzZS51aS5uZXdXaXphcmRzIj4KKyAgICAgIDxjYXRlZ29yeQorICAgICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLmVtZi5lY29yZS5XaXphcmQuY2F0ZWdvcnkuSUQiCisgICAgICAgICAgICBuYW1lPSIlX1VJX1dpemFyZF9jYXRlZ29yeSIvPgorICAgICAgPHdpemFyZAorICAgICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leHBlcmltZW50YWwucHJlc2VudGF0aW9uLkV4cGVyaW1lbnRhbE1vZGVsV2l6YXJkSUQiCisgICAgICAgICAgICBuYW1lPSIlX1VJX0V4cGVyaW1lbnRhbE1vZGVsV2l6YXJkX2xhYmVsIgorICAgICAgICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leHBlcmltZW50YWwucHJlc2VudGF0aW9uLkV4cGVyaW1lbnRhbE1vZGVsV2l6YXJkIgorICAgICAgICAgICAgY2F0ZWdvcnk9Im9yZy5lY2xpcHNlLmVtZi5lY29yZS5XaXphcmQuY2F0ZWdvcnkuSUQiCisgICAgICAgICAgICBpY29uPSJpY29ucy9mdWxsL29iajE2L0V4cGVyaW1lbnRhbE1vZGVsRmlsZS5naWYiPgorICAgICAgICAgPGRlc2NyaXB0aW9uPiVfVUlfRXhwZXJpbWVudGFsTW9kZWxXaXphcmRfZGVzY3JpcHRpb248L2Rlc2NyaXB0aW9uPgorICAgICAgICAgPHNlbGVjdGlvbiBjbGFzcz0ib3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVJlc291cmNlIi8+CisgICAgICA8L3dpemFyZD4KKyAgIDwvZXh0ZW5zaW9uPgorCisgICA8ZXh0ZW5zaW9uIHBvaW50PSJvcmcuZWNsaXBzZS51aS5lZGl0b3JzIj4KKyAgICAgIDxlZGl0b3IKKyAgICAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXhwZXJpbWVudGFsLnByZXNlbnRhdGlvbi5FeHBlcmltZW50YWxFZGl0b3JJRCIKKyAgICAgICAgICAgIG5hbWU9IiVfVUlfRXhwZXJpbWVudGFsRWRpdG9yX2xhYmVsIgorICAgICAgICAgICAgaWNvbj0iaWNvbnMvZnVsbC9vYmoxNi9FeHBlcmltZW50YWxNb2RlbEZpbGUuZ2lmIgorICAgICAgICAgICAgZXh0ZW5zaW9ucz0iZXhwZXJpbWVudGFsIgorICAgICAgICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leHBlcmltZW50YWwucHJlc2VudGF0aW9uLkV4cGVyaW1lbnRhbEVkaXRvciIKKyAgICAgICAgICAgIGNvbnRyaWJ1dG9yQ2xhc3M9Im9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leHBlcmltZW50YWwucHJlc2VudGF0aW9uLkV4cGVyaW1lbnRhbEFjdGlvbkJhckNvbnRyaWJ1dG9yIj4KKyAgICAgIDwvZWRpdG9yPgorICAgPC9leHRlbnNpb24+CisgPGV4dGVuc2lvbgorICAgICAgICBwb2ludD0ib3JnLmVjbGlwc2UudWkuc3RhcnR1cCI+CisgICAgIDxzdGFydHVwCisgICAgICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMuZXhwZXJpbWVudGFsLmFkYXB0ZXJzLkV4cGVyaW1lbnRhbFJlbGF0aXZlVmFsdWVQcm92aWRlckFkYXB0ZXJGYWN0b3J5Ij48L3N0YXJ0dXA+CisgIDwvZXh0ZW5zaW9uPgorPC9wbHVnaW4+CmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy5leHBlcmltZW50YWwvcGx1Z2luX2RlLnByb3BlcnRpZXMgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy5leHBlcmltZW50YWwvcGx1Z2luX2RlLnByb3BlcnRpZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGFmNmNiYgotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzLmV4cGVyaW1lbnRhbC9wbHVnaW5fZGUucHJvcGVydGllcwpAQCAtMCwwICsxLDU3IEBACisKKyMgPGNvcHlyaWdodD4KKyMgPC9jb3B5cmlnaHQ+CisjCisjICRJZCQKKworcGx1Z2luTmFtZT1FeHBlcmltZW50YWwtRWRpdG9yCitwcm92aWRlck5hbWU9d3d3LmV4YW1wbGUub3JnCisKK19VSV9FeHBlcmltZW50YWxFZGl0b3JfbWVudT0mRXhwZXJpbWVudGFsIEVkaXRvcgorCitfVUlfQ3JlYXRlQ2hpbGRfbWVudV9pdGVtPSZOZXcgQ2hpbGQKK19VSV9DcmVhdGVTaWJsaW5nX21lbnVfaXRlbT1OJmV1ZXMgR2VzY2h3aXN0ZXJ0ZWlsCisKK19VSV9TaG93UHJvcGVydGllc1ZpZXdfbWVudV9pdGVtPVNob3cgJiBQcm9wZXJ0aWVzIFZpZXcKK19VSV9SZWZyZXNoVmlld2VyX21lbnVfaXRlbT0mUmVmcmVzaAorCitfVUlfU2VsZWN0aW9uUGFnZV9sYWJlbD1BdXN3YWhsCitfVUlfUGFyZW50UGFnZV9sYWJlbD1FbHRlcm50ZWlsCitfVUlfTGlzdFBhZ2VfbGFiZWw9TGlzdGUKK19VSV9UcmVlUGFnZV9sYWJlbD1CYXVtCitfVUlfVGFibGVQYWdlX2xhYmVsPVRhYmVsbGUKK19VSV9UcmVlV2l0aENvbHVtbnNQYWdlX2xhYmVsPUJhdW0gbWl0IFNwYWx0ZW4KK19VSV9PYmplY3RDb2x1bW5fbGFiZWw9T2JqZWt0CitfVUlfU2VsZkNvbHVtbl9sYWJlbD1TZWxic3QKKworX1VJX05vT2JqZWN0U2VsZWN0ZWQ9TmljaHRzIGF1c2dld1x1MDBlNGhsdAorX1VJX1NpbmdsZU9iamVjdFNlbGVjdGVkPUF1c2dld1x1MDBlNGhsdGVzIE9iamVrdDogezB9CitfVUlfTXVsdGlPYmplY3RTZWxlY3RlZD1BdXNnZXdcdTAwZTRobHRlIHswfSBPYmpla3RlCisKK19VSV9PcGVuRWRpdG9yRXJyb3JfbGFiZWw9RWRpdG9yIFx1MDBmNmZmbmVuCisKK19VSV9XaXphcmRfY2F0ZWdvcnk9QmVpc3BpZWwgRU1GIE1vZGVsbCBFcnN0ZWxsdW5nc2Fzc2lzdGVudAorCitfVUlfQ3JlYXRlTW9kZWxFcnJvcl9tZXNzYWdlPUF1ZmdldHJldGVuZSBQcm9ibGVtZSBpbiBkZXIgRGF0ZWkgInswfSIKKworX1VJX0V4cGVyaW1lbnRhbE1vZGVsV2l6YXJkX2xhYmVsPUV4cGVyaW1lbnRhbC1Nb2RlbGwKK19VSV9FeHBlcmltZW50YWxNb2RlbFdpemFyZF9kZXNjcmlwdGlvbj1OZXVlcyBFeHBlcmltZW50LU1vZGVsbCBlcnN0ZWxsZW4KKworX1VJX0V4cGVyaW1lbnRhbEVkaXRvcl9sYWJlbD1FeHBlcmltZW50YWwtTW9kZWxsZWRpdG9yCisKK19VSV9FeHBlcmltZW50YWxFZGl0b3JGaWxlbmFtZURlZmF1bHRCYXNlPU1laW4KK19VSV9FeHBlcmltZW50YWxFZGl0b3JGaWxlbmFtZUV4dGVuc2lvbnM9ZXhwZXJpbWVudGVsbAorCitfVUlfV2l6YXJkX2xhYmVsPU5ldQorCitfV0FSTl9GaWxlbmFtZUV4dGVuc2lvbj1EZXIgRGF0ZWluYW1lIG11c3MgYXVmICIuezB9IiBlbmRlbgorX1dBUk5fRmlsZW5hbWVFeHRlbnNpb25zPURlciBEYXRlaW5hbWUgbXVzcyBlaW5lIGRlciBmb2xnZW5kZW4gRW5kdW5nZW4gaGFiZW46IHswfQorCitfVUlfTW9kZWxPYmplY3Q9Jk1vZGVsIE9iamVjdAorX1VJX1hNTEVuY29kaW5nPSZYTUwgRW5jb2RpbmcKK19VSV9YTUxFbmNvZGluZ0Nob2ljZXM9VVRGLTggQVNDSUkgVVRGLTE2IFVURi0xNkJFIFVURi0xNkxFIElTTy04ODU5LTEKK19VSV9XaXphcmRfaW5pdGlhbF9vYmplY3RfZGVzY3JpcHRpb249WnUgZXJ6ZXVnZW5kZXMgTW9kZWxsb2JqZWt0IHdcdTAwZTRobGVuCisKK19VSV9GaWxlQ29uZmxpY3RfbGFiZWw9RGF0ZWlrb25mbGlrdAorX1dBUk5fRmlsZUNvbmZsaWN0PUVzIGdpYnQgbmljaHQgZ2VzcGVpY2hlcnRlIFx1MDBjNG5kZXJ1bmdlbiwgZGllIEtvbmZsaWt0ZSBtaXQgXHUwMGM0bmRlcnVuZ2VuIGF1XHUwMGRmZXJoYWxiIGRlcyBFZGl0b3JzIGVyemV1Z2VuLiBNXHUwMGY2Y2h0ZW4gU2llIGRpZSBcdTAwYzRuZGVydW5nZW4gaW0gRWRpdG9yIHZlcndlcmZlbj8KKwpkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMuZXhwZXJpbWVudGFsL3BsdWdpbl9rci5wcm9wZXJ0aWVzIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMuZXhwZXJpbWVudGFsL3BsdWdpbl9rci5wcm9wZXJ0aWVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNhMzM5ZjYKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy5leHBlcmltZW50YWwvcGx1Z2luX2tyLnByb3BlcnRpZXMKQEAgLTAsMCArMSw1NyBAQAorCisjIDxjb3B5cmlnaHQ+CisjIDwvY29weXJpZ2h0PgorIworIyAkSWQkCisKK3BsdWdpbk5hbWU9XHVjMmU0XHVkNWQ4IFx1ZDNiOFx1YzlkMVx1YWUzMAorcHJvdmlkZXJOYW1lPXd3dy5leGFtcGxlLm9yZworCitfVUlfRXhwZXJpbWVudGFsRWRpdG9yX21lbnU9JkV4cGVyaW1lbnRhbCBFZGl0b3IKKworX1VJX0NyZWF0ZUNoaWxkX21lbnVfaXRlbT0mTmV3IENoaWxkCitfVUlfQ3JlYXRlU2libGluZ19tZW51X2l0ZW09TiYgIFx1ZDYxNVx1YzgxYyBcdWM3OTBcdWI5ZTQKKworX1VJX1Nob3dQcm9wZXJ0aWVzVmlld19tZW51X2l0ZW09XHVkNDVjXHVjMmRjIFx1YmMwZiBcdWMxOGRcdWMxMzFcdWJjZjRcdWFlMzAKK19VSV9SZWZyZXNoVmlld2VyX21lbnVfaXRlbT0mUmVmcmVzaAorCitfVUlfU2VsZWN0aW9uUGFnZV9sYWJlbD1cdWMxMjBcdWQwZGQKK19VSV9QYXJlbnRQYWdlX2xhYmVsPVx1YmQ4MFx1YmFhOAorX1VJX0xpc3RQYWdlX2xhYmVsPVx1YmFhOVx1Yjg1ZAorX1VJX1RyZWVQYWdlX2xhYmVsPVx1YjA5OFx1YmIzNAorX1VJX1RhYmxlUGFnZV9sYWJlbD1cdWQxNGNcdWM3NzRcdWJlMTQKK19VSV9UcmVlV2l0aENvbHVtbnNQYWdlX2xhYmVsPVx1YjA5OFx1YmIzNFx1YzY0MCBcdWM1ZjQKK19VSV9PYmplY3RDb2x1bW5fbGFiZWw9XHVhYzFjXHVjY2I0CitfVUlfU2VsZkNvbHVtbl9sYWJlbD1cdWMxNDBcdWQ1MDQKKworX1VJX05vT2JqZWN0U2VsZWN0ZWQ9XHVjNTQ0XHViYjM0XHVhYzgzXHViM2M0IFx1YzU0OCBcdWMxMjBcdWQwZGRcdWQ1NjgKK19VSV9TaW5nbGVPYmplY3RTZWxlY3RlZD1cdWMxMjBcdWQwZGRcdWQ1NWMgXHVhYzFkXHVjY2I0IDogezB9CitfVUlfTXVsdGlPYmplY3RTZWxlY3RlZD1cdWMxMjBcdWQwZGRcdWI0MWMgezB9IFx1YWMxZFx1Y2NiNAorCitfVUlfT3BlbkVkaXRvckVycm9yX2xhYmVsPVx1YzYyNFx1ZDUwOCBcdWM1ZDBcdWI1MTRcdWQxMzAKKworX1VJX1dpemFyZF9jYXRlZ29yeT1cdWM2MDhcdWM4MWMgRU1GIFx1YmFhOFx1YjM3OCBcdWMwZGRcdWMxMzEgXHViOWM4XHViYzk1XHVjMGFjCisKK19VSV9DcmVhdGVNb2RlbEVycm9yX21lc3NhZ2U9XHVkMzBjXHVjNzdjICd7MH0gIlx1YzVkMFx1YzExYyBcdWJiMzhcdWM4MWMgXHViYzFjXHVjMGRkCisKK19VSV9FeHBlcmltZW50YWxNb2RlbFdpemFyZF9sYWJlbD1cdWMyZTRcdWQ1ZDggXHViYWE4XHViMzc4CitfVUlfRXhwZXJpbWVudGFsTW9kZWxXaXphcmRfZGVzY3JpcHRpb249XHVjMGM4XHViODVjXHVjNmI0IFx1YzJlNFx1ZDVkOCBcdWJhYThcdWIzNzhcdWM3NDQgXHViOWNjXHViNGU0XHVhZTMwCisKK19VSV9FeHBlcmltZW50YWxFZGl0b3JfbGFiZWw9XHVjMmU0XHVkNWQ4IFx1YmFhOFx1YjM3OCBcdWQzYjhcdWM5ZDFcdWFlMzAKKworX1VJX0V4cGVyaW1lbnRhbEVkaXRvckZpbGVuYW1lRGVmYXVsdEJhc2U9XHViMDk4XHVjNzU4CitfVUlfRXhwZXJpbWVudGFsRWRpdG9yRmlsZW5hbWVFeHRlbnNpb25zPVx1YzJlNFx1ZDVkOAorCitfVUlfV2l6YXJkX2xhYmVsPVx1YzBjOFx1Yjg1Y1x1YzZiNAorCitfV0FSTl9GaWxlbmFtZUV4dGVuc2lvbj1cdWQzMGNcdWM3N2MgXHVjNzc0XHViOTg0XHVjNzQwICIuezB9Ilx1Yjg1YyBcdWIwNWRcdWIwOThcdWM1N2NcdWQ1NjguCitfV0FSTl9GaWxlbmFtZUV4dGVuc2lvbnM9XHVkMzBjXHVjNzdjIFx1Yzc3NFx1Yjk4NFx1Yzc0MCBcdWIyZTRcdWM3NGMgXHVkNjU1XHVjN2E1XHVjNzkwIFx1YzkxMSBcdWQ1NThcdWIwOThcdWI5N2MgXHVhYzAwXHVjODM4XHVjNTdjXHVkNTY4IDogezB9CisKK19VSV9Nb2RlbE9iamVjdD0mTW9kZWwgT2JqZWN0CitfVUlfWE1MRW5jb2Rpbmc9JlhNTCBFbmNvZGluZworX1VJX1hNTEVuY29kaW5nQ2hvaWNlcz1VVEYgLSA4IEFTQ0lJIFVURiAtIDE2IFVURiAtIDE2QkUgVVRGIC0gMTZMRSBJU08gLSA4ODU5IC0gMQorX1VJX1dpemFyZF9pbml0aWFsX29iamVjdF9kZXNjcmlwdGlvbj1cdWMwZGRcdWMxMzFcdWQ1NjAgXHViYWE4XHViMzc4IFx1YWMxY1x1Y2NiNCBcdWMxMjBcdWQwZGQKKworX1VJX0ZpbGVDb25mbGljdF9sYWJlbD1cdWQzMGNcdWM3N2MgXHVjZGE5XHViM2NjCitfV0FSTl9GaWxlQ29uZmxpY3Q9XHVjODAwXHVjN2E1XHViNDE4XHVjOWMwIFx1YzU0YVx1Yzc0MCBcdWMwYWNcdWQ1NmRcdWI0ZTRcdWM3NzQgXHVkM2I4XHVjOWQxXHVhZTMwIFx1YzY3OFx1YmQ4MFx1Yzc1OCBcdWJjYzBcdWFjYmQgXHVjMGFjXHVkNTZkXHViNGU0XHVhY2ZjIFx1Y2RhOVx1YjNjY1x1ZDU2OC4gXHVjNzc0IFx1ZDNiOFx1YzlkMVx1YWUzMFx1Yzc1OCBcdWJjYzBcdWFjYmQgXHVjMGFjXHVkNTZkXHViNGU0XHVjNzQ0IFx1Y2RlOFx1YzE4YyBcdWQ1NThcdWMyZGNcdWFjYTBcdWMyYjVcdWIyYzhcdWFlNGM/CisKZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzLmV4cGVyaW1lbnRhbC9wbHVnaW5femgucHJvcGVydGllcyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzLmV4cGVyaW1lbnRhbC9wbHVnaW5femgucHJvcGVydGllcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMDk0ZDE4Ci0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMuZXhwZXJpbWVudGFsL3BsdWdpbl96aC5wcm9wZXJ0aWVzCkBAIC0wLDAgKzEsNTcgQEAKKworIyA8Y29weXJpZ2h0PgorIyA8L2NvcHlyaWdodD4KKyMKKyMgJElkJAorCitwbHVnaW5OYW1lPVx1NWI5ZVx1OWE4Y1x1N2YxNlx1OGY5MVx1NTY2OAorcHJvdmlkZXJOYW1lPXd3dy5leGFtcGxlLm9yZworCitfVUlfRXhwZXJpbWVudGFsRWRpdG9yX21lbnU9JkV4cGVyaW1lbnRhbCBFZGl0b3IKKworX1VJX0NyZWF0ZUNoaWxkX21lbnVfaXRlbT0mTmV3IENoaWxkCitfVUlfQ3JlYXRlU2libGluZ19tZW51X2l0ZW09XHU2NWIwXHU3NTFmXHU2MjEwXHU0ZTAwXHU0ZTJhXHU1MTQ0XHU1ZjFmXHU3YzdiCisKK19VSV9TaG93UHJvcGVydGllc1ZpZXdfbWVudV9pdGVtPVx1NjYzZVx1NzkzYVx1NTQ4Y1x1NWM1ZVx1NjAyN1x1NjdlNVx1NzcwYgorX1VJX1JlZnJlc2hWaWV3ZXJfbWVudV9pdGVtPSZSZWZyZXNoCisKK19VSV9TZWxlY3Rpb25QYWdlX2xhYmVsPVx1OTAwOVx1NjJlOQorX1VJX1BhcmVudFBhZ2VfbGFiZWw9XHU1YmI2XHU5NTdmCitfVUlfTGlzdFBhZ2VfbGFiZWw9XHU3NmVlXHU1ZjU1CitfVUlfVHJlZVBhZ2VfbGFiZWw9XHU2ODExCitfVUlfVGFibGVQYWdlX2xhYmVsPVx1ODg2OAorX1VJX1RyZWVXaXRoQ29sdW1uc1BhZ2VfbGFiZWw9XHU1MjA2XHU1MjE3XHU3Njg0XHU2ODExCitfVUlfT2JqZWN0Q29sdW1uX2xhYmVsPVx1NWJmOVx1OGM2MQorX1VJX1NlbGZDb2x1bW5fbGFiZWw9XHU4MWVhXHU1ZGYxCisKK19VSV9Ob09iamVjdFNlbGVjdGVkPVx1NjVlMFx1OTAwOVx1NWI5YVx1NTE4NVx1NWJiOQorX1VJX1NpbmdsZU9iamVjdFNlbGVjdGVkPVx1OTAwOVx1NjJlOVx1NWJmOVx1OGM2MVx1ZmYxYXswfQorX1VJX011bHRpT2JqZWN0U2VsZWN0ZWQ9XHU5MDA5XHU2MmU5ezB9XHU1YmY5XHU4YzYxCisKK19VSV9PcGVuRWRpdG9yRXJyb3JfbGFiZWw9XHU2MjUzXHU1ZjAwXHU3ZjE2XHU4ZjkxXHU1NjY4CisKK19VSV9XaXphcmRfY2F0ZWdvcnk9XHU0ZjhiXHU1OTgyRU1GXHU2YTIxXHU1NzhiXHU1MjFiXHU1ZWZhXHU1NDExXHU1YmZjCisKK19VSV9DcmVhdGVNb2RlbEVycm9yX21lc3NhZ2U9XHU1NzI4XHU2NTg3XHU0ZWY2XHUyMDFjezB9XHUyMDFkXHU0ZTJkXHU5MDQ3XHU1MjMwXHU3Njg0XHU5NWVlXHU5ODk4CisKK19VSV9FeHBlcmltZW50YWxNb2RlbFdpemFyZF9sYWJlbD1cdTViOWVcdTlhOGNcdTZhMjFcdTU3OGIKK19VSV9FeHBlcmltZW50YWxNb2RlbFdpemFyZF9kZXNjcmlwdGlvbj1cdTUyMWJcdTVlZmFcdTRlMDBcdTRlMmFcdTY1YjBcdTc2ODRcdTViOWVcdTlhOGNcdTZhMjFcdTU3OGIKKworX1VJX0V4cGVyaW1lbnRhbEVkaXRvcl9sYWJlbD1cdTViOWVcdTlhOGNcdTZhMjFcdTU3OGJcdTdmMTZcdThmOTFcdTU2NjgKKworX1VJX0V4cGVyaW1lbnRhbEVkaXRvckZpbGVuYW1lRGVmYXVsdEJhc2U9XHU2MjExXHU3Njg0CitfVUlfRXhwZXJpbWVudGFsRWRpdG9yRmlsZW5hbWVFeHRlbnNpb25zPVx1NWI5ZVx1OWE4Y1x1NjAyN1x1NzY4NAorCitfVUlfV2l6YXJkX2xhYmVsPVx1NjViMFx1NWVmYQorCitfV0FSTl9GaWxlbmFtZUV4dGVuc2lvbj1cdTY1ODdcdTRlZjZcdTU0MGRcdTVmYzVcdTk4N2JcdTRlZTUnezB9ICcnXHU3ZWQzXHU1YzNlCitfV0FSTl9GaWxlbmFtZUV4dGVuc2lvbnM9XHU2NTg3XHU0ZWY2XHU1NDBkXHU1ZmM1XHU5ODdiXHU1MTc3XHU2NzA5XHU0ZWU1XHU0ZTBiXHU2MjY5XHU1YzU1XHU1NDBkXHU0ZTRiXHU0ZTAwXHVmZjFhezB9CisKK19VSV9Nb2RlbE9iamVjdD0mTW9kZWwgT2JqZWN0CitfVUlfWE1MRW5jb2Rpbmc9JlhNTCBFbmNvZGluZworX1VJX1hNTEVuY29kaW5nQ2hvaWNlcz1VVEYtOCBBU0NJSSBVVEYtMTYgVVRGLTE2QkUgVVRGLTE2TEUgSVNPLTg4NTktMQorX1VJX1dpemFyZF9pbml0aWFsX29iamVjdF9kZXNjcmlwdGlvbj1cdTkwMDlcdTYyZTlcdTUyMWJcdTVlZmFcdTRlMDBcdTRlMmFcdTZhMjFcdTU3OGJcdTViZjlcdThjNjEKKworX1VJX0ZpbGVDb25mbGljdF9sYWJlbD1cdTY1ODdcdTRlZjZcdTUxYjJcdTdhODEKK19XQVJOX0ZpbGVDb25mbGljdD1cdTY3MDlcdTY3MmFcdTRmZGRcdTViNThcdTc2ODRcdTY2ZjRcdTY1MzlcdTRlMGVcdTdmMTZcdThmOTFcdTU2NjhcdTU5MTZcdTc2ODRcdTY2ZjRcdTY1MzlcdTUxYjJcdTdhODFcdTMwMDJcdTRmNjBcdTYwZjNcdTY1M2VcdTVmMDNcdThmZDlcdTRlMmFcdTdmMTZcdThmOTFcdTU2NjhcdTc2ODRcdTY2ZjRcdTY1MzlcdTU0MTdcdWZmMWYKKwpkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMuZXhwZXJpbWVudGFsL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvZXhwZXJpbWVudGFsL3ByZXNlbnRhdGlvbi9FeHBlcmltZW50YWxBY3Rpb25CYXJDb250cmlidXRvci5qYXZhIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMuZXhwZXJpbWVudGFsL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvZXhwZXJpbWVudGFsL3ByZXNlbnRhdGlvbi9FeHBlcmltZW50YWxBY3Rpb25CYXJDb250cmlidXRvci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFlY2M2NmQKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy5leHBlcmltZW50YWwvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9leHBlcmltZW50YWwvcHJlc2VudGF0aW9uL0V4cGVyaW1lbnRhbEFjdGlvbkJhckNvbnRyaWJ1dG9yLmphdmEKQEAgLTAsMCArMSw0MjcgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4cGVyaW1lbnRhbC5wcmVzZW50YXRpb247CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIAorICogQ29weXJpZ2h0IChjKSAyMDExIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiAKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdCAKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sIAorICogCisgKiBDb250cmlidXRvcnM6IAorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiAKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udWkudmlld2VyLklWaWV3ZXJQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5kb21haW4uRWRpdGluZ0RvbWFpbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5kb21haW4uSUVkaXRpbmdEb21haW5Qcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5hY3Rpb24uQ29udHJvbEFjdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5hY3Rpb24uQ3JlYXRlQ2hpbGRBY3Rpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkuYWN0aW9uLkNyZWF0ZVNpYmxpbmdBY3Rpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkuYWN0aW9uLkVkaXRpbmdEb21haW5BY3Rpb25CYXJDb250cmlidXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5hY3Rpb24uTG9hZFJlc291cmNlQWN0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmFjdGlvbi5WYWxpZGF0ZUFjdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uQWN0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5BY3Rpb25Db250cmlidXRpb25JdGVtOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JQWN0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JQ29udHJpYnV0aW9uSXRlbTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSUNvbnRyaWJ1dGlvbk1hbmFnZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklNZW51TGlzdGVuZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklNZW51TWFuYWdlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSVRvb2xCYXJNYW5hZ2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5NZW51TWFuYWdlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uU2VwYXJhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5TdWJDb250cmlidXRpb25JdGVtOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU3RydWN0dXJlZFNlbGVjdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlNlbGVjdGlvbkNoYW5nZWRFdmVudDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlZpZXdlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5JRWRpdG9yUGFydDsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5QYXJ0SW5pdEV4Y2VwdGlvbjsKKworLyoqCisgKiBUaGlzIGlzIHRoZSBhY3Rpb24gYmFyIGNvbnRyaWJ1dG9yIGZvciB0aGUgRXhwZXJpbWVudGFsIG1vZGVsIGVkaXRvci4KKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIEV4cGVyaW1lbnRhbEFjdGlvbkJhckNvbnRyaWJ1dG9yCisJZXh0ZW5kcyBFZGl0aW5nRG9tYWluQWN0aW9uQmFyQ29udHJpYnV0b3IKKwlpbXBsZW1lbnRzIElTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIgeworCS8qKgorCSAqIFRoaXMga2VlcHMgdHJhY2sgb2YgdGhlIGFjdGl2ZSBlZGl0b3IuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIElFZGl0b3JQYXJ0IGFjdGl2ZUVkaXRvclBhcnQ7CisKKwkvKioKKwkgKiBUaGlzIGtlZXBzIHRyYWNrIG9mIHRoZSBjdXJyZW50IHNlbGVjdGlvbiBwcm92aWRlci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgSVNlbGVjdGlvblByb3ZpZGVyIHNlbGVjdGlvblByb3ZpZGVyOworCisJLyoqCisJICogVGhpcyBhY3Rpb24gb3BlbnMgdGhlIFByb3BlcnRpZXMgdmlldy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgSUFjdGlvbiBzaG93UHJvcGVydGllc1ZpZXdBY3Rpb24gPQorCQluZXcgQWN0aW9uKEV4cGVyaW1lbnRhbEVkaXRvclBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoIl9VSV9TaG93UHJvcGVydGllc1ZpZXdfbWVudV9pdGVtIikpIHsKKwkJCUBPdmVycmlkZQorCQkJcHVibGljIHZvaWQgcnVuKCkgeworCQkJCXRyeSB7CisJCQkJCWdldFBhZ2UoKS5zaG93Vmlldygib3JnLmVjbGlwc2UudWkudmlld3MuUHJvcGVydHlTaGVldCIpOworCQkJCX0KKwkJCQljYXRjaCAoUGFydEluaXRFeGNlcHRpb24gZXhjZXB0aW9uKSB7CisJCQkJCUV4cGVyaW1lbnRhbEVkaXRvclBsdWdpbi5JTlNUQU5DRS5sb2coZXhjZXB0aW9uKTsKKwkJCQl9CisJCQl9CisJCX07CisKKwkvKioKKwkgKiBUaGlzIGFjdGlvbiByZWZyZXNoZXMgdGhlIHZpZXdlciBvZiB0aGUgY3VycmVudCBlZGl0b3IgaWYgdGhlIGVkaXRvcgorCSAqIGltcGxlbWVudHMge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5jb21tb24udWkudmlld2VyLklWaWV3ZXJQcm92aWRlcn0uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIElBY3Rpb24gcmVmcmVzaFZpZXdlckFjdGlvbiA9CisJCW5ldyBBY3Rpb24oRXhwZXJpbWVudGFsRWRpdG9yUGx1Z2luLklOU1RBTkNFLmdldFN0cmluZygiX1VJX1JlZnJlc2hWaWV3ZXJfbWVudV9pdGVtIikpIHsKKwkJCUBPdmVycmlkZQorCQkJcHVibGljIGJvb2xlYW4gaXNFbmFibGVkKCkgeworCQkJCXJldHVybiBhY3RpdmVFZGl0b3JQYXJ0IGluc3RhbmNlb2YgSVZpZXdlclByb3ZpZGVyOworCQkJfQorCisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyB2b2lkIHJ1bigpIHsKKwkJCQlpZiAoYWN0aXZlRWRpdG9yUGFydCBpbnN0YW5jZW9mIElWaWV3ZXJQcm92aWRlcikgeworCQkJCQlWaWV3ZXIgdmlld2VyID0gKChJVmlld2VyUHJvdmlkZXIpYWN0aXZlRWRpdG9yUGFydCkuZ2V0Vmlld2VyKCk7CisJCQkJCWlmICh2aWV3ZXIgIT0gbnVsbCkgeworCQkJCQkJdmlld2VyLnJlZnJlc2goKTsKKwkJCQkJfQorCQkJCX0KKwkJCX0KKwkJfTsKKworCS8qKgorCSAqIFRoaXMgd2lsbCBjb250YWluIG9uZSB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkuYWN0aW9uLkNyZWF0ZUNoaWxkQWN0aW9ufSBjb3JyZXNwb25kaW5nIHRvIGVhY2ggZGVzY3JpcHRvcgorCSAqIGdlbmVyYXRlZCBmb3IgdGhlIGN1cnJlbnQgc2VsZWN0aW9uIGJ5IHRoZSBpdGVtIHByb3ZpZGVyLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBDb2xsZWN0aW9uPElBY3Rpb24+IGNyZWF0ZUNoaWxkQWN0aW9uczsKKworCS8qKgorCSAqIFRoaXMgaXMgdGhlIG1lbnUgbWFuYWdlciBpbnRvIHdoaWNoIG1lbnUgY29udHJpYnV0aW9uIGl0ZW1zIHNob3VsZCBiZSBhZGRlZCBmb3IgQ3JlYXRlQ2hpbGQgYWN0aW9ucy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgSU1lbnVNYW5hZ2VyIGNyZWF0ZUNoaWxkTWVudU1hbmFnZXI7CisKKwkvKioKKwkgKiBUaGlzIHdpbGwgY29udGFpbiBvbmUge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmFjdGlvbi5DcmVhdGVTaWJsaW5nQWN0aW9ufSBjb3JyZXNwb25kaW5nIHRvIGVhY2ggZGVzY3JpcHRvcgorCSAqIGdlbmVyYXRlZCBmb3IgdGhlIGN1cnJlbnQgc2VsZWN0aW9uIGJ5IHRoZSBpdGVtIHByb3ZpZGVyLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBDb2xsZWN0aW9uPElBY3Rpb24+IGNyZWF0ZVNpYmxpbmdBY3Rpb25zOworCisJLyoqCisJICogVGhpcyBpcyB0aGUgbWVudSBtYW5hZ2VyIGludG8gd2hpY2ggbWVudSBjb250cmlidXRpb24gaXRlbXMgc2hvdWxkIGJlIGFkZGVkIGZvciBDcmVhdGVTaWJsaW5nIGFjdGlvbnMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIElNZW51TWFuYWdlciBjcmVhdGVTaWJsaW5nTWVudU1hbmFnZXI7CisKKwkvKioKKwkgKiBUaGlzIGNyZWF0ZXMgYW4gaW5zdGFuY2Ugb2YgdGhlIGNvbnRyaWJ1dG9yLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFeHBlcmltZW50YWxBY3Rpb25CYXJDb250cmlidXRvcigpIHsKKwkJc3VwZXIoQURESVRJT05TX0xBU1RfU1RZTEUpOworCQlsb2FkUmVzb3VyY2VBY3Rpb24gPSBuZXcgTG9hZFJlc291cmNlQWN0aW9uKCk7CisJCXZhbGlkYXRlQWN0aW9uID0gbmV3IFZhbGlkYXRlQWN0aW9uKCk7CisJCWNvbnRyb2xBY3Rpb24gPSBuZXcgQ29udHJvbEFjdGlvbigpOworCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyBTZXBhcmF0b3JzIGZvciBlZGl0b3IgYWRkaXRpb25zIHRvIHRoZSB0b29sIGJhci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBjb250cmlidXRlVG9Ub29sQmFyKElUb29sQmFyTWFuYWdlciB0b29sQmFyTWFuYWdlcikgeworCQl0b29sQmFyTWFuYWdlci5hZGQobmV3IFNlcGFyYXRvcigiZXhwZXJpbWVudGFsLXNldHRpbmdzIikpOworCQl0b29sQmFyTWFuYWdlci5hZGQobmV3IFNlcGFyYXRvcigiZXhwZXJpbWVudGFsLWFkZGl0aW9ucyIpKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFkZHMgdG8gdGhlIG1lbnUgYmFyIGEgbWVudSBhbmQgc29tZSBzZXBhcmF0b3JzIGZvciBlZGl0b3IgYWRkaXRpb25zLAorCSAqIGFzIHdlbGwgYXMgdGhlIHN1Yi1tZW51cyBmb3Igb2JqZWN0IGNyZWF0aW9uIGl0ZW1zLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGNvbnRyaWJ1dGVUb01lbnUoSU1lbnVNYW5hZ2VyIG1lbnVNYW5hZ2VyKSB7CisJCXN1cGVyLmNvbnRyaWJ1dGVUb01lbnUobWVudU1hbmFnZXIpOworCisJCUlNZW51TWFuYWdlciBzdWJtZW51TWFuYWdlciA9IG5ldyBNZW51TWFuYWdlcihFeHBlcmltZW50YWxFZGl0b3JQbHVnaW4uSU5TVEFOQ0UuZ2V0U3RyaW5nKCJfVUlfRXhwZXJpbWVudGFsRWRpdG9yX21lbnUiKSwgIm9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leHBlcmltZW50YWxNZW51SUQiKTsKKwkJbWVudU1hbmFnZXIuaW5zZXJ0QWZ0ZXIoImFkZGl0aW9ucyIsIHN1Ym1lbnVNYW5hZ2VyKTsKKwkJc3VibWVudU1hbmFnZXIuYWRkKG5ldyBTZXBhcmF0b3IoInNldHRpbmdzIikpOworCQlzdWJtZW51TWFuYWdlci5hZGQobmV3IFNlcGFyYXRvcigiYWN0aW9ucyIpKTsKKwkJc3VibWVudU1hbmFnZXIuYWRkKG5ldyBTZXBhcmF0b3IoImFkZGl0aW9ucyIpKTsKKwkJc3VibWVudU1hbmFnZXIuYWRkKG5ldyBTZXBhcmF0b3IoImFkZGl0aW9ucy1lbmQiKSk7CisKKwkJLy8gUHJlcGFyZSBmb3IgQ3JlYXRlQ2hpbGQgaXRlbSBhZGRpdGlvbiBvciByZW1vdmFsLgorCQkvLworCQljcmVhdGVDaGlsZE1lbnVNYW5hZ2VyID0gbmV3IE1lbnVNYW5hZ2VyKEV4cGVyaW1lbnRhbEVkaXRvclBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoIl9VSV9DcmVhdGVDaGlsZF9tZW51X2l0ZW0iKSk7CisJCXN1Ym1lbnVNYW5hZ2VyLmluc2VydEJlZm9yZSgiYWRkaXRpb25zIiwgY3JlYXRlQ2hpbGRNZW51TWFuYWdlcik7CisKKwkJLy8gUHJlcGFyZSBmb3IgQ3JlYXRlU2libGluZyBpdGVtIGFkZGl0aW9uIG9yIHJlbW92YWwuCisJCS8vCisJCWNyZWF0ZVNpYmxpbmdNZW51TWFuYWdlciA9IG5ldyBNZW51TWFuYWdlcihFeHBlcmltZW50YWxFZGl0b3JQbHVnaW4uSU5TVEFOQ0UuZ2V0U3RyaW5nKCJfVUlfQ3JlYXRlU2libGluZ19tZW51X2l0ZW0iKSk7CisJCXN1Ym1lbnVNYW5hZ2VyLmluc2VydEJlZm9yZSgiYWRkaXRpb25zIiwgY3JlYXRlU2libGluZ01lbnVNYW5hZ2VyKTsKKworCQkvLyBGb3JjZSBhbiB1cGRhdGUgYmVjYXVzZSBFY2xpcHNlIGhpZGVzIGVtcHR5IG1lbnVzIG5vdy4KKwkJLy8KKwkJc3VibWVudU1hbmFnZXIuYWRkTWVudUxpc3RlbmVyCisJCQkobmV3IElNZW51TGlzdGVuZXIoKSB7CisJCQkJIHB1YmxpYyB2b2lkIG1lbnVBYm91dFRvU2hvdyhJTWVudU1hbmFnZXIgbWVudU1hbmFnZXIpIHsKKwkJCQkJIG1lbnVNYW5hZ2VyLnVwZGF0ZUFsbCh0cnVlKTsKKwkJCQkgfQorCQkJIH0pOworCisJCWFkZEdsb2JhbEFjdGlvbnMoc3VibWVudU1hbmFnZXIpOworCX0KKworCS8qKgorCSAqIFdoZW4gdGhlIGFjdGl2ZSBlZGl0b3IgY2hhbmdlcywgdGhpcyByZW1lbWJlcnMgdGhlIGNoYW5nZSBhbmQgcmVnaXN0ZXJzIHdpdGggaXQgYXMgYSBzZWxlY3Rpb24gcHJvdmlkZXIuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgc2V0QWN0aXZlRWRpdG9yKElFZGl0b3JQYXJ0IHBhcnQpIHsKKwkJc3VwZXIuc2V0QWN0aXZlRWRpdG9yKHBhcnQpOworCQlhY3RpdmVFZGl0b3JQYXJ0ID0gcGFydDsKKworCQkvLyBTd2l0Y2ggdG8gdGhlIG5ldyBzZWxlY3Rpb24gcHJvdmlkZXIuCisJCS8vCisJCWlmIChzZWxlY3Rpb25Qcm92aWRlciAhPSBudWxsKSB7CisJCQlzZWxlY3Rpb25Qcm92aWRlci5yZW1vdmVTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIodGhpcyk7CisJCX0KKwkJaWYgKHBhcnQgPT0gbnVsbCkgeworCQkJc2VsZWN0aW9uUHJvdmlkZXIgPSBudWxsOworCQl9CisJCWVsc2UgeworCQkJc2VsZWN0aW9uUHJvdmlkZXIgPSBwYXJ0LmdldFNpdGUoKS5nZXRTZWxlY3Rpb25Qcm92aWRlcigpOworCQkJc2VsZWN0aW9uUHJvdmlkZXIuYWRkU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyKHRoaXMpOworCisJCQkvLyBGYWtlIGEgc2VsZWN0aW9uIGNoYW5nZWQgZXZlbnQgdG8gdXBkYXRlIHRoZSBtZW51cy4KKwkJCS8vCisJCQlpZiAoc2VsZWN0aW9uUHJvdmlkZXIuZ2V0U2VsZWN0aW9uKCkgIT0gbnVsbCkgeworCQkJCXNlbGVjdGlvbkNoYW5nZWQobmV3IFNlbGVjdGlvbkNoYW5nZWRFdmVudChzZWxlY3Rpb25Qcm92aWRlciwgc2VsZWN0aW9uUHJvdmlkZXIuZ2V0U2VsZWN0aW9uKCkpKTsKKwkJCX0KKwkJfQorCX0KKworCS8qKgorCSAqIFRoaXMgaW1wbGVtZW50cyB7QGxpbmsgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyfSwKKwkgKiBoYW5kbGluZyB7QGxpbmsgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5TZWxlY3Rpb25DaGFuZ2VkRXZlbnR9cyBieSBxdWVyeWluZyBmb3IgdGhlIGNoaWxkcmVuIGFuZCBzaWJsaW5ncworCSAqIHRoYXQgY2FuIGJlIGFkZGVkIHRvIHRoZSBzZWxlY3RlZCBvYmplY3QgYW5kIHVwZGF0aW5nIHRoZSBtZW51cyBhY2NvcmRpbmdseS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZWxlY3Rpb25DaGFuZ2VkKFNlbGVjdGlvbkNoYW5nZWRFdmVudCBldmVudCkgeworCQkvLyBSZW1vdmUgYW55IG1lbnUgaXRlbXMgZm9yIG9sZCBzZWxlY3Rpb24uCisJCS8vCisJCWlmIChjcmVhdGVDaGlsZE1lbnVNYW5hZ2VyICE9IG51bGwpIHsKKwkJCWRlcG9wdWxhdGVNYW5hZ2VyKGNyZWF0ZUNoaWxkTWVudU1hbmFnZXIsIGNyZWF0ZUNoaWxkQWN0aW9ucyk7CisJCX0KKwkJaWYgKGNyZWF0ZVNpYmxpbmdNZW51TWFuYWdlciAhPSBudWxsKSB7CisJCQlkZXBvcHVsYXRlTWFuYWdlcihjcmVhdGVTaWJsaW5nTWVudU1hbmFnZXIsIGNyZWF0ZVNpYmxpbmdBY3Rpb25zKTsKKwkJfQorCisJCS8vIFF1ZXJ5IHRoZSBuZXcgc2VsZWN0aW9uIGZvciBhcHByb3ByaWF0ZSBuZXcgY2hpbGQvc2libGluZyBkZXNjcmlwdG9ycworCQkvLworCQlDb2xsZWN0aW9uPD8+IG5ld0NoaWxkRGVzY3JpcHRvcnMgPSBudWxsOworCQlDb2xsZWN0aW9uPD8+IG5ld1NpYmxpbmdEZXNjcmlwdG9ycyA9IG51bGw7CisKKwkJSVNlbGVjdGlvbiBzZWxlY3Rpb24gPSBldmVudC5nZXRTZWxlY3Rpb24oKTsKKwkJaWYgKHNlbGVjdGlvbiBpbnN0YW5jZW9mIElTdHJ1Y3R1cmVkU2VsZWN0aW9uICYmICgoSVN0cnVjdHVyZWRTZWxlY3Rpb24pc2VsZWN0aW9uKS5zaXplKCkgPT0gMSkgeworCQkJT2JqZWN0IG9iamVjdCA9ICgoSVN0cnVjdHVyZWRTZWxlY3Rpb24pc2VsZWN0aW9uKS5nZXRGaXJzdEVsZW1lbnQoKTsKKworCQkJRWRpdGluZ0RvbWFpbiBkb21haW4gPSAoKElFZGl0aW5nRG9tYWluUHJvdmlkZXIpYWN0aXZlRWRpdG9yUGFydCkuZ2V0RWRpdGluZ0RvbWFpbigpOworCisJCQluZXdDaGlsZERlc2NyaXB0b3JzID0gZG9tYWluLmdldE5ld0NoaWxkRGVzY3JpcHRvcnMob2JqZWN0LCBudWxsKTsKKwkJCW5ld1NpYmxpbmdEZXNjcmlwdG9ycyA9IGRvbWFpbi5nZXROZXdDaGlsZERlc2NyaXB0b3JzKG51bGwsIG9iamVjdCk7CisJCX0KKworCQkvLyBHZW5lcmF0ZSBhY3Rpb25zIGZvciBzZWxlY3Rpb247IHBvcHVsYXRlIGFuZCByZWRyYXcgdGhlIG1lbnVzLgorCQkvLworCQljcmVhdGVDaGlsZEFjdGlvbnMgPSBnZW5lcmF0ZUNyZWF0ZUNoaWxkQWN0aW9ucyhuZXdDaGlsZERlc2NyaXB0b3JzLCBzZWxlY3Rpb24pOworCQljcmVhdGVTaWJsaW5nQWN0aW9ucyA9IGdlbmVyYXRlQ3JlYXRlU2libGluZ0FjdGlvbnMobmV3U2libGluZ0Rlc2NyaXB0b3JzLCBzZWxlY3Rpb24pOworCisJCWlmIChjcmVhdGVDaGlsZE1lbnVNYW5hZ2VyICE9IG51bGwpIHsKKwkJCXBvcHVsYXRlTWFuYWdlcihjcmVhdGVDaGlsZE1lbnVNYW5hZ2VyLCBjcmVhdGVDaGlsZEFjdGlvbnMsIG51bGwpOworCQkJY3JlYXRlQ2hpbGRNZW51TWFuYWdlci51cGRhdGUodHJ1ZSk7CisJCX0KKwkJaWYgKGNyZWF0ZVNpYmxpbmdNZW51TWFuYWdlciAhPSBudWxsKSB7CisJCQlwb3B1bGF0ZU1hbmFnZXIoY3JlYXRlU2libGluZ01lbnVNYW5hZ2VyLCBjcmVhdGVTaWJsaW5nQWN0aW9ucywgbnVsbCk7CisJCQljcmVhdGVTaWJsaW5nTWVudU1hbmFnZXIudXBkYXRlKHRydWUpOworCQl9CisJfQorCisJLyoqCisJICogVGhpcyBnZW5lcmF0ZXMgYSB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkuYWN0aW9uLkNyZWF0ZUNoaWxkQWN0aW9ufSBmb3IgZWFjaCBvYmplY3QgaW4gPGNvZGU+ZGVzY3JpcHRvcnM8L2NvZGU+LAorCSAqIGFuZCByZXR1cm5zIHRoZSBjb2xsZWN0aW9uIG9mIHRoZXNlIGFjdGlvbnMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIENvbGxlY3Rpb248SUFjdGlvbj4gZ2VuZXJhdGVDcmVhdGVDaGlsZEFjdGlvbnMoQ29sbGVjdGlvbjw/PiBkZXNjcmlwdG9ycywgSVNlbGVjdGlvbiBzZWxlY3Rpb24pIHsKKwkJQ29sbGVjdGlvbjxJQWN0aW9uPiBhY3Rpb25zID0gbmV3IEFycmF5TGlzdDxJQWN0aW9uPigpOworCQlpZiAoZGVzY3JpcHRvcnMgIT0gbnVsbCkgeworCQkJZm9yIChPYmplY3QgZGVzY3JpcHRvciA6IGRlc2NyaXB0b3JzKSB7CisJCQkJYWN0aW9ucy5hZGQobmV3IENyZWF0ZUNoaWxkQWN0aW9uKGFjdGl2ZUVkaXRvclBhcnQsIHNlbGVjdGlvbiwgZGVzY3JpcHRvcikpOworCQkJfQorCQl9CisJCXJldHVybiBhY3Rpb25zOworCX0KKworCS8qKgorCSAqIFRoaXMgZ2VuZXJhdGVzIGEge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmFjdGlvbi5DcmVhdGVTaWJsaW5nQWN0aW9ufSBmb3IgZWFjaCBvYmplY3QgaW4gPGNvZGU+ZGVzY3JpcHRvcnM8L2NvZGU+LAorCSAqIGFuZCByZXR1cm5zIHRoZSBjb2xsZWN0aW9uIG9mIHRoZXNlIGFjdGlvbnMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIENvbGxlY3Rpb248SUFjdGlvbj4gZ2VuZXJhdGVDcmVhdGVTaWJsaW5nQWN0aW9ucyhDb2xsZWN0aW9uPD8+IGRlc2NyaXB0b3JzLCBJU2VsZWN0aW9uIHNlbGVjdGlvbikgeworCQlDb2xsZWN0aW9uPElBY3Rpb24+IGFjdGlvbnMgPSBuZXcgQXJyYXlMaXN0PElBY3Rpb24+KCk7CisJCWlmIChkZXNjcmlwdG9ycyAhPSBudWxsKSB7CisJCQlmb3IgKE9iamVjdCBkZXNjcmlwdG9yIDogZGVzY3JpcHRvcnMpIHsKKwkJCQlhY3Rpb25zLmFkZChuZXcgQ3JlYXRlU2libGluZ0FjdGlvbihhY3RpdmVFZGl0b3JQYXJ0LCBzZWxlY3Rpb24sIGRlc2NyaXB0b3IpKTsKKwkJCX0KKwkJfQorCQlyZXR1cm4gYWN0aW9uczsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHBvcHVsYXRlcyB0aGUgc3BlY2lmaWVkIDxjb2RlPm1hbmFnZXI8L2NvZGU+IHdpdGgge0BsaW5rIG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5BY3Rpb25Db250cmlidXRpb25JdGVtfXMKKwkgKiBiYXNlZCBvbiB0aGUge0BsaW5rIG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JQWN0aW9ufXMgY29udGFpbmVkIGluIHRoZSA8Y29kZT5hY3Rpb25zPC9jb2RlPiBjb2xsZWN0aW9uLAorCSAqIGJ5IGluc2VydGluZyB0aGVtIGJlZm9yZSB0aGUgc3BlY2lmaWVkIGNvbnRyaWJ1dGlvbiBpdGVtIDxjb2RlPmNvbnRyaWJ1dGlvbklEPC9jb2RlPi4KKwkgKiBJZiA8Y29kZT5jb250cmlidXRpb25JRDwvY29kZT4gaXMgPGNvZGU+bnVsbDwvY29kZT4sIHRoZXkgYXJlIHNpbXBseSBhZGRlZC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBwb3B1bGF0ZU1hbmFnZXIoSUNvbnRyaWJ1dGlvbk1hbmFnZXIgbWFuYWdlciwgQ29sbGVjdGlvbjw/IGV4dGVuZHMgSUFjdGlvbj4gYWN0aW9ucywgU3RyaW5nIGNvbnRyaWJ1dGlvbklEKSB7CisJCWlmIChhY3Rpb25zICE9IG51bGwpIHsKKwkJCWZvciAoSUFjdGlvbiBhY3Rpb24gOiBhY3Rpb25zKSB7CisJCQkJaWYgKGNvbnRyaWJ1dGlvbklEICE9IG51bGwpIHsKKwkJCQkJbWFuYWdlci5pbnNlcnRCZWZvcmUoY29udHJpYnV0aW9uSUQsIGFjdGlvbik7CisJCQkJfQorCQkJCWVsc2UgeworCQkJCQltYW5hZ2VyLmFkZChhY3Rpb24pOworCQkJCX0KKwkJCX0KKwkJfQorCX0KKwkJCisJLyoqCisJICogVGhpcyByZW1vdmVzIGZyb20gdGhlIHNwZWNpZmllZCA8Y29kZT5tYW5hZ2VyPC9jb2RlPiBhbGwge0BsaW5rIG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5BY3Rpb25Db250cmlidXRpb25JdGVtfXMKKwkgKiBiYXNlZCBvbiB0aGUge0BsaW5rIG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JQWN0aW9ufXMgY29udGFpbmVkIGluIHRoZSA8Y29kZT5hY3Rpb25zPC9jb2RlPiBjb2xsZWN0aW9uLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIGRlcG9wdWxhdGVNYW5hZ2VyKElDb250cmlidXRpb25NYW5hZ2VyIG1hbmFnZXIsIENvbGxlY3Rpb248PyBleHRlbmRzIElBY3Rpb24+IGFjdGlvbnMpIHsKKwkJaWYgKGFjdGlvbnMgIT0gbnVsbCkgeworCQkJSUNvbnRyaWJ1dGlvbkl0ZW1bXSBpdGVtcyA9IG1hbmFnZXIuZ2V0SXRlbXMoKTsKKwkJCWZvciAoaW50IGkgPSAwOyBpIDwgaXRlbXMubGVuZ3RoOyBpKyspIHsKKwkJCQkvLyBMb29rIGludG8gU3ViQ29udHJpYnV0aW9uSXRlbXMKKwkJCQkvLworCQkJCUlDb250cmlidXRpb25JdGVtIGNvbnRyaWJ1dGlvbkl0ZW0gPSBpdGVtc1tpXTsKKwkJCQl3aGlsZSAoY29udHJpYnV0aW9uSXRlbSBpbnN0YW5jZW9mIFN1YkNvbnRyaWJ1dGlvbkl0ZW0pIHsKKwkJCQkJY29udHJpYnV0aW9uSXRlbSA9ICgoU3ViQ29udHJpYnV0aW9uSXRlbSljb250cmlidXRpb25JdGVtKS5nZXRJbm5lckl0ZW0oKTsKKwkJCQl9CisKKwkJCQkvLyBEZWxldGUgdGhlIEFjdGlvbkNvbnRyaWJ1dGlvbkl0ZW1zIHdpdGggbWF0Y2hpbmcgYWN0aW9uLgorCQkJCS8vCisJCQkJaWYgKGNvbnRyaWJ1dGlvbkl0ZW0gaW5zdGFuY2VvZiBBY3Rpb25Db250cmlidXRpb25JdGVtKSB7CisJCQkJCUlBY3Rpb24gYWN0aW9uID0gKChBY3Rpb25Db250cmlidXRpb25JdGVtKWNvbnRyaWJ1dGlvbkl0ZW0pLmdldEFjdGlvbigpOworCQkJCQlpZiAoYWN0aW9ucy5jb250YWlucyhhY3Rpb24pKSB7CisJCQkJCQltYW5hZ2VyLnJlbW92ZShjb250cmlidXRpb25JdGVtKTsKKwkJCQkJfQorCQkJCX0KKwkJCX0KKwkJfQorCX0KKworCS8qKgorCSAqIFRoaXMgcG9wdWxhdGVzIHRoZSBwb3AtdXAgbWVudSBiZWZvcmUgaXQgYXBwZWFycy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBtZW51QWJvdXRUb1Nob3coSU1lbnVNYW5hZ2VyIG1lbnVNYW5hZ2VyKSB7CisJCXN1cGVyLm1lbnVBYm91dFRvU2hvdyhtZW51TWFuYWdlcik7CisJCU1lbnVNYW5hZ2VyIHN1Ym1lbnVNYW5hZ2VyID0gbnVsbDsKKworCQlzdWJtZW51TWFuYWdlciA9IG5ldyBNZW51TWFuYWdlcihFeHBlcmltZW50YWxFZGl0b3JQbHVnaW4uSU5TVEFOQ0UuZ2V0U3RyaW5nKCJfVUlfQ3JlYXRlQ2hpbGRfbWVudV9pdGVtIikpOworCQlwb3B1bGF0ZU1hbmFnZXIoc3VibWVudU1hbmFnZXIsIGNyZWF0ZUNoaWxkQWN0aW9ucywgbnVsbCk7CisJCW1lbnVNYW5hZ2VyLmluc2VydEJlZm9yZSgiZWRpdCIsIHN1Ym1lbnVNYW5hZ2VyKTsKKworCQlzdWJtZW51TWFuYWdlciA9IG5ldyBNZW51TWFuYWdlcihFeHBlcmltZW50YWxFZGl0b3JQbHVnaW4uSU5TVEFOQ0UuZ2V0U3RyaW5nKCJfVUlfQ3JlYXRlU2libGluZ19tZW51X2l0ZW0iKSk7CisJCXBvcHVsYXRlTWFuYWdlcihzdWJtZW51TWFuYWdlciwgY3JlYXRlU2libGluZ0FjdGlvbnMsIG51bGwpOworCQltZW51TWFuYWdlci5pbnNlcnRCZWZvcmUoImVkaXQiLCBzdWJtZW51TWFuYWdlcik7CisJfQorCisJLyoqCisJICogVGhpcyBpbnNlcnRzIGdsb2JhbCBhY3Rpb25zIGJlZm9yZSB0aGUgImFkZGl0aW9ucy1lbmQiIHNlcGFyYXRvci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgdm9pZCBhZGRHbG9iYWxBY3Rpb25zKElNZW51TWFuYWdlciBtZW51TWFuYWdlcikgeworCQltZW51TWFuYWdlci5pbnNlcnRBZnRlcigiYWRkaXRpb25zLWVuZCIsIG5ldyBTZXBhcmF0b3IoInVpLWFjdGlvbnMiKSk7CisJCW1lbnVNYW5hZ2VyLmluc2VydEFmdGVyKCJ1aS1hY3Rpb25zIiwgc2hvd1Byb3BlcnRpZXNWaWV3QWN0aW9uKTsKKworCQlyZWZyZXNoVmlld2VyQWN0aW9uLnNldEVuYWJsZWQocmVmcmVzaFZpZXdlckFjdGlvbi5pc0VuYWJsZWQoKSk7CQkKKwkJbWVudU1hbmFnZXIuaW5zZXJ0QWZ0ZXIoInVpLWFjdGlvbnMiLCByZWZyZXNoVmlld2VyQWN0aW9uKTsKKworCQlzdXBlci5hZGRHbG9iYWxBY3Rpb25zKG1lbnVNYW5hZ2VyKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGVuc3VyZXMgdGhhdCBhIGRlbGV0ZSBhY3Rpb24gd2lsbCBjbGVhbiB1cCBhbGwgcmVmZXJlbmNlcyB0byBkZWxldGVkIG9iamVjdHMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIGJvb2xlYW4gcmVtb3ZlQWxsUmVmZXJlbmNlc09uRGVsZXRlKCkgeworCQlyZXR1cm4gdHJ1ZTsKKwl9CisKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy5leHBlcmltZW50YWwvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9leHBlcmltZW50YWwvcHJlc2VudGF0aW9uL0V4cGVyaW1lbnRhbEVkaXRvci5qYXZhIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMuZXhwZXJpbWVudGFsL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvZXhwZXJpbWVudGFsL3ByZXNlbnRhdGlvbi9FeHBlcmltZW50YWxFZGl0b3IuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZTJjZjcxCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMuZXhwZXJpbWVudGFsL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvZXhwZXJpbWVudGFsL3ByZXNlbnRhdGlvbi9FeHBlcmltZW50YWxFZGl0b3IuamF2YQpAQCAtMCwwICsxLDE4MDYgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4cGVyaW1lbnRhbC5wcmVzZW50YXRpb247CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIAorICogQ29weXJpZ2h0IChjKSAyMDExIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiAKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdCAKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sIAorICogCisgKiBDb250cmlidXRvcnM6IAorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiAKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKK2ltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOworaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW07CitpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbnM7CitpbXBvcnQgamF2YS51dGlsLkV2ZW50T2JqZWN0OworaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOworaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKK2ltcG9ydCBqYXZhLnV0aWwuTGlua2VkSGFzaE1hcDsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuTWFwOworCitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUZpbGU7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSU1hcmtlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUmVzb3VyY2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVJlc291cmNlQ2hhbmdlRXZlbnQ7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVJlc291cmNlQ2hhbmdlTGlzdGVuZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVJlc291cmNlRGVsdGE7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVJlc291cmNlRGVsdGFWaXNpdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLlJlc291cmNlc1BsdWdpbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQ29yZUV4Y2VwdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVBhdGg7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQcm9ncmVzc01vbml0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLk51bGxQcm9ncmVzc01vbml0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5jb21tYW5kLkJhc2ljQ29tbWFuZFN0YWNrOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24uY29tbWFuZC5Db21tYW5kOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24uY29tbWFuZC5Db21tYW5kU3RhY2s7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5jb21tYW5kLkNvbW1hbmRTdGFja0xpc3RlbmVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LkFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnVpLk1hcmtlckhlbHBlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnVpLlZpZXdlclBhbmU7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51aS5lZGl0b3IuUHJvYmxlbUVkaXRvclBhcnQ7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51aS52aWV3ZXIuSVZpZXdlclByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5CYXNpY0RpYWdub3N0aWM7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLkRpYWdub3N0aWM7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlVSSTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRVZhbGlkYXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUucHJvdmlkZXIuRWNvcmVJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUucmVzb3VyY2UuUmVzb3VyY2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnJlc291cmNlLlJlc291cmNlU2V0OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS51dGlsLkVDb250ZW50QWRhcHRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUudXRpbC5FY29yZVV0aWw7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQuZG9tYWluLkFkYXB0ZXJGYWN0b3J5RWRpdGluZ0RvbWFpbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5kb21haW4uRWRpdGluZ0RvbWFpbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5kb21haW4uSUVkaXRpbmdEb21haW5Qcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5BZGFwdGVyRmFjdG9yeUl0ZW1EZWxlZ2F0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuQ29tcG9zZWRBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5SZWZsZWN0aXZlSXRlbVByb3ZpZGVyQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIucmVzb3VyY2UuUmVzb3VyY2VJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5hY3Rpb24uRWRpdGluZ0RvbWFpbkFjdGlvbkJhckNvbnRyaWJ1dG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmNlbGxlZGl0b3IuQWRhcHRlckZhY3RvcnlUcmVlRWRpdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmRuZC5FZGl0aW5nRG9tYWluVmlld2VyRHJvcEFkYXB0ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkuZG5kLkxvY2FsVHJhbnNmZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkuZG5kLlZpZXdlckRyYWdBZGFwdGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLnByb3ZpZGVyLkFkYXB0ZXJGYWN0b3J5Q29udGVudFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLnByb3ZpZGVyLkFkYXB0ZXJGYWN0b3J5TGFiZWxQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5wcm92aWRlci5VbndyYXBwaW5nU2VsZWN0aW9uUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkudXRpbC5FZGl0VUlNYXJrZXJIZWxwZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkudXRpbC5FZGl0VUlVdGlsOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLnZpZXcuRXh0ZW5kZWRQcm9wZXJ0eVNoZWV0UGFnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSU1lbnVMaXN0ZW5lcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSU1lbnVNYW5hZ2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JU3RhdHVzTGluZU1hbmFnZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklUb29sQmFyTWFuYWdlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uTWVudU1hbmFnZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLlNlcGFyYXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5kaWFsb2dzLk1lc3NhZ2VEaWFsb2c7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuZGlhbG9ncy5Qcm9ncmVzc01vbml0b3JEaWFsb2c7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5Db2x1bW5XZWlnaHREYXRhOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU3RydWN0dXJlZFNlbGVjdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLkxpc3RWaWV3ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5TZWxlY3Rpb25DaGFuZ2VkRXZlbnQ7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5TdHJ1Y3R1cmVkU2VsZWN0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuU3RydWN0dXJlZFZpZXdlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlRhYmxlTGF5b3V0OworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuVGFibGVWaWV3ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5UcmVlVmlld2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuVmlld2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24ucHJvdmlkZXIuQ29tbW9uSXRlbVByb3ZpZGVyQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLnByb3ZpZGVyLkdyYXBoSXRlbVByb3ZpZGVyQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmxvZ2dlci5wcm92aWRlci5Mb2dnZXJJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwucHJvdmlkZXIuTW9kZWxJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIucHJvdmlkZXIuTW9kaWZpZXJJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2NlbmFyaW8ucHJvdmlkZXIuU2NlbmFyaW9JdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2VxdWVuY2VyLnByb3ZpZGVyLlNlcXVlbmNlckl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zb2x2ZXIucHJvdmlkZXIuU29sdmVySXRlbVByb3ZpZGVyQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMucHJvdmlkZXIuTGFiZWxzSXRlbVByb3ZpZGVyQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4cGVyaW1lbnRhbC5wcm92aWRlci5FeHBlcmltZW50YWxJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQucHJvdmlkZXIuU3RhbmRhcmRJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuU1dUOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5jdXN0b20uQ1RhYkZvbGRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZG5kLkRORDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZG5kLlRyYW5zZmVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuQ29udHJvbEFkYXB0ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5Db250cm9sRXZlbnQ7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmdyYXBoaWNzLlBvaW50OworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5sYXlvdXQuRmlsbExheW91dDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuTWVudTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5UYWJsZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5UYWJsZUNvbHVtbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5UcmVlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlRyZWVDb2x1bW47CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuSUFjdGlvbkJhcnM7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuSUVkaXRvcklucHV0OworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklFZGl0b3JQYXJ0OworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklFZGl0b3JTaXRlOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklQYXJ0TGlzdGVuZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaFBhcnQ7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuUGFydEluaXRFeGNlcHRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuYWN0aW9ucy5Xb3Jrc3BhY2VNb2RpZnlPcGVyYXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuZGlhbG9ncy5TYXZlQXNEaWFsb2c7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuaWRlLklHb3RvTWFya2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLnBhcnQuRmlsZUVkaXRvcklucHV0OworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLnBhcnQuTXVsdGlQYWdlRWRpdG9yUGFydDsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS52aWV3cy5jb250ZW50b3V0bGluZS5Db250ZW50T3V0bGluZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS52aWV3cy5jb250ZW50b3V0bGluZS5Db250ZW50T3V0bGluZVBhZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkudmlld3MuY29udGVudG91dGxpbmUuSUNvbnRlbnRPdXRsaW5lUGFnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS52aWV3cy5wcm9wZXJ0aWVzLklQcm9wZXJ0eVNoZWV0UGFnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS52aWV3cy5wcm9wZXJ0aWVzLlByb3BlcnR5U2hlZXQ7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkudmlld3MucHJvcGVydGllcy5Qcm9wZXJ0eVNoZWV0UGFnZTsKKworCisvKioKKyAqIFRoaXMgaXMgYW4gZXhhbXBsZSBvZiBhIEV4cGVyaW1lbnRhbCBtb2RlbCBlZGl0b3IuCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBFeHBlcmltZW50YWxFZGl0b3IKKwlleHRlbmRzIE11bHRpUGFnZUVkaXRvclBhcnQKKwlpbXBsZW1lbnRzIElFZGl0aW5nRG9tYWluUHJvdmlkZXIsIElTZWxlY3Rpb25Qcm92aWRlciwgSU1lbnVMaXN0ZW5lciwgSVZpZXdlclByb3ZpZGVyLCBJR290b01hcmtlciB7CisJLyoqCisJICogVGhpcyBrZWVwcyB0cmFjayBvZiB0aGUgZWRpdGluZyBkb21haW4gdGhhdCBpcyB1c2VkIHRvIHRyYWNrIGFsbCBjaGFuZ2VzIHRvIHRoZSBtb2RlbC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgQWRhcHRlckZhY3RvcnlFZGl0aW5nRG9tYWluIGVkaXRpbmdEb21haW47CisKKwkvKioKKwkgKiBUaGlzIGlzIHRoZSBvbmUgYWRhcHRlciBmYWN0b3J5IHVzZWQgZm9yIHByb3ZpZGluZyB2aWV3cyBvZiB0aGUgbW9kZWwuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIENvbXBvc2VkQWRhcHRlckZhY3RvcnkgYWRhcHRlckZhY3Rvcnk7CisKKwkvKioKKwkgKiBUaGlzIGlzIHRoZSBjb250ZW50IG91dGxpbmUgcGFnZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgSUNvbnRlbnRPdXRsaW5lUGFnZSBjb250ZW50T3V0bGluZVBhZ2U7CisKKwkvKioKKwkgKiBUaGlzIGlzIGEga2x1ZGdlLi4uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIElTdGF0dXNMaW5lTWFuYWdlciBjb250ZW50T3V0bGluZVN0YXR1c0xpbmVNYW5hZ2VyOworCisJLyoqCisJICogVGhpcyBpcyB0aGUgY29udGVudCBvdXRsaW5lIHBhZ2UncyB2aWV3ZXIuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIFRyZWVWaWV3ZXIgY29udGVudE91dGxpbmVWaWV3ZXI7CisKKwkvKioKKwkgKiBUaGlzIGlzIHRoZSBwcm9wZXJ0eSBzaGVldCBwYWdlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBQcm9wZXJ0eVNoZWV0UGFnZSBwcm9wZXJ0eVNoZWV0UGFnZTsKKworCS8qKgorCSAqIFRoaXMgaXMgdGhlIHZpZXdlciB0aGF0IHNoYWRvd3MgdGhlIHNlbGVjdGlvbiBpbiB0aGUgY29udGVudCBvdXRsaW5lLgorCSAqIFRoZSBwYXJlbnQgcmVsYXRpb24gbXVzdCBiZSBjb3JyZWN0bHkgZGVmaW5lZCBmb3IgdGhpcyB0byB3b3JrLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBUcmVlVmlld2VyIHNlbGVjdGlvblZpZXdlcjsKKworCS8qKgorCSAqIFRoaXMgaW52ZXJ0cyB0aGUgcm9sbCBvZiBwYXJlbnQgYW5kIGNoaWxkIGluIHRoZSBjb250ZW50IHByb3ZpZGVyIGFuZCBzaG93IHBhcmVudHMgYXMgYSB0cmVlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBUcmVlVmlld2VyIHBhcmVudFZpZXdlcjsKKworCS8qKgorCSAqIFRoaXMgc2hvd3MgaG93IGEgdHJlZSB2aWV3IHdvcmtzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBUcmVlVmlld2VyIHRyZWVWaWV3ZXI7CisKKwkvKioKKwkgKiBUaGlzIHNob3dzIGhvdyBhIGxpc3QgdmlldyB3b3Jrcy4KKwkgKiBBIGxpc3Qgdmlld2VyIGRvZXNuJ3Qgc3VwcG9ydCBpY29ucy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgTGlzdFZpZXdlciBsaXN0Vmlld2VyOworCisJLyoqCisJICogVGhpcyBzaG93cyBob3cgYSB0YWJsZSB2aWV3IHdvcmtzLgorCSAqIEEgdGFibGUgY2FuIGJlIHVzZWQgYXMgYSBsaXN0IHdpdGggaWNvbnMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIFRhYmxlVmlld2VyIHRhYmxlVmlld2VyOworCisJLyoqCisJICogVGhpcyBzaG93cyBob3cgYSB0cmVlIHZpZXcgd2l0aCBjb2x1bW5zIHdvcmtzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBUcmVlVmlld2VyIHRyZWVWaWV3ZXJXaXRoQ29sdW1uczsKKworCS8qKgorCSAqIFRoaXMga2VlcHMgdHJhY2sgb2YgdGhlIGFjdGl2ZSB2aWV3ZXIgcGFuZSwgaW4gdGhlIGJvb2suCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIFZpZXdlclBhbmUgY3VycmVudFZpZXdlclBhbmU7CisKKwkvKioKKwkgKiBUaGlzIGtlZXBzIHRyYWNrIG9mIHRoZSBhY3RpdmUgY29udGVudCB2aWV3ZXIsIHdoaWNoIG1heSBiZSBlaXRoZXIgb25lIG9mIHRoZSB2aWV3ZXJzIGluIHRoZSBwYWdlcyBvciB0aGUgY29udGVudCBvdXRsaW5lIHZpZXdlci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgVmlld2VyIGN1cnJlbnRWaWV3ZXI7CisKKwkvKioKKwkgKiBUaGlzIGxpc3RlbnMgdG8gd2hpY2ggZXZlciB2aWV3ZXIgaXMgYWN0aXZlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBJU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyIHNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcjsKKworCS8qKgorCSAqIFRoaXMga2VlcHMgdHJhY2sgb2YgYWxsIHRoZSB7QGxpbmsgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyfXMgdGhhdCBhcmUgbGlzdGVuaW5nIHRvIHRoaXMgZWRpdG9yLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBDb2xsZWN0aW9uPElTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXI+IHNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcnMgPSBuZXcgQXJyYXlMaXN0PElTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXI+KCk7CisKKwkvKioKKwkgKiBUaGlzIGtlZXBzIHRyYWNrIG9mIHRoZSBzZWxlY3Rpb24gb2YgdGhlIGVkaXRvciBhcyBhIHdob2xlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBJU2VsZWN0aW9uIGVkaXRvclNlbGVjdGlvbiA9IFN0cnVjdHVyZWRTZWxlY3Rpb24uRU1QVFk7CisKKwkvKioKKwkgKiBUaGUgTWFya2VySGVscGVyIGlzIHJlc3BvbnNpYmxlIGZvciBjcmVhdGluZyB3b3Jrc3BhY2UgcmVzb3VyY2UgbWFya2VycyBwcmVzZW50ZWQKKwkgKiBpbiBFY2xpcHNlJ3MgUHJvYmxlbXMgVmlldy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgTWFya2VySGVscGVyIG1hcmtlckhlbHBlciA9IG5ldyBFZGl0VUlNYXJrZXJIZWxwZXIoKTsKKworCS8qKgorCSAqIFRoaXMgbGlzdGVucyBmb3Igd2hlbiB0aGUgb3V0bGluZSBiZWNvbWVzIGFjdGl2ZQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBJUGFydExpc3RlbmVyIHBhcnRMaXN0ZW5lciA9CisJCW5ldyBJUGFydExpc3RlbmVyKCkgeworCQkJcHVibGljIHZvaWQgcGFydEFjdGl2YXRlZChJV29ya2JlbmNoUGFydCBwKSB7CisJCQkJaWYgKHAgaW5zdGFuY2VvZiBDb250ZW50T3V0bGluZSkgeworCQkJCQlpZiAoKChDb250ZW50T3V0bGluZSlwKS5nZXRDdXJyZW50UGFnZSgpID09IGNvbnRlbnRPdXRsaW5lUGFnZSkgeworCQkJCQkJZ2V0QWN0aW9uQmFyQ29udHJpYnV0b3IoKS5zZXRBY3RpdmVFZGl0b3IoRXhwZXJpbWVudGFsRWRpdG9yLnRoaXMpOworCisJCQkJCQlzZXRDdXJyZW50Vmlld2VyKGNvbnRlbnRPdXRsaW5lVmlld2VyKTsKKwkJCQkJfQorCQkJCX0KKwkJCQllbHNlIGlmIChwIGluc3RhbmNlb2YgUHJvcGVydHlTaGVldCkgeworCQkJCQlpZiAoKChQcm9wZXJ0eVNoZWV0KXApLmdldEN1cnJlbnRQYWdlKCkgPT0gcHJvcGVydHlTaGVldFBhZ2UpIHsKKwkJCQkJCWdldEFjdGlvbkJhckNvbnRyaWJ1dG9yKCkuc2V0QWN0aXZlRWRpdG9yKEV4cGVyaW1lbnRhbEVkaXRvci50aGlzKTsKKwkJCQkJCWhhbmRsZUFjdGl2YXRlKCk7CisJCQkJCX0KKwkJCQl9CisJCQkJZWxzZSBpZiAocCA9PSBFeHBlcmltZW50YWxFZGl0b3IudGhpcykgeworCQkJCQloYW5kbGVBY3RpdmF0ZSgpOworCQkJCX0KKwkJCX0KKwkJCXB1YmxpYyB2b2lkIHBhcnRCcm91Z2h0VG9Ub3AoSVdvcmtiZW5jaFBhcnQgcCkgeworCQkJCS8vIElnbm9yZS4KKwkJCX0KKwkJCXB1YmxpYyB2b2lkIHBhcnRDbG9zZWQoSVdvcmtiZW5jaFBhcnQgcCkgeworCQkJCS8vIElnbm9yZS4KKwkJCX0KKwkJCXB1YmxpYyB2b2lkIHBhcnREZWFjdGl2YXRlZChJV29ya2JlbmNoUGFydCBwKSB7CisJCQkJLy8gSWdub3JlLgorCQkJfQorCQkJcHVibGljIHZvaWQgcGFydE9wZW5lZChJV29ya2JlbmNoUGFydCBwKSB7CisJCQkJLy8gSWdub3JlLgorCQkJfQorCQl9OworCisJLyoqCisJICogUmVzb3VyY2VzIHRoYXQgaGF2ZSBiZWVuIHJlbW92ZWQgc2luY2UgbGFzdCBhY3RpdmF0aW9uLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBDb2xsZWN0aW9uPFJlc291cmNlPiByZW1vdmVkUmVzb3VyY2VzID0gbmV3IEFycmF5TGlzdDxSZXNvdXJjZT4oKTsKKworCS8qKgorCSAqIFJlc291cmNlcyB0aGF0IGhhdmUgYmVlbiBjaGFuZ2VkIHNpbmNlIGxhc3QgYWN0aXZhdGlvbi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgQ29sbGVjdGlvbjxSZXNvdXJjZT4gY2hhbmdlZFJlc291cmNlcyA9IG5ldyBBcnJheUxpc3Q8UmVzb3VyY2U+KCk7CisKKwkvKioKKwkgKiBSZXNvdXJjZXMgdGhhdCBoYXZlIGJlZW4gc2F2ZWQuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIENvbGxlY3Rpb248UmVzb3VyY2U+IHNhdmVkUmVzb3VyY2VzID0gbmV3IEFycmF5TGlzdDxSZXNvdXJjZT4oKTsKKworCS8qKgorCSAqIE1hcCB0byBzdG9yZSB0aGUgZGlhZ25vc3RpYyBhc3NvY2lhdGVkIHdpdGggYSByZXNvdXJjZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgTWFwPFJlc291cmNlLCBEaWFnbm9zdGljPiByZXNvdXJjZVRvRGlhZ25vc3RpY01hcCA9IG5ldyBMaW5rZWRIYXNoTWFwPFJlc291cmNlLCBEaWFnbm9zdGljPigpOworCisJLyoqCisJICogQ29udHJvbHMgd2hldGhlciB0aGUgcHJvYmxlbSBpbmRpY2F0aW9uIHNob3VsZCBiZSB1cGRhdGVkLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBib29sZWFuIHVwZGF0ZVByb2JsZW1JbmRpY2F0aW9uID0gdHJ1ZTsKKworCS8qKgorCSAqIEFkYXB0ZXIgdXNlZCB0byB1cGRhdGUgdGhlIHByb2JsZW0gaW5kaWNhdGlvbiB3aGVuIHJlc291cmNlcyBhcmUgZGVtYW5kZWQgbG9hZGVkLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBFQ29udGVudEFkYXB0ZXIgcHJvYmxlbUluZGljYXRpb25BZGFwdGVyID0gCisJCW5ldyBFQ29udGVudEFkYXB0ZXIoKSB7CisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyB2b2lkIG5vdGlmeUNoYW5nZWQoTm90aWZpY2F0aW9uIG5vdGlmaWNhdGlvbikgeworCQkJCWlmIChub3RpZmljYXRpb24uZ2V0Tm90aWZpZXIoKSBpbnN0YW5jZW9mIFJlc291cmNlKSB7CisJCQkJCXN3aXRjaCAobm90aWZpY2F0aW9uLmdldEZlYXR1cmVJRChSZXNvdXJjZS5jbGFzcykpIHsKKwkJCQkJCWNhc2UgUmVzb3VyY2UuUkVTT1VSQ0VfX0lTX0xPQURFRDoKKwkJCQkJCWNhc2UgUmVzb3VyY2UuUkVTT1VSQ0VfX0VSUk9SUzoKKwkJCQkJCWNhc2UgUmVzb3VyY2UuUkVTT1VSQ0VfX1dBUk5JTkdTOiB7CisJCQkJCQkJUmVzb3VyY2UgcmVzb3VyY2UgPSAoUmVzb3VyY2Upbm90aWZpY2F0aW9uLmdldE5vdGlmaWVyKCk7CisJCQkJCQkJRGlhZ25vc3RpYyBkaWFnbm9zdGljID0gYW5hbHl6ZVJlc291cmNlUHJvYmxlbXMocmVzb3VyY2UsIG51bGwpOworCQkJCQkJCWlmIChkaWFnbm9zdGljLmdldFNldmVyaXR5KCkgIT0gRGlhZ25vc3RpYy5PSykgeworCQkJCQkJCQlyZXNvdXJjZVRvRGlhZ25vc3RpY01hcC5wdXQocmVzb3VyY2UsIGRpYWdub3N0aWMpOworCQkJCQkJCX0KKwkJCQkJCQllbHNlIHsKKwkJCQkJCQkJcmVzb3VyY2VUb0RpYWdub3N0aWNNYXAucmVtb3ZlKHJlc291cmNlKTsKKwkJCQkJCQl9CisKKwkJCQkJCQlpZiAodXBkYXRlUHJvYmxlbUluZGljYXRpb24pIHsKKwkJCQkJCQkJZ2V0U2l0ZSgpLmdldFNoZWxsKCkuZ2V0RGlzcGxheSgpLmFzeW5jRXhlYworCQkJCQkJCQkJKG5ldyBSdW5uYWJsZSgpIHsKKwkJCQkJCQkJCQkgcHVibGljIHZvaWQgcnVuKCkgeworCQkJCQkJCQkJCQkgdXBkYXRlUHJvYmxlbUluZGljYXRpb24oKTsKKwkJCQkJCQkJCQkgfQorCQkJCQkJCQkJIH0pOworCQkJCQkJCX0KKwkJCQkJCQlicmVhazsKKwkJCQkJCX0KKwkJCQkJfQorCQkJCX0KKwkJCQllbHNlIHsKKwkJCQkJc3VwZXIubm90aWZ5Q2hhbmdlZChub3RpZmljYXRpb24pOworCQkJCX0KKwkJCX0KKworCQkJQE92ZXJyaWRlCisJCQlwcm90ZWN0ZWQgdm9pZCBzZXRUYXJnZXQoUmVzb3VyY2UgdGFyZ2V0KSB7CisJCQkJYmFzaWNTZXRUYXJnZXQodGFyZ2V0KTsKKwkJCX0KKworCQkJQE92ZXJyaWRlCisJCQlwcm90ZWN0ZWQgdm9pZCB1bnNldFRhcmdldChSZXNvdXJjZSB0YXJnZXQpIHsKKwkJCQliYXNpY1Vuc2V0VGFyZ2V0KHRhcmdldCk7CisJCQl9CisJCX07CisKKwkvKioKKwkgKiBUaGlzIGxpc3RlbnMgZm9yIHdvcmtzcGFjZSBjaGFuZ2VzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBJUmVzb3VyY2VDaGFuZ2VMaXN0ZW5lciByZXNvdXJjZUNoYW5nZUxpc3RlbmVyID0KKwkJbmV3IElSZXNvdXJjZUNoYW5nZUxpc3RlbmVyKCkgeworCQkJcHVibGljIHZvaWQgcmVzb3VyY2VDaGFuZ2VkKElSZXNvdXJjZUNoYW5nZUV2ZW50IGV2ZW50KSB7CisJCQkJSVJlc291cmNlRGVsdGEgZGVsdGEgPSBldmVudC5nZXREZWx0YSgpOworCQkJCXRyeSB7CisJCQkJCWNsYXNzIFJlc291cmNlRGVsdGFWaXNpdG9yIGltcGxlbWVudHMgSVJlc291cmNlRGVsdGFWaXNpdG9yIHsKKwkJCQkJCXByb3RlY3RlZCBSZXNvdXJjZVNldCByZXNvdXJjZVNldCA9IGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKTsKKwkJCQkJCXByb3RlY3RlZCBDb2xsZWN0aW9uPFJlc291cmNlPiBjaGFuZ2VkUmVzb3VyY2VzID0gbmV3IEFycmF5TGlzdDxSZXNvdXJjZT4oKTsKKwkJCQkJCXByb3RlY3RlZCBDb2xsZWN0aW9uPFJlc291cmNlPiByZW1vdmVkUmVzb3VyY2VzID0gbmV3IEFycmF5TGlzdDxSZXNvdXJjZT4oKTsKKworCQkJCQkJcHVibGljIGJvb2xlYW4gdmlzaXQoSVJlc291cmNlRGVsdGEgZGVsdGEpIHsKKwkJCQkJCQlpZiAoZGVsdGEuZ2V0UmVzb3VyY2UoKS5nZXRUeXBlKCkgPT0gSVJlc291cmNlLkZJTEUpIHsKKwkJCQkJCQkJaWYgKGRlbHRhLmdldEtpbmQoKSA9PSBJUmVzb3VyY2VEZWx0YS5SRU1PVkVEIHx8CisJCQkJCQkJCSAgICBkZWx0YS5nZXRLaW5kKCkgPT0gSVJlc291cmNlRGVsdGEuQ0hBTkdFRCAmJiBkZWx0YS5nZXRGbGFncygpICE9IElSZXNvdXJjZURlbHRhLk1BUktFUlMpIHsKKwkJCQkJCQkJCVJlc291cmNlIHJlc291cmNlID0gcmVzb3VyY2VTZXQuZ2V0UmVzb3VyY2UoVVJJLmNyZWF0ZVBsYXRmb3JtUmVzb3VyY2VVUkkoZGVsdGEuZ2V0RnVsbFBhdGgoKS50b1N0cmluZygpLCB0cnVlKSwgZmFsc2UpOworCQkJCQkJCQkJaWYgKHJlc291cmNlICE9IG51bGwpIHsKKwkJCQkJCQkJCQlpZiAoZGVsdGEuZ2V0S2luZCgpID09IElSZXNvdXJjZURlbHRhLlJFTU9WRUQpIHsKKwkJCQkJCQkJCQkJcmVtb3ZlZFJlc291cmNlcy5hZGQocmVzb3VyY2UpOworCQkJCQkJCQkJCX0KKwkJCQkJCQkJCQllbHNlIGlmICghc2F2ZWRSZXNvdXJjZXMucmVtb3ZlKHJlc291cmNlKSkgeworCQkJCQkJCQkJCQljaGFuZ2VkUmVzb3VyY2VzLmFkZChyZXNvdXJjZSk7CisJCQkJCQkJCQkJfQorCQkJCQkJCQkJfQorCQkJCQkJCQl9CisJCQkJCQkJfQorCisJCQkJCQkJcmV0dXJuIHRydWU7CisJCQkJCQl9CisKKwkJCQkJCXB1YmxpYyBDb2xsZWN0aW9uPFJlc291cmNlPiBnZXRDaGFuZ2VkUmVzb3VyY2VzKCkgeworCQkJCQkJCXJldHVybiBjaGFuZ2VkUmVzb3VyY2VzOworCQkJCQkJfQorCisJCQkJCQlwdWJsaWMgQ29sbGVjdGlvbjxSZXNvdXJjZT4gZ2V0UmVtb3ZlZFJlc291cmNlcygpIHsKKwkJCQkJCQlyZXR1cm4gcmVtb3ZlZFJlc291cmNlczsKKwkJCQkJCX0KKwkJCQkJfQorCisJCQkJCWZpbmFsIFJlc291cmNlRGVsdGFWaXNpdG9yIHZpc2l0b3IgPSBuZXcgUmVzb3VyY2VEZWx0YVZpc2l0b3IoKTsKKwkJCQkJZGVsdGEuYWNjZXB0KHZpc2l0b3IpOworCisJCQkJCWlmICghdmlzaXRvci5nZXRSZW1vdmVkUmVzb3VyY2VzKCkuaXNFbXB0eSgpKSB7CisJCQkJCQlnZXRTaXRlKCkuZ2V0U2hlbGwoKS5nZXREaXNwbGF5KCkuYXN5bmNFeGVjCisJCQkJCQkJKG5ldyBSdW5uYWJsZSgpIHsKKwkJCQkJCQkJIHB1YmxpYyB2b2lkIHJ1bigpIHsKKwkJCQkJCQkJCSByZW1vdmVkUmVzb3VyY2VzLmFkZEFsbCh2aXNpdG9yLmdldFJlbW92ZWRSZXNvdXJjZXMoKSk7CisJCQkJCQkJCQkgaWYgKCFpc0RpcnR5KCkpIHsKKwkJCQkJCQkJCQkgZ2V0U2l0ZSgpLmdldFBhZ2UoKS5jbG9zZUVkaXRvcihFeHBlcmltZW50YWxFZGl0b3IudGhpcywgZmFsc2UpOworCQkJCQkJCQkJIH0KKwkJCQkJCQkJIH0KKwkJCQkJCQkgfSk7CisJCQkJCX0KKworCQkJCQlpZiAoIXZpc2l0b3IuZ2V0Q2hhbmdlZFJlc291cmNlcygpLmlzRW1wdHkoKSkgeworCQkJCQkJZ2V0U2l0ZSgpLmdldFNoZWxsKCkuZ2V0RGlzcGxheSgpLmFzeW5jRXhlYworCQkJCQkJCShuZXcgUnVubmFibGUoKSB7CisJCQkJCQkJCSBwdWJsaWMgdm9pZCBydW4oKSB7CisJCQkJCQkJCQkgY2hhbmdlZFJlc291cmNlcy5hZGRBbGwodmlzaXRvci5nZXRDaGFuZ2VkUmVzb3VyY2VzKCkpOworCQkJCQkJCQkJIGlmIChnZXRTaXRlKCkuZ2V0UGFnZSgpLmdldEFjdGl2ZUVkaXRvcigpID09IEV4cGVyaW1lbnRhbEVkaXRvci50aGlzKSB7CisJCQkJCQkJCQkJIGhhbmRsZUFjdGl2YXRlKCk7CisJCQkJCQkJCQkgfQorCQkJCQkJCQkgfQorCQkJCQkJCSB9KTsKKwkJCQkJfQorCQkJCX0KKwkJCQljYXRjaCAoQ29yZUV4Y2VwdGlvbiBleGNlcHRpb24pIHsKKwkJCQkJRXhwZXJpbWVudGFsRWRpdG9yUGx1Z2luLklOU1RBTkNFLmxvZyhleGNlcHRpb24pOworCQkJCX0KKwkJCX0KKwkJfTsKKworCS8qKgorCSAqIEhhbmRsZXMgYWN0aXZhdGlvbiBvZiB0aGUgZWRpdG9yIG9yIGl0J3MgYXNzb2NpYXRlZCB2aWV3cy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBoYW5kbGVBY3RpdmF0ZSgpIHsKKwkJLy8gUmVjb21wdXRlIHRoZSByZWFkIG9ubHkgc3RhdGUuCisJCS8vCisJCWlmIChlZGl0aW5nRG9tYWluLmdldFJlc291cmNlVG9SZWFkT25seU1hcCgpICE9IG51bGwpIHsKKwkJICBlZGl0aW5nRG9tYWluLmdldFJlc291cmNlVG9SZWFkT25seU1hcCgpLmNsZWFyKCk7CisKKwkJICAvLyBSZWZyZXNoIGFueSBhY3Rpb25zIHRoYXQgbWF5IGJlY29tZSBlbmFibGVkIG9yIGRpc2FibGVkLgorCQkgIC8vCisJCSAgc2V0U2VsZWN0aW9uKGdldFNlbGVjdGlvbigpKTsKKwkJfQorCisJCWlmICghcmVtb3ZlZFJlc291cmNlcy5pc0VtcHR5KCkpIHsKKwkJCWlmIChoYW5kbGVEaXJ0eUNvbmZsaWN0KCkpIHsKKwkJCQlnZXRTaXRlKCkuZ2V0UGFnZSgpLmNsb3NlRWRpdG9yKEV4cGVyaW1lbnRhbEVkaXRvci50aGlzLCBmYWxzZSk7CisJCQl9CisJCQllbHNlIHsKKwkJCQlyZW1vdmVkUmVzb3VyY2VzLmNsZWFyKCk7CisJCQkJY2hhbmdlZFJlc291cmNlcy5jbGVhcigpOworCQkJCXNhdmVkUmVzb3VyY2VzLmNsZWFyKCk7CisJCQl9CisJCX0KKwkJZWxzZSBpZiAoIWNoYW5nZWRSZXNvdXJjZXMuaXNFbXB0eSgpKSB7CisJCQljaGFuZ2VkUmVzb3VyY2VzLnJlbW92ZUFsbChzYXZlZFJlc291cmNlcyk7CisJCQloYW5kbGVDaGFuZ2VkUmVzb3VyY2VzKCk7CisJCQljaGFuZ2VkUmVzb3VyY2VzLmNsZWFyKCk7CisJCQlzYXZlZFJlc291cmNlcy5jbGVhcigpOworCQl9CisJfQorCisJLyoqCisJICogSGFuZGxlcyB3aGF0IHRvIGRvIHdpdGggY2hhbmdlZCByZXNvdXJjZXMgb24gYWN0aXZhdGlvbi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBoYW5kbGVDaGFuZ2VkUmVzb3VyY2VzKCkgeworCQlpZiAoIWNoYW5nZWRSZXNvdXJjZXMuaXNFbXB0eSgpICYmICghaXNEaXJ0eSgpIHx8IGhhbmRsZURpcnR5Q29uZmxpY3QoKSkpIHsKKwkJCWlmIChpc0RpcnR5KCkpIHsKKwkJCQljaGFuZ2VkUmVzb3VyY2VzLmFkZEFsbChlZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkuZ2V0UmVzb3VyY2VzKCkpOworCQkJfQorCQkJZWRpdGluZ0RvbWFpbi5nZXRDb21tYW5kU3RhY2soKS5mbHVzaCgpOworCisJCQl1cGRhdGVQcm9ibGVtSW5kaWNhdGlvbiA9IGZhbHNlOworCQkJZm9yIChSZXNvdXJjZSByZXNvdXJjZSA6IGNoYW5nZWRSZXNvdXJjZXMpIHsKKwkJCQlpZiAocmVzb3VyY2UuaXNMb2FkZWQoKSkgeworCQkJCQlyZXNvdXJjZS51bmxvYWQoKTsKKwkJCQkJdHJ5IHsKKwkJCQkJCXJlc291cmNlLmxvYWQoQ29sbGVjdGlvbnMuRU1QVFlfTUFQKTsKKwkJCQkJfQorCQkJCQljYXRjaCAoSU9FeGNlcHRpb24gZXhjZXB0aW9uKSB7CisJCQkJCQlpZiAoIXJlc291cmNlVG9EaWFnbm9zdGljTWFwLmNvbnRhaW5zS2V5KHJlc291cmNlKSkgeworCQkJCQkJCXJlc291cmNlVG9EaWFnbm9zdGljTWFwLnB1dChyZXNvdXJjZSwgYW5hbHl6ZVJlc291cmNlUHJvYmxlbXMocmVzb3VyY2UsIGV4Y2VwdGlvbikpOworCQkJCQkJfQorCQkJCQl9CisJCQkJfQorCQkJfQorCisJCQlpZiAoQWRhcHRlckZhY3RvcnlFZGl0aW5nRG9tYWluLmlzU3RhbGUoZWRpdG9yU2VsZWN0aW9uKSkgeworCQkJCXNldFNlbGVjdGlvbihTdHJ1Y3R1cmVkU2VsZWN0aW9uLkVNUFRZKTsKKwkJCX0KKworCQkJdXBkYXRlUHJvYmxlbUluZGljYXRpb24gPSB0cnVlOworCQkJdXBkYXRlUHJvYmxlbUluZGljYXRpb24oKTsKKwkJfQorCX0KKyAgCisJLyoqCisJICogVXBkYXRlcyB0aGUgcHJvYmxlbXMgaW5kaWNhdGlvbiB3aXRoIHRoZSBpbmZvcm1hdGlvbiBkZXNjcmliZWQgaW4gdGhlIHNwZWNpZmllZCBkaWFnbm9zdGljLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIHVwZGF0ZVByb2JsZW1JbmRpY2F0aW9uKCkgeworCQlpZiAodXBkYXRlUHJvYmxlbUluZGljYXRpb24pIHsKKwkJCUJhc2ljRGlhZ25vc3RpYyBkaWFnbm9zdGljID0KKwkJCQluZXcgQmFzaWNEaWFnbm9zdGljCisJCQkJCShEaWFnbm9zdGljLk9LLAorCQkJCQkgIm9yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy5leHBlcmltZW50YWwiLAorCQkJCQkgMCwKKwkJCQkJIG51bGwsCisJCQkJCSBuZXcgT2JqZWN0IFtdIHsgZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpIH0pOworCQkJZm9yIChEaWFnbm9zdGljIGNoaWxkRGlhZ25vc3RpYyA6IHJlc291cmNlVG9EaWFnbm9zdGljTWFwLnZhbHVlcygpKSB7CisJCQkJaWYgKGNoaWxkRGlhZ25vc3RpYy5nZXRTZXZlcml0eSgpICE9IERpYWdub3N0aWMuT0spIHsKKwkJCQkJZGlhZ25vc3RpYy5hZGQoY2hpbGREaWFnbm9zdGljKTsKKwkJCQl9CisJCQl9CisKKwkJCWludCBsYXN0RWRpdG9yUGFnZSA9IGdldFBhZ2VDb3VudCgpIC0gMTsKKwkJCWlmIChsYXN0RWRpdG9yUGFnZSA+PSAwICYmIGdldEVkaXRvcihsYXN0RWRpdG9yUGFnZSkgaW5zdGFuY2VvZiBQcm9ibGVtRWRpdG9yUGFydCkgeworCQkJCSgoUHJvYmxlbUVkaXRvclBhcnQpZ2V0RWRpdG9yKGxhc3RFZGl0b3JQYWdlKSkuc2V0RGlhZ25vc3RpYyhkaWFnbm9zdGljKTsKKwkJCQlpZiAoZGlhZ25vc3RpYy5nZXRTZXZlcml0eSgpICE9IERpYWdub3N0aWMuT0spIHsKKwkJCQkJc2V0QWN0aXZlUGFnZShsYXN0RWRpdG9yUGFnZSk7CisJCQkJfQorCQkJfQorCQkJZWxzZSBpZiAoZGlhZ25vc3RpYy5nZXRTZXZlcml0eSgpICE9IERpYWdub3N0aWMuT0spIHsKKwkJCQlQcm9ibGVtRWRpdG9yUGFydCBwcm9ibGVtRWRpdG9yUGFydCA9IG5ldyBQcm9ibGVtRWRpdG9yUGFydCgpOworCQkJCXByb2JsZW1FZGl0b3JQYXJ0LnNldERpYWdub3N0aWMoZGlhZ25vc3RpYyk7CisJCQkJcHJvYmxlbUVkaXRvclBhcnQuc2V0TWFya2VySGVscGVyKG1hcmtlckhlbHBlcik7CisJCQkJdHJ5IHsKKwkJCQkJYWRkUGFnZSgrK2xhc3RFZGl0b3JQYWdlLCBwcm9ibGVtRWRpdG9yUGFydCwgZ2V0RWRpdG9ySW5wdXQoKSk7CisJCQkJCXNldFBhZ2VUZXh0KGxhc3RFZGl0b3JQYWdlLCBwcm9ibGVtRWRpdG9yUGFydC5nZXRQYXJ0TmFtZSgpKTsKKwkJCQkJc2V0QWN0aXZlUGFnZShsYXN0RWRpdG9yUGFnZSk7CisJCQkJCXNob3dUYWJzKCk7CisJCQkJfQorCQkJCWNhdGNoIChQYXJ0SW5pdEV4Y2VwdGlvbiBleGNlcHRpb24pIHsKKwkJCQkJRXhwZXJpbWVudGFsRWRpdG9yUGx1Z2luLklOU1RBTkNFLmxvZyhleGNlcHRpb24pOworCQkJCX0KKwkJCX0KKworCQkJaWYgKG1hcmtlckhlbHBlci5oYXNNYXJrZXJzKGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKSkpIHsKKwkJCQltYXJrZXJIZWxwZXIuZGVsZXRlTWFya2VycyhlZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkpOworCQkJCWlmIChkaWFnbm9zdGljLmdldFNldmVyaXR5KCkgIT0gRGlhZ25vc3RpYy5PSykgeworCQkJCQl0cnkgeworCQkJCQkJbWFya2VySGVscGVyLmNyZWF0ZU1hcmtlcnMoZGlhZ25vc3RpYyk7CisJCQkJCX0KKwkJCQkJY2F0Y2ggKENvcmVFeGNlcHRpb24gZXhjZXB0aW9uKSB7CisJCQkJCQlFeHBlcmltZW50YWxFZGl0b3JQbHVnaW4uSU5TVEFOQ0UubG9nKGV4Y2VwdGlvbik7CisJCQkJCX0KKwkJCQl9CisJCQl9CisJCX0KKwl9CisKKwkvKioKKwkgKiBTaG93cyBhIGRpYWxvZyB0aGF0IGFza3MgaWYgY29uZmxpY3RpbmcgY2hhbmdlcyBzaG91bGQgYmUgZGlzY2FyZGVkLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBib29sZWFuIGhhbmRsZURpcnR5Q29uZmxpY3QoKSB7CisJCXJldHVybgorCQkJTWVzc2FnZURpYWxvZy5vcGVuUXVlc3Rpb24KKwkJCQkoZ2V0U2l0ZSgpLmdldFNoZWxsKCksCisJCQkJIGdldFN0cmluZygiX1VJX0ZpbGVDb25mbGljdF9sYWJlbCIpLAorCQkJCSBnZXRTdHJpbmcoIl9XQVJOX0ZpbGVDb25mbGljdCIpKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGNyZWF0ZXMgYSBtb2RlbCBlZGl0b3IuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEV4cGVyaW1lbnRhbEVkaXRvcigpIHsKKwkJc3VwZXIoKTsKKwkJaW5pdGlhbGl6ZUVkaXRpbmdEb21haW4oKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHNldHMgdXAgdGhlIGVkaXRpbmcgZG9tYWluIGZvciB0aGUgbW9kZWwgZWRpdG9yLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIGluaXRpYWxpemVFZGl0aW5nRG9tYWluKCkgeworCQkvLyBDcmVhdGUgYW4gYWRhcHRlciBmYWN0b3J5IHRoYXQgeWllbGRzIGl0ZW0gcHJvdmlkZXJzLgorCQkvLworCQlhZGFwdGVyRmFjdG9yeSA9IG5ldyBDb21wb3NlZEFkYXB0ZXJGYWN0b3J5KENvbXBvc2VkQWRhcHRlckZhY3RvcnkuRGVzY3JpcHRvci5SZWdpc3RyeS5JTlNUQU5DRSk7CisKKwkJYWRhcHRlckZhY3RvcnkuYWRkQWRhcHRlckZhY3RvcnkobmV3IFJlc291cmNlSXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkoKSk7CisJCWFkYXB0ZXJGYWN0b3J5LmFkZEFkYXB0ZXJGYWN0b3J5KG5ldyBFeHBlcmltZW50YWxJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSgpKTsKKwkJYWRhcHRlckZhY3RvcnkuYWRkQWRhcHRlckZhY3RvcnkobmV3IFN0YW5kYXJkSXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkoKSk7CisJCWFkYXB0ZXJGYWN0b3J5LmFkZEFkYXB0ZXJGYWN0b3J5KG5ldyBDb21tb25JdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSgpKTsKKwkJYWRhcHRlckZhY3RvcnkuYWRkQWRhcHRlckZhY3RvcnkobmV3IE1vZGVsSXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkoKSk7CisJCWFkYXB0ZXJGYWN0b3J5LmFkZEFkYXB0ZXJGYWN0b3J5KG5ldyBHcmFwaEl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5KCkpOworCQlhZGFwdGVyRmFjdG9yeS5hZGRBZGFwdGVyRmFjdG9yeShuZXcgTGFiZWxzSXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkoKSk7CisJCWFkYXB0ZXJGYWN0b3J5LmFkZEFkYXB0ZXJGYWN0b3J5KG5ldyBNb2RpZmllckl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5KCkpOworCQlhZGFwdGVyRmFjdG9yeS5hZGRBZGFwdGVyRmFjdG9yeShuZXcgRWNvcmVJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSgpKTsKKwkJYWRhcHRlckZhY3RvcnkuYWRkQWRhcHRlckZhY3RvcnkobmV3IG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5wcm92aWRlci5TdGFuZGFyZEl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5KCkpOworCQlhZGFwdGVyRmFjdG9yeS5hZGRBZGFwdGVyRmFjdG9yeShuZXcgU2NlbmFyaW9JdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSgpKTsKKwkJYWRhcHRlckZhY3RvcnkuYWRkQWRhcHRlckZhY3RvcnkobmV3IFNlcXVlbmNlckl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5KCkpOworCQlhZGFwdGVyRmFjdG9yeS5hZGRBZGFwdGVyRmFjdG9yeShuZXcgU29sdmVySXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkoKSk7CisJCWFkYXB0ZXJGYWN0b3J5LmFkZEFkYXB0ZXJGYWN0b3J5KG5ldyBMb2dnZXJJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSgpKTsKKwkJYWRhcHRlckZhY3RvcnkuYWRkQWRhcHRlckZhY3RvcnkobmV3IFJlZmxlY3RpdmVJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSgpKTsKKworCQkvLyBDcmVhdGUgdGhlIGNvbW1hbmQgc3RhY2sgdGhhdCB3aWxsIG5vdGlmeSB0aGlzIGVkaXRvciBhcyBjb21tYW5kcyBhcmUgZXhlY3V0ZWQuCisJCS8vCisJCUJhc2ljQ29tbWFuZFN0YWNrIGNvbW1hbmRTdGFjayA9IG5ldyBCYXNpY0NvbW1hbmRTdGFjaygpOworCisJCS8vIEFkZCBhIGxpc3RlbmVyIHRvIHNldCB0aGUgbW9zdCByZWNlbnQgY29tbWFuZCdzIGFmZmVjdGVkIG9iamVjdHMgdG8gYmUgdGhlIHNlbGVjdGlvbiBvZiB0aGUgdmlld2VyIHdpdGggZm9jdXMuCisJCS8vCisJCWNvbW1hbmRTdGFjay5hZGRDb21tYW5kU3RhY2tMaXN0ZW5lcgorCQkJKG5ldyBDb21tYW5kU3RhY2tMaXN0ZW5lcigpIHsKKwkJCQkgcHVibGljIHZvaWQgY29tbWFuZFN0YWNrQ2hhbmdlZChmaW5hbCBFdmVudE9iamVjdCBldmVudCkgeworCQkJCQkgZ2V0Q29udGFpbmVyKCkuZ2V0RGlzcGxheSgpLmFzeW5jRXhlYworCQkJCQkJIChuZXcgUnVubmFibGUoKSB7CisJCQkJCQkJICBwdWJsaWMgdm9pZCBydW4oKSB7CisJCQkJCQkJCSAgZmlyZVByb3BlcnR5Q2hhbmdlKElFZGl0b3JQYXJ0LlBST1BfRElSVFkpOworCisJCQkJCQkJCSAgLy8gVHJ5IHRvIHNlbGVjdCB0aGUgYWZmZWN0ZWQgb2JqZWN0cy4KKwkJCQkJCQkJICAvLworCQkJCQkJCQkgIENvbW1hbmQgbW9zdFJlY2VudENvbW1hbmQgPSAoKENvbW1hbmRTdGFjaylldmVudC5nZXRTb3VyY2UoKSkuZ2V0TW9zdFJlY2VudENvbW1hbmQoKTsKKwkJCQkJCQkJICBpZiAobW9zdFJlY2VudENvbW1hbmQgIT0gbnVsbCkgeworCQkJCQkJCQkJICBzZXRTZWxlY3Rpb25Ub1ZpZXdlcihtb3N0UmVjZW50Q29tbWFuZC5nZXRBZmZlY3RlZE9iamVjdHMoKSk7CisJCQkJCQkJCSAgfQorCQkJCQkJCQkgIGlmIChwcm9wZXJ0eVNoZWV0UGFnZSAhPSBudWxsICYmICFwcm9wZXJ0eVNoZWV0UGFnZS5nZXRDb250cm9sKCkuaXNEaXNwb3NlZCgpKSB7CisJCQkJCQkJCQkgIHByb3BlcnR5U2hlZXRQYWdlLnJlZnJlc2goKTsKKwkJCQkJCQkJICB9CisJCQkJCQkJICB9CisJCQkJCQkgIH0pOworCQkJCSB9CisJCQkgfSk7CisKKwkJLy8gQ3JlYXRlIHRoZSBlZGl0aW5nIGRvbWFpbiB3aXRoIGEgc3BlY2lhbCBjb21tYW5kIHN0YWNrLgorCQkvLworCQllZGl0aW5nRG9tYWluID0gbmV3IEFkYXB0ZXJGYWN0b3J5RWRpdGluZ0RvbWFpbihhZGFwdGVyRmFjdG9yeSwgY29tbWFuZFN0YWNrLCBuZXcgSGFzaE1hcDxSZXNvdXJjZSwgQm9vbGVhbj4oKSk7CisJfQorCisJLyoqCisJICogVGhpcyBpcyBoZXJlIGZvciB0aGUgbGlzdGVuZXIgdG8gYmUgYWJsZSB0byBjYWxsIGl0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCQkJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgZmlyZVByb3BlcnR5Q2hhbmdlKGludCBhY3Rpb24pIHsKKwkJc3VwZXIuZmlyZVByb3BlcnR5Q2hhbmdlKGFjdGlvbik7CisJfQorCisJLyoqCisJICogVGhpcyBzZXRzIHRoZSBzZWxlY3Rpb24gaW50byB3aGljaGV2ZXIgdmlld2VyIGlzIGFjdGl2ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRTZWxlY3Rpb25Ub1ZpZXdlcihDb2xsZWN0aW9uPD8+IGNvbGxlY3Rpb24pIHsKKwkJZmluYWwgQ29sbGVjdGlvbjw/PiB0aGVTZWxlY3Rpb24gPSBjb2xsZWN0aW9uOworCQkvLyBNYWtlIHN1cmUgaXQncyBva2F5LgorCQkvLworCQlpZiAodGhlU2VsZWN0aW9uICE9IG51bGwgJiYgIXRoZVNlbGVjdGlvbi5pc0VtcHR5KCkpIHsKKwkJCVJ1bm5hYmxlIHJ1bm5hYmxlID0KKwkJCQluZXcgUnVubmFibGUoKSB7CisJCQkJCXB1YmxpYyB2b2lkIHJ1bigpIHsKKwkJCQkJCS8vIFRyeSB0byBzZWxlY3QgdGhlIGl0ZW1zIGluIHRoZSBjdXJyZW50IGNvbnRlbnQgdmlld2VyIG9mIHRoZSBlZGl0b3IuCisJCQkJCQkvLworCQkJCQkJaWYgKGN1cnJlbnRWaWV3ZXIgIT0gbnVsbCkgeworCQkJCQkJCWN1cnJlbnRWaWV3ZXIuc2V0U2VsZWN0aW9uKG5ldyBTdHJ1Y3R1cmVkU2VsZWN0aW9uKHRoZVNlbGVjdGlvbi50b0FycmF5KCkpLCB0cnVlKTsKKwkJCQkJCX0KKwkJCQkJfQorCQkJCX07CisJCQlnZXRTaXRlKCkuZ2V0U2hlbGwoKS5nZXREaXNwbGF5KCkuYXN5bmNFeGVjKHJ1bm5hYmxlKTsKKwkJfQorCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyB0aGUgZWRpdGluZyBkb21haW4gYXMgcmVxdWlyZWQgYnkgdGhlIHtAbGluayBJRWRpdGluZ0RvbWFpblByb3ZpZGVyfSBpbnRlcmZhY2UuCisJICogVGhpcyBpcyBpbXBvcnRhbnQgZm9yIGltcGxlbWVudGluZyB0aGUgc3RhdGljIG1ldGhvZHMgb2Yge0BsaW5rIEFkYXB0ZXJGYWN0b3J5RWRpdGluZ0RvbWFpbn0KKwkgKiBhbmQgZm9yIHN1cHBvcnRpbmcge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmFjdGlvbi5Db21tYW5kQWN0aW9ufS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRWRpdGluZ0RvbWFpbiBnZXRFZGl0aW5nRG9tYWluKCkgeworCQlyZXR1cm4gZWRpdGluZ0RvbWFpbjsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgY2xhc3MgUmV2ZXJzZUFkYXB0ZXJGYWN0b3J5Q29udGVudFByb3ZpZGVyIGV4dGVuZHMgQWRhcHRlckZhY3RvcnlDb250ZW50UHJvdmlkZXIgeworCQkvKioKKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCXB1YmxpYyBSZXZlcnNlQWRhcHRlckZhY3RvcnlDb250ZW50UHJvdmlkZXIoQWRhcHRlckZhY3RvcnkgYWRhcHRlckZhY3RvcnkpIHsKKwkJCXN1cGVyKGFkYXB0ZXJGYWN0b3J5KTsKKwkJfQorCisJCS8qKgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJQE92ZXJyaWRlCisJCXB1YmxpYyBPYmplY3QgW10gZ2V0RWxlbWVudHMoT2JqZWN0IG9iamVjdCkgeworCQkJT2JqZWN0IHBhcmVudCA9IHN1cGVyLmdldFBhcmVudChvYmplY3QpOworCQkJcmV0dXJuIChwYXJlbnQgPT0gbnVsbCA/IENvbGxlY3Rpb25zLkVNUFRZX1NFVCA6IENvbGxlY3Rpb25zLnNpbmdsZXRvbihwYXJlbnQpKS50b0FycmF5KCk7CisJCX0KKworCQkvKioKKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUBPdmVycmlkZQorCQlwdWJsaWMgT2JqZWN0IFtdIGdldENoaWxkcmVuKE9iamVjdCBvYmplY3QpIHsKKwkJCU9iamVjdCBwYXJlbnQgPSBzdXBlci5nZXRQYXJlbnQob2JqZWN0KTsKKwkJCXJldHVybiAocGFyZW50ID09IG51bGwgPyBDb2xsZWN0aW9ucy5FTVBUWV9TRVQgOiBDb2xsZWN0aW9ucy5zaW5nbGV0b24ocGFyZW50KSkudG9BcnJheSgpOworCQl9CisKKwkJLyoqCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlAT3ZlcnJpZGUKKwkJcHVibGljIGJvb2xlYW4gaGFzQ2hpbGRyZW4oT2JqZWN0IG9iamVjdCkgeworCQkJT2JqZWN0IHBhcmVudCA9IHN1cGVyLmdldFBhcmVudChvYmplY3QpOworCQkJcmV0dXJuIHBhcmVudCAhPSBudWxsOworCQl9CisKKwkJLyoqCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlAT3ZlcnJpZGUKKwkJcHVibGljIE9iamVjdCBnZXRQYXJlbnQoT2JqZWN0IG9iamVjdCkgeworCQkJcmV0dXJuIG51bGw7CisJCX0KKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRDdXJyZW50Vmlld2VyUGFuZShWaWV3ZXJQYW5lIHZpZXdlclBhbmUpIHsKKwkJaWYgKGN1cnJlbnRWaWV3ZXJQYW5lICE9IHZpZXdlclBhbmUpIHsKKwkJCWlmIChjdXJyZW50Vmlld2VyUGFuZSAhPSBudWxsKSB7CisJCQkJY3VycmVudFZpZXdlclBhbmUuc2hvd0ZvY3VzKGZhbHNlKTsKKwkJCX0KKwkJCWN1cnJlbnRWaWV3ZXJQYW5lID0gdmlld2VyUGFuZTsKKwkJfQorCQlzZXRDdXJyZW50Vmlld2VyKGN1cnJlbnRWaWV3ZXJQYW5lLmdldFZpZXdlcigpKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIG1ha2VzIHN1cmUgdGhhdCBvbmUgY29udGVudCB2aWV3ZXIsIGVpdGhlciBmb3IgdGhlIGN1cnJlbnQgcGFnZSBvciB0aGUgb3V0bGluZSB2aWV3LCBpZiBpdCBoYXMgZm9jdXMsCisJICogaXMgdGhlIGN1cnJlbnQgb25lLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIHNldEN1cnJlbnRWaWV3ZXIoVmlld2VyIHZpZXdlcikgeworCQkvLyBJZiBpdCBpcyBjaGFuZ2luZy4uLgorCQkvLworCQlpZiAoY3VycmVudFZpZXdlciAhPSB2aWV3ZXIpIHsKKwkJCWlmIChzZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIgPT0gbnVsbCkgeworCQkJCS8vIENyZWF0ZSB0aGUgbGlzdGVuZXIgb24gZGVtYW5kLgorCQkJCS8vCisJCQkJc2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyID0KKwkJCQkJbmV3IElTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIoKSB7CisJCQkJCQkvLyBUaGlzIGp1c3Qgbm90aWZpZXMgdGhvc2UgdGhpbmdzIHRoYXQgYXJlIGFmZmVjdGVkIGJ5IHRoZSBzZWN0aW9uLgorCQkJCQkJLy8KKwkJCQkJCXB1YmxpYyB2b2lkIHNlbGVjdGlvbkNoYW5nZWQoU2VsZWN0aW9uQ2hhbmdlZEV2ZW50IHNlbGVjdGlvbkNoYW5nZWRFdmVudCkgeworCQkJCQkJCXNldFNlbGVjdGlvbihzZWxlY3Rpb25DaGFuZ2VkRXZlbnQuZ2V0U2VsZWN0aW9uKCkpOworCQkJCQkJfQorCQkJCQl9OworCQkJfQorCisJCQkvLyBTdG9wIGxpc3RlbmluZyB0byB0aGUgb2xkIG9uZS4KKwkJCS8vCisJCQlpZiAoY3VycmVudFZpZXdlciAhPSBudWxsKSB7CisJCQkJY3VycmVudFZpZXdlci5yZW1vdmVTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIoc2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyKTsKKwkJCX0KKworCQkJLy8gU3RhcnQgbGlzdGVuaW5nIHRvIHRoZSBuZXcgb25lLgorCQkJLy8KKwkJCWlmICh2aWV3ZXIgIT0gbnVsbCkgeworCQkJCXZpZXdlci5hZGRTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIoc2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyKTsKKwkJCX0KKworCQkJLy8gUmVtZW1iZXIgaXQuCisJCQkvLworCQkJY3VycmVudFZpZXdlciA9IHZpZXdlcjsKKworCQkJLy8gU2V0IHRoZSBlZGl0b3JzIHNlbGVjdGlvbiBiYXNlZCBvbiB0aGUgY3VycmVudCB2aWV3ZXIncyBzZWxlY3Rpb24uCisJCQkvLworCQkJc2V0U2VsZWN0aW9uKGN1cnJlbnRWaWV3ZXIgPT0gbnVsbCA/IFN0cnVjdHVyZWRTZWxlY3Rpb24uRU1QVFkgOiBjdXJyZW50Vmlld2VyLmdldFNlbGVjdGlvbigpKTsKKwkJfQorCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyB0aGUgdmlld2VyIGFzIHJlcXVpcmVkIGJ5IHRoZSB7QGxpbmsgSVZpZXdlclByb3ZpZGVyfSBpbnRlcmZhY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFZpZXdlciBnZXRWaWV3ZXIoKSB7CisJCXJldHVybiBjdXJyZW50Vmlld2VyOworCX0KKworCS8qKgorCSAqIFRoaXMgY3JlYXRlcyBhIGNvbnRleHQgbWVudSBmb3IgdGhlIHZpZXdlciBhbmQgYWRkcyBhIGxpc3RlbmVyIGFzIHdlbGwgcmVnaXN0ZXJpbmcgdGhlIG1lbnUgZm9yIGV4dGVuc2lvbi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBjcmVhdGVDb250ZXh0TWVudUZvcihTdHJ1Y3R1cmVkVmlld2VyIHZpZXdlcikgeworCQlNZW51TWFuYWdlciBjb250ZXh0TWVudSA9IG5ldyBNZW51TWFuYWdlcigiI1BvcFVwIik7CisJCWNvbnRleHRNZW51LmFkZChuZXcgU2VwYXJhdG9yKCJhZGRpdGlvbnMiKSk7CisJCWNvbnRleHRNZW51LnNldFJlbW92ZUFsbFdoZW5TaG93bih0cnVlKTsKKwkJY29udGV4dE1lbnUuYWRkTWVudUxpc3RlbmVyKHRoaXMpOworCQlNZW51IG1lbnU9IGNvbnRleHRNZW51LmNyZWF0ZUNvbnRleHRNZW51KHZpZXdlci5nZXRDb250cm9sKCkpOworCQl2aWV3ZXIuZ2V0Q29udHJvbCgpLnNldE1lbnUobWVudSk7CisJCWdldFNpdGUoKS5yZWdpc3RlckNvbnRleHRNZW51KGNvbnRleHRNZW51LCBuZXcgVW53cmFwcGluZ1NlbGVjdGlvblByb3ZpZGVyKHZpZXdlcikpOworCisJCWludCBkbmRPcGVyYXRpb25zID0gRE5ELkRST1BfQ09QWSB8IERORC5EUk9QX01PVkUgfCBETkQuRFJPUF9MSU5LOworCQlUcmFuc2ZlcltdIHRyYW5zZmVycyA9IG5ldyBUcmFuc2ZlcltdIHsgTG9jYWxUcmFuc2Zlci5nZXRJbnN0YW5jZSgpIH07CisJCXZpZXdlci5hZGREcmFnU3VwcG9ydChkbmRPcGVyYXRpb25zLCB0cmFuc2ZlcnMsIG5ldyBWaWV3ZXJEcmFnQWRhcHRlcih2aWV3ZXIpKTsKKwkJdmlld2VyLmFkZERyb3BTdXBwb3J0KGRuZE9wZXJhdGlvbnMsIHRyYW5zZmVycywgbmV3IEVkaXRpbmdEb21haW5WaWV3ZXJEcm9wQWRhcHRlcihlZGl0aW5nRG9tYWluLCB2aWV3ZXIpKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGlzIHRoZSBtZXRob2QgY2FsbGVkIHRvIGxvYWQgYSByZXNvdXJjZSBpbnRvIHRoZSBlZGl0aW5nIGRvbWFpbidzIHJlc291cmNlIHNldCBiYXNlZCBvbiB0aGUgZWRpdG9yJ3MgaW5wdXQuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgY3JlYXRlTW9kZWwoKSB7CisJCVVSSSByZXNvdXJjZVVSSSA9IEVkaXRVSVV0aWwuZ2V0VVJJKGdldEVkaXRvcklucHV0KCkpOworCQlFeGNlcHRpb24gZXhjZXB0aW9uID0gbnVsbDsKKwkJUmVzb3VyY2UgcmVzb3VyY2UgPSBudWxsOworCQl0cnkgeworCQkJLy8gTG9hZCB0aGUgcmVzb3VyY2UgdGhyb3VnaCB0aGUgZWRpdGluZyBkb21haW4uCisJCQkvLworCQkJcmVzb3VyY2UgPSBlZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkuZ2V0UmVzb3VyY2UocmVzb3VyY2VVUkksIHRydWUpOworCQl9CisJCWNhdGNoIChFeGNlcHRpb24gZSkgeworCQkJZXhjZXB0aW9uID0gZTsKKwkJCXJlc291cmNlID0gZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpLmdldFJlc291cmNlKHJlc291cmNlVVJJLCBmYWxzZSk7CisJCX0KKworCQlEaWFnbm9zdGljIGRpYWdub3N0aWMgPSBhbmFseXplUmVzb3VyY2VQcm9ibGVtcyhyZXNvdXJjZSwgZXhjZXB0aW9uKTsKKwkJaWYgKGRpYWdub3N0aWMuZ2V0U2V2ZXJpdHkoKSAhPSBEaWFnbm9zdGljLk9LKSB7CisJCQlyZXNvdXJjZVRvRGlhZ25vc3RpY01hcC5wdXQocmVzb3VyY2UsICBhbmFseXplUmVzb3VyY2VQcm9ibGVtcyhyZXNvdXJjZSwgZXhjZXB0aW9uKSk7CisJCX0KKwkJZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpLmVBZGFwdGVycygpLmFkZChwcm9ibGVtSW5kaWNhdGlvbkFkYXB0ZXIpOworCX0KKworCS8qKgorCSAqIFJldHVybnMgYSBkaWFnbm9zdGljIGRlc2NyaWJpbmcgdGhlIGVycm9ycyBhbmQgd2FybmluZ3MgbGlzdGVkIGluIHRoZSByZXNvdXJjZQorCSAqIGFuZCB0aGUgc3BlY2lmaWVkIGV4Y2VwdGlvbiAoaWYgYW55KS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRGlhZ25vc3RpYyBhbmFseXplUmVzb3VyY2VQcm9ibGVtcyhSZXNvdXJjZSByZXNvdXJjZSwgRXhjZXB0aW9uIGV4Y2VwdGlvbikgeworCQlpZiAoIXJlc291cmNlLmdldEVycm9ycygpLmlzRW1wdHkoKSB8fCAhcmVzb3VyY2UuZ2V0V2FybmluZ3MoKS5pc0VtcHR5KCkpIHsKKwkJCUJhc2ljRGlhZ25vc3RpYyBiYXNpY0RpYWdub3N0aWMgPQorCQkJCW5ldyBCYXNpY0RpYWdub3N0aWMKKwkJCQkJKERpYWdub3N0aWMuRVJST1IsCisJCQkJCSAib3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzLmV4cGVyaW1lbnRhbCIsCisJCQkJCSAwLAorCQkJCQkgZ2V0U3RyaW5nKCJfVUlfQ3JlYXRlTW9kZWxFcnJvcl9tZXNzYWdlIiwgcmVzb3VyY2UuZ2V0VVJJKCkpLAorCQkJCQkgbmV3IE9iamVjdCBbXSB7IGV4Y2VwdGlvbiA9PSBudWxsID8gKE9iamVjdClyZXNvdXJjZSA6IGV4Y2VwdGlvbiB9KTsKKwkJCWJhc2ljRGlhZ25vc3RpYy5tZXJnZShFY29yZVV0aWwuY29tcHV0ZURpYWdub3N0aWMocmVzb3VyY2UsIHRydWUpKTsKKwkJCXJldHVybiBiYXNpY0RpYWdub3N0aWM7CisJCX0KKwkJZWxzZSBpZiAoZXhjZXB0aW9uICE9IG51bGwpIHsKKwkJCXJldHVybgorCQkJCW5ldyBCYXNpY0RpYWdub3N0aWMKKwkJCQkJKERpYWdub3N0aWMuRVJST1IsCisJCQkJCSAib3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzLmV4cGVyaW1lbnRhbCIsCisJCQkJCSAwLAorCQkJCQkgZ2V0U3RyaW5nKCJfVUlfQ3JlYXRlTW9kZWxFcnJvcl9tZXNzYWdlIiwgcmVzb3VyY2UuZ2V0VVJJKCkpLAorCQkJCQkgbmV3IE9iamVjdFtdIHsgZXhjZXB0aW9uIH0pOworCQl9CisJCWVsc2UgeworCQkJcmV0dXJuIERpYWdub3N0aWMuT0tfSU5TVEFOQ0U7CisJCX0KKwl9CisKKwkvKioKKwkgKiBUaGlzIGlzIHRoZSBtZXRob2QgdXNlZCBieSB0aGUgZnJhbWV3b3JrIHRvIGluc3RhbGwgeW91ciBvd24gY29udHJvbHMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgY3JlYXRlUGFnZXMoKSB7CisJCS8vIENyZWF0ZXMgdGhlIG1vZGVsIGZyb20gdGhlIGVkaXRvciBpbnB1dAorCQkvLworCQljcmVhdGVNb2RlbCgpOworCisJCS8vIE9ubHkgY3JlYXRlcyB0aGUgb3RoZXIgcGFnZXMgaWYgdGhlcmUgaXMgc29tZXRoaW5nIHRoYXQgY2FuIGJlIGVkaXRlZAorCQkvLworCQlpZiAoIWdldEVkaXRpbmdEb21haW4oKS5nZXRSZXNvdXJjZVNldCgpLmdldFJlc291cmNlcygpLmlzRW1wdHkoKSkgeworCQkJLy8gQ3JlYXRlIGEgcGFnZSBmb3IgdGhlIHNlbGVjdGlvbiB0cmVlIHZpZXcuCisJCQkvLworCQkJeworCQkJCVZpZXdlclBhbmUgdmlld2VyUGFuZSA9CisJCQkJCW5ldyBWaWV3ZXJQYW5lKGdldFNpdGUoKS5nZXRQYWdlKCksIEV4cGVyaW1lbnRhbEVkaXRvci50aGlzKSB7CisJCQkJCQlAT3ZlcnJpZGUKKwkJCQkJCXB1YmxpYyBWaWV3ZXIgY3JlYXRlVmlld2VyKENvbXBvc2l0ZSBjb21wb3NpdGUpIHsKKwkJCQkJCQlUcmVlIHRyZWUgPSBuZXcgVHJlZShjb21wb3NpdGUsIFNXVC5NVUxUSSk7CisJCQkJCQkJVHJlZVZpZXdlciBuZXdUcmVlVmlld2VyID0gbmV3IFRyZWVWaWV3ZXIodHJlZSk7CisJCQkJCQkJcmV0dXJuIG5ld1RyZWVWaWV3ZXI7CisJCQkJCQl9CisJCQkJCQlAT3ZlcnJpZGUKKwkJCQkJCXB1YmxpYyB2b2lkIHJlcXVlc3RBY3RpdmF0aW9uKCkgeworCQkJCQkJCXN1cGVyLnJlcXVlc3RBY3RpdmF0aW9uKCk7CisJCQkJCQkJc2V0Q3VycmVudFZpZXdlclBhbmUodGhpcyk7CisJCQkJCQl9CisJCQkJCX07CisJCQkJdmlld2VyUGFuZS5jcmVhdGVDb250cm9sKGdldENvbnRhaW5lcigpKTsKKworCQkJCXNlbGVjdGlvblZpZXdlciA9IChUcmVlVmlld2VyKXZpZXdlclBhbmUuZ2V0Vmlld2VyKCk7CisJCQkJc2VsZWN0aW9uVmlld2VyLnNldENvbnRlbnRQcm92aWRlcihuZXcgQWRhcHRlckZhY3RvcnlDb250ZW50UHJvdmlkZXIoYWRhcHRlckZhY3RvcnkpKTsKKworCQkJCXNlbGVjdGlvblZpZXdlci5zZXRMYWJlbFByb3ZpZGVyKG5ldyBBZGFwdGVyRmFjdG9yeUxhYmVsUHJvdmlkZXIoYWRhcHRlckZhY3RvcnkpKTsKKwkJCQlzZWxlY3Rpb25WaWV3ZXIuc2V0SW5wdXQoZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpKTsKKwkJCQlzZWxlY3Rpb25WaWV3ZXIuc2V0U2VsZWN0aW9uKG5ldyBTdHJ1Y3R1cmVkU2VsZWN0aW9uKGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKS5nZXRSZXNvdXJjZXMoKS5nZXQoMCkpLCB0cnVlKTsKKwkJCQl2aWV3ZXJQYW5lLnNldFRpdGxlKGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKSk7CisKKwkJCQluZXcgQWRhcHRlckZhY3RvcnlUcmVlRWRpdG9yKHNlbGVjdGlvblZpZXdlci5nZXRUcmVlKCksIGFkYXB0ZXJGYWN0b3J5KTsKKworCQkJCWNyZWF0ZUNvbnRleHRNZW51Rm9yKHNlbGVjdGlvblZpZXdlcik7CisJCQkJaW50IHBhZ2VJbmRleCA9IGFkZFBhZ2Uodmlld2VyUGFuZS5nZXRDb250cm9sKCkpOworCQkJCXNldFBhZ2VUZXh0KHBhZ2VJbmRleCwgZ2V0U3RyaW5nKCJfVUlfU2VsZWN0aW9uUGFnZV9sYWJlbCIpKTsKKwkJCX0KKworCQkJLy8gQ3JlYXRlIGEgcGFnZSBmb3IgdGhlIHBhcmVudCB0cmVlIHZpZXcuCisJCQkvLworCQkJeworCQkJCVZpZXdlclBhbmUgdmlld2VyUGFuZSA9CisJCQkJCW5ldyBWaWV3ZXJQYW5lKGdldFNpdGUoKS5nZXRQYWdlKCksIEV4cGVyaW1lbnRhbEVkaXRvci50aGlzKSB7CisJCQkJCQlAT3ZlcnJpZGUKKwkJCQkJCXB1YmxpYyBWaWV3ZXIgY3JlYXRlVmlld2VyKENvbXBvc2l0ZSBjb21wb3NpdGUpIHsKKwkJCQkJCQlUcmVlIHRyZWUgPSBuZXcgVHJlZShjb21wb3NpdGUsIFNXVC5NVUxUSSk7CisJCQkJCQkJVHJlZVZpZXdlciBuZXdUcmVlVmlld2VyID0gbmV3IFRyZWVWaWV3ZXIodHJlZSk7CisJCQkJCQkJcmV0dXJuIG5ld1RyZWVWaWV3ZXI7CisJCQkJCQl9CisJCQkJCQlAT3ZlcnJpZGUKKwkJCQkJCXB1YmxpYyB2b2lkIHJlcXVlc3RBY3RpdmF0aW9uKCkgeworCQkJCQkJCXN1cGVyLnJlcXVlc3RBY3RpdmF0aW9uKCk7CisJCQkJCQkJc2V0Q3VycmVudFZpZXdlclBhbmUodGhpcyk7CisJCQkJCQl9CisJCQkJCX07CisJCQkJdmlld2VyUGFuZS5jcmVhdGVDb250cm9sKGdldENvbnRhaW5lcigpKTsKKworCQkJCXBhcmVudFZpZXdlciA9IChUcmVlVmlld2VyKXZpZXdlclBhbmUuZ2V0Vmlld2VyKCk7CisJCQkJcGFyZW50Vmlld2VyLnNldEF1dG9FeHBhbmRMZXZlbCgzMCk7CisJCQkJcGFyZW50Vmlld2VyLnNldENvbnRlbnRQcm92aWRlcihuZXcgUmV2ZXJzZUFkYXB0ZXJGYWN0b3J5Q29udGVudFByb3ZpZGVyKGFkYXB0ZXJGYWN0b3J5KSk7CisJCQkJcGFyZW50Vmlld2VyLnNldExhYmVsUHJvdmlkZXIobmV3IEFkYXB0ZXJGYWN0b3J5TGFiZWxQcm92aWRlcihhZGFwdGVyRmFjdG9yeSkpOworCisJCQkJY3JlYXRlQ29udGV4dE1lbnVGb3IocGFyZW50Vmlld2VyKTsKKwkJCQlpbnQgcGFnZUluZGV4ID0gYWRkUGFnZSh2aWV3ZXJQYW5lLmdldENvbnRyb2woKSk7CisJCQkJc2V0UGFnZVRleHQocGFnZUluZGV4LCBnZXRTdHJpbmcoIl9VSV9QYXJlbnRQYWdlX2xhYmVsIikpOworCQkJfQorCisJCQkvLyBUaGlzIGlzIHRoZSBwYWdlIGZvciB0aGUgbGlzdCB2aWV3ZXIKKwkJCS8vCisJCQl7CisJCQkJVmlld2VyUGFuZSB2aWV3ZXJQYW5lID0KKwkJCQkJbmV3IFZpZXdlclBhbmUoZ2V0U2l0ZSgpLmdldFBhZ2UoKSwgRXhwZXJpbWVudGFsRWRpdG9yLnRoaXMpIHsKKwkJCQkJCUBPdmVycmlkZQorCQkJCQkJcHVibGljIFZpZXdlciBjcmVhdGVWaWV3ZXIoQ29tcG9zaXRlIGNvbXBvc2l0ZSkgeworCQkJCQkJCXJldHVybiBuZXcgTGlzdFZpZXdlcihjb21wb3NpdGUpOworCQkJCQkJfQorCQkJCQkJQE92ZXJyaWRlCisJCQkJCQlwdWJsaWMgdm9pZCByZXF1ZXN0QWN0aXZhdGlvbigpIHsKKwkJCQkJCQlzdXBlci5yZXF1ZXN0QWN0aXZhdGlvbigpOworCQkJCQkJCXNldEN1cnJlbnRWaWV3ZXJQYW5lKHRoaXMpOworCQkJCQkJfQorCQkJCQl9OworCQkJCXZpZXdlclBhbmUuY3JlYXRlQ29udHJvbChnZXRDb250YWluZXIoKSk7CisJCQkJbGlzdFZpZXdlciA9IChMaXN0Vmlld2VyKXZpZXdlclBhbmUuZ2V0Vmlld2VyKCk7CisJCQkJbGlzdFZpZXdlci5zZXRDb250ZW50UHJvdmlkZXIobmV3IEFkYXB0ZXJGYWN0b3J5Q29udGVudFByb3ZpZGVyKGFkYXB0ZXJGYWN0b3J5KSk7CisJCQkJbGlzdFZpZXdlci5zZXRMYWJlbFByb3ZpZGVyKG5ldyBBZGFwdGVyRmFjdG9yeUxhYmVsUHJvdmlkZXIoYWRhcHRlckZhY3RvcnkpKTsKKworCQkJCWNyZWF0ZUNvbnRleHRNZW51Rm9yKGxpc3RWaWV3ZXIpOworCQkJCWludCBwYWdlSW5kZXggPSBhZGRQYWdlKHZpZXdlclBhbmUuZ2V0Q29udHJvbCgpKTsKKwkJCQlzZXRQYWdlVGV4dChwYWdlSW5kZXgsIGdldFN0cmluZygiX1VJX0xpc3RQYWdlX2xhYmVsIikpOworCQkJfQorCisJCQkvLyBUaGlzIGlzIHRoZSBwYWdlIGZvciB0aGUgdHJlZSB2aWV3ZXIKKwkJCS8vCisJCQl7CisJCQkJVmlld2VyUGFuZSB2aWV3ZXJQYW5lID0KKwkJCQkJbmV3IFZpZXdlclBhbmUoZ2V0U2l0ZSgpLmdldFBhZ2UoKSwgRXhwZXJpbWVudGFsRWRpdG9yLnRoaXMpIHsKKwkJCQkJCUBPdmVycmlkZQorCQkJCQkJcHVibGljIFZpZXdlciBjcmVhdGVWaWV3ZXIoQ29tcG9zaXRlIGNvbXBvc2l0ZSkgeworCQkJCQkJCXJldHVybiBuZXcgVHJlZVZpZXdlcihjb21wb3NpdGUpOworCQkJCQkJfQorCQkJCQkJQE92ZXJyaWRlCisJCQkJCQlwdWJsaWMgdm9pZCByZXF1ZXN0QWN0aXZhdGlvbigpIHsKKwkJCQkJCQlzdXBlci5yZXF1ZXN0QWN0aXZhdGlvbigpOworCQkJCQkJCXNldEN1cnJlbnRWaWV3ZXJQYW5lKHRoaXMpOworCQkJCQkJfQorCQkJCQl9OworCQkJCXZpZXdlclBhbmUuY3JlYXRlQ29udHJvbChnZXRDb250YWluZXIoKSk7CisJCQkJdHJlZVZpZXdlciA9IChUcmVlVmlld2VyKXZpZXdlclBhbmUuZ2V0Vmlld2VyKCk7CisJCQkJdHJlZVZpZXdlci5zZXRDb250ZW50UHJvdmlkZXIobmV3IEFkYXB0ZXJGYWN0b3J5Q29udGVudFByb3ZpZGVyKGFkYXB0ZXJGYWN0b3J5KSk7CisJCQkJdHJlZVZpZXdlci5zZXRMYWJlbFByb3ZpZGVyKG5ldyBBZGFwdGVyRmFjdG9yeUxhYmVsUHJvdmlkZXIoYWRhcHRlckZhY3RvcnkpKTsKKworCQkJCW5ldyBBZGFwdGVyRmFjdG9yeVRyZWVFZGl0b3IodHJlZVZpZXdlci5nZXRUcmVlKCksIGFkYXB0ZXJGYWN0b3J5KTsKKworCQkJCWNyZWF0ZUNvbnRleHRNZW51Rm9yKHRyZWVWaWV3ZXIpOworCQkJCWludCBwYWdlSW5kZXggPSBhZGRQYWdlKHZpZXdlclBhbmUuZ2V0Q29udHJvbCgpKTsKKwkJCQlzZXRQYWdlVGV4dChwYWdlSW5kZXgsIGdldFN0cmluZygiX1VJX1RyZWVQYWdlX2xhYmVsIikpOworCQkJfQorCisJCQkvLyBUaGlzIGlzIHRoZSBwYWdlIGZvciB0aGUgdGFibGUgdmlld2VyLgorCQkJLy8KKwkJCXsKKwkJCQlWaWV3ZXJQYW5lIHZpZXdlclBhbmUgPQorCQkJCQluZXcgVmlld2VyUGFuZShnZXRTaXRlKCkuZ2V0UGFnZSgpLCBFeHBlcmltZW50YWxFZGl0b3IudGhpcykgeworCQkJCQkJQE92ZXJyaWRlCisJCQkJCQlwdWJsaWMgVmlld2VyIGNyZWF0ZVZpZXdlcihDb21wb3NpdGUgY29tcG9zaXRlKSB7CisJCQkJCQkJcmV0dXJuIG5ldyBUYWJsZVZpZXdlcihjb21wb3NpdGUpOworCQkJCQkJfQorCQkJCQkJQE92ZXJyaWRlCisJCQkJCQlwdWJsaWMgdm9pZCByZXF1ZXN0QWN0aXZhdGlvbigpIHsKKwkJCQkJCQlzdXBlci5yZXF1ZXN0QWN0aXZhdGlvbigpOworCQkJCQkJCXNldEN1cnJlbnRWaWV3ZXJQYW5lKHRoaXMpOworCQkJCQkJfQorCQkJCQl9OworCQkJCXZpZXdlclBhbmUuY3JlYXRlQ29udHJvbChnZXRDb250YWluZXIoKSk7CisJCQkJdGFibGVWaWV3ZXIgPSAoVGFibGVWaWV3ZXIpdmlld2VyUGFuZS5nZXRWaWV3ZXIoKTsKKworCQkJCVRhYmxlIHRhYmxlID0gdGFibGVWaWV3ZXIuZ2V0VGFibGUoKTsKKwkJCQlUYWJsZUxheW91dCBsYXlvdXQgPSBuZXcgVGFibGVMYXlvdXQoKTsKKwkJCQl0YWJsZS5zZXRMYXlvdXQobGF5b3V0KTsKKwkJCQl0YWJsZS5zZXRIZWFkZXJWaXNpYmxlKHRydWUpOworCQkJCXRhYmxlLnNldExpbmVzVmlzaWJsZSh0cnVlKTsKKworCQkJCVRhYmxlQ29sdW1uIG9iamVjdENvbHVtbiA9IG5ldyBUYWJsZUNvbHVtbih0YWJsZSwgU1dULk5PTkUpOworCQkJCWxheW91dC5hZGRDb2x1bW5EYXRhKG5ldyBDb2x1bW5XZWlnaHREYXRhKDMsIDEwMCwgdHJ1ZSkpOworCQkJCW9iamVjdENvbHVtbi5zZXRUZXh0KGdldFN0cmluZygiX1VJX09iamVjdENvbHVtbl9sYWJlbCIpKTsKKwkJCQlvYmplY3RDb2x1bW4uc2V0UmVzaXphYmxlKHRydWUpOworCisJCQkJVGFibGVDb2x1bW4gc2VsZkNvbHVtbiA9IG5ldyBUYWJsZUNvbHVtbih0YWJsZSwgU1dULk5PTkUpOworCQkJCWxheW91dC5hZGRDb2x1bW5EYXRhKG5ldyBDb2x1bW5XZWlnaHREYXRhKDIsIDEwMCwgdHJ1ZSkpOworCQkJCXNlbGZDb2x1bW4uc2V0VGV4dChnZXRTdHJpbmcoIl9VSV9TZWxmQ29sdW1uX2xhYmVsIikpOworCQkJCXNlbGZDb2x1bW4uc2V0UmVzaXphYmxlKHRydWUpOworCisJCQkJdGFibGVWaWV3ZXIuc2V0Q29sdW1uUHJvcGVydGllcyhuZXcgU3RyaW5nIFtdIHsiYSIsICJiIn0pOworCQkJCXRhYmxlVmlld2VyLnNldENvbnRlbnRQcm92aWRlcihuZXcgQWRhcHRlckZhY3RvcnlDb250ZW50UHJvdmlkZXIoYWRhcHRlckZhY3RvcnkpKTsKKwkJCQl0YWJsZVZpZXdlci5zZXRMYWJlbFByb3ZpZGVyKG5ldyBBZGFwdGVyRmFjdG9yeUxhYmVsUHJvdmlkZXIoYWRhcHRlckZhY3RvcnkpKTsKKworCQkJCWNyZWF0ZUNvbnRleHRNZW51Rm9yKHRhYmxlVmlld2VyKTsKKwkJCQlpbnQgcGFnZUluZGV4ID0gYWRkUGFnZSh2aWV3ZXJQYW5lLmdldENvbnRyb2woKSk7CisJCQkJc2V0UGFnZVRleHQocGFnZUluZGV4LCBnZXRTdHJpbmcoIl9VSV9UYWJsZVBhZ2VfbGFiZWwiKSk7CisJCQl9CisKKwkJCS8vIFRoaXMgaXMgdGhlIHBhZ2UgZm9yIHRoZSB0YWJsZSB0cmVlIHZpZXdlci4KKwkJCS8vCisJCQl7CisJCQkJVmlld2VyUGFuZSB2aWV3ZXJQYW5lID0KKwkJCQkJbmV3IFZpZXdlclBhbmUoZ2V0U2l0ZSgpLmdldFBhZ2UoKSwgRXhwZXJpbWVudGFsRWRpdG9yLnRoaXMpIHsKKwkJCQkJCUBPdmVycmlkZQorCQkJCQkJcHVibGljIFZpZXdlciBjcmVhdGVWaWV3ZXIoQ29tcG9zaXRlIGNvbXBvc2l0ZSkgeworCQkJCQkJCXJldHVybiBuZXcgVHJlZVZpZXdlcihjb21wb3NpdGUpOworCQkJCQkJfQorCQkJCQkJQE92ZXJyaWRlCisJCQkJCQlwdWJsaWMgdm9pZCByZXF1ZXN0QWN0aXZhdGlvbigpIHsKKwkJCQkJCQlzdXBlci5yZXF1ZXN0QWN0aXZhdGlvbigpOworCQkJCQkJCXNldEN1cnJlbnRWaWV3ZXJQYW5lKHRoaXMpOworCQkJCQkJfQorCQkJCQl9OworCQkJCXZpZXdlclBhbmUuY3JlYXRlQ29udHJvbChnZXRDb250YWluZXIoKSk7CisKKwkJCQl0cmVlVmlld2VyV2l0aENvbHVtbnMgPSAoVHJlZVZpZXdlcil2aWV3ZXJQYW5lLmdldFZpZXdlcigpOworCisJCQkJVHJlZSB0cmVlID0gdHJlZVZpZXdlcldpdGhDb2x1bW5zLmdldFRyZWUoKTsKKwkJCQl0cmVlLnNldExheW91dERhdGEobmV3IEZpbGxMYXlvdXQoKSk7CisJCQkJdHJlZS5zZXRIZWFkZXJWaXNpYmxlKHRydWUpOworCQkJCXRyZWUuc2V0TGluZXNWaXNpYmxlKHRydWUpOworCisJCQkJVHJlZUNvbHVtbiBvYmplY3RDb2x1bW4gPSBuZXcgVHJlZUNvbHVtbih0cmVlLCBTV1QuTk9ORSk7CisJCQkJb2JqZWN0Q29sdW1uLnNldFRleHQoZ2V0U3RyaW5nKCJfVUlfT2JqZWN0Q29sdW1uX2xhYmVsIikpOworCQkJCW9iamVjdENvbHVtbi5zZXRSZXNpemFibGUodHJ1ZSk7CisJCQkJb2JqZWN0Q29sdW1uLnNldFdpZHRoKDI1MCk7CisKKwkJCQlUcmVlQ29sdW1uIHNlbGZDb2x1bW4gPSBuZXcgVHJlZUNvbHVtbih0cmVlLCBTV1QuTk9ORSk7CisJCQkJc2VsZkNvbHVtbi5zZXRUZXh0KGdldFN0cmluZygiX1VJX1NlbGZDb2x1bW5fbGFiZWwiKSk7CisJCQkJc2VsZkNvbHVtbi5zZXRSZXNpemFibGUodHJ1ZSk7CisJCQkJc2VsZkNvbHVtbi5zZXRXaWR0aCgyMDApOworCisJCQkJdHJlZVZpZXdlcldpdGhDb2x1bW5zLnNldENvbHVtblByb3BlcnRpZXMobmV3IFN0cmluZyBbXSB7ImEiLCAiYiJ9KTsKKwkJCQl0cmVlVmlld2VyV2l0aENvbHVtbnMuc2V0Q29udGVudFByb3ZpZGVyKG5ldyBBZGFwdGVyRmFjdG9yeUNvbnRlbnRQcm92aWRlcihhZGFwdGVyRmFjdG9yeSkpOworCQkJCXRyZWVWaWV3ZXJXaXRoQ29sdW1ucy5zZXRMYWJlbFByb3ZpZGVyKG5ldyBBZGFwdGVyRmFjdG9yeUxhYmVsUHJvdmlkZXIoYWRhcHRlckZhY3RvcnkpKTsKKworCQkJCWNyZWF0ZUNvbnRleHRNZW51Rm9yKHRyZWVWaWV3ZXJXaXRoQ29sdW1ucyk7CisJCQkJaW50IHBhZ2VJbmRleCA9IGFkZFBhZ2Uodmlld2VyUGFuZS5nZXRDb250cm9sKCkpOworCQkJCXNldFBhZ2VUZXh0KHBhZ2VJbmRleCwgZ2V0U3RyaW5nKCJfVUlfVHJlZVdpdGhDb2x1bW5zUGFnZV9sYWJlbCIpKTsKKwkJCX0KKworCQkJZ2V0U2l0ZSgpLmdldFNoZWxsKCkuZ2V0RGlzcGxheSgpLmFzeW5jRXhlYworCQkJCShuZXcgUnVubmFibGUoKSB7CisJCQkJCSBwdWJsaWMgdm9pZCBydW4oKSB7CisJCQkJCQkgc2V0QWN0aXZlUGFnZSgwKTsKKwkJCQkJIH0KKwkJCQkgfSk7CisJCX0KKworCQkvLyBFbnN1cmVzIHRoYXQgdGhpcyBlZGl0b3Igd2lsbCBvbmx5IGRpc3BsYXkgdGhlIHBhZ2UncyB0YWIKKwkJLy8gYXJlYSBpZiB0aGVyZSBhcmUgbW9yZSB0aGFuIG9uZSBwYWdlCisJCS8vCisJCWdldENvbnRhaW5lcigpLmFkZENvbnRyb2xMaXN0ZW5lcgorCQkJKG5ldyBDb250cm9sQWRhcHRlcigpIHsKKwkJCQlib29sZWFuIGd1YXJkID0gZmFsc2U7CisJCQkJQE92ZXJyaWRlCisJCQkJcHVibGljIHZvaWQgY29udHJvbFJlc2l6ZWQoQ29udHJvbEV2ZW50IGV2ZW50KSB7CisJCQkJCWlmICghZ3VhcmQpIHsKKwkJCQkJCWd1YXJkID0gdHJ1ZTsKKwkJCQkJCWhpZGVUYWJzKCk7CisJCQkJCQlndWFyZCA9IGZhbHNlOworCQkJCQl9CisJCQkJfQorCQkJIH0pOworCisJCWdldFNpdGUoKS5nZXRTaGVsbCgpLmdldERpc3BsYXkoKS5hc3luY0V4ZWMKKwkJCShuZXcgUnVubmFibGUoKSB7CisJCQkJIHB1YmxpYyB2b2lkIHJ1bigpIHsKKwkJCQkJIHVwZGF0ZVByb2JsZW1JbmRpY2F0aW9uKCk7CisJCQkJIH0KKwkJCSB9KTsKKwl9CisKKwkvKioKKwkgKiBJZiB0aGVyZSBpcyBqdXN0IG9uZSBwYWdlIGluIHRoZSBtdWx0aS1wYWdlIGVkaXRvciBwYXJ0LAorCSAqIHRoaXMgaGlkZXMgdGhlIHNpbmdsZSB0YWIgYXQgdGhlIGJvdHRvbS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBoaWRlVGFicygpIHsKKwkJaWYgKGdldFBhZ2VDb3VudCgpIDw9IDEpIHsKKwkJCXNldFBhZ2VUZXh0KDAsICIiKTsKKwkJCWlmIChnZXRDb250YWluZXIoKSBpbnN0YW5jZW9mIENUYWJGb2xkZXIpIHsKKwkJCQkoKENUYWJGb2xkZXIpZ2V0Q29udGFpbmVyKCkpLnNldFRhYkhlaWdodCgxKTsKKwkJCQlQb2ludCBwb2ludCA9IGdldENvbnRhaW5lcigpLmdldFNpemUoKTsKKwkJCQlnZXRDb250YWluZXIoKS5zZXRTaXplKHBvaW50LngsIHBvaW50LnkgKyA2KTsKKwkJCX0KKwkJfQorCX0KKworCS8qKgorCSAqIElmIHRoZXJlIGlzIG1vcmUgdGhhbiBvbmUgcGFnZSBpbiB0aGUgbXVsdGktcGFnZSBlZGl0b3IgcGFydCwKKwkgKiB0aGlzIHNob3dzIHRoZSB0YWJzIGF0IHRoZSBib3R0b20uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgc2hvd1RhYnMoKSB7CisJCWlmIChnZXRQYWdlQ291bnQoKSA+IDEpIHsKKwkJCXNldFBhZ2VUZXh0KDAsIGdldFN0cmluZygiX1VJX1NlbGVjdGlvblBhZ2VfbGFiZWwiKSk7CisJCQlpZiAoZ2V0Q29udGFpbmVyKCkgaW5zdGFuY2VvZiBDVGFiRm9sZGVyKSB7CisJCQkJKChDVGFiRm9sZGVyKWdldENvbnRhaW5lcigpKS5zZXRUYWJIZWlnaHQoU1dULkRFRkFVTFQpOworCQkJCVBvaW50IHBvaW50ID0gZ2V0Q29udGFpbmVyKCkuZ2V0U2l6ZSgpOworCQkJCWdldENvbnRhaW5lcigpLnNldFNpemUocG9pbnQueCwgcG9pbnQueSAtIDYpOworCQkJfQorCQl9CisJfQorCisJLyoqCisJICogVGhpcyBpcyB1c2VkIHRvIHRyYWNrIHRoZSBhY3RpdmUgdmlld2VyLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIHBhZ2VDaGFuZ2UoaW50IHBhZ2VJbmRleCkgeworCQlzdXBlci5wYWdlQ2hhbmdlKHBhZ2VJbmRleCk7CisKKwkJaWYgKGNvbnRlbnRPdXRsaW5lUGFnZSAhPSBudWxsKSB7CisJCQloYW5kbGVDb250ZW50T3V0bGluZVNlbGVjdGlvbihjb250ZW50T3V0bGluZVBhZ2UuZ2V0U2VsZWN0aW9uKCkpOworCQl9CisJfQorCisJLyoqCisJICogVGhpcyBpcyBob3cgdGhlIGZyYW1ld29yayBkZXRlcm1pbmVzIHdoaWNoIGludGVyZmFjZXMgd2UgaW1wbGVtZW50LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBTdXBwcmVzc1dhcm5pbmdzKCJyYXd0eXBlcyIpCisJQE92ZXJyaWRlCisJcHVibGljIE9iamVjdCBnZXRBZGFwdGVyKENsYXNzIGtleSkgeworCQlpZiAoa2V5LmVxdWFscyhJQ29udGVudE91dGxpbmVQYWdlLmNsYXNzKSkgeworCQkJcmV0dXJuIHNob3dPdXRsaW5lVmlldygpID8gZ2V0Q29udGVudE91dGxpbmVQYWdlKCkgOiBudWxsOworCQl9CisJCWVsc2UgaWYgKGtleS5lcXVhbHMoSVByb3BlcnR5U2hlZXRQYWdlLmNsYXNzKSkgeworCQkJcmV0dXJuIGdldFByb3BlcnR5U2hlZXRQYWdlKCk7CisJCX0KKwkJZWxzZSBpZiAoa2V5LmVxdWFscyhJR290b01hcmtlci5jbGFzcykpIHsKKwkJCXJldHVybiB0aGlzOworCQl9CisJCWVsc2UgeworCQkJcmV0dXJuIHN1cGVyLmdldEFkYXB0ZXIoa2V5KTsKKwkJfQorCX0KKworCS8qKgorCSAqIFRoaXMgYWNjZXNzZXMgYSBjYWNoZWQgdmVyc2lvbiBvZiB0aGUgY29udGVudCBvdXRsaW5lci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgSUNvbnRlbnRPdXRsaW5lUGFnZSBnZXRDb250ZW50T3V0bGluZVBhZ2UoKSB7CisJCWlmIChjb250ZW50T3V0bGluZVBhZ2UgPT0gbnVsbCkgeworCQkJLy8gVGhlIGNvbnRlbnQgb3V0bGluZSBpcyBqdXN0IGEgdHJlZS4KKwkJCS8vCisJCQljbGFzcyBNeUNvbnRlbnRPdXRsaW5lUGFnZSBleHRlbmRzIENvbnRlbnRPdXRsaW5lUGFnZSB7CisJCQkJQE92ZXJyaWRlCisJCQkJcHVibGljIHZvaWQgY3JlYXRlQ29udHJvbChDb21wb3NpdGUgcGFyZW50KSB7CisJCQkJCXN1cGVyLmNyZWF0ZUNvbnRyb2wocGFyZW50KTsKKwkJCQkJY29udGVudE91dGxpbmVWaWV3ZXIgPSBnZXRUcmVlVmlld2VyKCk7CisJCQkJCWNvbnRlbnRPdXRsaW5lVmlld2VyLmFkZFNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcih0aGlzKTsKKworCQkJCQkvLyBTZXQgdXAgdGhlIHRyZWUgdmlld2VyLgorCQkJCQkvLworCQkJCQljb250ZW50T3V0bGluZVZpZXdlci5zZXRDb250ZW50UHJvdmlkZXIobmV3IEFkYXB0ZXJGYWN0b3J5Q29udGVudFByb3ZpZGVyKGFkYXB0ZXJGYWN0b3J5KSk7CisJCQkJCWNvbnRlbnRPdXRsaW5lVmlld2VyLnNldExhYmVsUHJvdmlkZXIobmV3IEFkYXB0ZXJGYWN0b3J5TGFiZWxQcm92aWRlcihhZGFwdGVyRmFjdG9yeSkpOworCQkJCQljb250ZW50T3V0bGluZVZpZXdlci5zZXRJbnB1dChlZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkpOworCisJCQkJCS8vIE1ha2Ugc3VyZSBvdXIgcG9wdXBzIHdvcmsuCisJCQkJCS8vCisJCQkJCWNyZWF0ZUNvbnRleHRNZW51Rm9yKGNvbnRlbnRPdXRsaW5lVmlld2VyKTsKKworCQkJCQlpZiAoIWVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKS5nZXRSZXNvdXJjZXMoKS5pc0VtcHR5KCkpIHsKKwkJCQkJICAvLyBTZWxlY3QgdGhlIHJvb3Qgb2JqZWN0IGluIHRoZSB2aWV3LgorCQkJCQkgIC8vCisJCQkJCSAgY29udGVudE91dGxpbmVWaWV3ZXIuc2V0U2VsZWN0aW9uKG5ldyBTdHJ1Y3R1cmVkU2VsZWN0aW9uKGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKS5nZXRSZXNvdXJjZXMoKS5nZXQoMCkpLCB0cnVlKTsKKwkJCQkJfQorCQkJCX0KKworCQkJCUBPdmVycmlkZQorCQkJCXB1YmxpYyB2b2lkIG1ha2VDb250cmlidXRpb25zKElNZW51TWFuYWdlciBtZW51TWFuYWdlciwgSVRvb2xCYXJNYW5hZ2VyIHRvb2xCYXJNYW5hZ2VyLCBJU3RhdHVzTGluZU1hbmFnZXIgc3RhdHVzTGluZU1hbmFnZXIpIHsKKwkJCQkJc3VwZXIubWFrZUNvbnRyaWJ1dGlvbnMobWVudU1hbmFnZXIsIHRvb2xCYXJNYW5hZ2VyLCBzdGF0dXNMaW5lTWFuYWdlcik7CisJCQkJCWNvbnRlbnRPdXRsaW5lU3RhdHVzTGluZU1hbmFnZXIgPSBzdGF0dXNMaW5lTWFuYWdlcjsKKwkJCQl9CisKKwkJCQlAT3ZlcnJpZGUKKwkJCQlwdWJsaWMgdm9pZCBzZXRBY3Rpb25CYXJzKElBY3Rpb25CYXJzIGFjdGlvbkJhcnMpIHsKKwkJCQkJc3VwZXIuc2V0QWN0aW9uQmFycyhhY3Rpb25CYXJzKTsKKwkJCQkJZ2V0QWN0aW9uQmFyQ29udHJpYnV0b3IoKS5zaGFyZUdsb2JhbEFjdGlvbnModGhpcywgYWN0aW9uQmFycyk7CisJCQkJfQorCQkJfQorCisJCQljb250ZW50T3V0bGluZVBhZ2UgPSBuZXcgTXlDb250ZW50T3V0bGluZVBhZ2UoKTsKKworCQkJLy8gTGlzdGVuIHRvIHNlbGVjdGlvbiBzbyB0aGF0IHdlIGNhbiBoYW5kbGUgaXQgaXMgYSBzcGVjaWFsIHdheS4KKwkJCS8vCisJCQljb250ZW50T3V0bGluZVBhZ2UuYWRkU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyCisJCQkJKG5ldyBJU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyKCkgeworCQkJCQkgLy8gVGhpcyBlbnN1cmVzIHRoYXQgd2UgaGFuZGxlIHNlbGVjdGlvbnMgY29ycmVjdGx5LgorCQkJCQkgLy8KKwkJCQkJIHB1YmxpYyB2b2lkIHNlbGVjdGlvbkNoYW5nZWQoU2VsZWN0aW9uQ2hhbmdlZEV2ZW50IGV2ZW50KSB7CisJCQkJCQkgaGFuZGxlQ29udGVudE91dGxpbmVTZWxlY3Rpb24oZXZlbnQuZ2V0U2VsZWN0aW9uKCkpOworCQkJCQkgfQorCQkJCSB9KTsKKwkJfQorCisJCXJldHVybiBjb250ZW50T3V0bGluZVBhZ2U7CisJfQorCisJLyoqCisJICogVGhpcyBhY2Nlc3NlcyBhIGNhY2hlZCB2ZXJzaW9uIG9mIHRoZSBwcm9wZXJ0eSBzaGVldC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgSVByb3BlcnR5U2hlZXRQYWdlIGdldFByb3BlcnR5U2hlZXRQYWdlKCkgeworCQlpZiAocHJvcGVydHlTaGVldFBhZ2UgPT0gbnVsbCkgeworCQkJcHJvcGVydHlTaGVldFBhZ2UgPQorCQkJCW5ldyBFeHRlbmRlZFByb3BlcnR5U2hlZXRQYWdlKGVkaXRpbmdEb21haW4pIHsKKwkJCQkJQE92ZXJyaWRlCisJCQkJCXB1YmxpYyB2b2lkIHNldFNlbGVjdGlvblRvVmlld2VyKExpc3Q8Pz4gc2VsZWN0aW9uKSB7CisJCQkJCQlFeHBlcmltZW50YWxFZGl0b3IudGhpcy5zZXRTZWxlY3Rpb25Ub1ZpZXdlcihzZWxlY3Rpb24pOworCQkJCQkJRXhwZXJpbWVudGFsRWRpdG9yLnRoaXMuc2V0Rm9jdXMoKTsKKwkJCQkJfQorCisJCQkJCUBPdmVycmlkZQorCQkJCQlwdWJsaWMgdm9pZCBzZXRBY3Rpb25CYXJzKElBY3Rpb25CYXJzIGFjdGlvbkJhcnMpIHsKKwkJCQkJCXN1cGVyLnNldEFjdGlvbkJhcnMoYWN0aW9uQmFycyk7CisJCQkJCQlnZXRBY3Rpb25CYXJDb250cmlidXRvcigpLnNoYXJlR2xvYmFsQWN0aW9ucyh0aGlzLCBhY3Rpb25CYXJzKTsKKwkJCQkJfQorCQkJCX07CisJCQlwcm9wZXJ0eVNoZWV0UGFnZS5zZXRQcm9wZXJ0eVNvdXJjZVByb3ZpZGVyKG5ldyBBZGFwdGVyRmFjdG9yeUNvbnRlbnRQcm92aWRlcihhZGFwdGVyRmFjdG9yeSkpOworCQl9CisKKwkJcmV0dXJuIHByb3BlcnR5U2hlZXRQYWdlOworCX0KKworCS8qKgorCSAqIFRoaXMgZGVhbHMgd2l0aCBob3cgd2Ugd2FudCBzZWxlY3Rpb24gaW4gdGhlIG91dGxpbmVyIHRvIGFmZmVjdCB0aGUgb3RoZXIgdmlld3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgaGFuZGxlQ29udGVudE91dGxpbmVTZWxlY3Rpb24oSVNlbGVjdGlvbiBzZWxlY3Rpb24pIHsKKwkJaWYgKGN1cnJlbnRWaWV3ZXJQYW5lICE9IG51bGwgJiYgIXNlbGVjdGlvbi5pc0VtcHR5KCkgJiYgc2VsZWN0aW9uIGluc3RhbmNlb2YgSVN0cnVjdHVyZWRTZWxlY3Rpb24pIHsKKwkJCUl0ZXJhdG9yPD8+IHNlbGVjdGVkRWxlbWVudHMgPSAoKElTdHJ1Y3R1cmVkU2VsZWN0aW9uKXNlbGVjdGlvbikuaXRlcmF0b3IoKTsKKwkJCWlmIChzZWxlY3RlZEVsZW1lbnRzLmhhc05leHQoKSkgeworCQkJCS8vIEdldCB0aGUgZmlyc3Qgc2VsZWN0ZWQgZWxlbWVudC4KKwkJCQkvLworCQkJCU9iamVjdCBzZWxlY3RlZEVsZW1lbnQgPSBzZWxlY3RlZEVsZW1lbnRzLm5leHQoKTsKKworCQkJCS8vIElmIGl0J3MgdGhlIHNlbGVjdGlvbiB2aWV3ZXIsIHRoZW4gd2Ugd2FudCBpdCB0byBzZWxlY3QgdGhlIHNhbWUgc2VsZWN0aW9uIGFzIHRoaXMgc2VsZWN0aW9uLgorCQkJCS8vCisJCQkJaWYgKGN1cnJlbnRWaWV3ZXJQYW5lLmdldFZpZXdlcigpID09IHNlbGVjdGlvblZpZXdlcikgeworCQkJCQlBcnJheUxpc3Q8T2JqZWN0PiBzZWxlY3Rpb25MaXN0ID0gbmV3IEFycmF5TGlzdDxPYmplY3Q+KCk7CisJCQkJCXNlbGVjdGlvbkxpc3QuYWRkKHNlbGVjdGVkRWxlbWVudCk7CisJCQkJCXdoaWxlIChzZWxlY3RlZEVsZW1lbnRzLmhhc05leHQoKSkgeworCQkJCQkJc2VsZWN0aW9uTGlzdC5hZGQoc2VsZWN0ZWRFbGVtZW50cy5uZXh0KCkpOworCQkJCQl9CisKKwkJCQkJLy8gU2V0IHRoZSBzZWxlY3Rpb24gdG8gdGhlIHdpZGdldC4KKwkJCQkJLy8KKwkJCQkJc2VsZWN0aW9uVmlld2VyLnNldFNlbGVjdGlvbihuZXcgU3RydWN0dXJlZFNlbGVjdGlvbihzZWxlY3Rpb25MaXN0KSk7CisJCQkJfQorCQkJCWVsc2UgeworCQkJCQkvLyBTZXQgdGhlIGlucHV0IHRvIHRoZSB3aWRnZXQuCisJCQkJCS8vCisJCQkJCWlmIChjdXJyZW50Vmlld2VyUGFuZS5nZXRWaWV3ZXIoKS5nZXRJbnB1dCgpICE9IHNlbGVjdGVkRWxlbWVudCkgeworCQkJCQkJY3VycmVudFZpZXdlclBhbmUuZ2V0Vmlld2VyKCkuc2V0SW5wdXQoc2VsZWN0ZWRFbGVtZW50KTsKKwkJCQkJCWN1cnJlbnRWaWV3ZXJQYW5lLnNldFRpdGxlKHNlbGVjdGVkRWxlbWVudCk7CisJCQkJCX0KKwkJCQl9CisJCQl9CisJCX0KKwl9CisKKwkvKioKKwkgKiBUaGlzIGlzIGZvciBpbXBsZW1lbnRpbmcge0BsaW5rIElFZGl0b3JQYXJ0fSBhbmQgc2ltcGx5IHRlc3RzIHRoZSBjb21tYW5kIHN0YWNrLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBib29sZWFuIGlzRGlydHkoKSB7CisJCXJldHVybiAoKEJhc2ljQ29tbWFuZFN0YWNrKWVkaXRpbmdEb21haW4uZ2V0Q29tbWFuZFN0YWNrKCkpLmlzU2F2ZU5lZWRlZCgpOworCX0KKworCS8qKgorCSAqIFRoaXMgaXMgZm9yIGltcGxlbWVudGluZyB7QGxpbmsgSUVkaXRvclBhcnR9IGFuZCBzaW1wbHkgc2F2ZXMgdGhlIG1vZGVsIGZpbGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgZG9TYXZlKElQcm9ncmVzc01vbml0b3IgcHJvZ3Jlc3NNb25pdG9yKSB7CisJCS8vIFNhdmUgb25seSByZXNvdXJjZXMgdGhhdCBoYXZlIGFjdHVhbGx5IGNoYW5nZWQuCisJCS8vCisJCWZpbmFsIE1hcDxPYmplY3QsIE9iamVjdD4gc2F2ZU9wdGlvbnMgPSBuZXcgSGFzaE1hcDxPYmplY3QsIE9iamVjdD4oKTsKKwkJc2F2ZU9wdGlvbnMucHV0KFJlc291cmNlLk9QVElPTl9TQVZFX09OTFlfSUZfQ0hBTkdFRCwgUmVzb3VyY2UuT1BUSU9OX1NBVkVfT05MWV9JRl9DSEFOR0VEX01FTU9SWV9CVUZGRVIpOworCisJCS8vIERvIHRoZSB3b3JrIHdpdGhpbiBhbiBvcGVyYXRpb24gYmVjYXVzZSB0aGlzIGlzIGEgbG9uZyBydW5uaW5nIGFjdGl2aXR5IHRoYXQgbW9kaWZpZXMgdGhlIHdvcmtiZW5jaC4KKwkJLy8KKwkJV29ya3NwYWNlTW9kaWZ5T3BlcmF0aW9uIG9wZXJhdGlvbiA9CisJCQluZXcgV29ya3NwYWNlTW9kaWZ5T3BlcmF0aW9uKCkgeworCQkJCS8vIFRoaXMgaXMgdGhlIG1ldGhvZCB0aGF0IGdldHMgaW52b2tlZCB3aGVuIHRoZSBvcGVyYXRpb24gcnVucy4KKwkJCQkvLworCQkJCUBPdmVycmlkZQorCQkJCXB1YmxpYyB2b2lkIGV4ZWN1dGUoSVByb2dyZXNzTW9uaXRvciBtb25pdG9yKSB7CisJCQkJCS8vIFNhdmUgdGhlIHJlc291cmNlcyB0byB0aGUgZmlsZSBzeXN0ZW0uCisJCQkJCS8vCisJCQkJCWJvb2xlYW4gZmlyc3QgPSB0cnVlOworCQkJCQlmb3IgKFJlc291cmNlIHJlc291cmNlIDogZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpLmdldFJlc291cmNlcygpKSB7CisJCQkJCQlpZiAoKGZpcnN0IHx8ICFyZXNvdXJjZS5nZXRDb250ZW50cygpLmlzRW1wdHkoKSB8fCBpc1BlcnNpc3RlZChyZXNvdXJjZSkpICYmICFlZGl0aW5nRG9tYWluLmlzUmVhZE9ubHkocmVzb3VyY2UpKSB7CisJCQkJCQkJdHJ5IHsKKwkJCQkJCQkJbG9uZyB0aW1lU3RhbXAgPSByZXNvdXJjZS5nZXRUaW1lU3RhbXAoKTsKKwkJCQkJCQkJcmVzb3VyY2Uuc2F2ZShzYXZlT3B0aW9ucyk7CisJCQkJCQkJCWlmIChyZXNvdXJjZS5nZXRUaW1lU3RhbXAoKSAhPSB0aW1lU3RhbXApIHsKKwkJCQkJCQkJCXNhdmVkUmVzb3VyY2VzLmFkZChyZXNvdXJjZSk7CisJCQkJCQkJCX0KKwkJCQkJCQl9CisJCQkJCQkJY2F0Y2ggKEV4Y2VwdGlvbiBleGNlcHRpb24pIHsKKwkJCQkJCQkJcmVzb3VyY2VUb0RpYWdub3N0aWNNYXAucHV0KHJlc291cmNlLCBhbmFseXplUmVzb3VyY2VQcm9ibGVtcyhyZXNvdXJjZSwgZXhjZXB0aW9uKSk7CisJCQkJCQkJfQorCQkJCQkJCWZpcnN0ID0gZmFsc2U7CisJCQkJCQl9CisJCQkJCX0KKwkJCQl9CisJCQl9OworCisJCXVwZGF0ZVByb2JsZW1JbmRpY2F0aW9uID0gZmFsc2U7CisJCXRyeSB7CisJCQkvLyBUaGlzIHJ1bnMgdGhlIG9wdGlvbnMsIGFuZCBzaG93cyBwcm9ncmVzcy4KKwkJCS8vCisJCQluZXcgUHJvZ3Jlc3NNb25pdG9yRGlhbG9nKGdldFNpdGUoKS5nZXRTaGVsbCgpKS5ydW4odHJ1ZSwgZmFsc2UsIG9wZXJhdGlvbik7CisKKwkJCS8vIFJlZnJlc2ggdGhlIG5lY2Vzc2FyeSBzdGF0ZS4KKwkJCS8vCisJCQkoKEJhc2ljQ29tbWFuZFN0YWNrKWVkaXRpbmdEb21haW4uZ2V0Q29tbWFuZFN0YWNrKCkpLnNhdmVJc0RvbmUoKTsKKwkJCWZpcmVQcm9wZXJ0eUNoYW5nZShJRWRpdG9yUGFydC5QUk9QX0RJUlRZKTsKKwkJfQorCQljYXRjaCAoRXhjZXB0aW9uIGV4Y2VwdGlvbikgeworCQkJLy8gU29tZXRoaW5nIHdlbnQgd3JvbmcgdGhhdCBzaG91bGRuJ3QuCisJCQkvLworCQkJRXhwZXJpbWVudGFsRWRpdG9yUGx1Z2luLklOU1RBTkNFLmxvZyhleGNlcHRpb24pOworCQl9CisJCXVwZGF0ZVByb2JsZW1JbmRpY2F0aW9uID0gdHJ1ZTsKKwkJdXBkYXRlUHJvYmxlbUluZGljYXRpb24oKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgd2hldGhlciBzb21ldGhpbmcgaGFzIGJlZW4gcGVyc2lzdGVkIHRvIHRoZSBVUkkgb2YgdGhlIHNwZWNpZmllZCByZXNvdXJjZS4KKwkgKiBUaGUgaW1wbGVtZW50YXRpb24gdXNlcyB0aGUgVVJJIGNvbnZlcnRlciBmcm9tIHRoZSBlZGl0b3IncyByZXNvdXJjZSBzZXQgdG8gdHJ5IHRvIG9wZW4gYW4gaW5wdXQgc3RyZWFtLiAKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgYm9vbGVhbiBpc1BlcnNpc3RlZChSZXNvdXJjZSByZXNvdXJjZSkgeworCQlib29sZWFuIHJlc3VsdCA9IGZhbHNlOworCQl0cnkgeworCQkJSW5wdXRTdHJlYW0gc3RyZWFtID0gZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpLmdldFVSSUNvbnZlcnRlcigpLmNyZWF0ZUlucHV0U3RyZWFtKHJlc291cmNlLmdldFVSSSgpKTsKKwkJCWlmIChzdHJlYW0gIT0gbnVsbCkgeworCQkJCXJlc3VsdCA9IHRydWU7CisJCQkJc3RyZWFtLmNsb3NlKCk7CisJCQl9CisJCX0KKwkJY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKKwkJCS8vIElnbm9yZQorCQl9CisJCXJldHVybiByZXN1bHQ7CisJfQorCisJLyoqCisJICogVGhpcyBhbHdheXMgcmV0dXJucyB0cnVlIGJlY2F1c2UgaXQgaXMgbm90IGN1cnJlbnRseSBzdXBwb3J0ZWQuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIGJvb2xlYW4gaXNTYXZlQXNBbGxvd2VkKCkgeworCQlyZXR1cm4gdHJ1ZTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFsc28gY2hhbmdlcyB0aGUgZWRpdG9yJ3MgaW5wdXQuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgZG9TYXZlQXMoKSB7CisJCVNhdmVBc0RpYWxvZyBzYXZlQXNEaWFsb2cgPSBuZXcgU2F2ZUFzRGlhbG9nKGdldFNpdGUoKS5nZXRTaGVsbCgpKTsKKwkJc2F2ZUFzRGlhbG9nLm9wZW4oKTsKKwkJSVBhdGggcGF0aCA9IHNhdmVBc0RpYWxvZy5nZXRSZXN1bHQoKTsKKwkJaWYgKHBhdGggIT0gbnVsbCkgeworCQkJSUZpbGUgZmlsZSA9IFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5nZXRSb290KCkuZ2V0RmlsZShwYXRoKTsKKwkJCWlmIChmaWxlICE9IG51bGwpIHsKKwkJCQlkb1NhdmVBcyhVUkkuY3JlYXRlUGxhdGZvcm1SZXNvdXJjZVVSSShmaWxlLmdldEZ1bGxQYXRoKCkudG9TdHJpbmcoKSwgdHJ1ZSksIG5ldyBGaWxlRWRpdG9ySW5wdXQoZmlsZSkpOworCQkJfQorCQl9CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgZG9TYXZlQXMoVVJJIHVyaSwgSUVkaXRvcklucHV0IGVkaXRvcklucHV0KSB7CisJCShlZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkuZ2V0UmVzb3VyY2VzKCkuZ2V0KDApKS5zZXRVUkkodXJpKTsKKwkJc2V0SW5wdXRXaXRoTm90aWZ5KGVkaXRvcklucHV0KTsKKwkJc2V0UGFydE5hbWUoZWRpdG9ySW5wdXQuZ2V0TmFtZSgpKTsKKwkJSVByb2dyZXNzTW9uaXRvciBwcm9ncmVzc01vbml0b3IgPQorCQkJZ2V0QWN0aW9uQmFycygpLmdldFN0YXR1c0xpbmVNYW5hZ2VyKCkgIT0gbnVsbCA/CisJCQkJZ2V0QWN0aW9uQmFycygpLmdldFN0YXR1c0xpbmVNYW5hZ2VyKCkuZ2V0UHJvZ3Jlc3NNb25pdG9yKCkgOgorCQkJCW5ldyBOdWxsUHJvZ3Jlc3NNb25pdG9yKCk7CisJCWRvU2F2ZShwcm9ncmVzc01vbml0b3IpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIGdvdG9NYXJrZXIoSU1hcmtlciBtYXJrZXIpIHsKKwkJdHJ5IHsKKwkJCWlmIChtYXJrZXIuZ2V0VHlwZSgpLmVxdWFscyhFVmFsaWRhdG9yLk1BUktFUikpIHsKKwkJCQlTdHJpbmcgdXJpQXR0cmlidXRlID0gbWFya2VyLmdldEF0dHJpYnV0ZShFVmFsaWRhdG9yLlVSSV9BVFRSSUJVVEUsIG51bGwpOworCQkJCWlmICh1cmlBdHRyaWJ1dGUgIT0gbnVsbCkgeworCQkJCQlVUkkgdXJpID0gVVJJLmNyZWF0ZVVSSSh1cmlBdHRyaWJ1dGUpOworCQkJCQlFT2JqZWN0IGVPYmplY3QgPSBlZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkuZ2V0RU9iamVjdCh1cmksIHRydWUpOworCQkJCQlpZiAoZU9iamVjdCAhPSBudWxsKSB7CisJCQkJCSAgc2V0U2VsZWN0aW9uVG9WaWV3ZXIoQ29sbGVjdGlvbnMuc2luZ2xldG9uKGVkaXRpbmdEb21haW4uZ2V0V3JhcHBlcihlT2JqZWN0KSkpOworCQkJCQl9CisJCQkJfQorCQkJfQorCQl9CisJCWNhdGNoIChDb3JlRXhjZXB0aW9uIGV4Y2VwdGlvbikgeworCQkJRXhwZXJpbWVudGFsRWRpdG9yUGx1Z2luLklOU1RBTkNFLmxvZyhleGNlcHRpb24pOworCQl9CisJfQorCisJLyoqCisJICogVGhpcyBpcyBjYWxsZWQgZHVyaW5nIHN0YXJ0dXAuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgaW5pdChJRWRpdG9yU2l0ZSBzaXRlLCBJRWRpdG9ySW5wdXQgZWRpdG9ySW5wdXQpIHsKKwkJc2V0U2l0ZShzaXRlKTsKKwkJc2V0SW5wdXRXaXRoTm90aWZ5KGVkaXRvcklucHV0KTsKKwkJc2V0UGFydE5hbWUoZWRpdG9ySW5wdXQuZ2V0TmFtZSgpKTsKKwkJc2l0ZS5zZXRTZWxlY3Rpb25Qcm92aWRlcih0aGlzKTsKKwkJc2l0ZS5nZXRQYWdlKCkuYWRkUGFydExpc3RlbmVyKHBhcnRMaXN0ZW5lcik7CisJCVJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5hZGRSZXNvdXJjZUNoYW5nZUxpc3RlbmVyKHJlc291cmNlQ2hhbmdlTGlzdGVuZXIsIElSZXNvdXJjZUNoYW5nZUV2ZW50LlBPU1RfQ0hBTkdFKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBzZXRGb2N1cygpIHsKKwkJaWYgKGN1cnJlbnRWaWV3ZXJQYW5lICE9IG51bGwpIHsKKwkJCWN1cnJlbnRWaWV3ZXJQYW5lLnNldEZvY3VzKCk7CisJCX0KKwkJZWxzZSB7CisJCQlnZXRDb250cm9sKGdldEFjdGl2ZVBhZ2UoKSkuc2V0Rm9jdXMoKTsKKwkJfQorCX0KKworCS8qKgorCSAqIFRoaXMgaW1wbGVtZW50cyB7QGxpbmsgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uUHJvdmlkZXJ9LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIGFkZFNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcihJU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyIGxpc3RlbmVyKSB7CisJCXNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcnMuYWRkKGxpc3RlbmVyKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGltcGxlbWVudHMge0BsaW5rIG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvblByb3ZpZGVyfS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCByZW1vdmVTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIoSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lciBsaXN0ZW5lcikgeworCQlzZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXJzLnJlbW92ZShsaXN0ZW5lcik7CisJfQorCisJLyoqCisJICogVGhpcyBpbXBsZW1lbnRzIHtAbGluayBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb25Qcm92aWRlcn0gdG8gcmV0dXJuIHRoaXMgZWRpdG9yJ3Mgb3ZlcmFsbCBzZWxlY3Rpb24uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIElTZWxlY3Rpb24gZ2V0U2VsZWN0aW9uKCkgeworCQlyZXR1cm4gZWRpdG9yU2VsZWN0aW9uOworCX0KKworCS8qKgorCSAqIFRoaXMgaW1wbGVtZW50cyB7QGxpbmsgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uUHJvdmlkZXJ9IHRvIHNldCB0aGlzIGVkaXRvcidzIG92ZXJhbGwgc2VsZWN0aW9uLgorCSAqIENhbGxpbmcgdGhpcyByZXN1bHQgd2lsbCBub3RpZnkgdGhlIGxpc3RlbmVycy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRTZWxlY3Rpb24oSVNlbGVjdGlvbiBzZWxlY3Rpb24pIHsKKwkJZWRpdG9yU2VsZWN0aW9uID0gc2VsZWN0aW9uOworCisJCWZvciAoSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lciBsaXN0ZW5lciA6IHNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcnMpIHsKKwkJCWxpc3RlbmVyLnNlbGVjdGlvbkNoYW5nZWQobmV3IFNlbGVjdGlvbkNoYW5nZWRFdmVudCh0aGlzLCBzZWxlY3Rpb24pKTsKKwkJfQorCQlzZXRTdGF0dXNMaW5lTWFuYWdlcihzZWxlY3Rpb24pOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIHNldFN0YXR1c0xpbmVNYW5hZ2VyKElTZWxlY3Rpb24gc2VsZWN0aW9uKSB7CisJCUlTdGF0dXNMaW5lTWFuYWdlciBzdGF0dXNMaW5lTWFuYWdlciA9IGN1cnJlbnRWaWV3ZXIgIT0gbnVsbCAmJiBjdXJyZW50Vmlld2VyID09IGNvbnRlbnRPdXRsaW5lVmlld2VyID8KKwkJCWNvbnRlbnRPdXRsaW5lU3RhdHVzTGluZU1hbmFnZXIgOiBnZXRBY3Rpb25CYXJzKCkuZ2V0U3RhdHVzTGluZU1hbmFnZXIoKTsKKworCQlpZiAoc3RhdHVzTGluZU1hbmFnZXIgIT0gbnVsbCkgeworCQkJaWYgKHNlbGVjdGlvbiBpbnN0YW5jZW9mIElTdHJ1Y3R1cmVkU2VsZWN0aW9uKSB7CisJCQkJQ29sbGVjdGlvbjw/PiBjb2xsZWN0aW9uID0gKChJU3RydWN0dXJlZFNlbGVjdGlvbilzZWxlY3Rpb24pLnRvTGlzdCgpOworCQkJCXN3aXRjaCAoY29sbGVjdGlvbi5zaXplKCkpIHsKKwkJCQkJY2FzZSAwOiB7CisJCQkJCQlzdGF0dXNMaW5lTWFuYWdlci5zZXRNZXNzYWdlKGdldFN0cmluZygiX1VJX05vT2JqZWN0U2VsZWN0ZWQiKSk7CisJCQkJCQlicmVhazsKKwkJCQkJfQorCQkJCQljYXNlIDE6IHsKKwkJCQkJCVN0cmluZyB0ZXh0ID0gbmV3IEFkYXB0ZXJGYWN0b3J5SXRlbURlbGVnYXRvcihhZGFwdGVyRmFjdG9yeSkuZ2V0VGV4dChjb2xsZWN0aW9uLml0ZXJhdG9yKCkubmV4dCgpKTsKKwkJCQkJCXN0YXR1c0xpbmVNYW5hZ2VyLnNldE1lc3NhZ2UoZ2V0U3RyaW5nKCJfVUlfU2luZ2xlT2JqZWN0U2VsZWN0ZWQiLCB0ZXh0KSk7CisJCQkJCQlicmVhazsKKwkJCQkJfQorCQkJCQlkZWZhdWx0OiB7CisJCQkJCQlzdGF0dXNMaW5lTWFuYWdlci5zZXRNZXNzYWdlKGdldFN0cmluZygiX1VJX011bHRpT2JqZWN0U2VsZWN0ZWQiLCBJbnRlZ2VyLnRvU3RyaW5nKGNvbGxlY3Rpb24uc2l6ZSgpKSkpOworCQkJCQkJYnJlYWs7CisJCQkJCX0KKwkJCQl9CisJCQl9CisJCQllbHNlIHsKKwkJCQlzdGF0dXNMaW5lTWFuYWdlci5zZXRNZXNzYWdlKCIiKTsKKwkJCX0KKwkJfQorCX0KKworCS8qKgorCSAqIFRoaXMgbG9va3MgdXAgYSBzdHJpbmcgaW4gdGhlIHBsdWdpbidzIHBsdWdpbi5wcm9wZXJ0aWVzIGZpbGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIGdldFN0cmluZyhTdHJpbmcga2V5KSB7CisJCXJldHVybiBFeHBlcmltZW50YWxFZGl0b3JQbHVnaW4uSU5TVEFOQ0UuZ2V0U3RyaW5nKGtleSk7CisJfQorCisJLyoqCisJICogVGhpcyBsb29rcyB1cCBhIHN0cmluZyBpbiBwbHVnaW4ucHJvcGVydGllcywgbWFraW5nIGEgc3Vic3RpdHV0aW9uLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByaXZhdGUgc3RhdGljIFN0cmluZyBnZXRTdHJpbmcoU3RyaW5nIGtleSwgT2JqZWN0IHMxKSB7CisJCXJldHVybiBFeHBlcmltZW50YWxFZGl0b3JQbHVnaW4uSU5TVEFOQ0UuZ2V0U3RyaW5nKGtleSwgbmV3IE9iamVjdCBbXSB7IHMxIH0pOworCX0KKworCS8qKgorCSAqIFRoaXMgaW1wbGVtZW50cyB7QGxpbmsgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklNZW51TGlzdGVuZXJ9IHRvIGhlbHAgZmlsbCB0aGUgY29udGV4dCBtZW51cyB3aXRoIGNvbnRyaWJ1dGlvbnMgZnJvbSB0aGUgRWRpdCBtZW51LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIG1lbnVBYm91dFRvU2hvdyhJTWVudU1hbmFnZXIgbWVudU1hbmFnZXIpIHsKKwkJKChJTWVudUxpc3RlbmVyKWdldEVkaXRvclNpdGUoKS5nZXRBY3Rpb25CYXJDb250cmlidXRvcigpKS5tZW51QWJvdXRUb1Nob3cobWVudU1hbmFnZXIpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFZGl0aW5nRG9tYWluQWN0aW9uQmFyQ29udHJpYnV0b3IgZ2V0QWN0aW9uQmFyQ29udHJpYnV0b3IoKSB7CisJCXJldHVybiAoRWRpdGluZ0RvbWFpbkFjdGlvbkJhckNvbnRyaWJ1dG9yKWdldEVkaXRvclNpdGUoKS5nZXRBY3Rpb25CYXJDb250cmlidXRvcigpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBJQWN0aW9uQmFycyBnZXRBY3Rpb25CYXJzKCkgeworCQlyZXR1cm4gZ2V0QWN0aW9uQmFyQ29udHJpYnV0b3IoKS5nZXRBY3Rpb25CYXJzKCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEFkYXB0ZXJGYWN0b3J5IGdldEFkYXB0ZXJGYWN0b3J5KCkgeworCQlyZXR1cm4gYWRhcHRlckZhY3Rvcnk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgZGlzcG9zZSgpIHsKKwkJdXBkYXRlUHJvYmxlbUluZGljYXRpb24gPSBmYWxzZTsKKworCQlSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkucmVtb3ZlUmVzb3VyY2VDaGFuZ2VMaXN0ZW5lcihyZXNvdXJjZUNoYW5nZUxpc3RlbmVyKTsKKworCQlnZXRTaXRlKCkuZ2V0UGFnZSgpLnJlbW92ZVBhcnRMaXN0ZW5lcihwYXJ0TGlzdGVuZXIpOworCisJCWFkYXB0ZXJGYWN0b3J5LmRpc3Bvc2UoKTsKKworCQlpZiAoZ2V0QWN0aW9uQmFyQ29udHJpYnV0b3IoKS5nZXRBY3RpdmVFZGl0b3IoKSA9PSB0aGlzKSB7CisJCQlnZXRBY3Rpb25CYXJDb250cmlidXRvcigpLnNldEFjdGl2ZUVkaXRvcihudWxsKTsKKwkJfQorCisJCWlmIChwcm9wZXJ0eVNoZWV0UGFnZSAhPSBudWxsKSB7CisJCQlwcm9wZXJ0eVNoZWV0UGFnZS5kaXNwb3NlKCk7CisJCX0KKworCQlpZiAoY29udGVudE91dGxpbmVQYWdlICE9IG51bGwpIHsKKwkJCWNvbnRlbnRPdXRsaW5lUGFnZS5kaXNwb3NlKCk7CisJCX0KKworCQlzdXBlci5kaXNwb3NlKCk7CisJfQorCisJLyoqCisJICogUmV0dXJucyB3aGV0aGVyIHRoZSBvdXRsaW5lIHZpZXcgc2hvdWxkIGJlIHByZXNlbnRlZCB0byB0aGUgdXNlci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgYm9vbGVhbiBzaG93T3V0bGluZVZpZXcoKSB7CisJCXJldHVybiB0cnVlOworCX0KK30KZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzLmV4cGVyaW1lbnRhbC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL2V4cGVyaW1lbnRhbC9wcmVzZW50YXRpb24vRXhwZXJpbWVudGFsRWRpdG9yUGx1Z2luLmphdmEgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy5leHBlcmltZW50YWwvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9leHBlcmltZW50YWwvcHJlc2VudGF0aW9uL0V4cGVyaW1lbnRhbEVkaXRvclBsdWdpbi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjliMjljOWMKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy5leHBlcmltZW50YWwvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9leHBlcmltZW50YWwvcHJlc2VudGF0aW9uL0V4cGVyaW1lbnRhbEVkaXRvclBsdWdpbi5qYXZhCkBAIC0wLDAgKzEsMTA4IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leHBlcmltZW50YWwucHJlc2VudGF0aW9uOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAKKyAqIENvcHlyaWdodCAoYykgMjAxMSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4gCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIAorICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wIAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQgCisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbCAKKyAqIAorICogQ29udHJpYnV0b3JzOiAKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24uRU1GUGx1Z2luOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udWkuRWNsaXBzZVVJUGx1Z2luOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5SZXNvdXJjZUxvY2F0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnByb3ZpZGVyLkVjb3JlRWRpdFBsdWdpbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLnByb3ZpZGVyLkNvcmVFZGl0UGx1Z2luOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuZWRnZXMucHJvdmlkZXIuRGVmaW5pdGlvbnNFZGl0UGx1Z2luOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5wcm92aWRlci5EaXNlYXNlbW9kZWxzRWRpdFBsdWdpbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQucHJvdmlkZXIuU3RhbmRhcmRFZGl0UGx1Z2luOworCisvKioKKyAqIFRoaXMgaXMgdGhlIGNlbnRyYWwgc2luZ2xldG9uIGZvciB0aGUgRXhwZXJpbWVudGFsIGVkaXRvciBwbHVnaW4uCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBmaW5hbCBjbGFzcyBFeHBlcmltZW50YWxFZGl0b3JQbHVnaW4gZXh0ZW5kcyBFTUZQbHVnaW4geworCS8qKgorCSAqIEtlZXAgdHJhY2sgb2YgdGhlIHNpbmdsZXRvbi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIEV4cGVyaW1lbnRhbEVkaXRvclBsdWdpbiBJTlNUQU5DRSA9IG5ldyBFeHBlcmltZW50YWxFZGl0b3JQbHVnaW4oKTsKKwkKKwkvKioKKwkgKiBLZWVwIHRyYWNrIG9mIHRoZSBzaW5nbGV0b24uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJpdmF0ZSBzdGF0aWMgSW1wbGVtZW50YXRpb24gcGx1Z2luOworCisJLyoqCisJICogQ3JlYXRlIHRoZSBpbnN0YW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRXhwZXJpbWVudGFsRWRpdG9yUGx1Z2luKCkgeworCQlzdXBlcgorCQkJKG5ldyBSZXNvdXJjZUxvY2F0b3IgW10geworCQkJCURpc2Vhc2Vtb2RlbHNFZGl0UGx1Z2luLklOU1RBTkNFLAorCQkJCUNvcmVFZGl0UGx1Z2luLklOU1RBTkNFLAorCQkJCURlZmluaXRpb25zRWRpdFBsdWdpbi5JTlNUQU5DRSwKKwkJCQlFY29yZUVkaXRQbHVnaW4uSU5TVEFOQ0UsCisJCQkJU3RhbmRhcmRFZGl0UGx1Z2luLklOU1RBTkNFLAorCQkJfSk7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgc2luZ2xldG9uIGluc3RhbmNlIG9mIHRoZSBFY2xpcHNlIHBsdWdpbi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIHNpbmdsZXRvbiBpbnN0YW5jZS4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIFJlc291cmNlTG9jYXRvciBnZXRQbHVnaW5SZXNvdXJjZUxvY2F0b3IoKSB7CisJCXJldHVybiBwbHVnaW47CisJfQorCQorCS8qKgorCSAqIFJldHVybnMgdGhlIHNpbmdsZXRvbiBpbnN0YW5jZSBvZiB0aGUgRWNsaXBzZSBwbHVnaW4uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBzaW5nbGV0b24gaW5zdGFuY2UuCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBzdGF0aWMgSW1wbGVtZW50YXRpb24gZ2V0UGx1Z2luKCkgeworCQlyZXR1cm4gcGx1Z2luOworCX0KKwkKKwkvKioKKwkgKiBUaGUgYWN0dWFsIGltcGxlbWVudGF0aW9uIG9mIHRoZSBFY2xpcHNlIDxiPlBsdWdpbjwvYj4uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHN0YXRpYyBjbGFzcyBJbXBsZW1lbnRhdGlvbiBleHRlbmRzIEVjbGlwc2VVSVBsdWdpbiB7CisJCS8qKgorCQkgKiBDcmVhdGVzIGFuIGluc3RhbmNlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJcHVibGljIEltcGxlbWVudGF0aW9uKCkgeworCQkJc3VwZXIoKTsKKwkKKwkJCS8vIFJlbWVtYmVyIHRoZSBzdGF0aWMgaW5zdGFuY2UuCisJCQkvLworCQkJcGx1Z2luID0gdGhpczsKKwkJfQorCX0KKworfQpkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMuZXhwZXJpbWVudGFsL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvZXhwZXJpbWVudGFsL3ByZXNlbnRhdGlvbi9FeHBlcmltZW50YWxNb2RlbFdpemFyZC5qYXZhIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMuZXhwZXJpbWVudGFsL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvZXhwZXJpbWVudGFsL3ByZXNlbnRhdGlvbi9FeHBlcmltZW50YWxNb2RlbFdpemFyZC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBhYjZiMzQKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy5leHBlcmltZW50YWwvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9leHBlcmltZW50YWwvcHJlc2VudGF0aW9uL0V4cGVyaW1lbnRhbE1vZGVsV2l6YXJkLmphdmEKQEAgLTAsMCArMSw2MTEgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4cGVyaW1lbnRhbC5wcmVzZW50YXRpb247CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIAorICogQ29weXJpZ2h0IChjKSAyMDExIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiAKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdCAKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sIAorICogCisgKiBDb250cmlidXRvcnM6IAorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiAKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OworaW1wb3J0IGphdmEudXRpbC5BcnJheXM7CitpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247CitpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb25zOworaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOworaW1wb3J0IGphdmEudXRpbC5MaXN0OworaW1wb3J0IGphdmEudXRpbC5NYXA7CitpbXBvcnQgamF2YS51dGlsLk1pc3NpbmdSZXNvdXJjZUV4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLnV0aWwuU3RyaW5nVG9rZW5pemVyOworCitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUNvbnRhaW5lcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JRmlsZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JRm9sZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0OworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklSZXNvdXJjZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5SZXNvdXJjZXNQbHVnaW47CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQcm9ncmVzc01vbml0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBhdGg7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5Db21tb25QbHVnaW47CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlVSSTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3NpZmllcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUucmVzb3VyY2UuUmVzb3VyY2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnJlc291cmNlLlJlc291cmNlU2V0OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5yZXNvdXJjZS5pbXBsLlJlc291cmNlU2V0SW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUueG1pLlhNTFJlc291cmNlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLnByb3ZpZGVyLkV4dGVuZGVkSW1hZ2VSZWdpc3RyeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5kaWFsb2dzLk1lc3NhZ2VEaWFsb2c7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVN0cnVjdHVyZWRTZWxlY3Rpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5TdHJ1Y3R1cmVkU2VsZWN0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLndpemFyZC5XaXphcmQ7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uud2l6YXJkLldpemFyZFBhZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4cGVyaW1lbnRhbC5FeHBlcmltZW50YWxGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leHBlcmltZW50YWwuRXhwZXJpbWVudGFsUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXhwZXJpbWVudGFsLnByb3ZpZGVyLkV4cGVyaW1lbnRhbEVkaXRQbHVnaW47CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LlNXVDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLk1vZGlmeUV2ZW50OworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuTW9kaWZ5TGlzdGVuZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5HcmlkRGF0YTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QubGF5b3V0LkdyaWRMYXlvdXQ7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tYm87CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkxhYmVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklOZXdXaXphcmQ7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaDsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5JV29ya2JlbmNoUGFnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5JV29ya2JlbmNoUGFydDsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5JV29ya2JlbmNoV2luZG93OworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLlBhcnRJbml0RXhjZXB0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLmFjdGlvbnMuV29ya3NwYWNlTW9kaWZ5T3BlcmF0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLmRpYWxvZ3MuV2l6YXJkTmV3RmlsZUNyZWF0aW9uUGFnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5wYXJ0LkZpbGVFZGl0b3JJbnB1dDsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5wYXJ0LklTZXRTZWxlY3Rpb25UYXJnZXQ7CisKKworLyoqCisgKiBUaGlzIGlzIGEgc2ltcGxlIHdpemFyZCBmb3IgY3JlYXRpbmcgYSBuZXcgbW9kZWwgZmlsZS4KKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIEV4cGVyaW1lbnRhbE1vZGVsV2l6YXJkIGV4dGVuZHMgV2l6YXJkIGltcGxlbWVudHMgSU5ld1dpemFyZCB7CisJLyoqCisJICogVGhlIHN1cHBvcnRlZCBleHRlbnNpb25zIGZvciBjcmVhdGVkIGZpbGVzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgTGlzdDxTdHJpbmc+IEZJTEVfRVhURU5TSU9OUyA9CisJCUNvbGxlY3Rpb25zLnVubW9kaWZpYWJsZUxpc3QoQXJyYXlzLmFzTGlzdChFeHBlcmltZW50YWxFZGl0b3JQbHVnaW4uSU5TVEFOQ0UuZ2V0U3RyaW5nKCJfVUlfRXhwZXJpbWVudGFsRWRpdG9yRmlsZW5hbWVFeHRlbnNpb25zIikuc3BsaXQoIlxccyosXFxzKiIpKSk7CisKKwkvKioKKwkgKiBBIGZvcm1hdHRlZCBsaXN0IG9mIHN1cHBvcnRlZCBmaWxlIGV4dGVuc2lvbnMsIHN1aXRhYmxlIGZvciBkaXNwbGF5LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEZPUk1BVFRFRF9GSUxFX0VYVEVOU0lPTlMgPQorCQlFeHBlcmltZW50YWxFZGl0b3JQbHVnaW4uSU5TVEFOQ0UuZ2V0U3RyaW5nKCJfVUlfRXhwZXJpbWVudGFsRWRpdG9yRmlsZW5hbWVFeHRlbnNpb25zIikucmVwbGFjZUFsbCgiXFxzKixcXHMqIiwgIiwgIik7CisKKwkvKioKKwkgKiBUaGlzIGNhY2hlcyBhbiBpbnN0YW5jZSBvZiB0aGUgbW9kZWwgcGFja2FnZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgRXhwZXJpbWVudGFsUGFja2FnZSBleHBlcmltZW50YWxQYWNrYWdlID0gRXhwZXJpbWVudGFsUGFja2FnZS5lSU5TVEFOQ0U7CisKKwkvKioKKwkgKiBUaGlzIGNhY2hlcyBhbiBpbnN0YW5jZSBvZiB0aGUgbW9kZWwgZmFjdG9yeS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgRXhwZXJpbWVudGFsRmFjdG9yeSBleHBlcmltZW50YWxGYWN0b3J5ID0gZXhwZXJpbWVudGFsUGFja2FnZS5nZXRFeHBlcmltZW50YWxGYWN0b3J5KCk7CisKKwkvKioKKwkgKiBUaGlzIGlzIHRoZSBmaWxlIGNyZWF0aW9uIHBhZ2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIEV4cGVyaW1lbnRhbE1vZGVsV2l6YXJkTmV3RmlsZUNyZWF0aW9uUGFnZSBuZXdGaWxlQ3JlYXRpb25QYWdlOworCisJLyoqCisJICogVGhpcyBpcyB0aGUgaW5pdGlhbCBvYmplY3QgY3JlYXRpb24gcGFnZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgRXhwZXJpbWVudGFsTW9kZWxXaXphcmRJbml0aWFsT2JqZWN0Q3JlYXRpb25QYWdlIGluaXRpYWxPYmplY3RDcmVhdGlvblBhZ2U7CisKKwkvKioKKwkgKiBSZW1lbWJlciB0aGUgc2VsZWN0aW9uIGR1cmluZyBpbml0aWFsaXphdGlvbiBmb3IgcG9wdWxhdGluZyB0aGUgZGVmYXVsdCBjb250YWluZXIuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIElTdHJ1Y3R1cmVkU2VsZWN0aW9uIHNlbGVjdGlvbjsKKworCS8qKgorCSAqIFJlbWVtYmVyIHRoZSB3b3JrYmVuY2ggZHVyaW5nIGluaXRpYWxpemF0aW9uLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBJV29ya2JlbmNoIHdvcmtiZW5jaDsKKworCS8qKgorCSAqIENhY2hlcyB0aGUgbmFtZXMgb2YgdGhlIHR5cGVzIHRoYXQgY2FuIGJlIGNyZWF0ZWQgYXMgdGhlIHJvb3Qgb2JqZWN0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBMaXN0PFN0cmluZz4gaW5pdGlhbE9iamVjdE5hbWVzOworCisJLyoqCisJICogVGhpcyBqdXN0IHJlY29yZHMgdGhlIGluZm9ybWF0aW9uLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIGluaXQoSVdvcmtiZW5jaCB3b3JrYmVuY2gsIElTdHJ1Y3R1cmVkU2VsZWN0aW9uIHNlbGVjdGlvbikgeworCQl0aGlzLndvcmtiZW5jaCA9IHdvcmtiZW5jaDsKKwkJdGhpcy5zZWxlY3Rpb24gPSBzZWxlY3Rpb247CisJCXNldFdpbmRvd1RpdGxlKEV4cGVyaW1lbnRhbEVkaXRvclBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoIl9VSV9XaXphcmRfbGFiZWwiKSk7CisJCXNldERlZmF1bHRQYWdlSW1hZ2VEZXNjcmlwdG9yKEV4dGVuZGVkSW1hZ2VSZWdpc3RyeS5JTlNUQU5DRS5nZXRJbWFnZURlc2NyaXB0b3IoRXhwZXJpbWVudGFsRWRpdG9yUGx1Z2luLklOU1RBTkNFLmdldEltYWdlKCJmdWxsL3dpemJhbi9OZXdFeHBlcmltZW50YWwiKSkpOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIG5hbWVzIG9mIHRoZSB0eXBlcyB0aGF0IGNhbiBiZSBjcmVhdGVkIGFzIHRoZSByb290IG9iamVjdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgQ29sbGVjdGlvbjxTdHJpbmc+IGdldEluaXRpYWxPYmplY3ROYW1lcygpIHsKKwkJaWYgKGluaXRpYWxPYmplY3ROYW1lcyA9PSBudWxsKSB7CisJCQlpbml0aWFsT2JqZWN0TmFtZXMgPSBuZXcgQXJyYXlMaXN0PFN0cmluZz4oKTsKKwkJCWZvciAoRUNsYXNzaWZpZXIgZUNsYXNzaWZpZXIgOiBleHBlcmltZW50YWxQYWNrYWdlLmdldEVDbGFzc2lmaWVycygpKSB7CisJCQkJaWYgKGVDbGFzc2lmaWVyIGluc3RhbmNlb2YgRUNsYXNzKSB7CisJCQkJCUVDbGFzcyBlQ2xhc3MgPSAoRUNsYXNzKWVDbGFzc2lmaWVyOworCQkJCQlpZiAoIWVDbGFzcy5pc0Fic3RyYWN0KCkpIHsKKwkJCQkJCWluaXRpYWxPYmplY3ROYW1lcy5hZGQoZUNsYXNzLmdldE5hbWUoKSk7CisJCQkJCX0KKwkJCQl9CisJCQl9CisJCQlDb2xsZWN0aW9ucy5zb3J0KGluaXRpYWxPYmplY3ROYW1lcywgQ29tbW9uUGx1Z2luLklOU1RBTkNFLmdldENvbXBhcmF0b3IoKSk7CisJCX0KKwkJcmV0dXJuIGluaXRpYWxPYmplY3ROYW1lczsKKwl9CisKKwkvKioKKwkgKiBDcmVhdGUgYSBuZXcgbW9kZWwuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIEVPYmplY3QgY3JlYXRlSW5pdGlhbE1vZGVsKCkgeworCQlFQ2xhc3MgZUNsYXNzID0gKEVDbGFzcylleHBlcmltZW50YWxQYWNrYWdlLmdldEVDbGFzc2lmaWVyKGluaXRpYWxPYmplY3RDcmVhdGlvblBhZ2UuZ2V0SW5pdGlhbE9iamVjdE5hbWUoKSk7CisJCUVPYmplY3Qgcm9vdE9iamVjdCA9IGV4cGVyaW1lbnRhbEZhY3RvcnkuY3JlYXRlKGVDbGFzcyk7CisJCXJldHVybiByb290T2JqZWN0OworCX0KKworCS8qKgorCSAqIERvIHRoZSB3b3JrIGFmdGVyIGV2ZXJ5dGhpbmcgaXMgc3BlY2lmaWVkLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBib29sZWFuIHBlcmZvcm1GaW5pc2goKSB7CisJCXRyeSB7CisJCQkvLyBSZW1lbWJlciB0aGUgZmlsZS4KKwkJCS8vCisJCQlmaW5hbCBJRmlsZSBtb2RlbEZpbGUgPSBnZXRNb2RlbEZpbGUoKTsKKworCQkJLy8gRG8gdGhlIHdvcmsgd2l0aGluIGFuIG9wZXJhdGlvbi4KKwkJCS8vCisJCQlXb3Jrc3BhY2VNb2RpZnlPcGVyYXRpb24gb3BlcmF0aW9uID0KKwkJCQluZXcgV29ya3NwYWNlTW9kaWZ5T3BlcmF0aW9uKCkgeworCQkJCQlAT3ZlcnJpZGUKKwkJCQkJcHJvdGVjdGVkIHZvaWQgZXhlY3V0ZShJUHJvZ3Jlc3NNb25pdG9yIHByb2dyZXNzTW9uaXRvcikgeworCQkJCQkJdHJ5IHsKKwkJCQkJCQkvLyBDcmVhdGUgYSByZXNvdXJjZSBzZXQKKwkJCQkJCQkvLworCQkJCQkJCVJlc291cmNlU2V0IHJlc291cmNlU2V0ID0gbmV3IFJlc291cmNlU2V0SW1wbCgpOworCisJCQkJCQkJLy8gR2V0IHRoZSBVUkkgb2YgdGhlIG1vZGVsIGZpbGUuCisJCQkJCQkJLy8KKwkJCQkJCQlVUkkgZmlsZVVSSSA9IFVSSS5jcmVhdGVQbGF0Zm9ybVJlc291cmNlVVJJKG1vZGVsRmlsZS5nZXRGdWxsUGF0aCgpLnRvU3RyaW5nKCksIHRydWUpOworCisJCQkJCQkJLy8gQ3JlYXRlIGEgcmVzb3VyY2UgZm9yIHRoaXMgZmlsZS4KKwkJCQkJCQkvLworCQkJCQkJCVJlc291cmNlIHJlc291cmNlID0gcmVzb3VyY2VTZXQuY3JlYXRlUmVzb3VyY2UoZmlsZVVSSSk7CisKKwkJCQkJCQkvLyBBZGQgdGhlIGluaXRpYWwgbW9kZWwgb2JqZWN0IHRvIHRoZSBjb250ZW50cy4KKwkJCQkJCQkvLworCQkJCQkJCUVPYmplY3Qgcm9vdE9iamVjdCA9IGNyZWF0ZUluaXRpYWxNb2RlbCgpOworCQkJCQkJCWlmIChyb290T2JqZWN0ICE9IG51bGwpIHsKKwkJCQkJCQkJcmVzb3VyY2UuZ2V0Q29udGVudHMoKS5hZGQocm9vdE9iamVjdCk7CisJCQkJCQkJfQorCisJCQkJCQkJLy8gU2F2ZSB0aGUgY29udGVudHMgb2YgdGhlIHJlc291cmNlIHRvIHRoZSBmaWxlIHN5c3RlbS4KKwkJCQkJCQkvLworCQkJCQkJCU1hcDxPYmplY3QsIE9iamVjdD4gb3B0aW9ucyA9IG5ldyBIYXNoTWFwPE9iamVjdCwgT2JqZWN0PigpOworCQkJCQkJCW9wdGlvbnMucHV0KFhNTFJlc291cmNlLk9QVElPTl9FTkNPRElORywgaW5pdGlhbE9iamVjdENyZWF0aW9uUGFnZS5nZXRFbmNvZGluZygpKTsKKwkJCQkJCQlyZXNvdXJjZS5zYXZlKG9wdGlvbnMpOworCQkJCQkJfQorCQkJCQkJY2F0Y2ggKEV4Y2VwdGlvbiBleGNlcHRpb24pIHsKKwkJCQkJCQlFeHBlcmltZW50YWxFZGl0b3JQbHVnaW4uSU5TVEFOQ0UubG9nKGV4Y2VwdGlvbik7CisJCQkJCQl9CisJCQkJCQlmaW5hbGx5IHsKKwkJCQkJCQlwcm9ncmVzc01vbml0b3IuZG9uZSgpOworCQkJCQkJfQorCQkJCQl9CisJCQkJfTsKKworCQkJZ2V0Q29udGFpbmVyKCkucnVuKGZhbHNlLCBmYWxzZSwgb3BlcmF0aW9uKTsKKworCQkJLy8gU2VsZWN0IHRoZSBuZXcgZmlsZSByZXNvdXJjZSBpbiB0aGUgY3VycmVudCB2aWV3LgorCQkJLy8KKwkJCUlXb3JrYmVuY2hXaW5kb3cgd29ya2JlbmNoV2luZG93ID0gd29ya2JlbmNoLmdldEFjdGl2ZVdvcmtiZW5jaFdpbmRvdygpOworCQkJSVdvcmtiZW5jaFBhZ2UgcGFnZSA9IHdvcmtiZW5jaFdpbmRvdy5nZXRBY3RpdmVQYWdlKCk7CisJCQlmaW5hbCBJV29ya2JlbmNoUGFydCBhY3RpdmVQYXJ0ID0gcGFnZS5nZXRBY3RpdmVQYXJ0KCk7CisJCQlpZiAoYWN0aXZlUGFydCBpbnN0YW5jZW9mIElTZXRTZWxlY3Rpb25UYXJnZXQpIHsKKwkJCQlmaW5hbCBJU2VsZWN0aW9uIHRhcmdldFNlbGVjdGlvbiA9IG5ldyBTdHJ1Y3R1cmVkU2VsZWN0aW9uKG1vZGVsRmlsZSk7CisJCQkJZ2V0U2hlbGwoKS5nZXREaXNwbGF5KCkuYXN5bmNFeGVjCisJCQkJCShuZXcgUnVubmFibGUoKSB7CisJCQkJCQkgcHVibGljIHZvaWQgcnVuKCkgeworCQkJCQkJCSAoKElTZXRTZWxlY3Rpb25UYXJnZXQpYWN0aXZlUGFydCkuc2VsZWN0UmV2ZWFsKHRhcmdldFNlbGVjdGlvbik7CisJCQkJCQkgfQorCQkJCQkgfSk7CisJCQl9CisKKwkJCS8vIE9wZW4gYW4gZWRpdG9yIG9uIHRoZSBuZXcgZmlsZS4KKwkJCS8vCisJCQl0cnkgeworCQkJCXBhZ2Uub3BlbkVkaXRvcgorCQkJCQkobmV3IEZpbGVFZGl0b3JJbnB1dChtb2RlbEZpbGUpLAorCQkJCQkgd29ya2JlbmNoLmdldEVkaXRvclJlZ2lzdHJ5KCkuZ2V0RGVmYXVsdEVkaXRvcihtb2RlbEZpbGUuZ2V0RnVsbFBhdGgoKS50b1N0cmluZygpKS5nZXRJZCgpKTsJCQkJCSAJIAorCQkJfQorCQkJY2F0Y2ggKFBhcnRJbml0RXhjZXB0aW9uIGV4Y2VwdGlvbikgeworCQkJCU1lc3NhZ2VEaWFsb2cub3BlbkVycm9yKHdvcmtiZW5jaFdpbmRvdy5nZXRTaGVsbCgpLCBFeHBlcmltZW50YWxFZGl0b3JQbHVnaW4uSU5TVEFOQ0UuZ2V0U3RyaW5nKCJfVUlfT3BlbkVkaXRvckVycm9yX2xhYmVsIiksIGV4Y2VwdGlvbi5nZXRNZXNzYWdlKCkpOworCQkJCXJldHVybiBmYWxzZTsKKwkJCX0KKworCQkJcmV0dXJuIHRydWU7CisJCX0KKwkJY2F0Y2ggKEV4Y2VwdGlvbiBleGNlcHRpb24pIHsKKwkJCUV4cGVyaW1lbnRhbEVkaXRvclBsdWdpbi5JTlNUQU5DRS5sb2coZXhjZXB0aW9uKTsKKwkJCXJldHVybiBmYWxzZTsKKwkJfQorCX0KKworCS8qKgorCSAqIFRoaXMgaXMgdGhlIG9uZSBwYWdlIG9mIHRoZSB3aXphcmQuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIGNsYXNzIEV4cGVyaW1lbnRhbE1vZGVsV2l6YXJkTmV3RmlsZUNyZWF0aW9uUGFnZSBleHRlbmRzIFdpemFyZE5ld0ZpbGVDcmVhdGlvblBhZ2UgeworCQkvKioKKwkJICogUGFzcyBpbiB0aGUgc2VsZWN0aW9uLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJcHVibGljIEV4cGVyaW1lbnRhbE1vZGVsV2l6YXJkTmV3RmlsZUNyZWF0aW9uUGFnZShTdHJpbmcgcGFnZUlkLCBJU3RydWN0dXJlZFNlbGVjdGlvbiBzZWxlY3Rpb24pIHsKKwkJCXN1cGVyKHBhZ2VJZCwgc2VsZWN0aW9uKTsKKwkJfQorCisJCS8qKgorCQkgKiBUaGUgZnJhbWV3b3JrIGNhbGxzIHRoaXMgdG8gc2VlIGlmIHRoZSBmaWxlIGlzIGNvcnJlY3QuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlAT3ZlcnJpZGUKKwkJcHJvdGVjdGVkIGJvb2xlYW4gdmFsaWRhdGVQYWdlKCkgeworCQkJaWYgKHN1cGVyLnZhbGlkYXRlUGFnZSgpKSB7CisJCQkJU3RyaW5nIGV4dGVuc2lvbiA9IG5ldyBQYXRoKGdldEZpbGVOYW1lKCkpLmdldEZpbGVFeHRlbnNpb24oKTsKKwkJCQlpZiAoZXh0ZW5zaW9uID09IG51bGwgfHwgIUZJTEVfRVhURU5TSU9OUy5jb250YWlucyhleHRlbnNpb24pKSB7CisJCQkJCVN0cmluZyBrZXkgPSBGSUxFX0VYVEVOU0lPTlMuc2l6ZSgpID4gMSA/ICJfV0FSTl9GaWxlbmFtZUV4dGVuc2lvbnMiIDogIl9XQVJOX0ZpbGVuYW1lRXh0ZW5zaW9uIjsKKwkJCQkJc2V0RXJyb3JNZXNzYWdlKEV4cGVyaW1lbnRhbEVkaXRvclBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoa2V5LCBuZXcgT2JqZWN0IFtdIHsgRk9STUFUVEVEX0ZJTEVfRVhURU5TSU9OUyB9KSk7CisJCQkJCXJldHVybiBmYWxzZTsKKwkJCQl9CisJCQkJcmV0dXJuIHRydWU7CisJCQl9CisJCQlyZXR1cm4gZmFsc2U7CisJCX0KKworCQkvKioKKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCXB1YmxpYyBJRmlsZSBnZXRNb2RlbEZpbGUoKSB7CisJCQlyZXR1cm4gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmdldFJvb3QoKS5nZXRGaWxlKGdldENvbnRhaW5lckZ1bGxQYXRoKCkuYXBwZW5kKGdldEZpbGVOYW1lKCkpKTsKKwkJfQorCX0KKworCS8qKgorCSAqIFRoaXMgaXMgdGhlIHBhZ2Ugd2hlcmUgdGhlIHR5cGUgb2Ygb2JqZWN0IHRvIGNyZWF0ZSBpcyBzZWxlY3RlZC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgY2xhc3MgRXhwZXJpbWVudGFsTW9kZWxXaXphcmRJbml0aWFsT2JqZWN0Q3JlYXRpb25QYWdlIGV4dGVuZHMgV2l6YXJkUGFnZSB7CisJCS8qKgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJcHJvdGVjdGVkIENvbWJvIGluaXRpYWxPYmplY3RGaWVsZDsKKworCQkvKioKKwkJICogQGdlbmVyYXRlZAorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICovCisJCXByb3RlY3RlZCBMaXN0PFN0cmluZz4gZW5jb2RpbmdzOworCisJCS8qKgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJcHJvdGVjdGVkIENvbWJvIGVuY29kaW5nRmllbGQ7CisKKwkJLyoqCisJCSAqIFBhc3MgaW4gdGhlIHNlbGVjdGlvbi4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCXB1YmxpYyBFeHBlcmltZW50YWxNb2RlbFdpemFyZEluaXRpYWxPYmplY3RDcmVhdGlvblBhZ2UoU3RyaW5nIHBhZ2VJZCkgeworCQkJc3VwZXIocGFnZUlkKTsKKwkJfQorCisJCS8qKgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJcHVibGljIHZvaWQgY3JlYXRlQ29udHJvbChDb21wb3NpdGUgcGFyZW50KSB7CisJCQlDb21wb3NpdGUgY29tcG9zaXRlID0gbmV3IENvbXBvc2l0ZShwYXJlbnQsIFNXVC5OT05FKTsgeworCQkJCUdyaWRMYXlvdXQgbGF5b3V0ID0gbmV3IEdyaWRMYXlvdXQoKTsKKwkJCQlsYXlvdXQubnVtQ29sdW1ucyA9IDE7CisJCQkJbGF5b3V0LnZlcnRpY2FsU3BhY2luZyA9IDEyOworCQkJCWNvbXBvc2l0ZS5zZXRMYXlvdXQobGF5b3V0KTsKKworCQkJCUdyaWREYXRhIGRhdGEgPSBuZXcgR3JpZERhdGEoKTsKKwkJCQlkYXRhLnZlcnRpY2FsQWxpZ25tZW50ID0gR3JpZERhdGEuRklMTDsKKwkJCQlkYXRhLmdyYWJFeGNlc3NWZXJ0aWNhbFNwYWNlID0gdHJ1ZTsKKwkJCQlkYXRhLmhvcml6b250YWxBbGlnbm1lbnQgPSBHcmlkRGF0YS5GSUxMOworCQkJCWNvbXBvc2l0ZS5zZXRMYXlvdXREYXRhKGRhdGEpOworCQkJfQorCisJCQlMYWJlbCBjb250YWluZXJMYWJlbCA9IG5ldyBMYWJlbChjb21wb3NpdGUsIFNXVC5MRUZUKTsKKwkJCXsKKwkJCQljb250YWluZXJMYWJlbC5zZXRUZXh0KEV4cGVyaW1lbnRhbEVkaXRvclBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoIl9VSV9Nb2RlbE9iamVjdCIpKTsKKworCQkJCUdyaWREYXRhIGRhdGEgPSBuZXcgR3JpZERhdGEoKTsKKwkJCQlkYXRhLmhvcml6b250YWxBbGlnbm1lbnQgPSBHcmlkRGF0YS5GSUxMOworCQkJCWNvbnRhaW5lckxhYmVsLnNldExheW91dERhdGEoZGF0YSk7CisJCQl9CisKKwkJCWluaXRpYWxPYmplY3RGaWVsZCA9IG5ldyBDb21ibyhjb21wb3NpdGUsIFNXVC5CT1JERVIpOworCQkJeworCQkJCUdyaWREYXRhIGRhdGEgPSBuZXcgR3JpZERhdGEoKTsKKwkJCQlkYXRhLmhvcml6b250YWxBbGlnbm1lbnQgPSBHcmlkRGF0YS5GSUxMOworCQkJCWRhdGEuZ3JhYkV4Y2Vzc0hvcml6b250YWxTcGFjZSA9IHRydWU7CisJCQkJaW5pdGlhbE9iamVjdEZpZWxkLnNldExheW91dERhdGEoZGF0YSk7CisJCQl9CisKKwkJCWZvciAoU3RyaW5nIG9iamVjdE5hbWUgOiBnZXRJbml0aWFsT2JqZWN0TmFtZXMoKSkgeworCQkJCWluaXRpYWxPYmplY3RGaWVsZC5hZGQoZ2V0TGFiZWwob2JqZWN0TmFtZSkpOworCQkJfQorCisJCQlpZiAoaW5pdGlhbE9iamVjdEZpZWxkLmdldEl0ZW1Db3VudCgpID09IDEpIHsKKwkJCQlpbml0aWFsT2JqZWN0RmllbGQuc2VsZWN0KDApOworCQkJfQorCQkJaW5pdGlhbE9iamVjdEZpZWxkLmFkZE1vZGlmeUxpc3RlbmVyKHZhbGlkYXRvcik7CisKKwkJCUxhYmVsIGVuY29kaW5nTGFiZWwgPSBuZXcgTGFiZWwoY29tcG9zaXRlLCBTV1QuTEVGVCk7CisJCQl7CisJCQkJZW5jb2RpbmdMYWJlbC5zZXRUZXh0KEV4cGVyaW1lbnRhbEVkaXRvclBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoIl9VSV9YTUxFbmNvZGluZyIpKTsKKworCQkJCUdyaWREYXRhIGRhdGEgPSBuZXcgR3JpZERhdGEoKTsKKwkJCQlkYXRhLmhvcml6b250YWxBbGlnbm1lbnQgPSBHcmlkRGF0YS5GSUxMOworCQkJCWVuY29kaW5nTGFiZWwuc2V0TGF5b3V0RGF0YShkYXRhKTsKKwkJCX0KKwkJCWVuY29kaW5nRmllbGQgPSBuZXcgQ29tYm8oY29tcG9zaXRlLCBTV1QuQk9SREVSKTsKKwkJCXsKKwkJCQlHcmlkRGF0YSBkYXRhID0gbmV3IEdyaWREYXRhKCk7CisJCQkJZGF0YS5ob3Jpem9udGFsQWxpZ25tZW50ID0gR3JpZERhdGEuRklMTDsKKwkJCQlkYXRhLmdyYWJFeGNlc3NIb3Jpem9udGFsU3BhY2UgPSB0cnVlOworCQkJCWVuY29kaW5nRmllbGQuc2V0TGF5b3V0RGF0YShkYXRhKTsKKwkJCX0KKworCQkJZm9yIChTdHJpbmcgZW5jb2RpbmcgOiBnZXRFbmNvZGluZ3MoKSkgeworCQkJCWVuY29kaW5nRmllbGQuYWRkKGVuY29kaW5nKTsKKwkJCX0KKworCQkJZW5jb2RpbmdGaWVsZC5zZWxlY3QoMCk7CisJCQllbmNvZGluZ0ZpZWxkLmFkZE1vZGlmeUxpc3RlbmVyKHZhbGlkYXRvcik7CisKKwkJCXNldFBhZ2VDb21wbGV0ZSh2YWxpZGF0ZVBhZ2UoKSk7CisJCQlzZXRDb250cm9sKGNvbXBvc2l0ZSk7CisJCX0KKworCQkvKioKKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCXByb3RlY3RlZCBNb2RpZnlMaXN0ZW5lciB2YWxpZGF0b3IgPQorCQkJbmV3IE1vZGlmeUxpc3RlbmVyKCkgeworCQkJCXB1YmxpYyB2b2lkIG1vZGlmeVRleHQoTW9kaWZ5RXZlbnQgZSkgeworCQkJCQlzZXRQYWdlQ29tcGxldGUodmFsaWRhdGVQYWdlKCkpOworCQkJCX0KKwkJCX07CisKKwkJLyoqCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlwcm90ZWN0ZWQgYm9vbGVhbiB2YWxpZGF0ZVBhZ2UoKSB7CisJCQlyZXR1cm4gZ2V0SW5pdGlhbE9iamVjdE5hbWUoKSAhPSBudWxsICYmIGdldEVuY29kaW5ncygpLmNvbnRhaW5zKGVuY29kaW5nRmllbGQuZ2V0VGV4dCgpKTsKKwkJfQorCisJCS8qKgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJQE92ZXJyaWRlCisJCXB1YmxpYyB2b2lkIHNldFZpc2libGUoYm9vbGVhbiB2aXNpYmxlKSB7CisJCQlzdXBlci5zZXRWaXNpYmxlKHZpc2libGUpOworCQkJaWYgKHZpc2libGUpIHsKKwkJCQlpZiAoaW5pdGlhbE9iamVjdEZpZWxkLmdldEl0ZW1Db3VudCgpID09IDEpIHsKKwkJCQkJaW5pdGlhbE9iamVjdEZpZWxkLmNsZWFyU2VsZWN0aW9uKCk7CisJCQkJCWVuY29kaW5nRmllbGQuc2V0Rm9jdXMoKTsKKwkJCQl9CisJCQkJZWxzZSB7CisJCQkJCWVuY29kaW5nRmllbGQuY2xlYXJTZWxlY3Rpb24oKTsKKwkJCQkJaW5pdGlhbE9iamVjdEZpZWxkLnNldEZvY3VzKCk7CisJCQkJfQorCQkJfQorCQl9CisKKwkJLyoqCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlwdWJsaWMgU3RyaW5nIGdldEluaXRpYWxPYmplY3ROYW1lKCkgeworCQkJU3RyaW5nIGxhYmVsID0gaW5pdGlhbE9iamVjdEZpZWxkLmdldFRleHQoKTsKKworCQkJZm9yIChTdHJpbmcgbmFtZSA6IGdldEluaXRpYWxPYmplY3ROYW1lcygpKSB7CisJCQkJaWYgKGdldExhYmVsKG5hbWUpLmVxdWFscyhsYWJlbCkpIHsKKwkJCQkJcmV0dXJuIG5hbWU7CisJCQkJfQorCQkJfQorCQkJcmV0dXJuIG51bGw7CisJCX0KKworCQkvKioKKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCXB1YmxpYyBTdHJpbmcgZ2V0RW5jb2RpbmcoKSB7CisJCQlyZXR1cm4gZW5jb2RpbmdGaWVsZC5nZXRUZXh0KCk7CisJCX0KKworCQkvKioKKwkJICogUmV0dXJucyB0aGUgbGFiZWwgZm9yIHRoZSBzcGVjaWZpZWQgdHlwZSBuYW1lLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJcHJvdGVjdGVkIFN0cmluZyBnZXRMYWJlbChTdHJpbmcgdHlwZU5hbWUpIHsKKwkJCXRyeSB7CisJCQkJcmV0dXJuIEV4cGVyaW1lbnRhbEVkaXRQbHVnaW4uSU5TVEFOQ0UuZ2V0U3RyaW5nKCJfVUlfIiArIHR5cGVOYW1lICsgIl90eXBlIik7CisJCQl9CisJCQljYXRjaChNaXNzaW5nUmVzb3VyY2VFeGNlcHRpb24gbXJlKSB7CisJCQkJRXhwZXJpbWVudGFsRWRpdG9yUGx1Z2luLklOU1RBTkNFLmxvZyhtcmUpOworCQkJfQorCQkJcmV0dXJuIHR5cGVOYW1lOworCQl9CisKKwkJLyoqCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlwcm90ZWN0ZWQgQ29sbGVjdGlvbjxTdHJpbmc+IGdldEVuY29kaW5ncygpIHsKKwkJCWlmIChlbmNvZGluZ3MgPT0gbnVsbCkgeworCQkJCWVuY29kaW5ncyA9IG5ldyBBcnJheUxpc3Q8U3RyaW5nPigpOworCQkJCWZvciAoU3RyaW5nVG9rZW5pemVyIHN0cmluZ1Rva2VuaXplciA9IG5ldyBTdHJpbmdUb2tlbml6ZXIoRXhwZXJpbWVudGFsRWRpdG9yUGx1Z2luLklOU1RBTkNFLmdldFN0cmluZygiX1VJX1hNTEVuY29kaW5nQ2hvaWNlcyIpKTsgc3RyaW5nVG9rZW5pemVyLmhhc01vcmVUb2tlbnMoKTsgKSB7CisJCQkJCWVuY29kaW5ncy5hZGQoc3RyaW5nVG9rZW5pemVyLm5leHRUb2tlbigpKTsKKwkJCQl9CisJCQl9CisJCQlyZXR1cm4gZW5jb2RpbmdzOworCQl9CisJfQorCisJLyoqCisJICogVGhlIGZyYW1ld29yayBjYWxscyB0aGlzIHRvIGNyZWF0ZSB0aGUgY29udGVudHMgb2YgdGhlIHdpemFyZC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwkJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgYWRkUGFnZXMoKSB7CisJCS8vIENyZWF0ZSBhIHBhZ2UsIHNldCB0aGUgdGl0bGUsIGFuZCB0aGUgaW5pdGlhbCBtb2RlbCBmaWxlIG5hbWUuCisJCS8vCisJCW5ld0ZpbGVDcmVhdGlvblBhZ2UgPSBuZXcgRXhwZXJpbWVudGFsTW9kZWxXaXphcmROZXdGaWxlQ3JlYXRpb25QYWdlKCJXaGF0ZXZlciIsIHNlbGVjdGlvbik7CisJCW5ld0ZpbGVDcmVhdGlvblBhZ2Uuc2V0VGl0bGUoRXhwZXJpbWVudGFsRWRpdG9yUGx1Z2luLklOU1RBTkNFLmdldFN0cmluZygiX1VJX0V4cGVyaW1lbnRhbE1vZGVsV2l6YXJkX2xhYmVsIikpOworCQluZXdGaWxlQ3JlYXRpb25QYWdlLnNldERlc2NyaXB0aW9uKEV4cGVyaW1lbnRhbEVkaXRvclBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoIl9VSV9FeHBlcmltZW50YWxNb2RlbFdpemFyZF9kZXNjcmlwdGlvbiIpKTsKKwkJbmV3RmlsZUNyZWF0aW9uUGFnZS5zZXRGaWxlTmFtZShFeHBlcmltZW50YWxFZGl0b3JQbHVnaW4uSU5TVEFOQ0UuZ2V0U3RyaW5nKCJfVUlfRXhwZXJpbWVudGFsRWRpdG9yRmlsZW5hbWVEZWZhdWx0QmFzZSIpICsgIi4iICsgRklMRV9FWFRFTlNJT05TLmdldCgwKSk7CisJCWFkZFBhZ2UobmV3RmlsZUNyZWF0aW9uUGFnZSk7CisKKwkJLy8gVHJ5IGFuZCBnZXQgdGhlIHJlc291cmNlIHNlbGVjdGlvbiB0byBkZXRlcm1pbmUgYSBjdXJyZW50IGRpcmVjdG9yeSBmb3IgdGhlIGZpbGUgZGlhbG9nLgorCQkvLworCQlpZiAoc2VsZWN0aW9uICE9IG51bGwgJiYgIXNlbGVjdGlvbi5pc0VtcHR5KCkpIHsKKwkJCS8vIEdldCB0aGUgcmVzb3VyY2UuLi4KKwkJCS8vCisJCQlPYmplY3Qgc2VsZWN0ZWRFbGVtZW50ID0gc2VsZWN0aW9uLml0ZXJhdG9yKCkubmV4dCgpOworCQkJaWYgKHNlbGVjdGVkRWxlbWVudCBpbnN0YW5jZW9mIElSZXNvdXJjZSkgeworCQkJCS8vIEdldCB0aGUgcmVzb3VyY2UgcGFyZW50LCBpZiBpdHMgYSBmaWxlLgorCQkJCS8vCisJCQkJSVJlc291cmNlIHNlbGVjdGVkUmVzb3VyY2UgPSAoSVJlc291cmNlKXNlbGVjdGVkRWxlbWVudDsKKwkJCQlpZiAoc2VsZWN0ZWRSZXNvdXJjZS5nZXRUeXBlKCkgPT0gSVJlc291cmNlLkZJTEUpIHsKKwkJCQkJc2VsZWN0ZWRSZXNvdXJjZSA9IHNlbGVjdGVkUmVzb3VyY2UuZ2V0UGFyZW50KCk7CisJCQkJfQorCisJCQkJLy8gVGhpcyBnaXZlcyB1cyBhIGRpcmVjdG9yeS4uLgorCQkJCS8vCisJCQkJaWYgKHNlbGVjdGVkUmVzb3VyY2UgaW5zdGFuY2VvZiBJRm9sZGVyIHx8IHNlbGVjdGVkUmVzb3VyY2UgaW5zdGFuY2VvZiBJUHJvamVjdCkgeworCQkJCQkvLyBTZXQgdGhpcyBmb3IgdGhlIGNvbnRhaW5lci4KKwkJCQkJLy8KKwkJCQkJbmV3RmlsZUNyZWF0aW9uUGFnZS5zZXRDb250YWluZXJGdWxsUGF0aChzZWxlY3RlZFJlc291cmNlLmdldEZ1bGxQYXRoKCkpOworCisJCQkJCS8vIE1ha2UgdXAgYSB1bmlxdWUgbmV3IG5hbWUgaGVyZS4KKwkJCQkJLy8KKwkJCQkJU3RyaW5nIGRlZmF1bHRNb2RlbEJhc2VGaWxlbmFtZSA9IEV4cGVyaW1lbnRhbEVkaXRvclBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoIl9VSV9FeHBlcmltZW50YWxFZGl0b3JGaWxlbmFtZURlZmF1bHRCYXNlIik7CisJCQkJCVN0cmluZyBkZWZhdWx0TW9kZWxGaWxlbmFtZUV4dGVuc2lvbiA9IEZJTEVfRVhURU5TSU9OUy5nZXQoMCk7CisJCQkJCVN0cmluZyBtb2RlbEZpbGVuYW1lID0gZGVmYXVsdE1vZGVsQmFzZUZpbGVuYW1lICsgIi4iICsgZGVmYXVsdE1vZGVsRmlsZW5hbWVFeHRlbnNpb247CisJCQkJCWZvciAoaW50IGkgPSAxOyAoKElDb250YWluZXIpc2VsZWN0ZWRSZXNvdXJjZSkuZmluZE1lbWJlcihtb2RlbEZpbGVuYW1lKSAhPSBudWxsOyArK2kpIHsKKwkJCQkJCW1vZGVsRmlsZW5hbWUgPSBkZWZhdWx0TW9kZWxCYXNlRmlsZW5hbWUgKyBpICsgIi4iICsgZGVmYXVsdE1vZGVsRmlsZW5hbWVFeHRlbnNpb247CisJCQkJCX0KKwkJCQkJbmV3RmlsZUNyZWF0aW9uUGFnZS5zZXRGaWxlTmFtZShtb2RlbEZpbGVuYW1lKTsKKwkJCQl9CisJCQl9CisJCX0KKwkJaW5pdGlhbE9iamVjdENyZWF0aW9uUGFnZSA9IG5ldyBFeHBlcmltZW50YWxNb2RlbFdpemFyZEluaXRpYWxPYmplY3RDcmVhdGlvblBhZ2UoIldoYXRldmVyMiIpOworCQlpbml0aWFsT2JqZWN0Q3JlYXRpb25QYWdlLnNldFRpdGxlKEV4cGVyaW1lbnRhbEVkaXRvclBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoIl9VSV9FeHBlcmltZW50YWxNb2RlbFdpemFyZF9sYWJlbCIpKTsKKwkJaW5pdGlhbE9iamVjdENyZWF0aW9uUGFnZS5zZXREZXNjcmlwdGlvbihFeHBlcmltZW50YWxFZGl0b3JQbHVnaW4uSU5TVEFOQ0UuZ2V0U3RyaW5nKCJfVUlfV2l6YXJkX2luaXRpYWxfb2JqZWN0X2Rlc2NyaXB0aW9uIikpOworCQlhZGRQYWdlKGluaXRpYWxPYmplY3RDcmVhdGlvblBhZ2UpOworCX0KKworCS8qKgorCSAqIEdldCB0aGUgZmlsZSBmcm9tIHRoZSBwYWdlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBJRmlsZSBnZXRNb2RlbEZpbGUoKSB7CisJCXJldHVybiBuZXdGaWxlQ3JlYXRpb25QYWdlLmdldE1vZGVsRmlsZSgpOworCX0KKworfQpkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMuZXhwZXJpbWVudGFsL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL2Rpc2Vhc2Vtb2RlbHMvZXhwZXJpbWVudGFsL2FkYXB0ZXJzL0V4cGVyaW1lbnRhbFJlbGF0aXZlVmFsdWVQcm92aWRlckFkYXB0ZXJGYWN0b3J5LmphdmEgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy5leHBlcmltZW50YWwvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvZGlzZWFzZW1vZGVscy9leHBlcmltZW50YWwvYWRhcHRlcnMvRXhwZXJpbWVudGFsUmVsYXRpdmVWYWx1ZVByb3ZpZGVyQWRhcHRlckZhY3RvcnkuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNWQ2OGZlCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMuZXhwZXJpbWVudGFsL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL2Rpc2Vhc2Vtb2RlbHMvZXhwZXJpbWVudGFsL2FkYXB0ZXJzL0V4cGVyaW1lbnRhbFJlbGF0aXZlVmFsdWVQcm92aWRlckFkYXB0ZXJGYWN0b3J5LmphdmEKQEAgLTAsMCArMSwyMzkgQEAKKy8vIFN0YW5kYXJkUmVsYXRpdmVWYWx1ZVByb3ZpZGVyQWRhcHRlckZhY3RvcnkuamF2YQorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMuZXhwZXJpbWVudGFsLmFkYXB0ZXJzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5BZGFwdGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRVJlZmVyZW5jZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRVN0cnVjdHVyYWxGZWF0dXJlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkNoYW5nZU5vdGlmaWVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkNvbXBvc2VhYmxlQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuQ29tcG9zZWRBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JQ2hhbmdlTm90aWZpZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1Qcm9wZXJ0eVNvdXJjZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JTm90aWZ5Q2hhbmdlZExpc3RlbmVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLnByb3ZpZGVyLlByb3BlcnR5U291cmNlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuYWRhcHRlcnMucmVsYXRpdmV2YWx1ZS5SZWxhdGl2ZVZhbHVlUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5hZGFwdGVycy5yZWxhdGl2ZXZhbHVlLlJlbGF0aXZlVmFsdWVQcm92aWRlckFkYXB0ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5hZGFwdGVycy5yZWxhdGl2ZXZhbHVlLlJlbGF0aXZlVmFsdWVQcm92aWRlckFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leHBlcmltZW50YWwucHJvdmlkZXIuRXhwZXJpbWVudGFsSXRlbVByb3ZpZGVyQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4cGVyaW1lbnRhbC51dGlsLkV4cGVyaW1lbnRhbEFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5EaXNlYXNlTW9kZWxMYWJlbFZhbHVlOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklTdGFydHVwOworCisvKioKKyAqIFRoaXMgY2xhc3MgaXMgYSBmYWN0b3J5IGZvciB0aGlzIG1vZGVsIHRoYXQgY3JlYXRlcworICoge0BsaW5rIFJlbGF0aXZlVmFsdWVQcm92aWRlcn0ncyBmb3IgY2xhc3NlcyBpbiB0aGUgbW9kZWwuCisgKi8KK3B1YmxpYyBjbGFzcyBFeHBlcmltZW50YWxSZWxhdGl2ZVZhbHVlUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSBleHRlbmRzCisJCUV4cGVyaW1lbnRhbEFkYXB0ZXJGYWN0b3J5IGltcGxlbWVudHMgUmVsYXRpdmVWYWx1ZVByb3ZpZGVyQWRhcHRlckZhY3RvcnksIElTdGFydHVwIHsKKwkKKwkvKioKKwkgKiBUaGlzIGtlZXBzIHRyYWNrIG9mIHRoZSByb290IGFkYXB0ZXIgZmFjdG9yeSB0aGF0IGRlbGVnYXRlcyB0byB0aGlzCisJICogYWRhcHRlciBmYWN0b3J5LgorCSAqLworCXByb3RlY3RlZCBDb21wb3NlZEFkYXB0ZXJGYWN0b3J5IHBhcmVudEFkYXB0ZXJGYWN0b3J5OworCisJLyoqCisJICogVGhpcyBpcyB1c2VkIHRvIGltcGxlbWVudAorCSAqIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JQ2hhbmdlTm90aWZpZXJ9LgorCSAqLworCXByb3RlY3RlZCBJQ2hhbmdlTm90aWZpZXIgY2hhbmdlTm90aWZpZXIgPSBuZXcgQ2hhbmdlTm90aWZpZXIoKTsKKworCS8qKgorCSAqIFRoaXMgZmFjdG9yeSBpcyB1c2VkIHRvIGNyZWF0ZSBpdGVtIHByb3ZpZGVycyBmb3IgdGhlIGFkYXB0ZWQgY2xhc3Nlcy4KKwkgKiBUaGUgaXRlbSBwcm92aWRlcnMgYXJlIHVzZWQgYXMgcHJvcGVydHkgc291cmNlcyB0byBnZXQgdGhlIHByb3BlcnRpZXMKKwkgKiB0aGF0IGNhbiBoYXZlIHJlbGF0aXZlIHZhbHVlcy4KKwkgKi8KKwlwcml2YXRlIHN0YXRpYyBFeHBlcmltZW50YWxJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSBpdGVtUHJvdmlkZXJGYWN0b3J5OworCisJLyoqCisJICogQ29uc3RydWN0b3IKKwkgKi8KKwlwdWJsaWMgRXhwZXJpbWVudGFsUmVsYXRpdmVWYWx1ZVByb3ZpZGVyQWRhcHRlckZhY3RvcnkoKSB7CisJCXN1cGVyKCk7CisJCVJlbGF0aXZlVmFsdWVQcm92aWRlckFkYXB0ZXJGYWN0b3J5LklOU1RBTkNFLmFkZEFkYXB0ZXJGYWN0b3J5KHRoaXMpOworCX0gLy8gRXhwZXJpbWVudGFsUmVsYXRpdmVWYWx1ZVByb3ZpZGVyQWRhcHRlckZhY3RvcnkKKworCS8qKgorCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4cGVyaW1lbnRhbC5UQkRpc2Vhc2VNb2RlbExhYmVsVmFsdWUgPGVtPlRCIERpc2Vhc2UgTW9kZWwgTGFiZWwgVmFsdWU8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOworCSAqIGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZSB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5LgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4cGVyaW1lbnRhbC5UQkRpc2Vhc2VNb2RlbExhYmVsVmFsdWUKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlVEJEaXNlYXNlTW9kZWxMYWJlbFZhbHVlQWRhcHRlcigpIHsKKwkJcmV0dXJuIG5ldyBFeHBlcmltZW50YWxEaXNlYXNlTW9kZWxMYWJlbFZhbHVlUmVsYXRpdmVWYWx1ZVByb3ZpZGVyKCk7CisJfQorCQorCisJCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JQ2hhbmdlTm90aWZpZXIjYWRkTGlzdGVuZXIob3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSU5vdGlmeUNoYW5nZWRMaXN0ZW5lcikKKwkgKi8KKwlwdWJsaWMgdm9pZCBhZGRMaXN0ZW5lcihJTm90aWZ5Q2hhbmdlZExpc3RlbmVyIG5vdGlmeUNoYW5nZWRMaXN0ZW5lcikgeworCQljaGFuZ2VOb3RpZmllci5hZGRMaXN0ZW5lcihub3RpZnlDaGFuZ2VkTGlzdGVuZXIpOworCX0gLy8gYWRkTGlzdGVuZXIKKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUNoYW5nZU5vdGlmaWVyI2ZpcmVOb3RpZnlDaGFuZ2VkKG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbikKKwkgKi8KKwlwdWJsaWMgdm9pZCBmaXJlTm90aWZ5Q2hhbmdlZChOb3RpZmljYXRpb24gbm90aWZpY2F0aW9uKSB7CisJCWNoYW5nZU5vdGlmaWVyLmZpcmVOb3RpZnlDaGFuZ2VkKG5vdGlmaWNhdGlvbik7CisJCWlmIChwYXJlbnRBZGFwdGVyRmFjdG9yeSAhPSBudWxsKSB7CisJCQlwYXJlbnRBZGFwdGVyRmFjdG9yeS5maXJlTm90aWZ5Q2hhbmdlZChub3RpZmljYXRpb24pOworCQl9CisJfSAvLyBmaXJlTm90aWZ5Q2hhbmdlZAorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JQ2hhbmdlTm90aWZpZXIjcmVtb3ZlTGlzdGVuZXIob3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSU5vdGlmeUNoYW5nZWRMaXN0ZW5lcikKKwkgKi8KKwlwdWJsaWMgdm9pZCByZW1vdmVMaXN0ZW5lcihJTm90aWZ5Q2hhbmdlZExpc3RlbmVyIG5vdGlmeUNoYW5nZWRMaXN0ZW5lcikgeworCQljaGFuZ2VOb3RpZmllci5yZW1vdmVMaXN0ZW5lcihub3RpZnlDaGFuZ2VkTGlzdGVuZXIpOworCX0gLy8gcmVtb3ZlTGlzdGVuZXIKKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSNnZXRSb290QWRhcHRlckZhY3RvcnkoKQorCSAqLworCXB1YmxpYyBDb21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5IGdldFJvb3RBZGFwdGVyRmFjdG9yeSgpIHsKKwkJcmV0dXJuIHBhcmVudEFkYXB0ZXJGYWN0b3J5ID09IG51bGwgPyB0aGlzIDogcGFyZW50QWRhcHRlckZhY3RvcnkKKwkJCQkuZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCk7CisJfSAvLyBnZXRSb290QWRhcHRlckZhY3RvcnkKKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSNzZXRQYXJlbnRBZGFwdGVyRmFjdG9yeShvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5Db21wb3NlZEFkYXB0ZXJGYWN0b3J5KQorCSAqLworCXB1YmxpYyB2b2lkIHNldFBhcmVudEFkYXB0ZXJGYWN0b3J5KAorCQkJQ29tcG9zZWRBZGFwdGVyRmFjdG9yeSBwYXJlbnRBZGFwdGVyRmFjdG9yeSkgeworCQl0aGlzLnBhcmVudEFkYXB0ZXJGYWN0b3J5ID0gcGFyZW50QWRhcHRlckZhY3Rvcnk7CisJfSAvLyBzZXRQYXJlbnRBZGFwdGVyRmFjdG9yeQorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQudXRpbC5TdGFuZGFyZEFkYXB0ZXJGYWN0b3J5I2lzRmFjdG9yeUZvclR5cGUoamF2YS5sYW5nLk9iamVjdCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgYm9vbGVhbiBpc0ZhY3RvcnlGb3JUeXBlKE9iamVjdCB0eXBlKSB7CisJCXJldHVybiB0eXBlID09IFJlbGF0aXZlVmFsdWVQcm92aWRlci5jbGFzcworCQkJCXx8IHN1cGVyLmlzRmFjdG9yeUZvclR5cGUodHlwZSk7CisJfSAvLyBpc0ZhY3RvcnlGb3JUeXBlCisKKwkvKioKKwkgKiBUaGlzIGRpc3Bvc2VzIGFsbCBvZiB0aGUgaXRlbSBwcm92aWRlcnMgY3JlYXRlZCBieSB0aGlzIGZhY3RvcnkuCisJICogCisJICogQHNlZSBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JRGlzcG9zYWJsZSNkaXNwb3NlKCkKKwkgKi8KKwlwdWJsaWMgdm9pZCBkaXNwb3NlKCkgeworCQkvLyBOb3RoaW5nCisJfSAvLyBkaXNwb3NlCisKKwkvKioKKwkgKiBAcmV0dXJuIHRoZSBpbnN0YW5jZSBvZiB0aGUgUmVsYXRpdmUgVmFsdWUgUHJvdmlkZXIgQWRhcHRlciBGYWN0b3J5CisJICovCisJcHJpdmF0ZSBzdGF0aWMgUmVsYXRpdmVWYWx1ZVByb3ZpZGVyQWRhcHRlckZhY3RvcnkgZ2V0UmVsYXRpdmVWYWx1ZVByb3ZpZGVyQWRhcHRlckZhY3RvcnkoKSB7CisJCXJldHVybiBSZWxhdGl2ZVZhbHVlUHJvdmlkZXJBZGFwdGVyRmFjdG9yeS5JTlNUQU5DRTsKKwl9IC8vIGdldFJlbGF0aXZlVmFsdWVQcm92aWRlckFkYXB0ZXJGYWN0b3J5CisKKwkKKwlwdWJsaWMgdm9pZCBlYXJseVN0YXJ0dXAoKSB7CisJCS8vIERvbmUKKwl9CisJCisJLyoqCisJICogQHJldHVybiB0aGUgaW5zdGFuY2Ugb2YgdGhlIFN0YW5kYXJkIEl0ZW0gUHJvdmlkZXIgZmFjdG9yeS4KKwkgKi8KKwlwcml2YXRlIHN0YXRpYyBFeHBlcmltZW50YWxJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSBnZXRJdGVtUHJvdmlkZXJGYWN0b3J5KCkgeworCQlpZiAoaXRlbVByb3ZpZGVyRmFjdG9yeSA9PSBudWxsKSB7CisJCQlpdGVtUHJvdmlkZXJGYWN0b3J5ID0gbmV3IEV4cGVyaW1lbnRhbEl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5KCk7CisJCX0KKwkJcmV0dXJuIGl0ZW1Qcm92aWRlckZhY3Rvcnk7CisJfSAvLyBnZXRJdGVtUHJvdmlkZXJGYWN0b3J5CisJCisJcHVibGljIHN0YXRpYyBjbGFzcyBFeHBlcmltZW50YWxEaXNlYXNlTW9kZWxMYWJlbFZhbHVlUmVsYXRpdmVWYWx1ZVByb3ZpZGVyIGV4dGVuZHMKKwlSZWxhdGl2ZVZhbHVlUHJvdmlkZXJBZGFwdGVyIGltcGxlbWVudHMgUmVsYXRpdmVWYWx1ZVByb3ZpZGVyIHsKKworCQkvKioKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmFkYXB0ZXJzLnJlbGF0aXZldmFsdWUuUmVsYXRpdmVWYWx1ZVByb3ZpZGVyQWRhcHRlciNnZXRQcm9wZXJ0aWVzKCkKKwkJICovCisJCUBPdmVycmlkZQorCQlwdWJsaWMgTGlzdDxJSXRlbVByb3BlcnR5RGVzY3JpcHRvcj4gZ2V0UHJvcGVydGllcygpIHsKKwkJCWZpbmFsIExpc3Q8SUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I+IHJldFZhbHVlID0gbmV3IEFycmF5TGlzdDxJSXRlbVByb3BlcnR5RGVzY3JpcHRvcj4oKTsKKwkJCWZpbmFsIEV4cGVyaW1lbnRhbEl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5IGl0ZW1Qcm92aWRlckZhY3RvcnkgPSBnZXRJdGVtUHJvdmlkZXJGYWN0b3J5KCk7CisJCQlmaW5hbCBEaXNlYXNlTW9kZWxMYWJlbFZhbHVlIGRtbHYgPSAoRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZSkgZ2V0VGFyZ2V0KCk7CisJCQlmaW5hbCBJSXRlbVByb3BlcnR5U291cmNlIHByb3BlcnR5U291cmNlID0gKElJdGVtUHJvcGVydHlTb3VyY2UpIGl0ZW1Qcm92aWRlckZhY3RvcnkKKwkJCQkJLmFkYXB0KGRtbHYsIFByb3BlcnR5U291cmNlLmNsYXNzKTsKKwkJCWZpbmFsIExpc3Q8SUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I+IHByb3BlcnRpZXMgPSBwcm9wZXJ0eVNvdXJjZQorCQkJCQkuZ2V0UHJvcGVydHlEZXNjcmlwdG9ycyhudWxsKTsKKwkJCS8vIFRoZSBsaXN0IG9mIHByb3BlcnR5IGRlc2NyaXB0b3JzIGluY2x1ZGVzIG9uZXMgdGhhdCBkbyBub3QgaGF2ZQorCQkJLy8gcmVsYXRpdmUgdmFsdWVzLiBXZSBmaWx0ZXIgdGhvc2Ugb3V0IGhlcmUgYW5kIHJldHVybiB0aGUgcmVzdC4KKwkJCWZvciAoSUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IgZGVzY3JpcHRvciA6IHByb3BlcnRpZXMpIHsKKwkJCQkvLyBEb2VzIHRoaXMgcHJvcGVydHkgaGF2ZSBhIHJlbGF0aXZlIHZhbHVlPworCQkJCWZpbmFsIEVTdHJ1Y3R1cmFsRmVhdHVyZSBmZWF0dXJlID0gKEVTdHJ1Y3R1cmFsRmVhdHVyZSkgZGVzY3JpcHRvcgorCQkJCQkJLmdldEZlYXR1cmUobnVsbCk7CisJCQkJCisJCQkJaWYoZmVhdHVyZSBpbnN0YW5jZW9mIEVSZWZlcmVuY2UpIGNvbnRpbnVlOworCQkJCWZpbmFsIGludCBmZWF0dXJlSWQgPSBmZWF0dXJlLmdldEZlYXR1cmVJRCgpOworCQkJCQorCQkJCQorCQkJCS8vIG5ldworCQkJCXJldFZhbHVlLmFkZChkZXNjcmlwdG9yKTsKKwkJCQkvLyBPbGQKKwkJCQkvKgorCQkJCWlmICghKGZlYXR1cmVJZCA9PSBTdGFuZGFyZFBhY2thZ2UuRElTRUFTRV9NT0RFTF9MQUJFTF9WQUxVRV9fQklSVEhTCisJCQkJCQl8fCBmZWF0dXJlSWQgPT0gU3RhbmRhcmRQYWNrYWdlLkRJU0VBU0VfTU9ERUxfTEFCRUxfVkFMVUVfX0RFQVRIUworCQkJCQkJfHwgZmVhdHVyZUlkID09IFN0YW5kYXJkUGFja2FnZS5ESVNFQVNFX01PREVMX0xBQkVMX1ZBTFVFX19ESVNFQVNFX0RFQVRIUyB8fCBmZWF0dXJlSWQgPT0gU3RhbmRhcmRQYWNrYWdlLkRJU0VBU0VfTU9ERUxfTEFCRUxfVkFMVUVfX1BPUFVMQVRJT05fQ09VTlQpKSB7CisJCQkJCS8vIFllcworCQkJCQlyZXRWYWx1ZS5hZGQoZGVzY3JpcHRvcik7CisJCQkJfSAvLyBpZiBoYXMgcmVsYXRpdmUgdmFsdWUKKwkJCQkqLworCQkJCQorCQkJfSAvLyBmb3IKKwkJCXJldHVybiByZXRWYWx1ZTsKKwkJfSAvLyBnZXRQcm9wZXJ0aWVzCisJCQorCQkvKioKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmFkYXB0ZXJzLnJlbGF0aXZldmFsdWUuUmVsYXRpdmVWYWx1ZVByb3ZpZGVyI2dldFJlbGF0aXZlVmFsdWUoRVN0cnVjdHVyYWxGZWF0dXJlKQorCQkgKi8KKwkJcHVibGljIGRvdWJsZSBnZXRSZWxhdGl2ZVZhbHVlKGZpbmFsIEVTdHJ1Y3R1cmFsRmVhdHVyZSBmZWF0dXJlKSB7CisJCQlmaW5hbCBEaXNlYXNlTW9kZWxMYWJlbFZhbHVlIGRtbHYgPSAoRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZSkgZ2V0VGFyZ2V0KCk7CisJCQlmaW5hbCBkb3VibGUgc3RhdGVDb3VudCA9ICgoRG91YmxlKSBkbWx2LmVHZXQoZmVhdHVyZSkpCisJCQkJCS5kb3VibGVWYWx1ZSgpOworCQkJZmluYWwgZG91YmxlIHBvcHVsYXRpb25Db3VudCA9IGRtbHYuZ2V0UG9wdWxhdGlvbkNvdW50KCk7CisJCQlmaW5hbCBkb3VibGUgcmV0VmFsdWUgPSBwb3B1bGF0aW9uQ291bnQgPD0gMC4wID8gMC4wCisJCQkJCTogKHN0YXRlQ291bnQgLyBwb3B1bGF0aW9uQ291bnQpOworCQkJcmV0dXJuIHJldFZhbHVlOworCQl9IC8vIGdldFJlbGF0aXZlVmFsdWUKKwkJCisJCS8qKgorCQkgKiBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSBkZW5vbWluYXRvciBvciBzY2FsZSB1c2VkIHRvIGNvbnZlcnQgdG8gcmVsYXRpdmUKKwkJICogdmFsdWVzIGluIHRoZSByYW5nZSAwLTEuIEZvciBleGFtcGxlLCBpbiBhbiBFcGlkZW1pYyBDb21wYXJ0bWVudCBtb2RlbAorCQkgKiB0aGUgc3RhdGUgdmFsdWVzIGFyZSBub3JtYWxpemVkIGJ5IHBvcHVsYXRpb24uCisJCSAqIEl0IGlzIHJlcXVpcmVkIHdoZW5ldmVyIHdlIG5lZWQgdG8gc3dpdGNoIGJldHdlZW4gcmVsYXRpdmUgYW5kIGFic29sdXRlIHZhbHVlcworCQkgKiBvciBjYW4gYmUgdXNlZCB0byBjcmVhdGUgYSBsYWJlbCBzaG93aW5nIHRoZSBtYXhpbXVtIHNjYWxlIGZvciBhbnkgcmVsYXRpdmUgdmFsdWUuCisJCSAqIEByZXR1cm4gdGhlIGRlbm9taW5hdG9yIG9yIHNjYWxlIHVzZWQgdG8gbm9ybWFsaXplIHRoZSByZWxhdGl2ZSB2YWx1ZQorCQkgKi8KKwkJcHVibGljIGRvdWJsZSBnZXREZW5vbWluYXRvcihmaW5hbCBFU3RydWN0dXJhbEZlYXR1cmUgZmVhdHVyZSkgeworCQkJZmluYWwgRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZSBkbWx2ID0gKERpc2Vhc2VNb2RlbExhYmVsVmFsdWUpIGdldFRhcmdldCgpOworCQkJLy9maW5hbCBkb3VibGUgcG9wdWxhdGlvbkNvdW50ID0gZG1sdi5nZXRQb3B1bGF0aW9uQ291bnQoKTsKKwkJCXJldHVybiBkbWx2LmdldFBvcHVsYXRpb25Db3VudCgpOworCQl9CisJCisJfSAvLyBEaXNlYXNlTW9kZWxMYWJlbFZhbHVlUmVsYXRpdmVWYWx1ZVByb3ZpZGVyCisJCit9IC8vIFN0YW5kYXJkUmVsYXRpdmVWYWx1ZVByb3ZpZGVyQWRhcHRlckZhY3RvcnkKZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzLmV4dGVybmFsZGF0YXNvdXJjZS8uY2xhc3NwYXRoIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMuZXh0ZXJuYWxkYXRhc291cmNlLy5jbGFzc3BhdGgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzA0ZTg2MQotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzLmV4dGVybmFsZGF0YXNvdXJjZS8uY2xhc3NwYXRoCkBAIC0wLDAgKzEsNyBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxjbGFzc3BhdGg+CisJPGNsYXNzcGF0aGVudHJ5IGtpbmQ9InNyYyIgcGF0aD0ic3JjIi8+CisJPGNsYXNzcGF0aGVudHJ5IGtpbmQ9ImNvbiIgcGF0aD0ib3JnLmVjbGlwc2UuamR0LmxhdW5jaGluZy5KUkVfQ09OVEFJTkVSL29yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC5kZWJ1Zy51aS5sYXVuY2hlci5TdGFuZGFyZFZNVHlwZS9KMlNFLTEuNSIvPgorCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJjb24iIHBhdGg9Im9yZy5lY2xpcHNlLnBkZS5jb3JlLnJlcXVpcmVkUGx1Z2lucyIvPgorCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJvdXRwdXQiIHBhdGg9ImJpbiIvPgorPC9jbGFzc3BhdGg+CmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy5leHRlcm5hbGRhdGFzb3VyY2UvLnByb2plY3QgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy5leHRlcm5hbGRhdGFzb3VyY2UvLnByb2plY3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzU5YjAzMAotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzLmV4dGVybmFsZGF0YXNvdXJjZS8ucHJvamVjdApAQCAtMCwwICsxLDI4IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPHByb2plY3REZXNjcmlwdGlvbj4KKwk8bmFtZT5vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMuZXh0ZXJuYWxkYXRhc291cmNlPC9uYW1lPgorCTxjb21tZW50PjwvY29tbWVudD4KKwk8cHJvamVjdHM+CisJPC9wcm9qZWN0cz4KKwk8YnVpbGRTcGVjPgorCQk8YnVpbGRDb21tYW5kPgorCQkJPG5hbWU+b3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YWJ1aWxkZXI8L25hbWU+CisJCQk8YXJndW1lbnRzPgorCQkJPC9hcmd1bWVudHM+CisJCTwvYnVpbGRDb21tYW5kPgorCQk8YnVpbGRDb21tYW5kPgorCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLk1hbmlmZXN0QnVpbGRlcjwvbmFtZT4KKwkJCTxhcmd1bWVudHM+CisJCQk8L2FyZ3VtZW50cz4KKwkJPC9idWlsZENvbW1hbmQ+CisJCTxidWlsZENvbW1hbmQ+CisJCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuU2NoZW1hQnVpbGRlcjwvbmFtZT4KKwkJCTxhcmd1bWVudHM+CisJCQk8L2FyZ3VtZW50cz4KKwkJPC9idWlsZENvbW1hbmQ+CisJPC9idWlsZFNwZWM+CisJPG5hdHVyZXM+CisJCTxuYXR1cmU+b3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YW5hdHVyZTwvbmF0dXJlPgorCQk8bmF0dXJlPm9yZy5lY2xpcHNlLnBkZS5QbHVnaW5OYXR1cmU8L25hdHVyZT4KKwk8L25hdHVyZXM+Cis8L3Byb2plY3REZXNjcmlwdGlvbj4KZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzLmV4dGVybmFsZGF0YXNvdXJjZS8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy5leHRlcm5hbGRhdGFzb3VyY2UvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRiZTEwMjYKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy5leHRlcm5hbGRhdGFzb3VyY2UvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzCkBAIC0wLDAgKzEsMTIgQEAKKyNUdWUgU2VwIDIzIDA5OjM2OjM4IEVEVCAyMDA4CitlY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29kZWdlbi5pbmxpbmVKc3JCeXRlY29kZT1lbmFibGVkCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb2RlZ2VuLnRhcmdldFBsYXRmb3JtPTEuNQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29kZWdlbi51bnVzZWRMb2NhbD1wcmVzZXJ2ZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29tcGxpYW5jZT0xLjUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmRlYnVnLmxpbmVOdW1iZXI9Z2VuZXJhdGUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmRlYnVnLmxvY2FsVmFyaWFibGU9Z2VuZXJhdGUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmRlYnVnLnNvdXJjZUZpbGU9Z2VuZXJhdGUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uYXNzZXJ0SWRlbnRpZmllcj1lcnJvcgorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5lbnVtSWRlbnRpZmllcj1lcnJvcgorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuc291cmNlPTEuNQpkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMuZXh0ZXJuYWxkYXRhc291cmNlL01FVEEtSU5GL01BTklGRVNULk1GIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMuZXh0ZXJuYWxkYXRhc291cmNlL01FVEEtSU5GL01BTklGRVNULk1GCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI1ODFmNzQKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy5leHRlcm5hbGRhdGFzb3VyY2UvTUVUQS1JTkYvTUFOSUZFU1QuTUYKQEAgLTAsMCArMSwxNiBAQAorTWFuaWZlc3QtVmVyc2lvbjogMS4wCitCdW5kbGUtTWFuaWZlc3RWZXJzaW9uOiAyCitCdW5kbGUtTmFtZTogJXBsdWdpbk5hbWUKK0J1bmRsZS1TeW1ib2xpY05hbWU6IG9yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy5leHRlcm5hbGRhdGFzb3VyY2U7c2luZ2xldG9uOj10cnVlCitCdW5kbGUtVmVyc2lvbjogMS4yLjEKK0J1bmRsZS1DbGFzc1BhdGg6IC4KK0J1bmRsZS1BY3RpdmF0b3I6IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leHRlcm5hbGRhdGFzb3VyY2UucHJlc2VudGF0aW9uLkV4dGVybmFsRGF0YVNvdXJjZUVkaXRvclBsdWdpbiRJbXBsZW1lbnRhdGlvbgorQnVuZGxlLVZlbmRvcjogJXByb3ZpZGVyTmFtZQorQnVuZGxlLUxvY2FsaXphdGlvbjogcGx1Z2luCitCdW5kbGUtUmVxdWlyZWRFeGVjdXRpb25FbnZpcm9ubWVudDogSjJTRS0xLjUKK0V4cG9ydC1QYWNrYWdlOiBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXh0ZXJuYWxkYXRhc291cmNlLnByZXNlbnRhdGlvbgorUmVxdWlyZS1CdW5kbGU6IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leHRlcm5hbGRhdGFzb3VyY2U7dmlzaWJpbGl0eTo9cmVleHBvcnQsCisgb3JnLmVjbGlwc2Uuc3RlbS51dGlsLmxvZ2dlcnMsCisgb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzLAorIG9yZy5lY2xpcHNlLnN0ZW0udWkKK0J1bmRsZS1BY3RpdmF0aW9uUG9saWN5OiBsYXp5CmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy5leHRlcm5hbGRhdGFzb3VyY2UvYnVpbGQucHJvcGVydGllcyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzLmV4dGVybmFsZGF0YXNvdXJjZS9idWlsZC5wcm9wZXJ0aWVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQxZTZjYjAKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy5leHRlcm5hbGRhdGFzb3VyY2UvYnVpbGQucHJvcGVydGllcwpAQCAtMCwwICsxLDE3IEBACisKKyMgPGNvcHlyaWdodD4KKyMgPC9jb3B5cmlnaHQ+CisjCisjICRJZDogYnVpbGQucHJvcGVydGllcyx2IDEuMSAyMDA4LzAzLzE4IDA0OjUxOjU3IGprYXVmbWFuIEV4cCAkCisKK2Jpbi5pbmNsdWRlcyA9IC4sXAorICAgICAgICAgICAgICAgaWNvbnMvLFwKKyAgICAgICAgICAgICAgIE1FVEEtSU5GLyxcCisgICAgICAgICAgICAgICBwbHVnaW4ueG1sLFwKKyAgICAgICAgICAgICAgIHBsdWdpbi5wcm9wZXJ0aWVzLFwKKyAgICAgICAgICAgICAgIHBsdWdpbl9kZS5wcm9wZXJ0aWVzLFwKKyAgICAgICAgICAgICAgIHBsdWdpbl9rci5wcm9wZXJ0aWVzLFwKKyAgICAgICAgICAgICAgIHBsdWdpbl96aC5wcm9wZXJ0aWVzCitqYXJzLmNvbXBpbGUub3JkZXIgPSAuCitzb3VyY2UuLiA9IHNyYy8KK291dHB1dC4uID0gYmluLwpkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMuZXh0ZXJuYWxkYXRhc291cmNlL2ljb25zL2Z1bGwvb2JqMTYvRXh0ZXJuYWxEYXRhU291cmNlTW9kZWxGaWxlLmdpZiBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzLmV4dGVybmFsZGF0YXNvdXJjZS9pY29ucy9mdWxsL29iajE2L0V4dGVybmFsRGF0YVNvdXJjZU1vZGVsRmlsZS5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGE5NDQxMAotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzLmV4dGVybmFsZGF0YXNvdXJjZS9pY29ucy9mdWxsL29iajE2L0V4dGVybmFsRGF0YVNvdXJjZU1vZGVsRmlsZS5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMuZXh0ZXJuYWxkYXRhc291cmNlL2ljb25zL2Z1bGwvd2l6YmFuL05ld0V4dGVybmFsRGF0YVNvdXJjZS5naWYgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy5leHRlcm5hbGRhdGFzb3VyY2UvaWNvbnMvZnVsbC93aXpiYW4vTmV3RXh0ZXJuYWxEYXRhU291cmNlLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MmM4Yjc1Ci0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMuZXh0ZXJuYWxkYXRhc291cmNlL2ljb25zL2Z1bGwvd2l6YmFuL05ld0V4dGVybmFsRGF0YVNvdXJjZS5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMuZXh0ZXJuYWxkYXRhc291cmNlL3BsdWdpbi5wcm9wZXJ0aWVzIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMuZXh0ZXJuYWxkYXRhc291cmNlL3BsdWdpbi5wcm9wZXJ0aWVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlkZTEzZGYKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy5leHRlcm5hbGRhdGFzb3VyY2UvcGx1Z2luLnByb3BlcnRpZXMKQEAgLTAsMCArMSw2OCBAQAorCisjIDxjb3B5cmlnaHQ+CisjIDwvY29weXJpZ2h0PgorIworIyAkSWQ6IHBsdWdpbi5wcm9wZXJ0aWVzLHYgMS4xIDIwMDgvMDMvMTggMDQ6NTE6NTcgamthdWZtYW4gRXhwICQKKworIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorIyBUbyBjb2RlIGRldmVsb3BlcjoKKyMgICBEbyBOT1QgY2hhbmdlIHRoZSBwcm9wZXJ0aWVzIGJldHdlZW4gdGhpcyBsaW5lIGFuZCB0aGUKKyMgICAiJSUlIEVORCBPRiBUUkFOU0xBVEVEIFBST1BFUlRJRVMgJSUlIiBsaW5lLgorIyAgIE1ha2UgYSBuZXcgcHJvcGVydHkgbmFtZSwgYXBwZW5kIHRvIHRoZSBlbmQgb2YgdGhlIGZpbGUgYW5kIGNoYW5nZQorIyAgIHRoZSBjb2RlIHRvIHVzZSB0aGUgbmV3IHByb3BlcnR5LgorIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisjICUlJSBFTkQgT0YgVFJBTlNMQVRFRCBQUk9QRVJUSUVTICUlJQorIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitwbHVnaW5OYW1lID0gU1RFTSBFeHRlcm5hbCBEYXRhIFNvdXJjZSBEaXNlYXNlIE1vZGVsIFVJCitwcm92aWRlck5hbWUgPSBFY2xpcHNlLm9yZworCitfVUlfRXh0ZXJuYWxEYXRhU291cmNlRWRpdG9yX21lbnUgPSAmRXh0ZXJuYWxEYXRhU291cmNlIEVkaXRvcgorCitfVUlfQ3JlYXRlQ2hpbGRfbWVudV9pdGVtID0gJk5ldyBDaGlsZAorX1VJX0NyZWF0ZVNpYmxpbmdfbWVudV9pdGVtID0gTiZldyBTaWJsaW5nCisKK19VSV9TaG93UHJvcGVydGllc1ZpZXdfbWVudV9pdGVtID0gU2hvdyAmUHJvcGVydGllcyBWaWV3CitfVUlfUmVmcmVzaFZpZXdlcl9tZW51X2l0ZW0gPSAmUmVmcmVzaAorCitfVUlfU2VsZWN0aW9uUGFnZV9sYWJlbCA9IFNlbGVjdGlvbgorX1VJX1BhcmVudFBhZ2VfbGFiZWwgPSBQYXJlbnQKK19VSV9MaXN0UGFnZV9sYWJlbCA9IExpc3QKK19VSV9UcmVlUGFnZV9sYWJlbCA9IFRyZWUKK19VSV9UYWJsZVBhZ2VfbGFiZWwgPSBUYWJsZQorX1VJX1RyZWVXaXRoQ29sdW1uc1BhZ2VfbGFiZWwgPSBUcmVlIHdpdGggQ29sdW1ucworX1VJX09iamVjdENvbHVtbl9sYWJlbCA9IE9iamVjdAorX1VJX1NlbGZDb2x1bW5fbGFiZWwgPSBTZWxmCisKK19VSV9Ob09iamVjdFNlbGVjdGVkID0gU2VsZWN0ZWQgTm90aGluZworX1VJX1NpbmdsZU9iamVjdFNlbGVjdGVkID0gU2VsZWN0ZWQgT2JqZWN0OiB7MH0KK19VSV9NdWx0aU9iamVjdFNlbGVjdGVkID0gU2VsZWN0ZWQgezB9IE9iamVjdHMKKworX1VJX09wZW5FZGl0b3JFcnJvcl9sYWJlbCA9IE9wZW4gRWRpdG9yCisKK19VSV9XaXphcmRfY2F0ZWdvcnkgPSBFeGFtcGxlIEVNRiBNb2RlbCBDcmVhdGlvbiBXaXphcmRzCisKK19VSV9DcmVhdGVNb2RlbEVycm9yX21lc3NhZ2UgPSBQcm9ibGVtcyBlbmNvdW50ZXJlZCBpbiBmaWxlICJ7MH0iCisKK19VSV9FeHRlcm5hbERhdGFTb3VyY2VNb2RlbFdpemFyZF9sYWJlbCA9IEV4dGVybmFsRGF0YVNvdXJjZSBNb2RlbAorX1VJX0V4dGVybmFsRGF0YVNvdXJjZU1vZGVsV2l6YXJkX2Rlc2NyaXB0aW9uID0gQ3JlYXRlIGEgbmV3IEV4dGVybmFsRGF0YVNvdXJjZSBtb2RlbAorCitfVUlfRXh0ZXJuYWxEYXRhU291cmNlRWRpdG9yX2xhYmVsID0gRXh0ZXJuYWxEYXRhU291cmNlIE1vZGVsIEVkaXRvcgorCitfVUlfRXh0ZXJuYWxEYXRhU291cmNlRWRpdG9yRmlsZW5hbWVEZWZhdWx0QmFzZSA9IE15CitfVUlfRXh0ZXJuYWxEYXRhU291cmNlRWRpdG9yRmlsZW5hbWVFeHRlbnNpb24gPSBleHRlcm5hbGRhdGFzb3VyY2UKKworX1VJX1dpemFyZF9sYWJlbCA9IE5ldworCitfV0FSTl9GaWxlbmFtZUV4dGVuc2lvbiA9IFRoZSBmaWxlIG5hbWUgbXVzdCBlbmQgaW4gIi57MH0iCisKK19VSV9Nb2RlbE9iamVjdCA9ICZNb2RlbCBPYmplY3QKK19VSV9YTUxFbmNvZGluZyA9ICZYTUwgRW5jb2RpbmcKK19VSV9YTUxFbmNvZGluZ0Nob2ljZXMgPSBVVEYtOCBBU0NJSSBVVEYtMTYgVVRGLTE2QkUgVVRGLTE2TEUgSVNPLTg4NTktMQorX1VJX1dpemFyZF9pbml0aWFsX29iamVjdF9kZXNjcmlwdGlvbiA9IFNlbGVjdCBhIG1vZGVsIG9iamVjdCB0byBjcmVhdGUKKworX1VJX0ZpbGVDb25mbGljdF9sYWJlbCA9IEZpbGUgQ29uZmxpY3QKK19XQVJOX0ZpbGVDb25mbGljdCA9IFRoZXJlIGFyZSB1bnNhdmVkIGNoYW5nZXMgdGhhdCBjb25mbGljdCB3aXRoIGNoYW5nZXMgbWFkZSBvdXRzaWRlIHRoZSBlZGl0b3IuICBEbyB5b3Ugd2lzaCB0byBkaXNjYXJkIHRoaXMgZWRpdG9yJ3MgY2hhbmdlcz8KKwpkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMuZXh0ZXJuYWxkYXRhc291cmNlL3BsdWdpbi54bWwgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy5leHRlcm5hbGRhdGFzb3VyY2UvcGx1Z2luLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zM2JiYmI1Ci0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMuZXh0ZXJuYWxkYXRhc291cmNlL3BsdWdpbi54bWwKQEAgLTAsMCArMSw0NiBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzw/ZWNsaXBzZSB2ZXJzaW9uPSIzLjAiPz4KKworPCEtLQorIDxjb3B5cmlnaHQ+CisgPC9jb3B5cmlnaHQ+CisKKyAkSWQ6IHBsdWdpbi54bWwsdiAxLjEgMjAwOC8wMy8xOCAwNDo1MTo1NyBqa2F1Zm1hbiBFeHAgJAorLS0+CisKKzxwbHVnaW4+CisKKworICA8ZXh0ZW5zaW9uCisgICAgcG9pbnQgPSAib3JnLmVjbGlwc2UudWkubmV3V2l6YXJkcyI+CisgICAgPGNhdGVnb3J5CisgICAgICBpZCA9ICJvcmcuZWNsaXBzZS5lbWYuZWNvcmUuV2l6YXJkLmNhdGVnb3J5LklEIgorICAgICAgbmFtZT0iJV9VSV9XaXphcmRfY2F0ZWdvcnkiPgorICAgIDwvY2F0ZWdvcnk+CisgICAgPHdpemFyZAorICAgICAgaWQgPSAib3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4dGVybmFsZGF0YXNvdXJjZS5wcmVzZW50YXRpb24uRXh0ZXJuYWxEYXRhU291cmNlTW9kZWxXaXphcmRJRCIKKyAgICAgIG5hbWUgPSAiJV9VSV9FeHRlcm5hbERhdGFTb3VyY2VNb2RlbFdpemFyZF9sYWJlbCIKKyAgICAgIGNsYXNzID0gIm9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leHRlcm5hbGRhdGFzb3VyY2UucHJlc2VudGF0aW9uLkV4dGVybmFsRGF0YVNvdXJjZU1vZGVsV2l6YXJkIgorICAgICAgY2F0ZWdvcnkgPSAib3JnLmVjbGlwc2UuZW1mLmVjb3JlLldpemFyZC5jYXRlZ29yeS5JRCIKKyAgICAgIGljb24gPSAiaWNvbnMvZnVsbC9vYmoxNi9FeHRlcm5hbERhdGFTb3VyY2VNb2RlbEZpbGUuZ2lmIj4KKyAgICAgIDxkZXNjcmlwdGlvbj4lX1VJX0V4dGVybmFsRGF0YVNvdXJjZU1vZGVsV2l6YXJkX2Rlc2NyaXB0aW9uPC9kZXNjcmlwdGlvbj4KKyAgICAgIDxzZWxlY3Rpb24gY2xhc3MgPSAib3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVJlc291cmNlIiAvPgorICAgIDwvd2l6YXJkPgorICA8L2V4dGVuc2lvbj4KKworICA8ZXh0ZW5zaW9uIHBvaW50ID0gIm9yZy5lY2xpcHNlLnVpLmVkaXRvcnMiPgorICAgIDxlZGl0b3IKKyAgICAgICAgaWQgPSAib3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4dGVybmFsZGF0YXNvdXJjZS5wcmVzZW50YXRpb24uRXh0ZXJuYWxEYXRhU291cmNlRWRpdG9ySUQiCisgICAgICAgIG5hbWUgPSAiJV9VSV9FeHRlcm5hbERhdGFTb3VyY2VFZGl0b3JfbGFiZWwiCisgICAgICAgIGljb24gPSAiaWNvbnMvZnVsbC9vYmoxNi9FeHRlcm5hbERhdGFTb3VyY2VNb2RlbEZpbGUuZ2lmIgorICAgICAgICBleHRlbnNpb25zID0gImV4dGVybmFsZGF0YXNvdXJjZSIKKyAgICAgICAgY2xhc3MgPSAib3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4dGVybmFsZGF0YXNvdXJjZS5wcmVzZW50YXRpb24uRXh0ZXJuYWxEYXRhU291cmNlRWRpdG9yIiAKKyAgICAgICAgY29udHJpYnV0b3JDbGFzcz0ib3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4dGVybmFsZGF0YXNvdXJjZS5wcmVzZW50YXRpb24uRXh0ZXJuYWxEYXRhU291cmNlQWN0aW9uQmFyQ29udHJpYnV0b3IiID4KKyAgICA8L2VkaXRvcj4KKyAgPC9leHRlbnNpb24+CisgIDxleHRlbnNpb24KKyAgICAgICAgcG9pbnQ9Im9yZy5lY2xpcHNlLnVpLnN0YXJ0dXAiPgorICAgICA8c3RhcnR1cAorICAgICAgICAgICBjbGFzcz0ib3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4dGVybmFsZGF0YXNvdXJjZS5wcmVzZW50YXRpb24uRXh0ZXJuYWxEYXRhU291cmNlUHJvcGVydHlTdHJpbmdQcm92aWRlckFkYXB0ZXJGYWN0b3J5Ij48L3N0YXJ0dXA+CisgIDwvZXh0ZW5zaW9uPiAgICAKKzwvcGx1Z2luPgpkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMuZXh0ZXJuYWxkYXRhc291cmNlL3BsdWdpbl9kZS5wcm9wZXJ0aWVzIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMuZXh0ZXJuYWxkYXRhc291cmNlL3BsdWdpbl9kZS5wcm9wZXJ0aWVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZmYjNjZjcKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy5leHRlcm5hbGRhdGFzb3VyY2UvcGx1Z2luX2RlLnByb3BlcnRpZXMKQEAgLTAsMCArMSw2OCBAQAorCisjIDxjb3B5cmlnaHQ+CisjIDwvY29weXJpZ2h0PgorIworIyAkSWQ6IHBsdWdpbi5wcm9wZXJ0aWVzLHYgMS4xIDIwMDgvMDMvMTggMDQ6NTE6NTcgamthdWZtYW4gRXhwICQKKworIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorIyBUbyBjb2RlIGRldmVsb3BlcjoKKyMgICBEbyBOT1QgY2hhbmdlIHRoZSBwcm9wZXJ0aWVzIGJldHdlZW4gdGhpcyBsaW5lIGFuZCB0aGUKKyMgICAiJSUlIEVORCBPRiBUUkFOU0xBVEVEIFBST1BFUlRJRVMgJSUlIiBsaW5lLgorIyAgIE1ha2UgYSBuZXcgcHJvcGVydHkgbmFtZSwgYXBwZW5kIHRvIHRoZSBlbmQgb2YgdGhlIGZpbGUgYW5kIGNoYW5nZQorIyAgIHRoZSBjb2RlIHRvIHVzZSB0aGUgbmV3IHByb3BlcnR5LgorIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisjICUlJSBFTkQgT0YgVFJBTlNMQVRFRCBQUk9QRVJUSUVTICUlJQorIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitwbHVnaW5OYW1lPVNURU0gRXh0ZXJuZS1EYXRlbnF1ZWxsZS1LcmFua2hlaXRzbW9kZWxsLUJlbnV0emVyb2JlcmZsXHUwMGU0Y2hlCitwcm92aWRlck5hbWU9RWNsaXBzZS5vcmcKKworX1VJX0V4dGVybmFsRGF0YVNvdXJjZUVkaXRvcl9tZW51PSZFeHRlcm5hbERhdGFTb3VyY2UgRWRpdG9yCisKK19VSV9DcmVhdGVDaGlsZF9tZW51X2l0ZW09Jk5ldyBDaGlsZAorX1VJX0NyZWF0ZVNpYmxpbmdfbWVudV9pdGVtPU4mZXVlcyBHZXNjaHdpc3RlcnRlaWwKKworX1VJX1Nob3dQcm9wZXJ0aWVzVmlld19tZW51X2l0ZW09U2hvdyAmIFByb3BlcnRpZXMgVmlldworX1VJX1JlZnJlc2hWaWV3ZXJfbWVudV9pdGVtPSZSZWZyZXNoCisKK19VSV9TZWxlY3Rpb25QYWdlX2xhYmVsPUF1c3dhaGwKK19VSV9QYXJlbnRQYWdlX2xhYmVsPUVsdGVybnRlaWwKK19VSV9MaXN0UGFnZV9sYWJlbD1MaXN0ZQorX1VJX1RyZWVQYWdlX2xhYmVsPUJhdW0KK19VSV9UYWJsZVBhZ2VfbGFiZWw9VGFiZWxsZQorX1VJX1RyZWVXaXRoQ29sdW1uc1BhZ2VfbGFiZWw9QmF1bSBtaXQgU3BhbHRlbgorX1VJX09iamVjdENvbHVtbl9sYWJlbD1PYmpla3QKK19VSV9TZWxmQ29sdW1uX2xhYmVsPVNlbGJzdAorCitfVUlfTm9PYmplY3RTZWxlY3RlZD1OaWNodHMgYXVzZ2V3XHUwMGU0aGx0CitfVUlfU2luZ2xlT2JqZWN0U2VsZWN0ZWQ9QXVzZ2V3XHUwMGU0aGx0ZXMgT2JqZWt0OiB7MH0KK19VSV9NdWx0aU9iamVjdFNlbGVjdGVkPUF1c2dld1x1MDBlNGhsdGUgezB9IE9iamVrdGUKKworX1VJX09wZW5FZGl0b3JFcnJvcl9sYWJlbD1FZGl0b3IgXHUwMGY2ZmZuZW4KKworX1VJX1dpemFyZF9jYXRlZ29yeT1CZWlzcGllbCBFTUYgTW9kZWxsIEVyc3RlbGx1bmdzYXNzaXN0ZW50CisKK19VSV9DcmVhdGVNb2RlbEVycm9yX21lc3NhZ2U9QXVmZ2V0cmV0ZW5lIFByb2JsZW1lIGluIGRlciBEYXRlaSAiezB9IgorCitfVUlfRXh0ZXJuYWxEYXRhU291cmNlTW9kZWxXaXphcmRfbGFiZWw9RXh0ZXJuLURhdGVucXVlbGxlLU1vZGVsbAorX1VJX0V4dGVybmFsRGF0YVNvdXJjZU1vZGVsV2l6YXJkX2Rlc2NyaXB0aW9uPU5ldWVzIEV4dGVybmFsRGF0YVNvdXJjZS1Nb2RlbGwgZXJzdGVsbGVuCisKK19VSV9FeHRlcm5hbERhdGFTb3VyY2VFZGl0b3JfbGFiZWw9RXh0ZXJuLURhdGVucXVlbGxlLU1vZGVsbGVkaXRvcgorCitfVUlfRXh0ZXJuYWxEYXRhU291cmNlRWRpdG9yRmlsZW5hbWVEZWZhdWx0QmFzZT1NZWluCitfVUlfRXh0ZXJuYWxEYXRhU291cmNlRWRpdG9yRmlsZW5hbWVFeHRlbnNpb249RXh0ZXJuZSBEYXRlbnF1ZWxsZQorCitfVUlfV2l6YXJkX2xhYmVsPU5ldQorCitfV0FSTl9GaWxlbmFtZUV4dGVuc2lvbj1EZXIgRGF0ZWluYW1lIG11c3MgYXVmICIuezB9IiBlbmRlbgorCitfVUlfTW9kZWxPYmplY3Q9Jk1vZGVsIE9iamVjdAorX1VJX1hNTEVuY29kaW5nPSZYTUwgRW5jb2RpbmcKK19VSV9YTUxFbmNvZGluZ0Nob2ljZXM9VVRGLTggQVNDSUkgVVRGLTE2IFVURi0xNkJFIFVURi0xNkxFIElTTy04ODU5LTEKK19VSV9XaXphcmRfaW5pdGlhbF9vYmplY3RfZGVzY3JpcHRpb249WnUgZXJ6ZXVnZW5kZXMgTW9kZWxsb2JqZWt0IHdcdTAwZTRobGVuCisKK19VSV9GaWxlQ29uZmxpY3RfbGFiZWw9RGF0ZWlrb25mbGlrdAorX1dBUk5fRmlsZUNvbmZsaWN0PUVzIGdpYnQgbmljaHQgZ2VzcGVpY2hlcnRlIFx1MDBjNG5kZXJ1bmdlbiwgZGllIEtvbmZsaWt0ZSBtaXQgXHUwMGM0bmRlcnVuZ2VuIGF1XHUwMGRmZXJoYWxiIGRlcyBFZGl0b3JzIGVyemV1Z2VuLiBNXHUwMGY2Y2h0ZW4gU2llIGRpZSBcdTAwYzRuZGVydW5nZW4gaW0gRWRpdG9yIHZlcndlcmZlbj8KKwpkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMuZXh0ZXJuYWxkYXRhc291cmNlL3BsdWdpbl9rci5wcm9wZXJ0aWVzIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMuZXh0ZXJuYWxkYXRhc291cmNlL3BsdWdpbl9rci5wcm9wZXJ0aWVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdmZTFiNWEKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy5leHRlcm5hbGRhdGFzb3VyY2UvcGx1Z2luX2tyLnByb3BlcnRpZXMKQEAgLTAsMCArMSw2OCBAQAorCisjIDxjb3B5cmlnaHQ+CisjIDwvY29weXJpZ2h0PgorIworIyAkSWQ6IHBsdWdpbi5wcm9wZXJ0aWVzLHYgMS4xIDIwMDgvMDMvMTggMDQ6NTE6NTcgamthdWZtYW4gRXhwICQKKworIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorIyBUbyBjb2RlIGRldmVsb3BlcjoKKyMgICBEbyBOT1QgY2hhbmdlIHRoZSBwcm9wZXJ0aWVzIGJldHdlZW4gdGhpcyBsaW5lIGFuZCB0aGUKKyMgICAiJSUlIEVORCBPRiBUUkFOU0xBVEVEIFBST1BFUlRJRVMgJSUlIiBsaW5lLgorIyAgIE1ha2UgYSBuZXcgcHJvcGVydHkgbmFtZSwgYXBwZW5kIHRvIHRoZSBlbmQgb2YgdGhlIGZpbGUgYW5kIGNoYW5nZQorIyAgIHRoZSBjb2RlIHRvIHVzZSB0aGUgbmV3IHByb3BlcnR5LgorIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisjICUlJSBFTkQgT0YgVFJBTlNMQVRFRCBQUk9QRVJUSUVTICUlJQorIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitwbHVnaW5OYW1lPVNURU0gXHVjNjc4XHViZDgwIFx1YjM3MFx1Yzc3NFx1ZDEzMCBcdWM2ZDBcdWJjZjggXHVjOWM4XHViY2QxIFx1YmFhOFx1YjM3OCBVSQorcHJvdmlkZXJOYW1lPUVjbGlwc2Uub3JnCisKK19VSV9FeHRlcm5hbERhdGFTb3VyY2VFZGl0b3JfbWVudT0mRXh0ZXJuYWxEYXRhU291cmNlIEVkaXRvcgorCitfVUlfQ3JlYXRlQ2hpbGRfbWVudV9pdGVtPSZOZXcgQ2hpbGQKK19VSV9DcmVhdGVTaWJsaW5nX21lbnVfaXRlbT1OJiAgXHVkNjE1XHVjODFjIFx1Yzc5MFx1YjllNAorCitfVUlfU2hvd1Byb3BlcnRpZXNWaWV3X21lbnVfaXRlbT1cdWQ0NWNcdWMyZGMgXHViYzBmIFx1YzE4ZFx1YzEzMVx1YmNmNFx1YWUzMAorX1VJX1JlZnJlc2hWaWV3ZXJfbWVudV9pdGVtPSZSZWZyZXNoCisKK19VSV9TZWxlY3Rpb25QYWdlX2xhYmVsPVx1YzEyMFx1ZDBkZAorX1VJX1BhcmVudFBhZ2VfbGFiZWw9XHViZDgwXHViYWE4CitfVUlfTGlzdFBhZ2VfbGFiZWw9XHViYWE5XHViODVkCitfVUlfVHJlZVBhZ2VfbGFiZWw9XHViMDk4XHViYjM0CitfVUlfVGFibGVQYWdlX2xhYmVsPVx1ZDE0Y1x1Yzc3NFx1YmUxNAorX1VJX1RyZWVXaXRoQ29sdW1uc1BhZ2VfbGFiZWw9XHViMDk4XHViYjM0XHVjNjQwIFx1YzVmNAorX1VJX09iamVjdENvbHVtbl9sYWJlbD1cdWFjMWNcdWNjYjQKK19VSV9TZWxmQ29sdW1uX2xhYmVsPVx1YzE0MFx1ZDUwNAorCitfVUlfTm9PYmplY3RTZWxlY3RlZD1cdWM1NDRcdWJiMzRcdWFjODNcdWIzYzQgXHVjNTQ4IFx1YzEyMFx1ZDBkZFx1ZDU2OAorX1VJX1NpbmdsZU9iamVjdFNlbGVjdGVkPVx1YzEyMFx1ZDBkZFx1ZDU1YyBcdWFjMWRcdWNjYjQgOiB7MH0KK19VSV9NdWx0aU9iamVjdFNlbGVjdGVkPVx1YzEyMFx1ZDBkZFx1YjQxYyB7MH0gXHVhYzFkXHVjY2I0CisKK19VSV9PcGVuRWRpdG9yRXJyb3JfbGFiZWw9XHVjNjI0XHVkNTA4IFx1YzVkMFx1YjUxNFx1ZDEzMAorCitfVUlfV2l6YXJkX2NhdGVnb3J5PVx1YzYwOFx1YzgxYyBFTUYgXHViYWE4XHViMzc4IFx1YzBkZFx1YzEzMSBcdWI5YzhcdWJjOTVcdWMwYWMKKworX1VJX0NyZWF0ZU1vZGVsRXJyb3JfbWVzc2FnZT1cdWQzMGNcdWM3N2MgJ3swfSAiXHVjNWQwXHVjMTFjIFx1YmIzOFx1YzgxYyBcdWJjMWNcdWMwZGQKKworX1VJX0V4dGVybmFsRGF0YVNvdXJjZU1vZGVsV2l6YXJkX2xhYmVsPVx1YmFhOFx1YjM3OCBcdWM2NzhcdWJkODBcdWIzNzBcdWM3NzRcdWQxMzBcdWMxOGNcdWMyYTQKK19VSV9FeHRlcm5hbERhdGFTb3VyY2VNb2RlbFdpemFyZF9kZXNjcmlwdGlvbj1cdWMwYzhcdWI4NWNcdWM2YjQgXHVjNjc4XHViZDgwXHViMzcwXHVjNzc0XHVkMTMwXHVjMThjXHVjMmE0IFx1YmFhOFx1YjM3OCBcdWI5Y2NcdWI0ZTRcdWFlMzAKKworX1VJX0V4dGVybmFsRGF0YVNvdXJjZUVkaXRvcl9sYWJlbD1cdWJhYThcdWIzNzggXHVkM2I4XHVjOWQxXHVhZTMwXHViOTdjIFx1YzY3OFx1YmQ4MFx1YjM3MFx1Yzc3NFx1ZDEzMFx1YzE4Y1x1YzJhNAorCitfVUlfRXh0ZXJuYWxEYXRhU291cmNlRWRpdG9yRmlsZW5hbWVEZWZhdWx0QmFzZT1cdWIwOThcdWM3NTgKK19VSV9FeHRlcm5hbERhdGFTb3VyY2VFZGl0b3JGaWxlbmFtZUV4dGVuc2lvbj1cdWM2NzhcdWJkODBcdWIzNzBcdWM3NzRcdWQxMzBcdWMxOGNcdWMyYTQKKworX1VJX1dpemFyZF9sYWJlbD1cdWMwYzhcdWI4NWNcdWM2YjQKKworX1dBUk5fRmlsZW5hbWVFeHRlbnNpb249XHVkMzBjXHVjNzdjIFx1Yzc3NFx1Yjk4NFx1Yzc0MCAiLnswfSJcdWI4NWMgXHViMDVkXHViMDk4XHVjNTdjXHVkNTY4LiAKKworX1VJX01vZGVsT2JqZWN0PSZNb2RlbCBPYmplY3QKK19VSV9YTUxFbmNvZGluZz0mWE1MIEVuY29kaW5nCitfVUlfWE1MRW5jb2RpbmdDaG9pY2VzPVVURiAtIDggQVNDSUkgVVRGIC0gMTYgVVRGIC0gMTZCRSBVVEYgLSAxNkxFIElTTyAtIDg4NTkgLSAxCitfVUlfV2l6YXJkX2luaXRpYWxfb2JqZWN0X2Rlc2NyaXB0aW9uPVx1YzBkZFx1YzEzMVx1ZDU2MCBcdWJhYThcdWIzNzggXHVhYzFjXHVjY2I0IFx1YzEyMFx1ZDBkZAorCitfVUlfRmlsZUNvbmZsaWN0X2xhYmVsPVx1ZDMwY1x1Yzc3YyBcdWNkYTlcdWIzY2MKK19XQVJOX0ZpbGVDb25mbGljdD1cdWM4MDBcdWM3YTVcdWI0MThcdWM5YzAgXHVjNTRhXHVjNzQwIFx1YzBhY1x1ZDU2ZFx1YjRlNFx1Yzc3NCBcdWQzYjhcdWM5ZDFcdWFlMzAgXHVjNjc4XHViZDgwXHVjNzU4IFx1YmNjMFx1YWNiZCBcdWMwYWNcdWQ1NmRcdWI0ZTRcdWFjZmMgXHVjZGE5XHViM2NjXHVkNTY4LiBcdWM3NzQgXHVkM2I4XHVjOWQxXHVhZTMwXHVjNzU4IFx1YmNjMFx1YWNiZCBcdWMwYWNcdWQ1NmRcdWI0ZTRcdWM3NDQgXHVjZGU4XHVjMThjIFx1ZDU1OFx1YzJkY1x1YWNhMFx1YzJiNVx1YjJjOFx1YWU0Yz8KKwpkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMuZXh0ZXJuYWxkYXRhc291cmNlL3BsdWdpbl96aC5wcm9wZXJ0aWVzIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMuZXh0ZXJuYWxkYXRhc291cmNlL3BsdWdpbl96aC5wcm9wZXJ0aWVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM2YTg0NTMKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy5leHRlcm5hbGRhdGFzb3VyY2UvcGx1Z2luX3poLnByb3BlcnRpZXMKQEAgLTAsMCArMSw2OCBAQAorCisjIDxjb3B5cmlnaHQ+CisjIDwvY29weXJpZ2h0PgorIworIyAkSWQ6IHBsdWdpbi5wcm9wZXJ0aWVzLHYgMS4xIDIwMDgvMDMvMTggMDQ6NTE6NTcgamthdWZtYW4gRXhwICQKKworIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorIyBUbyBjb2RlIGRldmVsb3BlcjoKKyMgICBEbyBOT1QgY2hhbmdlIHRoZSBwcm9wZXJ0aWVzIGJldHdlZW4gdGhpcyBsaW5lIGFuZCB0aGUKKyMgICAiJSUlIEVORCBPRiBUUkFOU0xBVEVEIFBST1BFUlRJRVMgJSUlIiBsaW5lLgorIyAgIE1ha2UgYSBuZXcgcHJvcGVydHkgbmFtZSwgYXBwZW5kIHRvIHRoZSBlbmQgb2YgdGhlIGZpbGUgYW5kIGNoYW5nZQorIyAgIHRoZSBjb2RlIHRvIHVzZSB0aGUgbmV3IHByb3BlcnR5LgorIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisjICUlJSBFTkQgT0YgVFJBTlNMQVRFRCBQUk9QRVJUSUVTICUlJQorIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitwbHVnaW5OYW1lPVNURU1cdTU5MTZcdTkwZThcdTY1NzBcdTYzNmVcdTZlOTBcdTc1YmVcdTc1YzVcdTZhMjFcdTU3OGJcdTc2ODRcdTc1MjhcdTYyMzdcdTc1NGNcdTk3NjIKK3Byb3ZpZGVyTmFtZT1FY2xpcHNlLm9yZworCitfVUlfRXh0ZXJuYWxEYXRhU291cmNlRWRpdG9yX21lbnU9JkV4dGVybmFsRGF0YVNvdXJjZSBFZGl0b3IKKworX1VJX0NyZWF0ZUNoaWxkX21lbnVfaXRlbT0mTmV3IENoaWxkCitfVUlfQ3JlYXRlU2libGluZ19tZW51X2l0ZW09XHU2NWIwXHU3NTFmXHU2MjEwXHU0ZTAwXHU0ZTJhXHU1MTQ0XHU1ZjFmXHU3YzdiCisKK19VSV9TaG93UHJvcGVydGllc1ZpZXdfbWVudV9pdGVtPVx1NjYzZVx1NzkzYVx1NTQ4Y1x1NWM1ZVx1NjAyN1x1NjdlNVx1NzcwYgorX1VJX1JlZnJlc2hWaWV3ZXJfbWVudV9pdGVtPSZSZWZyZXNoCisKK19VSV9TZWxlY3Rpb25QYWdlX2xhYmVsPVx1OTAwOVx1NjJlOQorX1VJX1BhcmVudFBhZ2VfbGFiZWw9XHU1YmI2XHU5NTdmCitfVUlfTGlzdFBhZ2VfbGFiZWw9XHU3NmVlXHU1ZjU1CitfVUlfVHJlZVBhZ2VfbGFiZWw9XHU2ODExCitfVUlfVGFibGVQYWdlX2xhYmVsPVx1ODg2OAorX1VJX1RyZWVXaXRoQ29sdW1uc1BhZ2VfbGFiZWw9XHU1MjA2XHU1MjE3XHU3Njg0XHU2ODExCitfVUlfT2JqZWN0Q29sdW1uX2xhYmVsPVx1NWJmOVx1OGM2MQorX1VJX1NlbGZDb2x1bW5fbGFiZWw9XHU4MWVhXHU1ZGYxCisKK19VSV9Ob09iamVjdFNlbGVjdGVkPVx1NjVlMFx1OTAwOVx1NWI5YVx1NTE4NVx1NWJiOQorX1VJX1NpbmdsZU9iamVjdFNlbGVjdGVkPVx1OTAwOVx1NjJlOVx1NWJmOVx1OGM2MVx1ZmYxYXswfQorX1VJX011bHRpT2JqZWN0U2VsZWN0ZWQ9XHU5MDA5XHU2MmU5ezB9XHU1YmY5XHU4YzYxCisKK19VSV9PcGVuRWRpdG9yRXJyb3JfbGFiZWw9XHU2MjUzXHU1ZjAwXHU3ZjE2XHU4ZjkxXHU1NjY4CisKK19VSV9XaXphcmRfY2F0ZWdvcnk9XHU0ZjhiXHU1OTgyRU1GXHU2YTIxXHU1NzhiXHU1MjFiXHU1ZWZhXHU1NDExXHU1YmZjCisKK19VSV9DcmVhdGVNb2RlbEVycm9yX21lc3NhZ2U9XHU1NzI4XHU2NTg3XHU0ZWY2XHUyMDFjezB9XHUyMDFkXHU0ZTJkXHU5MDQ3XHU1MjMwXHU3Njg0XHU5NWVlXHU5ODk4CisKK19VSV9FeHRlcm5hbERhdGFTb3VyY2VNb2RlbFdpemFyZF9sYWJlbD1cdTU5MTZcdTkwZThcdTY1NzBcdTYzNmVcdTZlOTBcdTZhMjFcdTU3OGIKK19VSV9FeHRlcm5hbERhdGFTb3VyY2VNb2RlbFdpemFyZF9kZXNjcmlwdGlvbj1cdTUyMWJcdTVlZmFcdTRlMDBcdTRlMmFcdTY1YjBcdTc2ODRcdTU5MTZcdTkwZThcdTY1NzBcdTYzNmVcdTZlOTBcdTZhMjFcdTU3OGIKKworX1VJX0V4dGVybmFsRGF0YVNvdXJjZUVkaXRvcl9sYWJlbD1cdTU5MTZcdTkwZThcdTY1NzBcdTYzNmVcdTZlOTBcdTZhMjFcdTU3OGJcdTdmMTZcdThmOTFcdTU2NjgKKworX1VJX0V4dGVybmFsRGF0YVNvdXJjZUVkaXRvckZpbGVuYW1lRGVmYXVsdEJhc2U9XHU2MjExXHU3Njg0CitfVUlfRXh0ZXJuYWxEYXRhU291cmNlRWRpdG9yRmlsZW5hbWVFeHRlbnNpb249XHU1OTE2XHU5MGU4XHU2NTcwXHU2MzZlXHU2ZTkwCisKK19VSV9XaXphcmRfbGFiZWw9XHU2NWIwXHU1ZWZhCisKK19XQVJOX0ZpbGVuYW1lRXh0ZW5zaW9uPVx1NjU4N1x1NGVmNlx1NTQwZFx1NWZjNVx1OTg3Ylx1NGVlNSd7MH0gJydcdTdlZDNcdTVjM2UKKworX1VJX01vZGVsT2JqZWN0PSZNb2RlbCBPYmplY3QKK19VSV9YTUxFbmNvZGluZz0mWE1MIEVuY29kaW5nCitfVUlfWE1MRW5jb2RpbmdDaG9pY2VzPVVURi04IEFTQ0lJIFVURi0xNiBVVEYtMTZCRSBVVEYtMTZMRSBJU08tODg1OS0xCitfVUlfV2l6YXJkX2luaXRpYWxfb2JqZWN0X2Rlc2NyaXB0aW9uPVx1OTAwOVx1NjJlOVx1NTIxYlx1NWVmYVx1NGUwMFx1NGUyYVx1NmEyMVx1NTc4Ylx1NWJmOVx1OGM2MQorCitfVUlfRmlsZUNvbmZsaWN0X2xhYmVsPVx1NjU4N1x1NGVmNlx1NTFiMlx1N2E4MQorX1dBUk5fRmlsZUNvbmZsaWN0PVx1NjcwOVx1NjcyYVx1NGZkZFx1NWI1OFx1NzY4NFx1NjZmNFx1NjUzOVx1NGUwZVx1N2YxNlx1OGY5MVx1NTY2OFx1NTkxNlx1NzY4NFx1NjZmNFx1NjUzOVx1NTFiMlx1N2E4MVx1MzAwMlx1NGY2MFx1NjBmM1x1NjUzZVx1NWYwM1x1OGZkOVx1NGUyYVx1N2YxNlx1OGY5MVx1NTY2OFx1NzY4NFx1NjZmNFx1NjUzOVx1NTQxN1x1ZmYxZgorCmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy5leHRlcm5hbGRhdGFzb3VyY2Uvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9leHRlcm5hbGRhdGFzb3VyY2UvcHJlc2VudGF0aW9uL0V4dGVybmFsRGF0YVNvdXJjZUFjdGlvbkJhckNvbnRyaWJ1dG9yLmphdmEgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy5leHRlcm5hbGRhdGFzb3VyY2Uvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9leHRlcm5hbGRhdGFzb3VyY2UvcHJlc2VudGF0aW9uL0V4dGVybmFsRGF0YVNvdXJjZUFjdGlvbkJhckNvbnRyaWJ1dG9yLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmQ5MWRhZAotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzLmV4dGVybmFsZGF0YXNvdXJjZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL2V4dGVybmFsZGF0YXNvdXJjZS9wcmVzZW50YXRpb24vRXh0ZXJuYWxEYXRhU291cmNlQWN0aW9uQmFyQ29udHJpYnV0b3IuamF2YQpAQCAtMCwwICsxLDQyOSBAQAorLy8gRXh0ZXJuYWxEYXRhU291cmNlQWN0aW9uQmFyQ29udHJpYnV0b3IuamF2YQorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXh0ZXJuYWxkYXRhc291cmNlLnByZXNlbnRhdGlvbjsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNywgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OworaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51aS52aWV3ZXIuSVZpZXdlclByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LmRvbWFpbi5FZGl0aW5nRG9tYWluOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LmRvbWFpbi5JRWRpdGluZ0RvbWFpblByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmFjdGlvbi5Db250cm9sQWN0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmFjdGlvbi5DcmVhdGVDaGlsZEFjdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5hY3Rpb24uQ3JlYXRlU2libGluZ0FjdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5hY3Rpb24uRWRpdGluZ0RvbWFpbkFjdGlvbkJhckNvbnRyaWJ1dG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmFjdGlvbi5Mb2FkUmVzb3VyY2VBY3Rpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkuYWN0aW9uLlZhbGlkYXRlQWN0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5BY3Rpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLkFjdGlvbkNvbnRyaWJ1dGlvbkl0ZW07CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklBY3Rpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklDb250cmlidXRpb25JdGVtOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JQ29udHJpYnV0aW9uTWFuYWdlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSU1lbnVMaXN0ZW5lcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSU1lbnVNYW5hZ2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JVG9vbEJhck1hbmFnZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLk1lbnVNYW5hZ2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5TZXBhcmF0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLlN1YkNvbnRyaWJ1dGlvbkl0ZW07CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb25Qcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTdHJ1Y3R1cmVkU2VsZWN0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuU2VsZWN0aW9uQ2hhbmdlZEV2ZW50OworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuVmlld2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklFZGl0b3JQYXJ0OworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLlBhcnRJbml0RXhjZXB0aW9uOworCisvKioKKyAqIFRoaXMgaXMgdGhlIGFjdGlvbiBiYXIgY29udHJpYnV0b3IgZm9yIHRoZSBFeHRlcm5hbERhdGFTb3VyY2UgbW9kZWwgZWRpdG9yLgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgRXh0ZXJuYWxEYXRhU291cmNlQWN0aW9uQmFyQ29udHJpYnV0b3IKKwlleHRlbmRzIEVkaXRpbmdEb21haW5BY3Rpb25CYXJDb250cmlidXRvcgorCWltcGxlbWVudHMgSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lciB7CisJLyoqCisJICogVGhpcyBrZWVwcyB0cmFjayBvZiB0aGUgYWN0aXZlIGVkaXRvci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgSUVkaXRvclBhcnQgYWN0aXZlRWRpdG9yUGFydDsKKworCS8qKgorCSAqIFRoaXMga2VlcHMgdHJhY2sgb2YgdGhlIGN1cnJlbnQgc2VsZWN0aW9uIHByb3ZpZGVyLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBJU2VsZWN0aW9uUHJvdmlkZXIgc2VsZWN0aW9uUHJvdmlkZXI7CisKKwkvKioKKwkgKiBUaGlzIGFjdGlvbiBvcGVucyB0aGUgUHJvcGVydGllcyB2aWV3LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBJQWN0aW9uIHNob3dQcm9wZXJ0aWVzVmlld0FjdGlvbiA9CisJCW5ldyBBY3Rpb24oRXh0ZXJuYWxEYXRhU291cmNlRWRpdG9yUGx1Z2luLklOU1RBTkNFLmdldFN0cmluZygiX1VJX1Nob3dQcm9wZXJ0aWVzVmlld19tZW51X2l0ZW0iKSkgeworCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgdm9pZCBydW4oKSB7CisJCQkJdHJ5IHsKKwkJCQkJZ2V0UGFnZSgpLnNob3dWaWV3KCJvcmcuZWNsaXBzZS51aS52aWV3cy5Qcm9wZXJ0eVNoZWV0Iik7CisJCQkJfQorCQkJCWNhdGNoIChQYXJ0SW5pdEV4Y2VwdGlvbiBleGNlcHRpb24pIHsKKwkJCQkJRXh0ZXJuYWxEYXRhU291cmNlRWRpdG9yUGx1Z2luLklOU1RBTkNFLmxvZyhleGNlcHRpb24pOworCQkJCX0KKwkJCX0KKwkJfTsKKworCS8qKgorCSAqIFRoaXMgYWN0aW9uIHJlZnJlc2hlcyB0aGUgdmlld2VyIG9mIHRoZSBjdXJyZW50IGVkaXRvciBpZiB0aGUgZWRpdG9yCisJICogaW1wbGVtZW50cyB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51aS52aWV3ZXIuSVZpZXdlclByb3ZpZGVyfS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgSUFjdGlvbiByZWZyZXNoVmlld2VyQWN0aW9uID0KKwkJbmV3IEFjdGlvbihFeHRlcm5hbERhdGFTb3VyY2VFZGl0b3JQbHVnaW4uSU5TVEFOQ0UuZ2V0U3RyaW5nKCJfVUlfUmVmcmVzaFZpZXdlcl9tZW51X2l0ZW0iKSkgeworCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgYm9vbGVhbiBpc0VuYWJsZWQoKSB7CisJCQkJcmV0dXJuIGFjdGl2ZUVkaXRvclBhcnQgaW5zdGFuY2VvZiBJVmlld2VyUHJvdmlkZXI7CisJCQl9CisKKwkJCUBPdmVycmlkZQorCQkJcHVibGljIHZvaWQgcnVuKCkgeworCQkJCWlmIChhY3RpdmVFZGl0b3JQYXJ0IGluc3RhbmNlb2YgSVZpZXdlclByb3ZpZGVyKSB7CisJCQkJCVZpZXdlciB2aWV3ZXIgPSAoKElWaWV3ZXJQcm92aWRlcilhY3RpdmVFZGl0b3JQYXJ0KS5nZXRWaWV3ZXIoKTsKKwkJCQkJaWYgKHZpZXdlciAhPSBudWxsKSB7CisJCQkJCQl2aWV3ZXIucmVmcmVzaCgpOworCQkJCQl9CisJCQkJfQorCQkJfQorCQl9OworCisJLyoqCisJICogVGhpcyB3aWxsIGNvbnRhaW4gb25lIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5hY3Rpb24uQ3JlYXRlQ2hpbGRBY3Rpb259IGNvcnJlc3BvbmRpbmcgdG8gZWFjaCBkZXNjcmlwdG9yCisJICogZ2VuZXJhdGVkIGZvciB0aGUgY3VycmVudCBzZWxlY3Rpb24gYnkgdGhlIGl0ZW0gcHJvdmlkZXIuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIENvbGxlY3Rpb248SUFjdGlvbj4gY3JlYXRlQ2hpbGRBY3Rpb25zOworCisJLyoqCisJICogVGhpcyBpcyB0aGUgbWVudSBtYW5hZ2VyIGludG8gd2hpY2ggbWVudSBjb250cmlidXRpb24gaXRlbXMgc2hvdWxkIGJlIGFkZGVkIGZvciBDcmVhdGVDaGlsZCBhY3Rpb25zLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBJTWVudU1hbmFnZXIgY3JlYXRlQ2hpbGRNZW51TWFuYWdlcjsKKworCS8qKgorCSAqIFRoaXMgd2lsbCBjb250YWluIG9uZSB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkuYWN0aW9uLkNyZWF0ZVNpYmxpbmdBY3Rpb259IGNvcnJlc3BvbmRpbmcgdG8gZWFjaCBkZXNjcmlwdG9yCisJICogZ2VuZXJhdGVkIGZvciB0aGUgY3VycmVudCBzZWxlY3Rpb24gYnkgdGhlIGl0ZW0gcHJvdmlkZXIuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIENvbGxlY3Rpb248SUFjdGlvbj4gY3JlYXRlU2libGluZ0FjdGlvbnM7CisKKwkvKioKKwkgKiBUaGlzIGlzIHRoZSBtZW51IG1hbmFnZXIgaW50byB3aGljaCBtZW51IGNvbnRyaWJ1dGlvbiBpdGVtcyBzaG91bGQgYmUgYWRkZWQgZm9yIENyZWF0ZVNpYmxpbmcgYWN0aW9ucy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgSU1lbnVNYW5hZ2VyIGNyZWF0ZVNpYmxpbmdNZW51TWFuYWdlcjsKKworCS8qKgorCSAqIFRoaXMgY3JlYXRlcyBhbiBpbnN0YW5jZSBvZiB0aGUgY29udHJpYnV0b3IuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEV4dGVybmFsRGF0YVNvdXJjZUFjdGlvbkJhckNvbnRyaWJ1dG9yKCkgeworCQlzdXBlcihBRERJVElPTlNfTEFTVF9TVFlMRSk7CisJCWxvYWRSZXNvdXJjZUFjdGlvbiA9IG5ldyBMb2FkUmVzb3VyY2VBY3Rpb24oKTsKKwkJdmFsaWRhdGVBY3Rpb24gPSBuZXcgVmFsaWRhdGVBY3Rpb24oKTsKKwkJY29udHJvbEFjdGlvbiA9IG5ldyBDb250cm9sQWN0aW9uKCk7CisJfQorCisJLyoqCisJICogVGhpcyBhZGRzIFNlcGFyYXRvcnMgZm9yIGVkaXRvciBhZGRpdGlvbnMgdG8gdGhlIHRvb2wgYmFyLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGNvbnRyaWJ1dGVUb1Rvb2xCYXIoSVRvb2xCYXJNYW5hZ2VyIHRvb2xCYXJNYW5hZ2VyKSB7CisJCXRvb2xCYXJNYW5hZ2VyLmFkZChuZXcgU2VwYXJhdG9yKCJleHRlcm5hbGRhdGFzb3VyY2Utc2V0dGluZ3MiKSk7CisJCXRvb2xCYXJNYW5hZ2VyLmFkZChuZXcgU2VwYXJhdG9yKCJleHRlcm5hbGRhdGFzb3VyY2UtYWRkaXRpb25zIikpOworCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyB0byB0aGUgbWVudSBiYXIgYSBtZW51IGFuZCBzb21lIHNlcGFyYXRvcnMgZm9yIGVkaXRvciBhZGRpdGlvbnMsCisJICogYXMgd2VsbCBhcyB0aGUgc3ViLW1lbnVzIGZvciBvYmplY3QgY3JlYXRpb24gaXRlbXMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgY29udHJpYnV0ZVRvTWVudShJTWVudU1hbmFnZXIgbWVudU1hbmFnZXIpIHsKKwkJc3VwZXIuY29udHJpYnV0ZVRvTWVudShtZW51TWFuYWdlcik7CisKKwkJSU1lbnVNYW5hZ2VyIHN1Ym1lbnVNYW5hZ2VyID0gbmV3IE1lbnVNYW5hZ2VyKEV4dGVybmFsRGF0YVNvdXJjZUVkaXRvclBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoIl9VSV9FeHRlcm5hbERhdGFTb3VyY2VFZGl0b3JfbWVudSIpLCAib3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4dGVybmFsZGF0YXNvdXJjZU1lbnVJRCIpOworCQltZW51TWFuYWdlci5pbnNlcnRBZnRlcigiYWRkaXRpb25zIiwgc3VibWVudU1hbmFnZXIpOworCQlzdWJtZW51TWFuYWdlci5hZGQobmV3IFNlcGFyYXRvcigic2V0dGluZ3MiKSk7CisJCXN1Ym1lbnVNYW5hZ2VyLmFkZChuZXcgU2VwYXJhdG9yKCJhY3Rpb25zIikpOworCQlzdWJtZW51TWFuYWdlci5hZGQobmV3IFNlcGFyYXRvcigiYWRkaXRpb25zIikpOworCQlzdWJtZW51TWFuYWdlci5hZGQobmV3IFNlcGFyYXRvcigiYWRkaXRpb25zLWVuZCIpKTsKKworCQkvLyBQcmVwYXJlIGZvciBDcmVhdGVDaGlsZCBpdGVtIGFkZGl0aW9uIG9yIHJlbW92YWwuCisJCS8vCisJCWNyZWF0ZUNoaWxkTWVudU1hbmFnZXIgPSBuZXcgTWVudU1hbmFnZXIoRXh0ZXJuYWxEYXRhU291cmNlRWRpdG9yUGx1Z2luLklOU1RBTkNFLmdldFN0cmluZygiX1VJX0NyZWF0ZUNoaWxkX21lbnVfaXRlbSIpKTsKKwkJc3VibWVudU1hbmFnZXIuaW5zZXJ0QmVmb3JlKCJhZGRpdGlvbnMiLCBjcmVhdGVDaGlsZE1lbnVNYW5hZ2VyKTsKKworCQkvLyBQcmVwYXJlIGZvciBDcmVhdGVTaWJsaW5nIGl0ZW0gYWRkaXRpb24gb3IgcmVtb3ZhbC4KKwkJLy8KKwkJY3JlYXRlU2libGluZ01lbnVNYW5hZ2VyID0gbmV3IE1lbnVNYW5hZ2VyKEV4dGVybmFsRGF0YVNvdXJjZUVkaXRvclBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoIl9VSV9DcmVhdGVTaWJsaW5nX21lbnVfaXRlbSIpKTsKKwkJc3VibWVudU1hbmFnZXIuaW5zZXJ0QmVmb3JlKCJhZGRpdGlvbnMiLCBjcmVhdGVTaWJsaW5nTWVudU1hbmFnZXIpOworCisJCS8vIEZvcmNlIGFuIHVwZGF0ZSBiZWNhdXNlIEVjbGlwc2UgaGlkZXMgZW1wdHkgbWVudXMgbm93LgorCQkvLworCQlzdWJtZW51TWFuYWdlci5hZGRNZW51TGlzdGVuZXIKKwkJCShuZXcgSU1lbnVMaXN0ZW5lcigpIHsKKwkJCQkgcHVibGljIHZvaWQgbWVudUFib3V0VG9TaG93KElNZW51TWFuYWdlciBtZW51TWFuYWdlcikgeworCQkJCQkgbWVudU1hbmFnZXIudXBkYXRlQWxsKHRydWUpOworCQkJCSB9CisJCQkgfSk7CisKKwkJYWRkR2xvYmFsQWN0aW9ucyhzdWJtZW51TWFuYWdlcik7CisJfQorCisJLyoqCisJICogV2hlbiB0aGUgYWN0aXZlIGVkaXRvciBjaGFuZ2VzLCB0aGlzIHJlbWVtYmVycyB0aGUgY2hhbmdlIGFuZCByZWdpc3RlcnMgd2l0aCBpdCBhcyBhIHNlbGVjdGlvbiBwcm92aWRlci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBzZXRBY3RpdmVFZGl0b3IoSUVkaXRvclBhcnQgcGFydCkgeworCQlzdXBlci5zZXRBY3RpdmVFZGl0b3IocGFydCk7CisJCWFjdGl2ZUVkaXRvclBhcnQgPSBwYXJ0OworCisJCS8vIFN3aXRjaCB0byB0aGUgbmV3IHNlbGVjdGlvbiBwcm92aWRlci4KKwkJLy8KKwkJaWYgKHNlbGVjdGlvblByb3ZpZGVyICE9IG51bGwpIHsKKwkJCXNlbGVjdGlvblByb3ZpZGVyLnJlbW92ZVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcih0aGlzKTsKKwkJfQorCQlpZiAocGFydCA9PSBudWxsKSB7CisJCQlzZWxlY3Rpb25Qcm92aWRlciA9IG51bGw7CisJCX0KKwkJZWxzZSB7CisJCQlzZWxlY3Rpb25Qcm92aWRlciA9IHBhcnQuZ2V0U2l0ZSgpLmdldFNlbGVjdGlvblByb3ZpZGVyKCk7CisJCQlzZWxlY3Rpb25Qcm92aWRlci5hZGRTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIodGhpcyk7CisKKwkJCS8vIEZha2UgYSBzZWxlY3Rpb24gY2hhbmdlZCBldmVudCB0byB1cGRhdGUgdGhlIG1lbnVzLgorCQkJLy8KKwkJCWlmIChzZWxlY3Rpb25Qcm92aWRlci5nZXRTZWxlY3Rpb24oKSAhPSBudWxsKSB7CisJCQkJc2VsZWN0aW9uQ2hhbmdlZChuZXcgU2VsZWN0aW9uQ2hhbmdlZEV2ZW50KHNlbGVjdGlvblByb3ZpZGVyLCBzZWxlY3Rpb25Qcm92aWRlci5nZXRTZWxlY3Rpb24oKSkpOworCQkJfQorCQl9CisJfQorCisJLyoqCisJICogVGhpcyBpbXBsZW1lbnRzIHtAbGluayBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXJ9LAorCSAqIGhhbmRsaW5nIHtAbGluayBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlNlbGVjdGlvbkNoYW5nZWRFdmVudH1zIGJ5IHF1ZXJ5aW5nIGZvciB0aGUgY2hpbGRyZW4gYW5kIHNpYmxpbmdzCisJICogdGhhdCBjYW4gYmUgYWRkZWQgdG8gdGhlIHNlbGVjdGVkIG9iamVjdCBhbmQgdXBkYXRpbmcgdGhlIG1lbnVzIGFjY29yZGluZ2x5LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIGV2ZW50IAorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZWxlY3Rpb25DaGFuZ2VkKFNlbGVjdGlvbkNoYW5nZWRFdmVudCBldmVudCkgeworCQkvLyBSZW1vdmUgYW55IG1lbnUgaXRlbXMgZm9yIG9sZCBzZWxlY3Rpb24uCisJCS8vCisJCWlmIChjcmVhdGVDaGlsZE1lbnVNYW5hZ2VyICE9IG51bGwpIHsKKwkJCWRlcG9wdWxhdGVNYW5hZ2VyKGNyZWF0ZUNoaWxkTWVudU1hbmFnZXIsIGNyZWF0ZUNoaWxkQWN0aW9ucyk7CisJCX0KKwkJaWYgKGNyZWF0ZVNpYmxpbmdNZW51TWFuYWdlciAhPSBudWxsKSB7CisJCQlkZXBvcHVsYXRlTWFuYWdlcihjcmVhdGVTaWJsaW5nTWVudU1hbmFnZXIsIGNyZWF0ZVNpYmxpbmdBY3Rpb25zKTsKKwkJfQorCisJCS8vIFF1ZXJ5IHRoZSBuZXcgc2VsZWN0aW9uIGZvciBhcHByb3ByaWF0ZSBuZXcgY2hpbGQvc2libGluZyBkZXNjcmlwdG9ycworCQkvLworCQlDb2xsZWN0aW9uPD8+IG5ld0NoaWxkRGVzY3JpcHRvcnMgPSBudWxsOworCQlDb2xsZWN0aW9uPD8+IG5ld1NpYmxpbmdEZXNjcmlwdG9ycyA9IG51bGw7CisKKwkJSVNlbGVjdGlvbiBzZWxlY3Rpb24gPSBldmVudC5nZXRTZWxlY3Rpb24oKTsKKwkJaWYgKHNlbGVjdGlvbiBpbnN0YW5jZW9mIElTdHJ1Y3R1cmVkU2VsZWN0aW9uICYmICgoSVN0cnVjdHVyZWRTZWxlY3Rpb24pc2VsZWN0aW9uKS5zaXplKCkgPT0gMSkgeworCQkJT2JqZWN0IG9iamVjdCA9ICgoSVN0cnVjdHVyZWRTZWxlY3Rpb24pc2VsZWN0aW9uKS5nZXRGaXJzdEVsZW1lbnQoKTsKKworCQkJRWRpdGluZ0RvbWFpbiBkb21haW4gPSAoKElFZGl0aW5nRG9tYWluUHJvdmlkZXIpYWN0aXZlRWRpdG9yUGFydCkuZ2V0RWRpdGluZ0RvbWFpbigpOworCisJCQluZXdDaGlsZERlc2NyaXB0b3JzID0gZG9tYWluLmdldE5ld0NoaWxkRGVzY3JpcHRvcnMob2JqZWN0LCBudWxsKTsKKwkJCW5ld1NpYmxpbmdEZXNjcmlwdG9ycyA9IGRvbWFpbi5nZXROZXdDaGlsZERlc2NyaXB0b3JzKG51bGwsIG9iamVjdCk7CisJCX0KKworCQkvLyBHZW5lcmF0ZSBhY3Rpb25zIGZvciBzZWxlY3Rpb247IHBvcHVsYXRlIGFuZCByZWRyYXcgdGhlIG1lbnVzLgorCQkvLworCQljcmVhdGVDaGlsZEFjdGlvbnMgPSBnZW5lcmF0ZUNyZWF0ZUNoaWxkQWN0aW9ucyhuZXdDaGlsZERlc2NyaXB0b3JzLCBzZWxlY3Rpb24pOworCQljcmVhdGVTaWJsaW5nQWN0aW9ucyA9IGdlbmVyYXRlQ3JlYXRlU2libGluZ0FjdGlvbnMobmV3U2libGluZ0Rlc2NyaXB0b3JzLCBzZWxlY3Rpb24pOworCisJCWlmIChjcmVhdGVDaGlsZE1lbnVNYW5hZ2VyICE9IG51bGwpIHsKKwkJCXBvcHVsYXRlTWFuYWdlcihjcmVhdGVDaGlsZE1lbnVNYW5hZ2VyLCBjcmVhdGVDaGlsZEFjdGlvbnMsIG51bGwpOworCQkJY3JlYXRlQ2hpbGRNZW51TWFuYWdlci51cGRhdGUodHJ1ZSk7CisJCX0KKwkJaWYgKGNyZWF0ZVNpYmxpbmdNZW51TWFuYWdlciAhPSBudWxsKSB7CisJCQlwb3B1bGF0ZU1hbmFnZXIoY3JlYXRlU2libGluZ01lbnVNYW5hZ2VyLCBjcmVhdGVTaWJsaW5nQWN0aW9ucywgbnVsbCk7CisJCQljcmVhdGVTaWJsaW5nTWVudU1hbmFnZXIudXBkYXRlKHRydWUpOworCQl9CisJfQorCisJLyoqCisJICogVGhpcyBnZW5lcmF0ZXMgYSB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkuYWN0aW9uLkNyZWF0ZUNoaWxkQWN0aW9ufSBmb3IgZWFjaCBvYmplY3QgaW4gPGNvZGU+ZGVzY3JpcHRvcnM8L2NvZGU+LAorCSAqIGFuZCByZXR1cm5zIHRoZSBjb2xsZWN0aW9uIG9mIHRoZXNlIGFjdGlvbnMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIENvbGxlY3Rpb248SUFjdGlvbj4gZ2VuZXJhdGVDcmVhdGVDaGlsZEFjdGlvbnMoQ29sbGVjdGlvbjw/PiBkZXNjcmlwdG9ycywgSVNlbGVjdGlvbiBzZWxlY3Rpb24pIHsKKwkJQ29sbGVjdGlvbjxJQWN0aW9uPiBhY3Rpb25zID0gbmV3IEFycmF5TGlzdDxJQWN0aW9uPigpOworCQlpZiAoZGVzY3JpcHRvcnMgIT0gbnVsbCkgeworCQkJZm9yIChPYmplY3QgZGVzY3JpcHRvciA6IGRlc2NyaXB0b3JzKSB7CisJCQkJYWN0aW9ucy5hZGQobmV3IENyZWF0ZUNoaWxkQWN0aW9uKGFjdGl2ZUVkaXRvclBhcnQsIHNlbGVjdGlvbiwgZGVzY3JpcHRvcikpOworCQkJfQorCQl9CisJCXJldHVybiBhY3Rpb25zOworCX0KKworCS8qKgorCSAqIFRoaXMgZ2VuZXJhdGVzIGEge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmFjdGlvbi5DcmVhdGVTaWJsaW5nQWN0aW9ufSBmb3IgZWFjaCBvYmplY3QgaW4gPGNvZGU+ZGVzY3JpcHRvcnM8L2NvZGU+LAorCSAqIGFuZCByZXR1cm5zIHRoZSBjb2xsZWN0aW9uIG9mIHRoZXNlIGFjdGlvbnMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIENvbGxlY3Rpb248SUFjdGlvbj4gZ2VuZXJhdGVDcmVhdGVTaWJsaW5nQWN0aW9ucyhDb2xsZWN0aW9uPD8+IGRlc2NyaXB0b3JzLCBJU2VsZWN0aW9uIHNlbGVjdGlvbikgeworCQlDb2xsZWN0aW9uPElBY3Rpb24+IGFjdGlvbnMgPSBuZXcgQXJyYXlMaXN0PElBY3Rpb24+KCk7CisJCWlmIChkZXNjcmlwdG9ycyAhPSBudWxsKSB7CisJCQlmb3IgKE9iamVjdCBkZXNjcmlwdG9yIDogZGVzY3JpcHRvcnMpIHsKKwkJCQlhY3Rpb25zLmFkZChuZXcgQ3JlYXRlU2libGluZ0FjdGlvbihhY3RpdmVFZGl0b3JQYXJ0LCBzZWxlY3Rpb24sIGRlc2NyaXB0b3IpKTsKKwkJCX0KKwkJfQorCQlyZXR1cm4gYWN0aW9uczsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHBvcHVsYXRlcyB0aGUgc3BlY2lmaWVkIDxjb2RlPm1hbmFnZXI8L2NvZGU+IHdpdGgge0BsaW5rIG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5BY3Rpb25Db250cmlidXRpb25JdGVtfXMKKwkgKiBiYXNlZCBvbiB0aGUge0BsaW5rIG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JQWN0aW9ufXMgY29udGFpbmVkIGluIHRoZSA8Y29kZT5hY3Rpb25zPC9jb2RlPiBjb2xsZWN0aW9uLAorCSAqIGJ5IGluc2VydGluZyB0aGVtIGJlZm9yZSB0aGUgc3BlY2lmaWVkIGNvbnRyaWJ1dGlvbiBpdGVtIDxjb2RlPmNvbnRyaWJ1dGlvbklEPC9jb2RlPi4KKwkgKiBJZiA8Y29kZT5jb250cmlidXRpb25JRDwvY29kZT4gaXMgPGNvZGU+bnVsbDwvY29kZT4sIHRoZXkgYXJlIHNpbXBseSBhZGRlZC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBwb3B1bGF0ZU1hbmFnZXIoSUNvbnRyaWJ1dGlvbk1hbmFnZXIgbWFuYWdlciwgQ29sbGVjdGlvbjw/IGV4dGVuZHMgSUFjdGlvbj4gYWN0aW9ucywgU3RyaW5nIGNvbnRyaWJ1dGlvbklEKSB7CisJCWlmIChhY3Rpb25zICE9IG51bGwpIHsKKwkJCWZvciAoSUFjdGlvbiBhY3Rpb24gOiBhY3Rpb25zKSB7CisJCQkJaWYgKGNvbnRyaWJ1dGlvbklEICE9IG51bGwpIHsKKwkJCQkJbWFuYWdlci5pbnNlcnRCZWZvcmUoY29udHJpYnV0aW9uSUQsIGFjdGlvbik7CisJCQkJfQorCQkJCWVsc2UgeworCQkJCQltYW5hZ2VyLmFkZChhY3Rpb24pOworCQkJCX0KKwkJCX0KKwkJfQorCX0KKwkJCisJLyoqCisJICogVGhpcyByZW1vdmVzIGZyb20gdGhlIHNwZWNpZmllZCA8Y29kZT5tYW5hZ2VyPC9jb2RlPiBhbGwge0BsaW5rIG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5BY3Rpb25Db250cmlidXRpb25JdGVtfXMKKwkgKiBiYXNlZCBvbiB0aGUge0BsaW5rIG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JQWN0aW9ufXMgY29udGFpbmVkIGluIHRoZSA8Y29kZT5hY3Rpb25zPC9jb2RlPiBjb2xsZWN0aW9uLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIGRlcG9wdWxhdGVNYW5hZ2VyKElDb250cmlidXRpb25NYW5hZ2VyIG1hbmFnZXIsIENvbGxlY3Rpb248PyBleHRlbmRzIElBY3Rpb24+IGFjdGlvbnMpIHsKKwkJaWYgKGFjdGlvbnMgIT0gbnVsbCkgeworCQkJSUNvbnRyaWJ1dGlvbkl0ZW1bXSBpdGVtcyA9IG1hbmFnZXIuZ2V0SXRlbXMoKTsKKwkJCWZvciAoaW50IGkgPSAwOyBpIDwgaXRlbXMubGVuZ3RoOyBpKyspIHsKKwkJCQkvLyBMb29rIGludG8gU3ViQ29udHJpYnV0aW9uSXRlbXMKKwkJCQkvLworCQkJCUlDb250cmlidXRpb25JdGVtIGNvbnRyaWJ1dGlvbkl0ZW0gPSBpdGVtc1tpXTsKKwkJCQl3aGlsZSAoY29udHJpYnV0aW9uSXRlbSBpbnN0YW5jZW9mIFN1YkNvbnRyaWJ1dGlvbkl0ZW0pIHsKKwkJCQkJY29udHJpYnV0aW9uSXRlbSA9ICgoU3ViQ29udHJpYnV0aW9uSXRlbSljb250cmlidXRpb25JdGVtKS5nZXRJbm5lckl0ZW0oKTsKKwkJCQl9CisKKwkJCQkvLyBEZWxldGUgdGhlIEFjdGlvbkNvbnRyaWJ1dGlvbkl0ZW1zIHdpdGggbWF0Y2hpbmcgYWN0aW9uLgorCQkJCS8vCisJCQkJaWYgKGNvbnRyaWJ1dGlvbkl0ZW0gaW5zdGFuY2VvZiBBY3Rpb25Db250cmlidXRpb25JdGVtKSB7CisJCQkJCUlBY3Rpb24gYWN0aW9uID0gKChBY3Rpb25Db250cmlidXRpb25JdGVtKWNvbnRyaWJ1dGlvbkl0ZW0pLmdldEFjdGlvbigpOworCQkJCQlpZiAoYWN0aW9ucy5jb250YWlucyhhY3Rpb24pKSB7CisJCQkJCQltYW5hZ2VyLnJlbW92ZShjb250cmlidXRpb25JdGVtKTsKKwkJCQkJfQorCQkJCX0KKwkJCX0KKwkJfQorCX0KKworCS8qKgorCSAqIFRoaXMgcG9wdWxhdGVzIHRoZSBwb3AtdXAgbWVudSBiZWZvcmUgaXQgYXBwZWFycy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBtZW51QWJvdXRUb1Nob3coSU1lbnVNYW5hZ2VyIG1lbnVNYW5hZ2VyKSB7CisJCXN1cGVyLm1lbnVBYm91dFRvU2hvdyhtZW51TWFuYWdlcik7CisJCU1lbnVNYW5hZ2VyIHN1Ym1lbnVNYW5hZ2VyID0gbnVsbDsKKworCQlzdWJtZW51TWFuYWdlciA9IG5ldyBNZW51TWFuYWdlcihFeHRlcm5hbERhdGFTb3VyY2VFZGl0b3JQbHVnaW4uSU5TVEFOQ0UuZ2V0U3RyaW5nKCJfVUlfQ3JlYXRlQ2hpbGRfbWVudV9pdGVtIikpOworCQlwb3B1bGF0ZU1hbmFnZXIoc3VibWVudU1hbmFnZXIsIGNyZWF0ZUNoaWxkQWN0aW9ucywgbnVsbCk7CisJCW1lbnVNYW5hZ2VyLmluc2VydEJlZm9yZSgiZWRpdCIsIHN1Ym1lbnVNYW5hZ2VyKTsKKworCQlzdWJtZW51TWFuYWdlciA9IG5ldyBNZW51TWFuYWdlcihFeHRlcm5hbERhdGFTb3VyY2VFZGl0b3JQbHVnaW4uSU5TVEFOQ0UuZ2V0U3RyaW5nKCJfVUlfQ3JlYXRlU2libGluZ19tZW51X2l0ZW0iKSk7CisJCXBvcHVsYXRlTWFuYWdlcihzdWJtZW51TWFuYWdlciwgY3JlYXRlU2libGluZ0FjdGlvbnMsIG51bGwpOworCQltZW51TWFuYWdlci5pbnNlcnRCZWZvcmUoImVkaXQiLCBzdWJtZW51TWFuYWdlcik7CisJfQorCisJLyoqCisJICogVGhpcyBpbnNlcnRzIGdsb2JhbCBhY3Rpb25zIGJlZm9yZSB0aGUgImFkZGl0aW9ucy1lbmQiIHNlcGFyYXRvci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgdm9pZCBhZGRHbG9iYWxBY3Rpb25zKElNZW51TWFuYWdlciBtZW51TWFuYWdlcikgeworCQltZW51TWFuYWdlci5pbnNlcnRBZnRlcigiYWRkaXRpb25zLWVuZCIsIG5ldyBTZXBhcmF0b3IoInVpLWFjdGlvbnMiKSk7CisJCW1lbnVNYW5hZ2VyLmluc2VydEFmdGVyKCJ1aS1hY3Rpb25zIiwgc2hvd1Byb3BlcnRpZXNWaWV3QWN0aW9uKTsKKworCQlyZWZyZXNoVmlld2VyQWN0aW9uLnNldEVuYWJsZWQocmVmcmVzaFZpZXdlckFjdGlvbi5pc0VuYWJsZWQoKSk7CQkKKwkJbWVudU1hbmFnZXIuaW5zZXJ0QWZ0ZXIoInVpLWFjdGlvbnMiLCByZWZyZXNoVmlld2VyQWN0aW9uKTsKKworCQlzdXBlci5hZGRHbG9iYWxBY3Rpb25zKG1lbnVNYW5hZ2VyKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGVuc3VyZXMgdGhhdCBhIGRlbGV0ZSBhY3Rpb24gd2lsbCBjbGVhbiB1cCBhbGwgcmVmZXJlbmNlcyB0byBkZWxldGVkIG9iamVjdHMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIGJvb2xlYW4gcmVtb3ZlQWxsUmVmZXJlbmNlc09uRGVsZXRlKCkgeworCQlyZXR1cm4gdHJ1ZTsKKwl9CisKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy5leHRlcm5hbGRhdGFzb3VyY2Uvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9leHRlcm5hbGRhdGFzb3VyY2UvcHJlc2VudGF0aW9uL0V4dGVybmFsRGF0YVNvdXJjZURpc2Vhc2VNb2RlbEFkYXB0ZXIuamF2YSBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzLmV4dGVybmFsZGF0YXNvdXJjZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL2V4dGVybmFsZGF0YXNvdXJjZS9wcmVzZW50YXRpb24vRXh0ZXJuYWxEYXRhU291cmNlRGlzZWFzZU1vZGVsQWRhcHRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJiMmQ5MWYKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy5leHRlcm5hbGRhdGFzb3VyY2Uvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9leHRlcm5hbGRhdGFzb3VyY2UvcHJlc2VudGF0aW9uL0V4dGVybmFsRGF0YVNvdXJjZURpc2Vhc2VNb2RlbEFkYXB0ZXIuamF2YQpAQCAtMCwwICsxLDQwIEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leHRlcm5hbGRhdGFzb3VyY2UucHJlc2VudGF0aW9uOworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNywgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuRGlzZWFzZU1vZGVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udWkuYWRhcHRlcnMuZGlzZWFzZW1vZGVscHJvcGVydHllZGl0b3IuRGlzZWFzZU1vZGVsUHJvcGVydHlFZGl0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS51aS5hZGFwdGVycy5kaXNlYXNlbW9kZWxwcm9wZXJ0eWVkaXRvci5EaXNlYXNlTW9kZWxQcm9wZXJ0eUVkaXRvckFkYXB0ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS51aS53aXphcmRzLkRpc2Vhc2VNb2RlbFByb3BlcnR5Q29tcG9zaXRlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuTW9kaWZ5TGlzdGVuZXI7CisKKy8qKgorICogCisgKiBBZGFwdGVyIGZvciBQcm9wZXJ0eSBFZGl0b3IKKyAqCisgKi8KK3B1YmxpYyBjbGFzcyBFeHRlcm5hbERhdGFTb3VyY2VEaXNlYXNlTW9kZWxBZGFwdGVyIGV4dGVuZHMKKwkJRGlzZWFzZU1vZGVsUHJvcGVydHlFZGl0b3JBZGFwdGVyIHsKKworCS8qKgorCSAqIAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBEaXNlYXNlTW9kZWxQcm9wZXJ0eUVkaXRvciBjcmVhdGVEaXNlYXNlTW9kZWxQcm9wZXJ0eUVkaXRvcigKKwkJCURpc2Vhc2VNb2RlbFByb3BlcnR5Q29tcG9zaXRlIGRpc2Vhc2VNb2RlbFByb3BlcnR5Q29tcG9zaXRlLAorCQkJaW50IHN0eWxlLCBNb2RpZnlMaXN0ZW5lciBwcm9qZWN0VmFsaWRhdG9yLCBJUHJvamVjdCBwcm9qZWN0KSB7CisJCXJldHVybiBuZXcgRXh0ZXJuYWxEYXRhU291cmNlRGlzZWFzZU1vZGVsUHJvcGVydHlFZGl0b3IoCisJCQkJZGlzZWFzZU1vZGVsUHJvcGVydHlDb21wb3NpdGUsIHN0eWxlLAorCQkJCShEaXNlYXNlTW9kZWwpIGdldFRhcmdldCgpLCBwcm9qZWN0VmFsaWRhdG9yLCBwcm9qZWN0KTsKKwl9IC8vIGNyZWF0ZURpc2Vhc2VNb2RlbFByb3BlcnR5RWRpdG9yCisKK30gLy8gRXh0ZXJuYWxEYXRhU291cmNlRGlzZWFzZU1vZGVsQWRhcHRlcgpkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMuZXh0ZXJuYWxkYXRhc291cmNlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvZXh0ZXJuYWxkYXRhc291cmNlL3ByZXNlbnRhdGlvbi9FeHRlcm5hbERhdGFTb3VyY2VEaXNlYXNlTW9kZWxQcm9wZXJ0eUVkaXRvci5qYXZhIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMuZXh0ZXJuYWxkYXRhc291cmNlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvZXh0ZXJuYWxkYXRhc291cmNlL3ByZXNlbnRhdGlvbi9FeHRlcm5hbERhdGFTb3VyY2VEaXNlYXNlTW9kZWxQcm9wZXJ0eUVkaXRvci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM2NTVjNGMKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy5leHRlcm5hbGRhdGFzb3VyY2Uvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9leHRlcm5hbGRhdGFzb3VyY2UvcHJlc2VudGF0aW9uL0V4dGVybmFsRGF0YVNvdXJjZURpc2Vhc2VNb2RlbFByb3BlcnR5RWRpdG9yLmphdmEKQEAgLTAsMCArMSw4MiBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXh0ZXJuYWxkYXRhc291cmNlLnByZXNlbnRhdGlvbjsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNywgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqYXZhLmlvLkZpbGU7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXh0ZXJuYWxkYXRhc291cmNlLkV4dGVybmFsRGF0YVNvdXJjZURpc2Vhc2VNb2RlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXh0ZXJuYWxkYXRhc291cmNlLkV4dGVybmFsRGF0YVNvdXJjZVBhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLkRpc2Vhc2VNb2RlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnVpLmFkYXB0ZXJzLmRpc2Vhc2Vtb2RlbHByb3BlcnR5ZWRpdG9yLkRpc2Vhc2VNb2RlbFByb3BlcnR5RWRpdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udWkud2l6YXJkcy5EaXNlYXNlV2l6YXJkTWVzc2FnZXM7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5Nb2RpZnlMaXN0ZW5lcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuVGV4dDsKKworLyoqCisgKgorICovCitwdWJsaWMgY2xhc3MgRXh0ZXJuYWxEYXRhU291cmNlRGlzZWFzZU1vZGVsUHJvcGVydHlFZGl0b3IgZXh0ZW5kcworCQlEaXNlYXNlTW9kZWxQcm9wZXJ0eUVkaXRvciB7CisKKwkvKioKKwkgKiBAcGFyYW0gcGFyZW50CisJICogQHBhcmFtIHN0eWxlCisJICogQHBhcmFtIGRpc2Vhc2VNb2RlbAorCSAqIEBwYXJhbSBwcm9qZWN0VmFsaWRhdG9yCisJICovCisJcHVibGljIEV4dGVybmFsRGF0YVNvdXJjZURpc2Vhc2VNb2RlbFByb3BlcnR5RWRpdG9yKENvbXBvc2l0ZSBwYXJlbnQsCisJCQlpbnQgc3R5bGUsIERpc2Vhc2VNb2RlbCBkaXNlYXNlTW9kZWwsCisJCQlNb2RpZnlMaXN0ZW5lciBwcm9qZWN0VmFsaWRhdG9yLCBJUHJvamVjdCBwcm9qZWN0KSB7CisJCXN1cGVyKHBhcmVudCwgc3R5bGUsIGRpc2Vhc2VNb2RlbCwgcHJvamVjdFZhbGlkYXRvciwgcHJvamVjdCk7CisJfSAvLyBFeHRlcm5hbERhdGFTb3VyY2VEaXNlYXNlTW9kZWxQcm9wZXJ0eUVkaXRvcgorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnVpLndpemFyZHMuU3RhbmRhcmREaXNlYXNlTW9kZWxQcm9wZXJ0eUVkaXRvciNwb3B1bGF0ZShvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuRGlzZWFzZU1vZGVsKQorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIHBvcHVsYXRlKERpc2Vhc2VNb2RlbCBkaXNlYXNlTW9kZWwpIHsKKwkJc3VwZXIucG9wdWxhdGUoZGlzZWFzZU1vZGVsKTsKKworCQlpZiAoZGlzZWFzZU1vZGVsIGluc3RhbmNlb2YgRXh0ZXJuYWxEYXRhU291cmNlRGlzZWFzZU1vZGVsKSB7CisJCQlFeHRlcm5hbERhdGFTb3VyY2VEaXNlYXNlTW9kZWwgbW9kZWwgPSAoRXh0ZXJuYWxEYXRhU291cmNlRGlzZWFzZU1vZGVsKSBkaXNlYXNlTW9kZWw7CisKKwkJCW1vZGVsLnNldERhdGFQYXRoKG1hcAorCQkJCQkuZ2V0KEV4dGVybmFsRGF0YVNvdXJjZVBhY2thZ2UuTGl0ZXJhbHMuRVhURVJOQUxfREFUQV9TT1VSQ0VfRElTRUFTRV9NT0RFTF9fREFUQV9QQVRIKQorCQkJCQkuZ2V0VGV4dCgpKTsKKwkJfQorCX0KKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS51aS53aXphcmRzLlN0YW5kYXJkRGlzZWFzZU1vZGVsUHJvcGVydHlFZGl0b3IjdmFsaWRhdGUoKQorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBib29sZWFuIHZhbGlkYXRlKCkgeworCQlpZiAoIXN1cGVyLnZhbGlkYXRlKCkpIHsKKwkJCXJldHVybiBmYWxzZTsKKwkJfQorCisJCS8vIERhdGEgUGF0aAorCQlUZXh0IHRleHQgPSBtYXAKKwkJCQkuZ2V0KEV4dGVybmFsRGF0YVNvdXJjZVBhY2thZ2UuTGl0ZXJhbHMuRVhURVJOQUxfREFUQV9TT1VSQ0VfRElTRUFTRV9NT0RFTF9fREFUQV9QQVRIKTsKKwkJaWYgKHRleHQgIT0gbnVsbCkgeworCQkJaWYgKCEobmV3IEZpbGUodGV4dC5nZXRUZXh0KCkpKS5leGlzdHMoKSkgeworCQkJCWVycm9yTWVzc2FnZSA9IERpc2Vhc2VXaXphcmRNZXNzYWdlcy5nZXRTdHJpbmcoIk5EaXpXaXpFcnIyMCIpOyAvLyROT04tTkxTLTEkCisJCQkJcmV0dXJuIGZhbHNlOworCQkJfQorCQl9CisKKwkJcmV0dXJuIHRydWU7CisJfQorCit9IC8vIEV4dGVybmFsRGF0YVNvdXJjZURpc2Vhc2VNb2RlbFByb3BlcnR5RWRpdG9yCmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy5leHRlcm5hbGRhdGFzb3VyY2Uvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9leHRlcm5hbGRhdGFzb3VyY2UvcHJlc2VudGF0aW9uL0V4dGVybmFsRGF0YVNvdXJjZURpc2Vhc2VNb2RlbFByb3BlcnR5RWRpdG9yQWRhcHRlckZhY3RvcnkuamF2YSBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzLmV4dGVybmFsZGF0YXNvdXJjZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL2V4dGVybmFsZGF0YXNvdXJjZS9wcmVzZW50YXRpb24vRXh0ZXJuYWxEYXRhU291cmNlRGlzZWFzZU1vZGVsUHJvcGVydHlFZGl0b3JBZGFwdGVyRmFjdG9yeS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMxZjAwOGQKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy5leHRlcm5hbGRhdGFzb3VyY2Uvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9leHRlcm5hbGRhdGFzb3VyY2UvcHJlc2VudGF0aW9uL0V4dGVybmFsRGF0YVNvdXJjZURpc2Vhc2VNb2RlbFByb3BlcnR5RWRpdG9yQWRhcHRlckZhY3RvcnkuamF2YQpAQCAtMCwwICsxLDUxIEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leHRlcm5hbGRhdGFzb3VyY2UucHJlc2VudGF0aW9uOworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNywgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5BZGFwdGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leHRlcm5hbGRhdGFzb3VyY2UudXRpbC5FeHRlcm5hbERhdGFTb3VyY2VBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnVpLmFkYXB0ZXJzLmRpc2Vhc2Vtb2RlbHByb3BlcnR5ZWRpdG9yLkRpc2Vhc2VNb2RlbFByb3BlcnR5RWRpdG9yQWRhcHRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnVpLmFkYXB0ZXJzLmRpc2Vhc2Vtb2RlbHByb3BlcnR5ZWRpdG9yLkRpc2Vhc2VNb2RlbFByb3BlcnR5RWRpdG9yQWRhcHRlckZhY3Rvcnk7CisKKy8qKgorICogQGF1dGhvciBqYW1lcworICogCisgKi8KK3B1YmxpYyBjbGFzcyBFeHRlcm5hbERhdGFTb3VyY2VEaXNlYXNlTW9kZWxQcm9wZXJ0eUVkaXRvckFkYXB0ZXJGYWN0b3J5IGV4dGVuZHMKKwkJRXh0ZXJuYWxEYXRhU291cmNlQWRhcHRlckZhY3RvcnkgaW1wbGVtZW50cworCQlEaXNlYXNlTW9kZWxQcm9wZXJ0eUVkaXRvckFkYXB0ZXJGYWN0b3J5IHsKKworCS8qKgorCSAqIAorCSAqLworCXB1YmxpYyBFeHRlcm5hbERhdGFTb3VyY2VEaXNlYXNlTW9kZWxQcm9wZXJ0eUVkaXRvckFkYXB0ZXJGYWN0b3J5KCkgeworCQlzdXBlcigpOworCQlEaXNlYXNlTW9kZWxQcm9wZXJ0eUVkaXRvckFkYXB0ZXJGYWN0b3J5LklOU1RBTkNFCisJCQkJLmFkZEFkYXB0ZXJGYWN0b3J5KHRoaXMpOworCX0KKworCS8qKgorCSAqIAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZUV4dGVybmFsRGF0YVNvdXJjZURpc2Vhc2VNb2RlbEFkYXB0ZXIoKSB7CisJCXJldHVybiBuZXcgRXh0ZXJuYWxEYXRhU291cmNlRGlzZWFzZU1vZGVsQWRhcHRlcigpOworCX0KKworCS8qKgorCSAqIAorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4dGVybmFsZGF0YXNvdXJjZS51dGlsLkV4dGVybmFsRGF0YVNvdXJjZUFkYXB0ZXJGYWN0b3J5I2lzRmFjdG9yeUZvclR5cGUoamF2YS5sYW5nLk9iamVjdCkKKwkgKi8KKwlwdWJsaWMgYm9vbGVhbiBpc0ZhY3RvcnlGb3JUeXBlKE9iamVjdCB0eXBlKSB7CisJCXJldHVybiB0eXBlID09IERpc2Vhc2VNb2RlbFByb3BlcnR5RWRpdG9yQWRhcHRlci5jbGFzcworCQkJCXx8IHN1cGVyLmlzRmFjdG9yeUZvclR5cGUodHlwZSk7CisJfQorfSAvLyBFeHRlcm5hbERhdGFTb3VyY2VEaXNlYXNlTW9kZWxQcm9wZXJ0eUVkaXRvckFkYXB0ZXJGYWN0b3J5CmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy5leHRlcm5hbGRhdGFzb3VyY2Uvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9leHRlcm5hbGRhdGFzb3VyY2UvcHJlc2VudGF0aW9uL0V4dGVybmFsRGF0YVNvdXJjZUVkaXRvci5qYXZhIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMuZXh0ZXJuYWxkYXRhc291cmNlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvZXh0ZXJuYWxkYXRhc291cmNlL3ByZXNlbnRhdGlvbi9FeHRlcm5hbERhdGFTb3VyY2VFZGl0b3IuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNmYzODlhCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMuZXh0ZXJuYWxkYXRhc291cmNlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvZXh0ZXJuYWxkYXRhc291cmNlL3ByZXNlbnRhdGlvbi9FeHRlcm5hbERhdGFTb3VyY2VFZGl0b3IuamF2YQpAQCAtMCwwICsxLDE4MTkgQEAKKy8vIEV4dGVybmFsRGF0YVNvdXJjZUVkaXRvci5qYXZhCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leHRlcm5hbGRhdGFzb3VyY2UucHJlc2VudGF0aW9uOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA3LCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCitpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtOworaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7CitpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247CitpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb25zOworaW1wb3J0IGphdmEudXRpbC5FdmVudE9iamVjdDsKK2ltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKK2ltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7CitpbXBvcnQgamF2YS51dGlsLkxpbmtlZEhhc2hNYXA7CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CitpbXBvcnQgamF2YS51dGlsLk1hcDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklGaWxlOworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklNYXJrZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVJlc291cmNlOworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklSZXNvdXJjZUNoYW5nZUV2ZW50OworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklSZXNvdXJjZUNoYW5nZUxpc3RlbmVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklSZXNvdXJjZURlbHRhOworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklSZXNvdXJjZURlbHRhVmlzaXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5SZXNvdXJjZXNQbHVnaW47CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkNvcmVFeGNlcHRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQYXRoOworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUHJvZ3Jlc3NNb25pdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5OdWxsUHJvZ3Jlc3NNb25pdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24uY29tbWFuZC5CYXNpY0NvbW1hbmRTdGFjazsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLmNvbW1hbmQuQ29tbWFuZDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLmNvbW1hbmQuQ29tbWFuZFN0YWNrOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24uY29tbWFuZC5Db21tYW5kU3RhY2tMaXN0ZW5lcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5BZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51aS5NYXJrZXJIZWxwZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51aS5WaWV3ZXJQYW5lOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udWkuZWRpdG9yLlByb2JsZW1FZGl0b3JQYXJ0OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udWkudmlld2VyLklWaWV3ZXJQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuQmFzaWNEaWFnbm9zdGljOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5EaWFnbm9zdGljOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5VUkk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3Q7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVWYWxpZGF0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnJlc291cmNlLlJlc291cmNlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5yZXNvdXJjZS5SZXNvdXJjZVNldDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUudXRpbC5FQ29udGVudEFkYXB0ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnV0aWwuRWNvcmVVdGlsOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LmRvbWFpbi5BZGFwdGVyRmFjdG9yeUVkaXRpbmdEb21haW47CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQuZG9tYWluLkVkaXRpbmdEb21haW47CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQuZG9tYWluLklFZGl0aW5nRG9tYWluUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuQWRhcHRlckZhY3RvcnlJdGVtRGVsZWdhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkNvbXBvc2VkQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuUmVmbGVjdGl2ZUl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLnJlc291cmNlLlJlc291cmNlSXRlbVByb3ZpZGVyQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkuYWN0aW9uLkVkaXRpbmdEb21haW5BY3Rpb25CYXJDb250cmlidXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5jZWxsZWRpdG9yLkFkYXB0ZXJGYWN0b3J5VHJlZUVkaXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5kbmQuRWRpdGluZ0RvbWFpblZpZXdlckRyb3BBZGFwdGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmRuZC5Mb2NhbFRyYW5zZmVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmRuZC5WaWV3ZXJEcmFnQWRhcHRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5wcm92aWRlci5BZGFwdGVyRmFjdG9yeUNvbnRlbnRQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5wcm92aWRlci5BZGFwdGVyRmFjdG9yeUxhYmVsUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkucHJvdmlkZXIuVW53cmFwcGluZ1NlbGVjdGlvblByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLnV0aWwuRWRpdFVJTWFya2VySGVscGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLnV0aWwuRWRpdFVJVXRpbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS52aWV3LkV4dGVuZGVkUHJvcGVydHlTaGVldFBhZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklNZW51TGlzdGVuZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklNZW51TWFuYWdlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSVN0YXR1c0xpbmVNYW5hZ2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JVG9vbEJhck1hbmFnZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLk1lbnVNYW5hZ2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5TZXBhcmF0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuZGlhbG9ncy5NZXNzYWdlRGlhbG9nOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmRpYWxvZ3MuUHJvZ3Jlc3NNb25pdG9yRGlhbG9nOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuQ29sdW1uV2VpZ2h0RGF0YTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvblByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVN0cnVjdHVyZWRTZWxlY3Rpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5MaXN0Vmlld2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuU2VsZWN0aW9uQ2hhbmdlZEV2ZW50OworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuU3RydWN0dXJlZFNlbGVjdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlN0cnVjdHVyZWRWaWV3ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5UYWJsZUxheW91dDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlRhYmxlVmlld2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuVHJlZVZpZXdlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlZpZXdlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLnByb3ZpZGVyLkNvbW1vbkl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5wcm92aWRlci5HcmFwaEl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5wcm92aWRlci5Nb2RlbEl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLnByb3ZpZGVyLkxhYmVsc0l0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leHRlcm5hbGRhdGFzb3VyY2UucHJvdmlkZXIuRXh0ZXJuYWxEYXRhU291cmNlSXRlbVByb3ZpZGVyQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLnByb3ZpZGVyLlN0YW5kYXJkSXRlbVByb3ZpZGVyQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LlNXVDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuY3VzdG9tLkNUYWJGb2xkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmRuZC5ETkQ7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmRuZC5UcmFuc2ZlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLkNvbnRyb2xBZGFwdGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuQ29udHJvbEV2ZW50OworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ncmFwaGljcy5Qb2ludDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QubGF5b3V0LkZpbGxMYXlvdXQ7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLk1lbnU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuVGFibGU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuVGFibGVDb2x1bW47CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuVHJlZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5UcmVlQ29sdW1uOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklBY3Rpb25CYXJzOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklFZGl0b3JJbnB1dDsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5JRWRpdG9yUGFydDsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5JRWRpdG9yU2l0ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5JUGFydExpc3RlbmVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2hQYXJ0OworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLlBhcnRJbml0RXhjZXB0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLmFjdGlvbnMuV29ya3NwYWNlTW9kaWZ5T3BlcmF0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLmRpYWxvZ3MuU2F2ZUFzRGlhbG9nOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLmlkZS5JR290b01hcmtlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5wYXJ0LkZpbGVFZGl0b3JJbnB1dDsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5wYXJ0Lk11bHRpUGFnZUVkaXRvclBhcnQ7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkudmlld3MuY29udGVudG91dGxpbmUuQ29udGVudE91dGxpbmU7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkudmlld3MuY29udGVudG91dGxpbmUuQ29udGVudE91dGxpbmVQYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLnZpZXdzLmNvbnRlbnRvdXRsaW5lLklDb250ZW50T3V0bGluZVBhZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkudmlld3MucHJvcGVydGllcy5JUHJvcGVydHlTaGVldFBhZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkudmlld3MucHJvcGVydGllcy5Qcm9wZXJ0eVNoZWV0OworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLnZpZXdzLnByb3BlcnRpZXMuUHJvcGVydHlTaGVldFBhZ2U7CisKKworLyoqCisgKiBUaGlzIGlzIGFuIGV4YW1wbGUgb2YgYSBFeHRlcm5hbERhdGFTb3VyY2UgbW9kZWwgZWRpdG9yLgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgRXh0ZXJuYWxEYXRhU291cmNlRWRpdG9yCisJZXh0ZW5kcyBNdWx0aVBhZ2VFZGl0b3JQYXJ0CisJaW1wbGVtZW50cyBJRWRpdGluZ0RvbWFpblByb3ZpZGVyLCBJU2VsZWN0aW9uUHJvdmlkZXIsIElNZW51TGlzdGVuZXIsIElWaWV3ZXJQcm92aWRlciwgSUdvdG9NYXJrZXIgeworCS8qKgorCSAqIFRoaXMga2VlcHMgdHJhY2sgb2YgdGhlIGVkaXRpbmcgZG9tYWluIHRoYXQgaXMgdXNlZCB0byB0cmFjayBhbGwgY2hhbmdlcyB0byB0aGUgbW9kZWwuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIEFkYXB0ZXJGYWN0b3J5RWRpdGluZ0RvbWFpbiBlZGl0aW5nRG9tYWluOworCisJLyoqCisJICogVGhpcyBpcyB0aGUgb25lIGFkYXB0ZXIgZmFjdG9yeSB1c2VkIGZvciBwcm92aWRpbmcgdmlld3Mgb2YgdGhlIG1vZGVsLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBDb21wb3NlZEFkYXB0ZXJGYWN0b3J5IGFkYXB0ZXJGYWN0b3J5OworCisJLyoqCisJICogVGhpcyBpcyB0aGUgY29udGVudCBvdXRsaW5lIHBhZ2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIElDb250ZW50T3V0bGluZVBhZ2UgY29udGVudE91dGxpbmVQYWdlOworCisJLyoqCisJICogVGhpcyBpcyBhIGtsdWRnZS4uLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBJU3RhdHVzTGluZU1hbmFnZXIgY29udGVudE91dGxpbmVTdGF0dXNMaW5lTWFuYWdlcjsKKworCS8qKgorCSAqIFRoaXMgaXMgdGhlIGNvbnRlbnQgb3V0bGluZSBwYWdlJ3Mgdmlld2VyLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBUcmVlVmlld2VyIGNvbnRlbnRPdXRsaW5lVmlld2VyOworCisJLyoqCisJICogVGhpcyBpcyB0aGUgcHJvcGVydHkgc2hlZXQgcGFnZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgUHJvcGVydHlTaGVldFBhZ2UgcHJvcGVydHlTaGVldFBhZ2U7CisKKwkvKioKKwkgKiBUaGlzIGlzIHRoZSB2aWV3ZXIgdGhhdCBzaGFkb3dzIHRoZSBzZWxlY3Rpb24gaW4gdGhlIGNvbnRlbnQgb3V0bGluZS4KKwkgKiBUaGUgcGFyZW50IHJlbGF0aW9uIG11c3QgYmUgY29ycmVjdGx5IGRlZmluZWQgZm9yIHRoaXMgdG8gd29yay4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgVHJlZVZpZXdlciBzZWxlY3Rpb25WaWV3ZXI7CisKKwkvKioKKwkgKiBUaGlzIGludmVydHMgdGhlIHJvbGwgb2YgcGFyZW50IGFuZCBjaGlsZCBpbiB0aGUgY29udGVudCBwcm92aWRlciBhbmQgc2hvdyBwYXJlbnRzIGFzIGEgdHJlZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgVHJlZVZpZXdlciBwYXJlbnRWaWV3ZXI7CisKKwkvKioKKwkgKiBUaGlzIHNob3dzIGhvdyBhIHRyZWUgdmlldyB3b3Jrcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgVHJlZVZpZXdlciB0cmVlVmlld2VyOworCisJLyoqCisJICogVGhpcyBzaG93cyBob3cgYSBsaXN0IHZpZXcgd29ya3MuCisJICogQSBsaXN0IHZpZXdlciBkb2Vzbid0IHN1cHBvcnQgaWNvbnMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIExpc3RWaWV3ZXIgbGlzdFZpZXdlcjsKKworCS8qKgorCSAqIFRoaXMgc2hvd3MgaG93IGEgdGFibGUgdmlldyB3b3Jrcy4KKwkgKiBBIHRhYmxlIGNhbiBiZSB1c2VkIGFzIGEgbGlzdCB3aXRoIGljb25zLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBUYWJsZVZpZXdlciB0YWJsZVZpZXdlcjsKKworCS8qKgorCSAqIFRoaXMgc2hvd3MgaG93IGEgdHJlZSB2aWV3IHdpdGggY29sdW1ucyB3b3Jrcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgVHJlZVZpZXdlciB0cmVlVmlld2VyV2l0aENvbHVtbnM7CisKKwkvKioKKwkgKiBUaGlzIGtlZXBzIHRyYWNrIG9mIHRoZSBhY3RpdmUgdmlld2VyIHBhbmUsIGluIHRoZSBib29rLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBWaWV3ZXJQYW5lIGN1cnJlbnRWaWV3ZXJQYW5lOworCisJLyoqCisJICogVGhpcyBrZWVwcyB0cmFjayBvZiB0aGUgYWN0aXZlIGNvbnRlbnQgdmlld2VyLCB3aGljaCBtYXkgYmUgZWl0aGVyIG9uZSBvZiB0aGUgdmlld2VycyBpbiB0aGUgcGFnZXMgb3IgdGhlIGNvbnRlbnQgb3V0bGluZSB2aWV3ZXIuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIFZpZXdlciBjdXJyZW50Vmlld2VyOworCisJLyoqCisJICogVGhpcyBsaXN0ZW5zIHRvIHdoaWNoIGV2ZXIgdmlld2VyIGlzIGFjdGl2ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lciBzZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXI7CisKKwkvKioKKwkgKiBUaGlzIGtlZXBzIHRyYWNrIG9mIGFsbCB0aGUge0BsaW5rIG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcn1zIHRoYXQgYXJlIGxpc3RlbmluZyB0byB0aGlzIGVkaXRvci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgQ29sbGVjdGlvbjxJU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyPiBzZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXJzID0gbmV3IEFycmF5TGlzdDxJU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyPigpOworCisJLyoqCisJICogVGhpcyBrZWVwcyB0cmFjayBvZiB0aGUgc2VsZWN0aW9uIG9mIHRoZSBlZGl0b3IgYXMgYSB3aG9sZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgSVNlbGVjdGlvbiBlZGl0b3JTZWxlY3Rpb24gPSBTdHJ1Y3R1cmVkU2VsZWN0aW9uLkVNUFRZOworCisJLyoqCisJICogVGhlIE1hcmtlckhlbHBlciBpcyByZXNwb25zaWJsZSBmb3IgY3JlYXRpbmcgd29ya3NwYWNlIHJlc291cmNlIG1hcmtlcnMgcHJlc2VudGVkCisJICogaW4gRWNsaXBzZSdzIFByb2JsZW1zIFZpZXcuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIE1hcmtlckhlbHBlciBtYXJrZXJIZWxwZXIgPSBuZXcgRWRpdFVJTWFya2VySGVscGVyKCk7CisKKwkvKioKKwkgKiBUaGlzIGxpc3RlbnMgZm9yIHdoZW4gdGhlIG91dGxpbmUgYmVjb21lcyBhY3RpdmUKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgSVBhcnRMaXN0ZW5lciBwYXJ0TGlzdGVuZXIgPQorCQluZXcgSVBhcnRMaXN0ZW5lcigpIHsKKwkJCXB1YmxpYyB2b2lkIHBhcnRBY3RpdmF0ZWQoSVdvcmtiZW5jaFBhcnQgcCkgeworCQkJCWlmIChwIGluc3RhbmNlb2YgQ29udGVudE91dGxpbmUpIHsKKwkJCQkJaWYgKCgoQ29udGVudE91dGxpbmUpcCkuZ2V0Q3VycmVudFBhZ2UoKSA9PSBjb250ZW50T3V0bGluZVBhZ2UpIHsKKwkJCQkJCWdldEFjdGlvbkJhckNvbnRyaWJ1dG9yKCkuc2V0QWN0aXZlRWRpdG9yKEV4dGVybmFsRGF0YVNvdXJjZUVkaXRvci50aGlzKTsKKworCQkJCQkJc2V0Q3VycmVudFZpZXdlcihjb250ZW50T3V0bGluZVZpZXdlcik7CisJCQkJCX0KKwkJCQl9CisJCQkJZWxzZSBpZiAocCBpbnN0YW5jZW9mIFByb3BlcnR5U2hlZXQpIHsKKwkJCQkJaWYgKCgoUHJvcGVydHlTaGVldClwKS5nZXRDdXJyZW50UGFnZSgpID09IHByb3BlcnR5U2hlZXRQYWdlKSB7CisJCQkJCQlnZXRBY3Rpb25CYXJDb250cmlidXRvcigpLnNldEFjdGl2ZUVkaXRvcihFeHRlcm5hbERhdGFTb3VyY2VFZGl0b3IudGhpcyk7CisJCQkJCQloYW5kbGVBY3RpdmF0ZSgpOworCQkJCQl9CisJCQkJfQorCQkJCWVsc2UgaWYgKHAgPT0gRXh0ZXJuYWxEYXRhU291cmNlRWRpdG9yLnRoaXMpIHsKKwkJCQkJaGFuZGxlQWN0aXZhdGUoKTsKKwkJCQl9CisJCQl9CisJCQlwdWJsaWMgdm9pZCBwYXJ0QnJvdWdodFRvVG9wKElXb3JrYmVuY2hQYXJ0IHApIHsKKwkJCQkvLyBJZ25vcmUuCisJCQl9CisJCQlwdWJsaWMgdm9pZCBwYXJ0Q2xvc2VkKElXb3JrYmVuY2hQYXJ0IHApIHsKKwkJCQkvLyBJZ25vcmUuCisJCQl9CisJCQlwdWJsaWMgdm9pZCBwYXJ0RGVhY3RpdmF0ZWQoSVdvcmtiZW5jaFBhcnQgcCkgeworCQkJCS8vIElnbm9yZS4KKwkJCX0KKwkJCXB1YmxpYyB2b2lkIHBhcnRPcGVuZWQoSVdvcmtiZW5jaFBhcnQgcCkgeworCQkJCS8vIElnbm9yZS4KKwkJCX0KKwkJfTsKKworCS8qKgorCSAqIFJlc291cmNlcyB0aGF0IGhhdmUgYmVlbiByZW1vdmVkIHNpbmNlIGxhc3QgYWN0aXZhdGlvbi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgQ29sbGVjdGlvbjxSZXNvdXJjZT4gcmVtb3ZlZFJlc291cmNlcyA9IG5ldyBBcnJheUxpc3Q8UmVzb3VyY2U+KCk7CisKKwkvKioKKwkgKiBSZXNvdXJjZXMgdGhhdCBoYXZlIGJlZW4gY2hhbmdlZCBzaW5jZSBsYXN0IGFjdGl2YXRpb24uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIENvbGxlY3Rpb248UmVzb3VyY2U+IGNoYW5nZWRSZXNvdXJjZXMgPSBuZXcgQXJyYXlMaXN0PFJlc291cmNlPigpOworCisJLyoqCisJICogUmVzb3VyY2VzIHRoYXQgaGF2ZSBiZWVuIHNhdmVkLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBDb2xsZWN0aW9uPFJlc291cmNlPiBzYXZlZFJlc291cmNlcyA9IG5ldyBBcnJheUxpc3Q8UmVzb3VyY2U+KCk7CisKKwkvKioKKwkgKiBNYXAgdG8gc3RvcmUgdGhlIGRpYWdub3N0aWMgYXNzb2NpYXRlZCB3aXRoIGEgcmVzb3VyY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIE1hcDxSZXNvdXJjZSwgRGlhZ25vc3RpYz4gcmVzb3VyY2VUb0RpYWdub3N0aWNNYXAgPSBuZXcgTGlua2VkSGFzaE1hcDxSZXNvdXJjZSwgRGlhZ25vc3RpYz4oKTsKKworCS8qKgorCSAqIENvbnRyb2xzIHdoZXRoZXIgdGhlIHByb2JsZW0gaW5kaWNhdGlvbiBzaG91bGQgYmUgdXBkYXRlZC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgYm9vbGVhbiB1cGRhdGVQcm9ibGVtSW5kaWNhdGlvbiA9IHRydWU7CisKKwkvKioKKwkgKiBBZGFwdGVyIHVzZWQgdG8gdXBkYXRlIHRoZSBwcm9ibGVtIGluZGljYXRpb24gd2hlbiByZXNvdXJjZXMgYXJlIGRlbWFuZGVkIGxvYWRlZC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgRUNvbnRlbnRBZGFwdGVyIHByb2JsZW1JbmRpY2F0aW9uQWRhcHRlciA9IAorCQluZXcgRUNvbnRlbnRBZGFwdGVyKCkgeworCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgdm9pZCBub3RpZnlDaGFuZ2VkKE5vdGlmaWNhdGlvbiBub3RpZmljYXRpb24pIHsKKwkJCQlpZiAobm90aWZpY2F0aW9uLmdldE5vdGlmaWVyKCkgaW5zdGFuY2VvZiBSZXNvdXJjZSkgeworCQkJCQlzd2l0Y2ggKG5vdGlmaWNhdGlvbi5nZXRGZWF0dXJlSUQoUmVzb3VyY2UuY2xhc3MpKSB7CisJCQkJCQljYXNlIFJlc291cmNlLlJFU09VUkNFX19JU19MT0FERUQ6CisJCQkJCQljYXNlIFJlc291cmNlLlJFU09VUkNFX19FUlJPUlM6CisJCQkJCQljYXNlIFJlc291cmNlLlJFU09VUkNFX19XQVJOSU5HUzogeworCQkJCQkJCVJlc291cmNlIHJlc291cmNlID0gKFJlc291cmNlKW5vdGlmaWNhdGlvbi5nZXROb3RpZmllcigpOworCQkJCQkJCURpYWdub3N0aWMgZGlhZ25vc3RpYyA9IGFuYWx5emVSZXNvdXJjZVByb2JsZW1zKHJlc291cmNlLCBudWxsKTsKKwkJCQkJCQlpZiAoZGlhZ25vc3RpYy5nZXRTZXZlcml0eSgpICE9IERpYWdub3N0aWMuT0spIHsKKwkJCQkJCQkJcmVzb3VyY2VUb0RpYWdub3N0aWNNYXAucHV0KHJlc291cmNlLCBkaWFnbm9zdGljKTsKKwkJCQkJCQl9CisJCQkJCQkJZWxzZSB7CisJCQkJCQkJCXJlc291cmNlVG9EaWFnbm9zdGljTWFwLnJlbW92ZShyZXNvdXJjZSk7CisJCQkJCQkJfQorCisJCQkJCQkJaWYgKHVwZGF0ZVByb2JsZW1JbmRpY2F0aW9uKSB7CisJCQkJCQkJCWdldFNpdGUoKS5nZXRTaGVsbCgpLmdldERpc3BsYXkoKS5hc3luY0V4ZWMKKwkJCQkJCQkJCShuZXcgUnVubmFibGUoKSB7CisJCQkJCQkJCQkJIHB1YmxpYyB2b2lkIHJ1bigpIHsKKwkJCQkJCQkJCQkJIHVwZGF0ZVByb2JsZW1JbmRpY2F0aW9uKCk7CisJCQkJCQkJCQkJIH0KKwkJCQkJCQkJCSB9KTsKKwkJCQkJCQl9CisJCQkJCQkJYnJlYWs7CisJCQkJCQl9CisJCQkJCX0KKwkJCQl9CisJCQkJZWxzZSB7CisJCQkJCXN1cGVyLm5vdGlmeUNoYW5nZWQobm90aWZpY2F0aW9uKTsKKwkJCQl9CisJCQl9CisKKwkJCUBPdmVycmlkZQorCQkJcHJvdGVjdGVkIHZvaWQgc2V0VGFyZ2V0KFJlc291cmNlIHRhcmdldCkgeworCQkJCWJhc2ljU2V0VGFyZ2V0KHRhcmdldCk7CisJCQl9CisKKwkJCUBPdmVycmlkZQorCQkJcHJvdGVjdGVkIHZvaWQgdW5zZXRUYXJnZXQoUmVzb3VyY2UgdGFyZ2V0KSB7CisJCQkJYmFzaWNVbnNldFRhcmdldCh0YXJnZXQpOworCQkJfQorCQl9OworCisJLyoqCisJICogVGhpcyBsaXN0ZW5zIGZvciB3b3Jrc3BhY2UgY2hhbmdlcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgSVJlc291cmNlQ2hhbmdlTGlzdGVuZXIgcmVzb3VyY2VDaGFuZ2VMaXN0ZW5lciA9CisJCW5ldyBJUmVzb3VyY2VDaGFuZ2VMaXN0ZW5lcigpIHsKKwkJCXB1YmxpYyB2b2lkIHJlc291cmNlQ2hhbmdlZChJUmVzb3VyY2VDaGFuZ2VFdmVudCBldmVudCkgeworCQkJCS8vIE9ubHkgbGlzdGVuaW5nIHRvIHRoZXNlLgorCQkJCS8vIGlmIChldmVudC5nZXRUeXBlKCkgPT0gSVJlc291cmNlRGVsdGEuUE9TVF9DSEFOR0UpCisJCQkJeworCQkJCQlJUmVzb3VyY2VEZWx0YSBkZWx0YSA9IGV2ZW50LmdldERlbHRhKCk7CisJCQkJCXRyeSB7CisJCQkJCQljbGFzcyBSZXNvdXJjZURlbHRhVmlzaXRvciBpbXBsZW1lbnRzIElSZXNvdXJjZURlbHRhVmlzaXRvciB7CisJCQkJCQkJcHJvdGVjdGVkIFJlc291cmNlU2V0IHJlc291cmNlU2V0ID0gZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpOworCQkJCQkJCXByb3RlY3RlZCBDb2xsZWN0aW9uPFJlc291cmNlPiBjaGFuZ2VkUmVzb3VyY2VzID0gbmV3IEFycmF5TGlzdDxSZXNvdXJjZT4oKTsKKwkJCQkJCQlwcm90ZWN0ZWQgQ29sbGVjdGlvbjxSZXNvdXJjZT4gcmVtb3ZlZFJlc291cmNlcyA9IG5ldyBBcnJheUxpc3Q8UmVzb3VyY2U+KCk7CisKKwkJCQkJCQlwdWJsaWMgYm9vbGVhbiB2aXNpdChJUmVzb3VyY2VEZWx0YSBkZWx0YSkgeworCQkJCQkJCQlpZiAoZGVsdGEuZ2V0RmxhZ3MoKSAhPSBJUmVzb3VyY2VEZWx0YS5NQVJLRVJTICYmCisJCQkJCQkJCSAgICBkZWx0YS5nZXRSZXNvdXJjZSgpLmdldFR5cGUoKSA9PSBJUmVzb3VyY2UuRklMRSkgeworCQkJCQkJCQkJaWYgKChkZWx0YS5nZXRLaW5kKCkgJiAoSVJlc291cmNlRGVsdGEuQ0hBTkdFRCB8IElSZXNvdXJjZURlbHRhLlJFTU9WRUQpKSAhPSAwKSB7CisJCQkJCQkJCQkJUmVzb3VyY2UgcmVzb3VyY2UgPSByZXNvdXJjZVNldC5nZXRSZXNvdXJjZShVUkkuY3JlYXRlVVJJKGRlbHRhLmdldEZ1bGxQYXRoKCkudG9TdHJpbmcoKSksIGZhbHNlKTsKKwkJCQkJCQkJCQlpZiAocmVzb3VyY2UgIT0gbnVsbCkgeworCQkJCQkJCQkJCQlpZiAoKGRlbHRhLmdldEtpbmQoKSAmIElSZXNvdXJjZURlbHRhLlJFTU9WRUQpICE9IDApIHsKKwkJCQkJCQkJCQkJCXJlbW92ZWRSZXNvdXJjZXMuYWRkKHJlc291cmNlKTsKKwkJCQkJCQkJCQkJfQorCQkJCQkJCQkJCQllbHNlIGlmICghc2F2ZWRSZXNvdXJjZXMucmVtb3ZlKHJlc291cmNlKSkgeworCQkJCQkJCQkJCQkJY2hhbmdlZFJlc291cmNlcy5hZGQocmVzb3VyY2UpOworCQkJCQkJCQkJCQl9CisJCQkJCQkJCQkJfQorCQkJCQkJCQkJfQorCQkJCQkJCQl9CisKKwkJCQkJCQkJcmV0dXJuIHRydWU7CisJCQkJCQkJfQorCisJCQkJCQkJcHVibGljIENvbGxlY3Rpb248UmVzb3VyY2U+IGdldENoYW5nZWRSZXNvdXJjZXMoKSB7CisJCQkJCQkJCXJldHVybiBjaGFuZ2VkUmVzb3VyY2VzOworCQkJCQkJCX0KKworCQkJCQkJCXB1YmxpYyBDb2xsZWN0aW9uPFJlc291cmNlPiBnZXRSZW1vdmVkUmVzb3VyY2VzKCkgeworCQkJCQkJCQlyZXR1cm4gcmVtb3ZlZFJlc291cmNlczsKKwkJCQkJCQl9CisJCQkJCQl9CisKKwkJCQkJCVJlc291cmNlRGVsdGFWaXNpdG9yIHZpc2l0b3IgPSBuZXcgUmVzb3VyY2VEZWx0YVZpc2l0b3IoKTsKKwkJCQkJCWRlbHRhLmFjY2VwdCh2aXNpdG9yKTsKKworCQkJCQkJaWYgKCF2aXNpdG9yLmdldFJlbW92ZWRSZXNvdXJjZXMoKS5pc0VtcHR5KCkpIHsKKwkJCQkJCQlyZW1vdmVkUmVzb3VyY2VzLmFkZEFsbCh2aXNpdG9yLmdldFJlbW92ZWRSZXNvdXJjZXMoKSk7CisJCQkJCQkJaWYgKCFpc0RpcnR5KCkpIHsKKwkJCQkJCQkJZ2V0U2l0ZSgpLmdldFNoZWxsKCkuZ2V0RGlzcGxheSgpLmFzeW5jRXhlYworCQkJCQkJCQkJKG5ldyBSdW5uYWJsZSgpIHsKKwkJCQkJCQkJCQkgcHVibGljIHZvaWQgcnVuKCkgeworCQkJCQkJCQkJCQkgZ2V0U2l0ZSgpLmdldFBhZ2UoKS5jbG9zZUVkaXRvcihFeHRlcm5hbERhdGFTb3VyY2VFZGl0b3IudGhpcywgZmFsc2UpOworCQkJCQkJCQkJCQkgRXh0ZXJuYWxEYXRhU291cmNlRWRpdG9yLnRoaXMuZGlzcG9zZSgpOworCQkJCQkJCQkJCSB9CisJCQkJCQkJCQkgfSk7CisJCQkJCQkJfQorCQkJCQkJfQorCisJCQkJCQlpZiAoIXZpc2l0b3IuZ2V0Q2hhbmdlZFJlc291cmNlcygpLmlzRW1wdHkoKSkgeworCQkJCQkJCWNoYW5nZWRSZXNvdXJjZXMuYWRkQWxsKHZpc2l0b3IuZ2V0Q2hhbmdlZFJlc291cmNlcygpKTsKKwkJCQkJCQlpZiAoZ2V0U2l0ZSgpLmdldFBhZ2UoKS5nZXRBY3RpdmVFZGl0b3IoKSA9PSBFeHRlcm5hbERhdGFTb3VyY2VFZGl0b3IudGhpcykgeworCQkJCQkJCQlnZXRTaXRlKCkuZ2V0U2hlbGwoKS5nZXREaXNwbGF5KCkuYXN5bmNFeGVjCisJCQkJCQkJCQkobmV3IFJ1bm5hYmxlKCkgeworCQkJCQkJCQkJCSBwdWJsaWMgdm9pZCBydW4oKSB7CisJCQkJCQkJCQkJCSBoYW5kbGVBY3RpdmF0ZSgpOworCQkJCQkJCQkJCSB9CisJCQkJCQkJCQkgfSk7CisJCQkJCQkJfQorCQkJCQkJfQorCQkJCQl9CisJCQkJCWNhdGNoIChDb3JlRXhjZXB0aW9uIGV4Y2VwdGlvbikgeworCQkJCQkJRXh0ZXJuYWxEYXRhU291cmNlRWRpdG9yUGx1Z2luLklOU1RBTkNFLmxvZyhleGNlcHRpb24pOworCQkJCQl9CisJCQkJfQorCQkJfQorCQl9OworCisJLyoqCisJICogSGFuZGxlcyBhY3RpdmF0aW9uIG9mIHRoZSBlZGl0b3Igb3IgaXQncyBhc3NvY2lhdGVkIHZpZXdzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIGhhbmRsZUFjdGl2YXRlKCkgeworCQkvLyBSZWNvbXB1dGUgdGhlIHJlYWQgb25seSBzdGF0ZS4KKwkJLy8KKwkJaWYgKGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VUb1JlYWRPbmx5TWFwKCkgIT0gbnVsbCkgeworCQkgIGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VUb1JlYWRPbmx5TWFwKCkuY2xlYXIoKTsKKworCQkgIC8vIFJlZnJlc2ggYW55IGFjdGlvbnMgdGhhdCBtYXkgYmVjb21lIGVuYWJsZWQgb3IgZGlzYWJsZWQuCisJCSAgLy8KKwkJICBzZXRTZWxlY3Rpb24oZ2V0U2VsZWN0aW9uKCkpOworCQl9CisKKwkJaWYgKCFyZW1vdmVkUmVzb3VyY2VzLmlzRW1wdHkoKSkgeworCQkJaWYgKGhhbmRsZURpcnR5Q29uZmxpY3QoKSkgeworCQkJCWdldFNpdGUoKS5nZXRQYWdlKCkuY2xvc2VFZGl0b3IoRXh0ZXJuYWxEYXRhU291cmNlRWRpdG9yLnRoaXMsIGZhbHNlKTsKKwkJCQlFeHRlcm5hbERhdGFTb3VyY2VFZGl0b3IudGhpcy5kaXNwb3NlKCk7CisJCQl9CisJCQllbHNlIHsKKwkJCQlyZW1vdmVkUmVzb3VyY2VzLmNsZWFyKCk7CisJCQkJY2hhbmdlZFJlc291cmNlcy5jbGVhcigpOworCQkJCXNhdmVkUmVzb3VyY2VzLmNsZWFyKCk7CisJCQl9CisJCX0KKwkJZWxzZSBpZiAoIWNoYW5nZWRSZXNvdXJjZXMuaXNFbXB0eSgpKSB7CisJCQljaGFuZ2VkUmVzb3VyY2VzLnJlbW92ZUFsbChzYXZlZFJlc291cmNlcyk7CisJCQloYW5kbGVDaGFuZ2VkUmVzb3VyY2VzKCk7CisJCQljaGFuZ2VkUmVzb3VyY2VzLmNsZWFyKCk7CisJCQlzYXZlZFJlc291cmNlcy5jbGVhcigpOworCQl9CisJfQorCisJLyoqCisJICogSGFuZGxlcyB3aGF0IHRvIGRvIHdpdGggY2hhbmdlZCByZXNvdXJjZXMgb24gYWN0aXZhdGlvbi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBoYW5kbGVDaGFuZ2VkUmVzb3VyY2VzKCkgeworCQlpZiAoIWNoYW5nZWRSZXNvdXJjZXMuaXNFbXB0eSgpICYmICghaXNEaXJ0eSgpIHx8IGhhbmRsZURpcnR5Q29uZmxpY3QoKSkpIHsKKwkJCWVkaXRpbmdEb21haW4uZ2V0Q29tbWFuZFN0YWNrKCkuZmx1c2goKTsKKworCQkJdXBkYXRlUHJvYmxlbUluZGljYXRpb24gPSBmYWxzZTsKKwkJCWZvciAoUmVzb3VyY2UgcmVzb3VyY2UgOiBjaGFuZ2VkUmVzb3VyY2VzKSB7CisJCQkJaWYgKHJlc291cmNlLmlzTG9hZGVkKCkpIHsKKwkJCQkJcmVzb3VyY2UudW5sb2FkKCk7CisJCQkJCXRyeSB7CisJCQkJCQlyZXNvdXJjZS5sb2FkKENvbGxlY3Rpb25zLkVNUFRZX01BUCk7CisJCQkJCX0KKwkJCQkJY2F0Y2ggKElPRXhjZXB0aW9uIGV4Y2VwdGlvbikgeworCQkJCQkJaWYgKCFyZXNvdXJjZVRvRGlhZ25vc3RpY01hcC5jb250YWluc0tleShyZXNvdXJjZSkpIHsKKwkJCQkJCQlyZXNvdXJjZVRvRGlhZ25vc3RpY01hcC5wdXQocmVzb3VyY2UsIGFuYWx5emVSZXNvdXJjZVByb2JsZW1zKHJlc291cmNlLCBleGNlcHRpb24pKTsKKwkJCQkJCX0KKwkJCQkJfQorCQkJCX0KKwkJCX0KKwkJCXVwZGF0ZVByb2JsZW1JbmRpY2F0aW9uID0gdHJ1ZTsKKwkJCXVwZGF0ZVByb2JsZW1JbmRpY2F0aW9uKCk7CisJCX0KKwl9CisgIAorCS8qKgorCSAqIFVwZGF0ZXMgdGhlIHByb2JsZW1zIGluZGljYXRpb24gd2l0aCB0aGUgaW5mb3JtYXRpb24gZGVzY3JpYmVkIGluIHRoZSBzcGVjaWZpZWQgZGlhZ25vc3RpYy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCB1cGRhdGVQcm9ibGVtSW5kaWNhdGlvbigpIHsKKwkJaWYgKHVwZGF0ZVByb2JsZW1JbmRpY2F0aW9uKSB7CisJCQlCYXNpY0RpYWdub3N0aWMgZGlhZ25vc3RpYyA9CisJCQkJbmV3IEJhc2ljRGlhZ25vc3RpYworCQkJCQkoRGlhZ25vc3RpYy5PSywKKwkJCQkJICJvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXh0ZXJuYWxkYXRhc291cmNlLmVkaXRvciIsCisJCQkJCSAwLAorCQkJCQkgbnVsbCwKKwkJCQkJIG5ldyBPYmplY3QgW10geyBlZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkgfSk7CisJCQlmb3IgKERpYWdub3N0aWMgY2hpbGREaWFnbm9zdGljIDogcmVzb3VyY2VUb0RpYWdub3N0aWNNYXAudmFsdWVzKCkpIHsKKwkJCQlpZiAoY2hpbGREaWFnbm9zdGljLmdldFNldmVyaXR5KCkgIT0gRGlhZ25vc3RpYy5PSykgeworCQkJCQlkaWFnbm9zdGljLmFkZChjaGlsZERpYWdub3N0aWMpOworCQkJCX0KKwkJCX0KKworCQkJaW50IGxhc3RFZGl0b3JQYWdlID0gZ2V0UGFnZUNvdW50KCkgLSAxOworCQkJaWYgKGxhc3RFZGl0b3JQYWdlID49IDAgJiYgZ2V0RWRpdG9yKGxhc3RFZGl0b3JQYWdlKSBpbnN0YW5jZW9mIFByb2JsZW1FZGl0b3JQYXJ0KSB7CisJCQkJKChQcm9ibGVtRWRpdG9yUGFydClnZXRFZGl0b3IobGFzdEVkaXRvclBhZ2UpKS5zZXREaWFnbm9zdGljKGRpYWdub3N0aWMpOworCQkJCWlmIChkaWFnbm9zdGljLmdldFNldmVyaXR5KCkgIT0gRGlhZ25vc3RpYy5PSykgeworCQkJCQlzZXRBY3RpdmVQYWdlKGxhc3RFZGl0b3JQYWdlKTsKKwkJCQl9CisJCQl9CisJCQllbHNlIGlmIChkaWFnbm9zdGljLmdldFNldmVyaXR5KCkgIT0gRGlhZ25vc3RpYy5PSykgeworCQkJCVByb2JsZW1FZGl0b3JQYXJ0IHByb2JsZW1FZGl0b3JQYXJ0ID0gbmV3IFByb2JsZW1FZGl0b3JQYXJ0KCk7CisJCQkJcHJvYmxlbUVkaXRvclBhcnQuc2V0RGlhZ25vc3RpYyhkaWFnbm9zdGljKTsKKwkJCQlwcm9ibGVtRWRpdG9yUGFydC5zZXRNYXJrZXJIZWxwZXIobWFya2VySGVscGVyKTsKKwkJCQl0cnkgeworCQkJCQlhZGRQYWdlKCsrbGFzdEVkaXRvclBhZ2UsIHByb2JsZW1FZGl0b3JQYXJ0LCBnZXRFZGl0b3JJbnB1dCgpKTsKKwkJCQkJc2V0UGFnZVRleHQobGFzdEVkaXRvclBhZ2UsIHByb2JsZW1FZGl0b3JQYXJ0LmdldFBhcnROYW1lKCkpOworCQkJCQlzZXRBY3RpdmVQYWdlKGxhc3RFZGl0b3JQYWdlKTsKKwkJCQkJc2hvd1RhYnMoKTsKKwkJCQl9CisJCQkJY2F0Y2ggKFBhcnRJbml0RXhjZXB0aW9uIGV4Y2VwdGlvbikgeworCQkJCQlFeHRlcm5hbERhdGFTb3VyY2VFZGl0b3JQbHVnaW4uSU5TVEFOQ0UubG9nKGV4Y2VwdGlvbik7CisJCQkJfQorCQkJfQorCisJCQlpZiAobWFya2VySGVscGVyLmhhc01hcmtlcnMoZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpKSkgeworCQkJCW1hcmtlckhlbHBlci5kZWxldGVNYXJrZXJzKGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKSk7CisJCQkJaWYgKGRpYWdub3N0aWMuZ2V0U2V2ZXJpdHkoKSAhPSBEaWFnbm9zdGljLk9LKSB7CisJCQkJCXRyeSB7CisJCQkJCQltYXJrZXJIZWxwZXIuY3JlYXRlTWFya2VycyhkaWFnbm9zdGljKTsKKwkJCQkJfQorCQkJCQljYXRjaCAoQ29yZUV4Y2VwdGlvbiBleGNlcHRpb24pIHsKKwkJCQkJCUV4dGVybmFsRGF0YVNvdXJjZUVkaXRvclBsdWdpbi5JTlNUQU5DRS5sb2coZXhjZXB0aW9uKTsKKwkJCQkJfQorCQkJCX0KKwkJCX0KKwkJfQorCX0KKworCS8qKgorCSAqIFNob3dzIGEgZGlhbG9nIHRoYXQgYXNrcyBpZiBjb25mbGljdGluZyBjaGFuZ2VzIHNob3VsZCBiZSBkaXNjYXJkZWQuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIGJvb2xlYW4gaGFuZGxlRGlydHlDb25mbGljdCgpIHsKKwkJcmV0dXJuCisJCQlNZXNzYWdlRGlhbG9nLm9wZW5RdWVzdGlvbgorCQkJCShnZXRTaXRlKCkuZ2V0U2hlbGwoKSwKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfRmlsZUNvbmZsaWN0X2xhYmVsIiksCisJCQkJIGdldFN0cmluZygiX1dBUk5fRmlsZUNvbmZsaWN0IikpOworCX0KKworCS8qKgorCSAqIFRoaXMgY3JlYXRlcyBhIG1vZGVsIGVkaXRvci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRXh0ZXJuYWxEYXRhU291cmNlRWRpdG9yKCkgeworCQlzdXBlcigpOworCQlpbml0aWFsaXplRWRpdGluZ0RvbWFpbigpOworCX0KKworCS8qKgorCSAqIFRoaXMgc2V0cyB1cCB0aGUgZWRpdGluZyBkb21haW4gZm9yIHRoZSBtb2RlbCBlZGl0b3IuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgaW5pdGlhbGl6ZUVkaXRpbmdEb21haW4oKSB7CisJCS8vIENyZWF0ZSBhbiBhZGFwdGVyIGZhY3RvcnkgdGhhdCB5aWVsZHMgaXRlbSBwcm92aWRlcnMuCisJCS8vCisJCWFkYXB0ZXJGYWN0b3J5ID0gbmV3IENvbXBvc2VkQWRhcHRlckZhY3RvcnkoQ29tcG9zZWRBZGFwdGVyRmFjdG9yeS5EZXNjcmlwdG9yLlJlZ2lzdHJ5LklOU1RBTkNFKTsKKworCQlhZGFwdGVyRmFjdG9yeS5hZGRBZGFwdGVyRmFjdG9yeShuZXcgUmVzb3VyY2VJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSgpKTsKKwkJYWRhcHRlckZhY3RvcnkuYWRkQWRhcHRlckZhY3RvcnkobmV3IEV4dGVybmFsRGF0YVNvdXJjZUl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5KCkpOworCQlhZGFwdGVyRmFjdG9yeS5hZGRBZGFwdGVyRmFjdG9yeShuZXcgU3RhbmRhcmRJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSgpKTsKKwkJYWRhcHRlckZhY3RvcnkuYWRkQWRhcHRlckZhY3RvcnkobmV3IENvbW1vbkl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5KCkpOworCQlhZGFwdGVyRmFjdG9yeS5hZGRBZGFwdGVyRmFjdG9yeShuZXcgTW9kZWxJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSgpKTsKKwkJYWRhcHRlckZhY3RvcnkuYWRkQWRhcHRlckZhY3RvcnkobmV3IEdyYXBoSXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkoKSk7CisJCWFkYXB0ZXJGYWN0b3J5LmFkZEFkYXB0ZXJGYWN0b3J5KG5ldyBMYWJlbHNJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSgpKTsKKwkJYWRhcHRlckZhY3RvcnkuYWRkQWRhcHRlckZhY3RvcnkobmV3IFJlZmxlY3RpdmVJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSgpKTsKKworCQkvLyBDcmVhdGUgdGhlIGNvbW1hbmQgc3RhY2sgdGhhdCB3aWxsIG5vdGlmeSB0aGlzIGVkaXRvciBhcyBjb21tYW5kcyBhcmUgZXhlY3V0ZWQuCisJCS8vCisJCUJhc2ljQ29tbWFuZFN0YWNrIGNvbW1hbmRTdGFjayA9IG5ldyBCYXNpY0NvbW1hbmRTdGFjaygpOworCisJCS8vIEFkZCBhIGxpc3RlbmVyIHRvIHNldCB0aGUgbW9zdCByZWNlbnQgY29tbWFuZCdzIGFmZmVjdGVkIG9iamVjdHMgdG8gYmUgdGhlIHNlbGVjdGlvbiBvZiB0aGUgdmlld2VyIHdpdGggZm9jdXMuCisJCS8vCisJCWNvbW1hbmRTdGFjay5hZGRDb21tYW5kU3RhY2tMaXN0ZW5lcgorCQkJKG5ldyBDb21tYW5kU3RhY2tMaXN0ZW5lcigpIHsKKwkJCQkgQFN1cHByZXNzV2FybmluZ3MoInN5bnRoZXRpYy1hY2Nlc3MiKQorCQkJCXB1YmxpYyB2b2lkIGNvbW1hbmRTdGFja0NoYW5nZWQoZmluYWwgRXZlbnRPYmplY3QgZXZlbnQpIHsKKwkJCQkJIGdldENvbnRhaW5lcigpLmdldERpc3BsYXkoKS5hc3luY0V4ZWMKKwkJCQkJCSAobmV3IFJ1bm5hYmxlKCkgeworCQkJCQkJCSAgcHVibGljIHZvaWQgcnVuKCkgeworCQkJCQkJCQkgIGZpcmVQcm9wZXJ0eUNoYW5nZShJRWRpdG9yUGFydC5QUk9QX0RJUlRZKTsKKworCQkJCQkJCQkgIC8vIFRyeSB0byBzZWxlY3QgdGhlIGFmZmVjdGVkIG9iamVjdHMuCisJCQkJCQkJCSAgLy8KKwkJCQkJCQkJICBDb21tYW5kIG1vc3RSZWNlbnRDb21tYW5kID0gKChDb21tYW5kU3RhY2spZXZlbnQuZ2V0U291cmNlKCkpLmdldE1vc3RSZWNlbnRDb21tYW5kKCk7CisJCQkJCQkJCSAgaWYgKG1vc3RSZWNlbnRDb21tYW5kICE9IG51bGwpIHsKKwkJCQkJCQkJCSAgc2V0U2VsZWN0aW9uVG9WaWV3ZXIobW9zdFJlY2VudENvbW1hbmQuZ2V0QWZmZWN0ZWRPYmplY3RzKCkpOworCQkJCQkJCQkgIH0KKwkJCQkJCQkJICBpZiAocHJvcGVydHlTaGVldFBhZ2UgIT0gbnVsbCAmJiAhcHJvcGVydHlTaGVldFBhZ2UuZ2V0Q29udHJvbCgpLmlzRGlzcG9zZWQoKSkgeworCQkJCQkJCQkJICBwcm9wZXJ0eVNoZWV0UGFnZS5yZWZyZXNoKCk7CisJCQkJCQkJCSAgfQorCQkJCQkJCSAgfQorCQkJCQkJICB9KTsKKwkJCQkgfQorCQkJIH0pOworCisJCS8vIENyZWF0ZSB0aGUgZWRpdGluZyBkb21haW4gd2l0aCBhIHNwZWNpYWwgY29tbWFuZCBzdGFjay4KKwkJLy8KKwkJZWRpdGluZ0RvbWFpbiA9IG5ldyBBZGFwdGVyRmFjdG9yeUVkaXRpbmdEb21haW4oYWRhcHRlckZhY3RvcnksIGNvbW1hbmRTdGFjaywgbmV3IEhhc2hNYXA8UmVzb3VyY2UsIEJvb2xlYW4+KCkpOworCX0KKworCS8qKgorCSAqIFRoaXMgaXMgaGVyZSBmb3IgdGhlIGxpc3RlbmVyIHRvIGJlIGFibGUgdG8gY2FsbCBpdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwkJCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIGZpcmVQcm9wZXJ0eUNoYW5nZShpbnQgYWN0aW9uKSB7CisJCXN1cGVyLmZpcmVQcm9wZXJ0eUNoYW5nZShhY3Rpb24pOworCX0KKworCS8qKgorCSAqIFRoaXMgc2V0cyB0aGUgc2VsZWN0aW9uIGludG8gd2hpY2hldmVyIHZpZXdlciBpcyBhY3RpdmUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gY29sbGVjdGlvbiAKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgc2V0U2VsZWN0aW9uVG9WaWV3ZXIoQ29sbGVjdGlvbjw/PiBjb2xsZWN0aW9uKSB7CisJCWZpbmFsIENvbGxlY3Rpb248Pz4gdGhlU2VsZWN0aW9uID0gY29sbGVjdGlvbjsKKwkJLy8gTWFrZSBzdXJlIGl0J3Mgb2theS4KKwkJLy8KKwkJaWYgKHRoZVNlbGVjdGlvbiAhPSBudWxsICYmICF0aGVTZWxlY3Rpb24uaXNFbXB0eSgpKSB7CisJCQkvLyBJIGRvbid0IGtub3cgaWYgdGhpcyBzaG91bGQgYmUgcnVuIHRoaXMgZGVmZXJyZWQKKwkJCS8vIGJlY2F1c2Ugd2UgbWlnaHQgaGF2ZSB0byBnaXZlIHRoZSBlZGl0b3IgYSBjaGFuY2UgdG8gcHJvY2VzcyB0aGUgdmlld2VyIHVwZGF0ZSBldmVudHMKKwkJCS8vIGFuZCBoZW5jZSB0byB1cGRhdGUgdGhlIHZpZXdzIGZpcnN0LgorCQkJLy8KKwkJCS8vCisJCQlSdW5uYWJsZSBydW5uYWJsZSA9CisJCQkJbmV3IFJ1bm5hYmxlKCkgeworCQkJCQlwdWJsaWMgdm9pZCBydW4oKSB7CisJCQkJCQkvLyBUcnkgdG8gc2VsZWN0IHRoZSBpdGVtcyBpbiB0aGUgY3VycmVudCBjb250ZW50IHZpZXdlciBvZiB0aGUgZWRpdG9yLgorCQkJCQkJLy8KKwkJCQkJCWlmIChjdXJyZW50Vmlld2VyICE9IG51bGwpIHsKKwkJCQkJCQljdXJyZW50Vmlld2VyLnNldFNlbGVjdGlvbihuZXcgU3RydWN0dXJlZFNlbGVjdGlvbih0aGVTZWxlY3Rpb24udG9BcnJheSgpKSwgdHJ1ZSk7CisJCQkJCQl9CisJCQkJCX0KKwkJCQl9OworCQkJcnVubmFibGUucnVuKCk7CisJCX0KKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgdGhlIGVkaXRpbmcgZG9tYWluIGFzIHJlcXVpcmVkIGJ5IHRoZSB7QGxpbmsgSUVkaXRpbmdEb21haW5Qcm92aWRlcn0gaW50ZXJmYWNlLgorCSAqIFRoaXMgaXMgaW1wb3J0YW50IGZvciBpbXBsZW1lbnRpbmcgdGhlIHN0YXRpYyBtZXRob2RzIG9mIHtAbGluayBBZGFwdGVyRmFjdG9yeUVkaXRpbmdEb21haW59CisJICogYW5kIGZvciBzdXBwb3J0aW5nIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5hY3Rpb24uQ29tbWFuZEFjdGlvbn0uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIGVkaXRpbmdEb21haW4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVkaXRpbmdEb21haW4gZ2V0RWRpdGluZ0RvbWFpbigpIHsKKwkJcmV0dXJuIGVkaXRpbmdEb21haW47CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIGNsYXNzIFJldmVyc2VBZGFwdGVyRmFjdG9yeUNvbnRlbnRQcm92aWRlciBleHRlbmRzIEFkYXB0ZXJGYWN0b3J5Q29udGVudFByb3ZpZGVyIHsKKwkJLyoqCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAcGFyYW0gYWRhcHRlckZhY3RvcnkgCisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCXB1YmxpYyBSZXZlcnNlQWRhcHRlckZhY3RvcnlDb250ZW50UHJvdmlkZXIoQWRhcHRlckZhY3RvcnkgYWRhcHRlckZhY3RvcnkpIHsKKwkJCXN1cGVyKGFkYXB0ZXJGYWN0b3J5KTsKKwkJfQorCisJCS8qKgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJQE92ZXJyaWRlCisJCXB1YmxpYyBPYmplY3QgW10gZ2V0RWxlbWVudHMoT2JqZWN0IG9iamVjdCkgeworCQkJT2JqZWN0IHBhcmVudCA9IHN1cGVyLmdldFBhcmVudChvYmplY3QpOworCQkJcmV0dXJuIChwYXJlbnQgPT0gbnVsbCA/IENvbGxlY3Rpb25zLkVNUFRZX1NFVCA6IENvbGxlY3Rpb25zLnNpbmdsZXRvbihwYXJlbnQpKS50b0FycmF5KCk7CisJCX0KKworCQkvKioKKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUBPdmVycmlkZQorCQlwdWJsaWMgT2JqZWN0IFtdIGdldENoaWxkcmVuKE9iamVjdCBvYmplY3QpIHsKKwkJCU9iamVjdCBwYXJlbnQgPSBzdXBlci5nZXRQYXJlbnQob2JqZWN0KTsKKwkJCXJldHVybiAocGFyZW50ID09IG51bGwgPyBDb2xsZWN0aW9ucy5FTVBUWV9TRVQgOiBDb2xsZWN0aW9ucy5zaW5nbGV0b24ocGFyZW50KSkudG9BcnJheSgpOworCQl9CisKKwkJLyoqCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlAT3ZlcnJpZGUKKwkJcHVibGljIGJvb2xlYW4gaGFzQ2hpbGRyZW4oT2JqZWN0IG9iamVjdCkgeworCQkJT2JqZWN0IHBhcmVudCA9IHN1cGVyLmdldFBhcmVudChvYmplY3QpOworCQkJcmV0dXJuIHBhcmVudCAhPSBudWxsOworCQl9CisKKwkJLyoqCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlAT3ZlcnJpZGUKKwkJcHVibGljIE9iamVjdCBnZXRQYXJlbnQoT2JqZWN0IG9iamVjdCkgeworCQkJcmV0dXJuIG51bGw7CisJCX0KKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSB2aWV3ZXJQYW5lIAorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRDdXJyZW50Vmlld2VyUGFuZShWaWV3ZXJQYW5lIHZpZXdlclBhbmUpIHsKKwkJaWYgKGN1cnJlbnRWaWV3ZXJQYW5lICE9IHZpZXdlclBhbmUpIHsKKwkJCWlmIChjdXJyZW50Vmlld2VyUGFuZSAhPSBudWxsKSB7CisJCQkJY3VycmVudFZpZXdlclBhbmUuc2hvd0ZvY3VzKGZhbHNlKTsKKwkJCX0KKwkJCWN1cnJlbnRWaWV3ZXJQYW5lID0gdmlld2VyUGFuZTsKKwkJfQorCQlzZXRDdXJyZW50Vmlld2VyKGN1cnJlbnRWaWV3ZXJQYW5lLmdldFZpZXdlcigpKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIG1ha2VzIHN1cmUgdGhhdCBvbmUgY29udGVudCB2aWV3ZXIsIGVpdGhlciBmb3IgdGhlIGN1cnJlbnQgcGFnZSBvciB0aGUgb3V0bGluZSB2aWV3LCBpZiBpdCBoYXMgZm9jdXMsCisJICogaXMgdGhlIGN1cnJlbnQgb25lLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIHZpZXdlciAKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgc2V0Q3VycmVudFZpZXdlcihWaWV3ZXIgdmlld2VyKSB7CisJCS8vIElmIGl0IGlzIGNoYW5naW5nLi4uCisJCS8vCisJCWlmIChjdXJyZW50Vmlld2VyICE9IHZpZXdlcikgeworCQkJaWYgKHNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lciA9PSBudWxsKSB7CisJCQkJLy8gQ3JlYXRlIHRoZSBsaXN0ZW5lciBvbiBkZW1hbmQuCisJCQkJLy8KKwkJCQlzZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIgPQorCQkJCQluZXcgSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcigpIHsKKwkJCQkJCS8vIFRoaXMganVzdCBub3RpZmllcyB0aG9zZSB0aGluZ3MgdGhhdCBhcmUgYWZmZWN0ZWQgYnkgdGhlIHNlY3Rpb24uCisJCQkJCQkvLworCQkJCQkJcHVibGljIHZvaWQgc2VsZWN0aW9uQ2hhbmdlZChTZWxlY3Rpb25DaGFuZ2VkRXZlbnQgc2VsZWN0aW9uQ2hhbmdlZEV2ZW50KSB7CisJCQkJCQkJc2V0U2VsZWN0aW9uKHNlbGVjdGlvbkNoYW5nZWRFdmVudC5nZXRTZWxlY3Rpb24oKSk7CisJCQkJCQl9CisJCQkJCX07CisJCQl9CisKKwkJCS8vIFN0b3AgbGlzdGVuaW5nIHRvIHRoZSBvbGQgb25lLgorCQkJLy8KKwkJCWlmIChjdXJyZW50Vmlld2VyICE9IG51bGwpIHsKKwkJCQljdXJyZW50Vmlld2VyLnJlbW92ZVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcihzZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIpOworCQkJfQorCisJCQkvLyBTdGFydCBsaXN0ZW5pbmcgdG8gdGhlIG5ldyBvbmUuCisJCQkvLworCQkJaWYgKHZpZXdlciAhPSBudWxsKSB7CisJCQkJdmlld2VyLmFkZFNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcihzZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIpOworCQkJfQorCisJCQkvLyBSZW1lbWJlciBpdC4KKwkJCS8vCisJCQljdXJyZW50Vmlld2VyID0gdmlld2VyOworCisJCQkvLyBTZXQgdGhlIGVkaXRvcnMgc2VsZWN0aW9uIGJhc2VkIG9uIHRoZSBjdXJyZW50IHZpZXdlcidzIHNlbGVjdGlvbi4KKwkJCS8vCisJCQlzZXRTZWxlY3Rpb24oY3VycmVudFZpZXdlciA9PSBudWxsID8gU3RydWN0dXJlZFNlbGVjdGlvbi5FTVBUWSA6IGN1cnJlbnRWaWV3ZXIuZ2V0U2VsZWN0aW9uKCkpOworCQl9CisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIHRoZSB2aWV3ZXIgYXMgcmVxdWlyZWQgYnkgdGhlIHtAbGluayBJVmlld2VyUHJvdmlkZXJ9IGludGVyZmFjZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gY3VycmVudFZpZXdlcgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVmlld2VyIGdldFZpZXdlcigpIHsKKwkJcmV0dXJuIGN1cnJlbnRWaWV3ZXI7CisJfQorCisJLyoqCisJICogVGhpcyBjcmVhdGVzIGEgY29udGV4dCBtZW51IGZvciB0aGUgdmlld2VyIGFuZCBhZGRzIGEgbGlzdGVuZXIgYXMgd2VsbCByZWdpc3RlcmluZyB0aGUgbWVudSBmb3IgZXh0ZW5zaW9uLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIGNyZWF0ZUNvbnRleHRNZW51Rm9yKFN0cnVjdHVyZWRWaWV3ZXIgdmlld2VyKSB7CisJCU1lbnVNYW5hZ2VyIGNvbnRleHRNZW51ID0gbmV3IE1lbnVNYW5hZ2VyKCIjUG9wVXAiKTsKKwkJY29udGV4dE1lbnUuYWRkKG5ldyBTZXBhcmF0b3IoImFkZGl0aW9ucyIpKTsKKwkJY29udGV4dE1lbnUuc2V0UmVtb3ZlQWxsV2hlblNob3duKHRydWUpOworCQljb250ZXh0TWVudS5hZGRNZW51TGlzdGVuZXIodGhpcyk7CisJCU1lbnUgbWVudT0gY29udGV4dE1lbnUuY3JlYXRlQ29udGV4dE1lbnUodmlld2VyLmdldENvbnRyb2woKSk7CisJCXZpZXdlci5nZXRDb250cm9sKCkuc2V0TWVudShtZW51KTsKKwkJZ2V0U2l0ZSgpLnJlZ2lzdGVyQ29udGV4dE1lbnUoY29udGV4dE1lbnUsIG5ldyBVbndyYXBwaW5nU2VsZWN0aW9uUHJvdmlkZXIodmlld2VyKSk7CisKKwkJaW50IGRuZE9wZXJhdGlvbnMgPSBETkQuRFJPUF9DT1BZIHwgRE5ELkRST1BfTU9WRSB8IERORC5EUk9QX0xJTks7CisJCVRyYW5zZmVyW10gdHJhbnNmZXJzID0gbmV3IFRyYW5zZmVyW10geyBMb2NhbFRyYW5zZmVyLmdldEluc3RhbmNlKCkgfTsKKwkJdmlld2VyLmFkZERyYWdTdXBwb3J0KGRuZE9wZXJhdGlvbnMsIHRyYW5zZmVycywgbmV3IFZpZXdlckRyYWdBZGFwdGVyKHZpZXdlcikpOworCQl2aWV3ZXIuYWRkRHJvcFN1cHBvcnQoZG5kT3BlcmF0aW9ucywgdHJhbnNmZXJzLCBuZXcgRWRpdGluZ0RvbWFpblZpZXdlckRyb3BBZGFwdGVyKGVkaXRpbmdEb21haW4sIHZpZXdlcikpOworCX0KKworCS8qKgorCSAqIFRoaXMgaXMgdGhlIG1ldGhvZCBjYWxsZWQgdG8gbG9hZCBhIHJlc291cmNlIGludG8gdGhlIGVkaXRpbmcgZG9tYWluJ3MgcmVzb3VyY2Ugc2V0IGJhc2VkIG9uIHRoZSBlZGl0b3IncyBpbnB1dC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBjcmVhdGVNb2RlbCgpIHsKKwkJVVJJIHJlc291cmNlVVJJID0gRWRpdFVJVXRpbC5nZXRVUkkoZ2V0RWRpdG9ySW5wdXQoKSk7CisJCUV4Y2VwdGlvbiBleGNlcHRpb24gPSBudWxsOworCQlSZXNvdXJjZSByZXNvdXJjZSA9IG51bGw7CisJCXRyeSB7CisJCQkvLyBMb2FkIHRoZSByZXNvdXJjZSB0aHJvdWdoIHRoZSBlZGl0aW5nIGRvbWFpbi4KKwkJCS8vCisJCQlyZXNvdXJjZSA9IGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKS5nZXRSZXNvdXJjZShyZXNvdXJjZVVSSSwgdHJ1ZSk7CisJCX0KKwkJY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CisJCQlleGNlcHRpb24gPSBlOworCQkJcmVzb3VyY2UgPSBlZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkuZ2V0UmVzb3VyY2UocmVzb3VyY2VVUkksIGZhbHNlKTsKKwkJfQorCisJCURpYWdub3N0aWMgZGlhZ25vc3RpYyA9IGFuYWx5emVSZXNvdXJjZVByb2JsZW1zKHJlc291cmNlLCBleGNlcHRpb24pOworCQlpZiAoZGlhZ25vc3RpYy5nZXRTZXZlcml0eSgpICE9IERpYWdub3N0aWMuT0spIHsKKwkJCXJlc291cmNlVG9EaWFnbm9zdGljTWFwLnB1dChyZXNvdXJjZSwgIGFuYWx5emVSZXNvdXJjZVByb2JsZW1zKHJlc291cmNlLCBleGNlcHRpb24pKTsKKwkJfQorCQllZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkuZUFkYXB0ZXJzKCkuYWRkKHByb2JsZW1JbmRpY2F0aW9uQWRhcHRlcik7CisJfQorCisJLyoqCisJICogUmV0dXJucyBhIGRpYWdub3N0aWMgZGVzY3JpYmluZyB0aGUgZXJyb3JzIGFuZCB3YXJuaW5ncyBsaXN0ZWQgaW4gdGhlIHJlc291cmNlCisJICogYW5kIHRoZSBzcGVjaWZpZWQgZXhjZXB0aW9uIChpZiBhbnkpLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIHJlc291cmNlIAorCSAqIEBwYXJhbSBleGNlcHRpb24gCisJICogQHJldHVybiBhIGRpYWdub3N0aWMgZGVzY3JpYmluZyBlcnJvcnMgYW5kIHdhcm5pbmdzIAorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRGlhZ25vc3RpYyBhbmFseXplUmVzb3VyY2VQcm9ibGVtcyhSZXNvdXJjZSByZXNvdXJjZSwgRXhjZXB0aW9uIGV4Y2VwdGlvbikgeworCQlpZiAoIXJlc291cmNlLmdldEVycm9ycygpLmlzRW1wdHkoKSB8fCAhcmVzb3VyY2UuZ2V0V2FybmluZ3MoKS5pc0VtcHR5KCkpIHsKKwkJCUJhc2ljRGlhZ25vc3RpYyBiYXNpY0RpYWdub3N0aWMgPQorCQkJCW5ldyBCYXNpY0RpYWdub3N0aWMKKwkJCQkJKERpYWdub3N0aWMuRVJST1IsCisJCQkJCSAib3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4dGVybmFsZGF0YXNvdXJjZS5lZGl0b3IiLAorCQkJCQkgMCwKKwkJCQkJIGdldFN0cmluZygiX1VJX0NyZWF0ZU1vZGVsRXJyb3JfbWVzc2FnZSIsIHJlc291cmNlLmdldFVSSSgpKSwKKwkJCQkJIG5ldyBPYmplY3QgW10geyBleGNlcHRpb24gPT0gbnVsbCA/IChPYmplY3QpcmVzb3VyY2UgOiBleGNlcHRpb24gfSk7CisJCQliYXNpY0RpYWdub3N0aWMubWVyZ2UoRWNvcmVVdGlsLmNvbXB1dGVEaWFnbm9zdGljKHJlc291cmNlLCB0cnVlKSk7CisJCQlyZXR1cm4gYmFzaWNEaWFnbm9zdGljOworCQl9CisJCWVsc2UgaWYgKGV4Y2VwdGlvbiAhPSBudWxsKSB7CisJCQlyZXR1cm4KKwkJCQluZXcgQmFzaWNEaWFnbm9zdGljCisJCQkJCShEaWFnbm9zdGljLkVSUk9SLAorCQkJCQkgIm9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leHRlcm5hbGRhdGFzb3VyY2UuZWRpdG9yIiwKKwkJCQkJIDAsCisJCQkJCSBnZXRTdHJpbmcoIl9VSV9DcmVhdGVNb2RlbEVycm9yX21lc3NhZ2UiLCByZXNvdXJjZS5nZXRVUkkoKSksCisJCQkJCSBuZXcgT2JqZWN0W10geyBleGNlcHRpb24gfSk7CisJCX0KKwkJZWxzZSB7CisJCQlyZXR1cm4gRGlhZ25vc3RpYy5PS19JTlNUQU5DRTsKKwkJfQorCX0KKworCS8qKgorCSAqIFRoaXMgaXMgdGhlIG1ldGhvZCB1c2VkIGJ5IHRoZSBmcmFtZXdvcmsgdG8gaW5zdGFsbCB5b3VyIG93biBjb250cm9scy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBjcmVhdGVQYWdlcygpIHsKKwkJLy8gQ3JlYXRlcyB0aGUgbW9kZWwgZnJvbSB0aGUgZWRpdG9yIGlucHV0CisJCS8vCisJCWNyZWF0ZU1vZGVsKCk7CisKKwkJLy8gT25seSBjcmVhdGVzIHRoZSBvdGhlciBwYWdlcyBpZiB0aGVyZSBpcyBzb21ldGhpbmcgdGhhdCBjYW4gYmUgZWRpdGVkCisJCS8vCisJCWlmICghZ2V0RWRpdGluZ0RvbWFpbigpLmdldFJlc291cmNlU2V0KCkuZ2V0UmVzb3VyY2VzKCkuaXNFbXB0eSgpICYmCisJCSAgICAhKGdldEVkaXRpbmdEb21haW4oKS5nZXRSZXNvdXJjZVNldCgpLmdldFJlc291cmNlcygpLmdldCgwKSkuZ2V0Q29udGVudHMoKS5pc0VtcHR5KCkpIHsKKwkJCS8vIENyZWF0ZSBhIHBhZ2UgZm9yIHRoZSBzZWxlY3Rpb24gdHJlZSB2aWV3LgorCQkJLy8KKwkJCXsKKwkJCQlWaWV3ZXJQYW5lIHZpZXdlclBhbmUgPQorCQkJCQluZXcgVmlld2VyUGFuZShnZXRTaXRlKCkuZ2V0UGFnZSgpLCBFeHRlcm5hbERhdGFTb3VyY2VFZGl0b3IudGhpcykgeworCQkJCQkJQE92ZXJyaWRlCisJCQkJCQlwdWJsaWMgVmlld2VyIGNyZWF0ZVZpZXdlcihDb21wb3NpdGUgY29tcG9zaXRlKSB7CisJCQkJCQkJVHJlZSB0cmVlID0gbmV3IFRyZWUoY29tcG9zaXRlLCBTV1QuTVVMVEkpOworCQkJCQkJCVRyZWVWaWV3ZXIgbmV3VHJlZVZpZXdlciA9IG5ldyBUcmVlVmlld2VyKHRyZWUpOworCQkJCQkJCXJldHVybiBuZXdUcmVlVmlld2VyOworCQkJCQkJfQorCQkJCQkJQE92ZXJyaWRlCisJCQkJCQlwdWJsaWMgdm9pZCByZXF1ZXN0QWN0aXZhdGlvbigpIHsKKwkJCQkJCQlzdXBlci5yZXF1ZXN0QWN0aXZhdGlvbigpOworCQkJCQkJCXNldEN1cnJlbnRWaWV3ZXJQYW5lKHRoaXMpOworCQkJCQkJfQorCQkJCQl9OworCQkJCXZpZXdlclBhbmUuY3JlYXRlQ29udHJvbChnZXRDb250YWluZXIoKSk7CisKKwkJCQlzZWxlY3Rpb25WaWV3ZXIgPSAoVHJlZVZpZXdlcil2aWV3ZXJQYW5lLmdldFZpZXdlcigpOworCQkJCXNlbGVjdGlvblZpZXdlci5zZXRDb250ZW50UHJvdmlkZXIobmV3IEFkYXB0ZXJGYWN0b3J5Q29udGVudFByb3ZpZGVyKGFkYXB0ZXJGYWN0b3J5KSk7CisKKwkJCQlzZWxlY3Rpb25WaWV3ZXIuc2V0TGFiZWxQcm92aWRlcihuZXcgQWRhcHRlckZhY3RvcnlMYWJlbFByb3ZpZGVyKGFkYXB0ZXJGYWN0b3J5KSk7CisJCQkJc2VsZWN0aW9uVmlld2VyLnNldElucHV0KGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKSk7CisJCQkJc2VsZWN0aW9uVmlld2VyLnNldFNlbGVjdGlvbihuZXcgU3RydWN0dXJlZFNlbGVjdGlvbihlZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkuZ2V0UmVzb3VyY2VzKCkuZ2V0KDApKSwgdHJ1ZSk7CisJCQkJdmlld2VyUGFuZS5zZXRUaXRsZShlZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkpOworCisJCQkJbmV3IEFkYXB0ZXJGYWN0b3J5VHJlZUVkaXRvcihzZWxlY3Rpb25WaWV3ZXIuZ2V0VHJlZSgpLCBhZGFwdGVyRmFjdG9yeSk7CisKKwkJCQljcmVhdGVDb250ZXh0TWVudUZvcihzZWxlY3Rpb25WaWV3ZXIpOworCQkJCWludCBwYWdlSW5kZXggPSBhZGRQYWdlKHZpZXdlclBhbmUuZ2V0Q29udHJvbCgpKTsKKwkJCQlzZXRQYWdlVGV4dChwYWdlSW5kZXgsIGdldFN0cmluZygiX1VJX1NlbGVjdGlvblBhZ2VfbGFiZWwiKSk7CisJCQl9CisKKwkJCS8vIENyZWF0ZSBhIHBhZ2UgZm9yIHRoZSBwYXJlbnQgdHJlZSB2aWV3LgorCQkJLy8KKwkJCXsKKwkJCQlWaWV3ZXJQYW5lIHZpZXdlclBhbmUgPQorCQkJCQluZXcgVmlld2VyUGFuZShnZXRTaXRlKCkuZ2V0UGFnZSgpLCBFeHRlcm5hbERhdGFTb3VyY2VFZGl0b3IudGhpcykgeworCQkJCQkJQE92ZXJyaWRlCisJCQkJCQlwdWJsaWMgVmlld2VyIGNyZWF0ZVZpZXdlcihDb21wb3NpdGUgY29tcG9zaXRlKSB7CisJCQkJCQkJVHJlZSB0cmVlID0gbmV3IFRyZWUoY29tcG9zaXRlLCBTV1QuTVVMVEkpOworCQkJCQkJCVRyZWVWaWV3ZXIgbmV3VHJlZVZpZXdlciA9IG5ldyBUcmVlVmlld2VyKHRyZWUpOworCQkJCQkJCXJldHVybiBuZXdUcmVlVmlld2VyOworCQkJCQkJfQorCQkJCQkJQE92ZXJyaWRlCisJCQkJCQlwdWJsaWMgdm9pZCByZXF1ZXN0QWN0aXZhdGlvbigpIHsKKwkJCQkJCQlzdXBlci5yZXF1ZXN0QWN0aXZhdGlvbigpOworCQkJCQkJCXNldEN1cnJlbnRWaWV3ZXJQYW5lKHRoaXMpOworCQkJCQkJfQorCQkJCQl9OworCQkJCXZpZXdlclBhbmUuY3JlYXRlQ29udHJvbChnZXRDb250YWluZXIoKSk7CisKKwkJCQlwYXJlbnRWaWV3ZXIgPSAoVHJlZVZpZXdlcil2aWV3ZXJQYW5lLmdldFZpZXdlcigpOworCQkJCXBhcmVudFZpZXdlci5zZXRBdXRvRXhwYW5kTGV2ZWwoMzApOworCQkJCXBhcmVudFZpZXdlci5zZXRDb250ZW50UHJvdmlkZXIobmV3IFJldmVyc2VBZGFwdGVyRmFjdG9yeUNvbnRlbnRQcm92aWRlcihhZGFwdGVyRmFjdG9yeSkpOworCQkJCXBhcmVudFZpZXdlci5zZXRMYWJlbFByb3ZpZGVyKG5ldyBBZGFwdGVyRmFjdG9yeUxhYmVsUHJvdmlkZXIoYWRhcHRlckZhY3RvcnkpKTsKKworCQkJCWNyZWF0ZUNvbnRleHRNZW51Rm9yKHBhcmVudFZpZXdlcik7CisJCQkJaW50IHBhZ2VJbmRleCA9IGFkZFBhZ2Uodmlld2VyUGFuZS5nZXRDb250cm9sKCkpOworCQkJCXNldFBhZ2VUZXh0KHBhZ2VJbmRleCwgZ2V0U3RyaW5nKCJfVUlfUGFyZW50UGFnZV9sYWJlbCIpKTsKKwkJCX0KKworCQkJLy8gVGhpcyBpcyB0aGUgcGFnZSBmb3IgdGhlIGxpc3Qgdmlld2VyCisJCQkvLworCQkJeworCQkJCVZpZXdlclBhbmUgdmlld2VyUGFuZSA9CisJCQkJCW5ldyBWaWV3ZXJQYW5lKGdldFNpdGUoKS5nZXRQYWdlKCksIEV4dGVybmFsRGF0YVNvdXJjZUVkaXRvci50aGlzKSB7CisJCQkJCQlAT3ZlcnJpZGUKKwkJCQkJCXB1YmxpYyBWaWV3ZXIgY3JlYXRlVmlld2VyKENvbXBvc2l0ZSBjb21wb3NpdGUpIHsKKwkJCQkJCQlyZXR1cm4gbmV3IExpc3RWaWV3ZXIoY29tcG9zaXRlKTsKKwkJCQkJCX0KKwkJCQkJCUBPdmVycmlkZQorCQkJCQkJcHVibGljIHZvaWQgcmVxdWVzdEFjdGl2YXRpb24oKSB7CisJCQkJCQkJc3VwZXIucmVxdWVzdEFjdGl2YXRpb24oKTsKKwkJCQkJCQlzZXRDdXJyZW50Vmlld2VyUGFuZSh0aGlzKTsKKwkJCQkJCX0KKwkJCQkJfTsKKwkJCQl2aWV3ZXJQYW5lLmNyZWF0ZUNvbnRyb2woZ2V0Q29udGFpbmVyKCkpOworCQkJCWxpc3RWaWV3ZXIgPSAoTGlzdFZpZXdlcil2aWV3ZXJQYW5lLmdldFZpZXdlcigpOworCQkJCWxpc3RWaWV3ZXIuc2V0Q29udGVudFByb3ZpZGVyKG5ldyBBZGFwdGVyRmFjdG9yeUNvbnRlbnRQcm92aWRlcihhZGFwdGVyRmFjdG9yeSkpOworCQkJCWxpc3RWaWV3ZXIuc2V0TGFiZWxQcm92aWRlcihuZXcgQWRhcHRlckZhY3RvcnlMYWJlbFByb3ZpZGVyKGFkYXB0ZXJGYWN0b3J5KSk7CisKKwkJCQljcmVhdGVDb250ZXh0TWVudUZvcihsaXN0Vmlld2VyKTsKKwkJCQlpbnQgcGFnZUluZGV4ID0gYWRkUGFnZSh2aWV3ZXJQYW5lLmdldENvbnRyb2woKSk7CisJCQkJc2V0UGFnZVRleHQocGFnZUluZGV4LCBnZXRTdHJpbmcoIl9VSV9MaXN0UGFnZV9sYWJlbCIpKTsKKwkJCX0KKworCQkJLy8gVGhpcyBpcyB0aGUgcGFnZSBmb3IgdGhlIHRyZWUgdmlld2VyCisJCQkvLworCQkJeworCQkJCVZpZXdlclBhbmUgdmlld2VyUGFuZSA9CisJCQkJCW5ldyBWaWV3ZXJQYW5lKGdldFNpdGUoKS5nZXRQYWdlKCksIEV4dGVybmFsRGF0YVNvdXJjZUVkaXRvci50aGlzKSB7CisJCQkJCQlAT3ZlcnJpZGUKKwkJCQkJCXB1YmxpYyBWaWV3ZXIgY3JlYXRlVmlld2VyKENvbXBvc2l0ZSBjb21wb3NpdGUpIHsKKwkJCQkJCQlyZXR1cm4gbmV3IFRyZWVWaWV3ZXIoY29tcG9zaXRlKTsKKwkJCQkJCX0KKwkJCQkJCUBPdmVycmlkZQorCQkJCQkJcHVibGljIHZvaWQgcmVxdWVzdEFjdGl2YXRpb24oKSB7CisJCQkJCQkJc3VwZXIucmVxdWVzdEFjdGl2YXRpb24oKTsKKwkJCQkJCQlzZXRDdXJyZW50Vmlld2VyUGFuZSh0aGlzKTsKKwkJCQkJCX0KKwkJCQkJfTsKKwkJCQl2aWV3ZXJQYW5lLmNyZWF0ZUNvbnRyb2woZ2V0Q29udGFpbmVyKCkpOworCQkJCXRyZWVWaWV3ZXIgPSAoVHJlZVZpZXdlcil2aWV3ZXJQYW5lLmdldFZpZXdlcigpOworCQkJCXRyZWVWaWV3ZXIuc2V0Q29udGVudFByb3ZpZGVyKG5ldyBBZGFwdGVyRmFjdG9yeUNvbnRlbnRQcm92aWRlcihhZGFwdGVyRmFjdG9yeSkpOworCQkJCXRyZWVWaWV3ZXIuc2V0TGFiZWxQcm92aWRlcihuZXcgQWRhcHRlckZhY3RvcnlMYWJlbFByb3ZpZGVyKGFkYXB0ZXJGYWN0b3J5KSk7CisKKwkJCQluZXcgQWRhcHRlckZhY3RvcnlUcmVlRWRpdG9yKHRyZWVWaWV3ZXIuZ2V0VHJlZSgpLCBhZGFwdGVyRmFjdG9yeSk7CisKKwkJCQljcmVhdGVDb250ZXh0TWVudUZvcih0cmVlVmlld2VyKTsKKwkJCQlpbnQgcGFnZUluZGV4ID0gYWRkUGFnZSh2aWV3ZXJQYW5lLmdldENvbnRyb2woKSk7CisJCQkJc2V0UGFnZVRleHQocGFnZUluZGV4LCBnZXRTdHJpbmcoIl9VSV9UcmVlUGFnZV9sYWJlbCIpKTsKKwkJCX0KKworCQkJLy8gVGhpcyBpcyB0aGUgcGFnZSBmb3IgdGhlIHRhYmxlIHZpZXdlci4KKwkJCS8vCisJCQl7CisJCQkJVmlld2VyUGFuZSB2aWV3ZXJQYW5lID0KKwkJCQkJbmV3IFZpZXdlclBhbmUoZ2V0U2l0ZSgpLmdldFBhZ2UoKSwgRXh0ZXJuYWxEYXRhU291cmNlRWRpdG9yLnRoaXMpIHsKKwkJCQkJCUBPdmVycmlkZQorCQkJCQkJcHVibGljIFZpZXdlciBjcmVhdGVWaWV3ZXIoQ29tcG9zaXRlIGNvbXBvc2l0ZSkgeworCQkJCQkJCXJldHVybiBuZXcgVGFibGVWaWV3ZXIoY29tcG9zaXRlKTsKKwkJCQkJCX0KKwkJCQkJCUBPdmVycmlkZQorCQkJCQkJcHVibGljIHZvaWQgcmVxdWVzdEFjdGl2YXRpb24oKSB7CisJCQkJCQkJc3VwZXIucmVxdWVzdEFjdGl2YXRpb24oKTsKKwkJCQkJCQlzZXRDdXJyZW50Vmlld2VyUGFuZSh0aGlzKTsKKwkJCQkJCX0KKwkJCQkJfTsKKwkJCQl2aWV3ZXJQYW5lLmNyZWF0ZUNvbnRyb2woZ2V0Q29udGFpbmVyKCkpOworCQkJCXRhYmxlVmlld2VyID0gKFRhYmxlVmlld2VyKXZpZXdlclBhbmUuZ2V0Vmlld2VyKCk7CisKKwkJCQlUYWJsZSB0YWJsZSA9IHRhYmxlVmlld2VyLmdldFRhYmxlKCk7CisJCQkJVGFibGVMYXlvdXQgbGF5b3V0ID0gbmV3IFRhYmxlTGF5b3V0KCk7CisJCQkJdGFibGUuc2V0TGF5b3V0KGxheW91dCk7CisJCQkJdGFibGUuc2V0SGVhZGVyVmlzaWJsZSh0cnVlKTsKKwkJCQl0YWJsZS5zZXRMaW5lc1Zpc2libGUodHJ1ZSk7CisKKwkJCQlUYWJsZUNvbHVtbiBvYmplY3RDb2x1bW4gPSBuZXcgVGFibGVDb2x1bW4odGFibGUsIFNXVC5OT05FKTsKKwkJCQlsYXlvdXQuYWRkQ29sdW1uRGF0YShuZXcgQ29sdW1uV2VpZ2h0RGF0YSgzLCAxMDAsIHRydWUpKTsKKwkJCQlvYmplY3RDb2x1bW4uc2V0VGV4dChnZXRTdHJpbmcoIl9VSV9PYmplY3RDb2x1bW5fbGFiZWwiKSk7CisJCQkJb2JqZWN0Q29sdW1uLnNldFJlc2l6YWJsZSh0cnVlKTsKKworCQkJCVRhYmxlQ29sdW1uIHNlbGZDb2x1bW4gPSBuZXcgVGFibGVDb2x1bW4odGFibGUsIFNXVC5OT05FKTsKKwkJCQlsYXlvdXQuYWRkQ29sdW1uRGF0YShuZXcgQ29sdW1uV2VpZ2h0RGF0YSgyLCAxMDAsIHRydWUpKTsKKwkJCQlzZWxmQ29sdW1uLnNldFRleHQoZ2V0U3RyaW5nKCJfVUlfU2VsZkNvbHVtbl9sYWJlbCIpKTsKKwkJCQlzZWxmQ29sdW1uLnNldFJlc2l6YWJsZSh0cnVlKTsKKworCQkJCXRhYmxlVmlld2VyLnNldENvbHVtblByb3BlcnRpZXMobmV3IFN0cmluZyBbXSB7ImEiLCAiYiJ9KTsKKwkJCQl0YWJsZVZpZXdlci5zZXRDb250ZW50UHJvdmlkZXIobmV3IEFkYXB0ZXJGYWN0b3J5Q29udGVudFByb3ZpZGVyKGFkYXB0ZXJGYWN0b3J5KSk7CisJCQkJdGFibGVWaWV3ZXIuc2V0TGFiZWxQcm92aWRlcihuZXcgQWRhcHRlckZhY3RvcnlMYWJlbFByb3ZpZGVyKGFkYXB0ZXJGYWN0b3J5KSk7CisKKwkJCQljcmVhdGVDb250ZXh0TWVudUZvcih0YWJsZVZpZXdlcik7CisJCQkJaW50IHBhZ2VJbmRleCA9IGFkZFBhZ2Uodmlld2VyUGFuZS5nZXRDb250cm9sKCkpOworCQkJCXNldFBhZ2VUZXh0KHBhZ2VJbmRleCwgZ2V0U3RyaW5nKCJfVUlfVGFibGVQYWdlX2xhYmVsIikpOworCQkJfQorCisJCQkvLyBUaGlzIGlzIHRoZSBwYWdlIGZvciB0aGUgdGFibGUgdHJlZSB2aWV3ZXIuCisJCQkvLworCQkJeworCQkJCVZpZXdlclBhbmUgdmlld2VyUGFuZSA9CisJCQkJCW5ldyBWaWV3ZXJQYW5lKGdldFNpdGUoKS5nZXRQYWdlKCksIEV4dGVybmFsRGF0YVNvdXJjZUVkaXRvci50aGlzKSB7CisJCQkJCQlAT3ZlcnJpZGUKKwkJCQkJCXB1YmxpYyBWaWV3ZXIgY3JlYXRlVmlld2VyKENvbXBvc2l0ZSBjb21wb3NpdGUpIHsKKwkJCQkJCQlyZXR1cm4gbmV3IFRyZWVWaWV3ZXIoY29tcG9zaXRlKTsKKwkJCQkJCX0KKwkJCQkJCUBPdmVycmlkZQorCQkJCQkJcHVibGljIHZvaWQgcmVxdWVzdEFjdGl2YXRpb24oKSB7CisJCQkJCQkJc3VwZXIucmVxdWVzdEFjdGl2YXRpb24oKTsKKwkJCQkJCQlzZXRDdXJyZW50Vmlld2VyUGFuZSh0aGlzKTsKKwkJCQkJCX0KKwkJCQkJfTsKKwkJCQl2aWV3ZXJQYW5lLmNyZWF0ZUNvbnRyb2woZ2V0Q29udGFpbmVyKCkpOworCisJCQkJdHJlZVZpZXdlcldpdGhDb2x1bW5zID0gKFRyZWVWaWV3ZXIpdmlld2VyUGFuZS5nZXRWaWV3ZXIoKTsKKworCQkJCVRyZWUgdHJlZSA9IHRyZWVWaWV3ZXJXaXRoQ29sdW1ucy5nZXRUcmVlKCk7CisJCQkJdHJlZS5zZXRMYXlvdXREYXRhKG5ldyBGaWxsTGF5b3V0KCkpOworCQkJCXRyZWUuc2V0SGVhZGVyVmlzaWJsZSh0cnVlKTsKKwkJCQl0cmVlLnNldExpbmVzVmlzaWJsZSh0cnVlKTsKKworCQkJCVRyZWVDb2x1bW4gb2JqZWN0Q29sdW1uID0gbmV3IFRyZWVDb2x1bW4odHJlZSwgU1dULk5PTkUpOworCQkJCW9iamVjdENvbHVtbi5zZXRUZXh0KGdldFN0cmluZygiX1VJX09iamVjdENvbHVtbl9sYWJlbCIpKTsKKwkJCQlvYmplY3RDb2x1bW4uc2V0UmVzaXphYmxlKHRydWUpOworCQkJCW9iamVjdENvbHVtbi5zZXRXaWR0aCgyNTApOworCisJCQkJVHJlZUNvbHVtbiBzZWxmQ29sdW1uID0gbmV3IFRyZWVDb2x1bW4odHJlZSwgU1dULk5PTkUpOworCQkJCXNlbGZDb2x1bW4uc2V0VGV4dChnZXRTdHJpbmcoIl9VSV9TZWxmQ29sdW1uX2xhYmVsIikpOworCQkJCXNlbGZDb2x1bW4uc2V0UmVzaXphYmxlKHRydWUpOworCQkJCXNlbGZDb2x1bW4uc2V0V2lkdGgoMjAwKTsKKworCQkJCXRyZWVWaWV3ZXJXaXRoQ29sdW1ucy5zZXRDb2x1bW5Qcm9wZXJ0aWVzKG5ldyBTdHJpbmcgW10geyJhIiwgImIifSk7CisJCQkJdHJlZVZpZXdlcldpdGhDb2x1bW5zLnNldENvbnRlbnRQcm92aWRlcihuZXcgQWRhcHRlckZhY3RvcnlDb250ZW50UHJvdmlkZXIoYWRhcHRlckZhY3RvcnkpKTsKKwkJCQl0cmVlVmlld2VyV2l0aENvbHVtbnMuc2V0TGFiZWxQcm92aWRlcihuZXcgQWRhcHRlckZhY3RvcnlMYWJlbFByb3ZpZGVyKGFkYXB0ZXJGYWN0b3J5KSk7CisKKwkJCQljcmVhdGVDb250ZXh0TWVudUZvcih0cmVlVmlld2VyV2l0aENvbHVtbnMpOworCQkJCWludCBwYWdlSW5kZXggPSBhZGRQYWdlKHZpZXdlclBhbmUuZ2V0Q29udHJvbCgpKTsKKwkJCQlzZXRQYWdlVGV4dChwYWdlSW5kZXgsIGdldFN0cmluZygiX1VJX1RyZWVXaXRoQ29sdW1uc1BhZ2VfbGFiZWwiKSk7CisJCQl9CisKKwkJCWdldFNpdGUoKS5nZXRTaGVsbCgpLmdldERpc3BsYXkoKS5hc3luY0V4ZWMKKwkJCQkobmV3IFJ1bm5hYmxlKCkgeworCQkJCQkgQFN1cHByZXNzV2FybmluZ3MoInN5bnRoZXRpYy1hY2Nlc3MiKQorCQkJCQlwdWJsaWMgdm9pZCBydW4oKSB7CisJCQkJCQkgc2V0QWN0aXZlUGFnZSgwKTsKKwkJCQkJIH0KKwkJCQkgfSk7CisJCX0KKworCQkvLyBFbnN1cmVzIHRoYXQgdGhpcyBlZGl0b3Igd2lsbCBvbmx5IGRpc3BsYXkgdGhlIHBhZ2UncyB0YWIKKwkJLy8gYXJlYSBpZiB0aGVyZSBhcmUgbW9yZSB0aGFuIG9uZSBwYWdlCisJCS8vCisJCWdldENvbnRhaW5lcigpLmFkZENvbnRyb2xMaXN0ZW5lcgorCQkJKG5ldyBDb250cm9sQWRhcHRlcigpIHsKKwkJCQlib29sZWFuIGd1YXJkID0gZmFsc2U7CisJCQkJQE92ZXJyaWRlCisJCQkJcHVibGljIHZvaWQgY29udHJvbFJlc2l6ZWQoQ29udHJvbEV2ZW50IGV2ZW50KSB7CisJCQkJCWlmICghZ3VhcmQpIHsKKwkJCQkJCWd1YXJkID0gdHJ1ZTsKKwkJCQkJCWhpZGVUYWJzKCk7CisJCQkJCQlndWFyZCA9IGZhbHNlOworCQkJCQl9CisJCQkJfQorCQkJIH0pOworCisJCWdldFNpdGUoKS5nZXRTaGVsbCgpLmdldERpc3BsYXkoKS5hc3luY0V4ZWMKKwkJCShuZXcgUnVubmFibGUoKSB7CisJCQkJIHB1YmxpYyB2b2lkIHJ1bigpIHsKKwkJCQkJIHVwZGF0ZVByb2JsZW1JbmRpY2F0aW9uKCk7CisJCQkJIH0KKwkJCSB9KTsKKwl9CisKKwkvKioKKwkgKiBJZiB0aGVyZSBpcyBqdXN0IG9uZSBwYWdlIGluIHRoZSBtdWx0aS1wYWdlIGVkaXRvciBwYXJ0LAorCSAqIHRoaXMgaGlkZXMgdGhlIHNpbmdsZSB0YWIgYXQgdGhlIGJvdHRvbS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBoaWRlVGFicygpIHsKKwkJaWYgKGdldFBhZ2VDb3VudCgpIDw9IDEpIHsKKwkJCXNldFBhZ2VUZXh0KDAsICIiKTsKKwkJCWlmIChnZXRDb250YWluZXIoKSBpbnN0YW5jZW9mIENUYWJGb2xkZXIpIHsKKwkJCQkoKENUYWJGb2xkZXIpZ2V0Q29udGFpbmVyKCkpLnNldFRhYkhlaWdodCgxKTsKKwkJCQlQb2ludCBwb2ludCA9IGdldENvbnRhaW5lcigpLmdldFNpemUoKTsKKwkJCQlnZXRDb250YWluZXIoKS5zZXRTaXplKHBvaW50LngsIHBvaW50LnkgKyA2KTsKKwkJCX0KKwkJfQorCX0KKworCS8qKgorCSAqIElmIHRoZXJlIGlzIG1vcmUgdGhhbiBvbmUgcGFnZSBpbiB0aGUgbXVsdGktcGFnZSBlZGl0b3IgcGFydCwKKwkgKiB0aGlzIHNob3dzIHRoZSB0YWJzIGF0IHRoZSBib3R0b20uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgc2hvd1RhYnMoKSB7CisJCWlmIChnZXRQYWdlQ291bnQoKSA+IDEpIHsKKwkJCXNldFBhZ2VUZXh0KDAsIGdldFN0cmluZygiX1VJX1NlbGVjdGlvblBhZ2VfbGFiZWwiKSk7CisJCQlpZiAoZ2V0Q29udGFpbmVyKCkgaW5zdGFuY2VvZiBDVGFiRm9sZGVyKSB7CisJCQkJKChDVGFiRm9sZGVyKWdldENvbnRhaW5lcigpKS5zZXRUYWJIZWlnaHQoU1dULkRFRkFVTFQpOworCQkJCVBvaW50IHBvaW50ID0gZ2V0Q29udGFpbmVyKCkuZ2V0U2l6ZSgpOworCQkJCWdldENvbnRhaW5lcigpLnNldFNpemUocG9pbnQueCwgcG9pbnQueSAtIDYpOworCQkJfQorCQl9CisJfQorCisJLyoqCisJICogVGhpcyBpcyB1c2VkIHRvIHRyYWNrIHRoZSBhY3RpdmUgdmlld2VyLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIHBhZ2VDaGFuZ2UoaW50IHBhZ2VJbmRleCkgeworCQlzdXBlci5wYWdlQ2hhbmdlKHBhZ2VJbmRleCk7CisKKwkJaWYgKGNvbnRlbnRPdXRsaW5lUGFnZSAhPSBudWxsKSB7CisJCQloYW5kbGVDb250ZW50T3V0bGluZVNlbGVjdGlvbihjb250ZW50T3V0bGluZVBhZ2UuZ2V0U2VsZWN0aW9uKCkpOworCQl9CisJfQorCisJLyoqCisJICogVGhpcyBpcyBob3cgdGhlIGZyYW1ld29yayBkZXRlcm1pbmVzIHdoaWNoIGludGVyZmFjZXMgd2UgaW1wbGVtZW50LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBTdXBwcmVzc1dhcm5pbmdzKCJ1bmNoZWNrZWQiKQorCUBPdmVycmlkZQorCXB1YmxpYyBPYmplY3QgZ2V0QWRhcHRlcihDbGFzcyBrZXkpIHsKKwkJaWYgKGtleS5lcXVhbHMoSUNvbnRlbnRPdXRsaW5lUGFnZS5jbGFzcykpIHsKKwkJCXJldHVybiBzaG93T3V0bGluZVZpZXcoKSA/IGdldENvbnRlbnRPdXRsaW5lUGFnZSgpIDogbnVsbDsKKwkJfQorCQllbHNlIGlmIChrZXkuZXF1YWxzKElQcm9wZXJ0eVNoZWV0UGFnZS5jbGFzcykpIHsKKwkJCXJldHVybiBnZXRQcm9wZXJ0eVNoZWV0UGFnZSgpOworCQl9CisJCWVsc2UgaWYgKGtleS5lcXVhbHMoSUdvdG9NYXJrZXIuY2xhc3MpKSB7CisJCQlyZXR1cm4gdGhpczsKKwkJfQorCQllbHNlIHsKKwkJCXJldHVybiBzdXBlci5nZXRBZGFwdGVyKGtleSk7CisJCX0KKwl9CisKKwkvKioKKwkgKiBUaGlzIGFjY2Vzc2VzIGEgY2FjaGVkIHZlcnNpb24gb2YgdGhlIGNvbnRlbnQgb3V0bGluZXIuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIGEgY2FjaGVkIHZlcnNpb24gb2YgdGhlIGNvbnRlbnQgb3V0bGluZXIuCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBJQ29udGVudE91dGxpbmVQYWdlIGdldENvbnRlbnRPdXRsaW5lUGFnZSgpIHsKKwkJaWYgKGNvbnRlbnRPdXRsaW5lUGFnZSA9PSBudWxsKSB7CisJCQkvLyBUaGUgY29udGVudCBvdXRsaW5lIGlzIGp1c3QgYSB0cmVlLgorCQkJLy8KKwkJCWNsYXNzIE15Q29udGVudE91dGxpbmVQYWdlIGV4dGVuZHMgQ29udGVudE91dGxpbmVQYWdlIHsKKwkJCQlAT3ZlcnJpZGUKKwkJCQlwdWJsaWMgdm9pZCBjcmVhdGVDb250cm9sKENvbXBvc2l0ZSBwYXJlbnQpIHsKKwkJCQkJc3VwZXIuY3JlYXRlQ29udHJvbChwYXJlbnQpOworCQkJCQljb250ZW50T3V0bGluZVZpZXdlciA9IGdldFRyZWVWaWV3ZXIoKTsKKwkJCQkJY29udGVudE91dGxpbmVWaWV3ZXIuYWRkU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyKHRoaXMpOworCisJCQkJCS8vIFNldCB1cCB0aGUgdHJlZSB2aWV3ZXIuCisJCQkJCS8vCisJCQkJCWNvbnRlbnRPdXRsaW5lVmlld2VyLnNldENvbnRlbnRQcm92aWRlcihuZXcgQWRhcHRlckZhY3RvcnlDb250ZW50UHJvdmlkZXIoYWRhcHRlckZhY3RvcnkpKTsKKwkJCQkJY29udGVudE91dGxpbmVWaWV3ZXIuc2V0TGFiZWxQcm92aWRlcihuZXcgQWRhcHRlckZhY3RvcnlMYWJlbFByb3ZpZGVyKGFkYXB0ZXJGYWN0b3J5KSk7CisJCQkJCWNvbnRlbnRPdXRsaW5lVmlld2VyLnNldElucHV0KGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKSk7CisKKwkJCQkJLy8gTWFrZSBzdXJlIG91ciBwb3B1cHMgd29yay4KKwkJCQkJLy8KKwkJCQkJY3JlYXRlQ29udGV4dE1lbnVGb3IoY29udGVudE91dGxpbmVWaWV3ZXIpOworCisJCQkJCWlmICghZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpLmdldFJlc291cmNlcygpLmlzRW1wdHkoKSkgeworCQkJCQkgIC8vIFNlbGVjdCB0aGUgcm9vdCBvYmplY3QgaW4gdGhlIHZpZXcuCisJCQkJCSAgLy8KKwkJCQkJICBjb250ZW50T3V0bGluZVZpZXdlci5zZXRTZWxlY3Rpb24obmV3IFN0cnVjdHVyZWRTZWxlY3Rpb24oZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpLmdldFJlc291cmNlcygpLmdldCgwKSksIHRydWUpOworCQkJCQl9CisJCQkJfQorCisJCQkJQE92ZXJyaWRlCisJCQkJcHVibGljIHZvaWQgbWFrZUNvbnRyaWJ1dGlvbnMoSU1lbnVNYW5hZ2VyIG1lbnVNYW5hZ2VyLCBJVG9vbEJhck1hbmFnZXIgdG9vbEJhck1hbmFnZXIsIElTdGF0dXNMaW5lTWFuYWdlciBzdGF0dXNMaW5lTWFuYWdlcikgeworCQkJCQlzdXBlci5tYWtlQ29udHJpYnV0aW9ucyhtZW51TWFuYWdlciwgdG9vbEJhck1hbmFnZXIsIHN0YXR1c0xpbmVNYW5hZ2VyKTsKKwkJCQkJY29udGVudE91dGxpbmVTdGF0dXNMaW5lTWFuYWdlciA9IHN0YXR1c0xpbmVNYW5hZ2VyOworCQkJCX0KKworCQkJCUBPdmVycmlkZQorCQkJCXB1YmxpYyB2b2lkIHNldEFjdGlvbkJhcnMoSUFjdGlvbkJhcnMgYWN0aW9uQmFycykgeworCQkJCQlzdXBlci5zZXRBY3Rpb25CYXJzKGFjdGlvbkJhcnMpOworCQkJCQlnZXRBY3Rpb25CYXJDb250cmlidXRvcigpLnNoYXJlR2xvYmFsQWN0aW9ucyh0aGlzLCBhY3Rpb25CYXJzKTsKKwkJCQl9CisJCQl9CisKKwkJCWNvbnRlbnRPdXRsaW5lUGFnZSA9IG5ldyBNeUNvbnRlbnRPdXRsaW5lUGFnZSgpOworCisJCQkvLyBMaXN0ZW4gdG8gc2VsZWN0aW9uIHNvIHRoYXQgd2UgY2FuIGhhbmRsZSBpdCBpcyBhIHNwZWNpYWwgd2F5LgorCQkJLy8KKwkJCWNvbnRlbnRPdXRsaW5lUGFnZS5hZGRTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIKKwkJCQkobmV3IElTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIoKSB7CisJCQkJCSAvLyBUaGlzIGVuc3VyZXMgdGhhdCB3ZSBoYW5kbGUgc2VsZWN0aW9ucyBjb3JyZWN0bHkuCisJCQkJCSAvLworCQkJCQkgcHVibGljIHZvaWQgc2VsZWN0aW9uQ2hhbmdlZChTZWxlY3Rpb25DaGFuZ2VkRXZlbnQgZXZlbnQpIHsKKwkJCQkJCSBoYW5kbGVDb250ZW50T3V0bGluZVNlbGVjdGlvbihldmVudC5nZXRTZWxlY3Rpb24oKSk7CisJCQkJCSB9CisJCQkJIH0pOworCQl9CisKKwkJcmV0dXJuIGNvbnRlbnRPdXRsaW5lUGFnZTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFjY2Vzc2VzIGEgY2FjaGVkIHZlcnNpb24gb2YgdGhlIHByb3BlcnR5IHNoZWV0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiBhIGNhY2hlZCB2ZXJzaW9uIG9mIHRoZSBwcm9wZXJ0eSBzaGVldC4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIElQcm9wZXJ0eVNoZWV0UGFnZSBnZXRQcm9wZXJ0eVNoZWV0UGFnZSgpIHsKKwkJaWYgKHByb3BlcnR5U2hlZXRQYWdlID09IG51bGwpIHsKKwkJCXByb3BlcnR5U2hlZXRQYWdlID0KKwkJCQluZXcgRXh0ZW5kZWRQcm9wZXJ0eVNoZWV0UGFnZShlZGl0aW5nRG9tYWluKSB7CisJCQkJCUBPdmVycmlkZQorCQkJCQlwdWJsaWMgdm9pZCBzZXRTZWxlY3Rpb25Ub1ZpZXdlcihMaXN0PD8+IHNlbGVjdGlvbikgeworCQkJCQkJRXh0ZXJuYWxEYXRhU291cmNlRWRpdG9yLnRoaXMuc2V0U2VsZWN0aW9uVG9WaWV3ZXIoc2VsZWN0aW9uKTsKKwkJCQkJCUV4dGVybmFsRGF0YVNvdXJjZUVkaXRvci50aGlzLnNldEZvY3VzKCk7CisJCQkJCX0KKworCQkJCQlAT3ZlcnJpZGUKKwkJCQkJcHVibGljIHZvaWQgc2V0QWN0aW9uQmFycyhJQWN0aW9uQmFycyBhY3Rpb25CYXJzKSB7CisJCQkJCQlzdXBlci5zZXRBY3Rpb25CYXJzKGFjdGlvbkJhcnMpOworCQkJCQkJZ2V0QWN0aW9uQmFyQ29udHJpYnV0b3IoKS5zaGFyZUdsb2JhbEFjdGlvbnModGhpcywgYWN0aW9uQmFycyk7CisJCQkJCX0KKwkJCQl9OworCQkJcHJvcGVydHlTaGVldFBhZ2Uuc2V0UHJvcGVydHlTb3VyY2VQcm92aWRlcihuZXcgQWRhcHRlckZhY3RvcnlDb250ZW50UHJvdmlkZXIoYWRhcHRlckZhY3RvcnkpKTsKKwkJfQorCisJCXJldHVybiBwcm9wZXJ0eVNoZWV0UGFnZTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGRlYWxzIHdpdGggaG93IHdlIHdhbnQgc2VsZWN0aW9uIGluIHRoZSBvdXRsaW5lciB0byBhZmZlY3QgdGhlIG90aGVyIHZpZXdzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIHNlbGVjdGlvbiAKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgaGFuZGxlQ29udGVudE91dGxpbmVTZWxlY3Rpb24oSVNlbGVjdGlvbiBzZWxlY3Rpb24pIHsKKwkJaWYgKGN1cnJlbnRWaWV3ZXJQYW5lICE9IG51bGwgJiYgIXNlbGVjdGlvbi5pc0VtcHR5KCkgJiYgc2VsZWN0aW9uIGluc3RhbmNlb2YgSVN0cnVjdHVyZWRTZWxlY3Rpb24pIHsKKwkJCUl0ZXJhdG9yPD8+IHNlbGVjdGVkRWxlbWVudHMgPSAoKElTdHJ1Y3R1cmVkU2VsZWN0aW9uKXNlbGVjdGlvbikuaXRlcmF0b3IoKTsKKwkJCWlmIChzZWxlY3RlZEVsZW1lbnRzLmhhc05leHQoKSkgeworCQkJCS8vIEdldCB0aGUgZmlyc3Qgc2VsZWN0ZWQgZWxlbWVudC4KKwkJCQkvLworCQkJCU9iamVjdCBzZWxlY3RlZEVsZW1lbnQgPSBzZWxlY3RlZEVsZW1lbnRzLm5leHQoKTsKKworCQkJCS8vIElmIGl0J3MgdGhlIHNlbGVjdGlvbiB2aWV3ZXIsIHRoZW4gd2Ugd2FudCBpdCB0byBzZWxlY3QgdGhlIHNhbWUgc2VsZWN0aW9uIGFzIHRoaXMgc2VsZWN0aW9uLgorCQkJCS8vCisJCQkJaWYgKGN1cnJlbnRWaWV3ZXJQYW5lLmdldFZpZXdlcigpID09IHNlbGVjdGlvblZpZXdlcikgeworCQkJCQlBcnJheUxpc3Q8T2JqZWN0PiBzZWxlY3Rpb25MaXN0ID0gbmV3IEFycmF5TGlzdDxPYmplY3Q+KCk7CisJCQkJCXNlbGVjdGlvbkxpc3QuYWRkKHNlbGVjdGVkRWxlbWVudCk7CisJCQkJCXdoaWxlIChzZWxlY3RlZEVsZW1lbnRzLmhhc05leHQoKSkgeworCQkJCQkJc2VsZWN0aW9uTGlzdC5hZGQoc2VsZWN0ZWRFbGVtZW50cy5uZXh0KCkpOworCQkJCQl9CisKKwkJCQkJLy8gU2V0IHRoZSBzZWxlY3Rpb24gdG8gdGhlIHdpZGdldC4KKwkJCQkJLy8KKwkJCQkJc2VsZWN0aW9uVmlld2VyLnNldFNlbGVjdGlvbihuZXcgU3RydWN0dXJlZFNlbGVjdGlvbihzZWxlY3Rpb25MaXN0KSk7CisJCQkJfQorCQkJCWVsc2UgeworCQkJCQkvLyBTZXQgdGhlIGlucHV0IHRvIHRoZSB3aWRnZXQuCisJCQkJCS8vCisJCQkJCWlmIChjdXJyZW50Vmlld2VyUGFuZS5nZXRWaWV3ZXIoKS5nZXRJbnB1dCgpICE9IHNlbGVjdGVkRWxlbWVudCkgeworCQkJCQkJY3VycmVudFZpZXdlclBhbmUuZ2V0Vmlld2VyKCkuc2V0SW5wdXQoc2VsZWN0ZWRFbGVtZW50KTsKKwkJCQkJCWN1cnJlbnRWaWV3ZXJQYW5lLnNldFRpdGxlKHNlbGVjdGVkRWxlbWVudCk7CisJCQkJCX0KKwkJCQl9CisJCQl9CisJCX0KKwl9CisKKwkvKioKKwkgKiBUaGlzIGlzIGZvciBpbXBsZW1lbnRpbmcge0BsaW5rIElFZGl0b3JQYXJ0fSBhbmQgc2ltcGx5IHRlc3RzIHRoZSBjb21tYW5kIHN0YWNrLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBib29sZWFuIGlzRGlydHkoKSB7CisJCXJldHVybiAoKEJhc2ljQ29tbWFuZFN0YWNrKWVkaXRpbmdEb21haW4uZ2V0Q29tbWFuZFN0YWNrKCkpLmlzU2F2ZU5lZWRlZCgpOworCX0KKworCS8qKgorCSAqIFRoaXMgaXMgZm9yIGltcGxlbWVudGluZyB7QGxpbmsgSUVkaXRvclBhcnR9IGFuZCBzaW1wbHkgc2F2ZXMgdGhlIG1vZGVsIGZpbGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgZG9TYXZlKElQcm9ncmVzc01vbml0b3IgcHJvZ3Jlc3NNb25pdG9yKSB7CisJCS8vIFNhdmUgb25seSByZXNvdXJjZXMgdGhhdCBoYXZlIGFjdHVhbGx5IGNoYW5nZWQuCisJCS8vCisJCWZpbmFsIE1hcDxPYmplY3QsIE9iamVjdD4gc2F2ZU9wdGlvbnMgPSBuZXcgSGFzaE1hcDxPYmplY3QsIE9iamVjdD4oKTsKKwkJc2F2ZU9wdGlvbnMucHV0KFJlc291cmNlLk9QVElPTl9TQVZFX09OTFlfSUZfQ0hBTkdFRCwgUmVzb3VyY2UuT1BUSU9OX1NBVkVfT05MWV9JRl9DSEFOR0VEX01FTU9SWV9CVUZGRVIpOworCisJCS8vIERvIHRoZSB3b3JrIHdpdGhpbiBhbiBvcGVyYXRpb24gYmVjYXVzZSB0aGlzIGlzIGEgbG9uZyBydW5uaW5nIGFjdGl2aXR5IHRoYXQgbW9kaWZpZXMgdGhlIHdvcmtiZW5jaC4KKwkJLy8KKwkJV29ya3NwYWNlTW9kaWZ5T3BlcmF0aW9uIG9wZXJhdGlvbiA9CisJCQluZXcgV29ya3NwYWNlTW9kaWZ5T3BlcmF0aW9uKCkgeworCQkJCS8vIFRoaXMgaXMgdGhlIG1ldGhvZCB0aGF0IGdldHMgaW52b2tlZCB3aGVuIHRoZSBvcGVyYXRpb24gcnVucy4KKwkJCQkvLworCQkJCUBPdmVycmlkZQorCQkJCXB1YmxpYyB2b2lkIGV4ZWN1dGUoSVByb2dyZXNzTW9uaXRvciBtb25pdG9yKSB7CisJCQkJCS8vIFNhdmUgdGhlIHJlc291cmNlcyB0byB0aGUgZmlsZSBzeXN0ZW0uCisJCQkJCS8vCisJCQkJCWJvb2xlYW4gZmlyc3QgPSB0cnVlOworCQkJCQlmb3IgKFJlc291cmNlIHJlc291cmNlIDogZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpLmdldFJlc291cmNlcygpKSB7CisJCQkJCQlpZiAoKGZpcnN0IHx8ICFyZXNvdXJjZS5nZXRDb250ZW50cygpLmlzRW1wdHkoKSB8fCBpc1BlcnNpc3RlZChyZXNvdXJjZSkpICYmICFlZGl0aW5nRG9tYWluLmlzUmVhZE9ubHkocmVzb3VyY2UpKSB7CisJCQkJCQkJdHJ5IHsKKwkJCQkJCQkJc2F2ZWRSZXNvdXJjZXMuYWRkKHJlc291cmNlKTsKKwkJCQkJCQkJcmVzb3VyY2Uuc2F2ZShzYXZlT3B0aW9ucyk7CisJCQkJCQkJfQorCQkJCQkJCWNhdGNoIChFeGNlcHRpb24gZXhjZXB0aW9uKSB7CisJCQkJCQkJCXJlc291cmNlVG9EaWFnbm9zdGljTWFwLnB1dChyZXNvdXJjZSwgYW5hbHl6ZVJlc291cmNlUHJvYmxlbXMocmVzb3VyY2UsIGV4Y2VwdGlvbikpOworCQkJCQkJCX0KKwkJCQkJCQlmaXJzdCA9IGZhbHNlOworCQkJCQkJfQorCQkJCQl9CisJCQkJfQorCQkJfTsKKworCQl1cGRhdGVQcm9ibGVtSW5kaWNhdGlvbiA9IGZhbHNlOworCQl0cnkgeworCQkJLy8gVGhpcyBydW5zIHRoZSBvcHRpb25zLCBhbmQgc2hvd3MgcHJvZ3Jlc3MuCisJCQkvLworCQkJbmV3IFByb2dyZXNzTW9uaXRvckRpYWxvZyhnZXRTaXRlKCkuZ2V0U2hlbGwoKSkucnVuKHRydWUsIGZhbHNlLCBvcGVyYXRpb24pOworCisJCQkvLyBSZWZyZXNoIHRoZSBuZWNlc3Nhcnkgc3RhdGUuCisJCQkvLworCQkJKChCYXNpY0NvbW1hbmRTdGFjayllZGl0aW5nRG9tYWluLmdldENvbW1hbmRTdGFjaygpKS5zYXZlSXNEb25lKCk7CisJCQlmaXJlUHJvcGVydHlDaGFuZ2UoSUVkaXRvclBhcnQuUFJPUF9ESVJUWSk7CisJCX0KKwkJY2F0Y2ggKEV4Y2VwdGlvbiBleGNlcHRpb24pIHsKKwkJCS8vIFNvbWV0aGluZyB3ZW50IHdyb25nIHRoYXQgc2hvdWxkbid0LgorCQkJLy8KKwkJCUV4dGVybmFsRGF0YVNvdXJjZUVkaXRvclBsdWdpbi5JTlNUQU5DRS5sb2coZXhjZXB0aW9uKTsKKwkJfQorCQl1cGRhdGVQcm9ibGVtSW5kaWNhdGlvbiA9IHRydWU7CisJCXVwZGF0ZVByb2JsZW1JbmRpY2F0aW9uKCk7CisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIHdoZXRoZXIgc29tZXRoaW5nIGhhcyBiZWVuIHBlcnNpc3RlZCB0byB0aGUgVVJJIG9mIHRoZSBzcGVjaWZpZWQgcmVzb3VyY2UuCisJICogVGhlIGltcGxlbWVudGF0aW9uIHVzZXMgdGhlIFVSSSBjb252ZXJ0ZXIgZnJvbSB0aGUgZWRpdG9yJ3MgcmVzb3VyY2Ugc2V0IHRvIHRyeSB0byBvcGVuIGFuIGlucHV0IHN0cmVhbS4gCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIGJvb2xlYW4gaXNQZXJzaXN0ZWQoUmVzb3VyY2UgcmVzb3VyY2UpIHsKKwkJYm9vbGVhbiByZXN1bHQgPSBmYWxzZTsKKwkJdHJ5IHsKKwkJCUlucHV0U3RyZWFtIHN0cmVhbSA9IGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKS5nZXRVUklDb252ZXJ0ZXIoKS5jcmVhdGVJbnB1dFN0cmVhbShyZXNvdXJjZS5nZXRVUkkoKSk7CisJCQlpZiAoc3RyZWFtICE9IG51bGwpIHsKKwkJCQlyZXN1bHQgPSB0cnVlOworCQkJCXN0cmVhbS5jbG9zZSgpOworCQkJfQorCQl9CisJCWNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7CisJCQkvLyBJZ25vcmUKKwkJfQorCQlyZXR1cm4gcmVzdWx0OworCX0KKworCS8qKgorCSAqIFRoaXMgYWx3YXlzIHJldHVybnMgdHJ1ZSBiZWNhdXNlIGl0IGlzIG5vdCBjdXJyZW50bHkgc3VwcG9ydGVkLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBib29sZWFuIGlzU2F2ZUFzQWxsb3dlZCgpIHsKKwkJcmV0dXJuIHRydWU7CisJfQorCisJLyoqCisJICogVGhpcyBhbHNvIGNoYW5nZXMgdGhlIGVkaXRvcidzIGlucHV0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGRvU2F2ZUFzKCkgeworCQlTYXZlQXNEaWFsb2cgc2F2ZUFzRGlhbG9nID0gbmV3IFNhdmVBc0RpYWxvZyhnZXRTaXRlKCkuZ2V0U2hlbGwoKSk7CisJCXNhdmVBc0RpYWxvZy5vcGVuKCk7CisJCUlQYXRoIHBhdGggPSBzYXZlQXNEaWFsb2cuZ2V0UmVzdWx0KCk7CisJCWlmIChwYXRoICE9IG51bGwpIHsKKwkJCUlGaWxlIGZpbGUgPSBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuZ2V0Um9vdCgpLmdldEZpbGUocGF0aCk7CisJCQlpZiAoZmlsZSAhPSBudWxsKSB7CisJCQkJZG9TYXZlQXMoVVJJLmNyZWF0ZVBsYXRmb3JtUmVzb3VyY2VVUkkoZmlsZS5nZXRGdWxsUGF0aCgpLnRvU3RyaW5nKCksIHRydWUpLCBuZXcgRmlsZUVkaXRvcklucHV0KGZpbGUpKTsKKwkJCX0KKwkJfQorCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIGRvU2F2ZUFzKFVSSSB1cmksIElFZGl0b3JJbnB1dCBlZGl0b3JJbnB1dCkgeworCQkoZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpLmdldFJlc291cmNlcygpLmdldCgwKSkuc2V0VVJJKHVyaSk7CisJCXNldElucHV0V2l0aE5vdGlmeShlZGl0b3JJbnB1dCk7CisJCXNldFBhcnROYW1lKGVkaXRvcklucHV0LmdldE5hbWUoKSk7CisJCUlQcm9ncmVzc01vbml0b3IgcHJvZ3Jlc3NNb25pdG9yID0KKwkJCWdldEFjdGlvbkJhcnMoKS5nZXRTdGF0dXNMaW5lTWFuYWdlcigpICE9IG51bGwgPworCQkJCWdldEFjdGlvbkJhcnMoKS5nZXRTdGF0dXNMaW5lTWFuYWdlcigpLmdldFByb2dyZXNzTW9uaXRvcigpIDoKKwkJCQluZXcgTnVsbFByb2dyZXNzTW9uaXRvcigpOworCQlkb1NhdmUocHJvZ3Jlc3NNb25pdG9yKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSBtYXJrZXIgCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIGdvdG9NYXJrZXIoSU1hcmtlciBtYXJrZXIpIHsKKwkJdHJ5IHsKKwkJCWlmIChtYXJrZXIuZ2V0VHlwZSgpLmVxdWFscyhFVmFsaWRhdG9yLk1BUktFUikpIHsKKwkJCQlTdHJpbmcgdXJpQXR0cmlidXRlID0gbWFya2VyLmdldEF0dHJpYnV0ZShFVmFsaWRhdG9yLlVSSV9BVFRSSUJVVEUsIG51bGwpOworCQkJCWlmICh1cmlBdHRyaWJ1dGUgIT0gbnVsbCkgeworCQkJCQlVUkkgdXJpID0gVVJJLmNyZWF0ZVVSSSh1cmlBdHRyaWJ1dGUpOworCQkJCQlFT2JqZWN0IGVPYmplY3QgPSBlZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkuZ2V0RU9iamVjdCh1cmksIHRydWUpOworCQkJCQlpZiAoZU9iamVjdCAhPSBudWxsKSB7CisJCQkJCSAgc2V0U2VsZWN0aW9uVG9WaWV3ZXIoQ29sbGVjdGlvbnMuc2luZ2xldG9uKGVkaXRpbmdEb21haW4uZ2V0V3JhcHBlcihlT2JqZWN0KSkpOworCQkJCQl9CisJCQkJfQorCQkJfQorCQl9CisJCWNhdGNoIChDb3JlRXhjZXB0aW9uIGV4Y2VwdGlvbikgeworCQkJRXh0ZXJuYWxEYXRhU291cmNlRWRpdG9yUGx1Z2luLklOU1RBTkNFLmxvZyhleGNlcHRpb24pOworCQl9CisJfQorCisJLyoqCisJICogVGhpcyBpcyBjYWxsZWQgZHVyaW5nIHN0YXJ0dXAuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgaW5pdChJRWRpdG9yU2l0ZSBzaXRlLCBJRWRpdG9ySW5wdXQgZWRpdG9ySW5wdXQpIHsKKwkJc2V0U2l0ZShzaXRlKTsKKwkJc2V0SW5wdXRXaXRoTm90aWZ5KGVkaXRvcklucHV0KTsKKwkJc2V0UGFydE5hbWUoZWRpdG9ySW5wdXQuZ2V0TmFtZSgpKTsKKwkJc2l0ZS5zZXRTZWxlY3Rpb25Qcm92aWRlcih0aGlzKTsKKwkJc2l0ZS5nZXRQYWdlKCkuYWRkUGFydExpc3RlbmVyKHBhcnRMaXN0ZW5lcik7CisJCVJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5hZGRSZXNvdXJjZUNoYW5nZUxpc3RlbmVyKHJlc291cmNlQ2hhbmdlTGlzdGVuZXIsIElSZXNvdXJjZUNoYW5nZUV2ZW50LlBPU1RfQ0hBTkdFKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBzZXRGb2N1cygpIHsKKwkJaWYgKGN1cnJlbnRWaWV3ZXJQYW5lICE9IG51bGwpIHsKKwkJCWN1cnJlbnRWaWV3ZXJQYW5lLnNldEZvY3VzKCk7CisJCX0KKwkJZWxzZSB7CisJCQlnZXRDb250cm9sKGdldEFjdGl2ZVBhZ2UoKSkuc2V0Rm9jdXMoKTsKKwkJfQorCX0KKworCS8qKgorCSAqIFRoaXMgaW1wbGVtZW50cyB7QGxpbmsgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uUHJvdmlkZXJ9LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIGxpc3RlbmVyIAorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBhZGRTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIoSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lciBsaXN0ZW5lcikgeworCQlzZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXJzLmFkZChsaXN0ZW5lcik7CisJfQorCisJLyoqCisJICogVGhpcyBpbXBsZW1lbnRzIHtAbGluayBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb25Qcm92aWRlcn0uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gbGlzdGVuZXIgCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIHJlbW92ZVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcihJU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyIGxpc3RlbmVyKSB7CisJCXNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcnMucmVtb3ZlKGxpc3RlbmVyKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGltcGxlbWVudHMge0BsaW5rIG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvblByb3ZpZGVyfSB0byByZXR1cm4gdGhpcyBlZGl0b3IncyBvdmVyYWxsIHNlbGVjdGlvbi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gZWRpdG9yU2VsZWN0aW9uCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBJU2VsZWN0aW9uIGdldFNlbGVjdGlvbigpIHsKKwkJcmV0dXJuIGVkaXRvclNlbGVjdGlvbjsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGltcGxlbWVudHMge0BsaW5rIG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvblByb3ZpZGVyfSB0byBzZXQgdGhpcyBlZGl0b3IncyBvdmVyYWxsIHNlbGVjdGlvbi4KKwkgKiBDYWxsaW5nIHRoaXMgcmVzdWx0IHdpbGwgbm90aWZ5IHRoZSBsaXN0ZW5lcnMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gc2VsZWN0aW9uIAorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRTZWxlY3Rpb24oSVNlbGVjdGlvbiBzZWxlY3Rpb24pIHsKKwkJZWRpdG9yU2VsZWN0aW9uID0gc2VsZWN0aW9uOworCisJCWZvciAoSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lciBsaXN0ZW5lciA6IHNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcnMpIHsKKwkJCWxpc3RlbmVyLnNlbGVjdGlvbkNoYW5nZWQobmV3IFNlbGVjdGlvbkNoYW5nZWRFdmVudCh0aGlzLCBzZWxlY3Rpb24pKTsKKwkJfQorCQlzZXRTdGF0dXNMaW5lTWFuYWdlcihzZWxlY3Rpb24pOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIHNlbGVjdGlvbiAKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgc2V0U3RhdHVzTGluZU1hbmFnZXIoSVNlbGVjdGlvbiBzZWxlY3Rpb24pIHsKKwkJSVN0YXR1c0xpbmVNYW5hZ2VyIHN0YXR1c0xpbmVNYW5hZ2VyID0gY3VycmVudFZpZXdlciAhPSBudWxsICYmIGN1cnJlbnRWaWV3ZXIgPT0gY29udGVudE91dGxpbmVWaWV3ZXIgPworCQkJY29udGVudE91dGxpbmVTdGF0dXNMaW5lTWFuYWdlciA6IGdldEFjdGlvbkJhcnMoKS5nZXRTdGF0dXNMaW5lTWFuYWdlcigpOworCisJCWlmIChzdGF0dXNMaW5lTWFuYWdlciAhPSBudWxsKSB7CisJCQlpZiAoc2VsZWN0aW9uIGluc3RhbmNlb2YgSVN0cnVjdHVyZWRTZWxlY3Rpb24pIHsKKwkJCQlDb2xsZWN0aW9uPD8+IGNvbGxlY3Rpb24gPSAoKElTdHJ1Y3R1cmVkU2VsZWN0aW9uKXNlbGVjdGlvbikudG9MaXN0KCk7CisJCQkJc3dpdGNoIChjb2xsZWN0aW9uLnNpemUoKSkgeworCQkJCQljYXNlIDA6IHsKKwkJCQkJCXN0YXR1c0xpbmVNYW5hZ2VyLnNldE1lc3NhZ2UoZ2V0U3RyaW5nKCJfVUlfTm9PYmplY3RTZWxlY3RlZCIpKTsKKwkJCQkJCWJyZWFrOworCQkJCQl9CisJCQkJCWNhc2UgMTogeworCQkJCQkJU3RyaW5nIHRleHQgPSBuZXcgQWRhcHRlckZhY3RvcnlJdGVtRGVsZWdhdG9yKGFkYXB0ZXJGYWN0b3J5KS5nZXRUZXh0KGNvbGxlY3Rpb24uaXRlcmF0b3IoKS5uZXh0KCkpOworCQkJCQkJc3RhdHVzTGluZU1hbmFnZXIuc2V0TWVzc2FnZShnZXRTdHJpbmcoIl9VSV9TaW5nbGVPYmplY3RTZWxlY3RlZCIsIHRleHQpKTsKKwkJCQkJCWJyZWFrOworCQkJCQl9CisJCQkJCWRlZmF1bHQ6IHsKKwkJCQkJCXN0YXR1c0xpbmVNYW5hZ2VyLnNldE1lc3NhZ2UoZ2V0U3RyaW5nKCJfVUlfTXVsdGlPYmplY3RTZWxlY3RlZCIsIEludGVnZXIudG9TdHJpbmcoY29sbGVjdGlvbi5zaXplKCkpKSk7CisJCQkJCQlicmVhazsKKwkJCQkJfQorCQkJCX0KKwkJCX0KKwkJCWVsc2UgeworCQkJCXN0YXR1c0xpbmVNYW5hZ2VyLnNldE1lc3NhZ2UoIiIpOworCQkJfQorCQl9CisJfQorCisJLyoqCisJICogVGhpcyBsb29rcyB1cCBhIHN0cmluZyBpbiB0aGUgcGx1Z2luJ3MgcGx1Z2luLnByb3BlcnRpZXMgZmlsZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcml2YXRlIHN0YXRpYyBTdHJpbmcgZ2V0U3RyaW5nKFN0cmluZyBrZXkpIHsKKwkJcmV0dXJuIEV4dGVybmFsRGF0YVNvdXJjZUVkaXRvclBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoa2V5KTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGxvb2tzIHVwIGEgc3RyaW5nIGluIHBsdWdpbi5wcm9wZXJ0aWVzLCBtYWtpbmcgYSBzdWJzdGl0dXRpb24uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIGdldFN0cmluZyhTdHJpbmcga2V5LCBPYmplY3QgczEpIHsKKwkJcmV0dXJuIEV4dGVybmFsRGF0YVNvdXJjZUVkaXRvclBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoa2V5LCBuZXcgT2JqZWN0IFtdIHsgczEgfSk7CisJfQorCisJLyoqCisJICogVGhpcyBpbXBsZW1lbnRzIHtAbGluayBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSU1lbnVMaXN0ZW5lcn0gdG8gaGVscCBmaWxsIHRoZSBjb250ZXh0IG1lbnVzIHdpdGggY29udHJpYnV0aW9ucyBmcm9tIHRoZSBFZGl0IG1lbnUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gbWVudU1hbmFnZXIgCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIG1lbnVBYm91dFRvU2hvdyhJTWVudU1hbmFnZXIgbWVudU1hbmFnZXIpIHsKKwkJKChJTWVudUxpc3RlbmVyKWdldEVkaXRvclNpdGUoKS5nZXRBY3Rpb25CYXJDb250cmlidXRvcigpKS5tZW51QWJvdXRUb1Nob3cobWVudU1hbmFnZXIpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiBhY3Rpb25CYXJDb250cmlidXRvcgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRWRpdGluZ0RvbWFpbkFjdGlvbkJhckNvbnRyaWJ1dG9yIGdldEFjdGlvbkJhckNvbnRyaWJ1dG9yKCkgeworCQlyZXR1cm4gKEVkaXRpbmdEb21haW5BY3Rpb25CYXJDb250cmlidXRvcilnZXRFZGl0b3JTaXRlKCkuZ2V0QWN0aW9uQmFyQ29udHJpYnV0b3IoKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIGFjdGlvbkJhcnMKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIElBY3Rpb25CYXJzIGdldEFjdGlvbkJhcnMoKSB7CisJCXJldHVybiBnZXRBY3Rpb25CYXJDb250cmlidXRvcigpLmdldEFjdGlvbkJhcnMoKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIGFkYXB0ZXIgZmFjdG9yeQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQWRhcHRlckZhY3RvcnkgZ2V0QWRhcHRlckZhY3RvcnkoKSB7CisJCXJldHVybiBhZGFwdGVyRmFjdG9yeTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBkaXNwb3NlKCkgeworCQl1cGRhdGVQcm9ibGVtSW5kaWNhdGlvbiA9IGZhbHNlOworCisJCVJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5yZW1vdmVSZXNvdXJjZUNoYW5nZUxpc3RlbmVyKHJlc291cmNlQ2hhbmdlTGlzdGVuZXIpOworCisJCWdldFNpdGUoKS5nZXRQYWdlKCkucmVtb3ZlUGFydExpc3RlbmVyKHBhcnRMaXN0ZW5lcik7CisKKwkJYWRhcHRlckZhY3RvcnkuZGlzcG9zZSgpOworCisJCWlmIChnZXRBY3Rpb25CYXJDb250cmlidXRvcigpLmdldEFjdGl2ZUVkaXRvcigpID09IHRoaXMpIHsKKwkJCWdldEFjdGlvbkJhckNvbnRyaWJ1dG9yKCkuc2V0QWN0aXZlRWRpdG9yKG51bGwpOworCQl9CisKKwkJaWYgKHByb3BlcnR5U2hlZXRQYWdlICE9IG51bGwpIHsKKwkJCXByb3BlcnR5U2hlZXRQYWdlLmRpc3Bvc2UoKTsKKwkJfQorCisJCWlmIChjb250ZW50T3V0bGluZVBhZ2UgIT0gbnVsbCkgeworCQkJY29udGVudE91dGxpbmVQYWdlLmRpc3Bvc2UoKTsKKwkJfQorCisJCXN1cGVyLmRpc3Bvc2UoKTsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHdoZXRoZXIgdGhlIG91dGxpbmUgdmlldyBzaG91bGQgYmUgcHJlc2VudGVkIHRvIHRoZSB1c2VyLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBib29sZWFuIHNob3dPdXRsaW5lVmlldygpIHsKKwkJcmV0dXJuIHRydWU7CisJfQorfQpkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMuZXh0ZXJuYWxkYXRhc291cmNlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvZXh0ZXJuYWxkYXRhc291cmNlL3ByZXNlbnRhdGlvbi9FeHRlcm5hbERhdGFTb3VyY2VFZGl0b3JQbHVnaW4uamF2YSBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzLmV4dGVybmFsZGF0YXNvdXJjZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL2V4dGVybmFsZGF0YXNvdXJjZS9wcmVzZW50YXRpb24vRXh0ZXJuYWxEYXRhU291cmNlRWRpdG9yUGx1Z2luLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDBlNzU4NgotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzLmV4dGVybmFsZGF0YXNvdXJjZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL2V4dGVybmFsZGF0YXNvdXJjZS9wcmVzZW50YXRpb24vRXh0ZXJuYWxEYXRhU291cmNlRWRpdG9yUGx1Z2luLmphdmEKQEAgLTAsMCArMSwxMjcgQEAKKy8vIEV4dGVybmFsRGF0YVNvdXJjZUVkaXRvclBsdWdpbi5qYXZhCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leHRlcm5hbGRhdGFzb3VyY2UucHJlc2VudGF0aW9uOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA3LCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24uRU1GUGx1Z2luOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udWkuRWNsaXBzZVVJUGx1Z2luOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5SZXNvdXJjZUxvY2F0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5wcm92aWRlci5Db3JlRWRpdFBsdWdpbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5wcm92aWRlci5EZWZpbml0aW9uc0VkaXRQbHVnaW47CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLnByb3ZpZGVyLkRpc2Vhc2Vtb2RlbHNFZGl0UGx1Z2luOworaW1wb3J0IG9yZy5vc2dpLmZyYW1ld29yay5CdW5kbGVDb250ZXh0OworCisvKioKKyAqIFRoaXMgaXMgdGhlIGNlbnRyYWwgc2luZ2xldG9uIGZvciB0aGUgRXh0ZXJuYWxEYXRhU291cmNlIGVkaXRvciBwbHVnaW4uCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBmaW5hbCBjbGFzcyBFeHRlcm5hbERhdGFTb3VyY2VFZGl0b3JQbHVnaW4gZXh0ZW5kcyBFTUZQbHVnaW4geworCS8qKgorCSAqIEtlZXAgdHJhY2sgb2YgdGhlIHNpbmdsZXRvbi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIEV4dGVybmFsRGF0YVNvdXJjZUVkaXRvclBsdWdpbiBJTlNUQU5DRSA9IG5ldyBFeHRlcm5hbERhdGFTb3VyY2VFZGl0b3JQbHVnaW4oKTsKKwkKKwkvKioKKwkgKiBLZWVwIHRyYWNrIG9mIHRoZSBzaW5nbGV0b24uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJc3RhdGljIEltcGxlbWVudGF0aW9uIHBsdWdpbjsKKworCS8qKgorCSAqIENyZWF0ZSB0aGUgaW5zdGFuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEV4dGVybmFsRGF0YVNvdXJjZUVkaXRvclBsdWdpbigpIHsKKwkJc3VwZXIKKwkJCShuZXcgUmVzb3VyY2VMb2NhdG9yIFtdIHsKKwkJCQlEaXNlYXNlbW9kZWxzRWRpdFBsdWdpbi5JTlNUQU5DRSwKKwkJCQlDb3JlRWRpdFBsdWdpbi5JTlNUQU5DRSwKKwkJCQlEZWZpbml0aW9uc0VkaXRQbHVnaW4uSU5TVEFOQ0UsCisJCQl9KTsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBzaW5nbGV0b24gaW5zdGFuY2Ugb2YgdGhlIEVjbGlwc2UgcGx1Z2luLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgc2luZ2xldG9uIGluc3RhbmNlLgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgUmVzb3VyY2VMb2NhdG9yIGdldFBsdWdpblJlc291cmNlTG9jYXRvcigpIHsKKwkJcmV0dXJuIHBsdWdpbjsKKwl9CisJCisJLyoqCisJICogUmV0dXJucyB0aGUgc2luZ2xldG9uIGluc3RhbmNlIG9mIHRoZSBFY2xpcHNlIHBsdWdpbi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIHNpbmdsZXRvbiBpbnN0YW5jZS4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHN0YXRpYyBJbXBsZW1lbnRhdGlvbiBnZXRQbHVnaW4oKSB7CisJCXJldHVybiBwbHVnaW47CisJfQorCQorCS8qKgorCSAqIFRoZSBhY3R1YWwgaW1wbGVtZW50YXRpb24gb2YgdGhlIEVjbGlwc2UgPGI+UGx1Z2luPC9iPi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJcHVibGljIHN0YXRpYyBjbGFzcyBJbXBsZW1lbnRhdGlvbiBleHRlbmRzIEVjbGlwc2VVSVBsdWdpbiB7CisJCS8qKgorCQkgKiBDcmVhdGVzIGFuIGluc3RhbmNlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZCBOT1QKKwkJICovCisJCXB1YmxpYyBJbXBsZW1lbnRhdGlvbigpIHsKKwkJCXN1cGVyKCk7CisKKwkJCS8vIFJlbWVtYmVyIHRoZSBzdGF0aWMgaW5zdGFuY2UuCisJCQkvLworCQkJcGx1Z2luID0gdGhpczsKKwkJfQorCisJCS8qKgorCQkgKiAKKwkJICovCisJCUBPdmVycmlkZQorCQlwdWJsaWMgdm9pZCBzdGFydChCdW5kbGVDb250ZXh0IGNvbnRleHQpIHRocm93cyBFeGNlcHRpb24geworCQkJc3VwZXIuc3RhcnQoY29udGV4dCk7CisJCQluZXcgRXh0ZXJuYWxEYXRhU291cmNlRGlzZWFzZU1vZGVsUHJvcGVydHlFZGl0b3JBZGFwdGVyRmFjdG9yeSgpOworCQl9CisKKwkJLyoqCisJCSAqIAorCQkgKi8KKwkJQE92ZXJyaWRlCisJCXB1YmxpYyB2b2lkIHN0b3AoQnVuZGxlQ29udGV4dCBjb250ZXh0KSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJCS8vIFRPRE8gQXV0by1nZW5lcmF0ZWQgbWV0aG9kIHN0dWIKKwkJCXN1cGVyLnN0b3AoY29udGV4dCk7CisJCX0KKworCQkKKwkJCisJfSAvLyBJbXBsZW1lbnRhdGlvbgorCit9CmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy5leHRlcm5hbGRhdGFzb3VyY2Uvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9leHRlcm5hbGRhdGFzb3VyY2UvcHJlc2VudGF0aW9uL0V4dGVybmFsRGF0YVNvdXJjZU1vZGVsV2l6YXJkLmphdmEgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy5leHRlcm5hbGRhdGFzb3VyY2Uvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9leHRlcm5hbGRhdGFzb3VyY2UvcHJlc2VudGF0aW9uL0V4dGVybmFsRGF0YVNvdXJjZU1vZGVsV2l6YXJkLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjkyYTg1YgotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzLmV4dGVybmFsZGF0YXNvdXJjZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL2V4dGVybmFsZGF0YXNvdXJjZS9wcmVzZW50YXRpb24vRXh0ZXJuYWxEYXRhU291cmNlTW9kZWxXaXphcmQuamF2YQpAQCAtMCwwICsxLDYwMyBAQAorLy8gRXh0ZXJuYWxEYXRhU291cmNlTW9kZWxXaXphcmQuamF2YQorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXh0ZXJuYWxkYXRhc291cmNlLnByZXNlbnRhdGlvbjsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNywgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OworaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOworaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uczsKK2ltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuTWFwOworaW1wb3J0IGphdmEudXRpbC5NaXNzaW5nUmVzb3VyY2VFeGNlcHRpb247CitpbXBvcnQgamF2YS51dGlsLlN0cmluZ1Rva2VuaXplcjsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklDb250YWluZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUZpbGU7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUZvbGRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUmVzb3VyY2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuUmVzb3VyY2VzUGx1Z2luOworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUHJvZ3Jlc3NNb25pdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QYXRoOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24uQ29tbW9uUGx1Z2luOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5VUkk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzczsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzaWZpZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3Q7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnJlc291cmNlLlJlc291cmNlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5yZXNvdXJjZS5SZXNvdXJjZVNldDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUucmVzb3VyY2UuaW1wbC5SZXNvdXJjZVNldEltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnhtaS5YTUxSZXNvdXJjZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5wcm92aWRlci5FeHRlbmRlZEltYWdlUmVnaXN0cnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuZGlhbG9ncy5NZXNzYWdlRGlhbG9nOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTdHJ1Y3R1cmVkU2VsZWN0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuU3RydWN0dXJlZFNlbGVjdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS53aXphcmQuV2l6YXJkOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLndpemFyZC5XaXphcmRQYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leHRlcm5hbGRhdGFzb3VyY2UuRXh0ZXJuYWxEYXRhU291cmNlRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXh0ZXJuYWxkYXRhc291cmNlLkV4dGVybmFsRGF0YVNvdXJjZVBhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4dGVybmFsZGF0YXNvdXJjZS5wcm92aWRlci5FeHRlcm5hbERhdGFTb3VyY2VFZGl0UGx1Z2luOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5TV1Q7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5Nb2RpZnlFdmVudDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLk1vZGlmeUxpc3RlbmVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5sYXlvdXQuR3JpZERhdGE7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5HcmlkTGF5b3V0OworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbWJvOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5MYWJlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5JTmV3V2l6YXJkOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2g7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaFBhZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaFBhcnQ7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaFdpbmRvdzsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5QYXJ0SW5pdEV4Y2VwdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5hY3Rpb25zLldvcmtzcGFjZU1vZGlmeU9wZXJhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5kaWFsb2dzLldpemFyZE5ld0ZpbGVDcmVhdGlvblBhZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkucGFydC5GaWxlRWRpdG9ySW5wdXQ7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkucGFydC5JU2V0U2VsZWN0aW9uVGFyZ2V0OworCisvKioKKyAqIFRoaXMgaXMgYSBzaW1wbGUgd2l6YXJkIGZvciBjcmVhdGluZyBhIG5ldyBtb2RlbCBmaWxlLgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgRXh0ZXJuYWxEYXRhU291cmNlTW9kZWxXaXphcmQgZXh0ZW5kcyBXaXphcmQgaW1wbGVtZW50cyBJTmV3V2l6YXJkIHsKKwkvKioKKwkgKiBUaGlzIGNhY2hlcyBhbiBpbnN0YW5jZSBvZiB0aGUgbW9kZWwgcGFja2FnZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgRXh0ZXJuYWxEYXRhU291cmNlUGFja2FnZSBleHRlcm5hbERhdGFTb3VyY2VQYWNrYWdlID0gRXh0ZXJuYWxEYXRhU291cmNlUGFja2FnZS5lSU5TVEFOQ0U7CisKKwkvKioKKwkgKiBUaGlzIGNhY2hlcyBhbiBpbnN0YW5jZSBvZiB0aGUgbW9kZWwgZmFjdG9yeS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgRXh0ZXJuYWxEYXRhU291cmNlRmFjdG9yeSBleHRlcm5hbERhdGFTb3VyY2VGYWN0b3J5ID0gZXh0ZXJuYWxEYXRhU291cmNlUGFja2FnZS5nZXRFeHRlcm5hbERhdGFTb3VyY2VGYWN0b3J5KCk7CisKKwkvKioKKwkgKiBUaGlzIGlzIHRoZSBmaWxlIGNyZWF0aW9uIHBhZ2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIEV4dGVybmFsRGF0YVNvdXJjZU1vZGVsV2l6YXJkTmV3RmlsZUNyZWF0aW9uUGFnZSBuZXdGaWxlQ3JlYXRpb25QYWdlOworCisJLyoqCisJICogVGhpcyBpcyB0aGUgaW5pdGlhbCBvYmplY3QgY3JlYXRpb24gcGFnZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgRXh0ZXJuYWxEYXRhU291cmNlTW9kZWxXaXphcmRJbml0aWFsT2JqZWN0Q3JlYXRpb25QYWdlIGluaXRpYWxPYmplY3RDcmVhdGlvblBhZ2U7CisKKwkvKioKKwkgKiBSZW1lbWJlciB0aGUgc2VsZWN0aW9uIGR1cmluZyBpbml0aWFsaXphdGlvbiBmb3IgcG9wdWxhdGluZyB0aGUgZGVmYXVsdCBjb250YWluZXIuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIElTdHJ1Y3R1cmVkU2VsZWN0aW9uIHNlbGVjdGlvbjsKKworCS8qKgorCSAqIFJlbWVtYmVyIHRoZSB3b3JrYmVuY2ggZHVyaW5nIGluaXRpYWxpemF0aW9uLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBJV29ya2JlbmNoIHdvcmtiZW5jaDsKKworCS8qKgorCSAqIENhY2hlcyB0aGUgbmFtZXMgb2YgdGhlIHR5cGVzIHRoYXQgY2FuIGJlIGNyZWF0ZWQgYXMgdGhlIHJvb3Qgb2JqZWN0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBMaXN0PFN0cmluZz4gaW5pdGlhbE9iamVjdE5hbWVzOworCisJLyoqCisJICogVGhpcyBqdXN0IHJlY29yZHMgdGhlIGluZm9ybWF0aW9uLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIHdvcmtiZW5jaCAKKwkgKiBAcGFyYW0gc2VsZWN0aW9uIAorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBpbml0KElXb3JrYmVuY2ggd29ya2JlbmNoLCBJU3RydWN0dXJlZFNlbGVjdGlvbiBzZWxlY3Rpb24pIHsKKwkJdGhpcy53b3JrYmVuY2ggPSB3b3JrYmVuY2g7CisJCXRoaXMuc2VsZWN0aW9uID0gc2VsZWN0aW9uOworCQlzZXRXaW5kb3dUaXRsZShFeHRlcm5hbERhdGFTb3VyY2VFZGl0b3JQbHVnaW4uSU5TVEFOQ0UuZ2V0U3RyaW5nKCJfVUlfV2l6YXJkX2xhYmVsIikpOworCQlzZXREZWZhdWx0UGFnZUltYWdlRGVzY3JpcHRvcihFeHRlbmRlZEltYWdlUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0SW1hZ2VEZXNjcmlwdG9yKEV4dGVybmFsRGF0YVNvdXJjZUVkaXRvclBsdWdpbi5JTlNUQU5DRS5nZXRJbWFnZSgiZnVsbC93aXpiYW4vTmV3RXh0ZXJuYWxEYXRhU291cmNlIikpKTsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBuYW1lcyBvZiB0aGUgdHlwZXMgdGhhdCBjYW4gYmUgY3JlYXRlZCBhcyB0aGUgcm9vdCBvYmplY3QuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIENvbGxlY3Rpb248U3RyaW5nPiBnZXRJbml0aWFsT2JqZWN0TmFtZXMoKSB7CisJCWlmIChpbml0aWFsT2JqZWN0TmFtZXMgPT0gbnVsbCkgeworCQkJaW5pdGlhbE9iamVjdE5hbWVzID0gbmV3IEFycmF5TGlzdDxTdHJpbmc+KCk7CisJCQlmb3IgKEVDbGFzc2lmaWVyIGVDbGFzc2lmaWVyIDogZXh0ZXJuYWxEYXRhU291cmNlUGFja2FnZS5nZXRFQ2xhc3NpZmllcnMoKSkgeworCQkJCWlmIChlQ2xhc3NpZmllciBpbnN0YW5jZW9mIEVDbGFzcykgeworCQkJCQlFQ2xhc3MgZUNsYXNzID0gKEVDbGFzcyllQ2xhc3NpZmllcjsKKwkJCQkJaWYgKCFlQ2xhc3MuaXNBYnN0cmFjdCgpKSB7CisJCQkJCQlpbml0aWFsT2JqZWN0TmFtZXMuYWRkKGVDbGFzcy5nZXROYW1lKCkpOworCQkJCQl9CisJCQkJfQorCQkJfQorCQkJQ29sbGVjdGlvbnMuc29ydChpbml0aWFsT2JqZWN0TmFtZXMsIENvbW1vblBsdWdpbi5JTlNUQU5DRS5nZXRDb21wYXJhdG9yKCkpOworCQl9CisJCXJldHVybiBpbml0aWFsT2JqZWN0TmFtZXM7CisJfQorCisJLyoqCisJICogQ3JlYXRlIGEgbmV3IG1vZGVsLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBFT2JqZWN0IGNyZWF0ZUluaXRpYWxNb2RlbCgpIHsKKwkJRUNsYXNzIGVDbGFzcyA9IChFQ2xhc3MpZXh0ZXJuYWxEYXRhU291cmNlUGFja2FnZS5nZXRFQ2xhc3NpZmllcihpbml0aWFsT2JqZWN0Q3JlYXRpb25QYWdlLmdldEluaXRpYWxPYmplY3ROYW1lKCkpOworCQlFT2JqZWN0IHJvb3RPYmplY3QgPSBleHRlcm5hbERhdGFTb3VyY2VGYWN0b3J5LmNyZWF0ZShlQ2xhc3MpOworCQlyZXR1cm4gcm9vdE9iamVjdDsKKwl9CisKKwkvKioKKwkgKiBEbyB0aGUgd29yayBhZnRlciBldmVyeXRoaW5nIGlzIHNwZWNpZmllZC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgYm9vbGVhbiBwZXJmb3JtRmluaXNoKCkgeworCQl0cnkgeworCQkJLy8gUmVtZW1iZXIgdGhlIGZpbGUuCisJCQkvLworCQkJZmluYWwgSUZpbGUgbW9kZWxGaWxlID0gZ2V0TW9kZWxGaWxlKCk7CisKKwkJCS8vIERvIHRoZSB3b3JrIHdpdGhpbiBhbiBvcGVyYXRpb24uCisJCQkvLworCQkJV29ya3NwYWNlTW9kaWZ5T3BlcmF0aW9uIG9wZXJhdGlvbiA9CisJCQkJbmV3IFdvcmtzcGFjZU1vZGlmeU9wZXJhdGlvbigpIHsKKwkJCQkJQE92ZXJyaWRlCisJCQkJCXByb3RlY3RlZCB2b2lkIGV4ZWN1dGUoSVByb2dyZXNzTW9uaXRvciBwcm9ncmVzc01vbml0b3IpIHsKKwkJCQkJCXRyeSB7CisJCQkJCQkJLy8gQ3JlYXRlIGEgcmVzb3VyY2Ugc2V0CisJCQkJCQkJLy8KKwkJCQkJCQlSZXNvdXJjZVNldCByZXNvdXJjZVNldCA9IG5ldyBSZXNvdXJjZVNldEltcGwoKTsKKworCQkJCQkJCS8vIEdldCB0aGUgVVJJIG9mIHRoZSBtb2RlbCBmaWxlLgorCQkJCQkJCS8vCisJCQkJCQkJVVJJIGZpbGVVUkkgPSBVUkkuY3JlYXRlUGxhdGZvcm1SZXNvdXJjZVVSSShtb2RlbEZpbGUuZ2V0RnVsbFBhdGgoKS50b1N0cmluZygpLCB0cnVlKTsKKworCQkJCQkJCS8vIENyZWF0ZSBhIHJlc291cmNlIGZvciB0aGlzIGZpbGUuCisJCQkJCQkJLy8KKwkJCQkJCQlSZXNvdXJjZSByZXNvdXJjZSA9IHJlc291cmNlU2V0LmNyZWF0ZVJlc291cmNlKGZpbGVVUkkpOworCisJCQkJCQkJLy8gQWRkIHRoZSBpbml0aWFsIG1vZGVsIG9iamVjdCB0byB0aGUgY29udGVudHMuCisJCQkJCQkJLy8KKwkJCQkJCQlFT2JqZWN0IHJvb3RPYmplY3QgPSBjcmVhdGVJbml0aWFsTW9kZWwoKTsKKwkJCQkJCQlpZiAocm9vdE9iamVjdCAhPSBudWxsKSB7CisJCQkJCQkJCXJlc291cmNlLmdldENvbnRlbnRzKCkuYWRkKHJvb3RPYmplY3QpOworCQkJCQkJCX0KKworCQkJCQkJCS8vIFNhdmUgdGhlIGNvbnRlbnRzIG9mIHRoZSByZXNvdXJjZSB0byB0aGUgZmlsZSBzeXN0ZW0uCisJCQkJCQkJLy8KKwkJCQkJCQlNYXA8T2JqZWN0LCBPYmplY3Q+IG9wdGlvbnMgPSBuZXcgSGFzaE1hcDxPYmplY3QsIE9iamVjdD4oKTsKKwkJCQkJCQlvcHRpb25zLnB1dChYTUxSZXNvdXJjZS5PUFRJT05fRU5DT0RJTkcsIGluaXRpYWxPYmplY3RDcmVhdGlvblBhZ2UuZ2V0RW5jb2RpbmcoKSk7CisJCQkJCQkJcmVzb3VyY2Uuc2F2ZShvcHRpb25zKTsKKwkJCQkJCX0KKwkJCQkJCWNhdGNoIChFeGNlcHRpb24gZXhjZXB0aW9uKSB7CisJCQkJCQkJRXh0ZXJuYWxEYXRhU291cmNlRWRpdG9yUGx1Z2luLklOU1RBTkNFLmxvZyhleGNlcHRpb24pOworCQkJCQkJfQorCQkJCQkJZmluYWxseSB7CisJCQkJCQkJcHJvZ3Jlc3NNb25pdG9yLmRvbmUoKTsKKwkJCQkJCX0KKwkJCQkJfQorCQkJCX07CisKKwkJCWdldENvbnRhaW5lcigpLnJ1bihmYWxzZSwgZmFsc2UsIG9wZXJhdGlvbik7CisKKwkJCS8vIFNlbGVjdCB0aGUgbmV3IGZpbGUgcmVzb3VyY2UgaW4gdGhlIGN1cnJlbnQgdmlldy4KKwkJCS8vCisJCQlJV29ya2JlbmNoV2luZG93IHdvcmtiZW5jaFdpbmRvdyA9IHdvcmtiZW5jaC5nZXRBY3RpdmVXb3JrYmVuY2hXaW5kb3coKTsKKwkJCUlXb3JrYmVuY2hQYWdlIHBhZ2UgPSB3b3JrYmVuY2hXaW5kb3cuZ2V0QWN0aXZlUGFnZSgpOworCQkJZmluYWwgSVdvcmtiZW5jaFBhcnQgYWN0aXZlUGFydCA9IHBhZ2UuZ2V0QWN0aXZlUGFydCgpOworCQkJaWYgKGFjdGl2ZVBhcnQgaW5zdGFuY2VvZiBJU2V0U2VsZWN0aW9uVGFyZ2V0KSB7CisJCQkJZmluYWwgSVNlbGVjdGlvbiB0YXJnZXRTZWxlY3Rpb24gPSBuZXcgU3RydWN0dXJlZFNlbGVjdGlvbihtb2RlbEZpbGUpOworCQkJCWdldFNoZWxsKCkuZ2V0RGlzcGxheSgpLmFzeW5jRXhlYworCQkJCQkobmV3IFJ1bm5hYmxlKCkgeworCQkJCQkJIHB1YmxpYyB2b2lkIHJ1bigpIHsKKwkJCQkJCQkgKChJU2V0U2VsZWN0aW9uVGFyZ2V0KWFjdGl2ZVBhcnQpLnNlbGVjdFJldmVhbCh0YXJnZXRTZWxlY3Rpb24pOworCQkJCQkJIH0KKwkJCQkJIH0pOworCQkJfQorCisJCQkvLyBPcGVuIGFuIGVkaXRvciBvbiB0aGUgbmV3IGZpbGUuCisJCQkvLworCQkJdHJ5IHsKKwkJCQlwYWdlLm9wZW5FZGl0b3IKKwkJCQkJKG5ldyBGaWxlRWRpdG9ySW5wdXQobW9kZWxGaWxlKSwKKwkJCQkJIHdvcmtiZW5jaC5nZXRFZGl0b3JSZWdpc3RyeSgpLmdldERlZmF1bHRFZGl0b3IobW9kZWxGaWxlLmdldEZ1bGxQYXRoKCkudG9TdHJpbmcoKSkuZ2V0SWQoKSk7CisJCQl9CisJCQljYXRjaCAoUGFydEluaXRFeGNlcHRpb24gZXhjZXB0aW9uKSB7CisJCQkJTWVzc2FnZURpYWxvZy5vcGVuRXJyb3Iod29ya2JlbmNoV2luZG93LmdldFNoZWxsKCksIEV4dGVybmFsRGF0YVNvdXJjZUVkaXRvclBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoIl9VSV9PcGVuRWRpdG9yRXJyb3JfbGFiZWwiKSwgZXhjZXB0aW9uLmdldE1lc3NhZ2UoKSk7CisJCQkJcmV0dXJuIGZhbHNlOworCQkJfQorCisJCQlyZXR1cm4gdHJ1ZTsKKwkJfQorCQljYXRjaCAoRXhjZXB0aW9uIGV4Y2VwdGlvbikgeworCQkJRXh0ZXJuYWxEYXRhU291cmNlRWRpdG9yUGx1Z2luLklOU1RBTkNFLmxvZyhleGNlcHRpb24pOworCQkJcmV0dXJuIGZhbHNlOworCQl9CisJfQorCisJLyoqCisJICogVGhpcyBpcyB0aGUgb25lIHBhZ2Ugb2YgdGhlIHdpemFyZC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgY2xhc3MgRXh0ZXJuYWxEYXRhU291cmNlTW9kZWxXaXphcmROZXdGaWxlQ3JlYXRpb25QYWdlIGV4dGVuZHMgV2l6YXJkTmV3RmlsZUNyZWF0aW9uUGFnZSB7CisJCS8qKgorCQkgKiBQYXNzIGluIHRoZSBzZWxlY3Rpb24uCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAcGFyYW0gcGFnZUlkIAorCQkgKiBAcGFyYW0gc2VsZWN0aW9uIAorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlwdWJsaWMgRXh0ZXJuYWxEYXRhU291cmNlTW9kZWxXaXphcmROZXdGaWxlQ3JlYXRpb25QYWdlKFN0cmluZyBwYWdlSWQsIElTdHJ1Y3R1cmVkU2VsZWN0aW9uIHNlbGVjdGlvbikgeworCQkJc3VwZXIocGFnZUlkLCBzZWxlY3Rpb24pOworCQl9CisKKwkJLyoqCisJCSAqIFRoZSBmcmFtZXdvcmsgY2FsbHMgdGhpcyB0byBzZWUgaWYgdGhlIGZpbGUgaXMgY29ycmVjdC4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJQE92ZXJyaWRlCisJCXByb3RlY3RlZCBib29sZWFuIHZhbGlkYXRlUGFnZSgpIHsKKwkJCWlmIChzdXBlci52YWxpZGF0ZVBhZ2UoKSkgeworCQkJCS8vIE1ha2Ugc3VyZSB0aGUgZmlsZSBlbmRzIGluICIuZXh0ZXJuYWxkYXRhc291cmNlIi4KKwkJCQkvLworCQkJCVN0cmluZyByZXF1aXJlZEV4dCA9IEV4dGVybmFsRGF0YVNvdXJjZUVkaXRvclBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoIl9VSV9FeHRlcm5hbERhdGFTb3VyY2VFZGl0b3JGaWxlbmFtZUV4dGVuc2lvbiIpOworCQkJCVN0cmluZyBlbnRlcmVkRXh0ID0gbmV3IFBhdGgoZ2V0RmlsZU5hbWUoKSkuZ2V0RmlsZUV4dGVuc2lvbigpOworCQkJCWlmIChlbnRlcmVkRXh0ID09IG51bGwgfHwgIWVudGVyZWRFeHQuZXF1YWxzKHJlcXVpcmVkRXh0KSkgeworCQkJCQlzZXRFcnJvck1lc3NhZ2UoRXh0ZXJuYWxEYXRhU291cmNlRWRpdG9yUGx1Z2luLklOU1RBTkNFLmdldFN0cmluZygiX1dBUk5fRmlsZW5hbWVFeHRlbnNpb24iLCBuZXcgT2JqZWN0IFtdIHsgcmVxdWlyZWRFeHQgfSkpOworCQkJCQlyZXR1cm4gZmFsc2U7CisJCQkJfQorCQkJCXJldHVybiB0cnVlOworCQkJfQorCQkJcmV0dXJuIGZhbHNlOworCQl9CisKKwkJLyoqCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAcmV0dXJuIG1vZGVsRmlsZQorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlwdWJsaWMgSUZpbGUgZ2V0TW9kZWxGaWxlKCkgeworCQkJcmV0dXJuIFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5nZXRSb290KCkuZ2V0RmlsZShnZXRDb250YWluZXJGdWxsUGF0aCgpLmFwcGVuZChnZXRGaWxlTmFtZSgpKSk7CisJCX0KKwl9CisKKwkvKioKKwkgKiBUaGlzIGlzIHRoZSBwYWdlIHdoZXJlIHRoZSB0eXBlIG9mIG9iamVjdCB0byBjcmVhdGUgaXMgc2VsZWN0ZWQuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIGNsYXNzIEV4dGVybmFsRGF0YVNvdXJjZU1vZGVsV2l6YXJkSW5pdGlhbE9iamVjdENyZWF0aW9uUGFnZSBleHRlbmRzIFdpemFyZFBhZ2UgeworCQkvKioKKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCXByb3RlY3RlZCBDb21ibyBpbml0aWFsT2JqZWN0RmllbGQ7CisKKwkJLyoqCisJCSAqIEBnZW5lcmF0ZWQKKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqLworCQlwcm90ZWN0ZWQgTGlzdDxTdHJpbmc+IGVuY29kaW5nczsKKworCQkvKioKKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCXByb3RlY3RlZCBDb21ibyBlbmNvZGluZ0ZpZWxkOworCisJCS8qKgorCQkgKiBQYXNzIGluIHRoZSBzZWxlY3Rpb24uCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAcGFyYW0gcGFnZUlkIAorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlwdWJsaWMgRXh0ZXJuYWxEYXRhU291cmNlTW9kZWxXaXphcmRJbml0aWFsT2JqZWN0Q3JlYXRpb25QYWdlKFN0cmluZyBwYWdlSWQpIHsKKwkJCXN1cGVyKHBhZ2VJZCk7CisJCX0KKworCQkvKioKKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBwYXJhbSBwYXJlbnQgCisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCXB1YmxpYyB2b2lkIGNyZWF0ZUNvbnRyb2woQ29tcG9zaXRlIHBhcmVudCkgeworCQkJQ29tcG9zaXRlIGNvbXBvc2l0ZSA9IG5ldyBDb21wb3NpdGUocGFyZW50LCBTV1QuTk9ORSk7IHsKKwkJCQlHcmlkTGF5b3V0IGxheW91dCA9IG5ldyBHcmlkTGF5b3V0KCk7CisJCQkJbGF5b3V0Lm51bUNvbHVtbnMgPSAxOworCQkJCWxheW91dC52ZXJ0aWNhbFNwYWNpbmcgPSAxMjsKKwkJCQljb21wb3NpdGUuc2V0TGF5b3V0KGxheW91dCk7CisKKwkJCQlHcmlkRGF0YSBkYXRhID0gbmV3IEdyaWREYXRhKCk7CisJCQkJZGF0YS52ZXJ0aWNhbEFsaWdubWVudCA9IEdyaWREYXRhLkZJTEw7CisJCQkJZGF0YS5ncmFiRXhjZXNzVmVydGljYWxTcGFjZSA9IHRydWU7CisJCQkJZGF0YS5ob3Jpem9udGFsQWxpZ25tZW50ID0gR3JpZERhdGEuRklMTDsKKwkJCQljb21wb3NpdGUuc2V0TGF5b3V0RGF0YShkYXRhKTsKKwkJCX0KKworCQkJTGFiZWwgY29udGFpbmVyTGFiZWwgPSBuZXcgTGFiZWwoY29tcG9zaXRlLCBTV1QuTEVGVCk7CisJCQl7CisJCQkJY29udGFpbmVyTGFiZWwuc2V0VGV4dChFeHRlcm5hbERhdGFTb3VyY2VFZGl0b3JQbHVnaW4uSU5TVEFOQ0UuZ2V0U3RyaW5nKCJfVUlfTW9kZWxPYmplY3QiKSk7CisKKwkJCQlHcmlkRGF0YSBkYXRhID0gbmV3IEdyaWREYXRhKCk7CisJCQkJZGF0YS5ob3Jpem9udGFsQWxpZ25tZW50ID0gR3JpZERhdGEuRklMTDsKKwkJCQljb250YWluZXJMYWJlbC5zZXRMYXlvdXREYXRhKGRhdGEpOworCQkJfQorCisJCQlpbml0aWFsT2JqZWN0RmllbGQgPSBuZXcgQ29tYm8oY29tcG9zaXRlLCBTV1QuQk9SREVSKTsKKwkJCXsKKwkJCQlHcmlkRGF0YSBkYXRhID0gbmV3IEdyaWREYXRhKCk7CisJCQkJZGF0YS5ob3Jpem9udGFsQWxpZ25tZW50ID0gR3JpZERhdGEuRklMTDsKKwkJCQlkYXRhLmdyYWJFeGNlc3NIb3Jpem9udGFsU3BhY2UgPSB0cnVlOworCQkJCWluaXRpYWxPYmplY3RGaWVsZC5zZXRMYXlvdXREYXRhKGRhdGEpOworCQkJfQorCisJCQlmb3IgKFN0cmluZyBvYmplY3ROYW1lIDogZ2V0SW5pdGlhbE9iamVjdE5hbWVzKCkpIHsKKwkJCQlpbml0aWFsT2JqZWN0RmllbGQuYWRkKGdldExhYmVsKG9iamVjdE5hbWUpKTsKKwkJCX0KKworCQkJaWYgKGluaXRpYWxPYmplY3RGaWVsZC5nZXRJdGVtQ291bnQoKSA9PSAxKSB7CisJCQkJaW5pdGlhbE9iamVjdEZpZWxkLnNlbGVjdCgwKTsKKwkJCX0KKwkJCWluaXRpYWxPYmplY3RGaWVsZC5hZGRNb2RpZnlMaXN0ZW5lcih2YWxpZGF0b3IpOworCisJCQlMYWJlbCBlbmNvZGluZ0xhYmVsID0gbmV3IExhYmVsKGNvbXBvc2l0ZSwgU1dULkxFRlQpOworCQkJeworCQkJCWVuY29kaW5nTGFiZWwuc2V0VGV4dChFeHRlcm5hbERhdGFTb3VyY2VFZGl0b3JQbHVnaW4uSU5TVEFOQ0UuZ2V0U3RyaW5nKCJfVUlfWE1MRW5jb2RpbmciKSk7CisKKwkJCQlHcmlkRGF0YSBkYXRhID0gbmV3IEdyaWREYXRhKCk7CisJCQkJZGF0YS5ob3Jpem9udGFsQWxpZ25tZW50ID0gR3JpZERhdGEuRklMTDsKKwkJCQllbmNvZGluZ0xhYmVsLnNldExheW91dERhdGEoZGF0YSk7CisJCQl9CisJCQllbmNvZGluZ0ZpZWxkID0gbmV3IENvbWJvKGNvbXBvc2l0ZSwgU1dULkJPUkRFUik7CisJCQl7CisJCQkJR3JpZERhdGEgZGF0YSA9IG5ldyBHcmlkRGF0YSgpOworCQkJCWRhdGEuaG9yaXpvbnRhbEFsaWdubWVudCA9IEdyaWREYXRhLkZJTEw7CisJCQkJZGF0YS5ncmFiRXhjZXNzSG9yaXpvbnRhbFNwYWNlID0gdHJ1ZTsKKwkJCQllbmNvZGluZ0ZpZWxkLnNldExheW91dERhdGEoZGF0YSk7CisJCQl9CisKKwkJCWZvciAoU3RyaW5nIGVuY29kaW5nIDogZ2V0RW5jb2RpbmdzKCkpIHsKKwkJCQllbmNvZGluZ0ZpZWxkLmFkZChlbmNvZGluZyk7CisJCQl9CisKKwkJCWVuY29kaW5nRmllbGQuc2VsZWN0KDApOworCQkJZW5jb2RpbmdGaWVsZC5hZGRNb2RpZnlMaXN0ZW5lcih2YWxpZGF0b3IpOworCisJCQlzZXRQYWdlQ29tcGxldGUodmFsaWRhdGVQYWdlKCkpOworCQkJc2V0Q29udHJvbChjb21wb3NpdGUpOworCQl9CisKKwkJLyoqCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlwcm90ZWN0ZWQgTW9kaWZ5TGlzdGVuZXIgdmFsaWRhdG9yID0KKwkJCW5ldyBNb2RpZnlMaXN0ZW5lcigpIHsKKwkJCQlwdWJsaWMgdm9pZCBtb2RpZnlUZXh0KE1vZGlmeUV2ZW50IGUpIHsKKwkJCQkJc2V0UGFnZUNvbXBsZXRlKHZhbGlkYXRlUGFnZSgpKTsKKwkJCQl9CisJCQl9OworCisJCS8qKgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJcHJvdGVjdGVkIGJvb2xlYW4gdmFsaWRhdGVQYWdlKCkgeworCQkJcmV0dXJuIGdldEluaXRpYWxPYmplY3ROYW1lKCkgIT0gbnVsbCAmJiBnZXRFbmNvZGluZ3MoKS5jb250YWlucyhlbmNvZGluZ0ZpZWxkLmdldFRleHQoKSk7CisJCX0KKworCQkvKioKKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUBPdmVycmlkZQorCQlwdWJsaWMgdm9pZCBzZXRWaXNpYmxlKGJvb2xlYW4gdmlzaWJsZSkgeworCQkJc3VwZXIuc2V0VmlzaWJsZSh2aXNpYmxlKTsKKwkJCWlmICh2aXNpYmxlKSB7CisJCQkJaWYgKGluaXRpYWxPYmplY3RGaWVsZC5nZXRJdGVtQ291bnQoKSA9PSAxKSB7CisJCQkJCWluaXRpYWxPYmplY3RGaWVsZC5jbGVhclNlbGVjdGlvbigpOworCQkJCQllbmNvZGluZ0ZpZWxkLnNldEZvY3VzKCk7CisJCQkJfQorCQkJCWVsc2UgeworCQkJCQllbmNvZGluZ0ZpZWxkLmNsZWFyU2VsZWN0aW9uKCk7CisJCQkJCWluaXRpYWxPYmplY3RGaWVsZC5zZXRGb2N1cygpOworCQkJCX0KKwkJCX0KKwkJfQorCisJCS8qKgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQHJldHVybiBpbml0aWFsT2JqZWN0TmFtZQorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlwdWJsaWMgU3RyaW5nIGdldEluaXRpYWxPYmplY3ROYW1lKCkgeworCQkJU3RyaW5nIGxhYmVsID0gaW5pdGlhbE9iamVjdEZpZWxkLmdldFRleHQoKTsKKworCQkJZm9yIChTdHJpbmcgbmFtZSA6IGdldEluaXRpYWxPYmplY3ROYW1lcygpKSB7CisJCQkJaWYgKGdldExhYmVsKG5hbWUpLmVxdWFscyhsYWJlbCkpIHsKKwkJCQkJcmV0dXJuIG5hbWU7CisJCQkJfQorCQkJfQorCQkJcmV0dXJuIG51bGw7CisJCX0KKworCQkvKioKKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEByZXR1cm4gZW5jb2RpbmdGaWVsZC5nZXRUZXh0KCkKKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJcHVibGljIFN0cmluZyBnZXRFbmNvZGluZygpIHsKKwkJCXJldHVybiBlbmNvZGluZ0ZpZWxkLmdldFRleHQoKTsKKwkJfQorCisJCS8qKgorCQkgKiBSZXR1cm5zIHRoZSBsYWJlbCBmb3IgdGhlIHNwZWNpZmllZCB0eXBlIG5hbWUuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlwcm90ZWN0ZWQgU3RyaW5nIGdldExhYmVsKFN0cmluZyB0eXBlTmFtZSkgeworCQkJdHJ5IHsKKwkJCQlyZXR1cm4gRXh0ZXJuYWxEYXRhU291cmNlRWRpdFBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoIl9VSV8iICsgdHlwZU5hbWUgKyAiX3R5cGUiKTsKKwkJCX0KKwkJCWNhdGNoKE1pc3NpbmdSZXNvdXJjZUV4Y2VwdGlvbiBtcmUpIHsKKwkJCQlFeHRlcm5hbERhdGFTb3VyY2VFZGl0b3JQbHVnaW4uSU5TVEFOQ0UubG9nKG1yZSk7CisJCQl9CisJCQlyZXR1cm4gdHlwZU5hbWU7CisJCX0KKworCQkvKioKKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCXByb3RlY3RlZCBDb2xsZWN0aW9uPFN0cmluZz4gZ2V0RW5jb2RpbmdzKCkgeworCQkJaWYgKGVuY29kaW5ncyA9PSBudWxsKSB7CisJCQkJZW5jb2RpbmdzID0gbmV3IEFycmF5TGlzdDxTdHJpbmc+KCk7CisJCQkJZm9yIChTdHJpbmdUb2tlbml6ZXIgc3RyaW5nVG9rZW5pemVyID0gbmV3IFN0cmluZ1Rva2VuaXplcihFeHRlcm5hbERhdGFTb3VyY2VFZGl0b3JQbHVnaW4uSU5TVEFOQ0UuZ2V0U3RyaW5nKCJfVUlfWE1MRW5jb2RpbmdDaG9pY2VzIikpOyBzdHJpbmdUb2tlbml6ZXIuaGFzTW9yZVRva2VucygpOyApIHsKKwkJCQkJZW5jb2RpbmdzLmFkZChzdHJpbmdUb2tlbml6ZXIubmV4dFRva2VuKCkpOworCQkJCX0KKwkJCX0KKwkJCXJldHVybiBlbmNvZGluZ3M7CisJCX0KKwl9CisKKwkvKioKKwkgKiBUaGUgZnJhbWV3b3JrIGNhbGxzIHRoaXMgdG8gY3JlYXRlIHRoZSBjb250ZW50cyBvZiB0aGUgd2l6YXJkLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCQlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBhZGRQYWdlcygpIHsKKwkJLy8gQ3JlYXRlIGEgcGFnZSwgc2V0IHRoZSB0aXRsZSwgYW5kIHRoZSBpbml0aWFsIG1vZGVsIGZpbGUgbmFtZS4KKwkJLy8KKwkJbmV3RmlsZUNyZWF0aW9uUGFnZSA9IG5ldyBFeHRlcm5hbERhdGFTb3VyY2VNb2RlbFdpemFyZE5ld0ZpbGVDcmVhdGlvblBhZ2UoIldoYXRldmVyIiwgc2VsZWN0aW9uKTsKKwkJbmV3RmlsZUNyZWF0aW9uUGFnZS5zZXRUaXRsZShFeHRlcm5hbERhdGFTb3VyY2VFZGl0b3JQbHVnaW4uSU5TVEFOQ0UuZ2V0U3RyaW5nKCJfVUlfRXh0ZXJuYWxEYXRhU291cmNlTW9kZWxXaXphcmRfbGFiZWwiKSk7CisJCW5ld0ZpbGVDcmVhdGlvblBhZ2Uuc2V0RGVzY3JpcHRpb24oRXh0ZXJuYWxEYXRhU291cmNlRWRpdG9yUGx1Z2luLklOU1RBTkNFLmdldFN0cmluZygiX1VJX0V4dGVybmFsRGF0YVNvdXJjZU1vZGVsV2l6YXJkX2Rlc2NyaXB0aW9uIikpOworCQluZXdGaWxlQ3JlYXRpb25QYWdlLnNldEZpbGVOYW1lKEV4dGVybmFsRGF0YVNvdXJjZUVkaXRvclBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoIl9VSV9FeHRlcm5hbERhdGFTb3VyY2VFZGl0b3JGaWxlbmFtZURlZmF1bHRCYXNlIikgKyAiLiIgKyBFeHRlcm5hbERhdGFTb3VyY2VFZGl0b3JQbHVnaW4uSU5TVEFOQ0UuZ2V0U3RyaW5nKCJfVUlfRXh0ZXJuYWxEYXRhU291cmNlRWRpdG9yRmlsZW5hbWVFeHRlbnNpb24iKSk7CisJCWFkZFBhZ2UobmV3RmlsZUNyZWF0aW9uUGFnZSk7CisKKwkJLy8gVHJ5IGFuZCBnZXQgdGhlIHJlc291cmNlIHNlbGVjdGlvbiB0byBkZXRlcm1pbmUgYSBjdXJyZW50IGRpcmVjdG9yeSBmb3IgdGhlIGZpbGUgZGlhbG9nLgorCQkvLworCQlpZiAoc2VsZWN0aW9uICE9IG51bGwgJiYgIXNlbGVjdGlvbi5pc0VtcHR5KCkpIHsKKwkJCS8vIEdldCB0aGUgcmVzb3VyY2UuLi4KKwkJCS8vCisJCQlPYmplY3Qgc2VsZWN0ZWRFbGVtZW50ID0gc2VsZWN0aW9uLml0ZXJhdG9yKCkubmV4dCgpOworCQkJaWYgKHNlbGVjdGVkRWxlbWVudCBpbnN0YW5jZW9mIElSZXNvdXJjZSkgeworCQkJCS8vIEdldCB0aGUgcmVzb3VyY2UgcGFyZW50LCBpZiBpdHMgYSBmaWxlLgorCQkJCS8vCisJCQkJSVJlc291cmNlIHNlbGVjdGVkUmVzb3VyY2UgPSAoSVJlc291cmNlKXNlbGVjdGVkRWxlbWVudDsKKwkJCQlpZiAoc2VsZWN0ZWRSZXNvdXJjZS5nZXRUeXBlKCkgPT0gSVJlc291cmNlLkZJTEUpIHsKKwkJCQkJc2VsZWN0ZWRSZXNvdXJjZSA9IHNlbGVjdGVkUmVzb3VyY2UuZ2V0UGFyZW50KCk7CisJCQkJfQorCisJCQkJLy8gVGhpcyBnaXZlcyB1cyBhIGRpcmVjdG9yeS4uLgorCQkJCS8vCisJCQkJaWYgKHNlbGVjdGVkUmVzb3VyY2UgaW5zdGFuY2VvZiBJRm9sZGVyIHx8IHNlbGVjdGVkUmVzb3VyY2UgaW5zdGFuY2VvZiBJUHJvamVjdCkgeworCQkJCQkvLyBTZXQgdGhpcyBmb3IgdGhlIGNvbnRhaW5lci4KKwkJCQkJLy8KKwkJCQkJbmV3RmlsZUNyZWF0aW9uUGFnZS5zZXRDb250YWluZXJGdWxsUGF0aChzZWxlY3RlZFJlc291cmNlLmdldEZ1bGxQYXRoKCkpOworCisJCQkJCS8vIE1ha2UgdXAgYSB1bmlxdWUgbmV3IG5hbWUgaGVyZS4KKwkJCQkJLy8KKwkJCQkJU3RyaW5nIGRlZmF1bHRNb2RlbEJhc2VGaWxlbmFtZSA9IEV4dGVybmFsRGF0YVNvdXJjZUVkaXRvclBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoIl9VSV9FeHRlcm5hbERhdGFTb3VyY2VFZGl0b3JGaWxlbmFtZURlZmF1bHRCYXNlIik7CisJCQkJCVN0cmluZyBkZWZhdWx0TW9kZWxGaWxlbmFtZUV4dGVuc2lvbiA9IEV4dGVybmFsRGF0YVNvdXJjZUVkaXRvclBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoIl9VSV9FeHRlcm5hbERhdGFTb3VyY2VFZGl0b3JGaWxlbmFtZUV4dGVuc2lvbiIpOworCQkJCQlTdHJpbmcgbW9kZWxGaWxlbmFtZSA9IGRlZmF1bHRNb2RlbEJhc2VGaWxlbmFtZSArICIuIiArIGRlZmF1bHRNb2RlbEZpbGVuYW1lRXh0ZW5zaW9uOworCQkJCQlmb3IgKGludCBpID0gMTsgKChJQ29udGFpbmVyKXNlbGVjdGVkUmVzb3VyY2UpLmZpbmRNZW1iZXIobW9kZWxGaWxlbmFtZSkgIT0gbnVsbDsgKytpKSB7CisJCQkJCQltb2RlbEZpbGVuYW1lID0gZGVmYXVsdE1vZGVsQmFzZUZpbGVuYW1lICsgaSArICIuIiArIGRlZmF1bHRNb2RlbEZpbGVuYW1lRXh0ZW5zaW9uOworCQkJCQl9CisJCQkJCW5ld0ZpbGVDcmVhdGlvblBhZ2Uuc2V0RmlsZU5hbWUobW9kZWxGaWxlbmFtZSk7CisJCQkJfQorCQkJfQorCQl9CisJCWluaXRpYWxPYmplY3RDcmVhdGlvblBhZ2UgPSBuZXcgRXh0ZXJuYWxEYXRhU291cmNlTW9kZWxXaXphcmRJbml0aWFsT2JqZWN0Q3JlYXRpb25QYWdlKCJXaGF0ZXZlcjIiKTsKKwkJaW5pdGlhbE9iamVjdENyZWF0aW9uUGFnZS5zZXRUaXRsZShFeHRlcm5hbERhdGFTb3VyY2VFZGl0b3JQbHVnaW4uSU5TVEFOQ0UuZ2V0U3RyaW5nKCJfVUlfRXh0ZXJuYWxEYXRhU291cmNlTW9kZWxXaXphcmRfbGFiZWwiKSk7CisJCWluaXRpYWxPYmplY3RDcmVhdGlvblBhZ2Uuc2V0RGVzY3JpcHRpb24oRXh0ZXJuYWxEYXRhU291cmNlRWRpdG9yUGx1Z2luLklOU1RBTkNFLmdldFN0cmluZygiX1VJX1dpemFyZF9pbml0aWFsX29iamVjdF9kZXNjcmlwdGlvbiIpKTsKKwkJYWRkUGFnZShpbml0aWFsT2JqZWN0Q3JlYXRpb25QYWdlKTsKKwl9CisKKwkvKioKKwkgKiBHZXQgdGhlIGZpbGUgZnJvbSB0aGUgcGFnZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1vZGVsRmlsZQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgSUZpbGUgZ2V0TW9kZWxGaWxlKCkgeworCQlyZXR1cm4gbmV3RmlsZUNyZWF0aW9uUGFnZS5nZXRNb2RlbEZpbGUoKTsKKwl9CisKK30KZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzLmV4dGVybmFsZGF0YXNvdXJjZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL2V4dGVybmFsZGF0YXNvdXJjZS9wcmVzZW50YXRpb24vRXh0ZXJuYWxEYXRhU291cmNlUHJvcGVydHlTdHJpbmdQcm92aWRlckFkYXB0ZXJGYWN0b3J5LmphdmEgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy5leHRlcm5hbGRhdGFzb3VyY2Uvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9leHRlcm5hbGRhdGFzb3VyY2UvcHJlc2VudGF0aW9uL0V4dGVybmFsRGF0YVNvdXJjZVByb3BlcnR5U3RyaW5nUHJvdmlkZXJBZGFwdGVyRmFjdG9yeS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg2N2RkYjYKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy5leHRlcm5hbGRhdGFzb3VyY2Uvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9leHRlcm5hbGRhdGFzb3VyY2UvcHJlc2VudGF0aW9uL0V4dGVybmFsRGF0YVNvdXJjZVByb3BlcnR5U3RyaW5nUHJvdmlkZXJBZGFwdGVyRmFjdG9yeS5qYXZhCkBAIC0wLDAgKzEsMTI1IEBACisvLyBFeHRlcm5hbERhdGFTb3VyY2VQcm9wZXJ0eVN0cmluZ1Byb3ZpZGVyQWRhcHRlckZhY3RvcnkuamF2YQorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXh0ZXJuYWxkYXRhc291cmNlLnByZXNlbnRhdGlvbjsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA3LCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGphdmEudXRpbC5NaXNzaW5nUmVzb3VyY2VFeGNlcHRpb247CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5BZGFwdGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FU3RydWN0dXJhbEZlYXR1cmU7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4dGVybmFsZGF0YXNvdXJjZS51dGlsLkV4dGVybmFsRGF0YVNvdXJjZUFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udWkuYWRhcHRlcnMucHJvcGVydHlzdHJpbmdzLlByb3BlcnR5U3RyaW5nUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS51aS5hZGFwdGVycy5wcm9wZXJ0eXN0cmluZ3MuUHJvcGVydHlTdHJpbmdQcm92aWRlckFkYXB0ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS51aS5hZGFwdGVycy5wcm9wZXJ0eXN0cmluZ3MuUHJvcGVydHlTdHJpbmdQcm92aWRlckFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udWkud2l6YXJkcy5TdGFuZGFyZFByb3BlcnR5U3RyaW5nUHJvdmlkZXJBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5JU3RhcnR1cDsKKworLyoqCisgKiBUaGlzIGNsYXNzIHJlcHJlc2VudHMKKyAqLworcHVibGljIGNsYXNzIEV4dGVybmFsRGF0YVNvdXJjZVByb3BlcnR5U3RyaW5nUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSBleHRlbmRzCisJCUV4dGVybmFsRGF0YVNvdXJjZUFkYXB0ZXJGYWN0b3J5IGltcGxlbWVudHMKKwkJUHJvcGVydHlTdHJpbmdQcm92aWRlckFkYXB0ZXJGYWN0b3J5LCBJU3RhcnR1cCB7CisKKwlQcm9wZXJ0eVN0cmluZ1Byb3ZpZGVyQWRhcHRlciBhZGFwdGVyID0gbnVsbDsKKworCS8qKgorCSAqIERlZmF1bHQgQ29uc3RydWN0b3IKKwkgKi8KKwlwdWJsaWMgRXh0ZXJuYWxEYXRhU291cmNlUHJvcGVydHlTdHJpbmdQcm92aWRlckFkYXB0ZXJGYWN0b3J5KCkgeworCQlzdXBlcigpOworCQlQcm9wZXJ0eVN0cmluZ1Byb3ZpZGVyQWRhcHRlckZhY3RvcnkuSU5TVEFOQ0UuYWRkQWRhcHRlckZhY3RvcnkodGhpcyk7CisJfQorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS51aS5JU3RhcnR1cCNlYXJseVN0YXJ0dXAoKQorCSAqLworCXB1YmxpYyB2b2lkIGVhcmx5U3RhcnR1cCgpIHsKKwkJLy8gTm90aGluZyB0byBkbyBoZXJlLiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgYWZ0ZXIgdGhlIGNvbnN0cnVjdG9yIGhhcworCQkvLyBydW4gd2hpY2ggaXMgdGhlIGVudGlyZSBwb2ludCBvZiBlYXJseSBhY3RpdmF0aW9uIHdoaWNoIGNhdXNlcyB0aGUKKwkJLy8gZmFjdG9yeSB0byBiZSBhZGRlZCB0byB0aGUgUHJvcGVydHlTdHJpbmdQcm92aWRlckFkYXB0ZXJGYWN0b3J5LklOU1RBTkNFCisJfQorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5pbXBsLkFkYXB0ZXJGYWN0b3J5SW1wbCNpc0ZhY3RvcnlGb3JUeXBlKGphdmEubGFuZy5PYmplY3QpCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIGJvb2xlYW4gaXNGYWN0b3J5Rm9yVHlwZShPYmplY3QgdHlwZSkgeworCQlyZXR1cm4gc3VwZXIuaXNGYWN0b3J5Rm9yVHlwZSh0eXBlKQorCQkJCXx8IHR5cGUgPT0gUHJvcGVydHlTdHJpbmdQcm92aWRlci5jbGFzczsKKwl9CisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leHRlcm5hbGRhdGFzb3VyY2UudXRpbC5FeHRlcm5hbERhdGFTb3VyY2VBZGFwdGVyRmFjdG9yeSNjcmVhdGVFeHRlcm5hbERhdGFTb3VyY2VEaXNlYXNlTW9kZWxBZGFwdGVyKCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVFeHRlcm5hbERhdGFTb3VyY2VEaXNlYXNlTW9kZWxBZGFwdGVyKCkgeworCQkvLyBIYXZlIHdlIGNyZWF0ZWQgb25lIGJlZm9yZT8KKwkJaWYgKGFkYXB0ZXIgPT0gbnVsbCkgeworCQkJLy8gTm8KKwkJCWFkYXB0ZXIgPSBuZXcgIFN0YW5kYXJkUHJvcGVydHlTdHJpbmdQcm92aWRlckFkYXB0ZXJGYWN0b3J5LlN0YW5kYXJkUHJvcGVydHlTdHJpbmdQcm92aWRlckFkYXB0ZXIoKSB7CisKKwkJCQkvKioKKwkJCQkgKiBAcGFyYW0gZGVzY3JpcHRvcgorCQkJCSAqIEByZXR1cm4gdGhlIE5MUydkIG5hbWUgb2YgdGhlIHByb3BlcnR5IHRvIGRpc3BsYXkgdG8gdGhlIHVzZXIKKwkJCQkgKi8KKwkJCQlwdWJsaWMgU3RyaW5nIGdldFByb3BlcnR5TmFtZShJSXRlbVByb3BlcnR5RGVzY3JpcHRvciBkZXNjcmlwdG9yKSB7CisJCQkJCXRyeSB7CisJCQkJCQlyZXR1cm4gRXh0ZXJuYWxEaXNlYXNlV2l6YXJkTWVzc2FnZXMKKwkJCQkJCQkJLmdldFN0cmluZygoKEVTdHJ1Y3R1cmFsRmVhdHVyZSkgZGVzY3JpcHRvcgorCQkJCQkJCQkJCS5nZXRGZWF0dXJlKG51bGwpKS5nZXROYW1lKCkpOworCQkJCQl9IGNhdGNoIChNaXNzaW5nUmVzb3VyY2VFeGNlcHRpb24gZSkgeworCQkJCQkJcmV0dXJuIHN1cGVyLmdldFByb3BlcnR5TmFtZShkZXNjcmlwdG9yKTsKKwkJCQkJfQorCQkJCX0gLy8gZ2V0UHJvcGVydHlOYW1lCisKKwkJCQkvKioKKwkJCQkgKiBAcGFyYW0gZGVzY3JpcHRvcgorCQkJCSAqIEByZXR1cm4gdGhlIE5MUydkIHRvb2wgdGlwIHRleHQgdGhhdCBkZXNjcmliZXMgdGhlIHByb3BlcnR5CisJCQkJICovCisJCQkJcHVibGljIFN0cmluZyBnZXRQcm9wZXJ0eVRvb2xUaXAoCisJCQkJCQlJSXRlbVByb3BlcnR5RGVzY3JpcHRvciBkZXNjcmlwdG9yKSB7CisJCQkJCXRyeSB7CisJCQkJCQlmaW5hbCBFU3RydWN0dXJhbEZlYXR1cmUgZmVhdHVyZSA9IChFU3RydWN0dXJhbEZlYXR1cmUpIGRlc2NyaXB0b3IKKwkJCQkJCQkJLmdldEZlYXR1cmUobnVsbCk7CisJCQkJCQlyZXR1cm4gRXh0ZXJuYWxEaXNlYXNlV2l6YXJkTWVzc2FnZXMuZ2V0U3RyaW5nKGZlYXR1cmUKKwkJCQkJCQkJLmdldE5hbWUoKQorCQkJCQkJCQkrIFRUX1NVRkZJWCk7CisJCQkJCX0gY2F0Y2ggKE1pc3NpbmdSZXNvdXJjZUV4Y2VwdGlvbiBlKSB7CisJCQkJCQlyZXR1cm4gc3VwZXIuZ2V0UHJvcGVydHlUb29sVGlwKGRlc2NyaXB0b3IpOworCQkJCQl9CisJCQkJfSAvLyBnZXRQcm9wZXJ0eVRvb2xUaXAKKworCQkJCS8qKgorCQkJCSAqIEBwYXJhbSBkZXNjcmlwdG9yCisJCQkJICogQHJldHVybiB0aGUgTkxTJ2QgdGV4dCB0aGF0IHJlcHJlc2VudHMgdGhlIHVuaXRzIG9mIHRoZQorCQkJCSAqICAgICAgICAgcHJvcGVydHkKKwkJCQkgKi8KKwkJCQlwdWJsaWMgU3RyaW5nIGdldFByb3BlcnR5VW5pdHMoCisJCQkJCQlJSXRlbVByb3BlcnR5RGVzY3JpcHRvciBkZXNjcmlwdG9yKSB7CisJCQkJCXRyeSB7CisJCQkJCQlmaW5hbCBFU3RydWN0dXJhbEZlYXR1cmUgZmVhdHVyZSA9IChFU3RydWN0dXJhbEZlYXR1cmUpIGRlc2NyaXB0b3IKKwkJCQkJCQkJLmdldEZlYXR1cmUobnVsbCk7CisJCQkJCQlyZXR1cm4gRXh0ZXJuYWxEaXNlYXNlV2l6YXJkTWVzc2FnZXMuZ2V0U3RyaW5nKGZlYXR1cmUKKwkJCQkJCQkJLmdldE5hbWUoKQorCQkJCQkJCQkrIFVOSVRfU1VGRklYKTsKKwkJCQkJfSBjYXRjaCAoTWlzc2luZ1Jlc291cmNlRXhjZXB0aW9uIGUpIHsKKwkJCQkJCXJldHVybiBzdXBlci5nZXRQcm9wZXJ0eVVuaXRzKGRlc2NyaXB0b3IpOworCQkJCQl9CisJCQkJfSAvLyBnZXRQcm9wZXJ0eVVuaXRzCisJCQl9OworCQl9IC8vIGlmIHdlIGRpZG4ndCBjcmVhdGUgb25lIGJlZm9yZQorCQlyZXR1cm4gYWRhcHRlcjsKKwl9Ly8gY3JlYXRlRXh0ZXJuYWxEYXRhU291cmNlRGlzZWFzZU1vZGVsQWRhcHRlcigpCisKK30gLy8gRXh0ZXJuYWxEYXRhU291cmNlUHJvcGVydHlTdHJpbmdQcm92aWRlckFkYXB0ZXJGYWN0b3J5CmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy5leHRlcm5hbGRhdGFzb3VyY2Uvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9leHRlcm5hbGRhdGFzb3VyY2UvcHJlc2VudGF0aW9uL0V4dGVybmFsRGlzZWFzZVdpemFyZE1lc3NhZ2VzLmphdmEgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy5leHRlcm5hbGRhdGFzb3VyY2Uvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9leHRlcm5hbGRhdGFzb3VyY2UvcHJlc2VudGF0aW9uL0V4dGVybmFsRGlzZWFzZVdpemFyZE1lc3NhZ2VzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWJkYTYwZAotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzLmV4dGVybmFsZGF0YXNvdXJjZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL2V4dGVybmFsZGF0YXNvdXJjZS9wcmVzZW50YXRpb24vRXh0ZXJuYWxEaXNlYXNlV2l6YXJkTWVzc2FnZXMuamF2YQpAQCAtMCwwICsxLDQzIEBACisvLyBFeHRlcm5hbERpc2Vhc2VXaXphcmRNZXNzYWdlcy5qYXZhCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leHRlcm5hbGRhdGFzb3VyY2UucHJlc2VudGF0aW9uOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA3LCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGphdmEudXRpbC5NaXNzaW5nUmVzb3VyY2VFeGNlcHRpb247CitpbXBvcnQgamF2YS51dGlsLlJlc291cmNlQnVuZGxlOworCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLkNvbnN0YW50czsKKworLyoqCisgKiBUaGlzIGNsYXNzIGlzIHRoZSBSZXNvdXJjZSBCdW5kbGUgZm9yIHRoaXMgcGFja2FnZS4KKyAqLworcHVibGljIGNsYXNzIEV4dGVybmFsRGlzZWFzZVdpemFyZE1lc3NhZ2VzIHsKKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgQlVORExFX05BTUUgPSBDb25zdGFudHMuSURfUk9PVAorCQkJKyAiLmRpc2Vhc2Vtb2RlbHMuZXh0ZXJuYWxkYXRhc291cmNlLnByZXNlbnRhdGlvbi5leHRlcm5hbGRpc2Vhc2VtZXNzYWdlcyI7IC8vJE5PTi1OTFMtMSQKKworCXByaXZhdGUgc3RhdGljIGZpbmFsIFJlc291cmNlQnVuZGxlIFJFU09VUkNFX0JVTkRMRSA9IFJlc291cmNlQnVuZGxlCisJCQkuZ2V0QnVuZGxlKEJVTkRMRV9OQU1FKTsKKworCXByaXZhdGUgRXh0ZXJuYWxEaXNlYXNlV2l6YXJkTWVzc2FnZXMoKSB7CisJCS8vIGVtcHR5CisJfQorCisJLyoqCisJICogQHBhcmFtIGtleQorCSAqICAgICAgICAgICAgdGhlIGtleSBmb3IgdGhlIG1lc3NhZ2UKKwkgKiBAcmV0dXJuIHRoZSBzdHJpbmcgdGhhdCBtYXRjaGVzIHRoZSBrZXkKKwkgKiBAdGhyb3dzIE1pc3NpbmdSZXNvdXJjZUV4Y2VwdGlvbiBpZiB0aGUga2V5IGNhbm5vdCBiZSBmb3VuZAorCSAqLworCXB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldFN0cmluZyhmaW5hbCBTdHJpbmcga2V5KSB0aHJvd3MgTWlzc2luZ1Jlc291cmNlRXhjZXB0aW9ueworCQkJcmV0dXJuIFJFU09VUkNFX0JVTkRMRS5nZXRTdHJpbmcoa2V5KTsKKwl9IC8vIGdldFN0cmluZworfSAvLyBFeHRlcm5hbERpc2Vhc2VXaXphcmRNZXNzYWdlcwpkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMuZXh0ZXJuYWxkYXRhc291cmNlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvZXh0ZXJuYWxkYXRhc291cmNlL3ByZXNlbnRhdGlvbi9leHRlcm5hbGRpc2Vhc2VtZXNzYWdlcy5wcm9wZXJ0aWVzIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMuZXh0ZXJuYWxkYXRhc291cmNlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvZXh0ZXJuYWxkYXRhc291cmNlL3ByZXNlbnRhdGlvbi9leHRlcm5hbGRpc2Vhc2VtZXNzYWdlcy5wcm9wZXJ0aWVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI1NDg2NzIKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy5leHRlcm5hbGRhdGFzb3VyY2Uvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9leHRlcm5hbGRhdGFzb3VyY2UvcHJlc2VudGF0aW9uL2V4dGVybmFsZGlzZWFzZW1lc3NhZ2VzLnByb3BlcnRpZXMKQEAgLTAsMCArMSwzNCBAQAorIyBkaXNlYXNld2l6YXJkbWVzc2FnZXMucHJvcGVydGllcworIworIy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjICogQ29weXJpZ2h0IChjKSAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorIyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyMgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyMgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorIyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisjICoKKyMgKiBDb250cmlidXRvcnM6CisjICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorIyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKKworI2RhdGFGaWxlID0gRGF0YSBGaWxlCisjZGF0YUZpbGVUVCA9IFRoZSBmaWxlIGNvbnRhaW5pbmcgaGlzdG9yaWMgZGlzZWFzZSBkYXRhIHRvIHJlYWQgaW4uCisjZGF0YUZpbGVVTklUID0gTm90IFVzZWQKKworI2RhdGFEaXJlY3RvcnkgPSBEYXRhIERpcmVjdG9yeQorI2RhdGFEaXJlY3RvcnlUVCA9IFRoZSBmb2xkZXIgY29udGFpbmluZyB0aGUgZXh0ZXJuYWwgZGF0YSBmaWxlcyBmb3IgYSBzY2VuYXJpbyB0byBiZSBpbXBvcnRlZC4KKyNkYXRhRGlyZWN0b3J5VU5JVCA9IFNjZW5hcmlvIEZvbGRlcgorCitkYXRhUGF0aCA9IERhdGEgUGF0aAorZGF0YVBhdGhUVCA9IFRoZSBmaWxlIG9yIGZvbGRlciBvZiBmaWxlcywgY29udGFpbmluZyBoaXN0b3JpYyBzY2VuYXJpbyBkaXNlYXNlIGRhdGEgdG8gYmUgaW1wb3J0ZWQuCitkYXRhUGF0aFVOSVQgPSBOb3QgVXNlZAorCisjZGlzZWFzZVR5cGUgPSBEaXNlYXNlIFR5cGUKKyNkaXNlYXNlVHlwZVRUID0gVHlwZSBvZiBEaXNlYXNlIGJlaW5nIGltcG9ydGVkLiBNdXN0IGJlIFNJLCBTSVIsIFNFSVIuCisjZGlzZWFzZVR5cGVVTklUID0gU0kgU0lSIG9yIFNFSVIKKworI2Rpc2Vhc2VEaXJlY3RvcnkgPSBEaXNlYXNlIERpcmVjdG9yeQorI2Rpc2Vhc2VEaXJlY3RvcnlUVCA9IERpc2Vhc2UgRGlyZWN0b3J5CisjZGlzZWFzZURpcmVjdG9yeVVOSVQgPSBEaXNlYXNlIERpcmVjdG9yeSAKZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzLmZvcmNpbmcvLmNsYXNzcGF0aCBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzLmZvcmNpbmcvLmNsYXNzcGF0aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMDRlODYxCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMuZm9yY2luZy8uY2xhc3NwYXRoCkBAIC0wLDAgKzEsNyBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxjbGFzc3BhdGg+CisJPGNsYXNzcGF0aGVudHJ5IGtpbmQ9InNyYyIgcGF0aD0ic3JjIi8+CisJPGNsYXNzcGF0aGVudHJ5IGtpbmQ9ImNvbiIgcGF0aD0ib3JnLmVjbGlwc2UuamR0LmxhdW5jaGluZy5KUkVfQ09OVEFJTkVSL29yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC5kZWJ1Zy51aS5sYXVuY2hlci5TdGFuZGFyZFZNVHlwZS9KMlNFLTEuNSIvPgorCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJjb24iIHBhdGg9Im9yZy5lY2xpcHNlLnBkZS5jb3JlLnJlcXVpcmVkUGx1Z2lucyIvPgorCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJvdXRwdXQiIHBhdGg9ImJpbiIvPgorPC9jbGFzc3BhdGg+CmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy5mb3JjaW5nLy5wcm9qZWN0IGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMuZm9yY2luZy8ucHJvamVjdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYmYyZjM4Ci0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMuZm9yY2luZy8ucHJvamVjdApAQCAtMCwwICsxLDI4IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPHByb2plY3REZXNjcmlwdGlvbj4KKwk8bmFtZT5vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMuZm9yY2luZzwvbmFtZT4KKwk8Y29tbWVudD48L2NvbW1lbnQ+CisJPHByb2plY3RzPgorCTwvcHJvamVjdHM+CisJPGJ1aWxkU3BlYz4KKwkJPGJ1aWxkQ29tbWFuZD4KKwkJCTxuYW1lPm9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFidWlsZGVyPC9uYW1lPgorCQkJPGFyZ3VtZW50cz4KKwkJCTwvYXJndW1lbnRzPgorCQk8L2J1aWxkQ29tbWFuZD4KKwkJPGJ1aWxkQ29tbWFuZD4KKwkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5NYW5pZmVzdEJ1aWxkZXI8L25hbWU+CisJCQk8YXJndW1lbnRzPgorCQkJPC9hcmd1bWVudHM+CisJCTwvYnVpbGRDb21tYW5kPgorCQk8YnVpbGRDb21tYW5kPgorCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLlNjaGVtYUJ1aWxkZXI8L25hbWU+CisJCQk8YXJndW1lbnRzPgorCQkJPC9hcmd1bWVudHM+CisJCTwvYnVpbGRDb21tYW5kPgorCTwvYnVpbGRTcGVjPgorCTxuYXR1cmVzPgorCQk8bmF0dXJlPm9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFuYXR1cmU8L25hdHVyZT4KKwkJPG5hdHVyZT5vcmcuZWNsaXBzZS5wZGUuUGx1Z2luTmF0dXJlPC9uYXR1cmU+CisJPC9uYXR1cmVzPgorPC9wcm9qZWN0RGVzY3JpcHRpb24+CmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy5mb3JjaW5nLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzLmZvcmNpbmcvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM0ZTdkMmUKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy5mb3JjaW5nLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcwpAQCAtMCwwICsxLDE1IEBACisjVHVlIFNlcCAwMSAxNjo1MzozMCBFRFQgMjAwOQorZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmRvYy5jb21tZW50LnN1cHBvcnQ9ZGlzYWJsZWQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW52YWxpZEphdmFkb2M9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbnZhbGlkSmF2YWRvY1RhZ3M9ZW5hYmxlZAorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbnZhbGlkSmF2YWRvY1RhZ3NEZXByZWNhdGVkUmVmPWVuYWJsZWQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW52YWxpZEphdmFkb2NUYWdzTm90VmlzaWJsZVJlZj1lbmFibGVkCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmludmFsaWRKYXZhZG9jVGFnc1Zpc2liaWxpdHk9cHVibGljCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdKYXZhZG9jQ29tbWVudHM9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nSmF2YWRvY0NvbW1lbnRzT3ZlcnJpZGluZz1lbmFibGVkCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdKYXZhZG9jQ29tbWVudHNWaXNpYmlsaXR5PXB1YmxpYworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nSmF2YWRvY1RhZ0Rlc2NyaXB0aW9uPXJldHVybl90YWcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0phdmFkb2NUYWdzPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0phdmFkb2NUYWdzT3ZlcnJpZGluZz1lbmFibGVkCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdKYXZhZG9jVGFnc1Zpc2liaWxpdHk9cHVibGljCmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy5mb3JjaW5nL01FVEEtSU5GL01BTklGRVNULk1GIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMuZm9yY2luZy9NRVRBLUlORi9NQU5JRkVTVC5NRgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44M2FmNjQwCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMuZm9yY2luZy9NRVRBLUlORi9NQU5JRkVTVC5NRgpAQCAtMCwwICsxLDI1IEBACitNYW5pZmVzdC1WZXJzaW9uOiAxLjAKK0J1bmRsZS1NYW5pZmVzdFZlcnNpb246IDIKK0J1bmRsZS1OYW1lOiAlcGx1Z2luTmFtZQorQnVuZGxlLVN5bWJvbGljTmFtZTogb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzLmZvcmNpbmc7c2luZ2xldG9uOj10cnVlCitCdW5kbGUtVmVyc2lvbjogMS4yLjEKK0J1bmRsZS1DbGFzc1BhdGg6IC4KK0J1bmRsZS1BY3RpdmF0b3I6IG9yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy5mb3JjaW5nLnByZXNlbnRhdGlvbi5Gb3JjaW5nRWRpdG9yUGx1Z2luJEltcGxlbWVudGF0aW9uCitCdW5kbGUtVmVuZG9yOiAlcHJvdmlkZXJOYW1lCitCdW5kbGUtTG9jYWxpemF0aW9uOiBwbHVnaW4KK0J1bmRsZS1SZXF1aXJlZEV4ZWN1dGlvbkVudmlyb25tZW50OiBKMlNFLTEuNQorRXhwb3J0LVBhY2thZ2U6IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5mb3JjaW5nLnByZXNlbnRhdGlvbiwKKyBvcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMuZm9yY2luZy5wcmVzZW50YXRpb24KK1JlcXVpcmUtQnVuZGxlOiBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUsCisgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXM7dmlzaWJpbGl0eTo9cmVleHBvcnQsCisgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmZvcmNpbmc7dmlzaWJpbGl0eTo9cmVleHBvcnQsCisgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnhtaTt2aXNpYmlsaXR5Oj1yZWV4cG9ydCwKKyBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aTt2aXNpYmlsaXR5Oj1yZWV4cG9ydCwKKyBvcmcuZWNsaXBzZS51aS5pZGU7dmlzaWJpbGl0eTo9cmVleHBvcnQsCisgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzO3Zpc2liaWxpdHk6PXJlZXhwb3J0LAorIG9yZy5lY2xpcHNlLnN0ZW0uY29yZTt2aXNpYmlsaXR5Oj1yZWV4cG9ydCwKKyBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuZWRpdDt2aXNpYmlsaXR5Oj1yZWV4cG9ydCwKKyBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zO3Zpc2liaWxpdHk6PXJlZXhwb3J0LAorIG9yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscywKKyBvcmcuZWNsaXBzZS5zdGVtLnVpCitCdW5kbGUtQWN0aXZhdGlvblBvbGljeTogbGF6eQpkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMuZm9yY2luZy9idWlsZC5wcm9wZXJ0aWVzIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMuZm9yY2luZy9idWlsZC5wcm9wZXJ0aWVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMwNGMxZmEKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy5mb3JjaW5nL2J1aWxkLnByb3BlcnRpZXMKQEAgLTAsMCArMSwxNyBAQAorCisjIDxjb3B5cmlnaHQ+CisjIDwvY29weXJpZ2h0PgorIworIyAkSWQ6IGJ1aWxkLnByb3BlcnRpZXMsdiAxLjEgMjAwOS8wMy8xMyAwMDowNzo0OCBzZWRsdW5kIEV4cCAkCisKK2Jpbi5pbmNsdWRlcyA9IC4sXAorICAgICAgICAgICAgICAgaWNvbnMvLFwKKyAgICAgICAgICAgICAgIE1FVEEtSU5GLyxcCisgICAgICAgICAgICAgICBwbHVnaW4ueG1sLFwKKyAgICAgICAgICAgICAgIHBsdWdpbi5wcm9wZXJ0aWVzLFwKKyAgICAgICAgICAgICAgIHBsdWdpbl9kZS5wcm9wZXJ0aWVzLFwKKyAgICAgICAgICAgICAgIHBsdWdpbl9rci5wcm9wZXJ0aWVzLFwKKyAgICAgICAgICAgICAgIHBsdWdpbl96aC5wcm9wZXJ0aWVzCitqYXJzLmNvbXBpbGUub3JkZXIgPSAuCitzb3VyY2UuLiA9IHNyYy8KK291dHB1dC4uID0gYmluLwpkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMuZm9yY2luZy9pY29ucy9mdWxsL29iajE2L0ZvcmNpbmdNb2RlbEZpbGUuZ2lmIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMuZm9yY2luZy9pY29ucy9mdWxsL29iajE2L0ZvcmNpbmdNb2RlbEZpbGUuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRlNDA0ZTQKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy5mb3JjaW5nL2ljb25zL2Z1bGwvb2JqMTYvRm9yY2luZ01vZGVsRmlsZS5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMuZm9yY2luZy9wbHVnaW4ucHJvcGVydGllcyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzLmZvcmNpbmcvcGx1Z2luLnByb3BlcnRpZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTIxM2NmOQotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzLmZvcmNpbmcvcGx1Z2luLnByb3BlcnRpZXMKQEAgLTAsMCArMSw1MSBAQAorCisjIDxjb3B5cmlnaHQ+CisjIDwvY29weXJpZ2h0PgorIworIyAkSWQ6IHBsdWdpbi5wcm9wZXJ0aWVzLHYgMS4xIDIwMDkvMDMvMTMgMDA6MDc6NDggc2VkbHVuZCBFeHAgJAorCitwbHVnaW5OYW1lID0gU1RFTSBGb3JjaW5nIERpc2Vhc2UgTW9kZWwgVUkKK3Byb3ZpZGVyTmFtZSA9IEVjbGlwc2Uub3JnCisKK19VSV9FeGFtcGxlRWRpdG9yX21lbnUgPSAmRXhhbXBsZSBFZGl0b3IKKworX1VJX0NyZWF0ZUNoaWxkX21lbnVfaXRlbSA9ICZOZXcgQ2hpbGQKK19VSV9DcmVhdGVTaWJsaW5nX21lbnVfaXRlbSA9IE4mZXcgU2libGluZworCitfVUlfU2hvd1Byb3BlcnRpZXNWaWV3X21lbnVfaXRlbSA9IFNob3cgJlByb3BlcnRpZXMgVmlldworX1VJX1JlZnJlc2hWaWV3ZXJfbWVudV9pdGVtID0gJlJlZnJlc2gKKworX1VJX1NlbGVjdGlvblBhZ2VfbGFiZWwgPSBTZWxlY3Rpb24KKworX1VJX05vT2JqZWN0U2VsZWN0ZWQgPSBTZWxlY3RlZCBOb3RoaW5nCitfVUlfU2luZ2xlT2JqZWN0U2VsZWN0ZWQgPSBTZWxlY3RlZCBPYmplY3Q6IHswfQorX1VJX011bHRpT2JqZWN0U2VsZWN0ZWQgPSBTZWxlY3RlZCB7MH0gT2JqZWN0cworCitfVUlfT3BlbkVkaXRvckVycm9yX2xhYmVsID0gT3BlbiBFZGl0b3IKKworX1VJX1dpemFyZF9jYXRlZ29yeSA9IEV4YW1wbGUgRU1GIE1vZGVsIENyZWF0aW9uIFdpemFyZHMKKworX1VJX0NyZWF0ZU1vZGVsRXJyb3JfbWVzc2FnZSA9IFByb2JsZW1zIGVuY291bnRlcmVkIGluIGZpbGUgInswfSIKKworX1VJX0V4YW1wbGVFZGl0b3JfbGFiZWwgPSBFeGFtcGxlIE1vZGVsIEVkaXRvcgorCitfVUlfRXhhbXBsZUVkaXRvckZpbGVuYW1lRGVmYXVsdEJhc2UgPSBNeQorX1VJX0V4YW1wbGVFZGl0b3JGaWxlbmFtZUV4dGVuc2lvbnMgPSBleGFtcGxlCisKK19VSV9XaXphcmRfbGFiZWwgPSBOZXcKKworX1dBUk5fRmlsZW5hbWVFeHRlbnNpb24gPSBUaGUgZmlsZSBuYW1lIG11c3QgZW5kIGluICcnLnswfScnCitfV0FSTl9GaWxlbmFtZUV4dGVuc2lvbnMgPSBUaGUgZmlsZSBuYW1lIG11c3QgaGF2ZSBvbmUgb2YgdGhlIGZvbGxvd2luZyBleHRlbnNpb25zOiB7MH0KKworX1VJX01vZGVsT2JqZWN0ID0gJk1vZGVsIE9iamVjdAorX1VJX1hNTEVuY29kaW5nID0gJlhNTCBFbmNvZGluZworX1VJX1hNTEVuY29kaW5nQ2hvaWNlcyA9IFVURi04IEFTQ0lJIFVURi0xNiBVVEYtMTZCRSBVVEYtMTZMRSBJU08tODg1OS0xCitfVUlfV2l6YXJkX2luaXRpYWxfb2JqZWN0X2Rlc2NyaXB0aW9uID0gU2VsZWN0IGEgbW9kZWwgb2JqZWN0IHRvIGNyZWF0ZQorCitfVUlfRmlsZUNvbmZsaWN0X2xhYmVsID0gRmlsZSBDb25mbGljdAorX1dBUk5fRmlsZUNvbmZsaWN0ID0gVGhlcmUgYXJlIHVuc2F2ZWQgY2hhbmdlcyB0aGF0IGNvbmZsaWN0IHdpdGggY2hhbmdlcyBtYWRlIG91dHNpZGUgdGhlIGVkaXRvci4gIERvIHlvdSB3aXNoIHRvIGRpc2NhcmQgdGhpcyBlZGl0b3IncyBjaGFuZ2VzPworCitfVUlfRm9yY2luZ0VkaXRvcl9tZW51ID0gJkZvcmNpbmcgRWRpdG9yCitfVUlfRm9yY2luZ0VkaXRvcl9sYWJlbCA9IEZvcmNpbmcgTW9kZWwgRWRpdG9yCitfVUlfRm9yY2luZ0VkaXRvckZpbGVuYW1lRGVmYXVsdEJhc2UgPSBNeQorX1VJX0ZvcmNpbmdFZGl0b3JGaWxlbmFtZUV4dGVuc2lvbnMgPSBmb3JjaW5nCmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy5mb3JjaW5nL3BsdWdpbi54bWwgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy5mb3JjaW5nL3BsdWdpbi54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjY0NjI0MwotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzLmZvcmNpbmcvcGx1Z2luLnhtbApAQCAtMCwwICsxLDQ3IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPD9lY2xpcHNlIHZlcnNpb249IjMuMCI/PgorCis8IS0tCisgPGNvcHlyaWdodD4KKyA8L2NvcHlyaWdodD4KKworICRJZDogcGx1Z2luLnhtbCx2IDEuMSAyMDA5LzAzLzEzIDAwOjA3OjQ4IHNlZGx1bmQgRXhwICQKKy0tPgorCis8cGx1Z2luPgorCisKKyAgPGV4dGVuc2lvbgorICAgIHBvaW50ID0gIm9yZy5lY2xpcHNlLnVpLm5ld1dpemFyZHMiPgorICAgIDxjYXRlZ29yeQorICAgICAgaWQgPSAib3JnLmVjbGlwc2UuZW1mLmVjb3JlLldpemFyZC5jYXRlZ29yeS5JRCIKKyAgICAgIG5hbWU9IiVfVUlfV2l6YXJkX2NhdGVnb3J5Ij4KKyAgICA8L2NhdGVnb3J5PgorICAgIDx3aXphcmQKKyAgICAgIGlkID0gIm9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5mb3JjaW5nLnByZXNlbnRhdGlvbi5Gb3JjaW5nTW9kZWxXaXphcmRJRCIKKyAgICAgIG5hbWUgPSAiJV9VSV9Gb3JjaW5nTW9kZWxXaXphcmRfbGFiZWwiCisgICAgICBjbGFzcyA9ICJvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZm9yY2luZy5wcmVzZW50YXRpb24uRm9yY2luZ01vZGVsV2l6YXJkIgorICAgICAgY2F0ZWdvcnkgPSAib3JnLmVjbGlwc2UuZW1mLmVjb3JlLldpemFyZC5jYXRlZ29yeS5JRCIKKyAgICAgIGljb24gPSAiaWNvbnMvZnVsbC9vYmoxNi9Gb3JjaW5nTW9kZWxGaWxlLmdpZiI+CisgICAgICA8ZGVzY3JpcHRpb24+JV9VSV9FeGFtcGxlTW9kZWxXaXphcmRfZGVzY3JpcHRpb248L2Rlc2NyaXB0aW9uPgorICAgICAgPHNlbGVjdGlvbiBjbGFzcyA9ICJvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUmVzb3VyY2UiIC8+CisgICAgPC93aXphcmQ+CisgIDwvZXh0ZW5zaW9uPgorCisgIDxleHRlbnNpb24gcG9pbnQgPSAib3JnLmVjbGlwc2UudWkuZWRpdG9ycyI+CisgICAgPGVkaXRvcgorICAgICAgICBpZCA9ICJvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZm9yY2luZy5wcmVzZW50YXRpb24uRm9yY2luZ0VkaXRvcklEIgorICAgICAgICBuYW1lID0gIiVfVUlfRm9yY2luZ0VkaXRvcl9sYWJlbCIKKyAgICAgICAgaWNvbiA9ICJpY29ucy9mdWxsL29iajE2L0ZvcmNpbmdNb2RlbEZpbGUuZ2lmIgorICAgICAgICBleHRlbnNpb25zID0gImZvcmNpbmciCisgICAgICAgIGNsYXNzID0gIm9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5mb3JjaW5nLnByZXNlbnRhdGlvbi5Gb3JjaW5nRWRpdG9yIiAKKyAgICAgICAgY29udHJpYnV0b3JDbGFzcz0ib3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmZvcmNpbmcucHJlc2VudGF0aW9uLkZvcmNpbmdBY3Rpb25CYXJDb250cmlidXRvciIgPgorICAgIDwvZWRpdG9yPgorICA8L2V4dGVuc2lvbj4KKyAgPGV4dGVuc2lvbgorICAgICAgICBwb2ludD0ib3JnLmVjbGlwc2UudWkuc3RhcnR1cCI+CisgICAgIDxzdGFydHVwCisgICAgICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMuZm9yY2luZy5wcmVzZW50YXRpb24uRm9yY2luZ1Byb3BlcnR5U3RyaW5nUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSI+CisgICAgIDwvc3RhcnR1cD4KKyAgPC9leHRlbnNpb24+Cis8L3BsdWdpbj4KZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzLmZvcmNpbmcvcGx1Z2luX2RlLnByb3BlcnRpZXMgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy5mb3JjaW5nL3BsdWdpbl9kZS5wcm9wZXJ0aWVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU0ZTRhYzcKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy5mb3JjaW5nL3BsdWdpbl9kZS5wcm9wZXJ0aWVzCkBAIC0wLDAgKzEsNTEgQEAKKworIyA8Y29weXJpZ2h0PgorIyA8L2NvcHlyaWdodD4KKyMKKyMgJElkOiBwbHVnaW4ucHJvcGVydGllcyx2IDEuMSAyMDA5LzAzLzEzIDAwOjA3OjQ4IHNlZGx1bmQgRXhwICQKKworcGx1Z2luTmFtZT1TVEVNIEZvcmNpbmctS3JhbmtoZWl0c21vZGVsbC1CZW51dHplcm9iZXJmbFx1MDBlNGNoZQorcHJvdmlkZXJOYW1lPUVjbGlwc2Uub3JnCisKK19VSV9FeGFtcGxlRWRpdG9yX21lbnU9JkV4YW1wbGUgRWRpdG9yCisKK19VSV9DcmVhdGVDaGlsZF9tZW51X2l0ZW09Jk5ldyBDaGlsZAorX1VJX0NyZWF0ZVNpYmxpbmdfbWVudV9pdGVtPU4mZXVlcyBHZXNjaHdpc3RlcnRlaWwKKworX1VJX1Nob3dQcm9wZXJ0aWVzVmlld19tZW51X2l0ZW09U2hvdyAmIFByb3BlcnRpZXMgVmlldworX1VJX1JlZnJlc2hWaWV3ZXJfbWVudV9pdGVtPSZSZWZyZXNoCisKK19VSV9TZWxlY3Rpb25QYWdlX2xhYmVsPUF1c3dhaGwKKworX1VJX05vT2JqZWN0U2VsZWN0ZWQ9TmljaHRzIGF1c2dld1x1MDBlNGhsdAorX1VJX1NpbmdsZU9iamVjdFNlbGVjdGVkPUF1c2dld1x1MDBlNGhsdGVzIE9iamVrdDogezB9CitfVUlfTXVsdGlPYmplY3RTZWxlY3RlZD1BdXNnZXdcdTAwZTRobHRlIHswfSBPYmpla3RlCisKK19VSV9PcGVuRWRpdG9yRXJyb3JfbGFiZWw9RWRpdG9yIFx1MDBmNmZmbmVuCisKK19VSV9XaXphcmRfY2F0ZWdvcnk9QmVpc3BpZWwgRU1GIE1vZGVsbCBFcnN0ZWxsdW5nc2Fzc2lzdGVudAorCitfVUlfQ3JlYXRlTW9kZWxFcnJvcl9tZXNzYWdlPUF1ZmdldHJldGVuZSBQcm9ibGVtZSBpbiBkZXIgRGF0ZWkgInswfSIKKworX1VJX0V4YW1wbGVFZGl0b3JfbGFiZWw9QmVpc3BpZWwgTW9kZWxsLUVkaXRvcgorCitfVUlfRXhhbXBsZUVkaXRvckZpbGVuYW1lRGVmYXVsdEJhc2U9TWVpbgorX1VJX0V4YW1wbGVFZGl0b3JGaWxlbmFtZUV4dGVuc2lvbnM9QmVpc3BpZWwKKworX1VJX1dpemFyZF9sYWJlbD1OZXUKKworX1dBUk5fRmlsZW5hbWVFeHRlbnNpb249RGVyIERhdGVpbmFtZSBtdXNzIGF1ZiAiLnswfSIgZW5kZW4KK19XQVJOX0ZpbGVuYW1lRXh0ZW5zaW9ucz1EZXIgRGF0ZWluYW1lIG11c3MgZWluZSBkZXIgZm9sZ2VuZGVuIEVuZHVuZ2VuIGhhYmVuOiB7MH0KKworX1VJX01vZGVsT2JqZWN0PSZNb2RlbCBPYmplY3QKK19VSV9YTUxFbmNvZGluZz0mWE1MIEVuY29kaW5nCitfVUlfWE1MRW5jb2RpbmdDaG9pY2VzPVVURi04IEFTQ0lJIFVURi0xNiBVVEYtMTZCRSBVVEYtMTZMRSBJU08tODg1OS0xCitfVUlfV2l6YXJkX2luaXRpYWxfb2JqZWN0X2Rlc2NyaXB0aW9uPVp1IGVyemV1Z2VuZGVzIE1vZGVsbG9iamVrdCB3XHUwMGU0aGxlbgorCitfVUlfRmlsZUNvbmZsaWN0X2xhYmVsPURhdGVpa29uZmxpa3QKK19XQVJOX0ZpbGVDb25mbGljdD1FcyBnaWJ0IG5pY2h0IGdlc3BlaWNoZXJ0ZSBcdTAwYzRuZGVydW5nZW4sIGRpZSBLb25mbGlrdGUgbWl0IFx1MDBjNG5kZXJ1bmdlbiBhdVx1MDBkZmVyaGFsYiBkZXMgRWRpdG9ycyBlcnpldWdlbi4gTVx1MDBmNmNodGVuIFNpZSBkaWUgXHUwMGM0bmRlcnVuZ2VuIGltIEVkaXRvciB2ZXJ3ZXJmZW4/CisKK19VSV9Gb3JjaW5nRWRpdG9yX21lbnU9JkZvcmNpbmcgRWRpdG9yCitfVUlfRm9yY2luZ0VkaXRvcl9sYWJlbD1Gb3JjaW5nbW9kZWxsLUVkaXRvcgorX1VJX0ZvcmNpbmdFZGl0b3JGaWxlbmFtZURlZmF1bHRCYXNlPU1laW4KK19VSV9Gb3JjaW5nRWRpdG9yRmlsZW5hbWVFeHRlbnNpb25zPWZvcmNpbmcKZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzLmZvcmNpbmcvcGx1Z2luX2tyLnByb3BlcnRpZXMgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy5mb3JjaW5nL3BsdWdpbl9rci5wcm9wZXJ0aWVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE4YTNlMGUKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy5mb3JjaW5nL3BsdWdpbl9rci5wcm9wZXJ0aWVzCkBAIC0wLDAgKzEsNTEgQEAKKworIyA8Y29weXJpZ2h0PgorIyA8L2NvcHlyaWdodD4KKyMKKyMgJElkOiBwbHVnaW4ucHJvcGVydGllcyx2IDEuMSAyMDA5LzAzLzEzIDAwOjA3OjQ4IHNlZGx1bmQgRXhwICQKKworcGx1Z2luTmFtZT1TVEVNIFx1YWMxNVx1YzgxYyBcdWM5YzhcdWJjZDEgXHViYWE4XHViMzc4IFVJCitwcm92aWRlck5hbWU9RWNsaXBzZS5vcmcKKworX1VJX0V4YW1wbGVFZGl0b3JfbWVudT0mRXhhbXBsZSBFZGl0b3IKKworX1VJX0NyZWF0ZUNoaWxkX21lbnVfaXRlbT0mTmV3IENoaWxkCitfVUlfQ3JlYXRlU2libGluZ19tZW51X2l0ZW09TiYgIFx1ZDYxNVx1YzgxYyBcdWM3OTBcdWI5ZTQKKworX1VJX1Nob3dQcm9wZXJ0aWVzVmlld19tZW51X2l0ZW09XHVkNDVjXHVjMmRjIFx1YmMwZiBcdWMxOGRcdWMxMzFcdWJjZjRcdWFlMzAKK19VSV9SZWZyZXNoVmlld2VyX21lbnVfaXRlbT0mUmVmcmVzaAorCitfVUlfU2VsZWN0aW9uUGFnZV9sYWJlbD1cdWMxMjBcdWQwZGQKKworX1VJX05vT2JqZWN0U2VsZWN0ZWQ9XHVjNTQ0XHViYjM0XHVhYzgzXHViM2M0IFx1YzU0OCBcdWMxMjBcdWQwZGRcdWQ1NjgKK19VSV9TaW5nbGVPYmplY3RTZWxlY3RlZD1cdWMxMjBcdWQwZGRcdWQ1NWMgXHVhYzFkXHVjY2I0IDogezB9CitfVUlfTXVsdGlPYmplY3RTZWxlY3RlZD1cdWMxMjBcdWQwZGRcdWI0MWMgezB9IFx1YWMxZFx1Y2NiNAorCitfVUlfT3BlbkVkaXRvckVycm9yX2xhYmVsPVx1YzYyNFx1ZDUwOCBcdWM1ZDBcdWI1MTRcdWQxMzAKKworX1VJX1dpemFyZF9jYXRlZ29yeT1cdWM2MDhcdWM4MWMgRU1GIFx1YmFhOFx1YjM3OCBcdWMwZGRcdWMxMzEgXHViOWM4XHViYzk1XHVjMGFjCisKK19VSV9DcmVhdGVNb2RlbEVycm9yX21lc3NhZ2U9XHVkMzBjXHVjNzdjICd7MH0gIlx1YzVkMFx1YzExYyBcdWJiMzhcdWM4MWMgXHViYzFjXHVjMGRkCisKK19VSV9FeGFtcGxlRWRpdG9yX2xhYmVsPVx1YzYwOFx1YzgxYyBcdWJhYThcdWIzNzggXHVkM2I4XHVjOWQxXHVhZTMwCisKK19VSV9FeGFtcGxlRWRpdG9yRmlsZW5hbWVEZWZhdWx0QmFzZT1cdWIwOThcdWM3NTgKK19VSV9FeGFtcGxlRWRpdG9yRmlsZW5hbWVFeHRlbnNpb25zPVx1YzYwOAorCitfVUlfV2l6YXJkX2xhYmVsPVx1YzBjOFx1Yjg1Y1x1YzZiNAorCitfV0FSTl9GaWxlbmFtZUV4dGVuc2lvbj1cdWQzMGNcdWM3N2MgXHVjNzc0XHViOTg0XHVjNzQwICIuezB9Ilx1Yjg1YyBcdWIwNWRcdWIwOThcdWM1N2NcdWQ1NjguCitfV0FSTl9GaWxlbmFtZUV4dGVuc2lvbnM9XHVkMzBjXHVjNzdjIFx1Yzc3NFx1Yjk4NFx1Yzc0MCBcdWIyZTRcdWM3NGMgXHVkNjU1XHVjN2E1XHVjNzkwIFx1YzkxMSBcdWQ1NThcdWIwOThcdWI5N2MgXHVhYzAwXHVjODM4XHVjNTdjXHVkNTY4IDogezB9CisKK19VSV9Nb2RlbE9iamVjdD0mTW9kZWwgT2JqZWN0CitfVUlfWE1MRW5jb2Rpbmc9JlhNTCBFbmNvZGluZworX1VJX1hNTEVuY29kaW5nQ2hvaWNlcz1VVEYgLSA4IEFTQ0lJIFVURiAtIDE2IFVURiAtIDE2QkUgVVRGIC0gMTZMRSBJU08gLSA4ODU5IC0gMQorX1VJX1dpemFyZF9pbml0aWFsX29iamVjdF9kZXNjcmlwdGlvbj1cdWMwZGRcdWMxMzFcdWQ1NjAgXHViYWE4XHViMzc4IFx1YWMxY1x1Y2NiNCBcdWMxMjBcdWQwZGQKKworX1VJX0ZpbGVDb25mbGljdF9sYWJlbD1cdWQzMGNcdWM3N2MgXHVjZGE5XHViM2NjCitfV0FSTl9GaWxlQ29uZmxpY3Q9XHVjODAwXHVjN2E1XHViNDE4XHVjOWMwIFx1YzU0YVx1Yzc0MCBcdWMwYWNcdWQ1NmRcdWI0ZTRcdWM3NzQgXHVkM2I4XHVjOWQxXHVhZTMwIFx1YzY3OFx1YmQ4MFx1Yzc1OCBcdWJjYzBcdWFjYmQgXHVjMGFjXHVkNTZkXHViNGU0XHVhY2ZjIFx1Y2RhOVx1YjNjY1x1ZDU2OC4gXHVjNzc0IFx1ZDNiOFx1YzlkMVx1YWUzMFx1Yzc1OCBcdWJjYzBcdWFjYmQgXHVjMGFjXHVkNTZkXHViNGU0XHVjNzQ0IFx1Y2RlOFx1YzE4YyBcdWQ1NThcdWMyZGNcdWFjYTBcdWMyYjVcdWIyYzhcdWFlNGM/CisKK19VSV9Gb3JjaW5nRWRpdG9yX21lbnU9JkZvcmNpbmcgRWRpdG9yCitfVUlfRm9yY2luZ0VkaXRvcl9sYWJlbD1cdWJhYThcdWIzNzggXHVkM2I4XHVjOWQxXHVhZTMwIFx1YWMxNVx1YzY5NFx1ZDU1OFx1YWUzMAorX1VJX0ZvcmNpbmdFZGl0b3JGaWxlbmFtZURlZmF1bHRCYXNlPVx1YjA5OFx1Yzc1OAorX1VJX0ZvcmNpbmdFZGl0b3JGaWxlbmFtZUV4dGVuc2lvbnM9XHVhYzE1XHVjODFjCmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy5mb3JjaW5nL3BsdWdpbl96aC5wcm9wZXJ0aWVzIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMuZm9yY2luZy9wbHVnaW5femgucHJvcGVydGllcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42OTYwM2E4Ci0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMuZm9yY2luZy9wbHVnaW5femgucHJvcGVydGllcwpAQCAtMCwwICsxLDUxIEBACisKKyMgPGNvcHlyaWdodD4KKyMgPC9jb3B5cmlnaHQ+CisjCisjICRJZDogcGx1Z2luLnByb3BlcnRpZXMsdiAxLjEgMjAwOS8wMy8xMyAwMDowNzo0OCBzZWRsdW5kIEV4cCAkCisKK3BsdWdpbk5hbWU9U1RFTVx1NWYzYVx1NTIzNlx1NzViZVx1NzVjNVx1NmEyMVx1NTc4Ylx1NzY4NFx1NzUyOFx1NjIzN1x1NzU0Y1x1OTc2MgorcHJvdmlkZXJOYW1lPUVjbGlwc2Uub3JnCisKK19VSV9FeGFtcGxlRWRpdG9yX21lbnU9JkV4YW1wbGUgRWRpdG9yCisKK19VSV9DcmVhdGVDaGlsZF9tZW51X2l0ZW09Jk5ldyBDaGlsZAorX1VJX0NyZWF0ZVNpYmxpbmdfbWVudV9pdGVtPVx1NjViMFx1NzUxZlx1NjIxMFx1NGUwMFx1NGUyYVx1NTE0NFx1NWYxZlx1N2M3YgorCitfVUlfU2hvd1Byb3BlcnRpZXNWaWV3X21lbnVfaXRlbT1cdTY2M2VcdTc5M2FcdTU0OGNcdTVjNWVcdTYwMjdcdTY3ZTVcdTc3MGIKK19VSV9SZWZyZXNoVmlld2VyX21lbnVfaXRlbT0mUmVmcmVzaAorCitfVUlfU2VsZWN0aW9uUGFnZV9sYWJlbD1cdTkwMDlcdTYyZTkKKworX1VJX05vT2JqZWN0U2VsZWN0ZWQ9XHU2NWUwXHU5MDA5XHU1YjlhXHU1MTg1XHU1YmI5CitfVUlfU2luZ2xlT2JqZWN0U2VsZWN0ZWQ9XHU5MDA5XHU2MmU5XHU1YmY5XHU4YzYxXHVmZjFhezB9CitfVUlfTXVsdGlPYmplY3RTZWxlY3RlZD1cdTkwMDlcdTYyZTl7MH1cdTViZjlcdThjNjEKKworX1VJX09wZW5FZGl0b3JFcnJvcl9sYWJlbD1cdTYyNTNcdTVmMDBcdTdmMTZcdThmOTFcdTU2NjgKKworX1VJX1dpemFyZF9jYXRlZ29yeT1cdTRmOGJcdTU5ODJFTUZcdTZhMjFcdTU3OGJcdTUyMWJcdTVlZmFcdTU0MTFcdTViZmMKKworX1VJX0NyZWF0ZU1vZGVsRXJyb3JfbWVzc2FnZT1cdTU3MjhcdTY1ODdcdTRlZjZcdTIwMWN7MH1cdTIwMWRcdTRlMmRcdTkwNDdcdTUyMzBcdTc2ODRcdTk1ZWVcdTk4OTgKKworX1VJX0V4YW1wbGVFZGl0b3JfbGFiZWw9XHU2YTIxXHU1NzhiXHU3ZjE2XHU4ZjkxXHU1NjY4XHU3OTNhXHU0ZjhiCisKK19VSV9FeGFtcGxlRWRpdG9yRmlsZW5hbWVEZWZhdWx0QmFzZT1cdTYyMTFcdTc2ODQKK19VSV9FeGFtcGxlRWRpdG9yRmlsZW5hbWVFeHRlbnNpb25zPVx1NGY4Ylx1NTk4MgorCitfVUlfV2l6YXJkX2xhYmVsPVx1NjViMFx1NWVmYQorCitfV0FSTl9GaWxlbmFtZUV4dGVuc2lvbj1cdTY1ODdcdTRlZjZcdTU0MGRcdTVmYzVcdTk4N2JcdTRlZTUnezB9ICcnXHU3ZWQzXHU1YzNlCitfV0FSTl9GaWxlbmFtZUV4dGVuc2lvbnM9XHU2NTg3XHU0ZWY2XHU1NDBkXHU1ZmM1XHU5ODdiXHU1MTc3XHU2NzA5XHU0ZWU1XHU0ZTBiXHU2MjY5XHU1YzU1XHU1NDBkXHU0ZTRiXHU0ZTAwXHVmZjFhezB9CisKK19VSV9Nb2RlbE9iamVjdD0mTW9kZWwgT2JqZWN0CitfVUlfWE1MRW5jb2Rpbmc9JlhNTCBFbmNvZGluZworX1VJX1hNTEVuY29kaW5nQ2hvaWNlcz1VVEYtOCBBU0NJSSBVVEYtMTYgVVRGLTE2QkUgVVRGLTE2TEUgSVNPLTg4NTktMQorX1VJX1dpemFyZF9pbml0aWFsX29iamVjdF9kZXNjcmlwdGlvbj1cdTkwMDlcdTYyZTlcdTUyMWJcdTVlZmFcdTRlMDBcdTRlMmFcdTZhMjFcdTU3OGJcdTViZjlcdThjNjEKKworX1VJX0ZpbGVDb25mbGljdF9sYWJlbD1cdTY1ODdcdTRlZjZcdTUxYjJcdTdhODEKK19XQVJOX0ZpbGVDb25mbGljdD1cdTY3MDlcdTY3MmFcdTRmZGRcdTViNThcdTc2ODRcdTY2ZjRcdTY1MzlcdTRlMGVcdTdmMTZcdThmOTFcdTU2NjhcdTU5MTZcdTc2ODRcdTY2ZjRcdTY1MzlcdTUxYjJcdTdhODFcdTMwMDJcdTRmNjBcdTYwZjNcdTY1M2VcdTVmMDNcdThmZDlcdTRlMmFcdTdmMTZcdThmOTFcdTU2NjhcdTc2ODRcdTY2ZjRcdTY1MzlcdTU0MTdcdWZmMWYKKworX1VJX0ZvcmNpbmdFZGl0b3JfbWVudT0mRm9yY2luZyBFZGl0b3IKK19VSV9Gb3JjaW5nRWRpdG9yX2xhYmVsPVx1NWYzYVx1NTIzNlx1NmEyMVx1NTc4Ylx1N2YxNlx1OGY5MVx1NTY2OAorX1VJX0ZvcmNpbmdFZGl0b3JGaWxlbmFtZURlZmF1bHRCYXNlPVx1NjIxMVx1NzY4NAorX1VJX0ZvcmNpbmdFZGl0b3JGaWxlbmFtZUV4dGVuc2lvbnM9XHU4ZmViXHU0ZjdmCmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy5mb3JjaW5nL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvZm9yY2luZy9wcmVzZW50YXRpb24vRm9yY2luZ0FjdGlvbkJhckNvbnRyaWJ1dG9yLmphdmEgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy5mb3JjaW5nL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvZm9yY2luZy9wcmVzZW50YXRpb24vRm9yY2luZ0FjdGlvbkJhckNvbnRyaWJ1dG9yLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmZjYjBmMwotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzLmZvcmNpbmcvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9mb3JjaW5nL3ByZXNlbnRhdGlvbi9Gb3JjaW5nQWN0aW9uQmFyQ29udHJpYnV0b3IuamF2YQpAQCAtMCwwICsxLDQzMCBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZm9yY2luZy5wcmVzZW50YXRpb247CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDkgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udWkudmlld2VyLklWaWV3ZXJQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5kb21haW4uRWRpdGluZ0RvbWFpbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5kb21haW4uSUVkaXRpbmdEb21haW5Qcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5hY3Rpb24uQ29udHJvbEFjdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5hY3Rpb24uQ3JlYXRlQ2hpbGRBY3Rpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkuYWN0aW9uLkNyZWF0ZVNpYmxpbmdBY3Rpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkuYWN0aW9uLkVkaXRpbmdEb21haW5BY3Rpb25CYXJDb250cmlidXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5hY3Rpb24uTG9hZFJlc291cmNlQWN0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmFjdGlvbi5WYWxpZGF0ZUFjdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uQWN0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5BY3Rpb25Db250cmlidXRpb25JdGVtOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JQWN0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JQ29udHJpYnV0aW9uSXRlbTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSUNvbnRyaWJ1dGlvbk1hbmFnZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklNZW51TGlzdGVuZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklNZW51TWFuYWdlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSVRvb2xCYXJNYW5hZ2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5NZW51TWFuYWdlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uU2VwYXJhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5TdWJDb250cmlidXRpb25JdGVtOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU3RydWN0dXJlZFNlbGVjdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlNlbGVjdGlvbkNoYW5nZWRFdmVudDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlZpZXdlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMuZm9yY2luZy5wcmVzZW50YXRpb24uRm9yY2luZ0VkaXRvclBsdWdpbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5JRWRpdG9yUGFydDsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5QYXJ0SW5pdEV4Y2VwdGlvbjsKKworLyoqCisgKiBUaGlzIGlzIHRoZSBhY3Rpb24gYmFyIGNvbnRyaWJ1dG9yIGZvciB0aGUgRm9yY2luZyBtb2RlbCBlZGl0b3IuCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBGb3JjaW5nQWN0aW9uQmFyQ29udHJpYnV0b3IKKwlleHRlbmRzIEVkaXRpbmdEb21haW5BY3Rpb25CYXJDb250cmlidXRvcgorCWltcGxlbWVudHMgSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lciB7CisJLyoqCisJICogVGhpcyBrZWVwcyB0cmFjayBvZiB0aGUgYWN0aXZlIGVkaXRvci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgSUVkaXRvclBhcnQgYWN0aXZlRWRpdG9yUGFydDsKKworCS8qKgorCSAqIFRoaXMga2VlcHMgdHJhY2sgb2YgdGhlIGN1cnJlbnQgc2VsZWN0aW9uIHByb3ZpZGVyLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBJU2VsZWN0aW9uUHJvdmlkZXIgc2VsZWN0aW9uUHJvdmlkZXI7CisKKwkvKioKKwkgKiBUaGlzIGFjdGlvbiBvcGVucyB0aGUgUHJvcGVydGllcyB2aWV3LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBJQWN0aW9uIHNob3dQcm9wZXJ0aWVzVmlld0FjdGlvbiA9CisJCW5ldyBBY3Rpb24oRm9yY2luZ0VkaXRvclBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoIl9VSV9TaG93UHJvcGVydGllc1ZpZXdfbWVudV9pdGVtIikpIC8vJE5PTi1OTFMtMSQKKwkJeworCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgdm9pZCBydW4oKSB7CisJCQkJdHJ5IHsKKwkJCQkJZ2V0UGFnZSgpLnNob3dWaWV3KCJvcmcuZWNsaXBzZS51aS52aWV3cy5Qcm9wZXJ0eVNoZWV0Iik7IC8vJE5PTi1OTFMtMSQKKwkJCQl9CisJCQkJY2F0Y2ggKFBhcnRJbml0RXhjZXB0aW9uIGV4Y2VwdGlvbikgeworCQkJCQlGb3JjaW5nRWRpdG9yUGx1Z2luLklOU1RBTkNFLmxvZyhleGNlcHRpb24pOworCQkJCX0KKwkJCX0KKwkJfTsKKworCS8qKgorCSAqIFRoaXMgYWN0aW9uIHJlZnJlc2hlcyB0aGUgdmlld2VyIG9mIHRoZSBjdXJyZW50IGVkaXRvciBpZiB0aGUgZWRpdG9yCisJICogaW1wbGVtZW50cyB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51aS52aWV3ZXIuSVZpZXdlclByb3ZpZGVyfS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgSUFjdGlvbiByZWZyZXNoVmlld2VyQWN0aW9uID0KKwkJbmV3IEFjdGlvbihGb3JjaW5nRWRpdG9yUGx1Z2luLklOU1RBTkNFLmdldFN0cmluZygiX1VJX1JlZnJlc2hWaWV3ZXJfbWVudV9pdGVtIikpIC8vJE5PTi1OTFMtMSQKKwkJeworCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgYm9vbGVhbiBpc0VuYWJsZWQoKSB7CisJCQkJcmV0dXJuIGFjdGl2ZUVkaXRvclBhcnQgaW5zdGFuY2VvZiBJVmlld2VyUHJvdmlkZXI7CisJCQl9CisKKwkJCUBPdmVycmlkZQorCQkJcHVibGljIHZvaWQgcnVuKCkgeworCQkJCWlmIChhY3RpdmVFZGl0b3JQYXJ0IGluc3RhbmNlb2YgSVZpZXdlclByb3ZpZGVyKSB7CisJCQkJCVZpZXdlciB2aWV3ZXIgPSAoKElWaWV3ZXJQcm92aWRlcilhY3RpdmVFZGl0b3JQYXJ0KS5nZXRWaWV3ZXIoKTsKKwkJCQkJaWYgKHZpZXdlciAhPSBudWxsKSB7CisJCQkJCQl2aWV3ZXIucmVmcmVzaCgpOworCQkJCQl9CisJCQkJfQorCQkJfQorCQl9OworCisJLyoqCisJICogVGhpcyB3aWxsIGNvbnRhaW4gb25lIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5hY3Rpb24uQ3JlYXRlQ2hpbGRBY3Rpb259IGNvcnJlc3BvbmRpbmcgdG8gZWFjaCBkZXNjcmlwdG9yCisJICogZ2VuZXJhdGVkIGZvciB0aGUgY3VycmVudCBzZWxlY3Rpb24gYnkgdGhlIGl0ZW0gcHJvdmlkZXIuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIENvbGxlY3Rpb248SUFjdGlvbj4gY3JlYXRlQ2hpbGRBY3Rpb25zOworCisJLyoqCisJICogVGhpcyBpcyB0aGUgbWVudSBtYW5hZ2VyIGludG8gd2hpY2ggbWVudSBjb250cmlidXRpb24gaXRlbXMgc2hvdWxkIGJlIGFkZGVkIGZvciBDcmVhdGVDaGlsZCBhY3Rpb25zLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBJTWVudU1hbmFnZXIgY3JlYXRlQ2hpbGRNZW51TWFuYWdlcjsKKworCS8qKgorCSAqIFRoaXMgd2lsbCBjb250YWluIG9uZSB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkuYWN0aW9uLkNyZWF0ZVNpYmxpbmdBY3Rpb259IGNvcnJlc3BvbmRpbmcgdG8gZWFjaCBkZXNjcmlwdG9yCisJICogZ2VuZXJhdGVkIGZvciB0aGUgY3VycmVudCBzZWxlY3Rpb24gYnkgdGhlIGl0ZW0gcHJvdmlkZXIuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIENvbGxlY3Rpb248SUFjdGlvbj4gY3JlYXRlU2libGluZ0FjdGlvbnM7CisKKwkvKioKKwkgKiBUaGlzIGlzIHRoZSBtZW51IG1hbmFnZXIgaW50byB3aGljaCBtZW51IGNvbnRyaWJ1dGlvbiBpdGVtcyBzaG91bGQgYmUgYWRkZWQgZm9yIENyZWF0ZVNpYmxpbmcgYWN0aW9ucy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgSU1lbnVNYW5hZ2VyIGNyZWF0ZVNpYmxpbmdNZW51TWFuYWdlcjsKKworCS8qKgorCSAqIFRoaXMgY3JlYXRlcyBhbiBpbnN0YW5jZSBvZiB0aGUgY29udHJpYnV0b3IuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEZvcmNpbmdBY3Rpb25CYXJDb250cmlidXRvcigpIHsKKwkJc3VwZXIoQURESVRJT05TX0xBU1RfU1RZTEUpOworCQlsb2FkUmVzb3VyY2VBY3Rpb24gPSBuZXcgTG9hZFJlc291cmNlQWN0aW9uKCk7CisJCXZhbGlkYXRlQWN0aW9uID0gbmV3IFZhbGlkYXRlQWN0aW9uKCk7CisJCWNvbnRyb2xBY3Rpb24gPSBuZXcgQ29udHJvbEFjdGlvbigpOworCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyBTZXBhcmF0b3JzIGZvciBlZGl0b3IgYWRkaXRpb25zIHRvIHRoZSB0b29sIGJhci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBjb250cmlidXRlVG9Ub29sQmFyKElUb29sQmFyTWFuYWdlciB0b29sQmFyTWFuYWdlcikgeworCQl0b29sQmFyTWFuYWdlci5hZGQobmV3IFNlcGFyYXRvcigiZm9yY2luZy1zZXR0aW5ncyIpKTsgLy8kTk9OLU5MUy0xJAorCQl0b29sQmFyTWFuYWdlci5hZGQobmV3IFNlcGFyYXRvcigiZm9yY2luZy1hZGRpdGlvbnMiKSk7IC8vJE5PTi1OTFMtMSQKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFkZHMgdG8gdGhlIG1lbnUgYmFyIGEgbWVudSBhbmQgc29tZSBzZXBhcmF0b3JzIGZvciBlZGl0b3IgYWRkaXRpb25zLAorCSAqIGFzIHdlbGwgYXMgdGhlIHN1Yi1tZW51cyBmb3Igb2JqZWN0IGNyZWF0aW9uIGl0ZW1zLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGNvbnRyaWJ1dGVUb01lbnUoSU1lbnVNYW5hZ2VyIG1lbnVNYW5hZ2VyKSB7CisJCXN1cGVyLmNvbnRyaWJ1dGVUb01lbnUobWVudU1hbmFnZXIpOworCisJCUlNZW51TWFuYWdlciBzdWJtZW51TWFuYWdlciA9IG5ldyBNZW51TWFuYWdlcihGb3JjaW5nRWRpdG9yUGx1Z2luLklOU1RBTkNFLmdldFN0cmluZygiX1VJX0ZvcmNpbmdFZGl0b3JfbWVudSIpLCAib3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmZvcmNpbmdNZW51SUQiKTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCisJCW1lbnVNYW5hZ2VyLmluc2VydEFmdGVyKCJhZGRpdGlvbnMiLCBzdWJtZW51TWFuYWdlcik7IC8vJE5PTi1OTFMtMSQKKwkJc3VibWVudU1hbmFnZXIuYWRkKG5ldyBTZXBhcmF0b3IoInNldHRpbmdzIikpOyAvLyROT04tTkxTLTEkCisJCXN1Ym1lbnVNYW5hZ2VyLmFkZChuZXcgU2VwYXJhdG9yKCJhY3Rpb25zIikpOyAvLyROT04tTkxTLTEkCisJCXN1Ym1lbnVNYW5hZ2VyLmFkZChuZXcgU2VwYXJhdG9yKCJhZGRpdGlvbnMiKSk7IC8vJE5PTi1OTFMtMSQKKwkJc3VibWVudU1hbmFnZXIuYWRkKG5ldyBTZXBhcmF0b3IoImFkZGl0aW9ucy1lbmQiKSk7IC8vJE5PTi1OTFMtMSQKKworCQkvLyBQcmVwYXJlIGZvciBDcmVhdGVDaGlsZCBpdGVtIGFkZGl0aW9uIG9yIHJlbW92YWwuCisJCS8vCisJCWNyZWF0ZUNoaWxkTWVudU1hbmFnZXIgPSBuZXcgTWVudU1hbmFnZXIoRm9yY2luZ0VkaXRvclBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoIl9VSV9DcmVhdGVDaGlsZF9tZW51X2l0ZW0iKSk7IC8vJE5PTi1OTFMtMSQKKwkJc3VibWVudU1hbmFnZXIuaW5zZXJ0QmVmb3JlKCJhZGRpdGlvbnMiLCBjcmVhdGVDaGlsZE1lbnVNYW5hZ2VyKTsgLy8kTk9OLU5MUy0xJAorCisJCS8vIFByZXBhcmUgZm9yIENyZWF0ZVNpYmxpbmcgaXRlbSBhZGRpdGlvbiBvciByZW1vdmFsLgorCQkvLworCQljcmVhdGVTaWJsaW5nTWVudU1hbmFnZXIgPSBuZXcgTWVudU1hbmFnZXIoRm9yY2luZ0VkaXRvclBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoIl9VSV9DcmVhdGVTaWJsaW5nX21lbnVfaXRlbSIpKTsgLy8kTk9OLU5MUy0xJAorCQlzdWJtZW51TWFuYWdlci5pbnNlcnRCZWZvcmUoImFkZGl0aW9ucyIsIGNyZWF0ZVNpYmxpbmdNZW51TWFuYWdlcik7IC8vJE5PTi1OTFMtMSQKKworCQkvLyBGb3JjZSBhbiB1cGRhdGUgYmVjYXVzZSBFY2xpcHNlIGhpZGVzIGVtcHR5IG1lbnVzIG5vdy4KKwkJLy8KKwkJc3VibWVudU1hbmFnZXIuYWRkTWVudUxpc3RlbmVyCisJCQkobmV3IElNZW51TGlzdGVuZXIoKSB7CisJCQkJIHB1YmxpYyB2b2lkIG1lbnVBYm91dFRvU2hvdyhJTWVudU1hbmFnZXIgbWVudU1hbmFnZXIpIHsKKwkJCQkJIG1lbnVNYW5hZ2VyLnVwZGF0ZUFsbCh0cnVlKTsKKwkJCQkgfQorCQkJIH0pOworCisJCWFkZEdsb2JhbEFjdGlvbnMoc3VibWVudU1hbmFnZXIpOworCX0KKworCS8qKgorCSAqIFdoZW4gdGhlIGFjdGl2ZSBlZGl0b3IgY2hhbmdlcywgdGhpcyByZW1lbWJlcnMgdGhlIGNoYW5nZSBhbmQgcmVnaXN0ZXJzIHdpdGggaXQgYXMgYSBzZWxlY3Rpb24gcHJvdmlkZXIuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgc2V0QWN0aXZlRWRpdG9yKElFZGl0b3JQYXJ0IHBhcnQpIHsKKwkJc3VwZXIuc2V0QWN0aXZlRWRpdG9yKHBhcnQpOworCQlhY3RpdmVFZGl0b3JQYXJ0ID0gcGFydDsKKworCQkvLyBTd2l0Y2ggdG8gdGhlIG5ldyBzZWxlY3Rpb24gcHJvdmlkZXIuCisJCS8vCisJCWlmIChzZWxlY3Rpb25Qcm92aWRlciAhPSBudWxsKSB7CisJCQlzZWxlY3Rpb25Qcm92aWRlci5yZW1vdmVTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIodGhpcyk7CisJCX0KKwkJaWYgKHBhcnQgPT0gbnVsbCkgeworCQkJc2VsZWN0aW9uUHJvdmlkZXIgPSBudWxsOworCQl9CisJCWVsc2UgeworCQkJc2VsZWN0aW9uUHJvdmlkZXIgPSBwYXJ0LmdldFNpdGUoKS5nZXRTZWxlY3Rpb25Qcm92aWRlcigpOworCQkJc2VsZWN0aW9uUHJvdmlkZXIuYWRkU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyKHRoaXMpOworCisJCQkvLyBGYWtlIGEgc2VsZWN0aW9uIGNoYW5nZWQgZXZlbnQgdG8gdXBkYXRlIHRoZSBtZW51cy4KKwkJCS8vCisJCQlpZiAoc2VsZWN0aW9uUHJvdmlkZXIuZ2V0U2VsZWN0aW9uKCkgIT0gbnVsbCkgeworCQkJCXNlbGVjdGlvbkNoYW5nZWQobmV3IFNlbGVjdGlvbkNoYW5nZWRFdmVudChzZWxlY3Rpb25Qcm92aWRlciwgc2VsZWN0aW9uUHJvdmlkZXIuZ2V0U2VsZWN0aW9uKCkpKTsKKwkJCX0KKwkJfQorCX0KKworCS8qKgorCSAqIFRoaXMgaW1wbGVtZW50cyB7QGxpbmsgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyfSwKKwkgKiBoYW5kbGluZyB7QGxpbmsgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5TZWxlY3Rpb25DaGFuZ2VkRXZlbnR9cyBieSBxdWVyeWluZyBmb3IgdGhlIGNoaWxkcmVuIGFuZCBzaWJsaW5ncworCSAqIHRoYXQgY2FuIGJlIGFkZGVkIHRvIHRoZSBzZWxlY3RlZCBvYmplY3QgYW5kIHVwZGF0aW5nIHRoZSBtZW51cyBhY2NvcmRpbmdseS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZWxlY3Rpb25DaGFuZ2VkKFNlbGVjdGlvbkNoYW5nZWRFdmVudCBldmVudCkgeworCQkvLyBSZW1vdmUgYW55IG1lbnUgaXRlbXMgZm9yIG9sZCBzZWxlY3Rpb24uCisJCS8vCisJCWlmIChjcmVhdGVDaGlsZE1lbnVNYW5hZ2VyICE9IG51bGwpIHsKKwkJCWRlcG9wdWxhdGVNYW5hZ2VyKGNyZWF0ZUNoaWxkTWVudU1hbmFnZXIsIGNyZWF0ZUNoaWxkQWN0aW9ucyk7CisJCX0KKwkJaWYgKGNyZWF0ZVNpYmxpbmdNZW51TWFuYWdlciAhPSBudWxsKSB7CisJCQlkZXBvcHVsYXRlTWFuYWdlcihjcmVhdGVTaWJsaW5nTWVudU1hbmFnZXIsIGNyZWF0ZVNpYmxpbmdBY3Rpb25zKTsKKwkJfQorCisJCS8vIFF1ZXJ5IHRoZSBuZXcgc2VsZWN0aW9uIGZvciBhcHByb3ByaWF0ZSBuZXcgY2hpbGQvc2libGluZyBkZXNjcmlwdG9ycworCQkvLworCQlDb2xsZWN0aW9uPD8+IG5ld0NoaWxkRGVzY3JpcHRvcnMgPSBudWxsOworCQlDb2xsZWN0aW9uPD8+IG5ld1NpYmxpbmdEZXNjcmlwdG9ycyA9IG51bGw7CisKKwkJSVNlbGVjdGlvbiBzZWxlY3Rpb24gPSBldmVudC5nZXRTZWxlY3Rpb24oKTsKKwkJaWYgKHNlbGVjdGlvbiBpbnN0YW5jZW9mIElTdHJ1Y3R1cmVkU2VsZWN0aW9uICYmICgoSVN0cnVjdHVyZWRTZWxlY3Rpb24pc2VsZWN0aW9uKS5zaXplKCkgPT0gMSkgeworCQkJT2JqZWN0IG9iamVjdCA9ICgoSVN0cnVjdHVyZWRTZWxlY3Rpb24pc2VsZWN0aW9uKS5nZXRGaXJzdEVsZW1lbnQoKTsKKworCQkJRWRpdGluZ0RvbWFpbiBkb21haW4gPSAoKElFZGl0aW5nRG9tYWluUHJvdmlkZXIpYWN0aXZlRWRpdG9yUGFydCkuZ2V0RWRpdGluZ0RvbWFpbigpOworCisJCQluZXdDaGlsZERlc2NyaXB0b3JzID0gZG9tYWluLmdldE5ld0NoaWxkRGVzY3JpcHRvcnMob2JqZWN0LCBudWxsKTsKKwkJCW5ld1NpYmxpbmdEZXNjcmlwdG9ycyA9IGRvbWFpbi5nZXROZXdDaGlsZERlc2NyaXB0b3JzKG51bGwsIG9iamVjdCk7CisJCX0KKworCQkvLyBHZW5lcmF0ZSBhY3Rpb25zIGZvciBzZWxlY3Rpb247IHBvcHVsYXRlIGFuZCByZWRyYXcgdGhlIG1lbnVzLgorCQkvLworCQljcmVhdGVDaGlsZEFjdGlvbnMgPSBnZW5lcmF0ZUNyZWF0ZUNoaWxkQWN0aW9ucyhuZXdDaGlsZERlc2NyaXB0b3JzLCBzZWxlY3Rpb24pOworCQljcmVhdGVTaWJsaW5nQWN0aW9ucyA9IGdlbmVyYXRlQ3JlYXRlU2libGluZ0FjdGlvbnMobmV3U2libGluZ0Rlc2NyaXB0b3JzLCBzZWxlY3Rpb24pOworCisJCWlmIChjcmVhdGVDaGlsZE1lbnVNYW5hZ2VyICE9IG51bGwpIHsKKwkJCXBvcHVsYXRlTWFuYWdlcihjcmVhdGVDaGlsZE1lbnVNYW5hZ2VyLCBjcmVhdGVDaGlsZEFjdGlvbnMsIG51bGwpOworCQkJY3JlYXRlQ2hpbGRNZW51TWFuYWdlci51cGRhdGUodHJ1ZSk7CisJCX0KKwkJaWYgKGNyZWF0ZVNpYmxpbmdNZW51TWFuYWdlciAhPSBudWxsKSB7CisJCQlwb3B1bGF0ZU1hbmFnZXIoY3JlYXRlU2libGluZ01lbnVNYW5hZ2VyLCBjcmVhdGVTaWJsaW5nQWN0aW9ucywgbnVsbCk7CisJCQljcmVhdGVTaWJsaW5nTWVudU1hbmFnZXIudXBkYXRlKHRydWUpOworCQl9CisJfQorCisJLyoqCisJICogVGhpcyBnZW5lcmF0ZXMgYSB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkuYWN0aW9uLkNyZWF0ZUNoaWxkQWN0aW9ufSBmb3IgZWFjaCBvYmplY3QgaW4gPGNvZGU+ZGVzY3JpcHRvcnM8L2NvZGU+LAorCSAqIGFuZCByZXR1cm5zIHRoZSBjb2xsZWN0aW9uIG9mIHRoZXNlIGFjdGlvbnMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIENvbGxlY3Rpb248SUFjdGlvbj4gZ2VuZXJhdGVDcmVhdGVDaGlsZEFjdGlvbnMoQ29sbGVjdGlvbjw/PiBkZXNjcmlwdG9ycywgSVNlbGVjdGlvbiBzZWxlY3Rpb24pIHsKKwkJQ29sbGVjdGlvbjxJQWN0aW9uPiBhY3Rpb25zID0gbmV3IEFycmF5TGlzdDxJQWN0aW9uPigpOworCQlpZiAoZGVzY3JpcHRvcnMgIT0gbnVsbCkgeworCQkJZm9yIChPYmplY3QgZGVzY3JpcHRvciA6IGRlc2NyaXB0b3JzKSB7CisJCQkJYWN0aW9ucy5hZGQobmV3IENyZWF0ZUNoaWxkQWN0aW9uKGFjdGl2ZUVkaXRvclBhcnQsIHNlbGVjdGlvbiwgZGVzY3JpcHRvcikpOworCQkJfQorCQl9CisJCXJldHVybiBhY3Rpb25zOworCX0KKworCS8qKgorCSAqIFRoaXMgZ2VuZXJhdGVzIGEge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmFjdGlvbi5DcmVhdGVTaWJsaW5nQWN0aW9ufSBmb3IgZWFjaCBvYmplY3QgaW4gPGNvZGU+ZGVzY3JpcHRvcnM8L2NvZGU+LAorCSAqIGFuZCByZXR1cm5zIHRoZSBjb2xsZWN0aW9uIG9mIHRoZXNlIGFjdGlvbnMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIENvbGxlY3Rpb248SUFjdGlvbj4gZ2VuZXJhdGVDcmVhdGVTaWJsaW5nQWN0aW9ucyhDb2xsZWN0aW9uPD8+IGRlc2NyaXB0b3JzLCBJU2VsZWN0aW9uIHNlbGVjdGlvbikgeworCQlDb2xsZWN0aW9uPElBY3Rpb24+IGFjdGlvbnMgPSBuZXcgQXJyYXlMaXN0PElBY3Rpb24+KCk7CisJCWlmIChkZXNjcmlwdG9ycyAhPSBudWxsKSB7CisJCQlmb3IgKE9iamVjdCBkZXNjcmlwdG9yIDogZGVzY3JpcHRvcnMpIHsKKwkJCQlhY3Rpb25zLmFkZChuZXcgQ3JlYXRlU2libGluZ0FjdGlvbihhY3RpdmVFZGl0b3JQYXJ0LCBzZWxlY3Rpb24sIGRlc2NyaXB0b3IpKTsKKwkJCX0KKwkJfQorCQlyZXR1cm4gYWN0aW9uczsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHBvcHVsYXRlcyB0aGUgc3BlY2lmaWVkIDxjb2RlPm1hbmFnZXI8L2NvZGU+IHdpdGgge0BsaW5rIG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5BY3Rpb25Db250cmlidXRpb25JdGVtfXMKKwkgKiBiYXNlZCBvbiB0aGUge0BsaW5rIG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JQWN0aW9ufXMgY29udGFpbmVkIGluIHRoZSA8Y29kZT5hY3Rpb25zPC9jb2RlPiBjb2xsZWN0aW9uLAorCSAqIGJ5IGluc2VydGluZyB0aGVtIGJlZm9yZSB0aGUgc3BlY2lmaWVkIGNvbnRyaWJ1dGlvbiBpdGVtIDxjb2RlPmNvbnRyaWJ1dGlvbklEPC9jb2RlPi4KKwkgKiBJZiA8Y29kZT5jb250cmlidXRpb25JRDwvY29kZT4gaXMgPGNvZGU+bnVsbDwvY29kZT4sIHRoZXkgYXJlIHNpbXBseSBhZGRlZC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBwb3B1bGF0ZU1hbmFnZXIoSUNvbnRyaWJ1dGlvbk1hbmFnZXIgbWFuYWdlciwgQ29sbGVjdGlvbjw/IGV4dGVuZHMgSUFjdGlvbj4gYWN0aW9ucywgU3RyaW5nIGNvbnRyaWJ1dGlvbklEKSB7CisJCWlmIChhY3Rpb25zICE9IG51bGwpIHsKKwkJCWZvciAoSUFjdGlvbiBhY3Rpb24gOiBhY3Rpb25zKSB7CisJCQkJaWYgKGNvbnRyaWJ1dGlvbklEICE9IG51bGwpIHsKKwkJCQkJbWFuYWdlci5pbnNlcnRCZWZvcmUoY29udHJpYnV0aW9uSUQsIGFjdGlvbik7CisJCQkJfQorCQkJCWVsc2UgeworCQkJCQltYW5hZ2VyLmFkZChhY3Rpb24pOworCQkJCX0KKwkJCX0KKwkJfQorCX0KKwkJCisJLyoqCisJICogVGhpcyByZW1vdmVzIGZyb20gdGhlIHNwZWNpZmllZCA8Y29kZT5tYW5hZ2VyPC9jb2RlPiBhbGwge0BsaW5rIG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5BY3Rpb25Db250cmlidXRpb25JdGVtfXMKKwkgKiBiYXNlZCBvbiB0aGUge0BsaW5rIG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JQWN0aW9ufXMgY29udGFpbmVkIGluIHRoZSA8Y29kZT5hY3Rpb25zPC9jb2RlPiBjb2xsZWN0aW9uLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIGRlcG9wdWxhdGVNYW5hZ2VyKElDb250cmlidXRpb25NYW5hZ2VyIG1hbmFnZXIsIENvbGxlY3Rpb248PyBleHRlbmRzIElBY3Rpb24+IGFjdGlvbnMpIHsKKwkJaWYgKGFjdGlvbnMgIT0gbnVsbCkgeworCQkJSUNvbnRyaWJ1dGlvbkl0ZW1bXSBpdGVtcyA9IG1hbmFnZXIuZ2V0SXRlbXMoKTsKKwkJCWZvciAoaW50IGkgPSAwOyBpIDwgaXRlbXMubGVuZ3RoOyBpKyspIHsKKwkJCQkvLyBMb29rIGludG8gU3ViQ29udHJpYnV0aW9uSXRlbXMKKwkJCQkvLworCQkJCUlDb250cmlidXRpb25JdGVtIGNvbnRyaWJ1dGlvbkl0ZW0gPSBpdGVtc1tpXTsKKwkJCQl3aGlsZSAoY29udHJpYnV0aW9uSXRlbSBpbnN0YW5jZW9mIFN1YkNvbnRyaWJ1dGlvbkl0ZW0pIHsKKwkJCQkJY29udHJpYnV0aW9uSXRlbSA9ICgoU3ViQ29udHJpYnV0aW9uSXRlbSljb250cmlidXRpb25JdGVtKS5nZXRJbm5lckl0ZW0oKTsKKwkJCQl9CisKKwkJCQkvLyBEZWxldGUgdGhlIEFjdGlvbkNvbnRyaWJ1dGlvbkl0ZW1zIHdpdGggbWF0Y2hpbmcgYWN0aW9uLgorCQkJCS8vCisJCQkJaWYgKGNvbnRyaWJ1dGlvbkl0ZW0gaW5zdGFuY2VvZiBBY3Rpb25Db250cmlidXRpb25JdGVtKSB7CisJCQkJCUlBY3Rpb24gYWN0aW9uID0gKChBY3Rpb25Db250cmlidXRpb25JdGVtKWNvbnRyaWJ1dGlvbkl0ZW0pLmdldEFjdGlvbigpOworCQkJCQlpZiAoYWN0aW9ucy5jb250YWlucyhhY3Rpb24pKSB7CisJCQkJCQltYW5hZ2VyLnJlbW92ZShjb250cmlidXRpb25JdGVtKTsKKwkJCQkJfQorCQkJCX0KKwkJCX0KKwkJfQorCX0KKworCS8qKgorCSAqIFRoaXMgcG9wdWxhdGVzIHRoZSBwb3AtdXAgbWVudSBiZWZvcmUgaXQgYXBwZWFycy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBtZW51QWJvdXRUb1Nob3coSU1lbnVNYW5hZ2VyIG1lbnVNYW5hZ2VyKSB7CisJCXN1cGVyLm1lbnVBYm91dFRvU2hvdyhtZW51TWFuYWdlcik7CisJCU1lbnVNYW5hZ2VyIHN1Ym1lbnVNYW5hZ2VyID0gbnVsbDsKKworCQlzdWJtZW51TWFuYWdlciA9IG5ldyBNZW51TWFuYWdlcihGb3JjaW5nRWRpdG9yUGx1Z2luLklOU1RBTkNFLmdldFN0cmluZygiX1VJX0NyZWF0ZUNoaWxkX21lbnVfaXRlbSIpKTsgLy8kTk9OLU5MUy0xJAorCQlwb3B1bGF0ZU1hbmFnZXIoc3VibWVudU1hbmFnZXIsIGNyZWF0ZUNoaWxkQWN0aW9ucywgbnVsbCk7CisJCW1lbnVNYW5hZ2VyLmluc2VydEJlZm9yZSgiZWRpdCIsIHN1Ym1lbnVNYW5hZ2VyKTsgLy8kTk9OLU5MUy0xJAorCisJCXN1Ym1lbnVNYW5hZ2VyID0gbmV3IE1lbnVNYW5hZ2VyKEZvcmNpbmdFZGl0b3JQbHVnaW4uSU5TVEFOQ0UuZ2V0U3RyaW5nKCJfVUlfQ3JlYXRlU2libGluZ19tZW51X2l0ZW0iKSk7IC8vJE5PTi1OTFMtMSQKKwkJcG9wdWxhdGVNYW5hZ2VyKHN1Ym1lbnVNYW5hZ2VyLCBjcmVhdGVTaWJsaW5nQWN0aW9ucywgbnVsbCk7CisJCW1lbnVNYW5hZ2VyLmluc2VydEJlZm9yZSgiZWRpdCIsIHN1Ym1lbnVNYW5hZ2VyKTsgLy8kTk9OLU5MUy0xJAorCX0KKworCS8qKgorCSAqIFRoaXMgaW5zZXJ0cyBnbG9iYWwgYWN0aW9ucyBiZWZvcmUgdGhlICJhZGRpdGlvbnMtZW5kIiBzZXBhcmF0b3IuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgYWRkR2xvYmFsQWN0aW9ucyhJTWVudU1hbmFnZXIgbWVudU1hbmFnZXIpIHsKKwkJbWVudU1hbmFnZXIuaW5zZXJ0QWZ0ZXIoImFkZGl0aW9ucy1lbmQiLCBuZXcgU2VwYXJhdG9yKCJ1aS1hY3Rpb25zIikpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKKwkJbWVudU1hbmFnZXIuaW5zZXJ0QWZ0ZXIoInVpLWFjdGlvbnMiLCBzaG93UHJvcGVydGllc1ZpZXdBY3Rpb24pOyAvLyROT04tTkxTLTEkCisKKwkJcmVmcmVzaFZpZXdlckFjdGlvbi5zZXRFbmFibGVkKHJlZnJlc2hWaWV3ZXJBY3Rpb24uaXNFbmFibGVkKCkpOwkJCisJCW1lbnVNYW5hZ2VyLmluc2VydEFmdGVyKCJ1aS1hY3Rpb25zIiwgcmVmcmVzaFZpZXdlckFjdGlvbik7IC8vJE5PTi1OTFMtMSQKKworCQlzdXBlci5hZGRHbG9iYWxBY3Rpb25zKG1lbnVNYW5hZ2VyKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGVuc3VyZXMgdGhhdCBhIGRlbGV0ZSBhY3Rpb24gd2lsbCBjbGVhbiB1cCBhbGwgcmVmZXJlbmNlcyB0byBkZWxldGVkIG9iamVjdHMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIGJvb2xlYW4gcmVtb3ZlQWxsUmVmZXJlbmNlc09uRGVsZXRlKCkgeworCQlyZXR1cm4gdHJ1ZTsKKwl9CisKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy5mb3JjaW5nL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvZm9yY2luZy9wcmVzZW50YXRpb24vRm9yY2luZ0VkaXRvci5qYXZhIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMuZm9yY2luZy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL2ZvcmNpbmcvcHJlc2VudGF0aW9uL0ZvcmNpbmdFZGl0b3IuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NTA2ZDVjCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMuZm9yY2luZy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL2ZvcmNpbmcvcHJlc2VudGF0aW9uL0ZvcmNpbmdFZGl0b3IuamF2YQpAQCAtMCwwICsxLDE1MzMgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmZvcmNpbmcucHJlc2VudGF0aW9uOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA5IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCitpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtOworaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7CitpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247CitpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb25zOworaW1wb3J0IGphdmEudXRpbC5FdmVudE9iamVjdDsKK2ltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKK2ltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7CitpbXBvcnQgamF2YS51dGlsLkxpbmtlZEhhc2hNYXA7CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CitpbXBvcnQgamF2YS51dGlsLk1hcDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklGaWxlOworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklNYXJrZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVJlc291cmNlOworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklSZXNvdXJjZUNoYW5nZUV2ZW50OworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklSZXNvdXJjZUNoYW5nZUxpc3RlbmVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklSZXNvdXJjZURlbHRhOworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklSZXNvdXJjZURlbHRhVmlzaXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5SZXNvdXJjZXNQbHVnaW47CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkNvcmVFeGNlcHRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQYXRoOworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUHJvZ3Jlc3NNb25pdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5OdWxsUHJvZ3Jlc3NNb25pdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24uY29tbWFuZC5CYXNpY0NvbW1hbmRTdGFjazsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLmNvbW1hbmQuQ29tbWFuZDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLmNvbW1hbmQuQ29tbWFuZFN0YWNrOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24uY29tbWFuZC5Db21tYW5kU3RhY2tMaXN0ZW5lcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5BZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51aS5NYXJrZXJIZWxwZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51aS5lZGl0b3IuUHJvYmxlbUVkaXRvclBhcnQ7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51aS52aWV3ZXIuSVZpZXdlclByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5CYXNpY0RpYWdub3N0aWM7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLkRpYWdub3N0aWM7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlVSSTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRVZhbGlkYXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUucHJvdmlkZXIuRWNvcmVJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUucmVzb3VyY2UuUmVzb3VyY2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnJlc291cmNlLlJlc291cmNlU2V0OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS51dGlsLkVDb250ZW50QWRhcHRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUudXRpbC5FY29yZVV0aWw7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQuZG9tYWluLkFkYXB0ZXJGYWN0b3J5RWRpdGluZ0RvbWFpbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5kb21haW4uRWRpdGluZ0RvbWFpbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5kb21haW4uSUVkaXRpbmdEb21haW5Qcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5BZGFwdGVyRmFjdG9yeUl0ZW1EZWxlZ2F0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuQ29tcG9zZWRBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5SZWZsZWN0aXZlSXRlbVByb3ZpZGVyQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIucmVzb3VyY2UuUmVzb3VyY2VJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5hY3Rpb24uRWRpdGluZ0RvbWFpbkFjdGlvbkJhckNvbnRyaWJ1dG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmNlbGxlZGl0b3IuQWRhcHRlckZhY3RvcnlUcmVlRWRpdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmRuZC5FZGl0aW5nRG9tYWluVmlld2VyRHJvcEFkYXB0ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkuZG5kLkxvY2FsVHJhbnNmZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkuZG5kLlZpZXdlckRyYWdBZGFwdGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLnByb3ZpZGVyLkFkYXB0ZXJGYWN0b3J5Q29udGVudFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLnByb3ZpZGVyLkFkYXB0ZXJGYWN0b3J5TGFiZWxQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5wcm92aWRlci5VbndyYXBwaW5nU2VsZWN0aW9uUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkudXRpbC5FZGl0VUlNYXJrZXJIZWxwZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkudXRpbC5FZGl0VUlVdGlsOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLnZpZXcuRXh0ZW5kZWRQcm9wZXJ0eVNoZWV0UGFnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSU1lbnVMaXN0ZW5lcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSU1lbnVNYW5hZ2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JU3RhdHVzTGluZU1hbmFnZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklUb29sQmFyTWFuYWdlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uTWVudU1hbmFnZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLlNlcGFyYXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5kaWFsb2dzLk1lc3NhZ2VEaWFsb2c7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuZGlhbG9ncy5Qcm9ncmVzc01vbml0b3JEaWFsb2c7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb25Qcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTdHJ1Y3R1cmVkU2VsZWN0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuU2VsZWN0aW9uQ2hhbmdlZEV2ZW50OworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuU3RydWN0dXJlZFNlbGVjdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlN0cnVjdHVyZWRWaWV3ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5UcmVlVmlld2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuVmlld2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24ucHJvdmlkZXIuQ29tbW9uSXRlbVByb3ZpZGVyQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLnByb3ZpZGVyLkdyYXBoSXRlbVByb3ZpZGVyQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmxvZ2dlci5wcm92aWRlci5Mb2dnZXJJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwucHJvdmlkZXIuTW9kZWxJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIucHJvdmlkZXIuTW9kaWZpZXJJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2NlbmFyaW8ucHJvdmlkZXIuU2NlbmFyaW9JdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2VxdWVuY2VyLnByb3ZpZGVyLlNlcXVlbmNlckl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zb2x2ZXIucHJvdmlkZXIuU29sdmVySXRlbVByb3ZpZGVyQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMucHJvdmlkZXIuTGFiZWxzSXRlbVByb3ZpZGVyQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmZvcmNpbmcucHJvdmlkZXIuRm9yY2luZ0l0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5wcm92aWRlci5TdGFuZGFyZEl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy5mb3JjaW5nLnByZXNlbnRhdGlvbi5Gb3JjaW5nRWRpdG9yUGx1Z2luOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5TV1Q7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmN1c3RvbS5DVGFiRm9sZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5kbmQuRE5EOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5kbmQuVHJhbnNmZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5Db250cm9sQWRhcHRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLkNvbnRyb2xFdmVudDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZ3JhcGhpY3MuUG9pbnQ7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLk1lbnU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuVHJlZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5JQWN0aW9uQmFyczsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5JRWRpdG9ySW5wdXQ7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuSUVkaXRvclBhcnQ7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuSUVkaXRvclNpdGU7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuSVBhcnRMaXN0ZW5lcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5JV29ya2JlbmNoUGFydDsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5QYXJ0SW5pdEV4Y2VwdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5hY3Rpb25zLldvcmtzcGFjZU1vZGlmeU9wZXJhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5kaWFsb2dzLlNhdmVBc0RpYWxvZzsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5pZGUuSUdvdG9NYXJrZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkucGFydC5GaWxlRWRpdG9ySW5wdXQ7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkucGFydC5NdWx0aVBhZ2VFZGl0b3JQYXJ0OworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLnZpZXdzLmNvbnRlbnRvdXRsaW5lLkNvbnRlbnRPdXRsaW5lOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLnZpZXdzLmNvbnRlbnRvdXRsaW5lLkNvbnRlbnRPdXRsaW5lUGFnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS52aWV3cy5jb250ZW50b3V0bGluZS5JQ29udGVudE91dGxpbmVQYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLnZpZXdzLnByb3BlcnRpZXMuSVByb3BlcnR5U2hlZXRQYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLnZpZXdzLnByb3BlcnRpZXMuUHJvcGVydHlTaGVldDsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS52aWV3cy5wcm9wZXJ0aWVzLlByb3BlcnR5U2hlZXRQYWdlOworCisKKy8qKgorICogVGhpcyBpcyBhbiBleGFtcGxlIG9mIGEgRm9yY2luZyBtb2RlbCBlZGl0b3IuCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK0BTdXBwcmVzc1dhcm5pbmdzKCJhbGwiKSAKK3B1YmxpYyBjbGFzcyBGb3JjaW5nRWRpdG9yCisJZXh0ZW5kcyBNdWx0aVBhZ2VFZGl0b3JQYXJ0CisJaW1wbGVtZW50cyBJRWRpdGluZ0RvbWFpblByb3ZpZGVyLCBJU2VsZWN0aW9uUHJvdmlkZXIsIElNZW51TGlzdGVuZXIsIElWaWV3ZXJQcm92aWRlciwgSUdvdG9NYXJrZXIgeworCS8qKgorCSAqIFRoaXMga2VlcHMgdHJhY2sgb2YgdGhlIGVkaXRpbmcgZG9tYWluIHRoYXQgaXMgdXNlZCB0byB0cmFjayBhbGwgY2hhbmdlcyB0byB0aGUgbW9kZWwuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIEFkYXB0ZXJGYWN0b3J5RWRpdGluZ0RvbWFpbiBlZGl0aW5nRG9tYWluOworCisJLyoqCisJICogVGhpcyBpcyB0aGUgb25lIGFkYXB0ZXIgZmFjdG9yeSB1c2VkIGZvciBwcm92aWRpbmcgdmlld3Mgb2YgdGhlIG1vZGVsLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBDb21wb3NlZEFkYXB0ZXJGYWN0b3J5IGFkYXB0ZXJGYWN0b3J5OworCisJLyoqCisJICogVGhpcyBpcyB0aGUgY29udGVudCBvdXRsaW5lIHBhZ2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIElDb250ZW50T3V0bGluZVBhZ2UgY29udGVudE91dGxpbmVQYWdlOworCisJLyoqCisJICogVGhpcyBpcyBhIGtsdWRnZS4uLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBJU3RhdHVzTGluZU1hbmFnZXIgY29udGVudE91dGxpbmVTdGF0dXNMaW5lTWFuYWdlcjsKKworCS8qKgorCSAqIFRoaXMgaXMgdGhlIGNvbnRlbnQgb3V0bGluZSBwYWdlJ3Mgdmlld2VyLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBUcmVlVmlld2VyIGNvbnRlbnRPdXRsaW5lVmlld2VyOworCisJLyoqCisJICogVGhpcyBpcyB0aGUgcHJvcGVydHkgc2hlZXQgcGFnZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgUHJvcGVydHlTaGVldFBhZ2UgcHJvcGVydHlTaGVldFBhZ2U7CisKKwkvKioKKwkgKiBUaGlzIGlzIHRoZSB2aWV3ZXIgdGhhdCBzaGFkb3dzIHRoZSBzZWxlY3Rpb24gaW4gdGhlIGNvbnRlbnQgb3V0bGluZS4KKwkgKiBUaGUgcGFyZW50IHJlbGF0aW9uIG11c3QgYmUgY29ycmVjdGx5IGRlZmluZWQgZm9yIHRoaXMgdG8gd29yay4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgVHJlZVZpZXdlciBzZWxlY3Rpb25WaWV3ZXI7CisKKwkvKioKKwkgKiBUaGlzIGtlZXBzIHRyYWNrIG9mIHRoZSBhY3RpdmUgY29udGVudCB2aWV3ZXIsIHdoaWNoIG1heSBiZSBlaXRoZXIgb25lIG9mIHRoZSB2aWV3ZXJzIGluIHRoZSBwYWdlcyBvciB0aGUgY29udGVudCBvdXRsaW5lIHZpZXdlci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgVmlld2VyIGN1cnJlbnRWaWV3ZXI7CisKKwkvKioKKwkgKiBUaGlzIGxpc3RlbnMgdG8gd2hpY2ggZXZlciB2aWV3ZXIgaXMgYWN0aXZlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBJU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyIHNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcjsKKworCS8qKgorCSAqIFRoaXMga2VlcHMgdHJhY2sgb2YgYWxsIHRoZSB7QGxpbmsgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyfXMgdGhhdCBhcmUgbGlzdGVuaW5nIHRvIHRoaXMgZWRpdG9yLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBDb2xsZWN0aW9uPElTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXI+IHNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcnMgPSBuZXcgQXJyYXlMaXN0PElTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXI+KCk7CisKKwkvKioKKwkgKiBUaGlzIGtlZXBzIHRyYWNrIG9mIHRoZSBzZWxlY3Rpb24gb2YgdGhlIGVkaXRvciBhcyBhIHdob2xlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBJU2VsZWN0aW9uIGVkaXRvclNlbGVjdGlvbiA9IFN0cnVjdHVyZWRTZWxlY3Rpb24uRU1QVFk7CisKKwkvKioKKwkgKiBUaGUgTWFya2VySGVscGVyIGlzIHJlc3BvbnNpYmxlIGZvciBjcmVhdGluZyB3b3Jrc3BhY2UgcmVzb3VyY2UgbWFya2VycyBwcmVzZW50ZWQKKwkgKiBpbiBFY2xpcHNlJ3MgUHJvYmxlbXMgVmlldy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgTWFya2VySGVscGVyIG1hcmtlckhlbHBlciA9IG5ldyBFZGl0VUlNYXJrZXJIZWxwZXIoKTsKKworCS8qKgorCSAqIFRoaXMgbGlzdGVucyBmb3Igd2hlbiB0aGUgb3V0bGluZSBiZWNvbWVzIGFjdGl2ZQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBJUGFydExpc3RlbmVyIHBhcnRMaXN0ZW5lciA9CisJCW5ldyBJUGFydExpc3RlbmVyKCkgeworCQkJcHVibGljIHZvaWQgcGFydEFjdGl2YXRlZChJV29ya2JlbmNoUGFydCBwKSB7CisJCQkJaWYgKHAgaW5zdGFuY2VvZiBDb250ZW50T3V0bGluZSkgeworCQkJCQlpZiAoKChDb250ZW50T3V0bGluZSlwKS5nZXRDdXJyZW50UGFnZSgpID09IGNvbnRlbnRPdXRsaW5lUGFnZSkgeworCQkJCQkJZ2V0QWN0aW9uQmFyQ29udHJpYnV0b3IoKS5zZXRBY3RpdmVFZGl0b3IoRm9yY2luZ0VkaXRvci50aGlzKTsKKworCQkJCQkJc2V0Q3VycmVudFZpZXdlcihjb250ZW50T3V0bGluZVZpZXdlcik7CisJCQkJCX0KKwkJCQl9CisJCQkJZWxzZSBpZiAocCBpbnN0YW5jZW9mIFByb3BlcnR5U2hlZXQpIHsKKwkJCQkJaWYgKCgoUHJvcGVydHlTaGVldClwKS5nZXRDdXJyZW50UGFnZSgpID09IHByb3BlcnR5U2hlZXRQYWdlKSB7CisJCQkJCQlnZXRBY3Rpb25CYXJDb250cmlidXRvcigpLnNldEFjdGl2ZUVkaXRvcihGb3JjaW5nRWRpdG9yLnRoaXMpOworCQkJCQkJaGFuZGxlQWN0aXZhdGUoKTsKKwkJCQkJfQorCQkJCX0KKwkJCQllbHNlIGlmIChwID09IEZvcmNpbmdFZGl0b3IudGhpcykgeworCQkJCQloYW5kbGVBY3RpdmF0ZSgpOworCQkJCX0KKwkJCX0KKwkJCXB1YmxpYyB2b2lkIHBhcnRCcm91Z2h0VG9Ub3AoSVdvcmtiZW5jaFBhcnQgcCkgeworCQkJCS8vIElnbm9yZS4KKwkJCX0KKwkJCXB1YmxpYyB2b2lkIHBhcnRDbG9zZWQoSVdvcmtiZW5jaFBhcnQgcCkgeworCQkJCS8vIElnbm9yZS4KKwkJCX0KKwkJCXB1YmxpYyB2b2lkIHBhcnREZWFjdGl2YXRlZChJV29ya2JlbmNoUGFydCBwKSB7CisJCQkJLy8gSWdub3JlLgorCQkJfQorCQkJcHVibGljIHZvaWQgcGFydE9wZW5lZChJV29ya2JlbmNoUGFydCBwKSB7CisJCQkJLy8gSWdub3JlLgorCQkJfQorCQl9OworCisJLyoqCisJICogUmVzb3VyY2VzIHRoYXQgaGF2ZSBiZWVuIHJlbW92ZWQgc2luY2UgbGFzdCBhY3RpdmF0aW9uLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBDb2xsZWN0aW9uPFJlc291cmNlPiByZW1vdmVkUmVzb3VyY2VzID0gbmV3IEFycmF5TGlzdDxSZXNvdXJjZT4oKTsKKworCS8qKgorCSAqIFJlc291cmNlcyB0aGF0IGhhdmUgYmVlbiBjaGFuZ2VkIHNpbmNlIGxhc3QgYWN0aXZhdGlvbi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgQ29sbGVjdGlvbjxSZXNvdXJjZT4gY2hhbmdlZFJlc291cmNlcyA9IG5ldyBBcnJheUxpc3Q8UmVzb3VyY2U+KCk7CisKKwkvKioKKwkgKiBSZXNvdXJjZXMgdGhhdCBoYXZlIGJlZW4gc2F2ZWQuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIENvbGxlY3Rpb248UmVzb3VyY2U+IHNhdmVkUmVzb3VyY2VzID0gbmV3IEFycmF5TGlzdDxSZXNvdXJjZT4oKTsKKworCS8qKgorCSAqIE1hcCB0byBzdG9yZSB0aGUgZGlhZ25vc3RpYyBhc3NvY2lhdGVkIHdpdGggYSByZXNvdXJjZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgTWFwPFJlc291cmNlLCBEaWFnbm9zdGljPiByZXNvdXJjZVRvRGlhZ25vc3RpY01hcCA9IG5ldyBMaW5rZWRIYXNoTWFwPFJlc291cmNlLCBEaWFnbm9zdGljPigpOworCisJLyoqCisJICogQ29udHJvbHMgd2hldGhlciB0aGUgcHJvYmxlbSBpbmRpY2F0aW9uIHNob3VsZCBiZSB1cGRhdGVkLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBib29sZWFuIHVwZGF0ZVByb2JsZW1JbmRpY2F0aW9uID0gdHJ1ZTsKKworCS8qKgorCSAqIEFkYXB0ZXIgdXNlZCB0byB1cGRhdGUgdGhlIHByb2JsZW0gaW5kaWNhdGlvbiB3aGVuIHJlc291cmNlcyBhcmUgZGVtYW5kZWQgbG9hZGVkLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBFQ29udGVudEFkYXB0ZXIgcHJvYmxlbUluZGljYXRpb25BZGFwdGVyID0gCisJCW5ldyBFQ29udGVudEFkYXB0ZXIoKSB7CisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyB2b2lkIG5vdGlmeUNoYW5nZWQoTm90aWZpY2F0aW9uIG5vdGlmaWNhdGlvbikgeworCQkJCWlmIChub3RpZmljYXRpb24uZ2V0Tm90aWZpZXIoKSBpbnN0YW5jZW9mIFJlc291cmNlKSB7CisJCQkJCXN3aXRjaCAobm90aWZpY2F0aW9uLmdldEZlYXR1cmVJRChSZXNvdXJjZS5jbGFzcykpIHsKKwkJCQkJCWNhc2UgUmVzb3VyY2UuUkVTT1VSQ0VfX0lTX0xPQURFRDoKKwkJCQkJCWNhc2UgUmVzb3VyY2UuUkVTT1VSQ0VfX0VSUk9SUzoKKwkJCQkJCWNhc2UgUmVzb3VyY2UuUkVTT1VSQ0VfX1dBUk5JTkdTOiB7CisJCQkJCQkJUmVzb3VyY2UgcmVzb3VyY2UgPSAoUmVzb3VyY2Upbm90aWZpY2F0aW9uLmdldE5vdGlmaWVyKCk7CisJCQkJCQkJRGlhZ25vc3RpYyBkaWFnbm9zdGljID0gYW5hbHl6ZVJlc291cmNlUHJvYmxlbXMocmVzb3VyY2UsIG51bGwpOworCQkJCQkJCWlmIChkaWFnbm9zdGljLmdldFNldmVyaXR5KCkgIT0gRGlhZ25vc3RpYy5PSykgeworCQkJCQkJCQlyZXNvdXJjZVRvRGlhZ25vc3RpY01hcC5wdXQocmVzb3VyY2UsIGRpYWdub3N0aWMpOworCQkJCQkJCX0KKwkJCQkJCQllbHNlIHsKKwkJCQkJCQkJcmVzb3VyY2VUb0RpYWdub3N0aWNNYXAucmVtb3ZlKHJlc291cmNlKTsKKwkJCQkJCQl9CisKKwkJCQkJCQlpZiAodXBkYXRlUHJvYmxlbUluZGljYXRpb24pIHsKKwkJCQkJCQkJZ2V0U2l0ZSgpLmdldFNoZWxsKCkuZ2V0RGlzcGxheSgpLmFzeW5jRXhlYworCQkJCQkJCQkJKG5ldyBSdW5uYWJsZSgpIHsKKwkJCQkJCQkJCQkgcHVibGljIHZvaWQgcnVuKCkgeworCQkJCQkJCQkJCQkgdXBkYXRlUHJvYmxlbUluZGljYXRpb24oKTsKKwkJCQkJCQkJCQkgfQorCQkJCQkJCQkJIH0pOworCQkJCQkJCX0KKwkJCQkJCQlicmVhazsKKwkJCQkJCX0KKwkJCQkJfQorCQkJCX0KKwkJCQllbHNlIHsKKwkJCQkJc3VwZXIubm90aWZ5Q2hhbmdlZChub3RpZmljYXRpb24pOworCQkJCX0KKwkJCX0KKworCQkJQE92ZXJyaWRlCisJCQlwcm90ZWN0ZWQgdm9pZCBzZXRUYXJnZXQoUmVzb3VyY2UgdGFyZ2V0KSB7CisJCQkJYmFzaWNTZXRUYXJnZXQodGFyZ2V0KTsKKwkJCX0KKworCQkJQE92ZXJyaWRlCisJCQlwcm90ZWN0ZWQgdm9pZCB1bnNldFRhcmdldChSZXNvdXJjZSB0YXJnZXQpIHsKKwkJCQliYXNpY1Vuc2V0VGFyZ2V0KHRhcmdldCk7CisJCQl9CisJCX07CisKKwkvKioKKwkgKiBUaGlzIGxpc3RlbnMgZm9yIHdvcmtzcGFjZSBjaGFuZ2VzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBJUmVzb3VyY2VDaGFuZ2VMaXN0ZW5lciByZXNvdXJjZUNoYW5nZUxpc3RlbmVyID0KKwkJbmV3IElSZXNvdXJjZUNoYW5nZUxpc3RlbmVyKCkgeworCQkJcHVibGljIHZvaWQgcmVzb3VyY2VDaGFuZ2VkKElSZXNvdXJjZUNoYW5nZUV2ZW50IGV2ZW50KSB7CisJCQkJSVJlc291cmNlRGVsdGEgZGVsdGEgPSBldmVudC5nZXREZWx0YSgpOworCQkJCXRyeSB7CisJCQkJCWNsYXNzIFJlc291cmNlRGVsdGFWaXNpdG9yIGltcGxlbWVudHMgSVJlc291cmNlRGVsdGFWaXNpdG9yIHsKKwkJCQkJCXByb3RlY3RlZCBSZXNvdXJjZVNldCByZXNvdXJjZVNldCA9IGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKTsKKwkJCQkJCXByb3RlY3RlZCBDb2xsZWN0aW9uPFJlc291cmNlPiBjaGFuZ2VkUmVzb3VyY2VzID0gbmV3IEFycmF5TGlzdDxSZXNvdXJjZT4oKTsKKwkJCQkJCXByb3RlY3RlZCBDb2xsZWN0aW9uPFJlc291cmNlPiByZW1vdmVkUmVzb3VyY2VzID0gbmV3IEFycmF5TGlzdDxSZXNvdXJjZT4oKTsKKworCQkJCQkJcHVibGljIGJvb2xlYW4gdmlzaXQoSVJlc291cmNlRGVsdGEgZGVsdGEpIHsKKwkJCQkJCQlpZiAoZGVsdGEuZ2V0UmVzb3VyY2UoKS5nZXRUeXBlKCkgPT0gSVJlc291cmNlLkZJTEUpIHsKKwkJCQkJCQkJaWYgKGRlbHRhLmdldEtpbmQoKSA9PSBJUmVzb3VyY2VEZWx0YS5SRU1PVkVEIHx8CisJCQkJCQkJCSAgICBkZWx0YS5nZXRLaW5kKCkgPT0gSVJlc291cmNlRGVsdGEuQ0hBTkdFRCAmJiBkZWx0YS5nZXRGbGFncygpICE9IElSZXNvdXJjZURlbHRhLk1BUktFUlMpIHsKKwkJCQkJCQkJCVJlc291cmNlIHJlc291cmNlID0gcmVzb3VyY2VTZXQuZ2V0UmVzb3VyY2UoVVJJLmNyZWF0ZVBsYXRmb3JtUmVzb3VyY2VVUkkoZGVsdGEuZ2V0RnVsbFBhdGgoKS50b1N0cmluZygpLCB0cnVlKSwgZmFsc2UpOworCQkJCQkJCQkJaWYgKHJlc291cmNlICE9IG51bGwpIHsKKwkJCQkJCQkJCQlpZiAoZGVsdGEuZ2V0S2luZCgpID09IElSZXNvdXJjZURlbHRhLlJFTU9WRUQpIHsKKwkJCQkJCQkJCQkJcmVtb3ZlZFJlc291cmNlcy5hZGQocmVzb3VyY2UpOworCQkJCQkJCQkJCX0KKwkJCQkJCQkJCQllbHNlIGlmICghc2F2ZWRSZXNvdXJjZXMucmVtb3ZlKHJlc291cmNlKSkgeworCQkJCQkJCQkJCQljaGFuZ2VkUmVzb3VyY2VzLmFkZChyZXNvdXJjZSk7CisJCQkJCQkJCQkJfQorCQkJCQkJCQkJfQorCQkJCQkJCQl9CisJCQkJCQkJfQorCisJCQkJCQkJcmV0dXJuIHRydWU7CisJCQkJCQl9CisKKwkJCQkJCXB1YmxpYyBDb2xsZWN0aW9uPFJlc291cmNlPiBnZXRDaGFuZ2VkUmVzb3VyY2VzKCkgeworCQkJCQkJCXJldHVybiBjaGFuZ2VkUmVzb3VyY2VzOworCQkJCQkJfQorCisJCQkJCQlwdWJsaWMgQ29sbGVjdGlvbjxSZXNvdXJjZT4gZ2V0UmVtb3ZlZFJlc291cmNlcygpIHsKKwkJCQkJCQlyZXR1cm4gcmVtb3ZlZFJlc291cmNlczsKKwkJCQkJCX0KKwkJCQkJfQorCisJCQkJCWZpbmFsIFJlc291cmNlRGVsdGFWaXNpdG9yIHZpc2l0b3IgPSBuZXcgUmVzb3VyY2VEZWx0YVZpc2l0b3IoKTsKKwkJCQkJZGVsdGEuYWNjZXB0KHZpc2l0b3IpOworCisJCQkJCWlmICghdmlzaXRvci5nZXRSZW1vdmVkUmVzb3VyY2VzKCkuaXNFbXB0eSgpKSB7CisJCQkJCQlnZXRTaXRlKCkuZ2V0U2hlbGwoKS5nZXREaXNwbGF5KCkuYXN5bmNFeGVjCisJCQkJCQkJKG5ldyBSdW5uYWJsZSgpIHsKKwkJCQkJCQkJIHB1YmxpYyB2b2lkIHJ1bigpIHsKKwkJCQkJCQkJCSByZW1vdmVkUmVzb3VyY2VzLmFkZEFsbCh2aXNpdG9yLmdldFJlbW92ZWRSZXNvdXJjZXMoKSk7CisJCQkJCQkJCQkgaWYgKCFpc0RpcnR5KCkpIHsKKwkJCQkJCQkJCQkgZ2V0U2l0ZSgpLmdldFBhZ2UoKS5jbG9zZUVkaXRvcihGb3JjaW5nRWRpdG9yLnRoaXMsIGZhbHNlKTsKKwkJCQkJCQkJCSB9CisJCQkJCQkJCSB9CisJCQkJCQkJIH0pOworCQkJCQl9CisKKwkJCQkJaWYgKCF2aXNpdG9yLmdldENoYW5nZWRSZXNvdXJjZXMoKS5pc0VtcHR5KCkpIHsKKwkJCQkJCWdldFNpdGUoKS5nZXRTaGVsbCgpLmdldERpc3BsYXkoKS5hc3luY0V4ZWMKKwkJCQkJCQkobmV3IFJ1bm5hYmxlKCkgeworCQkJCQkJCQkgcHVibGljIHZvaWQgcnVuKCkgeworCQkJCQkJCQkJIGNoYW5nZWRSZXNvdXJjZXMuYWRkQWxsKHZpc2l0b3IuZ2V0Q2hhbmdlZFJlc291cmNlcygpKTsKKwkJCQkJCQkJCSBpZiAoZ2V0U2l0ZSgpLmdldFBhZ2UoKS5nZXRBY3RpdmVFZGl0b3IoKSA9PSBGb3JjaW5nRWRpdG9yLnRoaXMpIHsKKwkJCQkJCQkJCQkgaGFuZGxlQWN0aXZhdGUoKTsKKwkJCQkJCQkJCSB9CisJCQkJCQkJCSB9CisJCQkJCQkJIH0pOworCQkJCQl9CisJCQkJfQorCQkJCWNhdGNoIChDb3JlRXhjZXB0aW9uIGV4Y2VwdGlvbikgeworCQkJCQlGb3JjaW5nRWRpdG9yUGx1Z2luLklOU1RBTkNFLmxvZyhleGNlcHRpb24pOworCQkJCX0KKwkJCX0KKwkJfTsKKworCS8qKgorCSAqIEhhbmRsZXMgYWN0aXZhdGlvbiBvZiB0aGUgZWRpdG9yIG9yIGl0J3MgYXNzb2NpYXRlZCB2aWV3cy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBoYW5kbGVBY3RpdmF0ZSgpIHsKKwkJLy8gUmVjb21wdXRlIHRoZSByZWFkIG9ubHkgc3RhdGUuCisJCS8vCisJCWlmIChlZGl0aW5nRG9tYWluLmdldFJlc291cmNlVG9SZWFkT25seU1hcCgpICE9IG51bGwpIHsKKwkJICBlZGl0aW5nRG9tYWluLmdldFJlc291cmNlVG9SZWFkT25seU1hcCgpLmNsZWFyKCk7CisKKwkJICAvLyBSZWZyZXNoIGFueSBhY3Rpb25zIHRoYXQgbWF5IGJlY29tZSBlbmFibGVkIG9yIGRpc2FibGVkLgorCQkgIC8vCisJCSAgc2V0U2VsZWN0aW9uKGdldFNlbGVjdGlvbigpKTsKKwkJfQorCisJCWlmICghcmVtb3ZlZFJlc291cmNlcy5pc0VtcHR5KCkpIHsKKwkJCWlmIChoYW5kbGVEaXJ0eUNvbmZsaWN0KCkpIHsKKwkJCQlnZXRTaXRlKCkuZ2V0UGFnZSgpLmNsb3NlRWRpdG9yKEZvcmNpbmdFZGl0b3IudGhpcywgZmFsc2UpOworCQkJfQorCQkJZWxzZSB7CisJCQkJcmVtb3ZlZFJlc291cmNlcy5jbGVhcigpOworCQkJCWNoYW5nZWRSZXNvdXJjZXMuY2xlYXIoKTsKKwkJCQlzYXZlZFJlc291cmNlcy5jbGVhcigpOworCQkJfQorCQl9CisJCWVsc2UgaWYgKCFjaGFuZ2VkUmVzb3VyY2VzLmlzRW1wdHkoKSkgeworCQkJY2hhbmdlZFJlc291cmNlcy5yZW1vdmVBbGwoc2F2ZWRSZXNvdXJjZXMpOworCQkJaGFuZGxlQ2hhbmdlZFJlc291cmNlcygpOworCQkJY2hhbmdlZFJlc291cmNlcy5jbGVhcigpOworCQkJc2F2ZWRSZXNvdXJjZXMuY2xlYXIoKTsKKwkJfQorCX0KKworCS8qKgorCSAqIEhhbmRsZXMgd2hhdCB0byBkbyB3aXRoIGNoYW5nZWQgcmVzb3VyY2VzIG9uIGFjdGl2YXRpb24uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgaGFuZGxlQ2hhbmdlZFJlc291cmNlcygpIHsKKwkJaWYgKCFjaGFuZ2VkUmVzb3VyY2VzLmlzRW1wdHkoKSAmJiAoIWlzRGlydHkoKSB8fCBoYW5kbGVEaXJ0eUNvbmZsaWN0KCkpKSB7CisJCQlpZiAoaXNEaXJ0eSgpKSB7CisJCQkJY2hhbmdlZFJlc291cmNlcy5hZGRBbGwoZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpLmdldFJlc291cmNlcygpKTsKKwkJCX0KKwkJCWVkaXRpbmdEb21haW4uZ2V0Q29tbWFuZFN0YWNrKCkuZmx1c2goKTsKKworCQkJdXBkYXRlUHJvYmxlbUluZGljYXRpb24gPSBmYWxzZTsKKwkJCWZvciAoUmVzb3VyY2UgcmVzb3VyY2UgOiBjaGFuZ2VkUmVzb3VyY2VzKSB7CisJCQkJaWYgKHJlc291cmNlLmlzTG9hZGVkKCkpIHsKKwkJCQkJcmVzb3VyY2UudW5sb2FkKCk7CisJCQkJCXRyeSB7CisJCQkJCQlyZXNvdXJjZS5sb2FkKENvbGxlY3Rpb25zLkVNUFRZX01BUCk7CisJCQkJCX0KKwkJCQkJY2F0Y2ggKElPRXhjZXB0aW9uIGV4Y2VwdGlvbikgeworCQkJCQkJaWYgKCFyZXNvdXJjZVRvRGlhZ25vc3RpY01hcC5jb250YWluc0tleShyZXNvdXJjZSkpIHsKKwkJCQkJCQlyZXNvdXJjZVRvRGlhZ25vc3RpY01hcC5wdXQocmVzb3VyY2UsIGFuYWx5emVSZXNvdXJjZVByb2JsZW1zKHJlc291cmNlLCBleGNlcHRpb24pKTsKKwkJCQkJCX0KKwkJCQkJfQorCQkJCX0KKwkJCX0KKworCQkJaWYgKEFkYXB0ZXJGYWN0b3J5RWRpdGluZ0RvbWFpbi5pc1N0YWxlKGVkaXRvclNlbGVjdGlvbikpIHsKKwkJCQlzZXRTZWxlY3Rpb24oU3RydWN0dXJlZFNlbGVjdGlvbi5FTVBUWSk7CisJCQl9CisKKwkJCXVwZGF0ZVByb2JsZW1JbmRpY2F0aW9uID0gdHJ1ZTsKKwkJCXVwZGF0ZVByb2JsZW1JbmRpY2F0aW9uKCk7CisJCX0KKwl9CisgIAorCS8qKgorCSAqIFVwZGF0ZXMgdGhlIHByb2JsZW1zIGluZGljYXRpb24gd2l0aCB0aGUgaW5mb3JtYXRpb24gZGVzY3JpYmVkIGluIHRoZSBzcGVjaWZpZWQgZGlhZ25vc3RpYy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCB1cGRhdGVQcm9ibGVtSW5kaWNhdGlvbigpIHsKKwkJaWYgKHVwZGF0ZVByb2JsZW1JbmRpY2F0aW9uKSB7CisJCQlCYXNpY0RpYWdub3N0aWMgZGlhZ25vc3RpYyA9CisJCQkJbmV3IEJhc2ljRGlhZ25vc3RpYworCQkJCQkoRGlhZ25vc3RpYy5PSywKKwkJCQkJICJvcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMuZm9yY2luZy5lZGl0b3IiLCAvLyROT04tTkxTLTEkCisJCQkJCSAwLAorCQkJCQkgbnVsbCwKKwkJCQkJIG5ldyBPYmplY3QgW10geyBlZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkgfSk7CisJCQlmb3IgKERpYWdub3N0aWMgY2hpbGREaWFnbm9zdGljIDogcmVzb3VyY2VUb0RpYWdub3N0aWNNYXAudmFsdWVzKCkpIHsKKwkJCQlpZiAoY2hpbGREaWFnbm9zdGljLmdldFNldmVyaXR5KCkgIT0gRGlhZ25vc3RpYy5PSykgeworCQkJCQlkaWFnbm9zdGljLmFkZChjaGlsZERpYWdub3N0aWMpOworCQkJCX0KKwkJCX0KKworCQkJaW50IGxhc3RFZGl0b3JQYWdlID0gZ2V0UGFnZUNvdW50KCkgLSAxOworCQkJaWYgKGxhc3RFZGl0b3JQYWdlID49IDAgJiYgZ2V0RWRpdG9yKGxhc3RFZGl0b3JQYWdlKSBpbnN0YW5jZW9mIFByb2JsZW1FZGl0b3JQYXJ0KSB7CisJCQkJKChQcm9ibGVtRWRpdG9yUGFydClnZXRFZGl0b3IobGFzdEVkaXRvclBhZ2UpKS5zZXREaWFnbm9zdGljKGRpYWdub3N0aWMpOworCQkJCWlmIChkaWFnbm9zdGljLmdldFNldmVyaXR5KCkgIT0gRGlhZ25vc3RpYy5PSykgeworCQkJCQlzZXRBY3RpdmVQYWdlKGxhc3RFZGl0b3JQYWdlKTsKKwkJCQl9CisJCQl9CisJCQllbHNlIGlmIChkaWFnbm9zdGljLmdldFNldmVyaXR5KCkgIT0gRGlhZ25vc3RpYy5PSykgeworCQkJCVByb2JsZW1FZGl0b3JQYXJ0IHByb2JsZW1FZGl0b3JQYXJ0ID0gbmV3IFByb2JsZW1FZGl0b3JQYXJ0KCk7CisJCQkJcHJvYmxlbUVkaXRvclBhcnQuc2V0RGlhZ25vc3RpYyhkaWFnbm9zdGljKTsKKwkJCQlwcm9ibGVtRWRpdG9yUGFydC5zZXRNYXJrZXJIZWxwZXIobWFya2VySGVscGVyKTsKKwkJCQl0cnkgeworCQkJCQlhZGRQYWdlKCsrbGFzdEVkaXRvclBhZ2UsIHByb2JsZW1FZGl0b3JQYXJ0LCBnZXRFZGl0b3JJbnB1dCgpKTsKKwkJCQkJc2V0UGFnZVRleHQobGFzdEVkaXRvclBhZ2UsIHByb2JsZW1FZGl0b3JQYXJ0LmdldFBhcnROYW1lKCkpOworCQkJCQlzZXRBY3RpdmVQYWdlKGxhc3RFZGl0b3JQYWdlKTsKKwkJCQkJc2hvd1RhYnMoKTsKKwkJCQl9CisJCQkJY2F0Y2ggKFBhcnRJbml0RXhjZXB0aW9uIGV4Y2VwdGlvbikgeworCQkJCQlGb3JjaW5nRWRpdG9yUGx1Z2luLklOU1RBTkNFLmxvZyhleGNlcHRpb24pOworCQkJCX0KKwkJCX0KKworCQkJaWYgKG1hcmtlckhlbHBlci5oYXNNYXJrZXJzKGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKSkpIHsKKwkJCQltYXJrZXJIZWxwZXIuZGVsZXRlTWFya2VycyhlZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkpOworCQkJCWlmIChkaWFnbm9zdGljLmdldFNldmVyaXR5KCkgIT0gRGlhZ25vc3RpYy5PSykgeworCQkJCQl0cnkgeworCQkJCQkJbWFya2VySGVscGVyLmNyZWF0ZU1hcmtlcnMoZGlhZ25vc3RpYyk7CisJCQkJCX0KKwkJCQkJY2F0Y2ggKENvcmVFeGNlcHRpb24gZXhjZXB0aW9uKSB7CisJCQkJCQlGb3JjaW5nRWRpdG9yUGx1Z2luLklOU1RBTkNFLmxvZyhleGNlcHRpb24pOworCQkJCQl9CisJCQkJfQorCQkJfQorCQl9CisJfQorCisJLyoqCisJICogU2hvd3MgYSBkaWFsb2cgdGhhdCBhc2tzIGlmIGNvbmZsaWN0aW5nIGNoYW5nZXMgc2hvdWxkIGJlIGRpc2NhcmRlZC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgYm9vbGVhbiBoYW5kbGVEaXJ0eUNvbmZsaWN0KCkgeworCQlyZXR1cm4KKwkJCU1lc3NhZ2VEaWFsb2cub3BlblF1ZXN0aW9uCisJCQkJKGdldFNpdGUoKS5nZXRTaGVsbCgpLAorCQkJCSBnZXRTdHJpbmcoIl9VSV9GaWxlQ29uZmxpY3RfbGFiZWwiKSwgLy8kTk9OLU5MUy0xJAorCQkJCSBnZXRTdHJpbmcoIl9XQVJOX0ZpbGVDb25mbGljdCIpKTsgLy8kTk9OLU5MUy0xJAorCX0KKworCS8qKgorCSAqIFRoaXMgY3JlYXRlcyBhIG1vZGVsIGVkaXRvci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRm9yY2luZ0VkaXRvcigpIHsKKwkJc3VwZXIoKTsKKwkJaW5pdGlhbGl6ZUVkaXRpbmdEb21haW4oKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHNldHMgdXAgdGhlIGVkaXRpbmcgZG9tYWluIGZvciB0aGUgbW9kZWwgZWRpdG9yLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIGluaXRpYWxpemVFZGl0aW5nRG9tYWluKCkgeworCQkvLyBDcmVhdGUgYW4gYWRhcHRlciBmYWN0b3J5IHRoYXQgeWllbGRzIGl0ZW0gcHJvdmlkZXJzLgorCQkvLworCQlhZGFwdGVyRmFjdG9yeSA9IG5ldyBDb21wb3NlZEFkYXB0ZXJGYWN0b3J5KENvbXBvc2VkQWRhcHRlckZhY3RvcnkuRGVzY3JpcHRvci5SZWdpc3RyeS5JTlNUQU5DRSk7CisKKwkJYWRhcHRlckZhY3RvcnkuYWRkQWRhcHRlckZhY3RvcnkobmV3IFJlc291cmNlSXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkoKSk7CisJCWFkYXB0ZXJGYWN0b3J5LmFkZEFkYXB0ZXJGYWN0b3J5KG5ldyBGb3JjaW5nSXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkoKSk7CisJCWFkYXB0ZXJGYWN0b3J5LmFkZEFkYXB0ZXJGYWN0b3J5KG5ldyBTdGFuZGFyZEl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5KCkpOworCQlhZGFwdGVyRmFjdG9yeS5hZGRBZGFwdGVyRmFjdG9yeShuZXcgQ29tbW9uSXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkoKSk7CisJCWFkYXB0ZXJGYWN0b3J5LmFkZEFkYXB0ZXJGYWN0b3J5KG5ldyBNb2RlbEl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5KCkpOworCQlhZGFwdGVyRmFjdG9yeS5hZGRBZGFwdGVyRmFjdG9yeShuZXcgR3JhcGhJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSgpKTsKKwkJYWRhcHRlckZhY3RvcnkuYWRkQWRhcHRlckZhY3RvcnkobmV3IE1vZGlmaWVySXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkoKSk7CisJCWFkYXB0ZXJGYWN0b3J5LmFkZEFkYXB0ZXJGYWN0b3J5KG5ldyBFY29yZUl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5KCkpOworCQlhZGFwdGVyRmFjdG9yeS5hZGRBZGFwdGVyRmFjdG9yeShuZXcgU2NlbmFyaW9JdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSgpKTsKKwkJYWRhcHRlckZhY3RvcnkuYWRkQWRhcHRlckZhY3RvcnkobmV3IFNlcXVlbmNlckl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5KCkpOworCQlhZGFwdGVyRmFjdG9yeS5hZGRBZGFwdGVyRmFjdG9yeShuZXcgTGFiZWxzSXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkoKSk7CisJCWFkYXB0ZXJGYWN0b3J5LmFkZEFkYXB0ZXJGYWN0b3J5KG5ldyBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQucHJvdmlkZXIuU3RhbmRhcmRJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSgpKTsKKwkJYWRhcHRlckZhY3RvcnkuYWRkQWRhcHRlckZhY3RvcnkobmV3IFNvbHZlckl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5KCkpOworCQlhZGFwdGVyRmFjdG9yeS5hZGRBZGFwdGVyRmFjdG9yeShuZXcgTG9nZ2VySXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkoKSk7CisJCWFkYXB0ZXJGYWN0b3J5LmFkZEFkYXB0ZXJGYWN0b3J5KG5ldyBSZWZsZWN0aXZlSXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkoKSk7CisKKwkJLy8gQ3JlYXRlIHRoZSBjb21tYW5kIHN0YWNrIHRoYXQgd2lsbCBub3RpZnkgdGhpcyBlZGl0b3IgYXMgY29tbWFuZHMgYXJlIGV4ZWN1dGVkLgorCQkvLworCQlCYXNpY0NvbW1hbmRTdGFjayBjb21tYW5kU3RhY2sgPSBuZXcgQmFzaWNDb21tYW5kU3RhY2soKTsKKworCQkvLyBBZGQgYSBsaXN0ZW5lciB0byBzZXQgdGhlIG1vc3QgcmVjZW50IGNvbW1hbmQncyBhZmZlY3RlZCBvYmplY3RzIHRvIGJlIHRoZSBzZWxlY3Rpb24gb2YgdGhlIHZpZXdlciB3aXRoIGZvY3VzLgorCQkvLworCQljb21tYW5kU3RhY2suYWRkQ29tbWFuZFN0YWNrTGlzdGVuZXIKKwkJCShuZXcgQ29tbWFuZFN0YWNrTGlzdGVuZXIoKSB7CisJCQkJIHB1YmxpYyB2b2lkIGNvbW1hbmRTdGFja0NoYW5nZWQoZmluYWwgRXZlbnRPYmplY3QgZXZlbnQpIHsKKwkJCQkJIGdldENvbnRhaW5lcigpLmdldERpc3BsYXkoKS5hc3luY0V4ZWMKKwkJCQkJCSAobmV3IFJ1bm5hYmxlKCkgeworCQkJCQkJCSAgcHVibGljIHZvaWQgcnVuKCkgeworCQkJCQkJCQkgIGZpcmVQcm9wZXJ0eUNoYW5nZShJRWRpdG9yUGFydC5QUk9QX0RJUlRZKTsKKworCQkJCQkJCQkgIC8vIFRyeSB0byBzZWxlY3QgdGhlIGFmZmVjdGVkIG9iamVjdHMuCisJCQkJCQkJCSAgLy8KKwkJCQkJCQkJICBDb21tYW5kIG1vc3RSZWNlbnRDb21tYW5kID0gKChDb21tYW5kU3RhY2spZXZlbnQuZ2V0U291cmNlKCkpLmdldE1vc3RSZWNlbnRDb21tYW5kKCk7CisJCQkJCQkJCSAgaWYgKG1vc3RSZWNlbnRDb21tYW5kICE9IG51bGwpIHsKKwkJCQkJCQkJCSAgc2V0U2VsZWN0aW9uVG9WaWV3ZXIobW9zdFJlY2VudENvbW1hbmQuZ2V0QWZmZWN0ZWRPYmplY3RzKCkpOworCQkJCQkJCQkgIH0KKwkJCQkJCQkJICBpZiAocHJvcGVydHlTaGVldFBhZ2UgIT0gbnVsbCAmJiAhcHJvcGVydHlTaGVldFBhZ2UuZ2V0Q29udHJvbCgpLmlzRGlzcG9zZWQoKSkgeworCQkJCQkJCQkJICBwcm9wZXJ0eVNoZWV0UGFnZS5yZWZyZXNoKCk7CisJCQkJCQkJCSAgfQorCQkJCQkJCSAgfQorCQkJCQkJICB9KTsKKwkJCQkgfQorCQkJIH0pOworCisJCS8vIENyZWF0ZSB0aGUgZWRpdGluZyBkb21haW4gd2l0aCBhIHNwZWNpYWwgY29tbWFuZCBzdGFjay4KKwkJLy8KKwkJZWRpdGluZ0RvbWFpbiA9IG5ldyBBZGFwdGVyRmFjdG9yeUVkaXRpbmdEb21haW4oYWRhcHRlckZhY3RvcnksIGNvbW1hbmRTdGFjaywgbmV3IEhhc2hNYXA8UmVzb3VyY2UsIEJvb2xlYW4+KCkpOworCX0KKworCS8qKgorCSAqIFRoaXMgaXMgaGVyZSBmb3IgdGhlIGxpc3RlbmVyIHRvIGJlIGFibGUgdG8gY2FsbCBpdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwkJCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIGZpcmVQcm9wZXJ0eUNoYW5nZShpbnQgYWN0aW9uKSB7CisJCXN1cGVyLmZpcmVQcm9wZXJ0eUNoYW5nZShhY3Rpb24pOworCX0KKworCS8qKgorCSAqIFRoaXMgc2V0cyB0aGUgc2VsZWN0aW9uIGludG8gd2hpY2hldmVyIHZpZXdlciBpcyBhY3RpdmUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgc2V0U2VsZWN0aW9uVG9WaWV3ZXIoQ29sbGVjdGlvbjw/PiBjb2xsZWN0aW9uKSB7CisJCWZpbmFsIENvbGxlY3Rpb248Pz4gdGhlU2VsZWN0aW9uID0gY29sbGVjdGlvbjsKKwkJLy8gTWFrZSBzdXJlIGl0J3Mgb2theS4KKwkJLy8KKwkJaWYgKHRoZVNlbGVjdGlvbiAhPSBudWxsICYmICF0aGVTZWxlY3Rpb24uaXNFbXB0eSgpKSB7CisJCQlSdW5uYWJsZSBydW5uYWJsZSA9CisJCQkJbmV3IFJ1bm5hYmxlKCkgeworCQkJCQlwdWJsaWMgdm9pZCBydW4oKSB7CisJCQkJCQkvLyBUcnkgdG8gc2VsZWN0IHRoZSBpdGVtcyBpbiB0aGUgY3VycmVudCBjb250ZW50IHZpZXdlciBvZiB0aGUgZWRpdG9yLgorCQkJCQkJLy8KKwkJCQkJCWlmIChjdXJyZW50Vmlld2VyICE9IG51bGwpIHsKKwkJCQkJCQljdXJyZW50Vmlld2VyLnNldFNlbGVjdGlvbihuZXcgU3RydWN0dXJlZFNlbGVjdGlvbih0aGVTZWxlY3Rpb24udG9BcnJheSgpKSwgdHJ1ZSk7CisJCQkJCQl9CisJCQkJCX0KKwkJCQl9OworCQkJZ2V0U2l0ZSgpLmdldFNoZWxsKCkuZ2V0RGlzcGxheSgpLmFzeW5jRXhlYyhydW5uYWJsZSk7CisJCX0KKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgdGhlIGVkaXRpbmcgZG9tYWluIGFzIHJlcXVpcmVkIGJ5IHRoZSB7QGxpbmsgSUVkaXRpbmdEb21haW5Qcm92aWRlcn0gaW50ZXJmYWNlLgorCSAqIFRoaXMgaXMgaW1wb3J0YW50IGZvciBpbXBsZW1lbnRpbmcgdGhlIHN0YXRpYyBtZXRob2RzIG9mIHtAbGluayBBZGFwdGVyRmFjdG9yeUVkaXRpbmdEb21haW59CisJICogYW5kIGZvciBzdXBwb3J0aW5nIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5hY3Rpb24uQ29tbWFuZEFjdGlvbn0uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVkaXRpbmdEb21haW4gZ2V0RWRpdGluZ0RvbWFpbigpIHsKKwkJcmV0dXJuIGVkaXRpbmdEb21haW47CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIGNsYXNzIFJldmVyc2VBZGFwdGVyRmFjdG9yeUNvbnRlbnRQcm92aWRlciBleHRlbmRzIEFkYXB0ZXJGYWN0b3J5Q29udGVudFByb3ZpZGVyIHsKKwkJLyoqCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlwdWJsaWMgUmV2ZXJzZUFkYXB0ZXJGYWN0b3J5Q29udGVudFByb3ZpZGVyKEFkYXB0ZXJGYWN0b3J5IGFkYXB0ZXJGYWN0b3J5KSB7CisJCQlzdXBlcihhZGFwdGVyRmFjdG9yeSk7CisJCX0KKworCQkvKioKKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUBPdmVycmlkZQorCQlwdWJsaWMgT2JqZWN0IFtdIGdldEVsZW1lbnRzKE9iamVjdCBvYmplY3QpIHsKKwkJCU9iamVjdCBwYXJlbnQgPSBzdXBlci5nZXRQYXJlbnQob2JqZWN0KTsKKwkJCXJldHVybiAocGFyZW50ID09IG51bGwgPyBDb2xsZWN0aW9ucy5FTVBUWV9TRVQgOiBDb2xsZWN0aW9ucy5zaW5nbGV0b24ocGFyZW50KSkudG9BcnJheSgpOworCQl9CisKKwkJLyoqCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlAT3ZlcnJpZGUKKwkJcHVibGljIE9iamVjdCBbXSBnZXRDaGlsZHJlbihPYmplY3Qgb2JqZWN0KSB7CisJCQlPYmplY3QgcGFyZW50ID0gc3VwZXIuZ2V0UGFyZW50KG9iamVjdCk7CisJCQlyZXR1cm4gKHBhcmVudCA9PSBudWxsID8gQ29sbGVjdGlvbnMuRU1QVFlfU0VUIDogQ29sbGVjdGlvbnMuc2luZ2xldG9uKHBhcmVudCkpLnRvQXJyYXkoKTsKKwkJfQorCisJCS8qKgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJQE92ZXJyaWRlCisJCXB1YmxpYyBib29sZWFuIGhhc0NoaWxkcmVuKE9iamVjdCBvYmplY3QpIHsKKwkJCU9iamVjdCBwYXJlbnQgPSBzdXBlci5nZXRQYXJlbnQob2JqZWN0KTsKKwkJCXJldHVybiBwYXJlbnQgIT0gbnVsbDsKKwkJfQorCisJCS8qKgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJQE92ZXJyaWRlCisJCXB1YmxpYyBPYmplY3QgZ2V0UGFyZW50KE9iamVjdCBvYmplY3QpIHsKKwkJCXJldHVybiBudWxsOworCQl9CisJfQorCisJLyoqCisJICogVGhpcyBtYWtlcyBzdXJlIHRoYXQgb25lIGNvbnRlbnQgdmlld2VyLCBlaXRoZXIgZm9yIHRoZSBjdXJyZW50IHBhZ2Ugb3IgdGhlIG91dGxpbmUgdmlldywgaWYgaXQgaGFzIGZvY3VzLAorCSAqIGlzIHRoZSBjdXJyZW50IG9uZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRDdXJyZW50Vmlld2VyKFZpZXdlciB2aWV3ZXIpIHsKKwkJLy8gSWYgaXQgaXMgY2hhbmdpbmcuLi4KKwkJLy8KKwkJaWYgKGN1cnJlbnRWaWV3ZXIgIT0gdmlld2VyKSB7CisJCQlpZiAoc2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyID09IG51bGwpIHsKKwkJCQkvLyBDcmVhdGUgdGhlIGxpc3RlbmVyIG9uIGRlbWFuZC4KKwkJCQkvLworCQkJCXNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lciA9CisJCQkJCW5ldyBJU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyKCkgeworCQkJCQkJLy8gVGhpcyBqdXN0IG5vdGlmaWVzIHRob3NlIHRoaW5ncyB0aGF0IGFyZSBhZmZlY3RlZCBieSB0aGUgc2VjdGlvbi4KKwkJCQkJCS8vCisJCQkJCQlwdWJsaWMgdm9pZCBzZWxlY3Rpb25DaGFuZ2VkKFNlbGVjdGlvbkNoYW5nZWRFdmVudCBzZWxlY3Rpb25DaGFuZ2VkRXZlbnQpIHsKKwkJCQkJCQlzZXRTZWxlY3Rpb24oc2VsZWN0aW9uQ2hhbmdlZEV2ZW50LmdldFNlbGVjdGlvbigpKTsKKwkJCQkJCX0KKwkJCQkJfTsKKwkJCX0KKworCQkJLy8gU3RvcCBsaXN0ZW5pbmcgdG8gdGhlIG9sZCBvbmUuCisJCQkvLworCQkJaWYgKGN1cnJlbnRWaWV3ZXIgIT0gbnVsbCkgeworCQkJCWN1cnJlbnRWaWV3ZXIucmVtb3ZlU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyKHNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcik7CisJCQl9CisKKwkJCS8vIFN0YXJ0IGxpc3RlbmluZyB0byB0aGUgbmV3IG9uZS4KKwkJCS8vCisJCQlpZiAodmlld2VyICE9IG51bGwpIHsKKwkJCQl2aWV3ZXIuYWRkU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyKHNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcik7CisJCQl9CisKKwkJCS8vIFJlbWVtYmVyIGl0LgorCQkJLy8KKwkJCWN1cnJlbnRWaWV3ZXIgPSB2aWV3ZXI7CisKKwkJCS8vIFNldCB0aGUgZWRpdG9ycyBzZWxlY3Rpb24gYmFzZWQgb24gdGhlIGN1cnJlbnQgdmlld2VyJ3Mgc2VsZWN0aW9uLgorCQkJLy8KKwkJCXNldFNlbGVjdGlvbihjdXJyZW50Vmlld2VyID09IG51bGwgPyBTdHJ1Y3R1cmVkU2VsZWN0aW9uLkVNUFRZIDogY3VycmVudFZpZXdlci5nZXRTZWxlY3Rpb24oKSk7CisJCX0KKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgdGhlIHZpZXdlciBhcyByZXF1aXJlZCBieSB0aGUge0BsaW5rIElWaWV3ZXJQcm92aWRlcn0gaW50ZXJmYWNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBWaWV3ZXIgZ2V0Vmlld2VyKCkgeworCQlyZXR1cm4gY3VycmVudFZpZXdlcjsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGNyZWF0ZXMgYSBjb250ZXh0IG1lbnUgZm9yIHRoZSB2aWV3ZXIgYW5kIGFkZHMgYSBsaXN0ZW5lciBhcyB3ZWxsIHJlZ2lzdGVyaW5nIHRoZSBtZW51IGZvciBleHRlbnNpb24uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgY3JlYXRlQ29udGV4dE1lbnVGb3IoU3RydWN0dXJlZFZpZXdlciB2aWV3ZXIpIHsKKwkJTWVudU1hbmFnZXIgY29udGV4dE1lbnUgPSBuZXcgTWVudU1hbmFnZXIoIiNQb3BVcCIpOyAvLyROT04tTkxTLTEkCisJCWNvbnRleHRNZW51LmFkZChuZXcgU2VwYXJhdG9yKCJhZGRpdGlvbnMiKSk7IC8vJE5PTi1OTFMtMSQKKwkJY29udGV4dE1lbnUuc2V0UmVtb3ZlQWxsV2hlblNob3duKHRydWUpOworCQljb250ZXh0TWVudS5hZGRNZW51TGlzdGVuZXIodGhpcyk7CisJCU1lbnUgbWVudT0gY29udGV4dE1lbnUuY3JlYXRlQ29udGV4dE1lbnUodmlld2VyLmdldENvbnRyb2woKSk7CisJCXZpZXdlci5nZXRDb250cm9sKCkuc2V0TWVudShtZW51KTsKKwkJZ2V0U2l0ZSgpLnJlZ2lzdGVyQ29udGV4dE1lbnUoY29udGV4dE1lbnUsIG5ldyBVbndyYXBwaW5nU2VsZWN0aW9uUHJvdmlkZXIodmlld2VyKSk7CisKKwkJaW50IGRuZE9wZXJhdGlvbnMgPSBETkQuRFJPUF9DT1BZIHwgRE5ELkRST1BfTU9WRSB8IERORC5EUk9QX0xJTks7CisJCVRyYW5zZmVyW10gdHJhbnNmZXJzID0gbmV3IFRyYW5zZmVyW10geyBMb2NhbFRyYW5zZmVyLmdldEluc3RhbmNlKCkgfTsKKwkJdmlld2VyLmFkZERyYWdTdXBwb3J0KGRuZE9wZXJhdGlvbnMsIHRyYW5zZmVycywgbmV3IFZpZXdlckRyYWdBZGFwdGVyKHZpZXdlcikpOworCQl2aWV3ZXIuYWRkRHJvcFN1cHBvcnQoZG5kT3BlcmF0aW9ucywgdHJhbnNmZXJzLCBuZXcgRWRpdGluZ0RvbWFpblZpZXdlckRyb3BBZGFwdGVyKGVkaXRpbmdEb21haW4sIHZpZXdlcikpOworCX0KKworCS8qKgorCSAqIFRoaXMgaXMgdGhlIG1ldGhvZCBjYWxsZWQgdG8gbG9hZCBhIHJlc291cmNlIGludG8gdGhlIGVkaXRpbmcgZG9tYWluJ3MgcmVzb3VyY2Ugc2V0IGJhc2VkIG9uIHRoZSBlZGl0b3IncyBpbnB1dC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBjcmVhdGVNb2RlbCgpIHsKKwkJVVJJIHJlc291cmNlVVJJID0gRWRpdFVJVXRpbC5nZXRVUkkoZ2V0RWRpdG9ySW5wdXQoKSk7CisJCUV4Y2VwdGlvbiBleGNlcHRpb24gPSBudWxsOworCQlSZXNvdXJjZSByZXNvdXJjZSA9IG51bGw7CisJCXRyeSB7CisJCQkvLyBMb2FkIHRoZSByZXNvdXJjZSB0aHJvdWdoIHRoZSBlZGl0aW5nIGRvbWFpbi4KKwkJCS8vCisJCQlyZXNvdXJjZSA9IGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKS5nZXRSZXNvdXJjZShyZXNvdXJjZVVSSSwgdHJ1ZSk7CisJCX0KKwkJY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CisJCQlleGNlcHRpb24gPSBlOworCQkJcmVzb3VyY2UgPSBlZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkuZ2V0UmVzb3VyY2UocmVzb3VyY2VVUkksIGZhbHNlKTsKKwkJfQorCisJCURpYWdub3N0aWMgZGlhZ25vc3RpYyA9IGFuYWx5emVSZXNvdXJjZVByb2JsZW1zKHJlc291cmNlLCBleGNlcHRpb24pOworCQlpZiAoZGlhZ25vc3RpYy5nZXRTZXZlcml0eSgpICE9IERpYWdub3N0aWMuT0spIHsKKwkJCXJlc291cmNlVG9EaWFnbm9zdGljTWFwLnB1dChyZXNvdXJjZSwgIGFuYWx5emVSZXNvdXJjZVByb2JsZW1zKHJlc291cmNlLCBleGNlcHRpb24pKTsKKwkJfQorCQllZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkuZUFkYXB0ZXJzKCkuYWRkKHByb2JsZW1JbmRpY2F0aW9uQWRhcHRlcik7CisJfQorCisJLyoqCisJICogUmV0dXJucyBhIGRpYWdub3N0aWMgZGVzY3JpYmluZyB0aGUgZXJyb3JzIGFuZCB3YXJuaW5ncyBsaXN0ZWQgaW4gdGhlIHJlc291cmNlCisJICogYW5kIHRoZSBzcGVjaWZpZWQgZXhjZXB0aW9uIChpZiBhbnkpLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBEaWFnbm9zdGljIGFuYWx5emVSZXNvdXJjZVByb2JsZW1zKFJlc291cmNlIHJlc291cmNlLCBFeGNlcHRpb24gZXhjZXB0aW9uKSB7CisJCWlmICghcmVzb3VyY2UuZ2V0RXJyb3JzKCkuaXNFbXB0eSgpIHx8ICFyZXNvdXJjZS5nZXRXYXJuaW5ncygpLmlzRW1wdHkoKSkgeworCQkJQmFzaWNEaWFnbm9zdGljIGJhc2ljRGlhZ25vc3RpYyA9CisJCQkJbmV3IEJhc2ljRGlhZ25vc3RpYworCQkJCQkoRGlhZ25vc3RpYy5FUlJPUiwKKwkJCQkJICJvcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMuZm9yY2luZy5lZGl0b3IiLCAvLyROT04tTkxTLTEkCisJCQkJCSAwLAorCQkJCQkgZ2V0U3RyaW5nKCJfVUlfQ3JlYXRlTW9kZWxFcnJvcl9tZXNzYWdlIiwgcmVzb3VyY2UuZ2V0VVJJKCkpLCAvLyROT04tTkxTLTEkCisJCQkJCSBuZXcgT2JqZWN0IFtdIHsgZXhjZXB0aW9uID09IG51bGwgPyAoT2JqZWN0KXJlc291cmNlIDogZXhjZXB0aW9uIH0pOworCQkJYmFzaWNEaWFnbm9zdGljLm1lcmdlKEVjb3JlVXRpbC5jb21wdXRlRGlhZ25vc3RpYyhyZXNvdXJjZSwgdHJ1ZSkpOworCQkJcmV0dXJuIGJhc2ljRGlhZ25vc3RpYzsKKwkJfQorCQllbHNlIGlmIChleGNlcHRpb24gIT0gbnVsbCkgeworCQkJcmV0dXJuCisJCQkJbmV3IEJhc2ljRGlhZ25vc3RpYworCQkJCQkoRGlhZ25vc3RpYy5FUlJPUiwKKwkJCQkJICJvcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMuZm9yY2luZy5lZGl0b3IiLCAvLyROT04tTkxTLTEkCisJCQkJCSAwLAorCQkJCQkgZ2V0U3RyaW5nKCJfVUlfQ3JlYXRlTW9kZWxFcnJvcl9tZXNzYWdlIiwgcmVzb3VyY2UuZ2V0VVJJKCkpLCAvLyROT04tTkxTLTEkCisJCQkJCSBuZXcgT2JqZWN0W10geyBleGNlcHRpb24gfSk7CisJCX0KKwkJZWxzZSB7CisJCQlyZXR1cm4gRGlhZ25vc3RpYy5PS19JTlNUQU5DRTsKKwkJfQorCX0KKworCS8qKgorCSAqIFRoaXMgaXMgdGhlIG1ldGhvZCB1c2VkIGJ5IHRoZSBmcmFtZXdvcmsgdG8gaW5zdGFsbCB5b3VyIG93biBjb250cm9scy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBjcmVhdGVQYWdlcygpIHsKKwkJLy8gQ3JlYXRlcyB0aGUgbW9kZWwgZnJvbSB0aGUgZWRpdG9yIGlucHV0CisJCS8vCisJCWNyZWF0ZU1vZGVsKCk7CisKKwkJLy8gT25seSBjcmVhdGVzIHRoZSBvdGhlciBwYWdlcyBpZiB0aGVyZSBpcyBzb21ldGhpbmcgdGhhdCBjYW4gYmUgZWRpdGVkCisJCS8vCisJCWlmICghZ2V0RWRpdGluZ0RvbWFpbigpLmdldFJlc291cmNlU2V0KCkuZ2V0UmVzb3VyY2VzKCkuaXNFbXB0eSgpKSB7CisJCQkvLyBDcmVhdGUgYSBwYWdlIGZvciB0aGUgc2VsZWN0aW9uIHRyZWUgdmlldy4KKwkJCS8vCisJCQlUcmVlIHRyZWUgPSBuZXcgVHJlZShnZXRDb250YWluZXIoKSwgU1dULk1VTFRJKTsKKwkJCXNlbGVjdGlvblZpZXdlciA9IG5ldyBUcmVlVmlld2VyKHRyZWUpOworCQkJc2V0Q3VycmVudFZpZXdlcihzZWxlY3Rpb25WaWV3ZXIpOworCisJCQlzZWxlY3Rpb25WaWV3ZXIuc2V0Q29udGVudFByb3ZpZGVyKG5ldyBBZGFwdGVyRmFjdG9yeUNvbnRlbnRQcm92aWRlcihhZGFwdGVyRmFjdG9yeSkpOworCQkJc2VsZWN0aW9uVmlld2VyLnNldExhYmVsUHJvdmlkZXIobmV3IEFkYXB0ZXJGYWN0b3J5TGFiZWxQcm92aWRlcihhZGFwdGVyRmFjdG9yeSkpOworCQkJc2VsZWN0aW9uVmlld2VyLnNldElucHV0KGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKSk7CisJCQlzZWxlY3Rpb25WaWV3ZXIuc2V0U2VsZWN0aW9uKG5ldyBTdHJ1Y3R1cmVkU2VsZWN0aW9uKGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKS5nZXRSZXNvdXJjZXMoKS5nZXQoMCkpLCB0cnVlKTsKKworCQkJbmV3IEFkYXB0ZXJGYWN0b3J5VHJlZUVkaXRvcihzZWxlY3Rpb25WaWV3ZXIuZ2V0VHJlZSgpLCBhZGFwdGVyRmFjdG9yeSk7CisKKwkJCWNyZWF0ZUNvbnRleHRNZW51Rm9yKHNlbGVjdGlvblZpZXdlcik7CisJCQlpbnQgcGFnZUluZGV4ID0gYWRkUGFnZSh0cmVlKTsKKwkJCXNldFBhZ2VUZXh0KHBhZ2VJbmRleCwgZ2V0U3RyaW5nKCJfVUlfU2VsZWN0aW9uUGFnZV9sYWJlbCIpKTsgLy8kTk9OLU5MUy0xJAorCisJCQlnZXRTaXRlKCkuZ2V0U2hlbGwoKS5nZXREaXNwbGF5KCkuYXN5bmNFeGVjCisJCQkJKG5ldyBSdW5uYWJsZSgpIHsKKwkJCQkJIHB1YmxpYyB2b2lkIHJ1bigpIHsKKwkJCQkJCSBzZXRBY3RpdmVQYWdlKDApOworCQkJCQkgfQorCQkJCSB9KTsKKwkJfQorCisJCS8vIEVuc3VyZXMgdGhhdCB0aGlzIGVkaXRvciB3aWxsIG9ubHkgZGlzcGxheSB0aGUgcGFnZSdzIHRhYgorCQkvLyBhcmVhIGlmIHRoZXJlIGFyZSBtb3JlIHRoYW4gb25lIHBhZ2UKKwkJLy8KKwkJZ2V0Q29udGFpbmVyKCkuYWRkQ29udHJvbExpc3RlbmVyCisJCQkobmV3IENvbnRyb2xBZGFwdGVyKCkgeworCQkJCWJvb2xlYW4gZ3VhcmQgPSBmYWxzZTsKKwkJCQlAT3ZlcnJpZGUKKwkJCQlwdWJsaWMgdm9pZCBjb250cm9sUmVzaXplZChDb250cm9sRXZlbnQgZXZlbnQpIHsKKwkJCQkJaWYgKCFndWFyZCkgeworCQkJCQkJZ3VhcmQgPSB0cnVlOworCQkJCQkJaGlkZVRhYnMoKTsKKwkJCQkJCWd1YXJkID0gZmFsc2U7CisJCQkJCX0KKwkJCQl9CisJCQkgfSk7CisKKwkJZ2V0U2l0ZSgpLmdldFNoZWxsKCkuZ2V0RGlzcGxheSgpLmFzeW5jRXhlYworCQkJKG5ldyBSdW5uYWJsZSgpIHsKKwkJCQkgcHVibGljIHZvaWQgcnVuKCkgeworCQkJCQkgdXBkYXRlUHJvYmxlbUluZGljYXRpb24oKTsKKwkJCQkgfQorCQkJIH0pOworCX0KKworCS8qKgorCSAqIElmIHRoZXJlIGlzIGp1c3Qgb25lIHBhZ2UgaW4gdGhlIG11bHRpLXBhZ2UgZWRpdG9yIHBhcnQsCisJICogdGhpcyBoaWRlcyB0aGUgc2luZ2xlIHRhYiBhdCB0aGUgYm90dG9tLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIGhpZGVUYWJzKCkgeworCQlpZiAoZ2V0UGFnZUNvdW50KCkgPD0gMSkgeworCQkJc2V0UGFnZVRleHQoMCwgIiIpOyAvLyROT04tTkxTLTEkCisJCQlpZiAoZ2V0Q29udGFpbmVyKCkgaW5zdGFuY2VvZiBDVGFiRm9sZGVyKSB7CisJCQkJKChDVGFiRm9sZGVyKWdldENvbnRhaW5lcigpKS5zZXRUYWJIZWlnaHQoMSk7CisJCQkJUG9pbnQgcG9pbnQgPSBnZXRDb250YWluZXIoKS5nZXRTaXplKCk7CisJCQkJZ2V0Q29udGFpbmVyKCkuc2V0U2l6ZShwb2ludC54LCBwb2ludC55ICsgNik7CisJCQl9CisJCX0KKwl9CisKKwkvKioKKwkgKiBJZiB0aGVyZSBpcyBtb3JlIHRoYW4gb25lIHBhZ2UgaW4gdGhlIG11bHRpLXBhZ2UgZWRpdG9yIHBhcnQsCisJICogdGhpcyBzaG93cyB0aGUgdGFicyBhdCB0aGUgYm90dG9tLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIHNob3dUYWJzKCkgeworCQlpZiAoZ2V0UGFnZUNvdW50KCkgPiAxKSB7CisJCQlzZXRQYWdlVGV4dCgwLCBnZXRTdHJpbmcoIl9VSV9TZWxlY3Rpb25QYWdlX2xhYmVsIikpOyAvLyROT04tTkxTLTEkCisJCQlpZiAoZ2V0Q29udGFpbmVyKCkgaW5zdGFuY2VvZiBDVGFiRm9sZGVyKSB7CisJCQkJKChDVGFiRm9sZGVyKWdldENvbnRhaW5lcigpKS5zZXRUYWJIZWlnaHQoU1dULkRFRkFVTFQpOworCQkJCVBvaW50IHBvaW50ID0gZ2V0Q29udGFpbmVyKCkuZ2V0U2l6ZSgpOworCQkJCWdldENvbnRhaW5lcigpLnNldFNpemUocG9pbnQueCwgcG9pbnQueSAtIDYpOworCQkJfQorCQl9CisJfQorCisJLyoqCisJICogVGhpcyBpcyB1c2VkIHRvIHRyYWNrIHRoZSBhY3RpdmUgdmlld2VyLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIHBhZ2VDaGFuZ2UoaW50IHBhZ2VJbmRleCkgeworCQlzdXBlci5wYWdlQ2hhbmdlKHBhZ2VJbmRleCk7CisKKwkJaWYgKGNvbnRlbnRPdXRsaW5lUGFnZSAhPSBudWxsKSB7CisJCQloYW5kbGVDb250ZW50T3V0bGluZVNlbGVjdGlvbihjb250ZW50T3V0bGluZVBhZ2UuZ2V0U2VsZWN0aW9uKCkpOworCQl9CisJfQorCisJLyoqCisJICogVGhpcyBpcyBob3cgdGhlIGZyYW1ld29yayBkZXRlcm1pbmVzIHdoaWNoIGludGVyZmFjZXMgd2UgaW1wbGVtZW50LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBTdXBwcmVzc1dhcm5pbmdzKCJ1bmNoZWNrZWQiKQorCUBPdmVycmlkZQorCXB1YmxpYyBPYmplY3QgZ2V0QWRhcHRlcihDbGFzcyBrZXkpIHsKKwkJaWYgKGtleS5lcXVhbHMoSUNvbnRlbnRPdXRsaW5lUGFnZS5jbGFzcykpIHsKKwkJCXJldHVybiBzaG93T3V0bGluZVZpZXcoKSA/IGdldENvbnRlbnRPdXRsaW5lUGFnZSgpIDogbnVsbDsKKwkJfQorCQllbHNlIGlmIChrZXkuZXF1YWxzKElQcm9wZXJ0eVNoZWV0UGFnZS5jbGFzcykpIHsKKwkJCXJldHVybiBnZXRQcm9wZXJ0eVNoZWV0UGFnZSgpOworCQl9CisJCWVsc2UgaWYgKGtleS5lcXVhbHMoSUdvdG9NYXJrZXIuY2xhc3MpKSB7CisJCQlyZXR1cm4gdGhpczsKKwkJfQorCQllbHNlIHsKKwkJCXJldHVybiBzdXBlci5nZXRBZGFwdGVyKGtleSk7CisJCX0KKwl9CisKKwkvKioKKwkgKiBUaGlzIGFjY2Vzc2VzIGEgY2FjaGVkIHZlcnNpb24gb2YgdGhlIGNvbnRlbnQgb3V0bGluZXIuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIElDb250ZW50T3V0bGluZVBhZ2UgZ2V0Q29udGVudE91dGxpbmVQYWdlKCkgeworCQlpZiAoY29udGVudE91dGxpbmVQYWdlID09IG51bGwpIHsKKwkJCS8vIFRoZSBjb250ZW50IG91dGxpbmUgaXMganVzdCBhIHRyZWUuCisJCQkvLworCQkJY2xhc3MgTXlDb250ZW50T3V0bGluZVBhZ2UgZXh0ZW5kcyBDb250ZW50T3V0bGluZVBhZ2UgeworCQkJCUBPdmVycmlkZQorCQkJCXB1YmxpYyB2b2lkIGNyZWF0ZUNvbnRyb2woQ29tcG9zaXRlIHBhcmVudCkgeworCQkJCQlzdXBlci5jcmVhdGVDb250cm9sKHBhcmVudCk7CisJCQkJCWNvbnRlbnRPdXRsaW5lVmlld2VyID0gZ2V0VHJlZVZpZXdlcigpOworCQkJCQljb250ZW50T3V0bGluZVZpZXdlci5hZGRTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIodGhpcyk7CisKKwkJCQkJLy8gU2V0IHVwIHRoZSB0cmVlIHZpZXdlci4KKwkJCQkJLy8KKwkJCQkJY29udGVudE91dGxpbmVWaWV3ZXIuc2V0Q29udGVudFByb3ZpZGVyKG5ldyBBZGFwdGVyRmFjdG9yeUNvbnRlbnRQcm92aWRlcihhZGFwdGVyRmFjdG9yeSkpOworCQkJCQljb250ZW50T3V0bGluZVZpZXdlci5zZXRMYWJlbFByb3ZpZGVyKG5ldyBBZGFwdGVyRmFjdG9yeUxhYmVsUHJvdmlkZXIoYWRhcHRlckZhY3RvcnkpKTsKKwkJCQkJY29udGVudE91dGxpbmVWaWV3ZXIuc2V0SW5wdXQoZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpKTsKKworCQkJCQkvLyBNYWtlIHN1cmUgb3VyIHBvcHVwcyB3b3JrLgorCQkJCQkvLworCQkJCQljcmVhdGVDb250ZXh0TWVudUZvcihjb250ZW50T3V0bGluZVZpZXdlcik7CisKKwkJCQkJaWYgKCFlZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkuZ2V0UmVzb3VyY2VzKCkuaXNFbXB0eSgpKSB7CisJCQkJCSAgLy8gU2VsZWN0IHRoZSByb290IG9iamVjdCBpbiB0aGUgdmlldy4KKwkJCQkJICAvLworCQkJCQkgIGNvbnRlbnRPdXRsaW5lVmlld2VyLnNldFNlbGVjdGlvbihuZXcgU3RydWN0dXJlZFNlbGVjdGlvbihlZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkuZ2V0UmVzb3VyY2VzKCkuZ2V0KDApKSwgdHJ1ZSk7CisJCQkJCX0KKwkJCQl9CisKKwkJCQlAT3ZlcnJpZGUKKwkJCQlwdWJsaWMgdm9pZCBtYWtlQ29udHJpYnV0aW9ucyhJTWVudU1hbmFnZXIgbWVudU1hbmFnZXIsIElUb29sQmFyTWFuYWdlciB0b29sQmFyTWFuYWdlciwgSVN0YXR1c0xpbmVNYW5hZ2VyIHN0YXR1c0xpbmVNYW5hZ2VyKSB7CisJCQkJCXN1cGVyLm1ha2VDb250cmlidXRpb25zKG1lbnVNYW5hZ2VyLCB0b29sQmFyTWFuYWdlciwgc3RhdHVzTGluZU1hbmFnZXIpOworCQkJCQljb250ZW50T3V0bGluZVN0YXR1c0xpbmVNYW5hZ2VyID0gc3RhdHVzTGluZU1hbmFnZXI7CisJCQkJfQorCisJCQkJQE92ZXJyaWRlCisJCQkJcHVibGljIHZvaWQgc2V0QWN0aW9uQmFycyhJQWN0aW9uQmFycyBhY3Rpb25CYXJzKSB7CisJCQkJCXN1cGVyLnNldEFjdGlvbkJhcnMoYWN0aW9uQmFycyk7CisJCQkJCWdldEFjdGlvbkJhckNvbnRyaWJ1dG9yKCkuc2hhcmVHbG9iYWxBY3Rpb25zKHRoaXMsIGFjdGlvbkJhcnMpOworCQkJCX0KKwkJCX0KKworCQkJY29udGVudE91dGxpbmVQYWdlID0gbmV3IE15Q29udGVudE91dGxpbmVQYWdlKCk7CisKKwkJCS8vIExpc3RlbiB0byBzZWxlY3Rpb24gc28gdGhhdCB3ZSBjYW4gaGFuZGxlIGl0IGlzIGEgc3BlY2lhbCB3YXkuCisJCQkvLworCQkJY29udGVudE91dGxpbmVQYWdlLmFkZFNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcgorCQkJCShuZXcgSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcigpIHsKKwkJCQkJIC8vIFRoaXMgZW5zdXJlcyB0aGF0IHdlIGhhbmRsZSBzZWxlY3Rpb25zIGNvcnJlY3RseS4KKwkJCQkJIC8vCisJCQkJCSBwdWJsaWMgdm9pZCBzZWxlY3Rpb25DaGFuZ2VkKFNlbGVjdGlvbkNoYW5nZWRFdmVudCBldmVudCkgeworCQkJCQkJIGhhbmRsZUNvbnRlbnRPdXRsaW5lU2VsZWN0aW9uKGV2ZW50LmdldFNlbGVjdGlvbigpKTsKKwkJCQkJIH0KKwkJCQkgfSk7CisJCX0KKworCQlyZXR1cm4gY29udGVudE91dGxpbmVQYWdlOworCX0KKworCS8qKgorCSAqIFRoaXMgYWNjZXNzZXMgYSBjYWNoZWQgdmVyc2lvbiBvZiB0aGUgcHJvcGVydHkgc2hlZXQuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIElQcm9wZXJ0eVNoZWV0UGFnZSBnZXRQcm9wZXJ0eVNoZWV0UGFnZSgpIHsKKwkJaWYgKHByb3BlcnR5U2hlZXRQYWdlID09IG51bGwpIHsKKwkJCXByb3BlcnR5U2hlZXRQYWdlID0KKwkJCQluZXcgRXh0ZW5kZWRQcm9wZXJ0eVNoZWV0UGFnZShlZGl0aW5nRG9tYWluKSB7CisJCQkJCUBPdmVycmlkZQorCQkJCQlwdWJsaWMgdm9pZCBzZXRTZWxlY3Rpb25Ub1ZpZXdlcihMaXN0PD8+IHNlbGVjdGlvbikgeworCQkJCQkJRm9yY2luZ0VkaXRvci50aGlzLnNldFNlbGVjdGlvblRvVmlld2VyKHNlbGVjdGlvbik7CisJCQkJCQlGb3JjaW5nRWRpdG9yLnRoaXMuc2V0Rm9jdXMoKTsKKwkJCQkJfQorCisJCQkJCUBPdmVycmlkZQorCQkJCQlwdWJsaWMgdm9pZCBzZXRBY3Rpb25CYXJzKElBY3Rpb25CYXJzIGFjdGlvbkJhcnMpIHsKKwkJCQkJCXN1cGVyLnNldEFjdGlvbkJhcnMoYWN0aW9uQmFycyk7CisJCQkJCQlnZXRBY3Rpb25CYXJDb250cmlidXRvcigpLnNoYXJlR2xvYmFsQWN0aW9ucyh0aGlzLCBhY3Rpb25CYXJzKTsKKwkJCQkJfQorCQkJCX07CisJCQlwcm9wZXJ0eVNoZWV0UGFnZS5zZXRQcm9wZXJ0eVNvdXJjZVByb3ZpZGVyKG5ldyBBZGFwdGVyRmFjdG9yeUNvbnRlbnRQcm92aWRlcihhZGFwdGVyRmFjdG9yeSkpOworCQl9CisKKwkJcmV0dXJuIHByb3BlcnR5U2hlZXRQYWdlOworCX0KKworCS8qKgorCSAqIFRoaXMgZGVhbHMgd2l0aCBob3cgd2Ugd2FudCBzZWxlY3Rpb24gaW4gdGhlIG91dGxpbmVyIHRvIGFmZmVjdCB0aGUgb3RoZXIgdmlld3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgaGFuZGxlQ29udGVudE91dGxpbmVTZWxlY3Rpb24oSVNlbGVjdGlvbiBzZWxlY3Rpb24pIHsKKwkJaWYgKHNlbGVjdGlvblZpZXdlciAhPSBudWxsICYmICFzZWxlY3Rpb24uaXNFbXB0eSgpICYmIHNlbGVjdGlvbiBpbnN0YW5jZW9mIElTdHJ1Y3R1cmVkU2VsZWN0aW9uKSB7CisJCQlJdGVyYXRvcjw/PiBzZWxlY3RlZEVsZW1lbnRzID0gKChJU3RydWN0dXJlZFNlbGVjdGlvbilzZWxlY3Rpb24pLml0ZXJhdG9yKCk7CisJCQlpZiAoc2VsZWN0ZWRFbGVtZW50cy5oYXNOZXh0KCkpIHsKKwkJCQkvLyBHZXQgdGhlIGZpcnN0IHNlbGVjdGVkIGVsZW1lbnQuCisJCQkJLy8KKwkJCQlPYmplY3Qgc2VsZWN0ZWRFbGVtZW50ID0gc2VsZWN0ZWRFbGVtZW50cy5uZXh0KCk7CisKKwkJCQlBcnJheUxpc3Q8T2JqZWN0PiBzZWxlY3Rpb25MaXN0ID0gbmV3IEFycmF5TGlzdDxPYmplY3Q+KCk7CisJCQkJc2VsZWN0aW9uTGlzdC5hZGQoc2VsZWN0ZWRFbGVtZW50KTsKKwkJCQl3aGlsZSAoc2VsZWN0ZWRFbGVtZW50cy5oYXNOZXh0KCkpIHsKKwkJCQkJc2VsZWN0aW9uTGlzdC5hZGQoc2VsZWN0ZWRFbGVtZW50cy5uZXh0KCkpOworCQkJCX0KKworCQkJCS8vIFNldCB0aGUgc2VsZWN0aW9uIHRvIHRoZSB3aWRnZXQuCisJCQkJLy8KKwkJCQlzZWxlY3Rpb25WaWV3ZXIuc2V0U2VsZWN0aW9uKG5ldyBTdHJ1Y3R1cmVkU2VsZWN0aW9uKHNlbGVjdGlvbkxpc3QpKTsKKwkJCX0KKwkJfQorCX0KKworCS8qKgorCSAqIFRoaXMgaXMgZm9yIGltcGxlbWVudGluZyB7QGxpbmsgSUVkaXRvclBhcnR9IGFuZCBzaW1wbHkgdGVzdHMgdGhlIGNvbW1hbmQgc3RhY2suCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIGJvb2xlYW4gaXNEaXJ0eSgpIHsKKwkJcmV0dXJuICgoQmFzaWNDb21tYW5kU3RhY2spZWRpdGluZ0RvbWFpbi5nZXRDb21tYW5kU3RhY2soKSkuaXNTYXZlTmVlZGVkKCk7CisJfQorCisJLyoqCisJICogVGhpcyBpcyBmb3IgaW1wbGVtZW50aW5nIHtAbGluayBJRWRpdG9yUGFydH0gYW5kIHNpbXBseSBzYXZlcyB0aGUgbW9kZWwgZmlsZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBkb1NhdmUoSVByb2dyZXNzTW9uaXRvciBwcm9ncmVzc01vbml0b3IpIHsKKwkJLy8gU2F2ZSBvbmx5IHJlc291cmNlcyB0aGF0IGhhdmUgYWN0dWFsbHkgY2hhbmdlZC4KKwkJLy8KKwkJZmluYWwgTWFwPE9iamVjdCwgT2JqZWN0PiBzYXZlT3B0aW9ucyA9IG5ldyBIYXNoTWFwPE9iamVjdCwgT2JqZWN0PigpOworCQlzYXZlT3B0aW9ucy5wdXQoUmVzb3VyY2UuT1BUSU9OX1NBVkVfT05MWV9JRl9DSEFOR0VELCBSZXNvdXJjZS5PUFRJT05fU0FWRV9PTkxZX0lGX0NIQU5HRURfTUVNT1JZX0JVRkZFUik7CisKKwkJLy8gRG8gdGhlIHdvcmsgd2l0aGluIGFuIG9wZXJhdGlvbiBiZWNhdXNlIHRoaXMgaXMgYSBsb25nIHJ1bm5pbmcgYWN0aXZpdHkgdGhhdCBtb2RpZmllcyB0aGUgd29ya2JlbmNoLgorCQkvLworCQlXb3Jrc3BhY2VNb2RpZnlPcGVyYXRpb24gb3BlcmF0aW9uID0KKwkJCW5ldyBXb3Jrc3BhY2VNb2RpZnlPcGVyYXRpb24oKSB7CisJCQkJLy8gVGhpcyBpcyB0aGUgbWV0aG9kIHRoYXQgZ2V0cyBpbnZva2VkIHdoZW4gdGhlIG9wZXJhdGlvbiBydW5zLgorCQkJCS8vCisJCQkJQE92ZXJyaWRlCisJCQkJcHVibGljIHZvaWQgZXhlY3V0ZShJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IpIHsKKwkJCQkJLy8gU2F2ZSB0aGUgcmVzb3VyY2VzIHRvIHRoZSBmaWxlIHN5c3RlbS4KKwkJCQkJLy8KKwkJCQkJYm9vbGVhbiBmaXJzdCA9IHRydWU7CisJCQkJCWZvciAoUmVzb3VyY2UgcmVzb3VyY2UgOiBlZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkuZ2V0UmVzb3VyY2VzKCkpIHsKKwkJCQkJCWlmICgoZmlyc3QgfHwgIXJlc291cmNlLmdldENvbnRlbnRzKCkuaXNFbXB0eSgpIHx8IGlzUGVyc2lzdGVkKHJlc291cmNlKSkgJiYgIWVkaXRpbmdEb21haW4uaXNSZWFkT25seShyZXNvdXJjZSkpIHsKKwkJCQkJCQl0cnkgeworCQkJCQkJCQlsb25nIHRpbWVTdGFtcCA9IHJlc291cmNlLmdldFRpbWVTdGFtcCgpOworCQkJCQkJCQlyZXNvdXJjZS5zYXZlKHNhdmVPcHRpb25zKTsKKwkJCQkJCQkJaWYgKHJlc291cmNlLmdldFRpbWVTdGFtcCgpICE9IHRpbWVTdGFtcCkgeworCQkJCQkJCQkJc2F2ZWRSZXNvdXJjZXMuYWRkKHJlc291cmNlKTsKKwkJCQkJCQkJfQorCQkJCQkJCX0KKwkJCQkJCQljYXRjaCAoRXhjZXB0aW9uIGV4Y2VwdGlvbikgeworCQkJCQkJCQlyZXNvdXJjZVRvRGlhZ25vc3RpY01hcC5wdXQocmVzb3VyY2UsIGFuYWx5emVSZXNvdXJjZVByb2JsZW1zKHJlc291cmNlLCBleGNlcHRpb24pKTsKKwkJCQkJCQl9CisJCQkJCQkJZmlyc3QgPSBmYWxzZTsKKwkJCQkJCX0KKwkJCQkJfQorCQkJCX0KKwkJCX07CisKKwkJdXBkYXRlUHJvYmxlbUluZGljYXRpb24gPSBmYWxzZTsKKwkJdHJ5IHsKKwkJCS8vIFRoaXMgcnVucyB0aGUgb3B0aW9ucywgYW5kIHNob3dzIHByb2dyZXNzLgorCQkJLy8KKwkJCW5ldyBQcm9ncmVzc01vbml0b3JEaWFsb2coZ2V0U2l0ZSgpLmdldFNoZWxsKCkpLnJ1bih0cnVlLCBmYWxzZSwgb3BlcmF0aW9uKTsKKworCQkJLy8gUmVmcmVzaCB0aGUgbmVjZXNzYXJ5IHN0YXRlLgorCQkJLy8KKwkJCSgoQmFzaWNDb21tYW5kU3RhY2spZWRpdGluZ0RvbWFpbi5nZXRDb21tYW5kU3RhY2soKSkuc2F2ZUlzRG9uZSgpOworCQkJZmlyZVByb3BlcnR5Q2hhbmdlKElFZGl0b3JQYXJ0LlBST1BfRElSVFkpOworCQl9CisJCWNhdGNoIChFeGNlcHRpb24gZXhjZXB0aW9uKSB7CisJCQkvLyBTb21ldGhpbmcgd2VudCB3cm9uZyB0aGF0IHNob3VsZG4ndC4KKwkJCS8vCisJCQlGb3JjaW5nRWRpdG9yUGx1Z2luLklOU1RBTkNFLmxvZyhleGNlcHRpb24pOworCQl9CisJCXVwZGF0ZVByb2JsZW1JbmRpY2F0aW9uID0gdHJ1ZTsKKwkJdXBkYXRlUHJvYmxlbUluZGljYXRpb24oKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgd2hldGhlciBzb21ldGhpbmcgaGFzIGJlZW4gcGVyc2lzdGVkIHRvIHRoZSBVUkkgb2YgdGhlIHNwZWNpZmllZCByZXNvdXJjZS4KKwkgKiBUaGUgaW1wbGVtZW50YXRpb24gdXNlcyB0aGUgVVJJIGNvbnZlcnRlciBmcm9tIHRoZSBlZGl0b3IncyByZXNvdXJjZSBzZXQgdG8gdHJ5IHRvIG9wZW4gYW4gaW5wdXQgc3RyZWFtLiAKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgYm9vbGVhbiBpc1BlcnNpc3RlZChSZXNvdXJjZSByZXNvdXJjZSkgeworCQlib29sZWFuIHJlc3VsdCA9IGZhbHNlOworCQl0cnkgeworCQkJSW5wdXRTdHJlYW0gc3RyZWFtID0gZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpLmdldFVSSUNvbnZlcnRlcigpLmNyZWF0ZUlucHV0U3RyZWFtKHJlc291cmNlLmdldFVSSSgpKTsKKwkJCWlmIChzdHJlYW0gIT0gbnVsbCkgeworCQkJCXJlc3VsdCA9IHRydWU7CisJCQkJc3RyZWFtLmNsb3NlKCk7CisJCQl9CisJCX0KKwkJY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKKwkJCS8vIElnbm9yZQorCQl9CisJCXJldHVybiByZXN1bHQ7CisJfQorCisJLyoqCisJICogVGhpcyBhbHdheXMgcmV0dXJucyB0cnVlIGJlY2F1c2UgaXQgaXMgbm90IGN1cnJlbnRseSBzdXBwb3J0ZWQuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIGJvb2xlYW4gaXNTYXZlQXNBbGxvd2VkKCkgeworCQlyZXR1cm4gdHJ1ZTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFsc28gY2hhbmdlcyB0aGUgZWRpdG9yJ3MgaW5wdXQuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgZG9TYXZlQXMoKSB7CisJCVNhdmVBc0RpYWxvZyBzYXZlQXNEaWFsb2cgPSBuZXcgU2F2ZUFzRGlhbG9nKGdldFNpdGUoKS5nZXRTaGVsbCgpKTsKKwkJc2F2ZUFzRGlhbG9nLm9wZW4oKTsKKwkJSVBhdGggcGF0aCA9IHNhdmVBc0RpYWxvZy5nZXRSZXN1bHQoKTsKKwkJaWYgKHBhdGggIT0gbnVsbCkgeworCQkJSUZpbGUgZmlsZSA9IFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5nZXRSb290KCkuZ2V0RmlsZShwYXRoKTsKKwkJCWlmIChmaWxlICE9IG51bGwpIHsKKwkJCQlkb1NhdmVBcyhVUkkuY3JlYXRlUGxhdGZvcm1SZXNvdXJjZVVSSShmaWxlLmdldEZ1bGxQYXRoKCkudG9TdHJpbmcoKSwgdHJ1ZSksIG5ldyBGaWxlRWRpdG9ySW5wdXQoZmlsZSkpOworCQkJfQorCQl9CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgZG9TYXZlQXMoVVJJIHVyaSwgSUVkaXRvcklucHV0IGVkaXRvcklucHV0KSB7CisJCShlZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkuZ2V0UmVzb3VyY2VzKCkuZ2V0KDApKS5zZXRVUkkodXJpKTsKKwkJc2V0SW5wdXRXaXRoTm90aWZ5KGVkaXRvcklucHV0KTsKKwkJc2V0UGFydE5hbWUoZWRpdG9ySW5wdXQuZ2V0TmFtZSgpKTsKKwkJSVByb2dyZXNzTW9uaXRvciBwcm9ncmVzc01vbml0b3IgPQorCQkJZ2V0QWN0aW9uQmFycygpLmdldFN0YXR1c0xpbmVNYW5hZ2VyKCkgIT0gbnVsbCA/CisJCQkJZ2V0QWN0aW9uQmFycygpLmdldFN0YXR1c0xpbmVNYW5hZ2VyKCkuZ2V0UHJvZ3Jlc3NNb25pdG9yKCkgOgorCQkJCW5ldyBOdWxsUHJvZ3Jlc3NNb25pdG9yKCk7CisJCWRvU2F2ZShwcm9ncmVzc01vbml0b3IpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIGdvdG9NYXJrZXIoSU1hcmtlciBtYXJrZXIpIHsKKwkJdHJ5IHsKKwkJCWlmIChtYXJrZXIuZ2V0VHlwZSgpLmVxdWFscyhFVmFsaWRhdG9yLk1BUktFUikpIHsKKwkJCQlTdHJpbmcgdXJpQXR0cmlidXRlID0gbWFya2VyLmdldEF0dHJpYnV0ZShFVmFsaWRhdG9yLlVSSV9BVFRSSUJVVEUsIG51bGwpOworCQkJCWlmICh1cmlBdHRyaWJ1dGUgIT0gbnVsbCkgeworCQkJCQlVUkkgdXJpID0gVVJJLmNyZWF0ZVVSSSh1cmlBdHRyaWJ1dGUpOworCQkJCQlFT2JqZWN0IGVPYmplY3QgPSBlZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkuZ2V0RU9iamVjdCh1cmksIHRydWUpOworCQkJCQlpZiAoZU9iamVjdCAhPSBudWxsKSB7CisJCQkJCSAgc2V0U2VsZWN0aW9uVG9WaWV3ZXIoQ29sbGVjdGlvbnMuc2luZ2xldG9uKGVkaXRpbmdEb21haW4uZ2V0V3JhcHBlcihlT2JqZWN0KSkpOworCQkJCQl9CisJCQkJfQorCQkJfQorCQl9CisJCWNhdGNoIChDb3JlRXhjZXB0aW9uIGV4Y2VwdGlvbikgeworCQkJRm9yY2luZ0VkaXRvclBsdWdpbi5JTlNUQU5DRS5sb2coZXhjZXB0aW9uKTsKKwkJfQorCX0KKworCS8qKgorCSAqIFRoaXMgaXMgY2FsbGVkIGR1cmluZyBzdGFydHVwLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGluaXQoSUVkaXRvclNpdGUgc2l0ZSwgSUVkaXRvcklucHV0IGVkaXRvcklucHV0KSB7CisJCXNldFNpdGUoc2l0ZSk7CisJCXNldElucHV0V2l0aE5vdGlmeShlZGl0b3JJbnB1dCk7CisJCXNldFBhcnROYW1lKGVkaXRvcklucHV0LmdldE5hbWUoKSk7CisJCXNpdGUuc2V0U2VsZWN0aW9uUHJvdmlkZXIodGhpcyk7CisJCXNpdGUuZ2V0UGFnZSgpLmFkZFBhcnRMaXN0ZW5lcihwYXJ0TGlzdGVuZXIpOworCQlSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuYWRkUmVzb3VyY2VDaGFuZ2VMaXN0ZW5lcihyZXNvdXJjZUNoYW5nZUxpc3RlbmVyLCBJUmVzb3VyY2VDaGFuZ2VFdmVudC5QT1NUX0NIQU5HRSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgc2V0Rm9jdXMoKSB7CisJCWdldENvbnRyb2woZ2V0QWN0aXZlUGFnZSgpKS5zZXRGb2N1cygpOworCX0KKworCS8qKgorCSAqIFRoaXMgaW1wbGVtZW50cyB7QGxpbmsgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uUHJvdmlkZXJ9LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIGFkZFNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcihJU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyIGxpc3RlbmVyKSB7CisJCXNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcnMuYWRkKGxpc3RlbmVyKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGltcGxlbWVudHMge0BsaW5rIG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvblByb3ZpZGVyfS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCByZW1vdmVTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIoSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lciBsaXN0ZW5lcikgeworCQlzZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXJzLnJlbW92ZShsaXN0ZW5lcik7CisJfQorCisJLyoqCisJICogVGhpcyBpbXBsZW1lbnRzIHtAbGluayBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb25Qcm92aWRlcn0gdG8gcmV0dXJuIHRoaXMgZWRpdG9yJ3Mgb3ZlcmFsbCBzZWxlY3Rpb24uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIElTZWxlY3Rpb24gZ2V0U2VsZWN0aW9uKCkgeworCQlyZXR1cm4gZWRpdG9yU2VsZWN0aW9uOworCX0KKworCS8qKgorCSAqIFRoaXMgaW1wbGVtZW50cyB7QGxpbmsgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uUHJvdmlkZXJ9IHRvIHNldCB0aGlzIGVkaXRvcidzIG92ZXJhbGwgc2VsZWN0aW9uLgorCSAqIENhbGxpbmcgdGhpcyByZXN1bHQgd2lsbCBub3RpZnkgdGhlIGxpc3RlbmVycy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRTZWxlY3Rpb24oSVNlbGVjdGlvbiBzZWxlY3Rpb24pIHsKKwkJZWRpdG9yU2VsZWN0aW9uID0gc2VsZWN0aW9uOworCisJCWZvciAoSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lciBsaXN0ZW5lciA6IHNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcnMpIHsKKwkJCWxpc3RlbmVyLnNlbGVjdGlvbkNoYW5nZWQobmV3IFNlbGVjdGlvbkNoYW5nZWRFdmVudCh0aGlzLCBzZWxlY3Rpb24pKTsKKwkJfQorCQlzZXRTdGF0dXNMaW5lTWFuYWdlcihzZWxlY3Rpb24pOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIHNldFN0YXR1c0xpbmVNYW5hZ2VyKElTZWxlY3Rpb24gc2VsZWN0aW9uKSB7CisJCUlTdGF0dXNMaW5lTWFuYWdlciBzdGF0dXNMaW5lTWFuYWdlciA9IGN1cnJlbnRWaWV3ZXIgIT0gbnVsbCAmJiBjdXJyZW50Vmlld2VyID09IGNvbnRlbnRPdXRsaW5lVmlld2VyID8KKwkJCWNvbnRlbnRPdXRsaW5lU3RhdHVzTGluZU1hbmFnZXIgOiBnZXRBY3Rpb25CYXJzKCkuZ2V0U3RhdHVzTGluZU1hbmFnZXIoKTsKKworCQlpZiAoc3RhdHVzTGluZU1hbmFnZXIgIT0gbnVsbCkgeworCQkJaWYgKHNlbGVjdGlvbiBpbnN0YW5jZW9mIElTdHJ1Y3R1cmVkU2VsZWN0aW9uKSB7CisJCQkJQ29sbGVjdGlvbjw/PiBjb2xsZWN0aW9uID0gKChJU3RydWN0dXJlZFNlbGVjdGlvbilzZWxlY3Rpb24pLnRvTGlzdCgpOworCQkJCXN3aXRjaCAoY29sbGVjdGlvbi5zaXplKCkpIHsKKwkJCQkJY2FzZSAwOiB7CisJCQkJCQlzdGF0dXNMaW5lTWFuYWdlci5zZXRNZXNzYWdlKGdldFN0cmluZygiX1VJX05vT2JqZWN0U2VsZWN0ZWQiKSk7IC8vJE5PTi1OTFMtMSQKKwkJCQkJCWJyZWFrOworCQkJCQl9CisJCQkJCWNhc2UgMTogeworCQkJCQkJU3RyaW5nIHRleHQgPSBuZXcgQWRhcHRlckZhY3RvcnlJdGVtRGVsZWdhdG9yKGFkYXB0ZXJGYWN0b3J5KS5nZXRUZXh0KGNvbGxlY3Rpb24uaXRlcmF0b3IoKS5uZXh0KCkpOworCQkJCQkJc3RhdHVzTGluZU1hbmFnZXIuc2V0TWVzc2FnZShnZXRTdHJpbmcoIl9VSV9TaW5nbGVPYmplY3RTZWxlY3RlZCIsIHRleHQpKTsgLy8kTk9OLU5MUy0xJAorCQkJCQkJYnJlYWs7CisJCQkJCX0KKwkJCQkJZGVmYXVsdDogeworCQkJCQkJc3RhdHVzTGluZU1hbmFnZXIuc2V0TWVzc2FnZShnZXRTdHJpbmcoIl9VSV9NdWx0aU9iamVjdFNlbGVjdGVkIiwgSW50ZWdlci50b1N0cmluZyhjb2xsZWN0aW9uLnNpemUoKSkpKTsgLy8kTk9OLU5MUy0xJAorCQkJCQkJYnJlYWs7CisJCQkJCX0KKwkJCQl9CisJCQl9CisJCQllbHNlIHsKKwkJCQlzdGF0dXNMaW5lTWFuYWdlci5zZXRNZXNzYWdlKCIiKTsgLy8kTk9OLU5MUy0xJAorCQkJfQorCQl9CisJfQorCisJLyoqCisJICogVGhpcyBsb29rcyB1cCBhIHN0cmluZyBpbiB0aGUgcGx1Z2luJ3MgcGx1Z2luLnByb3BlcnRpZXMgZmlsZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcml2YXRlIHN0YXRpYyBTdHJpbmcgZ2V0U3RyaW5nKFN0cmluZyBrZXkpIHsKKwkJcmV0dXJuIEZvcmNpbmdFZGl0b3JQbHVnaW4uSU5TVEFOQ0UuZ2V0U3RyaW5nKGtleSk7CisJfQorCisJLyoqCisJICogVGhpcyBsb29rcyB1cCBhIHN0cmluZyBpbiBwbHVnaW4ucHJvcGVydGllcywgbWFraW5nIGEgc3Vic3RpdHV0aW9uLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByaXZhdGUgc3RhdGljIFN0cmluZyBnZXRTdHJpbmcoU3RyaW5nIGtleSwgT2JqZWN0IHMxKSB7CisJCXJldHVybiBGb3JjaW5nRWRpdG9yUGx1Z2luLklOU1RBTkNFLmdldFN0cmluZyhrZXksIG5ldyBPYmplY3QgW10geyBzMSB9KTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGltcGxlbWVudHMge0BsaW5rIG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JTWVudUxpc3RlbmVyfSB0byBoZWxwIGZpbGwgdGhlIGNvbnRleHQgbWVudXMgd2l0aCBjb250cmlidXRpb25zIGZyb20gdGhlIEVkaXQgbWVudS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBtZW51QWJvdXRUb1Nob3coSU1lbnVNYW5hZ2VyIG1lbnVNYW5hZ2VyKSB7CisJCSgoSU1lbnVMaXN0ZW5lcilnZXRFZGl0b3JTaXRlKCkuZ2V0QWN0aW9uQmFyQ29udHJpYnV0b3IoKSkubWVudUFib3V0VG9TaG93KG1lbnVNYW5hZ2VyKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRWRpdGluZ0RvbWFpbkFjdGlvbkJhckNvbnRyaWJ1dG9yIGdldEFjdGlvbkJhckNvbnRyaWJ1dG9yKCkgeworCQlyZXR1cm4gKEVkaXRpbmdEb21haW5BY3Rpb25CYXJDb250cmlidXRvcilnZXRFZGl0b3JTaXRlKCkuZ2V0QWN0aW9uQmFyQ29udHJpYnV0b3IoKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgSUFjdGlvbkJhcnMgZ2V0QWN0aW9uQmFycygpIHsKKwkJcmV0dXJuIGdldEFjdGlvbkJhckNvbnRyaWJ1dG9yKCkuZ2V0QWN0aW9uQmFycygpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBBZGFwdGVyRmFjdG9yeSBnZXRBZGFwdGVyRmFjdG9yeSgpIHsKKwkJcmV0dXJuIGFkYXB0ZXJGYWN0b3J5OworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGRpc3Bvc2UoKSB7CisJCXVwZGF0ZVByb2JsZW1JbmRpY2F0aW9uID0gZmFsc2U7CisKKwkJUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLnJlbW92ZVJlc291cmNlQ2hhbmdlTGlzdGVuZXIocmVzb3VyY2VDaGFuZ2VMaXN0ZW5lcik7CisKKwkJZ2V0U2l0ZSgpLmdldFBhZ2UoKS5yZW1vdmVQYXJ0TGlzdGVuZXIocGFydExpc3RlbmVyKTsKKworCQlhZGFwdGVyRmFjdG9yeS5kaXNwb3NlKCk7CisKKwkJaWYgKGdldEFjdGlvbkJhckNvbnRyaWJ1dG9yKCkuZ2V0QWN0aXZlRWRpdG9yKCkgPT0gdGhpcykgeworCQkJZ2V0QWN0aW9uQmFyQ29udHJpYnV0b3IoKS5zZXRBY3RpdmVFZGl0b3IobnVsbCk7CisJCX0KKworCQlpZiAocHJvcGVydHlTaGVldFBhZ2UgIT0gbnVsbCkgeworCQkJcHJvcGVydHlTaGVldFBhZ2UuZGlzcG9zZSgpOworCQl9CisKKwkJaWYgKGNvbnRlbnRPdXRsaW5lUGFnZSAhPSBudWxsKSB7CisJCQljb250ZW50T3V0bGluZVBhZ2UuZGlzcG9zZSgpOworCQl9CisKKwkJc3VwZXIuZGlzcG9zZSgpOworCX0KKworCS8qKgorCSAqIFJldHVybnMgd2hldGhlciB0aGUgb3V0bGluZSB2aWV3IHNob3VsZCBiZSBwcmVzZW50ZWQgdG8gdGhlIHVzZXIuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIGJvb2xlYW4gc2hvd091dGxpbmVWaWV3KCkgeworCQlyZXR1cm4gZmFsc2U7CisJfQorfQpkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMuZm9yY2luZy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9kaXNlYXNlbW9kZWxzL2ZvcmNpbmcvcHJlc2VudGF0aW9uL0ZvcmNpbmdEaXNlYXNlTW9kZWxBZGFwdGVyLmphdmEgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy5mb3JjaW5nL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL2Rpc2Vhc2Vtb2RlbHMvZm9yY2luZy9wcmVzZW50YXRpb24vRm9yY2luZ0Rpc2Vhc2VNb2RlbEFkYXB0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZjgxMjA4Ci0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMuZm9yY2luZy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9kaXNlYXNlbW9kZWxzL2ZvcmNpbmcvcHJlc2VudGF0aW9uL0ZvcmNpbmdEaXNlYXNlTW9kZWxBZGFwdGVyLmphdmEKQEAgLTAsMCArMSw0MCBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMuZm9yY2luZy5wcmVzZW50YXRpb247CisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA3LCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5EaXNlYXNlTW9kZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS51aS5hZGFwdGVycy5kaXNlYXNlbW9kZWxwcm9wZXJ0eWVkaXRvci5EaXNlYXNlTW9kZWxQcm9wZXJ0eUVkaXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnVpLmFkYXB0ZXJzLmRpc2Vhc2Vtb2RlbHByb3BlcnR5ZWRpdG9yLkRpc2Vhc2VNb2RlbFByb3BlcnR5RWRpdG9yQWRhcHRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnVpLndpemFyZHMuRGlzZWFzZU1vZGVsUHJvcGVydHlDb21wb3NpdGU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5Nb2RpZnlMaXN0ZW5lcjsKKworLyoqCisgKiAgCisgKiBBZGFwdGVyIGZvciBQcm9wZXJ0eSBFZGl0b3IKKyAqCisgKi8KK3B1YmxpYyBjbGFzcyBGb3JjaW5nRGlzZWFzZU1vZGVsQWRhcHRlciBleHRlbmRzCisJCURpc2Vhc2VNb2RlbFByb3BlcnR5RWRpdG9yQWRhcHRlciB7CisKKwkvKioKKwkgKiAKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgRGlzZWFzZU1vZGVsUHJvcGVydHlFZGl0b3IgY3JlYXRlRGlzZWFzZU1vZGVsUHJvcGVydHlFZGl0b3IoCisJCQlEaXNlYXNlTW9kZWxQcm9wZXJ0eUNvbXBvc2l0ZSBkaXNlYXNlTW9kZWxQcm9wZXJ0eUNvbXBvc2l0ZSwKKwkJCWludCBzdHlsZSwgTW9kaWZ5TGlzdGVuZXIgcHJvamVjdFZhbGlkYXRvciwgSVByb2plY3QgcHJvamVjdCkgeworCQlyZXR1cm4gbmV3IEZvcmNpbmdEaXNlYXNlTW9kZWxQcm9wZXJ0eUVkaXRvcigKKwkJCQlkaXNlYXNlTW9kZWxQcm9wZXJ0eUNvbXBvc2l0ZSwgc3R5bGUsCisJCQkJKERpc2Vhc2VNb2RlbCkgZ2V0VGFyZ2V0KCksIHByb2plY3RWYWxpZGF0b3IsIHByb2plY3QpOworCX0gLy8gY3JlYXRlRGlzZWFzZU1vZGVsUHJvcGVydHlFZGl0b3IKKworfSAvLyBGb3JjaW5nRGlzZWFzZU1vZGVsQWRhcHRlcgpkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMuZm9yY2luZy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9kaXNlYXNlbW9kZWxzL2ZvcmNpbmcvcHJlc2VudGF0aW9uL0ZvcmNpbmdEaXNlYXNlTW9kZWxQcm9wZXJ0eUVkaXRvci5qYXZhIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMuZm9yY2luZy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9kaXNlYXNlbW9kZWxzL2ZvcmNpbmcvcHJlc2VudGF0aW9uL0ZvcmNpbmdEaXNlYXNlTW9kZWxQcm9wZXJ0eUVkaXRvci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU3ZTM4NmEKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy5mb3JjaW5nL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL2Rpc2Vhc2Vtb2RlbHMvZm9yY2luZy9wcmVzZW50YXRpb24vRm9yY2luZ0Rpc2Vhc2VNb2RlbFByb3BlcnR5RWRpdG9yLmphdmEKQEAgLTAsMCArMSw0MDkgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzLmZvcmNpbmcucHJlc2VudGF0aW9uOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA3LCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5mb3JjaW5nLkZvcmNpbmdEaXNlYXNlTW9kZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmZvcmNpbmcuRm9yY2luZ1BhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmZvcmNpbmcuR2F1c3NpYW4yRm9yY2luZ0Rpc2Vhc2VNb2RlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZm9yY2luZy5HYXVzc2lhbjNGb3JjaW5nRGlzZWFzZU1vZGVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5mb3JjaW5nLkdhdXNzaWFuRm9yY2luZ0Rpc2Vhc2VNb2RlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuRGlzZWFzZU1vZGVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udWkud2l6YXJkcy5TdGFuZGFyZERpc2Vhc2VNb2RlbFByb3BlcnR5RWRpdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuTW9kaWZ5TGlzdGVuZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlRleHQ7CisKKy8qKgorICoKKyAqLworcHVibGljIGNsYXNzIEZvcmNpbmdEaXNlYXNlTW9kZWxQcm9wZXJ0eUVkaXRvciBleHRlbmRzCisJCVN0YW5kYXJkRGlzZWFzZU1vZGVsUHJvcGVydHlFZGl0b3IgeworCisJLyoqCisJICogQHBhcmFtIHBhcmVudAorCSAqIEBwYXJhbSBzdHlsZQorCSAqIEBwYXJhbSBkaXNlYXNlTW9kZWwKKwkgKiBAcGFyYW0gcHJvamVjdFZhbGlkYXRvcgorCSAqLworCXB1YmxpYyBGb3JjaW5nRGlzZWFzZU1vZGVsUHJvcGVydHlFZGl0b3IoQ29tcG9zaXRlIHBhcmVudCwgaW50IHN0eWxlLAorCQkJRGlzZWFzZU1vZGVsIGRpc2Vhc2VNb2RlbCwgTW9kaWZ5TGlzdGVuZXIgcHJvamVjdFZhbGlkYXRvciwKKwkJCUlQcm9qZWN0IHByb2plY3QpIHsKKwkJc3VwZXIocGFyZW50LCBzdHlsZSwgZGlzZWFzZU1vZGVsLCBwcm9qZWN0VmFsaWRhdG9yLCBwcm9qZWN0KTsKKwl9IC8vIEZvcmNpbmdEaXNlYXNlTW9kZWxQcm9wZXJ0eUVkaXRvcgorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnVpLndpemFyZHMuU3RhbmRhcmREaXNlYXNlTW9kZWxQcm9wZXJ0eUVkaXRvciNwb3B1bGF0ZShvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuRGlzZWFzZU1vZGVsKQorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIHBvcHVsYXRlKERpc2Vhc2VNb2RlbCBkaXNlYXNlTW9kZWwpIHsKKwkJc3VwZXIucG9wdWxhdGUoZGlzZWFzZU1vZGVsKTsKKworCQlpZiAoZGlzZWFzZU1vZGVsIGluc3RhbmNlb2YgRm9yY2luZ0Rpc2Vhc2VNb2RlbCkgeworCQkJRm9yY2luZ0Rpc2Vhc2VNb2RlbCBtb2RlbCA9IChGb3JjaW5nRGlzZWFzZU1vZGVsKSBkaXNlYXNlTW9kZWw7CisKKwkJCW1vZGVsLnNldE1vZHVsYXRpb25FeHBvbmVudChEb3VibGUKKwkJCQkJLnBhcnNlRG91YmxlKG1hcAorCQkJCQkJCS5nZXQoRm9yY2luZ1BhY2thZ2UuTGl0ZXJhbHMuRk9SQ0lOR19ESVNFQVNFX01PREVMX19NT0RVTEFUSU9OX0VYUE9ORU5UKQorCQkJCQkJCS5nZXRUZXh0KCkpKTsKKwkJCW1vZGVsLnNldE1vZHVsYXRpb25QZXJpb2QoRG91YmxlCisJCQkJCS5wYXJzZURvdWJsZShtYXAKKwkJCQkJCQkuZ2V0KEZvcmNpbmdQYWNrYWdlLkxpdGVyYWxzLkZPUkNJTkdfRElTRUFTRV9NT0RFTF9fTU9EVUxBVElPTl9QRVJJT0QpCisJCQkJCQkJLmdldFRleHQoKSkpOworCQkJbW9kZWwuc2V0TW9kdWxhdGlvblBoYXNlU2hpZnQoRG91YmxlCisJCQkJCS5wYXJzZURvdWJsZShtYXAKKwkJCQkJCQkuZ2V0KEZvcmNpbmdQYWNrYWdlLkxpdGVyYWxzLkZPUkNJTkdfRElTRUFTRV9NT0RFTF9fTU9EVUxBVElPTl9QSEFTRV9TSElGVCkKKwkJCQkJCQkuZ2V0VGV4dCgpKSk7CisJCQltb2RlbC5zZXRNb2R1bGF0aW9uRmxvb3IoRG91YmxlCisJCQkJCS5wYXJzZURvdWJsZShtYXAKKwkJCQkJCQkuZ2V0KEZvcmNpbmdQYWNrYWdlLkxpdGVyYWxzLkZPUkNJTkdfRElTRUFTRV9NT0RFTF9fTU9EVUxBVElPTl9GTE9PUikKKwkJCQkJCQkuZ2V0VGV4dCgpKSk7CisJCX0KKworCQlpZiAoZGlzZWFzZU1vZGVsIGluc3RhbmNlb2YgR2F1c3NpYW5Gb3JjaW5nRGlzZWFzZU1vZGVsKSB7CisJCQlHYXVzc2lhbkZvcmNpbmdEaXNlYXNlTW9kZWwgbW9kZWwgPSAoR2F1c3NpYW5Gb3JjaW5nRGlzZWFzZU1vZGVsKSBkaXNlYXNlTW9kZWw7CisKKwkJCW1vZGVsLnNldFNpZ21hMihEb3VibGUKKwkJCQkJLnBhcnNlRG91YmxlKG1hcAorCQkJCQkJCS5nZXQoRm9yY2luZ1BhY2thZ2UuTGl0ZXJhbHMuR0FVU1NJQU5fRk9SQ0lOR19ESVNFQVNFX01PREVMX19TSUdNQTIpCisJCQkJCQkJLmdldFRleHQoKSkpOworCQkJbW9kZWwuc2V0TW9kdWxhdGlvblBlcmlvZChEb3VibGUKKwkJCQkJLnBhcnNlRG91YmxlKG1hcAorCQkJCQkJCS5nZXQoRm9yY2luZ1BhY2thZ2UuTGl0ZXJhbHMuR0FVU1NJQU5fRk9SQ0lOR19ESVNFQVNFX01PREVMX19NT0RVTEFUSU9OX1BFUklPRCkKKwkJCQkJCQkuZ2V0VGV4dCgpKSk7CisJCQltb2RlbC5zZXRNb2R1bGF0aW9uUGhhc2VTaGlmdChEb3VibGUKKwkJCQkJLnBhcnNlRG91YmxlKG1hcAorCQkJCQkJCS5nZXQoRm9yY2luZ1BhY2thZ2UuTGl0ZXJhbHMuR0FVU1NJQU5fRk9SQ0lOR19ESVNFQVNFX01PREVMX19NT0RVTEFUSU9OX1BIQVNFX1NISUZUKQorCQkJCQkJCS5nZXRUZXh0KCkpKTsKKwkJCW1vZGVsLnNldE1vZHVsYXRpb25GbG9vcihEb3VibGUKKwkJCQkJLnBhcnNlRG91YmxlKG1hcAorCQkJCQkJCS5nZXQoRm9yY2luZ1BhY2thZ2UuTGl0ZXJhbHMuR0FVU1NJQU5fRk9SQ0lOR19ESVNFQVNFX01PREVMX19NT0RVTEFUSU9OX0ZMT09SKQorCQkJCQkJCS5nZXRUZXh0KCkpKTsKKwkJfQorCisJCWlmIChkaXNlYXNlTW9kZWwgaW5zdGFuY2VvZiBHYXVzc2lhbjJGb3JjaW5nRGlzZWFzZU1vZGVsKSB7CisJCQlHYXVzc2lhbjJGb3JjaW5nRGlzZWFzZU1vZGVsIG1vZGVsID0gKEdhdXNzaWFuMkZvcmNpbmdEaXNlYXNlTW9kZWwpIGRpc2Vhc2VNb2RlbDsKKworCQkJbW9kZWwuc2V0U2lnbWEyXzIoRG91YmxlCisJCQkJCS5wYXJzZURvdWJsZShtYXAKKwkJCQkJCQkuZ2V0KEZvcmNpbmdQYWNrYWdlLkxpdGVyYWxzLkdBVVNTSUFOMl9GT1JDSU5HX0RJU0VBU0VfTU9ERUxfX1NJR01BMl8yKQorCQkJCQkJCS5nZXRUZXh0KCkpKTsKKwkJCW1vZGVsLnNldEF0dDEoRG91YmxlCisJCQkJCS5wYXJzZURvdWJsZShtYXAKKwkJCQkJCQkuZ2V0KEZvcmNpbmdQYWNrYWdlLkxpdGVyYWxzLkdBVVNTSUFOMl9GT1JDSU5HX0RJU0VBU0VfTU9ERUxfX0FUVDEpCisJCQkJCQkJLmdldFRleHQoKSkpOworCQkJbW9kZWwuc2V0QXR0MihEb3VibGUKKwkJCQkJLnBhcnNlRG91YmxlKG1hcAorCQkJCQkJCS5nZXQoRm9yY2luZ1BhY2thZ2UuTGl0ZXJhbHMuR0FVU1NJQU4yX0ZPUkNJTkdfRElTRUFTRV9NT0RFTF9fQVRUMikKKwkJCQkJCQkuZ2V0VGV4dCgpKSk7CisJCQltb2RlbC5zZXRBdHQzKERvdWJsZQorCQkJCQkucGFyc2VEb3VibGUobWFwCisJCQkJCQkJLmdldChGb3JjaW5nUGFja2FnZS5MaXRlcmFscy5HQVVTU0lBTjJfRk9SQ0lOR19ESVNFQVNFX01PREVMX19BVFQzKQorCQkJCQkJCS5nZXRUZXh0KCkpKTsKKwkJCW1vZGVsLnNldEF0dDQoRG91YmxlCisJCQkJCS5wYXJzZURvdWJsZShtYXAKKwkJCQkJCQkuZ2V0KEZvcmNpbmdQYWNrYWdlLkxpdGVyYWxzLkdBVVNTSUFOMl9GT1JDSU5HX0RJU0VBU0VfTU9ERUxfX0FUVDQpCisJCQkJCQkJLmdldFRleHQoKSkpOworCQl9CisKKwkJaWYgKGRpc2Vhc2VNb2RlbCBpbnN0YW5jZW9mIEdhdXNzaWFuM0ZvcmNpbmdEaXNlYXNlTW9kZWwpIHsKKwkJCUdhdXNzaWFuM0ZvcmNpbmdEaXNlYXNlTW9kZWwgbW9kZWwgPSAoR2F1c3NpYW4zRm9yY2luZ0Rpc2Vhc2VNb2RlbCkgZGlzZWFzZU1vZGVsOworCisJCQltb2RlbC5zZXRTaWdtYTJfMyhEb3VibGUKKwkJCQkJLnBhcnNlRG91YmxlKG1hcAorCQkJCQkJCS5nZXQoRm9yY2luZ1BhY2thZ2UuTGl0ZXJhbHMuR0FVU1NJQU4zX0ZPUkNJTkdfRElTRUFTRV9NT0RFTF9fU0lHTUEyXzMpCisJCQkJCQkJLmdldFRleHQoKSkpOworCQkJbW9kZWwuc2V0VHJhbnNtaXNzaW9uUmF0ZTIoRG91YmxlCisJCQkJCS5wYXJzZURvdWJsZShtYXAKKwkJCQkJCQkuZ2V0KEZvcmNpbmdQYWNrYWdlLkxpdGVyYWxzLkdBVVNTSUFOM19GT1JDSU5HX0RJU0VBU0VfTU9ERUxfX1RSQU5TTUlTU0lPTl9SQVRFMikKKwkJCQkJCQkuZ2V0VGV4dCgpKSk7CisJCQltb2RlbC5zZXRUcmFuc21pc3Npb25SYXRlMyhEb3VibGUKKwkJCQkJLnBhcnNlRG91YmxlKG1hcAorCQkJCQkJCS5nZXQoRm9yY2luZ1BhY2thZ2UuTGl0ZXJhbHMuR0FVU1NJQU4zX0ZPUkNJTkdfRElTRUFTRV9NT0RFTF9fVFJBTlNNSVNTSU9OX1JBVEUzKQorCQkJCQkJCS5nZXRUZXh0KCkpKTsKKwkJCW1vZGVsLnNldE1vZHVsYXRpb25GbG9vcl8yKERvdWJsZQorCQkJCQkucGFyc2VEb3VibGUobWFwCisJCQkJCQkJLmdldChGb3JjaW5nUGFja2FnZS5MaXRlcmFscy5HQVVTU0lBTjNfRk9SQ0lOR19ESVNFQVNFX01PREVMX19NT0RVTEFUSU9OX0ZMT09SXzIpCisJCQkJCQkJLmdldFRleHQoKSkpOworCQl9CisJfQorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnVpLndpemFyZHMuU3RhbmRhcmREaXNlYXNlTW9kZWxQcm9wZXJ0eUVkaXRvciN2YWxpZGF0ZSgpCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIGJvb2xlYW4gdmFsaWRhdGUoKSB7CisJCWlmICghc3VwZXIudmFsaWRhdGUoKSkgeworCQkJcmV0dXJuIGZhbHNlOworCQl9CisKKwkJVGV4dCB0ZXh0OworCisJCS8vIEZPUkNJTkdfRElTRUFTRV9NT0RFTF9fU0VBU09OQUxfTU9EVUxBVElPTl9FWFBPTkVOVAorCQl0ZXh0ID0gbWFwCisJCQkJLmdldChGb3JjaW5nUGFja2FnZS5MaXRlcmFscy5GT1JDSU5HX0RJU0VBU0VfTU9ERUxfX01PRFVMQVRJT05fRVhQT05FTlQpOworCQlpZiAodGV4dCAhPSBudWxsKSB7CisJCQlpZiAodGV4dC5nZXRUZXh0KCkuZXF1YWxzKCIiKSkgeworCQkJCWVycm9yTWVzc2FnZSA9IEZvcmNpbmdEaXNlYXNlV2l6YXJkTWVzc2FnZXMKKwkJCQkJCS5nZXRTdHJpbmcoIm1vZHVsYXRpb25FeHBvbmVudE1JU1NJTkciKTsgLy8kTk9OLU5MUy0xJAorCQkJCXJldHVybiBmYWxzZTsKKwkJCX0gZWxzZSBpZiAoIWlzVmFsaWREb3VibGVWYWx1ZSh0ZXh0LmdldFRleHQoKSkpIHsKKwkJCQllcnJvck1lc3NhZ2UgPSBGb3JjaW5nRGlzZWFzZVdpemFyZE1lc3NhZ2VzCisJCQkJCQkuZ2V0U3RyaW5nKCJtb2R1bGF0aW9uRXhwb25lbnRJTlZBTElEIik7IC8vJE5PTi1OTFMtMSQKKwkJCQlyZXR1cm4gZmFsc2U7CisJCQl9CisJCX0KKworCQkvLyBGT1JDSU5HX0RJU0VBU0VfTU9ERUxfX01PRFVMQVRJT05fUEVSSU9ECisJCXRleHQgPSBtYXAKKwkJCQkuZ2V0KEZvcmNpbmdQYWNrYWdlLkxpdGVyYWxzLkZPUkNJTkdfRElTRUFTRV9NT0RFTF9fTU9EVUxBVElPTl9QRVJJT0QpOworCQlpZiAodGV4dCAhPSBudWxsKSB7CisJCQlpZiAodGV4dC5nZXRUZXh0KCkuZXF1YWxzKCIiKSkgeworCQkJCWVycm9yTWVzc2FnZSA9IEZvcmNpbmdEaXNlYXNlV2l6YXJkTWVzc2FnZXMKKwkJCQkJCS5nZXRTdHJpbmcoIm1vZHVsYXRpb25QZXJpb2RNSVNTSU5HIik7IC8vJE5PTi1OTFMtMSQKKwkJCQlyZXR1cm4gZmFsc2U7CisJCQl9IGVsc2UgaWYgKCFpc1ZhbGlkRG91YmxlVmFsdWUodGV4dC5nZXRUZXh0KCkpKSB7CisJCQkJZXJyb3JNZXNzYWdlID0gRm9yY2luZ0Rpc2Vhc2VXaXphcmRNZXNzYWdlcworCQkJCQkJLmdldFN0cmluZygibW9kdWxhdGlvblBlcmlvZElOVkFMSUQiKTsgLy8kTk9OLU5MUy0xJAorCQkJCXJldHVybiBmYWxzZTsKKwkJCX0KKwkJfQorCisJCS8vIEZPUkNJTkdfRElTRUFTRV9NT0RFTF9fTU9EVUxBVElPTl9QSEFTRV9TSElGVAorCQl0ZXh0ID0gbWFwCisJCQkJLmdldChGb3JjaW5nUGFja2FnZS5MaXRlcmFscy5GT1JDSU5HX0RJU0VBU0VfTU9ERUxfX01PRFVMQVRJT05fUEhBU0VfU0hJRlQpOworCQlpZiAodGV4dCAhPSBudWxsKSB7CisJCQlpZiAodGV4dC5nZXRUZXh0KCkuZXF1YWxzKCIiKSkgeworCQkJCWVycm9yTWVzc2FnZSA9IEZvcmNpbmdEaXNlYXNlV2l6YXJkTWVzc2FnZXMKKwkJCQkJCS5nZXRTdHJpbmcoIm1vZHVsYXRpb25QaGFzZU1JU1NJTkciKTsgLy8kTk9OLU5MUy0xJAorCQkJCXJldHVybiBmYWxzZTsKKwkJCX0gZWxzZSBpZiAoIWlzVmFsaWREb3VibGVWYWx1ZSh0ZXh0LmdldFRleHQoKSkpIHsKKwkJCQllcnJvck1lc3NhZ2UgPSBGb3JjaW5nRGlzZWFzZVdpemFyZE1lc3NhZ2VzCisJCQkJCQkuZ2V0U3RyaW5nKCJtb2R1bGF0aW9uUGhhc2VJTlZBTElEIik7IC8vJE5PTi1OTFMtMSQKKwkJCQlyZXR1cm4gZmFsc2U7CisJCQl9CisJCX0KKworCQkvLyBGT1JDSU5HX0RJU0VBU0VfTU9ERUxfX1NFQVNPTkFMX01PRFVMQVRJT05fRkxPT1IKKwkJdGV4dCA9IG1hcAorCQkJCS5nZXQoRm9yY2luZ1BhY2thZ2UuTGl0ZXJhbHMuRk9SQ0lOR19ESVNFQVNFX01PREVMX19NT0RVTEFUSU9OX0ZMT09SKTsKKwkJaWYgKHRleHQgIT0gbnVsbCkgeworCQkJaWYgKHRleHQuZ2V0VGV4dCgpLmVxdWFscygiIikpIHsKKwkJCQllcnJvck1lc3NhZ2UgPSBGb3JjaW5nRGlzZWFzZVdpemFyZE1lc3NhZ2VzCisJCQkJCQkuZ2V0U3RyaW5nKCJtb2R1bGF0aW9uRmxvb3JNSVNTSU5HIik7IC8vJE5PTi1OTFMtMSQKKwkJCQlyZXR1cm4gZmFsc2U7CisJCQl9IGVsc2UgaWYgKCFpc1ZhbGlkRG91YmxlVmFsdWUodGV4dC5nZXRUZXh0KCkpKSB7CisJCQkJZXJyb3JNZXNzYWdlID0gRm9yY2luZ0Rpc2Vhc2VXaXphcmRNZXNzYWdlcworCQkJCQkJLmdldFN0cmluZygibW9kdWxhdGlvbkZsb29ySU5WQUxJRCIpOyAvLyROT04tTkxTLTEkCisJCQkJcmV0dXJuIGZhbHNlOworCQkJfQorCQl9CisKKwkJLy8gR0FVU1NJQU5fRk9SQ0lOR19ESVNFQVNFX01PREVMX19TSUdNQTIKKwkJdGV4dCA9IG1hcAorCQkJCS5nZXQoRm9yY2luZ1BhY2thZ2UuTGl0ZXJhbHMuR0FVU1NJQU5fRk9SQ0lOR19ESVNFQVNFX01PREVMX19TSUdNQTIpOworCQlpZiAodGV4dCAhPSBudWxsKSB7CisJCQlpZiAodGV4dC5nZXRUZXh0KCkuZXF1YWxzKCIiKSkgeworCQkJCWVycm9yTWVzc2FnZSA9IEZvcmNpbmdEaXNlYXNlV2l6YXJkTWVzc2FnZXMKKwkJCQkJCS5nZXRTdHJpbmcoInNpZ21hMk1JU1NJTkciKTsgLy8kTk9OLU5MUy0xJAorCQkJCXJldHVybiBmYWxzZTsKKwkJCX0gZWxzZSBpZiAoIWlzVmFsaWREb3VibGVWYWx1ZSh0ZXh0LmdldFRleHQoKSkpIHsKKwkJCQllcnJvck1lc3NhZ2UgPSBGb3JjaW5nRGlzZWFzZVdpemFyZE1lc3NhZ2VzCisJCQkJCQkuZ2V0U3RyaW5nKCJzaWdtYTJJTlZBTElEIik7IC8vJE5PTi1OTFMtMSQKKwkJCQlyZXR1cm4gZmFsc2U7CisJCQl9CisJCX0KKworCQkvLyBHQVVTU0lBTl9GT1JDSU5HX0RJU0VBU0VfTU9ERUxfX01PRFVMQVRJT05fUEVSSU9ECisJCXRleHQgPSBtYXAKKwkJCQkuZ2V0KEZvcmNpbmdQYWNrYWdlLkxpdGVyYWxzLkdBVVNTSUFOX0ZPUkNJTkdfRElTRUFTRV9NT0RFTF9fTU9EVUxBVElPTl9QRVJJT0QpOworCQlpZiAodGV4dCAhPSBudWxsKSB7CisJCQlpZiAodGV4dC5nZXRUZXh0KCkuZXF1YWxzKCIiKSkgeworCQkJCWVycm9yTWVzc2FnZSA9IEZvcmNpbmdEaXNlYXNlV2l6YXJkTWVzc2FnZXMKKwkJCQkJCS5nZXRTdHJpbmcoIm1vZHVsYXRpb25QZXJpb2RNSVNTSU5HIik7IC8vJE5PTi1OTFMtMSQKKwkJCQlyZXR1cm4gZmFsc2U7CisJCQl9IGVsc2UgaWYgKCFpc1ZhbGlkRG91YmxlVmFsdWUodGV4dC5nZXRUZXh0KCkpKSB7CisJCQkJZXJyb3JNZXNzYWdlID0gRm9yY2luZ0Rpc2Vhc2VXaXphcmRNZXNzYWdlcworCQkJCQkJLmdldFN0cmluZygibW9kdWxhdGlvblBlcmlvZElOVkFMSUQiKTsgLy8kTk9OLU5MUy0xJAorCQkJCXJldHVybiBmYWxzZTsKKwkJCX0KKwkJfQorCisJCS8vIEdBVVNTSUFOX0ZPUkNJTkdfRElTRUFTRV9NT0RFTF9fTU9EVUxBVElPTl9QSEFTRV9TSElGVAorCQl0ZXh0ID0gbWFwCisJCQkJLmdldChGb3JjaW5nUGFja2FnZS5MaXRlcmFscy5HQVVTU0lBTl9GT1JDSU5HX0RJU0VBU0VfTU9ERUxfX01PRFVMQVRJT05fUEhBU0VfU0hJRlQpOworCQlpZiAodGV4dCAhPSBudWxsKSB7CisJCQlpZiAodGV4dC5nZXRUZXh0KCkuZXF1YWxzKCIiKSkgeworCQkJCWVycm9yTWVzc2FnZSA9IEZvcmNpbmdEaXNlYXNlV2l6YXJkTWVzc2FnZXMKKwkJCQkJCS5nZXRTdHJpbmcoIm1vZHVsYXRpb25QaGFzZU1JU1NJTkciKTsgLy8kTk9OLU5MUy0xJAorCQkJCXJldHVybiBmYWxzZTsKKwkJCX0gZWxzZSBpZiAoIWlzVmFsaWREb3VibGVWYWx1ZSh0ZXh0LmdldFRleHQoKSkpIHsKKwkJCQllcnJvck1lc3NhZ2UgPSBGb3JjaW5nRGlzZWFzZVdpemFyZE1lc3NhZ2VzCisJCQkJCQkuZ2V0U3RyaW5nKCJtb2R1bGF0aW9uUGhhc2VJTlZBTElEIik7IC8vJE5PTi1OTFMtMSQKKwkJCQlyZXR1cm4gZmFsc2U7CisJCQl9CisJCX0KKworCQkvLyBHQVVTU0lBTl9GT1JDSU5HX0RJU0VBU0VfTU9ERUxfX1NFQVNPTkFMX01PRFVMQVRJT05fRkxPT1IKKwkJdGV4dCA9IG1hcAorCQkJCS5nZXQoRm9yY2luZ1BhY2thZ2UuTGl0ZXJhbHMuR0FVU1NJQU5fRk9SQ0lOR19ESVNFQVNFX01PREVMX19NT0RVTEFUSU9OX0ZMT09SKTsKKwkJaWYgKHRleHQgIT0gbnVsbCkgeworCQkJaWYgKHRleHQuZ2V0VGV4dCgpLmVxdWFscygiIikpIHsKKwkJCQllcnJvck1lc3NhZ2UgPSBGb3JjaW5nRGlzZWFzZVdpemFyZE1lc3NhZ2VzCisJCQkJCQkuZ2V0U3RyaW5nKCJtb2R1bGF0aW9uRmxvb3JNSVNTSU5HIik7IC8vJE5PTi1OTFMtMSQKKwkJCQlyZXR1cm4gZmFsc2U7CisJCQl9IGVsc2UgaWYgKCFpc1ZhbGlkRG91YmxlVmFsdWUodGV4dC5nZXRUZXh0KCkpKSB7CisJCQkJZXJyb3JNZXNzYWdlID0gRm9yY2luZ0Rpc2Vhc2VXaXphcmRNZXNzYWdlcworCQkJCQkJLmdldFN0cmluZygibW9kdWxhdGlvbkZsb29ySU5WQUxJRCIpOyAvLyROT04tTkxTLTEkCisJCQkJcmV0dXJuIGZhbHNlOworCQkJfQorCQl9CisKKwkJLy8gR0FVU1NJQU4yX0ZPUkNJTkdfRElTRUFTRV9NT0RFTF9fQVRUMQorCQl0ZXh0ID0gbWFwCisJCQkJLmdldChGb3JjaW5nUGFja2FnZS5MaXRlcmFscy5HQVVTU0lBTjJfRk9SQ0lOR19ESVNFQVNFX01PREVMX19BVFQxKTsKKwkJaWYgKHRleHQgIT0gbnVsbCkgeworCQkJaWYgKHRleHQuZ2V0VGV4dCgpLmVxdWFscygiIikpIHsKKwkJCQllcnJvck1lc3NhZ2UgPSBGb3JjaW5nRGlzZWFzZVdpemFyZE1lc3NhZ2VzCisJCQkJCQkuZ2V0U3RyaW5nKCJhdHQxTUlTU0lORyIpOyAvLyROT04tTkxTLTEkCisJCQkJcmV0dXJuIGZhbHNlOworCQkJfSBlbHNlIGlmICghaXNWYWxpZERvdWJsZVZhbHVlKHRleHQuZ2V0VGV4dCgpKSkgeworCQkJCWVycm9yTWVzc2FnZSA9IEZvcmNpbmdEaXNlYXNlV2l6YXJkTWVzc2FnZXMKKwkJCQkJCS5nZXRTdHJpbmcoImF0dDFJTlZBTElEIik7IC8vJE5PTi1OTFMtMSQKKwkJCQlyZXR1cm4gZmFsc2U7CisJCQl9CisJCX0KKworCQkvLyBHQVVTU0lBTjJfRk9SQ0lOR19ESVNFQVNFX01PREVMX19BVFQyCisJCXRleHQgPSBtYXAKKwkJCQkuZ2V0KEZvcmNpbmdQYWNrYWdlLkxpdGVyYWxzLkdBVVNTSUFOMl9GT1JDSU5HX0RJU0VBU0VfTU9ERUxfX0FUVDIpOworCQlpZiAodGV4dCAhPSBudWxsKSB7CisJCQlpZiAodGV4dC5nZXRUZXh0KCkuZXF1YWxzKCIiKSkgeworCQkJCWVycm9yTWVzc2FnZSA9IEZvcmNpbmdEaXNlYXNlV2l6YXJkTWVzc2FnZXMKKwkJCQkJCS5nZXRTdHJpbmcoImF0dDJNSVNTSU5HIik7IC8vJE5PTi1OTFMtMSQKKwkJCQlyZXR1cm4gZmFsc2U7CisJCQl9IGVsc2UgaWYgKCFpc1ZhbGlkRG91YmxlVmFsdWUodGV4dC5nZXRUZXh0KCkpKSB7CisJCQkJZXJyb3JNZXNzYWdlID0gRm9yY2luZ0Rpc2Vhc2VXaXphcmRNZXNzYWdlcworCQkJCQkJLmdldFN0cmluZygiYXR0MklOVkFMSUQiKTsgLy8kTk9OLU5MUy0xJAorCQkJCXJldHVybiBmYWxzZTsKKwkJCX0KKwkJfQorCisJCS8vIEdBVVNTSUFOMl9GT1JDSU5HX0RJU0VBU0VfTU9ERUxfX0FUVDMKKwkJdGV4dCA9IG1hcAorCQkJCS5nZXQoRm9yY2luZ1BhY2thZ2UuTGl0ZXJhbHMuR0FVU1NJQU4yX0ZPUkNJTkdfRElTRUFTRV9NT0RFTF9fQVRUMyk7CisJCWlmICh0ZXh0ICE9IG51bGwpIHsKKwkJCWlmICh0ZXh0LmdldFRleHQoKS5lcXVhbHMoIiIpKSB7CisJCQkJZXJyb3JNZXNzYWdlID0gRm9yY2luZ0Rpc2Vhc2VXaXphcmRNZXNzYWdlcworCQkJCQkJLmdldFN0cmluZygiYXR0M01JU1NJTkciKTsgLy8kTk9OLU5MUy0xJAorCQkJCXJldHVybiBmYWxzZTsKKwkJCX0gZWxzZSBpZiAoIWlzVmFsaWREb3VibGVWYWx1ZSh0ZXh0LmdldFRleHQoKSkpIHsKKwkJCQllcnJvck1lc3NhZ2UgPSBGb3JjaW5nRGlzZWFzZVdpemFyZE1lc3NhZ2VzCisJCQkJCQkuZ2V0U3RyaW5nKCJhdHQzSU5WQUxJRCIpOyAvLyROT04tTkxTLTEkCisJCQkJcmV0dXJuIGZhbHNlOworCQkJfQorCQl9CisKKwkJLy8gR0FVU1NJQU4yX0ZPUkNJTkdfRElTRUFTRV9NT0RFTF9fQVRUNAorCQl0ZXh0ID0gbWFwCisJCQkJLmdldChGb3JjaW5nUGFja2FnZS5MaXRlcmFscy5HQVVTU0lBTjJfRk9SQ0lOR19ESVNFQVNFX01PREVMX19BVFQ0KTsKKwkJaWYgKHRleHQgIT0gbnVsbCkgeworCQkJaWYgKHRleHQuZ2V0VGV4dCgpLmVxdWFscygiIikpIHsKKwkJCQllcnJvck1lc3NhZ2UgPSBGb3JjaW5nRGlzZWFzZVdpemFyZE1lc3NhZ2VzCisJCQkJCQkuZ2V0U3RyaW5nKCJhdHQ0TUlTU0lORyIpOyAvLyROT04tTkxTLTEkCisJCQkJcmV0dXJuIGZhbHNlOworCQkJfSBlbHNlIGlmICghaXNWYWxpZERvdWJsZVZhbHVlKHRleHQuZ2V0VGV4dCgpKSkgeworCQkJCWVycm9yTWVzc2FnZSA9IEZvcmNpbmdEaXNlYXNlV2l6YXJkTWVzc2FnZXMKKwkJCQkJCS5nZXRTdHJpbmcoImF0dDRJTlZBTElEIik7IC8vJE5PTi1OTFMtMSQKKwkJCQlyZXR1cm4gZmFsc2U7CisJCQl9CisJCX0KKworCQkvLyBHQVVTU0lBTjJfRk9SQ0lOR19ESVNFQVNFX01PREVMX19TSUdNQTJfMgorCQl0ZXh0ID0gbWFwCisJCQkJLmdldChGb3JjaW5nUGFja2FnZS5MaXRlcmFscy5HQVVTU0lBTjJfRk9SQ0lOR19ESVNFQVNFX01PREVMX19TSUdNQTJfMik7CisJCWlmICh0ZXh0ICE9IG51bGwpIHsKKwkJCWlmICh0ZXh0LmdldFRleHQoKS5lcXVhbHMoIiIpKSB7CisJCQkJZXJyb3JNZXNzYWdlID0gRm9yY2luZ0Rpc2Vhc2VXaXphcmRNZXNzYWdlcworCQkJCQkJLmdldFN0cmluZygic2lnbWEyXzJNSVNTSU5HIik7IC8vJE5PTi1OTFMtMSQKKwkJCQlyZXR1cm4gZmFsc2U7CisJCQl9IGVsc2UgaWYgKCFpc1ZhbGlkRG91YmxlVmFsdWUodGV4dC5nZXRUZXh0KCkpKSB7CisJCQkJZXJyb3JNZXNzYWdlID0gRm9yY2luZ0Rpc2Vhc2VXaXphcmRNZXNzYWdlcworCQkJCQkJLmdldFN0cmluZygic2lnbWEyXzJJTlZBTElEIik7IC8vJE5PTi1OTFMtMSQKKwkJCQlyZXR1cm4gZmFsc2U7CisJCQl9CisJCX0KKworCQkvLyBHQVVTU0lBTjJfRk9SQ0lOR19ESVNFQVNFX01PREVMX19TSUdNQTJfMworCQl0ZXh0ID0gbWFwCisJCQkJLmdldChGb3JjaW5nUGFja2FnZS5MaXRlcmFscy5HQVVTU0lBTjNfRk9SQ0lOR19ESVNFQVNFX01PREVMX19TSUdNQTJfMyk7CisJCWlmICh0ZXh0ICE9IG51bGwpIHsKKwkJCWlmICh0ZXh0LmdldFRleHQoKS5lcXVhbHMoIiIpKSB7CisJCQkJZXJyb3JNZXNzYWdlID0gRm9yY2luZ0Rpc2Vhc2VXaXphcmRNZXNzYWdlcworCQkJCQkJLmdldFN0cmluZygic2lnbWEyXzNNSVNTSU5HIik7IC8vJE5PTi1OTFMtMSQKKwkJCQlyZXR1cm4gZmFsc2U7CisJCQl9IGVsc2UgaWYgKCFpc1ZhbGlkRG91YmxlVmFsdWUodGV4dC5nZXRUZXh0KCkpKSB7CisJCQkJZXJyb3JNZXNzYWdlID0gRm9yY2luZ0Rpc2Vhc2VXaXphcmRNZXNzYWdlcworCQkJCQkJLmdldFN0cmluZygic2lnbWEyXzNJTlZBTElEIik7IC8vJE5PTi1OTFMtMSQKKwkJCQlyZXR1cm4gZmFsc2U7CisJCQl9CisJCX0KKworCQkvLyBHQVVTU0lBTjNfRk9SQ0lOR19ESVNFQVNFX01PREVMX19UUkFOU01JU1NJT05fUkFURTIKKwkJdGV4dCA9IG1hcAorCQkJCS5nZXQoRm9yY2luZ1BhY2thZ2UuTGl0ZXJhbHMuR0FVU1NJQU4zX0ZPUkNJTkdfRElTRUFTRV9NT0RFTF9fVFJBTlNNSVNTSU9OX1JBVEUyKTsKKwkJaWYgKHRleHQgIT0gbnVsbCkgeworCQkJaWYgKHRleHQuZ2V0VGV4dCgpLmVxdWFscygiIikpIHsKKwkJCQllcnJvck1lc3NhZ2UgPSBGb3JjaW5nRGlzZWFzZVdpemFyZE1lc3NhZ2VzCisJCQkJCQkuZ2V0U3RyaW5nKCJ0cmFuc21pc3Npb25SYXRlMk1JU1NJTkciKTsgLy8kTk9OLU5MUy0xJAorCQkJCXJldHVybiBmYWxzZTsKKwkJCX0gZWxzZSBpZiAoIWlzVmFsaWREb3VibGVWYWx1ZSh0ZXh0LmdldFRleHQoKSkpIHsKKwkJCQllcnJvck1lc3NhZ2UgPSBGb3JjaW5nRGlzZWFzZVdpemFyZE1lc3NhZ2VzCisJCQkJCQkuZ2V0U3RyaW5nKCJ0cmFuc21pc3Npb25SYXRlMklOVkFMSUQiKTsgLy8kTk9OLU5MUy0xJAorCQkJCXJldHVybiBmYWxzZTsKKwkJCX0KKwkJfQorCisJCS8vIEdBVVNTSUFOM19GT1JDSU5HX0RJU0VBU0VfTU9ERUxfX1RSQU5TTUlTU0lPTl9SQVRFMworCQl0ZXh0ID0gbWFwCisJCQkJLmdldChGb3JjaW5nUGFja2FnZS5MaXRlcmFscy5HQVVTU0lBTjNfRk9SQ0lOR19ESVNFQVNFX01PREVMX19UUkFOU01JU1NJT05fUkFURTMpOworCQlpZiAodGV4dCAhPSBudWxsKSB7CisJCQlpZiAodGV4dC5nZXRUZXh0KCkuZXF1YWxzKCIiKSkgeworCQkJCWVycm9yTWVzc2FnZSA9IEZvcmNpbmdEaXNlYXNlV2l6YXJkTWVzc2FnZXMKKwkJCQkJCS5nZXRTdHJpbmcoInRyYW5zbWlzc2lvblJhdGUzTUlTU0lORyIpOyAvLyROT04tTkxTLTEkCisJCQkJcmV0dXJuIGZhbHNlOworCQkJfSBlbHNlIGlmICghaXNWYWxpZERvdWJsZVZhbHVlKHRleHQuZ2V0VGV4dCgpKSkgeworCQkJCWVycm9yTWVzc2FnZSA9IEZvcmNpbmdEaXNlYXNlV2l6YXJkTWVzc2FnZXMKKwkJCQkJCS5nZXRTdHJpbmcoInRyYW5zbWlzc2lvblJhdGUzSU5WQUxJRCIpOyAvLyROT04tTkxTLTEkCisJCQkJcmV0dXJuIGZhbHNlOworCQkJfQorCQl9CisKKwkJLy8gR0FVU1NJQU4zX0ZPUkNJTkdfRElTRUFTRV9NT0RFTF9fTU9EVUxBVElPTl9GTE9PUl8yCisJCXRleHQgPSBtYXAKKwkJCQkuZ2V0KEZvcmNpbmdQYWNrYWdlLkxpdGVyYWxzLkdBVVNTSUFOM19GT1JDSU5HX0RJU0VBU0VfTU9ERUxfX01PRFVMQVRJT05fRkxPT1JfMik7CisJCWlmICh0ZXh0ICE9IG51bGwpIHsKKwkJCWlmICh0ZXh0LmdldFRleHQoKS5lcXVhbHMoIiIpKSB7CisJCQkJZXJyb3JNZXNzYWdlID0gRm9yY2luZ0Rpc2Vhc2VXaXphcmRNZXNzYWdlcworCQkJCQkJLmdldFN0cmluZygibW9kdWxhdGlvbkZsb29yXzJNSVNTSU5HIik7IC8vJE5PTi1OTFMtMSQKKwkJCQlyZXR1cm4gZmFsc2U7CisJCQl9IGVsc2UgaWYgKCFpc1ZhbGlkRG91YmxlVmFsdWUodGV4dC5nZXRUZXh0KCkpKSB7CisJCQkJZXJyb3JNZXNzYWdlID0gRm9yY2luZ0Rpc2Vhc2VXaXphcmRNZXNzYWdlcworCQkJCQkJLmdldFN0cmluZygibW9kdWxhdGlvbkZsb29yXzJJTlZBTElEIik7IC8vJE5PTi1OTFMtMSQKKwkJCQlyZXR1cm4gZmFsc2U7CisJCQl9CisJCX0KKworCQlyZXR1cm4gdHJ1ZTsKKwl9CisKK30gLy8gRm9yY2luZ0Rpc2Vhc2VNb2RlbFByb3BlcnR5RWRpdG9yCmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy5mb3JjaW5nL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL2Rpc2Vhc2Vtb2RlbHMvZm9yY2luZy9wcmVzZW50YXRpb24vRm9yY2luZ0Rpc2Vhc2VNb2RlbFByb3BlcnR5RWRpdG9yQWRhcHRlckZhY3RvcnkuamF2YSBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzLmZvcmNpbmcvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvZGlzZWFzZW1vZGVscy9mb3JjaW5nL3ByZXNlbnRhdGlvbi9Gb3JjaW5nRGlzZWFzZU1vZGVsUHJvcGVydHlFZGl0b3JBZGFwdGVyRmFjdG9yeS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQwMjU0ZjMKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy5mb3JjaW5nL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL2Rpc2Vhc2Vtb2RlbHMvZm9yY2luZy9wcmVzZW50YXRpb24vRm9yY2luZ0Rpc2Vhc2VNb2RlbFByb3BlcnR5RWRpdG9yQWRhcHRlckZhY3RvcnkuamF2YQpAQCAtMCwwICsxLDU5IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy5mb3JjaW5nLnByZXNlbnRhdGlvbjsKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDcsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuQWRhcHRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZm9yY2luZy51dGlsLkZvcmNpbmdBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnVpLmFkYXB0ZXJzLmRpc2Vhc2Vtb2RlbHByb3BlcnR5ZWRpdG9yLkRpc2Vhc2VNb2RlbFByb3BlcnR5RWRpdG9yQWRhcHRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnVpLmFkYXB0ZXJzLmRpc2Vhc2Vtb2RlbHByb3BlcnR5ZWRpdG9yLkRpc2Vhc2VNb2RlbFByb3BlcnR5RWRpdG9yQWRhcHRlckZhY3Rvcnk7CisKKy8qKgorICogQGF1dGhvciBqYW1lcworICogCisgKi8KK3B1YmxpYyBjbGFzcyBGb3JjaW5nRGlzZWFzZU1vZGVsUHJvcGVydHlFZGl0b3JBZGFwdGVyRmFjdG9yeSBleHRlbmRzCisJCUZvcmNpbmdBZGFwdGVyRmFjdG9yeSBpbXBsZW1lbnRzCisJCURpc2Vhc2VNb2RlbFByb3BlcnR5RWRpdG9yQWRhcHRlckZhY3RvcnkgeworCisJLyoqCisJICogCisJICovCisJcHVibGljIEZvcmNpbmdEaXNlYXNlTW9kZWxQcm9wZXJ0eUVkaXRvckFkYXB0ZXJGYWN0b3J5KCkgeworCQlzdXBlcigpOworCQlEaXNlYXNlTW9kZWxQcm9wZXJ0eUVkaXRvckFkYXB0ZXJGYWN0b3J5LklOU1RBTkNFCisJCQkJLmFkZEFkYXB0ZXJGYWN0b3J5KHRoaXMpOworCX0KKworCS8qKgorCSAqIAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZUZvcmNpbmdEaXNlYXNlTW9kZWxBZGFwdGVyKCkgeworCQlyZXR1cm4gbmV3IEZvcmNpbmdEaXNlYXNlTW9kZWxBZGFwdGVyKCk7CisJfQorCQorCS8qKgorCSAqIAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZUdhdXNzaWFuRm9yY2luZ0Rpc2Vhc2VNb2RlbEFkYXB0ZXIoKSB7CisJCXJldHVybiBuZXcgRm9yY2luZ0Rpc2Vhc2VNb2RlbEFkYXB0ZXIoKTsKKwl9CisKKwkvKioKKwkgKiAKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5mb3JjaW5nLnV0aWwuRm9yY2luZ0FkYXB0ZXJGYWN0b3J5I2lzRmFjdG9yeUZvclR5cGUoamF2YS5sYW5nLk9iamVjdCkKKwkgKi8KKwlwdWJsaWMgYm9vbGVhbiBpc0ZhY3RvcnlGb3JUeXBlKE9iamVjdCB0eXBlKSB7CisJCXJldHVybiB0eXBlID09IERpc2Vhc2VNb2RlbFByb3BlcnR5RWRpdG9yQWRhcHRlci5jbGFzcworCQkJCXx8IHN1cGVyLmlzRmFjdG9yeUZvclR5cGUodHlwZSk7CisJfQorfSAvLyBGb3JjaW5nRGlzZWFzZU1vZGVsUHJvcGVydHlFZGl0b3JBZGFwdGVyRmFjdG9yeQpkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMuZm9yY2luZy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9kaXNlYXNlbW9kZWxzL2ZvcmNpbmcvcHJlc2VudGF0aW9uL0ZvcmNpbmdEaXNlYXNlV2l6YXJkTWVzc2FnZXMuamF2YSBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzLmZvcmNpbmcvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvZGlzZWFzZW1vZGVscy9mb3JjaW5nL3ByZXNlbnRhdGlvbi9Gb3JjaW5nRGlzZWFzZVdpemFyZE1lc3NhZ2VzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTY5ZTg3YQotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzLmZvcmNpbmcvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvZGlzZWFzZW1vZGVscy9mb3JjaW5nL3ByZXNlbnRhdGlvbi9Gb3JjaW5nRGlzZWFzZVdpemFyZE1lc3NhZ2VzLmphdmEKQEAgLTAsMCArMSw0NiBAQAorLy8gRXhhbXBsZURpc2Vhc2VXaXphcmRNZXNzYWdlcy5qYXZhCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy5mb3JjaW5nLnByZXNlbnRhdGlvbjsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNywgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqYXZhLnV0aWwuTWlzc2luZ1Jlc291cmNlRXhjZXB0aW9uOworaW1wb3J0IGphdmEudXRpbC5SZXNvdXJjZUJ1bmRsZTsKKworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5Db25zdGFudHM7CisKKy8qKgorICogVGhpcyBjbGFzcyBpcyB0aGUgUmVzb3VyY2UgQnVuZGxlIGZvciB0aGlzIHBhY2thZ2UuCisgKi8KK3B1YmxpYyBjbGFzcyBGb3JjaW5nRGlzZWFzZVdpemFyZE1lc3NhZ2VzIHsKKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgQlVORExFX05BTUUgPSBDb25zdGFudHMuSURfUk9PVAorCQkJKyAiLnVpLmRpc2Vhc2Vtb2RlbHMuZm9yY2luZy5wcmVzZW50YXRpb24uZm9yY2luZ2Rpc2Vhc2VtZXNzYWdlcyI7IC8vJE5PTi1OTFMtMSQKKworCXByaXZhdGUgc3RhdGljIGZpbmFsIFJlc291cmNlQnVuZGxlIFJFU09VUkNFX0JVTkRMRSA9IFJlc291cmNlQnVuZGxlCisJCQkuZ2V0QnVuZGxlKEJVTkRMRV9OQU1FKTsKKworCS8qKgorCSAqIAorCSAqLworCXB1YmxpYyBGb3JjaW5nRGlzZWFzZVdpemFyZE1lc3NhZ2VzKCkgeworCQkvLyBlbXB0eQorCX0KKworCS8qKgorCSAqIEBwYXJhbSBrZXkKKwkgKiAgICAgICAgICAgIHRoZSBrZXkgZm9yIHRoZSBtZXNzYWdlCisJICogQHJldHVybiB0aGUgc3RyaW5nIHRoYXQgbWF0Y2hlcyB0aGUga2V5CisJICogQHRocm93cyBNaXNzaW5nUmVzb3VyY2VFeGNlcHRpb24gaWYgdGhlIGtleSBjYW5ub3QgYmUgZm91bmQKKwkgKi8KKwlwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRTdHJpbmcoZmluYWwgU3RyaW5nIGtleSkgdGhyb3dzIE1pc3NpbmdSZXNvdXJjZUV4Y2VwdGlvbnsKKwkJCXJldHVybiBSRVNPVVJDRV9CVU5ETEUuZ2V0U3RyaW5nKGtleSk7CisJfSAvLyBnZXRTdHJpbmcKK30gLy8gRm9yY2luZ0Rpc2Vhc2VXaXphcmRNZXNzYWdlcwpkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMuZm9yY2luZy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9kaXNlYXNlbW9kZWxzL2ZvcmNpbmcvcHJlc2VudGF0aW9uL0ZvcmNpbmdFZGl0b3JQbHVnaW4uamF2YSBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzLmZvcmNpbmcvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvZGlzZWFzZW1vZGVscy9mb3JjaW5nL3ByZXNlbnRhdGlvbi9Gb3JjaW5nRWRpdG9yUGx1Z2luLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzIzMWU1OAotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzLmZvcmNpbmcvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvZGlzZWFzZW1vZGVscy9mb3JjaW5nL3ByZXNlbnRhdGlvbi9Gb3JjaW5nRWRpdG9yUGx1Z2luLmphdmEKQEAgLTAsMCArMSwxMjAgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzLmZvcmNpbmcucHJlc2VudGF0aW9uOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA5IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24uRU1GUGx1Z2luOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udWkuRWNsaXBzZVVJUGx1Z2luOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5SZXNvdXJjZUxvY2F0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnByb3ZpZGVyLkVjb3JlRWRpdFBsdWdpbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLnByb3ZpZGVyLkNvcmVFZGl0UGx1Z2luOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuZWRnZXMucHJvdmlkZXIuRGVmaW5pdGlvbnNFZGl0UGx1Z2luOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5wcm92aWRlci5EaXNlYXNlbW9kZWxzRWRpdFBsdWdpbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQucHJvdmlkZXIuU3RhbmRhcmRFZGl0UGx1Z2luOworaW1wb3J0IG9yZy5vc2dpLmZyYW1ld29yay5CdW5kbGVDb250ZXh0OworCisvKioKKyAqIFRoaXMgaXMgdGhlIGNlbnRyYWwgc2luZ2xldG9uIGZvciB0aGUgRm9yY2luZyBlZGl0b3IgcGx1Z2luLgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQGdlbmVyYXRlZAorICovCitAU3VwcHJlc3NXYXJuaW5ncygic3ludGhldGljLWFjY2VzcyIpCitwdWJsaWMgZmluYWwgY2xhc3MgRm9yY2luZ0VkaXRvclBsdWdpbiBleHRlbmRzIEVNRlBsdWdpbiB7CisJLyoqCisJICogS2VlcCB0cmFjayBvZiB0aGUgc2luZ2xldG9uLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgRm9yY2luZ0VkaXRvclBsdWdpbiBJTlNUQU5DRSA9IG5ldyBGb3JjaW5nRWRpdG9yUGx1Z2luKCk7CisJCisJLyoqCisJICogS2VlcCB0cmFjayBvZiB0aGUgc2luZ2xldG9uLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByaXZhdGUgc3RhdGljIEltcGxlbWVudGF0aW9uIHBsdWdpbjsKKworCS8qKgorCSAqIENyZWF0ZSB0aGUgaW5zdGFuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEZvcmNpbmdFZGl0b3JQbHVnaW4oKSB7CisJCXN1cGVyCisJCQkobmV3IFJlc291cmNlTG9jYXRvciBbXSB7CisJCQkJRGlzZWFzZW1vZGVsc0VkaXRQbHVnaW4uSU5TVEFOQ0UsCisJCQkJQ29yZUVkaXRQbHVnaW4uSU5TVEFOQ0UsCisJCQkJRWNvcmVFZGl0UGx1Z2luLklOU1RBTkNFLAorCQkJCURlZmluaXRpb25zRWRpdFBsdWdpbi5JTlNUQU5DRSwKKwkJCQlTdGFuZGFyZEVkaXRQbHVnaW4uSU5TVEFOQ0UsCisJCQl9KTsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBzaW5nbGV0b24gaW5zdGFuY2Ugb2YgdGhlIEVjbGlwc2UgcGx1Z2luLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgc2luZ2xldG9uIGluc3RhbmNlLgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgUmVzb3VyY2VMb2NhdG9yIGdldFBsdWdpblJlc291cmNlTG9jYXRvcigpIHsKKwkJcmV0dXJuIHBsdWdpbjsKKwl9CisJCisJLyoqCisJICogUmV0dXJucyB0aGUgc2luZ2xldG9uIGluc3RhbmNlIG9mIHRoZSBFY2xpcHNlIHBsdWdpbi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIHNpbmdsZXRvbiBpbnN0YW5jZS4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHN0YXRpYyBJbXBsZW1lbnRhdGlvbiBnZXRQbHVnaW4oKSB7CisJCXJldHVybiBwbHVnaW47CisJfQorCQorCS8qKgorCSAqIFRoZSBhY3R1YWwgaW1wbGVtZW50YXRpb24gb2YgdGhlIEVjbGlwc2UgPGI+UGx1Z2luPC9iPi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGNsYXNzIEltcGxlbWVudGF0aW9uIGV4dGVuZHMgRWNsaXBzZVVJUGx1Z2luIHsKKwkJLyoqCisJCSAqIENyZWF0ZXMgYW4gaW5zdGFuY2UuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlwdWJsaWMgSW1wbGVtZW50YXRpb24oKSB7CisJCQlzdXBlcigpOworCQorCQkJLy8gUmVtZW1iZXIgdGhlIHN0YXRpYyBpbnN0YW5jZS4KKwkJCS8vCisJCQlwbHVnaW4gPSB0aGlzOworCQl9CisJCQorCQkvKioKKwkJICogCisJCSAqIEBzZWUgb3JnLmVjbGlwc2UudWkucGx1Z2luLkFic3RyYWN0VUlQbHVnaW4jc3RhcnQob3JnLm9zZ2kuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHQpCisJCSAqLworCQlAT3ZlcnJpZGUKKwkJcHVibGljIHZvaWQgc3RhcnQoQnVuZGxlQ29udGV4dCBjb250ZXh0KSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJCXN1cGVyLnN0YXJ0KGNvbnRleHQpOworCQkJbmV3IEZvcmNpbmdEaXNlYXNlTW9kZWxQcm9wZXJ0eUVkaXRvckFkYXB0ZXJGYWN0b3J5KCk7CisJCX0KKwl9CisKK30KZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzLmZvcmNpbmcvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvZGlzZWFzZW1vZGVscy9mb3JjaW5nL3ByZXNlbnRhdGlvbi9Gb3JjaW5nUHJvcGVydHlTdHJpbmdQcm92aWRlckFkYXB0ZXJGYWN0b3J5LmphdmEgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy5mb3JjaW5nL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL2Rpc2Vhc2Vtb2RlbHMvZm9yY2luZy9wcmVzZW50YXRpb24vRm9yY2luZ1Byb3BlcnR5U3RyaW5nUHJvdmlkZXJBZGFwdGVyRmFjdG9yeS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM1OTc5YzIKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy5mb3JjaW5nL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL2Rpc2Vhc2Vtb2RlbHMvZm9yY2luZy9wcmVzZW50YXRpb24vRm9yY2luZ1Byb3BlcnR5U3RyaW5nUHJvdmlkZXJBZGFwdGVyRmFjdG9yeS5qYXZhCkBAIC0wLDAgKzEsMTM2IEBACisvLyBFeGFtcGxlUHJvcGVydHlTdHJpbmdQcm92aWRlckFkYXB0ZXJGYWN0b3J5LmphdmEKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzLmZvcmNpbmcucHJlc2VudGF0aW9uOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDcsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgamF2YS51dGlsLk1pc3NpbmdSZXNvdXJjZUV4Y2VwdGlvbjsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LkFkYXB0ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVTdHJ1Y3R1cmFsRmVhdHVyZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbVByb3BlcnR5RGVzY3JpcHRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZm9yY2luZy51dGlsLkZvcmNpbmdBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnVpLmFkYXB0ZXJzLnByb3BlcnR5c3RyaW5ncy5Qcm9wZXJ0eVN0cmluZ1Byb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udWkuYWRhcHRlcnMucHJvcGVydHlzdHJpbmdzLlByb3BlcnR5U3RyaW5nUHJvdmlkZXJBZGFwdGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udWkuYWRhcHRlcnMucHJvcGVydHlzdHJpbmdzLlByb3BlcnR5U3RyaW5nUHJvdmlkZXJBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnVpLndpemFyZHMuU3RhbmRhcmRQcm9wZXJ0eVN0cmluZ1Byb3ZpZGVyQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuSVN0YXJ0dXA7CisKKy8qKgorICogVGhpcyBjbGFzcyByZXByZXNlbnRzCisgKi8KK3B1YmxpYyBjbGFzcyBGb3JjaW5nUHJvcGVydHlTdHJpbmdQcm92aWRlckFkYXB0ZXJGYWN0b3J5IGV4dGVuZHMKKwkJRm9yY2luZ0FkYXB0ZXJGYWN0b3J5IGltcGxlbWVudHMKKwkJUHJvcGVydHlTdHJpbmdQcm92aWRlckFkYXB0ZXJGYWN0b3J5LCBJU3RhcnR1cCB7CisKKwlQcm9wZXJ0eVN0cmluZ1Byb3ZpZGVyQWRhcHRlciBhZGFwdGVyID0gbnVsbDsKKworCS8qKgorCSAqIERlZmF1bHQgQ29uc3RydWN0b3IKKwkgKi8KKwlwdWJsaWMgRm9yY2luZ1Byb3BlcnR5U3RyaW5nUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSgpIHsKKwkJc3VwZXIoKTsKKwkJUHJvcGVydHlTdHJpbmdQcm92aWRlckFkYXB0ZXJGYWN0b3J5LklOU1RBTkNFLmFkZEFkYXB0ZXJGYWN0b3J5KHRoaXMpOworCX0KKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2UudWkuSVN0YXJ0dXAjZWFybHlTdGFydHVwKCkKKwkgKi8KKwlwdWJsaWMgdm9pZCBlYXJseVN0YXJ0dXAoKSB7CisJCS8vIE5vdGhpbmcgdG8gZG8gaGVyZS4gVGhpcyBtZXRob2QgaXMgY2FsbGVkIGFmdGVyIHRoZSBjb25zdHJ1Y3RvciBoYXMKKwkJLy8gcnVuIHdoaWNoIGlzIHRoZSBlbnRpcmUgcG9pbnQgb2YgZWFybHkgYWN0aXZhdGlvbiB3aGljaCBjYXVzZXMgdGhlCisJCS8vIGZhY3RvcnkgdG8gYmUgYWRkZWQgdG8gdGhlIFByb3BlcnR5U3RyaW5nUHJvdmlkZXJBZGFwdGVyRmFjdG9yeS5JTlNUQU5DRQorCX0KKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuaW1wbC5BZGFwdGVyRmFjdG9yeUltcGwjaXNGYWN0b3J5Rm9yVHlwZShqYXZhLmxhbmcuT2JqZWN0KQorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBib29sZWFuIGlzRmFjdG9yeUZvclR5cGUoT2JqZWN0IHR5cGUpIHsKKwkJcmV0dXJuIHN1cGVyLmlzRmFjdG9yeUZvclR5cGUodHlwZSkKKwkJCQl8fCB0eXBlID09IFByb3BlcnR5U3RyaW5nUHJvdmlkZXIuY2xhc3M7CisJfQorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZm9yY2luZy51dGlsLkZvcmNuZ0FkYXB0ZXJGYWN0b3J5I2NyZWF0ZUV4YW1wbGVEaXNlYXNlTW9kZWxBZGFwdGVyKCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVGb3JjaW5nRGlzZWFzZU1vZGVsQWRhcHRlcigpIHsKKwkJLy8gSGF2ZSB3ZSBjcmVhdGVkIG9uZSBiZWZvcmU/CisJCWlmIChhZGFwdGVyID09IG51bGwpIHsKKwkJCS8vIE5vCisJCQlhZGFwdGVyID0gbmV3ICBTdGFuZGFyZFByb3BlcnR5U3RyaW5nUHJvdmlkZXJBZGFwdGVyRmFjdG9yeS5TdGFuZGFyZFByb3BlcnR5U3RyaW5nUHJvdmlkZXJBZGFwdGVyKCkgeworCisJCQkJLyoqCisJCQkJICogQHBhcmFtIGRlc2NyaXB0b3IKKwkJCQkgKiBAcmV0dXJuIHRoZSBOTFMnZCBuYW1lIG9mIHRoZSBwcm9wZXJ0eSB0byBkaXNwbGF5IHRvIHRoZSB1c2VyCisJCQkJICovCisJCQkJcHVibGljIFN0cmluZyBnZXRQcm9wZXJ0eU5hbWUoSUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IgZGVzY3JpcHRvcikgeworCQkJCQl0cnkgeworCQkJCQkJcmV0dXJuIEZvcmNpbmdEaXNlYXNlV2l6YXJkTWVzc2FnZXMKKwkJCQkJCQkJLmdldFN0cmluZygoKEVTdHJ1Y3R1cmFsRmVhdHVyZSkgZGVzY3JpcHRvcgorCQkJCQkJCQkJCS5nZXRGZWF0dXJlKG51bGwpKS5nZXROYW1lKCkpOworCQkJCQl9IGNhdGNoIChNaXNzaW5nUmVzb3VyY2VFeGNlcHRpb24gZSkgeworCQkJCQkJcmV0dXJuIHN1cGVyLmdldFByb3BlcnR5TmFtZShkZXNjcmlwdG9yKTsKKwkJCQkJfQorCQkJCX0gLy8gZ2V0UHJvcGVydHlOYW1lCisKKwkJCQkvKioKKwkJCQkgKiBAcGFyYW0gZGVzY3JpcHRvcgorCQkJCSAqIEByZXR1cm4gdGhlIE5MUydkIHRvb2wgdGlwIHRleHQgdGhhdCBkZXNjcmliZXMgdGhlIHByb3BlcnR5CisJCQkJICovCisJCQkJcHVibGljIFN0cmluZyBnZXRQcm9wZXJ0eVRvb2xUaXAoCisJCQkJCQlJSXRlbVByb3BlcnR5RGVzY3JpcHRvciBkZXNjcmlwdG9yKSB7CisJCQkJCXRyeSB7CisJCQkJCQlmaW5hbCBFU3RydWN0dXJhbEZlYXR1cmUgZmVhdHVyZSA9IChFU3RydWN0dXJhbEZlYXR1cmUpIGRlc2NyaXB0b3IKKwkJCQkJCQkJLmdldEZlYXR1cmUobnVsbCk7CisJCQkJCQlyZXR1cm4gRm9yY2luZ0Rpc2Vhc2VXaXphcmRNZXNzYWdlcy5nZXRTdHJpbmcoZmVhdHVyZQorCQkJCQkJCQkuZ2V0TmFtZSgpCisJCQkJCQkJCSsgVFRfU1VGRklYKTsKKwkJCQkJfSBjYXRjaCAoTWlzc2luZ1Jlc291cmNlRXhjZXB0aW9uIGUpIHsKKwkJCQkJCXJldHVybiBzdXBlci5nZXRQcm9wZXJ0eVRvb2xUaXAoZGVzY3JpcHRvcik7CisJCQkJCX0KKwkJCQl9IC8vIGdldFByb3BlcnR5VG9vbFRpcAorCisJCQkJLyoqCisJCQkJICogQHBhcmFtIGRlc2NyaXB0b3IKKwkJCQkgKiBAcmV0dXJuIHRoZSBOTFMnZCB0ZXh0IHRoYXQgcmVwcmVzZW50cyB0aGUgdW5pdHMgb2YgdGhlCisJCQkJICogICAgICAgICBwcm9wZXJ0eQorCQkJCSAqLworCQkJCXB1YmxpYyBTdHJpbmcgZ2V0UHJvcGVydHlVbml0cygKKwkJCQkJCUlJdGVtUHJvcGVydHlEZXNjcmlwdG9yIGRlc2NyaXB0b3IpIHsKKwkJCQkJdHJ5IHsKKwkJCQkJCWZpbmFsIEVTdHJ1Y3R1cmFsRmVhdHVyZSBmZWF0dXJlID0gKEVTdHJ1Y3R1cmFsRmVhdHVyZSkgZGVzY3JpcHRvcgorCQkJCQkJCQkuZ2V0RmVhdHVyZShudWxsKTsKKwkJCQkJCXJldHVybiBGb3JjaW5nRGlzZWFzZVdpemFyZE1lc3NhZ2VzLmdldFN0cmluZyhmZWF0dXJlCisJCQkJCQkJCS5nZXROYW1lKCkKKwkJCQkJCQkJKyBVTklUX1NVRkZJWCk7CisJCQkJCX0gY2F0Y2ggKE1pc3NpbmdSZXNvdXJjZUV4Y2VwdGlvbiBlKSB7CisJCQkJCQlyZXR1cm4gc3VwZXIuZ2V0UHJvcGVydHlVbml0cyhkZXNjcmlwdG9yKTsKKwkJCQkJfQorCQkJCX0gLy8gZ2V0UHJvcGVydHlVbml0cworCQkJfTsKKwkJfSAvLyBpZiB3ZSBkaWRuJ3QgY3JlYXRlIG9uZSBiZWZvcmUKKwkJcmV0dXJuIGFkYXB0ZXI7CisJfS8vIGNyZWF0ZUZvcmNpbmdEaXNlYXNlTW9kZWxBZGFwdGVyKCkKKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmZvcmNpbmcudXRpbC5Gb3JjbmdBZGFwdGVyRmFjdG9yeSNjcmVhdGVFeGFtcGxlRGlzZWFzZU1vZGVsQWRhcHRlcigpCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlR2F1c3NpYW5Gb3JjaW5nRGlzZWFzZU1vZGVsQWRhcHRlcigpIHsKKwkJLy8gSGF2ZSB3ZSBjcmVhdGVkIG9uZSBiZWZvcmU/CisJCWlmIChhZGFwdGVyID09IG51bGwpIHsKKwkJCWFkYXB0ZXIgPSAoU3RhbmRhcmRQcm9wZXJ0eVN0cmluZ1Byb3ZpZGVyQWRhcHRlckZhY3RvcnkuU3RhbmRhcmRQcm9wZXJ0eVN0cmluZ1Byb3ZpZGVyQWRhcHRlciljcmVhdGVGb3JjaW5nRGlzZWFzZU1vZGVsQWRhcHRlcigpOworCQl9IC8vIGlmIHdlIGRpZG4ndCBjcmVhdGUgb25lIGJlZm9yZQorCQlyZXR1cm4gYWRhcHRlcjsKKwl9Ly8gY3JlYXRlRm9yY2luZ0Rpc2Vhc2VNb2RlbEFkYXB0ZXIoKQorfSAvLyBGb3JjaW5nUHJvcGVydHlTdHJpbmdQcm92aWRlckFkYXB0ZXJGYWN0b3J5CmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy5mb3JjaW5nL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL2Rpc2Vhc2Vtb2RlbHMvZm9yY2luZy9wcmVzZW50YXRpb24vZm9yY2luZ2Rpc2Vhc2VtZXNzYWdlcy5wcm9wZXJ0aWVzIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMuZm9yY2luZy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9kaXNlYXNlbW9kZWxzL2ZvcmNpbmcvcHJlc2VudGF0aW9uL2ZvcmNpbmdkaXNlYXNlbWVzc2FnZXMucHJvcGVydGllcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mY2I4NjRjCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMuZm9yY2luZy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9kaXNlYXNlbW9kZWxzL2ZvcmNpbmcvcHJlc2VudGF0aW9uL2ZvcmNpbmdkaXNlYXNlbWVzc2FnZXMucHJvcGVydGllcwpAQCAtMCwwICsxLDEwNCBAQAorIyBkaXNlYXNld2l6YXJkbWVzc2FnZXMucHJvcGVydGllcworIworIy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjICogQ29weXJpZ2h0IChjKSAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorIyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyMgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyMgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorIyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisjICoKKyMgKiBDb250cmlidXRvcnM6CisjICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorIyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCittb2R1bGF0aW9uUGVyaW9kID0gTW9kdWxhdGlvbiBQZXJpb2QKK21vZHVsYXRpb25QZXJpb2RUVCA9IE1vZHVsYXRpb24gUGVyaW9kCittb2R1bGF0aW9uUGVyaW9kVU5JVCA9IERheXMKK21vZHVsYXRpb25QZXJpb2RNSVNTSU5HID0gTWlzc2luZyBNb2R1bGF0aW9uIFBlcmlvZC4KK21vZHVsYXRpb25QZXJpb2RJTlZBTElEID0gTW9kdWxhdGlvbiBQZXJpb2QgaXMgaW52YWxpZC4KKworbW9kdWxhdGlvblBoYXNlU2hpZnQgPSBNb2R1bGF0aW9uIFBoYXNlIFNoaWZ0Cittb2R1bGF0aW9uUGhhc2VTaGlmdFRUID0gTW9kdWxhdGlvbiBQaGFzZSBTaGlmdAorbW9kdWxhdGlvblBoYXNlU2hpZnRVTklUID0gRGF5cworbW9kdWxhdGlvblBoYXNlTUlTU0lORyA9IE1pc3NpbmcgTW9kdWxhdGlvbiBQaGFzZSBTaGlmdC4KK21vZHVsYXRpb25QaGFzZUlOVkFMSUQgPSBNb2R1bGF0aW9uIFBoYXNlIFNoaWZ0IGlzIGludmFsaWQuCisKK21vZHVsYXRpb25GbG9vciA9IFNlYXNvbmFsIE1vZHVsYXRpb24gRmxvb3IKK21vZHVsYXRpb25GbG9vclRUID0gRmxvb3Igb3IgbWluaW11bSB0cmFuc21pc3Npb24gbGV2ZWwgd2l0aG91dCBzZWFzb25hbCBtb2R1bGF0aW9uCittb2R1bGF0aW9uRmxvb3JVTklUID0gCittb2R1bGF0aW9uRmxvb3JNSVNTSU5HID0gTWlzc2luZyBTZWFzb25hbCBNb2R1bGF0aW9uIEZsb29yLgorbW9kdWxhdGlvbkZsb29ySU5WQUxJRCA9IFNlYXNvbmFsIE1vZHVsYXRpb24gRmxvb3IgaXMgaW52YWxpZC4KKworIyBGb3JjaW5nRGlzZWFzZU1vZGVsCisKK21vZHVsYXRpb25FeHBvbmVudCA9IFNlYXNvbmFsIE1vZHVsYXRpb24gRXhwb25lbnQKK21vZHVsYXRpb25FeHBvbmVudFRUID0gRXhwb25lbnQgdXNlZCBmb3Igc2Vhc29uYWwgbW9kdWxhdGlvbiBmb3JjaW5nCittb2R1bGF0aW9uRXhwb25lbnRVTklUID0KK21vZHVsYXRpb25FeHBvbmVudE1JU1NJTkcgPSBNaXNzaW5nIFNlYXNvbmFsIE1vZHVsYXRpb24gRXhwb25lbnQuCittb2R1bGF0aW9uRXhwb25lbnRJTlZBTElEID0gU2Vhc29uYWwgTW9kdWxhdGlvbiBFeHBvbmVudCBpcyBpbnZhbGlkLiAKKworIyBHYXVzc2lhbkZvcmNpbmdEaXNlYXNlTW9kZWwKKworc2lnbWEyID0gU2lnbWFeMgorc2lnbWEyVFQgPSBTaWdtYSBzcXVhcmVkCitzaWdtYTJVTklUID0KK3NpZ21hMk1JU1NJTkcgPSBNaXNzaW5nIFNpZ21hXjIuCitzaWdtYTJJTlZBTElEID0gU2lnbWFeMiBpcyBpbnZhbGlkLgorCisjIEdhdXNzaWFuMkZvcmNpbmdEaXNlYXNlTW9kZWwKKworYXR0MSA9IEF0dDEKK2F0dDFUVCA9IEF0dDEKK2F0dDFVTklUID0KK2F0dDFNSVNTSU5HID0gTWlzc2luZyBBdHQxLgorYXR0MUlOVkFMSUQgPSBBdHQxIGlzIGludmFsaWQuCisKK2F0dDIgPSBBdHQyCithdHQyVFQgPSBBdHQyCithdHQyVU5JVCA9CithdHQyTUlTU0lORyA9IE1pc3NpbmcgQXR0Mi4KK2F0dDJJTlZBTElEID0gQXR0MiBpcyBpbnZhbGlkLgorCithdHQzID0gQXR0MworYXR0M1RUID0gQXR0MworYXR0M1VOSVQgPQorYXR0M01JU1NJTkcgPSBNaXNzaW5nIEF0dDMuCithdHQzSU5WQUxJRCA9IEF0dDMgaXMgaW52YWxpZC4KKworYXR0NCA9IEF0dDQKK2F0dDRUVCA9IEF0dDQKK2F0dDRVTklUID0KK2F0dDRNSVNTSU5HID0gTWlzc2luZyBBdHQ0LgorYXR0NElOVkFMSUQgPSBBdHQ0IGlzIGludmFsaWQuCisKK3NpZ21hMl8yID0gU2lnbWEyXjIKK3NpZ21hMl8yVFQgPSBTaWdtYTIgc3F1YXJlZAorc2lnbWEyXzJVTklUID0KK3NpZ21hMl8yTUlTU0lORyA9IE1pc3NpbmcgU2lnbWEyXjIuCitzaWdtYTJfMklOVkFMSUQgPSBTaWdtYTJeMiBpcyBpbnZhbGlkLgorCisjIEdhdXNzaWFuM0ZvcmNpbmdEaXNlYXNlTW9kZWwKKworc2lnbWEyXzMgPSBTaWdtYTNeMgorc2lnbWEyXzNUVCA9IFNpZ21hMyBzcXVhcmVkCitzaWdtYTJfM1VOSVQgPQorc2lnbWEyXzNNSVNTSU5HID0gTWlzc2luZyBTaWdtYTNeMi4KK3NpZ21hMl8zSU5WQUxJRCA9IFNpZ21hM14yIGlzIGludmFsaWQuCisKK3RyYW5zbWlzc2lvblJhdGUyID0gVHJhbnNtaXNzaW9uIFJhdGUgMgordHJhbnNtaXNzaW9uUmF0ZTJUVCA9IFRyYW5zbWlzc2lvbiBSYXRlIDIKK3RyYW5zbWlzc2lvblJhdGUyVU5JVCA9Cit0cmFuc21pc3Npb25SYXRlMk1JU1NJTkcgPSBNaXNzaW5nIFRyYW5zbWlzc2lvbiBSYXRlIDIuCit0cmFuc21pc3Npb25SYXRlMklOVkFMSUQgPSBUcmFuc21pc3Npb24gUmF0ZSAyIGlzIGludmFsaWQuCisKK3RyYW5zbWlzc2lvblJhdGUzID0gVHJhbnNtaXNzaW9uIFJhdGUgMwordHJhbnNtaXNzaW9uUmF0ZTNUVCA9IFRyYW5zbWlzc2lvbiBSYXRlIDMKK3RyYW5zbWlzc2lvblJhdGUzVU5JVCA9Cit0cmFuc21pc3Npb25SYXRlM01JU1NJTkcgPSBNaXNzaW5nIFRyYW5zbWlzc2lvbiBSYXRlIDMuCit0cmFuc21pc3Npb25SYXRlM0lOVkFMSUQgPSBUcmFuc21pc3Npb24gUmF0ZSAzIGlzIGludmFsaWQuCisKK21vZHVsYXRpb25GbG9vcl8yID0gU2Vhc29uYWwgTW9kdWxhdGlvbiBGbG9vciAyCittb2R1bGF0aW9uRmxvb3JfMlRUID0gRmxvb3Igb3IgbWluaW11bSB0cmFuc21pc3Npb24gbGV2ZWwgd2l0aG91dCBzZWFzb25hbCBtb2R1bGF0aW9uCittb2R1bGF0aW9uRmxvb3JfMlVOSVQgPSAKK21vZHVsYXRpb25GbG9vcl8yTUlTU0lORyA9IE1pc3NpbmcgU2Vhc29uYWwgTW9kdWxhdGlvbiBGbG9vciAyLgorbW9kdWxhdGlvbkZsb29yXzJJTlZBTElEID0gU2Vhc29uYWwgTW9kdWxhdGlvbiBGbG9vciAyIGlzIGludmFsaWQuCmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy5nbG9iYWxpbmZsdWVuemFtb2RlbC8uY2xhc3NwYXRoIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMuZ2xvYmFsaW5mbHVlbnphbW9kZWwvLmNsYXNzcGF0aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NWYwMjRlCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMuZ2xvYmFsaW5mbHVlbnphbW9kZWwvLmNsYXNzcGF0aApAQCAtMCwwICsxLDcgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+DQorPGNsYXNzcGF0aD4NCisJPGNsYXNzcGF0aGVudHJ5IGtpbmQ9InNyYyIgcGF0aD0ic3JjIi8+DQorCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJjb24iIHBhdGg9Im9yZy5lY2xpcHNlLmpkdC5sYXVuY2hpbmcuSlJFX0NPTlRBSU5FUi9vcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwuZGVidWcudWkubGF1bmNoZXIuU3RhbmRhcmRWTVR5cGUvSjJTRS0xLjUiLz4NCisJPGNsYXNzcGF0aGVudHJ5IGtpbmQ9ImNvbiIgcGF0aD0ib3JnLmVjbGlwc2UucGRlLmNvcmUucmVxdWlyZWRQbHVnaW5zIi8+DQorCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJvdXRwdXQiIHBhdGg9ImJpbiIvPg0KKzwvY2xhc3NwYXRoPg0KZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzLmdsb2JhbGluZmx1ZW56YW1vZGVsLy5wcm9qZWN0IGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMuZ2xvYmFsaW5mbHVlbnphbW9kZWwvLnByb2plY3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmQ1NzNhNAotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzLmdsb2JhbGluZmx1ZW56YW1vZGVsLy5wcm9qZWN0CkBAIC0wLDAgKzEsMjggQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+DQorPHByb2plY3REZXNjcmlwdGlvbj4NCisJPG5hbWU+b3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzLmdsb2JhbGluZmx1ZW56YW1vZGVsPC9uYW1lPg0KKwk8Y29tbWVudD48L2NvbW1lbnQ+DQorCTxwcm9qZWN0cz4NCisJPC9wcm9qZWN0cz4NCisJPGJ1aWxkU3BlYz4NCisJCTxidWlsZENvbW1hbmQ+DQorCQkJPG5hbWU+b3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YWJ1aWxkZXI8L25hbWU+DQorCQkJPGFyZ3VtZW50cz4NCisJCQk8L2FyZ3VtZW50cz4NCisJCTwvYnVpbGRDb21tYW5kPg0KKwkJPGJ1aWxkQ29tbWFuZD4NCisJCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuTWFuaWZlc3RCdWlsZGVyPC9uYW1lPg0KKwkJCTxhcmd1bWVudHM+DQorCQkJPC9hcmd1bWVudHM+DQorCQk8L2J1aWxkQ29tbWFuZD4NCisJCTxidWlsZENvbW1hbmQ+DQorCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLlNjaGVtYUJ1aWxkZXI8L25hbWU+DQorCQkJPGFyZ3VtZW50cz4NCisJCQk8L2FyZ3VtZW50cz4NCisJCTwvYnVpbGRDb21tYW5kPg0KKwk8L2J1aWxkU3BlYz4NCisJPG5hdHVyZXM+DQorCQk8bmF0dXJlPm9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFuYXR1cmU8L25hdHVyZT4NCisJCTxuYXR1cmU+b3JnLmVjbGlwc2UucGRlLlBsdWdpbk5hdHVyZTwvbmF0dXJlPg0KKwk8L25hdHVyZXM+DQorPC9wcm9qZWN0RGVzY3JpcHRpb24+DQpkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMuZ2xvYmFsaW5mbHVlbnphbW9kZWwvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMuZ2xvYmFsaW5mbHVlbnphbW9kZWwvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEzYjJiZmIKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy5nbG9iYWxpbmZsdWVuemFtb2RlbC8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMKQEAgLTAsMCArMSw4IEBACisjV2VkIEp1bCAxNSAxMjowNzoxMSBQRFQgMjAwOQ0KK2VjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xDQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29kZWdlbi5pbmxpbmVKc3JCeXRlY29kZT1lbmFibGVkDQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29kZWdlbi50YXJnZXRQbGF0Zm9ybT0xLjUNCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb21wbGlhbmNlPTEuNQ0KK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uYXNzZXJ0SWRlbnRpZmllcj1lcnJvcg0KK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZW51bUlkZW50aWZpZXI9ZXJyb3INCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5zb3VyY2U9MS41DQpkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMuZ2xvYmFsaW5mbHVlbnphbW9kZWwvTUVUQS1JTkYvTUFOSUZFU1QuTUYgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy5nbG9iYWxpbmZsdWVuemFtb2RlbC9NRVRBLUlORi9NQU5JRkVTVC5NRgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NmYzMzk1Ci0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMuZ2xvYmFsaW5mbHVlbnphbW9kZWwvTUVUQS1JTkYvTUFOSUZFU1QuTUYKQEAgLTAsMCArMSwyNSBAQAorTWFuaWZlc3QtVmVyc2lvbjogMS4wDQorQnVuZGxlLU1hbmlmZXN0VmVyc2lvbjogMg0KK0J1bmRsZS1OYW1lOiAlcGx1Z2luTmFtZQ0KK0J1bmRsZS1TeW1ib2xpY05hbWU6IG9yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy5nbG9iYWxpbmZsdWVuemFtb2RlbDtzaW5nbGV0b246PXRydWUNCitCdW5kbGUtVmVyc2lvbjogMS4yLjENCitCdW5kbGUtQ2xhc3NQYXRoOiAuDQorQnVuZGxlLUFjdGl2YXRvcjogb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzLmdsb2JhbGluZmx1ZW56YW1vZGVsLnByZXNlbnRhdGlvbi5HbG9iYWxpbmZsdWVuemFtb2RlbEVkaXRvclBsdWdpbiRJbXBsZW1lbnRhdGlvbg0KK0J1bmRsZS1WZW5kb3I6ICVwcm92aWRlck5hbWUNCitCdW5kbGUtTG9jYWxpemF0aW9uOiBwbHVnaW4NCitCdW5kbGUtUmVxdWlyZWRFeGVjdXRpb25FbnZpcm9ubWVudDogSjJTRS0xLjUNCitFeHBvcnQtUGFja2FnZTogb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmdsb2JhbGluZmx1ZW56YW1vZGVsLnByZXNlbnRhdGlvbiwNCisgb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzLmdsb2JhbGluZmx1ZW56YW1vZGVsLnByZXNlbnRhdGlvbg0KK1JlcXVpcmUtQnVuZGxlOiBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUsDQorIG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzO3Zpc2liaWxpdHk6PXJlZXhwb3J0LA0KKyBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZ2xvYmFsaW5mbHVlbnphbW9kZWw7dmlzaWJpbGl0eTo9cmVleHBvcnQsDQorIG9yZy5lY2xpcHNlLmVtZi5lY29yZS54bWk7dmlzaWJpbGl0eTo9cmVleHBvcnQsDQorIG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpO3Zpc2liaWxpdHk6PXJlZXhwb3J0LA0KKyBvcmcuZWNsaXBzZS51aS5pZGU7dmlzaWJpbGl0eTo9cmVleHBvcnQsDQorIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVsczt2aXNpYmlsaXR5Oj1yZWV4cG9ydCwNCisgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlO3Zpc2liaWxpdHk6PXJlZXhwb3J0LA0KKyBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuZWRpdDt2aXNpYmlsaXR5Oj1yZWV4cG9ydCwNCisgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9uczt2aXNpYmlsaXR5Oj1yZWV4cG9ydCwNCisgb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzLA0KKyBvcmcuZWNsaXBzZS5zdGVtLnVpDQorQnVuZGxlLUFjdGl2YXRpb25Qb2xpY3k6IGxhenkNCmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy5nbG9iYWxpbmZsdWVuemFtb2RlbC9idWlsZC5wcm9wZXJ0aWVzIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMuZ2xvYmFsaW5mbHVlbnphbW9kZWwvYnVpbGQucHJvcGVydGllcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNTY4ZWMzCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMuZ2xvYmFsaW5mbHVlbnphbW9kZWwvYnVpbGQucHJvcGVydGllcwpAQCAtMCwwICsxLDE3IEBACisNCisjIDxjb3B5cmlnaHQ+DQorIyA8L2NvcHlyaWdodD4NCisjDQorIyAkSWQkDQorDQorYmluLmluY2x1ZGVzID0gLixcDQorICAgICAgICAgICAgICAgaWNvbnMvLFwNCisgICAgICAgICAgICAgICBNRVRBLUlORi8sXA0KKyAgICAgICAgICAgICAgIHBsdWdpbi54bWwsXA0KKyAgICAgICAgICAgICAgIHBsdWdpbi5wcm9wZXJ0aWVzLFwNCisgICAgICAgICAgICAgICBwbHVnaW5femgucHJvcGVydGllcyxcDQorICAgICAgICAgICAgICAgcGx1Z2luX2tyLnByb3BlcnRpZXMsXA0KKyAgICAgICAgICAgICAgIHBsdWdpbl9kZS5wcm9wZXJ0aWVzDQoramFycy5jb21waWxlLm9yZGVyID0gLg0KK3NvdXJjZS4uID0gc3JjLw0KK291dHB1dC4uID0gYmluLw0KZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzLmdsb2JhbGluZmx1ZW56YW1vZGVsL2ljb25zL2Z1bGwvb2JqMTYvR2xvYmFsaW5mbHVlbnphbW9kZWxNb2RlbEZpbGUuZ2lmIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMuZ2xvYmFsaW5mbHVlbnphbW9kZWwvaWNvbnMvZnVsbC9vYmoxNi9HbG9iYWxpbmZsdWVuemFtb2RlbE1vZGVsRmlsZS5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGU0MDRlNAotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzLmdsb2JhbGluZmx1ZW56YW1vZGVsL2ljb25zL2Z1bGwvb2JqMTYvR2xvYmFsaW5mbHVlbnphbW9kZWxNb2RlbEZpbGUuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzLmdsb2JhbGluZmx1ZW56YW1vZGVsL2ljb25zL2Z1bGwvd2l6YmFuL05ld0dsb2JhbGluZmx1ZW56YW1vZGVsLmdpZiBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzLmdsb2JhbGluZmx1ZW56YW1vZGVsL2ljb25zL2Z1bGwvd2l6YmFuL05ld0dsb2JhbGluZmx1ZW56YW1vZGVsLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNTc0M2NlCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMuZ2xvYmFsaW5mbHVlbnphbW9kZWwvaWNvbnMvZnVsbC93aXpiYW4vTmV3R2xvYmFsaW5mbHVlbnphbW9kZWwuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzLmdsb2JhbGluZmx1ZW56YW1vZGVsL3BsdWdpbi5wcm9wZXJ0aWVzIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMuZ2xvYmFsaW5mbHVlbnphbW9kZWwvcGx1Z2luLnByb3BlcnRpZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWUzMTgzNgotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzLmdsb2JhbGluZmx1ZW56YW1vZGVsL3BsdWdpbi5wcm9wZXJ0aWVzCkBAIC0wLDAgKzEsNTcgQEAKKw0KKyMgPGNvcHlyaWdodD4NCisjIDwvY29weXJpZ2h0Pg0KKyMNCisjICRJZCQNCisNCitwbHVnaW5OYW1lID0gU1RFTSBHbG9iYWwgSW5mbHVlbnphIERpc2Vhc2UgTW9kZWwgVUkNCitwcm92aWRlck5hbWUgPSBFY2xpcHNlLm9yZw0KKw0KK19VSV9HbG9iYWxpbmZsdWVuemFtb2RlbEVkaXRvcl9tZW51ID0gJkdsb2JhbGluZmx1ZW56YW1vZGVsIEVkaXRvcg0KKw0KK19VSV9DcmVhdGVDaGlsZF9tZW51X2l0ZW0gPSAmTmV3IENoaWxkDQorX1VJX0NyZWF0ZVNpYmxpbmdfbWVudV9pdGVtID0gTiZldyBTaWJsaW5nDQorDQorX1VJX1Nob3dQcm9wZXJ0aWVzVmlld19tZW51X2l0ZW0gPSBTaG93ICZQcm9wZXJ0aWVzIFZpZXcNCitfVUlfUmVmcmVzaFZpZXdlcl9tZW51X2l0ZW0gPSAmUmVmcmVzaA0KKw0KK19VSV9TZWxlY3Rpb25QYWdlX2xhYmVsID0gU2VsZWN0aW9uDQorX1VJX1BhcmVudFBhZ2VfbGFiZWwgPSBQYXJlbnQNCitfVUlfTGlzdFBhZ2VfbGFiZWwgPSBMaXN0DQorX1VJX1RyZWVQYWdlX2xhYmVsID0gVHJlZQ0KK19VSV9UYWJsZVBhZ2VfbGFiZWwgPSBUYWJsZQ0KK19VSV9UcmVlV2l0aENvbHVtbnNQYWdlX2xhYmVsID0gVHJlZSB3aXRoIENvbHVtbnMNCitfVUlfT2JqZWN0Q29sdW1uX2xhYmVsID0gT2JqZWN0DQorX1VJX1NlbGZDb2x1bW5fbGFiZWwgPSBTZWxmDQorDQorX1VJX05vT2JqZWN0U2VsZWN0ZWQgPSBTZWxlY3RlZCBOb3RoaW5nDQorX1VJX1NpbmdsZU9iamVjdFNlbGVjdGVkID0gU2VsZWN0ZWQgT2JqZWN0OiB7MH0NCitfVUlfTXVsdGlPYmplY3RTZWxlY3RlZCA9IFNlbGVjdGVkIHswfSBPYmplY3RzDQorDQorX1VJX09wZW5FZGl0b3JFcnJvcl9sYWJlbCA9IE9wZW4gRWRpdG9yDQorDQorX1VJX1dpemFyZF9jYXRlZ29yeSA9IEV4YW1wbGUgRU1GIE1vZGVsIENyZWF0aW9uIFdpemFyZHMNCisNCitfVUlfQ3JlYXRlTW9kZWxFcnJvcl9tZXNzYWdlID0gUHJvYmxlbXMgZW5jb3VudGVyZWQgaW4gZmlsZSAiezB9Ig0KKw0KK19VSV9HbG9iYWxpbmZsdWVuemFtb2RlbE1vZGVsV2l6YXJkX2xhYmVsID0gR2xvYmFsaW5mbHVlbnphbW9kZWwgTW9kZWwNCitfVUlfR2xvYmFsaW5mbHVlbnphbW9kZWxNb2RlbFdpemFyZF9kZXNjcmlwdGlvbiA9IENyZWF0ZSBhIG5ldyBHbG9iYWxpbmZsdWVuemFtb2RlbCBtb2RlbA0KKw0KK19VSV9HbG9iYWxpbmZsdWVuemFtb2RlbEVkaXRvcl9sYWJlbCA9IEdsb2JhbGluZmx1ZW56YW1vZGVsIE1vZGVsIEVkaXRvcg0KKw0KK19VSV9HbG9iYWxpbmZsdWVuemFtb2RlbEVkaXRvckZpbGVuYW1lRGVmYXVsdEJhc2UgPSBNeQ0KK19VSV9HbG9iYWxpbmZsdWVuemFtb2RlbEVkaXRvckZpbGVuYW1lRXh0ZW5zaW9ucyA9IGdsb2JhbGluZmx1ZW56YW1vZGVsDQorDQorX1VJX1dpemFyZF9sYWJlbCA9IE5ldw0KKw0KK19XQVJOX0ZpbGVuYW1lRXh0ZW5zaW9uID0gVGhlIGZpbGUgbmFtZSBtdXN0IGVuZCBpbiAnJy57MH0nJw0KK19XQVJOX0ZpbGVuYW1lRXh0ZW5zaW9ucyA9IFRoZSBmaWxlIG5hbWUgbXVzdCBoYXZlIG9uZSBvZiB0aGUgZm9sbG93aW5nIGV4dGVuc2lvbnM6IHswfQ0KKw0KK19VSV9Nb2RlbE9iamVjdCA9ICZNb2RlbCBPYmplY3QNCitfVUlfWE1MRW5jb2RpbmcgPSAmWE1MIEVuY29kaW5nDQorX1VJX1hNTEVuY29kaW5nQ2hvaWNlcyA9IFVURi04IEFTQ0lJIFVURi0xNiBVVEYtMTZCRSBVVEYtMTZMRSBJU08tODg1OS0xDQorX1VJX1dpemFyZF9pbml0aWFsX29iamVjdF9kZXNjcmlwdGlvbiA9IFNlbGVjdCBhIG1vZGVsIG9iamVjdCB0byBjcmVhdGUNCisNCitfVUlfRmlsZUNvbmZsaWN0X2xhYmVsID0gRmlsZSBDb25mbGljdA0KK19XQVJOX0ZpbGVDb25mbGljdCA9IFRoZXJlIGFyZSB1bnNhdmVkIGNoYW5nZXMgdGhhdCBjb25mbGljdCB3aXRoIGNoYW5nZXMgbWFkZSBvdXRzaWRlIHRoZSBlZGl0b3IuICBEbyB5b3Ugd2lzaCB0byBkaXNjYXJkIHRoaXMgZWRpdG9yJ3MgY2hhbmdlcz8NCisNCmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy5nbG9iYWxpbmZsdWVuemFtb2RlbC9wbHVnaW4ueG1sIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMuZ2xvYmFsaW5mbHVlbnphbW9kZWwvcGx1Z2luLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYmJhNWMyCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMuZ2xvYmFsaW5mbHVlbnphbW9kZWwvcGx1Z2luLnhtbApAQCAtMCwwICsxLDQ1IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/Pg0KKzw/ZWNsaXBzZSB2ZXJzaW9uPSIzLjAiPz4NCisNCis8IS0tDQorIDxjb3B5cmlnaHQ+DQorIDwvY29weXJpZ2h0Pg0KKw0KKyAkSWQkDQorLS0+DQorDQorPHBsdWdpbj4NCisNCisgICA8ZXh0ZW5zaW9uIHBvaW50PSJvcmcuZWNsaXBzZS51aS5uZXdXaXphcmRzIj4NCisgICAgICA8Y2F0ZWdvcnkNCisgICAgICAgICAgICBpZD0ib3JnLmVjbGlwc2UuZW1mLmVjb3JlLldpemFyZC5jYXRlZ29yeS5JRCINCisgICAgICAgICAgICBuYW1lPSIlX1VJX1dpemFyZF9jYXRlZ29yeSIvPg0KKyAgICAgIDx3aXphcmQNCisgICAgICAgICAgICBpZD0ib3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmdsb2JhbGluZmx1ZW56YW1vZGVsLnByZXNlbnRhdGlvbi5HbG9iYWxpbmZsdWVuemFtb2RlbE1vZGVsV2l6YXJkSUQiDQorICAgICAgICAgICAgbmFtZT0iJV9VSV9HbG9iYWxpbmZsdWVuemFtb2RlbE1vZGVsV2l6YXJkX2xhYmVsIg0KKyAgICAgICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZ2xvYmFsaW5mbHVlbnphbW9kZWwucHJlc2VudGF0aW9uLkdsb2JhbGluZmx1ZW56YW1vZGVsTW9kZWxXaXphcmQiDQorICAgICAgICAgICAgY2F0ZWdvcnk9Im9yZy5lY2xpcHNlLmVtZi5lY29yZS5XaXphcmQuY2F0ZWdvcnkuSUQiDQorICAgICAgICAgICAgaWNvbj0iaWNvbnMvZnVsbC9vYmoxNi9HbG9iYWxpbmZsdWVuemFtb2RlbE1vZGVsRmlsZS5naWYiPg0KKyAgICAgICAgIDxkZXNjcmlwdGlvbj4lX1VJX0dsb2JhbGluZmx1ZW56YW1vZGVsTW9kZWxXaXphcmRfZGVzY3JpcHRpb248L2Rlc2NyaXB0aW9uPg0KKyAgICAgICAgIDxzZWxlY3Rpb24gY2xhc3M9Im9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklSZXNvdXJjZSIvPg0KKyAgICAgIDwvd2l6YXJkPg0KKyAgIDwvZXh0ZW5zaW9uPg0KKw0KKyAgIDxleHRlbnNpb24gcG9pbnQ9Im9yZy5lY2xpcHNlLnVpLmVkaXRvcnMiPg0KKyAgICAgIDxlZGl0b3INCisgICAgICAgICAgICBpZD0ib3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmdsb2JhbGluZmx1ZW56YW1vZGVsLnByZXNlbnRhdGlvbi5HbG9iYWxpbmZsdWVuemFtb2RlbEVkaXRvcklEIg0KKyAgICAgICAgICAgIG5hbWU9IiVfVUlfR2xvYmFsaW5mbHVlbnphbW9kZWxFZGl0b3JfbGFiZWwiDQorICAgICAgICAgICAgaWNvbj0iaWNvbnMvZnVsbC9vYmoxNi9HbG9iYWxpbmZsdWVuemFtb2RlbE1vZGVsRmlsZS5naWYiDQorICAgICAgICAgICAgZXh0ZW5zaW9ucz0iZ2xvYmFsaW5mbHVlbnphbW9kZWwiDQorICAgICAgICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5nbG9iYWxpbmZsdWVuemFtb2RlbC5wcmVzZW50YXRpb24uR2xvYmFsaW5mbHVlbnphbW9kZWxFZGl0b3IiDQorICAgICAgICAgICAgY29udHJpYnV0b3JDbGFzcz0ib3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmdsb2JhbGluZmx1ZW56YW1vZGVsLnByZXNlbnRhdGlvbi5HbG9iYWxpbmZsdWVuemFtb2RlbEFjdGlvbkJhckNvbnRyaWJ1dG9yIj4NCisgICAgICA8L2VkaXRvcj4NCisgICA8L2V4dGVuc2lvbj4NCisgICA8ZXh0ZW5zaW9uDQorICAgICAgICBwb2ludD0ib3JnLmVjbGlwc2UudWkuc3RhcnR1cCI+DQorICAgICA8c3RhcnR1cA0KKyAgICAgICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy5nbG9iYWxpbmZsdWVuemFtb2RlbC5wcmVzZW50YXRpb24uR2xvYmFsaW5mbHVlbnphbW9kZWxQcm9wZXJ0eVN0cmluZ1Byb3ZpZGVyQWRhcHRlckZhY3RvcnkiPg0KKyAgICAgPC9zdGFydHVwPg0KKyAgPC9leHRlbnNpb24+DQorDQorPC9wbHVnaW4+DQpkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMuZ2xvYmFsaW5mbHVlbnphbW9kZWwvcGx1Z2luX2RlLnByb3BlcnRpZXMgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy5nbG9iYWxpbmZsdWVuemFtb2RlbC9wbHVnaW5fZGUucHJvcGVydGllcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMmJiMjljCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMuZ2xvYmFsaW5mbHVlbnphbW9kZWwvcGx1Z2luX2RlLnByb3BlcnRpZXMKQEAgLTAsMCArMSw1NyBAQAorCisjIDxjb3B5cmlnaHQ+CisjIDwvY29weXJpZ2h0PgorIworIyAkSWQkCisKK3BsdWdpbk5hbWU9U1RFTSBHbG9iYWxlcyBJbmZsdWVuemEtS3JhbmtoZWl0c21vZGVsbC1CZW51dHplcm9iZXJmbFx1MDBlNGNoZQorcHJvdmlkZXJOYW1lPUVjbGlwc2Uub3JnCisKK19VSV9HbG9iYWxpbmZsdWVuemFtb2RlbEVkaXRvcl9tZW51PSZHbG9iYWxpbmZsdWVuemFtb2RlbCBFZGl0b3IKKworX1VJX0NyZWF0ZUNoaWxkX21lbnVfaXRlbT0mTmV3IENoaWxkCitfVUlfQ3JlYXRlU2libGluZ19tZW51X2l0ZW09TiZldWVzIEdlc2Nod2lzdGVydGVpbAorCitfVUlfU2hvd1Byb3BlcnRpZXNWaWV3X21lbnVfaXRlbT1TaG93ICYgUHJvcGVydGllcyBWaWV3CitfVUlfUmVmcmVzaFZpZXdlcl9tZW51X2l0ZW09JlJlZnJlc2gKKworX1VJX1NlbGVjdGlvblBhZ2VfbGFiZWw9QXVzd2FobAorX1VJX1BhcmVudFBhZ2VfbGFiZWw9RWx0ZXJudGVpbAorX1VJX0xpc3RQYWdlX2xhYmVsPUxpc3RlCitfVUlfVHJlZVBhZ2VfbGFiZWw9QmF1bQorX1VJX1RhYmxlUGFnZV9sYWJlbD1UYWJlbGxlCitfVUlfVHJlZVdpdGhDb2x1bW5zUGFnZV9sYWJlbD1CYXVtIG1pdCBTcGFsdGVuCitfVUlfT2JqZWN0Q29sdW1uX2xhYmVsPU9iamVrdAorX1VJX1NlbGZDb2x1bW5fbGFiZWw9U2VsYnN0CisKK19VSV9Ob09iamVjdFNlbGVjdGVkPU5pY2h0cyBhdXNnZXdcdTAwZTRobHQKK19VSV9TaW5nbGVPYmplY3RTZWxlY3RlZD1BdXNnZXdcdTAwZTRobHRlcyBPYmpla3Q6IHswfQorX1VJX011bHRpT2JqZWN0U2VsZWN0ZWQ9QXVzZ2V3XHUwMGU0aGx0ZSB7MH0gT2JqZWt0ZQorCitfVUlfT3BlbkVkaXRvckVycm9yX2xhYmVsPUVkaXRvciBcdTAwZjZmZm5lbgorCitfVUlfV2l6YXJkX2NhdGVnb3J5PUJlaXNwaWVsIEVNRiBNb2RlbGwgRXJzdGVsbHVuZ3Nhc3Npc3RlbnQKKworX1VJX0NyZWF0ZU1vZGVsRXJyb3JfbWVzc2FnZT1BdWZnZXRyZXRlbmUgUHJvYmxlbWUgaW4gZGVyIERhdGVpICJ7MH0iCisKK19VSV9HbG9iYWxpbmZsdWVuemFtb2RlbE1vZGVsV2l6YXJkX2xhYmVsPUdsb2JhbGVzIEluZmx1ZW56YW1vZGVsbAorX1VJX0dsb2JhbGluZmx1ZW56YW1vZGVsTW9kZWxXaXphcmRfZGVzY3JpcHRpb249TmV1ZXMgZ2xvYmFsZXMgSW5mbHVlbnphbW9kZWxsIGVyc3RlbGxlbgorCitfVUlfR2xvYmFsaW5mbHVlbnphbW9kZWxFZGl0b3JfbGFiZWw9R2xvYmFsZS1JbmZsdWVuemEtTW9kZWxsLUVkaXRvcgorCitfVUlfR2xvYmFsaW5mbHVlbnphbW9kZWxFZGl0b3JGaWxlbmFtZURlZmF1bHRCYXNlPU1laW4KK19VSV9HbG9iYWxpbmZsdWVuemFtb2RlbEVkaXRvckZpbGVuYW1lRXh0ZW5zaW9ucz1HbG9iYWxlcyBJbmZsdWVuemFtb2RlbGwKKworX1VJX1dpemFyZF9sYWJlbD1OZXUKKworX1dBUk5fRmlsZW5hbWVFeHRlbnNpb249RGVyIERhdGVpbmFtZSBtdXNzIGF1ZiAiLnswfSIgZW5kZW4KK19XQVJOX0ZpbGVuYW1lRXh0ZW5zaW9ucz1EZXIgRGF0ZWluYW1lIG11c3MgZWluZSBkZXIgZm9sZ2VuZGVuIEVuZHVuZ2VuIGhhYmVuOiB7MH0KKworX1VJX01vZGVsT2JqZWN0PSZNb2RlbCBPYmplY3QKK19VSV9YTUxFbmNvZGluZz0mWE1MIEVuY29kaW5nCitfVUlfWE1MRW5jb2RpbmdDaG9pY2VzPVVURi04IEFTQ0lJIFVURi0xNiBVVEYtMTZCRSBVVEYtMTZMRSBJU08tODg1OS0xCitfVUlfV2l6YXJkX2luaXRpYWxfb2JqZWN0X2Rlc2NyaXB0aW9uPVp1IGVyemV1Z2VuZGVzIE1vZGVsbG9iamVrdCB3XHUwMGU0aGxlbgorCitfVUlfRmlsZUNvbmZsaWN0X2xhYmVsPURhdGVpa29uZmxpa3QKK19XQVJOX0ZpbGVDb25mbGljdD1FcyBnaWJ0IG5pY2h0IGdlc3BlaWNoZXJ0ZSBcdTAwYzRuZGVydW5nZW4sIGRpZSBLb25mbGlrdGUgbWl0IFx1MDBjNG5kZXJ1bmdlbiBhdVx1MDBkZmVyaGFsYiBkZXMgRWRpdG9ycyBlcnpldWdlbi4gTVx1MDBmNmNodGVuIFNpZSBkaWUgXHUwMGM0bmRlcnVuZ2VuIGltIEVkaXRvciB2ZXJ3ZXJmZW4/CisKZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzLmdsb2JhbGluZmx1ZW56YW1vZGVsL3BsdWdpbl9rci5wcm9wZXJ0aWVzIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMuZ2xvYmFsaW5mbHVlbnphbW9kZWwvcGx1Z2luX2tyLnByb3BlcnRpZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmViOWQyOAotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzLmdsb2JhbGluZmx1ZW56YW1vZGVsL3BsdWdpbl9rci5wcm9wZXJ0aWVzCkBAIC0wLDAgKzEsNTcgQEAKKworIyA8Y29weXJpZ2h0PgorIyA8L2NvcHlyaWdodD4KKyMKKyMgJElkJAorCitwbHVnaW5OYW1lPVNURU0gXHVhZTAwXHViODVjXHViYzhjIFx1Yzc3OFx1ZDUwY1x1YjhlOFx1YzVkNFx1Yzc5MCBcdWM5YzhcdWJjZDEgXHViYWE4XHViMzc4IFVJCitwcm92aWRlck5hbWU9RWNsaXBzZS5vcmcKKworX1VJX0dsb2JhbGluZmx1ZW56YW1vZGVsRWRpdG9yX21lbnU9Jkdsb2JhbGluZmx1ZW56YW1vZGVsIEVkaXRvcgorCitfVUlfQ3JlYXRlQ2hpbGRfbWVudV9pdGVtPSZOZXcgQ2hpbGQKK19VSV9DcmVhdGVTaWJsaW5nX21lbnVfaXRlbT1OJiAgXHVkNjE1XHVjODFjIFx1Yzc5MFx1YjllNAorCitfVUlfU2hvd1Byb3BlcnRpZXNWaWV3X21lbnVfaXRlbT1cdWQ0NWNcdWMyZGMgXHViYzBmIFx1YzE4ZFx1YzEzMVx1YmNmNFx1YWUzMAorX1VJX1JlZnJlc2hWaWV3ZXJfbWVudV9pdGVtPSZSZWZyZXNoCisKK19VSV9TZWxlY3Rpb25QYWdlX2xhYmVsPVx1YzEyMFx1ZDBkZAorX1VJX1BhcmVudFBhZ2VfbGFiZWw9XHViZDgwXHViYWE4CitfVUlfTGlzdFBhZ2VfbGFiZWw9XHViYWE5XHViODVkCitfVUlfVHJlZVBhZ2VfbGFiZWw9XHViMDk4XHViYjM0CitfVUlfVGFibGVQYWdlX2xhYmVsPVx1ZDE0Y1x1Yzc3NFx1YmUxNAorX1VJX1RyZWVXaXRoQ29sdW1uc1BhZ2VfbGFiZWw9XHViMDk4XHViYjM0XHVjNjQwIFx1YzVmNAorX1VJX09iamVjdENvbHVtbl9sYWJlbD1cdWFjMWNcdWNjYjQKK19VSV9TZWxmQ29sdW1uX2xhYmVsPVx1YzE0MFx1ZDUwNAorCitfVUlfTm9PYmplY3RTZWxlY3RlZD1cdWM1NDRcdWJiMzRcdWFjODNcdWIzYzQgXHVjNTQ4IFx1YzEyMFx1ZDBkZFx1ZDU2OAorX1VJX1NpbmdsZU9iamVjdFNlbGVjdGVkPVx1YzEyMFx1ZDBkZFx1ZDU1YyBcdWFjMWRcdWNjYjQgOiB7MH0KK19VSV9NdWx0aU9iamVjdFNlbGVjdGVkPVx1YzEyMFx1ZDBkZFx1YjQxYyB7MH0gXHVhYzFkXHVjY2I0CisKK19VSV9PcGVuRWRpdG9yRXJyb3JfbGFiZWw9XHVjNjI0XHVkNTA4IFx1YzVkMFx1YjUxNFx1ZDEzMAorCitfVUlfV2l6YXJkX2NhdGVnb3J5PVx1YzYwOFx1YzgxYyBFTUYgXHViYWE4XHViMzc4IFx1YzBkZFx1YzEzMSBcdWI5YzhcdWJjOTVcdWMwYWMKKworX1VJX0NyZWF0ZU1vZGVsRXJyb3JfbWVzc2FnZT1cdWQzMGNcdWM3N2MgJ3swfSAiXHVjNWQwXHVjMTFjIFx1YmIzOFx1YzgxYyBcdWJjMWNcdWMwZGQKKworX1VJX0dsb2JhbGluZmx1ZW56YW1vZGVsTW9kZWxXaXphcmRfbGFiZWw9XHVhZTAwXHViODVjXHViYzhjXHVjNzc4XHVkNTBjXHViOGU4XHVjNWQ0XHVjNzkwIFx1YmFhOFx1YjM3OAorX1VJX0dsb2JhbGluZmx1ZW56YW1vZGVsTW9kZWxXaXphcmRfZGVzY3JpcHRpb249XHVjMGM4XHViODVjXHVjNmI0IEdsb2JhbGluZmx1ZW56YW1vZGVsIFx1YmFhOFx1YjM3OCBcdWI5Y2NcdWI0ZTRcdWFlMzAKKworX1VJX0dsb2JhbGluZmx1ZW56YW1vZGVsRWRpdG9yX2xhYmVsPVx1YWUwMFx1Yjg1Y1x1YmM4Y1x1Yzc3OFx1ZDUwY1x1YjhlOFx1YzVkNFx1Yzc5MCBcdWJhYThcdWIzNzggXHVkM2I4XHVjOWQxXHVhZTMwCisKK19VSV9HbG9iYWxpbmZsdWVuemFtb2RlbEVkaXRvckZpbGVuYW1lRGVmYXVsdEJhc2U9XHViMDk4XHVjNzU4CitfVUlfR2xvYmFsaW5mbHVlbnphbW9kZWxFZGl0b3JGaWxlbmFtZUV4dGVuc2lvbnM9XHVhZTAwXHViODVjXHViYzhjXHVjOWM4XHViY2QxXHViYWE4XHViMzc4CisKK19VSV9XaXphcmRfbGFiZWw9XHVjMGM4XHViODVjXHVjNmI0CisKK19XQVJOX0ZpbGVuYW1lRXh0ZW5zaW9uPVx1ZDMwY1x1Yzc3YyBcdWM3NzRcdWI5ODRcdWM3NDAgIi57MH0iXHViODVjIFx1YjA1ZFx1YjA5OFx1YzU3Y1x1ZDU2OC4KK19XQVJOX0ZpbGVuYW1lRXh0ZW5zaW9ucz1cdWQzMGNcdWM3N2MgXHVjNzc0XHViOTg0XHVjNzQwIFx1YjJlNFx1Yzc0YyBcdWQ2NTVcdWM3YTVcdWM3OTAgXHVjOTExIFx1ZDU1OFx1YjA5OFx1Yjk3YyBcdWFjMDBcdWM4MzhcdWM1N2NcdWQ1NjggOiB7MH0KKworX1VJX01vZGVsT2JqZWN0PSZNb2RlbCBPYmplY3QKK19VSV9YTUxFbmNvZGluZz0mWE1MIEVuY29kaW5nCitfVUlfWE1MRW5jb2RpbmdDaG9pY2VzPVVURiAtIDggQVNDSUkgVVRGIC0gMTYgVVRGIC0gMTZCRSBVVEYgLSAxNkxFIElTTyAtIDg4NTkgLSAxCitfVUlfV2l6YXJkX2luaXRpYWxfb2JqZWN0X2Rlc2NyaXB0aW9uPVx1YzBkZFx1YzEzMVx1ZDU2MCBcdWJhYThcdWIzNzggXHVhYzFjXHVjY2I0IFx1YzEyMFx1ZDBkZAorCitfVUlfRmlsZUNvbmZsaWN0X2xhYmVsPVx1ZDMwY1x1Yzc3YyBcdWNkYTlcdWIzY2MKK19XQVJOX0ZpbGVDb25mbGljdD1cdWM4MDBcdWM3YTVcdWI0MThcdWM5YzAgXHVjNTRhXHVjNzQwIFx1YzBhY1x1ZDU2ZFx1YjRlNFx1Yzc3NCBcdWQzYjhcdWM5ZDFcdWFlMzAgXHVjNjc4XHViZDgwXHVjNzU4IFx1YmNjMFx1YWNiZCBcdWMwYWNcdWQ1NmRcdWI0ZTRcdWFjZmMgXHVjZGE5XHViM2NjXHVkNTY4LiBcdWM3NzQgXHVkM2I4XHVjOWQxXHVhZTMwXHVjNzU4IFx1YmNjMFx1YWNiZCBcdWMwYWNcdWQ1NmRcdWI0ZTRcdWM3NDQgXHVjZGU4XHVjMThjIFx1ZDU1OFx1YzJkY1x1YWNhMFx1YzJiNVx1YjJjOFx1YWU0Yz8KKwpkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMuZ2xvYmFsaW5mbHVlbnphbW9kZWwvcGx1Z2luX3poLnByb3BlcnRpZXMgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy5nbG9iYWxpbmZsdWVuemFtb2RlbC9wbHVnaW5femgucHJvcGVydGllcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMTI3MzRlCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMuZ2xvYmFsaW5mbHVlbnphbW9kZWwvcGx1Z2luX3poLnByb3BlcnRpZXMKQEAgLTAsMCArMSw1NyBAQAorCisjIDxjb3B5cmlnaHQ+CisjIDwvY29weXJpZ2h0PgorIworIyAkSWQkCisKK3BsdWdpbk5hbWU9U1RFTVx1NTE2OFx1NzQwM1x1NmQ0MVx1NjExZlx1NzViZVx1NzVjNVx1NmEyMVx1NTc4Ylx1NzY4NFx1NzUyOFx1NjIzN1x1NzU0Y1x1OTc2MgorcHJvdmlkZXJOYW1lPUVjbGlwc2Uub3JnCisKK19VSV9HbG9iYWxpbmZsdWVuemFtb2RlbEVkaXRvcl9tZW51PSZHbG9iYWxpbmZsdWVuemFtb2RlbCBFZGl0b3IKKworX1VJX0NyZWF0ZUNoaWxkX21lbnVfaXRlbT0mTmV3IENoaWxkCitfVUlfQ3JlYXRlU2libGluZ19tZW51X2l0ZW09XHU2NWIwXHU3NTFmXHU2MjEwXHU0ZTAwXHU0ZTJhXHU1MTQ0XHU1ZjFmXHU3YzdiCisKK19VSV9TaG93UHJvcGVydGllc1ZpZXdfbWVudV9pdGVtPVx1NjYzZVx1NzkzYVx1NTQ4Y1x1NWM1ZVx1NjAyN1x1NjdlNVx1NzcwYgorX1VJX1JlZnJlc2hWaWV3ZXJfbWVudV9pdGVtPSZSZWZyZXNoCisKK19VSV9TZWxlY3Rpb25QYWdlX2xhYmVsPVx1OTAwOVx1NjJlOQorX1VJX1BhcmVudFBhZ2VfbGFiZWw9XHU1YmI2XHU5NTdmCitfVUlfTGlzdFBhZ2VfbGFiZWw9XHU3NmVlXHU1ZjU1CitfVUlfVHJlZVBhZ2VfbGFiZWw9XHU2ODExCitfVUlfVGFibGVQYWdlX2xhYmVsPVx1ODg2OAorX1VJX1RyZWVXaXRoQ29sdW1uc1BhZ2VfbGFiZWw9XHU1MjA2XHU1MjE3XHU3Njg0XHU2ODExCitfVUlfT2JqZWN0Q29sdW1uX2xhYmVsPVx1NWJmOVx1OGM2MQorX1VJX1NlbGZDb2x1bW5fbGFiZWw9XHU4MWVhXHU1ZGYxCisKK19VSV9Ob09iamVjdFNlbGVjdGVkPVx1NjVlMFx1OTAwOVx1NWI5YVx1NTE4NVx1NWJiOQorX1VJX1NpbmdsZU9iamVjdFNlbGVjdGVkPVx1OTAwOVx1NjJlOVx1NWJmOVx1OGM2MVx1ZmYxYXswfQorX1VJX011bHRpT2JqZWN0U2VsZWN0ZWQ9XHU5MDA5XHU2MmU5ezB9XHU1YmY5XHU4YzYxCisKK19VSV9PcGVuRWRpdG9yRXJyb3JfbGFiZWw9XHU2MjUzXHU1ZjAwXHU3ZjE2XHU4ZjkxXHU1NjY4CisKK19VSV9XaXphcmRfY2F0ZWdvcnk9XHU0ZjhiXHU1OTgyRU1GXHU2YTIxXHU1NzhiXHU1MjFiXHU1ZWZhXHU1NDExXHU1YmZjCisKK19VSV9DcmVhdGVNb2RlbEVycm9yX21lc3NhZ2U9XHU1NzI4XHU2NTg3XHU0ZWY2XHUyMDFjezB9XHUyMDFkXHU0ZTJkXHU5MDQ3XHU1MjMwXHU3Njg0XHU5NWVlXHU5ODk4CisKK19VSV9HbG9iYWxpbmZsdWVuemFtb2RlbE1vZGVsV2l6YXJkX2xhYmVsPVx1NTE2OFx1NzQwM1x1NmQ0MVx1NjExZlx1NmEyMVx1NTc4YgorX1VJX0dsb2JhbGluZmx1ZW56YW1vZGVsTW9kZWxXaXphcmRfZGVzY3JpcHRpb249XHU1MjFiXHU1ZWZhXHU0ZTAwXHU0ZTJhXHU2NWIwXHU3Njg0XHU1MTY4XHU3NDAzXHU4MzAzXHU1NmY0XHU2ZDQxXHU2MTFmXHU2YTIxXHU1NzhiCisKK19VSV9HbG9iYWxpbmZsdWVuemFtb2RlbEVkaXRvcl9sYWJlbD1cdTUxNjhcdTc0MDNcdTZkNDFcdTYxMWZcdTZhMjFcdTU3OGJcdTdmMTZcdThmOTFcdTU2NjgKKworX1VJX0dsb2JhbGluZmx1ZW56YW1vZGVsRWRpdG9yRmlsZW5hbWVEZWZhdWx0QmFzZT1cdTYyMTFcdTc2ODQKK19VSV9HbG9iYWxpbmZsdWVuemFtb2RlbEVkaXRvckZpbGVuYW1lRXh0ZW5zaW9ucz1cdTUxNjhcdTc0MDNcdTYwMjdcdTc2ODRcdTZkNDFcdTYxMWZcdTZhMjFcdTU3OGIKKworX1VJX1dpemFyZF9sYWJlbD1cdTY1YjBcdTVlZmEKKworX1dBUk5fRmlsZW5hbWVFeHRlbnNpb249XHU2NTg3XHU0ZWY2XHU1NDBkXHU1ZmM1XHU5ODdiXHU0ZWU1J3swfSAnJ1x1N2VkM1x1NWMzZQorX1dBUk5fRmlsZW5hbWVFeHRlbnNpb25zPVx1NjU4N1x1NGVmNlx1NTQwZFx1NWZjNVx1OTg3Ylx1NTE3N1x1NjcwOVx1NGVlNVx1NGUwYlx1NjI2OVx1NWM1NVx1NTQwZFx1NGU0Ylx1NGUwMFx1ZmYxYXswfQorCitfVUlfTW9kZWxPYmplY3Q9Jk1vZGVsIE9iamVjdAorX1VJX1hNTEVuY29kaW5nPSZYTUwgRW5jb2RpbmcKK19VSV9YTUxFbmNvZGluZ0Nob2ljZXM9VVRGLTggQVNDSUkgVVRGLTE2IFVURi0xNkJFIFVURi0xNkxFIElTTy04ODU5LTEKK19VSV9XaXphcmRfaW5pdGlhbF9vYmplY3RfZGVzY3JpcHRpb249XHU5MDA5XHU2MmU5XHU1MjFiXHU1ZWZhXHU0ZTAwXHU0ZTJhXHU2YTIxXHU1NzhiXHU1YmY5XHU4YzYxCisKK19VSV9GaWxlQ29uZmxpY3RfbGFiZWw9XHU2NTg3XHU0ZWY2XHU1MWIyXHU3YTgxCitfV0FSTl9GaWxlQ29uZmxpY3Q9XHU2NzA5XHU2NzJhXHU0ZmRkXHU1YjU4XHU3Njg0XHU2NmY0XHU2NTM5XHU0ZTBlXHU3ZjE2XHU4ZjkxXHU1NjY4XHU1OTE2XHU3Njg0XHU2NmY0XHU2NTM5XHU1MWIyXHU3YTgxXHUzMDAyXHU0ZjYwXHU2MGYzXHU2NTNlXHU1ZjAzXHU4ZmQ5XHU0ZTJhXHU3ZjE2XHU4ZjkxXHU1NjY4XHU3Njg0XHU2NmY0XHU2NTM5XHU1NDE3XHVmZjFmCisKZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzLmdsb2JhbGluZmx1ZW56YW1vZGVsL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvZ2xvYmFsaW5mbHVlbnphbW9kZWwvcHJlc2VudGF0aW9uL0dsb2JhbGluZmx1ZW56YW1vZGVsQWN0aW9uQmFyQ29udHJpYnV0b3IuamF2YSBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzLmdsb2JhbGluZmx1ZW56YW1vZGVsL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvZ2xvYmFsaW5mbHVlbnphbW9kZWwvcHJlc2VudGF0aW9uL0dsb2JhbGluZmx1ZW56YW1vZGVsQWN0aW9uQmFyQ29udHJpYnV0b3IuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNjc3MjU0Ci0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMuZ2xvYmFsaW5mbHVlbnphbW9kZWwvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9nbG9iYWxpbmZsdWVuemFtb2RlbC9wcmVzZW50YXRpb24vR2xvYmFsaW5mbHVlbnphbW9kZWxBY3Rpb25CYXJDb250cmlidXRvci5qYXZhCkBAIC0wLDAgKzEsNDI4IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5nbG9iYWxpbmZsdWVuemFtb2RlbC5wcmVzZW50YXRpb247DQorDQorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisgKiBDb3B5cmlnaHQgKGMpIDIwMDkgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuDQorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscw0KKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMA0KKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0DQorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwNCisgKg0KKyAqIENvbnRyaWJ1dG9yczoNCisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uDQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQorDQoraW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7DQoraW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOw0KKw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnVpLnZpZXdlci5JVmlld2VyUHJvdmlkZXI7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LmRvbWFpbi5FZGl0aW5nRG9tYWluOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5kb21haW4uSUVkaXRpbmdEb21haW5Qcm92aWRlcjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkuYWN0aW9uLkNvbnRyb2xBY3Rpb247DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmFjdGlvbi5DcmVhdGVDaGlsZEFjdGlvbjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkuYWN0aW9uLkNyZWF0ZVNpYmxpbmdBY3Rpb247DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmFjdGlvbi5FZGl0aW5nRG9tYWluQWN0aW9uQmFyQ29udHJpYnV0b3I7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmFjdGlvbi5Mb2FkUmVzb3VyY2VBY3Rpb247DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmFjdGlvbi5WYWxpZGF0ZUFjdGlvbjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLkFjdGlvbjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLkFjdGlvbkNvbnRyaWJ1dGlvbkl0ZW07DQoraW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JQWN0aW9uOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSUNvbnRyaWJ1dGlvbkl0ZW07DQoraW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JQ29udHJpYnV0aW9uTWFuYWdlcjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklNZW51TGlzdGVuZXI7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JTWVudU1hbmFnZXI7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JVG9vbEJhck1hbmFnZXI7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5NZW51TWFuYWdlcjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLlNlcGFyYXRvcjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLlN1YkNvbnRyaWJ1dGlvbkl0ZW07DQoraW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvbjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb25Qcm92aWRlcjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU3RydWN0dXJlZFNlbGVjdGlvbjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5TZWxlY3Rpb25DaGFuZ2VkRXZlbnQ7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuVmlld2VyOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMuZ2xvYmFsaW5mbHVlbnphbW9kZWwucHJlc2VudGF0aW9uLkdsb2JhbGluZmx1ZW56YW1vZGVsRWRpdG9yUGx1Z2luOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5JRWRpdG9yUGFydDsNCitpbXBvcnQgb3JnLmVjbGlwc2UudWkuUGFydEluaXRFeGNlcHRpb247DQorDQorLyoqDQorICogVGhpcyBpcyB0aGUgYWN0aW9uIGJhciBjb250cmlidXRvciBmb3IgdGhlIEdsb2JhbGluZmx1ZW56YW1vZGVsIG1vZGVsIGVkaXRvci4NCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKyAqIEBnZW5lcmF0ZWQNCisgKi8NCitwdWJsaWMgY2xhc3MgR2xvYmFsaW5mbHVlbnphbW9kZWxBY3Rpb25CYXJDb250cmlidXRvcg0KKwlleHRlbmRzIEVkaXRpbmdEb21haW5BY3Rpb25CYXJDb250cmlidXRvcg0KKwlpbXBsZW1lbnRzIElTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIgew0KKwkvKioNCisJICogVGhpcyBrZWVwcyB0cmFjayBvZiB0aGUgYWN0aXZlIGVkaXRvci4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCBJRWRpdG9yUGFydCBhY3RpdmVFZGl0b3JQYXJ0Ow0KKw0KKwkvKioNCisJICogVGhpcyBrZWVwcyB0cmFjayBvZiB0aGUgY3VycmVudCBzZWxlY3Rpb24gcHJvdmlkZXIuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgSVNlbGVjdGlvblByb3ZpZGVyIHNlbGVjdGlvblByb3ZpZGVyOw0KKw0KKwkvKioNCisJICogVGhpcyBhY3Rpb24gb3BlbnMgdGhlIFByb3BlcnRpZXMgdmlldy4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCBJQWN0aW9uIHNob3dQcm9wZXJ0aWVzVmlld0FjdGlvbiA9DQorCQluZXcgQWN0aW9uKEdsb2JhbGluZmx1ZW56YW1vZGVsRWRpdG9yUGx1Z2luLklOU1RBTkNFLmdldFN0cmluZygiX1VJX1Nob3dQcm9wZXJ0aWVzVmlld19tZW51X2l0ZW0iKSkgew0KKwkJCUBPdmVycmlkZQ0KKwkJCXB1YmxpYyB2b2lkIHJ1bigpIHsNCisJCQkJdHJ5IHsNCisJCQkJCWdldFBhZ2UoKS5zaG93Vmlldygib3JnLmVjbGlwc2UudWkudmlld3MuUHJvcGVydHlTaGVldCIpOw0KKwkJCQl9DQorCQkJCWNhdGNoIChQYXJ0SW5pdEV4Y2VwdGlvbiBleGNlcHRpb24pIHsNCisJCQkJCUdsb2JhbGluZmx1ZW56YW1vZGVsRWRpdG9yUGx1Z2luLklOU1RBTkNFLmxvZyhleGNlcHRpb24pOw0KKwkJCQl9DQorCQkJfQ0KKwkJfTsNCisNCisJLyoqDQorCSAqIFRoaXMgYWN0aW9uIHJlZnJlc2hlcyB0aGUgdmlld2VyIG9mIHRoZSBjdXJyZW50IGVkaXRvciBpZiB0aGUgZWRpdG9yDQorCSAqIGltcGxlbWVudHMge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5jb21tb24udWkudmlld2VyLklWaWV3ZXJQcm92aWRlcn0uDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgSUFjdGlvbiByZWZyZXNoVmlld2VyQWN0aW9uID0NCisJCW5ldyBBY3Rpb24oR2xvYmFsaW5mbHVlbnphbW9kZWxFZGl0b3JQbHVnaW4uSU5TVEFOQ0UuZ2V0U3RyaW5nKCJfVUlfUmVmcmVzaFZpZXdlcl9tZW51X2l0ZW0iKSkgew0KKwkJCUBPdmVycmlkZQ0KKwkJCXB1YmxpYyBib29sZWFuIGlzRW5hYmxlZCgpIHsNCisJCQkJcmV0dXJuIGFjdGl2ZUVkaXRvclBhcnQgaW5zdGFuY2VvZiBJVmlld2VyUHJvdmlkZXI7DQorCQkJfQ0KKw0KKwkJCUBPdmVycmlkZQ0KKwkJCXB1YmxpYyB2b2lkIHJ1bigpIHsNCisJCQkJaWYgKGFjdGl2ZUVkaXRvclBhcnQgaW5zdGFuY2VvZiBJVmlld2VyUHJvdmlkZXIpIHsNCisJCQkJCVZpZXdlciB2aWV3ZXIgPSAoKElWaWV3ZXJQcm92aWRlcilhY3RpdmVFZGl0b3JQYXJ0KS5nZXRWaWV3ZXIoKTsNCisJCQkJCWlmICh2aWV3ZXIgIT0gbnVsbCkgew0KKwkJCQkJCXZpZXdlci5yZWZyZXNoKCk7DQorCQkJCQl9DQorCQkJCX0NCisJCQl9DQorCQl9Ow0KKw0KKwkvKioNCisJICogVGhpcyB3aWxsIGNvbnRhaW4gb25lIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5hY3Rpb24uQ3JlYXRlQ2hpbGRBY3Rpb259IGNvcnJlc3BvbmRpbmcgdG8gZWFjaCBkZXNjcmlwdG9yDQorCSAqIGdlbmVyYXRlZCBmb3IgdGhlIGN1cnJlbnQgc2VsZWN0aW9uIGJ5IHRoZSBpdGVtIHByb3ZpZGVyLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIENvbGxlY3Rpb248SUFjdGlvbj4gY3JlYXRlQ2hpbGRBY3Rpb25zOw0KKw0KKwkvKioNCisJICogVGhpcyBpcyB0aGUgbWVudSBtYW5hZ2VyIGludG8gd2hpY2ggbWVudSBjb250cmlidXRpb24gaXRlbXMgc2hvdWxkIGJlIGFkZGVkIGZvciBDcmVhdGVDaGlsZCBhY3Rpb25zLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIElNZW51TWFuYWdlciBjcmVhdGVDaGlsZE1lbnVNYW5hZ2VyOw0KKw0KKwkvKioNCisJICogVGhpcyB3aWxsIGNvbnRhaW4gb25lIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5hY3Rpb24uQ3JlYXRlU2libGluZ0FjdGlvbn0gY29ycmVzcG9uZGluZyB0byBlYWNoIGRlc2NyaXB0b3INCisJICogZ2VuZXJhdGVkIGZvciB0aGUgY3VycmVudCBzZWxlY3Rpb24gYnkgdGhlIGl0ZW0gcHJvdmlkZXIuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgQ29sbGVjdGlvbjxJQWN0aW9uPiBjcmVhdGVTaWJsaW5nQWN0aW9uczsNCisNCisJLyoqDQorCSAqIFRoaXMgaXMgdGhlIG1lbnUgbWFuYWdlciBpbnRvIHdoaWNoIG1lbnUgY29udHJpYnV0aW9uIGl0ZW1zIHNob3VsZCBiZSBhZGRlZCBmb3IgQ3JlYXRlU2libGluZyBhY3Rpb25zLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIElNZW51TWFuYWdlciBjcmVhdGVTaWJsaW5nTWVudU1hbmFnZXI7DQorDQorCS8qKg0KKwkgKiBUaGlzIGNyZWF0ZXMgYW4gaW5zdGFuY2Ugb2YgdGhlIGNvbnRyaWJ1dG9yLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIEdsb2JhbGluZmx1ZW56YW1vZGVsQWN0aW9uQmFyQ29udHJpYnV0b3IoKSB7DQorCQlzdXBlcihBRERJVElPTlNfTEFTVF9TVFlMRSk7DQorCQlsb2FkUmVzb3VyY2VBY3Rpb24gPSBuZXcgTG9hZFJlc291cmNlQWN0aW9uKCk7DQorCQl2YWxpZGF0ZUFjdGlvbiA9IG5ldyBWYWxpZGF0ZUFjdGlvbigpOw0KKwkJY29udHJvbEFjdGlvbiA9IG5ldyBDb250cm9sQWN0aW9uKCk7DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgYWRkcyBTZXBhcmF0b3JzIGZvciBlZGl0b3IgYWRkaXRpb25zIHRvIHRoZSB0b29sIGJhci4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCUBPdmVycmlkZQ0KKwlwdWJsaWMgdm9pZCBjb250cmlidXRlVG9Ub29sQmFyKElUb29sQmFyTWFuYWdlciB0b29sQmFyTWFuYWdlcikgew0KKwkJdG9vbEJhck1hbmFnZXIuYWRkKG5ldyBTZXBhcmF0b3IoImdsb2JhbGluZmx1ZW56YW1vZGVsLXNldHRpbmdzIikpOw0KKwkJdG9vbEJhck1hbmFnZXIuYWRkKG5ldyBTZXBhcmF0b3IoImdsb2JhbGluZmx1ZW56YW1vZGVsLWFkZGl0aW9ucyIpKTsNCisJfQ0KKw0KKwkvKioNCisJICogVGhpcyBhZGRzIHRvIHRoZSBtZW51IGJhciBhIG1lbnUgYW5kIHNvbWUgc2VwYXJhdG9ycyBmb3IgZWRpdG9yIGFkZGl0aW9ucywNCisJICogYXMgd2VsbCBhcyB0aGUgc3ViLW1lbnVzIGZvciBvYmplY3QgY3JlYXRpb24gaXRlbXMuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlAT3ZlcnJpZGUNCisJcHVibGljIHZvaWQgY29udHJpYnV0ZVRvTWVudShJTWVudU1hbmFnZXIgbWVudU1hbmFnZXIpIHsNCisJCXN1cGVyLmNvbnRyaWJ1dGVUb01lbnUobWVudU1hbmFnZXIpOw0KKw0KKwkJSU1lbnVNYW5hZ2VyIHN1Ym1lbnVNYW5hZ2VyID0gbmV3IE1lbnVNYW5hZ2VyKEdsb2JhbGluZmx1ZW56YW1vZGVsRWRpdG9yUGx1Z2luLklOU1RBTkNFLmdldFN0cmluZygiX1VJX0dsb2JhbGluZmx1ZW56YW1vZGVsRWRpdG9yX21lbnUiKSwgIm9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5nbG9iYWxpbmZsdWVuemFtb2RlbE1lbnVJRCIpOw0KKwkJbWVudU1hbmFnZXIuaW5zZXJ0QWZ0ZXIoImFkZGl0aW9ucyIsIHN1Ym1lbnVNYW5hZ2VyKTsNCisJCXN1Ym1lbnVNYW5hZ2VyLmFkZChuZXcgU2VwYXJhdG9yKCJzZXR0aW5ncyIpKTsNCisJCXN1Ym1lbnVNYW5hZ2VyLmFkZChuZXcgU2VwYXJhdG9yKCJhY3Rpb25zIikpOw0KKwkJc3VibWVudU1hbmFnZXIuYWRkKG5ldyBTZXBhcmF0b3IoImFkZGl0aW9ucyIpKTsNCisJCXN1Ym1lbnVNYW5hZ2VyLmFkZChuZXcgU2VwYXJhdG9yKCJhZGRpdGlvbnMtZW5kIikpOw0KKw0KKwkJLy8gUHJlcGFyZSBmb3IgQ3JlYXRlQ2hpbGQgaXRlbSBhZGRpdGlvbiBvciByZW1vdmFsLg0KKwkJLy8NCisJCWNyZWF0ZUNoaWxkTWVudU1hbmFnZXIgPSBuZXcgTWVudU1hbmFnZXIoR2xvYmFsaW5mbHVlbnphbW9kZWxFZGl0b3JQbHVnaW4uSU5TVEFOQ0UuZ2V0U3RyaW5nKCJfVUlfQ3JlYXRlQ2hpbGRfbWVudV9pdGVtIikpOw0KKwkJc3VibWVudU1hbmFnZXIuaW5zZXJ0QmVmb3JlKCJhZGRpdGlvbnMiLCBjcmVhdGVDaGlsZE1lbnVNYW5hZ2VyKTsNCisNCisJCS8vIFByZXBhcmUgZm9yIENyZWF0ZVNpYmxpbmcgaXRlbSBhZGRpdGlvbiBvciByZW1vdmFsLg0KKwkJLy8NCisJCWNyZWF0ZVNpYmxpbmdNZW51TWFuYWdlciA9IG5ldyBNZW51TWFuYWdlcihHbG9iYWxpbmZsdWVuemFtb2RlbEVkaXRvclBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoIl9VSV9DcmVhdGVTaWJsaW5nX21lbnVfaXRlbSIpKTsNCisJCXN1Ym1lbnVNYW5hZ2VyLmluc2VydEJlZm9yZSgiYWRkaXRpb25zIiwgY3JlYXRlU2libGluZ01lbnVNYW5hZ2VyKTsNCisNCisJCS8vIEZvcmNlIGFuIHVwZGF0ZSBiZWNhdXNlIEVjbGlwc2UgaGlkZXMgZW1wdHkgbWVudXMgbm93Lg0KKwkJLy8NCisJCXN1Ym1lbnVNYW5hZ2VyLmFkZE1lbnVMaXN0ZW5lcg0KKwkJCShuZXcgSU1lbnVMaXN0ZW5lcigpIHsNCisJCQkJIHB1YmxpYyB2b2lkIG1lbnVBYm91dFRvU2hvdyhJTWVudU1hbmFnZXIgbWVudU1hbmFnZXIpIHsNCisJCQkJCSBtZW51TWFuYWdlci51cGRhdGVBbGwodHJ1ZSk7DQorCQkJCSB9DQorCQkJIH0pOw0KKw0KKwkJYWRkR2xvYmFsQWN0aW9ucyhzdWJtZW51TWFuYWdlcik7DQorCX0NCisNCisJLyoqDQorCSAqIFdoZW4gdGhlIGFjdGl2ZSBlZGl0b3IgY2hhbmdlcywgdGhpcyByZW1lbWJlcnMgdGhlIGNoYW5nZSBhbmQgcmVnaXN0ZXJzIHdpdGggaXQgYXMgYSBzZWxlY3Rpb24gcHJvdmlkZXIuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlAT3ZlcnJpZGUNCisJcHVibGljIHZvaWQgc2V0QWN0aXZlRWRpdG9yKElFZGl0b3JQYXJ0IHBhcnQpIHsNCisJCXN1cGVyLnNldEFjdGl2ZUVkaXRvcihwYXJ0KTsNCisJCWFjdGl2ZUVkaXRvclBhcnQgPSBwYXJ0Ow0KKw0KKwkJLy8gU3dpdGNoIHRvIHRoZSBuZXcgc2VsZWN0aW9uIHByb3ZpZGVyLg0KKwkJLy8NCisJCWlmIChzZWxlY3Rpb25Qcm92aWRlciAhPSBudWxsKSB7DQorCQkJc2VsZWN0aW9uUHJvdmlkZXIucmVtb3ZlU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyKHRoaXMpOw0KKwkJfQ0KKwkJaWYgKHBhcnQgPT0gbnVsbCkgew0KKwkJCXNlbGVjdGlvblByb3ZpZGVyID0gbnVsbDsNCisJCX0NCisJCWVsc2Ugew0KKwkJCXNlbGVjdGlvblByb3ZpZGVyID0gcGFydC5nZXRTaXRlKCkuZ2V0U2VsZWN0aW9uUHJvdmlkZXIoKTsNCisJCQlzZWxlY3Rpb25Qcm92aWRlci5hZGRTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIodGhpcyk7DQorDQorCQkJLy8gRmFrZSBhIHNlbGVjdGlvbiBjaGFuZ2VkIGV2ZW50IHRvIHVwZGF0ZSB0aGUgbWVudXMuDQorCQkJLy8NCisJCQlpZiAoc2VsZWN0aW9uUHJvdmlkZXIuZ2V0U2VsZWN0aW9uKCkgIT0gbnVsbCkgew0KKwkJCQlzZWxlY3Rpb25DaGFuZ2VkKG5ldyBTZWxlY3Rpb25DaGFuZ2VkRXZlbnQoc2VsZWN0aW9uUHJvdmlkZXIsIHNlbGVjdGlvblByb3ZpZGVyLmdldFNlbGVjdGlvbigpKSk7DQorCQkJfQ0KKwkJfQ0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIGltcGxlbWVudHMge0BsaW5rIG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcn0sDQorCSAqIGhhbmRsaW5nIHtAbGluayBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlNlbGVjdGlvbkNoYW5nZWRFdmVudH1zIGJ5IHF1ZXJ5aW5nIGZvciB0aGUgY2hpbGRyZW4gYW5kIHNpYmxpbmdzDQorCSAqIHRoYXQgY2FuIGJlIGFkZGVkIHRvIHRoZSBzZWxlY3RlZCBvYmplY3QgYW5kIHVwZGF0aW5nIHRoZSBtZW51cyBhY2NvcmRpbmdseS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyB2b2lkIHNlbGVjdGlvbkNoYW5nZWQoU2VsZWN0aW9uQ2hhbmdlZEV2ZW50IGV2ZW50KSB7DQorCQkvLyBSZW1vdmUgYW55IG1lbnUgaXRlbXMgZm9yIG9sZCBzZWxlY3Rpb24uDQorCQkvLw0KKwkJaWYgKGNyZWF0ZUNoaWxkTWVudU1hbmFnZXIgIT0gbnVsbCkgew0KKwkJCWRlcG9wdWxhdGVNYW5hZ2VyKGNyZWF0ZUNoaWxkTWVudU1hbmFnZXIsIGNyZWF0ZUNoaWxkQWN0aW9ucyk7DQorCQl9DQorCQlpZiAoY3JlYXRlU2libGluZ01lbnVNYW5hZ2VyICE9IG51bGwpIHsNCisJCQlkZXBvcHVsYXRlTWFuYWdlcihjcmVhdGVTaWJsaW5nTWVudU1hbmFnZXIsIGNyZWF0ZVNpYmxpbmdBY3Rpb25zKTsNCisJCX0NCisNCisJCS8vIFF1ZXJ5IHRoZSBuZXcgc2VsZWN0aW9uIGZvciBhcHByb3ByaWF0ZSBuZXcgY2hpbGQvc2libGluZyBkZXNjcmlwdG9ycw0KKwkJLy8NCisJCUNvbGxlY3Rpb248Pz4gbmV3Q2hpbGREZXNjcmlwdG9ycyA9IG51bGw7DQorCQlDb2xsZWN0aW9uPD8+IG5ld1NpYmxpbmdEZXNjcmlwdG9ycyA9IG51bGw7DQorDQorCQlJU2VsZWN0aW9uIHNlbGVjdGlvbiA9IGV2ZW50LmdldFNlbGVjdGlvbigpOw0KKwkJaWYgKHNlbGVjdGlvbiBpbnN0YW5jZW9mIElTdHJ1Y3R1cmVkU2VsZWN0aW9uICYmICgoSVN0cnVjdHVyZWRTZWxlY3Rpb24pc2VsZWN0aW9uKS5zaXplKCkgPT0gMSkgew0KKwkJCU9iamVjdCBvYmplY3QgPSAoKElTdHJ1Y3R1cmVkU2VsZWN0aW9uKXNlbGVjdGlvbikuZ2V0Rmlyc3RFbGVtZW50KCk7DQorDQorCQkJRWRpdGluZ0RvbWFpbiBkb21haW4gPSAoKElFZGl0aW5nRG9tYWluUHJvdmlkZXIpYWN0aXZlRWRpdG9yUGFydCkuZ2V0RWRpdGluZ0RvbWFpbigpOw0KKw0KKwkJCW5ld0NoaWxkRGVzY3JpcHRvcnMgPSBkb21haW4uZ2V0TmV3Q2hpbGREZXNjcmlwdG9ycyhvYmplY3QsIG51bGwpOw0KKwkJCW5ld1NpYmxpbmdEZXNjcmlwdG9ycyA9IGRvbWFpbi5nZXROZXdDaGlsZERlc2NyaXB0b3JzKG51bGwsIG9iamVjdCk7DQorCQl9DQorDQorCQkvLyBHZW5lcmF0ZSBhY3Rpb25zIGZvciBzZWxlY3Rpb247IHBvcHVsYXRlIGFuZCByZWRyYXcgdGhlIG1lbnVzLg0KKwkJLy8NCisJCWNyZWF0ZUNoaWxkQWN0aW9ucyA9IGdlbmVyYXRlQ3JlYXRlQ2hpbGRBY3Rpb25zKG5ld0NoaWxkRGVzY3JpcHRvcnMsIHNlbGVjdGlvbik7DQorCQljcmVhdGVTaWJsaW5nQWN0aW9ucyA9IGdlbmVyYXRlQ3JlYXRlU2libGluZ0FjdGlvbnMobmV3U2libGluZ0Rlc2NyaXB0b3JzLCBzZWxlY3Rpb24pOw0KKw0KKwkJaWYgKGNyZWF0ZUNoaWxkTWVudU1hbmFnZXIgIT0gbnVsbCkgew0KKwkJCXBvcHVsYXRlTWFuYWdlcihjcmVhdGVDaGlsZE1lbnVNYW5hZ2VyLCBjcmVhdGVDaGlsZEFjdGlvbnMsIG51bGwpOw0KKwkJCWNyZWF0ZUNoaWxkTWVudU1hbmFnZXIudXBkYXRlKHRydWUpOw0KKwkJfQ0KKwkJaWYgKGNyZWF0ZVNpYmxpbmdNZW51TWFuYWdlciAhPSBudWxsKSB7DQorCQkJcG9wdWxhdGVNYW5hZ2VyKGNyZWF0ZVNpYmxpbmdNZW51TWFuYWdlciwgY3JlYXRlU2libGluZ0FjdGlvbnMsIG51bGwpOw0KKwkJCWNyZWF0ZVNpYmxpbmdNZW51TWFuYWdlci51cGRhdGUodHJ1ZSk7DQorCQl9DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgZ2VuZXJhdGVzIGEge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmFjdGlvbi5DcmVhdGVDaGlsZEFjdGlvbn0gZm9yIGVhY2ggb2JqZWN0IGluIDxjb2RlPmRlc2NyaXB0b3JzPC9jb2RlPiwNCisJICogYW5kIHJldHVybnMgdGhlIGNvbGxlY3Rpb24gb2YgdGhlc2UgYWN0aW9ucy4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCBDb2xsZWN0aW9uPElBY3Rpb24+IGdlbmVyYXRlQ3JlYXRlQ2hpbGRBY3Rpb25zKENvbGxlY3Rpb248Pz4gZGVzY3JpcHRvcnMsIElTZWxlY3Rpb24gc2VsZWN0aW9uKSB7DQorCQlDb2xsZWN0aW9uPElBY3Rpb24+IGFjdGlvbnMgPSBuZXcgQXJyYXlMaXN0PElBY3Rpb24+KCk7DQorCQlpZiAoZGVzY3JpcHRvcnMgIT0gbnVsbCkgew0KKwkJCWZvciAoT2JqZWN0IGRlc2NyaXB0b3IgOiBkZXNjcmlwdG9ycykgew0KKwkJCQlhY3Rpb25zLmFkZChuZXcgQ3JlYXRlQ2hpbGRBY3Rpb24oYWN0aXZlRWRpdG9yUGFydCwgc2VsZWN0aW9uLCBkZXNjcmlwdG9yKSk7DQorCQkJfQ0KKwkJfQ0KKwkJcmV0dXJuIGFjdGlvbnM7DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgZ2VuZXJhdGVzIGEge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmFjdGlvbi5DcmVhdGVTaWJsaW5nQWN0aW9ufSBmb3IgZWFjaCBvYmplY3QgaW4gPGNvZGU+ZGVzY3JpcHRvcnM8L2NvZGU+LA0KKwkgKiBhbmQgcmV0dXJucyB0aGUgY29sbGVjdGlvbiBvZiB0aGVzZSBhY3Rpb25zLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIENvbGxlY3Rpb248SUFjdGlvbj4gZ2VuZXJhdGVDcmVhdGVTaWJsaW5nQWN0aW9ucyhDb2xsZWN0aW9uPD8+IGRlc2NyaXB0b3JzLCBJU2VsZWN0aW9uIHNlbGVjdGlvbikgew0KKwkJQ29sbGVjdGlvbjxJQWN0aW9uPiBhY3Rpb25zID0gbmV3IEFycmF5TGlzdDxJQWN0aW9uPigpOw0KKwkJaWYgKGRlc2NyaXB0b3JzICE9IG51bGwpIHsNCisJCQlmb3IgKE9iamVjdCBkZXNjcmlwdG9yIDogZGVzY3JpcHRvcnMpIHsNCisJCQkJYWN0aW9ucy5hZGQobmV3IENyZWF0ZVNpYmxpbmdBY3Rpb24oYWN0aXZlRWRpdG9yUGFydCwgc2VsZWN0aW9uLCBkZXNjcmlwdG9yKSk7DQorCQkJfQ0KKwkJfQ0KKwkJcmV0dXJuIGFjdGlvbnM7DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgcG9wdWxhdGVzIHRoZSBzcGVjaWZpZWQgPGNvZGU+bWFuYWdlcjwvY29kZT4gd2l0aCB7QGxpbmsgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLkFjdGlvbkNvbnRyaWJ1dGlvbkl0ZW19cw0KKwkgKiBiYXNlZCBvbiB0aGUge0BsaW5rIG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JQWN0aW9ufXMgY29udGFpbmVkIGluIHRoZSA8Y29kZT5hY3Rpb25zPC9jb2RlPiBjb2xsZWN0aW9uLA0KKwkgKiBieSBpbnNlcnRpbmcgdGhlbSBiZWZvcmUgdGhlIHNwZWNpZmllZCBjb250cmlidXRpb24gaXRlbSA8Y29kZT5jb250cmlidXRpb25JRDwvY29kZT4uDQorCSAqIElmIDxjb2RlPmNvbnRyaWJ1dGlvbklEPC9jb2RlPiBpcyA8Y29kZT5udWxsPC9jb2RlPiwgdGhleSBhcmUgc2ltcGx5IGFkZGVkLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIHZvaWQgcG9wdWxhdGVNYW5hZ2VyKElDb250cmlidXRpb25NYW5hZ2VyIG1hbmFnZXIsIENvbGxlY3Rpb248PyBleHRlbmRzIElBY3Rpb24+IGFjdGlvbnMsIFN0cmluZyBjb250cmlidXRpb25JRCkgew0KKwkJaWYgKGFjdGlvbnMgIT0gbnVsbCkgew0KKwkJCWZvciAoSUFjdGlvbiBhY3Rpb24gOiBhY3Rpb25zKSB7DQorCQkJCWlmIChjb250cmlidXRpb25JRCAhPSBudWxsKSB7DQorCQkJCQltYW5hZ2VyLmluc2VydEJlZm9yZShjb250cmlidXRpb25JRCwgYWN0aW9uKTsNCisJCQkJfQ0KKwkJCQllbHNlIHsNCisJCQkJCW1hbmFnZXIuYWRkKGFjdGlvbik7DQorCQkJCX0NCisJCQl9DQorCQl9DQorCX0NCisJCQ0KKwkvKioNCisJICogVGhpcyByZW1vdmVzIGZyb20gdGhlIHNwZWNpZmllZCA8Y29kZT5tYW5hZ2VyPC9jb2RlPiBhbGwge0BsaW5rIG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5BY3Rpb25Db250cmlidXRpb25JdGVtfXMNCisJICogYmFzZWQgb24gdGhlIHtAbGluayBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSUFjdGlvbn1zIGNvbnRhaW5lZCBpbiB0aGUgPGNvZGU+YWN0aW9uczwvY29kZT4gY29sbGVjdGlvbi4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCB2b2lkIGRlcG9wdWxhdGVNYW5hZ2VyKElDb250cmlidXRpb25NYW5hZ2VyIG1hbmFnZXIsIENvbGxlY3Rpb248PyBleHRlbmRzIElBY3Rpb24+IGFjdGlvbnMpIHsNCisJCWlmIChhY3Rpb25zICE9IG51bGwpIHsNCisJCQlJQ29udHJpYnV0aW9uSXRlbVtdIGl0ZW1zID0gbWFuYWdlci5nZXRJdGVtcygpOw0KKwkJCWZvciAoaW50IGkgPSAwOyBpIDwgaXRlbXMubGVuZ3RoOyBpKyspIHsNCisJCQkJLy8gTG9vayBpbnRvIFN1YkNvbnRyaWJ1dGlvbkl0ZW1zDQorCQkJCS8vDQorCQkJCUlDb250cmlidXRpb25JdGVtIGNvbnRyaWJ1dGlvbkl0ZW0gPSBpdGVtc1tpXTsNCisJCQkJd2hpbGUgKGNvbnRyaWJ1dGlvbkl0ZW0gaW5zdGFuY2VvZiBTdWJDb250cmlidXRpb25JdGVtKSB7DQorCQkJCQljb250cmlidXRpb25JdGVtID0gKChTdWJDb250cmlidXRpb25JdGVtKWNvbnRyaWJ1dGlvbkl0ZW0pLmdldElubmVySXRlbSgpOw0KKwkJCQl9DQorDQorCQkJCS8vIERlbGV0ZSB0aGUgQWN0aW9uQ29udHJpYnV0aW9uSXRlbXMgd2l0aCBtYXRjaGluZyBhY3Rpb24uDQorCQkJCS8vDQorCQkJCWlmIChjb250cmlidXRpb25JdGVtIGluc3RhbmNlb2YgQWN0aW9uQ29udHJpYnV0aW9uSXRlbSkgew0KKwkJCQkJSUFjdGlvbiBhY3Rpb24gPSAoKEFjdGlvbkNvbnRyaWJ1dGlvbkl0ZW0pY29udHJpYnV0aW9uSXRlbSkuZ2V0QWN0aW9uKCk7DQorCQkJCQlpZiAoYWN0aW9ucy5jb250YWlucyhhY3Rpb24pKSB7DQorCQkJCQkJbWFuYWdlci5yZW1vdmUoY29udHJpYnV0aW9uSXRlbSk7DQorCQkJCQl9DQorCQkJCX0NCisJCQl9DQorCQl9DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgcG9wdWxhdGVzIHRoZSBwb3AtdXAgbWVudSBiZWZvcmUgaXQgYXBwZWFycy4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCUBPdmVycmlkZQ0KKwlwdWJsaWMgdm9pZCBtZW51QWJvdXRUb1Nob3coSU1lbnVNYW5hZ2VyIG1lbnVNYW5hZ2VyKSB7DQorCQlzdXBlci5tZW51QWJvdXRUb1Nob3cobWVudU1hbmFnZXIpOw0KKwkJTWVudU1hbmFnZXIgc3VibWVudU1hbmFnZXIgPSBudWxsOw0KKw0KKwkJc3VibWVudU1hbmFnZXIgPSBuZXcgTWVudU1hbmFnZXIoR2xvYmFsaW5mbHVlbnphbW9kZWxFZGl0b3JQbHVnaW4uSU5TVEFOQ0UuZ2V0U3RyaW5nKCJfVUlfQ3JlYXRlQ2hpbGRfbWVudV9pdGVtIikpOw0KKwkJcG9wdWxhdGVNYW5hZ2VyKHN1Ym1lbnVNYW5hZ2VyLCBjcmVhdGVDaGlsZEFjdGlvbnMsIG51bGwpOw0KKwkJbWVudU1hbmFnZXIuaW5zZXJ0QmVmb3JlKCJlZGl0Iiwgc3VibWVudU1hbmFnZXIpOw0KKw0KKwkJc3VibWVudU1hbmFnZXIgPSBuZXcgTWVudU1hbmFnZXIoR2xvYmFsaW5mbHVlbnphbW9kZWxFZGl0b3JQbHVnaW4uSU5TVEFOQ0UuZ2V0U3RyaW5nKCJfVUlfQ3JlYXRlU2libGluZ19tZW51X2l0ZW0iKSk7DQorCQlwb3B1bGF0ZU1hbmFnZXIoc3VibWVudU1hbmFnZXIsIGNyZWF0ZVNpYmxpbmdBY3Rpb25zLCBudWxsKTsNCisJCW1lbnVNYW5hZ2VyLmluc2VydEJlZm9yZSgiZWRpdCIsIHN1Ym1lbnVNYW5hZ2VyKTsNCisJfQ0KKw0KKwkvKioNCisJICogVGhpcyBpbnNlcnRzIGdsb2JhbCBhY3Rpb25zIGJlZm9yZSB0aGUgImFkZGl0aW9ucy1lbmQiIHNlcGFyYXRvci4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCUBPdmVycmlkZQ0KKwlwcm90ZWN0ZWQgdm9pZCBhZGRHbG9iYWxBY3Rpb25zKElNZW51TWFuYWdlciBtZW51TWFuYWdlcikgew0KKwkJbWVudU1hbmFnZXIuaW5zZXJ0QWZ0ZXIoImFkZGl0aW9ucy1lbmQiLCBuZXcgU2VwYXJhdG9yKCJ1aS1hY3Rpb25zIikpOw0KKwkJbWVudU1hbmFnZXIuaW5zZXJ0QWZ0ZXIoInVpLWFjdGlvbnMiLCBzaG93UHJvcGVydGllc1ZpZXdBY3Rpb24pOw0KKw0KKwkJcmVmcmVzaFZpZXdlckFjdGlvbi5zZXRFbmFibGVkKHJlZnJlc2hWaWV3ZXJBY3Rpb24uaXNFbmFibGVkKCkpOwkJDQorCQltZW51TWFuYWdlci5pbnNlcnRBZnRlcigidWktYWN0aW9ucyIsIHJlZnJlc2hWaWV3ZXJBY3Rpb24pOw0KKw0KKwkJc3VwZXIuYWRkR2xvYmFsQWN0aW9ucyhtZW51TWFuYWdlcik7DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgZW5zdXJlcyB0aGF0IGEgZGVsZXRlIGFjdGlvbiB3aWxsIGNsZWFuIHVwIGFsbCByZWZlcmVuY2VzIHRvIGRlbGV0ZWQgb2JqZWN0cy4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCUBPdmVycmlkZQ0KKwlwcm90ZWN0ZWQgYm9vbGVhbiByZW1vdmVBbGxSZWZlcmVuY2VzT25EZWxldGUoKSB7DQorCQlyZXR1cm4gdHJ1ZTsNCisJfQ0KKw0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy5nbG9iYWxpbmZsdWVuemFtb2RlbC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL2dsb2JhbGluZmx1ZW56YW1vZGVsL3ByZXNlbnRhdGlvbi9HbG9iYWxpbmZsdWVuemFtb2RlbEVkaXRvci5qYXZhIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMuZ2xvYmFsaW5mbHVlbnphbW9kZWwvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9nbG9iYWxpbmZsdWVuemFtb2RlbC9wcmVzZW50YXRpb24vR2xvYmFsaW5mbHVlbnphbW9kZWxFZGl0b3IuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNTlmODExCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMuZ2xvYmFsaW5mbHVlbnphbW9kZWwvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9nbG9iYWxpbmZsdWVuemFtb2RlbC9wcmVzZW50YXRpb24vR2xvYmFsaW5mbHVlbnphbW9kZWxFZGl0b3IuamF2YQpAQCAtMCwwICsxLDE4MDcgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmdsb2JhbGluZmx1ZW56YW1vZGVsLnByZXNlbnRhdGlvbjsNCisNCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyAqIENvcHlyaWdodCAoYykgMjAwOSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4NCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzDQorICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wDQorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQNCisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbA0KKyAqDQorICogQ29udHJpYnV0b3JzOg0KKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24NCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCisNCisNCitpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsNCitpbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbTsNCitpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsNCitpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247DQoraW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uczsNCitpbXBvcnQgamF2YS51dGlsLkV2ZW50T2JqZWN0Ow0KK2ltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsNCitpbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOw0KK2ltcG9ydCBqYXZhLnV0aWwuTGlua2VkSGFzaE1hcDsNCitpbXBvcnQgamF2YS51dGlsLkxpc3Q7DQoraW1wb3J0IGphdmEudXRpbC5NYXA7DQorDQoraW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklGaWxlOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JTWFya2VyOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUmVzb3VyY2U7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklSZXNvdXJjZUNoYW5nZUV2ZW50Ow0KK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUmVzb3VyY2VDaGFuZ2VMaXN0ZW5lcjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVJlc291cmNlRGVsdGE7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklSZXNvdXJjZURlbHRhVmlzaXRvcjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuUmVzb3VyY2VzUGx1Z2luOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQ29yZUV4Y2VwdGlvbjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQYXRoOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVByb2dyZXNzTW9uaXRvcjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLk51bGxQcm9ncmVzc01vbml0b3I7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24uY29tbWFuZC5CYXNpY0NvbW1hbmRTdGFjazsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5jb21tYW5kLkNvbW1hbmQ7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24uY29tbWFuZC5Db21tYW5kU3RhY2s7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24uY29tbWFuZC5Db21tYW5kU3RhY2tMaXN0ZW5lcjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuQWRhcHRlckZhY3Rvcnk7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51aS5NYXJrZXJIZWxwZXI7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udWkuVmlld2VyUGFuZTsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51aS5lZGl0b3IuUHJvYmxlbUVkaXRvclBhcnQ7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udWkudmlld2VyLklWaWV3ZXJQcm92aWRlcjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLkJhc2ljRGlhZ25vc3RpYzsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLkRpYWdub3N0aWM7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5VUkk7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0Ow0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRVZhbGlkYXRvcjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnByb3ZpZGVyLkVjb3JlSXRlbVByb3ZpZGVyQWRhcHRlckZhY3Rvcnk7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5yZXNvdXJjZS5SZXNvdXJjZTsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnJlc291cmNlLlJlc291cmNlU2V0Ow0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUudXRpbC5FQ29udGVudEFkYXB0ZXI7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS51dGlsLkVjb3JlVXRpbDsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQuZG9tYWluLkFkYXB0ZXJGYWN0b3J5RWRpdGluZ0RvbWFpbjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQuZG9tYWluLkVkaXRpbmdEb21haW47DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LmRvbWFpbi5JRWRpdGluZ0RvbWFpblByb3ZpZGVyOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5BZGFwdGVyRmFjdG9yeUl0ZW1EZWxlZ2F0b3I7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkNvbXBvc2VkQWRhcHRlckZhY3Rvcnk7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLlJlZmxlY3RpdmVJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeTsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIucmVzb3VyY2UuUmVzb3VyY2VJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeTsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkuYWN0aW9uLkVkaXRpbmdEb21haW5BY3Rpb25CYXJDb250cmlidXRvcjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkuY2VsbGVkaXRvci5BZGFwdGVyRmFjdG9yeVRyZWVFZGl0b3I7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmRuZC5FZGl0aW5nRG9tYWluVmlld2VyRHJvcEFkYXB0ZXI7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmRuZC5Mb2NhbFRyYW5zZmVyOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5kbmQuVmlld2VyRHJhZ0FkYXB0ZXI7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLnByb3ZpZGVyLkFkYXB0ZXJGYWN0b3J5Q29udGVudFByb3ZpZGVyOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5wcm92aWRlci5BZGFwdGVyRmFjdG9yeUxhYmVsUHJvdmlkZXI7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLnByb3ZpZGVyLlVud3JhcHBpbmdTZWxlY3Rpb25Qcm92aWRlcjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkudXRpbC5FZGl0VUlNYXJrZXJIZWxwZXI7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLnV0aWwuRWRpdFVJVXRpbDsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkudmlldy5FeHRlbmRlZFByb3BlcnR5U2hlZXRQYWdlOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSU1lbnVMaXN0ZW5lcjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklNZW51TWFuYWdlcjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklTdGF0dXNMaW5lTWFuYWdlcjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklUb29sQmFyTWFuYWdlcjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLk1lbnVNYW5hZ2VyOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uU2VwYXJhdG9yOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5kaWFsb2dzLk1lc3NhZ2VEaWFsb2c7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmRpYWxvZ3MuUHJvZ3Jlc3NNb25pdG9yRGlhbG9nOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLkNvbHVtbldlaWdodERhdGE7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvbjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb25Qcm92aWRlcjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU3RydWN0dXJlZFNlbGVjdGlvbjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5MaXN0Vmlld2VyOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlNlbGVjdGlvbkNoYW5nZWRFdmVudDsNCitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5TdHJ1Y3R1cmVkU2VsZWN0aW9uOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlN0cnVjdHVyZWRWaWV3ZXI7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuVGFibGVMYXlvdXQ7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuVGFibGVWaWV3ZXI7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuVHJlZVZpZXdlcjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5WaWV3ZXI7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24ucHJvdmlkZXIuQ29tbW9uSXRlbVByb3ZpZGVyQWRhcHRlckZhY3Rvcnk7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5wcm92aWRlci5HcmFwaEl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5Ow0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubG9nZ2VyLnByb3ZpZGVyLkxvZ2dlckl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5Ow0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwucHJvdmlkZXIuTW9kZWxJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeTsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLnByb3ZpZGVyLk1vZGlmaWVySXRlbVByb3ZpZGVyQWRhcHRlckZhY3Rvcnk7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zY2VuYXJpby5wcm92aWRlci5TY2VuYXJpb0l0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5Ow0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2VxdWVuY2VyLnByb3ZpZGVyLlNlcXVlbmNlckl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5Ow0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc29sdmVyLnByb3ZpZGVyLlNvbHZlckl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5Ow0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5wcm92aWRlci5MYWJlbHNJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeTsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmdsb2JhbGluZmx1ZW56YW1vZGVsLnByb3ZpZGVyLkdsb2JhbGluZmx1ZW56YW1vZGVsSXRlbVByb3ZpZGVyQWRhcHRlckZhY3Rvcnk7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5wcm92aWRlci5TdGFuZGFyZEl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5Ow0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMuZ2xvYmFsaW5mbHVlbnphbW9kZWwucHJlc2VudGF0aW9uLkdsb2JhbGluZmx1ZW56YW1vZGVsRWRpdG9yUGx1Z2luOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuU1dUOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuY3VzdG9tLkNUYWJGb2xkZXI7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5kbmQuRE5EOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZG5kLlRyYW5zZmVyOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLkNvbnRyb2xBZGFwdGVyOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLkNvbnRyb2xFdmVudDsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmdyYXBoaWNzLlBvaW50Ow0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QubGF5b3V0LkZpbGxMYXlvdXQ7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZTsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuTWVudTsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuVGFibGU7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlRhYmxlQ29sdW1uOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5UcmVlOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5UcmVlQ29sdW1uOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5JQWN0aW9uQmFyczsNCitpbXBvcnQgb3JnLmVjbGlwc2UudWkuSUVkaXRvcklucHV0Ow0KK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5JRWRpdG9yUGFydDsNCitpbXBvcnQgb3JnLmVjbGlwc2UudWkuSUVkaXRvclNpdGU7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnVpLklQYXJ0TGlzdGVuZXI7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2hQYXJ0Ow0KK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5QYXJ0SW5pdEV4Y2VwdGlvbjsNCitpbXBvcnQgb3JnLmVjbGlwc2UudWkuYWN0aW9ucy5Xb3Jrc3BhY2VNb2RpZnlPcGVyYXRpb247DQoraW1wb3J0IG9yZy5lY2xpcHNlLnVpLmRpYWxvZ3MuU2F2ZUFzRGlhbG9nOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5pZGUuSUdvdG9NYXJrZXI7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnVpLnBhcnQuRmlsZUVkaXRvcklucHV0Ow0KK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5wYXJ0Lk11bHRpUGFnZUVkaXRvclBhcnQ7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnVpLnZpZXdzLmNvbnRlbnRvdXRsaW5lLkNvbnRlbnRPdXRsaW5lOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS51aS52aWV3cy5jb250ZW50b3V0bGluZS5Db250ZW50T3V0bGluZVBhZ2U7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnVpLnZpZXdzLmNvbnRlbnRvdXRsaW5lLklDb250ZW50T3V0bGluZVBhZ2U7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnVpLnZpZXdzLnByb3BlcnRpZXMuSVByb3BlcnR5U2hlZXRQYWdlOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS51aS52aWV3cy5wcm9wZXJ0aWVzLlByb3BlcnR5U2hlZXQ7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnVpLnZpZXdzLnByb3BlcnRpZXMuUHJvcGVydHlTaGVldFBhZ2U7DQorDQorDQorLyoqDQorICogVGhpcyBpcyBhbiBleGFtcGxlIG9mIGEgR2xvYmFsaW5mbHVlbnphbW9kZWwgbW9kZWwgZWRpdG9yLg0KKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorICogQGdlbmVyYXRlZA0KKyAqLw0KK3B1YmxpYyBjbGFzcyBHbG9iYWxpbmZsdWVuemFtb2RlbEVkaXRvcg0KKwlleHRlbmRzIE11bHRpUGFnZUVkaXRvclBhcnQNCisJaW1wbGVtZW50cyBJRWRpdGluZ0RvbWFpblByb3ZpZGVyLCBJU2VsZWN0aW9uUHJvdmlkZXIsIElNZW51TGlzdGVuZXIsIElWaWV3ZXJQcm92aWRlciwgSUdvdG9NYXJrZXIgew0KKwkvKioNCisJICogVGhpcyBrZWVwcyB0cmFjayBvZiB0aGUgZWRpdGluZyBkb21haW4gdGhhdCBpcyB1c2VkIHRvIHRyYWNrIGFsbCBjaGFuZ2VzIHRvIHRoZSBtb2RlbC4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCBBZGFwdGVyRmFjdG9yeUVkaXRpbmdEb21haW4gZWRpdGluZ0RvbWFpbjsNCisNCisJLyoqDQorCSAqIFRoaXMgaXMgdGhlIG9uZSBhZGFwdGVyIGZhY3RvcnkgdXNlZCBmb3IgcHJvdmlkaW5nIHZpZXdzIG9mIHRoZSBtb2RlbC4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCBDb21wb3NlZEFkYXB0ZXJGYWN0b3J5IGFkYXB0ZXJGYWN0b3J5Ow0KKw0KKwkvKioNCisJICogVGhpcyBpcyB0aGUgY29udGVudCBvdXRsaW5lIHBhZ2UuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgSUNvbnRlbnRPdXRsaW5lUGFnZSBjb250ZW50T3V0bGluZVBhZ2U7DQorDQorCS8qKg0KKwkgKiBUaGlzIGlzIGEga2x1ZGdlLi4uDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgSVN0YXR1c0xpbmVNYW5hZ2VyIGNvbnRlbnRPdXRsaW5lU3RhdHVzTGluZU1hbmFnZXI7DQorDQorCS8qKg0KKwkgKiBUaGlzIGlzIHRoZSBjb250ZW50IG91dGxpbmUgcGFnZSdzIHZpZXdlci4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCBUcmVlVmlld2VyIGNvbnRlbnRPdXRsaW5lVmlld2VyOw0KKw0KKwkvKioNCisJICogVGhpcyBpcyB0aGUgcHJvcGVydHkgc2hlZXQgcGFnZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCBQcm9wZXJ0eVNoZWV0UGFnZSBwcm9wZXJ0eVNoZWV0UGFnZTsNCisNCisJLyoqDQorCSAqIFRoaXMgaXMgdGhlIHZpZXdlciB0aGF0IHNoYWRvd3MgdGhlIHNlbGVjdGlvbiBpbiB0aGUgY29udGVudCBvdXRsaW5lLg0KKwkgKiBUaGUgcGFyZW50IHJlbGF0aW9uIG11c3QgYmUgY29ycmVjdGx5IGRlZmluZWQgZm9yIHRoaXMgdG8gd29yay4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCBUcmVlVmlld2VyIHNlbGVjdGlvblZpZXdlcjsNCisNCisJLyoqDQorCSAqIFRoaXMgaW52ZXJ0cyB0aGUgcm9sbCBvZiBwYXJlbnQgYW5kIGNoaWxkIGluIHRoZSBjb250ZW50IHByb3ZpZGVyIGFuZCBzaG93IHBhcmVudHMgYXMgYSB0cmVlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIFRyZWVWaWV3ZXIgcGFyZW50Vmlld2VyOw0KKw0KKwkvKioNCisJICogVGhpcyBzaG93cyBob3cgYSB0cmVlIHZpZXcgd29ya3MuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgVHJlZVZpZXdlciB0cmVlVmlld2VyOw0KKw0KKwkvKioNCisJICogVGhpcyBzaG93cyBob3cgYSBsaXN0IHZpZXcgd29ya3MuDQorCSAqIEEgbGlzdCB2aWV3ZXIgZG9lc24ndCBzdXBwb3J0IGljb25zLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIExpc3RWaWV3ZXIgbGlzdFZpZXdlcjsNCisNCisJLyoqDQorCSAqIFRoaXMgc2hvd3MgaG93IGEgdGFibGUgdmlldyB3b3Jrcy4NCisJICogQSB0YWJsZSBjYW4gYmUgdXNlZCBhcyBhIGxpc3Qgd2l0aCBpY29ucy4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCBUYWJsZVZpZXdlciB0YWJsZVZpZXdlcjsNCisNCisJLyoqDQorCSAqIFRoaXMgc2hvd3MgaG93IGEgdHJlZSB2aWV3IHdpdGggY29sdW1ucyB3b3Jrcy4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCBUcmVlVmlld2VyIHRyZWVWaWV3ZXJXaXRoQ29sdW1uczsNCisNCisJLyoqDQorCSAqIFRoaXMga2VlcHMgdHJhY2sgb2YgdGhlIGFjdGl2ZSB2aWV3ZXIgcGFuZSwgaW4gdGhlIGJvb2suDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgVmlld2VyUGFuZSBjdXJyZW50Vmlld2VyUGFuZTsNCisNCisJLyoqDQorCSAqIFRoaXMga2VlcHMgdHJhY2sgb2YgdGhlIGFjdGl2ZSBjb250ZW50IHZpZXdlciwgd2hpY2ggbWF5IGJlIGVpdGhlciBvbmUgb2YgdGhlIHZpZXdlcnMgaW4gdGhlIHBhZ2VzIG9yIHRoZSBjb250ZW50IG91dGxpbmUgdmlld2VyLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIFZpZXdlciBjdXJyZW50Vmlld2VyOw0KKw0KKwkvKioNCisJICogVGhpcyBsaXN0ZW5zIHRvIHdoaWNoIGV2ZXIgdmlld2VyIGlzIGFjdGl2ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCBJU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyIHNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcjsNCisNCisJLyoqDQorCSAqIFRoaXMga2VlcHMgdHJhY2sgb2YgYWxsIHRoZSB7QGxpbmsgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyfXMgdGhhdCBhcmUgbGlzdGVuaW5nIHRvIHRoaXMgZWRpdG9yLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIENvbGxlY3Rpb248SVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcj4gc2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVycyA9IG5ldyBBcnJheUxpc3Q8SVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcj4oKTsNCisNCisJLyoqDQorCSAqIFRoaXMga2VlcHMgdHJhY2sgb2YgdGhlIHNlbGVjdGlvbiBvZiB0aGUgZWRpdG9yIGFzIGEgd2hvbGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgSVNlbGVjdGlvbiBlZGl0b3JTZWxlY3Rpb24gPSBTdHJ1Y3R1cmVkU2VsZWN0aW9uLkVNUFRZOw0KKw0KKwkvKioNCisJICogVGhlIE1hcmtlckhlbHBlciBpcyByZXNwb25zaWJsZSBmb3IgY3JlYXRpbmcgd29ya3NwYWNlIHJlc291cmNlIG1hcmtlcnMgcHJlc2VudGVkDQorCSAqIGluIEVjbGlwc2UncyBQcm9ibGVtcyBWaWV3Lg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIE1hcmtlckhlbHBlciBtYXJrZXJIZWxwZXIgPSBuZXcgRWRpdFVJTWFya2VySGVscGVyKCk7DQorDQorCS8qKg0KKwkgKiBUaGlzIGxpc3RlbnMgZm9yIHdoZW4gdGhlIG91dGxpbmUgYmVjb21lcyBhY3RpdmUNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCBJUGFydExpc3RlbmVyIHBhcnRMaXN0ZW5lciA9DQorCQluZXcgSVBhcnRMaXN0ZW5lcigpIHsNCisJCQlwdWJsaWMgdm9pZCBwYXJ0QWN0aXZhdGVkKElXb3JrYmVuY2hQYXJ0IHApIHsNCisJCQkJaWYgKHAgaW5zdGFuY2VvZiBDb250ZW50T3V0bGluZSkgew0KKwkJCQkJaWYgKCgoQ29udGVudE91dGxpbmUpcCkuZ2V0Q3VycmVudFBhZ2UoKSA9PSBjb250ZW50T3V0bGluZVBhZ2UpIHsNCisJCQkJCQlnZXRBY3Rpb25CYXJDb250cmlidXRvcigpLnNldEFjdGl2ZUVkaXRvcihHbG9iYWxpbmZsdWVuemFtb2RlbEVkaXRvci50aGlzKTsNCisNCisJCQkJCQlzZXRDdXJyZW50Vmlld2VyKGNvbnRlbnRPdXRsaW5lVmlld2VyKTsNCisJCQkJCX0NCisJCQkJfQ0KKwkJCQllbHNlIGlmIChwIGluc3RhbmNlb2YgUHJvcGVydHlTaGVldCkgew0KKwkJCQkJaWYgKCgoUHJvcGVydHlTaGVldClwKS5nZXRDdXJyZW50UGFnZSgpID09IHByb3BlcnR5U2hlZXRQYWdlKSB7DQorCQkJCQkJZ2V0QWN0aW9uQmFyQ29udHJpYnV0b3IoKS5zZXRBY3RpdmVFZGl0b3IoR2xvYmFsaW5mbHVlbnphbW9kZWxFZGl0b3IudGhpcyk7DQorCQkJCQkJaGFuZGxlQWN0aXZhdGUoKTsNCisJCQkJCX0NCisJCQkJfQ0KKwkJCQllbHNlIGlmIChwID09IEdsb2JhbGluZmx1ZW56YW1vZGVsRWRpdG9yLnRoaXMpIHsNCisJCQkJCWhhbmRsZUFjdGl2YXRlKCk7DQorCQkJCX0NCisJCQl9DQorCQkJcHVibGljIHZvaWQgcGFydEJyb3VnaHRUb1RvcChJV29ya2JlbmNoUGFydCBwKSB7DQorCQkJCS8vIElnbm9yZS4NCisJCQl9DQorCQkJcHVibGljIHZvaWQgcGFydENsb3NlZChJV29ya2JlbmNoUGFydCBwKSB7DQorCQkJCS8vIElnbm9yZS4NCisJCQl9DQorCQkJcHVibGljIHZvaWQgcGFydERlYWN0aXZhdGVkKElXb3JrYmVuY2hQYXJ0IHApIHsNCisJCQkJLy8gSWdub3JlLg0KKwkJCX0NCisJCQlwdWJsaWMgdm9pZCBwYXJ0T3BlbmVkKElXb3JrYmVuY2hQYXJ0IHApIHsNCisJCQkJLy8gSWdub3JlLg0KKwkJCX0NCisJCX07DQorDQorCS8qKg0KKwkgKiBSZXNvdXJjZXMgdGhhdCBoYXZlIGJlZW4gcmVtb3ZlZCBzaW5jZSBsYXN0IGFjdGl2YXRpb24uDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgQ29sbGVjdGlvbjxSZXNvdXJjZT4gcmVtb3ZlZFJlc291cmNlcyA9IG5ldyBBcnJheUxpc3Q8UmVzb3VyY2U+KCk7DQorDQorCS8qKg0KKwkgKiBSZXNvdXJjZXMgdGhhdCBoYXZlIGJlZW4gY2hhbmdlZCBzaW5jZSBsYXN0IGFjdGl2YXRpb24uDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgQ29sbGVjdGlvbjxSZXNvdXJjZT4gY2hhbmdlZFJlc291cmNlcyA9IG5ldyBBcnJheUxpc3Q8UmVzb3VyY2U+KCk7DQorDQorCS8qKg0KKwkgKiBSZXNvdXJjZXMgdGhhdCBoYXZlIGJlZW4gc2F2ZWQuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgQ29sbGVjdGlvbjxSZXNvdXJjZT4gc2F2ZWRSZXNvdXJjZXMgPSBuZXcgQXJyYXlMaXN0PFJlc291cmNlPigpOw0KKw0KKwkvKioNCisJICogTWFwIHRvIHN0b3JlIHRoZSBkaWFnbm9zdGljIGFzc29jaWF0ZWQgd2l0aCBhIHJlc291cmNlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIE1hcDxSZXNvdXJjZSwgRGlhZ25vc3RpYz4gcmVzb3VyY2VUb0RpYWdub3N0aWNNYXAgPSBuZXcgTGlua2VkSGFzaE1hcDxSZXNvdXJjZSwgRGlhZ25vc3RpYz4oKTsNCisNCisJLyoqDQorCSAqIENvbnRyb2xzIHdoZXRoZXIgdGhlIHByb2JsZW0gaW5kaWNhdGlvbiBzaG91bGQgYmUgdXBkYXRlZC4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCBib29sZWFuIHVwZGF0ZVByb2JsZW1JbmRpY2F0aW9uID0gdHJ1ZTsNCisNCisJLyoqDQorCSAqIEFkYXB0ZXIgdXNlZCB0byB1cGRhdGUgdGhlIHByb2JsZW0gaW5kaWNhdGlvbiB3aGVuIHJlc291cmNlcyBhcmUgZGVtYW5kZWQgbG9hZGVkLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIEVDb250ZW50QWRhcHRlciBwcm9ibGVtSW5kaWNhdGlvbkFkYXB0ZXIgPSANCisJCW5ldyBFQ29udGVudEFkYXB0ZXIoKSB7DQorCQkJQE92ZXJyaWRlDQorCQkJcHVibGljIHZvaWQgbm90aWZ5Q2hhbmdlZChOb3RpZmljYXRpb24gbm90aWZpY2F0aW9uKSB7DQorCQkJCWlmIChub3RpZmljYXRpb24uZ2V0Tm90aWZpZXIoKSBpbnN0YW5jZW9mIFJlc291cmNlKSB7DQorCQkJCQlzd2l0Y2ggKG5vdGlmaWNhdGlvbi5nZXRGZWF0dXJlSUQoUmVzb3VyY2UuY2xhc3MpKSB7DQorCQkJCQkJY2FzZSBSZXNvdXJjZS5SRVNPVVJDRV9fSVNfTE9BREVEOg0KKwkJCQkJCWNhc2UgUmVzb3VyY2UuUkVTT1VSQ0VfX0VSUk9SUzoNCisJCQkJCQljYXNlIFJlc291cmNlLlJFU09VUkNFX19XQVJOSU5HUzogew0KKwkJCQkJCQlSZXNvdXJjZSByZXNvdXJjZSA9IChSZXNvdXJjZSlub3RpZmljYXRpb24uZ2V0Tm90aWZpZXIoKTsNCisJCQkJCQkJRGlhZ25vc3RpYyBkaWFnbm9zdGljID0gYW5hbHl6ZVJlc291cmNlUHJvYmxlbXMocmVzb3VyY2UsIG51bGwpOw0KKwkJCQkJCQlpZiAoZGlhZ25vc3RpYy5nZXRTZXZlcml0eSgpICE9IERpYWdub3N0aWMuT0spIHsNCisJCQkJCQkJCXJlc291cmNlVG9EaWFnbm9zdGljTWFwLnB1dChyZXNvdXJjZSwgZGlhZ25vc3RpYyk7DQorCQkJCQkJCX0NCisJCQkJCQkJZWxzZSB7DQorCQkJCQkJCQlyZXNvdXJjZVRvRGlhZ25vc3RpY01hcC5yZW1vdmUocmVzb3VyY2UpOw0KKwkJCQkJCQl9DQorDQorCQkJCQkJCWlmICh1cGRhdGVQcm9ibGVtSW5kaWNhdGlvbikgew0KKwkJCQkJCQkJZ2V0U2l0ZSgpLmdldFNoZWxsKCkuZ2V0RGlzcGxheSgpLmFzeW5jRXhlYw0KKwkJCQkJCQkJCShuZXcgUnVubmFibGUoKSB7DQorCQkJCQkJCQkJCSBwdWJsaWMgdm9pZCBydW4oKSB7DQorCQkJCQkJCQkJCQkgdXBkYXRlUHJvYmxlbUluZGljYXRpb24oKTsNCisJCQkJCQkJCQkJIH0NCisJCQkJCQkJCQkgfSk7DQorCQkJCQkJCX0NCisJCQkJCQkJYnJlYWs7DQorCQkJCQkJfQ0KKwkJCQkJfQ0KKwkJCQl9DQorCQkJCWVsc2Ugew0KKwkJCQkJc3VwZXIubm90aWZ5Q2hhbmdlZChub3RpZmljYXRpb24pOw0KKwkJCQl9DQorCQkJfQ0KKw0KKwkJCUBPdmVycmlkZQ0KKwkJCXByb3RlY3RlZCB2b2lkIHNldFRhcmdldChSZXNvdXJjZSB0YXJnZXQpIHsNCisJCQkJYmFzaWNTZXRUYXJnZXQodGFyZ2V0KTsNCisJCQl9DQorDQorCQkJQE92ZXJyaWRlDQorCQkJcHJvdGVjdGVkIHZvaWQgdW5zZXRUYXJnZXQoUmVzb3VyY2UgdGFyZ2V0KSB7DQorCQkJCWJhc2ljVW5zZXRUYXJnZXQodGFyZ2V0KTsNCisJCQl9DQorCQl9Ow0KKw0KKwkvKioNCisJICogVGhpcyBsaXN0ZW5zIGZvciB3b3Jrc3BhY2UgY2hhbmdlcy4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCBJUmVzb3VyY2VDaGFuZ2VMaXN0ZW5lciByZXNvdXJjZUNoYW5nZUxpc3RlbmVyID0NCisJCW5ldyBJUmVzb3VyY2VDaGFuZ2VMaXN0ZW5lcigpIHsNCisJCQlwdWJsaWMgdm9pZCByZXNvdXJjZUNoYW5nZWQoSVJlc291cmNlQ2hhbmdlRXZlbnQgZXZlbnQpIHsNCisJCQkJSVJlc291cmNlRGVsdGEgZGVsdGEgPSBldmVudC5nZXREZWx0YSgpOw0KKwkJCQl0cnkgew0KKwkJCQkJY2xhc3MgUmVzb3VyY2VEZWx0YVZpc2l0b3IgaW1wbGVtZW50cyBJUmVzb3VyY2VEZWx0YVZpc2l0b3Igew0KKwkJCQkJCXByb3RlY3RlZCBSZXNvdXJjZVNldCByZXNvdXJjZVNldCA9IGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKTsNCisJCQkJCQlwcm90ZWN0ZWQgQ29sbGVjdGlvbjxSZXNvdXJjZT4gY2hhbmdlZFJlc291cmNlcyA9IG5ldyBBcnJheUxpc3Q8UmVzb3VyY2U+KCk7DQorCQkJCQkJcHJvdGVjdGVkIENvbGxlY3Rpb248UmVzb3VyY2U+IHJlbW92ZWRSZXNvdXJjZXMgPSBuZXcgQXJyYXlMaXN0PFJlc291cmNlPigpOw0KKw0KKwkJCQkJCXB1YmxpYyBib29sZWFuIHZpc2l0KElSZXNvdXJjZURlbHRhIGRlbHRhKSB7DQorCQkJCQkJCWlmIChkZWx0YS5nZXRSZXNvdXJjZSgpLmdldFR5cGUoKSA9PSBJUmVzb3VyY2UuRklMRSkgew0KKwkJCQkJCQkJaWYgKGRlbHRhLmdldEtpbmQoKSA9PSBJUmVzb3VyY2VEZWx0YS5SRU1PVkVEIHx8DQorCQkJCQkJCQkgICAgZGVsdGEuZ2V0S2luZCgpID09IElSZXNvdXJjZURlbHRhLkNIQU5HRUQgJiYgZGVsdGEuZ2V0RmxhZ3MoKSAhPSBJUmVzb3VyY2VEZWx0YS5NQVJLRVJTKSB7DQorCQkJCQkJCQkJUmVzb3VyY2UgcmVzb3VyY2UgPSByZXNvdXJjZVNldC5nZXRSZXNvdXJjZShVUkkuY3JlYXRlUGxhdGZvcm1SZXNvdXJjZVVSSShkZWx0YS5nZXRGdWxsUGF0aCgpLnRvU3RyaW5nKCksIHRydWUpLCBmYWxzZSk7DQorCQkJCQkJCQkJaWYgKHJlc291cmNlICE9IG51bGwpIHsNCisJCQkJCQkJCQkJaWYgKGRlbHRhLmdldEtpbmQoKSA9PSBJUmVzb3VyY2VEZWx0YS5SRU1PVkVEKSB7DQorCQkJCQkJCQkJCQlyZW1vdmVkUmVzb3VyY2VzLmFkZChyZXNvdXJjZSk7DQorCQkJCQkJCQkJCX0NCisJCQkJCQkJCQkJZWxzZSBpZiAoIXNhdmVkUmVzb3VyY2VzLnJlbW92ZShyZXNvdXJjZSkpIHsNCisJCQkJCQkJCQkJCWNoYW5nZWRSZXNvdXJjZXMuYWRkKHJlc291cmNlKTsNCisJCQkJCQkJCQkJfQ0KKwkJCQkJCQkJCX0NCisJCQkJCQkJCX0NCisJCQkJCQkJfQ0KKw0KKwkJCQkJCQlyZXR1cm4gdHJ1ZTsNCisJCQkJCQl9DQorDQorCQkJCQkJcHVibGljIENvbGxlY3Rpb248UmVzb3VyY2U+IGdldENoYW5nZWRSZXNvdXJjZXMoKSB7DQorCQkJCQkJCXJldHVybiBjaGFuZ2VkUmVzb3VyY2VzOw0KKwkJCQkJCX0NCisNCisJCQkJCQlwdWJsaWMgQ29sbGVjdGlvbjxSZXNvdXJjZT4gZ2V0UmVtb3ZlZFJlc291cmNlcygpIHsNCisJCQkJCQkJcmV0dXJuIHJlbW92ZWRSZXNvdXJjZXM7DQorCQkJCQkJfQ0KKwkJCQkJfQ0KKw0KKwkJCQkJZmluYWwgUmVzb3VyY2VEZWx0YVZpc2l0b3IgdmlzaXRvciA9IG5ldyBSZXNvdXJjZURlbHRhVmlzaXRvcigpOw0KKwkJCQkJZGVsdGEuYWNjZXB0KHZpc2l0b3IpOw0KKw0KKwkJCQkJaWYgKCF2aXNpdG9yLmdldFJlbW92ZWRSZXNvdXJjZXMoKS5pc0VtcHR5KCkpIHsNCisJCQkJCQlnZXRTaXRlKCkuZ2V0U2hlbGwoKS5nZXREaXNwbGF5KCkuYXN5bmNFeGVjDQorCQkJCQkJCShuZXcgUnVubmFibGUoKSB7DQorCQkJCQkJCQkgcHVibGljIHZvaWQgcnVuKCkgew0KKwkJCQkJCQkJCSByZW1vdmVkUmVzb3VyY2VzLmFkZEFsbCh2aXNpdG9yLmdldFJlbW92ZWRSZXNvdXJjZXMoKSk7DQorCQkJCQkJCQkJIGlmICghaXNEaXJ0eSgpKSB7DQorCQkJCQkJCQkJCSBnZXRTaXRlKCkuZ2V0UGFnZSgpLmNsb3NlRWRpdG9yKEdsb2JhbGluZmx1ZW56YW1vZGVsRWRpdG9yLnRoaXMsIGZhbHNlKTsNCisJCQkJCQkJCQkgfQ0KKwkJCQkJCQkJIH0NCisJCQkJCQkJIH0pOw0KKwkJCQkJfQ0KKw0KKwkJCQkJaWYgKCF2aXNpdG9yLmdldENoYW5nZWRSZXNvdXJjZXMoKS5pc0VtcHR5KCkpIHsNCisJCQkJCQlnZXRTaXRlKCkuZ2V0U2hlbGwoKS5nZXREaXNwbGF5KCkuYXN5bmNFeGVjDQorCQkJCQkJCShuZXcgUnVubmFibGUoKSB7DQorCQkJCQkJCQkgcHVibGljIHZvaWQgcnVuKCkgew0KKwkJCQkJCQkJCSBjaGFuZ2VkUmVzb3VyY2VzLmFkZEFsbCh2aXNpdG9yLmdldENoYW5nZWRSZXNvdXJjZXMoKSk7DQorCQkJCQkJCQkJIGlmIChnZXRTaXRlKCkuZ2V0UGFnZSgpLmdldEFjdGl2ZUVkaXRvcigpID09IEdsb2JhbGluZmx1ZW56YW1vZGVsRWRpdG9yLnRoaXMpIHsNCisJCQkJCQkJCQkJIGhhbmRsZUFjdGl2YXRlKCk7DQorCQkJCQkJCQkJIH0NCisJCQkJCQkJCSB9DQorCQkJCQkJCSB9KTsNCisJCQkJCX0NCisJCQkJfQ0KKwkJCQljYXRjaCAoQ29yZUV4Y2VwdGlvbiBleGNlcHRpb24pIHsNCisJCQkJCUdsb2JhbGluZmx1ZW56YW1vZGVsRWRpdG9yUGx1Z2luLklOU1RBTkNFLmxvZyhleGNlcHRpb24pOw0KKwkJCQl9DQorCQkJfQ0KKwkJfTsNCisNCisJLyoqDQorCSAqIEhhbmRsZXMgYWN0aXZhdGlvbiBvZiB0aGUgZWRpdG9yIG9yIGl0J3MgYXNzb2NpYXRlZCB2aWV3cy4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCB2b2lkIGhhbmRsZUFjdGl2YXRlKCkgew0KKwkJLy8gUmVjb21wdXRlIHRoZSByZWFkIG9ubHkgc3RhdGUuDQorCQkvLw0KKwkJaWYgKGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VUb1JlYWRPbmx5TWFwKCkgIT0gbnVsbCkgew0KKwkJICBlZGl0aW5nRG9tYWluLmdldFJlc291cmNlVG9SZWFkT25seU1hcCgpLmNsZWFyKCk7DQorDQorCQkgIC8vIFJlZnJlc2ggYW55IGFjdGlvbnMgdGhhdCBtYXkgYmVjb21lIGVuYWJsZWQgb3IgZGlzYWJsZWQuDQorCQkgIC8vDQorCQkgIHNldFNlbGVjdGlvbihnZXRTZWxlY3Rpb24oKSk7DQorCQl9DQorDQorCQlpZiAoIXJlbW92ZWRSZXNvdXJjZXMuaXNFbXB0eSgpKSB7DQorCQkJaWYgKGhhbmRsZURpcnR5Q29uZmxpY3QoKSkgew0KKwkJCQlnZXRTaXRlKCkuZ2V0UGFnZSgpLmNsb3NlRWRpdG9yKEdsb2JhbGluZmx1ZW56YW1vZGVsRWRpdG9yLnRoaXMsIGZhbHNlKTsNCisJCQl9DQorCQkJZWxzZSB7DQorCQkJCXJlbW92ZWRSZXNvdXJjZXMuY2xlYXIoKTsNCisJCQkJY2hhbmdlZFJlc291cmNlcy5jbGVhcigpOw0KKwkJCQlzYXZlZFJlc291cmNlcy5jbGVhcigpOw0KKwkJCX0NCisJCX0NCisJCWVsc2UgaWYgKCFjaGFuZ2VkUmVzb3VyY2VzLmlzRW1wdHkoKSkgew0KKwkJCWNoYW5nZWRSZXNvdXJjZXMucmVtb3ZlQWxsKHNhdmVkUmVzb3VyY2VzKTsNCisJCQloYW5kbGVDaGFuZ2VkUmVzb3VyY2VzKCk7DQorCQkJY2hhbmdlZFJlc291cmNlcy5jbGVhcigpOw0KKwkJCXNhdmVkUmVzb3VyY2VzLmNsZWFyKCk7DQorCQl9DQorCX0NCisNCisJLyoqDQorCSAqIEhhbmRsZXMgd2hhdCB0byBkbyB3aXRoIGNoYW5nZWQgcmVzb3VyY2VzIG9uIGFjdGl2YXRpb24uDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgdm9pZCBoYW5kbGVDaGFuZ2VkUmVzb3VyY2VzKCkgew0KKwkJaWYgKCFjaGFuZ2VkUmVzb3VyY2VzLmlzRW1wdHkoKSAmJiAoIWlzRGlydHkoKSB8fCBoYW5kbGVEaXJ0eUNvbmZsaWN0KCkpKSB7DQorCQkJaWYgKGlzRGlydHkoKSkgew0KKwkJCQljaGFuZ2VkUmVzb3VyY2VzLmFkZEFsbChlZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkuZ2V0UmVzb3VyY2VzKCkpOw0KKwkJCX0NCisJCQllZGl0aW5nRG9tYWluLmdldENvbW1hbmRTdGFjaygpLmZsdXNoKCk7DQorDQorCQkJdXBkYXRlUHJvYmxlbUluZGljYXRpb24gPSBmYWxzZTsNCisJCQlmb3IgKFJlc291cmNlIHJlc291cmNlIDogY2hhbmdlZFJlc291cmNlcykgew0KKwkJCQlpZiAocmVzb3VyY2UuaXNMb2FkZWQoKSkgew0KKwkJCQkJcmVzb3VyY2UudW5sb2FkKCk7DQorCQkJCQl0cnkgew0KKwkJCQkJCXJlc291cmNlLmxvYWQoQ29sbGVjdGlvbnMuRU1QVFlfTUFQKTsNCisJCQkJCX0NCisJCQkJCWNhdGNoIChJT0V4Y2VwdGlvbiBleGNlcHRpb24pIHsNCisJCQkJCQlpZiAoIXJlc291cmNlVG9EaWFnbm9zdGljTWFwLmNvbnRhaW5zS2V5KHJlc291cmNlKSkgew0KKwkJCQkJCQlyZXNvdXJjZVRvRGlhZ25vc3RpY01hcC5wdXQocmVzb3VyY2UsIGFuYWx5emVSZXNvdXJjZVByb2JsZW1zKHJlc291cmNlLCBleGNlcHRpb24pKTsNCisJCQkJCQl9DQorCQkJCQl9DQorCQkJCX0NCisJCQl9DQorDQorCQkJaWYgKEFkYXB0ZXJGYWN0b3J5RWRpdGluZ0RvbWFpbi5pc1N0YWxlKGVkaXRvclNlbGVjdGlvbikpIHsNCisJCQkJc2V0U2VsZWN0aW9uKFN0cnVjdHVyZWRTZWxlY3Rpb24uRU1QVFkpOw0KKwkJCX0NCisNCisJCQl1cGRhdGVQcm9ibGVtSW5kaWNhdGlvbiA9IHRydWU7DQorCQkJdXBkYXRlUHJvYmxlbUluZGljYXRpb24oKTsNCisJCX0NCisJfQ0KKyAgDQorCS8qKg0KKwkgKiBVcGRhdGVzIHRoZSBwcm9ibGVtcyBpbmRpY2F0aW9uIHdpdGggdGhlIGluZm9ybWF0aW9uIGRlc2NyaWJlZCBpbiB0aGUgc3BlY2lmaWVkIGRpYWdub3N0aWMuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgdm9pZCB1cGRhdGVQcm9ibGVtSW5kaWNhdGlvbigpIHsNCisJCWlmICh1cGRhdGVQcm9ibGVtSW5kaWNhdGlvbikgew0KKwkJCUJhc2ljRGlhZ25vc3RpYyBkaWFnbm9zdGljID0NCisJCQkJbmV3IEJhc2ljRGlhZ25vc3RpYw0KKwkJCQkJKERpYWdub3N0aWMuT0ssDQorCQkJCQkgIm9yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy5nbG9iYWxpbmZsdWVuemFtb2RlbC5lZGl0b3IiLA0KKwkJCQkJIDAsDQorCQkJCQkgbnVsbCwNCisJCQkJCSBuZXcgT2JqZWN0IFtdIHsgZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpIH0pOw0KKwkJCWZvciAoRGlhZ25vc3RpYyBjaGlsZERpYWdub3N0aWMgOiByZXNvdXJjZVRvRGlhZ25vc3RpY01hcC52YWx1ZXMoKSkgew0KKwkJCQlpZiAoY2hpbGREaWFnbm9zdGljLmdldFNldmVyaXR5KCkgIT0gRGlhZ25vc3RpYy5PSykgew0KKwkJCQkJZGlhZ25vc3RpYy5hZGQoY2hpbGREaWFnbm9zdGljKTsNCisJCQkJfQ0KKwkJCX0NCisNCisJCQlpbnQgbGFzdEVkaXRvclBhZ2UgPSBnZXRQYWdlQ291bnQoKSAtIDE7DQorCQkJaWYgKGxhc3RFZGl0b3JQYWdlID49IDAgJiYgZ2V0RWRpdG9yKGxhc3RFZGl0b3JQYWdlKSBpbnN0YW5jZW9mIFByb2JsZW1FZGl0b3JQYXJ0KSB7DQorCQkJCSgoUHJvYmxlbUVkaXRvclBhcnQpZ2V0RWRpdG9yKGxhc3RFZGl0b3JQYWdlKSkuc2V0RGlhZ25vc3RpYyhkaWFnbm9zdGljKTsNCisJCQkJaWYgKGRpYWdub3N0aWMuZ2V0U2V2ZXJpdHkoKSAhPSBEaWFnbm9zdGljLk9LKSB7DQorCQkJCQlzZXRBY3RpdmVQYWdlKGxhc3RFZGl0b3JQYWdlKTsNCisJCQkJfQ0KKwkJCX0NCisJCQllbHNlIGlmIChkaWFnbm9zdGljLmdldFNldmVyaXR5KCkgIT0gRGlhZ25vc3RpYy5PSykgew0KKwkJCQlQcm9ibGVtRWRpdG9yUGFydCBwcm9ibGVtRWRpdG9yUGFydCA9IG5ldyBQcm9ibGVtRWRpdG9yUGFydCgpOw0KKwkJCQlwcm9ibGVtRWRpdG9yUGFydC5zZXREaWFnbm9zdGljKGRpYWdub3N0aWMpOw0KKwkJCQlwcm9ibGVtRWRpdG9yUGFydC5zZXRNYXJrZXJIZWxwZXIobWFya2VySGVscGVyKTsNCisJCQkJdHJ5IHsNCisJCQkJCWFkZFBhZ2UoKytsYXN0RWRpdG9yUGFnZSwgcHJvYmxlbUVkaXRvclBhcnQsIGdldEVkaXRvcklucHV0KCkpOw0KKwkJCQkJc2V0UGFnZVRleHQobGFzdEVkaXRvclBhZ2UsIHByb2JsZW1FZGl0b3JQYXJ0LmdldFBhcnROYW1lKCkpOw0KKwkJCQkJc2V0QWN0aXZlUGFnZShsYXN0RWRpdG9yUGFnZSk7DQorCQkJCQlzaG93VGFicygpOw0KKwkJCQl9DQorCQkJCWNhdGNoIChQYXJ0SW5pdEV4Y2VwdGlvbiBleGNlcHRpb24pIHsNCisJCQkJCUdsb2JhbGluZmx1ZW56YW1vZGVsRWRpdG9yUGx1Z2luLklOU1RBTkNFLmxvZyhleGNlcHRpb24pOw0KKwkJCQl9DQorCQkJfQ0KKw0KKwkJCWlmIChtYXJrZXJIZWxwZXIuaGFzTWFya2VycyhlZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkpKSB7DQorCQkJCW1hcmtlckhlbHBlci5kZWxldGVNYXJrZXJzKGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKSk7DQorCQkJCWlmIChkaWFnbm9zdGljLmdldFNldmVyaXR5KCkgIT0gRGlhZ25vc3RpYy5PSykgew0KKwkJCQkJdHJ5IHsNCisJCQkJCQltYXJrZXJIZWxwZXIuY3JlYXRlTWFya2VycyhkaWFnbm9zdGljKTsNCisJCQkJCX0NCisJCQkJCWNhdGNoIChDb3JlRXhjZXB0aW9uIGV4Y2VwdGlvbikgew0KKwkJCQkJCUdsb2JhbGluZmx1ZW56YW1vZGVsRWRpdG9yUGx1Z2luLklOU1RBTkNFLmxvZyhleGNlcHRpb24pOw0KKwkJCQkJfQ0KKwkJCQl9DQorCQkJfQ0KKwkJfQ0KKwl9DQorDQorCS8qKg0KKwkgKiBTaG93cyBhIGRpYWxvZyB0aGF0IGFza3MgaWYgY29uZmxpY3RpbmcgY2hhbmdlcyBzaG91bGQgYmUgZGlzY2FyZGVkLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIGJvb2xlYW4gaGFuZGxlRGlydHlDb25mbGljdCgpIHsNCisJCXJldHVybg0KKwkJCU1lc3NhZ2VEaWFsb2cub3BlblF1ZXN0aW9uDQorCQkJCShnZXRTaXRlKCkuZ2V0U2hlbGwoKSwNCisJCQkJIGdldFN0cmluZygiX1VJX0ZpbGVDb25mbGljdF9sYWJlbCIpLA0KKwkJCQkgZ2V0U3RyaW5nKCJfV0FSTl9GaWxlQ29uZmxpY3QiKSk7DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgY3JlYXRlcyBhIG1vZGVsIGVkaXRvci4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBHbG9iYWxpbmZsdWVuemFtb2RlbEVkaXRvcigpIHsNCisJCXN1cGVyKCk7DQorCQlpbml0aWFsaXplRWRpdGluZ0RvbWFpbigpOw0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIHNldHMgdXAgdGhlIGVkaXRpbmcgZG9tYWluIGZvciB0aGUgbW9kZWwgZWRpdG9yLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIHZvaWQgaW5pdGlhbGl6ZUVkaXRpbmdEb21haW4oKSB7DQorCQkvLyBDcmVhdGUgYW4gYWRhcHRlciBmYWN0b3J5IHRoYXQgeWllbGRzIGl0ZW0gcHJvdmlkZXJzLg0KKwkJLy8NCisJCWFkYXB0ZXJGYWN0b3J5ID0gbmV3IENvbXBvc2VkQWRhcHRlckZhY3RvcnkoQ29tcG9zZWRBZGFwdGVyRmFjdG9yeS5EZXNjcmlwdG9yLlJlZ2lzdHJ5LklOU1RBTkNFKTsNCisNCisJCWFkYXB0ZXJGYWN0b3J5LmFkZEFkYXB0ZXJGYWN0b3J5KG5ldyBSZXNvdXJjZUl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5KCkpOw0KKwkJYWRhcHRlckZhY3RvcnkuYWRkQWRhcHRlckZhY3RvcnkobmV3IEdsb2JhbGluZmx1ZW56YW1vZGVsSXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkoKSk7DQorCQlhZGFwdGVyRmFjdG9yeS5hZGRBZGFwdGVyRmFjdG9yeShuZXcgU3RhbmRhcmRJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSgpKTsNCisJCWFkYXB0ZXJGYWN0b3J5LmFkZEFkYXB0ZXJGYWN0b3J5KG5ldyBDb21tb25JdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSgpKTsNCisJCWFkYXB0ZXJGYWN0b3J5LmFkZEFkYXB0ZXJGYWN0b3J5KG5ldyBNb2RlbEl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5KCkpOw0KKwkJYWRhcHRlckZhY3RvcnkuYWRkQWRhcHRlckZhY3RvcnkobmV3IEdyYXBoSXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkoKSk7DQorCQlhZGFwdGVyRmFjdG9yeS5hZGRBZGFwdGVyRmFjdG9yeShuZXcgTW9kaWZpZXJJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSgpKTsNCisJCWFkYXB0ZXJGYWN0b3J5LmFkZEFkYXB0ZXJGYWN0b3J5KG5ldyBFY29yZUl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5KCkpOw0KKwkJYWRhcHRlckZhY3RvcnkuYWRkQWRhcHRlckZhY3RvcnkobmV3IFNjZW5hcmlvSXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkoKSk7DQorCQlhZGFwdGVyRmFjdG9yeS5hZGRBZGFwdGVyRmFjdG9yeShuZXcgU2VxdWVuY2VySXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkoKSk7DQorCQlhZGFwdGVyRmFjdG9yeS5hZGRBZGFwdGVyRmFjdG9yeShuZXcgTGFiZWxzSXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkoKSk7DQorCQlhZGFwdGVyRmFjdG9yeS5hZGRBZGFwdGVyRmFjdG9yeShuZXcgU29sdmVySXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkoKSk7DQorCQlhZGFwdGVyRmFjdG9yeS5hZGRBZGFwdGVyRmFjdG9yeShuZXcgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLnByb3ZpZGVyLlN0YW5kYXJkSXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkoKSk7DQorCQlhZGFwdGVyRmFjdG9yeS5hZGRBZGFwdGVyRmFjdG9yeShuZXcgTG9nZ2VySXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkoKSk7DQorCQlhZGFwdGVyRmFjdG9yeS5hZGRBZGFwdGVyRmFjdG9yeShuZXcgUmVmbGVjdGl2ZUl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5KCkpOw0KKw0KKwkJLy8gQ3JlYXRlIHRoZSBjb21tYW5kIHN0YWNrIHRoYXQgd2lsbCBub3RpZnkgdGhpcyBlZGl0b3IgYXMgY29tbWFuZHMgYXJlIGV4ZWN1dGVkLg0KKwkJLy8NCisJCUJhc2ljQ29tbWFuZFN0YWNrIGNvbW1hbmRTdGFjayA9IG5ldyBCYXNpY0NvbW1hbmRTdGFjaygpOw0KKw0KKwkJLy8gQWRkIGEgbGlzdGVuZXIgdG8gc2V0IHRoZSBtb3N0IHJlY2VudCBjb21tYW5kJ3MgYWZmZWN0ZWQgb2JqZWN0cyB0byBiZSB0aGUgc2VsZWN0aW9uIG9mIHRoZSB2aWV3ZXIgd2l0aCBmb2N1cy4NCisJCS8vDQorCQljb21tYW5kU3RhY2suYWRkQ29tbWFuZFN0YWNrTGlzdGVuZXINCisJCQkobmV3IENvbW1hbmRTdGFja0xpc3RlbmVyKCkgew0KKwkJCQkgcHVibGljIHZvaWQgY29tbWFuZFN0YWNrQ2hhbmdlZChmaW5hbCBFdmVudE9iamVjdCBldmVudCkgew0KKwkJCQkJIGdldENvbnRhaW5lcigpLmdldERpc3BsYXkoKS5hc3luY0V4ZWMNCisJCQkJCQkgKG5ldyBSdW5uYWJsZSgpIHsNCisJCQkJCQkJICBwdWJsaWMgdm9pZCBydW4oKSB7DQorCQkJCQkJCQkgIGZpcmVQcm9wZXJ0eUNoYW5nZShJRWRpdG9yUGFydC5QUk9QX0RJUlRZKTsNCisNCisJCQkJCQkJCSAgLy8gVHJ5IHRvIHNlbGVjdCB0aGUgYWZmZWN0ZWQgb2JqZWN0cy4NCisJCQkJCQkJCSAgLy8NCisJCQkJCQkJCSAgQ29tbWFuZCBtb3N0UmVjZW50Q29tbWFuZCA9ICgoQ29tbWFuZFN0YWNrKWV2ZW50LmdldFNvdXJjZSgpKS5nZXRNb3N0UmVjZW50Q29tbWFuZCgpOw0KKwkJCQkJCQkJICBpZiAobW9zdFJlY2VudENvbW1hbmQgIT0gbnVsbCkgew0KKwkJCQkJCQkJCSAgc2V0U2VsZWN0aW9uVG9WaWV3ZXIobW9zdFJlY2VudENvbW1hbmQuZ2V0QWZmZWN0ZWRPYmplY3RzKCkpOw0KKwkJCQkJCQkJICB9DQorCQkJCQkJCQkgIGlmIChwcm9wZXJ0eVNoZWV0UGFnZSAhPSBudWxsICYmICFwcm9wZXJ0eVNoZWV0UGFnZS5nZXRDb250cm9sKCkuaXNEaXNwb3NlZCgpKSB7DQorCQkJCQkJCQkJICBwcm9wZXJ0eVNoZWV0UGFnZS5yZWZyZXNoKCk7DQorCQkJCQkJCQkgIH0NCisJCQkJCQkJICB9DQorCQkJCQkJICB9KTsNCisJCQkJIH0NCisJCQkgfSk7DQorDQorCQkvLyBDcmVhdGUgdGhlIGVkaXRpbmcgZG9tYWluIHdpdGggYSBzcGVjaWFsIGNvbW1hbmQgc3RhY2suDQorCQkvLw0KKwkJZWRpdGluZ0RvbWFpbiA9IG5ldyBBZGFwdGVyRmFjdG9yeUVkaXRpbmdEb21haW4oYWRhcHRlckZhY3RvcnksIGNvbW1hbmRTdGFjaywgbmV3IEhhc2hNYXA8UmVzb3VyY2UsIEJvb2xlYW4+KCkpOw0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIGlzIGhlcmUgZm9yIHRoZSBsaXN0ZW5lciB0byBiZSBhYmxlIHRvIGNhbGwgaXQuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwkJCUBPdmVycmlkZQ0KKwlwcm90ZWN0ZWQgdm9pZCBmaXJlUHJvcGVydHlDaGFuZ2UoaW50IGFjdGlvbikgew0KKwkJc3VwZXIuZmlyZVByb3BlcnR5Q2hhbmdlKGFjdGlvbik7DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgc2V0cyB0aGUgc2VsZWN0aW9uIGludG8gd2hpY2hldmVyIHZpZXdlciBpcyBhY3RpdmUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgdm9pZCBzZXRTZWxlY3Rpb25Ub1ZpZXdlcihDb2xsZWN0aW9uPD8+IGNvbGxlY3Rpb24pIHsNCisJCWZpbmFsIENvbGxlY3Rpb248Pz4gdGhlU2VsZWN0aW9uID0gY29sbGVjdGlvbjsNCisJCS8vIE1ha2Ugc3VyZSBpdCdzIG9rYXkuDQorCQkvLw0KKwkJaWYgKHRoZVNlbGVjdGlvbiAhPSBudWxsICYmICF0aGVTZWxlY3Rpb24uaXNFbXB0eSgpKSB7DQorCQkJUnVubmFibGUgcnVubmFibGUgPQ0KKwkJCQluZXcgUnVubmFibGUoKSB7DQorCQkJCQlwdWJsaWMgdm9pZCBydW4oKSB7DQorCQkJCQkJLy8gVHJ5IHRvIHNlbGVjdCB0aGUgaXRlbXMgaW4gdGhlIGN1cnJlbnQgY29udGVudCB2aWV3ZXIgb2YgdGhlIGVkaXRvci4NCisJCQkJCQkvLw0KKwkJCQkJCWlmIChjdXJyZW50Vmlld2VyICE9IG51bGwpIHsNCisJCQkJCQkJY3VycmVudFZpZXdlci5zZXRTZWxlY3Rpb24obmV3IFN0cnVjdHVyZWRTZWxlY3Rpb24odGhlU2VsZWN0aW9uLnRvQXJyYXkoKSksIHRydWUpOw0KKwkJCQkJCX0NCisJCQkJCX0NCisJCQkJfTsNCisJCQlnZXRTaXRlKCkuZ2V0U2hlbGwoKS5nZXREaXNwbGF5KCkuYXN5bmNFeGVjKHJ1bm5hYmxlKTsNCisJCX0NCisJfQ0KKw0KKwkvKioNCisJICogVGhpcyByZXR1cm5zIHRoZSBlZGl0aW5nIGRvbWFpbiBhcyByZXF1aXJlZCBieSB0aGUge0BsaW5rIElFZGl0aW5nRG9tYWluUHJvdmlkZXJ9IGludGVyZmFjZS4NCisJICogVGhpcyBpcyBpbXBvcnRhbnQgZm9yIGltcGxlbWVudGluZyB0aGUgc3RhdGljIG1ldGhvZHMgb2Yge0BsaW5rIEFkYXB0ZXJGYWN0b3J5RWRpdGluZ0RvbWFpbn0NCisJICogYW5kIGZvciBzdXBwb3J0aW5nIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5hY3Rpb24uQ29tbWFuZEFjdGlvbn0uDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgRWRpdGluZ0RvbWFpbiBnZXRFZGl0aW5nRG9tYWluKCkgew0KKwkJcmV0dXJuIGVkaXRpbmdEb21haW47DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgY2xhc3MgUmV2ZXJzZUFkYXB0ZXJGYWN0b3J5Q29udGVudFByb3ZpZGVyIGV4dGVuZHMgQWRhcHRlckZhY3RvcnlDb250ZW50UHJvdmlkZXIgew0KKwkJLyoqDQorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCQkgKiBAZ2VuZXJhdGVkDQorCQkgKi8NCisJCXB1YmxpYyBSZXZlcnNlQWRhcHRlckZhY3RvcnlDb250ZW50UHJvdmlkZXIoQWRhcHRlckZhY3RvcnkgYWRhcHRlckZhY3RvcnkpIHsNCisJCQlzdXBlcihhZGFwdGVyRmFjdG9yeSk7DQorCQl9DQorDQorCQkvKioNCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJCSAqIEBnZW5lcmF0ZWQNCisJCSAqLw0KKwkJQE92ZXJyaWRlDQorCQlwdWJsaWMgT2JqZWN0IFtdIGdldEVsZW1lbnRzKE9iamVjdCBvYmplY3QpIHsNCisJCQlPYmplY3QgcGFyZW50ID0gc3VwZXIuZ2V0UGFyZW50KG9iamVjdCk7DQorCQkJcmV0dXJuIChwYXJlbnQgPT0gbnVsbCA/IENvbGxlY3Rpb25zLkVNUFRZX1NFVCA6IENvbGxlY3Rpb25zLnNpbmdsZXRvbihwYXJlbnQpKS50b0FycmF5KCk7DQorCQl9DQorDQorCQkvKioNCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJCSAqIEBnZW5lcmF0ZWQNCisJCSAqLw0KKwkJQE92ZXJyaWRlDQorCQlwdWJsaWMgT2JqZWN0IFtdIGdldENoaWxkcmVuKE9iamVjdCBvYmplY3QpIHsNCisJCQlPYmplY3QgcGFyZW50ID0gc3VwZXIuZ2V0UGFyZW50KG9iamVjdCk7DQorCQkJcmV0dXJuIChwYXJlbnQgPT0gbnVsbCA/IENvbGxlY3Rpb25zLkVNUFRZX1NFVCA6IENvbGxlY3Rpb25zLnNpbmdsZXRvbihwYXJlbnQpKS50b0FycmF5KCk7DQorCQl9DQorDQorCQkvKioNCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJCSAqIEBnZW5lcmF0ZWQNCisJCSAqLw0KKwkJQE92ZXJyaWRlDQorCQlwdWJsaWMgYm9vbGVhbiBoYXNDaGlsZHJlbihPYmplY3Qgb2JqZWN0KSB7DQorCQkJT2JqZWN0IHBhcmVudCA9IHN1cGVyLmdldFBhcmVudChvYmplY3QpOw0KKwkJCXJldHVybiBwYXJlbnQgIT0gbnVsbDsNCisJCX0NCisNCisJCS8qKg0KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkJICogQGdlbmVyYXRlZA0KKwkJICovDQorCQlAT3ZlcnJpZGUNCisJCXB1YmxpYyBPYmplY3QgZ2V0UGFyZW50KE9iamVjdCBvYmplY3QpIHsNCisJCQlyZXR1cm4gbnVsbDsNCisJCX0NCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyB2b2lkIHNldEN1cnJlbnRWaWV3ZXJQYW5lKFZpZXdlclBhbmUgdmlld2VyUGFuZSkgew0KKwkJaWYgKGN1cnJlbnRWaWV3ZXJQYW5lICE9IHZpZXdlclBhbmUpIHsNCisJCQlpZiAoY3VycmVudFZpZXdlclBhbmUgIT0gbnVsbCkgew0KKwkJCQljdXJyZW50Vmlld2VyUGFuZS5zaG93Rm9jdXMoZmFsc2UpOw0KKwkJCX0NCisJCQljdXJyZW50Vmlld2VyUGFuZSA9IHZpZXdlclBhbmU7DQorCQl9DQorCQlzZXRDdXJyZW50Vmlld2VyKGN1cnJlbnRWaWV3ZXJQYW5lLmdldFZpZXdlcigpKTsNCisJfQ0KKw0KKwkvKioNCisJICogVGhpcyBtYWtlcyBzdXJlIHRoYXQgb25lIGNvbnRlbnQgdmlld2VyLCBlaXRoZXIgZm9yIHRoZSBjdXJyZW50IHBhZ2Ugb3IgdGhlIG91dGxpbmUgdmlldywgaWYgaXQgaGFzIGZvY3VzLA0KKwkgKiBpcyB0aGUgY3VycmVudCBvbmUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgdm9pZCBzZXRDdXJyZW50Vmlld2VyKFZpZXdlciB2aWV3ZXIpIHsNCisJCS8vIElmIGl0IGlzIGNoYW5naW5nLi4uDQorCQkvLw0KKwkJaWYgKGN1cnJlbnRWaWV3ZXIgIT0gdmlld2VyKSB7DQorCQkJaWYgKHNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lciA9PSBudWxsKSB7DQorCQkJCS8vIENyZWF0ZSB0aGUgbGlzdGVuZXIgb24gZGVtYW5kLg0KKwkJCQkvLw0KKwkJCQlzZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIgPQ0KKwkJCQkJbmV3IElTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIoKSB7DQorCQkJCQkJLy8gVGhpcyBqdXN0IG5vdGlmaWVzIHRob3NlIHRoaW5ncyB0aGF0IGFyZSBhZmZlY3RlZCBieSB0aGUgc2VjdGlvbi4NCisJCQkJCQkvLw0KKwkJCQkJCXB1YmxpYyB2b2lkIHNlbGVjdGlvbkNoYW5nZWQoU2VsZWN0aW9uQ2hhbmdlZEV2ZW50IHNlbGVjdGlvbkNoYW5nZWRFdmVudCkgew0KKwkJCQkJCQlzZXRTZWxlY3Rpb24oc2VsZWN0aW9uQ2hhbmdlZEV2ZW50LmdldFNlbGVjdGlvbigpKTsNCisJCQkJCQl9DQorCQkJCQl9Ow0KKwkJCX0NCisNCisJCQkvLyBTdG9wIGxpc3RlbmluZyB0byB0aGUgb2xkIG9uZS4NCisJCQkvLw0KKwkJCWlmIChjdXJyZW50Vmlld2VyICE9IG51bGwpIHsNCisJCQkJY3VycmVudFZpZXdlci5yZW1vdmVTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIoc2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyKTsNCisJCQl9DQorDQorCQkJLy8gU3RhcnQgbGlzdGVuaW5nIHRvIHRoZSBuZXcgb25lLg0KKwkJCS8vDQorCQkJaWYgKHZpZXdlciAhPSBudWxsKSB7DQorCQkJCXZpZXdlci5hZGRTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIoc2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyKTsNCisJCQl9DQorDQorCQkJLy8gUmVtZW1iZXIgaXQuDQorCQkJLy8NCisJCQljdXJyZW50Vmlld2VyID0gdmlld2VyOw0KKw0KKwkJCS8vIFNldCB0aGUgZWRpdG9ycyBzZWxlY3Rpb24gYmFzZWQgb24gdGhlIGN1cnJlbnQgdmlld2VyJ3Mgc2VsZWN0aW9uLg0KKwkJCS8vDQorCQkJc2V0U2VsZWN0aW9uKGN1cnJlbnRWaWV3ZXIgPT0gbnVsbCA/IFN0cnVjdHVyZWRTZWxlY3Rpb24uRU1QVFkgOiBjdXJyZW50Vmlld2VyLmdldFNlbGVjdGlvbigpKTsNCisJCX0NCisJfQ0KKw0KKwkvKioNCisJICogVGhpcyByZXR1cm5zIHRoZSB2aWV3ZXIgYXMgcmVxdWlyZWQgYnkgdGhlIHtAbGluayBJVmlld2VyUHJvdmlkZXJ9IGludGVyZmFjZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBWaWV3ZXIgZ2V0Vmlld2VyKCkgew0KKwkJcmV0dXJuIGN1cnJlbnRWaWV3ZXI7DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgY3JlYXRlcyBhIGNvbnRleHQgbWVudSBmb3IgdGhlIHZpZXdlciBhbmQgYWRkcyBhIGxpc3RlbmVyIGFzIHdlbGwgcmVnaXN0ZXJpbmcgdGhlIG1lbnUgZm9yIGV4dGVuc2lvbi4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCB2b2lkIGNyZWF0ZUNvbnRleHRNZW51Rm9yKFN0cnVjdHVyZWRWaWV3ZXIgdmlld2VyKSB7DQorCQlNZW51TWFuYWdlciBjb250ZXh0TWVudSA9IG5ldyBNZW51TWFuYWdlcigiI1BvcFVwIik7DQorCQljb250ZXh0TWVudS5hZGQobmV3IFNlcGFyYXRvcigiYWRkaXRpb25zIikpOw0KKwkJY29udGV4dE1lbnUuc2V0UmVtb3ZlQWxsV2hlblNob3duKHRydWUpOw0KKwkJY29udGV4dE1lbnUuYWRkTWVudUxpc3RlbmVyKHRoaXMpOw0KKwkJTWVudSBtZW51PSBjb250ZXh0TWVudS5jcmVhdGVDb250ZXh0TWVudSh2aWV3ZXIuZ2V0Q29udHJvbCgpKTsNCisJCXZpZXdlci5nZXRDb250cm9sKCkuc2V0TWVudShtZW51KTsNCisJCWdldFNpdGUoKS5yZWdpc3RlckNvbnRleHRNZW51KGNvbnRleHRNZW51LCBuZXcgVW53cmFwcGluZ1NlbGVjdGlvblByb3ZpZGVyKHZpZXdlcikpOw0KKw0KKwkJaW50IGRuZE9wZXJhdGlvbnMgPSBETkQuRFJPUF9DT1BZIHwgRE5ELkRST1BfTU9WRSB8IERORC5EUk9QX0xJTks7DQorCQlUcmFuc2ZlcltdIHRyYW5zZmVycyA9IG5ldyBUcmFuc2ZlcltdIHsgTG9jYWxUcmFuc2Zlci5nZXRJbnN0YW5jZSgpIH07DQorCQl2aWV3ZXIuYWRkRHJhZ1N1cHBvcnQoZG5kT3BlcmF0aW9ucywgdHJhbnNmZXJzLCBuZXcgVmlld2VyRHJhZ0FkYXB0ZXIodmlld2VyKSk7DQorCQl2aWV3ZXIuYWRkRHJvcFN1cHBvcnQoZG5kT3BlcmF0aW9ucywgdHJhbnNmZXJzLCBuZXcgRWRpdGluZ0RvbWFpblZpZXdlckRyb3BBZGFwdGVyKGVkaXRpbmdEb21haW4sIHZpZXdlcikpOw0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIGlzIHRoZSBtZXRob2QgY2FsbGVkIHRvIGxvYWQgYSByZXNvdXJjZSBpbnRvIHRoZSBlZGl0aW5nIGRvbWFpbidzIHJlc291cmNlIHNldCBiYXNlZCBvbiB0aGUgZWRpdG9yJ3MgaW5wdXQuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgdm9pZCBjcmVhdGVNb2RlbCgpIHsNCisJCVVSSSByZXNvdXJjZVVSSSA9IEVkaXRVSVV0aWwuZ2V0VVJJKGdldEVkaXRvcklucHV0KCkpOw0KKwkJRXhjZXB0aW9uIGV4Y2VwdGlvbiA9IG51bGw7DQorCQlSZXNvdXJjZSByZXNvdXJjZSA9IG51bGw7DQorCQl0cnkgew0KKwkJCS8vIExvYWQgdGhlIHJlc291cmNlIHRocm91Z2ggdGhlIGVkaXRpbmcgZG9tYWluLg0KKwkJCS8vDQorCQkJcmVzb3VyY2UgPSBlZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkuZ2V0UmVzb3VyY2UocmVzb3VyY2VVUkksIHRydWUpOw0KKwkJfQ0KKwkJY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7DQorCQkJZXhjZXB0aW9uID0gZTsNCisJCQlyZXNvdXJjZSA9IGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKS5nZXRSZXNvdXJjZShyZXNvdXJjZVVSSSwgZmFsc2UpOw0KKwkJfQ0KKw0KKwkJRGlhZ25vc3RpYyBkaWFnbm9zdGljID0gYW5hbHl6ZVJlc291cmNlUHJvYmxlbXMocmVzb3VyY2UsIGV4Y2VwdGlvbik7DQorCQlpZiAoZGlhZ25vc3RpYy5nZXRTZXZlcml0eSgpICE9IERpYWdub3N0aWMuT0spIHsNCisJCQlyZXNvdXJjZVRvRGlhZ25vc3RpY01hcC5wdXQocmVzb3VyY2UsICBhbmFseXplUmVzb3VyY2VQcm9ibGVtcyhyZXNvdXJjZSwgZXhjZXB0aW9uKSk7DQorCQl9DQorCQllZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkuZUFkYXB0ZXJzKCkuYWRkKHByb2JsZW1JbmRpY2F0aW9uQWRhcHRlcik7DQorCX0NCisNCisJLyoqDQorCSAqIFJldHVybnMgYSBkaWFnbm9zdGljIGRlc2NyaWJpbmcgdGhlIGVycm9ycyBhbmQgd2FybmluZ3MgbGlzdGVkIGluIHRoZSByZXNvdXJjZQ0KKwkgKiBhbmQgdGhlIHNwZWNpZmllZCBleGNlcHRpb24gKGlmIGFueSkuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgRGlhZ25vc3RpYyBhbmFseXplUmVzb3VyY2VQcm9ibGVtcyhSZXNvdXJjZSByZXNvdXJjZSwgRXhjZXB0aW9uIGV4Y2VwdGlvbikgew0KKwkJaWYgKCFyZXNvdXJjZS5nZXRFcnJvcnMoKS5pc0VtcHR5KCkgfHwgIXJlc291cmNlLmdldFdhcm5pbmdzKCkuaXNFbXB0eSgpKSB7DQorCQkJQmFzaWNEaWFnbm9zdGljIGJhc2ljRGlhZ25vc3RpYyA9DQorCQkJCW5ldyBCYXNpY0RpYWdub3N0aWMNCisJCQkJCShEaWFnbm9zdGljLkVSUk9SLA0KKwkJCQkJICJvcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMuZ2xvYmFsaW5mbHVlbnphbW9kZWwuZWRpdG9yIiwNCisJCQkJCSAwLA0KKwkJCQkJIGdldFN0cmluZygiX1VJX0NyZWF0ZU1vZGVsRXJyb3JfbWVzc2FnZSIsIHJlc291cmNlLmdldFVSSSgpKSwNCisJCQkJCSBuZXcgT2JqZWN0IFtdIHsgZXhjZXB0aW9uID09IG51bGwgPyAoT2JqZWN0KXJlc291cmNlIDogZXhjZXB0aW9uIH0pOw0KKwkJCWJhc2ljRGlhZ25vc3RpYy5tZXJnZShFY29yZVV0aWwuY29tcHV0ZURpYWdub3N0aWMocmVzb3VyY2UsIHRydWUpKTsNCisJCQlyZXR1cm4gYmFzaWNEaWFnbm9zdGljOw0KKwkJfQ0KKwkJZWxzZSBpZiAoZXhjZXB0aW9uICE9IG51bGwpIHsNCisJCQlyZXR1cm4NCisJCQkJbmV3IEJhc2ljRGlhZ25vc3RpYw0KKwkJCQkJKERpYWdub3N0aWMuRVJST1IsDQorCQkJCQkgIm9yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy5nbG9iYWxpbmZsdWVuemFtb2RlbC5lZGl0b3IiLA0KKwkJCQkJIDAsDQorCQkJCQkgZ2V0U3RyaW5nKCJfVUlfQ3JlYXRlTW9kZWxFcnJvcl9tZXNzYWdlIiwgcmVzb3VyY2UuZ2V0VVJJKCkpLA0KKwkJCQkJIG5ldyBPYmplY3RbXSB7IGV4Y2VwdGlvbiB9KTsNCisJCX0NCisJCWVsc2Ugew0KKwkJCXJldHVybiBEaWFnbm9zdGljLk9LX0lOU1RBTkNFOw0KKwkJfQ0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIGlzIHRoZSBtZXRob2QgdXNlZCBieSB0aGUgZnJhbWV3b3JrIHRvIGluc3RhbGwgeW91ciBvd24gY29udHJvbHMuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlAT3ZlcnJpZGUNCisJcHVibGljIHZvaWQgY3JlYXRlUGFnZXMoKSB7DQorCQkvLyBDcmVhdGVzIHRoZSBtb2RlbCBmcm9tIHRoZSBlZGl0b3IgaW5wdXQNCisJCS8vDQorCQljcmVhdGVNb2RlbCgpOw0KKw0KKwkJLy8gT25seSBjcmVhdGVzIHRoZSBvdGhlciBwYWdlcyBpZiB0aGVyZSBpcyBzb21ldGhpbmcgdGhhdCBjYW4gYmUgZWRpdGVkDQorCQkvLw0KKwkJaWYgKCFnZXRFZGl0aW5nRG9tYWluKCkuZ2V0UmVzb3VyY2VTZXQoKS5nZXRSZXNvdXJjZXMoKS5pc0VtcHR5KCkpIHsNCisJCQkvLyBDcmVhdGUgYSBwYWdlIGZvciB0aGUgc2VsZWN0aW9uIHRyZWUgdmlldy4NCisJCQkvLw0KKwkJCXsNCisJCQkJVmlld2VyUGFuZSB2aWV3ZXJQYW5lID0NCisJCQkJCW5ldyBWaWV3ZXJQYW5lKGdldFNpdGUoKS5nZXRQYWdlKCksIEdsb2JhbGluZmx1ZW56YW1vZGVsRWRpdG9yLnRoaXMpIHsNCisJCQkJCQlAT3ZlcnJpZGUNCisJCQkJCQlwdWJsaWMgVmlld2VyIGNyZWF0ZVZpZXdlcihDb21wb3NpdGUgY29tcG9zaXRlKSB7DQorCQkJCQkJCVRyZWUgdHJlZSA9IG5ldyBUcmVlKGNvbXBvc2l0ZSwgU1dULk1VTFRJKTsNCisJCQkJCQkJVHJlZVZpZXdlciBuZXdUcmVlVmlld2VyID0gbmV3IFRyZWVWaWV3ZXIodHJlZSk7DQorCQkJCQkJCXJldHVybiBuZXdUcmVlVmlld2VyOw0KKwkJCQkJCX0NCisJCQkJCQlAT3ZlcnJpZGUNCisJCQkJCQlwdWJsaWMgdm9pZCByZXF1ZXN0QWN0aXZhdGlvbigpIHsNCisJCQkJCQkJc3VwZXIucmVxdWVzdEFjdGl2YXRpb24oKTsNCisJCQkJCQkJc2V0Q3VycmVudFZpZXdlclBhbmUodGhpcyk7DQorCQkJCQkJfQ0KKwkJCQkJfTsNCisJCQkJdmlld2VyUGFuZS5jcmVhdGVDb250cm9sKGdldENvbnRhaW5lcigpKTsNCisNCisJCQkJc2VsZWN0aW9uVmlld2VyID0gKFRyZWVWaWV3ZXIpdmlld2VyUGFuZS5nZXRWaWV3ZXIoKTsNCisJCQkJc2VsZWN0aW9uVmlld2VyLnNldENvbnRlbnRQcm92aWRlcihuZXcgQWRhcHRlckZhY3RvcnlDb250ZW50UHJvdmlkZXIoYWRhcHRlckZhY3RvcnkpKTsNCisNCisJCQkJc2VsZWN0aW9uVmlld2VyLnNldExhYmVsUHJvdmlkZXIobmV3IEFkYXB0ZXJGYWN0b3J5TGFiZWxQcm92aWRlcihhZGFwdGVyRmFjdG9yeSkpOw0KKwkJCQlzZWxlY3Rpb25WaWV3ZXIuc2V0SW5wdXQoZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpKTsNCisJCQkJc2VsZWN0aW9uVmlld2VyLnNldFNlbGVjdGlvbihuZXcgU3RydWN0dXJlZFNlbGVjdGlvbihlZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkuZ2V0UmVzb3VyY2VzKCkuZ2V0KDApKSwgdHJ1ZSk7DQorCQkJCXZpZXdlclBhbmUuc2V0VGl0bGUoZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpKTsNCisNCisJCQkJbmV3IEFkYXB0ZXJGYWN0b3J5VHJlZUVkaXRvcihzZWxlY3Rpb25WaWV3ZXIuZ2V0VHJlZSgpLCBhZGFwdGVyRmFjdG9yeSk7DQorDQorCQkJCWNyZWF0ZUNvbnRleHRNZW51Rm9yKHNlbGVjdGlvblZpZXdlcik7DQorCQkJCWludCBwYWdlSW5kZXggPSBhZGRQYWdlKHZpZXdlclBhbmUuZ2V0Q29udHJvbCgpKTsNCisJCQkJc2V0UGFnZVRleHQocGFnZUluZGV4LCBnZXRTdHJpbmcoIl9VSV9TZWxlY3Rpb25QYWdlX2xhYmVsIikpOw0KKwkJCX0NCisNCisJCQkvLyBDcmVhdGUgYSBwYWdlIGZvciB0aGUgcGFyZW50IHRyZWUgdmlldy4NCisJCQkvLw0KKwkJCXsNCisJCQkJVmlld2VyUGFuZSB2aWV3ZXJQYW5lID0NCisJCQkJCW5ldyBWaWV3ZXJQYW5lKGdldFNpdGUoKS5nZXRQYWdlKCksIEdsb2JhbGluZmx1ZW56YW1vZGVsRWRpdG9yLnRoaXMpIHsNCisJCQkJCQlAT3ZlcnJpZGUNCisJCQkJCQlwdWJsaWMgVmlld2VyIGNyZWF0ZVZpZXdlcihDb21wb3NpdGUgY29tcG9zaXRlKSB7DQorCQkJCQkJCVRyZWUgdHJlZSA9IG5ldyBUcmVlKGNvbXBvc2l0ZSwgU1dULk1VTFRJKTsNCisJCQkJCQkJVHJlZVZpZXdlciBuZXdUcmVlVmlld2VyID0gbmV3IFRyZWVWaWV3ZXIodHJlZSk7DQorCQkJCQkJCXJldHVybiBuZXdUcmVlVmlld2VyOw0KKwkJCQkJCX0NCisJCQkJCQlAT3ZlcnJpZGUNCisJCQkJCQlwdWJsaWMgdm9pZCByZXF1ZXN0QWN0aXZhdGlvbigpIHsNCisJCQkJCQkJc3VwZXIucmVxdWVzdEFjdGl2YXRpb24oKTsNCisJCQkJCQkJc2V0Q3VycmVudFZpZXdlclBhbmUodGhpcyk7DQorCQkJCQkJfQ0KKwkJCQkJfTsNCisJCQkJdmlld2VyUGFuZS5jcmVhdGVDb250cm9sKGdldENvbnRhaW5lcigpKTsNCisNCisJCQkJcGFyZW50Vmlld2VyID0gKFRyZWVWaWV3ZXIpdmlld2VyUGFuZS5nZXRWaWV3ZXIoKTsNCisJCQkJcGFyZW50Vmlld2VyLnNldEF1dG9FeHBhbmRMZXZlbCgzMCk7DQorCQkJCXBhcmVudFZpZXdlci5zZXRDb250ZW50UHJvdmlkZXIobmV3IFJldmVyc2VBZGFwdGVyRmFjdG9yeUNvbnRlbnRQcm92aWRlcihhZGFwdGVyRmFjdG9yeSkpOw0KKwkJCQlwYXJlbnRWaWV3ZXIuc2V0TGFiZWxQcm92aWRlcihuZXcgQWRhcHRlckZhY3RvcnlMYWJlbFByb3ZpZGVyKGFkYXB0ZXJGYWN0b3J5KSk7DQorDQorCQkJCWNyZWF0ZUNvbnRleHRNZW51Rm9yKHBhcmVudFZpZXdlcik7DQorCQkJCWludCBwYWdlSW5kZXggPSBhZGRQYWdlKHZpZXdlclBhbmUuZ2V0Q29udHJvbCgpKTsNCisJCQkJc2V0UGFnZVRleHQocGFnZUluZGV4LCBnZXRTdHJpbmcoIl9VSV9QYXJlbnRQYWdlX2xhYmVsIikpOw0KKwkJCX0NCisNCisJCQkvLyBUaGlzIGlzIHRoZSBwYWdlIGZvciB0aGUgbGlzdCB2aWV3ZXINCisJCQkvLw0KKwkJCXsNCisJCQkJVmlld2VyUGFuZSB2aWV3ZXJQYW5lID0NCisJCQkJCW5ldyBWaWV3ZXJQYW5lKGdldFNpdGUoKS5nZXRQYWdlKCksIEdsb2JhbGluZmx1ZW56YW1vZGVsRWRpdG9yLnRoaXMpIHsNCisJCQkJCQlAT3ZlcnJpZGUNCisJCQkJCQlwdWJsaWMgVmlld2VyIGNyZWF0ZVZpZXdlcihDb21wb3NpdGUgY29tcG9zaXRlKSB7DQorCQkJCQkJCXJldHVybiBuZXcgTGlzdFZpZXdlcihjb21wb3NpdGUpOw0KKwkJCQkJCX0NCisJCQkJCQlAT3ZlcnJpZGUNCisJCQkJCQlwdWJsaWMgdm9pZCByZXF1ZXN0QWN0aXZhdGlvbigpIHsNCisJCQkJCQkJc3VwZXIucmVxdWVzdEFjdGl2YXRpb24oKTsNCisJCQkJCQkJc2V0Q3VycmVudFZpZXdlclBhbmUodGhpcyk7DQorCQkJCQkJfQ0KKwkJCQkJfTsNCisJCQkJdmlld2VyUGFuZS5jcmVhdGVDb250cm9sKGdldENvbnRhaW5lcigpKTsNCisJCQkJbGlzdFZpZXdlciA9IChMaXN0Vmlld2VyKXZpZXdlclBhbmUuZ2V0Vmlld2VyKCk7DQorCQkJCWxpc3RWaWV3ZXIuc2V0Q29udGVudFByb3ZpZGVyKG5ldyBBZGFwdGVyRmFjdG9yeUNvbnRlbnRQcm92aWRlcihhZGFwdGVyRmFjdG9yeSkpOw0KKwkJCQlsaXN0Vmlld2VyLnNldExhYmVsUHJvdmlkZXIobmV3IEFkYXB0ZXJGYWN0b3J5TGFiZWxQcm92aWRlcihhZGFwdGVyRmFjdG9yeSkpOw0KKw0KKwkJCQljcmVhdGVDb250ZXh0TWVudUZvcihsaXN0Vmlld2VyKTsNCisJCQkJaW50IHBhZ2VJbmRleCA9IGFkZFBhZ2Uodmlld2VyUGFuZS5nZXRDb250cm9sKCkpOw0KKwkJCQlzZXRQYWdlVGV4dChwYWdlSW5kZXgsIGdldFN0cmluZygiX1VJX0xpc3RQYWdlX2xhYmVsIikpOw0KKwkJCX0NCisNCisJCQkvLyBUaGlzIGlzIHRoZSBwYWdlIGZvciB0aGUgdHJlZSB2aWV3ZXINCisJCQkvLw0KKwkJCXsNCisJCQkJVmlld2VyUGFuZSB2aWV3ZXJQYW5lID0NCisJCQkJCW5ldyBWaWV3ZXJQYW5lKGdldFNpdGUoKS5nZXRQYWdlKCksIEdsb2JhbGluZmx1ZW56YW1vZGVsRWRpdG9yLnRoaXMpIHsNCisJCQkJCQlAT3ZlcnJpZGUNCisJCQkJCQlwdWJsaWMgVmlld2VyIGNyZWF0ZVZpZXdlcihDb21wb3NpdGUgY29tcG9zaXRlKSB7DQorCQkJCQkJCXJldHVybiBuZXcgVHJlZVZpZXdlcihjb21wb3NpdGUpOw0KKwkJCQkJCX0NCisJCQkJCQlAT3ZlcnJpZGUNCisJCQkJCQlwdWJsaWMgdm9pZCByZXF1ZXN0QWN0aXZhdGlvbigpIHsNCisJCQkJCQkJc3VwZXIucmVxdWVzdEFjdGl2YXRpb24oKTsNCisJCQkJCQkJc2V0Q3VycmVudFZpZXdlclBhbmUodGhpcyk7DQorCQkJCQkJfQ0KKwkJCQkJfTsNCisJCQkJdmlld2VyUGFuZS5jcmVhdGVDb250cm9sKGdldENvbnRhaW5lcigpKTsNCisJCQkJdHJlZVZpZXdlciA9IChUcmVlVmlld2VyKXZpZXdlclBhbmUuZ2V0Vmlld2VyKCk7DQorCQkJCXRyZWVWaWV3ZXIuc2V0Q29udGVudFByb3ZpZGVyKG5ldyBBZGFwdGVyRmFjdG9yeUNvbnRlbnRQcm92aWRlcihhZGFwdGVyRmFjdG9yeSkpOw0KKwkJCQl0cmVlVmlld2VyLnNldExhYmVsUHJvdmlkZXIobmV3IEFkYXB0ZXJGYWN0b3J5TGFiZWxQcm92aWRlcihhZGFwdGVyRmFjdG9yeSkpOw0KKw0KKwkJCQluZXcgQWRhcHRlckZhY3RvcnlUcmVlRWRpdG9yKHRyZWVWaWV3ZXIuZ2V0VHJlZSgpLCBhZGFwdGVyRmFjdG9yeSk7DQorDQorCQkJCWNyZWF0ZUNvbnRleHRNZW51Rm9yKHRyZWVWaWV3ZXIpOw0KKwkJCQlpbnQgcGFnZUluZGV4ID0gYWRkUGFnZSh2aWV3ZXJQYW5lLmdldENvbnRyb2woKSk7DQorCQkJCXNldFBhZ2VUZXh0KHBhZ2VJbmRleCwgZ2V0U3RyaW5nKCJfVUlfVHJlZVBhZ2VfbGFiZWwiKSk7DQorCQkJfQ0KKw0KKwkJCS8vIFRoaXMgaXMgdGhlIHBhZ2UgZm9yIHRoZSB0YWJsZSB2aWV3ZXIuDQorCQkJLy8NCisJCQl7DQorCQkJCVZpZXdlclBhbmUgdmlld2VyUGFuZSA9DQorCQkJCQluZXcgVmlld2VyUGFuZShnZXRTaXRlKCkuZ2V0UGFnZSgpLCBHbG9iYWxpbmZsdWVuemFtb2RlbEVkaXRvci50aGlzKSB7DQorCQkJCQkJQE92ZXJyaWRlDQorCQkJCQkJcHVibGljIFZpZXdlciBjcmVhdGVWaWV3ZXIoQ29tcG9zaXRlIGNvbXBvc2l0ZSkgew0KKwkJCQkJCQlyZXR1cm4gbmV3IFRhYmxlVmlld2VyKGNvbXBvc2l0ZSk7DQorCQkJCQkJfQ0KKwkJCQkJCUBPdmVycmlkZQ0KKwkJCQkJCXB1YmxpYyB2b2lkIHJlcXVlc3RBY3RpdmF0aW9uKCkgew0KKwkJCQkJCQlzdXBlci5yZXF1ZXN0QWN0aXZhdGlvbigpOw0KKwkJCQkJCQlzZXRDdXJyZW50Vmlld2VyUGFuZSh0aGlzKTsNCisJCQkJCQl9DQorCQkJCQl9Ow0KKwkJCQl2aWV3ZXJQYW5lLmNyZWF0ZUNvbnRyb2woZ2V0Q29udGFpbmVyKCkpOw0KKwkJCQl0YWJsZVZpZXdlciA9IChUYWJsZVZpZXdlcil2aWV3ZXJQYW5lLmdldFZpZXdlcigpOw0KKw0KKwkJCQlUYWJsZSB0YWJsZSA9IHRhYmxlVmlld2VyLmdldFRhYmxlKCk7DQorCQkJCVRhYmxlTGF5b3V0IGxheW91dCA9IG5ldyBUYWJsZUxheW91dCgpOw0KKwkJCQl0YWJsZS5zZXRMYXlvdXQobGF5b3V0KTsNCisJCQkJdGFibGUuc2V0SGVhZGVyVmlzaWJsZSh0cnVlKTsNCisJCQkJdGFibGUuc2V0TGluZXNWaXNpYmxlKHRydWUpOw0KKw0KKwkJCQlUYWJsZUNvbHVtbiBvYmplY3RDb2x1bW4gPSBuZXcgVGFibGVDb2x1bW4odGFibGUsIFNXVC5OT05FKTsNCisJCQkJbGF5b3V0LmFkZENvbHVtbkRhdGEobmV3IENvbHVtbldlaWdodERhdGEoMywgMTAwLCB0cnVlKSk7DQorCQkJCW9iamVjdENvbHVtbi5zZXRUZXh0KGdldFN0cmluZygiX1VJX09iamVjdENvbHVtbl9sYWJlbCIpKTsNCisJCQkJb2JqZWN0Q29sdW1uLnNldFJlc2l6YWJsZSh0cnVlKTsNCisNCisJCQkJVGFibGVDb2x1bW4gc2VsZkNvbHVtbiA9IG5ldyBUYWJsZUNvbHVtbih0YWJsZSwgU1dULk5PTkUpOw0KKwkJCQlsYXlvdXQuYWRkQ29sdW1uRGF0YShuZXcgQ29sdW1uV2VpZ2h0RGF0YSgyLCAxMDAsIHRydWUpKTsNCisJCQkJc2VsZkNvbHVtbi5zZXRUZXh0KGdldFN0cmluZygiX1VJX1NlbGZDb2x1bW5fbGFiZWwiKSk7DQorCQkJCXNlbGZDb2x1bW4uc2V0UmVzaXphYmxlKHRydWUpOw0KKw0KKwkJCQl0YWJsZVZpZXdlci5zZXRDb2x1bW5Qcm9wZXJ0aWVzKG5ldyBTdHJpbmcgW10geyJhIiwgImIifSk7DQorCQkJCXRhYmxlVmlld2VyLnNldENvbnRlbnRQcm92aWRlcihuZXcgQWRhcHRlckZhY3RvcnlDb250ZW50UHJvdmlkZXIoYWRhcHRlckZhY3RvcnkpKTsNCisJCQkJdGFibGVWaWV3ZXIuc2V0TGFiZWxQcm92aWRlcihuZXcgQWRhcHRlckZhY3RvcnlMYWJlbFByb3ZpZGVyKGFkYXB0ZXJGYWN0b3J5KSk7DQorDQorCQkJCWNyZWF0ZUNvbnRleHRNZW51Rm9yKHRhYmxlVmlld2VyKTsNCisJCQkJaW50IHBhZ2VJbmRleCA9IGFkZFBhZ2Uodmlld2VyUGFuZS5nZXRDb250cm9sKCkpOw0KKwkJCQlzZXRQYWdlVGV4dChwYWdlSW5kZXgsIGdldFN0cmluZygiX1VJX1RhYmxlUGFnZV9sYWJlbCIpKTsNCisJCQl9DQorDQorCQkJLy8gVGhpcyBpcyB0aGUgcGFnZSBmb3IgdGhlIHRhYmxlIHRyZWUgdmlld2VyLg0KKwkJCS8vDQorCQkJew0KKwkJCQlWaWV3ZXJQYW5lIHZpZXdlclBhbmUgPQ0KKwkJCQkJbmV3IFZpZXdlclBhbmUoZ2V0U2l0ZSgpLmdldFBhZ2UoKSwgR2xvYmFsaW5mbHVlbnphbW9kZWxFZGl0b3IudGhpcykgew0KKwkJCQkJCUBPdmVycmlkZQ0KKwkJCQkJCXB1YmxpYyBWaWV3ZXIgY3JlYXRlVmlld2VyKENvbXBvc2l0ZSBjb21wb3NpdGUpIHsNCisJCQkJCQkJcmV0dXJuIG5ldyBUcmVlVmlld2VyKGNvbXBvc2l0ZSk7DQorCQkJCQkJfQ0KKwkJCQkJCUBPdmVycmlkZQ0KKwkJCQkJCXB1YmxpYyB2b2lkIHJlcXVlc3RBY3RpdmF0aW9uKCkgew0KKwkJCQkJCQlzdXBlci5yZXF1ZXN0QWN0aXZhdGlvbigpOw0KKwkJCQkJCQlzZXRDdXJyZW50Vmlld2VyUGFuZSh0aGlzKTsNCisJCQkJCQl9DQorCQkJCQl9Ow0KKwkJCQl2aWV3ZXJQYW5lLmNyZWF0ZUNvbnRyb2woZ2V0Q29udGFpbmVyKCkpOw0KKw0KKwkJCQl0cmVlVmlld2VyV2l0aENvbHVtbnMgPSAoVHJlZVZpZXdlcil2aWV3ZXJQYW5lLmdldFZpZXdlcigpOw0KKw0KKwkJCQlUcmVlIHRyZWUgPSB0cmVlVmlld2VyV2l0aENvbHVtbnMuZ2V0VHJlZSgpOw0KKwkJCQl0cmVlLnNldExheW91dERhdGEobmV3IEZpbGxMYXlvdXQoKSk7DQorCQkJCXRyZWUuc2V0SGVhZGVyVmlzaWJsZSh0cnVlKTsNCisJCQkJdHJlZS5zZXRMaW5lc1Zpc2libGUodHJ1ZSk7DQorDQorCQkJCVRyZWVDb2x1bW4gb2JqZWN0Q29sdW1uID0gbmV3IFRyZWVDb2x1bW4odHJlZSwgU1dULk5PTkUpOw0KKwkJCQlvYmplY3RDb2x1bW4uc2V0VGV4dChnZXRTdHJpbmcoIl9VSV9PYmplY3RDb2x1bW5fbGFiZWwiKSk7DQorCQkJCW9iamVjdENvbHVtbi5zZXRSZXNpemFibGUodHJ1ZSk7DQorCQkJCW9iamVjdENvbHVtbi5zZXRXaWR0aCgyNTApOw0KKw0KKwkJCQlUcmVlQ29sdW1uIHNlbGZDb2x1bW4gPSBuZXcgVHJlZUNvbHVtbih0cmVlLCBTV1QuTk9ORSk7DQorCQkJCXNlbGZDb2x1bW4uc2V0VGV4dChnZXRTdHJpbmcoIl9VSV9TZWxmQ29sdW1uX2xhYmVsIikpOw0KKwkJCQlzZWxmQ29sdW1uLnNldFJlc2l6YWJsZSh0cnVlKTsNCisJCQkJc2VsZkNvbHVtbi5zZXRXaWR0aCgyMDApOw0KKw0KKwkJCQl0cmVlVmlld2VyV2l0aENvbHVtbnMuc2V0Q29sdW1uUHJvcGVydGllcyhuZXcgU3RyaW5nIFtdIHsiYSIsICJiIn0pOw0KKwkJCQl0cmVlVmlld2VyV2l0aENvbHVtbnMuc2V0Q29udGVudFByb3ZpZGVyKG5ldyBBZGFwdGVyRmFjdG9yeUNvbnRlbnRQcm92aWRlcihhZGFwdGVyRmFjdG9yeSkpOw0KKwkJCQl0cmVlVmlld2VyV2l0aENvbHVtbnMuc2V0TGFiZWxQcm92aWRlcihuZXcgQWRhcHRlckZhY3RvcnlMYWJlbFByb3ZpZGVyKGFkYXB0ZXJGYWN0b3J5KSk7DQorDQorCQkJCWNyZWF0ZUNvbnRleHRNZW51Rm9yKHRyZWVWaWV3ZXJXaXRoQ29sdW1ucyk7DQorCQkJCWludCBwYWdlSW5kZXggPSBhZGRQYWdlKHZpZXdlclBhbmUuZ2V0Q29udHJvbCgpKTsNCisJCQkJc2V0UGFnZVRleHQocGFnZUluZGV4LCBnZXRTdHJpbmcoIl9VSV9UcmVlV2l0aENvbHVtbnNQYWdlX2xhYmVsIikpOw0KKwkJCX0NCisNCisJCQlnZXRTaXRlKCkuZ2V0U2hlbGwoKS5nZXREaXNwbGF5KCkuYXN5bmNFeGVjDQorCQkJCShuZXcgUnVubmFibGUoKSB7DQorCQkJCQkgcHVibGljIHZvaWQgcnVuKCkgew0KKwkJCQkJCSBzZXRBY3RpdmVQYWdlKDApOw0KKwkJCQkJIH0NCisJCQkJIH0pOw0KKwkJfQ0KKw0KKwkJLy8gRW5zdXJlcyB0aGF0IHRoaXMgZWRpdG9yIHdpbGwgb25seSBkaXNwbGF5IHRoZSBwYWdlJ3MgdGFiDQorCQkvLyBhcmVhIGlmIHRoZXJlIGFyZSBtb3JlIHRoYW4gb25lIHBhZ2UNCisJCS8vDQorCQlnZXRDb250YWluZXIoKS5hZGRDb250cm9sTGlzdGVuZXINCisJCQkobmV3IENvbnRyb2xBZGFwdGVyKCkgew0KKwkJCQlib29sZWFuIGd1YXJkID0gZmFsc2U7DQorCQkJCUBPdmVycmlkZQ0KKwkJCQlwdWJsaWMgdm9pZCBjb250cm9sUmVzaXplZChDb250cm9sRXZlbnQgZXZlbnQpIHsNCisJCQkJCWlmICghZ3VhcmQpIHsNCisJCQkJCQlndWFyZCA9IHRydWU7DQorCQkJCQkJaGlkZVRhYnMoKTsNCisJCQkJCQlndWFyZCA9IGZhbHNlOw0KKwkJCQkJfQ0KKwkJCQl9DQorCQkJIH0pOw0KKw0KKwkJZ2V0U2l0ZSgpLmdldFNoZWxsKCkuZ2V0RGlzcGxheSgpLmFzeW5jRXhlYw0KKwkJCShuZXcgUnVubmFibGUoKSB7DQorCQkJCSBwdWJsaWMgdm9pZCBydW4oKSB7DQorCQkJCQkgdXBkYXRlUHJvYmxlbUluZGljYXRpb24oKTsNCisJCQkJIH0NCisJCQkgfSk7DQorCX0NCisNCisJLyoqDQorCSAqIElmIHRoZXJlIGlzIGp1c3Qgb25lIHBhZ2UgaW4gdGhlIG11bHRpLXBhZ2UgZWRpdG9yIHBhcnQsDQorCSAqIHRoaXMgaGlkZXMgdGhlIHNpbmdsZSB0YWIgYXQgdGhlIGJvdHRvbS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCB2b2lkIGhpZGVUYWJzKCkgew0KKwkJaWYgKGdldFBhZ2VDb3VudCgpIDw9IDEpIHsNCisJCQlzZXRQYWdlVGV4dCgwLCAiIik7DQorCQkJaWYgKGdldENvbnRhaW5lcigpIGluc3RhbmNlb2YgQ1RhYkZvbGRlcikgew0KKwkJCQkoKENUYWJGb2xkZXIpZ2V0Q29udGFpbmVyKCkpLnNldFRhYkhlaWdodCgxKTsNCisJCQkJUG9pbnQgcG9pbnQgPSBnZXRDb250YWluZXIoKS5nZXRTaXplKCk7DQorCQkJCWdldENvbnRhaW5lcigpLnNldFNpemUocG9pbnQueCwgcG9pbnQueSArIDYpOw0KKwkJCX0NCisJCX0NCisJfQ0KKw0KKwkvKioNCisJICogSWYgdGhlcmUgaXMgbW9yZSB0aGFuIG9uZSBwYWdlIGluIHRoZSBtdWx0aS1wYWdlIGVkaXRvciBwYXJ0LA0KKwkgKiB0aGlzIHNob3dzIHRoZSB0YWJzIGF0IHRoZSBib3R0b20uDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgdm9pZCBzaG93VGFicygpIHsNCisJCWlmIChnZXRQYWdlQ291bnQoKSA+IDEpIHsNCisJCQlzZXRQYWdlVGV4dCgwLCBnZXRTdHJpbmcoIl9VSV9TZWxlY3Rpb25QYWdlX2xhYmVsIikpOw0KKwkJCWlmIChnZXRDb250YWluZXIoKSBpbnN0YW5jZW9mIENUYWJGb2xkZXIpIHsNCisJCQkJKChDVGFiRm9sZGVyKWdldENvbnRhaW5lcigpKS5zZXRUYWJIZWlnaHQoU1dULkRFRkFVTFQpOw0KKwkJCQlQb2ludCBwb2ludCA9IGdldENvbnRhaW5lcigpLmdldFNpemUoKTsNCisJCQkJZ2V0Q29udGFpbmVyKCkuc2V0U2l6ZShwb2ludC54LCBwb2ludC55IC0gNik7DQorCQkJfQ0KKwkJfQ0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIGlzIHVzZWQgdG8gdHJhY2sgdGhlIGFjdGl2ZSB2aWV3ZXIuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlAT3ZlcnJpZGUNCisJcHJvdGVjdGVkIHZvaWQgcGFnZUNoYW5nZShpbnQgcGFnZUluZGV4KSB7DQorCQlzdXBlci5wYWdlQ2hhbmdlKHBhZ2VJbmRleCk7DQorDQorCQlpZiAoY29udGVudE91dGxpbmVQYWdlICE9IG51bGwpIHsNCisJCQloYW5kbGVDb250ZW50T3V0bGluZVNlbGVjdGlvbihjb250ZW50T3V0bGluZVBhZ2UuZ2V0U2VsZWN0aW9uKCkpOw0KKwkJfQ0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIGlzIGhvdyB0aGUgZnJhbWV3b3JrIGRldGVybWluZXMgd2hpY2ggaW50ZXJmYWNlcyB3ZSBpbXBsZW1lbnQuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlAU3VwcHJlc3NXYXJuaW5ncygidW5jaGVja2VkIikNCisJQE92ZXJyaWRlDQorCXB1YmxpYyBPYmplY3QgZ2V0QWRhcHRlcihDbGFzcyBrZXkpIHsNCisJCWlmIChrZXkuZXF1YWxzKElDb250ZW50T3V0bGluZVBhZ2UuY2xhc3MpKSB7DQorCQkJcmV0dXJuIHNob3dPdXRsaW5lVmlldygpID8gZ2V0Q29udGVudE91dGxpbmVQYWdlKCkgOiBudWxsOw0KKwkJfQ0KKwkJZWxzZSBpZiAoa2V5LmVxdWFscyhJUHJvcGVydHlTaGVldFBhZ2UuY2xhc3MpKSB7DQorCQkJcmV0dXJuIGdldFByb3BlcnR5U2hlZXRQYWdlKCk7DQorCQl9DQorCQllbHNlIGlmIChrZXkuZXF1YWxzKElHb3RvTWFya2VyLmNsYXNzKSkgew0KKwkJCXJldHVybiB0aGlzOw0KKwkJfQ0KKwkJZWxzZSB7DQorCQkJcmV0dXJuIHN1cGVyLmdldEFkYXB0ZXIoa2V5KTsNCisJCX0NCisJfQ0KKw0KKwkvKioNCisJICogVGhpcyBhY2Nlc3NlcyBhIGNhY2hlZCB2ZXJzaW9uIG9mIHRoZSBjb250ZW50IG91dGxpbmVyLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIElDb250ZW50T3V0bGluZVBhZ2UgZ2V0Q29udGVudE91dGxpbmVQYWdlKCkgew0KKwkJaWYgKGNvbnRlbnRPdXRsaW5lUGFnZSA9PSBudWxsKSB7DQorCQkJLy8gVGhlIGNvbnRlbnQgb3V0bGluZSBpcyBqdXN0IGEgdHJlZS4NCisJCQkvLw0KKwkJCWNsYXNzIE15Q29udGVudE91dGxpbmVQYWdlIGV4dGVuZHMgQ29udGVudE91dGxpbmVQYWdlIHsNCisJCQkJQE92ZXJyaWRlDQorCQkJCXB1YmxpYyB2b2lkIGNyZWF0ZUNvbnRyb2woQ29tcG9zaXRlIHBhcmVudCkgew0KKwkJCQkJc3VwZXIuY3JlYXRlQ29udHJvbChwYXJlbnQpOw0KKwkJCQkJY29udGVudE91dGxpbmVWaWV3ZXIgPSBnZXRUcmVlVmlld2VyKCk7DQorCQkJCQljb250ZW50T3V0bGluZVZpZXdlci5hZGRTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIodGhpcyk7DQorDQorCQkJCQkvLyBTZXQgdXAgdGhlIHRyZWUgdmlld2VyLg0KKwkJCQkJLy8NCisJCQkJCWNvbnRlbnRPdXRsaW5lVmlld2VyLnNldENvbnRlbnRQcm92aWRlcihuZXcgQWRhcHRlckZhY3RvcnlDb250ZW50UHJvdmlkZXIoYWRhcHRlckZhY3RvcnkpKTsNCisJCQkJCWNvbnRlbnRPdXRsaW5lVmlld2VyLnNldExhYmVsUHJvdmlkZXIobmV3IEFkYXB0ZXJGYWN0b3J5TGFiZWxQcm92aWRlcihhZGFwdGVyRmFjdG9yeSkpOw0KKwkJCQkJY29udGVudE91dGxpbmVWaWV3ZXIuc2V0SW5wdXQoZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpKTsNCisNCisJCQkJCS8vIE1ha2Ugc3VyZSBvdXIgcG9wdXBzIHdvcmsuDQorCQkJCQkvLw0KKwkJCQkJY3JlYXRlQ29udGV4dE1lbnVGb3IoY29udGVudE91dGxpbmVWaWV3ZXIpOw0KKw0KKwkJCQkJaWYgKCFlZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkuZ2V0UmVzb3VyY2VzKCkuaXNFbXB0eSgpKSB7DQorCQkJCQkgIC8vIFNlbGVjdCB0aGUgcm9vdCBvYmplY3QgaW4gdGhlIHZpZXcuDQorCQkJCQkgIC8vDQorCQkJCQkgIGNvbnRlbnRPdXRsaW5lVmlld2VyLnNldFNlbGVjdGlvbihuZXcgU3RydWN0dXJlZFNlbGVjdGlvbihlZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkuZ2V0UmVzb3VyY2VzKCkuZ2V0KDApKSwgdHJ1ZSk7DQorCQkJCQl9DQorCQkJCX0NCisNCisJCQkJQE92ZXJyaWRlDQorCQkJCXB1YmxpYyB2b2lkIG1ha2VDb250cmlidXRpb25zKElNZW51TWFuYWdlciBtZW51TWFuYWdlciwgSVRvb2xCYXJNYW5hZ2VyIHRvb2xCYXJNYW5hZ2VyLCBJU3RhdHVzTGluZU1hbmFnZXIgc3RhdHVzTGluZU1hbmFnZXIpIHsNCisJCQkJCXN1cGVyLm1ha2VDb250cmlidXRpb25zKG1lbnVNYW5hZ2VyLCB0b29sQmFyTWFuYWdlciwgc3RhdHVzTGluZU1hbmFnZXIpOw0KKwkJCQkJY29udGVudE91dGxpbmVTdGF0dXNMaW5lTWFuYWdlciA9IHN0YXR1c0xpbmVNYW5hZ2VyOw0KKwkJCQl9DQorDQorCQkJCUBPdmVycmlkZQ0KKwkJCQlwdWJsaWMgdm9pZCBzZXRBY3Rpb25CYXJzKElBY3Rpb25CYXJzIGFjdGlvbkJhcnMpIHsNCisJCQkJCXN1cGVyLnNldEFjdGlvbkJhcnMoYWN0aW9uQmFycyk7DQorCQkJCQlnZXRBY3Rpb25CYXJDb250cmlidXRvcigpLnNoYXJlR2xvYmFsQWN0aW9ucyh0aGlzLCBhY3Rpb25CYXJzKTsNCisJCQkJfQ0KKwkJCX0NCisNCisJCQljb250ZW50T3V0bGluZVBhZ2UgPSBuZXcgTXlDb250ZW50T3V0bGluZVBhZ2UoKTsNCisNCisJCQkvLyBMaXN0ZW4gdG8gc2VsZWN0aW9uIHNvIHRoYXQgd2UgY2FuIGhhbmRsZSBpdCBpcyBhIHNwZWNpYWwgd2F5Lg0KKwkJCS8vDQorCQkJY29udGVudE91dGxpbmVQYWdlLmFkZFNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcg0KKwkJCQkobmV3IElTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIoKSB7DQorCQkJCQkgLy8gVGhpcyBlbnN1cmVzIHRoYXQgd2UgaGFuZGxlIHNlbGVjdGlvbnMgY29ycmVjdGx5Lg0KKwkJCQkJIC8vDQorCQkJCQkgcHVibGljIHZvaWQgc2VsZWN0aW9uQ2hhbmdlZChTZWxlY3Rpb25DaGFuZ2VkRXZlbnQgZXZlbnQpIHsNCisJCQkJCQkgaGFuZGxlQ29udGVudE91dGxpbmVTZWxlY3Rpb24oZXZlbnQuZ2V0U2VsZWN0aW9uKCkpOw0KKwkJCQkJIH0NCisJCQkJIH0pOw0KKwkJfQ0KKw0KKwkJcmV0dXJuIGNvbnRlbnRPdXRsaW5lUGFnZTsNCisJfQ0KKw0KKwkvKioNCisJICogVGhpcyBhY2Nlc3NlcyBhIGNhY2hlZCB2ZXJzaW9uIG9mIHRoZSBwcm9wZXJ0eSBzaGVldC4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBJUHJvcGVydHlTaGVldFBhZ2UgZ2V0UHJvcGVydHlTaGVldFBhZ2UoKSB7DQorCQlpZiAocHJvcGVydHlTaGVldFBhZ2UgPT0gbnVsbCkgew0KKwkJCXByb3BlcnR5U2hlZXRQYWdlID0NCisJCQkJbmV3IEV4dGVuZGVkUHJvcGVydHlTaGVldFBhZ2UoZWRpdGluZ0RvbWFpbikgew0KKwkJCQkJQE92ZXJyaWRlDQorCQkJCQlwdWJsaWMgdm9pZCBzZXRTZWxlY3Rpb25Ub1ZpZXdlcihMaXN0PD8+IHNlbGVjdGlvbikgew0KKwkJCQkJCUdsb2JhbGluZmx1ZW56YW1vZGVsRWRpdG9yLnRoaXMuc2V0U2VsZWN0aW9uVG9WaWV3ZXIoc2VsZWN0aW9uKTsNCisJCQkJCQlHbG9iYWxpbmZsdWVuemFtb2RlbEVkaXRvci50aGlzLnNldEZvY3VzKCk7DQorCQkJCQl9DQorDQorCQkJCQlAT3ZlcnJpZGUNCisJCQkJCXB1YmxpYyB2b2lkIHNldEFjdGlvbkJhcnMoSUFjdGlvbkJhcnMgYWN0aW9uQmFycykgew0KKwkJCQkJCXN1cGVyLnNldEFjdGlvbkJhcnMoYWN0aW9uQmFycyk7DQorCQkJCQkJZ2V0QWN0aW9uQmFyQ29udHJpYnV0b3IoKS5zaGFyZUdsb2JhbEFjdGlvbnModGhpcywgYWN0aW9uQmFycyk7DQorCQkJCQl9DQorCQkJCX07DQorCQkJcHJvcGVydHlTaGVldFBhZ2Uuc2V0UHJvcGVydHlTb3VyY2VQcm92aWRlcihuZXcgQWRhcHRlckZhY3RvcnlDb250ZW50UHJvdmlkZXIoYWRhcHRlckZhY3RvcnkpKTsNCisJCX0NCisNCisJCXJldHVybiBwcm9wZXJ0eVNoZWV0UGFnZTsNCisJfQ0KKw0KKwkvKioNCisJICogVGhpcyBkZWFscyB3aXRoIGhvdyB3ZSB3YW50IHNlbGVjdGlvbiBpbiB0aGUgb3V0bGluZXIgdG8gYWZmZWN0IHRoZSBvdGhlciB2aWV3cy4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyB2b2lkIGhhbmRsZUNvbnRlbnRPdXRsaW5lU2VsZWN0aW9uKElTZWxlY3Rpb24gc2VsZWN0aW9uKSB7DQorCQlpZiAoY3VycmVudFZpZXdlclBhbmUgIT0gbnVsbCAmJiAhc2VsZWN0aW9uLmlzRW1wdHkoKSAmJiBzZWxlY3Rpb24gaW5zdGFuY2VvZiBJU3RydWN0dXJlZFNlbGVjdGlvbikgew0KKwkJCUl0ZXJhdG9yPD8+IHNlbGVjdGVkRWxlbWVudHMgPSAoKElTdHJ1Y3R1cmVkU2VsZWN0aW9uKXNlbGVjdGlvbikuaXRlcmF0b3IoKTsNCisJCQlpZiAoc2VsZWN0ZWRFbGVtZW50cy5oYXNOZXh0KCkpIHsNCisJCQkJLy8gR2V0IHRoZSBmaXJzdCBzZWxlY3RlZCBlbGVtZW50Lg0KKwkJCQkvLw0KKwkJCQlPYmplY3Qgc2VsZWN0ZWRFbGVtZW50ID0gc2VsZWN0ZWRFbGVtZW50cy5uZXh0KCk7DQorDQorCQkJCS8vIElmIGl0J3MgdGhlIHNlbGVjdGlvbiB2aWV3ZXIsIHRoZW4gd2Ugd2FudCBpdCB0byBzZWxlY3QgdGhlIHNhbWUgc2VsZWN0aW9uIGFzIHRoaXMgc2VsZWN0aW9uLg0KKwkJCQkvLw0KKwkJCQlpZiAoY3VycmVudFZpZXdlclBhbmUuZ2V0Vmlld2VyKCkgPT0gc2VsZWN0aW9uVmlld2VyKSB7DQorCQkJCQlBcnJheUxpc3Q8T2JqZWN0PiBzZWxlY3Rpb25MaXN0ID0gbmV3IEFycmF5TGlzdDxPYmplY3Q+KCk7DQorCQkJCQlzZWxlY3Rpb25MaXN0LmFkZChzZWxlY3RlZEVsZW1lbnQpOw0KKwkJCQkJd2hpbGUgKHNlbGVjdGVkRWxlbWVudHMuaGFzTmV4dCgpKSB7DQorCQkJCQkJc2VsZWN0aW9uTGlzdC5hZGQoc2VsZWN0ZWRFbGVtZW50cy5uZXh0KCkpOw0KKwkJCQkJfQ0KKw0KKwkJCQkJLy8gU2V0IHRoZSBzZWxlY3Rpb24gdG8gdGhlIHdpZGdldC4NCisJCQkJCS8vDQorCQkJCQlzZWxlY3Rpb25WaWV3ZXIuc2V0U2VsZWN0aW9uKG5ldyBTdHJ1Y3R1cmVkU2VsZWN0aW9uKHNlbGVjdGlvbkxpc3QpKTsNCisJCQkJfQ0KKwkJCQllbHNlIHsNCisJCQkJCS8vIFNldCB0aGUgaW5wdXQgdG8gdGhlIHdpZGdldC4NCisJCQkJCS8vDQorCQkJCQlpZiAoY3VycmVudFZpZXdlclBhbmUuZ2V0Vmlld2VyKCkuZ2V0SW5wdXQoKSAhPSBzZWxlY3RlZEVsZW1lbnQpIHsNCisJCQkJCQljdXJyZW50Vmlld2VyUGFuZS5nZXRWaWV3ZXIoKS5zZXRJbnB1dChzZWxlY3RlZEVsZW1lbnQpOw0KKwkJCQkJCWN1cnJlbnRWaWV3ZXJQYW5lLnNldFRpdGxlKHNlbGVjdGVkRWxlbWVudCk7DQorCQkJCQl9DQorCQkJCX0NCisJCQl9DQorCQl9DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgaXMgZm9yIGltcGxlbWVudGluZyB7QGxpbmsgSUVkaXRvclBhcnR9IGFuZCBzaW1wbHkgdGVzdHMgdGhlIGNvbW1hbmQgc3RhY2suDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlAT3ZlcnJpZGUNCisJcHVibGljIGJvb2xlYW4gaXNEaXJ0eSgpIHsNCisJCXJldHVybiAoKEJhc2ljQ29tbWFuZFN0YWNrKWVkaXRpbmdEb21haW4uZ2V0Q29tbWFuZFN0YWNrKCkpLmlzU2F2ZU5lZWRlZCgpOw0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIGlzIGZvciBpbXBsZW1lbnRpbmcge0BsaW5rIElFZGl0b3JQYXJ0fSBhbmQgc2ltcGx5IHNhdmVzIHRoZSBtb2RlbCBmaWxlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJQE92ZXJyaWRlDQorCXB1YmxpYyB2b2lkIGRvU2F2ZShJUHJvZ3Jlc3NNb25pdG9yIHByb2dyZXNzTW9uaXRvcikgew0KKwkJLy8gU2F2ZSBvbmx5IHJlc291cmNlcyB0aGF0IGhhdmUgYWN0dWFsbHkgY2hhbmdlZC4NCisJCS8vDQorCQlmaW5hbCBNYXA8T2JqZWN0LCBPYmplY3Q+IHNhdmVPcHRpb25zID0gbmV3IEhhc2hNYXA8T2JqZWN0LCBPYmplY3Q+KCk7DQorCQlzYXZlT3B0aW9ucy5wdXQoUmVzb3VyY2UuT1BUSU9OX1NBVkVfT05MWV9JRl9DSEFOR0VELCBSZXNvdXJjZS5PUFRJT05fU0FWRV9PTkxZX0lGX0NIQU5HRURfTUVNT1JZX0JVRkZFUik7DQorDQorCQkvLyBEbyB0aGUgd29yayB3aXRoaW4gYW4gb3BlcmF0aW9uIGJlY2F1c2UgdGhpcyBpcyBhIGxvbmcgcnVubmluZyBhY3Rpdml0eSB0aGF0IG1vZGlmaWVzIHRoZSB3b3JrYmVuY2guDQorCQkvLw0KKwkJV29ya3NwYWNlTW9kaWZ5T3BlcmF0aW9uIG9wZXJhdGlvbiA9DQorCQkJbmV3IFdvcmtzcGFjZU1vZGlmeU9wZXJhdGlvbigpIHsNCisJCQkJLy8gVGhpcyBpcyB0aGUgbWV0aG9kIHRoYXQgZ2V0cyBpbnZva2VkIHdoZW4gdGhlIG9wZXJhdGlvbiBydW5zLg0KKwkJCQkvLw0KKwkJCQlAT3ZlcnJpZGUNCisJCQkJcHVibGljIHZvaWQgZXhlY3V0ZShJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IpIHsNCisJCQkJCS8vIFNhdmUgdGhlIHJlc291cmNlcyB0byB0aGUgZmlsZSBzeXN0ZW0uDQorCQkJCQkvLw0KKwkJCQkJYm9vbGVhbiBmaXJzdCA9IHRydWU7DQorCQkJCQlmb3IgKFJlc291cmNlIHJlc291cmNlIDogZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpLmdldFJlc291cmNlcygpKSB7DQorCQkJCQkJaWYgKChmaXJzdCB8fCAhcmVzb3VyY2UuZ2V0Q29udGVudHMoKS5pc0VtcHR5KCkgfHwgaXNQZXJzaXN0ZWQocmVzb3VyY2UpKSAmJiAhZWRpdGluZ0RvbWFpbi5pc1JlYWRPbmx5KHJlc291cmNlKSkgew0KKwkJCQkJCQl0cnkgew0KKwkJCQkJCQkJbG9uZyB0aW1lU3RhbXAgPSByZXNvdXJjZS5nZXRUaW1lU3RhbXAoKTsNCisJCQkJCQkJCXJlc291cmNlLnNhdmUoc2F2ZU9wdGlvbnMpOw0KKwkJCQkJCQkJaWYgKHJlc291cmNlLmdldFRpbWVTdGFtcCgpICE9IHRpbWVTdGFtcCkgew0KKwkJCQkJCQkJCXNhdmVkUmVzb3VyY2VzLmFkZChyZXNvdXJjZSk7DQorCQkJCQkJCQl9DQorCQkJCQkJCX0NCisJCQkJCQkJY2F0Y2ggKEV4Y2VwdGlvbiBleGNlcHRpb24pIHsNCisJCQkJCQkJCXJlc291cmNlVG9EaWFnbm9zdGljTWFwLnB1dChyZXNvdXJjZSwgYW5hbHl6ZVJlc291cmNlUHJvYmxlbXMocmVzb3VyY2UsIGV4Y2VwdGlvbikpOw0KKwkJCQkJCQl9DQorCQkJCQkJCWZpcnN0ID0gZmFsc2U7DQorCQkJCQkJfQ0KKwkJCQkJfQ0KKwkJCQl9DQorCQkJfTsNCisNCisJCXVwZGF0ZVByb2JsZW1JbmRpY2F0aW9uID0gZmFsc2U7DQorCQl0cnkgew0KKwkJCS8vIFRoaXMgcnVucyB0aGUgb3B0aW9ucywgYW5kIHNob3dzIHByb2dyZXNzLg0KKwkJCS8vDQorCQkJbmV3IFByb2dyZXNzTW9uaXRvckRpYWxvZyhnZXRTaXRlKCkuZ2V0U2hlbGwoKSkucnVuKHRydWUsIGZhbHNlLCBvcGVyYXRpb24pOw0KKw0KKwkJCS8vIFJlZnJlc2ggdGhlIG5lY2Vzc2FyeSBzdGF0ZS4NCisJCQkvLw0KKwkJCSgoQmFzaWNDb21tYW5kU3RhY2spZWRpdGluZ0RvbWFpbi5nZXRDb21tYW5kU3RhY2soKSkuc2F2ZUlzRG9uZSgpOw0KKwkJCWZpcmVQcm9wZXJ0eUNoYW5nZShJRWRpdG9yUGFydC5QUk9QX0RJUlRZKTsNCisJCX0NCisJCWNhdGNoIChFeGNlcHRpb24gZXhjZXB0aW9uKSB7DQorCQkJLy8gU29tZXRoaW5nIHdlbnQgd3JvbmcgdGhhdCBzaG91bGRuJ3QuDQorCQkJLy8NCisJCQlHbG9iYWxpbmZsdWVuemFtb2RlbEVkaXRvclBsdWdpbi5JTlNUQU5DRS5sb2coZXhjZXB0aW9uKTsNCisJCX0NCisJCXVwZGF0ZVByb2JsZW1JbmRpY2F0aW9uID0gdHJ1ZTsNCisJCXVwZGF0ZVByb2JsZW1JbmRpY2F0aW9uKCk7DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgcmV0dXJucyB3aGV0aGVyIHNvbWV0aGluZyBoYXMgYmVlbiBwZXJzaXN0ZWQgdG8gdGhlIFVSSSBvZiB0aGUgc3BlY2lmaWVkIHJlc291cmNlLg0KKwkgKiBUaGUgaW1wbGVtZW50YXRpb24gdXNlcyB0aGUgVVJJIGNvbnZlcnRlciBmcm9tIHRoZSBlZGl0b3IncyByZXNvdXJjZSBzZXQgdG8gdHJ5IHRvIG9wZW4gYW4gaW5wdXQgc3RyZWFtLiANCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCBib29sZWFuIGlzUGVyc2lzdGVkKFJlc291cmNlIHJlc291cmNlKSB7DQorCQlib29sZWFuIHJlc3VsdCA9IGZhbHNlOw0KKwkJdHJ5IHsNCisJCQlJbnB1dFN0cmVhbSBzdHJlYW0gPSBlZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkuZ2V0VVJJQ29udmVydGVyKCkuY3JlYXRlSW5wdXRTdHJlYW0ocmVzb3VyY2UuZ2V0VVJJKCkpOw0KKwkJCWlmIChzdHJlYW0gIT0gbnVsbCkgew0KKwkJCQlyZXN1bHQgPSB0cnVlOw0KKwkJCQlzdHJlYW0uY2xvc2UoKTsNCisJCQl9DQorCQl9DQorCQljYXRjaCAoSU9FeGNlcHRpb24gZSkgew0KKwkJCS8vIElnbm9yZQ0KKwkJfQ0KKwkJcmV0dXJuIHJlc3VsdDsNCisJfQ0KKw0KKwkvKioNCisJICogVGhpcyBhbHdheXMgcmV0dXJucyB0cnVlIGJlY2F1c2UgaXQgaXMgbm90IGN1cnJlbnRseSBzdXBwb3J0ZWQuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlAT3ZlcnJpZGUNCisJcHVibGljIGJvb2xlYW4gaXNTYXZlQXNBbGxvd2VkKCkgew0KKwkJcmV0dXJuIHRydWU7DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgYWxzbyBjaGFuZ2VzIHRoZSBlZGl0b3IncyBpbnB1dC4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCUBPdmVycmlkZQ0KKwlwdWJsaWMgdm9pZCBkb1NhdmVBcygpIHsNCisJCVNhdmVBc0RpYWxvZyBzYXZlQXNEaWFsb2cgPSBuZXcgU2F2ZUFzRGlhbG9nKGdldFNpdGUoKS5nZXRTaGVsbCgpKTsNCisJCXNhdmVBc0RpYWxvZy5vcGVuKCk7DQorCQlJUGF0aCBwYXRoID0gc2F2ZUFzRGlhbG9nLmdldFJlc3VsdCgpOw0KKwkJaWYgKHBhdGggIT0gbnVsbCkgew0KKwkJCUlGaWxlIGZpbGUgPSBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuZ2V0Um9vdCgpLmdldEZpbGUocGF0aCk7DQorCQkJaWYgKGZpbGUgIT0gbnVsbCkgew0KKwkJCQlkb1NhdmVBcyhVUkkuY3JlYXRlUGxhdGZvcm1SZXNvdXJjZVVSSShmaWxlLmdldEZ1bGxQYXRoKCkudG9TdHJpbmcoKSwgdHJ1ZSksIG5ldyBGaWxlRWRpdG9ySW5wdXQoZmlsZSkpOw0KKwkJCX0NCisJCX0NCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCB2b2lkIGRvU2F2ZUFzKFVSSSB1cmksIElFZGl0b3JJbnB1dCBlZGl0b3JJbnB1dCkgew0KKwkJKGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKS5nZXRSZXNvdXJjZXMoKS5nZXQoMCkpLnNldFVSSSh1cmkpOw0KKwkJc2V0SW5wdXRXaXRoTm90aWZ5KGVkaXRvcklucHV0KTsNCisJCXNldFBhcnROYW1lKGVkaXRvcklucHV0LmdldE5hbWUoKSk7DQorCQlJUHJvZ3Jlc3NNb25pdG9yIHByb2dyZXNzTW9uaXRvciA9DQorCQkJZ2V0QWN0aW9uQmFycygpLmdldFN0YXR1c0xpbmVNYW5hZ2VyKCkgIT0gbnVsbCA/DQorCQkJCWdldEFjdGlvbkJhcnMoKS5nZXRTdGF0dXNMaW5lTWFuYWdlcigpLmdldFByb2dyZXNzTW9uaXRvcigpIDoNCisJCQkJbmV3IE51bGxQcm9ncmVzc01vbml0b3IoKTsNCisJCWRvU2F2ZShwcm9ncmVzc01vbml0b3IpOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIHZvaWQgZ290b01hcmtlcihJTWFya2VyIG1hcmtlcikgew0KKwkJdHJ5IHsNCisJCQlpZiAobWFya2VyLmdldFR5cGUoKS5lcXVhbHMoRVZhbGlkYXRvci5NQVJLRVIpKSB7DQorCQkJCVN0cmluZyB1cmlBdHRyaWJ1dGUgPSBtYXJrZXIuZ2V0QXR0cmlidXRlKEVWYWxpZGF0b3IuVVJJX0FUVFJJQlVURSwgbnVsbCk7DQorCQkJCWlmICh1cmlBdHRyaWJ1dGUgIT0gbnVsbCkgew0KKwkJCQkJVVJJIHVyaSA9IFVSSS5jcmVhdGVVUkkodXJpQXR0cmlidXRlKTsNCisJCQkJCUVPYmplY3QgZU9iamVjdCA9IGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKS5nZXRFT2JqZWN0KHVyaSwgdHJ1ZSk7DQorCQkJCQlpZiAoZU9iamVjdCAhPSBudWxsKSB7DQorCQkJCQkgIHNldFNlbGVjdGlvblRvVmlld2VyKENvbGxlY3Rpb25zLnNpbmdsZXRvbihlZGl0aW5nRG9tYWluLmdldFdyYXBwZXIoZU9iamVjdCkpKTsNCisJCQkJCX0NCisJCQkJfQ0KKwkJCX0NCisJCX0NCisJCWNhdGNoIChDb3JlRXhjZXB0aW9uIGV4Y2VwdGlvbikgew0KKwkJCUdsb2JhbGluZmx1ZW56YW1vZGVsRWRpdG9yUGx1Z2luLklOU1RBTkNFLmxvZyhleGNlcHRpb24pOw0KKwkJfQ0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIGlzIGNhbGxlZCBkdXJpbmcgc3RhcnR1cC4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCUBPdmVycmlkZQ0KKwlwdWJsaWMgdm9pZCBpbml0KElFZGl0b3JTaXRlIHNpdGUsIElFZGl0b3JJbnB1dCBlZGl0b3JJbnB1dCkgew0KKwkJc2V0U2l0ZShzaXRlKTsNCisJCXNldElucHV0V2l0aE5vdGlmeShlZGl0b3JJbnB1dCk7DQorCQlzZXRQYXJ0TmFtZShlZGl0b3JJbnB1dC5nZXROYW1lKCkpOw0KKwkJc2l0ZS5zZXRTZWxlY3Rpb25Qcm92aWRlcih0aGlzKTsNCisJCXNpdGUuZ2V0UGFnZSgpLmFkZFBhcnRMaXN0ZW5lcihwYXJ0TGlzdGVuZXIpOw0KKwkJUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmFkZFJlc291cmNlQ2hhbmdlTGlzdGVuZXIocmVzb3VyY2VDaGFuZ2VMaXN0ZW5lciwgSVJlc291cmNlQ2hhbmdlRXZlbnQuUE9TVF9DSEFOR0UpOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJQE92ZXJyaWRlDQorCXB1YmxpYyB2b2lkIHNldEZvY3VzKCkgew0KKwkJaWYgKGN1cnJlbnRWaWV3ZXJQYW5lICE9IG51bGwpIHsNCisJCQljdXJyZW50Vmlld2VyUGFuZS5zZXRGb2N1cygpOw0KKwkJfQ0KKwkJZWxzZSB7DQorCQkJZ2V0Q29udHJvbChnZXRBY3RpdmVQYWdlKCkpLnNldEZvY3VzKCk7DQorCQl9DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgaW1wbGVtZW50cyB7QGxpbmsgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uUHJvdmlkZXJ9Lg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIHZvaWQgYWRkU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyKElTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIgbGlzdGVuZXIpIHsNCisJCXNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcnMuYWRkKGxpc3RlbmVyKTsNCisJfQ0KKw0KKwkvKioNCisJICogVGhpcyBpbXBsZW1lbnRzIHtAbGluayBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb25Qcm92aWRlcn0uDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgdm9pZCByZW1vdmVTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIoSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lciBsaXN0ZW5lcikgew0KKwkJc2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVycy5yZW1vdmUobGlzdGVuZXIpOw0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIGltcGxlbWVudHMge0BsaW5rIG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvblByb3ZpZGVyfSB0byByZXR1cm4gdGhpcyBlZGl0b3IncyBvdmVyYWxsIHNlbGVjdGlvbi4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBJU2VsZWN0aW9uIGdldFNlbGVjdGlvbigpIHsNCisJCXJldHVybiBlZGl0b3JTZWxlY3Rpb247DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgaW1wbGVtZW50cyB7QGxpbmsgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uUHJvdmlkZXJ9IHRvIHNldCB0aGlzIGVkaXRvcidzIG92ZXJhbGwgc2VsZWN0aW9uLg0KKwkgKiBDYWxsaW5nIHRoaXMgcmVzdWx0IHdpbGwgbm90aWZ5IHRoZSBsaXN0ZW5lcnMuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgdm9pZCBzZXRTZWxlY3Rpb24oSVNlbGVjdGlvbiBzZWxlY3Rpb24pIHsNCisJCWVkaXRvclNlbGVjdGlvbiA9IHNlbGVjdGlvbjsNCisNCisJCWZvciAoSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lciBsaXN0ZW5lciA6IHNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcnMpIHsNCisJCQlsaXN0ZW5lci5zZWxlY3Rpb25DaGFuZ2VkKG5ldyBTZWxlY3Rpb25DaGFuZ2VkRXZlbnQodGhpcywgc2VsZWN0aW9uKSk7DQorCQl9DQorCQlzZXRTdGF0dXNMaW5lTWFuYWdlcihzZWxlY3Rpb24pOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIHZvaWQgc2V0U3RhdHVzTGluZU1hbmFnZXIoSVNlbGVjdGlvbiBzZWxlY3Rpb24pIHsNCisJCUlTdGF0dXNMaW5lTWFuYWdlciBzdGF0dXNMaW5lTWFuYWdlciA9IGN1cnJlbnRWaWV3ZXIgIT0gbnVsbCAmJiBjdXJyZW50Vmlld2VyID09IGNvbnRlbnRPdXRsaW5lVmlld2VyID8NCisJCQljb250ZW50T3V0bGluZVN0YXR1c0xpbmVNYW5hZ2VyIDogZ2V0QWN0aW9uQmFycygpLmdldFN0YXR1c0xpbmVNYW5hZ2VyKCk7DQorDQorCQlpZiAoc3RhdHVzTGluZU1hbmFnZXIgIT0gbnVsbCkgew0KKwkJCWlmIChzZWxlY3Rpb24gaW5zdGFuY2VvZiBJU3RydWN0dXJlZFNlbGVjdGlvbikgew0KKwkJCQlDb2xsZWN0aW9uPD8+IGNvbGxlY3Rpb24gPSAoKElTdHJ1Y3R1cmVkU2VsZWN0aW9uKXNlbGVjdGlvbikudG9MaXN0KCk7DQorCQkJCXN3aXRjaCAoY29sbGVjdGlvbi5zaXplKCkpIHsNCisJCQkJCWNhc2UgMDogew0KKwkJCQkJCXN0YXR1c0xpbmVNYW5hZ2VyLnNldE1lc3NhZ2UoZ2V0U3RyaW5nKCJfVUlfTm9PYmplY3RTZWxlY3RlZCIpKTsNCisJCQkJCQlicmVhazsNCisJCQkJCX0NCisJCQkJCWNhc2UgMTogew0KKwkJCQkJCVN0cmluZyB0ZXh0ID0gbmV3IEFkYXB0ZXJGYWN0b3J5SXRlbURlbGVnYXRvcihhZGFwdGVyRmFjdG9yeSkuZ2V0VGV4dChjb2xsZWN0aW9uLml0ZXJhdG9yKCkubmV4dCgpKTsNCisJCQkJCQlzdGF0dXNMaW5lTWFuYWdlci5zZXRNZXNzYWdlKGdldFN0cmluZygiX1VJX1NpbmdsZU9iamVjdFNlbGVjdGVkIiwgdGV4dCkpOw0KKwkJCQkJCWJyZWFrOw0KKwkJCQkJfQ0KKwkJCQkJZGVmYXVsdDogew0KKwkJCQkJCXN0YXR1c0xpbmVNYW5hZ2VyLnNldE1lc3NhZ2UoZ2V0U3RyaW5nKCJfVUlfTXVsdGlPYmplY3RTZWxlY3RlZCIsIEludGVnZXIudG9TdHJpbmcoY29sbGVjdGlvbi5zaXplKCkpKSk7DQorCQkJCQkJYnJlYWs7DQorCQkJCQl9DQorCQkJCX0NCisJCQl9DQorCQkJZWxzZSB7DQorCQkJCXN0YXR1c0xpbmVNYW5hZ2VyLnNldE1lc3NhZ2UoIiIpOw0KKwkJCX0NCisJCX0NCisJfQ0KKw0KKwkvKioNCisJICogVGhpcyBsb29rcyB1cCBhIHN0cmluZyBpbiB0aGUgcGx1Z2luJ3MgcGx1Z2luLnByb3BlcnRpZXMgZmlsZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByaXZhdGUgc3RhdGljIFN0cmluZyBnZXRTdHJpbmcoU3RyaW5nIGtleSkgew0KKwkJcmV0dXJuIEdsb2JhbGluZmx1ZW56YW1vZGVsRWRpdG9yUGx1Z2luLklOU1RBTkNFLmdldFN0cmluZyhrZXkpOw0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIGxvb2tzIHVwIGEgc3RyaW5nIGluIHBsdWdpbi5wcm9wZXJ0aWVzLCBtYWtpbmcgYSBzdWJzdGl0dXRpb24uDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcml2YXRlIHN0YXRpYyBTdHJpbmcgZ2V0U3RyaW5nKFN0cmluZyBrZXksIE9iamVjdCBzMSkgew0KKwkJcmV0dXJuIEdsb2JhbGluZmx1ZW56YW1vZGVsRWRpdG9yUGx1Z2luLklOU1RBTkNFLmdldFN0cmluZyhrZXksIG5ldyBPYmplY3QgW10geyBzMSB9KTsNCisJfQ0KKw0KKwkvKioNCisJICogVGhpcyBpbXBsZW1lbnRzIHtAbGluayBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSU1lbnVMaXN0ZW5lcn0gdG8gaGVscCBmaWxsIHRoZSBjb250ZXh0IG1lbnVzIHdpdGggY29udHJpYnV0aW9ucyBmcm9tIHRoZSBFZGl0IG1lbnUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgdm9pZCBtZW51QWJvdXRUb1Nob3coSU1lbnVNYW5hZ2VyIG1lbnVNYW5hZ2VyKSB7DQorCQkoKElNZW51TGlzdGVuZXIpZ2V0RWRpdG9yU2l0ZSgpLmdldEFjdGlvbkJhckNvbnRyaWJ1dG9yKCkpLm1lbnVBYm91dFRvU2hvdyhtZW51TWFuYWdlcik7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgRWRpdGluZ0RvbWFpbkFjdGlvbkJhckNvbnRyaWJ1dG9yIGdldEFjdGlvbkJhckNvbnRyaWJ1dG9yKCkgew0KKwkJcmV0dXJuIChFZGl0aW5nRG9tYWluQWN0aW9uQmFyQ29udHJpYnV0b3IpZ2V0RWRpdG9yU2l0ZSgpLmdldEFjdGlvbkJhckNvbnRyaWJ1dG9yKCk7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgSUFjdGlvbkJhcnMgZ2V0QWN0aW9uQmFycygpIHsNCisJCXJldHVybiBnZXRBY3Rpb25CYXJDb250cmlidXRvcigpLmdldEFjdGlvbkJhcnMoKTsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBBZGFwdGVyRmFjdG9yeSBnZXRBZGFwdGVyRmFjdG9yeSgpIHsNCisJCXJldHVybiBhZGFwdGVyRmFjdG9yeTsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCUBPdmVycmlkZQ0KKwlwdWJsaWMgdm9pZCBkaXNwb3NlKCkgew0KKwkJdXBkYXRlUHJvYmxlbUluZGljYXRpb24gPSBmYWxzZTsNCisNCisJCVJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5yZW1vdmVSZXNvdXJjZUNoYW5nZUxpc3RlbmVyKHJlc291cmNlQ2hhbmdlTGlzdGVuZXIpOw0KKw0KKwkJZ2V0U2l0ZSgpLmdldFBhZ2UoKS5yZW1vdmVQYXJ0TGlzdGVuZXIocGFydExpc3RlbmVyKTsNCisNCisJCWFkYXB0ZXJGYWN0b3J5LmRpc3Bvc2UoKTsNCisNCisJCWlmIChnZXRBY3Rpb25CYXJDb250cmlidXRvcigpLmdldEFjdGl2ZUVkaXRvcigpID09IHRoaXMpIHsNCisJCQlnZXRBY3Rpb25CYXJDb250cmlidXRvcigpLnNldEFjdGl2ZUVkaXRvcihudWxsKTsNCisJCX0NCisNCisJCWlmIChwcm9wZXJ0eVNoZWV0UGFnZSAhPSBudWxsKSB7DQorCQkJcHJvcGVydHlTaGVldFBhZ2UuZGlzcG9zZSgpOw0KKwkJfQ0KKw0KKwkJaWYgKGNvbnRlbnRPdXRsaW5lUGFnZSAhPSBudWxsKSB7DQorCQkJY29udGVudE91dGxpbmVQYWdlLmRpc3Bvc2UoKTsNCisJCX0NCisNCisJCXN1cGVyLmRpc3Bvc2UoKTsNCisJfQ0KKw0KKwkvKioNCisJICogUmV0dXJucyB3aGV0aGVyIHRoZSBvdXRsaW5lIHZpZXcgc2hvdWxkIGJlIHByZXNlbnRlZCB0byB0aGUgdXNlci4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCBib29sZWFuIHNob3dPdXRsaW5lVmlldygpIHsNCisJCXJldHVybiB0cnVlOw0KKwl9DQorfQ0KZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzLmdsb2JhbGluZmx1ZW56YW1vZGVsL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvZ2xvYmFsaW5mbHVlbnphbW9kZWwvcHJlc2VudGF0aW9uL0dsb2JhbGluZmx1ZW56YW1vZGVsTW9kZWxXaXphcmQuamF2YSBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzLmdsb2JhbGluZmx1ZW56YW1vZGVsL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvZ2xvYmFsaW5mbHVlbnphbW9kZWwvcHJlc2VudGF0aW9uL0dsb2JhbGluZmx1ZW56YW1vZGVsTW9kZWxXaXphcmQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MjA1NDgzCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMuZ2xvYmFsaW5mbHVlbnphbW9kZWwvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9nbG9iYWxpbmZsdWVuemFtb2RlbC9wcmVzZW50YXRpb24vR2xvYmFsaW5mbHVlbnphbW9kZWxNb2RlbFdpemFyZC5qYXZhCkBAIC0wLDAgKzEsNjEyIEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5nbG9iYWxpbmZsdWVuemFtb2RlbC5wcmVzZW50YXRpb247DQorDQorDQorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisgKiBDb3B5cmlnaHQgKGMpIDIwMDkgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuDQorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscw0KKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMA0KKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0DQorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwNCisgKg0KKyAqIENvbnRyaWJ1dG9yczoNCisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uDQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQorDQoraW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7DQoraW1wb3J0IGphdmEudXRpbC5BcnJheXM7DQoraW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOw0KK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbnM7DQoraW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOw0KK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsNCitpbXBvcnQgamF2YS51dGlsLk1hcDsNCitpbXBvcnQgamF2YS51dGlsLk1pc3NpbmdSZXNvdXJjZUV4Y2VwdGlvbjsNCitpbXBvcnQgamF2YS51dGlsLlN0cmluZ1Rva2VuaXplcjsNCisNCitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUNvbnRhaW5lcjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUZpbGU7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklGb2xkZXI7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0Ow0KK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUmVzb3VyY2U7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLlJlc291cmNlc1BsdWdpbjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQcm9ncmVzc01vbml0b3I7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QYXRoOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLkNvbW1vblBsdWdpbjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlVSSTsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzczsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzc2lmaWVyOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdDsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnJlc291cmNlLlJlc291cmNlOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUucmVzb3VyY2UuUmVzb3VyY2VTZXQ7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5yZXNvdXJjZS5pbXBsLlJlc291cmNlU2V0SW1wbDsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnhtaS5YTUxSZXNvdXJjZTsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkucHJvdmlkZXIuRXh0ZW5kZWRJbWFnZVJlZ2lzdHJ5Ow0KK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5kaWFsb2dzLk1lc3NhZ2VEaWFsb2c7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvbjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU3RydWN0dXJlZFNlbGVjdGlvbjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5TdHJ1Y3R1cmVkU2VsZWN0aW9uOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS53aXphcmQuV2l6YXJkOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS53aXphcmQuV2l6YXJkUGFnZTsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmdsb2JhbGluZmx1ZW56YW1vZGVsLkdsb2JhbGluZmx1ZW56YW1vZGVsRmFjdG9yeTsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmdsb2JhbGluZmx1ZW56YW1vZGVsLkdsb2JhbGluZmx1ZW56YW1vZGVsUGFja2FnZTsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmdsb2JhbGluZmx1ZW56YW1vZGVsLnByb3ZpZGVyLkdsb2JhbGluZmx1ZW56YW1vZGVsRWRpdFBsdWdpbjsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzLmdsb2JhbGluZmx1ZW56YW1vZGVsLnByZXNlbnRhdGlvbi5HbG9iYWxpbmZsdWVuemFtb2RlbEVkaXRvclBsdWdpbjsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LlNXVDsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5Nb2RpZnlFdmVudDsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5Nb2RpZnlMaXN0ZW5lcjsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5HcmlkRGF0YTsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5HcmlkTGF5b3V0Ow0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21ibzsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5MYWJlbDsNCitpbXBvcnQgb3JnLmVjbGlwc2UudWkuSU5ld1dpemFyZDsNCitpbXBvcnQgb3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaDsNCitpbXBvcnQgb3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaFBhZ2U7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2hQYXJ0Ow0KK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5JV29ya2JlbmNoV2luZG93Ow0KK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5QYXJ0SW5pdEV4Y2VwdGlvbjsNCitpbXBvcnQgb3JnLmVjbGlwc2UudWkuYWN0aW9ucy5Xb3Jrc3BhY2VNb2RpZnlPcGVyYXRpb247DQoraW1wb3J0IG9yZy5lY2xpcHNlLnVpLmRpYWxvZ3MuV2l6YXJkTmV3RmlsZUNyZWF0aW9uUGFnZTsNCitpbXBvcnQgb3JnLmVjbGlwc2UudWkucGFydC5GaWxlRWRpdG9ySW5wdXQ7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnVpLnBhcnQuSVNldFNlbGVjdGlvblRhcmdldDsNCisNCisNCisvKioNCisgKiBUaGlzIGlzIGEgc2ltcGxlIHdpemFyZCBmb3IgY3JlYXRpbmcgYSBuZXcgbW9kZWwgZmlsZS4NCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKyAqIEBnZW5lcmF0ZWQNCisgKi8NCitwdWJsaWMgY2xhc3MgR2xvYmFsaW5mbHVlbnphbW9kZWxNb2RlbFdpemFyZCBleHRlbmRzIFdpemFyZCBpbXBsZW1lbnRzIElOZXdXaXphcmQgew0KKwkvKioNCisJICogVGhlIHN1cHBvcnRlZCBleHRlbnNpb25zIGZvciBjcmVhdGVkIGZpbGVzLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIHN0YXRpYyBmaW5hbCBMaXN0PFN0cmluZz4gRklMRV9FWFRFTlNJT05TID0NCisJCUNvbGxlY3Rpb25zLnVubW9kaWZpYWJsZUxpc3QoQXJyYXlzLmFzTGlzdChHbG9iYWxpbmZsdWVuemFtb2RlbEVkaXRvclBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoIl9VSV9HbG9iYWxpbmZsdWVuemFtb2RlbEVkaXRvckZpbGVuYW1lRXh0ZW5zaW9ucyIpLnNwbGl0KCJcXHMqLFxccyoiKSkpOw0KKw0KKwkvKioNCisJICogQSBmb3JtYXR0ZWQgbGlzdCBvZiBzdXBwb3J0ZWQgZmlsZSBleHRlbnNpb25zLCBzdWl0YWJsZSBmb3IgZGlzcGxheS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEZPUk1BVFRFRF9GSUxFX0VYVEVOU0lPTlMgPQ0KKwkJR2xvYmFsaW5mbHVlbnphbW9kZWxFZGl0b3JQbHVnaW4uSU5TVEFOQ0UuZ2V0U3RyaW5nKCJfVUlfR2xvYmFsaW5mbHVlbnphbW9kZWxFZGl0b3JGaWxlbmFtZUV4dGVuc2lvbnMiKS5yZXBsYWNlQWxsKCJcXHMqLFxccyoiLCAiLCAiKTsNCisNCisJLyoqDQorCSAqIFRoaXMgY2FjaGVzIGFuIGluc3RhbmNlIG9mIHRoZSBtb2RlbCBwYWNrYWdlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIEdsb2JhbGluZmx1ZW56YW1vZGVsUGFja2FnZSBnbG9iYWxpbmZsdWVuemFtb2RlbFBhY2thZ2UgPSBHbG9iYWxpbmZsdWVuemFtb2RlbFBhY2thZ2UuZUlOU1RBTkNFOw0KKw0KKwkvKioNCisJICogVGhpcyBjYWNoZXMgYW4gaW5zdGFuY2Ugb2YgdGhlIG1vZGVsIGZhY3RvcnkuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgR2xvYmFsaW5mbHVlbnphbW9kZWxGYWN0b3J5IGdsb2JhbGluZmx1ZW56YW1vZGVsRmFjdG9yeSA9IGdsb2JhbGluZmx1ZW56YW1vZGVsUGFja2FnZS5nZXRHbG9iYWxpbmZsdWVuemFtb2RlbEZhY3RvcnkoKTsNCisNCisJLyoqDQorCSAqIFRoaXMgaXMgdGhlIGZpbGUgY3JlYXRpb24gcGFnZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCBHbG9iYWxpbmZsdWVuemFtb2RlbE1vZGVsV2l6YXJkTmV3RmlsZUNyZWF0aW9uUGFnZSBuZXdGaWxlQ3JlYXRpb25QYWdlOw0KKw0KKwkvKioNCisJICogVGhpcyBpcyB0aGUgaW5pdGlhbCBvYmplY3QgY3JlYXRpb24gcGFnZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCBHbG9iYWxpbmZsdWVuemFtb2RlbE1vZGVsV2l6YXJkSW5pdGlhbE9iamVjdENyZWF0aW9uUGFnZSBpbml0aWFsT2JqZWN0Q3JlYXRpb25QYWdlOw0KKw0KKwkvKioNCisJICogUmVtZW1iZXIgdGhlIHNlbGVjdGlvbiBkdXJpbmcgaW5pdGlhbGl6YXRpb24gZm9yIHBvcHVsYXRpbmcgdGhlIGRlZmF1bHQgY29udGFpbmVyLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIElTdHJ1Y3R1cmVkU2VsZWN0aW9uIHNlbGVjdGlvbjsNCisNCisJLyoqDQorCSAqIFJlbWVtYmVyIHRoZSB3b3JrYmVuY2ggZHVyaW5nIGluaXRpYWxpemF0aW9uLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIElXb3JrYmVuY2ggd29ya2JlbmNoOw0KKw0KKwkvKioNCisJICogQ2FjaGVzIHRoZSBuYW1lcyBvZiB0aGUgdHlwZXMgdGhhdCBjYW4gYmUgY3JlYXRlZCBhcyB0aGUgcm9vdCBvYmplY3QuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgTGlzdDxTdHJpbmc+IGluaXRpYWxPYmplY3ROYW1lczsNCisNCisJLyoqDQorCSAqIFRoaXMganVzdCByZWNvcmRzIHRoZSBpbmZvcm1hdGlvbi4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyB2b2lkIGluaXQoSVdvcmtiZW5jaCB3b3JrYmVuY2gsIElTdHJ1Y3R1cmVkU2VsZWN0aW9uIHNlbGVjdGlvbikgew0KKwkJdGhpcy53b3JrYmVuY2ggPSB3b3JrYmVuY2g7DQorCQl0aGlzLnNlbGVjdGlvbiA9IHNlbGVjdGlvbjsNCisJCXNldFdpbmRvd1RpdGxlKEdsb2JhbGluZmx1ZW56YW1vZGVsRWRpdG9yUGx1Z2luLklOU1RBTkNFLmdldFN0cmluZygiX1VJX1dpemFyZF9sYWJlbCIpKTsNCisJCXNldERlZmF1bHRQYWdlSW1hZ2VEZXNjcmlwdG9yKEV4dGVuZGVkSW1hZ2VSZWdpc3RyeS5JTlNUQU5DRS5nZXRJbWFnZURlc2NyaXB0b3IoR2xvYmFsaW5mbHVlbnphbW9kZWxFZGl0b3JQbHVnaW4uSU5TVEFOQ0UuZ2V0SW1hZ2UoImZ1bGwvd2l6YmFuL05ld0dsb2JhbGluZmx1ZW56YW1vZGVsIikpKTsNCisJfQ0KKw0KKwkvKioNCisJICogUmV0dXJucyB0aGUgbmFtZXMgb2YgdGhlIHR5cGVzIHRoYXQgY2FuIGJlIGNyZWF0ZWQgYXMgdGhlIHJvb3Qgb2JqZWN0Lg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIENvbGxlY3Rpb248U3RyaW5nPiBnZXRJbml0aWFsT2JqZWN0TmFtZXMoKSB7DQorCQlpZiAoaW5pdGlhbE9iamVjdE5hbWVzID09IG51bGwpIHsNCisJCQlpbml0aWFsT2JqZWN0TmFtZXMgPSBuZXcgQXJyYXlMaXN0PFN0cmluZz4oKTsNCisJCQlmb3IgKEVDbGFzc2lmaWVyIGVDbGFzc2lmaWVyIDogZ2xvYmFsaW5mbHVlbnphbW9kZWxQYWNrYWdlLmdldEVDbGFzc2lmaWVycygpKSB7DQorCQkJCWlmIChlQ2xhc3NpZmllciBpbnN0YW5jZW9mIEVDbGFzcykgew0KKwkJCQkJRUNsYXNzIGVDbGFzcyA9IChFQ2xhc3MpZUNsYXNzaWZpZXI7DQorCQkJCQlpZiAoIWVDbGFzcy5pc0Fic3RyYWN0KCkpIHsNCisJCQkJCQlpbml0aWFsT2JqZWN0TmFtZXMuYWRkKGVDbGFzcy5nZXROYW1lKCkpOw0KKwkJCQkJfQ0KKwkJCQl9DQorCQkJfQ0KKwkJCUNvbGxlY3Rpb25zLnNvcnQoaW5pdGlhbE9iamVjdE5hbWVzLCBDb21tb25QbHVnaW4uSU5TVEFOQ0UuZ2V0Q29tcGFyYXRvcigpKTsNCisJCX0NCisJCXJldHVybiBpbml0aWFsT2JqZWN0TmFtZXM7DQorCX0NCisNCisJLyoqDQorCSAqIENyZWF0ZSBhIG5ldyBtb2RlbC4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCBFT2JqZWN0IGNyZWF0ZUluaXRpYWxNb2RlbCgpIHsNCisJCUVDbGFzcyBlQ2xhc3MgPSAoRUNsYXNzKWdsb2JhbGluZmx1ZW56YW1vZGVsUGFja2FnZS5nZXRFQ2xhc3NpZmllcihpbml0aWFsT2JqZWN0Q3JlYXRpb25QYWdlLmdldEluaXRpYWxPYmplY3ROYW1lKCkpOw0KKwkJRU9iamVjdCByb290T2JqZWN0ID0gZ2xvYmFsaW5mbHVlbnphbW9kZWxGYWN0b3J5LmNyZWF0ZShlQ2xhc3MpOw0KKwkJcmV0dXJuIHJvb3RPYmplY3Q7DQorCX0NCisNCisJLyoqDQorCSAqIERvIHRoZSB3b3JrIGFmdGVyIGV2ZXJ5dGhpbmcgaXMgc3BlY2lmaWVkLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJQE92ZXJyaWRlDQorCXB1YmxpYyBib29sZWFuIHBlcmZvcm1GaW5pc2goKSB7DQorCQl0cnkgew0KKwkJCS8vIFJlbWVtYmVyIHRoZSBmaWxlLg0KKwkJCS8vDQorCQkJZmluYWwgSUZpbGUgbW9kZWxGaWxlID0gZ2V0TW9kZWxGaWxlKCk7DQorDQorCQkJLy8gRG8gdGhlIHdvcmsgd2l0aGluIGFuIG9wZXJhdGlvbi4NCisJCQkvLw0KKwkJCVdvcmtzcGFjZU1vZGlmeU9wZXJhdGlvbiBvcGVyYXRpb24gPQ0KKwkJCQluZXcgV29ya3NwYWNlTW9kaWZ5T3BlcmF0aW9uKCkgew0KKwkJCQkJQE92ZXJyaWRlDQorCQkJCQlwcm90ZWN0ZWQgdm9pZCBleGVjdXRlKElQcm9ncmVzc01vbml0b3IgcHJvZ3Jlc3NNb25pdG9yKSB7DQorCQkJCQkJdHJ5IHsNCisJCQkJCQkJLy8gQ3JlYXRlIGEgcmVzb3VyY2Ugc2V0DQorCQkJCQkJCS8vDQorCQkJCQkJCVJlc291cmNlU2V0IHJlc291cmNlU2V0ID0gbmV3IFJlc291cmNlU2V0SW1wbCgpOw0KKw0KKwkJCQkJCQkvLyBHZXQgdGhlIFVSSSBvZiB0aGUgbW9kZWwgZmlsZS4NCisJCQkJCQkJLy8NCisJCQkJCQkJVVJJIGZpbGVVUkkgPSBVUkkuY3JlYXRlUGxhdGZvcm1SZXNvdXJjZVVSSShtb2RlbEZpbGUuZ2V0RnVsbFBhdGgoKS50b1N0cmluZygpLCB0cnVlKTsNCisNCisJCQkJCQkJLy8gQ3JlYXRlIGEgcmVzb3VyY2UgZm9yIHRoaXMgZmlsZS4NCisJCQkJCQkJLy8NCisJCQkJCQkJUmVzb3VyY2UgcmVzb3VyY2UgPSByZXNvdXJjZVNldC5jcmVhdGVSZXNvdXJjZShmaWxlVVJJKTsNCisNCisJCQkJCQkJLy8gQWRkIHRoZSBpbml0aWFsIG1vZGVsIG9iamVjdCB0byB0aGUgY29udGVudHMuDQorCQkJCQkJCS8vDQorCQkJCQkJCUVPYmplY3Qgcm9vdE9iamVjdCA9IGNyZWF0ZUluaXRpYWxNb2RlbCgpOw0KKwkJCQkJCQlpZiAocm9vdE9iamVjdCAhPSBudWxsKSB7DQorCQkJCQkJCQlyZXNvdXJjZS5nZXRDb250ZW50cygpLmFkZChyb290T2JqZWN0KTsNCisJCQkJCQkJfQ0KKw0KKwkJCQkJCQkvLyBTYXZlIHRoZSBjb250ZW50cyBvZiB0aGUgcmVzb3VyY2UgdG8gdGhlIGZpbGUgc3lzdGVtLg0KKwkJCQkJCQkvLw0KKwkJCQkJCQlNYXA8T2JqZWN0LCBPYmplY3Q+IG9wdGlvbnMgPSBuZXcgSGFzaE1hcDxPYmplY3QsIE9iamVjdD4oKTsNCisJCQkJCQkJb3B0aW9ucy5wdXQoWE1MUmVzb3VyY2UuT1BUSU9OX0VOQ09ESU5HLCBpbml0aWFsT2JqZWN0Q3JlYXRpb25QYWdlLmdldEVuY29kaW5nKCkpOw0KKwkJCQkJCQlyZXNvdXJjZS5zYXZlKG9wdGlvbnMpOw0KKwkJCQkJCX0NCisJCQkJCQljYXRjaCAoRXhjZXB0aW9uIGV4Y2VwdGlvbikgew0KKwkJCQkJCQlHbG9iYWxpbmZsdWVuemFtb2RlbEVkaXRvclBsdWdpbi5JTlNUQU5DRS5sb2coZXhjZXB0aW9uKTsNCisJCQkJCQl9DQorCQkJCQkJZmluYWxseSB7DQorCQkJCQkJCXByb2dyZXNzTW9uaXRvci5kb25lKCk7DQorCQkJCQkJfQ0KKwkJCQkJfQ0KKwkJCQl9Ow0KKw0KKwkJCWdldENvbnRhaW5lcigpLnJ1bihmYWxzZSwgZmFsc2UsIG9wZXJhdGlvbik7DQorDQorCQkJLy8gU2VsZWN0IHRoZSBuZXcgZmlsZSByZXNvdXJjZSBpbiB0aGUgY3VycmVudCB2aWV3Lg0KKwkJCS8vDQorCQkJSVdvcmtiZW5jaFdpbmRvdyB3b3JrYmVuY2hXaW5kb3cgPSB3b3JrYmVuY2guZ2V0QWN0aXZlV29ya2JlbmNoV2luZG93KCk7DQorCQkJSVdvcmtiZW5jaFBhZ2UgcGFnZSA9IHdvcmtiZW5jaFdpbmRvdy5nZXRBY3RpdmVQYWdlKCk7DQorCQkJZmluYWwgSVdvcmtiZW5jaFBhcnQgYWN0aXZlUGFydCA9IHBhZ2UuZ2V0QWN0aXZlUGFydCgpOw0KKwkJCWlmIChhY3RpdmVQYXJ0IGluc3RhbmNlb2YgSVNldFNlbGVjdGlvblRhcmdldCkgew0KKwkJCQlmaW5hbCBJU2VsZWN0aW9uIHRhcmdldFNlbGVjdGlvbiA9IG5ldyBTdHJ1Y3R1cmVkU2VsZWN0aW9uKG1vZGVsRmlsZSk7DQorCQkJCWdldFNoZWxsKCkuZ2V0RGlzcGxheSgpLmFzeW5jRXhlYw0KKwkJCQkJKG5ldyBSdW5uYWJsZSgpIHsNCisJCQkJCQkgcHVibGljIHZvaWQgcnVuKCkgew0KKwkJCQkJCQkgKChJU2V0U2VsZWN0aW9uVGFyZ2V0KWFjdGl2ZVBhcnQpLnNlbGVjdFJldmVhbCh0YXJnZXRTZWxlY3Rpb24pOw0KKwkJCQkJCSB9DQorCQkJCQkgfSk7DQorCQkJfQ0KKw0KKwkJCS8vIE9wZW4gYW4gZWRpdG9yIG9uIHRoZSBuZXcgZmlsZS4NCisJCQkvLw0KKwkJCXRyeSB7DQorCQkJCXBhZ2Uub3BlbkVkaXRvcg0KKwkJCQkJKG5ldyBGaWxlRWRpdG9ySW5wdXQobW9kZWxGaWxlKSwNCisJCQkJCSB3b3JrYmVuY2guZ2V0RWRpdG9yUmVnaXN0cnkoKS5nZXREZWZhdWx0RWRpdG9yKG1vZGVsRmlsZS5nZXRGdWxsUGF0aCgpLnRvU3RyaW5nKCkpLmdldElkKCkpOwkJCQkJIAkgDQorCQkJfQ0KKwkJCWNhdGNoIChQYXJ0SW5pdEV4Y2VwdGlvbiBleGNlcHRpb24pIHsNCisJCQkJTWVzc2FnZURpYWxvZy5vcGVuRXJyb3Iod29ya2JlbmNoV2luZG93LmdldFNoZWxsKCksIEdsb2JhbGluZmx1ZW56YW1vZGVsRWRpdG9yUGx1Z2luLklOU1RBTkNFLmdldFN0cmluZygiX1VJX09wZW5FZGl0b3JFcnJvcl9sYWJlbCIpLCBleGNlcHRpb24uZ2V0TWVzc2FnZSgpKTsNCisJCQkJcmV0dXJuIGZhbHNlOw0KKwkJCX0NCisNCisJCQlyZXR1cm4gdHJ1ZTsNCisJCX0NCisJCWNhdGNoIChFeGNlcHRpb24gZXhjZXB0aW9uKSB7DQorCQkJR2xvYmFsaW5mbHVlbnphbW9kZWxFZGl0b3JQbHVnaW4uSU5TVEFOQ0UubG9nKGV4Y2VwdGlvbik7DQorCQkJcmV0dXJuIGZhbHNlOw0KKwkJfQ0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIGlzIHRoZSBvbmUgcGFnZSBvZiB0aGUgd2l6YXJkLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIGNsYXNzIEdsb2JhbGluZmx1ZW56YW1vZGVsTW9kZWxXaXphcmROZXdGaWxlQ3JlYXRpb25QYWdlIGV4dGVuZHMgV2l6YXJkTmV3RmlsZUNyZWF0aW9uUGFnZSB7DQorCQkvKioNCisJCSAqIFBhc3MgaW4gdGhlIHNlbGVjdGlvbi4NCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJCSAqIEBnZW5lcmF0ZWQNCisJCSAqLw0KKwkJcHVibGljIEdsb2JhbGluZmx1ZW56YW1vZGVsTW9kZWxXaXphcmROZXdGaWxlQ3JlYXRpb25QYWdlKFN0cmluZyBwYWdlSWQsIElTdHJ1Y3R1cmVkU2VsZWN0aW9uIHNlbGVjdGlvbikgew0KKwkJCXN1cGVyKHBhZ2VJZCwgc2VsZWN0aW9uKTsNCisJCX0NCisNCisJCS8qKg0KKwkJICogVGhlIGZyYW1ld29yayBjYWxscyB0aGlzIHRvIHNlZSBpZiB0aGUgZmlsZSBpcyBjb3JyZWN0Lg0KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkJICogQGdlbmVyYXRlZA0KKwkJICovDQorCQlAT3ZlcnJpZGUNCisJCXByb3RlY3RlZCBib29sZWFuIHZhbGlkYXRlUGFnZSgpIHsNCisJCQlpZiAoc3VwZXIudmFsaWRhdGVQYWdlKCkpIHsNCisJCQkJU3RyaW5nIGV4dGVuc2lvbiA9IG5ldyBQYXRoKGdldEZpbGVOYW1lKCkpLmdldEZpbGVFeHRlbnNpb24oKTsNCisJCQkJaWYgKGV4dGVuc2lvbiA9PSBudWxsIHx8ICFGSUxFX0VYVEVOU0lPTlMuY29udGFpbnMoZXh0ZW5zaW9uKSkgew0KKwkJCQkJU3RyaW5nIGtleSA9IEZJTEVfRVhURU5TSU9OUy5zaXplKCkgPiAxID8gIl9XQVJOX0ZpbGVuYW1lRXh0ZW5zaW9ucyIgOiAiX1dBUk5fRmlsZW5hbWVFeHRlbnNpb24iOw0KKwkJCQkJc2V0RXJyb3JNZXNzYWdlKEdsb2JhbGluZmx1ZW56YW1vZGVsRWRpdG9yUGx1Z2luLklOU1RBTkNFLmdldFN0cmluZyhrZXksIG5ldyBPYmplY3QgW10geyBGT1JNQVRURURfRklMRV9FWFRFTlNJT05TIH0pKTsNCisJCQkJCXJldHVybiBmYWxzZTsNCisJCQkJfQ0KKwkJCQlyZXR1cm4gdHJ1ZTsNCisJCQl9DQorCQkJcmV0dXJuIGZhbHNlOw0KKwkJfQ0KKw0KKwkJLyoqDQorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCQkgKiBAZ2VuZXJhdGVkDQorCQkgKi8NCisJCXB1YmxpYyBJRmlsZSBnZXRNb2RlbEZpbGUoKSB7DQorCQkJcmV0dXJuIFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5nZXRSb290KCkuZ2V0RmlsZShnZXRDb250YWluZXJGdWxsUGF0aCgpLmFwcGVuZChnZXRGaWxlTmFtZSgpKSk7DQorCQl9DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgaXMgdGhlIHBhZ2Ugd2hlcmUgdGhlIHR5cGUgb2Ygb2JqZWN0IHRvIGNyZWF0ZSBpcyBzZWxlY3RlZC4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBjbGFzcyBHbG9iYWxpbmZsdWVuemFtb2RlbE1vZGVsV2l6YXJkSW5pdGlhbE9iamVjdENyZWF0aW9uUGFnZSBleHRlbmRzIFdpemFyZFBhZ2Ugew0KKwkJLyoqDQorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCQkgKiBAZ2VuZXJhdGVkDQorCQkgKi8NCisJCXByb3RlY3RlZCBDb21ibyBpbml0aWFsT2JqZWN0RmllbGQ7DQorDQorCQkvKioNCisJCSAqIEBnZW5lcmF0ZWQNCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJCSAqLw0KKwkJcHJvdGVjdGVkIExpc3Q8U3RyaW5nPiBlbmNvZGluZ3M7DQorDQorCQkvKioNCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJCSAqIEBnZW5lcmF0ZWQNCisJCSAqLw0KKwkJcHJvdGVjdGVkIENvbWJvIGVuY29kaW5nRmllbGQ7DQorDQorCQkvKioNCisJCSAqIFBhc3MgaW4gdGhlIHNlbGVjdGlvbi4NCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJCSAqIEBnZW5lcmF0ZWQNCisJCSAqLw0KKwkJcHVibGljIEdsb2JhbGluZmx1ZW56YW1vZGVsTW9kZWxXaXphcmRJbml0aWFsT2JqZWN0Q3JlYXRpb25QYWdlKFN0cmluZyBwYWdlSWQpIHsNCisJCQlzdXBlcihwYWdlSWQpOw0KKwkJfQ0KKw0KKwkJLyoqDQorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCQkgKiBAZ2VuZXJhdGVkDQorCQkgKi8NCisJCXB1YmxpYyB2b2lkIGNyZWF0ZUNvbnRyb2woQ29tcG9zaXRlIHBhcmVudCkgew0KKwkJCUNvbXBvc2l0ZSBjb21wb3NpdGUgPSBuZXcgQ29tcG9zaXRlKHBhcmVudCwgU1dULk5PTkUpOyB7DQorCQkJCUdyaWRMYXlvdXQgbGF5b3V0ID0gbmV3IEdyaWRMYXlvdXQoKTsNCisJCQkJbGF5b3V0Lm51bUNvbHVtbnMgPSAxOw0KKwkJCQlsYXlvdXQudmVydGljYWxTcGFjaW5nID0gMTI7DQorCQkJCWNvbXBvc2l0ZS5zZXRMYXlvdXQobGF5b3V0KTsNCisNCisJCQkJR3JpZERhdGEgZGF0YSA9IG5ldyBHcmlkRGF0YSgpOw0KKwkJCQlkYXRhLnZlcnRpY2FsQWxpZ25tZW50ID0gR3JpZERhdGEuRklMTDsNCisJCQkJZGF0YS5ncmFiRXhjZXNzVmVydGljYWxTcGFjZSA9IHRydWU7DQorCQkJCWRhdGEuaG9yaXpvbnRhbEFsaWdubWVudCA9IEdyaWREYXRhLkZJTEw7DQorCQkJCWNvbXBvc2l0ZS5zZXRMYXlvdXREYXRhKGRhdGEpOw0KKwkJCX0NCisNCisJCQlMYWJlbCBjb250YWluZXJMYWJlbCA9IG5ldyBMYWJlbChjb21wb3NpdGUsIFNXVC5MRUZUKTsNCisJCQl7DQorCQkJCWNvbnRhaW5lckxhYmVsLnNldFRleHQoR2xvYmFsaW5mbHVlbnphbW9kZWxFZGl0b3JQbHVnaW4uSU5TVEFOQ0UuZ2V0U3RyaW5nKCJfVUlfTW9kZWxPYmplY3QiKSk7DQorDQorCQkJCUdyaWREYXRhIGRhdGEgPSBuZXcgR3JpZERhdGEoKTsNCisJCQkJZGF0YS5ob3Jpem9udGFsQWxpZ25tZW50ID0gR3JpZERhdGEuRklMTDsNCisJCQkJY29udGFpbmVyTGFiZWwuc2V0TGF5b3V0RGF0YShkYXRhKTsNCisJCQl9DQorDQorCQkJaW5pdGlhbE9iamVjdEZpZWxkID0gbmV3IENvbWJvKGNvbXBvc2l0ZSwgU1dULkJPUkRFUik7DQorCQkJew0KKwkJCQlHcmlkRGF0YSBkYXRhID0gbmV3IEdyaWREYXRhKCk7DQorCQkJCWRhdGEuaG9yaXpvbnRhbEFsaWdubWVudCA9IEdyaWREYXRhLkZJTEw7DQorCQkJCWRhdGEuZ3JhYkV4Y2Vzc0hvcml6b250YWxTcGFjZSA9IHRydWU7DQorCQkJCWluaXRpYWxPYmplY3RGaWVsZC5zZXRMYXlvdXREYXRhKGRhdGEpOw0KKwkJCX0NCisNCisJCQlmb3IgKFN0cmluZyBvYmplY3ROYW1lIDogZ2V0SW5pdGlhbE9iamVjdE5hbWVzKCkpIHsNCisJCQkJaW5pdGlhbE9iamVjdEZpZWxkLmFkZChnZXRMYWJlbChvYmplY3ROYW1lKSk7DQorCQkJfQ0KKw0KKwkJCWlmIChpbml0aWFsT2JqZWN0RmllbGQuZ2V0SXRlbUNvdW50KCkgPT0gMSkgew0KKwkJCQlpbml0aWFsT2JqZWN0RmllbGQuc2VsZWN0KDApOw0KKwkJCX0NCisJCQlpbml0aWFsT2JqZWN0RmllbGQuYWRkTW9kaWZ5TGlzdGVuZXIodmFsaWRhdG9yKTsNCisNCisJCQlMYWJlbCBlbmNvZGluZ0xhYmVsID0gbmV3IExhYmVsKGNvbXBvc2l0ZSwgU1dULkxFRlQpOw0KKwkJCXsNCisJCQkJZW5jb2RpbmdMYWJlbC5zZXRUZXh0KEdsb2JhbGluZmx1ZW56YW1vZGVsRWRpdG9yUGx1Z2luLklOU1RBTkNFLmdldFN0cmluZygiX1VJX1hNTEVuY29kaW5nIikpOw0KKw0KKwkJCQlHcmlkRGF0YSBkYXRhID0gbmV3IEdyaWREYXRhKCk7DQorCQkJCWRhdGEuaG9yaXpvbnRhbEFsaWdubWVudCA9IEdyaWREYXRhLkZJTEw7DQorCQkJCWVuY29kaW5nTGFiZWwuc2V0TGF5b3V0RGF0YShkYXRhKTsNCisJCQl9DQorCQkJZW5jb2RpbmdGaWVsZCA9IG5ldyBDb21ibyhjb21wb3NpdGUsIFNXVC5CT1JERVIpOw0KKwkJCXsNCisJCQkJR3JpZERhdGEgZGF0YSA9IG5ldyBHcmlkRGF0YSgpOw0KKwkJCQlkYXRhLmhvcml6b250YWxBbGlnbm1lbnQgPSBHcmlkRGF0YS5GSUxMOw0KKwkJCQlkYXRhLmdyYWJFeGNlc3NIb3Jpem9udGFsU3BhY2UgPSB0cnVlOw0KKwkJCQllbmNvZGluZ0ZpZWxkLnNldExheW91dERhdGEoZGF0YSk7DQorCQkJfQ0KKw0KKwkJCWZvciAoU3RyaW5nIGVuY29kaW5nIDogZ2V0RW5jb2RpbmdzKCkpIHsNCisJCQkJZW5jb2RpbmdGaWVsZC5hZGQoZW5jb2RpbmcpOw0KKwkJCX0NCisNCisJCQllbmNvZGluZ0ZpZWxkLnNlbGVjdCgwKTsNCisJCQllbmNvZGluZ0ZpZWxkLmFkZE1vZGlmeUxpc3RlbmVyKHZhbGlkYXRvcik7DQorDQorCQkJc2V0UGFnZUNvbXBsZXRlKHZhbGlkYXRlUGFnZSgpKTsNCisJCQlzZXRDb250cm9sKGNvbXBvc2l0ZSk7DQorCQl9DQorDQorCQkvKioNCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJCSAqIEBnZW5lcmF0ZWQNCisJCSAqLw0KKwkJcHJvdGVjdGVkIE1vZGlmeUxpc3RlbmVyIHZhbGlkYXRvciA9DQorCQkJbmV3IE1vZGlmeUxpc3RlbmVyKCkgew0KKwkJCQlwdWJsaWMgdm9pZCBtb2RpZnlUZXh0KE1vZGlmeUV2ZW50IGUpIHsNCisJCQkJCXNldFBhZ2VDb21wbGV0ZSh2YWxpZGF0ZVBhZ2UoKSk7DQorCQkJCX0NCisJCQl9Ow0KKw0KKwkJLyoqDQorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCQkgKiBAZ2VuZXJhdGVkDQorCQkgKi8NCisJCXByb3RlY3RlZCBib29sZWFuIHZhbGlkYXRlUGFnZSgpIHsNCisJCQlyZXR1cm4gZ2V0SW5pdGlhbE9iamVjdE5hbWUoKSAhPSBudWxsICYmIGdldEVuY29kaW5ncygpLmNvbnRhaW5zKGVuY29kaW5nRmllbGQuZ2V0VGV4dCgpKTsNCisJCX0NCisNCisJCS8qKg0KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkJICogQGdlbmVyYXRlZA0KKwkJICovDQorCQlAT3ZlcnJpZGUNCisJCXB1YmxpYyB2b2lkIHNldFZpc2libGUoYm9vbGVhbiB2aXNpYmxlKSB7DQorCQkJc3VwZXIuc2V0VmlzaWJsZSh2aXNpYmxlKTsNCisJCQlpZiAodmlzaWJsZSkgew0KKwkJCQlpZiAoaW5pdGlhbE9iamVjdEZpZWxkLmdldEl0ZW1Db3VudCgpID09IDEpIHsNCisJCQkJCWluaXRpYWxPYmplY3RGaWVsZC5jbGVhclNlbGVjdGlvbigpOw0KKwkJCQkJZW5jb2RpbmdGaWVsZC5zZXRGb2N1cygpOw0KKwkJCQl9DQorCQkJCWVsc2Ugew0KKwkJCQkJZW5jb2RpbmdGaWVsZC5jbGVhclNlbGVjdGlvbigpOw0KKwkJCQkJaW5pdGlhbE9iamVjdEZpZWxkLnNldEZvY3VzKCk7DQorCQkJCX0NCisJCQl9DQorCQl9DQorDQorCQkvKioNCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJCSAqIEBnZW5lcmF0ZWQNCisJCSAqLw0KKwkJcHVibGljIFN0cmluZyBnZXRJbml0aWFsT2JqZWN0TmFtZSgpIHsNCisJCQlTdHJpbmcgbGFiZWwgPSBpbml0aWFsT2JqZWN0RmllbGQuZ2V0VGV4dCgpOw0KKw0KKwkJCWZvciAoU3RyaW5nIG5hbWUgOiBnZXRJbml0aWFsT2JqZWN0TmFtZXMoKSkgew0KKwkJCQlpZiAoZ2V0TGFiZWwobmFtZSkuZXF1YWxzKGxhYmVsKSkgew0KKwkJCQkJcmV0dXJuIG5hbWU7DQorCQkJCX0NCisJCQl9DQorCQkJcmV0dXJuIG51bGw7DQorCQl9DQorDQorCQkvKioNCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJCSAqIEBnZW5lcmF0ZWQNCisJCSAqLw0KKwkJcHVibGljIFN0cmluZyBnZXRFbmNvZGluZygpIHsNCisJCQlyZXR1cm4gZW5jb2RpbmdGaWVsZC5nZXRUZXh0KCk7DQorCQl9DQorDQorCQkvKioNCisJCSAqIFJldHVybnMgdGhlIGxhYmVsIGZvciB0aGUgc3BlY2lmaWVkIHR5cGUgbmFtZS4NCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJCSAqIEBnZW5lcmF0ZWQNCisJCSAqLw0KKwkJcHJvdGVjdGVkIFN0cmluZyBnZXRMYWJlbChTdHJpbmcgdHlwZU5hbWUpIHsNCisJCQl0cnkgew0KKwkJCQlyZXR1cm4gR2xvYmFsaW5mbHVlbnphbW9kZWxFZGl0UGx1Z2luLklOU1RBTkNFLmdldFN0cmluZygiX1VJXyIgKyB0eXBlTmFtZSArICJfdHlwZSIpOw0KKwkJCX0NCisJCQljYXRjaChNaXNzaW5nUmVzb3VyY2VFeGNlcHRpb24gbXJlKSB7DQorCQkJCUdsb2JhbGluZmx1ZW56YW1vZGVsRWRpdG9yUGx1Z2luLklOU1RBTkNFLmxvZyhtcmUpOw0KKwkJCX0NCisJCQlyZXR1cm4gdHlwZU5hbWU7DQorCQl9DQorDQorCQkvKioNCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJCSAqIEBnZW5lcmF0ZWQNCisJCSAqLw0KKwkJcHJvdGVjdGVkIENvbGxlY3Rpb248U3RyaW5nPiBnZXRFbmNvZGluZ3MoKSB7DQorCQkJaWYgKGVuY29kaW5ncyA9PSBudWxsKSB7DQorCQkJCWVuY29kaW5ncyA9IG5ldyBBcnJheUxpc3Q8U3RyaW5nPigpOw0KKwkJCQlmb3IgKFN0cmluZ1Rva2VuaXplciBzdHJpbmdUb2tlbml6ZXIgPSBuZXcgU3RyaW5nVG9rZW5pemVyKEdsb2JhbGluZmx1ZW56YW1vZGVsRWRpdG9yUGx1Z2luLklOU1RBTkNFLmdldFN0cmluZygiX1VJX1hNTEVuY29kaW5nQ2hvaWNlcyIpKTsgc3RyaW5nVG9rZW5pemVyLmhhc01vcmVUb2tlbnMoKTsgKSB7DQorCQkJCQllbmNvZGluZ3MuYWRkKHN0cmluZ1Rva2VuaXplci5uZXh0VG9rZW4oKSk7DQorCQkJCX0NCisJCQl9DQorCQkJcmV0dXJuIGVuY29kaW5nczsNCisJCX0NCisJfQ0KKw0KKwkvKioNCisJICogVGhlIGZyYW1ld29yayBjYWxscyB0aGlzIHRvIGNyZWF0ZSB0aGUgY29udGVudHMgb2YgdGhlIHdpemFyZC4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCQlAT3ZlcnJpZGUNCisJcHVibGljIHZvaWQgYWRkUGFnZXMoKSB7DQorCQkvLyBDcmVhdGUgYSBwYWdlLCBzZXQgdGhlIHRpdGxlLCBhbmQgdGhlIGluaXRpYWwgbW9kZWwgZmlsZSBuYW1lLg0KKwkJLy8NCisJCW5ld0ZpbGVDcmVhdGlvblBhZ2UgPSBuZXcgR2xvYmFsaW5mbHVlbnphbW9kZWxNb2RlbFdpemFyZE5ld0ZpbGVDcmVhdGlvblBhZ2UoIldoYXRldmVyIiwgc2VsZWN0aW9uKTsNCisJCW5ld0ZpbGVDcmVhdGlvblBhZ2Uuc2V0VGl0bGUoR2xvYmFsaW5mbHVlbnphbW9kZWxFZGl0b3JQbHVnaW4uSU5TVEFOQ0UuZ2V0U3RyaW5nKCJfVUlfR2xvYmFsaW5mbHVlbnphbW9kZWxNb2RlbFdpemFyZF9sYWJlbCIpKTsNCisJCW5ld0ZpbGVDcmVhdGlvblBhZ2Uuc2V0RGVzY3JpcHRpb24oR2xvYmFsaW5mbHVlbnphbW9kZWxFZGl0b3JQbHVnaW4uSU5TVEFOQ0UuZ2V0U3RyaW5nKCJfVUlfR2xvYmFsaW5mbHVlbnphbW9kZWxNb2RlbFdpemFyZF9kZXNjcmlwdGlvbiIpKTsNCisJCW5ld0ZpbGVDcmVhdGlvblBhZ2Uuc2V0RmlsZU5hbWUoR2xvYmFsaW5mbHVlbnphbW9kZWxFZGl0b3JQbHVnaW4uSU5TVEFOQ0UuZ2V0U3RyaW5nKCJfVUlfR2xvYmFsaW5mbHVlbnphbW9kZWxFZGl0b3JGaWxlbmFtZURlZmF1bHRCYXNlIikgKyAiLiIgKyBGSUxFX0VYVEVOU0lPTlMuZ2V0KDApKTsNCisJCWFkZFBhZ2UobmV3RmlsZUNyZWF0aW9uUGFnZSk7DQorDQorCQkvLyBUcnkgYW5kIGdldCB0aGUgcmVzb3VyY2Ugc2VsZWN0aW9uIHRvIGRldGVybWluZSBhIGN1cnJlbnQgZGlyZWN0b3J5IGZvciB0aGUgZmlsZSBkaWFsb2cuDQorCQkvLw0KKwkJaWYgKHNlbGVjdGlvbiAhPSBudWxsICYmICFzZWxlY3Rpb24uaXNFbXB0eSgpKSB7DQorCQkJLy8gR2V0IHRoZSByZXNvdXJjZS4uLg0KKwkJCS8vDQorCQkJT2JqZWN0IHNlbGVjdGVkRWxlbWVudCA9IHNlbGVjdGlvbi5pdGVyYXRvcigpLm5leHQoKTsNCisJCQlpZiAoc2VsZWN0ZWRFbGVtZW50IGluc3RhbmNlb2YgSVJlc291cmNlKSB7DQorCQkJCS8vIEdldCB0aGUgcmVzb3VyY2UgcGFyZW50LCBpZiBpdHMgYSBmaWxlLg0KKwkJCQkvLw0KKwkJCQlJUmVzb3VyY2Ugc2VsZWN0ZWRSZXNvdXJjZSA9IChJUmVzb3VyY2Upc2VsZWN0ZWRFbGVtZW50Ow0KKwkJCQlpZiAoc2VsZWN0ZWRSZXNvdXJjZS5nZXRUeXBlKCkgPT0gSVJlc291cmNlLkZJTEUpIHsNCisJCQkJCXNlbGVjdGVkUmVzb3VyY2UgPSBzZWxlY3RlZFJlc291cmNlLmdldFBhcmVudCgpOw0KKwkJCQl9DQorDQorCQkJCS8vIFRoaXMgZ2l2ZXMgdXMgYSBkaXJlY3RvcnkuLi4NCisJCQkJLy8NCisJCQkJaWYgKHNlbGVjdGVkUmVzb3VyY2UgaW5zdGFuY2VvZiBJRm9sZGVyIHx8IHNlbGVjdGVkUmVzb3VyY2UgaW5zdGFuY2VvZiBJUHJvamVjdCkgew0KKwkJCQkJLy8gU2V0IHRoaXMgZm9yIHRoZSBjb250YWluZXIuDQorCQkJCQkvLw0KKwkJCQkJbmV3RmlsZUNyZWF0aW9uUGFnZS5zZXRDb250YWluZXJGdWxsUGF0aChzZWxlY3RlZFJlc291cmNlLmdldEZ1bGxQYXRoKCkpOw0KKw0KKwkJCQkJLy8gTWFrZSB1cCBhIHVuaXF1ZSBuZXcgbmFtZSBoZXJlLg0KKwkJCQkJLy8NCisJCQkJCVN0cmluZyBkZWZhdWx0TW9kZWxCYXNlRmlsZW5hbWUgPSBHbG9iYWxpbmZsdWVuemFtb2RlbEVkaXRvclBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoIl9VSV9HbG9iYWxpbmZsdWVuemFtb2RlbEVkaXRvckZpbGVuYW1lRGVmYXVsdEJhc2UiKTsNCisJCQkJCVN0cmluZyBkZWZhdWx0TW9kZWxGaWxlbmFtZUV4dGVuc2lvbiA9IEZJTEVfRVhURU5TSU9OUy5nZXQoMCk7DQorCQkJCQlTdHJpbmcgbW9kZWxGaWxlbmFtZSA9IGRlZmF1bHRNb2RlbEJhc2VGaWxlbmFtZSArICIuIiArIGRlZmF1bHRNb2RlbEZpbGVuYW1lRXh0ZW5zaW9uOw0KKwkJCQkJZm9yIChpbnQgaSA9IDE7ICgoSUNvbnRhaW5lcilzZWxlY3RlZFJlc291cmNlKS5maW5kTWVtYmVyKG1vZGVsRmlsZW5hbWUpICE9IG51bGw7ICsraSkgew0KKwkJCQkJCW1vZGVsRmlsZW5hbWUgPSBkZWZhdWx0TW9kZWxCYXNlRmlsZW5hbWUgKyBpICsgIi4iICsgZGVmYXVsdE1vZGVsRmlsZW5hbWVFeHRlbnNpb247DQorCQkJCQl9DQorCQkJCQluZXdGaWxlQ3JlYXRpb25QYWdlLnNldEZpbGVOYW1lKG1vZGVsRmlsZW5hbWUpOw0KKwkJCQl9DQorCQkJfQ0KKwkJfQ0KKwkJaW5pdGlhbE9iamVjdENyZWF0aW9uUGFnZSA9IG5ldyBHbG9iYWxpbmZsdWVuemFtb2RlbE1vZGVsV2l6YXJkSW5pdGlhbE9iamVjdENyZWF0aW9uUGFnZSgiV2hhdGV2ZXIyIik7DQorCQlpbml0aWFsT2JqZWN0Q3JlYXRpb25QYWdlLnNldFRpdGxlKEdsb2JhbGluZmx1ZW56YW1vZGVsRWRpdG9yUGx1Z2luLklOU1RBTkNFLmdldFN0cmluZygiX1VJX0dsb2JhbGluZmx1ZW56YW1vZGVsTW9kZWxXaXphcmRfbGFiZWwiKSk7DQorCQlpbml0aWFsT2JqZWN0Q3JlYXRpb25QYWdlLnNldERlc2NyaXB0aW9uKEdsb2JhbGluZmx1ZW56YW1vZGVsRWRpdG9yUGx1Z2luLklOU1RBTkNFLmdldFN0cmluZygiX1VJX1dpemFyZF9pbml0aWFsX29iamVjdF9kZXNjcmlwdGlvbiIpKTsNCisJCWFkZFBhZ2UoaW5pdGlhbE9iamVjdENyZWF0aW9uUGFnZSk7DQorCX0NCisNCisJLyoqDQorCSAqIEdldCB0aGUgZmlsZSBmcm9tIHRoZSBwYWdlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIElGaWxlIGdldE1vZGVsRmlsZSgpIHsNCisJCXJldHVybiBuZXdGaWxlQ3JlYXRpb25QYWdlLmdldE1vZGVsRmlsZSgpOw0KKwl9DQorDQorfQ0KZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzLmdsb2JhbGluZmx1ZW56YW1vZGVsL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL2Rpc2Vhc2Vtb2RlbHMvZ2xvYmFsaW5mbHVlbnphbW9kZWwvcHJlc2VudGF0aW9uL0dsb2JhbGluZmx1ZW56YW1vZGVsQWRhcHRlci5qYXZhIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMuZ2xvYmFsaW5mbHVlbnphbW9kZWwvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvZGlzZWFzZW1vZGVscy9nbG9iYWxpbmZsdWVuemFtb2RlbC9wcmVzZW50YXRpb24vR2xvYmFsaW5mbHVlbnphbW9kZWxBZGFwdGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjA3N2FhYwotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzLmdsb2JhbGluZmx1ZW56YW1vZGVsL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL2Rpc2Vhc2Vtb2RlbHMvZ2xvYmFsaW5mbHVlbnphbW9kZWwvcHJlc2VudGF0aW9uL0dsb2JhbGluZmx1ZW56YW1vZGVsQWRhcHRlci5qYXZhCkBAIC0wLDAgKzEsNDAgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzLmdsb2JhbGluZmx1ZW56YW1vZGVsLnByZXNlbnRhdGlvbjsKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDcsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3Q7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLkRpc2Vhc2VNb2RlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnVpLmFkYXB0ZXJzLmRpc2Vhc2Vtb2RlbHByb3BlcnR5ZWRpdG9yLkRpc2Vhc2VNb2RlbFByb3BlcnR5RWRpdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udWkuYWRhcHRlcnMuZGlzZWFzZW1vZGVscHJvcGVydHllZGl0b3IuRGlzZWFzZU1vZGVsUHJvcGVydHlFZGl0b3JBZGFwdGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udWkud2l6YXJkcy5EaXNlYXNlTW9kZWxQcm9wZXJ0eUNvbXBvc2l0ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLk1vZGlmeUxpc3RlbmVyOworCisvKioKKyAqICAKKyAqIEFkYXB0ZXIgZm9yIFByb3BlcnR5IEVkaXRvcgorICoKKyAqLworcHVibGljIGNsYXNzIEdsb2JhbGluZmx1ZW56YW1vZGVsQWRhcHRlciBleHRlbmRzCisJCURpc2Vhc2VNb2RlbFByb3BlcnR5RWRpdG9yQWRhcHRlciB7CisKKwkvKioKKwkgKiAKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgRGlzZWFzZU1vZGVsUHJvcGVydHlFZGl0b3IgY3JlYXRlRGlzZWFzZU1vZGVsUHJvcGVydHlFZGl0b3IoCisJCQlEaXNlYXNlTW9kZWxQcm9wZXJ0eUNvbXBvc2l0ZSBkaXNlYXNlTW9kZWxQcm9wZXJ0eUNvbXBvc2l0ZSwKKwkJCWludCBzdHlsZSwgTW9kaWZ5TGlzdGVuZXIgcHJvamVjdFZhbGlkYXRvciwgSVByb2plY3QgcHJvamVjdCkgeworCQlyZXR1cm4gbmV3IEdsb2JhbGluZmx1ZW56YW1vZGVsUHJvcGVydHlFZGl0b3IoCisJCQkJZGlzZWFzZU1vZGVsUHJvcGVydHlDb21wb3NpdGUsIHN0eWxlLAorCQkJCShEaXNlYXNlTW9kZWwpIGdldFRhcmdldCgpLCBwcm9qZWN0VmFsaWRhdG9yLCBwcm9qZWN0KTsKKwl9IC8vIGNyZWF0ZURpc2Vhc2VNb2RlbFByb3BlcnR5RWRpdG9yCisKK30gLy8gRm9yY2luZ0Rpc2Vhc2VNb2RlbEFkYXB0ZXIKZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzLmdsb2JhbGluZmx1ZW56YW1vZGVsL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL2Rpc2Vhc2Vtb2RlbHMvZ2xvYmFsaW5mbHVlbnphbW9kZWwvcHJlc2VudGF0aW9uL0dsb2JhbGluZmx1ZW56YW1vZGVsRWRpdG9yUGx1Z2luLmphdmEgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy5nbG9iYWxpbmZsdWVuemFtb2RlbC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9kaXNlYXNlbW9kZWxzL2dsb2JhbGluZmx1ZW56YW1vZGVsL3ByZXNlbnRhdGlvbi9HbG9iYWxpbmZsdWVuemFtb2RlbEVkaXRvclBsdWdpbi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRiNWUzOGYKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy5nbG9iYWxpbmZsdWVuemFtb2RlbC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9kaXNlYXNlbW9kZWxzL2dsb2JhbGluZmx1ZW56YW1vZGVsL3ByZXNlbnRhdGlvbi9HbG9iYWxpbmZsdWVuemFtb2RlbEVkaXRvclBsdWdpbi5qYXZhCkBAIC0wLDAgKzEsMTE5IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy5nbG9iYWxpbmZsdWVuemFtb2RlbC5wcmVzZW50YXRpb247DQorDQorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisgKiBDb3B5cmlnaHQgKGMpIDIwMDkgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuDQorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscw0KKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMA0KKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0DQorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwNCisgKg0KKyAqIENvbnRyaWJ1dG9yczoNCisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uDQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQorDQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24uRU1GUGx1Z2luOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnVpLkVjbGlwc2VVSVBsdWdpbjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlJlc291cmNlTG9jYXRvcjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnByb3ZpZGVyLkVjb3JlRWRpdFBsdWdpbjsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5wcm92aWRlci5Db3JlRWRpdFBsdWdpbjsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5lZGdlcy5wcm92aWRlci5EZWZpbml0aW9uc0VkaXRQbHVnaW47DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5wcm92aWRlci5EaXNlYXNlbW9kZWxzRWRpdFBsdWdpbjsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLnByb3ZpZGVyLlN0YW5kYXJkRWRpdFBsdWdpbjsNCitpbXBvcnQgb3JnLm9zZ2kuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHQ7DQorDQorLyoqDQorICogVGhpcyBpcyB0aGUgY2VudHJhbCBzaW5nbGV0b24gZm9yIHRoZSBHbG9iYWxpbmZsdWVuemFtb2RlbCBlZGl0b3IgcGx1Z2luLg0KKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorICogQGdlbmVyYXRlZA0KKyAqLw0KK3B1YmxpYyBmaW5hbCBjbGFzcyBHbG9iYWxpbmZsdWVuemFtb2RlbEVkaXRvclBsdWdpbiBleHRlbmRzIEVNRlBsdWdpbiB7DQorCS8qKg0KKwkgKiBLZWVwIHRyYWNrIG9mIHRoZSBzaW5nbGV0b24uDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgc3RhdGljIGZpbmFsIEdsb2JhbGluZmx1ZW56YW1vZGVsRWRpdG9yUGx1Z2luIElOU1RBTkNFID0gbmV3IEdsb2JhbGluZmx1ZW56YW1vZGVsRWRpdG9yUGx1Z2luKCk7DQorCQ0KKwkvKioNCisJICogS2VlcCB0cmFjayBvZiB0aGUgc2luZ2xldG9uLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJpdmF0ZSBzdGF0aWMgSW1wbGVtZW50YXRpb24gcGx1Z2luOw0KKw0KKwkvKioNCisJICogQ3JlYXRlIHRoZSBpbnN0YW5jZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBHbG9iYWxpbmZsdWVuemFtb2RlbEVkaXRvclBsdWdpbigpIHsNCisJCXN1cGVyDQorCQkJKG5ldyBSZXNvdXJjZUxvY2F0b3IgW10gew0KKwkJCQlEaXNlYXNlbW9kZWxzRWRpdFBsdWdpbi5JTlNUQU5DRSwNCisJCQkJQ29yZUVkaXRQbHVnaW4uSU5TVEFOQ0UsDQorCQkJCUVjb3JlRWRpdFBsdWdpbi5JTlNUQU5DRSwNCisJCQkJRGVmaW5pdGlvbnNFZGl0UGx1Z2luLklOU1RBTkNFLA0KKwkJCQlTdGFuZGFyZEVkaXRQbHVnaW4uSU5TVEFOQ0UsDQorCQkJfSk7DQorCX0NCisNCisJLyoqDQorCSAqIFJldHVybnMgdGhlIHNpbmdsZXRvbiBpbnN0YW5jZSBvZiB0aGUgRWNsaXBzZSBwbHVnaW4uDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcmV0dXJuIHRoZSBzaW5nbGV0b24gaW5zdGFuY2UuDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCUBPdmVycmlkZQ0KKwlwdWJsaWMgUmVzb3VyY2VMb2NhdG9yIGdldFBsdWdpblJlc291cmNlTG9jYXRvcigpIHsNCisJCXJldHVybiBwbHVnaW47DQorCX0NCisJDQorCS8qKg0KKwkgKiBSZXR1cm5zIHRoZSBzaW5nbGV0b24gaW5zdGFuY2Ugb2YgdGhlIEVjbGlwc2UgcGx1Z2luLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHJldHVybiB0aGUgc2luZ2xldG9uIGluc3RhbmNlLg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgc3RhdGljIEltcGxlbWVudGF0aW9uIGdldFBsdWdpbigpIHsNCisJCXJldHVybiBwbHVnaW47DQorCX0NCisJDQorCS8qKg0KKwkgKiBUaGUgYWN0dWFsIGltcGxlbWVudGF0aW9uIG9mIHRoZSBFY2xpcHNlIDxiPlBsdWdpbjwvYj4uDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgc3RhdGljIGNsYXNzIEltcGxlbWVudGF0aW9uIGV4dGVuZHMgRWNsaXBzZVVJUGx1Z2luIHsNCisJCS8qKg0KKwkJICogQ3JlYXRlcyBhbiBpbnN0YW5jZS4NCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJCSAqIEBnZW5lcmF0ZWQNCisJCSAqLw0KKwkJcHVibGljIEltcGxlbWVudGF0aW9uKCkgew0KKwkJCXN1cGVyKCk7DQorCQ0KKwkJCS8vIFJlbWVtYmVyIHRoZSBzdGF0aWMgaW5zdGFuY2UuDQorCQkJLy8NCisJCQlwbHVnaW4gPSB0aGlzOw0KKwkJfQ0KKwkJDQorCQkvKioNCisJCSAqIA0KKwkJICogQHNlZSBvcmcuZWNsaXBzZS51aS5wbHVnaW4uQWJzdHJhY3RVSVBsdWdpbiNzdGFydChvcmcub3NnaS5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dCkNCisJCSAqLw0KKwkJQE92ZXJyaWRlDQorCQlwdWJsaWMgdm9pZCBzdGFydChCdW5kbGVDb250ZXh0IGNvbnRleHQpIHRocm93cyBFeGNlcHRpb24gew0KKwkJCXN1cGVyLnN0YXJ0KGNvbnRleHQpOw0KKwkJCW5ldyBHbG9iYWxpbmZsdWVuemFtb2RlbFByb3BlcnR5RWRpdG9yQWRhcHRlckZhY3RvcnkoKTsNCisJCX0NCisJfQ0KKw0KK30NCmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy5nbG9iYWxpbmZsdWVuemFtb2RlbC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9kaXNlYXNlbW9kZWxzL2dsb2JhbGluZmx1ZW56YW1vZGVsL3ByZXNlbnRhdGlvbi9HbG9iYWxpbmZsdWVuemFtb2RlbFByb3BlcnR5RWRpdG9yLmphdmEgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy5nbG9iYWxpbmZsdWVuemFtb2RlbC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9kaXNlYXNlbW9kZWxzL2dsb2JhbGluZmx1ZW56YW1vZGVsL3ByZXNlbnRhdGlvbi9HbG9iYWxpbmZsdWVuemFtb2RlbFByb3BlcnR5RWRpdG9yLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGY5NDI2YgotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzLmdsb2JhbGluZmx1ZW56YW1vZGVsL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL2Rpc2Vhc2Vtb2RlbHMvZ2xvYmFsaW5mbHVlbnphbW9kZWwvcHJlc2VudGF0aW9uL0dsb2JhbGluZmx1ZW56YW1vZGVsUHJvcGVydHlFZGl0b3IuamF2YQpAQCAtMCwwICsxLDg4IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy5nbG9iYWxpbmZsdWVuemFtb2RlbC5wcmVzZW50YXRpb247CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDcsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3Q7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmdsb2JhbGluZmx1ZW56YW1vZGVsLkdsb2JhbEluZmx1ZW56YU1vZGVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5nbG9iYWxpbmZsdWVuemFtb2RlbC5HbG9iYWxpbmZsdWVuemFtb2RlbFBhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLkRpc2Vhc2VNb2RlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnVpLndpemFyZHMuU3RhbmRhcmREaXNlYXNlTW9kZWxQcm9wZXJ0eUVkaXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLk1vZGlmeUxpc3RlbmVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZTsKKworLyoqCisgKgorICovCitwdWJsaWMgY2xhc3MgR2xvYmFsaW5mbHVlbnphbW9kZWxQcm9wZXJ0eUVkaXRvciBleHRlbmRzCisJCVN0YW5kYXJkRGlzZWFzZU1vZGVsUHJvcGVydHlFZGl0b3IgeworCisJLyoqCisJICogQHBhcmFtIHBhcmVudAorCSAqIEBwYXJhbSBzdHlsZQorCSAqIEBwYXJhbSBkaXNlYXNlTW9kZWwKKwkgKiBAcGFyYW0gcHJvamVjdFZhbGlkYXRvcgorCSAqLworCXB1YmxpYyBHbG9iYWxpbmZsdWVuemFtb2RlbFByb3BlcnR5RWRpdG9yKENvbXBvc2l0ZSBwYXJlbnQsIGludCBzdHlsZSwKKwkJCURpc2Vhc2VNb2RlbCBkaXNlYXNlTW9kZWwsIE1vZGlmeUxpc3RlbmVyIHByb2plY3RWYWxpZGF0b3IsCisJCQlJUHJvamVjdCBwcm9qZWN0KSB7CisJCXN1cGVyKHBhcmVudCwgc3R5bGUsIGRpc2Vhc2VNb2RlbCwgcHJvamVjdFZhbGlkYXRvciwgcHJvamVjdCk7CisKKwl9IC8vIEdsb2JhbGluZmx1ZW56YU1vZGVsUHJvcGVydHlFZGl0b3IKKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS51aS53aXphcmRzLlN0YW5kYXJkRGlzZWFzZU1vZGVsUHJvcGVydHlFZGl0b3IjcG9wdWxhdGUob3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLkRpc2Vhc2VNb2RlbCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBwb3B1bGF0ZShEaXNlYXNlTW9kZWwgZGlzZWFzZU1vZGVsKSB7CisJCXN1cGVyLnBvcHVsYXRlKGRpc2Vhc2VNb2RlbCk7CisKKwkJaWYgKGRpc2Vhc2VNb2RlbCBpbnN0YW5jZW9mIEdsb2JhbEluZmx1ZW56YU1vZGVsKSB7CisJCQlHbG9iYWxJbmZsdWVuemFNb2RlbCBtb2RlbCA9IChHbG9iYWxJbmZsdWVuemFNb2RlbCkgZGlzZWFzZU1vZGVsOworCisJCQltb2RlbC5zZXRMYXRpdHVkZVNpZ21vaWRXaWR0aChEb3VibGUKKwkJCQkJLnBhcnNlRG91YmxlKG1hcAorCQkJCQkJCS5nZXQoR2xvYmFsaW5mbHVlbnphbW9kZWxQYWNrYWdlLkxpdGVyYWxzLkdMT0JBTF9JTkZMVUVOWkFfTU9ERUxfX0xBVElUVURFX1NJR01PSURfV0lEVEgpCisJCQkJCQkJLmdldFRleHQoKSkpOworCQkJbW9kZWwuc2V0U2Vhc29uYWxNb2R1bGF0aW9uRXhwb25lbnQoRG91YmxlCisJCQkJCS5wYXJzZURvdWJsZShtYXAKKwkJCQkJCQkuZ2V0KEdsb2JhbGluZmx1ZW56YW1vZGVsUGFja2FnZS5MaXRlcmFscy5HTE9CQUxfSU5GTFVFTlpBX01PREVMX19TRUFTT05BTF9NT0RVTEFUSU9OX0VYUE9ORU5UKQorCQkJCQkJCS5nZXRUZXh0KCkpKTsKKwkJCW1vZGVsLnNldE1vZHVsYXRpb25QZXJpb2QoRG91YmxlCisJCQkJCS5wYXJzZURvdWJsZShtYXAKKwkJCQkJCQkuZ2V0KEdsb2JhbGluZmx1ZW56YW1vZGVsUGFja2FnZS5MaXRlcmFscy5HTE9CQUxfSU5GTFVFTlpBX01PREVMX19NT0RVTEFUSU9OX1BFUklPRCkKKwkJCQkJCQkuZ2V0VGV4dCgpKSk7CisJCQltb2RlbC5zZXRNb2R1bGF0aW9uUGhhc2VTaGlmdChEb3VibGUKKwkJCQkJLnBhcnNlRG91YmxlKG1hcAorCQkJCQkJCS5nZXQoR2xvYmFsaW5mbHVlbnphbW9kZWxQYWNrYWdlLkxpdGVyYWxzLkdMT0JBTF9JTkZMVUVOWkFfTU9ERUxfX01PRFVMQVRJT05fUEhBU0VfU0hJRlQpCisJCQkJCQkJLmdldFRleHQoKSkpOworCQkJbW9kZWwuc2V0U2Vhc29uYWxNb2R1bGF0aW9uRmxvb3IoRG91YmxlCisJCQkJCS5wYXJzZURvdWJsZShtYXAKKwkJCQkJCQkuZ2V0KEdsb2JhbGluZmx1ZW56YW1vZGVsUGFja2FnZS5MaXRlcmFscy5HTE9CQUxfSU5GTFVFTlpBX01PREVMX19TRUFTT05BTF9NT0RVTEFUSU9OX0ZMT09SKQorCQkJCQkJCS5nZXRUZXh0KCkpKTsKKwkJfQorCX0KKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS51aS53aXphcmRzLlN0YW5kYXJkRGlzZWFzZU1vZGVsUHJvcGVydHlFZGl0b3IjdmFsaWRhdGUoKQorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBib29sZWFuIHZhbGlkYXRlKCkgeworCQlpZiAoIXN1cGVyLnZhbGlkYXRlKCkpIHsKKwkJCXJldHVybiBmYWxzZTsKKwkJfQorCQkKKwkJLy9UT0RPIGRvIHZhbGlkYXRpb24KKworCQlyZXR1cm4gdHJ1ZTsKKwl9CisKK30gLy8gR2xvYmFsaW5mbHVlbnphTW9kZWxQcm9wZXJ0eUVkaXRvcgpkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMuZ2xvYmFsaW5mbHVlbnphbW9kZWwvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvZGlzZWFzZW1vZGVscy9nbG9iYWxpbmZsdWVuemFtb2RlbC9wcmVzZW50YXRpb24vR2xvYmFsaW5mbHVlbnphbW9kZWxQcm9wZXJ0eUVkaXRvckFkYXB0ZXJGYWN0b3J5LmphdmEgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy5nbG9iYWxpbmZsdWVuemFtb2RlbC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9kaXNlYXNlbW9kZWxzL2dsb2JhbGluZmx1ZW56YW1vZGVsL3ByZXNlbnRhdGlvbi9HbG9iYWxpbmZsdWVuemFtb2RlbFByb3BlcnR5RWRpdG9yQWRhcHRlckZhY3RvcnkuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wOWQ4YWVkCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMuZ2xvYmFsaW5mbHVlbnphbW9kZWwvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvZGlzZWFzZW1vZGVscy9nbG9iYWxpbmZsdWVuemFtb2RlbC9wcmVzZW50YXRpb24vR2xvYmFsaW5mbHVlbnphbW9kZWxQcm9wZXJ0eUVkaXRvckFkYXB0ZXJGYWN0b3J5LmphdmEKQEAgLTAsMCArMSw1MSBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMuZ2xvYmFsaW5mbHVlbnphbW9kZWwucHJlc2VudGF0aW9uOworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNywgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5BZGFwdGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5nbG9iYWxpbmZsdWVuemFtb2RlbC51dGlsLkdsb2JhbGluZmx1ZW56YW1vZGVsQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS51aS5hZGFwdGVycy5kaXNlYXNlbW9kZWxwcm9wZXJ0eWVkaXRvci5EaXNlYXNlTW9kZWxQcm9wZXJ0eUVkaXRvckFkYXB0ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS51aS5hZGFwdGVycy5kaXNlYXNlbW9kZWxwcm9wZXJ0eWVkaXRvci5EaXNlYXNlTW9kZWxQcm9wZXJ0eUVkaXRvckFkYXB0ZXJGYWN0b3J5OworCisvKioKKyAqIEBhdXRob3IgamFtZXMKKyAqIAorICovCitwdWJsaWMgY2xhc3MgR2xvYmFsaW5mbHVlbnphbW9kZWxQcm9wZXJ0eUVkaXRvckFkYXB0ZXJGYWN0b3J5IGV4dGVuZHMKKwkJR2xvYmFsaW5mbHVlbnphbW9kZWxBZGFwdGVyRmFjdG9yeSBpbXBsZW1lbnRzCisJCURpc2Vhc2VNb2RlbFByb3BlcnR5RWRpdG9yQWRhcHRlckZhY3RvcnkgeworCisJLyoqCisJICogCisJICovCisJcHVibGljIEdsb2JhbGluZmx1ZW56YW1vZGVsUHJvcGVydHlFZGl0b3JBZGFwdGVyRmFjdG9yeSgpIHsKKwkJc3VwZXIoKTsKKwkJRGlzZWFzZU1vZGVsUHJvcGVydHlFZGl0b3JBZGFwdGVyRmFjdG9yeS5JTlNUQU5DRQorCQkJCS5hZGRBZGFwdGVyRmFjdG9yeSh0aGlzKTsKKwl9CisKKwkvKioKKwkgKiAKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVHbG9iYWxJbmZsdWVuemFNb2RlbEFkYXB0ZXIoKSB7CisJCXJldHVybiBuZXcgR2xvYmFsaW5mbHVlbnphbW9kZWxBZGFwdGVyKCk7CisJfQorCisJLyoqCisJICogCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZ2xvYmFsaW5mbHVlbnphbW9kZWwudXRpbC5Gb3JjaW5nQWRhcHRlckZhY3RvcnkjaXNGYWN0b3J5Rm9yVHlwZShqYXZhLmxhbmcuT2JqZWN0KQorCSAqLworCXB1YmxpYyBib29sZWFuIGlzRmFjdG9yeUZvclR5cGUoT2JqZWN0IHR5cGUpIHsKKwkJcmV0dXJuIHR5cGUgPT0gRGlzZWFzZU1vZGVsUHJvcGVydHlFZGl0b3JBZGFwdGVyLmNsYXNzCisJCQkJfHwgc3VwZXIuaXNGYWN0b3J5Rm9yVHlwZSh0eXBlKTsKKwl9Cit9IC8vIEZvcmNpbmdEaXNlYXNlTW9kZWxQcm9wZXJ0eUVkaXRvckFkYXB0ZXJGYWN0b3J5CmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy5nbG9iYWxpbmZsdWVuemFtb2RlbC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9kaXNlYXNlbW9kZWxzL2dsb2JhbGluZmx1ZW56YW1vZGVsL3ByZXNlbnRhdGlvbi9HbG9iYWxpbmZsdWVuemFtb2RlbFByb3BlcnR5U3RyaW5nUHJvdmlkZXJBZGFwdGVyRmFjdG9yeS5qYXZhIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMuZ2xvYmFsaW5mbHVlbnphbW9kZWwvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvZGlzZWFzZW1vZGVscy9nbG9iYWxpbmZsdWVuemFtb2RlbC9wcmVzZW50YXRpb24vR2xvYmFsaW5mbHVlbnphbW9kZWxQcm9wZXJ0eVN0cmluZ1Byb3ZpZGVyQWRhcHRlckZhY3RvcnkuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hM2RmYmJhCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMuZ2xvYmFsaW5mbHVlbnphbW9kZWwvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvZGlzZWFzZW1vZGVscy9nbG9iYWxpbmZsdWVuemFtb2RlbC9wcmVzZW50YXRpb24vR2xvYmFsaW5mbHVlbnphbW9kZWxQcm9wZXJ0eVN0cmluZ1Byb3ZpZGVyQWRhcHRlckZhY3RvcnkuamF2YQpAQCAtMCwwICsxLDEyNSBAQAorLy8gRXhhbXBsZVByb3BlcnR5U3RyaW5nUHJvdmlkZXJBZGFwdGVyRmFjdG9yeS5qYXZhCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy5nbG9iYWxpbmZsdWVuemFtb2RlbC5wcmVzZW50YXRpb247CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNywgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqYXZhLnV0aWwuTWlzc2luZ1Jlc291cmNlRXhjZXB0aW9uOworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuQWRhcHRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRVN0cnVjdHVyYWxGZWF0dXJlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtUHJvcGVydHlEZXNjcmlwdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5nbG9iYWxpbmZsdWVuemFtb2RlbC51dGlsLkdsb2JhbGluZmx1ZW56YW1vZGVsQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS51aS5hZGFwdGVycy5wcm9wZXJ0eXN0cmluZ3MuUHJvcGVydHlTdHJpbmdQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnVpLmFkYXB0ZXJzLnByb3BlcnR5c3RyaW5ncy5Qcm9wZXJ0eVN0cmluZ1Byb3ZpZGVyQWRhcHRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnVpLmFkYXB0ZXJzLnByb3BlcnR5c3RyaW5ncy5Qcm9wZXJ0eVN0cmluZ1Byb3ZpZGVyQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS51aS53aXphcmRzLlN0YW5kYXJkUHJvcGVydHlTdHJpbmdQcm92aWRlckFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklTdGFydHVwOworCisvKioKKyAqIFRoaXMgY2xhc3MgcmVwcmVzZW50cworICovCitwdWJsaWMgY2xhc3MgR2xvYmFsaW5mbHVlbnphbW9kZWxQcm9wZXJ0eVN0cmluZ1Byb3ZpZGVyQWRhcHRlckZhY3RvcnkgZXh0ZW5kcworCSAgICBHbG9iYWxpbmZsdWVuemFtb2RlbEFkYXB0ZXJGYWN0b3J5IGltcGxlbWVudHMKKwkJUHJvcGVydHlTdHJpbmdQcm92aWRlckFkYXB0ZXJGYWN0b3J5LCBJU3RhcnR1cCB7CisKKwlQcm9wZXJ0eVN0cmluZ1Byb3ZpZGVyQWRhcHRlciBhZGFwdGVyID0gbnVsbDsKKworCS8qKgorCSAqIERlZmF1bHQgQ29uc3RydWN0b3IKKwkgKi8KKwlwdWJsaWMgR2xvYmFsaW5mbHVlbnphbW9kZWxQcm9wZXJ0eVN0cmluZ1Byb3ZpZGVyQWRhcHRlckZhY3RvcnkoKSB7CisJCXN1cGVyKCk7CisJCVByb3BlcnR5U3RyaW5nUHJvdmlkZXJBZGFwdGVyRmFjdG9yeS5JTlNUQU5DRS5hZGRBZGFwdGVyRmFjdG9yeSh0aGlzKTsKKwl9CisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnVpLklTdGFydHVwI2Vhcmx5U3RhcnR1cCgpCisJICovCisJcHVibGljIHZvaWQgZWFybHlTdGFydHVwKCkgeworCQkvLyBOb3RoaW5nIHRvIGRvIGhlcmUuIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBhZnRlciB0aGUgY29uc3RydWN0b3IgaGFzCisJCS8vIHJ1biB3aGljaCBpcyB0aGUgZW50aXJlIHBvaW50IG9mIGVhcmx5IGFjdGl2YXRpb24gd2hpY2ggY2F1c2VzIHRoZQorCQkvLyBmYWN0b3J5IHRvIGJlIGFkZGVkIHRvIHRoZSBQcm9wZXJ0eVN0cmluZ1Byb3ZpZGVyQWRhcHRlckZhY3RvcnkuSU5TVEFOQ0UKKwl9CisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LmltcGwuQWRhcHRlckZhY3RvcnlJbXBsI2lzRmFjdG9yeUZvclR5cGUoamF2YS5sYW5nLk9iamVjdCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgYm9vbGVhbiBpc0ZhY3RvcnlGb3JUeXBlKE9iamVjdCB0eXBlKSB7CisJCXJldHVybiBzdXBlci5pc0ZhY3RvcnlGb3JUeXBlKHR5cGUpCisJCQkJfHwgdHlwZSA9PSBQcm9wZXJ0eVN0cmluZ1Byb3ZpZGVyLmNsYXNzOworCX0KKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmdsb2JhbGluZmx1ZW56YW1vZGVsLnV0aWwuRm9yY25nQWRhcHRlckZhY3RvcnkjY3JlYXRlRXhhbXBsZURpc2Vhc2VNb2RlbEFkYXB0ZXIoKQorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZUdsb2JhbEluZmx1ZW56YU1vZGVsQWRhcHRlcigpIHsKKwkJLy8gSGF2ZSB3ZSBjcmVhdGVkIG9uZSBiZWZvcmU/CisJCWlmIChhZGFwdGVyID09IG51bGwpIHsKKwkJCS8vIE5vCisJCQlhZGFwdGVyID0gbmV3ICBTdGFuZGFyZFByb3BlcnR5U3RyaW5nUHJvdmlkZXJBZGFwdGVyRmFjdG9yeS5TdGFuZGFyZFByb3BlcnR5U3RyaW5nUHJvdmlkZXJBZGFwdGVyKCkgeworCisJCQkJLyoqCisJCQkJICogQHBhcmFtIGRlc2NyaXB0b3IKKwkJCQkgKiBAcmV0dXJuIHRoZSBOTFMnZCBuYW1lIG9mIHRoZSBwcm9wZXJ0eSB0byBkaXNwbGF5IHRvIHRoZSB1c2VyCisJCQkJICovCisJCQkJcHVibGljIFN0cmluZyBnZXRQcm9wZXJ0eU5hbWUoSUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IgZGVzY3JpcHRvcikgeworCQkJCQl0cnkgeworCQkJCQkJcmV0dXJuIEdsb2JhbGluZmx1ZW56YW1vZGVsV2l6YXJkTWVzc2FnZXMKKwkJCQkJCQkJLmdldFN0cmluZygoKEVTdHJ1Y3R1cmFsRmVhdHVyZSkgZGVzY3JpcHRvcgorCQkJCQkJCQkJCS5nZXRGZWF0dXJlKG51bGwpKS5nZXROYW1lKCkpOworCQkJCQl9IGNhdGNoIChNaXNzaW5nUmVzb3VyY2VFeGNlcHRpb24gZSkgeworCQkJCQkJcmV0dXJuIHN1cGVyLmdldFByb3BlcnR5TmFtZShkZXNjcmlwdG9yKTsKKwkJCQkJfQorCQkJCX0gLy8gZ2V0UHJvcGVydHlOYW1lCisKKwkJCQkvKioKKwkJCQkgKiBAcGFyYW0gZGVzY3JpcHRvcgorCQkJCSAqIEByZXR1cm4gdGhlIE5MUydkIHRvb2wgdGlwIHRleHQgdGhhdCBkZXNjcmliZXMgdGhlIHByb3BlcnR5CisJCQkJICovCisJCQkJcHVibGljIFN0cmluZyBnZXRQcm9wZXJ0eVRvb2xUaXAoCisJCQkJCQlJSXRlbVByb3BlcnR5RGVzY3JpcHRvciBkZXNjcmlwdG9yKSB7CisJCQkJCXRyeSB7CisJCQkJCQlmaW5hbCBFU3RydWN0dXJhbEZlYXR1cmUgZmVhdHVyZSA9IChFU3RydWN0dXJhbEZlYXR1cmUpIGRlc2NyaXB0b3IKKwkJCQkJCQkJLmdldEZlYXR1cmUobnVsbCk7CisJCQkJCQlyZXR1cm4gR2xvYmFsaW5mbHVlbnphbW9kZWxXaXphcmRNZXNzYWdlcy5nZXRTdHJpbmcoZmVhdHVyZQorCQkJCQkJCQkuZ2V0TmFtZSgpCisJCQkJCQkJCSsgVFRfU1VGRklYKTsKKwkJCQkJfSBjYXRjaCAoTWlzc2luZ1Jlc291cmNlRXhjZXB0aW9uIGUpIHsKKwkJCQkJCXJldHVybiBzdXBlci5nZXRQcm9wZXJ0eVRvb2xUaXAoZGVzY3JpcHRvcik7CisJCQkJCX0KKwkJCQl9IC8vIGdldFByb3BlcnR5VG9vbFRpcAorCisJCQkJLyoqCisJCQkJICogQHBhcmFtIGRlc2NyaXB0b3IKKwkJCQkgKiBAcmV0dXJuIHRoZSBOTFMnZCB0ZXh0IHRoYXQgcmVwcmVzZW50cyB0aGUgdW5pdHMgb2YgdGhlCisJCQkJICogICAgICAgICBwcm9wZXJ0eQorCQkJCSAqLworCQkJCXB1YmxpYyBTdHJpbmcgZ2V0UHJvcGVydHlVbml0cygKKwkJCQkJCUlJdGVtUHJvcGVydHlEZXNjcmlwdG9yIGRlc2NyaXB0b3IpIHsKKwkJCQkJdHJ5IHsKKwkJCQkJCWZpbmFsIEVTdHJ1Y3R1cmFsRmVhdHVyZSBmZWF0dXJlID0gKEVTdHJ1Y3R1cmFsRmVhdHVyZSkgZGVzY3JpcHRvcgorCQkJCQkJCQkuZ2V0RmVhdHVyZShudWxsKTsKKwkJCQkJCXJldHVybiBHbG9iYWxpbmZsdWVuemFtb2RlbFdpemFyZE1lc3NhZ2VzLmdldFN0cmluZyhmZWF0dXJlCisJCQkJCQkJCS5nZXROYW1lKCkKKwkJCQkJCQkJKyBVTklUX1NVRkZJWCk7CisJCQkJCX0gY2F0Y2ggKE1pc3NpbmdSZXNvdXJjZUV4Y2VwdGlvbiBlKSB7CisJCQkJCQlyZXR1cm4gc3VwZXIuZ2V0UHJvcGVydHlVbml0cyhkZXNjcmlwdG9yKTsKKwkJCQkJfQorCQkJCX0gLy8gZ2V0UHJvcGVydHlVbml0cworCQkJfTsKKwkJfSAvLyBpZiB3ZSBkaWRuJ3QgY3JlYXRlIG9uZSBiZWZvcmUKKwkJcmV0dXJuIGFkYXB0ZXI7CisJfS8vIGNyZWF0ZUZvcmNpbmdEaXNlYXNlTW9kZWxBZGFwdGVyKCkKKworfSAvLyBGb3JjaW5nUHJvcGVydHlTdHJpbmdQcm92aWRlckFkYXB0ZXJGYWN0b3J5CmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy5nbG9iYWxpbmZsdWVuemFtb2RlbC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9kaXNlYXNlbW9kZWxzL2dsb2JhbGluZmx1ZW56YW1vZGVsL3ByZXNlbnRhdGlvbi9HbG9iYWxpbmZsdWVuemFtb2RlbFdpemFyZE1lc3NhZ2VzLmphdmEgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy5nbG9iYWxpbmZsdWVuemFtb2RlbC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9kaXNlYXNlbW9kZWxzL2dsb2JhbGluZmx1ZW56YW1vZGVsL3ByZXNlbnRhdGlvbi9HbG9iYWxpbmZsdWVuemFtb2RlbFdpemFyZE1lc3NhZ2VzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTJmYTM2ZgotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzLmdsb2JhbGluZmx1ZW56YW1vZGVsL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL2Rpc2Vhc2Vtb2RlbHMvZ2xvYmFsaW5mbHVlbnphbW9kZWwvcHJlc2VudGF0aW9uL0dsb2JhbGluZmx1ZW56YW1vZGVsV2l6YXJkTWVzc2FnZXMuamF2YQpAQCAtMCwwICsxLDQ2IEBACisvLyBFeGFtcGxlRGlzZWFzZVdpemFyZE1lc3NhZ2VzLmphdmEKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzLmdsb2JhbGluZmx1ZW56YW1vZGVsLnByZXNlbnRhdGlvbjsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNywgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqYXZhLnV0aWwuTWlzc2luZ1Jlc291cmNlRXhjZXB0aW9uOworaW1wb3J0IGphdmEudXRpbC5SZXNvdXJjZUJ1bmRsZTsKKworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5Db25zdGFudHM7CisKKy8qKgorICogVGhpcyBjbGFzcyBpcyB0aGUgUmVzb3VyY2UgQnVuZGxlIGZvciB0aGlzIHBhY2thZ2UuCisgKi8KK3B1YmxpYyBjbGFzcyBHbG9iYWxpbmZsdWVuemFtb2RlbFdpemFyZE1lc3NhZ2VzIHsKKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgQlVORExFX05BTUUgPSBDb25zdGFudHMuSURfUk9PVAorCQkJKyAiLnVpLmRpc2Vhc2Vtb2RlbHMuZ2xvYmFsaW5mbHVlbnphbW9kZWwucHJlc2VudGF0aW9uLmdsb2JhbGluZmx1ZW56YW1vZGVsbWVzc2FnZXMiOyAvLyROT04tTkxTLTEkCisKKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBSZXNvdXJjZUJ1bmRsZSBSRVNPVVJDRV9CVU5ETEUgPSBSZXNvdXJjZUJ1bmRsZQorCQkJLmdldEJ1bmRsZShCVU5ETEVfTkFNRSk7CisKKwkvKioKKwkgKiAKKwkgKi8KKwlwdWJsaWMgR2xvYmFsaW5mbHVlbnphbW9kZWxXaXphcmRNZXNzYWdlcygpIHsKKwkJLy8gZW1wdHkKKwl9CisKKwkvKioKKwkgKiBAcGFyYW0ga2V5CisJICogICAgICAgICAgICB0aGUga2V5IGZvciB0aGUgbWVzc2FnZQorCSAqIEByZXR1cm4gdGhlIHN0cmluZyB0aGF0IG1hdGNoZXMgdGhlIGtleQorCSAqIEB0aHJvd3MgTWlzc2luZ1Jlc291cmNlRXhjZXB0aW9uIGlmIHRoZSBrZXkgY2Fubm90IGJlIGZvdW5kCisJICovCisJcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0U3RyaW5nKGZpbmFsIFN0cmluZyBrZXkpIHRocm93cyBNaXNzaW5nUmVzb3VyY2VFeGNlcHRpb257CisJCQlyZXR1cm4gUkVTT1VSQ0VfQlVORExFLmdldFN0cmluZyhrZXkpOworCX0gLy8gZ2V0U3RyaW5nCit9IC8vIEdsb2JhbGluZmx1ZW56YW1vZGVsV2l6YXJkTWVzc2FnZXMKZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzLmdsb2JhbGluZmx1ZW56YW1vZGVsL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL2Rpc2Vhc2Vtb2RlbHMvZ2xvYmFsaW5mbHVlbnphbW9kZWwvcHJlc2VudGF0aW9uL2dsb2JhbGluZmx1ZW56YW1vZGVsbWVzc2FnZXMucHJvcGVydGllcyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzLmdsb2JhbGluZmx1ZW56YW1vZGVsL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL2Rpc2Vhc2Vtb2RlbHMvZ2xvYmFsaW5mbHVlbnphbW9kZWwvcHJlc2VudGF0aW9uL2dsb2JhbGluZmx1ZW56YW1vZGVsbWVzc2FnZXMucHJvcGVydGllcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42Mjk4NGMyCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMuZ2xvYmFsaW5mbHVlbnphbW9kZWwvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvZGlzZWFzZW1vZGVscy9nbG9iYWxpbmZsdWVuemFtb2RlbC9wcmVzZW50YXRpb24vZ2xvYmFsaW5mbHVlbnphbW9kZWxtZXNzYWdlcy5wcm9wZXJ0aWVzCkBAIC0wLDAgKzEsMzcgQEAKKyMgZGlzZWFzZXdpemFyZG1lc3NhZ2VzLnByb3BlcnRpZXMKKyMKKyMvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIyAqIENvcHlyaWdodCAoYykgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyMgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisjICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisjICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyMgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorIyAqCisjICogQ29udHJpYnV0b3JzOgorIyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCitzZWFzb25hbE1vZHVsYXRpb24gPSBTZWFzb25hbCBNb2R1bGF0aW9uCitzZWFzb25hbE1vZHVsYXRpb25UVCA9IFNlYXNvbmFsIE1vZHVsYXRpb24KK3NlYXNvbmFsTW9kdWxhdGlvblVOSVQgPSBEYXlzCisKK21vZHVsYXRpb25QZXJpb2QgPSBNb2R1bGF0aW9uIFBlcmlvZAorbW9kdWxhdGlvblBlcmlvZFRUID0gTW9kdWxhdGlvbiBQZXJpb2QKK21vZHVsYXRpb25QZXJpb2RVTklUID0gRGF5cworCittb2R1bGF0aW9uUGhhc2VTaGlmdCA9IE1vZHVsYXRpb24gUGhhc2UgU2hpZnQKK21vZHVsYXRpb25QaGFzZVNoaWZ0VFQgPSBNb2R1bGF0aW9uIFBoYXNlIFNoaWZ0Cittb2R1bGF0aW9uUGhhc2VTaGlmdFVOSVQgPSBEYXlzCisKK3NlYXNvbmFsTW9kdWxhdGlvbkV4cG9uZW50ID0gU2Vhc29uYWxNb2R1bGF0aW9uRXhwb25lbnQKK3NlYXNvbmFsTW9kdWxhdGlvbkV4cG9uZW50VFQgPSBFeHBvbmVudCB1c2VkIGZvciBzZWFzb25hbCBtb2R1bGF0aW9uIGZvcmNpbmcKK3NlYXNvbmFsTW9kdWxhdGlvbkV4cG9uZW50VU5JVCA9IAorCitzZWFzb25hbE1vZHVsYXRpb25GbG9vciA9IFNlYXNvbmFsTW9kdWxhdGlvbkZsb29yCitzZWFzb25hbE1vZHVsYXRpb25GbG9vclRUID0gRmxvb3Igb3IgbWluaW11bSB0cmFuc21pc3Npb24gbGV2ZWwgd2l0aG91dCBzZWFzb25hbCBtb2R1bGF0aW9uCitzZWFzb25hbE1vZHVsYXRpb25GbG9vclVOSVQgPSAKKworbGF0aXR1ZGVTaWdtb2lkV2lkdGggPSBMYXQuIFdpZHRoCitsYXRpdHVkZVNpZ21vaWRXaWR0aFRUID0gTGF0aXR1ZGUgU2lnbW9pZCBGdW5jdGlvbiBXaWR0aAorbGF0aXR1ZGVTaWdtb2lkV2lkdGhVTklUID0gRGVncmVlcwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzLm11bHRpcG9wdWxhdGlvbi8uY2xhc3NwYXRoIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMubXVsdGlwb3B1bGF0aW9uLy5jbGFzc3BhdGgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDVmMDI0ZQotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzLm11bHRpcG9wdWxhdGlvbi8uY2xhc3NwYXRoCkBAIC0wLDAgKzEsNyBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4NCis8Y2xhc3NwYXRoPg0KKwk8Y2xhc3NwYXRoZW50cnkga2luZD0ic3JjIiBwYXRoPSJzcmMiLz4NCisJPGNsYXNzcGF0aGVudHJ5IGtpbmQ9ImNvbiIgcGF0aD0ib3JnLmVjbGlwc2UuamR0LmxhdW5jaGluZy5KUkVfQ09OVEFJTkVSL29yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC5kZWJ1Zy51aS5sYXVuY2hlci5TdGFuZGFyZFZNVHlwZS9KMlNFLTEuNSIvPg0KKwk8Y2xhc3NwYXRoZW50cnkga2luZD0iY29uIiBwYXRoPSJvcmcuZWNsaXBzZS5wZGUuY29yZS5yZXF1aXJlZFBsdWdpbnMiLz4NCisJPGNsYXNzcGF0aGVudHJ5IGtpbmQ9Im91dHB1dCIgcGF0aD0iYmluIi8+DQorPC9jbGFzc3BhdGg+DQpkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMubXVsdGlwb3B1bGF0aW9uLy5wcm9qZWN0IGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMubXVsdGlwb3B1bGF0aW9uLy5wcm9qZWN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEyMThmNjMKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy5tdWx0aXBvcHVsYXRpb24vLnByb2plY3QKQEAgLTAsMCArMSwyOCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxwcm9qZWN0RGVzY3JpcHRpb24+CisJPG5hbWU+b3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzLm11bHRpcG9wdWxhdGlvbjwvbmFtZT4KKwk8Y29tbWVudD48L2NvbW1lbnQ+CisJPHByb2plY3RzPgorCTwvcHJvamVjdHM+CisJPGJ1aWxkU3BlYz4KKwkJPGJ1aWxkQ29tbWFuZD4KKwkJCTxuYW1lPm9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFidWlsZGVyPC9uYW1lPgorCQkJPGFyZ3VtZW50cz4KKwkJCTwvYXJndW1lbnRzPgorCQk8L2J1aWxkQ29tbWFuZD4KKwkJPGJ1aWxkQ29tbWFuZD4KKwkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5NYW5pZmVzdEJ1aWxkZXI8L25hbWU+CisJCQk8YXJndW1lbnRzPgorCQkJPC9hcmd1bWVudHM+CisJCTwvYnVpbGRDb21tYW5kPgorCQk8YnVpbGRDb21tYW5kPgorCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLlNjaGVtYUJ1aWxkZXI8L25hbWU+CisJCQk8YXJndW1lbnRzPgorCQkJPC9hcmd1bWVudHM+CisJCTwvYnVpbGRDb21tYW5kPgorCTwvYnVpbGRTcGVjPgorCTxuYXR1cmVzPgorCQk8bmF0dXJlPm9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFuYXR1cmU8L25hdHVyZT4KKwkJPG5hdHVyZT5vcmcuZWNsaXBzZS5wZGUuUGx1Z2luTmF0dXJlPC9uYXR1cmU+CisJPC9uYXR1cmVzPgorPC9wcm9qZWN0RGVzY3JpcHRpb24+CmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy5tdWx0aXBvcHVsYXRpb24vTUVUQS1JTkYvTUFOSUZFU1QuTUYgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy5tdWx0aXBvcHVsYXRpb24vTUVUQS1JTkYvTUFOSUZFU1QuTUYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDdiMDUxMgotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzLm11bHRpcG9wdWxhdGlvbi9NRVRBLUlORi9NQU5JRkVTVC5NRgpAQCAtMCwwICsxLDI1IEBACitNYW5pZmVzdC1WZXJzaW9uOiAxLjAKK0J1bmRsZS1NYW5pZmVzdFZlcnNpb246IDIKK0J1bmRsZS1OYW1lOiAlcGx1Z2luTmFtZQorQnVuZGxlLVN5bWJvbGljTmFtZTogb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzLm11bHRpcG9wdWxhdGlvbjtzaW5nbGV0b246PXRydWUKK0J1bmRsZS1WZXJzaW9uOiAxLjIuMQorQnVuZGxlLUNsYXNzUGF0aDogLgorQnVuZGxlLUFjdGl2YXRvcjogb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLm11bHRpcG9wdWxhdGlvbi5wcmVzZW50YXRpb24uTXVsdGlwb3B1bGF0aW9uRWRpdG9yUGx1Z2luJEltcGxlbWVudGF0aW9uCitCdW5kbGUtVmVuZG9yOiAlcHJvdmlkZXJOYW1lCitCdW5kbGUtTG9jYWxpemF0aW9uOiBwbHVnaW4KK0J1bmRsZS1SZXF1aXJlZEV4ZWN1dGlvbkVudmlyb25tZW50OiBKMlNFLTEuNQorRXhwb3J0LVBhY2thZ2U6IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5tdWx0aXBvcHVsYXRpb24ucHJlc2VudGF0aW9uCitSZXF1aXJlLUJ1bmRsZTogb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLAorIG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzO3Zpc2liaWxpdHk6PXJlZXhwb3J0LAorIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5tdWx0aXBvcHVsYXRpb247dmlzaWJpbGl0eTo9cmVleHBvcnQsCisgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnhtaTt2aXNpYmlsaXR5Oj1yZWV4cG9ydCwKKyBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aTt2aXNpYmlsaXR5Oj1yZWV4cG9ydCwKKyBvcmcuZWNsaXBzZS51aS5pZGU7dmlzaWJpbGl0eTo9cmVleHBvcnQsCisgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzO3Zpc2liaWxpdHk6PXJlZXhwb3J0LAorIG9yZy5lY2xpcHNlLnN0ZW0uY29yZTt2aXNpYmlsaXR5Oj1yZWV4cG9ydCwKKyBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuZWRpdDt2aXNpYmlsaXR5Oj1yZWV4cG9ydCwKKyBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zO3Zpc2liaWxpdHk6PXJlZXhwb3J0LAorIG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVsczt2aXNpYmlsaXR5Oj1yZWV4cG9ydCwKKyBvcmcuZWNsaXBzZS5zdGVtLnVpLAorIG9yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscworQnVuZGxlLUFjdGl2YXRpb25Qb2xpY3k6IGxhenkKZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzLm11bHRpcG9wdWxhdGlvbi9idWlsZC5wcm9wZXJ0aWVzIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMubXVsdGlwb3B1bGF0aW9uL2J1aWxkLnByb3BlcnRpZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWQ3NDZiMAotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzLm11bHRpcG9wdWxhdGlvbi9idWlsZC5wcm9wZXJ0aWVzCkBAIC0wLDAgKzEsMTcgQEAKKworIyA8Y29weXJpZ2h0PgorIyA8L2NvcHlyaWdodD4KKyMKKyMgJElkJAorCitiaW4uaW5jbHVkZXMgPSAuLFwKKyAgICAgICAgICAgICAgIGljb25zLyxcCisgICAgICAgICAgICAgICBNRVRBLUlORi8sXAorICAgICAgICAgICAgICAgcGx1Z2luLnhtbCxcCisgICAgICAgICAgICAgICBwbHVnaW4ucHJvcGVydGllcyxcCisgICAgICAgICAgICAgICBwbHVnaW5femgucHJvcGVydGllcyxcCisgICAgICAgICAgICAgICBwbHVnaW5fZGUucHJvcGVydGllcyxcCisgICAgICAgICAgICAgICBwbHVnaW5fa3IucHJvcGVydGllcworamFycy5jb21waWxlLm9yZGVyID0gLgorc291cmNlLi4gPSBzcmMvCitvdXRwdXQuLiA9IGJpbi8KZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzLm11bHRpcG9wdWxhdGlvbi9pY29ucy9mdWxsL29iajE2L011bHRpcG9wdWxhdGlvbk1vZGVsRmlsZS5naWYgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy5tdWx0aXBvcHVsYXRpb24vaWNvbnMvZnVsbC9vYmoxNi9NdWx0aXBvcHVsYXRpb25Nb2RlbEZpbGUuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJkZTUyMjAKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy5tdWx0aXBvcHVsYXRpb24vaWNvbnMvZnVsbC9vYmoxNi9NdWx0aXBvcHVsYXRpb25Nb2RlbEZpbGUuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzLm11bHRpcG9wdWxhdGlvbi9pY29ucy9mdWxsL3dpemJhbi9OZXdNdWx0aXBvcHVsYXRpb24uZ2lmIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMubXVsdGlwb3B1bGF0aW9uL2ljb25zL2Z1bGwvd2l6YmFuL05ld011bHRpcG9wdWxhdGlvbi5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGQzMjQ5NwotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzLm11bHRpcG9wdWxhdGlvbi9pY29ucy9mdWxsL3dpemJhbi9OZXdNdWx0aXBvcHVsYXRpb24uZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzLm11bHRpcG9wdWxhdGlvbi9wbHVnaW4ucHJvcGVydGllcyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzLm11bHRpcG9wdWxhdGlvbi9wbHVnaW4ucHJvcGVydGllcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MmZjZWU0Ci0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMubXVsdGlwb3B1bGF0aW9uL3BsdWdpbi5wcm9wZXJ0aWVzCkBAIC0wLDAgKzEsNTcgQEAKKworIyA8Y29weXJpZ2h0PgorIyA8L2NvcHlyaWdodD4KKyMKKyMgJElkJAorCitwbHVnaW5OYW1lID0gTXVsdGlwb3B1bGF0aW9uIEVkaXRvcgorcHJvdmlkZXJOYW1lID0gRWNsaXBzZS5vcmcKKworX1VJX011bHRpcG9wdWxhdGlvbkVkaXRvcl9tZW51ID0gJk11bHRpcG9wdWxhdGlvbiBFZGl0b3IKKworX1VJX0NyZWF0ZUNoaWxkX21lbnVfaXRlbSA9ICZOZXcgQ2hpbGQKK19VSV9DcmVhdGVTaWJsaW5nX21lbnVfaXRlbSA9IE4mZXcgU2libGluZworCitfVUlfU2hvd1Byb3BlcnRpZXNWaWV3X21lbnVfaXRlbSA9IFNob3cgJlByb3BlcnRpZXMgVmlldworX1VJX1JlZnJlc2hWaWV3ZXJfbWVudV9pdGVtID0gJlJlZnJlc2gKKworX1VJX1NlbGVjdGlvblBhZ2VfbGFiZWwgPSBTZWxlY3Rpb24KK19VSV9QYXJlbnRQYWdlX2xhYmVsID0gUGFyZW50CitfVUlfTGlzdFBhZ2VfbGFiZWwgPSBMaXN0CitfVUlfVHJlZVBhZ2VfbGFiZWwgPSBUcmVlCitfVUlfVGFibGVQYWdlX2xhYmVsID0gVGFibGUKK19VSV9UcmVlV2l0aENvbHVtbnNQYWdlX2xhYmVsID0gVHJlZSB3aXRoIENvbHVtbnMKK19VSV9PYmplY3RDb2x1bW5fbGFiZWwgPSBPYmplY3QKK19VSV9TZWxmQ29sdW1uX2xhYmVsID0gU2VsZgorCitfVUlfTm9PYmplY3RTZWxlY3RlZCA9IFNlbGVjdGVkIE5vdGhpbmcKK19VSV9TaW5nbGVPYmplY3RTZWxlY3RlZCA9IFNlbGVjdGVkIE9iamVjdDogezB9CitfVUlfTXVsdGlPYmplY3RTZWxlY3RlZCA9IFNlbGVjdGVkIHswfSBPYmplY3RzCisKK19VSV9PcGVuRWRpdG9yRXJyb3JfbGFiZWwgPSBPcGVuIEVkaXRvcgorCitfVUlfV2l6YXJkX2NhdGVnb3J5ID0gRXhhbXBsZSBFTUYgTW9kZWwgQ3JlYXRpb24gV2l6YXJkcworCitfVUlfQ3JlYXRlTW9kZWxFcnJvcl9tZXNzYWdlID0gUHJvYmxlbXMgZW5jb3VudGVyZWQgaW4gZmlsZSAiezB9IgorCitfVUlfTXVsdGlwb3B1bGF0aW9uTW9kZWxXaXphcmRfbGFiZWwgPSBNdWx0aXBvcHVsYXRpb24gTW9kZWwKK19VSV9NdWx0aXBvcHVsYXRpb25Nb2RlbFdpemFyZF9kZXNjcmlwdGlvbiA9IENyZWF0ZSBhIG5ldyBNdWx0aXBvcHVsYXRpb24gbW9kZWwKKworX1VJX011bHRpcG9wdWxhdGlvbkVkaXRvcl9sYWJlbCA9IE11bHRpcG9wdWxhdGlvbiBNb2RlbCBFZGl0b3IKKworX1VJX011bHRpcG9wdWxhdGlvbkVkaXRvckZpbGVuYW1lRGVmYXVsdEJhc2UgPSBNeQorX1VJX011bHRpcG9wdWxhdGlvbkVkaXRvckZpbGVuYW1lRXh0ZW5zaW9ucyA9IG11bHRpcG9wdWxhdGlvbgorCitfVUlfV2l6YXJkX2xhYmVsID0gTmV3CisKK19XQVJOX0ZpbGVuYW1lRXh0ZW5zaW9uID0gVGhlIGZpbGUgbmFtZSBtdXN0IGVuZCBpbiAnJy57MH0nJworX1dBUk5fRmlsZW5hbWVFeHRlbnNpb25zID0gVGhlIGZpbGUgbmFtZSBtdXN0IGhhdmUgb25lIG9mIHRoZSBmb2xsb3dpbmcgZXh0ZW5zaW9uczogezB9CisKK19VSV9Nb2RlbE9iamVjdCA9ICZNb2RlbCBPYmplY3QKK19VSV9YTUxFbmNvZGluZyA9ICZYTUwgRW5jb2RpbmcKK19VSV9YTUxFbmNvZGluZ0Nob2ljZXMgPSBVVEYtOCBBU0NJSSBVVEYtMTYgVVRGLTE2QkUgVVRGLTE2TEUgSVNPLTg4NTktMQorX1VJX1dpemFyZF9pbml0aWFsX29iamVjdF9kZXNjcmlwdGlvbiA9IFNlbGVjdCBhIG1vZGVsIG9iamVjdCB0byBjcmVhdGUKKworX1VJX0ZpbGVDb25mbGljdF9sYWJlbCA9IEZpbGUgQ29uZmxpY3QKK19XQVJOX0ZpbGVDb25mbGljdCA9IFRoZXJlIGFyZSB1bnNhdmVkIGNoYW5nZXMgdGhhdCBjb25mbGljdCB3aXRoIGNoYW5nZXMgbWFkZSBvdXRzaWRlIHRoZSBlZGl0b3IuICBEbyB5b3Ugd2lzaCB0byBkaXNjYXJkIHRoaXMgZWRpdG9yJ3MgY2hhbmdlcz8KKwpkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMubXVsdGlwb3B1bGF0aW9uL3BsdWdpbi54bWwgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy5tdWx0aXBvcHVsYXRpb24vcGx1Z2luLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNGI4Yjg2Ci0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMubXVsdGlwb3B1bGF0aW9uL3BsdWdpbi54bWwKQEAgLTAsMCArMSw1MSBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzw/ZWNsaXBzZSB2ZXJzaW9uPSIzLjAiPz4KKworPCEtLQorIDxjb3B5cmlnaHQ+CisgPC9jb3B5cmlnaHQ+CisKKyAkSWQkCistLT4KKworPHBsdWdpbj4KKworICAgPGV4dGVuc2lvbiBwb2ludD0ib3JnLmVjbGlwc2UudWkubmV3V2l6YXJkcyI+CisgICAgICA8Y2F0ZWdvcnkKKyAgICAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5lbWYuZWNvcmUuV2l6YXJkLmNhdGVnb3J5LklEIgorICAgICAgICAgICAgbmFtZT0iJV9VSV9XaXphcmRfY2F0ZWdvcnkiLz4KKyAgICAgIDx3aXphcmQKKyAgICAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMubXVsdGlwb3B1bGF0aW9uLnByZXNlbnRhdGlvbi5NdWx0aXBvcHVsYXRpb25Nb2RlbFdpemFyZElEIgorICAgICAgICAgICAgbmFtZT0iJV9VSV9NdWx0aXBvcHVsYXRpb25Nb2RlbFdpemFyZF9sYWJlbCIKKyAgICAgICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMubXVsdGlwb3B1bGF0aW9uLnByZXNlbnRhdGlvbi5NdWx0aXBvcHVsYXRpb25Nb2RlbFdpemFyZCIKKyAgICAgICAgICAgIGNhdGVnb3J5PSJvcmcuZWNsaXBzZS5lbWYuZWNvcmUuV2l6YXJkLmNhdGVnb3J5LklEIgorICAgICAgICAgICAgaWNvbj0iaWNvbnMvZnVsbC9vYmoxNi9NdWx0aXBvcHVsYXRpb25Nb2RlbEZpbGUuZ2lmIj4KKyAgICAgICAgIDxkZXNjcmlwdGlvbj4lX1VJX011bHRpcG9wdWxhdGlvbk1vZGVsV2l6YXJkX2Rlc2NyaXB0aW9uPC9kZXNjcmlwdGlvbj4KKyAgICAgICAgIDxzZWxlY3Rpb24gY2xhc3M9Im9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklSZXNvdXJjZSIvPgorICAgICAgPC93aXphcmQ+CisgICA8L2V4dGVuc2lvbj4KKworICAgPGV4dGVuc2lvbiBwb2ludD0ib3JnLmVjbGlwc2UudWkuZWRpdG9ycyI+CisgICAgICA8ZWRpdG9yCisgICAgICAgICAgICBpZD0ib3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLm11bHRpcG9wdWxhdGlvbi5wcmVzZW50YXRpb24uTXVsdGlwb3B1bGF0aW9uRWRpdG9ySUQiCisgICAgICAgICAgICBuYW1lPSIlX1VJX011bHRpcG9wdWxhdGlvbkVkaXRvcl9sYWJlbCIKKyAgICAgICAgICAgIGljb249Imljb25zL2Z1bGwvb2JqMTYvTXVsdGlwb3B1bGF0aW9uTW9kZWxGaWxlLmdpZiIKKyAgICAgICAgICAgIGV4dGVuc2lvbnM9Im11bHRpcG9wdWxhdGlvbiIKKyAgICAgICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMubXVsdGlwb3B1bGF0aW9uLnByZXNlbnRhdGlvbi5NdWx0aXBvcHVsYXRpb25FZGl0b3IiCisgICAgICAgICAgICBjb250cmlidXRvckNsYXNzPSJvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMubXVsdGlwb3B1bGF0aW9uLnByZXNlbnRhdGlvbi5NdWx0aXBvcHVsYXRpb25BY3Rpb25CYXJDb250cmlidXRvciI+CisgICAgICA8L2VkaXRvcj4KKyAgIDwvZXh0ZW5zaW9uPgorICAgPGV4dGVuc2lvbgorICAgICAgICAgcG9pbnQ9Im9yZy5lY2xpcHNlLnVpLnN0YXJ0dXAiPgorICAgICAgICAgPHN0YXJ0dXAKKyAgICAgICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5tdWx0aXBvcHVsYXRpb24ucHJlc2VudGF0aW9uLk11bHRpUG9wdWxhdGlvblByb3BlcnR5U3RyaW5nUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSI+CisgICAgIDwvc3RhcnR1cD4KKyAgIDwvZXh0ZW5zaW9uPgorCisgICA8ZXh0ZW5zaW9uCisgICAgICAgIHBvaW50PSJvcmcuZWNsaXBzZS51aS5zdGFydHVwIj4KKyAgICAgPHN0YXJ0dXAKKyAgICAgICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy5tdWx0aXBvcHVsYXRpb24uYWRhcHRlcnMuTXVsdGlEaXNlYXNlTmV3TW9kaWZpZXJQYWdlQWRhcHRlckZhY3RvcnkiPjwvc3RhcnR1cD4KKyAgPC9leHRlbnNpb24+CisgIAorPC9wbHVnaW4+CmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy5tdWx0aXBvcHVsYXRpb24vcGx1Z2luX2RlLnByb3BlcnRpZXMgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy5tdWx0aXBvcHVsYXRpb24vcGx1Z2luX2RlLnByb3BlcnRpZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzJjYzIxNAotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzLm11bHRpcG9wdWxhdGlvbi9wbHVnaW5fZGUucHJvcGVydGllcwpAQCAtMCwwICsxLDU3IEBACisKKyMgPGNvcHlyaWdodD4KKyMgPC9jb3B5cmlnaHQ+CisjCisjICRJZCQKKworcGx1Z2luTmFtZT1NdWx0aS1CZXZcdTAwZjZsa2VydW5nc2VkaXRvcgorcHJvdmlkZXJOYW1lPUVjbGlwc2Uub3JnCisKK19VSV9NdWx0aXBvcHVsYXRpb25FZGl0b3JfbWVudT0mTXVsdGlwb3B1bGF0aW9uIEVkaXRvcgorCitfVUlfQ3JlYXRlQ2hpbGRfbWVudV9pdGVtPSZOZXcgQ2hpbGQKK19VSV9DcmVhdGVTaWJsaW5nX21lbnVfaXRlbT1OJmV1ZXMgR2VzY2h3aXN0ZXJ0ZWlsCisKK19VSV9TaG93UHJvcGVydGllc1ZpZXdfbWVudV9pdGVtPVNob3cgJiBQcm9wZXJ0aWVzIFZpZXcKK19VSV9SZWZyZXNoVmlld2VyX21lbnVfaXRlbT0mUmVmcmVzaAorCitfVUlfU2VsZWN0aW9uUGFnZV9sYWJlbD1BdXN3YWhsCitfVUlfUGFyZW50UGFnZV9sYWJlbD1FbHRlcm50ZWlsCitfVUlfTGlzdFBhZ2VfbGFiZWw9TGlzdGUKK19VSV9UcmVlUGFnZV9sYWJlbD1CYXVtCitfVUlfVGFibGVQYWdlX2xhYmVsPVRhYmVsbGUKK19VSV9UcmVlV2l0aENvbHVtbnNQYWdlX2xhYmVsPUJhdW0gbWl0IFNwYWx0ZW4KK19VSV9PYmplY3RDb2x1bW5fbGFiZWw9T2JqZWt0CitfVUlfU2VsZkNvbHVtbl9sYWJlbD1TZWxic3QKKworX1VJX05vT2JqZWN0U2VsZWN0ZWQ9TmljaHRzIGF1c2dld1x1MDBlNGhsdAorX1VJX1NpbmdsZU9iamVjdFNlbGVjdGVkPUF1c2dld1x1MDBlNGhsdGVzIE9iamVrdDogezB9CitfVUlfTXVsdGlPYmplY3RTZWxlY3RlZD1BdXNnZXdcdTAwZTRobHRlIHswfSBPYmpla3RlCisKK19VSV9PcGVuRWRpdG9yRXJyb3JfbGFiZWw9RWRpdG9yIFx1MDBmNmZmbmVuCisKK19VSV9XaXphcmRfY2F0ZWdvcnk9QmVpc3BpZWwgRU1GIE1vZGVsbCBFcnN0ZWxsdW5nc2Fzc2lzdGVudAorCitfVUlfQ3JlYXRlTW9kZWxFcnJvcl9tZXNzYWdlPUF1ZmdldHJldGVuZSBQcm9ibGVtZSBpbiBkZXIgRGF0ZWkgInswfSIKKworX1VJX011bHRpcG9wdWxhdGlvbk1vZGVsV2l6YXJkX2xhYmVsPU11bHRpLUJldlx1MDBmNmxrZXJ1bmdzbW9kZWxsCitfVUlfTXVsdGlwb3B1bGF0aW9uTW9kZWxXaXphcmRfZGVzY3JpcHRpb249TmV1ZXMgTXVsdGliZXZcdTAwZjZsa2VydW5ncy1Nb2RlbGwgZXJzdGVsbGVuCisKK19VSV9NdWx0aXBvcHVsYXRpb25FZGl0b3JfbGFiZWw9TXVsdGktQmV2XHUwMGY2bGtlcnVuZ3Ntb2RlbGwtRWRpdG9yCisKK19VSV9NdWx0aXBvcHVsYXRpb25FZGl0b3JGaWxlbmFtZURlZmF1bHRCYXNlPU1laW4KK19VSV9NdWx0aXBvcHVsYXRpb25FZGl0b3JGaWxlbmFtZUV4dGVuc2lvbnM9TXVsdGliZXZcdTAwZjZsa2VydW5nCisKK19VSV9XaXphcmRfbGFiZWw9TmV1CisKK19XQVJOX0ZpbGVuYW1lRXh0ZW5zaW9uPURlciBEYXRlaW5hbWUgbXVzcyBhdWYgIi57MH0iIGVuZGVuCitfV0FSTl9GaWxlbmFtZUV4dGVuc2lvbnM9RGVyIERhdGVpbmFtZSBtdXNzIGVpbmUgZGVyIGZvbGdlbmRlbiBFbmR1bmdlbiBoYWJlbjogezB9CisKK19VSV9Nb2RlbE9iamVjdD0mTW9kZWwgT2JqZWN0CitfVUlfWE1MRW5jb2Rpbmc9JlhNTCBFbmNvZGluZworX1VJX1hNTEVuY29kaW5nQ2hvaWNlcz1VVEYtOCBBU0NJSSBVVEYtMTYgVVRGLTE2QkUgVVRGLTE2TEUgSVNPLTg4NTktMQorX1VJX1dpemFyZF9pbml0aWFsX29iamVjdF9kZXNjcmlwdGlvbj1adSBlcnpldWdlbmRlcyBNb2RlbGxvYmpla3Qgd1x1MDBlNGhsZW4KKworX1VJX0ZpbGVDb25mbGljdF9sYWJlbD1EYXRlaWtvbmZsaWt0CitfV0FSTl9GaWxlQ29uZmxpY3Q9RXMgZ2lidCBuaWNodCBnZXNwZWljaGVydGUgXHUwMGM0bmRlcnVuZ2VuLCBkaWUgS29uZmxpa3RlIG1pdCBcdTAwYzRuZGVydW5nZW4gYXVcdTAwZGZlcmhhbGIgZGVzIEVkaXRvcnMgZXJ6ZXVnZW4uIE1cdTAwZjZjaHRlbiBTaWUgZGllIFx1MDBjNG5kZXJ1bmdlbiBpbSBFZGl0b3IgdmVyd2VyZmVuPworCmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy5tdWx0aXBvcHVsYXRpb24vcGx1Z2luX2tyLnByb3BlcnRpZXMgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy5tdWx0aXBvcHVsYXRpb24vcGx1Z2luX2tyLnByb3BlcnRpZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTNlYjBiNQotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzLm11bHRpcG9wdWxhdGlvbi9wbHVnaW5fa3IucHJvcGVydGllcwpAQCAtMCwwICsxLDU3IEBACisKKyMgPGNvcHlyaWdodD4KKyMgPC9jb3B5cmlnaHQ+CisjCisjICRJZCQKKworcGx1Z2luTmFtZT1cdWJhNDBcdWQyZjBcdWM3NzhcdWFkNmMgXHVkM2I4XHVjOWQxXHVhZTMwCitwcm92aWRlck5hbWU9RWNsaXBzZS5vcmcKKworX1VJX011bHRpcG9wdWxhdGlvbkVkaXRvcl9tZW51PSZNdWx0aXBvcHVsYXRpb24gRWRpdG9yCisKK19VSV9DcmVhdGVDaGlsZF9tZW51X2l0ZW09Jk5ldyBDaGlsZAorX1VJX0NyZWF0ZVNpYmxpbmdfbWVudV9pdGVtPU4mICBcdWQ2MTVcdWM4MWMgXHVjNzkwXHViOWU0CisKK19VSV9TaG93UHJvcGVydGllc1ZpZXdfbWVudV9pdGVtPVx1ZDQ1Y1x1YzJkYyBcdWJjMGYgXHVjMThkXHVjMTMxXHViY2Y0XHVhZTMwCitfVUlfUmVmcmVzaFZpZXdlcl9tZW51X2l0ZW09JlJlZnJlc2gKKworX1VJX1NlbGVjdGlvblBhZ2VfbGFiZWw9XHVjMTIwXHVkMGRkCitfVUlfUGFyZW50UGFnZV9sYWJlbD1cdWJkODBcdWJhYTgKK19VSV9MaXN0UGFnZV9sYWJlbD1cdWJhYTlcdWI4NWQKK19VSV9UcmVlUGFnZV9sYWJlbD1cdWIwOThcdWJiMzQKK19VSV9UYWJsZVBhZ2VfbGFiZWw9XHVkMTRjXHVjNzc0XHViZTE0CitfVUlfVHJlZVdpdGhDb2x1bW5zUGFnZV9sYWJlbD1cdWIwOThcdWJiMzRcdWM2NDAgXHVjNWY0CitfVUlfT2JqZWN0Q29sdW1uX2xhYmVsPVx1YWMxY1x1Y2NiNAorX1VJX1NlbGZDb2x1bW5fbGFiZWw9XHVjMTQwXHVkNTA0CisKK19VSV9Ob09iamVjdFNlbGVjdGVkPVx1YzU0NFx1YmIzNFx1YWM4M1x1YjNjNCBcdWM1NDggXHVjMTIwXHVkMGRkXHVkNTY4CitfVUlfU2luZ2xlT2JqZWN0U2VsZWN0ZWQ9XHVjMTIwXHVkMGRkXHVkNTVjIFx1YWMxZFx1Y2NiNCA6IHswfQorX1VJX011bHRpT2JqZWN0U2VsZWN0ZWQ9XHVjMTIwXHVkMGRkXHViNDFjIHswfSBcdWFjMWRcdWNjYjQKKworX1VJX09wZW5FZGl0b3JFcnJvcl9sYWJlbD1cdWM2MjRcdWQ1MDggXHVjNWQwXHViNTE0XHVkMTMwCisKK19VSV9XaXphcmRfY2F0ZWdvcnk9XHVjNjA4XHVjODFjIEVNRiBcdWJhYThcdWIzNzggXHVjMGRkXHVjMTMxIFx1YjljOFx1YmM5NVx1YzBhYworCitfVUlfQ3JlYXRlTW9kZWxFcnJvcl9tZXNzYWdlPVx1ZDMwY1x1Yzc3YyAnezB9ICJcdWM1ZDBcdWMxMWMgXHViYjM4XHVjODFjIFx1YmMxY1x1YzBkZAorCitfVUlfTXVsdGlwb3B1bGF0aW9uTW9kZWxXaXphcmRfbGFiZWw9XHViYTQwXHVkMmYwXHVjNzc4XHVhZDZjIFx1YmFhOFx1YjM3OAorX1VJX011bHRpcG9wdWxhdGlvbk1vZGVsV2l6YXJkX2Rlc2NyaXB0aW9uPVx1YzBjOFx1Yjg1Y1x1YzZiNCBcdWIyZTRcdWMyMThcdWM3NzhcdWFkNmMgXHViYWE4XHViMzc4IFx1YjljY1x1YjRlNFx1YWUzMAorCitfVUlfTXVsdGlwb3B1bGF0aW9uRWRpdG9yX2xhYmVsPVx1YmE0MFx1ZDJmMFx1Yzc3OFx1YWQ2YyBcdWJhYThcdWIzNzggXHVkM2I4XHVjOWQxXHVhZTMwCisKK19VSV9NdWx0aXBvcHVsYXRpb25FZGl0b3JGaWxlbmFtZURlZmF1bHRCYXNlPVx1YjA5OFx1Yzc1OAorX1VJX011bHRpcG9wdWxhdGlvbkVkaXRvckZpbGVuYW1lRXh0ZW5zaW9ucz1cdWIyZTRcdWMyMThcdWM3NzhcdWFkNmMKKworX1VJX1dpemFyZF9sYWJlbD1cdWMwYzhcdWI4NWNcdWM2YjQKKworX1dBUk5fRmlsZW5hbWVFeHRlbnNpb249XHVkMzBjXHVjNzdjIFx1Yzc3NFx1Yjk4NFx1Yzc0MCAiLnswfSJcdWI4NWMgXHViMDVkXHViMDk4XHVjNTdjXHVkNTY4LgorX1dBUk5fRmlsZW5hbWVFeHRlbnNpb25zPVx1ZDMwY1x1Yzc3YyBcdWM3NzRcdWI5ODRcdWM3NDAgXHViMmU0XHVjNzRjIFx1ZDY1NVx1YzdhNVx1Yzc5MCBcdWM5MTEgXHVkNTU4XHViMDk4XHViOTdjIFx1YWMwMFx1YzgzOFx1YzU3Y1x1ZDU2OCA6IHswfQorCitfVUlfTW9kZWxPYmplY3Q9Jk1vZGVsIE9iamVjdAorX1VJX1hNTEVuY29kaW5nPSZYTUwgRW5jb2RpbmcKK19VSV9YTUxFbmNvZGluZ0Nob2ljZXM9VVRGIC0gOCBBU0NJSSBVVEYgLSAxNiBVVEYgLSAxNkJFIFVURiAtIDE2TEUgSVNPIC0gODg1OSAtIDEKK19VSV9XaXphcmRfaW5pdGlhbF9vYmplY3RfZGVzY3JpcHRpb249XHVjMGRkXHVjMTMxXHVkNTYwIFx1YmFhOFx1YjM3OCBcdWFjMWNcdWNjYjQgXHVjMTIwXHVkMGRkCisKK19VSV9GaWxlQ29uZmxpY3RfbGFiZWw9XHVkMzBjXHVjNzdjIFx1Y2RhOVx1YjNjYworX1dBUk5fRmlsZUNvbmZsaWN0PVx1YzgwMFx1YzdhNVx1YjQxOFx1YzljMCBcdWM1NGFcdWM3NDAgXHVjMGFjXHVkNTZkXHViNGU0XHVjNzc0IFx1ZDNiOFx1YzlkMVx1YWUzMCBcdWM2NzhcdWJkODBcdWM3NTggXHViY2MwXHVhY2JkIFx1YzBhY1x1ZDU2ZFx1YjRlNFx1YWNmYyBcdWNkYTlcdWIzY2NcdWQ1NjguIFx1Yzc3NCBcdWQzYjhcdWM5ZDFcdWFlMzBcdWM3NTggXHViY2MwXHVhY2JkIFx1YzBhY1x1ZDU2ZFx1YjRlNFx1Yzc0NCBcdWNkZThcdWMxOGMgXHVkNTU4XHVjMmRjXHVhY2EwXHVjMmI1XHViMmM4XHVhZTRjPworCmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy5tdWx0aXBvcHVsYXRpb24vcGx1Z2luX3poLnByb3BlcnRpZXMgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy5tdWx0aXBvcHVsYXRpb24vcGx1Z2luX3poLnByb3BlcnRpZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGZiNDMxNAotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzLm11bHRpcG9wdWxhdGlvbi9wbHVnaW5femgucHJvcGVydGllcwpAQCAtMCwwICsxLDU3IEBACisKKyMgPGNvcHlyaWdodD4KKyMgPC9jb3B5cmlnaHQ+CisjCisjICRJZCQKKworcGx1Z2luTmFtZT1cdTU5MWFcdTc5Y2RcdTc5Y2RcdTdmYTRcdTdmMTZcdThmOTFcdTU2NjgKK3Byb3ZpZGVyTmFtZT1FY2xpcHNlLm9yZworCitfVUlfTXVsdGlwb3B1bGF0aW9uRWRpdG9yX21lbnU9Jk11bHRpcG9wdWxhdGlvbiBFZGl0b3IKKworX1VJX0NyZWF0ZUNoaWxkX21lbnVfaXRlbT0mTmV3IENoaWxkCitfVUlfQ3JlYXRlU2libGluZ19tZW51X2l0ZW09XHU2NWIwXHU3NTFmXHU2MjEwXHU0ZTAwXHU0ZTJhXHU1MTQ0XHU1ZjFmXHU3YzdiCisKK19VSV9TaG93UHJvcGVydGllc1ZpZXdfbWVudV9pdGVtPVx1NjYzZVx1NzkzYVx1NTQ4Y1x1NWM1ZVx1NjAyN1x1NjdlNVx1NzcwYgorX1VJX1JlZnJlc2hWaWV3ZXJfbWVudV9pdGVtPSZSZWZyZXNoCisKK19VSV9TZWxlY3Rpb25QYWdlX2xhYmVsPVx1OTAwOVx1NjJlOQorX1VJX1BhcmVudFBhZ2VfbGFiZWw9XHU1YmI2XHU5NTdmCitfVUlfTGlzdFBhZ2VfbGFiZWw9XHU3NmVlXHU1ZjU1CitfVUlfVHJlZVBhZ2VfbGFiZWw9XHU2ODExCitfVUlfVGFibGVQYWdlX2xhYmVsPVx1ODg2OAorX1VJX1RyZWVXaXRoQ29sdW1uc1BhZ2VfbGFiZWw9XHU1MjA2XHU1MjE3XHU3Njg0XHU2ODExCitfVUlfT2JqZWN0Q29sdW1uX2xhYmVsPVx1NWJmOVx1OGM2MQorX1VJX1NlbGZDb2x1bW5fbGFiZWw9XHU4MWVhXHU1ZGYxCisKK19VSV9Ob09iamVjdFNlbGVjdGVkPVx1NjVlMFx1OTAwOVx1NWI5YVx1NTE4NVx1NWJiOQorX1VJX1NpbmdsZU9iamVjdFNlbGVjdGVkPVx1OTAwOVx1NjJlOVx1NWJmOVx1OGM2MVx1ZmYxYXswfQorX1VJX011bHRpT2JqZWN0U2VsZWN0ZWQ9XHU5MDA5XHU2MmU5ezB9XHU1YmY5XHU4YzYxCisKK19VSV9PcGVuRWRpdG9yRXJyb3JfbGFiZWw9XHU2MjUzXHU1ZjAwXHU3ZjE2XHU4ZjkxXHU1NjY4CisKK19VSV9XaXphcmRfY2F0ZWdvcnk9XHU0ZjhiXHU1OTgyRU1GXHU2YTIxXHU1NzhiXHU1MjFiXHU1ZWZhXHU1NDExXHU1YmZjCisKK19VSV9DcmVhdGVNb2RlbEVycm9yX21lc3NhZ2U9XHU1NzI4XHU2NTg3XHU0ZWY2XHUyMDFjezB9XHUyMDFkXHU0ZTJkXHU5MDQ3XHU1MjMwXHU3Njg0XHU5NWVlXHU5ODk4CisKK19VSV9NdWx0aXBvcHVsYXRpb25Nb2RlbFdpemFyZF9sYWJlbD1cdTU5MWFcdTc5Y2RcdTc5Y2RcdTdmYTRcdTZhMjFcdTU3OGIKK19VSV9NdWx0aXBvcHVsYXRpb25Nb2RlbFdpemFyZF9kZXNjcmlwdGlvbj1cdTUyMWJcdTVlZmFcdTRlMDBcdTRlMmFcdTY1YjBcdTc2ODRcdTU5MWFcdTdjN2JcdTU3OGJcdTc5Y2RcdTdmYTRcdTZhMjFcdTU3OGIKKworX1VJX011bHRpcG9wdWxhdGlvbkVkaXRvcl9sYWJlbD1cdTU5MWFcdTc5Y2RcdTc5Y2RcdTdmYTRcdTZhMjFcdTU3OGJcdTdmMTZcdThmOTFcdTU2NjgKKworX1VJX011bHRpcG9wdWxhdGlvbkVkaXRvckZpbGVuYW1lRGVmYXVsdEJhc2U9XHU2MjExXHU3Njg0CitfVUlfTXVsdGlwb3B1bGF0aW9uRWRpdG9yRmlsZW5hbWVFeHRlbnNpb25zPVx1NTkxYVx1NzljZFx1NzljZFx1N2ZhNFx1NzY4NAorCitfVUlfV2l6YXJkX2xhYmVsPVx1NjViMFx1NWVmYQorCitfV0FSTl9GaWxlbmFtZUV4dGVuc2lvbj1cdTY1ODdcdTRlZjZcdTU0MGRcdTVmYzVcdTk4N2JcdTRlZTUnezB9ICcnXHU3ZWQzXHU1YzNlCitfV0FSTl9GaWxlbmFtZUV4dGVuc2lvbnM9XHU2NTg3XHU0ZWY2XHU1NDBkXHU1ZmM1XHU5ODdiXHU1MTc3XHU2NzA5XHU0ZWU1XHU0ZTBiXHU2MjY5XHU1YzU1XHU1NDBkXHU0ZTRiXHU0ZTAwXHVmZjFhezB9CisKK19VSV9Nb2RlbE9iamVjdD0mTW9kZWwgT2JqZWN0CitfVUlfWE1MRW5jb2Rpbmc9JlhNTCBFbmNvZGluZworX1VJX1hNTEVuY29kaW5nQ2hvaWNlcz1VVEYtOCBBU0NJSSBVVEYtMTYgVVRGLTE2QkUgVVRGLTE2TEUgSVNPLTg4NTktMQorX1VJX1dpemFyZF9pbml0aWFsX29iamVjdF9kZXNjcmlwdGlvbj1cdTkwMDlcdTYyZTlcdTUyMWJcdTVlZmFcdTRlMDBcdTRlMmFcdTZhMjFcdTU3OGJcdTViZjlcdThjNjEKKworX1VJX0ZpbGVDb25mbGljdF9sYWJlbD1cdTY1ODdcdTRlZjZcdTUxYjJcdTdhODEKK19XQVJOX0ZpbGVDb25mbGljdD1cdTY3MDlcdTY3MmFcdTRmZGRcdTViNThcdTc2ODRcdTY2ZjRcdTY1MzlcdTRlMGVcdTdmMTZcdThmOTFcdTU2NjhcdTU5MTZcdTc2ODRcdTY2ZjRcdTY1MzlcdTUxYjJcdTdhODFcdTMwMDJcdTRmNjBcdTYwZjNcdTY1M2VcdTVmMDNcdThmZDlcdTRlMmFcdTdmMTZcdThmOTFcdTU2NjhcdTc2ODRcdTY2ZjRcdTY1MzlcdTU0MTdcdWZmMWYKKwpkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMubXVsdGlwb3B1bGF0aW9uL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvbXVsdGlwb3B1bGF0aW9uL3ByZXNlbnRhdGlvbi9NdWx0aVBvcHVsYXRpb25EaXNlYXNlTW9kZWxQcm9wZXJ0eUVkaXRvci5qYXZhIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMubXVsdGlwb3B1bGF0aW9uL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvbXVsdGlwb3B1bGF0aW9uL3ByZXNlbnRhdGlvbi9NdWx0aVBvcHVsYXRpb25EaXNlYXNlTW9kZWxQcm9wZXJ0eUVkaXRvci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUwNTNmOGIKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy5tdWx0aXBvcHVsYXRpb24vc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9tdWx0aXBvcHVsYXRpb24vcHJlc2VudGF0aW9uL011bHRpUG9wdWxhdGlvbkRpc2Vhc2VNb2RlbFByb3BlcnR5RWRpdG9yLmphdmEKQEAgLTAsMCArMSw1ODUgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLm11bHRpcG9wdWxhdGlvbi5wcmVzZW50YXRpb247CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDcsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgamF2YS51dGlsLkFycmF5czsKK2ltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuTWFwOworCitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3Q7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzc2lmaWVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FU3RydWN0dXJhbEZlYXR1cmU7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuQ29tcG9zZWRBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbVByb3BlcnR5RGVzY3JpcHRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbVByb3BlcnR5U291cmNlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uQ29tbW9uRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLkNvbW1vblBhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5Eb3VibGVWYWx1ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLkRvdWJsZVZhbHVlTGlzdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLkRvdWJsZVZhbHVlTWF0cml4OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5tdWx0aXBvcHVsYXRpb24uTXVsdGlQb3B1bGF0aW9uU0VJUkRpc2Vhc2VNb2RlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMubXVsdGlwb3B1bGF0aW9uLk11bHRpUG9wdWxhdGlvblNJRGlzZWFzZU1vZGVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5tdWx0aXBvcHVsYXRpb24uTXVsdGlQb3B1bGF0aW9uU0lSRGlzZWFzZU1vZGVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5tdWx0aXBvcHVsYXRpb24uTXVsdGlQb3B1bGF0aW9uU2Vhc29uYWxEaXNlYXNlTW9kZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLm11bHRpcG9wdWxhdGlvbi5NdWx0aXBvcHVsYXRpb25QYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5EaXNlYXNlTW9kZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS51aS5hZGFwdGVycy5wcm9wZXJ0eXN0cmluZ3MuUHJvcGVydHlTdHJpbmdQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnVpLmFkYXB0ZXJzLnByb3BlcnR5c3RyaW5ncy5Qcm9wZXJ0eVN0cmluZ1Byb3ZpZGVyQWRhcHRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnVpLmFkYXB0ZXJzLnByb3BlcnR5c3RyaW5ncy5Qcm9wZXJ0eVN0cmluZ1Byb3ZpZGVyQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS51aS53aWRnZXRzLk1hdHJpeEVkaXRvckRpYWxvZzsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnVpLndpZGdldHMuTWF0cml4RWRpdG9yV2lkZ2V0Lk1hdHJpeEVkaXRvclZhbGlkYXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnVpLndpemFyZHMuU3RhbmRhcmREaXNlYXNlTW9kZWxQcm9wZXJ0eUVkaXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuU1dUOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuTW9kaWZ5TGlzdGVuZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5TZWxlY3Rpb25FdmVudDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLlNlbGVjdGlvbkxpc3RlbmVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5sYXlvdXQuR3JpZERhdGE7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQnV0dG9uOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5MYWJlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5TaGVsbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5wbHVnaW4uQWJzdHJhY3RVSVBsdWdpbjsKKworLyoqCisgKgorICovCitwdWJsaWMgY2xhc3MgTXVsdGlQb3B1bGF0aW9uRGlzZWFzZU1vZGVsUHJvcGVydHlFZGl0b3IgZXh0ZW5kcworCQlTdGFuZGFyZERpc2Vhc2VNb2RlbFByb3BlcnR5RWRpdG9yIHsKKworCXByb3RlY3RlZCBmaW5hbCBNYXA8RVN0cnVjdHVyYWxGZWF0dXJlLCBTdHJpbmdbXT4gbWF0cml4TWFwID0gbmV3IEhhc2hNYXA8RVN0cnVjdHVyYWxGZWF0dXJlLCBTdHJpbmdbXT4oKTsKKworCS8qKgorCSAqIEBwYXJhbSBwYXJlbnQKKwkgKiBAcGFyYW0gc3R5bGUKKwkgKiBAcGFyYW0gZGlzZWFzZU1vZGVsCisJICogQHBhcmFtIHByb2plY3RWYWxpZGF0b3IKKwkgKi8KKwlwdWJsaWMgTXVsdGlQb3B1bGF0aW9uRGlzZWFzZU1vZGVsUHJvcGVydHlFZGl0b3IoQ29tcG9zaXRlIHBhcmVudCwKKwkJCWludCBzdHlsZSwgRGlzZWFzZU1vZGVsIGRpc2Vhc2VNb2RlbCwKKwkJCU1vZGlmeUxpc3RlbmVyIHByb2plY3RWYWxpZGF0b3IsIElQcm9qZWN0IHByb2plY3QpIHsKKwkJc3VwZXIocGFyZW50LCBzdHlsZSwgZGlzZWFzZU1vZGVsLCBwcm9qZWN0VmFsaWRhdG9yLCBwcm9qZWN0KTsKKworCQlmaW5hbCBQcm9wZXJ0eVN0cmluZ1Byb3ZpZGVyQWRhcHRlciBwc3BhID0gKFByb3BlcnR5U3RyaW5nUHJvdmlkZXJBZGFwdGVyKSBQcm9wZXJ0eVN0cmluZ1Byb3ZpZGVyQWRhcHRlckZhY3RvcnkuSU5TVEFOQ0UKKwkJCQkuYWRhcHQoZGlzZWFzZU1vZGVsLCBQcm9wZXJ0eVN0cmluZ1Byb3ZpZGVyLmNsYXNzKTsKKwkJZmluYWwgQ29tcG9zZWRBZGFwdGVyRmFjdG9yeSBpdGVtUHJvdmlkZXJGYWN0b3J5ID0gbmV3IENvbXBvc2VkQWRhcHRlckZhY3RvcnkoCisJCQkJQ29tcG9zZWRBZGFwdGVyRmFjdG9yeS5EZXNjcmlwdG9yLlJlZ2lzdHJ5LklOU1RBTkNFKTsKKwkJZmluYWwgSUl0ZW1Qcm9wZXJ0eVNvdXJjZSBwcm9wZXJ0eVNvdXJjZSA9IChJSXRlbVByb3BlcnR5U291cmNlKSBpdGVtUHJvdmlkZXJGYWN0b3J5CisJCQkJLmFkYXB0KGRpc2Vhc2VNb2RlbCwgSUl0ZW1Qcm9wZXJ0eVNvdXJjZS5jbGFzcyk7CisJCWZpbmFsIExpc3Q8SUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I+IHByb3BlcnRpZXMgPSBwcm9wZXJ0eVNvdXJjZQorCQkJCS5nZXRQcm9wZXJ0eURlc2NyaXB0b3JzKGRpc2Vhc2VNb2RlbCk7CisKKwkJZm9yIChmaW5hbCBJSXRlbVByb3BlcnR5RGVzY3JpcHRvciBkZXNjcmlwdG9yIDogcHJvcGVydGllcykgeworCQkJZmluYWwgRVN0cnVjdHVyYWxGZWF0dXJlIGZlYXR1cmUgPSAoRVN0cnVjdHVyYWxGZWF0dXJlKSBkZXNjcmlwdG9yCisJCQkJCS5nZXRGZWF0dXJlKG51bGwpOworCQkJZmluYWwgRUNsYXNzaWZpZXIgdHlwZSA9IGZlYXR1cmUuZ2V0RVR5cGUoKTsKKworCQkJaWYgKHR5cGUgIT0gQ29tbW9uUGFja2FnZS5MaXRlcmFscy5TVFJJTkdfVkFMVUVfTElTVAorCQkJCQkmJiB0eXBlICE9IENvbW1vblBhY2thZ2UuTGl0ZXJhbHMuRE9VQkxFX1ZBTFVFX0xJU1QKKwkJCQkJJiYgdHlwZSAhPSBDb21tb25QYWNrYWdlLkxpdGVyYWxzLkRPVUJMRV9WQUxVRV9NQVRSSVgpIHsKKwkJCQljb250aW51ZTsKKwkJCX0KKworCQkJTGFiZWwgbGFiZWwgPSBuZXcgTGFiZWwodGhpcywgU1dULk5PTkUpOworCQkJbGFiZWwuc2V0VGV4dChwc3BhLmdldFByb3BlcnR5TmFtZShkZXNjcmlwdG9yKSk7CisJCQlsYWJlbC5zZXRMYXlvdXREYXRhKG5ldyBHcmlkRGF0YShTV1QuRklMTCwgU1dULkNFTlRFUiwgdHJ1ZSwgZmFsc2UpKTsKKworCQkJQnV0dG9uIGJ1dHRvbiA9IG5ldyBCdXR0b24odGhpcywgU1dULk5PTkUpOworCisJCQlpZiAodHlwZS5nZXRDbGFzc2lmaWVySUQoKSA9PSBDb21tb25QYWNrYWdlLkRPVUJMRV9WQUxVRV9MSVNUCisJCQkJCXx8IHR5cGUuZ2V0Q2xhc3NpZmllcklEKCkgPT0gQ29tbW9uUGFja2FnZS5TVFJJTkdfVkFMVUVfTElTVCkKKwkJCQlidXR0b24uc2V0SW1hZ2UoQWJzdHJhY3RVSVBsdWdpbi5pbWFnZURlc2NyaXB0b3JGcm9tUGx1Z2luKAorCQkJCQkJIm9yZy5lY2xpcHNlLnN0ZW0udWkiLAorCQkJCQkJIi9pY29ucy9mdWxsL2N1c3RvbW9iajE2L0xpc3QuZ2lmIikuY3JlYXRlSW1hZ2UoKSk7CisJCQllbHNlCisJCQkJYnV0dG9uLnNldEltYWdlKEFic3RyYWN0VUlQbHVnaW4uaW1hZ2VEZXNjcmlwdG9yRnJvbVBsdWdpbigKKwkJCQkJCSJvcmcuZWNsaXBzZS5zdGVtLnVpIiwKKwkJCQkJCSIvaWNvbnMvZnVsbC9jdXN0b21vYmoxNi9NYXRyaXguZ2lmIikuY3JlYXRlSW1hZ2UoKSk7CisKKwkJCWJ1dHRvbi5zZXRMYXlvdXREYXRhKG5ldyBHcmlkRGF0YShHcmlkRGF0YS5FTkQpKTsKKwkJCWJ1dHRvbi5hZGRTZWxlY3Rpb25MaXN0ZW5lcihuZXcgU2VsZWN0aW9uTGlzdGVuZXIoKSB7CisKKwkJCQlAT3ZlcnJpZGUKKwkJCQlwdWJsaWMgdm9pZCB3aWRnZXRTZWxlY3RlZChTZWxlY3Rpb25FdmVudCBhcmcwKSB7CisJCQkJCVN0cmluZyB0aXRsZSA9IHBzcGEuZ2V0UHJvcGVydHlOYW1lKGRlc2NyaXB0b3IpOworCQkJCQlTdHJpbmdbXSBleGlzdGluZ1ZhbHMgPSBtYXRyaXhNYXAuZ2V0KGZlYXR1cmUpOworCQkJCQlzaG9ydCBjb2xzID0gZ2V0Q29sQ291bnQoZmVhdHVyZSk7CisJCQkJCXNob3J0IHJvd3MgPSBnZXRSb3dDb3VudChmZWF0dXJlKTsKKwkJCQkJU3RyaW5nW10gcm93bmFtZXMgPSBnZXRSb3dOYW1lcyhmZWF0dXJlKTsKKwkJCQkJU3RyaW5nW10gY29sbmFtZXMgPSBnZXRDb2xOYW1lcyhmZWF0dXJlKTsKKwkJCQkJYm9vbGVhbiBmaXhlZFNpemUgPSBnZXRGaXhlZFNpemUoZmVhdHVyZSk7CisJCQkJCU1hdHJpeEVkaXRvclZhbGlkYXRvciB2YWxpZGF0b3IgPSBnZXRWYWxpZGF0b3IoZmVhdHVyZSk7CisKKwkJCQkJLy8gUHJlLXBvcHVsYXRlIHdpdGggMCAoZGVmYXVsdCBmcm9tIEVNRiBub3QgcG9zc2libGUKKwkJCQkJLy8gc2luY2UgaXQncworCQkJCQkvLyBhIHJlZmVyZW5jZSkKKwkJCQkJaWYgKGV4aXN0aW5nVmFscyA9PSBudWxsCisJCQkJCQkJJiYgKHR5cGUuZ2V0Q2xhc3NpZmllcklEKCkgPT0gQ29tbW9uUGFja2FnZS5ET1VCTEVfVkFMVUVfTElTVCB8fCB0eXBlCisJCQkJCQkJCQkuZ2V0Q2xhc3NpZmllcklEKCkgPT0gQ29tbW9uUGFja2FnZS5ET1VCTEVfVkFMVUVfTUFUUklYKSkgeworCQkJCQkJZXhpc3RpbmdWYWxzID0gbmV3IFN0cmluZ1tjb2xzICogcm93c107CisJCQkJCQlmb3IgKGludCBpID0gMDsgaSA8IGNvbHMgKiByb3dzOyArK2kpCisJCQkJCQkJZXhpc3RpbmdWYWxzW2ldID0gIjAuMCI7CisJCQkJCX0KKworCQkJCQlTaGVsbCBzaGVsbCA9IE11bHRpUG9wdWxhdGlvbkRpc2Vhc2VNb2RlbFByb3BlcnR5RWRpdG9yLnRoaXMKKwkJCQkJCQkuZ2V0U2hlbGwoKTsKKwkJCQkJTWF0cml4RWRpdG9yRGlhbG9nIGRpYWxvZyA9IG5ldyBNYXRyaXhFZGl0b3JEaWFsb2coc2hlbGwsCisJCQkJCQkJU1dULk5PTkUsIHRpdGxlLCByb3dzLCBjb2xzLCByb3duYW1lcywgY29sbmFtZXMsCisJCQkJCQkJZXhpc3RpbmdWYWxzLCBmaXhlZFNpemUsIHZhbGlkYXRvcik7CisJCQkJCVN0cmluZ1tdIHJlcyA9IGRpYWxvZy5vcGVuKCk7CisKKwkJCQkJaWYgKHJlcyAhPSBudWxsKSB7CisJCQkJCQltYXRyaXhNYXAucHV0KGZlYXR1cmUsIHJlcyk7CisJCQkJCX0KKworCQkJCQlyZXNpemVMaXN0c0FuZE1hdHJpY2VzKCk7CisJCQkJfQorCisJCQkJQE92ZXJyaWRlCisJCQkJcHVibGljIHZvaWQgd2lkZ2V0RGVmYXVsdFNlbGVjdGVkKFNlbGVjdGlvbkV2ZW50IGFyZzApIHsKKwkJCQl9CisJCQl9KTsKKworCQkJZmluYWwgTGFiZWwgdW5pdExhYmVsID0gbmV3IExhYmVsKHRoaXMsIFNXVC5OT05FKTsKKwkJCXVuaXRMYWJlbC5zZXRUZXh0KHBzcGEuZ2V0UHJvcGVydHlVbml0cyhkZXNjcmlwdG9yKSk7CisJCQl1bml0TGFiZWwuc2V0TGF5b3V0RGF0YShuZXcgR3JpZERhdGEoU1dULkVORCwgU1dULkNFTlRFUiwgZmFsc2UsCisJCQkJCWZhbHNlKSk7CisJCX0KKwl9IC8vIE11bHRpRGlzZWFzZU1vZGVsUHJvcGVydHlFZGl0b3IKKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS51aS53aXphcmRzLlN0YW5kYXJkRGlzZWFzZU1vZGVsUHJvcGVydHlFZGl0b3IjcG9wdWxhdGUob3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLkRpc2Vhc2VNb2RlbCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBwb3B1bGF0ZShEaXNlYXNlTW9kZWwgZGlzZWFzZU1vZGVsKSB7CisJCXN1cGVyLnBvcHVsYXRlKGRpc2Vhc2VNb2RlbCk7CisKKwkJaWYgKGRpc2Vhc2VNb2RlbCBpbnN0YW5jZW9mIE11bHRpUG9wdWxhdGlvblNJRGlzZWFzZU1vZGVsKSB7CisJCQlNdWx0aVBvcHVsYXRpb25TSURpc2Vhc2VNb2RlbCBtb2RlbCA9IChNdWx0aVBvcHVsYXRpb25TSURpc2Vhc2VNb2RlbCkgZGlzZWFzZU1vZGVsOworCisJCQlTdHJpbmdbXSBzdmFscyA9IG1hdHJpeE1hcAorCQkJCQkuZ2V0KE11bHRpcG9wdWxhdGlvblBhY2thZ2UuTGl0ZXJhbHMuTVVMVElfUE9QVUxBVElPTl9TSV9ESVNFQVNFX01PREVMX19QT1BVTEFUSU9OX0dST1VQUyk7CisJCQlpZiAoc3ZhbHMgIT0gbnVsbCkgeworCQkJCW1vZGVsLnNldFBvcHVsYXRpb25Hcm91cHMoQ29tbW9uRmFjdG9yeS5lSU5TVEFOQ0UKKwkJCQkJCS5jcmVhdGVTdHJpbmdWYWx1ZUxpc3QoKSk7CisJCQkJZm9yIChTdHJpbmcgcyA6IHN2YWxzKSB7CisJCQkJCW9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uU3RyaW5nVmFsdWUgc3ZhbCA9IENvbW1vbkZhY3RvcnkuZUlOU1RBTkNFCisJCQkJCQkJLmNyZWF0ZVN0cmluZ1ZhbHVlKCk7CisJCQkJCXN2YWwuc2V0VmFsdWUocyk7CisJCQkJCW1vZGVsLmdldFBvcHVsYXRpb25Hcm91cHMoKS5nZXRWYWx1ZXMoKS5hZGQoc3ZhbCk7CisJCQkJfQorCQkJfQorCisJCQlzdmFscyA9IG1hdHJpeE1hcAorCQkJCQkuZ2V0KE11bHRpcG9wdWxhdGlvblBhY2thZ2UuTGl0ZXJhbHMuTVVMVElfUE9QVUxBVElPTl9TSV9ESVNFQVNFX01PREVMX19UUkFOU01JU1NJT05fUkFURSk7CisJCQlpZiAoc3ZhbHMgIT0gbnVsbCkgeworCQkJCWRvdWJsZVtdIGR2YWxzID0gZ2V0RG91YmxlQXJyYXkoc3ZhbHMpOworCQkJCWludCBncm91cHMgPSAoaW50KSBNYXRoLnNxcnQoZHZhbHMubGVuZ3RoKTsKKwkJCQltb2RlbC5zZXRUcmFuc21pc3Npb25SYXRlKENvbW1vbkZhY3RvcnkuZUlOU1RBTkNFCisJCQkJCQkuY3JlYXRlRG91YmxlVmFsdWVNYXRyaXgoKSk7CisJCQkJZm9yIChpbnQgciA9IDA7IHIgPCBncm91cHM7IHIrKykgeworCQkJCQlEb3VibGVWYWx1ZUxpc3QgbmwgPSBDb21tb25GYWN0b3J5LmVJTlNUQU5DRQorCQkJCQkJCS5jcmVhdGVEb3VibGVWYWx1ZUxpc3QoKTsKKwkJCQkJbW9kZWwuZ2V0VHJhbnNtaXNzaW9uUmF0ZSgpLmdldFZhbHVlTGlzdHMoKS5hZGQobmwpOworCQkJCQlmb3IgKGludCBjID0gMDsgYyA8IGdyb3VwczsgKytjKSB7CisJCQkJCQlEb3VibGVWYWx1ZSBkdmFsID0gQ29tbW9uRmFjdG9yeS5lSU5TVEFOQ0UKKwkJCQkJCQkJLmNyZWF0ZURvdWJsZVZhbHVlKCk7CisJCQkJCQlkdmFsLnNldFZhbHVlKGR2YWxzW3IgKiBncm91cHMgKyBjXSk7CisJCQkJCQlubC5nZXRWYWx1ZXMoKS5hZGQoZHZhbCk7CisJCQkJCX0KKwkJCQl9CisJCQl9CisKKwkJCXN2YWxzID0gbWF0cml4TWFwCisJCQkJCS5nZXQoTXVsdGlwb3B1bGF0aW9uUGFja2FnZS5MaXRlcmFscy5NVUxUSV9QT1BVTEFUSU9OX1NJX0RJU0VBU0VfTU9ERUxfX0lORkVDVElPVVNfTU9SVEFMSVRZX1JBVEUpOworCQkJaWYgKHN2YWxzICE9IG51bGwpIHsKKwkJCQlkb3VibGVbXSBkdmFscyA9IGdldERvdWJsZUFycmF5KHN2YWxzKTsKKwkJCQltb2RlbC5zZXRJbmZlY3Rpb3VzTW9ydGFsaXR5UmF0ZShDb21tb25GYWN0b3J5LmVJTlNUQU5DRQorCQkJCQkJLmNyZWF0ZURvdWJsZVZhbHVlTGlzdCgpKTsKKwkJCQlmb3IgKGRvdWJsZSBkIDogZHZhbHMpIHsKKwkJCQkJRG91YmxlVmFsdWUgZHZhbCA9IENvbW1vblBhY2thZ2UuZUlOU1RBTkNFCisJCQkJCQkJLmdldENvbW1vbkZhY3RvcnkoKS5jcmVhdGVEb3VibGVWYWx1ZSgpOworCQkJCQlkdmFsLnNldFZhbHVlKGQpOworCQkJCQltb2RlbC5nZXRJbmZlY3Rpb3VzTW9ydGFsaXR5UmF0ZSgpLmdldFZhbHVlcygpLmFkZChkdmFsKTsKKwkJCQl9CisJCQl9CisKKwkJCXN2YWxzID0gbWF0cml4TWFwCisJCQkJCS5nZXQoTXVsdGlwb3B1bGF0aW9uUGFja2FnZS5MaXRlcmFscy5NVUxUSV9QT1BVTEFUSU9OX1NJX0RJU0VBU0VfTU9ERUxfX1JFQ09WRVJZX1JBVEUpOworCQkJaWYgKHN2YWxzICE9IG51bGwpIHsKKwkJCQlkb3VibGVbXSBkdmFscyA9IGdldERvdWJsZUFycmF5KHN2YWxzKTsKKwkJCQltb2RlbC5zZXRSZWNvdmVyeVJhdGUoQ29tbW9uRmFjdG9yeS5lSU5TVEFOQ0UKKwkJCQkJCS5jcmVhdGVEb3VibGVWYWx1ZUxpc3QoKSk7CisJCQkJZm9yIChkb3VibGUgZCA6IGR2YWxzKSB7CisJCQkJCURvdWJsZVZhbHVlIGR2YWwgPSBDb21tb25GYWN0b3J5LmVJTlNUQU5DRQorCQkJCQkJCS5jcmVhdGVEb3VibGVWYWx1ZSgpOworCQkJCQlkdmFsLnNldFZhbHVlKGQpOworCQkJCQkoKE11bHRpUG9wdWxhdGlvblNJRGlzZWFzZU1vZGVsKSBkaXNlYXNlTW9kZWwpCisJCQkJCQkJLmdldFJlY292ZXJ5UmF0ZSgpLmdldFZhbHVlcygpLmFkZChkdmFsKTsKKwkJCQl9CisJCQl9CisJCX0KKworCQlpZiAoZGlzZWFzZU1vZGVsIGluc3RhbmNlb2YgTXVsdGlQb3B1bGF0aW9uU0VJUkRpc2Vhc2VNb2RlbCkgeworCQkJTXVsdGlQb3B1bGF0aW9uU0VJUkRpc2Vhc2VNb2RlbCBtb2RlbCA9IChNdWx0aVBvcHVsYXRpb25TRUlSRGlzZWFzZU1vZGVsKSBkaXNlYXNlTW9kZWw7CisKKwkJCVN0cmluZ1tdIHN2YWxzID0gbWF0cml4TWFwCisJCQkJCS5nZXQoTXVsdGlwb3B1bGF0aW9uUGFja2FnZS5MaXRlcmFscy5NVUxUSV9QT1BVTEFUSU9OX1NFSVJfRElTRUFTRV9NT0RFTF9fSU5DVUJBVElPTl9SQVRFKTsKKwkJCWlmIChzdmFscyAhPSBudWxsKSB7CisJCQkJZG91YmxlW10gZHZhbHMgPSBnZXREb3VibGVBcnJheShzdmFscyk7CisJCQkJbW9kZWwuc2V0SW5jdWJhdGlvblJhdGUoQ29tbW9uRmFjdG9yeS5lSU5TVEFOQ0UKKwkJCQkJCS5jcmVhdGVEb3VibGVWYWx1ZUxpc3QoKSk7CisJCQkJZm9yIChkb3VibGUgZCA6IGR2YWxzKSB7CisJCQkJCURvdWJsZVZhbHVlIGR2YWwgPSBDb21tb25GYWN0b3J5LmVJTlNUQU5DRQorCQkJCQkJCS5jcmVhdGVEb3VibGVWYWx1ZSgpOworCQkJCQlkdmFsLnNldFZhbHVlKGQpOworCQkJCQltb2RlbC5nZXRJbmN1YmF0aW9uUmF0ZSgpLmdldFZhbHVlcygpLmFkZChkdmFsKTsKKwkJCQl9CisJCQl9CisJCX0KKworCQlpZiAoZGlzZWFzZU1vZGVsIGluc3RhbmNlb2YgTXVsdGlQb3B1bGF0aW9uU0lSRGlzZWFzZU1vZGVsKSB7CisJCQlNdWx0aVBvcHVsYXRpb25TSVJEaXNlYXNlTW9kZWwgbW9kZWwgPSAoTXVsdGlQb3B1bGF0aW9uU0lSRGlzZWFzZU1vZGVsKSBkaXNlYXNlTW9kZWw7CisKKwkJCVN0cmluZ1tdIHN2YWxzID0gbWF0cml4TWFwCisJCQkJCS5nZXQoTXVsdGlwb3B1bGF0aW9uUGFja2FnZS5MaXRlcmFscy5NVUxUSV9QT1BVTEFUSU9OX1NJUl9ESVNFQVNFX01PREVMX19JTU1VTklUWV9MT1NTX1JBVEUpOworCQkJaWYgKHN2YWxzICE9IG51bGwpIHsKKwkJCQlkb3VibGVbXSBkdmFscyA9IGdldERvdWJsZUFycmF5KHN2YWxzKTsKKwkJCQltb2RlbC5zZXRJbW11bml0eUxvc3NSYXRlKENvbW1vbkZhY3RvcnkuZUlOU1RBTkNFCisJCQkJCQkuY3JlYXRlRG91YmxlVmFsdWVMaXN0KCkpOworCQkJCWZvciAoZG91YmxlIGQgOiBkdmFscykgeworCQkJCQlEb3VibGVWYWx1ZSBkdmFsID0gQ29tbW9uRmFjdG9yeS5lSU5TVEFOQ0UKKwkJCQkJCQkuY3JlYXRlRG91YmxlVmFsdWUoKTsKKwkJCQkJZHZhbC5zZXRWYWx1ZShkKTsKKwkJCQkJbW9kZWwuZ2V0SW1tdW5pdHlMb3NzUmF0ZSgpLmdldFZhbHVlcygpLmFkZChkdmFsKTsKKwkJCQl9CisJCQl9CisJCX0KKworCQlpZiAoZGlzZWFzZU1vZGVsIGluc3RhbmNlb2YgTXVsdGlQb3B1bGF0aW9uU2Vhc29uYWxEaXNlYXNlTW9kZWwpIHsKKwkJCU11bHRpUG9wdWxhdGlvblNlYXNvbmFsRGlzZWFzZU1vZGVsIG1vZGVsID0gKE11bHRpUG9wdWxhdGlvblNlYXNvbmFsRGlzZWFzZU1vZGVsKSBkaXNlYXNlTW9kZWw7CisKKwkJCW1vZGVsLnNldFVzZVNwbGluZUludGVycG9sYXRpb24oYm9vbGVhbk1hcAorCQkJCQkuZ2V0KE11bHRpcG9wdWxhdGlvblBhY2thZ2UuTGl0ZXJhbHMuTVVMVElfUE9QVUxBVElPTl9TRUFTT05BTF9ESVNFQVNFX01PREVMX19VU0VfU1BMSU5FX0lOVEVSUE9MQVRJT04pCisJCQkJCS5nZXRTZWxlY3Rpb24oKSk7CisKKwkJCVN0cmluZ1tdIHN2YWxzID0gbWF0cml4TWFwCisJCQkJCS5nZXQoTXVsdGlwb3B1bGF0aW9uUGFja2FnZS5MaXRlcmFscy5NVUxUSV9QT1BVTEFUSU9OX1NFQVNPTkFMX0RJU0VBU0VfTU9ERUxfX01PRFVMQVRJT05fUE9JTlRTKTsKKwkJCWlmIChzdmFscyAhPSBudWxsKSB7CisJCQkJZG91YmxlW10gZHZhbHMgPSBnZXREb3VibGVBcnJheShzdmFscyk7CisJCQkJaW50IHBvaW50cyA9IChpbnQpIChkdmFscy5sZW5ndGggLyAyKTsKKwkJCQltb2RlbC5zZXRNb2R1bGF0aW9uUG9pbnRzKENvbW1vbkZhY3RvcnkuZUlOU1RBTkNFCisJCQkJCQkuY3JlYXRlRG91YmxlVmFsdWVNYXRyaXgoKSk7CisJCQkJZm9yIChpbnQgciA9IDA7IHIgPCBwb2ludHM7ICsrcikgeworCQkJCQlEb3VibGVWYWx1ZUxpc3QgbmwgPSBDb21tb25QYWNrYWdlLmVJTlNUQU5DRQorCQkJCQkJCS5nZXRDb21tb25GYWN0b3J5KCkuY3JlYXRlRG91YmxlVmFsdWVMaXN0KCk7CisJCQkJCW1vZGVsLmdldE1vZHVsYXRpb25Qb2ludHMoKS5nZXRWYWx1ZUxpc3RzKCkuYWRkKG5sKTsKKwkJCQkJZm9yIChpbnQgYyA9IDA7IGMgPCAyOyArK2MpIHsKKwkJCQkJCURvdWJsZVZhbHVlIGR2YWwgPSBDb21tb25QYWNrYWdlLmVJTlNUQU5DRQorCQkJCQkJCQkuZ2V0Q29tbW9uRmFjdG9yeSgpLmNyZWF0ZURvdWJsZVZhbHVlKCk7CisJCQkJCQlkdmFsLnNldFZhbHVlKGR2YWxzW3IgKiAyICsgY10pOworCQkJCQkJbmwuZ2V0VmFsdWVzKCkuYWRkKGR2YWwpOworCQkJCQl9CisJCQkJfQorCQkJfQorCQl9CisKKwkJLy8gTGV0J3MgZmlsbCBpbiB0aGUgaWRlbnRpZmllcnMgZm9yIHRoZSB2YXJpb3VzIHJhdGVzIHRvIG1ha2UgaXQgZWFzaWVyCisJCS8vIHRvIGVkaXQgbGF0ZXIgaW4gdGhlIHByb3BlcnR5IGVkaXRvcgorCQlpZiAoKChNdWx0aVBvcHVsYXRpb25TSURpc2Vhc2VNb2RlbCkgZGlzZWFzZU1vZGVsKQorCQkJCS5nZXRQb3B1bGF0aW9uR3JvdXBzKCkgIT0gbnVsbCkgeworCQkJU3RyaW5nW10gZ3JvdXBzID0gbmV3IFN0cmluZ1soKE11bHRpUG9wdWxhdGlvblNJRGlzZWFzZU1vZGVsKSBkaXNlYXNlTW9kZWwpCisJCQkJCS5nZXRQb3B1bGF0aW9uR3JvdXBzKCkuZ2V0VmFsdWVzKCkuc2l6ZSgpXTsKKwkJCWludCBpID0gMDsKKwkJCWZvciAob3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5TdHJpbmdWYWx1ZSBzdiA6ICgoTXVsdGlQb3B1bGF0aW9uU0lEaXNlYXNlTW9kZWwpIGRpc2Vhc2VNb2RlbCkKKwkJCQkJLmdldFBvcHVsYXRpb25Hcm91cHMoKS5nZXRWYWx1ZXMoKSkKKwkJCQlncm91cHNbaSsrXSA9IHN2LmdldFZhbHVlKCk7CisKKwkJCWkgPSAwOworCQkJRG91YmxlVmFsdWVMaXN0IGR2bCA9ICgoTXVsdGlQb3B1bGF0aW9uU0lEaXNlYXNlTW9kZWwpIGRpc2Vhc2VNb2RlbCkKKwkJCQkJLmdldEluZmVjdGlvdXNNb3J0YWxpdHlSYXRlKCk7CisJCQlpZiAoZHZsICE9IG51bGwpCisJCQkJZm9yIChEb3VibGVWYWx1ZSBkdiA6IGR2bC5nZXRWYWx1ZXMoKSkKKwkJCQkJZHYuc2V0SWRlbnRpZmllcihncm91cHNbaSsrXSk7CisKKwkJCWkgPSAwOworCQkJZHZsID0gKChNdWx0aVBvcHVsYXRpb25TSURpc2Vhc2VNb2RlbCkgZGlzZWFzZU1vZGVsKQorCQkJCQkuZ2V0UmVjb3ZlcnlSYXRlKCk7CisJCQlpZiAoZHZsICE9IG51bGwpCisJCQkJZm9yIChEb3VibGVWYWx1ZSBkdiA6IGR2bC5nZXRWYWx1ZXMoKSkKKwkJCQkJZHYuc2V0SWRlbnRpZmllcihncm91cHNbaSsrXSk7CisKKwkJCWkgPSAwOworCQkJRG91YmxlVmFsdWVNYXRyaXggZHZtID0gKChNdWx0aVBvcHVsYXRpb25TSURpc2Vhc2VNb2RlbCkgZGlzZWFzZU1vZGVsKQorCQkJCQkuZ2V0VHJhbnNtaXNzaW9uUmF0ZSgpOworCQkJaWYgKGR2bSAhPSBudWxsKQorCQkJCWZvciAoRG91YmxlVmFsdWVMaXN0IGR2bDIgOiBkdm0uZ2V0VmFsdWVMaXN0cygpKSB7CisJCQkJCWR2bDIuc2V0SWRlbnRpZmllcihncm91cHNbaSsrXSk7CisJCQkJCWludCBqID0gMDsKKwkJCQkJZm9yIChEb3VibGVWYWx1ZSBkdiA6IGR2bDIuZ2V0VmFsdWVzKCkpCisJCQkJCQlkdi5zZXRJZGVudGlmaWVyKGdyb3Vwc1tqKytdKTsKKwkJCQl9CisKKwkJCWlmIChkaXNlYXNlTW9kZWwgaW5zdGFuY2VvZiBNdWx0aVBvcHVsYXRpb25TSVJEaXNlYXNlTW9kZWwpIHsKKwkJCQlpID0gMDsKKwkJCQlkdmwgPSAoKE11bHRpUG9wdWxhdGlvblNJUkRpc2Vhc2VNb2RlbCkgZGlzZWFzZU1vZGVsKQorCQkJCQkJLmdldEltbXVuaXR5TG9zc1JhdGUoKTsKKwkJCQlpZiAoZHZsICE9IG51bGwpCisJCQkJCWZvciAoRG91YmxlVmFsdWUgZHYgOiBkdmwuZ2V0VmFsdWVzKCkpCisJCQkJCQlkdi5zZXRJZGVudGlmaWVyKGdyb3Vwc1tpKytdKTsKKwkJCX0KKworCQkJaWYgKGRpc2Vhc2VNb2RlbCBpbnN0YW5jZW9mIE11bHRpUG9wdWxhdGlvblNFSVJEaXNlYXNlTW9kZWwpIHsKKwkJCQlpID0gMDsKKwkJCQlkdmwgPSAoKE11bHRpUG9wdWxhdGlvblNFSVJEaXNlYXNlTW9kZWwpIGRpc2Vhc2VNb2RlbCkKKwkJCQkJCS5nZXRJbmN1YmF0aW9uUmF0ZSgpOworCQkJCWlmIChkdmwgIT0gbnVsbCkKKwkJCQkJZm9yIChEb3VibGVWYWx1ZSBkdiA6IGR2bC5nZXRWYWx1ZXMoKSkKKwkJCQkJCWR2LnNldElkZW50aWZpZXIoZ3JvdXBzW2krK10pOworCQkJfQorCisJCQlpZiAoZGlzZWFzZU1vZGVsIGluc3RhbmNlb2YgTXVsdGlQb3B1bGF0aW9uU2Vhc29uYWxEaXNlYXNlTW9kZWwpIHsKKwkJCQlpID0gMDsKKwkJCQlkdm0gPSAoKE11bHRpUG9wdWxhdGlvblNlYXNvbmFsRGlzZWFzZU1vZGVsKSBkaXNlYXNlTW9kZWwpCisJCQkJCQkuZ2V0TW9kdWxhdGlvblBvaW50cygpOworCQkJCWlmIChkdm0gIT0gbnVsbCkKKwkJCQkJZm9yIChEb3VibGVWYWx1ZUxpc3QgZHZsMiA6IGR2bS5nZXRWYWx1ZUxpc3RzKCkpIHsKKwkJCQkJCWR2bDIuc2V0SWRlbnRpZmllcigicCIgKyAoaSsrKSk7CisJCQkJCQlkdmwyLmdldFZhbHVlcygpLmdldCgwKS5zZXRJZGVudGlmaWVyKCJ4Iik7CisJCQkJCQlkdmwyLmdldFZhbHVlcygpLmdldCgxKS5zZXRJZGVudGlmaWVyKCJ5Iik7CisJCQkJCX0KKwkJCX0KKwkJfSAvLyBoYXMgZ3JvdXBzCisJfQorCisJcHJpdmF0ZSBkb3VibGVbXSBnZXREb3VibGVBcnJheShTdHJpbmdbXSBzdmFscykgeworCQlkb3VibGVbXSByZXMgPSBuZXcgZG91YmxlW3N2YWxzLmxlbmd0aF07CisJCWZvciAoaW50IGkgPSAwOyBpIDwgcmVzLmxlbmd0aDsgKytpKQorCQkJcmVzW2ldID0gRG91YmxlLnBhcnNlRG91YmxlKHN2YWxzW2ldKTsKKwkJcmV0dXJuIHJlczsKKwl9CisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0udWkud2l6YXJkcy5TdGFuZGFyZERpc2Vhc2VNb2RlbFByb3BlcnR5RWRpdG9yI3ZhbGlkYXRlKCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgYm9vbGVhbiB2YWxpZGF0ZSgpIHsKKwkJcmV0dXJuIHN1cGVyLnZhbGlkYXRlKCk7CisJfQorCisJcHVibGljIHNob3J0IGdldFJvd0NvdW50KEVTdHJ1Y3R1cmFsRmVhdHVyZSBmZWF0dXJlKSB7CisJCWlmIChmZWF0dXJlID09IE11bHRpcG9wdWxhdGlvblBhY2thZ2UuTGl0ZXJhbHMuTVVMVElfUE9QVUxBVElPTl9TRUFTT05BTF9ESVNFQVNFX01PREVMX19NT0RVTEFUSU9OX1BPSU5UUykgeworCQkJU3RyaW5nW10gcG9pbnRzID0gbWF0cml4TWFwCisJCQkJCS5nZXQoTXVsdGlwb3B1bGF0aW9uUGFja2FnZS5MaXRlcmFscy5NVUxUSV9QT1BVTEFUSU9OX1NFQVNPTkFMX0RJU0VBU0VfTU9ERUxfX01PRFVMQVRJT05fUE9JTlRTKTsKKworCQkJaWYgKHBvaW50cyAhPSBudWxsKSB7CisJCQkJcmV0dXJuIChzaG9ydCkgKHBvaW50cy5sZW5ndGggLyAyKTsKKwkJCX0gZWxzZSB7CisJCQkJcmV0dXJuIDA7CisJCQl9CisJCX0gZWxzZSB7CisJCQlTdHJpbmdbXSBncm91cHMgPSBtYXRyaXhNYXAKKwkJCQkJLmdldChNdWx0aXBvcHVsYXRpb25QYWNrYWdlLkxpdGVyYWxzLk1VTFRJX1BPUFVMQVRJT05fU0lfRElTRUFTRV9NT0RFTF9fUE9QVUxBVElPTl9HUk9VUFMpOworCisJCQlpZiAoZ3JvdXBzICE9IG51bGwpIHsKKwkJCQlyZXR1cm4gKHNob3J0KSBncm91cHMubGVuZ3RoOworCQkJfSBlbHNlIHsKKwkJCQlyZXR1cm4gMDsKKwkJCX0KKwkJfQorCX0KKworCXB1YmxpYyBzaG9ydCBnZXRDb2xDb3VudChFU3RydWN0dXJhbEZlYXR1cmUgZmVhdHVyZSkgeworCQlpZiAoZmVhdHVyZSA9PSBNdWx0aXBvcHVsYXRpb25QYWNrYWdlLkxpdGVyYWxzLk1VTFRJX1BPUFVMQVRJT05fU0lfRElTRUFTRV9NT0RFTF9fVFJBTlNNSVNTSU9OX1JBVEUpIHsKKwkJCVN0cmluZ1tdIGdyb3VwcyA9IG1hdHJpeE1hcAorCQkJCQkuZ2V0KE11bHRpcG9wdWxhdGlvblBhY2thZ2UuTGl0ZXJhbHMuTVVMVElfUE9QVUxBVElPTl9TSV9ESVNFQVNFX01PREVMX19QT1BVTEFUSU9OX0dST1VQUyk7CisKKwkJCWlmIChncm91cHMgIT0gbnVsbCkgeworCQkJCXJldHVybiAoc2hvcnQpIGdyb3Vwcy5sZW5ndGg7CisJCQl9CisKKwkJCXJldHVybiAwOworCQl9IGVsc2UgaWYgKGZlYXR1cmUgPT0gTXVsdGlwb3B1bGF0aW9uUGFja2FnZS5MaXRlcmFscy5NVUxUSV9QT1BVTEFUSU9OX1NFQVNPTkFMX0RJU0VBU0VfTU9ERUxfX01PRFVMQVRJT05fUE9JTlRTKSB7CisJCQlyZXR1cm4gMjsKKwkJfSBlbHNlIHsKKwkJCXJldHVybiAxOworCQl9CisJfQorCisJcHVibGljIGJvb2xlYW4gZ2V0Rml4ZWRTaXplKEVTdHJ1Y3R1cmFsRmVhdHVyZSBmZWF0dXJlKSB7CisJCWlmIChmZWF0dXJlID09IE11bHRpcG9wdWxhdGlvblBhY2thZ2UuTGl0ZXJhbHMuTVVMVElfUE9QVUxBVElPTl9TSV9ESVNFQVNFX01PREVMX19QT1BVTEFUSU9OX0dST1VQUykgeworCQkJcmV0dXJuIGZhbHNlOworCQl9IGVsc2UgaWYgKGZlYXR1cmUgPT0gTXVsdGlwb3B1bGF0aW9uUGFja2FnZS5MaXRlcmFscy5NVUxUSV9QT1BVTEFUSU9OX1NFQVNPTkFMX0RJU0VBU0VfTU9ERUxfX01PRFVMQVRJT05fUE9JTlRTKSB7CisJCQlyZXR1cm4gZmFsc2U7CisJCX0gZWxzZSB7CisJCQlyZXR1cm4gdHJ1ZTsKKwkJfQorCX0KKworCXB1YmxpYyBTdHJpbmdbXSBnZXRSb3dOYW1lcyhFU3RydWN0dXJhbEZlYXR1cmUgZmVhdHVyZSkgeworCQlpZiAoZmVhdHVyZSA9PSBNdWx0aXBvcHVsYXRpb25QYWNrYWdlLkxpdGVyYWxzLk1VTFRJX1BPUFVMQVRJT05fU0lfRElTRUFTRV9NT0RFTF9fUE9QVUxBVElPTl9HUk9VUFMpIHsKKwkJCXJldHVybiBudWxsOworCQl9IGVsc2UgaWYgKGZlYXR1cmUgPT0gTXVsdGlwb3B1bGF0aW9uUGFja2FnZS5MaXRlcmFscy5NVUxUSV9QT1BVTEFUSU9OX1NJX0RJU0VBU0VfTU9ERUxfX1RSQU5TTUlTU0lPTl9SQVRFKSB7CisJCQlTdHJpbmdbXSBncm91cHMgPSBtYXRyaXhNYXAKKwkJCQkJLmdldChNdWx0aXBvcHVsYXRpb25QYWNrYWdlLkxpdGVyYWxzLk1VTFRJX1BPUFVMQVRJT05fU0lfRElTRUFTRV9NT0RFTF9fUE9QVUxBVElPTl9HUk9VUFMpCisJCQkJCS5jbG9uZSgpOworCisJCQlpZiAoZ3JvdXBzICE9IG51bGwpIHsKKwkJCQlmb3IgKGludCBpID0gMDsgaSA8IGdyb3Vwcy5sZW5ndGg7IGkrKykgeworCQkJCQlncm91cHNbaV0gPSBNdWx0aXBvcHVsYXRpb25EaXNlYXNlV2l6YXJkTWVzc2FnZXMKKwkJCQkJCQkuZ2V0U3RyaW5nKCJ0cmFuc21pc3Npb25UbyIpICsgIiAiICsgZ3JvdXBzW2ldOworCQkJCX0KKwkJCX0KKworCQkJcmV0dXJuIGdyb3VwczsKKwkJfSBlbHNlIGlmIChmZWF0dXJlID09IE11bHRpcG9wdWxhdGlvblBhY2thZ2UuTGl0ZXJhbHMuTVVMVElfUE9QVUxBVElPTl9TRUFTT05BTF9ESVNFQVNFX01PREVMX19NT0RVTEFUSU9OX1BPSU5UUykgeworCQkJcmV0dXJuIG51bGw7CisJCX0gZWxzZSB7CisJCQlyZXR1cm4gbWF0cml4TWFwCisJCQkJCS5nZXQoTXVsdGlwb3B1bGF0aW9uUGFja2FnZS5MaXRlcmFscy5NVUxUSV9QT1BVTEFUSU9OX1NJX0RJU0VBU0VfTU9ERUxfX1BPUFVMQVRJT05fR1JPVVBTKTsKKwkJfQorCX0KKworCXB1YmxpYyBTdHJpbmdbXSBnZXRDb2xOYW1lcyhFU3RydWN0dXJhbEZlYXR1cmUgZmVhdHVyZSkgeworCQlpZiAoZmVhdHVyZSA9PSBNdWx0aXBvcHVsYXRpb25QYWNrYWdlLkxpdGVyYWxzLk1VTFRJX1BPUFVMQVRJT05fU0lfRElTRUFTRV9NT0RFTF9fVFJBTlNNSVNTSU9OX1JBVEUpIHsKKwkJCVN0cmluZ1tdIGdyb3VwcyA9IG1hdHJpeE1hcAorCQkJCQkuZ2V0KE11bHRpcG9wdWxhdGlvblBhY2thZ2UuTGl0ZXJhbHMuTVVMVElfUE9QVUxBVElPTl9TSV9ESVNFQVNFX01PREVMX19QT1BVTEFUSU9OX0dST1VQUykKKwkJCQkJLmNsb25lKCk7CisKKwkJCWlmIChncm91cHMgIT0gbnVsbCkgeworCQkJCWZvciAoaW50IGkgPSAwOyBpIDwgZ3JvdXBzLmxlbmd0aDsgaSsrKSB7CisJCQkJCWdyb3Vwc1tpXSA9IE11bHRpcG9wdWxhdGlvbkRpc2Vhc2VXaXphcmRNZXNzYWdlcworCQkJCQkJCS5nZXRTdHJpbmcoInRyYW5zbWlzc2lvbkZyb20iKSArICIgIiArIGdyb3Vwc1tpXTsKKwkJCQl9CisJCQl9CisKKwkJCXJldHVybiBncm91cHM7CisJCX0gZWxzZSBpZiAoZmVhdHVyZSA9PSBNdWx0aXBvcHVsYXRpb25QYWNrYWdlLkxpdGVyYWxzLk1VTFRJX1BPUFVMQVRJT05fU0VBU09OQUxfRElTRUFTRV9NT0RFTF9fTU9EVUxBVElPTl9QT0lOVFMpIHsKKwkJCXJldHVybiBuZXcgU3RyaW5nW10geworCQkJCQlNdWx0aXBvcHVsYXRpb25EaXNlYXNlV2l6YXJkTWVzc2FnZXMKKwkJCQkJCQkuZ2V0U3RyaW5nKCJkYXlPZlRoZVllYXIiKSwKKwkJCQkJTXVsdGlwb3B1bGF0aW9uRGlzZWFzZVdpemFyZE1lc3NhZ2VzCisJCQkJCQkJLmdldFN0cmluZygidHJhbnNtaXNzaW9uRmFjdG9yIikgfTsKKwkJfSBlbHNlIHsKKwkJCXJldHVybiBuZXcgU3RyaW5nW10geyAiIiB9OworCQl9CisJfQorCisJLyoqCisJICogZ2V0VmFsaWRhdG9yLiBWYWxpZGF0b3JzIHN1YmNsYXNzIGZvciBtb3JlIGFkdmFuY2VkIHZhbGlkYXRpb24gKD4wIGV0Yy4pCisJICogCisJICogQHBhcmFtIGZlYXR1cmUKKwkgKiBAcmV0dXJuCisJICovCisJcHVibGljIE1hdHJpeEVkaXRvclZhbGlkYXRvciBnZXRWYWxpZGF0b3IoRVN0cnVjdHVyYWxGZWF0dXJlIGZlYXR1cmUpIHsKKwkJRUNsYXNzaWZpZXIgdHlwZSA9IGZlYXR1cmUuZ2V0RVR5cGUoKTsKKwkJTWF0cml4RWRpdG9yVmFsaWRhdG9yIHZhbGlkYXRvciA9IG51bGw7CisJCWlmICh0eXBlID09IENvbW1vblBhY2thZ2UuTGl0ZXJhbHMuRE9VQkxFX1ZBTFVFX0xJU1QKKwkJCQl8fCB0eXBlID09IENvbW1vblBhY2thZ2UuTGl0ZXJhbHMuRE9VQkxFX1ZBTFVFX01BVFJJWCkKKwkJCXZhbGlkYXRvciA9IG5ldyBNYXRyaXhFZGl0b3JWYWxpZGF0b3IoKSB7CisKKwkJCQlAT3ZlcnJpZGUKKwkJCQlwdWJsaWMgYm9vbGVhbiB2YWxpZGF0ZVZhbHVlKFN0cmluZyB2YWwpIHsKKwkJCQkJaWYgKHZhbCA9PSBudWxsIHx8IHZhbC50cmltKCkuZXF1YWxzKCIiKSkKKwkJCQkJCXJldHVybiBmYWxzZTsKKwkJCQkJdHJ5IHsKKwkJCQkJCURvdWJsZS5wYXJzZURvdWJsZSh2YWwudHJpbSgpKTsKKwkJCQkJfSBjYXRjaCAoTnVtYmVyRm9ybWF0RXhjZXB0aW9uIG5mZSkgeworCQkJCQkJcmV0dXJuIGZhbHNlOworCQkJCQl9CisJCQkJCXJldHVybiB0cnVlOworCQkJCX0KKwkJCX07CisJCWVsc2UgaWYgKHR5cGUgPT0gQ29tbW9uUGFja2FnZS5MaXRlcmFscy5TVFJJTkdfVkFMVUVfTElTVCkKKwkJCXZhbGlkYXRvciA9IG5ldyBNYXRyaXhFZGl0b3JWYWxpZGF0b3IoKSB7CisKKwkJCQlAT3ZlcnJpZGUKKwkJCQlwdWJsaWMgYm9vbGVhbiB2YWxpZGF0ZVZhbHVlKFN0cmluZyB2YWwpIHsKKwkJCQkJaWYgKHZhbCA9PSBudWxsIHx8IHZhbC50cmltKCkuZXF1YWxzKCIiKSkKKwkJCQkJCXJldHVybiBmYWxzZTsKKwkJCQkJcmV0dXJuIHRydWU7CisJCQkJfQorCQkJfTsKKwkJcmV0dXJuIHZhbGlkYXRvcjsKKwl9CisKKwlwcml2YXRlIHZvaWQgcmVzaXplTGlzdHNBbmRNYXRyaWNlcygpIHsKKwkJU3RyaW5nW10gZ3JvdXBzID0gbWF0cml4TWFwCisJCQkJLmdldChNdWx0aXBvcHVsYXRpb25QYWNrYWdlLkxpdGVyYWxzLk1VTFRJX1BPUFVMQVRJT05fU0lfRElTRUFTRV9NT0RFTF9fUE9QVUxBVElPTl9HUk9VUFMpOworCisJCWlmIChncm91cHMgPT0gbnVsbCkgeworCQkJbWF0cml4TWFwCisJCQkJCS5yZW1vdmUoTXVsdGlwb3B1bGF0aW9uUGFja2FnZS5MaXRlcmFscy5NVUxUSV9QT1BVTEFUSU9OX1NJX0RJU0VBU0VfTU9ERUxfX1RSQU5TTUlTU0lPTl9SQVRFKTsKKwkJCW1hdHJpeE1hcAorCQkJCQkucmVtb3ZlKE11bHRpcG9wdWxhdGlvblBhY2thZ2UuTGl0ZXJhbHMuTVVMVElfUE9QVUxBVElPTl9TSV9ESVNFQVNFX01PREVMX19JTkZFQ1RJT1VTX01PUlRBTElUWV9SQVRFKTsKKwkJCW1hdHJpeE1hcAorCQkJCQkucmVtb3ZlKE11bHRpcG9wdWxhdGlvblBhY2thZ2UuTGl0ZXJhbHMuTVVMVElfUE9QVUxBVElPTl9TSV9ESVNFQVNFX01PREVMX19SRUNPVkVSWV9SQVRFKTsKKwkJCW1hdHJpeE1hcAorCQkJCQkucmVtb3ZlKE11bHRpcG9wdWxhdGlvblBhY2thZ2UuTGl0ZXJhbHMuTVVMVElfUE9QVUxBVElPTl9TSVJfRElTRUFTRV9NT0RFTF9fSU1NVU5JVFlfTE9TU19SQVRFKTsKKwkJCW1hdHJpeE1hcAorCQkJCQkucmVtb3ZlKE11bHRpcG9wdWxhdGlvblBhY2thZ2UuTGl0ZXJhbHMuTVVMVElfUE9QVUxBVElPTl9TRUlSX0RJU0VBU0VfTU9ERUxfX0lOQ1VCQVRJT05fUkFURSk7CisJCX0gZWxzZSB7CisJCQlpbnQgbiA9IGdyb3Vwcy5sZW5ndGg7CisKKwkJCVN0cmluZ1tdIHRyYW5zbWlzc2lvbiA9IG1hdHJpeE1hcAorCQkJCQkuZ2V0KE11bHRpcG9wdWxhdGlvblBhY2thZ2UuTGl0ZXJhbHMuTVVMVElfUE9QVUxBVElPTl9TSV9ESVNFQVNFX01PREVMX19UUkFOU01JU1NJT05fUkFURSk7CisJCQlpZiAodHJhbnNtaXNzaW9uID09IG51bGwgfHwgdHJhbnNtaXNzaW9uLmxlbmd0aCAhPSBuICogbikgeworCQkJCXRyYW5zbWlzc2lvbiA9IG5ldyBTdHJpbmdbbiAqIG5dOworCQkJCUFycmF5cy5maWxsKHRyYW5zbWlzc2lvbiwgIjAuMCIpOworCQkJCW1hdHJpeE1hcAorCQkJCQkJLnB1dChNdWx0aXBvcHVsYXRpb25QYWNrYWdlLkxpdGVyYWxzLk1VTFRJX1BPUFVMQVRJT05fU0lfRElTRUFTRV9NT0RFTF9fVFJBTlNNSVNTSU9OX1JBVEUsCisJCQkJCQkJCXRyYW5zbWlzc2lvbik7CisJCQl9CisKKwkJCVN0cmluZ1tdIG1vcnRhbGl0eSA9IG1hdHJpeE1hcAorCQkJCQkuZ2V0KE11bHRpcG9wdWxhdGlvblBhY2thZ2UuTGl0ZXJhbHMuTVVMVElfUE9QVUxBVElPTl9TSV9ESVNFQVNFX01PREVMX19JTkZFQ1RJT1VTX01PUlRBTElUWV9SQVRFKTsKKwkJCWlmIChtb3J0YWxpdHkgPT0gbnVsbCB8fCBtb3J0YWxpdHkubGVuZ3RoICE9IG4pIHsKKwkJCQltb3J0YWxpdHkgPSBuZXcgU3RyaW5nW25dOworCQkJCUFycmF5cy5maWxsKG1vcnRhbGl0eSwgIjAuMCIpOworCQkJCW1hdHJpeE1hcAorCQkJCQkJLnB1dChNdWx0aXBvcHVsYXRpb25QYWNrYWdlLkxpdGVyYWxzLk1VTFRJX1BPUFVMQVRJT05fU0lfRElTRUFTRV9NT0RFTF9fSU5GRUNUSU9VU19NT1JUQUxJVFlfUkFURSwKKwkJCQkJCQkJbW9ydGFsaXR5KTsKKwkJCX0KKworCQkJU3RyaW5nW10gcmVjb3ZlcnkgPSBtYXRyaXhNYXAKKwkJCQkJLmdldChNdWx0aXBvcHVsYXRpb25QYWNrYWdlLkxpdGVyYWxzLk1VTFRJX1BPUFVMQVRJT05fU0lfRElTRUFTRV9NT0RFTF9fUkVDT1ZFUllfUkFURSk7CisJCQlpZiAocmVjb3ZlcnkgPT0gbnVsbCB8fCByZWNvdmVyeS5sZW5ndGggIT0gbikgeworCQkJCXJlY292ZXJ5ID0gbmV3IFN0cmluZ1tuXTsKKwkJCQlBcnJheXMuZmlsbChyZWNvdmVyeSwgIjAuMCIpOworCQkJCW1hdHJpeE1hcAorCQkJCQkJLnB1dChNdWx0aXBvcHVsYXRpb25QYWNrYWdlLkxpdGVyYWxzLk1VTFRJX1BPUFVMQVRJT05fU0lfRElTRUFTRV9NT0RFTF9fUkVDT1ZFUllfUkFURSwKKwkJCQkJCQkJcmVjb3ZlcnkpOworCQkJfQorCisJCQlTdHJpbmdbXSBpbW11bml0eSA9IG1hdHJpeE1hcAorCQkJCQkuZ2V0KE11bHRpcG9wdWxhdGlvblBhY2thZ2UuTGl0ZXJhbHMuTVVMVElfUE9QVUxBVElPTl9TSVJfRElTRUFTRV9NT0RFTF9fSU1NVU5JVFlfTE9TU19SQVRFKTsKKwkJCWlmIChpbW11bml0eSA9PSBudWxsIHx8IGltbXVuaXR5Lmxlbmd0aCAhPSBuKSB7CisJCQkJaW1tdW5pdHkgPSBuZXcgU3RyaW5nW25dOworCQkJCUFycmF5cy5maWxsKGltbXVuaXR5LCAiMC4wIik7CisJCQkJbWF0cml4TWFwCisJCQkJCQkucHV0KE11bHRpcG9wdWxhdGlvblBhY2thZ2UuTGl0ZXJhbHMuTVVMVElfUE9QVUxBVElPTl9TSVJfRElTRUFTRV9NT0RFTF9fSU1NVU5JVFlfTE9TU19SQVRFLAorCQkJCQkJCQlpbW11bml0eSk7CisJCQl9CisKKwkJCVN0cmluZ1tdIGluY3ViYXRpb24gPSBtYXRyaXhNYXAKKwkJCQkJLmdldChNdWx0aXBvcHVsYXRpb25QYWNrYWdlLkxpdGVyYWxzLk1VTFRJX1BPUFVMQVRJT05fU0VJUl9ESVNFQVNFX01PREVMX19JTkNVQkFUSU9OX1JBVEUpOworCQkJaWYgKGluY3ViYXRpb24gPT0gbnVsbCB8fCBpbmN1YmF0aW9uLmxlbmd0aCAhPSBuKSB7CisJCQkJaW5jdWJhdGlvbiA9IG5ldyBTdHJpbmdbbl07CisJCQkJQXJyYXlzLmZpbGwoaW5jdWJhdGlvbiwgIjAuMCIpOworCQkJCW1hdHJpeE1hcAorCQkJCQkJLnB1dChNdWx0aXBvcHVsYXRpb25QYWNrYWdlLkxpdGVyYWxzLk1VTFRJX1BPUFVMQVRJT05fU0VJUl9ESVNFQVNFX01PREVMX19JTkNVQkFUSU9OX1JBVEUsCisJCQkJCQkJCWluY3ViYXRpb24pOworCQkJfQorCQl9CisJfQorCit9IC8vIE11bHRpUG9wdWxhdGlvbkRpc2Vhc2VNb2RlbFByb3BlcnR5RWRpdG9yCmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy5tdWx0aXBvcHVsYXRpb24vc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9tdWx0aXBvcHVsYXRpb24vcHJlc2VudGF0aW9uL011bHRpUG9wdWxhdGlvbkRpc2Vhc2VNb2RlbFByb3BlcnR5RWRpdG9yQWRhcHRlci5qYXZhIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMubXVsdGlwb3B1bGF0aW9uL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvbXVsdGlwb3B1bGF0aW9uL3ByZXNlbnRhdGlvbi9NdWx0aVBvcHVsYXRpb25EaXNlYXNlTW9kZWxQcm9wZXJ0eUVkaXRvckFkYXB0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZTZlZjI5Ci0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMubXVsdGlwb3B1bGF0aW9uL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvbXVsdGlwb3B1bGF0aW9uL3ByZXNlbnRhdGlvbi9NdWx0aVBvcHVsYXRpb25EaXNlYXNlTW9kZWxQcm9wZXJ0eUVkaXRvckFkYXB0ZXIuamF2YQpAQCAtMCwwICsxLDQwIEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5tdWx0aXBvcHVsYXRpb24ucHJlc2VudGF0aW9uOworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNywgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuRGlzZWFzZU1vZGVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udWkuYWRhcHRlcnMuZGlzZWFzZW1vZGVscHJvcGVydHllZGl0b3IuRGlzZWFzZU1vZGVsUHJvcGVydHlFZGl0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS51aS5hZGFwdGVycy5kaXNlYXNlbW9kZWxwcm9wZXJ0eWVkaXRvci5EaXNlYXNlTW9kZWxQcm9wZXJ0eUVkaXRvckFkYXB0ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS51aS53aXphcmRzLkRpc2Vhc2VNb2RlbFByb3BlcnR5Q29tcG9zaXRlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuTW9kaWZ5TGlzdGVuZXI7CisKKy8qKgorICogIAorICogQWRhcHRlciBmb3IgUHJvcGVydHkgRWRpdG9yCisgKgorICovCitwdWJsaWMgY2xhc3MgTXVsdGlQb3B1bGF0aW9uRGlzZWFzZU1vZGVsUHJvcGVydHlFZGl0b3JBZGFwdGVyIGV4dGVuZHMKKwkJRGlzZWFzZU1vZGVsUHJvcGVydHlFZGl0b3JBZGFwdGVyIHsKKworCS8qKgorCSAqIAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBEaXNlYXNlTW9kZWxQcm9wZXJ0eUVkaXRvciBjcmVhdGVEaXNlYXNlTW9kZWxQcm9wZXJ0eUVkaXRvcigKKwkJCURpc2Vhc2VNb2RlbFByb3BlcnR5Q29tcG9zaXRlIGRpc2Vhc2VNb2RlbFByb3BlcnR5Q29tcG9zaXRlLAorCQkJaW50IHN0eWxlLCBNb2RpZnlMaXN0ZW5lciBwcm9qZWN0VmFsaWRhdG9yLCBJUHJvamVjdCBwcm9qZWN0KSB7CisJCXJldHVybiBuZXcgTXVsdGlQb3B1bGF0aW9uRGlzZWFzZU1vZGVsUHJvcGVydHlFZGl0b3IoCisJCQkJZGlzZWFzZU1vZGVsUHJvcGVydHlDb21wb3NpdGUsIHN0eWxlLAorCQkJCShEaXNlYXNlTW9kZWwpIGdldFRhcmdldCgpLCBwcm9qZWN0VmFsaWRhdG9yLCBwcm9qZWN0KTsKKwl9IC8vIGNyZWF0ZURpc2Vhc2VNb2RlbFByb3BlcnR5RWRpdG9yCisKK30gLy8gRXhhbXBsZURpc2Vhc2VNb2RlbEFkYXB0ZXIKZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzLm11bHRpcG9wdWxhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL211bHRpcG9wdWxhdGlvbi9wcmVzZW50YXRpb24vTXVsdGlQb3B1bGF0aW9uRGlzZWFzZU1vZGVsUHJvcGVydHlFZGl0b3JBZGFwdGVyRmFjdG9yeS5qYXZhIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMubXVsdGlwb3B1bGF0aW9uL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvbXVsdGlwb3B1bGF0aW9uL3ByZXNlbnRhdGlvbi9NdWx0aVBvcHVsYXRpb25EaXNlYXNlTW9kZWxQcm9wZXJ0eUVkaXRvckFkYXB0ZXJGYWN0b3J5LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzk3ZTg0ZQotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzLm11bHRpcG9wdWxhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL211bHRpcG9wdWxhdGlvbi9wcmVzZW50YXRpb24vTXVsdGlQb3B1bGF0aW9uRGlzZWFzZU1vZGVsUHJvcGVydHlFZGl0b3JBZGFwdGVyRmFjdG9yeS5qYXZhCkBAIC0wLDAgKzEsNTEgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLm11bHRpcG9wdWxhdGlvbi5wcmVzZW50YXRpb247CisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA3LCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LkFkYXB0ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLm11bHRpcG9wdWxhdGlvbi51dGlsLk11bHRpcG9wdWxhdGlvbkFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udWkuYWRhcHRlcnMuZGlzZWFzZW1vZGVscHJvcGVydHllZGl0b3IuRGlzZWFzZU1vZGVsUHJvcGVydHlFZGl0b3JBZGFwdGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udWkuYWRhcHRlcnMuZGlzZWFzZW1vZGVscHJvcGVydHllZGl0b3IuRGlzZWFzZU1vZGVsUHJvcGVydHlFZGl0b3JBZGFwdGVyRmFjdG9yeTsKKworLyoqCisgKiBAYXV0aG9yIGphbWVzCisgKiAKKyAqLworcHVibGljIGNsYXNzIE11bHRpUG9wdWxhdGlvbkRpc2Vhc2VNb2RlbFByb3BlcnR5RWRpdG9yQWRhcHRlckZhY3RvcnkgZXh0ZW5kcworCQlNdWx0aXBvcHVsYXRpb25BZGFwdGVyRmFjdG9yeSBpbXBsZW1lbnRzCisJCURpc2Vhc2VNb2RlbFByb3BlcnR5RWRpdG9yQWRhcHRlckZhY3RvcnkgeworCisJLyoqCisJICogCisJICovCisJcHVibGljIE11bHRpUG9wdWxhdGlvbkRpc2Vhc2VNb2RlbFByb3BlcnR5RWRpdG9yQWRhcHRlckZhY3RvcnkoKSB7CisJCXN1cGVyKCk7CisJCURpc2Vhc2VNb2RlbFByb3BlcnR5RWRpdG9yQWRhcHRlckZhY3RvcnkuSU5TVEFOQ0UKKwkJCQkuYWRkQWRhcHRlckZhY3RvcnkodGhpcyk7CisJfQorCisJLyoqCisJICogCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlTXVsdGlQb3B1bGF0aW9uU0lEaXNlYXNlTW9kZWxBZGFwdGVyKCkgeworCQlyZXR1cm4gbmV3IE11bHRpUG9wdWxhdGlvbkRpc2Vhc2VNb2RlbFByb3BlcnR5RWRpdG9yQWRhcHRlcigpOworCX0KKworCS8qKgorCSAqIAorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4YW1wbGUudXRpbC5FeGFtcGxlQWRhcHRlckZhY3RvcnkjaXNGYWN0b3J5Rm9yVHlwZShqYXZhLmxhbmcuT2JqZWN0KQorCSAqLworCXB1YmxpYyBib29sZWFuIGlzRmFjdG9yeUZvclR5cGUoT2JqZWN0IHR5cGUpIHsKKwkJcmV0dXJuIHR5cGUgPT0gRGlzZWFzZU1vZGVsUHJvcGVydHlFZGl0b3JBZGFwdGVyLmNsYXNzCisJCQkJfHwgc3VwZXIuaXNGYWN0b3J5Rm9yVHlwZSh0eXBlKTsKKwl9Cit9IC8vIE11bHRpUG9wdWxhdGlvbkRpc2Vhc2VNb2RlbFByb3BlcnR5RWRpdG9yQWRhcHRlckZhY3RvcnkKZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzLm11bHRpcG9wdWxhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL211bHRpcG9wdWxhdGlvbi9wcmVzZW50YXRpb24vTXVsdGlQb3B1bGF0aW9uUHJvcGVydHlTdHJpbmdQcm92aWRlckFkYXB0ZXJGYWN0b3J5LmphdmEgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy5tdWx0aXBvcHVsYXRpb24vc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9tdWx0aXBvcHVsYXRpb24vcHJlc2VudGF0aW9uL011bHRpUG9wdWxhdGlvblByb3BlcnR5U3RyaW5nUHJvdmlkZXJBZGFwdGVyRmFjdG9yeS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjExZTkyZjIKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy5tdWx0aXBvcHVsYXRpb24vc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9tdWx0aXBvcHVsYXRpb24vcHJlc2VudGF0aW9uL011bHRpUG9wdWxhdGlvblByb3BlcnR5U3RyaW5nUHJvdmlkZXJBZGFwdGVyRmFjdG9yeS5qYXZhCkBAIC0wLDAgKzEsMTI1IEBACisvLyBFeGFtcGxlUHJvcGVydHlTdHJpbmdQcm92aWRlckFkYXB0ZXJGYWN0b3J5LmphdmEKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLm11bHRpcG9wdWxhdGlvbi5wcmVzZW50YXRpb247CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNywgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqYXZhLnV0aWwuTWlzc2luZ1Jlc291cmNlRXhjZXB0aW9uOworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuQWRhcHRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRVN0cnVjdHVyYWxGZWF0dXJlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtUHJvcGVydHlEZXNjcmlwdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5tdWx0aXBvcHVsYXRpb24udXRpbC5NdWx0aXBvcHVsYXRpb25BZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnVpLmFkYXB0ZXJzLnByb3BlcnR5c3RyaW5ncy5Qcm9wZXJ0eVN0cmluZ1Byb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udWkuYWRhcHRlcnMucHJvcGVydHlzdHJpbmdzLlByb3BlcnR5U3RyaW5nUHJvdmlkZXJBZGFwdGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udWkuYWRhcHRlcnMucHJvcGVydHlzdHJpbmdzLlByb3BlcnR5U3RyaW5nUHJvdmlkZXJBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnVpLndpemFyZHMuU3RhbmRhcmRQcm9wZXJ0eVN0cmluZ1Byb3ZpZGVyQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuSVN0YXJ0dXA7CisKKy8qKgorICogVGhpcyBjbGFzcyByZXByZXNlbnRzCisgKi8KK3B1YmxpYyBjbGFzcyBNdWx0aVBvcHVsYXRpb25Qcm9wZXJ0eVN0cmluZ1Byb3ZpZGVyQWRhcHRlckZhY3RvcnkgZXh0ZW5kcworCQlNdWx0aXBvcHVsYXRpb25BZGFwdGVyRmFjdG9yeSBpbXBsZW1lbnRzCisJCVByb3BlcnR5U3RyaW5nUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSwgSVN0YXJ0dXAgeworCisJUHJvcGVydHlTdHJpbmdQcm92aWRlckFkYXB0ZXIgYWRhcHRlciA9IG51bGw7CisKKwkvKioKKwkgKiBEZWZhdWx0IENvbnN0cnVjdG9yCisJICovCisJcHVibGljIE11bHRpUG9wdWxhdGlvblByb3BlcnR5U3RyaW5nUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSgpIHsKKwkJc3VwZXIoKTsKKwkJUHJvcGVydHlTdHJpbmdQcm92aWRlckFkYXB0ZXJGYWN0b3J5LklOU1RBTkNFLmFkZEFkYXB0ZXJGYWN0b3J5KHRoaXMpOworCX0KKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2UudWkuSVN0YXJ0dXAjZWFybHlTdGFydHVwKCkKKwkgKi8KKwlwdWJsaWMgdm9pZCBlYXJseVN0YXJ0dXAoKSB7CisJCS8vIE5vdGhpbmcgdG8gZG8gaGVyZS4gVGhpcyBtZXRob2QgaXMgY2FsbGVkIGFmdGVyIHRoZSBjb25zdHJ1Y3RvciBoYXMKKwkJLy8gcnVuIHdoaWNoIGlzIHRoZSBlbnRpcmUgcG9pbnQgb2YgZWFybHkgYWN0aXZhdGlvbiB3aGljaCBjYXVzZXMgdGhlCisJCS8vIGZhY3RvcnkgdG8gYmUgYWRkZWQgdG8gdGhlIFByb3BlcnR5U3RyaW5nUHJvdmlkZXJBZGFwdGVyRmFjdG9yeS5JTlNUQU5DRQorCX0KKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuaW1wbC5BZGFwdGVyRmFjdG9yeUltcGwjaXNGYWN0b3J5Rm9yVHlwZShqYXZhLmxhbmcuT2JqZWN0KQorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBib29sZWFuIGlzRmFjdG9yeUZvclR5cGUoT2JqZWN0IHR5cGUpIHsKKwkJcmV0dXJuIHN1cGVyLmlzRmFjdG9yeUZvclR5cGUodHlwZSkKKwkJCQl8fCB0eXBlID09IFByb3BlcnR5U3RyaW5nUHJvdmlkZXIuY2xhc3M7CisJfQorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXhhbXBsZS51dGlsLkV4YW1wbGVBZGFwdGVyRmFjdG9yeSNjcmVhdGVFeGFtcGxlRGlzZWFzZU1vZGVsQWRhcHRlcigpCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlTXVsdGlQb3B1bGF0aW9uU0lEaXNlYXNlTW9kZWxBZGFwdGVyKCkgeworCQkvLyBIYXZlIHdlIGNyZWF0ZWQgb25lIGJlZm9yZT8KKwkJaWYgKGFkYXB0ZXIgPT0gbnVsbCkgeworCQkJLy8gTm8KKwkJCWFkYXB0ZXIgPSBuZXcgIFN0YW5kYXJkUHJvcGVydHlTdHJpbmdQcm92aWRlckFkYXB0ZXJGYWN0b3J5LlN0YW5kYXJkUHJvcGVydHlTdHJpbmdQcm92aWRlckFkYXB0ZXIoKSB7CisKKwkJCQkvKioKKwkJCQkgKiBAcGFyYW0gZGVzY3JpcHRvcgorCQkJCSAqIEByZXR1cm4gdGhlIE5MUydkIG5hbWUgb2YgdGhlIHByb3BlcnR5IHRvIGRpc3BsYXkgdG8gdGhlIHVzZXIKKwkJCQkgKi8KKwkJCQlwdWJsaWMgU3RyaW5nIGdldFByb3BlcnR5TmFtZShJSXRlbVByb3BlcnR5RGVzY3JpcHRvciBkZXNjcmlwdG9yKSB7CisJCQkJCXRyeSB7CisJCQkJCQlyZXR1cm4gTXVsdGlwb3B1bGF0aW9uRGlzZWFzZVdpemFyZE1lc3NhZ2VzCisJCQkJCQkJCS5nZXRTdHJpbmcoKChFU3RydWN0dXJhbEZlYXR1cmUpIGRlc2NyaXB0b3IKKwkJCQkJCQkJCQkuZ2V0RmVhdHVyZShudWxsKSkuZ2V0TmFtZSgpKTsKKwkJCQkJfSBjYXRjaCAoTWlzc2luZ1Jlc291cmNlRXhjZXB0aW9uIGUpIHsKKwkJCQkJCXJldHVybiBzdXBlci5nZXRQcm9wZXJ0eU5hbWUoZGVzY3JpcHRvcik7CisJCQkJCX0KKwkJCQl9IC8vIGdldFByb3BlcnR5TmFtZQorCisJCQkJLyoqCisJCQkJICogQHBhcmFtIGRlc2NyaXB0b3IKKwkJCQkgKiBAcmV0dXJuIHRoZSBOTFMnZCB0b29sIHRpcCB0ZXh0IHRoYXQgZGVzY3JpYmVzIHRoZSBwcm9wZXJ0eQorCQkJCSAqLworCQkJCXB1YmxpYyBTdHJpbmcgZ2V0UHJvcGVydHlUb29sVGlwKAorCQkJCQkJSUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IgZGVzY3JpcHRvcikgeworCQkJCQl0cnkgeworCQkJCQkJZmluYWwgRVN0cnVjdHVyYWxGZWF0dXJlIGZlYXR1cmUgPSAoRVN0cnVjdHVyYWxGZWF0dXJlKSBkZXNjcmlwdG9yCisJCQkJCQkJCS5nZXRGZWF0dXJlKG51bGwpOworCQkJCQkJcmV0dXJuIE11bHRpcG9wdWxhdGlvbkRpc2Vhc2VXaXphcmRNZXNzYWdlcy5nZXRTdHJpbmcoZmVhdHVyZQorCQkJCQkJCQkuZ2V0TmFtZSgpCisJCQkJCQkJCSsgVFRfU1VGRklYKTsKKwkJCQkJfSBjYXRjaCAoTWlzc2luZ1Jlc291cmNlRXhjZXB0aW9uIGUpIHsKKwkJCQkJCXJldHVybiBzdXBlci5nZXRQcm9wZXJ0eVRvb2xUaXAoZGVzY3JpcHRvcik7CisJCQkJCX0KKwkJCQl9IC8vIGdldFByb3BlcnR5VG9vbFRpcAorCisJCQkJLyoqCisJCQkJICogQHBhcmFtIGRlc2NyaXB0b3IKKwkJCQkgKiBAcmV0dXJuIHRoZSBOTFMnZCB0ZXh0IHRoYXQgcmVwcmVzZW50cyB0aGUgdW5pdHMgb2YgdGhlCisJCQkJICogICAgICAgICBwcm9wZXJ0eQorCQkJCSAqLworCQkJCXB1YmxpYyBTdHJpbmcgZ2V0UHJvcGVydHlVbml0cygKKwkJCQkJCUlJdGVtUHJvcGVydHlEZXNjcmlwdG9yIGRlc2NyaXB0b3IpIHsKKwkJCQkJdHJ5IHsKKwkJCQkJCWZpbmFsIEVTdHJ1Y3R1cmFsRmVhdHVyZSBmZWF0dXJlID0gKEVTdHJ1Y3R1cmFsRmVhdHVyZSkgZGVzY3JpcHRvcgorCQkJCQkJCQkuZ2V0RmVhdHVyZShudWxsKTsKKwkJCQkJCXJldHVybiBNdWx0aXBvcHVsYXRpb25EaXNlYXNlV2l6YXJkTWVzc2FnZXMuZ2V0U3RyaW5nKGZlYXR1cmUKKwkJCQkJCQkJLmdldE5hbWUoKQorCQkJCQkJCQkrIFVOSVRfU1VGRklYKTsKKwkJCQkJfSBjYXRjaCAoTWlzc2luZ1Jlc291cmNlRXhjZXB0aW9uIGUpIHsKKwkJCQkJCXJldHVybiBzdXBlci5nZXRQcm9wZXJ0eVVuaXRzKGRlc2NyaXB0b3IpOworCQkJCQl9CisJCQkJfSAvLyBnZXRQcm9wZXJ0eVVuaXRzCisJCQl9OworCQl9IC8vIGlmIHdlIGRpZG4ndCBjcmVhdGUgb25lIGJlZm9yZQorCQlyZXR1cm4gYWRhcHRlcjsKKwl9Ly8gY3JlYXRlRXhhbXBsZURpc2Vhc2VNb2RlbEFkYXB0ZXIoKQorCit9IC8vIEV4YW1wbGVQcm9wZXJ0eVN0cmluZ1Byb3ZpZGVyQWRhcHRlckZhY3RvcnkKZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzLm11bHRpcG9wdWxhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL211bHRpcG9wdWxhdGlvbi9wcmVzZW50YXRpb24vTXVsdGlwb3B1bGF0aW9uQWN0aW9uQmFyQ29udHJpYnV0b3IuamF2YSBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzLm11bHRpcG9wdWxhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL211bHRpcG9wdWxhdGlvbi9wcmVzZW50YXRpb24vTXVsdGlwb3B1bGF0aW9uQWN0aW9uQmFyQ29udHJpYnV0b3IuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMTAyZWFlCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMubXVsdGlwb3B1bGF0aW9uL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvbXVsdGlwb3B1bGF0aW9uL3ByZXNlbnRhdGlvbi9NdWx0aXBvcHVsYXRpb25BY3Rpb25CYXJDb250cmlidXRvci5qYXZhCkBAIC0wLDAgKzEsNDI3IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5tdWx0aXBvcHVsYXRpb24ucHJlc2VudGF0aW9uOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDEwIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7CitpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnVpLnZpZXdlci5JVmlld2VyUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQuZG9tYWluLkVkaXRpbmdEb21haW47CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQuZG9tYWluLklFZGl0aW5nRG9tYWluUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkuYWN0aW9uLkNvbnRyb2xBY3Rpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkuYWN0aW9uLkNyZWF0ZUNoaWxkQWN0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmFjdGlvbi5DcmVhdGVTaWJsaW5nQWN0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmFjdGlvbi5FZGl0aW5nRG9tYWluQWN0aW9uQmFyQ29udHJpYnV0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkuYWN0aW9uLkxvYWRSZXNvdXJjZUFjdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5hY3Rpb24uVmFsaWRhdGVBY3Rpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLkFjdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uQWN0aW9uQ29udHJpYnV0aW9uSXRlbTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSUFjdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSUNvbnRyaWJ1dGlvbkl0ZW07CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklDb250cmlidXRpb25NYW5hZ2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JTWVudUxpc3RlbmVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JTWVudU1hbmFnZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklUb29sQmFyTWFuYWdlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uTWVudU1hbmFnZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLlNlcGFyYXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uU3ViQ29udHJpYnV0aW9uSXRlbTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvblByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVN0cnVjdHVyZWRTZWxlY3Rpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5TZWxlY3Rpb25DaGFuZ2VkRXZlbnQ7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5WaWV3ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuSUVkaXRvclBhcnQ7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuUGFydEluaXRFeGNlcHRpb247CisKKy8qKgorICogVGhpcyBpcyB0aGUgYWN0aW9uIGJhciBjb250cmlidXRvciBmb3IgdGhlIE11bHRpcG9wdWxhdGlvbiBtb2RlbCBlZGl0b3IuCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBNdWx0aXBvcHVsYXRpb25BY3Rpb25CYXJDb250cmlidXRvcgorCWV4dGVuZHMgRWRpdGluZ0RvbWFpbkFjdGlvbkJhckNvbnRyaWJ1dG9yCisJaW1wbGVtZW50cyBJU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyIHsKKwkvKioKKwkgKiBUaGlzIGtlZXBzIHRyYWNrIG9mIHRoZSBhY3RpdmUgZWRpdG9yLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBJRWRpdG9yUGFydCBhY3RpdmVFZGl0b3JQYXJ0OworCisJLyoqCisJICogVGhpcyBrZWVwcyB0cmFjayBvZiB0aGUgY3VycmVudCBzZWxlY3Rpb24gcHJvdmlkZXIuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIElTZWxlY3Rpb25Qcm92aWRlciBzZWxlY3Rpb25Qcm92aWRlcjsKKworCS8qKgorCSAqIFRoaXMgYWN0aW9uIG9wZW5zIHRoZSBQcm9wZXJ0aWVzIHZpZXcuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIElBY3Rpb24gc2hvd1Byb3BlcnRpZXNWaWV3QWN0aW9uID0KKwkJbmV3IEFjdGlvbihNdWx0aXBvcHVsYXRpb25FZGl0b3JQbHVnaW4uSU5TVEFOQ0UuZ2V0U3RyaW5nKCJfVUlfU2hvd1Byb3BlcnRpZXNWaWV3X21lbnVfaXRlbSIpKSB7CisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyB2b2lkIHJ1bigpIHsKKwkJCQl0cnkgeworCQkJCQlnZXRQYWdlKCkuc2hvd1ZpZXcoIm9yZy5lY2xpcHNlLnVpLnZpZXdzLlByb3BlcnR5U2hlZXQiKTsKKwkJCQl9CisJCQkJY2F0Y2ggKFBhcnRJbml0RXhjZXB0aW9uIGV4Y2VwdGlvbikgeworCQkJCQlNdWx0aXBvcHVsYXRpb25FZGl0b3JQbHVnaW4uSU5TVEFOQ0UubG9nKGV4Y2VwdGlvbik7CisJCQkJfQorCQkJfQorCQl9OworCisJLyoqCisJICogVGhpcyBhY3Rpb24gcmVmcmVzaGVzIHRoZSB2aWV3ZXIgb2YgdGhlIGN1cnJlbnQgZWRpdG9yIGlmIHRoZSBlZGl0b3IKKwkgKiBpbXBsZW1lbnRzIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnVpLnZpZXdlci5JVmlld2VyUHJvdmlkZXJ9LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBJQWN0aW9uIHJlZnJlc2hWaWV3ZXJBY3Rpb24gPQorCQluZXcgQWN0aW9uKE11bHRpcG9wdWxhdGlvbkVkaXRvclBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoIl9VSV9SZWZyZXNoVmlld2VyX21lbnVfaXRlbSIpKSB7CisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyBib29sZWFuIGlzRW5hYmxlZCgpIHsKKwkJCQlyZXR1cm4gYWN0aXZlRWRpdG9yUGFydCBpbnN0YW5jZW9mIElWaWV3ZXJQcm92aWRlcjsKKwkJCX0KKworCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgdm9pZCBydW4oKSB7CisJCQkJaWYgKGFjdGl2ZUVkaXRvclBhcnQgaW5zdGFuY2VvZiBJVmlld2VyUHJvdmlkZXIpIHsKKwkJCQkJVmlld2VyIHZpZXdlciA9ICgoSVZpZXdlclByb3ZpZGVyKWFjdGl2ZUVkaXRvclBhcnQpLmdldFZpZXdlcigpOworCQkJCQlpZiAodmlld2VyICE9IG51bGwpIHsKKwkJCQkJCXZpZXdlci5yZWZyZXNoKCk7CisJCQkJCX0KKwkJCQl9CisJCQl9CisJCX07CisKKwkvKioKKwkgKiBUaGlzIHdpbGwgY29udGFpbiBvbmUge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmFjdGlvbi5DcmVhdGVDaGlsZEFjdGlvbn0gY29ycmVzcG9uZGluZyB0byBlYWNoIGRlc2NyaXB0b3IKKwkgKiBnZW5lcmF0ZWQgZm9yIHRoZSBjdXJyZW50IHNlbGVjdGlvbiBieSB0aGUgaXRlbSBwcm92aWRlci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgQ29sbGVjdGlvbjxJQWN0aW9uPiBjcmVhdGVDaGlsZEFjdGlvbnM7CisKKwkvKioKKwkgKiBUaGlzIGlzIHRoZSBtZW51IG1hbmFnZXIgaW50byB3aGljaCBtZW51IGNvbnRyaWJ1dGlvbiBpdGVtcyBzaG91bGQgYmUgYWRkZWQgZm9yIENyZWF0ZUNoaWxkIGFjdGlvbnMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIElNZW51TWFuYWdlciBjcmVhdGVDaGlsZE1lbnVNYW5hZ2VyOworCisJLyoqCisJICogVGhpcyB3aWxsIGNvbnRhaW4gb25lIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5hY3Rpb24uQ3JlYXRlU2libGluZ0FjdGlvbn0gY29ycmVzcG9uZGluZyB0byBlYWNoIGRlc2NyaXB0b3IKKwkgKiBnZW5lcmF0ZWQgZm9yIHRoZSBjdXJyZW50IHNlbGVjdGlvbiBieSB0aGUgaXRlbSBwcm92aWRlci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgQ29sbGVjdGlvbjxJQWN0aW9uPiBjcmVhdGVTaWJsaW5nQWN0aW9uczsKKworCS8qKgorCSAqIFRoaXMgaXMgdGhlIG1lbnUgbWFuYWdlciBpbnRvIHdoaWNoIG1lbnUgY29udHJpYnV0aW9uIGl0ZW1zIHNob3VsZCBiZSBhZGRlZCBmb3IgQ3JlYXRlU2libGluZyBhY3Rpb25zLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBJTWVudU1hbmFnZXIgY3JlYXRlU2libGluZ01lbnVNYW5hZ2VyOworCisJLyoqCisJICogVGhpcyBjcmVhdGVzIGFuIGluc3RhbmNlIG9mIHRoZSBjb250cmlidXRvci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgTXVsdGlwb3B1bGF0aW9uQWN0aW9uQmFyQ29udHJpYnV0b3IoKSB7CisJCXN1cGVyKEFERElUSU9OU19MQVNUX1NUWUxFKTsKKwkJbG9hZFJlc291cmNlQWN0aW9uID0gbmV3IExvYWRSZXNvdXJjZUFjdGlvbigpOworCQl2YWxpZGF0ZUFjdGlvbiA9IG5ldyBWYWxpZGF0ZUFjdGlvbigpOworCQljb250cm9sQWN0aW9uID0gbmV3IENvbnRyb2xBY3Rpb24oKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFkZHMgU2VwYXJhdG9ycyBmb3IgZWRpdG9yIGFkZGl0aW9ucyB0byB0aGUgdG9vbCBiYXIuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgY29udHJpYnV0ZVRvVG9vbEJhcihJVG9vbEJhck1hbmFnZXIgdG9vbEJhck1hbmFnZXIpIHsKKwkJdG9vbEJhck1hbmFnZXIuYWRkKG5ldyBTZXBhcmF0b3IoIm11bHRpcG9wdWxhdGlvbi1zZXR0aW5ncyIpKTsKKwkJdG9vbEJhck1hbmFnZXIuYWRkKG5ldyBTZXBhcmF0b3IoIm11bHRpcG9wdWxhdGlvbi1hZGRpdGlvbnMiKSk7CisJfQorCisJLyoqCisJICogVGhpcyBhZGRzIHRvIHRoZSBtZW51IGJhciBhIG1lbnUgYW5kIHNvbWUgc2VwYXJhdG9ycyBmb3IgZWRpdG9yIGFkZGl0aW9ucywKKwkgKiBhcyB3ZWxsIGFzIHRoZSBzdWItbWVudXMgZm9yIG9iamVjdCBjcmVhdGlvbiBpdGVtcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBjb250cmlidXRlVG9NZW51KElNZW51TWFuYWdlciBtZW51TWFuYWdlcikgeworCQlzdXBlci5jb250cmlidXRlVG9NZW51KG1lbnVNYW5hZ2VyKTsKKworCQlJTWVudU1hbmFnZXIgc3VibWVudU1hbmFnZXIgPSBuZXcgTWVudU1hbmFnZXIoTXVsdGlwb3B1bGF0aW9uRWRpdG9yUGx1Z2luLklOU1RBTkNFLmdldFN0cmluZygiX1VJX011bHRpcG9wdWxhdGlvbkVkaXRvcl9tZW51IiksICJvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMubXVsdGlwb3B1bGF0aW9uTWVudUlEIik7CisJCW1lbnVNYW5hZ2VyLmluc2VydEFmdGVyKCJhZGRpdGlvbnMiLCBzdWJtZW51TWFuYWdlcik7CisJCXN1Ym1lbnVNYW5hZ2VyLmFkZChuZXcgU2VwYXJhdG9yKCJzZXR0aW5ncyIpKTsKKwkJc3VibWVudU1hbmFnZXIuYWRkKG5ldyBTZXBhcmF0b3IoImFjdGlvbnMiKSk7CisJCXN1Ym1lbnVNYW5hZ2VyLmFkZChuZXcgU2VwYXJhdG9yKCJhZGRpdGlvbnMiKSk7CisJCXN1Ym1lbnVNYW5hZ2VyLmFkZChuZXcgU2VwYXJhdG9yKCJhZGRpdGlvbnMtZW5kIikpOworCisJCS8vIFByZXBhcmUgZm9yIENyZWF0ZUNoaWxkIGl0ZW0gYWRkaXRpb24gb3IgcmVtb3ZhbC4KKwkJLy8KKwkJY3JlYXRlQ2hpbGRNZW51TWFuYWdlciA9IG5ldyBNZW51TWFuYWdlcihNdWx0aXBvcHVsYXRpb25FZGl0b3JQbHVnaW4uSU5TVEFOQ0UuZ2V0U3RyaW5nKCJfVUlfQ3JlYXRlQ2hpbGRfbWVudV9pdGVtIikpOworCQlzdWJtZW51TWFuYWdlci5pbnNlcnRCZWZvcmUoImFkZGl0aW9ucyIsIGNyZWF0ZUNoaWxkTWVudU1hbmFnZXIpOworCisJCS8vIFByZXBhcmUgZm9yIENyZWF0ZVNpYmxpbmcgaXRlbSBhZGRpdGlvbiBvciByZW1vdmFsLgorCQkvLworCQljcmVhdGVTaWJsaW5nTWVudU1hbmFnZXIgPSBuZXcgTWVudU1hbmFnZXIoTXVsdGlwb3B1bGF0aW9uRWRpdG9yUGx1Z2luLklOU1RBTkNFLmdldFN0cmluZygiX1VJX0NyZWF0ZVNpYmxpbmdfbWVudV9pdGVtIikpOworCQlzdWJtZW51TWFuYWdlci5pbnNlcnRCZWZvcmUoImFkZGl0aW9ucyIsIGNyZWF0ZVNpYmxpbmdNZW51TWFuYWdlcik7CisKKwkJLy8gRm9yY2UgYW4gdXBkYXRlIGJlY2F1c2UgRWNsaXBzZSBoaWRlcyBlbXB0eSBtZW51cyBub3cuCisJCS8vCisJCXN1Ym1lbnVNYW5hZ2VyLmFkZE1lbnVMaXN0ZW5lcgorCQkJKG5ldyBJTWVudUxpc3RlbmVyKCkgeworCQkJCSBwdWJsaWMgdm9pZCBtZW51QWJvdXRUb1Nob3coSU1lbnVNYW5hZ2VyIG1lbnVNYW5hZ2VyKSB7CisJCQkJCSBtZW51TWFuYWdlci51cGRhdGVBbGwodHJ1ZSk7CisJCQkJIH0KKwkJCSB9KTsKKworCQlhZGRHbG9iYWxBY3Rpb25zKHN1Ym1lbnVNYW5hZ2VyKTsKKwl9CisKKwkvKioKKwkgKiBXaGVuIHRoZSBhY3RpdmUgZWRpdG9yIGNoYW5nZXMsIHRoaXMgcmVtZW1iZXJzIHRoZSBjaGFuZ2UgYW5kIHJlZ2lzdGVycyB3aXRoIGl0IGFzIGEgc2VsZWN0aW9uIHByb3ZpZGVyLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIHNldEFjdGl2ZUVkaXRvcihJRWRpdG9yUGFydCBwYXJ0KSB7CisJCXN1cGVyLnNldEFjdGl2ZUVkaXRvcihwYXJ0KTsKKwkJYWN0aXZlRWRpdG9yUGFydCA9IHBhcnQ7CisKKwkJLy8gU3dpdGNoIHRvIHRoZSBuZXcgc2VsZWN0aW9uIHByb3ZpZGVyLgorCQkvLworCQlpZiAoc2VsZWN0aW9uUHJvdmlkZXIgIT0gbnVsbCkgeworCQkJc2VsZWN0aW9uUHJvdmlkZXIucmVtb3ZlU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyKHRoaXMpOworCQl9CisJCWlmIChwYXJ0ID09IG51bGwpIHsKKwkJCXNlbGVjdGlvblByb3ZpZGVyID0gbnVsbDsKKwkJfQorCQllbHNlIHsKKwkJCXNlbGVjdGlvblByb3ZpZGVyID0gcGFydC5nZXRTaXRlKCkuZ2V0U2VsZWN0aW9uUHJvdmlkZXIoKTsKKwkJCXNlbGVjdGlvblByb3ZpZGVyLmFkZFNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcih0aGlzKTsKKworCQkJLy8gRmFrZSBhIHNlbGVjdGlvbiBjaGFuZ2VkIGV2ZW50IHRvIHVwZGF0ZSB0aGUgbWVudXMuCisJCQkvLworCQkJaWYgKHNlbGVjdGlvblByb3ZpZGVyLmdldFNlbGVjdGlvbigpICE9IG51bGwpIHsKKwkJCQlzZWxlY3Rpb25DaGFuZ2VkKG5ldyBTZWxlY3Rpb25DaGFuZ2VkRXZlbnQoc2VsZWN0aW9uUHJvdmlkZXIsIHNlbGVjdGlvblByb3ZpZGVyLmdldFNlbGVjdGlvbigpKSk7CisJCQl9CisJCX0KKwl9CisKKwkvKioKKwkgKiBUaGlzIGltcGxlbWVudHMge0BsaW5rIG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcn0sCisJICogaGFuZGxpbmcge0BsaW5rIG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuU2VsZWN0aW9uQ2hhbmdlZEV2ZW50fXMgYnkgcXVlcnlpbmcgZm9yIHRoZSBjaGlsZHJlbiBhbmQgc2libGluZ3MKKwkgKiB0aGF0IGNhbiBiZSBhZGRlZCB0byB0aGUgc2VsZWN0ZWQgb2JqZWN0IGFuZCB1cGRhdGluZyB0aGUgbWVudXMgYWNjb3JkaW5nbHkuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgc2VsZWN0aW9uQ2hhbmdlZChTZWxlY3Rpb25DaGFuZ2VkRXZlbnQgZXZlbnQpIHsKKwkJLy8gUmVtb3ZlIGFueSBtZW51IGl0ZW1zIGZvciBvbGQgc2VsZWN0aW9uLgorCQkvLworCQlpZiAoY3JlYXRlQ2hpbGRNZW51TWFuYWdlciAhPSBudWxsKSB7CisJCQlkZXBvcHVsYXRlTWFuYWdlcihjcmVhdGVDaGlsZE1lbnVNYW5hZ2VyLCBjcmVhdGVDaGlsZEFjdGlvbnMpOworCQl9CisJCWlmIChjcmVhdGVTaWJsaW5nTWVudU1hbmFnZXIgIT0gbnVsbCkgeworCQkJZGVwb3B1bGF0ZU1hbmFnZXIoY3JlYXRlU2libGluZ01lbnVNYW5hZ2VyLCBjcmVhdGVTaWJsaW5nQWN0aW9ucyk7CisJCX0KKworCQkvLyBRdWVyeSB0aGUgbmV3IHNlbGVjdGlvbiBmb3IgYXBwcm9wcmlhdGUgbmV3IGNoaWxkL3NpYmxpbmcgZGVzY3JpcHRvcnMKKwkJLy8KKwkJQ29sbGVjdGlvbjw/PiBuZXdDaGlsZERlc2NyaXB0b3JzID0gbnVsbDsKKwkJQ29sbGVjdGlvbjw/PiBuZXdTaWJsaW5nRGVzY3JpcHRvcnMgPSBudWxsOworCisJCUlTZWxlY3Rpb24gc2VsZWN0aW9uID0gZXZlbnQuZ2V0U2VsZWN0aW9uKCk7CisJCWlmIChzZWxlY3Rpb24gaW5zdGFuY2VvZiBJU3RydWN0dXJlZFNlbGVjdGlvbiAmJiAoKElTdHJ1Y3R1cmVkU2VsZWN0aW9uKXNlbGVjdGlvbikuc2l6ZSgpID09IDEpIHsKKwkJCU9iamVjdCBvYmplY3QgPSAoKElTdHJ1Y3R1cmVkU2VsZWN0aW9uKXNlbGVjdGlvbikuZ2V0Rmlyc3RFbGVtZW50KCk7CisKKwkJCUVkaXRpbmdEb21haW4gZG9tYWluID0gKChJRWRpdGluZ0RvbWFpblByb3ZpZGVyKWFjdGl2ZUVkaXRvclBhcnQpLmdldEVkaXRpbmdEb21haW4oKTsKKworCQkJbmV3Q2hpbGREZXNjcmlwdG9ycyA9IGRvbWFpbi5nZXROZXdDaGlsZERlc2NyaXB0b3JzKG9iamVjdCwgbnVsbCk7CisJCQluZXdTaWJsaW5nRGVzY3JpcHRvcnMgPSBkb21haW4uZ2V0TmV3Q2hpbGREZXNjcmlwdG9ycyhudWxsLCBvYmplY3QpOworCQl9CisKKwkJLy8gR2VuZXJhdGUgYWN0aW9ucyBmb3Igc2VsZWN0aW9uOyBwb3B1bGF0ZSBhbmQgcmVkcmF3IHRoZSBtZW51cy4KKwkJLy8KKwkJY3JlYXRlQ2hpbGRBY3Rpb25zID0gZ2VuZXJhdGVDcmVhdGVDaGlsZEFjdGlvbnMobmV3Q2hpbGREZXNjcmlwdG9ycywgc2VsZWN0aW9uKTsKKwkJY3JlYXRlU2libGluZ0FjdGlvbnMgPSBnZW5lcmF0ZUNyZWF0ZVNpYmxpbmdBY3Rpb25zKG5ld1NpYmxpbmdEZXNjcmlwdG9ycywgc2VsZWN0aW9uKTsKKworCQlpZiAoY3JlYXRlQ2hpbGRNZW51TWFuYWdlciAhPSBudWxsKSB7CisJCQlwb3B1bGF0ZU1hbmFnZXIoY3JlYXRlQ2hpbGRNZW51TWFuYWdlciwgY3JlYXRlQ2hpbGRBY3Rpb25zLCBudWxsKTsKKwkJCWNyZWF0ZUNoaWxkTWVudU1hbmFnZXIudXBkYXRlKHRydWUpOworCQl9CisJCWlmIChjcmVhdGVTaWJsaW5nTWVudU1hbmFnZXIgIT0gbnVsbCkgeworCQkJcG9wdWxhdGVNYW5hZ2VyKGNyZWF0ZVNpYmxpbmdNZW51TWFuYWdlciwgY3JlYXRlU2libGluZ0FjdGlvbnMsIG51bGwpOworCQkJY3JlYXRlU2libGluZ01lbnVNYW5hZ2VyLnVwZGF0ZSh0cnVlKTsKKwkJfQorCX0KKworCS8qKgorCSAqIFRoaXMgZ2VuZXJhdGVzIGEge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmFjdGlvbi5DcmVhdGVDaGlsZEFjdGlvbn0gZm9yIGVhY2ggb2JqZWN0IGluIDxjb2RlPmRlc2NyaXB0b3JzPC9jb2RlPiwKKwkgKiBhbmQgcmV0dXJucyB0aGUgY29sbGVjdGlvbiBvZiB0aGVzZSBhY3Rpb25zLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBDb2xsZWN0aW9uPElBY3Rpb24+IGdlbmVyYXRlQ3JlYXRlQ2hpbGRBY3Rpb25zKENvbGxlY3Rpb248Pz4gZGVzY3JpcHRvcnMsIElTZWxlY3Rpb24gc2VsZWN0aW9uKSB7CisJCUNvbGxlY3Rpb248SUFjdGlvbj4gYWN0aW9ucyA9IG5ldyBBcnJheUxpc3Q8SUFjdGlvbj4oKTsKKwkJaWYgKGRlc2NyaXB0b3JzICE9IG51bGwpIHsKKwkJCWZvciAoT2JqZWN0IGRlc2NyaXB0b3IgOiBkZXNjcmlwdG9ycykgeworCQkJCWFjdGlvbnMuYWRkKG5ldyBDcmVhdGVDaGlsZEFjdGlvbihhY3RpdmVFZGl0b3JQYXJ0LCBzZWxlY3Rpb24sIGRlc2NyaXB0b3IpKTsKKwkJCX0KKwkJfQorCQlyZXR1cm4gYWN0aW9uczsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGdlbmVyYXRlcyBhIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5hY3Rpb24uQ3JlYXRlU2libGluZ0FjdGlvbn0gZm9yIGVhY2ggb2JqZWN0IGluIDxjb2RlPmRlc2NyaXB0b3JzPC9jb2RlPiwKKwkgKiBhbmQgcmV0dXJucyB0aGUgY29sbGVjdGlvbiBvZiB0aGVzZSBhY3Rpb25zLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBDb2xsZWN0aW9uPElBY3Rpb24+IGdlbmVyYXRlQ3JlYXRlU2libGluZ0FjdGlvbnMoQ29sbGVjdGlvbjw/PiBkZXNjcmlwdG9ycywgSVNlbGVjdGlvbiBzZWxlY3Rpb24pIHsKKwkJQ29sbGVjdGlvbjxJQWN0aW9uPiBhY3Rpb25zID0gbmV3IEFycmF5TGlzdDxJQWN0aW9uPigpOworCQlpZiAoZGVzY3JpcHRvcnMgIT0gbnVsbCkgeworCQkJZm9yIChPYmplY3QgZGVzY3JpcHRvciA6IGRlc2NyaXB0b3JzKSB7CisJCQkJYWN0aW9ucy5hZGQobmV3IENyZWF0ZVNpYmxpbmdBY3Rpb24oYWN0aXZlRWRpdG9yUGFydCwgc2VsZWN0aW9uLCBkZXNjcmlwdG9yKSk7CisJCQl9CisJCX0KKwkJcmV0dXJuIGFjdGlvbnM7CisJfQorCisJLyoqCisJICogVGhpcyBwb3B1bGF0ZXMgdGhlIHNwZWNpZmllZCA8Y29kZT5tYW5hZ2VyPC9jb2RlPiB3aXRoIHtAbGluayBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uQWN0aW9uQ29udHJpYnV0aW9uSXRlbX1zCisJICogYmFzZWQgb24gdGhlIHtAbGluayBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSUFjdGlvbn1zIGNvbnRhaW5lZCBpbiB0aGUgPGNvZGU+YWN0aW9uczwvY29kZT4gY29sbGVjdGlvbiwKKwkgKiBieSBpbnNlcnRpbmcgdGhlbSBiZWZvcmUgdGhlIHNwZWNpZmllZCBjb250cmlidXRpb24gaXRlbSA8Y29kZT5jb250cmlidXRpb25JRDwvY29kZT4uCisJICogSWYgPGNvZGU+Y29udHJpYnV0aW9uSUQ8L2NvZGU+IGlzIDxjb2RlPm51bGw8L2NvZGU+LCB0aGV5IGFyZSBzaW1wbHkgYWRkZWQuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgcG9wdWxhdGVNYW5hZ2VyKElDb250cmlidXRpb25NYW5hZ2VyIG1hbmFnZXIsIENvbGxlY3Rpb248PyBleHRlbmRzIElBY3Rpb24+IGFjdGlvbnMsIFN0cmluZyBjb250cmlidXRpb25JRCkgeworCQlpZiAoYWN0aW9ucyAhPSBudWxsKSB7CisJCQlmb3IgKElBY3Rpb24gYWN0aW9uIDogYWN0aW9ucykgeworCQkJCWlmIChjb250cmlidXRpb25JRCAhPSBudWxsKSB7CisJCQkJCW1hbmFnZXIuaW5zZXJ0QmVmb3JlKGNvbnRyaWJ1dGlvbklELCBhY3Rpb24pOworCQkJCX0KKwkJCQllbHNlIHsKKwkJCQkJbWFuYWdlci5hZGQoYWN0aW9uKTsKKwkJCQl9CisJCQl9CisJCX0KKwl9CisJCQorCS8qKgorCSAqIFRoaXMgcmVtb3ZlcyBmcm9tIHRoZSBzcGVjaWZpZWQgPGNvZGU+bWFuYWdlcjwvY29kZT4gYWxsIHtAbGluayBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uQWN0aW9uQ29udHJpYnV0aW9uSXRlbX1zCisJICogYmFzZWQgb24gdGhlIHtAbGluayBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSUFjdGlvbn1zIGNvbnRhaW5lZCBpbiB0aGUgPGNvZGU+YWN0aW9uczwvY29kZT4gY29sbGVjdGlvbi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBkZXBvcHVsYXRlTWFuYWdlcihJQ29udHJpYnV0aW9uTWFuYWdlciBtYW5hZ2VyLCBDb2xsZWN0aW9uPD8gZXh0ZW5kcyBJQWN0aW9uPiBhY3Rpb25zKSB7CisJCWlmIChhY3Rpb25zICE9IG51bGwpIHsKKwkJCUlDb250cmlidXRpb25JdGVtW10gaXRlbXMgPSBtYW5hZ2VyLmdldEl0ZW1zKCk7CisJCQlmb3IgKGludCBpID0gMDsgaSA8IGl0ZW1zLmxlbmd0aDsgaSsrKSB7CisJCQkJLy8gTG9vayBpbnRvIFN1YkNvbnRyaWJ1dGlvbkl0ZW1zCisJCQkJLy8KKwkJCQlJQ29udHJpYnV0aW9uSXRlbSBjb250cmlidXRpb25JdGVtID0gaXRlbXNbaV07CisJCQkJd2hpbGUgKGNvbnRyaWJ1dGlvbkl0ZW0gaW5zdGFuY2VvZiBTdWJDb250cmlidXRpb25JdGVtKSB7CisJCQkJCWNvbnRyaWJ1dGlvbkl0ZW0gPSAoKFN1YkNvbnRyaWJ1dGlvbkl0ZW0pY29udHJpYnV0aW9uSXRlbSkuZ2V0SW5uZXJJdGVtKCk7CisJCQkJfQorCisJCQkJLy8gRGVsZXRlIHRoZSBBY3Rpb25Db250cmlidXRpb25JdGVtcyB3aXRoIG1hdGNoaW5nIGFjdGlvbi4KKwkJCQkvLworCQkJCWlmIChjb250cmlidXRpb25JdGVtIGluc3RhbmNlb2YgQWN0aW9uQ29udHJpYnV0aW9uSXRlbSkgeworCQkJCQlJQWN0aW9uIGFjdGlvbiA9ICgoQWN0aW9uQ29udHJpYnV0aW9uSXRlbSljb250cmlidXRpb25JdGVtKS5nZXRBY3Rpb24oKTsKKwkJCQkJaWYgKGFjdGlvbnMuY29udGFpbnMoYWN0aW9uKSkgeworCQkJCQkJbWFuYWdlci5yZW1vdmUoY29udHJpYnV0aW9uSXRlbSk7CisJCQkJCX0KKwkJCQl9CisJCQl9CisJCX0KKwl9CisKKwkvKioKKwkgKiBUaGlzIHBvcHVsYXRlcyB0aGUgcG9wLXVwIG1lbnUgYmVmb3JlIGl0IGFwcGVhcnMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgbWVudUFib3V0VG9TaG93KElNZW51TWFuYWdlciBtZW51TWFuYWdlcikgeworCQlzdXBlci5tZW51QWJvdXRUb1Nob3cobWVudU1hbmFnZXIpOworCQlNZW51TWFuYWdlciBzdWJtZW51TWFuYWdlciA9IG51bGw7CisKKwkJc3VibWVudU1hbmFnZXIgPSBuZXcgTWVudU1hbmFnZXIoTXVsdGlwb3B1bGF0aW9uRWRpdG9yUGx1Z2luLklOU1RBTkNFLmdldFN0cmluZygiX1VJX0NyZWF0ZUNoaWxkX21lbnVfaXRlbSIpKTsKKwkJcG9wdWxhdGVNYW5hZ2VyKHN1Ym1lbnVNYW5hZ2VyLCBjcmVhdGVDaGlsZEFjdGlvbnMsIG51bGwpOworCQltZW51TWFuYWdlci5pbnNlcnRCZWZvcmUoImVkaXQiLCBzdWJtZW51TWFuYWdlcik7CisKKwkJc3VibWVudU1hbmFnZXIgPSBuZXcgTWVudU1hbmFnZXIoTXVsdGlwb3B1bGF0aW9uRWRpdG9yUGx1Z2luLklOU1RBTkNFLmdldFN0cmluZygiX1VJX0NyZWF0ZVNpYmxpbmdfbWVudV9pdGVtIikpOworCQlwb3B1bGF0ZU1hbmFnZXIoc3VibWVudU1hbmFnZXIsIGNyZWF0ZVNpYmxpbmdBY3Rpb25zLCBudWxsKTsKKwkJbWVudU1hbmFnZXIuaW5zZXJ0QmVmb3JlKCJlZGl0Iiwgc3VibWVudU1hbmFnZXIpOworCX0KKworCS8qKgorCSAqIFRoaXMgaW5zZXJ0cyBnbG9iYWwgYWN0aW9ucyBiZWZvcmUgdGhlICJhZGRpdGlvbnMtZW5kIiBzZXBhcmF0b3IuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgYWRkR2xvYmFsQWN0aW9ucyhJTWVudU1hbmFnZXIgbWVudU1hbmFnZXIpIHsKKwkJbWVudU1hbmFnZXIuaW5zZXJ0QWZ0ZXIoImFkZGl0aW9ucy1lbmQiLCBuZXcgU2VwYXJhdG9yKCJ1aS1hY3Rpb25zIikpOworCQltZW51TWFuYWdlci5pbnNlcnRBZnRlcigidWktYWN0aW9ucyIsIHNob3dQcm9wZXJ0aWVzVmlld0FjdGlvbik7CisKKwkJcmVmcmVzaFZpZXdlckFjdGlvbi5zZXRFbmFibGVkKHJlZnJlc2hWaWV3ZXJBY3Rpb24uaXNFbmFibGVkKCkpOwkJCisJCW1lbnVNYW5hZ2VyLmluc2VydEFmdGVyKCJ1aS1hY3Rpb25zIiwgcmVmcmVzaFZpZXdlckFjdGlvbik7CisKKwkJc3VwZXIuYWRkR2xvYmFsQWN0aW9ucyhtZW51TWFuYWdlcik7CisJfQorCisJLyoqCisJICogVGhpcyBlbnN1cmVzIHRoYXQgYSBkZWxldGUgYWN0aW9uIHdpbGwgY2xlYW4gdXAgYWxsIHJlZmVyZW5jZXMgdG8gZGVsZXRlZCBvYmplY3RzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCBib29sZWFuIHJlbW92ZUFsbFJlZmVyZW5jZXNPbkRlbGV0ZSgpIHsKKwkJcmV0dXJuIHRydWU7CisJfQorCit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMubXVsdGlwb3B1bGF0aW9uL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvbXVsdGlwb3B1bGF0aW9uL3ByZXNlbnRhdGlvbi9NdWx0aXBvcHVsYXRpb25EaXNlYXNlV2l6YXJkTWVzc2FnZXMuamF2YSBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzLm11bHRpcG9wdWxhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL211bHRpcG9wdWxhdGlvbi9wcmVzZW50YXRpb24vTXVsdGlwb3B1bGF0aW9uRGlzZWFzZVdpemFyZE1lc3NhZ2VzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTY0M2ZhMgotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzLm11bHRpcG9wdWxhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL211bHRpcG9wdWxhdGlvbi9wcmVzZW50YXRpb24vTXVsdGlwb3B1bGF0aW9uRGlzZWFzZVdpemFyZE1lc3NhZ2VzLmphdmEKQEAgLTAsMCArMSw0NiBAQAorLy8gRXhhbXBsZURpc2Vhc2VXaXphcmRNZXNzYWdlcy5qYXZhCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5tdWx0aXBvcHVsYXRpb24ucHJlc2VudGF0aW9uOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA3LCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGphdmEudXRpbC5NaXNzaW5nUmVzb3VyY2VFeGNlcHRpb247CitpbXBvcnQgamF2YS51dGlsLlJlc291cmNlQnVuZGxlOworCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLkNvbnN0YW50czsKKworLyoqCisgKiBUaGlzIGNsYXNzIGlzIHRoZSBSZXNvdXJjZSBCdW5kbGUgZm9yIHRoaXMgcGFja2FnZS4KKyAqLworcHVibGljIGNsYXNzIE11bHRpcG9wdWxhdGlvbkRpc2Vhc2VXaXphcmRNZXNzYWdlcyB7CisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEJVTkRMRV9OQU1FID0gQ29uc3RhbnRzLklEX1JPT1QKKwkJCSsgIi5kaXNlYXNlbW9kZWxzLm11bHRpcG9wdWxhdGlvbi5wcmVzZW50YXRpb24ubXVsdGlwb3B1bGF0aW9uZGlzZWFzZW1lc3NhZ2VzIjsgLy8kTk9OLU5MUy0xJAorCisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgUmVzb3VyY2VCdW5kbGUgUkVTT1VSQ0VfQlVORExFID0gUmVzb3VyY2VCdW5kbGUKKwkJCS5nZXRCdW5kbGUoQlVORExFX05BTUUpOworCisJLyoqCisJICogCisJICovCisJcHVibGljIE11bHRpcG9wdWxhdGlvbkRpc2Vhc2VXaXphcmRNZXNzYWdlcygpIHsKKwkJLy8gZW1wdHkKKwl9CisKKwkvKioKKwkgKiBAcGFyYW0ga2V5CisJICogICAgICAgICAgICB0aGUga2V5IGZvciB0aGUgbWVzc2FnZQorCSAqIEByZXR1cm4gdGhlIHN0cmluZyB0aGF0IG1hdGNoZXMgdGhlIGtleQorCSAqIEB0aHJvd3MgTWlzc2luZ1Jlc291cmNlRXhjZXB0aW9uIGlmIHRoZSBrZXkgY2Fubm90IGJlIGZvdW5kCisJICovCisJcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0U3RyaW5nKGZpbmFsIFN0cmluZyBrZXkpIHRocm93cyBNaXNzaW5nUmVzb3VyY2VFeGNlcHRpb257CisJCQlyZXR1cm4gUkVTT1VSQ0VfQlVORExFLmdldFN0cmluZyhrZXkpOworCX0gLy8gZ2V0U3RyaW5nCit9IC8vIEV4YW1wbGVEaXNlYXNlV2l6YXJkTWVzc2FnZXMKZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzLm11bHRpcG9wdWxhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL211bHRpcG9wdWxhdGlvbi9wcmVzZW50YXRpb24vTXVsdGlwb3B1bGF0aW9uRWRpdG9yLmphdmEgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy5tdWx0aXBvcHVsYXRpb24vc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9tdWx0aXBvcHVsYXRpb24vcHJlc2VudGF0aW9uL011bHRpcG9wdWxhdGlvbkVkaXRvci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFkZDViMmEKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy5tdWx0aXBvcHVsYXRpb24vc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9tdWx0aXBvcHVsYXRpb24vcHJlc2VudGF0aW9uL011bHRpcG9wdWxhdGlvbkVkaXRvci5qYXZhCkBAIC0wLDAgKzEsMTgwNSBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMubXVsdGlwb3B1bGF0aW9uLnByZXNlbnRhdGlvbjsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAxMCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOworaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW07CitpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbnM7CitpbXBvcnQgamF2YS51dGlsLkV2ZW50T2JqZWN0OworaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOworaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKK2ltcG9ydCBqYXZhLnV0aWwuTGlua2VkSGFzaE1hcDsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuTWFwOworCitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUZpbGU7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSU1hcmtlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUmVzb3VyY2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVJlc291cmNlQ2hhbmdlRXZlbnQ7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVJlc291cmNlQ2hhbmdlTGlzdGVuZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVJlc291cmNlRGVsdGE7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVJlc291cmNlRGVsdGFWaXNpdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLlJlc291cmNlc1BsdWdpbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQ29yZUV4Y2VwdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVBhdGg7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQcm9ncmVzc01vbml0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLk51bGxQcm9ncmVzc01vbml0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5jb21tYW5kLkJhc2ljQ29tbWFuZFN0YWNrOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24uY29tbWFuZC5Db21tYW5kOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24uY29tbWFuZC5Db21tYW5kU3RhY2s7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5jb21tYW5kLkNvbW1hbmRTdGFja0xpc3RlbmVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LkFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnVpLk1hcmtlckhlbHBlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnVpLlZpZXdlclBhbmU7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51aS5lZGl0b3IuUHJvYmxlbUVkaXRvclBhcnQ7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51aS52aWV3ZXIuSVZpZXdlclByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5CYXNpY0RpYWdub3N0aWM7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLkRpYWdub3N0aWM7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlVSSTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRVZhbGlkYXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUucHJvdmlkZXIuRWNvcmVJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUucmVzb3VyY2UuUmVzb3VyY2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnJlc291cmNlLlJlc291cmNlU2V0OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS51dGlsLkVDb250ZW50QWRhcHRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUudXRpbC5FY29yZVV0aWw7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQuZG9tYWluLkFkYXB0ZXJGYWN0b3J5RWRpdGluZ0RvbWFpbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5kb21haW4uRWRpdGluZ0RvbWFpbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5kb21haW4uSUVkaXRpbmdEb21haW5Qcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5BZGFwdGVyRmFjdG9yeUl0ZW1EZWxlZ2F0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuQ29tcG9zZWRBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5SZWZsZWN0aXZlSXRlbVByb3ZpZGVyQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIucmVzb3VyY2UuUmVzb3VyY2VJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5hY3Rpb24uRWRpdGluZ0RvbWFpbkFjdGlvbkJhckNvbnRyaWJ1dG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmNlbGxlZGl0b3IuQWRhcHRlckZhY3RvcnlUcmVlRWRpdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmRuZC5FZGl0aW5nRG9tYWluVmlld2VyRHJvcEFkYXB0ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkuZG5kLkxvY2FsVHJhbnNmZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkuZG5kLlZpZXdlckRyYWdBZGFwdGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLnByb3ZpZGVyLkFkYXB0ZXJGYWN0b3J5Q29udGVudFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLnByb3ZpZGVyLkFkYXB0ZXJGYWN0b3J5TGFiZWxQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5wcm92aWRlci5VbndyYXBwaW5nU2VsZWN0aW9uUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkudXRpbC5FZGl0VUlNYXJrZXJIZWxwZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkudXRpbC5FZGl0VUlVdGlsOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLnZpZXcuRXh0ZW5kZWRQcm9wZXJ0eVNoZWV0UGFnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSU1lbnVMaXN0ZW5lcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSU1lbnVNYW5hZ2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JU3RhdHVzTGluZU1hbmFnZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklUb29sQmFyTWFuYWdlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uTWVudU1hbmFnZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLlNlcGFyYXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5kaWFsb2dzLk1lc3NhZ2VEaWFsb2c7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuZGlhbG9ncy5Qcm9ncmVzc01vbml0b3JEaWFsb2c7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5Db2x1bW5XZWlnaHREYXRhOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU3RydWN0dXJlZFNlbGVjdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLkxpc3RWaWV3ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5TZWxlY3Rpb25DaGFuZ2VkRXZlbnQ7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5TdHJ1Y3R1cmVkU2VsZWN0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuU3RydWN0dXJlZFZpZXdlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlRhYmxlTGF5b3V0OworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuVGFibGVWaWV3ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5UcmVlVmlld2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuVmlld2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24ucHJvdmlkZXIuQ29tbW9uSXRlbVByb3ZpZGVyQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLnByb3ZpZGVyLkdyYXBoSXRlbVByb3ZpZGVyQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmxvZ2dlci5wcm92aWRlci5Mb2dnZXJJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwucHJvdmlkZXIuTW9kZWxJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIucHJvdmlkZXIuTW9kaWZpZXJJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2NlbmFyaW8ucHJvdmlkZXIuU2NlbmFyaW9JdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2VxdWVuY2VyLnByb3ZpZGVyLlNlcXVlbmNlckl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zb2x2ZXIucHJvdmlkZXIuU29sdmVySXRlbVByb3ZpZGVyQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMucHJvdmlkZXIuTGFiZWxzSXRlbVByb3ZpZGVyQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLm11bHRpcG9wdWxhdGlvbi5wcm92aWRlci5NdWx0aXBvcHVsYXRpb25JdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQucHJvdmlkZXIuU3RhbmRhcmRJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuU1dUOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5jdXN0b20uQ1RhYkZvbGRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZG5kLkRORDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZG5kLlRyYW5zZmVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuQ29udHJvbEFkYXB0ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5Db250cm9sRXZlbnQ7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmdyYXBoaWNzLlBvaW50OworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5sYXlvdXQuRmlsbExheW91dDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuTWVudTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5UYWJsZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5UYWJsZUNvbHVtbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5UcmVlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlRyZWVDb2x1bW47CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuSUFjdGlvbkJhcnM7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuSUVkaXRvcklucHV0OworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklFZGl0b3JQYXJ0OworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklFZGl0b3JTaXRlOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklQYXJ0TGlzdGVuZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaFBhcnQ7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuUGFydEluaXRFeGNlcHRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuYWN0aW9ucy5Xb3Jrc3BhY2VNb2RpZnlPcGVyYXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuZGlhbG9ncy5TYXZlQXNEaWFsb2c7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuaWRlLklHb3RvTWFya2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLnBhcnQuRmlsZUVkaXRvcklucHV0OworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLnBhcnQuTXVsdGlQYWdlRWRpdG9yUGFydDsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS52aWV3cy5jb250ZW50b3V0bGluZS5Db250ZW50T3V0bGluZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS52aWV3cy5jb250ZW50b3V0bGluZS5Db250ZW50T3V0bGluZVBhZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkudmlld3MuY29udGVudG91dGxpbmUuSUNvbnRlbnRPdXRsaW5lUGFnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS52aWV3cy5wcm9wZXJ0aWVzLklQcm9wZXJ0eVNoZWV0UGFnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS52aWV3cy5wcm9wZXJ0aWVzLlByb3BlcnR5U2hlZXQ7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkudmlld3MucHJvcGVydGllcy5Qcm9wZXJ0eVNoZWV0UGFnZTsKKworCisvKioKKyAqIFRoaXMgaXMgYW4gZXhhbXBsZSBvZiBhIE11bHRpcG9wdWxhdGlvbiBtb2RlbCBlZGl0b3IuCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBNdWx0aXBvcHVsYXRpb25FZGl0b3IKKwlleHRlbmRzIE11bHRpUGFnZUVkaXRvclBhcnQKKwlpbXBsZW1lbnRzIElFZGl0aW5nRG9tYWluUHJvdmlkZXIsIElTZWxlY3Rpb25Qcm92aWRlciwgSU1lbnVMaXN0ZW5lciwgSVZpZXdlclByb3ZpZGVyLCBJR290b01hcmtlciB7CisJLyoqCisJICogVGhpcyBrZWVwcyB0cmFjayBvZiB0aGUgZWRpdGluZyBkb21haW4gdGhhdCBpcyB1c2VkIHRvIHRyYWNrIGFsbCBjaGFuZ2VzIHRvIHRoZSBtb2RlbC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgQWRhcHRlckZhY3RvcnlFZGl0aW5nRG9tYWluIGVkaXRpbmdEb21haW47CisKKwkvKioKKwkgKiBUaGlzIGlzIHRoZSBvbmUgYWRhcHRlciBmYWN0b3J5IHVzZWQgZm9yIHByb3ZpZGluZyB2aWV3cyBvZiB0aGUgbW9kZWwuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIENvbXBvc2VkQWRhcHRlckZhY3RvcnkgYWRhcHRlckZhY3Rvcnk7CisKKwkvKioKKwkgKiBUaGlzIGlzIHRoZSBjb250ZW50IG91dGxpbmUgcGFnZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgSUNvbnRlbnRPdXRsaW5lUGFnZSBjb250ZW50T3V0bGluZVBhZ2U7CisKKwkvKioKKwkgKiBUaGlzIGlzIGEga2x1ZGdlLi4uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIElTdGF0dXNMaW5lTWFuYWdlciBjb250ZW50T3V0bGluZVN0YXR1c0xpbmVNYW5hZ2VyOworCisJLyoqCisJICogVGhpcyBpcyB0aGUgY29udGVudCBvdXRsaW5lIHBhZ2UncyB2aWV3ZXIuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIFRyZWVWaWV3ZXIgY29udGVudE91dGxpbmVWaWV3ZXI7CisKKwkvKioKKwkgKiBUaGlzIGlzIHRoZSBwcm9wZXJ0eSBzaGVldCBwYWdlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBQcm9wZXJ0eVNoZWV0UGFnZSBwcm9wZXJ0eVNoZWV0UGFnZTsKKworCS8qKgorCSAqIFRoaXMgaXMgdGhlIHZpZXdlciB0aGF0IHNoYWRvd3MgdGhlIHNlbGVjdGlvbiBpbiB0aGUgY29udGVudCBvdXRsaW5lLgorCSAqIFRoZSBwYXJlbnQgcmVsYXRpb24gbXVzdCBiZSBjb3JyZWN0bHkgZGVmaW5lZCBmb3IgdGhpcyB0byB3b3JrLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBUcmVlVmlld2VyIHNlbGVjdGlvblZpZXdlcjsKKworCS8qKgorCSAqIFRoaXMgaW52ZXJ0cyB0aGUgcm9sbCBvZiBwYXJlbnQgYW5kIGNoaWxkIGluIHRoZSBjb250ZW50IHByb3ZpZGVyIGFuZCBzaG93IHBhcmVudHMgYXMgYSB0cmVlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBUcmVlVmlld2VyIHBhcmVudFZpZXdlcjsKKworCS8qKgorCSAqIFRoaXMgc2hvd3MgaG93IGEgdHJlZSB2aWV3IHdvcmtzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBUcmVlVmlld2VyIHRyZWVWaWV3ZXI7CisKKwkvKioKKwkgKiBUaGlzIHNob3dzIGhvdyBhIGxpc3QgdmlldyB3b3Jrcy4KKwkgKiBBIGxpc3Qgdmlld2VyIGRvZXNuJ3Qgc3VwcG9ydCBpY29ucy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgTGlzdFZpZXdlciBsaXN0Vmlld2VyOworCisJLyoqCisJICogVGhpcyBzaG93cyBob3cgYSB0YWJsZSB2aWV3IHdvcmtzLgorCSAqIEEgdGFibGUgY2FuIGJlIHVzZWQgYXMgYSBsaXN0IHdpdGggaWNvbnMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIFRhYmxlVmlld2VyIHRhYmxlVmlld2VyOworCisJLyoqCisJICogVGhpcyBzaG93cyBob3cgYSB0cmVlIHZpZXcgd2l0aCBjb2x1bW5zIHdvcmtzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBUcmVlVmlld2VyIHRyZWVWaWV3ZXJXaXRoQ29sdW1uczsKKworCS8qKgorCSAqIFRoaXMga2VlcHMgdHJhY2sgb2YgdGhlIGFjdGl2ZSB2aWV3ZXIgcGFuZSwgaW4gdGhlIGJvb2suCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIFZpZXdlclBhbmUgY3VycmVudFZpZXdlclBhbmU7CisKKwkvKioKKwkgKiBUaGlzIGtlZXBzIHRyYWNrIG9mIHRoZSBhY3RpdmUgY29udGVudCB2aWV3ZXIsIHdoaWNoIG1heSBiZSBlaXRoZXIgb25lIG9mIHRoZSB2aWV3ZXJzIGluIHRoZSBwYWdlcyBvciB0aGUgY29udGVudCBvdXRsaW5lIHZpZXdlci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgVmlld2VyIGN1cnJlbnRWaWV3ZXI7CisKKwkvKioKKwkgKiBUaGlzIGxpc3RlbnMgdG8gd2hpY2ggZXZlciB2aWV3ZXIgaXMgYWN0aXZlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBJU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyIHNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcjsKKworCS8qKgorCSAqIFRoaXMga2VlcHMgdHJhY2sgb2YgYWxsIHRoZSB7QGxpbmsgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyfXMgdGhhdCBhcmUgbGlzdGVuaW5nIHRvIHRoaXMgZWRpdG9yLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBDb2xsZWN0aW9uPElTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXI+IHNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcnMgPSBuZXcgQXJyYXlMaXN0PElTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXI+KCk7CisKKwkvKioKKwkgKiBUaGlzIGtlZXBzIHRyYWNrIG9mIHRoZSBzZWxlY3Rpb24gb2YgdGhlIGVkaXRvciBhcyBhIHdob2xlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBJU2VsZWN0aW9uIGVkaXRvclNlbGVjdGlvbiA9IFN0cnVjdHVyZWRTZWxlY3Rpb24uRU1QVFk7CisKKwkvKioKKwkgKiBUaGUgTWFya2VySGVscGVyIGlzIHJlc3BvbnNpYmxlIGZvciBjcmVhdGluZyB3b3Jrc3BhY2UgcmVzb3VyY2UgbWFya2VycyBwcmVzZW50ZWQKKwkgKiBpbiBFY2xpcHNlJ3MgUHJvYmxlbXMgVmlldy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgTWFya2VySGVscGVyIG1hcmtlckhlbHBlciA9IG5ldyBFZGl0VUlNYXJrZXJIZWxwZXIoKTsKKworCS8qKgorCSAqIFRoaXMgbGlzdGVucyBmb3Igd2hlbiB0aGUgb3V0bGluZSBiZWNvbWVzIGFjdGl2ZQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBJUGFydExpc3RlbmVyIHBhcnRMaXN0ZW5lciA9CisJCW5ldyBJUGFydExpc3RlbmVyKCkgeworCQkJcHVibGljIHZvaWQgcGFydEFjdGl2YXRlZChJV29ya2JlbmNoUGFydCBwKSB7CisJCQkJaWYgKHAgaW5zdGFuY2VvZiBDb250ZW50T3V0bGluZSkgeworCQkJCQlpZiAoKChDb250ZW50T3V0bGluZSlwKS5nZXRDdXJyZW50UGFnZSgpID09IGNvbnRlbnRPdXRsaW5lUGFnZSkgeworCQkJCQkJZ2V0QWN0aW9uQmFyQ29udHJpYnV0b3IoKS5zZXRBY3RpdmVFZGl0b3IoTXVsdGlwb3B1bGF0aW9uRWRpdG9yLnRoaXMpOworCisJCQkJCQlzZXRDdXJyZW50Vmlld2VyKGNvbnRlbnRPdXRsaW5lVmlld2VyKTsKKwkJCQkJfQorCQkJCX0KKwkJCQllbHNlIGlmIChwIGluc3RhbmNlb2YgUHJvcGVydHlTaGVldCkgeworCQkJCQlpZiAoKChQcm9wZXJ0eVNoZWV0KXApLmdldEN1cnJlbnRQYWdlKCkgPT0gcHJvcGVydHlTaGVldFBhZ2UpIHsKKwkJCQkJCWdldEFjdGlvbkJhckNvbnRyaWJ1dG9yKCkuc2V0QWN0aXZlRWRpdG9yKE11bHRpcG9wdWxhdGlvbkVkaXRvci50aGlzKTsKKwkJCQkJCWhhbmRsZUFjdGl2YXRlKCk7CisJCQkJCX0KKwkJCQl9CisJCQkJZWxzZSBpZiAocCA9PSBNdWx0aXBvcHVsYXRpb25FZGl0b3IudGhpcykgeworCQkJCQloYW5kbGVBY3RpdmF0ZSgpOworCQkJCX0KKwkJCX0KKwkJCXB1YmxpYyB2b2lkIHBhcnRCcm91Z2h0VG9Ub3AoSVdvcmtiZW5jaFBhcnQgcCkgeworCQkJCS8vIElnbm9yZS4KKwkJCX0KKwkJCXB1YmxpYyB2b2lkIHBhcnRDbG9zZWQoSVdvcmtiZW5jaFBhcnQgcCkgeworCQkJCS8vIElnbm9yZS4KKwkJCX0KKwkJCXB1YmxpYyB2b2lkIHBhcnREZWFjdGl2YXRlZChJV29ya2JlbmNoUGFydCBwKSB7CisJCQkJLy8gSWdub3JlLgorCQkJfQorCQkJcHVibGljIHZvaWQgcGFydE9wZW5lZChJV29ya2JlbmNoUGFydCBwKSB7CisJCQkJLy8gSWdub3JlLgorCQkJfQorCQl9OworCisJLyoqCisJICogUmVzb3VyY2VzIHRoYXQgaGF2ZSBiZWVuIHJlbW92ZWQgc2luY2UgbGFzdCBhY3RpdmF0aW9uLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBDb2xsZWN0aW9uPFJlc291cmNlPiByZW1vdmVkUmVzb3VyY2VzID0gbmV3IEFycmF5TGlzdDxSZXNvdXJjZT4oKTsKKworCS8qKgorCSAqIFJlc291cmNlcyB0aGF0IGhhdmUgYmVlbiBjaGFuZ2VkIHNpbmNlIGxhc3QgYWN0aXZhdGlvbi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgQ29sbGVjdGlvbjxSZXNvdXJjZT4gY2hhbmdlZFJlc291cmNlcyA9IG5ldyBBcnJheUxpc3Q8UmVzb3VyY2U+KCk7CisKKwkvKioKKwkgKiBSZXNvdXJjZXMgdGhhdCBoYXZlIGJlZW4gc2F2ZWQuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIENvbGxlY3Rpb248UmVzb3VyY2U+IHNhdmVkUmVzb3VyY2VzID0gbmV3IEFycmF5TGlzdDxSZXNvdXJjZT4oKTsKKworCS8qKgorCSAqIE1hcCB0byBzdG9yZSB0aGUgZGlhZ25vc3RpYyBhc3NvY2lhdGVkIHdpdGggYSByZXNvdXJjZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgTWFwPFJlc291cmNlLCBEaWFnbm9zdGljPiByZXNvdXJjZVRvRGlhZ25vc3RpY01hcCA9IG5ldyBMaW5rZWRIYXNoTWFwPFJlc291cmNlLCBEaWFnbm9zdGljPigpOworCisJLyoqCisJICogQ29udHJvbHMgd2hldGhlciB0aGUgcHJvYmxlbSBpbmRpY2F0aW9uIHNob3VsZCBiZSB1cGRhdGVkLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBib29sZWFuIHVwZGF0ZVByb2JsZW1JbmRpY2F0aW9uID0gdHJ1ZTsKKworCS8qKgorCSAqIEFkYXB0ZXIgdXNlZCB0byB1cGRhdGUgdGhlIHByb2JsZW0gaW5kaWNhdGlvbiB3aGVuIHJlc291cmNlcyBhcmUgZGVtYW5kZWQgbG9hZGVkLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBFQ29udGVudEFkYXB0ZXIgcHJvYmxlbUluZGljYXRpb25BZGFwdGVyID0gCisJCW5ldyBFQ29udGVudEFkYXB0ZXIoKSB7CisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyB2b2lkIG5vdGlmeUNoYW5nZWQoTm90aWZpY2F0aW9uIG5vdGlmaWNhdGlvbikgeworCQkJCWlmIChub3RpZmljYXRpb24uZ2V0Tm90aWZpZXIoKSBpbnN0YW5jZW9mIFJlc291cmNlKSB7CisJCQkJCXN3aXRjaCAobm90aWZpY2F0aW9uLmdldEZlYXR1cmVJRChSZXNvdXJjZS5jbGFzcykpIHsKKwkJCQkJCWNhc2UgUmVzb3VyY2UuUkVTT1VSQ0VfX0lTX0xPQURFRDoKKwkJCQkJCWNhc2UgUmVzb3VyY2UuUkVTT1VSQ0VfX0VSUk9SUzoKKwkJCQkJCWNhc2UgUmVzb3VyY2UuUkVTT1VSQ0VfX1dBUk5JTkdTOiB7CisJCQkJCQkJUmVzb3VyY2UgcmVzb3VyY2UgPSAoUmVzb3VyY2Upbm90aWZpY2F0aW9uLmdldE5vdGlmaWVyKCk7CisJCQkJCQkJRGlhZ25vc3RpYyBkaWFnbm9zdGljID0gYW5hbHl6ZVJlc291cmNlUHJvYmxlbXMocmVzb3VyY2UsIG51bGwpOworCQkJCQkJCWlmIChkaWFnbm9zdGljLmdldFNldmVyaXR5KCkgIT0gRGlhZ25vc3RpYy5PSykgeworCQkJCQkJCQlyZXNvdXJjZVRvRGlhZ25vc3RpY01hcC5wdXQocmVzb3VyY2UsIGRpYWdub3N0aWMpOworCQkJCQkJCX0KKwkJCQkJCQllbHNlIHsKKwkJCQkJCQkJcmVzb3VyY2VUb0RpYWdub3N0aWNNYXAucmVtb3ZlKHJlc291cmNlKTsKKwkJCQkJCQl9CisKKwkJCQkJCQlpZiAodXBkYXRlUHJvYmxlbUluZGljYXRpb24pIHsKKwkJCQkJCQkJZ2V0U2l0ZSgpLmdldFNoZWxsKCkuZ2V0RGlzcGxheSgpLmFzeW5jRXhlYworCQkJCQkJCQkJKG5ldyBSdW5uYWJsZSgpIHsKKwkJCQkJCQkJCQkgcHVibGljIHZvaWQgcnVuKCkgeworCQkJCQkJCQkJCQkgdXBkYXRlUHJvYmxlbUluZGljYXRpb24oKTsKKwkJCQkJCQkJCQkgfQorCQkJCQkJCQkJIH0pOworCQkJCQkJCX0KKwkJCQkJCQlicmVhazsKKwkJCQkJCX0KKwkJCQkJfQorCQkJCX0KKwkJCQllbHNlIHsKKwkJCQkJc3VwZXIubm90aWZ5Q2hhbmdlZChub3RpZmljYXRpb24pOworCQkJCX0KKwkJCX0KKworCQkJQE92ZXJyaWRlCisJCQlwcm90ZWN0ZWQgdm9pZCBzZXRUYXJnZXQoUmVzb3VyY2UgdGFyZ2V0KSB7CisJCQkJYmFzaWNTZXRUYXJnZXQodGFyZ2V0KTsKKwkJCX0KKworCQkJQE92ZXJyaWRlCisJCQlwcm90ZWN0ZWQgdm9pZCB1bnNldFRhcmdldChSZXNvdXJjZSB0YXJnZXQpIHsKKwkJCQliYXNpY1Vuc2V0VGFyZ2V0KHRhcmdldCk7CisJCQl9CisJCX07CisKKwkvKioKKwkgKiBUaGlzIGxpc3RlbnMgZm9yIHdvcmtzcGFjZSBjaGFuZ2VzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBJUmVzb3VyY2VDaGFuZ2VMaXN0ZW5lciByZXNvdXJjZUNoYW5nZUxpc3RlbmVyID0KKwkJbmV3IElSZXNvdXJjZUNoYW5nZUxpc3RlbmVyKCkgeworCQkJcHVibGljIHZvaWQgcmVzb3VyY2VDaGFuZ2VkKElSZXNvdXJjZUNoYW5nZUV2ZW50IGV2ZW50KSB7CisJCQkJSVJlc291cmNlRGVsdGEgZGVsdGEgPSBldmVudC5nZXREZWx0YSgpOworCQkJCXRyeSB7CisJCQkJCWNsYXNzIFJlc291cmNlRGVsdGFWaXNpdG9yIGltcGxlbWVudHMgSVJlc291cmNlRGVsdGFWaXNpdG9yIHsKKwkJCQkJCXByb3RlY3RlZCBSZXNvdXJjZVNldCByZXNvdXJjZVNldCA9IGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKTsKKwkJCQkJCXByb3RlY3RlZCBDb2xsZWN0aW9uPFJlc291cmNlPiBjaGFuZ2VkUmVzb3VyY2VzID0gbmV3IEFycmF5TGlzdDxSZXNvdXJjZT4oKTsKKwkJCQkJCXByb3RlY3RlZCBDb2xsZWN0aW9uPFJlc291cmNlPiByZW1vdmVkUmVzb3VyY2VzID0gbmV3IEFycmF5TGlzdDxSZXNvdXJjZT4oKTsKKworCQkJCQkJcHVibGljIGJvb2xlYW4gdmlzaXQoSVJlc291cmNlRGVsdGEgZGVsdGEpIHsKKwkJCQkJCQlpZiAoZGVsdGEuZ2V0UmVzb3VyY2UoKS5nZXRUeXBlKCkgPT0gSVJlc291cmNlLkZJTEUpIHsKKwkJCQkJCQkJaWYgKGRlbHRhLmdldEtpbmQoKSA9PSBJUmVzb3VyY2VEZWx0YS5SRU1PVkVEIHx8CisJCQkJCQkJCSAgICBkZWx0YS5nZXRLaW5kKCkgPT0gSVJlc291cmNlRGVsdGEuQ0hBTkdFRCAmJiBkZWx0YS5nZXRGbGFncygpICE9IElSZXNvdXJjZURlbHRhLk1BUktFUlMpIHsKKwkJCQkJCQkJCVJlc291cmNlIHJlc291cmNlID0gcmVzb3VyY2VTZXQuZ2V0UmVzb3VyY2UoVVJJLmNyZWF0ZVBsYXRmb3JtUmVzb3VyY2VVUkkoZGVsdGEuZ2V0RnVsbFBhdGgoKS50b1N0cmluZygpLCB0cnVlKSwgZmFsc2UpOworCQkJCQkJCQkJaWYgKHJlc291cmNlICE9IG51bGwpIHsKKwkJCQkJCQkJCQlpZiAoZGVsdGEuZ2V0S2luZCgpID09IElSZXNvdXJjZURlbHRhLlJFTU9WRUQpIHsKKwkJCQkJCQkJCQkJcmVtb3ZlZFJlc291cmNlcy5hZGQocmVzb3VyY2UpOworCQkJCQkJCQkJCX0KKwkJCQkJCQkJCQllbHNlIGlmICghc2F2ZWRSZXNvdXJjZXMucmVtb3ZlKHJlc291cmNlKSkgeworCQkJCQkJCQkJCQljaGFuZ2VkUmVzb3VyY2VzLmFkZChyZXNvdXJjZSk7CisJCQkJCQkJCQkJfQorCQkJCQkJCQkJfQorCQkJCQkJCQl9CisJCQkJCQkJfQorCisJCQkJCQkJcmV0dXJuIHRydWU7CisJCQkJCQl9CisKKwkJCQkJCXB1YmxpYyBDb2xsZWN0aW9uPFJlc291cmNlPiBnZXRDaGFuZ2VkUmVzb3VyY2VzKCkgeworCQkJCQkJCXJldHVybiBjaGFuZ2VkUmVzb3VyY2VzOworCQkJCQkJfQorCisJCQkJCQlwdWJsaWMgQ29sbGVjdGlvbjxSZXNvdXJjZT4gZ2V0UmVtb3ZlZFJlc291cmNlcygpIHsKKwkJCQkJCQlyZXR1cm4gcmVtb3ZlZFJlc291cmNlczsKKwkJCQkJCX0KKwkJCQkJfQorCisJCQkJCWZpbmFsIFJlc291cmNlRGVsdGFWaXNpdG9yIHZpc2l0b3IgPSBuZXcgUmVzb3VyY2VEZWx0YVZpc2l0b3IoKTsKKwkJCQkJZGVsdGEuYWNjZXB0KHZpc2l0b3IpOworCisJCQkJCWlmICghdmlzaXRvci5nZXRSZW1vdmVkUmVzb3VyY2VzKCkuaXNFbXB0eSgpKSB7CisJCQkJCQlnZXRTaXRlKCkuZ2V0U2hlbGwoKS5nZXREaXNwbGF5KCkuYXN5bmNFeGVjCisJCQkJCQkJKG5ldyBSdW5uYWJsZSgpIHsKKwkJCQkJCQkJIHB1YmxpYyB2b2lkIHJ1bigpIHsKKwkJCQkJCQkJCSByZW1vdmVkUmVzb3VyY2VzLmFkZEFsbCh2aXNpdG9yLmdldFJlbW92ZWRSZXNvdXJjZXMoKSk7CisJCQkJCQkJCQkgaWYgKCFpc0RpcnR5KCkpIHsKKwkJCQkJCQkJCQkgZ2V0U2l0ZSgpLmdldFBhZ2UoKS5jbG9zZUVkaXRvcihNdWx0aXBvcHVsYXRpb25FZGl0b3IudGhpcywgZmFsc2UpOworCQkJCQkJCQkJIH0KKwkJCQkJCQkJIH0KKwkJCQkJCQkgfSk7CisJCQkJCX0KKworCQkJCQlpZiAoIXZpc2l0b3IuZ2V0Q2hhbmdlZFJlc291cmNlcygpLmlzRW1wdHkoKSkgeworCQkJCQkJZ2V0U2l0ZSgpLmdldFNoZWxsKCkuZ2V0RGlzcGxheSgpLmFzeW5jRXhlYworCQkJCQkJCShuZXcgUnVubmFibGUoKSB7CisJCQkJCQkJCSBwdWJsaWMgdm9pZCBydW4oKSB7CisJCQkJCQkJCQkgY2hhbmdlZFJlc291cmNlcy5hZGRBbGwodmlzaXRvci5nZXRDaGFuZ2VkUmVzb3VyY2VzKCkpOworCQkJCQkJCQkJIGlmIChnZXRTaXRlKCkuZ2V0UGFnZSgpLmdldEFjdGl2ZUVkaXRvcigpID09IE11bHRpcG9wdWxhdGlvbkVkaXRvci50aGlzKSB7CisJCQkJCQkJCQkJIGhhbmRsZUFjdGl2YXRlKCk7CisJCQkJCQkJCQkgfQorCQkJCQkJCQkgfQorCQkJCQkJCSB9KTsKKwkJCQkJfQorCQkJCX0KKwkJCQljYXRjaCAoQ29yZUV4Y2VwdGlvbiBleGNlcHRpb24pIHsKKwkJCQkJTXVsdGlwb3B1bGF0aW9uRWRpdG9yUGx1Z2luLklOU1RBTkNFLmxvZyhleGNlcHRpb24pOworCQkJCX0KKwkJCX0KKwkJfTsKKworCS8qKgorCSAqIEhhbmRsZXMgYWN0aXZhdGlvbiBvZiB0aGUgZWRpdG9yIG9yIGl0J3MgYXNzb2NpYXRlZCB2aWV3cy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBoYW5kbGVBY3RpdmF0ZSgpIHsKKwkJLy8gUmVjb21wdXRlIHRoZSByZWFkIG9ubHkgc3RhdGUuCisJCS8vCisJCWlmIChlZGl0aW5nRG9tYWluLmdldFJlc291cmNlVG9SZWFkT25seU1hcCgpICE9IG51bGwpIHsKKwkJICBlZGl0aW5nRG9tYWluLmdldFJlc291cmNlVG9SZWFkT25seU1hcCgpLmNsZWFyKCk7CisKKwkJICAvLyBSZWZyZXNoIGFueSBhY3Rpb25zIHRoYXQgbWF5IGJlY29tZSBlbmFibGVkIG9yIGRpc2FibGVkLgorCQkgIC8vCisJCSAgc2V0U2VsZWN0aW9uKGdldFNlbGVjdGlvbigpKTsKKwkJfQorCisJCWlmICghcmVtb3ZlZFJlc291cmNlcy5pc0VtcHR5KCkpIHsKKwkJCWlmIChoYW5kbGVEaXJ0eUNvbmZsaWN0KCkpIHsKKwkJCQlnZXRTaXRlKCkuZ2V0UGFnZSgpLmNsb3NlRWRpdG9yKE11bHRpcG9wdWxhdGlvbkVkaXRvci50aGlzLCBmYWxzZSk7CisJCQl9CisJCQllbHNlIHsKKwkJCQlyZW1vdmVkUmVzb3VyY2VzLmNsZWFyKCk7CisJCQkJY2hhbmdlZFJlc291cmNlcy5jbGVhcigpOworCQkJCXNhdmVkUmVzb3VyY2VzLmNsZWFyKCk7CisJCQl9CisJCX0KKwkJZWxzZSBpZiAoIWNoYW5nZWRSZXNvdXJjZXMuaXNFbXB0eSgpKSB7CisJCQljaGFuZ2VkUmVzb3VyY2VzLnJlbW92ZUFsbChzYXZlZFJlc291cmNlcyk7CisJCQloYW5kbGVDaGFuZ2VkUmVzb3VyY2VzKCk7CisJCQljaGFuZ2VkUmVzb3VyY2VzLmNsZWFyKCk7CisJCQlzYXZlZFJlc291cmNlcy5jbGVhcigpOworCQl9CisJfQorCisJLyoqCisJICogSGFuZGxlcyB3aGF0IHRvIGRvIHdpdGggY2hhbmdlZCByZXNvdXJjZXMgb24gYWN0aXZhdGlvbi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBoYW5kbGVDaGFuZ2VkUmVzb3VyY2VzKCkgeworCQlpZiAoIWNoYW5nZWRSZXNvdXJjZXMuaXNFbXB0eSgpICYmICghaXNEaXJ0eSgpIHx8IGhhbmRsZURpcnR5Q29uZmxpY3QoKSkpIHsKKwkJCWlmIChpc0RpcnR5KCkpIHsKKwkJCQljaGFuZ2VkUmVzb3VyY2VzLmFkZEFsbChlZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkuZ2V0UmVzb3VyY2VzKCkpOworCQkJfQorCQkJZWRpdGluZ0RvbWFpbi5nZXRDb21tYW5kU3RhY2soKS5mbHVzaCgpOworCisJCQl1cGRhdGVQcm9ibGVtSW5kaWNhdGlvbiA9IGZhbHNlOworCQkJZm9yIChSZXNvdXJjZSByZXNvdXJjZSA6IGNoYW5nZWRSZXNvdXJjZXMpIHsKKwkJCQlpZiAocmVzb3VyY2UuaXNMb2FkZWQoKSkgeworCQkJCQlyZXNvdXJjZS51bmxvYWQoKTsKKwkJCQkJdHJ5IHsKKwkJCQkJCXJlc291cmNlLmxvYWQoQ29sbGVjdGlvbnMuRU1QVFlfTUFQKTsKKwkJCQkJfQorCQkJCQljYXRjaCAoSU9FeGNlcHRpb24gZXhjZXB0aW9uKSB7CisJCQkJCQlpZiAoIXJlc291cmNlVG9EaWFnbm9zdGljTWFwLmNvbnRhaW5zS2V5KHJlc291cmNlKSkgeworCQkJCQkJCXJlc291cmNlVG9EaWFnbm9zdGljTWFwLnB1dChyZXNvdXJjZSwgYW5hbHl6ZVJlc291cmNlUHJvYmxlbXMocmVzb3VyY2UsIGV4Y2VwdGlvbikpOworCQkJCQkJfQorCQkJCQl9CisJCQkJfQorCQkJfQorCisJCQlpZiAoQWRhcHRlckZhY3RvcnlFZGl0aW5nRG9tYWluLmlzU3RhbGUoZWRpdG9yU2VsZWN0aW9uKSkgeworCQkJCXNldFNlbGVjdGlvbihTdHJ1Y3R1cmVkU2VsZWN0aW9uLkVNUFRZKTsKKwkJCX0KKworCQkJdXBkYXRlUHJvYmxlbUluZGljYXRpb24gPSB0cnVlOworCQkJdXBkYXRlUHJvYmxlbUluZGljYXRpb24oKTsKKwkJfQorCX0KKyAgCisJLyoqCisJICogVXBkYXRlcyB0aGUgcHJvYmxlbXMgaW5kaWNhdGlvbiB3aXRoIHRoZSBpbmZvcm1hdGlvbiBkZXNjcmliZWQgaW4gdGhlIHNwZWNpZmllZCBkaWFnbm9zdGljLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIHVwZGF0ZVByb2JsZW1JbmRpY2F0aW9uKCkgeworCQlpZiAodXBkYXRlUHJvYmxlbUluZGljYXRpb24pIHsKKwkJCUJhc2ljRGlhZ25vc3RpYyBkaWFnbm9zdGljID0KKwkJCQluZXcgQmFzaWNEaWFnbm9zdGljCisJCQkJCShEaWFnbm9zdGljLk9LLAorCQkJCQkgIm9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5tdWx0aXBvcHVsYXRpb24uZWRpdG9yIiwKKwkJCQkJIDAsCisJCQkJCSBudWxsLAorCQkJCQkgbmV3IE9iamVjdCBbXSB7IGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKSB9KTsKKwkJCWZvciAoRGlhZ25vc3RpYyBjaGlsZERpYWdub3N0aWMgOiByZXNvdXJjZVRvRGlhZ25vc3RpY01hcC52YWx1ZXMoKSkgeworCQkJCWlmIChjaGlsZERpYWdub3N0aWMuZ2V0U2V2ZXJpdHkoKSAhPSBEaWFnbm9zdGljLk9LKSB7CisJCQkJCWRpYWdub3N0aWMuYWRkKGNoaWxkRGlhZ25vc3RpYyk7CisJCQkJfQorCQkJfQorCisJCQlpbnQgbGFzdEVkaXRvclBhZ2UgPSBnZXRQYWdlQ291bnQoKSAtIDE7CisJCQlpZiAobGFzdEVkaXRvclBhZ2UgPj0gMCAmJiBnZXRFZGl0b3IobGFzdEVkaXRvclBhZ2UpIGluc3RhbmNlb2YgUHJvYmxlbUVkaXRvclBhcnQpIHsKKwkJCQkoKFByb2JsZW1FZGl0b3JQYXJ0KWdldEVkaXRvcihsYXN0RWRpdG9yUGFnZSkpLnNldERpYWdub3N0aWMoZGlhZ25vc3RpYyk7CisJCQkJaWYgKGRpYWdub3N0aWMuZ2V0U2V2ZXJpdHkoKSAhPSBEaWFnbm9zdGljLk9LKSB7CisJCQkJCXNldEFjdGl2ZVBhZ2UobGFzdEVkaXRvclBhZ2UpOworCQkJCX0KKwkJCX0KKwkJCWVsc2UgaWYgKGRpYWdub3N0aWMuZ2V0U2V2ZXJpdHkoKSAhPSBEaWFnbm9zdGljLk9LKSB7CisJCQkJUHJvYmxlbUVkaXRvclBhcnQgcHJvYmxlbUVkaXRvclBhcnQgPSBuZXcgUHJvYmxlbUVkaXRvclBhcnQoKTsKKwkJCQlwcm9ibGVtRWRpdG9yUGFydC5zZXREaWFnbm9zdGljKGRpYWdub3N0aWMpOworCQkJCXByb2JsZW1FZGl0b3JQYXJ0LnNldE1hcmtlckhlbHBlcihtYXJrZXJIZWxwZXIpOworCQkJCXRyeSB7CisJCQkJCWFkZFBhZ2UoKytsYXN0RWRpdG9yUGFnZSwgcHJvYmxlbUVkaXRvclBhcnQsIGdldEVkaXRvcklucHV0KCkpOworCQkJCQlzZXRQYWdlVGV4dChsYXN0RWRpdG9yUGFnZSwgcHJvYmxlbUVkaXRvclBhcnQuZ2V0UGFydE5hbWUoKSk7CisJCQkJCXNldEFjdGl2ZVBhZ2UobGFzdEVkaXRvclBhZ2UpOworCQkJCQlzaG93VGFicygpOworCQkJCX0KKwkJCQljYXRjaCAoUGFydEluaXRFeGNlcHRpb24gZXhjZXB0aW9uKSB7CisJCQkJCU11bHRpcG9wdWxhdGlvbkVkaXRvclBsdWdpbi5JTlNUQU5DRS5sb2coZXhjZXB0aW9uKTsKKwkJCQl9CisJCQl9CisKKwkJCWlmIChtYXJrZXJIZWxwZXIuaGFzTWFya2VycyhlZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkpKSB7CisJCQkJbWFya2VySGVscGVyLmRlbGV0ZU1hcmtlcnMoZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpKTsKKwkJCQlpZiAoZGlhZ25vc3RpYy5nZXRTZXZlcml0eSgpICE9IERpYWdub3N0aWMuT0spIHsKKwkJCQkJdHJ5IHsKKwkJCQkJCW1hcmtlckhlbHBlci5jcmVhdGVNYXJrZXJzKGRpYWdub3N0aWMpOworCQkJCQl9CisJCQkJCWNhdGNoIChDb3JlRXhjZXB0aW9uIGV4Y2VwdGlvbikgeworCQkJCQkJTXVsdGlwb3B1bGF0aW9uRWRpdG9yUGx1Z2luLklOU1RBTkNFLmxvZyhleGNlcHRpb24pOworCQkJCQl9CisJCQkJfQorCQkJfQorCQl9CisJfQorCisJLyoqCisJICogU2hvd3MgYSBkaWFsb2cgdGhhdCBhc2tzIGlmIGNvbmZsaWN0aW5nIGNoYW5nZXMgc2hvdWxkIGJlIGRpc2NhcmRlZC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgYm9vbGVhbiBoYW5kbGVEaXJ0eUNvbmZsaWN0KCkgeworCQlyZXR1cm4KKwkJCU1lc3NhZ2VEaWFsb2cub3BlblF1ZXN0aW9uCisJCQkJKGdldFNpdGUoKS5nZXRTaGVsbCgpLAorCQkJCSBnZXRTdHJpbmcoIl9VSV9GaWxlQ29uZmxpY3RfbGFiZWwiKSwKKwkJCQkgZ2V0U3RyaW5nKCJfV0FSTl9GaWxlQ29uZmxpY3QiKSk7CisJfQorCisJLyoqCisJICogVGhpcyBjcmVhdGVzIGEgbW9kZWwgZWRpdG9yLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBNdWx0aXBvcHVsYXRpb25FZGl0b3IoKSB7CisJCXN1cGVyKCk7CisJCWluaXRpYWxpemVFZGl0aW5nRG9tYWluKCk7CisJfQorCisJLyoqCisJICogVGhpcyBzZXRzIHVwIHRoZSBlZGl0aW5nIGRvbWFpbiBmb3IgdGhlIG1vZGVsIGVkaXRvci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBpbml0aWFsaXplRWRpdGluZ0RvbWFpbigpIHsKKwkJLy8gQ3JlYXRlIGFuIGFkYXB0ZXIgZmFjdG9yeSB0aGF0IHlpZWxkcyBpdGVtIHByb3ZpZGVycy4KKwkJLy8KKwkJYWRhcHRlckZhY3RvcnkgPSBuZXcgQ29tcG9zZWRBZGFwdGVyRmFjdG9yeShDb21wb3NlZEFkYXB0ZXJGYWN0b3J5LkRlc2NyaXB0b3IuUmVnaXN0cnkuSU5TVEFOQ0UpOworCisJCWFkYXB0ZXJGYWN0b3J5LmFkZEFkYXB0ZXJGYWN0b3J5KG5ldyBSZXNvdXJjZUl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5KCkpOworCQlhZGFwdGVyRmFjdG9yeS5hZGRBZGFwdGVyRmFjdG9yeShuZXcgTXVsdGlwb3B1bGF0aW9uSXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkoKSk7CisJCWFkYXB0ZXJGYWN0b3J5LmFkZEFkYXB0ZXJGYWN0b3J5KG5ldyBTdGFuZGFyZEl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5KCkpOworCQlhZGFwdGVyRmFjdG9yeS5hZGRBZGFwdGVyRmFjdG9yeShuZXcgQ29tbW9uSXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkoKSk7CisJCWFkYXB0ZXJGYWN0b3J5LmFkZEFkYXB0ZXJGYWN0b3J5KG5ldyBNb2RlbEl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5KCkpOworCQlhZGFwdGVyRmFjdG9yeS5hZGRBZGFwdGVyRmFjdG9yeShuZXcgRWNvcmVJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSgpKTsKKwkJYWRhcHRlckZhY3RvcnkuYWRkQWRhcHRlckZhY3RvcnkobmV3IEdyYXBoSXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkoKSk7CisJCWFkYXB0ZXJGYWN0b3J5LmFkZEFkYXB0ZXJGYWN0b3J5KG5ldyBNb2RpZmllckl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5KCkpOworCQlhZGFwdGVyRmFjdG9yeS5hZGRBZGFwdGVyRmFjdG9yeShuZXcgU2NlbmFyaW9JdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSgpKTsKKwkJYWRhcHRlckZhY3RvcnkuYWRkQWRhcHRlckZhY3RvcnkobmV3IFNlcXVlbmNlckl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5KCkpOworCQlhZGFwdGVyRmFjdG9yeS5hZGRBZGFwdGVyRmFjdG9yeShuZXcgU29sdmVySXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkoKSk7CisJCWFkYXB0ZXJGYWN0b3J5LmFkZEFkYXB0ZXJGYWN0b3J5KG5ldyBMYWJlbHNJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSgpKTsKKwkJYWRhcHRlckZhY3RvcnkuYWRkQWRhcHRlckZhY3RvcnkobmV3IG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5wcm92aWRlci5TdGFuZGFyZEl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5KCkpOworCQlhZGFwdGVyRmFjdG9yeS5hZGRBZGFwdGVyRmFjdG9yeShuZXcgTG9nZ2VySXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkoKSk7CisJCWFkYXB0ZXJGYWN0b3J5LmFkZEFkYXB0ZXJGYWN0b3J5KG5ldyBSZWZsZWN0aXZlSXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkoKSk7CisKKwkJLy8gQ3JlYXRlIHRoZSBjb21tYW5kIHN0YWNrIHRoYXQgd2lsbCBub3RpZnkgdGhpcyBlZGl0b3IgYXMgY29tbWFuZHMgYXJlIGV4ZWN1dGVkLgorCQkvLworCQlCYXNpY0NvbW1hbmRTdGFjayBjb21tYW5kU3RhY2sgPSBuZXcgQmFzaWNDb21tYW5kU3RhY2soKTsKKworCQkvLyBBZGQgYSBsaXN0ZW5lciB0byBzZXQgdGhlIG1vc3QgcmVjZW50IGNvbW1hbmQncyBhZmZlY3RlZCBvYmplY3RzIHRvIGJlIHRoZSBzZWxlY3Rpb24gb2YgdGhlIHZpZXdlciB3aXRoIGZvY3VzLgorCQkvLworCQljb21tYW5kU3RhY2suYWRkQ29tbWFuZFN0YWNrTGlzdGVuZXIKKwkJCShuZXcgQ29tbWFuZFN0YWNrTGlzdGVuZXIoKSB7CisJCQkJIHB1YmxpYyB2b2lkIGNvbW1hbmRTdGFja0NoYW5nZWQoZmluYWwgRXZlbnRPYmplY3QgZXZlbnQpIHsKKwkJCQkJIGdldENvbnRhaW5lcigpLmdldERpc3BsYXkoKS5hc3luY0V4ZWMKKwkJCQkJCSAobmV3IFJ1bm5hYmxlKCkgeworCQkJCQkJCSAgcHVibGljIHZvaWQgcnVuKCkgeworCQkJCQkJCQkgIGZpcmVQcm9wZXJ0eUNoYW5nZShJRWRpdG9yUGFydC5QUk9QX0RJUlRZKTsKKworCQkJCQkJCQkgIC8vIFRyeSB0byBzZWxlY3QgdGhlIGFmZmVjdGVkIG9iamVjdHMuCisJCQkJCQkJCSAgLy8KKwkJCQkJCQkJICBDb21tYW5kIG1vc3RSZWNlbnRDb21tYW5kID0gKChDb21tYW5kU3RhY2spZXZlbnQuZ2V0U291cmNlKCkpLmdldE1vc3RSZWNlbnRDb21tYW5kKCk7CisJCQkJCQkJCSAgaWYgKG1vc3RSZWNlbnRDb21tYW5kICE9IG51bGwpIHsKKwkJCQkJCQkJCSAgc2V0U2VsZWN0aW9uVG9WaWV3ZXIobW9zdFJlY2VudENvbW1hbmQuZ2V0QWZmZWN0ZWRPYmplY3RzKCkpOworCQkJCQkJCQkgIH0KKwkJCQkJCQkJICBpZiAocHJvcGVydHlTaGVldFBhZ2UgIT0gbnVsbCAmJiAhcHJvcGVydHlTaGVldFBhZ2UuZ2V0Q29udHJvbCgpLmlzRGlzcG9zZWQoKSkgeworCQkJCQkJCQkJICBwcm9wZXJ0eVNoZWV0UGFnZS5yZWZyZXNoKCk7CisJCQkJCQkJCSAgfQorCQkJCQkJCSAgfQorCQkJCQkJICB9KTsKKwkJCQkgfQorCQkJIH0pOworCisJCS8vIENyZWF0ZSB0aGUgZWRpdGluZyBkb21haW4gd2l0aCBhIHNwZWNpYWwgY29tbWFuZCBzdGFjay4KKwkJLy8KKwkJZWRpdGluZ0RvbWFpbiA9IG5ldyBBZGFwdGVyRmFjdG9yeUVkaXRpbmdEb21haW4oYWRhcHRlckZhY3RvcnksIGNvbW1hbmRTdGFjaywgbmV3IEhhc2hNYXA8UmVzb3VyY2UsIEJvb2xlYW4+KCkpOworCX0KKworCS8qKgorCSAqIFRoaXMgaXMgaGVyZSBmb3IgdGhlIGxpc3RlbmVyIHRvIGJlIGFibGUgdG8gY2FsbCBpdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwkJCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIGZpcmVQcm9wZXJ0eUNoYW5nZShpbnQgYWN0aW9uKSB7CisJCXN1cGVyLmZpcmVQcm9wZXJ0eUNoYW5nZShhY3Rpb24pOworCX0KKworCS8qKgorCSAqIFRoaXMgc2V0cyB0aGUgc2VsZWN0aW9uIGludG8gd2hpY2hldmVyIHZpZXdlciBpcyBhY3RpdmUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgc2V0U2VsZWN0aW9uVG9WaWV3ZXIoQ29sbGVjdGlvbjw/PiBjb2xsZWN0aW9uKSB7CisJCWZpbmFsIENvbGxlY3Rpb248Pz4gdGhlU2VsZWN0aW9uID0gY29sbGVjdGlvbjsKKwkJLy8gTWFrZSBzdXJlIGl0J3Mgb2theS4KKwkJLy8KKwkJaWYgKHRoZVNlbGVjdGlvbiAhPSBudWxsICYmICF0aGVTZWxlY3Rpb24uaXNFbXB0eSgpKSB7CisJCQlSdW5uYWJsZSBydW5uYWJsZSA9CisJCQkJbmV3IFJ1bm5hYmxlKCkgeworCQkJCQlwdWJsaWMgdm9pZCBydW4oKSB7CisJCQkJCQkvLyBUcnkgdG8gc2VsZWN0IHRoZSBpdGVtcyBpbiB0aGUgY3VycmVudCBjb250ZW50IHZpZXdlciBvZiB0aGUgZWRpdG9yLgorCQkJCQkJLy8KKwkJCQkJCWlmIChjdXJyZW50Vmlld2VyICE9IG51bGwpIHsKKwkJCQkJCQljdXJyZW50Vmlld2VyLnNldFNlbGVjdGlvbihuZXcgU3RydWN0dXJlZFNlbGVjdGlvbih0aGVTZWxlY3Rpb24udG9BcnJheSgpKSwgdHJ1ZSk7CisJCQkJCQl9CisJCQkJCX0KKwkJCQl9OworCQkJZ2V0U2l0ZSgpLmdldFNoZWxsKCkuZ2V0RGlzcGxheSgpLmFzeW5jRXhlYyhydW5uYWJsZSk7CisJCX0KKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgdGhlIGVkaXRpbmcgZG9tYWluIGFzIHJlcXVpcmVkIGJ5IHRoZSB7QGxpbmsgSUVkaXRpbmdEb21haW5Qcm92aWRlcn0gaW50ZXJmYWNlLgorCSAqIFRoaXMgaXMgaW1wb3J0YW50IGZvciBpbXBsZW1lbnRpbmcgdGhlIHN0YXRpYyBtZXRob2RzIG9mIHtAbGluayBBZGFwdGVyRmFjdG9yeUVkaXRpbmdEb21haW59CisJICogYW5kIGZvciBzdXBwb3J0aW5nIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5hY3Rpb24uQ29tbWFuZEFjdGlvbn0uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVkaXRpbmdEb21haW4gZ2V0RWRpdGluZ0RvbWFpbigpIHsKKwkJcmV0dXJuIGVkaXRpbmdEb21haW47CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIGNsYXNzIFJldmVyc2VBZGFwdGVyRmFjdG9yeUNvbnRlbnRQcm92aWRlciBleHRlbmRzIEFkYXB0ZXJGYWN0b3J5Q29udGVudFByb3ZpZGVyIHsKKwkJLyoqCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlwdWJsaWMgUmV2ZXJzZUFkYXB0ZXJGYWN0b3J5Q29udGVudFByb3ZpZGVyKEFkYXB0ZXJGYWN0b3J5IGFkYXB0ZXJGYWN0b3J5KSB7CisJCQlzdXBlcihhZGFwdGVyRmFjdG9yeSk7CisJCX0KKworCQkvKioKKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUBPdmVycmlkZQorCQlwdWJsaWMgT2JqZWN0IFtdIGdldEVsZW1lbnRzKE9iamVjdCBvYmplY3QpIHsKKwkJCU9iamVjdCBwYXJlbnQgPSBzdXBlci5nZXRQYXJlbnQob2JqZWN0KTsKKwkJCXJldHVybiAocGFyZW50ID09IG51bGwgPyBDb2xsZWN0aW9ucy5FTVBUWV9TRVQgOiBDb2xsZWN0aW9ucy5zaW5nbGV0b24ocGFyZW50KSkudG9BcnJheSgpOworCQl9CisKKwkJLyoqCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlAT3ZlcnJpZGUKKwkJcHVibGljIE9iamVjdCBbXSBnZXRDaGlsZHJlbihPYmplY3Qgb2JqZWN0KSB7CisJCQlPYmplY3QgcGFyZW50ID0gc3VwZXIuZ2V0UGFyZW50KG9iamVjdCk7CisJCQlyZXR1cm4gKHBhcmVudCA9PSBudWxsID8gQ29sbGVjdGlvbnMuRU1QVFlfU0VUIDogQ29sbGVjdGlvbnMuc2luZ2xldG9uKHBhcmVudCkpLnRvQXJyYXkoKTsKKwkJfQorCisJCS8qKgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJQE92ZXJyaWRlCisJCXB1YmxpYyBib29sZWFuIGhhc0NoaWxkcmVuKE9iamVjdCBvYmplY3QpIHsKKwkJCU9iamVjdCBwYXJlbnQgPSBzdXBlci5nZXRQYXJlbnQob2JqZWN0KTsKKwkJCXJldHVybiBwYXJlbnQgIT0gbnVsbDsKKwkJfQorCisJCS8qKgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJQE92ZXJyaWRlCisJCXB1YmxpYyBPYmplY3QgZ2V0UGFyZW50KE9iamVjdCBvYmplY3QpIHsKKwkJCXJldHVybiBudWxsOworCQl9CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgc2V0Q3VycmVudFZpZXdlclBhbmUoVmlld2VyUGFuZSB2aWV3ZXJQYW5lKSB7CisJCWlmIChjdXJyZW50Vmlld2VyUGFuZSAhPSB2aWV3ZXJQYW5lKSB7CisJCQlpZiAoY3VycmVudFZpZXdlclBhbmUgIT0gbnVsbCkgeworCQkJCWN1cnJlbnRWaWV3ZXJQYW5lLnNob3dGb2N1cyhmYWxzZSk7CisJCQl9CisJCQljdXJyZW50Vmlld2VyUGFuZSA9IHZpZXdlclBhbmU7CisJCX0KKwkJc2V0Q3VycmVudFZpZXdlcihjdXJyZW50Vmlld2VyUGFuZS5nZXRWaWV3ZXIoKSk7CisJfQorCisJLyoqCisJICogVGhpcyBtYWtlcyBzdXJlIHRoYXQgb25lIGNvbnRlbnQgdmlld2VyLCBlaXRoZXIgZm9yIHRoZSBjdXJyZW50IHBhZ2Ugb3IgdGhlIG91dGxpbmUgdmlldywgaWYgaXQgaGFzIGZvY3VzLAorCSAqIGlzIHRoZSBjdXJyZW50IG9uZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRDdXJyZW50Vmlld2VyKFZpZXdlciB2aWV3ZXIpIHsKKwkJLy8gSWYgaXQgaXMgY2hhbmdpbmcuLi4KKwkJLy8KKwkJaWYgKGN1cnJlbnRWaWV3ZXIgIT0gdmlld2VyKSB7CisJCQlpZiAoc2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyID09IG51bGwpIHsKKwkJCQkvLyBDcmVhdGUgdGhlIGxpc3RlbmVyIG9uIGRlbWFuZC4KKwkJCQkvLworCQkJCXNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lciA9CisJCQkJCW5ldyBJU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyKCkgeworCQkJCQkJLy8gVGhpcyBqdXN0IG5vdGlmaWVzIHRob3NlIHRoaW5ncyB0aGF0IGFyZSBhZmZlY3RlZCBieSB0aGUgc2VjdGlvbi4KKwkJCQkJCS8vCisJCQkJCQlwdWJsaWMgdm9pZCBzZWxlY3Rpb25DaGFuZ2VkKFNlbGVjdGlvbkNoYW5nZWRFdmVudCBzZWxlY3Rpb25DaGFuZ2VkRXZlbnQpIHsKKwkJCQkJCQlzZXRTZWxlY3Rpb24oc2VsZWN0aW9uQ2hhbmdlZEV2ZW50LmdldFNlbGVjdGlvbigpKTsKKwkJCQkJCX0KKwkJCQkJfTsKKwkJCX0KKworCQkJLy8gU3RvcCBsaXN0ZW5pbmcgdG8gdGhlIG9sZCBvbmUuCisJCQkvLworCQkJaWYgKGN1cnJlbnRWaWV3ZXIgIT0gbnVsbCkgeworCQkJCWN1cnJlbnRWaWV3ZXIucmVtb3ZlU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyKHNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcik7CisJCQl9CisKKwkJCS8vIFN0YXJ0IGxpc3RlbmluZyB0byB0aGUgbmV3IG9uZS4KKwkJCS8vCisJCQlpZiAodmlld2VyICE9IG51bGwpIHsKKwkJCQl2aWV3ZXIuYWRkU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyKHNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcik7CisJCQl9CisKKwkJCS8vIFJlbWVtYmVyIGl0LgorCQkJLy8KKwkJCWN1cnJlbnRWaWV3ZXIgPSB2aWV3ZXI7CisKKwkJCS8vIFNldCB0aGUgZWRpdG9ycyBzZWxlY3Rpb24gYmFzZWQgb24gdGhlIGN1cnJlbnQgdmlld2VyJ3Mgc2VsZWN0aW9uLgorCQkJLy8KKwkJCXNldFNlbGVjdGlvbihjdXJyZW50Vmlld2VyID09IG51bGwgPyBTdHJ1Y3R1cmVkU2VsZWN0aW9uLkVNUFRZIDogY3VycmVudFZpZXdlci5nZXRTZWxlY3Rpb24oKSk7CisJCX0KKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgdGhlIHZpZXdlciBhcyByZXF1aXJlZCBieSB0aGUge0BsaW5rIElWaWV3ZXJQcm92aWRlcn0gaW50ZXJmYWNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBWaWV3ZXIgZ2V0Vmlld2VyKCkgeworCQlyZXR1cm4gY3VycmVudFZpZXdlcjsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGNyZWF0ZXMgYSBjb250ZXh0IG1lbnUgZm9yIHRoZSB2aWV3ZXIgYW5kIGFkZHMgYSBsaXN0ZW5lciBhcyB3ZWxsIHJlZ2lzdGVyaW5nIHRoZSBtZW51IGZvciBleHRlbnNpb24uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgY3JlYXRlQ29udGV4dE1lbnVGb3IoU3RydWN0dXJlZFZpZXdlciB2aWV3ZXIpIHsKKwkJTWVudU1hbmFnZXIgY29udGV4dE1lbnUgPSBuZXcgTWVudU1hbmFnZXIoIiNQb3BVcCIpOworCQljb250ZXh0TWVudS5hZGQobmV3IFNlcGFyYXRvcigiYWRkaXRpb25zIikpOworCQljb250ZXh0TWVudS5zZXRSZW1vdmVBbGxXaGVuU2hvd24odHJ1ZSk7CisJCWNvbnRleHRNZW51LmFkZE1lbnVMaXN0ZW5lcih0aGlzKTsKKwkJTWVudSBtZW51PSBjb250ZXh0TWVudS5jcmVhdGVDb250ZXh0TWVudSh2aWV3ZXIuZ2V0Q29udHJvbCgpKTsKKwkJdmlld2VyLmdldENvbnRyb2woKS5zZXRNZW51KG1lbnUpOworCQlnZXRTaXRlKCkucmVnaXN0ZXJDb250ZXh0TWVudShjb250ZXh0TWVudSwgbmV3IFVud3JhcHBpbmdTZWxlY3Rpb25Qcm92aWRlcih2aWV3ZXIpKTsKKworCQlpbnQgZG5kT3BlcmF0aW9ucyA9IERORC5EUk9QX0NPUFkgfCBETkQuRFJPUF9NT1ZFIHwgRE5ELkRST1BfTElOSzsKKwkJVHJhbnNmZXJbXSB0cmFuc2ZlcnMgPSBuZXcgVHJhbnNmZXJbXSB7IExvY2FsVHJhbnNmZXIuZ2V0SW5zdGFuY2UoKSB9OworCQl2aWV3ZXIuYWRkRHJhZ1N1cHBvcnQoZG5kT3BlcmF0aW9ucywgdHJhbnNmZXJzLCBuZXcgVmlld2VyRHJhZ0FkYXB0ZXIodmlld2VyKSk7CisJCXZpZXdlci5hZGREcm9wU3VwcG9ydChkbmRPcGVyYXRpb25zLCB0cmFuc2ZlcnMsIG5ldyBFZGl0aW5nRG9tYWluVmlld2VyRHJvcEFkYXB0ZXIoZWRpdGluZ0RvbWFpbiwgdmlld2VyKSk7CisJfQorCisJLyoqCisJICogVGhpcyBpcyB0aGUgbWV0aG9kIGNhbGxlZCB0byBsb2FkIGEgcmVzb3VyY2UgaW50byB0aGUgZWRpdGluZyBkb21haW4ncyByZXNvdXJjZSBzZXQgYmFzZWQgb24gdGhlIGVkaXRvcidzIGlucHV0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIGNyZWF0ZU1vZGVsKCkgeworCQlVUkkgcmVzb3VyY2VVUkkgPSBFZGl0VUlVdGlsLmdldFVSSShnZXRFZGl0b3JJbnB1dCgpKTsKKwkJRXhjZXB0aW9uIGV4Y2VwdGlvbiA9IG51bGw7CisJCVJlc291cmNlIHJlc291cmNlID0gbnVsbDsKKwkJdHJ5IHsKKwkJCS8vIExvYWQgdGhlIHJlc291cmNlIHRocm91Z2ggdGhlIGVkaXRpbmcgZG9tYWluLgorCQkJLy8KKwkJCXJlc291cmNlID0gZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpLmdldFJlc291cmNlKHJlc291cmNlVVJJLCB0cnVlKTsKKwkJfQorCQljYXRjaCAoRXhjZXB0aW9uIGUpIHsKKwkJCWV4Y2VwdGlvbiA9IGU7CisJCQlyZXNvdXJjZSA9IGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKS5nZXRSZXNvdXJjZShyZXNvdXJjZVVSSSwgZmFsc2UpOworCQl9CisKKwkJRGlhZ25vc3RpYyBkaWFnbm9zdGljID0gYW5hbHl6ZVJlc291cmNlUHJvYmxlbXMocmVzb3VyY2UsIGV4Y2VwdGlvbik7CisJCWlmIChkaWFnbm9zdGljLmdldFNldmVyaXR5KCkgIT0gRGlhZ25vc3RpYy5PSykgeworCQkJcmVzb3VyY2VUb0RpYWdub3N0aWNNYXAucHV0KHJlc291cmNlLCAgYW5hbHl6ZVJlc291cmNlUHJvYmxlbXMocmVzb3VyY2UsIGV4Y2VwdGlvbikpOworCQl9CisJCWVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKS5lQWRhcHRlcnMoKS5hZGQocHJvYmxlbUluZGljYXRpb25BZGFwdGVyKTsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIGEgZGlhZ25vc3RpYyBkZXNjcmliaW5nIHRoZSBlcnJvcnMgYW5kIHdhcm5pbmdzIGxpc3RlZCBpbiB0aGUgcmVzb3VyY2UKKwkgKiBhbmQgdGhlIHNwZWNpZmllZCBleGNlcHRpb24gKGlmIGFueSkuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIERpYWdub3N0aWMgYW5hbHl6ZVJlc291cmNlUHJvYmxlbXMoUmVzb3VyY2UgcmVzb3VyY2UsIEV4Y2VwdGlvbiBleGNlcHRpb24pIHsKKwkJaWYgKCFyZXNvdXJjZS5nZXRFcnJvcnMoKS5pc0VtcHR5KCkgfHwgIXJlc291cmNlLmdldFdhcm5pbmdzKCkuaXNFbXB0eSgpKSB7CisJCQlCYXNpY0RpYWdub3N0aWMgYmFzaWNEaWFnbm9zdGljID0KKwkJCQluZXcgQmFzaWNEaWFnbm9zdGljCisJCQkJCShEaWFnbm9zdGljLkVSUk9SLAorCQkJCQkgIm9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5tdWx0aXBvcHVsYXRpb24uZWRpdG9yIiwKKwkJCQkJIDAsCisJCQkJCSBnZXRTdHJpbmcoIl9VSV9DcmVhdGVNb2RlbEVycm9yX21lc3NhZ2UiLCByZXNvdXJjZS5nZXRVUkkoKSksCisJCQkJCSBuZXcgT2JqZWN0IFtdIHsgZXhjZXB0aW9uID09IG51bGwgPyAoT2JqZWN0KXJlc291cmNlIDogZXhjZXB0aW9uIH0pOworCQkJYmFzaWNEaWFnbm9zdGljLm1lcmdlKEVjb3JlVXRpbC5jb21wdXRlRGlhZ25vc3RpYyhyZXNvdXJjZSwgdHJ1ZSkpOworCQkJcmV0dXJuIGJhc2ljRGlhZ25vc3RpYzsKKwkJfQorCQllbHNlIGlmIChleGNlcHRpb24gIT0gbnVsbCkgeworCQkJcmV0dXJuCisJCQkJbmV3IEJhc2ljRGlhZ25vc3RpYworCQkJCQkoRGlhZ25vc3RpYy5FUlJPUiwKKwkJCQkJICJvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMubXVsdGlwb3B1bGF0aW9uLmVkaXRvciIsCisJCQkJCSAwLAorCQkJCQkgZ2V0U3RyaW5nKCJfVUlfQ3JlYXRlTW9kZWxFcnJvcl9tZXNzYWdlIiwgcmVzb3VyY2UuZ2V0VVJJKCkpLAorCQkJCQkgbmV3IE9iamVjdFtdIHsgZXhjZXB0aW9uIH0pOworCQl9CisJCWVsc2UgeworCQkJcmV0dXJuIERpYWdub3N0aWMuT0tfSU5TVEFOQ0U7CisJCX0KKwl9CisKKwkvKioKKwkgKiBUaGlzIGlzIHRoZSBtZXRob2QgdXNlZCBieSB0aGUgZnJhbWV3b3JrIHRvIGluc3RhbGwgeW91ciBvd24gY29udHJvbHMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgY3JlYXRlUGFnZXMoKSB7CisJCS8vIENyZWF0ZXMgdGhlIG1vZGVsIGZyb20gdGhlIGVkaXRvciBpbnB1dAorCQkvLworCQljcmVhdGVNb2RlbCgpOworCisJCS8vIE9ubHkgY3JlYXRlcyB0aGUgb3RoZXIgcGFnZXMgaWYgdGhlcmUgaXMgc29tZXRoaW5nIHRoYXQgY2FuIGJlIGVkaXRlZAorCQkvLworCQlpZiAoIWdldEVkaXRpbmdEb21haW4oKS5nZXRSZXNvdXJjZVNldCgpLmdldFJlc291cmNlcygpLmlzRW1wdHkoKSkgeworCQkJLy8gQ3JlYXRlIGEgcGFnZSBmb3IgdGhlIHNlbGVjdGlvbiB0cmVlIHZpZXcuCisJCQkvLworCQkJeworCQkJCVZpZXdlclBhbmUgdmlld2VyUGFuZSA9CisJCQkJCW5ldyBWaWV3ZXJQYW5lKGdldFNpdGUoKS5nZXRQYWdlKCksIE11bHRpcG9wdWxhdGlvbkVkaXRvci50aGlzKSB7CisJCQkJCQlAT3ZlcnJpZGUKKwkJCQkJCXB1YmxpYyBWaWV3ZXIgY3JlYXRlVmlld2VyKENvbXBvc2l0ZSBjb21wb3NpdGUpIHsKKwkJCQkJCQlUcmVlIHRyZWUgPSBuZXcgVHJlZShjb21wb3NpdGUsIFNXVC5NVUxUSSk7CisJCQkJCQkJVHJlZVZpZXdlciBuZXdUcmVlVmlld2VyID0gbmV3IFRyZWVWaWV3ZXIodHJlZSk7CisJCQkJCQkJcmV0dXJuIG5ld1RyZWVWaWV3ZXI7CisJCQkJCQl9CisJCQkJCQlAT3ZlcnJpZGUKKwkJCQkJCXB1YmxpYyB2b2lkIHJlcXVlc3RBY3RpdmF0aW9uKCkgeworCQkJCQkJCXN1cGVyLnJlcXVlc3RBY3RpdmF0aW9uKCk7CisJCQkJCQkJc2V0Q3VycmVudFZpZXdlclBhbmUodGhpcyk7CisJCQkJCQl9CisJCQkJCX07CisJCQkJdmlld2VyUGFuZS5jcmVhdGVDb250cm9sKGdldENvbnRhaW5lcigpKTsKKworCQkJCXNlbGVjdGlvblZpZXdlciA9IChUcmVlVmlld2VyKXZpZXdlclBhbmUuZ2V0Vmlld2VyKCk7CisJCQkJc2VsZWN0aW9uVmlld2VyLnNldENvbnRlbnRQcm92aWRlcihuZXcgQWRhcHRlckZhY3RvcnlDb250ZW50UHJvdmlkZXIoYWRhcHRlckZhY3RvcnkpKTsKKworCQkJCXNlbGVjdGlvblZpZXdlci5zZXRMYWJlbFByb3ZpZGVyKG5ldyBBZGFwdGVyRmFjdG9yeUxhYmVsUHJvdmlkZXIoYWRhcHRlckZhY3RvcnkpKTsKKwkJCQlzZWxlY3Rpb25WaWV3ZXIuc2V0SW5wdXQoZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpKTsKKwkJCQlzZWxlY3Rpb25WaWV3ZXIuc2V0U2VsZWN0aW9uKG5ldyBTdHJ1Y3R1cmVkU2VsZWN0aW9uKGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKS5nZXRSZXNvdXJjZXMoKS5nZXQoMCkpLCB0cnVlKTsKKwkJCQl2aWV3ZXJQYW5lLnNldFRpdGxlKGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKSk7CisKKwkJCQluZXcgQWRhcHRlckZhY3RvcnlUcmVlRWRpdG9yKHNlbGVjdGlvblZpZXdlci5nZXRUcmVlKCksIGFkYXB0ZXJGYWN0b3J5KTsKKworCQkJCWNyZWF0ZUNvbnRleHRNZW51Rm9yKHNlbGVjdGlvblZpZXdlcik7CisJCQkJaW50IHBhZ2VJbmRleCA9IGFkZFBhZ2Uodmlld2VyUGFuZS5nZXRDb250cm9sKCkpOworCQkJCXNldFBhZ2VUZXh0KHBhZ2VJbmRleCwgZ2V0U3RyaW5nKCJfVUlfU2VsZWN0aW9uUGFnZV9sYWJlbCIpKTsKKwkJCX0KKworCQkJLy8gQ3JlYXRlIGEgcGFnZSBmb3IgdGhlIHBhcmVudCB0cmVlIHZpZXcuCisJCQkvLworCQkJeworCQkJCVZpZXdlclBhbmUgdmlld2VyUGFuZSA9CisJCQkJCW5ldyBWaWV3ZXJQYW5lKGdldFNpdGUoKS5nZXRQYWdlKCksIE11bHRpcG9wdWxhdGlvbkVkaXRvci50aGlzKSB7CisJCQkJCQlAT3ZlcnJpZGUKKwkJCQkJCXB1YmxpYyBWaWV3ZXIgY3JlYXRlVmlld2VyKENvbXBvc2l0ZSBjb21wb3NpdGUpIHsKKwkJCQkJCQlUcmVlIHRyZWUgPSBuZXcgVHJlZShjb21wb3NpdGUsIFNXVC5NVUxUSSk7CisJCQkJCQkJVHJlZVZpZXdlciBuZXdUcmVlVmlld2VyID0gbmV3IFRyZWVWaWV3ZXIodHJlZSk7CisJCQkJCQkJcmV0dXJuIG5ld1RyZWVWaWV3ZXI7CisJCQkJCQl9CisJCQkJCQlAT3ZlcnJpZGUKKwkJCQkJCXB1YmxpYyB2b2lkIHJlcXVlc3RBY3RpdmF0aW9uKCkgeworCQkJCQkJCXN1cGVyLnJlcXVlc3RBY3RpdmF0aW9uKCk7CisJCQkJCQkJc2V0Q3VycmVudFZpZXdlclBhbmUodGhpcyk7CisJCQkJCQl9CisJCQkJCX07CisJCQkJdmlld2VyUGFuZS5jcmVhdGVDb250cm9sKGdldENvbnRhaW5lcigpKTsKKworCQkJCXBhcmVudFZpZXdlciA9IChUcmVlVmlld2VyKXZpZXdlclBhbmUuZ2V0Vmlld2VyKCk7CisJCQkJcGFyZW50Vmlld2VyLnNldEF1dG9FeHBhbmRMZXZlbCgzMCk7CisJCQkJcGFyZW50Vmlld2VyLnNldENvbnRlbnRQcm92aWRlcihuZXcgUmV2ZXJzZUFkYXB0ZXJGYWN0b3J5Q29udGVudFByb3ZpZGVyKGFkYXB0ZXJGYWN0b3J5KSk7CisJCQkJcGFyZW50Vmlld2VyLnNldExhYmVsUHJvdmlkZXIobmV3IEFkYXB0ZXJGYWN0b3J5TGFiZWxQcm92aWRlcihhZGFwdGVyRmFjdG9yeSkpOworCisJCQkJY3JlYXRlQ29udGV4dE1lbnVGb3IocGFyZW50Vmlld2VyKTsKKwkJCQlpbnQgcGFnZUluZGV4ID0gYWRkUGFnZSh2aWV3ZXJQYW5lLmdldENvbnRyb2woKSk7CisJCQkJc2V0UGFnZVRleHQocGFnZUluZGV4LCBnZXRTdHJpbmcoIl9VSV9QYXJlbnRQYWdlX2xhYmVsIikpOworCQkJfQorCisJCQkvLyBUaGlzIGlzIHRoZSBwYWdlIGZvciB0aGUgbGlzdCB2aWV3ZXIKKwkJCS8vCisJCQl7CisJCQkJVmlld2VyUGFuZSB2aWV3ZXJQYW5lID0KKwkJCQkJbmV3IFZpZXdlclBhbmUoZ2V0U2l0ZSgpLmdldFBhZ2UoKSwgTXVsdGlwb3B1bGF0aW9uRWRpdG9yLnRoaXMpIHsKKwkJCQkJCUBPdmVycmlkZQorCQkJCQkJcHVibGljIFZpZXdlciBjcmVhdGVWaWV3ZXIoQ29tcG9zaXRlIGNvbXBvc2l0ZSkgeworCQkJCQkJCXJldHVybiBuZXcgTGlzdFZpZXdlcihjb21wb3NpdGUpOworCQkJCQkJfQorCQkJCQkJQE92ZXJyaWRlCisJCQkJCQlwdWJsaWMgdm9pZCByZXF1ZXN0QWN0aXZhdGlvbigpIHsKKwkJCQkJCQlzdXBlci5yZXF1ZXN0QWN0aXZhdGlvbigpOworCQkJCQkJCXNldEN1cnJlbnRWaWV3ZXJQYW5lKHRoaXMpOworCQkJCQkJfQorCQkJCQl9OworCQkJCXZpZXdlclBhbmUuY3JlYXRlQ29udHJvbChnZXRDb250YWluZXIoKSk7CisJCQkJbGlzdFZpZXdlciA9IChMaXN0Vmlld2VyKXZpZXdlclBhbmUuZ2V0Vmlld2VyKCk7CisJCQkJbGlzdFZpZXdlci5zZXRDb250ZW50UHJvdmlkZXIobmV3IEFkYXB0ZXJGYWN0b3J5Q29udGVudFByb3ZpZGVyKGFkYXB0ZXJGYWN0b3J5KSk7CisJCQkJbGlzdFZpZXdlci5zZXRMYWJlbFByb3ZpZGVyKG5ldyBBZGFwdGVyRmFjdG9yeUxhYmVsUHJvdmlkZXIoYWRhcHRlckZhY3RvcnkpKTsKKworCQkJCWNyZWF0ZUNvbnRleHRNZW51Rm9yKGxpc3RWaWV3ZXIpOworCQkJCWludCBwYWdlSW5kZXggPSBhZGRQYWdlKHZpZXdlclBhbmUuZ2V0Q29udHJvbCgpKTsKKwkJCQlzZXRQYWdlVGV4dChwYWdlSW5kZXgsIGdldFN0cmluZygiX1VJX0xpc3RQYWdlX2xhYmVsIikpOworCQkJfQorCisJCQkvLyBUaGlzIGlzIHRoZSBwYWdlIGZvciB0aGUgdHJlZSB2aWV3ZXIKKwkJCS8vCisJCQl7CisJCQkJVmlld2VyUGFuZSB2aWV3ZXJQYW5lID0KKwkJCQkJbmV3IFZpZXdlclBhbmUoZ2V0U2l0ZSgpLmdldFBhZ2UoKSwgTXVsdGlwb3B1bGF0aW9uRWRpdG9yLnRoaXMpIHsKKwkJCQkJCUBPdmVycmlkZQorCQkJCQkJcHVibGljIFZpZXdlciBjcmVhdGVWaWV3ZXIoQ29tcG9zaXRlIGNvbXBvc2l0ZSkgeworCQkJCQkJCXJldHVybiBuZXcgVHJlZVZpZXdlcihjb21wb3NpdGUpOworCQkJCQkJfQorCQkJCQkJQE92ZXJyaWRlCisJCQkJCQlwdWJsaWMgdm9pZCByZXF1ZXN0QWN0aXZhdGlvbigpIHsKKwkJCQkJCQlzdXBlci5yZXF1ZXN0QWN0aXZhdGlvbigpOworCQkJCQkJCXNldEN1cnJlbnRWaWV3ZXJQYW5lKHRoaXMpOworCQkJCQkJfQorCQkJCQl9OworCQkJCXZpZXdlclBhbmUuY3JlYXRlQ29udHJvbChnZXRDb250YWluZXIoKSk7CisJCQkJdHJlZVZpZXdlciA9IChUcmVlVmlld2VyKXZpZXdlclBhbmUuZ2V0Vmlld2VyKCk7CisJCQkJdHJlZVZpZXdlci5zZXRDb250ZW50UHJvdmlkZXIobmV3IEFkYXB0ZXJGYWN0b3J5Q29udGVudFByb3ZpZGVyKGFkYXB0ZXJGYWN0b3J5KSk7CisJCQkJdHJlZVZpZXdlci5zZXRMYWJlbFByb3ZpZGVyKG5ldyBBZGFwdGVyRmFjdG9yeUxhYmVsUHJvdmlkZXIoYWRhcHRlckZhY3RvcnkpKTsKKworCQkJCW5ldyBBZGFwdGVyRmFjdG9yeVRyZWVFZGl0b3IodHJlZVZpZXdlci5nZXRUcmVlKCksIGFkYXB0ZXJGYWN0b3J5KTsKKworCQkJCWNyZWF0ZUNvbnRleHRNZW51Rm9yKHRyZWVWaWV3ZXIpOworCQkJCWludCBwYWdlSW5kZXggPSBhZGRQYWdlKHZpZXdlclBhbmUuZ2V0Q29udHJvbCgpKTsKKwkJCQlzZXRQYWdlVGV4dChwYWdlSW5kZXgsIGdldFN0cmluZygiX1VJX1RyZWVQYWdlX2xhYmVsIikpOworCQkJfQorCisJCQkvLyBUaGlzIGlzIHRoZSBwYWdlIGZvciB0aGUgdGFibGUgdmlld2VyLgorCQkJLy8KKwkJCXsKKwkJCQlWaWV3ZXJQYW5lIHZpZXdlclBhbmUgPQorCQkJCQluZXcgVmlld2VyUGFuZShnZXRTaXRlKCkuZ2V0UGFnZSgpLCBNdWx0aXBvcHVsYXRpb25FZGl0b3IudGhpcykgeworCQkJCQkJQE92ZXJyaWRlCisJCQkJCQlwdWJsaWMgVmlld2VyIGNyZWF0ZVZpZXdlcihDb21wb3NpdGUgY29tcG9zaXRlKSB7CisJCQkJCQkJcmV0dXJuIG5ldyBUYWJsZVZpZXdlcihjb21wb3NpdGUpOworCQkJCQkJfQorCQkJCQkJQE92ZXJyaWRlCisJCQkJCQlwdWJsaWMgdm9pZCByZXF1ZXN0QWN0aXZhdGlvbigpIHsKKwkJCQkJCQlzdXBlci5yZXF1ZXN0QWN0aXZhdGlvbigpOworCQkJCQkJCXNldEN1cnJlbnRWaWV3ZXJQYW5lKHRoaXMpOworCQkJCQkJfQorCQkJCQl9OworCQkJCXZpZXdlclBhbmUuY3JlYXRlQ29udHJvbChnZXRDb250YWluZXIoKSk7CisJCQkJdGFibGVWaWV3ZXIgPSAoVGFibGVWaWV3ZXIpdmlld2VyUGFuZS5nZXRWaWV3ZXIoKTsKKworCQkJCVRhYmxlIHRhYmxlID0gdGFibGVWaWV3ZXIuZ2V0VGFibGUoKTsKKwkJCQlUYWJsZUxheW91dCBsYXlvdXQgPSBuZXcgVGFibGVMYXlvdXQoKTsKKwkJCQl0YWJsZS5zZXRMYXlvdXQobGF5b3V0KTsKKwkJCQl0YWJsZS5zZXRIZWFkZXJWaXNpYmxlKHRydWUpOworCQkJCXRhYmxlLnNldExpbmVzVmlzaWJsZSh0cnVlKTsKKworCQkJCVRhYmxlQ29sdW1uIG9iamVjdENvbHVtbiA9IG5ldyBUYWJsZUNvbHVtbih0YWJsZSwgU1dULk5PTkUpOworCQkJCWxheW91dC5hZGRDb2x1bW5EYXRhKG5ldyBDb2x1bW5XZWlnaHREYXRhKDMsIDEwMCwgdHJ1ZSkpOworCQkJCW9iamVjdENvbHVtbi5zZXRUZXh0KGdldFN0cmluZygiX1VJX09iamVjdENvbHVtbl9sYWJlbCIpKTsKKwkJCQlvYmplY3RDb2x1bW4uc2V0UmVzaXphYmxlKHRydWUpOworCisJCQkJVGFibGVDb2x1bW4gc2VsZkNvbHVtbiA9IG5ldyBUYWJsZUNvbHVtbih0YWJsZSwgU1dULk5PTkUpOworCQkJCWxheW91dC5hZGRDb2x1bW5EYXRhKG5ldyBDb2x1bW5XZWlnaHREYXRhKDIsIDEwMCwgdHJ1ZSkpOworCQkJCXNlbGZDb2x1bW4uc2V0VGV4dChnZXRTdHJpbmcoIl9VSV9TZWxmQ29sdW1uX2xhYmVsIikpOworCQkJCXNlbGZDb2x1bW4uc2V0UmVzaXphYmxlKHRydWUpOworCisJCQkJdGFibGVWaWV3ZXIuc2V0Q29sdW1uUHJvcGVydGllcyhuZXcgU3RyaW5nIFtdIHsiYSIsICJiIn0pOworCQkJCXRhYmxlVmlld2VyLnNldENvbnRlbnRQcm92aWRlcihuZXcgQWRhcHRlckZhY3RvcnlDb250ZW50UHJvdmlkZXIoYWRhcHRlckZhY3RvcnkpKTsKKwkJCQl0YWJsZVZpZXdlci5zZXRMYWJlbFByb3ZpZGVyKG5ldyBBZGFwdGVyRmFjdG9yeUxhYmVsUHJvdmlkZXIoYWRhcHRlckZhY3RvcnkpKTsKKworCQkJCWNyZWF0ZUNvbnRleHRNZW51Rm9yKHRhYmxlVmlld2VyKTsKKwkJCQlpbnQgcGFnZUluZGV4ID0gYWRkUGFnZSh2aWV3ZXJQYW5lLmdldENvbnRyb2woKSk7CisJCQkJc2V0UGFnZVRleHQocGFnZUluZGV4LCBnZXRTdHJpbmcoIl9VSV9UYWJsZVBhZ2VfbGFiZWwiKSk7CisJCQl9CisKKwkJCS8vIFRoaXMgaXMgdGhlIHBhZ2UgZm9yIHRoZSB0YWJsZSB0cmVlIHZpZXdlci4KKwkJCS8vCisJCQl7CisJCQkJVmlld2VyUGFuZSB2aWV3ZXJQYW5lID0KKwkJCQkJbmV3IFZpZXdlclBhbmUoZ2V0U2l0ZSgpLmdldFBhZ2UoKSwgTXVsdGlwb3B1bGF0aW9uRWRpdG9yLnRoaXMpIHsKKwkJCQkJCUBPdmVycmlkZQorCQkJCQkJcHVibGljIFZpZXdlciBjcmVhdGVWaWV3ZXIoQ29tcG9zaXRlIGNvbXBvc2l0ZSkgeworCQkJCQkJCXJldHVybiBuZXcgVHJlZVZpZXdlcihjb21wb3NpdGUpOworCQkJCQkJfQorCQkJCQkJQE92ZXJyaWRlCisJCQkJCQlwdWJsaWMgdm9pZCByZXF1ZXN0QWN0aXZhdGlvbigpIHsKKwkJCQkJCQlzdXBlci5yZXF1ZXN0QWN0aXZhdGlvbigpOworCQkJCQkJCXNldEN1cnJlbnRWaWV3ZXJQYW5lKHRoaXMpOworCQkJCQkJfQorCQkJCQl9OworCQkJCXZpZXdlclBhbmUuY3JlYXRlQ29udHJvbChnZXRDb250YWluZXIoKSk7CisKKwkJCQl0cmVlVmlld2VyV2l0aENvbHVtbnMgPSAoVHJlZVZpZXdlcil2aWV3ZXJQYW5lLmdldFZpZXdlcigpOworCisJCQkJVHJlZSB0cmVlID0gdHJlZVZpZXdlcldpdGhDb2x1bW5zLmdldFRyZWUoKTsKKwkJCQl0cmVlLnNldExheW91dERhdGEobmV3IEZpbGxMYXlvdXQoKSk7CisJCQkJdHJlZS5zZXRIZWFkZXJWaXNpYmxlKHRydWUpOworCQkJCXRyZWUuc2V0TGluZXNWaXNpYmxlKHRydWUpOworCisJCQkJVHJlZUNvbHVtbiBvYmplY3RDb2x1bW4gPSBuZXcgVHJlZUNvbHVtbih0cmVlLCBTV1QuTk9ORSk7CisJCQkJb2JqZWN0Q29sdW1uLnNldFRleHQoZ2V0U3RyaW5nKCJfVUlfT2JqZWN0Q29sdW1uX2xhYmVsIikpOworCQkJCW9iamVjdENvbHVtbi5zZXRSZXNpemFibGUodHJ1ZSk7CisJCQkJb2JqZWN0Q29sdW1uLnNldFdpZHRoKDI1MCk7CisKKwkJCQlUcmVlQ29sdW1uIHNlbGZDb2x1bW4gPSBuZXcgVHJlZUNvbHVtbih0cmVlLCBTV1QuTk9ORSk7CisJCQkJc2VsZkNvbHVtbi5zZXRUZXh0KGdldFN0cmluZygiX1VJX1NlbGZDb2x1bW5fbGFiZWwiKSk7CisJCQkJc2VsZkNvbHVtbi5zZXRSZXNpemFibGUodHJ1ZSk7CisJCQkJc2VsZkNvbHVtbi5zZXRXaWR0aCgyMDApOworCisJCQkJdHJlZVZpZXdlcldpdGhDb2x1bW5zLnNldENvbHVtblByb3BlcnRpZXMobmV3IFN0cmluZyBbXSB7ImEiLCAiYiJ9KTsKKwkJCQl0cmVlVmlld2VyV2l0aENvbHVtbnMuc2V0Q29udGVudFByb3ZpZGVyKG5ldyBBZGFwdGVyRmFjdG9yeUNvbnRlbnRQcm92aWRlcihhZGFwdGVyRmFjdG9yeSkpOworCQkJCXRyZWVWaWV3ZXJXaXRoQ29sdW1ucy5zZXRMYWJlbFByb3ZpZGVyKG5ldyBBZGFwdGVyRmFjdG9yeUxhYmVsUHJvdmlkZXIoYWRhcHRlckZhY3RvcnkpKTsKKworCQkJCWNyZWF0ZUNvbnRleHRNZW51Rm9yKHRyZWVWaWV3ZXJXaXRoQ29sdW1ucyk7CisJCQkJaW50IHBhZ2VJbmRleCA9IGFkZFBhZ2Uodmlld2VyUGFuZS5nZXRDb250cm9sKCkpOworCQkJCXNldFBhZ2VUZXh0KHBhZ2VJbmRleCwgZ2V0U3RyaW5nKCJfVUlfVHJlZVdpdGhDb2x1bW5zUGFnZV9sYWJlbCIpKTsKKwkJCX0KKworCQkJZ2V0U2l0ZSgpLmdldFNoZWxsKCkuZ2V0RGlzcGxheSgpLmFzeW5jRXhlYworCQkJCShuZXcgUnVubmFibGUoKSB7CisJCQkJCSBwdWJsaWMgdm9pZCBydW4oKSB7CisJCQkJCQkgc2V0QWN0aXZlUGFnZSgwKTsKKwkJCQkJIH0KKwkJCQkgfSk7CisJCX0KKworCQkvLyBFbnN1cmVzIHRoYXQgdGhpcyBlZGl0b3Igd2lsbCBvbmx5IGRpc3BsYXkgdGhlIHBhZ2UncyB0YWIKKwkJLy8gYXJlYSBpZiB0aGVyZSBhcmUgbW9yZSB0aGFuIG9uZSBwYWdlCisJCS8vCisJCWdldENvbnRhaW5lcigpLmFkZENvbnRyb2xMaXN0ZW5lcgorCQkJKG5ldyBDb250cm9sQWRhcHRlcigpIHsKKwkJCQlib29sZWFuIGd1YXJkID0gZmFsc2U7CisJCQkJQE92ZXJyaWRlCisJCQkJcHVibGljIHZvaWQgY29udHJvbFJlc2l6ZWQoQ29udHJvbEV2ZW50IGV2ZW50KSB7CisJCQkJCWlmICghZ3VhcmQpIHsKKwkJCQkJCWd1YXJkID0gdHJ1ZTsKKwkJCQkJCWhpZGVUYWJzKCk7CisJCQkJCQlndWFyZCA9IGZhbHNlOworCQkJCQl9CisJCQkJfQorCQkJIH0pOworCisJCWdldFNpdGUoKS5nZXRTaGVsbCgpLmdldERpc3BsYXkoKS5hc3luY0V4ZWMKKwkJCShuZXcgUnVubmFibGUoKSB7CisJCQkJIHB1YmxpYyB2b2lkIHJ1bigpIHsKKwkJCQkJIHVwZGF0ZVByb2JsZW1JbmRpY2F0aW9uKCk7CisJCQkJIH0KKwkJCSB9KTsKKwl9CisKKwkvKioKKwkgKiBJZiB0aGVyZSBpcyBqdXN0IG9uZSBwYWdlIGluIHRoZSBtdWx0aS1wYWdlIGVkaXRvciBwYXJ0LAorCSAqIHRoaXMgaGlkZXMgdGhlIHNpbmdsZSB0YWIgYXQgdGhlIGJvdHRvbS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBoaWRlVGFicygpIHsKKwkJaWYgKGdldFBhZ2VDb3VudCgpIDw9IDEpIHsKKwkJCXNldFBhZ2VUZXh0KDAsICIiKTsKKwkJCWlmIChnZXRDb250YWluZXIoKSBpbnN0YW5jZW9mIENUYWJGb2xkZXIpIHsKKwkJCQkoKENUYWJGb2xkZXIpZ2V0Q29udGFpbmVyKCkpLnNldFRhYkhlaWdodCgxKTsKKwkJCQlQb2ludCBwb2ludCA9IGdldENvbnRhaW5lcigpLmdldFNpemUoKTsKKwkJCQlnZXRDb250YWluZXIoKS5zZXRTaXplKHBvaW50LngsIHBvaW50LnkgKyA2KTsKKwkJCX0KKwkJfQorCX0KKworCS8qKgorCSAqIElmIHRoZXJlIGlzIG1vcmUgdGhhbiBvbmUgcGFnZSBpbiB0aGUgbXVsdGktcGFnZSBlZGl0b3IgcGFydCwKKwkgKiB0aGlzIHNob3dzIHRoZSB0YWJzIGF0IHRoZSBib3R0b20uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgc2hvd1RhYnMoKSB7CisJCWlmIChnZXRQYWdlQ291bnQoKSA+IDEpIHsKKwkJCXNldFBhZ2VUZXh0KDAsIGdldFN0cmluZygiX1VJX1NlbGVjdGlvblBhZ2VfbGFiZWwiKSk7CisJCQlpZiAoZ2V0Q29udGFpbmVyKCkgaW5zdGFuY2VvZiBDVGFiRm9sZGVyKSB7CisJCQkJKChDVGFiRm9sZGVyKWdldENvbnRhaW5lcigpKS5zZXRUYWJIZWlnaHQoU1dULkRFRkFVTFQpOworCQkJCVBvaW50IHBvaW50ID0gZ2V0Q29udGFpbmVyKCkuZ2V0U2l6ZSgpOworCQkJCWdldENvbnRhaW5lcigpLnNldFNpemUocG9pbnQueCwgcG9pbnQueSAtIDYpOworCQkJfQorCQl9CisJfQorCisJLyoqCisJICogVGhpcyBpcyB1c2VkIHRvIHRyYWNrIHRoZSBhY3RpdmUgdmlld2VyLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIHBhZ2VDaGFuZ2UoaW50IHBhZ2VJbmRleCkgeworCQlzdXBlci5wYWdlQ2hhbmdlKHBhZ2VJbmRleCk7CisKKwkJaWYgKGNvbnRlbnRPdXRsaW5lUGFnZSAhPSBudWxsKSB7CisJCQloYW5kbGVDb250ZW50T3V0bGluZVNlbGVjdGlvbihjb250ZW50T3V0bGluZVBhZ2UuZ2V0U2VsZWN0aW9uKCkpOworCQl9CisJfQorCisJLyoqCisJICogVGhpcyBpcyBob3cgdGhlIGZyYW1ld29yayBkZXRlcm1pbmVzIHdoaWNoIGludGVyZmFjZXMgd2UgaW1wbGVtZW50LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBTdXBwcmVzc1dhcm5pbmdzKCJ1bmNoZWNrZWQiKQorCUBPdmVycmlkZQorCXB1YmxpYyBPYmplY3QgZ2V0QWRhcHRlcihDbGFzcyBrZXkpIHsKKwkJaWYgKGtleS5lcXVhbHMoSUNvbnRlbnRPdXRsaW5lUGFnZS5jbGFzcykpIHsKKwkJCXJldHVybiBzaG93T3V0bGluZVZpZXcoKSA/IGdldENvbnRlbnRPdXRsaW5lUGFnZSgpIDogbnVsbDsKKwkJfQorCQllbHNlIGlmIChrZXkuZXF1YWxzKElQcm9wZXJ0eVNoZWV0UGFnZS5jbGFzcykpIHsKKwkJCXJldHVybiBnZXRQcm9wZXJ0eVNoZWV0UGFnZSgpOworCQl9CisJCWVsc2UgaWYgKGtleS5lcXVhbHMoSUdvdG9NYXJrZXIuY2xhc3MpKSB7CisJCQlyZXR1cm4gdGhpczsKKwkJfQorCQllbHNlIHsKKwkJCXJldHVybiBzdXBlci5nZXRBZGFwdGVyKGtleSk7CisJCX0KKwl9CisKKwkvKioKKwkgKiBUaGlzIGFjY2Vzc2VzIGEgY2FjaGVkIHZlcnNpb24gb2YgdGhlIGNvbnRlbnQgb3V0bGluZXIuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIElDb250ZW50T3V0bGluZVBhZ2UgZ2V0Q29udGVudE91dGxpbmVQYWdlKCkgeworCQlpZiAoY29udGVudE91dGxpbmVQYWdlID09IG51bGwpIHsKKwkJCS8vIFRoZSBjb250ZW50IG91dGxpbmUgaXMganVzdCBhIHRyZWUuCisJCQkvLworCQkJY2xhc3MgTXlDb250ZW50T3V0bGluZVBhZ2UgZXh0ZW5kcyBDb250ZW50T3V0bGluZVBhZ2UgeworCQkJCUBPdmVycmlkZQorCQkJCXB1YmxpYyB2b2lkIGNyZWF0ZUNvbnRyb2woQ29tcG9zaXRlIHBhcmVudCkgeworCQkJCQlzdXBlci5jcmVhdGVDb250cm9sKHBhcmVudCk7CisJCQkJCWNvbnRlbnRPdXRsaW5lVmlld2VyID0gZ2V0VHJlZVZpZXdlcigpOworCQkJCQljb250ZW50T3V0bGluZVZpZXdlci5hZGRTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIodGhpcyk7CisKKwkJCQkJLy8gU2V0IHVwIHRoZSB0cmVlIHZpZXdlci4KKwkJCQkJLy8KKwkJCQkJY29udGVudE91dGxpbmVWaWV3ZXIuc2V0Q29udGVudFByb3ZpZGVyKG5ldyBBZGFwdGVyRmFjdG9yeUNvbnRlbnRQcm92aWRlcihhZGFwdGVyRmFjdG9yeSkpOworCQkJCQljb250ZW50T3V0bGluZVZpZXdlci5zZXRMYWJlbFByb3ZpZGVyKG5ldyBBZGFwdGVyRmFjdG9yeUxhYmVsUHJvdmlkZXIoYWRhcHRlckZhY3RvcnkpKTsKKwkJCQkJY29udGVudE91dGxpbmVWaWV3ZXIuc2V0SW5wdXQoZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpKTsKKworCQkJCQkvLyBNYWtlIHN1cmUgb3VyIHBvcHVwcyB3b3JrLgorCQkJCQkvLworCQkJCQljcmVhdGVDb250ZXh0TWVudUZvcihjb250ZW50T3V0bGluZVZpZXdlcik7CisKKwkJCQkJaWYgKCFlZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkuZ2V0UmVzb3VyY2VzKCkuaXNFbXB0eSgpKSB7CisJCQkJCSAgLy8gU2VsZWN0IHRoZSByb290IG9iamVjdCBpbiB0aGUgdmlldy4KKwkJCQkJICAvLworCQkJCQkgIGNvbnRlbnRPdXRsaW5lVmlld2VyLnNldFNlbGVjdGlvbihuZXcgU3RydWN0dXJlZFNlbGVjdGlvbihlZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkuZ2V0UmVzb3VyY2VzKCkuZ2V0KDApKSwgdHJ1ZSk7CisJCQkJCX0KKwkJCQl9CisKKwkJCQlAT3ZlcnJpZGUKKwkJCQlwdWJsaWMgdm9pZCBtYWtlQ29udHJpYnV0aW9ucyhJTWVudU1hbmFnZXIgbWVudU1hbmFnZXIsIElUb29sQmFyTWFuYWdlciB0b29sQmFyTWFuYWdlciwgSVN0YXR1c0xpbmVNYW5hZ2VyIHN0YXR1c0xpbmVNYW5hZ2VyKSB7CisJCQkJCXN1cGVyLm1ha2VDb250cmlidXRpb25zKG1lbnVNYW5hZ2VyLCB0b29sQmFyTWFuYWdlciwgc3RhdHVzTGluZU1hbmFnZXIpOworCQkJCQljb250ZW50T3V0bGluZVN0YXR1c0xpbmVNYW5hZ2VyID0gc3RhdHVzTGluZU1hbmFnZXI7CisJCQkJfQorCisJCQkJQE92ZXJyaWRlCisJCQkJcHVibGljIHZvaWQgc2V0QWN0aW9uQmFycyhJQWN0aW9uQmFycyBhY3Rpb25CYXJzKSB7CisJCQkJCXN1cGVyLnNldEFjdGlvbkJhcnMoYWN0aW9uQmFycyk7CisJCQkJCWdldEFjdGlvbkJhckNvbnRyaWJ1dG9yKCkuc2hhcmVHbG9iYWxBY3Rpb25zKHRoaXMsIGFjdGlvbkJhcnMpOworCQkJCX0KKwkJCX0KKworCQkJY29udGVudE91dGxpbmVQYWdlID0gbmV3IE15Q29udGVudE91dGxpbmVQYWdlKCk7CisKKwkJCS8vIExpc3RlbiB0byBzZWxlY3Rpb24gc28gdGhhdCB3ZSBjYW4gaGFuZGxlIGl0IGlzIGEgc3BlY2lhbCB3YXkuCisJCQkvLworCQkJY29udGVudE91dGxpbmVQYWdlLmFkZFNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcgorCQkJCShuZXcgSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcigpIHsKKwkJCQkJIC8vIFRoaXMgZW5zdXJlcyB0aGF0IHdlIGhhbmRsZSBzZWxlY3Rpb25zIGNvcnJlY3RseS4KKwkJCQkJIC8vCisJCQkJCSBwdWJsaWMgdm9pZCBzZWxlY3Rpb25DaGFuZ2VkKFNlbGVjdGlvbkNoYW5nZWRFdmVudCBldmVudCkgeworCQkJCQkJIGhhbmRsZUNvbnRlbnRPdXRsaW5lU2VsZWN0aW9uKGV2ZW50LmdldFNlbGVjdGlvbigpKTsKKwkJCQkJIH0KKwkJCQkgfSk7CisJCX0KKworCQlyZXR1cm4gY29udGVudE91dGxpbmVQYWdlOworCX0KKworCS8qKgorCSAqIFRoaXMgYWNjZXNzZXMgYSBjYWNoZWQgdmVyc2lvbiBvZiB0aGUgcHJvcGVydHkgc2hlZXQuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIElQcm9wZXJ0eVNoZWV0UGFnZSBnZXRQcm9wZXJ0eVNoZWV0UGFnZSgpIHsKKwkJaWYgKHByb3BlcnR5U2hlZXRQYWdlID09IG51bGwpIHsKKwkJCXByb3BlcnR5U2hlZXRQYWdlID0KKwkJCQluZXcgRXh0ZW5kZWRQcm9wZXJ0eVNoZWV0UGFnZShlZGl0aW5nRG9tYWluKSB7CisJCQkJCUBPdmVycmlkZQorCQkJCQlwdWJsaWMgdm9pZCBzZXRTZWxlY3Rpb25Ub1ZpZXdlcihMaXN0PD8+IHNlbGVjdGlvbikgeworCQkJCQkJTXVsdGlwb3B1bGF0aW9uRWRpdG9yLnRoaXMuc2V0U2VsZWN0aW9uVG9WaWV3ZXIoc2VsZWN0aW9uKTsKKwkJCQkJCU11bHRpcG9wdWxhdGlvbkVkaXRvci50aGlzLnNldEZvY3VzKCk7CisJCQkJCX0KKworCQkJCQlAT3ZlcnJpZGUKKwkJCQkJcHVibGljIHZvaWQgc2V0QWN0aW9uQmFycyhJQWN0aW9uQmFycyBhY3Rpb25CYXJzKSB7CisJCQkJCQlzdXBlci5zZXRBY3Rpb25CYXJzKGFjdGlvbkJhcnMpOworCQkJCQkJZ2V0QWN0aW9uQmFyQ29udHJpYnV0b3IoKS5zaGFyZUdsb2JhbEFjdGlvbnModGhpcywgYWN0aW9uQmFycyk7CisJCQkJCX0KKwkJCQl9OworCQkJcHJvcGVydHlTaGVldFBhZ2Uuc2V0UHJvcGVydHlTb3VyY2VQcm92aWRlcihuZXcgQWRhcHRlckZhY3RvcnlDb250ZW50UHJvdmlkZXIoYWRhcHRlckZhY3RvcnkpKTsKKwkJfQorCisJCXJldHVybiBwcm9wZXJ0eVNoZWV0UGFnZTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGRlYWxzIHdpdGggaG93IHdlIHdhbnQgc2VsZWN0aW9uIGluIHRoZSBvdXRsaW5lciB0byBhZmZlY3QgdGhlIG90aGVyIHZpZXdzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIGhhbmRsZUNvbnRlbnRPdXRsaW5lU2VsZWN0aW9uKElTZWxlY3Rpb24gc2VsZWN0aW9uKSB7CisJCWlmIChjdXJyZW50Vmlld2VyUGFuZSAhPSBudWxsICYmICFzZWxlY3Rpb24uaXNFbXB0eSgpICYmIHNlbGVjdGlvbiBpbnN0YW5jZW9mIElTdHJ1Y3R1cmVkU2VsZWN0aW9uKSB7CisJCQlJdGVyYXRvcjw/PiBzZWxlY3RlZEVsZW1lbnRzID0gKChJU3RydWN0dXJlZFNlbGVjdGlvbilzZWxlY3Rpb24pLml0ZXJhdG9yKCk7CisJCQlpZiAoc2VsZWN0ZWRFbGVtZW50cy5oYXNOZXh0KCkpIHsKKwkJCQkvLyBHZXQgdGhlIGZpcnN0IHNlbGVjdGVkIGVsZW1lbnQuCisJCQkJLy8KKwkJCQlPYmplY3Qgc2VsZWN0ZWRFbGVtZW50ID0gc2VsZWN0ZWRFbGVtZW50cy5uZXh0KCk7CisKKwkJCQkvLyBJZiBpdCdzIHRoZSBzZWxlY3Rpb24gdmlld2VyLCB0aGVuIHdlIHdhbnQgaXQgdG8gc2VsZWN0IHRoZSBzYW1lIHNlbGVjdGlvbiBhcyB0aGlzIHNlbGVjdGlvbi4KKwkJCQkvLworCQkJCWlmIChjdXJyZW50Vmlld2VyUGFuZS5nZXRWaWV3ZXIoKSA9PSBzZWxlY3Rpb25WaWV3ZXIpIHsKKwkJCQkJQXJyYXlMaXN0PE9iamVjdD4gc2VsZWN0aW9uTGlzdCA9IG5ldyBBcnJheUxpc3Q8T2JqZWN0PigpOworCQkJCQlzZWxlY3Rpb25MaXN0LmFkZChzZWxlY3RlZEVsZW1lbnQpOworCQkJCQl3aGlsZSAoc2VsZWN0ZWRFbGVtZW50cy5oYXNOZXh0KCkpIHsKKwkJCQkJCXNlbGVjdGlvbkxpc3QuYWRkKHNlbGVjdGVkRWxlbWVudHMubmV4dCgpKTsKKwkJCQkJfQorCisJCQkJCS8vIFNldCB0aGUgc2VsZWN0aW9uIHRvIHRoZSB3aWRnZXQuCisJCQkJCS8vCisJCQkJCXNlbGVjdGlvblZpZXdlci5zZXRTZWxlY3Rpb24obmV3IFN0cnVjdHVyZWRTZWxlY3Rpb24oc2VsZWN0aW9uTGlzdCkpOworCQkJCX0KKwkJCQllbHNlIHsKKwkJCQkJLy8gU2V0IHRoZSBpbnB1dCB0byB0aGUgd2lkZ2V0LgorCQkJCQkvLworCQkJCQlpZiAoY3VycmVudFZpZXdlclBhbmUuZ2V0Vmlld2VyKCkuZ2V0SW5wdXQoKSAhPSBzZWxlY3RlZEVsZW1lbnQpIHsKKwkJCQkJCWN1cnJlbnRWaWV3ZXJQYW5lLmdldFZpZXdlcigpLnNldElucHV0KHNlbGVjdGVkRWxlbWVudCk7CisJCQkJCQljdXJyZW50Vmlld2VyUGFuZS5zZXRUaXRsZShzZWxlY3RlZEVsZW1lbnQpOworCQkJCQl9CisJCQkJfQorCQkJfQorCQl9CisJfQorCisJLyoqCisJICogVGhpcyBpcyBmb3IgaW1wbGVtZW50aW5nIHtAbGluayBJRWRpdG9yUGFydH0gYW5kIHNpbXBseSB0ZXN0cyB0aGUgY29tbWFuZCBzdGFjay4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgYm9vbGVhbiBpc0RpcnR5KCkgeworCQlyZXR1cm4gKChCYXNpY0NvbW1hbmRTdGFjayllZGl0aW5nRG9tYWluLmdldENvbW1hbmRTdGFjaygpKS5pc1NhdmVOZWVkZWQoKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGlzIGZvciBpbXBsZW1lbnRpbmcge0BsaW5rIElFZGl0b3JQYXJ0fSBhbmQgc2ltcGx5IHNhdmVzIHRoZSBtb2RlbCBmaWxlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGRvU2F2ZShJUHJvZ3Jlc3NNb25pdG9yIHByb2dyZXNzTW9uaXRvcikgeworCQkvLyBTYXZlIG9ubHkgcmVzb3VyY2VzIHRoYXQgaGF2ZSBhY3R1YWxseSBjaGFuZ2VkLgorCQkvLworCQlmaW5hbCBNYXA8T2JqZWN0LCBPYmplY3Q+IHNhdmVPcHRpb25zID0gbmV3IEhhc2hNYXA8T2JqZWN0LCBPYmplY3Q+KCk7CisJCXNhdmVPcHRpb25zLnB1dChSZXNvdXJjZS5PUFRJT05fU0FWRV9PTkxZX0lGX0NIQU5HRUQsIFJlc291cmNlLk9QVElPTl9TQVZFX09OTFlfSUZfQ0hBTkdFRF9NRU1PUllfQlVGRkVSKTsKKworCQkvLyBEbyB0aGUgd29yayB3aXRoaW4gYW4gb3BlcmF0aW9uIGJlY2F1c2UgdGhpcyBpcyBhIGxvbmcgcnVubmluZyBhY3Rpdml0eSB0aGF0IG1vZGlmaWVzIHRoZSB3b3JrYmVuY2guCisJCS8vCisJCVdvcmtzcGFjZU1vZGlmeU9wZXJhdGlvbiBvcGVyYXRpb24gPQorCQkJbmV3IFdvcmtzcGFjZU1vZGlmeU9wZXJhdGlvbigpIHsKKwkJCQkvLyBUaGlzIGlzIHRoZSBtZXRob2QgdGhhdCBnZXRzIGludm9rZWQgd2hlbiB0aGUgb3BlcmF0aW9uIHJ1bnMuCisJCQkJLy8KKwkJCQlAT3ZlcnJpZGUKKwkJCQlwdWJsaWMgdm9pZCBleGVjdXRlKElQcm9ncmVzc01vbml0b3IgbW9uaXRvcikgeworCQkJCQkvLyBTYXZlIHRoZSByZXNvdXJjZXMgdG8gdGhlIGZpbGUgc3lzdGVtLgorCQkJCQkvLworCQkJCQlib29sZWFuIGZpcnN0ID0gdHJ1ZTsKKwkJCQkJZm9yIChSZXNvdXJjZSByZXNvdXJjZSA6IGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKS5nZXRSZXNvdXJjZXMoKSkgeworCQkJCQkJaWYgKChmaXJzdCB8fCAhcmVzb3VyY2UuZ2V0Q29udGVudHMoKS5pc0VtcHR5KCkgfHwgaXNQZXJzaXN0ZWQocmVzb3VyY2UpKSAmJiAhZWRpdGluZ0RvbWFpbi5pc1JlYWRPbmx5KHJlc291cmNlKSkgeworCQkJCQkJCXRyeSB7CisJCQkJCQkJCWxvbmcgdGltZVN0YW1wID0gcmVzb3VyY2UuZ2V0VGltZVN0YW1wKCk7CisJCQkJCQkJCXJlc291cmNlLnNhdmUoc2F2ZU9wdGlvbnMpOworCQkJCQkJCQlpZiAocmVzb3VyY2UuZ2V0VGltZVN0YW1wKCkgIT0gdGltZVN0YW1wKSB7CisJCQkJCQkJCQlzYXZlZFJlc291cmNlcy5hZGQocmVzb3VyY2UpOworCQkJCQkJCQl9CisJCQkJCQkJfQorCQkJCQkJCWNhdGNoIChFeGNlcHRpb24gZXhjZXB0aW9uKSB7CisJCQkJCQkJCXJlc291cmNlVG9EaWFnbm9zdGljTWFwLnB1dChyZXNvdXJjZSwgYW5hbHl6ZVJlc291cmNlUHJvYmxlbXMocmVzb3VyY2UsIGV4Y2VwdGlvbikpOworCQkJCQkJCX0KKwkJCQkJCQlmaXJzdCA9IGZhbHNlOworCQkJCQkJfQorCQkJCQl9CisJCQkJfQorCQkJfTsKKworCQl1cGRhdGVQcm9ibGVtSW5kaWNhdGlvbiA9IGZhbHNlOworCQl0cnkgeworCQkJLy8gVGhpcyBydW5zIHRoZSBvcHRpb25zLCBhbmQgc2hvd3MgcHJvZ3Jlc3MuCisJCQkvLworCQkJbmV3IFByb2dyZXNzTW9uaXRvckRpYWxvZyhnZXRTaXRlKCkuZ2V0U2hlbGwoKSkucnVuKHRydWUsIGZhbHNlLCBvcGVyYXRpb24pOworCisJCQkvLyBSZWZyZXNoIHRoZSBuZWNlc3Nhcnkgc3RhdGUuCisJCQkvLworCQkJKChCYXNpY0NvbW1hbmRTdGFjayllZGl0aW5nRG9tYWluLmdldENvbW1hbmRTdGFjaygpKS5zYXZlSXNEb25lKCk7CisJCQlmaXJlUHJvcGVydHlDaGFuZ2UoSUVkaXRvclBhcnQuUFJPUF9ESVJUWSk7CisJCX0KKwkJY2F0Y2ggKEV4Y2VwdGlvbiBleGNlcHRpb24pIHsKKwkJCS8vIFNvbWV0aGluZyB3ZW50IHdyb25nIHRoYXQgc2hvdWxkbid0LgorCQkJLy8KKwkJCU11bHRpcG9wdWxhdGlvbkVkaXRvclBsdWdpbi5JTlNUQU5DRS5sb2coZXhjZXB0aW9uKTsKKwkJfQorCQl1cGRhdGVQcm9ibGVtSW5kaWNhdGlvbiA9IHRydWU7CisJCXVwZGF0ZVByb2JsZW1JbmRpY2F0aW9uKCk7CisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIHdoZXRoZXIgc29tZXRoaW5nIGhhcyBiZWVuIHBlcnNpc3RlZCB0byB0aGUgVVJJIG9mIHRoZSBzcGVjaWZpZWQgcmVzb3VyY2UuCisJICogVGhlIGltcGxlbWVudGF0aW9uIHVzZXMgdGhlIFVSSSBjb252ZXJ0ZXIgZnJvbSB0aGUgZWRpdG9yJ3MgcmVzb3VyY2Ugc2V0IHRvIHRyeSB0byBvcGVuIGFuIGlucHV0IHN0cmVhbS4gCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIGJvb2xlYW4gaXNQZXJzaXN0ZWQoUmVzb3VyY2UgcmVzb3VyY2UpIHsKKwkJYm9vbGVhbiByZXN1bHQgPSBmYWxzZTsKKwkJdHJ5IHsKKwkJCUlucHV0U3RyZWFtIHN0cmVhbSA9IGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKS5nZXRVUklDb252ZXJ0ZXIoKS5jcmVhdGVJbnB1dFN0cmVhbShyZXNvdXJjZS5nZXRVUkkoKSk7CisJCQlpZiAoc3RyZWFtICE9IG51bGwpIHsKKwkJCQlyZXN1bHQgPSB0cnVlOworCQkJCXN0cmVhbS5jbG9zZSgpOworCQkJfQorCQl9CisJCWNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7CisJCQkvLyBJZ25vcmUKKwkJfQorCQlyZXR1cm4gcmVzdWx0OworCX0KKworCS8qKgorCSAqIFRoaXMgYWx3YXlzIHJldHVybnMgdHJ1ZSBiZWNhdXNlIGl0IGlzIG5vdCBjdXJyZW50bHkgc3VwcG9ydGVkLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBib29sZWFuIGlzU2F2ZUFzQWxsb3dlZCgpIHsKKwkJcmV0dXJuIHRydWU7CisJfQorCisJLyoqCisJICogVGhpcyBhbHNvIGNoYW5nZXMgdGhlIGVkaXRvcidzIGlucHV0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGRvU2F2ZUFzKCkgeworCQlTYXZlQXNEaWFsb2cgc2F2ZUFzRGlhbG9nID0gbmV3IFNhdmVBc0RpYWxvZyhnZXRTaXRlKCkuZ2V0U2hlbGwoKSk7CisJCXNhdmVBc0RpYWxvZy5vcGVuKCk7CisJCUlQYXRoIHBhdGggPSBzYXZlQXNEaWFsb2cuZ2V0UmVzdWx0KCk7CisJCWlmIChwYXRoICE9IG51bGwpIHsKKwkJCUlGaWxlIGZpbGUgPSBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuZ2V0Um9vdCgpLmdldEZpbGUocGF0aCk7CisJCQlpZiAoZmlsZSAhPSBudWxsKSB7CisJCQkJZG9TYXZlQXMoVVJJLmNyZWF0ZVBsYXRmb3JtUmVzb3VyY2VVUkkoZmlsZS5nZXRGdWxsUGF0aCgpLnRvU3RyaW5nKCksIHRydWUpLCBuZXcgRmlsZUVkaXRvcklucHV0KGZpbGUpKTsKKwkJCX0KKwkJfQorCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIGRvU2F2ZUFzKFVSSSB1cmksIElFZGl0b3JJbnB1dCBlZGl0b3JJbnB1dCkgeworCQkoZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpLmdldFJlc291cmNlcygpLmdldCgwKSkuc2V0VVJJKHVyaSk7CisJCXNldElucHV0V2l0aE5vdGlmeShlZGl0b3JJbnB1dCk7CisJCXNldFBhcnROYW1lKGVkaXRvcklucHV0LmdldE5hbWUoKSk7CisJCUlQcm9ncmVzc01vbml0b3IgcHJvZ3Jlc3NNb25pdG9yID0KKwkJCWdldEFjdGlvbkJhcnMoKS5nZXRTdGF0dXNMaW5lTWFuYWdlcigpICE9IG51bGwgPworCQkJCWdldEFjdGlvbkJhcnMoKS5nZXRTdGF0dXNMaW5lTWFuYWdlcigpLmdldFByb2dyZXNzTW9uaXRvcigpIDoKKwkJCQluZXcgTnVsbFByb2dyZXNzTW9uaXRvcigpOworCQlkb1NhdmUocHJvZ3Jlc3NNb25pdG9yKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBnb3RvTWFya2VyKElNYXJrZXIgbWFya2VyKSB7CisJCXRyeSB7CisJCQlpZiAobWFya2VyLmdldFR5cGUoKS5lcXVhbHMoRVZhbGlkYXRvci5NQVJLRVIpKSB7CisJCQkJU3RyaW5nIHVyaUF0dHJpYnV0ZSA9IG1hcmtlci5nZXRBdHRyaWJ1dGUoRVZhbGlkYXRvci5VUklfQVRUUklCVVRFLCBudWxsKTsKKwkJCQlpZiAodXJpQXR0cmlidXRlICE9IG51bGwpIHsKKwkJCQkJVVJJIHVyaSA9IFVSSS5jcmVhdGVVUkkodXJpQXR0cmlidXRlKTsKKwkJCQkJRU9iamVjdCBlT2JqZWN0ID0gZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpLmdldEVPYmplY3QodXJpLCB0cnVlKTsKKwkJCQkJaWYgKGVPYmplY3QgIT0gbnVsbCkgeworCQkJCQkgIHNldFNlbGVjdGlvblRvVmlld2VyKENvbGxlY3Rpb25zLnNpbmdsZXRvbihlZGl0aW5nRG9tYWluLmdldFdyYXBwZXIoZU9iamVjdCkpKTsKKwkJCQkJfQorCQkJCX0KKwkJCX0KKwkJfQorCQljYXRjaCAoQ29yZUV4Y2VwdGlvbiBleGNlcHRpb24pIHsKKwkJCU11bHRpcG9wdWxhdGlvbkVkaXRvclBsdWdpbi5JTlNUQU5DRS5sb2coZXhjZXB0aW9uKTsKKwkJfQorCX0KKworCS8qKgorCSAqIFRoaXMgaXMgY2FsbGVkIGR1cmluZyBzdGFydHVwLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGluaXQoSUVkaXRvclNpdGUgc2l0ZSwgSUVkaXRvcklucHV0IGVkaXRvcklucHV0KSB7CisJCXNldFNpdGUoc2l0ZSk7CisJCXNldElucHV0V2l0aE5vdGlmeShlZGl0b3JJbnB1dCk7CisJCXNldFBhcnROYW1lKGVkaXRvcklucHV0LmdldE5hbWUoKSk7CisJCXNpdGUuc2V0U2VsZWN0aW9uUHJvdmlkZXIodGhpcyk7CisJCXNpdGUuZ2V0UGFnZSgpLmFkZFBhcnRMaXN0ZW5lcihwYXJ0TGlzdGVuZXIpOworCQlSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuYWRkUmVzb3VyY2VDaGFuZ2VMaXN0ZW5lcihyZXNvdXJjZUNoYW5nZUxpc3RlbmVyLCBJUmVzb3VyY2VDaGFuZ2VFdmVudC5QT1NUX0NIQU5HRSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgc2V0Rm9jdXMoKSB7CisJCWlmIChjdXJyZW50Vmlld2VyUGFuZSAhPSBudWxsKSB7CisJCQljdXJyZW50Vmlld2VyUGFuZS5zZXRGb2N1cygpOworCQl9CisJCWVsc2UgeworCQkJZ2V0Q29udHJvbChnZXRBY3RpdmVQYWdlKCkpLnNldEZvY3VzKCk7CisJCX0KKwl9CisKKwkvKioKKwkgKiBUaGlzIGltcGxlbWVudHMge0BsaW5rIG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvblByb3ZpZGVyfS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBhZGRTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIoSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lciBsaXN0ZW5lcikgeworCQlzZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXJzLmFkZChsaXN0ZW5lcik7CisJfQorCisJLyoqCisJICogVGhpcyBpbXBsZW1lbnRzIHtAbGluayBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb25Qcm92aWRlcn0uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgcmVtb3ZlU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyKElTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIgbGlzdGVuZXIpIHsKKwkJc2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVycy5yZW1vdmUobGlzdGVuZXIpOworCX0KKworCS8qKgorCSAqIFRoaXMgaW1wbGVtZW50cyB7QGxpbmsgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uUHJvdmlkZXJ9IHRvIHJldHVybiB0aGlzIGVkaXRvcidzIG92ZXJhbGwgc2VsZWN0aW9uLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBJU2VsZWN0aW9uIGdldFNlbGVjdGlvbigpIHsKKwkJcmV0dXJuIGVkaXRvclNlbGVjdGlvbjsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGltcGxlbWVudHMge0BsaW5rIG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvblByb3ZpZGVyfSB0byBzZXQgdGhpcyBlZGl0b3IncyBvdmVyYWxsIHNlbGVjdGlvbi4KKwkgKiBDYWxsaW5nIHRoaXMgcmVzdWx0IHdpbGwgbm90aWZ5IHRoZSBsaXN0ZW5lcnMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgc2V0U2VsZWN0aW9uKElTZWxlY3Rpb24gc2VsZWN0aW9uKSB7CisJCWVkaXRvclNlbGVjdGlvbiA9IHNlbGVjdGlvbjsKKworCQlmb3IgKElTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIgbGlzdGVuZXIgOiBzZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXJzKSB7CisJCQlsaXN0ZW5lci5zZWxlY3Rpb25DaGFuZ2VkKG5ldyBTZWxlY3Rpb25DaGFuZ2VkRXZlbnQodGhpcywgc2VsZWN0aW9uKSk7CisJCX0KKwkJc2V0U3RhdHVzTGluZU1hbmFnZXIoc2VsZWN0aW9uKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRTdGF0dXNMaW5lTWFuYWdlcihJU2VsZWN0aW9uIHNlbGVjdGlvbikgeworCQlJU3RhdHVzTGluZU1hbmFnZXIgc3RhdHVzTGluZU1hbmFnZXIgPSBjdXJyZW50Vmlld2VyICE9IG51bGwgJiYgY3VycmVudFZpZXdlciA9PSBjb250ZW50T3V0bGluZVZpZXdlciA/CisJCQljb250ZW50T3V0bGluZVN0YXR1c0xpbmVNYW5hZ2VyIDogZ2V0QWN0aW9uQmFycygpLmdldFN0YXR1c0xpbmVNYW5hZ2VyKCk7CisKKwkJaWYgKHN0YXR1c0xpbmVNYW5hZ2VyICE9IG51bGwpIHsKKwkJCWlmIChzZWxlY3Rpb24gaW5zdGFuY2VvZiBJU3RydWN0dXJlZFNlbGVjdGlvbikgeworCQkJCUNvbGxlY3Rpb248Pz4gY29sbGVjdGlvbiA9ICgoSVN0cnVjdHVyZWRTZWxlY3Rpb24pc2VsZWN0aW9uKS50b0xpc3QoKTsKKwkJCQlzd2l0Y2ggKGNvbGxlY3Rpb24uc2l6ZSgpKSB7CisJCQkJCWNhc2UgMDogeworCQkJCQkJc3RhdHVzTGluZU1hbmFnZXIuc2V0TWVzc2FnZShnZXRTdHJpbmcoIl9VSV9Ob09iamVjdFNlbGVjdGVkIikpOworCQkJCQkJYnJlYWs7CisJCQkJCX0KKwkJCQkJY2FzZSAxOiB7CisJCQkJCQlTdHJpbmcgdGV4dCA9IG5ldyBBZGFwdGVyRmFjdG9yeUl0ZW1EZWxlZ2F0b3IoYWRhcHRlckZhY3RvcnkpLmdldFRleHQoY29sbGVjdGlvbi5pdGVyYXRvcigpLm5leHQoKSk7CisJCQkJCQlzdGF0dXNMaW5lTWFuYWdlci5zZXRNZXNzYWdlKGdldFN0cmluZygiX1VJX1NpbmdsZU9iamVjdFNlbGVjdGVkIiwgdGV4dCkpOworCQkJCQkJYnJlYWs7CisJCQkJCX0KKwkJCQkJZGVmYXVsdDogeworCQkJCQkJc3RhdHVzTGluZU1hbmFnZXIuc2V0TWVzc2FnZShnZXRTdHJpbmcoIl9VSV9NdWx0aU9iamVjdFNlbGVjdGVkIiwgSW50ZWdlci50b1N0cmluZyhjb2xsZWN0aW9uLnNpemUoKSkpKTsKKwkJCQkJCWJyZWFrOworCQkJCQl9CisJCQkJfQorCQkJfQorCQkJZWxzZSB7CisJCQkJc3RhdHVzTGluZU1hbmFnZXIuc2V0TWVzc2FnZSgiIik7CisJCQl9CisJCX0KKwl9CisKKwkvKioKKwkgKiBUaGlzIGxvb2tzIHVwIGEgc3RyaW5nIGluIHRoZSBwbHVnaW4ncyBwbHVnaW4ucHJvcGVydGllcyBmaWxlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByaXZhdGUgc3RhdGljIFN0cmluZyBnZXRTdHJpbmcoU3RyaW5nIGtleSkgeworCQlyZXR1cm4gTXVsdGlwb3B1bGF0aW9uRWRpdG9yUGx1Z2luLklOU1RBTkNFLmdldFN0cmluZyhrZXkpOworCX0KKworCS8qKgorCSAqIFRoaXMgbG9va3MgdXAgYSBzdHJpbmcgaW4gcGx1Z2luLnByb3BlcnRpZXMsIG1ha2luZyBhIHN1YnN0aXR1dGlvbi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcml2YXRlIHN0YXRpYyBTdHJpbmcgZ2V0U3RyaW5nKFN0cmluZyBrZXksIE9iamVjdCBzMSkgeworCQlyZXR1cm4gTXVsdGlwb3B1bGF0aW9uRWRpdG9yUGx1Z2luLklOU1RBTkNFLmdldFN0cmluZyhrZXksIG5ldyBPYmplY3QgW10geyBzMSB9KTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGltcGxlbWVudHMge0BsaW5rIG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JTWVudUxpc3RlbmVyfSB0byBoZWxwIGZpbGwgdGhlIGNvbnRleHQgbWVudXMgd2l0aCBjb250cmlidXRpb25zIGZyb20gdGhlIEVkaXQgbWVudS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBtZW51QWJvdXRUb1Nob3coSU1lbnVNYW5hZ2VyIG1lbnVNYW5hZ2VyKSB7CisJCSgoSU1lbnVMaXN0ZW5lcilnZXRFZGl0b3JTaXRlKCkuZ2V0QWN0aW9uQmFyQ29udHJpYnV0b3IoKSkubWVudUFib3V0VG9TaG93KG1lbnVNYW5hZ2VyKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRWRpdGluZ0RvbWFpbkFjdGlvbkJhckNvbnRyaWJ1dG9yIGdldEFjdGlvbkJhckNvbnRyaWJ1dG9yKCkgeworCQlyZXR1cm4gKEVkaXRpbmdEb21haW5BY3Rpb25CYXJDb250cmlidXRvcilnZXRFZGl0b3JTaXRlKCkuZ2V0QWN0aW9uQmFyQ29udHJpYnV0b3IoKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgSUFjdGlvbkJhcnMgZ2V0QWN0aW9uQmFycygpIHsKKwkJcmV0dXJuIGdldEFjdGlvbkJhckNvbnRyaWJ1dG9yKCkuZ2V0QWN0aW9uQmFycygpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBBZGFwdGVyRmFjdG9yeSBnZXRBZGFwdGVyRmFjdG9yeSgpIHsKKwkJcmV0dXJuIGFkYXB0ZXJGYWN0b3J5OworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGRpc3Bvc2UoKSB7CisJCXVwZGF0ZVByb2JsZW1JbmRpY2F0aW9uID0gZmFsc2U7CisKKwkJUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLnJlbW92ZVJlc291cmNlQ2hhbmdlTGlzdGVuZXIocmVzb3VyY2VDaGFuZ2VMaXN0ZW5lcik7CisKKwkJZ2V0U2l0ZSgpLmdldFBhZ2UoKS5yZW1vdmVQYXJ0TGlzdGVuZXIocGFydExpc3RlbmVyKTsKKworCQlhZGFwdGVyRmFjdG9yeS5kaXNwb3NlKCk7CisKKwkJaWYgKGdldEFjdGlvbkJhckNvbnRyaWJ1dG9yKCkuZ2V0QWN0aXZlRWRpdG9yKCkgPT0gdGhpcykgeworCQkJZ2V0QWN0aW9uQmFyQ29udHJpYnV0b3IoKS5zZXRBY3RpdmVFZGl0b3IobnVsbCk7CisJCX0KKworCQlpZiAocHJvcGVydHlTaGVldFBhZ2UgIT0gbnVsbCkgeworCQkJcHJvcGVydHlTaGVldFBhZ2UuZGlzcG9zZSgpOworCQl9CisKKwkJaWYgKGNvbnRlbnRPdXRsaW5lUGFnZSAhPSBudWxsKSB7CisJCQljb250ZW50T3V0bGluZVBhZ2UuZGlzcG9zZSgpOworCQl9CisKKwkJc3VwZXIuZGlzcG9zZSgpOworCX0KKworCS8qKgorCSAqIFJldHVybnMgd2hldGhlciB0aGUgb3V0bGluZSB2aWV3IHNob3VsZCBiZSBwcmVzZW50ZWQgdG8gdGhlIHVzZXIuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIGJvb2xlYW4gc2hvd091dGxpbmVWaWV3KCkgeworCQlyZXR1cm4gdHJ1ZTsKKwl9Cit9CmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy5tdWx0aXBvcHVsYXRpb24vc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9tdWx0aXBvcHVsYXRpb24vcHJlc2VudGF0aW9uL011bHRpcG9wdWxhdGlvbkVkaXRvclBsdWdpbi5qYXZhIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMubXVsdGlwb3B1bGF0aW9uL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvbXVsdGlwb3B1bGF0aW9uL3ByZXNlbnRhdGlvbi9NdWx0aXBvcHVsYXRpb25FZGl0b3JQbHVnaW4uamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNmJiYWQzCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMubXVsdGlwb3B1bGF0aW9uL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvbXVsdGlwb3B1bGF0aW9uL3ByZXNlbnRhdGlvbi9NdWx0aXBvcHVsYXRpb25FZGl0b3JQbHVnaW4uamF2YQpAQCAtMCwwICsxLDExOCBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMubXVsdGlwb3B1bGF0aW9uLnByZXNlbnRhdGlvbjsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAxMCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLkVNRlBsdWdpbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnVpLkVjbGlwc2VVSVBsdWdpbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuUmVzb3VyY2VMb2NhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5wcm92aWRlci5FY29yZUVkaXRQbHVnaW47CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5wcm92aWRlci5Db3JlRWRpdFBsdWdpbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmVkZ2VzLnByb3ZpZGVyLkRlZmluaXRpb25zRWRpdFBsdWdpbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQucHJvdmlkZXIuRGlzZWFzZW1vZGVsc0VkaXRQbHVnaW47CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLnByb3ZpZGVyLlN0YW5kYXJkRWRpdFBsdWdpbjsKK2ltcG9ydCBvcmcub3NnaS5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dDsKKworLyoqCisgKiBUaGlzIGlzIHRoZSBjZW50cmFsIHNpbmdsZXRvbiBmb3IgdGhlIE11bHRpcG9wdWxhdGlvbiBlZGl0b3IgcGx1Z2luLgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgZmluYWwgY2xhc3MgTXVsdGlwb3B1bGF0aW9uRWRpdG9yUGx1Z2luIGV4dGVuZHMgRU1GUGx1Z2luIHsKKwkvKioKKwkgKiBLZWVwIHRyYWNrIG9mIHRoZSBzaW5nbGV0b24uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBNdWx0aXBvcHVsYXRpb25FZGl0b3JQbHVnaW4gSU5TVEFOQ0UgPSBuZXcgTXVsdGlwb3B1bGF0aW9uRWRpdG9yUGx1Z2luKCk7CisJCisJLyoqCisJICogS2VlcCB0cmFjayBvZiB0aGUgc2luZ2xldG9uLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByaXZhdGUgc3RhdGljIEltcGxlbWVudGF0aW9uIHBsdWdpbjsKKworCS8qKgorCSAqIENyZWF0ZSB0aGUgaW5zdGFuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIE11bHRpcG9wdWxhdGlvbkVkaXRvclBsdWdpbigpIHsKKwkJc3VwZXIKKwkJCShuZXcgUmVzb3VyY2VMb2NhdG9yIFtdIHsKKwkJCQlEaXNlYXNlbW9kZWxzRWRpdFBsdWdpbi5JTlNUQU5DRSwKKwkJCQlDb3JlRWRpdFBsdWdpbi5JTlNUQU5DRSwKKwkJCQlFY29yZUVkaXRQbHVnaW4uSU5TVEFOQ0UsCisJCQkJRGVmaW5pdGlvbnNFZGl0UGx1Z2luLklOU1RBTkNFLAorCQkJCVN0YW5kYXJkRWRpdFBsdWdpbi5JTlNUQU5DRSwKKwkJCX0pOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIHNpbmdsZXRvbiBpbnN0YW5jZSBvZiB0aGUgRWNsaXBzZSBwbHVnaW4uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBzaW5nbGV0b24gaW5zdGFuY2UuCisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBSZXNvdXJjZUxvY2F0b3IgZ2V0UGx1Z2luUmVzb3VyY2VMb2NhdG9yKCkgeworCQlyZXR1cm4gcGx1Z2luOworCX0KKwkKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBzaW5nbGV0b24gaW5zdGFuY2Ugb2YgdGhlIEVjbGlwc2UgcGx1Z2luLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgc2luZ2xldG9uIGluc3RhbmNlLgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgc3RhdGljIEltcGxlbWVudGF0aW9uIGdldFBsdWdpbigpIHsKKwkJcmV0dXJuIHBsdWdpbjsKKwl9CisJCisJLyoqCisJICogVGhlIGFjdHVhbCBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgRWNsaXBzZSA8Yj5QbHVnaW48L2I+LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBzdGF0aWMgY2xhc3MgSW1wbGVtZW50YXRpb24gZXh0ZW5kcyBFY2xpcHNlVUlQbHVnaW4geworCQkvKioKKwkJICogQ3JlYXRlcyBhbiBpbnN0YW5jZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCXB1YmxpYyBJbXBsZW1lbnRhdGlvbigpIHsKKwkJCXN1cGVyKCk7CisJCisJCQkvLyBSZW1lbWJlciB0aGUgc3RhdGljIGluc3RhbmNlLgorCQkJLy8KKwkJCXBsdWdpbiA9IHRoaXM7CisJCX0KKwkJCisJCS8qKgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnVpLnBsdWdpbi5BYnN0cmFjdFVJUGx1Z2luI3N0YXJ0KG9yZy5vc2dpLmZyYW1ld29yay5CdW5kbGVDb250ZXh0KQorCQkgKi8KKwkJQE92ZXJyaWRlCisJCXB1YmxpYyB2b2lkIHN0YXJ0KEJ1bmRsZUNvbnRleHQgY29udGV4dCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCQlzdXBlci5zdGFydChjb250ZXh0KTsKKwkJCW5ldyBNdWx0aVBvcHVsYXRpb25EaXNlYXNlTW9kZWxQcm9wZXJ0eUVkaXRvckFkYXB0ZXJGYWN0b3J5KCk7CisJCX0KKwl9CisKK30KZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzLm11bHRpcG9wdWxhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL211bHRpcG9wdWxhdGlvbi9wcmVzZW50YXRpb24vTXVsdGlwb3B1bGF0aW9uTW9kZWxXaXphcmQuamF2YSBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzLm11bHRpcG9wdWxhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL211bHRpcG9wdWxhdGlvbi9wcmVzZW50YXRpb24vTXVsdGlwb3B1bGF0aW9uTW9kZWxXaXphcmQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNzZmNjEwCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMubXVsdGlwb3B1bGF0aW9uL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvbXVsdGlwb3B1bGF0aW9uL3ByZXNlbnRhdGlvbi9NdWx0aXBvcHVsYXRpb25Nb2RlbFdpemFyZC5qYXZhCkBAIC0wLDAgKzEsNjExIEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5tdWx0aXBvcHVsYXRpb24ucHJlc2VudGF0aW9uOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDEwIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCitpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlzOworaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOworaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uczsKK2ltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuTWFwOworaW1wb3J0IGphdmEudXRpbC5NaXNzaW5nUmVzb3VyY2VFeGNlcHRpb247CitpbXBvcnQgamF2YS51dGlsLlN0cmluZ1Rva2VuaXplcjsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklDb250YWluZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUZpbGU7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUZvbGRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUmVzb3VyY2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuUmVzb3VyY2VzUGx1Z2luOworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUHJvZ3Jlc3NNb25pdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QYXRoOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24uQ29tbW9uUGx1Z2luOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5VUkk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzczsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzaWZpZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3Q7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnJlc291cmNlLlJlc291cmNlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5yZXNvdXJjZS5SZXNvdXJjZVNldDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUucmVzb3VyY2UuaW1wbC5SZXNvdXJjZVNldEltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnhtaS5YTUxSZXNvdXJjZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5wcm92aWRlci5FeHRlbmRlZEltYWdlUmVnaXN0cnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuZGlhbG9ncy5NZXNzYWdlRGlhbG9nOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTdHJ1Y3R1cmVkU2VsZWN0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuU3RydWN0dXJlZFNlbGVjdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS53aXphcmQuV2l6YXJkOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLndpemFyZC5XaXphcmRQYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5tdWx0aXBvcHVsYXRpb24uTXVsdGlwb3B1bGF0aW9uRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMubXVsdGlwb3B1bGF0aW9uLk11bHRpcG9wdWxhdGlvblBhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLm11bHRpcG9wdWxhdGlvbi5wcm92aWRlci5NdWx0aXBvcHVsYXRpb25FZGl0UGx1Z2luOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5TV1Q7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5Nb2RpZnlFdmVudDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLk1vZGlmeUxpc3RlbmVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5sYXlvdXQuR3JpZERhdGE7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5HcmlkTGF5b3V0OworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbWJvOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5MYWJlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5JTmV3V2l6YXJkOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2g7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaFBhZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaFBhcnQ7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaFdpbmRvdzsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5QYXJ0SW5pdEV4Y2VwdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5hY3Rpb25zLldvcmtzcGFjZU1vZGlmeU9wZXJhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5kaWFsb2dzLldpemFyZE5ld0ZpbGVDcmVhdGlvblBhZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkucGFydC5GaWxlRWRpdG9ySW5wdXQ7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkucGFydC5JU2V0U2VsZWN0aW9uVGFyZ2V0OworCisKKy8qKgorICogVGhpcyBpcyBhIHNpbXBsZSB3aXphcmQgZm9yIGNyZWF0aW5nIGEgbmV3IG1vZGVsIGZpbGUuCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBNdWx0aXBvcHVsYXRpb25Nb2RlbFdpemFyZCBleHRlbmRzIFdpemFyZCBpbXBsZW1lbnRzIElOZXdXaXphcmQgeworCS8qKgorCSAqIFRoZSBzdXBwb3J0ZWQgZXh0ZW5zaW9ucyBmb3IgY3JlYXRlZCBmaWxlcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIExpc3Q8U3RyaW5nPiBGSUxFX0VYVEVOU0lPTlMgPQorCQlDb2xsZWN0aW9ucy51bm1vZGlmaWFibGVMaXN0KEFycmF5cy5hc0xpc3QoTXVsdGlwb3B1bGF0aW9uRWRpdG9yUGx1Z2luLklOU1RBTkNFLmdldFN0cmluZygiX1VJX011bHRpcG9wdWxhdGlvbkVkaXRvckZpbGVuYW1lRXh0ZW5zaW9ucyIpLnNwbGl0KCJcXHMqLFxccyoiKSkpOworCisJLyoqCisJICogQSBmb3JtYXR0ZWQgbGlzdCBvZiBzdXBwb3J0ZWQgZmlsZSBleHRlbnNpb25zLCBzdWl0YWJsZSBmb3IgZGlzcGxheS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBGT1JNQVRURURfRklMRV9FWFRFTlNJT05TID0KKwkJTXVsdGlwb3B1bGF0aW9uRWRpdG9yUGx1Z2luLklOU1RBTkNFLmdldFN0cmluZygiX1VJX011bHRpcG9wdWxhdGlvbkVkaXRvckZpbGVuYW1lRXh0ZW5zaW9ucyIpLnJlcGxhY2VBbGwoIlxccyosXFxzKiIsICIsICIpOworCisJLyoqCisJICogVGhpcyBjYWNoZXMgYW4gaW5zdGFuY2Ugb2YgdGhlIG1vZGVsIHBhY2thZ2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIE11bHRpcG9wdWxhdGlvblBhY2thZ2UgbXVsdGlwb3B1bGF0aW9uUGFja2FnZSA9IE11bHRpcG9wdWxhdGlvblBhY2thZ2UuZUlOU1RBTkNFOworCisJLyoqCisJICogVGhpcyBjYWNoZXMgYW4gaW5zdGFuY2Ugb2YgdGhlIG1vZGVsIGZhY3RvcnkuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIE11bHRpcG9wdWxhdGlvbkZhY3RvcnkgbXVsdGlwb3B1bGF0aW9uRmFjdG9yeSA9IG11bHRpcG9wdWxhdGlvblBhY2thZ2UuZ2V0TXVsdGlwb3B1bGF0aW9uRmFjdG9yeSgpOworCisJLyoqCisJICogVGhpcyBpcyB0aGUgZmlsZSBjcmVhdGlvbiBwYWdlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBNdWx0aXBvcHVsYXRpb25Nb2RlbFdpemFyZE5ld0ZpbGVDcmVhdGlvblBhZ2UgbmV3RmlsZUNyZWF0aW9uUGFnZTsKKworCS8qKgorCSAqIFRoaXMgaXMgdGhlIGluaXRpYWwgb2JqZWN0IGNyZWF0aW9uIHBhZ2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIE11bHRpcG9wdWxhdGlvbk1vZGVsV2l6YXJkSW5pdGlhbE9iamVjdENyZWF0aW9uUGFnZSBpbml0aWFsT2JqZWN0Q3JlYXRpb25QYWdlOworCisJLyoqCisJICogUmVtZW1iZXIgdGhlIHNlbGVjdGlvbiBkdXJpbmcgaW5pdGlhbGl6YXRpb24gZm9yIHBvcHVsYXRpbmcgdGhlIGRlZmF1bHQgY29udGFpbmVyLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBJU3RydWN0dXJlZFNlbGVjdGlvbiBzZWxlY3Rpb247CisKKwkvKioKKwkgKiBSZW1lbWJlciB0aGUgd29ya2JlbmNoIGR1cmluZyBpbml0aWFsaXphdGlvbi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgSVdvcmtiZW5jaCB3b3JrYmVuY2g7CisKKwkvKioKKwkgKiBDYWNoZXMgdGhlIG5hbWVzIG9mIHRoZSB0eXBlcyB0aGF0IGNhbiBiZSBjcmVhdGVkIGFzIHRoZSByb290IG9iamVjdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgTGlzdDxTdHJpbmc+IGluaXRpYWxPYmplY3ROYW1lczsKKworCS8qKgorCSAqIFRoaXMganVzdCByZWNvcmRzIHRoZSBpbmZvcm1hdGlvbi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBpbml0KElXb3JrYmVuY2ggd29ya2JlbmNoLCBJU3RydWN0dXJlZFNlbGVjdGlvbiBzZWxlY3Rpb24pIHsKKwkJdGhpcy53b3JrYmVuY2ggPSB3b3JrYmVuY2g7CisJCXRoaXMuc2VsZWN0aW9uID0gc2VsZWN0aW9uOworCQlzZXRXaW5kb3dUaXRsZShNdWx0aXBvcHVsYXRpb25FZGl0b3JQbHVnaW4uSU5TVEFOQ0UuZ2V0U3RyaW5nKCJfVUlfV2l6YXJkX2xhYmVsIikpOworCQlzZXREZWZhdWx0UGFnZUltYWdlRGVzY3JpcHRvcihFeHRlbmRlZEltYWdlUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0SW1hZ2VEZXNjcmlwdG9yKE11bHRpcG9wdWxhdGlvbkVkaXRvclBsdWdpbi5JTlNUQU5DRS5nZXRJbWFnZSgiZnVsbC93aXpiYW4vTmV3TXVsdGlwb3B1bGF0aW9uIikpKTsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBuYW1lcyBvZiB0aGUgdHlwZXMgdGhhdCBjYW4gYmUgY3JlYXRlZCBhcyB0aGUgcm9vdCBvYmplY3QuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIENvbGxlY3Rpb248U3RyaW5nPiBnZXRJbml0aWFsT2JqZWN0TmFtZXMoKSB7CisJCWlmIChpbml0aWFsT2JqZWN0TmFtZXMgPT0gbnVsbCkgeworCQkJaW5pdGlhbE9iamVjdE5hbWVzID0gbmV3IEFycmF5TGlzdDxTdHJpbmc+KCk7CisJCQlmb3IgKEVDbGFzc2lmaWVyIGVDbGFzc2lmaWVyIDogbXVsdGlwb3B1bGF0aW9uUGFja2FnZS5nZXRFQ2xhc3NpZmllcnMoKSkgeworCQkJCWlmIChlQ2xhc3NpZmllciBpbnN0YW5jZW9mIEVDbGFzcykgeworCQkJCQlFQ2xhc3MgZUNsYXNzID0gKEVDbGFzcyllQ2xhc3NpZmllcjsKKwkJCQkJaWYgKCFlQ2xhc3MuaXNBYnN0cmFjdCgpKSB7CisJCQkJCQlpbml0aWFsT2JqZWN0TmFtZXMuYWRkKGVDbGFzcy5nZXROYW1lKCkpOworCQkJCQl9CisJCQkJfQorCQkJfQorCQkJQ29sbGVjdGlvbnMuc29ydChpbml0aWFsT2JqZWN0TmFtZXMsIENvbW1vblBsdWdpbi5JTlNUQU5DRS5nZXRDb21wYXJhdG9yKCkpOworCQl9CisJCXJldHVybiBpbml0aWFsT2JqZWN0TmFtZXM7CisJfQorCisJLyoqCisJICogQ3JlYXRlIGEgbmV3IG1vZGVsLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBFT2JqZWN0IGNyZWF0ZUluaXRpYWxNb2RlbCgpIHsKKwkJRUNsYXNzIGVDbGFzcyA9IChFQ2xhc3MpbXVsdGlwb3B1bGF0aW9uUGFja2FnZS5nZXRFQ2xhc3NpZmllcihpbml0aWFsT2JqZWN0Q3JlYXRpb25QYWdlLmdldEluaXRpYWxPYmplY3ROYW1lKCkpOworCQlFT2JqZWN0IHJvb3RPYmplY3QgPSBtdWx0aXBvcHVsYXRpb25GYWN0b3J5LmNyZWF0ZShlQ2xhc3MpOworCQlyZXR1cm4gcm9vdE9iamVjdDsKKwl9CisKKwkvKioKKwkgKiBEbyB0aGUgd29yayBhZnRlciBldmVyeXRoaW5nIGlzIHNwZWNpZmllZC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgYm9vbGVhbiBwZXJmb3JtRmluaXNoKCkgeworCQl0cnkgeworCQkJLy8gUmVtZW1iZXIgdGhlIGZpbGUuCisJCQkvLworCQkJZmluYWwgSUZpbGUgbW9kZWxGaWxlID0gZ2V0TW9kZWxGaWxlKCk7CisKKwkJCS8vIERvIHRoZSB3b3JrIHdpdGhpbiBhbiBvcGVyYXRpb24uCisJCQkvLworCQkJV29ya3NwYWNlTW9kaWZ5T3BlcmF0aW9uIG9wZXJhdGlvbiA9CisJCQkJbmV3IFdvcmtzcGFjZU1vZGlmeU9wZXJhdGlvbigpIHsKKwkJCQkJQE92ZXJyaWRlCisJCQkJCXByb3RlY3RlZCB2b2lkIGV4ZWN1dGUoSVByb2dyZXNzTW9uaXRvciBwcm9ncmVzc01vbml0b3IpIHsKKwkJCQkJCXRyeSB7CisJCQkJCQkJLy8gQ3JlYXRlIGEgcmVzb3VyY2Ugc2V0CisJCQkJCQkJLy8KKwkJCQkJCQlSZXNvdXJjZVNldCByZXNvdXJjZVNldCA9IG5ldyBSZXNvdXJjZVNldEltcGwoKTsKKworCQkJCQkJCS8vIEdldCB0aGUgVVJJIG9mIHRoZSBtb2RlbCBmaWxlLgorCQkJCQkJCS8vCisJCQkJCQkJVVJJIGZpbGVVUkkgPSBVUkkuY3JlYXRlUGxhdGZvcm1SZXNvdXJjZVVSSShtb2RlbEZpbGUuZ2V0RnVsbFBhdGgoKS50b1N0cmluZygpLCB0cnVlKTsKKworCQkJCQkJCS8vIENyZWF0ZSBhIHJlc291cmNlIGZvciB0aGlzIGZpbGUuCisJCQkJCQkJLy8KKwkJCQkJCQlSZXNvdXJjZSByZXNvdXJjZSA9IHJlc291cmNlU2V0LmNyZWF0ZVJlc291cmNlKGZpbGVVUkkpOworCisJCQkJCQkJLy8gQWRkIHRoZSBpbml0aWFsIG1vZGVsIG9iamVjdCB0byB0aGUgY29udGVudHMuCisJCQkJCQkJLy8KKwkJCQkJCQlFT2JqZWN0IHJvb3RPYmplY3QgPSBjcmVhdGVJbml0aWFsTW9kZWwoKTsKKwkJCQkJCQlpZiAocm9vdE9iamVjdCAhPSBudWxsKSB7CisJCQkJCQkJCXJlc291cmNlLmdldENvbnRlbnRzKCkuYWRkKHJvb3RPYmplY3QpOworCQkJCQkJCX0KKworCQkJCQkJCS8vIFNhdmUgdGhlIGNvbnRlbnRzIG9mIHRoZSByZXNvdXJjZSB0byB0aGUgZmlsZSBzeXN0ZW0uCisJCQkJCQkJLy8KKwkJCQkJCQlNYXA8T2JqZWN0LCBPYmplY3Q+IG9wdGlvbnMgPSBuZXcgSGFzaE1hcDxPYmplY3QsIE9iamVjdD4oKTsKKwkJCQkJCQlvcHRpb25zLnB1dChYTUxSZXNvdXJjZS5PUFRJT05fRU5DT0RJTkcsIGluaXRpYWxPYmplY3RDcmVhdGlvblBhZ2UuZ2V0RW5jb2RpbmcoKSk7CisJCQkJCQkJcmVzb3VyY2Uuc2F2ZShvcHRpb25zKTsKKwkJCQkJCX0KKwkJCQkJCWNhdGNoIChFeGNlcHRpb24gZXhjZXB0aW9uKSB7CisJCQkJCQkJTXVsdGlwb3B1bGF0aW9uRWRpdG9yUGx1Z2luLklOU1RBTkNFLmxvZyhleGNlcHRpb24pOworCQkJCQkJfQorCQkJCQkJZmluYWxseSB7CisJCQkJCQkJcHJvZ3Jlc3NNb25pdG9yLmRvbmUoKTsKKwkJCQkJCX0KKwkJCQkJfQorCQkJCX07CisKKwkJCWdldENvbnRhaW5lcigpLnJ1bihmYWxzZSwgZmFsc2UsIG9wZXJhdGlvbik7CisKKwkJCS8vIFNlbGVjdCB0aGUgbmV3IGZpbGUgcmVzb3VyY2UgaW4gdGhlIGN1cnJlbnQgdmlldy4KKwkJCS8vCisJCQlJV29ya2JlbmNoV2luZG93IHdvcmtiZW5jaFdpbmRvdyA9IHdvcmtiZW5jaC5nZXRBY3RpdmVXb3JrYmVuY2hXaW5kb3coKTsKKwkJCUlXb3JrYmVuY2hQYWdlIHBhZ2UgPSB3b3JrYmVuY2hXaW5kb3cuZ2V0QWN0aXZlUGFnZSgpOworCQkJZmluYWwgSVdvcmtiZW5jaFBhcnQgYWN0aXZlUGFydCA9IHBhZ2UuZ2V0QWN0aXZlUGFydCgpOworCQkJaWYgKGFjdGl2ZVBhcnQgaW5zdGFuY2VvZiBJU2V0U2VsZWN0aW9uVGFyZ2V0KSB7CisJCQkJZmluYWwgSVNlbGVjdGlvbiB0YXJnZXRTZWxlY3Rpb24gPSBuZXcgU3RydWN0dXJlZFNlbGVjdGlvbihtb2RlbEZpbGUpOworCQkJCWdldFNoZWxsKCkuZ2V0RGlzcGxheSgpLmFzeW5jRXhlYworCQkJCQkobmV3IFJ1bm5hYmxlKCkgeworCQkJCQkJIHB1YmxpYyB2b2lkIHJ1bigpIHsKKwkJCQkJCQkgKChJU2V0U2VsZWN0aW9uVGFyZ2V0KWFjdGl2ZVBhcnQpLnNlbGVjdFJldmVhbCh0YXJnZXRTZWxlY3Rpb24pOworCQkJCQkJIH0KKwkJCQkJIH0pOworCQkJfQorCisJCQkvLyBPcGVuIGFuIGVkaXRvciBvbiB0aGUgbmV3IGZpbGUuCisJCQkvLworCQkJdHJ5IHsKKwkJCQlwYWdlLm9wZW5FZGl0b3IKKwkJCQkJKG5ldyBGaWxlRWRpdG9ySW5wdXQobW9kZWxGaWxlKSwKKwkJCQkJIHdvcmtiZW5jaC5nZXRFZGl0b3JSZWdpc3RyeSgpLmdldERlZmF1bHRFZGl0b3IobW9kZWxGaWxlLmdldEZ1bGxQYXRoKCkudG9TdHJpbmcoKSkuZ2V0SWQoKSk7CQkJCQkgCSAKKwkJCX0KKwkJCWNhdGNoIChQYXJ0SW5pdEV4Y2VwdGlvbiBleGNlcHRpb24pIHsKKwkJCQlNZXNzYWdlRGlhbG9nLm9wZW5FcnJvcih3b3JrYmVuY2hXaW5kb3cuZ2V0U2hlbGwoKSwgTXVsdGlwb3B1bGF0aW9uRWRpdG9yUGx1Z2luLklOU1RBTkNFLmdldFN0cmluZygiX1VJX09wZW5FZGl0b3JFcnJvcl9sYWJlbCIpLCBleGNlcHRpb24uZ2V0TWVzc2FnZSgpKTsKKwkJCQlyZXR1cm4gZmFsc2U7CisJCQl9CisKKwkJCXJldHVybiB0cnVlOworCQl9CisJCWNhdGNoIChFeGNlcHRpb24gZXhjZXB0aW9uKSB7CisJCQlNdWx0aXBvcHVsYXRpb25FZGl0b3JQbHVnaW4uSU5TVEFOQ0UubG9nKGV4Y2VwdGlvbik7CisJCQlyZXR1cm4gZmFsc2U7CisJCX0KKwl9CisKKwkvKioKKwkgKiBUaGlzIGlzIHRoZSBvbmUgcGFnZSBvZiB0aGUgd2l6YXJkLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBjbGFzcyBNdWx0aXBvcHVsYXRpb25Nb2RlbFdpemFyZE5ld0ZpbGVDcmVhdGlvblBhZ2UgZXh0ZW5kcyBXaXphcmROZXdGaWxlQ3JlYXRpb25QYWdlIHsKKwkJLyoqCisJCSAqIFBhc3MgaW4gdGhlIHNlbGVjdGlvbi4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCXB1YmxpYyBNdWx0aXBvcHVsYXRpb25Nb2RlbFdpemFyZE5ld0ZpbGVDcmVhdGlvblBhZ2UoU3RyaW5nIHBhZ2VJZCwgSVN0cnVjdHVyZWRTZWxlY3Rpb24gc2VsZWN0aW9uKSB7CisJCQlzdXBlcihwYWdlSWQsIHNlbGVjdGlvbik7CisJCX0KKworCQkvKioKKwkJICogVGhlIGZyYW1ld29yayBjYWxscyB0aGlzIHRvIHNlZSBpZiB0aGUgZmlsZSBpcyBjb3JyZWN0LgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJQE92ZXJyaWRlCisJCXByb3RlY3RlZCBib29sZWFuIHZhbGlkYXRlUGFnZSgpIHsKKwkJCWlmIChzdXBlci52YWxpZGF0ZVBhZ2UoKSkgeworCQkJCVN0cmluZyBleHRlbnNpb24gPSBuZXcgUGF0aChnZXRGaWxlTmFtZSgpKS5nZXRGaWxlRXh0ZW5zaW9uKCk7CisJCQkJaWYgKGV4dGVuc2lvbiA9PSBudWxsIHx8ICFGSUxFX0VYVEVOU0lPTlMuY29udGFpbnMoZXh0ZW5zaW9uKSkgeworCQkJCQlTdHJpbmcga2V5ID0gRklMRV9FWFRFTlNJT05TLnNpemUoKSA+IDEgPyAiX1dBUk5fRmlsZW5hbWVFeHRlbnNpb25zIiA6ICJfV0FSTl9GaWxlbmFtZUV4dGVuc2lvbiI7CisJCQkJCXNldEVycm9yTWVzc2FnZShNdWx0aXBvcHVsYXRpb25FZGl0b3JQbHVnaW4uSU5TVEFOQ0UuZ2V0U3RyaW5nKGtleSwgbmV3IE9iamVjdCBbXSB7IEZPUk1BVFRFRF9GSUxFX0VYVEVOU0lPTlMgfSkpOworCQkJCQlyZXR1cm4gZmFsc2U7CisJCQkJfQorCQkJCXJldHVybiB0cnVlOworCQkJfQorCQkJcmV0dXJuIGZhbHNlOworCQl9CisKKwkJLyoqCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlwdWJsaWMgSUZpbGUgZ2V0TW9kZWxGaWxlKCkgeworCQkJcmV0dXJuIFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5nZXRSb290KCkuZ2V0RmlsZShnZXRDb250YWluZXJGdWxsUGF0aCgpLmFwcGVuZChnZXRGaWxlTmFtZSgpKSk7CisJCX0KKwl9CisKKwkvKioKKwkgKiBUaGlzIGlzIHRoZSBwYWdlIHdoZXJlIHRoZSB0eXBlIG9mIG9iamVjdCB0byBjcmVhdGUgaXMgc2VsZWN0ZWQuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIGNsYXNzIE11bHRpcG9wdWxhdGlvbk1vZGVsV2l6YXJkSW5pdGlhbE9iamVjdENyZWF0aW9uUGFnZSBleHRlbmRzIFdpemFyZFBhZ2UgeworCQkvKioKKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCXByb3RlY3RlZCBDb21ibyBpbml0aWFsT2JqZWN0RmllbGQ7CisKKwkJLyoqCisJCSAqIEBnZW5lcmF0ZWQKKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqLworCQlwcm90ZWN0ZWQgTGlzdDxTdHJpbmc+IGVuY29kaW5nczsKKworCQkvKioKKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCXByb3RlY3RlZCBDb21ibyBlbmNvZGluZ0ZpZWxkOworCisJCS8qKgorCQkgKiBQYXNzIGluIHRoZSBzZWxlY3Rpb24uCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlwdWJsaWMgTXVsdGlwb3B1bGF0aW9uTW9kZWxXaXphcmRJbml0aWFsT2JqZWN0Q3JlYXRpb25QYWdlKFN0cmluZyBwYWdlSWQpIHsKKwkJCXN1cGVyKHBhZ2VJZCk7CisJCX0KKworCQkvKioKKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCXB1YmxpYyB2b2lkIGNyZWF0ZUNvbnRyb2woQ29tcG9zaXRlIHBhcmVudCkgeworCQkJQ29tcG9zaXRlIGNvbXBvc2l0ZSA9IG5ldyBDb21wb3NpdGUocGFyZW50LCBTV1QuTk9ORSk7IHsKKwkJCQlHcmlkTGF5b3V0IGxheW91dCA9IG5ldyBHcmlkTGF5b3V0KCk7CisJCQkJbGF5b3V0Lm51bUNvbHVtbnMgPSAxOworCQkJCWxheW91dC52ZXJ0aWNhbFNwYWNpbmcgPSAxMjsKKwkJCQljb21wb3NpdGUuc2V0TGF5b3V0KGxheW91dCk7CisKKwkJCQlHcmlkRGF0YSBkYXRhID0gbmV3IEdyaWREYXRhKCk7CisJCQkJZGF0YS52ZXJ0aWNhbEFsaWdubWVudCA9IEdyaWREYXRhLkZJTEw7CisJCQkJZGF0YS5ncmFiRXhjZXNzVmVydGljYWxTcGFjZSA9IHRydWU7CisJCQkJZGF0YS5ob3Jpem9udGFsQWxpZ25tZW50ID0gR3JpZERhdGEuRklMTDsKKwkJCQljb21wb3NpdGUuc2V0TGF5b3V0RGF0YShkYXRhKTsKKwkJCX0KKworCQkJTGFiZWwgY29udGFpbmVyTGFiZWwgPSBuZXcgTGFiZWwoY29tcG9zaXRlLCBTV1QuTEVGVCk7CisJCQl7CisJCQkJY29udGFpbmVyTGFiZWwuc2V0VGV4dChNdWx0aXBvcHVsYXRpb25FZGl0b3JQbHVnaW4uSU5TVEFOQ0UuZ2V0U3RyaW5nKCJfVUlfTW9kZWxPYmplY3QiKSk7CisKKwkJCQlHcmlkRGF0YSBkYXRhID0gbmV3IEdyaWREYXRhKCk7CisJCQkJZGF0YS5ob3Jpem9udGFsQWxpZ25tZW50ID0gR3JpZERhdGEuRklMTDsKKwkJCQljb250YWluZXJMYWJlbC5zZXRMYXlvdXREYXRhKGRhdGEpOworCQkJfQorCisJCQlpbml0aWFsT2JqZWN0RmllbGQgPSBuZXcgQ29tYm8oY29tcG9zaXRlLCBTV1QuQk9SREVSKTsKKwkJCXsKKwkJCQlHcmlkRGF0YSBkYXRhID0gbmV3IEdyaWREYXRhKCk7CisJCQkJZGF0YS5ob3Jpem9udGFsQWxpZ25tZW50ID0gR3JpZERhdGEuRklMTDsKKwkJCQlkYXRhLmdyYWJFeGNlc3NIb3Jpem9udGFsU3BhY2UgPSB0cnVlOworCQkJCWluaXRpYWxPYmplY3RGaWVsZC5zZXRMYXlvdXREYXRhKGRhdGEpOworCQkJfQorCisJCQlmb3IgKFN0cmluZyBvYmplY3ROYW1lIDogZ2V0SW5pdGlhbE9iamVjdE5hbWVzKCkpIHsKKwkJCQlpbml0aWFsT2JqZWN0RmllbGQuYWRkKGdldExhYmVsKG9iamVjdE5hbWUpKTsKKwkJCX0KKworCQkJaWYgKGluaXRpYWxPYmplY3RGaWVsZC5nZXRJdGVtQ291bnQoKSA9PSAxKSB7CisJCQkJaW5pdGlhbE9iamVjdEZpZWxkLnNlbGVjdCgwKTsKKwkJCX0KKwkJCWluaXRpYWxPYmplY3RGaWVsZC5hZGRNb2RpZnlMaXN0ZW5lcih2YWxpZGF0b3IpOworCisJCQlMYWJlbCBlbmNvZGluZ0xhYmVsID0gbmV3IExhYmVsKGNvbXBvc2l0ZSwgU1dULkxFRlQpOworCQkJeworCQkJCWVuY29kaW5nTGFiZWwuc2V0VGV4dChNdWx0aXBvcHVsYXRpb25FZGl0b3JQbHVnaW4uSU5TVEFOQ0UuZ2V0U3RyaW5nKCJfVUlfWE1MRW5jb2RpbmciKSk7CisKKwkJCQlHcmlkRGF0YSBkYXRhID0gbmV3IEdyaWREYXRhKCk7CisJCQkJZGF0YS5ob3Jpem9udGFsQWxpZ25tZW50ID0gR3JpZERhdGEuRklMTDsKKwkJCQllbmNvZGluZ0xhYmVsLnNldExheW91dERhdGEoZGF0YSk7CisJCQl9CisJCQllbmNvZGluZ0ZpZWxkID0gbmV3IENvbWJvKGNvbXBvc2l0ZSwgU1dULkJPUkRFUik7CisJCQl7CisJCQkJR3JpZERhdGEgZGF0YSA9IG5ldyBHcmlkRGF0YSgpOworCQkJCWRhdGEuaG9yaXpvbnRhbEFsaWdubWVudCA9IEdyaWREYXRhLkZJTEw7CisJCQkJZGF0YS5ncmFiRXhjZXNzSG9yaXpvbnRhbFNwYWNlID0gdHJ1ZTsKKwkJCQllbmNvZGluZ0ZpZWxkLnNldExheW91dERhdGEoZGF0YSk7CisJCQl9CisKKwkJCWZvciAoU3RyaW5nIGVuY29kaW5nIDogZ2V0RW5jb2RpbmdzKCkpIHsKKwkJCQllbmNvZGluZ0ZpZWxkLmFkZChlbmNvZGluZyk7CisJCQl9CisKKwkJCWVuY29kaW5nRmllbGQuc2VsZWN0KDApOworCQkJZW5jb2RpbmdGaWVsZC5hZGRNb2RpZnlMaXN0ZW5lcih2YWxpZGF0b3IpOworCisJCQlzZXRQYWdlQ29tcGxldGUodmFsaWRhdGVQYWdlKCkpOworCQkJc2V0Q29udHJvbChjb21wb3NpdGUpOworCQl9CisKKwkJLyoqCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlwcm90ZWN0ZWQgTW9kaWZ5TGlzdGVuZXIgdmFsaWRhdG9yID0KKwkJCW5ldyBNb2RpZnlMaXN0ZW5lcigpIHsKKwkJCQlwdWJsaWMgdm9pZCBtb2RpZnlUZXh0KE1vZGlmeUV2ZW50IGUpIHsKKwkJCQkJc2V0UGFnZUNvbXBsZXRlKHZhbGlkYXRlUGFnZSgpKTsKKwkJCQl9CisJCQl9OworCisJCS8qKgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJcHJvdGVjdGVkIGJvb2xlYW4gdmFsaWRhdGVQYWdlKCkgeworCQkJcmV0dXJuIGdldEluaXRpYWxPYmplY3ROYW1lKCkgIT0gbnVsbCAmJiBnZXRFbmNvZGluZ3MoKS5jb250YWlucyhlbmNvZGluZ0ZpZWxkLmdldFRleHQoKSk7CisJCX0KKworCQkvKioKKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUBPdmVycmlkZQorCQlwdWJsaWMgdm9pZCBzZXRWaXNpYmxlKGJvb2xlYW4gdmlzaWJsZSkgeworCQkJc3VwZXIuc2V0VmlzaWJsZSh2aXNpYmxlKTsKKwkJCWlmICh2aXNpYmxlKSB7CisJCQkJaWYgKGluaXRpYWxPYmplY3RGaWVsZC5nZXRJdGVtQ291bnQoKSA9PSAxKSB7CisJCQkJCWluaXRpYWxPYmplY3RGaWVsZC5jbGVhclNlbGVjdGlvbigpOworCQkJCQllbmNvZGluZ0ZpZWxkLnNldEZvY3VzKCk7CisJCQkJfQorCQkJCWVsc2UgeworCQkJCQllbmNvZGluZ0ZpZWxkLmNsZWFyU2VsZWN0aW9uKCk7CisJCQkJCWluaXRpYWxPYmplY3RGaWVsZC5zZXRGb2N1cygpOworCQkJCX0KKwkJCX0KKwkJfQorCisJCS8qKgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJcHVibGljIFN0cmluZyBnZXRJbml0aWFsT2JqZWN0TmFtZSgpIHsKKwkJCVN0cmluZyBsYWJlbCA9IGluaXRpYWxPYmplY3RGaWVsZC5nZXRUZXh0KCk7CisKKwkJCWZvciAoU3RyaW5nIG5hbWUgOiBnZXRJbml0aWFsT2JqZWN0TmFtZXMoKSkgeworCQkJCWlmIChnZXRMYWJlbChuYW1lKS5lcXVhbHMobGFiZWwpKSB7CisJCQkJCXJldHVybiBuYW1lOworCQkJCX0KKwkJCX0KKwkJCXJldHVybiBudWxsOworCQl9CisKKwkJLyoqCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlwdWJsaWMgU3RyaW5nIGdldEVuY29kaW5nKCkgeworCQkJcmV0dXJuIGVuY29kaW5nRmllbGQuZ2V0VGV4dCgpOworCQl9CisKKwkJLyoqCisJCSAqIFJldHVybnMgdGhlIGxhYmVsIGZvciB0aGUgc3BlY2lmaWVkIHR5cGUgbmFtZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCXByb3RlY3RlZCBTdHJpbmcgZ2V0TGFiZWwoU3RyaW5nIHR5cGVOYW1lKSB7CisJCQl0cnkgeworCQkJCXJldHVybiBNdWx0aXBvcHVsYXRpb25FZGl0UGx1Z2luLklOU1RBTkNFLmdldFN0cmluZygiX1VJXyIgKyB0eXBlTmFtZSArICJfdHlwZSIpOworCQkJfQorCQkJY2F0Y2goTWlzc2luZ1Jlc291cmNlRXhjZXB0aW9uIG1yZSkgeworCQkJCU11bHRpcG9wdWxhdGlvbkVkaXRvclBsdWdpbi5JTlNUQU5DRS5sb2cobXJlKTsKKwkJCX0KKwkJCXJldHVybiB0eXBlTmFtZTsKKwkJfQorCisJCS8qKgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJcHJvdGVjdGVkIENvbGxlY3Rpb248U3RyaW5nPiBnZXRFbmNvZGluZ3MoKSB7CisJCQlpZiAoZW5jb2RpbmdzID09IG51bGwpIHsKKwkJCQllbmNvZGluZ3MgPSBuZXcgQXJyYXlMaXN0PFN0cmluZz4oKTsKKwkJCQlmb3IgKFN0cmluZ1Rva2VuaXplciBzdHJpbmdUb2tlbml6ZXIgPSBuZXcgU3RyaW5nVG9rZW5pemVyKE11bHRpcG9wdWxhdGlvbkVkaXRvclBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoIl9VSV9YTUxFbmNvZGluZ0Nob2ljZXMiKSk7IHN0cmluZ1Rva2VuaXplci5oYXNNb3JlVG9rZW5zKCk7ICkgeworCQkJCQllbmNvZGluZ3MuYWRkKHN0cmluZ1Rva2VuaXplci5uZXh0VG9rZW4oKSk7CisJCQkJfQorCQkJfQorCQkJcmV0dXJuIGVuY29kaW5nczsKKwkJfQorCX0KKworCS8qKgorCSAqIFRoZSBmcmFtZXdvcmsgY2FsbHMgdGhpcyB0byBjcmVhdGUgdGhlIGNvbnRlbnRzIG9mIHRoZSB3aXphcmQuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGFkZFBhZ2VzKCkgeworCQkvLyBDcmVhdGUgYSBwYWdlLCBzZXQgdGhlIHRpdGxlLCBhbmQgdGhlIGluaXRpYWwgbW9kZWwgZmlsZSBuYW1lLgorCQkvLworCQluZXdGaWxlQ3JlYXRpb25QYWdlID0gbmV3IE11bHRpcG9wdWxhdGlvbk1vZGVsV2l6YXJkTmV3RmlsZUNyZWF0aW9uUGFnZSgiV2hhdGV2ZXIiLCBzZWxlY3Rpb24pOworCQluZXdGaWxlQ3JlYXRpb25QYWdlLnNldFRpdGxlKE11bHRpcG9wdWxhdGlvbkVkaXRvclBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoIl9VSV9NdWx0aXBvcHVsYXRpb25Nb2RlbFdpemFyZF9sYWJlbCIpKTsKKwkJbmV3RmlsZUNyZWF0aW9uUGFnZS5zZXREZXNjcmlwdGlvbihNdWx0aXBvcHVsYXRpb25FZGl0b3JQbHVnaW4uSU5TVEFOQ0UuZ2V0U3RyaW5nKCJfVUlfTXVsdGlwb3B1bGF0aW9uTW9kZWxXaXphcmRfZGVzY3JpcHRpb24iKSk7CisJCW5ld0ZpbGVDcmVhdGlvblBhZ2Uuc2V0RmlsZU5hbWUoTXVsdGlwb3B1bGF0aW9uRWRpdG9yUGx1Z2luLklOU1RBTkNFLmdldFN0cmluZygiX1VJX011bHRpcG9wdWxhdGlvbkVkaXRvckZpbGVuYW1lRGVmYXVsdEJhc2UiKSArICIuIiArIEZJTEVfRVhURU5TSU9OUy5nZXQoMCkpOworCQlhZGRQYWdlKG5ld0ZpbGVDcmVhdGlvblBhZ2UpOworCisJCS8vIFRyeSBhbmQgZ2V0IHRoZSByZXNvdXJjZSBzZWxlY3Rpb24gdG8gZGV0ZXJtaW5lIGEgY3VycmVudCBkaXJlY3RvcnkgZm9yIHRoZSBmaWxlIGRpYWxvZy4KKwkJLy8KKwkJaWYgKHNlbGVjdGlvbiAhPSBudWxsICYmICFzZWxlY3Rpb24uaXNFbXB0eSgpKSB7CisJCQkvLyBHZXQgdGhlIHJlc291cmNlLi4uCisJCQkvLworCQkJT2JqZWN0IHNlbGVjdGVkRWxlbWVudCA9IHNlbGVjdGlvbi5pdGVyYXRvcigpLm5leHQoKTsKKwkJCWlmIChzZWxlY3RlZEVsZW1lbnQgaW5zdGFuY2VvZiBJUmVzb3VyY2UpIHsKKwkJCQkvLyBHZXQgdGhlIHJlc291cmNlIHBhcmVudCwgaWYgaXRzIGEgZmlsZS4KKwkJCQkvLworCQkJCUlSZXNvdXJjZSBzZWxlY3RlZFJlc291cmNlID0gKElSZXNvdXJjZSlzZWxlY3RlZEVsZW1lbnQ7CisJCQkJaWYgKHNlbGVjdGVkUmVzb3VyY2UuZ2V0VHlwZSgpID09IElSZXNvdXJjZS5GSUxFKSB7CisJCQkJCXNlbGVjdGVkUmVzb3VyY2UgPSBzZWxlY3RlZFJlc291cmNlLmdldFBhcmVudCgpOworCQkJCX0KKworCQkJCS8vIFRoaXMgZ2l2ZXMgdXMgYSBkaXJlY3RvcnkuLi4KKwkJCQkvLworCQkJCWlmIChzZWxlY3RlZFJlc291cmNlIGluc3RhbmNlb2YgSUZvbGRlciB8fCBzZWxlY3RlZFJlc291cmNlIGluc3RhbmNlb2YgSVByb2plY3QpIHsKKwkJCQkJLy8gU2V0IHRoaXMgZm9yIHRoZSBjb250YWluZXIuCisJCQkJCS8vCisJCQkJCW5ld0ZpbGVDcmVhdGlvblBhZ2Uuc2V0Q29udGFpbmVyRnVsbFBhdGgoc2VsZWN0ZWRSZXNvdXJjZS5nZXRGdWxsUGF0aCgpKTsKKworCQkJCQkvLyBNYWtlIHVwIGEgdW5pcXVlIG5ldyBuYW1lIGhlcmUuCisJCQkJCS8vCisJCQkJCVN0cmluZyBkZWZhdWx0TW9kZWxCYXNlRmlsZW5hbWUgPSBNdWx0aXBvcHVsYXRpb25FZGl0b3JQbHVnaW4uSU5TVEFOQ0UuZ2V0U3RyaW5nKCJfVUlfTXVsdGlwb3B1bGF0aW9uRWRpdG9yRmlsZW5hbWVEZWZhdWx0QmFzZSIpOworCQkJCQlTdHJpbmcgZGVmYXVsdE1vZGVsRmlsZW5hbWVFeHRlbnNpb24gPSBGSUxFX0VYVEVOU0lPTlMuZ2V0KDApOworCQkJCQlTdHJpbmcgbW9kZWxGaWxlbmFtZSA9IGRlZmF1bHRNb2RlbEJhc2VGaWxlbmFtZSArICIuIiArIGRlZmF1bHRNb2RlbEZpbGVuYW1lRXh0ZW5zaW9uOworCQkJCQlmb3IgKGludCBpID0gMTsgKChJQ29udGFpbmVyKXNlbGVjdGVkUmVzb3VyY2UpLmZpbmRNZW1iZXIobW9kZWxGaWxlbmFtZSkgIT0gbnVsbDsgKytpKSB7CisJCQkJCQltb2RlbEZpbGVuYW1lID0gZGVmYXVsdE1vZGVsQmFzZUZpbGVuYW1lICsgaSArICIuIiArIGRlZmF1bHRNb2RlbEZpbGVuYW1lRXh0ZW5zaW9uOworCQkJCQl9CisJCQkJCW5ld0ZpbGVDcmVhdGlvblBhZ2Uuc2V0RmlsZU5hbWUobW9kZWxGaWxlbmFtZSk7CisJCQkJfQorCQkJfQorCQl9CisJCWluaXRpYWxPYmplY3RDcmVhdGlvblBhZ2UgPSBuZXcgTXVsdGlwb3B1bGF0aW9uTW9kZWxXaXphcmRJbml0aWFsT2JqZWN0Q3JlYXRpb25QYWdlKCJXaGF0ZXZlcjIiKTsKKwkJaW5pdGlhbE9iamVjdENyZWF0aW9uUGFnZS5zZXRUaXRsZShNdWx0aXBvcHVsYXRpb25FZGl0b3JQbHVnaW4uSU5TVEFOQ0UuZ2V0U3RyaW5nKCJfVUlfTXVsdGlwb3B1bGF0aW9uTW9kZWxXaXphcmRfbGFiZWwiKSk7CisJCWluaXRpYWxPYmplY3RDcmVhdGlvblBhZ2Uuc2V0RGVzY3JpcHRpb24oTXVsdGlwb3B1bGF0aW9uRWRpdG9yUGx1Z2luLklOU1RBTkNFLmdldFN0cmluZygiX1VJX1dpemFyZF9pbml0aWFsX29iamVjdF9kZXNjcmlwdGlvbiIpKTsKKwkJYWRkUGFnZShpbml0aWFsT2JqZWN0Q3JlYXRpb25QYWdlKTsKKwl9CisKKwkvKioKKwkgKiBHZXQgdGhlIGZpbGUgZnJvbSB0aGUgcGFnZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgSUZpbGUgZ2V0TW9kZWxGaWxlKCkgeworCQlyZXR1cm4gbmV3RmlsZUNyZWF0aW9uUGFnZS5nZXRNb2RlbEZpbGUoKTsKKwl9CisKK30KZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzLm11bHRpcG9wdWxhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL211bHRpcG9wdWxhdGlvbi9wcmVzZW50YXRpb24vbXVsdGlwb3B1bGF0aW9uZGlzZWFzZW1lc3NhZ2VzLnByb3BlcnRpZXMgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy5tdWx0aXBvcHVsYXRpb24vc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9tdWx0aXBvcHVsYXRpb24vcHJlc2VudGF0aW9uL211bHRpcG9wdWxhdGlvbmRpc2Vhc2VtZXNzYWdlcy5wcm9wZXJ0aWVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVhNGJmM2QKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy5tdWx0aXBvcHVsYXRpb24vc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9tdWx0aXBvcHVsYXRpb24vcHJlc2VudGF0aW9uL211bHRpcG9wdWxhdGlvbmRpc2Vhc2VtZXNzYWdlcy5wcm9wZXJ0aWVzCkBAIC0wLDAgKzEsMTggQEAKK3BvcHVsYXRpb25Hcm91cHMgPSBQb3B1bGF0aW9uIEdyb3VwcworcG9wdWxhdGlvbkdyb3Vwc1VOSVQgPSAKK3BvcHVsYXRpb25Hcm91cHNUVCA9CisKK21vZHVsYXRpb25Qb2ludHMgPSBTYW1wbGluZyBQb2ludHMgZm9yIE1vZHVsYXRpb24KK21vZHVsYXRpb25Qb2ludHNVTklUID0KK21vZHVsYXRpb25Qb2ludHNUVCA9CisKK3VzZVNwbGluZUludGVycG9sYXRpb24gPSBVc2UgU3BsaW5lIEludGVycG9sYXRpb24KK3VzZVNwbGluZUludGVycG9sYXRpb25VTklUID0KK3VzZVNwbGluZUludGVycG9sYXRpb25UVCA9CisKK3RyYW5zbWlzc2lvbkZyb20gPSBmcm9tCit0cmFuc21pc3Npb25UbyA9IHRvCisKK2RheU9mVGhlWWVhciA9IERheSBvZiB0aGUgWWVhcgordHJhbnNtaXNzaW9uRmFjdG9yID0gVHJhbnNtaXNzaW9uIEZhY3RvcgorCmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy5tdWx0aXBvcHVsYXRpb24vc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvZGlzZWFzZW1vZGVscy9tdWx0aXBvcHVsYXRpb24vYWRhcHRlcnMvTXVsdGlEaXNlYXNlTmV3TW9kaWZpZXJQYWdlQWRhcHRlckZhY3RvcnkuamF2YSBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzLm11bHRpcG9wdWxhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9kaXNlYXNlbW9kZWxzL211bHRpcG9wdWxhdGlvbi9hZGFwdGVycy9NdWx0aURpc2Vhc2VOZXdNb2RpZmllclBhZ2VBZGFwdGVyRmFjdG9yeS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEyZGI4YzgKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy5tdWx0aXBvcHVsYXRpb24vc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvZGlzZWFzZW1vZGVscy9tdWx0aXBvcHVsYXRpb24vYWRhcHRlcnMvTXVsdGlEaXNlYXNlTmV3TW9kaWZpZXJQYWdlQWRhcHRlckZhY3RvcnkuamF2YQpAQCAtMCwwICsxLDEzNiBAQAorLy8gRGlzZWFzZU5ld01vZGlmaWVyUGFnZUFkYXB0ZXJGYWN0b3J5LmphdmEKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzLm11bHRpcG9wdWxhdGlvbi5hZGFwdGVyczsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5BZGFwdGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVTdHJ1Y3R1cmFsRmVhdHVyZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLklkZW50aWZpYWJsZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMubXVsdGlwb3B1bGF0aW9uLk11bHRpcG9wdWxhdGlvblBhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLm11bHRpcG9wdWxhdGlvbi51dGlsLk11bHRpcG9wdWxhdGlvbkFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5EaXNlYXNlTW9kZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS51aS5hZGFwdGVycy5uZXdtb2RpZmllcnBhZ2UuTmV3TW9kaWZpZXJQYWdlQWRhcHRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnVpLmFkYXB0ZXJzLm5ld21vZGlmaWVycGFnZS5OZXdNb2RpZmllclBhZ2VBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnVpLndpemFyZHMuRGlzZWFzZVdpemFyZE1lc3NhZ2VzOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udWkud2l6YXJkcy5OZXdNb2RpZmllclBhZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuSVN0YXJ0dXA7CisKKy8qKgorICogVGhpcyBjbGFzcyBpcyBhbiB7QGxpbmsgTmV3TW9kaWZpZXJQYWdlQWRhcHRlckZhY3Rvcnl9IHRoYXQgYWRhcHRzCisgKiB7QGxpbmsgRGlzZWFzZU1vZGVsfXMgdG8ge0BsaW5rIE5ld01vZGlmaWVyUGFnZX1zLgorICovCitwdWJsaWMgY2xhc3MgTXVsdGlEaXNlYXNlTmV3TW9kaWZpZXJQYWdlQWRhcHRlckZhY3RvcnkgZXh0ZW5kcworCQlNdWx0aXBvcHVsYXRpb25BZGFwdGVyRmFjdG9yeSBpbXBsZW1lbnRzIE5ld01vZGlmaWVyUGFnZUFkYXB0ZXJGYWN0b3J5LCBJU3RhcnR1cCB7CisKKwkvKioKKwkgKiBEZWZhdWx0IGNvbnN0cnVjdG9yLgorCSAqLworCXB1YmxpYyBNdWx0aURpc2Vhc2VOZXdNb2RpZmllclBhZ2VBZGFwdGVyRmFjdG9yeSgpIHsKKwkJc3VwZXIoKTsKKwkJTmV3TW9kaWZpZXJQYWdlQWRhcHRlckZhY3RvcnkuSU5TVEFOQ0UuYWRkQWRhcHRlckZhY3RvcnkodGhpcyk7CisJfQorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS51aS5JU3RhcnR1cCNlYXJseVN0YXJ0dXAoKQorCSAqLworCXB1YmxpYyB2b2lkIGVhcmx5U3RhcnR1cCgpIHsKKwkJLy8gTm90aGluZyB0byBkbyB0aGUgY29uc3RydWN0b3Igd2lsbCBkbyBldmVyeXRoaW5nLgkJCisJfQorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2NlbmFyaW8udXRpbC5TY2VuYXJpb0FkYXB0ZXJGYWN0b3J5I2lzRmFjdG9yeUZvclR5cGUoamF2YS5sYW5nLk9iamVjdCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgYm9vbGVhbiBpc0ZhY3RvcnlGb3JUeXBlKGZpbmFsIE9iamVjdCB0eXBlKSB7CisJCXJldHVybiB0eXBlID09IE5ld01vZGlmaWVyUGFnZUFkYXB0ZXIuY2xhc3MgfHwgc3VwZXIuaXNGYWN0b3J5Rm9yVHlwZSh0eXBlKTsKKwl9CisKKworCUBPdmVycmlkZQorCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZU11bHRpUG9wdWxhdGlvblNJRGlzZWFzZU1vZGVsQWRhcHRlcigpIHsKKwkJcmV0dXJuIG5ldyBNdWx0aURpc2Vhc2VOZXdNb2RpZmllclBhZ2VBZGFwdGVyKCk7CisJfQorCisJQE92ZXJyaWRlCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlTXVsdGlQb3B1bGF0aW9uU0lSRGlzZWFzZU1vZGVsQWRhcHRlcigpIHsKKwkJcmV0dXJuIG5ldyBNdWx0aURpc2Vhc2VOZXdNb2RpZmllclBhZ2VBZGFwdGVyKCk7CisJfQorCQorCUBPdmVycmlkZQorCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZU11bHRpUG9wdWxhdGlvblNFSVJEaXNlYXNlTW9kZWxBZGFwdGVyKCkgeworCQlyZXR1cm4gbmV3IE11bHRpRGlzZWFzZU5ld01vZGlmaWVyUGFnZUFkYXB0ZXIoKTsKKwl9CisJCisJLyoqCisJICogVGhpcyBjbGFzcyBhZGFwdHMge0BsaW5rIERpc2Vhc2VNb2RlbH1zIHRvIHtAbGluayBOZXdNb2RpZmllclBhZ2V9cworCSAqLworCXByaXZhdGUgc3RhdGljIGNsYXNzIE11bHRpRGlzZWFzZU5ld01vZGlmaWVyUGFnZUFkYXB0ZXIgZXh0ZW5kcworCQkJTmV3TW9kaWZpZXJQYWdlQWRhcHRlciB7CisKKwkJLyoqCisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS51aS5hZGFwdGVycy5uZXdtb2RpZmllcnBhZ2UuTmV3TW9kaWZpZXJQYWdlQWRhcHRlciNjcmVhdGVOZXdNb2RpZmllclBhZ2UoKQorCQkgKi8KKwkJQE92ZXJyaWRlCisJCXB1YmxpYyBOZXdNb2RpZmllclBhZ2UgY3JlYXRlTmV3TW9kaWZpZXJQYWdlKCkgeworCQkJcmV0dXJuIG5ldyBOZXdNb2RpZmllclBhZ2UoKElkZW50aWZpYWJsZSkgZ2V0VGFyZ2V0KCkpIHsKKwkJCQlAT3ZlcnJpZGUKKwkJCQlwcm90ZWN0ZWQgYm9vbGVhbiBpc1VzZXJTcGVjaWZpZWRQcm9wZXJ0eSgKKwkJCQkJCWZpbmFsIEVTdHJ1Y3R1cmFsRmVhdHVyZSBmZWF0dXJlKSB7CisJCQkJCWJvb2xlYW4gcmV0VmFsdWUgPSBmYWxzZTsKKwkJCQkJZmluYWwgRUNsYXNzIGNvbnRhaW5pbmdDbGFzcyA9IGZlYXR1cmUuZ2V0RUNvbnRhaW5pbmdDbGFzcygpOworCQkJCQkvLyBJcyBpdCBhIGRpc2Vhc2UgbW9kZWwgcHJvcGVydHk/CisJCQkJCWlmIChjb250YWluaW5nQ2xhc3MuZXF1YWxzKE11bHRpcG9wdWxhdGlvblBhY2thZ2UuZUlOU1RBTkNFLmdldE11bHRpUG9wdWxhdGlvblNJRGlzZWFzZU1vZGVsKCkpCisJCQkJCQkJfHwgY29udGFpbmluZ0NsYXNzLmdldEVBbGxTdXBlclR5cGVzKCkuY29udGFpbnMoCisJCQkJCQkJCQlNdWx0aXBvcHVsYXRpb25QYWNrYWdlLmVJTlNUQU5DRS5nZXRNdWx0aVBvcHVsYXRpb25TSURpc2Vhc2VNb2RlbCgpKSkgeworCQkJCQkJCisJCQkJCQlpZihmZWF0dXJlLmdldEZlYXR1cmVJRCgpID09IE11bHRpcG9wdWxhdGlvblBhY2thZ2UuTVVMVElfUE9QVUxBVElPTl9TSV9ESVNFQVNFX01PREVMX19JTkZFQ1RJT1VTX01PUlRBTElUWV9SQVRFIHx8CisJCQkJCQkJCWZlYXR1cmUuZ2V0RmVhdHVyZUlEKCkgPT0gTXVsdGlwb3B1bGF0aW9uUGFja2FnZS5NVUxUSV9QT1BVTEFUSU9OX1NJX0RJU0VBU0VfTU9ERUxfX1BPUFVMQVRJT05fR1JPVVBTIHx8CisJCQkJCQkJCWZlYXR1cmUuZ2V0RmVhdHVyZUlEKCkgPT0gTXVsdGlwb3B1bGF0aW9uUGFja2FnZS5NVUxUSV9QT1BVTEFUSU9OX1NJX0RJU0VBU0VfTU9ERUxfX1JFQ09WRVJZX1JBVEUgfHwKKwkJCQkJCQkJZmVhdHVyZS5nZXRGZWF0dXJlSUQoKSA9PSBNdWx0aXBvcHVsYXRpb25QYWNrYWdlLk1VTFRJX1BPUFVMQVRJT05fU0lfRElTRUFTRV9NT0RFTF9fVFJBTlNNSVNTSU9OX1JBVEUgfHwKKwkJCQkJCQkJZmVhdHVyZS5nZXRGZWF0dXJlSUQoKSA9PSBNdWx0aXBvcHVsYXRpb25QYWNrYWdlLk1VTFRJX1BPUFVMQVRJT05fU0lSX0RJU0VBU0VfTU9ERUxfX0lNTVVOSVRZX0xPU1NfUkFURSB8fAorCQkJCQkJCQlmZWF0dXJlLmdldEZlYXR1cmVJRCgpID09IE11bHRpcG9wdWxhdGlvblBhY2thZ2UuTVVMVElfUE9QVUxBVElPTl9TSVJfRElTRUFTRV9NT0RFTF9fSU5GRUNUSU9VU19NT1JUQUxJVFlfUkFURSB8fAorCQkJCQkJCQlmZWF0dXJlLmdldEZlYXR1cmVJRCgpID09IE11bHRpcG9wdWxhdGlvblBhY2thZ2UuTVVMVElfUE9QVUxBVElPTl9TSVJfRElTRUFTRV9NT0RFTF9fUE9QVUxBVElPTl9HUk9VUFMgfHwKKwkJCQkJCQkJZmVhdHVyZS5nZXRGZWF0dXJlSUQoKSA9PSBNdWx0aXBvcHVsYXRpb25QYWNrYWdlLk1VTFRJX1BPUFVMQVRJT05fU0lSX0RJU0VBU0VfTU9ERUxfX1JFQ09WRVJZX1JBVEUgfHwKKwkJCQkJCQkJZmVhdHVyZS5nZXRGZWF0dXJlSUQoKSA9PSBNdWx0aXBvcHVsYXRpb25QYWNrYWdlLk1VTFRJX1BPUFVMQVRJT05fU0lSX0RJU0VBU0VfTU9ERUxfX1RSQU5TTUlTU0lPTl9SQVRFIHx8CisJCQkJCQkJCWZlYXR1cmUuZ2V0RmVhdHVyZUlEKCkgPT0gTXVsdGlwb3B1bGF0aW9uUGFja2FnZS5NVUxUSV9QT1BVTEFUSU9OX1NFSVJfRElTRUFTRV9NT0RFTF9fSU1NVU5JVFlfTE9TU19SQVRFIHx8CisJCQkJCQkJCWZlYXR1cmUuZ2V0RmVhdHVyZUlEKCkgPT0gTXVsdGlwb3B1bGF0aW9uUGFja2FnZS5NVUxUSV9QT1BVTEFUSU9OX1NFSVJfRElTRUFTRV9NT0RFTF9fSU5DVUJBVElPTl9SQVRFIHx8CisJCQkJCQkJCWZlYXR1cmUuZ2V0RmVhdHVyZUlEKCkgPT0gTXVsdGlwb3B1bGF0aW9uUGFja2FnZS5NVUxUSV9QT1BVTEFUSU9OX1NFSVJfRElTRUFTRV9NT0RFTF9fSU5GRUNUSU9VU19NT1JUQUxJVFlfUkFURSB8fAorCQkJCQkJCQlmZWF0dXJlLmdldEZlYXR1cmVJRCgpID09IE11bHRpcG9wdWxhdGlvblBhY2thZ2UuTVVMVElfUE9QVUxBVElPTl9TRUlSX0RJU0VBU0VfTU9ERUxfX1BPUFVMQVRJT05fR1JPVVBTIHx8CisJCQkJCQkJCWZlYXR1cmUuZ2V0RmVhdHVyZUlEKCkgPT0gTXVsdGlwb3B1bGF0aW9uUGFja2FnZS5NVUxUSV9QT1BVTEFUSU9OX1NFSVJfRElTRUFTRV9NT0RFTF9fUkVDT1ZFUllfUkFURSB8fAorCQkJCQkJCQlmZWF0dXJlLmdldEZlYXR1cmVJRCgpID09IE11bHRpcG9wdWxhdGlvblBhY2thZ2UuTVVMVElfUE9QVUxBVElPTl9TRUlSX0RJU0VBU0VfTU9ERUxfX1RSQU5TTUlTU0lPTl9SQVRFKQorCQkJCQkJCXJldHVybiBmYWxzZTsgLy8gbGlzdCBhbmQgbWF0cmljZXMgY2FuJ3QgYmUgbW9kaWZpZWQgaGVyZQorCQkJCQkJCisJCQkJCQkvLyBZZXMKKwkJCQkJCXJldFZhbHVlID0gdHJ1ZTsKKwkJCQkJfSAvLyBpZiBhIGRpc2Vhc2UgbW9kZWwgcHJvcGVydHkKKwkJCQkJcmV0dXJuIHJldFZhbHVlOworCQkJCX0gLy8gaXNVc2VyU3BlY2lmaWVkUHJvcGVydHkKKworCQkJCUBPdmVycmlkZQorCQkJCXByb3RlY3RlZCBTdHJpbmcgZ2V0Qm90dG9tVGV4dCgpIHsKKwkJCQkJcmV0dXJuIERpc2Vhc2VXaXphcmRNZXNzYWdlcy5nZXRTdHJpbmcoIlBNVFBfRGVmIik7CisJCQkJfQorCisJCQkJQE92ZXJyaWRlCisJCQkJcHJvdGVjdGVkIGJvb2xlYW4gaXNNb2RpZmlhYmxlUHJvcGVydHkoCisJCQkJCQlmaW5hbCBFU3RydWN0dXJhbEZlYXR1cmUgZmVhdHVyZSkgeworCQkJCQlib29sZWFuIHJldFZhbHVlID0gc3VwZXIuaXNNb2RpZmlhYmxlUHJvcGVydHkoZmVhdHVyZSk7CisKKwkJCQkJcmV0dXJuIHJldFZhbHVlOworCQkJCX0gLy8gaXNNb2RpZmlhYmxlUHJvcGVydHkKKwkJCX07CisJCX0gLy8gY3JlYXRlTmV3TW9kaWZpZXJQYWdlCisKKwl9IC8vIE11bHRpRGlzZWFzZU5ld01vZGlmaWVyUGFnZUFkYXB0ZXIKKworfSAvLyBNdWx0aURpc2Vhc2VOZXdNb2RpZmllclBhZ2VBZGFwdGVyRmFjdG9yeQpkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLy5jbGFzc3BhdGggYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy52ZWN0b3IvLmNsYXNzcGF0aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMDRlODYxCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLy5jbGFzc3BhdGgKQEAgLTAsMCArMSw3IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPGNsYXNzcGF0aD4KKwk8Y2xhc3NwYXRoZW50cnkga2luZD0ic3JjIiBwYXRoPSJzcmMiLz4KKwk8Y2xhc3NwYXRoZW50cnkga2luZD0iY29uIiBwYXRoPSJvcmcuZWNsaXBzZS5qZHQubGF1bmNoaW5nLkpSRV9DT05UQUlORVIvb3JnLmVjbGlwc2UuamR0LmludGVybmFsLmRlYnVnLnVpLmxhdW5jaGVyLlN0YW5kYXJkVk1UeXBlL0oyU0UtMS41Ii8+CisJPGNsYXNzcGF0aGVudHJ5IGtpbmQ9ImNvbiIgcGF0aD0ib3JnLmVjbGlwc2UucGRlLmNvcmUucmVxdWlyZWRQbHVnaW5zIi8+CisJPGNsYXNzcGF0aGVudHJ5IGtpbmQ9Im91dHB1dCIgcGF0aD0iYmluIi8+Cis8L2NsYXNzcGF0aD4KZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzLnZlY3Rvci8ucHJvamVjdCBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzLnZlY3Rvci8ucHJvamVjdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZjJlZTcyCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLy5wcm9qZWN0CkBAIC0wLDAgKzEsMjggQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8cHJvamVjdERlc2NyaXB0aW9uPgorCTxuYW1lPm9yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy52ZWN0b3I8L25hbWU+CisJPGNvbW1lbnQ+PC9jb21tZW50PgorCTxwcm9qZWN0cz4KKwk8L3Byb2plY3RzPgorCTxidWlsZFNwZWM+CisJCTxidWlsZENvbW1hbmQ+CisJCQk8bmFtZT5vcmcuZWNsaXBzZS5qZHQuY29yZS5qYXZhYnVpbGRlcjwvbmFtZT4KKwkJCTxhcmd1bWVudHM+CisJCQk8L2FyZ3VtZW50cz4KKwkJPC9idWlsZENvbW1hbmQ+CisJCTxidWlsZENvbW1hbmQ+CisJCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuTWFuaWZlc3RCdWlsZGVyPC9uYW1lPgorCQkJPGFyZ3VtZW50cz4KKwkJCTwvYXJndW1lbnRzPgorCQk8L2J1aWxkQ29tbWFuZD4KKwkJPGJ1aWxkQ29tbWFuZD4KKwkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5TY2hlbWFCdWlsZGVyPC9uYW1lPgorCQkJPGFyZ3VtZW50cz4KKwkJCTwvYXJndW1lbnRzPgorCQk8L2J1aWxkQ29tbWFuZD4KKwk8L2J1aWxkU3BlYz4KKwk8bmF0dXJlcz4KKwkJPG5hdHVyZT5vcmcuZWNsaXBzZS5qZHQuY29yZS5qYXZhbmF0dXJlPC9uYXR1cmU+CisJCTxuYXR1cmU+b3JnLmVjbGlwc2UucGRlLlBsdWdpbk5hdHVyZTwvbmF0dXJlPgorCTwvbmF0dXJlcz4KKzwvcHJvamVjdERlc2NyaXB0aW9uPgpkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMudmVjdG9yL01FVEEtSU5GL01BTklGRVNULk1GIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMudmVjdG9yL01FVEEtSU5GL01BTklGRVNULk1GCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNkMjllYjUKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy52ZWN0b3IvTUVUQS1JTkYvTUFOSUZFU1QuTUYKQEAgLTAsMCArMSwyNSBAQAorTWFuaWZlc3QtVmVyc2lvbjogMS4wCitCdW5kbGUtTWFuaWZlc3RWZXJzaW9uOiAyCitCdW5kbGUtTmFtZTogJXBsdWdpbk5hbWUKK0J1bmRsZS1TeW1ib2xpY05hbWU6IG9yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy52ZWN0b3I7c2luZ2xldG9uOj10cnVlCitCdW5kbGUtVmVyc2lvbjogMS4yLjEKK0J1bmRsZS1DbGFzc1BhdGg6IC4KK0J1bmRsZS1BY3RpdmF0b3I6IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IucHJlc2VudGF0aW9uLlZlY3RvckVkaXRvclBsdWdpbiRJbXBsZW1lbnRhdGlvbgorQnVuZGxlLVZlbmRvcjogJXByb3ZpZGVyTmFtZQorQnVuZGxlLUxvY2FsaXphdGlvbjogcGx1Z2luCitCdW5kbGUtUmVxdWlyZWRFeGVjdXRpb25FbnZpcm9ubWVudDogSjJTRS0xLjUKK0V4cG9ydC1QYWNrYWdlOiBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLnByZXNlbnRhdGlvbgorUmVxdWlyZS1CdW5kbGU6IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZSwKKyBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlczt2aXNpYmlsaXR5Oj1yZWV4cG9ydCwKKyBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yO3Zpc2liaWxpdHk6PXJlZXhwb3J0LAorIG9yZy5lY2xpcHNlLmVtZi5lY29yZS54bWk7dmlzaWJpbGl0eTo9cmVleHBvcnQsCisgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWk7dmlzaWJpbGl0eTo9cmVleHBvcnQsCisgb3JnLmVjbGlwc2UudWkuaWRlO3Zpc2liaWxpdHk6PXJlZXhwb3J0LAorIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVsczt2aXNpYmlsaXR5Oj1yZWV4cG9ydCwKKyBvcmcuZWNsaXBzZS5zdGVtLmNvcmU7dmlzaWJpbGl0eTo9cmVleHBvcnQsCisgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLmVkaXQ7dmlzaWJpbGl0eTo9cmVleHBvcnQsCisgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9uczt2aXNpYmlsaXR5Oj1yZWV4cG9ydCwKKyBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHM7dmlzaWJpbGl0eTo9cmVleHBvcnQsCisgb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzO2J1bmRsZS12ZXJzaW9uPSIxLjEuMCIsCisgb3JnLmVjbGlwc2Uuc3RlbS51aTtidW5kbGUtdmVyc2lvbj0iMS4xLjAiCitCdW5kbGUtQWN0aXZhdGlvblBvbGljeTogbGF6eQpkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMudmVjdG9yL2J1aWxkLnByb3BlcnRpZXMgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy52ZWN0b3IvYnVpbGQucHJvcGVydGllcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYzIwMDRkCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMudmVjdG9yL2J1aWxkLnByb3BlcnRpZXMKQEAgLTAsMCArMSwxNyBAQAorCisjIDxjb3B5cmlnaHQ+CisjIDwvY29weXJpZ2h0PgorIworIyAkSWQkCisKK2Jpbi5pbmNsdWRlcyA9IC4sXAorICAgICAgICAgICAgICAgaWNvbnMvLFwKKyAgICAgICAgICAgICAgIE1FVEEtSU5GLyxcCisgICAgICAgICAgICAgICBwbHVnaW4ueG1sLFwKKyAgICAgICAgICAgICAgIHBsdWdpbi5wcm9wZXJ0aWVzLFwKKyAgICAgICAgICAgICAgIHBsdWdpbl96aC5wcm9wZXJ0aWVzLFwKKyAgICAgICAgICAgICAgIHBsdWdpbl9rci5wcm9wZXJ0aWVzLFwKKyAgICAgICAgICAgICAgIHBsdWdpbl9kZS5wcm9wZXJ0aWVzCitqYXJzLmNvbXBpbGUub3JkZXIgPSAuCitzb3VyY2UuLiA9IHNyYy8KK291dHB1dC4uID0gYmluLwpkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMudmVjdG9yL2ljb25zL2Z1bGwvb2JqMTYvVmVjdG9yTW9kZWxGaWxlLmdpZiBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzLnZlY3Rvci9pY29ucy9mdWxsL29iajE2L1ZlY3Rvck1vZGVsRmlsZS5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTAyZjY1ZQotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzLnZlY3Rvci9pY29ucy9mdWxsL29iajE2L1ZlY3Rvck1vZGVsRmlsZS5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMudmVjdG9yL2ljb25zL2Z1bGwvd2l6YmFuL05ld1ZlY3Rvci5naWYgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy52ZWN0b3IvaWNvbnMvZnVsbC93aXpiYW4vTmV3VmVjdG9yLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41Njg4NzRhCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMudmVjdG9yL2ljb25zL2Z1bGwvd2l6YmFuL05ld1ZlY3Rvci5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMudmVjdG9yL3BsdWdpbi5wcm9wZXJ0aWVzIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMudmVjdG9yL3BsdWdpbi5wcm9wZXJ0aWVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgwODQ4NzAKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy52ZWN0b3IvcGx1Z2luLnByb3BlcnRpZXMKQEAgLTAsMCArMSw1NyBAQAorCisjIDxjb3B5cmlnaHQ+CisjIDwvY29weXJpZ2h0PgorIworIyAkSWQkCisKK3BsdWdpbk5hbWUgPSBWZWN0b3IgRWRpdG9yCitwcm92aWRlck5hbWUgPSB3d3cuZWNsaXBzZS5vcmcKKworX1VJX1ZlY3RvckVkaXRvcl9tZW51ID0gJlZlY3RvciBFZGl0b3IKKworX1VJX0NyZWF0ZUNoaWxkX21lbnVfaXRlbSA9ICZOZXcgQ2hpbGQKK19VSV9DcmVhdGVTaWJsaW5nX21lbnVfaXRlbSA9IE4mZXcgU2libGluZworCitfVUlfU2hvd1Byb3BlcnRpZXNWaWV3X21lbnVfaXRlbSA9IFNob3cgJlByb3BlcnRpZXMgVmlldworX1VJX1JlZnJlc2hWaWV3ZXJfbWVudV9pdGVtID0gJlJlZnJlc2gKKworX1VJX1NlbGVjdGlvblBhZ2VfbGFiZWwgPSBTZWxlY3Rpb24KK19VSV9QYXJlbnRQYWdlX2xhYmVsID0gUGFyZW50CitfVUlfTGlzdFBhZ2VfbGFiZWwgPSBMaXN0CitfVUlfVHJlZVBhZ2VfbGFiZWwgPSBUcmVlCitfVUlfVGFibGVQYWdlX2xhYmVsID0gVGFibGUKK19VSV9UcmVlV2l0aENvbHVtbnNQYWdlX2xhYmVsID0gVHJlZSB3aXRoIENvbHVtbnMKK19VSV9PYmplY3RDb2x1bW5fbGFiZWwgPSBPYmplY3QKK19VSV9TZWxmQ29sdW1uX2xhYmVsID0gU2VsZgorCitfVUlfTm9PYmplY3RTZWxlY3RlZCA9IFNlbGVjdGVkIE5vdGhpbmcKK19VSV9TaW5nbGVPYmplY3RTZWxlY3RlZCA9IFNlbGVjdGVkIE9iamVjdDogezB9CitfVUlfTXVsdGlPYmplY3RTZWxlY3RlZCA9IFNlbGVjdGVkIHswfSBPYmplY3RzCisKK19VSV9PcGVuRWRpdG9yRXJyb3JfbGFiZWwgPSBPcGVuIEVkaXRvcgorCitfVUlfV2l6YXJkX2NhdGVnb3J5ID0gRXhhbXBsZSBFTUYgTW9kZWwgQ3JlYXRpb24gV2l6YXJkcworCitfVUlfQ3JlYXRlTW9kZWxFcnJvcl9tZXNzYWdlID0gUHJvYmxlbXMgZW5jb3VudGVyZWQgaW4gZmlsZSAiezB9IgorCitfVUlfVmVjdG9yTW9kZWxXaXphcmRfbGFiZWwgPSBWZWN0b3IgTW9kZWwKK19VSV9WZWN0b3JNb2RlbFdpemFyZF9kZXNjcmlwdGlvbiA9IENyZWF0ZSBhIG5ldyBWZWN0b3IgbW9kZWwKKworX1VJX1ZlY3RvckVkaXRvcl9sYWJlbCA9IFZlY3RvciBNb2RlbCBFZGl0b3IKKworX1VJX1ZlY3RvckVkaXRvckZpbGVuYW1lRGVmYXVsdEJhc2UgPSBNeQorX1VJX1ZlY3RvckVkaXRvckZpbGVuYW1lRXh0ZW5zaW9ucyA9IHZlY3RvcgorCitfVUlfV2l6YXJkX2xhYmVsID0gTmV3CisKK19XQVJOX0ZpbGVuYW1lRXh0ZW5zaW9uID0gVGhlIGZpbGUgbmFtZSBtdXN0IGVuZCBpbiAnJy57MH0nJworX1dBUk5fRmlsZW5hbWVFeHRlbnNpb25zID0gVGhlIGZpbGUgbmFtZSBtdXN0IGhhdmUgb25lIG9mIHRoZSBmb2xsb3dpbmcgZXh0ZW5zaW9uczogezB9CisKK19VSV9Nb2RlbE9iamVjdCA9ICZNb2RlbCBPYmplY3QKK19VSV9YTUxFbmNvZGluZyA9ICZYTUwgRW5jb2RpbmcKK19VSV9YTUxFbmNvZGluZ0Nob2ljZXMgPSBVVEYtOCBBU0NJSSBVVEYtMTYgVVRGLTE2QkUgVVRGLTE2TEUgSVNPLTg4NTktMQorX1VJX1dpemFyZF9pbml0aWFsX29iamVjdF9kZXNjcmlwdGlvbiA9IFNlbGVjdCBhIG1vZGVsIG9iamVjdCB0byBjcmVhdGUKKworX1VJX0ZpbGVDb25mbGljdF9sYWJlbCA9IEZpbGUgQ29uZmxpY3QKK19XQVJOX0ZpbGVDb25mbGljdCA9IFRoZXJlIGFyZSB1bnNhdmVkIGNoYW5nZXMgdGhhdCBjb25mbGljdCB3aXRoIGNoYW5nZXMgbWFkZSBvdXRzaWRlIHRoZSBlZGl0b3IuICBEbyB5b3Ugd2lzaCB0byBkaXNjYXJkIHRoaXMgZWRpdG9yJ3MgY2hhbmdlcz8KKwpkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMudmVjdG9yL3BsdWdpbi54bWwgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy52ZWN0b3IvcGx1Z2luLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMDk5NzFjCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMudmVjdG9yL3BsdWdpbi54bWwKQEAgLTAsMCArMSw0OCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzw/ZWNsaXBzZSB2ZXJzaW9uPSIzLjAiPz4KKworPCEtLQorIDxjb3B5cmlnaHQ+CisgPC9jb3B5cmlnaHQ+CisKKyAkSWQkCistLT4KKworPHBsdWdpbj4KKworICAgPGV4dGVuc2lvbiBwb2ludD0ib3JnLmVjbGlwc2UudWkubmV3V2l6YXJkcyI+CisgICAgICA8Y2F0ZWdvcnkKKyAgICAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5lbWYuZWNvcmUuV2l6YXJkLmNhdGVnb3J5LklEIgorICAgICAgICAgICAgbmFtZT0iJV9VSV9XaXphcmRfY2F0ZWdvcnkiLz4KKyAgICAgIDx3aXphcmQKKyAgICAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLnByZXNlbnRhdGlvbi5WZWN0b3JNb2RlbFdpemFyZElEIgorICAgICAgICAgICAgbmFtZT0iJV9VSV9WZWN0b3JNb2RlbFdpemFyZF9sYWJlbCIKKyAgICAgICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLnByZXNlbnRhdGlvbi5WZWN0b3JNb2RlbFdpemFyZCIKKyAgICAgICAgICAgIGNhdGVnb3J5PSJvcmcuZWNsaXBzZS5lbWYuZWNvcmUuV2l6YXJkLmNhdGVnb3J5LklEIgorICAgICAgICAgICAgaWNvbj0iaWNvbnMvZnVsbC9vYmoxNi9WZWN0b3JNb2RlbEZpbGUuZ2lmIj4KKyAgICAgICAgIDxkZXNjcmlwdGlvbj4lX1VJX1ZlY3Rvck1vZGVsV2l6YXJkX2Rlc2NyaXB0aW9uPC9kZXNjcmlwdGlvbj4KKyAgICAgICAgIDxzZWxlY3Rpb24gY2xhc3M9Im9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklSZXNvdXJjZSIvPgorICAgICAgPC93aXphcmQ+CisgICA8L2V4dGVuc2lvbj4KKworICAgPGV4dGVuc2lvbiBwb2ludD0ib3JnLmVjbGlwc2UudWkuZWRpdG9ycyI+CisgICAgICA8ZWRpdG9yCisgICAgICAgICAgICBpZD0ib3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5wcmVzZW50YXRpb24uVmVjdG9yRWRpdG9ySUQiCisgICAgICAgICAgICBuYW1lPSIlX1VJX1ZlY3RvckVkaXRvcl9sYWJlbCIKKyAgICAgICAgICAgIGljb249Imljb25zL2Z1bGwvb2JqMTYvVmVjdG9yTW9kZWxGaWxlLmdpZiIKKyAgICAgICAgICAgIGV4dGVuc2lvbnM9InZlY3RvciIKKyAgICAgICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLnByZXNlbnRhdGlvbi5WZWN0b3JFZGl0b3IiCisgICAgICAgICAgICBjb250cmlidXRvckNsYXNzPSJvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLnByZXNlbnRhdGlvbi5WZWN0b3JBY3Rpb25CYXJDb250cmlidXRvciI+CisgICAgICA8L2VkaXRvcj4KKyAgIDwvZXh0ZW5zaW9uPgorICAgPGV4dGVuc2lvbgorICAgICAgICAgcG9pbnQ9Im9yZy5lY2xpcHNlLnVpLnN0YXJ0dXAiPgorICAgICAgPHN0YXJ0dXAKKyAgICAgICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLnByZXNlbnRhdGlvbi5WZWN0b3JQcm9wZXJ0eVN0cmluZ1Byb3ZpZGVyQWRhcHRlckZhY3RvcnkiPgorICAgICAgPC9zdGFydHVwPgorICAgICAgPHN0YXJ0dXAKKyAgICAgICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLnByZXNlbnRhdGlvbi5WZWN0b3JSZWxhdGl2ZVZhbHVlUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSI+CisgICAgICA8L3N0YXJ0dXA+CisgICA8L2V4dGVuc2lvbj4KKworPC9wbHVnaW4+CmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy52ZWN0b3IvcGx1Z2luX2RlLnByb3BlcnRpZXMgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy52ZWN0b3IvcGx1Z2luX2RlLnByb3BlcnRpZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmI1MTZlYQotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzLnZlY3Rvci9wbHVnaW5fZGUucHJvcGVydGllcwpAQCAtMCwwICsxLDU3IEBACisKKyMgPGNvcHlyaWdodD4KKyMgPC9jb3B5cmlnaHQ+CisjCisjICRJZCQKKworcGx1Z2luTmFtZT1cdTAwZGNiZXJ0clx1MDBlNGdlci1FZGl0b3IKK3Byb3ZpZGVyTmFtZT13d3cuZWNsaXBzZS5vcmcKKworX1VJX1ZlY3RvckVkaXRvcl9tZW51PSZWZWN0b3IgRWRpdG9yCisKK19VSV9DcmVhdGVDaGlsZF9tZW51X2l0ZW09Jk5ldyBDaGlsZAorX1VJX0NyZWF0ZVNpYmxpbmdfbWVudV9pdGVtPU4mZXVlcyBHZXNjaHdpc3RlcnRlaWwKKworX1VJX1Nob3dQcm9wZXJ0aWVzVmlld19tZW51X2l0ZW09U2hvdyAmIFByb3BlcnRpZXMgVmlldworX1VJX1JlZnJlc2hWaWV3ZXJfbWVudV9pdGVtPSZSZWZyZXNoCisKK19VSV9TZWxlY3Rpb25QYWdlX2xhYmVsPUF1c3dhaGwKK19VSV9QYXJlbnRQYWdlX2xhYmVsPUVsdGVybnRlaWwKK19VSV9MaXN0UGFnZV9sYWJlbD1MaXN0ZQorX1VJX1RyZWVQYWdlX2xhYmVsPUJhdW0KK19VSV9UYWJsZVBhZ2VfbGFiZWw9VGFiZWxsZQorX1VJX1RyZWVXaXRoQ29sdW1uc1BhZ2VfbGFiZWw9QmF1bSBtaXQgU3BhbHRlbgorX1VJX09iamVjdENvbHVtbl9sYWJlbD1PYmpla3QKK19VSV9TZWxmQ29sdW1uX2xhYmVsPVNlbGJzdAorCitfVUlfTm9PYmplY3RTZWxlY3RlZD1OaWNodHMgYXVzZ2V3XHUwMGU0aGx0CitfVUlfU2luZ2xlT2JqZWN0U2VsZWN0ZWQ9QXVzZ2V3XHUwMGU0aGx0ZXMgT2JqZWt0OiB7MH0KK19VSV9NdWx0aU9iamVjdFNlbGVjdGVkPUF1c2dld1x1MDBlNGhsdGUgezB9IE9iamVrdGUKKworX1VJX09wZW5FZGl0b3JFcnJvcl9sYWJlbD1FZGl0b3IgXHUwMGY2ZmZuZW4KKworX1VJX1dpemFyZF9jYXRlZ29yeT1CZWlzcGllbCBFTUYgTW9kZWxsIEVyc3RlbGx1bmdzYXNzaXN0ZW50CisKK19VSV9DcmVhdGVNb2RlbEVycm9yX21lc3NhZ2U9QXVmZ2V0cmV0ZW5lIFByb2JsZW1lIGluIGRlciBEYXRlaSAiezB9IgorCitfVUlfVmVjdG9yTW9kZWxXaXphcmRfbGFiZWw9XHUwMGRjYmVydHJhZ2VybW9kZWxsCitfVUlfVmVjdG9yTW9kZWxXaXphcmRfZGVzY3JpcHRpb249TmV1ZXMgVmVrdG9yLU1vZGVsbCBlcnN0ZWxsZW4KKworX1VJX1ZlY3RvckVkaXRvcl9sYWJlbD1cdTAwZGNiZXJ0cmFnZXJtb2RlbGwtRWRpdG9yCisKK19VSV9WZWN0b3JFZGl0b3JGaWxlbmFtZURlZmF1bHRCYXNlPU1laW4KK19VSV9WZWN0b3JFZGl0b3JGaWxlbmFtZUV4dGVuc2lvbnM9XHUwMGRjYmVydHJcdTAwZTRnZXIKKworX1VJX1dpemFyZF9sYWJlbD1OZXUKKworX1dBUk5fRmlsZW5hbWVFeHRlbnNpb249RGVyIERhdGVpbmFtZSBtdXNzIGF1ZiAiLnswfSIgZW5kZW4KK19XQVJOX0ZpbGVuYW1lRXh0ZW5zaW9ucz1EZXIgRGF0ZWluYW1lIG11c3MgZWluZSBkZXIgZm9sZ2VuZGVuIEVuZHVuZ2VuIGhhYmVuOiB7MH0KKworX1VJX01vZGVsT2JqZWN0PSZNb2RlbCBPYmplY3QKK19VSV9YTUxFbmNvZGluZz0mWE1MIEVuY29kaW5nCitfVUlfWE1MRW5jb2RpbmdDaG9pY2VzPVVURi04IEFTQ0lJIFVURi0xNiBVVEYtMTZCRSBVVEYtMTZMRSBJU08tODg1OS0xCitfVUlfV2l6YXJkX2luaXRpYWxfb2JqZWN0X2Rlc2NyaXB0aW9uPVp1IGVyemV1Z2VuZGVzIE1vZGVsbG9iamVrdCB3XHUwMGU0aGxlbgorCitfVUlfRmlsZUNvbmZsaWN0X2xhYmVsPURhdGVpa29uZmxpa3QKK19XQVJOX0ZpbGVDb25mbGljdD1FcyBnaWJ0IG5pY2h0IGdlc3BlaWNoZXJ0ZSBcdTAwYzRuZGVydW5nZW4sIGRpZSBLb25mbGlrdGUgbWl0IFx1MDBjNG5kZXJ1bmdlbiBhdVx1MDBkZmVyaGFsYiBkZXMgRWRpdG9ycyBlcnpldWdlbi4gTVx1MDBmNmNodGVuIFNpZSBkaWUgXHUwMGM0bmRlcnVuZ2VuIGltIEVkaXRvciB2ZXJ3ZXJmZW4/CisKZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzLnZlY3Rvci9wbHVnaW5fa3IucHJvcGVydGllcyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzLnZlY3Rvci9wbHVnaW5fa3IucHJvcGVydGllcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MDA2Y2ZmCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMudmVjdG9yL3BsdWdpbl9rci5wcm9wZXJ0aWVzCkBAIC0wLDAgKzEsNTcgQEAKKworIyA8Y29weXJpZ2h0PgorIyA8L2NvcHlyaWdodD4KKyMKKyMgJElkJAorCitwbHVnaW5OYW1lPVx1YmNhMVx1ZDEzMCBcdWQzYjhcdWM5ZDFcdWFlMzAKK3Byb3ZpZGVyTmFtZT13d3cuZWNsaXBzZS5vcmcKKworX1VJX1ZlY3RvckVkaXRvcl9tZW51PSZWZWN0b3IgRWRpdG9yCisKK19VSV9DcmVhdGVDaGlsZF9tZW51X2l0ZW09Jk5ldyBDaGlsZAorX1VJX0NyZWF0ZVNpYmxpbmdfbWVudV9pdGVtPU4mICBcdWQ2MTVcdWM4MWMgXHVjNzkwXHViOWU0CisKK19VSV9TaG93UHJvcGVydGllc1ZpZXdfbWVudV9pdGVtPVx1ZDQ1Y1x1YzJkYyBcdWJjMGYgXHVjMThkXHVjMTMxXHViY2Y0XHVhZTMwCitfVUlfUmVmcmVzaFZpZXdlcl9tZW51X2l0ZW09JlJlZnJlc2gKKworX1VJX1NlbGVjdGlvblBhZ2VfbGFiZWw9XHVjMTIwXHVkMGRkCitfVUlfUGFyZW50UGFnZV9sYWJlbD1cdWJkODBcdWJhYTgKK19VSV9MaXN0UGFnZV9sYWJlbD1cdWJhYTlcdWI4NWQKK19VSV9UcmVlUGFnZV9sYWJlbD1cdWIwOThcdWJiMzQKK19VSV9UYWJsZVBhZ2VfbGFiZWw9XHVkMTRjXHVjNzc0XHViZTE0CitfVUlfVHJlZVdpdGhDb2x1bW5zUGFnZV9sYWJlbD1cdWIwOThcdWJiMzRcdWM2NDAgXHVjNWY0CitfVUlfT2JqZWN0Q29sdW1uX2xhYmVsPVx1YWMxY1x1Y2NiNAorX1VJX1NlbGZDb2x1bW5fbGFiZWw9XHVjMTQwXHVkNTA0CisKK19VSV9Ob09iamVjdFNlbGVjdGVkPVx1YzU0NFx1YmIzNFx1YWM4M1x1YjNjNCBcdWM1NDggXHVjMTIwXHVkMGRkXHVkNTY4CitfVUlfU2luZ2xlT2JqZWN0U2VsZWN0ZWQ9XHVjMTIwXHVkMGRkXHVkNTVjIFx1YWMxZFx1Y2NiNCA6IHswfQorX1VJX011bHRpT2JqZWN0U2VsZWN0ZWQ9XHVjMTIwXHVkMGRkXHViNDFjIHswfSBcdWFjMWRcdWNjYjQKKworX1VJX09wZW5FZGl0b3JFcnJvcl9sYWJlbD1cdWM2MjRcdWQ1MDggXHVjNWQwXHViNTE0XHVkMTMwCisKK19VSV9XaXphcmRfY2F0ZWdvcnk9XHVjNjA4XHVjODFjIEVNRiBcdWJhYThcdWIzNzggXHVjMGRkXHVjMTMxIFx1YjljOFx1YmM5NVx1YzBhYworCitfVUlfQ3JlYXRlTW9kZWxFcnJvcl9tZXNzYWdlPVx1ZDMwY1x1Yzc3YyAnezB9ICJcdWM1ZDBcdWMxMWMgXHViYjM4XHVjODFjIFx1YmMxY1x1YzBkZAorCitfVUlfVmVjdG9yTW9kZWxXaXphcmRfbGFiZWw9XHViY2ExXHVkMTMwIFx1YmFhOFx1YjM3OAorX1VJX1ZlY3Rvck1vZGVsV2l6YXJkX2Rlc2NyaXB0aW9uPVx1YzBjOFx1Yjg1Y1x1YzZiNCBcdWJjYTFcdWQxMzAgXHViYWE4XHViMzc4XHVjNzQ0IFx1YjljY1x1YjRlNFx1YWUzMAorCitfVUlfVmVjdG9yRWRpdG9yX2xhYmVsPVx1YmNhMVx1ZDEzMCBcdWJhYThcdWIzNzggXHVkM2I4XHVjOWQxXHVhZTMwCisKK19VSV9WZWN0b3JFZGl0b3JGaWxlbmFtZURlZmF1bHRCYXNlPVx1YjA5OFx1Yzc1OAorX1VJX1ZlY3RvckVkaXRvckZpbGVuYW1lRXh0ZW5zaW9ucz1cdWJjYTFcdWQxMzAKKworX1VJX1dpemFyZF9sYWJlbD1cdWMwYzhcdWI4NWNcdWM2YjQKKworX1dBUk5fRmlsZW5hbWVFeHRlbnNpb249XHVkMzBjXHVjNzdjIFx1Yzc3NFx1Yjk4NFx1Yzc0MCAiLnswfSJcdWI4NWMgXHViMDVkXHViMDk4XHVjNTdjXHVkNTY4LgorX1dBUk5fRmlsZW5hbWVFeHRlbnNpb25zPVx1ZDMwY1x1Yzc3YyBcdWM3NzRcdWI5ODRcdWM3NDAgXHViMmU0XHVjNzRjIFx1ZDY1NVx1YzdhNVx1Yzc5MCBcdWM5MTEgXHVkNTU4XHViMDk4XHViOTdjIFx1YWMwMFx1YzgzOFx1YzU3Y1x1ZDU2OCA6IHswfQorCitfVUlfTW9kZWxPYmplY3Q9Jk1vZGVsIE9iamVjdAorX1VJX1hNTEVuY29kaW5nPSZYTUwgRW5jb2RpbmcKK19VSV9YTUxFbmNvZGluZ0Nob2ljZXM9VVRGIC0gOCBBU0NJSSBVVEYgLSAxNiBVVEYgLSAxNkJFIFVURiAtIDE2TEUgSVNPIC0gODg1OSAtIDEKK19VSV9XaXphcmRfaW5pdGlhbF9vYmplY3RfZGVzY3JpcHRpb249XHVjMGRkXHVjMTMxXHVkNTYwIFx1YmFhOFx1YjM3OCBcdWFjMWNcdWNjYjQgXHVjMTIwXHVkMGRkCisKK19VSV9GaWxlQ29uZmxpY3RfbGFiZWw9XHVkMzBjXHVjNzdjIFx1Y2RhOVx1YjNjYworX1dBUk5fRmlsZUNvbmZsaWN0PVx1YzgwMFx1YzdhNVx1YjQxOFx1YzljMCBcdWM1NGFcdWM3NDAgXHVjMGFjXHVkNTZkXHViNGU0XHVjNzc0IFx1ZDNiOFx1YzlkMVx1YWUzMCBcdWM2NzhcdWJkODBcdWM3NTggXHViY2MwXHVhY2JkIFx1YzBhY1x1ZDU2ZFx1YjRlNFx1YWNmYyBcdWNkYTlcdWIzY2NcdWQ1NjguIFx1Yzc3NCBcdWQzYjhcdWM5ZDFcdWFlMzBcdWM3NTggXHViY2MwXHVhY2JkIFx1YzBhY1x1ZDU2ZFx1YjRlNFx1Yzc0NCBcdWNkZThcdWMxOGMgXHVkNTU4XHVjMmRjXHVhY2EwXHVjMmI1XHViMmM4XHVhZTRjPworCmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy52ZWN0b3IvcGx1Z2luX3poLnByb3BlcnRpZXMgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy52ZWN0b3IvcGx1Z2luX3poLnByb3BlcnRpZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWQwZWQwZgotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzLnZlY3Rvci9wbHVnaW5femgucHJvcGVydGllcwpAQCAtMCwwICsxLDU3IEBACisKKyMgPGNvcHlyaWdodD4KKyMgPC9jb3B5cmlnaHQ+CisjCisjICRJZCQKKworcGx1Z2luTmFtZT1cdTVhOTJcdTRlY2JcdTdmMTZcdThmOTFcdTU2NjgKK3Byb3ZpZGVyTmFtZT13d3cuZWNsaXBzZS5vcmcKKworX1VJX1ZlY3RvckVkaXRvcl9tZW51PSZWZWN0b3IgRWRpdG9yCisKK19VSV9DcmVhdGVDaGlsZF9tZW51X2l0ZW09Jk5ldyBDaGlsZAorX1VJX0NyZWF0ZVNpYmxpbmdfbWVudV9pdGVtPVx1NjViMFx1NzUxZlx1NjIxMFx1NGUwMFx1NGUyYVx1NTE0NFx1NWYxZlx1N2M3YgorCitfVUlfU2hvd1Byb3BlcnRpZXNWaWV3X21lbnVfaXRlbT1cdTY2M2VcdTc5M2FcdTU0OGNcdTVjNWVcdTYwMjdcdTY3ZTVcdTc3MGIKK19VSV9SZWZyZXNoVmlld2VyX21lbnVfaXRlbT0mUmVmcmVzaAorCitfVUlfU2VsZWN0aW9uUGFnZV9sYWJlbD1cdTkwMDlcdTYyZTkKK19VSV9QYXJlbnRQYWdlX2xhYmVsPVx1NWJiNlx1OTU3ZgorX1VJX0xpc3RQYWdlX2xhYmVsPVx1NzZlZVx1NWY1NQorX1VJX1RyZWVQYWdlX2xhYmVsPVx1NjgxMQorX1VJX1RhYmxlUGFnZV9sYWJlbD1cdTg4NjgKK19VSV9UcmVlV2l0aENvbHVtbnNQYWdlX2xhYmVsPVx1NTIwNlx1NTIxN1x1NzY4NFx1NjgxMQorX1VJX09iamVjdENvbHVtbl9sYWJlbD1cdTViZjlcdThjNjEKK19VSV9TZWxmQ29sdW1uX2xhYmVsPVx1ODFlYVx1NWRmMQorCitfVUlfTm9PYmplY3RTZWxlY3RlZD1cdTY1ZTBcdTkwMDlcdTViOWFcdTUxODVcdTViYjkKK19VSV9TaW5nbGVPYmplY3RTZWxlY3RlZD1cdTkwMDlcdTYyZTlcdTViZjlcdThjNjFcdWZmMWF7MH0KK19VSV9NdWx0aU9iamVjdFNlbGVjdGVkPVx1OTAwOVx1NjJlOXswfVx1NWJmOVx1OGM2MQorCitfVUlfT3BlbkVkaXRvckVycm9yX2xhYmVsPVx1NjI1M1x1NWYwMFx1N2YxNlx1OGY5MVx1NTY2OAorCitfVUlfV2l6YXJkX2NhdGVnb3J5PVx1NGY4Ylx1NTk4MkVNRlx1NmEyMVx1NTc4Ylx1NTIxYlx1NWVmYVx1NTQxMVx1NWJmYworCitfVUlfQ3JlYXRlTW9kZWxFcnJvcl9tZXNzYWdlPVx1NTcyOFx1NjU4N1x1NGVmNlx1MjAxY3swfVx1MjAxZFx1NGUyZFx1OTA0N1x1NTIzMFx1NzY4NFx1OTVlZVx1OTg5OAorCitfVUlfVmVjdG9yTW9kZWxXaXphcmRfbGFiZWw9XHU1YTkyXHU0ZWNiXHU2YTIxXHU1NzhiCitfVUlfVmVjdG9yTW9kZWxXaXphcmRfZGVzY3JpcHRpb249XHU1MjFiXHU1ZWZhXHU0ZTAwXHU0ZTJhXHU2NWIwXHU3Njg0XHU0ZjIwXHU2N2QzXHU1YTkyXHU0ZWNiXHU2YTIxXHU1NzhiCisKK19VSV9WZWN0b3JFZGl0b3JfbGFiZWw9XHU1YTkyXHU0ZWNiXHU2YTIxXHU1NzhiXHU3ZjE2XHU4ZjkxXHU1NjY4CisKK19VSV9WZWN0b3JFZGl0b3JGaWxlbmFtZURlZmF1bHRCYXNlPVx1NjIxMVx1NzY4NAorX1VJX1ZlY3RvckVkaXRvckZpbGVuYW1lRXh0ZW5zaW9ucz1cdTRmMjBcdTY0YWRcdTVhOTJcdTRlY2IKKworX1VJX1dpemFyZF9sYWJlbD1cdTY1YjBcdTVlZmEKKworX1dBUk5fRmlsZW5hbWVFeHRlbnNpb249XHU2NTg3XHU0ZWY2XHU1NDBkXHU1ZmM1XHU5ODdiXHU0ZWU1J3swfSAnJ1x1N2VkM1x1NWMzZQorX1dBUk5fRmlsZW5hbWVFeHRlbnNpb25zPVx1NjU4N1x1NGVmNlx1NTQwZFx1NWZjNVx1OTg3Ylx1NTE3N1x1NjcwOVx1NGVlNVx1NGUwYlx1NjI2OVx1NWM1NVx1NTQwZFx1NGU0Ylx1NGUwMFx1ZmYxYXswfQorCitfVUlfTW9kZWxPYmplY3Q9Jk1vZGVsIE9iamVjdAorX1VJX1hNTEVuY29kaW5nPSZYTUwgRW5jb2RpbmcKK19VSV9YTUxFbmNvZGluZ0Nob2ljZXM9VVRGLTggQVNDSUkgVVRGLTE2IFVURi0xNkJFIFVURi0xNkxFIElTTy04ODU5LTEKK19VSV9XaXphcmRfaW5pdGlhbF9vYmplY3RfZGVzY3JpcHRpb249XHU5MDA5XHU2MmU5XHU1MjFiXHU1ZWZhXHU0ZTAwXHU0ZTJhXHU2YTIxXHU1NzhiXHU1YmY5XHU4YzYxCisKK19VSV9GaWxlQ29uZmxpY3RfbGFiZWw9XHU2NTg3XHU0ZWY2XHU1MWIyXHU3YTgxCitfV0FSTl9GaWxlQ29uZmxpY3Q9XHU2NzA5XHU2NzJhXHU0ZmRkXHU1YjU4XHU3Njg0XHU2NmY0XHU2NTM5XHU0ZTBlXHU3ZjE2XHU4ZjkxXHU1NjY4XHU1OTE2XHU3Njg0XHU2NmY0XHU2NTM5XHU1MWIyXHU3YTgxXHUzMDAyXHU0ZjYwXHU2MGYzXHU2NTNlXHU1ZjAzXHU4ZmQ5XHU0ZTJhXHU3ZjE2XHU4ZjkxXHU1NjY4XHU3Njg0XHU2NmY0XHU2NTM5XHU1NDE3XHVmZjFmCisKZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzLnZlY3Rvci9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3ZlY3Rvci9wcmVzZW50YXRpb24vVmVjdG9yQWN0aW9uQmFyQ29udHJpYnV0b3IuamF2YSBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzLnZlY3Rvci9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3ZlY3Rvci9wcmVzZW50YXRpb24vVmVjdG9yQWN0aW9uQmFyQ29udHJpYnV0b3IuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YThkN2JjCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMudmVjdG9yL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvdmVjdG9yL3ByZXNlbnRhdGlvbi9WZWN0b3JBY3Rpb25CYXJDb250cmlidXRvci5qYXZhCkBAIC0wLDAgKzEsNDI3IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IucHJlc2VudGF0aW9uOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAKKyAqIENvcHlyaWdodCAoYykgMjAxMSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4gCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIAorICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wIAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQgCisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbCAKKyAqIAorICogQ29udHJpYnV0b3JzOiAKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7CitpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnVpLnZpZXdlci5JVmlld2VyUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQuZG9tYWluLkVkaXRpbmdEb21haW47CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQuZG9tYWluLklFZGl0aW5nRG9tYWluUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkuYWN0aW9uLkNvbnRyb2xBY3Rpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkuYWN0aW9uLkNyZWF0ZUNoaWxkQWN0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmFjdGlvbi5DcmVhdGVTaWJsaW5nQWN0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmFjdGlvbi5FZGl0aW5nRG9tYWluQWN0aW9uQmFyQ29udHJpYnV0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkuYWN0aW9uLkxvYWRSZXNvdXJjZUFjdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5hY3Rpb24uVmFsaWRhdGVBY3Rpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLkFjdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uQWN0aW9uQ29udHJpYnV0aW9uSXRlbTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSUFjdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSUNvbnRyaWJ1dGlvbkl0ZW07CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklDb250cmlidXRpb25NYW5hZ2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JTWVudUxpc3RlbmVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JTWVudU1hbmFnZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklUb29sQmFyTWFuYWdlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uTWVudU1hbmFnZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLlNlcGFyYXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uU3ViQ29udHJpYnV0aW9uSXRlbTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvblByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVN0cnVjdHVyZWRTZWxlY3Rpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5TZWxlY3Rpb25DaGFuZ2VkRXZlbnQ7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5WaWV3ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuSUVkaXRvclBhcnQ7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuUGFydEluaXRFeGNlcHRpb247CisKKy8qKgorICogVGhpcyBpcyB0aGUgYWN0aW9uIGJhciBjb250cmlidXRvciBmb3IgdGhlIFZlY3RvciBtb2RlbCBlZGl0b3IuCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBWZWN0b3JBY3Rpb25CYXJDb250cmlidXRvcgorCWV4dGVuZHMgRWRpdGluZ0RvbWFpbkFjdGlvbkJhckNvbnRyaWJ1dG9yCisJaW1wbGVtZW50cyBJU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyIHsKKwkvKioKKwkgKiBUaGlzIGtlZXBzIHRyYWNrIG9mIHRoZSBhY3RpdmUgZWRpdG9yLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBJRWRpdG9yUGFydCBhY3RpdmVFZGl0b3JQYXJ0OworCisJLyoqCisJICogVGhpcyBrZWVwcyB0cmFjayBvZiB0aGUgY3VycmVudCBzZWxlY3Rpb24gcHJvdmlkZXIuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIElTZWxlY3Rpb25Qcm92aWRlciBzZWxlY3Rpb25Qcm92aWRlcjsKKworCS8qKgorCSAqIFRoaXMgYWN0aW9uIG9wZW5zIHRoZSBQcm9wZXJ0aWVzIHZpZXcuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIElBY3Rpb24gc2hvd1Byb3BlcnRpZXNWaWV3QWN0aW9uID0KKwkJbmV3IEFjdGlvbihWZWN0b3JFZGl0b3JQbHVnaW4uSU5TVEFOQ0UuZ2V0U3RyaW5nKCJfVUlfU2hvd1Byb3BlcnRpZXNWaWV3X21lbnVfaXRlbSIpKSB7CisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyB2b2lkIHJ1bigpIHsKKwkJCQl0cnkgeworCQkJCQlnZXRQYWdlKCkuc2hvd1ZpZXcoIm9yZy5lY2xpcHNlLnVpLnZpZXdzLlByb3BlcnR5U2hlZXQiKTsKKwkJCQl9CisJCQkJY2F0Y2ggKFBhcnRJbml0RXhjZXB0aW9uIGV4Y2VwdGlvbikgeworCQkJCQlWZWN0b3JFZGl0b3JQbHVnaW4uSU5TVEFOQ0UubG9nKGV4Y2VwdGlvbik7CisJCQkJfQorCQkJfQorCQl9OworCisJLyoqCisJICogVGhpcyBhY3Rpb24gcmVmcmVzaGVzIHRoZSB2aWV3ZXIgb2YgdGhlIGN1cnJlbnQgZWRpdG9yIGlmIHRoZSBlZGl0b3IKKwkgKiBpbXBsZW1lbnRzIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnVpLnZpZXdlci5JVmlld2VyUHJvdmlkZXJ9LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBJQWN0aW9uIHJlZnJlc2hWaWV3ZXJBY3Rpb24gPQorCQluZXcgQWN0aW9uKFZlY3RvckVkaXRvclBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoIl9VSV9SZWZyZXNoVmlld2VyX21lbnVfaXRlbSIpKSB7CisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyBib29sZWFuIGlzRW5hYmxlZCgpIHsKKwkJCQlyZXR1cm4gYWN0aXZlRWRpdG9yUGFydCBpbnN0YW5jZW9mIElWaWV3ZXJQcm92aWRlcjsKKwkJCX0KKworCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgdm9pZCBydW4oKSB7CisJCQkJaWYgKGFjdGl2ZUVkaXRvclBhcnQgaW5zdGFuY2VvZiBJVmlld2VyUHJvdmlkZXIpIHsKKwkJCQkJVmlld2VyIHZpZXdlciA9ICgoSVZpZXdlclByb3ZpZGVyKWFjdGl2ZUVkaXRvclBhcnQpLmdldFZpZXdlcigpOworCQkJCQlpZiAodmlld2VyICE9IG51bGwpIHsKKwkJCQkJCXZpZXdlci5yZWZyZXNoKCk7CisJCQkJCX0KKwkJCQl9CisJCQl9CisJCX07CisKKwkvKioKKwkgKiBUaGlzIHdpbGwgY29udGFpbiBvbmUge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmFjdGlvbi5DcmVhdGVDaGlsZEFjdGlvbn0gY29ycmVzcG9uZGluZyB0byBlYWNoIGRlc2NyaXB0b3IKKwkgKiBnZW5lcmF0ZWQgZm9yIHRoZSBjdXJyZW50IHNlbGVjdGlvbiBieSB0aGUgaXRlbSBwcm92aWRlci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgQ29sbGVjdGlvbjxJQWN0aW9uPiBjcmVhdGVDaGlsZEFjdGlvbnM7CisKKwkvKioKKwkgKiBUaGlzIGlzIHRoZSBtZW51IG1hbmFnZXIgaW50byB3aGljaCBtZW51IGNvbnRyaWJ1dGlvbiBpdGVtcyBzaG91bGQgYmUgYWRkZWQgZm9yIENyZWF0ZUNoaWxkIGFjdGlvbnMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIElNZW51TWFuYWdlciBjcmVhdGVDaGlsZE1lbnVNYW5hZ2VyOworCisJLyoqCisJICogVGhpcyB3aWxsIGNvbnRhaW4gb25lIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5hY3Rpb24uQ3JlYXRlU2libGluZ0FjdGlvbn0gY29ycmVzcG9uZGluZyB0byBlYWNoIGRlc2NyaXB0b3IKKwkgKiBnZW5lcmF0ZWQgZm9yIHRoZSBjdXJyZW50IHNlbGVjdGlvbiBieSB0aGUgaXRlbSBwcm92aWRlci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgQ29sbGVjdGlvbjxJQWN0aW9uPiBjcmVhdGVTaWJsaW5nQWN0aW9uczsKKworCS8qKgorCSAqIFRoaXMgaXMgdGhlIG1lbnUgbWFuYWdlciBpbnRvIHdoaWNoIG1lbnUgY29udHJpYnV0aW9uIGl0ZW1zIHNob3VsZCBiZSBhZGRlZCBmb3IgQ3JlYXRlU2libGluZyBhY3Rpb25zLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBJTWVudU1hbmFnZXIgY3JlYXRlU2libGluZ01lbnVNYW5hZ2VyOworCisJLyoqCisJICogVGhpcyBjcmVhdGVzIGFuIGluc3RhbmNlIG9mIHRoZSBjb250cmlidXRvci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVmVjdG9yQWN0aW9uQmFyQ29udHJpYnV0b3IoKSB7CisJCXN1cGVyKEFERElUSU9OU19MQVNUX1NUWUxFKTsKKwkJbG9hZFJlc291cmNlQWN0aW9uID0gbmV3IExvYWRSZXNvdXJjZUFjdGlvbigpOworCQl2YWxpZGF0ZUFjdGlvbiA9IG5ldyBWYWxpZGF0ZUFjdGlvbigpOworCQljb250cm9sQWN0aW9uID0gbmV3IENvbnRyb2xBY3Rpb24oKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFkZHMgU2VwYXJhdG9ycyBmb3IgZWRpdG9yIGFkZGl0aW9ucyB0byB0aGUgdG9vbCBiYXIuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgY29udHJpYnV0ZVRvVG9vbEJhcihJVG9vbEJhck1hbmFnZXIgdG9vbEJhck1hbmFnZXIpIHsKKwkJdG9vbEJhck1hbmFnZXIuYWRkKG5ldyBTZXBhcmF0b3IoInZlY3Rvci1zZXR0aW5ncyIpKTsKKwkJdG9vbEJhck1hbmFnZXIuYWRkKG5ldyBTZXBhcmF0b3IoInZlY3Rvci1hZGRpdGlvbnMiKSk7CisJfQorCisJLyoqCisJICogVGhpcyBhZGRzIHRvIHRoZSBtZW51IGJhciBhIG1lbnUgYW5kIHNvbWUgc2VwYXJhdG9ycyBmb3IgZWRpdG9yIGFkZGl0aW9ucywKKwkgKiBhcyB3ZWxsIGFzIHRoZSBzdWItbWVudXMgZm9yIG9iamVjdCBjcmVhdGlvbiBpdGVtcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBjb250cmlidXRlVG9NZW51KElNZW51TWFuYWdlciBtZW51TWFuYWdlcikgeworCQlzdXBlci5jb250cmlidXRlVG9NZW51KG1lbnVNYW5hZ2VyKTsKKworCQlJTWVudU1hbmFnZXIgc3VibWVudU1hbmFnZXIgPSBuZXcgTWVudU1hbmFnZXIoVmVjdG9yRWRpdG9yUGx1Z2luLklOU1RBTkNFLmdldFN0cmluZygiX1VJX1ZlY3RvckVkaXRvcl9tZW51IiksICJvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yTWVudUlEIik7CisJCW1lbnVNYW5hZ2VyLmluc2VydEFmdGVyKCJhZGRpdGlvbnMiLCBzdWJtZW51TWFuYWdlcik7CisJCXN1Ym1lbnVNYW5hZ2VyLmFkZChuZXcgU2VwYXJhdG9yKCJzZXR0aW5ncyIpKTsKKwkJc3VibWVudU1hbmFnZXIuYWRkKG5ldyBTZXBhcmF0b3IoImFjdGlvbnMiKSk7CisJCXN1Ym1lbnVNYW5hZ2VyLmFkZChuZXcgU2VwYXJhdG9yKCJhZGRpdGlvbnMiKSk7CisJCXN1Ym1lbnVNYW5hZ2VyLmFkZChuZXcgU2VwYXJhdG9yKCJhZGRpdGlvbnMtZW5kIikpOworCisJCS8vIFByZXBhcmUgZm9yIENyZWF0ZUNoaWxkIGl0ZW0gYWRkaXRpb24gb3IgcmVtb3ZhbC4KKwkJLy8KKwkJY3JlYXRlQ2hpbGRNZW51TWFuYWdlciA9IG5ldyBNZW51TWFuYWdlcihWZWN0b3JFZGl0b3JQbHVnaW4uSU5TVEFOQ0UuZ2V0U3RyaW5nKCJfVUlfQ3JlYXRlQ2hpbGRfbWVudV9pdGVtIikpOworCQlzdWJtZW51TWFuYWdlci5pbnNlcnRCZWZvcmUoImFkZGl0aW9ucyIsIGNyZWF0ZUNoaWxkTWVudU1hbmFnZXIpOworCisJCS8vIFByZXBhcmUgZm9yIENyZWF0ZVNpYmxpbmcgaXRlbSBhZGRpdGlvbiBvciByZW1vdmFsLgorCQkvLworCQljcmVhdGVTaWJsaW5nTWVudU1hbmFnZXIgPSBuZXcgTWVudU1hbmFnZXIoVmVjdG9yRWRpdG9yUGx1Z2luLklOU1RBTkNFLmdldFN0cmluZygiX1VJX0NyZWF0ZVNpYmxpbmdfbWVudV9pdGVtIikpOworCQlzdWJtZW51TWFuYWdlci5pbnNlcnRCZWZvcmUoImFkZGl0aW9ucyIsIGNyZWF0ZVNpYmxpbmdNZW51TWFuYWdlcik7CisKKwkJLy8gRm9yY2UgYW4gdXBkYXRlIGJlY2F1c2UgRWNsaXBzZSBoaWRlcyBlbXB0eSBtZW51cyBub3cuCisJCS8vCisJCXN1Ym1lbnVNYW5hZ2VyLmFkZE1lbnVMaXN0ZW5lcgorCQkJKG5ldyBJTWVudUxpc3RlbmVyKCkgeworCQkJCSBwdWJsaWMgdm9pZCBtZW51QWJvdXRUb1Nob3coSU1lbnVNYW5hZ2VyIG1lbnVNYW5hZ2VyKSB7CisJCQkJCSBtZW51TWFuYWdlci51cGRhdGVBbGwodHJ1ZSk7CisJCQkJIH0KKwkJCSB9KTsKKworCQlhZGRHbG9iYWxBY3Rpb25zKHN1Ym1lbnVNYW5hZ2VyKTsKKwl9CisKKwkvKioKKwkgKiBXaGVuIHRoZSBhY3RpdmUgZWRpdG9yIGNoYW5nZXMsIHRoaXMgcmVtZW1iZXJzIHRoZSBjaGFuZ2UgYW5kIHJlZ2lzdGVycyB3aXRoIGl0IGFzIGEgc2VsZWN0aW9uIHByb3ZpZGVyLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIHNldEFjdGl2ZUVkaXRvcihJRWRpdG9yUGFydCBwYXJ0KSB7CisJCXN1cGVyLnNldEFjdGl2ZUVkaXRvcihwYXJ0KTsKKwkJYWN0aXZlRWRpdG9yUGFydCA9IHBhcnQ7CisKKwkJLy8gU3dpdGNoIHRvIHRoZSBuZXcgc2VsZWN0aW9uIHByb3ZpZGVyLgorCQkvLworCQlpZiAoc2VsZWN0aW9uUHJvdmlkZXIgIT0gbnVsbCkgeworCQkJc2VsZWN0aW9uUHJvdmlkZXIucmVtb3ZlU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyKHRoaXMpOworCQl9CisJCWlmIChwYXJ0ID09IG51bGwpIHsKKwkJCXNlbGVjdGlvblByb3ZpZGVyID0gbnVsbDsKKwkJfQorCQllbHNlIHsKKwkJCXNlbGVjdGlvblByb3ZpZGVyID0gcGFydC5nZXRTaXRlKCkuZ2V0U2VsZWN0aW9uUHJvdmlkZXIoKTsKKwkJCXNlbGVjdGlvblByb3ZpZGVyLmFkZFNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcih0aGlzKTsKKworCQkJLy8gRmFrZSBhIHNlbGVjdGlvbiBjaGFuZ2VkIGV2ZW50IHRvIHVwZGF0ZSB0aGUgbWVudXMuCisJCQkvLworCQkJaWYgKHNlbGVjdGlvblByb3ZpZGVyLmdldFNlbGVjdGlvbigpICE9IG51bGwpIHsKKwkJCQlzZWxlY3Rpb25DaGFuZ2VkKG5ldyBTZWxlY3Rpb25DaGFuZ2VkRXZlbnQoc2VsZWN0aW9uUHJvdmlkZXIsIHNlbGVjdGlvblByb3ZpZGVyLmdldFNlbGVjdGlvbigpKSk7CisJCQl9CisJCX0KKwl9CisKKwkvKioKKwkgKiBUaGlzIGltcGxlbWVudHMge0BsaW5rIG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcn0sCisJICogaGFuZGxpbmcge0BsaW5rIG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuU2VsZWN0aW9uQ2hhbmdlZEV2ZW50fXMgYnkgcXVlcnlpbmcgZm9yIHRoZSBjaGlsZHJlbiBhbmQgc2libGluZ3MKKwkgKiB0aGF0IGNhbiBiZSBhZGRlZCB0byB0aGUgc2VsZWN0ZWQgb2JqZWN0IGFuZCB1cGRhdGluZyB0aGUgbWVudXMgYWNjb3JkaW5nbHkuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgc2VsZWN0aW9uQ2hhbmdlZChTZWxlY3Rpb25DaGFuZ2VkRXZlbnQgZXZlbnQpIHsKKwkJLy8gUmVtb3ZlIGFueSBtZW51IGl0ZW1zIGZvciBvbGQgc2VsZWN0aW9uLgorCQkvLworCQlpZiAoY3JlYXRlQ2hpbGRNZW51TWFuYWdlciAhPSBudWxsKSB7CisJCQlkZXBvcHVsYXRlTWFuYWdlcihjcmVhdGVDaGlsZE1lbnVNYW5hZ2VyLCBjcmVhdGVDaGlsZEFjdGlvbnMpOworCQl9CisJCWlmIChjcmVhdGVTaWJsaW5nTWVudU1hbmFnZXIgIT0gbnVsbCkgeworCQkJZGVwb3B1bGF0ZU1hbmFnZXIoY3JlYXRlU2libGluZ01lbnVNYW5hZ2VyLCBjcmVhdGVTaWJsaW5nQWN0aW9ucyk7CisJCX0KKworCQkvLyBRdWVyeSB0aGUgbmV3IHNlbGVjdGlvbiBmb3IgYXBwcm9wcmlhdGUgbmV3IGNoaWxkL3NpYmxpbmcgZGVzY3JpcHRvcnMKKwkJLy8KKwkJQ29sbGVjdGlvbjw/PiBuZXdDaGlsZERlc2NyaXB0b3JzID0gbnVsbDsKKwkJQ29sbGVjdGlvbjw/PiBuZXdTaWJsaW5nRGVzY3JpcHRvcnMgPSBudWxsOworCisJCUlTZWxlY3Rpb24gc2VsZWN0aW9uID0gZXZlbnQuZ2V0U2VsZWN0aW9uKCk7CisJCWlmIChzZWxlY3Rpb24gaW5zdGFuY2VvZiBJU3RydWN0dXJlZFNlbGVjdGlvbiAmJiAoKElTdHJ1Y3R1cmVkU2VsZWN0aW9uKXNlbGVjdGlvbikuc2l6ZSgpID09IDEpIHsKKwkJCU9iamVjdCBvYmplY3QgPSAoKElTdHJ1Y3R1cmVkU2VsZWN0aW9uKXNlbGVjdGlvbikuZ2V0Rmlyc3RFbGVtZW50KCk7CisKKwkJCUVkaXRpbmdEb21haW4gZG9tYWluID0gKChJRWRpdGluZ0RvbWFpblByb3ZpZGVyKWFjdGl2ZUVkaXRvclBhcnQpLmdldEVkaXRpbmdEb21haW4oKTsKKworCQkJbmV3Q2hpbGREZXNjcmlwdG9ycyA9IGRvbWFpbi5nZXROZXdDaGlsZERlc2NyaXB0b3JzKG9iamVjdCwgbnVsbCk7CisJCQluZXdTaWJsaW5nRGVzY3JpcHRvcnMgPSBkb21haW4uZ2V0TmV3Q2hpbGREZXNjcmlwdG9ycyhudWxsLCBvYmplY3QpOworCQl9CisKKwkJLy8gR2VuZXJhdGUgYWN0aW9ucyBmb3Igc2VsZWN0aW9uOyBwb3B1bGF0ZSBhbmQgcmVkcmF3IHRoZSBtZW51cy4KKwkJLy8KKwkJY3JlYXRlQ2hpbGRBY3Rpb25zID0gZ2VuZXJhdGVDcmVhdGVDaGlsZEFjdGlvbnMobmV3Q2hpbGREZXNjcmlwdG9ycywgc2VsZWN0aW9uKTsKKwkJY3JlYXRlU2libGluZ0FjdGlvbnMgPSBnZW5lcmF0ZUNyZWF0ZVNpYmxpbmdBY3Rpb25zKG5ld1NpYmxpbmdEZXNjcmlwdG9ycywgc2VsZWN0aW9uKTsKKworCQlpZiAoY3JlYXRlQ2hpbGRNZW51TWFuYWdlciAhPSBudWxsKSB7CisJCQlwb3B1bGF0ZU1hbmFnZXIoY3JlYXRlQ2hpbGRNZW51TWFuYWdlciwgY3JlYXRlQ2hpbGRBY3Rpb25zLCBudWxsKTsKKwkJCWNyZWF0ZUNoaWxkTWVudU1hbmFnZXIudXBkYXRlKHRydWUpOworCQl9CisJCWlmIChjcmVhdGVTaWJsaW5nTWVudU1hbmFnZXIgIT0gbnVsbCkgeworCQkJcG9wdWxhdGVNYW5hZ2VyKGNyZWF0ZVNpYmxpbmdNZW51TWFuYWdlciwgY3JlYXRlU2libGluZ0FjdGlvbnMsIG51bGwpOworCQkJY3JlYXRlU2libGluZ01lbnVNYW5hZ2VyLnVwZGF0ZSh0cnVlKTsKKwkJfQorCX0KKworCS8qKgorCSAqIFRoaXMgZ2VuZXJhdGVzIGEge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmFjdGlvbi5DcmVhdGVDaGlsZEFjdGlvbn0gZm9yIGVhY2ggb2JqZWN0IGluIDxjb2RlPmRlc2NyaXB0b3JzPC9jb2RlPiwKKwkgKiBhbmQgcmV0dXJucyB0aGUgY29sbGVjdGlvbiBvZiB0aGVzZSBhY3Rpb25zLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBDb2xsZWN0aW9uPElBY3Rpb24+IGdlbmVyYXRlQ3JlYXRlQ2hpbGRBY3Rpb25zKENvbGxlY3Rpb248Pz4gZGVzY3JpcHRvcnMsIElTZWxlY3Rpb24gc2VsZWN0aW9uKSB7CisJCUNvbGxlY3Rpb248SUFjdGlvbj4gYWN0aW9ucyA9IG5ldyBBcnJheUxpc3Q8SUFjdGlvbj4oKTsKKwkJaWYgKGRlc2NyaXB0b3JzICE9IG51bGwpIHsKKwkJCWZvciAoT2JqZWN0IGRlc2NyaXB0b3IgOiBkZXNjcmlwdG9ycykgeworCQkJCWFjdGlvbnMuYWRkKG5ldyBDcmVhdGVDaGlsZEFjdGlvbihhY3RpdmVFZGl0b3JQYXJ0LCBzZWxlY3Rpb24sIGRlc2NyaXB0b3IpKTsKKwkJCX0KKwkJfQorCQlyZXR1cm4gYWN0aW9uczsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGdlbmVyYXRlcyBhIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5hY3Rpb24uQ3JlYXRlU2libGluZ0FjdGlvbn0gZm9yIGVhY2ggb2JqZWN0IGluIDxjb2RlPmRlc2NyaXB0b3JzPC9jb2RlPiwKKwkgKiBhbmQgcmV0dXJucyB0aGUgY29sbGVjdGlvbiBvZiB0aGVzZSBhY3Rpb25zLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBDb2xsZWN0aW9uPElBY3Rpb24+IGdlbmVyYXRlQ3JlYXRlU2libGluZ0FjdGlvbnMoQ29sbGVjdGlvbjw/PiBkZXNjcmlwdG9ycywgSVNlbGVjdGlvbiBzZWxlY3Rpb24pIHsKKwkJQ29sbGVjdGlvbjxJQWN0aW9uPiBhY3Rpb25zID0gbmV3IEFycmF5TGlzdDxJQWN0aW9uPigpOworCQlpZiAoZGVzY3JpcHRvcnMgIT0gbnVsbCkgeworCQkJZm9yIChPYmplY3QgZGVzY3JpcHRvciA6IGRlc2NyaXB0b3JzKSB7CisJCQkJYWN0aW9ucy5hZGQobmV3IENyZWF0ZVNpYmxpbmdBY3Rpb24oYWN0aXZlRWRpdG9yUGFydCwgc2VsZWN0aW9uLCBkZXNjcmlwdG9yKSk7CisJCQl9CisJCX0KKwkJcmV0dXJuIGFjdGlvbnM7CisJfQorCisJLyoqCisJICogVGhpcyBwb3B1bGF0ZXMgdGhlIHNwZWNpZmllZCA8Y29kZT5tYW5hZ2VyPC9jb2RlPiB3aXRoIHtAbGluayBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uQWN0aW9uQ29udHJpYnV0aW9uSXRlbX1zCisJICogYmFzZWQgb24gdGhlIHtAbGluayBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSUFjdGlvbn1zIGNvbnRhaW5lZCBpbiB0aGUgPGNvZGU+YWN0aW9uczwvY29kZT4gY29sbGVjdGlvbiwKKwkgKiBieSBpbnNlcnRpbmcgdGhlbSBiZWZvcmUgdGhlIHNwZWNpZmllZCBjb250cmlidXRpb24gaXRlbSA8Y29kZT5jb250cmlidXRpb25JRDwvY29kZT4uCisJICogSWYgPGNvZGU+Y29udHJpYnV0aW9uSUQ8L2NvZGU+IGlzIDxjb2RlPm51bGw8L2NvZGU+LCB0aGV5IGFyZSBzaW1wbHkgYWRkZWQuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgcG9wdWxhdGVNYW5hZ2VyKElDb250cmlidXRpb25NYW5hZ2VyIG1hbmFnZXIsIENvbGxlY3Rpb248PyBleHRlbmRzIElBY3Rpb24+IGFjdGlvbnMsIFN0cmluZyBjb250cmlidXRpb25JRCkgeworCQlpZiAoYWN0aW9ucyAhPSBudWxsKSB7CisJCQlmb3IgKElBY3Rpb24gYWN0aW9uIDogYWN0aW9ucykgeworCQkJCWlmIChjb250cmlidXRpb25JRCAhPSBudWxsKSB7CisJCQkJCW1hbmFnZXIuaW5zZXJ0QmVmb3JlKGNvbnRyaWJ1dGlvbklELCBhY3Rpb24pOworCQkJCX0KKwkJCQllbHNlIHsKKwkJCQkJbWFuYWdlci5hZGQoYWN0aW9uKTsKKwkJCQl9CisJCQl9CisJCX0KKwl9CisJCQorCS8qKgorCSAqIFRoaXMgcmVtb3ZlcyBmcm9tIHRoZSBzcGVjaWZpZWQgPGNvZGU+bWFuYWdlcjwvY29kZT4gYWxsIHtAbGluayBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uQWN0aW9uQ29udHJpYnV0aW9uSXRlbX1zCisJICogYmFzZWQgb24gdGhlIHtAbGluayBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSUFjdGlvbn1zIGNvbnRhaW5lZCBpbiB0aGUgPGNvZGU+YWN0aW9uczwvY29kZT4gY29sbGVjdGlvbi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBkZXBvcHVsYXRlTWFuYWdlcihJQ29udHJpYnV0aW9uTWFuYWdlciBtYW5hZ2VyLCBDb2xsZWN0aW9uPD8gZXh0ZW5kcyBJQWN0aW9uPiBhY3Rpb25zKSB7CisJCWlmIChhY3Rpb25zICE9IG51bGwpIHsKKwkJCUlDb250cmlidXRpb25JdGVtW10gaXRlbXMgPSBtYW5hZ2VyLmdldEl0ZW1zKCk7CisJCQlmb3IgKGludCBpID0gMDsgaSA8IGl0ZW1zLmxlbmd0aDsgaSsrKSB7CisJCQkJLy8gTG9vayBpbnRvIFN1YkNvbnRyaWJ1dGlvbkl0ZW1zCisJCQkJLy8KKwkJCQlJQ29udHJpYnV0aW9uSXRlbSBjb250cmlidXRpb25JdGVtID0gaXRlbXNbaV07CisJCQkJd2hpbGUgKGNvbnRyaWJ1dGlvbkl0ZW0gaW5zdGFuY2VvZiBTdWJDb250cmlidXRpb25JdGVtKSB7CisJCQkJCWNvbnRyaWJ1dGlvbkl0ZW0gPSAoKFN1YkNvbnRyaWJ1dGlvbkl0ZW0pY29udHJpYnV0aW9uSXRlbSkuZ2V0SW5uZXJJdGVtKCk7CisJCQkJfQorCisJCQkJLy8gRGVsZXRlIHRoZSBBY3Rpb25Db250cmlidXRpb25JdGVtcyB3aXRoIG1hdGNoaW5nIGFjdGlvbi4KKwkJCQkvLworCQkJCWlmIChjb250cmlidXRpb25JdGVtIGluc3RhbmNlb2YgQWN0aW9uQ29udHJpYnV0aW9uSXRlbSkgeworCQkJCQlJQWN0aW9uIGFjdGlvbiA9ICgoQWN0aW9uQ29udHJpYnV0aW9uSXRlbSljb250cmlidXRpb25JdGVtKS5nZXRBY3Rpb24oKTsKKwkJCQkJaWYgKGFjdGlvbnMuY29udGFpbnMoYWN0aW9uKSkgeworCQkJCQkJbWFuYWdlci5yZW1vdmUoY29udHJpYnV0aW9uSXRlbSk7CisJCQkJCX0KKwkJCQl9CisJCQl9CisJCX0KKwl9CisKKwkvKioKKwkgKiBUaGlzIHBvcHVsYXRlcyB0aGUgcG9wLXVwIG1lbnUgYmVmb3JlIGl0IGFwcGVhcnMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgbWVudUFib3V0VG9TaG93KElNZW51TWFuYWdlciBtZW51TWFuYWdlcikgeworCQlzdXBlci5tZW51QWJvdXRUb1Nob3cobWVudU1hbmFnZXIpOworCQlNZW51TWFuYWdlciBzdWJtZW51TWFuYWdlciA9IG51bGw7CisKKwkJc3VibWVudU1hbmFnZXIgPSBuZXcgTWVudU1hbmFnZXIoVmVjdG9yRWRpdG9yUGx1Z2luLklOU1RBTkNFLmdldFN0cmluZygiX1VJX0NyZWF0ZUNoaWxkX21lbnVfaXRlbSIpKTsKKwkJcG9wdWxhdGVNYW5hZ2VyKHN1Ym1lbnVNYW5hZ2VyLCBjcmVhdGVDaGlsZEFjdGlvbnMsIG51bGwpOworCQltZW51TWFuYWdlci5pbnNlcnRCZWZvcmUoImVkaXQiLCBzdWJtZW51TWFuYWdlcik7CisKKwkJc3VibWVudU1hbmFnZXIgPSBuZXcgTWVudU1hbmFnZXIoVmVjdG9yRWRpdG9yUGx1Z2luLklOU1RBTkNFLmdldFN0cmluZygiX1VJX0NyZWF0ZVNpYmxpbmdfbWVudV9pdGVtIikpOworCQlwb3B1bGF0ZU1hbmFnZXIoc3VibWVudU1hbmFnZXIsIGNyZWF0ZVNpYmxpbmdBY3Rpb25zLCBudWxsKTsKKwkJbWVudU1hbmFnZXIuaW5zZXJ0QmVmb3JlKCJlZGl0Iiwgc3VibWVudU1hbmFnZXIpOworCX0KKworCS8qKgorCSAqIFRoaXMgaW5zZXJ0cyBnbG9iYWwgYWN0aW9ucyBiZWZvcmUgdGhlICJhZGRpdGlvbnMtZW5kIiBzZXBhcmF0b3IuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgYWRkR2xvYmFsQWN0aW9ucyhJTWVudU1hbmFnZXIgbWVudU1hbmFnZXIpIHsKKwkJbWVudU1hbmFnZXIuaW5zZXJ0QWZ0ZXIoImFkZGl0aW9ucy1lbmQiLCBuZXcgU2VwYXJhdG9yKCJ1aS1hY3Rpb25zIikpOworCQltZW51TWFuYWdlci5pbnNlcnRBZnRlcigidWktYWN0aW9ucyIsIHNob3dQcm9wZXJ0aWVzVmlld0FjdGlvbik7CisKKwkJcmVmcmVzaFZpZXdlckFjdGlvbi5zZXRFbmFibGVkKHJlZnJlc2hWaWV3ZXJBY3Rpb24uaXNFbmFibGVkKCkpOwkJCisJCW1lbnVNYW5hZ2VyLmluc2VydEFmdGVyKCJ1aS1hY3Rpb25zIiwgcmVmcmVzaFZpZXdlckFjdGlvbik7CisKKwkJc3VwZXIuYWRkR2xvYmFsQWN0aW9ucyhtZW51TWFuYWdlcik7CisJfQorCisJLyoqCisJICogVGhpcyBlbnN1cmVzIHRoYXQgYSBkZWxldGUgYWN0aW9uIHdpbGwgY2xlYW4gdXAgYWxsIHJlZmVyZW5jZXMgdG8gZGVsZXRlZCBvYmplY3RzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCBib29sZWFuIHJlbW92ZUFsbFJlZmVyZW5jZXNPbkRlbGV0ZSgpIHsKKwkJcmV0dXJuIHRydWU7CisJfQorCit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMudmVjdG9yL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvdmVjdG9yL3ByZXNlbnRhdGlvbi9WZWN0b3JEaXNlYXNlTW9kZWxQcm9wZXJ0eUVkaXRvci5qYXZhIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMudmVjdG9yL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvdmVjdG9yL3ByZXNlbnRhdGlvbi9WZWN0b3JEaXNlYXNlTW9kZWxQcm9wZXJ0eUVkaXRvci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU1YjIwM2QKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy52ZWN0b3Ivc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy92ZWN0b3IvcHJlc2VudGF0aW9uL1ZlY3RvckRpc2Vhc2VNb2RlbFByb3BlcnR5RWRpdG9yLmphdmEKQEAgLTAsMCArMSwxMDcgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5wcmVzZW50YXRpb247CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDcsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3Q7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVBdHRyaWJ1dGU7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVjb3JlUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuRGlzZWFzZU1vZGVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5NYWNkb25hbGRSb3NzRGlzZWFzZU1vZGVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuU2ltcGxlRGVuZ3VlTW9kZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5WZWN0b3JEaXNlYXNlTW9kZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5WZWN0b3JQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udWkud2l6YXJkcy5TdGFuZGFyZERpc2Vhc2VNb2RlbFByb3BlcnR5RWRpdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuTW9kaWZ5TGlzdGVuZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlOworCisvKioKKyAqCisgKi8KK3B1YmxpYyBjbGFzcyBWZWN0b3JEaXNlYXNlTW9kZWxQcm9wZXJ0eUVkaXRvciBleHRlbmRzCisJCVN0YW5kYXJkRGlzZWFzZU1vZGVsUHJvcGVydHlFZGl0b3IgeworCisJLyoqCisJICogQHBhcmFtIHBhcmVudAorCSAqIEBwYXJhbSBzdHlsZQorCSAqIEBwYXJhbSBkaXNlYXNlTW9kZWwKKwkgKiBAcGFyYW0gcHJvamVjdFZhbGlkYXRvcgorCSAqLworCXB1YmxpYyBWZWN0b3JEaXNlYXNlTW9kZWxQcm9wZXJ0eUVkaXRvcihDb21wb3NpdGUgcGFyZW50LCBpbnQgc3R5bGUsCisJCQlEaXNlYXNlTW9kZWwgZGlzZWFzZU1vZGVsLCBNb2RpZnlMaXN0ZW5lciBwcm9qZWN0VmFsaWRhdG9yLAorCQkJSVByb2plY3QgcHJvamVjdCkgeworCQlzdXBlcihwYXJlbnQsIHN0eWxlLCBkaXNlYXNlTW9kZWwsIHByb2plY3RWYWxpZGF0b3IsIHByb2plY3QpOworCX0gLy8gTXVsdGlEaXNlYXNlTW9kZWxQcm9wZXJ0eUVkaXRvcgorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnVpLndpemFyZHMuU3RhbmRhcmREaXNlYXNlTW9kZWxQcm9wZXJ0eUVkaXRvciNwb3B1bGF0ZShvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuRGlzZWFzZU1vZGVsKQorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIHBvcHVsYXRlKERpc2Vhc2VNb2RlbCBkaXNlYXNlTW9kZWwpIHsKKwkJc3VwZXIucG9wdWxhdGUoZGlzZWFzZU1vZGVsKTsKKworCQlmb3IgKEVBdHRyaWJ1dGUgYXR0cmlidXRlIDogZGlzZWFzZU1vZGVsLmVDbGFzcygpLmdldEVBbGxBdHRyaWJ1dGVzKCkpIHsKKwkJCWlmIChhdHRyaWJ1dGUuZUNvbnRhaW5lcigpLmVDb250YWluZXIoKSA9PSBWZWN0b3JQYWNrYWdlLmVJTlNUQU5DRSkgeworCQkJCVN0cmluZyB2YWx1ZSA9IG1hcC5nZXQoYXR0cmlidXRlKS5nZXRUZXh0KCk7CisKKwkJCQlpZiAoYXR0cmlidXRlLmdldEVUeXBlKCkgPT0gRWNvcmVQYWNrYWdlLkxpdGVyYWxzLkVTVFJJTkcpIHsKKwkJCQkJZGlzZWFzZU1vZGVsLmVTZXQoYXR0cmlidXRlLCB2YWx1ZSk7CisJCQkJfSBlbHNlIGlmIChhdHRyaWJ1dGUuZ2V0RVR5cGUoKSA9PSBFY29yZVBhY2thZ2UuTGl0ZXJhbHMuRURPVUJMRSkgeworCQkJCQlkaXNlYXNlTW9kZWwuZVNldChhdHRyaWJ1dGUsIERvdWJsZS5wYXJzZURvdWJsZSh2YWx1ZSkpOworCQkJCX0KKwkJCX0KKwkJfQorCX0KKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS51aS53aXphcmRzLlN0YW5kYXJkRGlzZWFzZU1vZGVsUHJvcGVydHlFZGl0b3IjdmFsaWRhdGUoKQorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBib29sZWFuIHZhbGlkYXRlKCkgeworCQlib29sZWFuIHJldFZhbHVlID0gc3VwZXIudmFsaWRhdGUoKTsKKwkJLy8gSW5mZWN0aW91cyBNb3J0YWxpdHkgUmF0ZQorCQkvKgorCQkgKiBpZiAocmV0VmFsdWUpIHsgLy8gWWVzIGZpbmFsIFRleHQgdGV4dCA9IG1hcAorCQkgKiAuZ2V0KE11bHRpcG9wdWxhdGlvblBhY2thZ2UKKwkJICogLkxpdGVyYWxzLk1VTFRJX1BPUFVMQVRJT05fU0lfRElTRUFTRV9NT0RFTF9fUkVDT1ZFUllfUkFURSk7IGlmICh0ZXh0CisJCSAqICE9IG51bGwpIHsgLy8gWWVzIHJldFZhbHVlID0gIXRleHQuZ2V0VGV4dCgpLmVxdWFscygiIik7CisJCSAqIC8vJE5PTi1OTFMtMSQgLy8gbm90aGluZz8gaWYgKCFyZXRWYWx1ZSkgeyAvLyBZZXMgZXJyb3JNZXNzYWdlID0KKwkJICogRGlzZWFzZVdpemFyZE1lc3NhZ2VzIC5nZXRTdHJpbmcoIlJFQ09WRVJZX1JBVEVfSU5WQUxJRCIpOworCQkgKiAvLyROT04tTkxTLTEkIH0gLy8gaWYgZWxzZSB7IC8vIE5vIC8vIElzIGl0IGEgdmFsaWQgdmFsdWU/IHJldFZhbHVlID0KKwkJICogaXNWYWxpZFZhbHVlKHRleHQuZ2V0VGV4dCgpLCAwLjApOyBpZiAoIXJldFZhbHVlKSB7IC8vIE5vCisJCSAqIGVycm9yTWVzc2FnZSA9IE11bHRpcG9wdWxhdGlvbkRpc2Vhc2VXaXphcmRNZXNzYWdlcworCQkgKiAuZ2V0U3RyaW5nKCJSRUNPVkVSWV9SQVRFX0lOVkFMSUQiKTsgLy8kTk9OLU5MUy0xJCB9IC8vIGlmIH0gfSAvLyBpZgorCQkgKiB9IGlmIChyZXRWYWx1ZSkgeyAvLyBZZXMgVGV4dCB0ZXh0ID0gbWFwCisJCSAqIC5nZXQoTXVsdGlwb3B1bGF0aW9uUGFja2FnZS5MaXRlcmFscy4KKwkJICogTVVMVElfUE9QVUxBVElPTl9TSV9ESVNFQVNFX01PREVMX19QSFlTSUNBTExZX0FESkFDRU5UX0lORkVDVElPVVNfUFJPUE9SVElPTgorCQkgKiApOyBpZiAodGV4dCAhPSBudWxsKSB7IC8vIFllcyByZXRWYWx1ZSA9ICF0ZXh0LmdldFRleHQoKS5lcXVhbHMoIiIpOworCQkgKiAvLyROT04tTkxTLTEkIC8vIG5vdGhpbmc/IGlmICghcmV0VmFsdWUpIHsgLy8gWWVzIGVycm9yTWVzc2FnZSA9CisJCSAqIERpc2Vhc2VXaXphcmRNZXNzYWdlcyAuZ2V0U3RyaW5nKCJQSFlTX0FESl9JTlZBTElEIik7IC8vJE5PTi1OTFMtMSQgfQorCQkgKiAvLyBpZiBlbHNlIHsgLy8gTm8gLy8gSXMgaXQgYSB2YWxpZCB2YWx1ZT8gcmV0VmFsdWUgPQorCQkgKiBpc1ZhbGlkVmFsdWUodGV4dC5nZXRUZXh0KCksIDAuMCk7IGlmICghcmV0VmFsdWUpIHsgLy8gTm8KKwkJICogZXJyb3JNZXNzYWdlID0gTXVsdGlwb3B1bGF0aW9uRGlzZWFzZVdpemFyZE1lc3NhZ2VzCisJCSAqIC5nZXRTdHJpbmcoIlBIWVNfQURKX0lOVkFMSUQiKTsgLy8kTk9OLU5MUy0xJCB9IC8vIGlmIH0gfSAvLyBpZiB9IGlmCisJCSAqIChyZXRWYWx1ZSkgeyAvLyBZZXMgVGV4dCB0ZXh0ID0gbWFwCisJCSAqIC5nZXQoTXVsdGlwb3B1bGF0aW9uUGFja2FnZS5MaXRlcmFscworCQkgKiAuTVVMVElfUE9QVUxBVElPTl9TSV9ESVNFQVNFX01PREVMX19ST0FEX05FVFdPUktfSU5GRUNUSU9VU19QUk9QT1JUSU9OCisJCSAqICk7IGlmICh0ZXh0ICE9IG51bGwpIHsgLy8gWWVzIHJldFZhbHVlID0gIXRleHQuZ2V0VGV4dCgpLmVxdWFscygiIik7CisJCSAqIC8vJE5PTi1OTFMtMSQgLy8gbm90aGluZz8gaWYgKCFyZXRWYWx1ZSkgeyAvLyBZZXMgZXJyb3JNZXNzYWdlID0KKwkJICogRGlzZWFzZVdpemFyZE1lc3NhZ2VzIC5nZXRTdHJpbmcoIlJPQURfTkVUX0lOVkFMSUQiKTsgLy8kTk9OLU5MUy0xJCB9CisJCSAqIC8vIGlmIGVsc2UgeyAvLyBObyAvLyBJcyBpdCBhIHZhbGlkIHZhbHVlPyByZXRWYWx1ZSA9CisJCSAqIGlzVmFsaWRWYWx1ZSh0ZXh0LmdldFRleHQoKSwgMC4wKTsgaWYgKCFyZXRWYWx1ZSkgeyAvLyBObworCQkgKiBlcnJvck1lc3NhZ2UgPSBNdWx0aXBvcHVsYXRpb25EaXNlYXNlV2l6YXJkTWVzc2FnZXMKKwkJICogLmdldFN0cmluZygiUk9BRF9ORVRfSU5WQUxJRCIpOyAvLyROT04tTkxTLTEkIH0gLy8gaWYgfSB9IC8vIGlmIH0KKwkJICovCisJCXJldHVybiByZXRWYWx1ZTsKKwl9CisKK30gLy8gVmVjdG9yRGlzZWFzZU1vZGVsUHJvcGVydHlFZGl0b3IKZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzLnZlY3Rvci9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3ZlY3Rvci9wcmVzZW50YXRpb24vVmVjdG9yRGlzZWFzZU1vZGVsUHJvcGVydHlFZGl0b3JBZGFwdGVyLmphdmEgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy52ZWN0b3Ivc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy92ZWN0b3IvcHJlc2VudGF0aW9uL1ZlY3RvckRpc2Vhc2VNb2RlbFByb3BlcnR5RWRpdG9yQWRhcHRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQyMGZmZGQKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy52ZWN0b3Ivc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy92ZWN0b3IvcHJlc2VudGF0aW9uL1ZlY3RvckRpc2Vhc2VNb2RlbFByb3BlcnR5RWRpdG9yQWRhcHRlci5qYXZhCkBAIC0wLDAgKzEsNDAgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5wcmVzZW50YXRpb247CisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA3LCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5EaXNlYXNlTW9kZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS51aS5hZGFwdGVycy5kaXNlYXNlbW9kZWxwcm9wZXJ0eWVkaXRvci5EaXNlYXNlTW9kZWxQcm9wZXJ0eUVkaXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnVpLmFkYXB0ZXJzLmRpc2Vhc2Vtb2RlbHByb3BlcnR5ZWRpdG9yLkRpc2Vhc2VNb2RlbFByb3BlcnR5RWRpdG9yQWRhcHRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnVpLndpemFyZHMuRGlzZWFzZU1vZGVsUHJvcGVydHlDb21wb3NpdGU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5Nb2RpZnlMaXN0ZW5lcjsKKworLyoqCisgKiAgCisgKiBBZGFwdGVyIGZvciBQcm9wZXJ0eSBFZGl0b3IKKyAqCisgKi8KK3B1YmxpYyBjbGFzcyBWZWN0b3JEaXNlYXNlTW9kZWxQcm9wZXJ0eUVkaXRvckFkYXB0ZXIgZXh0ZW5kcworCQlEaXNlYXNlTW9kZWxQcm9wZXJ0eUVkaXRvckFkYXB0ZXIgeworCisJLyoqCisJICogCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIERpc2Vhc2VNb2RlbFByb3BlcnR5RWRpdG9yIGNyZWF0ZURpc2Vhc2VNb2RlbFByb3BlcnR5RWRpdG9yKAorCQkJRGlzZWFzZU1vZGVsUHJvcGVydHlDb21wb3NpdGUgZGlzZWFzZU1vZGVsUHJvcGVydHlDb21wb3NpdGUsCisJCQlpbnQgc3R5bGUsIE1vZGlmeUxpc3RlbmVyIHByb2plY3RWYWxpZGF0b3IsIElQcm9qZWN0IHByb2plY3QpIHsKKwkJcmV0dXJuIG5ldyBWZWN0b3JEaXNlYXNlTW9kZWxQcm9wZXJ0eUVkaXRvcigKKwkJCQlkaXNlYXNlTW9kZWxQcm9wZXJ0eUNvbXBvc2l0ZSwgc3R5bGUsCisJCQkJKERpc2Vhc2VNb2RlbCkgZ2V0VGFyZ2V0KCksIHByb2plY3RWYWxpZGF0b3IsIHByb2plY3QpOworCX0gLy8gY3JlYXRlRGlzZWFzZU1vZGVsUHJvcGVydHlFZGl0b3IKKworfSAvLyBWZWN0b3JEaXNlYXNlTW9kZWxQcm9wZXJ0eUVkaXRvckFkYXB0ZXIKZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzLnZlY3Rvci9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3ZlY3Rvci9wcmVzZW50YXRpb24vVmVjdG9yRGlzZWFzZU1vZGVsUHJvcGVydHlFZGl0b3JBZGFwdGVyRmFjdG9yeS5qYXZhIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMudmVjdG9yL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvdmVjdG9yL3ByZXNlbnRhdGlvbi9WZWN0b3JEaXNlYXNlTW9kZWxQcm9wZXJ0eUVkaXRvckFkYXB0ZXJGYWN0b3J5LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjI5Y2U3NwotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzLnZlY3Rvci9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3ZlY3Rvci9wcmVzZW50YXRpb24vVmVjdG9yRGlzZWFzZU1vZGVsUHJvcGVydHlFZGl0b3JBZGFwdGVyRmFjdG9yeS5qYXZhCkBAIC0wLDAgKzEsNTEgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5wcmVzZW50YXRpb247CisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA3LCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LkFkYXB0ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci51dGlsLlZlY3RvckFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udWkuYWRhcHRlcnMuZGlzZWFzZW1vZGVscHJvcGVydHllZGl0b3IuRGlzZWFzZU1vZGVsUHJvcGVydHlFZGl0b3JBZGFwdGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udWkuYWRhcHRlcnMuZGlzZWFzZW1vZGVscHJvcGVydHllZGl0b3IuRGlzZWFzZU1vZGVsUHJvcGVydHlFZGl0b3JBZGFwdGVyRmFjdG9yeTsKKworLyoqCisgKgorICogCisgKi8KK3B1YmxpYyBjbGFzcyBWZWN0b3JEaXNlYXNlTW9kZWxQcm9wZXJ0eUVkaXRvckFkYXB0ZXJGYWN0b3J5IGV4dGVuZHMKKwkJVmVjdG9yQWRhcHRlckZhY3RvcnkgaW1wbGVtZW50cworCQlEaXNlYXNlTW9kZWxQcm9wZXJ0eUVkaXRvckFkYXB0ZXJGYWN0b3J5IHsKKworCS8qKgorCSAqIAorCSAqLworCXB1YmxpYyBWZWN0b3JEaXNlYXNlTW9kZWxQcm9wZXJ0eUVkaXRvckFkYXB0ZXJGYWN0b3J5KCkgeworCQlzdXBlcigpOworCQlEaXNlYXNlTW9kZWxQcm9wZXJ0eUVkaXRvckFkYXB0ZXJGYWN0b3J5LklOU1RBTkNFCisJCQkJLmFkZEFkYXB0ZXJGYWN0b3J5KHRoaXMpOworCX0KKworCS8qKgorCSAqIAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZVZlY3RvckRpc2Vhc2VNb2RlbEFkYXB0ZXIoKSB7CisJCXJldHVybiBuZXcgVmVjdG9yRGlzZWFzZU1vZGVsUHJvcGVydHlFZGl0b3JBZGFwdGVyKCk7CisJfQorCQorCS8qKgorCSAqIAorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4YW1wbGUudXRpbC5FeGFtcGxlQWRhcHRlckZhY3RvcnkjaXNGYWN0b3J5Rm9yVHlwZShqYXZhLmxhbmcuT2JqZWN0KQorCSAqLworCXB1YmxpYyBib29sZWFuIGlzRmFjdG9yeUZvclR5cGUoT2JqZWN0IHR5cGUpIHsKKwkJcmV0dXJuIHR5cGUgPT0gRGlzZWFzZU1vZGVsUHJvcGVydHlFZGl0b3JBZGFwdGVyLmNsYXNzCisJCQkJfHwgc3VwZXIuaXNGYWN0b3J5Rm9yVHlwZSh0eXBlKTsKKwl9Cit9IC8vIFZlY3RvckRpc2Vhc2VNb2RlbFByb3BlcnR5RWRpdG9yQWRhcHRlckZhY3RvcnkKZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzLnZlY3Rvci9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3ZlY3Rvci9wcmVzZW50YXRpb24vVmVjdG9yRGlzZWFzZVdpemFyZE1lc3NhZ2VzLmphdmEgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy52ZWN0b3Ivc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy92ZWN0b3IvcHJlc2VudGF0aW9uL1ZlY3RvckRpc2Vhc2VXaXphcmRNZXNzYWdlcy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJlOWRmMzkKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy52ZWN0b3Ivc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy92ZWN0b3IvcHJlc2VudGF0aW9uL1ZlY3RvckRpc2Vhc2VXaXphcmRNZXNzYWdlcy5qYXZhCkBAIC0wLDAgKzEsNDYgQEAKKy8vIEV4YW1wbGVEaXNlYXNlV2l6YXJkTWVzc2FnZXMuamF2YQorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLnByZXNlbnRhdGlvbjsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNywgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqYXZhLnV0aWwuTWlzc2luZ1Jlc291cmNlRXhjZXB0aW9uOworaW1wb3J0IGphdmEudXRpbC5SZXNvdXJjZUJ1bmRsZTsKKworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5Db25zdGFudHM7CisKKy8qKgorICogVGhpcyBjbGFzcyBpcyB0aGUgUmVzb3VyY2UgQnVuZGxlIGZvciB0aGlzIHBhY2thZ2UuCisgKi8KK3B1YmxpYyBjbGFzcyBWZWN0b3JEaXNlYXNlV2l6YXJkTWVzc2FnZXMgeworCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBCVU5ETEVfTkFNRSA9IENvbnN0YW50cy5JRF9ST09UCisJCQkrICIuZGlzZWFzZW1vZGVscy52ZWN0b3IucHJlc2VudGF0aW9uLnZlY3RvcmRpc2Vhc2VtZXNzYWdlcyI7IC8vJE5PTi1OTFMtMSQKKworCXByaXZhdGUgc3RhdGljIGZpbmFsIFJlc291cmNlQnVuZGxlIFJFU09VUkNFX0JVTkRMRSA9IFJlc291cmNlQnVuZGxlCisJCQkuZ2V0QnVuZGxlKEJVTkRMRV9OQU1FKTsKKworCS8qKgorCSAqIAorCSAqLworCXB1YmxpYyBWZWN0b3JEaXNlYXNlV2l6YXJkTWVzc2FnZXMoKSB7CisJCS8vIGVtcHR5CisJfQorCisJLyoqCisJICogQHBhcmFtIGtleQorCSAqICAgICAgICAgICAgdGhlIGtleSBmb3IgdGhlIG1lc3NhZ2UKKwkgKiBAcmV0dXJuIHRoZSBzdHJpbmcgdGhhdCBtYXRjaGVzIHRoZSBrZXkKKwkgKiBAdGhyb3dzIE1pc3NpbmdSZXNvdXJjZUV4Y2VwdGlvbiBpZiB0aGUga2V5IGNhbm5vdCBiZSBmb3VuZAorCSAqLworCXB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldFN0cmluZyhmaW5hbCBTdHJpbmcga2V5KSB0aHJvd3MgTWlzc2luZ1Jlc291cmNlRXhjZXB0aW9ueworCQkJcmV0dXJuIFJFU09VUkNFX0JVTkRMRS5nZXRTdHJpbmcoa2V5KTsKKwl9IC8vIGdldFN0cmluZworfSAvLyBFeGFtcGxlRGlzZWFzZVdpemFyZE1lc3NhZ2VzCmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy52ZWN0b3Ivc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy92ZWN0b3IvcHJlc2VudGF0aW9uL1ZlY3RvckVkaXRvci5qYXZhIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMudmVjdG9yL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvdmVjdG9yL3ByZXNlbnRhdGlvbi9WZWN0b3JFZGl0b3IuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMjU1MTM4Ci0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMudmVjdG9yL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvdmVjdG9yL3ByZXNlbnRhdGlvbi9WZWN0b3JFZGl0b3IuamF2YQpAQCAtMCwwICsxLDE4MDYgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5wcmVzZW50YXRpb247CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIAorICogQ29weXJpZ2h0IChjKSAyMDExIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiAKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdCAKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sIAorICogCisgKiBDb250cmlidXRvcnM6IAorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiAKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKK2ltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOworaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW07CitpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbnM7CitpbXBvcnQgamF2YS51dGlsLkV2ZW50T2JqZWN0OworaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOworaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKK2ltcG9ydCBqYXZhLnV0aWwuTGlua2VkSGFzaE1hcDsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuTWFwOworCitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUZpbGU7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSU1hcmtlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUmVzb3VyY2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVJlc291cmNlQ2hhbmdlRXZlbnQ7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVJlc291cmNlQ2hhbmdlTGlzdGVuZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVJlc291cmNlRGVsdGE7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVJlc291cmNlRGVsdGFWaXNpdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLlJlc291cmNlc1BsdWdpbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQ29yZUV4Y2VwdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVBhdGg7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQcm9ncmVzc01vbml0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLk51bGxQcm9ncmVzc01vbml0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5jb21tYW5kLkJhc2ljQ29tbWFuZFN0YWNrOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24uY29tbWFuZC5Db21tYW5kOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24uY29tbWFuZC5Db21tYW5kU3RhY2s7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5jb21tYW5kLkNvbW1hbmRTdGFja0xpc3RlbmVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LkFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnVpLk1hcmtlckhlbHBlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnVpLlZpZXdlclBhbmU7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51aS5lZGl0b3IuUHJvYmxlbUVkaXRvclBhcnQ7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51aS52aWV3ZXIuSVZpZXdlclByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5CYXNpY0RpYWdub3N0aWM7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLkRpYWdub3N0aWM7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlVSSTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRVZhbGlkYXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUucHJvdmlkZXIuRWNvcmVJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUucmVzb3VyY2UuUmVzb3VyY2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnJlc291cmNlLlJlc291cmNlU2V0OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS51dGlsLkVDb250ZW50QWRhcHRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUudXRpbC5FY29yZVV0aWw7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQuZG9tYWluLkFkYXB0ZXJGYWN0b3J5RWRpdGluZ0RvbWFpbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5kb21haW4uRWRpdGluZ0RvbWFpbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5kb21haW4uSUVkaXRpbmdEb21haW5Qcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5BZGFwdGVyRmFjdG9yeUl0ZW1EZWxlZ2F0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuQ29tcG9zZWRBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5SZWZsZWN0aXZlSXRlbVByb3ZpZGVyQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIucmVzb3VyY2UuUmVzb3VyY2VJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5hY3Rpb24uRWRpdGluZ0RvbWFpbkFjdGlvbkJhckNvbnRyaWJ1dG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmNlbGxlZGl0b3IuQWRhcHRlckZhY3RvcnlUcmVlRWRpdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmRuZC5FZGl0aW5nRG9tYWluVmlld2VyRHJvcEFkYXB0ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkuZG5kLkxvY2FsVHJhbnNmZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkuZG5kLlZpZXdlckRyYWdBZGFwdGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLnByb3ZpZGVyLkFkYXB0ZXJGYWN0b3J5Q29udGVudFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLnByb3ZpZGVyLkFkYXB0ZXJGYWN0b3J5TGFiZWxQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5wcm92aWRlci5VbndyYXBwaW5nU2VsZWN0aW9uUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkudXRpbC5FZGl0VUlNYXJrZXJIZWxwZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkudXRpbC5FZGl0VUlVdGlsOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLnZpZXcuRXh0ZW5kZWRQcm9wZXJ0eVNoZWV0UGFnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSU1lbnVMaXN0ZW5lcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSU1lbnVNYW5hZ2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JU3RhdHVzTGluZU1hbmFnZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklUb29sQmFyTWFuYWdlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uTWVudU1hbmFnZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLlNlcGFyYXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5kaWFsb2dzLk1lc3NhZ2VEaWFsb2c7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuZGlhbG9ncy5Qcm9ncmVzc01vbml0b3JEaWFsb2c7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5Db2x1bW5XZWlnaHREYXRhOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU3RydWN0dXJlZFNlbGVjdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLkxpc3RWaWV3ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5TZWxlY3Rpb25DaGFuZ2VkRXZlbnQ7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5TdHJ1Y3R1cmVkU2VsZWN0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuU3RydWN0dXJlZFZpZXdlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlRhYmxlTGF5b3V0OworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuVGFibGVWaWV3ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5UcmVlVmlld2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuVmlld2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24ucHJvdmlkZXIuQ29tbW9uSXRlbVByb3ZpZGVyQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLnByb3ZpZGVyLkdyYXBoSXRlbVByb3ZpZGVyQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmxvZ2dlci5wcm92aWRlci5Mb2dnZXJJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwucHJvdmlkZXIuTW9kZWxJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIucHJvdmlkZXIuTW9kaWZpZXJJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2NlbmFyaW8ucHJvdmlkZXIuU2NlbmFyaW9JdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2VxdWVuY2VyLnByb3ZpZGVyLlNlcXVlbmNlckl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zb2x2ZXIucHJvdmlkZXIuU29sdmVySXRlbVByb3ZpZGVyQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMucHJvdmlkZXIuTGFiZWxzSXRlbVByb3ZpZGVyQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLnByb3ZpZGVyLlN0YW5kYXJkSXRlbVByb3ZpZGVyQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5wcm92aWRlci5WZWN0b3JJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuU1dUOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5jdXN0b20uQ1RhYkZvbGRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZG5kLkRORDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZG5kLlRyYW5zZmVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuQ29udHJvbEFkYXB0ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5Db250cm9sRXZlbnQ7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmdyYXBoaWNzLlBvaW50OworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5sYXlvdXQuRmlsbExheW91dDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuTWVudTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5UYWJsZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5UYWJsZUNvbHVtbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5UcmVlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlRyZWVDb2x1bW47CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuSUFjdGlvbkJhcnM7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuSUVkaXRvcklucHV0OworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklFZGl0b3JQYXJ0OworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklFZGl0b3JTaXRlOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklQYXJ0TGlzdGVuZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaFBhcnQ7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuUGFydEluaXRFeGNlcHRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuYWN0aW9ucy5Xb3Jrc3BhY2VNb2RpZnlPcGVyYXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuZGlhbG9ncy5TYXZlQXNEaWFsb2c7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuaWRlLklHb3RvTWFya2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLnBhcnQuRmlsZUVkaXRvcklucHV0OworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLnBhcnQuTXVsdGlQYWdlRWRpdG9yUGFydDsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS52aWV3cy5jb250ZW50b3V0bGluZS5Db250ZW50T3V0bGluZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS52aWV3cy5jb250ZW50b3V0bGluZS5Db250ZW50T3V0bGluZVBhZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkudmlld3MuY29udGVudG91dGxpbmUuSUNvbnRlbnRPdXRsaW5lUGFnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS52aWV3cy5wcm9wZXJ0aWVzLklQcm9wZXJ0eVNoZWV0UGFnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS52aWV3cy5wcm9wZXJ0aWVzLlByb3BlcnR5U2hlZXQ7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkudmlld3MucHJvcGVydGllcy5Qcm9wZXJ0eVNoZWV0UGFnZTsKKworCisvKioKKyAqIFRoaXMgaXMgYW4gZXhhbXBsZSBvZiBhIFZlY3RvciBtb2RlbCBlZGl0b3IuCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBWZWN0b3JFZGl0b3IKKwlleHRlbmRzIE11bHRpUGFnZUVkaXRvclBhcnQKKwlpbXBsZW1lbnRzIElFZGl0aW5nRG9tYWluUHJvdmlkZXIsIElTZWxlY3Rpb25Qcm92aWRlciwgSU1lbnVMaXN0ZW5lciwgSVZpZXdlclByb3ZpZGVyLCBJR290b01hcmtlciB7CisJLyoqCisJICogVGhpcyBrZWVwcyB0cmFjayBvZiB0aGUgZWRpdGluZyBkb21haW4gdGhhdCBpcyB1c2VkIHRvIHRyYWNrIGFsbCBjaGFuZ2VzIHRvIHRoZSBtb2RlbC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgQWRhcHRlckZhY3RvcnlFZGl0aW5nRG9tYWluIGVkaXRpbmdEb21haW47CisKKwkvKioKKwkgKiBUaGlzIGlzIHRoZSBvbmUgYWRhcHRlciBmYWN0b3J5IHVzZWQgZm9yIHByb3ZpZGluZyB2aWV3cyBvZiB0aGUgbW9kZWwuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIENvbXBvc2VkQWRhcHRlckZhY3RvcnkgYWRhcHRlckZhY3Rvcnk7CisKKwkvKioKKwkgKiBUaGlzIGlzIHRoZSBjb250ZW50IG91dGxpbmUgcGFnZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgSUNvbnRlbnRPdXRsaW5lUGFnZSBjb250ZW50T3V0bGluZVBhZ2U7CisKKwkvKioKKwkgKiBUaGlzIGlzIGEga2x1ZGdlLi4uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIElTdGF0dXNMaW5lTWFuYWdlciBjb250ZW50T3V0bGluZVN0YXR1c0xpbmVNYW5hZ2VyOworCisJLyoqCisJICogVGhpcyBpcyB0aGUgY29udGVudCBvdXRsaW5lIHBhZ2UncyB2aWV3ZXIuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIFRyZWVWaWV3ZXIgY29udGVudE91dGxpbmVWaWV3ZXI7CisKKwkvKioKKwkgKiBUaGlzIGlzIHRoZSBwcm9wZXJ0eSBzaGVldCBwYWdlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBQcm9wZXJ0eVNoZWV0UGFnZSBwcm9wZXJ0eVNoZWV0UGFnZTsKKworCS8qKgorCSAqIFRoaXMgaXMgdGhlIHZpZXdlciB0aGF0IHNoYWRvd3MgdGhlIHNlbGVjdGlvbiBpbiB0aGUgY29udGVudCBvdXRsaW5lLgorCSAqIFRoZSBwYXJlbnQgcmVsYXRpb24gbXVzdCBiZSBjb3JyZWN0bHkgZGVmaW5lZCBmb3IgdGhpcyB0byB3b3JrLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBUcmVlVmlld2VyIHNlbGVjdGlvblZpZXdlcjsKKworCS8qKgorCSAqIFRoaXMgaW52ZXJ0cyB0aGUgcm9sbCBvZiBwYXJlbnQgYW5kIGNoaWxkIGluIHRoZSBjb250ZW50IHByb3ZpZGVyIGFuZCBzaG93IHBhcmVudHMgYXMgYSB0cmVlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBUcmVlVmlld2VyIHBhcmVudFZpZXdlcjsKKworCS8qKgorCSAqIFRoaXMgc2hvd3MgaG93IGEgdHJlZSB2aWV3IHdvcmtzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBUcmVlVmlld2VyIHRyZWVWaWV3ZXI7CisKKwkvKioKKwkgKiBUaGlzIHNob3dzIGhvdyBhIGxpc3QgdmlldyB3b3Jrcy4KKwkgKiBBIGxpc3Qgdmlld2VyIGRvZXNuJ3Qgc3VwcG9ydCBpY29ucy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgTGlzdFZpZXdlciBsaXN0Vmlld2VyOworCisJLyoqCisJICogVGhpcyBzaG93cyBob3cgYSB0YWJsZSB2aWV3IHdvcmtzLgorCSAqIEEgdGFibGUgY2FuIGJlIHVzZWQgYXMgYSBsaXN0IHdpdGggaWNvbnMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIFRhYmxlVmlld2VyIHRhYmxlVmlld2VyOworCisJLyoqCisJICogVGhpcyBzaG93cyBob3cgYSB0cmVlIHZpZXcgd2l0aCBjb2x1bW5zIHdvcmtzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBUcmVlVmlld2VyIHRyZWVWaWV3ZXJXaXRoQ29sdW1uczsKKworCS8qKgorCSAqIFRoaXMga2VlcHMgdHJhY2sgb2YgdGhlIGFjdGl2ZSB2aWV3ZXIgcGFuZSwgaW4gdGhlIGJvb2suCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIFZpZXdlclBhbmUgY3VycmVudFZpZXdlclBhbmU7CisKKwkvKioKKwkgKiBUaGlzIGtlZXBzIHRyYWNrIG9mIHRoZSBhY3RpdmUgY29udGVudCB2aWV3ZXIsIHdoaWNoIG1heSBiZSBlaXRoZXIgb25lIG9mIHRoZSB2aWV3ZXJzIGluIHRoZSBwYWdlcyBvciB0aGUgY29udGVudCBvdXRsaW5lIHZpZXdlci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgVmlld2VyIGN1cnJlbnRWaWV3ZXI7CisKKwkvKioKKwkgKiBUaGlzIGxpc3RlbnMgdG8gd2hpY2ggZXZlciB2aWV3ZXIgaXMgYWN0aXZlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBJU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyIHNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcjsKKworCS8qKgorCSAqIFRoaXMga2VlcHMgdHJhY2sgb2YgYWxsIHRoZSB7QGxpbmsgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyfXMgdGhhdCBhcmUgbGlzdGVuaW5nIHRvIHRoaXMgZWRpdG9yLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBDb2xsZWN0aW9uPElTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXI+IHNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcnMgPSBuZXcgQXJyYXlMaXN0PElTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXI+KCk7CisKKwkvKioKKwkgKiBUaGlzIGtlZXBzIHRyYWNrIG9mIHRoZSBzZWxlY3Rpb24gb2YgdGhlIGVkaXRvciBhcyBhIHdob2xlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBJU2VsZWN0aW9uIGVkaXRvclNlbGVjdGlvbiA9IFN0cnVjdHVyZWRTZWxlY3Rpb24uRU1QVFk7CisKKwkvKioKKwkgKiBUaGUgTWFya2VySGVscGVyIGlzIHJlc3BvbnNpYmxlIGZvciBjcmVhdGluZyB3b3Jrc3BhY2UgcmVzb3VyY2UgbWFya2VycyBwcmVzZW50ZWQKKwkgKiBpbiBFY2xpcHNlJ3MgUHJvYmxlbXMgVmlldy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgTWFya2VySGVscGVyIG1hcmtlckhlbHBlciA9IG5ldyBFZGl0VUlNYXJrZXJIZWxwZXIoKTsKKworCS8qKgorCSAqIFRoaXMgbGlzdGVucyBmb3Igd2hlbiB0aGUgb3V0bGluZSBiZWNvbWVzIGFjdGl2ZQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBJUGFydExpc3RlbmVyIHBhcnRMaXN0ZW5lciA9CisJCW5ldyBJUGFydExpc3RlbmVyKCkgeworCQkJcHVibGljIHZvaWQgcGFydEFjdGl2YXRlZChJV29ya2JlbmNoUGFydCBwKSB7CisJCQkJaWYgKHAgaW5zdGFuY2VvZiBDb250ZW50T3V0bGluZSkgeworCQkJCQlpZiAoKChDb250ZW50T3V0bGluZSlwKS5nZXRDdXJyZW50UGFnZSgpID09IGNvbnRlbnRPdXRsaW5lUGFnZSkgeworCQkJCQkJZ2V0QWN0aW9uQmFyQ29udHJpYnV0b3IoKS5zZXRBY3RpdmVFZGl0b3IoVmVjdG9yRWRpdG9yLnRoaXMpOworCisJCQkJCQlzZXRDdXJyZW50Vmlld2VyKGNvbnRlbnRPdXRsaW5lVmlld2VyKTsKKwkJCQkJfQorCQkJCX0KKwkJCQllbHNlIGlmIChwIGluc3RhbmNlb2YgUHJvcGVydHlTaGVldCkgeworCQkJCQlpZiAoKChQcm9wZXJ0eVNoZWV0KXApLmdldEN1cnJlbnRQYWdlKCkgPT0gcHJvcGVydHlTaGVldFBhZ2UpIHsKKwkJCQkJCWdldEFjdGlvbkJhckNvbnRyaWJ1dG9yKCkuc2V0QWN0aXZlRWRpdG9yKFZlY3RvckVkaXRvci50aGlzKTsKKwkJCQkJCWhhbmRsZUFjdGl2YXRlKCk7CisJCQkJCX0KKwkJCQl9CisJCQkJZWxzZSBpZiAocCA9PSBWZWN0b3JFZGl0b3IudGhpcykgeworCQkJCQloYW5kbGVBY3RpdmF0ZSgpOworCQkJCX0KKwkJCX0KKwkJCXB1YmxpYyB2b2lkIHBhcnRCcm91Z2h0VG9Ub3AoSVdvcmtiZW5jaFBhcnQgcCkgeworCQkJCS8vIElnbm9yZS4KKwkJCX0KKwkJCXB1YmxpYyB2b2lkIHBhcnRDbG9zZWQoSVdvcmtiZW5jaFBhcnQgcCkgeworCQkJCS8vIElnbm9yZS4KKwkJCX0KKwkJCXB1YmxpYyB2b2lkIHBhcnREZWFjdGl2YXRlZChJV29ya2JlbmNoUGFydCBwKSB7CisJCQkJLy8gSWdub3JlLgorCQkJfQorCQkJcHVibGljIHZvaWQgcGFydE9wZW5lZChJV29ya2JlbmNoUGFydCBwKSB7CisJCQkJLy8gSWdub3JlLgorCQkJfQorCQl9OworCisJLyoqCisJICogUmVzb3VyY2VzIHRoYXQgaGF2ZSBiZWVuIHJlbW92ZWQgc2luY2UgbGFzdCBhY3RpdmF0aW9uLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBDb2xsZWN0aW9uPFJlc291cmNlPiByZW1vdmVkUmVzb3VyY2VzID0gbmV3IEFycmF5TGlzdDxSZXNvdXJjZT4oKTsKKworCS8qKgorCSAqIFJlc291cmNlcyB0aGF0IGhhdmUgYmVlbiBjaGFuZ2VkIHNpbmNlIGxhc3QgYWN0aXZhdGlvbi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgQ29sbGVjdGlvbjxSZXNvdXJjZT4gY2hhbmdlZFJlc291cmNlcyA9IG5ldyBBcnJheUxpc3Q8UmVzb3VyY2U+KCk7CisKKwkvKioKKwkgKiBSZXNvdXJjZXMgdGhhdCBoYXZlIGJlZW4gc2F2ZWQuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIENvbGxlY3Rpb248UmVzb3VyY2U+IHNhdmVkUmVzb3VyY2VzID0gbmV3IEFycmF5TGlzdDxSZXNvdXJjZT4oKTsKKworCS8qKgorCSAqIE1hcCB0byBzdG9yZSB0aGUgZGlhZ25vc3RpYyBhc3NvY2lhdGVkIHdpdGggYSByZXNvdXJjZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgTWFwPFJlc291cmNlLCBEaWFnbm9zdGljPiByZXNvdXJjZVRvRGlhZ25vc3RpY01hcCA9IG5ldyBMaW5rZWRIYXNoTWFwPFJlc291cmNlLCBEaWFnbm9zdGljPigpOworCisJLyoqCisJICogQ29udHJvbHMgd2hldGhlciB0aGUgcHJvYmxlbSBpbmRpY2F0aW9uIHNob3VsZCBiZSB1cGRhdGVkLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBib29sZWFuIHVwZGF0ZVByb2JsZW1JbmRpY2F0aW9uID0gdHJ1ZTsKKworCS8qKgorCSAqIEFkYXB0ZXIgdXNlZCB0byB1cGRhdGUgdGhlIHByb2JsZW0gaW5kaWNhdGlvbiB3aGVuIHJlc291cmNlcyBhcmUgZGVtYW5kZWQgbG9hZGVkLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBFQ29udGVudEFkYXB0ZXIgcHJvYmxlbUluZGljYXRpb25BZGFwdGVyID0gCisJCW5ldyBFQ29udGVudEFkYXB0ZXIoKSB7CisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyB2b2lkIG5vdGlmeUNoYW5nZWQoTm90aWZpY2F0aW9uIG5vdGlmaWNhdGlvbikgeworCQkJCWlmIChub3RpZmljYXRpb24uZ2V0Tm90aWZpZXIoKSBpbnN0YW5jZW9mIFJlc291cmNlKSB7CisJCQkJCXN3aXRjaCAobm90aWZpY2F0aW9uLmdldEZlYXR1cmVJRChSZXNvdXJjZS5jbGFzcykpIHsKKwkJCQkJCWNhc2UgUmVzb3VyY2UuUkVTT1VSQ0VfX0lTX0xPQURFRDoKKwkJCQkJCWNhc2UgUmVzb3VyY2UuUkVTT1VSQ0VfX0VSUk9SUzoKKwkJCQkJCWNhc2UgUmVzb3VyY2UuUkVTT1VSQ0VfX1dBUk5JTkdTOiB7CisJCQkJCQkJUmVzb3VyY2UgcmVzb3VyY2UgPSAoUmVzb3VyY2Upbm90aWZpY2F0aW9uLmdldE5vdGlmaWVyKCk7CisJCQkJCQkJRGlhZ25vc3RpYyBkaWFnbm9zdGljID0gYW5hbHl6ZVJlc291cmNlUHJvYmxlbXMocmVzb3VyY2UsIG51bGwpOworCQkJCQkJCWlmIChkaWFnbm9zdGljLmdldFNldmVyaXR5KCkgIT0gRGlhZ25vc3RpYy5PSykgeworCQkJCQkJCQlyZXNvdXJjZVRvRGlhZ25vc3RpY01hcC5wdXQocmVzb3VyY2UsIGRpYWdub3N0aWMpOworCQkJCQkJCX0KKwkJCQkJCQllbHNlIHsKKwkJCQkJCQkJcmVzb3VyY2VUb0RpYWdub3N0aWNNYXAucmVtb3ZlKHJlc291cmNlKTsKKwkJCQkJCQl9CisKKwkJCQkJCQlpZiAodXBkYXRlUHJvYmxlbUluZGljYXRpb24pIHsKKwkJCQkJCQkJZ2V0U2l0ZSgpLmdldFNoZWxsKCkuZ2V0RGlzcGxheSgpLmFzeW5jRXhlYworCQkJCQkJCQkJKG5ldyBSdW5uYWJsZSgpIHsKKwkJCQkJCQkJCQkgcHVibGljIHZvaWQgcnVuKCkgeworCQkJCQkJCQkJCQkgdXBkYXRlUHJvYmxlbUluZGljYXRpb24oKTsKKwkJCQkJCQkJCQkgfQorCQkJCQkJCQkJIH0pOworCQkJCQkJCX0KKwkJCQkJCQlicmVhazsKKwkJCQkJCX0KKwkJCQkJfQorCQkJCX0KKwkJCQllbHNlIHsKKwkJCQkJc3VwZXIubm90aWZ5Q2hhbmdlZChub3RpZmljYXRpb24pOworCQkJCX0KKwkJCX0KKworCQkJQE92ZXJyaWRlCisJCQlwcm90ZWN0ZWQgdm9pZCBzZXRUYXJnZXQoUmVzb3VyY2UgdGFyZ2V0KSB7CisJCQkJYmFzaWNTZXRUYXJnZXQodGFyZ2V0KTsKKwkJCX0KKworCQkJQE92ZXJyaWRlCisJCQlwcm90ZWN0ZWQgdm9pZCB1bnNldFRhcmdldChSZXNvdXJjZSB0YXJnZXQpIHsKKwkJCQliYXNpY1Vuc2V0VGFyZ2V0KHRhcmdldCk7CisJCQl9CisJCX07CisKKwkvKioKKwkgKiBUaGlzIGxpc3RlbnMgZm9yIHdvcmtzcGFjZSBjaGFuZ2VzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBJUmVzb3VyY2VDaGFuZ2VMaXN0ZW5lciByZXNvdXJjZUNoYW5nZUxpc3RlbmVyID0KKwkJbmV3IElSZXNvdXJjZUNoYW5nZUxpc3RlbmVyKCkgeworCQkJcHVibGljIHZvaWQgcmVzb3VyY2VDaGFuZ2VkKElSZXNvdXJjZUNoYW5nZUV2ZW50IGV2ZW50KSB7CisJCQkJSVJlc291cmNlRGVsdGEgZGVsdGEgPSBldmVudC5nZXREZWx0YSgpOworCQkJCXRyeSB7CisJCQkJCWNsYXNzIFJlc291cmNlRGVsdGFWaXNpdG9yIGltcGxlbWVudHMgSVJlc291cmNlRGVsdGFWaXNpdG9yIHsKKwkJCQkJCXByb3RlY3RlZCBSZXNvdXJjZVNldCByZXNvdXJjZVNldCA9IGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKTsKKwkJCQkJCXByb3RlY3RlZCBDb2xsZWN0aW9uPFJlc291cmNlPiBjaGFuZ2VkUmVzb3VyY2VzID0gbmV3IEFycmF5TGlzdDxSZXNvdXJjZT4oKTsKKwkJCQkJCXByb3RlY3RlZCBDb2xsZWN0aW9uPFJlc291cmNlPiByZW1vdmVkUmVzb3VyY2VzID0gbmV3IEFycmF5TGlzdDxSZXNvdXJjZT4oKTsKKworCQkJCQkJcHVibGljIGJvb2xlYW4gdmlzaXQoSVJlc291cmNlRGVsdGEgZGVsdGEpIHsKKwkJCQkJCQlpZiAoZGVsdGEuZ2V0UmVzb3VyY2UoKS5nZXRUeXBlKCkgPT0gSVJlc291cmNlLkZJTEUpIHsKKwkJCQkJCQkJaWYgKGRlbHRhLmdldEtpbmQoKSA9PSBJUmVzb3VyY2VEZWx0YS5SRU1PVkVEIHx8CisJCQkJCQkJCSAgICBkZWx0YS5nZXRLaW5kKCkgPT0gSVJlc291cmNlRGVsdGEuQ0hBTkdFRCAmJiBkZWx0YS5nZXRGbGFncygpICE9IElSZXNvdXJjZURlbHRhLk1BUktFUlMpIHsKKwkJCQkJCQkJCVJlc291cmNlIHJlc291cmNlID0gcmVzb3VyY2VTZXQuZ2V0UmVzb3VyY2UoVVJJLmNyZWF0ZVBsYXRmb3JtUmVzb3VyY2VVUkkoZGVsdGEuZ2V0RnVsbFBhdGgoKS50b1N0cmluZygpLCB0cnVlKSwgZmFsc2UpOworCQkJCQkJCQkJaWYgKHJlc291cmNlICE9IG51bGwpIHsKKwkJCQkJCQkJCQlpZiAoZGVsdGEuZ2V0S2luZCgpID09IElSZXNvdXJjZURlbHRhLlJFTU9WRUQpIHsKKwkJCQkJCQkJCQkJcmVtb3ZlZFJlc291cmNlcy5hZGQocmVzb3VyY2UpOworCQkJCQkJCQkJCX0KKwkJCQkJCQkJCQllbHNlIGlmICghc2F2ZWRSZXNvdXJjZXMucmVtb3ZlKHJlc291cmNlKSkgeworCQkJCQkJCQkJCQljaGFuZ2VkUmVzb3VyY2VzLmFkZChyZXNvdXJjZSk7CisJCQkJCQkJCQkJfQorCQkJCQkJCQkJfQorCQkJCQkJCQl9CisJCQkJCQkJfQorCisJCQkJCQkJcmV0dXJuIHRydWU7CisJCQkJCQl9CisKKwkJCQkJCXB1YmxpYyBDb2xsZWN0aW9uPFJlc291cmNlPiBnZXRDaGFuZ2VkUmVzb3VyY2VzKCkgeworCQkJCQkJCXJldHVybiBjaGFuZ2VkUmVzb3VyY2VzOworCQkJCQkJfQorCisJCQkJCQlwdWJsaWMgQ29sbGVjdGlvbjxSZXNvdXJjZT4gZ2V0UmVtb3ZlZFJlc291cmNlcygpIHsKKwkJCQkJCQlyZXR1cm4gcmVtb3ZlZFJlc291cmNlczsKKwkJCQkJCX0KKwkJCQkJfQorCisJCQkJCWZpbmFsIFJlc291cmNlRGVsdGFWaXNpdG9yIHZpc2l0b3IgPSBuZXcgUmVzb3VyY2VEZWx0YVZpc2l0b3IoKTsKKwkJCQkJZGVsdGEuYWNjZXB0KHZpc2l0b3IpOworCisJCQkJCWlmICghdmlzaXRvci5nZXRSZW1vdmVkUmVzb3VyY2VzKCkuaXNFbXB0eSgpKSB7CisJCQkJCQlnZXRTaXRlKCkuZ2V0U2hlbGwoKS5nZXREaXNwbGF5KCkuYXN5bmNFeGVjCisJCQkJCQkJKG5ldyBSdW5uYWJsZSgpIHsKKwkJCQkJCQkJIHB1YmxpYyB2b2lkIHJ1bigpIHsKKwkJCQkJCQkJCSByZW1vdmVkUmVzb3VyY2VzLmFkZEFsbCh2aXNpdG9yLmdldFJlbW92ZWRSZXNvdXJjZXMoKSk7CisJCQkJCQkJCQkgaWYgKCFpc0RpcnR5KCkpIHsKKwkJCQkJCQkJCQkgZ2V0U2l0ZSgpLmdldFBhZ2UoKS5jbG9zZUVkaXRvcihWZWN0b3JFZGl0b3IudGhpcywgZmFsc2UpOworCQkJCQkJCQkJIH0KKwkJCQkJCQkJIH0KKwkJCQkJCQkgfSk7CisJCQkJCX0KKworCQkJCQlpZiAoIXZpc2l0b3IuZ2V0Q2hhbmdlZFJlc291cmNlcygpLmlzRW1wdHkoKSkgeworCQkJCQkJZ2V0U2l0ZSgpLmdldFNoZWxsKCkuZ2V0RGlzcGxheSgpLmFzeW5jRXhlYworCQkJCQkJCShuZXcgUnVubmFibGUoKSB7CisJCQkJCQkJCSBwdWJsaWMgdm9pZCBydW4oKSB7CisJCQkJCQkJCQkgY2hhbmdlZFJlc291cmNlcy5hZGRBbGwodmlzaXRvci5nZXRDaGFuZ2VkUmVzb3VyY2VzKCkpOworCQkJCQkJCQkJIGlmIChnZXRTaXRlKCkuZ2V0UGFnZSgpLmdldEFjdGl2ZUVkaXRvcigpID09IFZlY3RvckVkaXRvci50aGlzKSB7CisJCQkJCQkJCQkJIGhhbmRsZUFjdGl2YXRlKCk7CisJCQkJCQkJCQkgfQorCQkJCQkJCQkgfQorCQkJCQkJCSB9KTsKKwkJCQkJfQorCQkJCX0KKwkJCQljYXRjaCAoQ29yZUV4Y2VwdGlvbiBleGNlcHRpb24pIHsKKwkJCQkJVmVjdG9yRWRpdG9yUGx1Z2luLklOU1RBTkNFLmxvZyhleGNlcHRpb24pOworCQkJCX0KKwkJCX0KKwkJfTsKKworCS8qKgorCSAqIEhhbmRsZXMgYWN0aXZhdGlvbiBvZiB0aGUgZWRpdG9yIG9yIGl0J3MgYXNzb2NpYXRlZCB2aWV3cy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBoYW5kbGVBY3RpdmF0ZSgpIHsKKwkJLy8gUmVjb21wdXRlIHRoZSByZWFkIG9ubHkgc3RhdGUuCisJCS8vCisJCWlmIChlZGl0aW5nRG9tYWluLmdldFJlc291cmNlVG9SZWFkT25seU1hcCgpICE9IG51bGwpIHsKKwkJICBlZGl0aW5nRG9tYWluLmdldFJlc291cmNlVG9SZWFkT25seU1hcCgpLmNsZWFyKCk7CisKKwkJICAvLyBSZWZyZXNoIGFueSBhY3Rpb25zIHRoYXQgbWF5IGJlY29tZSBlbmFibGVkIG9yIGRpc2FibGVkLgorCQkgIC8vCisJCSAgc2V0U2VsZWN0aW9uKGdldFNlbGVjdGlvbigpKTsKKwkJfQorCisJCWlmICghcmVtb3ZlZFJlc291cmNlcy5pc0VtcHR5KCkpIHsKKwkJCWlmIChoYW5kbGVEaXJ0eUNvbmZsaWN0KCkpIHsKKwkJCQlnZXRTaXRlKCkuZ2V0UGFnZSgpLmNsb3NlRWRpdG9yKFZlY3RvckVkaXRvci50aGlzLCBmYWxzZSk7CisJCQl9CisJCQllbHNlIHsKKwkJCQlyZW1vdmVkUmVzb3VyY2VzLmNsZWFyKCk7CisJCQkJY2hhbmdlZFJlc291cmNlcy5jbGVhcigpOworCQkJCXNhdmVkUmVzb3VyY2VzLmNsZWFyKCk7CisJCQl9CisJCX0KKwkJZWxzZSBpZiAoIWNoYW5nZWRSZXNvdXJjZXMuaXNFbXB0eSgpKSB7CisJCQljaGFuZ2VkUmVzb3VyY2VzLnJlbW92ZUFsbChzYXZlZFJlc291cmNlcyk7CisJCQloYW5kbGVDaGFuZ2VkUmVzb3VyY2VzKCk7CisJCQljaGFuZ2VkUmVzb3VyY2VzLmNsZWFyKCk7CisJCQlzYXZlZFJlc291cmNlcy5jbGVhcigpOworCQl9CisJfQorCisJLyoqCisJICogSGFuZGxlcyB3aGF0IHRvIGRvIHdpdGggY2hhbmdlZCByZXNvdXJjZXMgb24gYWN0aXZhdGlvbi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBoYW5kbGVDaGFuZ2VkUmVzb3VyY2VzKCkgeworCQlpZiAoIWNoYW5nZWRSZXNvdXJjZXMuaXNFbXB0eSgpICYmICghaXNEaXJ0eSgpIHx8IGhhbmRsZURpcnR5Q29uZmxpY3QoKSkpIHsKKwkJCWlmIChpc0RpcnR5KCkpIHsKKwkJCQljaGFuZ2VkUmVzb3VyY2VzLmFkZEFsbChlZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkuZ2V0UmVzb3VyY2VzKCkpOworCQkJfQorCQkJZWRpdGluZ0RvbWFpbi5nZXRDb21tYW5kU3RhY2soKS5mbHVzaCgpOworCisJCQl1cGRhdGVQcm9ibGVtSW5kaWNhdGlvbiA9IGZhbHNlOworCQkJZm9yIChSZXNvdXJjZSByZXNvdXJjZSA6IGNoYW5nZWRSZXNvdXJjZXMpIHsKKwkJCQlpZiAocmVzb3VyY2UuaXNMb2FkZWQoKSkgeworCQkJCQlyZXNvdXJjZS51bmxvYWQoKTsKKwkJCQkJdHJ5IHsKKwkJCQkJCXJlc291cmNlLmxvYWQoQ29sbGVjdGlvbnMuRU1QVFlfTUFQKTsKKwkJCQkJfQorCQkJCQljYXRjaCAoSU9FeGNlcHRpb24gZXhjZXB0aW9uKSB7CisJCQkJCQlpZiAoIXJlc291cmNlVG9EaWFnbm9zdGljTWFwLmNvbnRhaW5zS2V5KHJlc291cmNlKSkgeworCQkJCQkJCXJlc291cmNlVG9EaWFnbm9zdGljTWFwLnB1dChyZXNvdXJjZSwgYW5hbHl6ZVJlc291cmNlUHJvYmxlbXMocmVzb3VyY2UsIGV4Y2VwdGlvbikpOworCQkJCQkJfQorCQkJCQl9CisJCQkJfQorCQkJfQorCisJCQlpZiAoQWRhcHRlckZhY3RvcnlFZGl0aW5nRG9tYWluLmlzU3RhbGUoZWRpdG9yU2VsZWN0aW9uKSkgeworCQkJCXNldFNlbGVjdGlvbihTdHJ1Y3R1cmVkU2VsZWN0aW9uLkVNUFRZKTsKKwkJCX0KKworCQkJdXBkYXRlUHJvYmxlbUluZGljYXRpb24gPSB0cnVlOworCQkJdXBkYXRlUHJvYmxlbUluZGljYXRpb24oKTsKKwkJfQorCX0KKyAgCisJLyoqCisJICogVXBkYXRlcyB0aGUgcHJvYmxlbXMgaW5kaWNhdGlvbiB3aXRoIHRoZSBpbmZvcm1hdGlvbiBkZXNjcmliZWQgaW4gdGhlIHNwZWNpZmllZCBkaWFnbm9zdGljLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIHVwZGF0ZVByb2JsZW1JbmRpY2F0aW9uKCkgeworCQlpZiAodXBkYXRlUHJvYmxlbUluZGljYXRpb24pIHsKKwkJCUJhc2ljRGlhZ25vc3RpYyBkaWFnbm9zdGljID0KKwkJCQluZXcgQmFzaWNEaWFnbm9zdGljCisJCQkJCShEaWFnbm9zdGljLk9LLAorCQkJCQkgIm9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuZWRpdG9yIiwKKwkJCQkJIDAsCisJCQkJCSBudWxsLAorCQkJCQkgbmV3IE9iamVjdCBbXSB7IGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKSB9KTsKKwkJCWZvciAoRGlhZ25vc3RpYyBjaGlsZERpYWdub3N0aWMgOiByZXNvdXJjZVRvRGlhZ25vc3RpY01hcC52YWx1ZXMoKSkgeworCQkJCWlmIChjaGlsZERpYWdub3N0aWMuZ2V0U2V2ZXJpdHkoKSAhPSBEaWFnbm9zdGljLk9LKSB7CisJCQkJCWRpYWdub3N0aWMuYWRkKGNoaWxkRGlhZ25vc3RpYyk7CisJCQkJfQorCQkJfQorCisJCQlpbnQgbGFzdEVkaXRvclBhZ2UgPSBnZXRQYWdlQ291bnQoKSAtIDE7CisJCQlpZiAobGFzdEVkaXRvclBhZ2UgPj0gMCAmJiBnZXRFZGl0b3IobGFzdEVkaXRvclBhZ2UpIGluc3RhbmNlb2YgUHJvYmxlbUVkaXRvclBhcnQpIHsKKwkJCQkoKFByb2JsZW1FZGl0b3JQYXJ0KWdldEVkaXRvcihsYXN0RWRpdG9yUGFnZSkpLnNldERpYWdub3N0aWMoZGlhZ25vc3RpYyk7CisJCQkJaWYgKGRpYWdub3N0aWMuZ2V0U2V2ZXJpdHkoKSAhPSBEaWFnbm9zdGljLk9LKSB7CisJCQkJCXNldEFjdGl2ZVBhZ2UobGFzdEVkaXRvclBhZ2UpOworCQkJCX0KKwkJCX0KKwkJCWVsc2UgaWYgKGRpYWdub3N0aWMuZ2V0U2V2ZXJpdHkoKSAhPSBEaWFnbm9zdGljLk9LKSB7CisJCQkJUHJvYmxlbUVkaXRvclBhcnQgcHJvYmxlbUVkaXRvclBhcnQgPSBuZXcgUHJvYmxlbUVkaXRvclBhcnQoKTsKKwkJCQlwcm9ibGVtRWRpdG9yUGFydC5zZXREaWFnbm9zdGljKGRpYWdub3N0aWMpOworCQkJCXByb2JsZW1FZGl0b3JQYXJ0LnNldE1hcmtlckhlbHBlcihtYXJrZXJIZWxwZXIpOworCQkJCXRyeSB7CisJCQkJCWFkZFBhZ2UoKytsYXN0RWRpdG9yUGFnZSwgcHJvYmxlbUVkaXRvclBhcnQsIGdldEVkaXRvcklucHV0KCkpOworCQkJCQlzZXRQYWdlVGV4dChsYXN0RWRpdG9yUGFnZSwgcHJvYmxlbUVkaXRvclBhcnQuZ2V0UGFydE5hbWUoKSk7CisJCQkJCXNldEFjdGl2ZVBhZ2UobGFzdEVkaXRvclBhZ2UpOworCQkJCQlzaG93VGFicygpOworCQkJCX0KKwkJCQljYXRjaCAoUGFydEluaXRFeGNlcHRpb24gZXhjZXB0aW9uKSB7CisJCQkJCVZlY3RvckVkaXRvclBsdWdpbi5JTlNUQU5DRS5sb2coZXhjZXB0aW9uKTsKKwkJCQl9CisJCQl9CisKKwkJCWlmIChtYXJrZXJIZWxwZXIuaGFzTWFya2VycyhlZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkpKSB7CisJCQkJbWFya2VySGVscGVyLmRlbGV0ZU1hcmtlcnMoZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpKTsKKwkJCQlpZiAoZGlhZ25vc3RpYy5nZXRTZXZlcml0eSgpICE9IERpYWdub3N0aWMuT0spIHsKKwkJCQkJdHJ5IHsKKwkJCQkJCW1hcmtlckhlbHBlci5jcmVhdGVNYXJrZXJzKGRpYWdub3N0aWMpOworCQkJCQl9CisJCQkJCWNhdGNoIChDb3JlRXhjZXB0aW9uIGV4Y2VwdGlvbikgeworCQkJCQkJVmVjdG9yRWRpdG9yUGx1Z2luLklOU1RBTkNFLmxvZyhleGNlcHRpb24pOworCQkJCQl9CisJCQkJfQorCQkJfQorCQl9CisJfQorCisJLyoqCisJICogU2hvd3MgYSBkaWFsb2cgdGhhdCBhc2tzIGlmIGNvbmZsaWN0aW5nIGNoYW5nZXMgc2hvdWxkIGJlIGRpc2NhcmRlZC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgYm9vbGVhbiBoYW5kbGVEaXJ0eUNvbmZsaWN0KCkgeworCQlyZXR1cm4KKwkJCU1lc3NhZ2VEaWFsb2cub3BlblF1ZXN0aW9uCisJCQkJKGdldFNpdGUoKS5nZXRTaGVsbCgpLAorCQkJCSBnZXRTdHJpbmcoIl9VSV9GaWxlQ29uZmxpY3RfbGFiZWwiKSwKKwkJCQkgZ2V0U3RyaW5nKCJfV0FSTl9GaWxlQ29uZmxpY3QiKSk7CisJfQorCisJLyoqCisJICogVGhpcyBjcmVhdGVzIGEgbW9kZWwgZWRpdG9yLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBWZWN0b3JFZGl0b3IoKSB7CisJCXN1cGVyKCk7CisJCWluaXRpYWxpemVFZGl0aW5nRG9tYWluKCk7CisJfQorCisJLyoqCisJICogVGhpcyBzZXRzIHVwIHRoZSBlZGl0aW5nIGRvbWFpbiBmb3IgdGhlIG1vZGVsIGVkaXRvci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBpbml0aWFsaXplRWRpdGluZ0RvbWFpbigpIHsKKwkJLy8gQ3JlYXRlIGFuIGFkYXB0ZXIgZmFjdG9yeSB0aGF0IHlpZWxkcyBpdGVtIHByb3ZpZGVycy4KKwkJLy8KKwkJYWRhcHRlckZhY3RvcnkgPSBuZXcgQ29tcG9zZWRBZGFwdGVyRmFjdG9yeShDb21wb3NlZEFkYXB0ZXJGYWN0b3J5LkRlc2NyaXB0b3IuUmVnaXN0cnkuSU5TVEFOQ0UpOworCisJCWFkYXB0ZXJGYWN0b3J5LmFkZEFkYXB0ZXJGYWN0b3J5KG5ldyBSZXNvdXJjZUl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5KCkpOworCQlhZGFwdGVyRmFjdG9yeS5hZGRBZGFwdGVyRmFjdG9yeShuZXcgVmVjdG9ySXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkoKSk7CisJCWFkYXB0ZXJGYWN0b3J5LmFkZEFkYXB0ZXJGYWN0b3J5KG5ldyBTdGFuZGFyZEl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5KCkpOworCQlhZGFwdGVyRmFjdG9yeS5hZGRBZGFwdGVyRmFjdG9yeShuZXcgQ29tbW9uSXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkoKSk7CisJCWFkYXB0ZXJGYWN0b3J5LmFkZEFkYXB0ZXJGYWN0b3J5KG5ldyBFY29yZUl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5KCkpOworCQlhZGFwdGVyRmFjdG9yeS5hZGRBZGFwdGVyRmFjdG9yeShuZXcgTW9kaWZpZXJJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSgpKTsKKwkJYWRhcHRlckZhY3RvcnkuYWRkQWRhcHRlckZhY3RvcnkobmV3IE1vZGVsSXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkoKSk7CisJCWFkYXB0ZXJGYWN0b3J5LmFkZEFkYXB0ZXJGYWN0b3J5KG5ldyBHcmFwaEl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5KCkpOworCQlhZGFwdGVyRmFjdG9yeS5hZGRBZGFwdGVyRmFjdG9yeShuZXcgU2NlbmFyaW9JdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSgpKTsKKwkJYWRhcHRlckZhY3RvcnkuYWRkQWRhcHRlckZhY3RvcnkobmV3IFNlcXVlbmNlckl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5KCkpOworCQlhZGFwdGVyRmFjdG9yeS5hZGRBZGFwdGVyRmFjdG9yeShuZXcgU29sdmVySXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkoKSk7CisJCWFkYXB0ZXJGYWN0b3J5LmFkZEFkYXB0ZXJGYWN0b3J5KG5ldyBMYWJlbHNJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSgpKTsKKwkJYWRhcHRlckZhY3RvcnkuYWRkQWRhcHRlckZhY3RvcnkobmV3IG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5wcm92aWRlci5TdGFuZGFyZEl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5KCkpOworCQlhZGFwdGVyRmFjdG9yeS5hZGRBZGFwdGVyRmFjdG9yeShuZXcgTG9nZ2VySXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkoKSk7CisJCWFkYXB0ZXJGYWN0b3J5LmFkZEFkYXB0ZXJGYWN0b3J5KG5ldyBSZWZsZWN0aXZlSXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkoKSk7CisKKwkJLy8gQ3JlYXRlIHRoZSBjb21tYW5kIHN0YWNrIHRoYXQgd2lsbCBub3RpZnkgdGhpcyBlZGl0b3IgYXMgY29tbWFuZHMgYXJlIGV4ZWN1dGVkLgorCQkvLworCQlCYXNpY0NvbW1hbmRTdGFjayBjb21tYW5kU3RhY2sgPSBuZXcgQmFzaWNDb21tYW5kU3RhY2soKTsKKworCQkvLyBBZGQgYSBsaXN0ZW5lciB0byBzZXQgdGhlIG1vc3QgcmVjZW50IGNvbW1hbmQncyBhZmZlY3RlZCBvYmplY3RzIHRvIGJlIHRoZSBzZWxlY3Rpb24gb2YgdGhlIHZpZXdlciB3aXRoIGZvY3VzLgorCQkvLworCQljb21tYW5kU3RhY2suYWRkQ29tbWFuZFN0YWNrTGlzdGVuZXIKKwkJCShuZXcgQ29tbWFuZFN0YWNrTGlzdGVuZXIoKSB7CisJCQkJIHB1YmxpYyB2b2lkIGNvbW1hbmRTdGFja0NoYW5nZWQoZmluYWwgRXZlbnRPYmplY3QgZXZlbnQpIHsKKwkJCQkJIGdldENvbnRhaW5lcigpLmdldERpc3BsYXkoKS5hc3luY0V4ZWMKKwkJCQkJCSAobmV3IFJ1bm5hYmxlKCkgeworCQkJCQkJCSAgcHVibGljIHZvaWQgcnVuKCkgeworCQkJCQkJCQkgIGZpcmVQcm9wZXJ0eUNoYW5nZShJRWRpdG9yUGFydC5QUk9QX0RJUlRZKTsKKworCQkJCQkJCQkgIC8vIFRyeSB0byBzZWxlY3QgdGhlIGFmZmVjdGVkIG9iamVjdHMuCisJCQkJCQkJCSAgLy8KKwkJCQkJCQkJICBDb21tYW5kIG1vc3RSZWNlbnRDb21tYW5kID0gKChDb21tYW5kU3RhY2spZXZlbnQuZ2V0U291cmNlKCkpLmdldE1vc3RSZWNlbnRDb21tYW5kKCk7CisJCQkJCQkJCSAgaWYgKG1vc3RSZWNlbnRDb21tYW5kICE9IG51bGwpIHsKKwkJCQkJCQkJCSAgc2V0U2VsZWN0aW9uVG9WaWV3ZXIobW9zdFJlY2VudENvbW1hbmQuZ2V0QWZmZWN0ZWRPYmplY3RzKCkpOworCQkJCQkJCQkgIH0KKwkJCQkJCQkJICBpZiAocHJvcGVydHlTaGVldFBhZ2UgIT0gbnVsbCAmJiAhcHJvcGVydHlTaGVldFBhZ2UuZ2V0Q29udHJvbCgpLmlzRGlzcG9zZWQoKSkgeworCQkJCQkJCQkJICBwcm9wZXJ0eVNoZWV0UGFnZS5yZWZyZXNoKCk7CisJCQkJCQkJCSAgfQorCQkJCQkJCSAgfQorCQkJCQkJICB9KTsKKwkJCQkgfQorCQkJIH0pOworCisJCS8vIENyZWF0ZSB0aGUgZWRpdGluZyBkb21haW4gd2l0aCBhIHNwZWNpYWwgY29tbWFuZCBzdGFjay4KKwkJLy8KKwkJZWRpdGluZ0RvbWFpbiA9IG5ldyBBZGFwdGVyRmFjdG9yeUVkaXRpbmdEb21haW4oYWRhcHRlckZhY3RvcnksIGNvbW1hbmRTdGFjaywgbmV3IEhhc2hNYXA8UmVzb3VyY2UsIEJvb2xlYW4+KCkpOworCX0KKworCS8qKgorCSAqIFRoaXMgaXMgaGVyZSBmb3IgdGhlIGxpc3RlbmVyIHRvIGJlIGFibGUgdG8gY2FsbCBpdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwkJCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIGZpcmVQcm9wZXJ0eUNoYW5nZShpbnQgYWN0aW9uKSB7CisJCXN1cGVyLmZpcmVQcm9wZXJ0eUNoYW5nZShhY3Rpb24pOworCX0KKworCS8qKgorCSAqIFRoaXMgc2V0cyB0aGUgc2VsZWN0aW9uIGludG8gd2hpY2hldmVyIHZpZXdlciBpcyBhY3RpdmUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgc2V0U2VsZWN0aW9uVG9WaWV3ZXIoQ29sbGVjdGlvbjw/PiBjb2xsZWN0aW9uKSB7CisJCWZpbmFsIENvbGxlY3Rpb248Pz4gdGhlU2VsZWN0aW9uID0gY29sbGVjdGlvbjsKKwkJLy8gTWFrZSBzdXJlIGl0J3Mgb2theS4KKwkJLy8KKwkJaWYgKHRoZVNlbGVjdGlvbiAhPSBudWxsICYmICF0aGVTZWxlY3Rpb24uaXNFbXB0eSgpKSB7CisJCQlSdW5uYWJsZSBydW5uYWJsZSA9CisJCQkJbmV3IFJ1bm5hYmxlKCkgeworCQkJCQlwdWJsaWMgdm9pZCBydW4oKSB7CisJCQkJCQkvLyBUcnkgdG8gc2VsZWN0IHRoZSBpdGVtcyBpbiB0aGUgY3VycmVudCBjb250ZW50IHZpZXdlciBvZiB0aGUgZWRpdG9yLgorCQkJCQkJLy8KKwkJCQkJCWlmIChjdXJyZW50Vmlld2VyICE9IG51bGwpIHsKKwkJCQkJCQljdXJyZW50Vmlld2VyLnNldFNlbGVjdGlvbihuZXcgU3RydWN0dXJlZFNlbGVjdGlvbih0aGVTZWxlY3Rpb24udG9BcnJheSgpKSwgdHJ1ZSk7CisJCQkJCQl9CisJCQkJCX0KKwkJCQl9OworCQkJZ2V0U2l0ZSgpLmdldFNoZWxsKCkuZ2V0RGlzcGxheSgpLmFzeW5jRXhlYyhydW5uYWJsZSk7CisJCX0KKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgdGhlIGVkaXRpbmcgZG9tYWluIGFzIHJlcXVpcmVkIGJ5IHRoZSB7QGxpbmsgSUVkaXRpbmdEb21haW5Qcm92aWRlcn0gaW50ZXJmYWNlLgorCSAqIFRoaXMgaXMgaW1wb3J0YW50IGZvciBpbXBsZW1lbnRpbmcgdGhlIHN0YXRpYyBtZXRob2RzIG9mIHtAbGluayBBZGFwdGVyRmFjdG9yeUVkaXRpbmdEb21haW59CisJICogYW5kIGZvciBzdXBwb3J0aW5nIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5hY3Rpb24uQ29tbWFuZEFjdGlvbn0uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVkaXRpbmdEb21haW4gZ2V0RWRpdGluZ0RvbWFpbigpIHsKKwkJcmV0dXJuIGVkaXRpbmdEb21haW47CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIGNsYXNzIFJldmVyc2VBZGFwdGVyRmFjdG9yeUNvbnRlbnRQcm92aWRlciBleHRlbmRzIEFkYXB0ZXJGYWN0b3J5Q29udGVudFByb3ZpZGVyIHsKKwkJLyoqCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlwdWJsaWMgUmV2ZXJzZUFkYXB0ZXJGYWN0b3J5Q29udGVudFByb3ZpZGVyKEFkYXB0ZXJGYWN0b3J5IGFkYXB0ZXJGYWN0b3J5KSB7CisJCQlzdXBlcihhZGFwdGVyRmFjdG9yeSk7CisJCX0KKworCQkvKioKKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUBPdmVycmlkZQorCQlwdWJsaWMgT2JqZWN0IFtdIGdldEVsZW1lbnRzKE9iamVjdCBvYmplY3QpIHsKKwkJCU9iamVjdCBwYXJlbnQgPSBzdXBlci5nZXRQYXJlbnQob2JqZWN0KTsKKwkJCXJldHVybiAocGFyZW50ID09IG51bGwgPyBDb2xsZWN0aW9ucy5FTVBUWV9TRVQgOiBDb2xsZWN0aW9ucy5zaW5nbGV0b24ocGFyZW50KSkudG9BcnJheSgpOworCQl9CisKKwkJLyoqCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlAT3ZlcnJpZGUKKwkJcHVibGljIE9iamVjdCBbXSBnZXRDaGlsZHJlbihPYmplY3Qgb2JqZWN0KSB7CisJCQlPYmplY3QgcGFyZW50ID0gc3VwZXIuZ2V0UGFyZW50KG9iamVjdCk7CisJCQlyZXR1cm4gKHBhcmVudCA9PSBudWxsID8gQ29sbGVjdGlvbnMuRU1QVFlfU0VUIDogQ29sbGVjdGlvbnMuc2luZ2xldG9uKHBhcmVudCkpLnRvQXJyYXkoKTsKKwkJfQorCisJCS8qKgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJQE92ZXJyaWRlCisJCXB1YmxpYyBib29sZWFuIGhhc0NoaWxkcmVuKE9iamVjdCBvYmplY3QpIHsKKwkJCU9iamVjdCBwYXJlbnQgPSBzdXBlci5nZXRQYXJlbnQob2JqZWN0KTsKKwkJCXJldHVybiBwYXJlbnQgIT0gbnVsbDsKKwkJfQorCisJCS8qKgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJQE92ZXJyaWRlCisJCXB1YmxpYyBPYmplY3QgZ2V0UGFyZW50KE9iamVjdCBvYmplY3QpIHsKKwkJCXJldHVybiBudWxsOworCQl9CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgc2V0Q3VycmVudFZpZXdlclBhbmUoVmlld2VyUGFuZSB2aWV3ZXJQYW5lKSB7CisJCWlmIChjdXJyZW50Vmlld2VyUGFuZSAhPSB2aWV3ZXJQYW5lKSB7CisJCQlpZiAoY3VycmVudFZpZXdlclBhbmUgIT0gbnVsbCkgeworCQkJCWN1cnJlbnRWaWV3ZXJQYW5lLnNob3dGb2N1cyhmYWxzZSk7CisJCQl9CisJCQljdXJyZW50Vmlld2VyUGFuZSA9IHZpZXdlclBhbmU7CisJCX0KKwkJc2V0Q3VycmVudFZpZXdlcihjdXJyZW50Vmlld2VyUGFuZS5nZXRWaWV3ZXIoKSk7CisJfQorCisJLyoqCisJICogVGhpcyBtYWtlcyBzdXJlIHRoYXQgb25lIGNvbnRlbnQgdmlld2VyLCBlaXRoZXIgZm9yIHRoZSBjdXJyZW50IHBhZ2Ugb3IgdGhlIG91dGxpbmUgdmlldywgaWYgaXQgaGFzIGZvY3VzLAorCSAqIGlzIHRoZSBjdXJyZW50IG9uZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRDdXJyZW50Vmlld2VyKFZpZXdlciB2aWV3ZXIpIHsKKwkJLy8gSWYgaXQgaXMgY2hhbmdpbmcuLi4KKwkJLy8KKwkJaWYgKGN1cnJlbnRWaWV3ZXIgIT0gdmlld2VyKSB7CisJCQlpZiAoc2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyID09IG51bGwpIHsKKwkJCQkvLyBDcmVhdGUgdGhlIGxpc3RlbmVyIG9uIGRlbWFuZC4KKwkJCQkvLworCQkJCXNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lciA9CisJCQkJCW5ldyBJU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyKCkgeworCQkJCQkJLy8gVGhpcyBqdXN0IG5vdGlmaWVzIHRob3NlIHRoaW5ncyB0aGF0IGFyZSBhZmZlY3RlZCBieSB0aGUgc2VjdGlvbi4KKwkJCQkJCS8vCisJCQkJCQlwdWJsaWMgdm9pZCBzZWxlY3Rpb25DaGFuZ2VkKFNlbGVjdGlvbkNoYW5nZWRFdmVudCBzZWxlY3Rpb25DaGFuZ2VkRXZlbnQpIHsKKwkJCQkJCQlzZXRTZWxlY3Rpb24oc2VsZWN0aW9uQ2hhbmdlZEV2ZW50LmdldFNlbGVjdGlvbigpKTsKKwkJCQkJCX0KKwkJCQkJfTsKKwkJCX0KKworCQkJLy8gU3RvcCBsaXN0ZW5pbmcgdG8gdGhlIG9sZCBvbmUuCisJCQkvLworCQkJaWYgKGN1cnJlbnRWaWV3ZXIgIT0gbnVsbCkgeworCQkJCWN1cnJlbnRWaWV3ZXIucmVtb3ZlU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyKHNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcik7CisJCQl9CisKKwkJCS8vIFN0YXJ0IGxpc3RlbmluZyB0byB0aGUgbmV3IG9uZS4KKwkJCS8vCisJCQlpZiAodmlld2VyICE9IG51bGwpIHsKKwkJCQl2aWV3ZXIuYWRkU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyKHNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcik7CisJCQl9CisKKwkJCS8vIFJlbWVtYmVyIGl0LgorCQkJLy8KKwkJCWN1cnJlbnRWaWV3ZXIgPSB2aWV3ZXI7CisKKwkJCS8vIFNldCB0aGUgZWRpdG9ycyBzZWxlY3Rpb24gYmFzZWQgb24gdGhlIGN1cnJlbnQgdmlld2VyJ3Mgc2VsZWN0aW9uLgorCQkJLy8KKwkJCXNldFNlbGVjdGlvbihjdXJyZW50Vmlld2VyID09IG51bGwgPyBTdHJ1Y3R1cmVkU2VsZWN0aW9uLkVNUFRZIDogY3VycmVudFZpZXdlci5nZXRTZWxlY3Rpb24oKSk7CisJCX0KKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgdGhlIHZpZXdlciBhcyByZXF1aXJlZCBieSB0aGUge0BsaW5rIElWaWV3ZXJQcm92aWRlcn0gaW50ZXJmYWNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBWaWV3ZXIgZ2V0Vmlld2VyKCkgeworCQlyZXR1cm4gY3VycmVudFZpZXdlcjsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGNyZWF0ZXMgYSBjb250ZXh0IG1lbnUgZm9yIHRoZSB2aWV3ZXIgYW5kIGFkZHMgYSBsaXN0ZW5lciBhcyB3ZWxsIHJlZ2lzdGVyaW5nIHRoZSBtZW51IGZvciBleHRlbnNpb24uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgY3JlYXRlQ29udGV4dE1lbnVGb3IoU3RydWN0dXJlZFZpZXdlciB2aWV3ZXIpIHsKKwkJTWVudU1hbmFnZXIgY29udGV4dE1lbnUgPSBuZXcgTWVudU1hbmFnZXIoIiNQb3BVcCIpOworCQljb250ZXh0TWVudS5hZGQobmV3IFNlcGFyYXRvcigiYWRkaXRpb25zIikpOworCQljb250ZXh0TWVudS5zZXRSZW1vdmVBbGxXaGVuU2hvd24odHJ1ZSk7CisJCWNvbnRleHRNZW51LmFkZE1lbnVMaXN0ZW5lcih0aGlzKTsKKwkJTWVudSBtZW51PSBjb250ZXh0TWVudS5jcmVhdGVDb250ZXh0TWVudSh2aWV3ZXIuZ2V0Q29udHJvbCgpKTsKKwkJdmlld2VyLmdldENvbnRyb2woKS5zZXRNZW51KG1lbnUpOworCQlnZXRTaXRlKCkucmVnaXN0ZXJDb250ZXh0TWVudShjb250ZXh0TWVudSwgbmV3IFVud3JhcHBpbmdTZWxlY3Rpb25Qcm92aWRlcih2aWV3ZXIpKTsKKworCQlpbnQgZG5kT3BlcmF0aW9ucyA9IERORC5EUk9QX0NPUFkgfCBETkQuRFJPUF9NT1ZFIHwgRE5ELkRST1BfTElOSzsKKwkJVHJhbnNmZXJbXSB0cmFuc2ZlcnMgPSBuZXcgVHJhbnNmZXJbXSB7IExvY2FsVHJhbnNmZXIuZ2V0SW5zdGFuY2UoKSB9OworCQl2aWV3ZXIuYWRkRHJhZ1N1cHBvcnQoZG5kT3BlcmF0aW9ucywgdHJhbnNmZXJzLCBuZXcgVmlld2VyRHJhZ0FkYXB0ZXIodmlld2VyKSk7CisJCXZpZXdlci5hZGREcm9wU3VwcG9ydChkbmRPcGVyYXRpb25zLCB0cmFuc2ZlcnMsIG5ldyBFZGl0aW5nRG9tYWluVmlld2VyRHJvcEFkYXB0ZXIoZWRpdGluZ0RvbWFpbiwgdmlld2VyKSk7CisJfQorCisJLyoqCisJICogVGhpcyBpcyB0aGUgbWV0aG9kIGNhbGxlZCB0byBsb2FkIGEgcmVzb3VyY2UgaW50byB0aGUgZWRpdGluZyBkb21haW4ncyByZXNvdXJjZSBzZXQgYmFzZWQgb24gdGhlIGVkaXRvcidzIGlucHV0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIGNyZWF0ZU1vZGVsKCkgeworCQlVUkkgcmVzb3VyY2VVUkkgPSBFZGl0VUlVdGlsLmdldFVSSShnZXRFZGl0b3JJbnB1dCgpKTsKKwkJRXhjZXB0aW9uIGV4Y2VwdGlvbiA9IG51bGw7CisJCVJlc291cmNlIHJlc291cmNlID0gbnVsbDsKKwkJdHJ5IHsKKwkJCS8vIExvYWQgdGhlIHJlc291cmNlIHRocm91Z2ggdGhlIGVkaXRpbmcgZG9tYWluLgorCQkJLy8KKwkJCXJlc291cmNlID0gZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpLmdldFJlc291cmNlKHJlc291cmNlVVJJLCB0cnVlKTsKKwkJfQorCQljYXRjaCAoRXhjZXB0aW9uIGUpIHsKKwkJCWV4Y2VwdGlvbiA9IGU7CisJCQlyZXNvdXJjZSA9IGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKS5nZXRSZXNvdXJjZShyZXNvdXJjZVVSSSwgZmFsc2UpOworCQl9CisKKwkJRGlhZ25vc3RpYyBkaWFnbm9zdGljID0gYW5hbHl6ZVJlc291cmNlUHJvYmxlbXMocmVzb3VyY2UsIGV4Y2VwdGlvbik7CisJCWlmIChkaWFnbm9zdGljLmdldFNldmVyaXR5KCkgIT0gRGlhZ25vc3RpYy5PSykgeworCQkJcmVzb3VyY2VUb0RpYWdub3N0aWNNYXAucHV0KHJlc291cmNlLCAgYW5hbHl6ZVJlc291cmNlUHJvYmxlbXMocmVzb3VyY2UsIGV4Y2VwdGlvbikpOworCQl9CisJCWVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKS5lQWRhcHRlcnMoKS5hZGQocHJvYmxlbUluZGljYXRpb25BZGFwdGVyKTsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIGEgZGlhZ25vc3RpYyBkZXNjcmliaW5nIHRoZSBlcnJvcnMgYW5kIHdhcm5pbmdzIGxpc3RlZCBpbiB0aGUgcmVzb3VyY2UKKwkgKiBhbmQgdGhlIHNwZWNpZmllZCBleGNlcHRpb24gKGlmIGFueSkuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIERpYWdub3N0aWMgYW5hbHl6ZVJlc291cmNlUHJvYmxlbXMoUmVzb3VyY2UgcmVzb3VyY2UsIEV4Y2VwdGlvbiBleGNlcHRpb24pIHsKKwkJaWYgKCFyZXNvdXJjZS5nZXRFcnJvcnMoKS5pc0VtcHR5KCkgfHwgIXJlc291cmNlLmdldFdhcm5pbmdzKCkuaXNFbXB0eSgpKSB7CisJCQlCYXNpY0RpYWdub3N0aWMgYmFzaWNEaWFnbm9zdGljID0KKwkJCQluZXcgQmFzaWNEaWFnbm9zdGljCisJCQkJCShEaWFnbm9zdGljLkVSUk9SLAorCQkJCQkgIm9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuZWRpdG9yIiwKKwkJCQkJIDAsCisJCQkJCSBnZXRTdHJpbmcoIl9VSV9DcmVhdGVNb2RlbEVycm9yX21lc3NhZ2UiLCByZXNvdXJjZS5nZXRVUkkoKSksCisJCQkJCSBuZXcgT2JqZWN0IFtdIHsgZXhjZXB0aW9uID09IG51bGwgPyAoT2JqZWN0KXJlc291cmNlIDogZXhjZXB0aW9uIH0pOworCQkJYmFzaWNEaWFnbm9zdGljLm1lcmdlKEVjb3JlVXRpbC5jb21wdXRlRGlhZ25vc3RpYyhyZXNvdXJjZSwgdHJ1ZSkpOworCQkJcmV0dXJuIGJhc2ljRGlhZ25vc3RpYzsKKwkJfQorCQllbHNlIGlmIChleGNlcHRpb24gIT0gbnVsbCkgeworCQkJcmV0dXJuCisJCQkJbmV3IEJhc2ljRGlhZ25vc3RpYworCQkJCQkoRGlhZ25vc3RpYy5FUlJPUiwKKwkJCQkJICJvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLmVkaXRvciIsCisJCQkJCSAwLAorCQkJCQkgZ2V0U3RyaW5nKCJfVUlfQ3JlYXRlTW9kZWxFcnJvcl9tZXNzYWdlIiwgcmVzb3VyY2UuZ2V0VVJJKCkpLAorCQkJCQkgbmV3IE9iamVjdFtdIHsgZXhjZXB0aW9uIH0pOworCQl9CisJCWVsc2UgeworCQkJcmV0dXJuIERpYWdub3N0aWMuT0tfSU5TVEFOQ0U7CisJCX0KKwl9CisKKwkvKioKKwkgKiBUaGlzIGlzIHRoZSBtZXRob2QgdXNlZCBieSB0aGUgZnJhbWV3b3JrIHRvIGluc3RhbGwgeW91ciBvd24gY29udHJvbHMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgY3JlYXRlUGFnZXMoKSB7CisJCS8vIENyZWF0ZXMgdGhlIG1vZGVsIGZyb20gdGhlIGVkaXRvciBpbnB1dAorCQkvLworCQljcmVhdGVNb2RlbCgpOworCisJCS8vIE9ubHkgY3JlYXRlcyB0aGUgb3RoZXIgcGFnZXMgaWYgdGhlcmUgaXMgc29tZXRoaW5nIHRoYXQgY2FuIGJlIGVkaXRlZAorCQkvLworCQlpZiAoIWdldEVkaXRpbmdEb21haW4oKS5nZXRSZXNvdXJjZVNldCgpLmdldFJlc291cmNlcygpLmlzRW1wdHkoKSkgeworCQkJLy8gQ3JlYXRlIGEgcGFnZSBmb3IgdGhlIHNlbGVjdGlvbiB0cmVlIHZpZXcuCisJCQkvLworCQkJeworCQkJCVZpZXdlclBhbmUgdmlld2VyUGFuZSA9CisJCQkJCW5ldyBWaWV3ZXJQYW5lKGdldFNpdGUoKS5nZXRQYWdlKCksIFZlY3RvckVkaXRvci50aGlzKSB7CisJCQkJCQlAT3ZlcnJpZGUKKwkJCQkJCXB1YmxpYyBWaWV3ZXIgY3JlYXRlVmlld2VyKENvbXBvc2l0ZSBjb21wb3NpdGUpIHsKKwkJCQkJCQlUcmVlIHRyZWUgPSBuZXcgVHJlZShjb21wb3NpdGUsIFNXVC5NVUxUSSk7CisJCQkJCQkJVHJlZVZpZXdlciBuZXdUcmVlVmlld2VyID0gbmV3IFRyZWVWaWV3ZXIodHJlZSk7CisJCQkJCQkJcmV0dXJuIG5ld1RyZWVWaWV3ZXI7CisJCQkJCQl9CisJCQkJCQlAT3ZlcnJpZGUKKwkJCQkJCXB1YmxpYyB2b2lkIHJlcXVlc3RBY3RpdmF0aW9uKCkgeworCQkJCQkJCXN1cGVyLnJlcXVlc3RBY3RpdmF0aW9uKCk7CisJCQkJCQkJc2V0Q3VycmVudFZpZXdlclBhbmUodGhpcyk7CisJCQkJCQl9CisJCQkJCX07CisJCQkJdmlld2VyUGFuZS5jcmVhdGVDb250cm9sKGdldENvbnRhaW5lcigpKTsKKworCQkJCXNlbGVjdGlvblZpZXdlciA9IChUcmVlVmlld2VyKXZpZXdlclBhbmUuZ2V0Vmlld2VyKCk7CisJCQkJc2VsZWN0aW9uVmlld2VyLnNldENvbnRlbnRQcm92aWRlcihuZXcgQWRhcHRlckZhY3RvcnlDb250ZW50UHJvdmlkZXIoYWRhcHRlckZhY3RvcnkpKTsKKworCQkJCXNlbGVjdGlvblZpZXdlci5zZXRMYWJlbFByb3ZpZGVyKG5ldyBBZGFwdGVyRmFjdG9yeUxhYmVsUHJvdmlkZXIoYWRhcHRlckZhY3RvcnkpKTsKKwkJCQlzZWxlY3Rpb25WaWV3ZXIuc2V0SW5wdXQoZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpKTsKKwkJCQlzZWxlY3Rpb25WaWV3ZXIuc2V0U2VsZWN0aW9uKG5ldyBTdHJ1Y3R1cmVkU2VsZWN0aW9uKGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKS5nZXRSZXNvdXJjZXMoKS5nZXQoMCkpLCB0cnVlKTsKKwkJCQl2aWV3ZXJQYW5lLnNldFRpdGxlKGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKSk7CisKKwkJCQluZXcgQWRhcHRlckZhY3RvcnlUcmVlRWRpdG9yKHNlbGVjdGlvblZpZXdlci5nZXRUcmVlKCksIGFkYXB0ZXJGYWN0b3J5KTsKKworCQkJCWNyZWF0ZUNvbnRleHRNZW51Rm9yKHNlbGVjdGlvblZpZXdlcik7CisJCQkJaW50IHBhZ2VJbmRleCA9IGFkZFBhZ2Uodmlld2VyUGFuZS5nZXRDb250cm9sKCkpOworCQkJCXNldFBhZ2VUZXh0KHBhZ2VJbmRleCwgZ2V0U3RyaW5nKCJfVUlfU2VsZWN0aW9uUGFnZV9sYWJlbCIpKTsKKwkJCX0KKworCQkJLy8gQ3JlYXRlIGEgcGFnZSBmb3IgdGhlIHBhcmVudCB0cmVlIHZpZXcuCisJCQkvLworCQkJeworCQkJCVZpZXdlclBhbmUgdmlld2VyUGFuZSA9CisJCQkJCW5ldyBWaWV3ZXJQYW5lKGdldFNpdGUoKS5nZXRQYWdlKCksIFZlY3RvckVkaXRvci50aGlzKSB7CisJCQkJCQlAT3ZlcnJpZGUKKwkJCQkJCXB1YmxpYyBWaWV3ZXIgY3JlYXRlVmlld2VyKENvbXBvc2l0ZSBjb21wb3NpdGUpIHsKKwkJCQkJCQlUcmVlIHRyZWUgPSBuZXcgVHJlZShjb21wb3NpdGUsIFNXVC5NVUxUSSk7CisJCQkJCQkJVHJlZVZpZXdlciBuZXdUcmVlVmlld2VyID0gbmV3IFRyZWVWaWV3ZXIodHJlZSk7CisJCQkJCQkJcmV0dXJuIG5ld1RyZWVWaWV3ZXI7CisJCQkJCQl9CisJCQkJCQlAT3ZlcnJpZGUKKwkJCQkJCXB1YmxpYyB2b2lkIHJlcXVlc3RBY3RpdmF0aW9uKCkgeworCQkJCQkJCXN1cGVyLnJlcXVlc3RBY3RpdmF0aW9uKCk7CisJCQkJCQkJc2V0Q3VycmVudFZpZXdlclBhbmUodGhpcyk7CisJCQkJCQl9CisJCQkJCX07CisJCQkJdmlld2VyUGFuZS5jcmVhdGVDb250cm9sKGdldENvbnRhaW5lcigpKTsKKworCQkJCXBhcmVudFZpZXdlciA9IChUcmVlVmlld2VyKXZpZXdlclBhbmUuZ2V0Vmlld2VyKCk7CisJCQkJcGFyZW50Vmlld2VyLnNldEF1dG9FeHBhbmRMZXZlbCgzMCk7CisJCQkJcGFyZW50Vmlld2VyLnNldENvbnRlbnRQcm92aWRlcihuZXcgUmV2ZXJzZUFkYXB0ZXJGYWN0b3J5Q29udGVudFByb3ZpZGVyKGFkYXB0ZXJGYWN0b3J5KSk7CisJCQkJcGFyZW50Vmlld2VyLnNldExhYmVsUHJvdmlkZXIobmV3IEFkYXB0ZXJGYWN0b3J5TGFiZWxQcm92aWRlcihhZGFwdGVyRmFjdG9yeSkpOworCisJCQkJY3JlYXRlQ29udGV4dE1lbnVGb3IocGFyZW50Vmlld2VyKTsKKwkJCQlpbnQgcGFnZUluZGV4ID0gYWRkUGFnZSh2aWV3ZXJQYW5lLmdldENvbnRyb2woKSk7CisJCQkJc2V0UGFnZVRleHQocGFnZUluZGV4LCBnZXRTdHJpbmcoIl9VSV9QYXJlbnRQYWdlX2xhYmVsIikpOworCQkJfQorCisJCQkvLyBUaGlzIGlzIHRoZSBwYWdlIGZvciB0aGUgbGlzdCB2aWV3ZXIKKwkJCS8vCisJCQl7CisJCQkJVmlld2VyUGFuZSB2aWV3ZXJQYW5lID0KKwkJCQkJbmV3IFZpZXdlclBhbmUoZ2V0U2l0ZSgpLmdldFBhZ2UoKSwgVmVjdG9yRWRpdG9yLnRoaXMpIHsKKwkJCQkJCUBPdmVycmlkZQorCQkJCQkJcHVibGljIFZpZXdlciBjcmVhdGVWaWV3ZXIoQ29tcG9zaXRlIGNvbXBvc2l0ZSkgeworCQkJCQkJCXJldHVybiBuZXcgTGlzdFZpZXdlcihjb21wb3NpdGUpOworCQkJCQkJfQorCQkJCQkJQE92ZXJyaWRlCisJCQkJCQlwdWJsaWMgdm9pZCByZXF1ZXN0QWN0aXZhdGlvbigpIHsKKwkJCQkJCQlzdXBlci5yZXF1ZXN0QWN0aXZhdGlvbigpOworCQkJCQkJCXNldEN1cnJlbnRWaWV3ZXJQYW5lKHRoaXMpOworCQkJCQkJfQorCQkJCQl9OworCQkJCXZpZXdlclBhbmUuY3JlYXRlQ29udHJvbChnZXRDb250YWluZXIoKSk7CisJCQkJbGlzdFZpZXdlciA9IChMaXN0Vmlld2VyKXZpZXdlclBhbmUuZ2V0Vmlld2VyKCk7CisJCQkJbGlzdFZpZXdlci5zZXRDb250ZW50UHJvdmlkZXIobmV3IEFkYXB0ZXJGYWN0b3J5Q29udGVudFByb3ZpZGVyKGFkYXB0ZXJGYWN0b3J5KSk7CisJCQkJbGlzdFZpZXdlci5zZXRMYWJlbFByb3ZpZGVyKG5ldyBBZGFwdGVyRmFjdG9yeUxhYmVsUHJvdmlkZXIoYWRhcHRlckZhY3RvcnkpKTsKKworCQkJCWNyZWF0ZUNvbnRleHRNZW51Rm9yKGxpc3RWaWV3ZXIpOworCQkJCWludCBwYWdlSW5kZXggPSBhZGRQYWdlKHZpZXdlclBhbmUuZ2V0Q29udHJvbCgpKTsKKwkJCQlzZXRQYWdlVGV4dChwYWdlSW5kZXgsIGdldFN0cmluZygiX1VJX0xpc3RQYWdlX2xhYmVsIikpOworCQkJfQorCisJCQkvLyBUaGlzIGlzIHRoZSBwYWdlIGZvciB0aGUgdHJlZSB2aWV3ZXIKKwkJCS8vCisJCQl7CisJCQkJVmlld2VyUGFuZSB2aWV3ZXJQYW5lID0KKwkJCQkJbmV3IFZpZXdlclBhbmUoZ2V0U2l0ZSgpLmdldFBhZ2UoKSwgVmVjdG9yRWRpdG9yLnRoaXMpIHsKKwkJCQkJCUBPdmVycmlkZQorCQkJCQkJcHVibGljIFZpZXdlciBjcmVhdGVWaWV3ZXIoQ29tcG9zaXRlIGNvbXBvc2l0ZSkgeworCQkJCQkJCXJldHVybiBuZXcgVHJlZVZpZXdlcihjb21wb3NpdGUpOworCQkJCQkJfQorCQkJCQkJQE92ZXJyaWRlCisJCQkJCQlwdWJsaWMgdm9pZCByZXF1ZXN0QWN0aXZhdGlvbigpIHsKKwkJCQkJCQlzdXBlci5yZXF1ZXN0QWN0aXZhdGlvbigpOworCQkJCQkJCXNldEN1cnJlbnRWaWV3ZXJQYW5lKHRoaXMpOworCQkJCQkJfQorCQkJCQl9OworCQkJCXZpZXdlclBhbmUuY3JlYXRlQ29udHJvbChnZXRDb250YWluZXIoKSk7CisJCQkJdHJlZVZpZXdlciA9IChUcmVlVmlld2VyKXZpZXdlclBhbmUuZ2V0Vmlld2VyKCk7CisJCQkJdHJlZVZpZXdlci5zZXRDb250ZW50UHJvdmlkZXIobmV3IEFkYXB0ZXJGYWN0b3J5Q29udGVudFByb3ZpZGVyKGFkYXB0ZXJGYWN0b3J5KSk7CisJCQkJdHJlZVZpZXdlci5zZXRMYWJlbFByb3ZpZGVyKG5ldyBBZGFwdGVyRmFjdG9yeUxhYmVsUHJvdmlkZXIoYWRhcHRlckZhY3RvcnkpKTsKKworCQkJCW5ldyBBZGFwdGVyRmFjdG9yeVRyZWVFZGl0b3IodHJlZVZpZXdlci5nZXRUcmVlKCksIGFkYXB0ZXJGYWN0b3J5KTsKKworCQkJCWNyZWF0ZUNvbnRleHRNZW51Rm9yKHRyZWVWaWV3ZXIpOworCQkJCWludCBwYWdlSW5kZXggPSBhZGRQYWdlKHZpZXdlclBhbmUuZ2V0Q29udHJvbCgpKTsKKwkJCQlzZXRQYWdlVGV4dChwYWdlSW5kZXgsIGdldFN0cmluZygiX1VJX1RyZWVQYWdlX2xhYmVsIikpOworCQkJfQorCisJCQkvLyBUaGlzIGlzIHRoZSBwYWdlIGZvciB0aGUgdGFibGUgdmlld2VyLgorCQkJLy8KKwkJCXsKKwkJCQlWaWV3ZXJQYW5lIHZpZXdlclBhbmUgPQorCQkJCQluZXcgVmlld2VyUGFuZShnZXRTaXRlKCkuZ2V0UGFnZSgpLCBWZWN0b3JFZGl0b3IudGhpcykgeworCQkJCQkJQE92ZXJyaWRlCisJCQkJCQlwdWJsaWMgVmlld2VyIGNyZWF0ZVZpZXdlcihDb21wb3NpdGUgY29tcG9zaXRlKSB7CisJCQkJCQkJcmV0dXJuIG5ldyBUYWJsZVZpZXdlcihjb21wb3NpdGUpOworCQkJCQkJfQorCQkJCQkJQE92ZXJyaWRlCisJCQkJCQlwdWJsaWMgdm9pZCByZXF1ZXN0QWN0aXZhdGlvbigpIHsKKwkJCQkJCQlzdXBlci5yZXF1ZXN0QWN0aXZhdGlvbigpOworCQkJCQkJCXNldEN1cnJlbnRWaWV3ZXJQYW5lKHRoaXMpOworCQkJCQkJfQorCQkJCQl9OworCQkJCXZpZXdlclBhbmUuY3JlYXRlQ29udHJvbChnZXRDb250YWluZXIoKSk7CisJCQkJdGFibGVWaWV3ZXIgPSAoVGFibGVWaWV3ZXIpdmlld2VyUGFuZS5nZXRWaWV3ZXIoKTsKKworCQkJCVRhYmxlIHRhYmxlID0gdGFibGVWaWV3ZXIuZ2V0VGFibGUoKTsKKwkJCQlUYWJsZUxheW91dCBsYXlvdXQgPSBuZXcgVGFibGVMYXlvdXQoKTsKKwkJCQl0YWJsZS5zZXRMYXlvdXQobGF5b3V0KTsKKwkJCQl0YWJsZS5zZXRIZWFkZXJWaXNpYmxlKHRydWUpOworCQkJCXRhYmxlLnNldExpbmVzVmlzaWJsZSh0cnVlKTsKKworCQkJCVRhYmxlQ29sdW1uIG9iamVjdENvbHVtbiA9IG5ldyBUYWJsZUNvbHVtbih0YWJsZSwgU1dULk5PTkUpOworCQkJCWxheW91dC5hZGRDb2x1bW5EYXRhKG5ldyBDb2x1bW5XZWlnaHREYXRhKDMsIDEwMCwgdHJ1ZSkpOworCQkJCW9iamVjdENvbHVtbi5zZXRUZXh0KGdldFN0cmluZygiX1VJX09iamVjdENvbHVtbl9sYWJlbCIpKTsKKwkJCQlvYmplY3RDb2x1bW4uc2V0UmVzaXphYmxlKHRydWUpOworCisJCQkJVGFibGVDb2x1bW4gc2VsZkNvbHVtbiA9IG5ldyBUYWJsZUNvbHVtbih0YWJsZSwgU1dULk5PTkUpOworCQkJCWxheW91dC5hZGRDb2x1bW5EYXRhKG5ldyBDb2x1bW5XZWlnaHREYXRhKDIsIDEwMCwgdHJ1ZSkpOworCQkJCXNlbGZDb2x1bW4uc2V0VGV4dChnZXRTdHJpbmcoIl9VSV9TZWxmQ29sdW1uX2xhYmVsIikpOworCQkJCXNlbGZDb2x1bW4uc2V0UmVzaXphYmxlKHRydWUpOworCisJCQkJdGFibGVWaWV3ZXIuc2V0Q29sdW1uUHJvcGVydGllcyhuZXcgU3RyaW5nIFtdIHsiYSIsICJiIn0pOworCQkJCXRhYmxlVmlld2VyLnNldENvbnRlbnRQcm92aWRlcihuZXcgQWRhcHRlckZhY3RvcnlDb250ZW50UHJvdmlkZXIoYWRhcHRlckZhY3RvcnkpKTsKKwkJCQl0YWJsZVZpZXdlci5zZXRMYWJlbFByb3ZpZGVyKG5ldyBBZGFwdGVyRmFjdG9yeUxhYmVsUHJvdmlkZXIoYWRhcHRlckZhY3RvcnkpKTsKKworCQkJCWNyZWF0ZUNvbnRleHRNZW51Rm9yKHRhYmxlVmlld2VyKTsKKwkJCQlpbnQgcGFnZUluZGV4ID0gYWRkUGFnZSh2aWV3ZXJQYW5lLmdldENvbnRyb2woKSk7CisJCQkJc2V0UGFnZVRleHQocGFnZUluZGV4LCBnZXRTdHJpbmcoIl9VSV9UYWJsZVBhZ2VfbGFiZWwiKSk7CisJCQl9CisKKwkJCS8vIFRoaXMgaXMgdGhlIHBhZ2UgZm9yIHRoZSB0YWJsZSB0cmVlIHZpZXdlci4KKwkJCS8vCisJCQl7CisJCQkJVmlld2VyUGFuZSB2aWV3ZXJQYW5lID0KKwkJCQkJbmV3IFZpZXdlclBhbmUoZ2V0U2l0ZSgpLmdldFBhZ2UoKSwgVmVjdG9yRWRpdG9yLnRoaXMpIHsKKwkJCQkJCUBPdmVycmlkZQorCQkJCQkJcHVibGljIFZpZXdlciBjcmVhdGVWaWV3ZXIoQ29tcG9zaXRlIGNvbXBvc2l0ZSkgeworCQkJCQkJCXJldHVybiBuZXcgVHJlZVZpZXdlcihjb21wb3NpdGUpOworCQkJCQkJfQorCQkJCQkJQE92ZXJyaWRlCisJCQkJCQlwdWJsaWMgdm9pZCByZXF1ZXN0QWN0aXZhdGlvbigpIHsKKwkJCQkJCQlzdXBlci5yZXF1ZXN0QWN0aXZhdGlvbigpOworCQkJCQkJCXNldEN1cnJlbnRWaWV3ZXJQYW5lKHRoaXMpOworCQkJCQkJfQorCQkJCQl9OworCQkJCXZpZXdlclBhbmUuY3JlYXRlQ29udHJvbChnZXRDb250YWluZXIoKSk7CisKKwkJCQl0cmVlVmlld2VyV2l0aENvbHVtbnMgPSAoVHJlZVZpZXdlcil2aWV3ZXJQYW5lLmdldFZpZXdlcigpOworCisJCQkJVHJlZSB0cmVlID0gdHJlZVZpZXdlcldpdGhDb2x1bW5zLmdldFRyZWUoKTsKKwkJCQl0cmVlLnNldExheW91dERhdGEobmV3IEZpbGxMYXlvdXQoKSk7CisJCQkJdHJlZS5zZXRIZWFkZXJWaXNpYmxlKHRydWUpOworCQkJCXRyZWUuc2V0TGluZXNWaXNpYmxlKHRydWUpOworCisJCQkJVHJlZUNvbHVtbiBvYmplY3RDb2x1bW4gPSBuZXcgVHJlZUNvbHVtbih0cmVlLCBTV1QuTk9ORSk7CisJCQkJb2JqZWN0Q29sdW1uLnNldFRleHQoZ2V0U3RyaW5nKCJfVUlfT2JqZWN0Q29sdW1uX2xhYmVsIikpOworCQkJCW9iamVjdENvbHVtbi5zZXRSZXNpemFibGUodHJ1ZSk7CisJCQkJb2JqZWN0Q29sdW1uLnNldFdpZHRoKDI1MCk7CisKKwkJCQlUcmVlQ29sdW1uIHNlbGZDb2x1bW4gPSBuZXcgVHJlZUNvbHVtbih0cmVlLCBTV1QuTk9ORSk7CisJCQkJc2VsZkNvbHVtbi5zZXRUZXh0KGdldFN0cmluZygiX1VJX1NlbGZDb2x1bW5fbGFiZWwiKSk7CisJCQkJc2VsZkNvbHVtbi5zZXRSZXNpemFibGUodHJ1ZSk7CisJCQkJc2VsZkNvbHVtbi5zZXRXaWR0aCgyMDApOworCisJCQkJdHJlZVZpZXdlcldpdGhDb2x1bW5zLnNldENvbHVtblByb3BlcnRpZXMobmV3IFN0cmluZyBbXSB7ImEiLCAiYiJ9KTsKKwkJCQl0cmVlVmlld2VyV2l0aENvbHVtbnMuc2V0Q29udGVudFByb3ZpZGVyKG5ldyBBZGFwdGVyRmFjdG9yeUNvbnRlbnRQcm92aWRlcihhZGFwdGVyRmFjdG9yeSkpOworCQkJCXRyZWVWaWV3ZXJXaXRoQ29sdW1ucy5zZXRMYWJlbFByb3ZpZGVyKG5ldyBBZGFwdGVyRmFjdG9yeUxhYmVsUHJvdmlkZXIoYWRhcHRlckZhY3RvcnkpKTsKKworCQkJCWNyZWF0ZUNvbnRleHRNZW51Rm9yKHRyZWVWaWV3ZXJXaXRoQ29sdW1ucyk7CisJCQkJaW50IHBhZ2VJbmRleCA9IGFkZFBhZ2Uodmlld2VyUGFuZS5nZXRDb250cm9sKCkpOworCQkJCXNldFBhZ2VUZXh0KHBhZ2VJbmRleCwgZ2V0U3RyaW5nKCJfVUlfVHJlZVdpdGhDb2x1bW5zUGFnZV9sYWJlbCIpKTsKKwkJCX0KKworCQkJZ2V0U2l0ZSgpLmdldFNoZWxsKCkuZ2V0RGlzcGxheSgpLmFzeW5jRXhlYworCQkJCShuZXcgUnVubmFibGUoKSB7CisJCQkJCSBwdWJsaWMgdm9pZCBydW4oKSB7CisJCQkJCQkgc2V0QWN0aXZlUGFnZSgwKTsKKwkJCQkJIH0KKwkJCQkgfSk7CisJCX0KKworCQkvLyBFbnN1cmVzIHRoYXQgdGhpcyBlZGl0b3Igd2lsbCBvbmx5IGRpc3BsYXkgdGhlIHBhZ2UncyB0YWIKKwkJLy8gYXJlYSBpZiB0aGVyZSBhcmUgbW9yZSB0aGFuIG9uZSBwYWdlCisJCS8vCisJCWdldENvbnRhaW5lcigpLmFkZENvbnRyb2xMaXN0ZW5lcgorCQkJKG5ldyBDb250cm9sQWRhcHRlcigpIHsKKwkJCQlib29sZWFuIGd1YXJkID0gZmFsc2U7CisJCQkJQE92ZXJyaWRlCisJCQkJcHVibGljIHZvaWQgY29udHJvbFJlc2l6ZWQoQ29udHJvbEV2ZW50IGV2ZW50KSB7CisJCQkJCWlmICghZ3VhcmQpIHsKKwkJCQkJCWd1YXJkID0gdHJ1ZTsKKwkJCQkJCWhpZGVUYWJzKCk7CisJCQkJCQlndWFyZCA9IGZhbHNlOworCQkJCQl9CisJCQkJfQorCQkJIH0pOworCisJCWdldFNpdGUoKS5nZXRTaGVsbCgpLmdldERpc3BsYXkoKS5hc3luY0V4ZWMKKwkJCShuZXcgUnVubmFibGUoKSB7CisJCQkJIHB1YmxpYyB2b2lkIHJ1bigpIHsKKwkJCQkJIHVwZGF0ZVByb2JsZW1JbmRpY2F0aW9uKCk7CisJCQkJIH0KKwkJCSB9KTsKKwl9CisKKwkvKioKKwkgKiBJZiB0aGVyZSBpcyBqdXN0IG9uZSBwYWdlIGluIHRoZSBtdWx0aS1wYWdlIGVkaXRvciBwYXJ0LAorCSAqIHRoaXMgaGlkZXMgdGhlIHNpbmdsZSB0YWIgYXQgdGhlIGJvdHRvbS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBoaWRlVGFicygpIHsKKwkJaWYgKGdldFBhZ2VDb3VudCgpIDw9IDEpIHsKKwkJCXNldFBhZ2VUZXh0KDAsICIiKTsKKwkJCWlmIChnZXRDb250YWluZXIoKSBpbnN0YW5jZW9mIENUYWJGb2xkZXIpIHsKKwkJCQkoKENUYWJGb2xkZXIpZ2V0Q29udGFpbmVyKCkpLnNldFRhYkhlaWdodCgxKTsKKwkJCQlQb2ludCBwb2ludCA9IGdldENvbnRhaW5lcigpLmdldFNpemUoKTsKKwkJCQlnZXRDb250YWluZXIoKS5zZXRTaXplKHBvaW50LngsIHBvaW50LnkgKyA2KTsKKwkJCX0KKwkJfQorCX0KKworCS8qKgorCSAqIElmIHRoZXJlIGlzIG1vcmUgdGhhbiBvbmUgcGFnZSBpbiB0aGUgbXVsdGktcGFnZSBlZGl0b3IgcGFydCwKKwkgKiB0aGlzIHNob3dzIHRoZSB0YWJzIGF0IHRoZSBib3R0b20uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgc2hvd1RhYnMoKSB7CisJCWlmIChnZXRQYWdlQ291bnQoKSA+IDEpIHsKKwkJCXNldFBhZ2VUZXh0KDAsIGdldFN0cmluZygiX1VJX1NlbGVjdGlvblBhZ2VfbGFiZWwiKSk7CisJCQlpZiAoZ2V0Q29udGFpbmVyKCkgaW5zdGFuY2VvZiBDVGFiRm9sZGVyKSB7CisJCQkJKChDVGFiRm9sZGVyKWdldENvbnRhaW5lcigpKS5zZXRUYWJIZWlnaHQoU1dULkRFRkFVTFQpOworCQkJCVBvaW50IHBvaW50ID0gZ2V0Q29udGFpbmVyKCkuZ2V0U2l6ZSgpOworCQkJCWdldENvbnRhaW5lcigpLnNldFNpemUocG9pbnQueCwgcG9pbnQueSAtIDYpOworCQkJfQorCQl9CisJfQorCisJLyoqCisJICogVGhpcyBpcyB1c2VkIHRvIHRyYWNrIHRoZSBhY3RpdmUgdmlld2VyLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIHBhZ2VDaGFuZ2UoaW50IHBhZ2VJbmRleCkgeworCQlzdXBlci5wYWdlQ2hhbmdlKHBhZ2VJbmRleCk7CisKKwkJaWYgKGNvbnRlbnRPdXRsaW5lUGFnZSAhPSBudWxsKSB7CisJCQloYW5kbGVDb250ZW50T3V0bGluZVNlbGVjdGlvbihjb250ZW50T3V0bGluZVBhZ2UuZ2V0U2VsZWN0aW9uKCkpOworCQl9CisJfQorCisJLyoqCisJICogVGhpcyBpcyBob3cgdGhlIGZyYW1ld29yayBkZXRlcm1pbmVzIHdoaWNoIGludGVyZmFjZXMgd2UgaW1wbGVtZW50LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBTdXBwcmVzc1dhcm5pbmdzKCJ1bmNoZWNrZWQiKQorCUBPdmVycmlkZQorCXB1YmxpYyBPYmplY3QgZ2V0QWRhcHRlcihDbGFzcyBrZXkpIHsKKwkJaWYgKGtleS5lcXVhbHMoSUNvbnRlbnRPdXRsaW5lUGFnZS5jbGFzcykpIHsKKwkJCXJldHVybiBzaG93T3V0bGluZVZpZXcoKSA/IGdldENvbnRlbnRPdXRsaW5lUGFnZSgpIDogbnVsbDsKKwkJfQorCQllbHNlIGlmIChrZXkuZXF1YWxzKElQcm9wZXJ0eVNoZWV0UGFnZS5jbGFzcykpIHsKKwkJCXJldHVybiBnZXRQcm9wZXJ0eVNoZWV0UGFnZSgpOworCQl9CisJCWVsc2UgaWYgKGtleS5lcXVhbHMoSUdvdG9NYXJrZXIuY2xhc3MpKSB7CisJCQlyZXR1cm4gdGhpczsKKwkJfQorCQllbHNlIHsKKwkJCXJldHVybiBzdXBlci5nZXRBZGFwdGVyKGtleSk7CisJCX0KKwl9CisKKwkvKioKKwkgKiBUaGlzIGFjY2Vzc2VzIGEgY2FjaGVkIHZlcnNpb24gb2YgdGhlIGNvbnRlbnQgb3V0bGluZXIuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIElDb250ZW50T3V0bGluZVBhZ2UgZ2V0Q29udGVudE91dGxpbmVQYWdlKCkgeworCQlpZiAoY29udGVudE91dGxpbmVQYWdlID09IG51bGwpIHsKKwkJCS8vIFRoZSBjb250ZW50IG91dGxpbmUgaXMganVzdCBhIHRyZWUuCisJCQkvLworCQkJY2xhc3MgTXlDb250ZW50T3V0bGluZVBhZ2UgZXh0ZW5kcyBDb250ZW50T3V0bGluZVBhZ2UgeworCQkJCUBPdmVycmlkZQorCQkJCXB1YmxpYyB2b2lkIGNyZWF0ZUNvbnRyb2woQ29tcG9zaXRlIHBhcmVudCkgeworCQkJCQlzdXBlci5jcmVhdGVDb250cm9sKHBhcmVudCk7CisJCQkJCWNvbnRlbnRPdXRsaW5lVmlld2VyID0gZ2V0VHJlZVZpZXdlcigpOworCQkJCQljb250ZW50T3V0bGluZVZpZXdlci5hZGRTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIodGhpcyk7CisKKwkJCQkJLy8gU2V0IHVwIHRoZSB0cmVlIHZpZXdlci4KKwkJCQkJLy8KKwkJCQkJY29udGVudE91dGxpbmVWaWV3ZXIuc2V0Q29udGVudFByb3ZpZGVyKG5ldyBBZGFwdGVyRmFjdG9yeUNvbnRlbnRQcm92aWRlcihhZGFwdGVyRmFjdG9yeSkpOworCQkJCQljb250ZW50T3V0bGluZVZpZXdlci5zZXRMYWJlbFByb3ZpZGVyKG5ldyBBZGFwdGVyRmFjdG9yeUxhYmVsUHJvdmlkZXIoYWRhcHRlckZhY3RvcnkpKTsKKwkJCQkJY29udGVudE91dGxpbmVWaWV3ZXIuc2V0SW5wdXQoZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpKTsKKworCQkJCQkvLyBNYWtlIHN1cmUgb3VyIHBvcHVwcyB3b3JrLgorCQkJCQkvLworCQkJCQljcmVhdGVDb250ZXh0TWVudUZvcihjb250ZW50T3V0bGluZVZpZXdlcik7CisKKwkJCQkJaWYgKCFlZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkuZ2V0UmVzb3VyY2VzKCkuaXNFbXB0eSgpKSB7CisJCQkJCSAgLy8gU2VsZWN0IHRoZSByb290IG9iamVjdCBpbiB0aGUgdmlldy4KKwkJCQkJICAvLworCQkJCQkgIGNvbnRlbnRPdXRsaW5lVmlld2VyLnNldFNlbGVjdGlvbihuZXcgU3RydWN0dXJlZFNlbGVjdGlvbihlZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkuZ2V0UmVzb3VyY2VzKCkuZ2V0KDApKSwgdHJ1ZSk7CisJCQkJCX0KKwkJCQl9CisKKwkJCQlAT3ZlcnJpZGUKKwkJCQlwdWJsaWMgdm9pZCBtYWtlQ29udHJpYnV0aW9ucyhJTWVudU1hbmFnZXIgbWVudU1hbmFnZXIsIElUb29sQmFyTWFuYWdlciB0b29sQmFyTWFuYWdlciwgSVN0YXR1c0xpbmVNYW5hZ2VyIHN0YXR1c0xpbmVNYW5hZ2VyKSB7CisJCQkJCXN1cGVyLm1ha2VDb250cmlidXRpb25zKG1lbnVNYW5hZ2VyLCB0b29sQmFyTWFuYWdlciwgc3RhdHVzTGluZU1hbmFnZXIpOworCQkJCQljb250ZW50T3V0bGluZVN0YXR1c0xpbmVNYW5hZ2VyID0gc3RhdHVzTGluZU1hbmFnZXI7CisJCQkJfQorCisJCQkJQE92ZXJyaWRlCisJCQkJcHVibGljIHZvaWQgc2V0QWN0aW9uQmFycyhJQWN0aW9uQmFycyBhY3Rpb25CYXJzKSB7CisJCQkJCXN1cGVyLnNldEFjdGlvbkJhcnMoYWN0aW9uQmFycyk7CisJCQkJCWdldEFjdGlvbkJhckNvbnRyaWJ1dG9yKCkuc2hhcmVHbG9iYWxBY3Rpb25zKHRoaXMsIGFjdGlvbkJhcnMpOworCQkJCX0KKwkJCX0KKworCQkJY29udGVudE91dGxpbmVQYWdlID0gbmV3IE15Q29udGVudE91dGxpbmVQYWdlKCk7CisKKwkJCS8vIExpc3RlbiB0byBzZWxlY3Rpb24gc28gdGhhdCB3ZSBjYW4gaGFuZGxlIGl0IGlzIGEgc3BlY2lhbCB3YXkuCisJCQkvLworCQkJY29udGVudE91dGxpbmVQYWdlLmFkZFNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcgorCQkJCShuZXcgSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcigpIHsKKwkJCQkJIC8vIFRoaXMgZW5zdXJlcyB0aGF0IHdlIGhhbmRsZSBzZWxlY3Rpb25zIGNvcnJlY3RseS4KKwkJCQkJIC8vCisJCQkJCSBwdWJsaWMgdm9pZCBzZWxlY3Rpb25DaGFuZ2VkKFNlbGVjdGlvbkNoYW5nZWRFdmVudCBldmVudCkgeworCQkJCQkJIGhhbmRsZUNvbnRlbnRPdXRsaW5lU2VsZWN0aW9uKGV2ZW50LmdldFNlbGVjdGlvbigpKTsKKwkJCQkJIH0KKwkJCQkgfSk7CisJCX0KKworCQlyZXR1cm4gY29udGVudE91dGxpbmVQYWdlOworCX0KKworCS8qKgorCSAqIFRoaXMgYWNjZXNzZXMgYSBjYWNoZWQgdmVyc2lvbiBvZiB0aGUgcHJvcGVydHkgc2hlZXQuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIElQcm9wZXJ0eVNoZWV0UGFnZSBnZXRQcm9wZXJ0eVNoZWV0UGFnZSgpIHsKKwkJaWYgKHByb3BlcnR5U2hlZXRQYWdlID09IG51bGwpIHsKKwkJCXByb3BlcnR5U2hlZXRQYWdlID0KKwkJCQluZXcgRXh0ZW5kZWRQcm9wZXJ0eVNoZWV0UGFnZShlZGl0aW5nRG9tYWluKSB7CisJCQkJCUBPdmVycmlkZQorCQkJCQlwdWJsaWMgdm9pZCBzZXRTZWxlY3Rpb25Ub1ZpZXdlcihMaXN0PD8+IHNlbGVjdGlvbikgeworCQkJCQkJVmVjdG9yRWRpdG9yLnRoaXMuc2V0U2VsZWN0aW9uVG9WaWV3ZXIoc2VsZWN0aW9uKTsKKwkJCQkJCVZlY3RvckVkaXRvci50aGlzLnNldEZvY3VzKCk7CisJCQkJCX0KKworCQkJCQlAT3ZlcnJpZGUKKwkJCQkJcHVibGljIHZvaWQgc2V0QWN0aW9uQmFycyhJQWN0aW9uQmFycyBhY3Rpb25CYXJzKSB7CisJCQkJCQlzdXBlci5zZXRBY3Rpb25CYXJzKGFjdGlvbkJhcnMpOworCQkJCQkJZ2V0QWN0aW9uQmFyQ29udHJpYnV0b3IoKS5zaGFyZUdsb2JhbEFjdGlvbnModGhpcywgYWN0aW9uQmFycyk7CisJCQkJCX0KKwkJCQl9OworCQkJcHJvcGVydHlTaGVldFBhZ2Uuc2V0UHJvcGVydHlTb3VyY2VQcm92aWRlcihuZXcgQWRhcHRlckZhY3RvcnlDb250ZW50UHJvdmlkZXIoYWRhcHRlckZhY3RvcnkpKTsKKwkJfQorCisJCXJldHVybiBwcm9wZXJ0eVNoZWV0UGFnZTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGRlYWxzIHdpdGggaG93IHdlIHdhbnQgc2VsZWN0aW9uIGluIHRoZSBvdXRsaW5lciB0byBhZmZlY3QgdGhlIG90aGVyIHZpZXdzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIGhhbmRsZUNvbnRlbnRPdXRsaW5lU2VsZWN0aW9uKElTZWxlY3Rpb24gc2VsZWN0aW9uKSB7CisJCWlmIChjdXJyZW50Vmlld2VyUGFuZSAhPSBudWxsICYmICFzZWxlY3Rpb24uaXNFbXB0eSgpICYmIHNlbGVjdGlvbiBpbnN0YW5jZW9mIElTdHJ1Y3R1cmVkU2VsZWN0aW9uKSB7CisJCQlJdGVyYXRvcjw/PiBzZWxlY3RlZEVsZW1lbnRzID0gKChJU3RydWN0dXJlZFNlbGVjdGlvbilzZWxlY3Rpb24pLml0ZXJhdG9yKCk7CisJCQlpZiAoc2VsZWN0ZWRFbGVtZW50cy5oYXNOZXh0KCkpIHsKKwkJCQkvLyBHZXQgdGhlIGZpcnN0IHNlbGVjdGVkIGVsZW1lbnQuCisJCQkJLy8KKwkJCQlPYmplY3Qgc2VsZWN0ZWRFbGVtZW50ID0gc2VsZWN0ZWRFbGVtZW50cy5uZXh0KCk7CisKKwkJCQkvLyBJZiBpdCdzIHRoZSBzZWxlY3Rpb24gdmlld2VyLCB0aGVuIHdlIHdhbnQgaXQgdG8gc2VsZWN0IHRoZSBzYW1lIHNlbGVjdGlvbiBhcyB0aGlzIHNlbGVjdGlvbi4KKwkJCQkvLworCQkJCWlmIChjdXJyZW50Vmlld2VyUGFuZS5nZXRWaWV3ZXIoKSA9PSBzZWxlY3Rpb25WaWV3ZXIpIHsKKwkJCQkJQXJyYXlMaXN0PE9iamVjdD4gc2VsZWN0aW9uTGlzdCA9IG5ldyBBcnJheUxpc3Q8T2JqZWN0PigpOworCQkJCQlzZWxlY3Rpb25MaXN0LmFkZChzZWxlY3RlZEVsZW1lbnQpOworCQkJCQl3aGlsZSAoc2VsZWN0ZWRFbGVtZW50cy5oYXNOZXh0KCkpIHsKKwkJCQkJCXNlbGVjdGlvbkxpc3QuYWRkKHNlbGVjdGVkRWxlbWVudHMubmV4dCgpKTsKKwkJCQkJfQorCisJCQkJCS8vIFNldCB0aGUgc2VsZWN0aW9uIHRvIHRoZSB3aWRnZXQuCisJCQkJCS8vCisJCQkJCXNlbGVjdGlvblZpZXdlci5zZXRTZWxlY3Rpb24obmV3IFN0cnVjdHVyZWRTZWxlY3Rpb24oc2VsZWN0aW9uTGlzdCkpOworCQkJCX0KKwkJCQllbHNlIHsKKwkJCQkJLy8gU2V0IHRoZSBpbnB1dCB0byB0aGUgd2lkZ2V0LgorCQkJCQkvLworCQkJCQlpZiAoY3VycmVudFZpZXdlclBhbmUuZ2V0Vmlld2VyKCkuZ2V0SW5wdXQoKSAhPSBzZWxlY3RlZEVsZW1lbnQpIHsKKwkJCQkJCWN1cnJlbnRWaWV3ZXJQYW5lLmdldFZpZXdlcigpLnNldElucHV0KHNlbGVjdGVkRWxlbWVudCk7CisJCQkJCQljdXJyZW50Vmlld2VyUGFuZS5zZXRUaXRsZShzZWxlY3RlZEVsZW1lbnQpOworCQkJCQl9CisJCQkJfQorCQkJfQorCQl9CisJfQorCisJLyoqCisJICogVGhpcyBpcyBmb3IgaW1wbGVtZW50aW5nIHtAbGluayBJRWRpdG9yUGFydH0gYW5kIHNpbXBseSB0ZXN0cyB0aGUgY29tbWFuZCBzdGFjay4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgYm9vbGVhbiBpc0RpcnR5KCkgeworCQlyZXR1cm4gKChCYXNpY0NvbW1hbmRTdGFjayllZGl0aW5nRG9tYWluLmdldENvbW1hbmRTdGFjaygpKS5pc1NhdmVOZWVkZWQoKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGlzIGZvciBpbXBsZW1lbnRpbmcge0BsaW5rIElFZGl0b3JQYXJ0fSBhbmQgc2ltcGx5IHNhdmVzIHRoZSBtb2RlbCBmaWxlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGRvU2F2ZShJUHJvZ3Jlc3NNb25pdG9yIHByb2dyZXNzTW9uaXRvcikgeworCQkvLyBTYXZlIG9ubHkgcmVzb3VyY2VzIHRoYXQgaGF2ZSBhY3R1YWxseSBjaGFuZ2VkLgorCQkvLworCQlmaW5hbCBNYXA8T2JqZWN0LCBPYmplY3Q+IHNhdmVPcHRpb25zID0gbmV3IEhhc2hNYXA8T2JqZWN0LCBPYmplY3Q+KCk7CisJCXNhdmVPcHRpb25zLnB1dChSZXNvdXJjZS5PUFRJT05fU0FWRV9PTkxZX0lGX0NIQU5HRUQsIFJlc291cmNlLk9QVElPTl9TQVZFX09OTFlfSUZfQ0hBTkdFRF9NRU1PUllfQlVGRkVSKTsKKworCQkvLyBEbyB0aGUgd29yayB3aXRoaW4gYW4gb3BlcmF0aW9uIGJlY2F1c2UgdGhpcyBpcyBhIGxvbmcgcnVubmluZyBhY3Rpdml0eSB0aGF0IG1vZGlmaWVzIHRoZSB3b3JrYmVuY2guCisJCS8vCisJCVdvcmtzcGFjZU1vZGlmeU9wZXJhdGlvbiBvcGVyYXRpb24gPQorCQkJbmV3IFdvcmtzcGFjZU1vZGlmeU9wZXJhdGlvbigpIHsKKwkJCQkvLyBUaGlzIGlzIHRoZSBtZXRob2QgdGhhdCBnZXRzIGludm9rZWQgd2hlbiB0aGUgb3BlcmF0aW9uIHJ1bnMuCisJCQkJLy8KKwkJCQlAT3ZlcnJpZGUKKwkJCQlwdWJsaWMgdm9pZCBleGVjdXRlKElQcm9ncmVzc01vbml0b3IgbW9uaXRvcikgeworCQkJCQkvLyBTYXZlIHRoZSByZXNvdXJjZXMgdG8gdGhlIGZpbGUgc3lzdGVtLgorCQkJCQkvLworCQkJCQlib29sZWFuIGZpcnN0ID0gdHJ1ZTsKKwkJCQkJZm9yIChSZXNvdXJjZSByZXNvdXJjZSA6IGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKS5nZXRSZXNvdXJjZXMoKSkgeworCQkJCQkJaWYgKChmaXJzdCB8fCAhcmVzb3VyY2UuZ2V0Q29udGVudHMoKS5pc0VtcHR5KCkgfHwgaXNQZXJzaXN0ZWQocmVzb3VyY2UpKSAmJiAhZWRpdGluZ0RvbWFpbi5pc1JlYWRPbmx5KHJlc291cmNlKSkgeworCQkJCQkJCXRyeSB7CisJCQkJCQkJCWxvbmcgdGltZVN0YW1wID0gcmVzb3VyY2UuZ2V0VGltZVN0YW1wKCk7CisJCQkJCQkJCXJlc291cmNlLnNhdmUoc2F2ZU9wdGlvbnMpOworCQkJCQkJCQlpZiAocmVzb3VyY2UuZ2V0VGltZVN0YW1wKCkgIT0gdGltZVN0YW1wKSB7CisJCQkJCQkJCQlzYXZlZFJlc291cmNlcy5hZGQocmVzb3VyY2UpOworCQkJCQkJCQl9CisJCQkJCQkJfQorCQkJCQkJCWNhdGNoIChFeGNlcHRpb24gZXhjZXB0aW9uKSB7CisJCQkJCQkJCXJlc291cmNlVG9EaWFnbm9zdGljTWFwLnB1dChyZXNvdXJjZSwgYW5hbHl6ZVJlc291cmNlUHJvYmxlbXMocmVzb3VyY2UsIGV4Y2VwdGlvbikpOworCQkJCQkJCX0KKwkJCQkJCQlmaXJzdCA9IGZhbHNlOworCQkJCQkJfQorCQkJCQl9CisJCQkJfQorCQkJfTsKKworCQl1cGRhdGVQcm9ibGVtSW5kaWNhdGlvbiA9IGZhbHNlOworCQl0cnkgeworCQkJLy8gVGhpcyBydW5zIHRoZSBvcHRpb25zLCBhbmQgc2hvd3MgcHJvZ3Jlc3MuCisJCQkvLworCQkJbmV3IFByb2dyZXNzTW9uaXRvckRpYWxvZyhnZXRTaXRlKCkuZ2V0U2hlbGwoKSkucnVuKHRydWUsIGZhbHNlLCBvcGVyYXRpb24pOworCisJCQkvLyBSZWZyZXNoIHRoZSBuZWNlc3Nhcnkgc3RhdGUuCisJCQkvLworCQkJKChCYXNpY0NvbW1hbmRTdGFjayllZGl0aW5nRG9tYWluLmdldENvbW1hbmRTdGFjaygpKS5zYXZlSXNEb25lKCk7CisJCQlmaXJlUHJvcGVydHlDaGFuZ2UoSUVkaXRvclBhcnQuUFJPUF9ESVJUWSk7CisJCX0KKwkJY2F0Y2ggKEV4Y2VwdGlvbiBleGNlcHRpb24pIHsKKwkJCS8vIFNvbWV0aGluZyB3ZW50IHdyb25nIHRoYXQgc2hvdWxkbid0LgorCQkJLy8KKwkJCVZlY3RvckVkaXRvclBsdWdpbi5JTlNUQU5DRS5sb2coZXhjZXB0aW9uKTsKKwkJfQorCQl1cGRhdGVQcm9ibGVtSW5kaWNhdGlvbiA9IHRydWU7CisJCXVwZGF0ZVByb2JsZW1JbmRpY2F0aW9uKCk7CisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIHdoZXRoZXIgc29tZXRoaW5nIGhhcyBiZWVuIHBlcnNpc3RlZCB0byB0aGUgVVJJIG9mIHRoZSBzcGVjaWZpZWQgcmVzb3VyY2UuCisJICogVGhlIGltcGxlbWVudGF0aW9uIHVzZXMgdGhlIFVSSSBjb252ZXJ0ZXIgZnJvbSB0aGUgZWRpdG9yJ3MgcmVzb3VyY2Ugc2V0IHRvIHRyeSB0byBvcGVuIGFuIGlucHV0IHN0cmVhbS4gCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIGJvb2xlYW4gaXNQZXJzaXN0ZWQoUmVzb3VyY2UgcmVzb3VyY2UpIHsKKwkJYm9vbGVhbiByZXN1bHQgPSBmYWxzZTsKKwkJdHJ5IHsKKwkJCUlucHV0U3RyZWFtIHN0cmVhbSA9IGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKS5nZXRVUklDb252ZXJ0ZXIoKS5jcmVhdGVJbnB1dFN0cmVhbShyZXNvdXJjZS5nZXRVUkkoKSk7CisJCQlpZiAoc3RyZWFtICE9IG51bGwpIHsKKwkJCQlyZXN1bHQgPSB0cnVlOworCQkJCXN0cmVhbS5jbG9zZSgpOworCQkJfQorCQl9CisJCWNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7CisJCQkvLyBJZ25vcmUKKwkJfQorCQlyZXR1cm4gcmVzdWx0OworCX0KKworCS8qKgorCSAqIFRoaXMgYWx3YXlzIHJldHVybnMgdHJ1ZSBiZWNhdXNlIGl0IGlzIG5vdCBjdXJyZW50bHkgc3VwcG9ydGVkLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBib29sZWFuIGlzU2F2ZUFzQWxsb3dlZCgpIHsKKwkJcmV0dXJuIHRydWU7CisJfQorCisJLyoqCisJICogVGhpcyBhbHNvIGNoYW5nZXMgdGhlIGVkaXRvcidzIGlucHV0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGRvU2F2ZUFzKCkgeworCQlTYXZlQXNEaWFsb2cgc2F2ZUFzRGlhbG9nID0gbmV3IFNhdmVBc0RpYWxvZyhnZXRTaXRlKCkuZ2V0U2hlbGwoKSk7CisJCXNhdmVBc0RpYWxvZy5vcGVuKCk7CisJCUlQYXRoIHBhdGggPSBzYXZlQXNEaWFsb2cuZ2V0UmVzdWx0KCk7CisJCWlmIChwYXRoICE9IG51bGwpIHsKKwkJCUlGaWxlIGZpbGUgPSBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuZ2V0Um9vdCgpLmdldEZpbGUocGF0aCk7CisJCQlpZiAoZmlsZSAhPSBudWxsKSB7CisJCQkJZG9TYXZlQXMoVVJJLmNyZWF0ZVBsYXRmb3JtUmVzb3VyY2VVUkkoZmlsZS5nZXRGdWxsUGF0aCgpLnRvU3RyaW5nKCksIHRydWUpLCBuZXcgRmlsZUVkaXRvcklucHV0KGZpbGUpKTsKKwkJCX0KKwkJfQorCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIGRvU2F2ZUFzKFVSSSB1cmksIElFZGl0b3JJbnB1dCBlZGl0b3JJbnB1dCkgeworCQkoZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpLmdldFJlc291cmNlcygpLmdldCgwKSkuc2V0VVJJKHVyaSk7CisJCXNldElucHV0V2l0aE5vdGlmeShlZGl0b3JJbnB1dCk7CisJCXNldFBhcnROYW1lKGVkaXRvcklucHV0LmdldE5hbWUoKSk7CisJCUlQcm9ncmVzc01vbml0b3IgcHJvZ3Jlc3NNb25pdG9yID0KKwkJCWdldEFjdGlvbkJhcnMoKS5nZXRTdGF0dXNMaW5lTWFuYWdlcigpICE9IG51bGwgPworCQkJCWdldEFjdGlvbkJhcnMoKS5nZXRTdGF0dXNMaW5lTWFuYWdlcigpLmdldFByb2dyZXNzTW9uaXRvcigpIDoKKwkJCQluZXcgTnVsbFByb2dyZXNzTW9uaXRvcigpOworCQlkb1NhdmUocHJvZ3Jlc3NNb25pdG9yKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBnb3RvTWFya2VyKElNYXJrZXIgbWFya2VyKSB7CisJCXRyeSB7CisJCQlpZiAobWFya2VyLmdldFR5cGUoKS5lcXVhbHMoRVZhbGlkYXRvci5NQVJLRVIpKSB7CisJCQkJU3RyaW5nIHVyaUF0dHJpYnV0ZSA9IG1hcmtlci5nZXRBdHRyaWJ1dGUoRVZhbGlkYXRvci5VUklfQVRUUklCVVRFLCBudWxsKTsKKwkJCQlpZiAodXJpQXR0cmlidXRlICE9IG51bGwpIHsKKwkJCQkJVVJJIHVyaSA9IFVSSS5jcmVhdGVVUkkodXJpQXR0cmlidXRlKTsKKwkJCQkJRU9iamVjdCBlT2JqZWN0ID0gZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpLmdldEVPYmplY3QodXJpLCB0cnVlKTsKKwkJCQkJaWYgKGVPYmplY3QgIT0gbnVsbCkgeworCQkJCQkgIHNldFNlbGVjdGlvblRvVmlld2VyKENvbGxlY3Rpb25zLnNpbmdsZXRvbihlZGl0aW5nRG9tYWluLmdldFdyYXBwZXIoZU9iamVjdCkpKTsKKwkJCQkJfQorCQkJCX0KKwkJCX0KKwkJfQorCQljYXRjaCAoQ29yZUV4Y2VwdGlvbiBleGNlcHRpb24pIHsKKwkJCVZlY3RvckVkaXRvclBsdWdpbi5JTlNUQU5DRS5sb2coZXhjZXB0aW9uKTsKKwkJfQorCX0KKworCS8qKgorCSAqIFRoaXMgaXMgY2FsbGVkIGR1cmluZyBzdGFydHVwLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGluaXQoSUVkaXRvclNpdGUgc2l0ZSwgSUVkaXRvcklucHV0IGVkaXRvcklucHV0KSB7CisJCXNldFNpdGUoc2l0ZSk7CisJCXNldElucHV0V2l0aE5vdGlmeShlZGl0b3JJbnB1dCk7CisJCXNldFBhcnROYW1lKGVkaXRvcklucHV0LmdldE5hbWUoKSk7CisJCXNpdGUuc2V0U2VsZWN0aW9uUHJvdmlkZXIodGhpcyk7CisJCXNpdGUuZ2V0UGFnZSgpLmFkZFBhcnRMaXN0ZW5lcihwYXJ0TGlzdGVuZXIpOworCQlSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuYWRkUmVzb3VyY2VDaGFuZ2VMaXN0ZW5lcihyZXNvdXJjZUNoYW5nZUxpc3RlbmVyLCBJUmVzb3VyY2VDaGFuZ2VFdmVudC5QT1NUX0NIQU5HRSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgc2V0Rm9jdXMoKSB7CisJCWlmIChjdXJyZW50Vmlld2VyUGFuZSAhPSBudWxsKSB7CisJCQljdXJyZW50Vmlld2VyUGFuZS5zZXRGb2N1cygpOworCQl9CisJCWVsc2UgeworCQkJZ2V0Q29udHJvbChnZXRBY3RpdmVQYWdlKCkpLnNldEZvY3VzKCk7CisJCX0KKwl9CisKKwkvKioKKwkgKiBUaGlzIGltcGxlbWVudHMge0BsaW5rIG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvblByb3ZpZGVyfS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBhZGRTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIoSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lciBsaXN0ZW5lcikgeworCQlzZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXJzLmFkZChsaXN0ZW5lcik7CisJfQorCisJLyoqCisJICogVGhpcyBpbXBsZW1lbnRzIHtAbGluayBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb25Qcm92aWRlcn0uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgcmVtb3ZlU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyKElTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIgbGlzdGVuZXIpIHsKKwkJc2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVycy5yZW1vdmUobGlzdGVuZXIpOworCX0KKworCS8qKgorCSAqIFRoaXMgaW1wbGVtZW50cyB7QGxpbmsgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uUHJvdmlkZXJ9IHRvIHJldHVybiB0aGlzIGVkaXRvcidzIG92ZXJhbGwgc2VsZWN0aW9uLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBJU2VsZWN0aW9uIGdldFNlbGVjdGlvbigpIHsKKwkJcmV0dXJuIGVkaXRvclNlbGVjdGlvbjsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGltcGxlbWVudHMge0BsaW5rIG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvblByb3ZpZGVyfSB0byBzZXQgdGhpcyBlZGl0b3IncyBvdmVyYWxsIHNlbGVjdGlvbi4KKwkgKiBDYWxsaW5nIHRoaXMgcmVzdWx0IHdpbGwgbm90aWZ5IHRoZSBsaXN0ZW5lcnMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgc2V0U2VsZWN0aW9uKElTZWxlY3Rpb24gc2VsZWN0aW9uKSB7CisJCWVkaXRvclNlbGVjdGlvbiA9IHNlbGVjdGlvbjsKKworCQlmb3IgKElTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIgbGlzdGVuZXIgOiBzZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXJzKSB7CisJCQlsaXN0ZW5lci5zZWxlY3Rpb25DaGFuZ2VkKG5ldyBTZWxlY3Rpb25DaGFuZ2VkRXZlbnQodGhpcywgc2VsZWN0aW9uKSk7CisJCX0KKwkJc2V0U3RhdHVzTGluZU1hbmFnZXIoc2VsZWN0aW9uKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRTdGF0dXNMaW5lTWFuYWdlcihJU2VsZWN0aW9uIHNlbGVjdGlvbikgeworCQlJU3RhdHVzTGluZU1hbmFnZXIgc3RhdHVzTGluZU1hbmFnZXIgPSBjdXJyZW50Vmlld2VyICE9IG51bGwgJiYgY3VycmVudFZpZXdlciA9PSBjb250ZW50T3V0bGluZVZpZXdlciA/CisJCQljb250ZW50T3V0bGluZVN0YXR1c0xpbmVNYW5hZ2VyIDogZ2V0QWN0aW9uQmFycygpLmdldFN0YXR1c0xpbmVNYW5hZ2VyKCk7CisKKwkJaWYgKHN0YXR1c0xpbmVNYW5hZ2VyICE9IG51bGwpIHsKKwkJCWlmIChzZWxlY3Rpb24gaW5zdGFuY2VvZiBJU3RydWN0dXJlZFNlbGVjdGlvbikgeworCQkJCUNvbGxlY3Rpb248Pz4gY29sbGVjdGlvbiA9ICgoSVN0cnVjdHVyZWRTZWxlY3Rpb24pc2VsZWN0aW9uKS50b0xpc3QoKTsKKwkJCQlzd2l0Y2ggKGNvbGxlY3Rpb24uc2l6ZSgpKSB7CisJCQkJCWNhc2UgMDogeworCQkJCQkJc3RhdHVzTGluZU1hbmFnZXIuc2V0TWVzc2FnZShnZXRTdHJpbmcoIl9VSV9Ob09iamVjdFNlbGVjdGVkIikpOworCQkJCQkJYnJlYWs7CisJCQkJCX0KKwkJCQkJY2FzZSAxOiB7CisJCQkJCQlTdHJpbmcgdGV4dCA9IG5ldyBBZGFwdGVyRmFjdG9yeUl0ZW1EZWxlZ2F0b3IoYWRhcHRlckZhY3RvcnkpLmdldFRleHQoY29sbGVjdGlvbi5pdGVyYXRvcigpLm5leHQoKSk7CisJCQkJCQlzdGF0dXNMaW5lTWFuYWdlci5zZXRNZXNzYWdlKGdldFN0cmluZygiX1VJX1NpbmdsZU9iamVjdFNlbGVjdGVkIiwgdGV4dCkpOworCQkJCQkJYnJlYWs7CisJCQkJCX0KKwkJCQkJZGVmYXVsdDogeworCQkJCQkJc3RhdHVzTGluZU1hbmFnZXIuc2V0TWVzc2FnZShnZXRTdHJpbmcoIl9VSV9NdWx0aU9iamVjdFNlbGVjdGVkIiwgSW50ZWdlci50b1N0cmluZyhjb2xsZWN0aW9uLnNpemUoKSkpKTsKKwkJCQkJCWJyZWFrOworCQkJCQl9CisJCQkJfQorCQkJfQorCQkJZWxzZSB7CisJCQkJc3RhdHVzTGluZU1hbmFnZXIuc2V0TWVzc2FnZSgiIik7CisJCQl9CisJCX0KKwl9CisKKwkvKioKKwkgKiBUaGlzIGxvb2tzIHVwIGEgc3RyaW5nIGluIHRoZSBwbHVnaW4ncyBwbHVnaW4ucHJvcGVydGllcyBmaWxlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByaXZhdGUgc3RhdGljIFN0cmluZyBnZXRTdHJpbmcoU3RyaW5nIGtleSkgeworCQlyZXR1cm4gVmVjdG9yRWRpdG9yUGx1Z2luLklOU1RBTkNFLmdldFN0cmluZyhrZXkpOworCX0KKworCS8qKgorCSAqIFRoaXMgbG9va3MgdXAgYSBzdHJpbmcgaW4gcGx1Z2luLnByb3BlcnRpZXMsIG1ha2luZyBhIHN1YnN0aXR1dGlvbi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcml2YXRlIHN0YXRpYyBTdHJpbmcgZ2V0U3RyaW5nKFN0cmluZyBrZXksIE9iamVjdCBzMSkgeworCQlyZXR1cm4gVmVjdG9yRWRpdG9yUGx1Z2luLklOU1RBTkNFLmdldFN0cmluZyhrZXksIG5ldyBPYmplY3QgW10geyBzMSB9KTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGltcGxlbWVudHMge0BsaW5rIG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JTWVudUxpc3RlbmVyfSB0byBoZWxwIGZpbGwgdGhlIGNvbnRleHQgbWVudXMgd2l0aCBjb250cmlidXRpb25zIGZyb20gdGhlIEVkaXQgbWVudS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBtZW51QWJvdXRUb1Nob3coSU1lbnVNYW5hZ2VyIG1lbnVNYW5hZ2VyKSB7CisJCSgoSU1lbnVMaXN0ZW5lcilnZXRFZGl0b3JTaXRlKCkuZ2V0QWN0aW9uQmFyQ29udHJpYnV0b3IoKSkubWVudUFib3V0VG9TaG93KG1lbnVNYW5hZ2VyKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRWRpdGluZ0RvbWFpbkFjdGlvbkJhckNvbnRyaWJ1dG9yIGdldEFjdGlvbkJhckNvbnRyaWJ1dG9yKCkgeworCQlyZXR1cm4gKEVkaXRpbmdEb21haW5BY3Rpb25CYXJDb250cmlidXRvcilnZXRFZGl0b3JTaXRlKCkuZ2V0QWN0aW9uQmFyQ29udHJpYnV0b3IoKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgSUFjdGlvbkJhcnMgZ2V0QWN0aW9uQmFycygpIHsKKwkJcmV0dXJuIGdldEFjdGlvbkJhckNvbnRyaWJ1dG9yKCkuZ2V0QWN0aW9uQmFycygpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBBZGFwdGVyRmFjdG9yeSBnZXRBZGFwdGVyRmFjdG9yeSgpIHsKKwkJcmV0dXJuIGFkYXB0ZXJGYWN0b3J5OworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGRpc3Bvc2UoKSB7CisJCXVwZGF0ZVByb2JsZW1JbmRpY2F0aW9uID0gZmFsc2U7CisKKwkJUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLnJlbW92ZVJlc291cmNlQ2hhbmdlTGlzdGVuZXIocmVzb3VyY2VDaGFuZ2VMaXN0ZW5lcik7CisKKwkJZ2V0U2l0ZSgpLmdldFBhZ2UoKS5yZW1vdmVQYXJ0TGlzdGVuZXIocGFydExpc3RlbmVyKTsKKworCQlhZGFwdGVyRmFjdG9yeS5kaXNwb3NlKCk7CisKKwkJaWYgKGdldEFjdGlvbkJhckNvbnRyaWJ1dG9yKCkuZ2V0QWN0aXZlRWRpdG9yKCkgPT0gdGhpcykgeworCQkJZ2V0QWN0aW9uQmFyQ29udHJpYnV0b3IoKS5zZXRBY3RpdmVFZGl0b3IobnVsbCk7CisJCX0KKworCQlpZiAocHJvcGVydHlTaGVldFBhZ2UgIT0gbnVsbCkgeworCQkJcHJvcGVydHlTaGVldFBhZ2UuZGlzcG9zZSgpOworCQl9CisKKwkJaWYgKGNvbnRlbnRPdXRsaW5lUGFnZSAhPSBudWxsKSB7CisJCQljb250ZW50T3V0bGluZVBhZ2UuZGlzcG9zZSgpOworCQl9CisKKwkJc3VwZXIuZGlzcG9zZSgpOworCX0KKworCS8qKgorCSAqIFJldHVybnMgd2hldGhlciB0aGUgb3V0bGluZSB2aWV3IHNob3VsZCBiZSBwcmVzZW50ZWQgdG8gdGhlIHVzZXIuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIGJvb2xlYW4gc2hvd091dGxpbmVWaWV3KCkgeworCQlyZXR1cm4gdHJ1ZTsKKwl9Cit9CmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy52ZWN0b3Ivc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy92ZWN0b3IvcHJlc2VudGF0aW9uL1ZlY3RvckVkaXRvclBsdWdpbi5qYXZhIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMudmVjdG9yL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvdmVjdG9yL3ByZXNlbnRhdGlvbi9WZWN0b3JFZGl0b3JQbHVnaW4uamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZDJjYmM5Ci0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMudmVjdG9yL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvdmVjdG9yL3ByZXNlbnRhdGlvbi9WZWN0b3JFZGl0b3JQbHVnaW4uamF2YQpAQCAtMCwwICsxLDExOCBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLnByZXNlbnRhdGlvbjsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogCisgKiBDb3B5cmlnaHQgKGMpIDIwMTEgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuIAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyAKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0IAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwgCisgKiAKKyAqIENvbnRyaWJ1dG9yczogCisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLkVNRlBsdWdpbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnVpLkVjbGlwc2VVSVBsdWdpbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuUmVzb3VyY2VMb2NhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5wcm92aWRlci5FY29yZUVkaXRQbHVnaW47CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5wcm92aWRlci5Db3JlRWRpdFBsdWdpbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmVkZ2VzLnByb3ZpZGVyLkRlZmluaXRpb25zRWRpdFBsdWdpbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQucHJvdmlkZXIuRGlzZWFzZW1vZGVsc0VkaXRQbHVnaW47CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLnByb3ZpZGVyLlN0YW5kYXJkRWRpdFBsdWdpbjsKK2ltcG9ydCBvcmcub3NnaS5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dDsKKworLyoqCisgKiBUaGlzIGlzIHRoZSBjZW50cmFsIHNpbmdsZXRvbiBmb3IgdGhlIFZlY3RvciBlZGl0b3IgcGx1Z2luLgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgZmluYWwgY2xhc3MgVmVjdG9yRWRpdG9yUGx1Z2luIGV4dGVuZHMgRU1GUGx1Z2luIHsKKwkvKioKKwkgKiBLZWVwIHRyYWNrIG9mIHRoZSBzaW5nbGV0b24uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBWZWN0b3JFZGl0b3JQbHVnaW4gSU5TVEFOQ0UgPSBuZXcgVmVjdG9yRWRpdG9yUGx1Z2luKCk7CisJCisJLyoqCisJICogS2VlcCB0cmFjayBvZiB0aGUgc2luZ2xldG9uLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByaXZhdGUgc3RhdGljIEltcGxlbWVudGF0aW9uIHBsdWdpbjsKKworCS8qKgorCSAqIENyZWF0ZSB0aGUgaW5zdGFuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFZlY3RvckVkaXRvclBsdWdpbigpIHsKKwkJc3VwZXIKKwkJCShuZXcgUmVzb3VyY2VMb2NhdG9yIFtdIHsKKwkJCQlEaXNlYXNlbW9kZWxzRWRpdFBsdWdpbi5JTlNUQU5DRSwKKwkJCQlDb3JlRWRpdFBsdWdpbi5JTlNUQU5DRSwKKwkJCQlFY29yZUVkaXRQbHVnaW4uSU5TVEFOQ0UsCisJCQkJRGVmaW5pdGlvbnNFZGl0UGx1Z2luLklOU1RBTkNFLAorCQkJCVN0YW5kYXJkRWRpdFBsdWdpbi5JTlNUQU5DRSwKKwkJCX0pOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIHNpbmdsZXRvbiBpbnN0YW5jZSBvZiB0aGUgRWNsaXBzZSBwbHVnaW4uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBzaW5nbGV0b24gaW5zdGFuY2UuCisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBSZXNvdXJjZUxvY2F0b3IgZ2V0UGx1Z2luUmVzb3VyY2VMb2NhdG9yKCkgeworCQlyZXR1cm4gcGx1Z2luOworCX0KKwkKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBzaW5nbGV0b24gaW5zdGFuY2Ugb2YgdGhlIEVjbGlwc2UgcGx1Z2luLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgc2luZ2xldG9uIGluc3RhbmNlLgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgc3RhdGljIEltcGxlbWVudGF0aW9uIGdldFBsdWdpbigpIHsKKwkJcmV0dXJuIHBsdWdpbjsKKwl9CisJCisJLyoqCisJICogVGhlIGFjdHVhbCBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgRWNsaXBzZSA8Yj5QbHVnaW48L2I+LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBzdGF0aWMgY2xhc3MgSW1wbGVtZW50YXRpb24gZXh0ZW5kcyBFY2xpcHNlVUlQbHVnaW4geworCQkvKioKKwkJICogQ3JlYXRlcyBhbiBpbnN0YW5jZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCXB1YmxpYyBJbXBsZW1lbnRhdGlvbigpIHsKKwkJCXN1cGVyKCk7CisJCisJCQkvLyBSZW1lbWJlciB0aGUgc3RhdGljIGluc3RhbmNlLgorCQkJLy8KKwkJCXBsdWdpbiA9IHRoaXM7CisJCX0KKwkJCisJCS8qKgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnVpLnBsdWdpbi5BYnN0cmFjdFVJUGx1Z2luI3N0YXJ0KG9yZy5vc2dpLmZyYW1ld29yay5CdW5kbGVDb250ZXh0KQorCQkgKi8KKwkJQE92ZXJyaWRlCisJCXB1YmxpYyB2b2lkIHN0YXJ0KEJ1bmRsZUNvbnRleHQgY29udGV4dCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCQlzdXBlci5zdGFydChjb250ZXh0KTsKKwkJCW5ldyBWZWN0b3JEaXNlYXNlTW9kZWxQcm9wZXJ0eUVkaXRvckFkYXB0ZXJGYWN0b3J5KCk7CisJCX0KKwl9CisKK30KZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzLnZlY3Rvci9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3ZlY3Rvci9wcmVzZW50YXRpb24vVmVjdG9yTW9kZWxXaXphcmQuamF2YSBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzLnZlY3Rvci9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3ZlY3Rvci9wcmVzZW50YXRpb24vVmVjdG9yTW9kZWxXaXphcmQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NzY5YmFhCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMudmVjdG9yL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvdmVjdG9yL3ByZXNlbnRhdGlvbi9WZWN0b3JNb2RlbFdpemFyZC5qYXZhCkBAIC0wLDAgKzEsNjExIEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IucHJlc2VudGF0aW9uOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAKKyAqIENvcHlyaWdodCAoYykgMjAxMSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4gCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIAorICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wIAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQgCisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbCAKKyAqIAorICogQ29udHJpYnV0b3JzOiAKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCitpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlzOworaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOworaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uczsKK2ltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuTWFwOworaW1wb3J0IGphdmEudXRpbC5NaXNzaW5nUmVzb3VyY2VFeGNlcHRpb247CitpbXBvcnQgamF2YS51dGlsLlN0cmluZ1Rva2VuaXplcjsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklDb250YWluZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUZpbGU7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUZvbGRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUmVzb3VyY2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuUmVzb3VyY2VzUGx1Z2luOworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUHJvZ3Jlc3NNb25pdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QYXRoOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24uQ29tbW9uUGx1Z2luOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5VUkk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzczsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzaWZpZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3Q7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnJlc291cmNlLlJlc291cmNlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5yZXNvdXJjZS5SZXNvdXJjZVNldDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUucmVzb3VyY2UuaW1wbC5SZXNvdXJjZVNldEltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnhtaS5YTUxSZXNvdXJjZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5wcm92aWRlci5FeHRlbmRlZEltYWdlUmVnaXN0cnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuZGlhbG9ncy5NZXNzYWdlRGlhbG9nOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTdHJ1Y3R1cmVkU2VsZWN0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuU3RydWN0dXJlZFNlbGVjdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS53aXphcmQuV2l6YXJkOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLndpemFyZC5XaXphcmRQYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuVmVjdG9yRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLlZlY3RvclBhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5wcm92aWRlci5WZWN0b3JFZGl0UGx1Z2luOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5TV1Q7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5Nb2RpZnlFdmVudDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLk1vZGlmeUxpc3RlbmVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5sYXlvdXQuR3JpZERhdGE7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5HcmlkTGF5b3V0OworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbWJvOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5MYWJlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5JTmV3V2l6YXJkOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2g7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaFBhZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaFBhcnQ7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaFdpbmRvdzsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5QYXJ0SW5pdEV4Y2VwdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5hY3Rpb25zLldvcmtzcGFjZU1vZGlmeU9wZXJhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5kaWFsb2dzLldpemFyZE5ld0ZpbGVDcmVhdGlvblBhZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkucGFydC5GaWxlRWRpdG9ySW5wdXQ7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkucGFydC5JU2V0U2VsZWN0aW9uVGFyZ2V0OworCisKKy8qKgorICogVGhpcyBpcyBhIHNpbXBsZSB3aXphcmQgZm9yIGNyZWF0aW5nIGEgbmV3IG1vZGVsIGZpbGUuCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBWZWN0b3JNb2RlbFdpemFyZCBleHRlbmRzIFdpemFyZCBpbXBsZW1lbnRzIElOZXdXaXphcmQgeworCS8qKgorCSAqIFRoZSBzdXBwb3J0ZWQgZXh0ZW5zaW9ucyBmb3IgY3JlYXRlZCBmaWxlcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIExpc3Q8U3RyaW5nPiBGSUxFX0VYVEVOU0lPTlMgPQorCQlDb2xsZWN0aW9ucy51bm1vZGlmaWFibGVMaXN0KEFycmF5cy5hc0xpc3QoVmVjdG9yRWRpdG9yUGx1Z2luLklOU1RBTkNFLmdldFN0cmluZygiX1VJX1ZlY3RvckVkaXRvckZpbGVuYW1lRXh0ZW5zaW9ucyIpLnNwbGl0KCJcXHMqLFxccyoiKSkpOworCisJLyoqCisJICogQSBmb3JtYXR0ZWQgbGlzdCBvZiBzdXBwb3J0ZWQgZmlsZSBleHRlbnNpb25zLCBzdWl0YWJsZSBmb3IgZGlzcGxheS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBGT1JNQVRURURfRklMRV9FWFRFTlNJT05TID0KKwkJVmVjdG9yRWRpdG9yUGx1Z2luLklOU1RBTkNFLmdldFN0cmluZygiX1VJX1ZlY3RvckVkaXRvckZpbGVuYW1lRXh0ZW5zaW9ucyIpLnJlcGxhY2VBbGwoIlxccyosXFxzKiIsICIsICIpOworCisJLyoqCisJICogVGhpcyBjYWNoZXMgYW4gaW5zdGFuY2Ugb2YgdGhlIG1vZGVsIHBhY2thZ2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIFZlY3RvclBhY2thZ2UgdmVjdG9yUGFja2FnZSA9IFZlY3RvclBhY2thZ2UuZUlOU1RBTkNFOworCisJLyoqCisJICogVGhpcyBjYWNoZXMgYW4gaW5zdGFuY2Ugb2YgdGhlIG1vZGVsIGZhY3RvcnkuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIFZlY3RvckZhY3RvcnkgdmVjdG9yRmFjdG9yeSA9IHZlY3RvclBhY2thZ2UuZ2V0VmVjdG9yRmFjdG9yeSgpOworCisJLyoqCisJICogVGhpcyBpcyB0aGUgZmlsZSBjcmVhdGlvbiBwYWdlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBWZWN0b3JNb2RlbFdpemFyZE5ld0ZpbGVDcmVhdGlvblBhZ2UgbmV3RmlsZUNyZWF0aW9uUGFnZTsKKworCS8qKgorCSAqIFRoaXMgaXMgdGhlIGluaXRpYWwgb2JqZWN0IGNyZWF0aW9uIHBhZ2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIFZlY3Rvck1vZGVsV2l6YXJkSW5pdGlhbE9iamVjdENyZWF0aW9uUGFnZSBpbml0aWFsT2JqZWN0Q3JlYXRpb25QYWdlOworCisJLyoqCisJICogUmVtZW1iZXIgdGhlIHNlbGVjdGlvbiBkdXJpbmcgaW5pdGlhbGl6YXRpb24gZm9yIHBvcHVsYXRpbmcgdGhlIGRlZmF1bHQgY29udGFpbmVyLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBJU3RydWN0dXJlZFNlbGVjdGlvbiBzZWxlY3Rpb247CisKKwkvKioKKwkgKiBSZW1lbWJlciB0aGUgd29ya2JlbmNoIGR1cmluZyBpbml0aWFsaXphdGlvbi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgSVdvcmtiZW5jaCB3b3JrYmVuY2g7CisKKwkvKioKKwkgKiBDYWNoZXMgdGhlIG5hbWVzIG9mIHRoZSB0eXBlcyB0aGF0IGNhbiBiZSBjcmVhdGVkIGFzIHRoZSByb290IG9iamVjdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgTGlzdDxTdHJpbmc+IGluaXRpYWxPYmplY3ROYW1lczsKKworCS8qKgorCSAqIFRoaXMganVzdCByZWNvcmRzIHRoZSBpbmZvcm1hdGlvbi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBpbml0KElXb3JrYmVuY2ggd29ya2JlbmNoLCBJU3RydWN0dXJlZFNlbGVjdGlvbiBzZWxlY3Rpb24pIHsKKwkJdGhpcy53b3JrYmVuY2ggPSB3b3JrYmVuY2g7CisJCXRoaXMuc2VsZWN0aW9uID0gc2VsZWN0aW9uOworCQlzZXRXaW5kb3dUaXRsZShWZWN0b3JFZGl0b3JQbHVnaW4uSU5TVEFOQ0UuZ2V0U3RyaW5nKCJfVUlfV2l6YXJkX2xhYmVsIikpOworCQlzZXREZWZhdWx0UGFnZUltYWdlRGVzY3JpcHRvcihFeHRlbmRlZEltYWdlUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0SW1hZ2VEZXNjcmlwdG9yKFZlY3RvckVkaXRvclBsdWdpbi5JTlNUQU5DRS5nZXRJbWFnZSgiZnVsbC93aXpiYW4vTmV3VmVjdG9yIikpKTsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBuYW1lcyBvZiB0aGUgdHlwZXMgdGhhdCBjYW4gYmUgY3JlYXRlZCBhcyB0aGUgcm9vdCBvYmplY3QuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIENvbGxlY3Rpb248U3RyaW5nPiBnZXRJbml0aWFsT2JqZWN0TmFtZXMoKSB7CisJCWlmIChpbml0aWFsT2JqZWN0TmFtZXMgPT0gbnVsbCkgeworCQkJaW5pdGlhbE9iamVjdE5hbWVzID0gbmV3IEFycmF5TGlzdDxTdHJpbmc+KCk7CisJCQlmb3IgKEVDbGFzc2lmaWVyIGVDbGFzc2lmaWVyIDogdmVjdG9yUGFja2FnZS5nZXRFQ2xhc3NpZmllcnMoKSkgeworCQkJCWlmIChlQ2xhc3NpZmllciBpbnN0YW5jZW9mIEVDbGFzcykgeworCQkJCQlFQ2xhc3MgZUNsYXNzID0gKEVDbGFzcyllQ2xhc3NpZmllcjsKKwkJCQkJaWYgKCFlQ2xhc3MuaXNBYnN0cmFjdCgpKSB7CisJCQkJCQlpbml0aWFsT2JqZWN0TmFtZXMuYWRkKGVDbGFzcy5nZXROYW1lKCkpOworCQkJCQl9CisJCQkJfQorCQkJfQorCQkJQ29sbGVjdGlvbnMuc29ydChpbml0aWFsT2JqZWN0TmFtZXMsIENvbW1vblBsdWdpbi5JTlNUQU5DRS5nZXRDb21wYXJhdG9yKCkpOworCQl9CisJCXJldHVybiBpbml0aWFsT2JqZWN0TmFtZXM7CisJfQorCisJLyoqCisJICogQ3JlYXRlIGEgbmV3IG1vZGVsLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBFT2JqZWN0IGNyZWF0ZUluaXRpYWxNb2RlbCgpIHsKKwkJRUNsYXNzIGVDbGFzcyA9IChFQ2xhc3MpdmVjdG9yUGFja2FnZS5nZXRFQ2xhc3NpZmllcihpbml0aWFsT2JqZWN0Q3JlYXRpb25QYWdlLmdldEluaXRpYWxPYmplY3ROYW1lKCkpOworCQlFT2JqZWN0IHJvb3RPYmplY3QgPSB2ZWN0b3JGYWN0b3J5LmNyZWF0ZShlQ2xhc3MpOworCQlyZXR1cm4gcm9vdE9iamVjdDsKKwl9CisKKwkvKioKKwkgKiBEbyB0aGUgd29yayBhZnRlciBldmVyeXRoaW5nIGlzIHNwZWNpZmllZC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgYm9vbGVhbiBwZXJmb3JtRmluaXNoKCkgeworCQl0cnkgeworCQkJLy8gUmVtZW1iZXIgdGhlIGZpbGUuCisJCQkvLworCQkJZmluYWwgSUZpbGUgbW9kZWxGaWxlID0gZ2V0TW9kZWxGaWxlKCk7CisKKwkJCS8vIERvIHRoZSB3b3JrIHdpdGhpbiBhbiBvcGVyYXRpb24uCisJCQkvLworCQkJV29ya3NwYWNlTW9kaWZ5T3BlcmF0aW9uIG9wZXJhdGlvbiA9CisJCQkJbmV3IFdvcmtzcGFjZU1vZGlmeU9wZXJhdGlvbigpIHsKKwkJCQkJQE92ZXJyaWRlCisJCQkJCXByb3RlY3RlZCB2b2lkIGV4ZWN1dGUoSVByb2dyZXNzTW9uaXRvciBwcm9ncmVzc01vbml0b3IpIHsKKwkJCQkJCXRyeSB7CisJCQkJCQkJLy8gQ3JlYXRlIGEgcmVzb3VyY2Ugc2V0CisJCQkJCQkJLy8KKwkJCQkJCQlSZXNvdXJjZVNldCByZXNvdXJjZVNldCA9IG5ldyBSZXNvdXJjZVNldEltcGwoKTsKKworCQkJCQkJCS8vIEdldCB0aGUgVVJJIG9mIHRoZSBtb2RlbCBmaWxlLgorCQkJCQkJCS8vCisJCQkJCQkJVVJJIGZpbGVVUkkgPSBVUkkuY3JlYXRlUGxhdGZvcm1SZXNvdXJjZVVSSShtb2RlbEZpbGUuZ2V0RnVsbFBhdGgoKS50b1N0cmluZygpLCB0cnVlKTsKKworCQkJCQkJCS8vIENyZWF0ZSBhIHJlc291cmNlIGZvciB0aGlzIGZpbGUuCisJCQkJCQkJLy8KKwkJCQkJCQlSZXNvdXJjZSByZXNvdXJjZSA9IHJlc291cmNlU2V0LmNyZWF0ZVJlc291cmNlKGZpbGVVUkkpOworCisJCQkJCQkJLy8gQWRkIHRoZSBpbml0aWFsIG1vZGVsIG9iamVjdCB0byB0aGUgY29udGVudHMuCisJCQkJCQkJLy8KKwkJCQkJCQlFT2JqZWN0IHJvb3RPYmplY3QgPSBjcmVhdGVJbml0aWFsTW9kZWwoKTsKKwkJCQkJCQlpZiAocm9vdE9iamVjdCAhPSBudWxsKSB7CisJCQkJCQkJCXJlc291cmNlLmdldENvbnRlbnRzKCkuYWRkKHJvb3RPYmplY3QpOworCQkJCQkJCX0KKworCQkJCQkJCS8vIFNhdmUgdGhlIGNvbnRlbnRzIG9mIHRoZSByZXNvdXJjZSB0byB0aGUgZmlsZSBzeXN0ZW0uCisJCQkJCQkJLy8KKwkJCQkJCQlNYXA8T2JqZWN0LCBPYmplY3Q+IG9wdGlvbnMgPSBuZXcgSGFzaE1hcDxPYmplY3QsIE9iamVjdD4oKTsKKwkJCQkJCQlvcHRpb25zLnB1dChYTUxSZXNvdXJjZS5PUFRJT05fRU5DT0RJTkcsIGluaXRpYWxPYmplY3RDcmVhdGlvblBhZ2UuZ2V0RW5jb2RpbmcoKSk7CisJCQkJCQkJcmVzb3VyY2Uuc2F2ZShvcHRpb25zKTsKKwkJCQkJCX0KKwkJCQkJCWNhdGNoIChFeGNlcHRpb24gZXhjZXB0aW9uKSB7CisJCQkJCQkJVmVjdG9yRWRpdG9yUGx1Z2luLklOU1RBTkNFLmxvZyhleGNlcHRpb24pOworCQkJCQkJfQorCQkJCQkJZmluYWxseSB7CisJCQkJCQkJcHJvZ3Jlc3NNb25pdG9yLmRvbmUoKTsKKwkJCQkJCX0KKwkJCQkJfQorCQkJCX07CisKKwkJCWdldENvbnRhaW5lcigpLnJ1bihmYWxzZSwgZmFsc2UsIG9wZXJhdGlvbik7CisKKwkJCS8vIFNlbGVjdCB0aGUgbmV3IGZpbGUgcmVzb3VyY2UgaW4gdGhlIGN1cnJlbnQgdmlldy4KKwkJCS8vCisJCQlJV29ya2JlbmNoV2luZG93IHdvcmtiZW5jaFdpbmRvdyA9IHdvcmtiZW5jaC5nZXRBY3RpdmVXb3JrYmVuY2hXaW5kb3coKTsKKwkJCUlXb3JrYmVuY2hQYWdlIHBhZ2UgPSB3b3JrYmVuY2hXaW5kb3cuZ2V0QWN0aXZlUGFnZSgpOworCQkJZmluYWwgSVdvcmtiZW5jaFBhcnQgYWN0aXZlUGFydCA9IHBhZ2UuZ2V0QWN0aXZlUGFydCgpOworCQkJaWYgKGFjdGl2ZVBhcnQgaW5zdGFuY2VvZiBJU2V0U2VsZWN0aW9uVGFyZ2V0KSB7CisJCQkJZmluYWwgSVNlbGVjdGlvbiB0YXJnZXRTZWxlY3Rpb24gPSBuZXcgU3RydWN0dXJlZFNlbGVjdGlvbihtb2RlbEZpbGUpOworCQkJCWdldFNoZWxsKCkuZ2V0RGlzcGxheSgpLmFzeW5jRXhlYworCQkJCQkobmV3IFJ1bm5hYmxlKCkgeworCQkJCQkJIHB1YmxpYyB2b2lkIHJ1bigpIHsKKwkJCQkJCQkgKChJU2V0U2VsZWN0aW9uVGFyZ2V0KWFjdGl2ZVBhcnQpLnNlbGVjdFJldmVhbCh0YXJnZXRTZWxlY3Rpb24pOworCQkJCQkJIH0KKwkJCQkJIH0pOworCQkJfQorCisJCQkvLyBPcGVuIGFuIGVkaXRvciBvbiB0aGUgbmV3IGZpbGUuCisJCQkvLworCQkJdHJ5IHsKKwkJCQlwYWdlLm9wZW5FZGl0b3IKKwkJCQkJKG5ldyBGaWxlRWRpdG9ySW5wdXQobW9kZWxGaWxlKSwKKwkJCQkJIHdvcmtiZW5jaC5nZXRFZGl0b3JSZWdpc3RyeSgpLmdldERlZmF1bHRFZGl0b3IobW9kZWxGaWxlLmdldEZ1bGxQYXRoKCkudG9TdHJpbmcoKSkuZ2V0SWQoKSk7CQkJCQkgCSAKKwkJCX0KKwkJCWNhdGNoIChQYXJ0SW5pdEV4Y2VwdGlvbiBleGNlcHRpb24pIHsKKwkJCQlNZXNzYWdlRGlhbG9nLm9wZW5FcnJvcih3b3JrYmVuY2hXaW5kb3cuZ2V0U2hlbGwoKSwgVmVjdG9yRWRpdG9yUGx1Z2luLklOU1RBTkNFLmdldFN0cmluZygiX1VJX09wZW5FZGl0b3JFcnJvcl9sYWJlbCIpLCBleGNlcHRpb24uZ2V0TWVzc2FnZSgpKTsKKwkJCQlyZXR1cm4gZmFsc2U7CisJCQl9CisKKwkJCXJldHVybiB0cnVlOworCQl9CisJCWNhdGNoIChFeGNlcHRpb24gZXhjZXB0aW9uKSB7CisJCQlWZWN0b3JFZGl0b3JQbHVnaW4uSU5TVEFOQ0UubG9nKGV4Y2VwdGlvbik7CisJCQlyZXR1cm4gZmFsc2U7CisJCX0KKwl9CisKKwkvKioKKwkgKiBUaGlzIGlzIHRoZSBvbmUgcGFnZSBvZiB0aGUgd2l6YXJkLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBjbGFzcyBWZWN0b3JNb2RlbFdpemFyZE5ld0ZpbGVDcmVhdGlvblBhZ2UgZXh0ZW5kcyBXaXphcmROZXdGaWxlQ3JlYXRpb25QYWdlIHsKKwkJLyoqCisJCSAqIFBhc3MgaW4gdGhlIHNlbGVjdGlvbi4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCXB1YmxpYyBWZWN0b3JNb2RlbFdpemFyZE5ld0ZpbGVDcmVhdGlvblBhZ2UoU3RyaW5nIHBhZ2VJZCwgSVN0cnVjdHVyZWRTZWxlY3Rpb24gc2VsZWN0aW9uKSB7CisJCQlzdXBlcihwYWdlSWQsIHNlbGVjdGlvbik7CisJCX0KKworCQkvKioKKwkJICogVGhlIGZyYW1ld29yayBjYWxscyB0aGlzIHRvIHNlZSBpZiB0aGUgZmlsZSBpcyBjb3JyZWN0LgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJQE92ZXJyaWRlCisJCXByb3RlY3RlZCBib29sZWFuIHZhbGlkYXRlUGFnZSgpIHsKKwkJCWlmIChzdXBlci52YWxpZGF0ZVBhZ2UoKSkgeworCQkJCVN0cmluZyBleHRlbnNpb24gPSBuZXcgUGF0aChnZXRGaWxlTmFtZSgpKS5nZXRGaWxlRXh0ZW5zaW9uKCk7CisJCQkJaWYgKGV4dGVuc2lvbiA9PSBudWxsIHx8ICFGSUxFX0VYVEVOU0lPTlMuY29udGFpbnMoZXh0ZW5zaW9uKSkgeworCQkJCQlTdHJpbmcga2V5ID0gRklMRV9FWFRFTlNJT05TLnNpemUoKSA+IDEgPyAiX1dBUk5fRmlsZW5hbWVFeHRlbnNpb25zIiA6ICJfV0FSTl9GaWxlbmFtZUV4dGVuc2lvbiI7CisJCQkJCXNldEVycm9yTWVzc2FnZShWZWN0b3JFZGl0b3JQbHVnaW4uSU5TVEFOQ0UuZ2V0U3RyaW5nKGtleSwgbmV3IE9iamVjdCBbXSB7IEZPUk1BVFRFRF9GSUxFX0VYVEVOU0lPTlMgfSkpOworCQkJCQlyZXR1cm4gZmFsc2U7CisJCQkJfQorCQkJCXJldHVybiB0cnVlOworCQkJfQorCQkJcmV0dXJuIGZhbHNlOworCQl9CisKKwkJLyoqCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlwdWJsaWMgSUZpbGUgZ2V0TW9kZWxGaWxlKCkgeworCQkJcmV0dXJuIFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5nZXRSb290KCkuZ2V0RmlsZShnZXRDb250YWluZXJGdWxsUGF0aCgpLmFwcGVuZChnZXRGaWxlTmFtZSgpKSk7CisJCX0KKwl9CisKKwkvKioKKwkgKiBUaGlzIGlzIHRoZSBwYWdlIHdoZXJlIHRoZSB0eXBlIG9mIG9iamVjdCB0byBjcmVhdGUgaXMgc2VsZWN0ZWQuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIGNsYXNzIFZlY3Rvck1vZGVsV2l6YXJkSW5pdGlhbE9iamVjdENyZWF0aW9uUGFnZSBleHRlbmRzIFdpemFyZFBhZ2UgeworCQkvKioKKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCXByb3RlY3RlZCBDb21ibyBpbml0aWFsT2JqZWN0RmllbGQ7CisKKwkJLyoqCisJCSAqIEBnZW5lcmF0ZWQKKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqLworCQlwcm90ZWN0ZWQgTGlzdDxTdHJpbmc+IGVuY29kaW5nczsKKworCQkvKioKKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCXByb3RlY3RlZCBDb21ibyBlbmNvZGluZ0ZpZWxkOworCisJCS8qKgorCQkgKiBQYXNzIGluIHRoZSBzZWxlY3Rpb24uCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlwdWJsaWMgVmVjdG9yTW9kZWxXaXphcmRJbml0aWFsT2JqZWN0Q3JlYXRpb25QYWdlKFN0cmluZyBwYWdlSWQpIHsKKwkJCXN1cGVyKHBhZ2VJZCk7CisJCX0KKworCQkvKioKKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCXB1YmxpYyB2b2lkIGNyZWF0ZUNvbnRyb2woQ29tcG9zaXRlIHBhcmVudCkgeworCQkJQ29tcG9zaXRlIGNvbXBvc2l0ZSA9IG5ldyBDb21wb3NpdGUocGFyZW50LCBTV1QuTk9ORSk7IHsKKwkJCQlHcmlkTGF5b3V0IGxheW91dCA9IG5ldyBHcmlkTGF5b3V0KCk7CisJCQkJbGF5b3V0Lm51bUNvbHVtbnMgPSAxOworCQkJCWxheW91dC52ZXJ0aWNhbFNwYWNpbmcgPSAxMjsKKwkJCQljb21wb3NpdGUuc2V0TGF5b3V0KGxheW91dCk7CisKKwkJCQlHcmlkRGF0YSBkYXRhID0gbmV3IEdyaWREYXRhKCk7CisJCQkJZGF0YS52ZXJ0aWNhbEFsaWdubWVudCA9IEdyaWREYXRhLkZJTEw7CisJCQkJZGF0YS5ncmFiRXhjZXNzVmVydGljYWxTcGFjZSA9IHRydWU7CisJCQkJZGF0YS5ob3Jpem9udGFsQWxpZ25tZW50ID0gR3JpZERhdGEuRklMTDsKKwkJCQljb21wb3NpdGUuc2V0TGF5b3V0RGF0YShkYXRhKTsKKwkJCX0KKworCQkJTGFiZWwgY29udGFpbmVyTGFiZWwgPSBuZXcgTGFiZWwoY29tcG9zaXRlLCBTV1QuTEVGVCk7CisJCQl7CisJCQkJY29udGFpbmVyTGFiZWwuc2V0VGV4dChWZWN0b3JFZGl0b3JQbHVnaW4uSU5TVEFOQ0UuZ2V0U3RyaW5nKCJfVUlfTW9kZWxPYmplY3QiKSk7CisKKwkJCQlHcmlkRGF0YSBkYXRhID0gbmV3IEdyaWREYXRhKCk7CisJCQkJZGF0YS5ob3Jpem9udGFsQWxpZ25tZW50ID0gR3JpZERhdGEuRklMTDsKKwkJCQljb250YWluZXJMYWJlbC5zZXRMYXlvdXREYXRhKGRhdGEpOworCQkJfQorCisJCQlpbml0aWFsT2JqZWN0RmllbGQgPSBuZXcgQ29tYm8oY29tcG9zaXRlLCBTV1QuQk9SREVSKTsKKwkJCXsKKwkJCQlHcmlkRGF0YSBkYXRhID0gbmV3IEdyaWREYXRhKCk7CisJCQkJZGF0YS5ob3Jpem9udGFsQWxpZ25tZW50ID0gR3JpZERhdGEuRklMTDsKKwkJCQlkYXRhLmdyYWJFeGNlc3NIb3Jpem9udGFsU3BhY2UgPSB0cnVlOworCQkJCWluaXRpYWxPYmplY3RGaWVsZC5zZXRMYXlvdXREYXRhKGRhdGEpOworCQkJfQorCisJCQlmb3IgKFN0cmluZyBvYmplY3ROYW1lIDogZ2V0SW5pdGlhbE9iamVjdE5hbWVzKCkpIHsKKwkJCQlpbml0aWFsT2JqZWN0RmllbGQuYWRkKGdldExhYmVsKG9iamVjdE5hbWUpKTsKKwkJCX0KKworCQkJaWYgKGluaXRpYWxPYmplY3RGaWVsZC5nZXRJdGVtQ291bnQoKSA9PSAxKSB7CisJCQkJaW5pdGlhbE9iamVjdEZpZWxkLnNlbGVjdCgwKTsKKwkJCX0KKwkJCWluaXRpYWxPYmplY3RGaWVsZC5hZGRNb2RpZnlMaXN0ZW5lcih2YWxpZGF0b3IpOworCisJCQlMYWJlbCBlbmNvZGluZ0xhYmVsID0gbmV3IExhYmVsKGNvbXBvc2l0ZSwgU1dULkxFRlQpOworCQkJeworCQkJCWVuY29kaW5nTGFiZWwuc2V0VGV4dChWZWN0b3JFZGl0b3JQbHVnaW4uSU5TVEFOQ0UuZ2V0U3RyaW5nKCJfVUlfWE1MRW5jb2RpbmciKSk7CisKKwkJCQlHcmlkRGF0YSBkYXRhID0gbmV3IEdyaWREYXRhKCk7CisJCQkJZGF0YS5ob3Jpem9udGFsQWxpZ25tZW50ID0gR3JpZERhdGEuRklMTDsKKwkJCQllbmNvZGluZ0xhYmVsLnNldExheW91dERhdGEoZGF0YSk7CisJCQl9CisJCQllbmNvZGluZ0ZpZWxkID0gbmV3IENvbWJvKGNvbXBvc2l0ZSwgU1dULkJPUkRFUik7CisJCQl7CisJCQkJR3JpZERhdGEgZGF0YSA9IG5ldyBHcmlkRGF0YSgpOworCQkJCWRhdGEuaG9yaXpvbnRhbEFsaWdubWVudCA9IEdyaWREYXRhLkZJTEw7CisJCQkJZGF0YS5ncmFiRXhjZXNzSG9yaXpvbnRhbFNwYWNlID0gdHJ1ZTsKKwkJCQllbmNvZGluZ0ZpZWxkLnNldExheW91dERhdGEoZGF0YSk7CisJCQl9CisKKwkJCWZvciAoU3RyaW5nIGVuY29kaW5nIDogZ2V0RW5jb2RpbmdzKCkpIHsKKwkJCQllbmNvZGluZ0ZpZWxkLmFkZChlbmNvZGluZyk7CisJCQl9CisKKwkJCWVuY29kaW5nRmllbGQuc2VsZWN0KDApOworCQkJZW5jb2RpbmdGaWVsZC5hZGRNb2RpZnlMaXN0ZW5lcih2YWxpZGF0b3IpOworCisJCQlzZXRQYWdlQ29tcGxldGUodmFsaWRhdGVQYWdlKCkpOworCQkJc2V0Q29udHJvbChjb21wb3NpdGUpOworCQl9CisKKwkJLyoqCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlwcm90ZWN0ZWQgTW9kaWZ5TGlzdGVuZXIgdmFsaWRhdG9yID0KKwkJCW5ldyBNb2RpZnlMaXN0ZW5lcigpIHsKKwkJCQlwdWJsaWMgdm9pZCBtb2RpZnlUZXh0KE1vZGlmeUV2ZW50IGUpIHsKKwkJCQkJc2V0UGFnZUNvbXBsZXRlKHZhbGlkYXRlUGFnZSgpKTsKKwkJCQl9CisJCQl9OworCisJCS8qKgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJcHJvdGVjdGVkIGJvb2xlYW4gdmFsaWRhdGVQYWdlKCkgeworCQkJcmV0dXJuIGdldEluaXRpYWxPYmplY3ROYW1lKCkgIT0gbnVsbCAmJiBnZXRFbmNvZGluZ3MoKS5jb250YWlucyhlbmNvZGluZ0ZpZWxkLmdldFRleHQoKSk7CisJCX0KKworCQkvKioKKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUBPdmVycmlkZQorCQlwdWJsaWMgdm9pZCBzZXRWaXNpYmxlKGJvb2xlYW4gdmlzaWJsZSkgeworCQkJc3VwZXIuc2V0VmlzaWJsZSh2aXNpYmxlKTsKKwkJCWlmICh2aXNpYmxlKSB7CisJCQkJaWYgKGluaXRpYWxPYmplY3RGaWVsZC5nZXRJdGVtQ291bnQoKSA9PSAxKSB7CisJCQkJCWluaXRpYWxPYmplY3RGaWVsZC5jbGVhclNlbGVjdGlvbigpOworCQkJCQllbmNvZGluZ0ZpZWxkLnNldEZvY3VzKCk7CisJCQkJfQorCQkJCWVsc2UgeworCQkJCQllbmNvZGluZ0ZpZWxkLmNsZWFyU2VsZWN0aW9uKCk7CisJCQkJCWluaXRpYWxPYmplY3RGaWVsZC5zZXRGb2N1cygpOworCQkJCX0KKwkJCX0KKwkJfQorCisJCS8qKgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJcHVibGljIFN0cmluZyBnZXRJbml0aWFsT2JqZWN0TmFtZSgpIHsKKwkJCVN0cmluZyBsYWJlbCA9IGluaXRpYWxPYmplY3RGaWVsZC5nZXRUZXh0KCk7CisKKwkJCWZvciAoU3RyaW5nIG5hbWUgOiBnZXRJbml0aWFsT2JqZWN0TmFtZXMoKSkgeworCQkJCWlmIChnZXRMYWJlbChuYW1lKS5lcXVhbHMobGFiZWwpKSB7CisJCQkJCXJldHVybiBuYW1lOworCQkJCX0KKwkJCX0KKwkJCXJldHVybiBudWxsOworCQl9CisKKwkJLyoqCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlwdWJsaWMgU3RyaW5nIGdldEVuY29kaW5nKCkgeworCQkJcmV0dXJuIGVuY29kaW5nRmllbGQuZ2V0VGV4dCgpOworCQl9CisKKwkJLyoqCisJCSAqIFJldHVybnMgdGhlIGxhYmVsIGZvciB0aGUgc3BlY2lmaWVkIHR5cGUgbmFtZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCXByb3RlY3RlZCBTdHJpbmcgZ2V0TGFiZWwoU3RyaW5nIHR5cGVOYW1lKSB7CisJCQl0cnkgeworCQkJCXJldHVybiBWZWN0b3JFZGl0UGx1Z2luLklOU1RBTkNFLmdldFN0cmluZygiX1VJXyIgKyB0eXBlTmFtZSArICJfdHlwZSIpOworCQkJfQorCQkJY2F0Y2goTWlzc2luZ1Jlc291cmNlRXhjZXB0aW9uIG1yZSkgeworCQkJCVZlY3RvckVkaXRvclBsdWdpbi5JTlNUQU5DRS5sb2cobXJlKTsKKwkJCX0KKwkJCXJldHVybiB0eXBlTmFtZTsKKwkJfQorCisJCS8qKgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJcHJvdGVjdGVkIENvbGxlY3Rpb248U3RyaW5nPiBnZXRFbmNvZGluZ3MoKSB7CisJCQlpZiAoZW5jb2RpbmdzID09IG51bGwpIHsKKwkJCQllbmNvZGluZ3MgPSBuZXcgQXJyYXlMaXN0PFN0cmluZz4oKTsKKwkJCQlmb3IgKFN0cmluZ1Rva2VuaXplciBzdHJpbmdUb2tlbml6ZXIgPSBuZXcgU3RyaW5nVG9rZW5pemVyKFZlY3RvckVkaXRvclBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoIl9VSV9YTUxFbmNvZGluZ0Nob2ljZXMiKSk7IHN0cmluZ1Rva2VuaXplci5oYXNNb3JlVG9rZW5zKCk7ICkgeworCQkJCQllbmNvZGluZ3MuYWRkKHN0cmluZ1Rva2VuaXplci5uZXh0VG9rZW4oKSk7CisJCQkJfQorCQkJfQorCQkJcmV0dXJuIGVuY29kaW5nczsKKwkJfQorCX0KKworCS8qKgorCSAqIFRoZSBmcmFtZXdvcmsgY2FsbHMgdGhpcyB0byBjcmVhdGUgdGhlIGNvbnRlbnRzIG9mIHRoZSB3aXphcmQuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGFkZFBhZ2VzKCkgeworCQkvLyBDcmVhdGUgYSBwYWdlLCBzZXQgdGhlIHRpdGxlLCBhbmQgdGhlIGluaXRpYWwgbW9kZWwgZmlsZSBuYW1lLgorCQkvLworCQluZXdGaWxlQ3JlYXRpb25QYWdlID0gbmV3IFZlY3Rvck1vZGVsV2l6YXJkTmV3RmlsZUNyZWF0aW9uUGFnZSgiV2hhdGV2ZXIiLCBzZWxlY3Rpb24pOworCQluZXdGaWxlQ3JlYXRpb25QYWdlLnNldFRpdGxlKFZlY3RvckVkaXRvclBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoIl9VSV9WZWN0b3JNb2RlbFdpemFyZF9sYWJlbCIpKTsKKwkJbmV3RmlsZUNyZWF0aW9uUGFnZS5zZXREZXNjcmlwdGlvbihWZWN0b3JFZGl0b3JQbHVnaW4uSU5TVEFOQ0UuZ2V0U3RyaW5nKCJfVUlfVmVjdG9yTW9kZWxXaXphcmRfZGVzY3JpcHRpb24iKSk7CisJCW5ld0ZpbGVDcmVhdGlvblBhZ2Uuc2V0RmlsZU5hbWUoVmVjdG9yRWRpdG9yUGx1Z2luLklOU1RBTkNFLmdldFN0cmluZygiX1VJX1ZlY3RvckVkaXRvckZpbGVuYW1lRGVmYXVsdEJhc2UiKSArICIuIiArIEZJTEVfRVhURU5TSU9OUy5nZXQoMCkpOworCQlhZGRQYWdlKG5ld0ZpbGVDcmVhdGlvblBhZ2UpOworCisJCS8vIFRyeSBhbmQgZ2V0IHRoZSByZXNvdXJjZSBzZWxlY3Rpb24gdG8gZGV0ZXJtaW5lIGEgY3VycmVudCBkaXJlY3RvcnkgZm9yIHRoZSBmaWxlIGRpYWxvZy4KKwkJLy8KKwkJaWYgKHNlbGVjdGlvbiAhPSBudWxsICYmICFzZWxlY3Rpb24uaXNFbXB0eSgpKSB7CisJCQkvLyBHZXQgdGhlIHJlc291cmNlLi4uCisJCQkvLworCQkJT2JqZWN0IHNlbGVjdGVkRWxlbWVudCA9IHNlbGVjdGlvbi5pdGVyYXRvcigpLm5leHQoKTsKKwkJCWlmIChzZWxlY3RlZEVsZW1lbnQgaW5zdGFuY2VvZiBJUmVzb3VyY2UpIHsKKwkJCQkvLyBHZXQgdGhlIHJlc291cmNlIHBhcmVudCwgaWYgaXRzIGEgZmlsZS4KKwkJCQkvLworCQkJCUlSZXNvdXJjZSBzZWxlY3RlZFJlc291cmNlID0gKElSZXNvdXJjZSlzZWxlY3RlZEVsZW1lbnQ7CisJCQkJaWYgKHNlbGVjdGVkUmVzb3VyY2UuZ2V0VHlwZSgpID09IElSZXNvdXJjZS5GSUxFKSB7CisJCQkJCXNlbGVjdGVkUmVzb3VyY2UgPSBzZWxlY3RlZFJlc291cmNlLmdldFBhcmVudCgpOworCQkJCX0KKworCQkJCS8vIFRoaXMgZ2l2ZXMgdXMgYSBkaXJlY3RvcnkuLi4KKwkJCQkvLworCQkJCWlmIChzZWxlY3RlZFJlc291cmNlIGluc3RhbmNlb2YgSUZvbGRlciB8fCBzZWxlY3RlZFJlc291cmNlIGluc3RhbmNlb2YgSVByb2plY3QpIHsKKwkJCQkJLy8gU2V0IHRoaXMgZm9yIHRoZSBjb250YWluZXIuCisJCQkJCS8vCisJCQkJCW5ld0ZpbGVDcmVhdGlvblBhZ2Uuc2V0Q29udGFpbmVyRnVsbFBhdGgoc2VsZWN0ZWRSZXNvdXJjZS5nZXRGdWxsUGF0aCgpKTsKKworCQkJCQkvLyBNYWtlIHVwIGEgdW5pcXVlIG5ldyBuYW1lIGhlcmUuCisJCQkJCS8vCisJCQkJCVN0cmluZyBkZWZhdWx0TW9kZWxCYXNlRmlsZW5hbWUgPSBWZWN0b3JFZGl0b3JQbHVnaW4uSU5TVEFOQ0UuZ2V0U3RyaW5nKCJfVUlfVmVjdG9yRWRpdG9yRmlsZW5hbWVEZWZhdWx0QmFzZSIpOworCQkJCQlTdHJpbmcgZGVmYXVsdE1vZGVsRmlsZW5hbWVFeHRlbnNpb24gPSBGSUxFX0VYVEVOU0lPTlMuZ2V0KDApOworCQkJCQlTdHJpbmcgbW9kZWxGaWxlbmFtZSA9IGRlZmF1bHRNb2RlbEJhc2VGaWxlbmFtZSArICIuIiArIGRlZmF1bHRNb2RlbEZpbGVuYW1lRXh0ZW5zaW9uOworCQkJCQlmb3IgKGludCBpID0gMTsgKChJQ29udGFpbmVyKXNlbGVjdGVkUmVzb3VyY2UpLmZpbmRNZW1iZXIobW9kZWxGaWxlbmFtZSkgIT0gbnVsbDsgKytpKSB7CisJCQkJCQltb2RlbEZpbGVuYW1lID0gZGVmYXVsdE1vZGVsQmFzZUZpbGVuYW1lICsgaSArICIuIiArIGRlZmF1bHRNb2RlbEZpbGVuYW1lRXh0ZW5zaW9uOworCQkJCQl9CisJCQkJCW5ld0ZpbGVDcmVhdGlvblBhZ2Uuc2V0RmlsZU5hbWUobW9kZWxGaWxlbmFtZSk7CisJCQkJfQorCQkJfQorCQl9CisJCWluaXRpYWxPYmplY3RDcmVhdGlvblBhZ2UgPSBuZXcgVmVjdG9yTW9kZWxXaXphcmRJbml0aWFsT2JqZWN0Q3JlYXRpb25QYWdlKCJXaGF0ZXZlcjIiKTsKKwkJaW5pdGlhbE9iamVjdENyZWF0aW9uUGFnZS5zZXRUaXRsZShWZWN0b3JFZGl0b3JQbHVnaW4uSU5TVEFOQ0UuZ2V0U3RyaW5nKCJfVUlfVmVjdG9yTW9kZWxXaXphcmRfbGFiZWwiKSk7CisJCWluaXRpYWxPYmplY3RDcmVhdGlvblBhZ2Uuc2V0RGVzY3JpcHRpb24oVmVjdG9yRWRpdG9yUGx1Z2luLklOU1RBTkNFLmdldFN0cmluZygiX1VJX1dpemFyZF9pbml0aWFsX29iamVjdF9kZXNjcmlwdGlvbiIpKTsKKwkJYWRkUGFnZShpbml0aWFsT2JqZWN0Q3JlYXRpb25QYWdlKTsKKwl9CisKKwkvKioKKwkgKiBHZXQgdGhlIGZpbGUgZnJvbSB0aGUgcGFnZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgSUZpbGUgZ2V0TW9kZWxGaWxlKCkgeworCQlyZXR1cm4gbmV3RmlsZUNyZWF0aW9uUGFnZS5nZXRNb2RlbEZpbGUoKTsKKwl9CisKK30KZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzLnZlY3Rvci9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3ZlY3Rvci9wcmVzZW50YXRpb24vVmVjdG9yUHJvcGVydHlTdHJpbmdQcm92aWRlckFkYXB0ZXJGYWN0b3J5LmphdmEgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy52ZWN0b3Ivc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy92ZWN0b3IvcHJlc2VudGF0aW9uL1ZlY3RvclByb3BlcnR5U3RyaW5nUHJvdmlkZXJBZGFwdGVyRmFjdG9yeS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ0ODgyM2EKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy52ZWN0b3Ivc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy92ZWN0b3IvcHJlc2VudGF0aW9uL1ZlY3RvclByb3BlcnR5U3RyaW5nUHJvdmlkZXJBZGFwdGVyRmFjdG9yeS5qYXZhCkBAIC0wLDAgKzEsMTI1IEBACisvLyBFeGFtcGxlUHJvcGVydHlTdHJpbmdQcm92aWRlckFkYXB0ZXJGYWN0b3J5LmphdmEKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5wcmVzZW50YXRpb247CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNywgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqYXZhLnV0aWwuTWlzc2luZ1Jlc291cmNlRXhjZXB0aW9uOworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuQWRhcHRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRVN0cnVjdHVyYWxGZWF0dXJlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtUHJvcGVydHlEZXNjcmlwdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IudXRpbC5WZWN0b3JBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnVpLmFkYXB0ZXJzLnByb3BlcnR5c3RyaW5ncy5Qcm9wZXJ0eVN0cmluZ1Byb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udWkuYWRhcHRlcnMucHJvcGVydHlzdHJpbmdzLlByb3BlcnR5U3RyaW5nUHJvdmlkZXJBZGFwdGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udWkuYWRhcHRlcnMucHJvcGVydHlzdHJpbmdzLlByb3BlcnR5U3RyaW5nUHJvdmlkZXJBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnVpLndpemFyZHMuU3RhbmRhcmRQcm9wZXJ0eVN0cmluZ1Byb3ZpZGVyQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuSVN0YXJ0dXA7CisKKy8qKgorICogVGhpcyBjbGFzcyByZXByZXNlbnRzCisgKi8KK3B1YmxpYyBjbGFzcyBWZWN0b3JQcm9wZXJ0eVN0cmluZ1Byb3ZpZGVyQWRhcHRlckZhY3RvcnkgZXh0ZW5kcworCQlWZWN0b3JBZGFwdGVyRmFjdG9yeSBpbXBsZW1lbnRzCisJCVByb3BlcnR5U3RyaW5nUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSwgSVN0YXJ0dXAgeworCisJUHJvcGVydHlTdHJpbmdQcm92aWRlckFkYXB0ZXIgYWRhcHRlciA9IG51bGw7CisKKwkvKioKKwkgKiBEZWZhdWx0IENvbnN0cnVjdG9yCisJICovCisJcHVibGljIFZlY3RvclByb3BlcnR5U3RyaW5nUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSgpIHsKKwkJc3VwZXIoKTsKKwkJUHJvcGVydHlTdHJpbmdQcm92aWRlckFkYXB0ZXJGYWN0b3J5LklOU1RBTkNFLmFkZEFkYXB0ZXJGYWN0b3J5KHRoaXMpOworCX0KKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2UudWkuSVN0YXJ0dXAjZWFybHlTdGFydHVwKCkKKwkgKi8KKwlwdWJsaWMgdm9pZCBlYXJseVN0YXJ0dXAoKSB7CisJCS8vIE5vdGhpbmcgdG8gZG8gaGVyZS4gVGhpcyBtZXRob2QgaXMgY2FsbGVkIGFmdGVyIHRoZSBjb25zdHJ1Y3RvciBoYXMKKwkJLy8gcnVuIHdoaWNoIGlzIHRoZSBlbnRpcmUgcG9pbnQgb2YgZWFybHkgYWN0aXZhdGlvbiB3aGljaCBjYXVzZXMgdGhlCisJCS8vIGZhY3RvcnkgdG8gYmUgYWRkZWQgdG8gdGhlIFByb3BlcnR5U3RyaW5nUHJvdmlkZXJBZGFwdGVyRmFjdG9yeS5JTlNUQU5DRQorCX0KKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuaW1wbC5BZGFwdGVyRmFjdG9yeUltcGwjaXNGYWN0b3J5Rm9yVHlwZShqYXZhLmxhbmcuT2JqZWN0KQorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBib29sZWFuIGlzRmFjdG9yeUZvclR5cGUoT2JqZWN0IHR5cGUpIHsKKwkJcmV0dXJuIHN1cGVyLmlzRmFjdG9yeUZvclR5cGUodHlwZSkKKwkJCQl8fCB0eXBlID09IFByb3BlcnR5U3RyaW5nUHJvdmlkZXIuY2xhc3M7CisJfQorCisJLyoqCisJICogCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlVmVjdG9yRGlzZWFzZU1vZGVsQWRhcHRlcigpIHsKKwkJLy8gSGF2ZSB3ZSBjcmVhdGVkIG9uZSBiZWZvcmU/CisJCWlmIChhZGFwdGVyID09IG51bGwpIHsKKwkJCS8vIE5vCisJCQlhZGFwdGVyID0gbmV3ICBTdGFuZGFyZFByb3BlcnR5U3RyaW5nUHJvdmlkZXJBZGFwdGVyRmFjdG9yeS5TdGFuZGFyZFByb3BlcnR5U3RyaW5nUHJvdmlkZXJBZGFwdGVyKCkgeworCisJCQkJLyoqCisJCQkJICogQHBhcmFtIGRlc2NyaXB0b3IKKwkJCQkgKiBAcmV0dXJuIHRoZSBOTFMnZCBuYW1lIG9mIHRoZSBwcm9wZXJ0eSB0byBkaXNwbGF5IHRvIHRoZSB1c2VyCisJCQkJICovCisJCQkJcHVibGljIFN0cmluZyBnZXRQcm9wZXJ0eU5hbWUoSUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IgZGVzY3JpcHRvcikgeworCQkJCQl0cnkgeworCQkJCQkJcmV0dXJuIFZlY3RvckRpc2Vhc2VXaXphcmRNZXNzYWdlcworCQkJCQkJCQkuZ2V0U3RyaW5nKCgoRVN0cnVjdHVyYWxGZWF0dXJlKSBkZXNjcmlwdG9yCisJCQkJCQkJCQkJLmdldEZlYXR1cmUobnVsbCkpLmdldE5hbWUoKSk7CisJCQkJCX0gY2F0Y2ggKE1pc3NpbmdSZXNvdXJjZUV4Y2VwdGlvbiBlKSB7CisJCQkJCQlyZXR1cm4gc3VwZXIuZ2V0UHJvcGVydHlOYW1lKGRlc2NyaXB0b3IpOworCQkJCQl9CisJCQkJfSAvLyBnZXRQcm9wZXJ0eU5hbWUKKworCQkJCS8qKgorCQkJCSAqIEBwYXJhbSBkZXNjcmlwdG9yCisJCQkJICogQHJldHVybiB0aGUgTkxTJ2QgdG9vbCB0aXAgdGV4dCB0aGF0IGRlc2NyaWJlcyB0aGUgcHJvcGVydHkKKwkJCQkgKi8KKwkJCQlwdWJsaWMgU3RyaW5nIGdldFByb3BlcnR5VG9vbFRpcCgKKwkJCQkJCUlJdGVtUHJvcGVydHlEZXNjcmlwdG9yIGRlc2NyaXB0b3IpIHsKKwkJCQkJdHJ5IHsKKwkJCQkJCWZpbmFsIEVTdHJ1Y3R1cmFsRmVhdHVyZSBmZWF0dXJlID0gKEVTdHJ1Y3R1cmFsRmVhdHVyZSkgZGVzY3JpcHRvcgorCQkJCQkJCQkuZ2V0RmVhdHVyZShudWxsKTsKKwkJCQkJCXJldHVybiBWZWN0b3JEaXNlYXNlV2l6YXJkTWVzc2FnZXMuZ2V0U3RyaW5nKGZlYXR1cmUKKwkJCQkJCQkJLmdldE5hbWUoKQorCQkJCQkJCQkrIFRUX1NVRkZJWCk7CisJCQkJCX0gY2F0Y2ggKE1pc3NpbmdSZXNvdXJjZUV4Y2VwdGlvbiBlKSB7CisJCQkJCQlyZXR1cm4gc3VwZXIuZ2V0UHJvcGVydHlUb29sVGlwKGRlc2NyaXB0b3IpOworCQkJCQl9CisJCQkJfSAvLyBnZXRQcm9wZXJ0eVRvb2xUaXAKKworCQkJCS8qKgorCQkJCSAqIEBwYXJhbSBkZXNjcmlwdG9yCisJCQkJICogQHJldHVybiB0aGUgTkxTJ2QgdGV4dCB0aGF0IHJlcHJlc2VudHMgdGhlIHVuaXRzIG9mIHRoZQorCQkJCSAqICAgICAgICAgcHJvcGVydHkKKwkJCQkgKi8KKwkJCQlwdWJsaWMgU3RyaW5nIGdldFByb3BlcnR5VW5pdHMoCisJCQkJCQlJSXRlbVByb3BlcnR5RGVzY3JpcHRvciBkZXNjcmlwdG9yKSB7CisJCQkJCXRyeSB7CisJCQkJCQlmaW5hbCBFU3RydWN0dXJhbEZlYXR1cmUgZmVhdHVyZSA9IChFU3RydWN0dXJhbEZlYXR1cmUpIGRlc2NyaXB0b3IKKwkJCQkJCQkJLmdldEZlYXR1cmUobnVsbCk7CisJCQkJCQlyZXR1cm4gVmVjdG9yRGlzZWFzZVdpemFyZE1lc3NhZ2VzLmdldFN0cmluZyhmZWF0dXJlCisJCQkJCQkJCS5nZXROYW1lKCkKKwkJCQkJCQkJKyBVTklUX1NVRkZJWCk7CisJCQkJCX0gY2F0Y2ggKE1pc3NpbmdSZXNvdXJjZUV4Y2VwdGlvbiBlKSB7CisJCQkJCQlyZXR1cm4gc3VwZXIuZ2V0UHJvcGVydHlVbml0cyhkZXNjcmlwdG9yKTsKKwkJCQkJfQorCQkJCX0gLy8gZ2V0UHJvcGVydHlVbml0cworCQkJfTsKKwkJfSAvLyBpZiB3ZSBkaWRuJ3QgY3JlYXRlIG9uZSBiZWZvcmUKKwkJcmV0dXJuIGFkYXB0ZXI7CisJfS8vIGNyZWF0ZUV4YW1wbGVEaXNlYXNlTW9kZWxBZGFwdGVyKCkKKworfSAvLyBFeGFtcGxlUHJvcGVydHlTdHJpbmdQcm92aWRlckFkYXB0ZXJGYWN0b3J5CmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy52ZWN0b3Ivc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy92ZWN0b3IvcHJlc2VudGF0aW9uL1ZlY3RvclJlbGF0aXZlVmFsdWVQcm92aWRlckFkYXB0ZXJGYWN0b3J5LmphdmEgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy52ZWN0b3Ivc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy92ZWN0b3IvcHJlc2VudGF0aW9uL1ZlY3RvclJlbGF0aXZlVmFsdWVQcm92aWRlckFkYXB0ZXJGYWN0b3J5LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzYyM2VmZAotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzLnZlY3Rvci9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3ZlY3Rvci9wcmVzZW50YXRpb24vVmVjdG9yUmVsYXRpdmVWYWx1ZVByb3ZpZGVyQWRhcHRlckZhY3RvcnkuamF2YQpAQCAtMCwwICsxLDMyNSBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLnByZXNlbnRhdGlvbjsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAxMSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OworaW1wb3J0IGphdmEudXRpbC5MaXN0OworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuQWRhcHRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVSZWZlcmVuY2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVTdHJ1Y3R1cmFsRmVhdHVyZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5DaGFuZ2VOb3RpZmllcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5Db21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkNvbXBvc2VkQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUNoYW5nZU5vdGlmaWVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtUHJvcGVydHlEZXNjcmlwdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtUHJvcGVydHlTb3VyY2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSU5vdGlmeUNoYW5nZWRMaXN0ZW5lcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5wcm92aWRlci5Qcm9wZXJ0eVNvdXJjZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmFkYXB0ZXJzLnJlbGF0aXZldmFsdWUuUmVsYXRpdmVWYWx1ZVByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuYWRhcHRlcnMucmVsYXRpdmV2YWx1ZS5SZWxhdGl2ZVZhbHVlUHJvdmlkZXJBZGFwdGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuYWRhcHRlcnMucmVsYXRpdmV2YWx1ZS5SZWxhdGl2ZVZhbHVlUHJvdmlkZXJBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuRGlzZWFzZU1vZGVsTGFiZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLkRpc2Vhc2VNb2RlbExhYmVsVmFsdWU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQucHJvdmlkZXIuU3RhbmRhcmRSZWxhdGl2ZVZhbHVlUHJvdmlkZXJBZGFwdGVyRmFjdG9yeS5EaXNlYXNlTW9kZWxMYWJlbFZhbHVlUmVsYXRpdmVWYWx1ZVByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IucHJvdmlkZXIuVmVjdG9ySXRlbVByb3ZpZGVyQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci51dGlsLlZlY3RvckFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklTdGFydHVwOworCisvKioKKyAqIFRoaXMgY2xhc3MgaXMgYSBmYWN0b3J5IGZvciB0aGlzIG1vZGVsIHRoYXQgY3JlYXRlcworICoge0BsaW5rIFJlbGF0aXZlVmFsdWVQcm92aWRlcn0ncyBmb3IgY2xhc3NlcyBpbiB0aGUgbW9kZWwuCisgKi8KK3B1YmxpYyBjbGFzcyBWZWN0b3JSZWxhdGl2ZVZhbHVlUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSBleHRlbmRzCisJCVZlY3RvckFkYXB0ZXJGYWN0b3J5IGltcGxlbWVudHMgUmVsYXRpdmVWYWx1ZVByb3ZpZGVyQWRhcHRlckZhY3RvcnksCisJCUlTdGFydHVwIHsKKworCS8qKgorCSAqIFRoaXMga2VlcHMgdHJhY2sgb2YgdGhlIHJvb3QgYWRhcHRlciBmYWN0b3J5IHRoYXQgZGVsZWdhdGVzIHRvIHRoaXMKKwkgKiBhZGFwdGVyIGZhY3RvcnkuCisJICovCisJcHJvdGVjdGVkIENvbXBvc2VkQWRhcHRlckZhY3RvcnkgcGFyZW50QWRhcHRlckZhY3Rvcnk7CisKKwkvKioKKwkgKiBUaGlzIGlzIHVzZWQgdG8gaW1wbGVtZW50CisJICoge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklDaGFuZ2VOb3RpZmllcn0uCisJICovCisJcHJvdGVjdGVkIElDaGFuZ2VOb3RpZmllciBjaGFuZ2VOb3RpZmllciA9IG5ldyBDaGFuZ2VOb3RpZmllcigpOworCisJLyoqCisJICogVGhpcyBmYWN0b3J5IGlzIHVzZWQgdG8gY3JlYXRlIGl0ZW0gcHJvdmlkZXJzIGZvciB0aGUgYWRhcHRlZCBjbGFzc2VzLgorCSAqIFRoZSBpdGVtIHByb3ZpZGVycyBhcmUgdXNlZCBhcyBwcm9wZXJ0eSBzb3VyY2VzIHRvIGdldCB0aGUgcHJvcGVydGllcworCSAqIHRoYXQgY2FuIGhhdmUgcmVsYXRpdmUgdmFsdWVzLgorCSAqLworCXByaXZhdGUgc3RhdGljIFZlY3Rvckl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5IGl0ZW1Qcm92aWRlckZhY3Rvcnk7CisKKwkvKioKKwkgKiBDb25zdHJ1Y3RvcgorCSAqLworCXB1YmxpYyBWZWN0b3JSZWxhdGl2ZVZhbHVlUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSgpIHsKKwkJc3VwZXIoKTsKKwkJUmVsYXRpdmVWYWx1ZVByb3ZpZGVyQWRhcHRlckZhY3RvcnkuSU5TVEFOQ0UuYWRkQWRhcHRlckZhY3RvcnkodGhpcyk7CisJfSAvLyBFeHBlcmltZW50YWxSZWxhdGl2ZVZhbHVlUHJvdmlkZXJBZGFwdGVyRmFjdG9yeQorCisJLyoKKwkgKiAobm9uLUphdmFkb2MpCisJICogCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLnV0aWwuVmVjdG9yQWRhcHRlckZhY3RvcnkjCisJICogY3JlYXRlRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZUFkYXB0ZXIoKQorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZURlbmd1ZU1vZGVsSG9zdExhYmVsQWRhcHRlcigpIHsKKwkJcmV0dXJuIG5ldyBWZWN0b3JMYWJlbFJlbGF0aXZlVmFsdWVQcm92aWRlckFkYXB0ZXIoKTsKKwl9CisKKwkvKgorCSAqIChub24tSmF2YWRvYykKKwkgKiAKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IudXRpbC5WZWN0b3JBZGFwdGVyRmFjdG9yeSMKKwkgKiBjcmVhdGVEZW5ndWVNb2RlbFZlY3RvckxhYmVsVmFsdWVBZGFwdGVyKCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVEZW5ndWVNb2RlbFZlY3RvckxhYmVsQWRhcHRlcigpIHsKKwkJcmV0dXJuIG5ldyBWZWN0b3JMYWJlbFJlbGF0aXZlVmFsdWVQcm92aWRlckFkYXB0ZXIoKTsKKwl9CisJCisJLyoKKwkgKiAobm9uLUphdmFkb2MpCisJICogCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLnV0aWwuVmVjdG9yQWRhcHRlckZhY3RvcnkjCisJICogY3JlYXRlRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZUFkYXB0ZXIoKQorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZURlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVBZGFwdGVyKCkgeworCQlyZXR1cm4gbmV3IFZlY3RvckxhYmVsVmFsdWVSZWxhdGl2ZVZhbHVlUHJvdmlkZXJBZGFwdGVyKCk7CisJfQorCisJLyoKKwkgKiAobm9uLUphdmFkb2MpCisJICogCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLnV0aWwuVmVjdG9yQWRhcHRlckZhY3RvcnkjCisJICogY3JlYXRlRGVuZ3VlTW9kZWxWZWN0b3JMYWJlbFZhbHVlQWRhcHRlcigpCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlRGVuZ3VlTW9kZWxWZWN0b3JMYWJlbFZhbHVlQWRhcHRlcigpIHsKKwkJcmV0dXJuIG5ldyBWZWN0b3JMYWJlbFZhbHVlUmVsYXRpdmVWYWx1ZVByb3ZpZGVyQWRhcHRlcigpOworCX0KKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUNoYW5nZU5vdGlmaWVyI2FkZExpc3RlbmVyKG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklOb3RpZnlDaGFuZ2VkTGlzdGVuZXIpCisJICovCisJcHVibGljIHZvaWQgYWRkTGlzdGVuZXIoSU5vdGlmeUNoYW5nZWRMaXN0ZW5lciBub3RpZnlDaGFuZ2VkTGlzdGVuZXIpIHsKKwkJY2hhbmdlTm90aWZpZXIuYWRkTGlzdGVuZXIobm90aWZ5Q2hhbmdlZExpc3RlbmVyKTsKKwl9IC8vIGFkZExpc3RlbmVyCisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklDaGFuZ2VOb3RpZmllciNmaXJlTm90aWZ5Q2hhbmdlZChvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb24pCisJICovCisJcHVibGljIHZvaWQgZmlyZU5vdGlmeUNoYW5nZWQoTm90aWZpY2F0aW9uIG5vdGlmaWNhdGlvbikgeworCQljaGFuZ2VOb3RpZmllci5maXJlTm90aWZ5Q2hhbmdlZChub3RpZmljYXRpb24pOworCQlpZiAocGFyZW50QWRhcHRlckZhY3RvcnkgIT0gbnVsbCkgeworCQkJcGFyZW50QWRhcHRlckZhY3RvcnkuZmlyZU5vdGlmeUNoYW5nZWQobm90aWZpY2F0aW9uKTsKKwkJfQorCX0gLy8gZmlyZU5vdGlmeUNoYW5nZWQKKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUNoYW5nZU5vdGlmaWVyI3JlbW92ZUxpc3RlbmVyKG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklOb3RpZnlDaGFuZ2VkTGlzdGVuZXIpCisJICovCisJcHVibGljIHZvaWQgcmVtb3ZlTGlzdGVuZXIoSU5vdGlmeUNoYW5nZWRMaXN0ZW5lciBub3RpZnlDaGFuZ2VkTGlzdGVuZXIpIHsKKwkJY2hhbmdlTm90aWZpZXIucmVtb3ZlTGlzdGVuZXIobm90aWZ5Q2hhbmdlZExpc3RlbmVyKTsKKwl9IC8vIHJlbW92ZUxpc3RlbmVyCisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkNvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnkjZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCkKKwkgKi8KKwlwdWJsaWMgQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSBnZXRSb290QWRhcHRlckZhY3RvcnkoKSB7CisJCXJldHVybiBwYXJlbnRBZGFwdGVyRmFjdG9yeSA9PSBudWxsID8gdGhpcyA6IHBhcmVudEFkYXB0ZXJGYWN0b3J5CisJCQkJLmdldFJvb3RBZGFwdGVyRmFjdG9yeSgpOworCX0gLy8gZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5CisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkNvbXBvc2VhYmxlQWRhcHRlckZhY3Rvcnkjc2V0UGFyZW50QWRhcHRlckZhY3Rvcnkob3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuQ29tcG9zZWRBZGFwdGVyRmFjdG9yeSkKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRQYXJlbnRBZGFwdGVyRmFjdG9yeSgKKwkJCUNvbXBvc2VkQWRhcHRlckZhY3RvcnkgcGFyZW50QWRhcHRlckZhY3RvcnkpIHsKKwkJdGhpcy5wYXJlbnRBZGFwdGVyRmFjdG9yeSA9IHBhcmVudEFkYXB0ZXJGYWN0b3J5OworCX0gLy8gc2V0UGFyZW50QWRhcHRlckZhY3RvcnkKKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLnV0aWwuU3RhbmRhcmRBZGFwdGVyRmFjdG9yeSNpc0ZhY3RvcnlGb3JUeXBlKGphdmEubGFuZy5PYmplY3QpCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIGJvb2xlYW4gaXNGYWN0b3J5Rm9yVHlwZShPYmplY3QgdHlwZSkgeworCQlyZXR1cm4gdHlwZSA9PSBSZWxhdGl2ZVZhbHVlUHJvdmlkZXIuY2xhc3MKKwkJCQl8fCBzdXBlci5pc0ZhY3RvcnlGb3JUeXBlKHR5cGUpOworCX0gLy8gaXNGYWN0b3J5Rm9yVHlwZQorCisJLyoqCisJICogVGhpcyBkaXNwb3NlcyBhbGwgb2YgdGhlIGl0ZW0gcHJvdmlkZXJzIGNyZWF0ZWQgYnkgdGhpcyBmYWN0b3J5LgorCSAqIAorCSAqIEBzZWUgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSURpc3Bvc2FibGUjZGlzcG9zZSgpCisJICovCisJcHVibGljIHZvaWQgZGlzcG9zZSgpIHsKKwkJLy8gTm90aGluZworCX0gLy8gZGlzcG9zZQorCisJLyoqCisJICogQHJldHVybiB0aGUgaW5zdGFuY2Ugb2YgdGhlIFJlbGF0aXZlIFZhbHVlIFByb3ZpZGVyIEFkYXB0ZXIgRmFjdG9yeQorCSAqLworCXByaXZhdGUgc3RhdGljIFJlbGF0aXZlVmFsdWVQcm92aWRlckFkYXB0ZXJGYWN0b3J5IGdldFJlbGF0aXZlVmFsdWVQcm92aWRlckFkYXB0ZXJGYWN0b3J5KCkgeworCQlyZXR1cm4gUmVsYXRpdmVWYWx1ZVByb3ZpZGVyQWRhcHRlckZhY3RvcnkuSU5TVEFOQ0U7CisJfSAvLyBnZXRSZWxhdGl2ZVZhbHVlUHJvdmlkZXJBZGFwdGVyRmFjdG9yeQorCisJcHVibGljIHZvaWQgZWFybHlTdGFydHVwKCkgeworCQkvLyBEb25lCisJfQorCisJLyoqCisJICogQHJldHVybiB0aGUgaW5zdGFuY2Ugb2YgdGhlIFN0YW5kYXJkIEl0ZW0gUHJvdmlkZXIgZmFjdG9yeS4KKwkgKi8KKwlwcml2YXRlIHN0YXRpYyBWZWN0b3JJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSBnZXRJdGVtUHJvdmlkZXJGYWN0b3J5KCkgeworCQlpZiAoaXRlbVByb3ZpZGVyRmFjdG9yeSA9PSBudWxsKSB7CisJCQlpdGVtUHJvdmlkZXJGYWN0b3J5ID0gbmV3IFZlY3Rvckl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5KCk7CisJCX0KKwkJcmV0dXJuIGl0ZW1Qcm92aWRlckZhY3Rvcnk7CisJfSAvLyBnZXRJdGVtUHJvdmlkZXJGYWN0b3J5CisKKwkvKioKKwkgKiBUaGlzIGNsYXNzIGlzIGEgUmVsYXRpdmUgVmFsdWUgUHJvdmlkZXIgZm9yIFZlY3RvciBMYWJlbCBpbnN0YW5jZXMuCisJICogSXQgcHJvdmlkZXMgYSBjb2xsZWN0aW9uIG9mIHRoZSBwcm9wZXJ0aWVzIHRoYXQgY2FuIGhhdmUgcmVsYXRpdmUgdmFsdWVzCisJICogYW5kIHdpbGwgY29tcHV0ZSB0aGUgdmFsdWUgYmV0d2VlbiAwLjAgYW5kIDEuMCBmb3IgYW55IG9mIHRob3NlCisJICogcHJvcGVydGllcy4KKwkgKiAKKwkgKiBAc2VlIERpc2Vhc2VNb2RlbExhYmVsVmFsdWVSZWxhdGl2ZVZhbHVlUHJvdmlkZXIKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGNsYXNzIFZlY3RvckxhYmVsUmVsYXRpdmVWYWx1ZVByb3ZpZGVyQWRhcHRlciBleHRlbmRzCisJCQlSZWxhdGl2ZVZhbHVlUHJvdmlkZXJBZGFwdGVyIGltcGxlbWVudHMgUmVsYXRpdmVWYWx1ZVByb3ZpZGVyIHsKKworCQkvKioKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmFkYXB0ZXJzLnJlbGF0aXZldmFsdWUuUmVsYXRpdmVWYWx1ZVByb3ZpZGVyQWRhcHRlciNnZXRQcm9wZXJ0aWVzKCkKKwkJICovCisJCUBPdmVycmlkZQorCQlwdWJsaWMgTGlzdDxJSXRlbVByb3BlcnR5RGVzY3JpcHRvcj4gZ2V0UHJvcGVydGllcygpIHsKKwkJCWZpbmFsIERpc2Vhc2VNb2RlbExhYmVsIGRtbCA9IChEaXNlYXNlTW9kZWxMYWJlbCkgZ2V0VGFyZ2V0KCk7CisJCQlmaW5hbCBSZWxhdGl2ZVZhbHVlUHJvdmlkZXIgcnZwID0gKFJlbGF0aXZlVmFsdWVQcm92aWRlcikgZ2V0UmVsYXRpdmVWYWx1ZVByb3ZpZGVyQWRhcHRlckZhY3RvcnkoKQorCQkJCQkuYWRhcHQoZG1sLmdldEN1cnJlbnRWYWx1ZSgpLCBSZWxhdGl2ZVZhbHVlUHJvdmlkZXIuY2xhc3MpOworCQkJcmV0dXJuIHJ2cC5nZXRQcm9wZXJ0aWVzKCk7CisJCX0gLy8gZ2V0UHJvcGVydGllcworCisJCS8qKgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuYWRhcHRlcnMucmVsYXRpdmV2YWx1ZS5SZWxhdGl2ZVZhbHVlUHJvdmlkZXJBZGFwdGVyI2dldFJlbGF0aXZlVmFsdWUob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVTdHJ1Y3R1cmFsRmVhdHVyZSkKKwkJICovCisJCUBPdmVycmlkZQorCQlwdWJsaWMgZG91YmxlIGdldFJlbGF0aXZlVmFsdWUoRVN0cnVjdHVyYWxGZWF0dXJlIGZlYXR1cmUpIHsKKwkJCWZpbmFsIERpc2Vhc2VNb2RlbExhYmVsIGRtbCA9IChEaXNlYXNlTW9kZWxMYWJlbCkgZ2V0VGFyZ2V0KCk7CisJCQlmaW5hbCBSZWxhdGl2ZVZhbHVlUHJvdmlkZXIgcnZwID0gKFJlbGF0aXZlVmFsdWVQcm92aWRlcikgZ2V0UmVsYXRpdmVWYWx1ZVByb3ZpZGVyQWRhcHRlckZhY3RvcnkoKQorCQkJCQkuYWRhcHQoZG1sLmdldEN1cnJlbnRWYWx1ZSgpLCBSZWxhdGl2ZVZhbHVlUHJvdmlkZXIuY2xhc3MpOworCQkJcmV0dXJuIHJ2cC5nZXRSZWxhdGl2ZVZhbHVlKGZlYXR1cmUpOworCQl9IC8vIGdldFJlbGF0aXZlVmFsdWUKKwkJCisJCS8qKgorCQkgKiB0aGlzIGhlbHBlciBtZXRob2QgcmV0dXJucyB0aGUgYWJzb2x1dGUgdG90YWwgcG9wdWxhdGlvbi4KKwkJICogSXQgaXMgcmVxdWlyZWQgd2hlbmV2ZXIgd2UgbmVlZCB0byBzd2l0Y2ggYmV0d2VlbiByZWxhdGl2ZSBhbmQgYWJzb2x1dGUgdmFsdWVzCisJCSAqIEByZXR1cm4gdGhlIHRvdGFsIGN1cnJlbnQgcG9wdWxhdGlvbiBjb3VudCAoYWJzb2x1dGUpCisJCSAqLworCQlwdWJsaWMgZG91YmxlIGdldERlbm9taW5hdG9yKGZpbmFsIEVTdHJ1Y3R1cmFsRmVhdHVyZSBmZWF0dXJlKSB7CisJCQlmaW5hbCBEaXNlYXNlTW9kZWxMYWJlbCBkbWwgPSAoRGlzZWFzZU1vZGVsTGFiZWwpIGdldFRhcmdldCgpOworCQkJRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZSBkbWx2ID0gKFN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZSlkbWwuZ2V0Q3VycmVudFZhbHVlKCk7CisJCQkvL2ZpbmFsIGRvdWJsZSBwb3B1bGF0aW9uQ291bnQgPSBkbWx2LmdldFBvcHVsYXRpb25Db3VudCgpOworCQkJcmV0dXJuIGRtbHYuZ2V0UG9wdWxhdGlvbkNvdW50KCk7CisJCX0KKwkJCisJCQorCQkKKworCX0gLy8gRGlzZWFzZU1vZGVsTGFiZWxSZWxhdGl2ZVZhbHVlUHJvdmlkZXIKKwkKKwlwdWJsaWMgc3RhdGljIGNsYXNzIFZlY3RvckxhYmVsVmFsdWVSZWxhdGl2ZVZhbHVlUHJvdmlkZXJBZGFwdGVyCisJCQlleHRlbmRzIFJlbGF0aXZlVmFsdWVQcm92aWRlckFkYXB0ZXIgaW1wbGVtZW50cworCQkJUmVsYXRpdmVWYWx1ZVByb3ZpZGVyIHsKKworCQkvKioKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmFkYXB0ZXJzLnJlbGF0aXZldmFsdWUuUmVsYXRpdmVWYWx1ZVByb3ZpZGVyQWRhcHRlciNnZXRQcm9wZXJ0aWVzKCkKKwkJICovCisJCUBPdmVycmlkZQorCQlwdWJsaWMgTGlzdDxJSXRlbVByb3BlcnR5RGVzY3JpcHRvcj4gZ2V0UHJvcGVydGllcygpIHsKKwkJCWZpbmFsIExpc3Q8SUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I+IHJldFZhbHVlID0gbmV3IEFycmF5TGlzdDxJSXRlbVByb3BlcnR5RGVzY3JpcHRvcj4oKTsKKwkJCWZpbmFsIFZlY3Rvckl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5IGl0ZW1Qcm92aWRlckZhY3RvcnkgPSBnZXRJdGVtUHJvdmlkZXJGYWN0b3J5KCk7CisJCQlmaW5hbCBEaXNlYXNlTW9kZWxMYWJlbFZhbHVlIGRtbHYgPSAoRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZSkgZ2V0VGFyZ2V0KCk7CisJCQlmaW5hbCBJSXRlbVByb3BlcnR5U291cmNlIHByb3BlcnR5U291cmNlID0gKElJdGVtUHJvcGVydHlTb3VyY2UpIGl0ZW1Qcm92aWRlckZhY3RvcnkKKwkJCQkJLmFkYXB0KGRtbHYsIFByb3BlcnR5U291cmNlLmNsYXNzKTsKKwkJCWZpbmFsIExpc3Q8SUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I+IHByb3BlcnRpZXMgPSBwcm9wZXJ0eVNvdXJjZQorCQkJCQkuZ2V0UHJvcGVydHlEZXNjcmlwdG9ycyhudWxsKTsKKwkJCS8vIFRoZSBsaXN0IG9mIHByb3BlcnR5IGRlc2NyaXB0b3JzIGluY2x1ZGVzIG9uZXMgdGhhdCBkbyBub3QgaGF2ZQorCQkJLy8gcmVsYXRpdmUgdmFsdWVzLiBXZSBmaWx0ZXIgdGhvc2Ugb3V0IGhlcmUgYW5kIHJldHVybiB0aGUgcmVzdC4KKwkJCWZvciAoSUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IgZGVzY3JpcHRvciA6IHByb3BlcnRpZXMpIHsKKwkJCQkvLyBEb2VzIHRoaXMgcHJvcGVydHkgaGF2ZSBhIHJlbGF0aXZlIHZhbHVlPworCQkJCWZpbmFsIEVTdHJ1Y3R1cmFsRmVhdHVyZSBmZWF0dXJlID0gKEVTdHJ1Y3R1cmFsRmVhdHVyZSkgZGVzY3JpcHRvcgorCQkJCQkJLmdldEZlYXR1cmUobnVsbCk7CisKKwkJCQlpZiAoZmVhdHVyZSBpbnN0YW5jZW9mIEVSZWZlcmVuY2UpCisJCQkJCWNvbnRpbnVlOworCQkJCWZpbmFsIGludCBmZWF0dXJlSWQgPSBmZWF0dXJlLmdldEZlYXR1cmVJRCgpOworCisJCQkJLy8gbmV3CisJCQkJcmV0VmFsdWUuYWRkKGRlc2NyaXB0b3IpOworCQkJCS8vIE9sZAorCQkJCS8qCisJCQkJICogaWYgKCEoZmVhdHVyZUlkID09CisJCQkJICogU3RhbmRhcmRQYWNrYWdlLkRJU0VBU0VfTU9ERUxfTEFCRUxfVkFMVUVfX0JJUlRIUyB8fAorCQkJCSAqIGZlYXR1cmVJZCA9PQorCQkJCSAqIFN0YW5kYXJkUGFja2FnZS5ESVNFQVNFX01PREVMX0xBQkVMX1ZBTFVFX19ERUFUSFMgfHwKKwkJCQkgKiBmZWF0dXJlSWQgPT0KKwkJCQkgKiBTdGFuZGFyZFBhY2thZ2UuRElTRUFTRV9NT0RFTF9MQUJFTF9WQUxVRV9fRElTRUFTRV9ERUFUSFMgfHwKKwkJCQkgKiBmZWF0dXJlSWQgPT0KKwkJCQkgKiBTdGFuZGFyZFBhY2thZ2UuRElTRUFTRV9NT0RFTF9MQUJFTF9WQUxVRV9fUE9QVUxBVElPTl9DT1VOVCkpCisJCQkJICogeyAvLyBZZXMgcmV0VmFsdWUuYWRkKGRlc2NyaXB0b3IpOyB9IC8vIGlmIGhhcyByZWxhdGl2ZSB2YWx1ZQorCQkJCSAqLworCisJCQl9IC8vIGZvcgorCQkJcmV0dXJuIHJldFZhbHVlOworCQl9IC8vIGdldFByb3BlcnRpZXMKKworCQkvKioKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmFkYXB0ZXJzLnJlbGF0aXZldmFsdWUuUmVsYXRpdmVWYWx1ZVByb3ZpZGVyI2dldFJlbGF0aXZlVmFsdWUoRVN0cnVjdHVyYWxGZWF0dXJlKQorCQkgKi8KKwkJcHVibGljIGRvdWJsZSBnZXRSZWxhdGl2ZVZhbHVlKGZpbmFsIEVTdHJ1Y3R1cmFsRmVhdHVyZSBmZWF0dXJlKSB7CisJCQlmaW5hbCBEaXNlYXNlTW9kZWxMYWJlbFZhbHVlIGRtbHYgPSAoRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZSkgZ2V0VGFyZ2V0KCk7CisJCQlmaW5hbCBkb3VibGUgc3RhdGVDb3VudCA9ICgoRG91YmxlKSBkbWx2LmVHZXQoZmVhdHVyZSkpCisJCQkJCS5kb3VibGVWYWx1ZSgpOworCQkJZmluYWwgZG91YmxlIHBvcHVsYXRpb25Db3VudCA9IGRtbHYuZ2V0UG9wdWxhdGlvbkNvdW50KCk7CisJCQlmaW5hbCBkb3VibGUgcmV0VmFsdWUgPSBwb3B1bGF0aW9uQ291bnQgPD0gMC4wID8gMC4wCisJCQkJCTogKHN0YXRlQ291bnQgLyBwb3B1bGF0aW9uQ291bnQpOworCQkJcmV0dXJuIHJldFZhbHVlOworCQl9IC8vIGdldFJlbGF0aXZlVmFsdWUKKworCQkvKioKKwkJICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgZGVub21pbmF0b3Igb3Igc2NhbGUgdXNlZCB0byBjb252ZXJ0IHRvCisJCSAqIHJlbGF0aXZlIHZhbHVlcyBpbiB0aGUgcmFuZ2UgMC0xLiBGb3IgZXhhbXBsZSwgaW4gYW4gRXBpZGVtaWMKKwkJICogQ29tcGFydG1lbnQgbW9kZWwgdGhlIHN0YXRlIHZhbHVlcyBhcmUgbm9ybWFsaXplZCBieSBwb3B1bGF0aW9uLiBJdAorCQkgKiBpcyByZXF1aXJlZCB3aGVuZXZlciB3ZSBuZWVkIHRvIHN3aXRjaCBiZXR3ZWVuIHJlbGF0aXZlIGFuZCBhYnNvbHV0ZQorCQkgKiB2YWx1ZXMgb3IgY2FuIGJlIHVzZWQgdG8gY3JlYXRlIGEgbGFiZWwgc2hvd2luZyB0aGUgbWF4aW11bSBzY2FsZSBmb3IKKwkJICogYW55IHJlbGF0aXZlIHZhbHVlLgorCQkgKiAKKwkJICogQHJldHVybiB0aGUgZGVub21pbmF0b3Igb3Igc2NhbGUgdXNlZCB0byBub3JtYWxpemUgdGhlIHJlbGF0aXZlIHZhbHVlCisJCSAqLworCQlwdWJsaWMgZG91YmxlIGdldERlbm9taW5hdG9yKGZpbmFsIEVTdHJ1Y3R1cmFsRmVhdHVyZSBmZWF0dXJlKSB7CisJCQlmaW5hbCBEaXNlYXNlTW9kZWxMYWJlbFZhbHVlIGRtbHYgPSAoRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZSkgZ2V0VGFyZ2V0KCk7CisJCQkvLyBmaW5hbCBkb3VibGUgcG9wdWxhdGlvbkNvdW50ID0gZG1sdi5nZXRQb3B1bGF0aW9uQ291bnQoKTsKKwkJCXJldHVybiBkbWx2LmdldFBvcHVsYXRpb25Db3VudCgpOworCQl9CisKKwl9IC8vIERpc2Vhc2VNb2RlbExhYmVsVmFsdWVSZWxhdGl2ZVZhbHVlUHJvdmlkZXIKKworfSAvLyBTdGFuZGFyZFJlbGF0aXZlVmFsdWVQcm92aWRlckFkYXB0ZXJGYWN0b3J5CmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy52ZWN0b3Ivc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy92ZWN0b3IvcHJlc2VudGF0aW9uL3ZlY3RvcmRpc2Vhc2VtZXNzYWdlcy5wcm9wZXJ0aWVzIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMudmVjdG9yL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvdmVjdG9yL3ByZXNlbnRhdGlvbi92ZWN0b3JkaXNlYXNlbWVzc2FnZXMucHJvcGVydGllcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMjRmZTI1Ci0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMudmVjdG9yL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvdmVjdG9yL3ByZXNlbnRhdGlvbi92ZWN0b3JkaXNlYXNlbWVzc2FnZXMucHJvcGVydGllcwpAQCAtMCwwICsxLDExMSBAQAordmVjdG9yUG9wdWxhdGlvbklkZW50aWZpZXIgPSBWZWN0b3IgUG9wdWxhdGlvbiBJZGVudGlmaWVyCit2ZWN0b3JQb3B1bGF0aW9uSWRlbnRpZmllclVOSVQgPSAKK3ZlY3RvclBvcHVsYXRpb25JZGVudGlmaWVyVFQgPSBTcGVjaWZ5IHRoZSBpZGVudGlmaWVyIGZvciB0aGUgdmVjdG9yIHBvcHVsYXRpb24gCisKK2JpdGluZ1JhdGUgPSBCaXRpbmcgUmF0ZQorYml0aW5nUmF0ZVVOSVQgPSBCaXRlcyAvIFRQIChzaW5nbGUgdmVjdG9yKQorYml0aW5nUmF0ZVRUID0gUmF0ZSBvZiBiaXRpbmcgZm9yIGEgc2luZ2xlIHZlY3RvciBpbiB0aGUgdGltZSBwZXJpb2QKKworaW5mZWN0aW91c0JpdGluZ1Byb3BvcnRpb25IdW1hbiA9IEluZmVjdGlvdXMgQml0aW5nIFByb3BvcnRpb24gKGh1bWFuKQoraW5mZWN0aW91c0JpdGluZ1Byb3BvcnRpb25IdW1hblVOSVQgPSBGcmFjdGlvbgoraW5mZWN0aW91c0JpdGluZ1Byb3BvcnRpb25IdW1hblRUID0gUHJvcG9ydGlvbiBvZiBpbmZlY3Rpb3VzIGJpdGVzIG9uIGh1bWFucyB0aGF0IHByb2R1Y2VzIGEgcGF0ZW50IGluZmVjdGlvbgorCitpbmZlY3Rpb3VzQml0aW5nUHJvcG9ydGlvblZlY3RvciA9IEluZmVjdGlvdXMgQml0aW5nIFByb3BvcnRpb24gKHZlY3RvcikKK2luZmVjdGlvdXNCaXRpbmdQcm9wb3J0aW9uVmVjdG9yVU5JVCA9IEZyYWN0aW9uCitpbmZlY3Rpb3VzQml0aW5nUHJvcG9ydGlvblZlY3RvclRUID0gUHJvcG9ydGlvbiBvZiBzdXNjZXB0aWJsZSB2ZWN0b3IgYml0ZXMgb24gaW5mZWN0ZWQgaHVtYW5zIHRoYXQgcHJvZHVjZXMgYSBwYXRlbnQgaW5mZWN0aW9uCisKK3ZlY3RvckluY3ViYXRpb25SYXRlID0gVmVjdG9yIEluY3ViYXRpb24gUmF0ZQordmVjdG9ySW5jdWJhdGlvblJhdGVVTklUID0gUE0vVFAKK3ZlY3RvckluY3ViYXRpb25SYXRlVFQgPSBUaGUgaW5jdWJhdGlvbiByYXRlIGZvciB0aGUgdmVjdG9yCisKK2hvc3RJbmZlY3Rpdml0eTEgPSBJbmZlY3Rpdml0eSB0byBIb3N0IDEKK2hvc3RJbmZlY3Rpdml0eTFVTklUID0KK2hvc3RJbmZlY3Rpdml0eTFUVCA9IEluZmVjdGl2aXR5IHRvIEhvc3Qgb2YgU2Vyb3R5cGUgMQorCitob3N0SW5mZWN0aXZpdHkyID0gSW5mZWN0aXZpdHkgdG8gSG9zdCAyCitob3N0SW5mZWN0aXZpdHkyVU5JVCA9Citob3N0SW5mZWN0aXZpdHkyVFQgPSBJbmZlY3Rpdml0eSB0byBIb3N0IG9mIFNlcm90eXBlIDIKKworaG9zdEluZmVjdGl2aXR5MyA9IEluZmVjdGl2aXR5IHRvIEhvc3QgMworaG9zdEluZmVjdGl2aXR5M1VOSVQgPQoraG9zdEluZmVjdGl2aXR5M1RUID0gSW5mZWN0aXZpdHkgdG8gSG9zdCBvZiBTZXJvdHlwZSAzCisKK2hvc3RJbmZlY3Rpdml0eTQgPSBJbmZlY3Rpdml0eSB0byBIb3N0IDQKK2hvc3RJbmZlY3Rpdml0eTRVTklUID0KK2hvc3RJbmZlY3Rpdml0eTRUVCA9IEluZmVjdGl2aXR5IHRvIEhvc3Qgb2YgU2Vyb3R5cGUgNAorCitob3N0UHJpbWFyeUluY3ViYXRpb25SYXRlID0gUHJpbWFyeSBJbmN1YmF0aW9uIFJhdGUgb2YgSG9zdAoraG9zdFByaW1hcnlJbmN1YmF0aW9uUmF0ZVVOSVQgPSBQTS9UUAoraG9zdFByaW1hcnlJbmN1YmF0aW9uUmF0ZVRUID0gSW5jdWJhdGlvbiBSYXRlIGZvciBQcmltYXJ5IEluZmVjdGlvbiBvZiBIb3N0IFBvcHVsYXRpb24KKworaG9zdFByaW1hcnlSZWNvdmVyeVJhdGUgPSBQcmltYXJ5IFJlY292ZXJ5IFJhdGUgb2YgSG9zdAoraG9zdFByaW1hcnlSZWNvdmVyeVJhdGVVTklUID0gUE0vVFAKK2hvc3RQcmltYXJ5UmVjb3ZlcnlSYXRlVFQgPSBSZWNvdmVyeSBSYXRlIGZvciBQcmltYXJ5IEluZmVjdGlvbiBvZiBIb3N0IFBvcHVsYXRpb24KKworaG9zdFByaW1hcnlJbW11bml0eUxvc3NSYXRlID0gUHJpbWFyeSBJbW11bml0eSBMb3NzIFJhdGUgb2YgSG9zdAoraG9zdFByaW1hcnlJbW11bml0eUxvc3NSYXRlVU5JVCA9IFBNL1RQCitob3N0UHJpbWFyeUltbXVuaXR5TG9zc1JhdGVUVCA9IEltbXVuaXR5IExvc3MgUmF0ZSBmb3IgUHJpbWFyeSBJbmZlY3Rpb24gb2YgSG9zdCBQb3B1bGF0aW9uCisKK2hvc3RQcmltYXJ5RGVhdGhSYXRlID0gUHJpbWFyeSBEZWF0aCBSYXRlIG9mIEhvc3QKK2hvc3RQcmltYXJ5RGVhdGhSYXRlVU5JVCA9IFBNL1RQCitob3N0UHJpbWFyeURlYXRoUmF0ZVRUID0gRGVhdGggUmF0ZSBmb3IgUHJpbWFyeSBJbmZlY3Rpb24gb2YgSG9zdCBQb3B1bGF0aW9uCisKK2hvc3RBREUxID0gQURFIHRvIEhvc3QgMQoraG9zdEFERTFVTklUID0KK2hvc3RBREUxVFQgPSBBbnRpYm9keS1kZXBlbmRlbnQgZW5oYW5jZW1lbnQgZm9yIEluZmVjdGlvbnMgdG8gSG9zdCB3aXRoIFNlcm90eXBlIDEKKworaG9zdEFERTIgPSBBREUgdG8gSG9zdCAyCitob3N0QURFMlVOSVQgPQoraG9zdEFERTJUVCA9IEFudGlib2R5LWRlcGVuZGVudCBlbmhhbmNlbWVudCBmb3IgSW5mZWN0aW9ucyB0byBIb3N0IHdpdGggU2Vyb3R5cGUgMgorCitob3N0QURFMyA9IEFERSB0byBIb3N0IDMKK2hvc3RBREUzVU5JVCA9Citob3N0QURFM1RUID0gQW50aWJvZHktZGVwZW5kZW50IGVuaGFuY2VtZW50IGZvciBJbmZlY3Rpb25zIHRvIEhvc3Qgd2l0aCBTZXJvdHlwZSAzCisKK2hvc3RBREU0ID0gQURFIHRvIEhvc3QgNAoraG9zdEFERTRVTklUID0KK2hvc3RBREU0VFQgPSBBbnRpYm9keS1kZXBlbmRlbnQgZW5oYW5jZW1lbnQgZm9yIEluZmVjdGlvbnMgdG8gSG9zdCB3aXRoIFNlcm90eXBlIDQKKworaG9zdFNlY29uZGFyeUluY3ViYXRpb25SYXRlID0gU2Vjb25kYXJ5IEluY3ViYXRpb24gUmF0ZSBvZiBIb3N0Citob3N0U2Vjb25kYXJ5SW5jdWJhdGlvblJhdGVVTklUID0gUE0vVFAKK2hvc3RTZWNvbmRhcnlJbmN1YmF0aW9uUmF0ZVRUID0gSW5jdWJhdGlvbiBSYXRlIGZvciBTZWNvbmRhcnkgSW5mZWN0aW9uIG9mIEhvc3QgUG9wdWxhdGlvbgorCitob3N0U2Vjb25kYXJ5UmVjb3ZlcnlSYXRlID0gU2Vjb25kYXJ5IFJlY292ZXJ5IFJhdGUgb2YgSG9zdAoraG9zdFNlY29uZGFyeVJlY292ZXJ5UmF0ZVVOSVQgPSBQTS9UUAoraG9zdFNlY29uZGFyeVJlY292ZXJ5UmF0ZVRUID0gUmVjb3ZlcnkgUmF0ZSBmb3IgU2Vjb25kYXJ5IEluZmVjdGlvbiBvZiBIb3N0IFBvcHVsYXRpb24KKworaG9zdFNlY29uZGFyeURlYXRoUmF0ZSA9IFNlY29uZGFyeSBEZWF0aCBSYXRlIG9mIEhvc3QKK2hvc3RTZWNvbmRhcnlEZWF0aFJhdGVVTklUID0gUE0vVFAKK2hvc3RTZWNvbmRhcnlEZWF0aFJhdGVUVCA9IERlYXRoIFJhdGUgZm9yIFNlY29uZGFyeSBJbmZlY3Rpb24gb2YgSG9zdCBQb3B1bGF0aW9uCisKK3ZlY3RvckluZmVjdGl2aXR5MSA9IEluZmVjdGl2aXR5IHRvIFZlY3RvciAxCit2ZWN0b3JJbmZlY3Rpdml0eTFVTklUID0KK3ZlY3RvckluZmVjdGl2aXR5MVRUID0gSW5mZWN0aXZpdHkgdG8gVmVjdG9yIG9mIFNlcm90eXBlIDEKKwordmVjdG9ySW5mZWN0aXZpdHkyID0gSW5mZWN0aXZpdHkgdG8gVmVjdG9yIDIKK3ZlY3RvckluZmVjdGl2aXR5MlVOSVQgPQordmVjdG9ySW5mZWN0aXZpdHkyVFQgPSBJbmZlY3Rpdml0eSB0byBWZWN0b3Igb2YgU2Vyb3R5cGUgMgorCit2ZWN0b3JJbmZlY3Rpdml0eTMgPSBJbmZlY3Rpdml0eSB0byBWZWN0b3IgMwordmVjdG9ySW5mZWN0aXZpdHkzVU5JVCA9Cit2ZWN0b3JJbmZlY3Rpdml0eTNUVCA9IEluZmVjdGl2aXR5IHRvIFZlY3RvciBvZiBTZXJvdHlwZSAzCisKK3ZlY3RvckluZmVjdGl2aXR5NCA9IEluZmVjdGl2aXR5IHRvIFZlY3RvciA0Cit2ZWN0b3JJbmZlY3Rpdml0eTRVTklUID0KK3ZlY3RvckluZmVjdGl2aXR5NFRUID0gSW5mZWN0aXZpdHkgdG8gVmVjdG9yIG9mIFNlcm90eXBlIDQKKwordmVjdG9yQURFMSA9IEFERSB0byBWZWN0b3IgMQordmVjdG9yQURFMVVOSVQgPQordmVjdG9yQURFMVRUID0gQW50aWJvZHktZGVwZW5kZW50IGVuaGFuY2VtZW50IGZvciBJbmZlY3Rpb25zIHRvIFZlY3RvciB3aXRoIFNlcm90eXBlIDEKKwordmVjdG9yQURFMiA9IEFERSB0byBWZWN0b3IgMgordmVjdG9yQURFMlVOSVQgPQordmVjdG9yQURFMlRUID0gQW50aWJvZHktZGVwZW5kZW50IGVuaGFuY2VtZW50IGZvciBJbmZlY3Rpb25zIHRvIFZlY3RvciB3aXRoIFNlcm90eXBlIDIKKwordmVjdG9yQURFMyA9IEFERSB0byBWZWN0b3IgMwordmVjdG9yQURFM1VOSVQgPQordmVjdG9yQURFM1RUID0gQW50aWJvZHktZGVwZW5kZW50IGVuaGFuY2VtZW50IGZvciBJbmZlY3Rpb25zIHRvIFZlY3RvciB3aXRoIFNlcm90eXBlIDMKKwordmVjdG9yQURFNCA9IEFERSB0byBWZWN0b3IgNAordmVjdG9yQURFNFVOSVQgPQordmVjdG9yQURFNFRUID0gQW50aWJvZHktZGVwZW5kZW50IGVuaGFuY2VtZW50IGZvciBJbmZlY3Rpb25zIHRvIFZlY3RvciB3aXRoIFNlcm90eXBlIDQKZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzLy5jbGFzc3BhdGggYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy8uY2xhc3NwYXRoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMwNGU4NjEKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy8uY2xhc3NwYXRoCkBAIC0wLDAgKzEsNyBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxjbGFzc3BhdGg+CisJPGNsYXNzcGF0aGVudHJ5IGtpbmQ9InNyYyIgcGF0aD0ic3JjIi8+CisJPGNsYXNzcGF0aGVudHJ5IGtpbmQ9ImNvbiIgcGF0aD0ib3JnLmVjbGlwc2UuamR0LmxhdW5jaGluZy5KUkVfQ09OVEFJTkVSL29yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC5kZWJ1Zy51aS5sYXVuY2hlci5TdGFuZGFyZFZNVHlwZS9KMlNFLTEuNSIvPgorCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJjb24iIHBhdGg9Im9yZy5lY2xpcHNlLnBkZS5jb3JlLnJlcXVpcmVkUGx1Z2lucyIvPgorCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJvdXRwdXQiIHBhdGg9ImJpbiIvPgorPC9jbGFzc3BhdGg+CmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy8ucHJvamVjdCBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzLy5wcm9qZWN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFhZjdhZWIKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy8ucHJvamVjdApAQCAtMCwwICsxLDI4IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPHByb2plY3REZXNjcmlwdGlvbj4KKwk8bmFtZT5vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHM8L25hbWU+CisJPGNvbW1lbnQ+PC9jb21tZW50PgorCTxwcm9qZWN0cz4KKwk8L3Byb2plY3RzPgorCTxidWlsZFNwZWM+CisJCTxidWlsZENvbW1hbmQ+CisJCQk8bmFtZT5vcmcuZWNsaXBzZS5qZHQuY29yZS5qYXZhYnVpbGRlcjwvbmFtZT4KKwkJCTxhcmd1bWVudHM+CisJCQk8L2FyZ3VtZW50cz4KKwkJPC9idWlsZENvbW1hbmQ+CisJCTxidWlsZENvbW1hbmQ+CisJCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuTWFuaWZlc3RCdWlsZGVyPC9uYW1lPgorCQkJPGFyZ3VtZW50cz4KKwkJCTwvYXJndW1lbnRzPgorCQk8L2J1aWxkQ29tbWFuZD4KKwkJPGJ1aWxkQ29tbWFuZD4KKwkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5TY2hlbWFCdWlsZGVyPC9uYW1lPgorCQkJPGFyZ3VtZW50cz4KKwkJCTwvYXJndW1lbnRzPgorCQk8L2J1aWxkQ29tbWFuZD4KKwk8L2J1aWxkU3BlYz4KKwk8bmF0dXJlcz4KKwkJPG5hdHVyZT5vcmcuZWNsaXBzZS5qZHQuY29yZS5qYXZhbmF0dXJlPC9uYXR1cmU+CisJCTxuYXR1cmU+b3JnLmVjbGlwc2UucGRlLlBsdWdpbk5hdHVyZTwvbmF0dXJlPgorCTwvbmF0dXJlcz4KKzwvcHJvamVjdERlc2NyaXB0aW9uPgpkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA2YzQ5Y2UKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMKQEAgLTAsMCArMSw2OSBAQAorI01vbiBKYW4gMjEgMTI6NTE6MzMgRVNUIDIwMDgKK2VjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb2RlZ2VuLnRhcmdldFBsYXRmb3JtPTEuNQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29tcGxpYW5jZT0xLjUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmRvYy5jb21tZW50LnN1cHBvcnQ9ZW5hYmxlZAorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5hbm5vdGF0aW9uU3VwZXJJbnRlcmZhY2U9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5hc3NlcnRJZGVudGlmaWVyPWVycm9yCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmF1dG9ib3hpbmc9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5kZXByZWNhdGlvbj13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRlcHJlY2F0aW9uSW5EZXByZWNhdGVkQ29kZT1kaXNhYmxlZAorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5kZXByZWNhdGlvbldoZW5PdmVycmlkaW5nRGVwcmVjYXRlZE1ldGhvZD1kaXNhYmxlZAorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5kaXNjb3VyYWdlZFJlZmVyZW5jZT13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmVtcHR5U3RhdGVtZW50PWlnbm9yZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5lbnVtSWRlbnRpZmllcj1lcnJvcgorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5mYWxsdGhyb3VnaENhc2U9aWdub3JlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZpZWxkSGlkaW5nPWlnbm9yZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5maW5hbFBhcmFtZXRlckJvdW5kPWlnbm9yZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5maW5hbGx5QmxvY2tOb3RDb21wbGV0aW5nTm9ybWFsbHk9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5mb3JiaWRkZW5SZWZlcmVuY2U9ZXJyb3IKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaGlkZGVuQ2F0Y2hCbG9jaz13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmluY29tcGF0aWJsZU5vbkluaGVyaXRlZEludGVyZmFjZU1ldGhvZD13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmluY29tcGxldGVFbnVtU3dpdGNoPWlnbm9yZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbmRpcmVjdFN0YXRpY0FjY2Vzcz1pZ25vcmUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW52YWxpZEphdmFkb2M9aWdub3JlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmludmFsaWRKYXZhZG9jVGFncz1lbmFibGVkCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmludmFsaWRKYXZhZG9jVGFnc0RlcHJlY2F0ZWRSZWY9ZW5hYmxlZAorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbnZhbGlkSmF2YWRvY1RhZ3NOb3RWaXNpYmxlUmVmPWVuYWJsZWQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW52YWxpZEphdmFkb2NUYWdzVmlzaWJpbGl0eT1wdWJsaWMKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubG9jYWxWYXJpYWJsZUhpZGluZz1pZ25vcmUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWV0aG9kV2l0aENvbnN0cnVjdG9yTmFtZT13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdEZXByZWNhdGVkQW5ub3RhdGlvbj13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdKYXZhZG9jQ29tbWVudHM9aWdub3JlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdKYXZhZG9jQ29tbWVudHNPdmVycmlkaW5nPWVuYWJsZWQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0phdmFkb2NDb21tZW50c1Zpc2liaWxpdHk9cHVibGljCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdKYXZhZG9jVGFncz1pZ25vcmUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0phdmFkb2NUYWdzT3ZlcnJpZGluZz1lbmFibGVkCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdKYXZhZG9jVGFnc1Zpc2liaWxpdHk9cHVibGljCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdPdmVycmlkZUFubm90YXRpb249aWdub3JlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdTZXJpYWxWZXJzaW9uPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubm9FZmZlY3RBc3NpZ25tZW50PXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubm9JbXBsaWNpdFN0cmluZ0NvbnZlcnNpb249d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5ub25FeHRlcm5hbGl6ZWRTdHJpbmdMaXRlcmFsPWlnbm9yZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5udWxsUmVmZXJlbmNlPWlnbm9yZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5vdmVycmlkaW5nUGFja2FnZURlZmF1bHRNZXRob2Q9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5wYXJhbWV0ZXJBc3NpZ25tZW50PWlnbm9yZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5wb3NzaWJsZUFjY2lkZW50YWxCb29sZWFuQXNzaWdubWVudD13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnJhd1R5cGVSZWZlcmVuY2U9aWdub3JlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnNwZWNpYWxQYXJhbWV0ZXJIaWRpbmdGaWVsZD1kaXNhYmxlZAorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5zdGF0aWNBY2Nlc3NSZWNlaXZlcj13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnN1cHByZXNzV2FybmluZ3M9ZW5hYmxlZAorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5zeW50aGV0aWNBY2Nlc3NFbXVsYXRpb249aWdub3JlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnR5cGVQYXJhbWV0ZXJIaWRpbmc9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bmNoZWNrZWRUeXBlT3BlcmF0aW9uPWlnbm9yZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bmRvY3VtZW50ZWRFbXB0eUJsb2NrPWlnbm9yZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bmhhbmRsZWRXYXJuaW5nVG9rZW49d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bm5lY2Vzc2FyeUVsc2U9aWdub3JlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVubmVjZXNzYXJ5VHlwZUNoZWNrPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5xdWFsaWZpZWRGaWVsZEFjY2Vzcz1pZ25vcmUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkRGVjbGFyZWRUaHJvd25FeGNlcHRpb249d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWREZWNsYXJlZFRocm93bkV4Y2VwdGlvbldoZW5PdmVycmlkaW5nPWVuYWJsZWQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkSW1wb3J0PWlnbm9yZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRMYWJlbD13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZExvY2FsPWlnbm9yZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRQYXJhbWV0ZXI9aWdub3JlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZFBhcmFtZXRlcldoZW5JbXBsZW1lbnRpbmdBYnN0cmFjdD1lbmFibGVkCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZFBhcmFtZXRlcldoZW5PdmVycmlkaW5nQ29uY3JldGU9ZW5hYmxlZAorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRQcml2YXRlTWVtYmVyPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udmFyYXJnc0FyZ3VtZW50TmVlZENhc3Q9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuc291cmNlPTEuNQpkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC51aS5wcmVmcyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQudWkucHJlZnMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODZjYWE1MAotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQudWkucHJlZnMKQEAgLTAsMCArMSw1MCBAQAorI1dlZCBPY3QgMjQgMTQ6MTQ6NTUgRURUIDIwMDcKK2NsZWFudXAuYWRkX2RlZmF1bHRfc2VyaWFsX3ZlcnNpb25faWQ9dHJ1ZQorY2xlYW51cC5hZGRfZ2VuZXJhdGVkX3NlcmlhbF92ZXJzaW9uX2lkPWZhbHNlCitjbGVhbnVwLmFkZF9taXNzaW5nX2Fubm90YXRpb25zPXRydWUKK2NsZWFudXAuYWRkX21pc3NpbmdfZGVwcmVjYXRlZF9hbm5vdGF0aW9ucz10cnVlCitjbGVhbnVwLmFkZF9taXNzaW5nX25sc190YWdzPWZhbHNlCitjbGVhbnVwLmFkZF9taXNzaW5nX292ZXJyaWRlX2Fubm90YXRpb25zPXRydWUKK2NsZWFudXAuYWRkX3NlcmlhbF92ZXJzaW9uX2lkPWZhbHNlCitjbGVhbnVwLmFsd2F5c191c2VfYmxvY2tzPXRydWUKK2NsZWFudXAuYWx3YXlzX3VzZV9wYXJlbnRoZXNlc19pbl9leHByZXNzaW9ucz10cnVlCitjbGVhbnVwLmFsd2F5c191c2VfdGhpc19mb3Jfbm9uX3N0YXRpY19maWVsZF9hY2Nlc3M9ZmFsc2UKK2NsZWFudXAuYWx3YXlzX3VzZV90aGlzX2Zvcl9ub25fc3RhdGljX21ldGhvZF9hY2Nlc3M9ZmFsc2UKK2NsZWFudXAuY29udmVydF90b19lbmhhbmNlZF9mb3JfbG9vcD10cnVlCitjbGVhbnVwLmZvcm1hdF9zb3VyY2VfY29kZT10cnVlCitjbGVhbnVwLm1ha2VfbG9jYWxfdmFyaWFibGVfZmluYWw9dHJ1ZQorY2xlYW51cC5tYWtlX3BhcmFtZXRlcnNfZmluYWw9dHJ1ZQorY2xlYW51cC5tYWtlX3ByaXZhdGVfZmllbGRzX2ZpbmFsPXRydWUKK2NsZWFudXAubWFrZV92YXJpYWJsZV9kZWNsYXJhdGlvbnNfZmluYWw9dHJ1ZQorY2xlYW51cC5uZXZlcl91c2VfYmxvY2tzPWZhbHNlCitjbGVhbnVwLm5ldmVyX3VzZV9wYXJlbnRoZXNlc19pbl9leHByZXNzaW9ucz1mYWxzZQorY2xlYW51cC5vcmdhbml6ZV9pbXBvcnRzPXRydWUKK2NsZWFudXAucXVhbGlmeV9zdGF0aWNfZmllbGRfYWNjZXNzZXNfd2l0aF9kZWNsYXJpbmdfY2xhc3M9ZmFsc2UKK2NsZWFudXAucXVhbGlmeV9zdGF0aWNfbWVtYmVyX2FjY2Vzc2VzX3Rocm91Z2hfaW5zdGFuY2VzX3dpdGhfZGVjbGFyaW5nX2NsYXNzPXRydWUKK2NsZWFudXAucXVhbGlmeV9zdGF0aWNfbWVtYmVyX2FjY2Vzc2VzX3Rocm91Z2hfc3VidHlwZXNfd2l0aF9kZWNsYXJpbmdfY2xhc3M9dHJ1ZQorY2xlYW51cC5xdWFsaWZ5X3N0YXRpY19tZW1iZXJfYWNjZXNzZXNfd2l0aF9kZWNsYXJpbmdfY2xhc3M9dHJ1ZQorY2xlYW51cC5xdWFsaWZ5X3N0YXRpY19tZXRob2RfYWNjZXNzZXNfd2l0aF9kZWNsYXJpbmdfY2xhc3M9ZmFsc2UKK2NsZWFudXAucmVtb3ZlX3ByaXZhdGVfY29uc3RydWN0b3JzPXRydWUKK2NsZWFudXAucmVtb3ZlX3RyYWlsaW5nX3doaXRlc3BhY2VzPXRydWUKK2NsZWFudXAucmVtb3ZlX3RyYWlsaW5nX3doaXRlc3BhY2VzX2FsbD10cnVlCitjbGVhbnVwLnJlbW92ZV90cmFpbGluZ193aGl0ZXNwYWNlc19pZ25vcmVfZW1wdHk9ZmFsc2UKK2NsZWFudXAucmVtb3ZlX3VubmVjZXNzYXJ5X2Nhc3RzPXRydWUKK2NsZWFudXAucmVtb3ZlX3VubmVjZXNzYXJ5X25sc190YWdzPXRydWUKK2NsZWFudXAucmVtb3ZlX3VudXNlZF9pbXBvcnRzPXRydWUKK2NsZWFudXAucmVtb3ZlX3VudXNlZF9sb2NhbF92YXJpYWJsZXM9dHJ1ZQorY2xlYW51cC5yZW1vdmVfdW51c2VkX3ByaXZhdGVfZmllbGRzPXRydWUKK2NsZWFudXAucmVtb3ZlX3VudXNlZF9wcml2YXRlX21lbWJlcnM9dHJ1ZQorY2xlYW51cC5yZW1vdmVfdW51c2VkX3ByaXZhdGVfbWV0aG9kcz10cnVlCitjbGVhbnVwLnJlbW92ZV91bnVzZWRfcHJpdmF0ZV90eXBlcz10cnVlCitjbGVhbnVwLnNvcnRfbWVtYmVycz1mYWxzZQorY2xlYW51cC5zb3J0X21lbWJlcnNfYWxsPWZhbHNlCitjbGVhbnVwLnVzZV9ibG9ja3M9dHJ1ZQorY2xlYW51cC51c2VfYmxvY2tzX29ubHlfZm9yX3JldHVybl9hbmRfdGhyb3c9ZmFsc2UKK2NsZWFudXAudXNlX3BhcmVudGhlc2VzX2luX2V4cHJlc3Npb25zPWZhbHNlCitjbGVhbnVwLnVzZV90aGlzX2Zvcl9ub25fc3RhdGljX2ZpZWxkX2FjY2Vzcz1mYWxzZQorY2xlYW51cC51c2VfdGhpc19mb3Jfbm9uX3N0YXRpY19maWVsZF9hY2Nlc3Nfb25seV9pZl9uZWNlc3Nhcnk9dHJ1ZQorY2xlYW51cC51c2VfdGhpc19mb3Jfbm9uX3N0YXRpY19tZXRob2RfYWNjZXNzPWZhbHNlCitjbGVhbnVwLnVzZV90aGlzX2Zvcl9ub25fc3RhdGljX21ldGhvZF9hY2Nlc3Nfb25seV9pZl9uZWNlc3Nhcnk9dHJ1ZQorY2xlYW51cF9wcm9maWxlPV9jbGVhbnVwCitjbGVhbnVwX3NldHRpbmdzX3ZlcnNpb249MgorZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzL01FVEEtSU5GL01BTklGRVNULk1GIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMvTUVUQS1JTkYvTUFOSUZFU1QuTUYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDlmM2NhMwotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzL01FVEEtSU5GL01BTklGRVNULk1GCkBAIC0wLDAgKzEsMjQgQEAKK01hbmlmZXN0LVZlcnNpb246IDEuMAorQnVuZGxlLU1hbmlmZXN0VmVyc2lvbjogMgorQnVuZGxlLU5hbWU6ICVwbHVnaW5OYW1lCitCdW5kbGUtU3ltYm9saWNOYW1lOiBvcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHM7c2luZ2xldG9uOj10cnVlCitCdW5kbGUtVmVyc2lvbjogMS4yLjEKK0J1bmRsZS1DbGFzc1BhdGg6IC4KK0J1bmRsZS1BY3RpdmF0b3I6IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5wcmVzZW50YXRpb24uRGlzZWFzZW1vZGVsc0VkaXRvclBsdWdpbiRJbXBsZW1lbnRhdGlvbgorQnVuZGxlLVZlbmRvcjogJXByb3ZpZGVyTmFtZQorQnVuZGxlLUxvY2FsaXphdGlvbjogcGx1Z2luCitFeHBvcnQtUGFja2FnZTogb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLnByZXNlbnRhdGlvbiwKKyBvcmcuZWNsaXBzZS5zdGVtLnVpLmFkYXB0ZXJzLmRpc2Vhc2Vtb2RlbHByb3BlcnR5ZWRpdG9yLAorIG9yZy5lY2xpcHNlLnN0ZW0udWkuYWRhcHRlcnMubmV3bW9kaWZpZXJwYWdlLAorIG9yZy5lY2xpcHNlLnN0ZW0udWkud2l6YXJkcworUmVxdWlyZS1CdW5kbGU6IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVsczt2aXNpYmlsaXR5Oj1yZWV4cG9ydCwKKyBvcmcuZWNsaXBzZS5zdGVtLnVpLAorIG9yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHksCisgb3JnLmVjbGlwc2UudWkubmF2aWdhdG9yLAorIG9yZy5lY2xpcHNlLnVpLm5hdmlnYXRvci5yZXNvdXJjZXMsCisgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLmVkaXQsCisgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLAorIG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMsCisgb3JnLmVjbGlwc2UuY29yZS5leHByZXNzaW9ucztidW5kbGUtdmVyc2lvbj0iMy40LjIwMCIKK0J1bmRsZS1BY3RpdmF0aW9uUG9saWN5OiBsYXp5CitCdW5kbGUtUmVxdWlyZWRFeGVjdXRpb25FbnZpcm9ubWVudDogSjJTRS0xLjUKZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzL2J1aWxkLnByb3BlcnRpZXMgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy9idWlsZC5wcm9wZXJ0aWVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYwYWY3MDIKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy9idWlsZC5wcm9wZXJ0aWVzCkBAIC0wLDAgKzEsMTkgQEAKKyMgPGNvcHlyaWdodD4KKyMgPC9jb3B5cmlnaHQ+CisjCisjICRJZCQKKworYmluLmluY2x1ZGVzID0gLixcCisgICAgICAgICAgICAgICBpY29ucy8sXAorICAgICAgICAgICAgICAgTUVUQS1JTkYvLFwKKyAgICAgICAgICAgICAgIHBsdWdpbi54bWwsXAorICAgICAgICAgICAgICAgcGx1Z2luLnByb3BlcnRpZXMsXAorICAgICAgICAgICAgICAgYmluLyxcCisgICAgICAgICAgICAgICBub3RpY2UuaHRtbCxcCisgICAgICAgICAgICAgICBlcGwtdjEwLmh0bWwsXAorICAgICAgICAgICAgICAgcGx1Z2luX2RlLnByb3BlcnRpZXMsXAorICAgICAgICAgICAgICAgcGx1Z2luX2tyLnByb3BlcnRpZXMsXAorICAgICAgICAgICAgICAgcGx1Z2luX3poLnByb3BlcnRpZXMKK2phcnMuY29tcGlsZS5vcmRlciA9IC4KK3NvdXJjZS4uID0gc3JjLworb3V0cHV0Li4gPSBiaW4vCmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy9lcGwtdjEwLmh0bWwgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy9lcGwtdjEwLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWQ0YjE5NgotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzL2VwbC12MTAuaHRtbApAQCAtMCwwICsxLDMyOCBAQAorPGh0bWwgeG1sbnM6bz0idXJuOnNjaGVtYXMtbWljcm9zb2Z0LWNvbTpvZmZpY2U6b2ZmaWNlIgoreG1sbnM6dz0idXJuOnNjaGVtYXMtbWljcm9zb2Z0LWNvbTpvZmZpY2U6d29yZCIKK3htbG5zPSJodHRwOi8vd3d3LnczLm9yZy9UUi9SRUMtaHRtbDQwIj4KKworPGhlYWQ+Cis8bWV0YSBodHRwLWVxdWl2PUNvbnRlbnQtVHlwZSBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9d2luZG93cy0xMjUyIj4KKzxtZXRhIG5hbWU9UHJvZ0lkIGNvbnRlbnQ9V29yZC5Eb2N1bWVudD4KKzxtZXRhIG5hbWU9R2VuZXJhdG9yIGNvbnRlbnQ9Ik1pY3Jvc29mdCBXb3JkIDkiPgorPG1ldGEgbmFtZT1PcmlnaW5hdG9yIGNvbnRlbnQ9Ik1pY3Jvc29mdCBXb3JkIDkiPgorPGxpbmsgcmVsPUZpbGUtTGlzdAoraHJlZj0iLi9FY2xpcHNlJTIwRVBMJTIwMjAwM18xMV8xMCUyMEZpbmFsX2ZpbGVzL2ZpbGVsaXN0LnhtbCI+Cis8dGl0bGU+RWNsaXBzZSBQdWJsaWMgTGljZW5zZSAtIFZlcnNpb24gMS4wPC90aXRsZT4KKzwhLS1baWYgZ3RlIG1zbyA5XT48eG1sPgorIDxvOkRvY3VtZW50UHJvcGVydGllcz4KKyAgPG86UmV2aXNpb24+MjwvbzpSZXZpc2lvbj4KKyAgPG86VG90YWxUaW1lPjM8L286VG90YWxUaW1lPgorICA8bzpDcmVhdGVkPjIwMDQtMDMtMDVUMjM6MDM6MDBaPC9vOkNyZWF0ZWQ+CisgIDxvOkxhc3RTYXZlZD4yMDA0LTAzLTA1VDIzOjAzOjAwWjwvbzpMYXN0U2F2ZWQ+CisgIDxvOlBhZ2VzPjQ8L286UGFnZXM+CisgIDxvOldvcmRzPjE2MjY8L286V29yZHM+CisgIDxvOkNoYXJhY3RlcnM+OTI3MDwvbzpDaGFyYWN0ZXJzPgorICAgPG86TGluZXM+Nzc8L286TGluZXM+CisgIDxvOlBhcmFncmFwaHM+MTg8L286UGFyYWdyYXBocz4KKyAgPG86Q2hhcmFjdGVyc1dpdGhTcGFjZXM+MTEzODQ8L286Q2hhcmFjdGVyc1dpdGhTcGFjZXM+CisgIDxvOlZlcnNpb24+OS40NDAyPC9vOlZlcnNpb24+CisgPC9vOkRvY3VtZW50UHJvcGVydGllcz4KKzwveG1sPjwhW2VuZGlmXS0tPjwhLS1baWYgZ3RlIG1zbyA5XT48eG1sPgorIDx3OldvcmREb2N1bWVudD4KKyAgPHc6VHJhY2tSZXZpc2lvbnMvPgorIDwvdzpXb3JkRG9jdW1lbnQ+Cis8L3htbD48IVtlbmRpZl0tLT4KKzxzdHlsZT4KKzwhLS0KKyAvKiBGb250IERlZmluaXRpb25zICovCitAZm9udC1mYWNlCisJe2ZvbnQtZmFtaWx5OlRhaG9tYTsKKwlwYW5vc2UtMToyIDExIDYgNCAzIDUgNCA0IDIgNDsKKwltc28tZm9udC1jaGFyc2V0OjA7CisJbXNvLWdlbmVyaWMtZm9udC1mYW1pbHk6c3dpc3M7CisJbXNvLWZvbnQtcGl0Y2g6dmFyaWFibGU7CisJbXNvLWZvbnQtc2lnbmF0dXJlOjU1MzY3OTQ5NSAtMjE0NzQ4MzY0OCA4IDAgNjYwNDcgMDt9CisgLyogU3R5bGUgRGVmaW5pdGlvbnMgKi8KK3AuTXNvTm9ybWFsLCBsaS5Nc29Ob3JtYWwsIGRpdi5Nc29Ob3JtYWwKKwl7bXNvLXN0eWxlLXBhcmVudDoiIjsKKwltYXJnaW46MGluOworCW1hcmdpbi1ib3R0b206LjAwMDFwdDsKKwltc28tcGFnaW5hdGlvbjp3aWRvdy1vcnBoYW47CisJZm9udC1zaXplOjEyLjBwdDsKKwlmb250LWZhbWlseToiVGltZXMgTmV3IFJvbWFuIjsKKwltc28tZmFyZWFzdC1mb250LWZhbWlseToiVGltZXMgTmV3IFJvbWFuIjt9CitwCisJe21hcmdpbi1yaWdodDowaW47CisJbXNvLW1hcmdpbi10b3AtYWx0OmF1dG87CisJbXNvLW1hcmdpbi1ib3R0b20tYWx0OmF1dG87CisJbWFyZ2luLWxlZnQ6MGluOworCW1zby1wYWdpbmF0aW9uOndpZG93LW9ycGhhbjsKKwlmb250LXNpemU6MTIuMHB0OworCWZvbnQtZmFtaWx5OiJUaW1lcyBOZXcgUm9tYW4iOworCW1zby1mYXJlYXN0LWZvbnQtZmFtaWx5OiJUaW1lcyBOZXcgUm9tYW4iO30KK3AuQmFsbG9vblRleHQsIGxpLkJhbGxvb25UZXh0LCBkaXYuQmFsbG9vblRleHQKKwl7bXNvLXN0eWxlLW5hbWU6IkJhbGxvb24gVGV4dCI7CisJbWFyZ2luOjBpbjsKKwltYXJnaW4tYm90dG9tOi4wMDAxcHQ7CisJbXNvLXBhZ2luYXRpb246d2lkb3ctb3JwaGFuOworCWZvbnQtc2l6ZTo4LjBwdDsKKwlmb250LWZhbWlseTpUYWhvbWE7CisJbXNvLWZhcmVhc3QtZm9udC1mYW1pbHk6IlRpbWVzIE5ldyBSb21hbiI7fQorQHBhZ2UgU2VjdGlvbjEKKwl7c2l6ZTo4LjVpbiAxMS4waW47CisJbWFyZ2luOjEuMGluIDEuMjVpbiAxLjBpbiAxLjI1aW47CisJbXNvLWhlYWRlci1tYXJnaW46LjVpbjsKKwltc28tZm9vdGVyLW1hcmdpbjouNWluOworCW1zby1wYXBlci1zb3VyY2U6MDt9CitkaXYuU2VjdGlvbjEKKwl7cGFnZTpTZWN0aW9uMTt9CistLT4KKzwvc3R5bGU+Cis8L2hlYWQ+CisKKzxib2R5IGxhbmc9RU4tVVMgc3R5bGU9J3RhYi1pbnRlcnZhbDouNWluJz4KKworPGRpdiBjbGFzcz1TZWN0aW9uMT4KKworPHAgYWxpZ249Y2VudGVyIHN0eWxlPSd0ZXh0LWFsaWduOmNlbnRlcic+PGI+RWNsaXBzZSBQdWJsaWMgTGljZW5zZSAtIHYgMS4wPC9iPgorPC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+VEhFIEFDQ09NUEFOWUlORyBQUk9HUkFNIElTIFBST1ZJREVEIFVOREVSCitUSEUgVEVSTVMgT0YgVEhJUyBFQ0xJUFNFIFBVQkxJQyBMSUNFTlNFICgmcXVvdDtBR1JFRU1FTlQmcXVvdDspLiBBTlkgVVNFLAorUkVQUk9EVUNUSU9OIE9SIERJU1RSSUJVVElPTiBPRiBUSEUgUFJPR1JBTSBDT05TVElUVVRFUyBSRUNJUElFTlQnUyBBQ0NFUFRBTkNFCitPRiBUSElTIEFHUkVFTUVOVC48L3NwYW4+IDwvcD4KKworPHA+PGI+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPjEuIERFRklOSVRJT05TPC9zcGFuPjwvYj4gPC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+JnF1b3Q7Q29udHJpYnV0aW9uJnF1b3Q7IG1lYW5zOjwvc3Bhbj4gPC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5hKQoraW4gdGhlIGNhc2Ugb2YgdGhlIGluaXRpYWwgQ29udHJpYnV0b3IsIHRoZSBpbml0aWFsIGNvZGUgYW5kIGRvY3VtZW50YXRpb24KK2Rpc3RyaWJ1dGVkIHVuZGVyIHRoaXMgQWdyZWVtZW50LCBhbmQ8YnIgY2xlYXI9bGVmdD4KK2IpIGluIHRoZSBjYXNlIG9mIGVhY2ggc3Vic2VxdWVudCBDb250cmlidXRvcjo8L3NwYW4+PC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5pKQorY2hhbmdlcyB0byB0aGUgUHJvZ3JhbSwgYW5kPC9zcGFuPjwvcD4KKworPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+aWkpCithZGRpdGlvbnMgdG8gdGhlIFByb2dyYW07PC9zcGFuPjwvcD4KKworPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+d2hlcmUKK3N1Y2ggY2hhbmdlcyBhbmQvb3IgYWRkaXRpb25zIHRvIHRoZSBQcm9ncmFtIG9yaWdpbmF0ZSBmcm9tIGFuZCBhcmUgZGlzdHJpYnV0ZWQKK2J5IHRoYXQgcGFydGljdWxhciBDb250cmlidXRvci4gQSBDb250cmlidXRpb24gJ29yaWdpbmF0ZXMnIGZyb20gYSBDb250cmlidXRvcgoraWYgaXQgd2FzIGFkZGVkIHRvIHRoZSBQcm9ncmFtIGJ5IHN1Y2ggQ29udHJpYnV0b3IgaXRzZWxmIG9yIGFueW9uZSBhY3Rpbmcgb24KK3N1Y2ggQ29udHJpYnV0b3IncyBiZWhhbGYuIENvbnRyaWJ1dGlvbnMgZG8gbm90IGluY2x1ZGUgYWRkaXRpb25zIHRvIHRoZQorUHJvZ3JhbSB3aGljaDogKGkpIGFyZSBzZXBhcmF0ZSBtb2R1bGVzIG9mIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIGluIGNvbmp1bmN0aW9uCit3aXRoIHRoZSBQcm9ncmFtIHVuZGVyIHRoZWlyIG93biBsaWNlbnNlIGFncmVlbWVudCwgYW5kIChpaSkgYXJlIG5vdCBkZXJpdmF0aXZlCit3b3JrcyBvZiB0aGUgUHJvZ3JhbS4gPC9zcGFuPjwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPiZxdW90O0NvbnRyaWJ1dG9yJnF1b3Q7IG1lYW5zIGFueSBwZXJzb24gb3IKK2VudGl0eSB0aGF0IGRpc3RyaWJ1dGVzIHRoZSBQcm9ncmFtLjwvc3Bhbj4gPC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+JnF1b3Q7TGljZW5zZWQgUGF0ZW50cyAmcXVvdDsgbWVhbiBwYXRlbnQKK2NsYWltcyBsaWNlbnNhYmxlIGJ5IGEgQ29udHJpYnV0b3Igd2hpY2ggYXJlIG5lY2Vzc2FyaWx5IGluZnJpbmdlZCBieSB0aGUgdXNlCitvciBzYWxlIG9mIGl0cyBDb250cmlidXRpb24gYWxvbmUgb3Igd2hlbiBjb21iaW5lZCB3aXRoIHRoZSBQcm9ncmFtLiA8L3NwYW4+PC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+JnF1b3Q7UHJvZ3JhbSZxdW90OyBtZWFucyB0aGUgQ29udHJpYnV0aW9ucworZGlzdHJpYnV0ZWQgaW4gYWNjb3JkYW5jZSB3aXRoIHRoaXMgQWdyZWVtZW50Ljwvc3Bhbj4gPC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+JnF1b3Q7UmVjaXBpZW50JnF1b3Q7IG1lYW5zIGFueW9uZSB3aG8KK3JlY2VpdmVzIHRoZSBQcm9ncmFtIHVuZGVyIHRoaXMgQWdyZWVtZW50LCBpbmNsdWRpbmcgYWxsIENvbnRyaWJ1dG9ycy48L3NwYW4+IDwvcD4KKworPHA+PGI+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPjIuIEdSQU5UIE9GIFJJR0hUUzwvc3Bhbj48L2I+IDwvcD4KKworPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YSkKK1N1YmplY3QgdG8gdGhlIHRlcm1zIG9mIHRoaXMgQWdyZWVtZW50LCBlYWNoIENvbnRyaWJ1dG9yIGhlcmVieSBncmFudHMgUmVjaXBpZW50CithIG5vbi1leGNsdXNpdmUsIHdvcmxkd2lkZSwgcm95YWx0eS1mcmVlIGNvcHlyaWdodCBsaWNlbnNlIHRvPHNwYW4KK3N0eWxlPSdjb2xvcjpyZWQnPiA8L3NwYW4+cmVwcm9kdWNlLCBwcmVwYXJlIGRlcml2YXRpdmUgd29ya3Mgb2YsIHB1YmxpY2x5CitkaXNwbGF5LCBwdWJsaWNseSBwZXJmb3JtLCBkaXN0cmlidXRlIGFuZCBzdWJsaWNlbnNlIHRoZSBDb250cmlidXRpb24gb2Ygc3VjaAorQ29udHJpYnV0b3IsIGlmIGFueSwgYW5kIHN1Y2ggZGVyaXZhdGl2ZSB3b3JrcywgaW4gc291cmNlIGNvZGUgYW5kIG9iamVjdCBjb2RlCitmb3JtLjwvc3Bhbj48L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmIpCitTdWJqZWN0IHRvIHRoZSB0ZXJtcyBvZiB0aGlzIEFncmVlbWVudCwgZWFjaCBDb250cmlidXRvciBoZXJlYnkgZ3JhbnRzCitSZWNpcGllbnQgYSBub24tZXhjbHVzaXZlLCB3b3JsZHdpZGUsPHNwYW4gc3R5bGU9J2NvbG9yOmdyZWVuJz4gPC9zcGFuPnJveWFsdHktZnJlZQorcGF0ZW50IGxpY2Vuc2UgdW5kZXIgTGljZW5zZWQgUGF0ZW50cyB0byBtYWtlLCB1c2UsIHNlbGwsIG9mZmVyIHRvIHNlbGwsIGltcG9ydAorYW5kIG90aGVyd2lzZSB0cmFuc2ZlciB0aGUgQ29udHJpYnV0aW9uIG9mIHN1Y2ggQ29udHJpYnV0b3IsIGlmIGFueSwgaW4gc291cmNlCitjb2RlIGFuZCBvYmplY3QgY29kZSBmb3JtLiBUaGlzIHBhdGVudCBsaWNlbnNlIHNoYWxsIGFwcGx5IHRvIHRoZSBjb21iaW5hdGlvbgorb2YgdGhlIENvbnRyaWJ1dGlvbiBhbmQgdGhlIFByb2dyYW0gaWYsIGF0IHRoZSB0aW1lIHRoZSBDb250cmlidXRpb24gaXMgYWRkZWQKK2J5IHRoZSBDb250cmlidXRvciwgc3VjaCBhZGRpdGlvbiBvZiB0aGUgQ29udHJpYnV0aW9uIGNhdXNlcyBzdWNoIGNvbWJpbmF0aW9uCit0byBiZSBjb3ZlcmVkIGJ5IHRoZSBMaWNlbnNlZCBQYXRlbnRzLiBUaGUgcGF0ZW50IGxpY2Vuc2Ugc2hhbGwgbm90IGFwcGx5IHRvCithbnkgb3RoZXIgY29tYmluYXRpb25zIHdoaWNoIGluY2x1ZGUgdGhlIENvbnRyaWJ1dGlvbi4gTm8gaGFyZHdhcmUgcGVyIHNlIGlzCitsaWNlbnNlZCBoZXJldW5kZXIuIDwvc3Bhbj48L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmMpCitSZWNpcGllbnQgdW5kZXJzdGFuZHMgdGhhdCBhbHRob3VnaCBlYWNoIENvbnRyaWJ1dG9yIGdyYW50cyB0aGUgbGljZW5zZXMgdG8gaXRzCitDb250cmlidXRpb25zIHNldCBmb3J0aCBoZXJlaW4sIG5vIGFzc3VyYW5jZXMgYXJlIHByb3ZpZGVkIGJ5IGFueSBDb250cmlidXRvcgordGhhdCB0aGUgUHJvZ3JhbSBkb2VzIG5vdCBpbmZyaW5nZSB0aGUgcGF0ZW50IG9yIG90aGVyIGludGVsbGVjdHVhbCBwcm9wZXJ0eQorcmlnaHRzIG9mIGFueSBvdGhlciBlbnRpdHkuIEVhY2ggQ29udHJpYnV0b3IgZGlzY2xhaW1zIGFueSBsaWFiaWxpdHkgdG8gUmVjaXBpZW50Citmb3IgY2xhaW1zIGJyb3VnaHQgYnkgYW55IG90aGVyIGVudGl0eSBiYXNlZCBvbiBpbmZyaW5nZW1lbnQgb2YgaW50ZWxsZWN0dWFsCitwcm9wZXJ0eSByaWdodHMgb3Igb3RoZXJ3aXNlLiBBcyBhIGNvbmRpdGlvbiB0byBleGVyY2lzaW5nIHRoZSByaWdodHMgYW5kCitsaWNlbnNlcyBncmFudGVkIGhlcmV1bmRlciwgZWFjaCBSZWNpcGllbnQgaGVyZWJ5IGFzc3VtZXMgc29sZSByZXNwb25zaWJpbGl0eQordG8gc2VjdXJlIGFueSBvdGhlciBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIG5lZWRlZCwgaWYgYW55LiBGb3IgZXhhbXBsZSwKK2lmIGEgdGhpcmQgcGFydHkgcGF0ZW50IGxpY2Vuc2UgaXMgcmVxdWlyZWQgdG8gYWxsb3cgUmVjaXBpZW50IHRvIGRpc3RyaWJ1dGUKK3RoZSBQcm9ncmFtLCBpdCBpcyBSZWNpcGllbnQncyByZXNwb25zaWJpbGl0eSB0byBhY3F1aXJlIHRoYXQgbGljZW5zZSBiZWZvcmUKK2Rpc3RyaWJ1dGluZyB0aGUgUHJvZ3JhbS48L3NwYW4+PC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5kKQorRWFjaCBDb250cmlidXRvciByZXByZXNlbnRzIHRoYXQgdG8gaXRzIGtub3dsZWRnZSBpdCBoYXMgc3VmZmljaWVudCBjb3B5cmlnaHQKK3JpZ2h0cyBpbiBpdHMgQ29udHJpYnV0aW9uLCBpZiBhbnksIHRvIGdyYW50IHRoZSBjb3B5cmlnaHQgbGljZW5zZSBzZXQgZm9ydGggaW4KK3RoaXMgQWdyZWVtZW50LiA8L3NwYW4+PC9wPgorCis8cD48Yj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+My4gUkVRVUlSRU1FTlRTPC9zcGFuPjwvYj4gPC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+QSBDb250cmlidXRvciBtYXkgY2hvb3NlIHRvIGRpc3RyaWJ1dGUgdGhlCitQcm9ncmFtIGluIG9iamVjdCBjb2RlIGZvcm0gdW5kZXIgaXRzIG93biBsaWNlbnNlIGFncmVlbWVudCwgcHJvdmlkZWQgdGhhdDo8L3NwYW4+Cis8L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmEpCitpdCBjb21wbGllcyB3aXRoIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGlzIEFncmVlbWVudDsgYW5kPC9zcGFuPjwvcD4KKworPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YikKK2l0cyBsaWNlbnNlIGFncmVlbWVudDo8L3NwYW4+PC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5pKQorZWZmZWN0aXZlbHkgZGlzY2xhaW1zIG9uIGJlaGFsZiBvZiBhbGwgQ29udHJpYnV0b3JzIGFsbCB3YXJyYW50aWVzIGFuZAorY29uZGl0aW9ucywgZXhwcmVzcyBhbmQgaW1wbGllZCwgaW5jbHVkaW5nIHdhcnJhbnRpZXMgb3IgY29uZGl0aW9ucyBvZiB0aXRsZQorYW5kIG5vbi1pbmZyaW5nZW1lbnQsIGFuZCBpbXBsaWVkIHdhcnJhbnRpZXMgb3IgY29uZGl0aW9ucyBvZiBtZXJjaGFudGFiaWxpdHkKK2FuZCBmaXRuZXNzIGZvciBhIHBhcnRpY3VsYXIgcHVycG9zZTsgPC9zcGFuPjwvcD4KKworPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+aWkpCitlZmZlY3RpdmVseSBleGNsdWRlcyBvbiBiZWhhbGYgb2YgYWxsIENvbnRyaWJ1dG9ycyBhbGwgbGlhYmlsaXR5IGZvciBkYW1hZ2VzLAoraW5jbHVkaW5nIGRpcmVjdCwgaW5kaXJlY3QsIHNwZWNpYWwsIGluY2lkZW50YWwgYW5kIGNvbnNlcXVlbnRpYWwgZGFtYWdlcywgc3VjaAorYXMgbG9zdCBwcm9maXRzOyA8L3NwYW4+PC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5paWkpCitzdGF0ZXMgdGhhdCBhbnkgcHJvdmlzaW9ucyB3aGljaCBkaWZmZXIgZnJvbSB0aGlzIEFncmVlbWVudCBhcmUgb2ZmZXJlZCBieSB0aGF0CitDb250cmlidXRvciBhbG9uZSBhbmQgbm90IGJ5IGFueSBvdGhlciBwYXJ0eTsgYW5kPC9zcGFuPjwvcD4KKworPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+aXYpCitzdGF0ZXMgdGhhdCBzb3VyY2UgY29kZSBmb3IgdGhlIFByb2dyYW0gaXMgYXZhaWxhYmxlIGZyb20gc3VjaCBDb250cmlidXRvciwgYW5kCitpbmZvcm1zIGxpY2Vuc2VlcyBob3cgdG8gb2J0YWluIGl0IGluIGEgcmVhc29uYWJsZSBtYW5uZXIgb24gb3IgdGhyb3VnaCBhCittZWRpdW0gY3VzdG9tYXJpbHkgdXNlZCBmb3Igc29mdHdhcmUgZXhjaGFuZ2UuPHNwYW4gc3R5bGU9J2NvbG9yOmJsdWUnPiA8L3NwYW4+PC9zcGFuPjwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPldoZW4gdGhlIFByb2dyYW0gaXMgbWFkZSBhdmFpbGFibGUgaW4gc291cmNlCitjb2RlIGZvcm06PC9zcGFuPiA8L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmEpCitpdCBtdXN0IGJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoaXMgQWdyZWVtZW50OyBhbmQgPC9zcGFuPjwvcD4KKworPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YikgYQorY29weSBvZiB0aGlzIEFncmVlbWVudCBtdXN0IGJlIGluY2x1ZGVkIHdpdGggZWFjaCBjb3B5IG9mIHRoZSBQcm9ncmFtLiA8L3NwYW4+PC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+Q29udHJpYnV0b3JzIG1heSBub3QgcmVtb3ZlIG9yIGFsdGVyIGFueQorY29weXJpZ2h0IG5vdGljZXMgY29udGFpbmVkIHdpdGhpbiB0aGUgUHJvZ3JhbS4gPC9zcGFuPjwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkVhY2ggQ29udHJpYnV0b3IgbXVzdCBpZGVudGlmeSBpdHNlbGYgYXMgdGhlCitvcmlnaW5hdG9yIG9mIGl0cyBDb250cmlidXRpb24sIGlmIGFueSwgaW4gYSBtYW5uZXIgdGhhdCByZWFzb25hYmx5IGFsbG93cworc3Vic2VxdWVudCBSZWNpcGllbnRzIHRvIGlkZW50aWZ5IHRoZSBvcmlnaW5hdG9yIG9mIHRoZSBDb250cmlidXRpb24uIDwvc3Bhbj48L3A+CisKKzxwPjxiPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz40LiBDT01NRVJDSUFMIERJU1RSSUJVVElPTjwvc3Bhbj48L2I+IDwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkNvbW1lcmNpYWwgZGlzdHJpYnV0b3JzIG9mIHNvZnR3YXJlIG1heQorYWNjZXB0IGNlcnRhaW4gcmVzcG9uc2liaWxpdGllcyB3aXRoIHJlc3BlY3QgdG8gZW5kIHVzZXJzLCBidXNpbmVzcyBwYXJ0bmVycworYW5kIHRoZSBsaWtlLiBXaGlsZSB0aGlzIGxpY2Vuc2UgaXMgaW50ZW5kZWQgdG8gZmFjaWxpdGF0ZSB0aGUgY29tbWVyY2lhbCB1c2UKK29mIHRoZSBQcm9ncmFtLCB0aGUgQ29udHJpYnV0b3Igd2hvIGluY2x1ZGVzIHRoZSBQcm9ncmFtIGluIGEgY29tbWVyY2lhbAorcHJvZHVjdCBvZmZlcmluZyBzaG91bGQgZG8gc28gaW4gYSBtYW5uZXIgd2hpY2ggZG9lcyBub3QgY3JlYXRlIHBvdGVudGlhbAorbGlhYmlsaXR5IGZvciBvdGhlciBDb250cmlidXRvcnMuIFRoZXJlZm9yZSwgaWYgYSBDb250cmlidXRvciBpbmNsdWRlcyB0aGUKK1Byb2dyYW0gaW4gYSBjb21tZXJjaWFsIHByb2R1Y3Qgb2ZmZXJpbmcsIHN1Y2ggQ29udHJpYnV0b3IgKCZxdW90O0NvbW1lcmNpYWwKK0NvbnRyaWJ1dG9yJnF1b3Q7KSBoZXJlYnkgYWdyZWVzIHRvIGRlZmVuZCBhbmQgaW5kZW1uaWZ5IGV2ZXJ5IG90aGVyCitDb250cmlidXRvciAoJnF1b3Q7SW5kZW1uaWZpZWQgQ29udHJpYnV0b3ImcXVvdDspIGFnYWluc3QgYW55IGxvc3NlcywgZGFtYWdlcyBhbmQKK2Nvc3RzIChjb2xsZWN0aXZlbHkgJnF1b3Q7TG9zc2VzJnF1b3Q7KSBhcmlzaW5nIGZyb20gY2xhaW1zLCBsYXdzdWl0cyBhbmQgb3RoZXIKK2xlZ2FsIGFjdGlvbnMgYnJvdWdodCBieSBhIHRoaXJkIHBhcnR5IGFnYWluc3QgdGhlIEluZGVtbmlmaWVkIENvbnRyaWJ1dG9yIHRvCit0aGUgZXh0ZW50IGNhdXNlZCBieSB0aGUgYWN0cyBvciBvbWlzc2lvbnMgb2Ygc3VjaCBDb21tZXJjaWFsIENvbnRyaWJ1dG9yIGluCitjb25uZWN0aW9uIHdpdGggaXRzIGRpc3RyaWJ1dGlvbiBvZiB0aGUgUHJvZ3JhbSBpbiBhIGNvbW1lcmNpYWwgcHJvZHVjdAorb2ZmZXJpbmcuIFRoZSBvYmxpZ2F0aW9ucyBpbiB0aGlzIHNlY3Rpb24gZG8gbm90IGFwcGx5IHRvIGFueSBjbGFpbXMgb3IgTG9zc2VzCityZWxhdGluZyB0byBhbnkgYWN0dWFsIG9yIGFsbGVnZWQgaW50ZWxsZWN0dWFsIHByb3BlcnR5IGluZnJpbmdlbWVudC4gSW4gb3JkZXIKK3RvIHF1YWxpZnksIGFuIEluZGVtbmlmaWVkIENvbnRyaWJ1dG9yIG11c3Q6IGEpIHByb21wdGx5IG5vdGlmeSB0aGUgQ29tbWVyY2lhbAorQ29udHJpYnV0b3IgaW4gd3JpdGluZyBvZiBzdWNoIGNsYWltLCBhbmQgYikgYWxsb3cgdGhlIENvbW1lcmNpYWwgQ29udHJpYnV0b3IKK3RvIGNvbnRyb2wsIGFuZCBjb29wZXJhdGUgd2l0aCB0aGUgQ29tbWVyY2lhbCBDb250cmlidXRvciBpbiwgdGhlIGRlZmVuc2UgYW5kCithbnkgcmVsYXRlZCBzZXR0bGVtZW50IG5lZ290aWF0aW9ucy4gVGhlIEluZGVtbmlmaWVkIENvbnRyaWJ1dG9yIG1heSBwYXJ0aWNpcGF0ZQoraW4gYW55IHN1Y2ggY2xhaW0gYXQgaXRzIG93biBleHBlbnNlLjwvc3Bhbj4gPC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+Rm9yIGV4YW1wbGUsIGEgQ29udHJpYnV0b3IgbWlnaHQgaW5jbHVkZSB0aGUKK1Byb2dyYW0gaW4gYSBjb21tZXJjaWFsIHByb2R1Y3Qgb2ZmZXJpbmcsIFByb2R1Y3QgWC4gVGhhdCBDb250cmlidXRvciBpcyB0aGVuIGEKK0NvbW1lcmNpYWwgQ29udHJpYnV0b3IuIElmIHRoYXQgQ29tbWVyY2lhbCBDb250cmlidXRvciB0aGVuIG1ha2VzIHBlcmZvcm1hbmNlCitjbGFpbXMsIG9yIG9mZmVycyB3YXJyYW50aWVzIHJlbGF0ZWQgdG8gUHJvZHVjdCBYLCB0aG9zZSBwZXJmb3JtYW5jZSBjbGFpbXMgYW5kCit3YXJyYW50aWVzIGFyZSBzdWNoIENvbW1lcmNpYWwgQ29udHJpYnV0b3IncyByZXNwb25zaWJpbGl0eSBhbG9uZS4gVW5kZXIgdGhpcworc2VjdGlvbiwgdGhlIENvbW1lcmNpYWwgQ29udHJpYnV0b3Igd291bGQgaGF2ZSB0byBkZWZlbmQgY2xhaW1zIGFnYWluc3QgdGhlCitvdGhlciBDb250cmlidXRvcnMgcmVsYXRlZCB0byB0aG9zZSBwZXJmb3JtYW5jZSBjbGFpbXMgYW5kIHdhcnJhbnRpZXMsIGFuZCBpZiBhCitjb3VydCByZXF1aXJlcyBhbnkgb3RoZXIgQ29udHJpYnV0b3IgdG8gcGF5IGFueSBkYW1hZ2VzIGFzIGEgcmVzdWx0LCB0aGUKK0NvbW1lcmNpYWwgQ29udHJpYnV0b3IgbXVzdCBwYXkgdGhvc2UgZGFtYWdlcy48L3NwYW4+IDwvcD4KKworPHA+PGI+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPjUuIE5PIFdBUlJBTlRZPC9zcGFuPjwvYj4gPC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+RVhDRVBUIEFTIEVYUFJFU1NMWSBTRVQgRk9SVEggSU4gVEhJUworQUdSRUVNRU5ULCBUSEUgUFJPR1JBTSBJUyBQUk9WSURFRCBPTiBBTiAmcXVvdDtBUyBJUyZxdW90OyBCQVNJUywgV0lUSE9VVAorV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBFSVRIRVIgRVhQUkVTUyBPUiBJTVBMSUVEIElOQ0xVRElORywKK1dJVEhPVVQgTElNSVRBVElPTiwgQU5ZIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBUSVRMRSwgTk9OLUlORlJJTkdFTUVOVCwKK01FUkNIQU5UQUJJTElUWSBPUiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gRWFjaCBSZWNpcGllbnQgaXMgc29sZWx5CityZXNwb25zaWJsZSBmb3IgZGV0ZXJtaW5pbmcgdGhlIGFwcHJvcHJpYXRlbmVzcyBvZiB1c2luZyBhbmQgZGlzdHJpYnV0aW5nIHRoZQorUHJvZ3JhbSBhbmQgYXNzdW1lcyBhbGwgcmlza3MgYXNzb2NpYXRlZCB3aXRoIGl0cyBleGVyY2lzZSBvZiByaWdodHMgdW5kZXIgdGhpcworQWdyZWVtZW50ICwgaW5jbHVkaW5nIGJ1dCBub3QgbGltaXRlZCB0byB0aGUgcmlza3MgYW5kIGNvc3RzIG9mIHByb2dyYW0gZXJyb3JzLAorY29tcGxpYW5jZSB3aXRoIGFwcGxpY2FibGUgbGF3cywgZGFtYWdlIHRvIG9yIGxvc3Mgb2YgZGF0YSwgcHJvZ3JhbXMgb3IKK2VxdWlwbWVudCwgYW5kIHVuYXZhaWxhYmlsaXR5IG9yIGludGVycnVwdGlvbiBvZiBvcGVyYXRpb25zLiA8L3NwYW4+PC9wPgorCis8cD48Yj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+Ni4gRElTQ0xBSU1FUiBPRiBMSUFCSUxJVFk8L3NwYW4+PC9iPiA8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5FWENFUFQgQVMgRVhQUkVTU0xZIFNFVCBGT1JUSCBJTiBUSElTCitBR1JFRU1FTlQsIE5FSVRIRVIgUkVDSVBJRU5UIE5PUiBBTlkgQ09OVFJJQlVUT1JTIFNIQUxMIEhBVkUgQU5ZIExJQUJJTElUWSBGT1IKK0FOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworKElOQ0xVRElORyBXSVRIT1VUIExJTUlUQVRJT04gTE9TVCBQUk9GSVRTKSwgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKK09GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HCitORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9SIERJU1RSSUJVVElPTiBPRgorVEhFIFBST0dSQU0gT1IgVEhFIEVYRVJDSVNFIE9GIEFOWSBSSUdIVFMgR1JBTlRFRCBIRVJFVU5ERVIsIEVWRU4gSUYgQURWSVNFRCBPRgorVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFUy48L3NwYW4+IDwvcD4KKworPHA+PGI+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPjcuIEdFTkVSQUw8L3NwYW4+PC9iPiA8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5JZiBhbnkgcHJvdmlzaW9uIG9mIHRoaXMgQWdyZWVtZW50IGlzIGludmFsaWQKK29yIHVuZW5mb3JjZWFibGUgdW5kZXIgYXBwbGljYWJsZSBsYXcsIGl0IHNoYWxsIG5vdCBhZmZlY3QgdGhlIHZhbGlkaXR5IG9yCitlbmZvcmNlYWJpbGl0eSBvZiB0aGUgcmVtYWluZGVyIG9mIHRoZSB0ZXJtcyBvZiB0aGlzIEFncmVlbWVudCwgYW5kIHdpdGhvdXQKK2Z1cnRoZXIgYWN0aW9uIGJ5IHRoZSBwYXJ0aWVzIGhlcmV0bywgc3VjaCBwcm92aXNpb24gc2hhbGwgYmUgcmVmb3JtZWQgdG8gdGhlCittaW5pbXVtIGV4dGVudCBuZWNlc3NhcnkgdG8gbWFrZSBzdWNoIHByb3Zpc2lvbiB2YWxpZCBhbmQgZW5mb3JjZWFibGUuPC9zcGFuPiA8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5JZiBSZWNpcGllbnQgaW5zdGl0dXRlcyBwYXRlbnQgbGl0aWdhdGlvbgorYWdhaW5zdCBhbnkgZW50aXR5IChpbmNsdWRpbmcgYSBjcm9zcy1jbGFpbSBvciBjb3VudGVyY2xhaW0gaW4gYSBsYXdzdWl0KQorYWxsZWdpbmcgdGhhdCB0aGUgUHJvZ3JhbSBpdHNlbGYgKGV4Y2x1ZGluZyBjb21iaW5hdGlvbnMgb2YgdGhlIFByb2dyYW0gd2l0aAorb3RoZXIgc29mdHdhcmUgb3IgaGFyZHdhcmUpIGluZnJpbmdlcyBzdWNoIFJlY2lwaWVudCdzIHBhdGVudChzKSwgdGhlbiBzdWNoCitSZWNpcGllbnQncyByaWdodHMgZ3JhbnRlZCB1bmRlciBTZWN0aW9uIDIoYikgc2hhbGwgdGVybWluYXRlIGFzIG9mIHRoZSBkYXRlCitzdWNoIGxpdGlnYXRpb24gaXMgZmlsZWQuIDwvc3Bhbj48L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5BbGwgUmVjaXBpZW50J3MgcmlnaHRzIHVuZGVyIHRoaXMgQWdyZWVtZW50CitzaGFsbCB0ZXJtaW5hdGUgaWYgaXQgZmFpbHMgdG8gY29tcGx5IHdpdGggYW55IG9mIHRoZSBtYXRlcmlhbCB0ZXJtcyBvcgorY29uZGl0aW9ucyBvZiB0aGlzIEFncmVlbWVudCBhbmQgZG9lcyBub3QgY3VyZSBzdWNoIGZhaWx1cmUgaW4gYSByZWFzb25hYmxlCitwZXJpb2Qgb2YgdGltZSBhZnRlciBiZWNvbWluZyBhd2FyZSBvZiBzdWNoIG5vbmNvbXBsaWFuY2UuIElmIGFsbCBSZWNpcGllbnQncworcmlnaHRzIHVuZGVyIHRoaXMgQWdyZWVtZW50IHRlcm1pbmF0ZSwgUmVjaXBpZW50IGFncmVlcyB0byBjZWFzZSB1c2UgYW5kCitkaXN0cmlidXRpb24gb2YgdGhlIFByb2dyYW0gYXMgc29vbiBhcyByZWFzb25hYmx5IHByYWN0aWNhYmxlLiBIb3dldmVyLAorUmVjaXBpZW50J3Mgb2JsaWdhdGlvbnMgdW5kZXIgdGhpcyBBZ3JlZW1lbnQgYW5kIGFueSBsaWNlbnNlcyBncmFudGVkIGJ5CitSZWNpcGllbnQgcmVsYXRpbmcgdG8gdGhlIFByb2dyYW0gc2hhbGwgY29udGludWUgYW5kIHN1cnZpdmUuIDwvc3Bhbj48L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5FdmVyeW9uZSBpcyBwZXJtaXR0ZWQgdG8gY29weSBhbmQgZGlzdHJpYnV0ZQorY29waWVzIG9mIHRoaXMgQWdyZWVtZW50LCBidXQgaW4gb3JkZXIgdG8gYXZvaWQgaW5jb25zaXN0ZW5jeSB0aGUgQWdyZWVtZW50IGlzCitjb3B5cmlnaHRlZCBhbmQgbWF5IG9ubHkgYmUgbW9kaWZpZWQgaW4gdGhlIGZvbGxvd2luZyBtYW5uZXIuIFRoZSBBZ3JlZW1lbnQKK1N0ZXdhcmQgcmVzZXJ2ZXMgdGhlIHJpZ2h0IHRvIHB1Ymxpc2ggbmV3IHZlcnNpb25zIChpbmNsdWRpbmcgcmV2aXNpb25zKSBvZgordGhpcyBBZ3JlZW1lbnQgZnJvbSB0aW1lIHRvIHRpbWUuIE5vIG9uZSBvdGhlciB0aGFuIHRoZSBBZ3JlZW1lbnQgU3Rld2FyZCBoYXMKK3RoZSByaWdodCB0byBtb2RpZnkgdGhpcyBBZ3JlZW1lbnQuIFRoZSBFY2xpcHNlIEZvdW5kYXRpb24gaXMgdGhlIGluaXRpYWwKK0FncmVlbWVudCBTdGV3YXJkLiBUaGUgRWNsaXBzZSBGb3VuZGF0aW9uIG1heSBhc3NpZ24gdGhlIHJlc3BvbnNpYmlsaXR5IHRvCitzZXJ2ZSBhcyB0aGUgQWdyZWVtZW50IFN0ZXdhcmQgdG8gYSBzdWl0YWJsZSBzZXBhcmF0ZSBlbnRpdHkuIEVhY2ggbmV3IHZlcnNpb24KK29mIHRoZSBBZ3JlZW1lbnQgd2lsbCBiZSBnaXZlbiBhIGRpc3Rpbmd1aXNoaW5nIHZlcnNpb24gbnVtYmVyLiBUaGUgUHJvZ3JhbQorKGluY2x1ZGluZyBDb250cmlidXRpb25zKSBtYXkgYWx3YXlzIGJlIGRpc3RyaWJ1dGVkIHN1YmplY3QgdG8gdGhlIHZlcnNpb24gb2YKK3RoZSBBZ3JlZW1lbnQgdW5kZXIgd2hpY2ggaXQgd2FzIHJlY2VpdmVkLiBJbiBhZGRpdGlvbiwgYWZ0ZXIgYSBuZXcgdmVyc2lvbiBvZgordGhlIEFncmVlbWVudCBpcyBwdWJsaXNoZWQsIENvbnRyaWJ1dG9yIG1heSBlbGVjdCB0byBkaXN0cmlidXRlIHRoZSBQcm9ncmFtCisoaW5jbHVkaW5nIGl0cyBDb250cmlidXRpb25zKSB1bmRlciB0aGUgbmV3IHZlcnNpb24uIEV4Y2VwdCBhcyBleHByZXNzbHkgc3RhdGVkCitpbiBTZWN0aW9ucyAyKGEpIGFuZCAyKGIpIGFib3ZlLCBSZWNpcGllbnQgcmVjZWl2ZXMgbm8gcmlnaHRzIG9yIGxpY2Vuc2VzIHRvCit0aGUgaW50ZWxsZWN0dWFsIHByb3BlcnR5IG9mIGFueSBDb250cmlidXRvciB1bmRlciB0aGlzIEFncmVlbWVudCwgd2hldGhlcgorZXhwcmVzc2x5LCBieSBpbXBsaWNhdGlvbiwgZXN0b3BwZWwgb3Igb3RoZXJ3aXNlLiBBbGwgcmlnaHRzIGluIHRoZSBQcm9ncmFtIG5vdAorZXhwcmVzc2x5IGdyYW50ZWQgdW5kZXIgdGhpcyBBZ3JlZW1lbnQgYXJlIHJlc2VydmVkLjwvc3Bhbj4gPC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+VGhpcyBBZ3JlZW1lbnQgaXMgZ292ZXJuZWQgYnkgdGhlIGxhd3Mgb2YgdGhlCitTdGF0ZSBvZiBOZXcgWW9yayBhbmQgdGhlIGludGVsbGVjdHVhbCBwcm9wZXJ0eSBsYXdzIG9mIHRoZSBVbml0ZWQgU3RhdGVzIG9mCitBbWVyaWNhLiBObyBwYXJ0eSB0byB0aGlzIEFncmVlbWVudCB3aWxsIGJyaW5nIGEgbGVnYWwgYWN0aW9uIHVuZGVyIHRoaXMKK0FncmVlbWVudCBtb3JlIHRoYW4gb25lIHllYXIgYWZ0ZXIgdGhlIGNhdXNlIG9mIGFjdGlvbiBhcm9zZS4gRWFjaCBwYXJ0eSB3YWl2ZXMKK2l0cyByaWdodHMgdG8gYSBqdXJ5IHRyaWFsIGluIGFueSByZXN1bHRpbmcgbGl0aWdhdGlvbi48L3NwYW4+IDwvcD4KKworPHAgY2xhc3M9TXNvTm9ybWFsPjwhW2lmICFzdXBwb3J0RW1wdHlQYXJhc10+Jm5ic3A7PCFbZW5kaWZdPjxvOnA+PC9vOnA+PC9wPgorCis8L2Rpdj4KKworPC9ib2R5PgorCis8L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMvaWNvbnMvZnVsbC9jdXN0b20xNi9EZWNvcmF0b3IuZ2lmIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMvaWNvbnMvZnVsbC9jdXN0b20xNi9EZWNvcmF0b3IuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNjMzc2YWQKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy9pY29ucy9mdWxsL2N1c3RvbTE2L0RlY29yYXRvci5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMvaWNvbnMvZnVsbC9jdXN0b20xNi9Jbml0aWFsaXplci5naWYgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy9pY29ucy9mdWxsL2N1c3RvbTE2L0luaXRpYWxpemVyLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40OTgzNjRmCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMvaWNvbnMvZnVsbC9jdXN0b20xNi9Jbml0aWFsaXplci5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMvaWNvbnMvZnVsbC9jdXN0b20xNi9kaXNlYXNlLmdpZiBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzL2ljb25zL2Z1bGwvY3VzdG9tMTYvZGlzZWFzZS5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGU0MDRlNAotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzL2ljb25zL2Z1bGwvY3VzdG9tMTYvZGlzZWFzZS5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMvaWNvbnMvZnVsbC9jdXN0b20xNi9pbmZlY3Rvci5naWYgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy9pY29ucy9mdWxsL2N1c3RvbTE2L2luZmVjdG9yLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MWJiNjg2Ci0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMvaWNvbnMvZnVsbC9jdXN0b20xNi9pbmZlY3Rvci5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMvaWNvbnMvZnVsbC9jdXN0b20xNi9yZWNvcmRlZGNzdi5naWYgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy9pY29ucy9mdWxsL2N1c3RvbTE2L3JlY29yZGVkY3N2LmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YjE2MjQ0Ci0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMvaWNvbnMvZnVsbC9jdXN0b20xNi9yZWNvcmRlZGNzdi5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMvaWNvbnMvZnVsbC9vYmoxNi9EaXNlYXNlcHJlZGljYXRlc01vZGVsRmlsZS5naWYgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy9pY29ucy9mdWxsL29iajE2L0Rpc2Vhc2VwcmVkaWNhdGVzTW9kZWxGaWxlLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMmVjNzViCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMvaWNvbnMvZnVsbC9vYmoxNi9EaXNlYXNlcHJlZGljYXRlc01vZGVsRmlsZS5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMvaWNvbnMvZnVsbC9vYmoxNi9TdGFuZGFyZE1vZGVsRmlsZS5naWYgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy9pY29ucy9mdWxsL29iajE2L1N0YW5kYXJkTW9kZWxGaWxlLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYWUyZjhjCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMvaWNvbnMvZnVsbC9vYmoxNi9TdGFuZGFyZE1vZGVsRmlsZS5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMvaWNvbnMvZnVsbC93aXpiYW4vTmV3RGlzZWFzZXByZWRpY2F0ZXMuZ2lmIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMvaWNvbnMvZnVsbC93aXpiYW4vTmV3RGlzZWFzZXByZWRpY2F0ZXMuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI1OTcwNGMKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy9pY29ucy9mdWxsL3dpemJhbi9OZXdEaXNlYXNlcHJlZGljYXRlcy5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMvaWNvbnMvZnVsbC93aXpiYW4vTmV3U3RhbmRhcmQuZ2lmIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMvaWNvbnMvZnVsbC93aXpiYW4vTmV3U3RhbmRhcmQuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI1ZjMxMmQKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy9pY29ucy9mdWxsL3dpemJhbi9OZXdTdGFuZGFyZC5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMvbm90aWNlLmh0bWwgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy9ub3RpY2UuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNmFmOTY2Ci0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMvbm90aWNlLmh0bWwKQEAgLTAsMCArMSw3OSBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMC8vRU4iPgorPGh0bWw+Cis8aGVhZD4KKzxtZXRhIGh0dHAtZXF1aXY9Q29udGVudC1UeXBlIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1pc28tODg1OS0xIj4KKzx0aXRsZT5FY2xpcHNlLm9yZyBTb2Z0d2FyZSBVc2VyIEFncmVlbWVudDwvdGl0bGU+Cis8L2hlYWQ+CisKKzxib2R5IGxhbmc9IkVOLVVTIiBsaW5rPWJsdWUgdmxpbms9cHVycGxlPgorPGgyPkVjbGlwc2UgRm91bmRhdGlvbiBTb2Z0d2FyZSBVc2VyIEFncmVlbWVudDwvaDI+Cis8cD5NYXJjaCAxNywgMjAwNTwvcD4KKworPGgzPlVzYWdlIE9mIENvbnRlbnQ8L2gzPgorCis8cD5USEUgRUNMSVBTRSBGT1VOREFUSU9OIE1BS0VTIEFWQUlMQUJMRSBTT0ZUV0FSRSwgRE9DVU1FTlRBVElPTiwgSU5GT1JNQVRJT04gQU5EL09SIE9USEVSIE1BVEVSSUFMUyBGT1IgT1BFTiBTT1VSQ0UgUFJPSkVDVFMKKyAgIChDT0xMRUNUSVZFTFkgJnF1b3Q7Q09OVEVOVCZxdW90OykuICBVU0UgT0YgVEhFIENPTlRFTlQgSVMgR09WRVJORUQgQlkgVEhFIFRFUk1TIEFORCBDT05ESVRJT05TIE9GIFRISVMgQUdSRUVNRU5UIEFORC9PUiBUSEUgVEVSTVMgQU5ECisgICBDT05ESVRJT05TIE9GIExJQ0VOU0UgQUdSRUVNRU5UUyBPUiBOT1RJQ0VTIElORElDQVRFRCBPUiBSRUZFUkVOQ0VEIEJFTE9XLiAgQlkgVVNJTkcgVEhFIENPTlRFTlQsIFlPVSBBR1JFRSBUSEFUIFlPVVIgVVNFCisgICBPRiBUSEUgQ09OVEVOVCBJUyBHT1ZFUk5FRCBCWSBUSElTIEFHUkVFTUVOVCBBTkQvT1IgVEhFIFRFUk1TIEFORCBDT05ESVRJT05TIE9GIEFOWSBBUFBMSUNBQkxFIExJQ0VOU0UgQUdSRUVNRU5UUyBPUgorICAgTk9USUNFUyBJTkRJQ0FURUQgT1IgUkVGRVJFTkNFRCBCRUxPVy4gIElGIFlPVSBETyBOT1QgQUdSRUUgVE8gVEhFIFRFUk1TIEFORCBDT05ESVRJT05TIE9GIFRISVMgQUdSRUVNRU5UIEFORCBUSEUgVEVSTVMgQU5ECisgICBDT05ESVRJT05TIE9GIEFOWSBBUFBMSUNBQkxFIExJQ0VOU0UgQUdSRUVNRU5UUyBPUiBOT1RJQ0VTIElORElDQVRFRCBPUiBSRUZFUkVOQ0VEIEJFTE9XLCBUSEVOIFlPVSBNQVkgTk9UIFVTRSBUSEUgQ09OVEVOVC48L3A+CisgICAKKzxoMz5BcHBsaWNhYmxlIExpY2Vuc2VzPC9oMz4gICAKKyAgIAorPHA+VW5sZXNzIG90aGVyd2lzZSBpbmRpY2F0ZWQsIGFsbCBDb250ZW50IG1hZGUgYXZhaWxhYmxlIGJ5IHRoZSBFY2xpcHNlIEZvdW5kYXRpb24gaXMgcHJvdmlkZWQgdG8geW91IHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMAorICAgKCZxdW90O0VQTCZxdW90OykuICBBIGNvcHkgb2YgdGhlIEVQTCBpcyBwcm92aWRlZCB3aXRoIHRoaXMgQ29udGVudCBhbmQgaXMgYWxzbyBhdmFpbGFibGUgYXQgPGEgaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwiPmh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sPC9hPi4KKyAgIEZvciBwdXJwb3NlcyBvZiB0aGUgRVBMLCAmcXVvdDtQcm9ncmFtJnF1b3Q7IHdpbGwgbWVhbiB0aGUgQ29udGVudC48L3A+CisKKzxwPkNvbnRlbnQgaW5jbHVkZXMsIGJ1dCBpcyBub3QgbGltaXRlZCB0bywgc291cmNlIGNvZGUsIG9iamVjdCBjb2RlLCBkb2N1bWVudGF0aW9uIGFuZCBvdGhlciBmaWxlcyBtYWludGFpbmVkIGluIHRoZSBFY2xpcHNlLm9yZyBDVlMgcmVwb3NpdG9yeSAoJnF1b3Q7UmVwb3NpdG9yeSZxdW90OykgaW4gQ1ZTCisgICBtb2R1bGVzICgmcXVvdDtNb2R1bGVzJnF1b3Q7KSBhbmQgbWFkZSBhdmFpbGFibGUgYXMgZG93bmxvYWRhYmxlIGFyY2hpdmVzICgmcXVvdDtEb3dubG9hZHMmcXVvdDspLjwvcD4KKyAgIAorPHVsPgorCTxsaT5Db250ZW50IG1heSBiZSBzdHJ1Y3R1cmVkIGFuZCBwYWNrYWdlZCBpbnRvIG1vZHVsZXMgdG8gZmFjaWxpdGF0ZSBkZWxpdmVyaW5nLCBleHRlbmRpbmcsIGFuZCB1cGdyYWRpbmcgdGhlIENvbnRlbnQuICBUeXBpY2FsIG1vZHVsZXMgbWF5IGluY2x1ZGUgcGx1Zy1pbnMgKCZxdW90O1BsdWctaW5zJnF1b3Q7KSwgcGx1Zy1pbiBmcmFnbWVudHMgKCZxdW90O0ZyYWdtZW50cyZxdW90OyksIGFuZCBmZWF0dXJlcyAoJnF1b3Q7RmVhdHVyZXMmcXVvdDspLjwvbGk+CisJPGxpPkVhY2ggUGx1Zy1pbiBvciBGcmFnbWVudCBtYXkgYmUgcGFja2FnZWQgYXMgYSBzdWItZGlyZWN0b3J5IG9yIEpBUiAoSmF2YSZ0cmFkZTsgQVJjaGl2ZSkgaW4gYSBkaXJlY3RvcnkgbmFtZWQgJnF1b3Q7cGx1Z2lucyZxdW90Oy48L2xpPgorCTxsaT5BIEZlYXR1cmUgaXMgYSBidW5kbGUgb2Ygb25lIG9yIG1vcmUgUGx1Zy1pbnMgYW5kL29yIEZyYWdtZW50cyBhbmQgYXNzb2NpYXRlZCBtYXRlcmlhbC4gIEVhY2ggRmVhdHVyZSBtYXkgYmUgcGFja2FnZWQgYXMgYSBzdWItZGlyZWN0b3J5IGluIGEgZGlyZWN0b3J5IG5hbWVkICZxdW90O2ZlYXR1cmVzJnF1b3Q7LiAgV2l0aGluIGEgRmVhdHVyZSwgZmlsZXMgbmFtZWQgJnF1b3Q7ZmVhdHVyZS54bWwmcXVvdDsgbWF5IGNvbnRhaW4gYSBsaXN0IG9mIHRoZSBuYW1lcyBhbmQgdmVyc2lvbiBudW1iZXJzIG9mIHRoZSBQbHVnLWlucworICAgICAgYW5kL29yIEZyYWdtZW50cyBhc3NvY2lhdGVkIHdpdGggdGhhdCBGZWF0dXJlLjwvbGk+CisJPGxpPkZlYXR1cmVzIG1heSBhbHNvIGluY2x1ZGUgb3RoZXIgRmVhdHVyZXMgKCZxdW90O0luY2x1ZGVkIEZlYXR1cmVzJnF1b3Q7KS4gV2l0aGluIGEgRmVhdHVyZSwgZmlsZXMgbmFtZWQgJnF1b3Q7ZmVhdHVyZS54bWwmcXVvdDsgbWF5IGNvbnRhaW4gYSBsaXN0IG9mIHRoZSBuYW1lcyBhbmQgdmVyc2lvbiBudW1iZXJzIG9mIEluY2x1ZGVkIEZlYXR1cmVzLjwvbGk+Cis8L3VsPiAgIAorIAorPHA+VGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIGdvdmVybmluZyBQbHVnLWlucyBhbmQgRnJhZ21lbnRzIHNob3VsZCBiZSBjb250YWluZWQgaW4gZmlsZXMgbmFtZWQgJnF1b3Q7YWJvdXQuaHRtbCZxdW90OyAoJnF1b3Q7QWJvdXRzJnF1b3Q7KS4gVGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIGdvdmVybmluZyBGZWF0dXJlcyBhbmQKK0luY2x1ZGVkIEZlYXR1cmVzIHNob3VsZCBiZSBjb250YWluZWQgaW4gZmlsZXMgbmFtZWQgJnF1b3Q7bGljZW5zZS5odG1sJnF1b3Q7ICgmcXVvdDtGZWF0dXJlIExpY2Vuc2VzJnF1b3Q7KS4gIEFib3V0cyBhbmQgRmVhdHVyZSBMaWNlbnNlcyBtYXkgYmUgbG9jYXRlZCBpbiBhbnkgZGlyZWN0b3J5IG9mIGEgRG93bmxvYWQgb3IgTW9kdWxlCitpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0byB0aGUgZm9sbG93aW5nIGxvY2F0aW9uczo8L3A+CisKKzx1bD4KKwk8bGk+VGhlIHRvcC1sZXZlbCAocm9vdCkgZGlyZWN0b3J5PC9saT4KKwk8bGk+UGx1Zy1pbiBhbmQgRnJhZ21lbnQgZGlyZWN0b3JpZXM8L2xpPgorCTxsaT5JbnNpZGUgUGx1Zy1pbnMgYW5kIEZyYWdtZW50cyBwYWNrYWdlZCBhcyBKQVJzPC9saT4KKwk8bGk+U3ViLWRpcmVjdG9yaWVzIG9mIHRoZSBkaXJlY3RvcnkgbmFtZWQgJnF1b3Q7c3JjJnF1b3Q7IG9mIGNlcnRhaW4gUGx1Zy1pbnM8L2xpPgorCTxsaT5GZWF0dXJlIGRpcmVjdG9yaWVzPC9saT4KKzwvdWw+CisJCQorPHA+Tm90ZTogaWYgYSBGZWF0dXJlIG1hZGUgYXZhaWxhYmxlIGJ5IHRoZSBFY2xpcHNlIEZvdW5kYXRpb24gaXMgaW5zdGFsbGVkIHVzaW5nIHRoZSBFY2xpcHNlIFVwZGF0ZSBNYW5hZ2VyLCB5b3UgbXVzdCBhZ3JlZSB0byBhIGxpY2Vuc2UgKCZxdW90O0ZlYXR1cmUgVXBkYXRlIExpY2Vuc2UmcXVvdDspIGR1cmluZyB0aGUKK2luc3RhbGxhdGlvbiBwcm9jZXNzLiAgSWYgdGhlIEZlYXR1cmUgY29udGFpbnMgSW5jbHVkZWQgRmVhdHVyZXMsIHRoZSBGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlIHNob3VsZCBlaXRoZXIgcHJvdmlkZSB5b3Ugd2l0aCB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgZ292ZXJuaW5nIHRoZSBJbmNsdWRlZCBGZWF0dXJlcyBvcgoraW5mb3JtIHlvdSB3aGVyZSB5b3UgY2FuIGxvY2F0ZSB0aGVtLiAgRmVhdHVyZSBVcGRhdGUgTGljZW5zZXMgbWF5IGJlIGZvdW5kIGluIHRoZSAmcXVvdDtsaWNlbnNlJnF1b3Q7IHByb3BlcnR5IG9mIGZpbGVzIG5hbWVkICZxdW90O2ZlYXR1cmUucHJvcGVydGllcyZxdW90OyBmb3VuZCB3aXRoaW4gYSBGZWF0dXJlLgorU3VjaCBBYm91dHMsIEZlYXR1cmUgTGljZW5zZXMsIGFuZCBGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlcyBjb250YWluIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyAob3IgcmVmZXJlbmNlcyB0byBzdWNoIHRlcm1zIGFuZCBjb25kaXRpb25zKSB0aGF0IGdvdmVybiB5b3VyIHVzZSBvZiB0aGUgYXNzb2NpYXRlZCBDb250ZW50IGluCit0aGF0IGRpcmVjdG9yeS48L3A+CisKKzxwPlRIRSBBQk9VVFMsIEZFQVRVUkUgTElDRU5TRVMsIEFORCBGRUFUVVJFIFVQREFURSBMSUNFTlNFUyBNQVkgUkVGRVIgVE8gVEhFIEVQTCBPUiBPVEhFUiBMSUNFTlNFIEFHUkVFTUVOVFMsIE5PVElDRVMgT1IgVEVSTVMgQU5EIENPTkRJVElPTlMuICBTT01FIE9GIFRIRVNFCitPVEhFUiBMSUNFTlNFIEFHUkVFTUVOVFMgTUFZIElOQ0xVREUgKEJVVCBBUkUgTk9UIExJTUlURUQgVE8pOjwvcD4KKworPHVsPgorCTxsaT5Db21tb24gUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjAgKGF2YWlsYWJsZSBhdCA8YSBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2NwbC12MTAuaHRtbCI+aHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9jcGwtdjEwLmh0bWw8L2E+KTwvbGk+CisJPGxpPkFwYWNoZSBTb2Z0d2FyZSBMaWNlbnNlIDEuMSAoYXZhaWxhYmxlIGF0IDxhIGhyZWY9Imh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFIj5odHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRTwvYT4pPC9saT4KKwk8bGk+QXBhY2hlIFNvZnR3YXJlIExpY2Vuc2UgMi4wIChhdmFpbGFibGUgYXQgPGEgaHJlZj0iaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wIj5odHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjA8L2E+KTwvbGk+CisJPGxpPklCTSBQdWJsaWMgTGljZW5zZSAxLjAgKGF2YWlsYWJsZSBhdCA8YSBocmVmPSJodHRwOi8vb3NzLnNvZnR3YXJlLmlibS5jb20vZGV2ZWxvcGVyd29ya3Mvb3BlbnNvdXJjZS9saWNlbnNlMTAuaHRtbCI+aHR0cDovL29zcy5zb2Z0d2FyZS5pYm0uY29tL2RldmVsb3BlcndvcmtzL29wZW5zb3VyY2UvbGljZW5zZTEwLmh0bWw8L2E+KTwvbGk+CQorCTxsaT5NZXRybyBMaW5rIFB1YmxpYyBMaWNlbnNlIDEuMDAgKGF2YWlsYWJsZSBhdCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW5ncm91cC5vcmcvb3Blbm1vdGlmL3N1cHBvcnRlcnMvbWV0cm9saW5rL2xpY2Vuc2UuaHRtbCI+aHR0cDovL3d3dy5vcGVuZ3JvdXAub3JnL29wZW5tb3RpZi9zdXBwb3J0ZXJzL21ldHJvbGluay9saWNlbnNlLmh0bWw8L2E+KTwvbGk+CisJPGxpPk1vemlsbGEgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjEgKGF2YWlsYWJsZSBhdCA8YSBocmVmPSJodHRwOi8vd3d3Lm1vemlsbGEub3JnL01QTC9NUEwtMS4xLmh0bWwiPmh0dHA6Ly93d3cubW96aWxsYS5vcmcvTVBML01QTC0xLjEuaHRtbDwvYT4pPC9saT4KKzwvdWw+CisKKzxwPklUIElTIFlPVVIgT0JMSUdBVElPTiBUTyBSRUFEIEFORCBBQ0NFUFQgQUxMIFNVQ0ggVEVSTVMgQU5EIENPTkRJVElPTlMgUFJJT1IgVE8gVVNFIE9GIFRIRSBDT05URU5ULiAgSWYgbm8gQWJvdXQsIEZlYXR1cmUgTGljZW5zZSwgb3IgRmVhdHVyZSBVcGRhdGUgTGljZW5zZSBpcyBwcm92aWRlZCwgcGxlYXNlCitjb250YWN0IHRoZSBFY2xpcHNlIEZvdW5kYXRpb24gdG8gZGV0ZXJtaW5lIHdoYXQgdGVybXMgYW5kIGNvbmRpdGlvbnMgZ292ZXJuIHRoYXQgcGFydGljdWxhciBDb250ZW50LjwvcD4KKworPGgzPkNyeXB0b2dyYXBoeTwvaDM+CisKKzxwPkNvbnRlbnQgbWF5IGNvbnRhaW4gZW5jcnlwdGlvbiBzb2Z0d2FyZS4gVGhlIGNvdW50cnkgaW4gd2hpY2ggeW91IGFyZSBjdXJyZW50bHkgbWF5IGhhdmUgcmVzdHJpY3Rpb25zIG9uIHRoZSBpbXBvcnQsIHBvc3Nlc3Npb24sIGFuZCB1c2UsIGFuZC9vciByZS1leHBvcnQgdG8KKyAgIGFub3RoZXIgY291bnRyeSwgb2YgZW5jcnlwdGlvbiBzb2Z0d2FyZS4gQkVGT1JFIHVzaW5nIGFueSBlbmNyeXB0aW9uIHNvZnR3YXJlLCBwbGVhc2UgY2hlY2sgdGhlIGNvdW50cnkncyBsYXdzLCByZWd1bGF0aW9ucyBhbmQgcG9saWNpZXMgY29uY2VybmluZyB0aGUgaW1wb3J0LAorICAgcG9zc2Vzc2lvbiwgb3IgdXNlLCBhbmQgcmUtZXhwb3J0IG9mIGVuY3J5cHRpb24gc29mdHdhcmUsIHRvIHNlZSBpZiB0aGlzIGlzIHBlcm1pdHRlZC48L3A+CisgICAKKzxzbWFsbD5KYXZhIGFuZCBhbGwgSmF2YS1iYXNlZCB0cmFkZW1hcmtzIGFyZSB0cmFkZW1hcmtzIG9mIFN1biBNaWNyb3N5c3RlbXMsIEluYy4gaW4gdGhlIFVuaXRlZCBTdGF0ZXMsIG90aGVyIGNvdW50cmllcywgb3IgYm90aC48L3NtYWxsPiAgIAorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMvcGx1Z2luLnByb3BlcnRpZXMgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy9wbHVnaW4ucHJvcGVydGllcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNjE0NmMzCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMvcGx1Z2luLnByb3BlcnRpZXMKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMvcGx1Z2luLnhtbCBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzL3BsdWdpbi54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzEwYWU0MAotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzL3BsdWdpbi54bWwKQEAgLTAsMCArMSwyNTEgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8P2VjbGlwc2UgdmVyc2lvbj0iMy4wIj8+CisKKzwhLS0KKyA8Y29weXJpZ2h0PgorIDwvY29weXJpZ2h0PgorCisgJElkJAorLS0+CisKKzxwbHVnaW4+CisKKworICA8ZXh0ZW5zaW9uCisgICAgcG9pbnQgPSAib3JnLmVjbGlwc2UudWkubmV3V2l6YXJkcyI+CisgICAgPHdpemFyZAorICAgICAgaWQgPSAib3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLnByZXNlbnRhdGlvbi5TdGFuZGFyZE1vZGVsV2l6YXJkSUQiCisgICAgICBuYW1lID0gIiVfVUlfU3RhbmRhcmRNb2RlbFdpemFyZF9sYWJlbCIKKyAgICAgIGNsYXNzID0gIm9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5wcmVzZW50YXRpb24uU3RhbmRhcmRNb2RlbFdpemFyZCIKKyAgICAgIGNhdGVnb3J5ID0gIm9yZy5lY2xpcHNlLmVtZi5lY29yZS5XaXphcmQuY2F0ZWdvcnkuSUQiCisgICAgICBpY29uID0gImljb25zL2Z1bGwvb2JqMTYvU3RhbmRhcmRNb2RlbEZpbGUuZ2lmIj4KKyAgICAgIDxkZXNjcmlwdGlvbj4lX1VJX1N0YW5kYXJkTW9kZWxXaXphcmRfZGVzY3JpcHRpb248L2Rlc2NyaXB0aW9uPgorICAgICAgPHNlbGVjdGlvbiBjbGFzcyA9ICJvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUmVzb3VyY2UiIC8+CisgICAgPC93aXphcmQ+CisgICAgPHdpemFyZAorICAgICAgICAgIGNhdGVnb3J5PSJvcmcuZWNsaXBzZS5zdGVtLnVpLndpemFyZHMuc3RlbWNhdGVnb3J5IgorICAgICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS5zdGVtLnVpLndpemFyZHMuTmV3RGlzZWFzZVdpemFyZCIKKyAgICAgICAgICBoYXNQYWdlcz0idHJ1ZSIKKyAgICAgICAgICBpY29uPSJpY29ucy9mdWxsL29iajE2L1N0YW5kYXJkTW9kZWxGaWxlLmdpZiIKKyAgICAgICAgICBpZD0ib3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLnByZXNlbnRhdGlvbi5TdGFuZGFyZE1vZGVsV2l6YXJkSUQiCisgICAgICAgICAgbmFtZT0iJV9VSV9EaXNlYXNlIi8+CisgICAgPHdpemFyZAorICAgICAgICAgIGNhdGVnb3J5PSJvcmcuZWNsaXBzZS5zdGVtLnVpLndpemFyZHMuc3RlbWNhdGVnb3J5IgorICAgICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS5zdGVtLnVpLndpemFyZHMuTmV3SW5mZWN0b3JXaXphcmQiCisgICAgICAgICAgaGFzUGFnZXM9InRydWUiCisgICAgICAgICAgaWNvbj0iaWNvbnMvZnVsbC9vYmoxNi9TdGFuZGFyZE1vZGVsRmlsZS5naWYiCisgICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5wcmVzZW50YXRpb24uU3RhbmRhcmRNb2RlbEluZmVjdG9ySUQiCisgICAgICAgICAgbmFtZT0iJV9VSV9JbmZlY3RvciIvPgorICA8L2V4dGVuc2lvbj4KKworICA8ZXh0ZW5zaW9uIHBvaW50ID0gIm9yZy5lY2xpcHNlLnVpLmVkaXRvcnMiPgorICAgIDxlZGl0b3IKKyAgICAgICAgaWQgPSAib3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLnByZXNlbnRhdGlvbi5TdGFuZGFyZEVkaXRvcklEIgorICAgICAgICBuYW1lID0gIiVfVUlfU3RhbmRhcmRFZGl0b3JfbGFiZWwiCisgICAgICAgIGljb24gPSAiaWNvbnMvZnVsbC9jdXN0b20xNi9EZWNvcmF0b3IuZ2lmIgorICAgICAgICBleHRlbnNpb25zID0gInN0YW5kYXJkIgorICAgICAgICBjbGFzcyA9ICJvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQucHJlc2VudGF0aW9uLlN0YW5kYXJkRWRpdG9yIiAKKyAgICAgICAgY29udHJpYnV0b3JDbGFzcz0ib3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLnByZXNlbnRhdGlvbi5TdGFuZGFyZEFjdGlvbkJhckNvbnRyaWJ1dG9yIiA+CisgICAgPC9lZGl0b3I+CisgIDwvZXh0ZW5zaW9uPgorICA8ZXh0ZW5zaW9uCisgICAgICAgIHBvaW50PSJvcmcuZWNsaXBzZS51aS52aWV3cyI+CisgICAgIDx2aWV3CisgICAgICAgICAgIGNhdGVnb3J5PSJvcmcuZWNsaXBzZS5zdGVtLnVpLnZpZXdzIgorICAgICAgICAgICBjbGFzcz0ib3JnLmVjbGlwc2Uuc3RlbS51aS52aWV3cy5kaXNlYXNlLkRpc2Vhc2VWaWV3IgorICAgICAgICAgICBpY29uPSJpY29ucy9mdWxsL2N1c3RvbTE2L2Rpc2Vhc2UuZ2lmIgorICAgICAgICAgICBpZD0ib3JnLmVjbGlwc2Uuc3RlbS51aS52aWV3cy5kaXNlYXNlcyIKKyAgICAgICAgICAgbmFtZT0iJV9VSV9EVmlld19OYW1lIi8+CisgIDwvZXh0ZW5zaW9uPgorICA8ZXh0ZW5zaW9uCisgICAgICAgIHBvaW50PSJvcmcuZWNsaXBzZS51aS5wZXJzcGVjdGl2ZUV4dGVuc2lvbnMiPgorICAgICA8cGVyc3BlY3RpdmVFeHRlbnNpb24gdGFyZ2V0SUQ9Im9yZy5lY2xpcHNlLnN0ZW0udWkuU1RFTURlc2lnbmVyUGVyc3BlY3RpdmUiPgorICAgICAgICA8dmlldworICAgICAgICAgICAgICBjbG9zZWFibGU9InRydWUiCisgICAgICAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5zdGVtLnVpLnZpZXdzLmRpc2Vhc2VzIgorICAgICAgICAgICAgICBtb3ZlYWJsZT0idHJ1ZSIKKyAgICAgICAgICAgICAgcmVsYXRpb25zaGlwPSJzdGFjayIKKyAgICAgICAgICAgICAgcmVsYXRpdmU9Im9yZy5lY2xpcHNlLnN0ZW0udWkudmlld3MuZGVjb3JhdG9ycyIKKyAgICAgICAgICAgICAgc2hvd1RpdGxlPSJ0cnVlIgorICAgICAgICAgICAgICBzdGFuZGFsb25lPSJ0cnVlIgorICAgICAgICAgICAgICB2aXNpYmxlPSJ0cnVlIi8+CisgICAgICAgIDx2aWV3U2hvcnRjdXQgaWQ9Im9yZy5lY2xpcHNlLnN0ZW0udWkudmlld3MuZGlzZWFzZXMiLz4KKyAgICAgPC9wZXJzcGVjdGl2ZUV4dGVuc2lvbj4KKyAgPC9leHRlbnNpb24+CisgIDxleHRlbnNpb24KKyAgICAgICAgcG9pbnQ9Im9yZy5lY2xpcHNlLnVpLnN0YXJ0dXAiPgorICAgICA8c3RhcnR1cAorICAgICAgICAgICBjbGFzcz0ib3JnLmVjbGlwc2Uuc3RlbS51aS5hZGFwdGVycy5uZXdtb2RpZmllcnBhZ2UuRGlzZWFzZU5ld01vZGlmaWVyUGFnZUFkYXB0ZXJGYWN0b3J5Ij48L3N0YXJ0dXA+CisgIDwvZXh0ZW5zaW9uPgorICA8ZXh0ZW5zaW9uCisgICAgICAgIHBvaW50PSJvcmcuZWNsaXBzZS51aS5tZW51cyI+CisgICAgIDxtZW51Q29udHJpYnV0aW9uCisgICAgICAgICAgIGxvY2F0aW9uVVJJPSJtZW51Om9yZy5lY2xpcHNlLnN0ZW0udWkubWVudS5uZXd3aXphcmRzP2FmdGVyPWFkZGl0aW9ucyI+CisgICAgICAgIDxjb21tYW5kCisgICAgICAgICAgICAgIGNvbW1hbmRJZD0ib3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzLmNvbW1hbmQud2l6LmRpc2Vhc2UiCisgICAgICAgICAgICAgIGljb249Imljb25zL2Z1bGwvY3VzdG9tMTYvZGlzZWFzZS5naWYiCisgICAgICAgICAgICAgIGxhYmVsPSIlX1VJX0Rpc2Vhc2VNb2RlbFdpemFyZF9sYWJlbCIKKyAgICAgICAgICAgICAgc3R5bGU9InB1c2giCisgICAgICAgICAgICAgIHRvb2x0aXA9IiVfVUlfTW9kZWxNb2RlbFdpemFyZF9kZXNjcmlwdGlvbiI+CisgICAgICAgIDwvY29tbWFuZD4KKyAgICAgICAgPGNvbW1hbmQKKyAgICAgICAgICAgICAgY29tbWFuZElkPSJvcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMuY29tbWFuZC53aXouaW5mZWN0b3IiCisgICAgICAgICAgICAgIGljb249Imljb25zL2Z1bGwvY3VzdG9tMTYvaW5mZWN0b3IuZ2lmIgorICAgICAgICAgICAgICBsYWJlbD0iJV9VSV9JbmZlY3RvcldpemFyZF9sYWJlbCIKKyAgICAgICAgICAgICAgc3R5bGU9InB1c2giCisgICAgICAgICAgICAgIHRvb2x0aXA9IiVfVUlfSW5mZWN0b3JXaXphcmRfZGVzY3JpcHRpb24iPgorICAgICAgICA8L2NvbW1hbmQ+CisgICAgIDwvbWVudUNvbnRyaWJ1dGlvbj4KKyAgICAgPG1lbnVDb250cmlidXRpb24KKyAgICAgICAgICAgbG9jYXRpb25VUkk9InRvb2xiYXI6b3JnLmVjbGlwc2Uuc3RlbS51aS50b29sYmFyLm5ld3dpemFyZHM/YWZ0ZXI9YWRkaXRpb25zIj4KKyAgICAgICAgPGNvbW1hbmQKKyAgICAgICAgICAgICAgY29tbWFuZElkPSJvcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMuY29tbWFuZC53aXouZGlzZWFzZSIKKyAgICAgICAgICAgICAgaWNvbj0iaWNvbnMvZnVsbC9jdXN0b20xNi9kaXNlYXNlLmdpZiIKKyAgICAgICAgICAgICAgbGFiZWw9IiVfVUlfRGlzZWFzZU1vZGVsV2l6YXJkX2xhYmVsIgorICAgICAgICAgICAgICBzdHlsZT0icHVzaCIKKyAgICAgICAgICAgICAgdG9vbHRpcD0iJV9VSV9Nb2RlbE1vZGVsV2l6YXJkX2Rlc2NyaXB0aW9uIj4KKyAgICAgICAgPC9jb21tYW5kPgorICAgICAgICA8Y29tbWFuZAorICAgICAgICAgICAgICBjb21tYW5kSWQ9Im9yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy5jb21tYW5kLndpei5pbmZlY3RvciIKKyAgICAgICAgICAgICAgaWNvbj0iaWNvbnMvZnVsbC9jdXN0b20xNi9pbmZlY3Rvci5naWYiCisgICAgICAgICAgICAgIGxhYmVsPSIlX1VJX0luZmVjdG9yV2l6YXJkX2xhYmVsIgorICAgICAgICAgICAgICBzdHlsZT0icHVzaCIKKyAgICAgICAgICAgICAgdG9vbHRpcD0iJV9VSV9JbmZlY3RvcldpemFyZF9kZXNjcmlwdGlvbiI+CisgICAgICAgIDwvY29tbWFuZD4KKyAgICAgPC9tZW51Q29udHJpYnV0aW9uPgorICAgICA8bWVudUNvbnRyaWJ1dGlvbgorICAgICAgICAgICBsb2NhdGlvblVSST0icG9wdXA6b3JnLmVjbGlwc2UudWkucG9wdXAuYW55P2FmdGVyPWFkZGl0aW9ucyI+CisgICAgICAgIDxjb21tYW5kCisgICAgICAgICAgICAgIGNvbW1hbmRJZD0ib3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzLmNvbW1hbmQud2l6LmluaXRpYWxpemVyIgorICAgICAgICAgICAgICBpY29uPSJpY29ucy9mdWxsL2N1c3RvbTE2L0luaXRpYWxpemVyLmdpZiIKKyAgICAgICAgICAgICAgbGFiZWw9IiVfVUlfSW5pdGlhbGl6ZXJXaXphcmRfbGFiZWwiCisgICAgICAgICAgICAgIHN0eWxlPSJwdXNoIgorICAgICAgICAgICAgICB0b29sdGlwPSIlX1VJX0luaXRpYWxpemVyV2l6YXJkX2Rlc2NyaXB0aW9uIj4KKyAgICAgICAgICAgPHZpc2libGVXaGVuCisgICAgICAgICAgICAgICAgIGNoZWNrRW5hYmxlZD0iZmFsc2UiPgorICAgICAgICAgICAgICA8cmVmZXJlbmNlCisgICAgICAgICAgICAgICAgICAgIGRlZmluaXRpb25JZD0ib3JnLmVjbGlwc2Uuc3RlbS51aS5pc0Rpc2Vhc2VNb2RlbCI+CisgICAgICAgICAgICAgIDwvcmVmZXJlbmNlPgorICAgICAgICAgICA8L3Zpc2libGVXaGVuPgorICAgICAgICA8L2NvbW1hbmQ+CisgICAgIDwvbWVudUNvbnRyaWJ1dGlvbj4KKyAgPC9leHRlbnNpb24+CisgIDxleHRlbnNpb24KKyAgICAgICAgcG9pbnQ9Im9yZy5lY2xpcHNlLnVpLmNvbW1hbmRzIj4KKyAgICAgPGNvbW1hbmQKKyAgICAgICAgICAgZGVmYXVsdEhhbmRsZXI9Im9yZy5lY2xpcHNlLnN0ZW0udWkud2l6YXJkcy5OZXdEaXNlYXNlV2l6YXJkJE5ld0Rpc2Vhc2VXaXphcmRDb21tYW5kSGFuZGxlciIKKyAgICAgICAgICAgZGVzY3JpcHRpb249IiVfVUlfTW9kZWxNb2RlbFdpemFyZF9kZXNjcmlwdGlvbiIKKyAgICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy5jb21tYW5kLndpei5kaXNlYXNlIgorICAgICAgICAgICBuYW1lPSIlX1VJX0Rpc2Vhc2VNb2RlbFdpemFyZF9sYWJlbCI+CisgICAgIDwvY29tbWFuZD4KKyAgICAgPGNvbW1hbmQKKyAgICAgICAgICAgZGVmYXVsdEhhbmRsZXI9Im9yZy5lY2xpcHNlLnN0ZW0udWkud2l6YXJkcy5OZXdJbmZlY3RvcldpemFyZCROZXdJbmZlY3RvcldpemFyZENvbW1hbmRIYW5kbGVyIgorICAgICAgICAgICBkZXNjcmlwdGlvbj0iJV9VSV9JbmZlY3RvcldpemFyZF9kZXNjcmlwdGlvbiIKKyAgICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy5jb21tYW5kLndpei5pbmZlY3RvciIKKyAgICAgICAgICAgbmFtZT0iJV9VSV9JbmZlY3RvcldpemFyZF9sYWJlbCI+CisgICAgIDwvY29tbWFuZD4KKyAgICAgPGNvbW1hbmQKKyAgICAgICAgICAgZGVmYXVsdEhhbmRsZXI9Im9yZy5lY2xpcHNlLnN0ZW0udWkud2l6YXJkcy5OZXdJbml0aWFsaXplcldpemFyZCROZXdJbml0aWFsaXplcldpemFyZENvbW1hbmRIYW5kbGVyIgorICAgICAgICAgICBkZXNjcmlwdGlvbj0iJV9VSV9Jbml0aWFsaXplcldpemFyZF9kZXNjcmlwdGlvbiIKKyAgICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy5jb21tYW5kLndpei5pbml0aWFsaXplciIKKyAgICAgICAgICAgbmFtZT0iJV9VSV9Jbml0aWFsaXplcldpemFyZF9sYWJlbCI+CisgICAgIDwvY29tbWFuZD4KKyAgPC9leHRlbnNpb24+CisgIDxleHRlbnNpb24KKyAgICAgICAgcG9pbnQ9Im9yZy5lY2xpcHNlLnN0ZW0udWkuY29sb3Jwcm92aWRlcnMiPgorICAgICA8Y29sb3Byb3ZpZGVyCisgICAgICAgICAgIGZhY3Rvcnk9Im9yZy5lY2xpcHNlLnN0ZW0udWkuYWRhcHRlcnMuY29sb3IuSW50ZW5zaXR5Q29sb3JzTGFiZWxzTWFwcGluZ0NvbG9yUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSIKKyAgICAgICAgICAgbmFtZT0iTGFiZWxzIENvbG9ycyBNYXBwaW5nIgorICAgICAgICAgICBwcm92aWRlcj0ib3JnLmVjbGlwc2Uuc3RlbS51aS5hZGFwdGVycy5jb2xvci5JbnRlbnNpdHlDb2xvcnNMYWJlbHNNYXBwaW5nQ29sb3JQcm92aWRlciI+CisgICAgIDwvY29sb3Byb3ZpZGVyPgorICAgICA8Y29sb3Byb3ZpZGVyCisgICAgICAgICAgIGZhY3Rvcnk9Im9yZy5lY2xpcHNlLnN0ZW0udWkuYWRhcHRlcnMuY29sb3IuU0VJUlJlbGF0aXZlVmFsdWVDb2xvclByb3ZpZGVyQWRhcHRlckZhY3RvcnkiCisgICAgICAgICAgIG5hbWU9IiZxdW90O1JhaW5ib3cmcXVvdDsgUmVsYXRpdmUgVmFsdWVzIgorICAgICAgICAgICBwcm92aWRlcj0ib3JnLmVjbGlwc2Uuc3RlbS51aS5hZGFwdGVycy5jb2xvci5TRUlSUmVsYXRpdmVWYWx1ZUNvbG9yUHJvdmlkZXIiPgorICAgICA8L2NvbG9wcm92aWRlcj4KKyAgPC9leHRlbnNpb24+CisgIDxleHRlbnNpb24KKyAgICAgICAgcG9pbnQ9Im9yZy5lY2xpcHNlLnVpLm5hdmlnYXRvci52aWV3ZXIiPgorICAgICAgICA8dmlld2VyCisgICAgICAgICAgIHZpZXdlcklkPSJvcmcuZWNsaXBzZS51aS5uYXZpZ2F0b3IuUHJvamVjdEV4cGxvcmVyIj4KKyAgICAgPC92aWV3ZXI+CisgICAgIDx2aWV3ZXJDb250ZW50QmluZGluZworICAgICAgICAgICB2aWV3ZXJJZD0ib3JnLmVjbGlwc2UudWkubmF2aWdhdG9yLlByb2plY3RFeHBsb3JlciI+CisgICAgICAgIDxpbmNsdWRlcz4KKyAgICAgICAgICAgCisgICAgICAgICAgIAorICAgICAgICAgICA8Y29udGVudEV4dGVuc2lvbgorICAgICAgICAgICAgICAgICBwYXR0ZXJuPSJvcmcuZWNsaXBzZS5zdGVtLnVpLnZpZXdzLmV4cGxvcmVyLnJlY29yZGVkY3N2aW5zdGFuY2VzIj4KKyAgICAgICAgICAgPC9jb250ZW50RXh0ZW5zaW9uPgorICAgICAgICA8L2luY2x1ZGVzPgorICAgICA8L3ZpZXdlckNvbnRlbnRCaW5kaW5nPgorICA8L2V4dGVuc2lvbj4KKyAgPGV4dGVuc2lvbgorICAgICAgICBwb2ludD0ib3JnLmVjbGlwc2UudWkubmF2aWdhdG9yLm5hdmlnYXRvckNvbnRlbnQiPgorICAgICA8bmF2aWdhdG9yQ29udGVudAorICAgICAgICAgICBjb250ZW50UHJvdmlkZXI9Im9yZy5lY2xpcHNlLnN0ZW0udWkudmlld3MuZXhwbG9yZXIuRGlzZWFzZU1vZGVsVHJlZU5vZGVDb250ZW50UHJvdmlkZXIiCisgICAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5zdGVtLnVpLnZpZXdzLmV4cGxvcmVyLmRpc2Vhc2Vtb2RlbHMiCisgICAgICAgICAgIGxhYmVsUHJvdmlkZXI9Im9yZy5lY2xpcHNlLnN0ZW0udWkudmlld3MuZXhwbG9yZXIuRGlzZWFzZU1vZGVsVHJlZU5vZGVMYWJlbFByb3ZpZGVyIgorICAgICAgICAgICBuYW1lPSIlX1VJX0Rpc2Vhc2VfTW9kZWxzIj4KKyAgICAgICAgPHRyaWdnZXJQb2ludHM+CisgICAgICAgICAgIDxhZGFwdAorICAgICAgICAgICAgICAgICB0eXBlPSJvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdCI+CisgICAgICAgICAgIDwvYWRhcHQ+CisgICAgICAgIDwvdHJpZ2dlclBvaW50cz4KKyAgICAgICAgPHBvc3NpYmxlQ2hpbGRyZW4+CisgICAgICAgICAgIDxpbnN0YW5jZW9mCisgICAgICAgICAgICAgICAgIHZhbHVlPSJvcmcuZWNsaXBzZS5zdGVtLnVpLnZpZXdzLmV4cGxvcmVyLklkZW50aWZpYWJsZVRyZWVOb2RlIj4KKyAgICAgICAgICAgPC9pbnN0YW5jZW9mPgorICAgICAgICA8L3Bvc3NpYmxlQ2hpbGRyZW4+CisgICAgIDwvbmF2aWdhdG9yQ29udGVudD4KKyAgICAgPG5hdmlnYXRvckNvbnRlbnQKKyAgICAgICAgICAgY29udGVudFByb3ZpZGVyPSJvcmcuZWNsaXBzZS5zdGVtLnVpLnZpZXdzLmV4cGxvcmVyLkRpc2Vhc2VNb2RlbEluc3RhbmNlVHJlZU5vZGVDb250ZW50UHJvdmlkZXIiCisgICAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5zdGVtLnVpLnZpZXdzLmV4cGxvcmVyLmRpc2Vhc2Vtb2RlbHNpbnN0YW5jZXMiCisgICAgICAgICAgIGxhYmVsUHJvdmlkZXI9Im9yZy5lY2xpcHNlLnN0ZW0udWkudmlld3MuZXhwbG9yZXIuRGlzZWFzZU1vZGVsSW5zdGFuY2VUcmVlTm9kZUxhYmVsUHJvdmlkZXIiCisgICAgICAgICAgIG5hbWU9IiVfVUlfRE1fSW5zdGFuY2VzIj4KKyAgICAgICAgPHRyaWdnZXJQb2ludHM+CisgICAgICAgICAgIDxhZGFwdAorICAgICAgICAgICAgICAgICB0eXBlPSJvcmcuZWNsaXBzZS5zdGVtLnVpLnZpZXdzLmV4cGxvcmVyLkRpc2Vhc2VNb2RlbFRyZWVOb2RlIj4KKyAgICAgICAgICAgPC9hZGFwdD4KKyAgICAgICAgPC90cmlnZ2VyUG9pbnRzPgorICAgICAgICA8cG9zc2libGVDaGlsZHJlbj4KKyAgICAgICAgICAgPGluc3RhbmNlb2YKKyAgICAgICAgICAgICAgICAgdmFsdWU9Im9yZy5lY2xpcHNlLnN0ZW0udWkudmlld3MuZXhwbG9yZXIuSWRlbnRpZmlhYmxlVHJlZU5vZGUiPgorICAgICAgICAgICA8L2luc3RhbmNlb2Y+CisgICAgICAgIDwvcG9zc2libGVDaGlsZHJlbj4KKyAgICAgPC9uYXZpZ2F0b3JDb250ZW50PgorICAgICA8bmF2aWdhdG9yQ29udGVudAorICAgICAgICAgICBjb250ZW50UHJvdmlkZXI9Im9yZy5lY2xpcHNlLnN0ZW0udWkudmlld3MuZXhwbG9yZXIuUmVjb3JkZWRDU1ZJbnN0YW5jZVRyZWVOb2RlQ29udGVudFByb3ZpZGVyIgorICAgICAgICAgICBpZD0ib3JnLmVjbGlwc2Uuc3RlbS51aS52aWV3cy5leHBsb3Jlci5yZWNvcmRlZGNzdmluc3RhbmNlcyIKKyAgICAgICAgICAgbGFiZWxQcm92aWRlcj0ib3JnLmVjbGlwc2Uuc3RlbS51aS52aWV3cy5leHBsb3Jlci5SZWNvcmRlZENTVkluc3RhbmNlVHJlZU5vZGVMYWJlbFByb3ZpZGVyIgorICAgICAgICAgICBuYW1lPSIlX1VJX1JlY29yZGVkX0NTViAiPgorICAgICAgICA8dHJpZ2dlclBvaW50cz4KKyAgICAgICAgICAgPGluc3RhbmNlb2YKKyAgICAgICAgICAgICAgICAgdmFsdWU9Im9yZy5lY2xpcHNlLnN0ZW0udWkudmlld3MuZXhwbG9yZXIuUmVjb3JkZWRUcmVlTm9kZSI+CisgICAgICAgICAgIDwvaW5zdGFuY2VvZj4KKyAgICAgICAgPC90cmlnZ2VyUG9pbnRzPgorICAgICAgICA8cG9zc2libGVDaGlsZHJlbj4KKyAgICAgICAgICAgPGluc3RhbmNlb2YKKyAgICAgICAgICAgICAgICAgdmFsdWU9Im9yZy5lY2xpcHNlLnN0ZW0udWkudmlld3MuZXhwbG9yZXIuUmVjb3JkZWRDU1ZJbnN0YW5jZVRyZWVOb2RlIj4KKyAgICAgICAgICAgPC9pbnN0YW5jZW9mPgorICAgICAgICA8L3Bvc3NpYmxlQ2hpbGRyZW4+CisgICAgIDwvbmF2aWdhdG9yQ29udGVudD4KKyAgPC9leHRlbnNpb24+CisgIDxleHRlbnNpb24KKyAgICAgICAgcG9pbnQ9Im9yZy5lY2xpcHNlLmNvcmUuZXhwcmVzc2lvbnMuZGVmaW5pdGlvbnMiPgorICAgICA8ZGVmaW5pdGlvbgorICAgICAgICAgICBpZD0ib3JnLmVjbGlwc2Uuc3RlbS51aS5pc0Rpc2Vhc2VNb2RlbCI+CisgICAgICAgIDx3aXRoCisgICAgICAgICAgICAgIHZhcmlhYmxlPSJzZWxlY3Rpb24iPgorICAgICAgICAgICA8aXRlcmF0ZQorICAgICAgICAgICAgICAgICBvcGVyYXRvcj0iYW5kIj4KKyAgICAgICAgICAgICAgPGFuZD4KKyAgICAgICAgICAgICAgICAgPGFkYXB0CisgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9Im9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5EaXNlYXNlTW9kZWwiPgorICAgICAgICAgICAgICAgICA8L2FkYXB0PgorICAgICAgICAgICAgICA8L2FuZD4KKyAgICAgICAgICAgPC9pdGVyYXRlPgorICAgICAgICA8L3dpdGg+CisgICAgIDwvZGVmaW5pdGlvbj4KKyAgPC9leHRlbnNpb24+ICAgIAorPC9wbHVnaW4+CmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy9wbHVnaW5fZGUucHJvcGVydGllcyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzL3BsdWdpbl9kZS5wcm9wZXJ0aWVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFmNjZmMjMKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy9wbHVnaW5fZGUucHJvcGVydGllcwpAQCAtMCwwICsxLDEzNSBAQAorIy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjICogQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorIyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyMgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyMgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorIyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisjICoKKyMgKiBDb250cmlidXRvcnM6CisjICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorIyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisjIFRvIGNvZGUgZGV2ZWxvcGVyOgorIyAgIERvIE5PVCBjaGFuZ2UgdGhlIHByb3BlcnRpZXMgYmV0d2VlbiB0aGlzIGxpbmUgYW5kIHRoZQorIyAgICIlJSUgRU5EIE9GIFRSQU5TTEFURUQgUFJPUEVSVElFUyAlJSUiIGxpbmUuCisjICAgTWFrZSBhIG5ldyBwcm9wZXJ0eSBuYW1lLCBhcHBlbmQgdG8gdGhlIGVuZCBvZiB0aGUgZmlsZSBhbmQgY2hhbmdlCisjICAgdGhlIGNvZGUgdG8gdXNlIHRoZSBuZXcgcHJvcGVydHkuCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyMgJSUlIEVORCBPRiBUUkFOU0xBVEVEIFBST1BFUlRJRVMgJSUlCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK3BsdWdpbk5hbWU9U1RFTSBLcmFua2hlaXRzbW9kZWxsLUJlbnV0emVyb2JlcmZsXHUwMGU0Y2hlCitwcm92aWRlck5hbWU9RWNsaXBzZS5vcmcKKworIyBDb21tb24gS2V5cworX1VJX1NURU09U1RFTQorX1VJX0J1aWx0aW49RWluZ2ViYXV0CisKK19VSV9EaXNlYXNlPUtyYW5raGVpdAorX1VJX0luZmVjdG9yPUluZml6aWVyZXIKKworIyBOZXcgRGlzZWFzZSBXaXphcmQKK19VSV9EaXNlYXNlTW9kZWxXaXphcmRfbGFiZWw9S3JhbmtoZWl0CitfVUlfTW9kZWxNb2RlbFdpemFyZF9kZXNjcmlwdGlvbj1EZWZpbmllcmVuIFNpZSBlaW5lIG5ldWUgS3JhbmtoZWl0CisKKyMgTmV3IEluZmVjdG9yIFdpemFyZAorX1VJX0luZmVjdG9yV2l6YXJkX2xhYmVsPUluZml6aWVyZXIgLyBJbW11bmlzaWVyZXIKK19VSV9JbmZlY3RvcldpemFyZF9kZXNjcmlwdGlvbj1OZXVlIEluZmVrdG9yIGRlZmluaWVyZW4KKworIyBOZXcgSW5pdGlhbGl6ZXIgV2l6YXJkCitfVUlfSW5pdGlhbGl6ZXJXaXphcmRfbGFiZWwgPSBOZXVlbiBJbml0aWFsaXNpZXJlciBlcnN0ZWxsZW4KK19VSV9Jbml0aWFsaXplcldpemFyZF9kZXNjcmlwdGlvbiA9IE5ldWVuIEluaXRpYWxpc2llcmVyIGVyc3RlbGxlbgorCisjIERpc2Vhc2UgTW9kZWwgVmlldworX1VJX0RWaWV3X05hbWU9S3JhbmtoZWl0ZW4KKworIyBQcm9qZWN0IEV4cGxvcmVyIENvbnRlbnQKK19VSV9EaXNlYXNlX01vZGVscz1LcmFua2hlaXRzbW9kZWxsZQorX1VJX0RNX0luc3RhbmNlcz1LcmFua2hlaXRzbW9kZWxsLUluc3RhbnplbgorX1VJX1JlY29yZGVkX0NTVj1BdWZnZW5vbW1lbiBDU1YtU2ltdWxhdGlvbmVuCisKK19VSV9TdGFuZGFyZEVkaXRvcl9tZW51PSZTdGFuZGFyZCBFZGl0b3IKKworX1VJX0NyZWF0ZUNoaWxkX21lbnVfaXRlbT0mTmV3IENoaWxkCitfVUlfQ3JlYXRlU2libGluZ19tZW51X2l0ZW09TiZldWVzIEdlc2Nod2lzdGVydGVpbAorCitfVUlfU2hvd1Byb3BlcnRpZXNWaWV3X21lbnVfaXRlbT1TaG93ICYgUHJvcGVydGllcyBWaWV3CitfVUlfUmVmcmVzaFZpZXdlcl9tZW51X2l0ZW09JlJlZnJlc2gKKworX1VJX1NlbGVjdGlvblBhZ2VfbGFiZWw9QXVzd2FobAorX1VJX1BhcmVudFBhZ2VfbGFiZWw9RWx0ZXJudGVpbAorX1VJX0xpc3RQYWdlX2xhYmVsPUxpc3RlCitfVUlfVHJlZVBhZ2VfbGFiZWw9QmF1bQorX1VJX1RhYmxlUGFnZV9sYWJlbD1UYWJlbGxlCitfVUlfVHJlZVdpdGhDb2x1bW5zUGFnZV9sYWJlbD1CYXVtIG1pdCBTcGFsdGVuCitfVUlfT2JqZWN0Q29sdW1uX2xhYmVsPU9iamVrdAorX1VJX1NlbGZDb2x1bW5fbGFiZWw9U2VsYnN0CisKK19VSV9Ob09iamVjdFNlbGVjdGVkPU5pY2h0cyBhdXNnZXdcdTAwZTRobHQKK19VSV9TaW5nbGVPYmplY3RTZWxlY3RlZD1BdXNnZXdcdTAwZTRobHRlcyBPYmpla3Q6IHswfQorX1VJX011bHRpT2JqZWN0U2VsZWN0ZWQ9QXVzZ2V3XHUwMGU0aGx0ZSB7MH0gT2JqZWt0ZQorCitfVUlfT3BlbkVkaXRvckVycm9yX2xhYmVsPUVkaXRvciBcdTAwZjZmZm5lbgorCitfVUlfV2l6YXJkX2NhdGVnb3J5PUJlaXNwaWVsIEVNRiBNb2RlbGwgRXJzdGVsbHVuZ3Nhc3Npc3RlbnQKKworX1VJX0NyZWF0ZU1vZGVsRXJyb3JfbWVzc2FnZT1BdWZnZXRyZXRlbmUgUHJvYmxlbWUgaW4gZGVyIERhdGVpICJ7MH0iCisKK19VSV9TdGFuZGFyZE1vZGVsV2l6YXJkX2xhYmVsPVN0YW5kYXJkbW9kZWxsCitfVUlfU3RhbmRhcmRNb2RlbFdpemFyZF9kZXNjcmlwdGlvbj1OZXVlcyBTdGFuZGFyZC1Nb2RlbGwgZXJzdGVsbGVuCisKK19VSV9TdGFuZGFyZEVkaXRvcl9sYWJlbD1TdGFuZGFyZG1vZGVsbC1FZGl0b3IKKworX1VJX1N0YW5kYXJkRWRpdG9yRmlsZW5hbWVEZWZhdWx0QmFzZT1NZWluCitfVUlfU3RhbmRhcmRFZGl0b3JGaWxlbmFtZUV4dGVuc2lvbj1TdGFuZGFyZAorCitfV0FSTl9GaWxlbmFtZUV4dGVuc2lvbj1EZXIgRGF0ZWluYW1lIG11c3MgYXVmICIuezB9IiBlbmRlbgorCitfVUlfTW9kZWxPYmplY3Q9TW9kZWxsIE9iamVrdAorX1VJX1hNTEVuY29kaW5nPVhNTCBLb2RpZXJ1bmcKK19VSV9YTUxFbmNvZGluZ0Nob2ljZXM9VVRGLTggQVNDSUkgVVRGLTE2IFVURi0xNkJFIFVURi0xNkxFIElTTy04ODU5LTEKK19VSV9XaXphcmRfaW5pdGlhbF9vYmplY3RfZGVzY3JpcHRpb249WnUgZXJ6ZXVnZW5kZXMgTW9kZWxsb2JqZWt0IHdcdTAwZTRobGVuCisKK19VSV9GaWxlQ29uZmxpY3RfbGFiZWw9RGF0ZWlrb25mbGlrdAorX1dBUk5fRmlsZUNvbmZsaWN0PUVzIGdpYnQgbmljaHQgZ2VzcGVpY2hlcnRlIFx1MDBjNG5kZXJ1bmdlbiwgZGllIEtvbmZsaWt0ZSBtaXQgXHUwMGM0bmRlcnVuZ2VuIGF1XHUwMGRmZXJoYWxiIGRlcyBFZGl0b3JzIGVyemV1Z2VuLiBNXHUwMGY2Y2h0ZW4gU2llIGRpZSBcdTAwYzRuZGVydW5nZW4gaW0gRWRpdG9yIHZlcndlcmZlbj8KKworX1VJX0Rpc2Vhc2Vtb2RlbHNFZGl0b3JBZHZpc29yX0FjdGlvblNldF9sYWJlbD1LcmFua2hlaXRzbW9kZWxsZSBBa3Rpb25zbWVuZ2UKK19VSV9QZXJzcGVjdGl2ZV9sYWJlbD1LcmFua2hlaXRzbW9kZWxsZQorCitfVUlfQnJvd3NlX2xhYmVsPSZCcm93c2UuLi4KK19VSV9GaWxlX2xhYmVsPSZGaWxlCitfVUlfUXVlc3Rpb25fdGl0bGU9RnJhZ2UKK19VSV9FcnJvcl90aXRsZT1GZWhsZXIKK19XQVJOX05vX0VkaXRvcj1FcyBnaWJ0IGtlaW5lbiBFZGl0b3IsIGRlciBmXHUwMGZjciBkaWUgRGF0ZWkgInswfSIgcmVnaXN0cmllcnQgaXN0LgorCitfVUlfQXBwbGljYXRpb25fdGl0bGU9S3JhbmtoZWl0c21vZGVsbGUgQW53ZW5kdW5nCitfVUlfTWVudV9GaWxlX2xhYmVsPSZGaWxlCitfVUlfTWVudV9OZXdfbGFiZWw9Jk5ldworX1VJX01lbnVfT3Blbl9sYWJlbD0mT3Blbi4uLgorX1VJX01lbnVfT3Blbl9kZXNjcmlwdGlvbj1Nb2RlbC1PYmpla3QtRGF0ZWkgXHUwMGY2ZmZuZW4KK19VSV9NZW51X09wZW5VUklfbGFiZWw9Jk9wZW4gVVJJLi4uCitfVUlfTWVudV9PcGVuVVJJX2Rlc2NyaXB0aW9uPU1vZGVsLU9iamVrdCBhdXMgZWluZXIgVVJJIGxhZGVuIHVuZCBcdTAwZjZmZm5lbgorX1VJX01lbnVfRWRpdF9sYWJlbD0mRWRpdAorX1VJX01lbnVfV2luZG93X2xhYmVsPSZXaW5kb3cKK19VSV9NZW51X0hlbHBfbGFiZWw9JkhlbHAKK19VSV9NZW51X0Fib3V0X2xhYmVsPUtyYW5raGVpdHNtb2RlbGxlICZcdTAwZGNiZXIuLi4KK19VSV9BYm91dF90aXRsZT1LcmFua2hlaXRzbW9kZWxsZSBBbndlbmR1bmcKK19VSV9BYm91dF90ZXh0PUtyYW5raGVpdHNtb2RlbGxlIEFib3V0Ym94IGZcdTAwZmNyIEFud2VuZHVuZyBrb21tdCBoaWVyIGhpbi4KKworX1VJX1N0YW5kYXJkTW9kZWxXaXphcmRfQWN0aW9uU2V0X2xhYmVsPVN0YW5kYXJkbW9kZWxsLUFrdGlvbnNtZW5nZQorCitfVUlfU3RhbmRhcmRFZGl0b3JGaWxlbmFtZUV4dGVuc2lvbnM9U3RhbmRhcmQKKworX1dBUk5fRmlsZW5hbWVFeHRlbnNpb25zPURlciBEYXRlaW5hbWUgbXVzcyBlaW5lIGRlciBmb2xnZW5kZW4gRW5kdW5nZW4gaGFiZW46IHswfQorCitfVUlfV2l6YXJkX2xhYmVsPU5ldQorX1VJX0Rpc2Vhc2VwcmVkaWNhdGVzRWRpdG9yX21lbnU9JkRpc2Vhc2VwcmVkaWNhdGVzIEVkaXRvcgorX1VJX0Rpc2Vhc2VwcmVkaWNhdGVzTW9kZWxXaXphcmRfbGFiZWw9RGlzZWFzZXByZWRpY2F0ZXMgTW9kZWwKK19VSV9EaXNlYXNlcHJlZGljYXRlc01vZGVsV2l6YXJkX2Rlc2NyaXB0aW9uPUNyZWF0ZSBhIG5ldyBEaXNlYXNlcHJlZGljYXRlcyBtb2RlbAorX1VJX0Rpc2Vhc2VwcmVkaWNhdGVzRWRpdG9yX2xhYmVsPURpc2Vhc2VwcmVkaWNhdGVzIE1vZGVsIEVkaXRvcgorX1VJX0Rpc2Vhc2VwcmVkaWNhdGVzRWRpdG9yRmlsZW5hbWVEZWZhdWx0QmFzZT1NZWluCitfVUlfRGlzZWFzZXByZWRpY2F0ZXNFZGl0b3JGaWxlbmFtZUV4dGVuc2lvbnM9ZGlzZWFzZXByZWRpY2F0ZXMKK19VSV9EaXNlYXNlcHJlZGljYXRlc01vZGVsV2l6YXJkX0FjdGlvblNldF9sYWJlbD1EaXNlYXNlcHJlZGljYXRlcyBNb2RlbCBBY3Rpb24gU2V0CmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy9wbHVnaW5fa3IucHJvcGVydGllcyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzL3BsdWdpbl9rci5wcm9wZXJ0aWVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY1YWIxODYKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy9wbHVnaW5fa3IucHJvcGVydGllcwpAQCAtMCwwICsxLDEzNSBAQAorIy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjICogQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorIyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyMgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyMgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorIyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisjICoKKyMgKiBDb250cmlidXRvcnM6CisjICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorIyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisjIFRvIGNvZGUgZGV2ZWxvcGVyOgorIyAgIERvIE5PVCBjaGFuZ2UgdGhlIHByb3BlcnRpZXMgYmV0d2VlbiB0aGlzIGxpbmUgYW5kIHRoZQorIyAgICIlJSUgRU5EIE9GIFRSQU5TTEFURUQgUFJPUEVSVElFUyAlJSUiIGxpbmUuCisjICAgTWFrZSBhIG5ldyBwcm9wZXJ0eSBuYW1lLCBhcHBlbmQgdG8gdGhlIGVuZCBvZiB0aGUgZmlsZSBhbmQgY2hhbmdlCisjICAgdGhlIGNvZGUgdG8gdXNlIHRoZSBuZXcgcHJvcGVydHkuCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyMgJSUlIEVORCBPRiBUUkFOU0xBVEVEIFBST1BFUlRJRVMgJSUlCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK3BsdWdpbk5hbWU9U1RFTSBcdWM5YzhcdWJjZDEgXHViYWE4XHViMzc4IFVJCitwcm92aWRlck5hbWU9RWNsaXBzZS5vcmcKKworIyBDb21tb24gS2V5cworX1VJX1NURU09U1RFTQorX1VJX0J1aWx0aW49XHVkM2VjXHVkNTY4XHViNDFjCisKK19VSV9EaXNlYXNlPVx1YzljOFx1YmNkMQorX1VJX0luZmVjdG9yPVx1YzYyNFx1YzVmY1x1YzZkMAorCisjIE5ldyBEaXNlYXNlIFdpemFyZAorX1VJX0Rpc2Vhc2VNb2RlbFdpemFyZF9sYWJlbD1cdWM5YzhcdWJjZDEKK19VSV9Nb2RlbE1vZGVsV2l6YXJkX2Rlc2NyaXB0aW9uPVx1YzBjOFx1Yjg1Y1x1YzZiNCBcdWM5YzhcdWJjZDEgXHVjODE1XHVjNzU4CisKKyMgTmV3IEluZmVjdG9yIFdpemFyZAorX1VJX0luZmVjdG9yV2l6YXJkX2xhYmVsPVx1YzYyNFx1YzVmY1x1YzZkMCAvIFx1YzgxMVx1Yzg4NVx1Yzc5MAorX1VJX0luZmVjdG9yV2l6YXJkX2Rlc2NyaXB0aW9uPVx1YzBjOFx1Yjg1Y1x1YzZiNCBcdWM2MjRcdWM1ZmNcdWM2ZDAgXHVjODE1XHVjNzU4CisKKyMgTmV3IEluaXRpYWxpemVyIFdpemFyZAorX1VJX0luaXRpYWxpemVyV2l6YXJkX2xhYmVsPUNyZWF0ZSBuZXcgSW5pdGlhbGl6ZXIKK19VSV9Jbml0aWFsaXplcldpemFyZF9kZXNjcmlwdGlvbj1DcmVhdGUgbmV3IEluaXRpYWxpemVyCisKKyMgRGlzZWFzZSBNb2RlbCBWaWV3CitfVUlfRFZpZXdfTmFtZT1cdWM5YzhcdWJjZDEKKworIyBQcm9qZWN0IEV4cGxvcmVyIENvbnRlbnQKK19VSV9EaXNlYXNlX01vZGVscz1cdWM5YzhcdWJjZDEgXHViYWE4XHViMzc4CitfVUlfRE1fSW5zdGFuY2VzPVx1YzljOFx1YmNkMSBcdWJhYThcdWIzNzggXHVjMGFjXHViODQwCitfVUlfUmVjb3JkZWRfQ1NWPVx1YWUzMFx1Yjg1ZFx1YjQxYyBDU1YgXHVjMmRjXHViYmFjXHViODA4XHVjNzc0XHVjMTU4CisKK19VSV9TdGFuZGFyZEVkaXRvcl9tZW51PSZTdGFuZGFyZCBFZGl0b3IKKworX1VJX0NyZWF0ZUNoaWxkX21lbnVfaXRlbT0mTmV3IENoaWxkCitfVUlfQ3JlYXRlU2libGluZ19tZW51X2l0ZW09TiYgIFx1ZDYxNVx1YzgxYyBcdWM3OTBcdWI5ZTQKKworX1VJX1Nob3dQcm9wZXJ0aWVzVmlld19tZW51X2l0ZW09XHVkNDVjXHVjMmRjIFx1YmMwZiBcdWMxOGRcdWMxMzFcdWJjZjRcdWFlMzAKK19VSV9SZWZyZXNoVmlld2VyX21lbnVfaXRlbT0mUmVmcmVzaAorCitfVUlfU2VsZWN0aW9uUGFnZV9sYWJlbD1cdWMxMjBcdWQwZGQKK19VSV9QYXJlbnRQYWdlX2xhYmVsPVx1YmQ4MFx1YmFhOAorX1VJX0xpc3RQYWdlX2xhYmVsPVx1YmFhOVx1Yjg1ZAorX1VJX1RyZWVQYWdlX2xhYmVsPVx1YjA5OFx1YmIzNAorX1VJX1RhYmxlUGFnZV9sYWJlbD1cdWQxNGNcdWM3NzRcdWJlMTQKK19VSV9UcmVlV2l0aENvbHVtbnNQYWdlX2xhYmVsPVx1YjA5OFx1YmIzNFx1YzY0MCBcdWM1ZjQKK19VSV9PYmplY3RDb2x1bW5fbGFiZWw9XHVhYzFjXHVjY2I0CitfVUlfU2VsZkNvbHVtbl9sYWJlbD1cdWMxNDBcdWQ1MDQKKworX1VJX05vT2JqZWN0U2VsZWN0ZWQ9XHVjNTQ0XHViYjM0XHVhYzgzXHViM2M0IFx1YzU0OCBcdWMxMjBcdWQwZGRcdWQ1NjgKK19VSV9TaW5nbGVPYmplY3RTZWxlY3RlZD1cdWMxMjBcdWQwZGRcdWQ1NWMgXHVhYzFkXHVjY2I0IDogezB9CitfVUlfTXVsdGlPYmplY3RTZWxlY3RlZD1cdWMxMjBcdWQwZGRcdWI0MWMgezB9IFx1YWMxZFx1Y2NiNAorCitfVUlfT3BlbkVkaXRvckVycm9yX2xhYmVsPVx1YzYyNFx1ZDUwOCBcdWM1ZDBcdWI1MTRcdWQxMzAKKworX1VJX1dpemFyZF9jYXRlZ29yeT1cdWM2MDhcdWM4MWMgRU1GIFx1YmFhOFx1YjM3OCBcdWMwZGRcdWMxMzEgXHViOWM4XHViYzk1XHVjMGFjCisKK19VSV9DcmVhdGVNb2RlbEVycm9yX21lc3NhZ2U9XHVkMzBjXHVjNzdjICd7MH0gIlx1YzVkMFx1YzExYyBcdWJiMzhcdWM4MWMgXHViYzFjXHVjMGRkCisKK19VSV9TdGFuZGFyZE1vZGVsV2l6YXJkX2xhYmVsPVx1ZDQ1Y1x1YzkwMCBcdWJhYThcdWIzNzgKK19VSV9TdGFuZGFyZE1vZGVsV2l6YXJkX2Rlc2NyaXB0aW9uPVx1YzBjOFx1Yjg1Y1x1YzZiNCBcdWQ0NWNcdWM5MDAgXHViYWE4XHViMzc4XHVjNzQ0IFx1YjljY1x1YjRlNFx1YWUzMAorCitfVUlfU3RhbmRhcmRFZGl0b3JfbGFiZWw9XHVkNDVjXHVjOTAwIFx1YmFhOFx1YjM3OCBcdWQzYjhcdWM5ZDFcdWFlMzAKKworX1VJX1N0YW5kYXJkRWRpdG9yRmlsZW5hbWVEZWZhdWx0QmFzZT1cdWIwOThcdWM3NTgKK19VSV9TdGFuZGFyZEVkaXRvckZpbGVuYW1lRXh0ZW5zaW9uPVx1ZDQ1Y1x1YzkwMAorCitfV0FSTl9GaWxlbmFtZUV4dGVuc2lvbj1cdWQzMGNcdWM3N2MgXHVjNzc0XHViOTg0XHVjNzQwICIuezB9Ilx1Yjg1YyBcdWIwNWRcdWIwOThcdWM1N2NcdWQ1NjguIAorCitfVUlfTW9kZWxPYmplY3Q9XHViYWE4XHViMzc4IFx1YWMxZFx1Y2NiNAorX1VJX1hNTEVuY29kaW5nPVhNTCBcdWM3NzhcdWNmNTRcdWI1MjkKK19VSV9YTUxFbmNvZGluZ0Nob2ljZXM9VVRGIC0gOCBBU0NJSSBVVEYgLSAxNiBVVEYgLSAxNkJFIFVURiAtIDE2TEUgSVNPIC0gODg1OSAtIDEKK19VSV9XaXphcmRfaW5pdGlhbF9vYmplY3RfZGVzY3JpcHRpb249XHVjMGRkXHVjMTMxXHVkNTYwIFx1YmFhOFx1YjM3OCBcdWFjMWNcdWNjYjQgXHVjMTIwXHVkMGRkCisKK19VSV9GaWxlQ29uZmxpY3RfbGFiZWw9XHVkMzBjXHVjNzdjIFx1Y2RhOVx1YjNjYworX1dBUk5fRmlsZUNvbmZsaWN0PVx1YzgwMFx1YzdhNVx1YjQxOFx1YzljMCBcdWM1NGFcdWM3NDAgXHVjMGFjXHVkNTZkXHViNGU0XHVjNzc0IFx1ZDNiOFx1YzlkMVx1YWUzMCBcdWM2NzhcdWJkODBcdWM3NTggXHViY2MwXHVhY2JkIFx1YzBhY1x1ZDU2ZFx1YjRlNFx1YWNmYyBcdWNkYTlcdWIzY2NcdWQ1NjguIFx1Yzc3NCBcdWQzYjhcdWM5ZDFcdWFlMzBcdWM3NTggXHViY2MwXHVhY2JkIFx1YzBhY1x1ZDU2ZFx1YjRlNFx1Yzc0NCBcdWNkZThcdWMxOGMgXHVkNTU4XHVjMmRjXHVhY2EwXHVjMmI1XHViMmM4XHVhZTRjPworCitfVUlfRGlzZWFzZW1vZGVsc0VkaXRvckFkdmlzb3JfQWN0aW9uU2V0X2xhYmVsPVx1YzljOFx1YmNkMVx1YmFhOFx1YjM3OCBcdWM1NjFcdWMxNTggXHVjMTM4XHVkMmI4CitfVUlfUGVyc3BlY3RpdmVfbGFiZWw9XHVjOWM4XHViY2QxXHViYWE4XHViMzc4CisKK19VSV9Ccm93c2VfbGFiZWw9JkJyb3dzZS4uLgorX1VJX0ZpbGVfbGFiZWw9JkZpbGUKK19VSV9RdWVzdGlvbl90aXRsZT1cdWM5YzhcdWJiMzgKK19VSV9FcnJvcl90aXRsZT1cdWM2MjRcdWI5NTgKK19XQVJOX05vX0VkaXRvcj1cdWQzMGNcdWM3N2MgInswfSJcdWM1ZDAgXHViMzAwXHVkNTVjIFx1YjRmMVx1Yjg1ZFx1YjQxYyBcdWQzYjhcdWM5ZDFcdWFlMzBcdWFjMDAgXHVjNWM2XHVjNzRjLgorCitfVUlfQXBwbGljYXRpb25fdGl0bGU9XHVjOWM4XHViY2QxXHViYWE4XHViMzc4IFx1Yzc1MVx1YzZhOVx1ZDUwNFx1Yjg1Y1x1YWRmOFx1YjdhOAorX1VJX01lbnVfRmlsZV9sYWJlbD0mRmlsZQorX1VJX01lbnVfTmV3X2xhYmVsPSZOZXcKK19VSV9NZW51X09wZW5fbGFiZWw9Jk9wZW4uLi4KK19VSV9NZW51X09wZW5fZGVzY3JpcHRpb249XHViYWE4XHViMzc4IFx1YWMxY1x1Y2NiNCBcdWQzMGNcdWM3N2MgXHVjNWY0XHVhZTMwCitfVUlfTWVudV9PcGVuVVJJX2xhYmVsPSZPcGVuIFVSSS4uLgorX1VJX01lbnVfT3BlblVSSV9kZXNjcmlwdGlvbj1VUklcdWM1ZDBcdWMxMWMgXHViODVjXHViNTI5XHVkNTU4XHViMjk0IFx1YmFhOFx1YjM3OCBcdWFjMWNcdWNjYjQgXHVjNWY0XHVhZTMwCitfVUlfTWVudV9FZGl0X2xhYmVsPSZFZGl0CitfVUlfTWVudV9XaW5kb3dfbGFiZWw9JldpbmRvdworX1VJX01lbnVfSGVscF9sYWJlbD0mSGVscAorX1VJX01lbnVfQWJvdXRfbGFiZWw9XHVjOWM4XHViY2QxXHViYWE4XHViMzc4ICZcdWFkMDBcdWQ1NThcdWM1ZWMgLi4uIAorX1VJX0Fib3V0X3RpdGxlPVx1YzljOFx1YmNkMVx1YmFhOFx1YjM3OCBcdWM3NTFcdWM2YTlcdWQ1MDRcdWI4NWNcdWFkZjhcdWI3YTgKK19VSV9BYm91dF90ZXh0PVx1YzljOFx1YmNkMVx1YmFhOFx1YjM3OCBcdWM3NTFcdWM2YTlcdWQ1MDRcdWI4NWNcdWFkZjhcdWI3YThcdWM3NzQgXHVjNWVjXHVhZTMwXHVjNWQwIFx1ZDQ1Y1x1YzJkY1x1YjQyOVx1YjJjOFx1YjJlNC4KKworX1VJX1N0YW5kYXJkTW9kZWxXaXphcmRfQWN0aW9uU2V0X2xhYmVsPVx1ZDQ1Y1x1YzkwMCBcdWJhYThcdWIzNzggXHVjNzkxXHVjNWM1IFx1YzEzOFx1ZDJiOAorCitfVUlfU3RhbmRhcmRFZGl0b3JGaWxlbmFtZUV4dGVuc2lvbnM9XHVkNDVjXHVjOTAwCisKK19XQVJOX0ZpbGVuYW1lRXh0ZW5zaW9ucz1cdWQzMGNcdWM3N2MgXHVjNzc0XHViOTg0XHVjNzQwIFx1YjJlNFx1Yzc0YyBcdWQ2NTVcdWM3YTVcdWM3OTAgXHVjOTExIFx1ZDU1OFx1YjA5OFx1Yjk3YyBcdWFjMDBcdWM4MzhcdWM1N2NcdWQ1NjggOiB7MH0KKworX1VJX1dpemFyZF9sYWJlbD1cdWMwYzhcdWI4NWNcdWM2YjQKK19VSV9EaXNlYXNlcHJlZGljYXRlc0VkaXRvcl9tZW51PSZEaXNlYXNlcHJlZGljYXRlcyBFZGl0b3IKK19VSV9EaXNlYXNlcHJlZGljYXRlc01vZGVsV2l6YXJkX2xhYmVsPURpc2Vhc2VwcmVkaWNhdGVzIE1vZGVsCitfVUlfRGlzZWFzZXByZWRpY2F0ZXNNb2RlbFdpemFyZF9kZXNjcmlwdGlvbj1DcmVhdGUgYSBuZXcgRGlzZWFzZXByZWRpY2F0ZXMgbW9kZWwKK19VSV9EaXNlYXNlcHJlZGljYXRlc0VkaXRvcl9sYWJlbD1EaXNlYXNlcHJlZGljYXRlcyBNb2RlbCBFZGl0b3IKK19VSV9EaXNlYXNlcHJlZGljYXRlc0VkaXRvckZpbGVuYW1lRGVmYXVsdEJhc2U9XHViMDk4XHVjNzU4CitfVUlfRGlzZWFzZXByZWRpY2F0ZXNFZGl0b3JGaWxlbmFtZUV4dGVuc2lvbnM9ZGlzZWFzZXByZWRpY2F0ZXMKK19VSV9EaXNlYXNlcHJlZGljYXRlc01vZGVsV2l6YXJkX0FjdGlvblNldF9sYWJlbD1EaXNlYXNlcHJlZGljYXRlcyBNb2RlbCBBY3Rpb24gU2V0CmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy9wbHVnaW5femgucHJvcGVydGllcyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzL3BsdWdpbl96aC5wcm9wZXJ0aWVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI4N2MzNTAKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy9wbHVnaW5femgucHJvcGVydGllcwpAQCAtMCwwICsxLDEzNSBAQAorIy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjICogQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorIyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyMgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyMgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorIyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisjICoKKyMgKiBDb250cmlidXRvcnM6CisjICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorIyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisjIFRvIGNvZGUgZGV2ZWxvcGVyOgorIyAgIERvIE5PVCBjaGFuZ2UgdGhlIHByb3BlcnRpZXMgYmV0d2VlbiB0aGlzIGxpbmUgYW5kIHRoZQorIyAgICIlJSUgRU5EIE9GIFRSQU5TTEFURUQgUFJPUEVSVElFUyAlJSUiIGxpbmUuCisjICAgTWFrZSBhIG5ldyBwcm9wZXJ0eSBuYW1lLCBhcHBlbmQgdG8gdGhlIGVuZCBvZiB0aGUgZmlsZSBhbmQgY2hhbmdlCisjICAgdGhlIGNvZGUgdG8gdXNlIHRoZSBuZXcgcHJvcGVydHkuCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyMgJSUlIEVORCBPRiBUUkFOU0xBVEVEIFBST1BFUlRJRVMgJSUlCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK3BsdWdpbk5hbWU9U1RFTVx1NzViZVx1NzVjNVx1NmEyMVx1NTc4Ylx1NzY4NFx1NzUyOFx1NjIzN1x1NzU0Y1x1OTc2MgorcHJvdmlkZXJOYW1lPUVjbGlwc2Uub3JnCisKKyMgQ29tbW9uIEtleXMKK19VSV9TVEVNPVNURU0KK19VSV9CdWlsdGluPVx1NTE4NVx1N2Y2ZQorCitfVUlfRGlzZWFzZT1cdTc1YmVcdTc1YzUKK19VSV9JbmZlY3Rvcj1cdTYxMWZcdTY3ZDNcdTgwMDUKKworIyBOZXcgRGlzZWFzZSBXaXphcmQKK19VSV9EaXNlYXNlTW9kZWxXaXphcmRfbGFiZWw9XHU3NWJlXHU3NWM1CitfVUlfTW9kZWxNb2RlbFdpemFyZF9kZXNjcmlwdGlvbj1cdTViOWFcdTRlNDlcdTRlMDBcdTRlMmFcdTY1YjBcdTc2ODRcdTc1YmVcdTc1YzUKKworIyBOZXcgSW5mZWN0b3IgV2l6YXJkCitfVUlfSW5mZWN0b3JXaXphcmRfbGFiZWw9XHU2MTFmXHU2N2QzXHU4MDA1LyBcdTYzYTVcdTc5Y2RcdTU2NjgKK19VSV9JbmZlY3RvcldpemFyZF9kZXNjcmlwdGlvbj1cdTViOWFcdTRlNDlcdTRlMDBcdTRlMmFcdTY1YjBcdTc2ODRcdTYxMWZcdTY3ZDNcdTgwMDUKKworIyBOZXcgSW5pdGlhbGl6ZXIgV2l6YXJkCitfVUlfSW5pdGlhbGl6ZXJXaXphcmRfbGFiZWwgPQorX1VJX0luaXRpYWxpemVyV2l6YXJkX2Rlc2NyaXB0aW9uID0gCisKKyMgRGlzZWFzZSBNb2RlbCBWaWV3CitfVUlfRFZpZXdfTmFtZT1cdTc1YmVcdTc1YzUKKworIyBQcm9qZWN0IEV4cGxvcmVyIENvbnRlbnQKK19VSV9EaXNlYXNlX01vZGVscz1cdTc1YmVcdTc1YzVcdTZhMjFcdTU3OGIKK19VSV9ETV9JbnN0YW5jZXM9XHU3NWJlXHU3NWM1XHU2YTIxXHU1NzhiXHU1YjllXHU0ZjhiCitfVUlfUmVjb3JkZWRfQ1NWPVx1OGJiMFx1NWY1NVx1NzY4NENTVlx1NGVmZlx1NzcxZgorCitfVUlfU3RhbmRhcmRFZGl0b3JfbWVudT0mU3RhbmRhcmQgRWRpdG9yCisKK19VSV9DcmVhdGVDaGlsZF9tZW51X2l0ZW09Jk5ldyBDaGlsZAorX1VJX0NyZWF0ZVNpYmxpbmdfbWVudV9pdGVtPVx1NjViMFx1NzUxZlx1NjIxMFx1NGUwMFx1NGUyYVx1NTE0NFx1NWYxZlx1N2M3YgorCitfVUlfU2hvd1Byb3BlcnRpZXNWaWV3X21lbnVfaXRlbT1cdTY2M2VcdTc5M2FcdTU0OGNcdTVjNWVcdTYwMjdcdTY3ZTVcdTc3MGIKK19VSV9SZWZyZXNoVmlld2VyX21lbnVfaXRlbT0mUmVmcmVzaAorCitfVUlfU2VsZWN0aW9uUGFnZV9sYWJlbD1cdTkwMDlcdTYyZTkKK19VSV9QYXJlbnRQYWdlX2xhYmVsPVx1NWJiNlx1OTU3ZgorX1VJX0xpc3RQYWdlX2xhYmVsPVx1NzZlZVx1NWY1NQorX1VJX1RyZWVQYWdlX2xhYmVsPVx1NjgxMQorX1VJX1RhYmxlUGFnZV9sYWJlbD1cdTg4NjgKK19VSV9UcmVlV2l0aENvbHVtbnNQYWdlX2xhYmVsPVx1NTIwNlx1NTIxN1x1NzY4NFx1NjgxMQorX1VJX09iamVjdENvbHVtbl9sYWJlbD1cdTViZjlcdThjNjEKK19VSV9TZWxmQ29sdW1uX2xhYmVsPVx1ODFlYVx1NWRmMQorCitfVUlfTm9PYmplY3RTZWxlY3RlZD1cdTY1ZTBcdTkwMDlcdTViOWFcdTUxODVcdTViYjkKK19VSV9TaW5nbGVPYmplY3RTZWxlY3RlZD1cdTkwMDlcdTYyZTlcdTViZjlcdThjNjFcdWZmMWF7MH0KK19VSV9NdWx0aU9iamVjdFNlbGVjdGVkPVx1OTAwOVx1NjJlOXswfVx1NWJmOVx1OGM2MQorCitfVUlfT3BlbkVkaXRvckVycm9yX2xhYmVsPVx1NjI1M1x1NWYwMFx1N2YxNlx1OGY5MVx1NTY2OAorCitfVUlfV2l6YXJkX2NhdGVnb3J5PVx1NGY4Ylx1NTk4MkVNRlx1NmEyMVx1NTc4Ylx1NTIxYlx1NWVmYVx1NTQxMVx1NWJmYworCitfVUlfQ3JlYXRlTW9kZWxFcnJvcl9tZXNzYWdlPVx1NTcyOFx1NjU4N1x1NGVmNlx1MjAxY3swfVx1MjAxZFx1NGUyZFx1OTA0N1x1NTIzMFx1NzY4NFx1OTVlZVx1OTg5OAorCitfVUlfU3RhbmRhcmRNb2RlbFdpemFyZF9sYWJlbD1cdTY4MDdcdTUxYzZcdTZhMjFcdTU3OGIKK19VSV9TdGFuZGFyZE1vZGVsV2l6YXJkX2Rlc2NyaXB0aW9uPVx1NTIxYlx1NWVmYVx1NGUwMFx1NGUyYVx1NjViMFx1NzY4NFx1NjgwN1x1NTFjNlx1NmEyMVx1NTc4YgorCitfVUlfU3RhbmRhcmRFZGl0b3JfbGFiZWw9XHU2ODA3XHU1MWM2XHU2YTIxXHU1NzhiXHU3ZjE2XHU4ZjkxXHU1NjY4CisKK19VSV9TdGFuZGFyZEVkaXRvckZpbGVuYW1lRGVmYXVsdEJhc2U9XHU2MjExXHU3Njg0CitfVUlfU3RhbmRhcmRFZGl0b3JGaWxlbmFtZUV4dGVuc2lvbj1cdTY4MDdcdTUxYzZcdTc2ODQKKworX1dBUk5fRmlsZW5hbWVFeHRlbnNpb249XHU2NTg3XHU0ZWY2XHU1NDBkXHU1ZmM1XHU5ODdiXHU0ZWU1J3swfSAnJ1x1N2VkM1x1NWMzZQorCitfVUlfTW9kZWxPYmplY3Q9XHU2YTIxXHU1NzhiXHU1YmY5XHU4YzYxCitfVUlfWE1MRW5jb2Rpbmc9WE1MXHU3ZjE2XHU3ODAxCitfVUlfWE1MRW5jb2RpbmdDaG9pY2VzPVVURi04IEFTQ0lJIFVURi0xNiBVVEYtMTZCRSBVVEYtMTZMRSBJU08tODg1OS0xCitfVUlfV2l6YXJkX2luaXRpYWxfb2JqZWN0X2Rlc2NyaXB0aW9uPVx1OTAwOVx1NjJlOVx1NTIxYlx1NWVmYVx1NGUwMFx1NGUyYVx1NmEyMVx1NTc4Ylx1NWJmOVx1OGM2MQorCitfVUlfRmlsZUNvbmZsaWN0X2xhYmVsPVx1NjU4N1x1NGVmNlx1NTFiMlx1N2E4MQorX1dBUk5fRmlsZUNvbmZsaWN0PVx1NjcwOVx1NjcyYVx1NGZkZFx1NWI1OFx1NzY4NFx1NjZmNFx1NjUzOVx1NGUwZVx1N2YxNlx1OGY5MVx1NTY2OFx1NTkxNlx1NzY4NFx1NjZmNFx1NjUzOVx1NTFiMlx1N2E4MVx1MzAwMlx1NGY2MFx1NjBmM1x1NjUzZVx1NWYwM1x1OGZkOVx1NGUyYVx1N2YxNlx1OGY5MVx1NTY2OFx1NzY4NFx1NjZmNFx1NjUzOVx1NTQxN1x1ZmYxZgorCitfVUlfRGlzZWFzZW1vZGVsc0VkaXRvckFkdmlzb3JfQWN0aW9uU2V0X2xhYmVsPVx1NzViZVx1NzVjNVx1NmEyMVx1NTc4Ylx1NTJhOFx1NGY1Y1x1OTZjNgorX1VJX1BlcnNwZWN0aXZlX2xhYmVsPVx1NzViZVx1NzVjNVx1NmEyMVx1NTc4YgorCitfVUlfQnJvd3NlX2xhYmVsPSZCcm93c2UuLi4KK19VSV9GaWxlX2xhYmVsPSZGaWxlCitfVUlfUXVlc3Rpb25fdGl0bGU9XHU5NWVlXHU5ODk4CitfVUlfRXJyb3JfdGl0bGU9XHU5NTE5XHU4YmVmCitfV0FSTl9Ob19FZGl0b3I9XHU3NmVlXHU1MjRkXHU4YmU1XHU2NTg3XHU0ZWY2XHUyMDFjezB9XHUyMDFkXHU2Y2ExXHU2NzA5XHU2Y2U4XHU1MThjXHU3ZjE2XHU4ZjkxXHU1NjY4XHUzMDAyCisKK19VSV9BcHBsaWNhdGlvbl90aXRsZT1cdTc1YmVcdTc1YzVcdTZhMjFcdTU3OGJcdTVlOTRcdTc1MjgKK19VSV9NZW51X0ZpbGVfbGFiZWw9JkZpbGUKK19VSV9NZW51X05ld19sYWJlbD0mTmV3CitfVUlfTWVudV9PcGVuX2xhYmVsPSZPcGVuLi4uCitfVUlfTWVudV9PcGVuX2Rlc2NyaXB0aW9uPVx1NjI1M1x1NWYwMFx1NGUwMFx1NGUyYVx1NmEyMVx1NTc4Ylx1NWJmOVx1OGM2MVx1NjU4N1x1NGVmNgorX1VJX01lbnVfT3BlblVSSV9sYWJlbD0mT3BlbiBVUkkuLi4KK19VSV9NZW51X09wZW5VUklfZGVzY3JpcHRpb249XHU2MjUzXHU1ZjAwXHU0ZTAwXHU0ZTJhXHU2YTIxXHU1NzhiXHU1YmY5XHU4YzYxXHU1ZTc2XHU0ZTE0XHU0ZWNlXHU0ZTAwXHU0ZTJhVVJJXHU2NzY1XHU1MmEwXHU4ZjdkXHU1YjgzCitfVUlfTWVudV9FZGl0X2xhYmVsPSZFZGl0CitfVUlfTWVudV9XaW5kb3dfbGFiZWw9JldpbmRvdworX1VJX01lbnVfSGVscF9sYWJlbD0mSGVscAorX1VJX01lbnVfQWJvdXRfbGFiZWw9XHU3NWJlXHU3NWM1XHU2YTIxXHU1NzhiXHU1NDhjXHU1MTczXHU0ZThlXHUzMDAyXHUzMDAyXHUzMDAyCitfVUlfQWJvdXRfdGl0bGU9XHU3NWJlXHU3NWM1XHU2YTIxXHU1NzhiXHU1ZTk0XHU3NTI4CitfVUlfQWJvdXRfdGV4dD1cdTc1YmVcdTc1YzVcdTZhMjFcdTU3OGJcdTUxNzNcdTRlOGVcdTViZjlcdThiZGRcdTY4NDZcdTc2ODRcdTVlOTRcdTc1MjhcdTY1M2VcdTU3MjhcdThmZDlcdTkxY2NcdTMwMDIKKworX1VJX1N0YW5kYXJkTW9kZWxXaXphcmRfQWN0aW9uU2V0X2xhYmVsPVx1NjgwN1x1NTFjNlx1NmEyMVx1NTc4Ylx1NmQzYlx1NTJhOFx1OTZjNgorCitfVUlfU3RhbmRhcmRFZGl0b3JGaWxlbmFtZUV4dGVuc2lvbnM9XHU2ODA3XHU1MWM2XHU3Njg0CisKK19XQVJOX0ZpbGVuYW1lRXh0ZW5zaW9ucz1cdTY1ODdcdTRlZjZcdTU0MGRcdTVmYzVcdTk4N2JcdTUxNzdcdTY3MDlcdTRlZTVcdTRlMGJcdTYyNjlcdTVjNTVcdTU0MGRcdTRlNGJcdTRlMDBcdWZmMWF7MH0KKworX1VJX1dpemFyZF9sYWJlbD1cdTY1YjBcdTVlZmEKK19VSV9EaXNlYXNlcHJlZGljYXRlc0VkaXRvcl9tZW51PSZEaXNlYXNlcHJlZGljYXRlcyBFZGl0b3IKK19VSV9EaXNlYXNlcHJlZGljYXRlc01vZGVsV2l6YXJkX2xhYmVsPURpc2Vhc2VwcmVkaWNhdGVzIE1vZGVsCitfVUlfRGlzZWFzZXByZWRpY2F0ZXNNb2RlbFdpemFyZF9kZXNjcmlwdGlvbj1DcmVhdGUgYSBuZXcgRGlzZWFzZXByZWRpY2F0ZXMgbW9kZWwKK19VSV9EaXNlYXNlcHJlZGljYXRlc0VkaXRvcl9sYWJlbD1EaXNlYXNlcHJlZGljYXRlcyBNb2RlbCBFZGl0b3IKK19VSV9EaXNlYXNlcHJlZGljYXRlc0VkaXRvckZpbGVuYW1lRGVmYXVsdEJhc2U9XHU2MjExXHU3Njg0CitfVUlfRGlzZWFzZXByZWRpY2F0ZXNFZGl0b3JGaWxlbmFtZUV4dGVuc2lvbnM9ZGlzZWFzZXByZWRpY2F0ZXMKK19VSV9EaXNlYXNlcHJlZGljYXRlc01vZGVsV2l6YXJkX0FjdGlvblNldF9sYWJlbD1EaXNlYXNlcHJlZGljYXRlcyBNb2RlbCBBY3Rpb24gU2V0CmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3ByZWRpY2F0ZXMvZGlzZWFzZXByZWRpY2F0ZXMvcHJlc2VudGF0aW9uL0Rpc2Vhc2VwcmVkaWNhdGVzQWN0aW9uQmFyQ29udHJpYnV0b3IuamF2YSBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvcHJlZGljYXRlcy9kaXNlYXNlcHJlZGljYXRlcy9wcmVzZW50YXRpb24vRGlzZWFzZXByZWRpY2F0ZXNBY3Rpb25CYXJDb250cmlidXRvci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNkZTNjYzgKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3ByZWRpY2F0ZXMvZGlzZWFzZXByZWRpY2F0ZXMvcHJlc2VudGF0aW9uL0Rpc2Vhc2VwcmVkaWNhdGVzQWN0aW9uQmFyQ29udHJpYnV0b3IuamF2YQpAQCAtMCwwICsxLDQ2MiBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMucHJlZGljYXRlcy5kaXNlYXNlcHJlZGljYXRlcy5wcmVzZW50YXRpb247CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIAorICogQ29weXJpZ2h0IChjKSAyMDExIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiAKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdCAKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sIAorICogCisgKiBDb250cmlidXRvcnM6IAorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiAKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udWkuYWN0aW9uLldvcmtiZW5jaFdpbmRvd0FjdGlvbkRlbGVnYXRlOworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51aS52aWV3ZXIuSVZpZXdlclByb3ZpZGVyOworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQuZG9tYWluLkVkaXRpbmdEb21haW47CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQuZG9tYWluLklFZGl0aW5nRG9tYWluUHJvdmlkZXI7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5hY3Rpb24uQ29udHJvbEFjdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5hY3Rpb24uQ3JlYXRlQ2hpbGRBY3Rpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkuYWN0aW9uLkNyZWF0ZVNpYmxpbmdBY3Rpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkuYWN0aW9uLkVkaXRpbmdEb21haW5BY3Rpb25CYXJDb250cmlidXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5hY3Rpb24uTG9hZFJlc291cmNlQWN0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmFjdGlvbi5WYWxpZGF0ZUFjdGlvbjsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5BY3Rpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLkFjdGlvbkNvbnRyaWJ1dGlvbkl0ZW07CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklBY3Rpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklDb250cmlidXRpb25JdGVtOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JQ29udHJpYnV0aW9uTWFuYWdlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSU1lbnVMaXN0ZW5lcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSU1lbnVNYW5hZ2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JVG9vbEJhck1hbmFnZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLk1lbnVNYW5hZ2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5TZXBhcmF0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLlN1YkNvbnRyaWJ1dGlvbkl0ZW07CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvblByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVN0cnVjdHVyZWRTZWxlY3Rpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5TZWxlY3Rpb25DaGFuZ2VkRXZlbnQ7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5TdHJ1Y3R1cmVkU2VsZWN0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuVmlld2VyOworCitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uud2l6YXJkLldpemFyZERpYWxvZzsKKworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5wcmVzZW50YXRpb24uRGlzZWFzZW1vZGVsc0VkaXRvclBsdWdpbjsKKworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklFZGl0b3JQYXJ0OworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLlBhcnRJbml0RXhjZXB0aW9uOworCisvKioKKyAqIFRoaXMgaXMgdGhlIGFjdGlvbiBiYXIgY29udHJpYnV0b3IgZm9yIHRoZSBEaXNlYXNlcHJlZGljYXRlcyBtb2RlbCBlZGl0b3IuCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBEaXNlYXNlcHJlZGljYXRlc0FjdGlvbkJhckNvbnRyaWJ1dG9yCisJZXh0ZW5kcyBFZGl0aW5nRG9tYWluQWN0aW9uQmFyQ29udHJpYnV0b3IKKwlpbXBsZW1lbnRzIElTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIgeworCS8qKgorCSAqIEFjdGlvbiB0byBjcmVhdGUgb2JqZWN0cyBmcm9tIHRoZSBEaXNlYXNlcHJlZGljYXRlcyBtb2RlbC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGNsYXNzIE5ld0FjdGlvbiBleHRlbmRzIFdvcmtiZW5jaFdpbmRvd0FjdGlvbkRlbGVnYXRlIHsKKwkJLyoqCisJCSAqIEBzZWUgb3JnLmVjbGlwc2UudWkuSUFjdGlvbkRlbGVnYXRlI3J1bihvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSUFjdGlvbikKKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCXB1YmxpYyB2b2lkIHJ1bihJQWN0aW9uIGFjdGlvbikgeworCQkJRGlzZWFzZXByZWRpY2F0ZXNNb2RlbFdpemFyZCB3aXphcmQgPSBuZXcgRGlzZWFzZXByZWRpY2F0ZXNNb2RlbFdpemFyZCgpOworCQkJd2l6YXJkLmluaXQoZ2V0V2luZG93KCkuZ2V0V29ya2JlbmNoKCksIFN0cnVjdHVyZWRTZWxlY3Rpb24uRU1QVFkpOworCQkJV2l6YXJkRGlhbG9nIHdpemFyZERpYWxvZyA9IG5ldyBXaXphcmREaWFsb2coZ2V0V2luZG93KCkuZ2V0U2hlbGwoKSwgd2l6YXJkKTsKKwkJCXdpemFyZERpYWxvZy5vcGVuKCk7CisJCX0KKwl9CisKKwkvKioKKwkgKiBUaGlzIGtlZXBzIHRyYWNrIG9mIHRoZSBhY3RpdmUgZWRpdG9yLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBJRWRpdG9yUGFydCBhY3RpdmVFZGl0b3JQYXJ0OworCisJLyoqCisJICogVGhpcyBrZWVwcyB0cmFjayBvZiB0aGUgY3VycmVudCBzZWxlY3Rpb24gcHJvdmlkZXIuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIElTZWxlY3Rpb25Qcm92aWRlciBzZWxlY3Rpb25Qcm92aWRlcjsKKworCS8qKgorCSAqIFRoaXMgYWN0aW9uIG9wZW5zIHRoZSBQcm9wZXJ0aWVzIHZpZXcuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIElBY3Rpb24gc2hvd1Byb3BlcnRpZXNWaWV3QWN0aW9uID0KKwkJbmV3IEFjdGlvbihEaXNlYXNlbW9kZWxzRWRpdG9yUGx1Z2luLklOU1RBTkNFLmdldFN0cmluZygiX1VJX1Nob3dQcm9wZXJ0aWVzVmlld19tZW51X2l0ZW0iKSkgLy8kTk9OLU5MUy0xJAorCQl7CisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyB2b2lkIHJ1bigpIHsKKwkJCQl0cnkgeworCQkJCQlnZXRQYWdlKCkuc2hvd1ZpZXcoIm9yZy5lY2xpcHNlLnVpLnZpZXdzLlByb3BlcnR5U2hlZXQiKTsgLy8kTk9OLU5MUy0xJAorCQkJCX0KKwkJCQljYXRjaCAoUGFydEluaXRFeGNlcHRpb24gZXhjZXB0aW9uKSB7CisJCQkJCURpc2Vhc2Vtb2RlbHNFZGl0b3JQbHVnaW4uSU5TVEFOQ0UubG9nKGV4Y2VwdGlvbik7CisJCQkJfQorCQkJfQorCQl9OworCisJLyoqCisJICogVGhpcyBhY3Rpb24gcmVmcmVzaGVzIHRoZSB2aWV3ZXIgb2YgdGhlIGN1cnJlbnQgZWRpdG9yIGlmIHRoZSBlZGl0b3IKKwkgKiBpbXBsZW1lbnRzIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnVpLnZpZXdlci5JVmlld2VyUHJvdmlkZXJ9LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBJQWN0aW9uIHJlZnJlc2hWaWV3ZXJBY3Rpb24gPQorCQluZXcgQWN0aW9uKERpc2Vhc2Vtb2RlbHNFZGl0b3JQbHVnaW4uSU5TVEFOQ0UuZ2V0U3RyaW5nKCJfVUlfUmVmcmVzaFZpZXdlcl9tZW51X2l0ZW0iKSkgLy8kTk9OLU5MUy0xJAorCQl7CisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyBib29sZWFuIGlzRW5hYmxlZCgpIHsKKwkJCQlyZXR1cm4gYWN0aXZlRWRpdG9yUGFydCBpbnN0YW5jZW9mIElWaWV3ZXJQcm92aWRlcjsKKwkJCX0KKworCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgdm9pZCBydW4oKSB7CisJCQkJaWYgKGFjdGl2ZUVkaXRvclBhcnQgaW5zdGFuY2VvZiBJVmlld2VyUHJvdmlkZXIpIHsKKwkJCQkJVmlld2VyIHZpZXdlciA9ICgoSVZpZXdlclByb3ZpZGVyKWFjdGl2ZUVkaXRvclBhcnQpLmdldFZpZXdlcigpOworCQkJCQlpZiAodmlld2VyICE9IG51bGwpIHsKKwkJCQkJCXZpZXdlci5yZWZyZXNoKCk7CisJCQkJCX0KKwkJCQl9CisJCQl9CisJCX07CisKKwkvKioKKwkgKiBUaGlzIHdpbGwgY29udGFpbiBvbmUge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmFjdGlvbi5DcmVhdGVDaGlsZEFjdGlvbn0gY29ycmVzcG9uZGluZyB0byBlYWNoIGRlc2NyaXB0b3IKKwkgKiBnZW5lcmF0ZWQgZm9yIHRoZSBjdXJyZW50IHNlbGVjdGlvbiBieSB0aGUgaXRlbSBwcm92aWRlci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgQ29sbGVjdGlvbjxJQWN0aW9uPiBjcmVhdGVDaGlsZEFjdGlvbnM7CisKKwkvKioKKwkgKiBUaGlzIGlzIHRoZSBtZW51IG1hbmFnZXIgaW50byB3aGljaCBtZW51IGNvbnRyaWJ1dGlvbiBpdGVtcyBzaG91bGQgYmUgYWRkZWQgZm9yIENyZWF0ZUNoaWxkIGFjdGlvbnMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIElNZW51TWFuYWdlciBjcmVhdGVDaGlsZE1lbnVNYW5hZ2VyOworCisJLyoqCisJICogVGhpcyB3aWxsIGNvbnRhaW4gb25lIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5hY3Rpb24uQ3JlYXRlU2libGluZ0FjdGlvbn0gY29ycmVzcG9uZGluZyB0byBlYWNoIGRlc2NyaXB0b3IKKwkgKiBnZW5lcmF0ZWQgZm9yIHRoZSBjdXJyZW50IHNlbGVjdGlvbiBieSB0aGUgaXRlbSBwcm92aWRlci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgQ29sbGVjdGlvbjxJQWN0aW9uPiBjcmVhdGVTaWJsaW5nQWN0aW9uczsKKworCS8qKgorCSAqIFRoaXMgaXMgdGhlIG1lbnUgbWFuYWdlciBpbnRvIHdoaWNoIG1lbnUgY29udHJpYnV0aW9uIGl0ZW1zIHNob3VsZCBiZSBhZGRlZCBmb3IgQ3JlYXRlU2libGluZyBhY3Rpb25zLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBJTWVudU1hbmFnZXIgY3JlYXRlU2libGluZ01lbnVNYW5hZ2VyOworCisJLyoqCisJICogVGhpcyBjcmVhdGVzIGFuIGluc3RhbmNlIG9mIHRoZSBjb250cmlidXRvci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRGlzZWFzZXByZWRpY2F0ZXNBY3Rpb25CYXJDb250cmlidXRvcigpIHsKKwkJc3VwZXIoQURESVRJT05TX0xBU1RfU1RZTEUpOworCQlsb2FkUmVzb3VyY2VBY3Rpb24gPSBuZXcgTG9hZFJlc291cmNlQWN0aW9uKCk7CisJCXZhbGlkYXRlQWN0aW9uID0gbmV3IFZhbGlkYXRlQWN0aW9uKCk7CisJCWNvbnRyb2xBY3Rpb24gPSBuZXcgQ29udHJvbEFjdGlvbigpOworCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyBTZXBhcmF0b3JzIGZvciBlZGl0b3IgYWRkaXRpb25zIHRvIHRoZSB0b29sIGJhci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBjb250cmlidXRlVG9Ub29sQmFyKElUb29sQmFyTWFuYWdlciB0b29sQmFyTWFuYWdlcikgeworCQl0b29sQmFyTWFuYWdlci5hZGQobmV3IFNlcGFyYXRvcigiZGlzZWFzZXByZWRpY2F0ZXMtc2V0dGluZ3MiKSk7IC8vJE5PTi1OTFMtMSQKKwkJdG9vbEJhck1hbmFnZXIuYWRkKG5ldyBTZXBhcmF0b3IoImRpc2Vhc2VwcmVkaWNhdGVzLWFkZGl0aW9ucyIpKTsgLy8kTk9OLU5MUy0xJAorCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyB0byB0aGUgbWVudSBiYXIgYSBtZW51IGFuZCBzb21lIHNlcGFyYXRvcnMgZm9yIGVkaXRvciBhZGRpdGlvbnMsCisJICogYXMgd2VsbCBhcyB0aGUgc3ViLW1lbnVzIGZvciBvYmplY3QgY3JlYXRpb24gaXRlbXMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgY29udHJpYnV0ZVRvTWVudShJTWVudU1hbmFnZXIgbWVudU1hbmFnZXIpIHsKKwkJc3VwZXIuY29udHJpYnV0ZVRvTWVudShtZW51TWFuYWdlcik7CisKKwkJSU1lbnVNYW5hZ2VyIHN1Ym1lbnVNYW5hZ2VyID0gbmV3IE1lbnVNYW5hZ2VyKERpc2Vhc2Vtb2RlbHNFZGl0b3JQbHVnaW4uSU5TVEFOQ0UuZ2V0U3RyaW5nKCJfVUlfRGlzZWFzZXByZWRpY2F0ZXNFZGl0b3JfbWVudSIpLCAib3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnByZWRpY2F0ZXMuZGlzZWFzZXByZWRpY2F0ZXNNZW51SUQiKTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCisJCW1lbnVNYW5hZ2VyLmluc2VydEFmdGVyKCJhZGRpdGlvbnMiLCBzdWJtZW51TWFuYWdlcik7IC8vJE5PTi1OTFMtMSQKKwkJc3VibWVudU1hbmFnZXIuYWRkKG5ldyBTZXBhcmF0b3IoInNldHRpbmdzIikpOyAvLyROT04tTkxTLTEkCisJCXN1Ym1lbnVNYW5hZ2VyLmFkZChuZXcgU2VwYXJhdG9yKCJhY3Rpb25zIikpOyAvLyROT04tTkxTLTEkCisJCXN1Ym1lbnVNYW5hZ2VyLmFkZChuZXcgU2VwYXJhdG9yKCJhZGRpdGlvbnMiKSk7IC8vJE5PTi1OTFMtMSQKKwkJc3VibWVudU1hbmFnZXIuYWRkKG5ldyBTZXBhcmF0b3IoImFkZGl0aW9ucy1lbmQiKSk7IC8vJE5PTi1OTFMtMSQKKworCQkvLyBQcmVwYXJlIGZvciBDcmVhdGVDaGlsZCBpdGVtIGFkZGl0aW9uIG9yIHJlbW92YWwuCisJCS8vCisJCWNyZWF0ZUNoaWxkTWVudU1hbmFnZXIgPSBuZXcgTWVudU1hbmFnZXIoRGlzZWFzZW1vZGVsc0VkaXRvclBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoIl9VSV9DcmVhdGVDaGlsZF9tZW51X2l0ZW0iKSk7IC8vJE5PTi1OTFMtMSQKKwkJc3VibWVudU1hbmFnZXIuaW5zZXJ0QmVmb3JlKCJhZGRpdGlvbnMiLCBjcmVhdGVDaGlsZE1lbnVNYW5hZ2VyKTsgLy8kTk9OLU5MUy0xJAorCisJCS8vIFByZXBhcmUgZm9yIENyZWF0ZVNpYmxpbmcgaXRlbSBhZGRpdGlvbiBvciByZW1vdmFsLgorCQkvLworCQljcmVhdGVTaWJsaW5nTWVudU1hbmFnZXIgPSBuZXcgTWVudU1hbmFnZXIoRGlzZWFzZW1vZGVsc0VkaXRvclBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoIl9VSV9DcmVhdGVTaWJsaW5nX21lbnVfaXRlbSIpKTsgLy8kTk9OLU5MUy0xJAorCQlzdWJtZW51TWFuYWdlci5pbnNlcnRCZWZvcmUoImFkZGl0aW9ucyIsIGNyZWF0ZVNpYmxpbmdNZW51TWFuYWdlcik7IC8vJE5PTi1OTFMtMSQKKworCQkvLyBGb3JjZSBhbiB1cGRhdGUgYmVjYXVzZSBFY2xpcHNlIGhpZGVzIGVtcHR5IG1lbnVzIG5vdy4KKwkJLy8KKwkJc3VibWVudU1hbmFnZXIuYWRkTWVudUxpc3RlbmVyCisJCQkobmV3IElNZW51TGlzdGVuZXIoKSB7CisJCQkJIHB1YmxpYyB2b2lkIG1lbnVBYm91dFRvU2hvdyhJTWVudU1hbmFnZXIgbWVudU1hbmFnZXIpIHsKKwkJCQkJIG1lbnVNYW5hZ2VyLnVwZGF0ZUFsbCh0cnVlKTsKKwkJCQkgfQorCQkJIH0pOworCisJCWFkZEdsb2JhbEFjdGlvbnMoc3VibWVudU1hbmFnZXIpOworCX0KKworCS8qKgorCSAqIFdoZW4gdGhlIGFjdGl2ZSBlZGl0b3IgY2hhbmdlcywgdGhpcyByZW1lbWJlcnMgdGhlIGNoYW5nZSBhbmQgcmVnaXN0ZXJzIHdpdGggaXQgYXMgYSBzZWxlY3Rpb24gcHJvdmlkZXIuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgc2V0QWN0aXZlRWRpdG9yKElFZGl0b3JQYXJ0IHBhcnQpIHsKKwkJc3VwZXIuc2V0QWN0aXZlRWRpdG9yKHBhcnQpOworCQlhY3RpdmVFZGl0b3JQYXJ0ID0gcGFydDsKKworCQkvLyBTd2l0Y2ggdG8gdGhlIG5ldyBzZWxlY3Rpb24gcHJvdmlkZXIuCisJCS8vCisJCWlmIChzZWxlY3Rpb25Qcm92aWRlciAhPSBudWxsKSB7CisJCQlzZWxlY3Rpb25Qcm92aWRlci5yZW1vdmVTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIodGhpcyk7CisJCX0KKwkJaWYgKHBhcnQgPT0gbnVsbCkgeworCQkJc2VsZWN0aW9uUHJvdmlkZXIgPSBudWxsOworCQl9CisJCWVsc2UgeworCQkJc2VsZWN0aW9uUHJvdmlkZXIgPSBwYXJ0LmdldFNpdGUoKS5nZXRTZWxlY3Rpb25Qcm92aWRlcigpOworCQkJc2VsZWN0aW9uUHJvdmlkZXIuYWRkU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyKHRoaXMpOworCisJCQkvLyBGYWtlIGEgc2VsZWN0aW9uIGNoYW5nZWQgZXZlbnQgdG8gdXBkYXRlIHRoZSBtZW51cy4KKwkJCS8vCisJCQlpZiAoc2VsZWN0aW9uUHJvdmlkZXIuZ2V0U2VsZWN0aW9uKCkgIT0gbnVsbCkgeworCQkJCXNlbGVjdGlvbkNoYW5nZWQobmV3IFNlbGVjdGlvbkNoYW5nZWRFdmVudChzZWxlY3Rpb25Qcm92aWRlciwgc2VsZWN0aW9uUHJvdmlkZXIuZ2V0U2VsZWN0aW9uKCkpKTsKKwkJCX0KKwkJfQorCX0KKworCS8qKgorCSAqIFRoaXMgaW1wbGVtZW50cyB7QGxpbmsgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyfSwKKwkgKiBoYW5kbGluZyB7QGxpbmsgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5TZWxlY3Rpb25DaGFuZ2VkRXZlbnR9cyBieSBxdWVyeWluZyBmb3IgdGhlIGNoaWxkcmVuIGFuZCBzaWJsaW5ncworCSAqIHRoYXQgY2FuIGJlIGFkZGVkIHRvIHRoZSBzZWxlY3RlZCBvYmplY3QgYW5kIHVwZGF0aW5nIHRoZSBtZW51cyBhY2NvcmRpbmdseS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZWxlY3Rpb25DaGFuZ2VkKFNlbGVjdGlvbkNoYW5nZWRFdmVudCBldmVudCkgeworCQkvLyBSZW1vdmUgYW55IG1lbnUgaXRlbXMgZm9yIG9sZCBzZWxlY3Rpb24uCisJCS8vCisJCWlmIChjcmVhdGVDaGlsZE1lbnVNYW5hZ2VyICE9IG51bGwpIHsKKwkJCWRlcG9wdWxhdGVNYW5hZ2VyKGNyZWF0ZUNoaWxkTWVudU1hbmFnZXIsIGNyZWF0ZUNoaWxkQWN0aW9ucyk7CisJCX0KKwkJaWYgKGNyZWF0ZVNpYmxpbmdNZW51TWFuYWdlciAhPSBudWxsKSB7CisJCQlkZXBvcHVsYXRlTWFuYWdlcihjcmVhdGVTaWJsaW5nTWVudU1hbmFnZXIsIGNyZWF0ZVNpYmxpbmdBY3Rpb25zKTsKKwkJfQorCisJCS8vIFF1ZXJ5IHRoZSBuZXcgc2VsZWN0aW9uIGZvciBhcHByb3ByaWF0ZSBuZXcgY2hpbGQvc2libGluZyBkZXNjcmlwdG9ycworCQkvLworCQlDb2xsZWN0aW9uPD8+IG5ld0NoaWxkRGVzY3JpcHRvcnMgPSBudWxsOworCQlDb2xsZWN0aW9uPD8+IG5ld1NpYmxpbmdEZXNjcmlwdG9ycyA9IG51bGw7CisKKwkJSVNlbGVjdGlvbiBzZWxlY3Rpb24gPSBldmVudC5nZXRTZWxlY3Rpb24oKTsKKwkJaWYgKHNlbGVjdGlvbiBpbnN0YW5jZW9mIElTdHJ1Y3R1cmVkU2VsZWN0aW9uICYmICgoSVN0cnVjdHVyZWRTZWxlY3Rpb24pc2VsZWN0aW9uKS5zaXplKCkgPT0gMSkgeworCQkJT2JqZWN0IG9iamVjdCA9ICgoSVN0cnVjdHVyZWRTZWxlY3Rpb24pc2VsZWN0aW9uKS5nZXRGaXJzdEVsZW1lbnQoKTsKKworCQkJRWRpdGluZ0RvbWFpbiBkb21haW4gPSAoKElFZGl0aW5nRG9tYWluUHJvdmlkZXIpYWN0aXZlRWRpdG9yUGFydCkuZ2V0RWRpdGluZ0RvbWFpbigpOworCisJCQluZXdDaGlsZERlc2NyaXB0b3JzID0gZG9tYWluLmdldE5ld0NoaWxkRGVzY3JpcHRvcnMob2JqZWN0LCBudWxsKTsKKwkJCW5ld1NpYmxpbmdEZXNjcmlwdG9ycyA9IGRvbWFpbi5nZXROZXdDaGlsZERlc2NyaXB0b3JzKG51bGwsIG9iamVjdCk7CisJCX0KKworCQkvLyBHZW5lcmF0ZSBhY3Rpb25zIGZvciBzZWxlY3Rpb247IHBvcHVsYXRlIGFuZCByZWRyYXcgdGhlIG1lbnVzLgorCQkvLworCQljcmVhdGVDaGlsZEFjdGlvbnMgPSBnZW5lcmF0ZUNyZWF0ZUNoaWxkQWN0aW9ucyhuZXdDaGlsZERlc2NyaXB0b3JzLCBzZWxlY3Rpb24pOworCQljcmVhdGVTaWJsaW5nQWN0aW9ucyA9IGdlbmVyYXRlQ3JlYXRlU2libGluZ0FjdGlvbnMobmV3U2libGluZ0Rlc2NyaXB0b3JzLCBzZWxlY3Rpb24pOworCisJCWlmIChjcmVhdGVDaGlsZE1lbnVNYW5hZ2VyICE9IG51bGwpIHsKKwkJCXBvcHVsYXRlTWFuYWdlcihjcmVhdGVDaGlsZE1lbnVNYW5hZ2VyLCBjcmVhdGVDaGlsZEFjdGlvbnMsIG51bGwpOworCQkJY3JlYXRlQ2hpbGRNZW51TWFuYWdlci51cGRhdGUodHJ1ZSk7CisJCX0KKwkJaWYgKGNyZWF0ZVNpYmxpbmdNZW51TWFuYWdlciAhPSBudWxsKSB7CisJCQlwb3B1bGF0ZU1hbmFnZXIoY3JlYXRlU2libGluZ01lbnVNYW5hZ2VyLCBjcmVhdGVTaWJsaW5nQWN0aW9ucywgbnVsbCk7CisJCQljcmVhdGVTaWJsaW5nTWVudU1hbmFnZXIudXBkYXRlKHRydWUpOworCQl9CisJfQorCisJLyoqCisJICogVGhpcyBnZW5lcmF0ZXMgYSB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkuYWN0aW9uLkNyZWF0ZUNoaWxkQWN0aW9ufSBmb3IgZWFjaCBvYmplY3QgaW4gPGNvZGU+ZGVzY3JpcHRvcnM8L2NvZGU+LAorCSAqIGFuZCByZXR1cm5zIHRoZSBjb2xsZWN0aW9uIG9mIHRoZXNlIGFjdGlvbnMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIENvbGxlY3Rpb248SUFjdGlvbj4gZ2VuZXJhdGVDcmVhdGVDaGlsZEFjdGlvbnMoQ29sbGVjdGlvbjw/PiBkZXNjcmlwdG9ycywgSVNlbGVjdGlvbiBzZWxlY3Rpb24pIHsKKwkJQ29sbGVjdGlvbjxJQWN0aW9uPiBhY3Rpb25zID0gbmV3IEFycmF5TGlzdDxJQWN0aW9uPigpOworCQlpZiAoZGVzY3JpcHRvcnMgIT0gbnVsbCkgeworCQkJZm9yIChPYmplY3QgZGVzY3JpcHRvciA6IGRlc2NyaXB0b3JzKSB7CisJCQkJYWN0aW9ucy5hZGQobmV3IENyZWF0ZUNoaWxkQWN0aW9uKGFjdGl2ZUVkaXRvclBhcnQsIHNlbGVjdGlvbiwgZGVzY3JpcHRvcikpOworCQkJfQorCQl9CisJCXJldHVybiBhY3Rpb25zOworCX0KKworCS8qKgorCSAqIFRoaXMgZ2VuZXJhdGVzIGEge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmFjdGlvbi5DcmVhdGVTaWJsaW5nQWN0aW9ufSBmb3IgZWFjaCBvYmplY3QgaW4gPGNvZGU+ZGVzY3JpcHRvcnM8L2NvZGU+LAorCSAqIGFuZCByZXR1cm5zIHRoZSBjb2xsZWN0aW9uIG9mIHRoZXNlIGFjdGlvbnMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIENvbGxlY3Rpb248SUFjdGlvbj4gZ2VuZXJhdGVDcmVhdGVTaWJsaW5nQWN0aW9ucyhDb2xsZWN0aW9uPD8+IGRlc2NyaXB0b3JzLCBJU2VsZWN0aW9uIHNlbGVjdGlvbikgeworCQlDb2xsZWN0aW9uPElBY3Rpb24+IGFjdGlvbnMgPSBuZXcgQXJyYXlMaXN0PElBY3Rpb24+KCk7CisJCWlmIChkZXNjcmlwdG9ycyAhPSBudWxsKSB7CisJCQlmb3IgKE9iamVjdCBkZXNjcmlwdG9yIDogZGVzY3JpcHRvcnMpIHsKKwkJCQlhY3Rpb25zLmFkZChuZXcgQ3JlYXRlU2libGluZ0FjdGlvbihhY3RpdmVFZGl0b3JQYXJ0LCBzZWxlY3Rpb24sIGRlc2NyaXB0b3IpKTsKKwkJCX0KKwkJfQorCQlyZXR1cm4gYWN0aW9uczsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHBvcHVsYXRlcyB0aGUgc3BlY2lmaWVkIDxjb2RlPm1hbmFnZXI8L2NvZGU+IHdpdGgge0BsaW5rIG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5BY3Rpb25Db250cmlidXRpb25JdGVtfXMKKwkgKiBiYXNlZCBvbiB0aGUge0BsaW5rIG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JQWN0aW9ufXMgY29udGFpbmVkIGluIHRoZSA8Y29kZT5hY3Rpb25zPC9jb2RlPiBjb2xsZWN0aW9uLAorCSAqIGJ5IGluc2VydGluZyB0aGVtIGJlZm9yZSB0aGUgc3BlY2lmaWVkIGNvbnRyaWJ1dGlvbiBpdGVtIDxjb2RlPmNvbnRyaWJ1dGlvbklEPC9jb2RlPi4KKwkgKiBJZiA8Y29kZT5jb250cmlidXRpb25JRDwvY29kZT4gaXMgPGNvZGU+bnVsbDwvY29kZT4sIHRoZXkgYXJlIHNpbXBseSBhZGRlZC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBwb3B1bGF0ZU1hbmFnZXIoSUNvbnRyaWJ1dGlvbk1hbmFnZXIgbWFuYWdlciwgQ29sbGVjdGlvbjw/IGV4dGVuZHMgSUFjdGlvbj4gYWN0aW9ucywgU3RyaW5nIGNvbnRyaWJ1dGlvbklEKSB7CisJCWlmIChhY3Rpb25zICE9IG51bGwpIHsKKwkJCWZvciAoSUFjdGlvbiBhY3Rpb24gOiBhY3Rpb25zKSB7CisJCQkJaWYgKGNvbnRyaWJ1dGlvbklEICE9IG51bGwpIHsKKwkJCQkJbWFuYWdlci5pbnNlcnRCZWZvcmUoY29udHJpYnV0aW9uSUQsIGFjdGlvbik7CisJCQkJfQorCQkJCWVsc2UgeworCQkJCQltYW5hZ2VyLmFkZChhY3Rpb24pOworCQkJCX0KKwkJCX0KKwkJfQorCX0KKwkJCisJLyoqCisJICogVGhpcyByZW1vdmVzIGZyb20gdGhlIHNwZWNpZmllZCA8Y29kZT5tYW5hZ2VyPC9jb2RlPiBhbGwge0BsaW5rIG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5BY3Rpb25Db250cmlidXRpb25JdGVtfXMKKwkgKiBiYXNlZCBvbiB0aGUge0BsaW5rIG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JQWN0aW9ufXMgY29udGFpbmVkIGluIHRoZSA8Y29kZT5hY3Rpb25zPC9jb2RlPiBjb2xsZWN0aW9uLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIGRlcG9wdWxhdGVNYW5hZ2VyKElDb250cmlidXRpb25NYW5hZ2VyIG1hbmFnZXIsIENvbGxlY3Rpb248PyBleHRlbmRzIElBY3Rpb24+IGFjdGlvbnMpIHsKKwkJaWYgKGFjdGlvbnMgIT0gbnVsbCkgeworCQkJSUNvbnRyaWJ1dGlvbkl0ZW1bXSBpdGVtcyA9IG1hbmFnZXIuZ2V0SXRlbXMoKTsKKwkJCWZvciAoaW50IGkgPSAwOyBpIDwgaXRlbXMubGVuZ3RoOyBpKyspIHsKKwkJCQkvLyBMb29rIGludG8gU3ViQ29udHJpYnV0aW9uSXRlbXMKKwkJCQkvLworCQkJCUlDb250cmlidXRpb25JdGVtIGNvbnRyaWJ1dGlvbkl0ZW0gPSBpdGVtc1tpXTsKKwkJCQl3aGlsZSAoY29udHJpYnV0aW9uSXRlbSBpbnN0YW5jZW9mIFN1YkNvbnRyaWJ1dGlvbkl0ZW0pIHsKKwkJCQkJY29udHJpYnV0aW9uSXRlbSA9ICgoU3ViQ29udHJpYnV0aW9uSXRlbSljb250cmlidXRpb25JdGVtKS5nZXRJbm5lckl0ZW0oKTsKKwkJCQl9CisKKwkJCQkvLyBEZWxldGUgdGhlIEFjdGlvbkNvbnRyaWJ1dGlvbkl0ZW1zIHdpdGggbWF0Y2hpbmcgYWN0aW9uLgorCQkJCS8vCisJCQkJaWYgKGNvbnRyaWJ1dGlvbkl0ZW0gaW5zdGFuY2VvZiBBY3Rpb25Db250cmlidXRpb25JdGVtKSB7CisJCQkJCUlBY3Rpb24gYWN0aW9uID0gKChBY3Rpb25Db250cmlidXRpb25JdGVtKWNvbnRyaWJ1dGlvbkl0ZW0pLmdldEFjdGlvbigpOworCQkJCQlpZiAoYWN0aW9ucy5jb250YWlucyhhY3Rpb24pKSB7CisJCQkJCQltYW5hZ2VyLnJlbW92ZShjb250cmlidXRpb25JdGVtKTsKKwkJCQkJfQorCQkJCX0KKwkJCX0KKwkJfQorCX0KKworCS8qKgorCSAqIFRoaXMgcG9wdWxhdGVzIHRoZSBwb3AtdXAgbWVudSBiZWZvcmUgaXQgYXBwZWFycy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBtZW51QWJvdXRUb1Nob3coSU1lbnVNYW5hZ2VyIG1lbnVNYW5hZ2VyKSB7CisJCXN1cGVyLm1lbnVBYm91dFRvU2hvdyhtZW51TWFuYWdlcik7CisJCU1lbnVNYW5hZ2VyIHN1Ym1lbnVNYW5hZ2VyID0gbnVsbDsKKworCQlzdWJtZW51TWFuYWdlciA9IG5ldyBNZW51TWFuYWdlcihEaXNlYXNlbW9kZWxzRWRpdG9yUGx1Z2luLklOU1RBTkNFLmdldFN0cmluZygiX1VJX0NyZWF0ZUNoaWxkX21lbnVfaXRlbSIpKTsgLy8kTk9OLU5MUy0xJAorCQlwb3B1bGF0ZU1hbmFnZXIoc3VibWVudU1hbmFnZXIsIGNyZWF0ZUNoaWxkQWN0aW9ucywgbnVsbCk7CisJCW1lbnVNYW5hZ2VyLmluc2VydEJlZm9yZSgiZWRpdCIsIHN1Ym1lbnVNYW5hZ2VyKTsgLy8kTk9OLU5MUy0xJAorCisJCXN1Ym1lbnVNYW5hZ2VyID0gbmV3IE1lbnVNYW5hZ2VyKERpc2Vhc2Vtb2RlbHNFZGl0b3JQbHVnaW4uSU5TVEFOQ0UuZ2V0U3RyaW5nKCJfVUlfQ3JlYXRlU2libGluZ19tZW51X2l0ZW0iKSk7IC8vJE5PTi1OTFMtMSQKKwkJcG9wdWxhdGVNYW5hZ2VyKHN1Ym1lbnVNYW5hZ2VyLCBjcmVhdGVTaWJsaW5nQWN0aW9ucywgbnVsbCk7CisJCW1lbnVNYW5hZ2VyLmluc2VydEJlZm9yZSgiZWRpdCIsIHN1Ym1lbnVNYW5hZ2VyKTsgLy8kTk9OLU5MUy0xJAorCX0KKworCS8qKgorCSAqIFRoaXMgaW5zZXJ0cyBnbG9iYWwgYWN0aW9ucyBiZWZvcmUgdGhlICJhZGRpdGlvbnMtZW5kIiBzZXBhcmF0b3IuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgYWRkR2xvYmFsQWN0aW9ucyhJTWVudU1hbmFnZXIgbWVudU1hbmFnZXIpIHsKKwkJbWVudU1hbmFnZXIuaW5zZXJ0QWZ0ZXIoImFkZGl0aW9ucy1lbmQiLCBuZXcgU2VwYXJhdG9yKCJ1aS1hY3Rpb25zIikpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKKwkJbWVudU1hbmFnZXIuaW5zZXJ0QWZ0ZXIoInVpLWFjdGlvbnMiLCBzaG93UHJvcGVydGllc1ZpZXdBY3Rpb24pOyAvLyROT04tTkxTLTEkCisKKwkJcmVmcmVzaFZpZXdlckFjdGlvbi5zZXRFbmFibGVkKHJlZnJlc2hWaWV3ZXJBY3Rpb24uaXNFbmFibGVkKCkpOwkJCisJCW1lbnVNYW5hZ2VyLmluc2VydEFmdGVyKCJ1aS1hY3Rpb25zIiwgcmVmcmVzaFZpZXdlckFjdGlvbik7IC8vJE5PTi1OTFMtMSQKKworCQlzdXBlci5hZGRHbG9iYWxBY3Rpb25zKG1lbnVNYW5hZ2VyKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGVuc3VyZXMgdGhhdCBhIGRlbGV0ZSBhY3Rpb24gd2lsbCBjbGVhbiB1cCBhbGwgcmVmZXJlbmNlcyB0byBkZWxldGVkIG9iamVjdHMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIGJvb2xlYW4gcmVtb3ZlQWxsUmVmZXJlbmNlc09uRGVsZXRlKCkgeworCQlyZXR1cm4gdHJ1ZTsKKwl9CisKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3ByZWRpY2F0ZXMvZGlzZWFzZXByZWRpY2F0ZXMvcHJlc2VudGF0aW9uL0Rpc2Vhc2VwcmVkaWNhdGVzRWRpdG9yLmphdmEgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3ByZWRpY2F0ZXMvZGlzZWFzZXByZWRpY2F0ZXMvcHJlc2VudGF0aW9uL0Rpc2Vhc2VwcmVkaWNhdGVzRWRpdG9yLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODg2NGZmZQotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvcHJlZGljYXRlcy9kaXNlYXNlcHJlZGljYXRlcy9wcmVzZW50YXRpb24vRGlzZWFzZXByZWRpY2F0ZXNFZGl0b3IuamF2YQpAQCAtMCwwICsxLDE3MzAgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnByZWRpY2F0ZXMuZGlzZWFzZXByZWRpY2F0ZXMucHJlc2VudGF0aW9uOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAKKyAqIENvcHlyaWdodCAoYykgMjAxMSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4gCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIAorICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wIAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQgCisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbCAKKyAqIAorICogQ29udHJpYnV0b3JzOiAKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCitpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtOworCitpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbnM7CitpbXBvcnQgamF2YS51dGlsLkV2ZW50T2JqZWN0OworaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOworaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKK2ltcG9ydCBqYXZhLnV0aWwuTGlua2VkSGFzaE1hcDsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuTWFwOworCitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQcm9ncmVzc01vbml0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLk51bGxQcm9ncmVzc01vbml0b3I7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSU1lbnVMaXN0ZW5lcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSU1lbnVNYW5hZ2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JU3RhdHVzTGluZU1hbmFnZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklUb29sQmFyTWFuYWdlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uTWVudU1hbmFnZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLlNlcGFyYXRvcjsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmRpYWxvZ3MuTWVzc2FnZURpYWxvZzsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5kaWFsb2dzLlByb2dyZXNzTW9uaXRvckRpYWxvZzsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuQ29sdW1uV2VpZ2h0RGF0YTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvblByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVN0cnVjdHVyZWRTZWxlY3Rpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5MaXN0Vmlld2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuU2VsZWN0aW9uQ2hhbmdlZEV2ZW50OworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuU3RydWN0dXJlZFNlbGVjdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlN0cnVjdHVyZWRWaWV3ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5UYWJsZUxheW91dDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlRhYmxlVmlld2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuVHJlZVZpZXdlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlZpZXdlcjsKKworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5TV1Q7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuY3VzdG9tLkNUYWJGb2xkZXI7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZG5kLkRORDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZG5kLlRyYW5zZmVyOworCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5Db250cm9sQWRhcHRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLkNvbnRyb2xFdmVudDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ncmFwaGljcy5Qb2ludDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5sYXlvdXQuRmlsbExheW91dDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5NZW51OworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlRhYmxlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlRhYmxlQ29sdW1uOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlRyZWU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuVHJlZUNvbHVtbjsKKworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklBY3Rpb25CYXJzOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklFZGl0b3JJbnB1dDsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5JRWRpdG9yUGFydDsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5JRWRpdG9yU2l0ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5JUGFydExpc3RlbmVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2hQYXJ0OworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLlBhcnRJbml0RXhjZXB0aW9uOworCitpbXBvcnQgb3JnLmVjbGlwc2UudWkucGFydC5NdWx0aVBhZ2VFZGl0b3JQYXJ0OworCitpbXBvcnQgb3JnLmVjbGlwc2UudWkudmlld3MuY29udGVudG91dGxpbmUuQ29udGVudE91dGxpbmU7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkudmlld3MuY29udGVudG91dGxpbmUuQ29udGVudE91dGxpbmVQYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLnZpZXdzLmNvbnRlbnRvdXRsaW5lLklDb250ZW50T3V0bGluZVBhZ2U7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS52aWV3cy5wcm9wZXJ0aWVzLklQcm9wZXJ0eVNoZWV0UGFnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS52aWV3cy5wcm9wZXJ0aWVzLlByb3BlcnR5U2hlZXQ7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkudmlld3MucHJvcGVydGllcy5Qcm9wZXJ0eVNoZWV0UGFnZTsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24uY29tbWFuZC5CYXNpY0NvbW1hbmRTdGFjazsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLmNvbW1hbmQuQ29tbWFuZDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLmNvbW1hbmQuQ29tbWFuZFN0YWNrOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24uY29tbWFuZC5Db21tYW5kU3RhY2tMaXN0ZW5lcjsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LkFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbjsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udWkuVmlld2VyUGFuZTsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udWkuZWRpdG9yLlByb2JsZW1FZGl0b3JQYXJ0OworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51aS52aWV3ZXIuSVZpZXdlclByb3ZpZGVyOworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLkJhc2ljRGlhZ25vc3RpYzsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuRGlhZ25vc3RpYzsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuVVJJOworCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUucmVzb3VyY2UuUmVzb3VyY2U7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUudXRpbC5FQ29udGVudEFkYXB0ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnV0aWwuRWNvcmVVdGlsOworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQuZG9tYWluLkFkYXB0ZXJGYWN0b3J5RWRpdGluZ0RvbWFpbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5kb21haW4uRWRpdGluZ0RvbWFpbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5kb21haW4uSUVkaXRpbmdEb21haW5Qcm92aWRlcjsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkFkYXB0ZXJGYWN0b3J5SXRlbURlbGVnYXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5Db21wb3NlZEFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLlJlZmxlY3RpdmVJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeTsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLnJlc291cmNlLlJlc291cmNlSXRlbVByb3ZpZGVyQWRhcHRlckZhY3Rvcnk7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5hY3Rpb24uRWRpdGluZ0RvbWFpbkFjdGlvbkJhckNvbnRyaWJ1dG9yOworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkuY2VsbGVkaXRvci5BZGFwdGVyRmFjdG9yeVRyZWVFZGl0b3I7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5kbmQuRWRpdGluZ0RvbWFpblZpZXdlckRyb3BBZGFwdGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmRuZC5Mb2NhbFRyYW5zZmVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmRuZC5WaWV3ZXJEcmFnQWRhcHRlcjsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLnByb3ZpZGVyLkFkYXB0ZXJGYWN0b3J5Q29udGVudFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLnByb3ZpZGVyLkFkYXB0ZXJGYWN0b3J5TGFiZWxQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5wcm92aWRlci5VbndyYXBwaW5nU2VsZWN0aW9uUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkudXRpbC5FZGl0VUlVdGlsOworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkudmlldy5FeHRlbmRlZFByb3BlcnR5U2hlZXRQYWdlOworCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnByZWRpY2F0ZXMuZGlzZWFzZXByZWRpY2F0ZXMucHJvdmlkZXIuRGlzZWFzZXByZWRpY2F0ZXNJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeTsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udWkuVVJJRWRpdG9ySW5wdXQ7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUucHJvdmlkZXIuRWNvcmVJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeTsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLm9wZXJhdGlvbi5JUnVubmFibGVXaXRoUHJvZ3Jlc3M7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLnByb3ZpZGVyLkNvbW1vbkl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5OworCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLnByb3ZpZGVyLkdyYXBoSXRlbVByb3ZpZGVyQWRhcHRlckZhY3Rvcnk7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubG9nZ2VyLnByb3ZpZGVyLkxvZ2dlckl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5wcm92aWRlci5Nb2RlbEl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5OworCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLnByb3ZpZGVyLk1vZGlmaWVySXRlbVByb3ZpZGVyQWRhcHRlckZhY3Rvcnk7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlLnByb3ZpZGVyLlByZWRpY2F0ZUl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5OworCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNjZW5hcmlvLnByb3ZpZGVyLlNjZW5hcmlvSXRlbVByb3ZpZGVyQWRhcHRlckZhY3Rvcnk7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2VxdWVuY2VyLnByb3ZpZGVyLlNlcXVlbmNlckl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5OworCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNvbHZlci5wcm92aWRlci5Tb2x2ZXJJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeTsKKworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLnByb3ZpZGVyLkxhYmVsc0l0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5OworCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLnByZXNlbnRhdGlvbi5EaXNlYXNlbW9kZWxzRWRpdG9yQWR2aXNvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQucHJlc2VudGF0aW9uLkRpc2Vhc2Vtb2RlbHNFZGl0b3JQbHVnaW47CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQucHJvdmlkZXIuU3RhbmRhcmRJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeTsKKworCisvKioKKyAqIFRoaXMgaXMgYW4gZXhhbXBsZSBvZiBhIERpc2Vhc2VwcmVkaWNhdGVzIG1vZGVsIGVkaXRvci4KKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIERpc2Vhc2VwcmVkaWNhdGVzRWRpdG9yCisJZXh0ZW5kcyBNdWx0aVBhZ2VFZGl0b3JQYXJ0CisJaW1wbGVtZW50cyBJRWRpdGluZ0RvbWFpblByb3ZpZGVyLCBJU2VsZWN0aW9uUHJvdmlkZXIsIElNZW51TGlzdGVuZXIsIElWaWV3ZXJQcm92aWRlciB7CisJLyoqCisJICogVGhlIGZpbHRlcnMgZm9yIGZpbGUgZXh0ZW5zaW9ucyBzdXBwb3J0ZWQgYnkgdGhlIGVkaXRvci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIExpc3Q8U3RyaW5nPiBGSUxFX0VYVEVOU0lPTl9GSUxURVJTID0gcHJlZml4RXh0ZW5zaW9ucyhEaXNlYXNlcHJlZGljYXRlc01vZGVsV2l6YXJkLkZJTEVfRVhURU5TSU9OUywgIiouIik7IC8vJE5PTi1OTFMtMSQKKwkKKwkvKioKKwkgKiBSZXR1cm5zIGEgbmV3IHVubW9kaWZpYWJsZSBsaXN0IGNvbnRhaW5pbmcgcHJlZml4ZWQgdmVyc2lvbnMgb2YgdGhlIGV4dGVuc2lvbnMgaW4gdGhlIGdpdmVuIGxpc3QuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJpdmF0ZSBzdGF0aWMgTGlzdDxTdHJpbmc+IHByZWZpeEV4dGVuc2lvbnMoTGlzdDxTdHJpbmc+IGV4dGVuc2lvbnMsIFN0cmluZyBwcmVmaXgpIHsKKwkJTGlzdDxTdHJpbmc+IHJlc3VsdCA9IG5ldyBBcnJheUxpc3Q8U3RyaW5nPigpOworCQlmb3IgKFN0cmluZyBleHRlbnNpb24gOiBleHRlbnNpb25zKSB7CisJCQlyZXN1bHQuYWRkKHByZWZpeCArIGV4dGVuc2lvbik7CisJCX0KKwkJcmV0dXJuIENvbGxlY3Rpb25zLnVubW9kaWZpYWJsZUxpc3QocmVzdWx0KTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGtlZXBzIHRyYWNrIG9mIHRoZSBlZGl0aW5nIGRvbWFpbiB0aGF0IGlzIHVzZWQgdG8gdHJhY2sgYWxsIGNoYW5nZXMgdG8gdGhlIG1vZGVsLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBBZGFwdGVyRmFjdG9yeUVkaXRpbmdEb21haW4gZWRpdGluZ0RvbWFpbjsKKworCS8qKgorCSAqIFRoaXMgaXMgdGhlIG9uZSBhZGFwdGVyIGZhY3RvcnkgdXNlZCBmb3IgcHJvdmlkaW5nIHZpZXdzIG9mIHRoZSBtb2RlbC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgQ29tcG9zZWRBZGFwdGVyRmFjdG9yeSBhZGFwdGVyRmFjdG9yeTsKKworCS8qKgorCSAqIFRoaXMgaXMgdGhlIGNvbnRlbnQgb3V0bGluZSBwYWdlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBJQ29udGVudE91dGxpbmVQYWdlIGNvbnRlbnRPdXRsaW5lUGFnZTsKKworCS8qKgorCSAqIFRoaXMgaXMgYSBrbHVkZ2UuLi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgSVN0YXR1c0xpbmVNYW5hZ2VyIGNvbnRlbnRPdXRsaW5lU3RhdHVzTGluZU1hbmFnZXI7CisKKwkvKioKKwkgKiBUaGlzIGlzIHRoZSBjb250ZW50IG91dGxpbmUgcGFnZSdzIHZpZXdlci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgVHJlZVZpZXdlciBjb250ZW50T3V0bGluZVZpZXdlcjsKKworCS8qKgorCSAqIFRoaXMgaXMgdGhlIHByb3BlcnR5IHNoZWV0IHBhZ2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIFByb3BlcnR5U2hlZXRQYWdlIHByb3BlcnR5U2hlZXRQYWdlOworCisJLyoqCisJICogVGhpcyBpcyB0aGUgdmlld2VyIHRoYXQgc2hhZG93cyB0aGUgc2VsZWN0aW9uIGluIHRoZSBjb250ZW50IG91dGxpbmUuCisJICogVGhlIHBhcmVudCByZWxhdGlvbiBtdXN0IGJlIGNvcnJlY3RseSBkZWZpbmVkIGZvciB0aGlzIHRvIHdvcmsuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIFRyZWVWaWV3ZXIgc2VsZWN0aW9uVmlld2VyOworCisJLyoqCisJICogVGhpcyBpbnZlcnRzIHRoZSByb2xsIG9mIHBhcmVudCBhbmQgY2hpbGQgaW4gdGhlIGNvbnRlbnQgcHJvdmlkZXIgYW5kIHNob3cgcGFyZW50cyBhcyBhIHRyZWUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIFRyZWVWaWV3ZXIgcGFyZW50Vmlld2VyOworCisJLyoqCisJICogVGhpcyBzaG93cyBob3cgYSB0cmVlIHZpZXcgd29ya3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIFRyZWVWaWV3ZXIgdHJlZVZpZXdlcjsKKworCS8qKgorCSAqIFRoaXMgc2hvd3MgaG93IGEgbGlzdCB2aWV3IHdvcmtzLgorCSAqIEEgbGlzdCB2aWV3ZXIgZG9lc24ndCBzdXBwb3J0IGljb25zLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBMaXN0Vmlld2VyIGxpc3RWaWV3ZXI7CisKKwkvKioKKwkgKiBUaGlzIHNob3dzIGhvdyBhIHRhYmxlIHZpZXcgd29ya3MuCisJICogQSB0YWJsZSBjYW4gYmUgdXNlZCBhcyBhIGxpc3Qgd2l0aCBpY29ucy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgVGFibGVWaWV3ZXIgdGFibGVWaWV3ZXI7CisKKwkvKioKKwkgKiBUaGlzIHNob3dzIGhvdyBhIHRyZWUgdmlldyB3aXRoIGNvbHVtbnMgd29ya3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIFRyZWVWaWV3ZXIgdHJlZVZpZXdlcldpdGhDb2x1bW5zOworCisJLyoqCisJICogVGhpcyBrZWVwcyB0cmFjayBvZiB0aGUgYWN0aXZlIHZpZXdlciBwYW5lLCBpbiB0aGUgYm9vay4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgVmlld2VyUGFuZSBjdXJyZW50Vmlld2VyUGFuZTsKKworCS8qKgorCSAqIFRoaXMga2VlcHMgdHJhY2sgb2YgdGhlIGFjdGl2ZSBjb250ZW50IHZpZXdlciwgd2hpY2ggbWF5IGJlIGVpdGhlciBvbmUgb2YgdGhlIHZpZXdlcnMgaW4gdGhlIHBhZ2VzIG9yIHRoZSBjb250ZW50IG91dGxpbmUgdmlld2VyLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBWaWV3ZXIgY3VycmVudFZpZXdlcjsKKworCS8qKgorCSAqIFRoaXMgbGlzdGVucyB0byB3aGljaCBldmVyIHZpZXdlciBpcyBhY3RpdmUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIElTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIgc2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyOworCisJLyoqCisJICogVGhpcyBrZWVwcyB0cmFjayBvZiBhbGwgdGhlIHtAbGluayBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXJ9cyB0aGF0IGFyZSBsaXN0ZW5pbmcgdG8gdGhpcyBlZGl0b3IuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIENvbGxlY3Rpb248SVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcj4gc2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVycyA9IG5ldyBBcnJheUxpc3Q8SVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcj4oKTsKKworCS8qKgorCSAqIFRoaXMga2VlcHMgdHJhY2sgb2YgdGhlIHNlbGVjdGlvbiBvZiB0aGUgZWRpdG9yIGFzIGEgd2hvbGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIElTZWxlY3Rpb24gZWRpdG9yU2VsZWN0aW9uID0gU3RydWN0dXJlZFNlbGVjdGlvbi5FTVBUWTsKKworCS8qKgorCSAqIFRoaXMgbGlzdGVucyBmb3Igd2hlbiB0aGUgb3V0bGluZSBiZWNvbWVzIGFjdGl2ZQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBJUGFydExpc3RlbmVyIHBhcnRMaXN0ZW5lciA9CisJCW5ldyBJUGFydExpc3RlbmVyKCkgeworCQkJcHVibGljIHZvaWQgcGFydEFjdGl2YXRlZChJV29ya2JlbmNoUGFydCBwKSB7CisJCQkJaWYgKHAgaW5zdGFuY2VvZiBDb250ZW50T3V0bGluZSkgeworCQkJCQlpZiAoKChDb250ZW50T3V0bGluZSlwKS5nZXRDdXJyZW50UGFnZSgpID09IGNvbnRlbnRPdXRsaW5lUGFnZSkgeworCQkJCQkJZ2V0QWN0aW9uQmFyQ29udHJpYnV0b3IoKS5zZXRBY3RpdmVFZGl0b3IoRGlzZWFzZXByZWRpY2F0ZXNFZGl0b3IudGhpcyk7CisKKwkJCQkJCXNldEN1cnJlbnRWaWV3ZXIoY29udGVudE91dGxpbmVWaWV3ZXIpOworCQkJCQl9CisJCQkJfQorCQkJCWVsc2UgaWYgKHAgaW5zdGFuY2VvZiBQcm9wZXJ0eVNoZWV0KSB7CisJCQkJCWlmICgoKFByb3BlcnR5U2hlZXQpcCkuZ2V0Q3VycmVudFBhZ2UoKSA9PSBwcm9wZXJ0eVNoZWV0UGFnZSkgeworCQkJCQkJZ2V0QWN0aW9uQmFyQ29udHJpYnV0b3IoKS5zZXRBY3RpdmVFZGl0b3IoRGlzZWFzZXByZWRpY2F0ZXNFZGl0b3IudGhpcyk7CisJCQkJCQloYW5kbGVBY3RpdmF0ZSgpOworCQkJCQl9CisJCQkJfQorCQkJCWVsc2UgaWYgKHAgPT0gRGlzZWFzZXByZWRpY2F0ZXNFZGl0b3IudGhpcykgeworCQkJCQloYW5kbGVBY3RpdmF0ZSgpOworCQkJCX0KKwkJCX0KKwkJCXB1YmxpYyB2b2lkIHBhcnRCcm91Z2h0VG9Ub3AoSVdvcmtiZW5jaFBhcnQgcCkgeworCQkJCS8vIElnbm9yZS4KKwkJCX0KKwkJCXB1YmxpYyB2b2lkIHBhcnRDbG9zZWQoSVdvcmtiZW5jaFBhcnQgcCkgeworCQkJCS8vIElnbm9yZS4KKwkJCX0KKwkJCXB1YmxpYyB2b2lkIHBhcnREZWFjdGl2YXRlZChJV29ya2JlbmNoUGFydCBwKSB7CisJCQkJLy8gSWdub3JlLgorCQkJfQorCQkJcHVibGljIHZvaWQgcGFydE9wZW5lZChJV29ya2JlbmNoUGFydCBwKSB7CisJCQkJLy8gSWdub3JlLgorCQkJfQorCQl9OworCisJLyoqCisJICogUmVzb3VyY2VzIHRoYXQgaGF2ZSBiZWVuIHJlbW92ZWQgc2luY2UgbGFzdCBhY3RpdmF0aW9uLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBDb2xsZWN0aW9uPFJlc291cmNlPiByZW1vdmVkUmVzb3VyY2VzID0gbmV3IEFycmF5TGlzdDxSZXNvdXJjZT4oKTsKKworCS8qKgorCSAqIFJlc291cmNlcyB0aGF0IGhhdmUgYmVlbiBjaGFuZ2VkIHNpbmNlIGxhc3QgYWN0aXZhdGlvbi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgQ29sbGVjdGlvbjxSZXNvdXJjZT4gY2hhbmdlZFJlc291cmNlcyA9IG5ldyBBcnJheUxpc3Q8UmVzb3VyY2U+KCk7CisKKwkvKioKKwkgKiBSZXNvdXJjZXMgdGhhdCBoYXZlIGJlZW4gc2F2ZWQuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIENvbGxlY3Rpb248UmVzb3VyY2U+IHNhdmVkUmVzb3VyY2VzID0gbmV3IEFycmF5TGlzdDxSZXNvdXJjZT4oKTsKKworCS8qKgorCSAqIE1hcCB0byBzdG9yZSB0aGUgZGlhZ25vc3RpYyBhc3NvY2lhdGVkIHdpdGggYSByZXNvdXJjZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgTWFwPFJlc291cmNlLCBEaWFnbm9zdGljPiByZXNvdXJjZVRvRGlhZ25vc3RpY01hcCA9IG5ldyBMaW5rZWRIYXNoTWFwPFJlc291cmNlLCBEaWFnbm9zdGljPigpOworCisJLyoqCisJICogQ29udHJvbHMgd2hldGhlciB0aGUgcHJvYmxlbSBpbmRpY2F0aW9uIHNob3VsZCBiZSB1cGRhdGVkLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBib29sZWFuIHVwZGF0ZVByb2JsZW1JbmRpY2F0aW9uID0gdHJ1ZTsKKworCS8qKgorCSAqIEFkYXB0ZXIgdXNlZCB0byB1cGRhdGUgdGhlIHByb2JsZW0gaW5kaWNhdGlvbiB3aGVuIHJlc291cmNlcyBhcmUgZGVtYW5kZWQgbG9hZGVkLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBFQ29udGVudEFkYXB0ZXIgcHJvYmxlbUluZGljYXRpb25BZGFwdGVyID0gCisJCW5ldyBFQ29udGVudEFkYXB0ZXIoKSB7CisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyB2b2lkIG5vdGlmeUNoYW5nZWQoTm90aWZpY2F0aW9uIG5vdGlmaWNhdGlvbikgeworCQkJCWlmIChub3RpZmljYXRpb24uZ2V0Tm90aWZpZXIoKSBpbnN0YW5jZW9mIFJlc291cmNlKSB7CisJCQkJCXN3aXRjaCAobm90aWZpY2F0aW9uLmdldEZlYXR1cmVJRChSZXNvdXJjZS5jbGFzcykpIHsKKwkJCQkJCWNhc2UgUmVzb3VyY2UuUkVTT1VSQ0VfX0lTX0xPQURFRDoKKwkJCQkJCWNhc2UgUmVzb3VyY2UuUkVTT1VSQ0VfX0VSUk9SUzoKKwkJCQkJCWNhc2UgUmVzb3VyY2UuUkVTT1VSQ0VfX1dBUk5JTkdTOiB7CisJCQkJCQkJUmVzb3VyY2UgcmVzb3VyY2UgPSAoUmVzb3VyY2Upbm90aWZpY2F0aW9uLmdldE5vdGlmaWVyKCk7CisJCQkJCQkJRGlhZ25vc3RpYyBkaWFnbm9zdGljID0gYW5hbHl6ZVJlc291cmNlUHJvYmxlbXMocmVzb3VyY2UsIG51bGwpOworCQkJCQkJCWlmIChkaWFnbm9zdGljLmdldFNldmVyaXR5KCkgIT0gRGlhZ25vc3RpYy5PSykgeworCQkJCQkJCQlyZXNvdXJjZVRvRGlhZ25vc3RpY01hcC5wdXQocmVzb3VyY2UsIGRpYWdub3N0aWMpOworCQkJCQkJCX0KKwkJCQkJCQllbHNlIHsKKwkJCQkJCQkJcmVzb3VyY2VUb0RpYWdub3N0aWNNYXAucmVtb3ZlKHJlc291cmNlKTsKKwkJCQkJCQl9CisKKwkJCQkJCQlpZiAodXBkYXRlUHJvYmxlbUluZGljYXRpb24pIHsKKwkJCQkJCQkJZ2V0U2l0ZSgpLmdldFNoZWxsKCkuZ2V0RGlzcGxheSgpLmFzeW5jRXhlYworCQkJCQkJCQkJKG5ldyBSdW5uYWJsZSgpIHsKKwkJCQkJCQkJCQkgcHVibGljIHZvaWQgcnVuKCkgeworCQkJCQkJCQkJCQkgdXBkYXRlUHJvYmxlbUluZGljYXRpb24oKTsKKwkJCQkJCQkJCQkgfQorCQkJCQkJCQkJIH0pOworCQkJCQkJCX0KKwkJCQkJCQlicmVhazsKKwkJCQkJCX0KKwkJCQkJfQorCQkJCX0KKwkJCQllbHNlIHsKKwkJCQkJc3VwZXIubm90aWZ5Q2hhbmdlZChub3RpZmljYXRpb24pOworCQkJCX0KKwkJCX0KKworCQkJQE92ZXJyaWRlCisJCQlwcm90ZWN0ZWQgdm9pZCBzZXRUYXJnZXQoUmVzb3VyY2UgdGFyZ2V0KSB7CisJCQkJYmFzaWNTZXRUYXJnZXQodGFyZ2V0KTsKKwkJCX0KKworCQkJQE92ZXJyaWRlCisJCQlwcm90ZWN0ZWQgdm9pZCB1bnNldFRhcmdldChSZXNvdXJjZSB0YXJnZXQpIHsKKwkJCQliYXNpY1Vuc2V0VGFyZ2V0KHRhcmdldCk7CisJCQl9CisJCX07CisKKwkvKioKKwkgKiBIYW5kbGVzIGFjdGl2YXRpb24gb2YgdGhlIGVkaXRvciBvciBpdCdzIGFzc29jaWF0ZWQgdmlld3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgaGFuZGxlQWN0aXZhdGUoKSB7CisJCS8vIFJlY29tcHV0ZSB0aGUgcmVhZCBvbmx5IHN0YXRlLgorCQkvLworCQlpZiAoZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVRvUmVhZE9ubHlNYXAoKSAhPSBudWxsKSB7CisJCSAgZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVRvUmVhZE9ubHlNYXAoKS5jbGVhcigpOworCisJCSAgLy8gUmVmcmVzaCBhbnkgYWN0aW9ucyB0aGF0IG1heSBiZWNvbWUgZW5hYmxlZCBvciBkaXNhYmxlZC4KKwkJICAvLworCQkgIHNldFNlbGVjdGlvbihnZXRTZWxlY3Rpb24oKSk7CisJCX0KKworCQlpZiAoIXJlbW92ZWRSZXNvdXJjZXMuaXNFbXB0eSgpKSB7CisJCQlpZiAoaGFuZGxlRGlydHlDb25mbGljdCgpKSB7CisJCQkJZ2V0U2l0ZSgpLmdldFBhZ2UoKS5jbG9zZUVkaXRvcihEaXNlYXNlcHJlZGljYXRlc0VkaXRvci50aGlzLCBmYWxzZSk7CisJCQl9CisJCQllbHNlIHsKKwkJCQlyZW1vdmVkUmVzb3VyY2VzLmNsZWFyKCk7CisJCQkJY2hhbmdlZFJlc291cmNlcy5jbGVhcigpOworCQkJCXNhdmVkUmVzb3VyY2VzLmNsZWFyKCk7CisJCQl9CisJCX0KKwkJZWxzZSBpZiAoIWNoYW5nZWRSZXNvdXJjZXMuaXNFbXB0eSgpKSB7CisJCQljaGFuZ2VkUmVzb3VyY2VzLnJlbW92ZUFsbChzYXZlZFJlc291cmNlcyk7CisJCQloYW5kbGVDaGFuZ2VkUmVzb3VyY2VzKCk7CisJCQljaGFuZ2VkUmVzb3VyY2VzLmNsZWFyKCk7CisJCQlzYXZlZFJlc291cmNlcy5jbGVhcigpOworCQl9CisJfQorCisJLyoqCisJICogSGFuZGxlcyB3aGF0IHRvIGRvIHdpdGggY2hhbmdlZCByZXNvdXJjZXMgb24gYWN0aXZhdGlvbi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBoYW5kbGVDaGFuZ2VkUmVzb3VyY2VzKCkgeworCQlpZiAoIWNoYW5nZWRSZXNvdXJjZXMuaXNFbXB0eSgpICYmICghaXNEaXJ0eSgpIHx8IGhhbmRsZURpcnR5Q29uZmxpY3QoKSkpIHsKKwkJCWlmIChpc0RpcnR5KCkpIHsKKwkJCQljaGFuZ2VkUmVzb3VyY2VzLmFkZEFsbChlZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkuZ2V0UmVzb3VyY2VzKCkpOworCQkJfQorCQkJZWRpdGluZ0RvbWFpbi5nZXRDb21tYW5kU3RhY2soKS5mbHVzaCgpOworCisJCQl1cGRhdGVQcm9ibGVtSW5kaWNhdGlvbiA9IGZhbHNlOworCQkJZm9yIChSZXNvdXJjZSByZXNvdXJjZSA6IGNoYW5nZWRSZXNvdXJjZXMpIHsKKwkJCQlpZiAocmVzb3VyY2UuaXNMb2FkZWQoKSkgeworCQkJCQlyZXNvdXJjZS51bmxvYWQoKTsKKwkJCQkJdHJ5IHsKKwkJCQkJCXJlc291cmNlLmxvYWQoQ29sbGVjdGlvbnMuRU1QVFlfTUFQKTsKKwkJCQkJfQorCQkJCQljYXRjaCAoSU9FeGNlcHRpb24gZXhjZXB0aW9uKSB7CisJCQkJCQlpZiAoIXJlc291cmNlVG9EaWFnbm9zdGljTWFwLmNvbnRhaW5zS2V5KHJlc291cmNlKSkgeworCQkJCQkJCXJlc291cmNlVG9EaWFnbm9zdGljTWFwLnB1dChyZXNvdXJjZSwgYW5hbHl6ZVJlc291cmNlUHJvYmxlbXMocmVzb3VyY2UsIGV4Y2VwdGlvbikpOworCQkJCQkJfQorCQkJCQl9CisJCQkJfQorCQkJfQorCisJCQlpZiAoQWRhcHRlckZhY3RvcnlFZGl0aW5nRG9tYWluLmlzU3RhbGUoZWRpdG9yU2VsZWN0aW9uKSkgeworCQkJCXNldFNlbGVjdGlvbihTdHJ1Y3R1cmVkU2VsZWN0aW9uLkVNUFRZKTsKKwkJCX0KKworCQkJdXBkYXRlUHJvYmxlbUluZGljYXRpb24gPSB0cnVlOworCQkJdXBkYXRlUHJvYmxlbUluZGljYXRpb24oKTsKKwkJfQorCX0KKyAgCisJLyoqCisJICogVXBkYXRlcyB0aGUgcHJvYmxlbXMgaW5kaWNhdGlvbiB3aXRoIHRoZSBpbmZvcm1hdGlvbiBkZXNjcmliZWQgaW4gdGhlIHNwZWNpZmllZCBkaWFnbm9zdGljLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIHVwZGF0ZVByb2JsZW1JbmRpY2F0aW9uKCkgeworCQlpZiAodXBkYXRlUHJvYmxlbUluZGljYXRpb24pIHsKKwkJCUJhc2ljRGlhZ25vc3RpYyBkaWFnbm9zdGljID0KKwkJCQluZXcgQmFzaWNEaWFnbm9zdGljCisJCQkJCShEaWFnbm9zdGljLk9LLAorCQkJCQkgIm9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5lZGl0b3IiLCAvLyROT04tTkxTLTEkCisJCQkJCSAwLAorCQkJCQkgbnVsbCwKKwkJCQkJIG5ldyBPYmplY3QgW10geyBlZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkgfSk7CisJCQlmb3IgKERpYWdub3N0aWMgY2hpbGREaWFnbm9zdGljIDogcmVzb3VyY2VUb0RpYWdub3N0aWNNYXAudmFsdWVzKCkpIHsKKwkJCQlpZiAoY2hpbGREaWFnbm9zdGljLmdldFNldmVyaXR5KCkgIT0gRGlhZ25vc3RpYy5PSykgeworCQkJCQlkaWFnbm9zdGljLmFkZChjaGlsZERpYWdub3N0aWMpOworCQkJCX0KKwkJCX0KKworCQkJaW50IGxhc3RFZGl0b3JQYWdlID0gZ2V0UGFnZUNvdW50KCkgLSAxOworCQkJaWYgKGxhc3RFZGl0b3JQYWdlID49IDAgJiYgZ2V0RWRpdG9yKGxhc3RFZGl0b3JQYWdlKSBpbnN0YW5jZW9mIFByb2JsZW1FZGl0b3JQYXJ0KSB7CisJCQkJKChQcm9ibGVtRWRpdG9yUGFydClnZXRFZGl0b3IobGFzdEVkaXRvclBhZ2UpKS5zZXREaWFnbm9zdGljKGRpYWdub3N0aWMpOworCQkJCWlmIChkaWFnbm9zdGljLmdldFNldmVyaXR5KCkgIT0gRGlhZ25vc3RpYy5PSykgeworCQkJCQlzZXRBY3RpdmVQYWdlKGxhc3RFZGl0b3JQYWdlKTsKKwkJCQl9CisJCQl9CisJCQllbHNlIGlmIChkaWFnbm9zdGljLmdldFNldmVyaXR5KCkgIT0gRGlhZ25vc3RpYy5PSykgeworCQkJCVByb2JsZW1FZGl0b3JQYXJ0IHByb2JsZW1FZGl0b3JQYXJ0ID0gbmV3IFByb2JsZW1FZGl0b3JQYXJ0KCk7CisJCQkJcHJvYmxlbUVkaXRvclBhcnQuc2V0RGlhZ25vc3RpYyhkaWFnbm9zdGljKTsKKwkJCQl0cnkgeworCQkJCQlhZGRQYWdlKCsrbGFzdEVkaXRvclBhZ2UsIHByb2JsZW1FZGl0b3JQYXJ0LCBnZXRFZGl0b3JJbnB1dCgpKTsKKwkJCQkJc2V0UGFnZVRleHQobGFzdEVkaXRvclBhZ2UsIHByb2JsZW1FZGl0b3JQYXJ0LmdldFBhcnROYW1lKCkpOworCQkJCQlzZXRBY3RpdmVQYWdlKGxhc3RFZGl0b3JQYWdlKTsKKwkJCQkJc2hvd1RhYnMoKTsKKwkJCQl9CisJCQkJY2F0Y2ggKFBhcnRJbml0RXhjZXB0aW9uIGV4Y2VwdGlvbikgeworCQkJCQlEaXNlYXNlbW9kZWxzRWRpdG9yUGx1Z2luLklOU1RBTkNFLmxvZyhleGNlcHRpb24pOworCQkJCX0KKwkJCX0KKwkJfQorCX0KKworCS8qKgorCSAqIFNob3dzIGEgZGlhbG9nIHRoYXQgYXNrcyBpZiBjb25mbGljdGluZyBjaGFuZ2VzIHNob3VsZCBiZSBkaXNjYXJkZWQuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIGJvb2xlYW4gaGFuZGxlRGlydHlDb25mbGljdCgpIHsKKwkJcmV0dXJuCisJCQlNZXNzYWdlRGlhbG9nLm9wZW5RdWVzdGlvbgorCQkJCShnZXRTaXRlKCkuZ2V0U2hlbGwoKSwKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfRmlsZUNvbmZsaWN0X2xhYmVsIiksIC8vJE5PTi1OTFMtMSQKKwkJCQkgZ2V0U3RyaW5nKCJfV0FSTl9GaWxlQ29uZmxpY3QiKSk7IC8vJE5PTi1OTFMtMSQKKwl9CisKKwkvKioKKwkgKiBUaGlzIGNyZWF0ZXMgYSBtb2RlbCBlZGl0b3IuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIERpc2Vhc2VwcmVkaWNhdGVzRWRpdG9yKCkgeworCQlzdXBlcigpOworCQlpbml0aWFsaXplRWRpdGluZ0RvbWFpbigpOworCX0KKworCS8qKgorCSAqIFRoaXMgc2V0cyB1cCB0aGUgZWRpdGluZyBkb21haW4gZm9yIHRoZSBtb2RlbCBlZGl0b3IuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgaW5pdGlhbGl6ZUVkaXRpbmdEb21haW4oKSB7CisJCS8vIENyZWF0ZSBhbiBhZGFwdGVyIGZhY3RvcnkgdGhhdCB5aWVsZHMgaXRlbSBwcm92aWRlcnMuCisJCS8vCisJCWFkYXB0ZXJGYWN0b3J5ID0gbmV3IENvbXBvc2VkQWRhcHRlckZhY3RvcnkoQ29tcG9zZWRBZGFwdGVyRmFjdG9yeS5EZXNjcmlwdG9yLlJlZ2lzdHJ5LklOU1RBTkNFKTsKKworCQlhZGFwdGVyRmFjdG9yeS5hZGRBZGFwdGVyRmFjdG9yeShuZXcgUmVzb3VyY2VJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSgpKTsKKwkJYWRhcHRlckZhY3RvcnkuYWRkQWRhcHRlckZhY3RvcnkobmV3IFN0YW5kYXJkSXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkoKSk7CisJCWFkYXB0ZXJGYWN0b3J5LmFkZEFkYXB0ZXJGYWN0b3J5KG5ldyBEaXNlYXNlcHJlZGljYXRlc0l0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5KCkpOworCQlhZGFwdGVyRmFjdG9yeS5hZGRBZGFwdGVyRmFjdG9yeShuZXcgQ29tbW9uSXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkoKSk7CisJCWFkYXB0ZXJGYWN0b3J5LmFkZEFkYXB0ZXJGYWN0b3J5KG5ldyBHcmFwaEl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5KCkpOworCQlhZGFwdGVyRmFjdG9yeS5hZGRBZGFwdGVyRmFjdG9yeShuZXcgTW9kZWxJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSgpKTsKKwkJYWRhcHRlckZhY3RvcnkuYWRkQWRhcHRlckZhY3RvcnkobmV3IE1vZGlmaWVySXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkoKSk7CisJCWFkYXB0ZXJGYWN0b3J5LmFkZEFkYXB0ZXJGYWN0b3J5KG5ldyBQcmVkaWNhdGVJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSgpKTsKKwkJYWRhcHRlckZhY3RvcnkuYWRkQWRhcHRlckZhY3RvcnkobmV3IFNjZW5hcmlvSXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkoKSk7CisJCWFkYXB0ZXJGYWN0b3J5LmFkZEFkYXB0ZXJGYWN0b3J5KG5ldyBTZXF1ZW5jZXJJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSgpKTsKKwkJYWRhcHRlckZhY3RvcnkuYWRkQWRhcHRlckZhY3RvcnkobmV3IFNvbHZlckl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5KCkpOworCQlhZGFwdGVyRmFjdG9yeS5hZGRBZGFwdGVyRmFjdG9yeShuZXcgTGFiZWxzSXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkoKSk7CisJCWFkYXB0ZXJGYWN0b3J5LmFkZEFkYXB0ZXJGYWN0b3J5KG5ldyBFY29yZUl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5KCkpOworCQlhZGFwdGVyRmFjdG9yeS5hZGRBZGFwdGVyRmFjdG9yeShuZXcgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLnByb3ZpZGVyLlN0YW5kYXJkSXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkoKSk7CisJCWFkYXB0ZXJGYWN0b3J5LmFkZEFkYXB0ZXJGYWN0b3J5KG5ldyBMb2dnZXJJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSgpKTsKKwkJYWRhcHRlckZhY3RvcnkuYWRkQWRhcHRlckZhY3RvcnkobmV3IFJlZmxlY3RpdmVJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSgpKTsKKworCQkvLyBDcmVhdGUgdGhlIGNvbW1hbmQgc3RhY2sgdGhhdCB3aWxsIG5vdGlmeSB0aGlzIGVkaXRvciBhcyBjb21tYW5kcyBhcmUgZXhlY3V0ZWQuCisJCS8vCisJCUJhc2ljQ29tbWFuZFN0YWNrIGNvbW1hbmRTdGFjayA9IG5ldyBCYXNpY0NvbW1hbmRTdGFjaygpOworCisJCS8vIEFkZCBhIGxpc3RlbmVyIHRvIHNldCB0aGUgbW9zdCByZWNlbnQgY29tbWFuZCdzIGFmZmVjdGVkIG9iamVjdHMgdG8gYmUgdGhlIHNlbGVjdGlvbiBvZiB0aGUgdmlld2VyIHdpdGggZm9jdXMuCisJCS8vCisJCWNvbW1hbmRTdGFjay5hZGRDb21tYW5kU3RhY2tMaXN0ZW5lcgorCQkJKG5ldyBDb21tYW5kU3RhY2tMaXN0ZW5lcigpIHsKKwkJCQkgcHVibGljIHZvaWQgY29tbWFuZFN0YWNrQ2hhbmdlZChmaW5hbCBFdmVudE9iamVjdCBldmVudCkgeworCQkJCQkgZ2V0Q29udGFpbmVyKCkuZ2V0RGlzcGxheSgpLmFzeW5jRXhlYworCQkJCQkJIChuZXcgUnVubmFibGUoKSB7CisJCQkJCQkJICBwdWJsaWMgdm9pZCBydW4oKSB7CisJCQkJCQkJCSAgZmlyZVByb3BlcnR5Q2hhbmdlKElFZGl0b3JQYXJ0LlBST1BfRElSVFkpOworCisJCQkJCQkJCSAgLy8gVHJ5IHRvIHNlbGVjdCB0aGUgYWZmZWN0ZWQgb2JqZWN0cy4KKwkJCQkJCQkJICAvLworCQkJCQkJCQkgIENvbW1hbmQgbW9zdFJlY2VudENvbW1hbmQgPSAoKENvbW1hbmRTdGFjaylldmVudC5nZXRTb3VyY2UoKSkuZ2V0TW9zdFJlY2VudENvbW1hbmQoKTsKKwkJCQkJCQkJICBpZiAobW9zdFJlY2VudENvbW1hbmQgIT0gbnVsbCkgeworCQkJCQkJCQkJICBzZXRTZWxlY3Rpb25Ub1ZpZXdlcihtb3N0UmVjZW50Q29tbWFuZC5nZXRBZmZlY3RlZE9iamVjdHMoKSk7CisJCQkJCQkJCSAgfQorCQkJCQkJCQkgIGlmIChwcm9wZXJ0eVNoZWV0UGFnZSAhPSBudWxsICYmICFwcm9wZXJ0eVNoZWV0UGFnZS5nZXRDb250cm9sKCkuaXNEaXNwb3NlZCgpKSB7CisJCQkJCQkJCQkgIHByb3BlcnR5U2hlZXRQYWdlLnJlZnJlc2goKTsKKwkJCQkJCQkJICB9CisJCQkJCQkJICB9CisJCQkJCQkgIH0pOworCQkJCSB9CisJCQkgfSk7CisKKwkJLy8gQ3JlYXRlIHRoZSBlZGl0aW5nIGRvbWFpbiB3aXRoIGEgc3BlY2lhbCBjb21tYW5kIHN0YWNrLgorCQkvLworCQllZGl0aW5nRG9tYWluID0gbmV3IEFkYXB0ZXJGYWN0b3J5RWRpdGluZ0RvbWFpbihhZGFwdGVyRmFjdG9yeSwgY29tbWFuZFN0YWNrLCBuZXcgSGFzaE1hcDxSZXNvdXJjZSwgQm9vbGVhbj4oKSk7CisJfQorCisJLyoqCisJICogVGhpcyBpcyBoZXJlIGZvciB0aGUgbGlzdGVuZXIgdG8gYmUgYWJsZSB0byBjYWxsIGl0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCQkJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgZmlyZVByb3BlcnR5Q2hhbmdlKGludCBhY3Rpb24pIHsKKwkJc3VwZXIuZmlyZVByb3BlcnR5Q2hhbmdlKGFjdGlvbik7CisJfQorCisJLyoqCisJICogVGhpcyBzZXRzIHRoZSBzZWxlY3Rpb24gaW50byB3aGljaGV2ZXIgdmlld2VyIGlzIGFjdGl2ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRTZWxlY3Rpb25Ub1ZpZXdlcihDb2xsZWN0aW9uPD8+IGNvbGxlY3Rpb24pIHsKKwkJZmluYWwgQ29sbGVjdGlvbjw/PiB0aGVTZWxlY3Rpb24gPSBjb2xsZWN0aW9uOworCQkvLyBNYWtlIHN1cmUgaXQncyBva2F5LgorCQkvLworCQlpZiAodGhlU2VsZWN0aW9uICE9IG51bGwgJiYgIXRoZVNlbGVjdGlvbi5pc0VtcHR5KCkpIHsKKwkJCVJ1bm5hYmxlIHJ1bm5hYmxlID0KKwkJCQluZXcgUnVubmFibGUoKSB7CisJCQkJCXB1YmxpYyB2b2lkIHJ1bigpIHsKKwkJCQkJCS8vIFRyeSB0byBzZWxlY3QgdGhlIGl0ZW1zIGluIHRoZSBjdXJyZW50IGNvbnRlbnQgdmlld2VyIG9mIHRoZSBlZGl0b3IuCisJCQkJCQkvLworCQkJCQkJaWYgKGN1cnJlbnRWaWV3ZXIgIT0gbnVsbCkgeworCQkJCQkJCWN1cnJlbnRWaWV3ZXIuc2V0U2VsZWN0aW9uKG5ldyBTdHJ1Y3R1cmVkU2VsZWN0aW9uKHRoZVNlbGVjdGlvbi50b0FycmF5KCkpLCB0cnVlKTsKKwkJCQkJCX0KKwkJCQkJfQorCQkJCX07CisJCQlnZXRTaXRlKCkuZ2V0U2hlbGwoKS5nZXREaXNwbGF5KCkuYXN5bmNFeGVjKHJ1bm5hYmxlKTsKKwkJfQorCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyB0aGUgZWRpdGluZyBkb21haW4gYXMgcmVxdWlyZWQgYnkgdGhlIHtAbGluayBJRWRpdGluZ0RvbWFpblByb3ZpZGVyfSBpbnRlcmZhY2UuCisJICogVGhpcyBpcyBpbXBvcnRhbnQgZm9yIGltcGxlbWVudGluZyB0aGUgc3RhdGljIG1ldGhvZHMgb2Yge0BsaW5rIEFkYXB0ZXJGYWN0b3J5RWRpdGluZ0RvbWFpbn0KKwkgKiBhbmQgZm9yIHN1cHBvcnRpbmcge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmFjdGlvbi5Db21tYW5kQWN0aW9ufS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRWRpdGluZ0RvbWFpbiBnZXRFZGl0aW5nRG9tYWluKCkgeworCQlyZXR1cm4gZWRpdGluZ0RvbWFpbjsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgY2xhc3MgUmV2ZXJzZUFkYXB0ZXJGYWN0b3J5Q29udGVudFByb3ZpZGVyIGV4dGVuZHMgQWRhcHRlckZhY3RvcnlDb250ZW50UHJvdmlkZXIgeworCQkvKioKKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCXB1YmxpYyBSZXZlcnNlQWRhcHRlckZhY3RvcnlDb250ZW50UHJvdmlkZXIoQWRhcHRlckZhY3RvcnkgYWRhcHRlckZhY3RvcnkpIHsKKwkJCXN1cGVyKGFkYXB0ZXJGYWN0b3J5KTsKKwkJfQorCisJCS8qKgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJQE92ZXJyaWRlCisJCXB1YmxpYyBPYmplY3QgW10gZ2V0RWxlbWVudHMoT2JqZWN0IG9iamVjdCkgeworCQkJT2JqZWN0IHBhcmVudCA9IHN1cGVyLmdldFBhcmVudChvYmplY3QpOworCQkJcmV0dXJuIChwYXJlbnQgPT0gbnVsbCA/IENvbGxlY3Rpb25zLkVNUFRZX1NFVCA6IENvbGxlY3Rpb25zLnNpbmdsZXRvbihwYXJlbnQpKS50b0FycmF5KCk7CisJCX0KKworCQkvKioKKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUBPdmVycmlkZQorCQlwdWJsaWMgT2JqZWN0IFtdIGdldENoaWxkcmVuKE9iamVjdCBvYmplY3QpIHsKKwkJCU9iamVjdCBwYXJlbnQgPSBzdXBlci5nZXRQYXJlbnQob2JqZWN0KTsKKwkJCXJldHVybiAocGFyZW50ID09IG51bGwgPyBDb2xsZWN0aW9ucy5FTVBUWV9TRVQgOiBDb2xsZWN0aW9ucy5zaW5nbGV0b24ocGFyZW50KSkudG9BcnJheSgpOworCQl9CisKKwkJLyoqCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlAT3ZlcnJpZGUKKwkJcHVibGljIGJvb2xlYW4gaGFzQ2hpbGRyZW4oT2JqZWN0IG9iamVjdCkgeworCQkJT2JqZWN0IHBhcmVudCA9IHN1cGVyLmdldFBhcmVudChvYmplY3QpOworCQkJcmV0dXJuIHBhcmVudCAhPSBudWxsOworCQl9CisKKwkJLyoqCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlAT3ZlcnJpZGUKKwkJcHVibGljIE9iamVjdCBnZXRQYXJlbnQoT2JqZWN0IG9iamVjdCkgeworCQkJcmV0dXJuIG51bGw7CisJCX0KKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRDdXJyZW50Vmlld2VyUGFuZShWaWV3ZXJQYW5lIHZpZXdlclBhbmUpIHsKKwkJaWYgKGN1cnJlbnRWaWV3ZXJQYW5lICE9IHZpZXdlclBhbmUpIHsKKwkJCWlmIChjdXJyZW50Vmlld2VyUGFuZSAhPSBudWxsKSB7CisJCQkJY3VycmVudFZpZXdlclBhbmUuc2hvd0ZvY3VzKGZhbHNlKTsKKwkJCX0KKwkJCWN1cnJlbnRWaWV3ZXJQYW5lID0gdmlld2VyUGFuZTsKKwkJfQorCQlzZXRDdXJyZW50Vmlld2VyKGN1cnJlbnRWaWV3ZXJQYW5lLmdldFZpZXdlcigpKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIG1ha2VzIHN1cmUgdGhhdCBvbmUgY29udGVudCB2aWV3ZXIsIGVpdGhlciBmb3IgdGhlIGN1cnJlbnQgcGFnZSBvciB0aGUgb3V0bGluZSB2aWV3LCBpZiBpdCBoYXMgZm9jdXMsCisJICogaXMgdGhlIGN1cnJlbnQgb25lLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIHNldEN1cnJlbnRWaWV3ZXIoVmlld2VyIHZpZXdlcikgeworCQkvLyBJZiBpdCBpcyBjaGFuZ2luZy4uLgorCQkvLworCQlpZiAoY3VycmVudFZpZXdlciAhPSB2aWV3ZXIpIHsKKwkJCWlmIChzZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIgPT0gbnVsbCkgeworCQkJCS8vIENyZWF0ZSB0aGUgbGlzdGVuZXIgb24gZGVtYW5kLgorCQkJCS8vCisJCQkJc2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyID0KKwkJCQkJbmV3IElTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIoKSB7CisJCQkJCQkvLyBUaGlzIGp1c3Qgbm90aWZpZXMgdGhvc2UgdGhpbmdzIHRoYXQgYXJlIGFmZmVjdGVkIGJ5IHRoZSBzZWN0aW9uLgorCQkJCQkJLy8KKwkJCQkJCXB1YmxpYyB2b2lkIHNlbGVjdGlvbkNoYW5nZWQoU2VsZWN0aW9uQ2hhbmdlZEV2ZW50IHNlbGVjdGlvbkNoYW5nZWRFdmVudCkgeworCQkJCQkJCXNldFNlbGVjdGlvbihzZWxlY3Rpb25DaGFuZ2VkRXZlbnQuZ2V0U2VsZWN0aW9uKCkpOworCQkJCQkJfQorCQkJCQl9OworCQkJfQorCisJCQkvLyBTdG9wIGxpc3RlbmluZyB0byB0aGUgb2xkIG9uZS4KKwkJCS8vCisJCQlpZiAoY3VycmVudFZpZXdlciAhPSBudWxsKSB7CisJCQkJY3VycmVudFZpZXdlci5yZW1vdmVTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIoc2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyKTsKKwkJCX0KKworCQkJLy8gU3RhcnQgbGlzdGVuaW5nIHRvIHRoZSBuZXcgb25lLgorCQkJLy8KKwkJCWlmICh2aWV3ZXIgIT0gbnVsbCkgeworCQkJCXZpZXdlci5hZGRTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIoc2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyKTsKKwkJCX0KKworCQkJLy8gUmVtZW1iZXIgaXQuCisJCQkvLworCQkJY3VycmVudFZpZXdlciA9IHZpZXdlcjsKKworCQkJLy8gU2V0IHRoZSBlZGl0b3JzIHNlbGVjdGlvbiBiYXNlZCBvbiB0aGUgY3VycmVudCB2aWV3ZXIncyBzZWxlY3Rpb24uCisJCQkvLworCQkJc2V0U2VsZWN0aW9uKGN1cnJlbnRWaWV3ZXIgPT0gbnVsbCA/IFN0cnVjdHVyZWRTZWxlY3Rpb24uRU1QVFkgOiBjdXJyZW50Vmlld2VyLmdldFNlbGVjdGlvbigpKTsKKwkJfQorCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyB0aGUgdmlld2VyIGFzIHJlcXVpcmVkIGJ5IHRoZSB7QGxpbmsgSVZpZXdlclByb3ZpZGVyfSBpbnRlcmZhY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFZpZXdlciBnZXRWaWV3ZXIoKSB7CisJCXJldHVybiBjdXJyZW50Vmlld2VyOworCX0KKworCS8qKgorCSAqIFRoaXMgY3JlYXRlcyBhIGNvbnRleHQgbWVudSBmb3IgdGhlIHZpZXdlciBhbmQgYWRkcyBhIGxpc3RlbmVyIGFzIHdlbGwgcmVnaXN0ZXJpbmcgdGhlIG1lbnUgZm9yIGV4dGVuc2lvbi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBjcmVhdGVDb250ZXh0TWVudUZvcihTdHJ1Y3R1cmVkVmlld2VyIHZpZXdlcikgeworCQlNZW51TWFuYWdlciBjb250ZXh0TWVudSA9IG5ldyBNZW51TWFuYWdlcigiI1BvcFVwIik7IC8vJE5PTi1OTFMtMSQKKwkJY29udGV4dE1lbnUuYWRkKG5ldyBTZXBhcmF0b3IoImFkZGl0aW9ucyIpKTsgLy8kTk9OLU5MUy0xJAorCQljb250ZXh0TWVudS5zZXRSZW1vdmVBbGxXaGVuU2hvd24odHJ1ZSk7CisJCWNvbnRleHRNZW51LmFkZE1lbnVMaXN0ZW5lcih0aGlzKTsKKwkJTWVudSBtZW51PSBjb250ZXh0TWVudS5jcmVhdGVDb250ZXh0TWVudSh2aWV3ZXIuZ2V0Q29udHJvbCgpKTsKKwkJdmlld2VyLmdldENvbnRyb2woKS5zZXRNZW51KG1lbnUpOworCQlnZXRTaXRlKCkucmVnaXN0ZXJDb250ZXh0TWVudShjb250ZXh0TWVudSwgbmV3IFVud3JhcHBpbmdTZWxlY3Rpb25Qcm92aWRlcih2aWV3ZXIpKTsKKworCQlpbnQgZG5kT3BlcmF0aW9ucyA9IERORC5EUk9QX0NPUFkgfCBETkQuRFJPUF9NT1ZFIHwgRE5ELkRST1BfTElOSzsKKwkJVHJhbnNmZXJbXSB0cmFuc2ZlcnMgPSBuZXcgVHJhbnNmZXJbXSB7IExvY2FsVHJhbnNmZXIuZ2V0SW5zdGFuY2UoKSB9OworCQl2aWV3ZXIuYWRkRHJhZ1N1cHBvcnQoZG5kT3BlcmF0aW9ucywgdHJhbnNmZXJzLCBuZXcgVmlld2VyRHJhZ0FkYXB0ZXIodmlld2VyKSk7CisJCXZpZXdlci5hZGREcm9wU3VwcG9ydChkbmRPcGVyYXRpb25zLCB0cmFuc2ZlcnMsIG5ldyBFZGl0aW5nRG9tYWluVmlld2VyRHJvcEFkYXB0ZXIoZWRpdGluZ0RvbWFpbiwgdmlld2VyKSk7CisJfQorCisJLyoqCisJICogVGhpcyBpcyB0aGUgbWV0aG9kIGNhbGxlZCB0byBsb2FkIGEgcmVzb3VyY2UgaW50byB0aGUgZWRpdGluZyBkb21haW4ncyByZXNvdXJjZSBzZXQgYmFzZWQgb24gdGhlIGVkaXRvcidzIGlucHV0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIGNyZWF0ZU1vZGVsKCkgeworCQlVUkkgcmVzb3VyY2VVUkkgPSBFZGl0VUlVdGlsLmdldFVSSShnZXRFZGl0b3JJbnB1dCgpKTsKKwkJRXhjZXB0aW9uIGV4Y2VwdGlvbiA9IG51bGw7CisJCVJlc291cmNlIHJlc291cmNlID0gbnVsbDsKKwkJdHJ5IHsKKwkJCS8vIExvYWQgdGhlIHJlc291cmNlIHRocm91Z2ggdGhlIGVkaXRpbmcgZG9tYWluLgorCQkJLy8KKwkJCXJlc291cmNlID0gZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpLmdldFJlc291cmNlKHJlc291cmNlVVJJLCB0cnVlKTsKKwkJfQorCQljYXRjaCAoRXhjZXB0aW9uIGUpIHsKKwkJCWV4Y2VwdGlvbiA9IGU7CisJCQlyZXNvdXJjZSA9IGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKS5nZXRSZXNvdXJjZShyZXNvdXJjZVVSSSwgZmFsc2UpOworCQl9CisKKwkJRGlhZ25vc3RpYyBkaWFnbm9zdGljID0gYW5hbHl6ZVJlc291cmNlUHJvYmxlbXMocmVzb3VyY2UsIGV4Y2VwdGlvbik7CisJCWlmIChkaWFnbm9zdGljLmdldFNldmVyaXR5KCkgIT0gRGlhZ25vc3RpYy5PSykgeworCQkJcmVzb3VyY2VUb0RpYWdub3N0aWNNYXAucHV0KHJlc291cmNlLCAgYW5hbHl6ZVJlc291cmNlUHJvYmxlbXMocmVzb3VyY2UsIGV4Y2VwdGlvbikpOworCQl9CisJCWVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKS5lQWRhcHRlcnMoKS5hZGQocHJvYmxlbUluZGljYXRpb25BZGFwdGVyKTsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIGEgZGlhZ25vc3RpYyBkZXNjcmliaW5nIHRoZSBlcnJvcnMgYW5kIHdhcm5pbmdzIGxpc3RlZCBpbiB0aGUgcmVzb3VyY2UKKwkgKiBhbmQgdGhlIHNwZWNpZmllZCBleGNlcHRpb24gKGlmIGFueSkuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIERpYWdub3N0aWMgYW5hbHl6ZVJlc291cmNlUHJvYmxlbXMoUmVzb3VyY2UgcmVzb3VyY2UsIEV4Y2VwdGlvbiBleGNlcHRpb24pIHsKKwkJaWYgKCFyZXNvdXJjZS5nZXRFcnJvcnMoKS5pc0VtcHR5KCkgfHwgIXJlc291cmNlLmdldFdhcm5pbmdzKCkuaXNFbXB0eSgpKSB7CisJCQlCYXNpY0RpYWdub3N0aWMgYmFzaWNEaWFnbm9zdGljID0KKwkJCQluZXcgQmFzaWNEaWFnbm9zdGljCisJCQkJCShEaWFnbm9zdGljLkVSUk9SLAorCQkJCQkgIm9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5lZGl0b3IiLCAvLyROT04tTkxTLTEkCisJCQkJCSAwLAorCQkJCQkgZ2V0U3RyaW5nKCJfVUlfQ3JlYXRlTW9kZWxFcnJvcl9tZXNzYWdlIiwgcmVzb3VyY2UuZ2V0VVJJKCkpLCAvLyROT04tTkxTLTEkCisJCQkJCSBuZXcgT2JqZWN0IFtdIHsgZXhjZXB0aW9uID09IG51bGwgPyAoT2JqZWN0KXJlc291cmNlIDogZXhjZXB0aW9uIH0pOworCQkJYmFzaWNEaWFnbm9zdGljLm1lcmdlKEVjb3JlVXRpbC5jb21wdXRlRGlhZ25vc3RpYyhyZXNvdXJjZSwgdHJ1ZSkpOworCQkJcmV0dXJuIGJhc2ljRGlhZ25vc3RpYzsKKwkJfQorCQllbHNlIGlmIChleGNlcHRpb24gIT0gbnVsbCkgeworCQkJcmV0dXJuCisJCQkJbmV3IEJhc2ljRGlhZ25vc3RpYworCQkJCQkoRGlhZ25vc3RpYy5FUlJPUiwKKwkJCQkJICJvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZWRpdG9yIiwgLy8kTk9OLU5MUy0xJAorCQkJCQkgMCwKKwkJCQkJIGdldFN0cmluZygiX1VJX0NyZWF0ZU1vZGVsRXJyb3JfbWVzc2FnZSIsIHJlc291cmNlLmdldFVSSSgpKSwgLy8kTk9OLU5MUy0xJAorCQkJCQkgbmV3IE9iamVjdFtdIHsgZXhjZXB0aW9uIH0pOworCQl9CisJCWVsc2UgeworCQkJcmV0dXJuIERpYWdub3N0aWMuT0tfSU5TVEFOQ0U7CisJCX0KKwl9CisKKwkvKioKKwkgKiBUaGlzIGlzIHRoZSBtZXRob2QgdXNlZCBieSB0aGUgZnJhbWV3b3JrIHRvIGluc3RhbGwgeW91ciBvd24gY29udHJvbHMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgY3JlYXRlUGFnZXMoKSB7CisJCS8vIENyZWF0ZXMgdGhlIG1vZGVsIGZyb20gdGhlIGVkaXRvciBpbnB1dAorCQkvLworCQljcmVhdGVNb2RlbCgpOworCisJCS8vIE9ubHkgY3JlYXRlcyB0aGUgb3RoZXIgcGFnZXMgaWYgdGhlcmUgaXMgc29tZXRoaW5nIHRoYXQgY2FuIGJlIGVkaXRlZAorCQkvLworCQlpZiAoIWdldEVkaXRpbmdEb21haW4oKS5nZXRSZXNvdXJjZVNldCgpLmdldFJlc291cmNlcygpLmlzRW1wdHkoKSkgeworCQkJLy8gQ3JlYXRlIGEgcGFnZSBmb3IgdGhlIHNlbGVjdGlvbiB0cmVlIHZpZXcuCisJCQkvLworCQkJeworCQkJCVZpZXdlclBhbmUgdmlld2VyUGFuZSA9CisJCQkJCW5ldyBWaWV3ZXJQYW5lKGdldFNpdGUoKS5nZXRQYWdlKCksIERpc2Vhc2VwcmVkaWNhdGVzRWRpdG9yLnRoaXMpIHsKKwkJCQkJCUBPdmVycmlkZQorCQkJCQkJcHVibGljIFZpZXdlciBjcmVhdGVWaWV3ZXIoQ29tcG9zaXRlIGNvbXBvc2l0ZSkgeworCQkJCQkJCVRyZWUgdHJlZSA9IG5ldyBUcmVlKGNvbXBvc2l0ZSwgU1dULk1VTFRJKTsKKwkJCQkJCQlUcmVlVmlld2VyIG5ld1RyZWVWaWV3ZXIgPSBuZXcgVHJlZVZpZXdlcih0cmVlKTsKKwkJCQkJCQlyZXR1cm4gbmV3VHJlZVZpZXdlcjsKKwkJCQkJCX0KKwkJCQkJCUBPdmVycmlkZQorCQkJCQkJcHVibGljIHZvaWQgcmVxdWVzdEFjdGl2YXRpb24oKSB7CisJCQkJCQkJc3VwZXIucmVxdWVzdEFjdGl2YXRpb24oKTsKKwkJCQkJCQlzZXRDdXJyZW50Vmlld2VyUGFuZSh0aGlzKTsKKwkJCQkJCX0KKwkJCQkJfTsKKwkJCQl2aWV3ZXJQYW5lLmNyZWF0ZUNvbnRyb2woZ2V0Q29udGFpbmVyKCkpOworCisJCQkJc2VsZWN0aW9uVmlld2VyID0gKFRyZWVWaWV3ZXIpdmlld2VyUGFuZS5nZXRWaWV3ZXIoKTsKKwkJCQlzZWxlY3Rpb25WaWV3ZXIuc2V0Q29udGVudFByb3ZpZGVyKG5ldyBBZGFwdGVyRmFjdG9yeUNvbnRlbnRQcm92aWRlcihhZGFwdGVyRmFjdG9yeSkpOworCisJCQkJc2VsZWN0aW9uVmlld2VyLnNldExhYmVsUHJvdmlkZXIobmV3IEFkYXB0ZXJGYWN0b3J5TGFiZWxQcm92aWRlcihhZGFwdGVyRmFjdG9yeSkpOworCQkJCXNlbGVjdGlvblZpZXdlci5zZXRJbnB1dChlZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkpOworCQkJCXNlbGVjdGlvblZpZXdlci5zZXRTZWxlY3Rpb24obmV3IFN0cnVjdHVyZWRTZWxlY3Rpb24oZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpLmdldFJlc291cmNlcygpLmdldCgwKSksIHRydWUpOworCQkJCXZpZXdlclBhbmUuc2V0VGl0bGUoZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpKTsKKworCQkJCW5ldyBBZGFwdGVyRmFjdG9yeVRyZWVFZGl0b3Ioc2VsZWN0aW9uVmlld2VyLmdldFRyZWUoKSwgYWRhcHRlckZhY3RvcnkpOworCisJCQkJY3JlYXRlQ29udGV4dE1lbnVGb3Ioc2VsZWN0aW9uVmlld2VyKTsKKwkJCQlpbnQgcGFnZUluZGV4ID0gYWRkUGFnZSh2aWV3ZXJQYW5lLmdldENvbnRyb2woKSk7CisJCQkJc2V0UGFnZVRleHQocGFnZUluZGV4LCBnZXRTdHJpbmcoIl9VSV9TZWxlY3Rpb25QYWdlX2xhYmVsIikpOyAvLyROT04tTkxTLTEkCisJCQl9CisKKwkJCS8vIENyZWF0ZSBhIHBhZ2UgZm9yIHRoZSBwYXJlbnQgdHJlZSB2aWV3LgorCQkJLy8KKwkJCXsKKwkJCQlWaWV3ZXJQYW5lIHZpZXdlclBhbmUgPQorCQkJCQluZXcgVmlld2VyUGFuZShnZXRTaXRlKCkuZ2V0UGFnZSgpLCBEaXNlYXNlcHJlZGljYXRlc0VkaXRvci50aGlzKSB7CisJCQkJCQlAT3ZlcnJpZGUKKwkJCQkJCXB1YmxpYyBWaWV3ZXIgY3JlYXRlVmlld2VyKENvbXBvc2l0ZSBjb21wb3NpdGUpIHsKKwkJCQkJCQlUcmVlIHRyZWUgPSBuZXcgVHJlZShjb21wb3NpdGUsIFNXVC5NVUxUSSk7CisJCQkJCQkJVHJlZVZpZXdlciBuZXdUcmVlVmlld2VyID0gbmV3IFRyZWVWaWV3ZXIodHJlZSk7CisJCQkJCQkJcmV0dXJuIG5ld1RyZWVWaWV3ZXI7CisJCQkJCQl9CisJCQkJCQlAT3ZlcnJpZGUKKwkJCQkJCXB1YmxpYyB2b2lkIHJlcXVlc3RBY3RpdmF0aW9uKCkgeworCQkJCQkJCXN1cGVyLnJlcXVlc3RBY3RpdmF0aW9uKCk7CisJCQkJCQkJc2V0Q3VycmVudFZpZXdlclBhbmUodGhpcyk7CisJCQkJCQl9CisJCQkJCX07CisJCQkJdmlld2VyUGFuZS5jcmVhdGVDb250cm9sKGdldENvbnRhaW5lcigpKTsKKworCQkJCXBhcmVudFZpZXdlciA9IChUcmVlVmlld2VyKXZpZXdlclBhbmUuZ2V0Vmlld2VyKCk7CisJCQkJcGFyZW50Vmlld2VyLnNldEF1dG9FeHBhbmRMZXZlbCgzMCk7CisJCQkJcGFyZW50Vmlld2VyLnNldENvbnRlbnRQcm92aWRlcihuZXcgUmV2ZXJzZUFkYXB0ZXJGYWN0b3J5Q29udGVudFByb3ZpZGVyKGFkYXB0ZXJGYWN0b3J5KSk7CisJCQkJcGFyZW50Vmlld2VyLnNldExhYmVsUHJvdmlkZXIobmV3IEFkYXB0ZXJGYWN0b3J5TGFiZWxQcm92aWRlcihhZGFwdGVyRmFjdG9yeSkpOworCisJCQkJY3JlYXRlQ29udGV4dE1lbnVGb3IocGFyZW50Vmlld2VyKTsKKwkJCQlpbnQgcGFnZUluZGV4ID0gYWRkUGFnZSh2aWV3ZXJQYW5lLmdldENvbnRyb2woKSk7CisJCQkJc2V0UGFnZVRleHQocGFnZUluZGV4LCBnZXRTdHJpbmcoIl9VSV9QYXJlbnRQYWdlX2xhYmVsIikpOyAvLyROT04tTkxTLTEkCisJCQl9CisKKwkJCS8vIFRoaXMgaXMgdGhlIHBhZ2UgZm9yIHRoZSBsaXN0IHZpZXdlcgorCQkJLy8KKwkJCXsKKwkJCQlWaWV3ZXJQYW5lIHZpZXdlclBhbmUgPQorCQkJCQluZXcgVmlld2VyUGFuZShnZXRTaXRlKCkuZ2V0UGFnZSgpLCBEaXNlYXNlcHJlZGljYXRlc0VkaXRvci50aGlzKSB7CisJCQkJCQlAT3ZlcnJpZGUKKwkJCQkJCXB1YmxpYyBWaWV3ZXIgY3JlYXRlVmlld2VyKENvbXBvc2l0ZSBjb21wb3NpdGUpIHsKKwkJCQkJCQlyZXR1cm4gbmV3IExpc3RWaWV3ZXIoY29tcG9zaXRlKTsKKwkJCQkJCX0KKwkJCQkJCUBPdmVycmlkZQorCQkJCQkJcHVibGljIHZvaWQgcmVxdWVzdEFjdGl2YXRpb24oKSB7CisJCQkJCQkJc3VwZXIucmVxdWVzdEFjdGl2YXRpb24oKTsKKwkJCQkJCQlzZXRDdXJyZW50Vmlld2VyUGFuZSh0aGlzKTsKKwkJCQkJCX0KKwkJCQkJfTsKKwkJCQl2aWV3ZXJQYW5lLmNyZWF0ZUNvbnRyb2woZ2V0Q29udGFpbmVyKCkpOworCQkJCWxpc3RWaWV3ZXIgPSAoTGlzdFZpZXdlcil2aWV3ZXJQYW5lLmdldFZpZXdlcigpOworCQkJCWxpc3RWaWV3ZXIuc2V0Q29udGVudFByb3ZpZGVyKG5ldyBBZGFwdGVyRmFjdG9yeUNvbnRlbnRQcm92aWRlcihhZGFwdGVyRmFjdG9yeSkpOworCQkJCWxpc3RWaWV3ZXIuc2V0TGFiZWxQcm92aWRlcihuZXcgQWRhcHRlckZhY3RvcnlMYWJlbFByb3ZpZGVyKGFkYXB0ZXJGYWN0b3J5KSk7CisKKwkJCQljcmVhdGVDb250ZXh0TWVudUZvcihsaXN0Vmlld2VyKTsKKwkJCQlpbnQgcGFnZUluZGV4ID0gYWRkUGFnZSh2aWV3ZXJQYW5lLmdldENvbnRyb2woKSk7CisJCQkJc2V0UGFnZVRleHQocGFnZUluZGV4LCBnZXRTdHJpbmcoIl9VSV9MaXN0UGFnZV9sYWJlbCIpKTsgLy8kTk9OLU5MUy0xJAorCQkJfQorCisJCQkvLyBUaGlzIGlzIHRoZSBwYWdlIGZvciB0aGUgdHJlZSB2aWV3ZXIKKwkJCS8vCisJCQl7CisJCQkJVmlld2VyUGFuZSB2aWV3ZXJQYW5lID0KKwkJCQkJbmV3IFZpZXdlclBhbmUoZ2V0U2l0ZSgpLmdldFBhZ2UoKSwgRGlzZWFzZXByZWRpY2F0ZXNFZGl0b3IudGhpcykgeworCQkJCQkJQE92ZXJyaWRlCisJCQkJCQlwdWJsaWMgVmlld2VyIGNyZWF0ZVZpZXdlcihDb21wb3NpdGUgY29tcG9zaXRlKSB7CisJCQkJCQkJcmV0dXJuIG5ldyBUcmVlVmlld2VyKGNvbXBvc2l0ZSk7CisJCQkJCQl9CisJCQkJCQlAT3ZlcnJpZGUKKwkJCQkJCXB1YmxpYyB2b2lkIHJlcXVlc3RBY3RpdmF0aW9uKCkgeworCQkJCQkJCXN1cGVyLnJlcXVlc3RBY3RpdmF0aW9uKCk7CisJCQkJCQkJc2V0Q3VycmVudFZpZXdlclBhbmUodGhpcyk7CisJCQkJCQl9CisJCQkJCX07CisJCQkJdmlld2VyUGFuZS5jcmVhdGVDb250cm9sKGdldENvbnRhaW5lcigpKTsKKwkJCQl0cmVlVmlld2VyID0gKFRyZWVWaWV3ZXIpdmlld2VyUGFuZS5nZXRWaWV3ZXIoKTsKKwkJCQl0cmVlVmlld2VyLnNldENvbnRlbnRQcm92aWRlcihuZXcgQWRhcHRlckZhY3RvcnlDb250ZW50UHJvdmlkZXIoYWRhcHRlckZhY3RvcnkpKTsKKwkJCQl0cmVlVmlld2VyLnNldExhYmVsUHJvdmlkZXIobmV3IEFkYXB0ZXJGYWN0b3J5TGFiZWxQcm92aWRlcihhZGFwdGVyRmFjdG9yeSkpOworCisJCQkJbmV3IEFkYXB0ZXJGYWN0b3J5VHJlZUVkaXRvcih0cmVlVmlld2VyLmdldFRyZWUoKSwgYWRhcHRlckZhY3RvcnkpOworCisJCQkJY3JlYXRlQ29udGV4dE1lbnVGb3IodHJlZVZpZXdlcik7CisJCQkJaW50IHBhZ2VJbmRleCA9IGFkZFBhZ2Uodmlld2VyUGFuZS5nZXRDb250cm9sKCkpOworCQkJCXNldFBhZ2VUZXh0KHBhZ2VJbmRleCwgZ2V0U3RyaW5nKCJfVUlfVHJlZVBhZ2VfbGFiZWwiKSk7IC8vJE5PTi1OTFMtMSQKKwkJCX0KKworCQkJLy8gVGhpcyBpcyB0aGUgcGFnZSBmb3IgdGhlIHRhYmxlIHZpZXdlci4KKwkJCS8vCisJCQl7CisJCQkJVmlld2VyUGFuZSB2aWV3ZXJQYW5lID0KKwkJCQkJbmV3IFZpZXdlclBhbmUoZ2V0U2l0ZSgpLmdldFBhZ2UoKSwgRGlzZWFzZXByZWRpY2F0ZXNFZGl0b3IudGhpcykgeworCQkJCQkJQE92ZXJyaWRlCisJCQkJCQlwdWJsaWMgVmlld2VyIGNyZWF0ZVZpZXdlcihDb21wb3NpdGUgY29tcG9zaXRlKSB7CisJCQkJCQkJcmV0dXJuIG5ldyBUYWJsZVZpZXdlcihjb21wb3NpdGUpOworCQkJCQkJfQorCQkJCQkJQE92ZXJyaWRlCisJCQkJCQlwdWJsaWMgdm9pZCByZXF1ZXN0QWN0aXZhdGlvbigpIHsKKwkJCQkJCQlzdXBlci5yZXF1ZXN0QWN0aXZhdGlvbigpOworCQkJCQkJCXNldEN1cnJlbnRWaWV3ZXJQYW5lKHRoaXMpOworCQkJCQkJfQorCQkJCQl9OworCQkJCXZpZXdlclBhbmUuY3JlYXRlQ29udHJvbChnZXRDb250YWluZXIoKSk7CisJCQkJdGFibGVWaWV3ZXIgPSAoVGFibGVWaWV3ZXIpdmlld2VyUGFuZS5nZXRWaWV3ZXIoKTsKKworCQkJCVRhYmxlIHRhYmxlID0gdGFibGVWaWV3ZXIuZ2V0VGFibGUoKTsKKwkJCQlUYWJsZUxheW91dCBsYXlvdXQgPSBuZXcgVGFibGVMYXlvdXQoKTsKKwkJCQl0YWJsZS5zZXRMYXlvdXQobGF5b3V0KTsKKwkJCQl0YWJsZS5zZXRIZWFkZXJWaXNpYmxlKHRydWUpOworCQkJCXRhYmxlLnNldExpbmVzVmlzaWJsZSh0cnVlKTsKKworCQkJCVRhYmxlQ29sdW1uIG9iamVjdENvbHVtbiA9IG5ldyBUYWJsZUNvbHVtbih0YWJsZSwgU1dULk5PTkUpOworCQkJCWxheW91dC5hZGRDb2x1bW5EYXRhKG5ldyBDb2x1bW5XZWlnaHREYXRhKDMsIDEwMCwgdHJ1ZSkpOworCQkJCW9iamVjdENvbHVtbi5zZXRUZXh0KGdldFN0cmluZygiX1VJX09iamVjdENvbHVtbl9sYWJlbCIpKTsgLy8kTk9OLU5MUy0xJAorCQkJCW9iamVjdENvbHVtbi5zZXRSZXNpemFibGUodHJ1ZSk7CisKKwkJCQlUYWJsZUNvbHVtbiBzZWxmQ29sdW1uID0gbmV3IFRhYmxlQ29sdW1uKHRhYmxlLCBTV1QuTk9ORSk7CisJCQkJbGF5b3V0LmFkZENvbHVtbkRhdGEobmV3IENvbHVtbldlaWdodERhdGEoMiwgMTAwLCB0cnVlKSk7CisJCQkJc2VsZkNvbHVtbi5zZXRUZXh0KGdldFN0cmluZygiX1VJX1NlbGZDb2x1bW5fbGFiZWwiKSk7IC8vJE5PTi1OTFMtMSQKKwkJCQlzZWxmQ29sdW1uLnNldFJlc2l6YWJsZSh0cnVlKTsKKworCQkJCXRhYmxlVmlld2VyLnNldENvbHVtblByb3BlcnRpZXMobmV3IFN0cmluZyBbXSB7ImEiLCAiYiJ9KTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCisJCQkJdGFibGVWaWV3ZXIuc2V0Q29udGVudFByb3ZpZGVyKG5ldyBBZGFwdGVyRmFjdG9yeUNvbnRlbnRQcm92aWRlcihhZGFwdGVyRmFjdG9yeSkpOworCQkJCXRhYmxlVmlld2VyLnNldExhYmVsUHJvdmlkZXIobmV3IEFkYXB0ZXJGYWN0b3J5TGFiZWxQcm92aWRlcihhZGFwdGVyRmFjdG9yeSkpOworCisJCQkJY3JlYXRlQ29udGV4dE1lbnVGb3IodGFibGVWaWV3ZXIpOworCQkJCWludCBwYWdlSW5kZXggPSBhZGRQYWdlKHZpZXdlclBhbmUuZ2V0Q29udHJvbCgpKTsKKwkJCQlzZXRQYWdlVGV4dChwYWdlSW5kZXgsIGdldFN0cmluZygiX1VJX1RhYmxlUGFnZV9sYWJlbCIpKTsgLy8kTk9OLU5MUy0xJAorCQkJfQorCisJCQkvLyBUaGlzIGlzIHRoZSBwYWdlIGZvciB0aGUgdGFibGUgdHJlZSB2aWV3ZXIuCisJCQkvLworCQkJeworCQkJCVZpZXdlclBhbmUgdmlld2VyUGFuZSA9CisJCQkJCW5ldyBWaWV3ZXJQYW5lKGdldFNpdGUoKS5nZXRQYWdlKCksIERpc2Vhc2VwcmVkaWNhdGVzRWRpdG9yLnRoaXMpIHsKKwkJCQkJCUBPdmVycmlkZQorCQkJCQkJcHVibGljIFZpZXdlciBjcmVhdGVWaWV3ZXIoQ29tcG9zaXRlIGNvbXBvc2l0ZSkgeworCQkJCQkJCXJldHVybiBuZXcgVHJlZVZpZXdlcihjb21wb3NpdGUpOworCQkJCQkJfQorCQkJCQkJQE92ZXJyaWRlCisJCQkJCQlwdWJsaWMgdm9pZCByZXF1ZXN0QWN0aXZhdGlvbigpIHsKKwkJCQkJCQlzdXBlci5yZXF1ZXN0QWN0aXZhdGlvbigpOworCQkJCQkJCXNldEN1cnJlbnRWaWV3ZXJQYW5lKHRoaXMpOworCQkJCQkJfQorCQkJCQl9OworCQkJCXZpZXdlclBhbmUuY3JlYXRlQ29udHJvbChnZXRDb250YWluZXIoKSk7CisKKwkJCQl0cmVlVmlld2VyV2l0aENvbHVtbnMgPSAoVHJlZVZpZXdlcil2aWV3ZXJQYW5lLmdldFZpZXdlcigpOworCisJCQkJVHJlZSB0cmVlID0gdHJlZVZpZXdlcldpdGhDb2x1bW5zLmdldFRyZWUoKTsKKwkJCQl0cmVlLnNldExheW91dERhdGEobmV3IEZpbGxMYXlvdXQoKSk7CisJCQkJdHJlZS5zZXRIZWFkZXJWaXNpYmxlKHRydWUpOworCQkJCXRyZWUuc2V0TGluZXNWaXNpYmxlKHRydWUpOworCisJCQkJVHJlZUNvbHVtbiBvYmplY3RDb2x1bW4gPSBuZXcgVHJlZUNvbHVtbih0cmVlLCBTV1QuTk9ORSk7CisJCQkJb2JqZWN0Q29sdW1uLnNldFRleHQoZ2V0U3RyaW5nKCJfVUlfT2JqZWN0Q29sdW1uX2xhYmVsIikpOyAvLyROT04tTkxTLTEkCisJCQkJb2JqZWN0Q29sdW1uLnNldFJlc2l6YWJsZSh0cnVlKTsKKwkJCQlvYmplY3RDb2x1bW4uc2V0V2lkdGgoMjUwKTsKKworCQkJCVRyZWVDb2x1bW4gc2VsZkNvbHVtbiA9IG5ldyBUcmVlQ29sdW1uKHRyZWUsIFNXVC5OT05FKTsKKwkJCQlzZWxmQ29sdW1uLnNldFRleHQoZ2V0U3RyaW5nKCJfVUlfU2VsZkNvbHVtbl9sYWJlbCIpKTsgLy8kTk9OLU5MUy0xJAorCQkJCXNlbGZDb2x1bW4uc2V0UmVzaXphYmxlKHRydWUpOworCQkJCXNlbGZDb2x1bW4uc2V0V2lkdGgoMjAwKTsKKworCQkJCXRyZWVWaWV3ZXJXaXRoQ29sdW1ucy5zZXRDb2x1bW5Qcm9wZXJ0aWVzKG5ldyBTdHJpbmcgW10geyJhIiwgImIifSk7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAorCQkJCXRyZWVWaWV3ZXJXaXRoQ29sdW1ucy5zZXRDb250ZW50UHJvdmlkZXIobmV3IEFkYXB0ZXJGYWN0b3J5Q29udGVudFByb3ZpZGVyKGFkYXB0ZXJGYWN0b3J5KSk7CisJCQkJdHJlZVZpZXdlcldpdGhDb2x1bW5zLnNldExhYmVsUHJvdmlkZXIobmV3IEFkYXB0ZXJGYWN0b3J5TGFiZWxQcm92aWRlcihhZGFwdGVyRmFjdG9yeSkpOworCisJCQkJY3JlYXRlQ29udGV4dE1lbnVGb3IodHJlZVZpZXdlcldpdGhDb2x1bW5zKTsKKwkJCQlpbnQgcGFnZUluZGV4ID0gYWRkUGFnZSh2aWV3ZXJQYW5lLmdldENvbnRyb2woKSk7CisJCQkJc2V0UGFnZVRleHQocGFnZUluZGV4LCBnZXRTdHJpbmcoIl9VSV9UcmVlV2l0aENvbHVtbnNQYWdlX2xhYmVsIikpOyAvLyROT04tTkxTLTEkCisJCQl9CisKKwkJCWdldFNpdGUoKS5nZXRTaGVsbCgpLmdldERpc3BsYXkoKS5hc3luY0V4ZWMKKwkJCQkobmV3IFJ1bm5hYmxlKCkgeworCQkJCQkgcHVibGljIHZvaWQgcnVuKCkgeworCQkJCQkJIHNldEFjdGl2ZVBhZ2UoMCk7CisJCQkJCSB9CisJCQkJIH0pOworCQl9CisKKwkJLy8gRW5zdXJlcyB0aGF0IHRoaXMgZWRpdG9yIHdpbGwgb25seSBkaXNwbGF5IHRoZSBwYWdlJ3MgdGFiCisJCS8vIGFyZWEgaWYgdGhlcmUgYXJlIG1vcmUgdGhhbiBvbmUgcGFnZQorCQkvLworCQlnZXRDb250YWluZXIoKS5hZGRDb250cm9sTGlzdGVuZXIKKwkJCShuZXcgQ29udHJvbEFkYXB0ZXIoKSB7CisJCQkJYm9vbGVhbiBndWFyZCA9IGZhbHNlOworCQkJCUBPdmVycmlkZQorCQkJCXB1YmxpYyB2b2lkIGNvbnRyb2xSZXNpemVkKENvbnRyb2xFdmVudCBldmVudCkgeworCQkJCQlpZiAoIWd1YXJkKSB7CisJCQkJCQlndWFyZCA9IHRydWU7CisJCQkJCQloaWRlVGFicygpOworCQkJCQkJZ3VhcmQgPSBmYWxzZTsKKwkJCQkJfQorCQkJCX0KKwkJCSB9KTsKKworCQlnZXRTaXRlKCkuZ2V0U2hlbGwoKS5nZXREaXNwbGF5KCkuYXN5bmNFeGVjCisJCQkobmV3IFJ1bm5hYmxlKCkgeworCQkJCSBwdWJsaWMgdm9pZCBydW4oKSB7CisJCQkJCSB1cGRhdGVQcm9ibGVtSW5kaWNhdGlvbigpOworCQkJCSB9CisJCQkgfSk7CisJfQorCisJLyoqCisJICogSWYgdGhlcmUgaXMganVzdCBvbmUgcGFnZSBpbiB0aGUgbXVsdGktcGFnZSBlZGl0b3IgcGFydCwKKwkgKiB0aGlzIGhpZGVzIHRoZSBzaW5nbGUgdGFiIGF0IHRoZSBib3R0b20uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgaGlkZVRhYnMoKSB7CisJCWlmIChnZXRQYWdlQ291bnQoKSA8PSAxKSB7CisJCQlzZXRQYWdlVGV4dCgwLCAiIik7IC8vJE5PTi1OTFMtMSQKKwkJCWlmIChnZXRDb250YWluZXIoKSBpbnN0YW5jZW9mIENUYWJGb2xkZXIpIHsKKwkJCQkoKENUYWJGb2xkZXIpZ2V0Q29udGFpbmVyKCkpLnNldFRhYkhlaWdodCgxKTsKKwkJCQlQb2ludCBwb2ludCA9IGdldENvbnRhaW5lcigpLmdldFNpemUoKTsKKwkJCQlnZXRDb250YWluZXIoKS5zZXRTaXplKHBvaW50LngsIHBvaW50LnkgKyA2KTsKKwkJCX0KKwkJfQorCX0KKworCS8qKgorCSAqIElmIHRoZXJlIGlzIG1vcmUgdGhhbiBvbmUgcGFnZSBpbiB0aGUgbXVsdGktcGFnZSBlZGl0b3IgcGFydCwKKwkgKiB0aGlzIHNob3dzIHRoZSB0YWJzIGF0IHRoZSBib3R0b20uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgc2hvd1RhYnMoKSB7CisJCWlmIChnZXRQYWdlQ291bnQoKSA+IDEpIHsKKwkJCXNldFBhZ2VUZXh0KDAsIGdldFN0cmluZygiX1VJX1NlbGVjdGlvblBhZ2VfbGFiZWwiKSk7IC8vJE5PTi1OTFMtMSQKKwkJCWlmIChnZXRDb250YWluZXIoKSBpbnN0YW5jZW9mIENUYWJGb2xkZXIpIHsKKwkJCQkoKENUYWJGb2xkZXIpZ2V0Q29udGFpbmVyKCkpLnNldFRhYkhlaWdodChTV1QuREVGQVVMVCk7CisJCQkJUG9pbnQgcG9pbnQgPSBnZXRDb250YWluZXIoKS5nZXRTaXplKCk7CisJCQkJZ2V0Q29udGFpbmVyKCkuc2V0U2l6ZShwb2ludC54LCBwb2ludC55IC0gNik7CisJCQl9CisJCX0KKwl9CisKKwkvKioKKwkgKiBUaGlzIGlzIHVzZWQgdG8gdHJhY2sgdGhlIGFjdGl2ZSB2aWV3ZXIuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgcGFnZUNoYW5nZShpbnQgcGFnZUluZGV4KSB7CisJCXN1cGVyLnBhZ2VDaGFuZ2UocGFnZUluZGV4KTsKKworCQlpZiAoY29udGVudE91dGxpbmVQYWdlICE9IG51bGwpIHsKKwkJCWhhbmRsZUNvbnRlbnRPdXRsaW5lU2VsZWN0aW9uKGNvbnRlbnRPdXRsaW5lUGFnZS5nZXRTZWxlY3Rpb24oKSk7CisJCX0KKwl9CisKKwkvKioKKwkgKiBUaGlzIGlzIGhvdyB0aGUgZnJhbWV3b3JrIGRldGVybWluZXMgd2hpY2ggaW50ZXJmYWNlcyB3ZSBpbXBsZW1lbnQuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQFN1cHByZXNzV2FybmluZ3MoInJhd3R5cGVzIikKKwlAT3ZlcnJpZGUKKwlwdWJsaWMgT2JqZWN0IGdldEFkYXB0ZXIoQ2xhc3Mga2V5KSB7CisJCWlmIChrZXkuZXF1YWxzKElDb250ZW50T3V0bGluZVBhZ2UuY2xhc3MpKSB7CisJCQlyZXR1cm4gc2hvd091dGxpbmVWaWV3KCkgPyBnZXRDb250ZW50T3V0bGluZVBhZ2UoKSA6IG51bGw7CisJCX0KKwkJZWxzZSBpZiAoa2V5LmVxdWFscyhJUHJvcGVydHlTaGVldFBhZ2UuY2xhc3MpKSB7CisJCQlyZXR1cm4gZ2V0UHJvcGVydHlTaGVldFBhZ2UoKTsKKwkJfQorCQllbHNlIHsKKwkJCXJldHVybiBzdXBlci5nZXRBZGFwdGVyKGtleSk7CisJCX0KKwl9CisKKwkvKioKKwkgKiBUaGlzIGFjY2Vzc2VzIGEgY2FjaGVkIHZlcnNpb24gb2YgdGhlIGNvbnRlbnQgb3V0bGluZXIuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIElDb250ZW50T3V0bGluZVBhZ2UgZ2V0Q29udGVudE91dGxpbmVQYWdlKCkgeworCQlpZiAoY29udGVudE91dGxpbmVQYWdlID09IG51bGwpIHsKKwkJCS8vIFRoZSBjb250ZW50IG91dGxpbmUgaXMganVzdCBhIHRyZWUuCisJCQkvLworCQkJY2xhc3MgTXlDb250ZW50T3V0bGluZVBhZ2UgZXh0ZW5kcyBDb250ZW50T3V0bGluZVBhZ2UgeworCQkJCUBPdmVycmlkZQorCQkJCXB1YmxpYyB2b2lkIGNyZWF0ZUNvbnRyb2woQ29tcG9zaXRlIHBhcmVudCkgeworCQkJCQlzdXBlci5jcmVhdGVDb250cm9sKHBhcmVudCk7CisJCQkJCWNvbnRlbnRPdXRsaW5lVmlld2VyID0gZ2V0VHJlZVZpZXdlcigpOworCQkJCQljb250ZW50T3V0bGluZVZpZXdlci5hZGRTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIodGhpcyk7CisKKwkJCQkJLy8gU2V0IHVwIHRoZSB0cmVlIHZpZXdlci4KKwkJCQkJLy8KKwkJCQkJY29udGVudE91dGxpbmVWaWV3ZXIuc2V0Q29udGVudFByb3ZpZGVyKG5ldyBBZGFwdGVyRmFjdG9yeUNvbnRlbnRQcm92aWRlcihhZGFwdGVyRmFjdG9yeSkpOworCQkJCQljb250ZW50T3V0bGluZVZpZXdlci5zZXRMYWJlbFByb3ZpZGVyKG5ldyBBZGFwdGVyRmFjdG9yeUxhYmVsUHJvdmlkZXIoYWRhcHRlckZhY3RvcnkpKTsKKwkJCQkJY29udGVudE91dGxpbmVWaWV3ZXIuc2V0SW5wdXQoZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpKTsKKworCQkJCQkvLyBNYWtlIHN1cmUgb3VyIHBvcHVwcyB3b3JrLgorCQkJCQkvLworCQkJCQljcmVhdGVDb250ZXh0TWVudUZvcihjb250ZW50T3V0bGluZVZpZXdlcik7CisKKwkJCQkJaWYgKCFlZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkuZ2V0UmVzb3VyY2VzKCkuaXNFbXB0eSgpKSB7CisJCQkJCSAgLy8gU2VsZWN0IHRoZSByb290IG9iamVjdCBpbiB0aGUgdmlldy4KKwkJCQkJICAvLworCQkJCQkgIGNvbnRlbnRPdXRsaW5lVmlld2VyLnNldFNlbGVjdGlvbihuZXcgU3RydWN0dXJlZFNlbGVjdGlvbihlZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkuZ2V0UmVzb3VyY2VzKCkuZ2V0KDApKSwgdHJ1ZSk7CisJCQkJCX0KKwkJCQl9CisKKwkJCQlAT3ZlcnJpZGUKKwkJCQlwdWJsaWMgdm9pZCBtYWtlQ29udHJpYnV0aW9ucyhJTWVudU1hbmFnZXIgbWVudU1hbmFnZXIsIElUb29sQmFyTWFuYWdlciB0b29sQmFyTWFuYWdlciwgSVN0YXR1c0xpbmVNYW5hZ2VyIHN0YXR1c0xpbmVNYW5hZ2VyKSB7CisJCQkJCXN1cGVyLm1ha2VDb250cmlidXRpb25zKG1lbnVNYW5hZ2VyLCB0b29sQmFyTWFuYWdlciwgc3RhdHVzTGluZU1hbmFnZXIpOworCQkJCQljb250ZW50T3V0bGluZVN0YXR1c0xpbmVNYW5hZ2VyID0gc3RhdHVzTGluZU1hbmFnZXI7CisJCQkJfQorCisJCQkJQE92ZXJyaWRlCisJCQkJcHVibGljIHZvaWQgc2V0QWN0aW9uQmFycyhJQWN0aW9uQmFycyBhY3Rpb25CYXJzKSB7CisJCQkJCXN1cGVyLnNldEFjdGlvbkJhcnMoYWN0aW9uQmFycyk7CisJCQkJCWdldEFjdGlvbkJhckNvbnRyaWJ1dG9yKCkuc2hhcmVHbG9iYWxBY3Rpb25zKHRoaXMsIGFjdGlvbkJhcnMpOworCQkJCX0KKwkJCX0KKworCQkJY29udGVudE91dGxpbmVQYWdlID0gbmV3IE15Q29udGVudE91dGxpbmVQYWdlKCk7CisKKwkJCS8vIExpc3RlbiB0byBzZWxlY3Rpb24gc28gdGhhdCB3ZSBjYW4gaGFuZGxlIGl0IGlzIGEgc3BlY2lhbCB3YXkuCisJCQkvLworCQkJY29udGVudE91dGxpbmVQYWdlLmFkZFNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcgorCQkJCShuZXcgSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcigpIHsKKwkJCQkJIC8vIFRoaXMgZW5zdXJlcyB0aGF0IHdlIGhhbmRsZSBzZWxlY3Rpb25zIGNvcnJlY3RseS4KKwkJCQkJIC8vCisJCQkJCSBwdWJsaWMgdm9pZCBzZWxlY3Rpb25DaGFuZ2VkKFNlbGVjdGlvbkNoYW5nZWRFdmVudCBldmVudCkgeworCQkJCQkJIGhhbmRsZUNvbnRlbnRPdXRsaW5lU2VsZWN0aW9uKGV2ZW50LmdldFNlbGVjdGlvbigpKTsKKwkJCQkJIH0KKwkJCQkgfSk7CisJCX0KKworCQlyZXR1cm4gY29udGVudE91dGxpbmVQYWdlOworCX0KKworCS8qKgorCSAqIFRoaXMgYWNjZXNzZXMgYSBjYWNoZWQgdmVyc2lvbiBvZiB0aGUgcHJvcGVydHkgc2hlZXQuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIElQcm9wZXJ0eVNoZWV0UGFnZSBnZXRQcm9wZXJ0eVNoZWV0UGFnZSgpIHsKKwkJaWYgKHByb3BlcnR5U2hlZXRQYWdlID09IG51bGwpIHsKKwkJCXByb3BlcnR5U2hlZXRQYWdlID0KKwkJCQluZXcgRXh0ZW5kZWRQcm9wZXJ0eVNoZWV0UGFnZShlZGl0aW5nRG9tYWluKSB7CisJCQkJCUBPdmVycmlkZQorCQkJCQlwdWJsaWMgdm9pZCBzZXRTZWxlY3Rpb25Ub1ZpZXdlcihMaXN0PD8+IHNlbGVjdGlvbikgeworCQkJCQkJRGlzZWFzZXByZWRpY2F0ZXNFZGl0b3IudGhpcy5zZXRTZWxlY3Rpb25Ub1ZpZXdlcihzZWxlY3Rpb24pOworCQkJCQkJRGlzZWFzZXByZWRpY2F0ZXNFZGl0b3IudGhpcy5zZXRGb2N1cygpOworCQkJCQl9CisKKwkJCQkJQE92ZXJyaWRlCisJCQkJCXB1YmxpYyB2b2lkIHNldEFjdGlvbkJhcnMoSUFjdGlvbkJhcnMgYWN0aW9uQmFycykgeworCQkJCQkJc3VwZXIuc2V0QWN0aW9uQmFycyhhY3Rpb25CYXJzKTsKKwkJCQkJCWdldEFjdGlvbkJhckNvbnRyaWJ1dG9yKCkuc2hhcmVHbG9iYWxBY3Rpb25zKHRoaXMsIGFjdGlvbkJhcnMpOworCQkJCQl9CisJCQkJfTsKKwkJCXByb3BlcnR5U2hlZXRQYWdlLnNldFByb3BlcnR5U291cmNlUHJvdmlkZXIobmV3IEFkYXB0ZXJGYWN0b3J5Q29udGVudFByb3ZpZGVyKGFkYXB0ZXJGYWN0b3J5KSk7CisJCX0KKworCQlyZXR1cm4gcHJvcGVydHlTaGVldFBhZ2U7CisJfQorCisJLyoqCisJICogVGhpcyBkZWFscyB3aXRoIGhvdyB3ZSB3YW50IHNlbGVjdGlvbiBpbiB0aGUgb3V0bGluZXIgdG8gYWZmZWN0IHRoZSBvdGhlciB2aWV3cy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBoYW5kbGVDb250ZW50T3V0bGluZVNlbGVjdGlvbihJU2VsZWN0aW9uIHNlbGVjdGlvbikgeworCQlpZiAoY3VycmVudFZpZXdlclBhbmUgIT0gbnVsbCAmJiAhc2VsZWN0aW9uLmlzRW1wdHkoKSAmJiBzZWxlY3Rpb24gaW5zdGFuY2VvZiBJU3RydWN0dXJlZFNlbGVjdGlvbikgeworCQkJSXRlcmF0b3I8Pz4gc2VsZWN0ZWRFbGVtZW50cyA9ICgoSVN0cnVjdHVyZWRTZWxlY3Rpb24pc2VsZWN0aW9uKS5pdGVyYXRvcigpOworCQkJaWYgKHNlbGVjdGVkRWxlbWVudHMuaGFzTmV4dCgpKSB7CisJCQkJLy8gR2V0IHRoZSBmaXJzdCBzZWxlY3RlZCBlbGVtZW50LgorCQkJCS8vCisJCQkJT2JqZWN0IHNlbGVjdGVkRWxlbWVudCA9IHNlbGVjdGVkRWxlbWVudHMubmV4dCgpOworCisJCQkJLy8gSWYgaXQncyB0aGUgc2VsZWN0aW9uIHZpZXdlciwgdGhlbiB3ZSB3YW50IGl0IHRvIHNlbGVjdCB0aGUgc2FtZSBzZWxlY3Rpb24gYXMgdGhpcyBzZWxlY3Rpb24uCisJCQkJLy8KKwkJCQlpZiAoY3VycmVudFZpZXdlclBhbmUuZ2V0Vmlld2VyKCkgPT0gc2VsZWN0aW9uVmlld2VyKSB7CisJCQkJCUFycmF5TGlzdDxPYmplY3Q+IHNlbGVjdGlvbkxpc3QgPSBuZXcgQXJyYXlMaXN0PE9iamVjdD4oKTsKKwkJCQkJc2VsZWN0aW9uTGlzdC5hZGQoc2VsZWN0ZWRFbGVtZW50KTsKKwkJCQkJd2hpbGUgKHNlbGVjdGVkRWxlbWVudHMuaGFzTmV4dCgpKSB7CisJCQkJCQlzZWxlY3Rpb25MaXN0LmFkZChzZWxlY3RlZEVsZW1lbnRzLm5leHQoKSk7CisJCQkJCX0KKworCQkJCQkvLyBTZXQgdGhlIHNlbGVjdGlvbiB0byB0aGUgd2lkZ2V0LgorCQkJCQkvLworCQkJCQlzZWxlY3Rpb25WaWV3ZXIuc2V0U2VsZWN0aW9uKG5ldyBTdHJ1Y3R1cmVkU2VsZWN0aW9uKHNlbGVjdGlvbkxpc3QpKTsKKwkJCQl9CisJCQkJZWxzZSB7CisJCQkJCS8vIFNldCB0aGUgaW5wdXQgdG8gdGhlIHdpZGdldC4KKwkJCQkJLy8KKwkJCQkJaWYgKGN1cnJlbnRWaWV3ZXJQYW5lLmdldFZpZXdlcigpLmdldElucHV0KCkgIT0gc2VsZWN0ZWRFbGVtZW50KSB7CisJCQkJCQljdXJyZW50Vmlld2VyUGFuZS5nZXRWaWV3ZXIoKS5zZXRJbnB1dChzZWxlY3RlZEVsZW1lbnQpOworCQkJCQkJY3VycmVudFZpZXdlclBhbmUuc2V0VGl0bGUoc2VsZWN0ZWRFbGVtZW50KTsKKwkJCQkJfQorCQkJCX0KKwkJCX0KKwkJfQorCX0KKworCS8qKgorCSAqIFRoaXMgaXMgZm9yIGltcGxlbWVudGluZyB7QGxpbmsgSUVkaXRvclBhcnR9IGFuZCBzaW1wbHkgdGVzdHMgdGhlIGNvbW1hbmQgc3RhY2suCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIGJvb2xlYW4gaXNEaXJ0eSgpIHsKKwkJcmV0dXJuICgoQmFzaWNDb21tYW5kU3RhY2spZWRpdGluZ0RvbWFpbi5nZXRDb21tYW5kU3RhY2soKSkuaXNTYXZlTmVlZGVkKCk7CisJfQorCisJLyoqCisJICogVGhpcyBpcyBmb3IgaW1wbGVtZW50aW5nIHtAbGluayBJRWRpdG9yUGFydH0gYW5kIHNpbXBseSBzYXZlcyB0aGUgbW9kZWwgZmlsZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBkb1NhdmUoSVByb2dyZXNzTW9uaXRvciBwcm9ncmVzc01vbml0b3IpIHsKKwkJLy8gU2F2ZSBvbmx5IHJlc291cmNlcyB0aGF0IGhhdmUgYWN0dWFsbHkgY2hhbmdlZC4KKwkJLy8KKwkJZmluYWwgTWFwPE9iamVjdCwgT2JqZWN0PiBzYXZlT3B0aW9ucyA9IG5ldyBIYXNoTWFwPE9iamVjdCwgT2JqZWN0PigpOworCQlzYXZlT3B0aW9ucy5wdXQoUmVzb3VyY2UuT1BUSU9OX1NBVkVfT05MWV9JRl9DSEFOR0VELCBSZXNvdXJjZS5PUFRJT05fU0FWRV9PTkxZX0lGX0NIQU5HRURfTUVNT1JZX0JVRkZFUik7CisKKwkJLy8gRG8gdGhlIHdvcmsgd2l0aGluIGFuIG9wZXJhdGlvbiBiZWNhdXNlIHRoaXMgaXMgYSBsb25nIHJ1bm5pbmcgYWN0aXZpdHkgdGhhdCBtb2RpZmllcyB0aGUgd29ya2JlbmNoLgorCQkvLworCQlJUnVubmFibGVXaXRoUHJvZ3Jlc3Mgb3BlcmF0aW9uID0KKwkJCW5ldyBJUnVubmFibGVXaXRoUHJvZ3Jlc3MoKSB7CisJCQkJLy8gVGhpcyBpcyB0aGUgbWV0aG9kIHRoYXQgZ2V0cyBpbnZva2VkIHdoZW4gdGhlIG9wZXJhdGlvbiBydW5zLgorCQkJCS8vCisJCQkJcHVibGljIHZvaWQgcnVuKElQcm9ncmVzc01vbml0b3IgbW9uaXRvcikgeworCQkJCQkvLyBTYXZlIHRoZSByZXNvdXJjZXMgdG8gdGhlIGZpbGUgc3lzdGVtLgorCQkJCQkvLworCQkJCQlib29sZWFuIGZpcnN0ID0gdHJ1ZTsKKwkJCQkJZm9yIChSZXNvdXJjZSByZXNvdXJjZSA6IGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKS5nZXRSZXNvdXJjZXMoKSkgeworCQkJCQkJaWYgKChmaXJzdCB8fCAhcmVzb3VyY2UuZ2V0Q29udGVudHMoKS5pc0VtcHR5KCkgfHwgaXNQZXJzaXN0ZWQocmVzb3VyY2UpKSAmJiAhZWRpdGluZ0RvbWFpbi5pc1JlYWRPbmx5KHJlc291cmNlKSkgeworCQkJCQkJCXRyeSB7CisJCQkJCQkJCWxvbmcgdGltZVN0YW1wID0gcmVzb3VyY2UuZ2V0VGltZVN0YW1wKCk7CisJCQkJCQkJCXJlc291cmNlLnNhdmUoc2F2ZU9wdGlvbnMpOworCQkJCQkJCQlpZiAocmVzb3VyY2UuZ2V0VGltZVN0YW1wKCkgIT0gdGltZVN0YW1wKSB7CisJCQkJCQkJCQlzYXZlZFJlc291cmNlcy5hZGQocmVzb3VyY2UpOworCQkJCQkJCQl9CisJCQkJCQkJfQorCQkJCQkJCWNhdGNoIChFeGNlcHRpb24gZXhjZXB0aW9uKSB7CisJCQkJCQkJCXJlc291cmNlVG9EaWFnbm9zdGljTWFwLnB1dChyZXNvdXJjZSwgYW5hbHl6ZVJlc291cmNlUHJvYmxlbXMocmVzb3VyY2UsIGV4Y2VwdGlvbikpOworCQkJCQkJCX0KKwkJCQkJCQlmaXJzdCA9IGZhbHNlOworCQkJCQkJfQorCQkJCQl9CisJCQkJfQorCQkJfTsKKworCQl1cGRhdGVQcm9ibGVtSW5kaWNhdGlvbiA9IGZhbHNlOworCQl0cnkgeworCQkJLy8gVGhpcyBydW5zIHRoZSBvcHRpb25zLCBhbmQgc2hvd3MgcHJvZ3Jlc3MuCisJCQkvLworCQkJbmV3IFByb2dyZXNzTW9uaXRvckRpYWxvZyhnZXRTaXRlKCkuZ2V0U2hlbGwoKSkucnVuKHRydWUsIGZhbHNlLCBvcGVyYXRpb24pOworCisJCQkvLyBSZWZyZXNoIHRoZSBuZWNlc3Nhcnkgc3RhdGUuCisJCQkvLworCQkJKChCYXNpY0NvbW1hbmRTdGFjayllZGl0aW5nRG9tYWluLmdldENvbW1hbmRTdGFjaygpKS5zYXZlSXNEb25lKCk7CisJCQlmaXJlUHJvcGVydHlDaGFuZ2UoSUVkaXRvclBhcnQuUFJPUF9ESVJUWSk7CisJCX0KKwkJY2F0Y2ggKEV4Y2VwdGlvbiBleGNlcHRpb24pIHsKKwkJCS8vIFNvbWV0aGluZyB3ZW50IHdyb25nIHRoYXQgc2hvdWxkbid0LgorCQkJLy8KKwkJCURpc2Vhc2Vtb2RlbHNFZGl0b3JQbHVnaW4uSU5TVEFOQ0UubG9nKGV4Y2VwdGlvbik7CisJCX0KKwkJdXBkYXRlUHJvYmxlbUluZGljYXRpb24gPSB0cnVlOworCQl1cGRhdGVQcm9ibGVtSW5kaWNhdGlvbigpOworCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyB3aGV0aGVyIHNvbWV0aGluZyBoYXMgYmVlbiBwZXJzaXN0ZWQgdG8gdGhlIFVSSSBvZiB0aGUgc3BlY2lmaWVkIHJlc291cmNlLgorCSAqIFRoZSBpbXBsZW1lbnRhdGlvbiB1c2VzIHRoZSBVUkkgY29udmVydGVyIGZyb20gdGhlIGVkaXRvcidzIHJlc291cmNlIHNldCB0byB0cnkgdG8gb3BlbiBhbiBpbnB1dCBzdHJlYW0uIAorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBib29sZWFuIGlzUGVyc2lzdGVkKFJlc291cmNlIHJlc291cmNlKSB7CisJCWJvb2xlYW4gcmVzdWx0ID0gZmFsc2U7CisJCXRyeSB7CisJCQlJbnB1dFN0cmVhbSBzdHJlYW0gPSBlZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkuZ2V0VVJJQ29udmVydGVyKCkuY3JlYXRlSW5wdXRTdHJlYW0ocmVzb3VyY2UuZ2V0VVJJKCkpOworCQkJaWYgKHN0cmVhbSAhPSBudWxsKSB7CisJCQkJcmVzdWx0ID0gdHJ1ZTsKKwkJCQlzdHJlYW0uY2xvc2UoKTsKKwkJCX0KKwkJfQorCQljYXRjaCAoSU9FeGNlcHRpb24gZSkgeworCQkJLy8gSWdub3JlCisJCX0KKwkJcmV0dXJuIHJlc3VsdDsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFsd2F5cyByZXR1cm5zIHRydWUgYmVjYXVzZSBpdCBpcyBub3QgY3VycmVudGx5IHN1cHBvcnRlZC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgYm9vbGVhbiBpc1NhdmVBc0FsbG93ZWQoKSB7CisJCXJldHVybiB0cnVlOworCX0KKworCS8qKgorCSAqIFRoaXMgYWxzbyBjaGFuZ2VzIHRoZSBlZGl0b3IncyBpbnB1dC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBkb1NhdmVBcygpIHsKKwkJU3RyaW5nW10gZmlsdGVycyA9IEZJTEVfRVhURU5TSU9OX0ZJTFRFUlMudG9BcnJheShuZXcgU3RyaW5nW0ZJTEVfRVhURU5TSU9OX0ZJTFRFUlMuc2l6ZSgpXSk7CisJCVN0cmluZ1tdIGZpbGVzID0gRGlzZWFzZW1vZGVsc0VkaXRvckFkdmlzb3Iub3BlbkZpbGVQYXRoRGlhbG9nKGdldFNpdGUoKS5nZXRTaGVsbCgpLCBTV1QuU0FWRSwgZmlsdGVycyk7CisJCWlmIChmaWxlcy5sZW5ndGggPiAwKSB7CisJCQlVUkkgdXJpID0gVVJJLmNyZWF0ZUZpbGVVUkkoZmlsZXNbMF0pOworCQkJZG9TYXZlQXModXJpLCBuZXcgVVJJRWRpdG9ySW5wdXQodXJpKSk7CisJCX0KKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBkb1NhdmVBcyhVUkkgdXJpLCBJRWRpdG9ySW5wdXQgZWRpdG9ySW5wdXQpIHsKKwkJKGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKS5nZXRSZXNvdXJjZXMoKS5nZXQoMCkpLnNldFVSSSh1cmkpOworCQlzZXRJbnB1dFdpdGhOb3RpZnkoZWRpdG9ySW5wdXQpOworCQlzZXRQYXJ0TmFtZShlZGl0b3JJbnB1dC5nZXROYW1lKCkpOworCQlJUHJvZ3Jlc3NNb25pdG9yIHByb2dyZXNzTW9uaXRvciA9CisJCQlnZXRBY3Rpb25CYXJzKCkuZ2V0U3RhdHVzTGluZU1hbmFnZXIoKSAhPSBudWxsID8KKwkJCQlnZXRBY3Rpb25CYXJzKCkuZ2V0U3RhdHVzTGluZU1hbmFnZXIoKS5nZXRQcm9ncmVzc01vbml0b3IoKSA6CisJCQkJbmV3IE51bGxQcm9ncmVzc01vbml0b3IoKTsKKwkJZG9TYXZlKHByb2dyZXNzTW9uaXRvcik7CisJfQorCisJLyoqCisJICogVGhpcyBpcyBjYWxsZWQgZHVyaW5nIHN0YXJ0dXAuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgaW5pdChJRWRpdG9yU2l0ZSBzaXRlLCBJRWRpdG9ySW5wdXQgZWRpdG9ySW5wdXQpIHsKKwkJc2V0U2l0ZShzaXRlKTsKKwkJc2V0SW5wdXRXaXRoTm90aWZ5KGVkaXRvcklucHV0KTsKKwkJc2V0UGFydE5hbWUoZWRpdG9ySW5wdXQuZ2V0TmFtZSgpKTsKKwkJc2l0ZS5zZXRTZWxlY3Rpb25Qcm92aWRlcih0aGlzKTsKKwkJc2l0ZS5nZXRQYWdlKCkuYWRkUGFydExpc3RlbmVyKHBhcnRMaXN0ZW5lcik7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgc2V0Rm9jdXMoKSB7CisJCWlmIChjdXJyZW50Vmlld2VyUGFuZSAhPSBudWxsKSB7CisJCQljdXJyZW50Vmlld2VyUGFuZS5zZXRGb2N1cygpOworCQl9CisJCWVsc2UgeworCQkJZ2V0Q29udHJvbChnZXRBY3RpdmVQYWdlKCkpLnNldEZvY3VzKCk7CisJCX0KKwl9CisKKwkvKioKKwkgKiBUaGlzIGltcGxlbWVudHMge0BsaW5rIG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvblByb3ZpZGVyfS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBhZGRTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIoSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lciBsaXN0ZW5lcikgeworCQlzZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXJzLmFkZChsaXN0ZW5lcik7CisJfQorCisJLyoqCisJICogVGhpcyBpbXBsZW1lbnRzIHtAbGluayBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb25Qcm92aWRlcn0uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgcmVtb3ZlU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyKElTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIgbGlzdGVuZXIpIHsKKwkJc2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVycy5yZW1vdmUobGlzdGVuZXIpOworCX0KKworCS8qKgorCSAqIFRoaXMgaW1wbGVtZW50cyB7QGxpbmsgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uUHJvdmlkZXJ9IHRvIHJldHVybiB0aGlzIGVkaXRvcidzIG92ZXJhbGwgc2VsZWN0aW9uLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBJU2VsZWN0aW9uIGdldFNlbGVjdGlvbigpIHsKKwkJcmV0dXJuIGVkaXRvclNlbGVjdGlvbjsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGltcGxlbWVudHMge0BsaW5rIG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvblByb3ZpZGVyfSB0byBzZXQgdGhpcyBlZGl0b3IncyBvdmVyYWxsIHNlbGVjdGlvbi4KKwkgKiBDYWxsaW5nIHRoaXMgcmVzdWx0IHdpbGwgbm90aWZ5IHRoZSBsaXN0ZW5lcnMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgc2V0U2VsZWN0aW9uKElTZWxlY3Rpb24gc2VsZWN0aW9uKSB7CisJCWVkaXRvclNlbGVjdGlvbiA9IHNlbGVjdGlvbjsKKworCQlmb3IgKElTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIgbGlzdGVuZXIgOiBzZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXJzKSB7CisJCQlsaXN0ZW5lci5zZWxlY3Rpb25DaGFuZ2VkKG5ldyBTZWxlY3Rpb25DaGFuZ2VkRXZlbnQodGhpcywgc2VsZWN0aW9uKSk7CisJCX0KKwkJc2V0U3RhdHVzTGluZU1hbmFnZXIoc2VsZWN0aW9uKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRTdGF0dXNMaW5lTWFuYWdlcihJU2VsZWN0aW9uIHNlbGVjdGlvbikgeworCQlJU3RhdHVzTGluZU1hbmFnZXIgc3RhdHVzTGluZU1hbmFnZXIgPSBjdXJyZW50Vmlld2VyICE9IG51bGwgJiYgY3VycmVudFZpZXdlciA9PSBjb250ZW50T3V0bGluZVZpZXdlciA/CisJCQljb250ZW50T3V0bGluZVN0YXR1c0xpbmVNYW5hZ2VyIDogZ2V0QWN0aW9uQmFycygpLmdldFN0YXR1c0xpbmVNYW5hZ2VyKCk7CisKKwkJaWYgKHN0YXR1c0xpbmVNYW5hZ2VyICE9IG51bGwpIHsKKwkJCWlmIChzZWxlY3Rpb24gaW5zdGFuY2VvZiBJU3RydWN0dXJlZFNlbGVjdGlvbikgeworCQkJCUNvbGxlY3Rpb248Pz4gY29sbGVjdGlvbiA9ICgoSVN0cnVjdHVyZWRTZWxlY3Rpb24pc2VsZWN0aW9uKS50b0xpc3QoKTsKKwkJCQlzd2l0Y2ggKGNvbGxlY3Rpb24uc2l6ZSgpKSB7CisJCQkJCWNhc2UgMDogeworCQkJCQkJc3RhdHVzTGluZU1hbmFnZXIuc2V0TWVzc2FnZShnZXRTdHJpbmcoIl9VSV9Ob09iamVjdFNlbGVjdGVkIikpOyAvLyROT04tTkxTLTEkCisJCQkJCQlicmVhazsKKwkJCQkJfQorCQkJCQljYXNlIDE6IHsKKwkJCQkJCVN0cmluZyB0ZXh0ID0gbmV3IEFkYXB0ZXJGYWN0b3J5SXRlbURlbGVnYXRvcihhZGFwdGVyRmFjdG9yeSkuZ2V0VGV4dChjb2xsZWN0aW9uLml0ZXJhdG9yKCkubmV4dCgpKTsKKwkJCQkJCXN0YXR1c0xpbmVNYW5hZ2VyLnNldE1lc3NhZ2UoZ2V0U3RyaW5nKCJfVUlfU2luZ2xlT2JqZWN0U2VsZWN0ZWQiLCB0ZXh0KSk7IC8vJE5PTi1OTFMtMSQKKwkJCQkJCWJyZWFrOworCQkJCQl9CisJCQkJCWRlZmF1bHQ6IHsKKwkJCQkJCXN0YXR1c0xpbmVNYW5hZ2VyLnNldE1lc3NhZ2UoZ2V0U3RyaW5nKCJfVUlfTXVsdGlPYmplY3RTZWxlY3RlZCIsIEludGVnZXIudG9TdHJpbmcoY29sbGVjdGlvbi5zaXplKCkpKSk7IC8vJE5PTi1OTFMtMSQKKwkJCQkJCWJyZWFrOworCQkJCQl9CisJCQkJfQorCQkJfQorCQkJZWxzZSB7CisJCQkJc3RhdHVzTGluZU1hbmFnZXIuc2V0TWVzc2FnZSgiIik7IC8vJE5PTi1OTFMtMSQKKwkJCX0KKwkJfQorCX0KKworCS8qKgorCSAqIFRoaXMgbG9va3MgdXAgYSBzdHJpbmcgaW4gdGhlIHBsdWdpbidzIHBsdWdpbi5wcm9wZXJ0aWVzIGZpbGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIGdldFN0cmluZyhTdHJpbmcga2V5KSB7CisJCXJldHVybiBEaXNlYXNlbW9kZWxzRWRpdG9yUGx1Z2luLklOU1RBTkNFLmdldFN0cmluZyhrZXkpOworCX0KKworCS8qKgorCSAqIFRoaXMgbG9va3MgdXAgYSBzdHJpbmcgaW4gcGx1Z2luLnByb3BlcnRpZXMsIG1ha2luZyBhIHN1YnN0aXR1dGlvbi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcml2YXRlIHN0YXRpYyBTdHJpbmcgZ2V0U3RyaW5nKFN0cmluZyBrZXksIE9iamVjdCBzMSkgeworCQlyZXR1cm4gRGlzZWFzZW1vZGVsc0VkaXRvclBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoa2V5LCBuZXcgT2JqZWN0IFtdIHsgczEgfSk7CisJfQorCisJLyoqCisJICogVGhpcyBpbXBsZW1lbnRzIHtAbGluayBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSU1lbnVMaXN0ZW5lcn0gdG8gaGVscCBmaWxsIHRoZSBjb250ZXh0IG1lbnVzIHdpdGggY29udHJpYnV0aW9ucyBmcm9tIHRoZSBFZGl0IG1lbnUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgbWVudUFib3V0VG9TaG93KElNZW51TWFuYWdlciBtZW51TWFuYWdlcikgeworCQkoKElNZW51TGlzdGVuZXIpZ2V0RWRpdG9yU2l0ZSgpLmdldEFjdGlvbkJhckNvbnRyaWJ1dG9yKCkpLm1lbnVBYm91dFRvU2hvdyhtZW51TWFuYWdlcik7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVkaXRpbmdEb21haW5BY3Rpb25CYXJDb250cmlidXRvciBnZXRBY3Rpb25CYXJDb250cmlidXRvcigpIHsKKwkJcmV0dXJuIChFZGl0aW5nRG9tYWluQWN0aW9uQmFyQ29udHJpYnV0b3IpZ2V0RWRpdG9yU2l0ZSgpLmdldEFjdGlvbkJhckNvbnRyaWJ1dG9yKCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIElBY3Rpb25CYXJzIGdldEFjdGlvbkJhcnMoKSB7CisJCXJldHVybiBnZXRBY3Rpb25CYXJDb250cmlidXRvcigpLmdldEFjdGlvbkJhcnMoKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQWRhcHRlckZhY3RvcnkgZ2V0QWRhcHRlckZhY3RvcnkoKSB7CisJCXJldHVybiBhZGFwdGVyRmFjdG9yeTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBkaXNwb3NlKCkgeworCQl1cGRhdGVQcm9ibGVtSW5kaWNhdGlvbiA9IGZhbHNlOworCisJCWdldFNpdGUoKS5nZXRQYWdlKCkucmVtb3ZlUGFydExpc3RlbmVyKHBhcnRMaXN0ZW5lcik7CisKKwkJYWRhcHRlckZhY3RvcnkuZGlzcG9zZSgpOworCisJCWlmIChnZXRBY3Rpb25CYXJDb250cmlidXRvcigpLmdldEFjdGl2ZUVkaXRvcigpID09IHRoaXMpIHsKKwkJCWdldEFjdGlvbkJhckNvbnRyaWJ1dG9yKCkuc2V0QWN0aXZlRWRpdG9yKG51bGwpOworCQl9CisKKwkJaWYgKHByb3BlcnR5U2hlZXRQYWdlICE9IG51bGwpIHsKKwkJCXByb3BlcnR5U2hlZXRQYWdlLmRpc3Bvc2UoKTsKKwkJfQorCisJCWlmIChjb250ZW50T3V0bGluZVBhZ2UgIT0gbnVsbCkgeworCQkJY29udGVudE91dGxpbmVQYWdlLmRpc3Bvc2UoKTsKKwkJfQorCisJCXN1cGVyLmRpc3Bvc2UoKTsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHdoZXRoZXIgdGhlIG91dGxpbmUgdmlldyBzaG91bGQgYmUgcHJlc2VudGVkIHRvIHRoZSB1c2VyLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBib29sZWFuIHNob3dPdXRsaW5lVmlldygpIHsKKwkJcmV0dXJuIHRydWU7CisJfQorfQpkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9wcmVkaWNhdGVzL2Rpc2Vhc2VwcmVkaWNhdGVzL3ByZXNlbnRhdGlvbi9EaXNlYXNlcHJlZGljYXRlc01vZGVsV2l6YXJkLmphdmEgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3ByZWRpY2F0ZXMvZGlzZWFzZXByZWRpY2F0ZXMvcHJlc2VudGF0aW9uL0Rpc2Vhc2VwcmVkaWNhdGVzTW9kZWxXaXphcmQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NDliNTU3Ci0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9wcmVkaWNhdGVzL2Rpc2Vhc2VwcmVkaWNhdGVzL3ByZXNlbnRhdGlvbi9EaXNlYXNlcHJlZGljYXRlc01vZGVsV2l6YXJkLmphdmEKQEAgLTAsMCArMSw1OTYgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnByZWRpY2F0ZXMuZGlzZWFzZXByZWRpY2F0ZXMucHJlc2VudGF0aW9uOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAKKyAqIENvcHlyaWdodCAoYykgMjAxMSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4gCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIAorICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wIAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQgCisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbCAKKyAqIAorICogQ29udHJpYnV0b3JzOiAKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCitpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlzOworaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOworaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uczsKK2ltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuTWFwOworaW1wb3J0IGphdmEudXRpbC5NaXNzaW5nUmVzb3VyY2VFeGNlcHRpb247CitpbXBvcnQgamF2YS51dGlsLlN0cmluZ1Rva2VuaXplcjsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5VUkk7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3NpZmllcjsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5yZXNvdXJjZS5SZXNvdXJjZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUucmVzb3VyY2UuUmVzb3VyY2VTZXQ7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUucmVzb3VyY2UuaW1wbC5SZXNvdXJjZVNldEltcGw7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS54bWkuWE1MUmVzb3VyY2U7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5wcm92aWRlci5FeHRlbmRlZEltYWdlUmVnaXN0cnk7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVByb2dyZXNzTW9uaXRvcjsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmRpYWxvZ3MuTWVzc2FnZURpYWxvZzsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVN0cnVjdHVyZWRTZWxlY3Rpb247CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS53aXphcmQuV2l6YXJkOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLndpemFyZC5XaXphcmRQYWdlOworCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LlNXVDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuTW9kaWZ5TGlzdGVuZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5Nb2RpZnlFdmVudDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5sYXlvdXQuR3JpZERhdGE7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5HcmlkTGF5b3V0OworCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tYm87CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkxhYmVsOworCitpbXBvcnQgb3JnLmVjbGlwc2UudWkuSU5ld1dpemFyZDsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5JV29ya2JlbmNoOworCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnByZWRpY2F0ZXMuZGlzZWFzZXByZWRpY2F0ZXMuRGlzZWFzZXByZWRpY2F0ZXNGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5wcmVkaWNhdGVzLmRpc2Vhc2VwcmVkaWNhdGVzLkRpc2Vhc2VwcmVkaWNhdGVzUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQucHJvdmlkZXIuRGlzZWFzZW1vZGVsc0VkaXRQbHVnaW47CisKKworaW1wb3J0IGphdmEuaW8uRmlsZTsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLm9wZXJhdGlvbi5JUnVubmFibGVXaXRoUHJvZ3Jlc3M7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQucHJlc2VudGF0aW9uLkRpc2Vhc2Vtb2RlbHNFZGl0b3JBZHZpc29yOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5wcmVzZW50YXRpb24uRGlzZWFzZW1vZGVsc0VkaXRvclBsdWdpbjsKKworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuU2VsZWN0aW9uQWRhcHRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLlNlbGVjdGlvbkV2ZW50OworCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQnV0dG9uOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlRleHQ7CisKKworLyoqCisgKiBUaGlzIGlzIGEgc2ltcGxlIHdpemFyZCBmb3IgY3JlYXRpbmcgYSBuZXcgbW9kZWwgZmlsZS4KKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIERpc2Vhc2VwcmVkaWNhdGVzTW9kZWxXaXphcmQgZXh0ZW5kcyBXaXphcmQgaW1wbGVtZW50cyBJTmV3V2l6YXJkIHsKKwkvKioKKwkgKiBUaGUgc3VwcG9ydGVkIGV4dGVuc2lvbnMgZm9yIGNyZWF0ZWQgZmlsZXMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBMaXN0PFN0cmluZz4gRklMRV9FWFRFTlNJT05TID0KKwkJQ29sbGVjdGlvbnMudW5tb2RpZmlhYmxlTGlzdChBcnJheXMuYXNMaXN0KERpc2Vhc2Vtb2RlbHNFZGl0b3JQbHVnaW4uSU5TVEFOQ0UuZ2V0U3RyaW5nKCJfVUlfRGlzZWFzZXByZWRpY2F0ZXNFZGl0b3JGaWxlbmFtZUV4dGVuc2lvbnMiKS5zcGxpdCgiXFxzKixcXHMqIikpKTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCisKKwkvKioKKwkgKiBBIGZvcm1hdHRlZCBsaXN0IG9mIHN1cHBvcnRlZCBmaWxlIGV4dGVuc2lvbnMsIHN1aXRhYmxlIGZvciBkaXNwbGF5LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEZPUk1BVFRFRF9GSUxFX0VYVEVOU0lPTlMgPQorCQlEaXNlYXNlbW9kZWxzRWRpdG9yUGx1Z2luLklOU1RBTkNFLmdldFN0cmluZygiX1VJX0Rpc2Vhc2VwcmVkaWNhdGVzRWRpdG9yRmlsZW5hbWVFeHRlbnNpb25zIikucmVwbGFjZUFsbCgiXFxzKixcXHMqIiwgIiwgIik7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJCAvLyROT04tTkxTLTMkCisKKwkvKioKKwkgKiBUaGlzIGNhY2hlcyBhbiBpbnN0YW5jZSBvZiB0aGUgbW9kZWwgcGFja2FnZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgRGlzZWFzZXByZWRpY2F0ZXNQYWNrYWdlIGRpc2Vhc2VwcmVkaWNhdGVzUGFja2FnZSA9IERpc2Vhc2VwcmVkaWNhdGVzUGFja2FnZS5lSU5TVEFOQ0U7CisKKwkvKioKKwkgKiBUaGlzIGNhY2hlcyBhbiBpbnN0YW5jZSBvZiB0aGUgbW9kZWwgZmFjdG9yeS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgRGlzZWFzZXByZWRpY2F0ZXNGYWN0b3J5IGRpc2Vhc2VwcmVkaWNhdGVzRmFjdG9yeSA9IGRpc2Vhc2VwcmVkaWNhdGVzUGFja2FnZS5nZXREaXNlYXNlcHJlZGljYXRlc0ZhY3RvcnkoKTsKKworCS8qKgorCSAqIFRoaXMgaXMgdGhlIGluaXRpYWwgb2JqZWN0IGNyZWF0aW9uIHBhZ2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIERpc2Vhc2VwcmVkaWNhdGVzTW9kZWxXaXphcmRJbml0aWFsT2JqZWN0Q3JlYXRpb25QYWdlIGluaXRpYWxPYmplY3RDcmVhdGlvblBhZ2U7CisKKwkvKioKKwkgKiBSZW1lbWJlciB0aGUgc2VsZWN0aW9uIGR1cmluZyBpbml0aWFsaXphdGlvbiBmb3IgcG9wdWxhdGluZyB0aGUgZGVmYXVsdCBjb250YWluZXIuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIElTdHJ1Y3R1cmVkU2VsZWN0aW9uIHNlbGVjdGlvbjsKKworCS8qKgorCSAqIFJlbWVtYmVyIHRoZSB3b3JrYmVuY2ggZHVyaW5nIGluaXRpYWxpemF0aW9uLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBJV29ya2JlbmNoIHdvcmtiZW5jaDsKKworCS8qKgorCSAqIENhY2hlcyB0aGUgbmFtZXMgb2YgdGhlIHR5cGVzIHRoYXQgY2FuIGJlIGNyZWF0ZWQgYXMgdGhlIHJvb3Qgb2JqZWN0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBMaXN0PFN0cmluZz4gaW5pdGlhbE9iamVjdE5hbWVzOworCisJLyoqCisJICogVGhpcyBqdXN0IHJlY29yZHMgdGhlIGluZm9ybWF0aW9uLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIGluaXQoSVdvcmtiZW5jaCB3b3JrYmVuY2gsIElTdHJ1Y3R1cmVkU2VsZWN0aW9uIHNlbGVjdGlvbikgeworCQl0aGlzLndvcmtiZW5jaCA9IHdvcmtiZW5jaDsKKwkJdGhpcy5zZWxlY3Rpb24gPSBzZWxlY3Rpb247CisJCXNldFdpbmRvd1RpdGxlKERpc2Vhc2Vtb2RlbHNFZGl0b3JQbHVnaW4uSU5TVEFOQ0UuZ2V0U3RyaW5nKCJfVUlfV2l6YXJkX2xhYmVsIikpOyAvLyROT04tTkxTLTEkCisJCXNldERlZmF1bHRQYWdlSW1hZ2VEZXNjcmlwdG9yKEV4dGVuZGVkSW1hZ2VSZWdpc3RyeS5JTlNUQU5DRS5nZXRJbWFnZURlc2NyaXB0b3IoRGlzZWFzZW1vZGVsc0VkaXRvclBsdWdpbi5JTlNUQU5DRS5nZXRJbWFnZSgiZnVsbC93aXpiYW4vTmV3RGlzZWFzZXByZWRpY2F0ZXMiKSkpOyAvLyROT04tTkxTLTEkCisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgbmFtZXMgb2YgdGhlIHR5cGVzIHRoYXQgY2FuIGJlIGNyZWF0ZWQgYXMgdGhlIHJvb3Qgb2JqZWN0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBDb2xsZWN0aW9uPFN0cmluZz4gZ2V0SW5pdGlhbE9iamVjdE5hbWVzKCkgeworCQlpZiAoaW5pdGlhbE9iamVjdE5hbWVzID09IG51bGwpIHsKKwkJCWluaXRpYWxPYmplY3ROYW1lcyA9IG5ldyBBcnJheUxpc3Q8U3RyaW5nPigpOworCQkJZm9yIChFQ2xhc3NpZmllciBlQ2xhc3NpZmllciA6IGRpc2Vhc2VwcmVkaWNhdGVzUGFja2FnZS5nZXRFQ2xhc3NpZmllcnMoKSkgeworCQkJCWlmIChlQ2xhc3NpZmllciBpbnN0YW5jZW9mIEVDbGFzcykgeworCQkJCQlFQ2xhc3MgZUNsYXNzID0gKEVDbGFzcyllQ2xhc3NpZmllcjsKKwkJCQkJaWYgKCFlQ2xhc3MuaXNBYnN0cmFjdCgpKSB7CisJCQkJCQlpbml0aWFsT2JqZWN0TmFtZXMuYWRkKGVDbGFzcy5nZXROYW1lKCkpOworCQkJCQl9CisJCQkJfQorCQkJfQorCQkJQ29sbGVjdGlvbnMuc29ydChpbml0aWFsT2JqZWN0TmFtZXMsIGphdmEudGV4dC5Db2xsYXRvci5nZXRJbnN0YW5jZSgpKTsKKwkJfQorCQlyZXR1cm4gaW5pdGlhbE9iamVjdE5hbWVzOworCX0KKworCS8qKgorCSAqIENyZWF0ZSBhIG5ldyBtb2RlbC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgRU9iamVjdCBjcmVhdGVJbml0aWFsTW9kZWwoKSB7CisJCUVDbGFzcyBlQ2xhc3MgPSAoRUNsYXNzKWRpc2Vhc2VwcmVkaWNhdGVzUGFja2FnZS5nZXRFQ2xhc3NpZmllcihpbml0aWFsT2JqZWN0Q3JlYXRpb25QYWdlLmdldEluaXRpYWxPYmplY3ROYW1lKCkpOworCQlFT2JqZWN0IHJvb3RPYmplY3QgPSBkaXNlYXNlcHJlZGljYXRlc0ZhY3RvcnkuY3JlYXRlKGVDbGFzcyk7CisJCXJldHVybiByb290T2JqZWN0OworCX0KKworCS8qKgorCSAqIERvIHRoZSB3b3JrIGFmdGVyIGV2ZXJ5dGhpbmcgaXMgc3BlY2lmaWVkLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBib29sZWFuIHBlcmZvcm1GaW5pc2goKSB7CisJCXRyeSB7CisJCQkvLyBHZXQgdGhlIFVSSSBvZiB0aGUgbW9kZWwgZmlsZS4KKwkJCS8vCisJCQlmaW5hbCBVUkkgZmlsZVVSSSA9IGdldE1vZGVsVVJJKCk7CisJCQlpZiAobmV3IEZpbGUoZmlsZVVSSS50b0ZpbGVTdHJpbmcoKSkuZXhpc3RzKCkpIHsKKwkJCQlpZiAoIU1lc3NhZ2VEaWFsb2cub3BlblF1ZXN0aW9uCisJCQkJCQkoZ2V0U2hlbGwoKSwKKwkJCQkJCSBEaXNlYXNlbW9kZWxzRWRpdG9yUGx1Z2luLklOU1RBTkNFLmdldFN0cmluZygiX1VJX1F1ZXN0aW9uX3RpdGxlIiksIC8vJE5PTi1OTFMtMSQKKwkJCQkJCSBEaXNlYXNlbW9kZWxzRWRpdG9yUGx1Z2luLklOU1RBTkNFLmdldFN0cmluZygiX1dBUk5fRmlsZUNvbmZsaWN0IiwgbmV3IFN0cmluZyBbXXsgZmlsZVVSSS50b0ZpbGVTdHJpbmcoKSB9KSkpIC8vJE5PTi1OTFMtMSQKKwkJCQl7CisJCQkJCWluaXRpYWxPYmplY3RDcmVhdGlvblBhZ2Uuc2VsZWN0RmlsZUZpZWxkKCk7CisJCQkJCXJldHVybiBmYWxzZTsKKwkJCQl9CisJCQl9CisJCQkKKwkJCS8vIERvIHRoZSB3b3JrIHdpdGhpbiBhbiBvcGVyYXRpb24uCisJCQkvLworCQkJSVJ1bm5hYmxlV2l0aFByb2dyZXNzIG9wZXJhdGlvbiA9IG5ldyBJUnVubmFibGVXaXRoUHJvZ3Jlc3MoKSB7CisJCQkJcHVibGljIHZvaWQgcnVuKElQcm9ncmVzc01vbml0b3IgcHJvZ3Jlc3NNb25pdG9yKSB7CisJCQkJCQl0cnkgeworCQkJCQkJCS8vIENyZWF0ZSBhIHJlc291cmNlIHNldAorCQkJCQkJCS8vCisJCQkJCQkJUmVzb3VyY2VTZXQgcmVzb3VyY2VTZXQgPSBuZXcgUmVzb3VyY2VTZXRJbXBsKCk7CisKKwkJCQkJCQkvLyBDcmVhdGUgYSByZXNvdXJjZSBmb3IgdGhpcyBmaWxlLgorCQkJCQkJCS8vCisJCQkJCQkJUmVzb3VyY2UgcmVzb3VyY2UgPSByZXNvdXJjZVNldC5jcmVhdGVSZXNvdXJjZShmaWxlVVJJKTsKKworCQkJCQkJCS8vIEFkZCB0aGUgaW5pdGlhbCBtb2RlbCBvYmplY3QgdG8gdGhlIGNvbnRlbnRzLgorCQkJCQkJCS8vCisJCQkJCQkJRU9iamVjdCByb290T2JqZWN0ID0gY3JlYXRlSW5pdGlhbE1vZGVsKCk7CisJCQkJCQkJaWYgKHJvb3RPYmplY3QgIT0gbnVsbCkgeworCQkJCQkJCQlyZXNvdXJjZS5nZXRDb250ZW50cygpLmFkZChyb290T2JqZWN0KTsKKwkJCQkJCQl9CisKKwkJCQkJCQkvLyBTYXZlIHRoZSBjb250ZW50cyBvZiB0aGUgcmVzb3VyY2UgdG8gdGhlIGZpbGUgc3lzdGVtLgorCQkJCQkJCS8vCisJCQkJCQkJTWFwPE9iamVjdCwgT2JqZWN0PiBvcHRpb25zID0gbmV3IEhhc2hNYXA8T2JqZWN0LCBPYmplY3Q+KCk7CisJCQkJCQkJb3B0aW9ucy5wdXQoWE1MUmVzb3VyY2UuT1BUSU9OX0VOQ09ESU5HLCBpbml0aWFsT2JqZWN0Q3JlYXRpb25QYWdlLmdldEVuY29kaW5nKCkpOworCQkJCQkJCXJlc291cmNlLnNhdmUob3B0aW9ucyk7CisJCQkJCQl9CisJCQkJCQljYXRjaCAoRXhjZXB0aW9uIGV4Y2VwdGlvbikgeworCQkJCQkJCURpc2Vhc2Vtb2RlbHNFZGl0b3JQbHVnaW4uSU5TVEFOQ0UubG9nKGV4Y2VwdGlvbik7CisJCQkJCQl9CisJCQkJCQlmaW5hbGx5IHsKKwkJCQkJCQlwcm9ncmVzc01vbml0b3IuZG9uZSgpOworCQkJCQkJfQorCQkJCQl9CisJCQkJfTsKKworCQkJZ2V0Q29udGFpbmVyKCkucnVuKGZhbHNlLCBmYWxzZSwgb3BlcmF0aW9uKTsKKworCQkJcmV0dXJuIERpc2Vhc2Vtb2RlbHNFZGl0b3JBZHZpc29yLm9wZW5FZGl0b3Iod29ya2JlbmNoLCBmaWxlVVJJKTsJCQkKKwkJfQorCQljYXRjaCAoRXhjZXB0aW9uIGV4Y2VwdGlvbikgeworCQkJRGlzZWFzZW1vZGVsc0VkaXRvclBsdWdpbi5JTlNUQU5DRS5sb2coZXhjZXB0aW9uKTsKKwkJCXJldHVybiBmYWxzZTsKKwkJfQorCX0KKworCS8qKgorCSAqIFRoaXMgaXMgdGhlIHBhZ2Ugd2hlcmUgdGhlIHR5cGUgb2Ygb2JqZWN0IHRvIGNyZWF0ZSBpcyBzZWxlY3RlZC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgY2xhc3MgRGlzZWFzZXByZWRpY2F0ZXNNb2RlbFdpemFyZEluaXRpYWxPYmplY3RDcmVhdGlvblBhZ2UgZXh0ZW5kcyBXaXphcmRQYWdlIHsKKwkJLyoqCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlwcm90ZWN0ZWQgVGV4dCBmaWxlRmllbGQ7CisKKwkJLyoqCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlwcm90ZWN0ZWQgQ29tYm8gaW5pdGlhbE9iamVjdEZpZWxkOworCisJCS8qKgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKi8KKwkJcHJvdGVjdGVkIExpc3Q8U3RyaW5nPiBlbmNvZGluZ3M7CisKKwkJLyoqCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlwcm90ZWN0ZWQgQ29tYm8gZW5jb2RpbmdGaWVsZDsKKworCQkvKioKKwkJICogUGFzcyBpbiB0aGUgc2VsZWN0aW9uLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJcHVibGljIERpc2Vhc2VwcmVkaWNhdGVzTW9kZWxXaXphcmRJbml0aWFsT2JqZWN0Q3JlYXRpb25QYWdlKFN0cmluZyBwYWdlSWQpIHsKKwkJCXN1cGVyKHBhZ2VJZCk7CisJCX0KKworCQkvKioKKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCXB1YmxpYyB2b2lkIGNyZWF0ZUNvbnRyb2woQ29tcG9zaXRlIHBhcmVudCkgeworCQkJQ29tcG9zaXRlIGNvbXBvc2l0ZSA9IG5ldyBDb21wb3NpdGUocGFyZW50LCBTV1QuTk9ORSk7IHsKKwkJCQlHcmlkTGF5b3V0IGxheW91dCA9IG5ldyBHcmlkTGF5b3V0KCk7CisJCQkJbGF5b3V0Lm51bUNvbHVtbnMgPSAxOworCQkJCWxheW91dC52ZXJ0aWNhbFNwYWNpbmcgPSAxMjsKKwkJCQljb21wb3NpdGUuc2V0TGF5b3V0KGxheW91dCk7CisKKwkJCQlHcmlkRGF0YSBkYXRhID0gbmV3IEdyaWREYXRhKCk7CisJCQkJZGF0YS52ZXJ0aWNhbEFsaWdubWVudCA9IEdyaWREYXRhLkZJTEw7CisJCQkJZGF0YS5ncmFiRXhjZXNzVmVydGljYWxTcGFjZSA9IHRydWU7CisJCQkJZGF0YS5ob3Jpem9udGFsQWxpZ25tZW50ID0gR3JpZERhdGEuRklMTDsKKwkJCQljb21wb3NpdGUuc2V0TGF5b3V0RGF0YShkYXRhKTsKKwkJCX0KKwkJCQorCQkJTGFiZWwgcmVzb3VyY2VVUklMYWJlbCA9IG5ldyBMYWJlbChjb21wb3NpdGUsIFNXVC5MRUZUKTsKKwkJCXsKKwkJCQlyZXNvdXJjZVVSSUxhYmVsLnNldFRleHQoRGlzZWFzZW1vZGVsc0VkaXRvclBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoIl9VSV9GaWxlX2xhYmVsIikpOyAvLyROT04tTkxTLTEkCisKKwkJCQlHcmlkRGF0YSBkYXRhID0gbmV3IEdyaWREYXRhKCk7CisJCQkJZGF0YS5ob3Jpem9udGFsQWxpZ25tZW50ID0gR3JpZERhdGEuRklMTDsKKwkJCQlyZXNvdXJjZVVSSUxhYmVsLnNldExheW91dERhdGEoZGF0YSk7CisJCQl9CisKKwkJCUNvbXBvc2l0ZSBmaWxlQ29tcG9zaXRlID0gbmV3IENvbXBvc2l0ZShjb21wb3NpdGUsIFNXVC5OT05FKTsKKwkJCXsKKwkJCQlHcmlkRGF0YSBkYXRhID0gbmV3IEdyaWREYXRhKCk7CisJCQkJZGF0YS5ob3Jpem9udGFsQWxpZ25tZW50ID0gR3JpZERhdGEuRU5EOworCQkJCWZpbGVDb21wb3NpdGUuc2V0TGF5b3V0RGF0YShkYXRhKTsKKworCQkJCUdyaWRMYXlvdXQgbGF5b3V0ID0gbmV3IEdyaWRMYXlvdXQoKTsKKwkJCQlkYXRhLmhvcml6b250YWxBbGlnbm1lbnQgPSBHcmlkRGF0YS5GSUxMOworCQkJCWxheW91dC5tYXJnaW5IZWlnaHQgPSAwOworCQkJCWxheW91dC5tYXJnaW5XaWR0aCA9IDA7CisJCQkJbGF5b3V0Lm51bUNvbHVtbnMgPSAyOworCQkJCWZpbGVDb21wb3NpdGUuc2V0TGF5b3V0KGxheW91dCk7CisJCQl9CisKKwkJCWZpbGVGaWVsZCA9IG5ldyBUZXh0KGZpbGVDb21wb3NpdGUsIFNXVC5CT1JERVIpOworCQkJeworCQkJCUdyaWREYXRhIGRhdGEgPSBuZXcgR3JpZERhdGEoKTsKKwkJCQlkYXRhLmhvcml6b250YWxBbGlnbm1lbnQgPSBHcmlkRGF0YS5GSUxMOworCQkJCWRhdGEuZ3JhYkV4Y2Vzc0hvcml6b250YWxTcGFjZSA9IHRydWU7CisJCQkJZGF0YS5ob3Jpem9udGFsU3BhbiA9IDE7CisJCQkJZmlsZUZpZWxkLnNldExheW91dERhdGEoZGF0YSk7CisJCQl9CisKKwkJCWZpbGVGaWVsZC5hZGRNb2RpZnlMaXN0ZW5lcih2YWxpZGF0b3IpOworCisJCQlCdXR0b24gcmVzb3VyY2VVUklCcm93c2VGaWxlU3lzdGVtQnV0dG9uID0gbmV3IEJ1dHRvbihmaWxlQ29tcG9zaXRlLCBTV1QuUFVTSCk7CisJCQlyZXNvdXJjZVVSSUJyb3dzZUZpbGVTeXN0ZW1CdXR0b24uc2V0VGV4dChEaXNlYXNlbW9kZWxzRWRpdG9yUGx1Z2luLklOU1RBTkNFLmdldFN0cmluZygiX1VJX0Jyb3dzZV9sYWJlbCIpKTsgLy8kTk9OLU5MUy0xJAorCisJCQlyZXNvdXJjZVVSSUJyb3dzZUZpbGVTeXN0ZW1CdXR0b24uYWRkU2VsZWN0aW9uTGlzdGVuZXIKKwkJCQkobmV3IFNlbGVjdGlvbkFkYXB0ZXIoKSB7CisJCQkJCSBAT3ZlcnJpZGUKKwkJCQkJIHB1YmxpYyB2b2lkIHdpZGdldFNlbGVjdGVkKFNlbGVjdGlvbkV2ZW50IGV2ZW50KSB7CisJCQkJCQkgU3RyaW5nW10gZmlsdGVycyA9IERpc2Vhc2VwcmVkaWNhdGVzRWRpdG9yLkZJTEVfRVhURU5TSU9OX0ZJTFRFUlMudG9BcnJheShuZXcgU3RyaW5nW0Rpc2Vhc2VwcmVkaWNhdGVzRWRpdG9yLkZJTEVfRVhURU5TSU9OX0ZJTFRFUlMuc2l6ZSgpXSk7CisJCQkJCQkgU3RyaW5nW10gZmlsZXMgPSBEaXNlYXNlbW9kZWxzRWRpdG9yQWR2aXNvci5vcGVuRmlsZVBhdGhEaWFsb2coZ2V0U2hlbGwoKSwgU1dULlNBVkUsIGZpbHRlcnMpOworCQkJCQkJIGlmIChmaWxlcy5sZW5ndGggPiAwKSB7CisJCQkJCQkJIGZpbGVGaWVsZC5zZXRUZXh0KGZpbGVzWzBdKTsKKwkJCQkJCSB9CisJCQkJCSB9CisJCQkJIH0pOworCQkJTGFiZWwgY29udGFpbmVyTGFiZWwgPSBuZXcgTGFiZWwoY29tcG9zaXRlLCBTV1QuTEVGVCk7CisJCQl7CisJCQkJY29udGFpbmVyTGFiZWwuc2V0VGV4dChEaXNlYXNlbW9kZWxzRWRpdG9yUGx1Z2luLklOU1RBTkNFLmdldFN0cmluZygiX1VJX01vZGVsT2JqZWN0IikpOyAvLyROT04tTkxTLTEkCisKKwkJCQlHcmlkRGF0YSBkYXRhID0gbmV3IEdyaWREYXRhKCk7CisJCQkJZGF0YS5ob3Jpem9udGFsQWxpZ25tZW50ID0gR3JpZERhdGEuRklMTDsKKwkJCQljb250YWluZXJMYWJlbC5zZXRMYXlvdXREYXRhKGRhdGEpOworCQkJfQorCisJCQlpbml0aWFsT2JqZWN0RmllbGQgPSBuZXcgQ29tYm8oY29tcG9zaXRlLCBTV1QuQk9SREVSKTsKKwkJCXsKKwkJCQlHcmlkRGF0YSBkYXRhID0gbmV3IEdyaWREYXRhKCk7CisJCQkJZGF0YS5ob3Jpem9udGFsQWxpZ25tZW50ID0gR3JpZERhdGEuRklMTDsKKwkJCQlkYXRhLmdyYWJFeGNlc3NIb3Jpem9udGFsU3BhY2UgPSB0cnVlOworCQkJCWluaXRpYWxPYmplY3RGaWVsZC5zZXRMYXlvdXREYXRhKGRhdGEpOworCQkJfQorCisJCQlmb3IgKFN0cmluZyBvYmplY3ROYW1lIDogZ2V0SW5pdGlhbE9iamVjdE5hbWVzKCkpIHsKKwkJCQlpbml0aWFsT2JqZWN0RmllbGQuYWRkKGdldExhYmVsKG9iamVjdE5hbWUpKTsKKwkJCX0KKworCQkJaWYgKGluaXRpYWxPYmplY3RGaWVsZC5nZXRJdGVtQ291bnQoKSA9PSAxKSB7CisJCQkJaW5pdGlhbE9iamVjdEZpZWxkLnNlbGVjdCgwKTsKKwkJCX0KKwkJCWluaXRpYWxPYmplY3RGaWVsZC5hZGRNb2RpZnlMaXN0ZW5lcih2YWxpZGF0b3IpOworCisJCQlMYWJlbCBlbmNvZGluZ0xhYmVsID0gbmV3IExhYmVsKGNvbXBvc2l0ZSwgU1dULkxFRlQpOworCQkJeworCQkJCWVuY29kaW5nTGFiZWwuc2V0VGV4dChEaXNlYXNlbW9kZWxzRWRpdG9yUGx1Z2luLklOU1RBTkNFLmdldFN0cmluZygiX1VJX1hNTEVuY29kaW5nIikpOyAvLyROT04tTkxTLTEkCisKKwkJCQlHcmlkRGF0YSBkYXRhID0gbmV3IEdyaWREYXRhKCk7CisJCQkJZGF0YS5ob3Jpem9udGFsQWxpZ25tZW50ID0gR3JpZERhdGEuRklMTDsKKwkJCQllbmNvZGluZ0xhYmVsLnNldExheW91dERhdGEoZGF0YSk7CisJCQl9CisJCQllbmNvZGluZ0ZpZWxkID0gbmV3IENvbWJvKGNvbXBvc2l0ZSwgU1dULkJPUkRFUik7CisJCQl7CisJCQkJR3JpZERhdGEgZGF0YSA9IG5ldyBHcmlkRGF0YSgpOworCQkJCWRhdGEuaG9yaXpvbnRhbEFsaWdubWVudCA9IEdyaWREYXRhLkZJTEw7CisJCQkJZGF0YS5ncmFiRXhjZXNzSG9yaXpvbnRhbFNwYWNlID0gdHJ1ZTsKKwkJCQllbmNvZGluZ0ZpZWxkLnNldExheW91dERhdGEoZGF0YSk7CisJCQl9CisKKwkJCWZvciAoU3RyaW5nIGVuY29kaW5nIDogZ2V0RW5jb2RpbmdzKCkpIHsKKwkJCQllbmNvZGluZ0ZpZWxkLmFkZChlbmNvZGluZyk7CisJCQl9CisKKwkJCWVuY29kaW5nRmllbGQuc2VsZWN0KDApOworCQkJZW5jb2RpbmdGaWVsZC5hZGRNb2RpZnlMaXN0ZW5lcih2YWxpZGF0b3IpOworCisJCQlzZXRQYWdlQ29tcGxldGUodmFsaWRhdGVQYWdlKCkpOworCQkJc2V0Q29udHJvbChjb21wb3NpdGUpOworCQl9CisKKwkJLyoqCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlwcm90ZWN0ZWQgTW9kaWZ5TGlzdGVuZXIgdmFsaWRhdG9yID0KKwkJCW5ldyBNb2RpZnlMaXN0ZW5lcigpIHsKKwkJCQlwdWJsaWMgdm9pZCBtb2RpZnlUZXh0KE1vZGlmeUV2ZW50IGUpIHsKKwkJCQkJc2V0UGFnZUNvbXBsZXRlKHZhbGlkYXRlUGFnZSgpKTsKKwkJCQl9CisJCQl9OworCisJCS8qKgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJcHJvdGVjdGVkIGJvb2xlYW4gdmFsaWRhdGVQYWdlKCkgeworCQkJVVJJIGZpbGVVUkkgPSBnZXRGaWxlVVJJKCk7CisJCQlpZiAoZmlsZVVSSSA9PSBudWxsIHx8IGZpbGVVUkkuaXNFbXB0eSgpKSB7CisJCQkJc2V0RXJyb3JNZXNzYWdlKG51bGwpOworCQkJCXJldHVybiBmYWxzZTsKKwkJCX0KKworCQkJU3RyaW5nIGV4dGVuc2lvbiA9IGZpbGVVUkkuZmlsZUV4dGVuc2lvbigpOworCQkJaWYgKGV4dGVuc2lvbiA9PSBudWxsIHx8ICFGSUxFX0VYVEVOU0lPTlMuY29udGFpbnMoZXh0ZW5zaW9uKSkgeworCQkJCVN0cmluZyBrZXkgPSBGSUxFX0VYVEVOU0lPTlMuc2l6ZSgpID4gMSA/ICJfV0FSTl9GaWxlbmFtZUV4dGVuc2lvbnMiIDogIl9XQVJOX0ZpbGVuYW1lRXh0ZW5zaW9uIjsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCisJCQkJc2V0RXJyb3JNZXNzYWdlKERpc2Vhc2Vtb2RlbHNFZGl0b3JQbHVnaW4uSU5TVEFOQ0UuZ2V0U3RyaW5nKGtleSwgbmV3IE9iamVjdCBbXSB7IEZPUk1BVFRFRF9GSUxFX0VYVEVOU0lPTlMgfSkpOworCQkJCXJldHVybiBmYWxzZTsKKwkJCX0KKworCQkJc2V0RXJyb3JNZXNzYWdlKG51bGwpOworCQkJcmV0dXJuIGdldEluaXRpYWxPYmplY3ROYW1lKCkgIT0gbnVsbCAmJiBnZXRFbmNvZGluZ3MoKS5jb250YWlucyhlbmNvZGluZ0ZpZWxkLmdldFRleHQoKSk7CisJCX0KKworCQkvKioKKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUBPdmVycmlkZQorCQlwdWJsaWMgdm9pZCBzZXRWaXNpYmxlKGJvb2xlYW4gdmlzaWJsZSkgeworCQkJc3VwZXIuc2V0VmlzaWJsZSh2aXNpYmxlKTsKKwkJCWlmICh2aXNpYmxlKSB7CisJCQkJaW5pdGlhbE9iamVjdEZpZWxkLmNsZWFyU2VsZWN0aW9uKCk7CisJCQkJZW5jb2RpbmdGaWVsZC5jbGVhclNlbGVjdGlvbigpOworCQkJCWZpbGVGaWVsZC5zZXRGb2N1cygpOworCQkJfQorCQl9CisKKwkJLyoqCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlwdWJsaWMgU3RyaW5nIGdldEluaXRpYWxPYmplY3ROYW1lKCkgeworCQkJU3RyaW5nIGxhYmVsID0gaW5pdGlhbE9iamVjdEZpZWxkLmdldFRleHQoKTsKKworCQkJZm9yIChTdHJpbmcgbmFtZSA6IGdldEluaXRpYWxPYmplY3ROYW1lcygpKSB7CisJCQkJaWYgKGdldExhYmVsKG5hbWUpLmVxdWFscyhsYWJlbCkpIHsKKwkJCQkJcmV0dXJuIG5hbWU7CisJCQkJfQorCQkJfQorCQkJcmV0dXJuIG51bGw7CisJCX0KKworCQkvKioKKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCXB1YmxpYyBTdHJpbmcgZ2V0RW5jb2RpbmcoKSB7CisJCQlyZXR1cm4gZW5jb2RpbmdGaWVsZC5nZXRUZXh0KCk7CisJCX0KKworCQkvKioKKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCXB1YmxpYyBVUkkgZ2V0RmlsZVVSSSgpIHsKKwkJCXRyeSB7CisJCQkJcmV0dXJuIFVSSS5jcmVhdGVGaWxlVVJJKGZpbGVGaWVsZC5nZXRUZXh0KCkpOworCQkJfQorCQkJY2F0Y2ggKEV4Y2VwdGlvbiBleGNlcHRpb24pIHsKKwkJCQkvLyBJZ25vcmUKKwkJCX0KKwkJCXJldHVybiBudWxsOworCQl9CisKKwkJLyoqCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlwdWJsaWMgdm9pZCBzZWxlY3RGaWxlRmllbGQoKSB7CisJCQkJaW5pdGlhbE9iamVjdEZpZWxkLmNsZWFyU2VsZWN0aW9uKCk7CisJCQkJZW5jb2RpbmdGaWVsZC5jbGVhclNlbGVjdGlvbigpOworCQkJCWZpbGVGaWVsZC5zZWxlY3RBbGwoKTsKKwkJCQlmaWxlRmllbGQuc2V0Rm9jdXMoKTsKKwkJfQkJCisKKwkJLyoqCisJCSAqIFJldHVybnMgdGhlIGxhYmVsIGZvciB0aGUgc3BlY2lmaWVkIHR5cGUgbmFtZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCXByb3RlY3RlZCBTdHJpbmcgZ2V0TGFiZWwoU3RyaW5nIHR5cGVOYW1lKSB7CisJCQl0cnkgeworCQkJCXJldHVybiBEaXNlYXNlbW9kZWxzRWRpdFBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoIl9VSV8iICsgdHlwZU5hbWUgKyAiX3R5cGUiKTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCisJCQl9CisJCQljYXRjaChNaXNzaW5nUmVzb3VyY2VFeGNlcHRpb24gbXJlKSB7CisJCQkJRGlzZWFzZW1vZGVsc0VkaXRvclBsdWdpbi5JTlNUQU5DRS5sb2cobXJlKTsKKwkJCX0KKwkJCXJldHVybiB0eXBlTmFtZTsKKwkJfQorCisJCS8qKgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJcHJvdGVjdGVkIENvbGxlY3Rpb248U3RyaW5nPiBnZXRFbmNvZGluZ3MoKSB7CisJCQlpZiAoZW5jb2RpbmdzID09IG51bGwpIHsKKwkJCQllbmNvZGluZ3MgPSBuZXcgQXJyYXlMaXN0PFN0cmluZz4oKTsKKwkJCQlmb3IgKFN0cmluZ1Rva2VuaXplciBzdHJpbmdUb2tlbml6ZXIgPSBuZXcgU3RyaW5nVG9rZW5pemVyKERpc2Vhc2Vtb2RlbHNFZGl0b3JQbHVnaW4uSU5TVEFOQ0UuZ2V0U3RyaW5nKCJfVUlfWE1MRW5jb2RpbmdDaG9pY2VzIikpOyBzdHJpbmdUb2tlbml6ZXIuaGFzTW9yZVRva2VucygpOyApIC8vJE5PTi1OTFMtMSQKKwkJCQl7CisJCQkJCWVuY29kaW5ncy5hZGQoc3RyaW5nVG9rZW5pemVyLm5leHRUb2tlbigpKTsKKwkJCQl9CisJCQl9CisJCQlyZXR1cm4gZW5jb2RpbmdzOworCQl9CisJfQorCisJLyoqCisJICogVGhlIGZyYW1ld29yayBjYWxscyB0aGlzIHRvIGNyZWF0ZSB0aGUgY29udGVudHMgb2YgdGhlIHdpemFyZC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwkJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgYWRkUGFnZXMoKSB7CisJCWluaXRpYWxPYmplY3RDcmVhdGlvblBhZ2UgPSBuZXcgRGlzZWFzZXByZWRpY2F0ZXNNb2RlbFdpemFyZEluaXRpYWxPYmplY3RDcmVhdGlvblBhZ2UoIldoYXRldmVyMiIpOyAvLyROT04tTkxTLTEkCisJCWluaXRpYWxPYmplY3RDcmVhdGlvblBhZ2Uuc2V0VGl0bGUoRGlzZWFzZW1vZGVsc0VkaXRvclBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoIl9VSV9EaXNlYXNlcHJlZGljYXRlc01vZGVsV2l6YXJkX2xhYmVsIikpOyAvLyROT04tTkxTLTEkCisJCWluaXRpYWxPYmplY3RDcmVhdGlvblBhZ2Uuc2V0RGVzY3JpcHRpb24oRGlzZWFzZW1vZGVsc0VkaXRvclBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoIl9VSV9XaXphcmRfaW5pdGlhbF9vYmplY3RfZGVzY3JpcHRpb24iKSk7IC8vJE5PTi1OTFMtMSQKKwkJYWRkUGFnZShpbml0aWFsT2JqZWN0Q3JlYXRpb25QYWdlKTsKKwl9CisKKwkvKioKKwkgKiBHZXQgdGhlIFVSSSBmcm9tIHRoZSBwYWdlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBVUkkgZ2V0TW9kZWxVUkkoKSB7CisJCXJldHVybiBpbml0aWFsT2JqZWN0Q3JlYXRpb25QYWdlLmdldEZpbGVVUkkoKTsKKwl9CisKK30KZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvc3RhbmRhcmQvcHJlc2VudGF0aW9uL0Rpc2Vhc2Vtb2RlbHNFZGl0b3JBZHZpc29yLmphdmEgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3N0YW5kYXJkL3ByZXNlbnRhdGlvbi9EaXNlYXNlbW9kZWxzRWRpdG9yQWR2aXNvci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjllMjc3NTAKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3N0YW5kYXJkL3ByZXNlbnRhdGlvbi9EaXNlYXNlbW9kZWxzRWRpdG9yQWR2aXNvci5qYXZhCkBAIC0wLDAgKzEsNTg2IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5wcmVzZW50YXRpb247CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgamF2YS5pby5GaWxlOworaW1wb3J0IGphdmEudXRpbC5BcnJheXM7CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnVpLlVSSUVkaXRvcklucHV0OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udWkuYWN0aW9uLldvcmtiZW5jaFdpbmRvd0FjdGlvbkRlbGVnYXRlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5VUkk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlVuaXF1ZUVMaXN0OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmFjdGlvbi5Mb2FkUmVzb3VyY2VBY3Rpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkudXRpbC5FZGl0VUlVdGlsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5wcmVzZW50YXRpb24uRGlzZWFzZW1vZGVsc0VkaXRvclBsdWdpbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMucHJlZGljYXRlcy5kaXNlYXNlcHJlZGljYXRlcy5wcmVzZW50YXRpb24uRGlzZWFzZXByZWRpY2F0ZXNFZGl0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuZXF1aW5veC5hcHAuSUFwcGxpY2F0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmVxdWlub3guYXBwLklBcHBsaWNhdGlvbkNvbnRleHQ7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLkdyb3VwTWFya2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JQWN0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JTWVudU1hbmFnZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLk1lbnVNYW5hZ2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5TZXBhcmF0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuZGlhbG9ncy5NZXNzYWdlRGlhbG9nOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLndpbmRvdy5XaW5kb3c7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LlNXVDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZ3JhcGhpY3MuUG9pbnQ7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuRGlzcGxheTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5GaWxlRGlhbG9nOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlNoZWxsOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklFZGl0b3JEZXNjcmlwdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklGb2xkZXJMYXlvdXQ7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuSVBhZ2VMYXlvdXQ7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuSVBlcnNwZWN0aXZlRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5JV29ya2JlbmNoOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2hBY3Rpb25Db25zdGFudHM7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaFBhZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaFdpbmRvdzsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5QYXJ0SW5pdEV4Y2VwdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5QbGF0Zm9ybVVJOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLmFjdGlvbnMuQWN0aW9uRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5hY3Rpb25zLkNvbnRyaWJ1dGlvbkl0ZW1GYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLmFwcGxpY2F0aW9uLkFjdGlvbkJhckFkdmlzb3I7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuYXBwbGljYXRpb24uSUFjdGlvbkJhckNvbmZpZ3VyZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuYXBwbGljYXRpb24uSVdvcmtiZW5jaENvbmZpZ3VyZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuYXBwbGljYXRpb24uSVdvcmtiZW5jaFdpbmRvd0NvbmZpZ3VyZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuYXBwbGljYXRpb24uV29ya2JlbmNoQWR2aXNvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5hcHBsaWNhdGlvbi5Xb3JrYmVuY2hXaW5kb3dBZHZpc29yOworCisKKy8qKgorICogQ3VzdG9taXplZCB7QGxpbmsgV29ya2JlbmNoQWR2aXNvcn0gZm9yIHRoZSBSQ1AgYXBwbGljYXRpb24uCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBmaW5hbCBjbGFzcyBEaXNlYXNlbW9kZWxzRWRpdG9yQWR2aXNvciBleHRlbmRzIFdvcmtiZW5jaEFkdmlzb3IgeworCS8qKgorCSAqIFRoZSBkZWZhdWx0IGZpbGUgZXh0ZW5zaW9uIGZpbHRlcnMgZm9yIHVzZSBpbiBkaWFsb2dzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZ1tdIEZJTEVfRVhURU5TSU9OX0ZJTFRFUlMgPSBnZXRGaWxlRXh0ZW5zaW9uRmlsdGVycygpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgZGVmYXVsdCBmaWxlIGV4dGVuc2lvbiBmaWx0ZXJzLiBUaGlzIG1ldGhvZCBzaG91bGQgb25seSBiZSB1c2VkIHRvIGluaXRpYWxpemUge0BsaW5rICNGSUxFX0VYVEVOU0lPTl9GSUxURVJTfS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJcHJpdmF0ZSBzdGF0aWMgU3RyaW5nW10gZ2V0RmlsZUV4dGVuc2lvbkZpbHRlcnMoKSB7CisJCUxpc3Q8U3RyaW5nPiByZXN1bHQgPSBuZXcgVW5pcXVlRUxpc3Q8U3RyaW5nPigpOworCQlyZXN1bHQuYWRkQWxsKFN0YW5kYXJkRWRpdG9yLkZJTEVfRVhURU5TSU9OX0ZJTFRFUlMpOworCQlyZXR1cm4gcmVzdWx0LnRvQXJyYXkobmV3IFN0cmluZ1swXSk7CisJfQorCisJLyoqCisJICogVGhpcyBsb29rcyB1cCBhIHN0cmluZyBpbiB0aGUgcGx1Z2luJ3MgcGx1Z2luLnByb3BlcnRpZXMgZmlsZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcml2YXRlIHN0YXRpYyBTdHJpbmcgZ2V0U3RyaW5nKFN0cmluZyBrZXkpIHsKKwkJcmV0dXJuIERpc2Vhc2Vtb2RlbHNFZGl0b3JQbHVnaW4uSU5TVEFOQ0UuZ2V0U3RyaW5nKGtleSk7CisJfQorCisJLyoqCisJICogVGhpcyBsb29rcyB1cCBhIHN0cmluZyBpbiBwbHVnaW4ucHJvcGVydGllcywgbWFraW5nIGEgc3Vic3RpdHV0aW9uLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByaXZhdGUgc3RhdGljIFN0cmluZyBnZXRTdHJpbmcoU3RyaW5nIGtleSwgT2JqZWN0IHMxKSB7CisJCXJldHVybiBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQucHJlc2VudGF0aW9uLkRpc2Vhc2Vtb2RlbHNFZGl0b3JQbHVnaW4uSU5TVEFOQ0UuZ2V0U3RyaW5nKGtleSwgbmV3IE9iamVjdCBbXSB7IHMxIH0pOworCX0KKworCS8qKgorCSAqIFJDUCdzIGFwcGxpY2F0aW9uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHN0YXRpYyBjbGFzcyBBcHBsaWNhdGlvbiBpbXBsZW1lbnRzIElBcHBsaWNhdGlvbiB7CisJCS8qKgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLmVxdWlub3guYXBwLklBcHBsaWNhdGlvbiNzdGFydChvcmcuZWNsaXBzZS5lcXVpbm94LmFwcC5JQXBwbGljYXRpb25Db250ZXh0KQorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJcHVibGljIE9iamVjdCBzdGFydChJQXBwbGljYXRpb25Db250ZXh0IGNvbnRleHQpIHRocm93cyBFeGNlcHRpb24geworCQkJV29ya2JlbmNoQWR2aXNvciB3b3JrYmVuY2hBZHZpc29yID0gbmV3IERpc2Vhc2Vtb2RlbHNFZGl0b3JBZHZpc29yKCk7CisJCQlEaXNwbGF5IGRpc3BsYXkgPSBQbGF0Zm9ybVVJLmNyZWF0ZURpc3BsYXkoKTsKKwkJCXRyeSB7CisJCQkJaW50IHJldHVybkNvZGUgPSBQbGF0Zm9ybVVJLmNyZWF0ZUFuZFJ1bldvcmtiZW5jaChkaXNwbGF5LCB3b3JrYmVuY2hBZHZpc29yKTsKKwkJCQlpZiAocmV0dXJuQ29kZSA9PSBQbGF0Zm9ybVVJLlJFVFVSTl9SRVNUQVJUKSB7CisJCQkJCXJldHVybiBJQXBwbGljYXRpb24uRVhJVF9SRVNUQVJUOworCQkJCX0KKwkJCQllbHNlIHsKKwkJCQkJcmV0dXJuIElBcHBsaWNhdGlvbi5FWElUX09LOworCQkJCX0KKwkJCX0KKwkJCWZpbmFsbHkgeworCQkJCWRpc3BsYXkuZGlzcG9zZSgpOworCQkJfQorCQl9CisKKwkJLyoqCisJCSAqIEBzZWUgb3JnLmVjbGlwc2UuZXF1aW5veC5hcHAuSUFwcGxpY2F0aW9uI3N0b3AoKQorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJcHVibGljIHZvaWQgc3RvcCgpIHsKKwkJCS8vIERvIG5vdGhpbmcuCisJCX0KKwl9CisKKwkvKioKKwkgKiBSQ1AncyBwZXJzcGVjdGl2ZQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBzdGF0aWMgY2xhc3MgUGVyc3BlY3RpdmUgaW1wbGVtZW50cyBJUGVyc3BlY3RpdmVGYWN0b3J5IHsKKwkJLyoqCisJCSAqIFBlcnNwZWN0aXZlIElECisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBJRF9QRVJTUEVDVElWRSA9ICJvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQucHJlc2VudGF0aW9uLkRpc2Vhc2Vtb2RlbHNFZGl0b3JBZHZpc29yUGVyc3BlY3RpdmUiOyAvLyROT04tTkxTLTEkCisKKwkJLyoqCisJCSAqIEBzZWUgb3JnLmVjbGlwc2UudWkuSVBlcnNwZWN0aXZlRmFjdG9yeSNjcmVhdGVJbml0aWFsTGF5b3V0KG9yZy5lY2xpcHNlLnVpLklQYWdlTGF5b3V0KQorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJcHVibGljIHZvaWQgY3JlYXRlSW5pdGlhbExheW91dChJUGFnZUxheW91dCBsYXlvdXQpIHsKKwkJCWxheW91dC5zZXRFZGl0b3JBcmVhVmlzaWJsZSh0cnVlKTsKKwkJCWxheW91dC5hZGRQZXJzcGVjdGl2ZVNob3J0Y3V0KElEX1BFUlNQRUNUSVZFKTsKKworCQkJSUZvbGRlckxheW91dCByaWdodCA9IGxheW91dC5jcmVhdGVGb2xkZXIoInJpZ2h0IiwgSVBhZ2VMYXlvdXQuUklHSFQsIChmbG9hdCkwLjY2LCBsYXlvdXQuZ2V0RWRpdG9yQXJlYSgpKTsgLy8kTk9OLU5MUy0xJAorCQkJcmlnaHQuYWRkVmlldyhJUGFnZUxheW91dC5JRF9PVVRMSU5FKTsKKworCQkJSUZvbGRlckxheW91dCBib3R0b25SaWdodCA9IGxheW91dC5jcmVhdGVGb2xkZXIoImJvdHRvblJpZ2h0IiwgSVBhZ2VMYXlvdXQuQk9UVE9NLCAoZmxvYXQpMC42MCwgInJpZ2h0Iik7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAorCQkJYm90dG9uUmlnaHQuYWRkVmlldyhJUGFnZUxheW91dC5JRF9QUk9QX1NIRUVUKTsKKwkJfQorCX0KKwkKKwkvKioKKwkgKiBSQ1AncyB3aW5kb3cgYWR2aXNvcgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBzdGF0aWMgY2xhc3MgV2luZG93QWR2aXNvciBleHRlbmRzIFdvcmtiZW5jaFdpbmRvd0Fkdmlzb3IgeworCQkvKioKKwkJICogQHNlZSBXb3JrYmVuY2hXaW5kb3dBZHZpc29yI1dvcmtiZW5jaFdpbmRvd0Fkdmlzb3Iob3JnLmVjbGlwc2UudWkuYXBwbGljYXRpb24uSVdvcmtiZW5jaFdpbmRvd0NvbmZpZ3VyZXIpCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlwdWJsaWMgV2luZG93QWR2aXNvcihJV29ya2JlbmNoV2luZG93Q29uZmlndXJlciBjb25maWd1cmVyKSB7CisJCQlzdXBlcihjb25maWd1cmVyKTsKKwkJfQorCQkKKwkJLyoqCisJCSAqIEBzZWUgb3JnLmVjbGlwc2UudWkuYXBwbGljYXRpb24uV29ya2JlbmNoV2luZG93QWR2aXNvciNwcmVXaW5kb3dPcGVuKCkKKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUBPdmVycmlkZQorCQlwdWJsaWMgdm9pZCBwcmVXaW5kb3dPcGVuKCkgeworCQkJSVdvcmtiZW5jaFdpbmRvd0NvbmZpZ3VyZXIgY29uZmlndXJlciA9IGdldFdpbmRvd0NvbmZpZ3VyZXIoKTsKKwkJCWNvbmZpZ3VyZXIuc2V0SW5pdGlhbFNpemUobmV3IFBvaW50KDYwMCwgNDUwKSk7CisJCQljb25maWd1cmVyLnNldFNob3dDb29sQmFyKGZhbHNlKTsKKwkJCWNvbmZpZ3VyZXIuc2V0U2hvd1N0YXR1c0xpbmUodHJ1ZSk7CisJCQljb25maWd1cmVyLnNldFRpdGxlKGdldFN0cmluZygiX1VJX0FwcGxpY2F0aW9uX3RpdGxlIikpOyAvLyROT04tTkxTLTEkCisJCX0KKwkJCisJCS8qKgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnVpLmFwcGxpY2F0aW9uLldvcmtiZW5jaFdpbmRvd0Fkdmlzb3IjY3JlYXRlQWN0aW9uQmFyQWR2aXNvcihvcmcuZWNsaXBzZS51aS5hcHBsaWNhdGlvbi5JQWN0aW9uQmFyQ29uZmlndXJlcikKKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUBPdmVycmlkZQorCQlwdWJsaWMgQWN0aW9uQmFyQWR2aXNvciBjcmVhdGVBY3Rpb25CYXJBZHZpc29yKElBY3Rpb25CYXJDb25maWd1cmVyIGNvbmZpZ3VyZXIpIHsKKwkJCXJldHVybiBuZXcgV2luZG93QWN0aW9uQmFyQWR2aXNvcihjb25maWd1cmVyKTsKKwkJfQorCX0KKworCS8qKgorCSAqIFJDUCdzIGFjdGlvbiBiYXIgYWR2aXNvcgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBzdGF0aWMgY2xhc3MgV2luZG93QWN0aW9uQmFyQWR2aXNvciBleHRlbmRzIEFjdGlvbkJhckFkdmlzb3IgeworCQkvKioKKwkJICogQHNlZSBBY3Rpb25CYXJBZHZpc29yI0FjdGlvbkJhckFkdmlzb3Iob3JnLmVjbGlwc2UudWkuYXBwbGljYXRpb24uSUFjdGlvbkJhckNvbmZpZ3VyZXIpCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlwdWJsaWMgV2luZG93QWN0aW9uQmFyQWR2aXNvcihJQWN0aW9uQmFyQ29uZmlndXJlciBjb25maWd1cmVyKSB7CisJCQlzdXBlcihjb25maWd1cmVyKTsKKwkJfQorCQkKKwkJLyoqCisJCSAqIEBzZWUgb3JnLmVjbGlwc2UudWkuYXBwbGljYXRpb24uQWN0aW9uQmFyQWR2aXNvciNmaWxsTWVudUJhcihvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSU1lbnVNYW5hZ2VyKQorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJQE92ZXJyaWRlCisJCXByb3RlY3RlZCB2b2lkIGZpbGxNZW51QmFyKElNZW51TWFuYWdlciBtZW51QmFyKSB7CisJCQlJV29ya2JlbmNoV2luZG93IHdpbmRvdyA9IGdldEFjdGlvbkJhckNvbmZpZ3VyZXIoKS5nZXRXaW5kb3dDb25maWd1cmVyKCkuZ2V0V2luZG93KCk7CisJCQltZW51QmFyLmFkZChjcmVhdGVGaWxlTWVudSh3aW5kb3cpKTsKKwkJCW1lbnVCYXIuYWRkKGNyZWF0ZUVkaXRNZW51KHdpbmRvdykpOworCQkJbWVudUJhci5hZGQobmV3IEdyb3VwTWFya2VyKElXb3JrYmVuY2hBY3Rpb25Db25zdGFudHMuTUJfQURESVRJT05TKSk7CisJCQltZW51QmFyLmFkZChjcmVhdGVXaW5kb3dNZW51KHdpbmRvdykpOworCQkJbWVudUJhci5hZGQoY3JlYXRlSGVscE1lbnUod2luZG93KSk7CQkJCQkKKwkJfQorCQkKKwkJLyoqCisJCSAqIENyZWF0ZXMgdGhlICdGaWxlJyBtZW51LgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJcHJvdGVjdGVkIElNZW51TWFuYWdlciBjcmVhdGVGaWxlTWVudShJV29ya2JlbmNoV2luZG93IHdpbmRvdykgeworCQkJSU1lbnVNYW5hZ2VyIG1lbnUgPSBuZXcgTWVudU1hbmFnZXIoZ2V0U3RyaW5nKCJfVUlfTWVudV9GaWxlX2xhYmVsIiksIC8vJE5PTi1OTFMtMSQKKwkJCUlXb3JrYmVuY2hBY3Rpb25Db25zdGFudHMuTV9GSUxFKTsgICAgCisJCQltZW51LmFkZChuZXcgR3JvdXBNYXJrZXIoSVdvcmtiZW5jaEFjdGlvbkNvbnN0YW50cy5GSUxFX1NUQVJUKSk7CisJCisJCQlJTWVudU1hbmFnZXIgbmV3TWVudSA9IG5ldyBNZW51TWFuYWdlcihnZXRTdHJpbmcoIl9VSV9NZW51X05ld19sYWJlbCIpLCAibmV3Iik7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAorCQkJbmV3TWVudS5hZGQobmV3IEdyb3VwTWFya2VyKElXb3JrYmVuY2hBY3Rpb25Db25zdGFudHMuTUJfQURESVRJT05TKSk7CisJCisJCQltZW51LmFkZChuZXdNZW51KTsKKwkJCW1lbnUuYWRkKG5ldyBTZXBhcmF0b3IoKSk7CisJCQltZW51LmFkZChuZXcgR3JvdXBNYXJrZXIoSVdvcmtiZW5jaEFjdGlvbkNvbnN0YW50cy5NQl9BRERJVElPTlMpKTsKKwkJCW1lbnUuYWRkKG5ldyBTZXBhcmF0b3IoKSk7CisJCQlhZGRUb01lbnVBbmRSZWdpc3RlcihtZW51LCBBY3Rpb25GYWN0b3J5LkNMT1NFLmNyZWF0ZSh3aW5kb3cpKTsKKwkJCWFkZFRvTWVudUFuZFJlZ2lzdGVyKG1lbnUsIEFjdGlvbkZhY3RvcnkuQ0xPU0VfQUxMLmNyZWF0ZSh3aW5kb3cpKTsKKwkJCW1lbnUuYWRkKG5ldyBTZXBhcmF0b3IoKSk7CisJCQlhZGRUb01lbnVBbmRSZWdpc3RlcihtZW51LCBBY3Rpb25GYWN0b3J5LlNBVkUuY3JlYXRlKHdpbmRvdykpOworCQkJYWRkVG9NZW51QW5kUmVnaXN0ZXIobWVudSwgQWN0aW9uRmFjdG9yeS5TQVZFX0FTLmNyZWF0ZSh3aW5kb3cpKTsKKwkJCWFkZFRvTWVudUFuZFJlZ2lzdGVyKG1lbnUsIEFjdGlvbkZhY3RvcnkuU0FWRV9BTEwuY3JlYXRlKHdpbmRvdykpOworCQkJbWVudS5hZGQobmV3IFNlcGFyYXRvcigpKTsKKwkJCWFkZFRvTWVudUFuZFJlZ2lzdGVyKG1lbnUsIEFjdGlvbkZhY3RvcnkuUVVJVC5jcmVhdGUod2luZG93KSk7CisJCQltZW51LmFkZChuZXcgR3JvdXBNYXJrZXIoSVdvcmtiZW5jaEFjdGlvbkNvbnN0YW50cy5GSUxFX0VORCkpOworCQkJcmV0dXJuIG1lbnU7CisJCX0KKworCQkvKioKKwkJICogQ3JlYXRlcyB0aGUgJ0VkaXQnIG1lbnUuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlwcm90ZWN0ZWQgSU1lbnVNYW5hZ2VyIGNyZWF0ZUVkaXRNZW51KElXb3JrYmVuY2hXaW5kb3cgd2luZG93KSB7CisJCQlJTWVudU1hbmFnZXIgbWVudSA9IG5ldyBNZW51TWFuYWdlcihnZXRTdHJpbmcoIl9VSV9NZW51X0VkaXRfbGFiZWwiKSwgLy8kTk9OLU5MUy0xJAorCQkJSVdvcmtiZW5jaEFjdGlvbkNvbnN0YW50cy5NX0VESVQpOworCQkJbWVudS5hZGQobmV3IEdyb3VwTWFya2VyKElXb3JrYmVuY2hBY3Rpb25Db25zdGFudHMuRURJVF9TVEFSVCkpOworCQorCQkJYWRkVG9NZW51QW5kUmVnaXN0ZXIobWVudSwgQWN0aW9uRmFjdG9yeS5VTkRPLmNyZWF0ZSh3aW5kb3cpKTsKKwkJCWFkZFRvTWVudUFuZFJlZ2lzdGVyKG1lbnUsIEFjdGlvbkZhY3RvcnkuUkVETy5jcmVhdGUod2luZG93KSk7CisJCQltZW51LmFkZChuZXcgR3JvdXBNYXJrZXIoSVdvcmtiZW5jaEFjdGlvbkNvbnN0YW50cy5VTkRPX0VYVCkpOworCQkJbWVudS5hZGQobmV3IFNlcGFyYXRvcigpKTsKKwkKKwkJCWFkZFRvTWVudUFuZFJlZ2lzdGVyKG1lbnUsIEFjdGlvbkZhY3RvcnkuQ1VULmNyZWF0ZSh3aW5kb3cpKTsKKwkJCWFkZFRvTWVudUFuZFJlZ2lzdGVyKG1lbnUsIEFjdGlvbkZhY3RvcnkuQ09QWS5jcmVhdGUod2luZG93KSk7CisJCQlhZGRUb01lbnVBbmRSZWdpc3RlcihtZW51LCBBY3Rpb25GYWN0b3J5LlBBU1RFLmNyZWF0ZSh3aW5kb3cpKTsKKwkJCW1lbnUuYWRkKG5ldyBHcm91cE1hcmtlcihJV29ya2JlbmNoQWN0aW9uQ29uc3RhbnRzLkNVVF9FWFQpKTsKKwkJCW1lbnUuYWRkKG5ldyBTZXBhcmF0b3IoKSk7CisJCisJCQlhZGRUb01lbnVBbmRSZWdpc3RlcihtZW51LCBBY3Rpb25GYWN0b3J5LkRFTEVURS5jcmVhdGUod2luZG93KSk7CisJCQlhZGRUb01lbnVBbmRSZWdpc3RlcihtZW51LCBBY3Rpb25GYWN0b3J5LlNFTEVDVF9BTEwuY3JlYXRlKHdpbmRvdykpOworCQkJbWVudS5hZGQobmV3IFNlcGFyYXRvcigpKTsKKwkKKwkJCW1lbnUuYWRkKG5ldyBHcm91cE1hcmtlcihJV29ya2JlbmNoQWN0aW9uQ29uc3RhbnRzLkFERF9FWFQpKTsKKwkKKwkJCW1lbnUuYWRkKG5ldyBHcm91cE1hcmtlcihJV29ya2JlbmNoQWN0aW9uQ29uc3RhbnRzLkVESVRfRU5EKSk7CisJCQltZW51LmFkZChuZXcgU2VwYXJhdG9yKElXb3JrYmVuY2hBY3Rpb25Db25zdGFudHMuTUJfQURESVRJT05TKSk7CisJCQlyZXR1cm4gbWVudTsKKwkJfQorCQorCQkvKioKKwkJICogQ3JlYXRlcyB0aGUgJ1dpbmRvdycgbWVudS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCXByb3RlY3RlZCBJTWVudU1hbmFnZXIgY3JlYXRlV2luZG93TWVudShJV29ya2JlbmNoV2luZG93IHdpbmRvdykgeworCQkJSU1lbnVNYW5hZ2VyIG1lbnUgPSBuZXcgTWVudU1hbmFnZXIoZ2V0U3RyaW5nKCJfVUlfTWVudV9XaW5kb3dfbGFiZWwiKSwgLy8kTk9OLU5MUy0xJAorCQkJSVdvcmtiZW5jaEFjdGlvbkNvbnN0YW50cy5NX1dJTkRPVyk7CisJCisJCQlhZGRUb01lbnVBbmRSZWdpc3RlcihtZW51LCBBY3Rpb25GYWN0b3J5Lk9QRU5fTkVXX1dJTkRPVy5jcmVhdGUod2luZG93KSk7CisJCQltZW51LmFkZChuZXcgR3JvdXBNYXJrZXIoSVdvcmtiZW5jaEFjdGlvbkNvbnN0YW50cy5NQl9BRERJVElPTlMpKTsKKwkJCW1lbnUuYWRkKENvbnRyaWJ1dGlvbkl0ZW1GYWN0b3J5Lk9QRU5fV0lORE9XUy5jcmVhdGUod2luZG93KSk7CisJCisJCQlyZXR1cm4gbWVudTsKKwkJfQorCQorCQkvKioKKwkJICogQ3JlYXRlcyB0aGUgJ0hlbHAnIG1lbnUuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlwcm90ZWN0ZWQgSU1lbnVNYW5hZ2VyIGNyZWF0ZUhlbHBNZW51KElXb3JrYmVuY2hXaW5kb3cgd2luZG93KSB7CisJCQlJTWVudU1hbmFnZXIgbWVudSA9IG5ldyBNZW51TWFuYWdlcihnZXRTdHJpbmcoIl9VSV9NZW51X0hlbHBfbGFiZWwiKSwgSVdvcmtiZW5jaEFjdGlvbkNvbnN0YW50cy5NX0hFTFApOyAvLyROT04tTkxTLTEkCisJCQkvLyBXZWxjb21lIG9yIGludHJvIHBhZ2Ugd291bGQgZ28gaGVyZQorCQkJLy8gSGVscCBjb250ZW50cyB3b3VsZCBnbyBoZXJlCisJCQkvLyBUaXBzIGFuZCB0cmlja3MgcGFnZSB3b3VsZCBnbyBoZXJlCisJCQltZW51LmFkZChuZXcgR3JvdXBNYXJrZXIoSVdvcmtiZW5jaEFjdGlvbkNvbnN0YW50cy5IRUxQX1NUQVJUKSk7CisJCQltZW51LmFkZChuZXcgR3JvdXBNYXJrZXIoSVdvcmtiZW5jaEFjdGlvbkNvbnN0YW50cy5IRUxQX0VORCkpOworCQkJbWVudS5hZGQobmV3IEdyb3VwTWFya2VyKElXb3JrYmVuY2hBY3Rpb25Db25zdGFudHMuTUJfQURESVRJT05TKSk7CisJCQlyZXR1cm4gbWVudTsKKwkJfQorCQkKKwkJLyoqCisJCSAqIEFkZHMgdGhlIHNwZWNpZmllZCBhY3Rpb24gdG8gdGhlIGdpdmVuIG1lbnUgYW5kIGFsc28gcmVnaXN0ZXJzIHRoZSBhY3Rpb24gd2l0aCB0aGUKKwkJICogYWN0aW9uIGJhciBjb25maWd1cmVyLCBpbiBvcmRlciB0byBhY3RpdmF0ZSBpdHMga2V5IGJpbmRpbmcuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlwcm90ZWN0ZWQgdm9pZCBhZGRUb01lbnVBbmRSZWdpc3RlcihJTWVudU1hbmFnZXIgbWVudU1hbmFnZXIsIElBY3Rpb24gYWN0aW9uKSB7CisJCQltZW51TWFuYWdlci5hZGQoYWN0aW9uKTsKKwkJCWdldEFjdGlvbkJhckNvbmZpZ3VyZXIoKS5yZWdpc3Rlckdsb2JhbEFjdGlvbihhY3Rpb24pOworCQl9CQkKKwl9CisKKwkvKioKKwkgKiBBYm91dCBhY3Rpb24gZm9yIHRoZSBSQ1AgYXBwbGljYXRpb24uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHN0YXRpYyBjbGFzcyBBYm91dEFjdGlvbiBleHRlbmRzIFdvcmtiZW5jaFdpbmRvd0FjdGlvbkRlbGVnYXRlIHsKKwkJLyoqCisJCSAqIEBzZWUgb3JnLmVjbGlwc2UudWkuSUFjdGlvbkRlbGVnYXRlI3J1bihvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSUFjdGlvbikKKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCXB1YmxpYyB2b2lkIHJ1bihJQWN0aW9uIGFjdGlvbikgeworCQkJTWVzc2FnZURpYWxvZy5vcGVuSW5mb3JtYXRpb24oZ2V0V2luZG93KCkuZ2V0U2hlbGwoKSwgZ2V0U3RyaW5nKCJfVUlfQWJvdXRfdGl0bGUiKSwgLy8kTk9OLU5MUy0xJAorCQkJZ2V0U3RyaW5nKCJfVUlfQWJvdXRfdGV4dCIpKTsgLy8kTk9OLU5MUy0xJAorCQl9CisJfQorCisJLyoqCisJICogT3BlbiBhY3Rpb24gZm9yIHRoZSBvYmplY3RzIGZyb20gdGhlIERpc2Vhc2Vtb2RlbHMgbW9kZWwuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHN0YXRpYyBjbGFzcyBPcGVuQWN0aW9uIGV4dGVuZHMgV29ya2JlbmNoV2luZG93QWN0aW9uRGVsZWdhdGUgeworCQkvKioKKwkJICogT3BlbnMgdGhlIGVkaXRvcnMgZm9yIHRoZSBmaWxlcyBzZWxlY3RlZCB1c2luZyB0aGUgZmlsZSBkaWFsb2cuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlwdWJsaWMgdm9pZCBydW4oSUFjdGlvbiBhY3Rpb24pIHsKKwkJCVN0cmluZ1tdIGZpbGVQYXRocyA9IG9wZW5GaWxlUGF0aERpYWxvZyhnZXRXaW5kb3coKS5nZXRTaGVsbCgpLCBTV1QuT1BFTiwgbnVsbCk7CisJCQlpZiAoZmlsZVBhdGhzLmxlbmd0aCA+IDApIHsKKwkJCQlvcGVuRWRpdG9yKGdldFdpbmRvdygpLmdldFdvcmtiZW5jaCgpLCBVUkkuY3JlYXRlRmlsZVVSSShmaWxlUGF0aHNbMF0pKTsKKwkJCX0KKwkJfQorCX0KKworCS8qKgorCSAqIE9wZW4gVVJJIGFjdGlvbiBmb3IgdGhlIG9iamVjdHMgZnJvbSB0aGUgRGlzZWFzZW1vZGVscyBtb2RlbC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGNsYXNzIE9wZW5VUklBY3Rpb24gZXh0ZW5kcyBXb3JrYmVuY2hXaW5kb3dBY3Rpb25EZWxlZ2F0ZSB7CisJCS8qKgorCQkgKiBPcGVucyB0aGUgZWRpdG9ycyBmb3IgdGhlIGZpbGVzIHNlbGVjdGVkIHVzaW5nIHRoZSBMb2FkUmVzb3VyY2VEaWFsb2cuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlwdWJsaWMgdm9pZCBydW4oSUFjdGlvbiBhY3Rpb24pIHsKKwkJCUxvYWRSZXNvdXJjZUFjdGlvbi5Mb2FkUmVzb3VyY2VEaWFsb2cgbG9hZFJlc291cmNlRGlhbG9nID0gbmV3IExvYWRSZXNvdXJjZUFjdGlvbi5Mb2FkUmVzb3VyY2VEaWFsb2coZ2V0V2luZG93KCkuZ2V0U2hlbGwoKSk7CisJCQlpZiAoV2luZG93Lk9LID09IGxvYWRSZXNvdXJjZURpYWxvZy5vcGVuKCkpIHsKKwkJCQlmb3IgKFVSSSB1cmkgOiBsb2FkUmVzb3VyY2VEaWFsb2cuZ2V0VVJJcygpKSB7CisJCQkJCW9wZW5FZGl0b3IoZ2V0V2luZG93KCkuZ2V0V29ya2JlbmNoKCksIHVyaSk7CisJCQkJfQorCQkJfQorCQl9CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHN0YXRpYyBTdHJpbmdbXSBvcGVuRmlsZVBhdGhEaWFsb2coU2hlbGwgc2hlbGwsIGludCBzdHlsZSwgU3RyaW5nW10gZmlsZUV4dGVuc2lvbkZpbHRlcnMpIHsKKwkJcmV0dXJuIG9wZW5GaWxlUGF0aERpYWxvZyhzaGVsbCwgc3R5bGUsIGZpbGVFeHRlbnNpb25GaWx0ZXJzLCAoc3R5bGUgJiBTV1QuT1BFTikgIT0gMCwgKHN0eWxlICYgU1dULk9QRU4pICE9IDAsIChzdHlsZSAmIFNXVC5TQVZFKSAhPSAwKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgc3RhdGljIFN0cmluZ1tdIG9wZW5GaWxlUGF0aERpYWxvZyhTaGVsbCBzaGVsbCwgaW50IHN0eWxlLCBTdHJpbmdbXSBmaWxlRXh0ZW5zaW9uRmlsdGVycywgYm9vbGVhbiBpbmNsdWRlR3JvdXBGaWx0ZXIsIGJvb2xlYW4gaW5jbHVkZUFsbEZpbHRlciwgYm9vbGVhbiBhZGRFeHRlbnNpb24pIHsKKwkJRmlsZURpYWxvZyBmaWxlRGlhbG9nID0gbmV3IEZpbGVEaWFsb2coc2hlbGwsIHN0eWxlKTsKKwkJaWYgKGZpbGVFeHRlbnNpb25GaWx0ZXJzID09IG51bGwpIHsKKwkJCWZpbGVFeHRlbnNpb25GaWx0ZXJzID0gRklMRV9FWFRFTlNJT05fRklMVEVSUzsKKwkJfQorCQkKKwkJLy8gSWYgcmVxdWVzdGVkLCBhdWdtZW50IHRoZSBmaWxlIGV4dGVuc2lvbiBmaWx0ZXJzIGJ5IGFkZGluZyBhIGdyb3VwIG9mIGFsbCB0aGUgb3RoZXIgZmlsdGVycyAoKi5leHQxOyouZXh0MjsuLi4pCisJCS8vIGF0IHRoZSBiZWdpbm5pbmcgYW5kL29yIGFuIGFsbCBmaWxlcyB3aWxkY2FyZCAoKi4qKSBhdCB0aGUgZW5kLgorCQkvLworCQlpbmNsdWRlR3JvdXBGaWx0ZXIgJj0gZmlsZUV4dGVuc2lvbkZpbHRlcnMubGVuZ3RoID4gMTsKKwkJaW50IG9mZnNldCA9IGluY2x1ZGVHcm91cEZpbHRlciA/IDEgOiAwOworCQkKKwkJaWYgKGluY2x1ZGVHcm91cEZpbHRlciB8fCBpbmNsdWRlQWxsRmlsdGVyKSB7CisJCQlpbnQgc2l6ZSA9IGZpbGVFeHRlbnNpb25GaWx0ZXJzLmxlbmd0aCArIG9mZnNldCArIChpbmNsdWRlQWxsRmlsdGVyID8gMSA6IDApOworCQkJU3RyaW5nW10gYWxsRmlsdGVycyA9IG5ldyBTdHJpbmdbc2l6ZV07CisJCQlTdHJpbmdCdWlsZGVyIGdyb3VwID0gaW5jbHVkZUdyb3VwRmlsdGVyID8gbmV3IFN0cmluZ0J1aWxkZXIoKSA6IG51bGw7CisJCQkKKwkJCWZvciAoaW50IGkgPSAwOyBpIDwgZmlsZUV4dGVuc2lvbkZpbHRlcnMubGVuZ3RoOyBpKyspIHsKKwkJCQlpZiAoaW5jbHVkZUdyb3VwRmlsdGVyKSB7CisJCQkJCWlmIChpICE9IDApIHsKKwkJCQkJCWdyb3VwLmFwcGVuZCgnOycpOworCQkJCQl9CisJCQkJCWdyb3VwLmFwcGVuZChmaWxlRXh0ZW5zaW9uRmlsdGVyc1tpXSk7CisJCQkJfQorCQkJCWFsbEZpbHRlcnNbaSArIG9mZnNldF0gPSBmaWxlRXh0ZW5zaW9uRmlsdGVyc1tpXTsKKwkJCX0KKwkJCQorCQkJaWYgKGluY2x1ZGVHcm91cEZpbHRlcikgeworCQkJCWFsbEZpbHRlcnNbMF0gPSBncm91cC50b1N0cmluZygpOworCQkJfQorCQkJaWYgKGluY2x1ZGVBbGxGaWx0ZXIpIHsKKwkJCQlhbGxGaWx0ZXJzW2FsbEZpbHRlcnMubGVuZ3RoIC0gMV0gPSAiKi4qIjsgLy8kTk9OLU5MUy0xJAorCQkJfQorCQkJCisJCQlmaWxlRGlhbG9nLnNldEZpbHRlckV4dGVuc2lvbnMoYWxsRmlsdGVycyk7CisJCX0KKwkJZWxzZSB7CisJCQlmaWxlRGlhbG9nLnNldEZpbHRlckV4dGVuc2lvbnMoZmlsZUV4dGVuc2lvbkZpbHRlcnMpOworCQl9CisJCWZpbGVEaWFsb2cub3BlbigpOworCQkKKwkJU3RyaW5nW10gZmlsZW5hbWVzID0gZmlsZURpYWxvZy5nZXRGaWxlTmFtZXMoKTsKKwkJU3RyaW5nW10gcmVzdWx0ID0gbmV3IFN0cmluZ1tmaWxlbmFtZXMubGVuZ3RoXTsKKwkJU3RyaW5nIHBhdGggPSBmaWxlRGlhbG9nLmdldEZpbHRlclBhdGgoKSArIEZpbGUuc2VwYXJhdG9yOworCQlTdHJpbmcgZXh0ZW5zaW9uID0gbnVsbDsKKwkJCisJCS8vIElmIGV4dGVuc2lvbiBhZGRpbmcgcmVxdWVzdGVkLCBnZXQgdGhlIGRvdHRlZCBleHRlbnNpb24gY29ycmVzcG9uZGluZyB0byB0aGUgc2VsZWN0ZWQgZmlsdGVyLgorCQkvLworCQlpZiAoYWRkRXh0ZW5zaW9uKSB7CisJCQlpbnQgaSA9IGZpbGVEaWFsb2cuZ2V0RmlsdGVySW5kZXgoKTsKKwkJCWlmIChpICE9IC0xICYmICghaW5jbHVkZUFsbEZpbHRlciB8fCBpICE9IGZpbGVFeHRlbnNpb25GaWx0ZXJzLmxlbmd0aCkpIHsKKwkJCQlpID0gaW5jbHVkZUdyb3VwRmlsdGVyICYmIGkgPT0gMCA/IDAgOiBpIC0gb2Zmc2V0OworCQkJCVN0cmluZyBmaWx0ZXIgPSBmaWxlRXh0ZW5zaW9uRmlsdGVyc1tpXTsKKwkJCQlpbnQgZG90ID0gZmlsdGVyLmxhc3RJbmRleE9mKCcuJyk7CisJCQkJaWYgKGRvdCA9PSAxICYmIGZpbHRlci5jaGFyQXQoMCkgPT0gJyonKSB7CisJCQkJCWV4dGVuc2lvbiA9IGZpbHRlci5zdWJzdHJpbmcoZG90KTsKKwkJCQl9CisJCQl9CisJCX0KKwkJCisJCS8vIEJ1aWxkIHRoZSByZXN1bHQgYnkgYWRkaW5nIHRoZSBzZWxlY3RlZCBwYXRoIGFuZCwgaWYgbmVlZGVkLCBhdXRvLWFwcGVuZGluZyB0aGUgZXh0ZW5zaW9uLgorCQkvLworCQlmb3IgKGludCBpID0gMDsgaSA8IGZpbGVuYW1lcy5sZW5ndGg7IGkrKykgeworCQkJU3RyaW5nIGZpbGVuYW1lID0gcGF0aCArIGZpbGVuYW1lc1tpXTsKKwkJCWlmIChleHRlbnNpb24gIT0gbnVsbCkgeworCQkJCWludCBkb3QgPSBmaWxlbmFtZS5sYXN0SW5kZXhPZignLicpOworCQkJCWlmIChkb3QgPT0gLTEgfHwgIUFycmF5cy5hc0xpc3QoZmlsZUV4dGVuc2lvbkZpbHRlcnMpLmNvbnRhaW5zKCIqIiArIGZpbGVuYW1lLnN1YnN0cmluZyhkb3QpKSkgLy8kTk9OLU5MUy0xJAorCQkJCXsKKwkJCQkJZmlsZW5hbWUgKz0gZXh0ZW5zaW9uOworCQkJCX0KKwkJCX0KKwkJCXJlc3VsdFtpXSA9IGZpbGVuYW1lOworCQl9CisJCXJldHVybiByZXN1bHQ7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHN0YXRpYyBib29sZWFuIG9wZW5FZGl0b3IoSVdvcmtiZW5jaCB3b3JrYmVuY2gsIFVSSSB1cmkpIHsKKwkJSVdvcmtiZW5jaFdpbmRvdyB3b3JrYmVuY2hXaW5kb3cgPSB3b3JrYmVuY2guZ2V0QWN0aXZlV29ya2JlbmNoV2luZG93KCk7CisJCUlXb3JrYmVuY2hQYWdlIHBhZ2UgPSB3b3JrYmVuY2hXaW5kb3cuZ2V0QWN0aXZlUGFnZSgpOworCQkKKwkJSUVkaXRvckRlc2NyaXB0b3IgZWRpdG9yRGVzY3JpcHRvciA9IEVkaXRVSVV0aWwuZ2V0RGVmYXVsdEVkaXRvcih1cmksIG51bGwpOworCQlpZiAoZWRpdG9yRGVzY3JpcHRvciA9PSBudWxsKSB7CisJCQlNZXNzYWdlRGlhbG9nLm9wZW5FcnJvcigKKwkJCQl3b3JrYmVuY2hXaW5kb3cuZ2V0U2hlbGwoKSwKKwkJCQlnZXRTdHJpbmcoIl9VSV9FcnJvcl90aXRsZSIpLCAvLyROT04tTkxTLTEkCisJCQkJZ2V0U3RyaW5nKCJfV0FSTl9Ob19FZGl0b3IiLCB1cmkubGFzdFNlZ21lbnQoKSkpOyAvLyROT04tTkxTLTEkCisJCQlyZXR1cm4gZmFsc2U7CisJCX0KKwkJZWxzZSB7CisJCQl0cnkgeworCQkJCXBhZ2Uub3BlbkVkaXRvcihuZXcgVVJJRWRpdG9ySW5wdXQodXJpKSwgZWRpdG9yRGVzY3JpcHRvci5nZXRJZCgpKTsKKwkJCX0KKwkJCWNhdGNoIChQYXJ0SW5pdEV4Y2VwdGlvbiBleGNlcHRpb24pIHsKKwkJCQlNZXNzYWdlRGlhbG9nLm9wZW5FcnJvcigKKwkJCQkJd29ya2JlbmNoV2luZG93LmdldFNoZWxsKCksCisJCQkJCWdldFN0cmluZygiX1VJX09wZW5FZGl0b3JFcnJvcl9sYWJlbCIpLCAvLyROT04tTkxTLTEkCisJCQkJCWV4Y2VwdGlvbi5nZXRNZXNzYWdlKCkpOworCQkJCXJldHVybiBmYWxzZTsKKwkJCX0KKwkJfQorCQlyZXR1cm4gdHJ1ZTsKKwl9CisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnVpLmFwcGxpY2F0aW9uLldvcmtiZW5jaEFkdmlzb3IjZ2V0SW5pdGlhbFdpbmRvd1BlcnNwZWN0aXZlSWQoKQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBTdHJpbmcgZ2V0SW5pdGlhbFdpbmRvd1BlcnNwZWN0aXZlSWQoKSB7CisJCXJldHVybiBQZXJzcGVjdGl2ZS5JRF9QRVJTUEVDVElWRTsKKwl9CisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnVpLmFwcGxpY2F0aW9uLldvcmtiZW5jaEFkdmlzb3IjaW5pdGlhbGl6ZShvcmcuZWNsaXBzZS51aS5hcHBsaWNhdGlvbi5JV29ya2JlbmNoQ29uZmlndXJlcikKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBpbml0aWFsaXplKElXb3JrYmVuY2hDb25maWd1cmVyIGNvbmZpZ3VyZXIpIHsKKwkJc3VwZXIuaW5pdGlhbGl6ZShjb25maWd1cmVyKTsKKwkJY29uZmlndXJlci5zZXRTYXZlQW5kUmVzdG9yZSh0cnVlKTsKKwl9CisJCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS51aS5hcHBsaWNhdGlvbi5Xb3JrYmVuY2hBZHZpc29yI2NyZWF0ZVdvcmtiZW5jaFdpbmRvd0Fkdmlzb3Iob3JnLmVjbGlwc2UudWkuYXBwbGljYXRpb24uSVdvcmtiZW5jaFdpbmRvd0NvbmZpZ3VyZXIpCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIFdvcmtiZW5jaFdpbmRvd0Fkdmlzb3IgY3JlYXRlV29ya2JlbmNoV2luZG93QWR2aXNvcihJV29ya2JlbmNoV2luZG93Q29uZmlndXJlciBjb25maWd1cmVyKSB7CisJCXJldHVybiBuZXcgV2luZG93QWR2aXNvcihjb25maWd1cmVyKTsKKwl9CQorfQpkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9zdGFuZGFyZC9wcmVzZW50YXRpb24vRGlzZWFzZW1vZGVsc0VkaXRvclBsdWdpbi5qYXZhIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9zdGFuZGFyZC9wcmVzZW50YXRpb24vRGlzZWFzZW1vZGVsc0VkaXRvclBsdWdpbi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI5NjRkZWYKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3N0YW5kYXJkL3ByZXNlbnRhdGlvbi9EaXNlYXNlbW9kZWxzRWRpdG9yUGx1Z2luLmphdmEKQEAgLTAsMCArMSwxNTAgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLnByZXNlbnRhdGlvbjsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLkVNRlBsdWdpbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnVpLkVjbGlwc2VVSVBsdWdpbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuUmVzb3VyY2VMb2NhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5wcm92aWRlci5FY29yZUVkaXRQbHVnaW47CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UucmVzb3VyY2UuSW1hZ2VSZWdpc3RyeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLnByb3ZpZGVyLkNvcmVFZGl0UGx1Z2luOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuZWRnZXMucHJvdmlkZXIuRGVmaW5pdGlvbnNFZGl0UGx1Z2luOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5wcm92aWRlci5TdGFuZGFyZEVkaXRQbHVnaW47CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzLklTaGFyZWRJbWFnZXM7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS51aS53aXphcmRzLlN0YW5kYXJkRGlzZWFzZU1vZGVsUHJvcGVydHlFZGl0b3JBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnVpLndpemFyZHMuU3RhbmRhcmRQcm9wZXJ0eVN0cmluZ1Byb3ZpZGVyQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLm9zZ2kuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHQ7CisKKy8qKgorICogVGhpcyBpcyB0aGUgY2VudHJhbCBzaW5nbGV0b24gZm9yIHRoZSBEaXNlYXNlbW9kZWxzIGVkaXRvciBwbHVnaW4uCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBmaW5hbCBjbGFzcyBEaXNlYXNlbW9kZWxzRWRpdG9yUGx1Z2luIGV4dGVuZHMgRU1GUGx1Z2luIHsKKwkvKioKKwkgKiBLZWVwIHRyYWNrIG9mIHRoZSBzaW5nbGV0b24uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBEaXNlYXNlbW9kZWxzRWRpdG9yUGx1Z2luIElOU1RBTkNFID0gbmV3IERpc2Vhc2Vtb2RlbHNFZGl0b3JQbHVnaW4oKTsKKworCS8qKgorCSAqIEtlZXAgdHJhY2sgb2YgdGhlIHNpbmdsZXRvbi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcml2YXRlIHN0YXRpYyBJbXBsZW1lbnRhdGlvbiBwbHVnaW47CisKKwkvKioKKwkgKiBDcmVhdGUgdGhlIGluc3RhbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlwdWJsaWMgRGlzZWFzZW1vZGVsc0VkaXRvclBsdWdpbigpIHsKKwkJc3VwZXIKKwkJCShuZXcgUmVzb3VyY2VMb2NhdG9yIFtdIHsKKwkJCQlDb3JlRWRpdFBsdWdpbi5JTlNUQU5DRSwKKwkJCQkvKkVjb3JlRWRpdFBsdWdpbi5JTlNUQU5DRSwqLworCQkJCURlZmluaXRpb25zRWRpdFBsdWdpbi5JTlNUQU5DRSwKKwkJCX0pOworCX0KKworCQorCS8qKgorCSAqIFJldHVybnMgdGhlIHNpbmdsZXRvbiBpbnN0YW5jZSBvZiB0aGUgRWNsaXBzZSBwbHVnaW4uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBzaW5nbGV0b24gaW5zdGFuY2UuCisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBSZXNvdXJjZUxvY2F0b3IgZ2V0UGx1Z2luUmVzb3VyY2VMb2NhdG9yKCkgeworCQlyZXR1cm4gcGx1Z2luOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIHNpbmdsZXRvbiBpbnN0YW5jZSBvZiB0aGUgRWNsaXBzZSBwbHVnaW4uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBzaW5nbGV0b24gaW5zdGFuY2UuCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBzdGF0aWMgSW1wbGVtZW50YXRpb24gZ2V0UGx1Z2luKCkgeworCQlyZXR1cm4gcGx1Z2luOworCX0KKworCS8qKgorCSAqIFRoZSBhY3R1YWwgaW1wbGVtZW50YXRpb24gb2YgdGhlIEVjbGlwc2UgPGI+UGx1Z2luPC9iPi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGNsYXNzIEltcGxlbWVudGF0aW9uIGV4dGVuZHMgRWNsaXBzZVVJUGx1Z2luIHsKKwkJCisJCS8qKgorCQkgKiBUaGUgc3ltYm9saWMgaWRlbnRpZmllciBmb3IgdGhpcyBwbHVnLWluCisJCSAqLworCQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBQTFVHSU5fSUQgPSAib3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzIjsgLy8kTk9OLU5MUy0xJAorCQkKKwkJLyoqCisJCSAqIENyZWF0ZXMgYW4gaW5zdGFuY2UuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlwdWJsaWMgSW1wbGVtZW50YXRpb24oKSB7CisJCQlzdXBlcigpOworCQorCQkJLy8gUmVtZW1iZXIgdGhlIHN0YXRpYyBpbnN0YW5jZS4KKwkJCS8vCisJCQlwbHVnaW4gPSB0aGlzOworCQl9CisKKwkJLyoqCisJCSAqIEBzZWUgb3JnLmVjbGlwc2UudWkucGx1Z2luLkFic3RyYWN0VUlQbHVnaW4jc3RhcnQob3JnLm9zZ2kuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHQpCisJCSAqLworCQlAT3ZlcnJpZGUKKwkJcHVibGljIHZvaWQgc3RhcnQoQnVuZGxlQ29udGV4dCBjb250ZXh0KSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJCXN1cGVyLnN0YXJ0KGNvbnRleHQpOworCQkJbmV3IFN0YW5kYXJkUHJvcGVydHlTdHJpbmdQcm92aWRlckFkYXB0ZXJGYWN0b3J5KCk7CisJCQluZXcgU3RhbmRhcmREaXNlYXNlTW9kZWxQcm9wZXJ0eUVkaXRvckFkYXB0ZXJGYWN0b3J5KCk7CisJCX0KKworCQkvKioKKwkJICogQHNlZSBvcmcuZWNsaXBzZS51aS5wbHVnaW4uQWJzdHJhY3RVSVBsdWdpbiNpbml0aWFsaXplSW1hZ2VSZWdpc3RyeShvcmcuZWNsaXBzZS5qZmFjZS5yZXNvdXJjZS5JbWFnZVJlZ2lzdHJ5KQorCQkgKi8KKwkJQE92ZXJyaWRlCisJCXByb3RlY3RlZCB2b2lkIGluaXRpYWxpemVJbWFnZVJlZ2lzdHJ5KEltYWdlUmVnaXN0cnkgcmVnaXN0cnkpIHsKKwkJCXN1cGVyLmluaXRpYWxpemVJbWFnZVJlZ2lzdHJ5KHJlZ2lzdHJ5KTsKKwkJCQorCQkJZmluYWwgU3RyaW5nIElDT05fUEFUSF9QUkVGSVggPSAiaWNvbnMvZnVsbC9vYmoxNi8iOyAvLyROT04tTkxTLTEkCisJCQlmaW5hbCBTdHJpbmcgQ1VTVE9NX0lDT05fUEFUSF9QUkVGSVggPSAiaWNvbnMvZnVsbC9jdXN0b20xNi8iOyAvLyROT04tTkxTLTEkQworCQkJCisJCQlyZWdpc3RyeS5wdXQoSVNoYXJlZEltYWdlcy5ESVNFQVNFX0lDT04sIGltYWdlRGVzY3JpcHRvckZyb21QbHVnaW4oCisJCQkJCVBMVUdJTl9JRCwgQ1VTVE9NX0lDT05fUEFUSF9QUkVGSVggKyAiZGlzZWFzZS5naWYiKSk7IC8vJE5PTi1OTFMtMSQKKworCQkJcmVnaXN0cnkucHV0KElTaGFyZWRJbWFnZXMuSU5GRUNUT1JfSUNPTiwgaW1hZ2VEZXNjcmlwdG9yRnJvbVBsdWdpbigKKwkJCQkJUExVR0lOX0lELCBDVVNUT01fSUNPTl9QQVRIX1BSRUZJWCArICJpbmZlY3Rvci5naWYiKSk7IC8vJE5PTi1OTFMtMSQKKworCQkJcmVnaXN0cnkucHV0KElTaGFyZWRJbWFnZXMuUkVDT1JERURfQ1NWX0lDT04sIGltYWdlRGVzY3JpcHRvckZyb21QbHVnaW4oCisJCQkJCVBMVUdJTl9JRCwgQ1VTVE9NX0lDT05fUEFUSF9QUkVGSVggKyAicmVjb3JkZWRjc3YuZ2lmIikpOyAvLyROT04tTkxTLTEkCisKKwkJCQorCQl9IC8vIGluaXRpYWxpemVJbWFnZVJlZ2lzdHJ5CisKKwl9IC8vIEltcGxlbWVudGF0aW9uCisKK30gLy8gRGlzZWFzZW1vZGVsc0VkaXRvclBsdWdpbgpkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9zdGFuZGFyZC9wcmVzZW50YXRpb24vU3RhbmRhcmRBY3Rpb25CYXJDb250cmlidXRvci5qYXZhIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9zdGFuZGFyZC9wcmVzZW50YXRpb24vU3RhbmRhcmRBY3Rpb25CYXJDb250cmlidXRvci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ2NmYwMDgKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3N0YW5kYXJkL3ByZXNlbnRhdGlvbi9TdGFuZGFyZEFjdGlvbkJhckNvbnRyaWJ1dG9yLmphdmEKQEAgLTAsMCArMSw0NTMgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLnByZXNlbnRhdGlvbjsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OworaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51aS5hY3Rpb24uV29ya2JlbmNoV2luZG93QWN0aW9uRGVsZWdhdGU7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51aS52aWV3ZXIuSVZpZXdlclByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LmRvbWFpbi5FZGl0aW5nRG9tYWluOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LmRvbWFpbi5JRWRpdGluZ0RvbWFpblByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmFjdGlvbi5Db250cm9sQWN0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmFjdGlvbi5DcmVhdGVDaGlsZEFjdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5hY3Rpb24uQ3JlYXRlU2libGluZ0FjdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5hY3Rpb24uRWRpdGluZ0RvbWFpbkFjdGlvbkJhckNvbnRyaWJ1dG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmFjdGlvbi5Mb2FkUmVzb3VyY2VBY3Rpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkuYWN0aW9uLlZhbGlkYXRlQWN0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5BY3Rpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLkFjdGlvbkNvbnRyaWJ1dGlvbkl0ZW07CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklBY3Rpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklDb250cmlidXRpb25JdGVtOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JQ29udHJpYnV0aW9uTWFuYWdlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSU1lbnVMaXN0ZW5lcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSU1lbnVNYW5hZ2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JVG9vbEJhck1hbmFnZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLk1lbnVNYW5hZ2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5TZXBhcmF0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLlN1YkNvbnRyaWJ1dGlvbkl0ZW07CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb25Qcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTdHJ1Y3R1cmVkU2VsZWN0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuU2VsZWN0aW9uQ2hhbmdlZEV2ZW50OworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuU3RydWN0dXJlZFNlbGVjdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlZpZXdlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS53aXphcmQuV2l6YXJkRGlhbG9nOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklFZGl0b3JQYXJ0OworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLlBhcnRJbml0RXhjZXB0aW9uOworCisvKioKKyAqIFRoaXMgaXMgdGhlIGFjdGlvbiBiYXIgY29udHJpYnV0b3IgZm9yIHRoZSBTdGFuZGFyZCBtb2RlbCBlZGl0b3IuCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBTdGFuZGFyZEFjdGlvbkJhckNvbnRyaWJ1dG9yCisJZXh0ZW5kcyBFZGl0aW5nRG9tYWluQWN0aW9uQmFyQ29udHJpYnV0b3IKKwlpbXBsZW1lbnRzIElTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIgeworCS8qKgorCSAqIEFjdGlvbiB0byBjcmVhdGUgb2JqZWN0cyBmcm9tIHRoZSBTdGFuZGFyZCBtb2RlbC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGNsYXNzIE5ld0FjdGlvbiBleHRlbmRzIFdvcmtiZW5jaFdpbmRvd0FjdGlvbkRlbGVnYXRlIHsKKwkJLyoqCisJCSAqIEBzZWUgb3JnLmVjbGlwc2UudWkuSUFjdGlvbkRlbGVnYXRlI3J1bihvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSUFjdGlvbikKKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCXB1YmxpYyB2b2lkIHJ1bihJQWN0aW9uIGFjdGlvbikgeworCQkJU3RhbmRhcmRNb2RlbFdpemFyZCB3aXphcmQgPSBuZXcgU3RhbmRhcmRNb2RlbFdpemFyZCgpOworCQkJd2l6YXJkLmluaXQoZ2V0V2luZG93KCkuZ2V0V29ya2JlbmNoKCksIFN0cnVjdHVyZWRTZWxlY3Rpb24uRU1QVFkpOworCQkJV2l6YXJkRGlhbG9nIHdpemFyZERpYWxvZyA9IG5ldyBXaXphcmREaWFsb2coZ2V0V2luZG93KCkuZ2V0U2hlbGwoKSwgd2l6YXJkKTsKKwkJCXdpemFyZERpYWxvZy5vcGVuKCk7CisJCX0KKwl9CisKKwkvKioKKwkgKiBUaGlzIGtlZXBzIHRyYWNrIG9mIHRoZSBhY3RpdmUgZWRpdG9yLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBJRWRpdG9yUGFydCBhY3RpdmVFZGl0b3JQYXJ0OworCisJLyoqCisJICogVGhpcyBrZWVwcyB0cmFjayBvZiB0aGUgY3VycmVudCBzZWxlY3Rpb24gcHJvdmlkZXIuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIElTZWxlY3Rpb25Qcm92aWRlciBzZWxlY3Rpb25Qcm92aWRlcjsKKworCS8qKgorCSAqIFRoaXMgYWN0aW9uIG9wZW5zIHRoZSBQcm9wZXJ0aWVzIHZpZXcuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIElBY3Rpb24gc2hvd1Byb3BlcnRpZXNWaWV3QWN0aW9uID0KKwkJbmV3IEFjdGlvbihEaXNlYXNlbW9kZWxzRWRpdG9yUGx1Z2luLklOU1RBTkNFLmdldFN0cmluZygiX1VJX1Nob3dQcm9wZXJ0aWVzVmlld19tZW51X2l0ZW0iKSkgLy8kTk9OLU5MUy0xJAorCQl7CisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyB2b2lkIHJ1bigpIHsKKwkJCQl0cnkgeworCQkJCQlnZXRQYWdlKCkuc2hvd1ZpZXcoIm9yZy5lY2xpcHNlLnVpLnZpZXdzLlByb3BlcnR5U2hlZXQiKTsgLy8kTk9OLU5MUy0xJAorCQkJCX0KKwkJCQljYXRjaCAoUGFydEluaXRFeGNlcHRpb24gZXhjZXB0aW9uKSB7CisJCQkJCURpc2Vhc2Vtb2RlbHNFZGl0b3JQbHVnaW4uSU5TVEFOQ0UubG9nKGV4Y2VwdGlvbik7CisJCQkJfQorCQkJfQorCQl9OworCisJLyoqCisJICogVGhpcyBhY3Rpb24gcmVmcmVzaGVzIHRoZSB2aWV3ZXIgb2YgdGhlIGN1cnJlbnQgZWRpdG9yIGlmIHRoZSBlZGl0b3IKKwkgKiBpbXBsZW1lbnRzIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnVpLnZpZXdlci5JVmlld2VyUHJvdmlkZXJ9LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBJQWN0aW9uIHJlZnJlc2hWaWV3ZXJBY3Rpb24gPQorCQluZXcgQWN0aW9uKERpc2Vhc2Vtb2RlbHNFZGl0b3JQbHVnaW4uSU5TVEFOQ0UuZ2V0U3RyaW5nKCJfVUlfUmVmcmVzaFZpZXdlcl9tZW51X2l0ZW0iKSkgLy8kTk9OLU5MUy0xJAorCQl7CisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyBib29sZWFuIGlzRW5hYmxlZCgpIHsKKwkJCQlyZXR1cm4gYWN0aXZlRWRpdG9yUGFydCBpbnN0YW5jZW9mIElWaWV3ZXJQcm92aWRlcjsKKwkJCX0KKworCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgdm9pZCBydW4oKSB7CisJCQkJaWYgKGFjdGl2ZUVkaXRvclBhcnQgaW5zdGFuY2VvZiBJVmlld2VyUHJvdmlkZXIpIHsKKwkJCQkJVmlld2VyIHZpZXdlciA9ICgoSVZpZXdlclByb3ZpZGVyKWFjdGl2ZUVkaXRvclBhcnQpLmdldFZpZXdlcigpOworCQkJCQlpZiAodmlld2VyICE9IG51bGwpIHsKKwkJCQkJCXZpZXdlci5yZWZyZXNoKCk7CisJCQkJCX0KKwkJCQl9CisJCQl9CisJCX07CisKKwkvKioKKwkgKiBUaGlzIHdpbGwgY29udGFpbiBvbmUge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmFjdGlvbi5DcmVhdGVDaGlsZEFjdGlvbn0gY29ycmVzcG9uZGluZyB0byBlYWNoIGRlc2NyaXB0b3IKKwkgKiBnZW5lcmF0ZWQgZm9yIHRoZSBjdXJyZW50IHNlbGVjdGlvbiBieSB0aGUgaXRlbSBwcm92aWRlci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgQ29sbGVjdGlvbjxJQWN0aW9uPiBjcmVhdGVDaGlsZEFjdGlvbnM7CisKKwkvKioKKwkgKiBUaGlzIGlzIHRoZSBtZW51IG1hbmFnZXIgaW50byB3aGljaCBtZW51IGNvbnRyaWJ1dGlvbiBpdGVtcyBzaG91bGQgYmUgYWRkZWQgZm9yIENyZWF0ZUNoaWxkIGFjdGlvbnMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIElNZW51TWFuYWdlciBjcmVhdGVDaGlsZE1lbnVNYW5hZ2VyOworCisJLyoqCisJICogVGhpcyB3aWxsIGNvbnRhaW4gb25lIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5hY3Rpb24uQ3JlYXRlU2libGluZ0FjdGlvbn0gY29ycmVzcG9uZGluZyB0byBlYWNoIGRlc2NyaXB0b3IKKwkgKiBnZW5lcmF0ZWQgZm9yIHRoZSBjdXJyZW50IHNlbGVjdGlvbiBieSB0aGUgaXRlbSBwcm92aWRlci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgQ29sbGVjdGlvbjxJQWN0aW9uPiBjcmVhdGVTaWJsaW5nQWN0aW9uczsKKworCS8qKgorCSAqIFRoaXMgaXMgdGhlIG1lbnUgbWFuYWdlciBpbnRvIHdoaWNoIG1lbnUgY29udHJpYnV0aW9uIGl0ZW1zIHNob3VsZCBiZSBhZGRlZCBmb3IgQ3JlYXRlU2libGluZyBhY3Rpb25zLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBJTWVudU1hbmFnZXIgY3JlYXRlU2libGluZ01lbnVNYW5hZ2VyOworCisJLyoqCisJICogVGhpcyBjcmVhdGVzIGFuIGluc3RhbmNlIG9mIHRoZSBjb250cmlidXRvci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgU3RhbmRhcmRBY3Rpb25CYXJDb250cmlidXRvcigpIHsKKwkJc3VwZXIoQURESVRJT05TX0xBU1RfU1RZTEUpOworCQlsb2FkUmVzb3VyY2VBY3Rpb24gPSBuZXcgTG9hZFJlc291cmNlQWN0aW9uKCk7CisJCXZhbGlkYXRlQWN0aW9uID0gbmV3IFZhbGlkYXRlQWN0aW9uKCk7CisJCWNvbnRyb2xBY3Rpb24gPSBuZXcgQ29udHJvbEFjdGlvbigpOworCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyBTZXBhcmF0b3JzIGZvciBlZGl0b3IgYWRkaXRpb25zIHRvIHRoZSB0b29sIGJhci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBjb250cmlidXRlVG9Ub29sQmFyKElUb29sQmFyTWFuYWdlciB0b29sQmFyTWFuYWdlcikgeworCQl0b29sQmFyTWFuYWdlci5hZGQobmV3IFNlcGFyYXRvcigic3RhbmRhcmQtc2V0dGluZ3MiKSk7IC8vJE5PTi1OTFMtMSQKKwkJdG9vbEJhck1hbmFnZXIuYWRkKG5ldyBTZXBhcmF0b3IoInN0YW5kYXJkLWFkZGl0aW9ucyIpKTsgLy8kTk9OLU5MUy0xJAorCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyB0byB0aGUgbWVudSBiYXIgYSBtZW51IGFuZCBzb21lIHNlcGFyYXRvcnMgZm9yIGVkaXRvciBhZGRpdGlvbnMsCisJICogYXMgd2VsbCBhcyB0aGUgc3ViLW1lbnVzIGZvciBvYmplY3QgY3JlYXRpb24gaXRlbXMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgY29udHJpYnV0ZVRvTWVudShJTWVudU1hbmFnZXIgbWVudU1hbmFnZXIpIHsKKwkJc3VwZXIuY29udHJpYnV0ZVRvTWVudShtZW51TWFuYWdlcik7CisKKwkJSU1lbnVNYW5hZ2VyIHN1Ym1lbnVNYW5hZ2VyID0gbmV3IE1lbnVNYW5hZ2VyKERpc2Vhc2Vtb2RlbHNFZGl0b3JQbHVnaW4uSU5TVEFOQ0UuZ2V0U3RyaW5nKCJfVUlfU3RhbmRhcmRFZGl0b3JfbWVudSIpLCAib3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkTWVudUlEIik7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAorCQltZW51TWFuYWdlci5pbnNlcnRBZnRlcigiYWRkaXRpb25zIiwgc3VibWVudU1hbmFnZXIpOyAvLyROT04tTkxTLTEkCisJCXN1Ym1lbnVNYW5hZ2VyLmFkZChuZXcgU2VwYXJhdG9yKCJzZXR0aW5ncyIpKTsgLy8kTk9OLU5MUy0xJAorCQlzdWJtZW51TWFuYWdlci5hZGQobmV3IFNlcGFyYXRvcigiYWN0aW9ucyIpKTsgLy8kTk9OLU5MUy0xJAorCQlzdWJtZW51TWFuYWdlci5hZGQobmV3IFNlcGFyYXRvcigiYWRkaXRpb25zIikpOyAvLyROT04tTkxTLTEkCisJCXN1Ym1lbnVNYW5hZ2VyLmFkZChuZXcgU2VwYXJhdG9yKCJhZGRpdGlvbnMtZW5kIikpOyAvLyROT04tTkxTLTEkCisKKwkJLy8gUHJlcGFyZSBmb3IgQ3JlYXRlQ2hpbGQgaXRlbSBhZGRpdGlvbiBvciByZW1vdmFsLgorCQkvLworCQljcmVhdGVDaGlsZE1lbnVNYW5hZ2VyID0gbmV3IE1lbnVNYW5hZ2VyKERpc2Vhc2Vtb2RlbHNFZGl0b3JQbHVnaW4uSU5TVEFOQ0UuZ2V0U3RyaW5nKCJfVUlfQ3JlYXRlQ2hpbGRfbWVudV9pdGVtIikpOyAvLyROT04tTkxTLTEkCisJCXN1Ym1lbnVNYW5hZ2VyLmluc2VydEJlZm9yZSgiYWRkaXRpb25zIiwgY3JlYXRlQ2hpbGRNZW51TWFuYWdlcik7IC8vJE5PTi1OTFMtMSQKKworCQkvLyBQcmVwYXJlIGZvciBDcmVhdGVTaWJsaW5nIGl0ZW0gYWRkaXRpb24gb3IgcmVtb3ZhbC4KKwkJLy8KKwkJY3JlYXRlU2libGluZ01lbnVNYW5hZ2VyID0gbmV3IE1lbnVNYW5hZ2VyKERpc2Vhc2Vtb2RlbHNFZGl0b3JQbHVnaW4uSU5TVEFOQ0UuZ2V0U3RyaW5nKCJfVUlfQ3JlYXRlU2libGluZ19tZW51X2l0ZW0iKSk7IC8vJE5PTi1OTFMtMSQKKwkJc3VibWVudU1hbmFnZXIuaW5zZXJ0QmVmb3JlKCJhZGRpdGlvbnMiLCBjcmVhdGVTaWJsaW5nTWVudU1hbmFnZXIpOyAvLyROT04tTkxTLTEkCisKKwkJLy8gRm9yY2UgYW4gdXBkYXRlIGJlY2F1c2UgRWNsaXBzZSBoaWRlcyBlbXB0eSBtZW51cyBub3cuCisJCS8vCisJCXN1Ym1lbnVNYW5hZ2VyLmFkZE1lbnVMaXN0ZW5lcgorCQkJKG5ldyBJTWVudUxpc3RlbmVyKCkgeworCQkJCSBwdWJsaWMgdm9pZCBtZW51QWJvdXRUb1Nob3coSU1lbnVNYW5hZ2VyIG1lbnVNYW5hZ2VyKSB7CisJCQkJCSBtZW51TWFuYWdlci51cGRhdGVBbGwodHJ1ZSk7CisJCQkJIH0KKwkJCSB9KTsKKworCQlhZGRHbG9iYWxBY3Rpb25zKHN1Ym1lbnVNYW5hZ2VyKTsKKwl9CisKKwkvKioKKwkgKiBXaGVuIHRoZSBhY3RpdmUgZWRpdG9yIGNoYW5nZXMsIHRoaXMgcmVtZW1iZXJzIHRoZSBjaGFuZ2UgYW5kIHJlZ2lzdGVycyB3aXRoIGl0IGFzIGEgc2VsZWN0aW9uIHByb3ZpZGVyLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIHNldEFjdGl2ZUVkaXRvcihJRWRpdG9yUGFydCBwYXJ0KSB7CisJCXN1cGVyLnNldEFjdGl2ZUVkaXRvcihwYXJ0KTsKKwkJYWN0aXZlRWRpdG9yUGFydCA9IHBhcnQ7CisKKwkJLy8gU3dpdGNoIHRvIHRoZSBuZXcgc2VsZWN0aW9uIHByb3ZpZGVyLgorCQkvLworCQlpZiAoc2VsZWN0aW9uUHJvdmlkZXIgIT0gbnVsbCkgeworCQkJc2VsZWN0aW9uUHJvdmlkZXIucmVtb3ZlU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyKHRoaXMpOworCQl9CisJCWlmIChwYXJ0ID09IG51bGwpIHsKKwkJCXNlbGVjdGlvblByb3ZpZGVyID0gbnVsbDsKKwkJfQorCQllbHNlIHsKKwkJCXNlbGVjdGlvblByb3ZpZGVyID0gcGFydC5nZXRTaXRlKCkuZ2V0U2VsZWN0aW9uUHJvdmlkZXIoKTsKKwkJCXNlbGVjdGlvblByb3ZpZGVyLmFkZFNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcih0aGlzKTsKKworCQkJLy8gRmFrZSBhIHNlbGVjdGlvbiBjaGFuZ2VkIGV2ZW50IHRvIHVwZGF0ZSB0aGUgbWVudXMuCisJCQkvLworCQkJaWYgKHNlbGVjdGlvblByb3ZpZGVyLmdldFNlbGVjdGlvbigpICE9IG51bGwpIHsKKwkJCQlzZWxlY3Rpb25DaGFuZ2VkKG5ldyBTZWxlY3Rpb25DaGFuZ2VkRXZlbnQoc2VsZWN0aW9uUHJvdmlkZXIsIHNlbGVjdGlvblByb3ZpZGVyLmdldFNlbGVjdGlvbigpKSk7CisJCQl9CisJCX0KKwl9CisKKwkvKioKKwkgKiBUaGlzIGltcGxlbWVudHMge0BsaW5rIG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcn0sCisJICogaGFuZGxpbmcge0BsaW5rIG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuU2VsZWN0aW9uQ2hhbmdlZEV2ZW50fXMgYnkgcXVlcnlpbmcgZm9yIHRoZSBjaGlsZHJlbiBhbmQgc2libGluZ3MKKwkgKiB0aGF0IGNhbiBiZSBhZGRlZCB0byB0aGUgc2VsZWN0ZWQgb2JqZWN0IGFuZCB1cGRhdGluZyB0aGUgbWVudXMgYWNjb3JkaW5nbHkuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgc2VsZWN0aW9uQ2hhbmdlZChTZWxlY3Rpb25DaGFuZ2VkRXZlbnQgZXZlbnQpIHsKKwkJLy8gUmVtb3ZlIGFueSBtZW51IGl0ZW1zIGZvciBvbGQgc2VsZWN0aW9uLgorCQkvLworCQlpZiAoY3JlYXRlQ2hpbGRNZW51TWFuYWdlciAhPSBudWxsKSB7CisJCQlkZXBvcHVsYXRlTWFuYWdlcihjcmVhdGVDaGlsZE1lbnVNYW5hZ2VyLCBjcmVhdGVDaGlsZEFjdGlvbnMpOworCQl9CisJCWlmIChjcmVhdGVTaWJsaW5nTWVudU1hbmFnZXIgIT0gbnVsbCkgeworCQkJZGVwb3B1bGF0ZU1hbmFnZXIoY3JlYXRlU2libGluZ01lbnVNYW5hZ2VyLCBjcmVhdGVTaWJsaW5nQWN0aW9ucyk7CisJCX0KKworCQkvLyBRdWVyeSB0aGUgbmV3IHNlbGVjdGlvbiBmb3IgYXBwcm9wcmlhdGUgbmV3IGNoaWxkL3NpYmxpbmcgZGVzY3JpcHRvcnMKKwkJLy8KKwkJQ29sbGVjdGlvbjw/PiBuZXdDaGlsZERlc2NyaXB0b3JzID0gbnVsbDsKKwkJQ29sbGVjdGlvbjw/PiBuZXdTaWJsaW5nRGVzY3JpcHRvcnMgPSBudWxsOworCisJCUlTZWxlY3Rpb24gc2VsZWN0aW9uID0gZXZlbnQuZ2V0U2VsZWN0aW9uKCk7CisJCWlmIChzZWxlY3Rpb24gaW5zdGFuY2VvZiBJU3RydWN0dXJlZFNlbGVjdGlvbiAmJiAoKElTdHJ1Y3R1cmVkU2VsZWN0aW9uKXNlbGVjdGlvbikuc2l6ZSgpID09IDEpIHsKKwkJCU9iamVjdCBvYmplY3QgPSAoKElTdHJ1Y3R1cmVkU2VsZWN0aW9uKXNlbGVjdGlvbikuZ2V0Rmlyc3RFbGVtZW50KCk7CisKKwkJCUVkaXRpbmdEb21haW4gZG9tYWluID0gKChJRWRpdGluZ0RvbWFpblByb3ZpZGVyKWFjdGl2ZUVkaXRvclBhcnQpLmdldEVkaXRpbmdEb21haW4oKTsKKworCQkJbmV3Q2hpbGREZXNjcmlwdG9ycyA9IGRvbWFpbi5nZXROZXdDaGlsZERlc2NyaXB0b3JzKG9iamVjdCwgbnVsbCk7CisJCQluZXdTaWJsaW5nRGVzY3JpcHRvcnMgPSBkb21haW4uZ2V0TmV3Q2hpbGREZXNjcmlwdG9ycyhudWxsLCBvYmplY3QpOworCQl9CisKKwkJLy8gR2VuZXJhdGUgYWN0aW9ucyBmb3Igc2VsZWN0aW9uOyBwb3B1bGF0ZSBhbmQgcmVkcmF3IHRoZSBtZW51cy4KKwkJLy8KKwkJY3JlYXRlQ2hpbGRBY3Rpb25zID0gZ2VuZXJhdGVDcmVhdGVDaGlsZEFjdGlvbnMobmV3Q2hpbGREZXNjcmlwdG9ycywgc2VsZWN0aW9uKTsKKwkJY3JlYXRlU2libGluZ0FjdGlvbnMgPSBnZW5lcmF0ZUNyZWF0ZVNpYmxpbmdBY3Rpb25zKG5ld1NpYmxpbmdEZXNjcmlwdG9ycywgc2VsZWN0aW9uKTsKKworCQlpZiAoY3JlYXRlQ2hpbGRNZW51TWFuYWdlciAhPSBudWxsKSB7CisJCQlwb3B1bGF0ZU1hbmFnZXIoY3JlYXRlQ2hpbGRNZW51TWFuYWdlciwgY3JlYXRlQ2hpbGRBY3Rpb25zLCBudWxsKTsKKwkJCWNyZWF0ZUNoaWxkTWVudU1hbmFnZXIudXBkYXRlKHRydWUpOworCQl9CisJCWlmIChjcmVhdGVTaWJsaW5nTWVudU1hbmFnZXIgIT0gbnVsbCkgeworCQkJcG9wdWxhdGVNYW5hZ2VyKGNyZWF0ZVNpYmxpbmdNZW51TWFuYWdlciwgY3JlYXRlU2libGluZ0FjdGlvbnMsIG51bGwpOworCQkJY3JlYXRlU2libGluZ01lbnVNYW5hZ2VyLnVwZGF0ZSh0cnVlKTsKKwkJfQorCX0KKworCS8qKgorCSAqIFRoaXMgZ2VuZXJhdGVzIGEge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmFjdGlvbi5DcmVhdGVDaGlsZEFjdGlvbn0gZm9yIGVhY2ggb2JqZWN0IGluIDxjb2RlPmRlc2NyaXB0b3JzPC9jb2RlPiwKKwkgKiBhbmQgcmV0dXJucyB0aGUgY29sbGVjdGlvbiBvZiB0aGVzZSBhY3Rpb25zLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBDb2xsZWN0aW9uPElBY3Rpb24+IGdlbmVyYXRlQ3JlYXRlQ2hpbGRBY3Rpb25zKENvbGxlY3Rpb248Pz4gZGVzY3JpcHRvcnMsIElTZWxlY3Rpb24gc2VsZWN0aW9uKSB7CisJCUNvbGxlY3Rpb248SUFjdGlvbj4gYWN0aW9ucyA9IG5ldyBBcnJheUxpc3Q8SUFjdGlvbj4oKTsKKwkJaWYgKGRlc2NyaXB0b3JzICE9IG51bGwpIHsKKwkJCWZvciAoT2JqZWN0IGRlc2NyaXB0b3IgOiBkZXNjcmlwdG9ycykgeworCQkJCWFjdGlvbnMuYWRkKG5ldyBDcmVhdGVDaGlsZEFjdGlvbihhY3RpdmVFZGl0b3JQYXJ0LCBzZWxlY3Rpb24sIGRlc2NyaXB0b3IpKTsKKwkJCX0KKwkJfQorCQlyZXR1cm4gYWN0aW9uczsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGdlbmVyYXRlcyBhIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5hY3Rpb24uQ3JlYXRlU2libGluZ0FjdGlvbn0gZm9yIGVhY2ggb2JqZWN0IGluIDxjb2RlPmRlc2NyaXB0b3JzPC9jb2RlPiwKKwkgKiBhbmQgcmV0dXJucyB0aGUgY29sbGVjdGlvbiBvZiB0aGVzZSBhY3Rpb25zLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBDb2xsZWN0aW9uPElBY3Rpb24+IGdlbmVyYXRlQ3JlYXRlU2libGluZ0FjdGlvbnMoQ29sbGVjdGlvbjw/PiBkZXNjcmlwdG9ycywgSVNlbGVjdGlvbiBzZWxlY3Rpb24pIHsKKwkJQ29sbGVjdGlvbjxJQWN0aW9uPiBhY3Rpb25zID0gbmV3IEFycmF5TGlzdDxJQWN0aW9uPigpOworCQlpZiAoZGVzY3JpcHRvcnMgIT0gbnVsbCkgeworCQkJZm9yIChPYmplY3QgZGVzY3JpcHRvciA6IGRlc2NyaXB0b3JzKSB7CisJCQkJYWN0aW9ucy5hZGQobmV3IENyZWF0ZVNpYmxpbmdBY3Rpb24oYWN0aXZlRWRpdG9yUGFydCwgc2VsZWN0aW9uLCBkZXNjcmlwdG9yKSk7CisJCQl9CisJCX0KKwkJcmV0dXJuIGFjdGlvbnM7CisJfQorCisJLyoqCisJICogVGhpcyBwb3B1bGF0ZXMgdGhlIHNwZWNpZmllZCA8Y29kZT5tYW5hZ2VyPC9jb2RlPiB3aXRoIHtAbGluayBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uQWN0aW9uQ29udHJpYnV0aW9uSXRlbX1zCisJICogYmFzZWQgb24gdGhlIHtAbGluayBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSUFjdGlvbn1zIGNvbnRhaW5lZCBpbiB0aGUgPGNvZGU+YWN0aW9uczwvY29kZT4gY29sbGVjdGlvbiwKKwkgKiBieSBpbnNlcnRpbmcgdGhlbSBiZWZvcmUgdGhlIHNwZWNpZmllZCBjb250cmlidXRpb24gaXRlbSA8Y29kZT5jb250cmlidXRpb25JRDwvY29kZT4uCisJICogSWYgPGNvZGU+Y29udHJpYnV0aW9uSUQ8L2NvZGU+IGlzIDxjb2RlPm51bGw8L2NvZGU+LCB0aGV5IGFyZSBzaW1wbHkgYWRkZWQuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgcG9wdWxhdGVNYW5hZ2VyKElDb250cmlidXRpb25NYW5hZ2VyIG1hbmFnZXIsIENvbGxlY3Rpb248PyBleHRlbmRzIElBY3Rpb24+IGFjdGlvbnMsIFN0cmluZyBjb250cmlidXRpb25JRCkgeworCQlpZiAoYWN0aW9ucyAhPSBudWxsKSB7CisJCQlmb3IgKElBY3Rpb24gYWN0aW9uIDogYWN0aW9ucykgeworCQkJCWlmIChjb250cmlidXRpb25JRCAhPSBudWxsKSB7CisJCQkJCW1hbmFnZXIuaW5zZXJ0QmVmb3JlKGNvbnRyaWJ1dGlvbklELCBhY3Rpb24pOworCQkJCX0KKwkJCQllbHNlIHsKKwkJCQkJbWFuYWdlci5hZGQoYWN0aW9uKTsKKwkJCQl9CisJCQl9CisJCX0KKwl9CisJCQorCS8qKgorCSAqIFRoaXMgcmVtb3ZlcyBmcm9tIHRoZSBzcGVjaWZpZWQgPGNvZGU+bWFuYWdlcjwvY29kZT4gYWxsIHtAbGluayBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uQWN0aW9uQ29udHJpYnV0aW9uSXRlbX1zCisJICogYmFzZWQgb24gdGhlIHtAbGluayBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSUFjdGlvbn1zIGNvbnRhaW5lZCBpbiB0aGUgPGNvZGU+YWN0aW9uczwvY29kZT4gY29sbGVjdGlvbi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBkZXBvcHVsYXRlTWFuYWdlcihJQ29udHJpYnV0aW9uTWFuYWdlciBtYW5hZ2VyLCBDb2xsZWN0aW9uPD8gZXh0ZW5kcyBJQWN0aW9uPiBhY3Rpb25zKSB7CisJCWlmIChhY3Rpb25zICE9IG51bGwpIHsKKwkJCUlDb250cmlidXRpb25JdGVtW10gaXRlbXMgPSBtYW5hZ2VyLmdldEl0ZW1zKCk7CisJCQlmb3IgKGludCBpID0gMDsgaSA8IGl0ZW1zLmxlbmd0aDsgaSsrKSB7CisJCQkJLy8gTG9vayBpbnRvIFN1YkNvbnRyaWJ1dGlvbkl0ZW1zCisJCQkJLy8KKwkJCQlJQ29udHJpYnV0aW9uSXRlbSBjb250cmlidXRpb25JdGVtID0gaXRlbXNbaV07CisJCQkJd2hpbGUgKGNvbnRyaWJ1dGlvbkl0ZW0gaW5zdGFuY2VvZiBTdWJDb250cmlidXRpb25JdGVtKSB7CisJCQkJCWNvbnRyaWJ1dGlvbkl0ZW0gPSAoKFN1YkNvbnRyaWJ1dGlvbkl0ZW0pY29udHJpYnV0aW9uSXRlbSkuZ2V0SW5uZXJJdGVtKCk7CisJCQkJfQorCisJCQkJLy8gRGVsZXRlIHRoZSBBY3Rpb25Db250cmlidXRpb25JdGVtcyB3aXRoIG1hdGNoaW5nIGFjdGlvbi4KKwkJCQkvLworCQkJCWlmIChjb250cmlidXRpb25JdGVtIGluc3RhbmNlb2YgQWN0aW9uQ29udHJpYnV0aW9uSXRlbSkgeworCQkJCQlJQWN0aW9uIGFjdGlvbiA9ICgoQWN0aW9uQ29udHJpYnV0aW9uSXRlbSljb250cmlidXRpb25JdGVtKS5nZXRBY3Rpb24oKTsKKwkJCQkJaWYgKGFjdGlvbnMuY29udGFpbnMoYWN0aW9uKSkgeworCQkJCQkJbWFuYWdlci5yZW1vdmUoY29udHJpYnV0aW9uSXRlbSk7CisJCQkJCX0KKwkJCQl9CisJCQl9CisJCX0KKwl9CisKKwkvKioKKwkgKiBUaGlzIHBvcHVsYXRlcyB0aGUgcG9wLXVwIG1lbnUgYmVmb3JlIGl0IGFwcGVhcnMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgbWVudUFib3V0VG9TaG93KElNZW51TWFuYWdlciBtZW51TWFuYWdlcikgeworCQlzdXBlci5tZW51QWJvdXRUb1Nob3cobWVudU1hbmFnZXIpOworCQlNZW51TWFuYWdlciBzdWJtZW51TWFuYWdlciA9IG51bGw7CisKKwkJc3VibWVudU1hbmFnZXIgPSBuZXcgTWVudU1hbmFnZXIoRGlzZWFzZW1vZGVsc0VkaXRvclBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoIl9VSV9DcmVhdGVDaGlsZF9tZW51X2l0ZW0iKSk7IC8vJE5PTi1OTFMtMSQKKwkJcG9wdWxhdGVNYW5hZ2VyKHN1Ym1lbnVNYW5hZ2VyLCBjcmVhdGVDaGlsZEFjdGlvbnMsIG51bGwpOworCQltZW51TWFuYWdlci5pbnNlcnRCZWZvcmUoImVkaXQiLCBzdWJtZW51TWFuYWdlcik7IC8vJE5PTi1OTFMtMSQKKworCQlzdWJtZW51TWFuYWdlciA9IG5ldyBNZW51TWFuYWdlcihEaXNlYXNlbW9kZWxzRWRpdG9yUGx1Z2luLklOU1RBTkNFLmdldFN0cmluZygiX1VJX0NyZWF0ZVNpYmxpbmdfbWVudV9pdGVtIikpOyAvLyROT04tTkxTLTEkCisJCXBvcHVsYXRlTWFuYWdlcihzdWJtZW51TWFuYWdlciwgY3JlYXRlU2libGluZ0FjdGlvbnMsIG51bGwpOworCQltZW51TWFuYWdlci5pbnNlcnRCZWZvcmUoImVkaXQiLCBzdWJtZW51TWFuYWdlcik7IC8vJE5PTi1OTFMtMSQKKwl9CisKKwkvKioKKwkgKiBUaGlzIGluc2VydHMgZ2xvYmFsIGFjdGlvbnMgYmVmb3JlIHRoZSAiYWRkaXRpb25zLWVuZCIgc2VwYXJhdG9yLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIGFkZEdsb2JhbEFjdGlvbnMoSU1lbnVNYW5hZ2VyIG1lbnVNYW5hZ2VyKSB7CisJCW1lbnVNYW5hZ2VyLmluc2VydEFmdGVyKCJhZGRpdGlvbnMtZW5kIiwgbmV3IFNlcGFyYXRvcigidWktYWN0aW9ucyIpKTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCisJCW1lbnVNYW5hZ2VyLmluc2VydEFmdGVyKCJ1aS1hY3Rpb25zIiwgc2hvd1Byb3BlcnRpZXNWaWV3QWN0aW9uKTsgLy8kTk9OLU5MUy0xJAorCisJCXJlZnJlc2hWaWV3ZXJBY3Rpb24uc2V0RW5hYmxlZChyZWZyZXNoVmlld2VyQWN0aW9uLmlzRW5hYmxlZCgpKTsJCQorCQltZW51TWFuYWdlci5pbnNlcnRBZnRlcigidWktYWN0aW9ucyIsIHJlZnJlc2hWaWV3ZXJBY3Rpb24pOyAvLyROT04tTkxTLTEkCisKKwkJc3VwZXIuYWRkR2xvYmFsQWN0aW9ucyhtZW51TWFuYWdlcik7CisJfQorCisJLyoqCisJICogVGhpcyBlbnN1cmVzIHRoYXQgYSBkZWxldGUgYWN0aW9uIHdpbGwgY2xlYW4gdXAgYWxsIHJlZmVyZW5jZXMgdG8gZGVsZXRlZCBvYmplY3RzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCBib29sZWFuIHJlbW92ZUFsbFJlZmVyZW5jZXNPbkRlbGV0ZSgpIHsKKwkJcmV0dXJuIHRydWU7CisJfQorCit9CmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3N0YW5kYXJkL3ByZXNlbnRhdGlvbi9TdGFuZGFyZEVkaXRvci5qYXZhIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9zdGFuZGFyZC9wcmVzZW50YXRpb24vU3RhbmRhcmRFZGl0b3IuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lM2ZhODFhCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9zdGFuZGFyZC9wcmVzZW50YXRpb24vU3RhbmRhcmRFZGl0b3IuamF2YQpAQCAtMCwwICsxLDE5MTkgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLnByZXNlbnRhdGlvbjsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNywgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOworaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW07CitpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbnM7CitpbXBvcnQgamF2YS51dGlsLkV2ZW50T2JqZWN0OworaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOworaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKK2ltcG9ydCBqYXZhLnV0aWwuTGlua2VkSGFzaE1hcDsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuTWFwOworCitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQcm9ncmVzc01vbml0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLk51bGxQcm9ncmVzc01vbml0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5jb21tYW5kLkJhc2ljQ29tbWFuZFN0YWNrOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24uY29tbWFuZC5Db21tYW5kOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24uY29tbWFuZC5Db21tYW5kU3RhY2s7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5jb21tYW5kLkNvbW1hbmRTdGFja0xpc3RlbmVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LkFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnVpLlVSSUVkaXRvcklucHV0OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udWkuVmlld2VyUGFuZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnVpLmVkaXRvci5Qcm9ibGVtRWRpdG9yUGFydDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnVpLnZpZXdlci5JVmlld2VyUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLkJhc2ljRGlhZ25vc3RpYzsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuRGlhZ25vc3RpYzsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuVVJJOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5wcm92aWRlci5FY29yZUl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5yZXNvdXJjZS5SZXNvdXJjZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUudXRpbC5FQ29udGVudEFkYXB0ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnV0aWwuRWNvcmVVdGlsOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LmRvbWFpbi5BZGFwdGVyRmFjdG9yeUVkaXRpbmdEb21haW47CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQuZG9tYWluLkVkaXRpbmdEb21haW47CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQuZG9tYWluLklFZGl0aW5nRG9tYWluUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuQWRhcHRlckZhY3RvcnlJdGVtRGVsZWdhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkNvbXBvc2VkQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuUmVmbGVjdGl2ZUl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLnJlc291cmNlLlJlc291cmNlSXRlbVByb3ZpZGVyQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkuYWN0aW9uLkVkaXRpbmdEb21haW5BY3Rpb25CYXJDb250cmlidXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5jZWxsZWRpdG9yLkFkYXB0ZXJGYWN0b3J5VHJlZUVkaXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5kbmQuRWRpdGluZ0RvbWFpblZpZXdlckRyb3BBZGFwdGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmRuZC5Mb2NhbFRyYW5zZmVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmRuZC5WaWV3ZXJEcmFnQWRhcHRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5wcm92aWRlci5BZGFwdGVyRmFjdG9yeUNvbnRlbnRQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5wcm92aWRlci5BZGFwdGVyRmFjdG9yeUxhYmVsUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkucHJvdmlkZXIuVW53cmFwcGluZ1NlbGVjdGlvblByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLnV0aWwuRWRpdFVJVXRpbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS52aWV3LkV4dGVuZGVkUHJvcGVydHlTaGVldFBhZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklNZW51TGlzdGVuZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklNZW51TWFuYWdlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSVN0YXR1c0xpbmVNYW5hZ2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JVG9vbEJhck1hbmFnZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLk1lbnVNYW5hZ2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5TZXBhcmF0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuZGlhbG9ncy5NZXNzYWdlRGlhbG9nOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmRpYWxvZ3MuUHJvZ3Jlc3NNb25pdG9yRGlhbG9nOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLm9wZXJhdGlvbi5JUnVubmFibGVXaXRoUHJvZ3Jlc3M7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5Db2x1bW5XZWlnaHREYXRhOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU3RydWN0dXJlZFNlbGVjdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLkxpc3RWaWV3ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5TZWxlY3Rpb25DaGFuZ2VkRXZlbnQ7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5TdHJ1Y3R1cmVkU2VsZWN0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuU3RydWN0dXJlZFZpZXdlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlRhYmxlTGF5b3V0OworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuVGFibGVWaWV3ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5UcmVlVmlld2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuVmlld2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5TVEVNWE1JUmVzb3VyY2VGYWN0b3J5SW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLnByb3ZpZGVyLkNvbW1vbkl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5wcm92aWRlci5HcmFwaEl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5sb2dnZXIucHJvdmlkZXIuTG9nZ2VySXRlbVByb3ZpZGVyQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLnByb3ZpZGVyLk1vZGVsSXRlbVByb3ZpZGVyQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLnByb3ZpZGVyLk1vZGlmaWVySXRlbVByb3ZpZGVyQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZS5wcm92aWRlci5QcmVkaWNhdGVJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2NlbmFyaW8ucHJvdmlkZXIuU2NlbmFyaW9JdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2VxdWVuY2VyLnByb3ZpZGVyLlNlcXVlbmNlckl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zb2x2ZXIucHJvdmlkZXIuU29sdmVySXRlbVByb3ZpZGVyQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMucHJvdmlkZXIuTGFiZWxzSXRlbVByb3ZpZGVyQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnByZWRpY2F0ZXMuZGlzZWFzZXByZWRpY2F0ZXMucHJvdmlkZXIuRGlzZWFzZXByZWRpY2F0ZXNJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQucHJvdmlkZXIuU3RhbmRhcmRJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuU1dUOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5jdXN0b20uQ1RhYkZvbGRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZG5kLkRORDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZG5kLlRyYW5zZmVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuQ29udHJvbEFkYXB0ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5Db250cm9sRXZlbnQ7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmdyYXBoaWNzLlBvaW50OworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5sYXlvdXQuRmlsbExheW91dDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuTWVudTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5UYWJsZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5UYWJsZUNvbHVtbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5UcmVlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlRyZWVDb2x1bW47CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuSUFjdGlvbkJhcnM7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuSUVkaXRvcklucHV0OworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklFZGl0b3JQYXJ0OworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklFZGl0b3JTaXRlOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklQYXJ0TGlzdGVuZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaFBhcnQ7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuUGFydEluaXRFeGNlcHRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UudWkucGFydC5NdWx0aVBhZ2VFZGl0b3JQYXJ0OworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLnZpZXdzLmNvbnRlbnRvdXRsaW5lLkNvbnRlbnRPdXRsaW5lOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLnZpZXdzLmNvbnRlbnRvdXRsaW5lLkNvbnRlbnRPdXRsaW5lUGFnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS52aWV3cy5jb250ZW50b3V0bGluZS5JQ29udGVudE91dGxpbmVQYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLnZpZXdzLnByb3BlcnRpZXMuSVByb3BlcnR5U2hlZXRQYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLnZpZXdzLnByb3BlcnRpZXMuUHJvcGVydHlTaGVldDsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS52aWV3cy5wcm9wZXJ0aWVzLlByb3BlcnR5U2hlZXRQYWdlOworCisvL2ltcG9ydCBvcmcuZWNsaXBzZS51aS5hY3Rpb25zLldvcmtzcGFjZU1vZGlmeU9wZXJhdGlvbjsKKworCisvKioKKyAqIFRoaXMgaXMgYW4gZXhhbXBsZSBvZiBhIFN0YW5kYXJkIG1vZGVsIGVkaXRvci4KKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIFN0YW5kYXJkRWRpdG9yCisJZXh0ZW5kcyBNdWx0aVBhZ2VFZGl0b3JQYXJ0CisJaW1wbGVtZW50cyBJRWRpdGluZ0RvbWFpblByb3ZpZGVyLCBJU2VsZWN0aW9uUHJvdmlkZXIsIElNZW51TGlzdGVuZXIsIElWaWV3ZXJQcm92aWRlciB7CisJLyoqCisJICogVGhlIGZpbHRlcnMgZm9yIGZpbGUgZXh0ZW5zaW9ucyBzdXBwb3J0ZWQgYnkgdGhlIGVkaXRvci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIExpc3Q8U3RyaW5nPiBGSUxFX0VYVEVOU0lPTl9GSUxURVJTID0gcHJlZml4RXh0ZW5zaW9ucyhTdGFuZGFyZE1vZGVsV2l6YXJkLkZJTEVfRVhURU5TSU9OUywgIiouIik7CisKKwkvKioKKwkgKiBSZXR1cm5zIGEgbmV3IHVubW9kaWZpYWJsZSBsaXN0IGNvbnRhaW5pbmcgcHJlZml4ZWQgdmVyc2lvbnMgb2YgdGhlIGV4dGVuc2lvbnMgaW4gdGhlIGdpdmVuIGxpc3QuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJpdmF0ZSBzdGF0aWMgTGlzdDxTdHJpbmc+IHByZWZpeEV4dGVuc2lvbnMoTGlzdDxTdHJpbmc+IGV4dGVuc2lvbnMsIFN0cmluZyBwcmVmaXgpIHsKKwkJTGlzdDxTdHJpbmc+IHJlc3VsdCA9IG5ldyBBcnJheUxpc3Q8U3RyaW5nPigpOworCQlmb3IgKFN0cmluZyBleHRlbnNpb24gOiBleHRlbnNpb25zKSB7CisJCQlyZXN1bHQuYWRkKHByZWZpeCArIGV4dGVuc2lvbik7CisJCX0KKwkJcmV0dXJuIENvbGxlY3Rpb25zLnVubW9kaWZpYWJsZUxpc3QocmVzdWx0KTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGtlZXBzIHRyYWNrIG9mIHRoZSBlZGl0aW5nIGRvbWFpbiB0aGF0IGlzIHVzZWQgdG8gdHJhY2sgYWxsIGNoYW5nZXMgdG8gdGhlIG1vZGVsLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBBZGFwdGVyRmFjdG9yeUVkaXRpbmdEb21haW4gZWRpdGluZ0RvbWFpbjsKKworCS8qKgorCSAqIFRoaXMgaXMgdGhlIG9uZSBhZGFwdGVyIGZhY3RvcnkgdXNlZCBmb3IgcHJvdmlkaW5nIHZpZXdzIG9mIHRoZSBtb2RlbC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgQ29tcG9zZWRBZGFwdGVyRmFjdG9yeSBhZGFwdGVyRmFjdG9yeTsKKworCS8qKgorCSAqIFRoaXMgaXMgdGhlIGNvbnRlbnQgb3V0bGluZSBwYWdlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBJQ29udGVudE91dGxpbmVQYWdlIGNvbnRlbnRPdXRsaW5lUGFnZTsKKworCS8qKgorCSAqIFRoaXMgaXMgYSBrbHVkZ2UuLi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgSVN0YXR1c0xpbmVNYW5hZ2VyIGNvbnRlbnRPdXRsaW5lU3RhdHVzTGluZU1hbmFnZXI7CisKKwkvKioKKwkgKiBUaGlzIGlzIHRoZSBjb250ZW50IG91dGxpbmUgcGFnZSdzIHZpZXdlci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgVHJlZVZpZXdlciBjb250ZW50T3V0bGluZVZpZXdlcjsKKworCS8qKgorCSAqIFRoaXMgaXMgdGhlIHByb3BlcnR5IHNoZWV0IHBhZ2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIFByb3BlcnR5U2hlZXRQYWdlIHByb3BlcnR5U2hlZXRQYWdlOworCisJLyoqCisJICogVGhpcyBpcyB0aGUgdmlld2VyIHRoYXQgc2hhZG93cyB0aGUgc2VsZWN0aW9uIGluIHRoZSBjb250ZW50IG91dGxpbmUuCisJICogVGhlIHBhcmVudCByZWxhdGlvbiBtdXN0IGJlIGNvcnJlY3RseSBkZWZpbmVkIGZvciB0aGlzIHRvIHdvcmsuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIFRyZWVWaWV3ZXIgc2VsZWN0aW9uVmlld2VyOworCisJLyoqCisJICogVGhpcyBpbnZlcnRzIHRoZSByb2xsIG9mIHBhcmVudCBhbmQgY2hpbGQgaW4gdGhlIGNvbnRlbnQgcHJvdmlkZXIgYW5kIHNob3cgcGFyZW50cyBhcyBhIHRyZWUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIFRyZWVWaWV3ZXIgcGFyZW50Vmlld2VyOworCisJLyoqCisJICogVGhpcyBzaG93cyBob3cgYSB0cmVlIHZpZXcgd29ya3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIFRyZWVWaWV3ZXIgdHJlZVZpZXdlcjsKKworCS8qKgorCSAqIFRoaXMgc2hvd3MgaG93IGEgbGlzdCB2aWV3IHdvcmtzLgorCSAqIEEgbGlzdCB2aWV3ZXIgZG9lc24ndCBzdXBwb3J0IGljb25zLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBMaXN0Vmlld2VyIGxpc3RWaWV3ZXI7CisKKwkvKioKKwkgKiBUaGlzIHNob3dzIGhvdyBhIHRhYmxlIHZpZXcgd29ya3MuCisJICogQSB0YWJsZSBjYW4gYmUgdXNlZCBhcyBhIGxpc3Qgd2l0aCBpY29ucy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgVGFibGVWaWV3ZXIgdGFibGVWaWV3ZXI7CisKKwkvKioKKwkgKiBUaGlzIHNob3dzIGhvdyBhIHRyZWUgdmlldyB3aXRoIGNvbHVtbnMgd29ya3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIFRyZWVWaWV3ZXIgdHJlZVZpZXdlcldpdGhDb2x1bW5zOworCisJLyoqCisJICogVGhpcyBrZWVwcyB0cmFjayBvZiB0aGUgYWN0aXZlIHZpZXdlciBwYW5lLCBpbiB0aGUgYm9vay4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgVmlld2VyUGFuZSBjdXJyZW50Vmlld2VyUGFuZTsKKworCS8qKgorCSAqIFRoaXMga2VlcHMgdHJhY2sgb2YgdGhlIGFjdGl2ZSBjb250ZW50IHZpZXdlciwgd2hpY2ggbWF5IGJlIGVpdGhlciBvbmUgb2YgdGhlIHZpZXdlcnMgaW4gdGhlIHBhZ2VzIG9yIHRoZSBjb250ZW50IG91dGxpbmUgdmlld2VyLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBWaWV3ZXIgY3VycmVudFZpZXdlcjsKKworCS8qKgorCSAqIFRoaXMgbGlzdGVucyB0byB3aGljaCBldmVyIHZpZXdlciBpcyBhY3RpdmUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIElTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIgc2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyOworCisJLyoqCisJICogVGhpcyBrZWVwcyB0cmFjayBvZiBhbGwgdGhlIHtAbGluayBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXJ9cyB0aGF0IGFyZSBsaXN0ZW5pbmcgdG8gdGhpcyBlZGl0b3IuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIENvbGxlY3Rpb248SVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcj4gc2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVycyA9IG5ldyBBcnJheUxpc3Q8SVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcj4oKTsKKworCS8qKgorCSAqIFRoaXMga2VlcHMgdHJhY2sgb2YgdGhlIHNlbGVjdGlvbiBvZiB0aGUgZWRpdG9yIGFzIGEgd2hvbGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIElTZWxlY3Rpb24gZWRpdG9yU2VsZWN0aW9uID0gU3RydWN0dXJlZFNlbGVjdGlvbi5FTVBUWTsKKworCS8qKgorCSAqIFRoaXMgbGlzdGVucyBmb3Igd2hlbiB0aGUgb3V0bGluZSBiZWNvbWVzIGFjdGl2ZQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBJUGFydExpc3RlbmVyIHBhcnRMaXN0ZW5lciA9CisJCW5ldyBJUGFydExpc3RlbmVyKCkgeworCQkJcHVibGljIHZvaWQgcGFydEFjdGl2YXRlZChJV29ya2JlbmNoUGFydCBwKSB7CisJCQkJaWYgKHAgaW5zdGFuY2VvZiBDb250ZW50T3V0bGluZSkgeworCQkJCQlpZiAoKChDb250ZW50T3V0bGluZSlwKS5nZXRDdXJyZW50UGFnZSgpID09IGNvbnRlbnRPdXRsaW5lUGFnZSkgeworCQkJCQkJZ2V0QWN0aW9uQmFyQ29udHJpYnV0b3IoKS5zZXRBY3RpdmVFZGl0b3IoU3RhbmRhcmRFZGl0b3IudGhpcyk7CisKKwkJCQkJCXNldEN1cnJlbnRWaWV3ZXIoY29udGVudE91dGxpbmVWaWV3ZXIpOworCQkJCQl9CisJCQkJfQorCQkJCWVsc2UgaWYgKHAgaW5zdGFuY2VvZiBQcm9wZXJ0eVNoZWV0KSB7CisJCQkJCWlmICgoKFByb3BlcnR5U2hlZXQpcCkuZ2V0Q3VycmVudFBhZ2UoKSA9PSBwcm9wZXJ0eVNoZWV0UGFnZSkgeworCQkJCQkJZ2V0QWN0aW9uQmFyQ29udHJpYnV0b3IoKS5zZXRBY3RpdmVFZGl0b3IoU3RhbmRhcmRFZGl0b3IudGhpcyk7CisJCQkJCQloYW5kbGVBY3RpdmF0ZSgpOworCQkJCQl9CisJCQkJfQorCQkJCWVsc2UgaWYgKHAgPT0gU3RhbmRhcmRFZGl0b3IudGhpcykgeworCQkJCQloYW5kbGVBY3RpdmF0ZSgpOworCQkJCX0KKwkJCX0KKwkJCXB1YmxpYyB2b2lkIHBhcnRCcm91Z2h0VG9Ub3AoSVdvcmtiZW5jaFBhcnQgcCkgeworCQkJCS8vIElnbm9yZS4KKwkJCX0KKwkJCXB1YmxpYyB2b2lkIHBhcnRDbG9zZWQoSVdvcmtiZW5jaFBhcnQgcCkgeworCQkJCS8vIElnbm9yZS4KKwkJCX0KKwkJCXB1YmxpYyB2b2lkIHBhcnREZWFjdGl2YXRlZChJV29ya2JlbmNoUGFydCBwKSB7CisJCQkJLy8gSWdub3JlLgorCQkJfQorCQkJcHVibGljIHZvaWQgcGFydE9wZW5lZChJV29ya2JlbmNoUGFydCBwKSB7CisJCQkJLy8gSWdub3JlLgorCQkJfQorCQl9OworCisJLyoqCisJICogUmVzb3VyY2VzIHRoYXQgaGF2ZSBiZWVuIHJlbW92ZWQgc2luY2UgbGFzdCBhY3RpdmF0aW9uLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBDb2xsZWN0aW9uPFJlc291cmNlPiByZW1vdmVkUmVzb3VyY2VzID0gbmV3IEFycmF5TGlzdDxSZXNvdXJjZT4oKTsKKworCS8qKgorCSAqIFJlc291cmNlcyB0aGF0IGhhdmUgYmVlbiBjaGFuZ2VkIHNpbmNlIGxhc3QgYWN0aXZhdGlvbi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgQ29sbGVjdGlvbjxSZXNvdXJjZT4gY2hhbmdlZFJlc291cmNlcyA9IG5ldyBBcnJheUxpc3Q8UmVzb3VyY2U+KCk7CisKKwkvKioKKwkgKiBSZXNvdXJjZXMgdGhhdCBoYXZlIGJlZW4gc2F2ZWQuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIENvbGxlY3Rpb248UmVzb3VyY2U+IHNhdmVkUmVzb3VyY2VzID0gbmV3IEFycmF5TGlzdDxSZXNvdXJjZT4oKTsKKworCS8qKgorCSAqIE1hcCB0byBzdG9yZSB0aGUgZGlhZ25vc3RpYyBhc3NvY2lhdGVkIHdpdGggYSByZXNvdXJjZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgTWFwPFJlc291cmNlLCBEaWFnbm9zdGljPiByZXNvdXJjZVRvRGlhZ25vc3RpY01hcCA9IG5ldyBMaW5rZWRIYXNoTWFwPFJlc291cmNlLCBEaWFnbm9zdGljPigpOworCisJLyoqCisJICogQ29udHJvbHMgd2hldGhlciB0aGUgcHJvYmxlbSBpbmRpY2F0aW9uIHNob3VsZCBiZSB1cGRhdGVkLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBib29sZWFuIHVwZGF0ZVByb2JsZW1JbmRpY2F0aW9uID0gdHJ1ZTsKKworCS8qKgorCSAqIEFkYXB0ZXIgdXNlZCB0byB1cGRhdGUgdGhlIHByb2JsZW0gaW5kaWNhdGlvbiB3aGVuIHJlc291cmNlcyBhcmUgZGVtYW5kZWQgbG9hZGVkLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBFQ29udGVudEFkYXB0ZXIgcHJvYmxlbUluZGljYXRpb25BZGFwdGVyID0gCisJCW5ldyBFQ29udGVudEFkYXB0ZXIoKSB7CisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyB2b2lkIG5vdGlmeUNoYW5nZWQoTm90aWZpY2F0aW9uIG5vdGlmaWNhdGlvbikgeworCQkJCWlmIChub3RpZmljYXRpb24uZ2V0Tm90aWZpZXIoKSBpbnN0YW5jZW9mIFJlc291cmNlKSB7CisJCQkJCXN3aXRjaCAobm90aWZpY2F0aW9uLmdldEZlYXR1cmVJRChSZXNvdXJjZS5jbGFzcykpIHsKKwkJCQkJCWNhc2UgUmVzb3VyY2UuUkVTT1VSQ0VfX0lTX0xPQURFRDoKKwkJCQkJCWNhc2UgUmVzb3VyY2UuUkVTT1VSQ0VfX0VSUk9SUzoKKwkJCQkJCWNhc2UgUmVzb3VyY2UuUkVTT1VSQ0VfX1dBUk5JTkdTOiB7CisJCQkJCQkJUmVzb3VyY2UgcmVzb3VyY2UgPSAoUmVzb3VyY2Upbm90aWZpY2F0aW9uLmdldE5vdGlmaWVyKCk7CisJCQkJCQkJRGlhZ25vc3RpYyBkaWFnbm9zdGljID0gYW5hbHl6ZVJlc291cmNlUHJvYmxlbXMocmVzb3VyY2UsIG51bGwpOworCQkJCQkJCWlmIChkaWFnbm9zdGljLmdldFNldmVyaXR5KCkgIT0gRGlhZ25vc3RpYy5PSykgeworCQkJCQkJCQlyZXNvdXJjZVRvRGlhZ25vc3RpY01hcC5wdXQocmVzb3VyY2UsIGRpYWdub3N0aWMpOworCQkJCQkJCX0KKwkJCQkJCQllbHNlIHsKKwkJCQkJCQkJcmVzb3VyY2VUb0RpYWdub3N0aWNNYXAucmVtb3ZlKHJlc291cmNlKTsKKwkJCQkJCQl9CisKKwkJCQkJCQlpZiAodXBkYXRlUHJvYmxlbUluZGljYXRpb24pIHsKKwkJCQkJCQkJZ2V0U2l0ZSgpLmdldFNoZWxsKCkuZ2V0RGlzcGxheSgpLmFzeW5jRXhlYworCQkJCQkJCQkJKG5ldyBSdW5uYWJsZSgpIHsKKwkJCQkJCQkJCQkgcHVibGljIHZvaWQgcnVuKCkgeworCQkJCQkJCQkJCQkgdXBkYXRlUHJvYmxlbUluZGljYXRpb24oKTsKKwkJCQkJCQkJCQkgfQorCQkJCQkJCQkJIH0pOworCQkJCQkJCX0KKwkJCQkJCQlicmVhazsKKwkJCQkJCX0KKwkJCQkJfQorCQkJCX0KKwkJCQllbHNlIHsKKwkJCQkJc3VwZXIubm90aWZ5Q2hhbmdlZChub3RpZmljYXRpb24pOworCQkJCX0KKwkJCX0KKworCQkJQE92ZXJyaWRlCisJCQlwcm90ZWN0ZWQgdm9pZCBzZXRUYXJnZXQoUmVzb3VyY2UgdGFyZ2V0KSB7CisJCQkJYmFzaWNTZXRUYXJnZXQodGFyZ2V0KTsKKwkJCX0KKworCQkJQE92ZXJyaWRlCisJCQlwcm90ZWN0ZWQgdm9pZCB1bnNldFRhcmdldChSZXNvdXJjZSB0YXJnZXQpIHsKKwkJCQliYXNpY1Vuc2V0VGFyZ2V0KHRhcmdldCk7CisJCQl9CisJCX07CisKKwkvKioKKwkgKiBIYW5kbGVzIGFjdGl2YXRpb24gb2YgdGhlIGVkaXRvciBvciBpdCdzIGFzc29jaWF0ZWQgdmlld3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgaGFuZGxlQWN0aXZhdGUoKSB7CisJCS8vIFJlY29tcHV0ZSB0aGUgcmVhZCBvbmx5IHN0YXRlLgorCQkvLworCQlpZiAoZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVRvUmVhZE9ubHlNYXAoKSAhPSBudWxsKSB7CisJCSAgZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVRvUmVhZE9ubHlNYXAoKS5jbGVhcigpOworCisJCSAgLy8gUmVmcmVzaCBhbnkgYWN0aW9ucyB0aGF0IG1heSBiZWNvbWUgZW5hYmxlZCBvciBkaXNhYmxlZC4KKwkJICAvLworCQkgIHNldFNlbGVjdGlvbihnZXRTZWxlY3Rpb24oKSk7CisJCX0KKworCQlpZiAoIXJlbW92ZWRSZXNvdXJjZXMuaXNFbXB0eSgpKSB7CisJCQlpZiAoaGFuZGxlRGlydHlDb25mbGljdCgpKSB7CisJCQkJZ2V0U2l0ZSgpLmdldFBhZ2UoKS5jbG9zZUVkaXRvcihTdGFuZGFyZEVkaXRvci50aGlzLCBmYWxzZSk7CisJCQl9CisJCQllbHNlIHsKKwkJCQlyZW1vdmVkUmVzb3VyY2VzLmNsZWFyKCk7CisJCQkJY2hhbmdlZFJlc291cmNlcy5jbGVhcigpOworCQkJCXNhdmVkUmVzb3VyY2VzLmNsZWFyKCk7CisJCQl9CisJCX0KKwkJZWxzZSBpZiAoIWNoYW5nZWRSZXNvdXJjZXMuaXNFbXB0eSgpKSB7CisJCQljaGFuZ2VkUmVzb3VyY2VzLnJlbW92ZUFsbChzYXZlZFJlc291cmNlcyk7CisJCQloYW5kbGVDaGFuZ2VkUmVzb3VyY2VzKCk7CisJCQljaGFuZ2VkUmVzb3VyY2VzLmNsZWFyKCk7CisJCQlzYXZlZFJlc291cmNlcy5jbGVhcigpOworCQl9CisJfQorCisJLyoqCisJICogSGFuZGxlcyB3aGF0IHRvIGRvIHdpdGggY2hhbmdlZCByZXNvdXJjZXMgb24gYWN0aXZhdGlvbi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBoYW5kbGVDaGFuZ2VkUmVzb3VyY2VzKCkgeworCQlpZiAoIWNoYW5nZWRSZXNvdXJjZXMuaXNFbXB0eSgpICYmICghaXNEaXJ0eSgpIHx8IGhhbmRsZURpcnR5Q29uZmxpY3QoKSkpIHsKKwkJCWlmIChpc0RpcnR5KCkpIHsKKwkJCQljaGFuZ2VkUmVzb3VyY2VzLmFkZEFsbChlZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkuZ2V0UmVzb3VyY2VzKCkpOworCQkJfQorCQkJZWRpdGluZ0RvbWFpbi5nZXRDb21tYW5kU3RhY2soKS5mbHVzaCgpOworCisJCQl1cGRhdGVQcm9ibGVtSW5kaWNhdGlvbiA9IGZhbHNlOworCQkJZm9yIChSZXNvdXJjZSByZXNvdXJjZSA6IGNoYW5nZWRSZXNvdXJjZXMpIHsKKwkJCQlpZiAocmVzb3VyY2UuaXNMb2FkZWQoKSkgeworCQkJCQlyZXNvdXJjZS51bmxvYWQoKTsKKwkJCQkJdHJ5IHsKKwkJCQkJCXJlc291cmNlLmxvYWQoQ29sbGVjdGlvbnMuRU1QVFlfTUFQKTsKKwkJCQkJfQorCQkJCQljYXRjaCAoSU9FeGNlcHRpb24gZXhjZXB0aW9uKSB7CisJCQkJCQlpZiAoIXJlc291cmNlVG9EaWFnbm9zdGljTWFwLmNvbnRhaW5zS2V5KHJlc291cmNlKSkgeworCQkJCQkJCXJlc291cmNlVG9EaWFnbm9zdGljTWFwLnB1dChyZXNvdXJjZSwgYW5hbHl6ZVJlc291cmNlUHJvYmxlbXMocmVzb3VyY2UsIGV4Y2VwdGlvbikpOworCQkJCQkJfQorCQkJCQl9CisJCQkJfQorCQkJfQorCisJCQlpZiAoQWRhcHRlckZhY3RvcnlFZGl0aW5nRG9tYWluLmlzU3RhbGUoZWRpdG9yU2VsZWN0aW9uKSkgeworCQkJCXNldFNlbGVjdGlvbihTdHJ1Y3R1cmVkU2VsZWN0aW9uLkVNUFRZKTsKKwkJCX0KKworCQkJdXBkYXRlUHJvYmxlbUluZGljYXRpb24gPSB0cnVlOworCQkJdXBkYXRlUHJvYmxlbUluZGljYXRpb24oKTsKKwkJfQorCX0KKyAgCisJLyoqCisJICogVXBkYXRlcyB0aGUgcHJvYmxlbXMgaW5kaWNhdGlvbiB3aXRoIHRoZSBpbmZvcm1hdGlvbiBkZXNjcmliZWQgaW4gdGhlIHNwZWNpZmllZCBkaWFnbm9zdGljLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIHVwZGF0ZVByb2JsZW1JbmRpY2F0aW9uKCkgeworCQlpZiAodXBkYXRlUHJvYmxlbUluZGljYXRpb24pIHsKKwkJCUJhc2ljRGlhZ25vc3RpYyBkaWFnbm9zdGljID0KKwkJCQluZXcgQmFzaWNEaWFnbm9zdGljCisJCQkJCShEaWFnbm9zdGljLk9LLAorCQkJCQkgIm9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5lZGl0b3IiLCAvLyROT04tTkxTLTEkCisJCQkJCSAwLAorCQkJCQkgbnVsbCwKKwkJCQkJIG5ldyBPYmplY3QgW10geyBlZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkgfSk7CisJCQlmb3IgKERpYWdub3N0aWMgY2hpbGREaWFnbm9zdGljIDogcmVzb3VyY2VUb0RpYWdub3N0aWNNYXAudmFsdWVzKCkpIHsKKwkJCQlpZiAoY2hpbGREaWFnbm9zdGljLmdldFNldmVyaXR5KCkgIT0gRGlhZ25vc3RpYy5PSykgeworCQkJCQlkaWFnbm9zdGljLmFkZChjaGlsZERpYWdub3N0aWMpOworCQkJCX0KKwkJCX0KKworCQkJaW50IGxhc3RFZGl0b3JQYWdlID0gZ2V0UGFnZUNvdW50KCkgLSAxOworCQkJaWYgKGxhc3RFZGl0b3JQYWdlID49IDAgJiYgZ2V0RWRpdG9yKGxhc3RFZGl0b3JQYWdlKSBpbnN0YW5jZW9mIFByb2JsZW1FZGl0b3JQYXJ0KSB7CisJCQkJKChQcm9ibGVtRWRpdG9yUGFydClnZXRFZGl0b3IobGFzdEVkaXRvclBhZ2UpKS5zZXREaWFnbm9zdGljKGRpYWdub3N0aWMpOworCQkJCWlmIChkaWFnbm9zdGljLmdldFNldmVyaXR5KCkgIT0gRGlhZ25vc3RpYy5PSykgeworCQkJCQlzZXRBY3RpdmVQYWdlKGxhc3RFZGl0b3JQYWdlKTsKKwkJCQl9CisJCQl9CisJCQllbHNlIGlmIChkaWFnbm9zdGljLmdldFNldmVyaXR5KCkgIT0gRGlhZ25vc3RpYy5PSykgeworCQkJCVByb2JsZW1FZGl0b3JQYXJ0IHByb2JsZW1FZGl0b3JQYXJ0ID0gbmV3IFByb2JsZW1FZGl0b3JQYXJ0KCk7CisJCQkJcHJvYmxlbUVkaXRvclBhcnQuc2V0RGlhZ25vc3RpYyhkaWFnbm9zdGljKTsKKwkJCQl0cnkgeworCQkJCQlhZGRQYWdlKCsrbGFzdEVkaXRvclBhZ2UsIHByb2JsZW1FZGl0b3JQYXJ0LCBnZXRFZGl0b3JJbnB1dCgpKTsKKwkJCQkJc2V0UGFnZVRleHQobGFzdEVkaXRvclBhZ2UsIHByb2JsZW1FZGl0b3JQYXJ0LmdldFBhcnROYW1lKCkpOworCQkJCQlzZXRBY3RpdmVQYWdlKGxhc3RFZGl0b3JQYWdlKTsKKwkJCQkJc2hvd1RhYnMoKTsKKwkJCQl9CisJCQkJY2F0Y2ggKFBhcnRJbml0RXhjZXB0aW9uIGV4Y2VwdGlvbikgeworCQkJCQlEaXNlYXNlbW9kZWxzRWRpdG9yUGx1Z2luLklOU1RBTkNFLmxvZyhleGNlcHRpb24pOworCQkJCX0KKwkJCX0KKwkJfQorCX0KKworCS8qKgorCSAqIFNob3dzIGEgZGlhbG9nIHRoYXQgYXNrcyBpZiBjb25mbGljdGluZyBjaGFuZ2VzIHNob3VsZCBiZSBkaXNjYXJkZWQuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIGJvb2xlYW4gaGFuZGxlRGlydHlDb25mbGljdCgpIHsKKwkJcmV0dXJuCisJCQlNZXNzYWdlRGlhbG9nLm9wZW5RdWVzdGlvbgorCQkJCShnZXRTaXRlKCkuZ2V0U2hlbGwoKSwKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfRmlsZUNvbmZsaWN0X2xhYmVsIiksIC8vJE5PTi1OTFMtMSQKKwkJCQkgZ2V0U3RyaW5nKCJfV0FSTl9GaWxlQ29uZmxpY3QiKSk7IC8vJE5PTi1OTFMtMSQKKwl9CisKKwkvKioKKwkgKiBUaGlzIGNyZWF0ZXMgYSBtb2RlbCBlZGl0b3IuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFN0YW5kYXJkRWRpdG9yKCkgeworCQlzdXBlcigpOworCQlpbml0aWFsaXplRWRpdGluZ0RvbWFpbigpOworCX0KKworCS8qKgorCSAqIFRoaXMgc2V0cyB1cCB0aGUgZWRpdGluZyBkb21haW4gZm9yIHRoZSBzdGFuZGFyZCBlZGl0b3IuIDwhLS0gYmVnaW4tdXNlci1kb2MKKwkgKiAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogCisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBpbml0aWFsaXplRWRpdGluZ0RvbWFpbigpIHsKKwkJaW5pdGlhbGl6ZUVkaXRpbmdEb21haW5HZW4oKTsKKwkJZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpLmdldFJlc291cmNlRmFjdG9yeVJlZ2lzdHJ5KCkKKwkJCQkuZ2V0RXh0ZW5zaW9uVG9GYWN0b3J5TWFwKCkucHV0KCIqIiwKKwkJCQkJCVNURU1YTUlSZXNvdXJjZUZhY3RvcnlJbXBsLklOU1RBTkNFKTsKKworCQllZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkuZ2V0UmVzb3VyY2VGYWN0b3J5UmVnaXN0cnkoKQorCQkJCS5nZXRQcm90b2NvbFRvRmFjdG9yeU1hcCgpLnB1dCgicGxhdGZvcm0iLAorCQkJCQkJU1RFTVhNSVJlc291cmNlRmFjdG9yeUltcGwuSU5TVEFOQ0UpOworCX0gLy8gaW5pdGlhbGl6ZUVkaXRpbmdEb21haW4KKwkKKwkvKioKKwkgKiBUaGlzIHNldHMgdXAgdGhlIGVkaXRpbmcgZG9tYWluIGZvciB0aGUgbW9kZWwgZWRpdG9yLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIGluaXRpYWxpemVFZGl0aW5nRG9tYWluR2VuKCkgeworCQkvLyBDcmVhdGUgYW4gYWRhcHRlciBmYWN0b3J5IHRoYXQgeWllbGRzIGl0ZW0gcHJvdmlkZXJzLgorCQkvLworCQlhZGFwdGVyRmFjdG9yeSA9IG5ldyBDb21wb3NlZEFkYXB0ZXJGYWN0b3J5KENvbXBvc2VkQWRhcHRlckZhY3RvcnkuRGVzY3JpcHRvci5SZWdpc3RyeS5JTlNUQU5DRSk7CisKKwkJYWRhcHRlckZhY3RvcnkuYWRkQWRhcHRlckZhY3RvcnkobmV3IFJlc291cmNlSXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkoKSk7CisJCWFkYXB0ZXJGYWN0b3J5LmFkZEFkYXB0ZXJGYWN0b3J5KG5ldyBTdGFuZGFyZEl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5KCkpOworCQlhZGFwdGVyRmFjdG9yeS5hZGRBZGFwdGVyRmFjdG9yeShuZXcgRGlzZWFzZXByZWRpY2F0ZXNJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSgpKTsKKwkJYWRhcHRlckZhY3RvcnkuYWRkQWRhcHRlckZhY3RvcnkobmV3IENvbW1vbkl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5KCkpOworCQlhZGFwdGVyRmFjdG9yeS5hZGRBZGFwdGVyRmFjdG9yeShuZXcgR3JhcGhJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSgpKTsKKwkJYWRhcHRlckZhY3RvcnkuYWRkQWRhcHRlckZhY3RvcnkobmV3IE1vZGVsSXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkoKSk7CisJCWFkYXB0ZXJGYWN0b3J5LmFkZEFkYXB0ZXJGYWN0b3J5KG5ldyBNb2RpZmllckl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5KCkpOworCQlhZGFwdGVyRmFjdG9yeS5hZGRBZGFwdGVyRmFjdG9yeShuZXcgUHJlZGljYXRlSXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkoKSk7CisJCWFkYXB0ZXJGYWN0b3J5LmFkZEFkYXB0ZXJGYWN0b3J5KG5ldyBTY2VuYXJpb0l0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5KCkpOworCQlhZGFwdGVyRmFjdG9yeS5hZGRBZGFwdGVyRmFjdG9yeShuZXcgU2VxdWVuY2VySXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkoKSk7CisJCWFkYXB0ZXJGYWN0b3J5LmFkZEFkYXB0ZXJGYWN0b3J5KG5ldyBTb2x2ZXJJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSgpKTsKKwkJYWRhcHRlckZhY3RvcnkuYWRkQWRhcHRlckZhY3RvcnkobmV3IExhYmVsc0l0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5KCkpOworCQlhZGFwdGVyRmFjdG9yeS5hZGRBZGFwdGVyRmFjdG9yeShuZXcgRWNvcmVJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSgpKTsKKwkJYWRhcHRlckZhY3RvcnkuYWRkQWRhcHRlckZhY3RvcnkobmV3IG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5wcm92aWRlci5TdGFuZGFyZEl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5KCkpOworCQlhZGFwdGVyRmFjdG9yeS5hZGRBZGFwdGVyRmFjdG9yeShuZXcgTG9nZ2VySXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkoKSk7CisJCWFkYXB0ZXJGYWN0b3J5LmFkZEFkYXB0ZXJGYWN0b3J5KG5ldyBSZWZsZWN0aXZlSXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkoKSk7CisKKwkJLy8gQ3JlYXRlIHRoZSBjb21tYW5kIHN0YWNrIHRoYXQgd2lsbCBub3RpZnkgdGhpcyBlZGl0b3IgYXMgY29tbWFuZHMgYXJlIGV4ZWN1dGVkLgorCQkvLworCQlCYXNpY0NvbW1hbmRTdGFjayBjb21tYW5kU3RhY2sgPSBuZXcgQmFzaWNDb21tYW5kU3RhY2soKTsKKworCQkvLyBBZGQgYSBsaXN0ZW5lciB0byBzZXQgdGhlIG1vc3QgcmVjZW50IGNvbW1hbmQncyBhZmZlY3RlZCBvYmplY3RzIHRvIGJlIHRoZSBzZWxlY3Rpb24gb2YgdGhlIHZpZXdlciB3aXRoIGZvY3VzLgorCQkvLworCQljb21tYW5kU3RhY2suYWRkQ29tbWFuZFN0YWNrTGlzdGVuZXIKKwkJCShuZXcgQ29tbWFuZFN0YWNrTGlzdGVuZXIoKSB7CisJCQkJIHB1YmxpYyB2b2lkIGNvbW1hbmRTdGFja0NoYW5nZWQoZmluYWwgRXZlbnRPYmplY3QgZXZlbnQpIHsKKwkJCQkJIGdldENvbnRhaW5lcigpLmdldERpc3BsYXkoKS5hc3luY0V4ZWMKKwkJCQkJCSAobmV3IFJ1bm5hYmxlKCkgeworCQkJCQkJCSAgcHVibGljIHZvaWQgcnVuKCkgeworCQkJCQkJCQkgIGZpcmVQcm9wZXJ0eUNoYW5nZShJRWRpdG9yUGFydC5QUk9QX0RJUlRZKTsKKworCQkJCQkJCQkgIC8vIFRyeSB0byBzZWxlY3QgdGhlIGFmZmVjdGVkIG9iamVjdHMuCisJCQkJCQkJCSAgLy8KKwkJCQkJCQkJICBDb21tYW5kIG1vc3RSZWNlbnRDb21tYW5kID0gKChDb21tYW5kU3RhY2spZXZlbnQuZ2V0U291cmNlKCkpLmdldE1vc3RSZWNlbnRDb21tYW5kKCk7CisJCQkJCQkJCSAgaWYgKG1vc3RSZWNlbnRDb21tYW5kICE9IG51bGwpIHsKKwkJCQkJCQkJCSAgc2V0U2VsZWN0aW9uVG9WaWV3ZXIobW9zdFJlY2VudENvbW1hbmQuZ2V0QWZmZWN0ZWRPYmplY3RzKCkpOworCQkJCQkJCQkgIH0KKwkJCQkJCQkJICBpZiAocHJvcGVydHlTaGVldFBhZ2UgIT0gbnVsbCAmJiAhcHJvcGVydHlTaGVldFBhZ2UuZ2V0Q29udHJvbCgpLmlzRGlzcG9zZWQoKSkgeworCQkJCQkJCQkJICBwcm9wZXJ0eVNoZWV0UGFnZS5yZWZyZXNoKCk7CisJCQkJCQkJCSAgfQorCQkJCQkJCSAgfQorCQkJCQkJICB9KTsKKwkJCQkgfQorCQkJIH0pOworCisJCS8vIENyZWF0ZSB0aGUgZWRpdGluZyBkb21haW4gd2l0aCBhIHNwZWNpYWwgY29tbWFuZCBzdGFjay4KKwkJLy8KKwkJZWRpdGluZ0RvbWFpbiA9IG5ldyBBZGFwdGVyRmFjdG9yeUVkaXRpbmdEb21haW4oYWRhcHRlckZhY3RvcnksIGNvbW1hbmRTdGFjaywgbmV3IEhhc2hNYXA8UmVzb3VyY2UsIEJvb2xlYW4+KCkpOworCX0KKworCS8qKgorCSAqIFRoaXMgaXMgaGVyZSBmb3IgdGhlIGxpc3RlbmVyIHRvIGJlIGFibGUgdG8gY2FsbCBpdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgdm9pZCBmaXJlUHJvcGVydHlDaGFuZ2UoaW50IGFjdGlvbikgeworCQlzdXBlci5maXJlUHJvcGVydHlDaGFuZ2UoYWN0aW9uKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHNldHMgdGhlIHNlbGVjdGlvbiBpbnRvIHdoaWNoZXZlciB2aWV3ZXIgaXMgYWN0aXZlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIHNldFNlbGVjdGlvblRvVmlld2VyKENvbGxlY3Rpb248Pz4gY29sbGVjdGlvbikgeworCQlmaW5hbCBDb2xsZWN0aW9uPD8+IHRoZVNlbGVjdGlvbiA9IGNvbGxlY3Rpb247CisJCS8vIE1ha2Ugc3VyZSBpdCdzIG9rYXkuCisJCS8vCisJCWlmICh0aGVTZWxlY3Rpb24gIT0gbnVsbCAmJiAhdGhlU2VsZWN0aW9uLmlzRW1wdHkoKSkgeworCQkJUnVubmFibGUgcnVubmFibGUgPQorCQkJCW5ldyBSdW5uYWJsZSgpIHsKKwkJCQkJcHVibGljIHZvaWQgcnVuKCkgeworCQkJCQkJLy8gVHJ5IHRvIHNlbGVjdCB0aGUgaXRlbXMgaW4gdGhlIGN1cnJlbnQgY29udGVudCB2aWV3ZXIgb2YgdGhlIGVkaXRvci4KKwkJCQkJCS8vCisJCQkJCQlpZiAoY3VycmVudFZpZXdlciAhPSBudWxsKSB7CisJCQkJCQkJY3VycmVudFZpZXdlci5zZXRTZWxlY3Rpb24obmV3IFN0cnVjdHVyZWRTZWxlY3Rpb24odGhlU2VsZWN0aW9uLnRvQXJyYXkoKSksIHRydWUpOworCQkJCQkJfQorCQkJCQl9CisJCQkJfTsKKwkJCWdldFNpdGUoKS5nZXRTaGVsbCgpLmdldERpc3BsYXkoKS5hc3luY0V4ZWMocnVubmFibGUpOworCQl9CisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIHRoZSBlZGl0aW5nIGRvbWFpbiBhcyByZXF1aXJlZCBieSB0aGUge0BsaW5rIElFZGl0aW5nRG9tYWluUHJvdmlkZXJ9IGludGVyZmFjZS4KKwkgKiBUaGlzIGlzIGltcG9ydGFudCBmb3IgaW1wbGVtZW50aW5nIHRoZSBzdGF0aWMgbWV0aG9kcyBvZiB7QGxpbmsgQWRhcHRlckZhY3RvcnlFZGl0aW5nRG9tYWlufQorCSAqIGFuZCBmb3Igc3VwcG9ydGluZyB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkuYWN0aW9uLkNvbW1hbmRBY3Rpb259LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFZGl0aW5nRG9tYWluIGdldEVkaXRpbmdEb21haW4oKSB7CisJCXJldHVybiBlZGl0aW5nRG9tYWluOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBjbGFzcyBSZXZlcnNlQWRhcHRlckZhY3RvcnlDb250ZW50UHJvdmlkZXIgZXh0ZW5kcyBBZGFwdGVyRmFjdG9yeUNvbnRlbnRQcm92aWRlciB7CisJCXB1YmxpYyBSZXZlcnNlQWRhcHRlckZhY3RvcnlDb250ZW50UHJvdmlkZXIoQWRhcHRlckZhY3RvcnkgYWRhcHRlckZhY3RvcnkpIHsKKwkJCXN1cGVyKGFkYXB0ZXJGYWN0b3J5KTsKKwkJfQorCisJCXB1YmxpYyBPYmplY3QgW10gZ2V0RWxlbWVudHMoT2JqZWN0IG9iamVjdCkgeworCQkJT2JqZWN0IHBhcmVudCA9IHN1cGVyLmdldFBhcmVudChvYmplY3QpOworCQkJcmV0dXJuIChwYXJlbnQgPT0gbnVsbCA/IENvbGxlY3Rpb25zLkVNUFRZX1NFVCA6IENvbGxlY3Rpb25zLnNpbmdsZXRvbihwYXJlbnQpKS50b0FycmF5KCk7CisJCX0KKworCQlwdWJsaWMgT2JqZWN0IFtdIGdldENoaWxkcmVuKE9iamVjdCBvYmplY3QpIHsKKwkJCU9iamVjdCBwYXJlbnQgPSBzdXBlci5nZXRQYXJlbnQob2JqZWN0KTsKKwkJCXJldHVybiAocGFyZW50ID09IG51bGwgPyBDb2xsZWN0aW9ucy5FTVBUWV9TRVQgOiBDb2xsZWN0aW9ucy5zaW5nbGV0b24ocGFyZW50KSkudG9BcnJheSgpOworCQl9CisKKwkJcHVibGljIGJvb2xlYW4gaGFzQ2hpbGRyZW4oT2JqZWN0IG9iamVjdCkgeworCQkJT2JqZWN0IHBhcmVudCA9IHN1cGVyLmdldFBhcmVudChvYmplY3QpOworCQkJcmV0dXJuIHBhcmVudCAhPSBudWxsOworCQl9CisKKwkJcHVibGljIE9iamVjdCBnZXRQYXJlbnQoT2JqZWN0IG9iamVjdCkgeworCQkJcmV0dXJuIG51bGw7CisJCX0KKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRDdXJyZW50Vmlld2VyUGFuZShWaWV3ZXJQYW5lIHZpZXdlclBhbmUpIHsKKwkJaWYgKGN1cnJlbnRWaWV3ZXJQYW5lICE9IHZpZXdlclBhbmUpIHsKKwkJCWlmIChjdXJyZW50Vmlld2VyUGFuZSAhPSBudWxsKSB7CisJCQkJY3VycmVudFZpZXdlclBhbmUuc2hvd0ZvY3VzKGZhbHNlKTsKKwkJCX0KKwkJCWN1cnJlbnRWaWV3ZXJQYW5lID0gdmlld2VyUGFuZTsKKwkJfQorCQlzZXRDdXJyZW50Vmlld2VyKGN1cnJlbnRWaWV3ZXJQYW5lLmdldFZpZXdlcigpKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIG1ha2VzIHN1cmUgdGhhdCBvbmUgY29udGVudCB2aWV3ZXIsIGVpdGhlciBmb3IgdGhlIGN1cnJlbnQgcGFnZSBvciB0aGUgb3V0bGluZSB2aWV3LCBpZiBpdCBoYXMgZm9jdXMsCisJICogaXMgdGhlIGN1cnJlbnQgb25lLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIHNldEN1cnJlbnRWaWV3ZXIoVmlld2VyIHZpZXdlcikgeworCQkvLyBJZiBpdCBpcyBjaGFuZ2luZy4uLgorCQkvLworCQlpZiAoY3VycmVudFZpZXdlciAhPSB2aWV3ZXIpIHsKKwkJCWlmIChzZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIgPT0gbnVsbCkgeworCQkJCS8vIENyZWF0ZSB0aGUgbGlzdGVuZXIgb24gZGVtYW5kLgorCQkJCS8vCisJCQkJc2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyID0KKwkJCQkJbmV3IElTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIoKSB7CisJCQkJCQkvLyBUaGlzIGp1c3Qgbm90aWZpZXMgdGhvc2UgdGhpbmdzIHRoYXQgYXJlIGFmZmVjdGVkIGJ5IHRoZSBzZWN0aW9uLgorCQkJCQkJLy8KKwkJCQkJCXB1YmxpYyB2b2lkIHNlbGVjdGlvbkNoYW5nZWQoU2VsZWN0aW9uQ2hhbmdlZEV2ZW50IHNlbGVjdGlvbkNoYW5nZWRFdmVudCkgeworCQkJCQkJCXNldFNlbGVjdGlvbihzZWxlY3Rpb25DaGFuZ2VkRXZlbnQuZ2V0U2VsZWN0aW9uKCkpOworCQkJCQkJfQorCQkJCQl9OworCQkJfQorCisJCQkvLyBTdG9wIGxpc3RlbmluZyB0byB0aGUgb2xkIG9uZS4KKwkJCS8vCisJCQlpZiAoY3VycmVudFZpZXdlciAhPSBudWxsKSB7CisJCQkJY3VycmVudFZpZXdlci5yZW1vdmVTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIoc2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyKTsKKwkJCX0KKworCQkJLy8gU3RhcnQgbGlzdGVuaW5nIHRvIHRoZSBuZXcgb25lLgorCQkJLy8KKwkJCWlmICh2aWV3ZXIgIT0gbnVsbCkgeworCQkJCXZpZXdlci5hZGRTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIoc2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyKTsKKwkJCX0KKworCQkJLy8gUmVtZW1iZXIgaXQuCisJCQkvLworCQkJY3VycmVudFZpZXdlciA9IHZpZXdlcjsKKworCQkJLy8gU2V0IHRoZSBlZGl0b3JzIHNlbGVjdGlvbiBiYXNlZCBvbiB0aGUgY3VycmVudCB2aWV3ZXIncyBzZWxlY3Rpb24uCisJCQkvLworCQkJc2V0U2VsZWN0aW9uKGN1cnJlbnRWaWV3ZXIgPT0gbnVsbCA/IFN0cnVjdHVyZWRTZWxlY3Rpb24uRU1QVFkgOiBjdXJyZW50Vmlld2VyLmdldFNlbGVjdGlvbigpKTsKKwkJfQorCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyB0aGUgdmlld2VyIGFzIHJlcXVpcmVkIGJ5IHRoZSB7QGxpbmsgSVZpZXdlclByb3ZpZGVyfSBpbnRlcmZhY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFZpZXdlciBnZXRWaWV3ZXIoKSB7CisJCXJldHVybiBjdXJyZW50Vmlld2VyOworCX0KKworCS8qKgorCSAqIFRoaXMgY3JlYXRlcyBhIGNvbnRleHQgbWVudSBmb3IgdGhlIHZpZXdlciBhbmQgYWRkcyBhIGxpc3RlbmVyIGFzIHdlbGwgcmVnaXN0ZXJpbmcgdGhlIG1lbnUgZm9yIGV4dGVuc2lvbi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBjcmVhdGVDb250ZXh0TWVudUZvcihTdHJ1Y3R1cmVkVmlld2VyIHZpZXdlcikgeworCQlNZW51TWFuYWdlciBjb250ZXh0TWVudSA9IG5ldyBNZW51TWFuYWdlcigiI1BvcFVwIik7IC8vJE5PTi1OTFMtMSQKKwkJY29udGV4dE1lbnUuYWRkKG5ldyBTZXBhcmF0b3IoImFkZGl0aW9ucyIpKTsgLy8kTk9OLU5MUy0xJAorCQljb250ZXh0TWVudS5zZXRSZW1vdmVBbGxXaGVuU2hvd24odHJ1ZSk7CisJCWNvbnRleHRNZW51LmFkZE1lbnVMaXN0ZW5lcih0aGlzKTsKKwkJTWVudSBtZW51PSBjb250ZXh0TWVudS5jcmVhdGVDb250ZXh0TWVudSh2aWV3ZXIuZ2V0Q29udHJvbCgpKTsKKwkJdmlld2VyLmdldENvbnRyb2woKS5zZXRNZW51KG1lbnUpOworCQlnZXRTaXRlKCkucmVnaXN0ZXJDb250ZXh0TWVudShjb250ZXh0TWVudSwgbmV3IFVud3JhcHBpbmdTZWxlY3Rpb25Qcm92aWRlcih2aWV3ZXIpKTsKKworCQlpbnQgZG5kT3BlcmF0aW9ucyA9IERORC5EUk9QX0NPUFkgfCBETkQuRFJPUF9NT1ZFIHwgRE5ELkRST1BfTElOSzsKKwkJVHJhbnNmZXJbXSB0cmFuc2ZlcnMgPSBuZXcgVHJhbnNmZXJbXSB7IExvY2FsVHJhbnNmZXIuZ2V0SW5zdGFuY2UoKSB9OworCQl2aWV3ZXIuYWRkRHJhZ1N1cHBvcnQoZG5kT3BlcmF0aW9ucywgdHJhbnNmZXJzLCBuZXcgVmlld2VyRHJhZ0FkYXB0ZXIodmlld2VyKSk7CisJCXZpZXdlci5hZGREcm9wU3VwcG9ydChkbmRPcGVyYXRpb25zLCB0cmFuc2ZlcnMsIG5ldyBFZGl0aW5nRG9tYWluVmlld2VyRHJvcEFkYXB0ZXIoZWRpdGluZ0RvbWFpbiwgdmlld2VyKSk7CisJfQorCisJLyoqCisJICogVGhpcyBpcyB0aGUgbWV0aG9kIGNhbGxlZCB0byBsb2FkIGEgcmVzb3VyY2UgaW50byB0aGUgZWRpdGluZyBkb21haW4ncyByZXNvdXJjZSBzZXQgYmFzZWQgb24gdGhlIGVkaXRvcidzIGlucHV0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIGNyZWF0ZU1vZGVsKCkgeworCQlVUkkgcmVzb3VyY2VVUkkgPSBFZGl0VUlVdGlsLmdldFVSSShnZXRFZGl0b3JJbnB1dCgpKTsKKwkJRXhjZXB0aW9uIGV4Y2VwdGlvbiA9IG51bGw7CisJCVJlc291cmNlIHJlc291cmNlID0gbnVsbDsKKwkJdHJ5IHsKKwkJCS8vIExvYWQgdGhlIHJlc291cmNlIHRocm91Z2ggdGhlIGVkaXRpbmcgZG9tYWluLgorCQkJLy8KKwkJCXJlc291cmNlID0gZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpLmdldFJlc291cmNlKHJlc291cmNlVVJJLCB0cnVlKTsKKwkJfQorCQljYXRjaCAoRXhjZXB0aW9uIGUpIHsKKwkJCWV4Y2VwdGlvbiA9IGU7CisJCQlyZXNvdXJjZSA9IGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKS5nZXRSZXNvdXJjZShyZXNvdXJjZVVSSSwgZmFsc2UpOworCQl9CisKKwkJRGlhZ25vc3RpYyBkaWFnbm9zdGljID0gYW5hbHl6ZVJlc291cmNlUHJvYmxlbXMocmVzb3VyY2UsIGV4Y2VwdGlvbik7CisJCWlmIChkaWFnbm9zdGljLmdldFNldmVyaXR5KCkgIT0gRGlhZ25vc3RpYy5PSykgeworCQkJcmVzb3VyY2VUb0RpYWdub3N0aWNNYXAucHV0KHJlc291cmNlLCAgYW5hbHl6ZVJlc291cmNlUHJvYmxlbXMocmVzb3VyY2UsIGV4Y2VwdGlvbikpOworCQl9CisJCWVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKS5lQWRhcHRlcnMoKS5hZGQocHJvYmxlbUluZGljYXRpb25BZGFwdGVyKTsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIGEgZGlhZ25vc3RpYyBkZXNjcmliaW5nIHRoZSBlcnJvcnMgYW5kIHdhcm5pbmdzIGxpc3RlZCBpbiB0aGUgcmVzb3VyY2UKKwkgKiBhbmQgdGhlIHNwZWNpZmllZCBleGNlcHRpb24gKGlmIGFueSkuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIERpYWdub3N0aWMgYW5hbHl6ZVJlc291cmNlUHJvYmxlbXMoUmVzb3VyY2UgcmVzb3VyY2UsIEV4Y2VwdGlvbiBleGNlcHRpb24pIHsKKwkJaWYgKCFyZXNvdXJjZS5nZXRFcnJvcnMoKS5pc0VtcHR5KCkgfHwgIXJlc291cmNlLmdldFdhcm5pbmdzKCkuaXNFbXB0eSgpKSB7CisJCQlCYXNpY0RpYWdub3N0aWMgYmFzaWNEaWFnbm9zdGljID0KKwkJCQluZXcgQmFzaWNEaWFnbm9zdGljCisJCQkJCShEaWFnbm9zdGljLkVSUk9SLAorCQkJCQkgIm9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5lZGl0b3IiLCAvLyROT04tTkxTLTEkCisJCQkJCSAwLAorCQkJCQkgZ2V0U3RyaW5nKCJfVUlfQ3JlYXRlTW9kZWxFcnJvcl9tZXNzYWdlIiwgcmVzb3VyY2UuZ2V0VVJJKCkpLCAvLyROT04tTkxTLTEkCisJCQkJCSBuZXcgT2JqZWN0IFtdIHsgZXhjZXB0aW9uID09IG51bGwgPyAoT2JqZWN0KXJlc291cmNlIDogZXhjZXB0aW9uIH0pOworCQkJYmFzaWNEaWFnbm9zdGljLm1lcmdlKEVjb3JlVXRpbC5jb21wdXRlRGlhZ25vc3RpYyhyZXNvdXJjZSwgdHJ1ZSkpOworCQkJcmV0dXJuIGJhc2ljRGlhZ25vc3RpYzsKKwkJfQorCQllbHNlIGlmIChleGNlcHRpb24gIT0gbnVsbCkgeworCQkJcmV0dXJuCisJCQkJbmV3IEJhc2ljRGlhZ25vc3RpYworCQkJCQkoRGlhZ25vc3RpYy5FUlJPUiwKKwkJCQkJICJvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZWRpdG9yIiwgLy8kTk9OLU5MUy0xJAorCQkJCQkgMCwKKwkJCQkJIGdldFN0cmluZygiX1VJX0NyZWF0ZU1vZGVsRXJyb3JfbWVzc2FnZSIsIHJlc291cmNlLmdldFVSSSgpKSwgLy8kTk9OLU5MUy0xJAorCQkJCQkgbmV3IE9iamVjdFtdIHsgZXhjZXB0aW9uIH0pOworCQl9CisJCWVsc2UgeworCQkJcmV0dXJuIERpYWdub3N0aWMuT0tfSU5TVEFOQ0U7CisJCX0KKwl9CisKKwkKKwkvKioKKwkgKiBUaGlzIGlzIHRoZSBtZXRob2QgdXNlZCBieSB0aGUgZnJhbWV3b3JrIHRvIGluc3RhbGwgeW91ciBvd24gY29udHJvbHMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCXB1YmxpYyB2b2lkIGNyZWF0ZVBhZ2VzKCkgeworCQkvLyBDcmVhdGVzIHRoZSBtb2RlbCBmcm9tIHRoZSBlZGl0b3IgaW5wdXQKKwkJLy8KKwkJY3JlYXRlTW9kZWwoKTsKKworCQkvLyBPbmx5IGNyZWF0ZXMgdGhlIG90aGVyIHBhZ2VzIGlmIHRoZXJlIGlzIHNvbWV0aGluZyB0aGF0IGNhbiBiZSBlZGl0ZWQKKwkJLy8KKwkJaWYgKCFnZXRFZGl0aW5nRG9tYWluKCkuZ2V0UmVzb3VyY2VTZXQoKS5nZXRSZXNvdXJjZXMoKS5pc0VtcHR5KCkpIHsKKwkJCS8vIENyZWF0ZSBhIHBhZ2UgZm9yIHRoZSBzZWxlY3Rpb24gdHJlZSB2aWV3LgorCQkJLy8KKwkJCXsKKwkJCQlWaWV3ZXJQYW5lIHZpZXdlclBhbmUgPQorCQkJCQluZXcgVmlld2VyUGFuZShnZXRTaXRlKCkuZ2V0UGFnZSgpLCBTdGFuZGFyZEVkaXRvci50aGlzKSB7CisJCQkJCQlAT3ZlcnJpZGUKKwkJCQkJCXB1YmxpYyBWaWV3ZXIgY3JlYXRlVmlld2VyKENvbXBvc2l0ZSBjb21wb3NpdGUpIHsKKwkJCQkJCQlUcmVlIHRyZWUgPSBuZXcgVHJlZShjb21wb3NpdGUsIFNXVC5NVUxUSSk7CisJCQkJCQkJVHJlZVZpZXdlciBuZXdUcmVlVmlld2VyID0gbmV3IFRyZWVWaWV3ZXIodHJlZSk7CisJCQkJCQkJcmV0dXJuIG5ld1RyZWVWaWV3ZXI7CisJCQkJCQl9CisJCQkJCQlAT3ZlcnJpZGUKKwkJCQkJCXB1YmxpYyB2b2lkIHJlcXVlc3RBY3RpdmF0aW9uKCkgeworCQkJCQkJCXN1cGVyLnJlcXVlc3RBY3RpdmF0aW9uKCk7CisJCQkJCQkJc2V0Q3VycmVudFZpZXdlclBhbmUodGhpcyk7CisJCQkJCQl9CisJCQkJCX07CisJCQkJdmlld2VyUGFuZS5jcmVhdGVDb250cm9sKGdldENvbnRhaW5lcigpKTsKKworCQkJCXNlbGVjdGlvblZpZXdlciA9IChUcmVlVmlld2VyKXZpZXdlclBhbmUuZ2V0Vmlld2VyKCk7CisJCQkJc2VsZWN0aW9uVmlld2VyLnNldENvbnRlbnRQcm92aWRlcihuZXcgQWRhcHRlckZhY3RvcnlDb250ZW50UHJvdmlkZXIoYWRhcHRlckZhY3RvcnkpKTsKKworCQkJCXNlbGVjdGlvblZpZXdlci5zZXRMYWJlbFByb3ZpZGVyKG5ldyBBZGFwdGVyRmFjdG9yeUxhYmVsUHJvdmlkZXIoYWRhcHRlckZhY3RvcnkpKTsKKwkJCQkvL3NlbGVjdGlvblZpZXdlci5zZXRJbnB1dChlZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkpOworCQkJCXNlbGVjdGlvblZpZXdlci5zZXRJbnB1dChlZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkuZ2V0UmVzb3VyY2VzKCkuZ2V0KDApKTsKKwkJCQlzZWxlY3Rpb25WaWV3ZXIuc2V0U2VsZWN0aW9uKG5ldyBTdHJ1Y3R1cmVkU2VsZWN0aW9uKGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKS5nZXRSZXNvdXJjZXMoKS5nZXQoMCkpLCB0cnVlKTsKKwkJCQl2aWV3ZXJQYW5lLnNldFRpdGxlKGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKSk7CisKKwkJCQluZXcgQWRhcHRlckZhY3RvcnlUcmVlRWRpdG9yKHNlbGVjdGlvblZpZXdlci5nZXRUcmVlKCksIGFkYXB0ZXJGYWN0b3J5KTsKKworCQkJCWNyZWF0ZUNvbnRleHRNZW51Rm9yKHNlbGVjdGlvblZpZXdlcik7CisJCQkJaW50IHBhZ2VJbmRleCA9IGFkZFBhZ2Uodmlld2VyUGFuZS5nZXRDb250cm9sKCkpOworCQkJCXNldFBhZ2VUZXh0KHBhZ2VJbmRleCwgZ2V0U3RyaW5nKCJfVUlfU2VsZWN0aW9uUGFnZV9sYWJlbCIpKTsgLy8kTk9OLU5MUy0xJAorCQkJfQorCisJCQkvLyBDcmVhdGUgYSBwYWdlIGZvciB0aGUgcGFyZW50IHRyZWUgdmlldy4KKwkJCS8vCisJCQl7CisJCQkJVmlld2VyUGFuZSB2aWV3ZXJQYW5lID0KKwkJCQkJbmV3IFZpZXdlclBhbmUoZ2V0U2l0ZSgpLmdldFBhZ2UoKSwgU3RhbmRhcmRFZGl0b3IudGhpcykgeworCQkJCQkJQE92ZXJyaWRlCisJCQkJCQlwdWJsaWMgVmlld2VyIGNyZWF0ZVZpZXdlcihDb21wb3NpdGUgY29tcG9zaXRlKSB7CisJCQkJCQkJVHJlZSB0cmVlID0gbmV3IFRyZWUoY29tcG9zaXRlLCBTV1QuTVVMVEkpOworCQkJCQkJCVRyZWVWaWV3ZXIgbmV3VHJlZVZpZXdlciA9IG5ldyBUcmVlVmlld2VyKHRyZWUpOworCQkJCQkJCXJldHVybiBuZXdUcmVlVmlld2VyOworCQkJCQkJfQorCQkJCQkJQE92ZXJyaWRlCisJCQkJCQlwdWJsaWMgdm9pZCByZXF1ZXN0QWN0aXZhdGlvbigpIHsKKwkJCQkJCQlzdXBlci5yZXF1ZXN0QWN0aXZhdGlvbigpOworCQkJCQkJCXNldEN1cnJlbnRWaWV3ZXJQYW5lKHRoaXMpOworCQkJCQkJfQorCQkJCQl9OworCQkJCXZpZXdlclBhbmUuY3JlYXRlQ29udHJvbChnZXRDb250YWluZXIoKSk7CisKKwkJCQlwYXJlbnRWaWV3ZXIgPSAoVHJlZVZpZXdlcil2aWV3ZXJQYW5lLmdldFZpZXdlcigpOworCQkJCXBhcmVudFZpZXdlci5zZXRBdXRvRXhwYW5kTGV2ZWwoMzApOworCQkJCXBhcmVudFZpZXdlci5zZXRDb250ZW50UHJvdmlkZXIobmV3IFJldmVyc2VBZGFwdGVyRmFjdG9yeUNvbnRlbnRQcm92aWRlcihhZGFwdGVyRmFjdG9yeSkpOworCQkJCXBhcmVudFZpZXdlci5zZXRMYWJlbFByb3ZpZGVyKG5ldyBBZGFwdGVyRmFjdG9yeUxhYmVsUHJvdmlkZXIoYWRhcHRlckZhY3RvcnkpKTsKKworCQkJCWNyZWF0ZUNvbnRleHRNZW51Rm9yKHBhcmVudFZpZXdlcik7CisJCQkJaW50IHBhZ2VJbmRleCA9IGFkZFBhZ2Uodmlld2VyUGFuZS5nZXRDb250cm9sKCkpOworCQkJCXNldFBhZ2VUZXh0KHBhZ2VJbmRleCwgZ2V0U3RyaW5nKCJfVUlfUGFyZW50UGFnZV9sYWJlbCIpKTsgLy8kTk9OLU5MUy0xJAorCQkJfQorCisJCQkvLyBUaGlzIGlzIHRoZSBwYWdlIGZvciB0aGUgbGlzdCB2aWV3ZXIKKwkJCS8vCisJCQl7CisJCQkJVmlld2VyUGFuZSB2aWV3ZXJQYW5lID0KKwkJCQkJbmV3IFZpZXdlclBhbmUoZ2V0U2l0ZSgpLmdldFBhZ2UoKSwgU3RhbmRhcmRFZGl0b3IudGhpcykgeworCQkJCQkJQE92ZXJyaWRlCisJCQkJCQlwdWJsaWMgVmlld2VyIGNyZWF0ZVZpZXdlcihDb21wb3NpdGUgY29tcG9zaXRlKSB7CisJCQkJCQkJcmV0dXJuIG5ldyBMaXN0Vmlld2VyKGNvbXBvc2l0ZSk7CisJCQkJCQl9CisJCQkJCQlAT3ZlcnJpZGUKKwkJCQkJCXB1YmxpYyB2b2lkIHJlcXVlc3RBY3RpdmF0aW9uKCkgeworCQkJCQkJCXN1cGVyLnJlcXVlc3RBY3RpdmF0aW9uKCk7CisJCQkJCQkJc2V0Q3VycmVudFZpZXdlclBhbmUodGhpcyk7CisJCQkJCQl9CisJCQkJCX07CisJCQkJdmlld2VyUGFuZS5jcmVhdGVDb250cm9sKGdldENvbnRhaW5lcigpKTsKKwkJCQlsaXN0Vmlld2VyID0gKExpc3RWaWV3ZXIpdmlld2VyUGFuZS5nZXRWaWV3ZXIoKTsKKwkJCQlsaXN0Vmlld2VyLnNldENvbnRlbnRQcm92aWRlcihuZXcgQWRhcHRlckZhY3RvcnlDb250ZW50UHJvdmlkZXIoYWRhcHRlckZhY3RvcnkpKTsKKwkJCQlsaXN0Vmlld2VyLnNldExhYmVsUHJvdmlkZXIobmV3IEFkYXB0ZXJGYWN0b3J5TGFiZWxQcm92aWRlcihhZGFwdGVyRmFjdG9yeSkpOworCisJCQkJY3JlYXRlQ29udGV4dE1lbnVGb3IobGlzdFZpZXdlcik7CisJCQkJaW50IHBhZ2VJbmRleCA9IGFkZFBhZ2Uodmlld2VyUGFuZS5nZXRDb250cm9sKCkpOworCQkJCXNldFBhZ2VUZXh0KHBhZ2VJbmRleCwgZ2V0U3RyaW5nKCJfVUlfTGlzdFBhZ2VfbGFiZWwiKSk7IC8vJE5PTi1OTFMtMSQKKwkJCX0KKworCQkJLy8gVGhpcyBpcyB0aGUgcGFnZSBmb3IgdGhlIHRyZWUgdmlld2VyCisJCQkvLworCQkJeworCQkJCVZpZXdlclBhbmUgdmlld2VyUGFuZSA9CisJCQkJCW5ldyBWaWV3ZXJQYW5lKGdldFNpdGUoKS5nZXRQYWdlKCksIFN0YW5kYXJkRWRpdG9yLnRoaXMpIHsKKwkJCQkJCUBPdmVycmlkZQorCQkJCQkJcHVibGljIFZpZXdlciBjcmVhdGVWaWV3ZXIoQ29tcG9zaXRlIGNvbXBvc2l0ZSkgeworCQkJCQkJCXJldHVybiBuZXcgVHJlZVZpZXdlcihjb21wb3NpdGUpOworCQkJCQkJfQorCQkJCQkJQE92ZXJyaWRlCisJCQkJCQlwdWJsaWMgdm9pZCByZXF1ZXN0QWN0aXZhdGlvbigpIHsKKwkJCQkJCQlzdXBlci5yZXF1ZXN0QWN0aXZhdGlvbigpOworCQkJCQkJCXNldEN1cnJlbnRWaWV3ZXJQYW5lKHRoaXMpOworCQkJCQkJfQorCQkJCQl9OworCQkJCXZpZXdlclBhbmUuY3JlYXRlQ29udHJvbChnZXRDb250YWluZXIoKSk7CisJCQkJdHJlZVZpZXdlciA9IChUcmVlVmlld2VyKXZpZXdlclBhbmUuZ2V0Vmlld2VyKCk7CisJCQkJdHJlZVZpZXdlci5zZXRDb250ZW50UHJvdmlkZXIobmV3IEFkYXB0ZXJGYWN0b3J5Q29udGVudFByb3ZpZGVyKGFkYXB0ZXJGYWN0b3J5KSk7CisJCQkJdHJlZVZpZXdlci5zZXRMYWJlbFByb3ZpZGVyKG5ldyBBZGFwdGVyRmFjdG9yeUxhYmVsUHJvdmlkZXIoYWRhcHRlckZhY3RvcnkpKTsKKworCQkJCW5ldyBBZGFwdGVyRmFjdG9yeVRyZWVFZGl0b3IodHJlZVZpZXdlci5nZXRUcmVlKCksIGFkYXB0ZXJGYWN0b3J5KTsKKworCQkJCWNyZWF0ZUNvbnRleHRNZW51Rm9yKHRyZWVWaWV3ZXIpOworCQkJCWludCBwYWdlSW5kZXggPSBhZGRQYWdlKHZpZXdlclBhbmUuZ2V0Q29udHJvbCgpKTsKKwkJCQlzZXRQYWdlVGV4dChwYWdlSW5kZXgsIGdldFN0cmluZygiX1VJX1RyZWVQYWdlX2xhYmVsIikpOyAvLyROT04tTkxTLTEkCisJCQl9CisKKwkJCS8vIFRoaXMgaXMgdGhlIHBhZ2UgZm9yIHRoZSB0YWJsZSB2aWV3ZXIuCisJCQkvLworCQkJeworCQkJCVZpZXdlclBhbmUgdmlld2VyUGFuZSA9CisJCQkJCW5ldyBWaWV3ZXJQYW5lKGdldFNpdGUoKS5nZXRQYWdlKCksIFN0YW5kYXJkRWRpdG9yLnRoaXMpIHsKKwkJCQkJCUBPdmVycmlkZQorCQkJCQkJcHVibGljIFZpZXdlciBjcmVhdGVWaWV3ZXIoQ29tcG9zaXRlIGNvbXBvc2l0ZSkgeworCQkJCQkJCXJldHVybiBuZXcgVGFibGVWaWV3ZXIoY29tcG9zaXRlKTsKKwkJCQkJCX0KKwkJCQkJCUBPdmVycmlkZQorCQkJCQkJcHVibGljIHZvaWQgcmVxdWVzdEFjdGl2YXRpb24oKSB7CisJCQkJCQkJc3VwZXIucmVxdWVzdEFjdGl2YXRpb24oKTsKKwkJCQkJCQlzZXRDdXJyZW50Vmlld2VyUGFuZSh0aGlzKTsKKwkJCQkJCX0KKwkJCQkJfTsKKwkJCQl2aWV3ZXJQYW5lLmNyZWF0ZUNvbnRyb2woZ2V0Q29udGFpbmVyKCkpOworCQkJCXRhYmxlVmlld2VyID0gKFRhYmxlVmlld2VyKXZpZXdlclBhbmUuZ2V0Vmlld2VyKCk7CisKKwkJCQlUYWJsZSB0YWJsZSA9IHRhYmxlVmlld2VyLmdldFRhYmxlKCk7CisJCQkJVGFibGVMYXlvdXQgbGF5b3V0ID0gbmV3IFRhYmxlTGF5b3V0KCk7CisJCQkJdGFibGUuc2V0TGF5b3V0KGxheW91dCk7CisJCQkJdGFibGUuc2V0SGVhZGVyVmlzaWJsZSh0cnVlKTsKKwkJCQl0YWJsZS5zZXRMaW5lc1Zpc2libGUodHJ1ZSk7CisKKwkJCQlUYWJsZUNvbHVtbiBvYmplY3RDb2x1bW4gPSBuZXcgVGFibGVDb2x1bW4odGFibGUsIFNXVC5OT05FKTsKKwkJCQlsYXlvdXQuYWRkQ29sdW1uRGF0YShuZXcgQ29sdW1uV2VpZ2h0RGF0YSgzLCAxMDAsIHRydWUpKTsKKwkJCQlvYmplY3RDb2x1bW4uc2V0VGV4dChnZXRTdHJpbmcoIl9VSV9PYmplY3RDb2x1bW5fbGFiZWwiKSk7IC8vJE5PTi1OTFMtMSQKKwkJCQlvYmplY3RDb2x1bW4uc2V0UmVzaXphYmxlKHRydWUpOworCisJCQkJVGFibGVDb2x1bW4gc2VsZkNvbHVtbiA9IG5ldyBUYWJsZUNvbHVtbih0YWJsZSwgU1dULk5PTkUpOworCQkJCWxheW91dC5hZGRDb2x1bW5EYXRhKG5ldyBDb2x1bW5XZWlnaHREYXRhKDIsIDEwMCwgdHJ1ZSkpOworCQkJCXNlbGZDb2x1bW4uc2V0VGV4dChnZXRTdHJpbmcoIl9VSV9TZWxmQ29sdW1uX2xhYmVsIikpOyAvLyROT04tTkxTLTEkCisJCQkJc2VsZkNvbHVtbi5zZXRSZXNpemFibGUodHJ1ZSk7CisKKwkJCQl0YWJsZVZpZXdlci5zZXRDb2x1bW5Qcm9wZXJ0aWVzKG5ldyBTdHJpbmcgW10geyJhIiwgImIifSk7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAorCQkJCXRhYmxlVmlld2VyLnNldENvbnRlbnRQcm92aWRlcihuZXcgQWRhcHRlckZhY3RvcnlDb250ZW50UHJvdmlkZXIoYWRhcHRlckZhY3RvcnkpKTsKKwkJCQl0YWJsZVZpZXdlci5zZXRMYWJlbFByb3ZpZGVyKG5ldyBBZGFwdGVyRmFjdG9yeUxhYmVsUHJvdmlkZXIoYWRhcHRlckZhY3RvcnkpKTsKKworCQkJCWNyZWF0ZUNvbnRleHRNZW51Rm9yKHRhYmxlVmlld2VyKTsKKwkJCQlpbnQgcGFnZUluZGV4ID0gYWRkUGFnZSh2aWV3ZXJQYW5lLmdldENvbnRyb2woKSk7CisJCQkJc2V0UGFnZVRleHQocGFnZUluZGV4LCBnZXRTdHJpbmcoIl9VSV9UYWJsZVBhZ2VfbGFiZWwiKSk7IC8vJE5PTi1OTFMtMSQKKwkJCX0KKworCQkJLy8gVGhpcyBpcyB0aGUgcGFnZSBmb3IgdGhlIHRhYmxlIHRyZWUgdmlld2VyLgorCQkJLy8KKwkJCXsKKwkJCQlWaWV3ZXJQYW5lIHZpZXdlclBhbmUgPQorCQkJCQluZXcgVmlld2VyUGFuZShnZXRTaXRlKCkuZ2V0UGFnZSgpLCBTdGFuZGFyZEVkaXRvci50aGlzKSB7CisJCQkJCQlAT3ZlcnJpZGUKKwkJCQkJCXB1YmxpYyBWaWV3ZXIgY3JlYXRlVmlld2VyKENvbXBvc2l0ZSBjb21wb3NpdGUpIHsKKwkJCQkJCQlyZXR1cm4gbmV3IFRyZWVWaWV3ZXIoY29tcG9zaXRlKTsKKwkJCQkJCX0KKwkJCQkJCUBPdmVycmlkZQorCQkJCQkJcHVibGljIHZvaWQgcmVxdWVzdEFjdGl2YXRpb24oKSB7CisJCQkJCQkJc3VwZXIucmVxdWVzdEFjdGl2YXRpb24oKTsKKwkJCQkJCQlzZXRDdXJyZW50Vmlld2VyUGFuZSh0aGlzKTsKKwkJCQkJCX0KKwkJCQkJfTsKKwkJCQl2aWV3ZXJQYW5lLmNyZWF0ZUNvbnRyb2woZ2V0Q29udGFpbmVyKCkpOworCisJCQkJdHJlZVZpZXdlcldpdGhDb2x1bW5zID0gKFRyZWVWaWV3ZXIpdmlld2VyUGFuZS5nZXRWaWV3ZXIoKTsKKworCQkJCVRyZWUgdHJlZSA9IHRyZWVWaWV3ZXJXaXRoQ29sdW1ucy5nZXRUcmVlKCk7CisJCQkJdHJlZS5zZXRMYXlvdXREYXRhKG5ldyBGaWxsTGF5b3V0KCkpOworCQkJCXRyZWUuc2V0SGVhZGVyVmlzaWJsZSh0cnVlKTsKKwkJCQl0cmVlLnNldExpbmVzVmlzaWJsZSh0cnVlKTsKKworCQkJCVRyZWVDb2x1bW4gb2JqZWN0Q29sdW1uID0gbmV3IFRyZWVDb2x1bW4odHJlZSwgU1dULk5PTkUpOworCQkJCW9iamVjdENvbHVtbi5zZXRUZXh0KGdldFN0cmluZygiX1VJX09iamVjdENvbHVtbl9sYWJlbCIpKTsgLy8kTk9OLU5MUy0xJAorCQkJCW9iamVjdENvbHVtbi5zZXRSZXNpemFibGUodHJ1ZSk7CisJCQkJb2JqZWN0Q29sdW1uLnNldFdpZHRoKDI1MCk7CisKKwkJCQlUcmVlQ29sdW1uIHNlbGZDb2x1bW4gPSBuZXcgVHJlZUNvbHVtbih0cmVlLCBTV1QuTk9ORSk7CisJCQkJc2VsZkNvbHVtbi5zZXRUZXh0KGdldFN0cmluZygiX1VJX1NlbGZDb2x1bW5fbGFiZWwiKSk7IC8vJE5PTi1OTFMtMSQKKwkJCQlzZWxmQ29sdW1uLnNldFJlc2l6YWJsZSh0cnVlKTsKKwkJCQlzZWxmQ29sdW1uLnNldFdpZHRoKDIwMCk7CisKKwkJCQl0cmVlVmlld2VyV2l0aENvbHVtbnMuc2V0Q29sdW1uUHJvcGVydGllcyhuZXcgU3RyaW5nIFtdIHsiYSIsICJiIn0pOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKKwkJCQl0cmVlVmlld2VyV2l0aENvbHVtbnMuc2V0Q29udGVudFByb3ZpZGVyKG5ldyBBZGFwdGVyRmFjdG9yeUNvbnRlbnRQcm92aWRlcihhZGFwdGVyRmFjdG9yeSkpOworCQkJCXRyZWVWaWV3ZXJXaXRoQ29sdW1ucy5zZXRMYWJlbFByb3ZpZGVyKG5ldyBBZGFwdGVyRmFjdG9yeUxhYmVsUHJvdmlkZXIoYWRhcHRlckZhY3RvcnkpKTsKKworCQkJCWNyZWF0ZUNvbnRleHRNZW51Rm9yKHRyZWVWaWV3ZXJXaXRoQ29sdW1ucyk7CisJCQkJaW50IHBhZ2VJbmRleCA9IGFkZFBhZ2Uodmlld2VyUGFuZS5nZXRDb250cm9sKCkpOworCQkJCXNldFBhZ2VUZXh0KHBhZ2VJbmRleCwgZ2V0U3RyaW5nKCJfVUlfVHJlZVdpdGhDb2x1bW5zUGFnZV9sYWJlbCIpKTsgLy8kTk9OLU5MUy0xJAorCQkJfQorCisJCQlnZXRTaXRlKCkuZ2V0U2hlbGwoKS5nZXREaXNwbGF5KCkuYXN5bmNFeGVjCisJCQkJKG5ldyBSdW5uYWJsZSgpIHsKKwkJCQkJIHB1YmxpYyB2b2lkIHJ1bigpIHsKKwkJCQkJCSBzZXRBY3RpdmVQYWdlKDApOworCQkJCQkgfQorCQkJCSB9KTsKKwkJfQorCisJCS8vIEVuc3VyZXMgdGhhdCB0aGlzIGVkaXRvciB3aWxsIG9ubHkgZGlzcGxheSB0aGUgcGFnZSdzIHRhYgorCQkvLyBhcmVhIGlmIHRoZXJlIGFyZSBtb3JlIHRoYW4gb25lIHBhZ2UKKwkJLy8KKwkJZ2V0Q29udGFpbmVyKCkuYWRkQ29udHJvbExpc3RlbmVyCisJCQkobmV3IENvbnRyb2xBZGFwdGVyKCkgeworCQkJCWJvb2xlYW4gZ3VhcmQgPSBmYWxzZTsKKwkJCQlAT3ZlcnJpZGUKKwkJCQlwdWJsaWMgdm9pZCBjb250cm9sUmVzaXplZChDb250cm9sRXZlbnQgZXZlbnQpIHsKKwkJCQkJaWYgKCFndWFyZCkgeworCQkJCQkJZ3VhcmQgPSB0cnVlOworCQkJCQkJaGlkZVRhYnMoKTsKKwkJCQkJCWd1YXJkID0gZmFsc2U7CisJCQkJCX0KKwkJCQl9CisJCQkgfSk7CisKKwkJZ2V0U2l0ZSgpLmdldFNoZWxsKCkuZ2V0RGlzcGxheSgpLmFzeW5jRXhlYworCQkJKG5ldyBSdW5uYWJsZSgpIHsKKwkJCQkgcHVibGljIHZvaWQgcnVuKCkgeworCQkJCQkgdXBkYXRlUHJvYmxlbUluZGljYXRpb24oKTsKKwkJCQkgfQorCQkJIH0pOworCX0KKworCS8qKgorCSAqIFRoaXMgaXMgdGhlIG1ldGhvZCB1c2VkIGJ5IHRoZSBmcmFtZXdvcmsgdG8gaW5zdGFsbCB5b3VyIG93biBjb250cm9scy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBjcmVhdGVQYWdlc0dlbigpIHsKKwkJLy8gQ3JlYXRlcyB0aGUgbW9kZWwgZnJvbSB0aGUgZWRpdG9yIGlucHV0CisJCS8vCisJCWNyZWF0ZU1vZGVsKCk7CisKKwkJLy8gT25seSBjcmVhdGVzIHRoZSBvdGhlciBwYWdlcyBpZiB0aGVyZSBpcyBzb21ldGhpbmcgdGhhdCBjYW4gYmUgZWRpdGVkCisJCS8vCisJCWlmICghZ2V0RWRpdGluZ0RvbWFpbigpLmdldFJlc291cmNlU2V0KCkuZ2V0UmVzb3VyY2VzKCkuaXNFbXB0eSgpKSB7CisJCQkvLyBDcmVhdGUgYSBwYWdlIGZvciB0aGUgc2VsZWN0aW9uIHRyZWUgdmlldy4KKwkJCS8vCisJCQl7CisJCQkJVmlld2VyUGFuZSB2aWV3ZXJQYW5lID0KKwkJCQkJbmV3IFZpZXdlclBhbmUoZ2V0U2l0ZSgpLmdldFBhZ2UoKSwgU3RhbmRhcmRFZGl0b3IudGhpcykgeworCQkJCQkJQE92ZXJyaWRlCisJCQkJCQlwdWJsaWMgVmlld2VyIGNyZWF0ZVZpZXdlcihDb21wb3NpdGUgY29tcG9zaXRlKSB7CisJCQkJCQkJVHJlZSB0cmVlID0gbmV3IFRyZWUoY29tcG9zaXRlLCBTV1QuTVVMVEkpOworCQkJCQkJCVRyZWVWaWV3ZXIgbmV3VHJlZVZpZXdlciA9IG5ldyBUcmVlVmlld2VyKHRyZWUpOworCQkJCQkJCXJldHVybiBuZXdUcmVlVmlld2VyOworCQkJCQkJfQorCQkJCQkJQE92ZXJyaWRlCisJCQkJCQlwdWJsaWMgdm9pZCByZXF1ZXN0QWN0aXZhdGlvbigpIHsKKwkJCQkJCQlzdXBlci5yZXF1ZXN0QWN0aXZhdGlvbigpOworCQkJCQkJCXNldEN1cnJlbnRWaWV3ZXJQYW5lKHRoaXMpOworCQkJCQkJfQorCQkJCQl9OworCQkJCXZpZXdlclBhbmUuY3JlYXRlQ29udHJvbChnZXRDb250YWluZXIoKSk7CisKKwkJCQlzZWxlY3Rpb25WaWV3ZXIgPSAoVHJlZVZpZXdlcil2aWV3ZXJQYW5lLmdldFZpZXdlcigpOworCQkJCXNlbGVjdGlvblZpZXdlci5zZXRDb250ZW50UHJvdmlkZXIobmV3IEFkYXB0ZXJGYWN0b3J5Q29udGVudFByb3ZpZGVyKGFkYXB0ZXJGYWN0b3J5KSk7CisKKwkJCQlzZWxlY3Rpb25WaWV3ZXIuc2V0TGFiZWxQcm92aWRlcihuZXcgQWRhcHRlckZhY3RvcnlMYWJlbFByb3ZpZGVyKGFkYXB0ZXJGYWN0b3J5KSk7CisJCQkJc2VsZWN0aW9uVmlld2VyLnNldElucHV0KGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKSk7CisJCQkJc2VsZWN0aW9uVmlld2VyLnNldFNlbGVjdGlvbihuZXcgU3RydWN0dXJlZFNlbGVjdGlvbihlZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkuZ2V0UmVzb3VyY2VzKCkuZ2V0KDApKSwgdHJ1ZSk7CisJCQkJdmlld2VyUGFuZS5zZXRUaXRsZShlZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkpOworCisJCQkJbmV3IEFkYXB0ZXJGYWN0b3J5VHJlZUVkaXRvcihzZWxlY3Rpb25WaWV3ZXIuZ2V0VHJlZSgpLCBhZGFwdGVyRmFjdG9yeSk7CisKKwkJCQljcmVhdGVDb250ZXh0TWVudUZvcihzZWxlY3Rpb25WaWV3ZXIpOworCQkJCWludCBwYWdlSW5kZXggPSBhZGRQYWdlKHZpZXdlclBhbmUuZ2V0Q29udHJvbCgpKTsKKwkJCQlzZXRQYWdlVGV4dChwYWdlSW5kZXgsIGdldFN0cmluZygiX1VJX1NlbGVjdGlvblBhZ2VfbGFiZWwiKSk7IC8vJE5PTi1OTFMtMSQKKwkJCX0KKworCQkJLy8gQ3JlYXRlIGEgcGFnZSBmb3IgdGhlIHBhcmVudCB0cmVlIHZpZXcuCisJCQkvLworCQkJeworCQkJCVZpZXdlclBhbmUgdmlld2VyUGFuZSA9CisJCQkJCW5ldyBWaWV3ZXJQYW5lKGdldFNpdGUoKS5nZXRQYWdlKCksIFN0YW5kYXJkRWRpdG9yLnRoaXMpIHsKKwkJCQkJCUBPdmVycmlkZQorCQkJCQkJcHVibGljIFZpZXdlciBjcmVhdGVWaWV3ZXIoQ29tcG9zaXRlIGNvbXBvc2l0ZSkgeworCQkJCQkJCVRyZWUgdHJlZSA9IG5ldyBUcmVlKGNvbXBvc2l0ZSwgU1dULk1VTFRJKTsKKwkJCQkJCQlUcmVlVmlld2VyIG5ld1RyZWVWaWV3ZXIgPSBuZXcgVHJlZVZpZXdlcih0cmVlKTsKKwkJCQkJCQlyZXR1cm4gbmV3VHJlZVZpZXdlcjsKKwkJCQkJCX0KKwkJCQkJCUBPdmVycmlkZQorCQkJCQkJcHVibGljIHZvaWQgcmVxdWVzdEFjdGl2YXRpb24oKSB7CisJCQkJCQkJc3VwZXIucmVxdWVzdEFjdGl2YXRpb24oKTsKKwkJCQkJCQlzZXRDdXJyZW50Vmlld2VyUGFuZSh0aGlzKTsKKwkJCQkJCX0KKwkJCQkJfTsKKwkJCQl2aWV3ZXJQYW5lLmNyZWF0ZUNvbnRyb2woZ2V0Q29udGFpbmVyKCkpOworCisJCQkJcGFyZW50Vmlld2VyID0gKFRyZWVWaWV3ZXIpdmlld2VyUGFuZS5nZXRWaWV3ZXIoKTsKKwkJCQlwYXJlbnRWaWV3ZXIuc2V0QXV0b0V4cGFuZExldmVsKDMwKTsKKwkJCQlwYXJlbnRWaWV3ZXIuc2V0Q29udGVudFByb3ZpZGVyKG5ldyBSZXZlcnNlQWRhcHRlckZhY3RvcnlDb250ZW50UHJvdmlkZXIoYWRhcHRlckZhY3RvcnkpKTsKKwkJCQlwYXJlbnRWaWV3ZXIuc2V0TGFiZWxQcm92aWRlcihuZXcgQWRhcHRlckZhY3RvcnlMYWJlbFByb3ZpZGVyKGFkYXB0ZXJGYWN0b3J5KSk7CisKKwkJCQljcmVhdGVDb250ZXh0TWVudUZvcihwYXJlbnRWaWV3ZXIpOworCQkJCWludCBwYWdlSW5kZXggPSBhZGRQYWdlKHZpZXdlclBhbmUuZ2V0Q29udHJvbCgpKTsKKwkJCQlzZXRQYWdlVGV4dChwYWdlSW5kZXgsIGdldFN0cmluZygiX1VJX1BhcmVudFBhZ2VfbGFiZWwiKSk7IC8vJE5PTi1OTFMtMSQKKwkJCX0KKworCQkJLy8gVGhpcyBpcyB0aGUgcGFnZSBmb3IgdGhlIGxpc3Qgdmlld2VyCisJCQkvLworCQkJeworCQkJCVZpZXdlclBhbmUgdmlld2VyUGFuZSA9CisJCQkJCW5ldyBWaWV3ZXJQYW5lKGdldFNpdGUoKS5nZXRQYWdlKCksIFN0YW5kYXJkRWRpdG9yLnRoaXMpIHsKKwkJCQkJCUBPdmVycmlkZQorCQkJCQkJcHVibGljIFZpZXdlciBjcmVhdGVWaWV3ZXIoQ29tcG9zaXRlIGNvbXBvc2l0ZSkgeworCQkJCQkJCXJldHVybiBuZXcgTGlzdFZpZXdlcihjb21wb3NpdGUpOworCQkJCQkJfQorCQkJCQkJQE92ZXJyaWRlCisJCQkJCQlwdWJsaWMgdm9pZCByZXF1ZXN0QWN0aXZhdGlvbigpIHsKKwkJCQkJCQlzdXBlci5yZXF1ZXN0QWN0aXZhdGlvbigpOworCQkJCQkJCXNldEN1cnJlbnRWaWV3ZXJQYW5lKHRoaXMpOworCQkJCQkJfQorCQkJCQl9OworCQkJCXZpZXdlclBhbmUuY3JlYXRlQ29udHJvbChnZXRDb250YWluZXIoKSk7CisJCQkJbGlzdFZpZXdlciA9IChMaXN0Vmlld2VyKXZpZXdlclBhbmUuZ2V0Vmlld2VyKCk7CisJCQkJbGlzdFZpZXdlci5zZXRDb250ZW50UHJvdmlkZXIobmV3IEFkYXB0ZXJGYWN0b3J5Q29udGVudFByb3ZpZGVyKGFkYXB0ZXJGYWN0b3J5KSk7CisJCQkJbGlzdFZpZXdlci5zZXRMYWJlbFByb3ZpZGVyKG5ldyBBZGFwdGVyRmFjdG9yeUxhYmVsUHJvdmlkZXIoYWRhcHRlckZhY3RvcnkpKTsKKworCQkJCWNyZWF0ZUNvbnRleHRNZW51Rm9yKGxpc3RWaWV3ZXIpOworCQkJCWludCBwYWdlSW5kZXggPSBhZGRQYWdlKHZpZXdlclBhbmUuZ2V0Q29udHJvbCgpKTsKKwkJCQlzZXRQYWdlVGV4dChwYWdlSW5kZXgsIGdldFN0cmluZygiX1VJX0xpc3RQYWdlX2xhYmVsIikpOyAvLyROT04tTkxTLTEkCisJCQl9CisKKwkJCS8vIFRoaXMgaXMgdGhlIHBhZ2UgZm9yIHRoZSB0cmVlIHZpZXdlcgorCQkJLy8KKwkJCXsKKwkJCQlWaWV3ZXJQYW5lIHZpZXdlclBhbmUgPQorCQkJCQluZXcgVmlld2VyUGFuZShnZXRTaXRlKCkuZ2V0UGFnZSgpLCBTdGFuZGFyZEVkaXRvci50aGlzKSB7CisJCQkJCQlAT3ZlcnJpZGUKKwkJCQkJCXB1YmxpYyBWaWV3ZXIgY3JlYXRlVmlld2VyKENvbXBvc2l0ZSBjb21wb3NpdGUpIHsKKwkJCQkJCQlyZXR1cm4gbmV3IFRyZWVWaWV3ZXIoY29tcG9zaXRlKTsKKwkJCQkJCX0KKwkJCQkJCUBPdmVycmlkZQorCQkJCQkJcHVibGljIHZvaWQgcmVxdWVzdEFjdGl2YXRpb24oKSB7CisJCQkJCQkJc3VwZXIucmVxdWVzdEFjdGl2YXRpb24oKTsKKwkJCQkJCQlzZXRDdXJyZW50Vmlld2VyUGFuZSh0aGlzKTsKKwkJCQkJCX0KKwkJCQkJfTsKKwkJCQl2aWV3ZXJQYW5lLmNyZWF0ZUNvbnRyb2woZ2V0Q29udGFpbmVyKCkpOworCQkJCXRyZWVWaWV3ZXIgPSAoVHJlZVZpZXdlcil2aWV3ZXJQYW5lLmdldFZpZXdlcigpOworCQkJCXRyZWVWaWV3ZXIuc2V0Q29udGVudFByb3ZpZGVyKG5ldyBBZGFwdGVyRmFjdG9yeUNvbnRlbnRQcm92aWRlcihhZGFwdGVyRmFjdG9yeSkpOworCQkJCXRyZWVWaWV3ZXIuc2V0TGFiZWxQcm92aWRlcihuZXcgQWRhcHRlckZhY3RvcnlMYWJlbFByb3ZpZGVyKGFkYXB0ZXJGYWN0b3J5KSk7CisKKwkJCQluZXcgQWRhcHRlckZhY3RvcnlUcmVlRWRpdG9yKHRyZWVWaWV3ZXIuZ2V0VHJlZSgpLCBhZGFwdGVyRmFjdG9yeSk7CisKKwkJCQljcmVhdGVDb250ZXh0TWVudUZvcih0cmVlVmlld2VyKTsKKwkJCQlpbnQgcGFnZUluZGV4ID0gYWRkUGFnZSh2aWV3ZXJQYW5lLmdldENvbnRyb2woKSk7CisJCQkJc2V0UGFnZVRleHQocGFnZUluZGV4LCBnZXRTdHJpbmcoIl9VSV9UcmVlUGFnZV9sYWJlbCIpKTsgLy8kTk9OLU5MUy0xJAorCQkJfQorCisJCQkvLyBUaGlzIGlzIHRoZSBwYWdlIGZvciB0aGUgdGFibGUgdmlld2VyLgorCQkJLy8KKwkJCXsKKwkJCQlWaWV3ZXJQYW5lIHZpZXdlclBhbmUgPQorCQkJCQluZXcgVmlld2VyUGFuZShnZXRTaXRlKCkuZ2V0UGFnZSgpLCBTdGFuZGFyZEVkaXRvci50aGlzKSB7CisJCQkJCQlAT3ZlcnJpZGUKKwkJCQkJCXB1YmxpYyBWaWV3ZXIgY3JlYXRlVmlld2VyKENvbXBvc2l0ZSBjb21wb3NpdGUpIHsKKwkJCQkJCQlyZXR1cm4gbmV3IFRhYmxlVmlld2VyKGNvbXBvc2l0ZSk7CisJCQkJCQl9CisJCQkJCQlAT3ZlcnJpZGUKKwkJCQkJCXB1YmxpYyB2b2lkIHJlcXVlc3RBY3RpdmF0aW9uKCkgeworCQkJCQkJCXN1cGVyLnJlcXVlc3RBY3RpdmF0aW9uKCk7CisJCQkJCQkJc2V0Q3VycmVudFZpZXdlclBhbmUodGhpcyk7CisJCQkJCQl9CisJCQkJCX07CisJCQkJdmlld2VyUGFuZS5jcmVhdGVDb250cm9sKGdldENvbnRhaW5lcigpKTsKKwkJCQl0YWJsZVZpZXdlciA9IChUYWJsZVZpZXdlcil2aWV3ZXJQYW5lLmdldFZpZXdlcigpOworCisJCQkJVGFibGUgdGFibGUgPSB0YWJsZVZpZXdlci5nZXRUYWJsZSgpOworCQkJCVRhYmxlTGF5b3V0IGxheW91dCA9IG5ldyBUYWJsZUxheW91dCgpOworCQkJCXRhYmxlLnNldExheW91dChsYXlvdXQpOworCQkJCXRhYmxlLnNldEhlYWRlclZpc2libGUodHJ1ZSk7CisJCQkJdGFibGUuc2V0TGluZXNWaXNpYmxlKHRydWUpOworCisJCQkJVGFibGVDb2x1bW4gb2JqZWN0Q29sdW1uID0gbmV3IFRhYmxlQ29sdW1uKHRhYmxlLCBTV1QuTk9ORSk7CisJCQkJbGF5b3V0LmFkZENvbHVtbkRhdGEobmV3IENvbHVtbldlaWdodERhdGEoMywgMTAwLCB0cnVlKSk7CisJCQkJb2JqZWN0Q29sdW1uLnNldFRleHQoZ2V0U3RyaW5nKCJfVUlfT2JqZWN0Q29sdW1uX2xhYmVsIikpOyAvLyROT04tTkxTLTEkCisJCQkJb2JqZWN0Q29sdW1uLnNldFJlc2l6YWJsZSh0cnVlKTsKKworCQkJCVRhYmxlQ29sdW1uIHNlbGZDb2x1bW4gPSBuZXcgVGFibGVDb2x1bW4odGFibGUsIFNXVC5OT05FKTsKKwkJCQlsYXlvdXQuYWRkQ29sdW1uRGF0YShuZXcgQ29sdW1uV2VpZ2h0RGF0YSgyLCAxMDAsIHRydWUpKTsKKwkJCQlzZWxmQ29sdW1uLnNldFRleHQoZ2V0U3RyaW5nKCJfVUlfU2VsZkNvbHVtbl9sYWJlbCIpKTsgLy8kTk9OLU5MUy0xJAorCQkJCXNlbGZDb2x1bW4uc2V0UmVzaXphYmxlKHRydWUpOworCisJCQkJdGFibGVWaWV3ZXIuc2V0Q29sdW1uUHJvcGVydGllcyhuZXcgU3RyaW5nIFtdIHsiYSIsICJiIn0pOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKKwkJCQl0YWJsZVZpZXdlci5zZXRDb250ZW50UHJvdmlkZXIobmV3IEFkYXB0ZXJGYWN0b3J5Q29udGVudFByb3ZpZGVyKGFkYXB0ZXJGYWN0b3J5KSk7CisJCQkJdGFibGVWaWV3ZXIuc2V0TGFiZWxQcm92aWRlcihuZXcgQWRhcHRlckZhY3RvcnlMYWJlbFByb3ZpZGVyKGFkYXB0ZXJGYWN0b3J5KSk7CisKKwkJCQljcmVhdGVDb250ZXh0TWVudUZvcih0YWJsZVZpZXdlcik7CisJCQkJaW50IHBhZ2VJbmRleCA9IGFkZFBhZ2Uodmlld2VyUGFuZS5nZXRDb250cm9sKCkpOworCQkJCXNldFBhZ2VUZXh0KHBhZ2VJbmRleCwgZ2V0U3RyaW5nKCJfVUlfVGFibGVQYWdlX2xhYmVsIikpOyAvLyROT04tTkxTLTEkCisJCQl9CisKKwkJCS8vIFRoaXMgaXMgdGhlIHBhZ2UgZm9yIHRoZSB0YWJsZSB0cmVlIHZpZXdlci4KKwkJCS8vCisJCQl7CisJCQkJVmlld2VyUGFuZSB2aWV3ZXJQYW5lID0KKwkJCQkJbmV3IFZpZXdlclBhbmUoZ2V0U2l0ZSgpLmdldFBhZ2UoKSwgU3RhbmRhcmRFZGl0b3IudGhpcykgeworCQkJCQkJQE92ZXJyaWRlCisJCQkJCQlwdWJsaWMgVmlld2VyIGNyZWF0ZVZpZXdlcihDb21wb3NpdGUgY29tcG9zaXRlKSB7CisJCQkJCQkJcmV0dXJuIG5ldyBUcmVlVmlld2VyKGNvbXBvc2l0ZSk7CisJCQkJCQl9CisJCQkJCQlAT3ZlcnJpZGUKKwkJCQkJCXB1YmxpYyB2b2lkIHJlcXVlc3RBY3RpdmF0aW9uKCkgeworCQkJCQkJCXN1cGVyLnJlcXVlc3RBY3RpdmF0aW9uKCk7CisJCQkJCQkJc2V0Q3VycmVudFZpZXdlclBhbmUodGhpcyk7CisJCQkJCQl9CisJCQkJCX07CisJCQkJdmlld2VyUGFuZS5jcmVhdGVDb250cm9sKGdldENvbnRhaW5lcigpKTsKKworCQkJCXRyZWVWaWV3ZXJXaXRoQ29sdW1ucyA9IChUcmVlVmlld2VyKXZpZXdlclBhbmUuZ2V0Vmlld2VyKCk7CisKKwkJCQlUcmVlIHRyZWUgPSB0cmVlVmlld2VyV2l0aENvbHVtbnMuZ2V0VHJlZSgpOworCQkJCXRyZWUuc2V0TGF5b3V0RGF0YShuZXcgRmlsbExheW91dCgpKTsKKwkJCQl0cmVlLnNldEhlYWRlclZpc2libGUodHJ1ZSk7CisJCQkJdHJlZS5zZXRMaW5lc1Zpc2libGUodHJ1ZSk7CisKKwkJCQlUcmVlQ29sdW1uIG9iamVjdENvbHVtbiA9IG5ldyBUcmVlQ29sdW1uKHRyZWUsIFNXVC5OT05FKTsKKwkJCQlvYmplY3RDb2x1bW4uc2V0VGV4dChnZXRTdHJpbmcoIl9VSV9PYmplY3RDb2x1bW5fbGFiZWwiKSk7IC8vJE5PTi1OTFMtMSQKKwkJCQlvYmplY3RDb2x1bW4uc2V0UmVzaXphYmxlKHRydWUpOworCQkJCW9iamVjdENvbHVtbi5zZXRXaWR0aCgyNTApOworCisJCQkJVHJlZUNvbHVtbiBzZWxmQ29sdW1uID0gbmV3IFRyZWVDb2x1bW4odHJlZSwgU1dULk5PTkUpOworCQkJCXNlbGZDb2x1bW4uc2V0VGV4dChnZXRTdHJpbmcoIl9VSV9TZWxmQ29sdW1uX2xhYmVsIikpOyAvLyROT04tTkxTLTEkCisJCQkJc2VsZkNvbHVtbi5zZXRSZXNpemFibGUodHJ1ZSk7CisJCQkJc2VsZkNvbHVtbi5zZXRXaWR0aCgyMDApOworCisJCQkJdHJlZVZpZXdlcldpdGhDb2x1bW5zLnNldENvbHVtblByb3BlcnRpZXMobmV3IFN0cmluZyBbXSB7ImEiLCAiYiJ9KTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCisJCQkJdHJlZVZpZXdlcldpdGhDb2x1bW5zLnNldENvbnRlbnRQcm92aWRlcihuZXcgQWRhcHRlckZhY3RvcnlDb250ZW50UHJvdmlkZXIoYWRhcHRlckZhY3RvcnkpKTsKKwkJCQl0cmVlVmlld2VyV2l0aENvbHVtbnMuc2V0TGFiZWxQcm92aWRlcihuZXcgQWRhcHRlckZhY3RvcnlMYWJlbFByb3ZpZGVyKGFkYXB0ZXJGYWN0b3J5KSk7CisKKwkJCQljcmVhdGVDb250ZXh0TWVudUZvcih0cmVlVmlld2VyV2l0aENvbHVtbnMpOworCQkJCWludCBwYWdlSW5kZXggPSBhZGRQYWdlKHZpZXdlclBhbmUuZ2V0Q29udHJvbCgpKTsKKwkJCQlzZXRQYWdlVGV4dChwYWdlSW5kZXgsIGdldFN0cmluZygiX1VJX1RyZWVXaXRoQ29sdW1uc1BhZ2VfbGFiZWwiKSk7IC8vJE5PTi1OTFMtMSQKKwkJCX0KKworCQkJZ2V0U2l0ZSgpLmdldFNoZWxsKCkuZ2V0RGlzcGxheSgpLmFzeW5jRXhlYworCQkJCShuZXcgUnVubmFibGUoKSB7CisJCQkJCSBwdWJsaWMgdm9pZCBydW4oKSB7CisJCQkJCQkgc2V0QWN0aXZlUGFnZSgwKTsKKwkJCQkJIH0KKwkJCQkgfSk7CisJCX0KKworCQkvLyBFbnN1cmVzIHRoYXQgdGhpcyBlZGl0b3Igd2lsbCBvbmx5IGRpc3BsYXkgdGhlIHBhZ2UncyB0YWIKKwkJLy8gYXJlYSBpZiB0aGVyZSBhcmUgbW9yZSB0aGFuIG9uZSBwYWdlCisJCS8vCisJCWdldENvbnRhaW5lcigpLmFkZENvbnRyb2xMaXN0ZW5lcgorCQkJKG5ldyBDb250cm9sQWRhcHRlcigpIHsKKwkJCQlib29sZWFuIGd1YXJkID0gZmFsc2U7CisJCQkJQE92ZXJyaWRlCisJCQkJcHVibGljIHZvaWQgY29udHJvbFJlc2l6ZWQoQ29udHJvbEV2ZW50IGV2ZW50KSB7CisJCQkJCWlmICghZ3VhcmQpIHsKKwkJCQkJCWd1YXJkID0gdHJ1ZTsKKwkJCQkJCWhpZGVUYWJzKCk7CisJCQkJCQlndWFyZCA9IGZhbHNlOworCQkJCQl9CisJCQkJfQorCQkJIH0pOworCisJCWdldFNpdGUoKS5nZXRTaGVsbCgpLmdldERpc3BsYXkoKS5hc3luY0V4ZWMKKwkJCShuZXcgUnVubmFibGUoKSB7CisJCQkJIHB1YmxpYyB2b2lkIHJ1bigpIHsKKwkJCQkJIHVwZGF0ZVByb2JsZW1JbmRpY2F0aW9uKCk7CisJCQkJIH0KKwkJCSB9KTsKKwl9CisJCisJLyoqCisJICogSWYgdGhlcmUgaXMganVzdCBvbmUgcGFnZSBpbiB0aGUgbXVsdGktcGFnZSBlZGl0b3IgcGFydCwKKwkgKiB0aGlzIGhpZGVzIHRoZSBzaW5nbGUgdGFiIGF0IHRoZSBib3R0b20uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgaGlkZVRhYnMoKSB7CisJCWlmIChnZXRQYWdlQ291bnQoKSA8PSAxKSB7CisJCQlzZXRQYWdlVGV4dCgwLCAiIik7IC8vJE5PTi1OTFMtMSQKKwkJCWlmIChnZXRDb250YWluZXIoKSBpbnN0YW5jZW9mIENUYWJGb2xkZXIpIHsKKwkJCQkoKENUYWJGb2xkZXIpZ2V0Q29udGFpbmVyKCkpLnNldFRhYkhlaWdodCgxKTsKKwkJCQlQb2ludCBwb2ludCA9IGdldENvbnRhaW5lcigpLmdldFNpemUoKTsKKwkJCQlnZXRDb250YWluZXIoKS5zZXRTaXplKHBvaW50LngsIHBvaW50LnkgKyA2KTsKKwkJCX0KKwkJfQorCX0KKworCS8qKgorCSAqIElmIHRoZXJlIGlzIG1vcmUgdGhhbiBvbmUgcGFnZSBpbiB0aGUgbXVsdGktcGFnZSBlZGl0b3IgcGFydCwKKwkgKiB0aGlzIHNob3dzIHRoZSB0YWJzIGF0IHRoZSBib3R0b20uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgc2hvd1RhYnMoKSB7CisJCWlmIChnZXRQYWdlQ291bnQoKSA+IDEpIHsKKwkJCXNldFBhZ2VUZXh0KDAsIGdldFN0cmluZygiX1VJX1NlbGVjdGlvblBhZ2VfbGFiZWwiKSk7IC8vJE5PTi1OTFMtMSQKKwkJCWlmIChnZXRDb250YWluZXIoKSBpbnN0YW5jZW9mIENUYWJGb2xkZXIpIHsKKwkJCQkoKENUYWJGb2xkZXIpZ2V0Q29udGFpbmVyKCkpLnNldFRhYkhlaWdodChTV1QuREVGQVVMVCk7CisJCQkJUG9pbnQgcG9pbnQgPSBnZXRDb250YWluZXIoKS5nZXRTaXplKCk7CisJCQkJZ2V0Q29udGFpbmVyKCkuc2V0U2l6ZShwb2ludC54LCBwb2ludC55IC0gNik7CisJCQl9CisJCX0KKwl9CisKKwkvKioKKwkgKiBUaGlzIGlzIHVzZWQgdG8gdHJhY2sgdGhlIGFjdGl2ZSB2aWV3ZXIuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgcGFnZUNoYW5nZShpbnQgcGFnZUluZGV4KSB7CisJCXN1cGVyLnBhZ2VDaGFuZ2UocGFnZUluZGV4KTsKKworCQlpZiAoY29udGVudE91dGxpbmVQYWdlICE9IG51bGwpIHsKKwkJCWhhbmRsZUNvbnRlbnRPdXRsaW5lU2VsZWN0aW9uKGNvbnRlbnRPdXRsaW5lUGFnZS5nZXRTZWxlY3Rpb24oKSk7CisJCX0KKwl9CisKKwkvKioKKwkgKiBUaGlzIGlzIGhvdyB0aGUgZnJhbWV3b3JrIGRldGVybWluZXMgd2hpY2ggaW50ZXJmYWNlcyB3ZSBpbXBsZW1lbnQuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQFN1cHByZXNzV2FybmluZ3MoInVuY2hlY2tlZCIpCisJCUBPdmVycmlkZQorCXB1YmxpYyBPYmplY3QgZ2V0QWRhcHRlcihDbGFzcyBrZXkpIHsKKwkJaWYgKGtleS5lcXVhbHMoSUNvbnRlbnRPdXRsaW5lUGFnZS5jbGFzcykpIHsKKwkJCXJldHVybiBzaG93T3V0bGluZVZpZXcoKSA/IGdldENvbnRlbnRPdXRsaW5lUGFnZSgpIDogbnVsbDsKKwkJfQorCQllbHNlIGlmIChrZXkuZXF1YWxzKElQcm9wZXJ0eVNoZWV0UGFnZS5jbGFzcykpIHsKKwkJCXJldHVybiBnZXRQcm9wZXJ0eVNoZWV0UGFnZSgpOworCQl9CisJCWVsc2UgeworCQkJcmV0dXJuIHN1cGVyLmdldEFkYXB0ZXIoa2V5KTsKKwkJfQorCX0KKworCS8qKgorCSAqIFRoaXMgYWNjZXNzZXMgYSBjYWNoZWQgdmVyc2lvbiBvZiB0aGUgY29udGVudCBvdXRsaW5lci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgSUNvbnRlbnRPdXRsaW5lUGFnZSBnZXRDb250ZW50T3V0bGluZVBhZ2UoKSB7CisJCWlmIChjb250ZW50T3V0bGluZVBhZ2UgPT0gbnVsbCkgeworCQkJLy8gVGhlIGNvbnRlbnQgb3V0bGluZSBpcyBqdXN0IGEgdHJlZS4KKwkJCS8vCisJCQljbGFzcyBNeUNvbnRlbnRPdXRsaW5lUGFnZSBleHRlbmRzIENvbnRlbnRPdXRsaW5lUGFnZSB7CisJCQkJQE92ZXJyaWRlCisJCQkJcHVibGljIHZvaWQgY3JlYXRlQ29udHJvbChDb21wb3NpdGUgcGFyZW50KSB7CisJCQkJCXN1cGVyLmNyZWF0ZUNvbnRyb2wocGFyZW50KTsKKwkJCQkJY29udGVudE91dGxpbmVWaWV3ZXIgPSBnZXRUcmVlVmlld2VyKCk7CisJCQkJCWNvbnRlbnRPdXRsaW5lVmlld2VyLmFkZFNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcih0aGlzKTsKKworCQkJCQkvLyBTZXQgdXAgdGhlIHRyZWUgdmlld2VyLgorCQkJCQkvLworCQkJCQljb250ZW50T3V0bGluZVZpZXdlci5zZXRDb250ZW50UHJvdmlkZXIobmV3IEFkYXB0ZXJGYWN0b3J5Q29udGVudFByb3ZpZGVyKGFkYXB0ZXJGYWN0b3J5KSk7CisJCQkJCWNvbnRlbnRPdXRsaW5lVmlld2VyLnNldExhYmVsUHJvdmlkZXIobmV3IEFkYXB0ZXJGYWN0b3J5TGFiZWxQcm92aWRlcihhZGFwdGVyRmFjdG9yeSkpOworCQkJCQljb250ZW50T3V0bGluZVZpZXdlci5zZXRJbnB1dChlZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkpOworCisJCQkJCS8vIE1ha2Ugc3VyZSBvdXIgcG9wdXBzIHdvcmsuCisJCQkJCS8vCisJCQkJCWNyZWF0ZUNvbnRleHRNZW51Rm9yKGNvbnRlbnRPdXRsaW5lVmlld2VyKTsKKworCQkJCQlpZiAoIWVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKS5nZXRSZXNvdXJjZXMoKS5pc0VtcHR5KCkpIHsKKwkJCQkJICAvLyBTZWxlY3QgdGhlIHJvb3Qgb2JqZWN0IGluIHRoZSB2aWV3LgorCQkJCQkgIC8vCisJCQkJCSAgY29udGVudE91dGxpbmVWaWV3ZXIuc2V0U2VsZWN0aW9uKG5ldyBTdHJ1Y3R1cmVkU2VsZWN0aW9uKGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKS5nZXRSZXNvdXJjZXMoKS5nZXQoMCkpLCB0cnVlKTsKKwkJCQkJfQorCQkJCX0KKworCQkJCUBPdmVycmlkZQorCQkJCXB1YmxpYyB2b2lkIG1ha2VDb250cmlidXRpb25zKElNZW51TWFuYWdlciBtZW51TWFuYWdlciwgSVRvb2xCYXJNYW5hZ2VyIHRvb2xCYXJNYW5hZ2VyLCBJU3RhdHVzTGluZU1hbmFnZXIgc3RhdHVzTGluZU1hbmFnZXIpIHsKKwkJCQkJc3VwZXIubWFrZUNvbnRyaWJ1dGlvbnMobWVudU1hbmFnZXIsIHRvb2xCYXJNYW5hZ2VyLCBzdGF0dXNMaW5lTWFuYWdlcik7CisJCQkJCWNvbnRlbnRPdXRsaW5lU3RhdHVzTGluZU1hbmFnZXIgPSBzdGF0dXNMaW5lTWFuYWdlcjsKKwkJCQl9CisKKwkJCQlAT3ZlcnJpZGUKKwkJCQlwdWJsaWMgdm9pZCBzZXRBY3Rpb25CYXJzKElBY3Rpb25CYXJzIGFjdGlvbkJhcnMpIHsKKwkJCQkJc3VwZXIuc2V0QWN0aW9uQmFycyhhY3Rpb25CYXJzKTsKKwkJCQkJZ2V0QWN0aW9uQmFyQ29udHJpYnV0b3IoKS5zaGFyZUdsb2JhbEFjdGlvbnModGhpcywgYWN0aW9uQmFycyk7CisJCQkJfQorCQkJfQorCisJCQljb250ZW50T3V0bGluZVBhZ2UgPSBuZXcgTXlDb250ZW50T3V0bGluZVBhZ2UoKTsKKworCQkJLy8gTGlzdGVuIHRvIHNlbGVjdGlvbiBzbyB0aGF0IHdlIGNhbiBoYW5kbGUgaXQgaXMgYSBzcGVjaWFsIHdheS4KKwkJCS8vCisJCQljb250ZW50T3V0bGluZVBhZ2UuYWRkU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyCisJCQkJKG5ldyBJU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyKCkgeworCQkJCQkgLy8gVGhpcyBlbnN1cmVzIHRoYXQgd2UgaGFuZGxlIHNlbGVjdGlvbnMgY29ycmVjdGx5LgorCQkJCQkgLy8KKwkJCQkJIHB1YmxpYyB2b2lkIHNlbGVjdGlvbkNoYW5nZWQoU2VsZWN0aW9uQ2hhbmdlZEV2ZW50IGV2ZW50KSB7CisJCQkJCQkgaGFuZGxlQ29udGVudE91dGxpbmVTZWxlY3Rpb24oZXZlbnQuZ2V0U2VsZWN0aW9uKCkpOworCQkJCQkgfQorCQkJCSB9KTsKKwkJfQorCisJCXJldHVybiBjb250ZW50T3V0bGluZVBhZ2U7CisJfQorCisJLyoqCisJICogVGhpcyBhY2Nlc3NlcyBhIGNhY2hlZCB2ZXJzaW9uIG9mIHRoZSBwcm9wZXJ0eSBzaGVldC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgSVByb3BlcnR5U2hlZXRQYWdlIGdldFByb3BlcnR5U2hlZXRQYWdlKCkgeworCQlpZiAocHJvcGVydHlTaGVldFBhZ2UgPT0gbnVsbCkgeworCQkJcHJvcGVydHlTaGVldFBhZ2UgPQorCQkJCW5ldyBFeHRlbmRlZFByb3BlcnR5U2hlZXRQYWdlKGVkaXRpbmdEb21haW4pIHsKKwkJCQkJQE92ZXJyaWRlCisJCQkJCXB1YmxpYyB2b2lkIHNldFNlbGVjdGlvblRvVmlld2VyKExpc3Q8Pz4gc2VsZWN0aW9uKSB7CisJCQkJCQlTdGFuZGFyZEVkaXRvci50aGlzLnNldFNlbGVjdGlvblRvVmlld2VyKHNlbGVjdGlvbik7CisJCQkJCQlTdGFuZGFyZEVkaXRvci50aGlzLnNldEZvY3VzKCk7CisJCQkJCX0KKworCQkJCQlAT3ZlcnJpZGUKKwkJCQkJcHVibGljIHZvaWQgc2V0QWN0aW9uQmFycyhJQWN0aW9uQmFycyBhY3Rpb25CYXJzKSB7CisJCQkJCQlzdXBlci5zZXRBY3Rpb25CYXJzKGFjdGlvbkJhcnMpOworCQkJCQkJZ2V0QWN0aW9uQmFyQ29udHJpYnV0b3IoKS5zaGFyZUdsb2JhbEFjdGlvbnModGhpcywgYWN0aW9uQmFycyk7CisJCQkJCX0KKwkJCQl9OworCQkJcHJvcGVydHlTaGVldFBhZ2Uuc2V0UHJvcGVydHlTb3VyY2VQcm92aWRlcihuZXcgQWRhcHRlckZhY3RvcnlDb250ZW50UHJvdmlkZXIoYWRhcHRlckZhY3RvcnkpKTsKKwkJfQorCisJCXJldHVybiBwcm9wZXJ0eVNoZWV0UGFnZTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGRlYWxzIHdpdGggaG93IHdlIHdhbnQgc2VsZWN0aW9uIGluIHRoZSBvdXRsaW5lciB0byBhZmZlY3QgdGhlIG90aGVyIHZpZXdzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIGhhbmRsZUNvbnRlbnRPdXRsaW5lU2VsZWN0aW9uKElTZWxlY3Rpb24gc2VsZWN0aW9uKSB7CisJCWlmIChjdXJyZW50Vmlld2VyUGFuZSAhPSBudWxsICYmICFzZWxlY3Rpb24uaXNFbXB0eSgpICYmIHNlbGVjdGlvbiBpbnN0YW5jZW9mIElTdHJ1Y3R1cmVkU2VsZWN0aW9uKSB7CisJCQlJdGVyYXRvcjw/PiBzZWxlY3RlZEVsZW1lbnRzID0gKChJU3RydWN0dXJlZFNlbGVjdGlvbilzZWxlY3Rpb24pLml0ZXJhdG9yKCk7CisJCQlpZiAoc2VsZWN0ZWRFbGVtZW50cy5oYXNOZXh0KCkpIHsKKwkJCQkvLyBHZXQgdGhlIGZpcnN0IHNlbGVjdGVkIGVsZW1lbnQuCisJCQkJLy8KKwkJCQlPYmplY3Qgc2VsZWN0ZWRFbGVtZW50ID0gc2VsZWN0ZWRFbGVtZW50cy5uZXh0KCk7CisKKwkJCQkvLyBJZiBpdCdzIHRoZSBzZWxlY3Rpb24gdmlld2VyLCB0aGVuIHdlIHdhbnQgaXQgdG8gc2VsZWN0IHRoZSBzYW1lIHNlbGVjdGlvbiBhcyB0aGlzIHNlbGVjdGlvbi4KKwkJCQkvLworCQkJCWlmIChjdXJyZW50Vmlld2VyUGFuZS5nZXRWaWV3ZXIoKSA9PSBzZWxlY3Rpb25WaWV3ZXIpIHsKKwkJCQkJQXJyYXlMaXN0PE9iamVjdD4gc2VsZWN0aW9uTGlzdCA9IG5ldyBBcnJheUxpc3Q8T2JqZWN0PigpOworCQkJCQlzZWxlY3Rpb25MaXN0LmFkZChzZWxlY3RlZEVsZW1lbnQpOworCQkJCQl3aGlsZSAoc2VsZWN0ZWRFbGVtZW50cy5oYXNOZXh0KCkpIHsKKwkJCQkJCXNlbGVjdGlvbkxpc3QuYWRkKHNlbGVjdGVkRWxlbWVudHMubmV4dCgpKTsKKwkJCQkJfQorCisJCQkJCS8vIFNldCB0aGUgc2VsZWN0aW9uIHRvIHRoZSB3aWRnZXQuCisJCQkJCS8vCisJCQkJCXNlbGVjdGlvblZpZXdlci5zZXRTZWxlY3Rpb24obmV3IFN0cnVjdHVyZWRTZWxlY3Rpb24oc2VsZWN0aW9uTGlzdCkpOworCQkJCX0KKwkJCQllbHNlIHsKKwkJCQkJLy8gU2V0IHRoZSBpbnB1dCB0byB0aGUgd2lkZ2V0LgorCQkJCQkvLworCQkJCQlpZiAoY3VycmVudFZpZXdlclBhbmUuZ2V0Vmlld2VyKCkuZ2V0SW5wdXQoKSAhPSBzZWxlY3RlZEVsZW1lbnQpIHsKKwkJCQkJCWN1cnJlbnRWaWV3ZXJQYW5lLmdldFZpZXdlcigpLnNldElucHV0KHNlbGVjdGVkRWxlbWVudCk7CisJCQkJCQljdXJyZW50Vmlld2VyUGFuZS5zZXRUaXRsZShzZWxlY3RlZEVsZW1lbnQpOworCQkJCQl9CisJCQkJfQorCQkJfQorCQl9CisJfQorCisJLyoqCisJICogVGhpcyBpcyBmb3IgaW1wbGVtZW50aW5nIHtAbGluayBJRWRpdG9yUGFydH0gYW5kIHNpbXBseSB0ZXN0cyB0aGUgY29tbWFuZCBzdGFjay4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgYm9vbGVhbiBpc0RpcnR5KCkgeworCQlyZXR1cm4gKChCYXNpY0NvbW1hbmRTdGFjayllZGl0aW5nRG9tYWluLmdldENvbW1hbmRTdGFjaygpKS5pc1NhdmVOZWVkZWQoKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGlzIGZvciBpbXBsZW1lbnRpbmcge0BsaW5rIElFZGl0b3JQYXJ0fSBhbmQgc2ltcGx5IHNhdmVzIHRoZSBtb2RlbCBmaWxlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGRvU2F2ZShJUHJvZ3Jlc3NNb25pdG9yIHByb2dyZXNzTW9uaXRvcikgeworCQkvLyBTYXZlIG9ubHkgcmVzb3VyY2VzIHRoYXQgaGF2ZSBhY3R1YWxseSBjaGFuZ2VkLgorCQkvLworCQlmaW5hbCBNYXA8T2JqZWN0LCBPYmplY3Q+IHNhdmVPcHRpb25zID0gbmV3IEhhc2hNYXA8T2JqZWN0LCBPYmplY3Q+KCk7CisJCXNhdmVPcHRpb25zLnB1dChSZXNvdXJjZS5PUFRJT05fU0FWRV9PTkxZX0lGX0NIQU5HRUQsIFJlc291cmNlLk9QVElPTl9TQVZFX09OTFlfSUZfQ0hBTkdFRF9NRU1PUllfQlVGRkVSKTsKKworCQkvLyBEbyB0aGUgd29yayB3aXRoaW4gYW4gb3BlcmF0aW9uIGJlY2F1c2UgdGhpcyBpcyBhIGxvbmcgcnVubmluZyBhY3Rpdml0eSB0aGF0IG1vZGlmaWVzIHRoZSB3b3JrYmVuY2guCisJCS8vCisJCUlSdW5uYWJsZVdpdGhQcm9ncmVzcyBvcGVyYXRpb24gPQorCQkJbmV3IElSdW5uYWJsZVdpdGhQcm9ncmVzcygpIHsKKwkJCQkvLyBUaGlzIGlzIHRoZSBtZXRob2QgdGhhdCBnZXRzIGludm9rZWQgd2hlbiB0aGUgb3BlcmF0aW9uIHJ1bnMuCisJCQkJLy8KKwkJCQlwdWJsaWMgdm9pZCBydW4oSVByb2dyZXNzTW9uaXRvciBtb25pdG9yKSB7CisJCQkJCS8vIFNhdmUgdGhlIHJlc291cmNlcyB0byB0aGUgZmlsZSBzeXN0ZW0uCisJCQkJCS8vCisJCQkJCWJvb2xlYW4gZmlyc3QgPSB0cnVlOworCQkJCQlmb3IgKFJlc291cmNlIHJlc291cmNlIDogZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpLmdldFJlc291cmNlcygpKSB7CisJCQkJCQlpZiAoKGZpcnN0IHx8ICFyZXNvdXJjZS5nZXRDb250ZW50cygpLmlzRW1wdHkoKSB8fCBpc1BlcnNpc3RlZChyZXNvdXJjZSkpICYmICFlZGl0aW5nRG9tYWluLmlzUmVhZE9ubHkocmVzb3VyY2UpKSB7CisJCQkJCQkJdHJ5IHsKKwkJCQkJCQkJbG9uZyB0aW1lU3RhbXAgPSByZXNvdXJjZS5nZXRUaW1lU3RhbXAoKTsKKwkJCQkJCQkJcmVzb3VyY2Uuc2F2ZShzYXZlT3B0aW9ucyk7CisJCQkJCQkJCWlmIChyZXNvdXJjZS5nZXRUaW1lU3RhbXAoKSAhPSB0aW1lU3RhbXApIHsKKwkJCQkJCQkJCXNhdmVkUmVzb3VyY2VzLmFkZChyZXNvdXJjZSk7CisJCQkJCQkJCX0KKwkJCQkJCQl9CisJCQkJCQkJY2F0Y2ggKEV4Y2VwdGlvbiBleGNlcHRpb24pIHsKKwkJCQkJCQkJcmVzb3VyY2VUb0RpYWdub3N0aWNNYXAucHV0KHJlc291cmNlLCBhbmFseXplUmVzb3VyY2VQcm9ibGVtcyhyZXNvdXJjZSwgZXhjZXB0aW9uKSk7CisJCQkJCQkJfQorCQkJCQkJCWZpcnN0ID0gZmFsc2U7CisJCQkJCQl9CisJCQkJCX0KKwkJCQl9CisJCQl9OworCisJCXVwZGF0ZVByb2JsZW1JbmRpY2F0aW9uID0gZmFsc2U7CisJCXRyeSB7CisJCQkvLyBUaGlzIHJ1bnMgdGhlIG9wdGlvbnMsIGFuZCBzaG93cyBwcm9ncmVzcy4KKwkJCS8vCisJCQluZXcgUHJvZ3Jlc3NNb25pdG9yRGlhbG9nKGdldFNpdGUoKS5nZXRTaGVsbCgpKS5ydW4odHJ1ZSwgZmFsc2UsIG9wZXJhdGlvbik7CisKKwkJCS8vIFJlZnJlc2ggdGhlIG5lY2Vzc2FyeSBzdGF0ZS4KKwkJCS8vCisJCQkoKEJhc2ljQ29tbWFuZFN0YWNrKWVkaXRpbmdEb21haW4uZ2V0Q29tbWFuZFN0YWNrKCkpLnNhdmVJc0RvbmUoKTsKKwkJCWZpcmVQcm9wZXJ0eUNoYW5nZShJRWRpdG9yUGFydC5QUk9QX0RJUlRZKTsKKwkJfQorCQljYXRjaCAoRXhjZXB0aW9uIGV4Y2VwdGlvbikgeworCQkJLy8gU29tZXRoaW5nIHdlbnQgd3JvbmcgdGhhdCBzaG91bGRuJ3QuCisJCQkvLworCQkJRGlzZWFzZW1vZGVsc0VkaXRvclBsdWdpbi5JTlNUQU5DRS5sb2coZXhjZXB0aW9uKTsKKwkJfQorCQl1cGRhdGVQcm9ibGVtSW5kaWNhdGlvbiA9IHRydWU7CisJCXVwZGF0ZVByb2JsZW1JbmRpY2F0aW9uKCk7CisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIHdoZXRoZXIgc29tZXRoaW5nIGhhcyBiZWVuIHBlcnNpc3RlZCB0byB0aGUgVVJJIG9mIHRoZSBzcGVjaWZpZWQgcmVzb3VyY2UuCisJICogVGhlIGltcGxlbWVudGF0aW9uIHVzZXMgdGhlIFVSSSBjb252ZXJ0ZXIgZnJvbSB0aGUgZWRpdG9yJ3MgcmVzb3VyY2Ugc2V0IHRvIHRyeSB0byBvcGVuIGFuIGlucHV0IHN0cmVhbS4gCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIGJvb2xlYW4gaXNQZXJzaXN0ZWQoUmVzb3VyY2UgcmVzb3VyY2UpIHsKKwkJYm9vbGVhbiByZXN1bHQgPSBmYWxzZTsKKwkJdHJ5IHsKKwkJCUlucHV0U3RyZWFtIHN0cmVhbSA9IGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKS5nZXRVUklDb252ZXJ0ZXIoKS5jcmVhdGVJbnB1dFN0cmVhbShyZXNvdXJjZS5nZXRVUkkoKSk7CisJCQlpZiAoc3RyZWFtICE9IG51bGwpIHsKKwkJCQlyZXN1bHQgPSB0cnVlOworCQkJCXN0cmVhbS5jbG9zZSgpOworCQkJfQorCQl9CisJCWNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7CisJCQkvLyBJZ25vcmUKKwkJfQorCQlyZXR1cm4gcmVzdWx0OworCX0KKworCS8qKgorCSAqIFRoaXMgYWx3YXlzIHJldHVybnMgdHJ1ZSBiZWNhdXNlIGl0IGlzIG5vdCBjdXJyZW50bHkgc3VwcG9ydGVkLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBib29sZWFuIGlzU2F2ZUFzQWxsb3dlZCgpIHsKKwkJcmV0dXJuIHRydWU7CisJfQorCisJLyoqCisJICogVGhpcyBhbHNvIGNoYW5nZXMgdGhlIGVkaXRvcidzIGlucHV0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGRvU2F2ZUFzKCkgeworCQlTdHJpbmdbXSBmaWx0ZXJzID0gRklMRV9FWFRFTlNJT05fRklMVEVSUy50b0FycmF5KG5ldyBTdHJpbmdbRklMRV9FWFRFTlNJT05fRklMVEVSUy5zaXplKCldKTsKKwkJU3RyaW5nW10gZmlsZXMgPSBEaXNlYXNlbW9kZWxzRWRpdG9yQWR2aXNvci5vcGVuRmlsZVBhdGhEaWFsb2coZ2V0U2l0ZSgpLmdldFNoZWxsKCksIFNXVC5TQVZFLCBmaWx0ZXJzKTsKKwkJaWYgKGZpbGVzLmxlbmd0aCA+IDApIHsKKwkJCVVSSSB1cmkgPSBVUkkuY3JlYXRlRmlsZVVSSShmaWxlc1swXSk7CisJCQlkb1NhdmVBcyh1cmksIG5ldyBVUklFZGl0b3JJbnB1dCh1cmkpKTsKKwkJfQorCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIGRvU2F2ZUFzKFVSSSB1cmksIElFZGl0b3JJbnB1dCBlZGl0b3JJbnB1dCkgeworCQkoZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpLmdldFJlc291cmNlcygpLmdldCgwKSkuc2V0VVJJKHVyaSk7CisJCXNldElucHV0V2l0aE5vdGlmeShlZGl0b3JJbnB1dCk7CisJCXNldFBhcnROYW1lKGVkaXRvcklucHV0LmdldE5hbWUoKSk7CisJCUlQcm9ncmVzc01vbml0b3IgcHJvZ3Jlc3NNb25pdG9yID0KKwkJCWdldEFjdGlvbkJhcnMoKS5nZXRTdGF0dXNMaW5lTWFuYWdlcigpICE9IG51bGwgPworCQkJCWdldEFjdGlvbkJhcnMoKS5nZXRTdGF0dXNMaW5lTWFuYWdlcigpLmdldFByb2dyZXNzTW9uaXRvcigpIDoKKwkJCQluZXcgTnVsbFByb2dyZXNzTW9uaXRvcigpOworCQlkb1NhdmUocHJvZ3Jlc3NNb25pdG9yKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGlzIGNhbGxlZCBkdXJpbmcgc3RhcnR1cC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBpbml0KElFZGl0b3JTaXRlIHNpdGUsIElFZGl0b3JJbnB1dCBlZGl0b3JJbnB1dCkgeworCQlzZXRTaXRlKHNpdGUpOworCQlzZXRJbnB1dFdpdGhOb3RpZnkoZWRpdG9ySW5wdXQpOworCQlzZXRQYXJ0TmFtZShlZGl0b3JJbnB1dC5nZXROYW1lKCkpOworCQlzaXRlLnNldFNlbGVjdGlvblByb3ZpZGVyKHRoaXMpOworCQlzaXRlLmdldFBhZ2UoKS5hZGRQYXJ0TGlzdGVuZXIocGFydExpc3RlbmVyKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBzZXRGb2N1cygpIHsKKwkJaWYgKGN1cnJlbnRWaWV3ZXJQYW5lICE9IG51bGwpIHsKKwkJCWN1cnJlbnRWaWV3ZXJQYW5lLnNldEZvY3VzKCk7CisJCX0KKwkJZWxzZSB7CisJCQlnZXRDb250cm9sKGdldEFjdGl2ZVBhZ2UoKSkuc2V0Rm9jdXMoKTsKKwkJfQorCX0KKworCS8qKgorCSAqIFRoaXMgaW1wbGVtZW50cyB7QGxpbmsgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uUHJvdmlkZXJ9LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIGFkZFNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcihJU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyIGxpc3RlbmVyKSB7CisJCXNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcnMuYWRkKGxpc3RlbmVyKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGltcGxlbWVudHMge0BsaW5rIG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvblByb3ZpZGVyfS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCByZW1vdmVTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIoSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lciBsaXN0ZW5lcikgeworCQlzZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXJzLnJlbW92ZShsaXN0ZW5lcik7CisJfQorCisJLyoqCisJICogVGhpcyBpbXBsZW1lbnRzIHtAbGluayBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb25Qcm92aWRlcn0gdG8gcmV0dXJuIHRoaXMgZWRpdG9yJ3Mgb3ZlcmFsbCBzZWxlY3Rpb24uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIElTZWxlY3Rpb24gZ2V0U2VsZWN0aW9uKCkgeworCQlyZXR1cm4gZWRpdG9yU2VsZWN0aW9uOworCX0KKworCS8qKgorCSAqIFRoaXMgaW1wbGVtZW50cyB7QGxpbmsgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uUHJvdmlkZXJ9IHRvIHNldCB0aGlzIGVkaXRvcidzIG92ZXJhbGwgc2VsZWN0aW9uLgorCSAqIENhbGxpbmcgdGhpcyByZXN1bHQgd2lsbCBub3RpZnkgdGhlIGxpc3RlbmVycy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRTZWxlY3Rpb24oSVNlbGVjdGlvbiBzZWxlY3Rpb24pIHsKKwkJZWRpdG9yU2VsZWN0aW9uID0gc2VsZWN0aW9uOworCisJCWZvciAoSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lciBsaXN0ZW5lciA6IHNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcnMpIHsKKwkJCWxpc3RlbmVyLnNlbGVjdGlvbkNoYW5nZWQobmV3IFNlbGVjdGlvbkNoYW5nZWRFdmVudCh0aGlzLCBzZWxlY3Rpb24pKTsKKwkJfQorCQlzZXRTdGF0dXNMaW5lTWFuYWdlcihzZWxlY3Rpb24pOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIHNldFN0YXR1c0xpbmVNYW5hZ2VyKElTZWxlY3Rpb24gc2VsZWN0aW9uKSB7CisJCUlTdGF0dXNMaW5lTWFuYWdlciBzdGF0dXNMaW5lTWFuYWdlciA9IGN1cnJlbnRWaWV3ZXIgIT0gbnVsbCAmJiBjdXJyZW50Vmlld2VyID09IGNvbnRlbnRPdXRsaW5lVmlld2VyID8KKwkJCWNvbnRlbnRPdXRsaW5lU3RhdHVzTGluZU1hbmFnZXIgOiBnZXRBY3Rpb25CYXJzKCkuZ2V0U3RhdHVzTGluZU1hbmFnZXIoKTsKKworCQlpZiAoc3RhdHVzTGluZU1hbmFnZXIgIT0gbnVsbCkgeworCQkJaWYgKHNlbGVjdGlvbiBpbnN0YW5jZW9mIElTdHJ1Y3R1cmVkU2VsZWN0aW9uKSB7CisJCQkJQ29sbGVjdGlvbjw/PiBjb2xsZWN0aW9uID0gKChJU3RydWN0dXJlZFNlbGVjdGlvbilzZWxlY3Rpb24pLnRvTGlzdCgpOworCQkJCXN3aXRjaCAoY29sbGVjdGlvbi5zaXplKCkpIHsKKwkJCQkJY2FzZSAwOiB7CisJCQkJCQlzdGF0dXNMaW5lTWFuYWdlci5zZXRNZXNzYWdlKGdldFN0cmluZygiX1VJX05vT2JqZWN0U2VsZWN0ZWQiKSk7IC8vJE5PTi1OTFMtMSQKKwkJCQkJCWJyZWFrOworCQkJCQl9CisJCQkJCWNhc2UgMTogeworCQkJCQkJU3RyaW5nIHRleHQgPSBuZXcgQWRhcHRlckZhY3RvcnlJdGVtRGVsZWdhdG9yKGFkYXB0ZXJGYWN0b3J5KS5nZXRUZXh0KGNvbGxlY3Rpb24uaXRlcmF0b3IoKS5uZXh0KCkpOworCQkJCQkJc3RhdHVzTGluZU1hbmFnZXIuc2V0TWVzc2FnZShnZXRTdHJpbmcoIl9VSV9TaW5nbGVPYmplY3RTZWxlY3RlZCIsIHRleHQpKTsgLy8kTk9OLU5MUy0xJAorCQkJCQkJYnJlYWs7CisJCQkJCX0KKwkJCQkJZGVmYXVsdDogeworCQkJCQkJc3RhdHVzTGluZU1hbmFnZXIuc2V0TWVzc2FnZShnZXRTdHJpbmcoIl9VSV9NdWx0aU9iamVjdFNlbGVjdGVkIiwgSW50ZWdlci50b1N0cmluZyhjb2xsZWN0aW9uLnNpemUoKSkpKTsgLy8kTk9OLU5MUy0xJAorCQkJCQkJYnJlYWs7CisJCQkJCX0KKwkJCQl9CisJCQl9CisJCQllbHNlIHsKKwkJCQlzdGF0dXNMaW5lTWFuYWdlci5zZXRNZXNzYWdlKCIiKTsgLy8kTk9OLU5MUy0xJAorCQkJfQorCQl9CisJfQorCisJLyoqCisJICogVGhpcyBsb29rcyB1cCBhIHN0cmluZyBpbiB0aGUgcGx1Z2luJ3MgcGx1Z2luLnByb3BlcnRpZXMgZmlsZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcml2YXRlIHN0YXRpYyBTdHJpbmcgZ2V0U3RyaW5nKFN0cmluZyBrZXkpIHsKKwkJcmV0dXJuIERpc2Vhc2Vtb2RlbHNFZGl0b3JQbHVnaW4uSU5TVEFOQ0UuZ2V0U3RyaW5nKGtleSk7CisJfQorCisJLyoqCisJICogVGhpcyBsb29rcyB1cCBhIHN0cmluZyBpbiBwbHVnaW4ucHJvcGVydGllcywgbWFraW5nIGEgc3Vic3RpdHV0aW9uLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByaXZhdGUgc3RhdGljIFN0cmluZyBnZXRTdHJpbmcoU3RyaW5nIGtleSwgT2JqZWN0IHMxKSB7CisJCXJldHVybiBEaXNlYXNlbW9kZWxzRWRpdG9yUGx1Z2luLklOU1RBTkNFLmdldFN0cmluZyhrZXksIG5ldyBPYmplY3QgW10geyBzMSB9KTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGltcGxlbWVudHMge0BsaW5rIG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JTWVudUxpc3RlbmVyfSB0byBoZWxwIGZpbGwgdGhlIGNvbnRleHQgbWVudXMgd2l0aCBjb250cmlidXRpb25zIGZyb20gdGhlIEVkaXQgbWVudS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBtZW51QWJvdXRUb1Nob3coSU1lbnVNYW5hZ2VyIG1lbnVNYW5hZ2VyKSB7CisJCSgoSU1lbnVMaXN0ZW5lcilnZXRFZGl0b3JTaXRlKCkuZ2V0QWN0aW9uQmFyQ29udHJpYnV0b3IoKSkubWVudUFib3V0VG9TaG93KG1lbnVNYW5hZ2VyKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRWRpdGluZ0RvbWFpbkFjdGlvbkJhckNvbnRyaWJ1dG9yIGdldEFjdGlvbkJhckNvbnRyaWJ1dG9yKCkgeworCQlyZXR1cm4gKEVkaXRpbmdEb21haW5BY3Rpb25CYXJDb250cmlidXRvcilnZXRFZGl0b3JTaXRlKCkuZ2V0QWN0aW9uQmFyQ29udHJpYnV0b3IoKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgSUFjdGlvbkJhcnMgZ2V0QWN0aW9uQmFycygpIHsKKwkJcmV0dXJuIGdldEFjdGlvbkJhckNvbnRyaWJ1dG9yKCkuZ2V0QWN0aW9uQmFycygpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBBZGFwdGVyRmFjdG9yeSBnZXRBZGFwdGVyRmFjdG9yeSgpIHsKKwkJcmV0dXJuIGFkYXB0ZXJGYWN0b3J5OworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGRpc3Bvc2UoKSB7CisJCXVwZGF0ZVByb2JsZW1JbmRpY2F0aW9uID0gZmFsc2U7CisKKwkJZ2V0U2l0ZSgpLmdldFBhZ2UoKS5yZW1vdmVQYXJ0TGlzdGVuZXIocGFydExpc3RlbmVyKTsKKworCQlhZGFwdGVyRmFjdG9yeS5kaXNwb3NlKCk7CisKKwkJaWYgKGdldEFjdGlvbkJhckNvbnRyaWJ1dG9yKCkuZ2V0QWN0aXZlRWRpdG9yKCkgPT0gdGhpcykgeworCQkJZ2V0QWN0aW9uQmFyQ29udHJpYnV0b3IoKS5zZXRBY3RpdmVFZGl0b3IobnVsbCk7CisJCX0KKworCQlpZiAocHJvcGVydHlTaGVldFBhZ2UgIT0gbnVsbCkgeworCQkJcHJvcGVydHlTaGVldFBhZ2UuZGlzcG9zZSgpOworCQl9CisKKwkJaWYgKGNvbnRlbnRPdXRsaW5lUGFnZSAhPSBudWxsKSB7CisJCQljb250ZW50T3V0bGluZVBhZ2UuZGlzcG9zZSgpOworCQl9CisKKwkJc3VwZXIuZGlzcG9zZSgpOworCX0KKworCS8qKgorCSAqIFJldHVybnMgd2hldGhlciB0aGUgb3V0bGluZSB2aWV3IHNob3VsZCBiZSBwcmVzZW50ZWQgdG8gdGhlIHVzZXIuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIGJvb2xlYW4gc2hvd091dGxpbmVWaWV3KCkgeworCQlyZXR1cm4gdHJ1ZTsKKwl9Cit9CmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3N0YW5kYXJkL3ByZXNlbnRhdGlvbi9TdGFuZGFyZE1vZGVsV2l6YXJkLmphdmEgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3N0YW5kYXJkL3ByZXNlbnRhdGlvbi9TdGFuZGFyZE1vZGVsV2l6YXJkLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzQ4YTEwOQotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvc3RhbmRhcmQvcHJlc2VudGF0aW9uL1N0YW5kYXJkTW9kZWxXaXphcmQuamF2YQpAQCAtMCwwICsxLDU3MSBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQucHJlc2VudGF0aW9uOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCitpbXBvcnQgamF2YS5pby5GaWxlOworaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7CitpbXBvcnQgamF2YS51dGlsLkFycmF5czsKK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbnM7CitpbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CitpbXBvcnQgamF2YS51dGlsLk1hcDsKK2ltcG9ydCBqYXZhLnV0aWwuTWlzc2luZ1Jlc291cmNlRXhjZXB0aW9uOworaW1wb3J0IGphdmEudXRpbC5TdHJpbmdUb2tlbml6ZXI7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVByb2dyZXNzTW9uaXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuVVJJOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzc2lmaWVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5yZXNvdXJjZS5SZXNvdXJjZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUucmVzb3VyY2UuUmVzb3VyY2VTZXQ7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnJlc291cmNlLmltcGwuUmVzb3VyY2VTZXRJbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS54bWkuWE1MUmVzb3VyY2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkucHJvdmlkZXIuRXh0ZW5kZWRJbWFnZVJlZ2lzdHJ5OworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmRpYWxvZ3MuTWVzc2FnZURpYWxvZzsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5vcGVyYXRpb24uSVJ1bm5hYmxlV2l0aFByb2dyZXNzOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVN0cnVjdHVyZWRTZWxlY3Rpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uud2l6YXJkLldpemFyZDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS53aXphcmQuV2l6YXJkUGFnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmRGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZFBhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLnByb3ZpZGVyLkRpc2Vhc2Vtb2RlbHNFZGl0UGx1Z2luOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5TV1Q7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5Nb2RpZnlFdmVudDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLk1vZGlmeUxpc3RlbmVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuU2VsZWN0aW9uQWRhcHRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLlNlbGVjdGlvbkV2ZW50OworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5sYXlvdXQuR3JpZERhdGE7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5HcmlkTGF5b3V0OworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkJ1dHRvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21ibzsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuTGFiZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuVGV4dDsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5JTmV3V2l6YXJkOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2g7CisKKy8qKgorICogVGhpcyBpcyBhIHNpbXBsZSB3aXphcmQgZm9yIGNyZWF0aW5nIGEgbmV3IG1vZGVsIGZpbGUuCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBTdGFuZGFyZE1vZGVsV2l6YXJkIGV4dGVuZHMgV2l6YXJkIGltcGxlbWVudHMgSU5ld1dpemFyZCB7CisJLyoqCisJICogVGhlIHN1cHBvcnRlZCBleHRlbnNpb25zIGZvciBjcmVhdGVkIGZpbGVzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgTGlzdDxTdHJpbmc+IEZJTEVfRVhURU5TSU9OUyA9CisJCUNvbGxlY3Rpb25zLnVubW9kaWZpYWJsZUxpc3QoQXJyYXlzLmFzTGlzdChEaXNlYXNlbW9kZWxzRWRpdG9yUGx1Z2luLklOU1RBTkNFLmdldFN0cmluZygiX1VJX1N0YW5kYXJkRWRpdG9yRmlsZW5hbWVFeHRlbnNpb25zIikuc3BsaXQoIlxccyosXFxzKiIpKSk7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAorCisJLyoqCisJICogQSBmb3JtYXR0ZWQgbGlzdCBvZiBzdXBwb3J0ZWQgZmlsZSBleHRlbnNpb25zLCBzdWl0YWJsZSBmb3IgZGlzcGxheS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBGT1JNQVRURURfRklMRV9FWFRFTlNJT05TID0KKwkJRGlzZWFzZW1vZGVsc0VkaXRvclBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoIl9VSV9TdGFuZGFyZEVkaXRvckZpbGVuYW1lRXh0ZW5zaW9ucyIpLnJlcGxhY2VBbGwoIlxccyosXFxzKiIsICIsICIpOworCisJLyoqCisJICogVGhpcyBjYWNoZXMgYW4gaW5zdGFuY2Ugb2YgdGhlIG1vZGVsIHBhY2thZ2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIFN0YW5kYXJkUGFja2FnZSBzdGFuZGFyZFBhY2thZ2UgPSBTdGFuZGFyZFBhY2thZ2UuZUlOU1RBTkNFOworCisJLyoqCisJICogVGhpcyBjYWNoZXMgYW4gaW5zdGFuY2Ugb2YgdGhlIG1vZGVsIGZhY3RvcnkuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIFN0YW5kYXJkRmFjdG9yeSBzdGFuZGFyZEZhY3RvcnkgPSBzdGFuZGFyZFBhY2thZ2UuZ2V0U3RhbmRhcmRGYWN0b3J5KCk7CisKKwkvKioKKwkgKiBUaGlzIGlzIHRoZSBpbml0aWFsIG9iamVjdCBjcmVhdGlvbiBwYWdlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBTdGFuZGFyZE1vZGVsV2l6YXJkSW5pdGlhbE9iamVjdENyZWF0aW9uUGFnZSBpbml0aWFsT2JqZWN0Q3JlYXRpb25QYWdlOworCisJLyoqCisJICogUmVtZW1iZXIgdGhlIHNlbGVjdGlvbiBkdXJpbmcgaW5pdGlhbGl6YXRpb24gZm9yIHBvcHVsYXRpbmcgdGhlIGRlZmF1bHQgY29udGFpbmVyLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBJU3RydWN0dXJlZFNlbGVjdGlvbiBzZWxlY3Rpb247CisKKwkvKioKKwkgKiBSZW1lbWJlciB0aGUgd29ya2JlbmNoIGR1cmluZyBpbml0aWFsaXphdGlvbi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgSVdvcmtiZW5jaCB3b3JrYmVuY2g7CisKKwkvKioKKwkgKiBDYWNoZXMgdGhlIG5hbWVzIG9mIHRoZSB0eXBlcyB0aGF0IGNhbiBiZSBjcmVhdGVkIGFzIHRoZSByb290IG9iamVjdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgTGlzdDxTdHJpbmc+IGluaXRpYWxPYmplY3ROYW1lczsKKworCS8qKgorCSAqIFRoaXMganVzdCByZWNvcmRzIHRoZSBpbmZvcm1hdGlvbi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBpbml0KElXb3JrYmVuY2ggd29ya2JlbmNoLCBJU3RydWN0dXJlZFNlbGVjdGlvbiBzZWxlY3Rpb24pIHsKKwkJdGhpcy53b3JrYmVuY2ggPSB3b3JrYmVuY2g7CisJCXRoaXMuc2VsZWN0aW9uID0gc2VsZWN0aW9uOworCQlzZXRXaW5kb3dUaXRsZShEaXNlYXNlbW9kZWxzRWRpdG9yUGx1Z2luLklOU1RBTkNFLmdldFN0cmluZygiX1VJX1dpemFyZF9sYWJlbCIpKTsgLy8kTk9OLU5MUy0xJAorCQlzZXREZWZhdWx0UGFnZUltYWdlRGVzY3JpcHRvcihFeHRlbmRlZEltYWdlUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0SW1hZ2VEZXNjcmlwdG9yKERpc2Vhc2Vtb2RlbHNFZGl0b3JQbHVnaW4uSU5TVEFOQ0UuZ2V0SW1hZ2UoImZ1bGwvd2l6YmFuL05ld1N0YW5kYXJkIikpKTsgLy8kTk9OLU5MUy0xJAorCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIG5hbWVzIG9mIHRoZSB0eXBlcyB0aGF0IGNhbiBiZSBjcmVhdGVkIGFzIHRoZSByb290IG9iamVjdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgQ29sbGVjdGlvbjxTdHJpbmc+IGdldEluaXRpYWxPYmplY3ROYW1lcygpIHsKKwkJaWYgKGluaXRpYWxPYmplY3ROYW1lcyA9PSBudWxsKSB7CisJCQlpbml0aWFsT2JqZWN0TmFtZXMgPSBuZXcgQXJyYXlMaXN0PFN0cmluZz4oKTsKKwkJCWZvciAoRUNsYXNzaWZpZXIgZUNsYXNzaWZpZXIgOiBzdGFuZGFyZFBhY2thZ2UuZ2V0RUNsYXNzaWZpZXJzKCkpIHsKKwkJCQlpZiAoZUNsYXNzaWZpZXIgaW5zdGFuY2VvZiBFQ2xhc3MpIHsKKwkJCQkJRUNsYXNzIGVDbGFzcyA9IChFQ2xhc3MpZUNsYXNzaWZpZXI7CisJCQkJCWlmICghZUNsYXNzLmlzQWJzdHJhY3QoKSkgeworCQkJCQkJaW5pdGlhbE9iamVjdE5hbWVzLmFkZChlQ2xhc3MuZ2V0TmFtZSgpKTsKKwkJCQkJfQorCQkJCX0KKwkJCX0KKwkJCUNvbGxlY3Rpb25zLnNvcnQoaW5pdGlhbE9iamVjdE5hbWVzLCBqYXZhLnRleHQuQ29sbGF0b3IuZ2V0SW5zdGFuY2UoKSk7CisJCX0KKwkJcmV0dXJuIGluaXRpYWxPYmplY3ROYW1lczsKKwl9CisKKwkvKioKKwkgKiBDcmVhdGUgYSBuZXcgbW9kZWwuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIEVPYmplY3QgY3JlYXRlSW5pdGlhbE1vZGVsKCkgeworCQlFQ2xhc3MgZUNsYXNzID0gKEVDbGFzcylzdGFuZGFyZFBhY2thZ2UuZ2V0RUNsYXNzaWZpZXIoaW5pdGlhbE9iamVjdENyZWF0aW9uUGFnZS5nZXRJbml0aWFsT2JqZWN0TmFtZSgpKTsKKwkJRU9iamVjdCByb290T2JqZWN0ID0gc3RhbmRhcmRGYWN0b3J5LmNyZWF0ZShlQ2xhc3MpOworCQlyZXR1cm4gcm9vdE9iamVjdDsKKwl9CisKKwkvKioKKwkgKiBEbyB0aGUgd29yayBhZnRlciBldmVyeXRoaW5nIGlzIHNwZWNpZmllZC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgYm9vbGVhbiBwZXJmb3JtRmluaXNoKCkgeworCQl0cnkgeworCQkJLy8gR2V0IHRoZSBVUkkgb2YgdGhlIG1vZGVsIGZpbGUuCisJCQkvLworCQkJZmluYWwgVVJJIGZpbGVVUkkgPSBnZXRNb2RlbFVSSSgpOworCQkJaWYgKG5ldyBGaWxlKGZpbGVVUkkudG9GaWxlU3RyaW5nKCkpLmV4aXN0cygpKSB7CisJCQkJaWYgKCFNZXNzYWdlRGlhbG9nLm9wZW5RdWVzdGlvbgorCQkJCQkJKGdldFNoZWxsKCksCisJCQkJCQkgRGlzZWFzZW1vZGVsc0VkaXRvclBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoIl9VSV9RdWVzdGlvbl90aXRsZSIpLCAvLyROT04tTkxTLTEkCisJCQkJCQkgRGlzZWFzZW1vZGVsc0VkaXRvclBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoIl9XQVJOX0ZpbGVDb25mbGljdCIsIG5ldyBTdHJpbmcgW117IGZpbGVVUkkudG9GaWxlU3RyaW5nKCkgfSkpKSAvLyROT04tTkxTLTEkCisJCQkJeworCQkJCQlpbml0aWFsT2JqZWN0Q3JlYXRpb25QYWdlLnNlbGVjdEZpbGVGaWVsZCgpOworCQkJCQlyZXR1cm4gZmFsc2U7CisJCQkJfQorCQkJfQorCQkJCisJCQkvLyBEbyB0aGUgd29yayB3aXRoaW4gYW4gb3BlcmF0aW9uLgorCQkJLy8KKwkJCUlSdW5uYWJsZVdpdGhQcm9ncmVzcyBvcGVyYXRpb24gPSBuZXcgSVJ1bm5hYmxlV2l0aFByb2dyZXNzKCkgeworCQkJCXB1YmxpYyB2b2lkIHJ1bihJUHJvZ3Jlc3NNb25pdG9yIHByb2dyZXNzTW9uaXRvcikgeworCQkJCQkJdHJ5IHsKKwkJCQkJCQkvLyBDcmVhdGUgYSByZXNvdXJjZSBzZXQKKwkJCQkJCQkvLworCQkJCQkJCVJlc291cmNlU2V0IHJlc291cmNlU2V0ID0gbmV3IFJlc291cmNlU2V0SW1wbCgpOworCisJCQkJCQkJLy8gQ3JlYXRlIGEgcmVzb3VyY2UgZm9yIHRoaXMgZmlsZS4KKwkJCQkJCQkvLworCQkJCQkJCVJlc291cmNlIHJlc291cmNlID0gcmVzb3VyY2VTZXQuY3JlYXRlUmVzb3VyY2UoZmlsZVVSSSk7CisKKwkJCQkJCQkvLyBBZGQgdGhlIGluaXRpYWwgbW9kZWwgb2JqZWN0IHRvIHRoZSBjb250ZW50cy4KKwkJCQkJCQkvLworCQkJCQkJCUVPYmplY3Qgcm9vdE9iamVjdCA9IGNyZWF0ZUluaXRpYWxNb2RlbCgpOworCQkJCQkJCWlmIChyb290T2JqZWN0ICE9IG51bGwpIHsKKwkJCQkJCQkJcmVzb3VyY2UuZ2V0Q29udGVudHMoKS5hZGQocm9vdE9iamVjdCk7CisJCQkJCQkJfQorCisJCQkJCQkJLy8gU2F2ZSB0aGUgY29udGVudHMgb2YgdGhlIHJlc291cmNlIHRvIHRoZSBmaWxlIHN5c3RlbS4KKwkJCQkJCQkvLworCQkJCQkJCU1hcDxPYmplY3QsIE9iamVjdD4gb3B0aW9ucyA9IG5ldyBIYXNoTWFwPE9iamVjdCwgT2JqZWN0PigpOworCQkJCQkJCW9wdGlvbnMucHV0KFhNTFJlc291cmNlLk9QVElPTl9FTkNPRElORywgaW5pdGlhbE9iamVjdENyZWF0aW9uUGFnZS5nZXRFbmNvZGluZygpKTsKKwkJCQkJCQlyZXNvdXJjZS5zYXZlKG9wdGlvbnMpOworCQkJCQkJfQorCQkJCQkJY2F0Y2ggKEV4Y2VwdGlvbiBleGNlcHRpb24pIHsKKwkJCQkJCQlEaXNlYXNlbW9kZWxzRWRpdG9yUGx1Z2luLklOU1RBTkNFLmxvZyhleGNlcHRpb24pOworCQkJCQkJfQorCQkJCQkJZmluYWxseSB7CisJCQkJCQkJcHJvZ3Jlc3NNb25pdG9yLmRvbmUoKTsKKwkJCQkJCX0KKwkJCQkJfQorCQkJCX07CisKKwkJCWdldENvbnRhaW5lcigpLnJ1bihmYWxzZSwgZmFsc2UsIG9wZXJhdGlvbik7CisKKwkJCXJldHVybiBEaXNlYXNlbW9kZWxzRWRpdG9yQWR2aXNvci5vcGVuRWRpdG9yKHdvcmtiZW5jaCwgZmlsZVVSSSk7CQkJCisJCX0KKwkJY2F0Y2ggKEV4Y2VwdGlvbiBleGNlcHRpb24pIHsKKwkJCURpc2Vhc2Vtb2RlbHNFZGl0b3JQbHVnaW4uSU5TVEFOQ0UubG9nKGV4Y2VwdGlvbik7CisJCQlyZXR1cm4gZmFsc2U7CisJCX0KKwl9CisKKwkvKioKKwkgKiBUaGlzIGlzIHRoZSBwYWdlIHdoZXJlIHRoZSB0eXBlIG9mIG9iamVjdCB0byBjcmVhdGUgaXMgc2VsZWN0ZWQuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIGNsYXNzIFN0YW5kYXJkTW9kZWxXaXphcmRJbml0aWFsT2JqZWN0Q3JlYXRpb25QYWdlIGV4dGVuZHMgV2l6YXJkUGFnZSB7CisJCS8qKgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJcHJvdGVjdGVkIFRleHQgZmlsZUZpZWxkOworCisJCS8qKgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJcHJvdGVjdGVkIENvbWJvIGluaXRpYWxPYmplY3RGaWVsZDsKKworCQkvKioKKwkJICogQGdlbmVyYXRlZAorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICovCisJCXByb3RlY3RlZCBMaXN0PFN0cmluZz4gZW5jb2RpbmdzOworCisJCS8qKgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJcHJvdGVjdGVkIENvbWJvIGVuY29kaW5nRmllbGQ7CisKKwkJLyoqCisJCSAqIFBhc3MgaW4gdGhlIHNlbGVjdGlvbi4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCXB1YmxpYyBTdGFuZGFyZE1vZGVsV2l6YXJkSW5pdGlhbE9iamVjdENyZWF0aW9uUGFnZShTdHJpbmcgcGFnZUlkKSB7CisJCQlzdXBlcihwYWdlSWQpOworCQl9CisKKwkJLyoqCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlwdWJsaWMgdm9pZCBjcmVhdGVDb250cm9sKENvbXBvc2l0ZSBwYXJlbnQpIHsKKwkJCUNvbXBvc2l0ZSBjb21wb3NpdGUgPSBuZXcgQ29tcG9zaXRlKHBhcmVudCwgU1dULk5PTkUpOyB7CisJCQkJR3JpZExheW91dCBsYXlvdXQgPSBuZXcgR3JpZExheW91dCgpOworCQkJCWxheW91dC5udW1Db2x1bW5zID0gMTsKKwkJCQlsYXlvdXQudmVydGljYWxTcGFjaW5nID0gMTI7CisJCQkJY29tcG9zaXRlLnNldExheW91dChsYXlvdXQpOworCisJCQkJR3JpZERhdGEgZGF0YSA9IG5ldyBHcmlkRGF0YSgpOworCQkJCWRhdGEudmVydGljYWxBbGlnbm1lbnQgPSBHcmlkRGF0YS5GSUxMOworCQkJCWRhdGEuZ3JhYkV4Y2Vzc1ZlcnRpY2FsU3BhY2UgPSB0cnVlOworCQkJCWRhdGEuaG9yaXpvbnRhbEFsaWdubWVudCA9IEdyaWREYXRhLkZJTEw7CisJCQkJY29tcG9zaXRlLnNldExheW91dERhdGEoZGF0YSk7CisJCQl9CisJCQkKKwkJCUxhYmVsIHJlc291cmNlVVJJTGFiZWwgPSBuZXcgTGFiZWwoY29tcG9zaXRlLCBTV1QuTEVGVCk7CisJCQl7CisJCQkJcmVzb3VyY2VVUklMYWJlbC5zZXRUZXh0KERpc2Vhc2Vtb2RlbHNFZGl0b3JQbHVnaW4uSU5TVEFOQ0UuZ2V0U3RyaW5nKCJfVUlfRmlsZV9sYWJlbCIpKTsgLy8kTk9OLU5MUy0xJAorCisJCQkJR3JpZERhdGEgZGF0YSA9IG5ldyBHcmlkRGF0YSgpOworCQkJCWRhdGEuaG9yaXpvbnRhbEFsaWdubWVudCA9IEdyaWREYXRhLkZJTEw7CisJCQkJcmVzb3VyY2VVUklMYWJlbC5zZXRMYXlvdXREYXRhKGRhdGEpOworCQkJfQorCisJCQlDb21wb3NpdGUgZmlsZUNvbXBvc2l0ZSA9IG5ldyBDb21wb3NpdGUoY29tcG9zaXRlLCBTV1QuTk9ORSk7CisJCQl7CisJCQkJR3JpZERhdGEgZGF0YSA9IG5ldyBHcmlkRGF0YSgpOworCQkJCWRhdGEuaG9yaXpvbnRhbEFsaWdubWVudCA9IEdyaWREYXRhLkVORDsKKwkJCQlmaWxlQ29tcG9zaXRlLnNldExheW91dERhdGEoZGF0YSk7CisKKwkJCQlHcmlkTGF5b3V0IGxheW91dCA9IG5ldyBHcmlkTGF5b3V0KCk7CisJCQkJZGF0YS5ob3Jpem9udGFsQWxpZ25tZW50ID0gR3JpZERhdGEuRklMTDsKKwkJCQlsYXlvdXQubWFyZ2luSGVpZ2h0ID0gMDsKKwkJCQlsYXlvdXQubWFyZ2luV2lkdGggPSAwOworCQkJCWxheW91dC5udW1Db2x1bW5zID0gMjsKKwkJCQlmaWxlQ29tcG9zaXRlLnNldExheW91dChsYXlvdXQpOworCQkJfQorCisJCQlmaWxlRmllbGQgPSBuZXcgVGV4dChmaWxlQ29tcG9zaXRlLCBTV1QuQk9SREVSKTsKKwkJCXsKKwkJCQlHcmlkRGF0YSBkYXRhID0gbmV3IEdyaWREYXRhKCk7CisJCQkJZGF0YS5ob3Jpem9udGFsQWxpZ25tZW50ID0gR3JpZERhdGEuRklMTDsKKwkJCQlkYXRhLmdyYWJFeGNlc3NIb3Jpem9udGFsU3BhY2UgPSB0cnVlOworCQkJCWRhdGEuaG9yaXpvbnRhbFNwYW4gPSAxOworCQkJCWZpbGVGaWVsZC5zZXRMYXlvdXREYXRhKGRhdGEpOworCQkJfQorCisJCQlmaWxlRmllbGQuYWRkTW9kaWZ5TGlzdGVuZXIodmFsaWRhdG9yKTsKKworCQkJQnV0dG9uIHJlc291cmNlVVJJQnJvd3NlRmlsZVN5c3RlbUJ1dHRvbiA9IG5ldyBCdXR0b24oZmlsZUNvbXBvc2l0ZSwgU1dULlBVU0gpOworCQkJcmVzb3VyY2VVUklCcm93c2VGaWxlU3lzdGVtQnV0dG9uLnNldFRleHQoRGlzZWFzZW1vZGVsc0VkaXRvclBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoIl9VSV9Ccm93c2VfbGFiZWwiKSk7IC8vJE5PTi1OTFMtMSQKKworCQkJcmVzb3VyY2VVUklCcm93c2VGaWxlU3lzdGVtQnV0dG9uLmFkZFNlbGVjdGlvbkxpc3RlbmVyCisJCQkJKG5ldyBTZWxlY3Rpb25BZGFwdGVyKCkgeworCQkJCQkgQE92ZXJyaWRlCisJCQkJCSBwdWJsaWMgdm9pZCB3aWRnZXRTZWxlY3RlZChTZWxlY3Rpb25FdmVudCBldmVudCkgeworCQkJCQkJIFN0cmluZ1tdIGZpbHRlcnMgPSBTdGFuZGFyZEVkaXRvci5GSUxFX0VYVEVOU0lPTl9GSUxURVJTLnRvQXJyYXkobmV3IFN0cmluZ1tTdGFuZGFyZEVkaXRvci5GSUxFX0VYVEVOU0lPTl9GSUxURVJTLnNpemUoKV0pOworCQkJCQkJIFN0cmluZ1tdIGZpbGVzID0gRGlzZWFzZW1vZGVsc0VkaXRvckFkdmlzb3Iub3BlbkZpbGVQYXRoRGlhbG9nKGdldFNoZWxsKCksIFNXVC5TQVZFLCBmaWx0ZXJzKTsKKwkJCQkJCSBpZiAoZmlsZXMubGVuZ3RoID4gMCkgeworCQkJCQkJCSBmaWxlRmllbGQuc2V0VGV4dChmaWxlc1swXSk7CisJCQkJCQkgfQorCQkJCQkgfQorCQkJCSB9KTsKKwkJCUxhYmVsIGNvbnRhaW5lckxhYmVsID0gbmV3IExhYmVsKGNvbXBvc2l0ZSwgU1dULkxFRlQpOworCQkJeworCQkJCWNvbnRhaW5lckxhYmVsLnNldFRleHQoRGlzZWFzZW1vZGVsc0VkaXRvclBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoIl9VSV9Nb2RlbE9iamVjdCIpKTsgLy8kTk9OLU5MUy0xJAorCisJCQkJR3JpZERhdGEgZGF0YSA9IG5ldyBHcmlkRGF0YSgpOworCQkJCWRhdGEuaG9yaXpvbnRhbEFsaWdubWVudCA9IEdyaWREYXRhLkZJTEw7CisJCQkJY29udGFpbmVyTGFiZWwuc2V0TGF5b3V0RGF0YShkYXRhKTsKKwkJCX0KKworCQkJaW5pdGlhbE9iamVjdEZpZWxkID0gbmV3IENvbWJvKGNvbXBvc2l0ZSwgU1dULkJPUkRFUik7CisJCQl7CisJCQkJR3JpZERhdGEgZGF0YSA9IG5ldyBHcmlkRGF0YSgpOworCQkJCWRhdGEuaG9yaXpvbnRhbEFsaWdubWVudCA9IEdyaWREYXRhLkZJTEw7CisJCQkJZGF0YS5ncmFiRXhjZXNzSG9yaXpvbnRhbFNwYWNlID0gdHJ1ZTsKKwkJCQlpbml0aWFsT2JqZWN0RmllbGQuc2V0TGF5b3V0RGF0YShkYXRhKTsKKwkJCX0KKworCQkJZm9yIChTdHJpbmcgb2JqZWN0TmFtZSA6IGdldEluaXRpYWxPYmplY3ROYW1lcygpKSB7CisJCQkJaW5pdGlhbE9iamVjdEZpZWxkLmFkZChnZXRMYWJlbChvYmplY3ROYW1lKSk7CisJCQl9CisKKwkJCWlmIChpbml0aWFsT2JqZWN0RmllbGQuZ2V0SXRlbUNvdW50KCkgPT0gMSkgeworCQkJCWluaXRpYWxPYmplY3RGaWVsZC5zZWxlY3QoMCk7CisJCQl9CisJCQlpbml0aWFsT2JqZWN0RmllbGQuYWRkTW9kaWZ5TGlzdGVuZXIodmFsaWRhdG9yKTsKKworCQkJTGFiZWwgZW5jb2RpbmdMYWJlbCA9IG5ldyBMYWJlbChjb21wb3NpdGUsIFNXVC5MRUZUKTsKKwkJCXsKKwkJCQllbmNvZGluZ0xhYmVsLnNldFRleHQoRGlzZWFzZW1vZGVsc0VkaXRvclBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoIl9VSV9YTUxFbmNvZGluZyIpKTsgLy8kTk9OLU5MUy0xJAorCisJCQkJR3JpZERhdGEgZGF0YSA9IG5ldyBHcmlkRGF0YSgpOworCQkJCWRhdGEuaG9yaXpvbnRhbEFsaWdubWVudCA9IEdyaWREYXRhLkZJTEw7CisJCQkJZW5jb2RpbmdMYWJlbC5zZXRMYXlvdXREYXRhKGRhdGEpOworCQkJfQorCQkJZW5jb2RpbmdGaWVsZCA9IG5ldyBDb21ibyhjb21wb3NpdGUsIFNXVC5CT1JERVIpOworCQkJeworCQkJCUdyaWREYXRhIGRhdGEgPSBuZXcgR3JpZERhdGEoKTsKKwkJCQlkYXRhLmhvcml6b250YWxBbGlnbm1lbnQgPSBHcmlkRGF0YS5GSUxMOworCQkJCWRhdGEuZ3JhYkV4Y2Vzc0hvcml6b250YWxTcGFjZSA9IHRydWU7CisJCQkJZW5jb2RpbmdGaWVsZC5zZXRMYXlvdXREYXRhKGRhdGEpOworCQkJfQorCisJCQlmb3IgKFN0cmluZyBlbmNvZGluZyA6IGdldEVuY29kaW5ncygpKSB7CisJCQkJZW5jb2RpbmdGaWVsZC5hZGQoZW5jb2RpbmcpOworCQkJfQorCisJCQllbmNvZGluZ0ZpZWxkLnNlbGVjdCgwKTsKKwkJCWVuY29kaW5nRmllbGQuYWRkTW9kaWZ5TGlzdGVuZXIodmFsaWRhdG9yKTsKKworCQkJc2V0UGFnZUNvbXBsZXRlKHZhbGlkYXRlUGFnZSgpKTsKKwkJCXNldENvbnRyb2woY29tcG9zaXRlKTsKKwkJfQorCisJCS8qKgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJcHJvdGVjdGVkIE1vZGlmeUxpc3RlbmVyIHZhbGlkYXRvciA9CisJCQluZXcgTW9kaWZ5TGlzdGVuZXIoKSB7CisJCQkJcHVibGljIHZvaWQgbW9kaWZ5VGV4dChNb2RpZnlFdmVudCBlKSB7CisJCQkJCXNldFBhZ2VDb21wbGV0ZSh2YWxpZGF0ZVBhZ2UoKSk7CisJCQkJfQorCQkJfTsKKworCQkvKioKKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCXByb3RlY3RlZCBib29sZWFuIHZhbGlkYXRlUGFnZSgpIHsKKwkJCVVSSSBmaWxlVVJJID0gZ2V0RmlsZVVSSSgpOworCQkJaWYgKGZpbGVVUkkgPT0gbnVsbCB8fCBmaWxlVVJJLmlzRW1wdHkoKSkgeworCQkJCXNldEVycm9yTWVzc2FnZShudWxsKTsKKwkJCQlyZXR1cm4gZmFsc2U7CisJCQl9CisKKwkJCVN0cmluZyBleHRlbnNpb24gPSBmaWxlVVJJLmZpbGVFeHRlbnNpb24oKTsKKwkJCWlmIChleHRlbnNpb24gPT0gbnVsbCB8fCAhRklMRV9FWFRFTlNJT05TLmNvbnRhaW5zKGV4dGVuc2lvbikpIHsKKwkJCQlTdHJpbmcga2V5ID0gRklMRV9FWFRFTlNJT05TLnNpemUoKSA+IDEgPyAiX1dBUk5fRmlsZW5hbWVFeHRlbnNpb25zIiA6ICJfV0FSTl9GaWxlbmFtZUV4dGVuc2lvbiI7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAorCQkJCXNldEVycm9yTWVzc2FnZShEaXNlYXNlbW9kZWxzRWRpdG9yUGx1Z2luLklOU1RBTkNFLmdldFN0cmluZyhrZXksIG5ldyBPYmplY3QgW10geyBGT1JNQVRURURfRklMRV9FWFRFTlNJT05TIH0pKTsKKwkJCQlyZXR1cm4gZmFsc2U7CisJCQl9CisKKwkJCXNldEVycm9yTWVzc2FnZShudWxsKTsKKwkJCXJldHVybiBnZXRJbml0aWFsT2JqZWN0TmFtZSgpICE9IG51bGwgJiYgZ2V0RW5jb2RpbmdzKCkuY29udGFpbnMoZW5jb2RpbmdGaWVsZC5nZXRUZXh0KCkpOworCQl9CisKKwkJLyoqCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlAT3ZlcnJpZGUKKwkJcHVibGljIHZvaWQgc2V0VmlzaWJsZShib29sZWFuIHZpc2libGUpIHsKKwkJCXN1cGVyLnNldFZpc2libGUodmlzaWJsZSk7CisJCQlpZiAodmlzaWJsZSkgeworCQkJCWluaXRpYWxPYmplY3RGaWVsZC5jbGVhclNlbGVjdGlvbigpOworCQkJCWVuY29kaW5nRmllbGQuY2xlYXJTZWxlY3Rpb24oKTsKKwkJCQlmaWxlRmllbGQuc2V0Rm9jdXMoKTsKKwkJCX0KKwkJfQorCisJCS8qKgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJcHVibGljIFN0cmluZyBnZXRJbml0aWFsT2JqZWN0TmFtZSgpIHsKKwkJCVN0cmluZyBsYWJlbCA9IGluaXRpYWxPYmplY3RGaWVsZC5nZXRUZXh0KCk7CisKKwkJCWZvciAoU3RyaW5nIG5hbWUgOiBnZXRJbml0aWFsT2JqZWN0TmFtZXMoKSkgeworCQkJCWlmIChnZXRMYWJlbChuYW1lKS5lcXVhbHMobGFiZWwpKSB7CisJCQkJCXJldHVybiBuYW1lOworCQkJCX0KKwkJCX0KKwkJCXJldHVybiBudWxsOworCQl9CisKKwkJLyoqCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlwdWJsaWMgU3RyaW5nIGdldEVuY29kaW5nKCkgeworCQkJcmV0dXJuIGVuY29kaW5nRmllbGQuZ2V0VGV4dCgpOworCQl9CisKKwkJLyoqCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlwdWJsaWMgVVJJIGdldEZpbGVVUkkoKSB7CisJCQl0cnkgeworCQkJCXJldHVybiBVUkkuY3JlYXRlRmlsZVVSSShmaWxlRmllbGQuZ2V0VGV4dCgpKTsKKwkJCX0KKwkJCWNhdGNoIChFeGNlcHRpb24gZXhjZXB0aW9uKSB7CisJCQkJLy8gSWdub3JlCisJCQl9CisJCQlyZXR1cm4gbnVsbDsKKwkJfQorCisJCS8qKgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJcHVibGljIHZvaWQgc2VsZWN0RmlsZUZpZWxkKCkgeworCQkJCWluaXRpYWxPYmplY3RGaWVsZC5jbGVhclNlbGVjdGlvbigpOworCQkJCWVuY29kaW5nRmllbGQuY2xlYXJTZWxlY3Rpb24oKTsKKwkJCQlmaWxlRmllbGQuc2VsZWN0QWxsKCk7CisJCQkJZmlsZUZpZWxkLnNldEZvY3VzKCk7CisJCX0JCQorCisJCS8qKgorCQkgKiBSZXR1cm5zIHRoZSBsYWJlbCBmb3IgdGhlIHNwZWNpZmllZCB0eXBlIG5hbWUuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlwcm90ZWN0ZWQgU3RyaW5nIGdldExhYmVsKFN0cmluZyB0eXBlTmFtZSkgeworCQkJdHJ5IHsKKwkJCQlyZXR1cm4gRGlzZWFzZW1vZGVsc0VkaXRQbHVnaW4uSU5TVEFOQ0UuZ2V0U3RyaW5nKCJfVUlfIiArIHR5cGVOYW1lICsgIl90eXBlIik7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAorCQkJfQorCQkJY2F0Y2goTWlzc2luZ1Jlc291cmNlRXhjZXB0aW9uIG1yZSkgeworCQkJCURpc2Vhc2Vtb2RlbHNFZGl0b3JQbHVnaW4uSU5TVEFOQ0UubG9nKG1yZSk7CisJCQl9CisJCQlyZXR1cm4gdHlwZU5hbWU7CisJCX0KKworCQkvKioKKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCXByb3RlY3RlZCBDb2xsZWN0aW9uPFN0cmluZz4gZ2V0RW5jb2RpbmdzKCkgeworCQkJaWYgKGVuY29kaW5ncyA9PSBudWxsKSB7CisJCQkJZW5jb2RpbmdzID0gbmV3IEFycmF5TGlzdDxTdHJpbmc+KCk7CisJCQkJZm9yIChTdHJpbmdUb2tlbml6ZXIgc3RyaW5nVG9rZW5pemVyID0gbmV3IFN0cmluZ1Rva2VuaXplcihEaXNlYXNlbW9kZWxzRWRpdG9yUGx1Z2luLklOU1RBTkNFLmdldFN0cmluZygiX1VJX1hNTEVuY29kaW5nQ2hvaWNlcyIpKTsgc3RyaW5nVG9rZW5pemVyLmhhc01vcmVUb2tlbnMoKTsgKSAvLyROT04tTkxTLTEkCisJCQkJeworCQkJCQllbmNvZGluZ3MuYWRkKHN0cmluZ1Rva2VuaXplci5uZXh0VG9rZW4oKSk7CisJCQkJfQorCQkJfQorCQkJcmV0dXJuIGVuY29kaW5nczsKKwkJfQorCX0KKworCS8qKgorCSAqIFRoZSBmcmFtZXdvcmsgY2FsbHMgdGhpcyB0byBjcmVhdGUgdGhlIGNvbnRlbnRzIG9mIHRoZSB3aXphcmQuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgYWRkUGFnZXMoKSB7CisJCWluaXRpYWxPYmplY3RDcmVhdGlvblBhZ2UgPSBuZXcgU3RhbmRhcmRNb2RlbFdpemFyZEluaXRpYWxPYmplY3RDcmVhdGlvblBhZ2UoIldoYXRldmVyMiIpOyAvLyROT04tTkxTLTEkCisJCWluaXRpYWxPYmplY3RDcmVhdGlvblBhZ2Uuc2V0VGl0bGUoRGlzZWFzZW1vZGVsc0VkaXRvclBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoIl9VSV9TdGFuZGFyZE1vZGVsV2l6YXJkX2xhYmVsIikpOyAvLyROT04tTkxTLTEkCisJCWluaXRpYWxPYmplY3RDcmVhdGlvblBhZ2Uuc2V0RGVzY3JpcHRpb24oRGlzZWFzZW1vZGVsc0VkaXRvclBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoIl9VSV9XaXphcmRfaW5pdGlhbF9vYmplY3RfZGVzY3JpcHRpb24iKSk7IC8vJE5PTi1OTFMtMSQKKwkJYWRkUGFnZShpbml0aWFsT2JqZWN0Q3JlYXRpb25QYWdlKTsKKwl9CisKKwkJLyoqCisJICogR2V0IHRoZSBVUkkgZnJvbSB0aGUgcGFnZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJCXB1YmxpYyBVUkkgZ2V0TW9kZWxVUkkoKSB7CisJCXJldHVybiBpbml0aWFsT2JqZWN0Q3JlYXRpb25QYWdlLmdldEZpbGVVUkkoKTsKKwl9CisKK30KZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL2FkYXB0ZXJzL2NvbG9yL0ludGVuc2l0eUNvbG9yc0xhYmVsc01hcHBpbmdDb2xvclByb3ZpZGVyLmphdmEgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9hZGFwdGVycy9jb2xvci9JbnRlbnNpdHlDb2xvcnNMYWJlbHNNYXBwaW5nQ29sb3JQcm92aWRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY3MzU5N2MKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9hZGFwdGVycy9jb2xvci9JbnRlbnNpdHlDb2xvcnNMYWJlbHNNYXBwaW5nQ29sb3JQcm92aWRlci5qYXZhCkBAIC0wLDAgKzEsMjMgQEAKKy8vIEludGVuc2l0eUNvbG9yc0xhYmVsc01hcHBpbmdDb2xvclByb3ZpZGVyLmphdmEKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS51aS5hZGFwdGVycy5jb2xvcjsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKgorICogVGhpcyBpbnRlcmZhY2UgaXMgaW1wbGVtZW50ZWQgYnkgY2xhc3NlcyB0aGF0IHdpbGwgcHJvdmlkZSBhbiBTRUlSIHJlbGF0aXZlCisgKiB2YWx1ZSBmb3IgYSBzcGVjaWZpYyBhZGFwdGVkIG9iamVjdCAodXN1YWxseQorICoge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5Ob2RlfSkuCisgKi8KK3B1YmxpYyBpbnRlcmZhY2UgSW50ZW5zaXR5Q29sb3JzTGFiZWxzTWFwcGluZ0NvbG9yUHJvdmlkZXIgZXh0ZW5kcworCQlSZWxhdGl2ZVZhbHVlQ29sb3JQcm92aWRlciB7CisJLy8gTWFya2VyIGludGVyZmFjZQorfS8vIEludGVuc2l0eUNvbG9yc0xhYmVsc01hcHBpbmdDb2xvclByb3ZpZGVyCmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9hZGFwdGVycy9jb2xvci9JbnRlbnNpdHlDb2xvcnNMYWJlbHNNYXBwaW5nQ29sb3JQcm92aWRlckFkYXB0ZXIuamF2YSBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL2FkYXB0ZXJzL2NvbG9yL0ludGVuc2l0eUNvbG9yc0xhYmVsc01hcHBpbmdDb2xvclByb3ZpZGVyQWRhcHRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM2NmJmN2UKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9hZGFwdGVycy9jb2xvci9JbnRlbnNpdHlDb2xvcnNMYWJlbHNNYXBwaW5nQ29sb3JQcm92aWRlckFkYXB0ZXIuamF2YQpAQCAtMCwwICsxLDIwOCBAQAorLy8gSW50ZW5zaXR5Q29sb3JzTGFiZWxzTWFwcGluZ0NvbG9yUHJvdmlkZXJBZGFwdGVyLmphdmEKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS51aS5hZGFwdGVycy5jb2xvcjsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqYXZhLmF3dC5BbHBoYUNvbXBvc2l0ZTsKK2ltcG9ydCBqYXZhLnV0aWwuQ29uY3VycmVudE1vZGlmaWNhdGlvbkV4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLnV0aWwuTWFwOworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSXRlbVByb3BlcnR5RGVzY3JpcHRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguRHluYW1pY05vZGVMYWJlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguTm9kZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguTm9kZUxhYmVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5EaXNlYXNlTW9kZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLkRpc2Vhc2VNb2RlbExhYmVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5Qb3B1bGF0aW9uTW9kZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLlBvcHVsYXRpb25Nb2RlbExhYmVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udWkuYWRhcHRlcnMuY29sb3IuQWJzdHJhY3RSZWxhdGl2ZVZhbHVlQ29sb3JQcm92aWRlckFkYXB0ZXJGYWN0b3J5LlByb3BlcnR5U2VsZWN0aW9uTGlzdGVuZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS51aS5wcmVmZXJlbmNlcy5WaXN1YWxpemF0aW9uUHJlZmVyZW5jZVBhZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmdyYXBoaWNzLkNvbG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ncmFwaGljcy5HQzsKKworLyoqCisgKiBUaGlzIGNsYXNzIGFkYXB0cyB7QGxpbmsgTm9kZX0gb2JqZWN0cyB0bworICoge0BsaW5rIEludGVuc2l0eUNvbG9yc0xhYmVsc01hcHBpbmdDb2xvclByb3ZpZGVyfSBvYmplY3QuCisgKi8KK3B1YmxpYyBjbGFzcyBJbnRlbnNpdHlDb2xvcnNMYWJlbHNNYXBwaW5nQ29sb3JQcm92aWRlckFkYXB0ZXIgZXh0ZW5kcworCQlBYnN0cmFjdFJlbGF0aXZlVmFsdWVDb2xvclByb3ZpZGVyQWRhcHRlciBpbXBsZW1lbnRzIFByb3BlcnR5U2VsZWN0aW9uTGlzdGVuZXJ7CisJLyoqCisJICogZGVmYXVsdCB7QGxpbmsgQWxwaGFDb21wb3NpdGV9CisJICovCisJLy9wcml2YXRlIHN0YXRpYyBmaW5hbCBBbHBoYUNvbXBvc2l0ZSBPTkVfQ09NUE9TSVRFID0gbWFrZUNvbXBvc2l0ZSgxKTsKKwlwcml2YXRlIGZpbmFsIE1hcDxTdHJpbmcsIENvbG9yPiBjb2xvck1hcCA9IFZpc3VhbGl6YXRpb25QcmVmZXJlbmNlUGFnZS5nZXRDb2xvck1hcHBpbmcoKTsKKwlwcml2YXRlIEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3Igc2VsZWN0ZWRQcm9wZXJ0eTsKKworCS8qKgorCSAqICBDb25zdHJ1Y3RvcgorCSAqLworCXB1YmxpYyBJbnRlbnNpdHlDb2xvcnNMYWJlbHNNYXBwaW5nQ29sb3JQcm92aWRlckFkYXB0ZXIoKSB7CisJCXN1cGVyKCk7CisJfSAvLyBJbnRlbnNpdHlDb2xvcnNMYWJlbHNNYXBwaW5nQ29sb3JQcm92aWRlckFkYXB0ZXIKKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS51aS5hZGFwdGVycy5jb2xvci5BYnN0cmFjdFJlbGF0aXZlVmFsdWVDb2xvclByb3ZpZGVyQWRhcHRlciNnZXRSZWxhdGl2ZVZhbHVlKCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgZmxvYXQgZ2V0UmVsYXRpdmVWYWx1ZSgpIHsKKwkJCisJCWZpbmFsIE5vZGUgbm9kZSA9IChOb2RlKSBnZXRUYXJnZXQoKTsKKwkJdHJ5IHsKKwkJCWZvciAoZmluYWwgTm9kZUxhYmVsIGxhYmVsIDogbm9kZS5nZXRMYWJlbHMoKSkgeworCQkJCWlmIChsYWJlbCBpbnN0YW5jZW9mIER5bmFtaWNOb2RlTGFiZWwpIHsKKwkJCQkJRHluYW1pY05vZGVMYWJlbCBub2RlTGFiZWwgPSAoRHluYW1pY05vZGVMYWJlbClsYWJlbDsKKwkJCQkJaWYgKG5vZGVMYWJlbC5nZXREZWNvcmF0b3IoKSA9PSBzZWxlY3RlZERlY29yYXRvcikgeworCQkJCQkJCisJCQkJCQlpZihzZWxlY3RlZERlY29yYXRvciBpbnN0YW5jZW9mIERpc2Vhc2VNb2RlbCkgeworCQkJCQkJCWlmKG5vZGVMYWJlbCBpbnN0YW5jZW9mIERpc2Vhc2VNb2RlbExhYmVsKSB7CisJCQkJCQkJCWlmKCEoKERpc2Vhc2VNb2RlbExhYmVsKW5vZGVMYWJlbCkuZ2V0UG9wdWxhdGlvbk1vZGVsTGFiZWwoKS5nZXRQb3B1bGF0aW9uSWRlbnRpZmllcigpLmVxdWFscyhzZWxlY3RlZFBvcHVsYXRpb25JZGVudGlmaWVyKSkgeworCQkJCQkJCQkJY29udGludWU7IC8vIHdyb25nIHBvcHVsYXRpb24gaWRlbnRpZmllcgorCQkJCQkJCQl9IGVsc2UgeworCQkJCQkJCQkJc2V0UlZQVGFyZ2V0KG5vZGVMYWJlbCk7CisJCQkJCQkJCQlyZXR1cm4gKGZsb2F0KSBydnAuZ2V0UmVsYXRpdmVWYWx1ZShzZWxlY3RlZFByb3BlcnR5KTsKKwkJCQkJCQkJfQkJCQorCQkJCQkJCX0vLyBpZiBkaXNlYXNlIG1vZGVsIGxhYmVsCisJCQkJCQl9IC8vIGlmIGRpc2Vhc2UgbW9kZWwKKwkJCQkJCisJCQkJCQlpZihzZWxlY3RlZERlY29yYXRvciBpbnN0YW5jZW9mIFBvcHVsYXRpb25Nb2RlbCkgeworCQkJCQkJCVN0cmluZyBwb3BJZCA9IHNlbGVjdGVkUG9wdWxhdGlvbklkZW50aWZpZXI7CisJCQkJCQkJaWYobm9kZUxhYmVsIGluc3RhbmNlb2YgUG9wdWxhdGlvbk1vZGVsTGFiZWwpIHsKKwkJCQkJCQkJaWYoISAoKFBvcHVsYXRpb25Nb2RlbExhYmVsKW5vZGVMYWJlbCkuZ2V0UG9wdWxhdGlvbklkZW50aWZpZXIoKS5lcXVhbHMocG9wSWQpKSB7CisJCQkJCQkJCQljb250aW51ZTsgLy8gd3JvbmcgcG9wdWxhdGlvbiBpZGVudGlmaWVyCisJCQkJCQkJCX0gZWxzZSB7CisJCQkJCQkJCQlzZXRSVlBUYXJnZXQobm9kZUxhYmVsKTsKKwkJCQkJCQkJCXJldHVybiAoZmxvYXQpIHJ2cC5nZXRSZWxhdGl2ZVZhbHVlKHNlbGVjdGVkUHJvcGVydHkpOworCQkJCQkJCQl9CQorCQkJCQkJCX0vLyBpZiBwb3B1bGF0aW9uIG1vZGVsIGxhYmVsCisJCQkJCQl9Ly8gaWYgcG9wdWxhdGlvbiBtb2RlbAorCQkJCQkJCisJCQkJCX0vLyBpZiBzZWxlY3RlZAorCQkJCX0vLyBpZiBkeW5hbWljIGxhYmVsCisJCQl9Ly8gZm9yIGFsbCBsYWJlbHMKKwkJfSBjYXRjaChDb25jdXJyZW50TW9kaWZpY2F0aW9uRXhjZXB0aW9uIGNtZSkgeworCQkJLy8gV2UgZXhwZWN0IGV4Y2VwdGlvbiB0byBiZSByYXJlIHNvIHdlIHNpbXBseSByZXRyeSB0aGUgZ2V0UmVsYXRpdmVWYWx1ZSBjYWxsCisJCQlyZXR1cm4gZ2V0UmVsYXRpdmVWYWx1ZSgpOworCQl9CisKKwkJcmV0dXJuIDA7IC8vIFdlIHNob3VsZG4ndCByZWFjaCB0aGlzIHBvaW50CisJfSAvLyBnZXRSZWxhdGl2ZVZhbHVlCisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0udWkuYWRhcHRlcnMuY29sb3IuQWJzdHJhY3RSZWxhdGl2ZVZhbHVlQ29sb3JQcm92aWRlckFkYXB0ZXIjdXBkYXRlR0MoR0MsIGZsb2F0LCBib29sZWFuKQorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIHVwZGF0ZUdDKGZpbmFsIEdDIGdjVG9VcGRhdGUsCisJCQlmaW5hbCBmbG9hdCBnYWluRmFjdG9yLCBmaW5hbCBib29sZWFuIHVzZUxvZ1NjYWxpbmcpIHsKKworCQlmaW5hbCBTdHJpbmcgc2VsZWN0ZWRQcm9wZXJ0eU5hbWUgPSBzZWxlY3RlZFByb3BlcnR5LmdldERpc3BsYXlOYW1lKG51bGwpOworCisJCS8vIEdldCB0aGUgY29sb3IgZm9yIHRoZSBzZWxlY3RlZCBwcm9wZXJ0eSAobGFiZWwpCisJCWlmIChjb2xvck1hcC5jb250YWluc0tleShzZWxlY3RlZFByb3BlcnR5TmFtZSkpIHsKKwkJCWZvcmVncm91bmRGaWxsQ29sb3IgPSBjb2xvck1hcC5nZXQoc2VsZWN0ZWRQcm9wZXJ0eU5hbWUpOworCQl9IGVsc2UgeworCQkJLy8gY2hlY2sgZm9yIGNvbXBsZXggY29tcGFydG1lbnQgbmFtZXMgYW5kIGFkZCB0aG9zZSB0byB0aGUgbWFwIGlmIG5lY2Vzc2FyeQorCQkJLy8gdGhpcyB3YXkgd2UgYXZvaWQgbG90cyBvZiBmdXR1cmUgc3RyaW5nIG1hbmlwdWxhdGlvbiB3aGVuIHdlIHdhbnQgdG8gZmluZCB0aGUgY29sb3JzCisJCQkvLyBDaGVjayBmb3IgYSBwcmVmaXggbWF0Y2gKKwkJCQkJCWZvciAoU3RyaW5nIGtleSA6IGNvbG9yTWFwLmtleVNldCgpKSB7CisJCQkJCQkJaWYoKHNlbGVjdGVkUHJvcGVydHlOYW1lLnN0YXJ0c1dpdGgoa2V5KSkmJihrZXkubGVuZ3RoKCk+PTEpKSB7CisJCQkJCQkJCS8vIG1pZ2h0IGJlIHJpZ2h0CisJCQkJCQkJCVN0cmluZyB0YWlsID0gc2VsZWN0ZWRQcm9wZXJ0eU5hbWUuc3Vic3RyaW5nKGtleS5sZW5ndGgoKSwgc2VsZWN0ZWRQcm9wZXJ0eU5hbWUubGVuZ3RoKCkpOworCQkJCQkJCQkvL2lmIHBlcmZlY3QgbWF0Y2ggKHNob3VsZCBub3QgaGFwcGVuKQorCQkJCQkJCQlpZigodGFpbD09bnVsbCl8fCh0YWlsLmxlbmd0aCgpPT0wKSkgeworCQkJCQkJCQkJZmluYWwgQ29sb3IgYyA9IGNvbG9yTWFwLmdldChrZXkpOworCQkJCQkJCQkJY29sb3JNYXAucHV0KHNlbGVjdGVkUHJvcGVydHlOYW1lLCBjKTsKKwkJCQkJCQkJCWZvcmVncm91bmRGaWxsQ29sb3IgPSBjOworCQkJCQkJCQkJYnJlYWs7CisJCQkJCQkJCX0KKwkJCQkJCQkJLy8gaWYgcHJlZml4IG1hdGNoCisJCQkJCQkJCWJvb2xlYW4gaGl0ID0gdHJ1ZTsKKwkJCQkJCQkJZm9yIChjaGFyIGMgOiB0YWlsLnRvQ2hhckFycmF5KCkpIHsKKwkJCQkJCQkJCWlmICghQ2hhcmFjdGVyLmlzRGlnaXQoYykpIHsKKwkJCQkJCQkJCQloaXQgPSBmYWxzZTsKKwkJCQkJCQkJCQlicmVhazsKKwkJCQkJCQkJCX0KKwkJCQkJCQkJfS8vIGFsbCBjaGFyYWN0ZXJzIGluIHRhaWwKKwkJCQkJCQkJaWYoaGl0KXsKKwkJCQkJCQkJCS8vIHJlbWVtYmVyIHRoZSBuZXcga2V5IGluIHRoZSBjb2xvciBtYXAKKwkJCQkJCQkJCWZpbmFsIENvbG9yIGMgPSBjb2xvck1hcC5nZXQoa2V5KTsKKwkJCQkJCQkJCWNvbG9yTWFwLnB1dChzZWxlY3RlZFByb3BlcnR5TmFtZSwgYyk7CisJCQkJCQkJCQlmb3JlZ3JvdW5kRmlsbENvbG9yID0gYzsKKwkJCQkJCQkJCWJyZWFrOworCQkJCQkJCQl9CisJCQkJCQkJfQorCQkJCQkJfQorCQl9CisKKwkJLy8gVXBkYXRlIHRoZSBHMkQgb2JqZWN0IHdpdGggdGhlIGFwcHJvcHJpYXRlIGludGVuc2l0eSBvZiB0aGUgY29sb3IKKwkJZmxvYXQgYWxwaGEgPSBnZXRSZWxhdGl2ZVZhbHVlKCk7CisJCWFscGhhICo9IGdhaW5GYWN0b3I7CisJCS8vIFNFRCA4LzQvMjAwOS4gTWFrZSBzdXJlIGFscGhhIGlzIGJldHdlZW4gMCBhbmQgMQorCQlpZihhbHBoYSA+IDEuMCkgYWxwaGEgPSAxLjBmOworCQlpZihhbHBoYSA8IDAuMCkgYWxwaGEgPSAwLjBmOyAvLyBzaG91bGQgbmV2ZXIgaGFwcGVuCisJCWlmIChhbHBoYSA8IFpFUk9fUkVMQVRJVkVfVkFMVUVfVEhSRVNIT0xEKSB7CisJCQlnY1RvVXBkYXRlLnNldEFscGhhKDI1NSk7CisJCQkvLyBOT1RFOiB0aGlzIGFsbG93cyBhIGJhY2tncm91bmQgY29sb3IgZGlmZmVyZW50IGZyb20gdGhlIG9jZWFuIGNvbG9yIChKSEspCisJCQlnY1RvVXBkYXRlLnNldEJhY2tncm91bmQoemVyb19GaWxsQ29sb3IpOworCQkJLy9nY1RvVXBkYXRlLnNldEJhY2tncm91bmQoYmFja2dyb3VuZEZpbGxDb2xvcik7CisKKwkJfSBlbHNlIHsKKwkJCWlmICh1c2VMb2dTY2FsaW5nID09IHRydWUpIHsKKwkJCQlhbHBoYSA9IHBlcmZvcm1Mb2dTY2FsaW5nKGFscGhhKTsKKwkJCX0gCisJCQkvL1RPRE8gVGFrZSBjYXJlIG9mIGdhaW4gZmFjdG9yCisJCQlnY1RvVXBkYXRlLnNldEFscGhhKChpbnQpKGFscGhhICogMjU1KSk7CisJCQlnY1RvVXBkYXRlLnNldEJhY2tncm91bmQoZm9yZWdyb3VuZEZpbGxDb2xvcik7CisJCX0KKwl9IC8vIHNldEcyRENvbG9yCisKKy8vCS8qKgorLy8JICogQHBhcmFtIGFscGhhCisvLwkgKiBAcmV0dXJuCisvLwkgKi8KKy8vCXByaXZhdGUgc3RhdGljIEFscGhhQ29tcG9zaXRlIG1ha2VDb21wb3NpdGUoZmluYWwgZmxvYXQgYWxwaGEpIHsKKy8vCQlyZXR1cm4gKEFscGhhQ29tcG9zaXRlLmdldEluc3RhbmNlKEFscGhhQ29tcG9zaXRlLlNSQ19PVkVSLCBhbHBoYSkpOworLy8JfSAvLyBtYWtlQ29tcG9zaXRlCisKKwkvKioKKwkgKiBAcGFyYW0gdgorCSAqIEByZXR1cm4KKwkgKi8KKwlwcml2YXRlIGZsb2F0IHBlcmZvcm1Mb2dTY2FsaW5nKGZpbmFsIGZsb2F0IHYpIHsKKwkJZG91YmxlIHZEb3VibGUgPSB2OworCQkvLyBtYWtlIHN1cmUgb3VyIGxpbmVhciBzY2FsZSBpcyBhIGZyYWN0aW9uIGJldHdlZW4gMC4wIGFuZCAxLjAKKwkJaWYgKHZEb3VibGUgPiAxLjApIHsKKwkJCXZEb3VibGUgPSAxLjA7IC8vIHNhdHVyYXRpb24KKwkJfSBlbHNlIGlmICh2IDwgMC4wKSB7CisJCQl2RG91YmxlID0gMC4wOyAvLyBzaG91bGQgbm90IGhhcHBlbgorCQl9CisKKwkJLy8gbG9nYXJpdGhtaWMgY29sb3IgZGlzcGxheQorCQkvLyBzZXQgc2NhbGUgMS4wIHRvIDEwMC4wCisJCWRvdWJsZSB2U2NhbGVkMTAwID0gdkRvdWJsZSAqIDk5LjA7CisJCS8vIGFkZCAxLjAgc28gd2UgaGF2ZSBubyB6ZXJvcworCQl2U2NhbGVkMTAwICs9IDEuMDsKKwkJLy8gdGFrZSB0aGUgbG9nIGJhc2UgMTAuMAorCQlkb3VibGUgbmV3ViA9IE1hdGgubG9nMTAodlNjYWxlZDEwMCk7CisJCS8vIHdlIG5vdyBoYXZlIGEgbnVtYmVyIGJldHdlZW4gMSBhbmQgMiBzbyBkaXZpZGUgYnkgMgorCQluZXdWIC89IDIuMDsKKworCQlyZXR1cm4gKGZsb2F0KSBuZXdWOworCX0gLy8gcGVyZm9ybUxvZ1NjYWxpbmcKKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS51aS5hZGFwdGVycy5jb2xvci5JbnRlbnNpdHlDb2xvcnNMYWJlbHNNYXBwaW5nQ29sb3JQcm92aWRlckFkYXB0ZXJGYWN0b3J5LlByb3BlcnR5U2VsZWN0aW9uTGlzdGVuZXIjcHJvcGVydHlTZWxlY3RlZChvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JdGVtUHJvcGVydHlEZXNjcmlwdG9yKQorCSAqLworCXB1YmxpYyB2b2lkIHByb3BlcnR5U2VsZWN0ZWQoSXRlbVByb3BlcnR5RGVzY3JpcHRvciBzZWxlY3RlZFByb3BlcnR5KSB7CisJCXRoaXMuc2VsZWN0ZWRQcm9wZXJ0eSA9IHNlbGVjdGVkUHJvcGVydHk7CQkKKwl9CisKK30gLy8gSW50ZW5zaXR5Q29sb3JzTGFiZWxzTWFwcGluZ0NvbG9yUHJvdmlkZXJBZGFwdGVyCmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9hZGFwdGVycy9jb2xvci9JbnRlbnNpdHlDb2xvcnNMYWJlbHNNYXBwaW5nQ29sb3JQcm92aWRlckFkYXB0ZXJGYWN0b3J5LmphdmEgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9hZGFwdGVycy9jb2xvci9JbnRlbnNpdHlDb2xvcnNMYWJlbHNNYXBwaW5nQ29sb3JQcm92aWRlckFkYXB0ZXJGYWN0b3J5LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzA0NjEzNQotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL2FkYXB0ZXJzL2NvbG9yL0ludGVuc2l0eUNvbG9yc0xhYmVsc01hcHBpbmdDb2xvclByb3ZpZGVyQWRhcHRlckZhY3RvcnkuamF2YQpAQCAtMCwwICsxLDExNCBAQAorLy8gSW50ZW5zaXR5Q29sb3JzTGFiZWxzTWFwcGluZ0NvbG9yUHJvdmlkZXJBZGFwdGVyRmFjdG9yeS5qYXZhCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0udWkuYWRhcHRlcnMuY29sb3I7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDcsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuQWRhcHRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuRGVjb3JhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udWkucHJlZmVyZW5jZXMuUHJlZmVyZW5jZUNvbnN0YW50czsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnVpLnByZWZlcmVuY2VzLlZpc3VhbGl6YXRpb25QcmVmZXJlbmNlUGFnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnVpLndpZGdldHMuQ29sb3JQcm92aWRlclByb3BlcnRpZXNDb21wb3NpdGU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS51aS53aWRnZXRzLkNvbG9yUHJvdmlkZXJQcm9wZXJ0aWVzQ29tcG9zaXRlLlByb3BlcnR5U2VsZWN0aW9uRXZlbnQ7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlOworCisvKioKKyAqIFRoaXMgZmFjdG9yeSBjcmVhdGUgYWRhcHRlcnMgdGhhdCBhZGFwdAorICoge0BsaW5rICBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguTm9kZX1zIHRvCisgKiB7QGxpbmsgSW50ZW5zaXR5Q29sb3JzTGFiZWxzTWFwcGluZ0NvbG9yUHJvdmlkZXJ9cy4KKyAqLworcHVibGljIGNsYXNzIEludGVuc2l0eUNvbG9yc0xhYmVsc01hcHBpbmdDb2xvclByb3ZpZGVyQWRhcHRlckZhY3RvcnkgZXh0ZW5kcworCQlBYnN0cmFjdFJlbGF0aXZlVmFsdWVDb2xvclByb3ZpZGVyQWRhcHRlckZhY3RvcnkgeworCQorCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLnV0aWwuR3JhcGhBZGFwdGVyRmFjdG9yeSNjcmVhdGVOb2RlQWRhcHRlcigpCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlTm9kZUFkYXB0ZXIoKSB7CisJCWZpbmFsIEludGVuc2l0eUNvbG9yc0xhYmVsc01hcHBpbmdDb2xvclByb3ZpZGVyQWRhcHRlciBhZGFwdGVyID0gCisJCQluZXcgSW50ZW5zaXR5Q29sb3JzTGFiZWxzTWFwcGluZ0NvbG9yUHJvdmlkZXJBZGFwdGVyKCk7CisJCWFkZFByb3BlcnR5U2VsZWN0aW9uTGlzdGVuZXIoYWRhcHRlcik7CisJCWFkYXB0ZXIucHJvcGVydHlTZWxlY3RlZChzZWxlY3RlZFByb3BlcnR5KTsKKwkJcmV0dXJuIGFkYXB0ZXI7CisJfSAvLyBjcmVhdGVOb2RlQWRhcHRlcgorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnVpLmFkYXB0ZXJzLmNvbG9yLkFic3RyYWN0UmVsYXRpdmVWYWx1ZUNvbG9yUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSNpc0ZhY3RvcnlGb3JUeXBlKGphdmEubGFuZy5PYmplY3QpCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIGJvb2xlYW4gaXNGYWN0b3J5Rm9yVHlwZShmaW5hbCBPYmplY3QgdHlwZSkgeworCQlyZXR1cm4gdHlwZSA9PSBJbnRlbnNpdHlDb2xvcnNMYWJlbHNNYXBwaW5nQ29sb3JQcm92aWRlci5jbGFzczsKKwl9IC8vIGlzRmFjdG9yeUZvclR5cGUKKwkKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0udWkuYWRhcHRlcnMuY29sb3IuSUNvbG9yUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSNjcmVhdGVQcm9wZXJ0aWVzQ29tcG9zaXRlKG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZSwgaW50LCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuRGVjb3JhdG9yKQorCSAqLworCXB1YmxpYyBDb21wb3NpdGUgY3JlYXRlUHJvcGVydGllc0NvbXBvc2l0ZShmaW5hbCBDb21wb3NpdGUgcGFyZW50LCBmaW5hbCBpbnQgc3R5bGUsIGZpbmFsIERlY29yYXRvciBzZWxlY3RlZERlY29yYXRvciwgZmluYWwgU3RyaW5nIHBvcHVsYXRpb25JZGVudGlmaWVyKQorCXsJCisJCWZpbmFsIENvbG9yUHJvdmlkZXJQcm9wZXJ0aWVzQ29tcG9zaXRlIHByb3BlcnRpZXNDb21wb3NpdGUgPSBuZXcgQ29sb3JQcm92aWRlclByb3BlcnRpZXNDb21wb3NpdGUoCisJCQkJcGFyZW50LCBzdHlsZSk7CisJCXByb3BlcnRpZXNDb21wb3NpdGUuc2V0SW5pdGlhbFByb3BlcnR5TmFtZShnZXRQcmVmZXJlbmNlVmFsdWUoUHJlZmVyZW5jZUNvbnN0YW50cy5JTklUSUFMX0FUVFJJQlVURV9OQU1FX1NUUklOR19QUkVGRVJFTkNFKSk7CisJCXByb3BlcnRpZXNDb21wb3NpdGUuaW5pdGlhbGl6ZShzZWxlY3RlZERlY29yYXRvciwgcG9wdWxhdGlvbklkZW50aWZpZXIpOworCQlzZWxlY3RlZFByb3BlcnR5ID0gcHJvcGVydGllc0NvbXBvc2l0ZS5nZXRTZWxlY3RlZFByb3BlcnR5KCk7CisJCXByb3BlcnRpZXNDb21wb3NpdGUKKwkJCQkuYWRkUHJvcGVydHlTZWxlY3Rpb25MaXN0ZW5lcihuZXcgQ29sb3JQcm92aWRlclByb3BlcnRpZXNDb21wb3NpdGUuUHJvcGVydHlTZWxlY3Rpb25MaXN0ZW5lcigpIHsKKwkJCQkJcHVibGljIHZvaWQgcHJvcGVydHlTZWxlY3RlZCgKKwkJCQkJCQlmaW5hbCBQcm9wZXJ0eVNlbGVjdGlvbkV2ZW50IHByb3BlcnR5U2VsZWN0aW9uRXZlbnQpIHsKKwkJCQkJCWZpcmVQcm9wZXJ0eVNlbGVjdGlvbkxpc3RlbmVyKHByb3BlcnR5U2VsZWN0aW9uRXZlbnQuZ2V0UHJvcGVydHkoKSk7CisJCQkJCX0KKwkJCQl9KTsKKwkJdGhpcy5wcm9wZXJ0aWVzQ29tcG9zaXRlID0gcHJvcGVydGllc0NvbXBvc2l0ZTsKKwkJcmV0dXJuIHByb3BlcnRpZXNDb21wb3NpdGU7CisJfQorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnVpLmFkYXB0ZXJzLmNvbG9yLkFic3RyYWN0UmVsYXRpdmVWYWx1ZUNvbG9yUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSNjcmVhdGVDb2xvcnNMZWdlbmRDb21wb3NpdGUob3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlLAorCSAqICAgICAgaW50KQorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBDb21wb3NpdGUgY3JlYXRlQ29sb3JzTGVnZW5kQ29tcG9zaXRlKGZpbmFsIENvbXBvc2l0ZSBwYXJlbnQsCisJCQlmaW5hbCBpbnQgc3R5bGUpIHsKKwkJZmluYWwgQ29sb3JzTGVnZW5kQ29tcG9zaXRlIGNvbG9yc0xlZ2VuZENvbXBvc2l0ZSA9IG5ldyBDb2xvcnNMZWdlbmRDb21wb3NpdGUoCisJCQkJcGFyZW50LCBzdHlsZSk7CisJCWNvbG9yc0xlZ2VuZENvbXBvc2l0ZS5hZGRDb2xvckVudHJ5KAorCQkJCVByZWZlcmVuY2VDb25zdGFudHMuRk9SRUdST1VORF9DT0xPUl9MQUJFTF8xLAorCQkJCVZpc3VhbGl6YXRpb25QcmVmZXJlbmNlUGFnZS5GT1JFR1JPVU5EX0FUVFJJQlVURV9OQU1FXzFfU1RSSU5HKTsKKwkJY29sb3JzTGVnZW5kQ29tcG9zaXRlLmFkZENvbG9yRW50cnkoCisJCQkJUHJlZmVyZW5jZUNvbnN0YW50cy5GT1JFR1JPVU5EX0NPTE9SX0xBQkVMXzIsCisJCQkJVmlzdWFsaXphdGlvblByZWZlcmVuY2VQYWdlLkZPUkVHUk9VTkRfQVRUUklCVVRFX05BTUVfMl9TVFJJTkcpOworCQljb2xvcnNMZWdlbmRDb21wb3NpdGUuYWRkQ29sb3JFbnRyeSgKKwkJCQlQcmVmZXJlbmNlQ29uc3RhbnRzLkZPUkVHUk9VTkRfQ09MT1JfTEFCRUxfMywKKwkJCQlWaXN1YWxpemF0aW9uUHJlZmVyZW5jZVBhZ2UuRk9SRUdST1VORF9BVFRSSUJVVEVfTkFNRV8zX1NUUklORyk7CisJCWNvbG9yc0xlZ2VuZENvbXBvc2l0ZS5hZGRDb2xvckVudHJ5KAorCQkJCVByZWZlcmVuY2VDb25zdGFudHMuRk9SRUdST1VORF9DT0xPUl9MQUJFTF80LAorCQkJCVZpc3VhbGl6YXRpb25QcmVmZXJlbmNlUGFnZS5GT1JFR1JPVU5EX0FUVFJJQlVURV9OQU1FXzRfU1RSSU5HKTsKKwkJY29sb3JzTGVnZW5kQ29tcG9zaXRlLmFkZENvbG9yRW50cnkoCisJCQkJUHJlZmVyZW5jZUNvbnN0YW50cy5GT1JFR1JPVU5EX0NPTE9SX0xBQkVMXzUsCisJCQkJVmlzdWFsaXphdGlvblByZWZlcmVuY2VQYWdlLkZPUkVHUk9VTkRfQVRUUklCVVRFX05BTUVfNV9TVFJJTkcpOworCQljb2xvcnNMZWdlbmRDb21wb3NpdGUuYWRkQ29sb3JFbnRyeSgKKwkJCQlQcmVmZXJlbmNlQ29uc3RhbnRzLkZPUkVHUk9VTkRfQ09MT1JfTEFCRUxfNiwKKwkJCQlWaXN1YWxpemF0aW9uUHJlZmVyZW5jZVBhZ2UuRk9SRUdST1VORF9BVFRSSUJVVEVfTkFNRV82X1NUUklORyk7CisJCWNvbG9yc0xlZ2VuZENvbXBvc2l0ZS5hZGRDb2xvckVudHJ5KAorCQkJCVByZWZlcmVuY2VDb25zdGFudHMuRk9SRUdST1VORF9DT0xPUl9MQUJFTF83LAorCQkJCVZpc3VhbGl6YXRpb25QcmVmZXJlbmNlUGFnZS5GT1JFR1JPVU5EX0FUVFJJQlVURV9OQU1FXzdfU1RSSU5HKTsKKy8vCQljb2xvcnNMZWdlbmRDb21wb3NpdGUuYWRkQ29sb3JFbnRyeSgKKy8vCQkJCVByZWZlcmVuY2VDb25zdGFudHMuRk9SRUdST1VORF9DT0xPUl9MQUJFTF84LAorLy8JCQkJVmlzdWFsaXphdGlvblByZWZlcmVuY2VQYWdlLkZPUkVHUk9VTkRfQVRUUklCVVRFX05BTUVfOF9TVFJJTkcpOworLy8JCWNvbG9yc0xlZ2VuZENvbXBvc2l0ZS5hZGRDb2xvckVudHJ5KAorLy8JCQkJUHJlZmVyZW5jZUNvbnN0YW50cy5GT1JFR1JPVU5EX0NPTE9SX0xBQkVMXzksCisvLwkJCQlWaXN1YWxpemF0aW9uUHJlZmVyZW5jZVBhZ2UuRk9SRUdST1VORF9BVFRSSUJVVEVfTkFNRV85X1NUUklORyk7CisvLwkJY29sb3JzTGVnZW5kQ29tcG9zaXRlLmFkZENvbG9yRW50cnkoCisvLwkJCQlQcmVmZXJlbmNlQ29uc3RhbnRzLkZPUkVHUk9VTkRfQ09MT1JfTEFCRUxfMTAsCisvLwkJCQlWaXN1YWxpemF0aW9uUHJlZmVyZW5jZVBhZ2UuRk9SRUdST1VORF9BVFRSSUJVVEVfTkFNRV8xMF9TVFJJTkcpOworCQlyZXR1cm4gY29sb3JzTGVnZW5kQ29tcG9zaXRlOworCX0gLy8gY3JlYXRlQ29sb3JzTGVnZW5kQ29tcG9zaXRlCisKK30gLy8gSW50ZW5zaXR5Q29sb3JzTGFiZWxzTWFwcGluZ0NvbG9yUHJvdmlkZXJBZGFwdGVyRmFjdG9yeQpkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvYWRhcHRlcnMvY29sb3IvU0VJUlJlbGF0aXZlVmFsdWVDb2xvclByb3ZpZGVyLmphdmEgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9hZGFwdGVycy9jb2xvci9TRUlSUmVsYXRpdmVWYWx1ZUNvbG9yUHJvdmlkZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mN2YxNTNlCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvYWRhcHRlcnMvY29sb3IvU0VJUlJlbGF0aXZlVmFsdWVDb2xvclByb3ZpZGVyLmphdmEKQEAgLTAsMCArMSwyMyBAQAorLy8gU0VJUlJlbGF0aXZlVmFsdWVDb2xvclByb3ZpZGVyLmphdmEKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS51aS5hZGFwdGVycy5jb2xvcjsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKgorICogVGhpcyBpbnRlcmZhY2UgaXMgaW1wbGVtZW50ZWQgYnkgY2xhc3NlcyB0aGF0IHdpbGwgcHJvdmlkZSBhbiBTRUlSIHJlbGF0aXZlCisgKiB2YWx1ZSBmb3IgYSBzcGVjaWZpYyBhZGFwdGVkIG9iamVjdCAodXN1YWxseQorICoge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5Ob2RlfSkuCisgKi8KK3B1YmxpYyBpbnRlcmZhY2UgU0VJUlJlbGF0aXZlVmFsdWVDb2xvclByb3ZpZGVyIGV4dGVuZHMKKwkJUmVsYXRpdmVWYWx1ZUNvbG9yUHJvdmlkZXIgeworCS8vIE1hcmtlciBpbnRlcmZhY2UKK30vLyBTRUlSUmVsYXRpdmVWYWx1ZUNvbG9yUHJvdmlkZXIKZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL2FkYXB0ZXJzL2NvbG9yL1NFSVJSZWxhdGl2ZVZhbHVlQ29sb3JQcm92aWRlckFkYXB0ZXIuamF2YSBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL2FkYXB0ZXJzL2NvbG9yL1NFSVJSZWxhdGl2ZVZhbHVlQ29sb3JQcm92aWRlckFkYXB0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NjY4Y2IzCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvYWRhcHRlcnMvY29sb3IvU0VJUlJlbGF0aXZlVmFsdWVDb2xvclByb3ZpZGVyQWRhcHRlci5qYXZhCkBAIC0wLDAgKzEsODEgQEAKKy8vIFNFSVJSZWxhdGl2ZVZhbHVlQ29sb3JQcm92aWRlckFkYXB0ZXIuamF2YQorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnVpLmFkYXB0ZXJzLmNvbG9yOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkR5bmFtaWNOb2RlTGFiZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLk5vZGU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLk5vZGVMYWJlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnVpLmFkYXB0ZXJzLmNvbG9yLkFic3RyYWN0UmVsYXRpdmVWYWx1ZUNvbG9yUHJvdmlkZXJBZGFwdGVyRmFjdG9yeS5Qcm9wZXJ0eVNlbGVjdGlvbkxpc3RlbmVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ncmFwaGljcy5Db2xvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZ3JhcGhpY3MuR0M7CisKKy8qKgorICogVGhpcyBjbGFzcyBhZGFwdHMge0BsaW5rIE5vZGV9IG9iamVjdHMgdG8KKyAqIHtAbGluayBTRUlSUmVsYXRpdmVWYWx1ZUNvbG9yUHJvdmlkZXJ9IG9iamVjdC4KKyAqLworcHVibGljIGNsYXNzIFNFSVJSZWxhdGl2ZVZhbHVlQ29sb3JQcm92aWRlckFkYXB0ZXIgZXh0ZW5kcworCQlBYnN0cmFjdFJlbGF0aXZlVmFsdWVDb2xvclByb3ZpZGVyQWRhcHRlciAgaW1wbGVtZW50cyBQcm9wZXJ0eVNlbGVjdGlvbkxpc3RlbmVyeworCQorCXByaXZhdGUgSXRlbVByb3BlcnR5RGVzY3JpcHRvciBzZWxlY3RlZFByb3BlcnR5OworCisJLyoqCisJICogQ29uc3RydWN0b3IKKwkgKiBAcGFyYW0gc2VsZWN0ZWRQcm9wZXJ0eQorCSAqLworCXB1YmxpYyBTRUlSUmVsYXRpdmVWYWx1ZUNvbG9yUHJvdmlkZXJBZGFwdGVyKEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3Igc2VsZWN0ZWRQcm9wZXJ0eSkgeworCQlzdXBlcigpOworCQl0aGlzLnNlbGVjdGVkUHJvcGVydHkgPSBzZWxlY3RlZFByb3BlcnR5OworCX0gLy8gU0VJUlJlbGF0aXZlVmFsdWVDb2xvclByb3ZpZGVyQWRhcHRlcgorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnVpLmFkYXB0ZXJzLmNvbG9yLkFic3RyYWN0UmVsYXRpdmVWYWx1ZUNvbG9yUHJvdmlkZXJBZGFwdGVyI2dldFJlbGF0aXZlVmFsdWUoKQorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBmbG9hdCBnZXRSZWxhdGl2ZVZhbHVlKCkgeworCisJCWZpbmFsIE5vZGUgbm9kZSA9IChOb2RlKSBnZXRUYXJnZXQoKTsKKwkJCisJCWZvciAoZmluYWwgTm9kZUxhYmVsIGxhYmVsIDogbm9kZS5nZXRMYWJlbHMoKSkgeworCQkJaWYgKGxhYmVsIGluc3RhbmNlb2YgRHluYW1pY05vZGVMYWJlbCkgeworCQkJCUR5bmFtaWNOb2RlTGFiZWwgbm9kZUxhYmVsID0gKER5bmFtaWNOb2RlTGFiZWwpbGFiZWw7CisJCQkJaWYgKG5vZGVMYWJlbC5nZXREZWNvcmF0b3IoKSA9PSBzZWxlY3RlZERlY29yYXRvcikgeworCQkJCQlzZXRSVlBUYXJnZXQobm9kZUxhYmVsKTsKKwkJCQkJcmV0dXJuIChmbG9hdCkgcnZwLmdldFJlbGF0aXZlVmFsdWUoc2VsZWN0ZWRQcm9wZXJ0eSk7CisJCQkJfQorCQkJfQorCQl9CisKKwkJcmV0dXJuIDA7IC8vIFdlIHNob3VsZG4ndCByZWFjaCB0aGlzIHBvaW50CisJfSAvLyBnZXRSZWxhdGl2ZVZhbHVlCisJCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnVpLmFkYXB0ZXJzLmNvbG9yLkFic3RyYWN0UmVsYXRpdmVWYWx1ZUNvbG9yUHJvdmlkZXJBZGFwdGVyI3VwZGF0ZUdDKG9yZy5lY2xpcHNlLnN3dC5ncmFwaGljcy5HQywgZmxvYXQsIGJvb2xlYW4pCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgdXBkYXRlR0MoR0MgZ2NUb1VwZGF0ZSwgZmxvYXQgZ2FpbkZhY3RvciwgYm9vbGVhbiB1c2VMb2dTY2FsaW5nKSB7CisJCWRldmljZSA9IGdjVG9VcGRhdGUuZ2V0RGV2aWNlKCk7CisJCWRvdWJsZSByZWxhdGl2ZVZhbHVlID0gZ2V0UmVsYXRpdmVWYWx1ZSgpOworCQlkb3VibGUgZ2FpbmVkUmVsYXRpdmVWYWx1ZSA9IGdhaW5GYWN0b3IgKiByZWxhdGl2ZVZhbHVlOworCQlDb2xvciBmb3JlZ3JvdW5kID0gZ2V0Q29sb3JGb3JSZWxhdGl2ZVZhbHVlKGdhaW5lZFJlbGF0aXZlVmFsdWUpOworCQlnY1RvVXBkYXRlLnNldEJhY2tncm91bmQoZm9yZWdyb3VuZCk7CisJfQorCQorCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS51aS5hZGFwdGVycy5jb2xvci5JbnRlbnNpdHlDb2xvcnNMYWJlbHNNYXBwaW5nQ29sb3JQcm92aWRlckFkYXB0ZXJGYWN0b3J5LlByb3BlcnR5U2VsZWN0aW9uTGlzdGVuZXIjcHJvcGVydHlTZWxlY3RlZChvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JdGVtUHJvcGVydHlEZXNjcmlwdG9yKQorCSAqLworCXB1YmxpYyB2b2lkIHByb3BlcnR5U2VsZWN0ZWQoSXRlbVByb3BlcnR5RGVzY3JpcHRvciBzZWxlY3RlZFByb3BlcnR5KSB7CisJCXRoaXMuc2VsZWN0ZWRQcm9wZXJ0eSA9IHNlbGVjdGVkUHJvcGVydHk7CQkKKwl9CisKK30gLy8gU0VJUlJlbGF0aXZlVmFsdWVDb2xvclByb3ZpZGVyQWRhcHRlcgpkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvYWRhcHRlcnMvY29sb3IvU0VJUlJlbGF0aXZlVmFsdWVDb2xvclByb3ZpZGVyQWRhcHRlckZhY3RvcnkuamF2YSBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL2FkYXB0ZXJzL2NvbG9yL1NFSVJSZWxhdGl2ZVZhbHVlQ29sb3JQcm92aWRlckFkYXB0ZXJGYWN0b3J5LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTQ1Yzk5MAotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL2FkYXB0ZXJzL2NvbG9yL1NFSVJSZWxhdGl2ZVZhbHVlQ29sb3JQcm92aWRlckFkYXB0ZXJGYWN0b3J5LmphdmEKQEAgLTAsMCArMSwxMjEgQEAKKy8vIFNFSVJSZWxhdGl2ZVZhbHVlQ29sb3JQcm92aWRlckFkYXB0ZXJGYWN0b3J5LmphdmEKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS51aS5hZGFwdGVycy5jb2xvcjsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5BZGFwdGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5Ob2RlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5EZWNvcmF0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS51aS5wcmVmZXJlbmNlcy5QcmVmZXJlbmNlQ29uc3RhbnRzOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udWkud2lkZ2V0cy5Db2xvclByb3ZpZGVyUHJvcGVydGllc0NvbXBvc2l0ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnVpLndpZGdldHMuQ29sb3JQcm92aWRlclByb3BlcnRpZXNDb21wb3NpdGUuUHJvcGVydHlTZWxlY3Rpb25FdmVudDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGU7CisKKy8qKgorICogVGhpcyBmYWN0b3J5IGNyZWF0ZSBhZGFwdGVycyB0aGF0IGFkYXB0IHtAbGluayAgTm9kZX1zIHRvCisgKiB7QGxpbmsgU0VJUlJlbGF0aXZlVmFsdWVDb2xvclByb3ZpZGVyfXMuCisgKi8KK3B1YmxpYyBjbGFzcyBTRUlSUmVsYXRpdmVWYWx1ZUNvbG9yUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSBleHRlbmRzCisJCUFic3RyYWN0UmVsYXRpdmVWYWx1ZUNvbG9yUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSB7IAorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGgudXRpbC5HcmFwaEFkYXB0ZXJGYWN0b3J5I2NyZWF0ZU5vZGVBZGFwdGVyKCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVOb2RlQWRhcHRlcigpIHsKKwkJZmluYWwgU0VJUlJlbGF0aXZlVmFsdWVDb2xvclByb3ZpZGVyQWRhcHRlciBhZGFwdGVyID0gCisJCQluZXcgU0VJUlJlbGF0aXZlVmFsdWVDb2xvclByb3ZpZGVyQWRhcHRlcihzZWxlY3RlZFByb3BlcnR5KTsKKwkJYWRkUHJvcGVydHlTZWxlY3Rpb25MaXN0ZW5lcihhZGFwdGVyKTsKKwkJYWRhcHRlci5wcm9wZXJ0eVNlbGVjdGVkKHNlbGVjdGVkUHJvcGVydHkpOworCQlyZXR1cm4gYWRhcHRlcjsKKwl9IC8vIGNyZWF0ZU5vZGVBZGFwdGVyCisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0udWkuYWRhcHRlcnMuY29sb3IuQWJzdHJhY3RSZWxhdGl2ZVZhbHVlQ29sb3JQcm92aWRlckFkYXB0ZXJGYWN0b3J5I2lzRmFjdG9yeUZvclR5cGUoamF2YS5sYW5nLk9iamVjdCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgYm9vbGVhbiBpc0ZhY3RvcnlGb3JUeXBlKGZpbmFsIE9iamVjdCB0eXBlKSB7CisJCXJldHVybiB0eXBlID09IFNFSVJSZWxhdGl2ZVZhbHVlQ29sb3JQcm92aWRlci5jbGFzczsKKwl9IC8vIGlzRmFjdG9yeUZvclR5cGUKKwkKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0udWkuYWRhcHRlcnMuY29sb3IuSUNvbG9yUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSNjcmVhdGVQcm9wZXJ0aWVzQ29tcG9zaXRlKG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZSwgaW50LCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuRGVjb3JhdG9yKQorCSAqLworCXB1YmxpYyBDb21wb3NpdGUgY3JlYXRlUHJvcGVydGllc0NvbXBvc2l0ZShmaW5hbCBDb21wb3NpdGUgcGFyZW50LCBmaW5hbCBpbnQgc3R5bGUsIGZpbmFsIERlY29yYXRvciBzZWxlY3RlZERlY29yYXRvciwgZmluYWwgU3RyaW5nIHBvcHVsYXRpb25JZGVudGlmaWVyKQorCXsJCisJCWZpbmFsIENvbG9yUHJvdmlkZXJQcm9wZXJ0aWVzQ29tcG9zaXRlIHByb3BlcnRpZXNDb21wb3NpdGUgPSBuZXcgQ29sb3JQcm92aWRlclByb3BlcnRpZXNDb21wb3NpdGUoCisJCQkJcGFyZW50LCBzdHlsZSk7CisJCXByb3BlcnRpZXNDb21wb3NpdGUuc2V0SW5pdGlhbFByb3BlcnR5TmFtZShnZXRQcmVmZXJlbmNlVmFsdWUoUHJlZmVyZW5jZUNvbnN0YW50cy5JTklUSUFMX0FUVFJJQlVURV9OQU1FX1NUUklOR19QUkVGRVJFTkNFKSk7CisJCXByb3BlcnRpZXNDb21wb3NpdGUuaW5pdGlhbGl6ZShzZWxlY3RlZERlY29yYXRvciwgcG9wdWxhdGlvbklkZW50aWZpZXIpOworCQlzZWxlY3RlZFByb3BlcnR5ID0gcHJvcGVydGllc0NvbXBvc2l0ZS5nZXRTZWxlY3RlZFByb3BlcnR5KCk7CisJCXByb3BlcnRpZXNDb21wb3NpdGUKKwkJCQkuYWRkUHJvcGVydHlTZWxlY3Rpb25MaXN0ZW5lcihuZXcgQ29sb3JQcm92aWRlclByb3BlcnRpZXNDb21wb3NpdGUuUHJvcGVydHlTZWxlY3Rpb25MaXN0ZW5lcigpIHsKKwkJCQkJcHVibGljIHZvaWQgcHJvcGVydHlTZWxlY3RlZCgKKwkJCQkJCQlmaW5hbCBQcm9wZXJ0eVNlbGVjdGlvbkV2ZW50IHByb3BlcnR5U2VsZWN0aW9uRXZlbnQpIHsKKwkJCQkJCWZpcmVQcm9wZXJ0eVNlbGVjdGlvbkxpc3RlbmVyKHByb3BlcnR5U2VsZWN0aW9uRXZlbnQuZ2V0UHJvcGVydHkoKSk7CisJCQkJCX0KKwkJCQl9KTsKKwkJdGhpcy5wcm9wZXJ0aWVzQ29tcG9zaXRlID0gcHJvcGVydGllc0NvbXBvc2l0ZTsKKwkJcmV0dXJuIHByb3BlcnRpZXNDb21wb3NpdGU7CisJfQorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnVpLmFkYXB0ZXJzLmNvbG9yLkFic3RyYWN0UmVsYXRpdmVWYWx1ZUNvbG9yUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSNjcmVhdGVDb2xvcnNMZWdlbmRDb21wb3NpdGUob3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlLAorCSAqICAgICAgaW50KQorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBDb21wb3NpdGUgY3JlYXRlQ29sb3JzTGVnZW5kQ29tcG9zaXRlKGZpbmFsIENvbXBvc2l0ZSBwYXJlbnQsCisJCQlmaW5hbCBpbnQgc3R5bGUpIHsKKwkJZmluYWwgQ29sb3JzTGVnZW5kQ29tcG9zaXRlIGNvbG9yc0xlZ2VuZENvbXBvc2l0ZSA9IG5ldyBDb2xvcnNMZWdlbmRDb21wb3NpdGUoCisJCQkJcGFyZW50LCBzdHlsZSk7CisJCWNvbG9yc0xlZ2VuZENvbXBvc2l0ZQorCQkJCS5hZGRDb2xvckVudHJ5KAorCQkJCQkJUmVsYXRpdmVWYWx1ZUNvbG9yUHJlZmVyZW5jZXMuRk9SRUdST1VORF9DT0xPUl9aRVJPX1JFTEFUSVZFX1ZBTFVFX0lELAorCQkJCQkJIlJlbGF0aXZlIHZhbHVlIGlzIDAiKTsKKwkJY29sb3JzTGVnZW5kQ29tcG9zaXRlLmFkZENvbG9yRW50cnkoCisJCQkJUmVsYXRpdmVWYWx1ZUNvbG9yUHJlZmVyZW5jZXMuRk9SRUdST1VORF9DT0xPUl9SQU5HRV8xX0lELAorCQkJCSJSZWxhdGl2ZSB2YWx1ZSBiZXR3ZWVuIDAgYW5kIDAuMSIpOworCQljb2xvcnNMZWdlbmRDb21wb3NpdGUuYWRkQ29sb3JFbnRyeSgKKwkJCQlSZWxhdGl2ZVZhbHVlQ29sb3JQcmVmZXJlbmNlcy5GT1JFR1JPVU5EX0NPTE9SX1JBTkdFXzJfSUQsCisJCQkJIlJlbGF0aXZlIHZhbHVlIGJldHdlZW4gMC4xIGFuZCAwLjIiKTsKKwkJY29sb3JzTGVnZW5kQ29tcG9zaXRlLmFkZENvbG9yRW50cnkoCisJCQkJUmVsYXRpdmVWYWx1ZUNvbG9yUHJlZmVyZW5jZXMuRk9SRUdST1VORF9DT0xPUl9SQU5HRV8zX0lELAorCQkJCSJSZWxhdGl2ZSB2YWx1ZSBiZXR3ZWVuIDAuMiBhbmQgMC4zIik7CisJCWNvbG9yc0xlZ2VuZENvbXBvc2l0ZS5hZGRDb2xvckVudHJ5KAorCQkJCVJlbGF0aXZlVmFsdWVDb2xvclByZWZlcmVuY2VzLkZPUkVHUk9VTkRfQ09MT1JfUkFOR0VfNF9JRCwKKwkJCQkiUmVsYXRpdmUgdmFsdWUgYmV0d2VlbiAwLjMgYW5kIDAuNCIpOworCQljb2xvcnNMZWdlbmRDb21wb3NpdGUuYWRkQ29sb3JFbnRyeSgKKwkJCQlSZWxhdGl2ZVZhbHVlQ29sb3JQcmVmZXJlbmNlcy5GT1JFR1JPVU5EX0NPTE9SX1JBTkdFXzVfSUQsCisJCQkJIlJlbGF0aXZlIHZhbHVlIGJldHdlZW4gMC40IGFuZCAwLjUiKTsKKwkJY29sb3JzTGVnZW5kQ29tcG9zaXRlLmFkZENvbG9yRW50cnkoCisJCQkJUmVsYXRpdmVWYWx1ZUNvbG9yUHJlZmVyZW5jZXMuRk9SRUdST1VORF9DT0xPUl9SQU5HRV82X0lELAorCQkJCSJSZWxhdGl2ZSB2YWx1ZSBiZXR3ZWVuIDAuNSBhbmQgMC42Iik7CisJCWNvbG9yc0xlZ2VuZENvbXBvc2l0ZS5hZGRDb2xvckVudHJ5KAorCQkJCVJlbGF0aXZlVmFsdWVDb2xvclByZWZlcmVuY2VzLkZPUkVHUk9VTkRfQ09MT1JfUkFOR0VfN19JRCwKKwkJCQkiUmVsYXRpdmUgdmFsdWUgYmV0d2VlbiAwLjYgYW5kIDAuNyIpOworCQljb2xvcnNMZWdlbmRDb21wb3NpdGUuYWRkQ29sb3JFbnRyeSgKKwkJCQlSZWxhdGl2ZVZhbHVlQ29sb3JQcmVmZXJlbmNlcy5GT1JFR1JPVU5EX0NPTE9SX1JBTkdFXzhfSUQsCisJCQkJIlJlbGF0aXZlIHZhbHVlIGJldHdlZW4gMC43IGFuZCAwLjgiKTsKKwkJY29sb3JzTGVnZW5kQ29tcG9zaXRlLmFkZENvbG9yRW50cnkoCisJCQkJUmVsYXRpdmVWYWx1ZUNvbG9yUHJlZmVyZW5jZXMuRk9SRUdST1VORF9DT0xPUl9SQU5HRV85X0lELAorCQkJCSJSZWxhdGl2ZSB2YWx1ZSBiZXR3ZWVuIDAuOCBhbmQgMC45Iik7CisJCWNvbG9yc0xlZ2VuZENvbXBvc2l0ZS5hZGRDb2xvckVudHJ5KAorCQkJCVJlbGF0aXZlVmFsdWVDb2xvclByZWZlcmVuY2VzLkZPUkVHUk9VTkRfQ09MT1JfUkFOR0VfMTBfSUQsCisJCQkJIlJlbGF0aXZlIHZhbHVlIGJldHdlZW4gMC45IGFuZCAxLjAiKTsKKwkJY29sb3JzTGVnZW5kQ29tcG9zaXRlCisJCQkJLmFkZENvbG9yRW50cnkoCisJCQkJCQlSZWxhdGl2ZVZhbHVlQ29sb3JQcmVmZXJlbmNlcy5GT1JFR1JPVU5EX0NPTE9SX01BWElNVU1fUkVMQVRJVkVfVkFMVUVfSUQsCisJCQkJCQkiUmVsYXRpdmUgdmFsdWUgaXMgMSAobWF4aW11bSkiKTsKKwkJcmV0dXJuIGNvbG9yc0xlZ2VuZENvbXBvc2l0ZTsKKwl9IC8vIGNyZWF0ZUNvbG9yc0xlZ2VuZENvbXBvc2l0ZQorCit9IC8vIFNFSVJSZWxhdGl2ZVZhbHVlQ29sb3JQcm92aWRlckFkYXB0ZXJGYWN0b3J5CmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9hZGFwdGVycy9kaXNlYXNlbW9kZWxwcm9wZXJ0eWVkaXRvci9EaXNlYXNlTW9kZWxQcm9wZXJ0eUVkaXRvci5qYXZhIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvYWRhcHRlcnMvZGlzZWFzZW1vZGVscHJvcGVydHllZGl0b3IvRGlzZWFzZU1vZGVsUHJvcGVydHlFZGl0b3IuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MTYxMjMyCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvYWRhcHRlcnMvZGlzZWFzZW1vZGVscHJvcGVydHllZGl0b3IvRGlzZWFzZU1vZGVsUHJvcGVydHlFZGl0b3IuamF2YQpAQCAtMCwwICsxLDIxOCBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnVpLmFkYXB0ZXJzLmRpc2Vhc2Vtb2RlbHByb3BlcnR5ZWRpdG9yOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGphdmEudXRpbC5NYXA7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FU3RydWN0dXJhbEZlYXR1cmU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLkRpc2Vhc2VNb2RlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmRQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udWkuZWRpdG9ycy5HZW5lcmljUHJvcGVydHlFZGl0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS51aS53aXphcmRzLkRpc2Vhc2VXaXphcmRNZXNzYWdlczsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLk1vZGlmeUxpc3RlbmVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5UZXh0OworCithYnN0cmFjdCBwdWJsaWMgY2xhc3MgRGlzZWFzZU1vZGVsUHJvcGVydHlFZGl0b3IgZXh0ZW5kcyBHZW5lcmljUHJvcGVydHlFZGl0b3IgeworCisJLyoqCisJICogQHBhcmFtIGZlYXR1cmUKKwkgKiBAcmV0dXJuIDxjb2RlPnRydWU8L2NvZGU+IGlmIHRoZSBmZWF0dXJlIGlzIGEgZHVibGluIGNvcmUgZmVhdHVyZSB0aGF0CisJICogICAgICAgICBpcyBzcGVjaWZpZWQgYnkgYSB1c2VyLgorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBib29sZWFuIGlzVXNlclNwZWNpZmllZFByb3BlcnR5KGZpbmFsIEVTdHJ1Y3R1cmFsRmVhdHVyZSBmZWF0dXJlKSB7CisJCWJvb2xlYW4gcmV0VmFsdWUgPSBmYWxzZTsKKwkJZmluYWwgRUNsYXNzIGNvbnRhaW5pbmdDbGFzcyA9IGZlYXR1cmUuZ2V0RUNvbnRhaW5pbmdDbGFzcygpOworCQkvLyBJcyBpdCBhIGRpc2Vhc2UgbW9kZWwgcHJvcGVydHk/CisJCWlmIChjb250YWluaW5nQ2xhc3MuZXF1YWxzKFN0YW5kYXJkUGFja2FnZS5lSU5TVEFOQ0UuZ2V0RGlzZWFzZU1vZGVsKCkpCisJCQkJfHwgY29udGFpbmluZ0NsYXNzLmdldEVBbGxTdXBlclR5cGVzKCkuY29udGFpbnMoCisJCQkJCQlTdGFuZGFyZFBhY2thZ2UuZUlOU1RBTkNFLmdldERpc2Vhc2VNb2RlbCgpKSkgeworCQkJLy8gRGVwcmVjYXRlZCwgZG9uJ3QgdXNlIQorCQkJaWYoZmVhdHVyZS5nZXROYW1lKCkuZXF1YWxzKCJmaW5pdGVEaWZmZXJlbmNlIikKKwkJCQkJfHwgZmVhdHVyZS5nZXROYW1lKCkuZXF1YWxzKCJyZWxhdGl2ZVRvbGVyYW5jZSIpKSByZXR1cm4gZmFsc2U7CisJCQkvLyBZZXMKKwkJCXJldFZhbHVlID0gdHJ1ZTsKKwkJfSAvLyBpZiBhIGRpc2Vhc2UgbW9kZWwgcHJvcGVydHkKKwkJcmV0dXJuIHJldFZhbHVlOworCX0gLy8gaXNVc2VyU3BlY2lmaWVkRGlzZWFzZU1vZGVsUHJvcGVydHkKKworCisJcHVibGljIERpc2Vhc2VNb2RlbFByb3BlcnR5RWRpdG9yKENvbXBvc2l0ZSBwYXJlbnQsIGludCBzdHlsZSwgSVByb2plY3QgcHJvamVjdCkgeworCQlzdXBlcihwYXJlbnQsc3R5bGUsIHByb2plY3QpOworCX0KKworCS8qKgorCSAqIENyZWF0ZSB0aGUgY29tcG9zaXRlCisJICogCisJICogQHBhcmFtIHBhcmVudAorCSAqIEBwYXJhbSBzdHlsZQorCSAqIEBwYXJhbSBwcm9qZWN0VmFsaWRhdG9yCisJICovCisJcHVibGljIERpc2Vhc2VNb2RlbFByb3BlcnR5RWRpdG9yKGZpbmFsIENvbXBvc2l0ZSBwYXJlbnQsIGZpbmFsIGludCBzdHlsZSwKKwkJCWZpbmFsIERpc2Vhc2VNb2RlbCBkaXNlYXNlTW9kZWwsCisJCQlmaW5hbCBNb2RpZnlMaXN0ZW5lciBwcm9qZWN0VmFsaWRhdG9yLCBJUHJvamVjdCBwcm9qZWN0KSB7CisJCXN1cGVyKHBhcmVudCwgc3R5bGUsIGRpc2Vhc2VNb2RlbCwgcHJvamVjdFZhbGlkYXRvciwgcHJvamVjdCk7CisJfQorCQorCXB1YmxpYyB2b2lkIHBvcHVsYXRlKERpc2Vhc2VNb2RlbCBkaXNlYXNlTW9kZWwpIHsKKwkJZm9yIChmaW5hbCBNYXAuRW50cnk8RVN0cnVjdHVyYWxGZWF0dXJlLCBUZXh0PiBlbnRyeSA6IG1hcC5lbnRyeVNldCgpKSB7CisJCQlzd2l0Y2ggKGVudHJ5LmdldEtleSgpLmdldEZlYXR1cmVJRCgpKSB7CisJCQljYXNlIFN0YW5kYXJkUGFja2FnZS5ESVNFQVNFX01PREVMX19ESVNFQVNFX05BTUU6CisJCQkJZGlzZWFzZU1vZGVsLnNldERpc2Vhc2VOYW1lKGVudHJ5LmdldFZhbHVlKCkuZ2V0VGV4dCgpKTsKKwkJCQlicmVhazsKKwkJCWNhc2UgU3RhbmRhcmRQYWNrYWdlLkRJU0VBU0VfTU9ERUxfX1BPUFVMQVRJT05fSURFTlRJRklFUjoKKwkJCQlkaXNlYXNlTW9kZWwKKwkJCQkJCS5zZXRQb3B1bGF0aW9uSWRlbnRpZmllcihlbnRyeS5nZXRWYWx1ZSgpLmdldFRleHQoKSk7CisJCQkJYnJlYWs7CisJCQljYXNlIFN0YW5kYXJkUGFja2FnZS5ESVNFQVNFX01PREVMX19USU1FX1BFUklPRDoKKwkJCQlkaXNlYXNlTW9kZWwuc2V0VGltZVBlcmlvZChMb25nLnBhcnNlTG9uZyhlbnRyeS5nZXRWYWx1ZSgpCisJCQkJCQkuZ2V0VGV4dCgpKSk7CisJCQkJYnJlYWs7CisKKwkJCWRlZmF1bHQ6CisJCQkJYnJlYWs7CisJCQl9IC8vIHN3aXRjaAorCQl9IC8vIGZvciBlYWNoIE1hcC5lbnRyeQorCX0KKworCUBPdmVycmlkZQorCXB1YmxpYyBib29sZWFuIHZhbGlkYXRlKCkgeworCQlib29sZWFuIHJldFZhbHVlID0gdHJ1ZTsKKwkJLy8gRGlzZWFzZSBuYW1lPworCQlpZiAocmV0VmFsdWUpIHsKKwkJCS8vIFllcworCQkJZmluYWwgVGV4dCB0ZXh0ID0gbWFwCisJCQkJCS5nZXQoU3RhbmRhcmRQYWNrYWdlLkxpdGVyYWxzLkRJU0VBU0VfTU9ERUxfX0RJU0VBU0VfTkFNRSk7CisJCQlyZXRWYWx1ZSA9ICF0ZXh0LmdldFRleHQoKS5lcXVhbHMoIiIpOyAvLyROT04tTkxTLTEkCisJCQkvLyBub3RoaW5nPworCQkJaWYgKCFyZXRWYWx1ZSkgeworCQkJCS8vIFllcworCQkJCWVycm9yTWVzc2FnZSA9IERpc2Vhc2VXaXphcmRNZXNzYWdlcy5nZXRTdHJpbmcoIk5EaXpXaXpFcnIwIik7IC8vJE5PTi1OTFMtMSQKKwkJCX0gLy8gaWYKKwkJfSAvLyBpZgorCisJCS8vIFBvcHVsYXRpb24/CisJCWlmIChyZXRWYWx1ZSkgeworCQkJLy8gWWVzCisJCQlmaW5hbCBUZXh0IHRleHQgPSBtYXAKKwkJCQkJLmdldChTdGFuZGFyZFBhY2thZ2UuTGl0ZXJhbHMuRElTRUFTRV9NT0RFTF9fUE9QVUxBVElPTl9JREVOVElGSUVSKTsKKwkJCXJldFZhbHVlID0gIXRleHQuZ2V0VGV4dCgpLmVxdWFscygiIik7IC8vJE5PTi1OTFMtMSQKKwkJCS8vIG5vdGhpbmc/CisJCQlpZiAoIXJldFZhbHVlKSB7CisJCQkJLy8gWWVzCisJCQkJZXJyb3JNZXNzYWdlID0gRGlzZWFzZVdpemFyZE1lc3NhZ2VzLmdldFN0cmluZygiTkRpeldpekVycjEiKTsgLy8kTk9OLU5MUy0xJAorCQkJfSAvLyBpZgorCQl9IC8vIGlmCisKKwkJLy8gVGltZSBQZXJpb2QKKwkJLy8gUmlnaHQgbm93IGl0IGlzIHNwZWNpZmllZCBpbiBtaWxsaXNlY29uZHMKKwkJaWYgKHJldFZhbHVlKSB7CisJCQkvLyBZZXMKKwkJCWZpbmFsIFRleHQgdGV4dCA9IG1hcAorCQkJCQkuZ2V0KFN0YW5kYXJkUGFja2FnZS5MaXRlcmFscy5ESVNFQVNFX01PREVMX19USU1FX1BFUklPRCk7CisJCQlyZXRWYWx1ZSA9ICF0ZXh0LmdldFRleHQoKS5lcXVhbHMoIiIpOyAvLyROT04tTkxTLTEkCisJCQkvLyBub3RoaW5nPworCQkJaWYgKCFyZXRWYWx1ZSkgeworCQkJCS8vIFllcworCQkJCWVycm9yTWVzc2FnZSA9IERpc2Vhc2VXaXphcmRNZXNzYWdlcy5nZXRTdHJpbmcoIk5EaXpXaXpFcnIyIik7IC8vJE5PTi1OTFMtMSQKKwkJCX0gLy8gaWYKKwkJCWVsc2UgeworCQkJCS8vIE5vCisJCQkJLy8gSXMgaXQgYSB2YWxpZCB2YWx1ZT8KKwkJCQlyZXRWYWx1ZSA9IGlzVmFsaWRMb25nVmFsdWUodGV4dC5nZXRUZXh0KCksIDEpOworCQkJCWlmICghcmV0VmFsdWUpIHsKKwkJCQkJLy8gTm8KKwkJCQkJZXJyb3JNZXNzYWdlID0gRGlzZWFzZVdpemFyZE1lc3NhZ2VzCisJCQkJCQkJLmdldFN0cmluZygiTkRpeldpekVycjMiKTsgLy8kTk9OLU5MUy0xJAorCQkJCX0gLy8gaWYKKwkJCX0KKwkJfSAvLyBpZiB0aW1lIHBlcmlvZAorCisJCS8qKgorCQkgKiBUaGVzZSBmaWVsZHMgaGFzIGJlZW4gbW92ZWQgdG8gUG9wdWxhdGlvbiBNb2RlbAorCQkgKi8KKwkJCisJCS8vIEJhY2tncm91bmQgbW9ydGFsaXR5IHJhdGU/CisvKgkJaWYgKHJldFZhbHVlKSB7CisJCQkvLyBZZXMKKwkJCWZpbmFsIFRleHQgdGV4dCA9IG1hcAorCQkJCQkuZ2V0KFN0YW5kYXJkUGFja2FnZS5MaXRlcmFscy5ESVNFQVNFX01PREVMX19CQUNLR1JPVU5EX01PUlRBTElUWV9SQVRFKTsKKwkJCXJldFZhbHVlID0gIXRleHQuZ2V0VGV4dCgpLmVxdWFscygiIik7IC8vJE5PTi1OTFMtMSQKKwkJCS8vIG5vdGhpbmc/CisJCQlpZiAoIXJldFZhbHVlKSB7CisJCQkJLy8gWWVzCisJCQkJZXJyb3JNZXNzYWdlID0gRGlzZWFzZVdpemFyZE1lc3NhZ2VzLmdldFN0cmluZygiTkRpeldpekVycjQiKTsgLy8kTk9OLU5MUy0xJAorCQkJfSAvLyBpZgorCQkJZWxzZSB7CisJCQkJLy8gTm8KKwkJCQkvLyBJcyBpdCBhIHZhbGlkIHZhbHVlID4gMD8KKwkJCQlyZXRWYWx1ZSA9IGlzVmFsaWRWYWx1ZSh0ZXh0LmdldFRleHQoKSwgMC4wKTsKKwkJCQlpZiAoIXJldFZhbHVlKSB7CisJCQkJCS8vIE5vCisJCQkJCWVycm9yTWVzc2FnZSA9IERpc2Vhc2VXaXphcmRNZXNzYWdlcworCQkJCQkJCS5nZXRTdHJpbmcoIk5EaXpXaXpFcnI1Iik7IC8vJE5PTi1OTFMtMSQKKwkJCQl9IC8vIGlmCisJCQl9CisJCX0gLy8gaWYgQmFja2dyb3VuZCBtb3J0YWxpdHkgcmF0ZQorKi8JCQorCQkKKwkJLyoqCisJCSAqIE1BRCA3LzE1LzIwMDkKKwkJICogUmVsYXRpdmUgdG9sZXJhbmNlIGlzIG5vIGxvbmdlciBuZWVkZWQgaW4gdGhlIGRpc2Vhc2UgbW9kZWwgZWRpdG9yCisJCSAqLworLy8JCS8vIFJlbGF0aXZlIHRvbGVyYW5jZQorLy8JCWlmIChyZXRWYWx1ZSkgeworLy8JCQkvLyBZZXMKKy8vCQkJZmluYWwgVGV4dCB0ZXh0ID0gbWFwCisvLwkJCQkJLmdldChTdGFuZGFyZFBhY2thZ2UuTGl0ZXJhbHMuRElTRUFTRV9NT0RFTF9fUkVMQVRJVkVfVE9MRVJBTkNFKTsKKy8vCQkJcmV0VmFsdWUgPSAhdGV4dC5nZXRUZXh0KCkuZXF1YWxzKCIiKTsgLy8kTk9OLU5MUy0xJAorLy8JCQkvLyBub3RoaW5nPworLy8JCQlpZiAoIXJldFZhbHVlKSB7CisvLwkJCQkvLyBZZXMKKy8vCQkJCWVycm9yTWVzc2FnZSA9IERpc2Vhc2VXaXphcmRNZXNzYWdlcy5nZXRTdHJpbmcoIk5EaXpXaXpFcnIyMiIpOyAvLyROT04tTkxTLTEkCisvLwkJCX0gLy8gaWYKKy8vCQkJZWxzZSB7CisvLwkJCQkvLyBObworLy8JCQkJLy8gSXMgaXQgYSB2YWxpZCB2YWx1ZSA8IDAuMSBhbmQgPiAwPworLy8JCQkJcmV0VmFsdWUgPSBpc1ZhbGlkUmVsYXRpdmVUb2xlcmFuY2UodGV4dC5nZXRUZXh0KCksIDAuMSk7CisvLwkJCQlpZiAoIXJldFZhbHVlKSB7CisvLwkJCQkJLy8gTm8KKy8vCQkJCQllcnJvck1lc3NhZ2UgPSBEaXNlYXNlV2l6YXJkTWVzc2FnZXMKKy8vCQkJCQkJCS5nZXRTdHJpbmcoIk5EaXpXaXpFcnIyMyIpOyAvLyROT04tTkxTLTEkCisvLwkJCQl9IC8vIGlmCisvLwkJCX0KKy8vCQl9IC8vIGlmIEJhY2tncm91bmQgbW9ydGFsaXR5IHJhdGUKKwkJCisJCS8qKgorCQkgKiBFbmQgcmVtb3ZlIHJlbGF0aXZlIHRvbGVyYW5jZSBmcm9tIGRpc2Vhc2UgbW9kZWwgZWRpdG9yCisJCSAqLworCQlyZXR1cm4gcmV0VmFsdWU7CisJfSAvLyB2YWxpZGF0ZQorCisJCisJCisJCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgZGlzcG9zZSgpIHsKKwkJc3VwZXIuZGlzcG9zZSgpOworCX0KKworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIGNoZWNrU3ViY2xhc3MoKSB7CisJCS8vIERpc2FibGUgdGhlIGNoZWNrIHRoYXQgcHJldmVudHMgc3ViLWNsYXNzaW5nIG9mIFNXVCBjb21wb25lbnRzCisJfQorCisKK30gLy8gRGlzZWFzZU1vZGVsUHJvcGVydHlFZGl0b3IKZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL2FkYXB0ZXJzL2Rpc2Vhc2Vtb2RlbHByb3BlcnR5ZWRpdG9yL0Rpc2Vhc2VNb2RlbFByb3BlcnR5RWRpdG9yQWRhcHRlci5qYXZhIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvYWRhcHRlcnMvZGlzZWFzZW1vZGVscHJvcGVydHllZGl0b3IvRGlzZWFzZU1vZGVsUHJvcGVydHlFZGl0b3JBZGFwdGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjlhNTdjMAotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL2FkYXB0ZXJzL2Rpc2Vhc2Vtb2RlbHByb3BlcnR5ZWRpdG9yL0Rpc2Vhc2VNb2RlbFByb3BlcnR5RWRpdG9yQWRhcHRlci5qYXZhCkBAIC0wLDAgKzEsMjQgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS51aS5hZGFwdGVycy5kaXNlYXNlbW9kZWxwcm9wZXJ0eWVkaXRvcjsKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LkFkYXB0ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuaW1wbC5BZGFwdGVySW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnVpLndpemFyZHMuRGlzZWFzZU1vZGVsUHJvcGVydHlDb21wb3NpdGU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5Nb2RpZnlMaXN0ZW5lcjsKKworYWJzdHJhY3QgcHVibGljIGNsYXNzIERpc2Vhc2VNb2RlbFByb3BlcnR5RWRpdG9yQWRhcHRlciBleHRlbmRzIEFkYXB0ZXJJbXBsCisJCWltcGxlbWVudHMgQWRhcHRlciB7CisKKwlhYnN0cmFjdCBwdWJsaWMgRGlzZWFzZU1vZGVsUHJvcGVydHlFZGl0b3IgY3JlYXRlRGlzZWFzZU1vZGVsUHJvcGVydHlFZGl0b3IoCisJCQlEaXNlYXNlTW9kZWxQcm9wZXJ0eUNvbXBvc2l0ZSBkaXNlYXNlTW9kZWxQcm9wZXJ0eUNvbXBvc2l0ZSwKKwkJCWludCBzdHlsZSwgTW9kaWZ5TGlzdGVuZXIgcHJvamVjdFZhbGlkYXRvciwgSVByb2plY3QgcHJvamVjdCk7Cit9IC8vIERpc2Vhc2VNb2RlbFByb3BlcnR5RWRpdG9yQWRhcHRlcgpkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvYWRhcHRlcnMvZGlzZWFzZW1vZGVscHJvcGVydHllZGl0b3IvRGlzZWFzZU1vZGVsUHJvcGVydHlFZGl0b3JBZGFwdGVyRmFjdG9yeS5qYXZhIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvYWRhcHRlcnMvZGlzZWFzZW1vZGVscHJvcGVydHllZGl0b3IvRGlzZWFzZU1vZGVsUHJvcGVydHlFZGl0b3JBZGFwdGVyRmFjdG9yeS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg0MmIzYWYKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9hZGFwdGVycy9kaXNlYXNlbW9kZWxwcm9wZXJ0eWVkaXRvci9EaXNlYXNlTW9kZWxQcm9wZXJ0eUVkaXRvckFkYXB0ZXJGYWN0b3J5LmphdmEKQEAgLTAsMCArMSwzNCBAQAorLy8gRGlzZWFzZU1vZGVsUHJvcGVydHlFZGl0b3JBZGFwdGVyRmFjdG9yeS5qYXZhCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0udWkuYWRhcHRlcnMuZGlzZWFzZW1vZGVscHJvcGVydHllZGl0b3I7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5Db21wb3NlZEFkYXB0ZXJGYWN0b3J5OworCisvKioKKyAqIFRoaXMgY2xhc3MgcmVwcmVzZW50cworICovCitwdWJsaWMgaW50ZXJmYWNlIERpc2Vhc2VNb2RlbFByb3BlcnR5RWRpdG9yQWRhcHRlckZhY3RvcnkgeworCisJRGlzZWFzZU1vZGVsUHJvcGVydHlFZGl0b3JBZGFwdGVyRmFjdG9yeUltcGwgSU5TVEFOQ0UgPSBuZXcgRGlzZWFzZU1vZGVsUHJvcGVydHlFZGl0b3JBZGFwdGVyRmFjdG9yeUltcGwoKTsKKworCXB1YmxpYyBjbGFzcyBEaXNlYXNlTW9kZWxQcm9wZXJ0eUVkaXRvckFkYXB0ZXJGYWN0b3J5SW1wbCBleHRlbmRzCisJCQlDb21wb3NlZEFkYXB0ZXJGYWN0b3J5IGltcGxlbWVudHMKKwkJCURpc2Vhc2VNb2RlbFByb3BlcnR5RWRpdG9yQWRhcHRlckZhY3RvcnkgeworCisJCUBPdmVycmlkZQorCQlwdWJsaWMgYm9vbGVhbiBpc0ZhY3RvcnlGb3JUeXBlKE9iamVjdCB0eXBlKSB7CisJCQlyZXR1cm4gdHlwZSA9PSBEaXNlYXNlTW9kZWxQcm9wZXJ0eUVkaXRvckFkYXB0ZXIuY2xhc3M7CisJCX0KKworCX0gLy8gRGlzZWFzZU1vZGVsUHJvcGVydHlFZGl0b3JBZGFwdGVyRmFjdG9yeUltcGwKK30gLy8gRGlzZWFzZU1vZGVsUHJvcGVydHlFZGl0b3JBZGFwdGVyRmFjdG9yeQpkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvYWRhcHRlcnMvbmV3bW9kaWZpZXJwYWdlL0Rpc2Vhc2VOZXdNb2RpZmllclBhZ2VBZGFwdGVyRmFjdG9yeS5qYXZhIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvYWRhcHRlcnMvbmV3bW9kaWZpZXJwYWdlL0Rpc2Vhc2VOZXdNb2RpZmllclBhZ2VBZGFwdGVyRmFjdG9yeS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRjMDg4NjkKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9hZGFwdGVycy9uZXdtb2RpZmllcnBhZ2UvRGlzZWFzZU5ld01vZGlmaWVyUGFnZUFkYXB0ZXJGYWN0b3J5LmphdmEKQEAgLTAsMCArMSwxNjggQEAKKy8vIERpc2Vhc2VOZXdNb2RpZmllclBhZ2VBZGFwdGVyRmFjdG9yeS5qYXZhCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0udWkuYWRhcHRlcnMubmV3bW9kaWZpZXJwYWdlOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LkFkYXB0ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzczsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRVN0cnVjdHVyYWxGZWF0dXJlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uSWRlbnRpZmlhYmxlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5EaXNlYXNlTW9kZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlNJSW5mZWN0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQudXRpbC5TdGFuZGFyZEFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udWkud2l6YXJkcy5EaXNlYXNlV2l6YXJkTWVzc2FnZXM7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS51aS53aXphcmRzLk5ld01vZGlmaWVyUGFnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5JU3RhcnR1cDsKKworLyoqCisgKiBUaGlzIGNsYXNzIGlzIGFuIHtAbGluayBOZXdNb2RpZmllclBhZ2VBZGFwdGVyRmFjdG9yeX0gdGhhdCBhZGFwdHMKKyAqIHtAbGluayBEaXNlYXNlTW9kZWx9cyB0byB7QGxpbmsgTmV3TW9kaWZpZXJQYWdlfXMuCisgKi8KK3B1YmxpYyBjbGFzcyBEaXNlYXNlTmV3TW9kaWZpZXJQYWdlQWRhcHRlckZhY3RvcnkgZXh0ZW5kcworCQlTdGFuZGFyZEFkYXB0ZXJGYWN0b3J5IGltcGxlbWVudHMgTmV3TW9kaWZpZXJQYWdlQWRhcHRlckZhY3RvcnksIElTdGFydHVwIHsKKworCS8qKgorCSAqIERlZmF1bHQgY29uc3RydWN0b3IuCisJICovCisJcHVibGljIERpc2Vhc2VOZXdNb2RpZmllclBhZ2VBZGFwdGVyRmFjdG9yeSgpIHsKKwkJc3VwZXIoKTsKKwkJTmV3TW9kaWZpZXJQYWdlQWRhcHRlckZhY3RvcnkuSU5TVEFOQ0UuYWRkQWRhcHRlckZhY3RvcnkodGhpcyk7CisJfQorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS51aS5JU3RhcnR1cCNlYXJseVN0YXJ0dXAoKQorCSAqLworCXB1YmxpYyB2b2lkIGVhcmx5U3RhcnR1cCgpIHsKKwkJLy8gTm90aGluZyB0byBkbyB0aGUgY29uc3RydWN0b3Igd2lsbCBkbyBldmVyeXRoaW5nLgkJCisJfQorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2NlbmFyaW8udXRpbC5TY2VuYXJpb0FkYXB0ZXJGYWN0b3J5I2lzRmFjdG9yeUZvclR5cGUoamF2YS5sYW5nLk9iamVjdCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgYm9vbGVhbiBpc0ZhY3RvcnlGb3JUeXBlKGZpbmFsIE9iamVjdCB0eXBlKSB7CisJCXJldHVybiB0eXBlID09IE5ld01vZGlmaWVyUGFnZUFkYXB0ZXIuY2xhc3MgfHwgc3VwZXIuaXNGYWN0b3J5Rm9yVHlwZSh0eXBlKTsKKwl9CisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC51dGlsLlN0YW5kYXJkQWRhcHRlckZhY3RvcnkjY3JlYXRlRGlzZWFzZU1vZGVsQWRhcHRlcigpCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlRGlzZWFzZU1vZGVsQWRhcHRlcigpIHsKKwkJcmV0dXJuIG5ldyBEaXNlYXNlTmV3TW9kaWZpZXJQYWdlQWRhcHRlcigpOworCX0KKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLnV0aWwuU3RhbmRhcmRBZGFwdGVyRmFjdG9yeSNjcmVhdGVEaXNlYXNlTW9kZWxBZGFwdGVyKCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVTSUluZmVjdG9yQWRhcHRlcigpIHsKKwkJcmV0dXJuIG5ldyBTSUluZmVjdG9yTmV3TW9kaWZpZXJQYWdlQWRhcHRlcigpOworCX0KKworCS8qKgorCSAqIFRoaXMgY2xhc3MgYWRhcHRzIHtAbGluayBEaXNlYXNlTW9kZWx9cyB0byB7QGxpbmsgTmV3TW9kaWZpZXJQYWdlfXMKKwkgKi8KKwlwcml2YXRlIHN0YXRpYyBjbGFzcyBEaXNlYXNlTmV3TW9kaWZpZXJQYWdlQWRhcHRlciBleHRlbmRzCisJCQlOZXdNb2RpZmllclBhZ2VBZGFwdGVyIHsKKworCQkvKioKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnVpLmFkYXB0ZXJzLm5ld21vZGlmaWVycGFnZS5OZXdNb2RpZmllclBhZ2VBZGFwdGVyI2NyZWF0ZU5ld01vZGlmaWVyUGFnZSgpCisJCSAqLworCQlAT3ZlcnJpZGUKKwkJcHVibGljIE5ld01vZGlmaWVyUGFnZSBjcmVhdGVOZXdNb2RpZmllclBhZ2UoKSB7CisJCQlyZXR1cm4gbmV3IE5ld01vZGlmaWVyUGFnZSgoSWRlbnRpZmlhYmxlKSBnZXRUYXJnZXQoKSkgeworCQkJCUBPdmVycmlkZQorCQkJCXByb3RlY3RlZCBib29sZWFuIGlzVXNlclNwZWNpZmllZFByb3BlcnR5KAorCQkJCQkJZmluYWwgRVN0cnVjdHVyYWxGZWF0dXJlIGZlYXR1cmUpIHsKKwkJCQkJYm9vbGVhbiByZXRWYWx1ZSA9IGZhbHNlOworCQkJCQlmaW5hbCBFQ2xhc3MgY29udGFpbmluZ0NsYXNzID0gZmVhdHVyZS5nZXRFQ29udGFpbmluZ0NsYXNzKCk7CisJCQkJCS8vIElzIGl0IGEgZGlzZWFzZSBtb2RlbCBwcm9wZXJ0eT8KKwkJCQkJaWYgKGNvbnRhaW5pbmdDbGFzcy5lcXVhbHMoU3RhbmRhcmRQYWNrYWdlLmVJTlNUQU5DRS5nZXREaXNlYXNlTW9kZWwoKSkKKwkJCQkJCQl8fCBjb250YWluaW5nQ2xhc3MuZ2V0RUFsbFN1cGVyVHlwZXMoKS5jb250YWlucygKKwkJCQkJCQkJCVN0YW5kYXJkUGFja2FnZS5lSU5TVEFOQ0UuZ2V0RGlzZWFzZU1vZGVsKCkpKSB7CisJCQkJCQkvLyBEZXByZWNhdGVkLCBkb24ndCB1c2UhCisJCQkJCQlpZihmZWF0dXJlLmdldE5hbWUoKS5lcXVhbHMoImZpbml0ZURpZmZlcmVuY2UiKQorCQkJCQkJCQl8fCBmZWF0dXJlLmdldE5hbWUoKS5lcXVhbHMoInJlbGF0aXZlVG9sZXJhbmNlIikpIHJldHVybiBmYWxzZTsKKwkJCQkJCS8vIFllcworCQkJCQkJcmV0VmFsdWUgPSB0cnVlOworCQkJCQl9IC8vIGlmIGEgZGlzZWFzZSBtb2RlbCBwcm9wZXJ0eQorCQkJCQlyZXR1cm4gcmV0VmFsdWU7CisJCQkJfSAvLyBpc1VzZXJTcGVjaWZpZWRQcm9wZXJ0eQorCisJCQkJQE92ZXJyaWRlCisJCQkJcHJvdGVjdGVkIFN0cmluZyBnZXRCb3R0b21UZXh0KCkgeworCQkJCQlyZXR1cm4gRGlzZWFzZVdpemFyZE1lc3NhZ2VzLmdldFN0cmluZygiUE1UUF9EZWYiKTsKKwkJCQl9CisKKwkJCQlAT3ZlcnJpZGUKKwkJCQlwcm90ZWN0ZWQgYm9vbGVhbiBpc01vZGlmaWFibGVQcm9wZXJ0eSgKKwkJCQkJCWZpbmFsIEVTdHJ1Y3R1cmFsRmVhdHVyZSBmZWF0dXJlKSB7CisJCQkJCWJvb2xlYW4gcmV0VmFsdWUgPSBzdXBlci5pc01vZGlmaWFibGVQcm9wZXJ0eShmZWF0dXJlKTsKKworCQkJCQlyZXRWYWx1ZSA9IHJldFZhbHVlCisJCQkJCQkJJiYgIWZlYXR1cmUuZXF1YWxzKFN0YW5kYXJkUGFja2FnZS5lSU5TVEFOQ0UKKwkJCQkJCQkJCS5nZXREaXNlYXNlTW9kZWxfRGlzZWFzZU5hbWUoKSk7CisJCQkJCXJldFZhbHVlID0gcmV0VmFsdWUKKwkJCQkJCQkmJiAhZmVhdHVyZS5lcXVhbHMoU3RhbmRhcmRQYWNrYWdlLmVJTlNUQU5DRQorCQkJCQkJCQkJLmdldERpc2Vhc2VNb2RlbF9Qb3B1bGF0aW9uSWRlbnRpZmllcigpKTsKKworCQkJCQlyZXR1cm4gcmV0VmFsdWU7CisJCQkJfSAvLyBpc01vZGlmaWFibGVQcm9wZXJ0eQorCQkJfTsKKwkJfSAvLyBjcmVhdGVOZXdNb2RpZmllclBhZ2UKKworCX0gLy8gRGlzZWFzZU5ld01vZGlmaWVyUGFnZUFkYXB0ZXIKKworCS8qKgorCSAqIFRoaXMgY2xhc3MgYWRhcHRzIHtAbGluayBTSUluZmVjdG9yfXMgdG8ge0BsaW5rIE5ld01vZGlmaWVyUGFnZX1zCisJICovCisJcHJpdmF0ZSBzdGF0aWMgY2xhc3MgU0lJbmZlY3Rvck5ld01vZGlmaWVyUGFnZUFkYXB0ZXIgZXh0ZW5kcworCQkJTmV3TW9kaWZpZXJQYWdlQWRhcHRlciB7CisKKwkJLyoqCisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS51aS5hZGFwdGVycy5uZXdtb2RpZmllcnBhZ2UuTmV3TW9kaWZpZXJQYWdlQWRhcHRlciNjcmVhdGVOZXdNb2RpZmllclBhZ2UoKQorCQkgKi8KKwkJQE92ZXJyaWRlCisJCXB1YmxpYyBOZXdNb2RpZmllclBhZ2UgY3JlYXRlTmV3TW9kaWZpZXJQYWdlKCkgeworCQkJcmV0dXJuIG5ldyBOZXdNb2RpZmllclBhZ2UoKElkZW50aWZpYWJsZSkgZ2V0VGFyZ2V0KCkpIHsKKwkJCQlAT3ZlcnJpZGUKKwkJCQlwcm90ZWN0ZWQgYm9vbGVhbiBpc1VzZXJTcGVjaWZpZWRQcm9wZXJ0eSgKKwkJCQkJCWZpbmFsIEVTdHJ1Y3R1cmFsRmVhdHVyZSBmZWF0dXJlKSB7CisJCQkJCWJvb2xlYW4gcmV0VmFsdWUgPSBzdXBlci5pc1VzZXJTcGVjaWZpZWRQcm9wZXJ0eShmZWF0dXJlKTsKKwkJCQkJCisJCQkJCXJldFZhbHVlID0gcmV0VmFsdWUgJiYgIWZlYXR1cmUuZXF1YWxzKFN0YW5kYXJkUGFja2FnZS5lSU5TVEFOQ0UuZ2V0SW5mZWN0b3JfVGFyZ2V0VVJJKCkpOworCQkJCQkKKwkJCQkJcmV0dXJuIHJldFZhbHVlOworCQkJCX0gLy8gaXNVc2VyU3BlY2lmaWVkUHJvcGVydHkKKworCQkJCUBPdmVycmlkZQorCQkJCXByb3RlY3RlZCBTdHJpbmcgZ2V0Qm90dG9tVGV4dCgpIHsKKwkJCQkJcmV0dXJuICIiOworCQkJCX0KKworCQkJCUBPdmVycmlkZQorCQkJCXByb3RlY3RlZCBib29sZWFuIGlzTW9kaWZpYWJsZVByb3BlcnR5KAorCQkJCQkJZmluYWwgRVN0cnVjdHVyYWxGZWF0dXJlIGZlYXR1cmUpIHsKKwkJCQkJYm9vbGVhbiByZXRWYWx1ZSA9IHN1cGVyLmlzTW9kaWZpYWJsZVByb3BlcnR5KGZlYXR1cmUpOworCisJCQkJCXJldFZhbHVlID0gcmV0VmFsdWUKKwkJCQkJCQkmJiAhZmVhdHVyZS5lcXVhbHMoU3RhbmRhcmRQYWNrYWdlLmVJTlNUQU5DRS5nZXRJbmZlY3Rvcl9Qb3B1bGF0aW9uSWRlbnRpZmllcigpKTsKKworCQkJCQlyZXR1cm4gcmV0VmFsdWU7CisJCQkJfSAvLyBpc01vZGlmaWFibGVQcm9wZXJ0eQorCQkJfTsKKwkJfSAvLyBjcmVhdGVOZXdNb2RpZmllclBhZ2UKKworCX0gLy8gRGlzZWFzZU5ld01vZGlmaWVyUGFnZUFkYXB0ZXIKK30gLy8gRGlzZWFzZU5ld01vZGlmaWVyUGFnZUFkYXB0ZXJGYWN0b3J5CmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9kaXNlYXNlbW9kZWxzL0lTaGFyZWRJbWFnZXMuamF2YSBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL2Rpc2Vhc2Vtb2RlbHMvSVNoYXJlZEltYWdlcy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIxNzI0MTEKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9kaXNlYXNlbW9kZWxzL0lTaGFyZWRJbWFnZXMuamF2YQpAQCAtMCwwICsxLDQyIEBACisvLyBJU2hhcmVkSW1hZ2VzLmphdmEKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5EaXNlYXNlTW9kZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLkluZmVjdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udWkudmlld3MuZXhwbG9yZXIuUmVjb3JkZWRDU1ZJbnN0YW5jZVRyZWVOb2RlOworCisvKioKKyAqIFRoaXMgaW50ZXJmYWNlIGNvbnRhaW5zIGlkZW50aWZpZXJzIHVzZWQgdG8gbWFyayBpbWFnZXMgYWRkZWQgdG8gdGhpcworICogcGx1Zy1pbidzIGltYWdlIHJlZ2lzdHJ5LiBUaGlzIGltYWdlcyBhcmUgaW50ZW5kZWQgdG8gYmUgc2hhcmVkIGJ5CisgKiByZWZlcmVuY2luZyB0aGUgcmVnaXN0cnkgYW5kIHVzaW5nIHRoZSBpZGVudGlmaWVycyBkZWZpbmVkIGhlcmUgdG8gc2VsZWN0IHRoZQorICogYXBwcm9wcmlhdGUgaW1hZ2UuCisgKi8KK3B1YmxpYyBpbnRlcmZhY2UgSVNoYXJlZEltYWdlcyB7CisKKwkvKioKKwkgKiBUaGlzIGltYWdlIGlzIHRoZSBpY29uIHRvIHJlcHJlc2VudCBhIHtAbGluayBEaXNlYXNlTW9kZWx9CisJICovCisJU3RyaW5nIERJU0VBU0VfSUNPTiA9ICJkaXNlYXNlX2ljb24uaW1hZ2UiOworCisJLyoqCisJICogVGhpcyBpbWFnZSBpcyB0aGUgaWNvbiB0byByZXByZXNlbnQgYSB7QGxpbmsgSW5mZWN0b3J9CisJICovCisJU3RyaW5nIElORkVDVE9SX0lDT04gPSAiaW5mZWN0b3JfaWNvbi5pbWFnZSI7CisKKwkvKioKKwkgKiBUaGlzIGltYWdlIGlzIHRoZSBpY29uIHRvIHJlcHJlc2VudCBhIHtAbGluayBSZWNvcmRlZENTVkluc3RhbmNlVHJlZU5vZGV9CisJICovCisJU3RyaW5nIFJFQ09SREVEX0NTVl9JQ09OID0gInJlY29yZGVkX2N2c19pY29uLmltYWdlIjsKKworfSAvLyBJU2hhcmVkSW1hZ2VzClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvdmlld3MvZGlzZWFzZS9EaXNlYXNlVmlldy5qYXZhIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvdmlld3MvZGlzZWFzZS9EaXNlYXNlVmlldy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY5MzRkM2MKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS92aWV3cy9kaXNlYXNlL0Rpc2Vhc2VWaWV3LmphdmEKQEAgLTAsMCArMSwxMzAgQEAKKy8vIERpc2Vhc2VNb2RlbFZpZXcuamF2YQorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnVpLnZpZXdzLmRpc2Vhc2U7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UucmVzb3VyY2UuSW1hZ2VEZXNjcmlwdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5Db25zdGFudHM7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS51aS52aWV3cy5JZGVudGlmaWFibGVEZWxlZ2F0ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnVpLnZpZXdzLklkZW50aWZpYWJsZVBsdWdpblZpZXc7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmdyYXBoaWNzLkltYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLnBsdWdpbi5BYnN0cmFjdFVJUGx1Z2luOworCisvKioKKyAqIFRoaXMgY2xhc3MgaW1wbGVtZW50cyBhIHZpZXcgb2YgdGhlIHBsdWdnZWQgaW4gRGlzZWFzZXMuCisgKi8KK3B1YmxpYyBjbGFzcyBEaXNlYXNlVmlldyBleHRlbmRzIElkZW50aWZpYWJsZVBsdWdpblZpZXcgeworCisJLyoqCisJICogVGhlIGlkZW50aWZpZXIgb2YgdGhlIFNlcXVlbmNlcnMgVmlldworCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIElEX0RJU0VBU0VfTU9ERUxfVklFVyA9ICJvcmcuZWNsaXBzZS5zdGVtLnVpLnZpZXdzLmRpc2Vhc2VzIjsgLy8kTk9OLU5MUy0xJAorCisJLyoqCisJICogRGVmYXVsdCBDb25zdHJ1Y3RvcgorCSAqLworCXB1YmxpYyBEaXNlYXNlVmlldygpIHsKKwkJc3VwZXIoKTsKKwl9IC8vIERpc2Vhc2VWaWV3CisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0udWkudmlld3MuRXhlY3V0YWJsZVBsdWdpblZpZXcjZ2V0SW5wdXQoKQorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCBJZGVudGlmaWFibGVWaWV3TW9kZWwgZ2V0SW5wdXQoKSB7CisJCXJldHVybiBEaXNlYXNlVmlld01vZGVsLmdldE1vZGVsKCk7CisJfSAvLyBnZXRJbnB1dAorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnVpLnZpZXdzLklkZW50aWZpYWJsZVBsdWdpblZpZXcjZ2V0SWRlbnRpZmlhYmxlUGx1Z2luVmlld0xhYmVsQ29udGVudFByb3ZpZGVyKCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgSWRlbnRpZmlhYmxlUGx1Z2luVmlld0xhYmVsQ29udGVudFByb3ZpZGVyIGdldElkZW50aWZpYWJsZVBsdWdpblZpZXdMYWJlbENvbnRlbnRQcm92aWRlcigpIHsKKwkJcmV0dXJuIG5ldyBEaXNlYXNlVmlld1RyZWVDb250ZW50UHJvdmlkZXIoKTsKKwl9IC8vIGdldElkZW50aWZpYWJsZVBsdWdpblZpZXdMYWJlbENvbnRlbnRQcm92aWRlcgorCisJLyoqCisJICogVGhpcyBjbGFzcyBpcyB0aGUgbW9kZWwgb2YgdGhlIHBsdWdnZWQgaW4gPGNvZGU+RGlzZWFzZU1vZGVsPC9jb2RlPgorCSAqLworCXB1YmxpYyBzdGF0aWMgY2xhc3MgRGlzZWFzZVZpZXdNb2RlbCBleHRlbmRzIElkZW50aWZpYWJsZVZpZXdNb2RlbCB7CisKKwkJcHJpdmF0ZSBzdGF0aWMgRGlzZWFzZVZpZXdNb2RlbCBtb2RlbCA9IG51bGw7CisKKwkJLyoqCisJCSAqIEBwYXJhbSBleHRlbnNpb25Qb2ludElECisJCSAqLworCQlwcml2YXRlIERpc2Vhc2VWaWV3TW9kZWwoU3RyaW5nIGV4dGVuc2lvblBvaW50SUQpIHsKKwkJCXN1cGVyKGV4dGVuc2lvblBvaW50SUQpOworCQl9IC8vIERpc2Vhc2VNb2RlbFZpZXdNb2RlbAorCisJCS8qKgorCQkgKiBAcmV0dXJuIHRoZSBzaW5nbGV0b24gaW5zdGFuY2Ugb2YgdGhlIG1vZGVsCisJCSAqLworCQlwdWJsaWMgc3RhdGljIERpc2Vhc2VWaWV3TW9kZWwgZ2V0TW9kZWwoKSB7CisJCQkvLyBEbyB3ZSBuZWVkIHRvIG1ha2UgdGhlIG1vZGVsPworCQkJaWYgKG1vZGVsID09IG51bGwpIHsKKwkJCQkvLyBZZXMKKwkJCQltb2RlbCA9IG5ldyBEaXNlYXNlVmlld01vZGVsKAorCQkJCQkJQ29uc3RhbnRzLklEX0RJU0VBU0VfRVhURU5TSU9OX1BPSU5UKTsKKwkJCX0KKwkJCXJldHVybiBtb2RlbDsKKwkJfSAvLyBnZXRNb2RlbAorCisJfSAvLyBEaXNlYXNlVmlld01vZGVsCisKKwkvKioKKwkgKiBUaGlzIGNsYXNzIGlzIHRoZSBjb250ZW50IHByb3ZpZGVyIG9mIHRoZSBkaXNlYXNlIHZpZXcuCisJICovCisJcHJpdmF0ZSBzdGF0aWMgY2xhc3MgRGlzZWFzZVZpZXdUcmVlQ29udGVudFByb3ZpZGVyIGV4dGVuZHMKKwkJCUlkZW50aWZpYWJsZVBsdWdpblZpZXdMYWJlbENvbnRlbnRQcm92aWRlciB7CisKKwkJLy8gVGhpcyBpcyB0aGUgaW1hZ2UgdXNlZCB0byByZXByZXNlbnQgZGlzZWFzZXMgaW4gdGhlIGRpc2Vhc2UgdmlldworCQlzdGF0aWMgSW1hZ2VEZXNjcmlwdG9yIGRpc2Vhc2VJY29uID0gbnVsbDsKKworCQkvLyBJZiB0cnVlIHRoZW4gd2UndmUgbmV2ZXIgdHJpZWQgdG8gZ2V0IHRoZSBpY29uCisJCXN0YXRpYyBib29sZWFuIGRpc2Vhc2VJY29uRmlyc3RUaW1lID0gdHJ1ZTsKKworCQkvKioKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnVpLnZpZXdzLklkZW50aWZpYWJsZVBsdWdpblZpZXcuSWRlbnRpZmlhYmxlUGx1Z2luVmlld0xhYmVsQ29udGVudFByb3ZpZGVyI2dldEltYWdlKGphdmEubGFuZy5PYmplY3QpCisJCSAqLworCQlwdWJsaWMgSW1hZ2UgZ2V0SW1hZ2UoT2JqZWN0IGVsZW1lbnQpIHsKKwkJCXJldHVybiAoZWxlbWVudCBpbnN0YW5jZW9mIElkZW50aWZpYWJsZURlbGVnYXRlKSA/IGdldERpc2Vhc2VJY29uKCkKKwkJCQkJOiBzdXBlci5nZXRJbWFnZShlbGVtZW50KTsKKwkJfSAvLyBnZXRJbWFnZQorCisJCS8qKgorCQkgKiBAcmV0dXJuIHRoZSBpY29uIHRvIGJlIHVzZWQgdG8gcmVwcmVzZW50IGRpc2Vhc2VzLCBvciBudWxsIGlmIGl0CisJCSAqICAgICAgICAgY2FuJ3QgYmUgbG9hZGVkLgorCQkgKi8KKwkJcHJpdmF0ZSBJbWFnZSBnZXREaXNlYXNlSWNvbigpIHsKKwkJCS8vIFNob3VsZCB3ZSB0cnkgdG8gbG9hZCB0aGUgaWNvbj8KKwkJCWlmIChkaXNlYXNlSWNvbkZpcnN0VGltZSAmJiBkaXNlYXNlSWNvbiA9PSBudWxsKSB7CisJCQkJLy8gWWVzCisJCQkJZGlzZWFzZUljb25GaXJzdFRpbWUgPSBmYWxzZTsKKwkJCQlkaXNlYXNlSWNvbiA9IAorCQkJCUFic3RyYWN0VUlQbHVnaW4uaW1hZ2VEZXNjcmlwdG9yRnJvbVBsdWdpbigKKwkJCQkJIm9yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscyIJLCAiaWNvbnMvZnVsbC9jdXN0b20xNi8iICsgImRpc2Vhc2UuZ2lmIik7CisJCQl9IC8vIGlmIHdlIHNob3VsZCBsb2FkIHRoZSBpY29uCisJCQlyZXR1cm4gZGlzZWFzZUljb24uY3JlYXRlSW1hZ2UoKTsKKwkJfSAvLyBnZXRkaXNlYXNlSWNvbgorCisJCS8qKgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0udWkudmlld3MuSWRlbnRpZmlhYmxlUGx1Z2luVmlldy5JZGVudGlmaWFibGVQbHVnaW5WaWV3TGFiZWxDb250ZW50UHJvdmlkZXIjZGlzcG9zZSgpCisJCSAqLworCQlAT3ZlcnJpZGUKKwkJcHVibGljIHZvaWQgZGlzcG9zZSgpIHsKKwkJCXN1cGVyLmRpc3Bvc2UoKTsKKwkJCS8vIFRPRE8gZGlzcG9zZSBvZiB0aGUgaW1hZ2UKKwkJfQorCisJfSAvLyBEaXNlYXNlTW9kZWxWaWV3VHJlZUNvbnRlbnRQcm92aWRlcgorfSAvLyBEaXNlYXNlVmlldwpkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvdmlld3MvZXhwbG9yZXIvRGlzZWFzZU1vZGVsSW5zdGFuY2VUcmVlTm9kZS5qYXZhIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvdmlld3MvZXhwbG9yZXIvRGlzZWFzZU1vZGVsSW5zdGFuY2VUcmVlTm9kZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlhNzg2N2IKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS92aWV3cy9leHBsb3Jlci9EaXNlYXNlTW9kZWxJbnN0YW5jZVRyZWVOb2RlLmphdmEKQEAgLTAsMCArMSwzMyBAQAorLy8gRGlzZWFzZU1vZGVsSW5zdGFuY2VUcmVlTm9kZS5qYXZhCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0udWkudmlld3MuZXhwbG9yZXI7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLkRpc2Vhc2VNb2RlbDsKKworLyoqCisgKiBUaGlzIGNsYXNzIHJlcHJlc2VudHMgYW4gaW5zdGFuY2Ugb2YgYSBzZXJpYWxpemVkIHtAbGluayBEaXNlYXNlTW9kZWx9LgorICovCitwdWJsaWMgY2xhc3MgRGlzZWFzZU1vZGVsSW5zdGFuY2VUcmVlTm9kZSBleHRlbmRzIElkZW50aWZpYWJsZUluc3RhbmNlVHJlZU5vZGUgeworCisJLyoqCisJICogQHBhcmFtIGl0bgorCSAqIEBwYXJhbSBuYW1lCisJICogQHBhcmFtIGV4dGVuc2lvbgorCSAqIAkJdGhlIGZpbGUgbmFtZSBleHRlbnNpb24gb2YgdGhlIHNlcmlhbGl6ZWQgZmlsZS4KKwkgKi8KKwlwdWJsaWMgRGlzZWFzZU1vZGVsSW5zdGFuY2VUcmVlTm9kZShmaW5hbCBJZGVudGlmaWFibGVUcmVlTm9kZSBpdG4sCisJCQlmaW5hbCBTdHJpbmcgbmFtZSwgZmluYWwgU3RyaW5nIGV4dGVuc2lvbikgeworCQlzdXBlcihpdG4sIG5hbWUsIGV4dGVuc2lvbik7CisJfQorCit9IC8vIERpc2Vhc2VNb2RlbEluc3RhbmNlVHJlZU5vZGUKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS92aWV3cy9leHBsb3Jlci9EaXNlYXNlTW9kZWxJbnN0YW5jZVRyZWVOb2RlQ29udGVudFByb3ZpZGVyLmphdmEgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS92aWV3cy9leHBsb3Jlci9EaXNlYXNlTW9kZWxJbnN0YW5jZVRyZWVOb2RlQ29udGVudFByb3ZpZGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDllZjQ2ZAotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3ZpZXdzL2V4cGxvcmVyL0Rpc2Vhc2VNb2RlbEluc3RhbmNlVHJlZU5vZGVDb250ZW50UHJvdmlkZXIuamF2YQpAQCAtMCwwICsxLDkzIEBACisvLyBEaXNlYXNlTW9kZWxJbnN0YW5jZVRyZWVOb2RlQ29udGVudFByb3ZpZGVyLmphdmEKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS51aS52aWV3cy5leHBsb3JlcjsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OworaW1wb3J0IGphdmEudXRpbC5MaXN0OworCitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUZvbGRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUmVzb3VyY2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkNvcmVFeGNlcHRpb247CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5JZGVudGlmaWFibGU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLkRpc2Vhc2VNb2RlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmRQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udWkuQWN0aXZhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLm5hdmlnYXRvci5Db21tb25OYXZpZ2F0b3I7CisKKy8qKgorICogVGhpcyBjbGFzcyBpcyBhIHtAbGluayBJZGVudGlmaWFibGVJbnN0YW5jZVRyZWVOb2RlQ29udGVudFByb3ZpZGVyfSBmb3IKKyAqIHtAbGluayBEaXNlYXNlTW9kZWxJbnN0YW5jZVRyZWVOb2RlfXMgd2hpY2ggYXBwZWFyIGluIHRoZSB7QGxpbmsKKyAqIENvbW1vbk5hdmlnYXRvcn0gZnJhbWV3b3JrIHRoYXQgaXMgdXNlZCB0byBleHBsb3JlIFNURU0gUHJvamVjdHMuCisgKiAKKyAqIEBzZWUgRGlzZWFzZU1vZGVsSW5zdGFuY2VUcmVlTm9kZUxhYmVsUHJvdmlkZXIKKyAqLworcHVibGljIGNsYXNzIERpc2Vhc2VNb2RlbEluc3RhbmNlVHJlZU5vZGVDb250ZW50UHJvdmlkZXIgZXh0ZW5kcworCQlJZGVudGlmaWFibGVJbnN0YW5jZVRyZWVOb2RlQ29udGVudFByb3ZpZGVyIHsKKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS51aS52aWV3cy5leHBsb3Jlci4KKwkgKiAJSWRlbnRpZmlhYmxlSW5zdGFuY2VUcmVlTm9kZUNvbnRlbnRQcm92aWRlcgorCSAqIAkjZ2V0Q2hpbGRyZW4oamF2YS5sYW5nLk9iamVjdCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgT2JqZWN0W10gZ2V0Q2hpbGRyZW4oZmluYWwgT2JqZWN0IHBhcmVudEVsZW1lbnQpIHsKKwkJT2JqZWN0W10gcmV0VmFsdWUgPSBudWxsOworCQkvLyBSaWdodCBraW5kIG9mIHBhcmVudD8KKwkJaWYgKHBhcmVudEVsZW1lbnQgaW5zdGFuY2VvZiBJZGVudGlmaWFibGVUcmVlTm9kZSkgeworCQkJLy8gWWVzCisJCQlmaW5hbCBJZGVudGlmaWFibGVUcmVlTm9kZSBpdG4gPSAoSWRlbnRpZmlhYmxlVHJlZU5vZGUpIHBhcmVudEVsZW1lbnQ7CisKKwkJCWZpbmFsIElGb2xkZXIgZm9sZGVyID0gaXRuLmdldFByb2plY3QoKS5nZXRGb2xkZXIoCisJCQkJCWl0bi5nZXRGb2xkZXJOYW1lKCkpOworCisJCQlmaW5hbCBMaXN0PElkZW50aWZpYWJsZUluc3RhbmNlVHJlZU5vZGU+IHRlbXAgPSBuZXcgQXJyYXlMaXN0PElkZW50aWZpYWJsZUluc3RhbmNlVHJlZU5vZGU+KCk7CisKKwkJCXRyeSB7CisJCQkJZm9yIChmaW5hbCBJUmVzb3VyY2UgaWRlbnRpZmlhYmxlRmlsZSA6IGZvbGRlci5tZW1iZXJzKCkpIHsKKwkJCQkJLy8gQSBkaXNlYXNlIG1vZGVsPworCQkJCQlpZiAoaXNEaXNlYXNlTW9kZWwoaWRlbnRpZmlhYmxlRmlsZSkpIHsKKwkJCQkJCS8vIFllcworCQkJCQkJZmluYWwgU3RyaW5nIGlkZW50aWZpYWJsZU5hbWUgPSBpZGVudGlmaWFibGVGaWxlCisJCQkJCQkJCS5nZXROYW1lKCk7CisJCQkJCQlmaW5hbCBTdHJpbmcgZXh0ZW5zaW9uID0gaWRlbnRpZmlhYmxlRmlsZQorCQkJCQkJCQkuZ2V0RmlsZUV4dGVuc2lvbigpOworCQkJCQkJZmluYWwgU3RyaW5nIG5hbWVXaXRob3V0RXh0ZW5zaW9uID0gaWRlbnRpZmlhYmxlTmFtZQorCQkJCQkJCQkuc3Vic3RyaW5nKDAsIGlkZW50aWZpYWJsZU5hbWUKKwkJCQkJCQkJCQkuaW5kZXhPZihleHRlbnNpb24pIC0gMSk7CisJCQkJCQl0ZW1wLmFkZChuZXcgSWRlbnRpZmlhYmxlSW5zdGFuY2VUcmVlTm9kZShpdG4sCisJCQkJCQkJCW5hbWVXaXRob3V0RXh0ZW5zaW9uLCBleHRlbnNpb24pKTsKKwkJCQkJfSAvLyBpZiBkaXNlYXNlIG1vZGVsCisJCQkJfSAvLyBmb3IKKwkJCX0gY2F0Y2ggKGZpbmFsIENvcmVFeGNlcHRpb24gZSkgeworCQkJCUFjdGl2YXRvci5sb2dFcnJvcigiIiwgZSk7CisJCQl9IC8vIGZvciBlYWNoIElSZXNvdXJjZSBmb2xkZXIubWVtYmVycygpCisKKwkJCXJldFZhbHVlID0gdGVtcC50b0FycmF5KCk7CisKKwkJfSAvLyBpZiBJZGVudGlmaWFibGVUcmVlTm9kZQorCisJCXJldHVybiByZXRWYWx1ZTsKKwl9IC8vIGdldENoaWxkcmVuCisKKwkvKioKKwkgKiBAcGFyYW0gaWRlbnRpZmlhYmxlRmlsZQorCSAqIAkJYSBmaWxlIGhvbGRpbmcgYSBzZXJpYWxpemVkIHtAbGluayBJZGVudGlmaWFibGV9LgorCSAqIEByZXR1cm4gPGNvZGU+dHJ1ZTwvY29kZT4gaWYgdGhlIGZpbGUgaG9sZHMgYSBzZXJpYWxpemVkIHtAbGluaworCSAqIAlEaXNlYXNlTW9kZWx9CisJICovCisJcHJvdGVjdGVkIGJvb2xlYW4gaXNEaXNlYXNlTW9kZWwoZmluYWwgSVJlc291cmNlIGlkZW50aWZpYWJsZUZpbGUpIHsKKwkJcmV0dXJuIGlkZW50aWZpYWJsZUZpbGUuZ2V0RmlsZUV4dGVuc2lvbigpLmVuZHNXaXRoKAorCQkJCVN0YW5kYXJkUGFja2FnZS5lTkFNRSk7CisJfSAvLyBpc0Rpc2Vhc2VNb2RlbAorCit9IC8vIERpc2Vhc2VNb2RlbEluc3RhbmNlVHJlZU5vZGVDb250ZW50UHJvdmlkZXIKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS92aWV3cy9leHBsb3Jlci9EaXNlYXNlTW9kZWxJbnN0YW5jZVRyZWVOb2RlTGFiZWxQcm92aWRlci5qYXZhIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvdmlld3MvZXhwbG9yZXIvRGlzZWFzZU1vZGVsSW5zdGFuY2VUcmVlTm9kZUxhYmVsUHJvdmlkZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45OWQyZWFlCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvdmlld3MvZXhwbG9yZXIvRGlzZWFzZU1vZGVsSW5zdGFuY2VUcmVlTm9kZUxhYmVsUHJvdmlkZXIuamF2YQpAQCAtMCwwICsxLDQ4IEBACisvLyBEaXNlYXNlTW9kZWxJbnN0YW5jZVRyZWVOb2RlTGFiZWxQcm92aWRlci5qYXZhCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0udWkudmlld3MuZXhwbG9yZXI7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JTGFiZWxQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQucHJlc2VudGF0aW9uLkRpc2Vhc2Vtb2RlbHNFZGl0b3JQbHVnaW47CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmdyYXBoaWNzLkltYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLm5hdmlnYXRvci5Db21tb25OYXZpZ2F0b3I7CisKKy8qKgorICogVGhpcyBjbGFzcyBpcyBhIHtAbGluayBJTGFiZWxQcm92aWRlcn0gZm9yIHtAbGluaworICogRGlzZWFzZU1vZGVsSW5zdGFuY2VUcmVlTm9kZX1zIHdoaWNoIGFwcGVhciBpbiB0aGUge0BsaW5rIENvbW1vbk5hdmlnYXRvcn0KKyAqIGZyYW1ld29yayB0aGF0IGlzIHVzZWQgdG8gZXhwbG9yZSBTVEVNIFByb2plY3RzLgorICogCisgKiBAc2VlIERpc2Vhc2VNb2RlbEluc3RhbmNlVHJlZU5vZGVDb250ZW50UHJvdmlkZXIKKyAqLworcHVibGljIGNsYXNzIERpc2Vhc2VNb2RlbEluc3RhbmNlVHJlZU5vZGVMYWJlbFByb3ZpZGVyIGV4dGVuZHMKKwkJSWRlbnRpZmlhYmxlSW5zdGFuY2VUcmVlTm9kZUxhYmVsUHJvdmlkZXIgeworCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnVpLnZpZXdzLmV4cGxvcmVyLgorCSAqIAlJZGVudGlmaWFibGVJbnN0YW5jZVRyZWVOb2RlTGFiZWxQcm92aWRlciNnZXRJbWFnZShqYXZhLmxhbmcuT2JqZWN0KQorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBJbWFnZSBnZXRJbWFnZShmaW5hbCBPYmplY3QgZWxlbWVudCkgeworCQlJbWFnZSByZXRWYWx1ZSA9IG51bGw7CisJCWlmIChlbGVtZW50IGluc3RhbmNlb2YgSWRlbnRpZmlhYmxlSW5zdGFuY2VUcmVlTm9kZSkgeworCQkJLy8gWWVzCisJCQlmaW5hbCBJZGVudGlmaWFibGVJbnN0YW5jZVRyZWVOb2RlIGlpdG4gPSAoSWRlbnRpZmlhYmxlSW5zdGFuY2VUcmVlTm9kZSkgZWxlbWVudDsKKworCQkJcmV0VmFsdWUgPSBEaXNlYXNlbW9kZWxzRWRpdG9yUGx1Z2luLmdldFBsdWdpbigpLmdldEltYWdlUmVnaXN0cnkoKQorCQkJCQkuZ2V0KGlpdG4uZ2V0UGFyZW50KCkuZ2V0SW1hZ2VLZXkoKSk7CisKKwkJfSAvLyBpZiBJZGVudGlmaWFibGVJbnN0YW5jZVRyZWVOb2RlCisJCXJldHVybiByZXRWYWx1ZTsKKwl9CisKK30gLy8gRGlzZWFzZU1vZGVsSW5zdGFuY2VUcmVlTm9kZUxhYmVsUHJvdmlkZXIKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS92aWV3cy9leHBsb3Jlci9EaXNlYXNlTW9kZWxUcmVlTm9kZS5qYXZhIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvdmlld3MvZXhwbG9yZXIvRGlzZWFzZU1vZGVsVHJlZU5vZGUuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MjljMWFjCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvdmlld3MvZXhwbG9yZXIvRGlzZWFzZU1vZGVsVHJlZU5vZGUuamF2YQpAQCAtMCwwICsxLDM3IEBACisvLyBEaXNlYXNlTW9kZWxUcmVlTm9kZS5qYXZhCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0udWkudmlld3MuZXhwbG9yZXI7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3Q7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLkRpc2Vhc2VNb2RlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMuSVNoYXJlZEltYWdlczsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnVpLndpemFyZHMuTmV3U1RFTVByb2plY3RXaXphcmQ7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkubmF2aWdhdG9yLkNvbW1vbk5hdmlnYXRvcjsKKworLyoqCisgKiBUaGlzIGNsYXNzIGlzIHVzZWQgaW4gdGhlIHtAbGluayBDb21tb25OYXZpZ2F0b3J9IGJhc2VkIFNURU0gUHJvamVjdCBFeHBsb3JlcgorICogdmlldyB0byByZXByZXNlbnQgYSBncm91cCBvZiB7QGxpbmsgRGlzZWFzZU1vZGVsfXMgdGhhdCBiZWxvbmcgdG8gYQorICogcGFydGljdWxhciBTVEVNIFByb2plY3QgaW5zdGFuY2UuCisgKi8KK3B1YmxpYyBjbGFzcyBEaXNlYXNlTW9kZWxUcmVlTm9kZSBleHRlbmRzIElkZW50aWZpYWJsZVRyZWVOb2RlIHsKKworCS8qKgorCSAqIEBwYXJhbSBwcm9qZWN0CisJICovCisJcHVibGljIERpc2Vhc2VNb2RlbFRyZWVOb2RlKGZpbmFsIElQcm9qZWN0IHByb2plY3QpIHsKKwkJc3VwZXIocHJvamVjdCwgIkRpc2Vhc2UgTW9kZWxzIiwKKwkJCQlOZXdTVEVNUHJvamVjdFdpemFyZC5ERUNPUkFUT1JTX0ZPTERFUl9OQU1FLAorCQkJCUlTaGFyZWRJbWFnZXMuRElTRUFTRV9JQ09OKTsKKwl9IC8vIERpc2Vhc2VNb2RlbFRyZWVOb2RlCisKK30gLy8gRGlzZWFzZU1vZGVsVHJlZU5vZGUKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS92aWV3cy9leHBsb3Jlci9EaXNlYXNlTW9kZWxUcmVlTm9kZUNvbnRlbnRQcm92aWRlci5qYXZhIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvdmlld3MvZXhwbG9yZXIvRGlzZWFzZU1vZGVsVHJlZU5vZGVDb250ZW50UHJvdmlkZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNjQzMjljCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvdmlld3MvZXhwbG9yZXIvRGlzZWFzZU1vZGVsVHJlZU5vZGVDb250ZW50UHJvdmlkZXIuamF2YQpAQCAtMCwwICsxLDQ0IEBACisvLyBEaXNlYXNlTW9kZWxUcmVlTm9kZUNvbnRlbnRQcm92aWRlci5qYXZhCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0udWkudmlld3MuZXhwbG9yZXI7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3Q7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JVHJlZUNvbnRlbnRQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5uYXZpZ2F0b3IuQ29tbW9uTmF2aWdhdG9yOworCisvKioKKyAqIFRoaXMgY2xhc3MgaXMgYSB7QGxpbmsgSWRlbnRpZmlhYmxlVHJlZU5vZGVDb250ZW50UHJvdmlkZXJ9IGZvciB7QGxpbmsKKyAqIERpc2Vhc2VNb2RlbFRyZWVOb2RlfXMgd2hpY2ggYXBwZWFyIGluIHRoZSB7QGxpbmsgQ29tbW9uTmF2aWdhdG9yfSBmcmFtZXdvcmsKKyAqIHRoYXQgaXMgdXNlZCB0byBleHBsb3JlIFNURU0gUHJvamVjdHMuCisgKiAKKyAqIEBzZWUgRGlzZWFzZU1vZGVsVHJlZU5vZGVMYWJlbFByb3ZpZGVyCisgKi8KK3B1YmxpYyBjbGFzcyBEaXNlYXNlTW9kZWxUcmVlTm9kZUNvbnRlbnRQcm92aWRlciBleHRlbmRzCisJCUlkZW50aWZpYWJsZVRyZWVOb2RlQ29udGVudFByb3ZpZGVyIGltcGxlbWVudHMgSVRyZWVDb250ZW50UHJvdmlkZXIgeworCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnVpLnZpZXdzLmV4cGxvcmVyLgorCSAqIAlJZGVudGlmaWFibGVUcmVlTm9kZUNvbnRlbnRQcm92aWRlciNnZXRDaGlsZHJlbihqYXZhLmxhbmcuT2JqZWN0KQorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBPYmplY3RbXSBnZXRDaGlsZHJlbihmaW5hbCBPYmplY3QgcGFyZW50RWxlbWVudCkgeworCQlPYmplY3RbXSByZXRWYWx1ZSA9IG51bGw7CisJCWlmIChwYXJlbnRFbGVtZW50IGluc3RhbmNlb2YgSVByb2plY3QpIHsKKwkJCS8vIFllcworCQkJcmV0VmFsdWUgPSBuZXcgT2JqZWN0W10geyBuZXcgRGlzZWFzZU1vZGVsVHJlZU5vZGUoCisJCQkJCShJUHJvamVjdCkgcGFyZW50RWxlbWVudCkgfTsgLy8gbmV3IE9iamVjdAorCQl9IC8vIGlmIElQcm9qZWN0CisJCXJldHVybiByZXRWYWx1ZTsKKwl9CisKK30gLy8gRGlzZWFzZU1vZGVsVHJlZU5vZGVDb250ZW50UHJvdmlkZXIKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS92aWV3cy9leHBsb3Jlci9EaXNlYXNlTW9kZWxUcmVlTm9kZUxhYmVsUHJvdmlkZXIuamF2YSBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3ZpZXdzL2V4cGxvcmVyL0Rpc2Vhc2VNb2RlbFRyZWVOb2RlTGFiZWxQcm92aWRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYwZTQwNTkKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS92aWV3cy9leHBsb3Jlci9EaXNlYXNlTW9kZWxUcmVlTm9kZUxhYmVsUHJvdmlkZXIuamF2YQpAQCAtMCwwICsxLDQ3IEBACisvLyBEaXNlYXNlTW9kZWxUcmVlTm9kZUxhYmVsUHJvdmlkZXIuamF2YQorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnVpLnZpZXdzLmV4cGxvcmVyOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSUxhYmVsUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLnByZXNlbnRhdGlvbi5EaXNlYXNlbW9kZWxzRWRpdG9yUGx1Z2luOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ncmFwaGljcy5JbWFnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5uYXZpZ2F0b3IuQ29tbW9uTmF2aWdhdG9yOworCisvKioKKyAqIFRoaXMgY2xhc3MgaXMgYSB7QGxpbmsgSUxhYmVsUHJvdmlkZXJ9IGZvciB7QGxpbmsgRGlzZWFzZU1vZGVsVHJlZU5vZGV9cworICogd2hpY2ggYXBwZWFyIGluIHRoZSB7QGxpbmsgQ29tbW9uTmF2aWdhdG9yfSBmcmFtZXdvcmsgdGhhdCBpcyB1c2VkIHRvIGV4cGxvcmUKKyAqIFNURU0gUHJvamVjdHMuCisgKiAKKyAqIEBzZWUgRGlzZWFzZU1vZGVsVHJlZU5vZGVDb250ZW50UHJvdmlkZXIKKyAqLworcHVibGljIGNsYXNzIERpc2Vhc2VNb2RlbFRyZWVOb2RlTGFiZWxQcm92aWRlciBleHRlbmRzCisJCUlkZW50aWZpYWJsZVRyZWVOb2RlTGFiZWxQcm92aWRlciBpbXBsZW1lbnRzIElMYWJlbFByb3ZpZGVyIHsKKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS51aS52aWV3cy5leHBsb3Jlci4KKwkgKiAJSWRlbnRpZmlhYmxlSW5zdGFuY2VUcmVlTm9kZUxhYmVsUHJvdmlkZXIjZ2V0SW1hZ2UoamF2YS5sYW5nLk9iamVjdCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgSW1hZ2UgZ2V0SW1hZ2UoZmluYWwgT2JqZWN0IGVsZW1lbnQpIHsKKwkJSW1hZ2UgcmV0VmFsdWUgPSBudWxsOworCQlpZiAoZWxlbWVudCBpbnN0YW5jZW9mIERpc2Vhc2VNb2RlbFRyZWVOb2RlKSB7CisJCQkvLyBZZXMKKwkJCWZpbmFsIERpc2Vhc2VNb2RlbFRyZWVOb2RlIGRtdG4gPSAoRGlzZWFzZU1vZGVsVHJlZU5vZGUpIGVsZW1lbnQ7CisKKwkJCXJldFZhbHVlID0gRGlzZWFzZW1vZGVsc0VkaXRvclBsdWdpbi5nZXRQbHVnaW4oKS5nZXRJbWFnZVJlZ2lzdHJ5KCkKKwkJCQkJLmdldChkbXRuLmdldEltYWdlS2V5KCkpOworCisJCX0gLy8gaWYgSWRlbnRpZmlhYmxlSW5zdGFuY2VUcmVlTm9kZQorCQlyZXR1cm4gcmV0VmFsdWU7CisJfQorfSAvLyBEaXNlYXNlTW9kZWxUcmVlTm9kZUxhYmVsUHJvdmlkZXIKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS92aWV3cy9leHBsb3Jlci9SZWNvcmRlZENTVkluc3RhbmNlVHJlZU5vZGUuamF2YSBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3ZpZXdzL2V4cGxvcmVyL1JlY29yZGVkQ1NWSW5zdGFuY2VUcmVlTm9kZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY4NmYwZWQKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS92aWV3cy9leHBsb3Jlci9SZWNvcmRlZENTVkluc3RhbmNlVHJlZU5vZGUuamF2YQpAQCAtMCwwICsxLDUxIEBACisvLyBSZWNvcmRlZENTVkluc3RhbmNlVHJlZU5vZGUuamF2YQorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnVpLnZpZXdzLmV4cGxvcmVyOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklSZXNvdXJjZTsKKworLyoqCisgKiBUaGlzIGNsYXNzIHJlcHJlc2VudHMgc2ltdWxhdGlvbiBydW5zIHNlcmlhbGl6ZWQgdXNpbmcgY29tbWEgc2VwYXJhdGVkIHZhbHVlcworICogKENTVikuCisgKi8KK3B1YmxpYyBjbGFzcyBSZWNvcmRlZENTVkluc3RhbmNlVHJlZU5vZGUgZXh0ZW5kcyBSZWNvcmRlZEluc3RhbmNlVHJlZU5vZGUgeworCisJcHJpdmF0ZSBmaW5hbCBJUmVzb3VyY2UgZmlsZTsKKworCS8qKgorCSAqIEBwYXJhbSBwYXJlbnQKKwkgKiBAcGFyYW0gZmlsZQorCSAqLworCXB1YmxpYyBSZWNvcmRlZENTVkluc3RhbmNlVHJlZU5vZGUoZmluYWwgUmVjb3JkZWRUcmVlTm9kZSBwYXJlbnQsCisJCQlmaW5hbCBJUmVzb3VyY2UgZmlsZSkgeworCQlzdXBlcihwYXJlbnQsIGZpbGUuZ2V0TmFtZSgpKTsKKwkJdGhpcy5maWxlID0gZmlsZTsKKwl9CisKKwkvKioKKwkgKiBAcGFyYW0gcGFyZW50CisJICogQHBhcmFtIGZpbGUKKwkgKi8KKwlwdWJsaWMgUmVjb3JkZWRDU1ZJbnN0YW5jZVRyZWVOb2RlKGZpbmFsIFJlY29yZGVkSW5zdGFuY2VUcmVlTm9kZSBwYXJlbnQsCisJCQlmaW5hbCBJUmVzb3VyY2UgZmlsZSkgeworCQlzdXBlcihwYXJlbnQsIGZpbGUuZ2V0TmFtZSgpKTsKKwkJdGhpcy5maWxlID0gZmlsZTsKKwl9CisJLyoqCisJICogQHJldHVybiB0aGUgZmlsZQorCSAqLworCXB1YmxpYyBJUmVzb3VyY2UgZ2V0RmlsZSgpIHsKKwkJcmV0dXJuIGZpbGU7CisJfQorCit9IC8vIFJlY29yZGVkQ1NWSW5zdGFuY2VUcmVlTm9kZQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3ZpZXdzL2V4cGxvcmVyL1JlY29yZGVkQ1NWSW5zdGFuY2VUcmVlTm9kZUNvbnRlbnRQcm92aWRlci5qYXZhIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvdmlld3MvZXhwbG9yZXIvUmVjb3JkZWRDU1ZJbnN0YW5jZVRyZWVOb2RlQ29udGVudFByb3ZpZGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2NmZTYyNAotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3ZpZXdzL2V4cGxvcmVyL1JlY29yZGVkQ1NWSW5zdGFuY2VUcmVlTm9kZUNvbnRlbnRQcm92aWRlci5qYXZhCkBAIC0wLDAgKzEsMTIyIEBACisvLyBSZWNvcmRlZENTVkluc3RhbmNlVHJlZU5vZGVDb250ZW50UHJvdmlkZXIuamF2YQorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnVpLnZpZXdzLmV4cGxvcmVyOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JQ29udGFpbmVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklGb2xkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVJlc291cmNlOworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklXb3Jrc3BhY2VSb290OworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLlJlc291cmNlc1BsdWdpbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQ29yZUV4Y2VwdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVBhdGg7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS51aS53aXphcmRzLk5ld1NURU1Qcm9qZWN0V2l6YXJkOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLm5hdmlnYXRvci5Db21tb25OYXZpZ2F0b3I7CisKKy8qKgorICogVGhpcyBjbGFzcyBpcyBhIHtAbGluayBSZWNvcmRlZEluc3RhbmNlVHJlZU5vZGVDb250ZW50UHJvdmlkZXJ9IGZvciB7QGxpbmsKKyAqIFJlY29yZGVkQ1NWSW5zdGFuY2VUcmVlTm9kZX1zIHdoaWNoIGFwcGVhciBpbiB0aGUge0BsaW5rIENvbW1vbk5hdmlnYXRvcn0KKyAqIGZyYW1ld29yayB0aGF0IGlzIHVzZWQgdG8gZXhwbG9yZSBTVEVNIFByb2plY3RzLgorICogCisgKiBAc2VlIFJlY29yZGVkQ1NWSW5zdGFuY2VUcmVlTm9kZUxhYmVsUHJvdmlkZXIKKyAqLworcHVibGljIGNsYXNzIFJlY29yZGVkQ1NWSW5zdGFuY2VUcmVlTm9kZUNvbnRlbnRQcm92aWRlciBleHRlbmRzCisJCVJlY29yZGVkSW5zdGFuY2VUcmVlTm9kZUNvbnRlbnRQcm92aWRlciB7CisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0udWkudmlld3MuZXhwbG9yZXIuCisJICogCVJlY29yZGVkSW5zdGFuY2VUcmVlTm9kZUNvbnRlbnRQcm92aWRlciNnZXRDaGlsZHJlbihqYXZhLmxhbmcuT2JqZWN0KQorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBPYmplY3RbXSBnZXRDaGlsZHJlbihmaW5hbCBPYmplY3QgcGFyZW50RWxlbWVudCkgeworCQlPYmplY3RbXSByZXRWYWx1ZSA9IG51bGw7CisJCS8vIFJpZ2h0IHBhcmVudD8KKwkJaWYgKHBhcmVudEVsZW1lbnQgaW5zdGFuY2VvZiBSZWNvcmRlZFRyZWVOb2RlKSB7CisJCQkvLyBZZXMKKwkJCWZpbmFsIFJlY29yZGVkVHJlZU5vZGUgcGFyZW50ID0gKFJlY29yZGVkVHJlZU5vZGUpIHBhcmVudEVsZW1lbnQ7CisJCQlmaW5hbCBJV29ya3NwYWNlUm9vdCByb290ID0gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpCisJCQkuZ2V0Um9vdCgpOworCQkJCisJCQlJUGF0aCBwcm9qZWN0UGF0aCA9IHBhcmVudC5nZXRQcm9qZWN0KCkuZ2V0RnVsbFBhdGgoKTsKKwkJCUlGb2xkZXIgY3N2Rm9sZGVyID0gcm9vdC5nZXRGb2xkZXIocHJvamVjdFBhdGguYXBwZW5kKE5ld1NURU1Qcm9qZWN0V2l6YXJkLlJFQ09SREVEX1NJTVVMQVRJT05TX0ZPTERFUl9OQU1FKSk7CisKKwkJCS8vIElzIHRoZSBjc3ZGb2xkZXIgYSByZWFkYWJsZSBkaXJlY3Rvcnk/CisJCQl0cnkgeworCQkJCWlmIChjc3ZGb2xkZXIuZXhpc3RzKCkpIHsKKwkJCQkJLy8gWWVzCisJCQkJCWZpbmFsIElSZXNvdXJjZVtdIGNzdlN1YkZvbGRlcnMgPSBjc3ZGb2xkZXIubWVtYmVycygpOworCQorCQkJCQkvLyBDcmVhdGUgdGhlIG5vZGVzIHRoYXQgd2lsbCByZXByZXNlbnQgdGhlIGZpbGVzIGluIHRoZSBjb21tb24KKwkJCQkJLy8gbmF2aWdhdG9yIGZyYW1ld29yaworCQkJCQlmaW5hbCBMaXN0PE9iamVjdD4gdGVtcCA9IG5ldyBBcnJheUxpc3Q8T2JqZWN0PigpOworCQkJCQlmb3IgKElSZXNvdXJjZSBmaWxlIDogY3N2U3ViRm9sZGVycykgeworLy8JCQkJCQlpZihmaWxlIGluc3RhbmNlb2YgSUNvbnRhaW5lcikKKy8vCQkJCQkJCXRlbXAuYWRkKG5ldyBSZWNvcmRlZENTVkluc3RhbmNlVHJlZU5vZGUocGFyZW50LCBmaWxlKSk7CisvLwkJCQkJCWVsc2UgdGVtcC5hZGQoZmlsZSk7CisJCQkJCQl0ZW1wLmFkZChmaWxlKTsKKwkJCQkJfSAvLyBmb3IgZWFjaCBGaWxlCisJCQkJCXJldFZhbHVlID0gdGVtcC50b0FycmF5KCk7CisJCQkJfSAvLyBpZiByZWFkYWJsZSBkaXJlY3RvcnkKKwkJCX0gY2F0Y2goQ29yZUV4Y2VwdGlvbiBjZSkgeworCQkJCWNlLnByaW50U3RhY2tUcmFjZSgpOworCQkJCXJldHVybiBudWxsOworCQkJfQorCQl9IC8vIGlmIFJlY29yZGVkVHJlZU5vZGUKKwkJZWxzZSBpZihwYXJlbnRFbGVtZW50IGluc3RhbmNlb2YgUmVjb3JkZWRDU1ZJbnN0YW5jZVRyZWVOb2RlKSB7CisJCQkvLyBZZXMKKwkJCWZpbmFsIFJlY29yZGVkQ1NWSW5zdGFuY2VUcmVlTm9kZSBwYXJlbnQgPSAoUmVjb3JkZWRDU1ZJbnN0YW5jZVRyZWVOb2RlKSBwYXJlbnRFbGVtZW50OworCQkJLy9maW5hbCBJV29ya3NwYWNlUm9vdCByb290ID0gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmdldFJvb3QoKTsKKwkJCQorCQkJSVJlc291cmNlIGZpbGUgPSBwYXJlbnQuZ2V0RmlsZSgpOworCQkJaWYoZmlsZSBpbnN0YW5jZW9mIElDb250YWluZXIpIHsKKwkJCQlJQ29udGFpbmVyIGNvbnQgPSAoSUNvbnRhaW5lcilmaWxlOworCQkJCQkJLy8gSXMgdGhlIGNzdkZvbGRlciBhIHJlYWRhYmxlIGRpcmVjdG9yeT8KKwkJCQl0cnkgeworCQkJCQlpZiAoY29udC5leGlzdHMoKSkgeworCQkJCQkJLy8gWWVzCisJCQkJCQlmaW5hbCBJUmVzb3VyY2VbXSBjc3ZTdWJGb2xkZXJzID0gY29udC5tZW1iZXJzKCk7CisJCQorCQkJCQkJLy8gQ3JlYXRlIHRoZSBub2RlcyB0aGF0IHdpbGwgcmVwcmVzZW50IHRoZSBmaWxlcyBpbiB0aGUgY29tbW9uCisJCQkJCQkvLyBuYXZpZ2F0b3IgZnJhbWV3b3JrCisJCQkJCQlmaW5hbCBMaXN0PE9iamVjdD4gdGVtcCA9IG5ldyBBcnJheUxpc3Q8T2JqZWN0PigpOworCQkJCQkJZm9yIChJUmVzb3VyY2UgZjIgOiBjc3ZTdWJGb2xkZXJzKSB7CisJCQkJCQkJaWYoZjIgaW5zdGFuY2VvZiBJQ29udGFpbmVyKQorCQkJCQkJCQl0ZW1wLmFkZChuZXcgUmVjb3JkZWRDU1ZJbnN0YW5jZVRyZWVOb2RlKHBhcmVudCwgZjIpKTsKKwkJCQkJCQllbHNlIHRlbXAuYWRkKGYyKTsKKwkJCQkJCX0gLy8gZm9yIGVhY2ggRmlsZQorCQkJCQkJcmV0VmFsdWUgPSB0ZW1wLnRvQXJyYXkoKTsKKwkJCQkJfSAvLyBpZiByZWFkYWJsZSBkaXJlY3RvcnkKKwkJCQl9IGNhdGNoKENvcmVFeGNlcHRpb24gY2UpIHsKKwkJCQkJY2UucHJpbnRTdGFja1RyYWNlKCk7CisJCQkJCXJldHVybiBudWxsOworCQkJCX0KKwkJCX0KKwkJfSBlbHNlIHsKKwkJCXJldHVybiBuZXcgT2JqZWN0WzBdOworCQl9CisJCXJldHVybiByZXRWYWx1ZTsKKwl9IC8vIGdldENoaWxkcmVuCisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0udWkudmlld3MuZXhwbG9yZXIuCisJICogCVJlY29yZGVkSW5zdGFuY2VUcmVlTm9kZUNvbnRlbnRQcm92aWRlciNoYXNDaGlsZHJlbihqYXZhLmxhbmcuT2JqZWN0KQorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBib29sZWFuIGhhc0NoaWxkcmVuKGZpbmFsIE9iamVjdCBlbGVtZW50KSB7CisJCU9iamVjdFtdIGNoaWxkcmVuID0gZ2V0Q2hpbGRyZW4oZWxlbWVudCk7CisJCXJldHVybiBjaGlsZHJlbiAhPSBudWxsICYmIGNoaWxkcmVuLmxlbmd0aCA+IDA7CisJfQorCit9IC8vIFJlY29yZGVkQ1NWSW5zdGFuY2VUcmVlTm9kZUNvbnRlbnRQcm92aWRlcgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3ZpZXdzL2V4cGxvcmVyL1JlY29yZGVkQ1NWSW5zdGFuY2VUcmVlTm9kZUxhYmVsUHJvdmlkZXIuamF2YSBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3ZpZXdzL2V4cGxvcmVyL1JlY29yZGVkQ1NWSW5zdGFuY2VUcmVlTm9kZUxhYmVsUHJvdmlkZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MTNmOTRhCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvdmlld3MvZXhwbG9yZXIvUmVjb3JkZWRDU1ZJbnN0YW5jZVRyZWVOb2RlTGFiZWxQcm92aWRlci5qYXZhCkBAIC0wLDAgKzEsNjggQEAKKy8vIFJlY29yZGVkQ1NWSW5zdGFuY2VUcmVlTm9kZUxhYmVsUHJvdmlkZXIuamF2YQorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnVpLnZpZXdzLmV4cGxvcmVyOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklSZXNvdXJjZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklMYWJlbFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5wcmVzZW50YXRpb24uRGlzZWFzZW1vZGVsc0VkaXRvclBsdWdpbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZ3JhcGhpY3MuSW1hZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkubmF2aWdhdG9yLkNvbW1vbk5hdmlnYXRvcjsKKworLyoqCisgKiBUaGlzIGNsYXNzIGlzIGEge0BsaW5rIElMYWJlbFByb3ZpZGVyfSBmb3Ige0BsaW5rIFJlY29yZGVkQ1NWSW5zdGFuY2VUcmVlTm9kZQorICogfXMgd2hpY2ggYXBwZWFyIGluIHRoZSB7QGxpbmsgQ29tbW9uTmF2aWdhdG9yfSBmcmFtZXdvcmsgdGhhdCBpcyB1c2VkIHRvCisgKiBleHBsb3JlIFNURU0gUHJvamVjdHMuCisgKiAKKyAqIEBzZWUgUmVjb3JkZWRDU1ZJbnN0YW5jZVRyZWVOb2RlQ29udGVudFByb3ZpZGVyCisgKi8KK3B1YmxpYyBjbGFzcyBSZWNvcmRlZENTVkluc3RhbmNlVHJlZU5vZGVMYWJlbFByb3ZpZGVyIGV4dGVuZHMKKwkJUmVjb3JkZWRJbnN0YW5jZVRyZWVOb2RlTGFiZWxQcm92aWRlciB7CisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0udWkudmlld3MuZXhwbG9yZXIuCisJICogCVJlY29yZGVkSW5zdGFuY2VUcmVlTm9kZUxhYmVsUHJvdmlkZXIjZ2V0SW1hZ2UoamF2YS5sYW5nLk9iamVjdCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgSW1hZ2UgZ2V0SW1hZ2UoZmluYWwgT2JqZWN0IGVsZW1lbnQpIHsKKwkJSW1hZ2UgcmV0VmFsdWUgPSBudWxsOworCQlpZiAoZWxlbWVudCBpbnN0YW5jZW9mIFJlY29yZGVkQ1NWSW5zdGFuY2VUcmVlTm9kZSkgeworCQkJLy8gWWVzCisJCQlyZXRWYWx1ZSA9IERpc2Vhc2Vtb2RlbHNFZGl0b3JQbHVnaW4KKwkJCQkJLmdldFBsdWdpbigpCisJCQkJCS5nZXRJbWFnZVJlZ2lzdHJ5KCkKKwkJCQkJLmdldChvcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMuSVNoYXJlZEltYWdlcy5SRUNPUkRFRF9DU1ZfSUNPTik7CisKKwkJfSAvLyBpZiBJZGVudGlmaWFibGVJbnN0YW5jZVRyZWVOb2RlCisJCXJldHVybiByZXRWYWx1ZTsKKwl9CisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0udWkudmlld3MuZXhwbG9yZXIuCisJICogCVJlY29yZGVkSW5zdGFuY2VUcmVlTm9kZUxhYmVsUHJvdmlkZXIjZ2V0VGV4dChqYXZhLmxhbmcuT2JqZWN0KQorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBTdHJpbmcgZ2V0VGV4dChmaW5hbCBPYmplY3QgZWxlbWVudCkgeworCQlTdHJpbmcgcmV0VmFsdWUgPSAibm90aGluZyI7CisJCWlmIChlbGVtZW50IGluc3RhbmNlb2YgUmVjb3JkZWRDU1ZJbnN0YW5jZVRyZWVOb2RlKSB7CisJCQkvLyBZZXMKKwkJCWZpbmFsIFJlY29yZGVkQ1NWSW5zdGFuY2VUcmVlTm9kZSBub2RlID0gKFJlY29yZGVkQ1NWSW5zdGFuY2VUcmVlTm9kZSkgZWxlbWVudDsKKwkJCXJldFZhbHVlID0gbm9kZS5nZXROYW1lKCk7CisJCX0gLy8gaWYgUmVjb3JkZWRDU1ZJbnN0YW5jZVRyZWVOb2RlCisJCWVsc2UgaWYoZWxlbWVudCBpbnN0YW5jZW9mIElSZXNvdXJjZSkgeworCQkJcmV0VmFsdWUgPSAoKElSZXNvdXJjZSllbGVtZW50KS5nZXROYW1lKCk7CisJCX0KKwkJCisJCXJldHVybiByZXRWYWx1ZTsKKwl9CisKK30gLy8gUmVjb3JkZWRDU1ZJbnN0YW5jZVRyZWVOb2RlTGFiZWxQcm92aWRlcgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3dpemFyZHMvRGlzZWFzZURlZmluaXRpb25Db250cm9sLmphdmEgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS93aXphcmRzL0Rpc2Vhc2VEZWZpbml0aW9uQ29udHJvbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhiYzkyYTQKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS93aXphcmRzL0Rpc2Vhc2VEZWZpbml0aW9uQ29udHJvbC5qYXZhCkBAIC0wLDAgKzEsMjIxIEBACisvLyBEaXNlYXNlRGVmaW5pdGlvbkNvbnRyb2wuamF2YQorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnVpLndpemFyZHM7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0OworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5Db3JlRXhjZXB0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JQ29uZmlndXJhdGlvbkVsZW1lbnQ7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklFeHRlbnNpb25SZWdpc3RyeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGxhdGZvcm07CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnV0aWwuRWNvcmVVdGlsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uRHVibGluQ29yZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuQ29uc3RhbnRzOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5EaXNlYXNlTW9kZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS51aS5BY3RpdmF0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LlNXVDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLk1vZGlmeUxpc3RlbmVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuU2VsZWN0aW9uQWRhcHRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLlNlbGVjdGlvbkV2ZW50OworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5sYXlvdXQuR3JpZERhdGE7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5HcmlkTGF5b3V0OworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbWJvOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5MYWJlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5QbGF0Zm9ybVVJOworCisvKioKKyAqIFRoaXMgY2xhc3MgcmVwcmVzZW50cyB0aGUgU1dUIGNvbnRyb2wgZm9yIGRlZmluaW5nIGEgZGlzZWFzZS4KKyAqLworcHVibGljIGNsYXNzIERpc2Vhc2VEZWZpbml0aW9uQ29udHJvbCBleHRlbmRzIENvbXBvc2l0ZSB7CisKKwlwcml2YXRlIHN0YXRpYyBEaXNlYXNlTW9kZWxbXSBkaXNlYXNlTW9kZWxzID0gbnVsbDsKKworCXByaXZhdGUgZmluYWwgQ29tYm8gY29tYm87CisKKwlwcml2YXRlIGZpbmFsIERpc2Vhc2VNb2RlbFByb3BlcnR5Q29tcG9zaXRlIGRpc2Vhc2VNb2RlbFByb3BlcnR5Q29tcG9zaXRlOworCQorCS8qKgorCSAqIHRoZSBEaXNlYXNlRGVmaW5pdGlvbkNvbnRyb2wgY29tYm8gbXVzdCBiZSBhYmxlIHRvIHVwZGF0ZSB0aGUgTmV3RGlzZWFzZVdpemFyZAorCSAqLworCXByaXZhdGUgTmV3RGlzZWFzZVdpemFyZCBuZXdEaXNlYXNlV2l6YXJkID0gbnVsbDsKKworCS8qKgorCSAqIENyZWF0ZSB0aGUgY29tcG9zaXRlCisJICogCisJICogQHBhcmFtIHBhcmVudAorCSAqIEBwYXJhbSBzdHlsZQorCSAqIEBwYXJhbSBwcm9qZWN0VmFsaWRhdG9yCisJICogQHBhcmFtIG5kdyBhIE5ld0Rpc2Vhc2VXaXphcmQKKwkgKi8KKwlwdWJsaWMgRGlzZWFzZURlZmluaXRpb25Db250cm9sKGZpbmFsIENvbXBvc2l0ZSBwYXJlbnQsIGZpbmFsIGludCBzdHlsZSwKKwkJCU1vZGlmeUxpc3RlbmVyIHByb2plY3RWYWxpZGF0b3IsIElQcm9qZWN0IHByb2plY3QsIE5ld0Rpc2Vhc2VXaXphcmQgbmR3KSB7CisJCXN1cGVyKHBhcmVudCwgc3R5bGUpOworCQluZXdEaXNlYXNlV2l6YXJkID0gbmR3OworCQlmaW5hbCBHcmlkTGF5b3V0IGdyaWRMYXlvdXQgPSBuZXcgR3JpZExheW91dCgpOworCQlncmlkTGF5b3V0Lm1hcmdpbldpZHRoID0gMDsKKwkJZ3JpZExheW91dC5udW1Db2x1bW5zID0gMjsKKwkJc2V0TGF5b3V0KGdyaWRMYXlvdXQpOworCisJCWZpbmFsIExhYmVsIGRpc2Vhc2VNb2RlbExhYmVsID0gbmV3IExhYmVsKHRoaXMsIFNXVC5OT05FKTsKKwkJZmluYWwgR3JpZERhdGEgZ2RfZGlzZWFzZU1vZGVsTGFiZWwgPSBuZXcgR3JpZERhdGEoU1dULkZJTEwsIFNXVC5DRU5URVIsIHRydWUsIGZhbHNlKTsKKwkJZ2RfZGlzZWFzZU1vZGVsTGFiZWwud2lkdGhIaW50ID0gMTAwOworCQlkaXNlYXNlTW9kZWxMYWJlbC5zZXRMYXlvdXREYXRhKGdkX2Rpc2Vhc2VNb2RlbExhYmVsKTsKKwkJZGlzZWFzZU1vZGVsTGFiZWwuc2V0VGV4dChEaXNlYXNlV2l6YXJkTWVzc2FnZXMuZ2V0U3RyaW5nKCJEREMuMCIpKTsgLy8kTk9OLU5MUy0xJAorCisJCWNvbWJvID0gbmV3IENvbWJvKHRoaXMsIFNXVC5SRUFEX09OTFkpOworCQljb21iby5zZXRUZXh0TGltaXQoMzApOworCQlmaW5hbCBHcmlkRGF0YSBnZF9jb21ibyA9IG5ldyBHcmlkRGF0YShTV1QuRklMTCwgU1dULkNFTlRFUiwgdHJ1ZSwKKwkJCQlmYWxzZSk7CisJCWdkX2NvbWJvLndpZHRoSGludCA9IDMwMzsKKwkJY29tYm8uc2V0TGF5b3V0RGF0YShnZF9jb21ibyk7CisKKwkJY29tYm8uc2V0VG9vbFRpcFRleHQoRGlzZWFzZVdpemFyZE1lc3NhZ2VzLmdldFN0cmluZygiRERDLjEiKSk7IC8vJE5PTi1OTFMtMSQKKwkJLy8gSW5pdGlhbGl6ZSB0aGUgbGlzdCBvZiBkaXNlYXNlIG1vZGVscyBhdmFpbGFibGUKKwkJY29tYm8uc2V0SXRlbXMoZ2V0RGlzZWFzZU1vZGVsTmFtZXMoZ2V0RGlzZWFzZU1vZGVscygpKSk7CisJCWNvbWJvLnNlbGVjdCgwKTsKKwkJY29tYm8uYWRkTW9kaWZ5TGlzdGVuZXIocHJvamVjdFZhbGlkYXRvcik7CisKKwkJCisJCWRpc2Vhc2VNb2RlbFByb3BlcnR5Q29tcG9zaXRlID0gbmV3IERpc2Vhc2VNb2RlbFByb3BlcnR5Q29tcG9zaXRlKHRoaXMsCisJCQkJU1dULk5PTkUsIGdldERpc2Vhc2VNb2RlbHMoKSwgcHJvamVjdFZhbGlkYXRvciwgcHJvamVjdCk7CisJCWZpbmFsIEdyaWREYXRhIGdkX2Rpc2Vhc2VNb2RlbFByb3BlcnR5Q29udHJvbCA9IG5ldyBHcmlkRGF0YShTV1QuRklMTCwKKwkJCQlTV1QuQ0VOVEVSLCB0cnVlLCBmYWxzZSwgMiwgMSk7CisJCWRpc2Vhc2VNb2RlbFByb3BlcnR5Q29tcG9zaXRlCisJCQkJLnNldExheW91dERhdGEoZ2RfZGlzZWFzZU1vZGVsUHJvcGVydHlDb250cm9sKTsKKworCQljb21iby5hZGRTZWxlY3Rpb25MaXN0ZW5lcihuZXcgU2VsZWN0aW9uQWRhcHRlcigpIHsKKwkJCUBPdmVycmlkZQorCQkJcHVibGljIHZvaWQgd2lkZ2V0U2VsZWN0ZWQoU2VsZWN0aW9uRXZlbnQgZSkgeworCQkJCWRpc2Vhc2VNb2RlbFByb3BlcnR5Q29tcG9zaXRlCisJCQkJCQkuZGlzcGxheURpc2Vhc2VNb2RlbChnZXREaXNlYXNlTW9kZWxzKClbY29tYm8KKwkJCQkJCQkJLmdldFNlbGVjdGlvbkluZGV4KCldKTsKKwkJCQkKKwkJCQkvLyB1cGRhdGUgdGhlIGR1YmxpbiBjb3JlIGZyb20gdGhlIHBsdWdpbiBkZWZhdWx0cyBmb3IgdGhlCisJCQkJLy8gbmV3bHkgc2VsZWN0ZWQgZGlzZWFzZSBtb2RlbDsKKwkJCQluZXdEaXNlYXNlV2l6YXJkLm5ld0R1YmxpbkNvcmVQYWdlLnVwZGF0ZUR1YmxpbkNvcmVQYWdlKGdldFNlbGVjdGVkRGlzZWFzZU1vZGVsKCkuZ2V0RHVibGluQ29yZSgpKTsKKwkJCQkKKwkJCQkvLyBsYXlvdXQoKTsKKwkJCX0gLy8gd2lkZ2V0U2VsZWN0ZWQKKworCQl9KTsKKwkJLy9maW5hbCBEaXNlYXNlRGVmaW5pdGlvbkNvbnRyb2wgc2VsZiA9IHRoaXM7CisJCQorCQlQbGF0Zm9ybVVJLmdldFdvcmtiZW5jaCgpLmdldEhlbHBTeXN0ZW0oKS5zZXRIZWxwKHBhcmVudCwgIm9yZy5lY2xpcHNlLnN0ZW0uZG9jLm5ld2Rpc2Vhc2VfY29udGV4dGlkIik7CisJfS8vIERpc2Vhc2VEZWZpbml0aW9uQ29udHJvbAorCisJCisJCisJLyoqCisJICogQHJldHVybiBhbiBhcnJheSBvZiB0aGUge0BsaW5rIERpc2Vhc2VNb2RlbHN9cyBkZWZpbmVkIGluIHRoZSBzeXN0ZW0uCisJICovCisJcHJpdmF0ZSBEaXNlYXNlTW9kZWxbXSBnZXREaXNlYXNlTW9kZWxzKCkgeworCQlpZiAoZGlzZWFzZU1vZGVscyA9PSBudWxsKSB7CisJCQlmaW5hbCBJRXh0ZW5zaW9uUmVnaXN0cnkgcmVnaXN0cnkgPSBQbGF0Zm9ybS5nZXRFeHRlbnNpb25SZWdpc3RyeSgpOworCQkJZmluYWwgSUNvbmZpZ3VyYXRpb25FbGVtZW50W10gZGlzZWFzZU1vZGVsQ29uZmlnRWxlbWVudHMgPSByZWdpc3RyeQorCQkJCQkuZ2V0Q29uZmlndXJhdGlvbkVsZW1lbnRzRm9yKG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5Db25zdGFudHMuSURfRElTRUFTRV9NT0RFTF9FWFRFTlNJT05fUE9JTlQpOworCisJCQlmaW5hbCBMaXN0PERpc2Vhc2VNb2RlbD4gdGVtcCA9IG5ldyBBcnJheUxpc3Q8RGlzZWFzZU1vZGVsPigpOworCisJCQlkaXNlYXNlTW9kZWxzID0gbmV3IERpc2Vhc2VNb2RlbFtkaXNlYXNlTW9kZWxDb25maWdFbGVtZW50cy5sZW5ndGhdOworCisJCQlmb3IgKGludCBpID0gMDsgaSA8IGRpc2Vhc2VNb2RlbENvbmZpZ0VsZW1lbnRzLmxlbmd0aDsgaSsrKSB7CisJCQkJZmluYWwgSUNvbmZpZ3VyYXRpb25FbGVtZW50IGVsZW1lbnQgPSBkaXNlYXNlTW9kZWxDb25maWdFbGVtZW50c1tpXTsKKwkJCQlEaXNlYXNlTW9kZWwgZGlzZWFzZU1vZGVsID0gbnVsbDsKKwkJCQkvLyBEb2VzIHRoZSBlbGVtZW50IHNwZWNpZnkgdGhlIGNsYXNzIG9mIHRoZSBkaXNlYXNlIG1vZGVsPworCQkJCWlmIChlbGVtZW50LmdldE5hbWUoKS5lcXVhbHMoQ29uc3RhbnRzLkRJU0VBU0VfTU9ERUxfRUxFTUVOVCkpIHsKKwkJCQkJLy8gWWVzCisJCQkJCXRyeSB7CisJCQkJCQlkaXNlYXNlTW9kZWwgPSAoRGlzZWFzZU1vZGVsKSBlbGVtZW50LmNyZWF0ZUV4ZWN1dGFibGVFeHRlbnNpb24oImNsYXNzIik7CisJCQkJCQl0ZW1wLmFkZChkaXNlYXNlTW9kZWwpOyAvLyROT04tTkxTLTEkCisJCQkJCX0gY2F0Y2ggKGZpbmFsIENvcmVFeGNlcHRpb24gZSkgeworCQkJCQkJQWN0aXZhdG9yLmxvZ0Vycm9yKAorCQkJCQkJCQlEaXNlYXNlV2l6YXJkTWVzc2FnZXMuZ2V0U3RyaW5nKCJEREMuMyIpLCBlKTsgLy8kTk9OLU5MUy0xJAorCQkJCQl9CisJCQkJfSAvLyBpZgorCQkJfSAvLyBmb3IgZWFjaCBjb25maWd1cmF0aW9uIGVsZW1lbnQKKwkJCWRpc2Vhc2VNb2RlbHMgPSB0ZW1wLnRvQXJyYXkobmV3IERpc2Vhc2VNb2RlbFtdIHt9KTsKKwkJfSAvLyBpZiBkaXNlc2FlTW9kZWxzIG5vdCBjcmVhdGVkCisJCQorCQkKKwkJCisJCS8vIG5vdyB1cGRhdGUgdGhlIGR1YmxpbiBjb3JlcyB3aXRoIHRoZSBkZWZhdWx0IHBsdWdpbi54bWwgaW5mbworCQlmb3IoRGlzZWFzZU1vZGVsIGRpc2Vhc2VNb2RlbDogZGlzZWFzZU1vZGVscykgeworCQkJaWYoZGlzZWFzZU1vZGVsICE9IG51bGwpIHsKKwkJCQkvLyBKSEsgZ2V0dGluZyBEQyBpbmZvIGZyb20gdGhlIHBsdWdnaW4ueG1sCisJCQkJRHVibGluQ29yZSBkdWJsaW5Db3JlID0gb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLkFjdGl2YXRvci5nZXRQbHVnaW5EdWJsaW5Db3JlKGRpc2Vhc2VNb2RlbCk7CisJCQkJaWYoZHVibGluQ29yZSAhPSBudWxsKSB7CisJCQkJCWRpc2Vhc2VNb2RlbC5zZXREdWJsaW5Db3JlKGR1YmxpbkNvcmUpOworCQkJCX0KKwkJCX0KKwkJfQorCisJCXJldHVybiBkaXNlYXNlTW9kZWxzOworCX0gLy8gZ2V0RGlzZWFzZU1vZGVscworCisJLyoqCisJICogQHJldHVybiB0aGUgbmFtZXMgb2YgdGhlIGRpc2Vhc2UgbW9kZWxzCisJICovCisJcHJpdmF0ZSBTdHJpbmdbXSBnZXREaXNlYXNlTW9kZWxOYW1lcyhmaW5hbCBEaXNlYXNlTW9kZWxbXSBkaXNlYXNlTW9kZWxzKSB7CisJCWZpbmFsIFN0cmluZ1tdIHJldFZhbHVlID0gbmV3IFN0cmluZ1tkaXNlYXNlTW9kZWxzLmxlbmd0aF07CisJCWZvciAoaW50IGkgPSAwOyBpIDwgZGlzZWFzZU1vZGVscy5sZW5ndGg7IGkrKykgeworCQkJU3RyaW5nIG5hbWUgPSBkaXNlYXNlTW9kZWxzW2ldLmdldER1YmxpbkNvcmUoKS5nZXRUaXRsZSgpOworCQkJLy8gV2FzIGEgbmFtZSBzcGVjaWZpZWQ/CisJCQlpZiAoKG5hbWUgPT0gbnVsbCkgfHwgbmFtZS5lcXVhbHMoIiIpKSB7IC8vJE5PTi1OTFMtMSQKKwkJCQkvLyBObworCQkJCW5hbWUgPSBkaXNlYXNlTW9kZWxzW2ldLmdldENsYXNzKCkuZ2V0U2ltcGxlTmFtZSgpOworCQkJfSAvLyBpZgorCisJCQlyZXRWYWx1ZVtpXSA9IG5hbWU7CisJCX0gLy8gZm9yIGkKKwkJcmV0dXJuIHJldFZhbHVlOworCX0gLy8gZ2V0RGlzZWFzZU1vZGVsTmFtZXMKKworCS8qKgorCSAqIAorCSAqIEByZXR1cm4KKwkgKi8KKwlEaXNlYXNlTW9kZWwgZ2V0U2VsZWN0ZWREaXNlYXNlTW9kZWwoKSB7CisJCWZpbmFsIERpc2Vhc2VNb2RlbCByZXRWYWx1ZSA9IEVjb3JlVXRpbC5jb3B5KGdldERpc2Vhc2VNb2RlbHMoKVtjb21iby5nZXRTZWxlY3Rpb25JbmRleCgpXSk7CisJCWRpc2Vhc2VNb2RlbFByb3BlcnR5Q29tcG9zaXRlLnBvcHVsYXRlRGlzZWFzZU1vZGVsKHJldFZhbHVlKTsKKwkJcmV0dXJuIHJldFZhbHVlOworCX0gLy8gZ2V0U2VsZWN0ZWREaXNlYXNlTW9kZWwKKworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGRpc3Bvc2UoKSB7CisJCXN1cGVyLmRpc3Bvc2UoKTsKKwl9CisKKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgdm9pZCBjaGVja1N1YmNsYXNzKCkgeworCQkvLyBEaXNhYmxlIHRoZSBjaGVjayB0aGF0IHByZXZlbnRzIHN1Yi1jbGFzc2luZyBvZiBTV1QgY29tcG9uZW50cworCX0KKworCS8qKgorCSAqIEByZXR1cm4gPGNvZGU+dHJ1ZTwvY29kZT4gaWYgdGhlIGNvbnRlbnRzIG9mIHRoZSBjb250cm9sIGFyZSB2YWxpZCwKKwkgKiAgICAgICAgIDxjb2RlPmZhbHNlPC9jb2RlPiBvdGhlcndpc2UuCisJICovCisJcHVibGljIGJvb2xlYW4gdmFsaWRhdGUoKSB7CisJCXJldHVybiBkaXNlYXNlTW9kZWxQcm9wZXJ0eUNvbXBvc2l0ZS52YWxpZGF0ZSgpOworCX0gLy8gdmFsaWRhdGUKKworCS8qKgorCSAqIEByZXR1cm4gdGhlIGVycm9yIG1lc3NhZ2Ugc2V0IGJ5IHtAbGluayAjdmFsaWRhdGUoKX0KKwkgKi8KKwlwdWJsaWMgU3RyaW5nIGdldEVycm9yTWVzc2FnZSgpIHsKKwkJcmV0dXJuIGRpc2Vhc2VNb2RlbFByb3BlcnR5Q29tcG9zaXRlLmdldEVycm9yTWVzc2FnZSgpOworCX0KKworfSAvLyBEaXNlYXNlRGVmaW5pdGlvbkNvbnRyb2wKZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3dpemFyZHMvRGlzZWFzZU1vZGVsUHJvcGVydHlDb21wb3NpdGUuamF2YSBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3dpemFyZHMvRGlzZWFzZU1vZGVsUHJvcGVydHlDb21wb3NpdGUuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNjg0NGFjCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvd2l6YXJkcy9EaXNlYXNlTW9kZWxQcm9wZXJ0eUNvbXBvc2l0ZS5qYXZhCkBAIC0wLDAgKzEsMTI5IEBACisvLyBEaXNlYXNlTW9kZWxQcm9wZXJ0eUNvbXBvc2l0ZS5qYXZhCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0udWkud2l6YXJkczsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKK2ltcG9ydCBqYXZhLnV0aWwuTWFwOworCitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3Q7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLkRpc2Vhc2VNb2RlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnVpLkFjdGl2YXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnVpLmFkYXB0ZXJzLmRpc2Vhc2Vtb2RlbHByb3BlcnR5ZWRpdG9yLkRpc2Vhc2VNb2RlbFByb3BlcnR5RWRpdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udWkuYWRhcHRlcnMuZGlzZWFzZW1vZGVscHJvcGVydHllZGl0b3IuRGlzZWFzZU1vZGVsUHJvcGVydHlFZGl0b3JBZGFwdGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udWkuYWRhcHRlcnMuZGlzZWFzZW1vZGVscHJvcGVydHllZGl0b3IuRGlzZWFzZU1vZGVsUHJvcGVydHlFZGl0b3JBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuU1dUOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5jdXN0b20uU3RhY2tMYXlvdXQ7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5Nb2RpZnlMaXN0ZW5lcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuTGFiZWw7CisKKy8qKgorICogVGhpcyBjbGFzcyByZXByZXNlbnRzCisgKi8KK3B1YmxpYyBjbGFzcyBEaXNlYXNlTW9kZWxQcm9wZXJ0eUNvbXBvc2l0ZSBleHRlbmRzIENvbXBvc2l0ZSB7CisKKwlwcml2YXRlIE1hcDxEaXNlYXNlTW9kZWwsIERpc2Vhc2VNb2RlbFByb3BlcnR5RWRpdG9yPiBtb2RlbE1hcCA9IG5ldyBIYXNoTWFwPERpc2Vhc2VNb2RlbCwgRGlzZWFzZU1vZGVsUHJvcGVydHlFZGl0b3I+KCk7CisKKwlwcml2YXRlIFN0YWNrTGF5b3V0IHN0YWNrTGF5b3V0ID0gbnVsbDsKKworCS8qKgorCSAqIENyZWF0ZSB0aGUgY29tcG9zaXRlCisJICogCisJICogQHBhcmFtIHBhcmVudAorCSAqIEBwYXJhbSBzdHlsZQorCSAqIEBwYXJhbSBwcm9qZWN0VmFsaWRhdG9yCisJICovCisJcHVibGljIERpc2Vhc2VNb2RlbFByb3BlcnR5Q29tcG9zaXRlKGZpbmFsIENvbXBvc2l0ZSBwYXJlbnQsCisJCQlmaW5hbCBpbnQgc3R5bGUsIGZpbmFsIERpc2Vhc2VNb2RlbFtdIGRpc2Vhc2VNb2RlbHMsCisJCQlNb2RpZnlMaXN0ZW5lciBwcm9qZWN0VmFsaWRhdG9yLCBJUHJvamVjdCBwcm9qZWN0KSB7CisJCXN1cGVyKHBhcmVudCwgc3R5bGUpOworCQlzdGFja0xheW91dCA9IG5ldyBTdGFja0xheW91dCgpOworCQlzZXRMYXlvdXQoc3RhY2tMYXlvdXQpOworCisJCUxhYmVsIGxhYmVsOworCQlsYWJlbCA9IG5ldyBMYWJlbCh0aGlzLCBTV1QuTk9ORSk7CisJCWxhYmVsLnNldFRleHQoRGlzZWFzZVdpemFyZE1lc3NhZ2VzLmdldFN0cmluZygiRE1QQzEiKSk7IC8vJE5PTi1OTFMtMSQKKwkJRGlzZWFzZU1vZGVsUHJvcGVydHlFZGl0b3IgZmlyc3RPbmUgPSBudWxsOworCQkvLyBBbnkgZGlzZWFzZSBtb2RlbHM/CisJCWlmIChkaXNlYXNlTW9kZWxzICE9IG51bGwpIHsKKwkJCS8vIFllcworCQkJZm9yIChEaXNlYXNlTW9kZWwgbW9kZWwgOiBkaXNlYXNlTW9kZWxzKSB7CisKKwkJCQlEaXNlYXNlTW9kZWxQcm9wZXJ0eUVkaXRvckFkYXB0ZXIgZG1wZWEgPSAoRGlzZWFzZU1vZGVsUHJvcGVydHlFZGl0b3JBZGFwdGVyKSBEaXNlYXNlTW9kZWxQcm9wZXJ0eUVkaXRvckFkYXB0ZXJGYWN0b3J5LklOU1RBTkNFCisJCQkJCQkuYWRhcHQobW9kZWwsCisJCQkJCQkJCURpc2Vhc2VNb2RlbFByb3BlcnR5RWRpdG9yQWRhcHRlci5jbGFzcyk7CisKKwkJCQlmaW5hbCBEaXNlYXNlTW9kZWxQcm9wZXJ0eUVkaXRvciBkbXBlID0gZG1wZWEKKwkJCQkJCS5jcmVhdGVEaXNlYXNlTW9kZWxQcm9wZXJ0eUVkaXRvcih0aGlzLCBTV1QuTk9ORSwKKwkJCQkJCQkJcHJvamVjdFZhbGlkYXRvciwgcHJvamVjdCk7CisKKwkJCQltb2RlbE1hcC5wdXQobW9kZWwsIGRtcGUpOworCQkJCWlmIChmaXJzdE9uZSA9PSBudWxsKSB7CisJCQkJCS8vIFllcworCQkJCQlmaXJzdE9uZSA9IGRtcGU7CisJCQkJfSAvLyBpZgorCQkJfSAvLyBmb3IgaQorCQl9IC8vIGlmIGFueSBkaXNlYXNlIG1vZGVscz8KKworCQlzdGFja0xheW91dC50b3BDb250cm9sID0gZmlyc3RPbmU7CisJfSAvLyBEaXNlYXNlTW9kZWxQcm9wZXJ0eUNvbXBvc2l0ZQorCisJdm9pZCBkaXNwbGF5RGlzZWFzZU1vZGVsKGZpbmFsIERpc2Vhc2VNb2RlbCBkaXNlYXNlTW9kZWwpIHsKKwkJZmluYWwgRGlzZWFzZU1vZGVsUHJvcGVydHlFZGl0b3IgZG1wZSA9IG1vZGVsTWFwLmdldChkaXNlYXNlTW9kZWwpOworCQkvLyBEaWQgd2UgZmluZCBpdD8KKwkJaWYgKGRtcGUgIT0gbnVsbCkgeworCQkJLy8gWWVzCisJCQlzdGFja0xheW91dC50b3BDb250cm9sID0gZG1wZTsKKwkJCWxheW91dCgpOworCQl9IC8vIGlmCisJCWVsc2UgeworCQkJQWN0aXZhdG9yLmxvZ0Vycm9yKERpc2Vhc2VXaXphcmRNZXNzYWdlcy5nZXRTdHJpbmcoIkRNUEMyIikgLy8kTk9OLU5MUy0xJAorCQkJCQkrIGRpc2Vhc2VNb2RlbC5nZXRDbGFzcygpLmdldE5hbWUoKSArICJcIiIsIG51bGwpOyAvLyROT04tTkxTLTEkCisJCX0KKwl9IC8vIGRpc3BsYXlEaXNlYXNlTW9kZWwKKwkKKwlwdWJsaWMgdm9pZCBkaXNwb3NlKCkgeworCQlzdXBlci5kaXNwb3NlKCk7CisJfQorCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgY2hlY2tTdWJjbGFzcygpIHsKKwkJLy8gRGlzYWJsZSB0aGUgY2hlY2sgdGhhdCBwcmV2ZW50cyBzdWItY2xhc3Npbmcgb2YgU1dUIGNvbXBvbmVudHMKKwl9CisKKwkvKioKKwkgKiBAcmV0dXJuIDxjb2RlPnRydWU8L2NvZGU+IGlmIHRoZSBjb250ZW50cyBvZiB0aGUgY29tcG9zaXRlIGFyZSB2YWxpZCwKKwkgKiAgICAgICAgIDxjb2RlPmZhbHNlPC9jb2RlPiBvdGhlcndpc2UuCisJICovCisJcHVibGljIGJvb2xlYW4gdmFsaWRhdGUoKSB7CisJCXJldHVybiAoKERpc2Vhc2VNb2RlbFByb3BlcnR5RWRpdG9yKSAoc3RhY2tMYXlvdXQudG9wQ29udHJvbCkpCisJCQkJLnZhbGlkYXRlKCk7CisJfSAvLyB2YWxpZGF0ZQorCisJLyoqCisJICogQHJldHVybgorCSAqLworCXB1YmxpYyBTdHJpbmcgZ2V0RXJyb3JNZXNzYWdlKCkgeworCQlyZXR1cm4gKChEaXNlYXNlTW9kZWxQcm9wZXJ0eUVkaXRvcikgKHN0YWNrTGF5b3V0LnRvcENvbnRyb2wpKQorCQkJCS5nZXRFcnJvck1lc3NhZ2UoKTsKKwl9CisKKwkvKioKKwkgKiBAcGFyYW0gZGlzZWFzZU1vZGVsCisJICovCisJcHVibGljIHZvaWQgcG9wdWxhdGVEaXNlYXNlTW9kZWwoRGlzZWFzZU1vZGVsIGRpc2Vhc2VNb2RlbCkgeworCQkoKERpc2Vhc2VNb2RlbFByb3BlcnR5RWRpdG9yKSAoc3RhY2tMYXlvdXQudG9wQ29udHJvbCkpCisJCQkJLnBvcHVsYXRlKGRpc2Vhc2VNb2RlbCk7CisJfSAvLyBwb3B1bGF0ZURpc2Vhc2VNb2RlbAorCit9IC8vIERpc2Vhc2VNb2RlbFByb3BlcnR5Q29tcG9zaXRlCmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS93aXphcmRzL0Rpc2Vhc2VXaXphcmRNZXNzYWdlcy5qYXZhIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvd2l6YXJkcy9EaXNlYXNlV2l6YXJkTWVzc2FnZXMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lODU1NjZjCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvd2l6YXJkcy9EaXNlYXNlV2l6YXJkTWVzc2FnZXMuamF2YQpAQCAtMCwwICsxLDQ2IEBACisvLyBEaXNlYXNlV2l6YXJkTWVzc2FnZXMuamF2YQorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnVpLndpemFyZHM7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgamF2YS51dGlsLk1pc3NpbmdSZXNvdXJjZUV4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLnV0aWwuUmVzb3VyY2VCdW5kbGU7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuQ29uc3RhbnRzOworCisvKioKKyAqIFRoaXMgY2xhc3MgaXMgdGhlIFJlc291cmNlIEJ1bmRsZSBmb3IgdGhpcyBwYWNrYWdlLgorICovCitwdWJsaWMgY2xhc3MgRGlzZWFzZVdpemFyZE1lc3NhZ2VzIHsKKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgQlVORExFX05BTUUgPSBDb25zdGFudHMuSURfUk9PVAorCQkJKyAiLnVpLndpemFyZHMuZGlzZWFzZXdpemFyZG1lc3NhZ2VzIjsgLy8kTk9OLU5MUy0xJAorCisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgUmVzb3VyY2VCdW5kbGUgUkVTT1VSQ0VfQlVORExFID0gUmVzb3VyY2VCdW5kbGUKKwkJCS5nZXRCdW5kbGUoQlVORExFX05BTUUpOworCisJcHJpdmF0ZSBEaXNlYXNlV2l6YXJkTWVzc2FnZXMoKSB7CisJCS8vIGVtcHR5CisJfQorCisJLyoqCisJICogQHBhcmFtIGtleQorCSAqICAgICAgICAgICAgdGhlIGtleSBmb3IgdGhlIG1lc3NhZ2UKKwkgKiBAcmV0dXJuIHRoZSBzdHJpbmcgdGhhdCBtYXRjaGVzIHRoZSBrZXkKKwkgKi8KKwlwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRTdHJpbmcoZmluYWwgU3RyaW5nIGtleSkgeworCQl0cnkgeworCQkJcmV0dXJuIFJFU09VUkNFX0JVTkRMRS5nZXRTdHJpbmcoa2V5KTsKKwkJfSBjYXRjaCAoZmluYWwgTWlzc2luZ1Jlc291cmNlRXhjZXB0aW9uIGUpIHsKKwkJCXJldHVybiAnIScgKyBrZXkgKyAnISc7CisJCX0KKwl9IC8vIGdldFN0cmluZworfSAvLyBEaXNlYXNlV2l6YXJkTWVzc2FnZXMKZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3dpemFyZHMvSVNPS2V5UGlja2VkRXZlbnQuamF2YSBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3dpemFyZHMvSVNPS2V5UGlja2VkRXZlbnQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YWQyNzBmCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvd2l6YXJkcy9JU09LZXlQaWNrZWRFdmVudC5qYXZhCkBAIC0wLDAgKzEsNDEgQEAKKy8vIElTT0tleVBpY2tlZEV2ZW50LmphdmEKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS51aS53aXphcmRzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGphdmEudXRpbC5FdmVudE9iamVjdDsKKworLyoqCisgKiBUaGlzIGNsYXNzIHJlcHJlc2VudHMgdGhlIGV2ZW50IG9mIGFuIElTT2tleSBiZWluZyBzZWxlY3RlZCB1c2luZyBhbgorICoge0BsaW5rIElTT0tleVBpY2tlcn0uCisgKi8KK3B1YmxpYyBjbGFzcyBJU09LZXlQaWNrZWRFdmVudCBleHRlbmRzIEV2ZW50T2JqZWN0IHsKKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBsb25nIHNlcmlhbFZlcnNpb25VSUQgPSAxTDsKKwlwcml2YXRlIFN0cmluZyBpc29LZXk7CisKKwkvKioKKwkgKiBAcGFyYW0gc291cmNlCisJICogQHBhcmFtIGlzb0tleQorCSAqLworCXB1YmxpYyBJU09LZXlQaWNrZWRFdmVudChPYmplY3Qgc291cmNlLCBTdHJpbmcgaXNvS2V5KSB7CisJCXN1cGVyKHNvdXJjZSk7CisJCXRoaXMuaXNvS2V5ID0gaXNvS2V5OworCX0KKworCS8qKgorCSAqIEByZXR1cm4gdGhlIGlzb0tleQorCSAqLworCXB1YmxpYyBmaW5hbCBTdHJpbmcgZ2V0SXNvS2V5KCkgeworCQlyZXR1cm4gaXNvS2V5OworCX0KKworfSAvLyBJU09LZXlQaWNrZWRFdmVudApkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvd2l6YXJkcy9JU09LZXlQaWNrZWRFdmVudExpc3RlbmVyLmphdmEgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS93aXphcmRzL0lTT0tleVBpY2tlZEV2ZW50TGlzdGVuZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YTdhMGM1Ci0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvd2l6YXJkcy9JU09LZXlQaWNrZWRFdmVudExpc3RlbmVyLmphdmEKQEAgLTAsMCArMSwyMiBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnVpLndpemFyZHM7CitpbXBvcnQgamF2YS51dGlsLkV2ZW50TGlzdGVuZXI7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKKy8qKgorICogVGhpcyBpbnRlcmZhY2UgaXMgaW1wbGVtZW50ZWQgYnkgY2xhc3NlcyB0aGF0IHdhbnQgdG8gYmUgaW5mb3JtZWQgd2hlbiBhbiBJU08KKyAqIGtleSBpcyBzZWxlY3RlZCBmcm9tIHRoZSB7QGxpbmsgSVNPS2V5UGlja2VyfTsKKyAqLworcHVibGljIGludGVyZmFjZSBJU09LZXlQaWNrZWRFdmVudExpc3RlbmVyIGV4dGVuZHMgRXZlbnRMaXN0ZW5lciB7CisJdm9pZCBpc29LZXlQaWNrZWQoSVNPS2V5UGlja2VkRXZlbnQgaWtwZSk7Cit9IC8vIElTT0tleVBpY2tlZEV2ZW50TGlzdGVuZXIKZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3dpemFyZHMvSVNPS2V5UGlja2VyLmphdmEgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS93aXphcmRzL0lTT0tleVBpY2tlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU1ZTA2YTcKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS93aXphcmRzL0lTT0tleVBpY2tlci5qYXZhCkBAIC0wLDAgKzEsMTU3IEBACisvLyBJU09LZXlQaWNrZXIuamF2YQorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnVpLndpemFyZHM7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CitpbXBvcnQgamF2YS51dGlsLmNvbmN1cnJlbnQuQ29weU9uV3JpdGVBcnJheUxpc3Q7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLkxhYmVsUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS5HZW9ncmFwaGljTmFtZXM7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LlNXVDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLlNlbGVjdGlvbkFkYXB0ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5TZWxlY3Rpb25FdmVudDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QubGF5b3V0LkZvcm1BdHRhY2htZW50OworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5sYXlvdXQuRm9ybURhdGE7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5Gb3JtTGF5b3V0OworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5FdmVudDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5MYWJlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5MaXN0ZW5lcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5UZXh0OworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLmRpYWxvZ3MuRmlsdGVyZWRMaXN0OworCisvKioKKyAqIFRoaXMgY2xhc3MgaXMgYSBTV1QgQ29tcG9zaXRlIHRoYXQgYWxsb3dzIGEgdXNlciB0byBzcGVjaWZ5IGFuIElTTyBrZXkgYnkKKyAqIHBpY2tpbmcgZnJvbSBhbiBleHBhbmRhYmxlIGhpZXJhcmNoeSBvZiBjb3VudHJ5IG5hbWVzIGFuZCB0aGVpcgorICogc3ViLWRpdmlzaW9ucy4KKyAqLworcHVibGljIGNsYXNzIElTT0tleVBpY2tlciBleHRlbmRzIENvbXBvc2l0ZSB7CisKKwlwcml2YXRlIGZpbmFsIExpc3Q8SVNPS2V5UGlja2VkRXZlbnRMaXN0ZW5lcj4gbGlzdGVuZXJzID0gbmV3IENvcHlPbldyaXRlQXJyYXlMaXN0PElTT0tleVBpY2tlZEV2ZW50TGlzdGVuZXI+KCk7CisKKwlwcml2YXRlIGZpbmFsIExhYmVsIGlzb0tleUxldmVsRGVzY3JpcHRpb247CisJcHJpdmF0ZSBmaW5hbCBGaWx0ZXJlZExpc3QgZmlsdGVyZWRMaXN0OworCXByaXZhdGUgZmluYWwgVGV4dCB0ZXh0OworCXByaXZhdGUgaW50IGlzb0tleUxldmVsOworCisJLyoqCisJICogQ3JlYXRlIHRoZSBjb21wb3NpdGUKKwkgKiAKKwkgKiBAcGFyYW0gcGFyZW50CisJICogQHBhcmFtIHN0eWxlCisJICovCisJcHVibGljIElTT0tleVBpY2tlcihmaW5hbCBDb21wb3NpdGUgcGFyZW50LCBmaW5hbCBpbnQgc3R5bGUsCisJCQlmaW5hbCBpbnQgaXNvS2V5TGV2ZWwpIHsKKwkJc3VwZXIocGFyZW50LCBzdHlsZSk7CisJCXRoaXMuaXNvS2V5TGV2ZWwgPSBpc29LZXlMZXZlbDsKKwkJc2V0TGF5b3V0KG5ldyBGb3JtTGF5b3V0KCkpOworCisJCXRleHQgPSBuZXcgVGV4dCh0aGlzLCBTV1QuQk9SREVSKTsKKwkJZmluYWwgRm9ybURhdGEgZmRfdGV4dCA9IG5ldyBGb3JtRGF0YSgpOworCQlmZF90ZXh0LnRvcCA9IG5ldyBGb3JtQXR0YWNobWVudCgwLCAwKTsKKwkJZmRfdGV4dC5sZWZ0ID0gbmV3IEZvcm1BdHRhY2htZW50KDI1LCAwKTsKKwkJZmRfdGV4dC5yaWdodCA9IG5ldyBGb3JtQXR0YWNobWVudCgxMDAsIDApOworCQl0ZXh0LnNldExheW91dERhdGEoZmRfdGV4dCk7CisJCXRleHQuYWRkTGlzdGVuZXIoU1dULk1vZGlmeSwgbmV3IExpc3RlbmVyKCkgeworCQkJcHVibGljIHZvaWQgaGFuZGxlRXZlbnQoZmluYWwgRXZlbnQgZXZlbnQpIHsKKwkJCQlmaWx0ZXJlZExpc3Quc2V0RmlsdGVyKHRleHQuZ2V0VGV4dCgpKTsKKwkJCX0KKwkJfSk7CisJCWlzb0tleUxldmVsRGVzY3JpcHRpb24gPSBuZXcgTGFiZWwodGhpcywgU1dULk5PTkUpOworCQlpc29LZXlMZXZlbERlc2NyaXB0aW9uLnNldFRleHQoIkxhYmVsIik7CisJCUZvcm1EYXRhIGZkX2lzb0tleUxldmVsRGVzY3JpcHRpb247CisJCWZkX2lzb0tleUxldmVsRGVzY3JpcHRpb24gPSBuZXcgRm9ybURhdGEoKTsKKwkJZmRfaXNvS2V5TGV2ZWxEZXNjcmlwdGlvbi50b3AgPSBuZXcgRm9ybUF0dGFjaG1lbnQodGV4dCwgMiwgU1dULlRPUCk7CisJCWZkX2lzb0tleUxldmVsRGVzY3JpcHRpb24ucmlnaHQgPSBuZXcgRm9ybUF0dGFjaG1lbnQoMjUsIDApOworCQlmZF9pc29LZXlMZXZlbERlc2NyaXB0aW9uLmxlZnQgPSBuZXcgRm9ybUF0dGFjaG1lbnQoMCwgMCk7CisJCXRoaXMuaXNvS2V5TGV2ZWxEZXNjcmlwdGlvbi5zZXRMYXlvdXREYXRhKGZkX2lzb0tleUxldmVsRGVzY3JpcHRpb24pOworCisJCWZpbHRlcmVkTGlzdCA9IG5ldyBGaWx0ZXJlZExpc3QodGhpcywgU1dULkJPUkRFUiwgbnVsbCwgZmFsc2UsIGZhbHNlLAorCQkJCXRydWUpOworCQlmaW5hbCBGb3JtRGF0YSBmZF9maWx0ZXJlZExpc3QgPSBuZXcgRm9ybURhdGEoKTsKKwkJZmRfZmlsdGVyZWRMaXN0LnRvcCA9IG5ldyBGb3JtQXR0YWNobWVudCh0ZXh0LCA1LCBTV1QuREVGQVVMVCk7CisJCWZkX2ZpbHRlcmVkTGlzdC5ib3R0b20gPSBuZXcgRm9ybUF0dGFjaG1lbnQoMTAwLCAwKTsKKwkJZmRfZmlsdGVyZWRMaXN0LmxlZnQgPSBuZXcgRm9ybUF0dGFjaG1lbnQodGV4dCwgMCwgU1dULkxFRlQpOworCQlmZF9maWx0ZXJlZExpc3QucmlnaHQgPSBuZXcgRm9ybUF0dGFjaG1lbnQodGV4dCwgMCwgU1dULlJJR0hUKTsKKwkJZmlsdGVyZWRMaXN0LnNldExheW91dERhdGEoZmRfZmlsdGVyZWRMaXN0KTsKKwkJZmlsdGVyZWRMaXN0LmFkZFNlbGVjdGlvbkxpc3RlbmVyKG5ldyBTZWxlY3Rpb25BZGFwdGVyKCkgeworCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgdm9pZCB3aWRnZXRTZWxlY3RlZChmaW5hbCBTZWxlY3Rpb25FdmVudCBlKSB7CisJCQkJZmluYWwgT2JqZWN0W10gc2VsZWN0ZWQgPSBmaWx0ZXJlZExpc3QuZ2V0U2VsZWN0aW9uKCk7CisJCQkJLy8gQW55dGhpbmcgc2VsZWN0ZWQ/CisJCQkJaWYgKHNlbGVjdGVkLmxlbmd0aCA9PSAxKSB7CisJCQkJCWZpbmFsIFN0cmluZyBpc29LZXkgPSAoU3RyaW5nKSBzZWxlY3RlZFswXTsKKwkJCQkJZmlyZUlTT0tleVBpY2tlZChpc29LZXkpOworCQkJCX0KKwkJCX0KKworCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgdm9pZCB3aWRnZXREZWZhdWx0U2VsZWN0ZWQoZmluYWwgU2VsZWN0aW9uRXZlbnQgZSkgeworCQkJCXdpZGdldFNlbGVjdGVkKGUpOworCQkJfQorCQl9KTsKKworCQlmaWx0ZXJlZExpc3Quc2V0SWdub3JlQ2FzZSh0cnVlKTsKKwkJZmlsdGVyZWRMaXN0LnNldEZpbHRlcigiIik7CisJCWZpbHRlcmVkTGlzdC5zZXRMYWJlbFByb3ZpZGVyKG5ldyBMYWJlbFByb3ZpZGVyKCkgeworCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgU3RyaW5nIGdldFRleHQoZmluYWwgT2JqZWN0IGVsZW1lbnQpIHsKKwkJCQlyZXR1cm4gZ2V0TmFtZSgoU3RyaW5nKSBlbGVtZW50LCBpc29LZXlMZXZlbCk7CisJCQl9CisJCX0pOworCQlmaWx0ZXJlZExpc3Quc2V0RWxlbWVudHMobmV3IE9iamVjdFtdIHt9KTsKKworCQlwYWNrKCk7CisJfSAvLyBJU09LZXlQaWNrZXIKKworCXB1YmxpYyB2b2lkIHNldElTT0tleXMoZmluYWwgT2JqZWN0W10gaXNvS2V5cykgeworCQlmaWx0ZXJlZExpc3Quc2V0RWxlbWVudHMoaXNvS2V5cyk7CisJCXRleHQuc2V0VGV4dCgiIik7CisJfSAvLyBzZXRJU09LZXlzCisKKwlwdWJsaWMgdm9pZCBzZXRJU09LZXlMZXZlbERlc2NyaXB0aW9uKGZpbmFsIFN0cmluZyBpc29LZXlMZXZlbERlc2NyaXB0aW9uKSB7CisJCXRoaXMuaXNvS2V5TGV2ZWxEZXNjcmlwdGlvbi5zZXRUZXh0KGlzb0tleUxldmVsRGVzY3JpcHRpb24pOworCX0gLy8gc2V0SVNPS2V5TGV2ZWxEZXNjcmlwdGlvbgorCisJLyoqCisJICogQHJldHVybiB0aGUgaXNvIGtleSBsZXZlbAorCSAqLworCXB1YmxpYyBpbnQgZ2V0SVNPS2V5TGV2ZWwoKSB7CisJCXJldHVybiBpc29LZXlMZXZlbDsKKwl9CisKKwlwdWJsaWMgdm9pZCBzZXRJU09LZXlMZXZlbChmaW5hbCBpbnQgaXNvS2V5TGV2ZWwpIHsKKwkJdGhpcy5pc29LZXlMZXZlbCA9IGlzb0tleUxldmVsOworCX0gLy8gc2V0TGV2ZWwKKworCXByaXZhdGUgU3RyaW5nIGdldE5hbWUoZmluYWwgU3RyaW5nIGlzb0tleSwgZmluYWwgaW50IGxldmVsKSB7CisJCXJldHVybiBHZW9ncmFwaGljTmFtZXMuZ2V0TmFtZShpc29LZXksIGxldmVsKTsKKwl9IC8vIGdldE5hbWUKKworCXB1YmxpYyB2b2lkIGFkZElTT0tleVBpY2tlZExpc3RlbmVyKGZpbmFsIElTT0tleVBpY2tlZEV2ZW50TGlzdGVuZXIgbGlzdGVuZXIpIHsKKwkJbGlzdGVuZXJzLmFkZChsaXN0ZW5lcik7CisJfSAvLyBhZGRJU09LZXlQaWNrZWRMaXN0ZW5lcgorCisJcHVibGljIHZvaWQgcmVtb3ZlSVNPS2V5UGlja2VkTGlzdGVuZXIoCisJCQlmaW5hbCBJU09LZXlQaWNrZWRFdmVudExpc3RlbmVyIGxpc3RlbmVyKSB7CisJCWxpc3RlbmVycy5yZW1vdmUobGlzdGVuZXIpOworCX0gLy8gcmVtb3ZlSVNPS2V5UGlja2VkTGlzdGVuZXIKKworCXByaXZhdGUgdm9pZCBmaXJlSVNPS2V5UGlja2VkKGZpbmFsIFN0cmluZyBpc29LZXkpIHsKKwkJZmluYWwgSVNPS2V5UGlja2VkRXZlbnQgaXNvS2V5UGlja2VkRXZlbnQgPSBuZXcgSVNPS2V5UGlja2VkRXZlbnQodGhpcywKKwkJCQlpc29LZXkpOworCQlmb3IgKGZpbmFsIElTT0tleVBpY2tlZEV2ZW50TGlzdGVuZXIgbGlzdGVuZXIgOiBsaXN0ZW5lcnMpIHsKKwkJCWxpc3RlbmVyLmlzb0tleVBpY2tlZChpc29LZXlQaWNrZWRFdmVudCk7CisJCX0gLy8gZm9yIGVhY2ggSVNPS2V5UGlja2VkRXZlbnRMaXN0ZW5lcgorCX0KK30gLy8gSVNPS2V5UGlja2VyCmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS93aXphcmRzL0luZmVjdG9yRGVmaW5pdGlvbkNvbXBvc2l0ZS5qYXZhIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvd2l6YXJkcy9JbmZlY3RvckRlZmluaXRpb25Db21wb3NpdGUuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZDc1NDM3Ci0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvd2l6YXJkcy9JbmZlY3RvckRlZmluaXRpb25Db21wb3NpdGUuamF2YQpAQCAtMCwwICsxLDc0NCBAQAorLy8gSW5mZWN0b3JEZWZpbml0aW9uQ29udHJvbC5qYXZhCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0udWkud2l6YXJkczsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqYXZhLmlvLkZpbGU7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuVVJJOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZFBhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS51aS5BY3RpdmF0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS51aS53aWRnZXRzLkxvY2F0aW9uUGlja2VyRGlhbG9nOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5TV1Q7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5Nb2RpZnlMaXN0ZW5lcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLlNlbGVjdGlvbkFkYXB0ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5TZWxlY3Rpb25FdmVudDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLlNlbGVjdGlvbkxpc3RlbmVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5sYXlvdXQuRmlsbExheW91dDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QubGF5b3V0LkZvcm1BdHRhY2htZW50OworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5sYXlvdXQuRm9ybURhdGE7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5Gb3JtTGF5b3V0OworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkJ1dHRvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuRGlyZWN0b3J5RGlhbG9nOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkV2ZW50OworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkxhYmVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkxpc3RlbmVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlNoZWxsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlRleHQ7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuUGxhdGZvcm1VSTsKKworLyoqCisgKiBUaGlzIGNsYXNzIHJlcHJlc2VudHMgdGhlIFNXVCBjb21wb3NpdGUgdGhhdCBwcm92aWRlcyB0aGUgR1VJIGZvciBkZWZpbmluZyBhbgorICoge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5JbmZlY3Rvcn0gaW4gdGhlCisgKiB7QGxpbmsgTmV3SW5mZWN0b3JXaXphcmR9LgorICovCitwdWJsaWMgY2xhc3MgSW5mZWN0b3JEZWZpbml0aW9uQ29tcG9zaXRlIGV4dGVuZHMgQ29tcG9zaXRlIHsKKworCS8vIHByaXZhdGUgc3RhdGljIGZpbmFsIFVSSSBMRVZFTF8wX0lTT19OQU1FX0ZJTEVfVVJJID0gVVJJCisJLy8gLmNyZWF0ZVVSSSgicGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L1paWi9sZXZlbDBJU09OYW1lcy5wcm9wZXJ0aWVzIik7CisKKwlwcml2YXRlIFN0cmluZyBpc29LZXkgPSAiIjsgLy8kTk9OLU5MUy0xJAorCXByaXZhdGUgVVJJIHRhcmdldFVSSSA9IG51bGw7CisJCisJcHJpdmF0ZSBUZXh0IG51bWJlck9mSW5mZWN0aW9uc1RleHQ7CisKKwlwcml2YXRlIGZpbmFsIFRleHQgcG9wdWxhdGlvblRleHQ7CisKKwlwcml2YXRlIGZpbmFsIFRleHQgZGlzZWFzZU5hbWVUZXh0OworCQorCXByaXZhdGUgTGFiZWwgbnVtYmVyT2ZJbmZlY3Rpb25zTGFiZWw7CisKKwlwcml2YXRlIExhYmVsIGxvZ0RpckxhYmVsOworCXByaXZhdGUgVGV4dCBsb2dEaXJUZXh0OworCQorCXByaXZhdGUgU3RyaW5nIGVycm9yTWVzc2FnZTsKKwkKKwkvKioKKwkgKiBSYWRpbyBidXR0b25zIHRvIHNwZWNpZnkgaWYgdGhlIHdpemFyZCB3aWxsIGNyZWF0ZSBhbiBpbmZlY3RvcgorCSAqIG9yIGFuIGlub2N1bGF0b3IuCisJICovCisJcHJpdmF0ZSBCdXR0b25bXSBpbmZlY3Rvck1vZGVSYWRpb0J1dHRvbnMgPSBuZXcgQnV0dG9uWzJdOworCXByaXZhdGUgQnV0dG9uW10gaW1wb3J0UmFkaW9CdXR0b25zID0gbmV3IEJ1dHRvblsyXTsKKwkKKwlwcml2YXRlIEJ1dHRvbiB1c2VBYnNvbHV0ZU51bWJlckJ1dHRvbiA9IG51bGw7CisJcHJpdmF0ZSBCdXR0b24gdXNlUGVyY2VudGFnZUJ1dHRvbiA9IG51bGw7CisJcHJpdmF0ZSBCdXR0b24gbG9jYXRpb25CdXR0b24gPSBudWxsOworCQorCXByaXZhdGUgQnV0dG9uW10gcm93QnV0dG9ucyA9IG5ldyBCdXR0b25bM107CisJQ29tcG9zaXRlIHJvd0NvbXBvc2l0ZSA9IG51bGw7CisJCisJcHJpdmF0ZSBCdXR0b24gaW1wb3J0RmlsZUJ1dHRvbiA9IG51bGw7CisJcHJpdmF0ZSBib29sZWFuIGltcG9ydEZyb21GaWxlID0gZmFsc2U7CisJcHJpdmF0ZSBib29sZWFuIHVzZUZpcnN0Um93ID0gdHJ1ZTsKKwlwcml2YXRlIGJvb2xlYW4gdXNlTGFzdFJvdyA9IGZhbHNlOworCXByaXZhdGUgYm9vbGVhbiB1c2VTZWxlY3RlZFJvdyA9IGZhbHNlOworCQorCVRleHQgcm93dHh0ID0gbnVsbDsKKwkKKwlMYWJlbCBpc29rZXlWYWx1ZUxhYmVsID0gbnVsbDsKKwkKKwkvKiogCisJICoga2VlcCB0cmFjayBvZiB0aGUgbW9kZS4KKwkgKiBpbmZlY3RvciBieSBkZWZhdWx0CisJICovCisJcHJpdmF0ZSBib29sZWFuIGluZmVjdG9yTW9kZSA9IHRydWU7CisJCisJLyoqCisJICoga2VlcCB0cmFjayBvZiBwZXJjZW50YWdlIG9yIGFic29sdXRlIG51bWJlcgorCSAqLworCXByaXZhdGUgYm9vbGVhbiBwZXJjZW50YWdlID0gZmFsc2U7CisKKwkvKioKKwkgKiBUaGUgcHJvamVjdCAoZm9yIGxvY2F0aW9uIHBpY2tlcikKKwkgKi8KKwkKKwlwdWJsaWMgSVByb2plY3QgY3VycmVudFByb2plY3Q7CisJCisKKwkvKioKKwkgKiBAcGFyYW0gcGFyZW50CisJICogQHBhcmFtIHN0eWxlCisJICovCisJcHVibGljIEluZmVjdG9yRGVmaW5pdGlvbkNvbXBvc2l0ZShmaW5hbCBDb21wb3NpdGUgcGFyZW50LCBmaW5hbCBpbnQgc3R5bGUsCisJCQlmaW5hbCBNb2RpZnlMaXN0ZW5lciBwcm9qZWN0VmFsaWRhdG9yLCBmaW5hbCBJUHJvamVjdCBwcm9qZWN0KSB7CisJCXN1cGVyKHBhcmVudCwgc3R5bGUpOworCQkKKwkJdGhpcy5jdXJyZW50UHJvamVjdCA9IHByb2plY3Q7CisJCQorCQlzZXRMYXlvdXQobmV3IEZvcm1MYXlvdXQoKSk7CisJCQorCQlmaW5hbCBpbnQgbWFyZ2luMSA9IDM1OworCQlmaW5hbCBpbnQgbWFyZ2luMiA9IDI1OworCQkKKwkJLy8gcmFkaW8gYnV0dG9ucyB0byBzZXQgdGhlIG1vZGUKKwkJQ29tcG9zaXRlIGluZmVjdG9yTW9kZUNvbXBvc2l0ZSA9IGNyZWF0ZUluZmVjdG9yTW9kZVJhZGlvQnV0dG9uc0NvbXBvc2l0ZSh0aGlzLCBwcm9qZWN0VmFsaWRhdG9yKTsKKwkJZmluYWwgRm9ybURhdGEgZmRfaW5mZWN0b3JNb2RlID0gbmV3IEZvcm1EYXRhKCk7CisJCWZkX2luZmVjdG9yTW9kZS50b3AgPSBuZXcgRm9ybUF0dGFjaG1lbnQoMCwgMCk7CisJCWZkX2luZmVjdG9yTW9kZS5ib3R0b20gPSBuZXcgRm9ybUF0dGFjaG1lbnQoNSwgMCk7CisJCWZkX2luZmVjdG9yTW9kZS5sZWZ0ID0gbmV3IEZvcm1BdHRhY2htZW50KDAsIDApOworCQlmZF9pbmZlY3Rvck1vZGUucmlnaHQgPSBuZXcgRm9ybUF0dGFjaG1lbnQoMTAwLCAwKTsKKwkJaW5mZWN0b3JNb2RlQ29tcG9zaXRlLnNldExheW91dERhdGEoZmRfaW5mZWN0b3JNb2RlKTsKKworCQkKKwkJLy8gRGlzZWFzZSBOYW1lCisJCWZpbmFsIExhYmVsIGRpc2Vhc2VOYW1lTGFiZWwgPSBuZXcgTGFiZWwodGhpcywgU1dULk5PTkUpOworCQlmaW5hbCBGb3JtRGF0YSBmZF9kaXNlYXNlTmFtZUxhYmVsID0gbmV3IEZvcm1EYXRhKCk7CisJCWZkX2Rpc2Vhc2VOYW1lTGFiZWwubGVmdCA9IG5ldyBGb3JtQXR0YWNobWVudCgwLCAwKTsKKwkJZmRfZGlzZWFzZU5hbWVMYWJlbC5yaWdodCA9IG5ldyBGb3JtQXR0YWNobWVudChtYXJnaW4xLCAwKTsKKwkJZmRfZGlzZWFzZU5hbWVMYWJlbC50b3AgPSBuZXcgRm9ybUF0dGFjaG1lbnQoaW5mZWN0b3JNb2RlQ29tcG9zaXRlLCA1LCBTV1QuQk9UVE9NKTsKKwkJZGlzZWFzZU5hbWVMYWJlbC5zZXRMYXlvdXREYXRhKGZkX2Rpc2Vhc2VOYW1lTGFiZWwpOworCQlkaXNlYXNlTmFtZUxhYmVsLnNldFRleHQoRGlzZWFzZVdpemFyZE1lc3NhZ2VzLmdldFN0cmluZygiTkluZldpekROIikpOyAvLyROT04tTkxTLTEkCisKKwkJCisJCWRpc2Vhc2VOYW1lVGV4dCA9IG5ldyBUZXh0KHRoaXMsIFNXVC5CT1JERVIpOworCQlkaXNlYXNlTmFtZVRleHQuc2V0VG9vbFRpcFRleHQoRGlzZWFzZVdpemFyZE1lc3NhZ2VzLmdldFN0cmluZygiTkluZldpekROVFQiKSk7IC8vJE5PTi1OTFMtMSQKKwkJZGlzZWFzZU5hbWVUZXh0LmFkZE1vZGlmeUxpc3RlbmVyKHByb2plY3RWYWxpZGF0b3IpOworCQkKKwkJZmluYWwgRm9ybURhdGEgZmRfZGlzZWFzZU5hbWVUZXh0ID0gbmV3IEZvcm1EYXRhKCk7CisJCWZkX2Rpc2Vhc2VOYW1lVGV4dC5sZWZ0ID0gbmV3IEZvcm1BdHRhY2htZW50KGRpc2Vhc2VOYW1lTGFiZWwsIDApOworCQlmZF9kaXNlYXNlTmFtZVRleHQucmlnaHQgPSBuZXcgRm9ybUF0dGFjaG1lbnQoMTAwLCAwKTsKKwkJZmRfZGlzZWFzZU5hbWVUZXh0LnRvcCA9IG5ldyBGb3JtQXR0YWNobWVudChpbmZlY3Rvck1vZGVDb21wb3NpdGUsIDUsIFNXVC5CT1RUT00pOworCQlkaXNlYXNlTmFtZVRleHQuc2V0TGF5b3V0RGF0YShmZF9kaXNlYXNlTmFtZVRleHQpOworCQkKKworCQkvLyBQb3B1bGF0aW9uCisJCWZpbmFsIExhYmVsIHBvcHVsYXRpb25MYWJlbCA9IG5ldyBMYWJlbCh0aGlzLCBTV1QuTk9ORSk7CisJCWZpbmFsIEZvcm1EYXRhIGZkX3BvcHVsYXRpb25MYWJlbCA9IG5ldyBGb3JtRGF0YSgpOworCQlmZF9wb3B1bGF0aW9uTGFiZWwubGVmdCA9IG5ldyBGb3JtQXR0YWNobWVudCgwLCAwKTsKKwkJZmRfcG9wdWxhdGlvbkxhYmVsLnJpZ2h0ID0gbmV3IEZvcm1BdHRhY2htZW50KG1hcmdpbjEsIDApOworCQlmZF9wb3B1bGF0aW9uTGFiZWwudG9wID0gbmV3IEZvcm1BdHRhY2htZW50KGRpc2Vhc2VOYW1lTGFiZWwsIDUsIFNXVC5CT1RUT00pOworCQlwb3B1bGF0aW9uTGFiZWwuc2V0TGF5b3V0RGF0YShmZF9wb3B1bGF0aW9uTGFiZWwpOworCQlwb3B1bGF0aW9uTGFiZWwuc2V0VGV4dChEaXNlYXNlV2l6YXJkTWVzc2FnZXMuZ2V0U3RyaW5nKCJOSW5mV2l6UE9QIikpOyAvLyROT04tTkxTLTEkCisKKwkJcG9wdWxhdGlvblRleHQgPSBuZXcgVGV4dCh0aGlzLCBTV1QuQk9SREVSKTsKKwkJcG9wdWxhdGlvblRleHQuc2V0VGV4dChTdGFuZGFyZFBhY2thZ2UuTGl0ZXJhbHMuRElTRUFTRV9NT0RFTF9fUE9QVUxBVElPTl9JREVOVElGSUVSLmdldERlZmF1bHRWYWx1ZUxpdGVyYWwoKSk7CisJCXBvcHVsYXRpb25UZXh0LnNldFRvb2xUaXBUZXh0KERpc2Vhc2VXaXphcmRNZXNzYWdlcy5nZXRTdHJpbmcoIk5JbmZXaXpQT1BUVCIpKTsgLy8kTk9OLU5MUy0xJAorCQlwb3B1bGF0aW9uVGV4dC5hZGRNb2RpZnlMaXN0ZW5lcihwcm9qZWN0VmFsaWRhdG9yKTsKKwkJCisJCWZpbmFsIEZvcm1EYXRhIGZkX3BvcHVsYXRpb25UZXh0ID0gbmV3IEZvcm1EYXRhKCk7CisJCWZkX3BvcHVsYXRpb25UZXh0LnRvcCA9IG5ldyBGb3JtQXR0YWNobWVudChkaXNlYXNlTmFtZUxhYmVsLCA1LCBTV1QuQk9UVE9NKTsKKwkJZmRfcG9wdWxhdGlvblRleHQubGVmdCA9IG5ldyBGb3JtQXR0YWNobWVudChwb3B1bGF0aW9uTGFiZWwsIDApOworCQlmZF9wb3B1bGF0aW9uVGV4dC5yaWdodCA9IG5ldyBGb3JtQXR0YWNobWVudCgxMDAsIDApOworCQlwb3B1bGF0aW9uVGV4dC5zZXRMYXlvdXREYXRhKGZkX3BvcHVsYXRpb25UZXh0KTsKKwkJCisJCS8vIEpLIFRoZSBOdW1iZXIgdG8gaW5mZWN0IGlzIG5vdyBhZGRlZCBpbnNpZGUgdGhlIGZvbGxvd2luZyBjb21wb3NpdGUgCisJCUNvbXBvc2l0ZSBudW1iZXJQZXJjZW50SW5wdXRDb21wb3NpdGUgPSBjcmVhdGVOdW1iZXJQZXJjZW50SW5wdXRDb21wb3NpdGUodGhpcywgcHJvamVjdFZhbGlkYXRvciwgbWFyZ2luMSwgbWFyZ2luMik7CisJCWZpbmFsIEZvcm1EYXRhIGZkX3BlcmNlbnRNb2RlID0gbmV3IEZvcm1EYXRhKCk7CisJCWZkX3BlcmNlbnRNb2RlLnRvcCA9IG5ldyBGb3JtQXR0YWNobWVudChwb3B1bGF0aW9uTGFiZWwsIDEwLCBTV1QuQk9UVE9NKTsKKwkJZmRfcGVyY2VudE1vZGUubGVmdCA9IG5ldyBGb3JtQXR0YWNobWVudCgwLCAwKTsKKwkJZmRfcGVyY2VudE1vZGUucmlnaHQgPSBuZXcgRm9ybUF0dGFjaG1lbnQoMTAwLCAwKTsKKwkJbnVtYmVyUGVyY2VudElucHV0Q29tcG9zaXRlLnNldExheW91dERhdGEoZmRfcGVyY2VudE1vZGUpOworCQkvLyBUT0RPIGFkZCBpdCBoZXJlCisJCQorCQkKKwkJCisJCQorCQkKKwkJCisJCS8vIHJhZGlvIGJ1dHRvbnMgdG8gc2V0IHRoZSBpbXBvcnQgCisJCUNvbXBvc2l0ZSBpbXBvcnRNb2RlQ29tcG9zaXRlID0gY3JlYXRlSW1wb3J0UmFkaW9CdXR0b25zQ29tcG9zaXRlKHRoaXMsIHByb2plY3RWYWxpZGF0b3IpOworCQlmaW5hbCBGb3JtRGF0YSBmZF9pbXBvcnRNb2RlID0gbmV3IEZvcm1EYXRhKCk7CisJCWZkX2ltcG9ydE1vZGUudG9wID0gbmV3IEZvcm1BdHRhY2htZW50KG51bWJlclBlcmNlbnRJbnB1dENvbXBvc2l0ZSwgMTAsIFNXVC5CT1RUT00pOworCQlmZF9pbXBvcnRNb2RlLmxlZnQgPSBuZXcgRm9ybUF0dGFjaG1lbnQoMCwgMCk7CisJCWZkX2ltcG9ydE1vZGUucmlnaHQgPSBuZXcgRm9ybUF0dGFjaG1lbnQoMTAwLCAwKTsKKwkJaW1wb3J0TW9kZUNvbXBvc2l0ZS5zZXRMYXlvdXREYXRhKGZkX2ltcG9ydE1vZGUpOworCQkKKwkJaW1wb3J0RmlsZUJ1dHRvbiA9IG5ldyBCdXR0b24odGhpcywgU1dULkJPUkRFUik7CisJCWltcG9ydEZpbGVCdXR0b24uc2V0VGV4dChEaXNlYXNlV2l6YXJkTWVzc2FnZXMuZ2V0U3RyaW5nKCJOSW5mV2l6SW1wb3J0IikpOworCQlmaW5hbCBGb3JtRGF0YSBmZF9pbXBvcnRCdXR0b249IG5ldyBGb3JtRGF0YSgpOworCQlmZF9pbXBvcnRCdXR0b24ubGVmdCA9IG5ldyBGb3JtQXR0YWNobWVudCgwLCAwKTsKKwkJZmRfaW1wb3J0QnV0dG9uLnJpZ2h0ID0gbmV3IEZvcm1BdHRhY2htZW50KDEwMCwgMCk7CisJCWZkX2ltcG9ydEJ1dHRvbi50b3AgPSBuZXcgRm9ybUF0dGFjaG1lbnQoaW1wb3J0TW9kZUNvbXBvc2l0ZSwgNSwgU1dULkJPVFRPTSk7CisJCWltcG9ydEZpbGVCdXR0b24uc2V0TGF5b3V0RGF0YShmZF9pbXBvcnRCdXR0b24pOworCQlpbXBvcnRGaWxlQnV0dG9uLnNldEVuYWJsZWQoZmFsc2UpOworCQkKKwkJLy8gTG9nIGZpbGUgbG9jYXRpb24KKwkJbG9nRGlyTGFiZWwgPSBuZXcgTGFiZWwodGhpcywgU1dULk5PTkUpOworCQlsb2dEaXJMYWJlbC5zZXRUZXh0KERpc2Vhc2VXaXphcmRNZXNzYWdlcy5nZXRTdHJpbmcoIk5JbmZXaXpMb2dEaXJMYWJlbCIpKTsgLy8kTk9OLU5MUy0xJAorCisJCWZpbmFsIEZvcm1EYXRhIGZkX2xvZ0RpckxhYmVsID0gbmV3IEZvcm1EYXRhKCk7CisJCWZkX2xvZ0RpckxhYmVsLnRvcCA9IG5ldyBGb3JtQXR0YWNobWVudChpbXBvcnRGaWxlQnV0dG9uLDUsIFNXVC5CT1RUT00pOworCQlmZF9sb2dEaXJMYWJlbC5sZWZ0ID0gbmV3IEZvcm1BdHRhY2htZW50KDAsIDApOworCQlmZF9sb2dEaXJMYWJlbC5yaWdodCA9IG5ldyBGb3JtQXR0YWNobWVudChtYXJnaW4xLCAwKTsKKwkJbG9nRGlyTGFiZWwuc2V0TGF5b3V0RGF0YShmZF9sb2dEaXJMYWJlbCk7CisJCQorCQlsb2dEaXJUZXh0ID0gbmV3IFRleHQodGhpcywgU1dULkJPUkRFUik7CisJCWxvZ0RpclRleHQuc2V0VGV4dCgiIik7CisJCWxvZ0RpclRleHQuc2V0RWRpdGFibGUodHJ1ZSk7CisJCWxvZ0RpclRleHQuc2V0RW5hYmxlZChmYWxzZSk7CisJCWxvZ0RpclRleHQuYWRkTW9kaWZ5TGlzdGVuZXIocHJvamVjdFZhbGlkYXRvcik7CisJCisJCWZpbmFsIEZvcm1EYXRhIGZkX2xvZ0RpclRleHQgPSBuZXcgRm9ybURhdGEoKTsKKwkJZmRfbG9nRGlyVGV4dC5sZWZ0ID0gbmV3IEZvcm1BdHRhY2htZW50KGxvZ0RpckxhYmVsLCAwKTsKKwkJZmRfbG9nRGlyVGV4dC5yaWdodCA9IG5ldyBGb3JtQXR0YWNobWVudCgxMDAsIDApOworCQlmZF9sb2dEaXJUZXh0LnRvcCA9IG5ldyBGb3JtQXR0YWNobWVudChpbXBvcnRGaWxlQnV0dG9uLCA1LCBTV1QuQk9UVE9NKTsKKwkJbG9nRGlyVGV4dC5zZXRMYXlvdXREYXRhKGZkX2xvZ0RpclRleHQpOworCQkJCisJCS8vIHJhZGlvIGJ1dHRvbnMgdG8gc2V0IHRoZSByb3cKKwkJcm93Q29tcG9zaXRlID0gY3JlYXRlUm93UmFkaW9CdXR0b25zQ29tcG9zaXRlKHRoaXMsIHByb2plY3RWYWxpZGF0b3IpOworCQlmaW5hbCBGb3JtRGF0YSBmZF9yb3cgPSBuZXcgRm9ybURhdGEoKTsKKwkJZmRfcm93LnRvcCA9IG5ldyBGb3JtQXR0YWNobWVudChsb2dEaXJMYWJlbCwgMTAsIFNXVC5CT1RUT00pOworCQlmZF9yb3cubGVmdCA9IG5ldyBGb3JtQXR0YWNobWVudCgwLCAwKTsKKwkJZmRfcm93LnJpZ2h0ID0gbmV3IEZvcm1BdHRhY2htZW50KDEwMCwgMCk7CisJCXJvd0NvbXBvc2l0ZS5zZXRMYXlvdXREYXRhKGZkX3Jvdyk7CisJCXJvd0NvbXBvc2l0ZS5zZXRFbmFibGVkKGZhbHNlKTsKKwkJCisJCQkJCQkJCQorCQlmaW5hbCBTaGVsbCBzaGVsbCA9IHRoaXMuZ2V0U2hlbGwoKTsKKwkJaW1wb3J0RmlsZUJ1dHRvbgorCQkJCS5hZGRTZWxlY3Rpb25MaXN0ZW5lcihuZXcgU2VsZWN0aW9uQWRhcHRlcigpIHsKKwkJCQkJQE92ZXJyaWRlCisJCQkJCXB1YmxpYyB2b2lkIHdpZGdldFNlbGVjdGVkKAorCQkJCQkJCWZpbmFsIFNlbGVjdGlvbkV2ZW50IGUpIHsKKwkJCQkJCWZpbmFsIERpcmVjdG9yeURpYWxvZyBkZCA9IG5ldyBEaXJlY3RvcnlEaWFsb2coCisJCQkJCQkJCXNoZWxsLCBTV1QuT1BFTik7CisJCQkJCQlkZAorCQkJCQkJCQkuc2V0VGV4dChEaXNlYXNlV2l6YXJkTWVzc2FnZXMKKwkJCQkJCQkJCQkuZ2V0U3RyaW5nKCJOSW5mV2l6TG9nRGlyRGVzYyIpKTsgLy8kTk9OLU5MUy0xJAorCQkJCQkJZmluYWwgU3RyaW5nIHNlbGVjdGVkID0gZGQub3BlbigpOworCQkJCQkJbG9nRGlyVGV4dC5zZXRUZXh0KHNlbGVjdGVkKTsKKwkJCQkJCXByb2plY3RWYWxpZGF0b3IubW9kaWZ5VGV4dChudWxsKTsKKwkJCQkJfSAvLyB3aWRnZXRTZWxlY3RlZAorCQkJCX0gLy8gU2VsZWN0aW9uQWRhcHRlcgorCQkJCSk7CisJCQorCQlQbGF0Zm9ybVVJLmdldFdvcmtiZW5jaCgpLmdldEhlbHBTeXN0ZW0oKS5zZXRIZWxwKHBhcmVudCwgIm9yZy5lY2xpcHNlLnN0ZW0uZG9jLm5ld2luZmVjdG9yaW5vY3VsYXRvcl9jb250ZXh0aWQiKTsKKworCX0vLyBJbmZlY3RvckRlZmluaXRpb25Db250cm9sCisKKwkKKwkvKioKKwkgKiBjcmVhdGVzIGEgc2V0IG9mIHJhZGlvIGJ1dHRvbnMgYW5kIHRoZWlyIGNvbXBvc2l0ZSBjb250YWluZXIgZm9yIHRoZSB1c2VyIHRvIHNwZWNpZnkKKwkgKiB0aGUgY3JlYXRpb24gb2YgYW4gaW5mZWN0b3IgT1IgYW4gaW5vY3VsYXRvcgorCSAqIEBwYXJhbSBwYXJlbnQKKwkgKiBAcmV0dXJuIHRoZSBjb21wb3NpdGUKKwkgKi8KKwlDb21wb3NpdGUgY3JlYXRlSW5mZWN0b3JNb2RlUmFkaW9CdXR0b25zQ29tcG9zaXRlKGZpbmFsIENvbXBvc2l0ZSBwYXJlbnQsIGZpbmFsIE1vZGlmeUxpc3RlbmVyIHByb2plY3RWYWxpZGF0b3IpIHsKKwkJQ29tcG9zaXRlIHJhZGlvQ29tcG9zaXRlID0gbmV3IENvbXBvc2l0ZShwYXJlbnQsIFNXVC5CT1JERVIpOworCSAgICBGaWxsTGF5b3V0IGZpbGxMYXlvdXQgPSBuZXcgRmlsbExheW91dCgpOworCSAgICBmaWxsTGF5b3V0LnR5cGUgPSBTV1QuVkVSVElDQUw7CisJICAgIHJhZGlvQ29tcG9zaXRlLnNldExheW91dChmaWxsTGF5b3V0KTsKKwkgICAgCisJICAgIGluZmVjdG9yTW9kZVJhZGlvQnV0dG9uc1swXSA9IG5ldyBCdXR0b24ocmFkaW9Db21wb3NpdGUsIFNXVC5SQURJTyk7CisJICAgIGluZmVjdG9yTW9kZVJhZGlvQnV0dG9uc1swXS5zZXRTZWxlY3Rpb24odHJ1ZSk7CisJICAgIGluZmVjdG9yTW9kZVJhZGlvQnV0dG9uc1swXS5zZXRUZXh0KERpc2Vhc2VXaXphcmRNZXNzYWdlcy5nZXRTdHJpbmcoIk5JbmZlY3Rvcldpei5pbmZlY3QiKSk7Ly8kTk9OLU5MUy0xJAorCSAgICAKKwkgICAgaW5mZWN0b3JNb2RlUmFkaW9CdXR0b25zWzFdID0gbmV3IEJ1dHRvbihyYWRpb0NvbXBvc2l0ZSwgU1dULlJBRElPKTsKKwkgICAgaW5mZWN0b3JNb2RlUmFkaW9CdXR0b25zWzFdLnNldFRleHQoRGlzZWFzZVdpemFyZE1lc3NhZ2VzLmdldFN0cmluZygiTkluZmVjdG9yV2l6Lmlub2N1bGF0ZSIpKTsvLyROT04tTkxTLTEkCisJICAgIAkgICAgCisJICAgIExpc3RlbmVyIGxpc3RlbmVyID0gbmV3IExpc3RlbmVyKCkgeworCSAgICAgICAgcHVibGljIHZvaWQgaGFuZGxlRXZlbnQoRXZlbnQgZXZlbnQpIHsKKwkgICAgICAgICAgaWYgKGV2ZW50LndpZGdldCA9PSBpbmZlY3Rvck1vZGVSYWRpb0J1dHRvbnNbMF0pIHsKKwkgICAgICAgIAlpbmZlY3Rvck1vZGUgPSBpbmZlY3Rvck1vZGVSYWRpb0J1dHRvbnNbMF0uZ2V0U2VsZWN0aW9uKCk7CisJICAgICAgICAgIH0KKwkgICAgICAgICAgaWYoIWlzUGVyY2VudGFnZSgpKSAKKwkgICAgICAgIAkgIGlmKGlzSW5mZWN0b3JNb2RlKCkpIG51bWJlck9mSW5mZWN0aW9uc0xhYmVsLnNldFRleHQoRGlzZWFzZVdpemFyZE1lc3NhZ2VzLmdldFN0cmluZygiTkluZldpek5JSU5GIikpOyAvLyROT04tTkxTLTEkCisJICAgICAgICAJICBlbHNlIG51bWJlck9mSW5mZWN0aW9uc0xhYmVsLnNldFRleHQoRGlzZWFzZVdpemFyZE1lc3NhZ2VzLmdldFN0cmluZygiTkluZldpek5JSU5PIikpOyAvLyROT04tTkxTLTEkCisJICAgICAgICAgIGVsc2UgaWYoaXNJbmZlY3Rvck1vZGUoKSkKKwkgICAgICAgIAkgIG51bWJlck9mSW5mZWN0aW9uc0xhYmVsLnNldFRleHQoRGlzZWFzZVdpemFyZE1lc3NhZ2VzLmdldFN0cmluZygiTkluZldpelBJSU5GIikpOyAvLyROT04tTkxTLTEkCisJICAgICAgICAgIGVsc2UgbnVtYmVyT2ZJbmZlY3Rpb25zTGFiZWwuc2V0VGV4dChEaXNlYXNlV2l6YXJkTWVzc2FnZXMuZ2V0U3RyaW5nKCJOSW5mV2l6UElJTk8iKSk7IC8vJE5PTi1OTFMtMSQKKworCSAgICAgICAgICBwcm9qZWN0VmFsaWRhdG9yLm1vZGlmeVRleHQobnVsbCk7CisJICAgICAgICB9CisJICAgICAgfTsKKwkgICAgICAvLyB0aGVzZSBhcmUgcmFkaW8gYnV0dG9ucyBzbyB3ZSBvbmx5IG5lZWQgdG8gYWRkIHRoZSBsaXN0ZW5lciB0byBvbmUgb2YgdGhlbS4KKwkgICAgICBpbmZlY3Rvck1vZGVSYWRpb0J1dHRvbnNbMF0uYWRkTGlzdGVuZXIoU1dULlNlbGVjdGlvbiwgbGlzdGVuZXIpOworCSAgICAgIAorCSAgICByZXR1cm4gcmFkaW9Db21wb3NpdGU7CisJfS8vZ2V0aW5mZWN0b3JNb2RlUmFkaW9CdXR0b25zQ29tcG9zaXRlCisJCisJLyoqCisJICogQ3JlYXRlIHJhZGlvIGJ1dHRvbnMgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgdG8gaW1wb3J0IGZyb20gZmlsZSBvciBub3QKKwkgKiAKKwkgKiBAcGFyYW0gcGFyZW50CisJICogQHJldHVybiB0aGUgY29tcG9zaXRlCisJICovCisJQ29tcG9zaXRlIGNyZWF0ZUltcG9ydFJhZGlvQnV0dG9uc0NvbXBvc2l0ZShmaW5hbCBDb21wb3NpdGUgcGFyZW50LCBmaW5hbCBNb2RpZnlMaXN0ZW5lciBwcm9qZWN0VmFsaWRhdG9yKSB7CisJCUNvbXBvc2l0ZSByYWRpb0NvbXBvc2l0ZSA9IG5ldyBDb21wb3NpdGUocGFyZW50LCBTV1QuQk9SREVSKTsKKwkgICAgRmlsbExheW91dCBmaWxsTGF5b3V0ID0gbmV3IEZpbGxMYXlvdXQoKTsKKwkgICAgZmlsbExheW91dC50eXBlID0gU1dULlZFUlRJQ0FMOworCSAgICByYWRpb0NvbXBvc2l0ZS5zZXRMYXlvdXQoZmlsbExheW91dCk7CisJICAgIAorCSAgICBpbXBvcnRSYWRpb0J1dHRvbnNbMF0gPSBuZXcgQnV0dG9uKHJhZGlvQ29tcG9zaXRlLCBTV1QuUkFESU8pOworCSAgICBpbXBvcnRSYWRpb0J1dHRvbnNbMF0uc2V0U2VsZWN0aW9uKHRydWUpOworCSAgICBpbXBvcnRSYWRpb0J1dHRvbnNbMF0uc2V0VGV4dChEaXNlYXNlV2l6YXJkTWVzc2FnZXMuZ2V0U3RyaW5nKCJOSW5mZWN0b3JXaXouZW50ZXIiKSk7Ly8kTk9OLU5MUy0xJAorCSAgICAKKwkgICAgaW1wb3J0UmFkaW9CdXR0b25zWzFdID0gbmV3IEJ1dHRvbihyYWRpb0NvbXBvc2l0ZSwgU1dULlJBRElPKTsKKwkgICAgaW1wb3J0UmFkaW9CdXR0b25zWzFdLnNldFRleHQoRGlzZWFzZVdpemFyZE1lc3NhZ2VzLmdldFN0cmluZygiTkluZmVjdG9yV2l6LmltcG9ydCIpKTsvLyROT04tTkxTLTEkCisJICAgIAkgICAgCisJICAgIExpc3RlbmVyIGxpc3RlbmVyID0gbmV3IExpc3RlbmVyKCkgeworCSAgICAgICAgcHVibGljIHZvaWQgaGFuZGxlRXZlbnQoRXZlbnQgZXZlbnQpIHsKKwkgICAgICAgICAgaWYgKGV2ZW50LndpZGdldCA9PSBpbXBvcnRSYWRpb0J1dHRvbnNbMF0pIHsKKwkgICAgICAgIAlpbXBvcnRGcm9tRmlsZSA9ICFpbXBvcnRSYWRpb0J1dHRvbnNbMF0uZ2V0U2VsZWN0aW9uKCk7CisJICAgICAgICAJaWYoaW1wb3J0RnJvbUZpbGUpIHsKKwkgICAgICAgIAkJaW1wb3J0RmlsZUJ1dHRvbi5zZXRFbmFibGVkKHRydWUpOworCSAgICAgICAgCQludW1iZXJPZkluZmVjdGlvbnNUZXh0LnNldEVuYWJsZWQoZmFsc2UpOworCSAgICAgICAgCQlsb2dEaXJUZXh0LnNldEVuYWJsZWQodHJ1ZSk7CisJICAgICAgICAJCXJvd0NvbXBvc2l0ZS5zZXRFbmFibGVkKHRydWUpOworCSAgICAgICAgCQlsb2NhdGlvbkJ1dHRvbi5zZXRFbmFibGVkKGZhbHNlKTsKKwkgICAgICAgIAl9IGVsc2UgeworCSAgICAgICAgCQlpbXBvcnRGaWxlQnV0dG9uLnNldEVuYWJsZWQoZmFsc2UpOworCSAgICAgICAgCQludW1iZXJPZkluZmVjdGlvbnNUZXh0LnNldEVuYWJsZWQodHJ1ZSk7CisJICAgICAgICAJCWxvZ0RpclRleHQuc2V0RW5hYmxlZChmYWxzZSk7CisJICAgICAgICAJCXJvd0NvbXBvc2l0ZS5zZXRFbmFibGVkKGZhbHNlKTsKKwkgICAgICAgIAkJbG9jYXRpb25CdXR0b24uc2V0RW5hYmxlZCh0cnVlKTsKKwkgICAgICAgIAl9CisJICAgICAgICAgIH0KKwkgICAgICAgICAgcHJvamVjdFZhbGlkYXRvci5tb2RpZnlUZXh0KG51bGwpOworCSAgICAgICAgfQorCSAgICAgIH07CisJICAgICAgLy8gdGhlc2UgYXJlIHJhZGlvIGJ1dHRvbnMgc28gd2Ugb25seSBuZWVkIHRvIGFkZCB0aGUgbGlzdGVuZXIgdG8gb25lIG9mIHRoZW0uCisJICAgICAgaW1wb3J0UmFkaW9CdXR0b25zWzBdLmFkZExpc3RlbmVyKFNXVC5TZWxlY3Rpb24sIGxpc3RlbmVyKTsKKwkgICAgICAKKwkgICAgcmV0dXJuIHJhZGlvQ29tcG9zaXRlOworCX0vLworCQorCS8qKgorCSAqIENyZWF0ZSByYWRpbyBidXR0b25zIHRvIGRldGVybWluZSB3aGF0IHJvdyB0byB1c2Ugd2hlbiBpbXBvcnRpbmcKKwkgKiAKKwkgKiBAcGFyYW0gcGFyZW50CisJICogQHJldHVybiB0aGUgY29tcG9zaXRlCisJICovCisJQ29tcG9zaXRlIGNyZWF0ZVJvd1JhZGlvQnV0dG9uc0NvbXBvc2l0ZShmaW5hbCBDb21wb3NpdGUgcGFyZW50LCBmaW5hbCBNb2RpZnlMaXN0ZW5lciBwcm9qZWN0VmFsaWRhdG9yKSB7CisJCUNvbXBvc2l0ZSByYWRpb0NvbXBvc2l0ZSA9IG5ldyBDb21wb3NpdGUocGFyZW50LCBTV1QuQk9SREVSKTsKKwkgICAgRmlsbExheW91dCBmaWxsTGF5b3V0ID0gbmV3IEZpbGxMYXlvdXQoKTsKKwkgICAgZmlsbExheW91dC50eXBlID0gU1dULkhPUklaT05UQUw7CisJICAgIHJhZGlvQ29tcG9zaXRlLnNldExheW91dChmaWxsTGF5b3V0KTsKKwkgICAgCisJICAgIHJvd0J1dHRvbnNbMF0gPSBuZXcgQnV0dG9uKHJhZGlvQ29tcG9zaXRlLCBTV1QuUkFESU8pOworCSAgICByb3dCdXR0b25zWzBdLnNldFNlbGVjdGlvbih0cnVlKTsKKwkgICAgcm93QnV0dG9uc1swXS5zZXRUZXh0KERpc2Vhc2VXaXphcmRNZXNzYWdlcy5nZXRTdHJpbmcoIk5JbmZlY3Rvcldpei5maXJzdHJvdyIpKTsvLyROT04tTkxTLTEkCisJICAgIAorCSAgICByb3dCdXR0b25zWzFdID0gbmV3IEJ1dHRvbihyYWRpb0NvbXBvc2l0ZSwgU1dULlJBRElPKTsKKwkgICAgcm93QnV0dG9uc1sxXS5zZXRUZXh0KERpc2Vhc2VXaXphcmRNZXNzYWdlcy5nZXRTdHJpbmcoIk5JbmZlY3Rvcldpei5sYXN0cm93IikpOy8vJE5PTi1OTFMtMSQKKwkgICAgCQorCSAgICByb3dCdXR0b25zWzJdID0gbmV3IEJ1dHRvbihyYWRpb0NvbXBvc2l0ZSwgU1dULlJBRElPKTsKKwkgICAgcm93QnV0dG9uc1syXS5zZXRUZXh0KERpc2Vhc2VXaXphcmRNZXNzYWdlcy5nZXRTdHJpbmcoIk5JbmZlY3Rvcldpei5zZWxlY3RlZHJvdyIpKTsvLyROT04tTkxTLTEkCisJICAgIAorCSAgICByb3d0eHQgPSBuZXcgVGV4dChyYWRpb0NvbXBvc2l0ZSwgU1dULk5PTkUpOworCSAgICByb3d0eHQuc2V0VGV4dCgiMCIpOworCSAgICByb3d0eHQuc2V0RWRpdGFibGUoZmFsc2UpOworCSAgICByb3d0eHQuYWRkTW9kaWZ5TGlzdGVuZXIocHJvamVjdFZhbGlkYXRvcik7CisJICAgIAorCSAgICBMaXN0ZW5lciBsaXN0ZW5lciA9IG5ldyBMaXN0ZW5lcigpIHsKKwkgICAgICAgIHB1YmxpYyB2b2lkIGhhbmRsZUV2ZW50KEV2ZW50IGV2ZW50KSB7CisJICAgICAgICAJdXNlRmlyc3RSb3cgPSByb3dCdXR0b25zWzBdLmdldFNlbGVjdGlvbigpOworCSAgICAgICAgCXVzZUxhc3RSb3cgPSByb3dCdXR0b25zWzFdLmdldFNlbGVjdGlvbigpOworCSAgICAgICAgCXVzZVNlbGVjdGVkUm93ID0gcm93QnV0dG9uc1syXS5nZXRTZWxlY3Rpb24oKTsKKwkgICAgICAgIAlpZih1c2VGaXJzdFJvdyB8fCB1c2VMYXN0Um93KSB7CisJICAgICAgICAJCXJvd3R4dC5zZXRFZGl0YWJsZShmYWxzZSk7CisJICAgICAgICAJfSBlbHNlIHsKKwkgICAgICAgIAkJcm93dHh0LnNldEVkaXRhYmxlKHRydWUpOworCSAgICAgICAgCX0KKwkgICAgICAgIAkgcHJvamVjdFZhbGlkYXRvci5tb2RpZnlUZXh0KG51bGwpOworCSAgICAgICAgfQorCSAgICAgIH07CisJICAgICAgLy8gdGhlc2UgYXJlIHJhZGlvIGJ1dHRvbnMgc28gd2Ugb25seSBuZWVkIHRvIGFkZCB0aGUgbGlzdGVuZXIgdG8gb25lIG9mIHRoZW0uCisJICAgICAgcm93QnV0dG9uc1swXS5hZGRMaXN0ZW5lcihTV1QuU2VsZWN0aW9uLCBsaXN0ZW5lcik7CisJICAgICAgcm93QnV0dG9uc1sxXS5hZGRMaXN0ZW5lcihTV1QuU2VsZWN0aW9uLCBsaXN0ZW5lcik7CisJICAgICAgcm93QnV0dG9uc1syXS5hZGRMaXN0ZW5lcihTV1QuU2VsZWN0aW9uLCBsaXN0ZW5lcik7CisJICAgIHJldHVybiByYWRpb0NvbXBvc2l0ZTsKKwl9Ly8KKwkKKwkvKioKKwkgKiBAcGFyYW0gcGFyZW50CisJICogQHJldHVybiB0aGUgY29tcG9zaXRlCisJICovCisJQ29tcG9zaXRlIGNyZWF0ZU51bWJlclBlcmNlbnRJbnB1dENvbXBvc2l0ZShmaW5hbCBDb21wb3NpdGUgcGFyZW50LCBmaW5hbCBNb2RpZnlMaXN0ZW5lciBwcm9qZWN0VmFsaWRhdG9yLCBmaW5hbCBpbnQgbWFyZ2luMSwgZmluYWwgaW50IG1hcmdpbjIpIHsKKwkgICAgQ29tcG9zaXRlIHJhZGlvMkNvbXBvc2l0ZSA9IG5ldyBDb21wb3NpdGUocGFyZW50LCBTV1QuQk9SREVSKTsKKwkgICAgCisJICAgIHJhZGlvMkNvbXBvc2l0ZS5zZXRMYXlvdXQobmV3IEZvcm1MYXlvdXQoKSk7CisJICAgIAorCSAgICAKKwkgICAgdXNlQWJzb2x1dGVOdW1iZXJCdXR0b24gPSBuZXcgQnV0dG9uKHJhZGlvMkNvbXBvc2l0ZSwgU1dULlJBRElPKTsKKwkgICAgdXNlQWJzb2x1dGVOdW1iZXJCdXR0b24uc2V0U2VsZWN0aW9uKHRydWUpOworCSAgICB1c2VBYnNvbHV0ZU51bWJlckJ1dHRvbi5zZXRUZXh0KERpc2Vhc2VXaXphcmRNZXNzYWdlcy5nZXRTdHJpbmcoIk5JbmZXaXouYWJzbnVtYmVyIikpOworCSAgICBmaW5hbCBGb3JtRGF0YSBmZF9udW1iZXJCdXR0b24gPSBuZXcgRm9ybURhdGEoKTsKKwkJZmRfbnVtYmVyQnV0dG9uLnRvcCA9IG5ldyBGb3JtQXR0YWNobWVudCgwLCAwKTsKKwkJZmRfbnVtYmVyQnV0dG9uLmxlZnQgPSBuZXcgRm9ybUF0dGFjaG1lbnQoMCwgMCk7CisJCWZkX251bWJlckJ1dHRvbi5yaWdodCA9IG5ldyBGb3JtQXR0YWNobWVudChtYXJnaW4xLCAwKTsKKwkJdXNlQWJzb2x1dGVOdW1iZXJCdXR0b24uc2V0TGF5b3V0RGF0YShmZF9udW1iZXJCdXR0b24pOworCSAgICAKKwkgICAgdXNlUGVyY2VudGFnZUJ1dHRvbiA9IG5ldyBCdXR0b24ocmFkaW8yQ29tcG9zaXRlLCBTV1QuUkFESU8pOworCSAgICB1c2VQZXJjZW50YWdlQnV0dG9uLnNldFRleHQoRGlzZWFzZVdpemFyZE1lc3NhZ2VzLmdldFN0cmluZygiTkluZldpei5wZXJjZW50YWdlIikpOworCSAgICBmaW5hbCBGb3JtRGF0YSBmZF9wZXJjZW50QnV0dG9uID0gbmV3IEZvcm1EYXRhKCk7CisJCWZkX3BlcmNlbnRCdXR0b24udG9wID0gbmV3IEZvcm1BdHRhY2htZW50KHVzZUFic29sdXRlTnVtYmVyQnV0dG9uLCAwKTsKKwkJZmRfcGVyY2VudEJ1dHRvbi5sZWZ0ID0gbmV3IEZvcm1BdHRhY2htZW50KDAsIDApOworCQlmZF9wZXJjZW50QnV0dG9uLnJpZ2h0ID0gbmV3IEZvcm1BdHRhY2htZW50KG1hcmdpbjEsIDApOworCQl1c2VQZXJjZW50YWdlQnV0dG9uLnNldExheW91dERhdGEoZmRfcGVyY2VudEJ1dHRvbik7CisJICAgIAorCSAgICAKKwkgICAgLy8gU1RBUlQgYWRkaW5nIE51bWJlciBvZiBJbmZlY3Rpb25zCisJCW51bWJlck9mSW5mZWN0aW9uc0xhYmVsID0gbmV3IExhYmVsKHJhZGlvMkNvbXBvc2l0ZSwgU1dULk5PTkUpOworCQludW1iZXJPZkluZmVjdGlvbnNMYWJlbC5zZXRUZXh0KERpc2Vhc2VXaXphcmRNZXNzYWdlcy5nZXRTdHJpbmcoIk5JbmZXaXpOSUlORiIpKTsgLy8kTk9OLU5MUy0xJAorCisJCWZpbmFsIEZvcm1EYXRhIGZkX251bWJlck9mSW5mZWN0aW9uc0xhYmVsID0gbmV3IEZvcm1EYXRhKCk7CisJCWZkX251bWJlck9mSW5mZWN0aW9uc0xhYmVsLnRvcCA9IG5ldyBGb3JtQXR0YWNobWVudCh1c2VQZXJjZW50YWdlQnV0dG9uLCAwKTsKKwkJZmRfbnVtYmVyT2ZJbmZlY3Rpb25zTGFiZWwubGVmdCA9IG5ldyBGb3JtQXR0YWNobWVudCgwLCAwKTsKKwkJZmRfbnVtYmVyT2ZJbmZlY3Rpb25zTGFiZWwucmlnaHQgPSBuZXcgRm9ybUF0dGFjaG1lbnQobWFyZ2luMSwgMCk7CisJCW51bWJlck9mSW5mZWN0aW9uc0xhYmVsLnNldExheW91dERhdGEoZmRfbnVtYmVyT2ZJbmZlY3Rpb25zTGFiZWwpOworCQkKKwkJbnVtYmVyT2ZJbmZlY3Rpb25zVGV4dCA9IG5ldyBUZXh0KHJhZGlvMkNvbXBvc2l0ZSwgU1dULkJPUkRFUik7CisJCW51bWJlck9mSW5mZWN0aW9uc1RleHQuc2V0VGV4dChTdGFuZGFyZFBhY2thZ2UuTGl0ZXJhbHMuU0lfSU5GRUNUT1JfX0lORkVDVElPVVNfQ09VTlQuZ2V0RGVmYXVsdFZhbHVlTGl0ZXJhbCgpKTsKKwkJbnVtYmVyT2ZJbmZlY3Rpb25zVGV4dC5zZXRUb29sVGlwVGV4dChEaXNlYXNlV2l6YXJkTWVzc2FnZXMuZ2V0U3RyaW5nKCJOSW5mV2l6TklUVCIpKTsgLy8kTk9OLU5MUy0xJAorCQludW1iZXJPZkluZmVjdGlvbnNUZXh0LmFkZE1vZGlmeUxpc3RlbmVyKHByb2plY3RWYWxpZGF0b3IpOworCQkKKwkJZmluYWwgRm9ybURhdGEgZmRfbnVtYmVyT2ZJbmZlY3Rpb25zVGV4dCA9IG5ldyBGb3JtRGF0YSgpOworCQlmZF9udW1iZXJPZkluZmVjdGlvbnNUZXh0LnRvcCA9IG5ldyBGb3JtQXR0YWNobWVudCh1c2VQZXJjZW50YWdlQnV0dG9uLCAwKTsKKwkJZmRfbnVtYmVyT2ZJbmZlY3Rpb25zVGV4dC5sZWZ0ID0gbmV3IEZvcm1BdHRhY2htZW50KG51bWJlck9mSW5mZWN0aW9uc0xhYmVsLCAwKTsKKwkJZmRfbnVtYmVyT2ZJbmZlY3Rpb25zVGV4dC5yaWdodCA9IG5ldyBGb3JtQXR0YWNobWVudCgxMDAsIDApOworCQkKKwkJbnVtYmVyT2ZJbmZlY3Rpb25zVGV4dC5zZXRMYXlvdXREYXRhKGZkX251bWJlck9mSW5mZWN0aW9uc1RleHQpOworCQkvLyBFbmQgYWRkaW5nIE51bWJlciBvZiBJbmZlY3Rpb25zCisJCQorCQkvLyBMb2NhdGlvbiBCdXR0b24KKwkJbG9jYXRpb25CdXR0b24gPSBuZXcgQnV0dG9uKHJhZGlvMkNvbXBvc2l0ZSwgU1dULk5PTkUpOworCQlsb2NhdGlvbkJ1dHRvbi5zZXRUZXh0KERpc2Vhc2VXaXphcmRNZXNzYWdlcy5nZXRTdHJpbmcoIk5JbmZXaXpQaWNrTG9jIikpOworCQlmaW5hbCBGb3JtRGF0YSBmZF9sb2NCdXR0b24gPSBuZXcgRm9ybURhdGEoKTsKKwkJZmRfbG9jQnV0dG9uLnRvcCA9IG5ldyBGb3JtQXR0YWNobWVudChudW1iZXJPZkluZmVjdGlvbnNMYWJlbCwgMCk7CisJCWZkX2xvY0J1dHRvbi5sZWZ0ID0gbmV3IEZvcm1BdHRhY2htZW50KDAsMCk7CisJCWxvY2F0aW9uQnV0dG9uLnNldExheW91dERhdGEoZmRfbG9jQnV0dG9uKTsKKwkJCisJCS8vIElTTyBLZXkKKwkJZmluYWwgTGFiZWwgaXNvS2V5TGFiZWwgPSBuZXcgTGFiZWwocmFkaW8yQ29tcG9zaXRlLCBTV1QuTk9ORSk7CisJCWlzb0tleUxhYmVsLnNldFRleHQoRGlzZWFzZVdpemFyZE1lc3NhZ2VzLmdldFN0cmluZygiTkluZldpeklTT0siKSk7IC8vJE5PTi1OTFMtMSQKKwkJCisJCWZpbmFsIEZvcm1EYXRhIGZkX2lzb0tleUxhYmVsID0gbmV3IEZvcm1EYXRhKCk7CisJCWZkX2lzb0tleUxhYmVsLnRvcCA9IG5ldyBGb3JtQXR0YWNobWVudChsb2NhdGlvbkJ1dHRvbiwgMCk7CisJCWZkX2lzb0tleUxhYmVsLmxlZnQgPSBuZXcgRm9ybUF0dGFjaG1lbnQoMCwgMCk7CisJCWZkX2lzb0tleUxhYmVsLnJpZ2h0ID0gbmV3IEZvcm1BdHRhY2htZW50KG1hcmdpbjIsIDApOworCQlpc29LZXlMYWJlbC5zZXRMYXlvdXREYXRhKGZkX2lzb0tleUxhYmVsKTsKKwkJCisJCWlzb2tleVZhbHVlTGFiZWwgPSBuZXcgTGFiZWwocmFkaW8yQ29tcG9zaXRlLCBTV1QuQk9SREVSKTsKKwkJaXNva2V5VmFsdWVMYWJlbC5zZXRUZXh0KGlzb0tleSk7CisJCWZpbmFsIEZvcm1EYXRhIGZkX2lzb2tleVZhbHVlTGFiZWwgPSBuZXcgRm9ybURhdGEoKTsKKwkJZmRfaXNva2V5VmFsdWVMYWJlbC50b3AgPSBuZXcgRm9ybUF0dGFjaG1lbnQobG9jYXRpb25CdXR0b24sIDApOworCQlmZF9pc29rZXlWYWx1ZUxhYmVsLmxlZnQgPSBuZXcgRm9ybUF0dGFjaG1lbnQoaXNvS2V5TGFiZWwsIDApOworCQlmZF9pc29rZXlWYWx1ZUxhYmVsLnJpZ2h0ID0gbmV3IEZvcm1BdHRhY2htZW50KDEwMCwgMCk7CisJCWlzb2tleVZhbHVlTGFiZWwuc2V0TGF5b3V0RGF0YShmZF9pc29rZXlWYWx1ZUxhYmVsKTsKKwkJCisJCS8vIElTTyBLZXkKKwkJZmluYWwgTGFiZWwgc3BhY2VyTGFiZWwgPSBuZXcgTGFiZWwocmFkaW8yQ29tcG9zaXRlLCBTV1QuTk9ORSk7CisJCXNwYWNlckxhYmVsLnNldFRleHQoIiAiKTsgLy8kTk9OLU5MUy0xJAorCQkKKwkJZmluYWwgRm9ybURhdGEgZmRfc3BhY2VyTGFiZWwgPSBuZXcgRm9ybURhdGEoKTsKKwkJZmRfc3BhY2VyTGFiZWwudG9wID0gbmV3IEZvcm1BdHRhY2htZW50KGlzb0tleUxhYmVsLCAwKTsKKwkJZmRfc3BhY2VyTGFiZWwubGVmdCA9IG5ldyBGb3JtQXR0YWNobWVudCgwLCAwKTsKKwkJZmRfc3BhY2VyTGFiZWwucmlnaHQgPSBuZXcgRm9ybUF0dGFjaG1lbnQobWFyZ2luMiwgMCk7CisJCXNwYWNlckxhYmVsLnNldExheW91dERhdGEoZmRfc3BhY2VyTGFiZWwpOworCisJCQorCQkKKwkJLy8vLy8vLy8vLy8vLy8vLworCQkvLworCQkvLyBMaXN0ZW5lcnMKKwkJLy8KKwkJLy8KKwkJbG9jYXRpb25CdXR0b24uYWRkU2VsZWN0aW9uTGlzdGVuZXIobmV3IFNlbGVjdGlvbkxpc3RlbmVyKCkgeworCQkJcHVibGljIHZvaWQgd2lkZ2V0U2VsZWN0ZWQoU2VsZWN0aW9uRXZlbnQgYXJnMCkgeworCQkJCUxvY2F0aW9uUGlja2VyRGlhbG9nIGxwRGlhbG9nID0gbmV3IExvY2F0aW9uUGlja2VyRGlhbG9nKEluZmVjdG9yRGVmaW5pdGlvbkNvbXBvc2l0ZS50aGlzLmdldFNoZWxsKCksIFNXVC5OT05FLCBEaXNlYXNlV2l6YXJkTWVzc2FnZXMuZ2V0U3RyaW5nKCJOSW5mV2l6UGlja0xvY1RpdGxlIiksIEluZmVjdG9yRGVmaW5pdGlvbkNvbXBvc2l0ZS50aGlzLmlzb0tleSwgY3VycmVudFByb2plY3QpOworCQkJCU9iamVjdCBbXSByZXQgPSBscERpYWxvZy5vcGVuKCk7CisJCQkJaWYocmV0ICE9IG51bGwpIHsKKwkJCQkJaXNvS2V5ID0gKFN0cmluZylyZXRbMF07CisJCQkJCXRhcmdldFVSSSA9IChVUkkpcmV0WzFdOworCQkJCQlpc29rZXlWYWx1ZUxhYmVsLnNldFRleHQoaXNvS2V5KTsKKwkJCQkJcHJvamVjdFZhbGlkYXRvci5tb2RpZnlUZXh0KG51bGwpOworCQkJCX0KKwkJCX0KKwkJCQorCQkJcHVibGljIHZvaWQgd2lkZ2V0RGVmYXVsdFNlbGVjdGVkKFNlbGVjdGlvbkV2ZW50IGFyZzApIHsKKwkJCQkKKwkJCX0KKwkJfSk7CisJCQorCQkKKwkgICAgCisJICAgIAorCSAgICAKKwkgICAgTGlzdGVuZXIgbGlzdGVuZXIgPSBuZXcgTGlzdGVuZXIoKSB7CisJICAgICAgICBwdWJsaWMgdm9pZCBoYW5kbGVFdmVudChFdmVudCBldmVudCkgeworCSAgICAgICAgICBpZihldmVudC53aWRnZXQgPT0gdXNlQWJzb2x1dGVOdW1iZXJCdXR0b24gfHwgZXZlbnQud2lkZ2V0ID09IHVzZVBlcmNlbnRhZ2VCdXR0b24pIHsKKwkJICAgICAgICAgIC8vIHRvZ2dsZSB0aGUgd2l6YXJkCisJICAgICAgICAJICBwZXJjZW50YWdlID0gdXNlUGVyY2VudGFnZUJ1dHRvbi5nZXRTZWxlY3Rpb24oKTsKKwkJICAgICAgICAgIGlmKCFwZXJjZW50YWdlKSAKKwkJICAgICAgICAJICBpZihpc0luZmVjdG9yTW9kZSgpKSBudW1iZXJPZkluZmVjdGlvbnNMYWJlbC5zZXRUZXh0KERpc2Vhc2VXaXphcmRNZXNzYWdlcy5nZXRTdHJpbmcoIk5JbmZXaXpOSUlORiIpKTsgLy8kTk9OLU5MUy0xJAorCQkgICAgICAgIAkgIGVsc2UgbnVtYmVyT2ZJbmZlY3Rpb25zTGFiZWwuc2V0VGV4dChEaXNlYXNlV2l6YXJkTWVzc2FnZXMuZ2V0U3RyaW5nKCJOSW5mV2l6TklJTk8iKSk7IC8vJE5PTi1OTFMtMSQKKwkJICAgICAgICAgIGVsc2UgaWYoaXNJbmZlY3Rvck1vZGUoKSkKKwkJICAgICAgICAJICBudW1iZXJPZkluZmVjdGlvbnNMYWJlbC5zZXRUZXh0KERpc2Vhc2VXaXphcmRNZXNzYWdlcy5nZXRTdHJpbmcoIk5JbmZXaXpQSUlORiIpKTsgLy8kTk9OLU5MUy0xJAorCQkgICAgICAgICAgZWxzZSBudW1iZXJPZkluZmVjdGlvbnNMYWJlbC5zZXRUZXh0KERpc2Vhc2VXaXphcmRNZXNzYWdlcy5nZXRTdHJpbmcoIk5JbmZXaXpQSUlOTyIpKTsgLy8kTk9OLU5MUy0xJAorCQkgICAgICAgICAgLy8gY2xlYXIgdGhlIHRleHQgYmVjYXVzZSB3ZSBuZWVkIHRvIHJldmFsaWRhdGUKKwkgICAgICAgICAgfQorCSAgICAgICAgICBwcm9qZWN0VmFsaWRhdG9yLm1vZGlmeVRleHQobnVsbCk7CisJICAgICAgICB9CisJICAgICAgfTsKKwkgICAgICAvLyB0aGVzZSBhcmUgcmFkaW8gYnV0dG9ucyBzbyB3ZSBvbmx5IG5lZWQgdG8gYWRkIHRoZSBsaXN0ZW5lciB0byBvbmUgb2YgdGhlbS4KKwkgICAgICB1c2VBYnNvbHV0ZU51bWJlckJ1dHRvbi5hZGRMaXN0ZW5lcihTV1QuU2VsZWN0aW9uLCBsaXN0ZW5lcik7CisJICAgICAgCisJICAgIHJldHVybiByYWRpbzJDb21wb3NpdGU7CisJfS8vZ2V0aW5mZWN0b3JNb2RlUmFkaW9CdXR0b25zQ29tcG9zaXRlCisKKworCS8qKgorCSAqIEByZXR1cm4gPGNvZGU+dHJ1ZTwvY29kZT4gaWYgdGhlIGNvbnRlbnRzIG9mIHRoZSBjb250cm9sIGFyZSB2YWxpZCwKKwkgKiAgICAgICAgIDxjb2RlPmZhbHNlPC9jb2RlPiBvdGhlcndpc2UuCisJICovCisJcHVibGljIGJvb2xlYW4gdmFsaWRhdGUoKSB7CisJCWJvb2xlYW4gcmV0VmFsdWUgPSB0cnVlOworCQkvLyBEaXNlYXNlIE5hbWU/CisJCWlmIChnZXREaXNlYXNlTmFtZSgpID09IG51bGwgfHwgZ2V0RGlzZWFzZU5hbWUoKS5lcXVhbHMoIiIpKSB7IC8vJE5PTi1OTFMtMSQKKwkJCS8vIFllcworCQkJZXJyb3JNZXNzYWdlID0gRGlzZWFzZVdpemFyZE1lc3NhZ2VzLmdldFN0cmluZygiTkluZldpekVycm9yLjEiKTsgLy8kTk9OLU5MUy0xJAorCQkJcmV0VmFsdWUgPSBmYWxzZTsKKwkJfSAvLyBpZgorCisJCS8vIFBvcHVsYXRpb24KKwkJaWYgKHJldFZhbHVlKSB7CisJCQkvLyBZZXMKKwkJCWlmIChnZXRQb3B1bGF0aW9uKCkgPT0gbnVsbCB8fCBnZXRQb3B1bGF0aW9uKCkuZXF1YWxzKCIiKSkgeyAvLyROT04tTkxTLTEkCisJCQkJLy8gWWVzCisJCQkJZXJyb3JNZXNzYWdlID0gRGlzZWFzZVdpemFyZE1lc3NhZ2VzCisJCQkJCQkuZ2V0U3RyaW5nKCJOSW5mV2l6RXJyb3IuMiIpOyAvLyROT04tTkxTLTEkCisJCQkJcmV0VmFsdWUgPSBmYWxzZTsKKwkJCX0gLy8gaWYKKwkJfSAvLyBpZgorCisJCS8vIE51bWJlciBvZiBpbmZlY3Rpb25zCisJCWlmICh0aGlzLmltcG9ydEZyb21GaWxlID09IGZhbHNlICYmIHJldFZhbHVlKSB7CisJCQkvLyBZZXMKKwkJCWlmIChudW1iZXJPZkluZmVjdGlvbnNUZXh0LmdldFRleHQoKSA9PSBudWxsCisJCQkJCXx8IG51bWJlck9mSW5mZWN0aW9uc1RleHQuZ2V0VGV4dCgpLmVxdWFscygiIikpIHsgLy8kTk9OLU5MUy0xJAorCQkJCS8vIFllcworCQkJCWVycm9yTWVzc2FnZSA9IERpc2Vhc2VXaXphcmRNZXNzYWdlcworCQkJCQkJLmdldFN0cmluZygiTkluZldpekVycm9yLjMiKTsgLy8kTk9OLU5MUy0xJAorCQkJCXJldFZhbHVlID0gZmFsc2U7CisJCQl9IC8vIGlmCisJCX0KKwkJaWYgKHRoaXMuaW1wb3J0RnJvbUZpbGUgPT0gZmFsc2UgJiYgcmV0VmFsdWUpIHsKKwkJCWZpbmFsIGRvdWJsZSB0ZW1wID0gRG91YmxlCisJCQkJCS5wYXJzZURvdWJsZShudW1iZXJPZkluZmVjdGlvbnNUZXh0LmdldFRleHQoKSk7CisJCQkJLy8gPiAwPworCQkJCWlmICh0ZW1wIDwgMC4wKSB7CisJCQkJCS8vIE5vCisJCQkJCWVycm9yTWVzc2FnZSA9IERpc2Vhc2VXaXphcmRNZXNzYWdlcworCQkJCQkJCS5nZXRTdHJpbmcoIk5JbmZXaXpFcnJvci40Iik7IC8vJE5PTi1OTFMtMSQKKwkJCQkJcmV0VmFsdWUgPSBmYWxzZTsKKwkJCQl9IC8vIGlmCisJCX0KKwkJaWYgKHRoaXMuaW1wb3J0RnJvbUZpbGUgPT0gZmFsc2UgJiYgcmV0VmFsdWUpIHsKKwkJCWZpbmFsIGRvdWJsZSB0ZW1wID0gRG91YmxlCisJCQkucGFyc2VEb3VibGUobnVtYmVyT2ZJbmZlY3Rpb25zVGV4dC5nZXRUZXh0KCkpOworCQkJCWlmKGlzUGVyY2VudGFnZSgpKSB7CisJCQkJCS8vIHllcywgdGhlbiB0aGlzIG11c3QgYmUgYSBwZXJjZW50YWdlCisJCQkJCQlpZih0ZW1wID4gMTAwLjApIHsKKwkJCQkJCQllcnJvck1lc3NhZ2UgPSBEaXNlYXNlV2l6YXJkTWVzc2FnZXMuZ2V0U3RyaW5nKCJOSW5mV2l6RXJyb3IuOCIpOyAvLyROT04tTkxTLTEkCisJCQkJCQkJcmV0VmFsdWUgPSBmYWxzZTsKKwkJCQkJCX0JCQkJCQorCQkJCQl9CisJCX0KKwkJCisKKwkJLy8gSVNPIEtleQorCQlpZiAocmV0VmFsdWUpIHsKKwkJCS8vIFllcworCQkJaWYgKCF0aGlzLmlzRnJvbUZpbGUoKSAmJiAoZ2V0SXNvS2V5KCkgPT0gbnVsbCB8fCBnZXRJc29LZXkoKS5lcXVhbHMoIiIpKSkgeyAvLyROT04tTkxTLTEkCisJCQkJLy8gWWVzCisJCQkJZXJyb3JNZXNzYWdlID0gRGlzZWFzZVdpemFyZE1lc3NhZ2VzCisJCQkJCQkuZ2V0U3RyaW5nKCJOSW5mV2l6RXJyb3IuNiIpOyAvLyROT04tTkxTLTEkCisJCQkJcmV0VmFsdWUgPSBmYWxzZTsKKwkJCX0gLy8gaWYKKwkJfSAvLyBpZgorCisJCS8vIExvY2F0aW9uCisJCWlmIChyZXRWYWx1ZSkgeworCQkJLy8gWWVzCisJCQlpZiAodGhpcy5pc0Zyb21GaWxlKCkgJiYgKGdldEltcG9ydEZvbGRlcigpID09IG51bGwgfHwgZ2V0SW1wb3J0Rm9sZGVyKCkuZXF1YWxzKCIiKSkpIHsgLy8kTk9OLU5MUy0xJAorCQkJCS8vIFllcworCQkJCWVycm9yTWVzc2FnZSA9IERpc2Vhc2VXaXphcmRNZXNzYWdlcworCQkJCQkJLmdldFN0cmluZygiTkluZldpekVycm9yLjkiKTsgLy8kTk9OLU5MUy0xJAorCQkJCXJldFZhbHVlID0gZmFsc2U7CisJCQl9IC8vIGlmCisJCX0gLy8gaWYKKwkJLy8gTG9jYXRpb24KKwkJaWYgKHJldFZhbHVlKSB7CisJCQkvLyBZZXMKKwkJCWlmICh0aGlzLmlzRnJvbUZpbGUoKSkgeyAvLyROT04tTkxTLTEkCisJCQkJRmlsZSBmID0gbmV3IEZpbGUoZ2V0SW1wb3J0Rm9sZGVyKCkpOworCQkJCWlmKCFmLmV4aXN0cygpKSB7CisJCQkJCS8vIFllcworCQkJCQllcnJvck1lc3NhZ2UgPSBEaXNlYXNlV2l6YXJkTWVzc2FnZXMKKwkJCQkJCQkuZ2V0U3RyaW5nKCJOSW5mV2l6RXJyb3IuMTAiKTsgLy8kTk9OLU5MUy0xJAorCQkJCQlyZXRWYWx1ZSA9IGZhbHNlOworCQkJCX0KKwkJCQkKKwkJCX0gLy8gaWYKKwkJfSAvLyBpZgorCQlpZihyZXRWYWx1ZSAmJiB0aGlzLmlzRnJvbUZpbGUoKSAmJiBpc1NlbGVjdGVkUm93KCkpIHsKKwkJCVN0cmluZyB2YWwgPSByb3d0eHQuZ2V0VGV4dCgpOworCQkJdHJ5IHsKKwkJCQlpbnQgdiA9IEludGVnZXIucGFyc2VJbnQodmFsKTsKKwkJCQlpZih2IDwgMCkgeworCQkJCQllcnJvck1lc3NhZ2UgPSBEaXNlYXNlV2l6YXJkTWVzc2FnZXMKKwkJCQkJLmdldFN0cmluZygiTkluZldpekVycm9yLjExIik7IC8vJE5PTi1OTFMtMSQKKwkJCQkJcmV0VmFsdWUgPSBmYWxzZTsKKwkJCQl9CisJCQl9IGNhdGNoKEV4Y2VwdGlvbiBlKSB7CisJCQkJZXJyb3JNZXNzYWdlID0gRGlzZWFzZVdpemFyZE1lc3NhZ2VzCisJCQkJLmdldFN0cmluZygiTkluZldpekVycm9yLjExIik7IC8vJE5PTi1OTFMtMSQKKwkJCQlyZXRWYWx1ZSA9IGZhbHNlOworCQkJfQorCQl9CisJCXJldHVybiByZXRWYWx1ZTsKKwl9IC8vIHZhbGlkYXRlCisKKwkvKioKKwkgKiBAcmV0dXJuIHRoZSBlcnJvciBtZXNzYWdlIHNldCBieSB7QGxpbmsgI3ZhbGlkYXRlKCl9CisJICovCisJcHVibGljIFN0cmluZyBnZXRFcnJvck1lc3NhZ2UoKSB7CisJCXJldHVybiBlcnJvck1lc3NhZ2U7CisJfQorCisJLy8gcHJpdmF0ZSBTdHJpbmcgZ2V0TmFtZShTdHJpbmcgaXNvS2V5LCBpbnQgbGV2ZWwpIHsKKwkvLyByZXR1cm4gR2VvZ3JhcGhpY05hbWVzLmdldE5hbWUoaXNvS2V5LCBsZXZlbCk7CisJLy8gfSAvLyBnZXROYW1lCisKKwkKKworCS8qKgorCSAqIGFjY2VzcyB0aGUgaW5mZWN0b3JNb2RlCisJICogaWYgdHJ1ZSBjcmVhdGUgYW5kIGluZmVjdG9yCisJICogaWYgZmFsc2UgY3JlYXRlcyBhbmQgaW5vY3VsYXRvcgorCSAqLworCXB1YmxpYyBib29sZWFuIGlzSW5mZWN0b3JNb2RlKCkgeworCQlyZXR1cm4gaW5mZWN0b3JNb2RlOworCX0KKwkKKwkvKioKKwkgKiBBcmUgd2UgcmVhZGluZyBmcm9tIGEgZmlsZQorCSAqLworCQorCXB1YmxpYyBib29sZWFuIGlzRnJvbUZpbGUoKSB7CisJCXJldHVybiBpbXBvcnRGcm9tRmlsZTsKKwl9CisJCisJLyoqCisJICogQXJlIHdlIHJlYWRpbmcgZnJvbSBhIGZpbGUKKwkgKi8KKwkKKwlwdWJsaWMgU3RyaW5nIGdldEltcG9ydEZvbGRlcigpIHsKKwkJcmV0dXJuIGxvZ0RpclRleHQuZ2V0VGV4dCgpOworCX0KKwkKKwkvKioKKwkgKiBAcmV0dXJuIHRoZSBpc29LZXkgdGhhdCBzcGVjaWZpZXMgdGhlIGxvY2F0aW9uIHRvIGJlIGluZmVjdGVkLgorCSAqLworCXB1YmxpYyBmaW5hbCBTdHJpbmcgZ2V0SXNvS2V5KCkgeworCQlyZXR1cm4gaXNvS2V5OworCX0KKworCS8qKgorCSAqIEByZXR1cm4gdGhlIGlzb0tleSB0aGF0IHNwZWNpZmllcyB0aGUgbG9jYXRpb24gdG8gYmUgaW5mZWN0ZWQuCisJICovCisJcHVibGljIGZpbmFsIFVSSSBnZXRUYXJnZXRVUkkoKSB7CisJCXJldHVybiB0YXJnZXRVUkk7CisJfQorCQorCS8qKgorCSAqIEByZXR1cm4gdGhlIE5MUydkIG5hbWUgb2YgdGhlIGxvY2F0aW9uIHNlbGVjdGVkIGFzIHRoZSBwb2ludCBvZiBpbmZlY3Rpb24KKwkgKi8KKwlwdWJsaWMgZmluYWwgU3RyaW5nIGdldExvY2F0aW9uTmFtZSgpIHsKKwkJLy8gVE9ETyBuZWVkIHRvIHJldHVybiB0aGUgTkxTIHN0cmluZyBoZXJlLgorCQlyZXR1cm4gZ2V0SXNvS2V5KCk7CisJfQorCisJLyoqCisJICogQHJldHVybiB0aGUgbmFtZSBvZiB0aGUgZGlzZWFzZQorCSAqLworCXB1YmxpYyBmaW5hbCBTdHJpbmcgZ2V0RGlzZWFzZU5hbWUoKSB7CisJCXJldHVybiBkaXNlYXNlTmFtZVRleHQuZ2V0VGV4dCgpOworCX0KKworCS8qKgorCSAqIEByZXR1cm4gdGhlIG5hbWUgb2YgdGhlIHBvcHVsYXRpb24gYmVpbmcgaW5mZWN0ZWQKKwkgKi8KKwlwdWJsaWMgZmluYWwgU3RyaW5nIGdldFBvcHVsYXRpb24oKSB7CisJCXJldHVybiBwb3B1bGF0aW9uVGV4dC5nZXRUZXh0KCk7CisJfQorCisJLyoqCisJICogQHJldHVybiB0aGUgbnVtYmVyIG9mIGluZmVjdGlvbnMKKwkgKi8KKwlwdWJsaWMgZG91YmxlIGdldE51bWJlcigpIHsKKwkJdHJ5IHsKKwkJCXJldHVybiBEb3VibGUucGFyc2VEb3VibGUobnVtYmVyT2ZJbmZlY3Rpb25zVGV4dC5nZXRUZXh0KCkpOworCQl9IGNhdGNoIChmaW5hbCBOdW1iZXJGb3JtYXRFeGNlcHRpb24gZSkgeworCQkJQWN0aXZhdG9yLmxvZ0Vycm9yKERpc2Vhc2VXaXphcmRNZXNzYWdlcworCQkJCQkuZ2V0U3RyaW5nKCJOSW5mV2l6RXJyb3IuNyIpLCBlKTsgLy8kTk9OLU5MUy0xJAorCQkJcmV0dXJuIDAuMDsKKwkJfSAvLyBjYXRjaCBOdW1iZXJGb3JtYXRFeGNlcHRpb24KKwl9CisJCisKKworCXB1YmxpYyBib29sZWFuIGlzUGVyY2VudGFnZSgpIHsKKwkJcmV0dXJuIHBlcmNlbnRhZ2U7CisJfQorCisJcHVibGljIGJvb2xlYW4gaXNGaXJzdFJvdygpIHtyZXR1cm4gdXNlRmlyc3RSb3c7fQorCXB1YmxpYyBib29sZWFuIGlzTGFzdFJvdygpIHtyZXR1cm4gdXNlTGFzdFJvdzt9CisJcHVibGljIGJvb2xlYW4gaXNTZWxlY3RlZFJvdygpIHtyZXR1cm4gdXNlU2VsZWN0ZWRSb3c7fQorCXB1YmxpYyBpbnQgZ2V0U2VsZWN0ZWNSb3coKSB7cmV0dXJuIEludGVnZXIucGFyc2VJbnQocm93dHh0LmdldFRleHQoKSk7fQorCQorCXB1YmxpYyB2b2lkIHNldFByb2plY3QoSVByb2plY3QgcCkge3RoaXMuY3VycmVudFByb2plY3Q9cDt9CisJCit9IC8vIEluZmVjdG9yRGVmaW5pdGlvbkNvbXBvc2l0ZQpkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvd2l6YXJkcy9OZXdEaXNlYXNlV2l6YXJkLmphdmEgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS93aXphcmRzL05ld0Rpc2Vhc2VXaXphcmQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZjNjZTZjCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvd2l6YXJkcy9OZXdEaXNlYXNlV2l6YXJkLmphdmEKQEAgLTAsMCArMSwxOTIgQEAKKy8vIE5ld0Rpc2Vhc2VXaXphcmQuamF2YQorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnVpLndpemFyZHM7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDcsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5jb21tYW5kcy5BYnN0cmFjdEhhbmRsZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5jb21tYW5kcy5FeGVjdXRpb25FdmVudDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLmNvbW1hbmRzLkV4ZWN1dGlvbkV4Y2VwdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLmNvbW1hbmRzLklIYW5kbGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuU3RydWN0dXJlZFNlbGVjdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS53aXphcmQuV2l6YXJkRGlhbG9nOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5TVEVNVVJJOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uRHVibGluQ29yZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLklkZW50aWZpYWJsZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuRGlzZWFzZU1vZGVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZFBhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LlNXVDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGU7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaFdpbmRvdzsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5oYW5kbGVycy5IYW5kbGVyVXRpbDsKKworLyoqCisgKiBUaGlzIGNsYXNzIGlzIGEgV2l6YXJkIGZvciBtYWtpbmcgbmV3IFNURU0ge0BsaW5rIERpc2Vhc2VNb2RlbH0gaW5zdGFuY2VzLgorICovCitwdWJsaWMgY2xhc3MgTmV3RGlzZWFzZVdpemFyZCBleHRlbmRzIE5ld0lkZW50aWZpYWJsZVdpemFyZCB7CisKKwlwcml2YXRlIE5ld0Rpc2Vhc2VQYWdlIG5kcCA9IG51bGw7CisJCisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0udWkud2l6YXJkcy5OZXdJZGVudGlmaWFibGVXaXphcmQjZ2V0V2l6YXJkVGl0bGUoKQorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCBTdHJpbmcgZ2V0V2l6YXJkVGl0bGUoKSB7CisJCXJldHVybiBEaXNlYXNlV2l6YXJkTWVzc2FnZXMuZ2V0U3RyaW5nKCJORGlzZWFzZVdpei53aXphcmRfdGl0bGUiKTsgLy8kTk9OLU5MUy0xJAorCX0KKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS51aS53aXphcmRzLk5ld0lkZW50aWZpYWJsZVdpemFyZCNjcmVhdGVOZXdJZGVudGlmaWFibGVQYWdlKCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgTmV3SWRlbnRpZmlhYmxlUGFnZSBjcmVhdGVOZXdJZGVudGlmaWFibGVQYWdlKCkgeworCQluZHAgPSBuZXcgTmV3RGlzZWFzZVBhZ2UoRGlzZWFzZVdpemFyZE1lc3NhZ2VzCisJCQkJLmdldFN0cmluZygiTkRpc2Vhc2VXaXoucGFnZV90aXRsZSIpLCB0aGlzKTsgLy8kTk9OLU5MUy0xJAorCQluZHAuc2V0VGl0bGUoRGlzZWFzZVdpemFyZE1lc3NhZ2VzLmdldFN0cmluZygiTkRpc2Vhc2VXaXoucGFnZV90aXRsZSIpKTsgLy8kTk9OLU5MUy0xJAorCQluZHAuc2V0RGVzY3JpcHRpb24oRGlzZWFzZVdpemFyZE1lc3NhZ2VzCisJCQkJLmdldFN0cmluZygiTkRpc2Vhc2VXaXoucGFnZV9kZXNjcmlwdGlvbiIpKTsgLy8kTk9OLU5MUy0xJAorCQkKKwkJdGhpcy5zZXRIZWxwQ29udGV4dElkKCJvcmcuZWNsaXBzZS5zdGVtLmRvYy5uZXdkaXNlYXNlX2NvbnRleHRpZCIpOworCisJCXJldHVybiBuZHA7CisJfSAvLyBjcmVhdGVOZXdJZGVudGlmaWFibGVQYWdlCisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0udWkud2l6YXJkcy5OZXdJZGVudGlmaWFibGVXaXphcmQjY3JlYXRlRHVibGluQ29yZVBhZ2UoKQorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCBEdWJsaW5Db3JlUGFnZSBjcmVhdGVEdWJsaW5Db3JlUGFnZSgpIHsKKwkJcmV0dXJuIG5ldyBEdWJsaW5Db3JlUGFnZSgpIHsKKwkJCS8qKgorCQkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnVpLndpemFyZHMuTmV3SWRlbnRpZmlhYmxlV2l6YXJkLkR1YmxpbkNvcmVQYWdlI2luaXRpYWxpemVEQ0ZpZWxkcygpCisJCQkgKi8KKwkJCUBPdmVycmlkZQorCQkJcHJvdGVjdGVkIHZvaWQgaW5pdGlhbGl6ZURDQXR0cmlidXRlcygpIHsKKwkJCQlzdXBlci5pbml0aWFsaXplRENBdHRyaWJ1dGVzKCk7CisJCQkJCisJCQkJZm9ybWF0LnNldFRleHQoU3RhbmRhcmRQYWNrYWdlLmVOU19VUkkpOworCQkJCWZvcm1hdC5zZXRFbmFibGVkKGZhbHNlKTsKKwkJCQl0eXBlLnNldFRleHQoU1RFTVVSSS5jcmVhdGVUeXBlVVJJKAorCQkJCQkJRGlzZWFzZU1vZGVsLlVSSV9UWVBFX0RJU0VBU0VNT0RFTF9TRUdNRU5UKS50b1N0cmluZygpKTsKKwkJCQl0eXBlLnNldEVuYWJsZWQoZmFsc2UpOworCQkJCQorCQkJCS8vIEpISyBnZXQgdGhlIHByZXNldCBEdWJsaW4gQ29yZSBmaWVsZHMgZnJvbSB0aGUgcGx1Z2luLnhtbAorCQkJCWZpbmFsIERpc2Vhc2VNb2RlbCBkaXNlYXNlTW9kZWwgPSBuZHAuZ2V0U2VsZWN0ZWREaXNlYXNlTW9kZWwoKTsKKwkJCQlEdWJsaW5Db3JlIHBsdWdnaW5EdWJsaW5Db3JlID0gZGlzZWFzZU1vZGVsLmdldER1YmxpbkNvcmUoKTsKKwkJCQl0aGlzLnVwZGF0ZUR1YmxpbkNvcmVQYWdlKHBsdWdnaW5EdWJsaW5Db3JlKTsKKwkJCQkKKwkJCX0KKwkJfTsgLy8gRHVibGluQ29yZVBhZ2UKKwl9IC8vIGNyZWF0ZUR1YmxpbkNvcmVQYWdlCisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0udWkud2l6YXJkcy5OZXdJZGVudGlmaWFibGVXaXphcmQjY3JlYXRlSWRlbnRpZmlhYmxlKCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgSWRlbnRpZmlhYmxlIGNyZWF0ZUlkZW50aWZpYWJsZSgpIHsKKwkJZmluYWwgRGlzZWFzZU1vZGVsIHJldFZhbHVlID0gbmRwLmdldFNlbGVjdGVkRGlzZWFzZU1vZGVsKCk7CisJCXJldFZhbHVlLnNldER1YmxpbkNvcmUobmV3RHVibGluQ29yZVBhZ2UuY3JlYXRlRHVibGluQ29yZSgpKTsKKwkJcmV0dXJuIHJldFZhbHVlOworCX0gLy8gY3JlYXRlU3BlY2lmaWNJZGVudGlmaWFibGUKKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS51aS53aXphcmRzLk5ld0lkZW50aWZpYWJsZVdpemFyZCNnZXRTZXJpYWxpemF0aW9uRm9sZGVyTmFtZSgpCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIFN0cmluZyBnZXRTZXJpYWxpemF0aW9uRm9sZGVyTmFtZSgpIHsKKwkJcmV0dXJuIE5ld1NURU1Qcm9qZWN0V2l6YXJkLkRFQ09SQVRPUlNfRk9MREVSX05BTUU7CisJfQorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnVpLndpemFyZHMuTmV3SWRlbnRpZmlhYmxlV2l6YXJkI2dldFNlcmlhbGl6YXRpb25GaWxlTmFtZUV4dGVuc2lvbigpCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIFN0cmluZyBnZXRTZXJpYWxpemF0aW9uRmlsZU5hbWVFeHRlbnNpb24oKSB7CisJCXJldHVybiBTdGFuZGFyZFBhY2thZ2UuZU5BTUU7CisJfSAvLyBnZXRJZGVudGlmaWFibGVTZXJpYWxpemF0aW9uRmlsZUV4dGVuc2lvbgorCisJcHJvdGVjdGVkIHN0YXRpYyBjbGFzcyBOZXdEaXNlYXNlUGFnZSBleHRlbmRzIE5ld0lkZW50aWZpYWJsZVBhZ2UgeworCisJCURpc2Vhc2VEZWZpbml0aW9uQ29udHJvbCBkZGMgPSBudWxsOworCQlOZXdEaXNlYXNlV2l6YXJkIHBhcmVudFdpemFyZCA9IG51bGw7CisKKwkJLyoqCisJCSAqIEBwYXJhbSBwYWdlTmFtZQorCQkgKi8KKwkJcHJvdGVjdGVkIE5ld0Rpc2Vhc2VQYWdlKGZpbmFsIFN0cmluZyBwYWdlTmFtZSwgTmV3RGlzZWFzZVdpemFyZCBuZXdEaXNlYXNlV2l6YXJkKSB7CisJCQlzdXBlcihwYWdlTmFtZSk7CisJCQlwYXJlbnRXaXphcmQgPSBuZXdEaXNlYXNlV2l6YXJkOworCQl9CisKKwkJLyoqCisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS51aS53aXphcmRzLk5ld0lkZW50aWZpYWJsZVdpemFyZC5OZXdJZGVudGlmaWFibGVQYWdlI2dldERDRGVzY3JpcHRpb24oKQorCQkgKi8KKwkJQE92ZXJyaWRlCisJCXByb3RlY3RlZCBTdHJpbmcgZ2V0RENEZXNjcmlwdGlvbigpIHsKKwkJCS8vIExlYXZlIGRlc2NyaXB0aW9uL3RpdGxlIGJsYW5rCisJCQlyZXR1cm4gIiI7CisvLwkJCXJldHVybiBNZXNzYWdlRm9ybWF0LmZvcm1hdChEaXNlYXNlV2l6YXJkTWVzc2FnZXMKKy8vCQkJCQkuZ2V0U3RyaW5nKCJORGlzZWFzZVdpei5EQ19ERVNDUklQVElPTiIpLCAvLyROT04tTkxTLTEkCisvLwkJCQkJbmV3IE9iamVjdFtdIHsgc2VyaWFsaXphdGlvbkZpbGVOYW1lRmllbGQuZ2V0VGV4dCgpIH0pOworCQl9IC8vIGdldERDRGVzY3JpcHRpb24KKworCQlAT3ZlcnJpZGUKKwkJcHJvdGVjdGVkIENvbXBvc2l0ZSBjcmVhdGVTcGVjaWZpY0NvbXBvc2l0ZShmaW5hbCBDb21wb3NpdGUgcGFyZW50KSB7CisJCQlkZGMgPSBuZXcgRGlzZWFzZURlZmluaXRpb25Db250cm9sKHBhcmVudCwgU1dULk5PTkUsCisJCQkJCXByb2plY3RWYWxpZGF0b3IsIHRoaXMuZ2V0U2VsZWN0ZWRQcm9qZWN0KCksIHBhcmVudFdpemFyZCk7CisJCQlyZXR1cm4gZGRjOworCQl9IC8vIGNyZWF0ZVNwZWNpZmljQ29tcG9zaXRlCisKKwkJQE92ZXJyaWRlCisJCXByb3RlY3RlZCBib29sZWFuIHZhbGlkYXRlUGFnZSgpIHsKKwkJCWJvb2xlYW4gcmV0VmFsdWUgPSBzdXBlci52YWxpZGF0ZVBhZ2UoKTsKKwkJCWlmIChyZXRWYWx1ZSkgeworCQkJCXNldEVycm9yTWVzc2FnZShudWxsKTsKKwkJCQlyZXRWYWx1ZSA9IGRkYy52YWxpZGF0ZSgpOworCQkJCS8vIEVycm9yPworCQkJCWlmICghcmV0VmFsdWUpIHsKKwkJCQkJLy8gWWVzCisJCQkJCXNldEVycm9yTWVzc2FnZShkZGMuZ2V0RXJyb3JNZXNzYWdlKCkpOworCQkJCX0gLy8gaWYKKwkJCX0KKwkJCXJldHVybiByZXRWYWx1ZTsKKwkJfSAvLyB2YWxpZGF0ZVBhZ2UKKworCQlEaXNlYXNlTW9kZWwgZ2V0U2VsZWN0ZWREaXNlYXNlTW9kZWwoKSB7CisJCQlyZXR1cm4gZGRjLmdldFNlbGVjdGVkRGlzZWFzZU1vZGVsKCk7CisJCX0gLy8gZ2V0U2VsZWN0ZWREaXNlYXNlTW9kZWwKKworCX0gLy8gTmV3RGlzZWFzZVBhZ2UKKworCS8qKgorCSAqIFRoaXMgY2xhc3MgaXMgYSB7QGxpbmsgSUhhbmRsZXJ9IGZvciB0aGUgY29tbWFuZCB0aGF0IGNyZWF0ZXMgYQorCSAqIHtAbGluayBOZXdEaXNlYXNlV2l6YXJkfQorCSAqLworCXB1YmxpYyBzdGF0aWMgY2xhc3MgTmV3RGlzZWFzZVdpemFyZENvbW1hbmRIYW5kbGVyIGV4dGVuZHMgQWJzdHJhY3RIYW5kbGVyCisJCQlpbXBsZW1lbnRzIElIYW5kbGVyIHsKKworCQkvKioKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5jb3JlLmNvbW1hbmRzLkFic3RyYWN0SGFuZGxlciNleGVjdXRlKG9yZy5lY2xpcHNlLmNvcmUuY29tbWFuZHMuRXhlY3V0aW9uRXZlbnQpCisJCSAqLworCQlwdWJsaWMgT2JqZWN0IGV4ZWN1dGUoZmluYWwgRXhlY3V0aW9uRXZlbnQgZXhlY3V0aW9uRXZlbnQpCisJCQkJdGhyb3dzIEV4ZWN1dGlvbkV4Y2VwdGlvbiB7CisJCQlmaW5hbCBJV29ya2JlbmNoV2luZG93IHdpbmRvdyA9IEhhbmRsZXJVdGlsCisJCQkJCS5nZXRBY3RpdmVXb3JrYmVuY2hXaW5kb3dDaGVja2VkKGV4ZWN1dGlvbkV2ZW50KTsKKwkJCWZpbmFsIE5ld0Rpc2Vhc2VXaXphcmQgd2l6YXJkID0gbmV3IE5ld0Rpc2Vhc2VXaXphcmQoKTsKKwkJCXdpemFyZC5pbml0KHdpbmRvdy5nZXRXb3JrYmVuY2goKSwgU3RydWN0dXJlZFNlbGVjdGlvbi5FTVBUWSk7CisJCQlmaW5hbCBXaXphcmREaWFsb2cgd2l6YXJkRGlhbG9nID0gbmV3IFNURU1XaXphcmREaWFsb2cod2luZG93CisJCQkJCS5nZXRTaGVsbCgpLCB3aXphcmQpOworCQkJd2l6YXJkRGlhbG9nLm9wZW4oKTsKKwkJCXJldHVybiBudWxsOworCQl9IC8vIGV4ZWN1dGUKKwl9IC8vIE5ld0Rpc2Vhc2VXaXphcmRDb21tYW5kSGFuZGxlcgorfSAvLyBOZXdEaXNlYXNlV2l6YXJkCmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS93aXphcmRzL05ld0luZmVjdG9yV2l6YXJkLmphdmEgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS93aXphcmRzL05ld0luZmVjdG9yV2l6YXJkLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjc0ZDU0YwotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3dpemFyZHMvTmV3SW5mZWN0b3JXaXphcmQuamF2YQpAQCAtMCwwICsxLDM0NCBAQAorLy8gTmV3SW5mZWN0b3JXaXphcmQuamF2YQorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnVpLndpemFyZHM7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDcsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLmNvbW1hbmRzLkFic3RyYWN0SGFuZGxlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLmNvbW1hbmRzLkV4ZWN1dGlvbkV2ZW50OworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUuY29tbWFuZHMuRXhlY3V0aW9uRXhjZXB0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUuY29tbWFuZHMuSUhhbmRsZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5TdHJ1Y3R1cmVkU2VsZWN0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLndpemFyZC5XaXphcmREaWFsb2c7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5TY2VuYXJpb0luaXRpYWxpemF0aW9uRXhjZXB0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuaW1wbC5SZWZlcmVuY2VTY2VuYXJpb0RhdGFNYXBJbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuaW1wbC5SZWZlcmVuY2VTY2VuYXJpb0RhdGFNYXBJbXBsLlJlZmVyZW5jZVNjZW5hcmlvRGF0YUluc3RhbmNlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMudXRpbC5DU1ZzY2VuYXJpb0xvYWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuU1RFTVVSSTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLklkZW50aWZpYWJsZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuTm9kZURlY29yYXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuSW5mZWN0b3JJbm9jdWxhdG9yQ29sbGVjdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU0lJbmZlY3RvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU0lSSW5vY3VsYXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmRGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZFBhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLmltcGwuU0lSSW5vY3VsYXRvckltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LlNXVDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLlNlbGVjdGlvbkV2ZW50OworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuU2VsZWN0aW9uTGlzdGVuZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2hXaW5kb3c7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuaGFuZGxlcnMuSGFuZGxlclV0aWw7CisKKy8qKgorICogVGhpcyBjbGFzcyByZXByZXNlbnRzCisgKi8KK3B1YmxpYyBjbGFzcyBOZXdJbmZlY3RvcldpemFyZCBleHRlbmRzIE5ld0lkZW50aWZpYWJsZVdpemFyZCB7CisKKwlwcml2YXRlIE5ld0luZmVjdG9yUGFnZSBuaXAgPSBudWxsOworCisJLyoqCisJICogQ29uc3RydWN0b3IKKwkgKi8KKwlwdWJsaWMgTmV3SW5mZWN0b3JXaXphcmQoKSB7CisJCS8vIE5vdGhpbmcKKwl9CisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0udWkud2l6YXJkcy5OZXdJZGVudGlmaWFibGVXaXphcmQjZ2V0V2l6YXJkVGl0bGUoKQorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCBTdHJpbmcgZ2V0V2l6YXJkVGl0bGUoKSB7CisJCXJldHVybiBEaXNlYXNlV2l6YXJkTWVzc2FnZXMuZ2V0U3RyaW5nKCJOSW5mZWN0b3JXaXoud2l6YXJkX3RpdGxlIik7IC8vJE5PTi1OTFMtMSQKKwl9CisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0udWkud2l6YXJkcy5OZXdJZGVudGlmaWFibGVXaXphcmQjY3JlYXRlTmV3SWRlbnRpZmlhYmxlUGFnZSgpCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIE5ld0lkZW50aWZpYWJsZVBhZ2UgY3JlYXRlTmV3SWRlbnRpZmlhYmxlUGFnZSgpIHsKKwkJbmlwID0gbmV3IE5ld0luZmVjdG9yUGFnZShEaXNlYXNlV2l6YXJkTWVzc2FnZXMuZ2V0U3RyaW5nKCJOSW5mZWN0b3JXaXoucGFnZV90aXRsZSIpKTsgLy8kTk9OLU5MUy0xJAorCQluaXAuc2V0VGl0bGUoRGlzZWFzZVdpemFyZE1lc3NhZ2VzLmdldFN0cmluZygiTkluZmVjdG9yV2l6LnBhZ2VfdGl0bGUiKSk7IC8vJE5PTi1OTFMtMSQKKwkJbmlwLnNldERlc2NyaXB0aW9uKERpc2Vhc2VXaXphcmRNZXNzYWdlcy5nZXRTdHJpbmcoIk5JbmZlY3Rvcldpei5wYWdlX2Rlc2NyaXB0aW9uIikpOyAvLyROT04tTkxTLTEkCisJCQorCQl0aGlzLnNldEhlbHBDb250ZXh0SWQoIm9yZy5lY2xpcHNlLnN0ZW0uZG9jLm5ld2luZmVjdG9yaW5vY3VsYXRvcl9jb250ZXh0aWQiKTsKKworCQlyZXR1cm4gbmlwOworCX0gLy8gY3JlYXRlTmV3SWRlbnRpZmlhYmxlUGFnZQorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnVpLndpemFyZHMuTmV3SWRlbnRpZmlhYmxlV2l6YXJkI2NyZWF0ZUR1YmxpbkNvcmVQYWdlKCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgRHVibGluQ29yZVBhZ2UgY3JlYXRlRHVibGluQ29yZVBhZ2UoKSB7CisJCXJldHVybiBuZXcgRHVibGluQ29yZVBhZ2UoKSB7CisJCQkvKioKKwkJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS51aS53aXphcmRzLk5ld0lkZW50aWZpYWJsZVdpemFyZC5EdWJsaW5Db3JlUGFnZSNpbml0aWFsaXplRENGaWVsZHMoKQorCQkJICovCisJCQlAT3ZlcnJpZGUKKwkJCXByb3RlY3RlZCB2b2lkIGluaXRpYWxpemVEQ0F0dHJpYnV0ZXMoKSB7CisJCQkJc3VwZXIuaW5pdGlhbGl6ZURDQXR0cmlidXRlcygpOworCQkJCWZvcm1hdC5zZXRUZXh0KFN0YW5kYXJkUGFja2FnZS5lTlNfVVJJKTsKKwkJCQlmb3JtYXQuc2V0RW5hYmxlZChmYWxzZSk7CisJCQkJLy8gdHlwZS5zZXRUZXh0KCJ1bmRlZmluZWQiKTsKKwkJCQkvLyB0eXBlLnNldFRleHQoU1RFTVVSSS5TQ0VOQVJJT19UWVBFX1VSSS50b1N0cmluZygpKTsKKwkJCQl0eXBlLnNldEVuYWJsZWQoZmFsc2UpOworCQkJfQorCQl9OyAvLyBEdWJsaW5Db3JlUGFnZQorCX0KKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS51aS53aXphcmRzLk5ld0lkZW50aWZpYWJsZVdpemFyZCNjcmVhdGVJZGVudGlmaWFibGUoKQorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCBJZGVudGlmaWFibGUgY3JlYXRlSWRlbnRpZmlhYmxlKCkgeworCQlmaW5hbCBOb2RlRGVjb3JhdG9yIHJldFZhbHVlID0gbmlwLmdldEluZmVjdG9yKCk7CisJCXJldFZhbHVlLnNldER1YmxpbkNvcmUobmV3RHVibGluQ29yZVBhZ2UuY3JlYXRlRHVibGluQ29yZSgpKTsKKwkJcmV0dXJuIHJldFZhbHVlOworCX0gLy8gY3JlYXRlU3BlY2lmaWNJZGVudGlmaWFibGUKKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS51aS53aXphcmRzLk5ld0lkZW50aWZpYWJsZVdpemFyZCNnZXRTZXJpYWxpemF0aW9uRm9sZGVyTmFtZSgpCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIFN0cmluZyBnZXRTZXJpYWxpemF0aW9uRm9sZGVyTmFtZSgpIHsKKwkJcmV0dXJuIE5ld1NURU1Qcm9qZWN0V2l6YXJkLkRFQ09SQVRPUlNfRk9MREVSX05BTUU7CisJfQorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnVpLndpemFyZHMuTmV3SWRlbnRpZmlhYmxlV2l6YXJkI2dldFNlcmlhbGl6YXRpb25GaWxlTmFtZUV4dGVuc2lvbigpCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIFN0cmluZyBnZXRTZXJpYWxpemF0aW9uRmlsZU5hbWVFeHRlbnNpb24oKSB7CisJCXJldHVybiBTdGFuZGFyZFBhY2thZ2UuZU5BTUU7CisJfQorCisJcHJvdGVjdGVkIHN0YXRpYyBjbGFzcyBOZXdJbmZlY3RvclBhZ2UgZXh0ZW5kcyBOZXdJZGVudGlmaWFibGVQYWdlIHsKKworCQlwcml2YXRlIEluZmVjdG9yRGVmaW5pdGlvbkNvbXBvc2l0ZSBpZGM7CisKKwkJLyoqCisJCSAqIEBwYXJhbSBwYWdlTmFtZQorCQkgKi8KKwkJcHJvdGVjdGVkIE5ld0luZmVjdG9yUGFnZShTdHJpbmcgcGFnZU5hbWUpIHsKKwkJCXN1cGVyKHBhZ2VOYW1lKTsKKwkJfQorCisJCS8qKgorCQkgKiBAcmV0dXJuCisJCSAqLworCQlwdWJsaWMgTm9kZURlY29yYXRvciBnZXRJbmZlY3RvcigpIHsKKwkJCWlmKCFpZGMuaXNGcm9tRmlsZSgpKSB7CisJCQkJU0lJbmZlY3RvciByZXRWYWx1ZSA9IG51bGw7CisJCQkJaWYoaWRjLmlzSW5mZWN0b3JNb2RlKCkpIHsKKwkJCQkJcmV0VmFsdWUgPSBTdGFuZGFyZEZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZVNJSW5mZWN0b3IoKTsKKwkJCQkJcmV0VmFsdWUuc2V0VGFyZ2V0RmVhdHVyZSgiaSIpOyAvLyBkZWZhdWx0IGZvciBpbmZlY3RvcgorCQkJCX0gZWxzZSB7CisJCQkJCXJldFZhbHVlID0gU3RhbmRhcmRGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVTSVJJbm9jdWxhdG9yKCk7CisJCQkJCXJldFZhbHVlLnNldFRhcmdldEZlYXR1cmUoInIiKTsgLy8gZGVmYXVsdCBmb3IgaW5vY3VsYXRvcgorCQkJCX0KKwkJCQlyZXRWYWx1ZS5zZXREaXNlYXNlTmFtZShpZGMuZ2V0RGlzZWFzZU5hbWUoKSk7CisJCQkJcmV0VmFsdWUuc2V0UG9wdWxhdGlvbklkZW50aWZpZXIoaWRjLmdldFBvcHVsYXRpb24oKSk7CisJCQkJcmV0VmFsdWUuc2V0VGFyZ2V0SVNPS2V5KGlkYy5nZXRJc29LZXkoKSk7CisJCQkJcmV0VmFsdWUuc2V0VGFyZ2V0VVJJKGlkYy5nZXRUYXJnZXRVUkkoKSk7CisJCQkJaWYoaWRjLmlzSW5mZWN0b3JNb2RlKCkgJiYgaWRjLmlzUGVyY2VudGFnZSgpKSB7CisJCQkJCXJldFZhbHVlLnNldEluZmVjdFBlcmNlbnRhZ2UodHJ1ZSk7CisJCQkJCXJldFZhbHVlLnNldEluZmVjdGlvdXNDb3VudChpZGMuZ2V0TnVtYmVyKCkpOworCQkJCX0gZWxzZSBpZihpZGMuaXNJbmZlY3Rvck1vZGUoKSAmJiAhaWRjLmlzUGVyY2VudGFnZSgpKSB7CisJCQkJCXJldFZhbHVlLnNldEluZmVjdFBlcmNlbnRhZ2UoZmFsc2UpOworCQkJCQlyZXRWYWx1ZS5zZXRJbmZlY3Rpb3VzQ291bnQoaWRjLmdldE51bWJlcigpKTsKKwkJCQl9IGVsc2UgaWYoIGlkYy5pc1BlcmNlbnRhZ2UoKSl7CisJCQkJCSgoU0lSSW5vY3VsYXRvckltcGwpIHJldFZhbHVlKS5zZXRJbm9jdWxhdGVkUGVyY2VudGFnZShpZGMuZ2V0TnVtYmVyKCkpOworCQkJCQkKKwkJCQkJKChTSVJJbm9jdWxhdG9ySW1wbCkgcmV0VmFsdWUpLnNldElub2N1bGF0ZVBlcmNlbnRhZ2UodHJ1ZSk7CisJCQkJCS8vIGp1c3QgdG8gYmUgc3VyZSAtIHNpbmNlIHRoaXMgaXMgTk9UIGFuZCBJbmZlY3RvcgorCQkJCQlyZXRWYWx1ZS5zZXRJbmZlY3Rpb3VzQ291bnQoMC4wKTsKKwkJCQl9IGVsc2UgeworCQkJCQkoKFNJUklub2N1bGF0b3JJbXBsKSByZXRWYWx1ZSkuc2V0SW5vY3VsYXRlZFBlcmNlbnRhZ2UoaWRjLmdldE51bWJlcigpKTsKKwkJCQkJKChTSVJJbm9jdWxhdG9ySW1wbCkgcmV0VmFsdWUpLnNldElub2N1bGF0ZVBlcmNlbnRhZ2UoZmFsc2UpOworCQkJCQkvLyBqdXN0IHRvIGJlIHN1cmUgLSBzaW5jZSB0aGlzIGlzIE5PVCBhbmQgSW5mZWN0b3IKKwkJCQkJcmV0VmFsdWUuc2V0SW5mZWN0aW91c0NvdW50KDAuMCk7CisJCQkJfQorCQkJCXJldHVybiByZXRWYWx1ZTsKKwkJCX0gZWxzZSB7CisJCQkJLy8gV2UgbmVlZCB0byBjcmVhdGUgYSBJbmZlY3Rvcklub2N1bGF0b3JMaXN0IG9iamVjdAorCQkJCS8vIGFuZCByZWFkIHRoZSBkYXRhIGZyb20gZmlsZQorCQkJCQorCQkJCVN0cmluZyBmb2xkZXIgPSBpZGMuZ2V0SW1wb3J0Rm9sZGVyKCk7CisJCQkJUmVmZXJlbmNlU2NlbmFyaW9EYXRhTWFwSW1wbCAgbWFwID0gbnVsbDsKKwkJCQlMaXN0PEludGVnZXI+cmVzb2x1dGlvbnMgPSBudWxsOworCQkJCXRyeSB7CisJCQkJCUNTVnNjZW5hcmlvTG9hZGVyIGxvYWRlciA9IG5ldyBDU1ZzY2VuYXJpb0xvYWRlcihmb2xkZXIpOworCQkJCQkvL3Jlc29sdXRpb25zID0gbG9hZGVyLmdldFJlc29sdXRpb25zKCk7CisJCQkJCWxvYWRlci5nZXRSZXNvbHV0aW9ucygpOworCQkJCQltYXAgPSBsb2FkZXIucGFyc2VBbGxGaWxlcygpOworCQkJCX0gY2F0Y2goU2NlbmFyaW9Jbml0aWFsaXphdGlvbkV4Y2VwdGlvbiBzaWUpIHsKKwkJCQkJb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLkFjdGl2YXRvci5sb2dFcnJvcihzaWUuZ2V0TWVzc2FnZSgpLCBzaWUpOworCQkJCQlyZXR1cm4gbnVsbDsKKwkJCQl9CisJCQkJSW5mZWN0b3JJbm9jdWxhdG9yQ29sbGVjdGlvbiBpaWMgPSBTdGFuZGFyZEZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZUluZmVjdG9ySW5vY3VsYXRvckNvbGxlY3Rpb24oKTsKKwkJCQlpaWMuc2V0SW1wb3J0Rm9sZGVyKGZvbGRlcik7CisJCQkJZm9yKFN0cmluZyBsb2NhdGlvbiA6IG1hcC5nZXRMb2NhdGlvbnMoKSkgeworCQkJCQlSZWZlcmVuY2VTY2VuYXJpb0RhdGFJbnN0YW5jZSBpbnN0YW5jZSA9IG1hcC5nZXRMb2NhdGlvbihsb2NhdGlvbik7CisJCQkJCUxpc3Q8U3RyaW5nPmNvdW50cyA9IG51bGw7CisJCQkJCUxpc3Q8U3RyaW5nPmRlbm9tID0gbnVsbDsKKwkJCQkJaWYoaWRjLmlzSW5mZWN0b3JNb2RlKCkpIAorCQkJCQkJY291bnRzID0gaW5zdGFuY2UuZ2V0RGF0YShDU1ZzY2VuYXJpb0xvYWRlci5JX1RZUEUpOworCQkJCQllbHNlCisJCQkJCQljb3VudHMgPSBpbnN0YW5jZS5nZXREYXRhKENTVnNjZW5hcmlvTG9hZGVyLlJfVFlQRSk7CisJCQkJCWlmKGlkYy5pc1BlcmNlbnRhZ2UoKSkKKwkJCQkJCWRlbm9tID0gaW5zdGFuY2UuZ2V0RGF0YShDU1ZzY2VuYXJpb0xvYWRlci5QT1BfQ09VTlRfS0VZKTsKKwkJCQkJCisJCQkJCS8vIFVzZSBmaXJzdCByb3cgb25seSAKKwkJCQkJZG91YmxlIGRjb3VudCA9IDAuMDsKKwkJCQkJCQorCQkJCQlpZihpZGMuaXNGaXJzdFJvdygpKQkKKwkJCQkJCWRjb3VudCA9IERvdWJsZS5wYXJzZURvdWJsZShjb3VudHMuZ2V0KDApKTsKKwkJCQkJZWxzZSBpZihpZGMuaXNMYXN0Um93KCkpCisJCQkJCQlkY291bnQgPSBEb3VibGUucGFyc2VEb3VibGUoY291bnRzLmdldChjb3VudHMuc2l6ZSgpLTEpKTsKKwkJCQkJZWxzZQorCQkJCQkJZGNvdW50ID0gRG91YmxlLnBhcnNlRG91YmxlKGNvdW50cy5nZXQoaWRjLmdldFNlbGVjdGVjUm93KCkpKTsKKwkJCQkJCisJCQkJCWRvdWJsZSBkZGVub20gPSAxLjA7CisJCQkJCWlmKGlkYy5pc1BlcmNlbnRhZ2UoKSkKKwkJCQkJCWlmKGlkYy5pc0ZpcnN0Um93KCkpCisJCQkJCQkJZGRlbm9tID0gKERvdWJsZS5wYXJzZURvdWJsZShkZW5vbS5nZXQoMCkpIC8gMTAwLjApOworCQkJCQkJZWxzZSBpZihpZGMuaXNMYXN0Um93KCkpCisJCQkJCQkJZGRlbm9tID0gKERvdWJsZS5wYXJzZURvdWJsZShkZW5vbS5nZXQoY291bnRzLnNpemUoKS0xKSkgLyAxMDAuMCk7CisJCQkJCQllbHNlCisJCQkJCQkJZGRlbm9tID0gKERvdWJsZS5wYXJzZURvdWJsZShkZW5vbS5nZXQoaWRjLmdldFNlbGVjdGVjUm93KCkpKSAvIDEwMC4wKTsKKwkJCQkJCisJCQkJCVNJSW5mZWN0b3IgaW5mZWN0b3IgPSBudWxsOworCQkJCQlpZihpZGMuaXNJbmZlY3Rvck1vZGUoKSkgeworCQkJCQkJaW5mZWN0b3IgPSBTdGFuZGFyZEZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZVNJSW5mZWN0b3IoKTsKKwkJCQkJCWluZmVjdG9yLnNldEluZmVjdFBlcmNlbnRhZ2UoaWRjLmlzUGVyY2VudGFnZSgpKTsKKwkJCQkJCWluZmVjdG9yLnNldEluZmVjdGlvdXNDb3VudChkY291bnQvZGRlbm9tKTsKKwkJCQkJCWluZmVjdG9yLnNldFVSSShTVEVNVVJJLmNyZWF0ZVVSSShTVEVNVVJJLmdlbmVyYXRlVW5pcXVlUGFydCgpKyIvaW5mZWN0XyIrbG9jYXRpb24pKTsKKwkJCQkJfQorCQkJCQllbHNlIHsKKwkJCQkJCWluZmVjdG9yID0gU3RhbmRhcmRGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVTSVJJbm9jdWxhdG9yKCk7CisJCQkJCQkoKFNJUklub2N1bGF0b3IpaW5mZWN0b3IpLnNldElub2N1bGF0ZVBlcmNlbnRhZ2UoaWRjLmlzUGVyY2VudGFnZSgpKTsKKwkJCQkJCSgoU0lSSW5vY3VsYXRvcilpbmZlY3Rvcikuc2V0SW5vY3VsYXRlZFBlcmNlbnRhZ2UoZGNvdW50L2RkZW5vbSk7CisJCQkJCQlpbmZlY3Rvci5zZXRVUkkoU1RFTVVSSS5jcmVhdGVVUkkoU1RFTVVSSS5nZW5lcmF0ZVVuaXF1ZVBhcnQoKSsiL2lub2N1bGF0ZV8iK2xvY2F0aW9uKSk7CisJCQkJCX0KKwkJCQkJaW5mZWN0b3Iuc2V0RGlzZWFzZU5hbWUoaWRjLmdldERpc2Vhc2VOYW1lKCkpOworCQkJCQlpbmZlY3Rvci5zZXRQb3B1bGF0aW9uSWRlbnRpZmllcihpZGMuZ2V0UG9wdWxhdGlvbigpKTsKKwkJCQkJaW5mZWN0b3Iuc2V0VGFyZ2V0SVNPS2V5KGxvY2F0aW9uKTsKKwkJCQkJaWljLmdldExpc3QoKS5hZGQoaW5mZWN0b3IpOworCQkJCX0KKwkJCQlyZXR1cm4gaWljOworCQkJfQorCQl9IC8vIGdldEluZmVjdG9yCisKKwkJLyoqCisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS51aS53aXphcmRzLk5ld0lkZW50aWZpYWJsZVdpemFyZC5OZXdJZGVudGlmaWFibGVQYWdlI2dldERDRGVzY3JpcHRpb24oKQorCQkgKi8KKwkJQE92ZXJyaWRlCisJCXByb3RlY3RlZCBTdHJpbmcgZ2V0RENEZXNjcmlwdGlvbigpIHsKKwkJCS8vIExlYXZlIGRlc2NyaXB0aW9uL3RpdGxlIGJsYW5rCisJCQlyZXR1cm4gIiI7CisJCQkvKgorCQkJaWYoIWlkYy5pc0Zyb21GaWxlKCkpIHsKKwkJCQlpZihpZGMuaXNJbmZlY3Rvck1vZGUoKSkgeworCQkJCQlyZXR1cm4gTWVzc2FnZUZvcm1hdC5mb3JtYXQoRGlzZWFzZVdpemFyZE1lc3NhZ2VzLmdldFN0cmluZygiTkluZmVjdG9yV2l6LkRDX0RFU0NSSVBUSU9OIiksIC8vJE5PTi1OTFMtMSQKKwkJCQkJCQluZXcgT2JqZWN0W10geyBzZXJpYWxpemF0aW9uRmlsZU5hbWVGaWVsZC5nZXRUZXh0KCksIAorCQkJCQkJCQkJCQlEb3VibGUudmFsdWVPZihpZGMuZ2V0TnVtYmVyKCkpLAorCQkJCQkJCQkJCQlpZGMuZ2V0UG9wdWxhdGlvbigpLCAKKwkJCQkJCQkJCQkJaWRjLmdldERpc2Vhc2VOYW1lKCksCisJCQkJCQkJCQkJCUdlb2dyYXBoaWNOYW1lcy5nZXRSZXZlcnNlSGllcmFyY2h5TmFtZShpZGMuZ2V0SXNvS2V5KCkpLCBpZGMuZ2V0SXNvS2V5KCkgCisJCQkJCQkJCQkJCX0pOworCQkJCX0gCisJCQkJLy8gZWxzZSBpbm9jdWxhdG9yCisJCQkJcmV0dXJuIE1lc3NhZ2VGb3JtYXQuZm9ybWF0KERpc2Vhc2VXaXphcmRNZXNzYWdlcy5nZXRTdHJpbmcoIk5JbmZlY3Rvcldpei5EQ19ERVNDUklQVElPTjIiKSwgLy8kTk9OLU5MUy0xJAorCQkJCQkJbmV3IE9iamVjdFtdIHsgc2VyaWFsaXphdGlvbkZpbGVOYW1lRmllbGQuZ2V0VGV4dCgpLAorCQkJCQkJCQkJCURvdWJsZS52YWx1ZU9mKGlkYy5nZXROdW1iZXIoKSksCisJCQkJCQkJCQkJaWRjLmdldFBvcHVsYXRpb24oKSwgCisJCQkJCQkJCQkJaWRjLmdldERpc2Vhc2VOYW1lKCksCisJCQkJCQkJCQkJR2VvZ3JhcGhpY05hbWVzLmdldFJldmVyc2VIaWVyYXJjaHlOYW1lKGlkYy5nZXRJc29LZXkoKSksIGlkYy5nZXRJc29LZXkoKSAKKwkJCQkJCQkJCQl9KTsKKwkJCX0gZWxzZSB7CisJCQkJaWYoaWRjLmlzSW5mZWN0b3JNb2RlKCkpIHsKKwkJCQkJcmV0dXJuIE1lc3NhZ2VGb3JtYXQuZm9ybWF0KERpc2Vhc2VXaXphcmRNZXNzYWdlcy5nZXRTdHJpbmcoIk5JbmZlY3Rvcldpei5EQ19ERVNDUklQVElPTl9GUk9NX0ZJTEUiKSwgLy8kTk9OLU5MUy0xJAorCQkJCQkJCW5ldyBPYmplY3RbXSB7IHNlcmlhbGl6YXRpb25GaWxlTmFtZUZpZWxkLmdldFRleHQoKSwKKwkJCQkJCQlpZGMuZ2V0SW1wb3J0Rm9sZGVyKCkgCisJCQkJCQkJCQkJCX0pOworCQkJCX0gCisJCQkJLy8gZWxzZSBpbm9jdWxhdG9yCisJCQkJcmV0dXJuIE1lc3NhZ2VGb3JtYXQuZm9ybWF0KERpc2Vhc2VXaXphcmRNZXNzYWdlcy5nZXRTdHJpbmcoIk5JbmZlY3Rvcldpei5EQ19ERVNDUklQVElPTjJfRlJPTV9GSUxFIiksIC8vJE5PTi1OTFMtMSQKKwkJCQkJCW5ldyBPYmplY3RbXSB7IHNlcmlhbGl6YXRpb25GaWxlTmFtZUZpZWxkLmdldFRleHQoKSwKKwkJCQkJCQlpZGMuZ2V0SW1wb3J0Rm9sZGVyKCkgIAorCQkJCQkJCQkJCX0pOworCQkJfQorCQkJKi8KKwkJfSAvLyBnZXREQ0Rlc2NyaXB0aW9uCisKKwkJQE92ZXJyaWRlCisJCXByb3RlY3RlZCBDb21wb3NpdGUgY3JlYXRlU3BlY2lmaWNDb21wb3NpdGUoZmluYWwgQ29tcG9zaXRlIHBhcmVudCkgeworCQkJaWRjID0gbmV3IEluZmVjdG9yRGVmaW5pdGlvbkNvbXBvc2l0ZShwYXJlbnQsIFNXVC5OT05FLAorCQkJCQlwcm9qZWN0VmFsaWRhdG9yLCBzdXBlci5nZXRTZWxlY3RlZFByb2plY3QoKSk7CisJCQkKKwkJCWZpbmFsIE5ld0luZmVjdG9yV2l6YXJkLk5ld0luZmVjdG9yUGFnZSBzZWxmID0gdGhpczsKKwkJCQorCQkJdGhpcy5wcm9qZWN0TmFtZXNDb21iby5hZGRTZWxlY3Rpb25MaXN0ZW5lcihuZXcgU2VsZWN0aW9uTGlzdGVuZXIoKSB7CisJCQkJCisJCQkJcHVibGljIHZvaWQgd2lkZ2V0U2VsZWN0ZWQoU2VsZWN0aW9uRXZlbnQgYXJnMCkgeworCQkJCQlpZGMuc2V0UHJvamVjdChzZWxmLmdldFNlbGVjdGVkUHJvamVjdCgpKTsKKwkJCQl9CisJCQkJCisJCQkJcHVibGljIHZvaWQgd2lkZ2V0RGVmYXVsdFNlbGVjdGVkKFNlbGVjdGlvbkV2ZW50IGFyZzApIHsKKwkJCQkJCisJCQkJfQorCQkJfSk7CisJCQkKKwkJCXJldHVybiBpZGM7CisJCX0gLy8gY3JlYXRlU3BlY2lmaWNDb21wb3NpdGUKKworCQlAT3ZlcnJpZGUKKwkJcHJvdGVjdGVkIGJvb2xlYW4gdmFsaWRhdGVQYWdlKCkgeworCQkJYm9vbGVhbiByZXRWYWx1ZSA9IHN1cGVyLnZhbGlkYXRlUGFnZSgpOworCQkJaWYgKHJldFZhbHVlKSB7CisJCQkJc2V0RXJyb3JNZXNzYWdlKG51bGwpOworCQkJCXJldFZhbHVlID0gaWRjLnZhbGlkYXRlKCk7CisJCQkJLy8gRXJyb3I/CisJCQkJaWYgKCFyZXRWYWx1ZSkgeworCQkJCQkvLyBZZXMKKwkJCQkJc2V0RXJyb3JNZXNzYWdlKGlkYy5nZXRFcnJvck1lc3NhZ2UoKSk7CisJCQkJfSAvLyBpZgorCQkJfQorCQkJcmV0dXJuIHJldFZhbHVlOworCQl9IC8vIHZhbGlkYXRlUGFnZQorCX0gLy8gTmV3SW5mZWN0b3JQYWdlCisKKwkvKioKKwkgKiBUaGlzIGNsYXNzIGlzIGEge0BsaW5rIElIYW5kbGVyfSBmb3IgdGhlIGNvbW1hbmQgdGhhdCBjcmVhdGVzIGEKKwkgKiB7QGxpbmsgTmV3SW5mZWN0b3JXaXphcmR9CisJICovCisJcHVibGljIHN0YXRpYyBjbGFzcyBOZXdJbmZlY3RvcldpemFyZENvbW1hbmRIYW5kbGVyIGV4dGVuZHMgQWJzdHJhY3RIYW5kbGVyCisJCQlpbXBsZW1lbnRzIElIYW5kbGVyIHsKKworCQkvKioKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5jb3JlLmNvbW1hbmRzLkFic3RyYWN0SGFuZGxlciNleGVjdXRlKG9yZy5lY2xpcHNlLmNvcmUuY29tbWFuZHMuRXhlY3V0aW9uRXZlbnQpCisJCSAqLworCQlwdWJsaWMgT2JqZWN0IGV4ZWN1dGUoZmluYWwgRXhlY3V0aW9uRXZlbnQgZXhlY3V0aW9uRXZlbnQpCisJCQkJdGhyb3dzIEV4ZWN1dGlvbkV4Y2VwdGlvbiB7CisJCQlmaW5hbCBJV29ya2JlbmNoV2luZG93IHdpbmRvdyA9IEhhbmRsZXJVdGlsCisJCQkJCS5nZXRBY3RpdmVXb3JrYmVuY2hXaW5kb3dDaGVja2VkKGV4ZWN1dGlvbkV2ZW50KTsKKwkJCWZpbmFsIE5ld0luZmVjdG9yV2l6YXJkIHdpemFyZCA9IG5ldyBOZXdJbmZlY3RvcldpemFyZCgpOworCQkJd2l6YXJkLmluaXQod2luZG93LmdldFdvcmtiZW5jaCgpLCBTdHJ1Y3R1cmVkU2VsZWN0aW9uLkVNUFRZKTsKKwkJCWZpbmFsIFdpemFyZERpYWxvZyB3aXphcmREaWFsb2cgPSBuZXcgU1RFTVdpemFyZERpYWxvZyh3aW5kb3cKKwkJCQkJLmdldFNoZWxsKCksIHdpemFyZCk7CisJCQl3aXphcmREaWFsb2cub3BlbigpOworCQkJcmV0dXJuIG51bGw7CisJCX0gLy8gZXhlY3V0ZQorCX0gLy8gTmV3SW5mZWN0b3JXaXphcmRDb21tYW5kSGFuZGxlcgorfSAvLyBOZXdJbmZlY3RvcldpemFyZApkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvd2l6YXJkcy9OZXdJbml0aWFsaXplclBhZ2UuamF2YSBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3dpemFyZHMvTmV3SW5pdGlhbGl6ZXJQYWdlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjgxMzA2NwotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3dpemFyZHMvTmV3SW5pdGlhbGl6ZXJQYWdlLmphdmEKQEAgLTAsMCArMSwzODEgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS51aS53aXphcmRzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDExIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGphdmEudGV4dC5NZXNzYWdlRm9ybWF0OworaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuQmFzaWNFTGlzdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuRUxpc3Q7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlVSSTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUF0dHJpYnV0ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLklkZW50aWZpYWJsZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuRGlzZWFzZU1vZGVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5Jbml0aWFsaXplcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmRGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udWkud2lkZ2V0cy5Mb2NhdGlvblBpY2tlckRpYWxvZzsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuU1dUOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuTW9kaWZ5RXZlbnQ7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5Nb2RpZnlMaXN0ZW5lcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLlNlbGVjdGlvbkV2ZW50OworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuU2VsZWN0aW9uTGlzdGVuZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5GaWxsTGF5b3V0OworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5sYXlvdXQuR3JpZERhdGE7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5HcmlkTGF5b3V0OworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkJ1dHRvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21ibzsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuTGFiZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuVGV4dDsKKworcHVibGljIGNsYXNzIE5ld0luaXRpYWxpemVyUGFnZSBleHRlbmRzIE5ld0lkZW50aWZpYWJsZVBhZ2UgeworCisJLyoqCisJICogVGhpcyBpcyB0aGUge0BsaW5rIElkZW50aWZpYWJsZX0gZm9yIHdoaWNoIHRoZSBwYWdlIGlzIGNyZWF0aW5nIGEKKwkgKiB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLk1vZGlmaWVyfS4KKwkgKi8KKwlwcml2YXRlIERpc2Vhc2VNb2RlbCB0YXJnZXQ7CisKKwlwcml2YXRlIENvbXBvc2l0ZSBvdXRlckNvbXBvc2l0ZTsKKworCXByaXZhdGUgQ29tYm8gcG9wdWxhdGlvbkJveDsKKworCXByaXZhdGUgQ29tcG9zaXRlIHZhbHVlc0NvbXBvc2l0ZTsKKworCXByaXZhdGUgRUxpc3Q8TGFiZWw+IHZhbHVlTGFiZWxzOworCisJcHJpdmF0ZSBFTGlzdDxUZXh0PiB2YWx1ZVRleHRzOworCisJcHJpdmF0ZSBCdXR0b24gdXNlRnJhY3Rpb25zQnV0dG9uOworCisJcHJpdmF0ZSBUZXh0IGxvY2F0aW9uVGV4dDsKKworCXByaXZhdGUgVVJJIGxvY2F0aW9uVVJJOworCisJLyoqCisJICogQ29uc3RydWN0b3IKKwkgKiAKKwkgKiBAcGFyYW0gaWRlbnRpZmlhYmxlCisJICogICAgICAgICAgICB0aGUge0BsaW5rIElkZW50aWZpYWJsZX0gZm9yIHdoaWNoIHRoZSBwYWdlIGlzIGNyZWF0aW5nIGEKKwkgKiAgICAgICAgICAgIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuTW9kaWZpZXJ9LgorCSAqLworCXByb3RlY3RlZCBOZXdJbml0aWFsaXplclBhZ2UoZmluYWwgRGlzZWFzZU1vZGVsIHRhcmdldCkgeworCQlzdXBlcihEaXNlYXNlV2l6YXJkTWVzc2FnZXMuZ2V0U3RyaW5nKCJOSW5pdGlhbGl6ZXJXaXoucGFnZV90aXRsZSIpKTsKKwkJc2V0VGl0bGUoRGlzZWFzZVdpemFyZE1lc3NhZ2VzLmdldFN0cmluZygiTkluaXRpYWxpemVyV2l6LnBhZ2VfdGl0bGUiKSk7IC8vJE5PTi1OTFMtMSQKKwkJc2V0RGVzY3JpcHRpb24oRGlzZWFzZVdpemFyZE1lc3NhZ2VzCisJCQkJLmdldFN0cmluZygiTkluaXRpYWxpemVyV2l6LnBhZ2VfZGVzY3JpcHRpb24iKSk7IC8vJE5PTi1OTFMtMSQKKwkJdGhpcy50YXJnZXQgPSB0YXJnZXQ7CisJCXRoaXMudmFsdWVMYWJlbHMgPSBuZXcgQmFzaWNFTGlzdDxMYWJlbD4oKTsKKwkJdGhpcy52YWx1ZVRleHRzID0gbmV3IEJhc2ljRUxpc3Q8VGV4dD4oKTsKKwl9CisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0udWkud2l6YXJkcy5OZXdJZGVudGlmaWFibGVXaXphcmQuTmV3SWRlbnRpZmlhYmxlUGFnZSNjcmVhdGVTcGVjaWZpY0NvbXBvc2l0ZShvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGUpCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIENvbXBvc2l0ZSBjcmVhdGVTcGVjaWZpY0NvbXBvc2l0ZShmaW5hbCBDb21wb3NpdGUgcGFyZW50KSB7CisJCW91dGVyQ29tcG9zaXRlID0gbmV3IENvbXBvc2l0ZShwYXJlbnQsIFNXVC5OT05FKTsKKwkJb3V0ZXJDb21wb3NpdGUuc2V0TGF5b3V0KG5ldyBHcmlkTGF5b3V0KDIsIHRydWUpKTsKKworCQlMYWJlbCBwb3B1bGF0aW9uTGFiZWwgPSBuZXcgTGFiZWwob3V0ZXJDb21wb3NpdGUsIFNXVC5OT05FKTsKKwkJcG9wdWxhdGlvbkxhYmVsLnNldExheW91dERhdGEobmV3IEdyaWREYXRhKFNXVC5CRUdJTk5JTkcsIFNXVC5GSUxMLAorCQkJCXRydWUsIGZhbHNlKSk7CisJCXBvcHVsYXRpb25MYWJlbC5zZXRUZXh0KERpc2Vhc2VXaXphcmRNZXNzYWdlcworCQkJCS5nZXRTdHJpbmcoIk5Jbml0aWFsaXplcldpei5wb3B1bGF0aW9uIikpOworCisJCXBvcHVsYXRpb25Cb3ggPSBuZXcgQ29tYm8ob3V0ZXJDb21wb3NpdGUsIFNXVC5SRUFEX09OTFkpOworCQlwb3B1bGF0aW9uQm94LnNldExheW91dERhdGEobmV3IEdyaWREYXRhKFNXVC5GSUxMLCBTV1QuRklMTCwgdHJ1ZSwKKwkJCQlmYWxzZSkpOworCQlFTGlzdDxTdHJpbmc+IHBvcHVsYXRpb25zID0gdGFyZ2V0LmdldEFsbExhYmVsSWRlbnRpZmllcnMoKTsKKwkJZm9yIChTdHJpbmcgcCA6IHBvcHVsYXRpb25zKSB7CisJCQlwb3B1bGF0aW9uQm94LmFkZChwKTsKKwkJfQorCQlwb3B1bGF0aW9uQm94LmFkZE1vZGlmeUxpc3RlbmVyKHByb2plY3RWYWxpZGF0b3IpOworCQlwb3B1bGF0aW9uQm94LmFkZE1vZGlmeUxpc3RlbmVyKG5ldyBNb2RpZnlMaXN0ZW5lcigpIHsKKworCQkJcHVibGljIHZvaWQgbW9kaWZ5VGV4dChNb2RpZnlFdmVudCBlKSB7CisJCQkJcmVtb3ZlSW5pdGlhbGl6ZXJGaWVsZHMob3V0ZXJDb21wb3NpdGUpOworCQkJCWFkZEluaXRpYWxpemVyRmllbGRzKG91dGVyQ29tcG9zaXRlKTsKKwkJCX0KKwkJfSk7CisKKwkJdmFsdWVzQ29tcG9zaXRlID0gbmV3IENvbXBvc2l0ZShvdXRlckNvbXBvc2l0ZSwgU1dULk5PTkUpOworCQl2YWx1ZXNDb21wb3NpdGUuc2V0TGF5b3V0KG5ldyBHcmlkTGF5b3V0KDIsIHRydWUpKTsKKwkJdmFsdWVzQ29tcG9zaXRlLnNldExheW91dERhdGEobmV3IEdyaWREYXRhKFNXVC5GSUxMLCBTV1QuRklMTCwgdHJ1ZSwKKwkJCQlmYWxzZSwgMiwgMSkpOworCisJCUxhYmVsIHBlcmNlbnRhZ2VMYWJlbCA9IG5ldyBMYWJlbChvdXRlckNvbXBvc2l0ZSwgU1dULk5PTkUpOworCQlwZXJjZW50YWdlTGFiZWwuc2V0TGF5b3V0RGF0YShuZXcgR3JpZERhdGEoU1dULkJFR0lOTklORywgU1dULkZJTEwsCisJCQkJdHJ1ZSwgZmFsc2UpKTsKKwkJcGVyY2VudGFnZUxhYmVsLnNldFRleHQoRGlzZWFzZVdpemFyZE1lc3NhZ2VzCisJCQkJLmdldFN0cmluZygiTkluaXRpYWxpemVyV2l6LnZhbHVlVHlwZSIpKTsKKworCQlDb21wb3NpdGUgcmFkaW9Db21wb3NpdGUgPSBuZXcgQ29tcG9zaXRlKG91dGVyQ29tcG9zaXRlLCBTV1QuQk9SREVSKTsKKwkJcmFkaW9Db21wb3NpdGUuc2V0TGF5b3V0KG5ldyBGaWxsTGF5b3V0KFNXVC5IT1JJWk9OVEFMKSk7CisJCXJhZGlvQ29tcG9zaXRlLnNldExheW91dERhdGEobmV3IEdyaWREYXRhKFNXVC5GSUxMLCBTV1QuRklMTCwgdHJ1ZSwKKwkJCQlmYWxzZSkpOworCQlCdXR0b24gdXNlQWJzb2x1dGVCdXR0b24gPSBuZXcgQnV0dG9uKHJhZGlvQ29tcG9zaXRlLCBTV1QuUkFESU8pOworCQl1c2VBYnNvbHV0ZUJ1dHRvbi5zZXRUZXh0KERpc2Vhc2VXaXphcmRNZXNzYWdlcworCQkJCS5nZXRTdHJpbmcoIk5Jbml0aWFsaXplcldpei5hYnNvbHV0ZSIpKTsvLyROT04tTkxTLTEkCisJCXVzZUFic29sdXRlQnV0dG9uLnNldFNlbGVjdGlvbih0cnVlKTsKKwkJdXNlRnJhY3Rpb25zQnV0dG9uID0gbmV3IEJ1dHRvbihyYWRpb0NvbXBvc2l0ZSwgU1dULlJBRElPKTsKKwkJdXNlRnJhY3Rpb25zQnV0dG9uLnNldFRleHQoRGlzZWFzZVdpemFyZE1lc3NhZ2VzCisJCQkJLmdldFN0cmluZygiTkluaXRpYWxpemVyV2l6LmZyYWN0aW9ucyIpKTsvLyROT04tTkxTLTEkCisJCXVzZUZyYWN0aW9uc0J1dHRvbi5zZXRTZWxlY3Rpb24oZmFsc2UpOworCQl1c2VGcmFjdGlvbnNCdXR0b24uYWRkU2VsZWN0aW9uTGlzdGVuZXIobmV3IFNlbGVjdGlvbkxpc3RlbmVyKCkgeworCisJCQlwdWJsaWMgdm9pZCB3aWRnZXRTZWxlY3RlZChTZWxlY3Rpb25FdmVudCBlKSB7CisJCQkJc2V0VmFsdWVzVG9EZWZhdWx0KCk7CisJCQl9CisKKwkJCXB1YmxpYyB2b2lkIHdpZGdldERlZmF1bHRTZWxlY3RlZChTZWxlY3Rpb25FdmVudCBlKSB7CisJCQl9CisJCX0pOworCisJCUJ1dHRvbiBsb2NhdGlvbkJ1dHRvbiA9IG5ldyBCdXR0b24ob3V0ZXJDb21wb3NpdGUsIFNXVC5QVVNIKTsKKwkJbG9jYXRpb25CdXR0b24uc2V0TGF5b3V0RGF0YShuZXcgR3JpZERhdGEoU1dULkJFR0lOTklORywgU1dULkZJTEwsCisJCQkJdHJ1ZSwgZmFsc2UpKTsKKwkJbG9jYXRpb25CdXR0b24uc2V0VGV4dChEaXNlYXNlV2l6YXJkTWVzc2FnZXMKKwkJCQkuZ2V0U3RyaW5nKCJOSW5pdGlhbGl6ZXJXaXoubG9jYXRpb24iKSk7CisJCWxvY2F0aW9uQnV0dG9uLmFkZFNlbGVjdGlvbkxpc3RlbmVyKG5ldyBTZWxlY3Rpb25MaXN0ZW5lcigpIHsKKwkJCXB1YmxpYyB2b2lkIHdpZGdldFNlbGVjdGVkKFNlbGVjdGlvbkV2ZW50IGFyZzApIHsKKwkJCQlMb2NhdGlvblBpY2tlckRpYWxvZyBscERpYWxvZyA9IG5ldyBMb2NhdGlvblBpY2tlckRpYWxvZygKKwkJCQkJCU5ld0luaXRpYWxpemVyUGFnZS50aGlzLmdldFNoZWxsKCksIFNXVC5OT05FLAorCQkJCQkJRGlzZWFzZVdpemFyZE1lc3NhZ2VzLmdldFN0cmluZygiTkluZldpelBpY2tMb2NUaXRsZSIpLAorCQkJCQkJbG9jYXRpb25UZXh0LmdldFRleHQoKSwgTmV3SW5pdGlhbGl6ZXJQYWdlLnRoaXMKKwkJCQkJCQkJLmdldFNlbGVjdGVkUHJvamVjdCgpKTsKKwkJCQlPYmplY3RbXSByZXQgPSBscERpYWxvZy5vcGVuKCk7CisJCQkJaWYgKHJldCAhPSBudWxsKSB7CisJCQkJCWxvY2F0aW9uVGV4dC5zZXRUZXh0KChTdHJpbmcpIHJldFswXSk7CisJCQkJCWxvY2F0aW9uVVJJID0gKFVSSSkgcmV0WzFdOworCQkJCX0KKwkJCX0KKworCQkJcHVibGljIHZvaWQgd2lkZ2V0RGVmYXVsdFNlbGVjdGVkKFNlbGVjdGlvbkV2ZW50IGFyZzApIHsKKworCQkJfQorCQl9KTsKKworCQlsb2NhdGlvblRleHQgPSBuZXcgVGV4dChvdXRlckNvbXBvc2l0ZSwgU1dULkJPUkRFUiB8IFNXVC5UUkFJTCk7CisJCWxvY2F0aW9uVGV4dAorCQkJCS5zZXRMYXlvdXREYXRhKG5ldyBHcmlkRGF0YShTV1QuRklMTCwgU1dULkZJTEwsIHRydWUsIGZhbHNlKSk7CisJCWxvY2F0aW9uVGV4dC5zZXRFZGl0YWJsZShmYWxzZSk7CisJCWxvY2F0aW9uVGV4dC5hZGRNb2RpZnlMaXN0ZW5lcihwcm9qZWN0VmFsaWRhdG9yKTsKKworCQlyZXR1cm4gb3V0ZXJDb21wb3NpdGU7CisJfQorCisJcHJpdmF0ZSB2b2lkIGFkZEluaXRpYWxpemVyRmllbGRzKENvbXBvc2l0ZSBwYXJlbnQpIHsKKwkJU3RyaW5nIHBvcHVsYXRpb24gPSBwb3B1bGF0aW9uQm94LmdldFRleHQoKTsKKwkJRUxpc3Q8RUF0dHJpYnV0ZT4gYXR0cmlidXRlcyA9IHRhcmdldAorCQkJCS5jcmVhdGVEaXNlYXNlTW9kZWxMYWJlbFZhbHVlKHBvcHVsYXRpb24pLmVDbGFzcygpCisJCQkJLmdldEVBbGxBdHRyaWJ1dGVzKCk7CisKKwkJZm9yIChFQXR0cmlidXRlIGEgOiBhdHRyaWJ1dGVzKSB7CisJCQlpZiAoYS5pc0NoYW5nZWFibGUoKSAmJiAhYS5nZXROYW1lKCkuc3RhcnRzV2l0aCgiZGlzZWFzZURlYXRocyIpCisJCQkJCSYmICFhLmdldE5hbWUoKS5zdGFydHNXaXRoKCJpbmNpZGVuY2UiKSkgeworCQkJCUxhYmVsIGxhYmVsID0gbmV3IExhYmVsKHZhbHVlc0NvbXBvc2l0ZSwgU1dULk5PTkUpOworCQkJCWxhYmVsLnNldExheW91dERhdGEobmV3IEdyaWREYXRhKFNXVC5CRUdJTk5JTkcsIFNXVC5GSUxMLCB0cnVlLAorCQkJCQkJZmFsc2UpKTsKKwkJCQlsYWJlbC5zZXRUZXh0KGEuZ2V0TmFtZSgpKTsKKwkJCQl2YWx1ZUxhYmVscy5hZGQobGFiZWwpOworCisJCQkJVGV4dCB0ZXh0ID0gbmV3IFRleHQodmFsdWVzQ29tcG9zaXRlLCBTV1QuQk9SREVSIHwgU1dULlRSQUlMKTsKKwkJCQl0ZXh0LnNldExheW91dERhdGEobmV3IEdyaWREYXRhKFNXVC5GSUxMLCBTV1QuRklMTCwgdHJ1ZSwgZmFsc2UpKTsKKwkJCQl2YWx1ZVRleHRzLmFkZCh0ZXh0KTsKKworCQkJCWlmIChhLmdldE5hbWUoKS5lcXVhbHMoInMiKSkgeworCQkJCQl0ZXh0LnNldEVkaXRhYmxlKGZhbHNlKTsKKwkJCQl9IGVsc2UgeworCQkJCQl0ZXh0LmFkZE1vZGlmeUxpc3RlbmVyKG5ldyBNb2RpZnlMaXN0ZW5lcigpIHsKKworCQkJCQkJcHVibGljIHZvaWQgbW9kaWZ5VGV4dChNb2RpZnlFdmVudCBlKSB7CisJCQkJCQkJaWYgKHVzZUZyYWN0aW9uc0J1dHRvbi5nZXRTZWxlY3Rpb24oKSkgeworCQkJCQkJCQlkb3VibGUgdiA9IDEuMCAtIGFkZEZyYWN0aW9ucygpOworCisJCQkJCQkJCWZvciAoVGV4dCB0IDogdmFsdWVUZXh0cykgeworCQkJCQkJCQkJaWYgKCF0LmdldEVkaXRhYmxlKCkpIHsKKwkJCQkJCQkJCQl0LnNldFRleHQodiArICIiKTsKKwkJCQkJCQkJCQlicmVhazsKKwkJCQkJCQkJCX0KKwkJCQkJCQkJfQorCQkJCQkJCX0KKwkJCQkJCX0KKwkJCQkJfSk7CisJCQkJfQorCisJCQkJc2V0VmFsdWVzVG9EZWZhdWx0KCk7CisJCQl9CisJCX0KKworCQlmb3IgKFRleHQgdGV4dCA6IHZhbHVlVGV4dHMpIHsKKwkJCXRleHQuYWRkTW9kaWZ5TGlzdGVuZXIocHJvamVjdFZhbGlkYXRvcik7CisJCX0KKworCQl1cGRhdGVHVUkoKTsKKwl9CisKKwlwcml2YXRlIHZvaWQgcmVtb3ZlSW5pdGlhbGl6ZXJGaWVsZHMoQ29tcG9zaXRlIHBhcmVudCkgeworCQlmb3IgKExhYmVsIGwgOiB2YWx1ZUxhYmVscykgeworCQkJbC5kaXNwb3NlKCk7CisJCX0KKworCQlmb3IgKFRleHQgdCA6IHZhbHVlVGV4dHMpIHsKKwkJCXQuZGlzcG9zZSgpOworCQl9CisKKwkJdmFsdWVMYWJlbHMuY2xlYXIoKTsKKwkJdmFsdWVUZXh0cy5jbGVhcigpOworCQl1cGRhdGVHVUkoKTsKKwl9CisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0udWkud2l6YXJkcy5OZXdJZGVudGlmaWFibGVXaXphcmQuTmV3SWRlbnRpZmlhYmxlUGFnZSNnZXREQ0Rlc2NyaXB0aW9uKCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgU3RyaW5nIGdldERDRGVzY3JpcHRpb24oKSB7CisJCXJldHVybiBNZXNzYWdlRm9ybWF0LmZvcm1hdCgKKwkJCQlNZXNzYWdlcy5nZXRTdHJpbmcoIk5Jbml0aWFsaXplcldpei5EQ19ERVNDUklQVElPTiIpLAorCQkJCW5ldyBPYmplY3RbXSB7IHNlcmlhbGl6YXRpb25GaWxlTmFtZUZpZWxkLmdldFRleHQoKSB9KTsKKwl9CisKKwlwcm90ZWN0ZWQgSW5pdGlhbGl6ZXIgZ2V0SW5pdGlhbGl6ZXIoKSB7CisJCUluaXRpYWxpemVyIGluaXQgPSBTdGFuZGFyZEZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZUluaXRpYWxpemVyKCk7CisKKwkJaW5pdC5zZXREaXNlYXNlTmFtZSh0YXJnZXQuZ2V0RGlzZWFzZU5hbWUoKSk7CisJCWluaXQuc2V0VGFyZ2V0SVNPS2V5KGxvY2F0aW9uVGV4dC5nZXRUZXh0KCkpOworCQlpbml0LnNldFRhcmdldFVSSShsb2NhdGlvblVSSSk7CisJCWluaXQuc2V0UG9wdWxhdGlvbklkZW50aWZpZXIocG9wdWxhdGlvbkJveC5nZXRUZXh0KCkpOworCQlpbml0LnNldFVzZUZyYWN0aW9ucyh1c2VGcmFjdGlvbnNCdXR0b24uZ2V0U2VsZWN0aW9uKCkpOworCQlpbml0LmdldENvbXBhcnRtZW50cygpLmNsZWFyKCk7CisJCWluaXQuZ2V0Q29tcGFydG1lbnRWYWx1ZXMoKS5jbGVhcigpOworCisJCWZvciAoTGFiZWwgbCA6IHZhbHVlTGFiZWxzKSB7CisJCQlpbml0LmdldENvbXBhcnRtZW50cygpLmFkZChsLmdldFRleHQoKSk7CisJCX0KKworCQlmb3IgKFRleHQgdCA6IHZhbHVlVGV4dHMpIHsKKwkJCWlmICghdXNlRnJhY3Rpb25zQnV0dG9uLmdldFNlbGVjdGlvbigpICYmICF0LmdldEVkaXRhYmxlKCkpIHsKKwkJCQlpbml0LmdldENvbXBhcnRtZW50VmFsdWVzKCkuYWRkKDAuMCk7CisJCQl9IGVsc2UgeworCQkJCWluaXQuZ2V0Q29tcGFydG1lbnRWYWx1ZXMoKQorCQkJCQkJLmFkZChEb3VibGUucGFyc2VEb3VibGUodC5nZXRUZXh0KCkpKTsKKwkJCX0KKwkJfQorCisJCXJldHVybiBpbml0OworCX0KKworCS8qKgorCSAqIHNlZSBvcmcuZWNsaXBzZS5zdGVtLnVpLndpemFyZHMuTmV3SWRlbnRpZmlhYmxlUGFnZSN2YWxpZGF0ZVBhZ2UoKQorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBib29sZWFuIHZhbGlkYXRlUGFnZSgpIHsKKwkJaWYgKCFzdXBlci52YWxpZGF0ZVBhZ2UoKSkgeworCQkJcmV0dXJuIGZhbHNlOworCQl9CisKKwkJaWYgKHBvcHVsYXRpb25Cb3guZ2V0VGV4dCgpLmlzRW1wdHkoKSkgeworCQkJc2V0RXJyb3JNZXNzYWdlKERpc2Vhc2VXaXphcmRNZXNzYWdlcworCQkJCQkuZ2V0U3RyaW5nKCJOSW5pdGlhbGl6ZXJXaXoucG9wdWxhdGlvbi5taXNzaW5nIikpOworCQkJcmV0dXJuIGZhbHNlOworCQl9CisKKwkJaWYgKCF2YWxpZGF0ZVZhbHVlcygpKSB7CisJCQlzZXRFcnJvck1lc3NhZ2UoRGlzZWFzZVdpemFyZE1lc3NhZ2VzCisJCQkJCS5nZXRTdHJpbmcoIk5Jbml0aWFsaXplcldpei52YWx1ZXMuaW52YWxpZCIpKTsKKwkJCXJldHVybiBmYWxzZTsKKwkJfQorCisJCWlmIChsb2NhdGlvblRleHQuZ2V0VGV4dCgpLmlzRW1wdHkoKSkgeworCQkJc2V0RXJyb3JNZXNzYWdlKERpc2Vhc2VXaXphcmRNZXNzYWdlcworCQkJCQkuZ2V0U3RyaW5nKCJOSW5pdGlhbGl6ZXJXaXoubG9jYXRpb24ubWlzc2luZyIpKTsKKwkJCXJldHVybiBmYWxzZTsKKwkJfQorCisJCXJldHVybiB0cnVlOworCX0KKworCXByaXZhdGUgZG91YmxlIGFkZEZyYWN0aW9ucygpIHsKKwkJZG91YmxlIHN1bSA9IDAuMDsKKworCQlmb3IgKFRleHQgdCA6IHZhbHVlVGV4dHMpIHsKKwkJCWRvdWJsZSB2ID0gMC4wOworCisJCQlpZiAoIXQuZ2V0RWRpdGFibGUoKSkgeworCQkJCWNvbnRpbnVlOworCQkJfQorCisJCQl0cnkgeworCQkJCXYgPSBEb3VibGUucGFyc2VEb3VibGUodC5nZXRUZXh0KCkpOworCQkJfSBjYXRjaCAoTnVtYmVyRm9ybWF0RXhjZXB0aW9uIGUpIHsKKwkJCQlyZXR1cm4gLTEuMDsKKwkJCX0KKworCQkJaWYgKHYgPCAwLjAgfHwgdiA+IDEuMCkgeworCQkJCXJldHVybiAtMS4wOworCQkJfQorCisJCQlzdW0gKz0gdjsKKwkJfQorCisJCWlmIChzdW0gPCAwLjAgfHwgc3VtID4gMS4wKSB7CisJCQlyZXR1cm4gLTEuMDsKKwkJfQorCisJCXJldHVybiBzdW07CisJfQorCisJcHJpdmF0ZSB2b2lkIHNldFZhbHVlc1RvRGVmYXVsdCgpIHsKKwkJZm9yIChUZXh0IHQgOiB2YWx1ZVRleHRzKSB7CisJCQlpZiAodC5nZXRFZGl0YWJsZSgpKSB7CisJCQkJdC5zZXRUZXh0KCIwLjAiKTsKKwkJCX0gZWxzZSB7CisJCQkJaWYgKHVzZUZyYWN0aW9uc0J1dHRvbi5nZXRTZWxlY3Rpb24oKSkgeworCQkJCQl0LnNldFRleHQoIjEuMCIpOworCQkJCX0gZWxzZSB7CisJCQkJCXQuc2V0VGV4dCgiIik7CisJCQkJfQorCQkJfQorCQl9CisJfQorCisJcHJpdmF0ZSBib29sZWFuIHZhbGlkYXRlVmFsdWVzKCkgeworCQlpZiAodXNlRnJhY3Rpb25zQnV0dG9uLmdldFNlbGVjdGlvbigpKSB7CisJCQlyZXR1cm4gYWRkRnJhY3Rpb25zKCkgIT0gLTEuMDsKKwkJfSBlbHNlIHsKKwkJCWZvciAoVGV4dCB0IDogdmFsdWVUZXh0cykgeworCQkJCWlmICh0LmdldEVkaXRhYmxlKCkpIHsKKwkJCQkJZG91YmxlIHYgPSAwLjA7CisKKwkJCQkJdHJ5IHsKKwkJCQkJCXYgPSBEb3VibGUucGFyc2VEb3VibGUodC5nZXRUZXh0KCkpOworCQkJCQl9IGNhdGNoIChOdW1iZXJGb3JtYXRFeGNlcHRpb24gZSkgeworCQkJCQkJcmV0dXJuIGZhbHNlOworCQkJCQl9CisKKwkJCQkJaWYgKHYgPCAwLjApIHsKKwkJCQkJCXJldHVybiBmYWxzZTsKKwkJCQkJfQorCQkJCX0KKwkJCX0KKworCQkJcmV0dXJuIHRydWU7CisJCX0KKwl9CisKKwlwcml2YXRlIHZvaWQgdXBkYXRlR1VJKCkgeworCQlvdXRlckNvbXBvc2l0ZS5nZXRQYXJlbnQoKS5wYWNrKCk7CisJCW91dGVyQ29tcG9zaXRlLmdldFBhcmVudCgpLmdldFBhcmVudCgpLmxheW91dCgpOworCQlvdXRlckNvbXBvc2l0ZS5nZXRQYXJlbnQoKS5nZXRQYXJlbnQoKS5nZXRQYXJlbnQoKS5nZXRQYXJlbnQoKS5sYXlvdXQoKTsKKwl9Cit9CmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS93aXphcmRzL05ld0luaXRpYWxpemVyV2l6YXJkLmphdmEgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS93aXphcmRzL05ld0luaXRpYWxpemVyV2l6YXJkLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzk0ZTg3NwotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3dpemFyZHMvTmV3SW5pdGlhbGl6ZXJXaXphcmQuamF2YQpAQCAtMCwwICsxLDE1MyBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnVpLndpemFyZHM7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTEgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5jb21tYW5kcy5BYnN0cmFjdEhhbmRsZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5jb21tYW5kcy5FeGVjdXRpb25FdmVudDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLmNvbW1hbmRzLkV4ZWN1dGlvbkV4Y2VwdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLmNvbW1hbmRzLklIYW5kbGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkRlbGVnYXRpbmdXcmFwcGVySXRlbVByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlN0cnVjdHVyZWRTZWxlY3Rpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uud2l6YXJkLldpemFyZERpYWxvZzsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuU1RFTVVSSTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLklkZW50aWZpYWJsZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuTW9kaWZpZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLkRpc2Vhc2VNb2RlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuSW5pdGlhbGl6ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnVpLkFjdGl2YXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5JV29ya2JlbmNoV2luZG93OworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLmhhbmRsZXJzLkhhbmRsZXJVdGlsOworCisvKioKKyAqIFRoaXMgY2xhc3MgaXMgYSB7QGxpbmsgTmV3SWRlbnRpZmlhYmxlV2l6YXJkfSBmb3IgdGhhdCBjcmVhdGVzIG5ldyBTVEVNCisgKiB7QGxpbmsgTW9kaWZpZXJ9cy4KKyAqLworcHVibGljIGNsYXNzIE5ld0luaXRpYWxpemVyV2l6YXJkIGV4dGVuZHMgTmV3SWRlbnRpZmlhYmxlV2l6YXJkIHsKKworCS8qKgorCSAqIFRoaXMgaXMgdGhlIHtAbGluayBJZGVudGlmaWFibGV9IGZvciB3aGljaCB0aGUgd2l6YXJkIGlzIGNyZWF0aW5nIGEKKwkgKiB7QGxpbmsgTW9kaWZpZXJ9LgorCSAqLworCXByaXZhdGUgRGlzZWFzZU1vZGVsIHRhcmdldDsKKworCXByb3RlY3RlZCBOZXdJbml0aWFsaXplclBhZ2UgbmV3SW5pdGlhbGl6ZXJQYWdlOworCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnVpLndpemFyZHMuTmV3SWRlbnRpZmlhYmxlV2l6YXJkI2dldFdpemFyZFRpdGxlKCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgU3RyaW5nIGdldFdpemFyZFRpdGxlKCkgeworCQlyZXR1cm4gRGlzZWFzZVdpemFyZE1lc3NhZ2VzLmdldFN0cmluZygiTkluaXRpYWxpemVyV2l6LndpemFyZF90aXRsZSIpOyAvLyROT04tTkxTLTEkCisJfQorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnVpLndpemFyZHMuTmV3SWRlbnRpZmlhYmxlV2l6YXJkI2NyZWF0ZU5ld0lkZW50aWZpYWJsZVBhZ2UoKQorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCBOZXdJZGVudGlmaWFibGVQYWdlIGNyZWF0ZU5ld0lkZW50aWZpYWJsZVBhZ2UoKSB7CisJCW5ld0luaXRpYWxpemVyUGFnZSA9IG5ldyBOZXdJbml0aWFsaXplclBhZ2UodGFyZ2V0KTsKKwkJLy8gVE9ETyBzZXRIZWxwQ29udGV4dElkKCJvcmcuZWNsaXBzZS5zdGVtLmRvYy5uZXdtb2RpZmllcl9jb250ZXh0aWQiKTsKKworCQlyZXR1cm4gbmV3SW5pdGlhbGl6ZXJQYWdlOworCX0KKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS51aS53aXphcmRzLk5ld0lkZW50aWZpYWJsZVdpemFyZCNjcmVhdGVEdWJsaW5Db3JlUGFnZSgpCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIER1YmxpbkNvcmVQYWdlIGNyZWF0ZUR1YmxpbkNvcmVQYWdlKCkgeworCQlyZXR1cm4gbmV3IER1YmxpbkNvcmVQYWdlKCkgeworCQkJQE92ZXJyaWRlCisJCQlwcm90ZWN0ZWQgdm9pZCBpbml0aWFsaXplRENBdHRyaWJ1dGVzKCkgeworCQkJCXN1cGVyLmluaXRpYWxpemVEQ0F0dHJpYnV0ZXMoKTsKKworCQkJCWZvcm1hdC5zZXRUZXh0KFN0YW5kYXJkUGFja2FnZS5lTlNfVVJJKTsKKwkJCQlmb3JtYXQuc2V0RW5hYmxlZChmYWxzZSk7CisJCQkJdHlwZS5zZXRUZXh0KFNURU1VUkkuY3JlYXRlVHlwZVVSSSgiSW5pdGlhbGl6ZXIiKS50b1N0cmluZygpKTsKKwkJCQl0eXBlLnNldEVuYWJsZWQoZmFsc2UpOworCQkJCXRpdGxlVGV4dEZpZWxkLnNldFRleHQoRGlzZWFzZVdpemFyZE1lc3NhZ2VzCisJCQkJCQkuZ2V0U3RyaW5nKCJkY190aXRsZV9pbml0aWFsaXplciIpKTsKKwkJCQlzb3VyY2Uuc2V0VGV4dChEaXNlYXNlV2l6YXJkTWVzc2FnZXMKKwkJCQkJCS5nZXRTdHJpbmcoImRjX3NvdXJjZV9pbml0aWFsaXplciIpKTsKKwkJCQlkZXNjcmlwdGlvblRleHRGaWVsZC5zZXRUZXh0KERpc2Vhc2VXaXphcmRNZXNzYWdlcworCQkJCQkJLmdldFN0cmluZygiZGNfZGVzY19pbml0aWFsaXplciIpKTsKKwkJCX0KKwkJfTsKKwl9CisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0udWkud2l6YXJkcy5OZXdJZGVudGlmaWFibGVXaXphcmQjY3JlYXRlSWRlbnRpZmlhYmxlKCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgSWRlbnRpZmlhYmxlIGNyZWF0ZUlkZW50aWZpYWJsZSgpIHsKKwkJSW5pdGlhbGl6ZXIgcmV0VmFsdWUgPSBuZXdJbml0aWFsaXplclBhZ2UuZ2V0SW5pdGlhbGl6ZXIoKTsKKworCQlyZXRWYWx1ZS5zZXREdWJsaW5Db3JlKG5ld0R1YmxpbkNvcmVQYWdlLmNyZWF0ZUR1YmxpbkNvcmUoKSk7CisKKwkJcmV0dXJuIHJldFZhbHVlOworCX0KKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS51aS53aXphcmRzLk5ld0lkZW50aWZpYWJsZVdpemFyZCNnZXRTZXJpYWxpemF0aW9uRm9sZGVyTmFtZSgpCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIFN0cmluZyBnZXRTZXJpYWxpemF0aW9uRm9sZGVyTmFtZSgpIHsKKwkJcmV0dXJuIE5ld1NURU1Qcm9qZWN0V2l6YXJkLkRFQ09SQVRPUlNfRk9MREVSX05BTUU7CisJfQorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnVpLndpemFyZHMuTmV3SWRlbnRpZmlhYmxlV2l6YXJkI2dldFNlcmlhbGl6YXRpb25GaWxlTmFtZUV4dGVuc2lvbigpCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIFN0cmluZyBnZXRTZXJpYWxpemF0aW9uRmlsZU5hbWVFeHRlbnNpb24oKSB7CisJCXJldHVybiBTdGFuZGFyZFBhY2thZ2UuZU5BTUU7CisJfQorCisJcHVibGljIHZvaWQgc2V0VGFyZ2V0KGZpbmFsIERpc2Vhc2VNb2RlbCB0YXJnZXQpIHsKKwkJdGhpcy50YXJnZXQgPSB0YXJnZXQ7CisJfQorCisJLyoqCisJICogVGhpcyBjbGFzcyBpcyBhIHtAbGluayBJSGFuZGxlcn0gZm9yIHRoZSBjb21tYW5kIHRoYXQgY3JlYXRlcyBhIG5ldworCSAqIE1vZGlmaWVyV2l6YXJkLgorCSAqLworCXB1YmxpYyBzdGF0aWMgY2xhc3MgTmV3SW5pdGlhbGl6ZXJXaXphcmRDb21tYW5kSGFuZGxlciBleHRlbmRzCisJCQlBYnN0cmFjdEhhbmRsZXIgaW1wbGVtZW50cyBJSGFuZGxlciB7CisKKwkJLyoqCisJCSAqIEBzZWUgb3JnLmVjbGlwc2UuY29yZS5jb21tYW5kcy5BYnN0cmFjdEhhbmRsZXIjZXhlY3V0ZShvcmcuZWNsaXBzZS5jb3JlLmNvbW1hbmRzLkV4ZWN1dGlvbkV2ZW50KQorCQkgKi8KKwkJcHVibGljIE9iamVjdCBleGVjdXRlKGZpbmFsIEV4ZWN1dGlvbkV2ZW50IGV4ZWN1dGlvbkV2ZW50KQorCQkJCXRocm93cyBFeGVjdXRpb25FeGNlcHRpb24geworCQkJSVNlbGVjdGlvbiBzZWxlY3Rpb24gPSBIYW5kbGVyVXRpbAorCQkJCQkuZ2V0Q3VycmVudFNlbGVjdGlvbkNoZWNrZWQoZXhlY3V0aW9uRXZlbnQpOworCQkJRGlzZWFzZU1vZGVsIHRhcmdldCA9IChEaXNlYXNlTW9kZWwpICgoU3RydWN0dXJlZFNlbGVjdGlvbikgc2VsZWN0aW9uKQorCQkJCQkudG9BcnJheSgpWzBdOworCQkJSVdvcmtiZW5jaFdpbmRvdyB3aW5kb3cgPSBIYW5kbGVyVXRpbAorCQkJCQkuZ2V0QWN0aXZlV29ya2JlbmNoV2luZG93Q2hlY2tlZChleGVjdXRpb25FdmVudCk7CisJCQlOZXdJbml0aWFsaXplcldpemFyZCB3aXphcmQgPSBuZXcgTmV3SW5pdGlhbGl6ZXJXaXphcmQoKTsKKwkJCVdpemFyZERpYWxvZyB3aXphcmREaWFsb2cgPSBuZXcgU1RFTVdpemFyZERpYWxvZyh3aW5kb3cuZ2V0U2hlbGwoKSwKKwkJCQkJd2l6YXJkKTsKKworCQkJd2l6YXJkLnNldFRhcmdldCh0YXJnZXQpOworCQkJd2l6YXJkLmluaXQod2luZG93LmdldFdvcmtiZW5jaCgpLCBTdHJ1Y3R1cmVkU2VsZWN0aW9uLkVNUFRZKTsKKwkJCXdpemFyZERpYWxvZy5vcGVuKCk7CisKKwkJCXJldHVybiBudWxsOworCQl9CisKKwl9CisKK30KZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3dpemFyZHMvU3RhbmRhcmREaXNlYXNlTW9kZWxQcm9wZXJ0eUVkaXRvci5qYXZhIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvd2l6YXJkcy9TdGFuZGFyZERpc2Vhc2VNb2RlbFByb3BlcnR5RWRpdG9yLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDIyNmRkZgotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3dpemFyZHMvU3RhbmRhcmREaXNlYXNlTW9kZWxQcm9wZXJ0eUVkaXRvci5qYXZhCkBAIC0wLDAgKzEsMjY5IEBACisvLyBTdGFuZGFyZERpc2Vhc2VNb2RlbFByb3BlcnR5RWRpdG9yLmphdmEKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS51aS53aXphcmRzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA3LCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGphdmEudXRpbC5NYXA7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRVN0cnVjdHVyYWxGZWF0dXJlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5EaXNlYXNlTW9kZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlNFSVI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlNJOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TSVI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkRGlzZWFzZU1vZGVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZFBhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkU3RvY2hhc3RpY0Rpc2Vhc2VNb2RlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RvY2hhc3RpY0Rpc2Vhc2VNb2RlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnVpLmFkYXB0ZXJzLmRpc2Vhc2Vtb2RlbHByb3BlcnR5ZWRpdG9yLkRpc2Vhc2VNb2RlbFByb3BlcnR5RWRpdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuTW9kaWZ5TGlzdGVuZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlRleHQ7CisKKy8qKgorICogVGhpcyBjbGFzcyBpcyBhIHtAbGluayBDb21wb3NpdGV9IHRoYXQgcHJlc2VudHMgdGhlIHByb3BlcnRpZXMgb2YgYQorICoge0BsaW5rIERpc2Vhc2VNb2RlbH0gZm9yIGVkaXRpbmcuCisgKi8KK3B1YmxpYyBjbGFzcyBTdGFuZGFyZERpc2Vhc2VNb2RlbFByb3BlcnR5RWRpdG9yIGV4dGVuZHMKKwkJRGlzZWFzZU1vZGVsUHJvcGVydHlFZGl0b3IgeworCisJLyoqCisJICogQ3JlYXRlIHRoZSBjb21wb3NpdGUKKwkgKiAKKwkgKiBAcGFyYW0gcGFyZW50CisJICogQHBhcmFtIHN0eWxlCisJICogQHBhcmFtIHByb2plY3RWYWxpZGF0b3IKKwkgKi8KKwlwdWJsaWMgU3RhbmRhcmREaXNlYXNlTW9kZWxQcm9wZXJ0eUVkaXRvcihmaW5hbCBDb21wb3NpdGUgcGFyZW50LAorCQkJZmluYWwgaW50IHN0eWxlLCBmaW5hbCBEaXNlYXNlTW9kZWwgZGlzZWFzZU1vZGVsLAorCQkJZmluYWwgTW9kaWZ5TGlzdGVuZXIgcHJvamVjdFZhbGlkYXRvciwgSVByb2plY3QgcHJvamVjdCkgeworCQlzdXBlcihwYXJlbnQsIHN0eWxlLCBkaXNlYXNlTW9kZWwsIHByb2plY3RWYWxpZGF0b3IsIHByb2plY3QpOworCisJfSAvLyBTdGFuZGFyZERpc2Vhc2VNb2RlbFByb3BlcnR5RWRpdG9yCisKKwkvKioKKwkgKiBAcGFyYW0gZGlzZWFzZU1vZGVsCisJICogICAgICAgICAgICB0aGUge0BsaW5rIERpc2Vhc2VNb2RlbH0gaW5zdGFuY2UgdG8gcG9wdWxhdGUuCisJICovCisJcHVibGljIHZvaWQgcG9wdWxhdGUoZmluYWwgRGlzZWFzZU1vZGVsIGRpc2Vhc2VNb2RlbCkgeworCQlzdXBlci5wb3B1bGF0ZShkaXNlYXNlTW9kZWwpOworCisJCWlmIChkaXNlYXNlTW9kZWwgaW5zdGFuY2VvZiBTdGFuZGFyZERpc2Vhc2VNb2RlbCkgeworCQkJU3RhbmRhcmREaXNlYXNlTW9kZWwgbW9kZWwgPSAoU3RhbmRhcmREaXNlYXNlTW9kZWwpIGRpc2Vhc2VNb2RlbDsKKworCQkJbW9kZWwuc2V0UmVmZXJlbmNlUG9wdWxhdGlvbkRlbnNpdHkoRG91YmxlCisJCQkJCS5wYXJzZURvdWJsZShtYXAKKwkJCQkJCQkuZ2V0KFN0YW5kYXJkUGFja2FnZS5MaXRlcmFscy5TVEFOREFSRF9ESVNFQVNFX01PREVMX19SRUZFUkVOQ0VfUE9QVUxBVElPTl9ERU5TSVRZKQorCQkJCQkJCS5nZXRUZXh0KCkpKTsKKwkJCW1vZGVsLnNldFJvYWROZXR3b3JrSW5mZWN0aW91c1Byb3BvcnRpb24oRG91YmxlCisJCQkJCS5wYXJzZURvdWJsZShtYXAKKwkJCQkJCQkuZ2V0KFN0YW5kYXJkUGFja2FnZS5MaXRlcmFscy5TVEFOREFSRF9ESVNFQVNFX01PREVMX19ST0FEX05FVFdPUktfSU5GRUNUSU9VU19QUk9QT1JUSU9OKQorCQkJCQkJCS5nZXRUZXh0KCkpKTsKKwkJCW1vZGVsLnNldENoYXJhY3RlcmlzdGljTWl4aW5nRGlzdGFuY2UoRG91YmxlCisJCQkJCS5wYXJzZURvdWJsZShtYXAKKwkJCQkJCQkuZ2V0KFN0YW5kYXJkUGFja2FnZS5MaXRlcmFscy5TVEFOREFSRF9ESVNFQVNFX01PREVMX19DSEFSQUNURVJJU1RJQ19NSVhJTkdfRElTVEFOQ0UpCisJCQkJCQkJLmdldFRleHQoKSkpOworCQl9CisKKwkJaWYgKGRpc2Vhc2VNb2RlbCBpbnN0YW5jZW9mIFN0b2NoYXN0aWNEaXNlYXNlTW9kZWwpIHsKKwkJCVN0b2NoYXN0aWNEaXNlYXNlTW9kZWwgbW9kZWwgPSAoU3RvY2hhc3RpY0Rpc2Vhc2VNb2RlbCkgZGlzZWFzZU1vZGVsOworCisJCQltb2RlbC5zZXRTZWVkKExvbmcucGFyc2VMb25nKG1hcC5nZXQoCisJCQkJCVN0YW5kYXJkUGFja2FnZS5MaXRlcmFscy5TVE9DSEFTVElDX0RJU0VBU0VfTU9ERUxfX1NFRUQpCisJCQkJCS5nZXRUZXh0KCkpKTsKKwkJfQorCisJCWlmIChkaXNlYXNlTW9kZWwgaW5zdGFuY2VvZiBTdGFuZGFyZFN0b2NoYXN0aWNEaXNlYXNlTW9kZWwpIHsKKwkJCVN0YW5kYXJkU3RvY2hhc3RpY0Rpc2Vhc2VNb2RlbCBtb2RlbCA9IChTdGFuZGFyZFN0b2NoYXN0aWNEaXNlYXNlTW9kZWwpIGRpc2Vhc2VNb2RlbDsKKworCQkJbW9kZWwuc2V0R2FpbihEb3VibGUKKwkJCQkJLnBhcnNlRG91YmxlKG1hcAorCQkJCQkJCS5nZXQoU3RhbmRhcmRQYWNrYWdlLkxpdGVyYWxzLlNUQU5EQVJEX1NUT0NIQVNUSUNfRElTRUFTRV9NT0RFTF9fR0FJTikKKwkJCQkJCQkuZ2V0VGV4dCgpKSk7CisJCX0KKworCQlpZiAoZGlzZWFzZU1vZGVsIGluc3RhbmNlb2YgU0kpIHsKKwkJCVNJIG1vZGVsID0gKFNJKSBkaXNlYXNlTW9kZWw7CisKKwkJCW1vZGVsLnNldFRyYW5zbWlzc2lvblJhdGUoRG91YmxlLnBhcnNlRG91YmxlKG1hcC5nZXQoCisJCQkJCVN0YW5kYXJkUGFja2FnZS5MaXRlcmFscy5TSV9fVFJBTlNNSVNTSU9OX1JBVEUpLmdldFRleHQoKSkpOworCQkJbW9kZWwuc2V0Tm9uTGluZWFyaXR5Q29lZmZpY2llbnQoRG91YmxlLnBhcnNlRG91YmxlKG1hcC5nZXQoCisJCQkJCVN0YW5kYXJkUGFja2FnZS5MaXRlcmFscy5TSV9fTk9OX0xJTkVBUklUWV9DT0VGRklDSUVOVCkKKwkJCQkJLmdldFRleHQoKSkpOworCQkJbW9kZWwuc2V0UmVjb3ZlcnlSYXRlKERvdWJsZS5wYXJzZURvdWJsZShtYXAuZ2V0KAorCQkJCQlTdGFuZGFyZFBhY2thZ2UuTGl0ZXJhbHMuU0lfX1JFQ09WRVJZX1JBVEUpLmdldFRleHQoKSkpOworCQkJbW9kZWwuc2V0SW5mZWN0aW91c01vcnRhbGl0eVJhdGUoRG91YmxlLnBhcnNlRG91YmxlKG1hcC5nZXQoCisJCQkJCVN0YW5kYXJkUGFja2FnZS5MaXRlcmFscy5TSV9fSU5GRUNUSU9VU19NT1JUQUxJVFlfUkFURSkKKwkJCQkJLmdldFRleHQoKSkpOworCQl9CisKKwkJaWYgKGRpc2Vhc2VNb2RlbCBpbnN0YW5jZW9mIFNJUikgeworCQkJU0lSIG1vZGVsID0gKFNJUikgZGlzZWFzZU1vZGVsOworCisJCQltb2RlbC5zZXRJbW11bml0eUxvc3NSYXRlKERvdWJsZQorCQkJCQkucGFyc2VEb3VibGUobWFwLmdldCgKKwkJCQkJCQlTdGFuZGFyZFBhY2thZ2UuTGl0ZXJhbHMuU0lSX19JTU1VTklUWV9MT1NTX1JBVEUpCisJCQkJCQkJLmdldFRleHQoKSkpOworCQl9CisKKwkJaWYgKGRpc2Vhc2VNb2RlbCBpbnN0YW5jZW9mIFNFSVIpIHsKKwkJCVNFSVIgbW9kZWwgPSAoU0VJUikgZGlzZWFzZU1vZGVsOworCisJCQltb2RlbC5zZXRJbmN1YmF0aW9uUmF0ZShEb3VibGUucGFyc2VEb3VibGUobWFwLmdldCgKKwkJCQkJU3RhbmRhcmRQYWNrYWdlLkxpdGVyYWxzLlNFSVJfX0lOQ1VCQVRJT05fUkFURSkuZ2V0VGV4dCgpKSk7CisJCX0KKwl9IC8vIHBvcHVsYXRlCisKKwkvKioKKwkgKiBAcmV0dXJuIDxjb2RlPnRydWU8L2NvZGU+IGlmIHRoZSBjb250ZW50cyBhcmUgdmFsaWQsIDxjb2RlPmZhbHNlPC9jb2RlPgorCSAqICAgICAgICAgb3RoZXJ3aXNlLgorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBib29sZWFuIHZhbGlkYXRlKCkgeworCQlpZiAoIXN1cGVyLnZhbGlkYXRlKCkpIHsKKwkJCXJldHVybiBmYWxzZTsKKwkJfQorCisJCVRleHQgdGV4dDsKKworCQkvLyBDaGFyYWN0ZXJpc3RpYyBNaXhpbmcgRGlzdGFuY2UKKwkJdGV4dCA9IG1hcAorCQkJCS5nZXQoU3RhbmRhcmRQYWNrYWdlLkxpdGVyYWxzLlNUQU5EQVJEX0RJU0VBU0VfTU9ERUxfX0NIQVJBQ1RFUklTVElDX01JWElOR19ESVNUQU5DRSk7CisJCWlmICh0ZXh0ICE9IG51bGwpIHsKKwkJCWlmICh0ZXh0LmdldFRleHQoKS5lcXVhbHMoIiIpKSB7CisJCQkJZXJyb3JNZXNzYWdlID0gRGlzZWFzZVdpemFyZE1lc3NhZ2VzLmdldFN0cmluZygiTkRpeldpekVycjI0Iik7IC8vJE5PTi1OTFMtMSQKKwkJCQlyZXR1cm4gZmFsc2U7CisJCQl9IGVsc2UgaWYgKCFpc1ZhbGlkVmFsdWUodGV4dC5nZXRUZXh0KCksIDAuMCkpIHsKKwkJCQllcnJvck1lc3NhZ2UgPSBEaXNlYXNlV2l6YXJkTWVzc2FnZXMuZ2V0U3RyaW5nKCJORGl6V2l6RXJyMjUiKTsgLy8kTk9OLU5MUy0xJAorCQkJCXJldHVybiBmYWxzZTsKKwkJCX0KKwkJfQorCisJCS8vIFJlZmVyZW5jZSBQb3B1bGF0aW9uIERlbnNpdHkKKwkJdGV4dCA9IG1hcAorCQkJCS5nZXQoU3RhbmRhcmRQYWNrYWdlLkxpdGVyYWxzLlNUQU5EQVJEX0RJU0VBU0VfTU9ERUxfX1JFRkVSRU5DRV9QT1BVTEFUSU9OX0RFTlNJVFkpOworCQlpZiAodGV4dCAhPSBudWxsKSB7CisJCQlpZiAodGV4dC5nZXRUZXh0KCkuZXF1YWxzKCIiKSkgeworCQkJCWVycm9yTWVzc2FnZSA9IERpc2Vhc2VXaXphcmRNZXNzYWdlcy5nZXRTdHJpbmcoIk5EaXpXaXpFcnIyNiIpOyAvLyROT04tTkxTLTEkCisJCQkJcmV0dXJuIGZhbHNlOworCQkJfSBlbHNlIGlmICghaXNWYWxpZFZhbHVlKHRleHQuZ2V0VGV4dCgpLCAwLjApKSB7CisJCQkJZXJyb3JNZXNzYWdlID0gRGlzZWFzZVdpemFyZE1lc3NhZ2VzLmdldFN0cmluZygiTkRpeldpekVycjI3Iik7IC8vJE5PTi1OTFMtMSQKKwkJCQlyZXR1cm4gZmFsc2U7CisJCQl9CisJCX0KKworCQkvLyBSb2FkIE5ldHdvcmsgSW5mZWN0aW91cyBQcm9wb3J0aW9uCisJCXRleHQgPSBtYXAKKwkJCQkuZ2V0KFN0YW5kYXJkUGFja2FnZS5MaXRlcmFscy5TVEFOREFSRF9ESVNFQVNFX01PREVMX19ST0FEX05FVFdPUktfSU5GRUNUSU9VU19QUk9QT1JUSU9OKTsKKwkJaWYgKHRleHQgIT0gbnVsbCkgeworCQkJaWYgKHRleHQuZ2V0VGV4dCgpLmVxdWFscygiIikpIHsKKwkJCQllcnJvck1lc3NhZ2UgPSBEaXNlYXNlV2l6YXJkTWVzc2FnZXMuZ2V0U3RyaW5nKCJORGl6V2l6RXJyMjgiKTsgLy8kTk9OLU5MUy0xJAorCQkJCXJldHVybiBmYWxzZTsKKwkJCX0gZWxzZSBpZiAoIWlzVmFsaWRWYWx1ZSh0ZXh0LmdldFRleHQoKSwgMC4wKSkgeworCQkJCWVycm9yTWVzc2FnZSA9IERpc2Vhc2VXaXphcmRNZXNzYWdlcy5nZXRTdHJpbmcoIk5EaXpXaXpFcnIyOSIpOyAvLyROT04tTkxTLTEkCisJCQkJcmV0dXJuIGZhbHNlOworCQkJfQorCQl9CisKKwkJLy8gU3RvY2hhc3RpY0Rpc2Vhc2VNb2RlbCBTZWVkCisJCXRleHQgPSBtYXAuZ2V0KFN0YW5kYXJkUGFja2FnZS5MaXRlcmFscy5TVE9DSEFTVElDX0RJU0VBU0VfTU9ERUxfX1NFRUQpOworCQlpZiAodGV4dCAhPSBudWxsKSB7CisJCQlpZiAodGV4dC5nZXRUZXh0KCkuZXF1YWxzKCIiKSkgeworCQkJCWVycm9yTWVzc2FnZSA9IERpc2Vhc2VXaXphcmRNZXNzYWdlcy5nZXRTdHJpbmcoIk5EaXpXaXpFcnIzMCIpOyAvLyROT04tTkxTLTEkCisJCQkJcmV0dXJuIGZhbHNlOworCQkJfQorCQl9CisKKwkJLy8gU3RhbmRhcmRTdG9jaGFzdGljRGlzZWFzZU1vZGVsIEdhaW4KKwkJdGV4dCA9IG1hcC5nZXQoU3RhbmRhcmRQYWNrYWdlLkxpdGVyYWxzLlNUQU5EQVJEX1NUT0NIQVNUSUNfRElTRUFTRV9NT0RFTF9fR0FJTik7CisJCWlmICh0ZXh0ICE9IG51bGwpIHsKKwkJCWlmICh0ZXh0LmdldFRleHQoKS5lcXVhbHMoIiIpKSB7CisJCQkJZXJyb3JNZXNzYWdlID0gRGlzZWFzZVdpemFyZE1lc3NhZ2VzLmdldFN0cmluZygiTkRpeldpekVycjMxIik7IC8vJE5PTi1OTFMtMSQKKwkJCQlyZXR1cm4gZmFsc2U7CisJCQl9CisJCX0KKworCQkvLyBUcmFuc21pc3Npb24gUmF0ZQorCQl0ZXh0ID0gbWFwLmdldChTdGFuZGFyZFBhY2thZ2UuTGl0ZXJhbHMuU0lfX1RSQU5TTUlTU0lPTl9SQVRFKTsKKwkJaWYgKHRleHQgIT0gbnVsbCkgeworCQkJaWYgKHRleHQuZ2V0VGV4dCgpLmVxdWFscygiIikpIHsKKwkJCQllcnJvck1lc3NhZ2UgPSBEaXNlYXNlV2l6YXJkTWVzc2FnZXMuZ2V0U3RyaW5nKCJORGl6V2l6RXJyNiIpOyAvLyROT04tTkxTLTEkCisJCQkJcmV0dXJuIGZhbHNlOworCQkJfSBlbHNlIGlmICghaXNWYWxpZFZhbHVlKHRleHQuZ2V0VGV4dCgpLCAwLjApKSB7CisJCQkJZXJyb3JNZXNzYWdlID0gRGlzZWFzZVdpemFyZE1lc3NhZ2VzLmdldFN0cmluZygiTkRpeldpekVycjciKTsgLy8kTk9OLU5MUy0xJAorCQkJCXJldHVybiBmYWxzZTsKKwkJCX0KKwkJfQorCisJCS8vIE5vbi1MaW5lYXJpdHkgQ29lZmZpY2llbnQKKwkJdGV4dCA9IG1hcC5nZXQoU3RhbmRhcmRQYWNrYWdlLkxpdGVyYWxzLlNJX19OT05fTElORUFSSVRZX0NPRUZGSUNJRU5UKTsKKwkJaWYgKHRleHQgIT0gbnVsbCkgeworCQkJaWYgKHRleHQuZ2V0VGV4dCgpLmVxdWFscygiIikpIHsKKwkJCQllcnJvck1lc3NhZ2UgPSBEaXNlYXNlV2l6YXJkTWVzc2FnZXMuZ2V0U3RyaW5nKCJORGl6V2l6RXJyOCIpOyAvLyROT04tTkxTLTEkCisJCQkJcmV0dXJuIGZhbHNlOworCQkJfSBlbHNlIGlmICghaXNWYWxpZFZhbHVlKHRleHQuZ2V0VGV4dCgpLCAwLjApKSB7CisJCQkJZXJyb3JNZXNzYWdlID0gRGlzZWFzZVdpemFyZE1lc3NhZ2VzLmdldFN0cmluZygiTkRpeldpekVycjkiKTsgLy8kTk9OLU5MUy0xJAorCQkJCXJldHVybiBmYWxzZTsKKwkJCX0KKwkJfQorCisJCS8vIEluZmVjdGlvdXMgUmVjb3ZlcnkgUmF0ZQorCQl0ZXh0ID0gbWFwLmdldChTdGFuZGFyZFBhY2thZ2UuTGl0ZXJhbHMuU0lfX1JFQ09WRVJZX1JBVEUpOworCQlpZiAodGV4dCAhPSBudWxsKSB7CisJCQlpZiAodGV4dC5nZXRUZXh0KCkuZXF1YWxzKCIiKSkgeworCQkJCWVycm9yTWVzc2FnZSA9IERpc2Vhc2VXaXphcmRNZXNzYWdlcy5nZXRTdHJpbmcoIk5EaXpXaXpFcnIxMCIpOyAvLyROT04tTkxTLTEkCisJCQkJcmV0dXJuIGZhbHNlOworCQkJfSBlbHNlIGlmICghaXNWYWxpZFZhbHVlKHRleHQuZ2V0VGV4dCgpLCAwLjApKSB7CisJCQkJZXJyb3JNZXNzYWdlID0gRGlzZWFzZVdpemFyZE1lc3NhZ2VzLmdldFN0cmluZygiTkRpeldpekVycjExIik7IC8vJE5PTi1OTFMtMSQKKwkJCQlyZXR1cm4gZmFsc2U7CisJCQl9CisJCX0KKworCQkvLyBJbmZlY3Rpb3VzIE1vcnRhbGl0eSBSYXRlCisJCXRleHQgPSBtYXAuZ2V0KFN0YW5kYXJkUGFja2FnZS5MaXRlcmFscy5TSV9fSU5GRUNUSU9VU19NT1JUQUxJVFlfUkFURSk7CisJCWlmICh0ZXh0ICE9IG51bGwpIHsKKwkJCWlmICh0ZXh0LmdldFRleHQoKS5lcXVhbHMoIiIpKSB7CisJCQkJZXJyb3JNZXNzYWdlID0gRGlzZWFzZVdpemFyZE1lc3NhZ2VzLmdldFN0cmluZygiTkRpeldpekVycjEyIik7IC8vJE5PTi1OTFMtMSQKKwkJCQlyZXR1cm4gZmFsc2U7CisJCQl9IGVsc2UgaWYgKCFpc1ZhbGlkVmFsdWUodGV4dC5nZXRUZXh0KCksIDAuMCkpIHsKKwkJCQllcnJvck1lc3NhZ2UgPSBEaXNlYXNlV2l6YXJkTWVzc2FnZXMuZ2V0U3RyaW5nKCJORGl6V2l6RXJyMTMiKTsgLy8kTk9OLU5MUy0xJAorCQkJCXJldHVybiBmYWxzZTsKKwkJCX0KKwkJfQorCisJCS8vIEltbXVuaXR5IExvc3MgUmF0ZQorCQl0ZXh0ID0gbWFwLmdldChTdGFuZGFyZFBhY2thZ2UuTGl0ZXJhbHMuU0lSX19JTU1VTklUWV9MT1NTX1JBVEUpOworCQlpZiAodGV4dCAhPSBudWxsKSB7CisJCQlpZiAodGV4dC5nZXRUZXh0KCkuZXF1YWxzKCIiKSkgeworCQkJCWVycm9yTWVzc2FnZSA9IERpc2Vhc2VXaXphcmRNZXNzYWdlcy5nZXRTdHJpbmcoIk5EaXpXaXpFcnIxNiIpOyAvLyROT04tTkxTLTEkCisJCQkJcmV0dXJuIGZhbHNlOworCQkJfSBlbHNlIGlmICghaXNWYWxpZFZhbHVlKHRleHQuZ2V0VGV4dCgpLCAwLjApKSB7CisJCQkJZXJyb3JNZXNzYWdlID0gRGlzZWFzZVdpemFyZE1lc3NhZ2VzLmdldFN0cmluZygiTkRpeldpekVycjE3Iik7IC8vJE5PTi1OTFMtMSQKKwkJCQlyZXR1cm4gZmFsc2U7CisJCQl9CisJCX0KKworCQkvLyBJbmN1YmF0aW9uIFJhdGUKKwkJdGV4dCA9IG1hcC5nZXQoU3RhbmRhcmRQYWNrYWdlLkxpdGVyYWxzLlNFSVJfX0lOQ1VCQVRJT05fUkFURSk7CisJCWlmICh0ZXh0ICE9IG51bGwpIHsKKwkJCWlmICh0ZXh0LmdldFRleHQoKS5lcXVhbHMoIiIpKSB7CisJCQkJZXJyb3JNZXNzYWdlID0gRGlzZWFzZVdpemFyZE1lc3NhZ2VzLmdldFN0cmluZygiTkRpeldpekVycjE4Iik7IC8vJE5PTi1OTFMtMSQKKwkJCQlyZXR1cm4gZmFsc2U7CisJCQl9IGVsc2UgaWYgKCFpc1ZhbGlkVmFsdWUodGV4dC5nZXRUZXh0KCksIDAuMCkpIHsKKwkJCQllcnJvck1lc3NhZ2UgPSBEaXNlYXNlV2l6YXJkTWVzc2FnZXMuZ2V0U3RyaW5nKCJORGl6V2l6RXJyMTkiKTsgLy8kTk9OLU5MUy0xJAorCQkJCXJldHVybiBmYWxzZTsKKwkJCX0KKwkJfQorCisJCXJldHVybiB0cnVlOworCX0gLy8gdmFsaWRhdGUKK30gLy8gU3RhbmRhcmREaXNlYXNlTW9kZWxQcm9wZXJ0eUVkaXRvcgpkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvd2l6YXJkcy9TdGFuZGFyZERpc2Vhc2VNb2RlbFByb3BlcnR5RWRpdG9yQWRhcHRlci5qYXZhIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvd2l6YXJkcy9TdGFuZGFyZERpc2Vhc2VNb2RlbFByb3BlcnR5RWRpdG9yQWRhcHRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY2MTA2NDMKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS93aXphcmRzL1N0YW5kYXJkRGlzZWFzZU1vZGVsUHJvcGVydHlFZGl0b3JBZGFwdGVyLmphdmEKQEAgLTAsMCArMSwzMSBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnVpLndpemFyZHM7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5EaXNlYXNlTW9kZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS51aS5hZGFwdGVycy5kaXNlYXNlbW9kZWxwcm9wZXJ0eWVkaXRvci5EaXNlYXNlTW9kZWxQcm9wZXJ0eUVkaXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnVpLmFkYXB0ZXJzLmRpc2Vhc2Vtb2RlbHByb3BlcnR5ZWRpdG9yLkRpc2Vhc2VNb2RlbFByb3BlcnR5RWRpdG9yQWRhcHRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLk1vZGlmeUxpc3RlbmVyOworCitwdWJsaWMgY2xhc3MgU3RhbmRhcmREaXNlYXNlTW9kZWxQcm9wZXJ0eUVkaXRvckFkYXB0ZXIgZXh0ZW5kcworCQlEaXNlYXNlTW9kZWxQcm9wZXJ0eUVkaXRvckFkYXB0ZXIgeworCisJQE92ZXJyaWRlCisJcHVibGljIERpc2Vhc2VNb2RlbFByb3BlcnR5RWRpdG9yIGNyZWF0ZURpc2Vhc2VNb2RlbFByb3BlcnR5RWRpdG9yKAorCQkJZmluYWwgRGlzZWFzZU1vZGVsUHJvcGVydHlDb21wb3NpdGUgZGlzZWFzZU1vZGVsUHJvcGVydHlDb21wb3NpdGUsCisJCQlmaW5hbCBpbnQgc3R5bGUsIGZpbmFsIE1vZGlmeUxpc3RlbmVyIHByb2plY3RWYWxpZGF0b3IsIElQcm9qZWN0IHByb2plY3QpIHsKKwkJcmV0dXJuIG5ldyBTdGFuZGFyZERpc2Vhc2VNb2RlbFByb3BlcnR5RWRpdG9yKAorCQkJCWRpc2Vhc2VNb2RlbFByb3BlcnR5Q29tcG9zaXRlLCBzdHlsZSwKKwkJCQkoRGlzZWFzZU1vZGVsKSBnZXRUYXJnZXQoKSwgcHJvamVjdFZhbGlkYXRvciwgcHJvamVjdCk7CisJfSAvLyBjcmVhdGVEaXNlYXNlTW9kZWxQcm9wZXJ0eUVkaXRvcgorCit9IC8vIFN0YW5kYXJkRGlzZWFzZU1vZGVsUHJvcGVydHlFZGl0b3JBZGFwdGVyCmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS93aXphcmRzL1N0YW5kYXJkRGlzZWFzZU1vZGVsUHJvcGVydHlFZGl0b3JBZGFwdGVyRmFjdG9yeS5qYXZhIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvd2l6YXJkcy9TdGFuZGFyZERpc2Vhc2VNb2RlbFByb3BlcnR5RWRpdG9yQWRhcHRlckZhY3RvcnkuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42OTg2NzZmCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvd2l6YXJkcy9TdGFuZGFyZERpc2Vhc2VNb2RlbFByb3BlcnR5RWRpdG9yQWRhcHRlckZhY3RvcnkuamF2YQpAQCAtMCwwICsxLDM4IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0udWkud2l6YXJkczsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuQWRhcHRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQudXRpbC5TdGFuZGFyZEFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udWkuYWRhcHRlcnMuZGlzZWFzZW1vZGVscHJvcGVydHllZGl0b3IuRGlzZWFzZU1vZGVsUHJvcGVydHlFZGl0b3JBZGFwdGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udWkuYWRhcHRlcnMuZGlzZWFzZW1vZGVscHJvcGVydHllZGl0b3IuRGlzZWFzZU1vZGVsUHJvcGVydHlFZGl0b3JBZGFwdGVyRmFjdG9yeTsKKworcHVibGljIGNsYXNzIFN0YW5kYXJkRGlzZWFzZU1vZGVsUHJvcGVydHlFZGl0b3JBZGFwdGVyRmFjdG9yeSBleHRlbmRzCisJCVN0YW5kYXJkQWRhcHRlckZhY3RvcnkgaW1wbGVtZW50cworCQlEaXNlYXNlTW9kZWxQcm9wZXJ0eUVkaXRvckFkYXB0ZXJGYWN0b3J5IHsKKworCXB1YmxpYyBTdGFuZGFyZERpc2Vhc2VNb2RlbFByb3BlcnR5RWRpdG9yQWRhcHRlckZhY3RvcnkoKSB7CisJCXN1cGVyKCk7CisJCURpc2Vhc2VNb2RlbFByb3BlcnR5RWRpdG9yQWRhcHRlckZhY3RvcnkuSU5TVEFOQ0UKKwkJCQkuYWRkQWRhcHRlckZhY3RvcnkodGhpcyk7CisJfQorCisJQE92ZXJyaWRlCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlU3RhbmRhcmREaXNlYXNlTW9kZWxBZGFwdGVyKCkgeworCQlyZXR1cm4gbmV3IFN0YW5kYXJkRGlzZWFzZU1vZGVsUHJvcGVydHlFZGl0b3JBZGFwdGVyKCk7CisJfQorCisJcHVibGljIGJvb2xlYW4gaXNGYWN0b3J5Rm9yVHlwZShPYmplY3QgdHlwZSkgeworCQlyZXR1cm4gdHlwZSA9PSBEaXNlYXNlTW9kZWxQcm9wZXJ0eUVkaXRvckFkYXB0ZXIuY2xhc3MKKwkJCQl8fCBzdXBlci5pc0ZhY3RvcnlGb3JUeXBlKHR5cGUpOworCX0KKworfSAvLyBTdGFuZGFyZERpc2Vhc2VNb2RlbFByb3BlcnR5RWRpdG9yQWRhcHRlckZhY3RvcnkKZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3dpemFyZHMvU3RhbmRhcmRQcm9wZXJ0eVN0cmluZ1Byb3ZpZGVyQWRhcHRlckZhY3RvcnkuamF2YSBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3dpemFyZHMvU3RhbmRhcmRQcm9wZXJ0eVN0cmluZ1Byb3ZpZGVyQWRhcHRlckZhY3RvcnkuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZDhlNTkxCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvd2l6YXJkcy9TdGFuZGFyZFByb3BlcnR5U3RyaW5nUHJvdmlkZXJBZGFwdGVyRmFjdG9yeS5qYXZhCkBAIC0wLDAgKzEsMTE3IEBACisvLyBTdGFuZGFyZFByb3BlcnR5U3RyaW5nUHJvdmlkZXJBZGFwdGVyRmFjdG9yeS5qYXZhCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0udWkud2l6YXJkczsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LkFkYXB0ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVTdHJ1Y3R1cmFsRmVhdHVyZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbVByb3BlcnR5RGVzY3JpcHRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuRGlzZWFzZU1vZGVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC51dGlsLlN0YW5kYXJkQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS51aS5hZGFwdGVycy5wcm9wZXJ0eXN0cmluZ3MuUHJvcGVydHlTdHJpbmdQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnVpLmFkYXB0ZXJzLnByb3BlcnR5c3RyaW5ncy5Qcm9wZXJ0eVN0cmluZ1Byb3ZpZGVyQWRhcHRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnVpLmFkYXB0ZXJzLnByb3BlcnR5c3RyaW5ncy5Qcm9wZXJ0eVN0cmluZ1Byb3ZpZGVyQWRhcHRlckZhY3Rvcnk7CisKKy8qKgorICogVGhpcyBjbGFzcyBpcyB1c2VkIHRvIE5MUydkIHN0cmluZ3MgZm9yIHtAbGluayBEaXNlYXNlTW9kZWx9IHByb3BlcnRpZXMuIAorICovCitwdWJsaWMgY2xhc3MgU3RhbmRhcmRQcm9wZXJ0eVN0cmluZ1Byb3ZpZGVyQWRhcHRlckZhY3RvcnkgZXh0ZW5kcworCQlTdGFuZGFyZEFkYXB0ZXJGYWN0b3J5IGltcGxlbWVudHMgUHJvcGVydHlTdHJpbmdQcm92aWRlckFkYXB0ZXJGYWN0b3J5IHsKKworCQorCVByb3BlcnR5U3RyaW5nUHJvdmlkZXJBZGFwdGVyIGFkYXB0ZXIgPSBudWxsOworCisJLyoqCisJICogRGVmYXVsdCBDb25zdHJ1Y3RvcgorCSAqLworCXB1YmxpYyBTdGFuZGFyZFByb3BlcnR5U3RyaW5nUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSgpIHsKKwkJc3VwZXIoKTsKKwkJUHJvcGVydHlTdHJpbmdQcm92aWRlckFkYXB0ZXJGYWN0b3J5LklOU1RBTkNFLmFkZEFkYXB0ZXJGYWN0b3J5KHRoaXMpOworCX0KKwkKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LmltcGwuQWRhcHRlckZhY3RvcnlJbXBsI2lzRmFjdG9yeUZvclR5cGUoamF2YS5sYW5nLk9iamVjdCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgYm9vbGVhbiBpc0ZhY3RvcnlGb3JUeXBlKE9iamVjdCB0eXBlKSB7CisJCXJldHVybiAgc3VwZXIuaXNGYWN0b3J5Rm9yVHlwZSh0eXBlKSB8fCB0eXBlID09IFByb3BlcnR5U3RyaW5nUHJvdmlkZXIuY2xhc3M7CisJfQorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQudXRpbC5TdGFuZGFyZEFkYXB0ZXJGYWN0b3J5I2NyZWF0ZURpc2Vhc2VNb2RlbEFkYXB0ZXIoKQorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZURpc2Vhc2VNb2RlbEFkYXB0ZXIoKSB7CisJCS8vIEhhdmUgd2UgY3JlYXRlZCBvbmUgYmVmb3JlPworCQlpZiAoYWRhcHRlciA9PSBudWxsKSB7CisJCQkvLyBObworCQkJYWRhcHRlciA9IG5ldyBTdGFuZGFyZFByb3BlcnR5U3RyaW5nUHJvdmlkZXJBZGFwdGVyKCk7CisJCX0gLy8gaWYgd2UgZGlkbid0IGNyZWF0ZSBvbmUgYmVmb3JlCisJCXJldHVybiBhZGFwdGVyOworCX0gLy8gY3JlYXRlRGlzZWFzZU1vZGVsQWRhcHRlcgorCQorCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLnV0aWwuU3RhbmRhcmRBZGFwdGVyRmFjdG9yeSNjcmVhdGVJbmZlY3RvckFkYXB0ZXIoKQorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZUluZmVjdG9yQWRhcHRlcigpIHsKKwkJLy8gSGF2ZSB3ZSBjcmVhdGVkIG9uZSBiZWZvcmU/CisJCWlmIChhZGFwdGVyID09IG51bGwpIHsKKwkJCS8vIE5vCisJCQlhZGFwdGVyID0gbmV3IFN0YW5kYXJkUHJvcGVydHlTdHJpbmdQcm92aWRlckFkYXB0ZXIoKTsKKwkJfSAvLyBpZiB3ZSBkaWRuJ3QgY3JlYXRlIG9uZSBiZWZvcmUKKwkJcmV0dXJuIGFkYXB0ZXI7CisJfSAvLyBjcmVhdGVEaXNlYXNlTW9kZWxBZGFwdGVyCisKKwkvKioKKwkgKiBUaGlzIGNsYXNzIHJlcHJlc2VudHMgCisJICovCisJcHVibGljIHN0YXRpYyBjbGFzcyBTdGFuZGFyZFByb3BlcnR5U3RyaW5nUHJvdmlkZXJBZGFwdGVyIGV4dGVuZHMKKwkJCVByb3BlcnR5U3RyaW5nUHJvdmlkZXJBZGFwdGVyIHsKKworCQkvKioKKwkJICogQHBhcmFtIGRlc2NyaXB0b3IKKwkJICogQHJldHVybiB0aGUgTkxTJ2QgbmFtZSBvZiB0aGUgcHJvcGVydHkgdG8gZGlzcGxheSB0byB0aGUgdXNlcgorCQkgKi8KKwkJcHVibGljIFN0cmluZyBnZXRQcm9wZXJ0eU5hbWUoSUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IgZGVzY3JpcHRvcikgeworCQkJcmV0dXJuIERpc2Vhc2VXaXphcmRNZXNzYWdlcworCQkJCQkuZ2V0U3RyaW5nKCgoRVN0cnVjdHVyYWxGZWF0dXJlKSBkZXNjcmlwdG9yCisJCQkJCQkJLmdldEZlYXR1cmUobnVsbCkpLmdldE5hbWUoKSk7CisJCX0gLy8gZ2V0UHJvcGVydHlOYW1lCisKKwkJLyoqCisJCSAqIEBwYXJhbSBkZXNjcmlwdG9yCisJCSAqIEByZXR1cm4gdGhlIE5MUydkIHRvb2wgdGlwIHRleHQgdGhhdCBkZXNjcmliZXMgdGhlIHByb3BlcnR5CisJCSAqLworCQlwdWJsaWMgU3RyaW5nIGdldFByb3BlcnR5VG9vbFRpcCgKKwkJCQlJSXRlbVByb3BlcnR5RGVzY3JpcHRvciBkZXNjcmlwdG9yKSB7CisJCQlmaW5hbCBFU3RydWN0dXJhbEZlYXR1cmUgZmVhdHVyZSA9IChFU3RydWN0dXJhbEZlYXR1cmUpIGRlc2NyaXB0b3IKKwkJCQkJLmdldEZlYXR1cmUobnVsbCk7CisJCQlyZXR1cm4gRGlzZWFzZVdpemFyZE1lc3NhZ2VzLmdldFN0cmluZyhmZWF0dXJlLmdldE5hbWUoKQorCQkJCQkrIFRUX1NVRkZJWCk7CisJCX0gLy8gZ2V0UHJvcGVydHlUb29sVGlwCisKKwkJLyoqCisJCSAqIEBwYXJhbSBkZXNjcmlwdG9yCisJCSAqIEByZXR1cm4gdGhlIE5MUydkIHRleHQgdGhhdCByZXByZXNlbnRzIHRoZSB1bml0cyBvZiB0aGUKKwkJICogICAgICAgICBwcm9wZXJ0eQorCQkgKi8KKwkJcHVibGljIFN0cmluZyBnZXRQcm9wZXJ0eVVuaXRzKAorCQkJCUlJdGVtUHJvcGVydHlEZXNjcmlwdG9yIGRlc2NyaXB0b3IpIHsKKwkJCWZpbmFsIEVTdHJ1Y3R1cmFsRmVhdHVyZSBmZWF0dXJlID0gKEVTdHJ1Y3R1cmFsRmVhdHVyZSkgZGVzY3JpcHRvcgorCQkJCQkuZ2V0RmVhdHVyZShudWxsKTsKKwkJCXJldHVybiBEaXNlYXNlV2l6YXJkTWVzc2FnZXMuZ2V0U3RyaW5nKGZlYXR1cmUuZ2V0TmFtZSgpCisJCQkJCSsgVU5JVF9TVUZGSVgpOworCQl9IC8vIGdldFByb3BlcnR5VW5pdHMKKworCX0gLy8gU3RhbmRhcmRQcm9wZXJ0eVN0cmluZ1Byb3ZpZGVyQWRhcHRlcgorfSAvLyBTdGFuZGFyZFByb3BlcnR5U3RyaW5nUHJvdmlkZXJBZGFwdGVyRmFjdG9yeQpkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvd2l6YXJkcy9kaXNlYXNld2l6YXJkbWVzc2FnZXMucHJvcGVydGllcyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3dpemFyZHMvZGlzZWFzZXdpemFyZG1lc3NhZ2VzLnByb3BlcnRpZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmY3M2JjZgotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3dpemFyZHMvZGlzZWFzZXdpemFyZG1lc3NhZ2VzLnByb3BlcnRpZXMKQEAgLTAsMCArMSwyMjcgQEAKKyMgZGlzZWFzZXdpemFyZG1lc3NhZ2VzLnByb3BlcnRpZXMKKyMKKyMvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIyAqIENvcHlyaWdodCAoYykgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyMgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisjICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisjICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyMgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorIyAqCisjICogQ29udHJpYnV0b3JzOgorIyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworIyBOZXcgRGlzZWFzZSBXaXphcmQKKworTkRpc2Vhc2VXaXoud2l6YXJkX3RpdGxlID0gTmV3IERpc2Vhc2UKK05EaXNlYXNlV2l6LnBhZ2VfdGl0bGUgPSBEaXNlYXNlCitORGlzZWFzZVdpei5wYWdlX2Rlc2NyaXB0aW9uID0gRGVmaW5lIGEgbmV3IGRpc2Vhc2UgaW4gYSBwcm9qZWN0LgorTkRpc2Vhc2VXaXouRENfREVTQ1JJUFRJT04gPSBEaXNlYXNlICJ7MH0iCisKKyMgTmV3IEluZmVjdG9yIFdpemFyZAorTkluZmVjdG9yV2l6LndpemFyZF90aXRsZSA9IE5ldyBJbmZlY3Rpb24vSW5vY3VsYXRpb24gUG9pbnQKK05JbmZlY3Rvcldpei5wYWdlX3RpdGxlID0gSW5mZWN0b3IvSW5vY3VsYXRvcgorTkluZmVjdG9yV2l6LnBhZ2VfZGVzY3JpcHRpb24gPSBEZWZpbmUgYSBuZXcgaW5mZWN0aW9uIG9yIGlub2N1bGF0aW9uIHBvaW50IGluIGEgcHJvamVjdC4KK05JbmZlY3Rvcldpei5EQ19ERVNDUklQVElPTiA9IEluZmVjdCB7MH0gInsxfSIgcG9wdWxhdGlvbiBtZW1iZXJzIHdpdGggdGhlIGRpc2Vhc2UgInsyfSIgYXQgdGhlIGxvY2F0aW9uICJ7M30iICh7NH0pLgorTkluZmVjdG9yV2l6LkRDX0RFU0NSSVBUSU9OMiA9IElub2N1bGF0ZSB7MH0gInsxfSIgcGVyY2VudCBvZiBwb3B1bGF0aW9uIGFnYWluc3QgdGhlIGRpc2Vhc2UgInsyfSIgYXQgdGhlIGxvY2F0aW9uICJ7M30iICh7NH0pLgorTkluZmVjdG9yV2l6LkRDX0RFU0NSSVBUSU9OX0ZST01fRklMRSA9IEluZmVjdCBmcm9tIGxvZyBmaWxlcyBhdCB7MH0KK05JbmZlY3Rvcldpei5EQ19ERVNDUklQVElPTjJfRlJPTV9GSUxFID0gSW5vY3VsYXRlIGZyb20gbG9nIGZpbGVzIGF0IHswfQorTkluZmVjdG9yV2l6LmluZmVjdCA9IENyZWF0ZSBhIE5ldyBJbmZlY3RvcgorTkluZmVjdG9yV2l6Lmlub2N1bGF0ZSA9IENyZWF0ZSBhIE5ldyBJbm9jdWxhdG9yCisKKyMgTmV3IEluaXRpYWxpemVyIFdpemFyZAorTkluaXRpYWxpemVyV2l6LndpemFyZF90aXRsZSA9IE5ldyBJbml0aWFsaXplcgorTkluaXRpYWxpemVyV2l6LnBhZ2VfdGl0bGUgPSBJbml0aWFsaXplcgorTkluaXRpYWxpemVyV2l6LnBhZ2VfZGVzY3JpcHRpb24gPSBEZWZpbmUgYSBuZXcgaW5pdGlhbGl6ZXIgaW4gYSBwcm9qZWN0LgorTkluaXRpYWxpemVyV2l6LkRDX0RFU0NSSVBUSU9OID0gSW5pdGlhbGl6ZSBwb3B1bGF0aW9uIG1lbWJlcnMuCisKK05EaXNlYXNlV2l6LmRpc2Vhc2VfZm9sZGVyID0gRGlzZWFzZXMKKworUE1UUF9EZWYgPSAqUE0vVFAgPSBQb3B1bGF0aW9uIE1lbWJlci9UaW1lIFBlcmlvZAorCitwb3B1bGF0aW9uSWRlbnRpZmllciA9IFBvcHVsYXRpb24KK3BvcHVsYXRpb25JZGVudGlmaWVyVFQgPSBUaGUgbmFtZSBvZiB0aGUgcG9wdWxhdGlvbiBpbmZlY3RlZCBieSB0aGlzIGRpc2Vhc2UuIChlLmcuLCBodW1hbikKK3BvcHVsYXRpb25JZGVudGlmaWVyVU5JVCA9IAorCitjaGFyYWN0ZXJpc3RpY01peGluZ0Rpc3RhbmNlID0gQ2hhcmFjdGVyaXN0aWMgTWl4aW5nIERpc3RhbmNlCitjaGFyYWN0ZXJpc3RpY01peGluZ0Rpc3RhbmNlVFQgPSBUaGUgY3V0LW9mZiBkaXN0YW5jZSBhdCB3aGljaCB0d28gcmVnaW9ucyBhcmUgZnVsbHkgbWl4ZWQKK2NoYXJhY3RlcmlzdGljTWl4aW5nRGlzdGFuY2VVTklUID0ga20KKworcm9hZE5ldHdvcmtJbmZlY3Rpb3VzUHJvcG9ydGlvbiA9IFJvYWQuTmV0LkluZi5Qcm9wb3J0aW9uCityb2FkTmV0d29ya0luZmVjdGlvdXNQcm9wb3J0aW9uVFQgPSBUaGUgUm9hZCBOZXR3b3JrIEluZmVjdGlvdXMgUHJvcG9ydGlvbgorcm9hZE5ldHdvcmtJbmZlY3Rpb3VzUHJvcG9ydGlvblVOSVQgPSBmcmFjdGlvbiBwZXIgUm9hZAorCit0aW1lUGVyaW9kID0gVGltZSBQZXJpb2QgKFRQKQordGltZVBlcmlvZFRUID0gVGhlIHRpbWUgcGVyaW9kIGZvciB0aGUgcmF0ZXMgKGUuZy4sIDg2NDAwMDAwbXMgPSAxIGRheSkuCisjdGltZVBlcmlvZFVOSVQgPSBEYXkocykKK3RpbWVQZXJpb2RVTklUID0gbXMKKworZGlzZWFzZU5hbWUgPSBEaXNlYXNlIE5hbWUKK2Rpc2Vhc2VOYW1lVFQgPSBUaGUgbmFtZSBvZiB0aGUgZGlzZWFzZS4gKGUuZy4sIEluZmx1ZW56YSkKK2Rpc2Vhc2VOYW1lVU5JVCA9CisKK3NlZWQgPSBSYW5kb20gU2VlZAorc2VlZFRUID0gU2VlZCBmb3IgdGhlIFJhbmRvbSBOdW1iZXIgR2VuZXJhdG9yCitzZWVkVU5JVCA9CisKK3JhbmRvbUdlbmVyYXRvciA9IFJhbmRvbSBHZW5lcmF0b3IKK3JhbmRvbUdlbmVyYXRvclRUID0gCityYW5kb21HZW5lcmF0b3JVTklUID0gCisKK2dhaW4gPSBSYW5kb20gTm9pc2UgR2FpbgorZ2FpblRUID0gTm9pc2UgYW1wbGl0dWRlIChzaG91bGQgYmUgPH4gLjAxKQorZ2FpblVOSVQgPSAKKworaW5mZWN0aW91c01vcnRhbGl0eSA9IEluZmVjdGlvdXMgTW9ydGFsaXR5ICh4KQoraW5mZWN0aW91c01vcnRhbGl0eVRUID0gVGhlIGZyYWN0aW9uIG9mIHBvcHVsYXRpb24gbWVtYmVycyBpbiB0aGUgSW5mZWN0aW91cyBzdGF0ZSB0aGF0IHdpbGwgdWx0aW1hdGVseSBkaWUuIChlLmcuLCAyKQoraW5mZWN0aW91c01vcnRhbGl0eVVOSVQgPSBmcmFjdGlvbgorCit0cmFuc21pc3Npb25SYXRlID0gVHJhbnNtaXNzaW9uIFJhdGUgKFx1MDNiMikKK3RyYW5zbWlzc2lvblJhdGVUVCA9IFRoZSBudW1iZXIgb2YgcG9wdWxhdGlvbiBtZW1iZXJzIGluIHRoZSBTdXNjZXB0aWJsZSBzdGF0ZSB0aGF0IGJlY29tZSBleHBvc2VkIHBlciBwb3B1bGF0aW9uIG1lbWJlciBpbiB0aGUgSW5mZWN0aW91cyBzdGF0ZS4KK3RyYW5zbWlzc2lvblJhdGVVTklUID0gIAorCisKK3JlZmVyZW5jZVBvcHVsYXRpb25EZW5zaXR5ID0gUmVmZXJlbmNlIFBvcCBEZW5zaXR5CityZWZlcmVuY2VQb3B1bGF0aW9uRGVuc2l0eVRUID0gUG9wIERlbnNpdHkgd2hlcmUgdHJhbnNtaXNzaW9uIHJhdGUgbWVhc3VyZWQKK3JlZmVyZW5jZVBvcHVsYXRpb25EZW5zaXR5VU5JVCA9IFBNL1NRIEtNCisKK25vbkxpbmVhcml0eUNvZWZmaWNpZW50ID0gTm9uLUxpbmVhcml0eSBDb2VmZmljaWVudAorbm9uTGluZWFyaXR5Q29lZmZpY2llbnRUVCA9IEluIGEgbm9ubGluZWFyIG1vZGVsLCB1c3VhbGx5ID4gMS4wICh3aGljaCBjYXB0dXJlcyBzYXR1cmF0aW9uIG9mIHRoZSBpbW11bmUgc3lzdGVtIGZvciBTdXNjZXB0aWJsZSBwb3B1bGF0aW9uIG1lbWJlcnMpLCB0aGUgSW5mZWN0aW91cyB0ZXJtIGlzIHJhaXNlZCB0byB0aGlzIHBvd2VyLiAgCitub25MaW5lYXJpdHlDb2VmZmljaWVudFVOSVQgPSBcdTIyNjUgMC4wIAorCityZWNvdmVyeVJhdGUgPSBJbmZlY3Rpb3VzIFJlY292ZXJ5IFJhdGUgKFx1MDNiMykKK3JlY292ZXJ5UmF0ZVRUID0gVGhlIHJhdGUgYXQgd2hpY2ggcG9wdWxhdGlvbiBtZW1iZXJzIGluIHRoZSBJbmZlY3Rpb3VzIHN0YXRlLCB3aG8gZG8gbm90IGRpZSwgd2lsbCByZWNvdmVyLgorcmVjb3ZlcnlSYXRlVU5JVCA9IFBNL1RQKgorCitpbmZlY3Rpb3VzTW9ydGFsaXR5UmF0ZSA9IEluZmVjdGlvdXMgTW9ydGFsaXR5IFJhdGUgKFx1MDNiYyBpKQoraW5mZWN0aW91c01vcnRhbGl0eVJhdGVUVCA9IFRoZSByYXRlIGF0IHdoaWNoIHBvcHVsYXRpb24gbWVtYmVycyBpbiB0aGUgSW5mZWN0aW91cyBzdGF0ZSwgd2hvIHdpbGwgZXZlbnR1YWxseSBkaWUsIGRvIGRpZS4KK2luZmVjdGlvdXNNb3J0YWxpdHlSYXRlVU5JVCA9IFBNL1RQKgorCitpbW11bml0eUxvc3NSYXRlID0gSW1tdW5pdHkgTG9zcyBSYXRlIChcdTAzYzMpCitpbW11bml0eUxvc3NSYXRlVFQgPSBUaGF0IHJhdGUgYXQgd2hpY2ggcG9wdWxhdGlvbiBtZW1iZXJzIGluIHRoZSBSZWNvdmVyZWQgc3RhdGUgbG9zZSB0aGVpciBpbW11bml0eSBhbmQgZW50ZXIgdGhlIFN1c2NlcHRpYmxlIHN0YXRlLgoraW1tdW5pdHlMb3NzUmF0ZVVOSVQgPSBQTS9UUCoKKworaW5jdWJhdGlvblJhdGUgPSBJbmN1YmF0aW9uIFJhdGUgKFx1MDNjNikKK2luY3ViYXRpb25SYXRlVFQgPSBUaGUgcmF0ZSBhdCB3aGljaCBwb3B1bGF0aW9uIG1lbWJlcnMgaW4gdGhlIEV4cG9zZWQgc3RhdGUgZW50ZXIgdGhlIEluZmVjdGlvdXMgc3RhdGUuCitpbmN1YmF0aW9uUmF0ZVVOSVQgPSBQTS9UUCoKKworCityZWxhdGl2ZVRvbGVyYW5jZSA9IFJlbGF0aXZlIFRvbGVyYW5jZQorcmVsYXRpdmVUb2xlcmFuY2VUVCA9IFRoZSByZWxhdGl2ZSB0b2xlcmFuY2UgdXNlZCBieSB0aGUgUnVuZ2UgS3V0dGEgYWRhcHRpdmUgc3RlcHNpemUgYWxnb3JpdGhtLgorcmVsYXRpdmVUb2xlcmFuY2VVTklUID0gCisKK2Zpbml0ZURpZmZlcmVuY2UgPSBGaW5pdGUgRGlmZmVyZW5jZQorZmluaXRlRGlmZmVyZW5jZVRUID0gVXNlIGEgc2ltcGxpZmllZCBtZXRob2QgKGZpbml0ZSBkaWZmZXJlbmNlKSBzb2x2aW5nIHRoZSBkaWZmZXJlbnRpYWwgZXF1YXRpb25zIGluc3RlYWQgb2YgUnVuZ2UgS3V0dGEgIAorZmluaXRlRGlmZmVyZW5jZVVOSVQgPSAKKworZnJlcXVlbmN5RGVwZW5kZW50ID0gRnJlcXVlbmN5IERlcGVuZGVudAorZnJlcXVlbmN5RGVwZW5kZW50VFQgPSBJZiBzZXQsIGEgZnJlcXVlbmN5IGRlcGVuZGVudCBkaXNlYXNlIG1vZGVsIGlzIHVzZWQgaW5zdGVhZCBvZiBhIGRlbnNpdHkgZGVwZW5kZW50ICAKK2ZyZXF1ZW5jeURlcGVuZGVudFVOSVQgPSAKKwordGFyZ2V0SVNPS2V5ID0gVGFyZ2V0IGtleQordGFyZ2V0SVNPS2V5VFQgPSBUaGUgdGFyZ2V0IElTTyBrZXkKK3RhcmdldElTT1VOSVQgPSAKKworaW5mZWN0aW91c0NvdW50ID0gSW5mZWN0aW91cyBjb3VudAoraW5mZWN0aW91c0NvdW50VFQgPSBJbmZlY3Rpb3VzIGNvdW50IHRvb2x0aXAKK2luZmVjdGlvdXNDb3VudFVOSVQgPSAKKworaW5vY3VsYXRlZFBlcmNlbnRhZ2UgPSBJbm9jdWxhdGVkIHBlcmNlbnRhZ2UKK2lub2N1bGF0ZWRQZXJjZW50YWdlVFQgPSBUaGUgaW5vY3VsYXRlZCBwZXJjZW50YWdlCitpbm9jdWxhdGVkUGVyY2VudGFnZVVOSVQgPSAlCisKK2luZmVjdFBlcmNlbnRhZ2UgPSBJbmZlY3QgcGVyY2VudGFnZQoraW5mZWN0UGVyY2VudGFnZVRUID0gVGhlIGluZmVjdCBwZXJjZW50YWdlCitpbmZlY3RQZXJjZW50YWdlVU5JVCA9ICUKKworTkRpeldpekVycjA9TWlzc2luZyBEaXNlYXNlIE5hbWUuCitORGl6V2l6RXJyMT1NaXNzaW5nIFBvcHVsYXRpb24gaWRlbnRpZmllci4KK05EaXpXaXpFcnIyPU1pc3NpbmcgVGltZSBQZXJpb2QuCitORGl6V2l6RXJyMz1UaGUgVGltZSBQZXJpb2QgaXMgaW52YWxpZC4KKyNORGl6V2l6RXJyND1NaXNzaW5nIEJhY2tncm91bmQgTW9ydGFsaXR5IFJhdGUuCisjTkRpeldpekVycjU9QmFja2dyb3VuZCBtb3J0YWxpdHkgcmF0ZSBpcyBpbnZhbGlkLgorTkRpeldpekVycjY9TWlzc2luZyBUcmFuc21pc3Npb24gUmF0ZS4KK05EaXpXaXpFcnI3PVRoZSBUcmFuc21pc3Npb24gUmF0ZSBpcyBpbnZhbGlkLgorTkRpeldpekVycjg9TWlzc2luZyBOb24tTGluZWFyaXR5IENvZWZmaWNpZW50LgorTkRpeldpekVycjk9VGhlIE5vbi1MaW5lYXJpdHkgQ29lZmZpY2llbnQgaXMgaW52YWxpZC4KK05EaXpXaXpFcnIxMD1NaXNzaW5nIEluZmVjdGlvdXMgUmVjb3ZlcnkgUmF0ZS4KK05EaXpXaXpFcnIxMT1UaGUgSW5mZWN0aW91cyBSZWNvdmVyeSBSYXRlIGlzIGludmFsaWQuCitORGl6V2l6RXJyMTI9TWlzc2luZyBJbmZlY3Rpb3VzIE1vcnRhbGl0eSBSYXRlLgorTkRpeldpekVycjEzPVRoZSBJbmZlY3Rpb3VzIE1vcnRhbGl0eSBSYXRlIGlzIGludmFsaWQuCitORGl6V2l6RXJyMTY9TWlzc2luZyBJbW11bml0eSBMb3NzIFJhdGUuCitORGl6V2l6RXJyMTc9VGhlIEltbXVuaXR5IExvc3MgUmF0ZSBpcyBpbnZhbGlkLgorTkRpeldpekVycjE4PU1pc3NpbmcgSW5jdWJhdGlvbiBSYXRlLgorTkRpeldpekVycjE5PVRoZSBJbmN1YmF0aW9uIFJhdGUgUmF0ZSBpcyBpbnZhbGlkLgorTkRpeldpekVycjIwPURpcmVjdG9yeSBvciBGaWxlIGRvZXMgbm90IGV4aXN0LgorTkRpeldpekVycjIxPUludmFsaWQgRGF0YSBUeXBlLgorI05EaXpXaXpFcnIyMj1NaXNzaW5nIHJlbGF0aXZlIHRvbGVyYW5jZQorI05EaXpXaXpFcnIyMz1SZWxhdGl2ZSB0b2xlcmFuY2UgaXMgbGVzcyBvciBlcXVhbCB0byAwIG9yIHRvbyBsYXJnZQorTkRpeldpekVycjI0PU1pc3NpbmcgQ2hhcmFjdGVyaXN0aWMgTWl4aW5nIERpc3RhbmNlLgorTkRpeldpekVycjI1PUNoYXJhY3RlcmlzdGljIE1peGluZyBEaXN0YW5jZSBpcyBpbnZhbGlkLgorTkRpeldpekVycjI2PU1pc3NpbmcgUmVmZXJlbmNlIFBvcHVsYXRpb24gRGVuc2l0eS4KK05EaXpXaXpFcnIyNz1SZWZlcmVuY2UgUG9wdWxhdGlvbiBEZW5zaXR5IGlzIGludmFsaWQuCitORGl6V2l6RXJyMjg9TWlzc2luZyBSb2FkIE5ldHdvcmsgSW5mZWN0aW91cyBQcm9wb3J0aW9uLgorTkRpeldpekVycjI5PVJvYWQgTmV0d29yayBJbmZlY3Rpb3VzIFByb3BvcnRpb24gaXMgaW52YWxpZC4KK05EaXpXaXpFcnIzMD1NaXNzaW5nIFNlZWQuCitORGl6V2l6RXJyMzE9TWlzc2luZyBHYWluLgorRE1QQzE9RGlzZWFzZSBNb2RlbCBQcm9wZXJ0eSBDb250cm9sCitETVBDMj1NaXNzaW5nIERpc2Vhc2UgUHJvcGVydHkgRWRpdG9yIGZvciAiCitEREMuMD1EaXNlYXNlIE1vZGVsOgorRERDLjE9VW5kZXJseWluZyBNYXRoZW1hdGljYWwgRGlzZWFzZSBNb2RlbAorRERDLjI9Y2xhc3MKK0REQy4zPVByb2JsZW0gY3JlYXRpbmcgRGlzZWFzZSBNb2RlbCBpbnN0YW5jZQorRERDLjQ9UHJvYmxlbSBjcmVhdGluZyBEdWJsaW4gQ29yZSBpbnN0YW5jZQorTkluZldpekVycm9yLjE9TWlzc2luZyB0aGUgbmFtZSBvZiB0aGUgZGlzZWFzZSBjYXVzaW5nIHRoZSBpbmZlY3Rpb24uCitOSW5mV2l6RXJyb3IuMj1NaXNzaW5nIHRoZSBuYW1lIG9mIHRoZSBwb3B1bGF0aW9uIHRvIGluZmVjdC4KK05JbmZXaXpFcnJvci4zPVRoZSBudW1iZXIgb2YgaW5mZWN0aW9ucyBpcyBtaXNzaW5nLgorTkluZldpekVycm9yLjQ9VGhlIG51bWJlciBvZiBpbmZlY3Rpb25zL2lub2N1bGF0aW9ucyBjYW4ndCBiZSBuZWdhdGl2ZQorTkluZldpekVycm9yLjU9VGhlIG51bWJlciBvZiBpbmZlY3Rpb25zIGlzIGludmFsaWQuCitOSW5mV2l6RXJyb3IuNj1NaXNzaW5nIHRoZSBsb2NhdGlvbiBzcGVjaWZpY2F0aW9uCitOSW5mV2l6RXJyb3IuNz1UaGUgbnVtYmVyIG9mIGluZmVjdGlvbnMgd2FzIG5vdCBhIHZhbGlkIG51bWJlcgorTkluZldpekVycm9yLjg9UGVyY2VudGFnZSBub3QgVmFsaWQuIE11c3QgYmUgPCAxMDAuMCUKK05JbmZXaXpFcnJvci45PUVudGVyIGEgZm9sZGVyIGNvbnRhaW5pbmcgU1RFTSBsb2cgZmlsZXMKK05JbmZXaXpFcnJvci4xMD1Gb2xkZXIgZG9lcyBub3QgZXhpc3QhCitOSW5mV2l6RXJyb3IuMTE9QmFkIHJvdyBudW1iZXIKKworTkluZldpekROPURpc2Vhc2UgTmFtZToKK05JbmZXaXpETlRUPVRoZSBuYW1lIG9mIHRoZSBEaXNlYXNlIHRvIHRoYXQgaW5mZWN0cyAoZS5nLiwgSW5mbHVlbnphKS4KK05JbmZXaXpQT1A9UG9wdWxhdGlvbjoKK05JbmZXaXpQT1BUVD1UaGUgbmFtZSBvZiB0aGUgcG9wdWxhdGlvbiBpbmZlY3RlZCAoZS5nLiwgaHVtYW4pLgorTkluZldpek5JSU5GPU51bWJlciB0byBpbmZlY3Q6CitOSW5mV2l6TklJTk89TnVtYmVyIHRvIGlub2N1bGF0ZToKK05JbmZXaXpQSUlORj1QZXJjZW50IHRvIGluZmVjdDoKK05JbmZXaXpQSUlOTz1QZXJjZW50IHRvIGlub2N1bGF0ZToKK05JbmZXaXouYWJzbnVtYmVyPVVzZSBhbiBhYnNvbHV0ZSBudW1iZXIKK05JbmZXaXoucGVyY2VudGFnZT1Vc2UgYSBwZXJjZW50YWdlCitOSW5mV2l6TklUVD1UaGUgbnVtYmVyIG9mIHBvcHVsYXRpb24gbWVtYmVycyB0byBiZSBpbmZlY3RlZC4KK05JbmZXaXpQaWNrTG9jPVNlbGVjdCBMb2NhdGlvbgorTkluZldpelBpY2tMb2NUaXRsZT1TZWxlY3QgYSBsb2NhdGlvbiB0byBpbmZlY3QgKG9yIGlub2N1bGF0ZSkKK05JbmZXaXpJU09LPUxvY2F0aW9uIElTTyBLZXk6CitOSW5mZWN0b3JXaXouZW50ZXI9RW50ZXIgbWFudWFsbHkgKGFib3ZlKQorTkluZmVjdG9yV2l6LmltcG9ydD1JbXBvcnQgZnJvbSBTVEVNIGxvZyBmaWxlcyAoYmVsb3cpCitOSW5mV2l6SW1wb3J0PVNlbGVjdCBTVEVNIExvZyBGb2xkZXIKK05JbmZXaXpMb2dEaXJMYWJlbD1Mb2cgRm9sZGVyCitOSW5mV2l6TG9nRGlyRGVzYz1TZWxlY3QgYSBTVEVNIGxvZyBmaWxlIGZvbGRlcgorTkluZmVjdG9yV2l6LmZpcnN0cm93PUZpcnN0IHJvdworTkluZmVjdG9yV2l6Lmxhc3Ryb3c9TGFzdCByb3cKK05JbmZlY3Rvcldpei5zZWxlY3RlZHJvdz1TZWxlY3RlZCByb3cKKworQUxHLjA9U29sdmVyIGFsZ29yaXRobToKK0FMRy4xPVVuZGVybHlpbmcgZGlmZmVyZW50aWFsIGVxdWF0aW9uIHNvbHZlciBhbGdvcml0aG0KK0FMRy4yPUZpbml0ZSBEaWZmZXJlbmNlCitBTEcuMz1SdW5nZSBLdXR0YSBBZGFwdGl2ZSBTdGVwIFNpemUKKworIyBJbml0aWFsaXplcgorTkluaXRpYWxpemVyV2l6LnBvcHVsYXRpb24gPSBQb3B1bGF0aW9uCitOSW5pdGlhbGl6ZXJXaXoucG9wdWxhdGlvbi5taXNzaW5nID0gTWlzc2luZyBQb3B1bGF0aW9uLgorTkluaXRpYWxpemVyV2l6LmxvY2F0aW9uID0gU2VsZWN0IExvY2F0aW9uCitOSW5pdGlhbGl6ZXJXaXoubG9jYXRpb24ubWlzc2luZyA9IE1pc3NpbmcgTG9jYXRpb24uCitOSW5pdGlhbGl6ZXJXaXoudmFsdWVzLmludmFsaWQgPSBWYWx1ZXMgaW52YWxpZC4KK05Jbml0aWFsaXplcldpei52YWx1ZVR5cGUgPSBUeXBlIG9mIFZhbHVlcworTkluaXRpYWxpemVyV2l6LmFic29sdXRlID0gQWJzb2x1dGUgTnVtYmVycworTkluaXRpYWxpemVyV2l6LmZyYWN0aW9ucyA9IEZyYWN0aW9ucworCisjIER1YmxpbiBDb3JlIGRlZmF1bHQgZGF0YQorZGNfdGl0bGVfaW5pdGlhbGl6ZXIgPSBJbml0aWFsaXplcgorZGNfc291cmNlX2luaXRpYWxpemVyID0KK2RjX2Rlc2NfaW5pdGlhbGl6ZXIgPSBBbiBpbml0aWFsaXplciBzcGVjaWZpZXMgdGhlIGluaXRpYWwgZnJhY3Rpb24gb2YgcG9wdWxhdGlvbiBtZW1iZXJzIGluIGVhY2ggY29tcGFydG1lbnQgb2YgYSBkaXNlYXNlIG1vZGVsLiAKZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3dpemFyZHMvZGlzZWFzZXdpemFyZG1lc3NhZ2VzX2RlLnByb3BlcnRpZXMgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS93aXphcmRzL2Rpc2Vhc2V3aXphcmRtZXNzYWdlc19kZS5wcm9wZXJ0aWVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQxZDZhNTQKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS93aXphcmRzL2Rpc2Vhc2V3aXphcmRtZXNzYWdlc19kZS5wcm9wZXJ0aWVzCkBAIC0wLDAgKzEsMjI3IEBACisjIGRpc2Vhc2V3aXphcmRtZXNzYWdlcy5wcm9wZXJ0aWVzCisjCisjLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyMgKiBDb3B5cmlnaHQgKGMpIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisjICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworIyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorIyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisjICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyMgKgorIyAqIENvbnRyaWJ1dG9yczoKKyMgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisjICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyMgTmV3IERpc2Vhc2UgV2l6YXJkCisKK05EaXNlYXNlV2l6LndpemFyZF90aXRsZT1OZXVlIEtyYW5raGVpdAorTkRpc2Vhc2VXaXoucGFnZV90aXRsZT1LcmFua2hlaXQKK05EaXNlYXNlV2l6LnBhZ2VfZGVzY3JpcHRpb249TmV1ZSBLcmFua2hlaXQgaW4gZWluZW0gUHJvamVrdCBkZWZpbmllcmVuCitORGlzZWFzZVdpei5EQ19ERVNDUklQVElPTj1LcmFua2hlaXQgInswfSIKKworIyBOZXcgSW5mZWN0b3IgV2l6YXJkCitOSW5mZWN0b3JXaXoud2l6YXJkX3RpdGxlPU5ldWVyIEluZmVrdGlvbnMtL0ltbXVuaXNpZXJ1bmdzcHVua3QKK05JbmZlY3Rvcldpei5wYWdlX3RpdGxlPUluZml6aWVyZXIgLyBJbW11bmlzaWVyZXIKK05JbmZlY3Rvcldpei5wYWdlX2Rlc2NyaXB0aW9uPU5ldWVuIE9ydCBmXHUwMGZjciBJbmZla3Rpb24gb2RlciBJbW11bmlzaWVydW5nIGluIGVpbmVtIFByb2pla3QgZGVmaW5pZXJlbgorTkluZmVjdG9yV2l6LkRDX0RFU0NSSVBUSU9OPXswfSAiezF9IiBCZXZcdTAwZjZsa2VydW5nIE1pdGdsaWVkZXIgbWl0IGRlciBLcmFua2hlaXQgInsyfSIgYW0gU3RhbmRvcnQgInszfSIgKHs0fSkgaW5maXppZXJlbi4KK05JbmZlY3Rvcldpei5EQ19ERVNDUklQVElPTjI9ezB9ICJ7MX0iIFByb3plbnQgZGVyIEJldlx1MDBmNmxrZXJ1bmcgZ2VnZW4gZGllIEtyYW5raGVpdCAiezJ9IiBhbSBTdGFuZG9ydCAiezN9IiAoezR9KSBpbW11bmlzaWVyZW4uCitOSW5mZWN0b3JXaXouRENfREVTQ1JJUFRJT05fRlJPTV9GSUxFPUluZml6aWVyZW4gZ2VtXHUwMGU0XHUwMGRmIExvZy1EYXRlaWVuIHVudGVyIHswfQorTkluZmVjdG9yV2l6LkRDX0RFU0NSSVBUSU9OMl9GUk9NX0ZJTEU9SW1tdW5pc2llcmVuIGdlbVx1MDBlNFx1MDBkZiBMb2ctRGF0ZWllbiB1bnRlciB7MH0KK05JbmZlY3Rvcldpei5pbmZlY3Q9TmV1ZW4gSW5mZWt0b3IgZXJzdGVsbGVuCitOSW5mZWN0b3JXaXouaW5vY3VsYXRlPU5ldWVuIEltbXVuaXNpZXJlciBlcnN0ZWxsZW4KKworIyBOZXcgSW5pdGlhbGl6ZXIgV2l6YXJkCitOSW5pdGlhbGl6ZXJXaXoud2l6YXJkX3RpdGxlID0gTmV1ZXIgSW5pdGlhbGlzaWVyZXIKK05Jbml0aWFsaXplcldpei5wYWdlX3RpdGxlID0gSW5pdGlhbGlzaWVyZXIKK05Jbml0aWFsaXplcldpei5wYWdlX2Rlc2NyaXB0aW9uID0gTmV1ZW4gSW5pdGlhbGlzaWVyZXIgaW0gUHJvamVrdCBkZWZpbmllcmVuLgorTkluaXRpYWxpemVyV2l6LkRDX0RFU0NSSVBUSU9OID0gQmV2XHUwMGY2bGtlcnVuZ3NtaXRnbGllZGVyIGluaXRpYWxpc2llcmVuLgorCitORGlzZWFzZVdpei5kaXNlYXNlX2ZvbGRlcj1LcmFua2hlaXRlbgorCitQTVRQX0RlZiA9ICpQTS9UUCA9IFBvcHVsYXRpb24gTWVtYmVyL1RpbWUgUGVyaW9kCisKK3BvcHVsYXRpb25JZGVudGlmaWVyPUJldlx1MDBmNmxrZXJ1bmcKK3BvcHVsYXRpb25JZGVudGlmaWVyVFQ9RGVyIE5hbWUgZGVyIHZvbiBkaWVzZXIgS3JhbmtoZWl0IGluZml6aWVydGVuIEJldlx1MDBmNmxrZXJ1bmcuIChaLiBCLiwgTWVuc2NoKQorcG9wdWxhdGlvbklkZW50aWZpZXJVTklUPQorCitjaGFyYWN0ZXJpc3RpY01peGluZ0Rpc3RhbmNlPUNoYXJha3RlcmlzdGlzY2hlIE1pc2NoZW50ZmVybnVuZworY2hhcmFjdGVyaXN0aWNNaXhpbmdEaXN0YW5jZVRUPURlciBUcmVubnVuZ3MtQWJzdGFuZCwgYmVpIGRlbSB6d2VpIFJlZ2lvbmVuIHZvbGxzdFx1MDBlNG5kaWcgdmVybWlzY2h0IHNpbmQKK2NoYXJhY3RlcmlzdGljTWl4aW5nRGlzdGFuY2VVTklUPWttCisKK3JvYWROZXR3b3JrSW5mZWN0aW91c1Byb3BvcnRpb249U3RyYVx1MDBkZmVubmV0ei5JbmYuQW50ZWlsCityb2FkTmV0d29ya0luZmVjdGlvdXNQcm9wb3J0aW9uVFQ9RGVyIFN0cmFcdTAwZGZlbm5ldHotSW5mZWt0aVx1MDBmNnNlLUFudGVpbCBpc3QgdW5nXHUwMGZjbHRpZy4KK3JvYWROZXR3b3JrSW5mZWN0aW91c1Byb3BvcnRpb25VTklUPUJydWNodGVpbCBwcm8gU3RyYVx1MDBkZmUKKwordGltZVBlcmlvZD1aZWl0cmF1bSAoVFApCit0aW1lUGVyaW9kVFQgPSBUaGUgdGltZSBwZXJpb2QgZm9yIHRoZSByYXRlcyAoZS5nLiwgODY0MDAwMDBtcyA9IDEgZGF5KS4KKyN0aW1lUGVyaW9kVU5JVCA9IERheShzKQordGltZVBlcmlvZFVOSVQ9bXMKKworZGlzZWFzZU5hbWU9TmFtZSBkZXIgS3JhbmtoZWl0CitkaXNlYXNlTmFtZVRUPURlciBOYW1lIGRlciBLcmFua2hlaXQuIChaLiBCLiwgSW5mbHVlbnphKQorZGlzZWFzZU5hbWVVTklUPQorCitzZWVkPUFuZmFuZ3N3ZXJ0IGZcdTAwZmNyIFp1ZmFsbHNnZW5lcmF0b3IKK3NlZWRUVD1BbmZhbmdzd2VydCBmXHUwMGZjciBkZW4gWnVmYWxsc3phaGxlbmdlbmVyYXRvcgorc2VlZFVOSVQ9CisKK3JhbmRvbUdlbmVyYXRvcj1adWZhbGxzZ2VuZXJhdG9yCityYW5kb21HZW5lcmF0b3JUVD0KK3JhbmRvbUdlbmVyYXRvclVOSVQ9CisKK2dhaW49V2VpXHUwMGRmZXMtUmF1c2NoZW4tVmVyc3RcdTAwZTRya3VuZworZ2FpblRUPVJhdXNjaGVuIEFtcGxpdHVkZSAoc29sbHRlIDx+IDAsMDEgc2VpbikKK2dhaW5VTklUPQorCitpbmZlY3Rpb3VzTW9ydGFsaXR5PUluZmVrdGlcdTAwZjZzZSBNb3J0YWxpdFx1MDBlNHQgKHgpCitpbmZlY3Rpb3VzTW9ydGFsaXR5VFQ9RGVyIEFudGVpbCB2b24gQmV2XHUwMGY2bGtlcnVuZ3NtaXRnbGllZGVybiBpbSBpbmZla3RpXHUwMGY2c2VuIFp1c3RhbmQsIGRhc3MgbGV0enRlbmRsaWNoIHN0ZXJiZW4gd2lyZC4gKFouIEIuLCAyKQoraW5mZWN0aW91c01vcnRhbGl0eVVOSVQ9QnJ1Y2h0ZWlsCisKK3RyYW5zbWlzc2lvblJhdGU9XHUwMGRjYmVydHJhZ3VuZ3NyYXRlIChcdTAzYjIpCit0cmFuc21pc3Npb25SYXRlVFQ9RGllIEFuemFobCBkZXIgTWl0Z2xpZWRlciBlaW5lciBCZXZcdTAwZjZsa2VydW5nIGltIGVtcGZcdTAwZTRuZ2xpY2hlbiBadXN0YW5kLCBkaWUgZXhwb25pZXJ0IHdlcmRlbiBwcm8gQmV2XHUwMGY2bGtlcnVuZ3NtaXRnbGllZCBpbSBpbmZla3RpXHUwMGY2c2VuIFp1c3RhbmQuCit0cmFuc21pc3Npb25SYXRlVU5JVD0KKworCityZWZlcmVuY2VQb3B1bGF0aW9uRGVuc2l0eT1SZWZlcmVuei1CZXZcdTAwZjZsa2VydW5nc2RpY2h0CityZWZlcmVuY2VQb3B1bGF0aW9uRGVuc2l0eVRUPUJldlx1MDBmNmxrZXJ1bmdzZGljaHRlIHdvIFx1MDBkY2JlcnRyYWd1bmdzcmF0ZSBnZW1lc3NlbgorcmVmZXJlbmNlUG9wdWxhdGlvbkRlbnNpdHlVTklUPVBNIC8gcWttCisKK25vbkxpbmVhcml0eUNvZWZmaWNpZW50PU5pY2h0bGluZWFyaXRcdTAwZTR0cyBLb2VmZml6aWVudAorbm9uTGluZWFyaXR5Q29lZmZpY2llbnRUVD1JbiBlaW5lbSBuaWNodGxpbmVhcmVuIE1vZGVsbCwgaW4gZGVyIFJlZ2VsPiAxLDAgKFNcdTAwZTR0dGlndW5nIGRlcyBJbW11bnN5c3RlbXMgZlx1MDBmY3IgZW1wZlx1MDBlNG5nbGljaGUgQmV2XHUwMGY2bGtlcnVuZ3NtaXRnbGllZGVyKSwgd2lyZCBkZXIgVGVybSBmXHUwMGZjciBJbmZla3Rpb25lbiBtaXQgZGllc2VtIEV4cG9uZW50ZW4gdmVyc2VoZW4uCitub25MaW5lYXJpdHlDb2VmZmljaWVudFVOSVQ9XCBVMjI2NSAwLDAKKworcmVjb3ZlcnlSYXRlPUluZmVrdGlcdTAwZjZzZSBSZWNvdmVyeSBSYXRlIChcIHUwM2IzKQorcmVjb3ZlcnlSYXRlVFQ9RGllIFJhdGUsIG1pdCBkZXIgQmV2XHUwMGY2bGtlcnVuZyBNaXRnbGllZGVyIGltIGluZmVrdGlcdTAwZjZzZW4gWnVzdGFuZCwgZGllIG5pY2h0IHN0ZXJiZW4sIHNpY2ggZXJob2xlbi4KK3JlY292ZXJ5UmF0ZVVOSVQ9UE0gLyBUUCAqCisKK2luZmVjdGlvdXNNb3J0YWxpdHlSYXRlPUluZmVrdGlcdTAwZjZzZSBNb3J0YWxpdFx1MDBlNHRzcmF0ZSAoXCB1MDNiYyBpKQoraW5mZWN0aW91c01vcnRhbGl0eVJhdGVUVD1EaWUgUmF0ZSwgbWl0IGRlciBCZXZcdTAwZjZsa2VydW5nc21pdGdsaWVkZXIgaW0gaW5mZWt0aVx1MDBmNnNlbiBadXN0YW5kLCB3ZWxjaGUgbGV0enRlbmRsaWNoIHN0ZXJiZW4gd2VyZGVuLCBzdGVyYmVuLgoraW5mZWN0aW91c01vcnRhbGl0eVJhdGVVTklUPVBNIC8gVFAgKgorCitpbW11bml0eUxvc3NSYXRlPUVudGltbXVuaXNpZXJ1bmdzcmF0ZSAoXCB1MDNjMykKK2ltbXVuaXR5TG9zc1JhdGVUVD1SYXRlLCBtaXQgZGVyIEJldlx1MDBmNmxrZXJ1bmdzbWl0Z2xpZWRlciBpbSBnZW5lc2VuZW4gWnVzdGFuZCBpaHJlIEltbXVuaXRcdTAwZTR0IHZlcmxpZXJlbiB1bmQgZGVuIGVtcGZcdTAwZTRuZ2xpY2hlbiBadXN0YW5kIGJldHJldGVuLgoraW1tdW5pdHlMb3NzUmF0ZVVOSVQ9UE0gLyBUUCAqCisKK2luY3ViYXRpb25SYXRlPUlua3ViYXRpb25zcmF0ZSAoXCB1MDNjNikKK2luY3ViYXRpb25SYXRlVFQ9RGllIFJhdGUsIG1pdCBkZXIgQmV2XHUwMGY2bGtlcnVuZ3NtaXRnbGllZGVyIGltIGV4cG9uaWVydGVuIFp1c3RhbmQgaW4gZGVuIGluZmVrdGlcdTAwZjZzZW4gWnVzdGFuZCBcdTAwZmNiZXJnZWhlbi4KK2luY3ViYXRpb25SYXRlVU5JVD1QTSAvIFRQICoKKworCityZWxhdGl2ZVRvbGVyYW5jZT1SZWxhdGl2ZSBUb2xlcmFuegorcmVsYXRpdmVUb2xlcmFuY2VUVD1EaWUgdm9tIFJ1bmdlLUt1dHRhLUFsZ29yaXRobXVzIG1pdCBhZGFwdGl2ZXIgU2Nocml0dHdlaXRlIHZlcndlbmRldGUgcmVsYXRpdmUgVG9sZXJhbnouCityZWxhdGl2ZVRvbGVyYW5jZVVOSVQ9CisKK2Zpbml0ZURpZmZlcmVuY2U9RmluaXRlLURpZmZlcmVuemVuCitmaW5pdGVEaWZmZXJlbmNlVFQ9VmVyZWluZmFjaHRlIE1ldGhvZGUgKEZpbml0ZS1EaWZmZXJlbnplbikgZlx1MDBmY3IgTFx1MDBmNnN1bmcgZGVyIERpZmZlcmVudGlhbGdsZWljaHVuZ2VuIHN0YXR0IFJ1bmdlLUt1dHRhIGJlbnV0emVuCitmaW5pdGVEaWZmZXJlbmNlVU5JVD0KKworZnJlcXVlbmN5RGVwZW5kZW50PUZyZXF1ZW56YWJoXHUwMGU0bmdpZworZnJlcXVlbmN5RGVwZW5kZW50VFQ9V2VubiBnZXNldHp0LCB3aXJkIGVpbiBmcmVxdWVuemFiaFx1MDBlNG5naWdlcyBLcmFua2hlaXRzbW9kZWxsIGFuc3RlbGxlIGVpbmVzIGRpY2h0ZWFiaFx1MDBlNG5naWdlbiB2ZXJ3ZW5kZXQKK2ZyZXF1ZW5jeURlcGVuZGVudFVOSVQ9CisKK3RhcmdldElTT0tleT1aaWVsLVNjaGxcdTAwZmNzc2VsCit0YXJnZXRJU09LZXlUVD1EZXIgWmllbC1JU08tU2NobFx1MDBmY3NzZWwKK3RhcmdldElTT1VOSVQ9CisKK2luZmVjdGlvdXNDb3VudD1JbmZla3RpXHUwMGY2c2UgQW56YWhsCitpbmZlY3Rpb3VzQ291bnRUVD1JbmZla3RpXHUwMGY2c2UgQW56YWhsIFRvb2x0aXAKK2luZmVjdGlvdXNDb3VudFVOSVQ9CisKK2lub2N1bGF0ZWRQZXJjZW50YWdlPUltbXVuaXNpZXJ0ZXIgQW50ZWlsCitpbm9jdWxhdGVkUGVyY2VudGFnZVRUPURlciBpbW11bmlzaWVydGUgUHJvemVudHNhdHoKK2lub2N1bGF0ZWRQZXJjZW50YWdlVU5JVD0lCisKK2luZmVjdFBlcmNlbnRhZ2U9QW50ZWlsIGluZml6aWVyZW4KK2luZmVjdFBlcmNlbnRhZ2VUVD1EZXIgaW5maXppZXJ0ZSBQcm96ZW50c2F0egoraW5mZWN0UGVyY2VudGFnZVVOSVQ9JQorCitORGl6V2l6RXJyMD1LcmFua2hlaXRzbmFtZSBmZWhsdC4KK05EaXpXaXpFcnIxPUJldlx1MDBmNmxrZXJ1bmdiZXplaWNobmVyIGZlaGx0LgorTkRpeldpekVycjI9WmVpdHJhdW0gZmVobHQuCitORGl6V2l6RXJyMz1EaWUgWmVpdGRhdWVyIGlzdCB1bmdcdTAwZmNsdGlnLgorI05EaXpXaXpFcnI0PU1pc3NpbmcgQmFja2dyb3VuZCBNb3J0YWxpdHkgUmF0ZS4KKyNORGl6V2l6RXJyNT1CYWNrZ3JvdW5kIG1vcnRhbGl0eSByYXRlIGlzIGludmFsaWQuCitORGl6V2l6RXJyNj1cdTAwZGNiZXJ0cmFndW5nc3JhdGUgZmVobHQuCitORGl6V2l6RXJyNz1EaWUgXHUwMGRjYmVydHJhZ3VuZ3NyYXRlIGlzdCB1bmdcdTAwZmNsdGlnLgorTkRpeldpekVycjg9TmljaHQtbGluZWFyZXIgS29lZmZpemllbnQgZmVobHQuCitORGl6V2l6RXJyOT1EZXIgTmljaHQtTGluZWFyaXRcdTAwZTR0cy1Lb2VmZml6aWVudCBpc3QgdW5nXHUwMGZjbHRpZy4KK05EaXpXaXpFcnIxMD1JbmZla3RpXHUwMGY2c2UgR2VuZXN1bmdzcmF0ZSBmZWhsdC4KK05EaXpXaXpFcnIxMT1EaWUgSW5mZWt0aVx1MDBmNnNlIEdlbmVzdW5nc3JhdGUgaXN0IHVuZ1x1MDBmY2x0aWcuCitORGl6V2l6RXJyMTI9SW5mZWt0aVx1MDBmNnNlIE1vcnRhbGl0XHUwMGU0dHNyYXRlIGZlaGx0LgorTkRpeldpekVycjEzPURpZSBJbmZla3RpXHUwMGY2c2UgTW9ydGFsaXRcdTAwZTR0c3JhdGUgaXN0IHVuZ1x1MDBmY2x0aWcuCitORGl6V2l6RXJyMTY9RW50aW1tdW5pc2llcnVuZ3NyYXRlIGZlaGx0LgorTkRpeldpekVycjE3PURpZSBFbnRpbW11bmlzaWVydW5nc3JhdGUgaXN0IHVuZ1x1MDBmY2x0aWcuCitORGl6V2l6RXJyMTg9SW5rdWJhdGlvbnNyYXRlIGZlaGx0LgorTkRpeldpekVycjE5PURpZSBJbmt1YmF0aW9uc3JhdGUgaXN0IHVuZ1x1MDBmY2x0aWcuCitORGl6V2l6RXJyMjA9VmVyemVpY2huaXMgb2RlciBEYXRlaSBleGlzdGllcnQgbmljaHQuCitORGl6V2l6RXJyMjE9VW5nXHUwMGZjbHRpZ2VyIERhdGVudHlwLgorI05EaXpXaXpFcnIyMj1NaXNzaW5nIHJlbGF0aXZlIHRvbGVyYW5jZQorI05EaXpXaXpFcnIyMz1SZWxhdGl2ZSB0b2xlcmFuY2UgaXMgbGVzcyBvciBlcXVhbCB0byAwIG9yIHRvbyBsYXJnZQorTkRpeldpekVycjI0PU1pc3NpbmcgQ2hhcmFjdGVyaXN0aWMgTWl4aW5nIERpc3RhbmNlLgorTkRpeldpekVycjI1PUNoYXJhY3RlcmlzdGljIE1peGluZyBEaXN0YW5jZSBpcyBpbnZhbGlkLgorTkRpeldpekVycjI2PU1pc3NpbmcgUmVmZXJlbmNlIFBvcHVsYXRpb24gRGVuc2l0eS4KK05EaXpXaXpFcnIyNz1SZWZlcmVuY2UgUG9wdWxhdGlvbiBEZW5zaXR5IGlzIGludmFsaWQuCitORGl6V2l6RXJyMjg9TWlzc2luZyBSb2FkIE5ldHdvcmsgSW5mZWN0aW91cyBQcm9wb3J0aW9uLgorTkRpeldpekVycjI5PVJvYWQgTmV0d29yayBJbmZlY3Rpb3VzIFByb3BvcnRpb24gaXMgaW52YWxpZC4KK05EaXpXaXpFcnIzMD1NaXNzaW5nIFNlZWQuCitORGl6V2l6RXJyMzE9TWlzc2luZyBHYWluLgorRE1QQzE9U3RldWVydW5nIGRlciBLcmFua2hlaXRzbW9kZWxsLUVpZ2Vuc2NoYWZ0ZW4KK0RNUEMyPUtyYW5raGVpdHNlaWdlbnNjaGFmdGVuLUVkaXRvciBmXHUwMGZjciAiIGZlaGx0LgorRERDLjA9S3JhbmtoZWl0c21vZGVsbDoKK0REQy4xPVp1Z3J1bmRlIGxpZWdlbmRlcyBtYXRoZW1hdGlzY2hlcyBLcmFua2hlaXRzbW9kZWxsCitEREMuMj1LbGFzc2UKK0REQy4zPVByb2JsZW0gYmVpbSBFcnN0ZWxsZW4gdm9uIEtyYW5raGVpdHNtb2RlbGwtSW5zdGFuegorRERDLjQ9UHJvYmxlbSBiZWltIEVyc3RlbGxlbiB2b24gRHVibGluLUNvcmUtSW5zdGFuegorTkluZldpekVycm9yLjE9TmFtZSBkZXIgS3JhbmtoZWl0LCB3ZWxjaGUgZGllIEluZmVrdGlvbiB2ZXJ1cnNhY2h0LCBmZWhsdC4KK05JbmZXaXpFcnJvci4yPU5hbWUgZGVyIHp1IGluZml6aWVyZW5kZW4gQmV2XHUwMGY2bGtlcnVuZyBmZWhsdC4KK05JbmZXaXpFcnJvci4zPURpZSBBbnphaGwgZGVyIEluZmVrdGlvbmVuIGZlaGx0LgorTkluZldpekVycm9yLjQ9VGhlIG51bWJlciBvZiBpbmZlY3Rpb25zL2lub2N1bGF0aW9ucyBjYW4ndCBiZSBuZWdhdGl2ZQorTkluZldpekVycm9yLjU9RGllIEFuemFobCBkZXIgSW5mZWt0aW9uZW4gaXN0IHVuZ1x1MDBmY2x0aWcuCitOSW5mV2l6RXJyb3IuNj1PcnRzc3BlemlmaXppZXJ1bmcgZmVobHQuCitOSW5mV2l6RXJyb3IuNz1EaWUgQW56YWhsIGRlciBJbmZla3Rpb25lbiB3YXIga2VpbmUgZ1x1MDBmY2x0aWdlIFphaGwuCitOSW5mV2l6RXJyb3IuOD1Qcm96ZW50c2F0eiBuaWNodCBnXHUwMGZjbHRpZy4gTXVzcyA8MTAwLDAlIHNlaW4KK05JbmZXaXpFcnJvci45PUdlYmVuIFNpZSBlaW5lbiBPcmRuZXIgbWl0IFNURU0tTG9nLURhdGVpZW4gZWluCitOSW5mV2l6RXJyb3IuMTA9T3JkbmVyIGV4aXN0aWVydCBuaWNodCEKK05JbmZXaXpFcnJvci4xMT1VbmdcdTAwZmNsdGlnZSBaZWlsZW5udW1tZXIKKworTkluZldpekROPU5hbWUgZGVyIEtyYW5raGVpdDoKK05JbmZXaXpETlRUPURlciBOYW1lIGRlciBLcmFua2hlaXQsIGRpZSBpbmZpemllcnQgKHpCIEluZmx1ZW56YSkuCitOSW5mV2l6UE9QPUJldlx1MDBmNmxrZXJ1bmc6CitOSW5mV2l6UE9QVFQ9RGVyIE5hbWUgZGVyIGluZml6aWVydGVuIEJldlx1MDBmNmxrZXJ1bmcgKHpCIE1lbnNjaCkuCitOSW5mV2l6TklJTkY9WnUgaW5maXppZXJlbmRlIEFuemFobDoKK05JbmZXaXpOSUlOTz1aVSBpbW11bmlzaWVyZW5kZSBBbnphaGw6CitOSW5mV2l6UElJTkY9WnUgaW5maXppZXJlbmRlciBBbnRlaWw6CitOSW5mV2l6UElJTk89WnUgaW1tdW5pc2llcmVuZGVyIEFudGVpbDoKK05JbmZXaXouYWJzbnVtYmVyPUFic29sdXRlIEFuemFobCB2ZXJ3ZW5kZW4KK05JbmZXaXoucGVyY2VudGFnZT1Qcm96ZW50c2F0eiBiZW51dHplbgorTkluZldpek5JVFQ9RGllIEFuemFobCB2b24genUgaW5maXppZXJlbmRlbiBCZXZcdTAwZjZsa2VydW5nc21pdGdsaWVkZXJuCitOSW5mV2l6UGlja0xvYz1PcnQgd1x1MDBlNGhsZW4KK05JbmZXaXpQaWNrTG9jVGl0bGU9U3RhbmRvcnQgenVtIGluZml6aWVyZW4gKG9kZXIgaW1tdW5pc2llcmVuKSB3XHUwMGU0aGxlbgorTkluZldpeklTT0s9T3J0IElTTyBTY2hsXHUwMGZjc3NlbDoKK05JbmZlY3Rvcldpei5lbnRlcj1NYW51ZWxsIGVpbmdlYmVuIChzaWVoZSBvYmVuKQorTkluZmVjdG9yV2l6LmltcG9ydD1JbXBvcnQgdm9uIFNURU0tTG9nLURhdGVpZW4gKHNpZWhlIHVudGVuKQorTkluZldpekltcG9ydD1TVEVNIExvZy1PcmRuZXIgd1x1MDBlNGhsZW4KK05JbmZXaXpMb2dEaXJMYWJlbD1Mb2cgT3JkbmVyCitOSW5mV2l6TG9nRGlyRGVzYz1cdTkwMDlcdTYyZTlcdTUzZDFcdTc1YzVcdTY1ODdcdTRlZjYKK05JbmZlY3Rvcldpei5maXJzdHJvdz1FcnN0ZSBaZWlsZQorTkluZmVjdG9yV2l6Lmxhc3Ryb3c9TGV0enRlIFplaWxlCitOSW5mZWN0b3JXaXouc2VsZWN0ZWRyb3c9QXVzZ2V3XHUwMGU0aGx0ZSBaZWlsZQorCitBTEcuMD1HbGVpY2h1bmdzbFx1MDBmNnNlci1BbGdvcml0aG11czoKK0FMRy4xPVp1Z3J1bmRlIGxpZWdlbmRlciBEaWZmZXJlbnRpYWxnbGVpY2h1bmdzbFx1MDBmNnNlci1BbGdvcml0aG11cworQUxHLjI9RmluaXRlLURpZmZlcmVuemVuCitBTEcuMz1SdW5nZSBLdXR0YSBBZGFwdGl2ZSBTY2hyaXR0Z3JcdTAwZjZcdTAwZGZlCisKKyMgSW5pdGlhbGl6ZXIKK05Jbml0aWFsaXplcldpei5wb3B1bGF0aW9uID0gQmV2XHUwMGY2bGtlcnVuZworTkluaXRpYWxpemVyV2l6LnBvcHVsYXRpb24ubWlzc2luZyA9IEJldlx1MDBmNmxrZXJ1bmcgZmVobHQuCitOSW5pdGlhbGl6ZXJXaXoubG9jYXRpb24gPSBPcnQgYXVzd1x1MDBlNGhsZW4KK05Jbml0aWFsaXplcldpei5sb2NhdGlvbi5taXNzaW5nID0gT3J0c2FuZ2FiZSBmZWhsdC4KK05Jbml0aWFsaXplcldpei52YWx1ZXMuaW52YWxpZCA9IFdlcnRlIHVuZ1x1MDBmY2x0aWcuCitOSW5pdGlhbGl6ZXJXaXoudmFsdWVUeXBlID0KK05Jbml0aWFsaXplcldpei5hYnNvbHV0ZSA9CitOSW5pdGlhbGl6ZXJXaXouZnJhY3Rpb25zID0KKworIyBEdWJsaW4gQ29yZSBkZWZhdWx0IGRhdGEKK2RjX3RpdGxlX2luaXRpYWxpemVyID0gSW5pdGlhbGlzaWVyZXIKK2RjX3NvdXJjZV9pbml0aWFsaXplciA9CitkY19kZXNjX2luaXRpYWxpemVyID0gRWluIEluaXRpYWxpc2llcmVyIHNwZXppZml6aWVydCBkZW4gaW5pdGlhbGVuIEFudGVpbCBhbiBCZXZcdTAwZjZsa2VydW5nc21pdGdsaWVkZXJuIGluIGplZGVtIEtvbXBhcnRpbWVudCBlaW4gS3JhbmtoZWl0c21vZGVsbHMuCmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS93aXphcmRzL2Rpc2Vhc2V3aXphcmRtZXNzYWdlc19rci5wcm9wZXJ0aWVzIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvd2l6YXJkcy9kaXNlYXNld2l6YXJkbWVzc2FnZXNfa3IucHJvcGVydGllcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NzUzNTI5Ci0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvd2l6YXJkcy9kaXNlYXNld2l6YXJkbWVzc2FnZXNfa3IucHJvcGVydGllcwpAQCAtMCwwICsxLDIyNyBAQAorIyBkaXNlYXNld2l6YXJkbWVzc2FnZXMucHJvcGVydGllcworIworIy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjICogQ29weXJpZ2h0IChjKSAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorIyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyMgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyMgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorIyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisjICoKKyMgKiBDb250cmlidXRvcnM6CisjICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorIyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjIE5ldyBEaXNlYXNlIFdpemFyZAorCitORGlzZWFzZVdpei53aXphcmRfdGl0bGU9XHVjMGM4XHViODVjXHVjNmI0IFx1YzljOFx1YmNkMQorTkRpc2Vhc2VXaXoucGFnZV90aXRsZT1cdWM5YzhcdWJjZDEKK05EaXNlYXNlV2l6LnBhZ2VfZGVzY3JpcHRpb249XHVkNTA0XHViODVjXHVjODFkXHVkMmI4XHVjNWQwIFx1YzBjOFx1Yjg1Y1x1YzZiNCBcdWM5YzhcdWJjZDFcdWM3NDQgXHVjODE1XHVjNzU4XHVkNTY4LgorTkRpc2Vhc2VXaXouRENfREVTQ1JJUFRJT049XHVjOWM4XHViY2QxICJ7MH0iCisKKyMgTmV3IEluZmVjdG9yIFdpemFyZAorTkluZmVjdG9yV2l6LndpemFyZF90aXRsZT1cdWMwYzhcdWI4NWNcdWM2YjQgXHVjODA0XHVjNWZjIC8gXHVjODExXHVjODg1IFx1ZDNlY1x1Yzc3OFx1ZDJiOAorTkluZmVjdG9yV2l6LnBhZ2VfdGl0bGU9XHVjNjI0XHVjNWZjXHVjNmQwL1x1YzgxMVx1Yzg4NVx1Yzc5MCAKK05JbmZlY3Rvcldpei5wYWdlX2Rlc2NyaXB0aW9uPVx1ZDUwNFx1Yjg1Y1x1YzgxZFx1ZDJiOFx1YzVkMCBcdWMwYzhcdWI4NWNcdWM2YjQgXHVjODA0XHVjNWZjXHVjNzc0XHViMDk4IFx1YzgxMVx1Yzg4NSBcdWM5YzBcdWM4MTBcdWM3NDQgXHVjODE1XHVjNzU4LgorTkluZmVjdG9yV2l6LkRDX0RFU0NSSVBUSU9OPVx1YzgwNFx1YzVmYyB7MH0gJ3sxfSAiXHViMjk0IFx1YzljOFx1YmNkMVx1YzczY1x1Yjg1YyBcdWM3NzhcdWFkNmMgXHVkNjhjXHVjNmQwInsyfSAiXHVjNzA0XHVjZTU4XHVjNWQwXHVjMTFjInszfScoezR9KS4KK05JbmZlY3Rvcldpei5EQ19ERVNDUklQVElPTjI9XHVjNzA0XHVjZTU4ICJ7M30iKHs0fSlcdWM1ZDBcdWMxMWMgXHVjOWM4XHViY2QxICJ7Mn0iXHViODVjXHViZDgwXHVkMTMwIFx1Yzc3OFx1YWQ2YyAiezF9Ilx1ZDM3Y1x1YzEzY1x1ZDJiOFx1Yjk3YyB7MH1cdWI4NWMgXHVjODExXHVjODg1CitOSW5mZWN0b3JXaXouRENfREVTQ1JJUFRJT05fRlJPTV9GSUxFPSB7MH1cdWI4NWMgXHViODVjXHVhZGY4IFx1ZDMwY1x1Yzc3Y1x1YzVkMFx1YzExYyBcdWM4MDRcdWM1ZmMKK05JbmZlY3Rvcldpei5EQ19ERVNDUklQVElPTjJfRlJPTV9GSUxFPXswfVx1Yzc1OCBcdWI4NWNcdWFkZjggXHVkMzBjXHVjNzdjXHViODVjXHViZDgwXHVkMTMwIFx1YzgxMVx1Yzg4NQorTkluZmVjdG9yV2l6LmluZmVjdD1cdWMwYzggXHVjNjI0XHVjNWZjXHVjNmQwIFx1YjljY1x1YjRlNFx1YWUzMAorTkluZmVjdG9yV2l6Lmlub2N1bGF0ZT1cdWMwYzggXHVjODExXHVjODg1XHVjNzkwIFx1YjljY1x1YjRlNFx1YWUzMAorCisjIE5ldyBJbml0aWFsaXplciBXaXphcmQKK05Jbml0aWFsaXplcldpei53aXphcmRfdGl0bGU9TmV3IEluaXRpYWxpemVyCitOSW5pdGlhbGl6ZXJXaXoucGFnZV90aXRsZT1Jbml0aWFsaXplcgorTkluaXRpYWxpemVyV2l6LnBhZ2VfZGVzY3JpcHRpb249RGVmaW5lIGEgbmV3IGluaXRpYWxpemVyIGluIGEgcHJvamVjdC4KK05Jbml0aWFsaXplcldpei5EQ19ERVNDUklQVElPTj1Jbml0aWFsaXplIHBvcHVsYXRpb24gbWVtYmVycy4KKworTkRpc2Vhc2VXaXouZGlzZWFzZV9mb2xkZXI9XHVjOWM4XHViY2QxCisKK1BNVFBfRGVmID0gKlBNL1RQID0gUG9wdWxhdGlvbiBNZW1iZXIvVGltZSBQZXJpb2QKKworcG9wdWxhdGlvbklkZW50aWZpZXI9XHVjNzc4XHVhZDZjCitwb3B1bGF0aW9uSWRlbnRpZmllclRUPVx1YzljOFx1YmNkMVx1YzVkMCBcdWM4MDRcdWM1ZmNcdWI0MWMgXHVjNzc4XHVhZDZjXHVjNzU4IFx1Yzc3NFx1Yjk4NC4gKFx1YzYwOCwgXHVjNzc4XHVhYzA0KQorcG9wdWxhdGlvbklkZW50aWZpZXJVTklUPQorCitjaGFyYWN0ZXJpc3RpY01peGluZ0Rpc3RhbmNlPVx1ZDJiOVx1YzEzMSBcdWQ2M2NcdWQ1NjkgXHVhYzcwXHViOWFjCitjaGFyYWN0ZXJpc3RpY01peGluZ0Rpc3RhbmNlVFQ9XHViNDUwIFx1YzljMFx1YzVlZFx1Yzc3NCBcdWM2NDRcdWM4MDRcdWQ3ODggXHVkNjNjXHVkNTY5XHViNDE4XHViMjk0IFx1Y2VmNyAtIFx1YzYyNFx1ZDUwNCBcdWFjNzBcdWI5YWMKK2NoYXJhY3RlcmlzdGljTWl4aW5nRGlzdGFuY2VVTklUPWttCisKK3JvYWROZXR3b3JrSW5mZWN0aW91c1Byb3BvcnRpb249XHViM2M0XHViODVjLlx1YjlkZC5cdWM4MDRcdWM1ZmMuXHViZTQ0XHVjNzI4Cityb2FkTmV0d29ya0luZmVjdGlvdXNQcm9wb3J0aW9uVFQ9XHViM2M0XHViODVjXHViOWRkIFx1YzgwNFx1YzVmY1x1YzEzMSBcdWJlNDRcdWM3MjgKK3JvYWROZXR3b3JrSW5mZWN0aW91c1Byb3BvcnRpb25VTklUPVx1YjNjNFx1Yjg1YyBcdWIyZjkgXHViZDg0XHVjMjE4CisKK3RpbWVQZXJpb2Q9XHVhZTMwXHVhYzA0IChUUCkKK3RpbWVQZXJpb2RUVCA9IFRoZSB0aW1lIHBlcmlvZCBmb3IgdGhlIHJhdGVzIChlLmcuLCA4NjQwMDAwMG1zID0gMSBkYXkpLgorI3RpbWVQZXJpb2RVTklUID0gRGF5KHMpCit0aW1lUGVyaW9kVU5JVD1NUworCitkaXNlYXNlTmFtZT1cdWM5YzhcdWJjZDEgXHVjNzc0XHViOTg0CitkaXNlYXNlTmFtZVRUPVx1YzljOFx1YmNkMVx1Yzc1OCBcdWM3NzRcdWI5ODQgKFx1YzYwOCwgXHVjNzc4XHVkNTBjXHViOGU4XHVjNWQ0XHVjNzkwKQorZGlzZWFzZU5hbWVVTklUPQorCitzZWVkPVx1Yjc5Y1x1YjM2NCBcdWMyZGNcdWI0ZGMKK3NlZWRUVD1cdWIwOWNcdWMyMTggXHVjMGRkXHVjMTMxXHVhZTMwXHVjNWQwIFx1YjMwMFx1ZDU1YyBcdWMyZGNcdWI0ZGMKK3NlZWRVTklUPQorCityYW5kb21HZW5lcmF0b3I9XHViNzljXHViMzY0IFx1YzBkZFx1YzEzMVx1YWUzMAorcmFuZG9tR2VuZXJhdG9yVFQ9CityYW5kb21HZW5lcmF0b3JVTklUPQorCitnYWluPVx1Yjc5Y1x1YjM2NCBcdWIxNzhcdWM3NzRcdWM5ODggXHVjNzc0XHViNGRkCitnYWluVFQ9XHViMTc4XHVjNzc0XHVjOTg4IFx1YzljNFx1ZDNlZCAoPH4gMC4wMVx1Yzc3NFx1YzViNFx1YzU3YyBcdWQ1NjgpCitnYWluVU5JVD0KKworaW5mZWN0aW91c01vcnRhbGl0eT1cdWM4MDRcdWM1ZmMgXHVjMGFjXHViOWRkXHViOTYwIChYKQoraW5mZWN0aW91c01vcnRhbGl0eVRUPVx1YzgwNFx1YzVmYyBcdWMwYzFcdWQwZGNcdWM1ZDBcdWMxMWMgXHVhZDgxXHVhZGY5XHVjODAxXHVjNzNjXHViODVjIFx1YzBhY1x1YjlkZFx1ZDU2MCBcdWM3NzhcdWFkNmMgXHVhZDZjXHVjMTMxXHVjNmQwXHVjNzU4IFx1YmQ4NFx1YzIxOC4gKFx1YzYwOCwgMikKK2luZmVjdGlvdXNNb3J0YWxpdHlVTklUPVx1YmQ4NFx1YzIxOAorCit0cmFuc21pc3Npb25SYXRlPVx1YzgwNFx1YzFhMSBcdWMxOGRcdWIzYzQgKFwgdTAzYjIpCit0cmFuc21pc3Npb25SYXRlVFQ9XHVjNzc4XHVhZDZjIFx1YWQ2Y1x1YzEzMVx1YzZkMCBcdWM5MTEgXHVhYzEwXHVjNWZjIFx1Y2RlOFx1YzU3ZCBcdWMwYzFcdWQwZGMgXHVjNzc4XHVjNmQwXHViNGU0XHVjNzc0IFx1YWMxMFx1YzVmYyBcdWMwYzFcdWQwZGMgXHVjNzc4XHVjNmQwXHViNGU0XHVhY2ZjIFx1YzgxMVx1ZDU1OFx1YjI5NCBcdWQ2OWZcdWMyMTgKK3RyYW5zbWlzc2lvblJhdGVVTklUPQorCisKK3JlZmVyZW5jZVBvcHVsYXRpb25EZW5zaXR5PVx1Y2MzOFx1Yzg3MCBcdWM3NzhcdWFkNmMgXHViYzAwXHViM2M0CityZWZlcmVuY2VQb3B1bGF0aW9uRGVuc2l0eVRUPVx1YzgwNFx1YzFhMSBcdWMxOGRcdWIzYzRcdWFjMDAgXHVjZTIxXHVjODE1XHViNDE4XHViMjk0IFx1Yzc3OFx1YWQ2YyBcdWJjMDBcdWIzYzQKK3JlZmVyZW5jZVBvcHVsYXRpb25EZW5zaXR5VU5JVD1QTSAvIFx1ZDNjOVx1YmMyOSBcdWQwYWNcdWI4NWNcdWJiZjhcdWQxMzAKKworbm9uTGluZWFyaXR5Q29lZmZpY2llbnQ9XHViZTQ0IFx1YzEyMFx1ZDYxNVx1YzEzMSBcdWFjYzRcdWMyMTgKK25vbkxpbmVhcml0eUNvZWZmaWNpZW50VFQ9XHViZTQ0XHVjMTIwXHVkNjE1IFx1YmFhOFx1YjM3OFx1YzVkMFx1YzExY1x1YjI5NCwgXHViY2Y0XHVkMWI1PiAxLjBcdWM3NzggXHVhY2JkXHVjNmIwIChcdWNkZThcdWM1N2QgXHVjNzc4XHVhZDZjIFx1YWQ2Y1x1YzEzMVx1YzZkMFx1YzVkMCBcdWIzMDBcdWQ1NWMgXHViYTc0XHVjNWVkIFx1Y2NiNFx1YWNjNFx1Yzc1OCBcdWQzZWNcdWQ2NTRcdWQ1NThcdWIyOTQpLCBcdWM4MDRcdWM1ZmMgXHVjODE1XHViM2M0XHViMjk0IFx1Yzc3NCBcdWJlNDRcdWM3MjhcdWI4NWMgXHVjODFjXHVhY2YxXHViNDI4Lgorbm9uTGluZWFyaXR5Q29lZmZpY2llbnRVTklUPVwgdTIyNjUgMC4wCisKK3JlY292ZXJ5UmF0ZT1cdWM4MDRcdWM1ZmMgXHViY2Y1XHVhZDZjIFx1YzE4ZFx1YjNjNCAoXCB1MDNiMykKK3JlY292ZXJ5UmF0ZVRUPVx1Yzc3OFx1YWQ2YyBcdWFkNmNcdWMxMzFcdWM2ZDBcdWI0ZTQgXHVjOTExIFx1YzgwNFx1YzVmYyBcdWMwYzFcdWQwZGNcdWM1ZDBcdWMxMWMgXHVjOGZkXHVjOWMwIFx1YzU0YVx1YWNlMCBcdWQ2OGNcdWJjZjVcdWQ1NThcdWIyOTQgXHVjMThkXHViM2M0CityZWNvdmVyeVJhdGVVTklUPVBNIC8gVFAgKgorCitpbmZlY3Rpb3VzTW9ydGFsaXR5UmF0ZT1cdWM4MDRcdWM1ZmMgXHVjMGFjXHViOWRkXHViOTYwIChcIHUwM2JjIEkpCitpbmZlY3Rpb3VzTW9ydGFsaXR5UmF0ZVRUPVx1Yzc3OFx1YWQ2YyBcdWFkNmNcdWMxMzFcdWM2ZDBcdWI0ZTQgXHVjOTExIFx1YzgwNFx1YzVmYyBcdWMwYzFcdWQwZGNcdWM1ZDBcdWMxMWMgXHVjNWI4XHVjODIwXHVhYzAwIFx1YzhmZFx1YWM3MFx1YjA5OCBcdWM4ZmRcdWIyOTQgXHVjMThkXHViM2M0CitpbmZlY3Rpb3VzTW9ydGFsaXR5UmF0ZVVOSVQ9UE0gLyBUUCAqCisKK2ltbXVuaXR5TG9zc1JhdGU9XHViYTc0XHVjNWVkXHViODI1IFx1YzE5MFx1YzJlNFx1YzcyOCAoXCB1MDNjMykKK2ltbXVuaXR5TG9zc1JhdGVUVD1cdWJjZjVcdWFkNmNcdWI0MWMgXHVjMGMxXHVkMGRjXHVjNzU4IFx1Yzc3OFx1YWQ2Y1x1YWMwMCBcdWJhNzRcdWM1ZWRcdWI4MjVcdWM3NDQgXHVjNzgzXHVhY2UwIFx1YWMxMFx1YzVmYyBcdWNkZThcdWM1N2RcdWQ1NWMgXHVjMGMxXHVkMGRjXHVhYzAwIFx1YjQxOFx1YjI5NCBcdWMxOGRcdWIzYzQuCitpbW11bml0eUxvc3NSYXRlVU5JVD1QTSAvIFRQICoKKworaW5jdWJhdGlvblJhdGU9XHViZDgwXHVkNjU0IFx1YzE4ZFx1YjNjNCAoXCB1MDNjNikKK2luY3ViYXRpb25SYXRlVFQ9XHVjNzc4XHVhZDZjIFx1YWQ2Y1x1YzEzMVx1YzZkMFx1YjRlNFx1Yzc3NCBcdWM5YzhcdWJjZDFcdWM1ZDAgXHViMTc4XHVjZDljXHViNDFjIFx1YzBjMVx1ZDBkY1x1YzVkMFx1YzExYyBcdWM4MDRcdWM1ZmMgXHVjMGMxXHVkMGRjXHViODVjIFx1YmNjMFx1ZDU1OFx1YjI5NCBcdWMxOGRcdWIzYzQuCitpbmN1YmF0aW9uUmF0ZVVOSVQ9UE0gLyBUUCAqCisKKworcmVsYXRpdmVUb2xlcmFuY2U9XHVjMGMxXHViMzAwXHVjODAxIFx1YjBiNFx1YzEzMQorcmVsYXRpdmVUb2xlcmFuY2VUVD1SdW5nZSBLdXR0YSBcdWM4MDFcdWM3NTEgc3RlcHNpemUgXHVjNTRjXHVhY2UwXHViOWFjXHVjOTk4XHVjNWQwXHVjMTFjIFx1YzBhY1x1YzZhOVx1ZDU1OFx1YjI5NCBcdWMwYzFcdWIzMDAgXHVjNjI0XHVjYzI4LgorcmVsYXRpdmVUb2xlcmFuY2VVTklUPQorCitmaW5pdGVEaWZmZXJlbmNlPVx1YzcyMFx1ZDU1YyBcdWNjMjhcdWM3NzQKK2Zpbml0ZURpZmZlcmVuY2VUVD1SdW5nZSBLdXR0YSBcdWIzMDBcdWMyZTAgXHVhYzA0XHViMmU4XHVkNTVjIFx1YmMyOVx1YmM5NSAoXHVjNzIwXHVkNTVjIFx1Y2MyOFx1Yzc3NClcdWI5N2MgXHVjMGFjXHVjNmE5XHVkNTU4XHVjNWVjIFx1YmJmOFx1YmQ4NCBcdWJjMjlcdWM4MTVcdWMyZGRcdWM3NDQgXHVkNTc0XHVhY2IwCitmaW5pdGVEaWZmZXJlbmNlVU5JVD0KKworZnJlcXVlbmN5RGVwZW5kZW50PVx1ZDY5Zlx1YzIxOFx1YzVkMCBcdWM4ODVcdWMxOGRcdWI0MWMKK2ZyZXF1ZW5jeURlcGVuZGVudFRUPVx1YzEyNFx1YzgxNVx1ZDU1OFx1YmE3NCwgIlx1ZDY5Zlx1YzIxOCBcdWM3NThcdWM4NzQgXHVjOWM4XHViY2QxIFx1YmFhOFx1YjM3OCJcdWM3NzQgIlx1YmMwMFx1YjNjNCBcdWM3NThcdWM4NzQgXHVjOWM4XHViY2QxIFx1YmFhOFx1YjM3OCIgXHViMzAwXHVjMmUwIFx1YzBhY1x1YzZhOVx1YjQyOVx1YjJjOFx1YjJlNAorZnJlcXVlbmN5RGVwZW5kZW50VU5JVD0KKwordGFyZ2V0SVNPS2V5PVx1YjMwMFx1YzBjMSBcdWQwYTQKK3RhcmdldElTT0tleVRUPVx1YjMwMFx1YzBjMSBJU08gXHVkMGE0Cit0YXJnZXRJU09VTklUPQorCitpbmZlY3Rpb3VzQ291bnQ9XHVjODA0XHVjNWZjIFx1ZDY5Zlx1YzIxOAoraW5mZWN0aW91c0NvdW50VFQ9XHVjODA0XHVjNWZjIFx1ZDY5Zlx1YzIxOCBcdWFjYzRcdWMwYjBcdWQyMzQgXHVkMzAxCitpbmZlY3Rpb3VzQ291bnRVTklUPQorCitpbm9jdWxhdGVkUGVyY2VudGFnZT1cdWM4MTFcdWM4ODUgXHViZTQ0XHVjNzI4Citpbm9jdWxhdGVkUGVyY2VudGFnZVRUPVx1YzgxMVx1Yzg4NSBcdWJlNDRcdWM3MjgKK2lub2N1bGF0ZWRQZXJjZW50YWdlVU5JVD0lCisKK2luZmVjdFBlcmNlbnRhZ2U9XHVjODA0XHVjNWZjIFx1YmU0NFx1YzcyOAoraW5mZWN0UGVyY2VudGFnZVRUPVx1YzgwNFx1YzVmYyBcdWJlNDRcdWM3MjgKK2luZmVjdFBlcmNlbnRhZ2VVTklUPSUKKworTkRpeldpekVycjA9XHVjOWM4XHViY2QxIFx1Yzc3NFx1Yjk4NCBcdWM1YzZcdWM3NGMKK05EaXpXaXpFcnIxPVx1Yzc3OFx1YWQ2YyBcdWMyZGRcdWJjYzRcdWM3OTBcdWFjMDAgXHVjNWM2XHVjNzRjLgorTkRpeldpekVycjI9XHVhZTMwXHVhYzA0IFx1YzVjNlx1Yzc0Yy4gCitORGl6V2l6RXJyMz1cdWFlMzBcdWFjMDRcdWM3NzQgXHVjNzk4XHViYWJiXHViNDE4XHVjNWM4XHVjNzRjLgorI05EaXpXaXpFcnI0PU1pc3NpbmcgQmFja2dyb3VuZCBNb3J0YWxpdHkgUmF0ZS4KKyNORGl6V2l6RXJyNT1CYWNrZ3JvdW5kIG1vcnRhbGl0eSByYXRlIGlzIGludmFsaWQuCitORGl6V2l6RXJyNj1cdWM4MDRcdWMxYTEgXHVjMThkXHViM2M0IFx1YzVjNlx1Yzc0YworTkRpeldpekVycjc9XHVjODA0XHVjMWExIFx1YzE4ZFx1YjNjNFx1YWMwMCBcdWM3OThcdWJhYmJcdWI0MThcdWM1YzhcdWM3NGMuCitORGl6V2l6RXJyOD1cdWJlNDQgLSBcdWMxMjBcdWQ2MTVcdWMxMzEgXHVhY2M0XHVjMjE4XHVhYzAwIFx1YzVjNlx1Yzc0YworTkRpeldpekVycjk9XHViZTQ0IFx1YzEyMFx1ZDYxNVx1YzEzMSBcdWFjYzRcdWMyMTggXHVjNjI0XHViOTU4CitORGl6V2l6RXJyMTA9XHVjODA0XHVjNWZjXHVjMTMxIFx1YmNmNVx1YWQ2YyBcdWMxOGRcdWIzYzQgXHVjNWM2XHVjNzRjCitORGl6V2l6RXJyMTE9XHVjODA0XHVjNWZjXHVjMTMxIFx1YmNmNVx1YWQ2YyBcdWMxOGRcdWIzYzQgXHVjNjI0XHViOTU4CitORGl6V2l6RXJyMTI9XHVjODA0XHVjNWZjXHVjMTMxIFx1YzBhY1x1YjlkZFx1Yjk2MCBcdWM1YzZcdWM3NGMKK05EaXpXaXpFcnIxMz1cdWM4MDRcdWM1ZmNcdWMxMzEgXHVjMGFjXHViOWRkXHViOTYwIFx1YzYyNFx1Yjk1OAorTkRpeldpekVycjE2PVx1YmE3NFx1YzVlZFx1YjgyNSBcdWMxOTBcdWMyZTRcdWM3MjggXHVjNWM2XHVjNzRjCitORGl6V2l6RXJyMTc9XHViMGI0XHVjMTMxIFx1YWMxMFx1YzE4YyBcdWMxOGRcdWIzYzQgXHVjNjI0XHViOTU4CitORGl6V2l6RXJyMTg9XHVjODExXHVjODg1IFx1YmU0NFx1YzcyOCBcdWM1YzZcdWM3NGMKK05EaXpXaXpFcnIxOT1cdWJkODBcdWQ2NTQgXHVjMThkXHViM2M0IFx1YzE4ZFx1YjNjNCBcdWM2MjRcdWI5NTgKK05EaXpXaXpFcnIyMD1cdWI1MTRcdWI4MDlcdWQxYTBcdWI5YWMgXHViNjEwXHViMjk0IFx1ZDMwY1x1Yzc3Y1x1Yzc3NCBcdWM4NzRcdWM3YWNcdWQ1NThcdWM5YzAgXHVjNTRhXHVjNzRjLgorTkRpeldpekVycjIxPVx1Yzc5OFx1YmFiYlx1YjQxYyBcdWIzNzBcdWM3NzRcdWQxMzAgXHVkNjE1XHVjMmRkCisjTkRpeldpekVycjIyPU1pc3NpbmcgcmVsYXRpdmUgdG9sZXJhbmNlCisjTkRpeldpekVycjIzPVJlbGF0aXZlIHRvbGVyYW5jZSBpcyBsZXNzIG9yIGVxdWFsIHRvIDAgb3IgdG9vIGxhcmdlCitORGl6V2l6RXJyMjQ9TWlzc2luZyBDaGFyYWN0ZXJpc3RpYyBNaXhpbmcgRGlzdGFuY2UuCitORGl6V2l6RXJyMjU9Q2hhcmFjdGVyaXN0aWMgTWl4aW5nIERpc3RhbmNlIGlzIGludmFsaWQuCitORGl6V2l6RXJyMjY9TWlzc2luZyBSZWZlcmVuY2UgUG9wdWxhdGlvbiBEZW5zaXR5LgorTkRpeldpekVycjI3PVJlZmVyZW5jZSBQb3B1bGF0aW9uIERlbnNpdHkgaXMgaW52YWxpZC4KK05EaXpXaXpFcnIyOD1NaXNzaW5nIFJvYWQgTmV0d29yayBJbmZlY3Rpb3VzIFByb3BvcnRpb24uCitORGl6V2l6RXJyMjk9Um9hZCBOZXR3b3JrIEluZmVjdGlvdXMgUHJvcG9ydGlvbiBpcyBpbnZhbGlkLgorTkRpeldpekVycjMwPU1pc3NpbmcgU2VlZC4KK05EaXpXaXpFcnIzMT1NaXNzaW5nIEdhaW4uCitETVBDMT1cdWM5YzhcdWJjZDEgXHViYWE4XHViMzc4IFx1YzE4ZFx1YzEzMSBcdWM4MWNcdWM1YjQKK0RNUEMyPSJcdWM1ZDAgXHViMzAwXHVkNTVjIFx1YzljOFx1YmNkMSBcdWMxOGRcdWMxMzEgXHVjNWQwXHViNTE0XHVkMTMwIFx1YzVjNlx1Yzc0YworRERDLjA9XHVjOWM4XHViY2QxIFx1YmFhOFx1YjM3OCA6CitEREMuMT1cdWFlMzBcdWJjMThcdWQ1NThcdWIyOTQgXHVjMjE4XHVkNTU5XHVjODAxIFx1YzljOFx1YmNkMSBcdWJhYThcdWIzNzgKK0REQy4yPVx1ZDA3NFx1Yjc5OFx1YzJhNAorRERDLjM9XHVjOWM4XHViY2QxIFx1YmFhOFx1YjM3OCBcdWMwYWNcdWI4NDAgXHVjMGRkXHVjMTMxIFx1YzkxMSBcdWJiMzhcdWM4MWMgXHViYzFjXHVjMGRkCitEREMuND1cdWIzNTRcdWJlMTRcdWI5YjAgXHVjZjU0XHVjNWI0IFx1YzBhY1x1Yjg0MCBcdWMwZGRcdWMxMzEgXHVjOTExIFx1YmIzOFx1YzgxYyBcdWJjMWNcdWMwZGQgCitOSW5mV2l6RXJyb3IuMT1cdWM4MDRcdWM1ZmMgXHVjNmQwXHVjNzc4XHVjNzQ0IFx1YzgxY1x1YWNmNVx1ZDU1YyBcdWM5YzhcdWJjZDFcdWM3NTggXHVjNzc0XHViOTg0IFx1YzVjNlx1Yzc0YworTkluZldpekVycm9yLjI9XHVjODA0XHVjNWZjXHViNDIwIFx1Yzc3OFx1YWQ2Y1x1Yzc1OCBcdWM3NzRcdWI5ODQgXHVjNWM2XHVjNzRjCitOSW5mV2l6RXJyb3IuMz1cdWM4MDRcdWM1ZmMgXHVkNjlmXHVjMjE4XHVhYzAwIFx1YzVjNlx1Yzc0Yy4KK05JbmZXaXpFcnJvci40PVRoZSBudW1iZXIgb2YgaW5mZWN0aW9ucy9pbm9jdWxhdGlvbnMgY2FuJ3QgYmUgbmVnYXRpdmUKK05JbmZXaXpFcnJvci41PVx1YzgwNFx1YzVmYyBcdWQ2OWZcdWMyMTggXHVjNjI0XHViOTU4IAorTkluZldpekVycm9yLjY9XHVjNzA0XHVjZTU4IFx1YzBhY1x1YzU5MSBcdWM1YzZcdWM3NGMKK05JbmZXaXpFcnJvci43PVx1YzgwNFx1YzVmY1x1Yzc1OCBcdWQ2OWZcdWMyMThcdWM3OTBcdWFjMDAgXHVjNzIwXHVkNmE4IFx1YzIyYlx1Yzc5MFx1YWMwMCBcdWM1NDRcdWIyZDgKK05JbmZXaXpFcnJvci44PVx1YzcyMFx1ZDZhOFx1ZDU1OFx1YzljMCBcdWM1NGFcdWM3NDAgXHViYzMxXHViZDg0XHVjNzI4LiA8MTAwLjAgJVx1Yzc3NFx1YzViNFx1YzU3Y1x1ZDU2OAorTkluZldpekVycm9yLjk9U1RFTSBcdWI4NWNcdWFkZjggXHVkMzBjXHVjNzdjXHVjNzc0IFx1ZDNlY1x1ZDU2OFx1YjQxYyBcdWQzZjRcdWIzNTRcdWI5N2MgXHVjNzg1XHViODI1XHVkNTU4XHVjMmVkXHVjMmRjXHVjNjI0CitOSW5mV2l6RXJyb3IuMTA9XHVkM2Y0XHViMzU0XHVhYzAwIFx1Yzg3NFx1YzdhY1x1ZDU1OFx1YzljMCBcdWM1NGFcdWM3NGMhCitOSW5mV2l6RXJyb3IuMTE9XHVjNzk4XHViYWJiXHViNDFjIFx1ZDU4OSBcdWJjODhcdWQ2MzgKKworTkluZldpekROPVx1YzljOFx1YmNkMSBcdWM3NzRcdWI5ODQgOgorTkluZldpekROVFQ9XHVjODA0XHVjNWZjXHViNDE4XHViMjk0IFx1YzljOFx1YmNkMVx1Yzc1OCBcdWM3NzRcdWI5ODQgKFx1YzYwOCwgXHVjNzc4XHVkNTBjXHViOGU4XHVjNWQ0XHVjNzkwKS4KK05JbmZXaXpQT1A9XHVjNzc4XHVhZDZjIDoKK05JbmZXaXpQT1BUVD1cdWM4MDRcdWM1ZmNcdWI0MWMgXHVjNzc4XHVhZDZjXHVjNzU4IFx1Yzc3NFx1Yjk4NCAoXHVjNjA4LCBcdWM3NzhcdWFjMDQpIAorTkluZldpek5JSU5GPVx1YzgwNFx1YzVmYyBcdWFjMWNcdWMyMTggOgorTkluZldpek5JSU5PPVx1YzgxMVx1Yzg4NSBcdWFjMWNcdWMyMTggOgorTkluZldpelBJSU5GPVx1YzgwNFx1YzVmYyBcdWJlNDRcdWM3MjggOgorTkluZldpelBJSU5PPVx1YzgxMVx1Yzg4NSBcdWJlNDRcdWM3MjggOgorTkluZldpei5hYnNudW1iZXI9XHVjODA4XHViMzAwIFx1YmM4OFx1ZDYzOFx1Yjk3YyBcdWMwYWNcdWM2YTkKK05JbmZXaXoucGVyY2VudGFnZT1cdWQzN2NcdWMxM2NcdWQyYjggXHVjMGFjXHVjNmE5CitOSW5mV2l6TklUVD1cdWM4MDRcdWM1ZmNcdWI0MWMgXHVjNzc4XHVhZDZkIFx1YWQ2Y1x1YzEzMVx1YzZkMCBcdWFjMWNcdWMyMTgKK05JbmZXaXpQaWNrTG9jPVx1YzcwNFx1Y2U1OCBcdWMxMjBcdWQwZGQKK05JbmZXaXpQaWNrTG9jVGl0bGU9XHVjODA0XHVjNWZjIChcdWI2MTBcdWIyOTQgXHVjODExXHVjODg1KSBcdWM3MDRcdWNlNThcdWI5N2MgXHVjMTIwXHVkMGRkIAorTkluZldpeklTT0s9XHVjNzA0XHVjZTU4IElTTyBcdWQwYTQgOgorTkluZmVjdG9yV2l6LmVudGVyPVx1YzIxOFx1YjNkOVx1YzczY1x1Yjg1YyBcdWM3ODVcdWI4MjUgKFx1YzBjMVx1YjJlOCkKK05JbmZlY3Rvcldpei5pbXBvcnQ9U1RFTSBcdWI4NWNcdWFkZjggXHVkMzBjXHVjNzdjIChcdWM1NDRcdWI3OTgpXHVjNWQwXHVjMTFjIFx1YWMwMFx1YzgzOFx1YzYyNFx1YWUzMAorTkluZldpekltcG9ydD1TVEVNIFx1Yjg1Y1x1YWRmOCBcdWQzZjRcdWIzNTQgXHVjMTIwXHVkMGRkCitOSW5mV2l6TG9nRGlyTGFiZWw9XHViODVjXHVhZGY4IFx1ZDNmNFx1YjM1NAorTkluZldpekxvZ0RpckRlc2M9U1RFTSBcdWI4NWNcdWFkZjggXHVkMzBjXHVjNzdjIFx1ZDNmNFx1YjM1NCBcdWMxMjBcdWQwZGQKK05JbmZlY3Rvcldpei5maXJzdHJvdz1cdWNjYWJcdWJjODhcdWM5ZjggXHVkNTg5CitOSW5mZWN0b3JXaXoubGFzdHJvdz1cdWI5YzhcdWM5YzBcdWI5YzkgXHVkNTg5CitOSW5mZWN0b3JXaXouc2VsZWN0ZWRyb3c9XHVjMTIwXHVkMGRkXHViNDFjIFx1ZDU4OQorCitBTEcuMD1cdWQ1NzRcdWFjYjBcdWMwYWMgXHVjNTRjXHVhY2UwXHViOWFjXHVjOTk4CitBTEcuMT1cdWFlMzBcdWJjMThcdWQ1NThcdWIyOTQgXHViYmY4XHViZDg0IFx1YmMyOVx1YzgxNVx1YzJkZCBcdWQ1NzRcdWFjYjBcdWMwYWMgXHVjNTRjXHVhY2UwXHViOWFjXHVjOTk4CitBTEcuMj1cdWM3MjBcdWQ1NWMgXHVjYzI4XHVjNzc0CitBTEcuMz1SdW5nZSBLdXR0YSBcdWM4MDFcdWM3NTEgXHViMmU4XHVhY2M0IFx1ZDA2Y1x1YWUzMAorCisjIEluaXRpYWxpemVyCitOSW5pdGlhbGl6ZXJXaXoucG9wdWxhdGlvbj1cdWM3NzhcdWFkNmMKK05Jbml0aWFsaXplcldpei5wb3B1bGF0aW9uLm1pc3Npbmc9TWlzc2luZyBQb3B1bGF0aW9uLgorTkluaXRpYWxpemVyV2l6LmxvY2F0aW9uPVx1YzcwNFx1Y2U1OCBcdWMxMjBcdWQwZGQKK05Jbml0aWFsaXplcldpei5sb2NhdGlvbi5taXNzaW5nPU1pc3NpbmcgTG9jYXRpb24uCitOSW5pdGlhbGl6ZXJXaXoudmFsdWVzLmludmFsaWQ9VmFsdWVzIGludmFsaWQuCitOSW5pdGlhbGl6ZXJXaXoudmFsdWVUeXBlPVR5cGUgb2YgVmFsdWVzCitOSW5pdGlhbGl6ZXJXaXouYWJzb2x1dGU9QWJzb2x1dGUgTnVtYmVycworTkluaXRpYWxpemVyV2l6LmZyYWN0aW9ucz1GcmFjdGlvbnMKKworIyBEdWJsaW4gQ29yZSBkZWZhdWx0IGRhdGEKK2RjX3RpdGxlX2luaXRpYWxpemVyPUluaXRpYWxpemVyCitkY19zb3VyY2VfaW5pdGlhbGl6ZXI9CitkY19kZXNjX2luaXRpYWxpemVyPUFuIGluaXRpYWxpemVyIHNwZWNpZmllcyB0aGUgaW5pdGlhbCBmcmFjdGlvbiBvZiBwb3B1bGF0aW9uIG1lbWJlcnMgaW4gZWFjaCBjb21wYXJ0bWVudCBvZiBhIGRpc2Vhc2UgbW9kZWwuCmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS93aXphcmRzL2Rpc2Vhc2V3aXphcmRtZXNzYWdlc196aC5wcm9wZXJ0aWVzIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvd2l6YXJkcy9kaXNlYXNld2l6YXJkbWVzc2FnZXNfemgucHJvcGVydGllcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNjlmNDM1Ci0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvd2l6YXJkcy9kaXNlYXNld2l6YXJkbWVzc2FnZXNfemgucHJvcGVydGllcwpAQCAtMCwwICsxLDIyNyBAQAorIyBkaXNlYXNld2l6YXJkbWVzc2FnZXMucHJvcGVydGllcworIworIy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjICogQ29weXJpZ2h0IChjKSAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorIyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyMgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyMgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorIyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisjICoKKyMgKiBDb250cmlidXRvcnM6CisjICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorIyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjIE5ldyBEaXNlYXNlIFdpemFyZAorCitORGlzZWFzZVdpei53aXphcmRfdGl0bGU9XHU2NWIwXHU1ZWZhXHU3NWJlXHU3NWM1CitORGlzZWFzZVdpei5wYWdlX3RpdGxlPVx1NzViZVx1NzVjNQorTkRpc2Vhc2VXaXoucGFnZV9kZXNjcmlwdGlvbj1cdTU3MjhcdTRlMDBcdTRlMmFcdTk4NzlcdTc2ZWVcdTRlMmRcdTViOWFcdTRlNDlcdTRlMDBcdTRlMmFcdTY1YjBcdTc2ODRcdTc1YmVcdTc1YzVcdTMwMDIKK05EaXNlYXNlV2l6LkRDX0RFU0NSSVBUSU9OPVx1NzVjNVx1MjAxY3swfVx1MjAxZAorCisjIE5ldyBJbmZlY3RvciBXaXphcmQKK05JbmZlY3Rvcldpei53aXphcmRfdGl0bGU9XHU2NWIwXHU1ZWZhXHU2MTFmXHU2N2QzL1x1NjNhNVx1NzljZFx1NzBiOQorTkluZmVjdG9yV2l6LnBhZ2VfdGl0bGU9XHU2MTFmXHU2N2QzXHU4MDA1LyBcdTYzYTVcdTc5Y2RcdTU2NjgKK05JbmZlY3Rvcldpei5wYWdlX2Rlc2NyaXB0aW9uPVx1NTcyOFx1NGUwMFx1NGUyYVx1OTg3OVx1NzZlZVx1NGUyZFx1NWI5YVx1NGU0OVx1NGUwMFx1NGUyYVx1NjViMFx1NzY4NFx1NjExZlx1NjdkM1x1NjIxNlx1NjNhNVx1NzljZFx1NzBiOVx1MzAwMgorTkluZmVjdG9yV2l6LkRDX0RFU0NSSVBUSU9OPVx1NTcyOCJ7M30iICh7NH0pIFx1NTczMFx1NjViOVx1ZmYwYyAiezJ9IiBcdTc1YmVcdTc1YzVcdTYxMWZcdTY3ZDNcdTRlODZ7MH0gInsxfSJcdTc5Y2RcdTdmYTRcdTYyMTBcdTU0NThcdTMwMDIKK05JbmZlY3Rvcldpei5EQ19ERVNDUklQVElPTjI9XHU2M2E1XHU3OWNkezB9XHUyMDFjezF9XHUyMDFkXHVmZjA1XHU3Njg0XHU3OWNkXHU3ZmE0XHU1NzI4XHU0ZjRkXHU3ZjZlXHUyMDFjezN9XHUyMDFkXHVmZjA4ezR9XHVmZjA5XHU1YmY5XHU2Mjk3XHU3NWJlXHU3NWM1XHUyMDFjezJ9XHUyMDFkXHUzMDAyCitOSW5mZWN0b3JXaXouRENfREVTQ1JJUFRJT05fRlJPTV9GSUxFPVx1NGVjZVx1NjVlNVx1NWZkN1x1NjU4N1x1NGVmNlx1NTcyOHswfVx1NGUyZFx1NzY4NFx1NjExZlx1NjdkM1x1NjU3MFx1NzZlZQorTkluZmVjdG9yV2l6LkRDX0RFU0NSSVBUSU9OMl9GUk9NX0ZJTEU9XHU0ZWNlXHU2NWU1XHU1ZmQ3XHU2NTg3XHU0ZWY2ezB9XHU2M2E1XHU3OWNkCitOSW5mZWN0b3JXaXouaW5mZWN0PVx1NTIxYlx1NWVmYVx1NGUwMFx1NGUyYVx1NjViMFx1NzY4NFx1NjExZlx1NjdkM1x1ODAwNQorTkluZmVjdG9yV2l6Lmlub2N1bGF0ZT1cdTUyMWJcdTVlZmFcdTRlMDBcdTRlMmFcdTY1YjBcdTc2ODRcdTYzYTVcdTc5Y2RcdTU2NjgKKworIyBOZXcgSW5pdGlhbGl6ZXIgV2l6YXJkCitOSW5pdGlhbGl6ZXJXaXoud2l6YXJkX3RpdGxlID0KK05Jbml0aWFsaXplcldpei5wYWdlX3RpdGxlID0KK05Jbml0aWFsaXplcldpei5wYWdlX2Rlc2NyaXB0aW9uID0KK05Jbml0aWFsaXplcldpei5EQ19ERVNDUklQVElPTiA9IAorCitORGlzZWFzZVdpei5kaXNlYXNlX2ZvbGRlcj1cdTc1YmVcdTc1YzUKKworUE1UUF9EZWYgPSAqUE0vVFAgPSBQb3B1bGF0aW9uIE1lbWJlci9UaW1lIFBlcmlvZAorCitwb3B1bGF0aW9uSWRlbnRpZmllcj1cdTc5Y2RcdTdmYTQKK3BvcHVsYXRpb25JZGVudGlmaWVyVFQ9XHU3NTMxXHU2NzJjXHU3NWM1XHU3Njg0XHU2MTFmXHU2N2QzXHU3Njg0XHU3OWNkXHU3ZmE0XHU3Njg0XHU1NDBkXHU3OWYwXHUzMDAyIFx1ZmYwOFx1NGY4Ylx1NTk4Mlx1ZmYwY1x1NGViYVx1ZmYwOQorcG9wdWxhdGlvbklkZW50aWZpZXJVTklUPQorCitjaGFyYWN0ZXJpc3RpY01peGluZ0Rpc3RhbmNlPVx1NzI3OVx1NWY4MVx1NmRmN1x1NTQwOFx1OGRkZFx1NzliYgorY2hhcmFjdGVyaXN0aWNNaXhpbmdEaXN0YW5jZVRUPVx1NjIyYVx1NmI2Mlx1OGRkZFx1NzliYlx1NTcyOFx1OGZkOVx1NGUyNFx1NGUyYVx1NTczMFx1NTMzYVx1OTBmZFx1NTE0NVx1NTIwNlx1NmRmN1x1NTQwOAorY2hhcmFjdGVyaXN0aWNNaXhpbmdEaXN0YW5jZVVOSVQ9XHU1MTZjXHU5MWNjCisKK3JvYWROZXR3b3JrSW5mZWN0aW91c1Byb3BvcnRpb249XHU0ZWNlXHU1MTZjXHU4ZGVmXHU0ZTBhXHU2NzY1XHU3Njg0XHU1M2Q3XHU2MTFmXHU2N2QzXHU3OWNkXHU3ZmE0XHU2YmQ0XHU0ZjhiCityb2FkTmV0d29ya0luZmVjdGlvdXNQcm9wb3J0aW9uVFQ9XHU5MDUzXHU4ZGVmXHU3ZjUxXHU3ZWRjXHU2MTFmXHU2N2QzXHU2YmQ0XHU0ZjhiCityb2FkTmV0d29ya0luZmVjdGlvdXNQcm9wb3J0aW9uVU5JVD1cdTRlMDBcdTkwZThcdTUyMDZcdTUxNmNcdThkZWYKKwordGltZVBlcmlvZD1cdTY1ZjZcdTk1ZjRcdTZiYjVcdWZmMDhUUFx1ZmYwOQordGltZVBlcmlvZFRUID0gVGhlIHRpbWUgcGVyaW9kIGZvciB0aGUgcmF0ZXMgKGUuZy4sIDg2NDAwMDAwbXMgPSAxIGRheSkuCisjdGltZVBlcmlvZFVOSVQgPSBEYXkocykKK3RpbWVQZXJpb2RVTklUPVx1NmJlYlx1NzlkMgorCitkaXNlYXNlTmFtZT1cdTc1YmVcdTc1YzVcdTU0MGRcdTc5ZjAKK2Rpc2Vhc2VOYW1lVFQ9XHU3NWJlXHU3NWM1XHU3Njg0XHU1NDBkXHU3OWYwXHUzMDAyXHVmZjA4XHU0ZjhiXHU1OTgyXHU2ZDQxXHU2MTFmXHVmZjA5CitkaXNlYXNlTmFtZVVOSVQ9CisKK3NlZWQ9XHU5NjhmXHU2NzNhXHU3OWNkXHU1YjUwCitzZWVkVFQ9XHU0ZTNhXHU5NjhmXHU2NzNhXHU2NTcwXHU1M2QxXHU3NTFmXHU1NjY4XHU2NGFkXHU3OWNkCitzZWVkVU5JVD0KKworcmFuZG9tR2VuZXJhdG9yPVx1OTY4Zlx1NjczYVx1NzUxZlx1NjIxMAorcmFuZG9tR2VuZXJhdG9yVFQ9CityYW5kb21HZW5lcmF0b3JVTklUPQorCitnYWluPVx1OTY4Zlx1NjczYVx1NTY2YVx1NThmMFx1NTg5ZVx1NzZjYQorZ2FpblRUPVx1NTY2YVx1NThmMFx1NWU0NVx1NWVhNlx1ZmYwOFx1NWU5NFx1OGJlNVx1NjYyZjxcdTMwMWMwLjAxXHVmZjA5CitnYWluVU5JVD0KKworaW5mZWN0aW91c01vcnRhbGl0eT1cdTRmMjBcdTY3ZDNcdTc1YzVcdTZiN2JcdTRlYTFcdTczODdcdWZmMDhYXHVmZjA5CitpbmZlY3Rpb3VzTW9ydGFsaXR5VFQ9XHU1NzI4XHU2MTFmXHU2N2QzXHU3MmI2XHU2MDAxXHU0ZTJkXHU2NzAwXHU3ZWM4XHU1YzA2XHU2YjdiXHU0ZWExXHU3Njg0XHU0ZTAwXHU1YzBmXHU5MGU4XHU1MjA2XHU3OWNkXHU3ZmE0XHU3Njg0XHU2MjEwXHU1NDU4XHU3Njg0XHU2YmQ0XHU3Mzg3XHUzMDAyIFx1ZmYwOFx1NGY4Ylx1NTk4Mlx1ZmYwYzJcdWZmMDkKK2luZmVjdGlvdXNNb3J0YWxpdHlVTklUPVx1NmJkNFx1NzM4NworCit0cmFuc21pc3Npb25SYXRlPVx1NGYyMFx1OGY5M1x1OTAxZlx1NzM4N1x1ZmYwOFx1MDNiMlx1ZmYwOQordHJhbnNtaXNzaW9uUmF0ZVRUPVx1NTcyOFx1NjYxM1x1NjExZlx1NjdkM1x1NzJiNlx1NjAwMVx1NTNkOFx1NjIxMFx1ODhhYlx1NjExZlx1NjdkM1x1ODAwY1x1NjcyYVx1NTNkMVx1NzVjNVx1NzJiNlx1NjAwMVx1NmJkNFx1NWRmMlx1N2VjZlx1NjExZlx1NjdkM1x1NzJiNlx1NjAwMVx1NzY4NFx1NGViYVx1NTQ1OAordHJhbnNtaXNzaW9uUmF0ZVVOSVQ9CisKKworcmVmZXJlbmNlUG9wdWxhdGlvbkRlbnNpdHk9XHU1M2MyXHU4MDAzXHU3OWNkXHU3ZmE0XHU1YmM2XHU1ZWE2CityZWZlcmVuY2VQb3B1bGF0aW9uRGVuc2l0eVRUPVx1NmQ0Ylx1OTFjZlx1NGYyMFx1NjRhZFx1OTAxZlx1NzM4N1x1NzY4NFx1NzljZFx1N2ZhNFx1NWJjNlx1NWVhNgorcmVmZXJlbmNlUG9wdWxhdGlvbkRlbnNpdHlVTklUPVBNL1NRIEtNCisKK25vbkxpbmVhcml0eUNvZWZmaWNpZW50PVx1OTc1ZVx1N2ViZlx1NjAyN1x1N2NmYlx1NjU3MAorbm9uTGluZWFyaXR5Q29lZmZpY2llbnRUVD1cdTU3MjhcdTk3NWVcdTdlYmZcdTYwMjdcdTZhMjFcdTU3OGJcdTRlMmRcdWZmMGNcdTkwMWFcdTVlMzhcdTU5MjdcdTRlOGUxXHVmZjA4XHU4ZmQ5XHU0ZTJhXHU0ZjUzXHU3M2IwXHU0ZTg2XHU2NjEzXHU2MTFmXHU2N2QzXHU3OWNkXHU3ZmE0XHU1MTRkXHU3NWFiXHU3Y2ZiXHU3ZWRmXHU3Njg0XHU5OTcxXHU1NDhjXHVmZjA5XHVmZjBjIFx1NjYxM1x1NjExZlx1NjdkM1x1N2NmYlx1NjU3MFx1NTNkOFx1NjIxMFx1NGU4Nlx1NWU0Mlx1N2NmYlx1NjU3MFx1MzAwMgorbm9uTGluZWFyaXR5Q29lZmZpY2llbnRVTklUPVx1MjI2NSAwLjAKKworcmVjb3ZlcnlSYXRlPVx1NGYyMFx1NjdkM1x1NzY4NFx1NWViN1x1NTkwZFx1NzM4N1x1ZmYwOFx1MDNiM1x1ZmYwOQorcmVjb3ZlcnlSYXRlVFQ9XHU1NzI4XHU4OGFiXHU2MTFmXHU2N2QzXHU3MmI2XHU2MDAxXHU3Njg0XHU3OWNkXHU3ZmE0XHU2MjEwXHU1NDU4XHU1OTgyXHU2NzljXHU2Y2ExXHU2NzA5XHU2YjdiXHU0ZWExXHVmZjBjXHU0ZjFhXHU0ZWU1XHU4ZmQ5XHU0ZTJhXHU5MDFmXHU3Mzg3XHU1ZWI3XHU1OTBkCityZWNvdmVyeVJhdGVVTklUPVBNL1RQKgorCitpbmZlY3Rpb3VzTW9ydGFsaXR5UmF0ZT1cdTRmMjBcdTY3ZDNcdTc2ODRcdTZiN2JcdTRlYTFcdTczODdcdWZmMDhcdTAzYmMgaVx1ZmYwOQoraW5mZWN0aW91c01vcnRhbGl0eVJhdGVUVD1cdTU3MjhcdTg4YWJcdTYxMWZcdTY3ZDNcdTcyYjZcdTYwMDFcdTc2ODRcdTc5Y2RcdTdmYTRcdTYyMTBcdTU0NThcdTY3MDBcdTdlYzhcdTRmMWFcdTRlZTVcdThmZDlcdTRlMmFcdTkwMWZcdTczODdcdTZiN2JcdTRlYTEKK2luZmVjdGlvdXNNb3J0YWxpdHlSYXRlVU5JVD1QTS9UUCoKKworaW1tdW5pdHlMb3NzUmF0ZT1cdTUxNGRcdTc1YWJcdTYzNWZcdTU5MzFcdTczODdcdWZmMDhcdTAzYzNcdWZmMDkKK2ltbXVuaXR5TG9zc1JhdGVUVD1cdTc5Y2RcdTdmYTRcdTYyMTBcdTU0NThcdTRlZTVcdThmZDlcdTRlMmFcdTkwMWZcdTczODdcdTRlY2VcdTU5MGRcdTU0NThcdTcyYjZcdTYwMDFcdTU2ZTBcdTRlM2FcdTRlMjJcdTU5MzFcdTUxNGRcdTc1YWJcdTgwZmRcdTUyOWJcdTgwMGNcdThmZGJcdTUxNjVcdTY2MTNcdTYxMWZcdTcyYjZcdTYwMDFcdTMwMDIKK2ltbXVuaXR5TG9zc1JhdGVVTklUPVBNL1RQKgorCitpbmN1YmF0aW9uUmF0ZT1cdTgwYjJcdTYyMTBcdTczODdcdWZmMDhcdTAzYzZcdWZmMDkKK2luY3ViYXRpb25SYXRlVFQ9XHU1NzI4XHU2MTFmXHU2N2QzXHU4MDBjXHU2NzJhXHU1M2QxXHU3NWM1XHU3MmI2XHU2MDAxXHU3Njg0XHU3OWNkXHU3ZmE0XHU2MjEwXHU1NDU4XHU2NzAwXHU3ZWM4XHU0ZjFhXHU0ZWU1XHU4ZmQ5XHU0ZTJhXHU5MDFmXHU3Mzg3XHU4ZmRiXHU1MTY1XHU2MTFmXHU2N2QzXHU3MmI2XHU2MDAxCitpbmN1YmF0aW9uUmF0ZVVOSVQ9UE0vVFAqCisKKworcmVsYXRpdmVUb2xlcmFuY2U9XHU3NmY4XHU1YmY5XHU1MTZjXHU1ZGVlCityZWxhdGl2ZVRvbGVyYW5jZVRUPVx1ODFlYVx1OTAwMlx1NWU5NFx1NmI2NVx1OTU3Zlx1NzY4NFx1OWY5OVx1NjgzY1x1NWU5M1x1NTg1NFx1N2I5N1x1NmNkNVx1NGY3Zlx1NzUyOFx1NzY4NFx1NzZmOFx1NWJmOVx1OGJlZlx1NWRlZVx1MzAwMgorcmVsYXRpdmVUb2xlcmFuY2VVTklUPQorCitmaW5pdGVEaWZmZXJlbmNlPVx1NjcwOVx1OTY1MFx1NWRlZVx1NTIwNgorZmluaXRlRGlmZmVyZW5jZVRUPVx1NGY3Zlx1NzUyOFx1N2I4MFx1NTMxNlx1NjViOVx1NmNkNVx1ZmYwOFx1NWRlZVx1NTIwNlx1ZmYwOVx1ZmYwY1x1ODAwY1x1NGUwZFx1NjYyZlx1OWY5OVx1NjgzY1x1NWU5M1x1NTg1NFx1NmM0Mlx1ODllM1x1NWZhZVx1NTIwNlx1NjViOVx1N2EwYgorZmluaXRlRGlmZmVyZW5jZVVOSVQ9CisKK2ZyZXF1ZW5jeURlcGVuZGVudD1cdTk4OTFcdTczODdcdTc2ZjhcdTUxNzMKK2ZyZXF1ZW5jeURlcGVuZGVudFRUPVx1NTk4Mlx1Njc5Y1x1OGJiZVx1NWI5YVx1ZmYwY1x1NGUwMFx1NGUyYVx1NGY5ZFx1NGU4ZVx1OTg5MVx1NzM4N1x1NzY4NFx1NzViZVx1NzVjNVx1NmEyMVx1NTc4Ylx1NWMzMVx1ODhhYlx1OTFjN1x1NzUyOFx1Njc2NVx1NTNkNlx1NGVlM1x1NGY5ZFx1OGQ1Nlx1NWJjNlx1NWVhNlx1NzY4NFx1NmEyMVx1NTc4YgorZnJlcXVlbmN5RGVwZW5kZW50VU5JVD0KKwordGFyZ2V0SVNPS2V5PVx1NzZlZVx1NjgwN1x1NGVlM1x1NzgwMQordGFyZ2V0SVNPS2V5VFQ9XHU3NmVlXHU2ODA3SVNPXHU0ZWUzXHU3ODAxCit0YXJnZXRJU09VTklUPQorCitpbmZlY3Rpb3VzQ291bnQ9XHU2MTFmXHU2N2QzXHU2NTcwCitpbmZlY3Rpb3VzQ291bnRUVD1cdTRmMjBcdTY3ZDNcdTYwMjdcdThiYTFcdTY1NzBcdTYzZDBcdTc5M2EKK2luZmVjdGlvdXNDb3VudFVOSVQ9CisKK2lub2N1bGF0ZWRQZXJjZW50YWdlPVx1NjNhNVx1NzljZFx1NzM4NworaW5vY3VsYXRlZFBlcmNlbnRhZ2VUVD1cdTYzYTVcdTc5Y2RcdTczODcKK2lub2N1bGF0ZWRQZXJjZW50YWdlVU5JVD1cdWZmMDUKKworaW5mZWN0UGVyY2VudGFnZT1cdTYxMWZcdTY3ZDNcdTZiZDRcdTRmOGIKK2luZmVjdFBlcmNlbnRhZ2VUVD1cdTYxMWZcdTY3ZDNcdTczODcKK2luZmVjdFBlcmNlbnRhZ2VVTklUPVx1ZmYwNQorCitORGl6V2l6RXJyMD1cdTdmM2FcdTVjMTFcdTc1YzVcdTU0MGRcdTMwMDIKK05EaXpXaXpFcnIxPVx1N2YzYVx1NWMxMVx1NzljZFx1N2ZhNFx1NjgwN1x1OGJjNlx1N2IyNlx1MzAwMgorTkRpeldpekVycjI9XHU3ZjNhXHU1YzExXHU0ZTAwXHU2YmI1XHU2NWY2XHU5NWY0XHUzMDAyCitORGl6V2l6RXJyMz1cdThiZTVcdTY1ZjZcdTk1ZjRcdTZiYjVcdTY2MmZcdTY1ZTBcdTY1NDhcdTc2ODRcdTMwMDIKKyNORGl6V2l6RXJyND1NaXNzaW5nIEJhY2tncm91bmQgTW9ydGFsaXR5IFJhdGUuCisjTkRpeldpekVycjU9QmFja2dyb3VuZCBtb3J0YWxpdHkgcmF0ZSBpcyBpbnZhbGlkLgorTkRpeldpekVycjY9XHU3ZjNhXHU1YzExXHU0ZjIwXHU4ZjkzXHU5MDFmXHU3Mzg3XHUzMDAyCitORGl6V2l6RXJyNz1cdTRmMjBcdTY0YWRcdTkwMWZcdTczODdcdTY2MmZcdTY1ZTBcdTY1NDhcdTc2ODRcdTMwMDIKK05EaXpXaXpFcnI4PVx1N2YzYVx1NWMxMVx1OTc1ZVx1N2ViZlx1NjAyN1x1N2NmYlx1NjU3MFx1MzAwMgorTkRpeldpekVycjk9XHU5NzVlXHU3ZWJmXHU2MDI3XHU1ZWE2XHU3Y2ZiXHU2NTcwXHU2NjJmXHU2NWUwXHU2NTQ4XHU3Njg0XHUzMDAyCitORGl6V2l6RXJyMTA9XHU3ZjNhXHU1YzExXHU0ZjIwXHU2N2QzXHU2MDI3XHU1NmRlXHU2NTM2XHU3Mzg3XHUzMDAyCitORGl6V2l6RXJyMTE9XHU2MTFmXHU2N2QzXHU2MDYyXHU1OTBkXHU3Mzg3XHU2NjJmXHU2NWUwXHU2NTQ4XHU3Njg0XHUzMDAyCitORGl6V2l6RXJyMTI9XHU3ZjNhXHU1YzExXHU0ZjIwXHU2N2QzXHU3NWM1XHU3Njg0XHU2YjdiXHU0ZWExXHU3Mzg3XHUzMDAyCitORGl6V2l6RXJyMTM9XHU2MTFmXHU2N2QzXHU2YjdiXHU0ZWExXHU3Mzg3XHU2NjJmXHU2NWUwXHU2NTQ4XHU3Njg0XHUzMDAyCitORGl6V2l6RXJyMTY9XHU3ZjNhXHU1YzExXHU1MTRkXHU3NWFiXHU2MzVmXHU1OTMxXHU3Mzg3XHUzMDAyCitORGl6V2l6RXJyMTc9XHU1MTRkXHU3NWFiXHU2MzVmXHU1OTMxXHU3Mzg3XHU2NjJmXHU2NWUwXHU2NTQ4XHU3Njg0XHUzMDAyCitORGl6V2l6RXJyMTg9XHU3ZjNhXHU1YzExXHU1Yjc1XHU1MzE2XHU3Mzg3XHUzMDAyCitORGl6V2l6RXJyMTk9XHU2M2E1XHU3OWNkXHU3Mzg3XHU2NWUwXHU2NTQ4CitORGl6V2l6RXJyMjA9XHU3NmVlXHU1ZjU1XHU2MjE2XHU2NTg3XHU0ZWY2XHU0ZTBkXHU1YjU4XHU1NzI4XHUzMDAyCitORGl6V2l6RXJyMjE9XHU2NWUwXHU2NTQ4XHU3Njg0XHU2NTcwXHU2MzZlXHU3YzdiXHU1NzhiXHUzMDAyCisjTkRpeldpekVycjIyPU1pc3NpbmcgcmVsYXRpdmUgdG9sZXJhbmNlCisjTkRpeldpekVycjIzPVJlbGF0aXZlIHRvbGVyYW5jZSBpcyBsZXNzIG9yIGVxdWFsIHRvIDAgb3IgdG9vIGxhcmdlCitORGl6V2l6RXJyMjQ9TWlzc2luZyBDaGFyYWN0ZXJpc3RpYyBNaXhpbmcgRGlzdGFuY2UuCitORGl6V2l6RXJyMjU9Q2hhcmFjdGVyaXN0aWMgTWl4aW5nIERpc3RhbmNlIGlzIGludmFsaWQuCitORGl6V2l6RXJyMjY9TWlzc2luZyBSZWZlcmVuY2UgUG9wdWxhdGlvbiBEZW5zaXR5LgorTkRpeldpekVycjI3PVJlZmVyZW5jZSBQb3B1bGF0aW9uIERlbnNpdHkgaXMgaW52YWxpZC4KK05EaXpXaXpFcnIyOD1NaXNzaW5nIFJvYWQgTmV0d29yayBJbmZlY3Rpb3VzIFByb3BvcnRpb24uCitORGl6V2l6RXJyMjk9Um9hZCBOZXR3b3JrIEluZmVjdGlvdXMgUHJvcG9ydGlvbiBpcyBpbnZhbGlkLgorTkRpeldpekVycjMwPU1pc3NpbmcgU2VlZC4KK05EaXpXaXpFcnIzMT1NaXNzaW5nIEdhaW4uCitETVBDMT1cdTc1YmVcdTc1YzVcdTZhMjFcdTU3OGJcdTc2ODRcdTVjNWVcdTYwMjdcdTYzYTdcdTUyMzYKK0RNUEMyPVx1N2YzYVx1NWMxMVx1MjAxY1x1NzViZVx1NzVjNVx1NWM1ZVx1NjAyN1x1N2YxNlx1OGY5MVx1NTY2OAorRERDLjA9XHU3NWJlXHU3NWM1XHU2YTIxXHU1NzhiXHVmZjFhCitEREMuMT1cdTU3ZmFcdTc4NDBcdTY1NzBcdTViNjZcdTc1YmVcdTc1YzVcdTZhMjFcdTU3OGIKK0REQy4yPVx1N2M3YgorRERDLjM9XHU1ZWZhXHU3YWNiXHU3NWJlXHU3NWM1XHU2YTIxXHU1NzhiXHU1YjllXHU0ZjhiXHU3Njg0XHU5NWVlXHU5ODk4CitEREMuND1cdTUyMWJcdTVlZmFcdTkwZmRcdTY3Y2ZcdTY3OTdcdTY4MzhcdTVmYzNcdTViOWVcdTRmOGJcdTc2ODRcdTk1ZWVcdTk4OTgKK05JbmZXaXpFcnJvci4xPVx1N2YzYVx1NWMxMVx1NGU4Nlx1OTAyMFx1NjIxMFx1NjExZlx1NjdkM1x1NzViZVx1NzVjNVx1NzY4NFx1NTQwZFx1NzlmMFx1MzAwMgorTkluZldpekVycm9yLjI9XHU3ZjNhXHU1YzExXHU1YzA2XHU4OTgxXHU2MTFmXHU2N2QzXHU3Njg0XHU3OWNkXHU3ZmE0XHU1NDBkXHU3OWYwCitOSW5mV2l6RXJyb3IuMz1cdTYxMWZcdTY3ZDNcdTRlYmFcdTY1NzBcdTRlMjJcdTU5MzEKK05JbmZXaXpFcnJvci40PVRoZSBudW1iZXIgb2YgaW5mZWN0aW9ucy9pbm9jdWxhdGlvbnMgY2FuJ3QgYmUgbmVnYXRpdmUKK05JbmZXaXpFcnJvci41PVx1NjExZlx1NjdkM1x1NGViYVx1NjU3MFx1NjVlMFx1NjU0OAorTkluZldpekVycm9yLjY9XHU3ZjNhXHU1YzExXHU2MzA3XHU1YjlhXHU3Njg0XHU0ZjRkXHU3ZjZlCitOSW5mV2l6RXJyb3IuNz1cdTUzZDdcdTYxMWZcdTY3ZDNcdTc2ODRcdTY1NzBcdTc2ZWVcdTRlMGRcdTY2MmZcdTRlMDBcdTRlMmFcdTY3MDlcdTY1NDhcdTc2ODRcdTY1NzBcdTViNTcKK05JbmZXaXpFcnJvci44PVx1NzY3ZVx1NTIwNlx1NmJkNFx1NjVlMFx1NjU0OFx1MzAwMlx1NWZjNVx1OTg3YjwxMDAuMFx1ZmYwNQorTkluZldpekVycm9yLjk9XHU4ZjkzXHU1MTY1XHU0ZTAwXHU0ZTJhXHU2NTg3XHU0ZWY2XHU1OTM5XHU1MzA1XHU1NDJiU1RFTVx1NjVlNVx1NWZkN1x1NjU4N1x1NGVmNgorTkluZldpekVycm9yLjEwPVx1NjU4N1x1NGVmNlx1NTkzOVx1NGUwZFx1NWI1OFx1NTcyOFx1ZmYwMQorTkluZldpekVycm9yLjExPVx1OTUxOVx1OGJlZlx1NzY4NFx1ODg0Y1x1NTNmNworCitOSW5mV2l6RE49XHU3NWJlXHU3NWM1XHU1NDBkXHU3OWYwXHVmZjFhCitOSW5mV2l6RE5UVD1cdTRmMjBcdTY3ZDNcdTc2ODRcdTc1YmVcdTc1YzVcdTc2ODRcdTU0MGRcdTc5ZjBcdWZmMDhcdTU5ODJcdTZkNDFcdTYxMWZcdWZmMDlcdTMwMDIKK05JbmZXaXpQT1A9XHU3OWNkXHU3ZmE0XHVmZjFhCitOSW5mV2l6UE9QVFQ9XHU3NTMxXHU2NzJjXHU3NWM1XHU3Njg0XHU2MTFmXHU2N2QzXHU3Njg0XHU3OWNkXHU3ZmE0XHU3Njg0XHU1NDBkXHU3OWYwXHUzMDAyIFx1ZmYwOFx1NGY4Ylx1NTk4Mlx1ZmYwY1x1NGViYVx1ZmYwOQorTkluZldpek5JSU5GPVx1ODk4MVx1NjExZlx1NjdkM1x1NzY4NFx1NjU3MFx1NzZlZQorTkluZldpek5JSU5PPVx1ODk4MVx1NjNhNVx1NzljZFx1NzY4NFx1NjU3MFx1NzZlZQorTkluZldpelBJSU5GPVx1NjExZlx1NjdkM1x1NzY3ZVx1NTIwNlx1NmJkNFx1ZmYxYQorTkluZldpelBJSU5PPVx1NjNhNVx1NzljZFx1NzY3ZVx1NTIwNlx1NmJkNFx1ZmYxYQorTkluZldpei5hYnNudW1iZXI9XHU0ZjdmXHU3NTI4XHU3ZWRkXHU1YmY5XHU1MDNjCitOSW5mV2l6LnBlcmNlbnRhZ2U9XHU0ZjdmXHU3NTI4XHU3NjdlXHU1MjA2XHU2YmQ0CitOSW5mV2l6TklUVD1cdTc5Y2RcdTdmYTRcdTYyMTBcdTU0NThcdTg4YWJcdTYxMWZcdTY3ZDNcdTc2ODRcdTY1NzBcdTc2ZWVcdTMwMDIKK05JbmZXaXpQaWNrTG9jPVx1OTAwOVx1NjJlOVx1NTczMFx1NzBiOQorTkluZldpelBpY2tMb2NUaXRsZT1cdTkwMDlcdTYyZTlcdTRlMDBcdTRlMmFcdTU3MzBcdTU3ZGZcdTY3NjVcdTYxMWZcdTY3ZDNcdWZmMDhcdTYyMTZcdTYzYTVcdTc5Y2RcdWZmMDkKK05JbmZXaXpJU09LPVx1NTczMFx1NzBiOVx1NzY4NElTT1x1NjgwN1x1NTNmN1x1ZmYxYQorTkluZmVjdG9yV2l6LmVudGVyPVx1NjI0Ylx1NTJhOFx1OGY5M1x1NTE2NVx1ZmYwOFx1NGUwYVx1ZmYwOQorTkluZmVjdG9yV2l6LmltcG9ydD1cdTRlY2VTVEVNXHU3Njg0XHU2NWU1XHU1ZmQ3XHU2NTg3XHU0ZWY2XHU0ZTJkXHU1ZjE1XHU1MTY1XHVmZjA4XHU4OWMxXHU0ZTBiXHVmZjA5CitOSW5mV2l6SW1wb3J0PVx1OTAwOVx1NjJlOVNURU1cdTY1ZTVcdTVmZDdcdTY1ODdcdTRlZjZcdTU5MzkKK05JbmZXaXpMb2dEaXJMYWJlbD1cdTY1ZTVcdTVmZDdcdTY1ODdcdTRlZjZcdTU5MzkKK05JbmZXaXpMb2dEaXJEZXNjPVx1OTAwOVx1NjJlOVx1NGUwMFx1NGUyYVNURU1cdTY1ZTVcdTVmZDdcdTY1ODdcdTRlZjZcdTc2ODRcdTY1ODdcdTRlZjZcdTU5MzkKK05JbmZlY3Rvcldpei5maXJzdHJvdz1cdTdiMmNcdTRlMDBcdTg4NGMKK05JbmZlY3Rvcldpei5sYXN0cm93PVx1NjcwMFx1NTQwZVx1NGUwMFx1NjM5MgorTkluZmVjdG9yV2l6LnNlbGVjdGVkcm93PVx1OTAwOVx1NWI5YVx1ODg0YworCitBTEcuMD1cdTZjNDJcdTg5ZTNcdTdiOTdcdTZjZDVcdWZmMWEKK0FMRy4xPVx1NTdmYVx1NjcyY1x1NWZhZVx1NTIwNlx1NjViOVx1N2EwYlx1NmM0Mlx1ODllM1x1N2I5N1x1NmNkNQorQUxHLjI9XHU2NzA5XHU5NjUwXHU1ZGVlXHU1MjA2CitBTEcuMz1cdTlmOTlcdTY4M2NcdTVlOTNcdTU4NTRcdTgxZWFcdTkwMDJcdTVlOTRcdTZiNjVcdTk1N2YKKworIyBJbml0aWFsaXplcgorTkluaXRpYWxpemVyV2l6LnBvcHVsYXRpb24gPQorTkluaXRpYWxpemVyV2l6LnBvcHVsYXRpb24ubWlzc2luZyA9CitOSW5pdGlhbGl6ZXJXaXoubG9jYXRpb24gPQorTkluaXRpYWxpemVyV2l6LmxvY2F0aW9uLm1pc3NpbmcgPQorTkluaXRpYWxpemVyV2l6LnZhbHVlcy5pbnZhbGlkID0gCitOSW5pdGlhbGl6ZXJXaXoudmFsdWVUeXBlID0KK05Jbml0aWFsaXplcldpei5hYnNvbHV0ZSA9CitOSW5pdGlhbGl6ZXJXaXouZnJhY3Rpb25zID0KKworIyBEdWJsaW4gQ29yZSBkZWZhdWx0IGRhdGEKK2RjX3RpdGxlX2luaXRpYWxpemVyID0KK2RjX3NvdXJjZV9pbml0aWFsaXplciA9CitkY19kZXNjX2luaXRpYWxpemVyID0KZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5pbnRlcnZlbnRpb25zLy5jbGFzc3BhdGggYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuaW50ZXJ2ZW50aW9ucy8uY2xhc3NwYXRoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEyMWU1MjcKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuaW50ZXJ2ZW50aW9ucy8uY2xhc3NwYXRoCkBAIC0wLDAgKzEsNyBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxjbGFzc3BhdGg+CisJPGNsYXNzcGF0aGVudHJ5IGtpbmQ9InNyYyIgcGF0aD0ic3JjIi8+CisJPGNsYXNzcGF0aGVudHJ5IGtpbmQ9ImNvbiIgcGF0aD0ib3JnLmVjbGlwc2UuamR0LmxhdW5jaGluZy5KUkVfQ09OVEFJTkVSL29yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC5kZWJ1Zy51aS5sYXVuY2hlci5TdGFuZGFyZFZNVHlwZS9KYXZhU0UtMS42Ii8+CisJPGNsYXNzcGF0aGVudHJ5IGtpbmQ9ImNvbiIgcGF0aD0ib3JnLmVjbGlwc2UucGRlLmNvcmUucmVxdWlyZWRQbHVnaW5zIi8+CisJPGNsYXNzcGF0aGVudHJ5IGtpbmQ9Im91dHB1dCIgcGF0aD0iYmluIi8+Cis8L2NsYXNzcGF0aD4KZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5pbnRlcnZlbnRpb25zLy5wcm9qZWN0IGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmludGVydmVudGlvbnMvLnByb2plY3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGZjNDAxYQotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5pbnRlcnZlbnRpb25zLy5wcm9qZWN0CkBAIC0wLDAgKzEsMjggQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8cHJvamVjdERlc2NyaXB0aW9uPgorCTxuYW1lPm9yZy5lY2xpcHNlLnN0ZW0udWkuaW50ZXJ2ZW50aW9uczwvbmFtZT4KKwk8Y29tbWVudD48L2NvbW1lbnQ+CisJPHByb2plY3RzPgorCTwvcHJvamVjdHM+CisJPGJ1aWxkU3BlYz4KKwkJPGJ1aWxkQ29tbWFuZD4KKwkJCTxuYW1lPm9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFidWlsZGVyPC9uYW1lPgorCQkJPGFyZ3VtZW50cz4KKwkJCTwvYXJndW1lbnRzPgorCQk8L2J1aWxkQ29tbWFuZD4KKwkJPGJ1aWxkQ29tbWFuZD4KKwkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5NYW5pZmVzdEJ1aWxkZXI8L25hbWU+CisJCQk8YXJndW1lbnRzPgorCQkJPC9hcmd1bWVudHM+CisJCTwvYnVpbGRDb21tYW5kPgorCQk8YnVpbGRDb21tYW5kPgorCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLlNjaGVtYUJ1aWxkZXI8L25hbWU+CisJCQk8YXJndW1lbnRzPgorCQkJPC9hcmd1bWVudHM+CisJCTwvYnVpbGRDb21tYW5kPgorCTwvYnVpbGRTcGVjPgorCTxuYXR1cmVzPgorCQk8bmF0dXJlPm9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFuYXR1cmU8L25hdHVyZT4KKwkJPG5hdHVyZT5vcmcuZWNsaXBzZS5wZGUuUGx1Z2luTmF0dXJlPC9uYXR1cmU+CisJPC9uYXR1cmVzPgorPC9wcm9qZWN0RGVzY3JpcHRpb24+CmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuaW50ZXJ2ZW50aW9ucy9NRVRBLUlORi9NQU5JRkVTVC5NRiBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5pbnRlcnZlbnRpb25zL01FVEEtSU5GL01BTklGRVNULk1GCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI3Zjk3NjYKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuaW50ZXJ2ZW50aW9ucy9NRVRBLUlORi9NQU5JRkVTVC5NRgpAQCAtMCwwICsxLDIxIEBACitNYW5pZmVzdC1WZXJzaW9uOiAxLjAKK0J1bmRsZS1NYW5pZmVzdFZlcnNpb246IDIKK0J1bmRsZS1OYW1lOiAlcGx1Z2luTmFtZQorQnVuZGxlLVN5bWJvbGljTmFtZTogb3JnLmVjbGlwc2Uuc3RlbS51aS5pbnRlcnZlbnRpb25zO3NpbmdsZXRvbjo9dHJ1ZQorQnVuZGxlLVZlcnNpb246IDEuMi4xCitCdW5kbGUtQ2xhc3NQYXRoOiAuCitCdW5kbGUtQWN0aXZhdG9yOiBvcmcuZWNsaXBzZS5zdGVtLmludGVydmVudGlvbnMucHJlc2VudGF0aW9uLkludGVydmVudGlvbnNFZGl0b3JQbHVnaW4kSW1wbGVtZW50YXRpb24KK0J1bmRsZS1WZW5kb3I6ICVwcm92aWRlck5hbWUKK0J1bmRsZS1Mb2NhbGl6YXRpb246IHBsdWdpbgorQnVuZGxlLVJlcXVpcmVkRXhlY3V0aW9uRW52aXJvbm1lbnQ6IEphdmFTRS0xLjYKK0V4cG9ydC1QYWNrYWdlOiBvcmcuZWNsaXBzZS5zdGVtLmludGVydmVudGlvbnMucHJlc2VudGF0aW9uCitSZXF1aXJlLUJ1bmRsZTogb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLAorIG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzO3Zpc2liaWxpdHk6PXJlZXhwb3J0LAorIG9yZy5lY2xpcHNlLnN0ZW0uaW50ZXJ2ZW50aW9uczt2aXNpYmlsaXR5Oj1yZWV4cG9ydCwKKyBvcmcuZWNsaXBzZS5lbWYuZWNvcmUueG1pO3Zpc2liaWxpdHk6PXJlZXhwb3J0LAorIG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpO3Zpc2liaWxpdHk6PXJlZXhwb3J0LAorIG9yZy5lY2xpcHNlLnVpLmlkZTt2aXNpYmlsaXR5Oj1yZWV4cG9ydCwKKyBvcmcuZWNsaXBzZS5zdGVtLmNvcmU7dmlzaWJpbGl0eTo9cmVleHBvcnQsCisgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLmVkaXQ7dmlzaWJpbGl0eTo9cmVleHBvcnQsCisgb3JnLmVjbGlwc2Uuc3RlbS51aS5ncmFwaGdlbmVyYXRvcnMKK0J1bmRsZS1BY3RpdmF0aW9uUG9saWN5OiBsYXp5CmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuaW50ZXJ2ZW50aW9ucy9idWlsZC5wcm9wZXJ0aWVzIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmludGVydmVudGlvbnMvYnVpbGQucHJvcGVydGllcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYzIwMDRkCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmludGVydmVudGlvbnMvYnVpbGQucHJvcGVydGllcwpAQCAtMCwwICsxLDE3IEBACisKKyMgPGNvcHlyaWdodD4KKyMgPC9jb3B5cmlnaHQ+CisjCisjICRJZCQKKworYmluLmluY2x1ZGVzID0gLixcCisgICAgICAgICAgICAgICBpY29ucy8sXAorICAgICAgICAgICAgICAgTUVUQS1JTkYvLFwKKyAgICAgICAgICAgICAgIHBsdWdpbi54bWwsXAorICAgICAgICAgICAgICAgcGx1Z2luLnByb3BlcnRpZXMsXAorICAgICAgICAgICAgICAgcGx1Z2luX3poLnByb3BlcnRpZXMsXAorICAgICAgICAgICAgICAgcGx1Z2luX2tyLnByb3BlcnRpZXMsXAorICAgICAgICAgICAgICAgcGx1Z2luX2RlLnByb3BlcnRpZXMKK2phcnMuY29tcGlsZS5vcmRlciA9IC4KK3NvdXJjZS4uID0gc3JjLworb3V0cHV0Li4gPSBiaW4vCmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuaW50ZXJ2ZW50aW9ucy9pY29ucy9mdWxsL29iajE2L0dyYXBoZ2VuZXJhdG9yc01vZGVsRmlsZS5naWYgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuaW50ZXJ2ZW50aW9ucy9pY29ucy9mdWxsL29iajE2L0dyYXBoZ2VuZXJhdG9yc01vZGVsRmlsZS5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTM1ZDQwMQotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5pbnRlcnZlbnRpb25zL2ljb25zL2Z1bGwvb2JqMTYvR3JhcGhnZW5lcmF0b3JzTW9kZWxGaWxlLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuaW50ZXJ2ZW50aW9ucy9pY29ucy9mdWxsL29iajE2L0ludGVydmVudGlvbnNNb2RlbEZpbGUuZ2lmIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmludGVydmVudGlvbnMvaWNvbnMvZnVsbC9vYmoxNi9JbnRlcnZlbnRpb25zTW9kZWxGaWxlLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMDJmNjVlCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmludGVydmVudGlvbnMvaWNvbnMvZnVsbC9vYmoxNi9JbnRlcnZlbnRpb25zTW9kZWxGaWxlLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuaW50ZXJ2ZW50aW9ucy9pY29ucy9mdWxsL3dpemJhbi9OZXdHcmFwaGdlbmVyYXRvcnMuZ2lmIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmludGVydmVudGlvbnMvaWNvbnMvZnVsbC93aXpiYW4vTmV3R3JhcGhnZW5lcmF0b3JzLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YWM2NDU3Ci0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmludGVydmVudGlvbnMvaWNvbnMvZnVsbC93aXpiYW4vTmV3R3JhcGhnZW5lcmF0b3JzLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuaW50ZXJ2ZW50aW9ucy9pY29ucy9mdWxsL3dpemJhbi9OZXdJbnRlcnZlbnRpb25zLmdpZiBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5pbnRlcnZlbnRpb25zL2ljb25zL2Z1bGwvd2l6YmFuL05ld0ludGVydmVudGlvbnMuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU2ODg3NGEKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuaW50ZXJ2ZW50aW9ucy9pY29ucy9mdWxsL3dpemJhbi9OZXdJbnRlcnZlbnRpb25zLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuaW50ZXJ2ZW50aW9ucy9wbHVnaW4ucHJvcGVydGllcyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5pbnRlcnZlbnRpb25zL3BsdWdpbi5wcm9wZXJ0aWVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhkNWZiMDEKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuaW50ZXJ2ZW50aW9ucy9wbHVnaW4ucHJvcGVydGllcwpAQCAtMCwwICsxLDYzIEBACisKKyMgPGNvcHlyaWdodD4KKyMgPC9jb3B5cmlnaHQ+CisjCisjICRJZCQKKworcGx1Z2luTmFtZSA9IEludGVydmVudGlvbnMgRWRpdG9yCitwcm92aWRlck5hbWUgPSB3d3cuZXhhbXBsZS5vcmcKKworX1VJX0ludGVydmVudGlvbnNFZGl0b3JfbWVudSA9ICZJbnRlcnZlbnRpb25zIEVkaXRvcgorCitfVUlfQ3JlYXRlQ2hpbGRfbWVudV9pdGVtID0gJk5ldyBDaGlsZAorX1VJX0NyZWF0ZVNpYmxpbmdfbWVudV9pdGVtID0gTiZldyBTaWJsaW5nCisKK19VSV9TaG93UHJvcGVydGllc1ZpZXdfbWVudV9pdGVtID0gU2hvdyAmUHJvcGVydGllcyBWaWV3CitfVUlfUmVmcmVzaFZpZXdlcl9tZW51X2l0ZW0gPSAmUmVmcmVzaAorCitfVUlfU2VsZWN0aW9uUGFnZV9sYWJlbCA9IFNlbGVjdGlvbgorX1VJX1BhcmVudFBhZ2VfbGFiZWwgPSBQYXJlbnQKK19VSV9MaXN0UGFnZV9sYWJlbCA9IExpc3QKK19VSV9UcmVlUGFnZV9sYWJlbCA9IFRyZWUKK19VSV9UYWJsZVBhZ2VfbGFiZWwgPSBUYWJsZQorX1VJX1RyZWVXaXRoQ29sdW1uc1BhZ2VfbGFiZWwgPSBUcmVlIHdpdGggQ29sdW1ucworX1VJX09iamVjdENvbHVtbl9sYWJlbCA9IE9iamVjdAorX1VJX1NlbGZDb2x1bW5fbGFiZWwgPSBTZWxmCisKK19VSV9Ob09iamVjdFNlbGVjdGVkID0gU2VsZWN0ZWQgTm90aGluZworX1VJX1NpbmdsZU9iamVjdFNlbGVjdGVkID0gU2VsZWN0ZWQgT2JqZWN0OiB7MH0KK19VSV9NdWx0aU9iamVjdFNlbGVjdGVkID0gU2VsZWN0ZWQgezB9IE9iamVjdHMKKworX1VJX09wZW5FZGl0b3JFcnJvcl9sYWJlbCA9IE9wZW4gRWRpdG9yCisKK19VSV9XaXphcmRfY2F0ZWdvcnkgPSBFeGFtcGxlIEVNRiBNb2RlbCBDcmVhdGlvbiBXaXphcmRzCisKK19VSV9DcmVhdGVNb2RlbEVycm9yX21lc3NhZ2UgPSBQcm9ibGVtcyBlbmNvdW50ZXJlZCBpbiBmaWxlICJ7MH0iCisKK19VSV9JbnRlcnZlbnRpb25zTW9kZWxXaXphcmRfbGFiZWwgPSBJbnRlcnZlbnRpb25zIE1vZGVsCitfVUlfSW50ZXJ2ZW50aW9uc01vZGVsV2l6YXJkX2Rlc2NyaXB0aW9uID0gQ3JlYXRlIGEgbmV3IEludGVydmVudGlvbnMgbW9kZWwKKworX1VJX0ludGVydmVudGlvbnNFZGl0b3JfbGFiZWwgPSBJbnRlcnZlbnRpb25zIE1vZGVsIEVkaXRvcgorCitfVUlfSW50ZXJ2ZW50aW9uc0VkaXRvckZpbGVuYW1lRGVmYXVsdEJhc2UgPSBNeQorX1VJX0ludGVydmVudGlvbnNFZGl0b3JGaWxlbmFtZUV4dGVuc2lvbnMgPSBpbnRlcnZlbnRpb25zCisKK19VSV9XaXphcmRfbGFiZWwgPSBOZXcKKworX1dBUk5fRmlsZW5hbWVFeHRlbnNpb24gPSBUaGUgZmlsZSBuYW1lIG11c3QgZW5kIGluICcnLnswfScnCitfV0FSTl9GaWxlbmFtZUV4dGVuc2lvbnMgPSBUaGUgZmlsZSBuYW1lIG11c3QgaGF2ZSBvbmUgb2YgdGhlIGZvbGxvd2luZyBleHRlbnNpb25zOiB7MH0KKworX1VJX01vZGVsT2JqZWN0ID0gJk1vZGVsIE9iamVjdAorX1VJX1hNTEVuY29kaW5nID0gJlhNTCBFbmNvZGluZworX1VJX1hNTEVuY29kaW5nQ2hvaWNlcyA9IFVURi04IEFTQ0lJIFVURi0xNiBVVEYtMTZCRSBVVEYtMTZMRSBJU08tODg1OS0xCitfVUlfV2l6YXJkX2luaXRpYWxfb2JqZWN0X2Rlc2NyaXB0aW9uID0gU2VsZWN0IGEgbW9kZWwgb2JqZWN0IHRvIGNyZWF0ZQorCitfVUlfRmlsZUNvbmZsaWN0X2xhYmVsID0gRmlsZSBDb25mbGljdAorX1dBUk5fRmlsZUNvbmZsaWN0ID0gVGhlcmUgYXJlIHVuc2F2ZWQgY2hhbmdlcyB0aGF0IGNvbmZsaWN0IHdpdGggY2hhbmdlcyBtYWRlIG91dHNpZGUgdGhlIGVkaXRvci4gIERvIHlvdSB3aXNoIHRvIGRpc2NhcmQgdGhpcyBlZGl0b3IncyBjaGFuZ2VzPworCitfVUlfR3JhcGhnZW5lcmF0b3JzRWRpdG9yX21lbnUgPSAmR3JhcGhnZW5lcmF0b3JzIEVkaXRvcgorX1VJX0dyYXBoZ2VuZXJhdG9yc01vZGVsV2l6YXJkX2xhYmVsID0gR3JhcGhnZW5lcmF0b3JzIE1vZGVsCitfVUlfR3JhcGhnZW5lcmF0b3JzTW9kZWxXaXphcmRfZGVzY3JpcHRpb24gPSBDcmVhdGUgYSBuZXcgR3JhcGhnZW5lcmF0b3JzIG1vZGVsCitfVUlfR3JhcGhnZW5lcmF0b3JzRWRpdG9yX2xhYmVsID0gR3JhcGhnZW5lcmF0b3JzIE1vZGVsIEVkaXRvcgorX1VJX0dyYXBoZ2VuZXJhdG9yc0VkaXRvckZpbGVuYW1lRGVmYXVsdEJhc2UgPSBNeQorX1VJX0dyYXBoZ2VuZXJhdG9yc0VkaXRvckZpbGVuYW1lRXh0ZW5zaW9ucyA9IGdyYXBoZ2VuZXJhdG9ycwpkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmludGVydmVudGlvbnMvcGx1Z2luLnhtbCBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5pbnRlcnZlbnRpb25zL3BsdWdpbi54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTI5NDVlMgotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5pbnRlcnZlbnRpb25zL3BsdWdpbi54bWwKQEAgLTAsMCArMSwzOSBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzw/ZWNsaXBzZSB2ZXJzaW9uPSIzLjAiPz4KKworPCEtLQorIDxjb3B5cmlnaHQ+CisgPC9jb3B5cmlnaHQ+CisKKyAkSWQkCistLT4KKworPHBsdWdpbj4KKworICAgPGV4dGVuc2lvbiBwb2ludD0ib3JnLmVjbGlwc2UudWkubmV3V2l6YXJkcyI+CisgICAgICA8Y2F0ZWdvcnkKKyAgICAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5lbWYuZWNvcmUuV2l6YXJkLmNhdGVnb3J5LklEIgorICAgICAgICAgICAgbmFtZT0iJV9VSV9XaXphcmRfY2F0ZWdvcnkiLz4KKyAgICAgIDx3aXphcmQKKyAgICAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5zdGVtLmludGVydmVudGlvbnMucHJlc2VudGF0aW9uLkludGVydmVudGlvbnNNb2RlbFdpemFyZElEIgorICAgICAgICAgICAgbmFtZT0iJV9VSV9JbnRlcnZlbnRpb25zTW9kZWxXaXphcmRfbGFiZWwiCisgICAgICAgICAgICBjbGFzcz0ib3JnLmVjbGlwc2Uuc3RlbS5pbnRlcnZlbnRpb25zLnByZXNlbnRhdGlvbi5JbnRlcnZlbnRpb25zTW9kZWxXaXphcmQiCisgICAgICAgICAgICBjYXRlZ29yeT0ib3JnLmVjbGlwc2UuZW1mLmVjb3JlLldpemFyZC5jYXRlZ29yeS5JRCIKKyAgICAgICAgICAgIGljb249Imljb25zL2Z1bGwvb2JqMTYvSW50ZXJ2ZW50aW9uc01vZGVsRmlsZS5naWYiPgorICAgICAgICAgPGRlc2NyaXB0aW9uPiVfVUlfSW50ZXJ2ZW50aW9uc01vZGVsV2l6YXJkX2Rlc2NyaXB0aW9uPC9kZXNjcmlwdGlvbj4KKyAgICAgICAgIDxzZWxlY3Rpb24gY2xhc3M9Im9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklSZXNvdXJjZSIvPgorICAgICAgPC93aXphcmQ+CisgICA8L2V4dGVuc2lvbj4KKworICAgPGV4dGVuc2lvbiBwb2ludD0ib3JnLmVjbGlwc2UudWkuZWRpdG9ycyI+CisgICAgICA8ZWRpdG9yCisgICAgICAgICAgICBpZD0ib3JnLmVjbGlwc2Uuc3RlbS5pbnRlcnZlbnRpb25zLnByZXNlbnRhdGlvbi5JbnRlcnZlbnRpb25zRWRpdG9ySUQiCisgICAgICAgICAgICBuYW1lPSIlX1VJX0ludGVydmVudGlvbnNFZGl0b3JfbGFiZWwiCisgICAgICAgICAgICBpY29uPSJpY29ucy9mdWxsL29iajE2L0ludGVydmVudGlvbnNNb2RlbEZpbGUuZ2lmIgorICAgICAgICAgICAgZXh0ZW5zaW9ucz0iaW50ZXJ2ZW50aW9ucyIKKyAgICAgICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS5zdGVtLmludGVydmVudGlvbnMucHJlc2VudGF0aW9uLkludGVydmVudGlvbnNFZGl0b3IiCisgICAgICAgICAgICBjb250cmlidXRvckNsYXNzPSJvcmcuZWNsaXBzZS5zdGVtLmludGVydmVudGlvbnMucHJlc2VudGF0aW9uLkludGVydmVudGlvbnNBY3Rpb25CYXJDb250cmlidXRvciI+CisgICAgICA8L2VkaXRvcj4KKyAgIDwvZXh0ZW5zaW9uPgorCis8L3BsdWdpbj4KZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5pbnRlcnZlbnRpb25zL3BsdWdpbl9kZS5wcm9wZXJ0aWVzIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmludGVydmVudGlvbnMvcGx1Z2luX2RlLnByb3BlcnRpZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmQzNTMzNQotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5pbnRlcnZlbnRpb25zL3BsdWdpbl9kZS5wcm9wZXJ0aWVzCkBAIC0wLDAgKzEsNjMgQEAKKworIyA8Y29weXJpZ2h0PgorIyA8L2NvcHlyaWdodD4KKyMKKyMgJElkJAorCitwbHVnaW5OYW1lPUludGVydmVudGlvbnMgRWRpdG9yCitwcm92aWRlck5hbWU9d3d3LmV4YW1wbGUub3JnCisKK19VSV9JbnRlcnZlbnRpb25zRWRpdG9yX21lbnU9JkludGVydmVudGlvbnMgRWRpdG9yCisKK19VSV9DcmVhdGVDaGlsZF9tZW51X2l0ZW09Jk5ldyBDaGlsZAorX1VJX0NyZWF0ZVNpYmxpbmdfbWVudV9pdGVtPU4mZXVlcyBHZXNjaHdpc3RlcnRlaWwKKworX1VJX1Nob3dQcm9wZXJ0aWVzVmlld19tZW51X2l0ZW09U2hvdyAmIFByb3BlcnRpZXMgVmlldworX1VJX1JlZnJlc2hWaWV3ZXJfbWVudV9pdGVtPSZSZWZyZXNoCisKK19VSV9TZWxlY3Rpb25QYWdlX2xhYmVsPUF1c3dhaGwKK19VSV9QYXJlbnRQYWdlX2xhYmVsPUVsdGVybnRlaWwKK19VSV9MaXN0UGFnZV9sYWJlbD1MaXN0ZQorX1VJX1RyZWVQYWdlX2xhYmVsPUJhdW0KK19VSV9UYWJsZVBhZ2VfbGFiZWw9VGFiZWxsZQorX1VJX1RyZWVXaXRoQ29sdW1uc1BhZ2VfbGFiZWw9QmF1bSBtaXQgU3BhbHRlbgorX1VJX09iamVjdENvbHVtbl9sYWJlbD1PYmpla3QKK19VSV9TZWxmQ29sdW1uX2xhYmVsPVNlbGJzdAorCitfVUlfTm9PYmplY3RTZWxlY3RlZD1OaWNodHMgYXVzZ2V3XHUwMGU0aGx0CitfVUlfU2luZ2xlT2JqZWN0U2VsZWN0ZWQ9QXVzZ2V3XHUwMGU0aGx0ZXMgT2JqZWt0OiB7MH0KK19VSV9NdWx0aU9iamVjdFNlbGVjdGVkPUF1c2dld1x1MDBlNGhsdGUgezB9IE9iamVrdGUKKworX1VJX09wZW5FZGl0b3JFcnJvcl9sYWJlbD1FZGl0b3IgXHUwMGY2ZmZuZW4KKworX1VJX1dpemFyZF9jYXRlZ29yeT1CZWlzcGllbCBFTUYgTW9kZWxsIEVyc3RlbGx1bmdzYXNzaXN0ZW50CisKK19VSV9DcmVhdGVNb2RlbEVycm9yX21lc3NhZ2U9QXVmZ2V0cmV0ZW5lIFByb2JsZW1lIGluIGRlciBEYXRlaSAiezB9IgorCitfVUlfSW50ZXJ2ZW50aW9uc01vZGVsV2l6YXJkX2xhYmVsPUludGVydmVudGlvbnMgTW9kZWwKK19VSV9JbnRlcnZlbnRpb25zTW9kZWxXaXphcmRfZGVzY3JpcHRpb249Q3JlYXRlIGEgbmV3IEludGVydmVudGlvbnMgbW9kZWwKKworX1VJX0ludGVydmVudGlvbnNFZGl0b3JfbGFiZWw9SW50ZXJ2ZW50aW9ucyBNb2RlbCBFZGl0b3IKKworX1VJX0ludGVydmVudGlvbnNFZGl0b3JGaWxlbmFtZURlZmF1bHRCYXNlPU1laW4KK19VSV9JbnRlcnZlbnRpb25zRWRpdG9yRmlsZW5hbWVFeHRlbnNpb25zPWludGVydmVudGlvbnMKKworX1VJX1dpemFyZF9sYWJlbD1OZXUKKworX1dBUk5fRmlsZW5hbWVFeHRlbnNpb249RGVyIERhdGVpbmFtZSBtdXNzIGF1ZiAiLnswfSIgZW5kZW4KK19XQVJOX0ZpbGVuYW1lRXh0ZW5zaW9ucz1EZXIgRGF0ZWluYW1lIG11c3MgZWluZSBkZXIgZm9sZ2VuZGVuIEVuZHVuZ2VuIGhhYmVuOiB7MH0KKworX1VJX01vZGVsT2JqZWN0PSZNb2RlbCBPYmplY3QKK19VSV9YTUxFbmNvZGluZz0mWE1MIEVuY29kaW5nCitfVUlfWE1MRW5jb2RpbmdDaG9pY2VzPVVURi04IEFTQ0lJIFVURi0xNiBVVEYtMTZCRSBVVEYtMTZMRSBJU08tODg1OS0xCitfVUlfV2l6YXJkX2luaXRpYWxfb2JqZWN0X2Rlc2NyaXB0aW9uPVp1IGVyemV1Z2VuZGVzIE1vZGVsbG9iamVrdCB3XHUwMGU0aGxlbgorCitfVUlfRmlsZUNvbmZsaWN0X2xhYmVsPURhdGVpa29uZmxpa3QKK19XQVJOX0ZpbGVDb25mbGljdD1FcyBnaWJ0IG5pY2h0IGdlc3BlaWNoZXJ0ZSBcdTAwYzRuZGVydW5nZW4sIGRpZSBLb25mbGlrdGUgbWl0IFx1MDBjNG5kZXJ1bmdlbiBhdVx1MDBkZmVyaGFsYiBkZXMgRWRpdG9ycyBlcnpldWdlbi4gTVx1MDBmNmNodGVuIFNpZSBkaWUgXHUwMGM0bmRlcnVuZ2VuIGltIEVkaXRvciB2ZXJ3ZXJmZW4/CisKK19VSV9HcmFwaGdlbmVyYXRvcnNFZGl0b3JfbWVudT0mR3JhcGhnZW5lcmF0b3JzIEVkaXRvcgorX1VJX0dyYXBoZ2VuZXJhdG9yc01vZGVsV2l6YXJkX2xhYmVsPUdyYXBoZ2VuZXJhdG9yZW4gTW9kZWxsCitfVUlfR3JhcGhnZW5lcmF0b3JzTW9kZWxXaXphcmRfZGVzY3JpcHRpb249TmV1ZXMgR3JhcGhnZW5lcmF0b3JzLU1vZGVsbCBlcnN0ZWxsZW4KK19VSV9HcmFwaGdlbmVyYXRvcnNFZGl0b3JfbGFiZWw9R3JhcGhnZW5lcmF0b3JlbiBNb2RlbGwgRWRpdG9yCitfVUlfR3JhcGhnZW5lcmF0b3JzRWRpdG9yRmlsZW5hbWVEZWZhdWx0QmFzZT1NZWluCitfVUlfR3JhcGhnZW5lcmF0b3JzRWRpdG9yRmlsZW5hbWVFeHRlbnNpb25zPUdyYXBoZ2VuZXJhdG9yZW4KZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5pbnRlcnZlbnRpb25zL3BsdWdpbl9rci5wcm9wZXJ0aWVzIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmludGVydmVudGlvbnMvcGx1Z2luX2tyLnByb3BlcnRpZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjMwYWNhMQotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5pbnRlcnZlbnRpb25zL3BsdWdpbl9rci5wcm9wZXJ0aWVzCkBAIC0wLDAgKzEsNjMgQEAKKworIyA8Y29weXJpZ2h0PgorIyA8L2NvcHlyaWdodD4KKyMKKyMgJElkJAorCitwbHVnaW5OYW1lPUludGVydmVudGlvbnMgRWRpdG9yCitwcm92aWRlck5hbWU9d3d3LmV4YW1wbGUub3JnCisKK19VSV9JbnRlcnZlbnRpb25zRWRpdG9yX21lbnU9JkludGVydmVudGlvbnMgRWRpdG9yCisKK19VSV9DcmVhdGVDaGlsZF9tZW51X2l0ZW09Jk5ldyBDaGlsZAorX1VJX0NyZWF0ZVNpYmxpbmdfbWVudV9pdGVtPU4mICBcdWQ2MTVcdWM4MWMgXHVjNzkwXHViOWU0CisKK19VSV9TaG93UHJvcGVydGllc1ZpZXdfbWVudV9pdGVtPVx1ZDQ1Y1x1YzJkYyBcdWJjMGYgXHVjMThkXHVjMTMxXHViY2Y0XHVhZTMwCitfVUlfUmVmcmVzaFZpZXdlcl9tZW51X2l0ZW09JlJlZnJlc2gKKworX1VJX1NlbGVjdGlvblBhZ2VfbGFiZWw9XHVjMTIwXHVkMGRkCitfVUlfUGFyZW50UGFnZV9sYWJlbD1cdWJkODBcdWJhYTgKK19VSV9MaXN0UGFnZV9sYWJlbD1cdWJhYTlcdWI4NWQKK19VSV9UcmVlUGFnZV9sYWJlbD1cdWIwOThcdWJiMzQKK19VSV9UYWJsZVBhZ2VfbGFiZWw9XHVkMTRjXHVjNzc0XHViZTE0CitfVUlfVHJlZVdpdGhDb2x1bW5zUGFnZV9sYWJlbD1cdWIwOThcdWJiMzRcdWM2NDAgXHVjNWY0CitfVUlfT2JqZWN0Q29sdW1uX2xhYmVsPVx1YWMxY1x1Y2NiNAorX1VJX1NlbGZDb2x1bW5fbGFiZWw9XHVjMTQwXHVkNTA0CisKK19VSV9Ob09iamVjdFNlbGVjdGVkPVx1YzU0NFx1YmIzNFx1YWM4M1x1YjNjNCBcdWM1NDggXHVjMTIwXHVkMGRkXHVkNTY4CitfVUlfU2luZ2xlT2JqZWN0U2VsZWN0ZWQ9XHVjMTIwXHVkMGRkXHVkNTVjIFx1YWMxZFx1Y2NiNCA6IHswfQorX1VJX011bHRpT2JqZWN0U2VsZWN0ZWQ9XHVjMTIwXHVkMGRkXHViNDFjIHswfSBcdWFjMWRcdWNjYjQKKworX1VJX09wZW5FZGl0b3JFcnJvcl9sYWJlbD1cdWM2MjRcdWQ1MDggXHVjNWQwXHViNTE0XHVkMTMwCisKK19VSV9XaXphcmRfY2F0ZWdvcnk9XHVjNjA4XHVjODFjIEVNRiBcdWJhYThcdWIzNzggXHVjMGRkXHVjMTMxIFx1YjljOFx1YmM5NVx1YzBhYworCitfVUlfQ3JlYXRlTW9kZWxFcnJvcl9tZXNzYWdlPVx1ZDMwY1x1Yzc3YyAnezB9ICJcdWM1ZDBcdWMxMWMgXHViYjM4XHVjODFjIFx1YmMxY1x1YzBkZAorCitfVUlfSW50ZXJ2ZW50aW9uc01vZGVsV2l6YXJkX2xhYmVsPUludGVydmVudGlvbnMgTW9kZWwKK19VSV9JbnRlcnZlbnRpb25zTW9kZWxXaXphcmRfZGVzY3JpcHRpb249Q3JlYXRlIGEgbmV3IEludGVydmVudGlvbnMgbW9kZWwKKworX1VJX0ludGVydmVudGlvbnNFZGl0b3JfbGFiZWw9SW50ZXJ2ZW50aW9ucyBNb2RlbCBFZGl0b3IKKworX1VJX0ludGVydmVudGlvbnNFZGl0b3JGaWxlbmFtZURlZmF1bHRCYXNlPVx1YjA5OFx1Yzc1OAorX1VJX0ludGVydmVudGlvbnNFZGl0b3JGaWxlbmFtZUV4dGVuc2lvbnM9aW50ZXJ2ZW50aW9ucworCitfVUlfV2l6YXJkX2xhYmVsPVx1YzBjOFx1Yjg1Y1x1YzZiNAorCitfV0FSTl9GaWxlbmFtZUV4dGVuc2lvbj1cdWQzMGNcdWM3N2MgXHVjNzc0XHViOTg0XHVjNzQwICIuezB9Ilx1Yjg1YyBcdWIwNWRcdWIwOThcdWM1N2NcdWQ1NjguCitfV0FSTl9GaWxlbmFtZUV4dGVuc2lvbnM9XHVkMzBjXHVjNzdjIFx1Yzc3NFx1Yjk4NFx1Yzc0MCBcdWIyZTRcdWM3NGMgXHVkNjU1XHVjN2E1XHVjNzkwIFx1YzkxMSBcdWQ1NThcdWIwOThcdWI5N2MgXHVhYzAwXHVjODM4XHVjNTdjXHVkNTY4IDogezB9CisKK19VSV9Nb2RlbE9iamVjdD0mTW9kZWwgT2JqZWN0CitfVUlfWE1MRW5jb2Rpbmc9JlhNTCBFbmNvZGluZworX1VJX1hNTEVuY29kaW5nQ2hvaWNlcz1VVEYgLSA4IEFTQ0lJIFVURiAtIDE2IFVURiAtIDE2QkUgVVRGIC0gMTZMRSBJU08gLSA4ODU5IC0gMQorX1VJX1dpemFyZF9pbml0aWFsX29iamVjdF9kZXNjcmlwdGlvbj1cdWMwZGRcdWMxMzFcdWQ1NjAgXHViYWE4XHViMzc4IFx1YWMxY1x1Y2NiNCBcdWMxMjBcdWQwZGQKKworX1VJX0ZpbGVDb25mbGljdF9sYWJlbD1cdWQzMGNcdWM3N2MgXHVjZGE5XHViM2NjCitfV0FSTl9GaWxlQ29uZmxpY3Q9XHVjODAwXHVjN2E1XHViNDE4XHVjOWMwIFx1YzU0YVx1Yzc0MCBcdWMwYWNcdWQ1NmRcdWI0ZTRcdWM3NzQgXHVkM2I4XHVjOWQxXHVhZTMwIFx1YzY3OFx1YmQ4MFx1Yzc1OCBcdWJjYzBcdWFjYmQgXHVjMGFjXHVkNTZkXHViNGU0XHVhY2ZjIFx1Y2RhOVx1YjNjY1x1ZDU2OC4gXHVjNzc0IFx1ZDNiOFx1YzlkMVx1YWUzMFx1Yzc1OCBcdWJjYzBcdWFjYmQgXHVjMGFjXHVkNTZkXHViNGU0XHVjNzQ0IFx1Y2RlOFx1YzE4YyBcdWQ1NThcdWMyZGNcdWFjYTBcdWMyYjVcdWIyYzhcdWFlNGM/CisKK19VSV9HcmFwaGdlbmVyYXRvcnNFZGl0b3JfbWVudT0mR3JhcGhnZW5lcmF0b3JzIEVkaXRvcgorX1VJX0dyYXBoZ2VuZXJhdG9yc01vZGVsV2l6YXJkX2xhYmVsPVx1YWRmOFx1Yjc5OFx1ZDUwNFx1YzBkZFx1YzEzMVx1YWUzMCBcdWJhYThcdWIzNzgKK19VSV9HcmFwaGdlbmVyYXRvcnNNb2RlbFdpemFyZF9kZXNjcmlwdGlvbj1cdWMwYzhcdWI4NWNcdWM2YjQgXHVhZGY4XHViNzk4XHVkNTA0XHVjMGRkXHVjMTMxXHVjNzkwIFx1YmFhOFx1YjM3OCBcdWI5Y2NcdWI0ZTRcdWFlMzAKK19VSV9HcmFwaGdlbmVyYXRvcnNFZGl0b3JfbGFiZWw9XHVhZGY4XHViNzk4XHVkNTA0XHVjMGRkXHVjMTMxXHVhZTMwIFx1YmFhOFx1YjM3OCBcdWQzYjhcdWM5ZDFcdWFlMzAKK19VSV9HcmFwaGdlbmVyYXRvcnNFZGl0b3JGaWxlbmFtZURlZmF1bHRCYXNlPVx1YjA5OFx1Yzc1OAorX1VJX0dyYXBoZ2VuZXJhdG9yc0VkaXRvckZpbGVuYW1lRXh0ZW5zaW9ucz1cdWFkZjhcdWI3OThcdWQ1MDRcdWMwZGRcdWMxMzFcdWFlMzAKZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5pbnRlcnZlbnRpb25zL3BsdWdpbl96aC5wcm9wZXJ0aWVzIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmludGVydmVudGlvbnMvcGx1Z2luX3poLnByb3BlcnRpZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTc5ZDYzNwotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5pbnRlcnZlbnRpb25zL3BsdWdpbl96aC5wcm9wZXJ0aWVzCkBAIC0wLDAgKzEsNjMgQEAKKworIyA8Y29weXJpZ2h0PgorIyA8L2NvcHlyaWdodD4KKyMKKyMgJElkJAorCitwbHVnaW5OYW1lPUludGVydmVudGlvbnMgRWRpdG9yCitwcm92aWRlck5hbWU9d3d3LmV4YW1wbGUub3JnCisKK19VSV9JbnRlcnZlbnRpb25zRWRpdG9yX21lbnU9JkludGVydmVudGlvbnMgRWRpdG9yCisKK19VSV9DcmVhdGVDaGlsZF9tZW51X2l0ZW09Jk5ldyBDaGlsZAorX1VJX0NyZWF0ZVNpYmxpbmdfbWVudV9pdGVtPVx1NjViMFx1NzUxZlx1NjIxMFx1NGUwMFx1NGUyYVx1NTE0NFx1NWYxZlx1N2M3YgorCitfVUlfU2hvd1Byb3BlcnRpZXNWaWV3X21lbnVfaXRlbT1cdTY2M2VcdTc5M2FcdTU0OGNcdTVjNWVcdTYwMjdcdTY3ZTVcdTc3MGIKK19VSV9SZWZyZXNoVmlld2VyX21lbnVfaXRlbT0mUmVmcmVzaAorCitfVUlfU2VsZWN0aW9uUGFnZV9sYWJlbD1cdTkwMDlcdTYyZTkKK19VSV9QYXJlbnRQYWdlX2xhYmVsPVx1NWJiNlx1OTU3ZgorX1VJX0xpc3RQYWdlX2xhYmVsPVx1NzZlZVx1NWY1NQorX1VJX1RyZWVQYWdlX2xhYmVsPVx1NjgxMQorX1VJX1RhYmxlUGFnZV9sYWJlbD1cdTg4NjgKK19VSV9UcmVlV2l0aENvbHVtbnNQYWdlX2xhYmVsPVx1NTIwNlx1NTIxN1x1NzY4NFx1NjgxMQorX1VJX09iamVjdENvbHVtbl9sYWJlbD1cdTViZjlcdThjNjEKK19VSV9TZWxmQ29sdW1uX2xhYmVsPVx1ODFlYVx1NWRmMQorCitfVUlfTm9PYmplY3RTZWxlY3RlZD1cdTY1ZTBcdTkwMDlcdTViOWFcdTUxODVcdTViYjkKK19VSV9TaW5nbGVPYmplY3RTZWxlY3RlZD1cdTkwMDlcdTYyZTlcdTViZjlcdThjNjFcdWZmMWF7MH0KK19VSV9NdWx0aU9iamVjdFNlbGVjdGVkPVx1OTAwOVx1NjJlOXswfVx1NWJmOVx1OGM2MQorCitfVUlfT3BlbkVkaXRvckVycm9yX2xhYmVsPVx1NjI1M1x1NWYwMFx1N2YxNlx1OGY5MVx1NTY2OAorCitfVUlfV2l6YXJkX2NhdGVnb3J5PVx1NGY4Ylx1NTk4MkVNRlx1NmEyMVx1NTc4Ylx1NTIxYlx1NWVmYVx1NTQxMVx1NWJmYworCitfVUlfQ3JlYXRlTW9kZWxFcnJvcl9tZXNzYWdlPVx1NTcyOFx1NjU4N1x1NGVmNlx1MjAxY3swfVx1MjAxZFx1NGUyZFx1OTA0N1x1NTIzMFx1NzY4NFx1OTVlZVx1OTg5OAorCitfVUlfSW50ZXJ2ZW50aW9uc01vZGVsV2l6YXJkX2xhYmVsPUludGVydmVudGlvbnMgTW9kZWwKK19VSV9JbnRlcnZlbnRpb25zTW9kZWxXaXphcmRfZGVzY3JpcHRpb249Q3JlYXRlIGEgbmV3IEludGVydmVudGlvbnMgbW9kZWwKKworX1VJX0ludGVydmVudGlvbnNFZGl0b3JfbGFiZWw9SW50ZXJ2ZW50aW9ucyBNb2RlbCBFZGl0b3IKKworX1VJX0ludGVydmVudGlvbnNFZGl0b3JGaWxlbmFtZURlZmF1bHRCYXNlPVx1NjIxMVx1NzY4NAorX1VJX0ludGVydmVudGlvbnNFZGl0b3JGaWxlbmFtZUV4dGVuc2lvbnM9aW50ZXJ2ZW50aW9ucworCitfVUlfV2l6YXJkX2xhYmVsPVx1NjViMFx1NWVmYQorCitfV0FSTl9GaWxlbmFtZUV4dGVuc2lvbj1cdTY1ODdcdTRlZjZcdTU0MGRcdTVmYzVcdTk4N2JcdTRlZTUnezB9ICcnXHU3ZWQzXHU1YzNlCitfV0FSTl9GaWxlbmFtZUV4dGVuc2lvbnM9XHU2NTg3XHU0ZWY2XHU1NDBkXHU1ZmM1XHU5ODdiXHU1MTc3XHU2NzA5XHU0ZWU1XHU0ZTBiXHU2MjY5XHU1YzU1XHU1NDBkXHU0ZTRiXHU0ZTAwXHVmZjFhezB9CisKK19VSV9Nb2RlbE9iamVjdD0mTW9kZWwgT2JqZWN0CitfVUlfWE1MRW5jb2Rpbmc9JlhNTCBFbmNvZGluZworX1VJX1hNTEVuY29kaW5nQ2hvaWNlcz1VVEYtOCBBU0NJSSBVVEYtMTYgVVRGLTE2QkUgVVRGLTE2TEUgSVNPLTg4NTktMQorX1VJX1dpemFyZF9pbml0aWFsX29iamVjdF9kZXNjcmlwdGlvbj1cdTkwMDlcdTYyZTlcdTUyMWJcdTVlZmFcdTRlMDBcdTRlMmFcdTZhMjFcdTU3OGJcdTViZjlcdThjNjEKKworX1VJX0ZpbGVDb25mbGljdF9sYWJlbD1cdTY1ODdcdTRlZjZcdTUxYjJcdTdhODEKK19XQVJOX0ZpbGVDb25mbGljdD1cdTY3MDlcdTY3MmFcdTRmZGRcdTViNThcdTc2ODRcdTY2ZjRcdTY1MzlcdTRlMGVcdTdmMTZcdThmOTFcdTU2NjhcdTU5MTZcdTc2ODRcdTY2ZjRcdTY1MzlcdTUxYjJcdTdhODFcdTMwMDJcdTRmNjBcdTYwZjNcdTY1M2VcdTVmMDNcdThmZDlcdTRlMmFcdTdmMTZcdThmOTFcdTU2NjhcdTc2ODRcdTY2ZjRcdTY1MzlcdTU0MTdcdWZmMWYKKworX1VJX0dyYXBoZ2VuZXJhdG9yc0VkaXRvcl9tZW51PSZHcmFwaGdlbmVyYXRvcnMgRWRpdG9yCitfVUlfR3JhcGhnZW5lcmF0b3JzTW9kZWxXaXphcmRfbGFiZWw9XHU1NmZlXHU3NTFmXHU2MjEwXHU1NjY4XHU2YTIxXHU1NzhiCitfVUlfR3JhcGhnZW5lcmF0b3JzTW9kZWxXaXphcmRfZGVzY3JpcHRpb249XHU1MjFiXHU1ZWZhXHU0ZTAwXHU0ZTJhXHU2NWIwXHU3Njg0XHU1NmZlXHU1ZjYyXHU3NTFmXHU2MjEwXHU1NjY4XHU2YTIxXHU1NzhiCitfVUlfR3JhcGhnZW5lcmF0b3JzRWRpdG9yX2xhYmVsPVx1NTZmZVx1NzUxZlx1NjIxMFx1NTY2OFx1NmEyMVx1NTc4Ylx1N2YxNlx1OGY5MVx1NTY2OAorX1VJX0dyYXBoZ2VuZXJhdG9yc0VkaXRvckZpbGVuYW1lRGVmYXVsdEJhc2U9XHU2MjExXHU3Njg0CitfVUlfR3JhcGhnZW5lcmF0b3JzRWRpdG9yRmlsZW5hbWVFeHRlbnNpb25zPVx1NTZmZVx1NWY2Mlx1NzUxZlx1NjIxMFx1NTY2OApkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmludGVydmVudGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vaW50ZXJ2ZW50aW9ucy9wcmVzZW50YXRpb24vQ29udHJvbEdyYXBoR2VuZXJhdG9yUHJvcGVydHlFZGl0b3IuamF2YSBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5pbnRlcnZlbnRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2ludGVydmVudGlvbnMvcHJlc2VudGF0aW9uL0NvbnRyb2xHcmFwaEdlbmVyYXRvclByb3BlcnR5RWRpdG9yLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmQwYjM2YwotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5pbnRlcnZlbnRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2ludGVydmVudGlvbnMvcHJlc2VudGF0aW9uL0NvbnRyb2xHcmFwaEdlbmVyYXRvclByb3BlcnR5RWRpdG9yLmphdmEKQEAgLTAsMCArMSwxOTQgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcnZlbnRpb25zLnByZXNlbnRhdGlvbjsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqYXZhLnV0aWwuTWFwOworCitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3Q7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzczsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRVN0cnVjdHVyYWxGZWF0dXJlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5TVEVNVVJJOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5HcmFwaDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmdyYXBoZ2VuZXJhdG9ycy5HcmFwaEdlbmVyYXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmludGVydmVudGlvbnMuQ29udHJvbEdyYXBoR2VuZXJhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uaW50ZXJ2ZW50aW9ucy5JbnRlcnZlbnRpb25zUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnVpLmdyYXBoZ2VuZXJhdG9ycy5hZGFwdGVycy5ncmFwaGdlbmVyYXRvcnByb3BlcnR5ZWRpdG9yLkdyYXBoR2VuZXJhdG9yUHJvcGVydHlFZGl0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS51aS5pbnRlcnZlbnRpb25zLm5scy5NZXNzYWdlczsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLk1vZGlmeUxpc3RlbmVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5UZXh0OworCitwdWJsaWMgY2xhc3MgQ29udHJvbEdyYXBoR2VuZXJhdG9yUHJvcGVydHlFZGl0b3IgZXh0ZW5kcyBHcmFwaEdlbmVyYXRvclByb3BlcnR5RWRpdG9yIHsKKworCXB1YmxpYyBDb250cm9sR3JhcGhHZW5lcmF0b3JQcm9wZXJ0eUVkaXRvcihDb21wb3NpdGUgcGFyZW50LCBpbnQgc3R5bGUsIElQcm9qZWN0IHByb2plY3QpIHsKKwkJc3VwZXIocGFyZW50LHN0eWxlLCBwcm9qZWN0KTsKKwl9CisKKwkvKioKKwkgKiBDcmVhdGUgdGhlIGNvbXBvc2l0ZQorCSAqIAorCSAqIEBwYXJhbSBwYXJlbnQKKwkgKiBAcGFyYW0gc3R5bGUKKwkgKiBAcGFyYW0gcHJvamVjdFZhbGlkYXRvcgorCSAqLworCXB1YmxpYyBDb250cm9sR3JhcGhHZW5lcmF0b3JQcm9wZXJ0eUVkaXRvcihmaW5hbCBDb21wb3NpdGUgcGFyZW50LCBmaW5hbCBpbnQgc3R5bGUsCisJCQlmaW5hbCBHcmFwaEdlbmVyYXRvciBncmFwaEdlbmVyYXRvciwKKwkJCWZpbmFsIE1vZGlmeUxpc3RlbmVyIHByb2plY3RWYWxpZGF0b3IsIElQcm9qZWN0IHByb2plY3QpIHsKKwkJCisJCXN1cGVyKHBhcmVudCwgc3R5bGUsIGdyYXBoR2VuZXJhdG9yLCBwcm9qZWN0VmFsaWRhdG9yLCBwcm9qZWN0KTsKKwkJCisJfSAvLyBHcmFwaEdlbmVyYXRvclByb3BlcnR5RWRpdG9yCisKKworCisJLyoqCisJICogQHBhcmFtIGdyYXBoR2VuZXJhdG9yCisJICogICAgICAgICAgICB0aGUge0BsaW5rIEdyYXBoR2VuZXJhdG9yfSBpbnN0YW5jZSB0byBwb3B1bGF0ZS4KKwkgKi8KKwlwdWJsaWMgR3JhcGggZ2V0R3JhcGgoZmluYWwgR3JhcGhHZW5lcmF0b3IgZ3JhcGhHZW5lcmF0b3IpIHsKKwkJZm9yIChmaW5hbCBNYXAuRW50cnk8RVN0cnVjdHVyYWxGZWF0dXJlLCBUZXh0PiBlbnRyeSA6IG1hcC5lbnRyeVNldCgpKSB7CisJCQlpZihlbnRyeS5nZXRLZXkoKS5nZXRFQ29udGFpbmluZ0NsYXNzKCkuZ2V0Q2xhc3NpZmllcklEKCkgPT0gSW50ZXJ2ZW50aW9uc1BhY2thZ2UuQ09OVFJPTF9HUkFQSF9HRU5FUkFUT1IpIHsKKwkJCQlzd2l0Y2ggKGVudHJ5LmdldEtleSgpLmdldEZlYXR1cmVJRCgpKSB7CisJCQkJCWNhc2UgSW50ZXJ2ZW50aW9uc1BhY2thZ2UuQ09OVFJPTF9HUkFQSF9HRU5FUkFUT1JfX0lTT0xBVElPTl9GUkFDVElPTjoKKwkJCQkJCSgoQ29udHJvbEdyYXBoR2VuZXJhdG9yKWdyYXBoR2VuZXJhdG9yKS5zZXRJc29sYXRpb25GcmFjdGlvbihEb3VibGUucGFyc2VEb3VibGUoZW50cnkuZ2V0VmFsdWUoKS5nZXRUZXh0KCkpKTsKKwkJCQkJCWJyZWFrOworCQkJCQljYXNlIEludGVydmVudGlvbnNQYWNrYWdlLkNPTlRST0xfR1JBUEhfR0VORVJBVE9SX19WQUNDSU5BVElPTl9GUkFDVElPTjoKKwkJCQkJCSgoQ29udHJvbEdyYXBoR2VuZXJhdG9yKWdyYXBoR2VuZXJhdG9yKS5zZXRWYWNjaW5hdGlvbkZyYWN0aW9uKERvdWJsZS5wYXJzZURvdWJsZShlbnRyeS5nZXRWYWx1ZSgpLmdldFRleHQoKSkpOworCQkJCQkJYnJlYWs7CisJCQkJCWNhc2UgSW50ZXJ2ZW50aW9uc1BhY2thZ2UuQ09OVFJPTF9HUkFQSF9HRU5FUkFUT1JfX1BPUFVMQVRJT05fSURFTlRJRklFUjoKKwkJCQkJCSgoQ29udHJvbEdyYXBoR2VuZXJhdG9yKWdyYXBoR2VuZXJhdG9yKS5zZXRQb3B1bGF0aW9uSWRlbnRpZmllcihlbnRyeS5nZXRWYWx1ZSgpLmdldFRleHQoKSk7CisJCQkJCQlicmVhazsKKwkJCQkJY2FzZSBJbnRlcnZlbnRpb25zUGFja2FnZS5DT05UUk9MX0dSQVBIX0dFTkVSQVRPUl9fTE9DQVRJT046CisJCQkJCQlTdHJpbmcgdHh0ID0gZW50cnkuZ2V0VmFsdWUoKS5nZXRUZXh0KCk7CisJCQkJCQlpZih0eHQgPT0gbnVsbCB8fCB0eHQudHJpbSgpLmVxdWFscygiIikpCisJCQkJCQkJKChDb250cm9sR3JhcGhHZW5lcmF0b3IpZ3JhcGhHZW5lcmF0b3IpLnNldExvY2F0aW9uKG51bGwpOworCQkJCQkJZWxzZSAKKwkJCQkJCQkoKENvbnRyb2xHcmFwaEdlbmVyYXRvcilncmFwaEdlbmVyYXRvcikuc2V0TG9jYXRpb24oU1RFTVVSSS5jcmVhdGVVUkkoZW50cnkuZ2V0VmFsdWUoKS5nZXRUZXh0KCkpKTsKKwkJCQkJCWJyZWFrOworCQkJCX0KKwkJCX0KKwkJfQorIAorCSBpZihncmFwaEdlbmVyYXRvci5lQ2xhc3MoKS5nZXRDbGFzc2lmaWVySUQoKSA9PSBJbnRlcnZlbnRpb25zUGFja2FnZS5DT05UUk9MX0dSQVBIX0dFTkVSQVRPUikgCisJCSAoKENvbnRyb2xHcmFwaEdlbmVyYXRvcilncmFwaEdlbmVyYXRvcikuc2V0UHJvamVjdChwcm9qZWN0KTsKKwkJCisJCXJldHVybiBncmFwaEdlbmVyYXRvci5nZXRHcmFwaCgpOworCX0gLy8gcG9wdWxhdGUKKworCS8qKgorCSAqIEByZXR1cm4gPGNvZGU+dHJ1ZTwvY29kZT4gaWYgdGhlIGNvbnRlbnRzIGFyZSB2YWxpZCwgPGNvZGU+ZmFsc2U8L2NvZGU+CisJICogICAgICAgICBvdGhlcndpc2UuCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIGJvb2xlYW4gdmFsaWRhdGUoKSB7CisJCWJvb2xlYW4gcmV0VmFsdWUgPSB0cnVlOworCQlpZiAocmV0VmFsdWUpIHsKKwkJCS8vIFllcworCQkJZmluYWwgVGV4dCB0ZXh0ID0gbWFwCisJCQkJCS5nZXQoSW50ZXJ2ZW50aW9uc1BhY2thZ2UuTGl0ZXJhbHMuQ09OVFJPTF9HUkFQSF9HRU5FUkFUT1JfX0lTT0xBVElPTl9GUkFDVElPTik7CisJCQlpZiAodGV4dCAhPSBudWxsKSB7CisJCQkJLy8gWWVzCisJCQkJcmV0VmFsdWUgPSAhdGV4dC5nZXRUZXh0KCkuZXF1YWxzKCIiKTsgLy8kTk9OLU5MUy0xJAorCQkJCS8vIG5vdGhpbmc/CisJCQkJaWYgKCFyZXRWYWx1ZSkgeworCQkJCQkvLyBZZXMKKwkJCQkJZXJyb3JNZXNzYWdlID0gTWVzc2FnZXMKKwkJCQkJCQkuZ2V0U3RyaW5nKCJDR0dXaXpFcnIxIik7IC8vJE5PTi1OTFMtMSQKKwkJCQl9IC8vIGlmCisJCQkJZWxzZSB7CisJCQkJCS8vIE5vCisJCQkJCS8vIElzIGl0IGEgdmFsaWQgdmFsdWU/CisJCQkJCXJldFZhbHVlID0gaXNWYWxpZERvdWJsZVZhbHVlKHRleHQuZ2V0VGV4dCgpLCAwLjAsIDEuMCk7CisJCQkJCWlmICghcmV0VmFsdWUpIHsKKwkJCQkJCS8vIE5vCisJCQkJCQllcnJvck1lc3NhZ2UgPSBNZXNzYWdlcworCQkJCQkJCQkuZ2V0U3RyaW5nKCJDR0dXaXpFcnIyIik7IC8vJE5PTi1OTFMtMSQKKwkJCQkJfSAvLyBpZgorCQkJCX0KKwkJCX0gLy8gaWYgdGV4dCAhPSBudWxsCisJCX0gCisKKwkJaWYgKHJldFZhbHVlKSB7CisJCQkvLyBZZXMKKwkJCWZpbmFsIFRleHQgdGV4dCA9IG1hcAorCQkJCQkuZ2V0KEludGVydmVudGlvbnNQYWNrYWdlLkxpdGVyYWxzLkNPTlRST0xfR1JBUEhfR0VORVJBVE9SX19WQUNDSU5BVElPTl9GUkFDVElPTik7CisJCQlpZiAodGV4dCAhPSBudWxsKSB7CisJCQkJLy8gWWVzCisJCQkJcmV0VmFsdWUgPSAhdGV4dC5nZXRUZXh0KCkuZXF1YWxzKCIiKTsgLy8kTk9OLU5MUy0xJAorCQkJCS8vIG5vdGhpbmc/CisJCQkJaWYgKCFyZXRWYWx1ZSkgeworCQkJCQkvLyBZZXMKKwkJCQkJZXJyb3JNZXNzYWdlID0gTWVzc2FnZXMKKwkJCQkJCQkuZ2V0U3RyaW5nKCJDR0dXaXpFcnIzIik7IC8vJE5PTi1OTFMtMSQKKwkJCQl9IC8vIGlmCisJCQkJZWxzZSB7CisJCQkJCS8vIE5vCisJCQkJCS8vIElzIGl0IGEgdmFsaWQgdmFsdWU/CisJCQkJCXJldFZhbHVlID0gaXNWYWxpZERvdWJsZVZhbHVlKHRleHQuZ2V0VGV4dCgpLCAwLjAsIDEuMCk7CisJCQkJCWlmICghcmV0VmFsdWUpIHsKKwkJCQkJCS8vIE5vCisJCQkJCQllcnJvck1lc3NhZ2UgPSBNZXNzYWdlcworCQkJCQkJCQkuZ2V0U3RyaW5nKCJDR0dXaXpFcnI0Iik7IC8vJE5PTi1OTFMtMSQKKwkJCQkJfSAvLyBpZgorCQkJCX0KKwkJCX0gLy8gaWYgdGV4dCAhPSBudWxsCisJCX0gCisKKwkJaWYgKHJldFZhbHVlKSB7CisJCQkvLyBZZXMKKwkJCWZpbmFsIFRleHQgdGV4dCA9IG1hcAorCQkJCQkuZ2V0KEludGVydmVudGlvbnNQYWNrYWdlLkxpdGVyYWxzLkNPTlRST0xfR1JBUEhfR0VORVJBVE9SX19QT1BVTEFUSU9OX0lERU5USUZJRVIpOworCQkJaWYgKHRleHQgIT0gbnVsbCkgeworCQkJCS8vIFllcworCQkJCXJldFZhbHVlID0gIXRleHQuZ2V0VGV4dCgpLmVxdWFscygiIik7IC8vJE5PTi1OTFMtMSQKKwkJCQkvLyBub3RoaW5nPworCQkJCWlmICghcmV0VmFsdWUpIHsKKwkJCQkJLy8gWWVzCisJCQkJCWVycm9yTWVzc2FnZSA9IE1lc3NhZ2VzCisJCQkJCQkJLmdldFN0cmluZygiQ0dHV2l6RXJyNSIpOyAvLyROT04tTkxTLTEkCisJCQkJfSAvLyBpZgorCQkJfSAvLyBpZiB0ZXh0ICE9IG51bGwKKwkJfSAKKworCQlyZXR1cm4gcmV0VmFsdWU7CisJfSAvLyB2YWxpZGF0ZQorCisKKwkvKioKKwkgKiBAcGFyYW0gZmVhdHVyZQorCSAqIEByZXR1cm4gPGNvZGU+dHJ1ZTwvY29kZT4gaWYgdGhlIGZlYXR1cmUgaXMgYSBkdWJsaW4gY29yZSBmZWF0dXJlIHRoYXQKKwkgKiAgICAgICAgIGlzIHNwZWNpZmllZCBieSBhIHVzZXIuCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIGJvb2xlYW4gaXNVc2VyU3BlY2lmaWVkUHJvcGVydHkoZmluYWwgRVN0cnVjdHVyYWxGZWF0dXJlIGZlYXR1cmUpIHsKKwkJYm9vbGVhbiByZXRWYWx1ZSA9IGZhbHNlOworCQlmaW5hbCBFQ2xhc3MgY29udGFpbmluZ0NsYXNzID0gZmVhdHVyZS5nZXRFQ29udGFpbmluZ0NsYXNzKCk7CisJCWlmIChjb250YWluaW5nQ2xhc3MuZXF1YWxzKEludGVydmVudGlvbnNQYWNrYWdlLmVJTlNUQU5DRS5nZXRDb250cm9sR3JhcGhHZW5lcmF0b3IoKSkKKwkJCQl8fCBjb250YWluaW5nQ2xhc3MuZ2V0RUFsbFN1cGVyVHlwZXMoKS5jb250YWlucygKKwkJCQkJCUludGVydmVudGlvbnNQYWNrYWdlLmVJTlNUQU5DRS5nZXRDb250cm9sR3JhcGhHZW5lcmF0b3IoKSkpIHsKKwkJCS8vIFllcworCQkJcmV0VmFsdWUgPSB0cnVlOworCQl9IC8vIAorCQlyZXR1cm4gcmV0VmFsdWU7CisJfSAvLyBpc1VzZXJTcGVjaWZpZWRHcmFwaEdlbmVyYXRvclByb3BlcnR5CisJCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgZGlzcG9zZSgpIHsKKwkJc3VwZXIuZGlzcG9zZSgpOworCX0KKworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIGNoZWNrU3ViY2xhc3MoKSB7CisJCS8vIERpc2FibGUgdGhlIGNoZWNrIHRoYXQgcHJldmVudHMgc3ViLWNsYXNzaW5nIG9mIFNXVCBjb21wb25lbnRzCisJfQorCit9IC8vIENvbnRyb2xHcmFwaEdlbmVyYXRvclByb3BlcnR5RWRpdG9yCmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuaW50ZXJ2ZW50aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9pbnRlcnZlbnRpb25zL3ByZXNlbnRhdGlvbi9JbnRlcnZlbnRpb25zQWN0aW9uQmFyQ29udHJpYnV0b3IuamF2YSBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5pbnRlcnZlbnRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2ludGVydmVudGlvbnMvcHJlc2VudGF0aW9uL0ludGVydmVudGlvbnNBY3Rpb25CYXJDb250cmlidXRvci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY2N2E4YmIKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuaW50ZXJ2ZW50aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9pbnRlcnZlbnRpb25zL3ByZXNlbnRhdGlvbi9JbnRlcnZlbnRpb25zQWN0aW9uQmFyQ29udHJpYnV0b3IuamF2YQpAQCAtMCwwICsxLDQzMiBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmludGVydmVudGlvbnMucHJlc2VudGF0aW9uOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAKKyAqIENvcHlyaWdodCAoYykgMjAxMSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4gCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIAorICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wIAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQgCisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbCAKKyAqIAorICogQ29udHJpYnV0b3JzOiAKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7CitpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnVpLnZpZXdlci5JVmlld2VyUHJvdmlkZXI7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5kb21haW4uRWRpdGluZ0RvbWFpbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5kb21haW4uSUVkaXRpbmdEb21haW5Qcm92aWRlcjsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmFjdGlvbi5Db250cm9sQWN0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmFjdGlvbi5DcmVhdGVDaGlsZEFjdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5hY3Rpb24uQ3JlYXRlU2libGluZ0FjdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5hY3Rpb24uRWRpdGluZ0RvbWFpbkFjdGlvbkJhckNvbnRyaWJ1dG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmFjdGlvbi5Mb2FkUmVzb3VyY2VBY3Rpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkuYWN0aW9uLlZhbGlkYXRlQWN0aW9uOworCitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLkFjdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uQWN0aW9uQ29udHJpYnV0aW9uSXRlbTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSUFjdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSUNvbnRyaWJ1dGlvbkl0ZW07CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklDb250cmlidXRpb25NYW5hZ2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JTWVudUxpc3RlbmVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JTWVudU1hbmFnZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklUb29sQmFyTWFuYWdlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uTWVudU1hbmFnZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLlNlcGFyYXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uU3ViQ29udHJpYnV0aW9uSXRlbTsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU3RydWN0dXJlZFNlbGVjdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlNlbGVjdGlvbkNoYW5nZWRFdmVudDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlZpZXdlcjsKKworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklFZGl0b3JQYXJ0OworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLlBhcnRJbml0RXhjZXB0aW9uOworCisvKioKKyAqIFRoaXMgaXMgdGhlIGFjdGlvbiBiYXIgY29udHJpYnV0b3IgZm9yIHRoZSBJbnRlcnZlbnRpb25zIG1vZGVsIGVkaXRvci4KKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIEludGVydmVudGlvbnNBY3Rpb25CYXJDb250cmlidXRvcgorCWV4dGVuZHMgRWRpdGluZ0RvbWFpbkFjdGlvbkJhckNvbnRyaWJ1dG9yCisJaW1wbGVtZW50cyBJU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyIHsKKwkvKioKKwkgKiBUaGlzIGtlZXBzIHRyYWNrIG9mIHRoZSBhY3RpdmUgZWRpdG9yLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBJRWRpdG9yUGFydCBhY3RpdmVFZGl0b3JQYXJ0OworCisJLyoqCisJICogVGhpcyBrZWVwcyB0cmFjayBvZiB0aGUgY3VycmVudCBzZWxlY3Rpb24gcHJvdmlkZXIuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIElTZWxlY3Rpb25Qcm92aWRlciBzZWxlY3Rpb25Qcm92aWRlcjsKKworCS8qKgorCSAqIFRoaXMgYWN0aW9uIG9wZW5zIHRoZSBQcm9wZXJ0aWVzIHZpZXcuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIElBY3Rpb24gc2hvd1Byb3BlcnRpZXNWaWV3QWN0aW9uID0KKwkJbmV3IEFjdGlvbihJbnRlcnZlbnRpb25zRWRpdG9yUGx1Z2luLklOU1RBTkNFLmdldFN0cmluZygiX1VJX1Nob3dQcm9wZXJ0aWVzVmlld19tZW51X2l0ZW0iKSkgeworCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgdm9pZCBydW4oKSB7CisJCQkJdHJ5IHsKKwkJCQkJZ2V0UGFnZSgpLnNob3dWaWV3KCJvcmcuZWNsaXBzZS51aS52aWV3cy5Qcm9wZXJ0eVNoZWV0Iik7CisJCQkJfQorCQkJCWNhdGNoIChQYXJ0SW5pdEV4Y2VwdGlvbiBleGNlcHRpb24pIHsKKwkJCQkJSW50ZXJ2ZW50aW9uc0VkaXRvclBsdWdpbi5JTlNUQU5DRS5sb2coZXhjZXB0aW9uKTsKKwkJCQl9CisJCQl9CisJCX07CisKKwkvKioKKwkgKiBUaGlzIGFjdGlvbiByZWZyZXNoZXMgdGhlIHZpZXdlciBvZiB0aGUgY3VycmVudCBlZGl0b3IgaWYgdGhlIGVkaXRvcgorCSAqIGltcGxlbWVudHMge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5jb21tb24udWkudmlld2VyLklWaWV3ZXJQcm92aWRlcn0uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIElBY3Rpb24gcmVmcmVzaFZpZXdlckFjdGlvbiA9CisJCW5ldyBBY3Rpb24oSW50ZXJ2ZW50aW9uc0VkaXRvclBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoIl9VSV9SZWZyZXNoVmlld2VyX21lbnVfaXRlbSIpKSB7CisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyBib29sZWFuIGlzRW5hYmxlZCgpIHsKKwkJCQlyZXR1cm4gYWN0aXZlRWRpdG9yUGFydCBpbnN0YW5jZW9mIElWaWV3ZXJQcm92aWRlcjsKKwkJCX0KKworCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgdm9pZCBydW4oKSB7CisJCQkJaWYgKGFjdGl2ZUVkaXRvclBhcnQgaW5zdGFuY2VvZiBJVmlld2VyUHJvdmlkZXIpIHsKKwkJCQkJVmlld2VyIHZpZXdlciA9ICgoSVZpZXdlclByb3ZpZGVyKWFjdGl2ZUVkaXRvclBhcnQpLmdldFZpZXdlcigpOworCQkJCQlpZiAodmlld2VyICE9IG51bGwpIHsKKwkJCQkJCXZpZXdlci5yZWZyZXNoKCk7CisJCQkJCX0KKwkJCQl9CisJCQl9CisJCX07CisKKwkvKioKKwkgKiBUaGlzIHdpbGwgY29udGFpbiBvbmUge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmFjdGlvbi5DcmVhdGVDaGlsZEFjdGlvbn0gY29ycmVzcG9uZGluZyB0byBlYWNoIGRlc2NyaXB0b3IKKwkgKiBnZW5lcmF0ZWQgZm9yIHRoZSBjdXJyZW50IHNlbGVjdGlvbiBieSB0aGUgaXRlbSBwcm92aWRlci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgQ29sbGVjdGlvbjxJQWN0aW9uPiBjcmVhdGVDaGlsZEFjdGlvbnM7CisKKwkvKioKKwkgKiBUaGlzIGlzIHRoZSBtZW51IG1hbmFnZXIgaW50byB3aGljaCBtZW51IGNvbnRyaWJ1dGlvbiBpdGVtcyBzaG91bGQgYmUgYWRkZWQgZm9yIENyZWF0ZUNoaWxkIGFjdGlvbnMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIElNZW51TWFuYWdlciBjcmVhdGVDaGlsZE1lbnVNYW5hZ2VyOworCisJLyoqCisJICogVGhpcyB3aWxsIGNvbnRhaW4gb25lIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5hY3Rpb24uQ3JlYXRlU2libGluZ0FjdGlvbn0gY29ycmVzcG9uZGluZyB0byBlYWNoIGRlc2NyaXB0b3IKKwkgKiBnZW5lcmF0ZWQgZm9yIHRoZSBjdXJyZW50IHNlbGVjdGlvbiBieSB0aGUgaXRlbSBwcm92aWRlci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgQ29sbGVjdGlvbjxJQWN0aW9uPiBjcmVhdGVTaWJsaW5nQWN0aW9uczsKKworCS8qKgorCSAqIFRoaXMgaXMgdGhlIG1lbnUgbWFuYWdlciBpbnRvIHdoaWNoIG1lbnUgY29udHJpYnV0aW9uIGl0ZW1zIHNob3VsZCBiZSBhZGRlZCBmb3IgQ3JlYXRlU2libGluZyBhY3Rpb25zLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBJTWVudU1hbmFnZXIgY3JlYXRlU2libGluZ01lbnVNYW5hZ2VyOworCisJLyoqCisJICogVGhpcyBjcmVhdGVzIGFuIGluc3RhbmNlIG9mIHRoZSBjb250cmlidXRvci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgSW50ZXJ2ZW50aW9uc0FjdGlvbkJhckNvbnRyaWJ1dG9yKCkgeworCQlzdXBlcihBRERJVElPTlNfTEFTVF9TVFlMRSk7CisJCWxvYWRSZXNvdXJjZUFjdGlvbiA9IG5ldyBMb2FkUmVzb3VyY2VBY3Rpb24oKTsKKwkJdmFsaWRhdGVBY3Rpb24gPSBuZXcgVmFsaWRhdGVBY3Rpb24oKTsKKwkJY29udHJvbEFjdGlvbiA9IG5ldyBDb250cm9sQWN0aW9uKCk7CisJfQorCisJLyoqCisJICogVGhpcyBhZGRzIFNlcGFyYXRvcnMgZm9yIGVkaXRvciBhZGRpdGlvbnMgdG8gdGhlIHRvb2wgYmFyLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGNvbnRyaWJ1dGVUb1Rvb2xCYXIoSVRvb2xCYXJNYW5hZ2VyIHRvb2xCYXJNYW5hZ2VyKSB7CisJCXRvb2xCYXJNYW5hZ2VyLmFkZChuZXcgU2VwYXJhdG9yKCJpbnRlcnZlbnRpb25zLXNldHRpbmdzIikpOworCQl0b29sQmFyTWFuYWdlci5hZGQobmV3IFNlcGFyYXRvcigiaW50ZXJ2ZW50aW9ucy1hZGRpdGlvbnMiKSk7CisJfQorCisJLyoqCisJICogVGhpcyBhZGRzIHRvIHRoZSBtZW51IGJhciBhIG1lbnUgYW5kIHNvbWUgc2VwYXJhdG9ycyBmb3IgZWRpdG9yIGFkZGl0aW9ucywKKwkgKiBhcyB3ZWxsIGFzIHRoZSBzdWItbWVudXMgZm9yIG9iamVjdCBjcmVhdGlvbiBpdGVtcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBjb250cmlidXRlVG9NZW51KElNZW51TWFuYWdlciBtZW51TWFuYWdlcikgeworCQlzdXBlci5jb250cmlidXRlVG9NZW51KG1lbnVNYW5hZ2VyKTsKKworCQlJTWVudU1hbmFnZXIgc3VibWVudU1hbmFnZXIgPSBuZXcgTWVudU1hbmFnZXIoSW50ZXJ2ZW50aW9uc0VkaXRvclBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoIl9VSV9JbnRlcnZlbnRpb25zRWRpdG9yX21lbnUiKSwgIm9yZy5lY2xpcHNlLnN0ZW0uaW50ZXJ2ZW50aW9uc01lbnVJRCIpOworCQltZW51TWFuYWdlci5pbnNlcnRBZnRlcigiYWRkaXRpb25zIiwgc3VibWVudU1hbmFnZXIpOworCQlzdWJtZW51TWFuYWdlci5hZGQobmV3IFNlcGFyYXRvcigic2V0dGluZ3MiKSk7CisJCXN1Ym1lbnVNYW5hZ2VyLmFkZChuZXcgU2VwYXJhdG9yKCJhY3Rpb25zIikpOworCQlzdWJtZW51TWFuYWdlci5hZGQobmV3IFNlcGFyYXRvcigiYWRkaXRpb25zIikpOworCQlzdWJtZW51TWFuYWdlci5hZGQobmV3IFNlcGFyYXRvcigiYWRkaXRpb25zLWVuZCIpKTsKKworCQkvLyBQcmVwYXJlIGZvciBDcmVhdGVDaGlsZCBpdGVtIGFkZGl0aW9uIG9yIHJlbW92YWwuCisJCS8vCisJCWNyZWF0ZUNoaWxkTWVudU1hbmFnZXIgPSBuZXcgTWVudU1hbmFnZXIoSW50ZXJ2ZW50aW9uc0VkaXRvclBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoIl9VSV9DcmVhdGVDaGlsZF9tZW51X2l0ZW0iKSk7CisJCXN1Ym1lbnVNYW5hZ2VyLmluc2VydEJlZm9yZSgiYWRkaXRpb25zIiwgY3JlYXRlQ2hpbGRNZW51TWFuYWdlcik7CisKKwkJLy8gUHJlcGFyZSBmb3IgQ3JlYXRlU2libGluZyBpdGVtIGFkZGl0aW9uIG9yIHJlbW92YWwuCisJCS8vCisJCWNyZWF0ZVNpYmxpbmdNZW51TWFuYWdlciA9IG5ldyBNZW51TWFuYWdlcihJbnRlcnZlbnRpb25zRWRpdG9yUGx1Z2luLklOU1RBTkNFLmdldFN0cmluZygiX1VJX0NyZWF0ZVNpYmxpbmdfbWVudV9pdGVtIikpOworCQlzdWJtZW51TWFuYWdlci5pbnNlcnRCZWZvcmUoImFkZGl0aW9ucyIsIGNyZWF0ZVNpYmxpbmdNZW51TWFuYWdlcik7CisKKwkJLy8gRm9yY2UgYW4gdXBkYXRlIGJlY2F1c2UgRWNsaXBzZSBoaWRlcyBlbXB0eSBtZW51cyBub3cuCisJCS8vCisJCXN1Ym1lbnVNYW5hZ2VyLmFkZE1lbnVMaXN0ZW5lcgorCQkJKG5ldyBJTWVudUxpc3RlbmVyKCkgeworCQkJCSBwdWJsaWMgdm9pZCBtZW51QWJvdXRUb1Nob3coSU1lbnVNYW5hZ2VyIG1lbnVNYW5hZ2VyKSB7CisJCQkJCSBtZW51TWFuYWdlci51cGRhdGVBbGwodHJ1ZSk7CisJCQkJIH0KKwkJCSB9KTsKKworCQlhZGRHbG9iYWxBY3Rpb25zKHN1Ym1lbnVNYW5hZ2VyKTsKKwl9CisKKwkvKioKKwkgKiBXaGVuIHRoZSBhY3RpdmUgZWRpdG9yIGNoYW5nZXMsIHRoaXMgcmVtZW1iZXJzIHRoZSBjaGFuZ2UgYW5kIHJlZ2lzdGVycyB3aXRoIGl0IGFzIGEgc2VsZWN0aW9uIHByb3ZpZGVyLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIHNldEFjdGl2ZUVkaXRvcihJRWRpdG9yUGFydCBwYXJ0KSB7CisJCXN1cGVyLnNldEFjdGl2ZUVkaXRvcihwYXJ0KTsKKwkJYWN0aXZlRWRpdG9yUGFydCA9IHBhcnQ7CisKKwkJLy8gU3dpdGNoIHRvIHRoZSBuZXcgc2VsZWN0aW9uIHByb3ZpZGVyLgorCQkvLworCQlpZiAoc2VsZWN0aW9uUHJvdmlkZXIgIT0gbnVsbCkgeworCQkJc2VsZWN0aW9uUHJvdmlkZXIucmVtb3ZlU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyKHRoaXMpOworCQl9CisJCWlmIChwYXJ0ID09IG51bGwpIHsKKwkJCXNlbGVjdGlvblByb3ZpZGVyID0gbnVsbDsKKwkJfQorCQllbHNlIHsKKwkJCXNlbGVjdGlvblByb3ZpZGVyID0gcGFydC5nZXRTaXRlKCkuZ2V0U2VsZWN0aW9uUHJvdmlkZXIoKTsKKwkJCXNlbGVjdGlvblByb3ZpZGVyLmFkZFNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcih0aGlzKTsKKworCQkJLy8gRmFrZSBhIHNlbGVjdGlvbiBjaGFuZ2VkIGV2ZW50IHRvIHVwZGF0ZSB0aGUgbWVudXMuCisJCQkvLworCQkJaWYgKHNlbGVjdGlvblByb3ZpZGVyLmdldFNlbGVjdGlvbigpICE9IG51bGwpIHsKKwkJCQlzZWxlY3Rpb25DaGFuZ2VkKG5ldyBTZWxlY3Rpb25DaGFuZ2VkRXZlbnQoc2VsZWN0aW9uUHJvdmlkZXIsIHNlbGVjdGlvblByb3ZpZGVyLmdldFNlbGVjdGlvbigpKSk7CisJCQl9CisJCX0KKwl9CisKKwkvKioKKwkgKiBUaGlzIGltcGxlbWVudHMge0BsaW5rIG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcn0sCisJICogaGFuZGxpbmcge0BsaW5rIG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuU2VsZWN0aW9uQ2hhbmdlZEV2ZW50fXMgYnkgcXVlcnlpbmcgZm9yIHRoZSBjaGlsZHJlbiBhbmQgc2libGluZ3MKKwkgKiB0aGF0IGNhbiBiZSBhZGRlZCB0byB0aGUgc2VsZWN0ZWQgb2JqZWN0IGFuZCB1cGRhdGluZyB0aGUgbWVudXMgYWNjb3JkaW5nbHkuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgc2VsZWN0aW9uQ2hhbmdlZChTZWxlY3Rpb25DaGFuZ2VkRXZlbnQgZXZlbnQpIHsKKwkJLy8gUmVtb3ZlIGFueSBtZW51IGl0ZW1zIGZvciBvbGQgc2VsZWN0aW9uLgorCQkvLworCQlpZiAoY3JlYXRlQ2hpbGRNZW51TWFuYWdlciAhPSBudWxsKSB7CisJCQlkZXBvcHVsYXRlTWFuYWdlcihjcmVhdGVDaGlsZE1lbnVNYW5hZ2VyLCBjcmVhdGVDaGlsZEFjdGlvbnMpOworCQl9CisJCWlmIChjcmVhdGVTaWJsaW5nTWVudU1hbmFnZXIgIT0gbnVsbCkgeworCQkJZGVwb3B1bGF0ZU1hbmFnZXIoY3JlYXRlU2libGluZ01lbnVNYW5hZ2VyLCBjcmVhdGVTaWJsaW5nQWN0aW9ucyk7CisJCX0KKworCQkvLyBRdWVyeSB0aGUgbmV3IHNlbGVjdGlvbiBmb3IgYXBwcm9wcmlhdGUgbmV3IGNoaWxkL3NpYmxpbmcgZGVzY3JpcHRvcnMKKwkJLy8KKwkJQ29sbGVjdGlvbjw/PiBuZXdDaGlsZERlc2NyaXB0b3JzID0gbnVsbDsKKwkJQ29sbGVjdGlvbjw/PiBuZXdTaWJsaW5nRGVzY3JpcHRvcnMgPSBudWxsOworCisJCUlTZWxlY3Rpb24gc2VsZWN0aW9uID0gZXZlbnQuZ2V0U2VsZWN0aW9uKCk7CisJCWlmIChzZWxlY3Rpb24gaW5zdGFuY2VvZiBJU3RydWN0dXJlZFNlbGVjdGlvbiAmJiAoKElTdHJ1Y3R1cmVkU2VsZWN0aW9uKXNlbGVjdGlvbikuc2l6ZSgpID09IDEpIHsKKwkJCU9iamVjdCBvYmplY3QgPSAoKElTdHJ1Y3R1cmVkU2VsZWN0aW9uKXNlbGVjdGlvbikuZ2V0Rmlyc3RFbGVtZW50KCk7CisKKwkJCUVkaXRpbmdEb21haW4gZG9tYWluID0gKChJRWRpdGluZ0RvbWFpblByb3ZpZGVyKWFjdGl2ZUVkaXRvclBhcnQpLmdldEVkaXRpbmdEb21haW4oKTsKKworCQkJbmV3Q2hpbGREZXNjcmlwdG9ycyA9IGRvbWFpbi5nZXROZXdDaGlsZERlc2NyaXB0b3JzKG9iamVjdCwgbnVsbCk7CisJCQluZXdTaWJsaW5nRGVzY3JpcHRvcnMgPSBkb21haW4uZ2V0TmV3Q2hpbGREZXNjcmlwdG9ycyhudWxsLCBvYmplY3QpOworCQl9CisKKwkJLy8gR2VuZXJhdGUgYWN0aW9ucyBmb3Igc2VsZWN0aW9uOyBwb3B1bGF0ZSBhbmQgcmVkcmF3IHRoZSBtZW51cy4KKwkJLy8KKwkJY3JlYXRlQ2hpbGRBY3Rpb25zID0gZ2VuZXJhdGVDcmVhdGVDaGlsZEFjdGlvbnMobmV3Q2hpbGREZXNjcmlwdG9ycywgc2VsZWN0aW9uKTsKKwkJY3JlYXRlU2libGluZ0FjdGlvbnMgPSBnZW5lcmF0ZUNyZWF0ZVNpYmxpbmdBY3Rpb25zKG5ld1NpYmxpbmdEZXNjcmlwdG9ycywgc2VsZWN0aW9uKTsKKworCQlpZiAoY3JlYXRlQ2hpbGRNZW51TWFuYWdlciAhPSBudWxsKSB7CisJCQlwb3B1bGF0ZU1hbmFnZXIoY3JlYXRlQ2hpbGRNZW51TWFuYWdlciwgY3JlYXRlQ2hpbGRBY3Rpb25zLCBudWxsKTsKKwkJCWNyZWF0ZUNoaWxkTWVudU1hbmFnZXIudXBkYXRlKHRydWUpOworCQl9CisJCWlmIChjcmVhdGVTaWJsaW5nTWVudU1hbmFnZXIgIT0gbnVsbCkgeworCQkJcG9wdWxhdGVNYW5hZ2VyKGNyZWF0ZVNpYmxpbmdNZW51TWFuYWdlciwgY3JlYXRlU2libGluZ0FjdGlvbnMsIG51bGwpOworCQkJY3JlYXRlU2libGluZ01lbnVNYW5hZ2VyLnVwZGF0ZSh0cnVlKTsKKwkJfQorCX0KKworCS8qKgorCSAqIFRoaXMgZ2VuZXJhdGVzIGEge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmFjdGlvbi5DcmVhdGVDaGlsZEFjdGlvbn0gZm9yIGVhY2ggb2JqZWN0IGluIDxjb2RlPmRlc2NyaXB0b3JzPC9jb2RlPiwKKwkgKiBhbmQgcmV0dXJucyB0aGUgY29sbGVjdGlvbiBvZiB0aGVzZSBhY3Rpb25zLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBDb2xsZWN0aW9uPElBY3Rpb24+IGdlbmVyYXRlQ3JlYXRlQ2hpbGRBY3Rpb25zKENvbGxlY3Rpb248Pz4gZGVzY3JpcHRvcnMsIElTZWxlY3Rpb24gc2VsZWN0aW9uKSB7CisJCUNvbGxlY3Rpb248SUFjdGlvbj4gYWN0aW9ucyA9IG5ldyBBcnJheUxpc3Q8SUFjdGlvbj4oKTsKKwkJaWYgKGRlc2NyaXB0b3JzICE9IG51bGwpIHsKKwkJCWZvciAoT2JqZWN0IGRlc2NyaXB0b3IgOiBkZXNjcmlwdG9ycykgeworCQkJCWFjdGlvbnMuYWRkKG5ldyBDcmVhdGVDaGlsZEFjdGlvbihhY3RpdmVFZGl0b3JQYXJ0LCBzZWxlY3Rpb24sIGRlc2NyaXB0b3IpKTsKKwkJCX0KKwkJfQorCQlyZXR1cm4gYWN0aW9uczsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGdlbmVyYXRlcyBhIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5hY3Rpb24uQ3JlYXRlU2libGluZ0FjdGlvbn0gZm9yIGVhY2ggb2JqZWN0IGluIDxjb2RlPmRlc2NyaXB0b3JzPC9jb2RlPiwKKwkgKiBhbmQgcmV0dXJucyB0aGUgY29sbGVjdGlvbiBvZiB0aGVzZSBhY3Rpb25zLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBDb2xsZWN0aW9uPElBY3Rpb24+IGdlbmVyYXRlQ3JlYXRlU2libGluZ0FjdGlvbnMoQ29sbGVjdGlvbjw/PiBkZXNjcmlwdG9ycywgSVNlbGVjdGlvbiBzZWxlY3Rpb24pIHsKKwkJQ29sbGVjdGlvbjxJQWN0aW9uPiBhY3Rpb25zID0gbmV3IEFycmF5TGlzdDxJQWN0aW9uPigpOworCQlpZiAoZGVzY3JpcHRvcnMgIT0gbnVsbCkgeworCQkJZm9yIChPYmplY3QgZGVzY3JpcHRvciA6IGRlc2NyaXB0b3JzKSB7CisJCQkJYWN0aW9ucy5hZGQobmV3IENyZWF0ZVNpYmxpbmdBY3Rpb24oYWN0aXZlRWRpdG9yUGFydCwgc2VsZWN0aW9uLCBkZXNjcmlwdG9yKSk7CisJCQl9CisJCX0KKwkJcmV0dXJuIGFjdGlvbnM7CisJfQorCisJLyoqCisJICogVGhpcyBwb3B1bGF0ZXMgdGhlIHNwZWNpZmllZCA8Y29kZT5tYW5hZ2VyPC9jb2RlPiB3aXRoIHtAbGluayBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uQWN0aW9uQ29udHJpYnV0aW9uSXRlbX1zCisJICogYmFzZWQgb24gdGhlIHtAbGluayBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSUFjdGlvbn1zIGNvbnRhaW5lZCBpbiB0aGUgPGNvZGU+YWN0aW9uczwvY29kZT4gY29sbGVjdGlvbiwKKwkgKiBieSBpbnNlcnRpbmcgdGhlbSBiZWZvcmUgdGhlIHNwZWNpZmllZCBjb250cmlidXRpb24gaXRlbSA8Y29kZT5jb250cmlidXRpb25JRDwvY29kZT4uCisJICogSWYgPGNvZGU+Y29udHJpYnV0aW9uSUQ8L2NvZGU+IGlzIDxjb2RlPm51bGw8L2NvZGU+LCB0aGV5IGFyZSBzaW1wbHkgYWRkZWQuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgcG9wdWxhdGVNYW5hZ2VyKElDb250cmlidXRpb25NYW5hZ2VyIG1hbmFnZXIsIENvbGxlY3Rpb248PyBleHRlbmRzIElBY3Rpb24+IGFjdGlvbnMsIFN0cmluZyBjb250cmlidXRpb25JRCkgeworCQlpZiAoYWN0aW9ucyAhPSBudWxsKSB7CisJCQlmb3IgKElBY3Rpb24gYWN0aW9uIDogYWN0aW9ucykgeworCQkJCWlmIChjb250cmlidXRpb25JRCAhPSBudWxsKSB7CisJCQkJCW1hbmFnZXIuaW5zZXJ0QmVmb3JlKGNvbnRyaWJ1dGlvbklELCBhY3Rpb24pOworCQkJCX0KKwkJCQllbHNlIHsKKwkJCQkJbWFuYWdlci5hZGQoYWN0aW9uKTsKKwkJCQl9CisJCQl9CisJCX0KKwl9CisJCQorCS8qKgorCSAqIFRoaXMgcmVtb3ZlcyBmcm9tIHRoZSBzcGVjaWZpZWQgPGNvZGU+bWFuYWdlcjwvY29kZT4gYWxsIHtAbGluayBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uQWN0aW9uQ29udHJpYnV0aW9uSXRlbX1zCisJICogYmFzZWQgb24gdGhlIHtAbGluayBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSUFjdGlvbn1zIGNvbnRhaW5lZCBpbiB0aGUgPGNvZGU+YWN0aW9uczwvY29kZT4gY29sbGVjdGlvbi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBkZXBvcHVsYXRlTWFuYWdlcihJQ29udHJpYnV0aW9uTWFuYWdlciBtYW5hZ2VyLCBDb2xsZWN0aW9uPD8gZXh0ZW5kcyBJQWN0aW9uPiBhY3Rpb25zKSB7CisJCWlmIChhY3Rpb25zICE9IG51bGwpIHsKKwkJCUlDb250cmlidXRpb25JdGVtW10gaXRlbXMgPSBtYW5hZ2VyLmdldEl0ZW1zKCk7CisJCQlmb3IgKGludCBpID0gMDsgaSA8IGl0ZW1zLmxlbmd0aDsgaSsrKSB7CisJCQkJLy8gTG9vayBpbnRvIFN1YkNvbnRyaWJ1dGlvbkl0ZW1zCisJCQkJLy8KKwkJCQlJQ29udHJpYnV0aW9uSXRlbSBjb250cmlidXRpb25JdGVtID0gaXRlbXNbaV07CisJCQkJd2hpbGUgKGNvbnRyaWJ1dGlvbkl0ZW0gaW5zdGFuY2VvZiBTdWJDb250cmlidXRpb25JdGVtKSB7CisJCQkJCWNvbnRyaWJ1dGlvbkl0ZW0gPSAoKFN1YkNvbnRyaWJ1dGlvbkl0ZW0pY29udHJpYnV0aW9uSXRlbSkuZ2V0SW5uZXJJdGVtKCk7CisJCQkJfQorCisJCQkJLy8gRGVsZXRlIHRoZSBBY3Rpb25Db250cmlidXRpb25JdGVtcyB3aXRoIG1hdGNoaW5nIGFjdGlvbi4KKwkJCQkvLworCQkJCWlmIChjb250cmlidXRpb25JdGVtIGluc3RhbmNlb2YgQWN0aW9uQ29udHJpYnV0aW9uSXRlbSkgeworCQkJCQlJQWN0aW9uIGFjdGlvbiA9ICgoQWN0aW9uQ29udHJpYnV0aW9uSXRlbSljb250cmlidXRpb25JdGVtKS5nZXRBY3Rpb24oKTsKKwkJCQkJaWYgKGFjdGlvbnMuY29udGFpbnMoYWN0aW9uKSkgeworCQkJCQkJbWFuYWdlci5yZW1vdmUoY29udHJpYnV0aW9uSXRlbSk7CisJCQkJCX0KKwkJCQl9CisJCQl9CisJCX0KKwl9CisKKwkvKioKKwkgKiBUaGlzIHBvcHVsYXRlcyB0aGUgcG9wLXVwIG1lbnUgYmVmb3JlIGl0IGFwcGVhcnMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgbWVudUFib3V0VG9TaG93KElNZW51TWFuYWdlciBtZW51TWFuYWdlcikgeworCQlzdXBlci5tZW51QWJvdXRUb1Nob3cobWVudU1hbmFnZXIpOworCQlNZW51TWFuYWdlciBzdWJtZW51TWFuYWdlciA9IG51bGw7CisKKwkJc3VibWVudU1hbmFnZXIgPSBuZXcgTWVudU1hbmFnZXIoSW50ZXJ2ZW50aW9uc0VkaXRvclBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoIl9VSV9DcmVhdGVDaGlsZF9tZW51X2l0ZW0iKSk7CisJCXBvcHVsYXRlTWFuYWdlcihzdWJtZW51TWFuYWdlciwgY3JlYXRlQ2hpbGRBY3Rpb25zLCBudWxsKTsKKwkJbWVudU1hbmFnZXIuaW5zZXJ0QmVmb3JlKCJlZGl0Iiwgc3VibWVudU1hbmFnZXIpOworCisJCXN1Ym1lbnVNYW5hZ2VyID0gbmV3IE1lbnVNYW5hZ2VyKEludGVydmVudGlvbnNFZGl0b3JQbHVnaW4uSU5TVEFOQ0UuZ2V0U3RyaW5nKCJfVUlfQ3JlYXRlU2libGluZ19tZW51X2l0ZW0iKSk7CisJCXBvcHVsYXRlTWFuYWdlcihzdWJtZW51TWFuYWdlciwgY3JlYXRlU2libGluZ0FjdGlvbnMsIG51bGwpOworCQltZW51TWFuYWdlci5pbnNlcnRCZWZvcmUoImVkaXQiLCBzdWJtZW51TWFuYWdlcik7CisJfQorCisJLyoqCisJICogVGhpcyBpbnNlcnRzIGdsb2JhbCBhY3Rpb25zIGJlZm9yZSB0aGUgImFkZGl0aW9ucy1lbmQiIHNlcGFyYXRvci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgdm9pZCBhZGRHbG9iYWxBY3Rpb25zKElNZW51TWFuYWdlciBtZW51TWFuYWdlcikgeworCQltZW51TWFuYWdlci5pbnNlcnRBZnRlcigiYWRkaXRpb25zLWVuZCIsIG5ldyBTZXBhcmF0b3IoInVpLWFjdGlvbnMiKSk7CisJCW1lbnVNYW5hZ2VyLmluc2VydEFmdGVyKCJ1aS1hY3Rpb25zIiwgc2hvd1Byb3BlcnRpZXNWaWV3QWN0aW9uKTsKKworCQlyZWZyZXNoVmlld2VyQWN0aW9uLnNldEVuYWJsZWQocmVmcmVzaFZpZXdlckFjdGlvbi5pc0VuYWJsZWQoKSk7CQkKKwkJbWVudU1hbmFnZXIuaW5zZXJ0QWZ0ZXIoInVpLWFjdGlvbnMiLCByZWZyZXNoVmlld2VyQWN0aW9uKTsKKworCQlzdXBlci5hZGRHbG9iYWxBY3Rpb25zKG1lbnVNYW5hZ2VyKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGVuc3VyZXMgdGhhdCBhIGRlbGV0ZSBhY3Rpb24gd2lsbCBjbGVhbiB1cCBhbGwgcmVmZXJlbmNlcyB0byBkZWxldGVkIG9iamVjdHMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIGJvb2xlYW4gcmVtb3ZlQWxsUmVmZXJlbmNlc09uRGVsZXRlKCkgeworCQlyZXR1cm4gdHJ1ZTsKKwl9CisKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuaW50ZXJ2ZW50aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9pbnRlcnZlbnRpb25zL3ByZXNlbnRhdGlvbi9JbnRlcnZlbnRpb25zRWRpdG9yLmphdmEgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuaW50ZXJ2ZW50aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9pbnRlcnZlbnRpb25zL3ByZXNlbnRhdGlvbi9JbnRlcnZlbnRpb25zRWRpdG9yLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWZjY2FiMwotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5pbnRlcnZlbnRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2ludGVydmVudGlvbnMvcHJlc2VudGF0aW9uL0ludGVydmVudGlvbnNFZGl0b3IuamF2YQpAQCAtMCwwICsxLDE4NDkgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcnZlbnRpb25zLnByZXNlbnRhdGlvbjsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogCisgKiBDb3B5cmlnaHQgKGMpIDIwMTEgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuIAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyAKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0IAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwgCisgKiAKKyAqIENvbnRyaWJ1dG9yczogCisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOworaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW07CisKK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OworaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOworaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uczsKK2ltcG9ydCBqYXZhLnV0aWwuRXZlbnRPYmplY3Q7CitpbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7CitpbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOworaW1wb3J0IGphdmEudXRpbC5MaW5rZWRIYXNoTWFwOworaW1wb3J0IGphdmEudXRpbC5MaXN0OworaW1wb3J0IGphdmEudXRpbC5NYXA7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JRmlsZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JTWFya2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklSZXNvdXJjZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUmVzb3VyY2VDaGFuZ2VFdmVudDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUmVzb3VyY2VDaGFuZ2VMaXN0ZW5lcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUmVzb3VyY2VEZWx0YTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUmVzb3VyY2VEZWx0YVZpc2l0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuUmVzb3VyY2VzUGx1Z2luOworCitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkNvcmVFeGNlcHRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQYXRoOworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUHJvZ3Jlc3NNb25pdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5OdWxsUHJvZ3Jlc3NNb25pdG9yOworCitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklNZW51TGlzdGVuZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklNZW51TWFuYWdlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSVN0YXR1c0xpbmVNYW5hZ2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JVG9vbEJhck1hbmFnZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLk1lbnVNYW5hZ2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5TZXBhcmF0b3I7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5kaWFsb2dzLk1lc3NhZ2VEaWFsb2c7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuZGlhbG9ncy5Qcm9ncmVzc01vbml0b3JEaWFsb2c7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLkNvbHVtbldlaWdodERhdGE7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb25Qcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTdHJ1Y3R1cmVkU2VsZWN0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuTGlzdFZpZXdlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlNlbGVjdGlvbkNoYW5nZWRFdmVudDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlN0cnVjdHVyZWRTZWxlY3Rpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5TdHJ1Y3R1cmVkVmlld2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuVGFibGVMYXlvdXQ7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5UYWJsZVZpZXdlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlRyZWVWaWV3ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5WaWV3ZXI7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuU1dUOworCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmN1c3RvbS5DVGFiRm9sZGVyOworCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmRuZC5ETkQ7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmRuZC5UcmFuc2ZlcjsKKworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuQ29udHJvbEFkYXB0ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5Db250cm9sRXZlbnQ7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZ3JhcGhpY3MuUG9pbnQ7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QubGF5b3V0LkZpbGxMYXlvdXQ7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuTWVudTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5UYWJsZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5UYWJsZUNvbHVtbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5UcmVlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlRyZWVDb2x1bW47CisKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5JQWN0aW9uQmFyczsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5JRWRpdG9ySW5wdXQ7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuSUVkaXRvclBhcnQ7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuSUVkaXRvclNpdGU7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuSVBhcnRMaXN0ZW5lcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5JV29ya2JlbmNoUGFydDsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5QYXJ0SW5pdEV4Y2VwdGlvbjsKKworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLmRpYWxvZ3MuU2F2ZUFzRGlhbG9nOworCitpbXBvcnQgb3JnLmVjbGlwc2UudWkuaWRlLklHb3RvTWFya2VyOworCitpbXBvcnQgb3JnLmVjbGlwc2UudWkucGFydC5GaWxlRWRpdG9ySW5wdXQ7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkucGFydC5NdWx0aVBhZ2VFZGl0b3JQYXJ0OworCitpbXBvcnQgb3JnLmVjbGlwc2UudWkudmlld3MuY29udGVudG91dGxpbmUuQ29udGVudE91dGxpbmU7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkudmlld3MuY29udGVudG91dGxpbmUuQ29udGVudE91dGxpbmVQYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLnZpZXdzLmNvbnRlbnRvdXRsaW5lLklDb250ZW50T3V0bGluZVBhZ2U7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS52aWV3cy5wcm9wZXJ0aWVzLklQcm9wZXJ0eVNoZWV0UGFnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS52aWV3cy5wcm9wZXJ0aWVzLlByb3BlcnR5U2hlZXQ7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkudmlld3MucHJvcGVydGllcy5Qcm9wZXJ0eVNoZWV0UGFnZTsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24uY29tbWFuZC5CYXNpY0NvbW1hbmRTdGFjazsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLmNvbW1hbmQuQ29tbWFuZDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLmNvbW1hbmQuQ29tbWFuZFN0YWNrOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24uY29tbWFuZC5Db21tYW5kU3RhY2tMaXN0ZW5lcjsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LkFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbjsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udWkuTWFya2VySGVscGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udWkuVmlld2VyUGFuZTsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udWkuZWRpdG9yLlByb2JsZW1FZGl0b3JQYXJ0OworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51aS52aWV3ZXIuSVZpZXdlclByb3ZpZGVyOworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLkJhc2ljRGlhZ25vc3RpYzsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuRGlhZ25vc3RpYzsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuVVJJOworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3Q7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVWYWxpZGF0b3I7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUucmVzb3VyY2UuUmVzb3VyY2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnJlc291cmNlLlJlc291cmNlU2V0OworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnV0aWwuRUNvbnRlbnRBZGFwdGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS51dGlsLkVjb3JlVXRpbDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LmRvbWFpbi5BZGFwdGVyRmFjdG9yeUVkaXRpbmdEb21haW47CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQuZG9tYWluLkVkaXRpbmdEb21haW47CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQuZG9tYWluLklFZGl0aW5nRG9tYWluUHJvdmlkZXI7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5BZGFwdGVyRmFjdG9yeUl0ZW1EZWxlZ2F0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuQ29tcG9zZWRBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5SZWZsZWN0aXZlSXRlbVByb3ZpZGVyQWRhcHRlckZhY3Rvcnk7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5yZXNvdXJjZS5SZXNvdXJjZUl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5OworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkuYWN0aW9uLkVkaXRpbmdEb21haW5BY3Rpb25CYXJDb250cmlidXRvcjsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmNlbGxlZGl0b3IuQWRhcHRlckZhY3RvcnlUcmVlRWRpdG9yOworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkuZG5kLkVkaXRpbmdEb21haW5WaWV3ZXJEcm9wQWRhcHRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5kbmQuTG9jYWxUcmFuc2ZlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5kbmQuVmlld2VyRHJhZ0FkYXB0ZXI7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5wcm92aWRlci5BZGFwdGVyRmFjdG9yeUNvbnRlbnRQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5wcm92aWRlci5BZGFwdGVyRmFjdG9yeUxhYmVsUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkucHJvdmlkZXIuVW53cmFwcGluZ1NlbGVjdGlvblByb3ZpZGVyOworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkudXRpbC5FZGl0VUlNYXJrZXJIZWxwZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkudXRpbC5FZGl0VUlVdGlsOworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkudmlldy5FeHRlbmRlZFByb3BlcnR5U2hlZXRQYWdlOworCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcnZlbnRpb25zLnByb3ZpZGVyLkludGVydmVudGlvbnNJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeTsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5wcm92aWRlci5FY29yZUl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5OworCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5wcm92aWRlci5Db21tb25JdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeTsKKworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5wcm92aWRlci5HcmFwaEl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5OworCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLnByb3ZpZGVyLk1vZGVsSXRlbVByb3ZpZGVyQWRhcHRlckZhY3Rvcnk7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIucHJvdmlkZXIuTW9kaWZpZXJJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeTsKKworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUucHJvdmlkZXIuUHJlZGljYXRlSXRlbVByb3ZpZGVyQWRhcHRlckZhY3Rvcnk7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2NlbmFyaW8ucHJvdmlkZXIuU2NlbmFyaW9JdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeTsKKworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zZXF1ZW5jZXIucHJvdmlkZXIuU2VxdWVuY2VySXRlbVByb3ZpZGVyQWRhcHRlckZhY3Rvcnk7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc29sdmVyLnByb3ZpZGVyLlNvbHZlckl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5OworCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaGdlbmVyYXRvcnMucHJvdmlkZXIuR3JhcGhnZW5lcmF0b3JzSXRlbVByb3ZpZGVyQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuYWN0aW9ucy5Xb3Jrc3BhY2VNb2RpZnlPcGVyYXRpb247CisKKworLyoqCisgKiBUaGlzIGlzIGFuIGV4YW1wbGUgb2YgYSBJbnRlcnZlbnRpb25zIG1vZGVsIGVkaXRvci4KKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIEludGVydmVudGlvbnNFZGl0b3IKKwlleHRlbmRzIE11bHRpUGFnZUVkaXRvclBhcnQKKwlpbXBsZW1lbnRzIElFZGl0aW5nRG9tYWluUHJvdmlkZXIsIElTZWxlY3Rpb25Qcm92aWRlciwgSU1lbnVMaXN0ZW5lciwgSVZpZXdlclByb3ZpZGVyLCBJR290b01hcmtlciB7CisJLyoqCisJICogVGhpcyBrZWVwcyB0cmFjayBvZiB0aGUgZWRpdGluZyBkb21haW4gdGhhdCBpcyB1c2VkIHRvIHRyYWNrIGFsbCBjaGFuZ2VzIHRvIHRoZSBtb2RlbC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgQWRhcHRlckZhY3RvcnlFZGl0aW5nRG9tYWluIGVkaXRpbmdEb21haW47CisKKwkvKioKKwkgKiBUaGlzIGlzIHRoZSBvbmUgYWRhcHRlciBmYWN0b3J5IHVzZWQgZm9yIHByb3ZpZGluZyB2aWV3cyBvZiB0aGUgbW9kZWwuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIENvbXBvc2VkQWRhcHRlckZhY3RvcnkgYWRhcHRlckZhY3Rvcnk7CisKKwkvKioKKwkgKiBUaGlzIGlzIHRoZSBjb250ZW50IG91dGxpbmUgcGFnZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgSUNvbnRlbnRPdXRsaW5lUGFnZSBjb250ZW50T3V0bGluZVBhZ2U7CisKKwkvKioKKwkgKiBUaGlzIGlzIGEga2x1ZGdlLi4uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIElTdGF0dXNMaW5lTWFuYWdlciBjb250ZW50T3V0bGluZVN0YXR1c0xpbmVNYW5hZ2VyOworCisJLyoqCisJICogVGhpcyBpcyB0aGUgY29udGVudCBvdXRsaW5lIHBhZ2UncyB2aWV3ZXIuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIFRyZWVWaWV3ZXIgY29udGVudE91dGxpbmVWaWV3ZXI7CisKKwkvKioKKwkgKiBUaGlzIGlzIHRoZSBwcm9wZXJ0eSBzaGVldCBwYWdlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBQcm9wZXJ0eVNoZWV0UGFnZSBwcm9wZXJ0eVNoZWV0UGFnZTsKKworCS8qKgorCSAqIFRoaXMgaXMgdGhlIHZpZXdlciB0aGF0IHNoYWRvd3MgdGhlIHNlbGVjdGlvbiBpbiB0aGUgY29udGVudCBvdXRsaW5lLgorCSAqIFRoZSBwYXJlbnQgcmVsYXRpb24gbXVzdCBiZSBjb3JyZWN0bHkgZGVmaW5lZCBmb3IgdGhpcyB0byB3b3JrLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBUcmVlVmlld2VyIHNlbGVjdGlvblZpZXdlcjsKKworCS8qKgorCSAqIFRoaXMgaW52ZXJ0cyB0aGUgcm9sbCBvZiBwYXJlbnQgYW5kIGNoaWxkIGluIHRoZSBjb250ZW50IHByb3ZpZGVyIGFuZCBzaG93IHBhcmVudHMgYXMgYSB0cmVlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBUcmVlVmlld2VyIHBhcmVudFZpZXdlcjsKKworCS8qKgorCSAqIFRoaXMgc2hvd3MgaG93IGEgdHJlZSB2aWV3IHdvcmtzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBUcmVlVmlld2VyIHRyZWVWaWV3ZXI7CisKKwkvKioKKwkgKiBUaGlzIHNob3dzIGhvdyBhIGxpc3QgdmlldyB3b3Jrcy4KKwkgKiBBIGxpc3Qgdmlld2VyIGRvZXNuJ3Qgc3VwcG9ydCBpY29ucy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgTGlzdFZpZXdlciBsaXN0Vmlld2VyOworCisJLyoqCisJICogVGhpcyBzaG93cyBob3cgYSB0YWJsZSB2aWV3IHdvcmtzLgorCSAqIEEgdGFibGUgY2FuIGJlIHVzZWQgYXMgYSBsaXN0IHdpdGggaWNvbnMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIFRhYmxlVmlld2VyIHRhYmxlVmlld2VyOworCisJLyoqCisJICogVGhpcyBzaG93cyBob3cgYSB0cmVlIHZpZXcgd2l0aCBjb2x1bW5zIHdvcmtzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBUcmVlVmlld2VyIHRyZWVWaWV3ZXJXaXRoQ29sdW1uczsKKworCS8qKgorCSAqIFRoaXMga2VlcHMgdHJhY2sgb2YgdGhlIGFjdGl2ZSB2aWV3ZXIgcGFuZSwgaW4gdGhlIGJvb2suCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIFZpZXdlclBhbmUgY3VycmVudFZpZXdlclBhbmU7CisKKwkvKioKKwkgKiBUaGlzIGtlZXBzIHRyYWNrIG9mIHRoZSBhY3RpdmUgY29udGVudCB2aWV3ZXIsIHdoaWNoIG1heSBiZSBlaXRoZXIgb25lIG9mIHRoZSB2aWV3ZXJzIGluIHRoZSBwYWdlcyBvciB0aGUgY29udGVudCBvdXRsaW5lIHZpZXdlci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgVmlld2VyIGN1cnJlbnRWaWV3ZXI7CisKKwkvKioKKwkgKiBUaGlzIGxpc3RlbnMgdG8gd2hpY2ggZXZlciB2aWV3ZXIgaXMgYWN0aXZlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBJU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyIHNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcjsKKworCS8qKgorCSAqIFRoaXMga2VlcHMgdHJhY2sgb2YgYWxsIHRoZSB7QGxpbmsgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyfXMgdGhhdCBhcmUgbGlzdGVuaW5nIHRvIHRoaXMgZWRpdG9yLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBDb2xsZWN0aW9uPElTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXI+IHNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcnMgPSBuZXcgQXJyYXlMaXN0PElTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXI+KCk7CisKKwkvKioKKwkgKiBUaGlzIGtlZXBzIHRyYWNrIG9mIHRoZSBzZWxlY3Rpb24gb2YgdGhlIGVkaXRvciBhcyBhIHdob2xlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBJU2VsZWN0aW9uIGVkaXRvclNlbGVjdGlvbiA9IFN0cnVjdHVyZWRTZWxlY3Rpb24uRU1QVFk7CisKKwkvKioKKwkgKiBUaGUgTWFya2VySGVscGVyIGlzIHJlc3BvbnNpYmxlIGZvciBjcmVhdGluZyB3b3Jrc3BhY2UgcmVzb3VyY2UgbWFya2VycyBwcmVzZW50ZWQKKwkgKiBpbiBFY2xpcHNlJ3MgUHJvYmxlbXMgVmlldy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgTWFya2VySGVscGVyIG1hcmtlckhlbHBlciA9IG5ldyBFZGl0VUlNYXJrZXJIZWxwZXIoKTsKKworCS8qKgorCSAqIFRoaXMgbGlzdGVucyBmb3Igd2hlbiB0aGUgb3V0bGluZSBiZWNvbWVzIGFjdGl2ZQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBJUGFydExpc3RlbmVyIHBhcnRMaXN0ZW5lciA9CisJCW5ldyBJUGFydExpc3RlbmVyKCkgeworCQkJcHVibGljIHZvaWQgcGFydEFjdGl2YXRlZChJV29ya2JlbmNoUGFydCBwKSB7CisJCQkJaWYgKHAgaW5zdGFuY2VvZiBDb250ZW50T3V0bGluZSkgeworCQkJCQlpZiAoKChDb250ZW50T3V0bGluZSlwKS5nZXRDdXJyZW50UGFnZSgpID09IGNvbnRlbnRPdXRsaW5lUGFnZSkgeworCQkJCQkJZ2V0QWN0aW9uQmFyQ29udHJpYnV0b3IoKS5zZXRBY3RpdmVFZGl0b3IoSW50ZXJ2ZW50aW9uc0VkaXRvci50aGlzKTsKKworCQkJCQkJc2V0Q3VycmVudFZpZXdlcihjb250ZW50T3V0bGluZVZpZXdlcik7CisJCQkJCX0KKwkJCQl9CisJCQkJZWxzZSBpZiAocCBpbnN0YW5jZW9mIFByb3BlcnR5U2hlZXQpIHsKKwkJCQkJaWYgKCgoUHJvcGVydHlTaGVldClwKS5nZXRDdXJyZW50UGFnZSgpID09IHByb3BlcnR5U2hlZXRQYWdlKSB7CisJCQkJCQlnZXRBY3Rpb25CYXJDb250cmlidXRvcigpLnNldEFjdGl2ZUVkaXRvcihJbnRlcnZlbnRpb25zRWRpdG9yLnRoaXMpOworCQkJCQkJaGFuZGxlQWN0aXZhdGUoKTsKKwkJCQkJfQorCQkJCX0KKwkJCQllbHNlIGlmIChwID09IEludGVydmVudGlvbnNFZGl0b3IudGhpcykgeworCQkJCQloYW5kbGVBY3RpdmF0ZSgpOworCQkJCX0KKwkJCX0KKwkJCXB1YmxpYyB2b2lkIHBhcnRCcm91Z2h0VG9Ub3AoSVdvcmtiZW5jaFBhcnQgcCkgeworCQkJCS8vIElnbm9yZS4KKwkJCX0KKwkJCXB1YmxpYyB2b2lkIHBhcnRDbG9zZWQoSVdvcmtiZW5jaFBhcnQgcCkgeworCQkJCS8vIElnbm9yZS4KKwkJCX0KKwkJCXB1YmxpYyB2b2lkIHBhcnREZWFjdGl2YXRlZChJV29ya2JlbmNoUGFydCBwKSB7CisJCQkJLy8gSWdub3JlLgorCQkJfQorCQkJcHVibGljIHZvaWQgcGFydE9wZW5lZChJV29ya2JlbmNoUGFydCBwKSB7CisJCQkJLy8gSWdub3JlLgorCQkJfQorCQl9OworCisJLyoqCisJICogUmVzb3VyY2VzIHRoYXQgaGF2ZSBiZWVuIHJlbW92ZWQgc2luY2UgbGFzdCBhY3RpdmF0aW9uLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBDb2xsZWN0aW9uPFJlc291cmNlPiByZW1vdmVkUmVzb3VyY2VzID0gbmV3IEFycmF5TGlzdDxSZXNvdXJjZT4oKTsKKworCS8qKgorCSAqIFJlc291cmNlcyB0aGF0IGhhdmUgYmVlbiBjaGFuZ2VkIHNpbmNlIGxhc3QgYWN0aXZhdGlvbi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgQ29sbGVjdGlvbjxSZXNvdXJjZT4gY2hhbmdlZFJlc291cmNlcyA9IG5ldyBBcnJheUxpc3Q8UmVzb3VyY2U+KCk7CisKKwkvKioKKwkgKiBSZXNvdXJjZXMgdGhhdCBoYXZlIGJlZW4gc2F2ZWQuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIENvbGxlY3Rpb248UmVzb3VyY2U+IHNhdmVkUmVzb3VyY2VzID0gbmV3IEFycmF5TGlzdDxSZXNvdXJjZT4oKTsKKworCS8qKgorCSAqIE1hcCB0byBzdG9yZSB0aGUgZGlhZ25vc3RpYyBhc3NvY2lhdGVkIHdpdGggYSByZXNvdXJjZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgTWFwPFJlc291cmNlLCBEaWFnbm9zdGljPiByZXNvdXJjZVRvRGlhZ25vc3RpY01hcCA9IG5ldyBMaW5rZWRIYXNoTWFwPFJlc291cmNlLCBEaWFnbm9zdGljPigpOworCisJLyoqCisJICogQ29udHJvbHMgd2hldGhlciB0aGUgcHJvYmxlbSBpbmRpY2F0aW9uIHNob3VsZCBiZSB1cGRhdGVkLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBib29sZWFuIHVwZGF0ZVByb2JsZW1JbmRpY2F0aW9uID0gdHJ1ZTsKKworCS8qKgorCSAqIEFkYXB0ZXIgdXNlZCB0byB1cGRhdGUgdGhlIHByb2JsZW0gaW5kaWNhdGlvbiB3aGVuIHJlc291cmNlcyBhcmUgZGVtYW5kZWQgbG9hZGVkLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBFQ29udGVudEFkYXB0ZXIgcHJvYmxlbUluZGljYXRpb25BZGFwdGVyID0gCisJCW5ldyBFQ29udGVudEFkYXB0ZXIoKSB7CisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyB2b2lkIG5vdGlmeUNoYW5nZWQoTm90aWZpY2F0aW9uIG5vdGlmaWNhdGlvbikgeworCQkJCWlmIChub3RpZmljYXRpb24uZ2V0Tm90aWZpZXIoKSBpbnN0YW5jZW9mIFJlc291cmNlKSB7CisJCQkJCXN3aXRjaCAobm90aWZpY2F0aW9uLmdldEZlYXR1cmVJRChSZXNvdXJjZS5jbGFzcykpIHsKKwkJCQkJCWNhc2UgUmVzb3VyY2UuUkVTT1VSQ0VfX0lTX0xPQURFRDoKKwkJCQkJCWNhc2UgUmVzb3VyY2UuUkVTT1VSQ0VfX0VSUk9SUzoKKwkJCQkJCWNhc2UgUmVzb3VyY2UuUkVTT1VSQ0VfX1dBUk5JTkdTOiB7CisJCQkJCQkJUmVzb3VyY2UgcmVzb3VyY2UgPSAoUmVzb3VyY2Upbm90aWZpY2F0aW9uLmdldE5vdGlmaWVyKCk7CisJCQkJCQkJRGlhZ25vc3RpYyBkaWFnbm9zdGljID0gYW5hbHl6ZVJlc291cmNlUHJvYmxlbXMocmVzb3VyY2UsIG51bGwpOworCQkJCQkJCWlmIChkaWFnbm9zdGljLmdldFNldmVyaXR5KCkgIT0gRGlhZ25vc3RpYy5PSykgeworCQkJCQkJCQlyZXNvdXJjZVRvRGlhZ25vc3RpY01hcC5wdXQocmVzb3VyY2UsIGRpYWdub3N0aWMpOworCQkJCQkJCX0KKwkJCQkJCQllbHNlIHsKKwkJCQkJCQkJcmVzb3VyY2VUb0RpYWdub3N0aWNNYXAucmVtb3ZlKHJlc291cmNlKTsKKwkJCQkJCQl9CisKKwkJCQkJCQlpZiAodXBkYXRlUHJvYmxlbUluZGljYXRpb24pIHsKKwkJCQkJCQkJZ2V0U2l0ZSgpLmdldFNoZWxsKCkuZ2V0RGlzcGxheSgpLmFzeW5jRXhlYworCQkJCQkJCQkJKG5ldyBSdW5uYWJsZSgpIHsKKwkJCQkJCQkJCQkgcHVibGljIHZvaWQgcnVuKCkgeworCQkJCQkJCQkJCQkgdXBkYXRlUHJvYmxlbUluZGljYXRpb24oKTsKKwkJCQkJCQkJCQkgfQorCQkJCQkJCQkJIH0pOworCQkJCQkJCX0KKwkJCQkJCQlicmVhazsKKwkJCQkJCX0KKwkJCQkJfQorCQkJCX0KKwkJCQllbHNlIHsKKwkJCQkJc3VwZXIubm90aWZ5Q2hhbmdlZChub3RpZmljYXRpb24pOworCQkJCX0KKwkJCX0KKworCQkJQE92ZXJyaWRlCisJCQlwcm90ZWN0ZWQgdm9pZCBzZXRUYXJnZXQoUmVzb3VyY2UgdGFyZ2V0KSB7CisJCQkJYmFzaWNTZXRUYXJnZXQodGFyZ2V0KTsKKwkJCX0KKworCQkJQE92ZXJyaWRlCisJCQlwcm90ZWN0ZWQgdm9pZCB1bnNldFRhcmdldChSZXNvdXJjZSB0YXJnZXQpIHsKKwkJCQliYXNpY1Vuc2V0VGFyZ2V0KHRhcmdldCk7CisJCQl9CisJCX07CisKKwkvKioKKwkgKiBUaGlzIGxpc3RlbnMgZm9yIHdvcmtzcGFjZSBjaGFuZ2VzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBJUmVzb3VyY2VDaGFuZ2VMaXN0ZW5lciByZXNvdXJjZUNoYW5nZUxpc3RlbmVyID0KKwkJbmV3IElSZXNvdXJjZUNoYW5nZUxpc3RlbmVyKCkgeworCQkJcHVibGljIHZvaWQgcmVzb3VyY2VDaGFuZ2VkKElSZXNvdXJjZUNoYW5nZUV2ZW50IGV2ZW50KSB7CisJCQkJSVJlc291cmNlRGVsdGEgZGVsdGEgPSBldmVudC5nZXREZWx0YSgpOworCQkJCXRyeSB7CisJCQkJCWNsYXNzIFJlc291cmNlRGVsdGFWaXNpdG9yIGltcGxlbWVudHMgSVJlc291cmNlRGVsdGFWaXNpdG9yIHsKKwkJCQkJCXByb3RlY3RlZCBSZXNvdXJjZVNldCByZXNvdXJjZVNldCA9IGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKTsKKwkJCQkJCXByb3RlY3RlZCBDb2xsZWN0aW9uPFJlc291cmNlPiBjaGFuZ2VkUmVzb3VyY2VzID0gbmV3IEFycmF5TGlzdDxSZXNvdXJjZT4oKTsKKwkJCQkJCXByb3RlY3RlZCBDb2xsZWN0aW9uPFJlc291cmNlPiByZW1vdmVkUmVzb3VyY2VzID0gbmV3IEFycmF5TGlzdDxSZXNvdXJjZT4oKTsKKworCQkJCQkJcHVibGljIGJvb2xlYW4gdmlzaXQoSVJlc291cmNlRGVsdGEgZGVsdGEpIHsKKwkJCQkJCQlpZiAoZGVsdGEuZ2V0UmVzb3VyY2UoKS5nZXRUeXBlKCkgPT0gSVJlc291cmNlLkZJTEUpIHsKKwkJCQkJCQkJaWYgKGRlbHRhLmdldEtpbmQoKSA9PSBJUmVzb3VyY2VEZWx0YS5SRU1PVkVEIHx8CisJCQkJCQkJCSAgICBkZWx0YS5nZXRLaW5kKCkgPT0gSVJlc291cmNlRGVsdGEuQ0hBTkdFRCAmJiBkZWx0YS5nZXRGbGFncygpICE9IElSZXNvdXJjZURlbHRhLk1BUktFUlMpIHsKKwkJCQkJCQkJCVJlc291cmNlIHJlc291cmNlID0gcmVzb3VyY2VTZXQuZ2V0UmVzb3VyY2UoVVJJLmNyZWF0ZVBsYXRmb3JtUmVzb3VyY2VVUkkoZGVsdGEuZ2V0RnVsbFBhdGgoKS50b1N0cmluZygpLCB0cnVlKSwgZmFsc2UpOworCQkJCQkJCQkJaWYgKHJlc291cmNlICE9IG51bGwpIHsKKwkJCQkJCQkJCQlpZiAoZGVsdGEuZ2V0S2luZCgpID09IElSZXNvdXJjZURlbHRhLlJFTU9WRUQpIHsKKwkJCQkJCQkJCQkJcmVtb3ZlZFJlc291cmNlcy5hZGQocmVzb3VyY2UpOworCQkJCQkJCQkJCX0KKwkJCQkJCQkJCQllbHNlIGlmICghc2F2ZWRSZXNvdXJjZXMucmVtb3ZlKHJlc291cmNlKSkgeworCQkJCQkJCQkJCQljaGFuZ2VkUmVzb3VyY2VzLmFkZChyZXNvdXJjZSk7CisJCQkJCQkJCQkJfQorCQkJCQkJCQkJfQorCQkJCQkJCQl9CisJCQkJCQkJfQorCisJCQkJCQkJcmV0dXJuIHRydWU7CisJCQkJCQl9CisKKwkJCQkJCXB1YmxpYyBDb2xsZWN0aW9uPFJlc291cmNlPiBnZXRDaGFuZ2VkUmVzb3VyY2VzKCkgeworCQkJCQkJCXJldHVybiBjaGFuZ2VkUmVzb3VyY2VzOworCQkJCQkJfQorCisJCQkJCQlwdWJsaWMgQ29sbGVjdGlvbjxSZXNvdXJjZT4gZ2V0UmVtb3ZlZFJlc291cmNlcygpIHsKKwkJCQkJCQlyZXR1cm4gcmVtb3ZlZFJlc291cmNlczsKKwkJCQkJCX0KKwkJCQkJfQorCisJCQkJCWZpbmFsIFJlc291cmNlRGVsdGFWaXNpdG9yIHZpc2l0b3IgPSBuZXcgUmVzb3VyY2VEZWx0YVZpc2l0b3IoKTsKKwkJCQkJZGVsdGEuYWNjZXB0KHZpc2l0b3IpOworCisJCQkJCWlmICghdmlzaXRvci5nZXRSZW1vdmVkUmVzb3VyY2VzKCkuaXNFbXB0eSgpKSB7CisJCQkJCQlnZXRTaXRlKCkuZ2V0U2hlbGwoKS5nZXREaXNwbGF5KCkuYXN5bmNFeGVjCisJCQkJCQkJKG5ldyBSdW5uYWJsZSgpIHsKKwkJCQkJCQkJIHB1YmxpYyB2b2lkIHJ1bigpIHsKKwkJCQkJCQkJCSByZW1vdmVkUmVzb3VyY2VzLmFkZEFsbCh2aXNpdG9yLmdldFJlbW92ZWRSZXNvdXJjZXMoKSk7CisJCQkJCQkJCQkgaWYgKCFpc0RpcnR5KCkpIHsKKwkJCQkJCQkJCQkgZ2V0U2l0ZSgpLmdldFBhZ2UoKS5jbG9zZUVkaXRvcihJbnRlcnZlbnRpb25zRWRpdG9yLnRoaXMsIGZhbHNlKTsKKwkJCQkJCQkJCSB9CisJCQkJCQkJCSB9CisJCQkJCQkJIH0pOworCQkJCQl9CisKKwkJCQkJaWYgKCF2aXNpdG9yLmdldENoYW5nZWRSZXNvdXJjZXMoKS5pc0VtcHR5KCkpIHsKKwkJCQkJCWdldFNpdGUoKS5nZXRTaGVsbCgpLmdldERpc3BsYXkoKS5hc3luY0V4ZWMKKwkJCQkJCQkobmV3IFJ1bm5hYmxlKCkgeworCQkJCQkJCQkgcHVibGljIHZvaWQgcnVuKCkgeworCQkJCQkJCQkJIGNoYW5nZWRSZXNvdXJjZXMuYWRkQWxsKHZpc2l0b3IuZ2V0Q2hhbmdlZFJlc291cmNlcygpKTsKKwkJCQkJCQkJCSBpZiAoZ2V0U2l0ZSgpLmdldFBhZ2UoKS5nZXRBY3RpdmVFZGl0b3IoKSA9PSBJbnRlcnZlbnRpb25zRWRpdG9yLnRoaXMpIHsKKwkJCQkJCQkJCQkgaGFuZGxlQWN0aXZhdGUoKTsKKwkJCQkJCQkJCSB9CisJCQkJCQkJCSB9CisJCQkJCQkJIH0pOworCQkJCQl9CisJCQkJfQorCQkJCWNhdGNoIChDb3JlRXhjZXB0aW9uIGV4Y2VwdGlvbikgeworCQkJCQlJbnRlcnZlbnRpb25zRWRpdG9yUGx1Z2luLklOU1RBTkNFLmxvZyhleGNlcHRpb24pOworCQkJCX0KKwkJCX0KKwkJfTsKKworCS8qKgorCSAqIEhhbmRsZXMgYWN0aXZhdGlvbiBvZiB0aGUgZWRpdG9yIG9yIGl0J3MgYXNzb2NpYXRlZCB2aWV3cy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBoYW5kbGVBY3RpdmF0ZSgpIHsKKwkJLy8gUmVjb21wdXRlIHRoZSByZWFkIG9ubHkgc3RhdGUuCisJCS8vCisJCWlmIChlZGl0aW5nRG9tYWluLmdldFJlc291cmNlVG9SZWFkT25seU1hcCgpICE9IG51bGwpIHsKKwkJICBlZGl0aW5nRG9tYWluLmdldFJlc291cmNlVG9SZWFkT25seU1hcCgpLmNsZWFyKCk7CisKKwkJICAvLyBSZWZyZXNoIGFueSBhY3Rpb25zIHRoYXQgbWF5IGJlY29tZSBlbmFibGVkIG9yIGRpc2FibGVkLgorCQkgIC8vCisJCSAgc2V0U2VsZWN0aW9uKGdldFNlbGVjdGlvbigpKTsKKwkJfQorCisJCWlmICghcmVtb3ZlZFJlc291cmNlcy5pc0VtcHR5KCkpIHsKKwkJCWlmIChoYW5kbGVEaXJ0eUNvbmZsaWN0KCkpIHsKKwkJCQlnZXRTaXRlKCkuZ2V0UGFnZSgpLmNsb3NlRWRpdG9yKEludGVydmVudGlvbnNFZGl0b3IudGhpcywgZmFsc2UpOworCQkJfQorCQkJZWxzZSB7CisJCQkJcmVtb3ZlZFJlc291cmNlcy5jbGVhcigpOworCQkJCWNoYW5nZWRSZXNvdXJjZXMuY2xlYXIoKTsKKwkJCQlzYXZlZFJlc291cmNlcy5jbGVhcigpOworCQkJfQorCQl9CisJCWVsc2UgaWYgKCFjaGFuZ2VkUmVzb3VyY2VzLmlzRW1wdHkoKSkgeworCQkJY2hhbmdlZFJlc291cmNlcy5yZW1vdmVBbGwoc2F2ZWRSZXNvdXJjZXMpOworCQkJaGFuZGxlQ2hhbmdlZFJlc291cmNlcygpOworCQkJY2hhbmdlZFJlc291cmNlcy5jbGVhcigpOworCQkJc2F2ZWRSZXNvdXJjZXMuY2xlYXIoKTsKKwkJfQorCX0KKworCS8qKgorCSAqIEhhbmRsZXMgd2hhdCB0byBkbyB3aXRoIGNoYW5nZWQgcmVzb3VyY2VzIG9uIGFjdGl2YXRpb24uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgaGFuZGxlQ2hhbmdlZFJlc291cmNlcygpIHsKKwkJaWYgKCFjaGFuZ2VkUmVzb3VyY2VzLmlzRW1wdHkoKSAmJiAoIWlzRGlydHkoKSB8fCBoYW5kbGVEaXJ0eUNvbmZsaWN0KCkpKSB7CisJCQlpZiAoaXNEaXJ0eSgpKSB7CisJCQkJY2hhbmdlZFJlc291cmNlcy5hZGRBbGwoZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpLmdldFJlc291cmNlcygpKTsKKwkJCX0KKwkJCWVkaXRpbmdEb21haW4uZ2V0Q29tbWFuZFN0YWNrKCkuZmx1c2goKTsKKworCQkJdXBkYXRlUHJvYmxlbUluZGljYXRpb24gPSBmYWxzZTsKKwkJCWZvciAoUmVzb3VyY2UgcmVzb3VyY2UgOiBjaGFuZ2VkUmVzb3VyY2VzKSB7CisJCQkJaWYgKHJlc291cmNlLmlzTG9hZGVkKCkpIHsKKwkJCQkJcmVzb3VyY2UudW5sb2FkKCk7CisJCQkJCXRyeSB7CisJCQkJCQlyZXNvdXJjZS5sb2FkKENvbGxlY3Rpb25zLkVNUFRZX01BUCk7CisJCQkJCX0KKwkJCQkJY2F0Y2ggKElPRXhjZXB0aW9uIGV4Y2VwdGlvbikgeworCQkJCQkJaWYgKCFyZXNvdXJjZVRvRGlhZ25vc3RpY01hcC5jb250YWluc0tleShyZXNvdXJjZSkpIHsKKwkJCQkJCQlyZXNvdXJjZVRvRGlhZ25vc3RpY01hcC5wdXQocmVzb3VyY2UsIGFuYWx5emVSZXNvdXJjZVByb2JsZW1zKHJlc291cmNlLCBleGNlcHRpb24pKTsKKwkJCQkJCX0KKwkJCQkJfQorCQkJCX0KKwkJCX0KKworCQkJaWYgKEFkYXB0ZXJGYWN0b3J5RWRpdGluZ0RvbWFpbi5pc1N0YWxlKGVkaXRvclNlbGVjdGlvbikpIHsKKwkJCQlzZXRTZWxlY3Rpb24oU3RydWN0dXJlZFNlbGVjdGlvbi5FTVBUWSk7CisJCQl9CisKKwkJCXVwZGF0ZVByb2JsZW1JbmRpY2F0aW9uID0gdHJ1ZTsKKwkJCXVwZGF0ZVByb2JsZW1JbmRpY2F0aW9uKCk7CisJCX0KKwl9CisgIAorCS8qKgorCSAqIFVwZGF0ZXMgdGhlIHByb2JsZW1zIGluZGljYXRpb24gd2l0aCB0aGUgaW5mb3JtYXRpb24gZGVzY3JpYmVkIGluIHRoZSBzcGVjaWZpZWQgZGlhZ25vc3RpYy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCB1cGRhdGVQcm9ibGVtSW5kaWNhdGlvbigpIHsKKwkJaWYgKHVwZGF0ZVByb2JsZW1JbmRpY2F0aW9uKSB7CisJCQlCYXNpY0RpYWdub3N0aWMgZGlhZ25vc3RpYyA9CisJCQkJbmV3IEJhc2ljRGlhZ25vc3RpYworCQkJCQkoRGlhZ25vc3RpYy5PSywKKwkJCQkJICJvcmcuZWNsaXBzZS5zdGVtLnVpLmludGVydmVudGlvbnMiLAorCQkJCQkgMCwKKwkJCQkJIG51bGwsCisJCQkJCSBuZXcgT2JqZWN0IFtdIHsgZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpIH0pOworCQkJZm9yIChEaWFnbm9zdGljIGNoaWxkRGlhZ25vc3RpYyA6IHJlc291cmNlVG9EaWFnbm9zdGljTWFwLnZhbHVlcygpKSB7CisJCQkJaWYgKGNoaWxkRGlhZ25vc3RpYy5nZXRTZXZlcml0eSgpICE9IERpYWdub3N0aWMuT0spIHsKKwkJCQkJZGlhZ25vc3RpYy5hZGQoY2hpbGREaWFnbm9zdGljKTsKKwkJCQl9CisJCQl9CisKKwkJCWludCBsYXN0RWRpdG9yUGFnZSA9IGdldFBhZ2VDb3VudCgpIC0gMTsKKwkJCWlmIChsYXN0RWRpdG9yUGFnZSA+PSAwICYmIGdldEVkaXRvcihsYXN0RWRpdG9yUGFnZSkgaW5zdGFuY2VvZiBQcm9ibGVtRWRpdG9yUGFydCkgeworCQkJCSgoUHJvYmxlbUVkaXRvclBhcnQpZ2V0RWRpdG9yKGxhc3RFZGl0b3JQYWdlKSkuc2V0RGlhZ25vc3RpYyhkaWFnbm9zdGljKTsKKwkJCQlpZiAoZGlhZ25vc3RpYy5nZXRTZXZlcml0eSgpICE9IERpYWdub3N0aWMuT0spIHsKKwkJCQkJc2V0QWN0aXZlUGFnZShsYXN0RWRpdG9yUGFnZSk7CisJCQkJfQorCQkJfQorCQkJZWxzZSBpZiAoZGlhZ25vc3RpYy5nZXRTZXZlcml0eSgpICE9IERpYWdub3N0aWMuT0spIHsKKwkJCQlQcm9ibGVtRWRpdG9yUGFydCBwcm9ibGVtRWRpdG9yUGFydCA9IG5ldyBQcm9ibGVtRWRpdG9yUGFydCgpOworCQkJCXByb2JsZW1FZGl0b3JQYXJ0LnNldERpYWdub3N0aWMoZGlhZ25vc3RpYyk7CisJCQkJcHJvYmxlbUVkaXRvclBhcnQuc2V0TWFya2VySGVscGVyKG1hcmtlckhlbHBlcik7CisJCQkJdHJ5IHsKKwkJCQkJYWRkUGFnZSgrK2xhc3RFZGl0b3JQYWdlLCBwcm9ibGVtRWRpdG9yUGFydCwgZ2V0RWRpdG9ySW5wdXQoKSk7CisJCQkJCXNldFBhZ2VUZXh0KGxhc3RFZGl0b3JQYWdlLCBwcm9ibGVtRWRpdG9yUGFydC5nZXRQYXJ0TmFtZSgpKTsKKwkJCQkJc2V0QWN0aXZlUGFnZShsYXN0RWRpdG9yUGFnZSk7CisJCQkJCXNob3dUYWJzKCk7CisJCQkJfQorCQkJCWNhdGNoIChQYXJ0SW5pdEV4Y2VwdGlvbiBleGNlcHRpb24pIHsKKwkJCQkJSW50ZXJ2ZW50aW9uc0VkaXRvclBsdWdpbi5JTlNUQU5DRS5sb2coZXhjZXB0aW9uKTsKKwkJCQl9CisJCQl9CisKKwkJCWlmIChtYXJrZXJIZWxwZXIuaGFzTWFya2VycyhlZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkpKSB7CisJCQkJbWFya2VySGVscGVyLmRlbGV0ZU1hcmtlcnMoZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpKTsKKwkJCQlpZiAoZGlhZ25vc3RpYy5nZXRTZXZlcml0eSgpICE9IERpYWdub3N0aWMuT0spIHsKKwkJCQkJdHJ5IHsKKwkJCQkJCW1hcmtlckhlbHBlci5jcmVhdGVNYXJrZXJzKGRpYWdub3N0aWMpOworCQkJCQl9CisJCQkJCWNhdGNoIChDb3JlRXhjZXB0aW9uIGV4Y2VwdGlvbikgeworCQkJCQkJSW50ZXJ2ZW50aW9uc0VkaXRvclBsdWdpbi5JTlNUQU5DRS5sb2coZXhjZXB0aW9uKTsKKwkJCQkJfQorCQkJCX0KKwkJCX0KKwkJfQorCX0KKworCS8qKgorCSAqIFNob3dzIGEgZGlhbG9nIHRoYXQgYXNrcyBpZiBjb25mbGljdGluZyBjaGFuZ2VzIHNob3VsZCBiZSBkaXNjYXJkZWQuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIGJvb2xlYW4gaGFuZGxlRGlydHlDb25mbGljdCgpIHsKKwkJcmV0dXJuCisJCQlNZXNzYWdlRGlhbG9nLm9wZW5RdWVzdGlvbgorCQkJCShnZXRTaXRlKCkuZ2V0U2hlbGwoKSwKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfRmlsZUNvbmZsaWN0X2xhYmVsIiksCisJCQkJIGdldFN0cmluZygiX1dBUk5fRmlsZUNvbmZsaWN0IikpOworCX0KKworCS8qKgorCSAqIFRoaXMgY3JlYXRlcyBhIG1vZGVsIGVkaXRvci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgSW50ZXJ2ZW50aW9uc0VkaXRvcigpIHsKKwkJc3VwZXIoKTsKKwkJaW5pdGlhbGl6ZUVkaXRpbmdEb21haW4oKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHNldHMgdXAgdGhlIGVkaXRpbmcgZG9tYWluIGZvciB0aGUgbW9kZWwgZWRpdG9yLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIGluaXRpYWxpemVFZGl0aW5nRG9tYWluKCkgeworCQkvLyBDcmVhdGUgYW4gYWRhcHRlciBmYWN0b3J5IHRoYXQgeWllbGRzIGl0ZW0gcHJvdmlkZXJzLgorCQkvLworCQlhZGFwdGVyRmFjdG9yeSA9IG5ldyBDb21wb3NlZEFkYXB0ZXJGYWN0b3J5KENvbXBvc2VkQWRhcHRlckZhY3RvcnkuRGVzY3JpcHRvci5SZWdpc3RyeS5JTlNUQU5DRSk7CisKKwkJYWRhcHRlckZhY3RvcnkuYWRkQWRhcHRlckZhY3RvcnkobmV3IFJlc291cmNlSXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkoKSk7CisJCWFkYXB0ZXJGYWN0b3J5LmFkZEFkYXB0ZXJGYWN0b3J5KG5ldyBJbnRlcnZlbnRpb25zSXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkoKSk7CisJCWFkYXB0ZXJGYWN0b3J5LmFkZEFkYXB0ZXJGYWN0b3J5KG5ldyBDb21tb25JdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSgpKTsKKwkJYWRhcHRlckZhY3RvcnkuYWRkQWRhcHRlckZhY3RvcnkobmV3IEdyYXBoSXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkoKSk7CisJCWFkYXB0ZXJGYWN0b3J5LmFkZEFkYXB0ZXJGYWN0b3J5KG5ldyBNb2RlbEl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5KCkpOworCQlhZGFwdGVyRmFjdG9yeS5hZGRBZGFwdGVyRmFjdG9yeShuZXcgTW9kaWZpZXJJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSgpKTsKKwkJYWRhcHRlckZhY3RvcnkuYWRkQWRhcHRlckZhY3RvcnkobmV3IFByZWRpY2F0ZUl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5KCkpOworCQlhZGFwdGVyRmFjdG9yeS5hZGRBZGFwdGVyRmFjdG9yeShuZXcgU2NlbmFyaW9JdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSgpKTsKKwkJYWRhcHRlckZhY3RvcnkuYWRkQWRhcHRlckZhY3RvcnkobmV3IFNlcXVlbmNlckl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5KCkpOworCQlhZGFwdGVyRmFjdG9yeS5hZGRBZGFwdGVyRmFjdG9yeShuZXcgU29sdmVySXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkoKSk7CisJCWFkYXB0ZXJGYWN0b3J5LmFkZEFkYXB0ZXJGYWN0b3J5KG5ldyBFY29yZUl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5KCkpOworCQlhZGFwdGVyRmFjdG9yeS5hZGRBZGFwdGVyRmFjdG9yeShuZXcgR3JhcGhnZW5lcmF0b3JzSXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkoKSk7CisJCWFkYXB0ZXJGYWN0b3J5LmFkZEFkYXB0ZXJGYWN0b3J5KG5ldyBSZWZsZWN0aXZlSXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkoKSk7CisKKwkJLy8gQ3JlYXRlIHRoZSBjb21tYW5kIHN0YWNrIHRoYXQgd2lsbCBub3RpZnkgdGhpcyBlZGl0b3IgYXMgY29tbWFuZHMgYXJlIGV4ZWN1dGVkLgorCQkvLworCQlCYXNpY0NvbW1hbmRTdGFjayBjb21tYW5kU3RhY2sgPSBuZXcgQmFzaWNDb21tYW5kU3RhY2soKTsKKworCQkvLyBBZGQgYSBsaXN0ZW5lciB0byBzZXQgdGhlIG1vc3QgcmVjZW50IGNvbW1hbmQncyBhZmZlY3RlZCBvYmplY3RzIHRvIGJlIHRoZSBzZWxlY3Rpb24gb2YgdGhlIHZpZXdlciB3aXRoIGZvY3VzLgorCQkvLworCQljb21tYW5kU3RhY2suYWRkQ29tbWFuZFN0YWNrTGlzdGVuZXIKKwkJCShuZXcgQ29tbWFuZFN0YWNrTGlzdGVuZXIoKSB7CisJCQkJIHB1YmxpYyB2b2lkIGNvbW1hbmRTdGFja0NoYW5nZWQoZmluYWwgRXZlbnRPYmplY3QgZXZlbnQpIHsKKwkJCQkJIGdldENvbnRhaW5lcigpLmdldERpc3BsYXkoKS5hc3luY0V4ZWMKKwkJCQkJCSAobmV3IFJ1bm5hYmxlKCkgeworCQkJCQkJCSAgcHVibGljIHZvaWQgcnVuKCkgeworCQkJCQkJCQkgIGZpcmVQcm9wZXJ0eUNoYW5nZShJRWRpdG9yUGFydC5QUk9QX0RJUlRZKTsKKworCQkJCQkJCQkgIC8vIFRyeSB0byBzZWxlY3QgdGhlIGFmZmVjdGVkIG9iamVjdHMuCisJCQkJCQkJCSAgLy8KKwkJCQkJCQkJICBDb21tYW5kIG1vc3RSZWNlbnRDb21tYW5kID0gKChDb21tYW5kU3RhY2spZXZlbnQuZ2V0U291cmNlKCkpLmdldE1vc3RSZWNlbnRDb21tYW5kKCk7CisJCQkJCQkJCSAgaWYgKG1vc3RSZWNlbnRDb21tYW5kICE9IG51bGwpIHsKKwkJCQkJCQkJCSAgc2V0U2VsZWN0aW9uVG9WaWV3ZXIobW9zdFJlY2VudENvbW1hbmQuZ2V0QWZmZWN0ZWRPYmplY3RzKCkpOworCQkJCQkJCQkgIH0KKwkJCQkJCQkJICBpZiAocHJvcGVydHlTaGVldFBhZ2UgIT0gbnVsbCAmJiAhcHJvcGVydHlTaGVldFBhZ2UuZ2V0Q29udHJvbCgpLmlzRGlzcG9zZWQoKSkgeworCQkJCQkJCQkJICBwcm9wZXJ0eVNoZWV0UGFnZS5yZWZyZXNoKCk7CisJCQkJCQkJCSAgfQorCQkJCQkJCSAgfQorCQkJCQkJICB9KTsKKwkJCQkgfQorCQkJIH0pOworCisJCS8vIENyZWF0ZSB0aGUgZWRpdGluZyBkb21haW4gd2l0aCBhIHNwZWNpYWwgY29tbWFuZCBzdGFjay4KKwkJLy8KKwkJZWRpdGluZ0RvbWFpbiA9IG5ldyBBZGFwdGVyRmFjdG9yeUVkaXRpbmdEb21haW4oYWRhcHRlckZhY3RvcnksIGNvbW1hbmRTdGFjaywgbmV3IEhhc2hNYXA8UmVzb3VyY2UsIEJvb2xlYW4+KCkpOworCX0KKworCS8qKgorCSAqIFRoaXMgaXMgaGVyZSBmb3IgdGhlIGxpc3RlbmVyIHRvIGJlIGFibGUgdG8gY2FsbCBpdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwkJCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIGZpcmVQcm9wZXJ0eUNoYW5nZShpbnQgYWN0aW9uKSB7CisJCXN1cGVyLmZpcmVQcm9wZXJ0eUNoYW5nZShhY3Rpb24pOworCX0KKworCS8qKgorCSAqIFRoaXMgc2V0cyB0aGUgc2VsZWN0aW9uIGludG8gd2hpY2hldmVyIHZpZXdlciBpcyBhY3RpdmUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgc2V0U2VsZWN0aW9uVG9WaWV3ZXIoQ29sbGVjdGlvbjw/PiBjb2xsZWN0aW9uKSB7CisJCWZpbmFsIENvbGxlY3Rpb248Pz4gdGhlU2VsZWN0aW9uID0gY29sbGVjdGlvbjsKKwkJLy8gTWFrZSBzdXJlIGl0J3Mgb2theS4KKwkJLy8KKwkJaWYgKHRoZVNlbGVjdGlvbiAhPSBudWxsICYmICF0aGVTZWxlY3Rpb24uaXNFbXB0eSgpKSB7CisJCQlSdW5uYWJsZSBydW5uYWJsZSA9CisJCQkJbmV3IFJ1bm5hYmxlKCkgeworCQkJCQlwdWJsaWMgdm9pZCBydW4oKSB7CisJCQkJCQkvLyBUcnkgdG8gc2VsZWN0IHRoZSBpdGVtcyBpbiB0aGUgY3VycmVudCBjb250ZW50IHZpZXdlciBvZiB0aGUgZWRpdG9yLgorCQkJCQkJLy8KKwkJCQkJCWlmIChjdXJyZW50Vmlld2VyICE9IG51bGwpIHsKKwkJCQkJCQljdXJyZW50Vmlld2VyLnNldFNlbGVjdGlvbihuZXcgU3RydWN0dXJlZFNlbGVjdGlvbih0aGVTZWxlY3Rpb24udG9BcnJheSgpKSwgdHJ1ZSk7CisJCQkJCQl9CisJCQkJCX0KKwkJCQl9OworCQkJZ2V0U2l0ZSgpLmdldFNoZWxsKCkuZ2V0RGlzcGxheSgpLmFzeW5jRXhlYyhydW5uYWJsZSk7CisJCX0KKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgdGhlIGVkaXRpbmcgZG9tYWluIGFzIHJlcXVpcmVkIGJ5IHRoZSB7QGxpbmsgSUVkaXRpbmdEb21haW5Qcm92aWRlcn0gaW50ZXJmYWNlLgorCSAqIFRoaXMgaXMgaW1wb3J0YW50IGZvciBpbXBsZW1lbnRpbmcgdGhlIHN0YXRpYyBtZXRob2RzIG9mIHtAbGluayBBZGFwdGVyRmFjdG9yeUVkaXRpbmdEb21haW59CisJICogYW5kIGZvciBzdXBwb3J0aW5nIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5hY3Rpb24uQ29tbWFuZEFjdGlvbn0uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVkaXRpbmdEb21haW4gZ2V0RWRpdGluZ0RvbWFpbigpIHsKKwkJcmV0dXJuIGVkaXRpbmdEb21haW47CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIGNsYXNzIFJldmVyc2VBZGFwdGVyRmFjdG9yeUNvbnRlbnRQcm92aWRlciBleHRlbmRzIEFkYXB0ZXJGYWN0b3J5Q29udGVudFByb3ZpZGVyIHsKKwkJLyoqCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlwdWJsaWMgUmV2ZXJzZUFkYXB0ZXJGYWN0b3J5Q29udGVudFByb3ZpZGVyKEFkYXB0ZXJGYWN0b3J5IGFkYXB0ZXJGYWN0b3J5KSB7CisJCQlzdXBlcihhZGFwdGVyRmFjdG9yeSk7CisJCX0KKworCQkvKioKKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUBPdmVycmlkZQorCQlwdWJsaWMgT2JqZWN0IFtdIGdldEVsZW1lbnRzKE9iamVjdCBvYmplY3QpIHsKKwkJCU9iamVjdCBwYXJlbnQgPSBzdXBlci5nZXRQYXJlbnQob2JqZWN0KTsKKwkJCXJldHVybiAocGFyZW50ID09IG51bGwgPyBDb2xsZWN0aW9ucy5FTVBUWV9TRVQgOiBDb2xsZWN0aW9ucy5zaW5nbGV0b24ocGFyZW50KSkudG9BcnJheSgpOworCQl9CisKKwkJLyoqCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlAT3ZlcnJpZGUKKwkJcHVibGljIE9iamVjdCBbXSBnZXRDaGlsZHJlbihPYmplY3Qgb2JqZWN0KSB7CisJCQlPYmplY3QgcGFyZW50ID0gc3VwZXIuZ2V0UGFyZW50KG9iamVjdCk7CisJCQlyZXR1cm4gKHBhcmVudCA9PSBudWxsID8gQ29sbGVjdGlvbnMuRU1QVFlfU0VUIDogQ29sbGVjdGlvbnMuc2luZ2xldG9uKHBhcmVudCkpLnRvQXJyYXkoKTsKKwkJfQorCisJCS8qKgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJQE92ZXJyaWRlCisJCXB1YmxpYyBib29sZWFuIGhhc0NoaWxkcmVuKE9iamVjdCBvYmplY3QpIHsKKwkJCU9iamVjdCBwYXJlbnQgPSBzdXBlci5nZXRQYXJlbnQob2JqZWN0KTsKKwkJCXJldHVybiBwYXJlbnQgIT0gbnVsbDsKKwkJfQorCisJCS8qKgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJQE92ZXJyaWRlCisJCXB1YmxpYyBPYmplY3QgZ2V0UGFyZW50KE9iamVjdCBvYmplY3QpIHsKKwkJCXJldHVybiBudWxsOworCQl9CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgc2V0Q3VycmVudFZpZXdlclBhbmUoVmlld2VyUGFuZSB2aWV3ZXJQYW5lKSB7CisJCWlmIChjdXJyZW50Vmlld2VyUGFuZSAhPSB2aWV3ZXJQYW5lKSB7CisJCQlpZiAoY3VycmVudFZpZXdlclBhbmUgIT0gbnVsbCkgeworCQkJCWN1cnJlbnRWaWV3ZXJQYW5lLnNob3dGb2N1cyhmYWxzZSk7CisJCQl9CisJCQljdXJyZW50Vmlld2VyUGFuZSA9IHZpZXdlclBhbmU7CisJCX0KKwkJc2V0Q3VycmVudFZpZXdlcihjdXJyZW50Vmlld2VyUGFuZS5nZXRWaWV3ZXIoKSk7CisJfQorCisJLyoqCisJICogVGhpcyBtYWtlcyBzdXJlIHRoYXQgb25lIGNvbnRlbnQgdmlld2VyLCBlaXRoZXIgZm9yIHRoZSBjdXJyZW50IHBhZ2Ugb3IgdGhlIG91dGxpbmUgdmlldywgaWYgaXQgaGFzIGZvY3VzLAorCSAqIGlzIHRoZSBjdXJyZW50IG9uZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRDdXJyZW50Vmlld2VyKFZpZXdlciB2aWV3ZXIpIHsKKwkJLy8gSWYgaXQgaXMgY2hhbmdpbmcuLi4KKwkJLy8KKwkJaWYgKGN1cnJlbnRWaWV3ZXIgIT0gdmlld2VyKSB7CisJCQlpZiAoc2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyID09IG51bGwpIHsKKwkJCQkvLyBDcmVhdGUgdGhlIGxpc3RlbmVyIG9uIGRlbWFuZC4KKwkJCQkvLworCQkJCXNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lciA9CisJCQkJCW5ldyBJU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyKCkgeworCQkJCQkJLy8gVGhpcyBqdXN0IG5vdGlmaWVzIHRob3NlIHRoaW5ncyB0aGF0IGFyZSBhZmZlY3RlZCBieSB0aGUgc2VjdGlvbi4KKwkJCQkJCS8vCisJCQkJCQlwdWJsaWMgdm9pZCBzZWxlY3Rpb25DaGFuZ2VkKFNlbGVjdGlvbkNoYW5nZWRFdmVudCBzZWxlY3Rpb25DaGFuZ2VkRXZlbnQpIHsKKwkJCQkJCQlzZXRTZWxlY3Rpb24oc2VsZWN0aW9uQ2hhbmdlZEV2ZW50LmdldFNlbGVjdGlvbigpKTsKKwkJCQkJCX0KKwkJCQkJfTsKKwkJCX0KKworCQkJLy8gU3RvcCBsaXN0ZW5pbmcgdG8gdGhlIG9sZCBvbmUuCisJCQkvLworCQkJaWYgKGN1cnJlbnRWaWV3ZXIgIT0gbnVsbCkgeworCQkJCWN1cnJlbnRWaWV3ZXIucmVtb3ZlU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyKHNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcik7CisJCQl9CisKKwkJCS8vIFN0YXJ0IGxpc3RlbmluZyB0byB0aGUgbmV3IG9uZS4KKwkJCS8vCisJCQlpZiAodmlld2VyICE9IG51bGwpIHsKKwkJCQl2aWV3ZXIuYWRkU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyKHNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcik7CisJCQl9CisKKwkJCS8vIFJlbWVtYmVyIGl0LgorCQkJLy8KKwkJCWN1cnJlbnRWaWV3ZXIgPSB2aWV3ZXI7CisKKwkJCS8vIFNldCB0aGUgZWRpdG9ycyBzZWxlY3Rpb24gYmFzZWQgb24gdGhlIGN1cnJlbnQgdmlld2VyJ3Mgc2VsZWN0aW9uLgorCQkJLy8KKwkJCXNldFNlbGVjdGlvbihjdXJyZW50Vmlld2VyID09IG51bGwgPyBTdHJ1Y3R1cmVkU2VsZWN0aW9uLkVNUFRZIDogY3VycmVudFZpZXdlci5nZXRTZWxlY3Rpb24oKSk7CisJCX0KKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgdGhlIHZpZXdlciBhcyByZXF1aXJlZCBieSB0aGUge0BsaW5rIElWaWV3ZXJQcm92aWRlcn0gaW50ZXJmYWNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBWaWV3ZXIgZ2V0Vmlld2VyKCkgeworCQlyZXR1cm4gY3VycmVudFZpZXdlcjsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGNyZWF0ZXMgYSBjb250ZXh0IG1lbnUgZm9yIHRoZSB2aWV3ZXIgYW5kIGFkZHMgYSBsaXN0ZW5lciBhcyB3ZWxsIHJlZ2lzdGVyaW5nIHRoZSBtZW51IGZvciBleHRlbnNpb24uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgY3JlYXRlQ29udGV4dE1lbnVGb3IoU3RydWN0dXJlZFZpZXdlciB2aWV3ZXIpIHsKKwkJTWVudU1hbmFnZXIgY29udGV4dE1lbnUgPSBuZXcgTWVudU1hbmFnZXIoIiNQb3BVcCIpOworCQljb250ZXh0TWVudS5hZGQobmV3IFNlcGFyYXRvcigiYWRkaXRpb25zIikpOworCQljb250ZXh0TWVudS5zZXRSZW1vdmVBbGxXaGVuU2hvd24odHJ1ZSk7CisJCWNvbnRleHRNZW51LmFkZE1lbnVMaXN0ZW5lcih0aGlzKTsKKwkJTWVudSBtZW51PSBjb250ZXh0TWVudS5jcmVhdGVDb250ZXh0TWVudSh2aWV3ZXIuZ2V0Q29udHJvbCgpKTsKKwkJdmlld2VyLmdldENvbnRyb2woKS5zZXRNZW51KG1lbnUpOworCQlnZXRTaXRlKCkucmVnaXN0ZXJDb250ZXh0TWVudShjb250ZXh0TWVudSwgbmV3IFVud3JhcHBpbmdTZWxlY3Rpb25Qcm92aWRlcih2aWV3ZXIpKTsKKworCQlpbnQgZG5kT3BlcmF0aW9ucyA9IERORC5EUk9QX0NPUFkgfCBETkQuRFJPUF9NT1ZFIHwgRE5ELkRST1BfTElOSzsKKwkJVHJhbnNmZXJbXSB0cmFuc2ZlcnMgPSBuZXcgVHJhbnNmZXJbXSB7IExvY2FsVHJhbnNmZXIuZ2V0SW5zdGFuY2UoKSB9OworCQl2aWV3ZXIuYWRkRHJhZ1N1cHBvcnQoZG5kT3BlcmF0aW9ucywgdHJhbnNmZXJzLCBuZXcgVmlld2VyRHJhZ0FkYXB0ZXIodmlld2VyKSk7CisJCXZpZXdlci5hZGREcm9wU3VwcG9ydChkbmRPcGVyYXRpb25zLCB0cmFuc2ZlcnMsIG5ldyBFZGl0aW5nRG9tYWluVmlld2VyRHJvcEFkYXB0ZXIoZWRpdGluZ0RvbWFpbiwgdmlld2VyKSk7CisJfQorCisJLyoqCisJICogVGhpcyBpcyB0aGUgbWV0aG9kIGNhbGxlZCB0byBsb2FkIGEgcmVzb3VyY2UgaW50byB0aGUgZWRpdGluZyBkb21haW4ncyByZXNvdXJjZSBzZXQgYmFzZWQgb24gdGhlIGVkaXRvcidzIGlucHV0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIGNyZWF0ZU1vZGVsKCkgeworCQlVUkkgcmVzb3VyY2VVUkkgPSBFZGl0VUlVdGlsLmdldFVSSShnZXRFZGl0b3JJbnB1dCgpKTsKKwkJRXhjZXB0aW9uIGV4Y2VwdGlvbiA9IG51bGw7CisJCVJlc291cmNlIHJlc291cmNlID0gbnVsbDsKKwkJdHJ5IHsKKwkJCS8vIExvYWQgdGhlIHJlc291cmNlIHRocm91Z2ggdGhlIGVkaXRpbmcgZG9tYWluLgorCQkJLy8KKwkJCXJlc291cmNlID0gZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpLmdldFJlc291cmNlKHJlc291cmNlVVJJLCB0cnVlKTsKKwkJfQorCQljYXRjaCAoRXhjZXB0aW9uIGUpIHsKKwkJCWV4Y2VwdGlvbiA9IGU7CisJCQlyZXNvdXJjZSA9IGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKS5nZXRSZXNvdXJjZShyZXNvdXJjZVVSSSwgZmFsc2UpOworCQl9CisKKwkJRGlhZ25vc3RpYyBkaWFnbm9zdGljID0gYW5hbHl6ZVJlc291cmNlUHJvYmxlbXMocmVzb3VyY2UsIGV4Y2VwdGlvbik7CisJCWlmIChkaWFnbm9zdGljLmdldFNldmVyaXR5KCkgIT0gRGlhZ25vc3RpYy5PSykgeworCQkJcmVzb3VyY2VUb0RpYWdub3N0aWNNYXAucHV0KHJlc291cmNlLCAgYW5hbHl6ZVJlc291cmNlUHJvYmxlbXMocmVzb3VyY2UsIGV4Y2VwdGlvbikpOworCQl9CisJCWVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKS5lQWRhcHRlcnMoKS5hZGQocHJvYmxlbUluZGljYXRpb25BZGFwdGVyKTsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIGEgZGlhZ25vc3RpYyBkZXNjcmliaW5nIHRoZSBlcnJvcnMgYW5kIHdhcm5pbmdzIGxpc3RlZCBpbiB0aGUgcmVzb3VyY2UKKwkgKiBhbmQgdGhlIHNwZWNpZmllZCBleGNlcHRpb24gKGlmIGFueSkuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIERpYWdub3N0aWMgYW5hbHl6ZVJlc291cmNlUHJvYmxlbXMoUmVzb3VyY2UgcmVzb3VyY2UsIEV4Y2VwdGlvbiBleGNlcHRpb24pIHsKKwkJaWYgKCFyZXNvdXJjZS5nZXRFcnJvcnMoKS5pc0VtcHR5KCkgfHwgIXJlc291cmNlLmdldFdhcm5pbmdzKCkuaXNFbXB0eSgpKSB7CisJCQlCYXNpY0RpYWdub3N0aWMgYmFzaWNEaWFnbm9zdGljID0KKwkJCQluZXcgQmFzaWNEaWFnbm9zdGljCisJCQkJCShEaWFnbm9zdGljLkVSUk9SLAorCQkJCQkgIm9yZy5lY2xpcHNlLnN0ZW0udWkuaW50ZXJ2ZW50aW9ucyIsCisJCQkJCSAwLAorCQkJCQkgZ2V0U3RyaW5nKCJfVUlfQ3JlYXRlTW9kZWxFcnJvcl9tZXNzYWdlIiwgcmVzb3VyY2UuZ2V0VVJJKCkpLAorCQkJCQkgbmV3IE9iamVjdCBbXSB7IGV4Y2VwdGlvbiA9PSBudWxsID8gKE9iamVjdClyZXNvdXJjZSA6IGV4Y2VwdGlvbiB9KTsKKwkJCWJhc2ljRGlhZ25vc3RpYy5tZXJnZShFY29yZVV0aWwuY29tcHV0ZURpYWdub3N0aWMocmVzb3VyY2UsIHRydWUpKTsKKwkJCXJldHVybiBiYXNpY0RpYWdub3N0aWM7CisJCX0KKwkJZWxzZSBpZiAoZXhjZXB0aW9uICE9IG51bGwpIHsKKwkJCXJldHVybgorCQkJCW5ldyBCYXNpY0RpYWdub3N0aWMKKwkJCQkJKERpYWdub3N0aWMuRVJST1IsCisJCQkJCSAib3JnLmVjbGlwc2Uuc3RlbS51aS5pbnRlcnZlbnRpb25zIiwKKwkJCQkJIDAsCisJCQkJCSBnZXRTdHJpbmcoIl9VSV9DcmVhdGVNb2RlbEVycm9yX21lc3NhZ2UiLCByZXNvdXJjZS5nZXRVUkkoKSksCisJCQkJCSBuZXcgT2JqZWN0W10geyBleGNlcHRpb24gfSk7CisJCX0KKwkJZWxzZSB7CisJCQlyZXR1cm4gRGlhZ25vc3RpYy5PS19JTlNUQU5DRTsKKwkJfQorCX0KKworCS8qKgorCSAqIFRoaXMgaXMgdGhlIG1ldGhvZCB1c2VkIGJ5IHRoZSBmcmFtZXdvcmsgdG8gaW5zdGFsbCB5b3VyIG93biBjb250cm9scy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBjcmVhdGVQYWdlcygpIHsKKwkJLy8gQ3JlYXRlcyB0aGUgbW9kZWwgZnJvbSB0aGUgZWRpdG9yIGlucHV0CisJCS8vCisJCWNyZWF0ZU1vZGVsKCk7CisKKwkJLy8gT25seSBjcmVhdGVzIHRoZSBvdGhlciBwYWdlcyBpZiB0aGVyZSBpcyBzb21ldGhpbmcgdGhhdCBjYW4gYmUgZWRpdGVkCisJCS8vCisJCWlmICghZ2V0RWRpdGluZ0RvbWFpbigpLmdldFJlc291cmNlU2V0KCkuZ2V0UmVzb3VyY2VzKCkuaXNFbXB0eSgpKSB7CisJCQkvLyBDcmVhdGUgYSBwYWdlIGZvciB0aGUgc2VsZWN0aW9uIHRyZWUgdmlldy4KKwkJCS8vCisJCQl7CisJCQkJVmlld2VyUGFuZSB2aWV3ZXJQYW5lID0KKwkJCQkJbmV3IFZpZXdlclBhbmUoZ2V0U2l0ZSgpLmdldFBhZ2UoKSwgSW50ZXJ2ZW50aW9uc0VkaXRvci50aGlzKSB7CisJCQkJCQlAT3ZlcnJpZGUKKwkJCQkJCXB1YmxpYyBWaWV3ZXIgY3JlYXRlVmlld2VyKENvbXBvc2l0ZSBjb21wb3NpdGUpIHsKKwkJCQkJCQlUcmVlIHRyZWUgPSBuZXcgVHJlZShjb21wb3NpdGUsIFNXVC5NVUxUSSk7CisJCQkJCQkJVHJlZVZpZXdlciBuZXdUcmVlVmlld2VyID0gbmV3IFRyZWVWaWV3ZXIodHJlZSk7CisJCQkJCQkJcmV0dXJuIG5ld1RyZWVWaWV3ZXI7CisJCQkJCQl9CisJCQkJCQlAT3ZlcnJpZGUKKwkJCQkJCXB1YmxpYyB2b2lkIHJlcXVlc3RBY3RpdmF0aW9uKCkgeworCQkJCQkJCXN1cGVyLnJlcXVlc3RBY3RpdmF0aW9uKCk7CisJCQkJCQkJc2V0Q3VycmVudFZpZXdlclBhbmUodGhpcyk7CisJCQkJCQl9CisJCQkJCX07CisJCQkJdmlld2VyUGFuZS5jcmVhdGVDb250cm9sKGdldENvbnRhaW5lcigpKTsKKworCQkJCXNlbGVjdGlvblZpZXdlciA9IChUcmVlVmlld2VyKXZpZXdlclBhbmUuZ2V0Vmlld2VyKCk7CisJCQkJc2VsZWN0aW9uVmlld2VyLnNldENvbnRlbnRQcm92aWRlcihuZXcgQWRhcHRlckZhY3RvcnlDb250ZW50UHJvdmlkZXIoYWRhcHRlckZhY3RvcnkpKTsKKworCQkJCXNlbGVjdGlvblZpZXdlci5zZXRMYWJlbFByb3ZpZGVyKG5ldyBBZGFwdGVyRmFjdG9yeUxhYmVsUHJvdmlkZXIoYWRhcHRlckZhY3RvcnkpKTsKKwkJCQlzZWxlY3Rpb25WaWV3ZXIuc2V0SW5wdXQoZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpKTsKKwkJCQlzZWxlY3Rpb25WaWV3ZXIuc2V0U2VsZWN0aW9uKG5ldyBTdHJ1Y3R1cmVkU2VsZWN0aW9uKGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKS5nZXRSZXNvdXJjZXMoKS5nZXQoMCkpLCB0cnVlKTsKKwkJCQl2aWV3ZXJQYW5lLnNldFRpdGxlKGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKSk7CisKKwkJCQluZXcgQWRhcHRlckZhY3RvcnlUcmVlRWRpdG9yKHNlbGVjdGlvblZpZXdlci5nZXRUcmVlKCksIGFkYXB0ZXJGYWN0b3J5KTsKKworCQkJCWNyZWF0ZUNvbnRleHRNZW51Rm9yKHNlbGVjdGlvblZpZXdlcik7CisJCQkJaW50IHBhZ2VJbmRleCA9IGFkZFBhZ2Uodmlld2VyUGFuZS5nZXRDb250cm9sKCkpOworCQkJCXNldFBhZ2VUZXh0KHBhZ2VJbmRleCwgZ2V0U3RyaW5nKCJfVUlfU2VsZWN0aW9uUGFnZV9sYWJlbCIpKTsKKwkJCX0KKworCQkJLy8gQ3JlYXRlIGEgcGFnZSBmb3IgdGhlIHBhcmVudCB0cmVlIHZpZXcuCisJCQkvLworCQkJeworCQkJCVZpZXdlclBhbmUgdmlld2VyUGFuZSA9CisJCQkJCW5ldyBWaWV3ZXJQYW5lKGdldFNpdGUoKS5nZXRQYWdlKCksIEludGVydmVudGlvbnNFZGl0b3IudGhpcykgeworCQkJCQkJQE92ZXJyaWRlCisJCQkJCQlwdWJsaWMgVmlld2VyIGNyZWF0ZVZpZXdlcihDb21wb3NpdGUgY29tcG9zaXRlKSB7CisJCQkJCQkJVHJlZSB0cmVlID0gbmV3IFRyZWUoY29tcG9zaXRlLCBTV1QuTVVMVEkpOworCQkJCQkJCVRyZWVWaWV3ZXIgbmV3VHJlZVZpZXdlciA9IG5ldyBUcmVlVmlld2VyKHRyZWUpOworCQkJCQkJCXJldHVybiBuZXdUcmVlVmlld2VyOworCQkJCQkJfQorCQkJCQkJQE92ZXJyaWRlCisJCQkJCQlwdWJsaWMgdm9pZCByZXF1ZXN0QWN0aXZhdGlvbigpIHsKKwkJCQkJCQlzdXBlci5yZXF1ZXN0QWN0aXZhdGlvbigpOworCQkJCQkJCXNldEN1cnJlbnRWaWV3ZXJQYW5lKHRoaXMpOworCQkJCQkJfQorCQkJCQl9OworCQkJCXZpZXdlclBhbmUuY3JlYXRlQ29udHJvbChnZXRDb250YWluZXIoKSk7CisKKwkJCQlwYXJlbnRWaWV3ZXIgPSAoVHJlZVZpZXdlcil2aWV3ZXJQYW5lLmdldFZpZXdlcigpOworCQkJCXBhcmVudFZpZXdlci5zZXRBdXRvRXhwYW5kTGV2ZWwoMzApOworCQkJCXBhcmVudFZpZXdlci5zZXRDb250ZW50UHJvdmlkZXIobmV3IFJldmVyc2VBZGFwdGVyRmFjdG9yeUNvbnRlbnRQcm92aWRlcihhZGFwdGVyRmFjdG9yeSkpOworCQkJCXBhcmVudFZpZXdlci5zZXRMYWJlbFByb3ZpZGVyKG5ldyBBZGFwdGVyRmFjdG9yeUxhYmVsUHJvdmlkZXIoYWRhcHRlckZhY3RvcnkpKTsKKworCQkJCWNyZWF0ZUNvbnRleHRNZW51Rm9yKHBhcmVudFZpZXdlcik7CisJCQkJaW50IHBhZ2VJbmRleCA9IGFkZFBhZ2Uodmlld2VyUGFuZS5nZXRDb250cm9sKCkpOworCQkJCXNldFBhZ2VUZXh0KHBhZ2VJbmRleCwgZ2V0U3RyaW5nKCJfVUlfUGFyZW50UGFnZV9sYWJlbCIpKTsKKwkJCX0KKworCQkJLy8gVGhpcyBpcyB0aGUgcGFnZSBmb3IgdGhlIGxpc3Qgdmlld2VyCisJCQkvLworCQkJeworCQkJCVZpZXdlclBhbmUgdmlld2VyUGFuZSA9CisJCQkJCW5ldyBWaWV3ZXJQYW5lKGdldFNpdGUoKS5nZXRQYWdlKCksIEludGVydmVudGlvbnNFZGl0b3IudGhpcykgeworCQkJCQkJQE92ZXJyaWRlCisJCQkJCQlwdWJsaWMgVmlld2VyIGNyZWF0ZVZpZXdlcihDb21wb3NpdGUgY29tcG9zaXRlKSB7CisJCQkJCQkJcmV0dXJuIG5ldyBMaXN0Vmlld2VyKGNvbXBvc2l0ZSk7CisJCQkJCQl9CisJCQkJCQlAT3ZlcnJpZGUKKwkJCQkJCXB1YmxpYyB2b2lkIHJlcXVlc3RBY3RpdmF0aW9uKCkgeworCQkJCQkJCXN1cGVyLnJlcXVlc3RBY3RpdmF0aW9uKCk7CisJCQkJCQkJc2V0Q3VycmVudFZpZXdlclBhbmUodGhpcyk7CisJCQkJCQl9CisJCQkJCX07CisJCQkJdmlld2VyUGFuZS5jcmVhdGVDb250cm9sKGdldENvbnRhaW5lcigpKTsKKwkJCQlsaXN0Vmlld2VyID0gKExpc3RWaWV3ZXIpdmlld2VyUGFuZS5nZXRWaWV3ZXIoKTsKKwkJCQlsaXN0Vmlld2VyLnNldENvbnRlbnRQcm92aWRlcihuZXcgQWRhcHRlckZhY3RvcnlDb250ZW50UHJvdmlkZXIoYWRhcHRlckZhY3RvcnkpKTsKKwkJCQlsaXN0Vmlld2VyLnNldExhYmVsUHJvdmlkZXIobmV3IEFkYXB0ZXJGYWN0b3J5TGFiZWxQcm92aWRlcihhZGFwdGVyRmFjdG9yeSkpOworCisJCQkJY3JlYXRlQ29udGV4dE1lbnVGb3IobGlzdFZpZXdlcik7CisJCQkJaW50IHBhZ2VJbmRleCA9IGFkZFBhZ2Uodmlld2VyUGFuZS5nZXRDb250cm9sKCkpOworCQkJCXNldFBhZ2VUZXh0KHBhZ2VJbmRleCwgZ2V0U3RyaW5nKCJfVUlfTGlzdFBhZ2VfbGFiZWwiKSk7CisJCQl9CisKKwkJCS8vIFRoaXMgaXMgdGhlIHBhZ2UgZm9yIHRoZSB0cmVlIHZpZXdlcgorCQkJLy8KKwkJCXsKKwkJCQlWaWV3ZXJQYW5lIHZpZXdlclBhbmUgPQorCQkJCQluZXcgVmlld2VyUGFuZShnZXRTaXRlKCkuZ2V0UGFnZSgpLCBJbnRlcnZlbnRpb25zRWRpdG9yLnRoaXMpIHsKKwkJCQkJCUBPdmVycmlkZQorCQkJCQkJcHVibGljIFZpZXdlciBjcmVhdGVWaWV3ZXIoQ29tcG9zaXRlIGNvbXBvc2l0ZSkgeworCQkJCQkJCXJldHVybiBuZXcgVHJlZVZpZXdlcihjb21wb3NpdGUpOworCQkJCQkJfQorCQkJCQkJQE92ZXJyaWRlCisJCQkJCQlwdWJsaWMgdm9pZCByZXF1ZXN0QWN0aXZhdGlvbigpIHsKKwkJCQkJCQlzdXBlci5yZXF1ZXN0QWN0aXZhdGlvbigpOworCQkJCQkJCXNldEN1cnJlbnRWaWV3ZXJQYW5lKHRoaXMpOworCQkJCQkJfQorCQkJCQl9OworCQkJCXZpZXdlclBhbmUuY3JlYXRlQ29udHJvbChnZXRDb250YWluZXIoKSk7CisJCQkJdHJlZVZpZXdlciA9IChUcmVlVmlld2VyKXZpZXdlclBhbmUuZ2V0Vmlld2VyKCk7CisJCQkJdHJlZVZpZXdlci5zZXRDb250ZW50UHJvdmlkZXIobmV3IEFkYXB0ZXJGYWN0b3J5Q29udGVudFByb3ZpZGVyKGFkYXB0ZXJGYWN0b3J5KSk7CisJCQkJdHJlZVZpZXdlci5zZXRMYWJlbFByb3ZpZGVyKG5ldyBBZGFwdGVyRmFjdG9yeUxhYmVsUHJvdmlkZXIoYWRhcHRlckZhY3RvcnkpKTsKKworCQkJCW5ldyBBZGFwdGVyRmFjdG9yeVRyZWVFZGl0b3IodHJlZVZpZXdlci5nZXRUcmVlKCksIGFkYXB0ZXJGYWN0b3J5KTsKKworCQkJCWNyZWF0ZUNvbnRleHRNZW51Rm9yKHRyZWVWaWV3ZXIpOworCQkJCWludCBwYWdlSW5kZXggPSBhZGRQYWdlKHZpZXdlclBhbmUuZ2V0Q29udHJvbCgpKTsKKwkJCQlzZXRQYWdlVGV4dChwYWdlSW5kZXgsIGdldFN0cmluZygiX1VJX1RyZWVQYWdlX2xhYmVsIikpOworCQkJfQorCisJCQkvLyBUaGlzIGlzIHRoZSBwYWdlIGZvciB0aGUgdGFibGUgdmlld2VyLgorCQkJLy8KKwkJCXsKKwkJCQlWaWV3ZXJQYW5lIHZpZXdlclBhbmUgPQorCQkJCQluZXcgVmlld2VyUGFuZShnZXRTaXRlKCkuZ2V0UGFnZSgpLCBJbnRlcnZlbnRpb25zRWRpdG9yLnRoaXMpIHsKKwkJCQkJCUBPdmVycmlkZQorCQkJCQkJcHVibGljIFZpZXdlciBjcmVhdGVWaWV3ZXIoQ29tcG9zaXRlIGNvbXBvc2l0ZSkgeworCQkJCQkJCXJldHVybiBuZXcgVGFibGVWaWV3ZXIoY29tcG9zaXRlKTsKKwkJCQkJCX0KKwkJCQkJCUBPdmVycmlkZQorCQkJCQkJcHVibGljIHZvaWQgcmVxdWVzdEFjdGl2YXRpb24oKSB7CisJCQkJCQkJc3VwZXIucmVxdWVzdEFjdGl2YXRpb24oKTsKKwkJCQkJCQlzZXRDdXJyZW50Vmlld2VyUGFuZSh0aGlzKTsKKwkJCQkJCX0KKwkJCQkJfTsKKwkJCQl2aWV3ZXJQYW5lLmNyZWF0ZUNvbnRyb2woZ2V0Q29udGFpbmVyKCkpOworCQkJCXRhYmxlVmlld2VyID0gKFRhYmxlVmlld2VyKXZpZXdlclBhbmUuZ2V0Vmlld2VyKCk7CisKKwkJCQlUYWJsZSB0YWJsZSA9IHRhYmxlVmlld2VyLmdldFRhYmxlKCk7CisJCQkJVGFibGVMYXlvdXQgbGF5b3V0ID0gbmV3IFRhYmxlTGF5b3V0KCk7CisJCQkJdGFibGUuc2V0TGF5b3V0KGxheW91dCk7CisJCQkJdGFibGUuc2V0SGVhZGVyVmlzaWJsZSh0cnVlKTsKKwkJCQl0YWJsZS5zZXRMaW5lc1Zpc2libGUodHJ1ZSk7CisKKwkJCQlUYWJsZUNvbHVtbiBvYmplY3RDb2x1bW4gPSBuZXcgVGFibGVDb2x1bW4odGFibGUsIFNXVC5OT05FKTsKKwkJCQlsYXlvdXQuYWRkQ29sdW1uRGF0YShuZXcgQ29sdW1uV2VpZ2h0RGF0YSgzLCAxMDAsIHRydWUpKTsKKwkJCQlvYmplY3RDb2x1bW4uc2V0VGV4dChnZXRTdHJpbmcoIl9VSV9PYmplY3RDb2x1bW5fbGFiZWwiKSk7CisJCQkJb2JqZWN0Q29sdW1uLnNldFJlc2l6YWJsZSh0cnVlKTsKKworCQkJCVRhYmxlQ29sdW1uIHNlbGZDb2x1bW4gPSBuZXcgVGFibGVDb2x1bW4odGFibGUsIFNXVC5OT05FKTsKKwkJCQlsYXlvdXQuYWRkQ29sdW1uRGF0YShuZXcgQ29sdW1uV2VpZ2h0RGF0YSgyLCAxMDAsIHRydWUpKTsKKwkJCQlzZWxmQ29sdW1uLnNldFRleHQoZ2V0U3RyaW5nKCJfVUlfU2VsZkNvbHVtbl9sYWJlbCIpKTsKKwkJCQlzZWxmQ29sdW1uLnNldFJlc2l6YWJsZSh0cnVlKTsKKworCQkJCXRhYmxlVmlld2VyLnNldENvbHVtblByb3BlcnRpZXMobmV3IFN0cmluZyBbXSB7ImEiLCAiYiJ9KTsKKwkJCQl0YWJsZVZpZXdlci5zZXRDb250ZW50UHJvdmlkZXIobmV3IEFkYXB0ZXJGYWN0b3J5Q29udGVudFByb3ZpZGVyKGFkYXB0ZXJGYWN0b3J5KSk7CisJCQkJdGFibGVWaWV3ZXIuc2V0TGFiZWxQcm92aWRlcihuZXcgQWRhcHRlckZhY3RvcnlMYWJlbFByb3ZpZGVyKGFkYXB0ZXJGYWN0b3J5KSk7CisKKwkJCQljcmVhdGVDb250ZXh0TWVudUZvcih0YWJsZVZpZXdlcik7CisJCQkJaW50IHBhZ2VJbmRleCA9IGFkZFBhZ2Uodmlld2VyUGFuZS5nZXRDb250cm9sKCkpOworCQkJCXNldFBhZ2VUZXh0KHBhZ2VJbmRleCwgZ2V0U3RyaW5nKCJfVUlfVGFibGVQYWdlX2xhYmVsIikpOworCQkJfQorCisJCQkvLyBUaGlzIGlzIHRoZSBwYWdlIGZvciB0aGUgdGFibGUgdHJlZSB2aWV3ZXIuCisJCQkvLworCQkJeworCQkJCVZpZXdlclBhbmUgdmlld2VyUGFuZSA9CisJCQkJCW5ldyBWaWV3ZXJQYW5lKGdldFNpdGUoKS5nZXRQYWdlKCksIEludGVydmVudGlvbnNFZGl0b3IudGhpcykgeworCQkJCQkJQE92ZXJyaWRlCisJCQkJCQlwdWJsaWMgVmlld2VyIGNyZWF0ZVZpZXdlcihDb21wb3NpdGUgY29tcG9zaXRlKSB7CisJCQkJCQkJcmV0dXJuIG5ldyBUcmVlVmlld2VyKGNvbXBvc2l0ZSk7CisJCQkJCQl9CisJCQkJCQlAT3ZlcnJpZGUKKwkJCQkJCXB1YmxpYyB2b2lkIHJlcXVlc3RBY3RpdmF0aW9uKCkgeworCQkJCQkJCXN1cGVyLnJlcXVlc3RBY3RpdmF0aW9uKCk7CisJCQkJCQkJc2V0Q3VycmVudFZpZXdlclBhbmUodGhpcyk7CisJCQkJCQl9CisJCQkJCX07CisJCQkJdmlld2VyUGFuZS5jcmVhdGVDb250cm9sKGdldENvbnRhaW5lcigpKTsKKworCQkJCXRyZWVWaWV3ZXJXaXRoQ29sdW1ucyA9IChUcmVlVmlld2VyKXZpZXdlclBhbmUuZ2V0Vmlld2VyKCk7CisKKwkJCQlUcmVlIHRyZWUgPSB0cmVlVmlld2VyV2l0aENvbHVtbnMuZ2V0VHJlZSgpOworCQkJCXRyZWUuc2V0TGF5b3V0RGF0YShuZXcgRmlsbExheW91dCgpKTsKKwkJCQl0cmVlLnNldEhlYWRlclZpc2libGUodHJ1ZSk7CisJCQkJdHJlZS5zZXRMaW5lc1Zpc2libGUodHJ1ZSk7CisKKwkJCQlUcmVlQ29sdW1uIG9iamVjdENvbHVtbiA9IG5ldyBUcmVlQ29sdW1uKHRyZWUsIFNXVC5OT05FKTsKKwkJCQlvYmplY3RDb2x1bW4uc2V0VGV4dChnZXRTdHJpbmcoIl9VSV9PYmplY3RDb2x1bW5fbGFiZWwiKSk7CisJCQkJb2JqZWN0Q29sdW1uLnNldFJlc2l6YWJsZSh0cnVlKTsKKwkJCQlvYmplY3RDb2x1bW4uc2V0V2lkdGgoMjUwKTsKKworCQkJCVRyZWVDb2x1bW4gc2VsZkNvbHVtbiA9IG5ldyBUcmVlQ29sdW1uKHRyZWUsIFNXVC5OT05FKTsKKwkJCQlzZWxmQ29sdW1uLnNldFRleHQoZ2V0U3RyaW5nKCJfVUlfU2VsZkNvbHVtbl9sYWJlbCIpKTsKKwkJCQlzZWxmQ29sdW1uLnNldFJlc2l6YWJsZSh0cnVlKTsKKwkJCQlzZWxmQ29sdW1uLnNldFdpZHRoKDIwMCk7CisKKwkJCQl0cmVlVmlld2VyV2l0aENvbHVtbnMuc2V0Q29sdW1uUHJvcGVydGllcyhuZXcgU3RyaW5nIFtdIHsiYSIsICJiIn0pOworCQkJCXRyZWVWaWV3ZXJXaXRoQ29sdW1ucy5zZXRDb250ZW50UHJvdmlkZXIobmV3IEFkYXB0ZXJGYWN0b3J5Q29udGVudFByb3ZpZGVyKGFkYXB0ZXJGYWN0b3J5KSk7CisJCQkJdHJlZVZpZXdlcldpdGhDb2x1bW5zLnNldExhYmVsUHJvdmlkZXIobmV3IEFkYXB0ZXJGYWN0b3J5TGFiZWxQcm92aWRlcihhZGFwdGVyRmFjdG9yeSkpOworCisJCQkJY3JlYXRlQ29udGV4dE1lbnVGb3IodHJlZVZpZXdlcldpdGhDb2x1bW5zKTsKKwkJCQlpbnQgcGFnZUluZGV4ID0gYWRkUGFnZSh2aWV3ZXJQYW5lLmdldENvbnRyb2woKSk7CisJCQkJc2V0UGFnZVRleHQocGFnZUluZGV4LCBnZXRTdHJpbmcoIl9VSV9UcmVlV2l0aENvbHVtbnNQYWdlX2xhYmVsIikpOworCQkJfQorCisJCQlnZXRTaXRlKCkuZ2V0U2hlbGwoKS5nZXREaXNwbGF5KCkuYXN5bmNFeGVjCisJCQkJKG5ldyBSdW5uYWJsZSgpIHsKKwkJCQkJIHB1YmxpYyB2b2lkIHJ1bigpIHsKKwkJCQkJCSBzZXRBY3RpdmVQYWdlKDApOworCQkJCQkgfQorCQkJCSB9KTsKKwkJfQorCisJCS8vIEVuc3VyZXMgdGhhdCB0aGlzIGVkaXRvciB3aWxsIG9ubHkgZGlzcGxheSB0aGUgcGFnZSdzIHRhYgorCQkvLyBhcmVhIGlmIHRoZXJlIGFyZSBtb3JlIHRoYW4gb25lIHBhZ2UKKwkJLy8KKwkJZ2V0Q29udGFpbmVyKCkuYWRkQ29udHJvbExpc3RlbmVyCisJCQkobmV3IENvbnRyb2xBZGFwdGVyKCkgeworCQkJCWJvb2xlYW4gZ3VhcmQgPSBmYWxzZTsKKwkJCQlAT3ZlcnJpZGUKKwkJCQlwdWJsaWMgdm9pZCBjb250cm9sUmVzaXplZChDb250cm9sRXZlbnQgZXZlbnQpIHsKKwkJCQkJaWYgKCFndWFyZCkgeworCQkJCQkJZ3VhcmQgPSB0cnVlOworCQkJCQkJaGlkZVRhYnMoKTsKKwkJCQkJCWd1YXJkID0gZmFsc2U7CisJCQkJCX0KKwkJCQl9CisJCQkgfSk7CisKKwkJZ2V0U2l0ZSgpLmdldFNoZWxsKCkuZ2V0RGlzcGxheSgpLmFzeW5jRXhlYworCQkJKG5ldyBSdW5uYWJsZSgpIHsKKwkJCQkgcHVibGljIHZvaWQgcnVuKCkgeworCQkJCQkgdXBkYXRlUHJvYmxlbUluZGljYXRpb24oKTsKKwkJCQkgfQorCQkJIH0pOworCX0KKworCS8qKgorCSAqIElmIHRoZXJlIGlzIGp1c3Qgb25lIHBhZ2UgaW4gdGhlIG11bHRpLXBhZ2UgZWRpdG9yIHBhcnQsCisJICogdGhpcyBoaWRlcyB0aGUgc2luZ2xlIHRhYiBhdCB0aGUgYm90dG9tLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIGhpZGVUYWJzKCkgeworCQlpZiAoZ2V0UGFnZUNvdW50KCkgPD0gMSkgeworCQkJc2V0UGFnZVRleHQoMCwgIiIpOworCQkJaWYgKGdldENvbnRhaW5lcigpIGluc3RhbmNlb2YgQ1RhYkZvbGRlcikgeworCQkJCSgoQ1RhYkZvbGRlcilnZXRDb250YWluZXIoKSkuc2V0VGFiSGVpZ2h0KDEpOworCQkJCVBvaW50IHBvaW50ID0gZ2V0Q29udGFpbmVyKCkuZ2V0U2l6ZSgpOworCQkJCWdldENvbnRhaW5lcigpLnNldFNpemUocG9pbnQueCwgcG9pbnQueSArIDYpOworCQkJfQorCQl9CisJfQorCisJLyoqCisJICogSWYgdGhlcmUgaXMgbW9yZSB0aGFuIG9uZSBwYWdlIGluIHRoZSBtdWx0aS1wYWdlIGVkaXRvciBwYXJ0LAorCSAqIHRoaXMgc2hvd3MgdGhlIHRhYnMgYXQgdGhlIGJvdHRvbS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBzaG93VGFicygpIHsKKwkJaWYgKGdldFBhZ2VDb3VudCgpID4gMSkgeworCQkJc2V0UGFnZVRleHQoMCwgZ2V0U3RyaW5nKCJfVUlfU2VsZWN0aW9uUGFnZV9sYWJlbCIpKTsKKwkJCWlmIChnZXRDb250YWluZXIoKSBpbnN0YW5jZW9mIENUYWJGb2xkZXIpIHsKKwkJCQkoKENUYWJGb2xkZXIpZ2V0Q29udGFpbmVyKCkpLnNldFRhYkhlaWdodChTV1QuREVGQVVMVCk7CisJCQkJUG9pbnQgcG9pbnQgPSBnZXRDb250YWluZXIoKS5nZXRTaXplKCk7CisJCQkJZ2V0Q29udGFpbmVyKCkuc2V0U2l6ZShwb2ludC54LCBwb2ludC55IC0gNik7CisJCQl9CisJCX0KKwl9CisKKwkvKioKKwkgKiBUaGlzIGlzIHVzZWQgdG8gdHJhY2sgdGhlIGFjdGl2ZSB2aWV3ZXIuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgcGFnZUNoYW5nZShpbnQgcGFnZUluZGV4KSB7CisJCXN1cGVyLnBhZ2VDaGFuZ2UocGFnZUluZGV4KTsKKworCQlpZiAoY29udGVudE91dGxpbmVQYWdlICE9IG51bGwpIHsKKwkJCWhhbmRsZUNvbnRlbnRPdXRsaW5lU2VsZWN0aW9uKGNvbnRlbnRPdXRsaW5lUGFnZS5nZXRTZWxlY3Rpb24oKSk7CisJCX0KKwl9CisKKwkvKioKKwkgKiBUaGlzIGlzIGhvdyB0aGUgZnJhbWV3b3JrIGRldGVybWluZXMgd2hpY2ggaW50ZXJmYWNlcyB3ZSBpbXBsZW1lbnQuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQFN1cHByZXNzV2FybmluZ3MoInJhd3R5cGVzIikKKwlAT3ZlcnJpZGUKKwlwdWJsaWMgT2JqZWN0IGdldEFkYXB0ZXIoQ2xhc3Mga2V5KSB7CisJCWlmIChrZXkuZXF1YWxzKElDb250ZW50T3V0bGluZVBhZ2UuY2xhc3MpKSB7CisJCQlyZXR1cm4gc2hvd091dGxpbmVWaWV3KCkgPyBnZXRDb250ZW50T3V0bGluZVBhZ2UoKSA6IG51bGw7CisJCX0KKwkJZWxzZSBpZiAoa2V5LmVxdWFscyhJUHJvcGVydHlTaGVldFBhZ2UuY2xhc3MpKSB7CisJCQlyZXR1cm4gZ2V0UHJvcGVydHlTaGVldFBhZ2UoKTsKKwkJfQorCQllbHNlIGlmIChrZXkuZXF1YWxzKElHb3RvTWFya2VyLmNsYXNzKSkgeworCQkJcmV0dXJuIHRoaXM7CisJCX0KKwkJZWxzZSB7CisJCQlyZXR1cm4gc3VwZXIuZ2V0QWRhcHRlcihrZXkpOworCQl9CisJfQorCisJLyoqCisJICogVGhpcyBhY2Nlc3NlcyBhIGNhY2hlZCB2ZXJzaW9uIG9mIHRoZSBjb250ZW50IG91dGxpbmVyLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBJQ29udGVudE91dGxpbmVQYWdlIGdldENvbnRlbnRPdXRsaW5lUGFnZSgpIHsKKwkJaWYgKGNvbnRlbnRPdXRsaW5lUGFnZSA9PSBudWxsKSB7CisJCQkvLyBUaGUgY29udGVudCBvdXRsaW5lIGlzIGp1c3QgYSB0cmVlLgorCQkJLy8KKwkJCWNsYXNzIE15Q29udGVudE91dGxpbmVQYWdlIGV4dGVuZHMgQ29udGVudE91dGxpbmVQYWdlIHsKKwkJCQlAT3ZlcnJpZGUKKwkJCQlwdWJsaWMgdm9pZCBjcmVhdGVDb250cm9sKENvbXBvc2l0ZSBwYXJlbnQpIHsKKwkJCQkJc3VwZXIuY3JlYXRlQ29udHJvbChwYXJlbnQpOworCQkJCQljb250ZW50T3V0bGluZVZpZXdlciA9IGdldFRyZWVWaWV3ZXIoKTsKKwkJCQkJY29udGVudE91dGxpbmVWaWV3ZXIuYWRkU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyKHRoaXMpOworCisJCQkJCS8vIFNldCB1cCB0aGUgdHJlZSB2aWV3ZXIuCisJCQkJCS8vCisJCQkJCWNvbnRlbnRPdXRsaW5lVmlld2VyLnNldENvbnRlbnRQcm92aWRlcihuZXcgQWRhcHRlckZhY3RvcnlDb250ZW50UHJvdmlkZXIoYWRhcHRlckZhY3RvcnkpKTsKKwkJCQkJY29udGVudE91dGxpbmVWaWV3ZXIuc2V0TGFiZWxQcm92aWRlcihuZXcgQWRhcHRlckZhY3RvcnlMYWJlbFByb3ZpZGVyKGFkYXB0ZXJGYWN0b3J5KSk7CisJCQkJCWNvbnRlbnRPdXRsaW5lVmlld2VyLnNldElucHV0KGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKSk7CisKKwkJCQkJLy8gTWFrZSBzdXJlIG91ciBwb3B1cHMgd29yay4KKwkJCQkJLy8KKwkJCQkJY3JlYXRlQ29udGV4dE1lbnVGb3IoY29udGVudE91dGxpbmVWaWV3ZXIpOworCisJCQkJCWlmICghZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpLmdldFJlc291cmNlcygpLmlzRW1wdHkoKSkgeworCQkJCQkgIC8vIFNlbGVjdCB0aGUgcm9vdCBvYmplY3QgaW4gdGhlIHZpZXcuCisJCQkJCSAgLy8KKwkJCQkJICBjb250ZW50T3V0bGluZVZpZXdlci5zZXRTZWxlY3Rpb24obmV3IFN0cnVjdHVyZWRTZWxlY3Rpb24oZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpLmdldFJlc291cmNlcygpLmdldCgwKSksIHRydWUpOworCQkJCQl9CisJCQkJfQorCisJCQkJQE92ZXJyaWRlCisJCQkJcHVibGljIHZvaWQgbWFrZUNvbnRyaWJ1dGlvbnMoSU1lbnVNYW5hZ2VyIG1lbnVNYW5hZ2VyLCBJVG9vbEJhck1hbmFnZXIgdG9vbEJhck1hbmFnZXIsIElTdGF0dXNMaW5lTWFuYWdlciBzdGF0dXNMaW5lTWFuYWdlcikgeworCQkJCQlzdXBlci5tYWtlQ29udHJpYnV0aW9ucyhtZW51TWFuYWdlciwgdG9vbEJhck1hbmFnZXIsIHN0YXR1c0xpbmVNYW5hZ2VyKTsKKwkJCQkJY29udGVudE91dGxpbmVTdGF0dXNMaW5lTWFuYWdlciA9IHN0YXR1c0xpbmVNYW5hZ2VyOworCQkJCX0KKworCQkJCUBPdmVycmlkZQorCQkJCXB1YmxpYyB2b2lkIHNldEFjdGlvbkJhcnMoSUFjdGlvbkJhcnMgYWN0aW9uQmFycykgeworCQkJCQlzdXBlci5zZXRBY3Rpb25CYXJzKGFjdGlvbkJhcnMpOworCQkJCQlnZXRBY3Rpb25CYXJDb250cmlidXRvcigpLnNoYXJlR2xvYmFsQWN0aW9ucyh0aGlzLCBhY3Rpb25CYXJzKTsKKwkJCQl9CisJCQl9CisKKwkJCWNvbnRlbnRPdXRsaW5lUGFnZSA9IG5ldyBNeUNvbnRlbnRPdXRsaW5lUGFnZSgpOworCisJCQkvLyBMaXN0ZW4gdG8gc2VsZWN0aW9uIHNvIHRoYXQgd2UgY2FuIGhhbmRsZSBpdCBpcyBhIHNwZWNpYWwgd2F5LgorCQkJLy8KKwkJCWNvbnRlbnRPdXRsaW5lUGFnZS5hZGRTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIKKwkJCQkobmV3IElTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIoKSB7CisJCQkJCSAvLyBUaGlzIGVuc3VyZXMgdGhhdCB3ZSBoYW5kbGUgc2VsZWN0aW9ucyBjb3JyZWN0bHkuCisJCQkJCSAvLworCQkJCQkgcHVibGljIHZvaWQgc2VsZWN0aW9uQ2hhbmdlZChTZWxlY3Rpb25DaGFuZ2VkRXZlbnQgZXZlbnQpIHsKKwkJCQkJCSBoYW5kbGVDb250ZW50T3V0bGluZVNlbGVjdGlvbihldmVudC5nZXRTZWxlY3Rpb24oKSk7CisJCQkJCSB9CisJCQkJIH0pOworCQl9CisKKwkJcmV0dXJuIGNvbnRlbnRPdXRsaW5lUGFnZTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFjY2Vzc2VzIGEgY2FjaGVkIHZlcnNpb24gb2YgdGhlIHByb3BlcnR5IHNoZWV0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBJUHJvcGVydHlTaGVldFBhZ2UgZ2V0UHJvcGVydHlTaGVldFBhZ2UoKSB7CisJCWlmIChwcm9wZXJ0eVNoZWV0UGFnZSA9PSBudWxsKSB7CisJCQlwcm9wZXJ0eVNoZWV0UGFnZSA9CisJCQkJbmV3IEV4dGVuZGVkUHJvcGVydHlTaGVldFBhZ2UoZWRpdGluZ0RvbWFpbikgeworCQkJCQlAT3ZlcnJpZGUKKwkJCQkJcHVibGljIHZvaWQgc2V0U2VsZWN0aW9uVG9WaWV3ZXIoTGlzdDw/PiBzZWxlY3Rpb24pIHsKKwkJCQkJCUludGVydmVudGlvbnNFZGl0b3IudGhpcy5zZXRTZWxlY3Rpb25Ub1ZpZXdlcihzZWxlY3Rpb24pOworCQkJCQkJSW50ZXJ2ZW50aW9uc0VkaXRvci50aGlzLnNldEZvY3VzKCk7CisJCQkJCX0KKworCQkJCQlAT3ZlcnJpZGUKKwkJCQkJcHVibGljIHZvaWQgc2V0QWN0aW9uQmFycyhJQWN0aW9uQmFycyBhY3Rpb25CYXJzKSB7CisJCQkJCQlzdXBlci5zZXRBY3Rpb25CYXJzKGFjdGlvbkJhcnMpOworCQkJCQkJZ2V0QWN0aW9uQmFyQ29udHJpYnV0b3IoKS5zaGFyZUdsb2JhbEFjdGlvbnModGhpcywgYWN0aW9uQmFycyk7CisJCQkJCX0KKwkJCQl9OworCQkJcHJvcGVydHlTaGVldFBhZ2Uuc2V0UHJvcGVydHlTb3VyY2VQcm92aWRlcihuZXcgQWRhcHRlckZhY3RvcnlDb250ZW50UHJvdmlkZXIoYWRhcHRlckZhY3RvcnkpKTsKKwkJfQorCisJCXJldHVybiBwcm9wZXJ0eVNoZWV0UGFnZTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGRlYWxzIHdpdGggaG93IHdlIHdhbnQgc2VsZWN0aW9uIGluIHRoZSBvdXRsaW5lciB0byBhZmZlY3QgdGhlIG90aGVyIHZpZXdzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIGhhbmRsZUNvbnRlbnRPdXRsaW5lU2VsZWN0aW9uKElTZWxlY3Rpb24gc2VsZWN0aW9uKSB7CisJCWlmIChjdXJyZW50Vmlld2VyUGFuZSAhPSBudWxsICYmICFzZWxlY3Rpb24uaXNFbXB0eSgpICYmIHNlbGVjdGlvbiBpbnN0YW5jZW9mIElTdHJ1Y3R1cmVkU2VsZWN0aW9uKSB7CisJCQlJdGVyYXRvcjw/PiBzZWxlY3RlZEVsZW1lbnRzID0gKChJU3RydWN0dXJlZFNlbGVjdGlvbilzZWxlY3Rpb24pLml0ZXJhdG9yKCk7CisJCQlpZiAoc2VsZWN0ZWRFbGVtZW50cy5oYXNOZXh0KCkpIHsKKwkJCQkvLyBHZXQgdGhlIGZpcnN0IHNlbGVjdGVkIGVsZW1lbnQuCisJCQkJLy8KKwkJCQlPYmplY3Qgc2VsZWN0ZWRFbGVtZW50ID0gc2VsZWN0ZWRFbGVtZW50cy5uZXh0KCk7CisKKwkJCQkvLyBJZiBpdCdzIHRoZSBzZWxlY3Rpb24gdmlld2VyLCB0aGVuIHdlIHdhbnQgaXQgdG8gc2VsZWN0IHRoZSBzYW1lIHNlbGVjdGlvbiBhcyB0aGlzIHNlbGVjdGlvbi4KKwkJCQkvLworCQkJCWlmIChjdXJyZW50Vmlld2VyUGFuZS5nZXRWaWV3ZXIoKSA9PSBzZWxlY3Rpb25WaWV3ZXIpIHsKKwkJCQkJQXJyYXlMaXN0PE9iamVjdD4gc2VsZWN0aW9uTGlzdCA9IG5ldyBBcnJheUxpc3Q8T2JqZWN0PigpOworCQkJCQlzZWxlY3Rpb25MaXN0LmFkZChzZWxlY3RlZEVsZW1lbnQpOworCQkJCQl3aGlsZSAoc2VsZWN0ZWRFbGVtZW50cy5oYXNOZXh0KCkpIHsKKwkJCQkJCXNlbGVjdGlvbkxpc3QuYWRkKHNlbGVjdGVkRWxlbWVudHMubmV4dCgpKTsKKwkJCQkJfQorCisJCQkJCS8vIFNldCB0aGUgc2VsZWN0aW9uIHRvIHRoZSB3aWRnZXQuCisJCQkJCS8vCisJCQkJCXNlbGVjdGlvblZpZXdlci5zZXRTZWxlY3Rpb24obmV3IFN0cnVjdHVyZWRTZWxlY3Rpb24oc2VsZWN0aW9uTGlzdCkpOworCQkJCX0KKwkJCQllbHNlIHsKKwkJCQkJLy8gU2V0IHRoZSBpbnB1dCB0byB0aGUgd2lkZ2V0LgorCQkJCQkvLworCQkJCQlpZiAoY3VycmVudFZpZXdlclBhbmUuZ2V0Vmlld2VyKCkuZ2V0SW5wdXQoKSAhPSBzZWxlY3RlZEVsZW1lbnQpIHsKKwkJCQkJCWN1cnJlbnRWaWV3ZXJQYW5lLmdldFZpZXdlcigpLnNldElucHV0KHNlbGVjdGVkRWxlbWVudCk7CisJCQkJCQljdXJyZW50Vmlld2VyUGFuZS5zZXRUaXRsZShzZWxlY3RlZEVsZW1lbnQpOworCQkJCQl9CisJCQkJfQorCQkJfQorCQl9CisJfQorCisJLyoqCisJICogVGhpcyBpcyBmb3IgaW1wbGVtZW50aW5nIHtAbGluayBJRWRpdG9yUGFydH0gYW5kIHNpbXBseSB0ZXN0cyB0aGUgY29tbWFuZCBzdGFjay4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgYm9vbGVhbiBpc0RpcnR5KCkgeworCQlyZXR1cm4gKChCYXNpY0NvbW1hbmRTdGFjayllZGl0aW5nRG9tYWluLmdldENvbW1hbmRTdGFjaygpKS5pc1NhdmVOZWVkZWQoKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGlzIGZvciBpbXBsZW1lbnRpbmcge0BsaW5rIElFZGl0b3JQYXJ0fSBhbmQgc2ltcGx5IHNhdmVzIHRoZSBtb2RlbCBmaWxlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGRvU2F2ZShJUHJvZ3Jlc3NNb25pdG9yIHByb2dyZXNzTW9uaXRvcikgeworCQkvLyBTYXZlIG9ubHkgcmVzb3VyY2VzIHRoYXQgaGF2ZSBhY3R1YWxseSBjaGFuZ2VkLgorCQkvLworCQlmaW5hbCBNYXA8T2JqZWN0LCBPYmplY3Q+IHNhdmVPcHRpb25zID0gbmV3IEhhc2hNYXA8T2JqZWN0LCBPYmplY3Q+KCk7CisJCXNhdmVPcHRpb25zLnB1dChSZXNvdXJjZS5PUFRJT05fU0FWRV9PTkxZX0lGX0NIQU5HRUQsIFJlc291cmNlLk9QVElPTl9TQVZFX09OTFlfSUZfQ0hBTkdFRF9NRU1PUllfQlVGRkVSKTsKKworCQkvLyBEbyB0aGUgd29yayB3aXRoaW4gYW4gb3BlcmF0aW9uIGJlY2F1c2UgdGhpcyBpcyBhIGxvbmcgcnVubmluZyBhY3Rpdml0eSB0aGF0IG1vZGlmaWVzIHRoZSB3b3JrYmVuY2guCisJCS8vCisJCVdvcmtzcGFjZU1vZGlmeU9wZXJhdGlvbiBvcGVyYXRpb24gPQorCQkJbmV3IFdvcmtzcGFjZU1vZGlmeU9wZXJhdGlvbigpIHsKKwkJCQkvLyBUaGlzIGlzIHRoZSBtZXRob2QgdGhhdCBnZXRzIGludm9rZWQgd2hlbiB0aGUgb3BlcmF0aW9uIHJ1bnMuCisJCQkJLy8KKwkJCQlAT3ZlcnJpZGUKKwkJCQlwdWJsaWMgdm9pZCBleGVjdXRlKElQcm9ncmVzc01vbml0b3IgbW9uaXRvcikgeworCQkJCQkvLyBTYXZlIHRoZSByZXNvdXJjZXMgdG8gdGhlIGZpbGUgc3lzdGVtLgorCQkJCQkvLworCQkJCQlib29sZWFuIGZpcnN0ID0gdHJ1ZTsKKwkJCQkJZm9yIChSZXNvdXJjZSByZXNvdXJjZSA6IGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKS5nZXRSZXNvdXJjZXMoKSkgeworCQkJCQkJaWYgKChmaXJzdCB8fCAhcmVzb3VyY2UuZ2V0Q29udGVudHMoKS5pc0VtcHR5KCkgfHwgaXNQZXJzaXN0ZWQocmVzb3VyY2UpKSAmJiAhZWRpdGluZ0RvbWFpbi5pc1JlYWRPbmx5KHJlc291cmNlKSkgeworCQkJCQkJCXRyeSB7CisJCQkJCQkJCWxvbmcgdGltZVN0YW1wID0gcmVzb3VyY2UuZ2V0VGltZVN0YW1wKCk7CisJCQkJCQkJCXJlc291cmNlLnNhdmUoc2F2ZU9wdGlvbnMpOworCQkJCQkJCQlpZiAocmVzb3VyY2UuZ2V0VGltZVN0YW1wKCkgIT0gdGltZVN0YW1wKSB7CisJCQkJCQkJCQlzYXZlZFJlc291cmNlcy5hZGQocmVzb3VyY2UpOworCQkJCQkJCQl9CisJCQkJCQkJfQorCQkJCQkJCWNhdGNoIChFeGNlcHRpb24gZXhjZXB0aW9uKSB7CisJCQkJCQkJCXJlc291cmNlVG9EaWFnbm9zdGljTWFwLnB1dChyZXNvdXJjZSwgYW5hbHl6ZVJlc291cmNlUHJvYmxlbXMocmVzb3VyY2UsIGV4Y2VwdGlvbikpOworCQkJCQkJCX0KKwkJCQkJCQlmaXJzdCA9IGZhbHNlOworCQkJCQkJfQorCQkJCQl9CisJCQkJfQorCQkJfTsKKworCQl1cGRhdGVQcm9ibGVtSW5kaWNhdGlvbiA9IGZhbHNlOworCQl0cnkgeworCQkJLy8gVGhpcyBydW5zIHRoZSBvcHRpb25zLCBhbmQgc2hvd3MgcHJvZ3Jlc3MuCisJCQkvLworCQkJbmV3IFByb2dyZXNzTW9uaXRvckRpYWxvZyhnZXRTaXRlKCkuZ2V0U2hlbGwoKSkucnVuKHRydWUsIGZhbHNlLCBvcGVyYXRpb24pOworCisJCQkvLyBSZWZyZXNoIHRoZSBuZWNlc3Nhcnkgc3RhdGUuCisJCQkvLworCQkJKChCYXNpY0NvbW1hbmRTdGFjayllZGl0aW5nRG9tYWluLmdldENvbW1hbmRTdGFjaygpKS5zYXZlSXNEb25lKCk7CisJCQlmaXJlUHJvcGVydHlDaGFuZ2UoSUVkaXRvclBhcnQuUFJPUF9ESVJUWSk7CisJCX0KKwkJY2F0Y2ggKEV4Y2VwdGlvbiBleGNlcHRpb24pIHsKKwkJCS8vIFNvbWV0aGluZyB3ZW50IHdyb25nIHRoYXQgc2hvdWxkbid0LgorCQkJLy8KKwkJCUludGVydmVudGlvbnNFZGl0b3JQbHVnaW4uSU5TVEFOQ0UubG9nKGV4Y2VwdGlvbik7CisJCX0KKwkJdXBkYXRlUHJvYmxlbUluZGljYXRpb24gPSB0cnVlOworCQl1cGRhdGVQcm9ibGVtSW5kaWNhdGlvbigpOworCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyB3aGV0aGVyIHNvbWV0aGluZyBoYXMgYmVlbiBwZXJzaXN0ZWQgdG8gdGhlIFVSSSBvZiB0aGUgc3BlY2lmaWVkIHJlc291cmNlLgorCSAqIFRoZSBpbXBsZW1lbnRhdGlvbiB1c2VzIHRoZSBVUkkgY29udmVydGVyIGZyb20gdGhlIGVkaXRvcidzIHJlc291cmNlIHNldCB0byB0cnkgdG8gb3BlbiBhbiBpbnB1dCBzdHJlYW0uIAorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBib29sZWFuIGlzUGVyc2lzdGVkKFJlc291cmNlIHJlc291cmNlKSB7CisJCWJvb2xlYW4gcmVzdWx0ID0gZmFsc2U7CisJCXRyeSB7CisJCQlJbnB1dFN0cmVhbSBzdHJlYW0gPSBlZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkuZ2V0VVJJQ29udmVydGVyKCkuY3JlYXRlSW5wdXRTdHJlYW0ocmVzb3VyY2UuZ2V0VVJJKCkpOworCQkJaWYgKHN0cmVhbSAhPSBudWxsKSB7CisJCQkJcmVzdWx0ID0gdHJ1ZTsKKwkJCQlzdHJlYW0uY2xvc2UoKTsKKwkJCX0KKwkJfQorCQljYXRjaCAoSU9FeGNlcHRpb24gZSkgeworCQkJLy8gSWdub3JlCisJCX0KKwkJcmV0dXJuIHJlc3VsdDsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFsd2F5cyByZXR1cm5zIHRydWUgYmVjYXVzZSBpdCBpcyBub3QgY3VycmVudGx5IHN1cHBvcnRlZC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgYm9vbGVhbiBpc1NhdmVBc0FsbG93ZWQoKSB7CisJCXJldHVybiB0cnVlOworCX0KKworCS8qKgorCSAqIFRoaXMgYWxzbyBjaGFuZ2VzIHRoZSBlZGl0b3IncyBpbnB1dC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBkb1NhdmVBcygpIHsKKwkJU2F2ZUFzRGlhbG9nIHNhdmVBc0RpYWxvZyA9IG5ldyBTYXZlQXNEaWFsb2coZ2V0U2l0ZSgpLmdldFNoZWxsKCkpOworCQlzYXZlQXNEaWFsb2cub3BlbigpOworCQlJUGF0aCBwYXRoID0gc2F2ZUFzRGlhbG9nLmdldFJlc3VsdCgpOworCQlpZiAocGF0aCAhPSBudWxsKSB7CisJCQlJRmlsZSBmaWxlID0gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmdldFJvb3QoKS5nZXRGaWxlKHBhdGgpOworCQkJaWYgKGZpbGUgIT0gbnVsbCkgeworCQkJCWRvU2F2ZUFzKFVSSS5jcmVhdGVQbGF0Zm9ybVJlc291cmNlVVJJKGZpbGUuZ2V0RnVsbFBhdGgoKS50b1N0cmluZygpLCB0cnVlKSwgbmV3IEZpbGVFZGl0b3JJbnB1dChmaWxlKSk7CisJCQl9CisJCX0KKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBkb1NhdmVBcyhVUkkgdXJpLCBJRWRpdG9ySW5wdXQgZWRpdG9ySW5wdXQpIHsKKwkJKGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKS5nZXRSZXNvdXJjZXMoKS5nZXQoMCkpLnNldFVSSSh1cmkpOworCQlzZXRJbnB1dFdpdGhOb3RpZnkoZWRpdG9ySW5wdXQpOworCQlzZXRQYXJ0TmFtZShlZGl0b3JJbnB1dC5nZXROYW1lKCkpOworCQlJUHJvZ3Jlc3NNb25pdG9yIHByb2dyZXNzTW9uaXRvciA9CisJCQlnZXRBY3Rpb25CYXJzKCkuZ2V0U3RhdHVzTGluZU1hbmFnZXIoKSAhPSBudWxsID8KKwkJCQlnZXRBY3Rpb25CYXJzKCkuZ2V0U3RhdHVzTGluZU1hbmFnZXIoKS5nZXRQcm9ncmVzc01vbml0b3IoKSA6CisJCQkJbmV3IE51bGxQcm9ncmVzc01vbml0b3IoKTsKKwkJZG9TYXZlKHByb2dyZXNzTW9uaXRvcik7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgZ290b01hcmtlcihJTWFya2VyIG1hcmtlcikgeworCQl0cnkgeworCQkJaWYgKG1hcmtlci5nZXRUeXBlKCkuZXF1YWxzKEVWYWxpZGF0b3IuTUFSS0VSKSkgeworCQkJCVN0cmluZyB1cmlBdHRyaWJ1dGUgPSBtYXJrZXIuZ2V0QXR0cmlidXRlKEVWYWxpZGF0b3IuVVJJX0FUVFJJQlVURSwgbnVsbCk7CisJCQkJaWYgKHVyaUF0dHJpYnV0ZSAhPSBudWxsKSB7CisJCQkJCVVSSSB1cmkgPSBVUkkuY3JlYXRlVVJJKHVyaUF0dHJpYnV0ZSk7CisJCQkJCUVPYmplY3QgZU9iamVjdCA9IGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKS5nZXRFT2JqZWN0KHVyaSwgdHJ1ZSk7CisJCQkJCWlmIChlT2JqZWN0ICE9IG51bGwpIHsKKwkJCQkJICBzZXRTZWxlY3Rpb25Ub1ZpZXdlcihDb2xsZWN0aW9ucy5zaW5nbGV0b24oZWRpdGluZ0RvbWFpbi5nZXRXcmFwcGVyKGVPYmplY3QpKSk7CisJCQkJCX0KKwkJCQl9CisJCQl9CisJCX0KKwkJY2F0Y2ggKENvcmVFeGNlcHRpb24gZXhjZXB0aW9uKSB7CisJCQlJbnRlcnZlbnRpb25zRWRpdG9yUGx1Z2luLklOU1RBTkNFLmxvZyhleGNlcHRpb24pOworCQl9CisJfQorCisJLyoqCisJICogVGhpcyBpcyBjYWxsZWQgZHVyaW5nIHN0YXJ0dXAuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgaW5pdChJRWRpdG9yU2l0ZSBzaXRlLCBJRWRpdG9ySW5wdXQgZWRpdG9ySW5wdXQpIHsKKwkJc2V0U2l0ZShzaXRlKTsKKwkJc2V0SW5wdXRXaXRoTm90aWZ5KGVkaXRvcklucHV0KTsKKwkJc2V0UGFydE5hbWUoZWRpdG9ySW5wdXQuZ2V0TmFtZSgpKTsKKwkJc2l0ZS5zZXRTZWxlY3Rpb25Qcm92aWRlcih0aGlzKTsKKwkJc2l0ZS5nZXRQYWdlKCkuYWRkUGFydExpc3RlbmVyKHBhcnRMaXN0ZW5lcik7CisJCVJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5hZGRSZXNvdXJjZUNoYW5nZUxpc3RlbmVyKHJlc291cmNlQ2hhbmdlTGlzdGVuZXIsIElSZXNvdXJjZUNoYW5nZUV2ZW50LlBPU1RfQ0hBTkdFKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBzZXRGb2N1cygpIHsKKwkJaWYgKGN1cnJlbnRWaWV3ZXJQYW5lICE9IG51bGwpIHsKKwkJCWN1cnJlbnRWaWV3ZXJQYW5lLnNldEZvY3VzKCk7CisJCX0KKwkJZWxzZSB7CisJCQlnZXRDb250cm9sKGdldEFjdGl2ZVBhZ2UoKSkuc2V0Rm9jdXMoKTsKKwkJfQorCX0KKworCS8qKgorCSAqIFRoaXMgaW1wbGVtZW50cyB7QGxpbmsgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uUHJvdmlkZXJ9LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIGFkZFNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcihJU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyIGxpc3RlbmVyKSB7CisJCXNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcnMuYWRkKGxpc3RlbmVyKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGltcGxlbWVudHMge0BsaW5rIG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvblByb3ZpZGVyfS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCByZW1vdmVTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIoSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lciBsaXN0ZW5lcikgeworCQlzZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXJzLnJlbW92ZShsaXN0ZW5lcik7CisJfQorCisJLyoqCisJICogVGhpcyBpbXBsZW1lbnRzIHtAbGluayBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb25Qcm92aWRlcn0gdG8gcmV0dXJuIHRoaXMgZWRpdG9yJ3Mgb3ZlcmFsbCBzZWxlY3Rpb24uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIElTZWxlY3Rpb24gZ2V0U2VsZWN0aW9uKCkgeworCQlyZXR1cm4gZWRpdG9yU2VsZWN0aW9uOworCX0KKworCS8qKgorCSAqIFRoaXMgaW1wbGVtZW50cyB7QGxpbmsgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uUHJvdmlkZXJ9IHRvIHNldCB0aGlzIGVkaXRvcidzIG92ZXJhbGwgc2VsZWN0aW9uLgorCSAqIENhbGxpbmcgdGhpcyByZXN1bHQgd2lsbCBub3RpZnkgdGhlIGxpc3RlbmVycy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRTZWxlY3Rpb24oSVNlbGVjdGlvbiBzZWxlY3Rpb24pIHsKKwkJZWRpdG9yU2VsZWN0aW9uID0gc2VsZWN0aW9uOworCisJCWZvciAoSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lciBsaXN0ZW5lciA6IHNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcnMpIHsKKwkJCWxpc3RlbmVyLnNlbGVjdGlvbkNoYW5nZWQobmV3IFNlbGVjdGlvbkNoYW5nZWRFdmVudCh0aGlzLCBzZWxlY3Rpb24pKTsKKwkJfQorCQlzZXRTdGF0dXNMaW5lTWFuYWdlcihzZWxlY3Rpb24pOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIHNldFN0YXR1c0xpbmVNYW5hZ2VyKElTZWxlY3Rpb24gc2VsZWN0aW9uKSB7CisJCUlTdGF0dXNMaW5lTWFuYWdlciBzdGF0dXNMaW5lTWFuYWdlciA9IGN1cnJlbnRWaWV3ZXIgIT0gbnVsbCAmJiBjdXJyZW50Vmlld2VyID09IGNvbnRlbnRPdXRsaW5lVmlld2VyID8KKwkJCWNvbnRlbnRPdXRsaW5lU3RhdHVzTGluZU1hbmFnZXIgOiBnZXRBY3Rpb25CYXJzKCkuZ2V0U3RhdHVzTGluZU1hbmFnZXIoKTsKKworCQlpZiAoc3RhdHVzTGluZU1hbmFnZXIgIT0gbnVsbCkgeworCQkJaWYgKHNlbGVjdGlvbiBpbnN0YW5jZW9mIElTdHJ1Y3R1cmVkU2VsZWN0aW9uKSB7CisJCQkJQ29sbGVjdGlvbjw/PiBjb2xsZWN0aW9uID0gKChJU3RydWN0dXJlZFNlbGVjdGlvbilzZWxlY3Rpb24pLnRvTGlzdCgpOworCQkJCXN3aXRjaCAoY29sbGVjdGlvbi5zaXplKCkpIHsKKwkJCQkJY2FzZSAwOiB7CisJCQkJCQlzdGF0dXNMaW5lTWFuYWdlci5zZXRNZXNzYWdlKGdldFN0cmluZygiX1VJX05vT2JqZWN0U2VsZWN0ZWQiKSk7CisJCQkJCQlicmVhazsKKwkJCQkJfQorCQkJCQljYXNlIDE6IHsKKwkJCQkJCVN0cmluZyB0ZXh0ID0gbmV3IEFkYXB0ZXJGYWN0b3J5SXRlbURlbGVnYXRvcihhZGFwdGVyRmFjdG9yeSkuZ2V0VGV4dChjb2xsZWN0aW9uLml0ZXJhdG9yKCkubmV4dCgpKTsKKwkJCQkJCXN0YXR1c0xpbmVNYW5hZ2VyLnNldE1lc3NhZ2UoZ2V0U3RyaW5nKCJfVUlfU2luZ2xlT2JqZWN0U2VsZWN0ZWQiLCB0ZXh0KSk7CisJCQkJCQlicmVhazsKKwkJCQkJfQorCQkJCQlkZWZhdWx0OiB7CisJCQkJCQlzdGF0dXNMaW5lTWFuYWdlci5zZXRNZXNzYWdlKGdldFN0cmluZygiX1VJX011bHRpT2JqZWN0U2VsZWN0ZWQiLCBJbnRlZ2VyLnRvU3RyaW5nKGNvbGxlY3Rpb24uc2l6ZSgpKSkpOworCQkJCQkJYnJlYWs7CisJCQkJCX0KKwkJCQl9CisJCQl9CisJCQllbHNlIHsKKwkJCQlzdGF0dXNMaW5lTWFuYWdlci5zZXRNZXNzYWdlKCIiKTsKKwkJCX0KKwkJfQorCX0KKworCS8qKgorCSAqIFRoaXMgbG9va3MgdXAgYSBzdHJpbmcgaW4gdGhlIHBsdWdpbidzIHBsdWdpbi5wcm9wZXJ0aWVzIGZpbGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIGdldFN0cmluZyhTdHJpbmcga2V5KSB7CisJCXJldHVybiBJbnRlcnZlbnRpb25zRWRpdG9yUGx1Z2luLklOU1RBTkNFLmdldFN0cmluZyhrZXkpOworCX0KKworCS8qKgorCSAqIFRoaXMgbG9va3MgdXAgYSBzdHJpbmcgaW4gcGx1Z2luLnByb3BlcnRpZXMsIG1ha2luZyBhIHN1YnN0aXR1dGlvbi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcml2YXRlIHN0YXRpYyBTdHJpbmcgZ2V0U3RyaW5nKFN0cmluZyBrZXksIE9iamVjdCBzMSkgeworCQlyZXR1cm4gSW50ZXJ2ZW50aW9uc0VkaXRvclBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoa2V5LCBuZXcgT2JqZWN0IFtdIHsgczEgfSk7CisJfQorCisJLyoqCisJICogVGhpcyBpbXBsZW1lbnRzIHtAbGluayBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSU1lbnVMaXN0ZW5lcn0gdG8gaGVscCBmaWxsIHRoZSBjb250ZXh0IG1lbnVzIHdpdGggY29udHJpYnV0aW9ucyBmcm9tIHRoZSBFZGl0IG1lbnUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgbWVudUFib3V0VG9TaG93KElNZW51TWFuYWdlciBtZW51TWFuYWdlcikgeworCQkoKElNZW51TGlzdGVuZXIpZ2V0RWRpdG9yU2l0ZSgpLmdldEFjdGlvbkJhckNvbnRyaWJ1dG9yKCkpLm1lbnVBYm91dFRvU2hvdyhtZW51TWFuYWdlcik7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVkaXRpbmdEb21haW5BY3Rpb25CYXJDb250cmlidXRvciBnZXRBY3Rpb25CYXJDb250cmlidXRvcigpIHsKKwkJcmV0dXJuIChFZGl0aW5nRG9tYWluQWN0aW9uQmFyQ29udHJpYnV0b3IpZ2V0RWRpdG9yU2l0ZSgpLmdldEFjdGlvbkJhckNvbnRyaWJ1dG9yKCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIElBY3Rpb25CYXJzIGdldEFjdGlvbkJhcnMoKSB7CisJCXJldHVybiBnZXRBY3Rpb25CYXJDb250cmlidXRvcigpLmdldEFjdGlvbkJhcnMoKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQWRhcHRlckZhY3RvcnkgZ2V0QWRhcHRlckZhY3RvcnkoKSB7CisJCXJldHVybiBhZGFwdGVyRmFjdG9yeTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBkaXNwb3NlKCkgeworCQl1cGRhdGVQcm9ibGVtSW5kaWNhdGlvbiA9IGZhbHNlOworCisJCVJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5yZW1vdmVSZXNvdXJjZUNoYW5nZUxpc3RlbmVyKHJlc291cmNlQ2hhbmdlTGlzdGVuZXIpOworCisJCWdldFNpdGUoKS5nZXRQYWdlKCkucmVtb3ZlUGFydExpc3RlbmVyKHBhcnRMaXN0ZW5lcik7CisKKwkJYWRhcHRlckZhY3RvcnkuZGlzcG9zZSgpOworCisJCWlmIChnZXRBY3Rpb25CYXJDb250cmlidXRvcigpLmdldEFjdGl2ZUVkaXRvcigpID09IHRoaXMpIHsKKwkJCWdldEFjdGlvbkJhckNvbnRyaWJ1dG9yKCkuc2V0QWN0aXZlRWRpdG9yKG51bGwpOworCQl9CisKKwkJaWYgKHByb3BlcnR5U2hlZXRQYWdlICE9IG51bGwpIHsKKwkJCXByb3BlcnR5U2hlZXRQYWdlLmRpc3Bvc2UoKTsKKwkJfQorCisJCWlmIChjb250ZW50T3V0bGluZVBhZ2UgIT0gbnVsbCkgeworCQkJY29udGVudE91dGxpbmVQYWdlLmRpc3Bvc2UoKTsKKwkJfQorCisJCXN1cGVyLmRpc3Bvc2UoKTsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHdoZXRoZXIgdGhlIG91dGxpbmUgdmlldyBzaG91bGQgYmUgcHJlc2VudGVkIHRvIHRoZSB1c2VyLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBib29sZWFuIHNob3dPdXRsaW5lVmlldygpIHsKKwkJcmV0dXJuIHRydWU7CisJfQorfQpkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmludGVydmVudGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vaW50ZXJ2ZW50aW9ucy9wcmVzZW50YXRpb24vSW50ZXJ2ZW50aW9uc0VkaXRvclBsdWdpbi5qYXZhIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmludGVydmVudGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vaW50ZXJ2ZW50aW9ucy9wcmVzZW50YXRpb24vSW50ZXJ2ZW50aW9uc0VkaXRvclBsdWdpbi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFjZGVkYzUKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuaW50ZXJ2ZW50aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9pbnRlcnZlbnRpb25zL3ByZXNlbnRhdGlvbi9JbnRlcnZlbnRpb25zRWRpdG9yUGx1Z2luLmphdmEKQEAgLTAsMCArMSw5OSBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmludGVydmVudGlvbnMucHJlc2VudGF0aW9uOworCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLkVNRlBsdWdpbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnVpLkVjbGlwc2VVSVBsdWdpbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuUmVzb3VyY2VMb2NhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5wcm92aWRlci5FY29yZUVkaXRQbHVnaW47CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5wcm92aWRlci5Db3JlRWRpdFBsdWdpbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmdyYXBoZ2VuZXJhdG9ycy5wcm92aWRlci5HcmFwaGdlbmVyYXRvckVkaXRQbHVnaW47CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS51aS5pbnRlcnZlbnRpb25zLmFkYXB0ZXJzLkNvbnRyb2xHcmFwaEdlbmVyYXRvclByb3BlcnR5RWRpdG9yQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS51aS5pbnRlcnZlbnRpb25zLmFkYXB0ZXJzLkNvbnRyb2xQcm9wZXJ0eVN0cmluZ1Byb3ZpZGVyQWRhcHRlckZhY3Rvcnk7CisKKy8qKgorICogVGhpcyBpcyB0aGUgY2VudHJhbCBzaW5nbGV0b24gZm9yIHRoZSBJbnRlcnZlbnRpb25zIGVkaXRvciBwbHVnaW4uCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBmaW5hbCBjbGFzcyBJbnRlcnZlbnRpb25zRWRpdG9yUGx1Z2luIGV4dGVuZHMgRU1GUGx1Z2luIHsKKwkvKioKKwkgKiBLZWVwIHRyYWNrIG9mIHRoZSBzaW5nbGV0b24uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBJbnRlcnZlbnRpb25zRWRpdG9yUGx1Z2luIElOU1RBTkNFID0gbmV3IEludGVydmVudGlvbnNFZGl0b3JQbHVnaW4oKTsKKwkKKwkvKioKKwkgKiBLZWVwIHRyYWNrIG9mIHRoZSBzaW5nbGV0b24uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJpdmF0ZSBzdGF0aWMgSW1wbGVtZW50YXRpb24gcGx1Z2luOworCisJLyoqCisJICogQ3JlYXRlIHRoZSBpbnN0YW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgSW50ZXJ2ZW50aW9uc0VkaXRvclBsdWdpbigpIHsKKwkJc3VwZXIKKwkJCShuZXcgUmVzb3VyY2VMb2NhdG9yIFtdIHsKKwkJCQlDb3JlRWRpdFBsdWdpbi5JTlNUQU5DRSwKKwkJCQlFY29yZUVkaXRQbHVnaW4uSU5TVEFOQ0UsCisJCQkJR3JhcGhnZW5lcmF0b3JFZGl0UGx1Z2luLklOU1RBTkNFLAorCQkJfSk7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgc2luZ2xldG9uIGluc3RhbmNlIG9mIHRoZSBFY2xpcHNlIHBsdWdpbi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIHNpbmdsZXRvbiBpbnN0YW5jZS4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIFJlc291cmNlTG9jYXRvciBnZXRQbHVnaW5SZXNvdXJjZUxvY2F0b3IoKSB7CisJCXJldHVybiBwbHVnaW47CisJfQorCQorCS8qKgorCSAqIFJldHVybnMgdGhlIHNpbmdsZXRvbiBpbnN0YW5jZSBvZiB0aGUgRWNsaXBzZSBwbHVnaW4uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBzaW5nbGV0b24gaW5zdGFuY2UuCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBzdGF0aWMgSW1wbGVtZW50YXRpb24gZ2V0UGx1Z2luKCkgeworCQlyZXR1cm4gcGx1Z2luOworCX0KKwkKKwkvKioKKwkgKiBUaGUgYWN0dWFsIGltcGxlbWVudGF0aW9uIG9mIHRoZSBFY2xpcHNlIDxiPlBsdWdpbjwvYj4uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHN0YXRpYyBjbGFzcyBJbXBsZW1lbnRhdGlvbiBleHRlbmRzIEVjbGlwc2VVSVBsdWdpbiB7CisJCS8qKgorCQkgKiBDcmVhdGVzIGFuIGluc3RhbmNlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZCBOT1QKKwkJICovCisJCXB1YmxpYyBJbXBsZW1lbnRhdGlvbigpIHsKKwkJCXN1cGVyKCk7CisJCisJCQkvLyBSZW1lbWJlciB0aGUgc3RhdGljIGluc3RhbmNlLgorCQkJLy8KKwkJCXBsdWdpbiA9IHRoaXM7CisJCQkvLyBOZWVkIHRvIHJlZ2lzdGVyCisJCQluZXcgQ29udHJvbEdyYXBoR2VuZXJhdG9yUHJvcGVydHlFZGl0b3JBZGFwdGVyRmFjdG9yeSgpOworCQkJbmV3IENvbnRyb2xQcm9wZXJ0eVN0cmluZ1Byb3ZpZGVyQWRhcHRlckZhY3RvcnkoKTsKKwkJfQorCX0KKworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5pbnRlcnZlbnRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2ludGVydmVudGlvbnMvcHJlc2VudGF0aW9uL0ludGVydmVudGlvbnNNb2RlbFdpemFyZC5qYXZhIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmludGVydmVudGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vaW50ZXJ2ZW50aW9ucy9wcmVzZW50YXRpb24vSW50ZXJ2ZW50aW9uc01vZGVsV2l6YXJkLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmRhODY0OAotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5pbnRlcnZlbnRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2ludGVydmVudGlvbnMvcHJlc2VudGF0aW9uL0ludGVydmVudGlvbnNNb2RlbFdpemFyZC5qYXZhCkBAIC0wLDAgKzEsNTk4IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uaW50ZXJ2ZW50aW9ucy5wcmVzZW50YXRpb247CisKKworaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7CitpbXBvcnQgamF2YS51dGlsLkFycmF5czsKK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbnM7CitpbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CitpbXBvcnQgamF2YS51dGlsLk1hcDsKK2ltcG9ydCBqYXZhLnV0aWwuTWlzc2luZ1Jlc291cmNlRXhjZXB0aW9uOworaW1wb3J0IGphdmEudXRpbC5TdHJpbmdUb2tlbml6ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5Db21tb25QbHVnaW47CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlVSSTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3NpZmllcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUucmVzb3VyY2UuUmVzb3VyY2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnJlc291cmNlLlJlc291cmNlU2V0OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5yZXNvdXJjZS5pbXBsLlJlc291cmNlU2V0SW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUueG1pLlhNTFJlc291cmNlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLnByb3ZpZGVyLkV4dGVuZGVkSW1hZ2VSZWdpc3RyeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JQ29udGFpbmVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklGaWxlOworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklGb2xkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3Q7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVJlc291cmNlOworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLlJlc291cmNlc1BsdWdpbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVByb2dyZXNzTW9uaXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5kaWFsb2dzLk1lc3NhZ2VEaWFsb2c7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU3RydWN0dXJlZFNlbGVjdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS53aXphcmQuV2l6YXJkOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLndpemFyZC5XaXphcmRQYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5TV1Q7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5Nb2RpZnlMaXN0ZW5lcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLk1vZGlmeUV2ZW50OworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5sYXlvdXQuR3JpZERhdGE7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5HcmlkTGF5b3V0OworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbWJvOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5MYWJlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5JTmV3V2l6YXJkOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2g7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuYWN0aW9ucy5Xb3Jrc3BhY2VNb2RpZnlPcGVyYXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuZGlhbG9ncy5XaXphcmROZXdGaWxlQ3JlYXRpb25QYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLnBhcnQuRmlsZUVkaXRvcklucHV0OworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLnBhcnQuSVNldFNlbGVjdGlvblRhcmdldDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmludGVydmVudGlvbnMuSW50ZXJ2ZW50aW9uc0ZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcnZlbnRpb25zLkludGVydmVudGlvbnNQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uaW50ZXJ2ZW50aW9ucy5wcm92aWRlci5JbnRlcnZlbnRpb25zRWRpdFBsdWdpbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGF0aDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5TdHJ1Y3R1cmVkU2VsZWN0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2hQYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2hQYXJ0OworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2hXaW5kb3c7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuUGFydEluaXRFeGNlcHRpb247CisKKy8qKgorICogVGhpcyBpcyBhIHNpbXBsZSB3aXphcmQgZm9yIGNyZWF0aW5nIGEgbmV3IG1vZGVsIGZpbGUuCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBJbnRlcnZlbnRpb25zTW9kZWxXaXphcmQgZXh0ZW5kcyBXaXphcmQgaW1wbGVtZW50cyBJTmV3V2l6YXJkIHsKKwkvKioKKwkgKiBUaGUgc3VwcG9ydGVkIGV4dGVuc2lvbnMgZm9yIGNyZWF0ZWQgZmlsZXMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBMaXN0PFN0cmluZz4gRklMRV9FWFRFTlNJT05TID0KKwkJQ29sbGVjdGlvbnMudW5tb2RpZmlhYmxlTGlzdChBcnJheXMuYXNMaXN0KEludGVydmVudGlvbnNFZGl0b3JQbHVnaW4uSU5TVEFOQ0UuZ2V0U3RyaW5nKCJfVUlfSW50ZXJ2ZW50aW9uc0VkaXRvckZpbGVuYW1lRXh0ZW5zaW9ucyIpLnNwbGl0KCJcXHMqLFxccyoiKSkpOworCisJLyoqCisJICogQSBmb3JtYXR0ZWQgbGlzdCBvZiBzdXBwb3J0ZWQgZmlsZSBleHRlbnNpb25zLCBzdWl0YWJsZSBmb3IgZGlzcGxheS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBGT1JNQVRURURfRklMRV9FWFRFTlNJT05TID0KKwkJSW50ZXJ2ZW50aW9uc0VkaXRvclBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoIl9VSV9JbnRlcnZlbnRpb25zRWRpdG9yRmlsZW5hbWVFeHRlbnNpb25zIikucmVwbGFjZUFsbCgiXFxzKixcXHMqIiwgIiwgIik7CisKKwkvKioKKwkgKiBUaGlzIGNhY2hlcyBhbiBpbnN0YW5jZSBvZiB0aGUgbW9kZWwgcGFja2FnZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgSW50ZXJ2ZW50aW9uc1BhY2thZ2UgaW50ZXJ2ZW50aW9uc1BhY2thZ2UgPSBJbnRlcnZlbnRpb25zUGFja2FnZS5lSU5TVEFOQ0U7CisKKwkvKioKKwkgKiBUaGlzIGNhY2hlcyBhbiBpbnN0YW5jZSBvZiB0aGUgbW9kZWwgZmFjdG9yeS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgSW50ZXJ2ZW50aW9uc0ZhY3RvcnkgaW50ZXJ2ZW50aW9uc0ZhY3RvcnkgPSBpbnRlcnZlbnRpb25zUGFja2FnZS5nZXRJbnRlcnZlbnRpb25zRmFjdG9yeSgpOworCisJLyoqCisJICogVGhpcyBpcyB0aGUgZmlsZSBjcmVhdGlvbiBwYWdlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBJbnRlcnZlbnRpb25zTW9kZWxXaXphcmROZXdGaWxlQ3JlYXRpb25QYWdlIG5ld0ZpbGVDcmVhdGlvblBhZ2U7CisKKwkvKioKKwkgKiBUaGlzIGlzIHRoZSBpbml0aWFsIG9iamVjdCBjcmVhdGlvbiBwYWdlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBJbnRlcnZlbnRpb25zTW9kZWxXaXphcmRJbml0aWFsT2JqZWN0Q3JlYXRpb25QYWdlIGluaXRpYWxPYmplY3RDcmVhdGlvblBhZ2U7CisKKwkvKioKKwkgKiBSZW1lbWJlciB0aGUgc2VsZWN0aW9uIGR1cmluZyBpbml0aWFsaXphdGlvbiBmb3IgcG9wdWxhdGluZyB0aGUgZGVmYXVsdCBjb250YWluZXIuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIElTdHJ1Y3R1cmVkU2VsZWN0aW9uIHNlbGVjdGlvbjsKKworCS8qKgorCSAqIFJlbWVtYmVyIHRoZSB3b3JrYmVuY2ggZHVyaW5nIGluaXRpYWxpemF0aW9uLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBJV29ya2JlbmNoIHdvcmtiZW5jaDsKKworCS8qKgorCSAqIENhY2hlcyB0aGUgbmFtZXMgb2YgdGhlIHR5cGVzIHRoYXQgY2FuIGJlIGNyZWF0ZWQgYXMgdGhlIHJvb3Qgb2JqZWN0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBMaXN0PFN0cmluZz4gaW5pdGlhbE9iamVjdE5hbWVzOworCisJLyoqCisJICogVGhpcyBqdXN0IHJlY29yZHMgdGhlIGluZm9ybWF0aW9uLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIGluaXQoSVdvcmtiZW5jaCB3b3JrYmVuY2gsIElTdHJ1Y3R1cmVkU2VsZWN0aW9uIHNlbGVjdGlvbikgeworCQl0aGlzLndvcmtiZW5jaCA9IHdvcmtiZW5jaDsKKwkJdGhpcy5zZWxlY3Rpb24gPSBzZWxlY3Rpb247CisJCXNldFdpbmRvd1RpdGxlKEludGVydmVudGlvbnNFZGl0b3JQbHVnaW4uSU5TVEFOQ0UuZ2V0U3RyaW5nKCJfVUlfV2l6YXJkX2xhYmVsIikpOworCQlzZXREZWZhdWx0UGFnZUltYWdlRGVzY3JpcHRvcihFeHRlbmRlZEltYWdlUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0SW1hZ2VEZXNjcmlwdG9yKEludGVydmVudGlvbnNFZGl0b3JQbHVnaW4uSU5TVEFOQ0UuZ2V0SW1hZ2UoImZ1bGwvd2l6YmFuL05ld0ludGVydmVudGlvbnMiKSkpOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIG5hbWVzIG9mIHRoZSB0eXBlcyB0aGF0IGNhbiBiZSBjcmVhdGVkIGFzIHRoZSByb290IG9iamVjdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgQ29sbGVjdGlvbjxTdHJpbmc+IGdldEluaXRpYWxPYmplY3ROYW1lcygpIHsKKwkJaWYgKGluaXRpYWxPYmplY3ROYW1lcyA9PSBudWxsKSB7CisJCQlpbml0aWFsT2JqZWN0TmFtZXMgPSBuZXcgQXJyYXlMaXN0PFN0cmluZz4oKTsKKwkJCWZvciAoRUNsYXNzaWZpZXIgZUNsYXNzaWZpZXIgOiBpbnRlcnZlbnRpb25zUGFja2FnZS5nZXRFQ2xhc3NpZmllcnMoKSkgeworCQkJCWlmIChlQ2xhc3NpZmllciBpbnN0YW5jZW9mIEVDbGFzcykgeworCQkJCQlFQ2xhc3MgZUNsYXNzID0gKEVDbGFzcyllQ2xhc3NpZmllcjsKKwkJCQkJaWYgKCFlQ2xhc3MuaXNBYnN0cmFjdCgpKSB7CisJCQkJCQlpbml0aWFsT2JqZWN0TmFtZXMuYWRkKGVDbGFzcy5nZXROYW1lKCkpOworCQkJCQl9CisJCQkJfQorCQkJfQorCQkJQ29sbGVjdGlvbnMuc29ydChpbml0aWFsT2JqZWN0TmFtZXMsIENvbW1vblBsdWdpbi5JTlNUQU5DRS5nZXRDb21wYXJhdG9yKCkpOworCQl9CisJCXJldHVybiBpbml0aWFsT2JqZWN0TmFtZXM7CisJfQorCisJLyoqCisJICogQ3JlYXRlIGEgbmV3IG1vZGVsLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBFT2JqZWN0IGNyZWF0ZUluaXRpYWxNb2RlbCgpIHsKKwkJRUNsYXNzIGVDbGFzcyA9IChFQ2xhc3MpaW50ZXJ2ZW50aW9uc1BhY2thZ2UuZ2V0RUNsYXNzaWZpZXIoaW5pdGlhbE9iamVjdENyZWF0aW9uUGFnZS5nZXRJbml0aWFsT2JqZWN0TmFtZSgpKTsKKwkJRU9iamVjdCByb290T2JqZWN0ID0gaW50ZXJ2ZW50aW9uc0ZhY3RvcnkuY3JlYXRlKGVDbGFzcyk7CisJCXJldHVybiByb290T2JqZWN0OworCX0KKworCS8qKgorCSAqIERvIHRoZSB3b3JrIGFmdGVyIGV2ZXJ5dGhpbmcgaXMgc3BlY2lmaWVkLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBib29sZWFuIHBlcmZvcm1GaW5pc2goKSB7CisJCXRyeSB7CisJCQkvLyBSZW1lbWJlciB0aGUgZmlsZS4KKwkJCS8vCisJCQlmaW5hbCBJRmlsZSBtb2RlbEZpbGUgPSBnZXRNb2RlbEZpbGUoKTsKKworCQkJLy8gRG8gdGhlIHdvcmsgd2l0aGluIGFuIG9wZXJhdGlvbi4KKwkJCS8vCisJCQlXb3Jrc3BhY2VNb2RpZnlPcGVyYXRpb24gb3BlcmF0aW9uID0KKwkJCQluZXcgV29ya3NwYWNlTW9kaWZ5T3BlcmF0aW9uKCkgeworCQkJCQlAT3ZlcnJpZGUKKwkJCQkJcHJvdGVjdGVkIHZvaWQgZXhlY3V0ZShJUHJvZ3Jlc3NNb25pdG9yIHByb2dyZXNzTW9uaXRvcikgeworCQkJCQkJdHJ5IHsKKwkJCQkJCQkvLyBDcmVhdGUgYSByZXNvdXJjZSBzZXQKKwkJCQkJCQkvLworCQkJCQkJCVJlc291cmNlU2V0IHJlc291cmNlU2V0ID0gbmV3IFJlc291cmNlU2V0SW1wbCgpOworCisJCQkJCQkJLy8gR2V0IHRoZSBVUkkgb2YgdGhlIG1vZGVsIGZpbGUuCisJCQkJCQkJLy8KKwkJCQkJCQlVUkkgZmlsZVVSSSA9IFVSSS5jcmVhdGVQbGF0Zm9ybVJlc291cmNlVVJJKG1vZGVsRmlsZS5nZXRGdWxsUGF0aCgpLnRvU3RyaW5nKCksIHRydWUpOworCisJCQkJCQkJLy8gQ3JlYXRlIGEgcmVzb3VyY2UgZm9yIHRoaXMgZmlsZS4KKwkJCQkJCQkvLworCQkJCQkJCVJlc291cmNlIHJlc291cmNlID0gcmVzb3VyY2VTZXQuY3JlYXRlUmVzb3VyY2UoZmlsZVVSSSk7CisKKwkJCQkJCQkvLyBBZGQgdGhlIGluaXRpYWwgbW9kZWwgb2JqZWN0IHRvIHRoZSBjb250ZW50cy4KKwkJCQkJCQkvLworCQkJCQkJCUVPYmplY3Qgcm9vdE9iamVjdCA9IGNyZWF0ZUluaXRpYWxNb2RlbCgpOworCQkJCQkJCWlmIChyb290T2JqZWN0ICE9IG51bGwpIHsKKwkJCQkJCQkJcmVzb3VyY2UuZ2V0Q29udGVudHMoKS5hZGQocm9vdE9iamVjdCk7CisJCQkJCQkJfQorCisJCQkJCQkJLy8gU2F2ZSB0aGUgY29udGVudHMgb2YgdGhlIHJlc291cmNlIHRvIHRoZSBmaWxlIHN5c3RlbS4KKwkJCQkJCQkvLworCQkJCQkJCU1hcDxPYmplY3QsIE9iamVjdD4gb3B0aW9ucyA9IG5ldyBIYXNoTWFwPE9iamVjdCwgT2JqZWN0PigpOworCQkJCQkJCW9wdGlvbnMucHV0KFhNTFJlc291cmNlLk9QVElPTl9FTkNPRElORywgaW5pdGlhbE9iamVjdENyZWF0aW9uUGFnZS5nZXRFbmNvZGluZygpKTsKKwkJCQkJCQlyZXNvdXJjZS5zYXZlKG9wdGlvbnMpOworCQkJCQkJfQorCQkJCQkJY2F0Y2ggKEV4Y2VwdGlvbiBleGNlcHRpb24pIHsKKwkJCQkJCQlJbnRlcnZlbnRpb25zRWRpdG9yUGx1Z2luLklOU1RBTkNFLmxvZyhleGNlcHRpb24pOworCQkJCQkJfQorCQkJCQkJZmluYWxseSB7CisJCQkJCQkJcHJvZ3Jlc3NNb25pdG9yLmRvbmUoKTsKKwkJCQkJCX0KKwkJCQkJfQorCQkJCX07CisKKwkJCWdldENvbnRhaW5lcigpLnJ1bihmYWxzZSwgZmFsc2UsIG9wZXJhdGlvbik7CisKKwkJCS8vIFNlbGVjdCB0aGUgbmV3IGZpbGUgcmVzb3VyY2UgaW4gdGhlIGN1cnJlbnQgdmlldy4KKwkJCS8vCisJCQlJV29ya2JlbmNoV2luZG93IHdvcmtiZW5jaFdpbmRvdyA9IHdvcmtiZW5jaC5nZXRBY3RpdmVXb3JrYmVuY2hXaW5kb3coKTsKKwkJCUlXb3JrYmVuY2hQYWdlIHBhZ2UgPSB3b3JrYmVuY2hXaW5kb3cuZ2V0QWN0aXZlUGFnZSgpOworCQkJZmluYWwgSVdvcmtiZW5jaFBhcnQgYWN0aXZlUGFydCA9IHBhZ2UuZ2V0QWN0aXZlUGFydCgpOworCQkJaWYgKGFjdGl2ZVBhcnQgaW5zdGFuY2VvZiBJU2V0U2VsZWN0aW9uVGFyZ2V0KSB7CisJCQkJZmluYWwgSVNlbGVjdGlvbiB0YXJnZXRTZWxlY3Rpb24gPSBuZXcgU3RydWN0dXJlZFNlbGVjdGlvbihtb2RlbEZpbGUpOworCQkJCWdldFNoZWxsKCkuZ2V0RGlzcGxheSgpLmFzeW5jRXhlYworCQkJCQkobmV3IFJ1bm5hYmxlKCkgeworCQkJCQkJIHB1YmxpYyB2b2lkIHJ1bigpIHsKKwkJCQkJCQkgKChJU2V0U2VsZWN0aW9uVGFyZ2V0KWFjdGl2ZVBhcnQpLnNlbGVjdFJldmVhbCh0YXJnZXRTZWxlY3Rpb24pOworCQkJCQkJIH0KKwkJCQkJIH0pOworCQkJfQorCisJCQkvLyBPcGVuIGFuIGVkaXRvciBvbiB0aGUgbmV3IGZpbGUuCisJCQkvLworCQkJdHJ5IHsKKwkJCQlwYWdlLm9wZW5FZGl0b3IKKwkJCQkJKG5ldyBGaWxlRWRpdG9ySW5wdXQobW9kZWxGaWxlKSwKKwkJCQkJIHdvcmtiZW5jaC5nZXRFZGl0b3JSZWdpc3RyeSgpLmdldERlZmF1bHRFZGl0b3IobW9kZWxGaWxlLmdldEZ1bGxQYXRoKCkudG9TdHJpbmcoKSkuZ2V0SWQoKSk7CQkJCQkgCSAKKwkJCX0KKwkJCWNhdGNoIChQYXJ0SW5pdEV4Y2VwdGlvbiBleGNlcHRpb24pIHsKKwkJCQlNZXNzYWdlRGlhbG9nLm9wZW5FcnJvcih3b3JrYmVuY2hXaW5kb3cuZ2V0U2hlbGwoKSwgSW50ZXJ2ZW50aW9uc0VkaXRvclBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoIl9VSV9PcGVuRWRpdG9yRXJyb3JfbGFiZWwiKSwgZXhjZXB0aW9uLmdldE1lc3NhZ2UoKSk7CisJCQkJcmV0dXJuIGZhbHNlOworCQkJfQorCisJCQlyZXR1cm4gdHJ1ZTsKKwkJfQorCQljYXRjaCAoRXhjZXB0aW9uIGV4Y2VwdGlvbikgeworCQkJSW50ZXJ2ZW50aW9uc0VkaXRvclBsdWdpbi5JTlNUQU5DRS5sb2coZXhjZXB0aW9uKTsKKwkJCXJldHVybiBmYWxzZTsKKwkJfQorCX0KKworCS8qKgorCSAqIFRoaXMgaXMgdGhlIG9uZSBwYWdlIG9mIHRoZSB3aXphcmQuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIGNsYXNzIEludGVydmVudGlvbnNNb2RlbFdpemFyZE5ld0ZpbGVDcmVhdGlvblBhZ2UgZXh0ZW5kcyBXaXphcmROZXdGaWxlQ3JlYXRpb25QYWdlIHsKKwkJLyoqCisJCSAqIFBhc3MgaW4gdGhlIHNlbGVjdGlvbi4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCXB1YmxpYyBJbnRlcnZlbnRpb25zTW9kZWxXaXphcmROZXdGaWxlQ3JlYXRpb25QYWdlKFN0cmluZyBwYWdlSWQsIElTdHJ1Y3R1cmVkU2VsZWN0aW9uIHNlbGVjdGlvbikgeworCQkJc3VwZXIocGFnZUlkLCBzZWxlY3Rpb24pOworCQl9CisKKwkJLyoqCisJCSAqIFRoZSBmcmFtZXdvcmsgY2FsbHMgdGhpcyB0byBzZWUgaWYgdGhlIGZpbGUgaXMgY29ycmVjdC4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUBPdmVycmlkZQorCQlwcm90ZWN0ZWQgYm9vbGVhbiB2YWxpZGF0ZVBhZ2UoKSB7CisJCQlpZiAoc3VwZXIudmFsaWRhdGVQYWdlKCkpIHsKKwkJCQlTdHJpbmcgZXh0ZW5zaW9uID0gbmV3IFBhdGgoZ2V0RmlsZU5hbWUoKSkuZ2V0RmlsZUV4dGVuc2lvbigpOworCQkJCWlmIChleHRlbnNpb24gPT0gbnVsbCB8fCAhRklMRV9FWFRFTlNJT05TLmNvbnRhaW5zKGV4dGVuc2lvbikpIHsKKwkJCQkJU3RyaW5nIGtleSA9IEZJTEVfRVhURU5TSU9OUy5zaXplKCkgPiAxID8gIl9XQVJOX0ZpbGVuYW1lRXh0ZW5zaW9ucyIgOiAiX1dBUk5fRmlsZW5hbWVFeHRlbnNpb24iOworCQkJCQlzZXRFcnJvck1lc3NhZ2UoSW50ZXJ2ZW50aW9uc0VkaXRvclBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoa2V5LCBuZXcgT2JqZWN0IFtdIHsgRk9STUFUVEVEX0ZJTEVfRVhURU5TSU9OUyB9KSk7CisJCQkJCXJldHVybiBmYWxzZTsKKwkJCQl9CisJCQkJcmV0dXJuIHRydWU7CisJCQl9CisJCQlyZXR1cm4gZmFsc2U7CisJCX0KKworCQkvKioKKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCXB1YmxpYyBJRmlsZSBnZXRNb2RlbEZpbGUoKSB7CisJCQlyZXR1cm4gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmdldFJvb3QoKS5nZXRGaWxlKGdldENvbnRhaW5lckZ1bGxQYXRoKCkuYXBwZW5kKGdldEZpbGVOYW1lKCkpKTsKKwkJfQorCX0KKworCS8qKgorCSAqIFRoaXMgaXMgdGhlIHBhZ2Ugd2hlcmUgdGhlIHR5cGUgb2Ygb2JqZWN0IHRvIGNyZWF0ZSBpcyBzZWxlY3RlZC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgY2xhc3MgSW50ZXJ2ZW50aW9uc01vZGVsV2l6YXJkSW5pdGlhbE9iamVjdENyZWF0aW9uUGFnZSBleHRlbmRzIFdpemFyZFBhZ2UgeworCQkvKioKKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCXByb3RlY3RlZCBDb21ibyBpbml0aWFsT2JqZWN0RmllbGQ7CisKKwkJLyoqCisJCSAqIEBnZW5lcmF0ZWQKKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqLworCQlwcm90ZWN0ZWQgTGlzdDxTdHJpbmc+IGVuY29kaW5nczsKKworCQkvKioKKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCXByb3RlY3RlZCBDb21ibyBlbmNvZGluZ0ZpZWxkOworCisJCS8qKgorCQkgKiBQYXNzIGluIHRoZSBzZWxlY3Rpb24uCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlwdWJsaWMgSW50ZXJ2ZW50aW9uc01vZGVsV2l6YXJkSW5pdGlhbE9iamVjdENyZWF0aW9uUGFnZShTdHJpbmcgcGFnZUlkKSB7CisJCQlzdXBlcihwYWdlSWQpOworCQl9CisKKwkJLyoqCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlwdWJsaWMgdm9pZCBjcmVhdGVDb250cm9sKENvbXBvc2l0ZSBwYXJlbnQpIHsKKwkJCUNvbXBvc2l0ZSBjb21wb3NpdGUgPSBuZXcgQ29tcG9zaXRlKHBhcmVudCwgU1dULk5PTkUpOyB7CisJCQkJR3JpZExheW91dCBsYXlvdXQgPSBuZXcgR3JpZExheW91dCgpOworCQkJCWxheW91dC5udW1Db2x1bW5zID0gMTsKKwkJCQlsYXlvdXQudmVydGljYWxTcGFjaW5nID0gMTI7CisJCQkJY29tcG9zaXRlLnNldExheW91dChsYXlvdXQpOworCisJCQkJR3JpZERhdGEgZGF0YSA9IG5ldyBHcmlkRGF0YSgpOworCQkJCWRhdGEudmVydGljYWxBbGlnbm1lbnQgPSBHcmlkRGF0YS5GSUxMOworCQkJCWRhdGEuZ3JhYkV4Y2Vzc1ZlcnRpY2FsU3BhY2UgPSB0cnVlOworCQkJCWRhdGEuaG9yaXpvbnRhbEFsaWdubWVudCA9IEdyaWREYXRhLkZJTEw7CisJCQkJY29tcG9zaXRlLnNldExheW91dERhdGEoZGF0YSk7CisJCQl9CisKKwkJCUxhYmVsIGNvbnRhaW5lckxhYmVsID0gbmV3IExhYmVsKGNvbXBvc2l0ZSwgU1dULkxFRlQpOworCQkJeworCQkJCWNvbnRhaW5lckxhYmVsLnNldFRleHQoSW50ZXJ2ZW50aW9uc0VkaXRvclBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoIl9VSV9Nb2RlbE9iamVjdCIpKTsKKworCQkJCUdyaWREYXRhIGRhdGEgPSBuZXcgR3JpZERhdGEoKTsKKwkJCQlkYXRhLmhvcml6b250YWxBbGlnbm1lbnQgPSBHcmlkRGF0YS5GSUxMOworCQkJCWNvbnRhaW5lckxhYmVsLnNldExheW91dERhdGEoZGF0YSk7CisJCQl9CisKKwkJCWluaXRpYWxPYmplY3RGaWVsZCA9IG5ldyBDb21ibyhjb21wb3NpdGUsIFNXVC5CT1JERVIpOworCQkJeworCQkJCUdyaWREYXRhIGRhdGEgPSBuZXcgR3JpZERhdGEoKTsKKwkJCQlkYXRhLmhvcml6b250YWxBbGlnbm1lbnQgPSBHcmlkRGF0YS5GSUxMOworCQkJCWRhdGEuZ3JhYkV4Y2Vzc0hvcml6b250YWxTcGFjZSA9IHRydWU7CisJCQkJaW5pdGlhbE9iamVjdEZpZWxkLnNldExheW91dERhdGEoZGF0YSk7CisJCQl9CisKKwkJCWZvciAoU3RyaW5nIG9iamVjdE5hbWUgOiBnZXRJbml0aWFsT2JqZWN0TmFtZXMoKSkgeworCQkJCWluaXRpYWxPYmplY3RGaWVsZC5hZGQoZ2V0TGFiZWwob2JqZWN0TmFtZSkpOworCQkJfQorCisJCQlpZiAoaW5pdGlhbE9iamVjdEZpZWxkLmdldEl0ZW1Db3VudCgpID09IDEpIHsKKwkJCQlpbml0aWFsT2JqZWN0RmllbGQuc2VsZWN0KDApOworCQkJfQorCQkJaW5pdGlhbE9iamVjdEZpZWxkLmFkZE1vZGlmeUxpc3RlbmVyKHZhbGlkYXRvcik7CisKKwkJCUxhYmVsIGVuY29kaW5nTGFiZWwgPSBuZXcgTGFiZWwoY29tcG9zaXRlLCBTV1QuTEVGVCk7CisJCQl7CisJCQkJZW5jb2RpbmdMYWJlbC5zZXRUZXh0KEludGVydmVudGlvbnNFZGl0b3JQbHVnaW4uSU5TVEFOQ0UuZ2V0U3RyaW5nKCJfVUlfWE1MRW5jb2RpbmciKSk7CisKKwkJCQlHcmlkRGF0YSBkYXRhID0gbmV3IEdyaWREYXRhKCk7CisJCQkJZGF0YS5ob3Jpem9udGFsQWxpZ25tZW50ID0gR3JpZERhdGEuRklMTDsKKwkJCQllbmNvZGluZ0xhYmVsLnNldExheW91dERhdGEoZGF0YSk7CisJCQl9CisJCQllbmNvZGluZ0ZpZWxkID0gbmV3IENvbWJvKGNvbXBvc2l0ZSwgU1dULkJPUkRFUik7CisJCQl7CisJCQkJR3JpZERhdGEgZGF0YSA9IG5ldyBHcmlkRGF0YSgpOworCQkJCWRhdGEuaG9yaXpvbnRhbEFsaWdubWVudCA9IEdyaWREYXRhLkZJTEw7CisJCQkJZGF0YS5ncmFiRXhjZXNzSG9yaXpvbnRhbFNwYWNlID0gdHJ1ZTsKKwkJCQllbmNvZGluZ0ZpZWxkLnNldExheW91dERhdGEoZGF0YSk7CisJCQl9CisKKwkJCWZvciAoU3RyaW5nIGVuY29kaW5nIDogZ2V0RW5jb2RpbmdzKCkpIHsKKwkJCQllbmNvZGluZ0ZpZWxkLmFkZChlbmNvZGluZyk7CisJCQl9CisKKwkJCWVuY29kaW5nRmllbGQuc2VsZWN0KDApOworCQkJZW5jb2RpbmdGaWVsZC5hZGRNb2RpZnlMaXN0ZW5lcih2YWxpZGF0b3IpOworCisJCQlzZXRQYWdlQ29tcGxldGUodmFsaWRhdGVQYWdlKCkpOworCQkJc2V0Q29udHJvbChjb21wb3NpdGUpOworCQl9CisKKwkJLyoqCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlwcm90ZWN0ZWQgTW9kaWZ5TGlzdGVuZXIgdmFsaWRhdG9yID0KKwkJCW5ldyBNb2RpZnlMaXN0ZW5lcigpIHsKKwkJCQlwdWJsaWMgdm9pZCBtb2RpZnlUZXh0KE1vZGlmeUV2ZW50IGUpIHsKKwkJCQkJc2V0UGFnZUNvbXBsZXRlKHZhbGlkYXRlUGFnZSgpKTsKKwkJCQl9CisJCQl9OworCisJCS8qKgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJcHJvdGVjdGVkIGJvb2xlYW4gdmFsaWRhdGVQYWdlKCkgeworCQkJcmV0dXJuIGdldEluaXRpYWxPYmplY3ROYW1lKCkgIT0gbnVsbCAmJiBnZXRFbmNvZGluZ3MoKS5jb250YWlucyhlbmNvZGluZ0ZpZWxkLmdldFRleHQoKSk7CisJCX0KKworCQkvKioKKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUBPdmVycmlkZQorCQlwdWJsaWMgdm9pZCBzZXRWaXNpYmxlKGJvb2xlYW4gdmlzaWJsZSkgeworCQkJc3VwZXIuc2V0VmlzaWJsZSh2aXNpYmxlKTsKKwkJCWlmICh2aXNpYmxlKSB7CisJCQkJaWYgKGluaXRpYWxPYmplY3RGaWVsZC5nZXRJdGVtQ291bnQoKSA9PSAxKSB7CisJCQkJCWluaXRpYWxPYmplY3RGaWVsZC5jbGVhclNlbGVjdGlvbigpOworCQkJCQllbmNvZGluZ0ZpZWxkLnNldEZvY3VzKCk7CisJCQkJfQorCQkJCWVsc2UgeworCQkJCQllbmNvZGluZ0ZpZWxkLmNsZWFyU2VsZWN0aW9uKCk7CisJCQkJCWluaXRpYWxPYmplY3RGaWVsZC5zZXRGb2N1cygpOworCQkJCX0KKwkJCX0KKwkJfQorCisJCS8qKgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJcHVibGljIFN0cmluZyBnZXRJbml0aWFsT2JqZWN0TmFtZSgpIHsKKwkJCVN0cmluZyBsYWJlbCA9IGluaXRpYWxPYmplY3RGaWVsZC5nZXRUZXh0KCk7CisKKwkJCWZvciAoU3RyaW5nIG5hbWUgOiBnZXRJbml0aWFsT2JqZWN0TmFtZXMoKSkgeworCQkJCWlmIChnZXRMYWJlbChuYW1lKS5lcXVhbHMobGFiZWwpKSB7CisJCQkJCXJldHVybiBuYW1lOworCQkJCX0KKwkJCX0KKwkJCXJldHVybiBudWxsOworCQl9CisKKwkJLyoqCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlwdWJsaWMgU3RyaW5nIGdldEVuY29kaW5nKCkgeworCQkJcmV0dXJuIGVuY29kaW5nRmllbGQuZ2V0VGV4dCgpOworCQl9CisKKwkJLyoqCisJCSAqIFJldHVybnMgdGhlIGxhYmVsIGZvciB0aGUgc3BlY2lmaWVkIHR5cGUgbmFtZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCXByb3RlY3RlZCBTdHJpbmcgZ2V0TGFiZWwoU3RyaW5nIHR5cGVOYW1lKSB7CisJCQl0cnkgeworCQkJCXJldHVybiBJbnRlcnZlbnRpb25zRWRpdFBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoIl9VSV8iICsgdHlwZU5hbWUgKyAiX3R5cGUiKTsKKwkJCX0KKwkJCWNhdGNoKE1pc3NpbmdSZXNvdXJjZUV4Y2VwdGlvbiBtcmUpIHsKKwkJCQlJbnRlcnZlbnRpb25zRWRpdG9yUGx1Z2luLklOU1RBTkNFLmxvZyhtcmUpOworCQkJfQorCQkJcmV0dXJuIHR5cGVOYW1lOworCQl9CisKKwkJLyoqCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlwcm90ZWN0ZWQgQ29sbGVjdGlvbjxTdHJpbmc+IGdldEVuY29kaW5ncygpIHsKKwkJCWlmIChlbmNvZGluZ3MgPT0gbnVsbCkgeworCQkJCWVuY29kaW5ncyA9IG5ldyBBcnJheUxpc3Q8U3RyaW5nPigpOworCQkJCWZvciAoU3RyaW5nVG9rZW5pemVyIHN0cmluZ1Rva2VuaXplciA9IG5ldyBTdHJpbmdUb2tlbml6ZXIoSW50ZXJ2ZW50aW9uc0VkaXRvclBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoIl9VSV9YTUxFbmNvZGluZ0Nob2ljZXMiKSk7IHN0cmluZ1Rva2VuaXplci5oYXNNb3JlVG9rZW5zKCk7ICkgeworCQkJCQllbmNvZGluZ3MuYWRkKHN0cmluZ1Rva2VuaXplci5uZXh0VG9rZW4oKSk7CisJCQkJfQorCQkJfQorCQkJcmV0dXJuIGVuY29kaW5nczsKKwkJfQorCX0KKworCS8qKgorCSAqIFRoZSBmcmFtZXdvcmsgY2FsbHMgdGhpcyB0byBjcmVhdGUgdGhlIGNvbnRlbnRzIG9mIHRoZSB3aXphcmQuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGFkZFBhZ2VzKCkgeworCQkvLyBDcmVhdGUgYSBwYWdlLCBzZXQgdGhlIHRpdGxlLCBhbmQgdGhlIGluaXRpYWwgbW9kZWwgZmlsZSBuYW1lLgorCQkvLworCQluZXdGaWxlQ3JlYXRpb25QYWdlID0gbmV3IEludGVydmVudGlvbnNNb2RlbFdpemFyZE5ld0ZpbGVDcmVhdGlvblBhZ2UoIldoYXRldmVyIiwgc2VsZWN0aW9uKTsKKwkJbmV3RmlsZUNyZWF0aW9uUGFnZS5zZXRUaXRsZShJbnRlcnZlbnRpb25zRWRpdG9yUGx1Z2luLklOU1RBTkNFLmdldFN0cmluZygiX1VJX0ludGVydmVudGlvbnNNb2RlbFdpemFyZF9sYWJlbCIpKTsKKwkJbmV3RmlsZUNyZWF0aW9uUGFnZS5zZXREZXNjcmlwdGlvbihJbnRlcnZlbnRpb25zRWRpdG9yUGx1Z2luLklOU1RBTkNFLmdldFN0cmluZygiX1VJX0ludGVydmVudGlvbnNNb2RlbFdpemFyZF9kZXNjcmlwdGlvbiIpKTsKKwkJbmV3RmlsZUNyZWF0aW9uUGFnZS5zZXRGaWxlTmFtZShJbnRlcnZlbnRpb25zRWRpdG9yUGx1Z2luLklOU1RBTkNFLmdldFN0cmluZygiX1VJX0ludGVydmVudGlvbnNFZGl0b3JGaWxlbmFtZURlZmF1bHRCYXNlIikgKyAiLiIgKyBGSUxFX0VYVEVOU0lPTlMuZ2V0KDApKTsKKwkJYWRkUGFnZShuZXdGaWxlQ3JlYXRpb25QYWdlKTsKKworCQkvLyBUcnkgYW5kIGdldCB0aGUgcmVzb3VyY2Ugc2VsZWN0aW9uIHRvIGRldGVybWluZSBhIGN1cnJlbnQgZGlyZWN0b3J5IGZvciB0aGUgZmlsZSBkaWFsb2cuCisJCS8vCisJCWlmIChzZWxlY3Rpb24gIT0gbnVsbCAmJiAhc2VsZWN0aW9uLmlzRW1wdHkoKSkgeworCQkJLy8gR2V0IHRoZSByZXNvdXJjZS4uLgorCQkJLy8KKwkJCU9iamVjdCBzZWxlY3RlZEVsZW1lbnQgPSBzZWxlY3Rpb24uaXRlcmF0b3IoKS5uZXh0KCk7CisJCQlpZiAoc2VsZWN0ZWRFbGVtZW50IGluc3RhbmNlb2YgSVJlc291cmNlKSB7CisJCQkJLy8gR2V0IHRoZSByZXNvdXJjZSBwYXJlbnQsIGlmIGl0cyBhIGZpbGUuCisJCQkJLy8KKwkJCQlJUmVzb3VyY2Ugc2VsZWN0ZWRSZXNvdXJjZSA9IChJUmVzb3VyY2Upc2VsZWN0ZWRFbGVtZW50OworCQkJCWlmIChzZWxlY3RlZFJlc291cmNlLmdldFR5cGUoKSA9PSBJUmVzb3VyY2UuRklMRSkgeworCQkJCQlzZWxlY3RlZFJlc291cmNlID0gc2VsZWN0ZWRSZXNvdXJjZS5nZXRQYXJlbnQoKTsKKwkJCQl9CisKKwkJCQkvLyBUaGlzIGdpdmVzIHVzIGEgZGlyZWN0b3J5Li4uCisJCQkJLy8KKwkJCQlpZiAoc2VsZWN0ZWRSZXNvdXJjZSBpbnN0YW5jZW9mIElGb2xkZXIgfHwgc2VsZWN0ZWRSZXNvdXJjZSBpbnN0YW5jZW9mIElQcm9qZWN0KSB7CisJCQkJCS8vIFNldCB0aGlzIGZvciB0aGUgY29udGFpbmVyLgorCQkJCQkvLworCQkJCQluZXdGaWxlQ3JlYXRpb25QYWdlLnNldENvbnRhaW5lckZ1bGxQYXRoKHNlbGVjdGVkUmVzb3VyY2UuZ2V0RnVsbFBhdGgoKSk7CisKKwkJCQkJLy8gTWFrZSB1cCBhIHVuaXF1ZSBuZXcgbmFtZSBoZXJlLgorCQkJCQkvLworCQkJCQlTdHJpbmcgZGVmYXVsdE1vZGVsQmFzZUZpbGVuYW1lID0gSW50ZXJ2ZW50aW9uc0VkaXRvclBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoIl9VSV9JbnRlcnZlbnRpb25zRWRpdG9yRmlsZW5hbWVEZWZhdWx0QmFzZSIpOworCQkJCQlTdHJpbmcgZGVmYXVsdE1vZGVsRmlsZW5hbWVFeHRlbnNpb24gPSBGSUxFX0VYVEVOU0lPTlMuZ2V0KDApOworCQkJCQlTdHJpbmcgbW9kZWxGaWxlbmFtZSA9IGRlZmF1bHRNb2RlbEJhc2VGaWxlbmFtZSArICIuIiArIGRlZmF1bHRNb2RlbEZpbGVuYW1lRXh0ZW5zaW9uOworCQkJCQlmb3IgKGludCBpID0gMTsgKChJQ29udGFpbmVyKXNlbGVjdGVkUmVzb3VyY2UpLmZpbmRNZW1iZXIobW9kZWxGaWxlbmFtZSkgIT0gbnVsbDsgKytpKSB7CisJCQkJCQltb2RlbEZpbGVuYW1lID0gZGVmYXVsdE1vZGVsQmFzZUZpbGVuYW1lICsgaSArICIuIiArIGRlZmF1bHRNb2RlbEZpbGVuYW1lRXh0ZW5zaW9uOworCQkJCQl9CisJCQkJCW5ld0ZpbGVDcmVhdGlvblBhZ2Uuc2V0RmlsZU5hbWUobW9kZWxGaWxlbmFtZSk7CisJCQkJfQorCQkJfQorCQl9CisJCWluaXRpYWxPYmplY3RDcmVhdGlvblBhZ2UgPSBuZXcgSW50ZXJ2ZW50aW9uc01vZGVsV2l6YXJkSW5pdGlhbE9iamVjdENyZWF0aW9uUGFnZSgiV2hhdGV2ZXIyIik7CisJCWluaXRpYWxPYmplY3RDcmVhdGlvblBhZ2Uuc2V0VGl0bGUoSW50ZXJ2ZW50aW9uc0VkaXRvclBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoIl9VSV9JbnRlcnZlbnRpb25zTW9kZWxXaXphcmRfbGFiZWwiKSk7CisJCWluaXRpYWxPYmplY3RDcmVhdGlvblBhZ2Uuc2V0RGVzY3JpcHRpb24oSW50ZXJ2ZW50aW9uc0VkaXRvclBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoIl9VSV9XaXphcmRfaW5pdGlhbF9vYmplY3RfZGVzY3JpcHRpb24iKSk7CisJCWFkZFBhZ2UoaW5pdGlhbE9iamVjdENyZWF0aW9uUGFnZSk7CisJfQorCisJLyoqCisJICogR2V0IHRoZSBmaWxlIGZyb20gdGhlIHBhZ2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIElGaWxlIGdldE1vZGVsRmlsZSgpIHsKKwkJcmV0dXJuIG5ld0ZpbGVDcmVhdGlvblBhZ2UuZ2V0TW9kZWxGaWxlKCk7CisJfQorCit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmludGVydmVudGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvaW50ZXJ2ZW50aW9ucy9hZGFwdGVycy9Db250cm9sR3JhcGhHZW5lcmF0b3JQcm9wZXJ0eUVkaXRvckFkYXB0ZXIuamF2YSBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5pbnRlcnZlbnRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL2ludGVydmVudGlvbnMvYWRhcHRlcnMvQ29udHJvbEdyYXBoR2VuZXJhdG9yUHJvcGVydHlFZGl0b3JBZGFwdGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTFjZjFiZgotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5pbnRlcnZlbnRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL2ludGVydmVudGlvbnMvYWRhcHRlcnMvQ29udHJvbEdyYXBoR2VuZXJhdG9yUHJvcGVydHlFZGl0b3JBZGFwdGVyLmphdmEKQEAgLTAsMCArMSwzMiBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnVpLmludGVydmVudGlvbnMuYWRhcHRlcnM7CisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5BZGFwdGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhnZW5lcmF0b3JzLkdyYXBoR2VuZXJhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uaW50ZXJ2ZW50aW9ucy5wcmVzZW50YXRpb24uQ29udHJvbEdyYXBoR2VuZXJhdG9yUHJvcGVydHlFZGl0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS51aS5ncmFwaGdlbmVyYXRvcnMuYWRhcHRlcnMuZ3JhcGhnZW5lcmF0b3Jwcm9wZXJ0eWVkaXRvci5HcmFwaEdlbmVyYXRvclByb3BlcnR5RWRpdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udWkuZ3JhcGhnZW5lcmF0b3JzLmFkYXB0ZXJzLmdyYXBoZ2VuZXJhdG9ycHJvcGVydHllZGl0b3IuR3JhcGhHZW5lcmF0b3JQcm9wZXJ0eUVkaXRvckFkYXB0ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS51aS5ncmFwaGdlbmVyYXRvcnMud2l6YXJkcy5HcmFwaEdlbmVyYXRvclByb3BlcnR5Q29tcG9zaXRlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuTW9kaWZ5TGlzdGVuZXI7CisKK3B1YmxpYyBjbGFzcyBDb250cm9sR3JhcGhHZW5lcmF0b3JQcm9wZXJ0eUVkaXRvckFkYXB0ZXIgZXh0ZW5kcyBHcmFwaEdlbmVyYXRvclByb3BlcnR5RWRpdG9yQWRhcHRlcgorCQlpbXBsZW1lbnRzIEFkYXB0ZXIgeworCisJcHVibGljIEdyYXBoR2VuZXJhdG9yUHJvcGVydHlFZGl0b3IgY3JlYXRlR3JhcGhHZW5lcmF0b3JQcm9wZXJ0eUVkaXRvcigKKwkJCWZpbmFsIEdyYXBoR2VuZXJhdG9yUHJvcGVydHlDb21wb3NpdGUgZ3JhcGhHZW5lcmF0b3JQcm9wZXJ0eUNvbXBvc2l0ZSwKKwkJCWZpbmFsIGludCBzdHlsZSwgZmluYWwgTW9kaWZ5TGlzdGVuZXIgcHJvamVjdFZhbGlkYXRvciwgSVByb2plY3QgcHJvamVjdCkgeworCQlyZXR1cm4gbmV3IENvbnRyb2xHcmFwaEdlbmVyYXRvclByb3BlcnR5RWRpdG9yKAorCQkJCWdyYXBoR2VuZXJhdG9yUHJvcGVydHlDb21wb3NpdGUsIHN0eWxlLAorCQkJCShHcmFwaEdlbmVyYXRvcikgZ2V0VGFyZ2V0KCksIHByb2plY3RWYWxpZGF0b3IsIHByb2plY3QpOworCX0gLy8gY3JlYXRlR3JhcGhHZW5lcmF0b3JQcm9wZXJ0eUVkaXRvcgorCQorfSAvLyBHcmFwaEdlbmVyYXRvclByb3BlcnR5RWRpdG9yQWRhcHRlcgpkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmludGVydmVudGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvaW50ZXJ2ZW50aW9ucy9hZGFwdGVycy9Db250cm9sR3JhcGhHZW5lcmF0b3JQcm9wZXJ0eUVkaXRvckFkYXB0ZXJGYWN0b3J5LmphdmEgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuaW50ZXJ2ZW50aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9pbnRlcnZlbnRpb25zL2FkYXB0ZXJzL0NvbnRyb2xHcmFwaEdlbmVyYXRvclByb3BlcnR5RWRpdG9yQWRhcHRlckZhY3RvcnkuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NmE2MWM5Ci0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmludGVydmVudGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvaW50ZXJ2ZW50aW9ucy9hZGFwdGVycy9Db250cm9sR3JhcGhHZW5lcmF0b3JQcm9wZXJ0eUVkaXRvckFkYXB0ZXJGYWN0b3J5LmphdmEKQEAgLTAsMCArMSwzOSBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnVpLmludGVydmVudGlvbnMuYWRhcHRlcnM7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LkFkYXB0ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcnZlbnRpb25zLnV0aWwuSW50ZXJ2ZW50aW9uc0FkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udWkuZ3JhcGhnZW5lcmF0b3JzLmFkYXB0ZXJzLmdyYXBoZ2VuZXJhdG9ycHJvcGVydHllZGl0b3IuR3JhcGhHZW5lcmF0b3JQcm9wZXJ0eUVkaXRvckFkYXB0ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS51aS5ncmFwaGdlbmVyYXRvcnMuYWRhcHRlcnMuZ3JhcGhnZW5lcmF0b3Jwcm9wZXJ0eWVkaXRvci5JR3JhcGhHZW5lcmF0b3JQcm9wZXJ0eUVkaXRvckFkYXB0ZXJGYWN0b3J5OworCisKK3B1YmxpYyBjbGFzcyBDb250cm9sR3JhcGhHZW5lcmF0b3JQcm9wZXJ0eUVkaXRvckFkYXB0ZXJGYWN0b3J5IGV4dGVuZHMKKwkJSW50ZXJ2ZW50aW9uc0FkYXB0ZXJGYWN0b3J5IGltcGxlbWVudHMKKwkJSUdyYXBoR2VuZXJhdG9yUHJvcGVydHlFZGl0b3JBZGFwdGVyRmFjdG9yeSB7CisKKwlwdWJsaWMgQ29udHJvbEdyYXBoR2VuZXJhdG9yUHJvcGVydHlFZGl0b3JBZGFwdGVyRmFjdG9yeSgpIHsKKwkJc3VwZXIoKTsKKwkJQ29udHJvbEdyYXBoR2VuZXJhdG9yUHJvcGVydHlFZGl0b3JBZGFwdGVyRmFjdG9yeS5JTlNUQU5DRQorCQkJCS5hZGRBZGFwdGVyRmFjdG9yeSh0aGlzKTsKKwl9CisKKwlAT3ZlcnJpZGUKKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVDb250cm9sR3JhcGhHZW5lcmF0b3JBZGFwdGVyKCkgeworCQlyZXR1cm4gbmV3IENvbnRyb2xHcmFwaEdlbmVyYXRvclByb3BlcnR5RWRpdG9yQWRhcHRlcigpOworCX0KKworCXB1YmxpYyBib29sZWFuIGlzRmFjdG9yeUZvclR5cGUoT2JqZWN0IHR5cGUpIHsKKwkJcmV0dXJuIHR5cGUgPT0gR3JhcGhHZW5lcmF0b3JQcm9wZXJ0eUVkaXRvckFkYXB0ZXIuY2xhc3MKKwkJCQl8fCBzdXBlci5pc0ZhY3RvcnlGb3JUeXBlKHR5cGUpOworCX0KKworfSAvLyBTdGFuZGFyZEdyYXBoR2VuZXJhdG9yUHJvcGVydHlFZGl0b3JBZGFwdGVyRmFjdG9yeQpkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmludGVydmVudGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvaW50ZXJ2ZW50aW9ucy9hZGFwdGVycy9Db250cm9sUHJvcGVydHlTdHJpbmdQcm92aWRlckFkYXB0ZXJGYWN0b3J5LmphdmEgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuaW50ZXJ2ZW50aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9pbnRlcnZlbnRpb25zL2FkYXB0ZXJzL0NvbnRyb2xQcm9wZXJ0eVN0cmluZ1Byb3ZpZGVyQWRhcHRlckZhY3RvcnkuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yODgyYWQ0Ci0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmludGVydmVudGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvaW50ZXJ2ZW50aW9ucy9hZGFwdGVycy9Db250cm9sUHJvcGVydHlTdHJpbmdQcm92aWRlckFkYXB0ZXJGYWN0b3J5LmphdmEKQEAgLTAsMCArMSwxMTQgQEAKKy8vIFN0YW5kYXJkUHJvcGVydHlTdHJpbmdQcm92aWRlckFkYXB0ZXJGYWN0b3J5LmphdmEKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS51aS5pbnRlcnZlbnRpb25zLmFkYXB0ZXJzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTEgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuQWRhcHRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRVN0cnVjdHVyYWxGZWF0dXJlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtUHJvcGVydHlEZXNjcmlwdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uaW50ZXJ2ZW50aW9ucy51dGlsLkludGVydmVudGlvbnNBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnVpLmFkYXB0ZXJzLnByb3BlcnR5c3RyaW5ncy5Qcm9wZXJ0eVN0cmluZ1Byb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udWkuYWRhcHRlcnMucHJvcGVydHlzdHJpbmdzLlByb3BlcnR5U3RyaW5nUHJvdmlkZXJBZGFwdGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udWkuYWRhcHRlcnMucHJvcGVydHlzdHJpbmdzLlByb3BlcnR5U3RyaW5nUHJvdmlkZXJBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnVpLmludGVydmVudGlvbnMubmxzLk1lc3NhZ2VzOworCisvKioKKyAqIFRoaXMgY2xhc3MgaXMgdXNlZCB0byBOTFMnZCBzdHJpbmdzIGZvciBHcmFwaCBHZW5lcmF0b3IgcHJvcGVydGllcy4gCisgKi8KK3B1YmxpYyBjbGFzcyBDb250cm9sUHJvcGVydHlTdHJpbmdQcm92aWRlckFkYXB0ZXJGYWN0b3J5IGV4dGVuZHMKKwkJSW50ZXJ2ZW50aW9uc0FkYXB0ZXJGYWN0b3J5IGltcGxlbWVudHMgUHJvcGVydHlTdHJpbmdQcm92aWRlckFkYXB0ZXJGYWN0b3J5IHsKKworCQorCVByb3BlcnR5U3RyaW5nUHJvdmlkZXJBZGFwdGVyIGFkYXB0ZXIgPSBudWxsOworCisJLyoqCisJICogRGVmYXVsdCBDb25zdHJ1Y3RvcgorCSAqLworCXB1YmxpYyBDb250cm9sUHJvcGVydHlTdHJpbmdQcm92aWRlckFkYXB0ZXJGYWN0b3J5KCkgeworCQlzdXBlcigpOworCQlQcm9wZXJ0eVN0cmluZ1Byb3ZpZGVyQWRhcHRlckZhY3RvcnkuSU5TVEFOQ0UuYWRkQWRhcHRlckZhY3RvcnkodGhpcyk7CisJfQorCQorCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuaW1wbC5BZGFwdGVyRmFjdG9yeUltcGwjaXNGYWN0b3J5Rm9yVHlwZShqYXZhLmxhbmcuT2JqZWN0KQorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBib29sZWFuIGlzRmFjdG9yeUZvclR5cGUoT2JqZWN0IHR5cGUpIHsKKwkJcmV0dXJuICBzdXBlci5pc0ZhY3RvcnlGb3JUeXBlKHR5cGUpIHx8IHR5cGUgPT0gUHJvcGVydHlTdHJpbmdQcm92aWRlci5jbGFzczsKKwl9CisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC51dGlsLlN0YW5kYXJkQWRhcHRlckZhY3RvcnkjY3JlYXRlRGlzZWFzZU1vZGVsQWRhcHRlcigpCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlQ29udHJvbEdyYXBoR2VuZXJhdG9yQWRhcHRlcigpIHsKKwkJLy8gSGF2ZSB3ZSBjcmVhdGVkIG9uZSBiZWZvcmU/CisJCWlmIChhZGFwdGVyID09IG51bGwpIHsKKwkJCS8vIE5vCisJCQlhZGFwdGVyID0gbmV3IENvbnRyb2xQcm9wZXJ0eVN0cmluZ1Byb3ZpZGVyQWRhcHRlcigpOworCQl9IC8vIGlmIHdlIGRpZG4ndCBjcmVhdGUgb25lIGJlZm9yZQorCQlyZXR1cm4gYWRhcHRlcjsKKwl9IC8vIGNyZWF0ZURpc2Vhc2VNb2RlbEFkYXB0ZXIKKwkKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC51dGlsLlN0YW5kYXJkQWRhcHRlckZhY3RvcnkjY3JlYXRlRGlzZWFzZU1vZGVsQWRhcHRlcigpCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlSW50ZXJ2ZW50aW9uTGFiZWxBZGFwdGVyKCkgeworCQkvLyBIYXZlIHdlIGNyZWF0ZWQgb25lIGJlZm9yZT8KKwkJaWYgKGFkYXB0ZXIgPT0gbnVsbCkgeworCQkJLy8gTm8KKwkJCWFkYXB0ZXIgPSBuZXcgQ29udHJvbFByb3BlcnR5U3RyaW5nUHJvdmlkZXJBZGFwdGVyKCk7CisJCX0gLy8gaWYgd2UgZGlkbid0IGNyZWF0ZSBvbmUgYmVmb3JlCisJCXJldHVybiBhZGFwdGVyOworCX0gLy8gY3JlYXRlRGlzZWFzZU1vZGVsQWRhcHRlcgorCQorCXB1YmxpYyBzdGF0aWMgY2xhc3MgQ29udHJvbFByb3BlcnR5U3RyaW5nUHJvdmlkZXJBZGFwdGVyIGV4dGVuZHMKKwkJCVByb3BlcnR5U3RyaW5nUHJvdmlkZXJBZGFwdGVyIHsKKworCQkvKioKKwkJICogQHBhcmFtIGRlc2NyaXB0b3IKKwkJICogQHJldHVybiB0aGUgTkxTJ2QgbmFtZSBvZiB0aGUgcHJvcGVydHkgdG8gZGlzcGxheSB0byB0aGUgdXNlcgorCQkgKi8KKwkJcHVibGljIFN0cmluZyBnZXRQcm9wZXJ0eU5hbWUoSUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IgZGVzY3JpcHRvcikgeworCQkJcmV0dXJuIE1lc3NhZ2VzCisJCQkJCS5nZXRTdHJpbmcoKChFU3RydWN0dXJhbEZlYXR1cmUpIGRlc2NyaXB0b3IKKwkJCQkJCQkuZ2V0RmVhdHVyZShudWxsKSkuZ2V0TmFtZSgpKTsKKwkJfSAvLyBnZXRQcm9wZXJ0eU5hbWUKKworCQkvKioKKwkJICogQHBhcmFtIGRlc2NyaXB0b3IKKwkJICogQHJldHVybiB0aGUgTkxTJ2QgdG9vbCB0aXAgdGV4dCB0aGF0IGRlc2NyaWJlcyB0aGUgcHJvcGVydHkKKwkJICovCisJCXB1YmxpYyBTdHJpbmcgZ2V0UHJvcGVydHlUb29sVGlwKAorCQkJCUlJdGVtUHJvcGVydHlEZXNjcmlwdG9yIGRlc2NyaXB0b3IpIHsKKwkJCWZpbmFsIEVTdHJ1Y3R1cmFsRmVhdHVyZSBmZWF0dXJlID0gKEVTdHJ1Y3R1cmFsRmVhdHVyZSkgZGVzY3JpcHRvcgorCQkJCQkuZ2V0RmVhdHVyZShudWxsKTsKKwkJCXJldHVybiBNZXNzYWdlcy5nZXRTdHJpbmcoZmVhdHVyZS5nZXROYW1lKCkKKwkJCQkJKyBUVF9TVUZGSVgpOworCQl9IC8vIGdldFByb3BlcnR5VG9vbFRpcAorCisJCS8qKgorCQkgKiBAcGFyYW0gZGVzY3JpcHRvcgorCQkgKiBAcmV0dXJuIHRoZSBOTFMnZCB0ZXh0IHRoYXQgcmVwcmVzZW50cyB0aGUgdW5pdHMgb2YgdGhlCisJCSAqICAgICAgICAgcHJvcGVydHkKKwkJICovCisJCXB1YmxpYyBTdHJpbmcgZ2V0UHJvcGVydHlVbml0cygKKwkJCQlJSXRlbVByb3BlcnR5RGVzY3JpcHRvciBkZXNjcmlwdG9yKSB7CisJCQlmaW5hbCBFU3RydWN0dXJhbEZlYXR1cmUgZmVhdHVyZSA9IChFU3RydWN0dXJhbEZlYXR1cmUpIGRlc2NyaXB0b3IKKwkJCQkJLmdldEZlYXR1cmUobnVsbCk7CisJCQlyZXR1cm4gTWVzc2FnZXMuZ2V0U3RyaW5nKGZlYXR1cmUuZ2V0TmFtZSgpCisJCQkJCSsgVU5JVF9TVUZGSVgpOworCQl9IC8vIGdldFByb3BlcnR5VW5pdHMKKworCX0gCit9IApkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmludGVydmVudGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvaW50ZXJ2ZW50aW9ucy9ubHMvTWVzc2FnZXMuamF2YSBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5pbnRlcnZlbnRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL2ludGVydmVudGlvbnMvbmxzL01lc3NhZ2VzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2NmNDNiNAotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5pbnRlcnZlbnRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL2ludGVydmVudGlvbnMvbmxzL01lc3NhZ2VzLmphdmEKQEAgLTAsMCArMSw0NyBAQAorLy8gTWVzc2FnZXMuamF2YQorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnVpLmludGVydmVudGlvbnMubmxzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDExIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGphdmEudXRpbC5NaXNzaW5nUmVzb3VyY2VFeGNlcHRpb247CitpbXBvcnQgamF2YS51dGlsLlJlc291cmNlQnVuZGxlOworCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLkNvbnN0YW50czsKKworCisvKioKKyAqIFRoaXMgY2xhc3MgaXMgdGhlIFJlc291cmNlIEJ1bmRsZSBmb3IgdGhpcyBwYWNrYWdlLgorICovCitwdWJsaWMgY2xhc3MgTWVzc2FnZXMgeworCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBCVU5ETEVfTkFNRSA9IENvbnN0YW50cy5JRF9ST09UCisJCQkrICIudWkuaW50ZXJ2ZW50aW9ucy5ubHMubWVzc2FnZXMiOyAvLyROT04tTkxTLTEkCisKKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBSZXNvdXJjZUJ1bmRsZSBSRVNPVVJDRV9CVU5ETEUgPSBSZXNvdXJjZUJ1bmRsZQorCQkJLmdldEJ1bmRsZShCVU5ETEVfTkFNRSk7CisKKwlwcml2YXRlIE1lc3NhZ2VzKCkgeworCQkvLyBlbXB0eQorCX0KKworCS8qKgorCSAqIEBwYXJhbSBrZXkKKwkgKiAgICAgICAgICAgIHRoZSBrZXkgZm9yIHRoZSBtZXNzYWdlCisJICogQHJldHVybiB0aGUgc3RyaW5nIHRoYXQgbWF0Y2hlcyB0aGUga2V5CisJICovCisJcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0U3RyaW5nKFN0cmluZyBrZXkpIHsKKwkJdHJ5IHsKKwkJCXJldHVybiBSRVNPVVJDRV9CVU5ETEUuZ2V0U3RyaW5nKGtleSk7CisJCX0gY2F0Y2ggKE1pc3NpbmdSZXNvdXJjZUV4Y2VwdGlvbiBlKSB7CisJCQlyZXR1cm4gJyEnICsga2V5ICsgJyEnOworCQl9CisJfSAvLyBnZXRTdHJpbmcKK30gLy8gTWVzc2FnZXMKZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5pbnRlcnZlbnRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL2ludGVydmVudGlvbnMvbmxzL21lc3NhZ2VzLnByb3BlcnRpZXMgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuaW50ZXJ2ZW50aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9pbnRlcnZlbnRpb25zL25scy9tZXNzYWdlcy5wcm9wZXJ0aWVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQwN2UzNDIKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuaW50ZXJ2ZW50aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9pbnRlcnZlbnRpb25zL25scy9tZXNzYWdlcy5wcm9wZXJ0aWVzCkBAIC0wLDAgKzEsNDkgQEAKKyMgTWVzc2FnZXMucHJvcGVydGllcworIworIy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjICogQ29weXJpZ2h0IChjKSAyMDExIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorIyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyMgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyMgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorIyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisjICoKKyMgKiBDb250cmlidXRvcnM6CisjICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorIyAqCisKKworIyBDb250cm9sIEdyYXBoIEdlbmVyYXRvcgordmFjY2luYXRpb25GcmFjdGlvbiA9IEZyYWN0aW9uIHZhY2NpbmF0ZWQKK3ZhY2NpbmF0aW9uRnJhY3Rpb25UVCA9IFRoZSBmcmFjdGlvbiBvZiB0aGUgcG9wdWxhdGlvbiB2YWNjaW5hdGVkIHBlciB0aW1lIHBlcmlvZAordmFjY2luYXRpb25GcmFjdGlvblVOSVQgPSBQTS9UUAorCitpc29sYXRpb25GcmFjdGlvbiA9IEZyYWN0aW9uIGlzb2xhdGVkCitpc29sYXRpb25GcmFjdGlvblRUID0gVGhlIGZyYWN0aW9uIG9mIHRoZSBwb3B1bGF0aW9uIGlzb2xhdGVkIHBlciB0aW1lIHBlcmlvZAoraXNvbGF0aW9uRnJhY3Rpb25VTklUID0gUE0vVFAKKworcG9wdWxhdGlvbklkZW50aWZpZXIgPSBDb250cm9sbGVkIHBvcHVsYXRpb24KK3BvcHVsYXRpb25JZGVudGlmaWVyVFQgPSBUaGUgaWRlbnRpZmllciBvZiB0aGUgcG9wdWxhdGlvbiBiZWluZyBjb250cm9sbGVkCitwb3B1bGF0aW9uSWRlbnRpZmllclVOSVQgPSAKKworbG9jYXRpb24gPSBMb2NhdGlvbgorbG9jYXRpb25UVCA9IFNwZWNpZnkgdGhlIGxvY2F0aW9uIHRvIGNvbnRyb2wuIENvbnRhaW5lZCByZWdpb25zIHdpbGwgYWxzbyBiZSBjb250cm9sbGVkLgorbG9jYXRpb25VTklUID0gCisKK3ZhY2NpbmF0aW9ucyA9IFZhY2NpbmF0aW9ucwordmFjY2luYXRpb25zVFQgPSBUaGUgbnVtYmVyIG9mIHZhY2NpbmF0aW9ucyBwZXIgdGltZSBwZXJpb2QKK3ZhY2NpbmF0aW9uc1VOSVQgPSB2YWMvVFAKKworaXNvbGF0aW9ucyA9IElzb2xhdGlvbnMKK2lzb2xhdGlvbnNUVCA9IFRoZSBudW1iZXIgb2YgaXNvbGF0aW9ucyBwZXIgdGltZSBwZXJpb2QKK2lzb2xhdGlvbnNVTklUID0gaXNvL1RQCisKKyAKKyMgRXJyb3IgbWVzc2FnZXMKK0NHR1dpekVycjEgPSBQbGVhc2Ugc3BlY2lmeSB0aGUgaXNvbGF0ZWQgZnJhY3Rpb24KK0NHR1dpekVycjIgPSBJc29sYXRlZCBmcmFjdGlvbiBtdXN0IGJlIGJldHdlZW4gMCBhbmQgMQorQ0dHV2l6RXJyMyA9IFBsZWFzZSBzcGVjaWZ5IGFuIGlzb2xhdGVkIGZyYWN0aW9uCitDR0dXaXpFcnI0ID0gSXNvbGF0ZWQgZnJhY3Rpb24gbXVzdCBiZSBiZXR3ZWVuIDAgYW5kIDEKK0NHR1dpekVycjUgPSBUaGUgcG9wdWxhdGlvbiBpZGVudGlmaWVyIG11c3QgYmUgc3BlY2lmaWVkCisKKworCmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuaW50ZXJ2ZW50aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9pbnRlcnZlbnRpb25zL25scy9tZXNzYWdlc19kZS5wcm9wZXJ0aWVzIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmludGVydmVudGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvaW50ZXJ2ZW50aW9ucy9ubHMvbWVzc2FnZXNfZGUucHJvcGVydGllcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYmZlM2UzCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmludGVydmVudGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvaW50ZXJ2ZW50aW9ucy9ubHMvbWVzc2FnZXNfZGUucHJvcGVydGllcwpAQCAtMCwwICsxLDQ5IEBACisjIE1lc3NhZ2VzLnByb3BlcnRpZXMKKyMKKyMvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIyAqIENvcHlyaWdodCAoYykgMjAxMSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyMgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisjICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisjICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyMgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorIyAqCisjICogQ29udHJpYnV0b3JzOgorIyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyMgKgorCisKKyMgQ29udHJvbCBHcmFwaCBHZW5lcmF0b3IKK3ZhY2NpbmF0aW9uRnJhY3Rpb249RnJhY3Rpb24gdmFjY2luYXRlZAordmFjY2luYXRpb25GcmFjdGlvblRUPVRoZSBmcmFjdGlvbiBvZiB0aGUgcG9wdWxhdGlvbiB2YWNjaW5hdGVkIHBlciB0aW1lIHBlcmlvZAordmFjY2luYXRpb25GcmFjdGlvblVOSVQ9UE0vVFAKKworaXNvbGF0aW9uRnJhY3Rpb249RnJhY3Rpb24gaXNvbGF0ZWQKK2lzb2xhdGlvbkZyYWN0aW9uVFQ9VGhlIGZyYWN0aW9uIG9mIHRoZSBwb3B1bGF0aW9uIGlzb2xhdGVkIHBlciB0aW1lIHBlcmlvZAoraXNvbGF0aW9uRnJhY3Rpb25VTklUPVBNL1RQCisKK3BvcHVsYXRpb25JZGVudGlmaWVyPUNvbnRyb2xsZWQgcG9wdWxhdGlvbgorcG9wdWxhdGlvbklkZW50aWZpZXJUVD1UaGUgaWRlbnRpZmllciBvZiB0aGUgcG9wdWxhdGlvbiBiZWluZyBjb250cm9sbGVkCitwb3B1bGF0aW9uSWRlbnRpZmllclVOSVQ9CisKK2xvY2F0aW9uPU9ydAorbG9jYXRpb25UVD1TcGVjaWZ5IHRoZSBsb2NhdGlvbiB0byBjb250cm9sLiBDb250YWluZWQgcmVnaW9ucyB3aWxsIGFsc28gYmUgY29udHJvbGxlZC4KK2xvY2F0aW9uVU5JVD0KKwordmFjY2luYXRpb25zPVZhY2NpbmF0aW9ucwordmFjY2luYXRpb25zVFQ9VGhlIG51bWJlciBvZiB2YWNjaW5hdGlvbnMgcGVyIHRpbWUgcGVyaW9kCit2YWNjaW5hdGlvbnNVTklUPXZhYy9UUAorCitpc29sYXRpb25zPUlzb2xhdGlvbnMKK2lzb2xhdGlvbnNUVD1UaGUgbnVtYmVyIG9mIGlzb2xhdGlvbnMgcGVyIHRpbWUgcGVyaW9kCitpc29sYXRpb25zVU5JVD1pc28vVFAKKworIAorIyBFcnJvciBtZXNzYWdlcworQ0dHV2l6RXJyMT1QbGVhc2Ugc3BlY2lmeSB0aGUgaXNvbGF0ZWQgZnJhY3Rpb24KK0NHR1dpekVycjI9SXNvbGF0ZWQgZnJhY3Rpb24gbXVzdCBiZSBiZXR3ZWVuIDAgYW5kIDEKK0NHR1dpekVycjM9UGxlYXNlIHNwZWNpZnkgYW4gaXNvbGF0ZWQgZnJhY3Rpb24KK0NHR1dpekVycjQ9SXNvbGF0ZWQgZnJhY3Rpb24gbXVzdCBiZSBiZXR3ZWVuIDAgYW5kIDEKK0NHR1dpekVycjU9VGhlIHBvcHVsYXRpb24gaWRlbnRpZmllciBtdXN0IGJlIHNwZWNpZmllZAorCisKKwpkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmludGVydmVudGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvaW50ZXJ2ZW50aW9ucy9ubHMvbWVzc2FnZXNfa3IucHJvcGVydGllcyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5pbnRlcnZlbnRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL2ludGVydmVudGlvbnMvbmxzL21lc3NhZ2VzX2tyLnByb3BlcnRpZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTU2NjM2YQotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5pbnRlcnZlbnRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL2ludGVydmVudGlvbnMvbmxzL21lc3NhZ2VzX2tyLnByb3BlcnRpZXMKQEAgLTAsMCArMSw0OSBAQAorIyBNZXNzYWdlcy5wcm9wZXJ0aWVzCisjCisjLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyMgKiBDb3B5cmlnaHQgKGMpIDIwMTEgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisjICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworIyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorIyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisjICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyMgKgorIyAqIENvbnRyaWJ1dG9yczoKKyMgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisjICoKKworCisjIENvbnRyb2wgR3JhcGggR2VuZXJhdG9yCit2YWNjaW5hdGlvbkZyYWN0aW9uPUZyYWN0aW9uIHZhY2NpbmF0ZWQKK3ZhY2NpbmF0aW9uRnJhY3Rpb25UVD1UaGUgZnJhY3Rpb24gb2YgdGhlIHBvcHVsYXRpb24gdmFjY2luYXRlZCBwZXIgdGltZSBwZXJpb2QKK3ZhY2NpbmF0aW9uRnJhY3Rpb25VTklUPVBNL1RQCisKK2lzb2xhdGlvbkZyYWN0aW9uPUZyYWN0aW9uIGlzb2xhdGVkCitpc29sYXRpb25GcmFjdGlvblRUPVRoZSBmcmFjdGlvbiBvZiB0aGUgcG9wdWxhdGlvbiBpc29sYXRlZCBwZXIgdGltZSBwZXJpb2QKK2lzb2xhdGlvbkZyYWN0aW9uVU5JVD1QTS9UUAorCitwb3B1bGF0aW9uSWRlbnRpZmllcj1Db250cm9sbGVkIHBvcHVsYXRpb24KK3BvcHVsYXRpb25JZGVudGlmaWVyVFQ9VGhlIGlkZW50aWZpZXIgb2YgdGhlIHBvcHVsYXRpb24gYmVpbmcgY29udHJvbGxlZAorcG9wdWxhdGlvbklkZW50aWZpZXJVTklUPQorCitsb2NhdGlvbj1cdWM3MDRcdWNlNTgKK2xvY2F0aW9uVFQ9U3BlY2lmeSB0aGUgbG9jYXRpb24gdG8gY29udHJvbC4gQ29udGFpbmVkIHJlZ2lvbnMgd2lsbCBhbHNvIGJlIGNvbnRyb2xsZWQuCitsb2NhdGlvblVOSVQ9CisKK3ZhY2NpbmF0aW9ucz1WYWNjaW5hdGlvbnMKK3ZhY2NpbmF0aW9uc1RUPVRoZSBudW1iZXIgb2YgdmFjY2luYXRpb25zIHBlciB0aW1lIHBlcmlvZAordmFjY2luYXRpb25zVU5JVD12YWMvVFAKKworaXNvbGF0aW9ucz1Jc29sYXRpb25zCitpc29sYXRpb25zVFQ9VGhlIG51bWJlciBvZiBpc29sYXRpb25zIHBlciB0aW1lIHBlcmlvZAoraXNvbGF0aW9uc1VOSVQ9aXNvL1RQCisKKyAKKyMgRXJyb3IgbWVzc2FnZXMKK0NHR1dpekVycjE9UGxlYXNlIHNwZWNpZnkgdGhlIGlzb2xhdGVkIGZyYWN0aW9uCitDR0dXaXpFcnIyPUlzb2xhdGVkIGZyYWN0aW9uIG11c3QgYmUgYmV0d2VlbiAwIGFuZCAxCitDR0dXaXpFcnIzPVBsZWFzZSBzcGVjaWZ5IGFuIGlzb2xhdGVkIGZyYWN0aW9uCitDR0dXaXpFcnI0PUlzb2xhdGVkIGZyYWN0aW9uIG11c3QgYmUgYmV0d2VlbiAwIGFuZCAxCitDR0dXaXpFcnI1PVRoZSBwb3B1bGF0aW9uIGlkZW50aWZpZXIgbXVzdCBiZSBzcGVjaWZpZWQKKworCisKZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5pbnRlcnZlbnRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL2ludGVydmVudGlvbnMvbmxzL21lc3NhZ2VzX3poLnByb3BlcnRpZXMgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuaW50ZXJ2ZW50aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9pbnRlcnZlbnRpb25zL25scy9tZXNzYWdlc196aC5wcm9wZXJ0aWVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIyYzgzMGMKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuaW50ZXJ2ZW50aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9pbnRlcnZlbnRpb25zL25scy9tZXNzYWdlc196aC5wcm9wZXJ0aWVzCkBAIC0wLDAgKzEsNDkgQEAKKyMgTWVzc2FnZXMucHJvcGVydGllcworIworIy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjICogQ29weXJpZ2h0IChjKSAyMDExIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorIyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyMgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyMgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorIyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisjICoKKyMgKiBDb250cmlidXRvcnM6CisjICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorIyAqCisKKworIyBDb250cm9sIEdyYXBoIEdlbmVyYXRvcgordmFjY2luYXRpb25GcmFjdGlvbj1GcmFjdGlvbiB2YWNjaW5hdGVkCit2YWNjaW5hdGlvbkZyYWN0aW9uVFQ9VGhlIGZyYWN0aW9uIG9mIHRoZSBwb3B1bGF0aW9uIHZhY2NpbmF0ZWQgcGVyIHRpbWUgcGVyaW9kCit2YWNjaW5hdGlvbkZyYWN0aW9uVU5JVD1QTS9UUAorCitpc29sYXRpb25GcmFjdGlvbj1GcmFjdGlvbiBpc29sYXRlZAoraXNvbGF0aW9uRnJhY3Rpb25UVD1UaGUgZnJhY3Rpb24gb2YgdGhlIHBvcHVsYXRpb24gaXNvbGF0ZWQgcGVyIHRpbWUgcGVyaW9kCitpc29sYXRpb25GcmFjdGlvblVOSVQ9UE0vVFAKKworcG9wdWxhdGlvbklkZW50aWZpZXI9Q29udHJvbGxlZCBwb3B1bGF0aW9uCitwb3B1bGF0aW9uSWRlbnRpZmllclRUPVRoZSBpZGVudGlmaWVyIG9mIHRoZSBwb3B1bGF0aW9uIGJlaW5nIGNvbnRyb2xsZWQKK3BvcHVsYXRpb25JZGVudGlmaWVyVU5JVD0KKworbG9jYXRpb249XHU1NzMwXHU3MGI5Citsb2NhdGlvblRUPVNwZWNpZnkgdGhlIGxvY2F0aW9uIHRvIGNvbnRyb2wuIENvbnRhaW5lZCByZWdpb25zIHdpbGwgYWxzbyBiZSBjb250cm9sbGVkLgorbG9jYXRpb25VTklUPQorCit2YWNjaW5hdGlvbnM9VmFjY2luYXRpb25zCit2YWNjaW5hdGlvbnNUVD1UaGUgbnVtYmVyIG9mIHZhY2NpbmF0aW9ucyBwZXIgdGltZSBwZXJpb2QKK3ZhY2NpbmF0aW9uc1VOSVQ9dmFjL1RQCisKK2lzb2xhdGlvbnM9SXNvbGF0aW9ucworaXNvbGF0aW9uc1RUPVRoZSBudW1iZXIgb2YgaXNvbGF0aW9ucyBwZXIgdGltZSBwZXJpb2QKK2lzb2xhdGlvbnNVTklUPWlzby9UUAorCisgCisjIEVycm9yIG1lc3NhZ2VzCitDR0dXaXpFcnIxPVBsZWFzZSBzcGVjaWZ5IHRoZSBpc29sYXRlZCBmcmFjdGlvbgorQ0dHV2l6RXJyMj1Jc29sYXRlZCBmcmFjdGlvbiBtdXN0IGJlIGJldHdlZW4gMCBhbmQgMQorQ0dHV2l6RXJyMz1QbGVhc2Ugc3BlY2lmeSBhbiBpc29sYXRlZCBmcmFjdGlvbgorQ0dHV2l6RXJyND1Jc29sYXRlZCBmcmFjdGlvbiBtdXN0IGJlIGJldHdlZW4gMCBhbmQgMQorQ0dHV2l6RXJyNT1UaGUgcG9wdWxhdGlvbiBpZGVudGlmaWVyIG11c3QgYmUgc3BlY2lmaWVkCisKKworCmRpZmYgLS1naXQgYS9tb2RlbHMvcG9wdWxhdGlvbnMvb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLy5jbGFzc3BhdGggYi9tb2RlbHMvcG9wdWxhdGlvbnMvb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLy5jbGFzc3BhdGgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzA0ZTg2MQotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9wb3B1bGF0aW9ucy9vcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMvLmNsYXNzcGF0aApAQCAtMCwwICsxLDcgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8Y2xhc3NwYXRoPgorCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJzcmMiIHBhdGg9InNyYyIvPgorCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJjb24iIHBhdGg9Im9yZy5lY2xpcHNlLmpkdC5sYXVuY2hpbmcuSlJFX0NPTlRBSU5FUi9vcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwuZGVidWcudWkubGF1bmNoZXIuU3RhbmRhcmRWTVR5cGUvSjJTRS0xLjUiLz4KKwk8Y2xhc3NwYXRoZW50cnkga2luZD0iY29uIiBwYXRoPSJvcmcuZWNsaXBzZS5wZGUuY29yZS5yZXF1aXJlZFBsdWdpbnMiLz4KKwk8Y2xhc3NwYXRoZW50cnkga2luZD0ib3V0cHV0IiBwYXRoPSJiaW4iLz4KKzwvY2xhc3NwYXRoPgpkaWZmIC0tZ2l0IGEvbW9kZWxzL3BvcHVsYXRpb25zL29yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy8ucHJvamVjdCBiL21vZGVscy9wb3B1bGF0aW9ucy9vcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMvLnByb2plY3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzRhMWQ1ZAotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9wb3B1bGF0aW9ucy9vcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMvLnByb2plY3QKQEAgLTAsMCArMSwyOCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4NCis8cHJvamVjdERlc2NyaXB0aW9uPg0KKwk8bmFtZT5vcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHM8L25hbWU+DQorCTxjb21tZW50PjwvY29tbWVudD4NCisJPHByb2plY3RzPg0KKwk8L3Byb2plY3RzPg0KKwk8YnVpbGRTcGVjPg0KKwkJPGJ1aWxkQ29tbWFuZD4NCisJCQk8bmFtZT5vcmcuZWNsaXBzZS5qZHQuY29yZS5qYXZhYnVpbGRlcjwvbmFtZT4NCisJCQk8YXJndW1lbnRzPg0KKwkJCTwvYXJndW1lbnRzPg0KKwkJPC9idWlsZENvbW1hbmQ+DQorCQk8YnVpbGRDb21tYW5kPg0KKwkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5NYW5pZmVzdEJ1aWxkZXI8L25hbWU+DQorCQkJPGFyZ3VtZW50cz4NCisJCQk8L2FyZ3VtZW50cz4NCisJCTwvYnVpbGRDb21tYW5kPg0KKwkJPGJ1aWxkQ29tbWFuZD4NCisJCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuU2NoZW1hQnVpbGRlcjwvbmFtZT4NCisJCQk8YXJndW1lbnRzPg0KKwkJCTwvYXJndW1lbnRzPg0KKwkJPC9idWlsZENvbW1hbmQ+DQorCTwvYnVpbGRTcGVjPg0KKwk8bmF0dXJlcz4NCisJCTxuYXR1cmU+b3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YW5hdHVyZTwvbmF0dXJlPg0KKwkJPG5hdHVyZT5vcmcuZWNsaXBzZS5wZGUuUGx1Z2luTmF0dXJlPC9uYXR1cmU+DQorCTwvbmF0dXJlcz4NCis8L3Byb2plY3REZXNjcmlwdGlvbj4NCmRpZmYgLS1naXQgYS9tb2RlbHMvcG9wdWxhdGlvbnMvb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcyBiL21vZGVscy9wb3B1bGF0aW9ucy9vcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkxODdlMzcKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvcG9wdWxhdGlvbnMvb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcwpAQCAtMCwwICsxLDE1IEBACisjVHVlIFNlcCAwMSAxNjo1NDoxMyBFRFQgMjAwOQorZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmRvYy5jb21tZW50LnN1cHBvcnQ9ZGlzYWJsZWQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW52YWxpZEphdmFkb2M9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbnZhbGlkSmF2YWRvY1RhZ3M9ZW5hYmxlZAorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbnZhbGlkSmF2YWRvY1RhZ3NEZXByZWNhdGVkUmVmPWVuYWJsZWQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW52YWxpZEphdmFkb2NUYWdzTm90VmlzaWJsZVJlZj1lbmFibGVkCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmludmFsaWRKYXZhZG9jVGFnc1Zpc2liaWxpdHk9cHVibGljCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdKYXZhZG9jQ29tbWVudHM9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nSmF2YWRvY0NvbW1lbnRzT3ZlcnJpZGluZz1lbmFibGVkCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdKYXZhZG9jQ29tbWVudHNWaXNpYmlsaXR5PXB1YmxpYworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nSmF2YWRvY1RhZ0Rlc2NyaXB0aW9uPXJldHVybl90YWcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0phdmFkb2NUYWdzPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0phdmFkb2NUYWdzT3ZlcnJpZGluZz1lbmFibGVkCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdKYXZhZG9jVGFnc1Zpc2liaWxpdHk9cHVibGljCmRpZmYgLS1naXQgYS9tb2RlbHMvcG9wdWxhdGlvbnMvb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzL01FVEEtSU5GL01BTklGRVNULk1GIGIvbW9kZWxzL3BvcHVsYXRpb25zL29yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy9NRVRBLUlORi9NQU5JRkVTVC5NRgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NDA5YWYyCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL3BvcHVsYXRpb25zL29yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy9NRVRBLUlORi9NQU5JRkVTVC5NRgpAQCAtMCwwICsxLDIzIEBACitNYW5pZmVzdC1WZXJzaW9uOiAxLjANCitCdW5kbGUtTWFuaWZlc3RWZXJzaW9uOiAyDQorQnVuZGxlLU5hbWU6ICVwbHVnaW5OYW1lDQorQnVuZGxlLVN5bWJvbGljTmFtZTogb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzO3NpbmdsZXRvbjo9dHJ1ZQ0KK0J1bmRsZS1WZXJzaW9uOiAxLjIuMQ0KK0J1bmRsZS1DbGFzc1BhdGg6IC4NCitCdW5kbGUtVmVuZG9yOiAlcHJvdmlkZXJOYW1lDQorQnVuZGxlLUxvY2FsaXphdGlvbjogcGx1Z2luDQorQnVuZGxlLVJlcXVpcmVkRXhlY3V0aW9uRW52aXJvbm1lbnQ6IEoyU0UtMS41DQorUmVxdWlyZS1CdW5kbGU6IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZSwNCisgb3JnLmVjbGlwc2UuZW1mLmVjb3JlO3Zpc2liaWxpdHk6PXJlZXhwb3J0LA0KKyBvcmcuZWNsaXBzZS5zdGVtLmNvcmU7dmlzaWJpbGl0eTo9cmVleHBvcnQsDQorIG9yZy5lY2xpcHNlLmVtZi5lY29yZS5lZGl0LA0KKyBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLA0KKyBvcmcuZWNsaXBzZS5zdGVtLnRyYW5zcG9ydCwNCisgb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeQ0KK0J1bmRsZS1BY3RpdmF0aW9uUG9saWN5OiBsYXp5DQorRXhwb3J0LVBhY2thZ2U6IG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscywNCisgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLA0KKyBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuaW1wbCwNCisgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLnByb3ZpZGVyLA0KKyBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQudXRpbA0KK0J1bmRsZS1BY3RpdmF0b3I6IG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5BY3RpdmF0b3INCmRpZmYgLS1naXQgYS9tb2RlbHMvcG9wdWxhdGlvbnMvb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzL2J1aWxkLnByb3BlcnRpZXMgYi9tb2RlbHMvcG9wdWxhdGlvbnMvb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzL2J1aWxkLnByb3BlcnRpZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjIyMmYwMQotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9wb3B1bGF0aW9ucy9vcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMvYnVpbGQucHJvcGVydGllcwpAQCAtMCwwICsxLDE5IEBACisNCisjIDxjb3B5cmlnaHQ+DQorIyA8L2NvcHlyaWdodD4NCisjDQorIyAkSWQkDQorDQorYmluLmluY2x1ZGVzID0gLixcDQorICAgICAgICAgICAgICAgbW9kZWwvLFwNCisgICAgICAgICAgICAgICBNRVRBLUlORi8sXA0KKyAgICAgICAgICAgICAgIHBsdWdpbi54bWwsXA0KKyAgICAgICAgICAgICAgIHBsdWdpbi5wcm9wZXJ0aWVzLFwNCisgICAgICAgICAgICAgICBpY29ucy8sXA0KKyAgICAgICAgICAgICAgIGJpbi8sXA0KKyAgICAgICAgICAgICAgIHBsdWdpbl9kZS5wcm9wZXJ0aWVzLFwNCisgICAgICAgICAgICAgICBwbHVnaW5fa3IucHJvcGVydGllcyxcDQorICAgICAgICAgICAgICAgcGx1Z2luX3poLnByb3BlcnRpZXMNCitqYXJzLmNvbXBpbGUub3JkZXIgPSAuDQorc291cmNlLi4gPSBzcmMvDQorb3V0cHV0Li4gPSBiaW4vDQpkaWZmIC0tZ2l0IGEvbW9kZWxzL3BvcHVsYXRpb25zL29yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy9pY29ucy9mdWxsL2N0b29sMTYvQ3JlYXRlRGVtb2dyYXBoaWNQb3B1bGF0aW9uTW9kZWxfcG9wdWxhdGlvbkdyb3Vwc19Qb3B1bGF0aW9uR3JvdXAuZ2lmIGIvbW9kZWxzL3BvcHVsYXRpb25zL29yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy9pY29ucy9mdWxsL2N0b29sMTYvQ3JlYXRlRGVtb2dyYXBoaWNQb3B1bGF0aW9uTW9kZWxfcG9wdWxhdGlvbkdyb3Vwc19Qb3B1bGF0aW9uR3JvdXAuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ3NDg2OTYKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvcG9wdWxhdGlvbnMvb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzL2ljb25zL2Z1bGwvY3Rvb2wxNi9DcmVhdGVEZW1vZ3JhcGhpY1BvcHVsYXRpb25Nb2RlbF9wb3B1bGF0aW9uR3JvdXBzX1BvcHVsYXRpb25Hcm91cC5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvbW9kZWxzL3BvcHVsYXRpb25zL29yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy9pY29ucy9mdWxsL2N1c3RvbTE2L0RlbW9ncmFwaGljUG9wdWxhdGlvbk1vZGVsLmdpZiBiL21vZGVscy9wb3B1bGF0aW9ucy9vcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMvaWNvbnMvZnVsbC9jdXN0b20xNi9EZW1vZ3JhcGhpY1BvcHVsYXRpb25Nb2RlbC5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDJiYWYzMgotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9wb3B1bGF0aW9ucy9vcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMvaWNvbnMvZnVsbC9jdXN0b20xNi9EZW1vZ3JhcGhpY1BvcHVsYXRpb25Nb2RlbC5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvbW9kZWxzL3BvcHVsYXRpb25zL29yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy9pY29ucy9mdWxsL2N1c3RvbTE2L01vc3F1aXRvUG9wdWxhdGlvbk1vZGVsLmdpZiBiL21vZGVscy9wb3B1bGF0aW9ucy9vcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMvaWNvbnMvZnVsbC9jdXN0b20xNi9Nb3NxdWl0b1BvcHVsYXRpb25Nb2RlbC5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDA4Njg4YQotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9wb3B1bGF0aW9ucy9vcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMvaWNvbnMvZnVsbC9jdXN0b20xNi9Nb3NxdWl0b1BvcHVsYXRpb25Nb2RlbC5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvbW9kZWxzL3BvcHVsYXRpb25zL29yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy9pY29ucy9mdWxsL2N1c3RvbTE2L1BvcHVsYXRpb25Nb2RlbC5naWYgYi9tb2RlbHMvcG9wdWxhdGlvbnMvb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzL2ljb25zL2Z1bGwvY3VzdG9tMTYvUG9wdWxhdGlvbk1vZGVsLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZjE2ZjU5Ci0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL3BvcHVsYXRpb25zL29yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy9pY29ucy9mdWxsL2N1c3RvbTE2L1BvcHVsYXRpb25Nb2RlbC5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvbW9kZWxzL3BvcHVsYXRpb25zL29yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy9pY29ucy9mdWxsL2N1c3RvbTE2L1NlYXNvbmFsUG9wdWxhdGlvbk1vZGVsLmdpZiBiL21vZGVscy9wb3B1bGF0aW9ucy9vcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMvaWNvbnMvZnVsbC9jdXN0b20xNi9TZWFzb25hbFBvcHVsYXRpb25Nb2RlbC5naWYKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZmQ2ODg5YgotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9wb3B1bGF0aW9ucy9vcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMvaWNvbnMvZnVsbC9jdXN0b20xNi9TZWFzb25hbFBvcHVsYXRpb25Nb2RlbC5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvbW9kZWxzL3BvcHVsYXRpb25zL29yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy9pY29ucy9mdWxsL2N1c3RvbTE2L1N0YW5kYXJkUG9wdWxhdGlvbk1vZGVsLmdpZiBiL21vZGVscy9wb3B1bGF0aW9ucy9vcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMvaWNvbnMvZnVsbC9jdXN0b20xNi9TdGFuZGFyZFBvcHVsYXRpb25Nb2RlbC5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGQ0NjRkYwotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9wb3B1bGF0aW9ucy9vcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMvaWNvbnMvZnVsbC9jdXN0b20xNi9TdGFuZGFyZFBvcHVsYXRpb25Nb2RlbC5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvbW9kZWxzL3BvcHVsYXRpb25zL29yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy9pY29ucy9mdWxsL2N1c3RvbTE2L1N0b2NoYXN0aWNTdGFuZGFyZFBvcHVsYXRpb25Nb2RlbC5naWYgYi9tb2RlbHMvcG9wdWxhdGlvbnMvb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzL2ljb25zL2Z1bGwvY3VzdG9tMTYvU3RvY2hhc3RpY1N0YW5kYXJkUG9wdWxhdGlvbk1vZGVsLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMzllNDk3Ci0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL3BvcHVsYXRpb25zL29yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy9pY29ucy9mdWxsL2N1c3RvbTE2L1N0b2NoYXN0aWNTdGFuZGFyZFBvcHVsYXRpb25Nb2RlbC5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvbW9kZWxzL3BvcHVsYXRpb25zL29yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy9pY29ucy9mdWxsL2N1c3RvbTE2L3BvcHVsYXRpb25pbml0aWFsaXplci5naWYgYi9tb2RlbHMvcG9wdWxhdGlvbnMvb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzL2ljb25zL2Z1bGwvY3VzdG9tMTYvcG9wdWxhdGlvbmluaXRpYWxpemVyLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4zOWJmOGMxCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL3BvcHVsYXRpb25zL29yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy9pY29ucy9mdWxsL2N1c3RvbTE2L3BvcHVsYXRpb25pbml0aWFsaXplci5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvbW9kZWxzL3BvcHVsYXRpb25zL29yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy9pY29ucy9mdWxsL29iajE2L0FnZUdyb3VwLmdpZiBiL21vZGVscy9wb3B1bGF0aW9ucy9vcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMvaWNvbnMvZnVsbC9vYmoxNi9BZ2VHcm91cC5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTVhNmM3OQotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9wb3B1bGF0aW9ucy9vcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMvaWNvbnMvZnVsbC9vYmoxNi9BZ2VHcm91cC5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvbW9kZWxzL3BvcHVsYXRpb25zL29yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy9pY29ucy9mdWxsL29iajE2L0FnaW5nUG9wdWxhdGlvbk1vZGVsLmdpZiBiL21vZGVscy9wb3B1bGF0aW9ucy9vcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMvaWNvbnMvZnVsbC9vYmoxNi9BZ2luZ1BvcHVsYXRpb25Nb2RlbC5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTVhNmM3OQotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9wb3B1bGF0aW9ucy9vcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMvaWNvbnMvZnVsbC9vYmoxNi9BZ2luZ1BvcHVsYXRpb25Nb2RlbC5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvbW9kZWxzL3BvcHVsYXRpb25zL29yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy9pY29ucy9mdWxsL29iajE2L0RlbW9ncmFwaGljUG9wdWxhdGlvbk1vZGVsLmdpZiBiL21vZGVscy9wb3B1bGF0aW9ucy9vcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMvaWNvbnMvZnVsbC9vYmoxNi9EZW1vZ3JhcGhpY1BvcHVsYXRpb25Nb2RlbC5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2FmMjgwNAotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9wb3B1bGF0aW9ucy9vcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMvaWNvbnMvZnVsbC9vYmoxNi9EZW1vZ3JhcGhpY1BvcHVsYXRpb25Nb2RlbC5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvbW9kZWxzL3BvcHVsYXRpb25zL29yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy9pY29ucy9mdWxsL29iajE2L0VhcnRoU2NpZW5jZVBvcHVsYXRpb25Jbml0aWFsaXplci5naWYgYi9tb2RlbHMvcG9wdWxhdGlvbnMvb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzL2ljb25zL2Z1bGwvb2JqMTYvRWFydGhTY2llbmNlUG9wdWxhdGlvbkluaXRpYWxpemVyLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MjBlZWUxCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL3BvcHVsYXRpb25zL29yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy9pY29ucy9mdWxsL29iajE2L0VhcnRoU2NpZW5jZVBvcHVsYXRpb25Jbml0aWFsaXplci5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvbW9kZWxzL3BvcHVsYXRpb25zL29yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy9pY29ucy9mdWxsL29iajE2L01vc3F1aXRvUG9wdWxhdGlvbk1vZGVsLmdpZiBiL21vZGVscy9wb3B1bGF0aW9ucy9vcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMvaWNvbnMvZnVsbC9vYmoxNi9Nb3NxdWl0b1BvcHVsYXRpb25Nb2RlbC5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjFmOGFmYQotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9wb3B1bGF0aW9ucy9vcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMvaWNvbnMvZnVsbC9vYmoxNi9Nb3NxdWl0b1BvcHVsYXRpb25Nb2RlbC5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvbW9kZWxzL3BvcHVsYXRpb25zL29yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy9pY29ucy9mdWxsL29iajE2L1BvcHVsYXRpb25Hcm91cC5naWYgYi9tb2RlbHMvcG9wdWxhdGlvbnMvb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzL2ljb25zL2Z1bGwvb2JqMTYvUG9wdWxhdGlvbkdyb3VwLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYjY5MjU2Ci0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL3BvcHVsYXRpb25zL29yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy9pY29ucy9mdWxsL29iajE2L1BvcHVsYXRpb25Hcm91cC5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvbW9kZWxzL3BvcHVsYXRpb25zL29yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy9pY29ucy9mdWxsL29iajE2L1BvcHVsYXRpb25Jbml0aWFsaXplci5naWYgYi9tb2RlbHMvcG9wdWxhdGlvbnMvb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzL2ljb25zL2Z1bGwvb2JqMTYvUG9wdWxhdGlvbkluaXRpYWxpemVyLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44OWFkNWRhCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL3BvcHVsYXRpb25zL29yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy9pY29ucy9mdWxsL29iajE2L1BvcHVsYXRpb25Jbml0aWFsaXplci5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvbW9kZWxzL3BvcHVsYXRpb25zL29yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy9pY29ucy9mdWxsL29iajE2L1BvcHVsYXRpb25MYWJlbC5naWYgYi9tb2RlbHMvcG9wdWxhdGlvbnMvb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzL2ljb25zL2Z1bGwvb2JqMTYvUG9wdWxhdGlvbkxhYmVsLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZTIyNDYzCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL3BvcHVsYXRpb25zL29yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy9pY29ucy9mdWxsL29iajE2L1BvcHVsYXRpb25MYWJlbC5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvbW9kZWxzL3BvcHVsYXRpb25zL29yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy9pY29ucy9mdWxsL29iajE2L1BvcHVsYXRpb25MYWJlbFZhbHVlLmdpZiBiL21vZGVscy9wb3B1bGF0aW9ucy9vcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMvaWNvbnMvZnVsbC9vYmoxNi9Qb3B1bGF0aW9uTGFiZWxWYWx1ZS5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzM5ZWJiZgotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9wb3B1bGF0aW9ucy9vcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMvaWNvbnMvZnVsbC9vYmoxNi9Qb3B1bGF0aW9uTGFiZWxWYWx1ZS5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvbW9kZWxzL3BvcHVsYXRpb25zL29yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy9pY29ucy9mdWxsL29iajE2L1BvcHVsYXRpb25Nb2RlbC5naWYgYi9tb2RlbHMvcG9wdWxhdGlvbnMvb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzL2ljb25zL2Z1bGwvb2JqMTYvUG9wdWxhdGlvbk1vZGVsLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MjBlZWUxCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL3BvcHVsYXRpb25zL29yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy9pY29ucy9mdWxsL29iajE2L1BvcHVsYXRpb25Nb2RlbC5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvbW9kZWxzL3BvcHVsYXRpb25zL29yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy9pY29ucy9mdWxsL29iajE2L1BvcHVsYXRpb25Nb2RlbExhYmVsLmdpZiBiL21vZGVscy9wb3B1bGF0aW9ucy9vcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMvaWNvbnMvZnVsbC9vYmoxNi9Qb3B1bGF0aW9uTW9kZWxMYWJlbC5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODNhZmI5YgotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9wb3B1bGF0aW9ucy9vcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMvaWNvbnMvZnVsbC9vYmoxNi9Qb3B1bGF0aW9uTW9kZWxMYWJlbC5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvbW9kZWxzL3BvcHVsYXRpb25zL29yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy9pY29ucy9mdWxsL29iajE2L1BvcHVsYXRpb25Nb2RlbExhYmVsVmFsdWUuZ2lmIGIvbW9kZWxzL3BvcHVsYXRpb25zL29yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy9pY29ucy9mdWxsL29iajE2L1BvcHVsYXRpb25Nb2RlbExhYmVsVmFsdWUuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEwZDIyMjkKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvcG9wdWxhdGlvbnMvb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzL2ljb25zL2Z1bGwvb2JqMTYvUG9wdWxhdGlvbk1vZGVsTGFiZWxWYWx1ZS5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvbW9kZWxzL3BvcHVsYXRpb25zL29yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy9pY29ucy9mdWxsL29iajE2L1BvcHVsYXRpb25Nb2RlbFZhbHVlLmdpZiBiL21vZGVscy9wb3B1bGF0aW9ucy9vcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMvaWNvbnMvZnVsbC9vYmoxNi9Qb3B1bGF0aW9uTW9kZWxWYWx1ZS5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmUyMjQ2MwotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9wb3B1bGF0aW9ucy9vcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMvaWNvbnMvZnVsbC9vYmoxNi9Qb3B1bGF0aW9uTW9kZWxWYWx1ZS5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvbW9kZWxzL3BvcHVsYXRpb25zL29yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy9pY29ucy9mdWxsL29iajE2L1NlYXNvbmFsUG9wdWxhdGlvbk1vZGVsLmdpZiBiL21vZGVscy9wb3B1bGF0aW9ucy9vcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMvaWNvbnMvZnVsbC9vYmoxNi9TZWFzb25hbFBvcHVsYXRpb25Nb2RlbC5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTM2ZTNiMgotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9wb3B1bGF0aW9ucy9vcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMvaWNvbnMvZnVsbC9vYmoxNi9TZWFzb25hbFBvcHVsYXRpb25Nb2RlbC5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvbW9kZWxzL3BvcHVsYXRpb25zL29yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy9pY29ucy9mdWxsL29iajE2L1N0YW5kYXJkUG9wdWxhdGlvbkluaXRpYWxpemVyLmdpZiBiL21vZGVscy9wb3B1bGF0aW9ucy9vcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMvaWNvbnMvZnVsbC9vYmoxNi9TdGFuZGFyZFBvcHVsYXRpb25Jbml0aWFsaXplci5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTE3ZGM3ZAotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9wb3B1bGF0aW9ucy9vcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMvaWNvbnMvZnVsbC9vYmoxNi9TdGFuZGFyZFBvcHVsYXRpb25Jbml0aWFsaXplci5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvbW9kZWxzL3BvcHVsYXRpb25zL29yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy9pY29ucy9mdWxsL29iajE2L1N0YW5kYXJkUG9wdWxhdGlvbk1vZGVsLmdpZiBiL21vZGVscy9wb3B1bGF0aW9ucy9vcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMvaWNvbnMvZnVsbC9vYmoxNi9TdGFuZGFyZFBvcHVsYXRpb25Nb2RlbC5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzBmMGM0OAotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9wb3B1bGF0aW9ucy9vcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMvaWNvbnMvZnVsbC9vYmoxNi9TdGFuZGFyZFBvcHVsYXRpb25Nb2RlbC5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvbW9kZWxzL3BvcHVsYXRpb25zL29yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy9pY29ucy9mdWxsL29iajE2L1N0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWwuZ2lmIGIvbW9kZWxzL3BvcHVsYXRpb25zL29yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy9pY29ucy9mdWxsL29iajE2L1N0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWwuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjczOWViYmYKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvcG9wdWxhdGlvbnMvb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzL2ljb25zL2Z1bGwvb2JqMTYvU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxMYWJlbC5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvbW9kZWxzL3BvcHVsYXRpb25zL29yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy9pY29ucy9mdWxsL29iajE2L1N0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWxWYWx1ZS5naWYgYi9tb2RlbHMvcG9wdWxhdGlvbnMvb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzL2ljb25zL2Z1bGwvb2JqMTYvU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxMYWJlbFZhbHVlLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MzUwMGRhCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL3BvcHVsYXRpb25zL29yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy9pY29ucy9mdWxsL29iajE2L1N0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWxWYWx1ZS5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvbW9kZWxzL3BvcHVsYXRpb25zL29yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy9pY29ucy9mdWxsL29iajE2L1N0b2NoYXN0aWNTdGFuZGFyZFBvcHVsYXRpb25Nb2RlbC5naWYgYi9tb2RlbHMvcG9wdWxhdGlvbnMvb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzL2ljb25zL2Z1bGwvb2JqMTYvU3RvY2hhc3RpY1N0YW5kYXJkUG9wdWxhdGlvbk1vZGVsLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MDQxNTk4Ci0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL3BvcHVsYXRpb25zL29yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy9pY29ucy9mdWxsL29iajE2L1N0b2NoYXN0aWNTdGFuZGFyZFBvcHVsYXRpb25Nb2RlbC5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvbW9kZWxzL3BvcHVsYXRpb25zL29yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy9pY29ucy9mdWxsL29iajE2L1lldGlQb3B1bGF0aW9uSW5pdGlhbGl6ZXIuZ2lmIGIvbW9kZWxzL3BvcHVsYXRpb25zL29yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy9pY29ucy9mdWxsL29iajE2L1lldGlQb3B1bGF0aW9uSW5pdGlhbGl6ZXIuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIzNjQzZGEKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvcG9wdWxhdGlvbnMvb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzL2ljb25zL2Z1bGwvb2JqMTYvWWV0aVBvcHVsYXRpb25Jbml0aWFsaXplci5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvbW9kZWxzL3BvcHVsYXRpb25zL29yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy9tb2RlbC9zdGFuZGFyZC5lY29yZSBiL21vZGVscy9wb3B1bGF0aW9ucy9vcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMvbW9kZWwvc3RhbmRhcmQuZWNvcmUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmY0YmUzMwotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9wb3B1bGF0aW9ucy9vcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMvbW9kZWwvc3RhbmRhcmQuZWNvcmUKQEAgLTAsMCArMSw5MyBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4NCis8ZWNvcmU6RVBhY2thZ2UgeG1pOnZlcnNpb249IjIuMCINCisgICAgeG1sbnM6eG1pPSJodHRwOi8vd3d3Lm9tZy5vcmcvWE1JIiB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIg0KKyAgICB4bWxuczplY29yZT0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9lbWYvMjAwMi9FY29yZSIgbmFtZT0ic3RhbmRhcmQiDQorICAgIG5zVVJJPSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vcG9wdWxhdGlvbm1vZGVscy9zdGFuZGFyZCIgbnNQcmVmaXg9Im9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZCI+DQorICA8ZUNsYXNzaWZpZXJzIHhzaTp0eXBlPSJlY29yZTpFQ2xhc3MiIG5hbWU9IlBvcHVsYXRpb25Nb2RlbCIgYWJzdHJhY3Q9InRydWUiIGVTdXBlclR5cGVzPSIuLi8uLi9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvbW9kZWwvbW9kZWwuZWNvcmUjLy9JbnRlZ3JhdGlvbkRlY29yYXRvciAuLi8uLi9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvbW9kZWwvbW9kaWZpZXIuZWNvcmUjLy9Nb2RpZmlhYmxlIj4NCisgICAgPGVPcGVyYXRpb25zIG5hbWU9ImdldEFsbExhYmVsSWRlbnRpZmllcnMiIHVwcGVyQm91bmQ9Ii0xIiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIHBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2UuZW1mLmVjb3JlL21vZGVsL0Vjb3JlLmVjb3JlIy8vRVN0cmluZyIvPg0KKyAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0icG9wdWxhdGlvbklkZW50aWZpZXIiIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgcGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5lbWYuZWNvcmUvbW9kZWwvRWNvcmUuZWNvcmUjLy9FU3RyaW5nIg0KKyAgICAgICAgZGVmYXVsdFZhbHVlTGl0ZXJhbD0iaHVtYW4iLz4NCisgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVBdHRyaWJ1dGUiIG5hbWU9Im5hbWUiIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgcGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5lbWYuZWNvcmUvbW9kZWwvRWNvcmUuZWNvcmUjLy9FU3RyaW5nIg0KKyAgICAgICAgZGVmYXVsdFZhbHVlTGl0ZXJhbD0iSHVtYW5Qb3B1bGF0aW9uTW9kZWwiLz4NCisgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVBdHRyaWJ1dGUiIG5hbWU9InRhcmdldElTT0tleSIgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLmVtZi5lY29yZS9tb2RlbC9FY29yZS5lY29yZSMvL0VTdHJpbmciDQorICAgICAgICBkZWZhdWx0VmFsdWVMaXRlcmFsPSIiLz4NCisgIDwvZUNsYXNzaWZpZXJzPg0KKyAgPGVDbGFzc2lmaWVycyB4c2k6dHlwZT0iZWNvcmU6RUNsYXNzIiBuYW1lPSJTdGFuZGFyZFBvcHVsYXRpb25Nb2RlbCIgZVN1cGVyVHlwZXM9IiMvL1BvcHVsYXRpb25Nb2RlbCI+DQorICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJiaXJ0aFJhdGUiIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgcGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5lbWYuZWNvcmUvbW9kZWwvRWNvcmUuZWNvcmUjLy9FRG91YmxlIg0KKyAgICAgICAgZGVmYXVsdFZhbHVlTGl0ZXJhbD0iMC4wIi8+DQorICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJkZWF0aFJhdGUiIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgcGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5lbWYuZWNvcmUvbW9kZWwvRWNvcmUuZWNvcmUjLy9FRG91YmxlIg0KKyAgICAgICAgZGVmYXVsdFZhbHVlTGl0ZXJhbD0iMC4wIi8+DQorICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJ0aW1lUGVyaW9kIiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDIvRWNvcmUjLy9FTG9uZyINCisgICAgICAgIGRlZmF1bHRWYWx1ZUxpdGVyYWw9Ijg2NDAwMDAwIi8+DQorICA8L2VDbGFzc2lmaWVycz4NCisgIDxlQ2xhc3NpZmllcnMgeHNpOnR5cGU9ImVjb3JlOkVDbGFzcyIgbmFtZT0iUG9wdWxhdGlvbk1vZGVsTGFiZWwiIGVTdXBlclR5cGVzPSIuLi8uLi9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvbW9kZWwvZ3JhcGguZWNvcmUjLy9JbnRlZ3JhdGlvbkxhYmVsIj4NCisgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVSZWZlcmVuY2UiIG5hbWU9InBvcHVsYXRpb25MYWJlbCIgZVR5cGU9ImVjb3JlOkVDbGFzcyAuLi8uLi9vcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zL21vZGVsL2xhYmVscy5lY29yZSMvL1BvcHVsYXRpb25MYWJlbCIvPg0KKyAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0icG9wdWxhdGlvbklkZW50aWZpZXIiIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgcGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5lbWYuZWNvcmUvbW9kZWwvRWNvcmUuZWNvcmUjLy9FU3RyaW5nIi8+DQorICA8L2VDbGFzc2lmaWVycz4NCisgIDxlQ2xhc3NpZmllcnMgeHNpOnR5cGU9ImVjb3JlOkVDbGFzcyIgbmFtZT0iU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxMYWJlbCIgZVN1cGVyVHlwZXM9IiMvL1BvcHVsYXRpb25Nb2RlbExhYmVsIi8+DQorICA8ZUNsYXNzaWZpZXJzIHhzaTp0eXBlPSJlY29yZTpFQ2xhc3MiIG5hbWU9IlBvcHVsYXRpb25Nb2RlbExhYmVsVmFsdWUiIGVTdXBlclR5cGVzPSIuLi8uLi9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvbW9kZWwvZ3JhcGguZWNvcmUjLy9JbnRlZ3JhdGlvbkxhYmVsVmFsdWUiLz4NCisgIDxlQ2xhc3NpZmllcnMgeHNpOnR5cGU9ImVjb3JlOkVDbGFzcyIgbmFtZT0iU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxMYWJlbFZhbHVlIiBlU3VwZXJUeXBlcz0iIy8vUG9wdWxhdGlvbk1vZGVsTGFiZWxWYWx1ZSI+DQorICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJjb3VudCIgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLmVtZi5lY29yZS9tb2RlbC9FY29yZS5lY29yZSMvL0VEb3VibGUiLz4NCisgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVBdHRyaWJ1dGUiIG5hbWU9ImJpcnRocyIgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLmVtZi5lY29yZS9tb2RlbC9FY29yZS5lY29yZSMvL0VEb3VibGUiLz4NCisgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVBdHRyaWJ1dGUiIG5hbWU9ImRlYXRocyIgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLmVtZi5lY29yZS9tb2RlbC9FY29yZS5lY29yZSMvL0VEb3VibGUiLz4NCisgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVBdHRyaWJ1dGUiIG5hbWU9ImRlbnNpdHkiIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgcGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5lbWYuZWNvcmUvbW9kZWwvRWNvcmUuZWNvcmUjLy9FRG91YmxlIi8+DQorICA8L2VDbGFzc2lmaWVycz4NCisgIDxlQ2xhc3NpZmllcnMgeHNpOnR5cGU9ImVjb3JlOkVDbGFzcyIgbmFtZT0iU3RvY2hhc3RpY1N0YW5kYXJkUG9wdWxhdGlvbk1vZGVsIiBlU3VwZXJUeXBlcz0iIy8vU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWwiPg0KKyAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0iZ2FpbiIgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLmVtZi5lY29yZS9tb2RlbC9FY29yZS5lY29yZSMvL0VEb3VibGUiDQorICAgICAgICBkZWZhdWx0VmFsdWVMaXRlcmFsPSIwLjAxIi8+DQorICA8L2VDbGFzc2lmaWVycz4NCisgIDxlQ2xhc3NpZmllcnMgeHNpOnR5cGU9ImVjb3JlOkVDbGFzcyIgbmFtZT0iRGVtb2dyYXBoaWNQb3B1bGF0aW9uTW9kZWwiIGVTdXBlclR5cGVzPSIjLy9TdGFuZGFyZFBvcHVsYXRpb25Nb2RlbCI+DQorICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFUmVmZXJlbmNlIiBuYW1lPSJwb3B1bGF0aW9uR3JvdXBzIiBsb3dlckJvdW5kPSIxIg0KKyAgICAgICAgdXBwZXJCb3VuZD0iLTEiIGVUeXBlPSIjLy9Qb3B1bGF0aW9uR3JvdXAiIGNvbnRhaW5tZW50PSJ0cnVlIi8+DQorICA8L2VDbGFzc2lmaWVycz4NCisgIDxlQ2xhc3NpZmllcnMgeHNpOnR5cGU9ImVjb3JlOkVDbGFzcyIgbmFtZT0iUG9wdWxhdGlvbkdyb3VwIj4NCisgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVBdHRyaWJ1dGUiIG5hbWU9ImlkZW50aWZpZXIiIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgcGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5lbWYuZWNvcmUvbW9kZWwvRWNvcmUuZWNvcmUjLy9FU3RyaW5nIi8+DQorICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJmcmFjdGlvbiIgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLmVtZi5lY29yZS9tb2RlbC9FY29yZS5lY29yZSMvL0VEb3VibGUiDQorICAgICAgICBkZWZhdWx0VmFsdWVMaXRlcmFsPSIwLjUiLz4NCisgIDwvZUNsYXNzaWZpZXJzPg0KKyAgPGVDbGFzc2lmaWVycyB4c2k6dHlwZT0iZWNvcmU6RUNsYXNzIiBuYW1lPSJQb3B1bGF0aW9uSW5pdGlhbGl6ZXIiIGFic3RyYWN0PSJ0cnVlIg0KKyAgICAgIGVTdXBlclR5cGVzPSIuLi8uLi9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvbW9kZWwvbW9kZWwuZWNvcmUjLy9Ob2RlRGVjb3JhdG9yIC4uLy4uL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9tb2RlbC9tb2RpZmllci5lY29yZSMvL01vZGlmaWFibGUiPg0KKyAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0idGFyZ2V0SVNPS2V5IiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIHBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2UuZW1mLmVjb3JlL21vZGVsL0Vjb3JlLmVjb3JlIy8vRVN0cmluZyIvPg0KKyAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0icG9wdWxhdGlvbklkZW50aWZpZXIiIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgcGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5lbWYuZWNvcmUvbW9kZWwvRWNvcmUuZWNvcmUjLy9FU3RyaW5nIg0KKyAgICAgICAgZGVmYXVsdFZhbHVlTGl0ZXJhbD0iaHVtYW4iLz4NCisgIDwvZUNsYXNzaWZpZXJzPg0KKyAgPGVDbGFzc2lmaWVycyB4c2k6dHlwZT0iZWNvcmU6RUNsYXNzIiBuYW1lPSJTdGFuZGFyZFBvcHVsYXRpb25Jbml0aWFsaXplciIgZVN1cGVyVHlwZXM9IiMvL1BvcHVsYXRpb25Jbml0aWFsaXplciI+DQorICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJpbmRpdmlkdWFscyIgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLmVtZi5lY29yZS9tb2RlbC9FY29yZS5lY29yZSMvL0VEb3VibGUiDQorICAgICAgICBkZWZhdWx0VmFsdWVMaXRlcmFsPSIxIi8+DQorICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJ1c2VEZW5zaXR5IiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIHBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2UuZW1mLmVjb3JlL21vZGVsL0Vjb3JlLmVjb3JlIy8vRUJvb2xlYW4iDQorICAgICAgICBkZWZhdWx0VmFsdWVMaXRlcmFsPSJmYWxzZSIvPg0KKyAgPC9lQ2xhc3NpZmllcnM+DQorICA8ZUNsYXNzaWZpZXJzIHhzaTp0eXBlPSJlY29yZTpFQ2xhc3MiIG5hbWU9IlNlYXNvbmFsUG9wdWxhdGlvbk1vZGVsIiBlU3VwZXJUeXBlcz0iIy8vU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWwiPg0KKyAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0icGhhc2UiIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgcGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5lbWYuZWNvcmUvbW9kZWwvRWNvcmUuZWNvcmUjLy9FRG91YmxlIg0KKyAgICAgICAgZGVmYXVsdFZhbHVlTGl0ZXJhbD0iMC4wIi8+DQorICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJtb2R1bGF0aW9uQW1wbGl0dWRlIiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIHBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2UuZW1mLmVjb3JlL21vZGVsL0Vjb3JlLmVjb3JlIy8vRURvdWJsZSINCisgICAgICAgIGRlZmF1bHRWYWx1ZUxpdGVyYWw9IjEuMCIvPg0KKyAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0icGVyaW9kIiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIHBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2UuZW1mLmVjb3JlL21vZGVsL0Vjb3JlLmVjb3JlIy8vRURvdWJsZSINCisgICAgICAgIGNoYW5nZWFibGU9ImZhbHNlIiBkZWZhdWx0VmFsdWVMaXRlcmFsPSIzNjUuMjUiLz4NCisgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVBdHRyaWJ1dGUiIG5hbWU9InVzZUxhdGl0dWRlIiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIHBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2UuZW1mLmVjb3JlL21vZGVsL0Vjb3JlLmVjb3JlIy8vRUJvb2xlYW4iDQorICAgICAgICBkZWZhdWx0VmFsdWVMaXRlcmFsPSJ0cnVlIi8+DQorICA8L2VDbGFzc2lmaWVycz4NCisgIDxlQ2xhc3NpZmllcnMgeHNpOnR5cGU9ImVjb3JlOkVDbGFzcyIgbmFtZT0iRWFydGhTY2llbmNlUG9wdWxhdGlvbkluaXRpYWxpemVyIiBhYnN0cmFjdD0idHJ1ZSINCisgICAgICBlU3VwZXJUeXBlcz0iIy8vUG9wdWxhdGlvbkluaXRpYWxpemVyIi8+DQorICA8ZUNsYXNzaWZpZXJzIHhzaTp0eXBlPSJlY29yZTpFQ2xhc3MiIG5hbWU9IllldGlQb3B1bGF0aW9uSW5pdGlhbGl6ZXIiIGVTdXBlclR5cGVzPSIjLy9FYXJ0aFNjaWVuY2VQb3B1bGF0aW9uSW5pdGlhbGl6ZXIiLz4NCisgIDxlQ2xhc3NpZmllcnMgeHNpOnR5cGU9ImVjb3JlOkVDbGFzcyIgbmFtZT0iTW9zcXVpdG9Qb3B1bGF0aW9uTW9kZWwiIGVTdXBlclR5cGVzPSIjLy9Qb3B1bGF0aW9uTW9kZWwiPg0KKyAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0ic2NhbGluZ0ZhY3RvciIgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLmVtZi5lY29yZS9tb2RlbC9FY29yZS5lY29yZSMvL0VEb3VibGUiDQorICAgICAgICBkZWZhdWx0VmFsdWVMaXRlcmFsPSIxLjAiLz4NCisgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVBdHRyaWJ1dGUiIG5hbWU9InRpbWVQZXJpb2QiIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgcGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5lbWYuZWNvcmUvbW9kZWwvRWNvcmUuZWNvcmUjLy9FTG9uZyINCisgICAgICAgIGRlZmF1bHRWYWx1ZUxpdGVyYWw9Ijg2NDAwMDAwIi8+DQorICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJtb3J0YWxpdHlSYXRlIiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIHBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2UuZW1mLmVjb3JlL21vZGVsL0Vjb3JlLmVjb3JlIy8vRURvdWJsZSINCisgICAgICAgIGRlZmF1bHRWYWx1ZUxpdGVyYWw9IjAuMDUiLz4NCisgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVBdHRyaWJ1dGUiIG5hbWU9Imhvc3QiIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgcGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5lbWYuZWNvcmUvbW9kZWwvRWNvcmUuZWNvcmUjLy9FU3RyaW5nIg0KKyAgICAgICAgZGVmYXVsdFZhbHVlTGl0ZXJhbD0iaHVtYW4iLz4NCisgIDwvZUNsYXNzaWZpZXJzPg0KKyAgPGVDbGFzc2lmaWVycyB4c2k6dHlwZT0iZWNvcmU6RUNsYXNzIiBuYW1lPSJBZ2luZ1BvcHVsYXRpb25Nb2RlbCIgZVN1cGVyVHlwZXM9IiMvL0RlbW9ncmFwaGljUG9wdWxhdGlvbk1vZGVsIj4NCisgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVBdHRyaWJ1dGUiIG5hbWU9Imhhc01heEFnZSIgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLmVtZi5lY29yZS9tb2RlbC9FY29yZS5lY29yZSMvL0VCb29sZWFuIi8+DQorICA8L2VDbGFzc2lmaWVycz4NCisgIDxlQ2xhc3NpZmllcnMgeHNpOnR5cGU9ImVjb3JlOkVDbGFzcyIgbmFtZT0iQWdlR3JvdXAiIGVTdXBlclR5cGVzPSIjLy9Qb3B1bGF0aW9uR3JvdXAiPg0KKyAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0iZnJvbUFnZSIgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLmVtZi5lY29yZS9tb2RlbC9FY29yZS5lY29yZSMvL0VJbnQiLz4NCisgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVBdHRyaWJ1dGUiIG5hbWU9InRvQWdlIiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIHBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2UuZW1mLmVjb3JlL21vZGVsL0Vjb3JlLmVjb3JlIy8vRUludCIvPg0KKyAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0iZGVhdGhGYWN0b3IiIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgcGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5lbWYuZWNvcmUvbW9kZWwvRWNvcmUuZWNvcmUjLy9FRG91YmxlIg0KKyAgICAgICAgZGVmYXVsdFZhbHVlTGl0ZXJhbD0iMS4wIi8+DQorICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJsaW1pdGVkIiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIHBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2UuZW1mLmVjb3JlL21vZGVsL0Vjb3JlLmVjb3JlIy8vRUJvb2xlYW4iLz4NCisgIDwvZUNsYXNzaWZpZXJzPg0KKzwvZWNvcmU6RVBhY2thZ2U+DQpkaWZmIC0tZ2l0IGEvbW9kZWxzL3BvcHVsYXRpb25zL29yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy9tb2RlbC9zdGFuZGFyZC5nZW5tb2RlbCBiL21vZGVscy9wb3B1bGF0aW9ucy9vcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMvbW9kZWwvc3RhbmRhcmQuZ2VubW9kZWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTUzNDU2YgotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9wb3B1bGF0aW9ucy9vcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMvbW9kZWwvc3RhbmRhcmQuZ2VubW9kZWwKQEAgLTAsMCArMSw4MSBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxnZW5tb2RlbDpHZW5Nb2RlbCB4bWk6dmVyc2lvbj0iMi4wIgorICAgIHhtbG5zOnhtaT0iaHR0cDovL3d3dy5vbWcub3JnL1hNSSIgeG1sbnM6ZWNvcmU9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDIvRWNvcmUiCisgICAgeG1sbnM6Z2VubW9kZWw9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDIvR2VuTW9kZWwiIG1vZGVsRGlyZWN0b3J5PSIvb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzL3NyYyIKKyAgICBlZGl0RGlyZWN0b3J5PSIvb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzL3NyYyIgZWRpdG9yRGlyZWN0b3J5PSIvb3JnLmVjbGlwc2Uuc3RlbS51aS5wb3B1bGF0aW9ubW9kZWxzL3NyYyIKKyAgICBtb2RlbFBsdWdpbklEPSJvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMiIG1vZGVsTmFtZT0iU3RhbmRhcmQiIHRlc3RzRGlyZWN0b3J5PSIvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5wb3B1bGF0aW9ubW9kZWxzL3NyYyIKKyAgICB0ZXN0U3VpdGVDbGFzcz0ib3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLnRlc3RzLlBvcHVsYXRpb25tb2RlbHNBbGxUZXN0cyIKKyAgICBpbXBvcnRlcklEPSJvcmcuZWNsaXBzZS5lbWYuaW1wb3J0ZXIuZWNvcmUiIGNvbXBsaWFuY2VMZXZlbD0iNi4wIiBjb3B5cmlnaHRGaWVsZHM9ImZhbHNlIgorICAgIGVkaXRvclBsdWdpbklEPSJvcmcuZWNsaXBzZS5zdGVtLnVpLnBvcHVsYXRpb25tb2RlbHMiIHRlc3RzUGx1Z2luSUQ9Im9yZy5lY2xpcHNlLnN0ZW0udGVzdHMucG9wdWxhdGlvbm1vZGVscyIKKyAgICB1c2VkR2VuUGFja2FnZXM9Ii4uLy4uL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9tb2RlbC9jb3JlLmdlbm1vZGVsIy8vY29tbW9uIC4uLy4uL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9tb2RlbC9jb3JlLmdlbm1vZGVsIy8vZ3JhcGggLi4vLi4vb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL21vZGVsL2NvcmUuZ2VubW9kZWwjLy9tb2RlbCAuLi8uLi9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvbW9kZWwvY29yZS5nZW5tb2RlbCMvL21vZGlmaWVyIC4uLy4uL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9tb2RlbC9jb3JlLmdlbm1vZGVsIy8vc2NlbmFyaW8gLi4vLi4vb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL21vZGVsL2NvcmUuZ2VubW9kZWwjLy9zZXF1ZW5jZXIgLi4vLi4vb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL21vZGVsL2NvcmUuZ2VubW9kZWwjLy9zb2x2ZXIgLi4vLi4vb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy9tb2RlbC9kZWZpbml0aW9ucy5nZW5tb2RlbCMvL2xhYmVscyBwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLmVtZi5lY29yZS9tb2RlbC9FY29yZS5nZW5tb2RlbCMvL2Vjb3JlIj4KKyAgPGZvcmVpZ25Nb2RlbD5zdGFuZGFyZC5lY29yZTwvZm9yZWlnbk1vZGVsPgorICA8Z2VuUGFja2FnZXMgcHJlZml4PSJTdGFuZGFyZCIgYmFzZVBhY2thZ2U9Im9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscyIgZGlzcG9zYWJsZVByb3ZpZGVyRmFjdG9yeT0idHJ1ZSIKKyAgICAgIGVjb3JlUGFja2FnZT0ic3RhbmRhcmQuZWNvcmUjLyI+CisgICAgPGdlbkNsYXNzZXMgZWNvcmVDbGFzcz0ic3RhbmRhcmQuZWNvcmUjLy9Qb3B1bGF0aW9uTW9kZWwiPgorICAgICAgPGdlbkZlYXR1cmVzIGNyZWF0ZUNoaWxkPSJmYWxzZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFQXR0cmlidXRlIHN0YW5kYXJkLmVjb3JlIy8vUG9wdWxhdGlvbk1vZGVsL3BvcHVsYXRpb25JZGVudGlmaWVyIi8+CisgICAgICA8Z2VuRmVhdHVyZXMgY3JlYXRlQ2hpbGQ9ImZhbHNlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVBdHRyaWJ1dGUgc3RhbmRhcmQuZWNvcmUjLy9Qb3B1bGF0aW9uTW9kZWwvbmFtZSIvPgorICAgICAgPGdlbkZlYXR1cmVzIGNyZWF0ZUNoaWxkPSJmYWxzZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFQXR0cmlidXRlIHN0YW5kYXJkLmVjb3JlIy8vUG9wdWxhdGlvbk1vZGVsL3RhcmdldElTT0tleSIvPgorICAgIDwvZ2VuQ2xhc3Nlcz4KKyAgICA8Z2VuQ2xhc3NlcyBlY29yZUNsYXNzPSJzdGFuZGFyZC5lY29yZSMvL1N0YW5kYXJkUG9wdWxhdGlvbk1vZGVsIj4KKyAgICAgIDxnZW5GZWF0dXJlcyBjcmVhdGVDaGlsZD0iZmFsc2UiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RUF0dHJpYnV0ZSBzdGFuZGFyZC5lY29yZSMvL1N0YW5kYXJkUG9wdWxhdGlvbk1vZGVsL2JpcnRoUmF0ZSIvPgorICAgICAgPGdlbkZlYXR1cmVzIGNyZWF0ZUNoaWxkPSJmYWxzZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFQXR0cmlidXRlIHN0YW5kYXJkLmVjb3JlIy8vU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWwvZGVhdGhSYXRlIi8+CisgICAgICA8Z2VuRmVhdHVyZXMgY3JlYXRlQ2hpbGQ9ImZhbHNlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVBdHRyaWJ1dGUgc3RhbmRhcmQuZWNvcmUjLy9TdGFuZGFyZFBvcHVsYXRpb25Nb2RlbC90aW1lUGVyaW9kIi8+CisgICAgPC9nZW5DbGFzc2VzPgorICAgIDxnZW5DbGFzc2VzIGVjb3JlQ2xhc3M9InN0YW5kYXJkLmVjb3JlIy8vUG9wdWxhdGlvbk1vZGVsTGFiZWwiPgorICAgICAgPGdlbkZlYXR1cmVzIG5vdGlmeT0iZmFsc2UiIGNyZWF0ZUNoaWxkPSJmYWxzZSIgcHJvcGVydHlTb3J0Q2hvaWNlcz0idHJ1ZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFUmVmZXJlbmNlIHN0YW5kYXJkLmVjb3JlIy8vUG9wdWxhdGlvbk1vZGVsTGFiZWwvcG9wdWxhdGlvbkxhYmVsIi8+CisgICAgICA8Z2VuRmVhdHVyZXMgY3JlYXRlQ2hpbGQ9ImZhbHNlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVBdHRyaWJ1dGUgc3RhbmRhcmQuZWNvcmUjLy9Qb3B1bGF0aW9uTW9kZWxMYWJlbC9wb3B1bGF0aW9uSWRlbnRpZmllciIvPgorICAgIDwvZ2VuQ2xhc3Nlcz4KKyAgICA8Z2VuQ2xhc3NlcyBlY29yZUNsYXNzPSJzdGFuZGFyZC5lY29yZSMvL1N0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWwiPgorICAgICAgPGdlbkZlYXR1cmVzIG5vdGlmeT0iZmFsc2UiIGNyZWF0ZUNoaWxkPSJmYWxzZSIgcHJvcGVydHlTb3J0Q2hvaWNlcz0idHJ1ZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFUmVmZXJlbmNlIHN0YW5kYXJkLmVjb3JlIy8vU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxMYWJlbC9kZWx0YVZhbHVlIi8+CisgICAgICA8Z2VuRmVhdHVyZXMgbm90aWZ5PSJmYWxzZSIgY3JlYXRlQ2hpbGQ9ImZhbHNlIiBwcm9wZXJ0eVNvcnRDaG9pY2VzPSJ0cnVlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVSZWZlcmVuY2Ugc3RhbmRhcmQuZWNvcmUjLy9TdGFuZGFyZFBvcHVsYXRpb25Nb2RlbExhYmVsL3Byb2JlVmFsdWUiLz4KKyAgICAgIDxnZW5GZWF0dXJlcyBub3RpZnk9ImZhbHNlIiBjcmVhdGVDaGlsZD0iZmFsc2UiIHByb3BlcnR5U29ydENob2ljZXM9InRydWUiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RVJlZmVyZW5jZSBzdGFuZGFyZC5lY29yZSMvL1N0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWwvdGVtcFZhbHVlIi8+CisgICAgICA8Z2VuRmVhdHVyZXMgbm90aWZ5PSJmYWxzZSIgY3JlYXRlQ2hpbGQ9ImZhbHNlIiBwcm9wZXJ0eVNvcnRDaG9pY2VzPSJ0cnVlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVSZWZlcmVuY2Ugc3RhbmRhcmQuZWNvcmUjLy9TdGFuZGFyZFBvcHVsYXRpb25Nb2RlbExhYmVsL29yaWdpbmFsVmFsdWUiLz4KKyAgICAgIDxnZW5GZWF0dXJlcyBub3RpZnk9ImZhbHNlIiBjcmVhdGVDaGlsZD0iZmFsc2UiIHByb3BlcnR5U29ydENob2ljZXM9InRydWUiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RVJlZmVyZW5jZSBzdGFuZGFyZC5lY29yZSMvL1N0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWwvZXJyb3JTY2FsZSIvPgorICAgIDwvZ2VuQ2xhc3Nlcz4KKyAgICA8Z2VuQ2xhc3NlcyBpbWFnZT0iZmFsc2UiIGVjb3JlQ2xhc3M9InN0YW5kYXJkLmVjb3JlIy8vSW50ZWdyYXRpb25MYWJlbCIvPgorICAgIDxnZW5DbGFzc2VzIGltYWdlPSJmYWxzZSIgZWNvcmVDbGFzcz0ic3RhbmRhcmQuZWNvcmUjLy9JbnRlZ3JhdGlvbkxhYmVsVmFsdWUiLz4KKyAgICA8Z2VuQ2xhc3NlcyBpbWFnZT0iZmFsc2UiIGVjb3JlQ2xhc3M9InN0YW5kYXJkLmVjb3JlIy8vSW50ZWdyYXRpb25EZWNvcmF0b3IiLz4KKyAgICA8Z2VuQ2xhc3NlcyBlY29yZUNsYXNzPSJzdGFuZGFyZC5lY29yZSMvL1BvcHVsYXRpb25Nb2RlbExhYmVsVmFsdWUiLz4KKyAgICA8Z2VuQ2xhc3NlcyBlY29yZUNsYXNzPSJzdGFuZGFyZC5lY29yZSMvL1N0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWxWYWx1ZSI+CisgICAgICA8Z2VuRmVhdHVyZXMgY3JlYXRlQ2hpbGQ9ImZhbHNlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVBdHRyaWJ1dGUgc3RhbmRhcmQuZWNvcmUjLy9TdGFuZGFyZFBvcHVsYXRpb25Nb2RlbExhYmVsVmFsdWUvY291bnQiLz4KKyAgICAgIDxnZW5GZWF0dXJlcyBjcmVhdGVDaGlsZD0iZmFsc2UiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RUF0dHJpYnV0ZSBzdGFuZGFyZC5lY29yZSMvL1N0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWxWYWx1ZS9pbmNpZGVuY2UiLz4KKyAgICAgIDxnZW5GZWF0dXJlcyBjcmVhdGVDaGlsZD0iZmFsc2UiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RUF0dHJpYnV0ZSBzdGFuZGFyZC5lY29yZSMvL1N0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWxWYWx1ZS9iaXJ0aHMiLz4KKyAgICAgIDxnZW5GZWF0dXJlcyBjcmVhdGVDaGlsZD0iZmFsc2UiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RUF0dHJpYnV0ZSBzdGFuZGFyZC5lY29yZSMvL1N0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWxWYWx1ZS9kZWF0aHMiLz4KKyAgICAgIDxnZW5GZWF0dXJlcyBwcm9wZXJ0eT0iUmVhZG9ubHkiIGNyZWF0ZUNoaWxkPSJmYWxzZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFQXR0cmlidXRlIHN0YW5kYXJkLmVjb3JlIy8vU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxMYWJlbFZhbHVlL2RlbnNpdHkiLz4KKyAgICAgIDxnZW5PcGVyYXRpb25zIGVjb3JlT3BlcmF0aW9uPSJzdGFuZGFyZC5lY29yZSMvL1N0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWxWYWx1ZS9hZGp1c3REZWx0YSI+CisgICAgICAgIDxnZW5QYXJhbWV0ZXJzIGVjb3JlUGFyYW1ldGVyPSJzdGFuZGFyZC5lY29yZSMvL1N0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWxWYWx1ZS9hZGp1c3REZWx0YS92YWx1ZSIvPgorICAgICAgPC9nZW5PcGVyYXRpb25zPgorICAgIDwvZ2VuQ2xhc3Nlcz4KKyAgICA8Z2VuQ2xhc3NlcyBlY29yZUNsYXNzPSJzdGFuZGFyZC5lY29yZSMvL1N0b2NoYXN0aWNTdGFuZGFyZFBvcHVsYXRpb25Nb2RlbCI+CisgICAgICA8Z2VuRmVhdHVyZXMgY3JlYXRlQ2hpbGQ9ImZhbHNlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVBdHRyaWJ1dGUgc3RhbmRhcmQuZWNvcmUjLy9TdG9jaGFzdGljU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWwvZ2FpbiIvPgorICAgIDwvZ2VuQ2xhc3Nlcz4KKyAgICA8Z2VuQ2xhc3NlcyBlY29yZUNsYXNzPSJzdGFuZGFyZC5lY29yZSMvL0RlbW9ncmFwaGljUG9wdWxhdGlvbk1vZGVsIj4KKyAgICAgIDxnZW5GZWF0dXJlcyBjaGlsZHJlbj0idHJ1ZSIgY3JlYXRlQ2hpbGQ9ImZhbHNlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVSZWZlcmVuY2Ugc3RhbmRhcmQuZWNvcmUjLy9EZW1vZ3JhcGhpY1BvcHVsYXRpb25Nb2RlbC9wb3B1bGF0aW9uR3JvdXBzIi8+CisgICAgPC9nZW5DbGFzc2VzPgorICAgIDxnZW5DbGFzc2VzIGVjb3JlQ2xhc3M9InN0YW5kYXJkLmVjb3JlIy8vUG9wdWxhdGlvbkdyb3VwIj4KKyAgICAgIDxnZW5GZWF0dXJlcyBjcmVhdGVDaGlsZD0iZmFsc2UiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RUF0dHJpYnV0ZSBzdGFuZGFyZC5lY29yZSMvL1BvcHVsYXRpb25Hcm91cC9pZGVudGlmaWVyIi8+CisgICAgICA8Z2VuRmVhdHVyZXMgY3JlYXRlQ2hpbGQ9ImZhbHNlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVBdHRyaWJ1dGUgc3RhbmRhcmQuZWNvcmUjLy9Qb3B1bGF0aW9uR3JvdXAvZnJhY3Rpb24iLz4KKyAgICA8L2dlbkNsYXNzZXM+CisgICAgPGdlbkNsYXNzZXMgZWNvcmVDbGFzcz0ic3RhbmRhcmQuZWNvcmUjLy9Qb3B1bGF0aW9uSW5pdGlhbGl6ZXIiPgorICAgICAgPGdlbkZlYXR1cmVzIGNyZWF0ZUNoaWxkPSJmYWxzZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFQXR0cmlidXRlIHN0YW5kYXJkLmVjb3JlIy8vUG9wdWxhdGlvbkluaXRpYWxpemVyL3RhcmdldElTT0tleSIvPgorICAgICAgPGdlbkZlYXR1cmVzIGNyZWF0ZUNoaWxkPSJmYWxzZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFQXR0cmlidXRlIHN0YW5kYXJkLmVjb3JlIy8vUG9wdWxhdGlvbkluaXRpYWxpemVyL3BvcHVsYXRpb25JZGVudGlmaWVyIi8+CisgICAgPC9nZW5DbGFzc2VzPgorICAgIDxnZW5DbGFzc2VzIGVjb3JlQ2xhc3M9InN0YW5kYXJkLmVjb3JlIy8vU3RhbmRhcmRQb3B1bGF0aW9uSW5pdGlhbGl6ZXIiPgorICAgICAgPGdlbkZlYXR1cmVzIGNyZWF0ZUNoaWxkPSJmYWxzZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFQXR0cmlidXRlIHN0YW5kYXJkLmVjb3JlIy8vU3RhbmRhcmRQb3B1bGF0aW9uSW5pdGlhbGl6ZXIvaW5kaXZpZHVhbHMiLz4KKyAgICAgIDxnZW5GZWF0dXJlcyBjcmVhdGVDaGlsZD0iZmFsc2UiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RUF0dHJpYnV0ZSBzdGFuZGFyZC5lY29yZSMvL1N0YW5kYXJkUG9wdWxhdGlvbkluaXRpYWxpemVyL3VzZURlbnNpdHkiLz4KKyAgICA8L2dlbkNsYXNzZXM+CisgICAgPGdlbkNsYXNzZXMgZWNvcmVDbGFzcz0ic3RhbmRhcmQuZWNvcmUjLy9TZWFzb25hbFBvcHVsYXRpb25Nb2RlbCI+CisgICAgICA8Z2VuRmVhdHVyZXMgY3JlYXRlQ2hpbGQ9ImZhbHNlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVBdHRyaWJ1dGUgc3RhbmRhcmQuZWNvcmUjLy9TZWFzb25hbFBvcHVsYXRpb25Nb2RlbC9waGFzZSIvPgorICAgICAgPGdlbkZlYXR1cmVzIGNyZWF0ZUNoaWxkPSJmYWxzZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFQXR0cmlidXRlIHN0YW5kYXJkLmVjb3JlIy8vU2Vhc29uYWxQb3B1bGF0aW9uTW9kZWwvbW9kdWxhdGlvbkFtcGxpdHVkZSIvPgorICAgICAgPGdlbkZlYXR1cmVzIHByb3BlcnR5PSJSZWFkb25seSIgY3JlYXRlQ2hpbGQ9ImZhbHNlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVBdHRyaWJ1dGUgc3RhbmRhcmQuZWNvcmUjLy9TZWFzb25hbFBvcHVsYXRpb25Nb2RlbC9wZXJpb2QiLz4KKyAgICAgIDxnZW5GZWF0dXJlcyBjcmVhdGVDaGlsZD0iZmFsc2UiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RUF0dHJpYnV0ZSBzdGFuZGFyZC5lY29yZSMvL1NlYXNvbmFsUG9wdWxhdGlvbk1vZGVsL3VzZUxhdGl0dWRlIi8+CisgICAgPC9nZW5DbGFzc2VzPgorICAgIDxnZW5DbGFzc2VzIGltYWdlPSJmYWxzZSIgZWNvcmVDbGFzcz0ic3RhbmRhcmQuZWNvcmUjLy9FYXJ0aFNjaWVuY2VQb3B1bGF0aW9uSW5pdGlhbGl6ZXIiLz4KKyAgICA8Z2VuQ2xhc3NlcyBlY29yZUNsYXNzPSJzdGFuZGFyZC5lY29yZSMvL1lldGlQb3B1bGF0aW9uSW5pdGlhbGl6ZXIiLz4KKyAgICA8Z2VuQ2xhc3NlcyBlY29yZUNsYXNzPSJzdGFuZGFyZC5lY29yZSMvL01vc3F1aXRvUG9wdWxhdGlvbk1vZGVsIj4KKyAgICAgIDxnZW5GZWF0dXJlcyBjcmVhdGVDaGlsZD0iZmFsc2UiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RUF0dHJpYnV0ZSBzdGFuZGFyZC5lY29yZSMvL01vc3F1aXRvUG9wdWxhdGlvbk1vZGVsL3NjYWxpbmdGYWN0b3IiLz4KKyAgICAgIDxnZW5GZWF0dXJlcyBjcmVhdGVDaGlsZD0iZmFsc2UiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RUF0dHJpYnV0ZSBzdGFuZGFyZC5lY29yZSMvL01vc3F1aXRvUG9wdWxhdGlvbk1vZGVsL3RpbWVQZXJpb2QiLz4KKyAgICAgIDxnZW5GZWF0dXJlcyBjcmVhdGVDaGlsZD0iZmFsc2UiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RUF0dHJpYnV0ZSBzdGFuZGFyZC5lY29yZSMvL01vc3F1aXRvUG9wdWxhdGlvbk1vZGVsL21vcnRhbGl0eVJhdGUiLz4KKyAgICA8L2dlbkNsYXNzZXM+CisgIDwvZ2VuUGFja2FnZXM+Cis8L2dlbm1vZGVsOkdlbk1vZGVsPgpkaWZmIC0tZ2l0IGEvbW9kZWxzL3BvcHVsYXRpb25zL29yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy9wbHVnaW4ucHJvcGVydGllcyBiL21vZGVscy9wb3B1bGF0aW9ucy9vcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMvcGx1Z2luLnByb3BlcnRpZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWViZmU5MQotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9wb3B1bGF0aW9ucy9vcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMvcGx1Z2luLnByb3BlcnRpZXMKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvbW9kZWxzL3BvcHVsYXRpb25zL29yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy9wbHVnaW4ueG1sIGIvbW9kZWxzL3BvcHVsYXRpb25zL29yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy9wbHVnaW4ueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMwMzczYzcKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvcG9wdWxhdGlvbnMvb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzL3BsdWdpbi54bWwKQEAgLTAsMCArMSwxNjIgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+DQorPD9lY2xpcHNlIHZlcnNpb249IjMuMCI/Pg0KKw0KKzwhLS0NCisgPGNvcHlyaWdodD4NCisgPC9jb3B5cmlnaHQ+DQorDQorICRJZCQNCistLT4NCisNCis8cGx1Z2luPg0KKyAgIDxleHRlbnNpb24tcG9pbnQgaWQ9InBvcHVsYXRpb25tb2RlbCIgbmFtZT0iJUVQX1BvcHVsYXRpb25tb2RlbCIgc2NoZW1hPSJzY2hlbWEvcG9wdWxhdGlvbm1vZGVsLmV4c2QiLz4NCisgICA8ZXh0ZW5zaW9uLXBvaW50IGlkPSJwb3B1bGF0aW9uaW5pdGlhbGl6ZXIiIG5hbWU9IiVFUF9Qb3B1bGF0aW9uaW5pdGlhbGl6ZXIiIHNjaGVtYT0ic2NoZW1hL3BvcHVsYXRpb25pbml0aWFsaXplci5leHNkIi8+DQorICAgPGV4dGVuc2lvbiBwb2ludD0ib3JnLmVjbGlwc2UuZW1mLmVjb3JlLmdlbmVyYXRlZF9wYWNrYWdlIj4NCisgICAgICA8cGFja2FnZQ0KKyAgICAgICAgICAgIHVyaT0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL3BvcHVsYXRpb25tb2RlbHMvc3RhbmRhcmQiDQorICAgICAgICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZFBhY2thZ2UiDQorICAgICAgICAgICAgZ2VuTW9kZWw9Im1vZGVsL3N0YW5kYXJkLmdlbm1vZGVsIi8+DQorICAgPC9leHRlbnNpb24+DQorICAgPGV4dGVuc2lvbg0KKyAgICAgICAgIHBvaW50PSJvcmcuZWNsaXBzZS5lbWYuZWRpdC5pdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yaWVzIj4NCisgICAgICA8ZmFjdG9yeQ0KKyAgICAgICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQucHJvdmlkZXIuU3RhbmRhcmRJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSINCisgICAgICAgICAgICB1cmk9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9wb3B1bGF0aW9ubW9kZWxzL3N0YW5kYXJkIg0KKyAgICAgICAgICAgIHN1cHBvcnRlZFR5cGVzPQ0KKyAgICAgICAgICAgICAgIm9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklFZGl0aW5nRG9tYWluSXRlbVByb3ZpZGVyDQorICAgICAgICAgICAgICAgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVN0cnVjdHVyZWRJdGVtQ29udGVudFByb3ZpZGVyDQorICAgICAgICAgICAgICAgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVRyZWVJdGVtQ29udGVudFByb3ZpZGVyDQorICAgICAgICAgICAgICAgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1MYWJlbFByb3ZpZGVyDQorICAgICAgICAgICAgICAgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1Qcm9wZXJ0eVNvdXJjZSI+DQorICAgICAgPC9mYWN0b3J5Pg0KKyAgIDwvZXh0ZW5zaW9uPg0KKyAgIDxleHRlbnNpb24NCisgICAgICAgICBwb2ludD0ib3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnBvcHVsYXRpb25tb2RlbCI+DQorICAgICAgPGNsYXNzZGVmDQorICAgICAgICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5pbXBsLlN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsSW1wbCI+DQorICAgICAgPC9jbGFzc2RlZj4NCisgICAgICA8ZHVibGluX2NvcmUNCisgICAgICAgICAgICBjYXRlZ29yeV9pZD0iLyINCisgICAgICAgICAgICBjcmVhdG9yPSIlZGNfY3JlYXRvcl9lZGx1bmQiDQorICAgICAgICAgICAgZGVzY3JpcHRpb249IiVkY19kZXNjX1BNIg0KKyAgICAgICAgICAgIGlkZW50aWZpZXI9IiVkY19pZGVudGllciINCisgICAgICAgICAgICBsaWNlbnNlPSIlZGNfbGljZW5zZSINCisgICAgICAgICAgICBwdWJsaXNoZXI9IiVkY19wdWJsaXNoZXIiDQorICAgICAgICAgICAgc291cmNlPSIlZGNfU09VUkNFIg0KKyAgICAgICAgICAgIHRpdGxlPSIlZGNfdGl0bGVfUE0iPg0KKyAgICAgIDwvZHVibGluX2NvcmU+DQorICAgPC9leHRlbnNpb24+DQorICAgPGV4dGVuc2lvbg0KKyAgICAgICAgIHBvaW50PSJvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMucG9wdWxhdGlvbm1vZGVsIj4NCisgICAgICA8Y2xhc3NkZWYNCisgICAgICAgICAgICBjbGFzcz0ib3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLmltcGwuU3RvY2hhc3RpY1N0YW5kYXJkUG9wdWxhdGlvbk1vZGVsSW1wbCI+DQorICAgICAgPC9jbGFzc2RlZj4NCisgICAgICA8ZHVibGluX2NvcmUNCisgICAgICAgICAgICBjYXRlZ29yeV9pZD0iLyINCisgICAgICAgICAgICBjcmVhdG9yPSIlZGNfY3JlYXRvcl9lZGx1bmQiDQorICAgICAgICAgICAgZGVzY3JpcHRpb249IiVkY19kZXNjX1NQTSINCisgICAgICAgICAgICBpZGVudGlmaWVyPSIlZGNfaWRlbnRpZXIiDQorICAgICAgICAgICAgbGljZW5zZT0iJWRjX2xpY2Vuc2UiDQorICAgICAgICAgICAgcHVibGlzaGVyPSIlZGNfcHVibGlzaGVyIg0KKyAgICAgICAgICAgIHNvdXJjZT0iJWRjX1NPVVJDRSINCisgICAgICAgICAgICB0aXRsZT0iJWRjX3RpdGxlX1NQTSI+DQorICAgICAgPC9kdWJsaW5fY29yZT4NCisgICA8L2V4dGVuc2lvbj4NCisgICAgPGV4dGVuc2lvbg0KKyAgICAgICAgIHBvaW50PSJvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMucG9wdWxhdGlvbm1vZGVsIj4NCisgICAgICA8Y2xhc3NkZWYNCisgICAgICAgICAgICBjbGFzcz0ib3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLmltcGwuU2Vhc29uYWxQb3B1bGF0aW9uTW9kZWxJbXBsIj4NCisgICAgICA8L2NsYXNzZGVmPg0KKyAgICAgIDxkdWJsaW5fY29yZQ0KKyAgICAgICAgICAgIGNhdGVnb3J5X2lkPSIvIg0KKyAgICAgICAgICAgIGNyZWF0b3I9IiVkY19jcmVhdG9yX2thdWZtYW4iDQorICAgICAgICAgICAgZGVzY3JpcHRpb249IiVkY19kZXNjX1NlYXNvbmFsX1BNIg0KKyAgICAgICAgICAgIGlkZW50aWZpZXI9IiVkY19pZGVudGllciINCisgICAgICAgICAgICBsaWNlbnNlPSIlZGNfbGljZW5zZSINCisgICAgICAgICAgICBwdWJsaXNoZXI9IiVkY19wdWJsaXNoZXIiDQorICAgICAgICAgICAgc291cmNlPSIlZGNfU09VUkNFIg0KKyAgICAgICAgICAgIHRpdGxlPSIlZGNfdGl0bGVfU2Vhc29uYWxfUE0iPg0KKyAgICAgIDwvZHVibGluX2NvcmU+DQorICAgPC9leHRlbnNpb24+DQorICAgPGV4dGVuc2lvbg0KKyAgICAgICAgIHBvaW50PSJvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMucG9wdWxhdGlvbm1vZGVsIj4NCisgICAgICA8Y2xhc3NkZWYNCisgICAgICAgICAgICBjbGFzcz0ib3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLmltcGwuRGVtb2dyYXBoaWNQb3B1bGF0aW9uTW9kZWxJbXBsIj4NCisgICAgICA8L2NsYXNzZGVmPg0KKyAgICAgIDxkdWJsaW5fY29yZQ0KKyAgICAgICAgICAgIGNhdGVnb3J5X2lkPSIvIg0KKyAgICAgICAgICAgIGNyZWF0b3I9IiVkY19jcmVhdG9yX2VkbHVuZCINCisgICAgICAgICAgICBkZXNjcmlwdGlvbj0iJWRjX2Rlc2NfRFBNIg0KKyAgICAgICAgICAgIGlkZW50aWZpZXI9IiVkY19pZGVudGllciINCisgICAgICAgICAgICBsaWNlbnNlPSIlZGNfbGljZW5zZSINCisgICAgICAgICAgICBwdWJsaXNoZXI9IiVkY19wdWJsaXNoZXIiDQorICAgICAgICAgICAgc291cmNlPSIlZGNfU09VUkNFIg0KKyAgICAgICAgICAgIHRpdGxlPSIlZGNfdGl0bGVfRFBNIj4NCisgICAgICA8L2R1Ymxpbl9jb3JlPg0KKyAgIDwvZXh0ZW5zaW9uPg0KKyAgIDxleHRlbnNpb24NCisgICAgICAgICBwb2ludD0ib3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnBvcHVsYXRpb25tb2RlbCI+DQorICAgICAgPGNsYXNzZGVmDQorICAgICAgICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5pbXBsLkFnaW5nUG9wdWxhdGlvbk1vZGVsSW1wbCI+DQorICAgICAgPC9jbGFzc2RlZj4NCisgICAgICA8ZHVibGluX2NvcmUNCisgICAgICAgICAgICBjYXRlZ29yeV9pZD0iLyINCisgICAgICAgICAgICBjcmVhdG9yPSIlZGNfY3JlYXRvcl90aG9lbnMiDQorICAgICAgICAgICAgZGVzY3JpcHRpb249IiVkY19kZXNjX0FEUE0iDQorICAgICAgICAgICAgaWRlbnRpZmllcj0iJWRjX2lkZW50aWVyIg0KKyAgICAgICAgICAgIGxpY2Vuc2U9IiVkY19saWNlbnNlIg0KKyAgICAgICAgICAgIHB1Ymxpc2hlcj0iJWRjX3B1Ymxpc2hlciINCisgICAgICAgICAgICBzb3VyY2U9IiVkY19TT1VSQ0UiDQorICAgICAgICAgICAgdGl0bGU9IiVkY190aXRsZV9BRFBNIj4NCisgICAgICA8L2R1Ymxpbl9jb3JlPg0KKyAgIDwvZXh0ZW5zaW9uPg0KKyAgIDxleHRlbnNpb24NCisgICAgICAgICBwb2ludD0ib3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnBvcHVsYXRpb25tb2RlbCI+DQorICAgICAgPGNsYXNzZGVmDQorICAgICAgICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5pbXBsLk1vc3F1aXRvUG9wdWxhdGlvbk1vZGVsSW1wbCI+DQorICAgICAgPC9jbGFzc2RlZj4NCisgICAgICA8ZHVibGluX2NvcmUNCisgICAgICAgICAgICBjYXRlZ29yeV9pZD0iLyINCisgICAgICAgICAgICBjcmVhdG9yPSIlZGNfY3JlYXRvcl9zdGVtdGVhbSINCisgICAgICAgICAgICBkZXNjcmlwdGlvbj0iJWRjX2Rlc2NfTVBNIg0KKyAgICAgICAgICAgIGlkZW50aWZpZXI9IiVkY19pZGVudGllciINCisgICAgICAgICAgICBsaWNlbnNlPSIlZGNfbGljZW5zZSINCisgICAgICAgICAgICBwdWJsaXNoZXI9IiVkY19wdWJsaXNoZXIiDQorICAgICAgICAgICAgc291cmNlPSIlZGNfU09VUkNFIg0KKyAgICAgICAgICAgIHRpdGxlPSIlZGNfdGl0bGVfTVBNIj4NCisgICAgICA8L2R1Ymxpbl9jb3JlPg0KKyAgIDwvZXh0ZW5zaW9uPg0KKyAgIDxleHRlbnNpb24NCisgICAgICAgICBwb2ludD0ib3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnBvcHVsYXRpb25pbml0aWFsaXplciI+DQorICAgICAgPGNsYXNzZGVmDQorICAgICAgICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5pbXBsLlN0YW5kYXJkUG9wdWxhdGlvbkluaXRpYWxpemVySW1wbCI+DQorICAgICAgPC9jbGFzc2RlZj4NCisgICAgICA8ZHVibGluX2NvcmUNCisgICAgICAgICAgICBjYXRlZ29yeV9pZD0iLyINCisgICAgICAgICAgICBjcmVhdG9yPSIlZGNfY3JlYXRvcl9lZGx1bmQiDQorICAgICAgICAgICAgaWRlbnRpZmllcj0iJWRjX2luaXRfaWRlbnRpZXIiDQorICAgICAgICAgICAgbGljZW5zZT0iJWRjX2xpY2Vuc2UiDQorICAgICAgICAgICAgcHVibGlzaGVyPSIlZGNfcHVibGlzaGVyIg0KKyAgICAgICAgICAgIHNvdXJjZT0iJWRjX1BvcF9pbml0X1NPVVJDRSINCisgICAgICAgICAgICBkZXNjcmlwdGlvbj0iJWRjX2Rlc2NfUG9wX0luaXQiDQorICAgICAgICAgICAgdGl0bGU9IiVkY190aXRsZV9Qb3BfSW5pdCI+DQorICAgICAgPC9kdWJsaW5fY29yZT4NCisgICA8L2V4dGVuc2lvbj4NCisgIA0KKyAgIDxleHRlbnNpb24NCisgICAgICAgICBwb2ludD0ib3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnBvcHVsYXRpb25pbml0aWFsaXplciI+DQorICAgICAgPGNsYXNzZGVmDQorICAgICAgICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5pbXBsLllldGlQb3B1bGF0aW9uSW5pdGlhbGl6ZXJJbXBsIj4NCisgICAgICA8L2NsYXNzZGVmPg0KKyAgICAgIDxkdWJsaW5fY29yZQ0KKyAgICAgICAgICAgIGNhdGVnb3J5X2lkPSIvIg0KKyAgICAgICAgICAgIGNyZWF0b3I9IiVkY19jcmVhdG9yX2VkbHVuZCINCisgICAgICAgICAgICBpZGVudGlmaWVyPSIlZGNfaW5pdF9pZGVudGllciINCisgICAgICAgICAgICBsaWNlbnNlPSIlZGNfbGljZW5zZSINCisgICAgICAgICAgICBwdWJsaXNoZXI9IiVkY19wdWJsaXNoZXIiDQorICAgICAgICAgICAgc291cmNlPSIlZGNfUG9wX2luaXRfU09VUkNFIg0KKyAgICAgICAgICAgIGRlc2NyaXB0aW9uPSIlZGNfZGVzY19ZZXRpX0luaXQiDQorICAgICAgICAgICAgdGl0bGU9IiVkY190aXRsZV9ZZXRpX0luaXQiPg0KKyAgICAgIDwvZHVibGluX2NvcmU+DQorICAgPC9leHRlbnNpb24+DQorPC9wbHVnaW4+DQpkaWZmIC0tZ2l0IGEvbW9kZWxzL3BvcHVsYXRpb25zL29yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy9wbHVnaW5fZGUucHJvcGVydGllcyBiL21vZGVscy9wb3B1bGF0aW9ucy9vcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMvcGx1Z2luX2RlLnByb3BlcnRpZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWFhMDc4NAotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9wb3B1bGF0aW9ucy9vcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMvcGx1Z2luX2RlLnByb3BlcnRpZXMKQEAgLTAsMCArMSwxOTUgQEAKKyMvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIyAqIENvcHlyaWdodCAoYykgMjAwOSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyMgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisjICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisjICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyMgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorIyAqCisjICogQ29udHJpYnV0b3JzOgorIyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorIyBUbyBjb2RlIGRldmVsb3BlcjoKKyMgICBEbyBOT1QgY2hhbmdlIHRoZSBwcm9wZXJ0aWVzIGJldHdlZW4gdGhpcyBsaW5lIGFuZCB0aGUKKyMgICAiJSUlIEVORCBPRiBUUkFOU0xBVEVEIFBST1BFUlRJRVMgJSUlIiBsaW5lLgorIyAgIE1ha2UgYSBuZXcgcHJvcGVydHkgbmFtZSwgYXBwZW5kIHRvIHRoZSBlbmQgb2YgdGhlIGZpbGUgYW5kIGNoYW5nZQorIyAgIHRoZSBjb2RlIHRvIHVzZSB0aGUgbmV3IHByb3BlcnR5LgorIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisjICUlJSBFTkQgT0YgVFJBTlNMQVRFRCBQUk9QRVJUSUVTICUlJQorIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisKK3BsdWdpbk5hbWU9U1RFTSBCZXZcdTAwZjZsa2VydW5nc21vZGVsbGUtTW9kZWxsCitwcm92aWRlck5hbWU9RWNsaXBzZS5vcmcKKworZGNfY3JlYXRvcl9lZGx1bmQ9RWRsdW5kCitkY19jcmVhdG9yX2thdWZtYW49S2F1Zm1hbgorZGNfY3JlYXRvcl9zdGVtdGVhbT1TVEVNIFRlYW0KK2RjX2NyZWF0b3JfdGhvZW5zPVRob2VucworZGNfaWRlbnRpZXI9U1RFTSBCZXZcdTAwZjZsa2VydW5nc21vZGVsbAorZGNfaW5pdF9pZGVudGllcj1TVEVNIEJldlx1MDBmNmxrZXJ1bmdzaW5pdGlhbGlzaWVyZXIKK2RjX2xpY2Vuc2U9RWNsaXBzZSBQdWJsaWMgTGljZW5zZSAoRVBMKQorZGNfcHVibGlzaGVyPURpZSBFY2xpcHNlIEZvdW5kYXRpb24KK2RjX1NPVVJDRT1odHRwOi8vd2lraS5lY2xpcHNlLm9yZy9BdmFpbGFibGVfTW9kZWxzI01vZGVsc19vZl9Qb3B1bGF0aW9uICAgKGFuZCByZWZlcmVuY2VzIHRoZXJlLWluKQorZGNfUG9wX2luaXRfU09VUkNFPWh0dHA6Ly93aWtpLmVjbGlwc2Uub3JnL0luaXRpYWxpemluZ19hX1BvcHVsYXRpb24gKHVuZCBSZWZlcmVuemVuIGdpYnQgZXMtaW4pCitkY190aXRsZV9QTT1TdGFuZGFyZC1CZXZcdTAwZjZsa2VydW5nc21vZGVsbAorZGNfZGVzY19QTT1FaW4gZWluZmFjaGVzIE1vZGVsbCwgd2VsY2hlcyBrb25zdGFudGUgR2VidXJ0ZW4tdW5kIFN0ZXJiZXJhdGVuIHVudGVyc3RcdTAwZmN0enQKK2RjX3RpdGxlX0RQTT1EZW1vZ3JhcGhpc2NoZXMgQmV2XHUwMGY2bGtlcnVuZ3Ntb2RlbGwKK2RjX2Rlc2NfRFBNPUVpbiBkZW1vZ3JhZmlzY2hlcyBCZXZcdTAwZjZsa2VydW5nc21vZGVsbCwgd2VsY2hlcyBkaWUgVW50ZXJ0ZWlsdW5nIGRlciBCZXZcdTAwZjZsa2VydW5nIGluIFVudGVyZ3J1cHBlbiBiYXNpZXJlbmQgYXVmIEFsdGVyLCBHZXNjaGxlY2h0LCBldGMuIHVudGVyc3RcdTAwZmN0enQKK2RjX3RpdGxlX1NQTT1TdG9jaGFzdGlzY2hlcyBCZXZcdTAwZjZsa2VydW5nc21vZGVsbAorZGNfZGVzY19TUE09RWluIHN0b2NoYXN0aXNjaGVzIEJldlx1MDBmNmxrZXJ1bmdzbW9kZWxsLCBkYXMga29uc3RhbnRlIEdlYnVydGVuLXVuZCBTdGVyYmVyYXRlbiB1bmQgZGFzIEhpbnp1Zlx1MDBmY2dlbiB2b24gUmF1c2NoZW4gdW50ZXJzdFx1MDBmY3R6dC4KK2RjX3RpdGxlX1NlYXNvbmFsX1BNPVNhaXNvbmFsZXMgQmV2XHUwMGY2bGtlcnVuZ3Ntb2RlbGwKK2RjX2Rlc2NfU2Vhc29uYWxfUE09RWluIFNhaXNvbmFsZXMgQmV2XHUwMGY2bGtlcnVuZ3Ntb2RlbGwgblx1MDBmY3R6bGljaCB1bSBJbnNla3RlbiB6dSBtb2RlbGxpZXJlbi4gQmlldGV0IFNhaXNvbmFsZSBWYXJpYXRpb24gYmFzaWVyZW5kIGF1ZiBkZW0gQnJlaXRlbmdyYWQuCitkY190aXRsZV9BRFBNPUFsdGVuZGVzIEJldlx1MDBmNmxrZXJ1bmdzbW9kZWxsCitkY19kZXNjX0FEUE09RWluIEJldlx1MDBmNmxrZXJ1bmdzbW9kZWxsLCB3ZWxjaGVzIGRhcyBBbHRlcm4gZGVyIEJldlx1MDBmNmxrZXJ1bmcgdW5kIGRpZSBVbnRlcnRlaWx1bmcgaW4gVW50ZXJncnVwcGVuIGJhc2llcmVuZCBhdWYgQWx0ZXIsIEdlc2NobGVjaHQsIGV0Yy4gdW50ZXJzdFx1MDBmY3R6dAorZGNfdGl0bGVfTVBNPU1vc3F1aXRvLUJldlx1MDBmNmxrZXJ1bmdzbW9kZWxsCitkY19kZXNjX01QTT1FaW4gTW9za2l0byBCZXZcdTAwZjZsa2VydW5nc21vZGVsbCwgZGFzIGF1ZiB2ZXJzY2hpZWRlbmUgQXJ0ZW4gdm9uIFN0ZWNobVx1MDBmY2NrZW4gYWJnZXN0aW1tdCB3ZXJkZW4ga2Fubi4gRGFzIE1vZGVsbCB2ZXJ3ZW5kZXQgZGllIGdlb3dpc3NlbnNjaGFmdGxpY2hlbiBEYXRlbiBpbiBTVEVNLgorZGNfZGVzY19Qb3BfSW5pdD1Jbml0aWFsaXNpZXJ0IGVpbmUgYmVzdGltbXRlIEJldlx1MDBmNmxrZXJ1bmcgbWl0IGVpbmVtIGJlc3RpbW10ZW4gV2VydCBmXHUwMGZjciBqZWRlbiBPcnQgb2RlciBlaW5lIEdydXBwZSB2b24gT3J0ZW4KK2RjX3RpdGxlX1BvcF9Jbml0PUJldlx1MDBmNmxrZXJ1bmdzaW5pdGlhbGlzaWVyZXIKK2RjX2Rlc2NfWWV0aV9Jbml0PURlciBZZXRpLUJldlx1MDBmNmxrZXJ1bmdzLUluaXRpYWxpc2llcmVyIGlzdCB3aXJrbGljaCBlaW4gV2VnIGRhcyBIXHUwMGY2aGVucHJvZmlsIHp1IHZpc3VhbGlzaWVyZW4uIEVzIGdpYnQga2VpbmUgIllldGlzIiwgYWJlciBpbiBkaWVzZW0gIk1vZGVsbCIgaXN0IGRpZSBCZXZcdTAwZjZsa2VydW5nIHByb3BvcnRpb25hbCB6dXIgSFx1MDBmNmhlLgorZGNfdGl0bGVfWWV0aV9Jbml0PVlldGkgQmV2XHUwMGY2bGtlcnVuZ3Npbml0aWFsaXNpZXJlcgorICAgICAgICAgCitfVUlfQ3JlYXRlQ2hpbGRfdGV4dD17MH0KK19VSV9DcmVhdGVDaGlsZF90ZXh0Mj17MX0gezB9CitfVUlfQ3JlYXRlQ2hpbGRfdGV4dDM9ezF9CitfVUlfQ3JlYXRlQ2hpbGRfdG9vbHRpcD1OZXVlcyB7MH0gdW50ZXIgezF9IEZlYXR1cmUgZXJzdGVsbGVuCitfVUlfQ3JlYXRlQ2hpbGRfZGVzY3JpcHRpb249TmV1ZXMgS2luZCB2b20gVHlwIHswfSBmXHUwMGZjciBkYXMgezF9IE1lcmttYWwgZGVyIGF1c2dld1x1MDBlNGhsdGVuIHsyfSBlcnN0ZWxsZW4KK19VSV9DcmVhdGVTaWJsaW5nX2Rlc2NyaXB0aW9uPU5ldWVzIEdlc2Nod2lzdGVydGVpbCB2b20gVHlwIHswfSBmXHUwMGZjciBkZW4gYXVzZ2V3XHUwMGU0aGx0ZW4gezJ9IHVudGVyIGRlbSB7MX0gTWVya21hbCBkZXMgRWx0ZXJudGVpbCBlcnN0ZWxsZW4KKworX1VJX1Byb3BlcnR5RGVzY3JpcHRvcl9kZXNjcmlwdGlvbj17MH0gdm9uIHsxfQorCitfVUlfUG9wdWxhdGlvbk1vZGVsX3R5cGU9QmV2XHUwMGY2bGtlcnVuZ3Ntb2RlbGwKK19VSV9TdGFuZGFyZFBvcHVsYXRpb25Nb2RlbF90eXBlPUJldlx1MDBmNmxrZXJ1bmdzbW9kZWxsCitfVUlfVW5rbm93bl90eXBlPU9iamVrdAorCitfVUlfVW5rbm93bl9kYXRhdHlwZT1XZXJ0CisKK19VSV9Qb3B1bGF0aW9uTW9kZWxfcG9wdWxhdGlvbklkZW50aWZpZXJfZmVhdHVyZT1CZXZcdTAwZjZsa2VydW5nc2JlemVpY2huZXIKK19VSV9TdGFuZGFyZFBvcHVsYXRpb25Nb2RlbF9iaXJ0aFJhdGVfZmVhdHVyZT1HZWJ1cnRlbnJhdGUKK19VSV9TdGFuZGFyZFBvcHVsYXRpb25Nb2RlbF9kZWF0aFJhdGVfZmVhdHVyZT1TdGVyYmxpY2hrZWl0CitfVUlfVW5rbm93bl9mZWF0dXJlPU5pY2h0IHNwZXppZml6aWVydAorCisKK19VSV9TdGFuZGFyZFBvcHVsYXRpb25Nb2RlbF90aW1lUGVyaW9kX2ZlYXR1cmU9WmVpdHJhdW0KK19VSV9Qb3B1bGF0aW9uTW9kZWxMYWJlbF90eXBlPUJldlx1MDBmNmxrZXJ1bmdzbW9kZWxsLUxhYmVsCitfVUlfU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxMYWJlbF90eXBlPUJldlx1MDBmNmxrZXJ1bmdzbW9kZWxsLUxhYmVsCitfVUlfSW50ZWdyYXRpb25MYWJlbF90eXBlPUludGVncmF0aW9uc2xhYmVsCitfVUlfSW50ZWdyYXRpb25EZWNvcmF0b3JfdHlwZT1JbnRlZ3JhdGlvbnNkZWtvcmF0b3IKK19VSV9TdGFuZGFyZFBvcHVsYXRpb25Nb2RlbExhYmVsX2RlbHRhVmFsdWVfZmVhdHVyZT1EZWx0YS1XZXJ0CitfVUlfU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxMYWJlbF9wcm9iZVZhbHVlX2ZlYXR1cmU9UHJvYmUtV2VydAorX1VJX1N0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWxfdGVtcFZhbHVlX2ZlYXR1cmU9VGVtcC1XZXJ0CitfVUlfU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxMYWJlbF9vcmlnaW5hbFZhbHVlX2ZlYXR1cmU9VXJzcHJcdTAwZmNuZ2xpY2hlciBXZXJ0CitfVUlfU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxMYWJlbF9lcnJvclNjYWxlX2ZlYXR1cmU9R3JcdTAwZjZcdTAwZGZlbm9yZG51bmcgZGVzIEZlaGxlcnMKK19VSV9Qb3B1bGF0aW9uTW9kZWxWYWx1ZV90eXBlPUJldlx1MDBmNmxrZXJ1bmdzbW9kZWxsLVdlcnQKK19VSV9TdGFuZGFyZFBvcHVsYXRpb25Nb2RlbExhYmVsVmFsdWVfdHlwZT1CZXZcdTAwZjZsa2VydW5nc21vZGVsbC1MYWJlbHdlcnQKK19VSV9Qb3B1bGF0aW9uTW9kZWxMYWJlbFZhbHVlX3R5cGU9QmV2XHUwMGY2bGtlcnVuZ3Ntb2RlbGwtTGFiZWx3ZXJ0CitfVUlfQXJlYUxhYmVsX3R5cGU9RmxcdTAwZTRjaGVubGFiZWwKK19VSV9BcmVhTGFiZWxWYWx1ZV90eXBlPVdlcnQgZlx1MDBmY3IgRmxcdTAwZTRjaGVubGFiZWwKK19VSV9Db21tb25Cb3JkZXJSZWxhdGlvbnNoaXBMYWJlbF90eXBlPUNvbW1vbiBCb3JkZXIgUmVsYXRpb25zaGlwIExhYmVsCitfVUlfQ29tbW9uQm9yZGVyUmVsYXRpb25zaGlwTGFiZWxWYWx1ZV90eXBlPUNvbW1vbiBCb3JkZXIgUmVsYXRpb25zaGlwIExhYmVsIFZhbHVlCitfVUlfUGh5c2ljYWxSZWxhdGlvbnNoaXBMYWJlbF90eXBlPVBoeXNpa2FsaXNjaGVzIEJlemllaHVuZ3NsYWJlbAorX1VJX1BvcHVsYXRpb25MYWJlbF90eXBlPUJldlx1MDBmNmxrZXJ1bmdzbGFiZWwKK19VSV9Qb3B1bGF0aW9uTGFiZWxWYWx1ZV90eXBlPUJldlx1MDBmNmxrZXJ1bmdzbGFiZWx3ZXJ0CitfVUlfUmVsYXRpdmVQaHlzaWNhbFJlbGF0aW9uc2hpcExhYmVsX3R5cGU9UmVsYXRpdmVzIHBoeXNpc2NoZXMgQmV6aWVodW5nc2xhYmVsCitfVUlfUmVsYXRpdmVQaHlzaWNhbFJlbGF0aW9uc2hpcExhYmVsVmFsdWVfdHlwZT1SZWxhdGl2ZXIgcGh5c2lzY2hlciBCZXppZWh1bmdzbGFiZWx3ZXJ0CitfVUlfVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxfdHlwZT1WZXJrZWhycy1CZXppZWh1bmdzLUxhYmVsCitfVUlfVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxWYWx1ZV90eXBlPVZlcmtlaHJzLUJlemllaHVuZ3MtTGFiZWwtV2VydAorX1VJX1BoeXNpY2FsUmVsYXRpb25zaGlwTGFiZWxWYWx1ZV90eXBlPVBoeXNpa2FsaXNjaGVzIEJlemllaHVuZ3NsYWJlbHdlcnQKK19VSV9Sb2FkVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxfdHlwZT1TdHJhXHUwMGRmZW52ZXJrZWhyLUJlemllaHVuZ3NsYWJlbAorX1VJX1JvYWRUcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbFZhbHVlX3R5cGU9U3RyYVx1MDBkZmVudmVya2Voci1CZXppZWh1bmdzbGFiZWx3ZXJ0CitfVUlfUG9wdWxhdGlvbk1vZGVsTGFiZWxfcG9wdWxhdGlvbkxhYmVsX2ZlYXR1cmU9QmV2XHUwMGY2bGtlcnVuZ3NsYWJlbAorX1VJX0FyZWFMYWJlbF9jdXJyZW50QXJlYVZhbHVlX2ZlYXR1cmU9RGVyemVpdGlnZXIgR2ViaWV0c3dlcnQKK19VSV9BcmVhTGFiZWxWYWx1ZV9hcmVhX2ZlYXR1cmU9RmxcdTAwZTRjaGUKK19VSV9Db21tb25Cb3JkZXJSZWxhdGlvbnNoaXBMYWJlbFZhbHVlX2JvcmRlckxlbmd0aF9mZWF0dXJlPUdyZW56bFx1MDBlNG5nZQorX1VJX1BvcHVsYXRpb25MYWJlbF9wb3B1bGF0aW9uSWRlbnRpZmllcl9mZWF0dXJlPUJldlx1MDBmNmxrZXJ1bmdzYmV6ZWljaG5lcgorX1VJX1BvcHVsYXRpb25MYWJlbF9uYW1lX2ZlYXR1cmU9TmFtZQorX1VJX1BvcHVsYXRpb25MYWJlbF9jdXJyZW50UG9wdWxhdGlvblZhbHVlX2ZlYXR1cmU9RGVyemVpdGlnZXIgQmV2XHUwMGY2bGtlcnVuZ3N3ZXJ0CitfVUlfUG9wdWxhdGlvbkxhYmVsX3BvcHVsYXRlZEFyZWFfZmVhdHVyZT1CZXdvaG50ZXMgR2ViaWV0CitfVUlfUG9wdWxhdGlvbkxhYmVsX3ZhbGlkWWVhcl9mZWF0dXJlPUdcdTAwZmNsdGlnZXMgSmFocgorX1VJX1BvcHVsYXRpb25MYWJlbFZhbHVlX2NvdW50X2ZlYXR1cmU9QW56YWhsCitfVUlfUmVsYXRpdmVQaHlzaWNhbFJlbGF0aW9uc2hpcExhYmVsX2N1cnJlbnRSZWxhdGlvbnNoaXBfZmVhdHVyZT1EZXJ6ZWl0aWdlciBCZXppZWh1bmcKK19VSV9SZWxhdGl2ZVBoeXNpY2FsUmVsYXRpb25zaGlwTGFiZWxWYWx1ZV9hZGphY2VudF9mZWF0dXJlPUFuZ3JlbnplbmQKK19VSV9SZWxhdGl2ZVBoeXNpY2FsUmVsYXRpb25zaGlwTGFiZWxWYWx1ZV9yZWxhdGlvbnNoaXBfZmVhdHVyZT1CZXppZWh1bmcKK19VSV9UcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbF90cmFuc3BvcnRNb2RlX2ZlYXR1cmU9VmVya2VocnMtTW9kdXMKK19VSV9UcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbF9wb3B1bGF0aW9uSWRlbnRpZmllcl9mZWF0dXJlPUJldlx1MDBmNmxrZXJ1bmdzYmV6ZWljaG5lcgorX1VJX1RyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsX3RyYW5zcG9ydElkZW50aWZpZXJfZmVhdHVyZT1WZXJrZWhycy1JZGVudGlmaXppZXJlcgorX1VJX1RyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsX2N1cnJlbnRUcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbFZhbHVlX2ZlYXR1cmU9RGVyemVpdGlnZXIgVHJhbnNwb3J0YmV6aWVodW5nLUxhYmVsLVdlcnQKK19VSV9UcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbF9yYXRlVGltZVBlcmlvZF9mZWF0dXJlPVplaXRkYXVlciBSYXRlCitfVUlfVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxfZGVwYXJ0dXJlQ2FwYWNpdHlfZmVhdHVyZT1LYXBheml0XHUwMGU0dCBmXHUwMGZjciBBdXNyZWlzZW5kZQorX1VJX1RyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsX21heGltdW1EZXBhcnR1cmVDYXBhY2l0eV9mZWF0dXJlPU1heGltYWxlIEthcGF6aXRcdTAwZTR0IGZcdTAwZmNyIEFicmVpc2VuCitfVUlfVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxfY2FwYWNpdHlfZmVhdHVyZT1LYXBheml0XHUwMGU0dAorX1VJX1RyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsX21heGltdW1DYXBhY2l0eV9mZWF0dXJlPU1heGltYWxlIEthcGF6aXRcdTAwZTR0CitfVUlfVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxfdHJhbnNpdFRpbWVfZmVhdHVyZT1EdXJjaHJlaXNlLVplaXQKK19VSV9UcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbF9zdGFydFVwRGVsYXlfZmVhdHVyZT1TdGFydC1WZXJ6XHUwMGY2Z2VydW5nCitfVUlfVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxWYWx1ZV9hdmFpbGFibGVEZXBhcnR1cmVDYXBhY2l0eVByb3BvcnRpb25fZmVhdHVyZT1FcmhcdTAwZTRsdGxpY2ggRGVwYXJ0dXJlIENhcGFjaXR5IEFudGVpbAorX1VJX1JvYWRUcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbFZhbHVlX3JvYWROYW1lX2ZlYXR1cmU9U3RyYVx1MDBkZmVubmFtZQorX1VJX1JvYWRUcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbFZhbHVlX3JvYWRDbGFzc19mZWF0dXJlPVN0cmFcdTAwZGZlbmtsYXNzZQorX1VJX1JvYWRUcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbFZhbHVlX251bWJlckNyb3NzaW5nc19mZWF0dXJlPUFuemFobCBLcmV1enVuZ2VuCitfVUlfUmVsYXRpdmVQaHlzaWNhbFJlbGF0aW9uc2hpcF9VbnNwZWNpZmllZF9saXRlcmFsPU5pY2h0IHNwZXppZml6aWVydAorX1VJX1JlbGF0aXZlUGh5c2ljYWxSZWxhdGlvbnNoaXBfQWJvdmVfbGl0ZXJhbD1PYmVuCitfVUlfUmVsYXRpdmVQaHlzaWNhbFJlbGF0aW9uc2hpcF9CZWxvd19saXRlcmFsPVVudGVuCitfVUlfUmVsYXRpdmVQaHlzaWNhbFJlbGF0aW9uc2hpcF9SaWdodE9mX2xpdGVyYWw9UmVjaHRzVm9uCitfVUlfUmVsYXRpdmVQaHlzaWNhbFJlbGF0aW9uc2hpcF9MZWZ0T2ZfbGl0ZXJhbD1MaW5rc1ZvbgorX1VJX1JlbGF0aXZlUGh5c2ljYWxSZWxhdGlvbnNoaXBfTm9ydGhPZl9saXRlcmFsPU5cdTAwZjZyZGxpY2hWb24KK19VSV9SZWxhdGl2ZVBoeXNpY2FsUmVsYXRpb25zaGlwX1NvdXRoT2ZfbGl0ZXJhbD1TXHUwMGZjZGxpY2hWb24KK19VSV9SZWxhdGl2ZVBoeXNpY2FsUmVsYXRpb25zaGlwX1dlc3RPZl9saXRlcmFsPVdlc3RsaWNoVm9uCitfVUlfUmVsYXRpdmVQaHlzaWNhbFJlbGF0aW9uc2hpcF9FYXN0T2ZfbGl0ZXJhbD1cdTAwZDZzdGxpY2hWb24KK19VSV9SZWxhdGl2ZVBoeXNpY2FsUmVsYXRpb25zaGlwX0NvbnRhaW5zX2xpdGVyYWw9RW50aFx1MDBlNGx0CitfVUlfUmVsYXRpdmVQaHlzaWNhbFJlbGF0aW9uc2hpcF9Db250YWluZWRCeV9saXRlcmFsPUNvbnRhaW5lZEJ5CitfVUlfUmVsYXRpdmVQaHlzaWNhbFJlbGF0aW9uc2hpcF9PdmVybGFwc19saXRlcmFsPVx1MDBkY2JlcmxhcHB1bmdlbgorX1VJX1JlbGF0aXZlUGh5c2ljYWxSZWxhdGlvbnNoaXBfT3JiaXRzX2xpdGVyYWw9T3JiaXRzCitfVUlfVHJhbnNwb3J0TW9kZV91bnNwZWNpZmllZF9saXRlcmFsPW5pY2h0IHNwZXppZml6aWVydAorX1VJX1RyYW5zcG9ydE1vZGVfYWlyX2xpdGVyYWw9THVmdAorX1VJX1RyYW5zcG9ydE1vZGVfcm9hZF9saXRlcmFsPVN0cmFcdTAwZGZlCitfVUlfVHJhbnNwb3J0TW9kZV9yYWlsX2xpdGVyYWw9U2NoaWVuZW4KK19VSV9UcmFuc3BvcnRNb2RlX21hcmluZV9saXRlcmFsPU1hcmluZQorX1VJX1RyYW5zcG9ydE1vZGVfZm9vdF9saXRlcmFsPUZ1XHUwMGRmCitfVUlfU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxMYWJlbFZhbHVlX2NvdW50X2ZlYXR1cmU9QW56YWhsCitfVUlfSW50ZWdyYXRpb25MYWJlbFZhbHVlX3R5cGU9SW50ZWdyYXRpb25zbGFiZWx3ZXJ0CitfVUlfU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxMYWJlbFZhbHVlX25leHRWYWx1ZVZhbGlkX2ZlYXR1cmU9Tlx1MDBlNGNoc3RlciBnXHUwMGZjbHRpZ2VyIFdlcnQKK19VSV9TdGFuZGFyZFBvcHVsYXRpb25Nb2RlbExhYmVsVmFsdWVfaW5jaWRlbmNlX2ZlYXR1cmU9SW56aWRlbnoKK19VSV9Qb3B1bGF0aW9uTW9kZWxfbmFtZV9mZWF0dXJlPU5hbWUKK19VSV9TdGFuZGFyZFBvcHVsYXRpb25Nb2RlbExhYmVsVmFsdWVfYmlydGhzX2ZlYXR1cmU9R2VidXJ0ZW4KK19VSV9TdGFuZGFyZFBvcHVsYXRpb25Nb2RlbExhYmVsVmFsdWVfZGVhdGhzX2ZlYXR1cmU9VG9kZXNmXHUwMGU0bGxlCitfVUlfU3RvY2hhc3RpY1N0YW5kYXJkUG9wdWxhdGlvbk1vZGVsX3R5cGU9U3RvY2hhc3Rpc2NoZXMgU3RhbmRhcmQtQmV2XHUwMGY2bGtlcnVuZ3Ntb2RlbGwKK19VSV9TdG9jaGFzdGljU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxfZ2Fpbl9mZWF0dXJlPVp1bmFobWUKK19VSV9TdGFuZGFyZFBvcHVsYXRpb25Nb2RlbExhYmVsVmFsdWVfZGVuc2l0eV9mZWF0dXJlPURpY2h0ZQorX1VJX0RlbW9ncmFwaGljUG9wdWxhdGlvbk1vZGVsX3R5cGU9RGVtb2dyYXBoaXNjaGVzIEJldlx1MDBmNmxrZXJ1bmdzbW9kZWxsCitfVUlfUG9wdWxhdGlvbkdyb3VwX3R5cGU9QmV2XHUwMGY2bGtlcnVuZ3NncnVwcGUKK19VSV9EZW1vZ3JhcGhpY1BvcHVsYXRpb25Nb2RlbF9wb3B1bGF0aW9uR3JvdXBzX2ZlYXR1cmU9QmV2XHUwMGY2bGtlcnVuZ3NncnVwcGVuCitfVUlfUG9wdWxhdGlvbkdyb3VwX2lkZW50aWZpZXJfZmVhdHVyZT1CZXplaWNobmVyCitfVUlfUG9wdWxhdGlvbkdyb3VwX2ZyYWN0aW9uX2ZlYXR1cmU9QW50ZWlsCitfVUlfUG9wdWxhdGlvbk1vZGVsTGFiZWxfcG9wdWxhdGlvbklkZW50aWZpZXJfZmVhdHVyZT1CZXZcdTAwZjZsa2VydW5nc2JlemVpY2huZXIKK19VSV9Qb3B1bGF0aW9uTW9kZWxfdGFyZ2V0VVJJX2ZlYXR1cmU9WmllbC1VUkkKK19VSV9Qb3B1bGF0aW9uTW9kZWxfdGFyZ2V0SVNPS2V5X2ZlYXR1cmU9WmllbC1JU08tU2NobFx1MDBmY3NzZWwKK19VSV9Qb3B1bGF0aW9uSW5pdGlhbGl6ZXJfdHlwZT1CZXZcdTAwZjZsa2VydW5nc2luaXRpYWxpc2llcmVyCitfVUlfU3RhbmRhcmRQb3B1bGF0aW9uSW5pdGlhbGl6ZXJfdHlwZT1CZXZcdTAwZjZsa2VydW5nc2luaXRpYWxpc2llcmVyCitfVUlfUG9wdWxhdGlvbkluaXRpYWxpemVyX3RhcmdldElTT0tleV9mZWF0dXJlPVppZWwtSVNPLVNjaGxcdTAwZmNzc2VsCitfVUlfU3RhbmRhcmRQb3B1bGF0aW9uSW5pdGlhbGl6ZXJfaW5kaXZpZHVhbHNfZmVhdHVyZT1FaW56ZWxwZXJzb25lbgorX1VJX1N0YW5kYXJkUG9wdWxhdGlvbkluaXRpYWxpemVyX3VzZURlbnNpdHlfZmVhdHVyZT1EaWNodGUgYmVudXR6ZW4KK19VSV9TdGFuZGFyZFBvcHVsYXRpb25Jbml0aWFsaXplcl9wb3B1bGF0aW9uSWRlbnRpZmllcl9mZWF0dXJlPUJldlx1MDBmNmxrZXJ1bmdzYmV6ZWljaG5lcgorX1VJX1NlYXNvbmFsUG9wdWxhdGlvbk1vZGVsX3R5cGU9U2Fpc29uYWxlcyBCZXZcdTAwZjZsa2VydW5nc21vZGVsbAorX1VJX1NlYXNvbmFsUG9wdWxhdGlvbk1vZGVsX3BoYXNlX2ZlYXR1cmU9UGhhc2UKK19VSV9TZWFzb25hbFBvcHVsYXRpb25Nb2RlbF9tb2R1bGF0aW9uQW1wbGl0dWRlX2ZlYXR1cmU9TW9kdWxhdGlvbnNhbXBsaXR1ZGUKK19VSV9TZWFzb25hbFBvcHVsYXRpb25Nb2RlbF9mcmVxdWVuY3lfZmVhdHVyZT1GcmVxdWVuegorX1VJX1NlYXNvbmFsUG9wdWxhdGlvbk1vZGVsX3VzZUxhdGl0dWRlX2ZlYXR1cmU9QnJlaXRlbmdyYWQgYmVudXR6ZW4KK19VSV9TZWFzb25hbFBvcHVsYXRpb25Nb2RlbF9wZXJpb2RfZmVhdHVyZT1aZWl0ZGF1ZXIKK19VSV9FYXJ0aFNjaWVuY2VQb3B1bGF0aW9uSW5pdGlhbGl6ZXJfdHlwZT1HZW93aXNzZW5zY2hhZnQtQmV2XHUwMGY2bGtlcnVuZ3MtSW5pdGlhbGlzaWVyZXIKK19VSV9ZZXRpUG9wdWxhdGlvbkluaXRpYWxpemVyX3R5cGU9WWV0aSBCZXZcdTAwZjZsa2VydW5nc2luaXRpYWxpc2llcmVyCitfVUlfUG9wdWxhdGlvbkluaXRpYWxpemVyX3BvcHVsYXRpb25JZGVudGlmaWVyX2ZlYXR1cmU9QmV2XHUwMGY2bGtlcnVuZ3NiZXplaWNobmVyCitfVUlfTW9zcXVpdG9Qb3B1bGF0aW9uTW9kZWxfdHlwZT1Nb3NxdWl0by1CZXZcdTAwZjZsa2VydW5nc21vZGVsbAorX1VJX01vc3F1aXRvUG9wdWxhdGlvbk1vZGVsX3NjYWxpbmdGYWN0b3JfZmVhdHVyZT1Ta2FsaWVydW5nc2Zha3RvcgorX1VJX01vc3F1aXRvUG9wdWxhdGlvbk1vZGVsX3RpbWVQZXJpb2RfZmVhdHVyZT1aZWl0cmF1bQorX1VJX01vc3F1aXRvUG9wdWxhdGlvbk1vZGVsX21vcnRhbGl0eVJhdGVfZmVhdHVyZT1Nb3J0YWxpdFx1MDBlNHRzcmF0ZQorX1VJX01vc3F1aXRvUG9wdWxhdGlvbk1vZGVsX2hvc3RfZmVhdHVyZT1XaXJ0CitfVUlfQWdpbmdQb3B1bGF0aW9uTW9kZWxfdHlwZT1BbHRlbmRlcyBCZXZcdTAwZjZsa2VydW5nc21vZGVsbAorX1VJX0FnZUdyb3VwX3R5cGU9QWx0ZXJzZ3J1cHBlCitfVUlfQWdlR3JvdXBfZnJvbUFnZV9mZWF0dXJlPVZvbiBBbHRlcgorX1VJX0FnZUdyb3VwX3RvQWdlX2ZlYXR1cmU9QmlzIEFsdGVyCitfVUlfQWdlR3JvdXBfZGVhdGhGYWN0b3JfZmVhdHVyZT1TdGVyYmxpY2hrZWl0c2Zha3RvcgorX1VJX0FnaW5nUG9wdWxhdGlvbk1vZGVsX2hhc01heEFnZV9mZWF0dXJlPUhhdCBtYXhpbWFsZXMgQWx0ZXIKK19VSV9BZ2VHcm91cF9oYXNNYXhBZ2VfZmVhdHVyZT1IYXQgbWF4aW1hbGVzIEFsdGVyCitfVUlfQWdlR3JvdXBfbGltaXRlZF9mZWF0dXJlPUJlZ3Jlbnp0CmRpZmYgLS1naXQgYS9tb2RlbHMvcG9wdWxhdGlvbnMvb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzL3BsdWdpbl9rci5wcm9wZXJ0aWVzIGIvbW9kZWxzL3BvcHVsYXRpb25zL29yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy9wbHVnaW5fa3IucHJvcGVydGllcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41M2JjYmIyCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL3BvcHVsYXRpb25zL29yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy9wbHVnaW5fa3IucHJvcGVydGllcwpAQCAtMCwwICsxLDE5NSBAQAorIy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjICogQ29weXJpZ2h0IChjKSAyMDA5IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorIyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyMgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyMgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorIyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisjICoKKyMgKiBDb250cmlidXRvcnM6CisjICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorIyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisjIFRvIGNvZGUgZGV2ZWxvcGVyOgorIyAgIERvIE5PVCBjaGFuZ2UgdGhlIHByb3BlcnRpZXMgYmV0d2VlbiB0aGlzIGxpbmUgYW5kIHRoZQorIyAgICIlJSUgRU5EIE9GIFRSQU5TTEFURUQgUFJPUEVSVElFUyAlJSUiIGxpbmUuCisjICAgTWFrZSBhIG5ldyBwcm9wZXJ0eSBuYW1lLCBhcHBlbmQgdG8gdGhlIGVuZCBvZiB0aGUgZmlsZSBhbmQgY2hhbmdlCisjICAgdGhlIGNvZGUgdG8gdXNlIHRoZSBuZXcgcHJvcGVydHkuCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyMgJSUlIEVORCBPRiBUUkFOU0xBVEVEIFBST1BFUlRJRVMgJSUlCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKworcGx1Z2luTmFtZT1TVEVNIFx1Yzc3OFx1YWQ2YyBcdWJhYThcdWIzNzggXHViYWE4XHViMzc4Citwcm92aWRlck5hbWU9RWNsaXBzZS5vcmcKKworZGNfY3JlYXRvcl9lZGx1bmQ9XHVjNWQwXHViNGU0XHViN2YwXHViNGRjCitkY19jcmVhdG9yX2thdWZtYW49XHVjZTc0XHVkNTA0XHViOWU4CitkY19jcmVhdG9yX3N0ZW10ZWFtPVNURU0gXHVkMzAwCitkY19jcmVhdG9yX3Rob2Vucz10aG9lbnMKK2RjX2lkZW50aWVyPVNURU0gXHVjNzc4XHVhZDZjIFx1YmFhOFx1YjM3OAorZGNfaW5pdF9pZGVudGllcj1TVEVNIFx1Yzc3OFx1YWQ2YyBcdWNkMDhcdWFlMzBcdWQ2NTQKK2RjX2xpY2Vuc2U9XHVjNzc0XHVkMDc0XHViOWJkXHVjMmE0IFx1YWNmNVx1YzZhOSBcdWMwYWNcdWM2YTkgXHVkNWM4XHVhYzAwXHVjMTFjIChFUEwpCitkY19wdWJsaXNoZXI9XHVjNzc0XHVkMDc0XHViOWJkXHVjMmE0IFx1YzdhY1x1YjJlOAorZGNfU09VUkNFPWh0dHA6Ly93aWtpLmVjbGlwc2Uub3JnL0F2YWlsYWJsZV9Nb2RlbHMjTW9kZWxzX29mX1BvcHVsYXRpb24gICAoYW5kIHJlZmVyZW5jZXMgdGhlcmUtaW4pCitkY19Qb3BfaW5pdF9TT1VSQ0U9aHR0cDovL3dpa2kuZWNsaXBzZS5vcmcvSW5pdGlhbGl6aW5nX2FfUG9wdWxhdGlvbiAoXHVhZGY4XHViOWFjXHVhY2UwIFx1Y2MzOFx1YWNlMCBcdWJiMzhcdWQ1Y2NcdWM1ZDBcdWMxMWMpCitkY190aXRsZV9QTT1cdWQ0NWNcdWM5MDAgXHVjNzc4XHVhZDZjIFx1YmFhOFx1YjM3OAorZGNfZGVzY19QTT1cdWM5YzBcdWMxOGRcdWM4MDFcdWM3NzggXHVjZDljXHVjMGRkIFx1YmMwZiBcdWMwYWNcdWI5ZGRcdWM3MjhcdWM3NDQgXHVjOWMwXHVjNmQwXHVkNTU4XHViMjk0IFx1YWUzMFx1YmNmOFx1YzgwMVx1Yzc3OCBcdWM3NzhcdWFkNmMgXHViYWE4XHViMzc4CitkY190aXRsZV9EUE09XHVjNzc4XHVhZDZjIFx1Yzc3OFx1YWQ2YyBcdWJhYThcdWIzNzgKK2RjX2Rlc2NfRFBNPVx1YzljMFx1YzVlZCBcdWM3NzhcdWFkNmMgXHViYWE4XHViMzc4XHVjNzQwIFx1YjA5OFx1Yzc3NCwgXHVjMTMxXHViY2M0IFx1YjRmMVx1YzVkMCBcdWI1MzBcdWI3N2Mgc3ViZ3JvdXBzXHViODVjIFx1YjA5OFx1YjIwNFx1YzViNCBcdWM5YzBcdWM2ZDAKK2RjX3RpdGxlX1NQTT1cdWQ2NTVcdWI5NjBcdWM4MDEgXHVjNzc4XHVhZDZjIFx1YmFhOFx1YjM3OAorZGNfZGVzY19TUE09XHVkNjU1XHViOTYwXHVjODAxIFx1Yzc3OFx1YWQ2YyBcdWJhYThcdWIzNzhcdWM3NDAgXHViMTc4XHVjNzc0XHVjOTg4XHViOTdjIFx1Y2MzOFx1Yzg3MFx1ZDU1OFx1YmE3NFx1YzExYyBcdWM5YzBcdWMxOGRcdWM4MDFcdWM3NzggXHVjZDljXHVjMGIwXHViOTYwIFx1YmMwZiBcdWMwYWNcdWI5ZGRcdWI5NjBcdWM3NDQgXHVjOWMwXHVjNmQwCitkY190aXRsZV9TZWFzb25hbF9QTT1cdWFjYzRcdWM4MDggXHVjNzc4XHVhZDZjIFx1YmFhOFx1YjM3OAorZGNfZGVzY19TZWFzb25hbF9QTT1cdWFjZTRcdWNkYTkgXHViY2ExXHVkMTMwXHViOTdjIFx1YmFhOFx1YjM3OFx1YjljMVx1ZDU1OFx1YjI5NFx1YjM3MCBcdWM3MjBcdWM2YTlcdWQ1NWMgXHVhY2M0XHVjODA4IFx1YWMxY1x1Y2NiNFx1YWQ3MCBcdWJhYThcdWIzNzguIFx1YzcwNFx1YjNjNFx1YzVkMCBcdWI1MzBcdWI3N2MgXHVhY2M0XHVjODA4IFx1YWQwMFx1YjgyOCBcdWQ1NmRcdWJhYTkgXHVjODcwXHVjODA4IFx1YWMwMFx1YjJhNS4KK2RjX3RpdGxlX0FEUE09XHViMTc4XHVkNjU0IFx1Yzc3OFx1YWQ2YyBcdWJhYThcdWIzNzggCitkY19kZXNjX0FEUE09XHViMDk4XHVjNzc0XHViOTdjIFx1YzgwMVx1YzZhOVx1ZDU1YyBcdWM3NzhcdWFkNmMgXHViYWE4XHViMzc4LiAgXHViMDk4XHVjNzc0LCBcdWMxMzFcdWJjYzQgXHViNGYxXHVjNWQwIFx1YjUzMFx1Yjc3YyBzdWJncm91cHNcdWI4NWMgXHVjNzc4XHVhZDZjXHViOTdjIFx1YjA5OFx1YjIwNFx1YzViNCBcdWFkNmNcdWJkODRcdWQ1NThcdWIyOTQgXHVhZTMwXHViMmE1IFx1YzljMFx1YzZkMFx1ZDU2OC4KK2RjX3RpdGxlX01QTT1cdWJhYThcdWFlMzAgXHVhYzFjXHVjY2I0XHVhZDcwIFx1YmFhOFx1YjM3OAorZGNfZGVzY19NUE09XHViMmU0XHVjNTkxXHVkNTVjIFx1YmFhOFx1YWUzMCBcdWM4ODVcdWI5NThcdWM1ZDAgXHViOWRlXHVjZGIwIFx1Yzg3MFx1YzgwOFx1ZDU2MCBcdWMyMTggXHVjNzg4XHViMjk0IFx1YmFhOFx1YWUzMCBcdWFjMWNcdWNjYjRcdWFkNzAgXHViYWE4XHViMzc4LiAgXHViYWE4XHViMzc4XHVjNzQwIFNURU1cdWM3NTggXHVjOWMwXHVhZDZjIFx1YWNmY1x1ZDU1OSBcdWIzNzBcdWM3NzRcdWQxMzBcdWI5N2MgXHVjMGFjXHVjNmE5LgorZGNfZGVzY19Qb3BfSW5pdD1cdWQyYjlcdWM4MTUgXHVjNzc4XHVhZDZjXHViOTdjIFx1YzljMFx1YzVlZFx1YzVkMCBcdWFkMDBcdWI4MjhcdWI0MWMgXHVhYzEyXHVjNzc0XHViMDk4LCBcdWM1ZWNcdWI3ZWMgXHVjOWMwXHVjNWVkXHVjNWQwIFx1ZDU3NFx1YjJmOVx1ZDU1OFx1YjI5NCBcdWFkZjhcdWI4ZjlcdWM3NTggXHViZDA5XHVjMWM0XHViOTdjIFx1Yzc3NFx1YzZhOVx1ZDU1OFx1YzVlYyBcdWNkMDhcdWFlMzBcdWQ2NTQKK2RjX3RpdGxlX1BvcF9Jbml0PVx1Yzc3OFx1YWQ2YyBcdWNkMDhcdWFlMzBcdWQ2NTQKK2RjX2Rlc2NfWWV0aV9Jbml0PVx1YzEyNFx1Yzc3OCAoXHU5NmVhXHU0ZWJhKSBcdWM3NzhcdWFkNmMgXHVjZDA4XHVhZTMwXHVkNjU0XHViMjk0IFx1YzljMFx1YWQ2YyBcdWFjZTBcdWIzYzRcdWI5N2MgXHVjMmRjXHVhYzAxXHVkNjU0XHVkNTU4XHViMjk0IFx1YmMyOVx1YmM5NVx1Yzc4NC4gICdcdWMxMjRcdWM3NzggKFx1OTZlYVx1NGViYSknIFx1Yzc3NCBcdWM4NzRcdWM3YWNcdWQ1NThcdWIyOTQgXHVhYzgzXHVjNzQwIFx1YzU0NFx1YjJjOFx1YzljMFx1YjljYyBcdWM3NzQgXHViYWE4XHViMzc4XHVjNWQwXHVjMTFjIFx1YzEyNFx1Yzc3OFx1Yzc1OCBcdWM3NzhcdWFkNmNcdWIyOTQgXHVhY2UwXHViM2M0XHVjNWQwIFx1YmU0NFx1Yjg0MFx1ZDU2OC4KK2RjX3RpdGxlX1lldGlfSW5pdD1cdWM2MDhcdWQyZjAgXHVjMTI0XHVjNzc4IFx1Yzc3OFx1YWQ2YyBcdWNkMDhcdWFlMzBcdWQ2NTQKKyAgICAgICAgIAorX1VJX0NyZWF0ZUNoaWxkX3RleHQ9ezB9CitfVUlfQ3JlYXRlQ2hpbGRfdGV4dDI9ezF9IHswfQorX1VJX0NyZWF0ZUNoaWxkX3RleHQzPXsxfQorX1VJX0NyZWF0ZUNoaWxkX3Rvb2x0aXA9ezF9IFx1YWUzMFx1YjJhNSBcdWQ1NThcdWM1ZDAgXHVjMGM4IHswfSBcdWI5Y2NcdWI0ZTRcdWFlMzAKK19VSV9DcmVhdGVDaGlsZF9kZXNjcmlwdGlvbj1cdWMxMjBcdWQwZGRcdWQ1NWMgezJ9XHVjNzU4IHsxfSBcdWFlMzBcdWIyYTVcdWM1ZDAgXHViMzAwXHVkNTVjIFx1ZDYxNVx1YzJkZCB7MH1cdWM3NTggXHVjMGM4XHViODVjXHVjNmI0IENoaWxkXHViOTdjIFx1YjljY1x1YjRlZFx1YjJjOFx1YjJlNC4KK19VSV9DcmVhdGVTaWJsaW5nX2Rlc2NyaXB0aW9uPVx1YmQ4MFx1YmFhOFx1Yzc1OCBcdWMxMjBcdWQwZGRcdWI0MWMgezJ9XHVjNWQwXHVjMTFjIHsxfSBcdWFlMzBcdWIyYTVcdWM1ZDAgXHViMzAwXHVkNTVjIFx1ZDYxNVx1YzJkZCB7MH1cdWM3NTggXHVjMGM4XHViODVjXHVjNmI0IFx1ZDYxNVx1YzgxY1x1Yjk3YyBcdWI5Y2NcdWI0ZWRcdWIyYzhcdWIyZTQuCisKK19VSV9Qcm9wZXJ0eURlc2NyaXB0b3JfZGVzY3JpcHRpb249ezF9IFx1YzkxMSB7MH0KKworX1VJX1BvcHVsYXRpb25Nb2RlbF90eXBlPVx1Yzc3OFx1YWQ2YyBcdWJhYThcdWIzNzgKK19VSV9TdGFuZGFyZFBvcHVsYXRpb25Nb2RlbF90eXBlPVx1Yzc3OFx1YWQ2YyBcdWJhYThcdWIzNzgKK19VSV9Vbmtub3duX3R5cGU9XHVhYzFjXHVjY2I0CisKK19VSV9Vbmtub3duX2RhdGF0eXBlPVx1YWMxMgorCitfVUlfUG9wdWxhdGlvbk1vZGVsX3BvcHVsYXRpb25JZGVudGlmaWVyX2ZlYXR1cmU9XHVjNzc4XHVhZDZjIFx1YzJkZFx1YmNjNFx1Yzc5MAorX1VJX1N0YW5kYXJkUG9wdWxhdGlvbk1vZGVsX2JpcnRoUmF0ZV9mZWF0dXJlPVx1Y2Q5Y1x1YzBkZFx1Yjk2MAorX1VJX1N0YW5kYXJkUG9wdWxhdGlvbk1vZGVsX2RlYXRoUmF0ZV9mZWF0dXJlPVx1YzBhY1x1YjlkZFx1Yjk2MAorX1VJX1Vua25vd25fZmVhdHVyZT1cdWM5YzBcdWM4MTVcdWI0MThcdWM5YzAgXHVjNTRhXHVjNzRjCisKKworX1VJX1N0YW5kYXJkUG9wdWxhdGlvbk1vZGVsX3RpbWVQZXJpb2RfZmVhdHVyZT1cdWFlMzBcdWFjMDQKK19VSV9Qb3B1bGF0aW9uTW9kZWxMYWJlbF90eXBlPVx1Yzc3OFx1YWQ2YyBcdWJhYThcdWIzNzggXHViNzdjXHViY2E4CitfVUlfU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxMYWJlbF90eXBlPVx1Yzc3OFx1YWQ2YyBcdWJhYThcdWIzNzggXHViNzdjXHViY2E4CitfVUlfSW50ZWdyYXRpb25MYWJlbF90eXBlPVx1ZDFiNVx1ZDU2OSBcdWI3N2NcdWJjYTgKK19VSV9JbnRlZ3JhdGlvbkRlY29yYXRvcl90eXBlPVx1ZDFiNVx1ZDU2OSBcdWM3YTVcdWMyZGRcdWM3OTAKK19VSV9TdGFuZGFyZFBvcHVsYXRpb25Nb2RlbExhYmVsX2RlbHRhVmFsdWVfZmVhdHVyZT1cdWIzNzhcdWQwYzAgXHVhYzEyCitfVUlfU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxMYWJlbF9wcm9iZVZhbHVlX2ZlYXR1cmU9XHVkMGQwXHVjMGM5XHVjNzkwIFx1YWMxMgorX1VJX1N0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWxfdGVtcFZhbHVlX2ZlYXR1cmU9XHVjNjI4XHViM2M0IFx1YWMxMgorX1VJX1N0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWxfb3JpZ2luYWxWYWx1ZV9mZWF0dXJlPVx1YzZkMFx1Yjc5OCBcdWFjMTIKK19VSV9TdGFuZGFyZFBvcHVsYXRpb25Nb2RlbExhYmVsX2Vycm9yU2NhbGVfZmVhdHVyZT1cdWM2MjRcdWI5NTggXHVjMmE0XHVjZjAwXHVjNzdjCitfVUlfUG9wdWxhdGlvbk1vZGVsVmFsdWVfdHlwZT1cdWM3NzhcdWFkNmMgXHViYWE4XHViMzc4IFx1YWMxMgorX1VJX1N0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWxWYWx1ZV90eXBlPVx1Yzc3OFx1YWQ2YyBcdWJhYThcdWIzNzggXHViNzdjXHViY2E4IFx1YWMxMgorX1VJX1BvcHVsYXRpb25Nb2RlbExhYmVsVmFsdWVfdHlwZT1cdWM3NzhcdWFkNmMgXHViYWE4XHViMzc4IFx1Yjc3Y1x1YmNhOCBcdWFjMTIKK19VSV9BcmVhTGFiZWxfdHlwZT1cdWM5YzBcdWM1ZWQgXHViNzdjXHViY2E4CitfVUlfQXJlYUxhYmVsVmFsdWVfdHlwZT1cdWM5YzBcdWM1ZWQgXHViNzdjXHViY2E4IFx1YWMxMgorX1VJX0NvbW1vbkJvcmRlclJlbGF0aW9uc2hpcExhYmVsX3R5cGU9XHVjNzdjXHViYzE4IFx1ZDE0Y1x1YjQ1MFx1YjlhYyBcdWFkMDBcdWFjYzQgXHViNzdjXHViY2E4CitfVUlfQ29tbW9uQm9yZGVyUmVsYXRpb25zaGlwTGFiZWxWYWx1ZV90eXBlPVx1Yzc3Y1x1YmMxOCBcdWQxNGNcdWI0NTBcdWI5YWMgXHVhZDAwXHVhY2M0IFx1Yjc3Y1x1YmNhOCBcdWFjMTIKK19VSV9QaHlzaWNhbFJlbGF0aW9uc2hpcExhYmVsX3R5cGU9XHViYjNjXHViOWFjXHVjODAxIFx1YWQwMFx1YWNjNCBcdWI3N2NcdWJjYTgKK19VSV9Qb3B1bGF0aW9uTGFiZWxfdHlwZT1cdWM3NzhcdWFkNmMgXHViNzdjXHViY2E4CitfVUlfUG9wdWxhdGlvbkxhYmVsVmFsdWVfdHlwZT1cdWM3NzhcdWFkNmMgXHViNzdjXHViY2E4IFx1YWMxMgorX1VJX1JlbGF0aXZlUGh5c2ljYWxSZWxhdGlvbnNoaXBMYWJlbF90eXBlPVx1YzBjMVx1YjMwMCBcdWJiM2NcdWI5YWNcdWM4MDEgXHVhZDAwXHVhY2M0IFx1Yjc3Y1x1YmNhOAorX1VJX1JlbGF0aXZlUGh5c2ljYWxSZWxhdGlvbnNoaXBMYWJlbFZhbHVlX3R5cGU9XHVjMGMxXHViMzAwIFx1YmIzY1x1YjlhY1x1YzgwMSBcdWFkMDBcdWFjYzQgXHViNzdjXHViY2E4IFx1YWMxMgorX1VJX1RyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsX3R5cGU9XHVjODA0XHVjMWExIFx1YWQwMFx1YWNjNCBcdWI3N2NcdWJjYTgKK19VSV9UcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbFZhbHVlX3R5cGU9XHVjODA0XHVjMWExIFx1YWQwMFx1YWNjNCBcdWI3N2NcdWJjYTggXHVhYzEyCitfVUlfUGh5c2ljYWxSZWxhdGlvbnNoaXBMYWJlbFZhbHVlX3R5cGU9XHViYjNjXHViOWFjXHVjODAxIFx1YWQwMFx1YWNjNCBcdWI3N2NcdWJjYTggXHVhYzEyCitfVUlfUm9hZFRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsX3R5cGU9XHViM2M0XHViODVjIFx1YWQ1MFx1ZDFiNSBcdWFkMDBcdWFjYzQgXHViNzdjXHViY2E4CitfVUlfUm9hZFRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsVmFsdWVfdHlwZT1cdWIzYzRcdWI4NWMgXHVhZDUwXHVkMWI1IFx1YWQwMFx1YWNjNCBcdWI3N2NcdWJjYTggXHVhYzEyCitfVUlfUG9wdWxhdGlvbk1vZGVsTGFiZWxfcG9wdWxhdGlvbkxhYmVsX2ZlYXR1cmU9XHVjNzc4XHVhZDZjIFx1Yjc3Y1x1YmNhOAorX1VJX0FyZWFMYWJlbF9jdXJyZW50QXJlYVZhbHVlX2ZlYXR1cmU9XHVkNjA0XHVjN2FjIFx1YzljMFx1YzVlZCBcdWFjMTIKK19VSV9BcmVhTGFiZWxWYWx1ZV9hcmVhX2ZlYXR1cmU9XHVjOWMwXHVjNWVkCitfVUlfQ29tbW9uQm9yZGVyUmVsYXRpb25zaGlwTGFiZWxWYWx1ZV9ib3JkZXJMZW5ndGhfZmVhdHVyZT1cdWQxNGNcdWI0NTBcdWI5YWMgXHVhZTM4XHVjNzc0CitfVUlfUG9wdWxhdGlvbkxhYmVsX3BvcHVsYXRpb25JZGVudGlmaWVyX2ZlYXR1cmU9XHVjNzc4XHVhZDZjIFx1YzJkZFx1YmNjNFx1Yzc5MAorX1VJX1BvcHVsYXRpb25MYWJlbF9uYW1lX2ZlYXR1cmU9XHVjNzc0XHViOTg0CitfVUlfUG9wdWxhdGlvbkxhYmVsX2N1cnJlbnRQb3B1bGF0aW9uVmFsdWVfZmVhdHVyZT1cdWQ2MDRcdWM3YWMgXHVjNzc4XHVhZDZjIFx1YWMxMgorX1VJX1BvcHVsYXRpb25MYWJlbF9wb3B1bGF0ZWRBcmVhX2ZlYXR1cmU9XHVjNzc4XHVhZDZjIFx1YmMwMFx1YzlkMSBcdWM5YzBcdWM1ZWQKK19VSV9Qb3B1bGF0aW9uTGFiZWxfdmFsaWRZZWFyX2ZlYXR1cmU9XHVjNzIwXHVkNmE4IFx1YjE0NAorX1VJX1BvcHVsYXRpb25MYWJlbFZhbHVlX2NvdW50X2ZlYXR1cmU9XHVkNjlmXHVjMjE4CitfVUlfUmVsYXRpdmVQaHlzaWNhbFJlbGF0aW9uc2hpcExhYmVsX2N1cnJlbnRSZWxhdGlvbnNoaXBfZmVhdHVyZT1cdWQ2MDRcdWM3YWMgXHVhZDAwXHVhY2M0CitfVUlfUmVsYXRpdmVQaHlzaWNhbFJlbGF0aW9uc2hpcExhYmVsVmFsdWVfYWRqYWNlbnRfZmVhdHVyZT1cdWM3NzhcdWM4MTEKK19VSV9SZWxhdGl2ZVBoeXNpY2FsUmVsYXRpb25zaGlwTGFiZWxWYWx1ZV9yZWxhdGlvbnNoaXBfZmVhdHVyZT1cdWFkMDBcdWFjYzQKK19VSV9UcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbF90cmFuc3BvcnRNb2RlX2ZlYXR1cmU9XHVjODA0XHVjMWExIFx1YmFhOFx1YjRkYworX1VJX1RyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsX3BvcHVsYXRpb25JZGVudGlmaWVyX2ZlYXR1cmU9XHVjNzc4XHVhZDZjIFx1YzJkZFx1YmNjNFx1Yzc5MAorX1VJX1RyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsX3RyYW5zcG9ydElkZW50aWZpZXJfZmVhdHVyZT1cdWM4MDRcdWMxYTEgXHVjMmRkXHViY2M0XHVjNzkwCitfVUlfVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxfY3VycmVudFRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsVmFsdWVfZmVhdHVyZT1cdWQ2MDRcdWM3YWMgXHVhZDUwXHVkMWI1IFx1YWQwMFx1YWNjNCBcdWI3N2NcdWJjYTggXHVhYzEyCitfVUlfVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxfcmF0ZVRpbWVQZXJpb2RfZmVhdHVyZT1cdWMyZGNcdWFjMDQgXHVhZTMwXHVhYzA0IFx1YmU0NFx1YzcyOAorX1VJX1RyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsX2RlcGFydHVyZUNhcGFjaXR5X2ZlYXR1cmU9XHVjZDljXHViYzFjIFx1YWMwMFx1YjJhNSBcdWM2YTlcdWI3YzkKK19VSV9UcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbF9tYXhpbXVtRGVwYXJ0dXJlQ2FwYWNpdHlfZmVhdHVyZT1cdWNkNWNcdWIzMDAgXHVjZDljXHViYzFjIFx1Yzc3OFx1YzZkMAorX1VJX1RyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsX2NhcGFjaXR5X2ZlYXR1cmU9XHVjNmE5XHViN2M5CitfVUlfVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxfbWF4aW11bUNhcGFjaXR5X2ZlYXR1cmU9XHVjZDVjXHViMzAwIFx1YzZhOVx1YjdjOQorX1VJX1RyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsX3RyYW5zaXRUaW1lX2ZlYXR1cmU9XHVjMThjXHVjNjk0IFx1YzJkY1x1YWMwNAorX1VJX1RyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsX3N0YXJ0VXBEZWxheV9mZWF0dXJlPVx1YzJkY1x1Yzc5MVx1Yzc0NCBcdWM5YzBcdWM1ZjAKK19VSV9UcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbFZhbHVlX2F2YWlsYWJsZURlcGFydHVyZUNhcGFjaXR5UHJvcG9ydGlvbl9mZWF0dXJlPVx1YzBhY1x1YzZhOSBcdWFjMDBcdWIyYTVcdWQ1NWMgXHVjZDljXHViYzFjIFx1YzZhOVx1YjdjOSBcdWJlNDRcdWM3MjgKK19VSV9Sb2FkVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxWYWx1ZV9yb2FkTmFtZV9mZWF0dXJlPVx1YjNjNFx1Yjg1YyBcdWM3NzRcdWI5ODQKK19VSV9Sb2FkVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxWYWx1ZV9yb2FkQ2xhc3NfZmVhdHVyZT1cdWIzYzRcdWI4NWMgXHVkMDc0XHViNzk4XHVjMmE0CitfVUlfUm9hZFRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsVmFsdWVfbnVtYmVyQ3Jvc3NpbmdzX2ZlYXR1cmU9XHVhZDUwXHVjYzI4IFx1YWMyZlx1YzIxOAorX1VJX1JlbGF0aXZlUGh5c2ljYWxSZWxhdGlvbnNoaXBfVW5zcGVjaWZpZWRfbGl0ZXJhbD1cdWM5YzBcdWM4MTVcdWI0MThcdWM5YzAgXHVjNTRhXHVjNzRjCitfVUlfUmVsYXRpdmVQaHlzaWNhbFJlbGF0aW9uc2hpcF9BYm92ZV9saXRlcmFsPVx1YzcwNAorX1VJX1JlbGF0aXZlUGh5c2ljYWxSZWxhdGlvbnNoaXBfQmVsb3dfbGl0ZXJhbD1cdWM3NzRcdWQ1NTgKK19VSV9SZWxhdGl2ZVBoeXNpY2FsUmVsYXRpb25zaGlwX1JpZ2h0T2ZfbGl0ZXJhbD1cdWM3NTggXHVhZDhjXHViOWFjCitfVUlfUmVsYXRpdmVQaHlzaWNhbFJlbGF0aW9uc2hpcF9MZWZ0T2ZfbGl0ZXJhbD1MZWZ0T2YKK19VSV9SZWxhdGl2ZVBoeXNpY2FsUmVsYXRpb25zaGlwX05vcnRoT2ZfbGl0ZXJhbD1Ob3J0aE9mCitfVUlfUmVsYXRpdmVQaHlzaWNhbFJlbGF0aW9uc2hpcF9Tb3V0aE9mX2xpdGVyYWw9U291dGhPZgorX1VJX1JlbGF0aXZlUGh5c2ljYWxSZWxhdGlvbnNoaXBfV2VzdE9mX2xpdGVyYWw9V2VzdE9mCitfVUlfUmVsYXRpdmVQaHlzaWNhbFJlbGF0aW9uc2hpcF9FYXN0T2ZfbGl0ZXJhbD1FYXN0T2YKK19VSV9SZWxhdGl2ZVBoeXNpY2FsUmVsYXRpb25zaGlwX0NvbnRhaW5zX2xpdGVyYWw9XHVkM2VjXHVkNTY4CitfVUlfUmVsYXRpdmVQaHlzaWNhbFJlbGF0aW9uc2hpcF9Db250YWluZWRCeV9saXRlcmFsPVx1YjJlNFx1Yzc0Y1x1YzVkMCBcdWQzZWNcdWQ1NjhcdWI0MjgKK19VSV9SZWxhdGl2ZVBoeXNpY2FsUmVsYXRpb25zaGlwX092ZXJsYXBzX2xpdGVyYWw9XHVjOTExXHViY2Y1CitfVUlfUmVsYXRpdmVQaHlzaWNhbFJlbGF0aW9uc2hpcF9PcmJpdHNfbGl0ZXJhbD1cdWFkYTRcdWIzYzQKK19VSV9UcmFuc3BvcnRNb2RlX3Vuc3BlY2lmaWVkX2xpdGVyYWw9XHViZDg4XHVkMmI5XHVjODE1CitfVUlfVHJhbnNwb3J0TW9kZV9haXJfbGl0ZXJhbD1cdWFjZjVcdWFlMzAKK19VSV9UcmFuc3BvcnRNb2RlX3JvYWRfbGl0ZXJhbD1cdWIzYzRcdWI4NWMKK19VSV9UcmFuc3BvcnRNb2RlX3JhaWxfbGl0ZXJhbD1cdWI4MDhcdWM3N2MKK19VSV9UcmFuc3BvcnRNb2RlX21hcmluZV9saXRlcmFsPVx1YzEyMFx1YmMxNQorX1VJX1RyYW5zcG9ydE1vZGVfZm9vdF9saXRlcmFsPWZvb3QKK19VSV9TdGFuZGFyZFBvcHVsYXRpb25Nb2RlbExhYmVsVmFsdWVfY291bnRfZmVhdHVyZT1cdWQ2OWZcdWMyMTgKK19VSV9JbnRlZ3JhdGlvbkxhYmVsVmFsdWVfdHlwZT1cdWQxYjVcdWQ1NjkgXHViNzdjXHViY2E4IFx1YWMxMgorX1VJX1N0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWxWYWx1ZV9uZXh0VmFsdWVWYWxpZF9mZWF0dXJlPVx1YjJlNFx1Yzc0YyBcdWM3MjBcdWQ2YTggXHVhYzEyCitfVUlfU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxMYWJlbFZhbHVlX2luY2lkZW5jZV9mZWF0dXJlPVx1YmMxY1x1YzBkZAorX1VJX1BvcHVsYXRpb25Nb2RlbF9uYW1lX2ZlYXR1cmU9XHVjNzc0XHViOTg0CitfVUlfU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxMYWJlbFZhbHVlX2JpcnRoc19mZWF0dXJlPVx1Y2Q5Y1x1YzBiMAorX1VJX1N0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWxWYWx1ZV9kZWF0aHNfZmVhdHVyZT1cdWMwYWNcdWI5ZGQKK19VSV9TdG9jaGFzdGljU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxfdHlwZT1cdWQ2NTVcdWI5NjBcdWM4MDEgXHVkNDVjXHVjOTAwIFx1Yzc3OFx1YWQ2YyBcdWJhYThcdWIzNzgKK19VSV9TdG9jaGFzdGljU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxfZ2Fpbl9mZWF0dXJlPVx1Yzc3NFx1YjRkZAorX1VJX1N0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWxWYWx1ZV9kZW5zaXR5X2ZlYXR1cmU9XHViYzAwXHViM2M0CitfVUlfRGVtb2dyYXBoaWNQb3B1bGF0aW9uTW9kZWxfdHlwZT1cdWM3NzhcdWFkNmMgXHVjNzc4XHVhZDZjIFx1YmFhOFx1YjM3OAorX1VJX1BvcHVsYXRpb25Hcm91cF90eXBlPVx1Yzc3OFx1YWQ2YyBcdWFkZjhcdWI4ZjkKK19VSV9EZW1vZ3JhcGhpY1BvcHVsYXRpb25Nb2RlbF9wb3B1bGF0aW9uR3JvdXBzX2ZlYXR1cmU9XHVjNzc4XHVhZDZjIFx1YWRmOFx1YjhmOQorX1VJX1BvcHVsYXRpb25Hcm91cF9pZGVudGlmaWVyX2ZlYXR1cmU9XHVjMmRkXHViY2M0XHVjNzkwCitfVUlfUG9wdWxhdGlvbkdyb3VwX2ZyYWN0aW9uX2ZlYXR1cmU9XHViZDg0XHVjMjE4CitfVUlfUG9wdWxhdGlvbk1vZGVsTGFiZWxfcG9wdWxhdGlvbklkZW50aWZpZXJfZmVhdHVyZT1cdWM3NzhcdWFkNmMgXHVjMmRkXHViY2M0XHVjNzkwCitfVUlfUG9wdWxhdGlvbk1vZGVsX3RhcmdldFVSSV9mZWF0dXJlPVx1YjMwMFx1YzBjMSBVUkkKK19VSV9Qb3B1bGF0aW9uTW9kZWxfdGFyZ2V0SVNPS2V5X2ZlYXR1cmU9XHViMzAwXHVjMGMxIElTTyBcdWQwYTQKK19VSV9Qb3B1bGF0aW9uSW5pdGlhbGl6ZXJfdHlwZT1cdWM3NzhcdWFkNmMgXHVjZDA4XHVhZTMwXHVkNjU0CitfVUlfU3RhbmRhcmRQb3B1bGF0aW9uSW5pdGlhbGl6ZXJfdHlwZT1cdWM3NzhcdWFkNmMgXHVjZDA4XHVhZTMwXHVkNjU0CitfVUlfUG9wdWxhdGlvbkluaXRpYWxpemVyX3RhcmdldElTT0tleV9mZWF0dXJlPVx1YjMwMFx1YzBjMSBJU08gXHVkMGE0CitfVUlfU3RhbmRhcmRQb3B1bGF0aW9uSW5pdGlhbGl6ZXJfaW5kaXZpZHVhbHNfZmVhdHVyZT1cdWFjMWNcdWM3NzgKK19VSV9TdGFuZGFyZFBvcHVsYXRpb25Jbml0aWFsaXplcl91c2VEZW5zaXR5X2ZlYXR1cmU9XHViYzAwXHViM2M0IFx1YzBhY1x1YzZhOQorX1VJX1N0YW5kYXJkUG9wdWxhdGlvbkluaXRpYWxpemVyX3BvcHVsYXRpb25JZGVudGlmaWVyX2ZlYXR1cmU9XHVjNzc4XHVhZDZjIFx1YzJkZFx1YmNjNFx1Yzc5MAorX1VJX1NlYXNvbmFsUG9wdWxhdGlvbk1vZGVsX3R5cGU9XHVhY2M0XHVjODA4IFx1Yzc3OFx1YWQ2YyBcdWJhYThcdWIzNzgKK19VSV9TZWFzb25hbFBvcHVsYXRpb25Nb2RlbF9waGFzZV9mZWF0dXJlPVx1YjJlOFx1YWNjNAorX1VJX1NlYXNvbmFsUG9wdWxhdGlvbk1vZGVsX21vZHVsYXRpb25BbXBsaXR1ZGVfZmVhdHVyZT1cdWJjYzBcdWM4NzAgXHVjOWM0XHVkM2VkCitfVUlfU2Vhc29uYWxQb3B1bGF0aW9uTW9kZWxfZnJlcXVlbmN5X2ZlYXR1cmU9XHVkNjlmXHVjMjE4CitfVUlfU2Vhc29uYWxQb3B1bGF0aW9uTW9kZWxfdXNlTGF0aXR1ZGVfZmVhdHVyZT1cdWM3MDRcdWIzYzQgXHVjMGFjXHVjNmE5CitfVUlfU2Vhc29uYWxQb3B1bGF0aW9uTW9kZWxfcGVyaW9kX2ZlYXR1cmU9XHVhZTMwXHVhYzA0CitfVUlfRWFydGhTY2llbmNlUG9wdWxhdGlvbkluaXRpYWxpemVyX3R5cGU9XHVjOWMwXHVhZDZjIFx1YWNmY1x1ZDU1OSBcdWM3NzhcdWFkNmMgXHVjZDA4XHVhZTMwXHVkNjU0CitfVUlfWWV0aVBvcHVsYXRpb25Jbml0aWFsaXplcl90eXBlPVx1YzYwOFx1ZDJmMCBcdWMxMjRcdWM3NzggXHVjNzc4XHVhZDZjIFx1Y2QwOFx1YWUzMFx1ZDY1NAorX1VJX1BvcHVsYXRpb25Jbml0aWFsaXplcl9wb3B1bGF0aW9uSWRlbnRpZmllcl9mZWF0dXJlPVx1Yzc3OFx1YWQ2YyBcdWMyZGRcdWJjYzRcdWM3OTAKK19VSV9Nb3NxdWl0b1BvcHVsYXRpb25Nb2RlbF90eXBlPVx1YmFhOFx1YWUzMCBcdWFjMWNcdWNjYjRcdWFkNzAgXHViYWE4XHViMzc4CitfVUlfTW9zcXVpdG9Qb3B1bGF0aW9uTW9kZWxfc2NhbGluZ0ZhY3Rvcl9mZWF0dXJlPVx1ZDY1NVx1YzdhNVx1YzEzMSBcdWM2OTRcdWMxOGMKK19VSV9Nb3NxdWl0b1BvcHVsYXRpb25Nb2RlbF90aW1lUGVyaW9kX2ZlYXR1cmU9XHVhZTMwXHVhYzA0CitfVUlfTW9zcXVpdG9Qb3B1bGF0aW9uTW9kZWxfbW9ydGFsaXR5UmF0ZV9mZWF0dXJlPVx1YzBhY1x1YjlkZFx1Yjk2MAorX1VJX01vc3F1aXRvUG9wdWxhdGlvbk1vZGVsX2hvc3RfZmVhdHVyZT1cdWMyMTlcdWM4ZmMKK19VSV9BZ2luZ1BvcHVsYXRpb25Nb2RlbF90eXBlPVx1YjE3OFx1ZDY1NCBcdWM3NzhcdWFkNmMgXHViYWE4XHViMzc4IAorX1VJX0FnZUdyb3VwX3R5cGU9XHVjNWYwXHViODM5IFx1YWRmOFx1YjhmOQorX1VJX0FnZUdyb3VwX2Zyb21BZ2VfZmVhdHVyZT1cdWIwOThcdWM3NzQgXHViZDgwXHVkMTMwCitfVUlfQWdlR3JvdXBfdG9BZ2VfZmVhdHVyZT1cdWIwOThcdWM3NzQKK19VSV9BZ2VHcm91cF9kZWF0aEZhY3Rvcl9mZWF0dXJlPVx1YzBhY1x1YjlkZCBcdWM2OTRcdWM3NzgKK19VSV9BZ2luZ1BvcHVsYXRpb25Nb2RlbF9oYXNNYXhBZ2VfZmVhdHVyZT1cdWNkNWNcdWIzMDAgXHViMDk4XHVjNzc0CitfVUlfQWdlR3JvdXBfaGFzTWF4QWdlX2ZlYXR1cmU9XHVjZDVjXHViMzAwIFx1YjA5OFx1Yzc3NAorX1VJX0FnZUdyb3VwX2xpbWl0ZWRfZmVhdHVyZT1cdWM4MWNcdWQ1NWNcdWI0MWMKZGlmZiAtLWdpdCBhL21vZGVscy9wb3B1bGF0aW9ucy9vcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMvcGx1Z2luX3poLnByb3BlcnRpZXMgYi9tb2RlbHMvcG9wdWxhdGlvbnMvb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzL3BsdWdpbl96aC5wcm9wZXJ0aWVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE3M2M4ODEKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvcG9wdWxhdGlvbnMvb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzL3BsdWdpbl96aC5wcm9wZXJ0aWVzCkBAIC0wLDAgKzEsMTk1IEBACisjLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyMgKiBDb3B5cmlnaHQgKGMpIDIwMDkgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisjICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworIyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorIyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisjICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyMgKgorIyAqIENvbnRyaWJ1dG9yczoKKyMgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisjICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyMgVG8gY29kZSBkZXZlbG9wZXI6CisjICAgRG8gTk9UIGNoYW5nZSB0aGUgcHJvcGVydGllcyBiZXR3ZWVuIHRoaXMgbGluZSBhbmQgdGhlCisjICAgIiUlJSBFTkQgT0YgVFJBTlNMQVRFRCBQUk9QRVJUSUVTICUlJSIgbGluZS4KKyMgICBNYWtlIGEgbmV3IHByb3BlcnR5IG5hbWUsIGFwcGVuZCB0byB0aGUgZW5kIG9mIHRoZSBmaWxlIGFuZCBjaGFuZ2UKKyMgICB0aGUgY29kZSB0byB1c2UgdGhlIG5ldyBwcm9wZXJ0eS4KKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorIyAlJSUgRU5EIE9GIFRSQU5TTEFURUQgUFJPUEVSVElFUyAlJSUKKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworCitwbHVnaW5OYW1lPVNURU1cdTc5Y2RcdTdmYTRcdTZhMjFcdTU3OGJcdTc2ODRcdTZhMjFcdTU3OGIKK3Byb3ZpZGVyTmFtZT1FY2xpcHNlLm9yZworCitkY19jcmVhdG9yX2VkbHVuZD1FZGx1bmQKK2RjX2NyZWF0b3Jfa2F1Zm1hbj1LYXVmbWFuCitkY19jcmVhdG9yX3N0ZW10ZWFtPVNURU1cdTU2ZTJcdTk2MWYKK2RjX2NyZWF0b3JfdGhvZW5zPXRob2VucworZGNfaWRlbnRpZXI9U1RFTVx1NzljZFx1N2ZhNFx1NmEyMVx1NTc4YgorZGNfaW5pdF9pZGVudGllcj1TVEVNXHU3OWNkXHU3ZmE0XHU1MjFkXHU1OWNiXHU1MzE2CitkY19saWNlbnNlPUVjbGlwc2VcdTUxNmNcdTUxNzFcdThiYjhcdTUzZWZcdWZmMDhFUExcdWZmMDkKK2RjX3B1Ymxpc2hlcj1FY2xpcHNlXHU1N2ZhXHU5MWQxXHU0ZjFhCitkY19TT1VSQ0U9aHR0cDovL3dpa2kuZWNsaXBzZS5vcmcvQXZhaWxhYmxlX01vZGVscyNNb2RlbHNfb2ZfUG9wdWxhdGlvbiAgIChhbmQgcmVmZXJlbmNlcyB0aGVyZS1pbikKK2RjX1BvcF9pbml0X1NPVVJDRT1odHRwOi8vd2lraS5lY2xpcHNlLm9yZy9Jbml0aWFsaXppbmdfYV9Qb3B1bGF0aW9uXHVmZjA4XHU1NDhjXHU1M2MyXHU4MDAzXHU4ZDQ0XHU2NTk5XHU0ZTJkXHVmZjA5CitkY190aXRsZV9QTT1cdTY4MDdcdTUxYzZcdTc5Y2RcdTdmYTRcdTZhMjFcdTU3OGIKK2RjX2Rlc2NfUE09XHU0ZTAwXHU0ZTJhXHU1N2ZhXHU2NzJjXHU3Njg0XHU3OWNkXHU3ZmE0XHU2YTIxXHU1NzhiXHU2NTJmXHU2MzAxXHU2MDUyXHU1YjlhXHU3Njg0XHU3ZmE0XHU2YTIxXHU1MWZhXHU3NTFmXHU0ZTBlXHU2YjdiXHU0ZWExXHU3Mzg3CitkY190aXRsZV9EUE09XHU3OWNkXHU3ZmE0XHU3ZWRmXHU4YmExXHU1YjY2XHU2YTIxXHU1NzhiCitkY19kZXNjX0RQTT1cdTRlMDBcdTRlMmFcdTY1MmZcdTYzMDFcdTU3ZmFcdTRlOGVcdTVlNzRcdTlmODRcdWZmMGNcdTYwMjdcdTUyMmJcdTdiNDlcdTcyNzlcdTYwMjdcdTVjMDZcdTc5Y2RcdTdmYTRcdTUyMDZcdTdlYzRcdTc2ODRcdTc5Y2RcdTdmYTRcdTdlZGZcdThiYTFcdTViNjZcdTZhMjFcdTU3OGIKK2RjX3RpdGxlX1NQTT1cdTk2OGZcdTY3M2FcdTc5Y2RcdTdmYTRcdTZhMjFcdTU3OGIKK2RjX2Rlc2NfU1BNPVx1NGUwMFx1NGUyYVx1NjUyZlx1NjMwMVx1OTY4Zlx1NjczYVx1NTczMFx1N2VkOVx1NjA1Mlx1NWI5YVx1NzY4NFx1NTFmYVx1NzUxZlx1NzM4N1x1NTQ4Y1x1NmI3Ylx1NGVhMVx1NzM4N1x1NTJhMFx1NTY2YVx1NzY4NFx1NzljZFx1N2ZhNFx1NmEyMVx1NTc4YgorZGNfdGl0bGVfU2Vhc29uYWxfUE09XHU1YjYzXHU4MjgyXHU2MDI3XHU3OWNkXHU3ZmE0XHU2YTIxXHU1NzhiCitkY19kZXNjX1NlYXNvbmFsX1BNPVx1NGUwMFx1NGUyYVx1NTdmYVx1NGU4ZVx1NWI2M1x1ODI4Mlx1NzY4NFx1NzljZFx1N2ZhNFx1NmEyMVx1NTc4Ylx1NjcwOVx1NTIyOVx1NGU4ZVx1NmEyMVx1NjJkZlx1NjYwNlx1ODY2Ylx1NWE5Mlx1NGVjYlx1ZmYwY1x1N2VkOVx1NmEyMVx1NTc4Ylx1NjNkMFx1NGY5Ylx1NGU4Nlx1NTdmYVx1NGU4ZVx1N2VhY1x1NWVhNlx1NzY4NFx1NWI2M1x1ODI4Mlx1NTNkOFx1NTMxNgorZGNfdGl0bGVfQURQTT1cdTc5Y2RcdTdmYTRcdTgwMDFcdTlmODRcdTUzMTZcdTZhMjFcdTU3OGIKK2RjX2Rlc2NfQURQTT1cdTRlMDBcdTRlMmFcdTViOWVcdTczYjBcdTRlODZcdTc5Y2RcdTdmYTRcdTgwMDFcdTlmODRcdTUzMTZcdTUyOWZcdTgwZmRcdTU0OGNcdTY1MmZcdTYzMDFcdTU3ZmFcdTRlOGVcdTc5Y2RcdTdmYTRcdTc2ODRcdTVlNzRcdTlmODRcdWZmMGNcdTYwMjdcdTUyMmJcdTdiNDlcdTc5Y2RcdTdmYTRcdTcyNzlcdTYwMjdcdTdlZDlcdTc5Y2RcdTdmYTRcdTUyMDZcdTdlYzRcdTc2ODRcdTZhMjFcdTU3OGIKK2RjX3RpdGxlX01QTT1cdTg2OGFcdTViNTBcdTc5Y2RcdTdmYTRcdTZhMjFcdTU3OGIKK2RjX2Rlc2NfTVBNPVx1NGUwMFx1NGUyYVx1NTNlZlx1NGVlNVx1OGY2Y1x1NjM2Mlx1NjIxMFx1NjNjZlx1OGZmMFx1NTQwNFx1NzljZFx1NGUwZFx1NTQwY1x1ODY4YVx1NWI1MFx1NzljZFx1N2ZhNFx1NzY4NFx1ODY4YVx1NWI1MFx1N2ZhNFx1NGY1M1x1NmEyMVx1NTc4Ylx1ZmYwY1x1OGJlNVx1NmEyMVx1NTc4Ylx1NGY3Zlx1NzUyOFNURU1cdTc2ODRcdTU3MzBcdTc0MDNcdTc5ZDFcdTViNjZcdTY1NzBcdTYzNmVcdTMwMDIKK2RjX2Rlc2NfUG9wX0luaXQ9XHU3NTI4XHU0ZjRkXHU3ZjZlXHU0ZmUxXHU2MDZmXHU2NzY1XHU1MjFkXHU1OWNiXHU1MzE2XHU2MzA3XHU1YjlhXHU3Njg0XHU3OWNkXHU3ZmE0XHU0ZTNhXHU0ZTAwXHU0ZTJhXHU2MzA3XHU1YjlhXHU3Njg0XHU1MDNjXHU2MjE2XHU1YmY5XHU0ZThlXHU0ZTAwXHU3ZWM0XHU1NzMwXHU1MzNhXHVmZjBjXHU0ZjdmXHU3NTI4XHU2M2E3XHU1MjM2XHU2MzA3XHU1YjlhXHU3Njg0XHU1MDNjXHUzMDAyCitkY190aXRsZV9Qb3BfSW5pdD1cdTc5Y2RcdTdmYTRcdTUyMWRcdTU5Y2JcdTUzMTYKK2RjX2Rlc2NfWWV0aV9Jbml0PVx1OTZlYVx1NGViYVx1NGViYVx1NTNlM1x1NTIxZFx1NTljYlx1NTMxNlx1NjYyZlx1NGUwMFx1NGUyYVx1NTNlZlx1ODljNlx1NTMxNlx1NTczMFx1NzQwM1x1NmQ3N1x1NjJkNFx1NzY4NFx1NGUwMFx1NzljZFx1NjViOVx1NmNkNVx1MzAwMlx1NTE3Nlx1NWI5ZVx1NWU3Nlx1NmNhMVx1NjcwOVx1NGUwMFx1NGUyYVx1NTNlYlx1NTA1YVx1MjAxY1x1OTZlYVx1NGViYVx1MjAxZFx1NzY4NFx1NzljZFx1N2ZhNFx1ZmYwY1x1NGY0Nlx1NjYyZlx1NTcyOFx1OGZkOVx1NzljZFx1MjAxY1x1NmEyMVx1NTc4Ylx1MjAxZFx1NGUyZFx1MjAxY1x1OTZlYVx1NGViYVx1MjAxZFx1OGZkOVx1NzljZFx1NzljZFx1N2ZhNFx1NjYyZlx1NTQ4Y1x1NTczMFx1NzQwM1x1NmQ3N1x1NjJkNFx1NjIxMFx1NmJkNFx1NGY4Ylx1Njc2NVx1NTIxYlx1NWVmYVx1NzY4NFx1MzAwMgorZGNfdGl0bGVfWWV0aV9Jbml0PVx1OTZlYVx1NGViYVx1NGViYVx1NTNlM1x1NTIxZFx1NTljYlx1NTMxNgorICAgICAgICAgCitfVUlfQ3JlYXRlQ2hpbGRfdGV4dD17MH0KK19VSV9DcmVhdGVDaGlsZF90ZXh0Mj17MX0gezB9CitfVUlfQ3JlYXRlQ2hpbGRfdGV4dDM9ezF9CitfVUlfQ3JlYXRlQ2hpbGRfdG9vbHRpcD1cdTUyMWJcdTVlZmFcdTU3Mjh7MX0gezB9XHU2NWIwXHU1MjlmXHU4MGZkCitfVUlfQ3JlYXRlQ2hpbGRfZGVzY3JpcHRpb249XHU0ZTNhXHU5MDA5XHU1YjlhXHU3Njg0ezJ9XHU3Njg0ezF9XHU3Mjc5XHU2MDI3XHU2NzY1XHU1MjFiXHU1ZWZhXHU0ZTAwXHU0ZTJhXHU2NWIwXHU3Njg0ezB9XHU1YjUwXHU3YzdiCitfVUlfQ3JlYXRlU2libGluZ19kZXNjcmlwdGlvbj1cdTU3Mjh7MX1cdTc2ODRcdTcyMzZcdTk2YzZcdTRlMmRcdTRlM2FcdTkwMDlcdTViOWFcdTc2ODR7Mn1cdTY3NjVcdTUyMWJcdTVlZmFcdTRlMDBcdTRlMmF7MH1cdTdjN2JcdTU3OGJcdTc2ODRcdTY1YjBcdTc2ODRcdTUxNDRcdTVmMWZcdTdjN2IKKworX1VJX1Byb3BlcnR5RGVzY3JpcHRvcl9kZXNjcmlwdGlvbj17MH1cdTRlY2VcdTVjNWV7MX0KKworX1VJX1BvcHVsYXRpb25Nb2RlbF90eXBlPVx1NzljZFx1N2ZhNFx1NmEyMVx1NTc4YgorX1VJX1N0YW5kYXJkUG9wdWxhdGlvbk1vZGVsX3R5cGU9XHU3OWNkXHU3ZmE0XHU2YTIxXHU1NzhiCitfVUlfVW5rbm93bl90eXBlPVx1NWJmOVx1OGM2MQorCitfVUlfVW5rbm93bl9kYXRhdHlwZT1cdTRlZjdcdTUwM2MKKworX1VJX1BvcHVsYXRpb25Nb2RlbF9wb3B1bGF0aW9uSWRlbnRpZmllcl9mZWF0dXJlPVx1NzljZFx1N2ZhNFx1NjgwN1x1OGJjNlx1N2IyNgorX1VJX1N0YW5kYXJkUG9wdWxhdGlvbk1vZGVsX2JpcnRoUmF0ZV9mZWF0dXJlPVx1NTFmYVx1NzUxZlx1NzM4NworX1VJX1N0YW5kYXJkUG9wdWxhdGlvbk1vZGVsX2RlYXRoUmF0ZV9mZWF0dXJlPVx1NmI3Ylx1NGVhMVx1NzM4NworX1VJX1Vua25vd25fZmVhdHVyZT1cdTY3MmFcdTYzMDdcdTViOWEKKworCitfVUlfU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxfdGltZVBlcmlvZF9mZWF0dXJlPVx1NjVmNlx1OTVmNFx1NmJiNQorX1VJX1BvcHVsYXRpb25Nb2RlbExhYmVsX3R5cGU9XHU3OWNkXHU3ZmE0XHU2YTIxXHU1NzhiXHU2ODA3XHU3YjdlCitfVUlfU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxMYWJlbF90eXBlPVx1NzljZFx1N2ZhNFx1NmEyMVx1NTc4Ylx1NjgwN1x1N2I3ZQorX1VJX0ludGVncmF0aW9uTGFiZWxfdHlwZT1cdTk2YzZcdTYyMTBcdTY4MDdcdTdiN2UKK19VSV9JbnRlZ3JhdGlvbkRlY29yYXRvcl90eXBlPVx1OTZjNlx1NjIxMFx1NGZlZVx1OTk3MFx1NTY2OAorX1VJX1N0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWxfZGVsdGFWYWx1ZV9mZWF0dXJlPVx1NWRlZVx1NTAzYworX1VJX1N0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWxfcHJvYmVWYWx1ZV9mZWF0dXJlPVx1NmQ0Ylx1OGJkNVx1NjgwN1x1N2I3ZQorX1VJX1N0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWxfdGVtcFZhbHVlX2ZlYXR1cmU9XHU2ZTI5XHU1ZWE2XHU1MDNjCitfVUlfU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxMYWJlbF9vcmlnaW5hbFZhbHVlX2ZlYXR1cmU9XHU1MzlmXHU1OWNiXHU1MDNjCitfVUlfU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxMYWJlbF9lcnJvclNjYWxlX2ZlYXR1cmU9XHU5NTE5XHU4YmVmXHU4OWM0XHU2YTIxCitfVUlfUG9wdWxhdGlvbk1vZGVsVmFsdWVfdHlwZT1cdTc5Y2RcdTdmYTRcdTZhMjFcdTU3OGJcdTUwM2MKK19VSV9TdGFuZGFyZFBvcHVsYXRpb25Nb2RlbExhYmVsVmFsdWVfdHlwZT1cdTc5Y2RcdTdmYTRcdTZhMjFcdTU3OGJcdTc2ODRcdTY4MDdcdTdiN2VcdTUwM2MKK19VSV9Qb3B1bGF0aW9uTW9kZWxMYWJlbFZhbHVlX3R5cGU9XHU3OWNkXHU3ZmE0XHU2YTIxXHU1NzhiXHU3Njg0XHU2ODA3XHU3YjdlXHU1MDNjCitfVUlfQXJlYUxhYmVsX3R5cGU9XHU5NzYyXHU3OWVmXHU2ODA3XHU3YjdlCitfVUlfQXJlYUxhYmVsVmFsdWVfdHlwZT1cdTk3NjJcdTc5ZWZcdTY4MDdcdTdiN2VcdTUwM2MKK19VSV9Db21tb25Cb3JkZXJSZWxhdGlvbnNoaXBMYWJlbF90eXBlPVx1NTE3MVx1NTQwY1x1OGZiOVx1NzU0Y1x1NzY4NFx1NTE3M1x1N2NmYlx1NjgwN1x1N2I3ZQorX1VJX0NvbW1vbkJvcmRlclJlbGF0aW9uc2hpcExhYmVsVmFsdWVfdHlwZT1cdTUxNzFcdTU0MGNcdThmYjlcdTc1NGNcdTUxNzNcdTdjZmJcdTc2ODRcdTY4MDdcdTdiN2VcdTUwM2MKK19VSV9QaHlzaWNhbFJlbGF0aW9uc2hpcExhYmVsX3R5cGU9XHU1YjllXHU5NjQ1XHU1MTczXHU3Y2ZiXHU3Njg0XHU2ODA3XHU3YjdlCitfVUlfUG9wdWxhdGlvbkxhYmVsX3R5cGU9XHU3OWNkXHU3ZmE0XHU2ODA3XHU3YjdlCitfVUlfUG9wdWxhdGlvbkxhYmVsVmFsdWVfdHlwZT1cdTc5Y2RcdTdmYTRcdTY4MDdcdTdiN2VcdTUwM2MKK19VSV9SZWxhdGl2ZVBoeXNpY2FsUmVsYXRpb25zaGlwTGFiZWxfdHlwZT1cdTc2ZjhcdTViZjlcdTcyNjlcdTc0MDZcdTUxNzNcdTdjZmJcdTc2ODRcdTY4MDdcdTdiN2UKK19VSV9SZWxhdGl2ZVBoeXNpY2FsUmVsYXRpb25zaGlwTGFiZWxWYWx1ZV90eXBlPVx1NzZmOFx1NWJmOVx1NzI2OVx1NzQwNlx1NTE3M1x1N2NmYlx1NzY4NFx1NjgwN1x1N2I3ZVx1NTAzYworX1VJX1RyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsX3R5cGU9XHU0ZWE0XHU5MDFhXHU1MTczXHU3Y2ZiXHU3Njg0XHU2ODA3XHU3YjdlCitfVUlfVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxWYWx1ZV90eXBlPVx1NGVhNFx1OTAxYVx1NTE3M1x1N2NmYlx1NzY4NFx1NjgwN1x1N2I3ZVx1NTAzYworX1VJX1BoeXNpY2FsUmVsYXRpb25zaGlwTGFiZWxWYWx1ZV90eXBlPVx1NWI5ZVx1OTY0NVx1NTE3M1x1N2NmYlx1NzY4NFx1NjgwN1x1N2I3ZVx1NTAzYworX1VJX1JvYWRUcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbF90eXBlPVx1OTA1M1x1OGRlZlx1OGZkMFx1OGY5M1x1NTE3M1x1N2NmYlx1NzY4NFx1NjgwN1x1N2I3ZQorX1VJX1JvYWRUcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbFZhbHVlX3R5cGU9XHU5MDUzXHU4ZGVmXHU4ZmQwXHU4ZjkzXHU1MTczXHU3Y2ZiXHU3Njg0XHU2ODA3XHU3YjdlXHU1MDNjCitfVUlfUG9wdWxhdGlvbk1vZGVsTGFiZWxfcG9wdWxhdGlvbkxhYmVsX2ZlYXR1cmU9XHU3OWNkXHU3ZmE0XHU2ODA3XHU3YjdlCitfVUlfQXJlYUxhYmVsX2N1cnJlbnRBcmVhVmFsdWVfZmVhdHVyZT1cdTVmNTNcdTUyNGRcdTUzM2FcdTU3ZGZcdTUwM2MKK19VSV9BcmVhTGFiZWxWYWx1ZV9hcmVhX2ZlYXR1cmU9XHU5NzYyXHU3OWVmCitfVUlfQ29tbW9uQm9yZGVyUmVsYXRpb25zaGlwTGFiZWxWYWx1ZV9ib3JkZXJMZW5ndGhfZmVhdHVyZT1cdThmYjlcdTc1NGNcdTk1N2ZcdTVlYTYKK19VSV9Qb3B1bGF0aW9uTGFiZWxfcG9wdWxhdGlvbklkZW50aWZpZXJfZmVhdHVyZT1cdTc5Y2RcdTdmYTRcdTY4MDdcdThiYzZcdTdiMjYKK19VSV9Qb3B1bGF0aW9uTGFiZWxfbmFtZV9mZWF0dXJlPVx1NTQwZFx1NzlmMAorX1VJX1BvcHVsYXRpb25MYWJlbF9jdXJyZW50UG9wdWxhdGlvblZhbHVlX2ZlYXR1cmU9XHU3NmVlXHU1MjRkXHU3Njg0XHU3OWNkXHU3ZmE0XHU1MDNjCitfVUlfUG9wdWxhdGlvbkxhYmVsX3BvcHVsYXRlZEFyZWFfZmVhdHVyZT1cdTVjNDVcdTRmNGZcdTUzM2EKK19VSV9Qb3B1bGF0aW9uTGFiZWxfdmFsaWRZZWFyX2ZlYXR1cmU9XHU2NzA5XHU2NTQ4XHU1ZTc0CitfVUlfUG9wdWxhdGlvbkxhYmVsVmFsdWVfY291bnRfZmVhdHVyZT1cdThiYTFcdTY1NzAKK19VSV9SZWxhdGl2ZVBoeXNpY2FsUmVsYXRpb25zaGlwTGFiZWxfY3VycmVudFJlbGF0aW9uc2hpcF9mZWF0dXJlPVx1NWY1M1x1NTI0ZFx1NzY4NFx1NTE3M1x1N2NmYgorX1VJX1JlbGF0aXZlUGh5c2ljYWxSZWxhdGlvbnNoaXBMYWJlbFZhbHVlX2FkamFjZW50X2ZlYXR1cmU9XHU3NmY4XHU5MGJiCitfVUlfUmVsYXRpdmVQaHlzaWNhbFJlbGF0aW9uc2hpcExhYmVsVmFsdWVfcmVsYXRpb25zaGlwX2ZlYXR1cmU9XHU1MTczXHU3Y2ZiCitfVUlfVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxfdHJhbnNwb3J0TW9kZV9mZWF0dXJlPVx1NGVhNFx1OTAxYVx1NjViOVx1NWYwZgorX1VJX1RyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsX3BvcHVsYXRpb25JZGVudGlmaWVyX2ZlYXR1cmU9XHU3OWNkXHU3ZmE0XHU2ODA3XHU4YmM2XHU3YjI2CitfVUlfVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxfdHJhbnNwb3J0SWRlbnRpZmllcl9mZWF0dXJlPVx1NGVhNFx1OTAxYVx1NjgwN1x1OGJjNgorX1VJX1RyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsX2N1cnJlbnRUcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbFZhbHVlX2ZlYXR1cmU9XHU1ZjUzXHU1MjRkXHU4ZmQwXHU4ZjkzXHU1MTczXHU3Y2ZiXHU2ODA3XHU3YjdlXHU1MDNjCitfVUlfVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxfcmF0ZVRpbWVQZXJpb2RfZmVhdHVyZT1cdTkwMWZcdTczODdcdTY1ZjZcdTk1ZjRcdTZiYjUKK19VSV9UcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbF9kZXBhcnR1cmVDYXBhY2l0eV9mZWF0dXJlPVx1NTFmYVx1NTNkMVx1NWJiOVx1OTFjZgorX1VJX1RyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsX21heGltdW1EZXBhcnR1cmVDYXBhY2l0eV9mZWF0dXJlPVx1NjcwMFx1NTkyN1x1NTFmYVx1NTNkMVx1NWJiOVx1OTFjZgorX1VJX1RyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsX2NhcGFjaXR5X2ZlYXR1cmU9XHU1YmI5XHU5MWNmCitfVUlfVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxfbWF4aW11bUNhcGFjaXR5X2ZlYXR1cmU9XHU2NzAwXHU1OTI3XHU1YmI5XHU5MWNmCitfVUlfVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxfdHJhbnNpdFRpbWVfZmVhdHVyZT1cdThmZDBcdTkwMDFcdTY1ZjZcdTk1ZjQKK19VSV9UcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbF9zdGFydFVwRGVsYXlfZmVhdHVyZT1cdTU0MmZcdTUyYThcdTVlZjZcdTY1ZjYKK19VSV9UcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbFZhbHVlX2F2YWlsYWJsZURlcGFydHVyZUNhcGFjaXR5UHJvcG9ydGlvbl9mZWF0dXJlPVx1NzNiMFx1NjcwOVx1NzY4NFx1NzliYlx1NmUyZlx1NWJiOVx1OTFjZlx1NmJkNFx1NzM4NworX1VJX1JvYWRUcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbFZhbHVlX3JvYWROYW1lX2ZlYXR1cmU9XHU4ZGVmXHU1NDBkCitfVUlfUm9hZFRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsVmFsdWVfcm9hZENsYXNzX2ZlYXR1cmU9XHU5MDUzXHU4ZGVmXHU3YjQ5XHU3ZWE3CitfVUlfUm9hZFRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsVmFsdWVfbnVtYmVyQ3Jvc3NpbmdzX2ZlYXR1cmU9XHU3YTdmXHU4ZmM3XHU4ZmI5XHU3NTRjXHU3Njg0XHU4ZGVmXHU3Njg0XHU2NTcwXHU5MWNmCitfVUlfUmVsYXRpdmVQaHlzaWNhbFJlbGF0aW9uc2hpcF9VbnNwZWNpZmllZF9saXRlcmFsPVx1NjcyYVx1NjMwN1x1NWI5YQorX1VJX1JlbGF0aXZlUGh5c2ljYWxSZWxhdGlvbnNoaXBfQWJvdmVfbGl0ZXJhbD1cdTRlMGFcdTk3NjIKK19VSV9SZWxhdGl2ZVBoeXNpY2FsUmVsYXRpb25zaGlwX0JlbG93X2xpdGVyYWw9XHU0ZTBiXHU5NzYyCitfVUlfUmVsYXRpdmVQaHlzaWNhbFJlbGF0aW9uc2hpcF9SaWdodE9mX2xpdGVyYWw9XHU1NzI4XHU1M2YzXHU4ZmI5CitfVUlfUmVsYXRpdmVQaHlzaWNhbFJlbGF0aW9uc2hpcF9MZWZ0T2ZfbGl0ZXJhbD1cdTVkZTZcdThmYjlcdTc2ODQKK19VSV9SZWxhdGl2ZVBoeXNpY2FsUmVsYXRpb25zaGlwX05vcnRoT2ZfbGl0ZXJhbD1cdTU3MjhcdTUzMTdcdThmYjkKK19VSV9SZWxhdGl2ZVBoeXNpY2FsUmVsYXRpb25zaGlwX1NvdXRoT2ZfbGl0ZXJhbD1cdTU3MjhcdTUzNTdcdThmYjkKK19VSV9SZWxhdGl2ZVBoeXNpY2FsUmVsYXRpb25zaGlwX1dlc3RPZl9saXRlcmFsPVx1NTcyOFx1ODk3Zlx1OGZiOQorX1VJX1JlbGF0aXZlUGh5c2ljYWxSZWxhdGlvbnNoaXBfRWFzdE9mX2xpdGVyYWw9XHU1NzI4XHU0ZTFjXHU4ZmI5CitfVUlfUmVsYXRpdmVQaHlzaWNhbFJlbGF0aW9uc2hpcF9Db250YWluc19saXRlcmFsPVx1NTMwNVx1NTQyYgorX1VJX1JlbGF0aXZlUGh5c2ljYWxSZWxhdGlvbnNoaXBfQ29udGFpbmVkQnlfbGl0ZXJhbD1cdTg4YWJcdTMwMDJcdTMwMDJcdTMwMDJcdTYzYTdcdTUyMzYKK19VSV9SZWxhdGl2ZVBoeXNpY2FsUmVsYXRpb25zaGlwX092ZXJsYXBzX2xpdGVyYWw9XHU5MWNkXHU1M2UwCitfVUlfUmVsYXRpdmVQaHlzaWNhbFJlbGF0aW9uc2hpcF9PcmJpdHNfbGl0ZXJhbD1cdThmNjhcdTkwNTMKK19VSV9UcmFuc3BvcnRNb2RlX3Vuc3BlY2lmaWVkX2xpdGVyYWw9XHU2NzJhXHU2MzA3XHU1YjlhCitfVUlfVHJhbnNwb3J0TW9kZV9haXJfbGl0ZXJhbD1cdTdhN2FcdTZjMTQKK19VSV9UcmFuc3BvcnRNb2RlX3JvYWRfbGl0ZXJhbD1cdThkZWYKK19VSV9UcmFuc3BvcnRNb2RlX3JhaWxfbGl0ZXJhbD1cdTk0YzFcdThkZWYKK19VSV9UcmFuc3BvcnRNb2RlX21hcmluZV9saXRlcmFsPVx1NmQ3N1x1NmQwYgorX1VJX1RyYW5zcG9ydE1vZGVfZm9vdF9saXRlcmFsPVx1ODExYQorX1VJX1N0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWxWYWx1ZV9jb3VudF9mZWF0dXJlPVx1OGJhMVx1NjU3MAorX1VJX0ludGVncmF0aW9uTGFiZWxWYWx1ZV90eXBlPVx1OTZjNlx1NjIxMFx1NjgwN1x1N2I3ZVx1NTAzYworX1VJX1N0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWxWYWx1ZV9uZXh0VmFsdWVWYWxpZF9mZWF0dXJlPVx1NGUwYlx1NGUwMFx1NGUyYVx1NTAzY1x1NzY4NFx1NjcwOVx1NjU0OAorX1VJX1N0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWxWYWx1ZV9pbmNpZGVuY2VfZmVhdHVyZT1cdTUzZDFcdTc1YzVcdTczODcKK19VSV9Qb3B1bGF0aW9uTW9kZWxfbmFtZV9mZWF0dXJlPVx1NTQwZFx1NzlmMAorX1VJX1N0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWxWYWx1ZV9iaXJ0aHNfZmVhdHVyZT1cdTUxZmFcdTc1MWYKK19VSV9TdGFuZGFyZFBvcHVsYXRpb25Nb2RlbExhYmVsVmFsdWVfZGVhdGhzX2ZlYXR1cmU9XHU2YjdiXHU0ZWExCitfVUlfU3RvY2hhc3RpY1N0YW5kYXJkUG9wdWxhdGlvbk1vZGVsX3R5cGU9XHU5NjhmXHU1MzczXHU2ODA3XHU1MWM2XHU3OWNkXHU3ZmE0XHU2YTIxXHU1NzhiCitfVUlfU3RvY2hhc3RpY1N0YW5kYXJkUG9wdWxhdGlvbk1vZGVsX2dhaW5fZmVhdHVyZT1cdTU4OWVcdTc2Y2EKK19VSV9TdGFuZGFyZFBvcHVsYXRpb25Nb2RlbExhYmVsVmFsdWVfZGVuc2l0eV9mZWF0dXJlPVx1NWJjNlx1NWVhNgorX1VJX0RlbW9ncmFwaGljUG9wdWxhdGlvbk1vZGVsX3R5cGU9XHU3OWNkXHU3ZmE0XHU3ZWRmXHU4YmExXHU1YjY2XHU2YTIxXHU1NzhiCitfVUlfUG9wdWxhdGlvbkdyb3VwX3R5cGU9XHU3OWNkXHU3ZmE0XHU1MjA2XHU3ZWM0CitfVUlfRGVtb2dyYXBoaWNQb3B1bGF0aW9uTW9kZWxfcG9wdWxhdGlvbkdyb3Vwc19mZWF0dXJlPVx1NzljZFx1N2ZhNFx1NTIwNlx1N2VjNAorX1VJX1BvcHVsYXRpb25Hcm91cF9pZGVudGlmaWVyX2ZlYXR1cmU9XHU2ODA3XHU4YmM2XHU3YjI2CitfVUlfUG9wdWxhdGlvbkdyb3VwX2ZyYWN0aW9uX2ZlYXR1cmU9XHU1MjA2XHU2NTcwCitfVUlfUG9wdWxhdGlvbk1vZGVsTGFiZWxfcG9wdWxhdGlvbklkZW50aWZpZXJfZmVhdHVyZT1cdTc5Y2RcdTdmYTRcdTY4MDdcdThiYzZcdTdiMjYKK19VSV9Qb3B1bGF0aW9uTW9kZWxfdGFyZ2V0VVJJX2ZlYXR1cmU9XHU3NmVlXHU2ODA3VVJJCitfVUlfUG9wdWxhdGlvbk1vZGVsX3RhcmdldElTT0tleV9mZWF0dXJlPVx1NzZlZVx1NjgwN0lTT1x1NGVlM1x1NzgwMQorX1VJX1BvcHVsYXRpb25Jbml0aWFsaXplcl90eXBlPVx1NzljZFx1N2ZhNFx1NTIxZFx1NTljYlx1NTMxNgorX1VJX1N0YW5kYXJkUG9wdWxhdGlvbkluaXRpYWxpemVyX3R5cGU9XHU3OWNkXHU3ZmE0XHU1MjFkXHU1OWNiXHU1MzE2CitfVUlfUG9wdWxhdGlvbkluaXRpYWxpemVyX3RhcmdldElTT0tleV9mZWF0dXJlPVx1NzZlZVx1NjgwN0lTT1x1NGVlM1x1NzgwMQorX1VJX1N0YW5kYXJkUG9wdWxhdGlvbkluaXRpYWxpemVyX2luZGl2aWR1YWxzX2ZlYXR1cmU9XHU0ZTJhXHU0ZWJhCitfVUlfU3RhbmRhcmRQb3B1bGF0aW9uSW5pdGlhbGl6ZXJfdXNlRGVuc2l0eV9mZWF0dXJlPVx1NGY3Zlx1NzUyOFx1NWJjNlx1NWVhNgorX1VJX1N0YW5kYXJkUG9wdWxhdGlvbkluaXRpYWxpemVyX3BvcHVsYXRpb25JZGVudGlmaWVyX2ZlYXR1cmU9XHU3OWNkXHU3ZmE0XHU2ODA3XHU4YmM2XHU3YjI2CitfVUlfU2Vhc29uYWxQb3B1bGF0aW9uTW9kZWxfdHlwZT1cdTViNjNcdTgyODJcdTYwMjdcdTc5Y2RcdTdmYTRcdTZhMjFcdTU3OGIKK19VSV9TZWFzb25hbFBvcHVsYXRpb25Nb2RlbF9waGFzZV9mZWF0dXJlPVx1NzZmOAorX1VJX1NlYXNvbmFsUG9wdWxhdGlvbk1vZGVsX21vZHVsYXRpb25BbXBsaXR1ZGVfZmVhdHVyZT1cdThjMDNcdTUyMzZcdTVlNDVcdTVlYTYKK19VSV9TZWFzb25hbFBvcHVsYXRpb25Nb2RlbF9mcmVxdWVuY3lfZmVhdHVyZT1cdTk4OTFcdTczODcKK19VSV9TZWFzb25hbFBvcHVsYXRpb25Nb2RlbF91c2VMYXRpdHVkZV9mZWF0dXJlPVx1NGY3Zlx1NzUyOFx1N2VhY1x1NWVhNgorX1VJX1NlYXNvbmFsUG9wdWxhdGlvbk1vZGVsX3BlcmlvZF9mZWF0dXJlPVx1NTQ2OFx1NjcxZgorX1VJX0VhcnRoU2NpZW5jZVBvcHVsYXRpb25Jbml0aWFsaXplcl90eXBlPVx1NTczMFx1NzQwM1x1NzlkMVx1NWI2Nlx1NzljZFx1N2ZhNFx1NTIxZFx1NTljYlx1NTMxNgorX1VJX1lldGlQb3B1bGF0aW9uSW5pdGlhbGl6ZXJfdHlwZT1cdTk2ZWFcdTRlYmFcdTRlYmFcdTUzZTNcdTUyMWRcdTU5Y2JcdTUzMTYKK19VSV9Qb3B1bGF0aW9uSW5pdGlhbGl6ZXJfcG9wdWxhdGlvbklkZW50aWZpZXJfZmVhdHVyZT1cdTc5Y2RcdTdmYTRcdTY4MDdcdThiYzZcdTdiMjYKK19VSV9Nb3NxdWl0b1BvcHVsYXRpb25Nb2RlbF90eXBlPVx1ODY4YVx1NWI1MFx1NzljZFx1N2ZhNFx1NmEyMVx1NTc4YgorX1VJX01vc3F1aXRvUG9wdWxhdGlvbk1vZGVsX3NjYWxpbmdGYWN0b3JfZmVhdHVyZT1cdTdmMjlcdTY1M2VcdTU2ZTBcdTViNTAKK19VSV9Nb3NxdWl0b1BvcHVsYXRpb25Nb2RlbF90aW1lUGVyaW9kX2ZlYXR1cmU9XHU2NWY2XHU5NWY0XHU2YmI1CitfVUlfTW9zcXVpdG9Qb3B1bGF0aW9uTW9kZWxfbW9ydGFsaXR5UmF0ZV9mZWF0dXJlPVx1NmI3Ylx1NGVhMVx1NzM4NworX1VJX01vc3F1aXRvUG9wdWxhdGlvbk1vZGVsX2hvc3RfZmVhdHVyZT1cdTViYzRcdTRlM2IKK19VSV9BZ2luZ1BvcHVsYXRpb25Nb2RlbF90eXBlPVx1NzljZFx1N2ZhNFx1ODAwMVx1OWY4NFx1NTMxNlx1NmEyMVx1NTc4YgorX1VJX0FnZUdyb3VwX3R5cGU9XHU1ZTc0XHU5Zjg0XHU3ZWM0CitfVUlfQWdlR3JvdXBfZnJvbUFnZV9mZWF0dXJlPVx1NGVjZVx1NWU3NFx1OWY4NAorX1VJX0FnZUdyb3VwX3RvQWdlX2ZlYXR1cmU9XHU1ZTc0XHU5Zjg0CitfVUlfQWdlR3JvdXBfZGVhdGhGYWN0b3JfZmVhdHVyZT1cdTZiN2JcdTRlYTFcdTU2ZTBcdTdkMjAKK19VSV9BZ2luZ1BvcHVsYXRpb25Nb2RlbF9oYXNNYXhBZ2VfZmVhdHVyZT1cdTY3MDlcdTY3MDBcdTU5MjdcdTVlNzRcdTlmODQKK19VSV9BZ2VHcm91cF9oYXNNYXhBZ2VfZmVhdHVyZT1cdTY3MDlcdTY3MDBcdTU5MjdcdTVlNzRcdTlmODQKK19VSV9BZ2VHcm91cF9saW1pdGVkX2ZlYXR1cmU9XHU2NzA5XHU5NjUwXHU3Njg0CmRpZmYgLS1naXQgYS9tb2RlbHMvcG9wdWxhdGlvbnMvb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzL3NjaGVtYS9wb3B1bGF0aW9uaW5pdGlhbGl6ZXIuZXhzZCBiL21vZGVscy9wb3B1bGF0aW9ucy9vcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMvc2NoZW1hL3BvcHVsYXRpb25pbml0aWFsaXplci5leHNkCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlmMDA3ZDEKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvcG9wdWxhdGlvbnMvb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzL3NjaGVtYS9wb3B1bGF0aW9uaW5pdGlhbGl6ZXIuZXhzZApAQCAtMCwwICsxLDEwNSBAQAorPD94bWwgdmVyc2lvbj0nMS4wJyBlbmNvZGluZz0nVVRGLTgnPz4KKzwhLS0gU2NoZW1hIGZpbGUgd3JpdHRlbiBieSBQREUgLS0+Cis8c2NoZW1hIHRhcmdldE5hbWVzcGFjZT0ib3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiPgorPGFubm90YXRpb24+CisgICAgICA8YXBwSW5mbz4KKyAgICAgICAgIDxtZXRhLnNjaGVtYSBwbHVnaW49Im9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscyIgaWQ9InBvcHVsYXRpb25pbml0aWFsaXplciIgbmFtZT0iJUVQX1BvcHVsYXRpb25pbml0aWFsaXplciIvPgorICAgICAgPC9hcHBJbmZvPgorICAgICAgPGRvY3VtZW50YXRpb24+CisgICAgICAgICBVc2VkIHRvIHJlZ2lzdGVyIG5ldyBtZXRob2RzIG9mIGluaXRpYWxpemluZyBwb3B1bGF0aW9ucyBpbiBTVEVNCisgICAgICA8L2RvY3VtZW50YXRpb24+CisgICA8L2Fubm90YXRpb24+CisKKyAgIDxpbmNsdWRlIHNjaGVtYUxvY2F0aW9uPSJzY2hlbWE6Ly9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc2NoZW1hL2R1Ymxpbl9jb3JlLmV4c2QiLz4KKworICAgPGVsZW1lbnQgbmFtZT0iZXh0ZW5zaW9uIj4KKyAgICAgIDxhbm5vdGF0aW9uPgorICAgICAgICAgPGFwcEluZm8+CisgICAgICAgICAgICA8bWV0YS5lbGVtZW50IC8+CisgICAgICAgICA8L2FwcEluZm8+CisgICAgICA8L2Fubm90YXRpb24+CisgICAgICA8Y29tcGxleFR5cGU+CisgICAgICAgICA8c2VxdWVuY2U+CisgICAgICAgICAgICA8ZWxlbWVudCByZWY9ImNsYXNzZGVmIi8+CisgICAgICAgICAgICA8ZWxlbWVudCByZWY9ImR1Ymxpbl9jb3JlIi8+CisgICAgICAgICA8L3NlcXVlbmNlPgorICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJwb2ludCIgdHlwZT0ic3RyaW5nIiB1c2U9InJlcXVpcmVkIj4KKyAgICAgICAgICAgIDxhbm5vdGF0aW9uPgorICAgICAgICAgICAgICAgPGRvY3VtZW50YXRpb24+CisgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgIDwvZG9jdW1lbnRhdGlvbj4KKyAgICAgICAgICAgIDwvYW5ub3RhdGlvbj4KKyAgICAgICAgIDwvYXR0cmlidXRlPgorICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJpZCIgdHlwZT0ic3RyaW5nIj4KKyAgICAgICAgICAgIDxhbm5vdGF0aW9uPgorICAgICAgICAgICAgICAgPGRvY3VtZW50YXRpb24+CisgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgIDwvZG9jdW1lbnRhdGlvbj4KKyAgICAgICAgICAgIDwvYW5ub3RhdGlvbj4KKyAgICAgICAgIDwvYXR0cmlidXRlPgorICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJuYW1lIiB0eXBlPSJzdHJpbmciPgorICAgICAgICAgICAgPGFubm90YXRpb24+CisgICAgICAgICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KKyAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgorICAgICAgICAgICAgICAgPGFwcEluZm8+CisgICAgICAgICAgICAgICAgICA8bWV0YS5hdHRyaWJ1dGUgdHJhbnNsYXRhYmxlPSJ0cnVlIi8+CisgICAgICAgICAgICAgICA8L2FwcEluZm8+CisgICAgICAgICAgICA8L2Fubm90YXRpb24+CisgICAgICAgICA8L2F0dHJpYnV0ZT4KKyAgICAgIDwvY29tcGxleFR5cGU+CisgICA8L2VsZW1lbnQ+CisKKyAgIDxlbGVtZW50IG5hbWU9ImNsYXNzZGVmIj4KKyAgICAgIDxjb21wbGV4VHlwZT4KKyAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0iY2xhc3MiIHR5cGU9InN0cmluZyIgdXNlPSJyZXF1aXJlZCI+CisgICAgICAgICAgICA8YW5ub3RhdGlvbj4KKyAgICAgICAgICAgICAgIDxkb2N1bWVudGF0aW9uPgorICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICA8L2RvY3VtZW50YXRpb24+CisgICAgICAgICAgICAgICA8YXBwSW5mbz4KKyAgICAgICAgICAgICAgICAgIDxtZXRhLmF0dHJpYnV0ZSBraW5kPSJqYXZhIiBiYXNlZE9uPSJvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuaW1wbC5Qb3B1bGF0aW9uSW5pdGlhbGl6ZXJJbXBsOm9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5pbXBsLlBvcHVsYXRpb25Jbml0aWFsaXplciIvPgorICAgICAgICAgICAgICAgPC9hcHBJbmZvPgorICAgICAgICAgICAgPC9hbm5vdGF0aW9uPgorICAgICAgICAgPC9hdHRyaWJ1dGU+CisgICAgICA8L2NvbXBsZXhUeXBlPgorICAgPC9lbGVtZW50PgorCisgICA8YW5ub3RhdGlvbj4KKyAgICAgIDxhcHBJbmZvPgorICAgICAgICAgPG1ldGEuc2VjdGlvbiB0eXBlPSJzaW5jZSIvPgorICAgICAgPC9hcHBJbmZvPgorICAgICAgPGRvY3VtZW50YXRpb24+CisgICAgICAgICAxLjAuMQorICAgICAgPC9kb2N1bWVudGF0aW9uPgorICAgPC9hbm5vdGF0aW9uPgorCisgICA8YW5ub3RhdGlvbj4KKyAgICAgIDxhcHBJbmZvPgorICAgICAgICAgPG1ldGEuc2VjdGlvbiB0eXBlPSJleGFtcGxlcyIvPgorICAgICAgPC9hcHBJbmZvPgorICAgICAgPGRvY3VtZW50YXRpb24+CisgICAgICAgICBbRW50ZXIgZXh0ZW5zaW9uIHBvaW50IHVzYWdlIGV4YW1wbGUgaGVyZS5dCisgICAgICA8L2RvY3VtZW50YXRpb24+CisgICA8L2Fubm90YXRpb24+CisKKyAgIDxhbm5vdGF0aW9uPgorICAgICAgPGFwcEluZm8+CisgICAgICAgICA8bWV0YS5zZWN0aW9uIHR5cGU9ImFwaWluZm8iLz4KKyAgICAgIDwvYXBwSW5mbz4KKyAgICAgIDxkb2N1bWVudGF0aW9uPgorICAgICAgICAgW0VudGVyIEFQSSBpbmZvcm1hdGlvbiBoZXJlLl0KKyAgICAgIDwvZG9jdW1lbnRhdGlvbj4KKyAgIDwvYW5ub3RhdGlvbj4KKworICAgPGFubm90YXRpb24+CisgICAgICA8YXBwSW5mbz4KKyAgICAgICAgIDxtZXRhLnNlY3Rpb24gdHlwZT0iaW1wbGVtZW50YXRpb24iLz4KKyAgICAgIDwvYXBwSW5mbz4KKyAgICAgIDxkb2N1bWVudGF0aW9uPgorICAgICAgICAgW0VudGVyIGluZm9ybWF0aW9uIGFib3V0IHN1cHBsaWVkIGltcGxlbWVudGF0aW9uIG9mIHRoaXMgZXh0ZW5zaW9uIHBvaW50Ll0KKyAgICAgIDwvZG9jdW1lbnRhdGlvbj4KKyAgIDwvYW5ub3RhdGlvbj4KKworCis8L3NjaGVtYT4KZGlmZiAtLWdpdCBhL21vZGVscy9wb3B1bGF0aW9ucy9vcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMvc2NoZW1hL3BvcHVsYXRpb25tb2RlbC5leHNkIGIvbW9kZWxzL3BvcHVsYXRpb25zL29yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy9zY2hlbWEvcG9wdWxhdGlvbm1vZGVsLmV4c2QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjg0OGM4MQotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9wb3B1bGF0aW9ucy9vcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMvc2NoZW1hL3BvcHVsYXRpb25tb2RlbC5leHNkCkBAIC0wLDAgKzEsMTA1IEBACis8P3htbCB2ZXJzaW9uPScxLjAnIGVuY29kaW5nPSdVVEYtOCc/Pg0KKzwhLS0gU2NoZW1hIGZpbGUgd3JpdHRlbiBieSBQREUgLS0+DQorPHNjaGVtYSB0YXJnZXROYW1lc3BhY2U9Im9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscyIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIj4NCis8YW5ub3RhdGlvbj4NCisgICAgICA8YXBwaW5mbz4NCisgICAgICAgICA8bWV0YS5zY2hlbWEgcGx1Z2luPSJjb20uaWJtLmFsbWFkZW4uc3RlbS5wb3B1bGF0aW9ubW9kZWxzIiBpZD0icG9wdWxhdGlvbm1vZGVsIiBuYW1lPSIlRVBfUG9wdWxhdGlvbm1vZGVsIi8+DQorICAgICAgPC9hcHBpbmZvPg0KKyAgICAgIDxkb2N1bWVudGF0aW9uPg0KKyAgICAgICAgIFVzZSB0byByZWdpc3RlciBpbnN0YW5jZXMgb2YgcG9wdWxhdGlvbiBtb2RlbHMNCisgICAgICA8L2RvY3VtZW50YXRpb24+DQorICAgPC9hbm5vdGF0aW9uPg0KKw0KKyAgIDxpbmNsdWRlIHNjaGVtYUxvY2F0aW9uPSJzY2hlbWE6Ly9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc2NoZW1hL2R1Ymxpbl9jb3JlLmV4c2QiLz4NCisNCisgICA8ZWxlbWVudCBuYW1lPSJleHRlbnNpb24iPg0KKyAgICAgIDxhbm5vdGF0aW9uPg0KKyAgICAgICAgIDxhcHBpbmZvPg0KKyAgICAgICAgICAgIDxtZXRhLmVsZW1lbnQgLz4NCisgICAgICAgICA8L2FwcGluZm8+DQorICAgICAgPC9hbm5vdGF0aW9uPg0KKyAgICAgIDxjb21wbGV4VHlwZT4NCisgICAgICAgICA8c2VxdWVuY2U+DQorICAgICAgICAgICAgPGVsZW1lbnQgcmVmPSJjbGFzc2RlZiIvPg0KKyAgICAgICAgICAgIDxlbGVtZW50IHJlZj0iZHVibGluX2NvcmUiLz4NCisgICAgICAgICA8L3NlcXVlbmNlPg0KKyAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0icG9pbnQiIHR5cGU9InN0cmluZyIgdXNlPSJyZXF1aXJlZCI+DQorICAgICAgICAgICAgPGFubm90YXRpb24+DQorICAgICAgICAgICAgICAgPGRvY3VtZW50YXRpb24+DQorICAgICAgICAgICAgICAgICAgDQorICAgICAgICAgICAgICAgPC9kb2N1bWVudGF0aW9uPg0KKyAgICAgICAgICAgIDwvYW5ub3RhdGlvbj4NCisgICAgICAgICA8L2F0dHJpYnV0ZT4NCisgICAgICAgICA8YXR0cmlidXRlIG5hbWU9ImlkIiB0eXBlPSJzdHJpbmciPg0KKyAgICAgICAgICAgIDxhbm5vdGF0aW9uPg0KKyAgICAgICAgICAgICAgIDxkb2N1bWVudGF0aW9uPg0KKyAgICAgICAgICAgICAgICAgIA0KKyAgICAgICAgICAgICAgIDwvZG9jdW1lbnRhdGlvbj4NCisgICAgICAgICAgICA8L2Fubm90YXRpb24+DQorICAgICAgICAgPC9hdHRyaWJ1dGU+DQorICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJuYW1lIiB0eXBlPSJzdHJpbmciPg0KKyAgICAgICAgICAgIDxhbm5vdGF0aW9uPg0KKyAgICAgICAgICAgICAgIDxkb2N1bWVudGF0aW9uPg0KKyAgICAgICAgICAgICAgICAgIA0KKyAgICAgICAgICAgICAgIDwvZG9jdW1lbnRhdGlvbj4NCisgICAgICAgICAgICAgICA8YXBwaW5mbz4NCisgICAgICAgICAgICAgICAgICA8bWV0YS5hdHRyaWJ1dGUgdHJhbnNsYXRhYmxlPSJ0cnVlIi8+DQorICAgICAgICAgICAgICAgPC9hcHBpbmZvPg0KKyAgICAgICAgICAgIDwvYW5ub3RhdGlvbj4NCisgICAgICAgICA8L2F0dHJpYnV0ZT4NCisgICAgICA8L2NvbXBsZXhUeXBlPg0KKyAgIDwvZWxlbWVudD4NCisNCisgICA8ZWxlbWVudCBuYW1lPSJjbGFzc2RlZiI+DQorICAgICAgPGNvbXBsZXhUeXBlPg0KKyAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0iY2xhc3MiIHR5cGU9InN0cmluZyIgdXNlPSJyZXF1aXJlZCI+DQorICAgICAgICAgICAgPGFubm90YXRpb24+DQorICAgICAgICAgICAgICAgPGRvY3VtZW50YXRpb24+DQorICAgICAgICAgICAgICAgICAgDQorICAgICAgICAgICAgICAgPC9kb2N1bWVudGF0aW9uPg0KKyAgICAgICAgICAgICAgIDxhcHBpbmZvPg0KKyAgICAgICAgICAgICAgICAgIDxtZXRhLmF0dHJpYnV0ZSBraW5kPSJqYXZhIiBiYXNlZE9uPSJvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuaW1wbC5TdGFuZGFyZFBvcHVsYXRpb25Nb2RlbEltcGw6b3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLlBvcHVsYXRpb25Nb2RlbCIvPg0KKyAgICAgICAgICAgICAgIDwvYXBwaW5mbz4NCisgICAgICAgICAgICA8L2Fubm90YXRpb24+DQorICAgICAgICAgPC9hdHRyaWJ1dGU+DQorICAgICAgPC9jb21wbGV4VHlwZT4NCisgICA8L2VsZW1lbnQ+DQorDQorICAgPGFubm90YXRpb24+DQorICAgICAgPGFwcGluZm8+DQorICAgICAgICAgPG1ldGEuc2VjdGlvbiB0eXBlPSJzaW5jZSIvPg0KKyAgICAgIDwvYXBwaW5mbz4NCisgICAgICA8ZG9jdW1lbnRhdGlvbj4NCisgICAgICAgICBbRW50ZXIgdGhlIGZpcnN0IHJlbGVhc2UgaW4gd2hpY2ggdGhpcyBleHRlbnNpb24gcG9pbnQgYXBwZWFycy5dDQorICAgICAgPC9kb2N1bWVudGF0aW9uPg0KKyAgIDwvYW5ub3RhdGlvbj4NCisNCisgICA8YW5ub3RhdGlvbj4NCisgICAgICA8YXBwaW5mbz4NCisgICAgICAgICA8bWV0YS5zZWN0aW9uIHR5cGU9ImV4YW1wbGVzIi8+DQorICAgICAgPC9hcHBpbmZvPg0KKyAgICAgIDxkb2N1bWVudGF0aW9uPg0KKyAgICAgICAgIFtFbnRlciBleHRlbnNpb24gcG9pbnQgdXNhZ2UgZXhhbXBsZSBoZXJlLl0NCisgICAgICA8L2RvY3VtZW50YXRpb24+DQorICAgPC9hbm5vdGF0aW9uPg0KKw0KKyAgIDxhbm5vdGF0aW9uPg0KKyAgICAgIDxhcHBpbmZvPg0KKyAgICAgICAgIDxtZXRhLnNlY3Rpb24gdHlwZT0iYXBpaW5mbyIvPg0KKyAgICAgIDwvYXBwaW5mbz4NCisgICAgICA8ZG9jdW1lbnRhdGlvbj4NCisgICAgICAgICBbRW50ZXIgQVBJIGluZm9ybWF0aW9uIGhlcmUuXQ0KKyAgICAgIDwvZG9jdW1lbnRhdGlvbj4NCisgICA8L2Fubm90YXRpb24+DQorDQorICAgPGFubm90YXRpb24+DQorICAgICAgPGFwcGluZm8+DQorICAgICAgICAgPG1ldGEuc2VjdGlvbiB0eXBlPSJpbXBsZW1lbnRhdGlvbiIvPg0KKyAgICAgIDwvYXBwaW5mbz4NCisgICAgICA8ZG9jdW1lbnRhdGlvbj4NCisgICAgICAgICBbRW50ZXIgaW5mb3JtYXRpb24gYWJvdXQgc3VwcGxpZWQgaW1wbGVtZW50YXRpb24gb2YgdGhpcyBleHRlbnNpb24gcG9pbnQuXQ0KKyAgICAgIDwvZG9jdW1lbnRhdGlvbj4NCisgICA8L2Fubm90YXRpb24+DQorDQorDQorPC9zY2hlbWE+DQpkaWZmIC0tZ2l0IGEvbW9kZWxzL3BvcHVsYXRpb25zL29yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9wb3B1bGF0aW9ubW9kZWxzL0FjdGl2YXRvci5qYXZhIGIvbW9kZWxzL3BvcHVsYXRpb25zL29yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9wb3B1bGF0aW9ubW9kZWxzL0FjdGl2YXRvci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMwYWU2ZDMKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvcG9wdWxhdGlvbnMvb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3BvcHVsYXRpb25tb2RlbHMvQWN0aXZhdG9yLmphdmEKQEAgLTAsMCArMSwyNDQgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JQ29uZmlndXJhdGlvbkVsZW1lbnQ7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklFeHRlbnNpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklFeHRlbnNpb25Qb2ludDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSUV4dGVuc2lvblJlZ2lzdHJ5OworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QbGF0Zm9ybTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU3RhdHVzOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FU3RydWN0dXJhbEZlYXR1cmU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLkNvbnN0YW50czsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLkR1YmxpbkNvcmU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLk5vZGVEZWNvcmF0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLnByb3ZpZGVyLlN0YW5kYXJkSGlzdG9yeVByb3ZpZGVyQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLnByb3ZpZGVyLlN0YW5kYXJkUmVsYXRpdmVWYWx1ZUhpc3RvcnlQcm92aWRlckFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5wcm92aWRlci5TdGFuZGFyZFJlbGF0aXZlVmFsdWVQcm92aWRlckFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLnBsdWdpbi5BYnN0cmFjdFVJUGx1Z2luOworaW1wb3J0IG9yZy5vc2dpLmZyYW1ld29yay5CdW5kbGU7CitpbXBvcnQgb3JnLm9zZ2kuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHQ7CisKKy8qKgorICogVGhlIGFjdGl2YXRvciBjbGFzcyBjb250cm9scyB0aGUgcGx1Zy1pbiBsaWZlIGN5Y2xlCisgKi8KK3B1YmxpYyBjbGFzcyBBY3RpdmF0b3IgZXh0ZW5kcyBBYnN0cmFjdFVJUGx1Z2luIHsKKworCS8qKgorCSAqIFRoZSBwbHVnLWluIElECisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUExVR0lOX0lEID0gQ29uc3RhbnRzLklEX1JPT1QgKyAiLnBvcHVsYXRpb25tb2RlbHMiOyAvLyROT04tTkxTLTEkCisJCisJLyoqCisJICogCisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgQ0xBU1NfRklFTEQgPSAiY2xhc3MiOyAvLyROT04tTkxTLTEkCisKKwkvKioKKwkgKiAKKwkgKi8KKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgUE9QX01PREVMX1VJX1BMVUdJTl9OQU1FID0gIm9yZy5lY2xpcHNlLnN0ZW0udWkucG9wdWxhdGlvbm1vZGVscyI7IC8vJE5PTi1OTFMtMSQKKwkKKwkvLyBUaGUgc2hhcmVkIGluc3RhbmNlCisJcHJpdmF0ZSBzdGF0aWMgQWN0aXZhdG9yIHBsdWdpbjsKKworCS8qKgorCSAqIFRoZSBjb25zdHJ1Y3RvcgorCSAqLworCXB1YmxpYyBBY3RpdmF0b3IoKSB7CisJCXBsdWdpbiA9IHRoaXM7CisJfQorCisJLyoqCisJICogQHBhcmFtIGNvbnRleHQKKwkgKiBAdGhyb3dzIEV4Y2VwdGlvbgorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIHN0YXJ0KEJ1bmRsZUNvbnRleHQgY29udGV4dCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCXN1cGVyLnN0YXJ0KGNvbnRleHQpOworCQkKKwkJLy8gV2UgbmVlZCB0byBzdGFydCB0aGUgdWkucG9wdWxhdGlvbm1vZGVscyBwbHVnaW4gaGVyZQorCQkvLyB0byBtYWtlIHN1cmUgU3RhbmRhcmRSZWxhdGl2ZVZhbHVlUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSBpcworCQkvLyByZWdpc3RlcmVkLiBJdCdzIHVzZWQgYnkgdGhlIGxvZ2dlciB3aGVuIHJ1bm5pbmcgaGVhZGxlc3MuCisJCQorCQlCdW5kbGUgcG9wQnVuZGxlID0gUGxhdGZvcm0uZ2V0QnVuZGxlKFBPUF9NT0RFTF9VSV9QTFVHSU5fTkFNRSk7CisJCWlmIChwb3BCdW5kbGUgIT0gbnVsbCkgeworCQkJcG9wQnVuZGxlLnN0YXJ0KEJ1bmRsZS5TVEFSVF9UUkFOU0lFTlQpOworCQl9IGVsc2UgeworCQkJU3lzdGVtLmVyci5wcmludGxuKCJQb3AgTW9kZWwgVUkgcGx1Z2luIG5vdCBmb3VuZC4gIERpc3RyaWJ1dGVkIG1vZGUgbm90IGVuYWJsZWQuIik7CisJCX0KKworCisJCS8vIFdlIGNyZWF0ZSB0aGVzZSBpbnN0YW5jZXMgc28gdGhhdCB0aGVpciBjb25zdHJ1Y3RvcnMgcnVuIGFuZCB0aGV5CisJCS8vIHRoZW4gYWRkIHRoZW1zZWx2ZXMgdG8gYSBjb2xsZWN0aW9uIG9mIGZhY3RvcmllcyBtYWludGFpbmVkIGJ5IHRoZQorCQkvLyBmYWN0b3J5IGludGVyZmFjZXMgdGhleSBpbXBsZW1lbnQgcmVzcGVjdGl2ZWx5LgorCQkKKwkJLy8gQWRkIHRvIFJlbGF0aXZlVmFsdWVQcm92aWRlckFkYXB0ZXJGYWN0b3J5LklOU1RBTkNFCisJCW5ldyBTdGFuZGFyZFJlbGF0aXZlVmFsdWVQcm92aWRlckFkYXB0ZXJGYWN0b3J5KCk7CisJCQorCQkvLyBBZGQgdG8gUmVsYXRpdmVWYWx1ZUhpc3RvcnlQcm92aWRlckFkYXB0ZXJGYWN0b3J5LklOU1RBTkNFCisJCW5ldyBTdGFuZGFyZFJlbGF0aXZlVmFsdWVIaXN0b3J5UHJvdmlkZXJBZGFwdGVyRmFjdG9yeSgpOworCQkKKwkJLy8gQWRkIHRvIEhpc3RvcnlQcm92aWRlckFkYXB0ZXJGYWN0b3J5LklOU1RBTkNFCisJCW5ldyBTdGFuZGFyZEhpc3RvcnlQcm92aWRlckFkYXB0ZXJGYWN0b3J5KCk7CisJCisJCQorCX0gLy8gc3RhcnQKKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBsdWdpbiNzdG9wKG9yZy5vc2dpLmZyYW1ld29yay5CdW5kbGVDb250ZXh0KQorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIHN0b3AoQnVuZGxlQ29udGV4dCBjb250ZXh0KSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJcGx1Z2luID0gbnVsbDsKKwkJc3VwZXIuc3RvcChjb250ZXh0KTsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBzaGFyZWQgaW5zdGFuY2UKKwkgKiAKKwkgKiBAcmV0dXJuIHRoZSBzaGFyZWQgaW5zdGFuY2UKKwkgKi8KKwlwdWJsaWMgc3RhdGljIEFjdGl2YXRvciBnZXREZWZhdWx0KCkgeworCQlyZXR1cm4gcGx1Z2luOworCX0KKwkKKworCS8qKgorCSAqIFRoaXMgY29kZSB3b3JrcyBmb3IgYm90aCBwb3B1bGF0aW9uTW9kZWxzIGFuZCBmb3IgIHBvcHVsYXRpb25Jbml0aWFsaXplcnMsIGFzIGJvdGggb2YgdGhlbQorCSAqIGFyZSBub2RlRGVjb3JhdG9ycworCSAqIEBwYXJhbSBwb3B1bGF0aW9uTW9kZWwKKwkgKiBAcmV0dXJuIHRoZSBkZWZhdWx0IGR1YmxpbiBjb3JlCisJICovCisJcHVibGljIHN0YXRpYyBEdWJsaW5Db3JlIGdldFBsdWdpbkR1YmxpbkNvcmUoTm9kZURlY29yYXRvciBwb3B1bGF0aW9uTW9kZWwgKSB7CisJCVN0cmluZyBwb3B1bGF0aW9uTW9kZWxDbGFzcyA9IHBvcHVsYXRpb25Nb2RlbC5nZXRDbGFzcygpLmdldE5hbWUoKTsKKwkJCisJCUR1YmxpbkNvcmUgZGMgPSBudWxsOworCQlmaW5hbCBJRXh0ZW5zaW9uUmVnaXN0cnkgcmVnaXN0cnkgPSBQbGF0Zm9ybS5nZXRFeHRlbnNpb25SZWdpc3RyeSgpOworCQkKKyAgICAgICAgSUV4dGVuc2lvblBvaW50W10gZXh0ZW5zaW9uUG9pbnRzID0gcmVnaXN0cnkuZ2V0RXh0ZW5zaW9uUG9pbnRzKFBMVUdJTl9JRCk7CisgICAgICAgIGZvcihpbnQgayA9IDA7IGsgPCBleHRlbnNpb25Qb2ludHMubGVuZ3RoOyBrKyspeworICAgICAgICAJCisgICAgICAgIAkgSUV4dGVuc2lvblBvaW50IGV4dGVuc2lvblBvaW50ID0gZXh0ZW5zaW9uUG9pbnRzW2tdOworICAgICAgICAJIElFeHRlbnNpb25bXSBleHRlbnNpb25zID0gZXh0ZW5zaW9uUG9pbnQuZ2V0RXh0ZW5zaW9ucygpOworICAgICAgICAJIC8vIEZvciBlYWNoIGV4dGVuc2lvbiAuLi4KKyAgICAJICAgICBmb3IgKGludCBpID0gMDsgaSA8IGV4dGVuc2lvbnMubGVuZ3RoOyBpKyspIHsgCisgICAgCSAgICAgICAgIElFeHRlbnNpb24gZXh0ZW5zaW9uID0gZXh0ZW5zaW9uc1tpXTsKKyAgICAJICAgICAgICAgSUNvbmZpZ3VyYXRpb25FbGVtZW50W10gZWxlbWVudHMgPSBleHRlbnNpb24uZ2V0Q29uZmlndXJhdGlvbkVsZW1lbnRzKCk7CisgICAgCSAgICAgICAgICAgIAorICAgIAkgICAgICAgICAvLyBGb3IgZWFjaCBtZW1iZXIgb2YgdGhlIGV4dGVuc2lvbiAuLi4KKyAgICAJICAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCBlbGVtZW50cy5sZW5ndGg7IGorKykgeworICAgIAkgICAgICAgICAgICAgICAgSUNvbmZpZ3VyYXRpb25FbGVtZW50IGVsZW1lbnQgPSBlbGVtZW50c1tqXTsKKyAgICAJICAgICAgICAgICAgIAorICAgIAkgICAgICAgICAgICAgICAgU3RyaW5nW10ga2V5cyA9IGVsZW1lbnQuZ2V0QXR0cmlidXRlTmFtZXMoKTsKKyAgICAJICAgICAgICAgICAgICAgIGZvciAoaW50IG0gPSAwOyBtIDwga2V5cy5sZW5ndGg7IG0gKyspIHsKKyAgICAJICAgICAgICAgICAgICAgIAlTdHJpbmcgdmFsdWUgPSBlbGVtZW50LmdldEF0dHJpYnV0ZShrZXlzW21dKTsKKyAgICAJICAgICAgICAgICAgICAgIAkKKyAgICAJICAgICAgICAgICAgICAgIAlpZigoa2V5c1ttXS5lcXVhbHNJZ25vcmVDYXNlKENMQVNTX0ZJRUxEKSYmKHZhbHVlLmVxdWFsc0lnbm9yZUNhc2UocG9wdWxhdGlvbk1vZGVsQ2xhc3MpKSkpeworICAgIAkgICAgICAgICAgICAgICAgCQlkYyA9IHBvcHVsYXRpb25Nb2RlbC5nZXREdWJsaW5Db3JlKCk7CisgICAgCSAgICAgICAgICAgICAgICAJfSBlbHNlIHsKKyAgICAJICAgICAgICAgICAgICAgIAkJaWYoZGMgIT0gbnVsbCkgewkKKyAgICAJICAgICAgICAgICAgICAgIAkJCUVTdHJ1Y3R1cmFsRmVhdHVyZSBmZWF0dXJlID0gZGMuZ2V0RmVhdHVyZShrZXlzW21dKTsKKyAgICAJICAgICAgICAgICAgICAgIAkJCWlmKChmZWF0dXJlICE9IG51bGwpJiYodmFsdWUhPW51bGwpKSB7CisgICAgCSAgICAgICAgICAgICAgICAJCQkJCWRjLmVTZXQoZmVhdHVyZSwgdmFsdWUpOworICAgIAkgICAgICAgICAgICAgICAgCQkJfS8vIGlmIGZlYXR1cmUvdmFsdWUgbm90IG51bGwKKyAgICAJICAgICAgICAgICAgICAgIAkJfS8vIGlmIGRjIG5vdCBudWxsCisgICAgCSAgICAgICAgICAgICAgICAJfS8vIGlmL2Vsc2UKKyAgICAJICAgICAgICAgICAgICAgIH0gIC8vZm9yIG0gbmFtZS92YWx1ZSBwYWlycworICAgICAgICAgICAgICAgIH0vLyBmb3IgaiBlbGVtZW50cworICAgIAkgICAgICAgIC8vIG9uY2UgaXQncyBzZXQgd2UgYXJlIGRvbmUKKyAgICAJICAgICAgICBpZihkYyAhPSBudWxsKSByZXR1cm4gZGM7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgCisJCXJldHVybiBudWxsOworCX0KKwkKKworCS8qKgorCSAqIExvZyBhbiBlcnJvciB0byB0aGUgSUxvZyBmb3IgdGhpcyBwbHVnaW4KKwkgKiAKKwkgKiBAcGFyYW0gbWVzc2FnZQorCSAqICAgICAgICAgICAgdGhlIGxvY2FsaXplZCBlcnJvciBtZXNzYWdlIHRleHQKKwkgKiBAcGFyYW0gZXhjZXB0aW9uCisJICogICAgICAgICAgICB0aGUgYXNzb2NpYXRlZCBleGNlcHRpb24sIG9yIG51bGwKKwkgKi8KKwlwdWJsaWMgc3RhdGljIHZvaWQgbG9nRXJyb3IoU3RyaW5nIG1lc3NhZ2UsIFRocm93YWJsZSBleGNlcHRpb24pIHsKKwkJLy8gUnVubmluZyBhcyBhIHBsdWdpbj8KKwkJaWYgKHBsdWdpbiAhPSBudWxsKSB7CisJCQkvLyBZZXMKKwkJCXBsdWdpbi5nZXRMb2coKS5sb2coCisJCQkJCW5ldyBTdGF0dXMoSVN0YXR1cy5FUlJPUiwgcGx1Z2luLmdldEJ1bmRsZSgpCisJCQkJCQkJLmdldFN5bWJvbGljTmFtZSgpLCAwLCBtZXNzYWdlLCBleGNlcHRpb24pKTsKKwkJfSBlbHNlIHsKKwkJCVN5c3RlbS5lcnIucHJpbnRsbihtZXNzYWdlKTsKKwkJCS8vIEV4Y2VwdGlvbj8KKwkJCWlmIChleGNlcHRpb24gIT0gbnVsbCkgeworCQkJCS8vIFllcworCQkJCVN5c3RlbS5lcnIucHJpbnRsbihleGNlcHRpb24uZ2V0TWVzc2FnZSgpKTsKKwkJCQlleGNlcHRpb24ucHJpbnRTdGFja1RyYWNlKFN5c3RlbS5lcnIpOworCQkJfQorCQl9CisKKwl9IC8vIGxvZ0Vycm9yCisKKwkvKioKKwkgKiBMb2cgaW5mb3JtYXRpb24gdG8gdGhlIElMb2cgZm9yIHRoaXMgcGx1Z2luCisJICogCisJICogQHBhcmFtIG1lc3NhZ2UKKwkgKiAgICAgICAgICAgIHRoZSBsb2NhbGl6ZWQgaW5mb3JtYXRpb24gbWVzc2FnZSB0ZXh0CisJICogQHBhcmFtIGV4Y2VwdGlvbgorCSAqICAgICAgICAgICAgdGhlIGFzc29jaWF0ZWQgZXhjZXB0aW9uLCBvciBudWxsCisJICovCisJcHVibGljIHN0YXRpYyB2b2lkIGxvZ0luZm9ybWF0aW9uKFN0cmluZyBtZXNzYWdlLCBUaHJvd2FibGUgZXhjZXB0aW9uKSB7CisJCS8vIFJ1bm5pbmcgYXMgYSBwbHVnaW4/CisJCWlmIChwbHVnaW4gIT0gbnVsbCkgeworCQkJLy8gWWVzCisJCQlwbHVnaW4uZ2V0TG9nKCkubG9nKAorCQkJCQluZXcgU3RhdHVzKElTdGF0dXMuSU5GTywgcGx1Z2luLmdldEJ1bmRsZSgpCisJCQkJCQkJLmdldFN5bWJvbGljTmFtZSgpLCAwLCBtZXNzYWdlLCBleGNlcHRpb24pKTsKKwkJfSBlbHNlIHsKKwkJCVN5c3RlbS5vdXQucHJpbnRsbihtZXNzYWdlKTsKKwkJCS8vIEV4Y2VwdGlvbj8KKwkJCWlmIChleGNlcHRpb24gIT0gbnVsbCkgeworCQkJCS8vIFllcworCQkJCVN5c3RlbS5vdXQucHJpbnRsbihleGNlcHRpb24uZ2V0TWVzc2FnZSgpKTsKKwkJCQlleGNlcHRpb24ucHJpbnRTdGFja1RyYWNlKFN5c3RlbS5lcnIpOworCQkJfQorCQl9CisKKwl9IC8vIGxvZ0luZm9ybWF0aW9uCisJCisJLyoqCisJICogTG9nIGluZm9ybWF0aW9uIHRvIHRoZSBJTG9nIGZvciB0aGlzIHBsdWdpbgorCSAqIAorCSAqIEBwYXJhbSBtZXNzYWdlCisJICogICAgICAgICAgICB0aGUgbG9jYWxpemVkIGluZm9ybWF0aW9uIG1lc3NhZ2UgdGV4dAorCSAqIEBwYXJhbSBleGNlcHRpb24KKwkgKiAgICAgICAgICAgIHRoZSBhc3NvY2lhdGVkIGV4Y2VwdGlvbiwgb3IgbnVsbAorCSAqLworCXB1YmxpYyBzdGF0aWMgdm9pZCBsb2dJbmZvcm1hdGlvbihTdHJpbmcgbWVzc2FnZSkgeworCQkvLyBSdW5uaW5nIGFzIGEgcGx1Z2luPworCQlpZiAocGx1Z2luICE9IG51bGwpIHsKKwkJCS8vIFllcworCQkJcGx1Z2luLmdldExvZygpLmxvZygKKwkJCQkJbmV3IFN0YXR1cyhJU3RhdHVzLklORk8sIHBsdWdpbi5nZXRCdW5kbGUoKQorCQkJCQkJCS5nZXRTeW1ib2xpY05hbWUoKSwgMCwgbWVzc2FnZSwgbnVsbCkpOworCQl9IGVsc2UgeworCQkJU3lzdGVtLm91dC5wcmludGxuKG1lc3NhZ2UpOworCQl9CisKKwl9IC8vIGxvZ0luZm9ybWF0aW9uCisJCisJCit9IC8vIEFjdGl2YXRvcgpkaWZmIC0tZ2l0IGEvbW9kZWxzL3BvcHVsYXRpb25zL29yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9wb3B1bGF0aW9ubW9kZWxzL0NvbnN0YW50cy5qYXZhIGIvbW9kZWxzL3BvcHVsYXRpb25zL29yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9wb3B1bGF0aW9ubW9kZWxzL0NvbnN0YW50cy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBlZjcyZDQKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvcG9wdWxhdGlvbnMvb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3BvcHVsYXRpb25tb2RlbHMvQ29uc3RhbnRzLmphdmEKQEAgLTAsMCArMSw1NiBAQAorLy8gQ29uc3RhbnRzLmphdmEKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqCisgKiBUaGlzIGludGVyZmFjZSBjb250YWlucyBjb25zdGFudHMgdGhhdCBhcmUgc2lnbmlmaWNhbnQgdG8gdGhlIFNURU0gZGlzZWFzZQorICogbW9kZWwgZGVmaW5pdGlvbnMuCisgKi8KK3B1YmxpYyBpbnRlcmZhY2UgQ29uc3RhbnRzIHsKKworCS8qKgorCSAqIFRoaXMgaXMgdGhlIGV4dGVuc2lvbiBwb2ludCBpZCBmb3IgdGhlICJwb3B1bGF0aW9uIG1vZGVsIiBleHRlbnNpb24gcG9pbnQuIEEKKwkgKiB7QGxpbmsgRGlzZWFzZU1vZGVsfSBkZWZpbmVzIHRoZSB1bmRlcmx5aW5nIGNvbXB1dGF0aW9uYWwgbW9kZWwgZm9yIGhvdyBhCisJICogcG9wdWxhdGlvbiBjaGFuZ2VzCisJICoge0B2YWx1ZX0KKwkgKi8KKwlTdHJpbmcgSURfUE9QVUxBVElPTl9NT0RFTF9FWFRFTlNJT05fUE9JTlQgPSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuQ29uc3RhbnRzLklEX1JPT1QKKwkrICIucG9wdWxhdGlvbm1vZGVscy5wb3B1bGF0aW9ubW9kZWwiOyAvLyROT04tTkxTLTEkIAorCisJCisJLyoqCisJICogVGhpcyBpcyB0aGUgaWRlbnRpZmllciBvZiB0aGUgZWxlbWVudCBpbiBhCisJICogPGNvZGU+Q29uZmlndXJhdGlvbkVsZW1lbnQ8L2NvZGU+IHRoYXQgc3BlY2lmaWVzIHRoZSBuYW1lIGFuZAorCSAqIGltcGxlbWVudGluZyBjbGFzcyBmb3IgU1RFTSAicG9wdWxhdGlvbiBtb2RlbHMiLgorCSAqIAorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLkNvbnN0YW50cyNFWEVDVVRBQkxFX05BTUVfQVRUUklCVVRFCisJICovCisJU3RyaW5nIFBPUFVMQVRJT05fTU9ERUxfRUxFTUVOVCA9ICJjbGFzc2RlZiI7IC8vJE5PTi1OTFMtMSQgCisKKwkKKwkvKioKKwkgKiBUaGlzIGlzIHRoZSBleHRlbnNpb24gcG9pbnQgaWQgZm9yIHRoZSAicG9wdWxhdGlvbiBpbml0aWFsaXplciIgZXh0ZW5zaW9uIHBvaW50LgorCSAqLworCVN0cmluZyBJRF9QT1BVTEFUSU9OX0lOSVRJQUxJWkVSX0VYVEVOU0lPTl9QT0lOVCA9IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5Db25zdGFudHMuSURfUk9PVAorCSsgIi5wb3B1bGF0aW9ubW9kZWxzLnBvcHVsYXRpb25pbml0aWFsaXplciI7IC8vJE5PTi1OTFMtMSQgCisKKwkvKioKKwkgKiBUaGlzIGlzIHRoZSBpZGVudGlmaWVyIG9mIHRoZSBlbGVtZW50IGluIGEKKwkgKiA8Y29kZT5Db25maWd1cmF0aW9uRWxlbWVudDwvY29kZT4gdGhhdCBzcGVjaWZpZXMgdGhlIG5hbWUgYW5kCisJICogaW1wbGVtZW50aW5nIGNsYXNzIGZvciBTVEVNICJwb3B1bGF0aW9uIGluaXRpYWxpemVyIi4KKwkgKiAKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5Db25zdGFudHMjRVhFQ1VUQUJMRV9OQU1FX0FUVFJJQlVURQorCSAqLworCVN0cmluZyBQT1BVTEFUSU9OX0lOSVRJQUxJWkVSX0VMRU1FTlQgPSAiY2xhc3NkZWYiOyAvLyROT04tTkxTLTEkIAorCit9IC8vIENvbnN0YW50cwpkaWZmIC0tZ2l0IGEvbW9kZWxzL3BvcHVsYXRpb25zL29yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9wb3B1bGF0aW9ubW9kZWxzL3N0YW5kYXJkL0FnZUdyb3VwLmphdmEgYi9tb2RlbHMvcG9wdWxhdGlvbnMvb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3BvcHVsYXRpb25tb2RlbHMvc3RhbmRhcmQvQWdlR3JvdXAuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZGE2N2QyCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL3BvcHVsYXRpb25zL29yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9wb3B1bGF0aW9ubW9kZWxzL3N0YW5kYXJkL0FnZUdyb3VwLmphdmEKQEAgLTAsMCArMSwxMzkgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkOw0KKw0KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIA0KKyAqIENvcHlyaWdodCAoYykgMjAxMSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4gDQorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyANCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgDQorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQgDQorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwgDQorICogDQorICogQ29udHJpYnV0b3JzOiANCisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIA0KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KKw0KKy8qKg0KKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorICogQSByZXByZXNlbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+QWdlIEdyb3VwPC9iPjwvZW0+Jy4NCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisgKg0KKyAqIDxwPg0KKyAqIFRoZSBmb2xsb3dpbmcgZmVhdHVyZXMgYXJlIHN1cHBvcnRlZDoNCisgKiA8dWw+DQorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5BZ2VHcm91cCNnZXRGcm9tQWdlIDxlbT5Gcm9tIEFnZTwvZW0+fTwvbGk+DQorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5BZ2VHcm91cCNnZXRUb0FnZSA8ZW0+VG8gQWdlPC9lbT59PC9saT4NCisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLkFnZUdyb3VwI2dldERlYXRoRmFjdG9yIDxlbT5EZWF0aCBGYWN0b3I8L2VtPn08L2xpPg0KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuQWdlR3JvdXAjaXNMaW1pdGVkIDxlbT5MaW1pdGVkPC9lbT59PC9saT4NCisgKiA8L3VsPg0KKyAqIDwvcD4NCisgKg0KKyAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkUGFja2FnZSNnZXRBZ2VHcm91cCgpDQorICogQG1vZGVsDQorICogQGdlbmVyYXRlZA0KKyAqLw0KK3B1YmxpYyBpbnRlcmZhY2UgQWdlR3JvdXAgZXh0ZW5kcyBQb3B1bGF0aW9uR3JvdXAgew0KKwkvKioNCisJICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+RnJvbSBBZ2U8L2I+PC9lbT4nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPHA+DQorCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPkZyb20gQWdlPC9lbT4nIGF0dHJpYnV0ZSBpc24ndCBjbGVhciwNCisJICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLg0KKwkgKiA8L3A+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5Gcm9tIEFnZTwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIEBzZWUgI3NldEZyb21BZ2UoaW50KQ0KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZFBhY2thZ2UjZ2V0QWdlR3JvdXBfRnJvbUFnZSgpDQorCSAqIEBtb2RlbA0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlpbnQgZ2V0RnJvbUFnZSgpOw0KKw0KKwkvKioNCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLkFnZUdyb3VwI2dldEZyb21BZ2UgPGVtPkZyb20gQWdlPC9lbT59JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5Gcm9tIEFnZTwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIEBzZWUgI2dldEZyb21BZ2UoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwl2b2lkIHNldEZyb21BZ2UoaW50IHZhbHVlKTsNCisNCisJLyoqDQorCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPlRvIEFnZTwvYj48L2VtPicgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8cD4NCisJICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+VG8gQWdlPC9lbT4nIGF0dHJpYnV0ZSBpc24ndCBjbGVhciwNCisJICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLg0KKwkgKiA8L3A+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5UbyBBZ2U8L2VtPicgYXR0cmlidXRlLg0KKwkgKiBAc2VlICNzZXRUb0FnZShpbnQpDQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkUGFja2FnZSNnZXRBZ2VHcm91cF9Ub0FnZSgpDQorCSAqIEBtb2RlbA0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlpbnQgZ2V0VG9BZ2UoKTsNCisNCisJLyoqDQorCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5BZ2VHcm91cCNnZXRUb0FnZSA8ZW0+VG8gQWdlPC9lbT59JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5UbyBBZ2U8L2VtPicgYXR0cmlidXRlLg0KKwkgKiBAc2VlICNnZXRUb0FnZSgpDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXZvaWQgc2V0VG9BZ2UoaW50IHZhbHVlKTsNCisNCisJLyoqDQorCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPkRlYXRoIEZhY3RvcjwvYj48L2VtPicgYXR0cmlidXRlLg0KKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyA8Y29kZT4iMS4wIjwvY29kZT4uDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDxwPg0KKwkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5EZWF0aCBGYWN0b3I8L2VtPicgYXR0cmlidXRlIGlzbid0IGNsZWFyLA0KKwkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uDQorCSAqIDwvcD4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPkRlYXRoIEZhY3RvcjwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIEBzZWUgI3NldERlYXRoRmFjdG9yKGRvdWJsZSkNCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmRQYWNrYWdlI2dldEFnZUdyb3VwX0RlYXRoRmFjdG9yKCkNCisJICogQG1vZGVsIGRlZmF1bHQ9IjEuMCINCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJZG91YmxlIGdldERlYXRoRmFjdG9yKCk7DQorDQorCS8qKg0KKwkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuQWdlR3JvdXAjZ2V0RGVhdGhGYWN0b3IgPGVtPkRlYXRoIEZhY3RvcjwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+RGVhdGggRmFjdG9yPC9lbT4nIGF0dHJpYnV0ZS4NCisJICogQHNlZSAjZ2V0RGVhdGhGYWN0b3IoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwl2b2lkIHNldERlYXRoRmFjdG9yKGRvdWJsZSB2YWx1ZSk7DQorDQorCS8qKg0KKwkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5MaW1pdGVkPC9iPjwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDxwPg0KKwkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5MaW1pdGVkPC9lbT4nIGF0dHJpYnV0ZSBpc24ndCBjbGVhciwNCisJICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLg0KKwkgKiA8L3A+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5MaW1pdGVkPC9lbT4nIGF0dHJpYnV0ZS4NCisJICogQHNlZSAjc2V0TGltaXRlZChib29sZWFuKQ0KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZFBhY2thZ2UjZ2V0QWdlR3JvdXBfTGltaXRlZCgpDQorCSAqIEBtb2RlbA0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlib29sZWFuIGlzTGltaXRlZCgpOw0KKw0KKwkvKioNCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLkFnZUdyb3VwI2lzTGltaXRlZCA8ZW0+TGltaXRlZDwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+TGltaXRlZDwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIEBzZWUgI2lzTGltaXRlZCgpDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXZvaWQgc2V0TGltaXRlZChib29sZWFuIHZhbHVlKTsNCisNCit9IC8vIEFnZUdyb3VwDQpkaWZmIC0tZ2l0IGEvbW9kZWxzL3BvcHVsYXRpb25zL29yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9wb3B1bGF0aW9ubW9kZWxzL3N0YW5kYXJkL0FnaW5nUG9wdWxhdGlvbk1vZGVsLmphdmEgYi9tb2RlbHMvcG9wdWxhdGlvbnMvb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3BvcHVsYXRpb25tb2RlbHMvc3RhbmRhcmQvQWdpbmdQb3B1bGF0aW9uTW9kZWwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNGViMmEyCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL3BvcHVsYXRpb25zL29yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9wb3B1bGF0aW9ubW9kZWxzL3N0YW5kYXJkL0FnaW5nUG9wdWxhdGlvbk1vZGVsLmphdmEKQEAgLTAsMCArMSw1NyBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQ7DQorDQorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogDQorICogQ29weXJpZ2h0IChjKSAyMDExIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiANCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIA0KKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCANCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdCANCisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbCANCisgKiANCisgKiBDb250cmlidXRvcnM6IA0KKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gDQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQorDQorLyoqDQorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisgKiBBIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5BZ2luZyBQb3B1bGF0aW9uIE1vZGVsPC9iPjwvZW0+Jy4NCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisgKg0KKyAqIDxwPg0KKyAqIFRoZSBmb2xsb3dpbmcgZmVhdHVyZXMgYXJlIHN1cHBvcnRlZDoNCisgKiA8dWw+DQorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5BZ2luZ1BvcHVsYXRpb25Nb2RlbCNpc0hhc01heEFnZSA8ZW0+SGFzIE1heCBBZ2U8L2VtPn08L2xpPg0KKyAqIDwvdWw+DQorICogPC9wPg0KKyAqDQorICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmRQYWNrYWdlI2dldEFnaW5nUG9wdWxhdGlvbk1vZGVsKCkNCisgKiBAbW9kZWwNCisgKiBAZ2VuZXJhdGVkDQorICovDQorcHVibGljIGludGVyZmFjZSBBZ2luZ1BvcHVsYXRpb25Nb2RlbCBleHRlbmRzIERlbW9ncmFwaGljUG9wdWxhdGlvbk1vZGVsIHsNCisNCisJLyoqDQorCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPkhhcyBNYXggQWdlPC9iPjwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDxwPg0KKwkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5IYXMgTWF4IEFnZTwvZW0+JyBhdHRyaWJ1dGUgaXNuJ3QgY2xlYXIsDQorCSAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4NCisJICogPC9wPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+SGFzIE1heCBBZ2U8L2VtPicgYXR0cmlidXRlLg0KKwkgKiBAc2VlICNzZXRIYXNNYXhBZ2UoYm9vbGVhbikNCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmRQYWNrYWdlI2dldEFnaW5nUG9wdWxhdGlvbk1vZGVsX0hhc01heEFnZSgpDQorCSAqIEBtb2RlbA0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlib29sZWFuIGlzSGFzTWF4QWdlKCk7DQorDQorCS8qKg0KKwkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuQWdpbmdQb3B1bGF0aW9uTW9kZWwjaXNIYXNNYXhBZ2UgPGVtPkhhcyBNYXggQWdlPC9lbT59JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5IYXMgTWF4IEFnZTwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIEBzZWUgI2lzSGFzTWF4QWdlKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJdm9pZCBzZXRIYXNNYXhBZ2UoYm9vbGVhbiB2YWx1ZSk7DQorfSAvLyBBZ2luZ1BvcHVsYXRpb25Nb2RlbA0KZGlmZiAtLWdpdCBhL21vZGVscy9wb3B1bGF0aW9ucy9vcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vcG9wdWxhdGlvbm1vZGVscy9zdGFuZGFyZC9EZW1vZ3JhcGhpY1BvcHVsYXRpb25Nb2RlbC5qYXZhIGIvbW9kZWxzL3BvcHVsYXRpb25zL29yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9wb3B1bGF0aW9ubW9kZWxzL3N0YW5kYXJkL0RlbW9ncmFwaGljUG9wdWxhdGlvbk1vZGVsLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTE2YWY2MAotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9wb3B1bGF0aW9ucy9vcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vcG9wdWxhdGlvbm1vZGVscy9zdGFuZGFyZC9EZW1vZ3JhcGhpY1BvcHVsYXRpb25Nb2RlbC5qYXZhCkBAIC0wLDAgKzEsNTAgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDEwIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5FTGlzdDsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogQSByZXByZXNlbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+RGVtb2dyYXBoaWMgUG9wdWxhdGlvbiBNb2RlbDwvYj48L2VtPicuCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqCisgKiA8cD4KKyAqIFRoZSBmb2xsb3dpbmcgZmVhdHVyZXMgYXJlIHN1cHBvcnRlZDoKKyAqIDx1bD4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuRGVtb2dyYXBoaWNQb3B1bGF0aW9uTW9kZWwjZ2V0UG9wdWxhdGlvbkdyb3VwcyA8ZW0+UG9wdWxhdGlvbiBHcm91cHM8L2VtPn08L2xpPgorICogPC91bD4KKyAqIDwvcD4KKyAqCisgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZFBhY2thZ2UjZ2V0RGVtb2dyYXBoaWNQb3B1bGF0aW9uTW9kZWwoKQorICogQG1vZGVsCisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBpbnRlcmZhY2UgRGVtb2dyYXBoaWNQb3B1bGF0aW9uTW9kZWwgZXh0ZW5kcyBTdGFuZGFyZFBvcHVsYXRpb25Nb2RlbCB7CisJLyoqCisJICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+UG9wdWxhdGlvbiBHcm91cHM8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0LgorCSAqIFRoZSBsaXN0IGNvbnRlbnRzIGFyZSBvZiB0eXBlIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuUG9wdWxhdGlvbkdyb3VwfS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDxwPgorCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPlBvcHVsYXRpb24gR3JvdXBzPC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0IGlzbid0IGNsZWFyLAorCSAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4KKwkgKiA8L3A+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+UG9wdWxhdGlvbiBHcm91cHM8L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3QuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmRQYWNrYWdlI2dldERlbW9ncmFwaGljUG9wdWxhdGlvbk1vZGVsX1BvcHVsYXRpb25Hcm91cHMoKQorCSAqIEBtb2RlbCBjb250YWlubWVudD0idHJ1ZSIgcmVxdWlyZWQ9InRydWUiCisJICogQGdlbmVyYXRlZAorCSAqLworCUVMaXN0PFBvcHVsYXRpb25Hcm91cD4gZ2V0UG9wdWxhdGlvbkdyb3VwcygpOworCit9IC8vIERlbW9ncmFwaGljUG9wdWxhdGlvbk1vZGVsCmRpZmYgLS1naXQgYS9tb2RlbHMvcG9wdWxhdGlvbnMvb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3BvcHVsYXRpb25tb2RlbHMvc3RhbmRhcmQvRWFydGhTY2llbmNlUG9wdWxhdGlvbkluaXRpYWxpemVyLmphdmEgYi9tb2RlbHMvcG9wdWxhdGlvbnMvb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3BvcHVsYXRpb25tb2RlbHMvc3RhbmRhcmQvRWFydGhTY2llbmNlUG9wdWxhdGlvbkluaXRpYWxpemVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTdjNjI5NwotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9wb3B1bGF0aW9ucy9vcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vcG9wdWxhdGlvbm1vZGVscy9zdGFuZGFyZC9FYXJ0aFNjaWVuY2VQb3B1bGF0aW9uSW5pdGlhbGl6ZXIuamF2YQpAQCAtMCwwICsxLDI1IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZDsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogCisgKiBDb3B5cmlnaHQgKGMpIDIwMTEgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuIAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyAKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0IAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwgCisgKiAKKyAqIENvbnRyaWJ1dG9yczogCisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIEEgcmVwcmVzZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPkVhcnRoIFNjaWVuY2UgUG9wdWxhdGlvbiBJbml0aWFsaXplcjwvYj48L2VtPicuCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqCisgKgorICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmRQYWNrYWdlI2dldEVhcnRoU2NpZW5jZVBvcHVsYXRpb25Jbml0aWFsaXplcigpCisgKiBAbW9kZWwgYWJzdHJhY3Q9InRydWUiCisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBpbnRlcmZhY2UgRWFydGhTY2llbmNlUG9wdWxhdGlvbkluaXRpYWxpemVyIGV4dGVuZHMgUG9wdWxhdGlvbkluaXRpYWxpemVyIHsKK30gLy8gRWFydGhTY2llbmNlUG9wdWxhdGlvbkluaXRpYWxpemVyCmRpZmYgLS1naXQgYS9tb2RlbHMvcG9wdWxhdGlvbnMvb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3BvcHVsYXRpb25tb2RlbHMvc3RhbmRhcmQvTW9zcXVpdG9Qb3B1bGF0aW9uTW9kZWwuamF2YSBiL21vZGVscy9wb3B1bGF0aW9ucy9vcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vcG9wdWxhdGlvbm1vZGVscy9zdGFuZGFyZC9Nb3NxdWl0b1BvcHVsYXRpb25Nb2RlbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU1OWMyZGYKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvcG9wdWxhdGlvbnMvb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3BvcHVsYXRpb25tb2RlbHMvc3RhbmRhcmQvTW9zcXVpdG9Qb3B1bGF0aW9uTW9kZWwuamF2YQpAQCAtMCwwICsxLDE0NCBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQ7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIAorICogQ29weXJpZ2h0IChjKSAyMDExIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiAKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdCAKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sIAorICogCisgKiBDb250cmlidXRvcnM6IAorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiAKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5JbnRlZ3JhdGlvbkRlY29yYXRvcjsKKworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiBBIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5Nb3NxdWl0byBQb3B1bGF0aW9uIE1vZGVsPC9iPjwvZW0+Jy4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICoKKyAqIDxwPgorICogVGhlIGZvbGxvd2luZyBmZWF0dXJlcyBhcmUgc3VwcG9ydGVkOgorICogPHVsPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5Nb3NxdWl0b1BvcHVsYXRpb25Nb2RlbCNnZXRTY2FsaW5nRmFjdG9yIDxlbT5TY2FsaW5nIEZhY3RvcjwvZW0+fTwvbGk+CisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLk1vc3F1aXRvUG9wdWxhdGlvbk1vZGVsI2dldFRpbWVQZXJpb2QgPGVtPlRpbWUgUGVyaW9kPC9lbT59PC9saT4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuTW9zcXVpdG9Qb3B1bGF0aW9uTW9kZWwjZ2V0TW9ydGFsaXR5UmF0ZSA8ZW0+TW9ydGFsaXR5IFJhdGU8L2VtPn08L2xpPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5Nb3NxdWl0b1BvcHVsYXRpb25Nb2RlbCNnZXRIb3N0IDxlbT5Ib3N0PC9lbT59PC9saT4KKyAqIDwvdWw+CisgKiA8L3A+CisgKgorICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmRQYWNrYWdlI2dldE1vc3F1aXRvUG9wdWxhdGlvbk1vZGVsKCkKKyAqIEBtb2RlbAorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgaW50ZXJmYWNlIE1vc3F1aXRvUG9wdWxhdGlvbk1vZGVsIGV4dGVuZHMgUG9wdWxhdGlvbk1vZGVsIHsKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5TY2FsaW5nIEZhY3RvcjwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIGlzIDxjb2RlPiIxLjAiPC9jb2RlPi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDxwPgorCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPlNjYWxpbmcgRmFjdG9yPC9lbT4nIGF0dHJpYnV0ZSBpc24ndCBjbGVhciwKKwkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uCisJICogPC9wPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPlNjYWxpbmcgRmFjdG9yPC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiBAc2VlICNzZXRTY2FsaW5nRmFjdG9yKGRvdWJsZSkKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZFBhY2thZ2UjZ2V0TW9zcXVpdG9Qb3B1bGF0aW9uTW9kZWxfU2NhbGluZ0ZhY3RvcigpCisJICogQG1vZGVsIGRlZmF1bHQ9IjEuMCIKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJZG91YmxlIGdldFNjYWxpbmdGYWN0b3IoKTsKKworCS8qKgorCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5Nb3NxdWl0b1BvcHVsYXRpb25Nb2RlbCNnZXRTY2FsaW5nRmFjdG9yIDxlbT5TY2FsaW5nIEZhY3RvcjwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+U2NhbGluZyBGYWN0b3I8L2VtPicgYXR0cmlidXRlLgorCSAqIEBzZWUgI2dldFNjYWxpbmdGYWN0b3IoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwl2b2lkIHNldFNjYWxpbmdGYWN0b3IoZG91YmxlIHZhbHVlKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPlRpbWUgUGVyaW9kPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogVGhlIGRlZmF1bHQgdmFsdWUgaXMgPGNvZGU+Ijg2NDAwMDAwIjwvY29kZT4uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8cD4KKwkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5UaW1lIFBlcmlvZDwvZW0+JyBhdHRyaWJ1dGUgaXNuJ3QgY2xlYXIsCisJICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLgorCSAqIDwvcD4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5UaW1lIFBlcmlvZDwvZW0+JyBhdHRyaWJ1dGUuCisJICogQHNlZSAjc2V0VGltZVBlcmlvZChsb25nKQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkUGFja2FnZSNnZXRNb3NxdWl0b1BvcHVsYXRpb25Nb2RlbF9UaW1lUGVyaW9kKCkKKwkgKiBAbW9kZWwgZGVmYXVsdD0iODY0MDAwMDAiCisJICogQGdlbmVyYXRlZAorCSAqLworCWxvbmcgZ2V0VGltZVBlcmlvZCgpOworCisJLyoqCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLk1vc3F1aXRvUG9wdWxhdGlvbk1vZGVsI2dldFRpbWVQZXJpb2QgPGVtPlRpbWUgUGVyaW9kPC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5UaW1lIFBlcmlvZDwvZW0+JyBhdHRyaWJ1dGUuCisJICogQHNlZSAjZ2V0VGltZVBlcmlvZCgpCisJICogQGdlbmVyYXRlZAorCSAqLworCXZvaWQgc2V0VGltZVBlcmlvZChsb25nIHZhbHVlKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPk1vcnRhbGl0eSBSYXRlPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogVGhlIGRlZmF1bHQgdmFsdWUgaXMgPGNvZGU+IjAuMDUiPC9jb2RlPi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDxwPgorCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPk1vcnRhbGl0eSBSYXRlPC9lbT4nIGF0dHJpYnV0ZSBpc24ndCBjbGVhciwKKwkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uCisJICogPC9wPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPk1vcnRhbGl0eSBSYXRlPC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiBAc2VlICNzZXRNb3J0YWxpdHlSYXRlKGRvdWJsZSkKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZFBhY2thZ2UjZ2V0TW9zcXVpdG9Qb3B1bGF0aW9uTW9kZWxfTW9ydGFsaXR5UmF0ZSgpCisJICogQG1vZGVsIGRlZmF1bHQ9IjAuMDUiCisJICogQGdlbmVyYXRlZAorCSAqLworCWRvdWJsZSBnZXRNb3J0YWxpdHlSYXRlKCk7CisKKwkvKioKKwkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuTW9zcXVpdG9Qb3B1bGF0aW9uTW9kZWwjZ2V0TW9ydGFsaXR5UmF0ZSA8ZW0+TW9ydGFsaXR5IFJhdGU8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPk1vcnRhbGl0eSBSYXRlPC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiBAc2VlICNnZXRNb3J0YWxpdHlSYXRlKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJdm9pZCBzZXRNb3J0YWxpdHlSYXRlKGRvdWJsZSB2YWx1ZSk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5Ib3N0PC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogVGhlIGRlZmF1bHQgdmFsdWUgaXMgPGNvZGU+Imh1bWFuIjwvY29kZT4uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8cD4KKwkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5Ib3N0PC9lbT4nIGF0dHJpYnV0ZSBpc24ndCBjbGVhciwKKwkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uCisJICogPC9wPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPkhvc3Q8L2VtPicgYXR0cmlidXRlLgorCSAqIEBzZWUgI3NldEhvc3QoU3RyaW5nKQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkUGFja2FnZSNnZXRNb3NxdWl0b1BvcHVsYXRpb25Nb2RlbF9Ib3N0KCkKKwkgKiBAbW9kZWwgZGVmYXVsdD0iaHVtYW4iCisJICogQGdlbmVyYXRlZAorCSAqLworCVN0cmluZyBnZXRIb3N0KCk7CisKKwkvKioKKwkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuTW9zcXVpdG9Qb3B1bGF0aW9uTW9kZWwjZ2V0SG9zdCA8ZW0+SG9zdDwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+SG9zdDwvZW0+JyBhdHRyaWJ1dGUuCisJICogQHNlZSAjZ2V0SG9zdCgpCisJICogQGdlbmVyYXRlZAorCSAqLworCXZvaWQgc2V0SG9zdChTdHJpbmcgdmFsdWUpOworCit9IC8vIE1vc3F1aXRvUG9wdWxhdGlvbk1vZGVsCmRpZmYgLS1naXQgYS9tb2RlbHMvcG9wdWxhdGlvbnMvb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3BvcHVsYXRpb25tb2RlbHMvc3RhbmRhcmQvUG9wdWxhdGlvbkdyb3VwLmphdmEgYi9tb2RlbHMvcG9wdWxhdGlvbnMvb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3BvcHVsYXRpb25tb2RlbHMvc3RhbmRhcmQvUG9wdWxhdGlvbkdyb3VwLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjc5MDMyNgotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9wb3B1bGF0aW9ucy9vcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vcG9wdWxhdGlvbm1vZGVscy9zdGFuZGFyZC9Qb3B1bGF0aW9uR3JvdXAuamF2YQpAQCAtMCwwICsxLDg3IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZDsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAxMCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdDsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogQSByZXByZXNlbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+UG9wdWxhdGlvbiBHcm91cDwvYj48L2VtPicuCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqCisgKiA8cD4KKyAqIFRoZSBmb2xsb3dpbmcgZmVhdHVyZXMgYXJlIHN1cHBvcnRlZDoKKyAqIDx1bD4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuUG9wdWxhdGlvbkdyb3VwI2dldElkZW50aWZpZXIgPGVtPklkZW50aWZpZXI8L2VtPn08L2xpPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5Qb3B1bGF0aW9uR3JvdXAjZ2V0RnJhY3Rpb24gPGVtPkZyYWN0aW9uPC9lbT59PC9saT4KKyAqIDwvdWw+CisgKiA8L3A+CisgKgorICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmRQYWNrYWdlI2dldFBvcHVsYXRpb25Hcm91cCgpCisgKiBAbW9kZWwKKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGludGVyZmFjZSBQb3B1bGF0aW9uR3JvdXAgZXh0ZW5kcyBFT2JqZWN0IHsKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5JZGVudGlmaWVyPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8cD4KKwkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5JZGVudGlmaWVyPC9lbT4nIGF0dHJpYnV0ZSBpc24ndCBjbGVhciwKKwkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uCisJICogPC9wPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPklkZW50aWZpZXI8L2VtPicgYXR0cmlidXRlLgorCSAqIEBzZWUgI3NldElkZW50aWZpZXIoU3RyaW5nKQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkUGFja2FnZSNnZXRQb3B1bGF0aW9uR3JvdXBfSWRlbnRpZmllcigpCisJICogQG1vZGVsCisJICogQGdlbmVyYXRlZAorCSAqLworCVN0cmluZyBnZXRJZGVudGlmaWVyKCk7CisKKwkvKioKKwkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuUG9wdWxhdGlvbkdyb3VwI2dldElkZW50aWZpZXIgPGVtPklkZW50aWZpZXI8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPklkZW50aWZpZXI8L2VtPicgYXR0cmlidXRlLgorCSAqIEBzZWUgI2dldElkZW50aWZpZXIoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwl2b2lkIHNldElkZW50aWZpZXIoU3RyaW5nIHZhbHVlKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPkZyYWN0aW9uPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogVGhlIGRlZmF1bHQgdmFsdWUgaXMgPGNvZGU+IjAuNSI8L2NvZGU+LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPHA+CisJICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+RnJhY3Rpb248L2VtPicgYXR0cmlidXRlIGlzbid0IGNsZWFyLAorCSAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4KKwkgKiA8L3A+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+RnJhY3Rpb248L2VtPicgYXR0cmlidXRlLgorCSAqIEBzZWUgI3NldEZyYWN0aW9uKGRvdWJsZSkKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZFBhY2thZ2UjZ2V0UG9wdWxhdGlvbkdyb3VwX0ZyYWN0aW9uKCkKKwkgKiBAbW9kZWwgZGVmYXVsdD0iMC41IgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlkb3VibGUgZ2V0RnJhY3Rpb24oKTsKKworCS8qKgorCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5Qb3B1bGF0aW9uR3JvdXAjZ2V0RnJhY3Rpb24gPGVtPkZyYWN0aW9uPC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5GcmFjdGlvbjwvZW0+JyBhdHRyaWJ1dGUuCisJICogQHNlZSAjZ2V0RnJhY3Rpb24oKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwl2b2lkIHNldEZyYWN0aW9uKGRvdWJsZSB2YWx1ZSk7CisKK30gLy8gUG9wdWxhdGlvbkdyb3VwCmRpZmYgLS1naXQgYS9tb2RlbHMvcG9wdWxhdGlvbnMvb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3BvcHVsYXRpb25tb2RlbHMvc3RhbmRhcmQvUG9wdWxhdGlvbkluaXRpYWxpemVyLmphdmEgYi9tb2RlbHMvcG9wdWxhdGlvbnMvb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3BvcHVsYXRpb25tb2RlbHMvc3RhbmRhcmQvUG9wdWxhdGlvbkluaXRpYWxpemVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGE4NTg5OAotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9wb3B1bGF0aW9ucy9vcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vcG9wdWxhdGlvbm1vZGVscy9zdGFuZGFyZC9Qb3B1bGF0aW9uSW5pdGlhbGl6ZXIuamF2YQpAQCAtMCwwICsxLDg4IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZDsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAxMCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuTm9kZURlY29yYXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuTW9kaWZpYWJsZTsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogQSByZXByZXNlbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+UG9wdWxhdGlvbiBJbml0aWFsaXplcjwvYj48L2VtPicuCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqCisgKiA8cD4KKyAqIFRoZSBmb2xsb3dpbmcgZmVhdHVyZXMgYXJlIHN1cHBvcnRlZDoKKyAqIDx1bD4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuUG9wdWxhdGlvbkluaXRpYWxpemVyI2dldFRhcmdldElTT0tleSA8ZW0+VGFyZ2V0IElTTyBLZXk8L2VtPn08L2xpPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5Qb3B1bGF0aW9uSW5pdGlhbGl6ZXIjZ2V0UG9wdWxhdGlvbklkZW50aWZpZXIgPGVtPlBvcHVsYXRpb24gSWRlbnRpZmllcjwvZW0+fTwvbGk+CisgKiA8L3VsPgorICogPC9wPgorICoKKyAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkUGFja2FnZSNnZXRQb3B1bGF0aW9uSW5pdGlhbGl6ZXIoKQorICogQG1vZGVsIGFic3RyYWN0PSJ0cnVlIgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgaW50ZXJmYWNlIFBvcHVsYXRpb25Jbml0aWFsaXplciBleHRlbmRzIE5vZGVEZWNvcmF0b3IsIE1vZGlmaWFibGUgeworCS8qKgorCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPlRhcmdldCBJU08gS2V5PC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8cD4KKwkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5UYXJnZXQgSVNPIEtleTwvZW0+JyBhdHRyaWJ1dGUgaXNuJ3QgY2xlYXIsCisJICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLgorCSAqIDwvcD4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5UYXJnZXQgSVNPIEtleTwvZW0+JyBhdHRyaWJ1dGUuCisJICogQHNlZSAjc2V0VGFyZ2V0SVNPS2V5KFN0cmluZykKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZFBhY2thZ2UjZ2V0UG9wdWxhdGlvbkluaXRpYWxpemVyX1RhcmdldElTT0tleSgpCisJICogQG1vZGVsCisJICogQGdlbmVyYXRlZAorCSAqLworCVN0cmluZyBnZXRUYXJnZXRJU09LZXkoKTsKKworCS8qKgorCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5Qb3B1bGF0aW9uSW5pdGlhbGl6ZXIjZ2V0VGFyZ2V0SVNPS2V5IDxlbT5UYXJnZXQgSVNPIEtleTwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+VGFyZ2V0IElTTyBLZXk8L2VtPicgYXR0cmlidXRlLgorCSAqIEBzZWUgI2dldFRhcmdldElTT0tleSgpCisJICogQGdlbmVyYXRlZAorCSAqLworCXZvaWQgc2V0VGFyZ2V0SVNPS2V5KFN0cmluZyB2YWx1ZSk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5Qb3B1bGF0aW9uIElkZW50aWZpZXI8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyA8Y29kZT4iaHVtYW4iPC9jb2RlPi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDxwPgorCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPlBvcHVsYXRpb24gSWRlbnRpZmllcjwvZW0+JyBhdHRyaWJ1dGUgaXNuJ3QgY2xlYXIsCisJICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLgorCSAqIDwvcD4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5Qb3B1bGF0aW9uIElkZW50aWZpZXI8L2VtPicgYXR0cmlidXRlLgorCSAqIEBzZWUgI3NldFBvcHVsYXRpb25JZGVudGlmaWVyKFN0cmluZykKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZFBhY2thZ2UjZ2V0UG9wdWxhdGlvbkluaXRpYWxpemVyX1BvcHVsYXRpb25JZGVudGlmaWVyKCkKKwkgKiBAbW9kZWwgZGVmYXVsdD0iaHVtYW4iCisJICogQGdlbmVyYXRlZAorCSAqLworCVN0cmluZyBnZXRQb3B1bGF0aW9uSWRlbnRpZmllcigpOworCisJLyoqCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLlBvcHVsYXRpb25Jbml0aWFsaXplciNnZXRQb3B1bGF0aW9uSWRlbnRpZmllciA8ZW0+UG9wdWxhdGlvbiBJZGVudGlmaWVyPC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5Qb3B1bGF0aW9uIElkZW50aWZpZXI8L2VtPicgYXR0cmlidXRlLgorCSAqIEBzZWUgI2dldFBvcHVsYXRpb25JZGVudGlmaWVyKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJdm9pZCBzZXRQb3B1bGF0aW9uSWRlbnRpZmllcihTdHJpbmcgdmFsdWUpOworCit9IC8vIFBvcHVsYXRpb25Jbml0aWFsaXplcgpkaWZmIC0tZ2l0IGEvbW9kZWxzL3BvcHVsYXRpb25zL29yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9wb3B1bGF0aW9ubW9kZWxzL3N0YW5kYXJkL1BvcHVsYXRpb25Nb2RlbC5qYXZhIGIvbW9kZWxzL3BvcHVsYXRpb25zL29yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9wb3B1bGF0aW9ubW9kZWxzL3N0YW5kYXJkL1BvcHVsYXRpb25Nb2RlbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIyNzU2ZDQKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvcG9wdWxhdGlvbnMvb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3BvcHVsYXRpb25tb2RlbHMvc3RhbmRhcmQvUG9wdWxhdGlvbk1vZGVsLmphdmEKQEAgLTAsMCArMSwxMzQgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkOw0KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorICogQ29weXJpZ2h0IChjKSAyMDA5IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLg0KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMNCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjANCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdA0KKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sDQorICoNCisgKiBDb250cmlidXRvcnM6DQorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbg0KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KKw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuRUxpc3Q7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5JbnRlZ3JhdGlvbkRlY29yYXRvcjsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLk5vZGVEZWNvcmF0b3I7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5Nb2RpZmlhYmxlOw0KKw0KKy8qKg0KKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorICogQSByZXByZXNlbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+UG9wdWxhdGlvbiBNb2RlbDwvYj48L2VtPicuDQorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorICoNCisgKiA8cD4NCisgKiBUaGUgZm9sbG93aW5nIGZlYXR1cmVzIGFyZSBzdXBwb3J0ZWQ6DQorICogPHVsPg0KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuUG9wdWxhdGlvbk1vZGVsI2dldFBvcHVsYXRpb25JZGVudGlmaWVyIDxlbT5Qb3B1bGF0aW9uIElkZW50aWZpZXI8L2VtPn08L2xpPg0KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuUG9wdWxhdGlvbk1vZGVsI2dldE5hbWUgPGVtPk5hbWU8L2VtPn08L2xpPg0KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuUG9wdWxhdGlvbk1vZGVsI2dldFRhcmdldElTT0tleSA8ZW0+VGFyZ2V0IElTTyBLZXk8L2VtPn08L2xpPg0KKyAqIDwvdWw+DQorICogPC9wPg0KKyAqDQorICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmRQYWNrYWdlI2dldFBvcHVsYXRpb25Nb2RlbCgpDQorICogQG1vZGVsIGFic3RyYWN0PSJ0cnVlIg0KKyAqIEBnZW5lcmF0ZWQNCisgKi8NCitwdWJsaWMgaW50ZXJmYWNlIFBvcHVsYXRpb25Nb2RlbCBleHRlbmRzIEludGVncmF0aW9uRGVjb3JhdG9yLCBNb2RpZmlhYmxlIHsNCisJDQorCS8qKg0KKwkgKiBUaGlzIGlzIHRoZSBzZWdtZW50IG9mIHRoZSB0eXBlIFVSSSB0aGF0IHByZWZpeGVzIGFsbCBvdGhlciBzZWdtZW50cyBpbiBhDQorCSAqIHBvcHVsYXRpb24gbW9kZWwgdHlwZSBVUkkuDQorCSAqLw0KKwlTdHJpbmcgVVJJX1RZUEVfUE9QVUxBVElPTk1PREVMX1NFR01FTlQgPSAicG9wdWxhdGlvbiI7DQorDQorCQ0KKwkvKioNCisJICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+UG9wdWxhdGlvbiBJZGVudGlmaWVyPC9iPjwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIGlzIDxjb2RlPiJodW1hbiI8L2NvZGU+Lg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8cD4NCisJICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+UG9wdWxhdGlvbiBJZGVudGlmaWVyPC9lbT4nIGF0dHJpYnV0ZSBpc24ndCBjbGVhciwNCisJICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLg0KKwkgKiA8L3A+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5Qb3B1bGF0aW9uIElkZW50aWZpZXI8L2VtPicgYXR0cmlidXRlLg0KKwkgKiBAc2VlICNzZXRQb3B1bGF0aW9uSWRlbnRpZmllcihTdHJpbmcpDQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkUGFja2FnZSNnZXRQb3B1bGF0aW9uTW9kZWxfUG9wdWxhdGlvbklkZW50aWZpZXIoKQ0KKwkgKiBAbW9kZWwgZGVmYXVsdD0iaHVtYW4iDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCVN0cmluZyBnZXRQb3B1bGF0aW9uSWRlbnRpZmllcigpOw0KKw0KKwkvKioNCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLlBvcHVsYXRpb25Nb2RlbCNnZXRQb3B1bGF0aW9uSWRlbnRpZmllciA8ZW0+UG9wdWxhdGlvbiBJZGVudGlmaWVyPC9lbT59JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5Qb3B1bGF0aW9uIElkZW50aWZpZXI8L2VtPicgYXR0cmlidXRlLg0KKwkgKiBAc2VlICNnZXRQb3B1bGF0aW9uSWRlbnRpZmllcigpDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXZvaWQgc2V0UG9wdWxhdGlvbklkZW50aWZpZXIoU3RyaW5nIHZhbHVlKTsNCisNCisJLyoqDQorCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPk5hbWU8L2I+PC9lbT4nIGF0dHJpYnV0ZS4NCisJICogVGhlIGRlZmF1bHQgdmFsdWUgaXMgPGNvZGU+Ikh1bWFuUG9wdWxhdGlvbk1vZGVsIjwvY29kZT4uDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDxwPg0KKwkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5OYW1lPC9lbT4nIGF0dHJpYnV0ZSBpc24ndCBjbGVhciwNCisJICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLg0KKwkgKiA8L3A+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5OYW1lPC9lbT4nIGF0dHJpYnV0ZS4NCisJICogQHNlZSAjc2V0TmFtZShTdHJpbmcpDQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkUGFja2FnZSNnZXRQb3B1bGF0aW9uTW9kZWxfTmFtZSgpDQorCSAqIEBtb2RlbCBkZWZhdWx0PSJIdW1hblBvcHVsYXRpb25Nb2RlbCINCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJU3RyaW5nIGdldE5hbWUoKTsNCisNCisJLyoqDQorCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5Qb3B1bGF0aW9uTW9kZWwjZ2V0TmFtZSA8ZW0+TmFtZTwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+TmFtZTwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIEBzZWUgI2dldE5hbWUoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwl2b2lkIHNldE5hbWUoU3RyaW5nIHZhbHVlKTsNCisNCisJLyoqDQorCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPlRhcmdldCBJU08gS2V5PC9iPjwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIGlzIDxjb2RlPiIiPC9jb2RlPi4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPHA+DQorCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPlRhcmdldCBJU08gS2V5PC9lbT4nIGF0dHJpYnV0ZSBpc24ndCBjbGVhciwNCisJICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLg0KKwkgKiA8L3A+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5UYXJnZXQgSVNPIEtleTwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIEBzZWUgI3NldFRhcmdldElTT0tleShTdHJpbmcpDQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkUGFja2FnZSNnZXRQb3B1bGF0aW9uTW9kZWxfVGFyZ2V0SVNPS2V5KCkNCisJICogQG1vZGVsIGRlZmF1bHQ9IiINCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJU3RyaW5nIGdldFRhcmdldElTT0tleSgpOw0KKw0KKwkvKioNCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLlBvcHVsYXRpb25Nb2RlbCNnZXRUYXJnZXRJU09LZXkgPGVtPlRhcmdldCBJU08gS2V5PC9lbT59JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5UYXJnZXQgSVNPIEtleTwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIEBzZWUgI2dldFRhcmdldElTT0tleSgpDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXZvaWQgc2V0VGFyZ2V0SVNPS2V5KFN0cmluZyB2YWx1ZSk7DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQG1vZGVsIGtpbmQ9Im9wZXJhdGlvbiINCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJRUxpc3Q8U3RyaW5nPiBnZXRBbGxMYWJlbElkZW50aWZpZXJzKCk7DQorDQorfSAvLyBQb3B1bGF0aW9uTW9kZWwNCmRpZmYgLS1naXQgYS9tb2RlbHMvcG9wdWxhdGlvbnMvb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3BvcHVsYXRpb25tb2RlbHMvc3RhbmRhcmQvUG9wdWxhdGlvbk1vZGVsTGFiZWwuamF2YSBiL21vZGVscy9wb3B1bGF0aW9ucy9vcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vcG9wdWxhdGlvbm1vZGVscy9zdGFuZGFyZC9Qb3B1bGF0aW9uTW9kZWxMYWJlbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIxMGE2NDEKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvcG9wdWxhdGlvbnMvb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3BvcHVsYXRpb25tb2RlbHMvc3RhbmRhcmQvUG9wdWxhdGlvbk1vZGVsTGFiZWwuamF2YQpAQCAtMCwwICsxLDEwNCBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQ7DQorDQorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisgKiBDb3B5cmlnaHQgKGMpIDIwMDkgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuDQorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscw0KKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMA0KKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0DQorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwNCisgKg0KKyAqIENvbnRyaWJ1dG9yczoNCisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uDQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQorDQorDQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5JbnRlZ3JhdGlvbkxhYmVsOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuVVJJOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuU1RFTVVSSTsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkR5bmFtaWNOb2RlTGFiZWw7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLlBvcHVsYXRpb25MYWJlbDsNCisNCisvKioNCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKyAqIEEgcmVwcmVzZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPlBvcHVsYXRpb24gTW9kZWwgTGFiZWw8L2I+PC9lbT4nLg0KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKyAqDQorICogPHA+DQorICogVGhlIGZvbGxvd2luZyBmZWF0dXJlcyBhcmUgc3VwcG9ydGVkOg0KKyAqIDx1bD4NCisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLlBvcHVsYXRpb25Nb2RlbExhYmVsI2dldFBvcHVsYXRpb25MYWJlbCA8ZW0+UG9wdWxhdGlvbiBMYWJlbDwvZW0+fTwvbGk+DQorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5Qb3B1bGF0aW9uTW9kZWxMYWJlbCNnZXRQb3B1bGF0aW9uSWRlbnRpZmllciA8ZW0+UG9wdWxhdGlvbiBJZGVudGlmaWVyPC9lbT59PC9saT4NCisgKiA8L3VsPg0KKyAqIDwvcD4NCisgKg0KKyAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkUGFja2FnZSNnZXRQb3B1bGF0aW9uTW9kZWxMYWJlbCgpDQorICogQG1vZGVsDQorICogQGdlbmVyYXRlZA0KKyAqLw0KK3B1YmxpYyBpbnRlcmZhY2UgUG9wdWxhdGlvbk1vZGVsTGFiZWwgZXh0ZW5kcyBJbnRlZ3JhdGlvbkxhYmVsIHsNCisNCisJLyoqDQorCSAqIFRoaXMgaXMgdGhlIHNlZ21lbnQgb2YgdGhlIHR5cGUgVVJJIHRoYXQgcHJlZml4ZXMgYWxsIG90aGVyIHNlZ21lbnRzIGluIGENCisJICogZHluYW1pYyBwb3B1bGF0aW9uIGxhYmVsIHR5cGUgVVJJLg0KKwkgKi8NCisJU3RyaW5nIFVSSV9UWVBFX0RZTkFNSUNfUE9QVUxBVElPTl9MQUJFTF9TRUdNRU5UID0gVVJJX1RZUEVfTEFCRUxfU0VHTUVOVA0KKwkJCSsgIi9keW5wb3B1bGF0aW9uIjsNCisNCisJLyoqDQorCSAqIFRoaXMgaXMgdGhlIHR5cGUgVVJJIGZvciBkeW5hbWljIHBvcHVsYXRpb24gbGFiZWxzDQorCSAqLw0KKwlVUkkgVVJJX1RZUEVfRFlOQU1JQ19QT1BVTEFUSU9OX0xBQkVMID0gU1RFTVVSSQ0KKwkJCS5jcmVhdGVUeXBlVVJJKFVSSV9UWVBFX0RZTkFNSUNfUE9QVUxBVElPTl9MQUJFTF9TRUdNRU5UKTsNCisJDQorCS8qKg0KKwkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5Qb3B1bGF0aW9uIExhYmVsPC9iPjwvZW0+JyByZWZlcmVuY2UuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDxwPg0KKwkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5Qb3B1bGF0aW9uIExhYmVsPC9lbT4nIHJlZmVyZW5jZSBpc24ndCBjbGVhciwNCisJICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLg0KKwkgKiA8L3A+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5Qb3B1bGF0aW9uIExhYmVsPC9lbT4nIHJlZmVyZW5jZS4NCisJICogQHNlZSAjc2V0UG9wdWxhdGlvbkxhYmVsKFBvcHVsYXRpb25MYWJlbCkNCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmRQYWNrYWdlI2dldFBvcHVsYXRpb25Nb2RlbExhYmVsX1BvcHVsYXRpb25MYWJlbCgpDQorCSAqIEBtb2RlbA0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlQb3B1bGF0aW9uTGFiZWwgZ2V0UG9wdWxhdGlvbkxhYmVsKCk7DQorDQorCS8qKg0KKwkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuUG9wdWxhdGlvbk1vZGVsTGFiZWwjZ2V0UG9wdWxhdGlvbkxhYmVsIDxlbT5Qb3B1bGF0aW9uIExhYmVsPC9lbT59JyByZWZlcmVuY2UuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5Qb3B1bGF0aW9uIExhYmVsPC9lbT4nIHJlZmVyZW5jZS4NCisJICogQHNlZSAjZ2V0UG9wdWxhdGlvbkxhYmVsKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJdm9pZCBzZXRQb3B1bGF0aW9uTGFiZWwoUG9wdWxhdGlvbkxhYmVsIHZhbHVlKTsNCisNCisJLyoqDQorCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPlBvcHVsYXRpb24gSWRlbnRpZmllcjwvYj48L2VtPicgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8cD4NCisJICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+UG9wdWxhdGlvbiBJZGVudGlmaWVyPC9lbT4nIGF0dHJpYnV0ZSBpc24ndCBjbGVhciwNCisJICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLg0KKwkgKiA8L3A+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5Qb3B1bGF0aW9uIElkZW50aWZpZXI8L2VtPicgYXR0cmlidXRlLg0KKwkgKiBAc2VlICNzZXRQb3B1bGF0aW9uSWRlbnRpZmllcihTdHJpbmcpDQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkUGFja2FnZSNnZXRQb3B1bGF0aW9uTW9kZWxMYWJlbF9Qb3B1bGF0aW9uSWRlbnRpZmllcigpDQorCSAqIEBtb2RlbA0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlTdHJpbmcgZ2V0UG9wdWxhdGlvbklkZW50aWZpZXIoKTsNCisNCisJLyoqDQorCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5Qb3B1bGF0aW9uTW9kZWxMYWJlbCNnZXRQb3B1bGF0aW9uSWRlbnRpZmllciA8ZW0+UG9wdWxhdGlvbiBJZGVudGlmaWVyPC9lbT59JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5Qb3B1bGF0aW9uIElkZW50aWZpZXI8L2VtPicgYXR0cmlidXRlLg0KKwkgKiBAc2VlICNnZXRQb3B1bGF0aW9uSWRlbnRpZmllcigpDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXZvaWQgc2V0UG9wdWxhdGlvbklkZW50aWZpZXIoU3RyaW5nIHZhbHVlKTsNCit9IC8vIFBvcHVsYXRpb25Nb2RlbExhYmVsDQpkaWZmIC0tZ2l0IGEvbW9kZWxzL3BvcHVsYXRpb25zL29yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9wb3B1bGF0aW9ubW9kZWxzL3N0YW5kYXJkL1BvcHVsYXRpb25Nb2RlbExhYmVsVmFsdWUuamF2YSBiL21vZGVscy9wb3B1bGF0aW9ucy9vcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vcG9wdWxhdGlvbm1vZGVscy9zdGFuZGFyZC9Qb3B1bGF0aW9uTW9kZWxMYWJlbFZhbHVlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDFmMTdkZAotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9wb3B1bGF0aW9ucy9vcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vcG9wdWxhdGlvbm1vZGVscy9zdGFuZGFyZC9Qb3B1bGF0aW9uTW9kZWxMYWJlbFZhbHVlLmphdmEKQEAgLTAsMCArMSwzMCBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQ7DQorDQorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisgKiBDb3B5cmlnaHQgKGMpIDIwMDkgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuDQorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscw0KKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMA0KKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0DQorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwNCisgKg0KKyAqIENvbnRyaWJ1dG9yczoNCisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uDQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQorDQorDQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5JbnRlZ3JhdGlvbkxhYmVsVmFsdWU7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5MYWJlbFZhbHVlOw0KKw0KKy8qKg0KKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorICogQSByZXByZXNlbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+UG9wdWxhdGlvbiBNb2RlbCBMYWJlbCBWYWx1ZTwvYj48L2VtPicuDQorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorICoNCisgKg0KKyAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkUGFja2FnZSNnZXRQb3B1bGF0aW9uTW9kZWxMYWJlbFZhbHVlKCkNCisgKiBAbW9kZWwNCisgKiBAZ2VuZXJhdGVkDQorICovDQorQFN1cHByZXNzV2FybmluZ3MoImFsbCIpDQorcHVibGljIGludGVyZmFjZSBQb3B1bGF0aW9uTW9kZWxMYWJlbFZhbHVlIGV4dGVuZHMgSW50ZWdyYXRpb25MYWJlbFZhbHVlIHsNCit9IC8vIFBvcHVsYXRpb25Nb2RlbExhYmVsVmFsdWUNCmRpZmYgLS1naXQgYS9tb2RlbHMvcG9wdWxhdGlvbnMvb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3BvcHVsYXRpb25tb2RlbHMvc3RhbmRhcmQvU2Vhc29uYWxQb3B1bGF0aW9uTW9kZWwuamF2YSBiL21vZGVscy9wb3B1bGF0aW9ucy9vcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vcG9wdWxhdGlvbm1vZGVscy9zdGFuZGFyZC9TZWFzb25hbFBvcHVsYXRpb25Nb2RlbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ4ZjllMjIKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvcG9wdWxhdGlvbnMvb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3BvcHVsYXRpb25tb2RlbHMvc3RhbmRhcmQvU2Vhc29uYWxQb3B1bGF0aW9uTW9kZWwuamF2YQpAQCAtMCwwICsxLDEzMSBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQ7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIAorICogQ29weXJpZ2h0IChjKSAyMDExIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiAKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdCAKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sIAorICogCisgKiBDb250cmlidXRvcnM6IAorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiAKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiBBIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5TZWFzb25hbCBQb3B1bGF0aW9uIE1vZGVsPC9iPjwvZW0+Jy4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICoKKyAqIDxwPgorICogVGhlIGZvbGxvd2luZyBmZWF0dXJlcyBhcmUgc3VwcG9ydGVkOgorICogPHVsPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5TZWFzb25hbFBvcHVsYXRpb25Nb2RlbCNnZXRQaGFzZSA8ZW0+UGhhc2U8L2VtPn08L2xpPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5TZWFzb25hbFBvcHVsYXRpb25Nb2RlbCNnZXRNb2R1bGF0aW9uQW1wbGl0dWRlIDxlbT5Nb2R1bGF0aW9uIEFtcGxpdHVkZTwvZW0+fTwvbGk+CisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLlNlYXNvbmFsUG9wdWxhdGlvbk1vZGVsI2dldFBlcmlvZCA8ZW0+UGVyaW9kPC9lbT59PC9saT4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuU2Vhc29uYWxQb3B1bGF0aW9uTW9kZWwjaXNVc2VMYXRpdHVkZSA8ZW0+VXNlIExhdGl0dWRlPC9lbT59PC9saT4KKyAqIDwvdWw+CisgKiA8L3A+CisgKgorICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmRQYWNrYWdlI2dldFNlYXNvbmFsUG9wdWxhdGlvbk1vZGVsKCkKKyAqIEBtb2RlbAorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgaW50ZXJmYWNlIFNlYXNvbmFsUG9wdWxhdGlvbk1vZGVsIGV4dGVuZHMgU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWwgeworCS8qKgorCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPlBoYXNlPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogVGhlIGRlZmF1bHQgdmFsdWUgaXMgPGNvZGU+IjAuMCI8L2NvZGU+LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPHA+CisJICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+UGhhc2U8L2VtPicgYXR0cmlidXRlIGlzbid0IGNsZWFyLAorCSAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4KKwkgKiA8L3A+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+UGhhc2U8L2VtPicgYXR0cmlidXRlLgorCSAqIEBzZWUgI3NldFBoYXNlKGRvdWJsZSkKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZFBhY2thZ2UjZ2V0U2Vhc29uYWxQb3B1bGF0aW9uTW9kZWxfUGhhc2UoKQorCSAqIEBtb2RlbCBkZWZhdWx0PSIwLjAiCisJICogQGdlbmVyYXRlZAorCSAqLworCWRvdWJsZSBnZXRQaGFzZSgpOworCisJLyoqCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLlNlYXNvbmFsUG9wdWxhdGlvbk1vZGVsI2dldFBoYXNlIDxlbT5QaGFzZTwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+UGhhc2U8L2VtPicgYXR0cmlidXRlLgorCSAqIEBzZWUgI2dldFBoYXNlKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJdm9pZCBzZXRQaGFzZShkb3VibGUgdmFsdWUpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+TW9kdWxhdGlvbiBBbXBsaXR1ZGU8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyA8Y29kZT4iMS4wIjwvY29kZT4uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8cD4KKwkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5Nb2R1bGF0aW9uIEFtcGxpdHVkZTwvZW0+JyBhdHRyaWJ1dGUgaXNuJ3QgY2xlYXIsCisJICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLgorCSAqIDwvcD4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5Nb2R1bGF0aW9uIEFtcGxpdHVkZTwvZW0+JyBhdHRyaWJ1dGUuCisJICogQHNlZSAjc2V0TW9kdWxhdGlvbkFtcGxpdHVkZShkb3VibGUpCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmRQYWNrYWdlI2dldFNlYXNvbmFsUG9wdWxhdGlvbk1vZGVsX01vZHVsYXRpb25BbXBsaXR1ZGUoKQorCSAqIEBtb2RlbCBkZWZhdWx0PSIxLjAiCisJICogQGdlbmVyYXRlZAorCSAqLworCWRvdWJsZSBnZXRNb2R1bGF0aW9uQW1wbGl0dWRlKCk7CisKKwkvKioKKwkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuU2Vhc29uYWxQb3B1bGF0aW9uTW9kZWwjZ2V0TW9kdWxhdGlvbkFtcGxpdHVkZSA8ZW0+TW9kdWxhdGlvbiBBbXBsaXR1ZGU8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPk1vZHVsYXRpb24gQW1wbGl0dWRlPC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiBAc2VlICNnZXRNb2R1bGF0aW9uQW1wbGl0dWRlKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJdm9pZCBzZXRNb2R1bGF0aW9uQW1wbGl0dWRlKGRvdWJsZSB2YWx1ZSk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5QZXJpb2Q8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyA8Y29kZT4iMzY1LjI1IjwvY29kZT4uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8cD4KKwkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5QZXJpb2Q8L2VtPicgYXR0cmlidXRlIGlzbid0IGNsZWFyLAorCSAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4KKwkgKiA8L3A+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+UGVyaW9kPC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZFBhY2thZ2UjZ2V0U2Vhc29uYWxQb3B1bGF0aW9uTW9kZWxfUGVyaW9kKCkKKwkgKiBAbW9kZWwgZGVmYXVsdD0iMzY1LjI1IiBjaGFuZ2VhYmxlPSJmYWxzZSIKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJZG91YmxlIGdldFBlcmlvZCgpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+VXNlIExhdGl0dWRlPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogVGhlIGRlZmF1bHQgdmFsdWUgaXMgPGNvZGU+InRydWUiPC9jb2RlPi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDxwPgorCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPlVzZSBMYXRpdHVkZTwvZW0+JyBhdHRyaWJ1dGUgaXNuJ3QgY2xlYXIsCisJICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLgorCSAqIDwvcD4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5Vc2UgTGF0aXR1ZGU8L2VtPicgYXR0cmlidXRlLgorCSAqIEBzZWUgI3NldFVzZUxhdGl0dWRlKGJvb2xlYW4pCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmRQYWNrYWdlI2dldFNlYXNvbmFsUG9wdWxhdGlvbk1vZGVsX1VzZUxhdGl0dWRlKCkKKwkgKiBAbW9kZWwgZGVmYXVsdD0idHJ1ZSIKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJYm9vbGVhbiBpc1VzZUxhdGl0dWRlKCk7CisKKwkvKioKKwkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuU2Vhc29uYWxQb3B1bGF0aW9uTW9kZWwjaXNVc2VMYXRpdHVkZSA8ZW0+VXNlIExhdGl0dWRlPC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5Vc2UgTGF0aXR1ZGU8L2VtPicgYXR0cmlidXRlLgorCSAqIEBzZWUgI2lzVXNlTGF0aXR1ZGUoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwl2b2lkIHNldFVzZUxhdGl0dWRlKGJvb2xlYW4gdmFsdWUpOworCit9IC8vIFNlYXNvbmFsUG9wdWxhdGlvbk1vZGVsCmRpZmYgLS1naXQgYS9tb2RlbHMvcG9wdWxhdGlvbnMvb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3BvcHVsYXRpb25tb2RlbHMvc3RhbmRhcmQvU3RhbmRhcmRGYWN0b3J5LmphdmEgYi9tb2RlbHMvcG9wdWxhdGlvbnMvb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3BvcHVsYXRpb25tb2RlbHMvc3RhbmRhcmQvU3RhbmRhcmRGYWN0b3J5LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWUwMjNiNgotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9wb3B1bGF0aW9ucy9vcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vcG9wdWxhdGlvbm1vZGVscy9zdGFuZGFyZC9TdGFuZGFyZEZhY3RvcnkuamF2YQpAQCAtMCwwICsxLDE2OSBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQ7DQorDQorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisgKiBDb3B5cmlnaHQgKGMpIDIwMDkgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuDQorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscw0KKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMA0KKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0DQorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwNCisgKg0KKyAqIENvbnRyaWJ1dG9yczoNCisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uDQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQorDQorDQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FRmFjdG9yeTsNCisNCisvKioNCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKyAqIFRoZSA8Yj5GYWN0b3J5PC9iPiBmb3IgdGhlIG1vZGVsLg0KKyAqIEl0IHByb3ZpZGVzIGEgY3JlYXRlIG1ldGhvZCBmb3IgZWFjaCBub24tYWJzdHJhY3QgY2xhc3Mgb2YgdGhlIG1vZGVsLg0KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKyAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkUGFja2FnZQ0KKyAqIEBnZW5lcmF0ZWQNCisgKi8NCitwdWJsaWMgaW50ZXJmYWNlIFN0YW5kYXJkRmFjdG9yeSBleHRlbmRzIEVGYWN0b3J5IHsNCisJLyoqDQorCSAqIFRoZSBzaW5nbGV0b24gaW5zdGFuY2Ugb2YgdGhlIGZhY3RvcnkuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlTdGFuZGFyZEZhY3RvcnkgZUlOU1RBTkNFID0gb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLmltcGwuU3RhbmRhcmRGYWN0b3J5SW1wbC5pbml0KCk7DQorDQorCS8qKg0KKwkgKiBSZXR1cm5zIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPlBvcHVsYXRpb24gTW9kZWw8L2VtPicuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcmV0dXJuIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPlBvcHVsYXRpb24gTW9kZWw8L2VtPicuDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCVN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsIGNyZWF0ZVN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsKCk7DQorDQorCS8qKg0KKwkgKiBSZXR1cm5zIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPlBvcHVsYXRpb24gTW9kZWwgTGFiZWw8L2VtPicuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcmV0dXJuIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPlBvcHVsYXRpb24gTW9kZWwgTGFiZWw8L2VtPicuDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCVBvcHVsYXRpb25Nb2RlbExhYmVsIGNyZWF0ZVBvcHVsYXRpb25Nb2RlbExhYmVsKCk7DQorDQorCS8qKg0KKwkgKiBSZXR1cm5zIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPlBvcHVsYXRpb24gTW9kZWwgTGFiZWw8L2VtPicuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcmV0dXJuIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPlBvcHVsYXRpb24gTW9kZWwgTGFiZWw8L2VtPicuDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCVN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWwgY3JlYXRlU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxMYWJlbCgpOw0KKw0KKwkvKioNCisJICogUmV0dXJucyBhIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5Qb3B1bGF0aW9uIE1vZGVsIExhYmVsIFZhbHVlPC9lbT4nLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHJldHVybiBhIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5Qb3B1bGF0aW9uIE1vZGVsIExhYmVsIFZhbHVlPC9lbT4nLg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlQb3B1bGF0aW9uTW9kZWxMYWJlbFZhbHVlIGNyZWF0ZVBvcHVsYXRpb25Nb2RlbExhYmVsVmFsdWUoKTsNCisNCisJLyoqDQorCSAqIFJldHVybnMgYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+UG9wdWxhdGlvbiBNb2RlbCBMYWJlbCBWYWx1ZTwvZW0+Jy4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEByZXR1cm4gYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+UG9wdWxhdGlvbiBNb2RlbCBMYWJlbCBWYWx1ZTwvZW0+Jy4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxMYWJlbFZhbHVlIGNyZWF0ZVN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWxWYWx1ZSgpOw0KKw0KKwkvKioNCisJICogUmV0dXJucyBhIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5TdG9jaGFzdGljIFN0YW5kYXJkIFBvcHVsYXRpb24gTW9kZWw8L2VtPicuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcmV0dXJuIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPlN0b2NoYXN0aWMgU3RhbmRhcmQgUG9wdWxhdGlvbiBNb2RlbDwvZW0+Jy4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJU3RvY2hhc3RpY1N0YW5kYXJkUG9wdWxhdGlvbk1vZGVsIGNyZWF0ZVN0b2NoYXN0aWNTdGFuZGFyZFBvcHVsYXRpb25Nb2RlbCgpOw0KKw0KKwkvKioNCisJICogUmV0dXJucyBhIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5EZW1vZ3JhcGhpYyBQb3B1bGF0aW9uIE1vZGVsPC9lbT4nLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHJldHVybiBhIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5EZW1vZ3JhcGhpYyBQb3B1bGF0aW9uIE1vZGVsPC9lbT4nLg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlEZW1vZ3JhcGhpY1BvcHVsYXRpb25Nb2RlbCBjcmVhdGVEZW1vZ3JhcGhpY1BvcHVsYXRpb25Nb2RlbCgpOw0KKw0KKwkvKioNCisJICogUmV0dXJucyBhIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5Qb3B1bGF0aW9uIEdyb3VwPC9lbT4nLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHJldHVybiBhIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5Qb3B1bGF0aW9uIEdyb3VwPC9lbT4nLg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlQb3B1bGF0aW9uR3JvdXAgY3JlYXRlUG9wdWxhdGlvbkdyb3VwKCk7DQorDQorCS8qKg0KKwkgKiBSZXR1cm5zIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPlBvcHVsYXRpb24gSW5pdGlhbGl6ZXI8L2VtPicuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcmV0dXJuIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPlBvcHVsYXRpb24gSW5pdGlhbGl6ZXI8L2VtPicuDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCVN0YW5kYXJkUG9wdWxhdGlvbkluaXRpYWxpemVyIGNyZWF0ZVN0YW5kYXJkUG9wdWxhdGlvbkluaXRpYWxpemVyKCk7DQorDQorCS8qKg0KKwkgKiBSZXR1cm5zIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPlNlYXNvbmFsIFBvcHVsYXRpb24gTW9kZWw8L2VtPicuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcmV0dXJuIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPlNlYXNvbmFsIFBvcHVsYXRpb24gTW9kZWw8L2VtPicuDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCVNlYXNvbmFsUG9wdWxhdGlvbk1vZGVsIGNyZWF0ZVNlYXNvbmFsUG9wdWxhdGlvbk1vZGVsKCk7DQorDQorCS8qKg0KKwkgKiBSZXR1cm5zIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPllldGkgUG9wdWxhdGlvbiBJbml0aWFsaXplcjwvZW0+Jy4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEByZXR1cm4gYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+WWV0aSBQb3B1bGF0aW9uIEluaXRpYWxpemVyPC9lbT4nLg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlZZXRpUG9wdWxhdGlvbkluaXRpYWxpemVyIGNyZWF0ZVlldGlQb3B1bGF0aW9uSW5pdGlhbGl6ZXIoKTsNCisNCisJLyoqDQorCSAqIFJldHVybnMgYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+TW9zcXVpdG8gUG9wdWxhdGlvbiBNb2RlbDwvZW0+Jy4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEByZXR1cm4gYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+TW9zcXVpdG8gUG9wdWxhdGlvbiBNb2RlbDwvZW0+Jy4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJTW9zcXVpdG9Qb3B1bGF0aW9uTW9kZWwgY3JlYXRlTW9zcXVpdG9Qb3B1bGF0aW9uTW9kZWwoKTsNCisNCisJLyoqDQorCSAqIFJldHVybnMgYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+QWdpbmcgUG9wdWxhdGlvbiBNb2RlbDwvZW0+Jy4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEByZXR1cm4gYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+QWdpbmcgUG9wdWxhdGlvbiBNb2RlbDwvZW0+Jy4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJQWdpbmdQb3B1bGF0aW9uTW9kZWwgY3JlYXRlQWdpbmdQb3B1bGF0aW9uTW9kZWwoKTsNCisNCisJLyoqDQorCSAqIFJldHVybnMgYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+QWdlIEdyb3VwPC9lbT4nLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHJldHVybiBhIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5BZ2UgR3JvdXA8L2VtPicuDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCUFnZUdyb3VwIGNyZWF0ZUFnZUdyb3VwKCk7DQorDQorCS8qKg0KKwkgKiBSZXR1cm5zIHRoZSBwYWNrYWdlIHN1cHBvcnRlZCBieSB0aGlzIGZhY3RvcnkuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcmV0dXJuIHRoZSBwYWNrYWdlIHN1cHBvcnRlZCBieSB0aGlzIGZhY3RvcnkuDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCVN0YW5kYXJkUGFja2FnZSBnZXRTdGFuZGFyZFBhY2thZ2UoKTsNCisNCit9IC8vU3RhbmRhcmRGYWN0b3J5DQpkaWZmIC0tZ2l0IGEvbW9kZWxzL3BvcHVsYXRpb25zL29yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9wb3B1bGF0aW9ubW9kZWxzL3N0YW5kYXJkL1N0YW5kYXJkUGFja2FnZS5qYXZhIGIvbW9kZWxzL3BvcHVsYXRpb25zL29yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9wb3B1bGF0aW9ubW9kZWxzL3N0YW5kYXJkL1N0YW5kYXJkUGFja2FnZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk5MTBkZjkKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvcG9wdWxhdGlvbnMvb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3BvcHVsYXRpb25tb2RlbHMvc3RhbmRhcmQvU3RhbmRhcmRQYWNrYWdlLmphdmEKQEAgLTAsMCArMSwzMTU4IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZDsNCisNCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyAqIENvcHlyaWdodCAoYykgMjAwOSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4NCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzDQorICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wDQorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQNCisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbA0KKyAqDQorICogQ29udHJpYnV0b3JzOg0KKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24NCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCisNCisNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVBdHRyaWJ1dGU7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FUGFja2FnZTsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVSZWZlcmVuY2U7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5HcmFwaFBhY2thZ2U7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5Nb2RlbFBhY2thZ2U7DQorDQorLyoqDQorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisgKiBUaGUgPGI+UGFja2FnZTwvYj4gZm9yIHRoZSBtb2RlbC4NCisgKiBJdCBjb250YWlucyBhY2Nlc3NvcnMgZm9yIHRoZSBtZXRhIG9iamVjdHMgdG8gcmVwcmVzZW50DQorICogPHVsPg0KKyAqICAgPGxpPmVhY2ggY2xhc3MsPC9saT4NCisgKiAgIDxsaT5lYWNoIGZlYXR1cmUgb2YgZWFjaCBjbGFzcyw8L2xpPg0KKyAqICAgPGxpPmVhY2ggZW51bSw8L2xpPg0KKyAqICAgPGxpPmFuZCBlYWNoIGRhdGEgdHlwZTwvbGk+DQorICogPC91bD4NCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZEZhY3RvcnkNCisgKiBAbW9kZWwga2luZD0icGFja2FnZSINCisgKiBAZ2VuZXJhdGVkDQorICovDQorcHVibGljIGludGVyZmFjZSBTdGFuZGFyZFBhY2thZ2UgZXh0ZW5kcyBFUGFja2FnZSB7DQorCS8qKg0KKwkgKiBUaGUgcGFja2FnZSBuYW1lLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJU3RyaW5nIGVOQU1FID0gInN0YW5kYXJkIjsNCisNCisJLyoqDQorCSAqIFRoZSBwYWNrYWdlIG5hbWVzcGFjZSBVUkkuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlTdHJpbmcgZU5TX1VSSSA9ICJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vcG9wdWxhdGlvbm1vZGVscy9zdGFuZGFyZCI7DQorDQorCS8qKg0KKwkgKiBUaGUgcGFja2FnZSBuYW1lc3BhY2UgbmFtZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCVN0cmluZyBlTlNfUFJFRklYID0gIm9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZCI7DQorDQorCS8qKg0KKwkgKiBUaGUgc2luZ2xldG9uIGluc3RhbmNlIG9mIHRoZSBwYWNrYWdlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJU3RhbmRhcmRQYWNrYWdlIGVJTlNUQU5DRSA9IG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5pbXBsLlN0YW5kYXJkUGFja2FnZUltcGwuaW5pdCgpOw0KKw0KKwkvKioNCisJICogVGhlIG1ldGEgb2JqZWN0IGlkIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuaW1wbC5Qb3B1bGF0aW9uTW9kZWxJbXBsIDxlbT5Qb3B1bGF0aW9uIE1vZGVsPC9lbT59JyBjbGFzcy4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLmltcGwuUG9wdWxhdGlvbk1vZGVsSW1wbA0KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5pbXBsLlN0YW5kYXJkUGFja2FnZUltcGwjZ2V0UG9wdWxhdGlvbk1vZGVsKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJaW50IFBPUFVMQVRJT05fTU9ERUwgPSAwOw0KKw0KKwkvKioNCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlVSSTwvYj48L2VtPicgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJaW50IFBPUFVMQVRJT05fTU9ERUxfX1VSSSA9IE1vZGVsUGFja2FnZS5JTlRFR1JBVElPTl9ERUNPUkFUT1JfX1VSSTsNCisNCisJLyoqDQorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5UeXBlIFVSSTwvYj48L2VtPicgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJaW50IFBPUFVMQVRJT05fTU9ERUxfX1RZUEVfVVJJID0gTW9kZWxQYWNrYWdlLklOVEVHUkFUSU9OX0RFQ09SQVRPUl9fVFlQRV9VUkk7DQorDQorCS8qKg0KKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RHVibGluIENvcmU8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCWludCBQT1BVTEFUSU9OX01PREVMX19EVUJMSU5fQ09SRSA9IE1vZGVsUGFja2FnZS5JTlRFR1JBVElPTl9ERUNPUkFUT1JfX0RVQkxJTl9DT1JFOw0KKw0KKwkvKioNCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkxhYmVscyBUbyBVcGRhdGU8L2I+PC9lbT4nIHJlZmVyZW5jZSBsaXN0Lg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJaW50IFBPUFVMQVRJT05fTU9ERUxfX0xBQkVMU19UT19VUERBVEUgPSBNb2RlbFBhY2thZ2UuSU5URUdSQVRJT05fREVDT1JBVE9SX19MQUJFTFNfVE9fVVBEQVRFOw0KKw0KKwkvKioNCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkdyYXBoPC9iPjwvZW0+JyBjb250YWluZXIgcmVmZXJlbmNlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJaW50IFBPUFVMQVRJT05fTU9ERUxfX0dSQVBIID0gTW9kZWxQYWNrYWdlLklOVEVHUkFUSU9OX0RFQ09SQVRPUl9fR1JBUEg7DQorDQorCS8qKg0KKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RW5hYmxlZDwvYj48L2VtPicgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJaW50IFBPUFVMQVRJT05fTU9ERUxfX0VOQUJMRUQgPSBNb2RlbFBhY2thZ2UuSU5URUdSQVRJT05fREVDT1JBVE9SX19FTkFCTEVEOw0KKw0KKwkvKioNCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkdyYXBoIERlY29yYXRlZDwvYj48L2VtPicgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJaW50IFBPUFVMQVRJT05fTU9ERUxfX0dSQVBIX0RFQ09SQVRFRCA9IE1vZGVsUGFja2FnZS5JTlRFR1JBVElPTl9ERUNPUkFUT1JfX0dSQVBIX0RFQ09SQVRFRDsNCisNCisJLyoqDQorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5Qcm9ncmVzczwvYj48L2VtPicgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJaW50IFBPUFVMQVRJT05fTU9ERUxfX1BST0dSRVNTID0gTW9kZWxQYWNrYWdlLklOVEVHUkFUSU9OX0RFQ09SQVRPUl9fUFJPR1JFU1M7DQorDQorCS8qKg0KKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+UG9wdWxhdGlvbiBJZGVudGlmaWVyPC9iPjwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqIEBvcmRlcmVkDQorCSAqLw0KKwlpbnQgUE9QVUxBVElPTl9NT0RFTF9fUE9QVUxBVElPTl9JREVOVElGSUVSID0gTW9kZWxQYWNrYWdlLklOVEVHUkFUSU9OX0RFQ09SQVRPUl9GRUFUVVJFX0NPVU5UICsgMDsNCisNCisJLyoqDQorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5OYW1lPC9iPjwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqIEBvcmRlcmVkDQorCSAqLw0KKwlpbnQgUE9QVUxBVElPTl9NT0RFTF9fTkFNRSA9IE1vZGVsUGFja2FnZS5JTlRFR1JBVElPTl9ERUNPUkFUT1JfRkVBVFVSRV9DT1VOVCArIDE7DQorDQorCS8qKg0KKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VGFyZ2V0IElTTyBLZXk8L2I+PC9lbT4nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCWludCBQT1BVTEFUSU9OX01PREVMX19UQVJHRVRfSVNPX0tFWSA9IE1vZGVsUGFja2FnZS5JTlRFR1JBVElPTl9ERUNPUkFUT1JfRkVBVFVSRV9DT1VOVCArIDI7DQorDQorCS8qKg0KKwkgKiBUaGUgbnVtYmVyIG9mIHN0cnVjdHVyYWwgZmVhdHVyZXMgb2YgdGhlICc8ZW0+UG9wdWxhdGlvbiBNb2RlbDwvZW0+JyBjbGFzcy4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCWludCBQT1BVTEFUSU9OX01PREVMX0ZFQVRVUkVfQ09VTlQgPSBNb2RlbFBhY2thZ2UuSU5URUdSQVRJT05fREVDT1JBVE9SX0ZFQVRVUkVfQ09VTlQgKyAzOw0KKw0KKwkvKioNCisJICogVGhlIG1ldGEgb2JqZWN0IGlkIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuaW1wbC5TdGFuZGFyZFBvcHVsYXRpb25Nb2RlbEltcGwgPGVtPlBvcHVsYXRpb24gTW9kZWw8L2VtPn0nIGNsYXNzLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuaW1wbC5TdGFuZGFyZFBvcHVsYXRpb25Nb2RlbEltcGwNCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuaW1wbC5TdGFuZGFyZFBhY2thZ2VJbXBsI2dldFN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJaW50IFNUQU5EQVJEX1BPUFVMQVRJT05fTU9ERUwgPSAxOw0KKw0KKwkvKioNCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlVSSTwvYj48L2VtPicgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJaW50IFNUQU5EQVJEX1BPUFVMQVRJT05fTU9ERUxfX1VSSSA9IFBPUFVMQVRJT05fTU9ERUxfX1VSSTsNCisNCisJLyoqDQorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5UeXBlIFVSSTwvYj48L2VtPicgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJaW50IFNUQU5EQVJEX1BPUFVMQVRJT05fTU9ERUxfX1RZUEVfVVJJID0gUE9QVUxBVElPTl9NT0RFTF9fVFlQRV9VUkk7DQorDQorCS8qKg0KKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RHVibGluIENvcmU8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCWludCBTVEFOREFSRF9QT1BVTEFUSU9OX01PREVMX19EVUJMSU5fQ09SRSA9IFBPUFVMQVRJT05fTU9ERUxfX0RVQkxJTl9DT1JFOw0KKw0KKwkvKioNCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkxhYmVscyBUbyBVcGRhdGU8L2I+PC9lbT4nIHJlZmVyZW5jZSBsaXN0Lg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJaW50IFNUQU5EQVJEX1BPUFVMQVRJT05fTU9ERUxfX0xBQkVMU19UT19VUERBVEUgPSBQT1BVTEFUSU9OX01PREVMX19MQUJFTFNfVE9fVVBEQVRFOw0KKw0KKwkvKioNCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkdyYXBoPC9iPjwvZW0+JyBjb250YWluZXIgcmVmZXJlbmNlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJaW50IFNUQU5EQVJEX1BPUFVMQVRJT05fTU9ERUxfX0dSQVBIID0gUE9QVUxBVElPTl9NT0RFTF9fR1JBUEg7DQorDQorCS8qKg0KKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RW5hYmxlZDwvYj48L2VtPicgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJaW50IFNUQU5EQVJEX1BPUFVMQVRJT05fTU9ERUxfX0VOQUJMRUQgPSBQT1BVTEFUSU9OX01PREVMX19FTkFCTEVEOw0KKw0KKwkvKioNCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkdyYXBoIERlY29yYXRlZDwvYj48L2VtPicgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJaW50IFNUQU5EQVJEX1BPUFVMQVRJT05fTU9ERUxfX0dSQVBIX0RFQ09SQVRFRCA9IFBPUFVMQVRJT05fTU9ERUxfX0dSQVBIX0RFQ09SQVRFRDsNCisNCisJLyoqDQorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5Qcm9ncmVzczwvYj48L2VtPicgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJaW50IFNUQU5EQVJEX1BPUFVMQVRJT05fTU9ERUxfX1BST0dSRVNTID0gUE9QVUxBVElPTl9NT0RFTF9fUFJPR1JFU1M7DQorDQorCS8qKg0KKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+UG9wdWxhdGlvbiBJZGVudGlmaWVyPC9iPjwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqIEBvcmRlcmVkDQorCSAqLw0KKwlpbnQgU1RBTkRBUkRfUE9QVUxBVElPTl9NT0RFTF9fUE9QVUxBVElPTl9JREVOVElGSUVSID0gUE9QVUxBVElPTl9NT0RFTF9fUE9QVUxBVElPTl9JREVOVElGSUVSOw0KKw0KKwkvKioNCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPk5hbWU8L2I+PC9lbT4nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCWludCBTVEFOREFSRF9QT1BVTEFUSU9OX01PREVMX19OQU1FID0gUE9QVUxBVElPTl9NT0RFTF9fTkFNRTsNCisNCisJLyoqDQorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5UYXJnZXQgSVNPIEtleTwvYj48L2VtPicgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJaW50IFNUQU5EQVJEX1BPUFVMQVRJT05fTU9ERUxfX1RBUkdFVF9JU09fS0VZID0gUE9QVUxBVElPTl9NT0RFTF9fVEFSR0VUX0lTT19LRVk7DQorDQorCS8qKg0KKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+QmlydGggUmF0ZTwvYj48L2VtPicgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJaW50IFNUQU5EQVJEX1BPUFVMQVRJT05fTU9ERUxfX0JJUlRIX1JBVEUgPSBQT1BVTEFUSU9OX01PREVMX0ZFQVRVUkVfQ09VTlQgKyAwOw0KKw0KKwkvKioNCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkRlYXRoIFJhdGU8L2I+PC9lbT4nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCWludCBTVEFOREFSRF9QT1BVTEFUSU9OX01PREVMX19ERUFUSF9SQVRFID0gUE9QVUxBVElPTl9NT0RFTF9GRUFUVVJFX0NPVU5UICsgMTsNCisNCisJLyoqDQorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5UaW1lIFBlcmlvZDwvYj48L2VtPicgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJaW50IFNUQU5EQVJEX1BPUFVMQVRJT05fTU9ERUxfX1RJTUVfUEVSSU9EID0gUE9QVUxBVElPTl9NT0RFTF9GRUFUVVJFX0NPVU5UICsgMjsNCisNCisJLyoqDQorCSAqIFRoZSBudW1iZXIgb2Ygc3RydWN0dXJhbCBmZWF0dXJlcyBvZiB0aGUgJzxlbT5Qb3B1bGF0aW9uIE1vZGVsPC9lbT4nIGNsYXNzLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJaW50IFNUQU5EQVJEX1BPUFVMQVRJT05fTU9ERUxfRkVBVFVSRV9DT1VOVCA9IFBPUFVMQVRJT05fTU9ERUxfRkVBVFVSRV9DT1VOVCArIDM7DQorDQorDQorCS8qKg0KKwkgKiBUaGUgbWV0YSBvYmplY3QgaWQgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5pbXBsLlBvcHVsYXRpb25Nb2RlbExhYmVsSW1wbCA8ZW0+UG9wdWxhdGlvbiBNb2RlbCBMYWJlbDwvZW0+fScgY2xhc3MuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5pbXBsLlBvcHVsYXRpb25Nb2RlbExhYmVsSW1wbA0KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5pbXBsLlN0YW5kYXJkUGFja2FnZUltcGwjZ2V0UG9wdWxhdGlvbk1vZGVsTGFiZWwoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlpbnQgUE9QVUxBVElPTl9NT0RFTF9MQUJFTCA9IDI7DQorDQorCS8qKg0KKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VVJJPC9iPjwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqIEBvcmRlcmVkDQorCSAqLw0KKwlpbnQgUE9QVUxBVElPTl9NT0RFTF9MQUJFTF9fVVJJID0gR3JhcGhQYWNrYWdlLklOVEVHUkFUSU9OX0xBQkVMX19VUkk7DQorDQorCS8qKg0KKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VHlwZSBVUkk8L2I+PC9lbT4nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCWludCBQT1BVTEFUSU9OX01PREVMX0xBQkVMX19UWVBFX1VSSSA9IEdyYXBoUGFja2FnZS5JTlRFR1JBVElPTl9MQUJFTF9fVFlQRV9VUkk7DQorDQorCS8qKg0KKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RHVibGluIENvcmU8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCWludCBQT1BVTEFUSU9OX01PREVMX0xBQkVMX19EVUJMSU5fQ09SRSA9IEdyYXBoUGFja2FnZS5JTlRFR1JBVElPTl9MQUJFTF9fRFVCTElOX0NPUkU7DQorDQorCS8qKg0KKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VVJJIE9mIElkZW50aWZpYWJsZSBUbyBCZSBMYWJlbGVkPC9iPjwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqIEBvcmRlcmVkDQorCSAqLw0KKwlpbnQgUE9QVUxBVElPTl9NT0RFTF9MQUJFTF9fVVJJX09GX0lERU5USUZJQUJMRV9UT19CRV9MQUJFTEVEID0gR3JhcGhQYWNrYWdlLklOVEVHUkFUSU9OX0xBQkVMX19VUklfT0ZfSURFTlRJRklBQkxFX1RPX0JFX0xBQkVMRUQ7DQorDQorCS8qKg0KKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+Q3VycmVudCBWYWx1ZTwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJaW50IFBPUFVMQVRJT05fTU9ERUxfTEFCRUxfX0NVUlJFTlRfVkFMVUUgPSBHcmFwaFBhY2thZ2UuSU5URUdSQVRJT05fTEFCRUxfX0NVUlJFTlRfVkFMVUU7DQorDQorCS8qKg0KKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+SWRlbnRpZmlhYmxlPC9iPjwvZW0+JyByZWZlcmVuY2UuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqIEBvcmRlcmVkDQorCSAqLw0KKwlpbnQgUE9QVUxBVElPTl9NT0RFTF9MQUJFTF9fSURFTlRJRklBQkxFID0gR3JhcGhQYWNrYWdlLklOVEVHUkFUSU9OX0xBQkVMX19JREVOVElGSUFCTEU7DQorDQorCS8qKg0KKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+TmV4dCBWYWx1ZSBWYWxpZDwvYj48L2VtPicgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJaW50IFBPUFVMQVRJT05fTU9ERUxfTEFCRUxfX05FWFRfVkFMVUVfVkFMSUQgPSBHcmFwaFBhY2thZ2UuSU5URUdSQVRJT05fTEFCRUxfX05FWFRfVkFMVUVfVkFMSUQ7DQorDQorCS8qKg0KKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+TmV4dCBWYWx1ZTwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJaW50IFBPUFVMQVRJT05fTU9ERUxfTEFCRUxfX05FWFRfVkFMVUUgPSBHcmFwaFBhY2thZ2UuSU5URUdSQVRJT05fTEFCRUxfX05FWFRfVkFMVUU7DQorDQorCS8qKg0KKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RGVjb3JhdG9yPC9iPjwvZW0+JyByZWZlcmVuY2UuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqIEBvcmRlcmVkDQorCSAqLw0KKwlpbnQgUE9QVUxBVElPTl9NT0RFTF9MQUJFTF9fREVDT1JBVE9SID0gR3JhcGhQYWNrYWdlLklOVEVHUkFUSU9OX0xBQkVMX19ERUNPUkFUT1I7DQorDQorCS8qKg0KKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+Tm9kZTwvYj48L2VtPicgcmVmZXJlbmNlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJaW50IFBPUFVMQVRJT05fTU9ERUxfTEFCRUxfX05PREUgPSBHcmFwaFBhY2thZ2UuSU5URUdSQVRJT05fTEFCRUxfX05PREU7DQorDQorCS8qKg0KKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RGVsdGEgVmFsdWU8L2I+PC9lbT4nIHJlZmVyZW5jZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCWludCBQT1BVTEFUSU9OX01PREVMX0xBQkVMX19ERUxUQV9WQUxVRSA9IEdyYXBoUGFja2FnZS5JTlRFR1JBVElPTl9MQUJFTF9fREVMVEFfVkFMVUU7DQorDQorCS8qKg0KKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VGVtcCBWYWx1ZTwvYj48L2VtPicgcmVmZXJlbmNlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJaW50IFBPUFVMQVRJT05fTU9ERUxfTEFCRUxfX1RFTVBfVkFMVUUgPSBHcmFwaFBhY2thZ2UuSU5URUdSQVRJT05fTEFCRUxfX1RFTVBfVkFMVUU7DQorDQorCS8qKg0KKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+UHJvYmUgVmFsdWU8L2I+PC9lbT4nIHJlZmVyZW5jZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCWludCBQT1BVTEFUSU9OX01PREVMX0xBQkVMX19QUk9CRV9WQUxVRSA9IEdyYXBoUGFja2FnZS5JTlRFR1JBVElPTl9MQUJFTF9fUFJPQkVfVkFMVUU7DQorDQorCS8qKg0KKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RXJyb3IgU2NhbGU8L2I+PC9lbT4nIHJlZmVyZW5jZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCWludCBQT1BVTEFUSU9OX01PREVMX0xBQkVMX19FUlJPUl9TQ0FMRSA9IEdyYXBoUGFja2FnZS5JTlRFR1JBVElPTl9MQUJFTF9fRVJST1JfU0NBTEU7DQorDQorCS8qKg0KKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+SWRlbnRpZmllcjwvYj48L2VtPicgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJaW50IFBPUFVMQVRJT05fTU9ERUxfTEFCRUxfX0lERU5USUZJRVIgPSBHcmFwaFBhY2thZ2UuSU5URUdSQVRJT05fTEFCRUxfX0lERU5USUZJRVI7DQorDQorCS8qKg0KKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+UG9wdWxhdGlvbiBMYWJlbDwvYj48L2VtPicgcmVmZXJlbmNlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJaW50IFBPUFVMQVRJT05fTU9ERUxfTEFCRUxfX1BPUFVMQVRJT05fTEFCRUwgPSBHcmFwaFBhY2thZ2UuSU5URUdSQVRJT05fTEFCRUxfRkVBVFVSRV9DT1VOVCArIDA7DQorDQorCS8qKg0KKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+UG9wdWxhdGlvbiBJZGVudGlmaWVyPC9iPjwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqIEBvcmRlcmVkDQorCSAqLw0KKwlpbnQgUE9QVUxBVElPTl9NT0RFTF9MQUJFTF9fUE9QVUxBVElPTl9JREVOVElGSUVSID0gR3JhcGhQYWNrYWdlLklOVEVHUkFUSU9OX0xBQkVMX0ZFQVRVUkVfQ09VTlQgKyAxOw0KKw0KKwkvKioNCisJICogVGhlIG51bWJlciBvZiBzdHJ1Y3R1cmFsIGZlYXR1cmVzIG9mIHRoZSAnPGVtPlBvcHVsYXRpb24gTW9kZWwgTGFiZWw8L2VtPicgY2xhc3MuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqIEBvcmRlcmVkDQorCSAqLw0KKwlpbnQgUE9QVUxBVElPTl9NT0RFTF9MQUJFTF9GRUFUVVJFX0NPVU5UID0gR3JhcGhQYWNrYWdlLklOVEVHUkFUSU9OX0xBQkVMX0ZFQVRVUkVfQ09VTlQgKyAyOw0KKw0KKwkvKioNCisJICogVGhlIG1ldGEgb2JqZWN0IGlkIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuaW1wbC5TdGFuZGFyZFBvcHVsYXRpb25Nb2RlbExhYmVsSW1wbCA8ZW0+UG9wdWxhdGlvbiBNb2RlbCBMYWJlbDwvZW0+fScgY2xhc3MuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5pbXBsLlN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWxJbXBsDQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLmltcGwuU3RhbmRhcmRQYWNrYWdlSW1wbCNnZXRTdGFuZGFyZFBvcHVsYXRpb25Nb2RlbExhYmVsKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJaW50IFNUQU5EQVJEX1BPUFVMQVRJT05fTU9ERUxfTEFCRUwgPSAzOw0KKw0KKwkvKioNCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlVSSTwvYj48L2VtPicgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJaW50IFNUQU5EQVJEX1BPUFVMQVRJT05fTU9ERUxfTEFCRUxfX1VSSSA9IFBPUFVMQVRJT05fTU9ERUxfTEFCRUxfX1VSSTsNCisNCisJLyoqDQorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5UeXBlIFVSSTwvYj48L2VtPicgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJaW50IFNUQU5EQVJEX1BPUFVMQVRJT05fTU9ERUxfTEFCRUxfX1RZUEVfVVJJID0gUE9QVUxBVElPTl9NT0RFTF9MQUJFTF9fVFlQRV9VUkk7DQorDQorCS8qKg0KKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RHVibGluIENvcmU8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCWludCBTVEFOREFSRF9QT1BVTEFUSU9OX01PREVMX0xBQkVMX19EVUJMSU5fQ09SRSA9IFBPUFVMQVRJT05fTU9ERUxfTEFCRUxfX0RVQkxJTl9DT1JFOw0KKw0KKwkvKioNCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlVSSSBPZiBJZGVudGlmaWFibGUgVG8gQmUgTGFiZWxlZDwvYj48L2VtPicgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJaW50IFNUQU5EQVJEX1BPUFVMQVRJT05fTU9ERUxfTEFCRUxfX1VSSV9PRl9JREVOVElGSUFCTEVfVE9fQkVfTEFCRUxFRCA9IFBPUFVMQVRJT05fTU9ERUxfTEFCRUxfX1VSSV9PRl9JREVOVElGSUFCTEVfVE9fQkVfTEFCRUxFRDsNCisNCisJLyoqDQorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5DdXJyZW50IFZhbHVlPC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqIEBvcmRlcmVkDQorCSAqLw0KKwlpbnQgU1RBTkRBUkRfUE9QVUxBVElPTl9NT0RFTF9MQUJFTF9fQ1VSUkVOVF9WQUxVRSA9IFBPUFVMQVRJT05fTU9ERUxfTEFCRUxfX0NVUlJFTlRfVkFMVUU7DQorDQorCS8qKg0KKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+SWRlbnRpZmlhYmxlPC9iPjwvZW0+JyByZWZlcmVuY2UuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqIEBvcmRlcmVkDQorCSAqLw0KKwlpbnQgU1RBTkRBUkRfUE9QVUxBVElPTl9NT0RFTF9MQUJFTF9fSURFTlRJRklBQkxFID0gUE9QVUxBVElPTl9NT0RFTF9MQUJFTF9fSURFTlRJRklBQkxFOw0KKw0KKwkvKioNCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPk5leHQgVmFsdWUgVmFsaWQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCWludCBTVEFOREFSRF9QT1BVTEFUSU9OX01PREVMX0xBQkVMX19ORVhUX1ZBTFVFX1ZBTElEID0gUE9QVUxBVElPTl9NT0RFTF9MQUJFTF9fTkVYVF9WQUxVRV9WQUxJRDsNCisNCisJLyoqDQorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5OZXh0IFZhbHVlPC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqIEBvcmRlcmVkDQorCSAqLw0KKwlpbnQgU1RBTkRBUkRfUE9QVUxBVElPTl9NT0RFTF9MQUJFTF9fTkVYVF9WQUxVRSA9IFBPUFVMQVRJT05fTU9ERUxfTEFCRUxfX05FWFRfVkFMVUU7DQorDQorCS8qKg0KKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RGVjb3JhdG9yPC9iPjwvZW0+JyByZWZlcmVuY2UuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqIEBvcmRlcmVkDQorCSAqLw0KKwlpbnQgU1RBTkRBUkRfUE9QVUxBVElPTl9NT0RFTF9MQUJFTF9fREVDT1JBVE9SID0gUE9QVUxBVElPTl9NT0RFTF9MQUJFTF9fREVDT1JBVE9SOw0KKw0KKwkvKioNCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPk5vZGU8L2I+PC9lbT4nIHJlZmVyZW5jZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCWludCBTVEFOREFSRF9QT1BVTEFUSU9OX01PREVMX0xBQkVMX19OT0RFID0gUE9QVUxBVElPTl9NT0RFTF9MQUJFTF9fTk9ERTsNCisNCisJLyoqDQorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5EZWx0YSBWYWx1ZTwvYj48L2VtPicgcmVmZXJlbmNlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJaW50IFNUQU5EQVJEX1BPUFVMQVRJT05fTU9ERUxfTEFCRUxfX0RFTFRBX1ZBTFVFID0gUE9QVUxBVElPTl9NT0RFTF9MQUJFTF9fREVMVEFfVkFMVUU7DQorDQorCS8qKg0KKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VGVtcCBWYWx1ZTwvYj48L2VtPicgcmVmZXJlbmNlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJaW50IFNUQU5EQVJEX1BPUFVMQVRJT05fTU9ERUxfTEFCRUxfX1RFTVBfVkFMVUUgPSBQT1BVTEFUSU9OX01PREVMX0xBQkVMX19URU1QX1ZBTFVFOw0KKw0KKwkvKioNCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlByb2JlIFZhbHVlPC9iPjwvZW0+JyByZWZlcmVuY2UuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqIEBvcmRlcmVkDQorCSAqLw0KKwlpbnQgU1RBTkRBUkRfUE9QVUxBVElPTl9NT0RFTF9MQUJFTF9fUFJPQkVfVkFMVUUgPSBQT1BVTEFUSU9OX01PREVMX0xBQkVMX19QUk9CRV9WQUxVRTsNCisNCisJLyoqDQorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5FcnJvciBTY2FsZTwvYj48L2VtPicgcmVmZXJlbmNlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJaW50IFNUQU5EQVJEX1BPUFVMQVRJT05fTU9ERUxfTEFCRUxfX0VSUk9SX1NDQUxFID0gUE9QVUxBVElPTl9NT0RFTF9MQUJFTF9fRVJST1JfU0NBTEU7DQorDQorCS8qKg0KKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+SWRlbnRpZmllcjwvYj48L2VtPicgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJaW50IFNUQU5EQVJEX1BPUFVMQVRJT05fTU9ERUxfTEFCRUxfX0lERU5USUZJRVIgPSBQT1BVTEFUSU9OX01PREVMX0xBQkVMX19JREVOVElGSUVSOw0KKw0KKwkvKioNCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlBvcHVsYXRpb24gTGFiZWw8L2I+PC9lbT4nIHJlZmVyZW5jZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCWludCBTVEFOREFSRF9QT1BVTEFUSU9OX01PREVMX0xBQkVMX19QT1BVTEFUSU9OX0xBQkVMID0gUE9QVUxBVElPTl9NT0RFTF9MQUJFTF9fUE9QVUxBVElPTl9MQUJFTDsNCisNCisJLyoqDQorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5Qb3B1bGF0aW9uIElkZW50aWZpZXI8L2I+PC9lbT4nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCWludCBTVEFOREFSRF9QT1BVTEFUSU9OX01PREVMX0xBQkVMX19QT1BVTEFUSU9OX0lERU5USUZJRVIgPSBQT1BVTEFUSU9OX01PREVMX0xBQkVMX19QT1BVTEFUSU9OX0lERU5USUZJRVI7DQorDQorCS8qKg0KKwkgKiBUaGUgbnVtYmVyIG9mIHN0cnVjdHVyYWwgZmVhdHVyZXMgb2YgdGhlICc8ZW0+UG9wdWxhdGlvbiBNb2RlbCBMYWJlbDwvZW0+JyBjbGFzcy4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCWludCBTVEFOREFSRF9QT1BVTEFUSU9OX01PREVMX0xBQkVMX0ZFQVRVUkVfQ09VTlQgPSBQT1BVTEFUSU9OX01PREVMX0xBQkVMX0ZFQVRVUkVfQ09VTlQgKyAwOw0KKw0KKwkvKioNCisJICogVGhlIG1ldGEgb2JqZWN0IGlkIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuaW1wbC5Qb3B1bGF0aW9uTW9kZWxMYWJlbFZhbHVlSW1wbCA8ZW0+UG9wdWxhdGlvbiBNb2RlbCBMYWJlbCBWYWx1ZTwvZW0+fScgY2xhc3MuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5pbXBsLlBvcHVsYXRpb25Nb2RlbExhYmVsVmFsdWVJbXBsDQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLmltcGwuU3RhbmRhcmRQYWNrYWdlSW1wbCNnZXRQb3B1bGF0aW9uTW9kZWxMYWJlbFZhbHVlKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJaW50IFBPUFVMQVRJT05fTU9ERUxfTEFCRUxfVkFMVUUgPSA0Ow0KKw0KKwkvKioNCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkFycml2YWxzPC9iPjwvZW0+JyByZWZlcmVuY2UgbGlzdC4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCWludCBQT1BVTEFUSU9OX01PREVMX0xBQkVMX1ZBTFVFX19BUlJJVkFMUyA9IEdyYXBoUGFja2FnZS5JTlRFR1JBVElPTl9MQUJFTF9WQUxVRV9fQVJSSVZBTFM7DQorDQorCS8qKg0KKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RGVwYXJ0dXJlczwvYj48L2VtPicgcmVmZXJlbmNlIGxpc3QuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqIEBvcmRlcmVkDQorCSAqLw0KKwlpbnQgUE9QVUxBVElPTl9NT0RFTF9MQUJFTF9WQUxVRV9fREVQQVJUVVJFUyA9IEdyYXBoUGFja2FnZS5JTlRFR1JBVElPTl9MQUJFTF9WQUxVRV9fREVQQVJUVVJFUzsNCisNCisJLyoqDQorCSAqIFRoZSBudW1iZXIgb2Ygc3RydWN0dXJhbCBmZWF0dXJlcyBvZiB0aGUgJzxlbT5Qb3B1bGF0aW9uIE1vZGVsIExhYmVsIFZhbHVlPC9lbT4nIGNsYXNzLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJaW50IFBPUFVMQVRJT05fTU9ERUxfTEFCRUxfVkFMVUVfRkVBVFVSRV9DT1VOVCA9IEdyYXBoUGFja2FnZS5JTlRFR1JBVElPTl9MQUJFTF9WQUxVRV9GRUFUVVJFX0NPVU5UICsgMDsNCisNCisJLyoqDQorCSAqIFRoZSBtZXRhIG9iamVjdCBpZCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLmltcGwuU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxMYWJlbFZhbHVlSW1wbCA8ZW0+UG9wdWxhdGlvbiBNb2RlbCBMYWJlbCBWYWx1ZTwvZW0+fScgY2xhc3MuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5pbXBsLlN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWxWYWx1ZUltcGwNCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuaW1wbC5TdGFuZGFyZFBhY2thZ2VJbXBsI2dldFN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWxWYWx1ZSgpDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCWludCBTVEFOREFSRF9QT1BVTEFUSU9OX01PREVMX0xBQkVMX1ZBTFVFID0gNTsNCisNCisJLyoqDQorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5BcnJpdmFsczwvYj48L2VtPicgcmVmZXJlbmNlIGxpc3QuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqIEBvcmRlcmVkDQorCSAqLw0KKwlpbnQgU1RBTkRBUkRfUE9QVUxBVElPTl9NT0RFTF9MQUJFTF9WQUxVRV9fQVJSSVZBTFMgPSBQT1BVTEFUSU9OX01PREVMX0xBQkVMX1ZBTFVFX19BUlJJVkFMUzsNCisNCisJLyoqDQorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5EZXBhcnR1cmVzPC9iPjwvZW0+JyByZWZlcmVuY2UgbGlzdC4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCWludCBTVEFOREFSRF9QT1BVTEFUSU9OX01PREVMX0xBQkVMX1ZBTFVFX19ERVBBUlRVUkVTID0gUE9QVUxBVElPTl9NT0RFTF9MQUJFTF9WQUxVRV9fREVQQVJUVVJFUzsNCisNCisJLyoqDQorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5Db3VudDwvYj48L2VtPicgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJaW50IFNUQU5EQVJEX1BPUFVMQVRJT05fTU9ERUxfTEFCRUxfVkFMVUVfX0NPVU5UID0gUE9QVUxBVElPTl9NT0RFTF9MQUJFTF9WQUxVRV9GRUFUVVJFX0NPVU5UICsgMDsNCisNCisJLyoqDQorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5CaXJ0aHM8L2I+PC9lbT4nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCWludCBTVEFOREFSRF9QT1BVTEFUSU9OX01PREVMX0xBQkVMX1ZBTFVFX19CSVJUSFMgPSBQT1BVTEFUSU9OX01PREVMX0xBQkVMX1ZBTFVFX0ZFQVRVUkVfQ09VTlQgKyAxOw0KKw0KKwkvKioNCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkRlYXRoczwvYj48L2VtPicgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJaW50IFNUQU5EQVJEX1BPUFVMQVRJT05fTU9ERUxfTEFCRUxfVkFMVUVfX0RFQVRIUyA9IFBPUFVMQVRJT05fTU9ERUxfTEFCRUxfVkFMVUVfRkVBVFVSRV9DT1VOVCArIDI7DQorDQorCS8qKg0KKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RGVuc2l0eTwvYj48L2VtPicgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJaW50IFNUQU5EQVJEX1BPUFVMQVRJT05fTU9ERUxfTEFCRUxfVkFMVUVfX0RFTlNJVFkgPSBQT1BVTEFUSU9OX01PREVMX0xBQkVMX1ZBTFVFX0ZFQVRVUkVfQ09VTlQgKyAzOw0KKw0KKwkvKioNCisJICogVGhlIG51bWJlciBvZiBzdHJ1Y3R1cmFsIGZlYXR1cmVzIG9mIHRoZSAnPGVtPlBvcHVsYXRpb24gTW9kZWwgTGFiZWwgVmFsdWU8L2VtPicgY2xhc3MuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqIEBvcmRlcmVkDQorCSAqLw0KKwlpbnQgU1RBTkRBUkRfUE9QVUxBVElPTl9NT0RFTF9MQUJFTF9WQUxVRV9GRUFUVVJFX0NPVU5UID0gUE9QVUxBVElPTl9NT0RFTF9MQUJFTF9WQUxVRV9GRUFUVVJFX0NPVU5UICsgNDsNCisNCisNCisJLyoqDQorCSAqIFRoZSBtZXRhIG9iamVjdCBpZCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLmltcGwuU3RvY2hhc3RpY1N0YW5kYXJkUG9wdWxhdGlvbk1vZGVsSW1wbCA8ZW0+U3RvY2hhc3RpYyBTdGFuZGFyZCBQb3B1bGF0aW9uIE1vZGVsPC9lbT59JyBjbGFzcy4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLmltcGwuU3RvY2hhc3RpY1N0YW5kYXJkUG9wdWxhdGlvbk1vZGVsSW1wbA0KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5pbXBsLlN0YW5kYXJkUGFja2FnZUltcGwjZ2V0U3RvY2hhc3RpY1N0YW5kYXJkUG9wdWxhdGlvbk1vZGVsKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJaW50IFNUT0NIQVNUSUNfU1RBTkRBUkRfUE9QVUxBVElPTl9NT0RFTCA9IDY7DQorDQorCS8qKg0KKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VVJJPC9iPjwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqIEBvcmRlcmVkDQorCSAqLw0KKwlpbnQgU1RPQ0hBU1RJQ19TVEFOREFSRF9QT1BVTEFUSU9OX01PREVMX19VUkkgPSBTVEFOREFSRF9QT1BVTEFUSU9OX01PREVMX19VUkk7DQorDQorCS8qKg0KKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VHlwZSBVUkk8L2I+PC9lbT4nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCWludCBTVE9DSEFTVElDX1NUQU5EQVJEX1BPUFVMQVRJT05fTU9ERUxfX1RZUEVfVVJJID0gU1RBTkRBUkRfUE9QVUxBVElPTl9NT0RFTF9fVFlQRV9VUkk7DQorDQorCS8qKg0KKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RHVibGluIENvcmU8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCWludCBTVE9DSEFTVElDX1NUQU5EQVJEX1BPUFVMQVRJT05fTU9ERUxfX0RVQkxJTl9DT1JFID0gU1RBTkRBUkRfUE9QVUxBVElPTl9NT0RFTF9fRFVCTElOX0NPUkU7DQorDQorCS8qKg0KKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+TGFiZWxzIFRvIFVwZGF0ZTwvYj48L2VtPicgcmVmZXJlbmNlIGxpc3QuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqIEBvcmRlcmVkDQorCSAqLw0KKwlpbnQgU1RPQ0hBU1RJQ19TVEFOREFSRF9QT1BVTEFUSU9OX01PREVMX19MQUJFTFNfVE9fVVBEQVRFID0gU1RBTkRBUkRfUE9QVUxBVElPTl9NT0RFTF9fTEFCRUxTX1RPX1VQREFURTsNCisNCisJLyoqDQorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5HcmFwaDwvYj48L2VtPicgY29udGFpbmVyIHJlZmVyZW5jZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCWludCBTVE9DSEFTVElDX1NUQU5EQVJEX1BPUFVMQVRJT05fTU9ERUxfX0dSQVBIID0gU1RBTkRBUkRfUE9QVUxBVElPTl9NT0RFTF9fR1JBUEg7DQorDQorCS8qKg0KKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RW5hYmxlZDwvYj48L2VtPicgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJaW50IFNUT0NIQVNUSUNfU1RBTkRBUkRfUE9QVUxBVElPTl9NT0RFTF9fRU5BQkxFRCA9IFNUQU5EQVJEX1BPUFVMQVRJT05fTU9ERUxfX0VOQUJMRUQ7DQorDQorCS8qKg0KKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+R3JhcGggRGVjb3JhdGVkPC9iPjwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqIEBvcmRlcmVkDQorCSAqLw0KKwlpbnQgU1RPQ0hBU1RJQ19TVEFOREFSRF9QT1BVTEFUSU9OX01PREVMX19HUkFQSF9ERUNPUkFURUQgPSBTVEFOREFSRF9QT1BVTEFUSU9OX01PREVMX19HUkFQSF9ERUNPUkFURUQ7DQorDQorCS8qKg0KKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+UHJvZ3Jlc3M8L2I+PC9lbT4nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCWludCBTVE9DSEFTVElDX1NUQU5EQVJEX1BPUFVMQVRJT05fTU9ERUxfX1BST0dSRVNTID0gU1RBTkRBUkRfUE9QVUxBVElPTl9NT0RFTF9fUFJPR1JFU1M7DQorDQorCS8qKg0KKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+UG9wdWxhdGlvbiBJZGVudGlmaWVyPC9iPjwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqIEBvcmRlcmVkDQorCSAqLw0KKwlpbnQgU1RPQ0hBU1RJQ19TVEFOREFSRF9QT1BVTEFUSU9OX01PREVMX19QT1BVTEFUSU9OX0lERU5USUZJRVIgPSBTVEFOREFSRF9QT1BVTEFUSU9OX01PREVMX19QT1BVTEFUSU9OX0lERU5USUZJRVI7DQorDQorCS8qKg0KKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+TmFtZTwvYj48L2VtPicgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJaW50IFNUT0NIQVNUSUNfU1RBTkRBUkRfUE9QVUxBVElPTl9NT0RFTF9fTkFNRSA9IFNUQU5EQVJEX1BPUFVMQVRJT05fTU9ERUxfX05BTUU7DQorDQorCS8qKg0KKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VGFyZ2V0IElTTyBLZXk8L2I+PC9lbT4nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCWludCBTVE9DSEFTVElDX1NUQU5EQVJEX1BPUFVMQVRJT05fTU9ERUxfX1RBUkdFVF9JU09fS0VZID0gU1RBTkRBUkRfUE9QVUxBVElPTl9NT0RFTF9fVEFSR0VUX0lTT19LRVk7DQorDQorCS8qKg0KKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+QmlydGggUmF0ZTwvYj48L2VtPicgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJaW50IFNUT0NIQVNUSUNfU1RBTkRBUkRfUE9QVUxBVElPTl9NT0RFTF9fQklSVEhfUkFURSA9IFNUQU5EQVJEX1BPUFVMQVRJT05fTU9ERUxfX0JJUlRIX1JBVEU7DQorDQorCS8qKg0KKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RGVhdGggUmF0ZTwvYj48L2VtPicgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJaW50IFNUT0NIQVNUSUNfU1RBTkRBUkRfUE9QVUxBVElPTl9NT0RFTF9fREVBVEhfUkFURSA9IFNUQU5EQVJEX1BPUFVMQVRJT05fTU9ERUxfX0RFQVRIX1JBVEU7DQorDQorCS8qKg0KKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VGltZSBQZXJpb2Q8L2I+PC9lbT4nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCWludCBTVE9DSEFTVElDX1NUQU5EQVJEX1BPUFVMQVRJT05fTU9ERUxfX1RJTUVfUEVSSU9EID0gU1RBTkRBUkRfUE9QVUxBVElPTl9NT0RFTF9fVElNRV9QRVJJT0Q7DQorDQorCS8qKg0KKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+R2FpbjwvYj48L2VtPicgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJaW50IFNUT0NIQVNUSUNfU1RBTkRBUkRfUE9QVUxBVElPTl9NT0RFTF9fR0FJTiA9IFNUQU5EQVJEX1BPUFVMQVRJT05fTU9ERUxfRkVBVFVSRV9DT1VOVCArIDA7DQorDQorCS8qKg0KKwkgKiBUaGUgbnVtYmVyIG9mIHN0cnVjdHVyYWwgZmVhdHVyZXMgb2YgdGhlICc8ZW0+U3RvY2hhc3RpYyBTdGFuZGFyZCBQb3B1bGF0aW9uIE1vZGVsPC9lbT4nIGNsYXNzLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJaW50IFNUT0NIQVNUSUNfU1RBTkRBUkRfUE9QVUxBVElPTl9NT0RFTF9GRUFUVVJFX0NPVU5UID0gU1RBTkRBUkRfUE9QVUxBVElPTl9NT0RFTF9GRUFUVVJFX0NPVU5UICsgMTsNCisNCisNCisJLyoqDQorCSAqIFRoZSBtZXRhIG9iamVjdCBpZCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLmltcGwuRGVtb2dyYXBoaWNQb3B1bGF0aW9uTW9kZWxJbXBsIDxlbT5EZW1vZ3JhcGhpYyBQb3B1bGF0aW9uIE1vZGVsPC9lbT59JyBjbGFzcy4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLmltcGwuRGVtb2dyYXBoaWNQb3B1bGF0aW9uTW9kZWxJbXBsDQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLmltcGwuU3RhbmRhcmRQYWNrYWdlSW1wbCNnZXREZW1vZ3JhcGhpY1BvcHVsYXRpb25Nb2RlbCgpDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCWludCBERU1PR1JBUEhJQ19QT1BVTEFUSU9OX01PREVMID0gNzsNCisNCisJLyoqDQorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5VUkk8L2I+PC9lbT4nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCWludCBERU1PR1JBUEhJQ19QT1BVTEFUSU9OX01PREVMX19VUkkgPSBTVEFOREFSRF9QT1BVTEFUSU9OX01PREVMX19VUkk7DQorDQorCS8qKg0KKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VHlwZSBVUkk8L2I+PC9lbT4nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCWludCBERU1PR1JBUEhJQ19QT1BVTEFUSU9OX01PREVMX19UWVBFX1VSSSA9IFNUQU5EQVJEX1BPUFVMQVRJT05fTU9ERUxfX1RZUEVfVVJJOw0KKw0KKwkvKioNCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkR1YmxpbiBDb3JlPC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqIEBvcmRlcmVkDQorCSAqLw0KKwlpbnQgREVNT0dSQVBISUNfUE9QVUxBVElPTl9NT0RFTF9fRFVCTElOX0NPUkUgPSBTVEFOREFSRF9QT1BVTEFUSU9OX01PREVMX19EVUJMSU5fQ09SRTsNCisNCisJLyoqDQorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5MYWJlbHMgVG8gVXBkYXRlPC9iPjwvZW0+JyByZWZlcmVuY2UgbGlzdC4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCWludCBERU1PR1JBUEhJQ19QT1BVTEFUSU9OX01PREVMX19MQUJFTFNfVE9fVVBEQVRFID0gU1RBTkRBUkRfUE9QVUxBVElPTl9NT0RFTF9fTEFCRUxTX1RPX1VQREFURTsNCisNCisJLyoqDQorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5HcmFwaDwvYj48L2VtPicgY29udGFpbmVyIHJlZmVyZW5jZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCWludCBERU1PR1JBUEhJQ19QT1BVTEFUSU9OX01PREVMX19HUkFQSCA9IFNUQU5EQVJEX1BPUFVMQVRJT05fTU9ERUxfX0dSQVBIOw0KKw0KKwkvKioNCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkVuYWJsZWQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCWludCBERU1PR1JBUEhJQ19QT1BVTEFUSU9OX01PREVMX19FTkFCTEVEID0gU1RBTkRBUkRfUE9QVUxBVElPTl9NT0RFTF9fRU5BQkxFRDsNCisNCisJLyoqDQorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5HcmFwaCBEZWNvcmF0ZWQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCWludCBERU1PR1JBUEhJQ19QT1BVTEFUSU9OX01PREVMX19HUkFQSF9ERUNPUkFURUQgPSBTVEFOREFSRF9QT1BVTEFUSU9OX01PREVMX19HUkFQSF9ERUNPUkFURUQ7DQorDQorCS8qKg0KKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+UHJvZ3Jlc3M8L2I+PC9lbT4nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCWludCBERU1PR1JBUEhJQ19QT1BVTEFUSU9OX01PREVMX19QUk9HUkVTUyA9IFNUQU5EQVJEX1BPUFVMQVRJT05fTU9ERUxfX1BST0dSRVNTOw0KKw0KKwkvKioNCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlBvcHVsYXRpb24gSWRlbnRpZmllcjwvYj48L2VtPicgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJaW50IERFTU9HUkFQSElDX1BPUFVMQVRJT05fTU9ERUxfX1BPUFVMQVRJT05fSURFTlRJRklFUiA9IFNUQU5EQVJEX1BPUFVMQVRJT05fTU9ERUxfX1BPUFVMQVRJT05fSURFTlRJRklFUjsNCisNCisJLyoqDQorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5OYW1lPC9iPjwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqIEBvcmRlcmVkDQorCSAqLw0KKwlpbnQgREVNT0dSQVBISUNfUE9QVUxBVElPTl9NT0RFTF9fTkFNRSA9IFNUQU5EQVJEX1BPUFVMQVRJT05fTU9ERUxfX05BTUU7DQorDQorCS8qKg0KKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VGFyZ2V0IElTTyBLZXk8L2I+PC9lbT4nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCWludCBERU1PR1JBUEhJQ19QT1BVTEFUSU9OX01PREVMX19UQVJHRVRfSVNPX0tFWSA9IFNUQU5EQVJEX1BPUFVMQVRJT05fTU9ERUxfX1RBUkdFVF9JU09fS0VZOw0KKw0KKwkvKioNCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkJpcnRoIFJhdGU8L2I+PC9lbT4nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCWludCBERU1PR1JBUEhJQ19QT1BVTEFUSU9OX01PREVMX19CSVJUSF9SQVRFID0gU1RBTkRBUkRfUE9QVUxBVElPTl9NT0RFTF9fQklSVEhfUkFURTsNCisNCisJLyoqDQorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5EZWF0aCBSYXRlPC9iPjwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqIEBvcmRlcmVkDQorCSAqLw0KKwlpbnQgREVNT0dSQVBISUNfUE9QVUxBVElPTl9NT0RFTF9fREVBVEhfUkFURSA9IFNUQU5EQVJEX1BPUFVMQVRJT05fTU9ERUxfX0RFQVRIX1JBVEU7DQorDQorCS8qKg0KKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VGltZSBQZXJpb2Q8L2I+PC9lbT4nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCWludCBERU1PR1JBUEhJQ19QT1BVTEFUSU9OX01PREVMX19USU1FX1BFUklPRCA9IFNUQU5EQVJEX1BPUFVMQVRJT05fTU9ERUxfX1RJTUVfUEVSSU9EOw0KKw0KKwkvKioNCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlBvcHVsYXRpb24gR3JvdXBzPC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UgbGlzdC4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCWludCBERU1PR1JBUEhJQ19QT1BVTEFUSU9OX01PREVMX19QT1BVTEFUSU9OX0dST1VQUyA9IFNUQU5EQVJEX1BPUFVMQVRJT05fTU9ERUxfRkVBVFVSRV9DT1VOVCArIDA7DQorDQorCS8qKg0KKwkgKiBUaGUgbnVtYmVyIG9mIHN0cnVjdHVyYWwgZmVhdHVyZXMgb2YgdGhlICc8ZW0+RGVtb2dyYXBoaWMgUG9wdWxhdGlvbiBNb2RlbDwvZW0+JyBjbGFzcy4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCWludCBERU1PR1JBUEhJQ19QT1BVTEFUSU9OX01PREVMX0ZFQVRVUkVfQ09VTlQgPSBTVEFOREFSRF9QT1BVTEFUSU9OX01PREVMX0ZFQVRVUkVfQ09VTlQgKyAxOw0KKw0KKw0KKwkvKioNCisJICogVGhlIG1ldGEgb2JqZWN0IGlkIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuaW1wbC5Qb3B1bGF0aW9uR3JvdXBJbXBsIDxlbT5Qb3B1bGF0aW9uIEdyb3VwPC9lbT59JyBjbGFzcy4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLmltcGwuUG9wdWxhdGlvbkdyb3VwSW1wbA0KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5pbXBsLlN0YW5kYXJkUGFja2FnZUltcGwjZ2V0UG9wdWxhdGlvbkdyb3VwKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJaW50IFBPUFVMQVRJT05fR1JPVVAgPSA4Ow0KKw0KKwkvKioNCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPklkZW50aWZpZXI8L2I+PC9lbT4nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCWludCBQT1BVTEFUSU9OX0dST1VQX19JREVOVElGSUVSID0gMDsNCisNCisJLyoqDQorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5GcmFjdGlvbjwvYj48L2VtPicgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJaW50IFBPUFVMQVRJT05fR1JPVVBfX0ZSQUNUSU9OID0gMTsNCisNCisJLyoqDQorCSAqIFRoZSBudW1iZXIgb2Ygc3RydWN0dXJhbCBmZWF0dXJlcyBvZiB0aGUgJzxlbT5Qb3B1bGF0aW9uIEdyb3VwPC9lbT4nIGNsYXNzLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJaW50IFBPUFVMQVRJT05fR1JPVVBfRkVBVFVSRV9DT1VOVCA9IDI7DQorDQorDQorCS8qKg0KKwkgKiBUaGUgbWV0YSBvYmplY3QgaWQgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5pbXBsLlBvcHVsYXRpb25Jbml0aWFsaXplckltcGwgPGVtPlBvcHVsYXRpb24gSW5pdGlhbGl6ZXI8L2VtPn0nIGNsYXNzLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuaW1wbC5Qb3B1bGF0aW9uSW5pdGlhbGl6ZXJJbXBsDQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLmltcGwuU3RhbmRhcmRQYWNrYWdlSW1wbCNnZXRQb3B1bGF0aW9uSW5pdGlhbGl6ZXIoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlpbnQgUE9QVUxBVElPTl9JTklUSUFMSVpFUiA9IDk7DQorDQorCS8qKg0KKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VVJJPC9iPjwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqIEBvcmRlcmVkDQorCSAqLw0KKwlpbnQgUE9QVUxBVElPTl9JTklUSUFMSVpFUl9fVVJJID0gTW9kZWxQYWNrYWdlLk5PREVfREVDT1JBVE9SX19VUkk7DQorDQorCS8qKg0KKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VHlwZSBVUkk8L2I+PC9lbT4nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCWludCBQT1BVTEFUSU9OX0lOSVRJQUxJWkVSX19UWVBFX1VSSSA9IE1vZGVsUGFja2FnZS5OT0RFX0RFQ09SQVRPUl9fVFlQRV9VUkk7DQorDQorCS8qKg0KKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RHVibGluIENvcmU8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCWludCBQT1BVTEFUSU9OX0lOSVRJQUxJWkVSX19EVUJMSU5fQ09SRSA9IE1vZGVsUGFja2FnZS5OT0RFX0RFQ09SQVRPUl9fRFVCTElOX0NPUkU7DQorDQorCS8qKg0KKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+TGFiZWxzIFRvIFVwZGF0ZTwvYj48L2VtPicgcmVmZXJlbmNlIGxpc3QuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqIEBvcmRlcmVkDQorCSAqLw0KKwlpbnQgUE9QVUxBVElPTl9JTklUSUFMSVpFUl9fTEFCRUxTX1RPX1VQREFURSA9IE1vZGVsUGFja2FnZS5OT0RFX0RFQ09SQVRPUl9fTEFCRUxTX1RPX1VQREFURTsNCisNCisJLyoqDQorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5HcmFwaDwvYj48L2VtPicgY29udGFpbmVyIHJlZmVyZW5jZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCWludCBQT1BVTEFUSU9OX0lOSVRJQUxJWkVSX19HUkFQSCA9IE1vZGVsUGFja2FnZS5OT0RFX0RFQ09SQVRPUl9fR1JBUEg7DQorDQorCS8qKg0KKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RW5hYmxlZDwvYj48L2VtPicgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJaW50IFBPUFVMQVRJT05fSU5JVElBTElaRVJfX0VOQUJMRUQgPSBNb2RlbFBhY2thZ2UuTk9ERV9ERUNPUkFUT1JfX0VOQUJMRUQ7DQorDQorCS8qKg0KKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+R3JhcGggRGVjb3JhdGVkPC9iPjwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqIEBvcmRlcmVkDQorCSAqLw0KKwlpbnQgUE9QVUxBVElPTl9JTklUSUFMSVpFUl9fR1JBUEhfREVDT1JBVEVEID0gTW9kZWxQYWNrYWdlLk5PREVfREVDT1JBVE9SX19HUkFQSF9ERUNPUkFURUQ7DQorDQorCS8qKg0KKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+UHJvZ3Jlc3M8L2I+PC9lbT4nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCWludCBQT1BVTEFUSU9OX0lOSVRJQUxJWkVSX19QUk9HUkVTUyA9IE1vZGVsUGFja2FnZS5OT0RFX0RFQ09SQVRPUl9fUFJPR1JFU1M7DQorDQorCS8qKg0KKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VGFyZ2V0IElTTyBLZXk8L2I+PC9lbT4nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCWludCBQT1BVTEFUSU9OX0lOSVRJQUxJWkVSX19UQVJHRVRfSVNPX0tFWSA9IE1vZGVsUGFja2FnZS5OT0RFX0RFQ09SQVRPUl9GRUFUVVJFX0NPVU5UICsgMDsNCisNCisJLyoqDQorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5Qb3B1bGF0aW9uIElkZW50aWZpZXI8L2I+PC9lbT4nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCWludCBQT1BVTEFUSU9OX0lOSVRJQUxJWkVSX19QT1BVTEFUSU9OX0lERU5USUZJRVIgPSBNb2RlbFBhY2thZ2UuTk9ERV9ERUNPUkFUT1JfRkVBVFVSRV9DT1VOVCArIDE7DQorDQorCS8qKg0KKwkgKiBUaGUgbnVtYmVyIG9mIHN0cnVjdHVyYWwgZmVhdHVyZXMgb2YgdGhlICc8ZW0+UG9wdWxhdGlvbiBJbml0aWFsaXplcjwvZW0+JyBjbGFzcy4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCWludCBQT1BVTEFUSU9OX0lOSVRJQUxJWkVSX0ZFQVRVUkVfQ09VTlQgPSBNb2RlbFBhY2thZ2UuTk9ERV9ERUNPUkFUT1JfRkVBVFVSRV9DT1VOVCArIDI7DQorDQorCS8qKg0KKwkgKiBUaGUgbWV0YSBvYmplY3QgaWQgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5pbXBsLlN0YW5kYXJkUG9wdWxhdGlvbkluaXRpYWxpemVySW1wbCA8ZW0+UG9wdWxhdGlvbiBJbml0aWFsaXplcjwvZW0+fScgY2xhc3MuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5pbXBsLlN0YW5kYXJkUG9wdWxhdGlvbkluaXRpYWxpemVySW1wbA0KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5pbXBsLlN0YW5kYXJkUGFja2FnZUltcGwjZ2V0U3RhbmRhcmRQb3B1bGF0aW9uSW5pdGlhbGl6ZXIoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlpbnQgU1RBTkRBUkRfUE9QVUxBVElPTl9JTklUSUFMSVpFUiA9IDEwOw0KKw0KKwkvKioNCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlVSSTwvYj48L2VtPicgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJaW50IFNUQU5EQVJEX1BPUFVMQVRJT05fSU5JVElBTElaRVJfX1VSSSA9IFBPUFVMQVRJT05fSU5JVElBTElaRVJfX1VSSTsNCisNCisJLyoqDQorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5UeXBlIFVSSTwvYj48L2VtPicgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJaW50IFNUQU5EQVJEX1BPUFVMQVRJT05fSU5JVElBTElaRVJfX1RZUEVfVVJJID0gUE9QVUxBVElPTl9JTklUSUFMSVpFUl9fVFlQRV9VUkk7DQorDQorCS8qKg0KKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RHVibGluIENvcmU8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCWludCBTVEFOREFSRF9QT1BVTEFUSU9OX0lOSVRJQUxJWkVSX19EVUJMSU5fQ09SRSA9IFBPUFVMQVRJT05fSU5JVElBTElaRVJfX0RVQkxJTl9DT1JFOw0KKw0KKwkvKioNCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkxhYmVscyBUbyBVcGRhdGU8L2I+PC9lbT4nIHJlZmVyZW5jZSBsaXN0Lg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJaW50IFNUQU5EQVJEX1BPUFVMQVRJT05fSU5JVElBTElaRVJfX0xBQkVMU19UT19VUERBVEUgPSBQT1BVTEFUSU9OX0lOSVRJQUxJWkVSX19MQUJFTFNfVE9fVVBEQVRFOw0KKw0KKwkvKioNCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkdyYXBoPC9iPjwvZW0+JyBjb250YWluZXIgcmVmZXJlbmNlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJaW50IFNUQU5EQVJEX1BPUFVMQVRJT05fSU5JVElBTElaRVJfX0dSQVBIID0gUE9QVUxBVElPTl9JTklUSUFMSVpFUl9fR1JBUEg7DQorDQorCS8qKg0KKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RW5hYmxlZDwvYj48L2VtPicgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJaW50IFNUQU5EQVJEX1BPUFVMQVRJT05fSU5JVElBTElaRVJfX0VOQUJMRUQgPSBQT1BVTEFUSU9OX0lOSVRJQUxJWkVSX19FTkFCTEVEOw0KKw0KKwkvKioNCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkdyYXBoIERlY29yYXRlZDwvYj48L2VtPicgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJaW50IFNUQU5EQVJEX1BPUFVMQVRJT05fSU5JVElBTElaRVJfX0dSQVBIX0RFQ09SQVRFRCA9IFBPUFVMQVRJT05fSU5JVElBTElaRVJfX0dSQVBIX0RFQ09SQVRFRDsNCisNCisJLyoqDQorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5Qcm9ncmVzczwvYj48L2VtPicgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJaW50IFNUQU5EQVJEX1BPUFVMQVRJT05fSU5JVElBTElaRVJfX1BST0dSRVNTID0gUE9QVUxBVElPTl9JTklUSUFMSVpFUl9fUFJPR1JFU1M7DQorDQorCS8qKg0KKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VGFyZ2V0IElTTyBLZXk8L2I+PC9lbT4nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCWludCBTVEFOREFSRF9QT1BVTEFUSU9OX0lOSVRJQUxJWkVSX19UQVJHRVRfSVNPX0tFWSA9IFBPUFVMQVRJT05fSU5JVElBTElaRVJfX1RBUkdFVF9JU09fS0VZOw0KKw0KKwkvKioNCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlBvcHVsYXRpb24gSWRlbnRpZmllcjwvYj48L2VtPicgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJaW50IFNUQU5EQVJEX1BPUFVMQVRJT05fSU5JVElBTElaRVJfX1BPUFVMQVRJT05fSURFTlRJRklFUiA9IFBPUFVMQVRJT05fSU5JVElBTElaRVJfX1BPUFVMQVRJT05fSURFTlRJRklFUjsNCisNCisJLyoqDQorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5JbmRpdmlkdWFsczwvYj48L2VtPicgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJaW50IFNUQU5EQVJEX1BPUFVMQVRJT05fSU5JVElBTElaRVJfX0lORElWSURVQUxTID0gUE9QVUxBVElPTl9JTklUSUFMSVpFUl9GRUFUVVJFX0NPVU5UICsgMDsNCisNCisJLyoqDQorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5Vc2UgRGVuc2l0eTwvYj48L2VtPicgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJaW50IFNUQU5EQVJEX1BPUFVMQVRJT05fSU5JVElBTElaRVJfX1VTRV9ERU5TSVRZID0gUE9QVUxBVElPTl9JTklUSUFMSVpFUl9GRUFUVVJFX0NPVU5UICsgMTsNCisNCisJLyoqDQorCSAqIFRoZSBudW1iZXIgb2Ygc3RydWN0dXJhbCBmZWF0dXJlcyBvZiB0aGUgJzxlbT5Qb3B1bGF0aW9uIEluaXRpYWxpemVyPC9lbT4nIGNsYXNzLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJaW50IFNUQU5EQVJEX1BPUFVMQVRJT05fSU5JVElBTElaRVJfRkVBVFVSRV9DT1VOVCA9IFBPUFVMQVRJT05fSU5JVElBTElaRVJfRkVBVFVSRV9DT1VOVCArIDI7DQorDQorDQorCS8qKg0KKwkgKiBUaGUgbWV0YSBvYmplY3QgaWQgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5pbXBsLlNlYXNvbmFsUG9wdWxhdGlvbk1vZGVsSW1wbCA8ZW0+U2Vhc29uYWwgUG9wdWxhdGlvbiBNb2RlbDwvZW0+fScgY2xhc3MuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5pbXBsLlNlYXNvbmFsUG9wdWxhdGlvbk1vZGVsSW1wbA0KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5pbXBsLlN0YW5kYXJkUGFja2FnZUltcGwjZ2V0U2Vhc29uYWxQb3B1bGF0aW9uTW9kZWwoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlpbnQgU0VBU09OQUxfUE9QVUxBVElPTl9NT0RFTCA9IDExOw0KKw0KKwkvKioNCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlVSSTwvYj48L2VtPicgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJaW50IFNFQVNPTkFMX1BPUFVMQVRJT05fTU9ERUxfX1VSSSA9IFNUQU5EQVJEX1BPUFVMQVRJT05fTU9ERUxfX1VSSTsNCisNCisJLyoqDQorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5UeXBlIFVSSTwvYj48L2VtPicgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJaW50IFNFQVNPTkFMX1BPUFVMQVRJT05fTU9ERUxfX1RZUEVfVVJJID0gU1RBTkRBUkRfUE9QVUxBVElPTl9NT0RFTF9fVFlQRV9VUkk7DQorDQorCS8qKg0KKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RHVibGluIENvcmU8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCWludCBTRUFTT05BTF9QT1BVTEFUSU9OX01PREVMX19EVUJMSU5fQ09SRSA9IFNUQU5EQVJEX1BPUFVMQVRJT05fTU9ERUxfX0RVQkxJTl9DT1JFOw0KKw0KKwkvKioNCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkxhYmVscyBUbyBVcGRhdGU8L2I+PC9lbT4nIHJlZmVyZW5jZSBsaXN0Lg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJaW50IFNFQVNPTkFMX1BPUFVMQVRJT05fTU9ERUxfX0xBQkVMU19UT19VUERBVEUgPSBTVEFOREFSRF9QT1BVTEFUSU9OX01PREVMX19MQUJFTFNfVE9fVVBEQVRFOw0KKw0KKwkvKioNCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkdyYXBoPC9iPjwvZW0+JyBjb250YWluZXIgcmVmZXJlbmNlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJaW50IFNFQVNPTkFMX1BPUFVMQVRJT05fTU9ERUxfX0dSQVBIID0gU1RBTkRBUkRfUE9QVUxBVElPTl9NT0RFTF9fR1JBUEg7DQorDQorCS8qKg0KKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RW5hYmxlZDwvYj48L2VtPicgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJaW50IFNFQVNPTkFMX1BPUFVMQVRJT05fTU9ERUxfX0VOQUJMRUQgPSBTVEFOREFSRF9QT1BVTEFUSU9OX01PREVMX19FTkFCTEVEOw0KKw0KKwkvKioNCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkdyYXBoIERlY29yYXRlZDwvYj48L2VtPicgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJaW50IFNFQVNPTkFMX1BPUFVMQVRJT05fTU9ERUxfX0dSQVBIX0RFQ09SQVRFRCA9IFNUQU5EQVJEX1BPUFVMQVRJT05fTU9ERUxfX0dSQVBIX0RFQ09SQVRFRDsNCisNCisJLyoqDQorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5Qcm9ncmVzczwvYj48L2VtPicgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJaW50IFNFQVNPTkFMX1BPUFVMQVRJT05fTU9ERUxfX1BST0dSRVNTID0gU1RBTkRBUkRfUE9QVUxBVElPTl9NT0RFTF9fUFJPR1JFU1M7DQorDQorCS8qKg0KKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+UG9wdWxhdGlvbiBJZGVudGlmaWVyPC9iPjwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqIEBvcmRlcmVkDQorCSAqLw0KKwlpbnQgU0VBU09OQUxfUE9QVUxBVElPTl9NT0RFTF9fUE9QVUxBVElPTl9JREVOVElGSUVSID0gU1RBTkRBUkRfUE9QVUxBVElPTl9NT0RFTF9fUE9QVUxBVElPTl9JREVOVElGSUVSOw0KKw0KKwkvKioNCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPk5hbWU8L2I+PC9lbT4nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCWludCBTRUFTT05BTF9QT1BVTEFUSU9OX01PREVMX19OQU1FID0gU1RBTkRBUkRfUE9QVUxBVElPTl9NT0RFTF9fTkFNRTsNCisNCisJLyoqDQorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5UYXJnZXQgSVNPIEtleTwvYj48L2VtPicgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJaW50IFNFQVNPTkFMX1BPUFVMQVRJT05fTU9ERUxfX1RBUkdFVF9JU09fS0VZID0gU1RBTkRBUkRfUE9QVUxBVElPTl9NT0RFTF9fVEFSR0VUX0lTT19LRVk7DQorDQorCS8qKg0KKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+QmlydGggUmF0ZTwvYj48L2VtPicgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJaW50IFNFQVNPTkFMX1BPUFVMQVRJT05fTU9ERUxfX0JJUlRIX1JBVEUgPSBTVEFOREFSRF9QT1BVTEFUSU9OX01PREVMX19CSVJUSF9SQVRFOw0KKw0KKwkvKioNCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkRlYXRoIFJhdGU8L2I+PC9lbT4nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCWludCBTRUFTT05BTF9QT1BVTEFUSU9OX01PREVMX19ERUFUSF9SQVRFID0gU1RBTkRBUkRfUE9QVUxBVElPTl9NT0RFTF9fREVBVEhfUkFURTsNCisNCisJLyoqDQorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5UaW1lIFBlcmlvZDwvYj48L2VtPicgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJaW50IFNFQVNPTkFMX1BPUFVMQVRJT05fTU9ERUxfX1RJTUVfUEVSSU9EID0gU1RBTkRBUkRfUE9QVUxBVElPTl9NT0RFTF9fVElNRV9QRVJJT0Q7DQorDQorCS8qKg0KKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+UGhhc2U8L2I+PC9lbT4nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCWludCBTRUFTT05BTF9QT1BVTEFUSU9OX01PREVMX19QSEFTRSA9IFNUQU5EQVJEX1BPUFVMQVRJT05fTU9ERUxfRkVBVFVSRV9DT1VOVCArIDA7DQorDQorCS8qKg0KKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+TW9kdWxhdGlvbiBBbXBsaXR1ZGU8L2I+PC9lbT4nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCWludCBTRUFTT05BTF9QT1BVTEFUSU9OX01PREVMX19NT0RVTEFUSU9OX0FNUExJVFVERSA9IFNUQU5EQVJEX1BPUFVMQVRJT05fTU9ERUxfRkVBVFVSRV9DT1VOVCArIDE7DQorDQorCS8qKg0KKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+UGVyaW9kPC9iPjwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqIEBvcmRlcmVkDQorCSAqLw0KKwlpbnQgU0VBU09OQUxfUE9QVUxBVElPTl9NT0RFTF9fUEVSSU9EID0gU1RBTkRBUkRfUE9QVUxBVElPTl9NT0RFTF9GRUFUVVJFX0NPVU5UICsgMjsNCisNCisJLyoqDQorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5Vc2UgTGF0aXR1ZGU8L2I+PC9lbT4nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCWludCBTRUFTT05BTF9QT1BVTEFUSU9OX01PREVMX19VU0VfTEFUSVRVREUgPSBTVEFOREFSRF9QT1BVTEFUSU9OX01PREVMX0ZFQVRVUkVfQ09VTlQgKyAzOw0KKw0KKwkvKioNCisJICogVGhlIG51bWJlciBvZiBzdHJ1Y3R1cmFsIGZlYXR1cmVzIG9mIHRoZSAnPGVtPlNlYXNvbmFsIFBvcHVsYXRpb24gTW9kZWw8L2VtPicgY2xhc3MuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqIEBvcmRlcmVkDQorCSAqLw0KKwlpbnQgU0VBU09OQUxfUE9QVUxBVElPTl9NT0RFTF9GRUFUVVJFX0NPVU5UID0gU1RBTkRBUkRfUE9QVUxBVElPTl9NT0RFTF9GRUFUVVJFX0NPVU5UICsgNDsNCisNCisNCisJLyoqDQorCSAqIFRoZSBtZXRhIG9iamVjdCBpZCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLmltcGwuRWFydGhTY2llbmNlUG9wdWxhdGlvbkluaXRpYWxpemVySW1wbCA8ZW0+RWFydGggU2NpZW5jZSBQb3B1bGF0aW9uIEluaXRpYWxpemVyPC9lbT59JyBjbGFzcy4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLmltcGwuRWFydGhTY2llbmNlUG9wdWxhdGlvbkluaXRpYWxpemVySW1wbA0KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5pbXBsLlN0YW5kYXJkUGFja2FnZUltcGwjZ2V0RWFydGhTY2llbmNlUG9wdWxhdGlvbkluaXRpYWxpemVyKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJaW50IEVBUlRIX1NDSUVOQ0VfUE9QVUxBVElPTl9JTklUSUFMSVpFUiA9IDEyOw0KKw0KKwkvKioNCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlVSSTwvYj48L2VtPicgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJaW50IEVBUlRIX1NDSUVOQ0VfUE9QVUxBVElPTl9JTklUSUFMSVpFUl9fVVJJID0gUE9QVUxBVElPTl9JTklUSUFMSVpFUl9fVVJJOw0KKw0KKwkvKioNCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlR5cGUgVVJJPC9iPjwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqIEBvcmRlcmVkDQorCSAqLw0KKwlpbnQgRUFSVEhfU0NJRU5DRV9QT1BVTEFUSU9OX0lOSVRJQUxJWkVSX19UWVBFX1VSSSA9IFBPUFVMQVRJT05fSU5JVElBTElaRVJfX1RZUEVfVVJJOw0KKw0KKwkvKioNCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkR1YmxpbiBDb3JlPC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqIEBvcmRlcmVkDQorCSAqLw0KKwlpbnQgRUFSVEhfU0NJRU5DRV9QT1BVTEFUSU9OX0lOSVRJQUxJWkVSX19EVUJMSU5fQ09SRSA9IFBPUFVMQVRJT05fSU5JVElBTElaRVJfX0RVQkxJTl9DT1JFOw0KKw0KKwkvKioNCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkxhYmVscyBUbyBVcGRhdGU8L2I+PC9lbT4nIHJlZmVyZW5jZSBsaXN0Lg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJaW50IEVBUlRIX1NDSUVOQ0VfUE9QVUxBVElPTl9JTklUSUFMSVpFUl9fTEFCRUxTX1RPX1VQREFURSA9IFBPUFVMQVRJT05fSU5JVElBTElaRVJfX0xBQkVMU19UT19VUERBVEU7DQorDQorCS8qKg0KKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+R3JhcGg8L2I+PC9lbT4nIGNvbnRhaW5lciByZWZlcmVuY2UuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqIEBvcmRlcmVkDQorCSAqLw0KKwlpbnQgRUFSVEhfU0NJRU5DRV9QT1BVTEFUSU9OX0lOSVRJQUxJWkVSX19HUkFQSCA9IFBPUFVMQVRJT05fSU5JVElBTElaRVJfX0dSQVBIOw0KKw0KKwkvKioNCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkVuYWJsZWQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCWludCBFQVJUSF9TQ0lFTkNFX1BPUFVMQVRJT05fSU5JVElBTElaRVJfX0VOQUJMRUQgPSBQT1BVTEFUSU9OX0lOSVRJQUxJWkVSX19FTkFCTEVEOw0KKw0KKwkvKioNCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkdyYXBoIERlY29yYXRlZDwvYj48L2VtPicgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJaW50IEVBUlRIX1NDSUVOQ0VfUE9QVUxBVElPTl9JTklUSUFMSVpFUl9fR1JBUEhfREVDT1JBVEVEID0gUE9QVUxBVElPTl9JTklUSUFMSVpFUl9fR1JBUEhfREVDT1JBVEVEOw0KKw0KKwkvKioNCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlByb2dyZXNzPC9iPjwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqIEBvcmRlcmVkDQorCSAqLw0KKwlpbnQgRUFSVEhfU0NJRU5DRV9QT1BVTEFUSU9OX0lOSVRJQUxJWkVSX19QUk9HUkVTUyA9IFBPUFVMQVRJT05fSU5JVElBTElaRVJfX1BST0dSRVNTOw0KKw0KKwkvKioNCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlRhcmdldCBJU08gS2V5PC9iPjwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqIEBvcmRlcmVkDQorCSAqLw0KKwlpbnQgRUFSVEhfU0NJRU5DRV9QT1BVTEFUSU9OX0lOSVRJQUxJWkVSX19UQVJHRVRfSVNPX0tFWSA9IFBPUFVMQVRJT05fSU5JVElBTElaRVJfX1RBUkdFVF9JU09fS0VZOw0KKw0KKwkvKioNCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlBvcHVsYXRpb24gSWRlbnRpZmllcjwvYj48L2VtPicgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJaW50IEVBUlRIX1NDSUVOQ0VfUE9QVUxBVElPTl9JTklUSUFMSVpFUl9fUE9QVUxBVElPTl9JREVOVElGSUVSID0gUE9QVUxBVElPTl9JTklUSUFMSVpFUl9fUE9QVUxBVElPTl9JREVOVElGSUVSOw0KKw0KKwkvKioNCisJICogVGhlIG51bWJlciBvZiBzdHJ1Y3R1cmFsIGZlYXR1cmVzIG9mIHRoZSAnPGVtPkVhcnRoIFNjaWVuY2UgUG9wdWxhdGlvbiBJbml0aWFsaXplcjwvZW0+JyBjbGFzcy4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCWludCBFQVJUSF9TQ0lFTkNFX1BPUFVMQVRJT05fSU5JVElBTElaRVJfRkVBVFVSRV9DT1VOVCA9IFBPUFVMQVRJT05fSU5JVElBTElaRVJfRkVBVFVSRV9DT1VOVCArIDA7DQorDQorCS8qKg0KKwkgKiBUaGUgbWV0YSBvYmplY3QgaWQgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5pbXBsLllldGlQb3B1bGF0aW9uSW5pdGlhbGl6ZXJJbXBsIDxlbT5ZZXRpIFBvcHVsYXRpb24gSW5pdGlhbGl6ZXI8L2VtPn0nIGNsYXNzLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuaW1wbC5ZZXRpUG9wdWxhdGlvbkluaXRpYWxpemVySW1wbA0KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5pbXBsLlN0YW5kYXJkUGFja2FnZUltcGwjZ2V0WWV0aVBvcHVsYXRpb25Jbml0aWFsaXplcigpDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCWludCBZRVRJX1BPUFVMQVRJT05fSU5JVElBTElaRVIgPSAxMzsNCisNCisJLyoqDQorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5VUkk8L2I+PC9lbT4nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCWludCBZRVRJX1BPUFVMQVRJT05fSU5JVElBTElaRVJfX1VSSSA9IEVBUlRIX1NDSUVOQ0VfUE9QVUxBVElPTl9JTklUSUFMSVpFUl9fVVJJOw0KKw0KKwkvKioNCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlR5cGUgVVJJPC9iPjwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqIEBvcmRlcmVkDQorCSAqLw0KKwlpbnQgWUVUSV9QT1BVTEFUSU9OX0lOSVRJQUxJWkVSX19UWVBFX1VSSSA9IEVBUlRIX1NDSUVOQ0VfUE9QVUxBVElPTl9JTklUSUFMSVpFUl9fVFlQRV9VUkk7DQorDQorCS8qKg0KKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RHVibGluIENvcmU8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCWludCBZRVRJX1BPUFVMQVRJT05fSU5JVElBTElaRVJfX0RVQkxJTl9DT1JFID0gRUFSVEhfU0NJRU5DRV9QT1BVTEFUSU9OX0lOSVRJQUxJWkVSX19EVUJMSU5fQ09SRTsNCisNCisJLyoqDQorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5MYWJlbHMgVG8gVXBkYXRlPC9iPjwvZW0+JyByZWZlcmVuY2UgbGlzdC4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCWludCBZRVRJX1BPUFVMQVRJT05fSU5JVElBTElaRVJfX0xBQkVMU19UT19VUERBVEUgPSBFQVJUSF9TQ0lFTkNFX1BPUFVMQVRJT05fSU5JVElBTElaRVJfX0xBQkVMU19UT19VUERBVEU7DQorDQorCS8qKg0KKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+R3JhcGg8L2I+PC9lbT4nIGNvbnRhaW5lciByZWZlcmVuY2UuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqIEBvcmRlcmVkDQorCSAqLw0KKwlpbnQgWUVUSV9QT1BVTEFUSU9OX0lOSVRJQUxJWkVSX19HUkFQSCA9IEVBUlRIX1NDSUVOQ0VfUE9QVUxBVElPTl9JTklUSUFMSVpFUl9fR1JBUEg7DQorDQorCS8qKg0KKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RW5hYmxlZDwvYj48L2VtPicgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJaW50IFlFVElfUE9QVUxBVElPTl9JTklUSUFMSVpFUl9fRU5BQkxFRCA9IEVBUlRIX1NDSUVOQ0VfUE9QVUxBVElPTl9JTklUSUFMSVpFUl9fRU5BQkxFRDsNCisNCisJLyoqDQorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5HcmFwaCBEZWNvcmF0ZWQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCWludCBZRVRJX1BPUFVMQVRJT05fSU5JVElBTElaRVJfX0dSQVBIX0RFQ09SQVRFRCA9IEVBUlRIX1NDSUVOQ0VfUE9QVUxBVElPTl9JTklUSUFMSVpFUl9fR1JBUEhfREVDT1JBVEVEOw0KKw0KKwkvKioNCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlByb2dyZXNzPC9iPjwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqIEBvcmRlcmVkDQorCSAqLw0KKwlpbnQgWUVUSV9QT1BVTEFUSU9OX0lOSVRJQUxJWkVSX19QUk9HUkVTUyA9IEVBUlRIX1NDSUVOQ0VfUE9QVUxBVElPTl9JTklUSUFMSVpFUl9fUFJPR1JFU1M7DQorDQorCS8qKg0KKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VGFyZ2V0IElTTyBLZXk8L2I+PC9lbT4nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCWludCBZRVRJX1BPUFVMQVRJT05fSU5JVElBTElaRVJfX1RBUkdFVF9JU09fS0VZID0gRUFSVEhfU0NJRU5DRV9QT1BVTEFUSU9OX0lOSVRJQUxJWkVSX19UQVJHRVRfSVNPX0tFWTsNCisNCisJLyoqDQorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5Qb3B1bGF0aW9uIElkZW50aWZpZXI8L2I+PC9lbT4nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCWludCBZRVRJX1BPUFVMQVRJT05fSU5JVElBTElaRVJfX1BPUFVMQVRJT05fSURFTlRJRklFUiA9IEVBUlRIX1NDSUVOQ0VfUE9QVUxBVElPTl9JTklUSUFMSVpFUl9fUE9QVUxBVElPTl9JREVOVElGSUVSOw0KKw0KKwkvKioNCisJICogVGhlIG51bWJlciBvZiBzdHJ1Y3R1cmFsIGZlYXR1cmVzIG9mIHRoZSAnPGVtPllldGkgUG9wdWxhdGlvbiBJbml0aWFsaXplcjwvZW0+JyBjbGFzcy4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCWludCBZRVRJX1BPUFVMQVRJT05fSU5JVElBTElaRVJfRkVBVFVSRV9DT1VOVCA9IEVBUlRIX1NDSUVOQ0VfUE9QVUxBVElPTl9JTklUSUFMSVpFUl9GRUFUVVJFX0NPVU5UICsgMDsNCisNCisNCisJLyoqDQorCSAqIFRoZSBtZXRhIG9iamVjdCBpZCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLmltcGwuTW9zcXVpdG9Qb3B1bGF0aW9uTW9kZWxJbXBsIDxlbT5Nb3NxdWl0byBQb3B1bGF0aW9uIE1vZGVsPC9lbT59JyBjbGFzcy4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLmltcGwuTW9zcXVpdG9Qb3B1bGF0aW9uTW9kZWxJbXBsDQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLmltcGwuU3RhbmRhcmRQYWNrYWdlSW1wbCNnZXRNb3NxdWl0b1BvcHVsYXRpb25Nb2RlbCgpDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCWludCBNT1NRVUlUT19QT1BVTEFUSU9OX01PREVMID0gMTQ7DQorDQorCS8qKg0KKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VVJJPC9iPjwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqIEBvcmRlcmVkDQorCSAqLw0KKwlpbnQgTU9TUVVJVE9fUE9QVUxBVElPTl9NT0RFTF9fVVJJID0gUE9QVUxBVElPTl9NT0RFTF9fVVJJOw0KKw0KKwkvKioNCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlR5cGUgVVJJPC9iPjwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqIEBvcmRlcmVkDQorCSAqLw0KKwlpbnQgTU9TUVVJVE9fUE9QVUxBVElPTl9NT0RFTF9fVFlQRV9VUkkgPSBQT1BVTEFUSU9OX01PREVMX19UWVBFX1VSSTsNCisNCisJLyoqDQorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5EdWJsaW4gQ29yZTwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJaW50IE1PU1FVSVRPX1BPUFVMQVRJT05fTU9ERUxfX0RVQkxJTl9DT1JFID0gUE9QVUxBVElPTl9NT0RFTF9fRFVCTElOX0NPUkU7DQorDQorCS8qKg0KKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+TGFiZWxzIFRvIFVwZGF0ZTwvYj48L2VtPicgcmVmZXJlbmNlIGxpc3QuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqIEBvcmRlcmVkDQorCSAqLw0KKwlpbnQgTU9TUVVJVE9fUE9QVUxBVElPTl9NT0RFTF9fTEFCRUxTX1RPX1VQREFURSA9IFBPUFVMQVRJT05fTU9ERUxfX0xBQkVMU19UT19VUERBVEU7DQorDQorCS8qKg0KKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+R3JhcGg8L2I+PC9lbT4nIGNvbnRhaW5lciByZWZlcmVuY2UuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqIEBvcmRlcmVkDQorCSAqLw0KKwlpbnQgTU9TUVVJVE9fUE9QVUxBVElPTl9NT0RFTF9fR1JBUEggPSBQT1BVTEFUSU9OX01PREVMX19HUkFQSDsNCisNCisJLyoqDQorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5FbmFibGVkPC9iPjwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqIEBvcmRlcmVkDQorCSAqLw0KKwlpbnQgTU9TUVVJVE9fUE9QVUxBVElPTl9NT0RFTF9fRU5BQkxFRCA9IFBPUFVMQVRJT05fTU9ERUxfX0VOQUJMRUQ7DQorDQorCS8qKg0KKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+R3JhcGggRGVjb3JhdGVkPC9iPjwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqIEBvcmRlcmVkDQorCSAqLw0KKwlpbnQgTU9TUVVJVE9fUE9QVUxBVElPTl9NT0RFTF9fR1JBUEhfREVDT1JBVEVEID0gUE9QVUxBVElPTl9NT0RFTF9fR1JBUEhfREVDT1JBVEVEOw0KKw0KKwkvKioNCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlByb2dyZXNzPC9iPjwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqIEBvcmRlcmVkDQorCSAqLw0KKwlpbnQgTU9TUVVJVE9fUE9QVUxBVElPTl9NT0RFTF9fUFJPR1JFU1MgPSBQT1BVTEFUSU9OX01PREVMX19QUk9HUkVTUzsNCisNCisJLyoqDQorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5Qb3B1bGF0aW9uIElkZW50aWZpZXI8L2I+PC9lbT4nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCWludCBNT1NRVUlUT19QT1BVTEFUSU9OX01PREVMX19QT1BVTEFUSU9OX0lERU5USUZJRVIgPSBQT1BVTEFUSU9OX01PREVMX19QT1BVTEFUSU9OX0lERU5USUZJRVI7DQorDQorCS8qKg0KKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+TmFtZTwvYj48L2VtPicgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJaW50IE1PU1FVSVRPX1BPUFVMQVRJT05fTU9ERUxfX05BTUUgPSBQT1BVTEFUSU9OX01PREVMX19OQU1FOw0KKw0KKwkvKioNCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlRhcmdldCBJU08gS2V5PC9iPjwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqIEBvcmRlcmVkDQorCSAqLw0KKwlpbnQgTU9TUVVJVE9fUE9QVUxBVElPTl9NT0RFTF9fVEFSR0VUX0lTT19LRVkgPSBQT1BVTEFUSU9OX01PREVMX19UQVJHRVRfSVNPX0tFWTsNCisNCisJLyoqDQorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5TY2FsaW5nIEZhY3RvcjwvYj48L2VtPicgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJaW50IE1PU1FVSVRPX1BPUFVMQVRJT05fTU9ERUxfX1NDQUxJTkdfRkFDVE9SID0gUE9QVUxBVElPTl9NT0RFTF9GRUFUVVJFX0NPVU5UICsgMDsNCisNCisJLyoqDQorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5UaW1lIFBlcmlvZDwvYj48L2VtPicgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJaW50IE1PU1FVSVRPX1BPUFVMQVRJT05fTU9ERUxfX1RJTUVfUEVSSU9EID0gUE9QVUxBVElPTl9NT0RFTF9GRUFUVVJFX0NPVU5UICsgMTsNCisNCisJLyoqDQorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5Nb3J0YWxpdHkgUmF0ZTwvYj48L2VtPicgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJaW50IE1PU1FVSVRPX1BPUFVMQVRJT05fTU9ERUxfX01PUlRBTElUWV9SQVRFID0gUE9QVUxBVElPTl9NT0RFTF9GRUFUVVJFX0NPVU5UICsgMjsNCisNCisJLyoqDQorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5Ib3N0PC9iPjwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqIEBvcmRlcmVkDQorCSAqLw0KKwlpbnQgTU9TUVVJVE9fUE9QVUxBVElPTl9NT0RFTF9fSE9TVCA9IFBPUFVMQVRJT05fTU9ERUxfRkVBVFVSRV9DT1VOVCArIDM7DQorDQorCS8qKg0KKwkgKiBUaGUgbnVtYmVyIG9mIHN0cnVjdHVyYWwgZmVhdHVyZXMgb2YgdGhlICc8ZW0+TW9zcXVpdG8gUG9wdWxhdGlvbiBNb2RlbDwvZW0+JyBjbGFzcy4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCWludCBNT1NRVUlUT19QT1BVTEFUSU9OX01PREVMX0ZFQVRVUkVfQ09VTlQgPSBQT1BVTEFUSU9OX01PREVMX0ZFQVRVUkVfQ09VTlQgKyA0Ow0KKw0KKw0KKwkvKioNCisJICogVGhlIG1ldGEgb2JqZWN0IGlkIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuaW1wbC5BZ2luZ1BvcHVsYXRpb25Nb2RlbEltcGwgPGVtPkFnaW5nIFBvcHVsYXRpb24gTW9kZWw8L2VtPn0nIGNsYXNzLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuaW1wbC5BZ2luZ1BvcHVsYXRpb25Nb2RlbEltcGwNCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuaW1wbC5TdGFuZGFyZFBhY2thZ2VJbXBsI2dldEFnaW5nUG9wdWxhdGlvbk1vZGVsKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJaW50IEFHSU5HX1BPUFVMQVRJT05fTU9ERUwgPSAxNTsNCisNCisJLyoqDQorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5VUkk8L2I+PC9lbT4nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCWludCBBR0lOR19QT1BVTEFUSU9OX01PREVMX19VUkkgPSBERU1PR1JBUEhJQ19QT1BVTEFUSU9OX01PREVMX19VUkk7DQorDQorCS8qKg0KKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VHlwZSBVUkk8L2I+PC9lbT4nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCWludCBBR0lOR19QT1BVTEFUSU9OX01PREVMX19UWVBFX1VSSSA9IERFTU9HUkFQSElDX1BPUFVMQVRJT05fTU9ERUxfX1RZUEVfVVJJOw0KKw0KKwkvKioNCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkR1YmxpbiBDb3JlPC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqIEBvcmRlcmVkDQorCSAqLw0KKwlpbnQgQUdJTkdfUE9QVUxBVElPTl9NT0RFTF9fRFVCTElOX0NPUkUgPSBERU1PR1JBUEhJQ19QT1BVTEFUSU9OX01PREVMX19EVUJMSU5fQ09SRTsNCisNCisJLyoqDQorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5MYWJlbHMgVG8gVXBkYXRlPC9iPjwvZW0+JyByZWZlcmVuY2UgbGlzdC4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCWludCBBR0lOR19QT1BVTEFUSU9OX01PREVMX19MQUJFTFNfVE9fVVBEQVRFID0gREVNT0dSQVBISUNfUE9QVUxBVElPTl9NT0RFTF9fTEFCRUxTX1RPX1VQREFURTsNCisNCisJLyoqDQorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5HcmFwaDwvYj48L2VtPicgY29udGFpbmVyIHJlZmVyZW5jZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCWludCBBR0lOR19QT1BVTEFUSU9OX01PREVMX19HUkFQSCA9IERFTU9HUkFQSElDX1BPUFVMQVRJT05fTU9ERUxfX0dSQVBIOw0KKw0KKwkvKioNCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkVuYWJsZWQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCWludCBBR0lOR19QT1BVTEFUSU9OX01PREVMX19FTkFCTEVEID0gREVNT0dSQVBISUNfUE9QVUxBVElPTl9NT0RFTF9fRU5BQkxFRDsNCisNCisJLyoqDQorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5HcmFwaCBEZWNvcmF0ZWQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCWludCBBR0lOR19QT1BVTEFUSU9OX01PREVMX19HUkFQSF9ERUNPUkFURUQgPSBERU1PR1JBUEhJQ19QT1BVTEFUSU9OX01PREVMX19HUkFQSF9ERUNPUkFURUQ7DQorDQorCS8qKg0KKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+UHJvZ3Jlc3M8L2I+PC9lbT4nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCWludCBBR0lOR19QT1BVTEFUSU9OX01PREVMX19QUk9HUkVTUyA9IERFTU9HUkFQSElDX1BPUFVMQVRJT05fTU9ERUxfX1BST0dSRVNTOw0KKw0KKwkvKioNCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlBvcHVsYXRpb24gSWRlbnRpZmllcjwvYj48L2VtPicgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJaW50IEFHSU5HX1BPUFVMQVRJT05fTU9ERUxfX1BPUFVMQVRJT05fSURFTlRJRklFUiA9IERFTU9HUkFQSElDX1BPUFVMQVRJT05fTU9ERUxfX1BPUFVMQVRJT05fSURFTlRJRklFUjsNCisNCisJLyoqDQorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5OYW1lPC9iPjwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqIEBvcmRlcmVkDQorCSAqLw0KKwlpbnQgQUdJTkdfUE9QVUxBVElPTl9NT0RFTF9fTkFNRSA9IERFTU9HUkFQSElDX1BPUFVMQVRJT05fTU9ERUxfX05BTUU7DQorDQorCS8qKg0KKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VGFyZ2V0IElTTyBLZXk8L2I+PC9lbT4nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCWludCBBR0lOR19QT1BVTEFUSU9OX01PREVMX19UQVJHRVRfSVNPX0tFWSA9IERFTU9HUkFQSElDX1BPUFVMQVRJT05fTU9ERUxfX1RBUkdFVF9JU09fS0VZOw0KKw0KKwkvKioNCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkJpcnRoIFJhdGU8L2I+PC9lbT4nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCWludCBBR0lOR19QT1BVTEFUSU9OX01PREVMX19CSVJUSF9SQVRFID0gREVNT0dSQVBISUNfUE9QVUxBVElPTl9NT0RFTF9fQklSVEhfUkFURTsNCisNCisJLyoqDQorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5EZWF0aCBSYXRlPC9iPjwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqIEBvcmRlcmVkDQorCSAqLw0KKwlpbnQgQUdJTkdfUE9QVUxBVElPTl9NT0RFTF9fREVBVEhfUkFURSA9IERFTU9HUkFQSElDX1BPUFVMQVRJT05fTU9ERUxfX0RFQVRIX1JBVEU7DQorDQorCS8qKg0KKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VGltZSBQZXJpb2Q8L2I+PC9lbT4nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCWludCBBR0lOR19QT1BVTEFUSU9OX01PREVMX19USU1FX1BFUklPRCA9IERFTU9HUkFQSElDX1BPUFVMQVRJT05fTU9ERUxfX1RJTUVfUEVSSU9EOw0KKw0KKwkvKioNCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlBvcHVsYXRpb24gR3JvdXBzPC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UgbGlzdC4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCWludCBBR0lOR19QT1BVTEFUSU9OX01PREVMX19QT1BVTEFUSU9OX0dST1VQUyA9IERFTU9HUkFQSElDX1BPUFVMQVRJT05fTU9ERUxfX1BPUFVMQVRJT05fR1JPVVBTOw0KKw0KKwkvKioNCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkhhcyBNYXggQWdlPC9iPjwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqIEBvcmRlcmVkDQorCSAqLw0KKwlpbnQgQUdJTkdfUE9QVUxBVElPTl9NT0RFTF9fSEFTX01BWF9BR0UgPSBERU1PR1JBUEhJQ19QT1BVTEFUSU9OX01PREVMX0ZFQVRVUkVfQ09VTlQgKyAwOw0KKw0KKwkvKioNCisJICogVGhlIG51bWJlciBvZiBzdHJ1Y3R1cmFsIGZlYXR1cmVzIG9mIHRoZSAnPGVtPkFnaW5nIFBvcHVsYXRpb24gTW9kZWw8L2VtPicgY2xhc3MuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqIEBvcmRlcmVkDQorCSAqLw0KKwlpbnQgQUdJTkdfUE9QVUxBVElPTl9NT0RFTF9GRUFUVVJFX0NPVU5UID0gREVNT0dSQVBISUNfUE9QVUxBVElPTl9NT0RFTF9GRUFUVVJFX0NPVU5UICsgMTsNCisNCisJLyoqDQorCSAqIFRoZSBtZXRhIG9iamVjdCBpZCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLmltcGwuQWdlR3JvdXBJbXBsIDxlbT5BZ2UgR3JvdXA8L2VtPn0nIGNsYXNzLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuaW1wbC5BZ2VHcm91cEltcGwNCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuaW1wbC5TdGFuZGFyZFBhY2thZ2VJbXBsI2dldEFnZUdyb3VwKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJaW50IEFHRV9HUk9VUCA9IDE2Ow0KKw0KKwkvKioNCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPklkZW50aWZpZXI8L2I+PC9lbT4nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCWludCBBR0VfR1JPVVBfX0lERU5USUZJRVIgPSBQT1BVTEFUSU9OX0dST1VQX19JREVOVElGSUVSOw0KKw0KKwkvKioNCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkZyYWN0aW9uPC9iPjwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqIEBvcmRlcmVkDQorCSAqLw0KKwlpbnQgQUdFX0dST1VQX19GUkFDVElPTiA9IFBPUFVMQVRJT05fR1JPVVBfX0ZSQUNUSU9OOw0KKw0KKwkvKioNCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkZyb20gQWdlPC9iPjwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqIEBvcmRlcmVkDQorCSAqLw0KKwlpbnQgQUdFX0dST1VQX19GUk9NX0FHRSA9IFBPUFVMQVRJT05fR1JPVVBfRkVBVFVSRV9DT1VOVCArIDA7DQorDQorCS8qKg0KKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VG8gQWdlPC9iPjwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqIEBvcmRlcmVkDQorCSAqLw0KKwlpbnQgQUdFX0dST1VQX19UT19BR0UgPSBQT1BVTEFUSU9OX0dST1VQX0ZFQVRVUkVfQ09VTlQgKyAxOw0KKw0KKwkvKioNCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkRlYXRoIEZhY3RvcjwvYj48L2VtPicgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJaW50IEFHRV9HUk9VUF9fREVBVEhfRkFDVE9SID0gUE9QVUxBVElPTl9HUk9VUF9GRUFUVVJFX0NPVU5UICsgMjsNCisNCisJLyoqDQorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5MaW1pdGVkPC9iPjwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqIEBvcmRlcmVkDQorCSAqLw0KKwlpbnQgQUdFX0dST1VQX19MSU1JVEVEID0gUE9QVUxBVElPTl9HUk9VUF9GRUFUVVJFX0NPVU5UICsgMzsNCisNCisJLyoqDQorCSAqIFRoZSBudW1iZXIgb2Ygc3RydWN0dXJhbCBmZWF0dXJlcyBvZiB0aGUgJzxlbT5BZ2UgR3JvdXA8L2VtPicgY2xhc3MuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqIEBvcmRlcmVkDQorCSAqLw0KKwlpbnQgQUdFX0dST1VQX0ZFQVRVUkVfQ09VTlQgPSBQT1BVTEFUSU9OX0dST1VQX0ZFQVRVUkVfQ09VTlQgKyA0Ow0KKw0KKw0KKwkvKioNCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLlBvcHVsYXRpb25Nb2RlbCA8ZW0+UG9wdWxhdGlvbiBNb2RlbDwvZW0+fScuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJzxlbT5Qb3B1bGF0aW9uIE1vZGVsPC9lbT4nLg0KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5Qb3B1bGF0aW9uTW9kZWwNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJRUNsYXNzIGdldFBvcHVsYXRpb25Nb2RlbCgpOw0KKw0KKwkvKioNCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuUG9wdWxhdGlvbk1vZGVsI2dldFBvcHVsYXRpb25JZGVudGlmaWVyIDxlbT5Qb3B1bGF0aW9uIElkZW50aWZpZXI8L2VtPn0nLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxlbT5Qb3B1bGF0aW9uIElkZW50aWZpZXI8L2VtPicuDQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLlBvcHVsYXRpb25Nb2RlbCNnZXRQb3B1bGF0aW9uSWRlbnRpZmllcigpDQorCSAqIEBzZWUgI2dldFBvcHVsYXRpb25Nb2RlbCgpDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCUVBdHRyaWJ1dGUgZ2V0UG9wdWxhdGlvbk1vZGVsX1BvcHVsYXRpb25JZGVudGlmaWVyKCk7DQorDQorCS8qKg0KKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5Qb3B1bGF0aW9uTW9kZWwjZ2V0TmFtZSA8ZW0+TmFtZTwvZW0+fScuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPGVtPk5hbWU8L2VtPicuDQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLlBvcHVsYXRpb25Nb2RlbCNnZXROYW1lKCkNCisJICogQHNlZSAjZ2V0UG9wdWxhdGlvbk1vZGVsKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJRUF0dHJpYnV0ZSBnZXRQb3B1bGF0aW9uTW9kZWxfTmFtZSgpOw0KKw0KKwkvKioNCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuUG9wdWxhdGlvbk1vZGVsI2dldFRhcmdldElTT0tleSA8ZW0+VGFyZ2V0IElTTyBLZXk8L2VtPn0nLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxlbT5UYXJnZXQgSVNPIEtleTwvZW0+Jy4NCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuUG9wdWxhdGlvbk1vZGVsI2dldFRhcmdldElTT0tleSgpDQorCSAqIEBzZWUgI2dldFBvcHVsYXRpb25Nb2RlbCgpDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCUVBdHRyaWJ1dGUgZ2V0UG9wdWxhdGlvbk1vZGVsX1RhcmdldElTT0tleSgpOw0KKw0KKwkvKioNCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsIDxlbT5Qb3B1bGF0aW9uIE1vZGVsPC9lbT59Jy4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAnPGVtPlBvcHVsYXRpb24gTW9kZWw8L2VtPicuDQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCUVDbGFzcyBnZXRTdGFuZGFyZFBvcHVsYXRpb25Nb2RlbCgpOw0KKw0KKwkvKioNCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWwjZ2V0QmlydGhSYXRlIDxlbT5CaXJ0aCBSYXRlPC9lbT59Jy4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+QmlydGggUmF0ZTwvZW0+Jy4NCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWwjZ2V0QmlydGhSYXRlKCkNCisJICogQHNlZSAjZ2V0U3RhbmRhcmRQb3B1bGF0aW9uTW9kZWwoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlFQXR0cmlidXRlIGdldFN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsX0JpcnRoUmF0ZSgpOw0KKw0KKwkvKioNCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWwjZ2V0RGVhdGhSYXRlIDxlbT5EZWF0aCBSYXRlPC9lbT59Jy4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+RGVhdGggUmF0ZTwvZW0+Jy4NCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWwjZ2V0RGVhdGhSYXRlKCkNCisJICogQHNlZSAjZ2V0U3RhbmRhcmRQb3B1bGF0aW9uTW9kZWwoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlFQXR0cmlidXRlIGdldFN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsX0RlYXRoUmF0ZSgpOw0KKw0KKwkvKioNCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWwjZ2V0VGltZVBlcmlvZCA8ZW0+VGltZSBQZXJpb2Q8L2VtPn0nLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxlbT5UaW1lIFBlcmlvZDwvZW0+Jy4NCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWwjZ2V0VGltZVBlcmlvZCgpDQorCSAqIEBzZWUgI2dldFN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJRUF0dHJpYnV0ZSBnZXRTdGFuZGFyZFBvcHVsYXRpb25Nb2RlbF9UaW1lUGVyaW9kKCk7DQorDQorCS8qKg0KKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuUG9wdWxhdGlvbk1vZGVsTGFiZWwgPGVtPlBvcHVsYXRpb24gTW9kZWwgTGFiZWw8L2VtPn0nLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICc8ZW0+UG9wdWxhdGlvbiBNb2RlbCBMYWJlbDwvZW0+Jy4NCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuUG9wdWxhdGlvbk1vZGVsTGFiZWwNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJRUNsYXNzIGdldFBvcHVsYXRpb25Nb2RlbExhYmVsKCk7DQorDQorCS8qKg0KKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIHJlZmVyZW5jZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5Qb3B1bGF0aW9uTW9kZWxMYWJlbCNnZXRQb3B1bGF0aW9uTGFiZWwgPGVtPlBvcHVsYXRpb24gTGFiZWw8L2VtPn0nLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSByZWZlcmVuY2UgJzxlbT5Qb3B1bGF0aW9uIExhYmVsPC9lbT4nLg0KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5Qb3B1bGF0aW9uTW9kZWxMYWJlbCNnZXRQb3B1bGF0aW9uTGFiZWwoKQ0KKwkgKiBAc2VlICNnZXRQb3B1bGF0aW9uTW9kZWxMYWJlbCgpDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCUVSZWZlcmVuY2UgZ2V0UG9wdWxhdGlvbk1vZGVsTGFiZWxfUG9wdWxhdGlvbkxhYmVsKCk7DQorDQorCS8qKg0KKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5Qb3B1bGF0aW9uTW9kZWxMYWJlbCNnZXRQb3B1bGF0aW9uSWRlbnRpZmllciA8ZW0+UG9wdWxhdGlvbiBJZGVudGlmaWVyPC9lbT59Jy4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+UG9wdWxhdGlvbiBJZGVudGlmaWVyPC9lbT4nLg0KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5Qb3B1bGF0aW9uTW9kZWxMYWJlbCNnZXRQb3B1bGF0aW9uSWRlbnRpZmllcigpDQorCSAqIEBzZWUgI2dldFBvcHVsYXRpb25Nb2RlbExhYmVsKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJRUF0dHJpYnV0ZSBnZXRQb3B1bGF0aW9uTW9kZWxMYWJlbF9Qb3B1bGF0aW9uSWRlbnRpZmllcigpOw0KKw0KKwkvKioNCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWwgPGVtPlBvcHVsYXRpb24gTW9kZWwgTGFiZWw8L2VtPn0nLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICc8ZW0+UG9wdWxhdGlvbiBNb2RlbCBMYWJlbDwvZW0+Jy4NCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxMYWJlbA0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlFQ2xhc3MgZ2V0U3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxMYWJlbCgpOw0KKw0KKwkvKioNCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLlBvcHVsYXRpb25Nb2RlbExhYmVsVmFsdWUgPGVtPlBvcHVsYXRpb24gTW9kZWwgTGFiZWwgVmFsdWU8L2VtPn0nLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICc8ZW0+UG9wdWxhdGlvbiBNb2RlbCBMYWJlbCBWYWx1ZTwvZW0+Jy4NCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuUG9wdWxhdGlvbk1vZGVsTGFiZWxWYWx1ZQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlFQ2xhc3MgZ2V0UG9wdWxhdGlvbk1vZGVsTGFiZWxWYWx1ZSgpOw0KKw0KKwkvKioNCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWxWYWx1ZSA8ZW0+UG9wdWxhdGlvbiBNb2RlbCBMYWJlbCBWYWx1ZTwvZW0+fScuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJzxlbT5Qb3B1bGF0aW9uIE1vZGVsIExhYmVsIFZhbHVlPC9lbT4nLg0KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZFBvcHVsYXRpb25Nb2RlbExhYmVsVmFsdWUNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJRUNsYXNzIGdldFN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWxWYWx1ZSgpOw0KKw0KKwkvKioNCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxMYWJlbFZhbHVlI2dldENvdW50IDxlbT5Db3VudDwvZW0+fScuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPGVtPkNvdW50PC9lbT4nLg0KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZFBvcHVsYXRpb25Nb2RlbExhYmVsVmFsdWUjZ2V0Q291bnQoKQ0KKwkgKiBAc2VlICNnZXRTdGFuZGFyZFBvcHVsYXRpb25Nb2RlbExhYmVsVmFsdWUoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlFQXR0cmlidXRlIGdldFN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWxWYWx1ZV9Db3VudCgpOw0KKw0KKwkvKioNCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxMYWJlbFZhbHVlI2dldEJpcnRocyA8ZW0+QmlydGhzPC9lbT59Jy4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+QmlydGhzPC9lbT4nLg0KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZFBvcHVsYXRpb25Nb2RlbExhYmVsVmFsdWUjZ2V0QmlydGhzKCkNCisJICogQHNlZSAjZ2V0U3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxMYWJlbFZhbHVlKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJRUF0dHJpYnV0ZSBnZXRTdGFuZGFyZFBvcHVsYXRpb25Nb2RlbExhYmVsVmFsdWVfQmlydGhzKCk7DQorDQorCS8qKg0KKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZFBvcHVsYXRpb25Nb2RlbExhYmVsVmFsdWUjZ2V0RGVhdGhzIDxlbT5EZWF0aHM8L2VtPn0nLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxlbT5EZWF0aHM8L2VtPicuDQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWxWYWx1ZSNnZXREZWF0aHMoKQ0KKwkgKiBAc2VlICNnZXRTdGFuZGFyZFBvcHVsYXRpb25Nb2RlbExhYmVsVmFsdWUoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlFQXR0cmlidXRlIGdldFN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWxWYWx1ZV9EZWF0aHMoKTsNCisNCisJLyoqDQorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWxWYWx1ZSNnZXREZW5zaXR5IDxlbT5EZW5zaXR5PC9lbT59Jy4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+RGVuc2l0eTwvZW0+Jy4NCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxMYWJlbFZhbHVlI2dldERlbnNpdHkoKQ0KKwkgKiBAc2VlICNnZXRTdGFuZGFyZFBvcHVsYXRpb25Nb2RlbExhYmVsVmFsdWUoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlFQXR0cmlidXRlIGdldFN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWxWYWx1ZV9EZW5zaXR5KCk7DQorDQorCS8qKg0KKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuU3RvY2hhc3RpY1N0YW5kYXJkUG9wdWxhdGlvbk1vZGVsIDxlbT5TdG9jaGFzdGljIFN0YW5kYXJkIFBvcHVsYXRpb24gTW9kZWw8L2VtPn0nLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICc8ZW0+U3RvY2hhc3RpYyBTdGFuZGFyZCBQb3B1bGF0aW9uIE1vZGVsPC9lbT4nLg0KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5TdG9jaGFzdGljU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWwNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJRUNsYXNzIGdldFN0b2NoYXN0aWNTdGFuZGFyZFBvcHVsYXRpb25Nb2RlbCgpOw0KKw0KKwkvKioNCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuU3RvY2hhc3RpY1N0YW5kYXJkUG9wdWxhdGlvbk1vZGVsI2dldEdhaW4gPGVtPkdhaW48L2VtPn0nLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxlbT5HYWluPC9lbT4nLg0KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5TdG9jaGFzdGljU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWwjZ2V0R2FpbigpDQorCSAqIEBzZWUgI2dldFN0b2NoYXN0aWNTdGFuZGFyZFBvcHVsYXRpb25Nb2RlbCgpDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCUVBdHRyaWJ1dGUgZ2V0U3RvY2hhc3RpY1N0YW5kYXJkUG9wdWxhdGlvbk1vZGVsX0dhaW4oKTsNCisNCisJLyoqDQorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5EZW1vZ3JhcGhpY1BvcHVsYXRpb25Nb2RlbCA8ZW0+RGVtb2dyYXBoaWMgUG9wdWxhdGlvbiBNb2RlbDwvZW0+fScuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJzxlbT5EZW1vZ3JhcGhpYyBQb3B1bGF0aW9uIE1vZGVsPC9lbT4nLg0KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5EZW1vZ3JhcGhpY1BvcHVsYXRpb25Nb2RlbA0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlFQ2xhc3MgZ2V0RGVtb2dyYXBoaWNQb3B1bGF0aW9uTW9kZWwoKTsNCisNCisJLyoqDQorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3QgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuRGVtb2dyYXBoaWNQb3B1bGF0aW9uTW9kZWwjZ2V0UG9wdWxhdGlvbkdyb3VwcyA8ZW0+UG9wdWxhdGlvbiBHcm91cHM8L2VtPn0nLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBjb250YWlubWVudCByZWZlcmVuY2UgbGlzdCAnPGVtPlBvcHVsYXRpb24gR3JvdXBzPC9lbT4nLg0KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5EZW1vZ3JhcGhpY1BvcHVsYXRpb25Nb2RlbCNnZXRQb3B1bGF0aW9uR3JvdXBzKCkNCisJICogQHNlZSAjZ2V0RGVtb2dyYXBoaWNQb3B1bGF0aW9uTW9kZWwoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlFUmVmZXJlbmNlIGdldERlbW9ncmFwaGljUG9wdWxhdGlvbk1vZGVsX1BvcHVsYXRpb25Hcm91cHMoKTsNCisNCisJLyoqDQorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5Qb3B1bGF0aW9uR3JvdXAgPGVtPlBvcHVsYXRpb24gR3JvdXA8L2VtPn0nLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICc8ZW0+UG9wdWxhdGlvbiBHcm91cDwvZW0+Jy4NCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuUG9wdWxhdGlvbkdyb3VwDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCUVDbGFzcyBnZXRQb3B1bGF0aW9uR3JvdXAoKTsNCisNCisJLyoqDQorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLlBvcHVsYXRpb25Hcm91cCNnZXRJZGVudGlmaWVyIDxlbT5JZGVudGlmaWVyPC9lbT59Jy4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+SWRlbnRpZmllcjwvZW0+Jy4NCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuUG9wdWxhdGlvbkdyb3VwI2dldElkZW50aWZpZXIoKQ0KKwkgKiBAc2VlICNnZXRQb3B1bGF0aW9uR3JvdXAoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlFQXR0cmlidXRlIGdldFBvcHVsYXRpb25Hcm91cF9JZGVudGlmaWVyKCk7DQorDQorCS8qKg0KKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5Qb3B1bGF0aW9uR3JvdXAjZ2V0RnJhY3Rpb24gPGVtPkZyYWN0aW9uPC9lbT59Jy4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+RnJhY3Rpb248L2VtPicuDQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLlBvcHVsYXRpb25Hcm91cCNnZXRGcmFjdGlvbigpDQorCSAqIEBzZWUgI2dldFBvcHVsYXRpb25Hcm91cCgpDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCUVBdHRyaWJ1dGUgZ2V0UG9wdWxhdGlvbkdyb3VwX0ZyYWN0aW9uKCk7DQorDQorCS8qKg0KKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuUG9wdWxhdGlvbkluaXRpYWxpemVyIDxlbT5Qb3B1bGF0aW9uIEluaXRpYWxpemVyPC9lbT59Jy4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAnPGVtPlBvcHVsYXRpb24gSW5pdGlhbGl6ZXI8L2VtPicuDQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLlBvcHVsYXRpb25Jbml0aWFsaXplcg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlFQ2xhc3MgZ2V0UG9wdWxhdGlvbkluaXRpYWxpemVyKCk7DQorDQorCS8qKg0KKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5Qb3B1bGF0aW9uSW5pdGlhbGl6ZXIjZ2V0VGFyZ2V0SVNPS2V5IDxlbT5UYXJnZXQgSVNPIEtleTwvZW0+fScuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPGVtPlRhcmdldCBJU08gS2V5PC9lbT4nLg0KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5Qb3B1bGF0aW9uSW5pdGlhbGl6ZXIjZ2V0VGFyZ2V0SVNPS2V5KCkNCisJICogQHNlZSAjZ2V0UG9wdWxhdGlvbkluaXRpYWxpemVyKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJRUF0dHJpYnV0ZSBnZXRQb3B1bGF0aW9uSW5pdGlhbGl6ZXJfVGFyZ2V0SVNPS2V5KCk7DQorDQorCS8qKg0KKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5Qb3B1bGF0aW9uSW5pdGlhbGl6ZXIjZ2V0UG9wdWxhdGlvbklkZW50aWZpZXIgPGVtPlBvcHVsYXRpb24gSWRlbnRpZmllcjwvZW0+fScuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPGVtPlBvcHVsYXRpb24gSWRlbnRpZmllcjwvZW0+Jy4NCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuUG9wdWxhdGlvbkluaXRpYWxpemVyI2dldFBvcHVsYXRpb25JZGVudGlmaWVyKCkNCisJICogQHNlZSAjZ2V0UG9wdWxhdGlvbkluaXRpYWxpemVyKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJRUF0dHJpYnV0ZSBnZXRQb3B1bGF0aW9uSW5pdGlhbGl6ZXJfUG9wdWxhdGlvbklkZW50aWZpZXIoKTsNCisNCisJLyoqDQorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZFBvcHVsYXRpb25Jbml0aWFsaXplciA8ZW0+UG9wdWxhdGlvbiBJbml0aWFsaXplcjwvZW0+fScuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJzxlbT5Qb3B1bGF0aW9uIEluaXRpYWxpemVyPC9lbT4nLg0KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZFBvcHVsYXRpb25Jbml0aWFsaXplcg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlFQ2xhc3MgZ2V0U3RhbmRhcmRQb3B1bGF0aW9uSW5pdGlhbGl6ZXIoKTsNCisNCisJLyoqDQorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkUG9wdWxhdGlvbkluaXRpYWxpemVyI2dldEluZGl2aWR1YWxzIDxlbT5JbmRpdmlkdWFsczwvZW0+fScuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPGVtPkluZGl2aWR1YWxzPC9lbT4nLg0KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZFBvcHVsYXRpb25Jbml0aWFsaXplciNnZXRJbmRpdmlkdWFscygpDQorCSAqIEBzZWUgI2dldFN0YW5kYXJkUG9wdWxhdGlvbkluaXRpYWxpemVyKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJRUF0dHJpYnV0ZSBnZXRTdGFuZGFyZFBvcHVsYXRpb25Jbml0aWFsaXplcl9JbmRpdmlkdWFscygpOw0KKw0KKwkvKioNCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmRQb3B1bGF0aW9uSW5pdGlhbGl6ZXIjaXNVc2VEZW5zaXR5IDxlbT5Vc2UgRGVuc2l0eTwvZW0+fScuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPGVtPlVzZSBEZW5zaXR5PC9lbT4nLg0KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZFBvcHVsYXRpb25Jbml0aWFsaXplciNpc1VzZURlbnNpdHkoKQ0KKwkgKiBAc2VlICNnZXRTdGFuZGFyZFBvcHVsYXRpb25Jbml0aWFsaXplcigpDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCUVBdHRyaWJ1dGUgZ2V0U3RhbmRhcmRQb3B1bGF0aW9uSW5pdGlhbGl6ZXJfVXNlRGVuc2l0eSgpOw0KKw0KKwkvKioNCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLlNlYXNvbmFsUG9wdWxhdGlvbk1vZGVsIDxlbT5TZWFzb25hbCBQb3B1bGF0aW9uIE1vZGVsPC9lbT59Jy4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAnPGVtPlNlYXNvbmFsIFBvcHVsYXRpb24gTW9kZWw8L2VtPicuDQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLlNlYXNvbmFsUG9wdWxhdGlvbk1vZGVsDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCUVDbGFzcyBnZXRTZWFzb25hbFBvcHVsYXRpb25Nb2RlbCgpOw0KKw0KKwkvKioNCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuU2Vhc29uYWxQb3B1bGF0aW9uTW9kZWwjZ2V0UGhhc2UgPGVtPlBoYXNlPC9lbT59Jy4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+UGhhc2U8L2VtPicuDQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLlNlYXNvbmFsUG9wdWxhdGlvbk1vZGVsI2dldFBoYXNlKCkNCisJICogQHNlZSAjZ2V0U2Vhc29uYWxQb3B1bGF0aW9uTW9kZWwoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlFQXR0cmlidXRlIGdldFNlYXNvbmFsUG9wdWxhdGlvbk1vZGVsX1BoYXNlKCk7DQorDQorCS8qKg0KKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5TZWFzb25hbFBvcHVsYXRpb25Nb2RlbCNnZXRNb2R1bGF0aW9uQW1wbGl0dWRlIDxlbT5Nb2R1bGF0aW9uIEFtcGxpdHVkZTwvZW0+fScuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPGVtPk1vZHVsYXRpb24gQW1wbGl0dWRlPC9lbT4nLg0KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5TZWFzb25hbFBvcHVsYXRpb25Nb2RlbCNnZXRNb2R1bGF0aW9uQW1wbGl0dWRlKCkNCisJICogQHNlZSAjZ2V0U2Vhc29uYWxQb3B1bGF0aW9uTW9kZWwoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlFQXR0cmlidXRlIGdldFNlYXNvbmFsUG9wdWxhdGlvbk1vZGVsX01vZHVsYXRpb25BbXBsaXR1ZGUoKTsNCisNCisJLyoqDQorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLlNlYXNvbmFsUG9wdWxhdGlvbk1vZGVsI2dldFBlcmlvZCA8ZW0+UGVyaW9kPC9lbT59Jy4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+UGVyaW9kPC9lbT4nLg0KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5TZWFzb25hbFBvcHVsYXRpb25Nb2RlbCNnZXRQZXJpb2QoKQ0KKwkgKiBAc2VlICNnZXRTZWFzb25hbFBvcHVsYXRpb25Nb2RlbCgpDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCUVBdHRyaWJ1dGUgZ2V0U2Vhc29uYWxQb3B1bGF0aW9uTW9kZWxfUGVyaW9kKCk7DQorDQorCS8qKg0KKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5TZWFzb25hbFBvcHVsYXRpb25Nb2RlbCNpc1VzZUxhdGl0dWRlIDxlbT5Vc2UgTGF0aXR1ZGU8L2VtPn0nLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxlbT5Vc2UgTGF0aXR1ZGU8L2VtPicuDQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLlNlYXNvbmFsUG9wdWxhdGlvbk1vZGVsI2lzVXNlTGF0aXR1ZGUoKQ0KKwkgKiBAc2VlICNnZXRTZWFzb25hbFBvcHVsYXRpb25Nb2RlbCgpDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCUVBdHRyaWJ1dGUgZ2V0U2Vhc29uYWxQb3B1bGF0aW9uTW9kZWxfVXNlTGF0aXR1ZGUoKTsNCisNCisJLyoqDQorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5FYXJ0aFNjaWVuY2VQb3B1bGF0aW9uSW5pdGlhbGl6ZXIgPGVtPkVhcnRoIFNjaWVuY2UgUG9wdWxhdGlvbiBJbml0aWFsaXplcjwvZW0+fScuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJzxlbT5FYXJ0aCBTY2llbmNlIFBvcHVsYXRpb24gSW5pdGlhbGl6ZXI8L2VtPicuDQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLkVhcnRoU2NpZW5jZVBvcHVsYXRpb25Jbml0aWFsaXplcg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlFQ2xhc3MgZ2V0RWFydGhTY2llbmNlUG9wdWxhdGlvbkluaXRpYWxpemVyKCk7DQorDQorCS8qKg0KKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuWWV0aVBvcHVsYXRpb25Jbml0aWFsaXplciA8ZW0+WWV0aSBQb3B1bGF0aW9uIEluaXRpYWxpemVyPC9lbT59Jy4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAnPGVtPllldGkgUG9wdWxhdGlvbiBJbml0aWFsaXplcjwvZW0+Jy4NCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuWWV0aVBvcHVsYXRpb25Jbml0aWFsaXplcg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlFQ2xhc3MgZ2V0WWV0aVBvcHVsYXRpb25Jbml0aWFsaXplcigpOw0KKw0KKwkvKioNCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLk1vc3F1aXRvUG9wdWxhdGlvbk1vZGVsIDxlbT5Nb3NxdWl0byBQb3B1bGF0aW9uIE1vZGVsPC9lbT59Jy4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAnPGVtPk1vc3F1aXRvIFBvcHVsYXRpb24gTW9kZWw8L2VtPicuDQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLk1vc3F1aXRvUG9wdWxhdGlvbk1vZGVsDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCUVDbGFzcyBnZXRNb3NxdWl0b1BvcHVsYXRpb25Nb2RlbCgpOw0KKw0KKwkvKioNCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuTW9zcXVpdG9Qb3B1bGF0aW9uTW9kZWwjZ2V0U2NhbGluZ0ZhY3RvciA8ZW0+U2NhbGluZyBGYWN0b3I8L2VtPn0nLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxlbT5TY2FsaW5nIEZhY3RvcjwvZW0+Jy4NCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuTW9zcXVpdG9Qb3B1bGF0aW9uTW9kZWwjZ2V0U2NhbGluZ0ZhY3RvcigpDQorCSAqIEBzZWUgI2dldE1vc3F1aXRvUG9wdWxhdGlvbk1vZGVsKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJRUF0dHJpYnV0ZSBnZXRNb3NxdWl0b1BvcHVsYXRpb25Nb2RlbF9TY2FsaW5nRmFjdG9yKCk7DQorDQorCS8qKg0KKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5Nb3NxdWl0b1BvcHVsYXRpb25Nb2RlbCNnZXRUaW1lUGVyaW9kIDxlbT5UaW1lIFBlcmlvZDwvZW0+fScuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPGVtPlRpbWUgUGVyaW9kPC9lbT4nLg0KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5Nb3NxdWl0b1BvcHVsYXRpb25Nb2RlbCNnZXRUaW1lUGVyaW9kKCkNCisJICogQHNlZSAjZ2V0TW9zcXVpdG9Qb3B1bGF0aW9uTW9kZWwoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlFQXR0cmlidXRlIGdldE1vc3F1aXRvUG9wdWxhdGlvbk1vZGVsX1RpbWVQZXJpb2QoKTsNCisNCisJLyoqDQorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLk1vc3F1aXRvUG9wdWxhdGlvbk1vZGVsI2dldE1vcnRhbGl0eVJhdGUgPGVtPk1vcnRhbGl0eSBSYXRlPC9lbT59Jy4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+TW9ydGFsaXR5IFJhdGU8L2VtPicuDQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLk1vc3F1aXRvUG9wdWxhdGlvbk1vZGVsI2dldE1vcnRhbGl0eVJhdGUoKQ0KKwkgKiBAc2VlICNnZXRNb3NxdWl0b1BvcHVsYXRpb25Nb2RlbCgpDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCUVBdHRyaWJ1dGUgZ2V0TW9zcXVpdG9Qb3B1bGF0aW9uTW9kZWxfTW9ydGFsaXR5UmF0ZSgpOw0KKw0KKwkvKioNCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuTW9zcXVpdG9Qb3B1bGF0aW9uTW9kZWwjZ2V0SG9zdCA8ZW0+SG9zdDwvZW0+fScuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPGVtPkhvc3Q8L2VtPicuDQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLk1vc3F1aXRvUG9wdWxhdGlvbk1vZGVsI2dldEhvc3QoKQ0KKwkgKiBAc2VlICNnZXRNb3NxdWl0b1BvcHVsYXRpb25Nb2RlbCgpDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCUVBdHRyaWJ1dGUgZ2V0TW9zcXVpdG9Qb3B1bGF0aW9uTW9kZWxfSG9zdCgpOw0KKw0KKwkvKioNCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLkFnaW5nUG9wdWxhdGlvbk1vZGVsIDxlbT5BZ2luZyBQb3B1bGF0aW9uIE1vZGVsPC9lbT59Jy4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAnPGVtPkFnaW5nIFBvcHVsYXRpb24gTW9kZWw8L2VtPicuDQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLkFnaW5nUG9wdWxhdGlvbk1vZGVsDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCUVDbGFzcyBnZXRBZ2luZ1BvcHVsYXRpb25Nb2RlbCgpOw0KKw0KKwkvKioNCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuQWdpbmdQb3B1bGF0aW9uTW9kZWwjaXNIYXNNYXhBZ2UgPGVtPkhhcyBNYXggQWdlPC9lbT59Jy4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+SGFzIE1heCBBZ2U8L2VtPicuDQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLkFnaW5nUG9wdWxhdGlvbk1vZGVsI2lzSGFzTWF4QWdlKCkNCisJICogQHNlZSAjZ2V0QWdpbmdQb3B1bGF0aW9uTW9kZWwoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlFQXR0cmlidXRlIGdldEFnaW5nUG9wdWxhdGlvbk1vZGVsX0hhc01heEFnZSgpOw0KKw0KKwkvKioNCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLkFnZUdyb3VwIDxlbT5BZ2UgR3JvdXA8L2VtPn0nLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICc8ZW0+QWdlIEdyb3VwPC9lbT4nLg0KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5BZ2VHcm91cA0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlFQ2xhc3MgZ2V0QWdlR3JvdXAoKTsNCisNCisJLyoqDQorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLkFnZUdyb3VwI2dldEZyb21BZ2UgPGVtPkZyb20gQWdlPC9lbT59Jy4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+RnJvbSBBZ2U8L2VtPicuDQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLkFnZUdyb3VwI2dldEZyb21BZ2UoKQ0KKwkgKiBAc2VlICNnZXRBZ2VHcm91cCgpDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCUVBdHRyaWJ1dGUgZ2V0QWdlR3JvdXBfRnJvbUFnZSgpOw0KKw0KKwkvKioNCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuQWdlR3JvdXAjZ2V0VG9BZ2UgPGVtPlRvIEFnZTwvZW0+fScuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPGVtPlRvIEFnZTwvZW0+Jy4NCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuQWdlR3JvdXAjZ2V0VG9BZ2UoKQ0KKwkgKiBAc2VlICNnZXRBZ2VHcm91cCgpDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCUVBdHRyaWJ1dGUgZ2V0QWdlR3JvdXBfVG9BZ2UoKTsNCisNCisJLyoqDQorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLkFnZUdyb3VwI2dldERlYXRoRmFjdG9yIDxlbT5EZWF0aCBGYWN0b3I8L2VtPn0nLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxlbT5EZWF0aCBGYWN0b3I8L2VtPicuDQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLkFnZUdyb3VwI2dldERlYXRoRmFjdG9yKCkNCisJICogQHNlZSAjZ2V0QWdlR3JvdXAoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlFQXR0cmlidXRlIGdldEFnZUdyb3VwX0RlYXRoRmFjdG9yKCk7DQorDQorCS8qKg0KKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5BZ2VHcm91cCNpc0xpbWl0ZWQgPGVtPkxpbWl0ZWQ8L2VtPn0nLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxlbT5MaW1pdGVkPC9lbT4nLg0KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5BZ2VHcm91cCNpc0xpbWl0ZWQoKQ0KKwkgKiBAc2VlICNnZXRBZ2VHcm91cCgpDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCUVBdHRyaWJ1dGUgZ2V0QWdlR3JvdXBfTGltaXRlZCgpOw0KKw0KKwkvKioNCisJICogUmV0dXJucyB0aGUgZmFjdG9yeSB0aGF0IGNyZWF0ZXMgdGhlIGluc3RhbmNlcyBvZiB0aGUgbW9kZWwuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcmV0dXJuIHRoZSBmYWN0b3J5IHRoYXQgY3JlYXRlcyB0aGUgaW5zdGFuY2VzIG9mIHRoZSBtb2RlbC4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJU3RhbmRhcmRGYWN0b3J5IGdldFN0YW5kYXJkRmFjdG9yeSgpOw0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogRGVmaW5lcyBsaXRlcmFscyBmb3IgdGhlIG1ldGEgb2JqZWN0cyB0aGF0IHJlcHJlc2VudA0KKwkgKiA8dWw+DQorCSAqICAgPGxpPmVhY2ggY2xhc3MsPC9saT4NCisJICogICA8bGk+ZWFjaCBmZWF0dXJlIG9mIGVhY2ggY2xhc3MsPC9saT4NCisJICogICA8bGk+ZWFjaCBlbnVtLDwvbGk+DQorCSAqICAgPGxpPmFuZCBlYWNoIGRhdGEgdHlwZTwvbGk+DQorCSAqIDwvdWw+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlpbnRlcmZhY2UgTGl0ZXJhbHMgew0KKwkJLyoqDQorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLmltcGwuUG9wdWxhdGlvbk1vZGVsSW1wbCA8ZW0+UG9wdWxhdGlvbiBNb2RlbDwvZW0+fScgY2xhc3MuDQorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5pbXBsLlBvcHVsYXRpb25Nb2RlbEltcGwNCisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLmltcGwuU3RhbmRhcmRQYWNrYWdlSW1wbCNnZXRQb3B1bGF0aW9uTW9kZWwoKQ0KKwkJICogQGdlbmVyYXRlZA0KKwkJICovDQorCQlFQ2xhc3MgUE9QVUxBVElPTl9NT0RFTCA9IGVJTlNUQU5DRS5nZXRQb3B1bGF0aW9uTW9kZWwoKTsNCisNCisJCS8qKg0KKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPlBvcHVsYXRpb24gSWRlbnRpZmllcjwvYj48L2VtPicgYXR0cmlidXRlIGZlYXR1cmUuDQorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCQkgKiBAZ2VuZXJhdGVkDQorCQkgKi8NCisJCUVBdHRyaWJ1dGUgUE9QVUxBVElPTl9NT0RFTF9fUE9QVUxBVElPTl9JREVOVElGSUVSID0gZUlOU1RBTkNFLmdldFBvcHVsYXRpb25Nb2RlbF9Qb3B1bGF0aW9uSWRlbnRpZmllcigpOw0KKw0KKwkJLyoqDQorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+TmFtZTwvYj48L2VtPicgYXR0cmlidXRlIGZlYXR1cmUuDQorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCQkgKiBAZ2VuZXJhdGVkDQorCQkgKi8NCisJCUVBdHRyaWJ1dGUgUE9QVUxBVElPTl9NT0RFTF9fTkFNRSA9IGVJTlNUQU5DRS5nZXRQb3B1bGF0aW9uTW9kZWxfTmFtZSgpOw0KKw0KKwkJLyoqDQorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+VGFyZ2V0IElTTyBLZXk8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlLg0KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkJICogQGdlbmVyYXRlZA0KKwkJICovDQorCQlFQXR0cmlidXRlIFBPUFVMQVRJT05fTU9ERUxfX1RBUkdFVF9JU09fS0VZID0gZUlOU1RBTkNFLmdldFBvcHVsYXRpb25Nb2RlbF9UYXJnZXRJU09LZXkoKTsNCisNCisJCS8qKg0KKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5pbXBsLlN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsSW1wbCA8ZW0+UG9wdWxhdGlvbiBNb2RlbDwvZW0+fScgY2xhc3MuDQorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5pbXBsLlN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsSW1wbA0KKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuaW1wbC5TdGFuZGFyZFBhY2thZ2VJbXBsI2dldFN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsKCkNCisJCSAqIEBnZW5lcmF0ZWQNCisJCSAqLw0KKwkJRUNsYXNzIFNUQU5EQVJEX1BPUFVMQVRJT05fTU9ERUwgPSBlSU5TVEFOQ0UuZ2V0U3RhbmRhcmRQb3B1bGF0aW9uTW9kZWwoKTsNCisNCisJCS8qKg0KKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPkJpcnRoIFJhdGU8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlLg0KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkJICogQGdlbmVyYXRlZA0KKwkJICovDQorCQlFQXR0cmlidXRlIFNUQU5EQVJEX1BPUFVMQVRJT05fTU9ERUxfX0JJUlRIX1JBVEUgPSBlSU5TVEFOQ0UuZ2V0U3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxfQmlydGhSYXRlKCk7DQorDQorCQkvKioNCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5EZWF0aCBSYXRlPC9iPjwvZW0+JyBhdHRyaWJ1dGUgZmVhdHVyZS4NCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJCSAqIEBnZW5lcmF0ZWQNCisJCSAqLw0KKwkJRUF0dHJpYnV0ZSBTVEFOREFSRF9QT1BVTEFUSU9OX01PREVMX19ERUFUSF9SQVRFID0gZUlOU1RBTkNFLmdldFN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsX0RlYXRoUmF0ZSgpOw0KKw0KKwkJLyoqDQorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+VGltZSBQZXJpb2Q8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlLg0KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkJICogQGdlbmVyYXRlZA0KKwkJICovDQorCQlFQXR0cmlidXRlIFNUQU5EQVJEX1BPUFVMQVRJT05fTU9ERUxfX1RJTUVfUEVSSU9EID0gZUlOU1RBTkNFLmdldFN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsX1RpbWVQZXJpb2QoKTsNCisNCisJCS8qKg0KKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5pbXBsLlBvcHVsYXRpb25Nb2RlbExhYmVsSW1wbCA8ZW0+UG9wdWxhdGlvbiBNb2RlbCBMYWJlbDwvZW0+fScgY2xhc3MuDQorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5pbXBsLlBvcHVsYXRpb25Nb2RlbExhYmVsSW1wbA0KKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuaW1wbC5TdGFuZGFyZFBhY2thZ2VJbXBsI2dldFBvcHVsYXRpb25Nb2RlbExhYmVsKCkNCisJCSAqIEBnZW5lcmF0ZWQNCisJCSAqLw0KKwkJRUNsYXNzIFBPUFVMQVRJT05fTU9ERUxfTEFCRUwgPSBlSU5TVEFOQ0UuZ2V0UG9wdWxhdGlvbk1vZGVsTGFiZWwoKTsNCisNCisJCS8qKg0KKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPlBvcHVsYXRpb24gTGFiZWw8L2I+PC9lbT4nIHJlZmVyZW5jZSBmZWF0dXJlLg0KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkJICogQGdlbmVyYXRlZA0KKwkJICovDQorCQlFUmVmZXJlbmNlIFBPUFVMQVRJT05fTU9ERUxfTEFCRUxfX1BPUFVMQVRJT05fTEFCRUwgPSBlSU5TVEFOQ0UuZ2V0UG9wdWxhdGlvbk1vZGVsTGFiZWxfUG9wdWxhdGlvbkxhYmVsKCk7DQorDQorCQkvKioNCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5Qb3B1bGF0aW9uIElkZW50aWZpZXI8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlLg0KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkJICogQGdlbmVyYXRlZA0KKwkJICovDQorCQlFQXR0cmlidXRlIFBPUFVMQVRJT05fTU9ERUxfTEFCRUxfX1BPUFVMQVRJT05fSURFTlRJRklFUiA9IGVJTlNUQU5DRS5nZXRQb3B1bGF0aW9uTW9kZWxMYWJlbF9Qb3B1bGF0aW9uSWRlbnRpZmllcigpOw0KKw0KKwkJLyoqDQorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLmltcGwuU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxMYWJlbEltcGwgPGVtPlBvcHVsYXRpb24gTW9kZWwgTGFiZWw8L2VtPn0nIGNsYXNzLg0KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuaW1wbC5TdGFuZGFyZFBvcHVsYXRpb25Nb2RlbExhYmVsSW1wbA0KKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuaW1wbC5TdGFuZGFyZFBhY2thZ2VJbXBsI2dldFN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWwoKQ0KKwkJICogQGdlbmVyYXRlZA0KKwkJICovDQorCQlFQ2xhc3MgU1RBTkRBUkRfUE9QVUxBVElPTl9NT0RFTF9MQUJFTCA9IGVJTlNUQU5DRS5nZXRTdGFuZGFyZFBvcHVsYXRpb25Nb2RlbExhYmVsKCk7DQorDQorCQkvKioNCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuaW1wbC5Qb3B1bGF0aW9uTW9kZWxMYWJlbFZhbHVlSW1wbCA8ZW0+UG9wdWxhdGlvbiBNb2RlbCBMYWJlbCBWYWx1ZTwvZW0+fScgY2xhc3MuDQorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5pbXBsLlBvcHVsYXRpb25Nb2RlbExhYmVsVmFsdWVJbXBsDQorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5pbXBsLlN0YW5kYXJkUGFja2FnZUltcGwjZ2V0UG9wdWxhdGlvbk1vZGVsTGFiZWxWYWx1ZSgpDQorCQkgKiBAZ2VuZXJhdGVkDQorCQkgKi8NCisJCUVDbGFzcyBQT1BVTEFUSU9OX01PREVMX0xBQkVMX1ZBTFVFID0gZUlOU1RBTkNFLmdldFBvcHVsYXRpb25Nb2RlbExhYmVsVmFsdWUoKTsNCisNCisJCS8qKg0KKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5pbXBsLlN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWxWYWx1ZUltcGwgPGVtPlBvcHVsYXRpb24gTW9kZWwgTGFiZWwgVmFsdWU8L2VtPn0nIGNsYXNzLg0KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuaW1wbC5TdGFuZGFyZFBvcHVsYXRpb25Nb2RlbExhYmVsVmFsdWVJbXBsDQorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5pbXBsLlN0YW5kYXJkUGFja2FnZUltcGwjZ2V0U3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxMYWJlbFZhbHVlKCkNCisJCSAqIEBnZW5lcmF0ZWQNCisJCSAqLw0KKwkJRUNsYXNzIFNUQU5EQVJEX1BPUFVMQVRJT05fTU9ERUxfTEFCRUxfVkFMVUUgPSBlSU5TVEFOQ0UuZ2V0U3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxMYWJlbFZhbHVlKCk7DQorDQorCQkvKioNCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5Db3VudDwvYj48L2VtPicgYXR0cmlidXRlIGZlYXR1cmUuDQorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCQkgKiBAZ2VuZXJhdGVkDQorCQkgKi8NCisJCUVBdHRyaWJ1dGUgU1RBTkRBUkRfUE9QVUxBVElPTl9NT0RFTF9MQUJFTF9WQUxVRV9fQ09VTlQgPSBlSU5TVEFOQ0UuZ2V0U3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxMYWJlbFZhbHVlX0NvdW50KCk7DQorDQorCQkvKioNCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5CaXJ0aHM8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlLg0KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkJICogQGdlbmVyYXRlZA0KKwkJICovDQorCQlFQXR0cmlidXRlIFNUQU5EQVJEX1BPUFVMQVRJT05fTU9ERUxfTEFCRUxfVkFMVUVfX0JJUlRIUyA9IGVJTlNUQU5DRS5nZXRTdGFuZGFyZFBvcHVsYXRpb25Nb2RlbExhYmVsVmFsdWVfQmlydGhzKCk7DQorDQorCQkvKioNCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5EZWF0aHM8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlLg0KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkJICogQGdlbmVyYXRlZA0KKwkJICovDQorCQlFQXR0cmlidXRlIFNUQU5EQVJEX1BPUFVMQVRJT05fTU9ERUxfTEFCRUxfVkFMVUVfX0RFQVRIUyA9IGVJTlNUQU5DRS5nZXRTdGFuZGFyZFBvcHVsYXRpb25Nb2RlbExhYmVsVmFsdWVfRGVhdGhzKCk7DQorDQorCQkvKioNCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5EZW5zaXR5PC9iPjwvZW0+JyBhdHRyaWJ1dGUgZmVhdHVyZS4NCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJCSAqIEBnZW5lcmF0ZWQNCisJCSAqLw0KKwkJRUF0dHJpYnV0ZSBTVEFOREFSRF9QT1BVTEFUSU9OX01PREVMX0xBQkVMX1ZBTFVFX19ERU5TSVRZID0gZUlOU1RBTkNFLmdldFN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWxWYWx1ZV9EZW5zaXR5KCk7DQorDQorCQkvKioNCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuaW1wbC5TdG9jaGFzdGljU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxJbXBsIDxlbT5TdG9jaGFzdGljIFN0YW5kYXJkIFBvcHVsYXRpb24gTW9kZWw8L2VtPn0nIGNsYXNzLg0KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuaW1wbC5TdG9jaGFzdGljU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxJbXBsDQorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5pbXBsLlN0YW5kYXJkUGFja2FnZUltcGwjZ2V0U3RvY2hhc3RpY1N0YW5kYXJkUG9wdWxhdGlvbk1vZGVsKCkNCisJCSAqIEBnZW5lcmF0ZWQNCisJCSAqLw0KKwkJRUNsYXNzIFNUT0NIQVNUSUNfU1RBTkRBUkRfUE9QVUxBVElPTl9NT0RFTCA9IGVJTlNUQU5DRS5nZXRTdG9jaGFzdGljU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWwoKTsNCisNCisJCS8qKg0KKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPkdhaW48L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlLg0KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkJICogQGdlbmVyYXRlZA0KKwkJICovDQorCQlFQXR0cmlidXRlIFNUT0NIQVNUSUNfU1RBTkRBUkRfUE9QVUxBVElPTl9NT0RFTF9fR0FJTiA9IGVJTlNUQU5DRS5nZXRTdG9jaGFzdGljU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxfR2FpbigpOw0KKw0KKwkJLyoqDQorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLmltcGwuRGVtb2dyYXBoaWNQb3B1bGF0aW9uTW9kZWxJbXBsIDxlbT5EZW1vZ3JhcGhpYyBQb3B1bGF0aW9uIE1vZGVsPC9lbT59JyBjbGFzcy4NCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLmltcGwuRGVtb2dyYXBoaWNQb3B1bGF0aW9uTW9kZWxJbXBsDQorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5pbXBsLlN0YW5kYXJkUGFja2FnZUltcGwjZ2V0RGVtb2dyYXBoaWNQb3B1bGF0aW9uTW9kZWwoKQ0KKwkJICogQGdlbmVyYXRlZA0KKwkJICovDQorCQlFQ2xhc3MgREVNT0dSQVBISUNfUE9QVUxBVElPTl9NT0RFTCA9IGVJTlNUQU5DRS5nZXREZW1vZ3JhcGhpY1BvcHVsYXRpb25Nb2RlbCgpOw0KKw0KKwkJLyoqDQorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+UG9wdWxhdGlvbiBHcm91cHM8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0IGZlYXR1cmUuDQorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCQkgKiBAZ2VuZXJhdGVkDQorCQkgKi8NCisJCUVSZWZlcmVuY2UgREVNT0dSQVBISUNfUE9QVUxBVElPTl9NT0RFTF9fUE9QVUxBVElPTl9HUk9VUFMgPSBlSU5TVEFOQ0UuZ2V0RGVtb2dyYXBoaWNQb3B1bGF0aW9uTW9kZWxfUG9wdWxhdGlvbkdyb3VwcygpOw0KKw0KKwkJLyoqDQorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLmltcGwuUG9wdWxhdGlvbkdyb3VwSW1wbCA8ZW0+UG9wdWxhdGlvbiBHcm91cDwvZW0+fScgY2xhc3MuDQorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5pbXBsLlBvcHVsYXRpb25Hcm91cEltcGwNCisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLmltcGwuU3RhbmRhcmRQYWNrYWdlSW1wbCNnZXRQb3B1bGF0aW9uR3JvdXAoKQ0KKwkJICogQGdlbmVyYXRlZA0KKwkJICovDQorCQlFQ2xhc3MgUE9QVUxBVElPTl9HUk9VUCA9IGVJTlNUQU5DRS5nZXRQb3B1bGF0aW9uR3JvdXAoKTsNCisNCisJCS8qKg0KKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPklkZW50aWZpZXI8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlLg0KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkJICogQGdlbmVyYXRlZA0KKwkJICovDQorCQlFQXR0cmlidXRlIFBPUFVMQVRJT05fR1JPVVBfX0lERU5USUZJRVIgPSBlSU5TVEFOQ0UuZ2V0UG9wdWxhdGlvbkdyb3VwX0lkZW50aWZpZXIoKTsNCisNCisJCS8qKg0KKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPkZyYWN0aW9uPC9iPjwvZW0+JyBhdHRyaWJ1dGUgZmVhdHVyZS4NCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJCSAqIEBnZW5lcmF0ZWQNCisJCSAqLw0KKwkJRUF0dHJpYnV0ZSBQT1BVTEFUSU9OX0dST1VQX19GUkFDVElPTiA9IGVJTlNUQU5DRS5nZXRQb3B1bGF0aW9uR3JvdXBfRnJhY3Rpb24oKTsNCisNCisJCS8qKg0KKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5pbXBsLlBvcHVsYXRpb25Jbml0aWFsaXplckltcGwgPGVtPlBvcHVsYXRpb24gSW5pdGlhbGl6ZXI8L2VtPn0nIGNsYXNzLg0KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuaW1wbC5Qb3B1bGF0aW9uSW5pdGlhbGl6ZXJJbXBsDQorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5pbXBsLlN0YW5kYXJkUGFja2FnZUltcGwjZ2V0UG9wdWxhdGlvbkluaXRpYWxpemVyKCkNCisJCSAqIEBnZW5lcmF0ZWQNCisJCSAqLw0KKwkJRUNsYXNzIFBPUFVMQVRJT05fSU5JVElBTElaRVIgPSBlSU5TVEFOQ0UuZ2V0UG9wdWxhdGlvbkluaXRpYWxpemVyKCk7DQorDQorCQkvKioNCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5UYXJnZXQgSVNPIEtleTwvYj48L2VtPicgYXR0cmlidXRlIGZlYXR1cmUuDQorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCQkgKiBAZ2VuZXJhdGVkDQorCQkgKi8NCisJCUVBdHRyaWJ1dGUgUE9QVUxBVElPTl9JTklUSUFMSVpFUl9fVEFSR0VUX0lTT19LRVkgPSBlSU5TVEFOQ0UuZ2V0UG9wdWxhdGlvbkluaXRpYWxpemVyX1RhcmdldElTT0tleSgpOw0KKw0KKwkJLyoqDQorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+UG9wdWxhdGlvbiBJZGVudGlmaWVyPC9iPjwvZW0+JyBhdHRyaWJ1dGUgZmVhdHVyZS4NCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJCSAqIEBnZW5lcmF0ZWQNCisJCSAqLw0KKwkJRUF0dHJpYnV0ZSBQT1BVTEFUSU9OX0lOSVRJQUxJWkVSX19QT1BVTEFUSU9OX0lERU5USUZJRVIgPSBlSU5TVEFOQ0UuZ2V0UG9wdWxhdGlvbkluaXRpYWxpemVyX1BvcHVsYXRpb25JZGVudGlmaWVyKCk7DQorDQorCQkvKioNCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuaW1wbC5TdGFuZGFyZFBvcHVsYXRpb25Jbml0aWFsaXplckltcGwgPGVtPlBvcHVsYXRpb24gSW5pdGlhbGl6ZXI8L2VtPn0nIGNsYXNzLg0KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuaW1wbC5TdGFuZGFyZFBvcHVsYXRpb25Jbml0aWFsaXplckltcGwNCisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLmltcGwuU3RhbmRhcmRQYWNrYWdlSW1wbCNnZXRTdGFuZGFyZFBvcHVsYXRpb25Jbml0aWFsaXplcigpDQorCQkgKiBAZ2VuZXJhdGVkDQorCQkgKi8NCisJCUVDbGFzcyBTVEFOREFSRF9QT1BVTEFUSU9OX0lOSVRJQUxJWkVSID0gZUlOU1RBTkNFLmdldFN0YW5kYXJkUG9wdWxhdGlvbkluaXRpYWxpemVyKCk7DQorDQorCQkvKioNCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5JbmRpdmlkdWFsczwvYj48L2VtPicgYXR0cmlidXRlIGZlYXR1cmUuDQorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCQkgKiBAZ2VuZXJhdGVkDQorCQkgKi8NCisJCUVBdHRyaWJ1dGUgU1RBTkRBUkRfUE9QVUxBVElPTl9JTklUSUFMSVpFUl9fSU5ESVZJRFVBTFMgPSBlSU5TVEFOQ0UuZ2V0U3RhbmRhcmRQb3B1bGF0aW9uSW5pdGlhbGl6ZXJfSW5kaXZpZHVhbHMoKTsNCisNCisJCS8qKg0KKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPlVzZSBEZW5zaXR5PC9iPjwvZW0+JyBhdHRyaWJ1dGUgZmVhdHVyZS4NCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJCSAqIEBnZW5lcmF0ZWQNCisJCSAqLw0KKwkJRUF0dHJpYnV0ZSBTVEFOREFSRF9QT1BVTEFUSU9OX0lOSVRJQUxJWkVSX19VU0VfREVOU0lUWSA9IGVJTlNUQU5DRS5nZXRTdGFuZGFyZFBvcHVsYXRpb25Jbml0aWFsaXplcl9Vc2VEZW5zaXR5KCk7DQorDQorCQkvKioNCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuaW1wbC5TZWFzb25hbFBvcHVsYXRpb25Nb2RlbEltcGwgPGVtPlNlYXNvbmFsIFBvcHVsYXRpb24gTW9kZWw8L2VtPn0nIGNsYXNzLg0KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuaW1wbC5TZWFzb25hbFBvcHVsYXRpb25Nb2RlbEltcGwNCisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLmltcGwuU3RhbmRhcmRQYWNrYWdlSW1wbCNnZXRTZWFzb25hbFBvcHVsYXRpb25Nb2RlbCgpDQorCQkgKiBAZ2VuZXJhdGVkDQorCQkgKi8NCisJCUVDbGFzcyBTRUFTT05BTF9QT1BVTEFUSU9OX01PREVMID0gZUlOU1RBTkNFLmdldFNlYXNvbmFsUG9wdWxhdGlvbk1vZGVsKCk7DQorDQorCQkvKioNCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5QaGFzZTwvYj48L2VtPicgYXR0cmlidXRlIGZlYXR1cmUuDQorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCQkgKiBAZ2VuZXJhdGVkDQorCQkgKi8NCisJCUVBdHRyaWJ1dGUgU0VBU09OQUxfUE9QVUxBVElPTl9NT0RFTF9fUEhBU0UgPSBlSU5TVEFOQ0UuZ2V0U2Vhc29uYWxQb3B1bGF0aW9uTW9kZWxfUGhhc2UoKTsNCisNCisJCS8qKg0KKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPk1vZHVsYXRpb24gQW1wbGl0dWRlPC9iPjwvZW0+JyBhdHRyaWJ1dGUgZmVhdHVyZS4NCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJCSAqIEBnZW5lcmF0ZWQNCisJCSAqLw0KKwkJRUF0dHJpYnV0ZSBTRUFTT05BTF9QT1BVTEFUSU9OX01PREVMX19NT0RVTEFUSU9OX0FNUExJVFVERSA9IGVJTlNUQU5DRS5nZXRTZWFzb25hbFBvcHVsYXRpb25Nb2RlbF9Nb2R1bGF0aW9uQW1wbGl0dWRlKCk7DQorDQorCQkvKioNCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5QZXJpb2Q8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlLg0KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkJICogQGdlbmVyYXRlZA0KKwkJICovDQorCQlFQXR0cmlidXRlIFNFQVNPTkFMX1BPUFVMQVRJT05fTU9ERUxfX1BFUklPRCA9IGVJTlNUQU5DRS5nZXRTZWFzb25hbFBvcHVsYXRpb25Nb2RlbF9QZXJpb2QoKTsNCisNCisJCS8qKg0KKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPlVzZSBMYXRpdHVkZTwvYj48L2VtPicgYXR0cmlidXRlIGZlYXR1cmUuDQorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCQkgKiBAZ2VuZXJhdGVkDQorCQkgKi8NCisJCUVBdHRyaWJ1dGUgU0VBU09OQUxfUE9QVUxBVElPTl9NT0RFTF9fVVNFX0xBVElUVURFID0gZUlOU1RBTkNFLmdldFNlYXNvbmFsUG9wdWxhdGlvbk1vZGVsX1VzZUxhdGl0dWRlKCk7DQorDQorCQkvKioNCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuaW1wbC5FYXJ0aFNjaWVuY2VQb3B1bGF0aW9uSW5pdGlhbGl6ZXJJbXBsIDxlbT5FYXJ0aCBTY2llbmNlIFBvcHVsYXRpb24gSW5pdGlhbGl6ZXI8L2VtPn0nIGNsYXNzLg0KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuaW1wbC5FYXJ0aFNjaWVuY2VQb3B1bGF0aW9uSW5pdGlhbGl6ZXJJbXBsDQorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5pbXBsLlN0YW5kYXJkUGFja2FnZUltcGwjZ2V0RWFydGhTY2llbmNlUG9wdWxhdGlvbkluaXRpYWxpemVyKCkNCisJCSAqIEBnZW5lcmF0ZWQNCisJCSAqLw0KKwkJRUNsYXNzIEVBUlRIX1NDSUVOQ0VfUE9QVUxBVElPTl9JTklUSUFMSVpFUiA9IGVJTlNUQU5DRS5nZXRFYXJ0aFNjaWVuY2VQb3B1bGF0aW9uSW5pdGlhbGl6ZXIoKTsNCisNCisJCS8qKg0KKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5pbXBsLllldGlQb3B1bGF0aW9uSW5pdGlhbGl6ZXJJbXBsIDxlbT5ZZXRpIFBvcHVsYXRpb24gSW5pdGlhbGl6ZXI8L2VtPn0nIGNsYXNzLg0KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuaW1wbC5ZZXRpUG9wdWxhdGlvbkluaXRpYWxpemVySW1wbA0KKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuaW1wbC5TdGFuZGFyZFBhY2thZ2VJbXBsI2dldFlldGlQb3B1bGF0aW9uSW5pdGlhbGl6ZXIoKQ0KKwkJICogQGdlbmVyYXRlZA0KKwkJICovDQorCQlFQ2xhc3MgWUVUSV9QT1BVTEFUSU9OX0lOSVRJQUxJWkVSID0gZUlOU1RBTkNFLmdldFlldGlQb3B1bGF0aW9uSW5pdGlhbGl6ZXIoKTsNCisNCisJCS8qKg0KKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5pbXBsLk1vc3F1aXRvUG9wdWxhdGlvbk1vZGVsSW1wbCA8ZW0+TW9zcXVpdG8gUG9wdWxhdGlvbiBNb2RlbDwvZW0+fScgY2xhc3MuDQorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5pbXBsLk1vc3F1aXRvUG9wdWxhdGlvbk1vZGVsSW1wbA0KKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuaW1wbC5TdGFuZGFyZFBhY2thZ2VJbXBsI2dldE1vc3F1aXRvUG9wdWxhdGlvbk1vZGVsKCkNCisJCSAqIEBnZW5lcmF0ZWQNCisJCSAqLw0KKwkJRUNsYXNzIE1PU1FVSVRPX1BPUFVMQVRJT05fTU9ERUwgPSBlSU5TVEFOQ0UuZ2V0TW9zcXVpdG9Qb3B1bGF0aW9uTW9kZWwoKTsNCisNCisJCS8qKg0KKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPlNjYWxpbmcgRmFjdG9yPC9iPjwvZW0+JyBhdHRyaWJ1dGUgZmVhdHVyZS4NCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJCSAqIEBnZW5lcmF0ZWQNCisJCSAqLw0KKwkJRUF0dHJpYnV0ZSBNT1NRVUlUT19QT1BVTEFUSU9OX01PREVMX19TQ0FMSU5HX0ZBQ1RPUiA9IGVJTlNUQU5DRS5nZXRNb3NxdWl0b1BvcHVsYXRpb25Nb2RlbF9TY2FsaW5nRmFjdG9yKCk7DQorDQorCQkvKioNCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5UaW1lIFBlcmlvZDwvYj48L2VtPicgYXR0cmlidXRlIGZlYXR1cmUuDQorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCQkgKiBAZ2VuZXJhdGVkDQorCQkgKi8NCisJCUVBdHRyaWJ1dGUgTU9TUVVJVE9fUE9QVUxBVElPTl9NT0RFTF9fVElNRV9QRVJJT0QgPSBlSU5TVEFOQ0UuZ2V0TW9zcXVpdG9Qb3B1bGF0aW9uTW9kZWxfVGltZVBlcmlvZCgpOw0KKw0KKwkJLyoqDQorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+TW9ydGFsaXR5IFJhdGU8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlLg0KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkJICogQGdlbmVyYXRlZA0KKwkJICovDQorCQlFQXR0cmlidXRlIE1PU1FVSVRPX1BPUFVMQVRJT05fTU9ERUxfX01PUlRBTElUWV9SQVRFID0gZUlOU1RBTkNFLmdldE1vc3F1aXRvUG9wdWxhdGlvbk1vZGVsX01vcnRhbGl0eVJhdGUoKTsNCisNCisJCS8qKg0KKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPkhvc3Q8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlLg0KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkJICogQGdlbmVyYXRlZA0KKwkJICovDQorCQlFQXR0cmlidXRlIE1PU1FVSVRPX1BPUFVMQVRJT05fTU9ERUxfX0hPU1QgPSBlSU5TVEFOQ0UuZ2V0TW9zcXVpdG9Qb3B1bGF0aW9uTW9kZWxfSG9zdCgpOw0KKw0KKwkJLyoqDQorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLmltcGwuQWdpbmdQb3B1bGF0aW9uTW9kZWxJbXBsIDxlbT5BZ2luZyBQb3B1bGF0aW9uIE1vZGVsPC9lbT59JyBjbGFzcy4NCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLmltcGwuQWdpbmdQb3B1bGF0aW9uTW9kZWxJbXBsDQorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5pbXBsLlN0YW5kYXJkUGFja2FnZUltcGwjZ2V0QWdpbmdQb3B1bGF0aW9uTW9kZWwoKQ0KKwkJICogQGdlbmVyYXRlZA0KKwkJICovDQorCQlFQ2xhc3MgQUdJTkdfUE9QVUxBVElPTl9NT0RFTCA9IGVJTlNUQU5DRS5nZXRBZ2luZ1BvcHVsYXRpb25Nb2RlbCgpOw0KKw0KKwkJLyoqDQorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+SGFzIE1heCBBZ2U8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlLg0KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkJICogQGdlbmVyYXRlZA0KKwkJICovDQorCQlFQXR0cmlidXRlIEFHSU5HX1BPUFVMQVRJT05fTU9ERUxfX0hBU19NQVhfQUdFID0gZUlOU1RBTkNFLmdldEFnaW5nUG9wdWxhdGlvbk1vZGVsX0hhc01heEFnZSgpOw0KKw0KKwkJLyoqDQorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLmltcGwuQWdlR3JvdXBJbXBsIDxlbT5BZ2UgR3JvdXA8L2VtPn0nIGNsYXNzLg0KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuaW1wbC5BZ2VHcm91cEltcGwNCisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLmltcGwuU3RhbmRhcmRQYWNrYWdlSW1wbCNnZXRBZ2VHcm91cCgpDQorCQkgKiBAZ2VuZXJhdGVkDQorCQkgKi8NCisJCUVDbGFzcyBBR0VfR1JPVVAgPSBlSU5TVEFOQ0UuZ2V0QWdlR3JvdXAoKTsNCisNCisJCS8qKg0KKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPkZyb20gQWdlPC9iPjwvZW0+JyBhdHRyaWJ1dGUgZmVhdHVyZS4NCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJCSAqIEBnZW5lcmF0ZWQNCisJCSAqLw0KKwkJRUF0dHJpYnV0ZSBBR0VfR1JPVVBfX0ZST01fQUdFID0gZUlOU1RBTkNFLmdldEFnZUdyb3VwX0Zyb21BZ2UoKTsNCisNCisJCS8qKg0KKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPlRvIEFnZTwvYj48L2VtPicgYXR0cmlidXRlIGZlYXR1cmUuDQorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCQkgKiBAZ2VuZXJhdGVkDQorCQkgKi8NCisJCUVBdHRyaWJ1dGUgQUdFX0dST1VQX19UT19BR0UgPSBlSU5TVEFOQ0UuZ2V0QWdlR3JvdXBfVG9BZ2UoKTsNCisNCisJCS8qKg0KKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPkRlYXRoIEZhY3RvcjwvYj48L2VtPicgYXR0cmlidXRlIGZlYXR1cmUuDQorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCQkgKiBAZ2VuZXJhdGVkDQorCQkgKi8NCisJCUVBdHRyaWJ1dGUgQUdFX0dST1VQX19ERUFUSF9GQUNUT1IgPSBlSU5TVEFOQ0UuZ2V0QWdlR3JvdXBfRGVhdGhGYWN0b3IoKTsNCisNCisJCS8qKg0KKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPkxpbWl0ZWQ8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlLg0KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkJICogQGdlbmVyYXRlZA0KKwkJICovDQorCQlFQXR0cmlidXRlIEFHRV9HUk9VUF9fTElNSVRFRCA9IGVJTlNUQU5DRS5nZXRBZ2VHcm91cF9MaW1pdGVkKCk7DQorDQorCX0NCisNCit9IC8vU3RhbmRhcmRQYWNrYWdlDQpkaWZmIC0tZ2l0IGEvbW9kZWxzL3BvcHVsYXRpb25zL29yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9wb3B1bGF0aW9ubW9kZWxzL3N0YW5kYXJkL1N0YW5kYXJkUG9wdWxhdGlvbkluaXRpYWxpemVyLmphdmEgYi9tb2RlbHMvcG9wdWxhdGlvbnMvb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3BvcHVsYXRpb25tb2RlbHMvc3RhbmRhcmQvU3RhbmRhcmRQb3B1bGF0aW9uSW5pdGlhbGl6ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYTBkMjQ4Ci0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL3BvcHVsYXRpb25zL29yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9wb3B1bGF0aW9ubW9kZWxzL3N0YW5kYXJkL1N0YW5kYXJkUG9wdWxhdGlvbkluaXRpYWxpemVyLmphdmEKQEAgLTAsMCArMSw4NyBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQ7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTAgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIEEgcmVwcmVzZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPlBvcHVsYXRpb24gSW5pdGlhbGl6ZXI8L2I+PC9lbT4nLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKgorICogPHA+CisgKiBUaGUgZm9sbG93aW5nIGZlYXR1cmVzIGFyZSBzdXBwb3J0ZWQ6CisgKiA8dWw+CisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkUG9wdWxhdGlvbkluaXRpYWxpemVyI2dldEluZGl2aWR1YWxzIDxlbT5JbmRpdmlkdWFsczwvZW0+fTwvbGk+CisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkUG9wdWxhdGlvbkluaXRpYWxpemVyI2lzVXNlRGVuc2l0eSA8ZW0+VXNlIERlbnNpdHk8L2VtPn08L2xpPgorICogPC91bD4KKyAqIDwvcD4KKyAqCisgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZFBhY2thZ2UjZ2V0U3RhbmRhcmRQb3B1bGF0aW9uSW5pdGlhbGl6ZXIoKQorICogQG1vZGVsCisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBpbnRlcmZhY2UgU3RhbmRhcmRQb3B1bGF0aW9uSW5pdGlhbGl6ZXIgZXh0ZW5kcyBQb3B1bGF0aW9uSW5pdGlhbGl6ZXIgeworCS8qKgorCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPkluZGl2aWR1YWxzPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogVGhlIGRlZmF1bHQgdmFsdWUgaXMgPGNvZGU+IjEiPC9jb2RlPi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDxwPgorCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPkluZGl2aWR1YWxzPC9lbT4nIGF0dHJpYnV0ZSBpc24ndCBjbGVhciwKKwkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uCisJICogPC9wPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPkluZGl2aWR1YWxzPC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiBAc2VlICNzZXRJbmRpdmlkdWFscyhkb3VibGUpCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmRQYWNrYWdlI2dldFN0YW5kYXJkUG9wdWxhdGlvbkluaXRpYWxpemVyX0luZGl2aWR1YWxzKCkKKwkgKiBAbW9kZWwgZGVmYXVsdD0iMSIKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJZG91YmxlIGdldEluZGl2aWR1YWxzKCk7CisKKwkvKioKKwkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmRQb3B1bGF0aW9uSW5pdGlhbGl6ZXIjZ2V0SW5kaXZpZHVhbHMgPGVtPkluZGl2aWR1YWxzPC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5JbmRpdmlkdWFsczwvZW0+JyBhdHRyaWJ1dGUuCisJICogQHNlZSAjZ2V0SW5kaXZpZHVhbHMoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwl2b2lkIHNldEluZGl2aWR1YWxzKGRvdWJsZSB2YWx1ZSk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5Vc2UgRGVuc2l0eTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIGlzIDxjb2RlPiJmYWxzZSI8L2NvZGU+LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPHA+CisJICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+VXNlIERlbnNpdHk8L2VtPicgYXR0cmlidXRlIGlzbid0IGNsZWFyLAorCSAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4KKwkgKiA8L3A+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+VXNlIERlbnNpdHk8L2VtPicgYXR0cmlidXRlLgorCSAqIEBzZWUgI3NldFVzZURlbnNpdHkoYm9vbGVhbikKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZFBhY2thZ2UjZ2V0U3RhbmRhcmRQb3B1bGF0aW9uSW5pdGlhbGl6ZXJfVXNlRGVuc2l0eSgpCisJICogQG1vZGVsIGRlZmF1bHQ9ImZhbHNlIgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlib29sZWFuIGlzVXNlRGVuc2l0eSgpOworCisJLyoqCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkUG9wdWxhdGlvbkluaXRpYWxpemVyI2lzVXNlRGVuc2l0eSA8ZW0+VXNlIERlbnNpdHk8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPlVzZSBEZW5zaXR5PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiBAc2VlICNpc1VzZURlbnNpdHkoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwl2b2lkIHNldFVzZURlbnNpdHkoYm9vbGVhbiB2YWx1ZSk7CisKK30gLy8gU3RhbmRhcmRQb3B1bGF0aW9uSW5pdGlhbGl6ZXIKZGlmZiAtLWdpdCBhL21vZGVscy9wb3B1bGF0aW9ucy9vcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vcG9wdWxhdGlvbm1vZGVscy9zdGFuZGFyZC9TdGFuZGFyZFBvcHVsYXRpb25Nb2RlbC5qYXZhIGIvbW9kZWxzL3BvcHVsYXRpb25zL29yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9wb3B1bGF0aW9ubW9kZWxzL3N0YW5kYXJkL1N0YW5kYXJkUG9wdWxhdGlvbk1vZGVsLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTMyMTg2NQotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9wb3B1bGF0aW9ucy9vcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vcG9wdWxhdGlvbm1vZGVscy9zdGFuZGFyZC9TdGFuZGFyZFBvcHVsYXRpb25Nb2RlbC5qYXZhCkBAIC0wLDAgKzEsMTE0IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZDsNCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyAqIENvcHlyaWdodCAoYykgMjAwOSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4NCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzDQorICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wDQorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQNCisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbA0KKyAqDQorICogQ29udHJpYnV0b3JzOg0KKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24NCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCisNCisNCisvKioNCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKyAqIEEgcmVwcmVzZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPlBvcHVsYXRpb24gTW9kZWw8L2I+PC9lbT4nLg0KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKyAqDQorICogPHA+DQorICogVGhlIGZvbGxvd2luZyBmZWF0dXJlcyBhcmUgc3VwcG9ydGVkOg0KKyAqIDx1bD4NCisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsI2dldEJpcnRoUmF0ZSA8ZW0+QmlydGggUmF0ZTwvZW0+fTwvbGk+DQorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZFBvcHVsYXRpb25Nb2RlbCNnZXREZWF0aFJhdGUgPGVtPkRlYXRoIFJhdGU8L2VtPn08L2xpPg0KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWwjZ2V0VGltZVBlcmlvZCA8ZW0+VGltZSBQZXJpb2Q8L2VtPn08L2xpPg0KKyAqIDwvdWw+DQorICogPC9wPg0KKyAqDQorICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmRQYWNrYWdlI2dldFN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsKCkNCisgKiBAbW9kZWwNCisgKiBAZ2VuZXJhdGVkDQorICovDQorcHVibGljIGludGVyZmFjZSBTdGFuZGFyZFBvcHVsYXRpb25Nb2RlbCBleHRlbmRzIFBvcHVsYXRpb25Nb2RlbCB7DQorCS8qKg0KKwkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5CaXJ0aCBSYXRlPC9iPjwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIGlzIDxjb2RlPiIwLjAiPC9jb2RlPi4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPHA+DQorCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPkJpcnRoIFJhdGU8L2VtPicgYXR0cmlidXRlIGlzbid0IGNsZWFyLA0KKwkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uDQorCSAqIDwvcD4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPkJpcnRoIFJhdGU8L2VtPicgYXR0cmlidXRlLg0KKwkgKiBAc2VlICNzZXRCaXJ0aFJhdGUoZG91YmxlKQ0KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZFBhY2thZ2UjZ2V0U3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxfQmlydGhSYXRlKCkNCisJICogQG1vZGVsIGRlZmF1bHQ9IjAuMCINCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJZG91YmxlIGdldEJpcnRoUmF0ZSgpOw0KKw0KKwkvKioNCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsI2dldEJpcnRoUmF0ZSA8ZW0+QmlydGggUmF0ZTwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+QmlydGggUmF0ZTwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIEBzZWUgI2dldEJpcnRoUmF0ZSgpDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXZvaWQgc2V0QmlydGhSYXRlKGRvdWJsZSB2YWx1ZSk7DQorDQorCS8qKg0KKwkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5EZWF0aCBSYXRlPC9iPjwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIGlzIDxjb2RlPiIwLjAiPC9jb2RlPi4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPHA+DQorCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPkRlYXRoIFJhdGU8L2VtPicgYXR0cmlidXRlIGlzbid0IGNsZWFyLA0KKwkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uDQorCSAqIDwvcD4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPkRlYXRoIFJhdGU8L2VtPicgYXR0cmlidXRlLg0KKwkgKiBAc2VlICNzZXREZWF0aFJhdGUoZG91YmxlKQ0KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZFBhY2thZ2UjZ2V0U3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxfRGVhdGhSYXRlKCkNCisJICogQG1vZGVsIGRlZmF1bHQ9IjAuMCINCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJZG91YmxlIGdldERlYXRoUmF0ZSgpOw0KKw0KKwkvKioNCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsI2dldERlYXRoUmF0ZSA8ZW0+RGVhdGggUmF0ZTwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+RGVhdGggUmF0ZTwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIEBzZWUgI2dldERlYXRoUmF0ZSgpDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXZvaWQgc2V0RGVhdGhSYXRlKGRvdWJsZSB2YWx1ZSk7DQorDQorCS8qKg0KKwkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5UaW1lIFBlcmlvZDwvYj48L2VtPicgYXR0cmlidXRlLg0KKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyA8Y29kZT4iODY0MDAwMDAiPC9jb2RlPi4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPHA+DQorCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPlRpbWUgUGVyaW9kPC9lbT4nIGF0dHJpYnV0ZSBpc24ndCBjbGVhciwNCisJICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLg0KKwkgKiA8L3A+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5UaW1lIFBlcmlvZDwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIEBzZWUgI3NldFRpbWVQZXJpb2QobG9uZykNCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmRQYWNrYWdlI2dldFN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsX1RpbWVQZXJpb2QoKQ0KKwkgKiBAbW9kZWwgZGVmYXVsdD0iODY0MDAwMDAiDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCWxvbmcgZ2V0VGltZVBlcmlvZCgpOw0KKw0KKwkvKioNCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsI2dldFRpbWVQZXJpb2QgPGVtPlRpbWUgUGVyaW9kPC9lbT59JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5UaW1lIFBlcmlvZDwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIEBzZWUgI2dldFRpbWVQZXJpb2QoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwl2b2lkIHNldFRpbWVQZXJpb2QobG9uZyB2YWx1ZSk7DQorDQorfSAvLyBTdGFuZGFyZFBvcHVsYXRpb25Nb2RlbA0KZGlmZiAtLWdpdCBhL21vZGVscy9wb3B1bGF0aW9ucy9vcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vcG9wdWxhdGlvbm1vZGVscy9zdGFuZGFyZC9TdGFuZGFyZFBvcHVsYXRpb25Nb2RlbExhYmVsLmphdmEgYi9tb2RlbHMvcG9wdWxhdGlvbnMvb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3BvcHVsYXRpb25tb2RlbHMvc3RhbmRhcmQvU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxMYWJlbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk4MDRmYzQKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvcG9wdWxhdGlvbnMvb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3BvcHVsYXRpb25tb2RlbHMvc3RhbmRhcmQvU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxMYWJlbC5qYXZhCkBAIC0wLDAgKzEsMjYgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkOw0KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorICogQ29weXJpZ2h0IChjKSAyMDA5IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLg0KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMNCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjANCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdA0KKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sDQorICoNCisgKiBDb250cmlidXRvcnM6DQorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbg0KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KKw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguSW50ZWdyYXRpb25MYWJlbDsNCisNCisvKioNCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKyAqIEEgcmVwcmVzZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPlBvcHVsYXRpb24gTW9kZWwgTGFiZWw8L2I+PC9lbT4nLg0KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKyAqDQorICoNCisgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZFBhY2thZ2UjZ2V0U3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxMYWJlbCgpDQorICogQG1vZGVsDQorICogQGdlbmVyYXRlZA0KKyAqLw0KK3B1YmxpYyBpbnRlcmZhY2UgU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxMYWJlbCBleHRlbmRzIFBvcHVsYXRpb25Nb2RlbExhYmVsIHsNCit9IC8vIFN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWwNCmRpZmYgLS1naXQgYS9tb2RlbHMvcG9wdWxhdGlvbnMvb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3BvcHVsYXRpb25tb2RlbHMvc3RhbmRhcmQvU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxMYWJlbFZhbHVlLmphdmEgYi9tb2RlbHMvcG9wdWxhdGlvbnMvb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3BvcHVsYXRpb25tb2RlbHMvc3RhbmRhcmQvU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxMYWJlbFZhbHVlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjA4NjgzOQotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9wb3B1bGF0aW9ucy9vcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vcG9wdWxhdGlvbm1vZGVscy9zdGFuZGFyZC9TdGFuZGFyZFBvcHVsYXRpb25Nb2RlbExhYmVsVmFsdWUuamF2YQpAQCAtMCwwICsxLDE0MiBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQ7DQorDQorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisgKiBDb3B5cmlnaHQgKGMpIDIwMDkgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuDQorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscw0KKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMA0KKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0DQorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwNCisgKg0KKyAqIENvbnRyaWJ1dG9yczoNCisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uDQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQorDQorDQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5JbnRlZ3JhdGlvbkxhYmVsVmFsdWU7DQorDQorDQorLyoqDQorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisgKiBBIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5Qb3B1bGF0aW9uIE1vZGVsIExhYmVsIFZhbHVlPC9iPjwvZW0+Jy4NCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisgKg0KKyAqIDxwPg0KKyAqIFRoZSBmb2xsb3dpbmcgZmVhdHVyZXMgYXJlIHN1cHBvcnRlZDoNCisgKiA8dWw+DQorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZFBvcHVsYXRpb25Nb2RlbExhYmVsVmFsdWUjZ2V0Q291bnQgPGVtPkNvdW50PC9lbT59PC9saT4NCisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWxWYWx1ZSNnZXRCaXJ0aHMgPGVtPkJpcnRoczwvZW0+fTwvbGk+DQorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZFBvcHVsYXRpb25Nb2RlbExhYmVsVmFsdWUjZ2V0RGVhdGhzIDxlbT5EZWF0aHM8L2VtPn08L2xpPg0KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxMYWJlbFZhbHVlI2dldERlbnNpdHkgPGVtPkRlbnNpdHk8L2VtPn08L2xpPg0KKyAqIDwvdWw+DQorICogPC9wPg0KKyAqDQorICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmRQYWNrYWdlI2dldFN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWxWYWx1ZSgpDQorICogQG1vZGVsDQorICogQGdlbmVyYXRlZA0KKyAqLw0KK3B1YmxpYyBpbnRlcmZhY2UgU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxMYWJlbFZhbHVlIGV4dGVuZHMgUG9wdWxhdGlvbk1vZGVsTGFiZWxWYWx1ZSB7DQorDQorCS8qKg0KKwkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5Db3VudDwvYj48L2VtPicgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8cD4NCisJICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+Q291bnQ8L2VtPicgYXR0cmlidXRlIGlzbid0IGNsZWFyLA0KKwkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uDQorCSAqIDwvcD4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPkNvdW50PC9lbT4nIGF0dHJpYnV0ZS4NCisJICogQHNlZSAjc2V0Q291bnQoZG91YmxlKQ0KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZFBhY2thZ2UjZ2V0U3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxMYWJlbFZhbHVlX0NvdW50KCkNCisJICogQG1vZGVsDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCWRvdWJsZSBnZXRDb3VudCgpOw0KKw0KKwkvKioNCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWxWYWx1ZSNnZXRDb3VudCA8ZW0+Q291bnQ8L2VtPn0nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPkNvdW50PC9lbT4nIGF0dHJpYnV0ZS4NCisJICogQHNlZSAjZ2V0Q291bnQoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwl2b2lkIHNldENvdW50KGRvdWJsZSB2YWx1ZSk7DQorDQorCS8qKg0KKwkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5CaXJ0aHM8L2I+PC9lbT4nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPHA+DQorCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPkJpcnRoczwvZW0+JyBhdHRyaWJ1dGUgaXNuJ3QgY2xlYXIsDQorCSAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4NCisJICogPC9wPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+QmlydGhzPC9lbT4nIGF0dHJpYnV0ZS4NCisJICogQHNlZSAjc2V0QmlydGhzKGRvdWJsZSkNCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmRQYWNrYWdlI2dldFN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWxWYWx1ZV9CaXJ0aHMoKQ0KKwkgKiBAbW9kZWwNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJZG91YmxlIGdldEJpcnRocygpOw0KKw0KKwkvKioNCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWxWYWx1ZSNnZXRCaXJ0aHMgPGVtPkJpcnRoczwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+QmlydGhzPC9lbT4nIGF0dHJpYnV0ZS4NCisJICogQHNlZSAjZ2V0QmlydGhzKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJdm9pZCBzZXRCaXJ0aHMoZG91YmxlIHZhbHVlKTsNCisNCisJLyoqDQorCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPkRlYXRoczwvYj48L2VtPicgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8cD4NCisJICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+RGVhdGhzPC9lbT4nIGF0dHJpYnV0ZSBpc24ndCBjbGVhciwNCisJICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLg0KKwkgKiA8L3A+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5EZWF0aHM8L2VtPicgYXR0cmlidXRlLg0KKwkgKiBAc2VlICNzZXREZWF0aHMoZG91YmxlKQ0KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZFBhY2thZ2UjZ2V0U3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxMYWJlbFZhbHVlX0RlYXRocygpDQorCSAqIEBtb2RlbA0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlkb3VibGUgZ2V0RGVhdGhzKCk7DQorDQorCS8qKg0KKwkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxMYWJlbFZhbHVlI2dldERlYXRocyA8ZW0+RGVhdGhzPC9lbT59JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5EZWF0aHM8L2VtPicgYXR0cmlidXRlLg0KKwkgKiBAc2VlICNnZXREZWF0aHMoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwl2b2lkIHNldERlYXRocyhkb3VibGUgdmFsdWUpOw0KKw0KKwkvKioNCisJICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+RGVuc2l0eTwvYj48L2VtPicgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8cD4NCisJICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+RGVuc2l0eTwvZW0+JyBhdHRyaWJ1dGUgaXNuJ3QgY2xlYXIsDQorCSAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4NCisJICogPC9wPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+RGVuc2l0eTwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIEBzZWUgI3NldERlbnNpdHkoZG91YmxlKQ0KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZFBhY2thZ2UjZ2V0U3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxMYWJlbFZhbHVlX0RlbnNpdHkoKQ0KKwkgKiBAbW9kZWwNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJZG91YmxlIGdldERlbnNpdHkoKTsNCisNCisJLyoqDQorCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZFBvcHVsYXRpb25Nb2RlbExhYmVsVmFsdWUjZ2V0RGVuc2l0eSA8ZW0+RGVuc2l0eTwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+RGVuc2l0eTwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIEBzZWUgI2dldERlbnNpdHkoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwl2b2lkIHNldERlbnNpdHkoZG91YmxlIHZhbHVlKTsNCit9IC8vIFN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWxWYWx1ZQ0KZGlmZiAtLWdpdCBhL21vZGVscy9wb3B1bGF0aW9ucy9vcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vcG9wdWxhdGlvbm1vZGVscy9zdGFuZGFyZC9TdG9jaGFzdGljU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWwuamF2YSBiL21vZGVscy9wb3B1bGF0aW9ucy9vcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vcG9wdWxhdGlvbm1vZGVscy9zdGFuZGFyZC9TdG9jaGFzdGljU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMjUwMDBiCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL3BvcHVsYXRpb25zL29yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9wb3B1bGF0aW9ubW9kZWxzL3N0YW5kYXJkL1N0b2NoYXN0aWNTdGFuZGFyZFBvcHVsYXRpb25Nb2RlbC5qYXZhCkBAIC0wLDAgKzEsNTkgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkOw0KKw0KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorICogQ29weXJpZ2h0IChjKSAyMDA5IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLg0KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMNCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjANCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdA0KKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sDQorICoNCisgKiBDb250cmlidXRvcnM6DQorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbg0KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KKw0KKw0KKy8qKg0KKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorICogQSByZXByZXNlbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+U3RvY2hhc3RpYyBTdGFuZGFyZCBQb3B1bGF0aW9uIE1vZGVsPC9iPjwvZW0+Jy4NCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisgKg0KKyAqIDxwPg0KKyAqIFRoZSBmb2xsb3dpbmcgZmVhdHVyZXMgYXJlIHN1cHBvcnRlZDoNCisgKiA8dWw+DQorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5TdG9jaGFzdGljU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWwjZ2V0R2FpbiA8ZW0+R2FpbjwvZW0+fTwvbGk+DQorICogPC91bD4NCisgKiA8L3A+DQorICoNCisgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZFBhY2thZ2UjZ2V0U3RvY2hhc3RpY1N0YW5kYXJkUG9wdWxhdGlvbk1vZGVsKCkNCisgKiBAbW9kZWwNCisgKiBAZ2VuZXJhdGVkDQorICovDQorcHVibGljIGludGVyZmFjZSBTdG9jaGFzdGljU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWwgZXh0ZW5kcyBTdGFuZGFyZFBvcHVsYXRpb25Nb2RlbCB7DQorCS8qKg0KKwkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5HYWluPC9iPjwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIGlzIDxjb2RlPiIwLjAxIjwvY29kZT4uDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDxwPg0KKwkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5HYWluPC9lbT4nIGF0dHJpYnV0ZSBpc24ndCBjbGVhciwNCisJICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLg0KKwkgKiA8L3A+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5HYWluPC9lbT4nIGF0dHJpYnV0ZS4NCisJICogQHNlZSAjc2V0R2Fpbihkb3VibGUpDQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkUGFja2FnZSNnZXRTdG9jaGFzdGljU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxfR2FpbigpDQorCSAqIEBtb2RlbCBkZWZhdWx0PSIwLjAxIg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlkb3VibGUgZ2V0R2FpbigpOw0KKw0KKwkvKioNCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLlN0b2NoYXN0aWNTdGFuZGFyZFBvcHVsYXRpb25Nb2RlbCNnZXRHYWluIDxlbT5HYWluPC9lbT59JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5HYWluPC9lbT4nIGF0dHJpYnV0ZS4NCisJICogQHNlZSAjZ2V0R2FpbigpDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXZvaWQgc2V0R2Fpbihkb3VibGUgdmFsdWUpOw0KKw0KK30gLy8gU3RvY2hhc3RpY1N0YW5kYXJkUG9wdWxhdGlvbk1vZGVsDQpkaWZmIC0tZ2l0IGEvbW9kZWxzL3BvcHVsYXRpb25zL29yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9wb3B1bGF0aW9ubW9kZWxzL3N0YW5kYXJkL1lldGlQb3B1bGF0aW9uSW5pdGlhbGl6ZXIuamF2YSBiL21vZGVscy9wb3B1bGF0aW9ucy9vcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vcG9wdWxhdGlvbm1vZGVscy9zdGFuZGFyZC9ZZXRpUG9wdWxhdGlvbkluaXRpYWxpemVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTUzMWNkZQotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9wb3B1bGF0aW9ucy9vcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vcG9wdWxhdGlvbm1vZGVscy9zdGFuZGFyZC9ZZXRpUG9wdWxhdGlvbkluaXRpYWxpemVyLmphdmEKQEAgLTAsMCArMSwyNSBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQ7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIAorICogQ29weXJpZ2h0IChjKSAyMDExIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiAKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdCAKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sIAorICogCisgKiBDb250cmlidXRvcnM6IAorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiAKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiBBIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5ZZXRpIFBvcHVsYXRpb24gSW5pdGlhbGl6ZXI8L2I+PC9lbT4nLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKgorICoKKyAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkUGFja2FnZSNnZXRZZXRpUG9wdWxhdGlvbkluaXRpYWxpemVyKCkKKyAqIEBtb2RlbAorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgaW50ZXJmYWNlIFlldGlQb3B1bGF0aW9uSW5pdGlhbGl6ZXIgZXh0ZW5kcyBFYXJ0aFNjaWVuY2VQb3B1bGF0aW9uSW5pdGlhbGl6ZXIgeworfSAvLyBZZXRpUG9wdWxhdGlvbkluaXRpYWxpemVyCmRpZmYgLS1naXQgYS9tb2RlbHMvcG9wdWxhdGlvbnMvb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3BvcHVsYXRpb25tb2RlbHMvc3RhbmRhcmQvaW1wbC9BZ2VHcm91cEltcGwuamF2YSBiL21vZGVscy9wb3B1bGF0aW9ucy9vcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vcG9wdWxhdGlvbm1vZGVscy9zdGFuZGFyZC9pbXBsL0FnZUdyb3VwSW1wbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQxOTk0ZDEKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvcG9wdWxhdGlvbnMvb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3BvcHVsYXRpb25tb2RlbHMvc3RhbmRhcmQvaW1wbC9BZ2VHcm91cEltcGwuamF2YQpAQCAtMCwwICsxLDMzMyBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuaW1wbDsNCisNCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiANCisgKiBDb3B5cmlnaHQgKGMpIDIwMTEgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuIA0KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgDQorICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wIA0KKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0IA0KKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sIA0KKyAqIA0KKyAqIENvbnRyaWJ1dG9yczogDQorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiANCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCisNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uOw0KKw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOw0KKw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuaW1wbC5FTm90aWZpY2F0aW9uSW1wbDsNCisNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLkFnZUdyb3VwOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmRQYWNrYWdlOw0KKw0KKy8qKg0KKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorICogQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPkFnZSBHcm91cDwvYj48L2VtPicuDQorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorICogPHA+DQorICogVGhlIGZvbGxvd2luZyBmZWF0dXJlcyBhcmUgaW1wbGVtZW50ZWQ6DQorICogPHVsPg0KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuaW1wbC5BZ2VHcm91cEltcGwjZ2V0RnJvbUFnZSA8ZW0+RnJvbSBBZ2U8L2VtPn08L2xpPg0KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuaW1wbC5BZ2VHcm91cEltcGwjZ2V0VG9BZ2UgPGVtPlRvIEFnZTwvZW0+fTwvbGk+DQorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5pbXBsLkFnZUdyb3VwSW1wbCNnZXREZWF0aEZhY3RvciA8ZW0+RGVhdGggRmFjdG9yPC9lbT59PC9saT4NCisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLmltcGwuQWdlR3JvdXBJbXBsI2lzTGltaXRlZCA8ZW0+TGltaXRlZDwvZW0+fTwvbGk+DQorICogPC91bD4NCisgKiA8L3A+DQorICoNCisgKiBAZ2VuZXJhdGVkDQorICovDQorcHVibGljIGNsYXNzIEFnZUdyb3VwSW1wbCBleHRlbmRzIFBvcHVsYXRpb25Hcm91cEltcGwgaW1wbGVtZW50cyBBZ2VHcm91cCB7DQorCS8qKg0KKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0RnJvbUFnZSgpIDxlbT5Gcm9tIEFnZTwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHNlZSAjZ2V0RnJvbUFnZSgpDQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgaW50IEZST01fQUdFX0VERUZBVUxUID0gMDsNCisNCisJLyoqDQorCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldEZyb21BZ2UoKSA8ZW0+RnJvbSBBZ2U8L2VtPn0nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBzZWUgI2dldEZyb21BZ2UoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqIEBvcmRlcmVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgaW50IGZyb21BZ2UgPSBGUk9NX0FHRV9FREVGQVVMVDsNCisNCisJLyoqDQorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRUb0FnZSgpIDxlbT5UbyBBZ2U8L2VtPn0nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBzZWUgI2dldFRvQWdlKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBpbnQgVE9fQUdFX0VERUZBVUxUID0gMDsNCisNCisJLyoqDQorCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldFRvQWdlKCkgPGVtPlRvIEFnZTwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHNlZSAjZ2V0VG9BZ2UoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqIEBvcmRlcmVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgaW50IHRvQWdlID0gVE9fQUdFX0VERUZBVUxUOw0KKw0KKwkvKioNCisJICogVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldERlYXRoRmFjdG9yKCkgPGVtPkRlYXRoIEZhY3RvcjwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHNlZSAjZ2V0RGVhdGhGYWN0b3IoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqIEBvcmRlcmVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIGRvdWJsZSBERUFUSF9GQUNUT1JfRURFRkFVTFQgPSAxLjA7DQorDQorCS8qKg0KKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXREZWF0aEZhY3RvcigpIDxlbT5EZWF0aCBGYWN0b3I8L2VtPn0nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBzZWUgI2dldERlYXRoRmFjdG9yKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJcHJvdGVjdGVkIGRvdWJsZSBkZWF0aEZhY3RvciA9IERFQVRIX0ZBQ1RPUl9FREVGQVVMVDsNCisNCisJLyoqDQorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSAne0BsaW5rICNpc0xpbWl0ZWQoKSA8ZW0+TGltaXRlZDwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHNlZSAjaXNMaW1pdGVkKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBib29sZWFuIExJTUlURURfRURFRkFVTFQgPSBmYWxzZTsNCisNCisJLyoqDQorCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2lzTGltaXRlZCgpIDxlbT5MaW1pdGVkPC9lbT59JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAc2VlICNpc0xpbWl0ZWQoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqIEBvcmRlcmVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgYm9vbGVhbiBsaW1pdGVkID0gTElNSVRFRF9FREVGQVVMVDsNCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgQWdlR3JvdXBJbXBsKCkgew0KKwkJc3VwZXIoKTsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCUBPdmVycmlkZQ0KKwlwcm90ZWN0ZWQgRUNsYXNzIGVTdGF0aWNDbGFzcygpIHsNCisJCXJldHVybiBTdGFuZGFyZFBhY2thZ2UuTGl0ZXJhbHMuQUdFX0dST1VQOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIGludCBnZXRGcm9tQWdlKCkgew0KKwkJcmV0dXJuIGZyb21BZ2U7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgdm9pZCBzZXRGcm9tQWdlKGludCBuZXdGcm9tQWdlKSB7DQorCQlpbnQgb2xkRnJvbUFnZSA9IGZyb21BZ2U7DQorCQlmcm9tQWdlID0gbmV3RnJvbUFnZTsNCisJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkNCisJCQllTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBTdGFuZGFyZFBhY2thZ2UuQUdFX0dST1VQX19GUk9NX0FHRSwgb2xkRnJvbUFnZSwgZnJvbUFnZSkpOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIGludCBnZXRUb0FnZSgpIHsNCisJCXJldHVybiB0b0FnZTsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyB2b2lkIHNldFRvQWdlKGludCBuZXdUb0FnZSkgew0KKwkJaW50IG9sZFRvQWdlID0gdG9BZ2U7DQorCQl0b0FnZSA9IG5ld1RvQWdlOw0KKwkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQ0KKwkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIFN0YW5kYXJkUGFja2FnZS5BR0VfR1JPVVBfX1RPX0FHRSwgb2xkVG9BZ2UsIHRvQWdlKSk7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgZG91YmxlIGdldERlYXRoRmFjdG9yKCkgew0KKwkJcmV0dXJuIGRlYXRoRmFjdG9yOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIHZvaWQgc2V0RGVhdGhGYWN0b3IoZG91YmxlIG5ld0RlYXRoRmFjdG9yKSB7DQorCQlkb3VibGUgb2xkRGVhdGhGYWN0b3IgPSBkZWF0aEZhY3RvcjsNCisJCWRlYXRoRmFjdG9yID0gbmV3RGVhdGhGYWN0b3I7DQorCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpDQorCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgU3RhbmRhcmRQYWNrYWdlLkFHRV9HUk9VUF9fREVBVEhfRkFDVE9SLCBvbGREZWF0aEZhY3RvciwgZGVhdGhGYWN0b3IpKTsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBib29sZWFuIGlzTGltaXRlZCgpIHsNCisJCXJldHVybiBsaW1pdGVkOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIHZvaWQgc2V0TGltaXRlZChib29sZWFuIG5ld0xpbWl0ZWQpIHsNCisJCWJvb2xlYW4gb2xkTGltaXRlZCA9IGxpbWl0ZWQ7DQorCQlsaW1pdGVkID0gbmV3TGltaXRlZDsNCisJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkNCisJCQllTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBTdGFuZGFyZFBhY2thZ2UuQUdFX0dST1VQX19MSU1JVEVELCBvbGRMaW1pdGVkLCBsaW1pdGVkKSk7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlAT3ZlcnJpZGUNCisJcHVibGljIE9iamVjdCBlR2V0KGludCBmZWF0dXJlSUQsIGJvb2xlYW4gcmVzb2x2ZSwgYm9vbGVhbiBjb3JlVHlwZSkgew0KKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsNCisJCQljYXNlIFN0YW5kYXJkUGFja2FnZS5BR0VfR1JPVVBfX0ZST01fQUdFOg0KKwkJCQlyZXR1cm4gZ2V0RnJvbUFnZSgpOw0KKwkJCWNhc2UgU3RhbmRhcmRQYWNrYWdlLkFHRV9HUk9VUF9fVE9fQUdFOg0KKwkJCQlyZXR1cm4gZ2V0VG9BZ2UoKTsNCisJCQljYXNlIFN0YW5kYXJkUGFja2FnZS5BR0VfR1JPVVBfX0RFQVRIX0ZBQ1RPUjoNCisJCQkJcmV0dXJuIGdldERlYXRoRmFjdG9yKCk7DQorCQkJY2FzZSBTdGFuZGFyZFBhY2thZ2UuQUdFX0dST1VQX19MSU1JVEVEOg0KKwkJCQlyZXR1cm4gaXNMaW1pdGVkKCk7DQorCQl9DQorCQlyZXR1cm4gc3VwZXIuZUdldChmZWF0dXJlSUQsIHJlc29sdmUsIGNvcmVUeXBlKTsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCUBPdmVycmlkZQ0KKwlwdWJsaWMgdm9pZCBlU2V0KGludCBmZWF0dXJlSUQsIE9iamVjdCBuZXdWYWx1ZSkgew0KKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsNCisJCQljYXNlIFN0YW5kYXJkUGFja2FnZS5BR0VfR1JPVVBfX0ZST01fQUdFOg0KKwkJCQlzZXRGcm9tQWdlKChJbnRlZ2VyKW5ld1ZhbHVlKTsNCisJCQkJcmV0dXJuOw0KKwkJCWNhc2UgU3RhbmRhcmRQYWNrYWdlLkFHRV9HUk9VUF9fVE9fQUdFOg0KKwkJCQlzZXRUb0FnZSgoSW50ZWdlciluZXdWYWx1ZSk7DQorCQkJCXJldHVybjsNCisJCQljYXNlIFN0YW5kYXJkUGFja2FnZS5BR0VfR1JPVVBfX0RFQVRIX0ZBQ1RPUjoNCisJCQkJc2V0RGVhdGhGYWN0b3IoKERvdWJsZSluZXdWYWx1ZSk7DQorCQkJCXJldHVybjsNCisJCQljYXNlIFN0YW5kYXJkUGFja2FnZS5BR0VfR1JPVVBfX0xJTUlURUQ6DQorCQkJCXNldExpbWl0ZWQoKEJvb2xlYW4pbmV3VmFsdWUpOw0KKwkJCQlyZXR1cm47DQorCQl9DQorCQlzdXBlci5lU2V0KGZlYXR1cmVJRCwgbmV3VmFsdWUpOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJQE92ZXJyaWRlDQorCXB1YmxpYyB2b2lkIGVVbnNldChpbnQgZmVhdHVyZUlEKSB7DQorCQlzd2l0Y2ggKGZlYXR1cmVJRCkgew0KKwkJCWNhc2UgU3RhbmRhcmRQYWNrYWdlLkFHRV9HUk9VUF9fRlJPTV9BR0U6DQorCQkJCXNldEZyb21BZ2UoRlJPTV9BR0VfRURFRkFVTFQpOw0KKwkJCQlyZXR1cm47DQorCQkJY2FzZSBTdGFuZGFyZFBhY2thZ2UuQUdFX0dST1VQX19UT19BR0U6DQorCQkJCXNldFRvQWdlKFRPX0FHRV9FREVGQVVMVCk7DQorCQkJCXJldHVybjsNCisJCQljYXNlIFN0YW5kYXJkUGFja2FnZS5BR0VfR1JPVVBfX0RFQVRIX0ZBQ1RPUjoNCisJCQkJc2V0RGVhdGhGYWN0b3IoREVBVEhfRkFDVE9SX0VERUZBVUxUKTsNCisJCQkJcmV0dXJuOw0KKwkJCWNhc2UgU3RhbmRhcmRQYWNrYWdlLkFHRV9HUk9VUF9fTElNSVRFRDoNCisJCQkJc2V0TGltaXRlZChMSU1JVEVEX0VERUZBVUxUKTsNCisJCQkJcmV0dXJuOw0KKwkJfQ0KKwkJc3VwZXIuZVVuc2V0KGZlYXR1cmVJRCk7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlAT3ZlcnJpZGUNCisJcHVibGljIGJvb2xlYW4gZUlzU2V0KGludCBmZWF0dXJlSUQpIHsNCisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7DQorCQkJY2FzZSBTdGFuZGFyZFBhY2thZ2UuQUdFX0dST1VQX19GUk9NX0FHRToNCisJCQkJcmV0dXJuIGZyb21BZ2UgIT0gRlJPTV9BR0VfRURFRkFVTFQ7DQorCQkJY2FzZSBTdGFuZGFyZFBhY2thZ2UuQUdFX0dST1VQX19UT19BR0U6DQorCQkJCXJldHVybiB0b0FnZSAhPSBUT19BR0VfRURFRkFVTFQ7DQorCQkJY2FzZSBTdGFuZGFyZFBhY2thZ2UuQUdFX0dST1VQX19ERUFUSF9GQUNUT1I6DQorCQkJCXJldHVybiBkZWF0aEZhY3RvciAhPSBERUFUSF9GQUNUT1JfRURFRkFVTFQ7DQorCQkJY2FzZSBTdGFuZGFyZFBhY2thZ2UuQUdFX0dST1VQX19MSU1JVEVEOg0KKwkJCQlyZXR1cm4gbGltaXRlZCAhPSBMSU1JVEVEX0VERUZBVUxUOw0KKwkJfQ0KKwkJcmV0dXJuIHN1cGVyLmVJc1NldChmZWF0dXJlSUQpOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJQE92ZXJyaWRlDQorCXB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKSB7DQorCQlpZiAoZUlzUHJveHkoKSkgcmV0dXJuIHN1cGVyLnRvU3RyaW5nKCk7DQorDQorCQlTdHJpbmdCdWZmZXIgcmVzdWx0ID0gbmV3IFN0cmluZ0J1ZmZlcihzdXBlci50b1N0cmluZygpKTsNCisJCXJlc3VsdC5hcHBlbmQoIiAoZnJvbUFnZTogIik7DQorCQlyZXN1bHQuYXBwZW5kKGZyb21BZ2UpOw0KKwkJcmVzdWx0LmFwcGVuZCgiLCB0b0FnZTogIik7DQorCQlyZXN1bHQuYXBwZW5kKHRvQWdlKTsNCisJCXJlc3VsdC5hcHBlbmQoIiwgZGVhdGhGYWN0b3I6ICIpOw0KKwkJcmVzdWx0LmFwcGVuZChkZWF0aEZhY3Rvcik7DQorCQlyZXN1bHQuYXBwZW5kKCIsIGxpbWl0ZWQ6ICIpOw0KKwkJcmVzdWx0LmFwcGVuZChsaW1pdGVkKTsNCisJCXJlc3VsdC5hcHBlbmQoJyknKTsNCisJCXJldHVybiByZXN1bHQudG9TdHJpbmcoKTsNCisJfQ0KKw0KK30gLy9BZ2VHcm91cEltcGwNCmRpZmYgLS1naXQgYS9tb2RlbHMvcG9wdWxhdGlvbnMvb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3BvcHVsYXRpb25tb2RlbHMvc3RhbmRhcmQvaW1wbC9BZ2luZ1BvcHVsYXRpb25Nb2RlbEltcGwuamF2YSBiL21vZGVscy9wb3B1bGF0aW9ucy9vcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vcG9wdWxhdGlvbm1vZGVscy9zdGFuZGFyZC9pbXBsL0FnaW5nUG9wdWxhdGlvbk1vZGVsSW1wbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk4NTg1NWMKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvcG9wdWxhdGlvbnMvb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3BvcHVsYXRpb25tb2RlbHMvc3RhbmRhcmQvaW1wbC9BZ2luZ1BvcHVsYXRpb25Nb2RlbEltcGwuamF2YQpAQCAtMCwwICsxLDI5NCBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuaW1wbDsNCisNCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiANCisgKiBDb3B5cmlnaHQgKGMpIDIwMTEgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuIA0KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgDQorICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wIA0KKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0IA0KKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sIA0KKyAqIA0KKyAqIENvbnRyaWJ1dG9yczogDQorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiANCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCisNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uOw0KK2ltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsNCisNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLkVDb2xsZWN0aW9uczsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLkVMaXN0Ow0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuaW1wbC5FTm90aWZpY2F0aW9uSW1wbDsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkR5bmFtaWNMYWJlbDsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkV4Y2hhbmdlOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguRXhjaGFuZ2VUeXBlOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguR3JhcGhGYWN0b3J5Ow0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguTm9kZTsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLk5vZGVMYWJlbDsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLlNURU1UaW1lOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuQWdlR3JvdXA7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5BZ2luZ1BvcHVsYXRpb25Nb2RlbDsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLlBvcHVsYXRpb25Hcm91cDsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkUGFja2FnZTsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWw7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZFBvcHVsYXRpb25Nb2RlbExhYmVsVmFsdWU7DQorDQorLyoqDQorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnDQorICogPGVtPjxiPkFnaW5nIFBvcHVsYXRpb24gTW9kZWw8L2I+PC9lbT4nLiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisgKiA8cD4NCisgKiBUaGUgZm9sbG93aW5nIGZlYXR1cmVzIGFyZSBpbXBsZW1lbnRlZDoNCisgKiA8dWw+DQorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5pbXBsLkFnaW5nUG9wdWxhdGlvbk1vZGVsSW1wbCNpc0hhc01heEFnZSA8ZW0+SGFzIE1heCBBZ2U8L2VtPn08L2xpPg0KKyAqIDwvdWw+DQorICogPC9wPg0KKyAqDQorICogQGdlbmVyYXRlZA0KKyAqLw0KK3B1YmxpYyBjbGFzcyBBZ2luZ1BvcHVsYXRpb25Nb2RlbEltcGwgZXh0ZW5kcyBEZW1vZ3JhcGhpY1BvcHVsYXRpb25Nb2RlbEltcGwNCisJCWltcGxlbWVudHMgQWdpbmdQb3B1bGF0aW9uTW9kZWwgew0KKwkvKioNCisJICogVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2lzSGFzTWF4QWdlKCkgPGVtPkhhcyBNYXggQWdlPC9lbT59JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAc2VlICNpc0hhc01heEFnZSgpDQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgYm9vbGVhbiBIQVNfTUFYX0FHRV9FREVGQVVMVCA9IGZhbHNlOw0KKwkvKioNCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjaXNIYXNNYXhBZ2UoKSA8ZW0+SGFzIE1heCBBZ2U8L2VtPn0nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBzZWUgI2lzSGFzTWF4QWdlKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJcHJvdGVjdGVkIGJvb2xlYW4gaGFzTWF4QWdlID0gSEFTX01BWF9BR0VfRURFRkFVTFQ7DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogDQorCSAqIEBnZW5lcmF0ZWQgTk9UDQorCSAqLw0KKwlwdWJsaWMgQWdpbmdQb3B1bGF0aW9uTW9kZWxJbXBsKCkgew0KKwkJc3VwZXIoKTsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCUBPdmVycmlkZQ0KKwlwcm90ZWN0ZWQgRUNsYXNzIGVTdGF0aWNDbGFzcygpIHsNCisJCXJldHVybiBTdGFuZGFyZFBhY2thZ2UuTGl0ZXJhbHMuQUdJTkdfUE9QVUxBVElPTl9NT0RFTDsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBib29sZWFuIGlzSGFzTWF4QWdlKCkgew0KKwkJcmV0dXJuIGhhc01heEFnZTsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyB2b2lkIHNldEhhc01heEFnZShib29sZWFuIG5ld0hhc01heEFnZSkgew0KKwkJYm9vbGVhbiBvbGRIYXNNYXhBZ2UgPSBoYXNNYXhBZ2U7DQorCQloYXNNYXhBZ2UgPSBuZXdIYXNNYXhBZ2U7DQorCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpDQorCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgU3RhbmRhcmRQYWNrYWdlLkFHSU5HX1BPUFVMQVRJT05fTU9ERUxfX0hBU19NQVhfQUdFLCBvbGRIYXNNYXhBZ2UsIGhhc01heEFnZSkpOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJQE92ZXJyaWRlDQorCXB1YmxpYyBPYmplY3QgZUdldChpbnQgZmVhdHVyZUlELCBib29sZWFuIHJlc29sdmUsIGJvb2xlYW4gY29yZVR5cGUpIHsNCisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7DQorCQkJY2FzZSBTdGFuZGFyZFBhY2thZ2UuQUdJTkdfUE9QVUxBVElPTl9NT0RFTF9fSEFTX01BWF9BR0U6DQorCQkJCXJldHVybiBpc0hhc01heEFnZSgpOw0KKwkJfQ0KKwkJcmV0dXJuIHN1cGVyLmVHZXQoZmVhdHVyZUlELCByZXNvbHZlLCBjb3JlVHlwZSk7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlAT3ZlcnJpZGUNCisJcHVibGljIHZvaWQgZVNldChpbnQgZmVhdHVyZUlELCBPYmplY3QgbmV3VmFsdWUpIHsNCisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7DQorCQkJY2FzZSBTdGFuZGFyZFBhY2thZ2UuQUdJTkdfUE9QVUxBVElPTl9NT0RFTF9fSEFTX01BWF9BR0U6DQorCQkJCXNldEhhc01heEFnZSgoQm9vbGVhbiluZXdWYWx1ZSk7DQorCQkJCXJldHVybjsNCisJCX0NCisJCXN1cGVyLmVTZXQoZmVhdHVyZUlELCBuZXdWYWx1ZSk7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlAT3ZlcnJpZGUNCisJcHVibGljIHZvaWQgZVVuc2V0KGludCBmZWF0dXJlSUQpIHsNCisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7DQorCQkJY2FzZSBTdGFuZGFyZFBhY2thZ2UuQUdJTkdfUE9QVUxBVElPTl9NT0RFTF9fSEFTX01BWF9BR0U6DQorCQkJCXNldEhhc01heEFnZShIQVNfTUFYX0FHRV9FREVGQVVMVCk7DQorCQkJCXJldHVybjsNCisJCX0NCisJCXN1cGVyLmVVbnNldChmZWF0dXJlSUQpOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJQE92ZXJyaWRlDQorCXB1YmxpYyBib29sZWFuIGVJc1NldChpbnQgZmVhdHVyZUlEKSB7DQorCQlzd2l0Y2ggKGZlYXR1cmVJRCkgew0KKwkJCWNhc2UgU3RhbmRhcmRQYWNrYWdlLkFHSU5HX1BPUFVMQVRJT05fTU9ERUxfX0hBU19NQVhfQUdFOg0KKwkJCQlyZXR1cm4gaGFzTWF4QWdlICE9IEhBU19NQVhfQUdFX0VERUZBVUxUOw0KKwkJfQ0KKwkJcmV0dXJuIHN1cGVyLmVJc1NldChmZWF0dXJlSUQpOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJQE92ZXJyaWRlDQorCXB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKSB7DQorCQlpZiAoZUlzUHJveHkoKSkgcmV0dXJuIHN1cGVyLnRvU3RyaW5nKCk7DQorDQorCQlTdHJpbmdCdWZmZXIgcmVzdWx0ID0gbmV3IFN0cmluZ0J1ZmZlcihzdXBlci50b1N0cmluZygpKTsNCisJCXJlc3VsdC5hcHBlbmQoIiAoaGFzTWF4QWdlOiAiKTsNCisJCXJlc3VsdC5hcHBlbmQoaGFzTWF4QWdlKTsNCisJCXJlc3VsdC5hcHBlbmQoJyknKTsNCisJCXJldHVybiByZXN1bHQudG9TdHJpbmcoKTsNCisJfQ0KKw0KKwlAT3ZlcnJpZGUNCisJcHVibGljIHZvaWQgY2FsY3VsYXRlRGVsdGEoU1RFTVRpbWUgdGltZSwgbG9uZyB0aW1lRGVsdGEsDQorCQkJRUxpc3Q8RHluYW1pY0xhYmVsPiBsYWJlbHMpIHsNCisJCWRvdWJsZSBhZGp1c3RlZEJpcnRoUmF0ZSA9IGFkanVzdFJhdGUodGhpcy5nZXRCaXJ0aFJhdGUoKSwNCisJCQkJdGhpcy5nZXRUaW1lUGVyaW9kKCksIHRpbWVEZWx0YSk7DQorCQlkb3VibGUgYWRqdXN0ZWREZWF0aFJhdGUgPSBhZGp1c3RSYXRlKHRoaXMuZ2V0RGVhdGhSYXRlKCksDQorCQkJCXRoaXMuZ2V0VGltZVBlcmlvZCgpLCB0aW1lRGVsdGEpOw0KKwkJZG91YmxlIHllYXJzID0gKGRvdWJsZSkgdGltZURlbHRhIC8gMzE1NTY5NTIyMTYuMDsNCisJCUhhc2hNYXA8U3RyaW5nLCBBZ2VHcm91cD4gZ3JvdXBzID0gbmV3IEhhc2hNYXA8U3RyaW5nLCBBZ2VHcm91cD4oKTsNCisNCisJCWZvciAoUG9wdWxhdGlvbkdyb3VwIGdyb3VwIDogZ2V0UG9wdWxhdGlvbkdyb3VwcygpKSB7DQorCQkJZ3JvdXBzLnB1dChncm91cC5nZXRJZGVudGlmaWVyKCksIChBZ2VHcm91cCkgZ3JvdXApOw0KKwkJfQ0KKw0KKwkJZm9yIChEeW5hbWljTGFiZWwgbGFiMSA6IGxhYmVscykgew0KKwkJCVN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWwgY3VycmVudExhYmVsID0gKFN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWwpIGxhYjE7DQorCQkJU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxMYWJlbCBwcmV2aW91c0xhYmVsID0gbnVsbDsNCisJCQlTdGFuZGFyZFBvcHVsYXRpb25Nb2RlbExhYmVsIG5leHRMYWJlbCA9IG51bGw7DQorDQorCQkJQWdlR3JvdXAgY3VycmVudEdyb3VwID0gZ3JvdXBzLmdldChjdXJyZW50TGFiZWwNCisJCQkJCS5nZXRQb3B1bGF0aW9uSWRlbnRpZmllcigpKTsNCisJCQlOb2RlIG5vZGUgPSAoTm9kZSkgY3VycmVudExhYmVsLmdldElkZW50aWZpYWJsZSgpOw0KKwkJCUVMaXN0PE5vZGVMYWJlbD4gbm9kZUxhYmVscyA9IG5vZGUuZ2V0TGFiZWxzKCk7DQorCQkJZG91YmxlIGN1cnJlbnRDb3VudCA9ICgoU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxMYWJlbFZhbHVlKSBjdXJyZW50TGFiZWwNCisJCQkJCS5nZXRQcm9iZVZhbHVlKCkpLmdldENvdW50KCk7DQorCQkJZG91YmxlIGJpcnRocyA9IDAuMDsNCisJCQlkb3VibGUgZGVhdGhzID0gYWRqdXN0ZWREZWF0aFJhdGUgKiBjdXJyZW50R3JvdXAuZ2V0RGVhdGhGYWN0b3IoKQ0KKwkJCQkJKiBjdXJyZW50Q291bnQ7DQorCQkJZG91YmxlIGFnZWRJbiA9IDAuMDsNCisJCQlkb3VibGUgYWdlZE91dCA9IDAuMDsNCisJCQlkb3VibGUgcG9wdWxhdGlvbiA9IDAuMDsNCisNCisJCQlmb3IgKE5vZGVMYWJlbCBsYWIyIDogbm9kZUxhYmVscykgew0KKwkJCQlpZiAobGFiMiBpbnN0YW5jZW9mIFN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWwpIHsNCisJCQkJCVN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWwgbGFiZWwgPSAoU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxMYWJlbCkgbGFiMjsNCisJCQkJCUFnZUdyb3VwIGdyb3VwID0gZ3JvdXBzDQorCQkJCQkJCS5nZXQobGFiZWwuZ2V0UG9wdWxhdGlvbklkZW50aWZpZXIoKSk7DQorDQorCQkJCQlpZiAoZ3JvdXAgIT0gbnVsbCkgew0KKwkJCQkJCWRvdWJsZSBjb3VudCA9ICgoU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxMYWJlbFZhbHVlKSBsYWJlbA0KKwkJCQkJCQkJLmdldFRlbXBWYWx1ZSgpKS5nZXRDb3VudCgpOw0KKw0KKwkJCQkJCXBvcHVsYXRpb24gKz0gY291bnQ7DQorDQorCQkJCQkJaWYgKGN1cnJlbnRHcm91cC5nZXRGcm9tQWdlKCkgPT0gZ3JvdXAuZ2V0VG9BZ2UoKSArIDEpIHsNCisJCQkJCQkJYWdlZEluID0geWVhcnMNCisJCQkJCQkJCQkvIChncm91cC5nZXRUb0FnZSgpIC0gZ3JvdXAuZ2V0RnJvbUFnZSgpICsgMSkNCisJCQkJCQkJCQkqIGNvdW50Ow0KKwkJCQkJCQlwcmV2aW91c0xhYmVsID0gbGFiZWw7DQorCQkJCQkJfSBlbHNlIGlmIChncm91cC5nZXRGcm9tQWdlKCkgPT0gY3VycmVudEdyb3VwDQorCQkJCQkJCQkuZ2V0VG9BZ2UoKSArIDEpIHsNCisJCQkJCQkJbmV4dExhYmVsID0gbGFiZWw7DQorCQkJCQkJfQ0KKwkJCQkJfQ0KKwkJCQl9DQorCQkJfQ0KKw0KKwkJCWlmIChjdXJyZW50R3JvdXAuZ2V0RnJvbUFnZSgpID09IDApIHsNCisJCQkJYmlydGhzID0gYWRqdXN0ZWRCaXJ0aFJhdGUgKiBwb3B1bGF0aW9uOw0KKwkJCX0NCisNCisJCQlpZiAoY3VycmVudEdyb3VwLmlzTGltaXRlZCgpKSB7DQorCQkJCWlmIChuZXh0TGFiZWwgIT0gbnVsbCkgew0KKwkJCQkJYWdlZE91dCA9IHllYXJzDQorCQkJCQkJCS8gKGN1cnJlbnRHcm91cC5nZXRUb0FnZSgpDQorCQkJCQkJCQkJLSBjdXJyZW50R3JvdXAuZ2V0RnJvbUFnZSgpICsgMSkNCisJCQkJCQkJKiBjdXJyZW50Q291bnQ7DQorCQkJCX0gZWxzZSB7DQorCQkJCQlkZWF0aHMgKz0geWVhcnMNCisJCQkJCQkJLyAoY3VycmVudEdyb3VwLmdldFRvQWdlKCkNCisJCQkJCQkJCQktIGN1cnJlbnRHcm91cC5nZXRGcm9tQWdlKCkgKyAxKQ0KKwkJCQkJCQkqIGN1cnJlbnRDb3VudDsNCisJCQkJfQ0KKwkJCX0NCisNCisJCQlTdGFuZGFyZFBvcHVsYXRpb25Nb2RlbExhYmVsVmFsdWUgZGVsdGEgPSAoU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxMYWJlbFZhbHVlKSBjdXJyZW50TGFiZWwNCisJCQkJCS5nZXREZWx0YVZhbHVlKCk7DQorDQorCQkJZGVsdGEuc2V0Q291bnQoYmlydGhzICsgYWdlZEluIC0gZGVhdGhzIC0gYWdlZE91dCk7DQorCQkJZGVsdGEuc2V0QmlydGhzKGJpcnRocyk7DQorCQkJZGVsdGEuc2V0RGVhdGhzKGRlYXRocyk7DQorDQorCQkJRXhjaGFuZ2UgYmlydGhFeGNoYW5nZSA9IEdyYXBoRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlRXhjaGFuZ2UoKTsNCisJCQlFeGNoYW5nZSBkZWF0aEV4Y2hhbmdlID0gR3JhcGhGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVFeGNoYW5nZSgpOw0KKwkJCUV4Y2hhbmdlIGFnZWRJbkV4Y2hhbmdlID0gR3JhcGhGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVFeGNoYW5nZSgpOw0KKwkJCUV4Y2hhbmdlIGFnZWRPdXRFeGNoYW5nZSA9IEdyYXBoRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlRXhjaGFuZ2UoKTsNCisNCisJCQliaXJ0aEV4Y2hhbmdlLnNldFR5cGUoRXhjaGFuZ2VUeXBlLkJJUlRIU19BTkRfREVBVEhTKTsNCisJCQliaXJ0aEV4Y2hhbmdlLnNldENvdW50KGJpcnRocyk7DQorCQkJZGVhdGhFeGNoYW5nZS5zZXRUeXBlKEV4Y2hhbmdlVHlwZS5CSVJUSFNfQU5EX0RFQVRIUyk7DQorCQkJZGVhdGhFeGNoYW5nZS5zZXRDb3VudChkZWF0aHMpOw0KKwkJCWRlbHRhLmdldEFycml2YWxzKCkuY2xlYXIoKTsNCisJCQlkZWx0YS5nZXREZXBhcnR1cmVzKCkuY2xlYXIoKTsNCisJCQlkZWx0YS5nZXRBcnJpdmFscygpLmFkZChiaXJ0aEV4Y2hhbmdlKTsNCisJCQlkZWx0YS5nZXREZXBhcnR1cmVzKCkuYWRkKGRlYXRoRXhjaGFuZ2UpOw0KKw0KKwkJCWlmIChwcmV2aW91c0xhYmVsICE9IG51bGwpIHsNCisJCQkJYWdlZEluRXhjaGFuZ2Uuc2V0VHlwZShFeGNoYW5nZVR5cGUuQUdJTkcpOw0KKwkJCQlhZ2VkSW5FeGNoYW5nZS5zZXRPdGhlckxhYmVsKHByZXZpb3VzTGFiZWwpOw0KKwkJCQlhZ2VkSW5FeGNoYW5nZS5zZXRDb3VudChhZ2VkSW4pOw0KKwkJCQlkZWx0YS5nZXRBcnJpdmFscygpLmFkZChhZ2VkSW5FeGNoYW5nZSk7DQorCQkJfQ0KKw0KKwkJCWlmIChuZXh0TGFiZWwgIT0gbnVsbCkgew0KKwkJCQlhZ2VkT3V0RXhjaGFuZ2Uuc2V0VHlwZShFeGNoYW5nZVR5cGUuQUdJTkcpOw0KKwkJCQlhZ2VkT3V0RXhjaGFuZ2Uuc2V0T3RoZXJMYWJlbChuZXh0TGFiZWwpOw0KKwkJCQlhZ2VkT3V0RXhjaGFuZ2Uuc2V0Q291bnQoYWdlZE91dCk7DQorCQkJCWRlbHRhLmdldERlcGFydHVyZXMoKS5hZGQoYWdlZE91dEV4Y2hhbmdlKTsNCisJCQl9DQorDQorCQkJaGFuZGxlTWlncmF0aW9uKChTdGFuZGFyZFBvcHVsYXRpb25Nb2RlbExhYmVsSW1wbCkgY3VycmVudExhYmVsLA0KKwkJCQkJZGVsdGEuZ2V0QXJyaXZhbHMoKSwgZGVsdGEuZ2V0RGVwYXJ0dXJlcygpLA0KKwkJCQkJdGhpcy5nZXRUaW1lUGVyaW9kKCksIHRpbWVEZWx0YSwNCisJCQkJCShTdGFuZGFyZFBvcHVsYXRpb25Nb2RlbExhYmVsVmFsdWVJbXBsKSBkZWx0YSk7DQorCQkJaGFuZGxlUGlwZVRyYW5zcG9ydCgNCisJCQkJCShTdGFuZGFyZFBvcHVsYXRpb25Nb2RlbExhYmVsSW1wbCkgY3VycmVudExhYmVsLA0KKwkJCQkJZGVsdGEuZ2V0QXJyaXZhbHMoKSwgZGVsdGEuZ2V0RGVwYXJ0dXJlcygpLCB0aW1lRGVsdGEsDQorCQkJCQkoU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxMYWJlbFZhbHVlSW1wbCkgZGVsdGEpOw0KKwkJCUVDb2xsZWN0aW9ucy5zb3J0KGRlbHRhLmdldEFycml2YWxzKCkpOw0KKwkJCUVDb2xsZWN0aW9ucy5zb3J0KGRlbHRhLmdldERlcGFydHVyZXMoKSk7DQorCQl9DQorCX0NCit9IC8vIEFnaW5nUG9wdWxhdGlvbk1vZGVsSW1wbA0KZGlmZiAtLWdpdCBhL21vZGVscy9wb3B1bGF0aW9ucy9vcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vcG9wdWxhdGlvbm1vZGVscy9zdGFuZGFyZC9pbXBsL0RlbW9ncmFwaGljUG9wdWxhdGlvbk1vZGVsSW1wbC5qYXZhIGIvbW9kZWxzL3BvcHVsYXRpb25zL29yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9wb3B1bGF0aW9ubW9kZWxzL3N0YW5kYXJkL2ltcGwvRGVtb2dyYXBoaWNQb3B1bGF0aW9uTW9kZWxJbXBsLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGUzZmYxMwotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9wb3B1bGF0aW9ucy9vcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vcG9wdWxhdGlvbm1vZGVscy9zdGFuZGFyZC9pbXBsL0RlbW9ncmFwaGljUG9wdWxhdGlvbk1vZGVsSW1wbC5qYXZhCkBAIC0wLDAgKzEsMjg3IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5pbXBsOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDEwIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOworaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbkNoYWluOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5CYXNpY0VMaXN0OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5FTGlzdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5JbnRlcm5hbEVPYmplY3Q7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnV0aWwuRU9iamVjdENvbnRhaW5tZW50RUxpc3Q7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnV0aWwuSW50ZXJuYWxFTGlzdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuVXRpbGl0eTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguRHluYW1pY0xhYmVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5Ob2RlTGFiZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLkRlY29yYXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuU1RFTVRpbWU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuUG9wdWxhdGlvbkxhYmVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5EZW1vZ3JhcGhpY1BvcHVsYXRpb25Nb2RlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuUG9wdWxhdGlvbkdyb3VwOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5Qb3B1bGF0aW9uTW9kZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLlBvcHVsYXRpb25Nb2RlbExhYmVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZFBhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWxWYWx1ZTsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPkRlbW9ncmFwaGljIFBvcHVsYXRpb24gTW9kZWw8L2I+PC9lbT4nLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiA8cD4KKyAqIFRoZSBmb2xsb3dpbmcgZmVhdHVyZXMgYXJlIGltcGxlbWVudGVkOgorICogPHVsPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5pbXBsLkRlbW9ncmFwaGljUG9wdWxhdGlvbk1vZGVsSW1wbCNnZXRQb3B1bGF0aW9uR3JvdXBzIDxlbT5Qb3B1bGF0aW9uIEdyb3VwczwvZW0+fTwvbGk+CisgKiA8L3VsPgorICogPC9wPgorICoKKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIERlbW9ncmFwaGljUG9wdWxhdGlvbk1vZGVsSW1wbCBleHRlbmRzIFN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsSW1wbCBpbXBsZW1lbnRzIERlbW9ncmFwaGljUG9wdWxhdGlvbk1vZGVsIHsKKwkvKioKKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRQb3B1bGF0aW9uR3JvdXBzKCkgPGVtPlBvcHVsYXRpb24gR3JvdXBzPC9lbT59JyBjb250YWlubWVudCByZWZlcmVuY2UgbGlzdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI2dldFBvcHVsYXRpb25Hcm91cHMoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBFTGlzdDxQb3B1bGF0aW9uR3JvdXA+IHBvcHVsYXRpb25Hcm91cHM7CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJcHVibGljIERlbW9ncmFwaGljUG9wdWxhdGlvbk1vZGVsSW1wbCgpIHsKKwkJc3VwZXIoKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgRUNsYXNzIGVTdGF0aWNDbGFzcygpIHsKKwkJcmV0dXJuIFN0YW5kYXJkUGFja2FnZS5MaXRlcmFscy5ERU1PR1JBUEhJQ19QT1BVTEFUSU9OX01PREVMOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFTGlzdDxQb3B1bGF0aW9uR3JvdXA+IGdldFBvcHVsYXRpb25Hcm91cHMoKSB7CisJCWlmIChwb3B1bGF0aW9uR3JvdXBzID09IG51bGwpIHsKKwkJCXBvcHVsYXRpb25Hcm91cHMgPSBuZXcgRU9iamVjdENvbnRhaW5tZW50RUxpc3Q8UG9wdWxhdGlvbkdyb3VwPihQb3B1bGF0aW9uR3JvdXAuY2xhc3MsIHRoaXMsIFN0YW5kYXJkUGFja2FnZS5ERU1PR1JBUEhJQ19QT1BVTEFUSU9OX01PREVMX19QT1BVTEFUSU9OX0dST1VQUyk7CisJCX0KKwkJcmV0dXJuIHBvcHVsYXRpb25Hcm91cHM7CisJfQorCisJCisJLyoqCisJICogRGVjb3JhdGUgdGhlIGdyYXBoIGZvciBhIGRlbW9ncmFwaGljIHBvcHVsYXRpb24gbW9kZWwKKwkgKiAKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgYm9vbGVhbiBkZWNvcmF0ZUdyYXBoKFNURU1UaW1lIHRpbWUpIHsKKwkJaWYodGhpcy5pc0dyYXBoRGVjb3JhdGVkKCkpIHJldHVybiB0cnVlOworCQkKKwkJCisJCWZvciAoZmluYWwgSXRlcmF0b3I8UG9wdWxhdGlvbkxhYmVsPiBwb3B1bGF0aW9uTGFiZWxJdGVyID0gZ2V0UG9wdWxhdGlvbkxhYmVscygKKwkJCQlnZXRQb3B1bGF0aW9uSWRlbnRpZmllcigpLCBnZXRHcmFwaCgpKS5pdGVyYXRvcigpOyBwb3B1bGF0aW9uTGFiZWxJdGVyCisJCQkJLmhhc05leHQoKTspIHsKKwkJCWZpbmFsIFBvcHVsYXRpb25MYWJlbCBwb3B1bGF0aW9uTGFiZWwgPSBwb3B1bGF0aW9uTGFiZWxJdGVyLm5leHQoKTsKKworCQkJaWYodGhpcy5nZXRQb3B1bGF0aW9uSWRlbnRpZmllcigpLmVxdWFscyhwb3B1bGF0aW9uTGFiZWwuZ2V0UG9wdWxhdGlvbklkZW50aWZpZXIoKSkpIHsKKwkJCQkKKwkJCQkvLyBNYWtlIHN1cmUgdGhlIG5vZGUgZG9lcyBub3QgYWxyZWFkeSBoYXZlIHBvcHVsYXRpb24gbW9kZWwgbGFiZWxzIGZvciB0aGUgc3ViIHBvcHVsYXRpb25zLgorCQkJCWJvb2xlYW4gZm91bmQgPSBmYWxzZTsKKwkJCQlmb3IoTm9kZUxhYmVsIGw6cG9wdWxhdGlvbkxhYmVsLmdldE5vZGUoKS5nZXRMYWJlbHMoKSkgeworCQkJCQlpZihsIGluc3RhbmNlb2YgUG9wdWxhdGlvbk1vZGVsTGFiZWwpCisJCQkJCQlmb3IoUG9wdWxhdGlvbkdyb3VwIGdyb3VwOnRoaXMuZ2V0UG9wdWxhdGlvbkdyb3VwcygpKQorCQkJCQkJCWlmKGdyb3VwLmdldElkZW50aWZpZXIoKS5lcXVhbHMoKChQb3B1bGF0aW9uTW9kZWxMYWJlbClsKS5nZXRQb3B1bGF0aW9uSWRlbnRpZmllcigpKSkKKwkJCQkJCQkJCXtmb3VuZCA9IHRydWU7YnJlYWs7fQorCQkJCQlpZihmb3VuZClicmVhazsKKwkJCQl9CisJCQkJaWYoZm91bmQpY29udGludWU7CisJCQkJCisJCQkJCisJCQkJLy8gT2theSwgYW5vdGhlciBkZW1vZ3JhcGhpYyBwb3B1bGF0aW9uIG1vZGVsIGhhcyBub3QgeWV0IGFkZGVkIHBvcHVsYXRpb24gbW9kZWwgbGFiZWxzCisJCQkJLy8gZm9yIHRoZSBzYW1lIHBvcHVsYXRpb24gZ3JvdXAgaWRlbnRpZmllcnMsIGJ1dCBpdCBtaWdodCBkbyBzbyBpbiB0aGUgZnV0dXJlIGRlcGVuZGluZworCQkJCS8vIHVwb24gdGhlIG9yZGVyIGRlY29yYXRlR3JhcGgoKSBpcyBjYWxsZWQgb24gdGhlIGRlY29yYXRvcnMuIENoZWNrIGlmIHRoZXJlCisJCQkJLy8gaXMgYW5vdGhlciBkZW1vZ3JhcGhpYyBwb3B1bGF0aW9uIG1vZGVsIHdpdGggYSBoaWdoZXIgaXNvIGxldmVsIHRhcmdldCBub2RlIFVSSSB0aGF0IHRoZQorCQkJCS8vIG5vZGUgaXMgY29udGFpbmVkIHdpdGhpbi4KKwkJCQkKKwkJCQlmb3VuZCA9IGZhbHNlOworCQkJCWZvcihEZWNvcmF0b3IgZDp0aGlzLmdldEdyYXBoKCkuZ2V0RGVjb3JhdG9ycygpKSB7CisJCQkJCSBpZighZC5lcXVhbHModGhpcykgJiYgIAorCQkJCQkJCSBkIGluc3RhbmNlb2YgRGVtb2dyYXBoaWNQb3B1bGF0aW9uTW9kZWwpCisJCQkJCQkgZm9yKFBvcHVsYXRpb25Hcm91cCBncm91cDp0aGlzLmdldFBvcHVsYXRpb25Hcm91cHMoKSkgeworCQkJCQkJCSBmb3IoUG9wdWxhdGlvbkdyb3VwIGdyb3VwMjooKERlbW9ncmFwaGljUG9wdWxhdGlvbk1vZGVsKWQpLmdldFBvcHVsYXRpb25Hcm91cHMoKSkKKwkJCQkJCQkJIGlmKGdyb3VwLmdldElkZW50aWZpZXIoKS5lcXVhbHMoZ3JvdXAyLmdldElkZW50aWZpZXIoKSkgJiYKKwkJCQkJCQkJICAgIFV0aWxpdHkua2V5TGV2ZWwoKChQb3B1bGF0aW9uTW9kZWwpZCkuZ2V0VGFyZ2V0SVNPS2V5KCkpID4gVXRpbGl0eS5rZXlMZXZlbCh0aGlzLmdldFRhcmdldElTT0tleSgpKSAmJgorCQkJCQkJCSBpc0NvbnRhaW5lZChwb3B1bGF0aW9uTGFiZWwuZ2V0Tm9kZSgpLCAoKChQb3B1bGF0aW9uTW9kZWwpZCkuZ2V0VGFyZ2V0SVNPS2V5KCkpKSkKKwkJCQkJCQkJIHtmb3VuZCA9IHRydWU7YnJlYWs7fQorCQkJCQkJCSBpZihmb3VuZClicmVhazsKKwkJCQkJCSB9CisJCQkJCSBpZihmb3VuZClicmVhazsKKwkJCQl9CisJCQkJaWYoZm91bmQpIGNvbnRpbnVlOworCQkJCQorCQkJCS8vIEl0ZXJhdGUgdGhlIGdyb3VwcyBpbiB0aGUgZGVtb2dyYXBoaWMgbW9kZWwgYW5kIGRpdmlkZSB0aGUgbnVtYmVycworCQkJCWZvcihQb3B1bGF0aW9uR3JvdXAgZ3JvdXA6dGhpcy5nZXRQb3B1bGF0aW9uR3JvdXBzKCkpIHsKKwkJCQkJZmluYWwgUG9wdWxhdGlvbk1vZGVsTGFiZWwgcGwgPSBjcmVhdGVQb3B1bGF0aW9uTGFiZWwoKTsKKwkJCQkJCisJCQkJCXBsLnNldFBvcHVsYXRpb25MYWJlbChwb3B1bGF0aW9uTGFiZWwpOworCQkJCQlnZXRMYWJlbHNUb1VwZGF0ZSgpLmFkZChwbCk7CisJCQkJCXBvcHVsYXRpb25MYWJlbC5nZXROb2RlKCkuZ2V0TGFiZWxzKCkuYWRkKHBsKTsKKwkJCQkJcGwuc2V0Tm9kZShwb3B1bGF0aW9uTGFiZWwuZ2V0Tm9kZSgpKTsKKwkJCQkJZ2V0R3JhcGgoKS5wdXROb2RlTGFiZWwocGwpOworCQkJCQkKKwkJCQkJcGwuc2V0UG9wdWxhdGlvbklkZW50aWZpZXIoZ3JvdXAuZ2V0SWRlbnRpZmllcigpKTsKKwkJCQkJU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxMYWJlbFZhbHVlSW1wbCBjdXJyZW50VmFsdWUgPSAoU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxMYWJlbFZhbHVlSW1wbClwbC5nZXRDdXJyZW50VmFsdWUoKTsKKwkJCQkJY3VycmVudFZhbHVlLnNldENvdW50KHBvcHVsYXRpb25MYWJlbC5nZXRDdXJyZW50UG9wdWxhdGlvblZhbHVlKCkuZ2V0Q291bnQoKSAqIGdyb3VwLmdldEZyYWN0aW9uKCkpOworCQkJCX0KKwkJCX0KKwkJfSAvLyBmb3IgZWFjaCBwb3B1bGF0aW9uIGxhYmVsCisJCXJlc2V0TGFiZWxzKCk7CisJCXJldHVybiB0cnVlOworCX0gLy8gZGVjb3JhdGVHcmFwaAorCQorCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBOb3RpZmljYXRpb25DaGFpbiBlSW52ZXJzZVJlbW92ZShJbnRlcm5hbEVPYmplY3Qgb3RoZXJFbmQsIGludCBmZWF0dXJlSUQsIE5vdGlmaWNhdGlvbkNoYWluIG1zZ3MpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJCWNhc2UgU3RhbmRhcmRQYWNrYWdlLkRFTU9HUkFQSElDX1BPUFVMQVRJT05fTU9ERUxfX1BPUFVMQVRJT05fR1JPVVBTOgorCQkJCXJldHVybiAoKEludGVybmFsRUxpc3Q8Pz4pZ2V0UG9wdWxhdGlvbkdyb3VwcygpKS5iYXNpY1JlbW92ZShvdGhlckVuZCwgbXNncyk7CisJCX0KKwkJcmV0dXJuIHN1cGVyLmVJbnZlcnNlUmVtb3ZlKG90aGVyRW5kLCBmZWF0dXJlSUQsIG1zZ3MpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBPYmplY3QgZUdldChpbnQgZmVhdHVyZUlELCBib29sZWFuIHJlc29sdmUsIGJvb2xlYW4gY29yZVR5cGUpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJCWNhc2UgU3RhbmRhcmRQYWNrYWdlLkRFTU9HUkFQSElDX1BPUFVMQVRJT05fTU9ERUxfX1BPUFVMQVRJT05fR1JPVVBTOgorCQkJCXJldHVybiBnZXRQb3B1bGF0aW9uR3JvdXBzKCk7CisJCX0KKwkJcmV0dXJuIHN1cGVyLmVHZXQoZmVhdHVyZUlELCByZXNvbHZlLCBjb3JlVHlwZSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQFN1cHByZXNzV2FybmluZ3MoInVuY2hlY2tlZCIpCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgZVNldChpbnQgZmVhdHVyZUlELCBPYmplY3QgbmV3VmFsdWUpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJCWNhc2UgU3RhbmRhcmRQYWNrYWdlLkRFTU9HUkFQSElDX1BPUFVMQVRJT05fTU9ERUxfX1BPUFVMQVRJT05fR1JPVVBTOgorCQkJCWdldFBvcHVsYXRpb25Hcm91cHMoKS5jbGVhcigpOworCQkJCWdldFBvcHVsYXRpb25Hcm91cHMoKS5hZGRBbGwoKENvbGxlY3Rpb248PyBleHRlbmRzIFBvcHVsYXRpb25Hcm91cD4pbmV3VmFsdWUpOworCQkJCXJldHVybjsKKwkJfQorCQlzdXBlci5lU2V0KGZlYXR1cmVJRCwgbmV3VmFsdWUpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGVVbnNldChpbnQgZmVhdHVyZUlEKSB7CisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7CisJCQljYXNlIFN0YW5kYXJkUGFja2FnZS5ERU1PR1JBUEhJQ19QT1BVTEFUSU9OX01PREVMX19QT1BVTEFUSU9OX0dST1VQUzoKKwkJCQlnZXRQb3B1bGF0aW9uR3JvdXBzKCkuY2xlYXIoKTsKKwkJCQlyZXR1cm47CisJCX0KKwkJc3VwZXIuZVVuc2V0KGZlYXR1cmVJRCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIGJvb2xlYW4gZUlzU2V0KGludCBmZWF0dXJlSUQpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJCWNhc2UgU3RhbmRhcmRQYWNrYWdlLkRFTU9HUkFQSElDX1BPUFVMQVRJT05fTU9ERUxfX1BPUFVMQVRJT05fR1JPVVBTOgorCQkJCXJldHVybiBwb3B1bGF0aW9uR3JvdXBzICE9IG51bGwgJiYgIXBvcHVsYXRpb25Hcm91cHMuaXNFbXB0eSgpOworCQl9CisJCXJldHVybiBzdXBlci5lSXNTZXQoZmVhdHVyZUlEKTsKKwl9CisKKwkvKioKKwkgKiBXZSBuZWVkIHRvIG92ZXJyaWRlIHRoaXMgb25lIHRvIGNvcnJlY3RseSByZXNldCB0aGUgc3VicG9wdWxhdGlvbnMKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCByZXNldExhYmVscygpIHsKKwkJc2V0RW5hYmxlZChFTkFCTEVEX0VERUZBVUxUKTsKKwkJc2V0R3JhcGhEZWNvcmF0ZWQoR1JBUEhfREVDT1JBVEVEX0VERUZBVUxUKTsKKwkJZm9yIChmaW5hbCBJdGVyYXRvcjxEeW5hbWljTGFiZWw+IGxhYmVsSXRlciA9IGdldExhYmVsc1RvVXBkYXRlKCkKKwkJCQkuaXRlcmF0b3IoKTsgbGFiZWxJdGVyLmhhc05leHQoKTspIHsKKwkJCVN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWwgcGxtID0gKFN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWwpbGFiZWxJdGVyLm5leHQoKTsKKwkJCQorCQkJCisJCQlwbG0uZ2V0Q3VycmVudFZhbHVlKCkucmVzZXQoKTsKKwkJCXBsbS5nZXROZXh0VmFsdWUoKS5yZXNldCgpOworCQkJcGxtLmdldERlbHRhVmFsdWUoKS5yZXNldCgpOworCQkJcGxtLmdldFRlbXBWYWx1ZSgpLnJlc2V0KCk7CisJCQlwbG0uZ2V0UHJvYmVWYWx1ZSgpLnJlc2V0KCk7CisJCQlwbG0uZ2V0RXJyb3JTY2FsZSgpLnJlc2V0KCk7CisJCQkKKwkJCWlmKHBsbS5nZXRQb3B1bGF0aW9uSWRlbnRpZmllcigpLmVxdWFscyh0aGlzLmdldFBvcHVsYXRpb25JZGVudGlmaWVyKCkpKSB7CisJCQkJZG91YmxlIG9yaWdpbmFsQ291bnQgPSBwbG0uZ2V0UG9wdWxhdGlvbkxhYmVsKCkuZ2V0Q3VycmVudFBvcHVsYXRpb25WYWx1ZSgpLmdldENvdW50KCk7CisJCQkJKChTdGFuZGFyZFBvcHVsYXRpb25Nb2RlbExhYmVsVmFsdWUpcGxtLmdldEN1cnJlbnRWYWx1ZSgpKS5zZXRDb3VudChvcmlnaW5hbENvdW50KTsKKwkJCX0gZWxzZSB7CisJCQkJLy8gVGhlIGxhYmVsIGlzIGZyb20gb25lIG9mIHRoZSBzdWJncm91cHMuIEZpZ3VyZSBvdXQgdGhlIGZyYWN0aW9uCisJCQkJZm9yKFBvcHVsYXRpb25Hcm91cCBnOnRoaXMuZ2V0UG9wdWxhdGlvbkdyb3VwcygpKSB7CisJCQkJCWlmKGcuZ2V0SWRlbnRpZmllcigpLmVxdWFscyhwbG0uZ2V0UG9wdWxhdGlvbklkZW50aWZpZXIoKSkpIHsKKwkJCQkJCWRvdWJsZSBvcmlnaW5hbENvdW50ID0gcGxtLmdldFBvcHVsYXRpb25MYWJlbCgpLmdldEN1cnJlbnRQb3B1bGF0aW9uVmFsdWUoKS5nZXRDb3VudCgpOworCQkJCQkJKChTdGFuZGFyZFBvcHVsYXRpb25Nb2RlbExhYmVsVmFsdWUpcGxtLmdldEN1cnJlbnRWYWx1ZSgpKS5zZXRDb3VudChvcmlnaW5hbENvdW50KmcuZ2V0RnJhY3Rpb24oKSk7CisJCQkJCQlicmVhazsKKwkJCQkJfQorCQkJCX0KKwkJCX0KKwkJfQorCQkKKwkJLy8gUG9wdWxhdGUgdGhlIHBpcGUgdHJhbnNwb3J0YXRpb24gc3lzdGVtcworCQlzdXBlci5wb3B1bGF0ZVBpcGVTeXN0ZW1Ob2RlcygpOworCX0gLy8gcmVzZXRMYWJlbHMKKwkKKwlAT3ZlcnJpZGUKKwlwdWJsaWMgRUxpc3Q8U3RyaW5nPiBnZXRBbGxMYWJlbElkZW50aWZpZXJzKCkgeworCQlFTGlzdDxTdHJpbmc+IGlkZW50aWZpZXJzID0gbmV3IEJhc2ljRUxpc3Q8U3RyaW5nPigpOworCQkKKwkJZm9yIChQb3B1bGF0aW9uR3JvdXAgZ3JvdXAgOiBnZXRQb3B1bGF0aW9uR3JvdXBzKCkpIHsKKwkJCWlkZW50aWZpZXJzLmFkZChncm91cC5nZXRJZGVudGlmaWVyKCkpOworCQl9CisJCQorCQlyZXR1cm4gaWRlbnRpZmllcnM7CisJfQorCQorfSAvL0RlbW9ncmFwaGljUG9wdWxhdGlvbk1vZGVsSW1wbApkaWZmIC0tZ2l0IGEvbW9kZWxzL3BvcHVsYXRpb25zL29yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9wb3B1bGF0aW9ubW9kZWxzL3N0YW5kYXJkL2ltcGwvRWFydGhTY2llbmNlUG9wdWxhdGlvbkluaXRpYWxpemVySW1wbC5qYXZhIGIvbW9kZWxzL3BvcHVsYXRpb25zL29yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9wb3B1bGF0aW9ubW9kZWxzL3N0YW5kYXJkL2ltcGwvRWFydGhTY2llbmNlUG9wdWxhdGlvbkluaXRpYWxpemVySW1wbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYwMjY5ZGQKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvcG9wdWxhdGlvbnMvb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3BvcHVsYXRpb25tb2RlbHMvc3RhbmRhcmQvaW1wbC9FYXJ0aFNjaWVuY2VQb3B1bGF0aW9uSW5pdGlhbGl6ZXJJbXBsLmphdmEKQEAgLTAsMCArMSw0OCBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuaW1wbDsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogCisgKiBDb3B5cmlnaHQgKGMpIDIwMTEgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuIAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyAKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0IAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwgCisgKiAKKyAqIENvbnRyaWJ1dG9yczogCisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5FYXJ0aFNjaWVuY2VQb3B1bGF0aW9uSW5pdGlhbGl6ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkUGFja2FnZTsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPkVhcnRoIFNjaWVuY2UgUG9wdWxhdGlvbiBJbml0aWFsaXplcjwvYj48L2VtPicuCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIDxwPgorICogPC9wPgorICoKKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGFic3RyYWN0IGNsYXNzIEVhcnRoU2NpZW5jZVBvcHVsYXRpb25Jbml0aWFsaXplckltcGwgZXh0ZW5kcyBQb3B1bGF0aW9uSW5pdGlhbGl6ZXJJbXBsIGltcGxlbWVudHMgRWFydGhTY2llbmNlUG9wdWxhdGlvbkluaXRpYWxpemVyIHsKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgRWFydGhTY2llbmNlUG9wdWxhdGlvbkluaXRpYWxpemVySW1wbCgpIHsKKwkJc3VwZXIoKTsKKwl9CisKKwkKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgRUNsYXNzIGVTdGF0aWNDbGFzcygpIHsKKwkJcmV0dXJuIFN0YW5kYXJkUGFja2FnZS5MaXRlcmFscy5FQVJUSF9TQ0lFTkNFX1BPUFVMQVRJT05fSU5JVElBTElaRVI7CisJfQorCit9IC8vRWFydGhTY2llbmNlUG9wdWxhdGlvbkluaXRpYWxpemVySW1wbApkaWZmIC0tZ2l0IGEvbW9kZWxzL3BvcHVsYXRpb25zL29yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9wb3B1bGF0aW9ubW9kZWxzL3N0YW5kYXJkL2ltcGwvTW9zcXVpdG9Qb3B1bGF0aW9uTW9kZWxJbXBsLmphdmEgYi9tb2RlbHMvcG9wdWxhdGlvbnMvb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3BvcHVsYXRpb25tb2RlbHMvc3RhbmRhcmQvaW1wbC9Nb3NxdWl0b1BvcHVsYXRpb25Nb2RlbEltcGwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YmIzMmIwCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL3BvcHVsYXRpb25zL29yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9wb3B1bGF0aW9ubW9kZWxzL3N0YW5kYXJkL2ltcGwvTW9zcXVpdG9Qb3B1bGF0aW9uTW9kZWxJbXBsLmphdmEKQEAgLTAsMCArMSw2NjMgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLmltcGw7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIAorICogQ29weXJpZ2h0IChjKSAyMDExIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiAKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdCAKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sIAorICogCisgKiBDb250cmlidXRvcnM6IAorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiAKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKK2ltcG9ydCBqYXZhLnV0aWwuQ2FsZW5kYXI7CitpbXBvcnQgamF2YS51dGlsLlNvcnRlZFNldDsKK2ltcG9ydCBqYXZhLnV0aWwuVHJlZVNldDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuRUNvbGxlY3Rpb25zOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5FTGlzdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5pbXBsLkVOb3RpZmljYXRpb25JbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5EeW5hbWljTGFiZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkV4Y2hhbmdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5FeGNoYW5nZVR5cGU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkdyYXBoRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguTGFiZWxWYWx1ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguTm9kZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguTm9kZUxhYmVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5TVEVNVGltZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5Lkdlb2dyYXBoaWNNYXBwZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS5HZW9ncmFwaGljTmFtZXM7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuQXJlYUxhYmVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLkVhcnRoU2NpZW5jZUxhYmVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLlBvcHVsYXRpb25MYWJlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuTW9zcXVpdG9Qb3B1bGF0aW9uTW9kZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLlBvcHVsYXRpb25Nb2RlbExhYmVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5Qb3B1bGF0aW9uTW9kZWxMYWJlbFZhbHVlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZEZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxMYWJlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxMYWJlbFZhbHVlOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiBBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+TW9zcXVpdG8gUG9wdWxhdGlvbiBNb2RlbDwvYj48L2VtPicuCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIDxwPgorICogVGhlIGZvbGxvd2luZyBmZWF0dXJlcyBhcmUgaW1wbGVtZW50ZWQ6CisgKiA8dWw+CisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLmltcGwuTW9zcXVpdG9Qb3B1bGF0aW9uTW9kZWxJbXBsI2dldFNjYWxpbmdGYWN0b3IgPGVtPlNjYWxpbmcgRmFjdG9yPC9lbT59PC9saT4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuaW1wbC5Nb3NxdWl0b1BvcHVsYXRpb25Nb2RlbEltcGwjZ2V0VGltZVBlcmlvZCA8ZW0+VGltZSBQZXJpb2Q8L2VtPn08L2xpPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5pbXBsLk1vc3F1aXRvUG9wdWxhdGlvbk1vZGVsSW1wbCNnZXRNb3J0YWxpdHlSYXRlIDxlbT5Nb3J0YWxpdHkgUmF0ZTwvZW0+fTwvbGk+CisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLmltcGwuTW9zcXVpdG9Qb3B1bGF0aW9uTW9kZWxJbXBsI2dldEhvc3QgPGVtPkhvc3Q8L2VtPn08L2xpPgorICogPC91bD4KKyAqIDwvcD4KKyAqCisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBNb3NxdWl0b1BvcHVsYXRpb25Nb2RlbEltcGwgZXh0ZW5kcyBQb3B1bGF0aW9uTW9kZWxJbXBsIGltcGxlbWVudHMgTW9zcXVpdG9Qb3B1bGF0aW9uTW9kZWwgeworCQorCWZpbmFsIHN0YXRpYyBkb3VibGUgVFJBUF9BUkVBID0gTWF0aC5QSSogMC4wNSowLjA1OworCXN0YXRpYyBkb3VibGUgTUFYX0JJVEVfUkFURSA9IDAuMDsKKwlmaW5hbCBzdGF0aWMgZG91YmxlIE1JU1NJTkdfREFUQSA9IDk5OTk5LjA7CisJCisJLyoqCisJICogVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldFNjYWxpbmdGYWN0b3IoKSA8ZW0+U2NhbGluZyBGYWN0b3I8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI2dldFNjYWxpbmdGYWN0b3IoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgZG91YmxlIFNDQUxJTkdfRkFDVE9SX0VERUZBVUxUID0gMS4wOworCQorCXN0YXRpYyBkb3VibGUgbWF4UGVyUGVyc29uRGVuID0gMC4wOworCXN0YXRpYyBkb3VibGUgbWF4QXJlYVRyYXBDb3VudCA9IDAuMDsgLy8gYXNzdW1pbmcgMTVtIHRyYXAgcmFkaXVzCisJc3RhdGljIGRvdWJsZSBtYXhQb3AgPSAwLjA7CisJc3RhdGljIGRvdWJsZSBtYXhIdW1hbnMgPSAxLjA7CisKKwkvKioKKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRTY2FsaW5nRmFjdG9yKCkgPGVtPlNjYWxpbmcgRmFjdG9yPC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNnZXRTY2FsaW5nRmFjdG9yKCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgZG91YmxlIHNjYWxpbmdGYWN0b3IgPSBTQ0FMSU5HX0ZBQ1RPUl9FREVGQVVMVDsKKworCS8qKgorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRUaW1lUGVyaW9kKCkgPGVtPlRpbWUgUGVyaW9kPC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNnZXRUaW1lUGVyaW9kKCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIGxvbmcgVElNRV9QRVJJT0RfRURFRkFVTFQgPSA4NjQwMDAwMEw7CisKKwkvKioKKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRUaW1lUGVyaW9kKCkgPGVtPlRpbWUgUGVyaW9kPC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNnZXRUaW1lUGVyaW9kKCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgbG9uZyB0aW1lUGVyaW9kID0gVElNRV9QRVJJT0RfRURFRkFVTFQ7CisKKwkvKioKKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0TW9ydGFsaXR5UmF0ZSgpIDxlbT5Nb3J0YWxpdHkgUmF0ZTwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZ2V0TW9ydGFsaXR5UmF0ZSgpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBkb3VibGUgTU9SVEFMSVRZX1JBVEVfRURFRkFVTFQgPSAwLjA1OworCisJLyoqCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0TW9ydGFsaXR5UmF0ZSgpIDxlbT5Nb3J0YWxpdHkgUmF0ZTwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZ2V0TW9ydGFsaXR5UmF0ZSgpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIGRvdWJsZSBtb3J0YWxpdHlSYXRlID0gTU9SVEFMSVRZX1JBVEVfRURFRkFVTFQ7CisKKwkvKioKKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0SG9zdCgpIDxlbT5Ib3N0PC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNnZXRIb3N0KCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIFN0cmluZyBIT1NUX0VERUZBVUxUID0gImh1bWFuIjsKKworCS8qKgorCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldEhvc3QoKSA8ZW0+SG9zdDwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZ2V0SG9zdCgpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIFN0cmluZyBob3N0ID0gSE9TVF9FREVGQVVMVDsKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlwdWJsaWMgTW9zcXVpdG9Qb3B1bGF0aW9uTW9kZWxJbXBsKCkgeworCQlzdXBlcigpOworCX0KKworCQorCUBPdmVycmlkZQorCXB1YmxpYyBQb3B1bGF0aW9uTW9kZWxMYWJlbCBjcmVhdGVQb3B1bGF0aW9uTGFiZWwoKSB7CisJCVBvcHVsYXRpb25Nb2RlbExhYmVsIHJldFZhbHVlID0gU3RhbmRhcmRGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVTdGFuZGFyZFBvcHVsYXRpb25Nb2RlbExhYmVsKCk7CisJCXJldFZhbHVlLnNldFR5cGVVUkkoUG9wdWxhdGlvbk1vZGVsTGFiZWwuVVJJX1RZUEVfRFlOQU1JQ19QT1BVTEFUSU9OX0xBQkVMKTsKKwkJcmV0dXJuIHJldFZhbHVlOworCX0KKwkKKwlAT3ZlcnJpZGUKKwlwdWJsaWMgUG9wdWxhdGlvbk1vZGVsTGFiZWxWYWx1ZSBjcmVhdGVQb3B1bGF0aW9uTGFiZWxWYWx1ZSgpIHsKKwkJcmV0dXJuIFN0YW5kYXJkRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxMYWJlbFZhbHVlKCk7CisJfQorCQorCVNvcnRlZFNldDxEb3VibGU+IGRlbnNpdGllcyA9IG5ldyBUcmVlU2V0PERvdWJsZT4oKTsKKwkKKwkvKioKKwkgKiBDb21wdXRlIHRoZSBjaGFuZ2VzIGluIHRoZSBtb3NxdWl0byBwb3B1bGF0aW9uIHVzaW5nIGVhcnRoIHNjaWVuY2UgZGF0YQorCSAqIAorCSAqIEBwYXJhbSB0aW1lCisJICogQHBhcmFtIHRpbWVEZWx0YQorCSAqIEBwYXJhbSBsYWJlbHMKKwkgKi8KKwlAU3VwcHJlc3NXYXJuaW5ncygiZGVwcmVjYXRpb24iKQorCXB1YmxpYyB2b2lkIGNhbGN1bGF0ZURlbHRhKFNURU1UaW1lIHRpbWUsIGxvbmcgdGltZURlbHRhLAorCQkJRUxpc3Q8RHluYW1pY0xhYmVsPiBsYWJlbHMpIHsKKwkKKwkJZm9yKER5bmFtaWNMYWJlbCBsYWJlbDpsYWJlbHMpIHsKKwkJCVN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWxJbXBsIHNsYWJlbCA9IChTdGFuZGFyZFBvcHVsYXRpb25Nb2RlbExhYmVsSW1wbClsYWJlbDsKKwkJCVN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWxWYWx1ZUltcGwgZGVsdGEgPSAoU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxMYWJlbFZhbHVlSW1wbClzbGFiZWwuZ2V0RGVsdGFWYWx1ZSgpOworCQkJU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxMYWJlbFZhbHVlIGN1cnJlbnQgPSAoU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxMYWJlbFZhbHVlKXNsYWJlbC5nZXRQcm9iZVZhbHVlKCk7CisJCQkKKwkJCWRvdWJsZSBjdXJyZW50UG9wdWxhdGlvbiA9IGN1cnJlbnQuZ2V0Q291bnQoKTsKKwkJCUNhbGVuZGFyIGMgPSBDYWxlbmRhci5nZXRJbnN0YW5jZSgpOworCQkJYy5zZXRUaW1lKHRpbWUuZ2V0VGltZSgpKTsKKwkJCWludCBtb250aCA9IGMuZ2V0KENhbGVuZGFyLk1PTlRIKTsgLy8gZGVwcmVjYXRlZCBidXQgc3RpbGwgd29ya3MKKwkJCWludCBuZXh0TW9udGggPSBtb250aCsxOworCQkJaWYgKG5leHRNb250aCA+IDExKSBuZXh0TW9udGggPSAwOworCQkJCisJCQlkb3VibGUgZGF5T2ZNb250aCA9IGMuZ2V0KENhbGVuZGFyLkRBWV9PRl9NT05USCk7CisJCQlkb3VibGUgZGF5c0luTW9udGggPSBjLmdldEFjdHVhbE1heGltdW0oQ2FsZW5kYXIuREFZX09GX01PTlRIKTsgCisJCQkKKwkJCWRvdWJsZSBmcmFjdGlvbiA9IGRheU9mTW9udGgvZGF5c0luTW9udGg7CisJCQkKKwkJCS8vIEdldCB0aGUgZWxldmF0aW9uIAorCQkJIE5vZGUgbiA9IHNsYWJlbC5nZXROb2RlKCk7CisJCQkgZG91YmxlIGVsZXZhdGlvbiA9IDA7IAorCQkJIGRvdWJsZSB0ZW1wZXJhdHVyZSA9IDA7CisJCQkgZG91YmxlIHJhaW5mYWxsID0gMDsKKwkJCSBkb3VibGUgdmVnZXRhdGlvbiA9IDA7CisJCQkKKwkJCSBkb3VibGUgdGVtcGVyYXR1cmUwID0gMDsKKwkJCSBkb3VibGUgcmFpbmZhbGwwID0gMDsKKwkJCSBkb3VibGUgdmVnZXRhdGlvbjAgPSAwOworCQkJCisJCQkgZG91YmxlIHRlbXBlcmF0dXJlMSA9IDA7CisJCQkgZG91YmxlIHJhaW5mYWxsMSA9IDA7CisJCQkgZG91YmxlIHZlZ2V0YXRpb24xID0gMDsKKwkJCSBkb3VibGUgYXJlYSA9IC0xLjA7CisJCQkgZG91YmxlIGh1bWFucyA9IDEuMDsKKwkJCSBmb3IoTm9kZUxhYmVsIG5sOm4uZ2V0TGFiZWxzKCkpIHsKKwkJCQkgaWYobmwgaW5zdGFuY2VvZiBBcmVhTGFiZWwpIHsKKwkJCQkJIGFyZWEgPSAoKEFyZWFMYWJlbClubCkuZ2V0Q3VycmVudEFyZWFWYWx1ZSgpLmdldEFyZWEoKTsKKwkJCQkgfSBlbHNlCisJCQkJIGlmKG5sIGluc3RhbmNlb2YgUG9wdWxhdGlvbkxhYmVsKSB7CisJCQkJCSBTdHJpbmcgcG9wVHlwZSA9ICgoUG9wdWxhdGlvbkxhYmVsKW5sKS5nZXRQb3B1bGF0aW9uSWRlbnRpZmllcigpOworCQkJCQkgaWYocG9wVHlwZS5lcXVhbHNJZ25vcmVDYXNlKCJodW1hbiIpKSB7CisJCQkJCQlodW1hbnM9ICgoUG9wdWxhdGlvbkxhYmVsKW5sKS5nZXRDdXJyZW50UG9wdWxhdGlvblZhbHVlKCkuZ2V0Q291bnQoKTsKKwkJCQkJIH0KKwkJCQkgfSBlbHNlCisJCQkJIGlmKG5sIGluc3RhbmNlb2YgRWFydGhTY2llbmNlTGFiZWwgJiYgKChFYXJ0aFNjaWVuY2VMYWJlbClubCkuZ2V0Q3VycmVudEVhcnRoU2NpZW5jZVZhbHVlKCkuZ2V0RGF0YVR5cGUoKS5lcXVhbHMoImVsZXZhdGlvbiIpKSB7CisJCQkJCSBlbGV2YXRpb24gPSAoKEVhcnRoU2NpZW5jZUxhYmVsKW5sKS5nZXRDdXJyZW50RWFydGhTY2llbmNlVmFsdWUoKS5nZXRNZWFuKCkuZ2V0KDApLmRvdWJsZVZhbHVlKCk7CisJCQkJIH0gZWxzZSBpZihubCBpbnN0YW5jZW9mIEVhcnRoU2NpZW5jZUxhYmVsICYmICgoRWFydGhTY2llbmNlTGFiZWwpbmwpLmdldEN1cnJlbnRFYXJ0aFNjaWVuY2VWYWx1ZSgpLmdldERhdGFUeXBlKCkuZXF1YWxzKCJuaWdodHRlbXAiKSkgeworCQkJCQkgdGVtcGVyYXR1cmUwID0gKChFYXJ0aFNjaWVuY2VMYWJlbClubCkuZ2V0Q3VycmVudEVhcnRoU2NpZW5jZVZhbHVlKCkuZ2V0TWVhbigpLmdldChtb250aCkuZG91YmxlVmFsdWUoKTsKKwkJCQkJIHRlbXBlcmF0dXJlMSA9ICgoRWFydGhTY2llbmNlTGFiZWwpbmwpLmdldEN1cnJlbnRFYXJ0aFNjaWVuY2VWYWx1ZSgpLmdldE1lYW4oKS5nZXQobmV4dE1vbnRoKS5kb3VibGVWYWx1ZSgpOworCQkJCQkgLy8gQ2hlY2sgZm9yIG1pc3NpbmcgZWFydGggc2NpZW5jZSBkYXRhLiAKKwkJCQkJIC8vIElmIG1pc3NpbmcsIHNraXAgdGhlIGxhYmVsCisJCQkJCSAvLyBTb21lIHJlZ2lvbnMgaW4gUnVzc2lhIGhhZCA5OTk5OS4wMDAwMDAwMDAwMSBmb3IgbWlzc2luZyBkYXRhIChjaGVjayB0aGlzKS4gVG8gd29yayBhcm91bmQsIHJvdW5kIHRvIGFuIGludGVnZXIKKwkJCQkJIAorCQkJCQkgaWYoTWF0aC5yaW50KHRlbXBlcmF0dXJlMCkgPT0gTUlTU0lOR19EQVRBIHx8IE1hdGgucmludCh0ZW1wZXJhdHVyZTEpID09IE1JU1NJTkdfREFUQSkKKwkJCQkJCSBjb250aW51ZTsKKwkJCQkJIC8vIGludGVycG9sYXRlCisJCQkJCSB0ZW1wZXJhdHVyZSA9IChmcmFjdGlvbip0ZW1wZXJhdHVyZTEpICsoMS4wLWZyYWN0aW9uKSp0ZW1wZXJhdHVyZTA7CisKKwkJCQkgfSBlbHNlIGlmKG5sIGluc3RhbmNlb2YgRWFydGhTY2llbmNlTGFiZWwgJiYgKChFYXJ0aFNjaWVuY2VMYWJlbClubCkuZ2V0Q3VycmVudEVhcnRoU2NpZW5jZVZhbHVlKCkuZ2V0RGF0YVR5cGUoKS5lcXVhbHMoInJhaW5mYWxsIikpIHsKKwkJCQkJIHJhaW5mYWxsMCA9ICgoRWFydGhTY2llbmNlTGFiZWwpbmwpLmdldEN1cnJlbnRFYXJ0aFNjaWVuY2VWYWx1ZSgpLmdldE1lYW4oKS5nZXQobW9udGgpLmRvdWJsZVZhbHVlKCk7CisJCQkJCSByYWluZmFsbDEgPSAoKEVhcnRoU2NpZW5jZUxhYmVsKW5sKS5nZXRDdXJyZW50RWFydGhTY2llbmNlVmFsdWUoKS5nZXRNZWFuKCkuZ2V0KG5leHRNb250aCkuZG91YmxlVmFsdWUoKTsKKwkJCQkJIGlmKE1hdGgucmludChyYWluZmFsbDApID09IE1JU1NJTkdfREFUQSB8fCBNYXRoLnJpbnQocmFpbmZhbGwxKSA9PSBNSVNTSU5HX0RBVEEpCisJCQkJCQkgY29udGludWU7CisJCQkJCSAvLyBpbnRlcnBvbGF0ZQorCQkJCQkgcmFpbmZhbGwgPSAoZnJhY3Rpb24qcmFpbmZhbGwxKSArKDEuMC1mcmFjdGlvbikqcmFpbmZhbGwwOworCQkJCQkgCisJCQkJIH0gZWxzZSBpZihubCBpbnN0YW5jZW9mIEVhcnRoU2NpZW5jZUxhYmVsICYmICgoRWFydGhTY2llbmNlTGFiZWwpbmwpLmdldEN1cnJlbnRFYXJ0aFNjaWVuY2VWYWx1ZSgpLmdldERhdGFUeXBlKCkuZXF1YWxzKCJ2ZWdldGF0aW9uIikpIHsKKwkJCQkJIHZlZ2V0YXRpb24wID0gKChFYXJ0aFNjaWVuY2VMYWJlbClubCkuZ2V0Q3VycmVudEVhcnRoU2NpZW5jZVZhbHVlKCkuZ2V0TWVhbigpLmdldChtb250aCkuZG91YmxlVmFsdWUoKTsKKwkJCQkJIHZlZ2V0YXRpb24xID0gKChFYXJ0aFNjaWVuY2VMYWJlbClubCkuZ2V0Q3VycmVudEVhcnRoU2NpZW5jZVZhbHVlKCkuZ2V0TWVhbigpLmdldChuZXh0TW9udGgpLmRvdWJsZVZhbHVlKCk7CisJCQkJCSBpZihNYXRoLnJpbnQodmVnZXRhdGlvbjApID09IE1JU1NJTkdfREFUQSB8fCBNYXRoLnJpbnQodmVnZXRhdGlvbjEpID09IE1JU1NJTkdfREFUQSkKKwkJCQkJCSBjb250aW51ZTsKKwkJCQkJIC8vIGludGVycG9sYXRlCisJCQkJCSB2ZWdldGF0aW9uID0gKGZyYWN0aW9uKnZlZ2V0YXRpb24xKSArKDEuMC1mcmFjdGlvbikqdmVnZXRhdGlvbjA7CisJCQkJIH0KKwkJCSB9CisJCQkgCisJCQkKKwkJCSAKKwkJCSAvLyBJZiB0aGUgbW9kZWwgZG9lcyBub3QgY29udGFpbiB0aGUgZWFydGggc2NpZW5jZSBkYXRhLCB0aGUgZGVmYXVsdHMgYWJvdmUgd2lsbCBiZSB1c2VkCisJCQkvLyBFTEVWQVRJT04KKwkJCWZpbmFsIGRvdWJsZSBFTEVWQVRJT05fU0xPUEUgPSAwLjEyNTsKKwkJCWZpbmFsIGRvdWJsZSBFbEVWQVRJT05fUEVBSyA9IDQwMC4wOworCQkJZG91YmxlIGVGYWN0b3IgPTAuMDsKKwkJCWlmKGVsZXZhdGlvbiA8PSBFbEVWQVRJT05fUEVBSyAmJiBlbGV2YXRpb24gPiAwLjApIHsJCQkKKwkJCQllRmFjdG9yID0gRUxFVkFUSU9OX1NMT1BFKmVsZXZhdGlvbjsKKwkJCX0gZWxzZSB7CisJCQkJZmluYWwgZG91YmxlIEVMRVZBVElPTl9ET1dOX1NMT1BFID0gLTAuMDYyNTsgLy9kb3duIHRvIDEyMDAgbWV0ZXJzIChub3QgODAwKSBUT00KKwkJCQllRmFjdG9yID0gTWF0aC5tYXgoMC4wLChFbEVWQVRJT05fUEVBSypFTEVWQVRJT05fU0xPUEUpICsgKEVMRVZBVElPTl9ET1dOX1NMT1BFKihlbGV2YXRpb24tRWxFVkFUSU9OX1BFQUspKSk7CisJCQkJLy9lRmFjdG9yID0gTWF0aC5tYXgoMC4wLChFbEVWQVRJT05fUEVBSypFTEVWQVRJT05fU0xPUEUpIC0gKEVMRVZBVElPTl9TTE9QRSooZWxldmF0aW9uLUVsRVZBVElPTl9QRUFLKSkpOworCQkJfQorCQkJLy8gUkFJTkZBTEwgLSBqdXN0IG1ha2UgaXQgbGluZWFyCisJCQlkb3VibGUgckZhY3RvciA9IHJhaW5mYWxsOworCQkJCisJCQkvLyBUaGUgZnVuY3Rpb24gaXMgICgtNC40ICsgKDEuMzEqdCkgLSAoLjAzKnQuXjIpKS4qKDAuMDA1NTQuKnQgLSAwLjA2NzM3KTsKKwkJCS8vIEVzc2VudGlhbGx5IGEgY29tYmluYXRpb24gb2YgYmlydGggcmF0ZXMgYW5kIGRlYXRoIHJhdGUgCisJCQkvLworCQkJLy8gcmVmZXJlbmNlOiBodHRwOi8vd3d3LmNlbGwuY29tL3RyZW5kcy9wYXJhc2l0b2xvZ3kvYWJzdHJhY3QvUzAxNjktNDc1OCUyODk5JTI5MDEzOTYtNAorCQkJLy8gVHJlbmRzIGluIFBhcmFzaXRvbG9neSwgVm9sdW1lIDE1LCBJc3N1ZSAzLCAxMDUtMTExLCAxIE1hcmNoIDE5OTkKKwkJCS8vIEEgQ2xpbWF0ZS1iYXNlZCBEaXN0cmlidXRpb24gTW9kZWwgb2YgTWFsYXJpYSBUcmFuc21pc3Npb24gaW4gU3ViLVNhaGFyYW4gQWZyaWNhCisJCQkvLyBNLkguIENyYWlnLCBSLlcuIFNub3cgYW5kIEQuIGxlIFN1ZXVyCisJCQkKKwkJCS8vZmluYWwgZG91YmxlIFRBVkcgPSAzMDsgLy8gcmVmIHNheXMgMjdDCisJCQkvL2ZpbmFsIGRvdWJsZSBzaWdtYSA9IDMuMDsKKwkJCS8vZG91YmxlIGFyZyA9IC0xLjAqTWF0aC5wb3coKHRlbXBlcmF0dXJlIC0gVEFWRyksMikgLyAoMi4wKnNpZ21hKnNpZ21hKTsKKwkJCS8vZG91YmxlIHRGYWN0b3IgPSAxL01hdGguc3FydCgyKk1hdGguUEkqc2lnbWEqc2lnbWEpKk1hdGguZXhwKGFyZyk7CisJCQkKKwkJCWRvdWJsZSB0RmFjdG9yID0gICgtNC40ICsgKDEuMzEqdGVtcGVyYXR1cmUpIC0gKC4wMypNYXRoLnBvdyh0ZW1wZXJhdHVyZSwgMikpKSooMC4wMDU1NCp0ZW1wZXJhdHVyZSAtIDAuMDY3MzcpOworCQkJdEZhY3RvciA9ICh0ZW1wZXJhdHVyZTwxNiB8fCB0ZW1wZXJhdHVyZT40MCk/MDp0RmFjdG9yOworCQkJCisJCQkvLyB2ZWdldGF0aW9uIGxpbmVhciBtb2RlbCBhYm92ZSAKKwkJCWRvdWJsZSB2RmFjdG9yID0gTWF0aC5tYXgoMC4wLCAodmVnZXRhdGlvbi0wLjMpKTsKKwkJCQorCQkJLy9lcXVhbGl6ZSBhbGwgZmFjdG9ycyAoVG9tKQorLy8JCQllRmFjdG9yKj0xOworLy8JCQlyRmFjdG9yKj0uMTsKKy8vCQkJdEZhY3Rvcio9MTAwMDA7CisvLwkJCXZGYWN0b3IqPTEwMDsKKwkJCS8vQW5vdGhlciBpZGVhOiBmYWN0b3IgbWF0cml4IG9mIFtlbGV2YXRpb25dW3JhaW5mYWxsXVt0ZW1wZXJhdHVyZV1bdmVnZXRhdGlvbl0KKwkJCS8vCWRvdWJsZSBbXVtdW11bXSBmYWN0b3JNYXRyaXggPSBuZXcgZG91YmxlWzEwXVsxMF1bMTBdWzEwXTsKKwkJCQorCQkJLy9kb3VibGUgbmV3UG9wdWxhdGlvbiA9IHNjYWxpbmdGYWN0b3IgKiB0ZW1wZXJhdHVyZSAqIHJhaW5mYWxsIC8gZWxldmF0aW9uOworCQkJZG91YmxlIG1vc3F1aXRvQXJlYWxEZW5zaXR5ID0gZ2V0U2NhbGluZ0ZhY3RvcigpICogKGVGYWN0b3IqdEZhY3RvcikqKHZGYWN0b3IqckZhY3Rvcik7CisJCQkKKwkJCS8vIE90aGVyIEZhY3RvcnMKKwkJCS8vRXZhcG8tdHJhbnNwaXJhdGlvbgorCQkJLy93aW5kIHNwZWVkCisJCQkvL3N1bmxpZ2h0IGV4cG9zdXJlCisJCQkvL3NpemUgb2Ygc3RpbGwgd2F0ZXIKKwkJCS8vc2l6ZSBvZiByZWdpb24KKwkJCQorCQkJCisJCQkvL3NpemUgb2YgaXRzIGZvb2QgZS5nLiBodW1hbnMsIGNhdHRsZXMsCisJCQkKKwkJCS8vIEZpbmQgdGhlIGhvc3QgcG9wdWxhdGlvbiBtb2RlbCBsYWJlbAorCQkJLy8gYW5kIHNjYWxlIHdpdGggdGhlIHBvcHVsYXRpb24gbnVtYmVyLgorCQkJLy8gSWYgbm90IGZvdW5kLCB0aGUgcG9wdWxhdGlvbiBtb2RlbCBiZWNvbWVzCisJCQkvLyBhIG1vZGVsIG9mIHBvdGVudGlhbCBtb3NxdWl0b3MgLyBwZXJzb24gaW5zdGVhZC4KKwkJCQorCQkJU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxMYWJlbCBwbWwgPSBmaW5kU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxMYWJlbChuLCBnZXRIb3N0KCkpOworCQkJZG91YmxlIG51bUh1bWFuID0gMC4wOworCQkJaWYocG1sICE9IG51bGwpeworCQkJCQludW1IdW1hbiA9ICgoU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxMYWJlbFZhbHVlKXBtbC5nZXRUZW1wVmFsdWUoKSkuZ2V0Q291bnQoKTsKKwkJCX0KKwkJCQorCQkJZG91YmxlIGh1bWFuQXJlYWxEZW5zaXR5ID0gbnVtSHVtYW4vYXJlYTsKKwkJCWlmKGh1bWFuQXJlYWxEZW5zaXR5ID4gMTY5ODkuMCkgeyAvLyBtb25hY28KKy8vCQkJCVN5c3RlbS5lcnIucHJpbnRsbigiRGVuc2l0eSAiK2h1bWFuQXJlYWxEZW5zaXR5KyIgTG9jYXRpb24gIitzbGFiZWwuZ2V0SWRlbnRpZmlhYmxlKCkuZ2V0VVJJKCkubGFzdFNlZ21lbnQoKSsiIG5hbWU6ICIrR2VvZ3JhcGhpY05hbWVzLmdldE5hbWUoc2xhYmVsLmdldElkZW50aWZpYWJsZSgpLmdldFVSSSgpLmxhc3RTZWdtZW50KCkpKTsJCQkJCisJCQl9CisJCQkKKwkJCWRvdWJsZSBmZWVkaW5nTW9zcXVpdG9zID0gbW9zcXVpdG9BcmVhbERlbnNpdHkgKiBUUkFQX0FSRUE7CisJCQkKKwkJCWRvdWJsZSBodW1hbnNQZXJUcmFwQXJlYSA9IGh1bWFuQXJlYWxEZW5zaXR5ICogVFJBUF9BUkVBOworCQkJCisJCQlkb3VibGUgZmVlZGluZ01vc3F1aXRvc1BlclBlcnNvbiA9IDAuMDsKKwkJCWRvdWJsZSBtb3NxdWl0b1NjYWxpbmcgPSAxLjA7CisJCQkKKwkJCS8vIElmIHRoZXJlIGFyZSBsZXNzIHRoYW4gMSBwZXJzb24gaW4gdGhlIHRyYXAgYXJlYQorCQkJLy8gbW9zcXVpdG8gcG9wdWxhdGlvbiBjYW5ub3QgYmUgc3VzdGFpbmVkIGFuZCAKKwkJCS8vIHRoZSBwb3B1bGF0aW9uIGRyb3BzIG9mIGJ5IHRoZSBhY3R1YWwgbnVtYmVyIG9mCisJCQkvLyBwZW9wbGUgaW4gdGhlIHRyYXAgYXJlYS4gRm9yIGh1bWFuIGRlbnNpdGllcworCQkJLy8gaGlnaGVyIHRoYW4gdGhhdCB3ZSBhc3N1bWUgbW9zcXVpdG8gcG9wdWxhdGlvbgorCQkJLy8gY2FuIGFsd2F5cyBiZSBzdXN0YWluZWQuCisJCQlpZihodW1hbnNQZXJUcmFwQXJlYSA8IDEuMCkgbW9zcXVpdG9TY2FsaW5nID0gaHVtYW5zUGVyVHJhcEFyZWE7CisJCQkKKwkJCWZlZWRpbmdNb3NxdWl0b3MgPSBmZWVkaW5nTW9zcXVpdG9zICogbW9zcXVpdG9TY2FsaW5nOworCQkJCisJCQlpZihodW1hbnNQZXJUcmFwQXJlYSA+IDAuMCkKKwkJCQlmZWVkaW5nTW9zcXVpdG9zUGVyUGVyc29uID0gZmVlZGluZ01vc3F1aXRvcyAvIGh1bWFuc1BlclRyYXBBcmVhOworCQkJCisJCQlkb3VibGUgbmV3UG9wdWxhdGlvbiA9IGZlZWRpbmdNb3NxdWl0b3NQZXJQZXJzb24gKiBudW1IdW1hbjsKKwkJCQorCQkJZG91YmxlIGJpdGVSYXRlID0gZmVlZGluZ01vc3F1aXRvc1BlclBlcnNvbiAqIDhFLTM7CisJCisvKgkJCXN5bmNocm9uaXplZCh0aGlzKSB7CisJCQkJaWYoYml0ZVJhdGUgPiBNQVhfQklURV9SQVRFKSB7CisJCQkJCU1BWF9CSVRFX1JBVEUgPSBiaXRlUmF0ZTsKKwkJCQkJU3lzdGVtLm91dC5wcmludGxuKCJNQVggQklURSBSQVRFOiAiK01BWF9CSVRFX1JBVEUpOworCQkJCQlTeXN0ZW0ub3V0LnByaW50bG4oIlRlbXA6ICIrdGVtcGVyYXR1cmUrIiByYWluZmFsbDogIityYWluZmFsbCsiIHZlZ2V0YXRvbjogIit2ZWdldGF0aW9uKyIgTG9jYXRpb24gIitzbGFiZWwuZ2V0SWRlbnRpZmlhYmxlKCkuZ2V0VVJJKCkubGFzdFNlZ21lbnQoKSsiIHRpbWU6ICIrdGltZSk7CQkJCQorCQkJCX0KKwkJCX0KKyovCQkJCisJCQkvLyBURVNUIENPREUKKwkJCS8qCisJCQkgKiAKKwkJCWlmKG5ld1BvcHVsYXRpb24gPiBtYXhQb3ApIHsKKwkJCQltYXhIdW1hbnMgPSBodW1hbnM7CisJCQkJbWF4UG9wID0gbmV3UG9wdWxhdGlvbjsKKwkJCQlkb3VibGUgZGVuID0gbWF4UG9wLyhodW1hbnMqMjQqMTAwMDApOworCQkJCWlmKGRlbiA+PW1heFBlclBlcnNvbkRlbikgbWF4UGVyUGVyc29uRGVuID0gZGVuOworCQkJCQorCQkJCWRvdWJsZSB0cmFwcGVkID0gKDY3NSptYXhQb3ApLyhhcmVhKjEwMDAwMDAuMCk7CisJCQkJaWYodHJhcHBlZCA+IG1heEFyZWFUcmFwQ291bnQpIHsKKwkJCQkJbWF4QXJlYVRyYXBDb3VudD10cmFwcGVkOworCQkJCX0KKwkJCQkKKwkJCQkvLyBURVNUSU5HCisJCQkJQWN0aXZhdG9yLmxvZ0luZm9ybWF0aW9uKCJtb3NxdWl0byBQb3B1bGF0aW9uID0gIittYXhQb3ArIiBodW1hbnMgPSAiK2h1bWFucyk7CQorCQkJCUFjdGl2YXRvci5sb2dJbmZvcm1hdGlvbigiZm91bmQgbWF4cGVyc29uIG1vc3F1aXRvIGRlbnNpdHkgPSAiK21heFBlclBlcnNvbkRlbisgIiBleHBlY3RlZCB0cmFwIGNvdW50ID0gIittYXhBcmVhVHJhcENvdW50KyIgbW9zcXVpdG9zIC8gcGVyc29uIG1heDoiK21heFBvcC9tYXhIdW1hbnMrIiAiKzAuMDUqbWF4UG9wL21heEh1bWFucyk7CQorCQkJCQorCQkJfQorCQkJKgorCQkJKi8KKwkJCWRvdWJsZSBwZGVsdGEgPSAgbmV3UG9wdWxhdGlvbiAtIGN1cnJlbnRQb3B1bGF0aW9uOworCQkJCisJCQlpZihjdXJyZW50UG9wdWxhdGlvbiA9PSAwLjAgJiYgcGRlbHRhIDwgMCkKKwkJCQlTeXN0ZW0ub3V0LnByaW50bG4oIlByb2JsZW0iKTsKKwkJCS8vIEJpcnRocyBhbmQgZGVhdGhzIGFyZSBzZXQgdG8gdGhlIGN1cnJlbnQgcG9wdWxhdGlvbiB0aW1lcyB0aGUgbW9zcXVpdG8gbW9ydGFsaXR5IHJhdGUuCisJCQkvLyBUaGVuIHdlIGFkanVzdCBlaXRoZXIgdGhlIGJpcnRocyBvciBkZWF0aHMgdG8gZ3JvdyBvciBzaHJpbmsgdGhlIHBvcHVsYXRpb24KKwkJCQkJCisJCQlkb3VibGUgYWRqdXN0ZWRNb3J0YWxpdHlSYXRlID0gdGhpcy5nZXRNb3J0YWxpdHlSYXRlKCkgKiAodGltZURlbHRhL2dldFRpbWVQZXJpb2QoKSk7CisJCQkKKwkJCWRvdWJsZSBiaXJ0aHMgPSBjdXJyZW50LmdldENvdW50KCkgKiBhZGp1c3RlZE1vcnRhbGl0eVJhdGU7CisJCQlkb3VibGUgZGVhdGhzID0gYmlydGhzOworCQkJCisJCQkKKwkJCWlmKHBkZWx0YSA+IDApIAorCQkJCWJpcnRocyArPSBwZGVsdGE7CisJCQkJZWxzZSB7CisJCQkJCWJpcnRocyArPXBkZWx0YTsgLy8gU3VidHJhY3QgZnJvbSBiaXJ0aHMKKwkJCQkJaWYoYmlydGhzIDwgMCkgeworCQkJCQkJZGVhdGhzIC09YmlydGhzOworCQkJCQkJYmlydGhzID0gMDsKKwkJCQkJfQorCQkJCX0KKwkJCQorCQkJCisJCQlkZWx0YS5zZXRDb3VudChwZGVsdGEpOworCQkJZGVsdGEuc2V0QmlydGhzKGJpcnRocyk7CisJCQlkZWx0YS5zZXREZWF0aHMoZGVhdGhzKTsKKwkJCQkJCQorCQkJRXhjaGFuZ2UgYmlydGhFeGNoYW5nZSA9IEdyYXBoRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlRXhjaGFuZ2UoKTsKKwkJCUV4Y2hhbmdlIGRlYXRoRXhjaGFuZ2UgPSBHcmFwaEZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZUV4Y2hhbmdlKCk7CisJCQkKKwkJCWJpcnRoRXhjaGFuZ2Uuc2V0VHlwZShFeGNoYW5nZVR5cGUuQklSVEhTX0FORF9ERUFUSFMpOworCQkJYmlydGhFeGNoYW5nZS5zZXRDb3VudChiaXJ0aHMpOworCQkJZGVhdGhFeGNoYW5nZS5zZXRUeXBlKEV4Y2hhbmdlVHlwZS5CSVJUSFNfQU5EX0RFQVRIUyk7CisJCQlkZWF0aEV4Y2hhbmdlLnNldENvdW50KGRlYXRocyk7CisJCQlkZWx0YS5nZXRBcnJpdmFscygpLmNsZWFyKCk7CisJCQlkZWx0YS5nZXREZXBhcnR1cmVzKCkuY2xlYXIoKTsKKwkJCWRlbHRhLmdldEFycml2YWxzKCkuYWRkKGJpcnRoRXhjaGFuZ2UpOworCQkJZGVsdGEuZ2V0RGVwYXJ0dXJlcygpLmFkZChkZWF0aEV4Y2hhbmdlKTsKKwkJCQorCQkJaGFuZGxlTWlncmF0aW9uKHNsYWJlbCwgZGVsdGEuZ2V0QXJyaXZhbHMoKSxkZWx0YS5nZXREZXBhcnR1cmVzKCksIHRoaXMuZ2V0VGltZVBlcmlvZCgpLCB0aW1lRGVsdGEsIGRlbHRhKTsKKwkJCUVDb2xsZWN0aW9ucy5zb3J0KGRlbHRhLmdldEFycml2YWxzKCkpOworCQkJRUNvbGxlY3Rpb25zLnNvcnQoZGVsdGEuZ2V0RGVwYXJ0dXJlcygpKTsKKwkJfQorCX0vLyBjYWxjdWxhdGVEZWx0YQorCQorCQorCQorCVN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWwgZmluZFN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWwoTm9kZSBuLCBTdHJpbmcgaWRlbnRpZmllcikgeworCQlmb3IoTm9kZUxhYmVsIG5sOm4uZ2V0TGFiZWxzKCkpIHsKKwkJCWlmKG5sIGluc3RhbmNlb2YgU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxMYWJlbAorCQkJCQkmJiAoKFN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWwpbmwpLmdldFBvcHVsYXRpb25JZGVudGlmaWVyKCkuZXF1YWxzKGlkZW50aWZpZXIpKQorCQkJCXJldHVybiAoU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxMYWJlbClubDsKKwkJfQorCQlyZXR1cm4gbnVsbDsKKwl9CisJCisJcHVibGljIGJvb2xlYW4gaXNEZXRlcm1pbmlzdGljKCkgeworCQlyZXR1cm4gdHJ1ZTsKKwl9CisJCisJcHVibGljIHZvaWQgZG9Nb2RlbFNwZWNpZmljQWRqdXN0bWVudHMoTGFiZWxWYWx1ZSBsYWJlbCkgeworCQkKKwl9CisJCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIEVDbGFzcyBlU3RhdGljQ2xhc3MoKSB7CisJCXJldHVybiBTdGFuZGFyZFBhY2thZ2UuTGl0ZXJhbHMuTU9TUVVJVE9fUE9QVUxBVElPTl9NT0RFTDsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgZG91YmxlIGdldFNjYWxpbmdGYWN0b3IoKSB7CisJCXJldHVybiBzY2FsaW5nRmFjdG9yOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIHNldFNjYWxpbmdGYWN0b3IoZG91YmxlIG5ld1NjYWxpbmdGYWN0b3IpIHsKKwkJZG91YmxlIG9sZFNjYWxpbmdGYWN0b3IgPSBzY2FsaW5nRmFjdG9yOworCQlzY2FsaW5nRmFjdG9yID0gbmV3U2NhbGluZ0ZhY3RvcjsKKwkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQorCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgU3RhbmRhcmRQYWNrYWdlLk1PU1FVSVRPX1BPUFVMQVRJT05fTU9ERUxfX1NDQUxJTkdfRkFDVE9SLCBvbGRTY2FsaW5nRmFjdG9yLCBzY2FsaW5nRmFjdG9yKSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIGxvbmcgZ2V0VGltZVBlcmlvZCgpIHsKKwkJcmV0dXJuIHRpbWVQZXJpb2Q7CisJfQorCisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRUaW1lUGVyaW9kKGxvbmcgbmV3VGltZVBlcmlvZCkgeworCQlsb25nIG9sZFRpbWVQZXJpb2QgPSB0aW1lUGVyaW9kOworCQl0aW1lUGVyaW9kID0gbmV3VGltZVBlcmlvZDsKKwkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQorCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgU3RhbmRhcmRQYWNrYWdlLk1PU1FVSVRPX1BPUFVMQVRJT05fTU9ERUxfX1RJTUVfUEVSSU9ELCBvbGRUaW1lUGVyaW9kLCB0aW1lUGVyaW9kKSk7CisJfQorCisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgZG91YmxlIGdldE1vcnRhbGl0eVJhdGUoKSB7CisJCXJldHVybiBtb3J0YWxpdHlSYXRlOworCX0KKworCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgc2V0TW9ydGFsaXR5UmF0ZShkb3VibGUgbmV3TW9ydGFsaXR5UmF0ZSkgeworCQlkb3VibGUgb2xkTW9ydGFsaXR5UmF0ZSA9IG1vcnRhbGl0eVJhdGU7CisJCW1vcnRhbGl0eVJhdGUgPSBuZXdNb3J0YWxpdHlSYXRlOworCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpCisJCQllTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBTdGFuZGFyZFBhY2thZ2UuTU9TUVVJVE9fUE9QVUxBVElPTl9NT0RFTF9fTU9SVEFMSVRZX1JBVEUsIG9sZE1vcnRhbGl0eVJhdGUsIG1vcnRhbGl0eVJhdGUpKTsKKwl9CisKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBTdHJpbmcgZ2V0SG9zdCgpIHsKKwkJcmV0dXJuIGhvc3Q7CisJfQorCisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRIb3N0KFN0cmluZyBuZXdIb3N0KSB7CisJCVN0cmluZyBvbGRIb3N0ID0gaG9zdDsKKwkJaG9zdCA9IG5ld0hvc3Q7CisJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkKKwkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIFN0YW5kYXJkUGFja2FnZS5NT1NRVUlUT19QT1BVTEFUSU9OX01PREVMX19IT1NULCBvbGRIb3N0LCBob3N0KSk7CisJfQorCisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgT2JqZWN0IGVHZXQoaW50IGZlYXR1cmVJRCwgYm9vbGVhbiByZXNvbHZlLCBib29sZWFuIGNvcmVUeXBlKSB7CisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7CisJCQljYXNlIFN0YW5kYXJkUGFja2FnZS5NT1NRVUlUT19QT1BVTEFUSU9OX01PREVMX19TQ0FMSU5HX0ZBQ1RPUjoKKwkJCQlyZXR1cm4gZ2V0U2NhbGluZ0ZhY3RvcigpOworCQkJY2FzZSBTdGFuZGFyZFBhY2thZ2UuTU9TUVVJVE9fUE9QVUxBVElPTl9NT0RFTF9fVElNRV9QRVJJT0Q6CisJCQkJcmV0dXJuIGdldFRpbWVQZXJpb2QoKTsKKwkJCWNhc2UgU3RhbmRhcmRQYWNrYWdlLk1PU1FVSVRPX1BPUFVMQVRJT05fTU9ERUxfX01PUlRBTElUWV9SQVRFOgorCQkJCXJldHVybiBnZXRNb3J0YWxpdHlSYXRlKCk7CisJCQljYXNlIFN0YW5kYXJkUGFja2FnZS5NT1NRVUlUT19QT1BVTEFUSU9OX01PREVMX19IT1NUOgorCQkJCXJldHVybiBnZXRIb3N0KCk7CisJCX0KKwkJcmV0dXJuIHN1cGVyLmVHZXQoZmVhdHVyZUlELCByZXNvbHZlLCBjb3JlVHlwZSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgZVNldChpbnQgZmVhdHVyZUlELCBPYmplY3QgbmV3VmFsdWUpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJCWNhc2UgU3RhbmRhcmRQYWNrYWdlLk1PU1FVSVRPX1BPUFVMQVRJT05fTU9ERUxfX1NDQUxJTkdfRkFDVE9SOgorCQkJCXNldFNjYWxpbmdGYWN0b3IoKERvdWJsZSluZXdWYWx1ZSk7CisJCQkJcmV0dXJuOworCQkJY2FzZSBTdGFuZGFyZFBhY2thZ2UuTU9TUVVJVE9fUE9QVUxBVElPTl9NT0RFTF9fVElNRV9QRVJJT0Q6CisJCQkJc2V0VGltZVBlcmlvZCgoTG9uZyluZXdWYWx1ZSk7CisJCQkJcmV0dXJuOworCQkJY2FzZSBTdGFuZGFyZFBhY2thZ2UuTU9TUVVJVE9fUE9QVUxBVElPTl9NT0RFTF9fTU9SVEFMSVRZX1JBVEU6CisJCQkJc2V0TW9ydGFsaXR5UmF0ZSgoRG91YmxlKW5ld1ZhbHVlKTsKKwkJCQlyZXR1cm47CisJCQljYXNlIFN0YW5kYXJkUGFja2FnZS5NT1NRVUlUT19QT1BVTEFUSU9OX01PREVMX19IT1NUOgorCQkJCXNldEhvc3QoKFN0cmluZyluZXdWYWx1ZSk7CisJCQkJcmV0dXJuOworCQl9CisJCXN1cGVyLmVTZXQoZmVhdHVyZUlELCBuZXdWYWx1ZSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgZVVuc2V0KGludCBmZWF0dXJlSUQpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJCWNhc2UgU3RhbmRhcmRQYWNrYWdlLk1PU1FVSVRPX1BPUFVMQVRJT05fTU9ERUxfX1NDQUxJTkdfRkFDVE9SOgorCQkJCXNldFNjYWxpbmdGYWN0b3IoU0NBTElOR19GQUNUT1JfRURFRkFVTFQpOworCQkJCXJldHVybjsKKwkJCWNhc2UgU3RhbmRhcmRQYWNrYWdlLk1PU1FVSVRPX1BPUFVMQVRJT05fTU9ERUxfX1RJTUVfUEVSSU9EOgorCQkJCXNldFRpbWVQZXJpb2QoVElNRV9QRVJJT0RfRURFRkFVTFQpOworCQkJCXJldHVybjsKKwkJCWNhc2UgU3RhbmRhcmRQYWNrYWdlLk1PU1FVSVRPX1BPUFVMQVRJT05fTU9ERUxfX01PUlRBTElUWV9SQVRFOgorCQkJCXNldE1vcnRhbGl0eVJhdGUoTU9SVEFMSVRZX1JBVEVfRURFRkFVTFQpOworCQkJCXJldHVybjsKKwkJCWNhc2UgU3RhbmRhcmRQYWNrYWdlLk1PU1FVSVRPX1BPUFVMQVRJT05fTU9ERUxfX0hPU1Q6CisJCQkJc2V0SG9zdChIT1NUX0VERUZBVUxUKTsKKwkJCQlyZXR1cm47CisJCX0KKwkJc3VwZXIuZVVuc2V0KGZlYXR1cmVJRCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIGJvb2xlYW4gZUlzU2V0KGludCBmZWF0dXJlSUQpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJCWNhc2UgU3RhbmRhcmRQYWNrYWdlLk1PU1FVSVRPX1BPUFVMQVRJT05fTU9ERUxfX1NDQUxJTkdfRkFDVE9SOgorCQkJCXJldHVybiBzY2FsaW5nRmFjdG9yICE9IFNDQUxJTkdfRkFDVE9SX0VERUZBVUxUOworCQkJY2FzZSBTdGFuZGFyZFBhY2thZ2UuTU9TUVVJVE9fUE9QVUxBVElPTl9NT0RFTF9fVElNRV9QRVJJT0Q6CisJCQkJcmV0dXJuIHRpbWVQZXJpb2QgIT0gVElNRV9QRVJJT0RfRURFRkFVTFQ7CisJCQljYXNlIFN0YW5kYXJkUGFja2FnZS5NT1NRVUlUT19QT1BVTEFUSU9OX01PREVMX19NT1JUQUxJVFlfUkFURToKKwkJCQlyZXR1cm4gbW9ydGFsaXR5UmF0ZSAhPSBNT1JUQUxJVFlfUkFURV9FREVGQVVMVDsKKwkJCWNhc2UgU3RhbmRhcmRQYWNrYWdlLk1PU1FVSVRPX1BPUFVMQVRJT05fTU9ERUxfX0hPU1Q6CisJCQkJcmV0dXJuIEhPU1RfRURFRkFVTFQgPT0gbnVsbCA/IGhvc3QgIT0gbnVsbCA6ICFIT1NUX0VERUZBVUxULmVxdWFscyhob3N0KTsKKwkJfQorCQlyZXR1cm4gc3VwZXIuZUlzU2V0KGZlYXR1cmVJRCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIFN0cmluZyB0b1N0cmluZygpIHsKKwkJaWYgKGVJc1Byb3h5KCkpIHJldHVybiBzdXBlci50b1N0cmluZygpOworCisJCVN0cmluZ0J1ZmZlciByZXN1bHQgPSBuZXcgU3RyaW5nQnVmZmVyKHN1cGVyLnRvU3RyaW5nKCkpOworCQlyZXN1bHQuYXBwZW5kKCIgKHNjYWxpbmdGYWN0b3I6ICIpOworCQlyZXN1bHQuYXBwZW5kKHNjYWxpbmdGYWN0b3IpOworCQlyZXN1bHQuYXBwZW5kKCIsIHRpbWVQZXJpb2Q6ICIpOworCQlyZXN1bHQuYXBwZW5kKHRpbWVQZXJpb2QpOworCQlyZXN1bHQuYXBwZW5kKCIsIG1vcnRhbGl0eVJhdGU6ICIpOworCQlyZXN1bHQuYXBwZW5kKG1vcnRhbGl0eVJhdGUpOworCQlyZXN1bHQuYXBwZW5kKCIsIGhvc3Q6ICIpOworCQlyZXN1bHQuYXBwZW5kKGhvc3QpOworCQlyZXN1bHQuYXBwZW5kKCcpJyk7CisJCXJldHVybiByZXN1bHQudG9TdHJpbmcoKTsKKwl9CisKK30gLy9Nb3NxdWl0b1BvcHVsYXRpb25Nb2RlbEltcGwKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9tb2RlbHMvcG9wdWxhdGlvbnMvb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3BvcHVsYXRpb25tb2RlbHMvc3RhbmRhcmQvaW1wbC9Qb3B1bGF0aW9uR3JvdXBJbXBsLmphdmEgYi9tb2RlbHMvcG9wdWxhdGlvbnMvb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3BvcHVsYXRpb25tb2RlbHMvc3RhbmRhcmQvaW1wbC9Qb3B1bGF0aW9uR3JvdXBJbXBsLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWU4NGY2OQotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9wb3B1bGF0aW9ucy9vcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vcG9wdWxhdGlvbm1vZGVscy9zdGFuZGFyZC9pbXBsL1BvcHVsYXRpb25Hcm91cEltcGwuamF2YQpAQCAtMCwwICsxLDIyMyBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuaW1wbDsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAxMCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzczsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuaW1wbC5FTm90aWZpY2F0aW9uSW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuaW1wbC5FT2JqZWN0SW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuUG9wdWxhdGlvbkdyb3VwOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZFBhY2thZ2U7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIEFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5Qb3B1bGF0aW9uIEdyb3VwPC9iPjwvZW0+Jy4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogPHA+CisgKiBUaGUgZm9sbG93aW5nIGZlYXR1cmVzIGFyZSBpbXBsZW1lbnRlZDoKKyAqIDx1bD4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuaW1wbC5Qb3B1bGF0aW9uR3JvdXBJbXBsI2dldElkZW50aWZpZXIgPGVtPklkZW50aWZpZXI8L2VtPn08L2xpPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5pbXBsLlBvcHVsYXRpb25Hcm91cEltcGwjZ2V0RnJhY3Rpb24gPGVtPkZyYWN0aW9uPC9lbT59PC9saT4KKyAqIDwvdWw+CisgKiA8L3A+CisgKgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgUG9wdWxhdGlvbkdyb3VwSW1wbCBleHRlbmRzIEVPYmplY3RJbXBsIGltcGxlbWVudHMgUG9wdWxhdGlvbkdyb3VwIHsKKwkvKioKKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0SWRlbnRpZmllcigpIDxlbT5JZGVudGlmaWVyPC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNnZXRJZGVudGlmaWVyKCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIFN0cmluZyBJREVOVElGSUVSX0VERUZBVUxUID0gbnVsbDsKKworCS8qKgorCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldElkZW50aWZpZXIoKSA8ZW0+SWRlbnRpZmllcjwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZ2V0SWRlbnRpZmllcigpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIFN0cmluZyBpZGVudGlmaWVyID0gSURFTlRJRklFUl9FREVGQVVMVDsKKworCS8qKgorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRGcmFjdGlvbigpIDxlbT5GcmFjdGlvbjwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZ2V0RnJhY3Rpb24oKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgZG91YmxlIEZSQUNUSU9OX0VERUZBVUxUID0gMC41OworCisJLyoqCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0RnJhY3Rpb24oKSA8ZW0+RnJhY3Rpb248L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI2dldEZyYWN0aW9uKCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgZG91YmxlIGZyYWN0aW9uID0gRlJBQ1RJT05fRURFRkFVTFQ7CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgUG9wdWxhdGlvbkdyb3VwSW1wbCgpIHsKKwkJc3VwZXIoKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgRUNsYXNzIGVTdGF0aWNDbGFzcygpIHsKKwkJcmV0dXJuIFN0YW5kYXJkUGFja2FnZS5MaXRlcmFscy5QT1BVTEFUSU9OX0dST1VQOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBTdHJpbmcgZ2V0SWRlbnRpZmllcigpIHsKKwkJcmV0dXJuIGlkZW50aWZpZXI7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgc2V0SWRlbnRpZmllcihTdHJpbmcgbmV3SWRlbnRpZmllcikgeworCQlTdHJpbmcgb2xkSWRlbnRpZmllciA9IGlkZW50aWZpZXI7CisJCWlkZW50aWZpZXIgPSBuZXdJZGVudGlmaWVyOworCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpCisJCQllTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBTdGFuZGFyZFBhY2thZ2UuUE9QVUxBVElPTl9HUk9VUF9fSURFTlRJRklFUiwgb2xkSWRlbnRpZmllciwgaWRlbnRpZmllcikpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBkb3VibGUgZ2V0RnJhY3Rpb24oKSB7CisJCXJldHVybiBmcmFjdGlvbjsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRGcmFjdGlvbihkb3VibGUgbmV3RnJhY3Rpb24pIHsKKwkJZG91YmxlIG9sZEZyYWN0aW9uID0gZnJhY3Rpb247CisJCWZyYWN0aW9uID0gbmV3RnJhY3Rpb247CisJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkKKwkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIFN0YW5kYXJkUGFja2FnZS5QT1BVTEFUSU9OX0dST1VQX19GUkFDVElPTiwgb2xkRnJhY3Rpb24sIGZyYWN0aW9uKSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIE9iamVjdCBlR2V0KGludCBmZWF0dXJlSUQsIGJvb2xlYW4gcmVzb2x2ZSwgYm9vbGVhbiBjb3JlVHlwZSkgeworCQlzd2l0Y2ggKGZlYXR1cmVJRCkgeworCQkJY2FzZSBTdGFuZGFyZFBhY2thZ2UuUE9QVUxBVElPTl9HUk9VUF9fSURFTlRJRklFUjoKKwkJCQlyZXR1cm4gZ2V0SWRlbnRpZmllcigpOworCQkJY2FzZSBTdGFuZGFyZFBhY2thZ2UuUE9QVUxBVElPTl9HUk9VUF9fRlJBQ1RJT046CisJCQkJcmV0dXJuIGdldEZyYWN0aW9uKCk7CisJCX0KKwkJcmV0dXJuIHN1cGVyLmVHZXQoZmVhdHVyZUlELCByZXNvbHZlLCBjb3JlVHlwZSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgZVNldChpbnQgZmVhdHVyZUlELCBPYmplY3QgbmV3VmFsdWUpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJCWNhc2UgU3RhbmRhcmRQYWNrYWdlLlBPUFVMQVRJT05fR1JPVVBfX0lERU5USUZJRVI6CisJCQkJc2V0SWRlbnRpZmllcigoU3RyaW5nKW5ld1ZhbHVlKTsKKwkJCQlyZXR1cm47CisJCQljYXNlIFN0YW5kYXJkUGFja2FnZS5QT1BVTEFUSU9OX0dST1VQX19GUkFDVElPTjoKKwkJCQlzZXRGcmFjdGlvbigoRG91YmxlKW5ld1ZhbHVlKTsKKwkJCQlyZXR1cm47CisJCX0KKwkJc3VwZXIuZVNldChmZWF0dXJlSUQsIG5ld1ZhbHVlKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBlVW5zZXQoaW50IGZlYXR1cmVJRCkgeworCQlzd2l0Y2ggKGZlYXR1cmVJRCkgeworCQkJY2FzZSBTdGFuZGFyZFBhY2thZ2UuUE9QVUxBVElPTl9HUk9VUF9fSURFTlRJRklFUjoKKwkJCQlzZXRJZGVudGlmaWVyKElERU5USUZJRVJfRURFRkFVTFQpOworCQkJCXJldHVybjsKKwkJCWNhc2UgU3RhbmRhcmRQYWNrYWdlLlBPUFVMQVRJT05fR1JPVVBfX0ZSQUNUSU9OOgorCQkJCXNldEZyYWN0aW9uKEZSQUNUSU9OX0VERUZBVUxUKTsKKwkJCQlyZXR1cm47CisJCX0KKwkJc3VwZXIuZVVuc2V0KGZlYXR1cmVJRCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIGJvb2xlYW4gZUlzU2V0KGludCBmZWF0dXJlSUQpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJCWNhc2UgU3RhbmRhcmRQYWNrYWdlLlBPUFVMQVRJT05fR1JPVVBfX0lERU5USUZJRVI6CisJCQkJcmV0dXJuIElERU5USUZJRVJfRURFRkFVTFQgPT0gbnVsbCA/IGlkZW50aWZpZXIgIT0gbnVsbCA6ICFJREVOVElGSUVSX0VERUZBVUxULmVxdWFscyhpZGVudGlmaWVyKTsKKwkJCWNhc2UgU3RhbmRhcmRQYWNrYWdlLlBPUFVMQVRJT05fR1JPVVBfX0ZSQUNUSU9OOgorCQkJCXJldHVybiBmcmFjdGlvbiAhPSBGUkFDVElPTl9FREVGQVVMVDsKKwkJfQorCQlyZXR1cm4gc3VwZXIuZUlzU2V0KGZlYXR1cmVJRCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIFN0cmluZyB0b1N0cmluZygpIHsKKwkJaWYgKGVJc1Byb3h5KCkpIHJldHVybiBzdXBlci50b1N0cmluZygpOworCisJCVN0cmluZ0J1ZmZlciByZXN1bHQgPSBuZXcgU3RyaW5nQnVmZmVyKHN1cGVyLnRvU3RyaW5nKCkpOworCQlyZXN1bHQuYXBwZW5kKCIgKGlkZW50aWZpZXI6ICIpOworCQlyZXN1bHQuYXBwZW5kKGlkZW50aWZpZXIpOworCQlyZXN1bHQuYXBwZW5kKCIsIGZyYWN0aW9uOiAiKTsKKwkJcmVzdWx0LmFwcGVuZChmcmFjdGlvbik7CisJCXJlc3VsdC5hcHBlbmQoJyknKTsKKwkJcmV0dXJuIHJlc3VsdC50b1N0cmluZygpOworCX0KKworfSAvL1BvcHVsYXRpb25Hcm91cEltcGwKZGlmZiAtLWdpdCBhL21vZGVscy9wb3B1bGF0aW9ucy9vcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vcG9wdWxhdGlvbm1vZGVscy9zdGFuZGFyZC9pbXBsL1BvcHVsYXRpb25Jbml0aWFsaXplckltcGwuamF2YSBiL21vZGVscy9wb3B1bGF0aW9ucy9vcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vcG9wdWxhdGlvbm1vZGVscy9zdGFuZGFyZC9pbXBsL1BvcHVsYXRpb25Jbml0aWFsaXplckltcGwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYjEyYWQyCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL3BvcHVsYXRpb25zL29yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9wb3B1bGF0aW9ubW9kZWxzL3N0YW5kYXJkL2ltcGwvUG9wdWxhdGlvbkluaXRpYWxpemVySW1wbC5qYXZhCkBAIC0wLDAgKzEsNDA4IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5pbXBsOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDEwIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7CitpbXBvcnQgamF2YS51dGlsLkNhbGVuZGFyOworaW1wb3J0IGphdmEudXRpbC5EYXRlOworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5VUkk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzczsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuaW1wbC5FTm90aWZpY2F0aW9uSW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuVXRpbGl0eTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguRWRnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguR3JhcGg7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLk5vZGU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLk5vZGVMYWJlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuRGVjb3JhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5TVEVNVGltZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuaW1wbC5Ob2RlRGVjb3JhdG9ySW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5MYWJlbHNGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLlBvcHVsYXRpb25MYWJlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5SZWxhdGl2ZVBoeXNpY2FsUmVsYXRpb25zaGlwTGFiZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuaW1wbC5Qb3B1bGF0aW9uTGFiZWxJbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5BY3RpdmF0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLlBvcHVsYXRpb25Jbml0aWFsaXplcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuUG9wdWxhdGlvbk1vZGVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZFBhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkUG9wdWxhdGlvbkluaXRpYWxpemVyOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiBBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+UG9wdWxhdGlvbiBJbml0aWFsaXplcjwvYj48L2VtPicuCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIDxwPgorICogVGhlIGZvbGxvd2luZyBmZWF0dXJlcyBhcmUgaW1wbGVtZW50ZWQ6CisgKiA8dWw+CisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLmltcGwuUG9wdWxhdGlvbkluaXRpYWxpemVySW1wbCNnZXRUYXJnZXRJU09LZXkgPGVtPlRhcmdldCBJU08gS2V5PC9lbT59PC9saT4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuaW1wbC5Qb3B1bGF0aW9uSW5pdGlhbGl6ZXJJbXBsI2dldFBvcHVsYXRpb25JZGVudGlmaWVyIDxlbT5Qb3B1bGF0aW9uIElkZW50aWZpZXI8L2VtPn08L2xpPgorICogPC91bD4KKyAqIDwvcD4KKyAqCisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBhYnN0cmFjdCBjbGFzcyBQb3B1bGF0aW9uSW5pdGlhbGl6ZXJJbXBsIGV4dGVuZHMgTm9kZURlY29yYXRvckltcGwgaW1wbGVtZW50cyBQb3B1bGF0aW9uSW5pdGlhbGl6ZXIgeworCS8qKgorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRUYXJnZXRJU09LZXkoKSA8ZW0+VGFyZ2V0IElTTyBLZXk8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI2dldFRhcmdldElTT0tleSgpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBTdHJpbmcgVEFSR0VUX0lTT19LRVlfRURFRkFVTFQgPSBudWxsOworCisJLyoqCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0VGFyZ2V0SVNPS2V5KCkgPGVtPlRhcmdldCBJU08gS2V5PC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNnZXRUYXJnZXRJU09LZXkoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBTdHJpbmcgdGFyZ2V0SVNPS2V5ID0gVEFSR0VUX0lTT19LRVlfRURFRkFVTFQ7CisKKwkvKioKKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0UG9wdWxhdGlvbklkZW50aWZpZXIoKSA8ZW0+UG9wdWxhdGlvbiBJZGVudGlmaWVyPC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNnZXRQb3B1bGF0aW9uSWRlbnRpZmllcigpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBTdHJpbmcgUE9QVUxBVElPTl9JREVOVElGSUVSX0VERUZBVUxUID0gImh1bWFuIjsKKworCS8qKgorCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldFBvcHVsYXRpb25JZGVudGlmaWVyKCkgPGVtPlBvcHVsYXRpb24gSWRlbnRpZmllcjwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZ2V0UG9wdWxhdGlvbklkZW50aWZpZXIoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBTdHJpbmcgcG9wdWxhdGlvbklkZW50aWZpZXIgPSBQT1BVTEFUSU9OX0lERU5USUZJRVJfRURFRkFVTFQ7CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgUG9wdWxhdGlvbkluaXRpYWxpemVySW1wbCgpIHsKKwkJc3VwZXIoKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgRUNsYXNzIGVTdGF0aWNDbGFzcygpIHsKKwkJcmV0dXJuIFN0YW5kYXJkUGFja2FnZS5MaXRlcmFscy5QT1BVTEFUSU9OX0lOSVRJQUxJWkVSOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBTdHJpbmcgZ2V0VGFyZ2V0SVNPS2V5KCkgeworCQlyZXR1cm4gdGFyZ2V0SVNPS2V5OworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIHNldFRhcmdldElTT0tleShTdHJpbmcgbmV3VGFyZ2V0SVNPS2V5KSB7CisJCVN0cmluZyBvbGRUYXJnZXRJU09LZXkgPSB0YXJnZXRJU09LZXk7CisJCXRhcmdldElTT0tleSA9IG5ld1RhcmdldElTT0tleTsKKwkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQorCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgU3RhbmRhcmRQYWNrYWdlLlBPUFVMQVRJT05fSU5JVElBTElaRVJfX1RBUkdFVF9JU09fS0VZLCBvbGRUYXJnZXRJU09LZXksIHRhcmdldElTT0tleSkpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBTdHJpbmcgZ2V0UG9wdWxhdGlvbklkZW50aWZpZXIoKSB7CisJCXJldHVybiBwb3B1bGF0aW9uSWRlbnRpZmllcjsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRQb3B1bGF0aW9uSWRlbnRpZmllcihTdHJpbmcgbmV3UG9wdWxhdGlvbklkZW50aWZpZXIpIHsKKwkJU3RyaW5nIG9sZFBvcHVsYXRpb25JZGVudGlmaWVyID0gcG9wdWxhdGlvbklkZW50aWZpZXI7CisJCXBvcHVsYXRpb25JZGVudGlmaWVyID0gbmV3UG9wdWxhdGlvbklkZW50aWZpZXI7CisJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkKKwkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIFN0YW5kYXJkUGFja2FnZS5QT1BVTEFUSU9OX0lOSVRJQUxJWkVSX19QT1BVTEFUSU9OX0lERU5USUZJRVIsIG9sZFBvcHVsYXRpb25JZGVudGlmaWVyLCBwb3B1bGF0aW9uSWRlbnRpZmllcikpOworCX0KKworCUBPdmVycmlkZQorCXB1YmxpYyBib29sZWFuIGRlY29yYXRlR3JhcGgoU1RFTVRpbWUgdGltZSkgeworCQlpZih0aGlzLmlzR3JhcGhEZWNvcmF0ZWQoKSkgcmV0dXJuIHRydWU7CisJCWNoZWNrUG9wdWxhdGlvbk1vZGVscygpOworCQlBcnJheUxpc3Q8Tm9kZT5ub2RlcyA9IG5ldyBBcnJheUxpc3Q8Tm9kZT4oKTsKKwkJQXJyYXlMaXN0PE5vZGU+bmVnYXRpdmVOb2RlcyA9IG5ldyBBcnJheUxpc3Q8Tm9kZT4oKTsKKwkJCisJCXRoaXMuZ2V0Tm9kZXModGhpcy5nZXRHcmFwaCgpLCB0aGlzLmdldFRhcmdldElTT0tleSgpLCBub2RlcywgbmVnYXRpdmVOb2Rlcyk7CisJCQorCQlpZihub2Rlcy5zaXplKCkgPT0gMCkKKwkJCUFjdGl2YXRvci5sb2dFcnJvcigiRXJyb3IgaW4gcG9wdWxhdGlvbiBpbml0aWFsaXplciAiK3RoaXMuZ2V0VVJJKCkrIiwgdW5hYmxlIHRvIGZpbmQgbm9kZSAiK3RoaXMuZ2V0VGFyZ2V0SVNPS2V5KCksIG5ldyBFeGNlcHRpb24oKSk7CisJCisJCWZvcihOb2RlIG46bm9kZXMpIHsKKwkJCS8vIENoZWNrIGZvciBleGlzdGluZyBsYWJlbAorCQkJUG9wdWxhdGlvbkxhYmVsIGV4aXN0aW5nTGFiZWwgPSBudWxsOworCQkJZm9yKE5vZGVMYWJlbCBsYWI6bi5nZXRMYWJlbHMoKSkgeworCQkJCWlmKGxhYiBpbnN0YW5jZW9mIFBvcHVsYXRpb25MYWJlbCAKKwkJCQkJCSYmICgoUG9wdWxhdGlvbkxhYmVsKWxhYikuZ2V0UG9wdWxhdGlvbklkZW50aWZpZXIoKS5lcXVhbHModGhpcy5nZXRQb3B1bGF0aW9uSWRlbnRpZmllcigpKSkgeworCQkJCQlleGlzdGluZ0xhYmVsID0gKFBvcHVsYXRpb25MYWJlbClsYWI7CisJCQkJfQorCQkJfQorCQkJaWYoZXhpc3RpbmdMYWJlbCAhPSBudWxsKSB7CQkJCQorCQkJCQkvLyBJbml0aWFsaXplIHdpdGggbmV3IHZhbHVlCisJCQkJCWluaXRpYWxpemVMYWJlbCgoUG9wdWxhdGlvbkxhYmVsKWV4aXN0aW5nTGFiZWwsIHRpbWUsIGZhbHNlKTsKKwkJCX0gZWxzZSB7CisJCQkJLy8gQ3JlYXRlIGEgbmV3IGxhYmVsCisJCQkJUG9wdWxhdGlvbkxhYmVsIG5ld0xhYmVsID0gTGFiZWxzRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlUG9wdWxhdGlvbkxhYmVsKCk7CisJCQkJbmV3TGFiZWwuc2V0UG9wdWxhdGlvbklkZW50aWZpZXIodGhpcy5nZXRQb3B1bGF0aW9uSWRlbnRpZmllcigpKTsKKwkJCQluZXdMYWJlbC5zZXRVUklPZklkZW50aWZpYWJsZVRvQmVMYWJlbGVkKG4uZ2V0VVJJKCkpOworCQkJCW5ld0xhYmVsLnNldE5vZGUobik7CisJCQkJR3JhcGggZyA9IHRoaXMuZ2V0R3JhcGgoKTsKKwkJCQlVUkkgbmV3VVJJID0gY3JlYXRlUG9wdWxhdGlvbkxhYmVsVVJJKG4sIHRpbWUpOworCQkJCWcuZ2V0Tm9kZUxhYmVscygpLnB1dChuZXdVUkksIG5ld0xhYmVsKTsKKwkJCQlpbml0aWFsaXplTGFiZWwoKFBvcHVsYXRpb25MYWJlbCluZXdMYWJlbCwgdGltZSwgZmFsc2UpOwkJCQkKKwkJCX0KKwkJfQorCQkKKwkJLy8gTm93IGRvIHRoZSByZXN0IG9mIHRoZSBub2RlcyBpbiB0aGUgZ3JhcGgKKwkJCisJCWZvcihOb2RlIG46bmVnYXRpdmVOb2RlcykgeworCQkJLy8gQ2hlY2sgZm9yIGV4aXN0aW5nIGxhYmVsCisJCQlQb3B1bGF0aW9uTGFiZWwgZXhpc3RpbmdMYWJlbCA9IG51bGw7CisJCQlmb3IoTm9kZUxhYmVsIGxhYjpuLmdldExhYmVscygpKSB7CisJCQkJaWYobGFiIGluc3RhbmNlb2YgUG9wdWxhdGlvbkxhYmVsIAorCQkJCQkJJiYgKChQb3B1bGF0aW9uTGFiZWwpbGFiKS5nZXRQb3B1bGF0aW9uSWRlbnRpZmllcigpLmVxdWFscyh0aGlzLmdldFBvcHVsYXRpb25JZGVudGlmaWVyKCkpKSB7CisJCQkJCWV4aXN0aW5nTGFiZWwgPSAoUG9wdWxhdGlvbkxhYmVsKWxhYjsKKwkJCQl9CisJCQl9CisJCQlpZihleGlzdGluZ0xhYmVsID09IG51bGwpIHsKKwkJCQkvLyBDcmVhdGUgYSBuZXcgbGFiZWwuIFdlIGRvbid0IG92ZXJyaWRlIHRoZSBleGlzdGluZyBsYWJlbAorCQkJCVBvcHVsYXRpb25MYWJlbCBuZXdMYWJlbCA9IExhYmVsc0ZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZVBvcHVsYXRpb25MYWJlbCgpOworCQkJCW5ld0xhYmVsLnNldFBvcHVsYXRpb25JZGVudGlmaWVyKHRoaXMuZ2V0UG9wdWxhdGlvbklkZW50aWZpZXIoKSk7CisJCQkJbmV3TGFiZWwuc2V0VVJJT2ZJZGVudGlmaWFibGVUb0JlTGFiZWxlZChuLmdldFVSSSgpKTsKKwkJCQluZXdMYWJlbC5zZXROb2RlKG4pOworCQkJCUdyYXBoIGcgPSB0aGlzLmdldEdyYXBoKCk7CisJCQkJVVJJIG5ld1VSSSA9IGNyZWF0ZVBvcHVsYXRpb25MYWJlbFVSSShuLCB0aW1lKTsKKwkJCQlnLmdldE5vZGVMYWJlbHMoKS5wdXQobmV3VVJJLCBuZXdMYWJlbCk7CisJCQkJaW5pdGlhbGl6ZUxhYmVsKChQb3B1bGF0aW9uTGFiZWwpbmV3TGFiZWwsIHRpbWUsIHRydWUpOwkJCQkKKwkJCX0KKwkJfQorCQlyZXR1cm4gdHJ1ZTsKKwl9CisJCisJcHJvdGVjdGVkIGFic3RyYWN0IHZvaWQgaW5pdGlhbGl6ZUxhYmVsKFBvcHVsYXRpb25MYWJlbCBsYWIsIFNURU1UaW1lIHRpbWUsIGJvb2xlYW4gemVyb1ZhbHVlKTsKKwkKKwlwcm90ZWN0ZWQgdm9pZCBjaGVja1BvcHVsYXRpb25Nb2RlbHMoKSB7CisJCS8vIExldCdzIHZhbGlkYXRlIHRvIG1ha2Ugc3VyZSB0aGVyZSBpcyBubyBwb3B1bGF0aW9uIG1vZGVsCisJCS8vIGF0IHRoZSBzYW1lIG9yIGxvd2VyIGxldmVsIHRoYXQgYWxyZWFkeSdzIGJlZW4gaW52b2tlZCAKKwkJLy8gYW5kIHRoYXQncyB1c2luZyB0aGUgc2FtZSBwb3B1bGF0aW9uLiBJZiBzbywgd2Ugc2hvdWxkIGJyaW5nCisJCS8vIHVwIGEgd2FybmluZyBhbmQgcG9zc2libHkgYSBoZWxwIGxpbmsKKwkJCisJCWZvcihEZWNvcmF0b3IgZDp0aGlzLmdldEdyYXBoKCkuZ2V0RGVjb3JhdG9ycygpKSB7CisJCQlpZiAoZCBpbnN0YW5jZW9mIFBvcHVsYXRpb25Nb2RlbCAmJiAoKFBvcHVsYXRpb25Nb2RlbClkKS5nZXRQb3B1bGF0aW9uSWRlbnRpZmllcigpLmVxdWFscyh0aGlzLmdldFBvcHVsYXRpb25JZGVudGlmaWVyKCkpKSB7CisJCQkJaWYoKChQb3B1bGF0aW9uTW9kZWwpZCkuaXNHcmFwaERlY29yYXRlZCgpKQorCQkJCQlVdGlsaXR5LmRpc3BsYXlTY2VuYXJpb0NvbXBvc2l0aW9uV2FybmluZyhVdGlsaXR5Lk5FU1RJTkdfV0FSTklORyk7CisJCQl9CisJCX0JCisJfQorCQorCXByb3RlY3RlZCBpbnQgZ2V0WWVhcihTVEVNVGltZSB0aW1lKSB7CisJCUNhbGVuZGFyIGNhbCA9IENhbGVuZGFyLmdldEluc3RhbmNlKCk7CisJCWlmKHRpbWUgIT0gbnVsbCkKKwkJCWNhbC5zZXRUaW1lKHRpbWUuZ2V0VGltZSgpKTsKKwkJZWxzZSBjYWwuc2V0VGltZShuZXcgRGF0ZSgpKTsKKwkJaW50IHllYXIgPSBjYWwuZ2V0KENhbGVuZGFyLllFQVIpOworCQlyZXR1cm4geWVhcjsKKwl9CisJCisJCisJcHJvdGVjdGVkIHZvaWQgZ2V0Tm9kZXMoR3JhcGggZywgU3RyaW5nIGtleSwgQXJyYXlMaXN0PE5vZGU+bGlzdCwgQXJyYXlMaXN0PE5vZGU+bmVnTGlzdCkgeworCisJCS8vIEZpcnN0IGZpbmQgb3RoZXIgcG9wdWxhdGlvbiBpbml0aWFsaXplcnMgaW4gdGhlIGdyYXBoIHRoYXQgaGFzIHRoZSBzYW1lCisJCS8vIHBvcHVsYXRpb24gaWRlbnRpZmllciBidXQgYSBsb3dlciBsZXZlbCBrZXkuIEFueSBub2RlIGluIHRoZSBzdWJzdHJlZSAKKwkJLy8gb2YgdGhhdCBsb3dlciBsZXZlbCBrZXkgc2hvdWxkIG5vdCBiZSB0b3VjaGVkLgorCQkKKwkJQXJyYXlMaXN0PFN0YW5kYXJkUG9wdWxhdGlvbkluaXRpYWxpemVyPmxvd2VyTGV2ZWxJbml0aWFsaXplcnMgPSBuZXcgQXJyYXlMaXN0PFN0YW5kYXJkUG9wdWxhdGlvbkluaXRpYWxpemVyPigpOworCQkKKwkJZm9yKERlY29yYXRvciBkOmcuZ2V0RGVjb3JhdG9ycygpKSB7CisJCQlpZihkIGluc3RhbmNlb2YgU3RhbmRhcmRQb3B1bGF0aW9uSW5pdGlhbGl6ZXIgJiYKKwkJCQkJKChTdGFuZGFyZFBvcHVsYXRpb25Jbml0aWFsaXplcilkKS5nZXRQb3B1bGF0aW9uSWRlbnRpZmllcigpLmVxdWFscyh0aGlzLmdldFBvcHVsYXRpb25JZGVudGlmaWVyKCkpICYmCisJCQkJCVV0aWxpdHkua2V5TGV2ZWwoKChTdGFuZGFyZFBvcHVsYXRpb25Jbml0aWFsaXplcilkKS5nZXRUYXJnZXRJU09LZXkoKSkgPiBVdGlsaXR5LmtleUxldmVsKHRoaXMuZ2V0VGFyZ2V0SVNPS2V5KCkpKQorCQkJCWxvd2VyTGV2ZWxJbml0aWFsaXplcnMuYWRkKChTdGFuZGFyZFBvcHVsYXRpb25Jbml0aWFsaXplcilkKTsKKwkJfQorCQkKKwkJZm9yKE5vZGUgbjpnLmdldE5vZGVzKCkudmFsdWVzKCkpIHsKKwkJCWJvb2xlYW4gZm91bmRTdWJJbml0aWFsaXplciA9IGZhbHNlOworCQkJZm9yKFN0YW5kYXJkUG9wdWxhdGlvbkluaXRpYWxpemVyIHNwaTpsb3dlckxldmVsSW5pdGlhbGl6ZXJzKSAKKwkJCQlpZihpc1NlbGZPckhhc1BhcmVudChuLCBzcGkuZ2V0VGFyZ2V0SVNPS2V5KCkpKSAKKwkJCQkJe2ZvdW5kU3ViSW5pdGlhbGl6ZXIgPSB0cnVlO2JyZWFrO30KKwkJCWlmKGZvdW5kU3ViSW5pdGlhbGl6ZXIpIGNvbnRpbnVlOworCQkJCisJCQlpZigoa2V5ID09IG51bGwgfHwga2V5LnRyaW0oKS5lcXVhbHMoIiIpKSAmJiBpc0xlYWYobikpIGxpc3QuYWRkKG4pOworCQkJZWxzZSBpZihuLmdldFVSSSgpLmxhc3RTZWdtZW50KCkuZXF1YWxzKGtleSkgJiYgaXNMZWFmKG4pKSBsaXN0LmFkZChuKTsKKwkJCS8vIENoZWNrIGlmIGFueSBvZiB0aGUgcGFyZW50cyBpcyB0aGUga2V5CisJCQllbHNlIGlmKGhhc1BhcmVudChuLCBrZXkpICYmIGlzTGVhZihuKSkgbGlzdC5hZGQobik7CisJCQllbHNlIGlmKGlzTGVhZihuKSkgbmVnTGlzdC5hZGQobik7CisJCX0KKwl9CisJCisJcHVibGljIGJvb2xlYW4gaXNMZWFmKE5vZGUgbikgeworCQlmb3IoRWRnZSBlOm4uZ2V0RWRnZXMoKSkKKwkJCWlmKGUuZ2V0TGFiZWwoKSBpbnN0YW5jZW9mIFJlbGF0aXZlUGh5c2ljYWxSZWxhdGlvbnNoaXBMYWJlbCAmJgorCQkJCQllLmdldEEoKS5lcXVhbHMobikpIAorCQkJCXJldHVybiBmYWxzZTsKKwkJcmV0dXJuIHRydWU7CisJfQorCQorCXB1YmxpYyBib29sZWFuIGhhc1BhcmVudChOb2RlIG4sIFN0cmluZyBrZXkpIHsKKwkJZm9yKEVkZ2UgZTpuLmdldEVkZ2VzKCkpIHsKKwkJCS8vIE1ha2Ugc3VyZSBpdCdzIGEgcGh5c2ljYWwgY29udGFpbm1lbnQgZWRnZQorCQkJYm9vbGVhbiBwaHlzID0gZS5nZXRMYWJlbCgpIGluc3RhbmNlb2YgUmVsYXRpdmVQaHlzaWNhbFJlbGF0aW9uc2hpcExhYmVsOworCQkJaWYoIXBoeXMpIAorCQkJCWNvbnRpbnVlOworCQkJaWYoZS5nZXRBKCkuZ2V0VVJJKCkubGFzdFNlZ21lbnQoKS5lcXVhbHMoa2V5KSkgcmV0dXJuIHRydWU7CisJCQllbHNlIGlmKFV0aWxpdHkua2V5TGV2ZWwoZS5nZXRBKCkuZ2V0VVJJKCkubGFzdFNlZ21lbnQoKSkgPCBVdGlsaXR5LmtleUxldmVsKG4uZ2V0VVJJKCkubGFzdFNlZ21lbnQoKSkpCisJCQkJcmV0dXJuIGhhc1BhcmVudChlLmdldEEoKSwga2V5KTsKKwkJfQorCQlyZXR1cm4gZmFsc2U7CisJfQorCQorCXB1YmxpYyBib29sZWFuIGlzU2VsZk9ySGFzUGFyZW50KE5vZGUgbiwgU3RyaW5nIGtleSkgeworCQlpZihuLmdldFVSSSgpLmxhc3RTZWdtZW50KCkuZXF1YWxzKGtleSkpIHJldHVybiB0cnVlOworCQlyZXR1cm4gaGFzUGFyZW50KG4sIGtleSk7CisJfQorCQorCXByb3RlY3RlZCBVUkkgY3JlYXRlUG9wdWxhdGlvbkxhYmVsVVJJKE5vZGUgbiwgU1RFTVRpbWUgdGltZSkgeworCQlpbnQgYWRtaW5MZXZlbCA9IFV0aWxpdHkua2V5TGV2ZWwobi5nZXRVUkkoKS5sYXN0U2VnbWVudCgpKTsKKwkJU3RyaW5nIGNvdW50cnlDb2RlID0gdGhpcy5nZXRDb3VudHJ5Q29kZShuKTsKKwkJU3RyaW5nIHBvcHVsYXRpb24gPSB0aGlzLmdldFBvcHVsYXRpb25JZGVudGlmaWVyKCk7CisJCWludCB5ZWFyID0gbmV3IERhdGUoKS5nZXRZZWFyKCkrMTkwMDsKKwkJaWYodGltZSAhPSBudWxsKSB5ZWFyID0gZ2V0WWVhcih0aW1lKTsKKwkJU3RyaW5nIGNvZGUgPSBuLmdldFVSSSgpLmxhc3RTZWdtZW50KCk7CisJCQorCQlyZXR1cm4gUG9wdWxhdGlvbkxhYmVsSW1wbC5jcmVhdGVQb3B1bGF0aW9uTGFiZWxVUkkoYWRtaW5MZXZlbCwgY291bnRyeUNvZGUsIHBvcHVsYXRpb24sIHllYXIrIiIsIGNvZGUpOworCX0KKwkKKwlwcm90ZWN0ZWQgU3RyaW5nIGdldENvdW50cnlDb2RlKE5vZGUgbikgeworCQlpZihVdGlsaXR5LmtleUxldmVsKG4uZ2V0VVJJKCkubGFzdFNlZ21lbnQoKSkgPT0gMCkgcmV0dXJuIG4uZ2V0VVJJKCkubGFzdFNlZ21lbnQoKTsKKwkJZWxzZSBmb3IoRWRnZSBlOm4uZ2V0RWRnZXMoKSkgCisJCQlpZihVdGlsaXR5LmtleUxldmVsKGUuZ2V0QSgpLmdldFVSSSgpLmxhc3RTZWdtZW50KCkpIDwgVXRpbGl0eS5rZXlMZXZlbChuLmdldFVSSSgpLmxhc3RTZWdtZW50KCkpKQorCQkJcmV0dXJuIGdldENvdW50cnlDb2RlKGUuZ2V0QSgpKTsKKwkJCisJCXJldHVybiAiWlpaIjsgLy8gTm90IGZvdW5kLCBidXQgWlpaIGlzIHRoZSBwYXJlbnQgb2YgZXZlcnl0aGluZworCX0KKwkKKwkKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgT2JqZWN0IGVHZXQoaW50IGZlYXR1cmVJRCwgYm9vbGVhbiByZXNvbHZlLCBib29sZWFuIGNvcmVUeXBlKSB7CisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7CisJCQljYXNlIFN0YW5kYXJkUGFja2FnZS5QT1BVTEFUSU9OX0lOSVRJQUxJWkVSX19UQVJHRVRfSVNPX0tFWToKKwkJCQlyZXR1cm4gZ2V0VGFyZ2V0SVNPS2V5KCk7CisJCQljYXNlIFN0YW5kYXJkUGFja2FnZS5QT1BVTEFUSU9OX0lOSVRJQUxJWkVSX19QT1BVTEFUSU9OX0lERU5USUZJRVI6CisJCQkJcmV0dXJuIGdldFBvcHVsYXRpb25JZGVudGlmaWVyKCk7CisJCX0KKwkJcmV0dXJuIHN1cGVyLmVHZXQoZmVhdHVyZUlELCByZXNvbHZlLCBjb3JlVHlwZSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgZVNldChpbnQgZmVhdHVyZUlELCBPYmplY3QgbmV3VmFsdWUpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJCWNhc2UgU3RhbmRhcmRQYWNrYWdlLlBPUFVMQVRJT05fSU5JVElBTElaRVJfX1RBUkdFVF9JU09fS0VZOgorCQkJCXNldFRhcmdldElTT0tleSgoU3RyaW5nKW5ld1ZhbHVlKTsKKwkJCQlyZXR1cm47CisJCQljYXNlIFN0YW5kYXJkUGFja2FnZS5QT1BVTEFUSU9OX0lOSVRJQUxJWkVSX19QT1BVTEFUSU9OX0lERU5USUZJRVI6CisJCQkJc2V0UG9wdWxhdGlvbklkZW50aWZpZXIoKFN0cmluZyluZXdWYWx1ZSk7CisJCQkJcmV0dXJuOworCQl9CisJCXN1cGVyLmVTZXQoZmVhdHVyZUlELCBuZXdWYWx1ZSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgZVVuc2V0KGludCBmZWF0dXJlSUQpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJCWNhc2UgU3RhbmRhcmRQYWNrYWdlLlBPUFVMQVRJT05fSU5JVElBTElaRVJfX1RBUkdFVF9JU09fS0VZOgorCQkJCXNldFRhcmdldElTT0tleShUQVJHRVRfSVNPX0tFWV9FREVGQVVMVCk7CisJCQkJcmV0dXJuOworCQkJY2FzZSBTdGFuZGFyZFBhY2thZ2UuUE9QVUxBVElPTl9JTklUSUFMSVpFUl9fUE9QVUxBVElPTl9JREVOVElGSUVSOgorCQkJCXNldFBvcHVsYXRpb25JZGVudGlmaWVyKFBPUFVMQVRJT05fSURFTlRJRklFUl9FREVGQVVMVCk7CisJCQkJcmV0dXJuOworCQl9CisJCXN1cGVyLmVVbnNldChmZWF0dXJlSUQpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBib29sZWFuIGVJc1NldChpbnQgZmVhdHVyZUlEKSB7CisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7CisJCQljYXNlIFN0YW5kYXJkUGFja2FnZS5QT1BVTEFUSU9OX0lOSVRJQUxJWkVSX19UQVJHRVRfSVNPX0tFWToKKwkJCQlyZXR1cm4gVEFSR0VUX0lTT19LRVlfRURFRkFVTFQgPT0gbnVsbCA/IHRhcmdldElTT0tleSAhPSBudWxsIDogIVRBUkdFVF9JU09fS0VZX0VERUZBVUxULmVxdWFscyh0YXJnZXRJU09LZXkpOworCQkJY2FzZSBTdGFuZGFyZFBhY2thZ2UuUE9QVUxBVElPTl9JTklUSUFMSVpFUl9fUE9QVUxBVElPTl9JREVOVElGSUVSOgorCQkJCXJldHVybiBQT1BVTEFUSU9OX0lERU5USUZJRVJfRURFRkFVTFQgPT0gbnVsbCA/IHBvcHVsYXRpb25JZGVudGlmaWVyICE9IG51bGwgOiAhUE9QVUxBVElPTl9JREVOVElGSUVSX0VERUZBVUxULmVxdWFscyhwb3B1bGF0aW9uSWRlbnRpZmllcik7CisJCX0KKwkJcmV0dXJuIHN1cGVyLmVJc1NldChmZWF0dXJlSUQpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKSB7CisJCWlmIChlSXNQcm94eSgpKSByZXR1cm4gc3VwZXIudG9TdHJpbmcoKTsKKworCQlTdHJpbmdCdWZmZXIgcmVzdWx0ID0gbmV3IFN0cmluZ0J1ZmZlcihzdXBlci50b1N0cmluZygpKTsKKwkJcmVzdWx0LmFwcGVuZCgiICh0YXJnZXRJU09LZXk6ICIpOworCQlyZXN1bHQuYXBwZW5kKHRhcmdldElTT0tleSk7CisJCXJlc3VsdC5hcHBlbmQoIiwgcG9wdWxhdGlvbklkZW50aWZpZXI6ICIpOworCQlyZXN1bHQuYXBwZW5kKHBvcHVsYXRpb25JZGVudGlmaWVyKTsKKwkJcmVzdWx0LmFwcGVuZCgnKScpOworCQlyZXR1cm4gcmVzdWx0LnRvU3RyaW5nKCk7CisJfQorCit9IC8vUG9wdWxhdGlvbkluaXRpYWxpemVySW1wbApkaWZmIC0tZ2l0IGEvbW9kZWxzL3BvcHVsYXRpb25zL29yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9wb3B1bGF0aW9ubW9kZWxzL3N0YW5kYXJkL2ltcGwvUG9wdWxhdGlvbk1vZGVsSW1wbC5qYXZhIGIvbW9kZWxzL3BvcHVsYXRpb25zL29yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9wb3B1bGF0aW9ubW9kZWxzL3N0YW5kYXJkL2ltcGwvUG9wdWxhdGlvbk1vZGVsSW1wbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI3M2NjNzkKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvcG9wdWxhdGlvbnMvb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3BvcHVsYXRpb25tb2RlbHMvc3RhbmRhcmQvaW1wbC9Qb3B1bGF0aW9uTW9kZWxJbXBsLmphdmEKQEAgLTAsMCArMSw2NDEgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLmltcGw7DQorDQorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisgKiBDb3B5cmlnaHQgKGMpIDIwMDkgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuDQorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscw0KKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMA0KKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0DQorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwNCisgKg0KKyAqIENvbnRyaWJ1dG9yczoNCisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uDQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQorDQorDQoraW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7DQoraW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOw0KK2ltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7DQoraW1wb3J0IGphdmEudXRpbC5MaXN0Ow0KKw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb247DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5CYXNpY0VMaXN0Ow0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuRUxpc3Q7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5VUkk7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5pbXBsLkVOb3RpZmljYXRpb25JbXBsOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuaW1wbC5JbnRlZ3JhdGlvbkRlY29yYXRvckltcGw7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5TVEVNVVJJOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuVXRpbGl0eTsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkR5bmFtaWNMYWJlbDsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkxhYmVsVmFsdWU7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5FZGdlOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguRXhjaGFuZ2U7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5FeGNoYW5nZVR5cGU7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5HcmFwaDsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkdyYXBoRmFjdG9yeTsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkludGVncmF0aW9uTGFiZWw7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5JbnRlZ3JhdGlvbkxhYmVsVmFsdWU7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5MYWJlbDsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLk5vZGU7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5Ob2RlTGFiZWw7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5EZWNvcmF0b3I7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5TVEVNVGltZTsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLmltcGwuTm9kZURlY29yYXRvckltcGw7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuZWRnZXMuTWlncmF0aW9uRWRnZTsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuUG9wdWxhdGlvbkxhYmVsOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5SZWxhdGl2ZVBoeXNpY2FsUmVsYXRpb25zaGlwTGFiZWw7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMudHJhbnNwb3J0LlBpcGVUcmFuc3BvcnRFZGdlTGFiZWw7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5BY3RpdmF0b3I7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5Qb3B1bGF0aW9uTW9kZWw7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5Qb3B1bGF0aW9uTW9kZWxMYWJlbDsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLlBvcHVsYXRpb25Nb2RlbExhYmVsVmFsdWU7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZFBhY2thZ2U7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZFBvcHVsYXRpb25Nb2RlbExhYmVsOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxMYWJlbFZhbHVlOw0KKw0KKy8qKg0KKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorICogQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPlBvcHVsYXRpb24gTW9kZWw8L2I+PC9lbT4nLg0KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKyAqIDxwPg0KKyAqIFRoZSBmb2xsb3dpbmcgZmVhdHVyZXMgYXJlIGltcGxlbWVudGVkOg0KKyAqIDx1bD4NCisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLmltcGwuUG9wdWxhdGlvbk1vZGVsSW1wbCNnZXRQb3B1bGF0aW9uSWRlbnRpZmllciA8ZW0+UG9wdWxhdGlvbiBJZGVudGlmaWVyPC9lbT59PC9saT4NCisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLmltcGwuUG9wdWxhdGlvbk1vZGVsSW1wbCNnZXROYW1lIDxlbT5OYW1lPC9lbT59PC9saT4NCisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLmltcGwuUG9wdWxhdGlvbk1vZGVsSW1wbCNnZXRUYXJnZXRJU09LZXkgPGVtPlRhcmdldCBJU08gS2V5PC9lbT59PC9saT4NCisgKiA8L3VsPg0KKyAqIDwvcD4NCisgKg0KKyAqIEBnZW5lcmF0ZWQNCisgKi8NCitwdWJsaWMgYWJzdHJhY3QgY2xhc3MgUG9wdWxhdGlvbk1vZGVsSW1wbCBleHRlbmRzIEludGVncmF0aW9uRGVjb3JhdG9ySW1wbCBpbXBsZW1lbnRzIFBvcHVsYXRpb25Nb2RlbCB7DQorCS8qKg0KKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0UG9wdWxhdGlvbklkZW50aWZpZXIoKSA8ZW0+UG9wdWxhdGlvbiBJZGVudGlmaWVyPC9lbT59JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAc2VlICNnZXRQb3B1bGF0aW9uSWRlbnRpZmllcigpDQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgU3RyaW5nIFBPUFVMQVRJT05fSURFTlRJRklFUl9FREVGQVVMVCA9ICJodW1hbiI7DQorDQorCS8qKg0KKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRQb3B1bGF0aW9uSWRlbnRpZmllcigpIDxlbT5Qb3B1bGF0aW9uIElkZW50aWZpZXI8L2VtPn0nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBzZWUgI2dldFBvcHVsYXRpb25JZGVudGlmaWVyKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJcHJvdGVjdGVkIFN0cmluZyBwb3B1bGF0aW9uSWRlbnRpZmllciA9IFBPUFVMQVRJT05fSURFTlRJRklFUl9FREVGQVVMVDsNCisNCisJLyoqDQorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXROYW1lKCkgPGVtPk5hbWU8L2VtPn0nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBzZWUgI2dldE5hbWUoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqIEBvcmRlcmVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIFN0cmluZyBOQU1FX0VERUZBVUxUID0gIkh1bWFuUG9wdWxhdGlvbk1vZGVsIjsNCisNCisJLyoqDQorCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldE5hbWUoKSA8ZW0+TmFtZTwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHNlZSAjZ2V0TmFtZSgpDQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCXByb3RlY3RlZCBTdHJpbmcgbmFtZSA9IE5BTUVfRURFRkFVTFQ7DQorDQorCS8qKg0KKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0VGFyZ2V0SVNPS2V5KCkgPGVtPlRhcmdldCBJU08gS2V5PC9lbT59JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAc2VlICNnZXRUYXJnZXRJU09LZXkoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqIEBvcmRlcmVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIFN0cmluZyBUQVJHRVRfSVNPX0tFWV9FREVGQVVMVCA9ICIiOw0KKw0KKwkvKioNCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0VGFyZ2V0SVNPS2V5KCkgPGVtPlRhcmdldCBJU08gS2V5PC9lbT59JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAc2VlICNnZXRUYXJnZXRJU09LZXkoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqIEBvcmRlcmVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgU3RyaW5nIHRhcmdldElTT0tleSA9IFRBUkdFVF9JU09fS0VZX0VERUZBVUxUOw0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQgTk9UDQorCSAqLw0KKwlwdWJsaWMgUG9wdWxhdGlvbk1vZGVsSW1wbCgpIHsNCisJCXN1cGVyKCk7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlAT3ZlcnJpZGUNCisJcHJvdGVjdGVkIEVDbGFzcyBlU3RhdGljQ2xhc3MoKSB7DQorCQlyZXR1cm4gU3RhbmRhcmRQYWNrYWdlLkxpdGVyYWxzLlBPUFVMQVRJT05fTU9ERUw7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgU3RyaW5nIGdldFBvcHVsYXRpb25JZGVudGlmaWVyKCkgew0KKwkJcmV0dXJuIHBvcHVsYXRpb25JZGVudGlmaWVyOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIHZvaWQgc2V0UG9wdWxhdGlvbklkZW50aWZpZXIoU3RyaW5nIG5ld1BvcHVsYXRpb25JZGVudGlmaWVyKSB7DQorCQlTdHJpbmcgb2xkUG9wdWxhdGlvbklkZW50aWZpZXIgPSBwb3B1bGF0aW9uSWRlbnRpZmllcjsNCisJCXBvcHVsYXRpb25JZGVudGlmaWVyID0gbmV3UG9wdWxhdGlvbklkZW50aWZpZXI7DQorCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpDQorCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgU3RhbmRhcmRQYWNrYWdlLlBPUFVMQVRJT05fTU9ERUxfX1BPUFVMQVRJT05fSURFTlRJRklFUiwgb2xkUG9wdWxhdGlvbklkZW50aWZpZXIsIHBvcHVsYXRpb25JZGVudGlmaWVyKSk7DQorCX0NCisNCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgU3RyaW5nIGdldE5hbWUoKSB7DQorCQlyZXR1cm4gbmFtZTsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyB2b2lkIHNldE5hbWUoU3RyaW5nIG5ld05hbWUpIHsNCisJCVN0cmluZyBvbGROYW1lID0gbmFtZTsNCisJCW5hbWUgPSBuZXdOYW1lOw0KKwkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQ0KKwkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIFN0YW5kYXJkUGFja2FnZS5QT1BVTEFUSU9OX01PREVMX19OQU1FLCBvbGROYW1lLCBuYW1lKSk7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgU3RyaW5nIGdldFRhcmdldElTT0tleSgpIHsNCisJCXJldHVybiB0YXJnZXRJU09LZXk7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgdm9pZCBzZXRUYXJnZXRJU09LZXkoU3RyaW5nIG5ld1RhcmdldElTT0tleSkgew0KKwkJU3RyaW5nIG9sZFRhcmdldElTT0tleSA9IHRhcmdldElTT0tleTsNCisJCXRhcmdldElTT0tleSA9IG5ld1RhcmdldElTT0tleTsNCisJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkNCisJCQllTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBTdGFuZGFyZFBhY2thZ2UuUE9QVUxBVElPTl9NT0RFTF9fVEFSR0VUX0lTT19LRVksIG9sZFRhcmdldElTT0tleSwgdGFyZ2V0SVNPS2V5KSk7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkIE5PVA0KKwkgKi8NCisJcHVibGljIEVMaXN0PFN0cmluZz4gZ2V0QWxsTGFiZWxJZGVudGlmaWVycygpIHsNCisJCUVMaXN0PFN0cmluZz4gaWRlbnRpZmllcnMgPSBuZXcgQmFzaWNFTGlzdDxTdHJpbmc+KCk7DQorCQkNCisJCWlkZW50aWZpZXJzLmFkZChnZXRQb3B1bGF0aW9uSWRlbnRpZmllcigpKTsNCisJCQ0KKwkJcmV0dXJuIGlkZW50aWZpZXJzOw0KKwl9DQorDQorCS8qKg0KKwkgKiBEZWNvcmF0ZSB0aGUgZ3JhcGggZm9yIGEgc3RhbmRhcmQgcG9wdWxhdGlvbiBtb2RlbA0KKwkgKiANCisJICovDQorCUBPdmVycmlkZQ0KKwlwdWJsaWMgYm9vbGVhbiBkZWNvcmF0ZUdyYXBoKFNURU1UaW1lIHRpbWUpIHsNCisJCWlmKHRoaXMuaXNHcmFwaERlY29yYXRlZCgpKSByZXR1cm4gdHJ1ZTsNCisJCWZvciAoZmluYWwgSXRlcmF0b3I8UG9wdWxhdGlvbkxhYmVsPiBwb3B1bGF0aW9uTGFiZWxJdGVyID0gZ2V0UG9wdWxhdGlvbkxhYmVscygNCisJCQkJZ2V0UG9wdWxhdGlvbklkZW50aWZpZXIoKSwgZ2V0R3JhcGgoKSkuaXRlcmF0b3IoKTsgcG9wdWxhdGlvbkxhYmVsSXRlcg0KKwkJCQkuaGFzTmV4dCgpOykgew0KKwkJCWZpbmFsIFBvcHVsYXRpb25MYWJlbCBwb3B1bGF0aW9uTGFiZWwgPSBwb3B1bGF0aW9uTGFiZWxJdGVyLm5leHQoKTsNCisNCisJCQlpZih0aGlzLmdldFBvcHVsYXRpb25JZGVudGlmaWVyKCkuZXF1YWxzKHBvcHVsYXRpb25MYWJlbC5nZXRQb3B1bGF0aW9uSWRlbnRpZmllcigpKSkgew0KKwkJCQkvLyBNYWtlIHN1cmUgdGhlIG5vZGUgZG9lcyBub3QgYWxyZWFkeSBoYXZlIGEgcG9wdWxhdGlvbiBtb2RlbCBsYWJlbCBmb3IgdGhpcyBwb3B1bGF0aW9uDQorCQkJCS8vIGlkZW50aWZpZXIuIA0KKwkJCQlib29sZWFuIGZvdW5kID0gZmFsc2U7DQorCQkJCWZvcihOb2RlTGFiZWwgbDpwb3B1bGF0aW9uTGFiZWwuZ2V0Tm9kZSgpLmdldExhYmVscygpKSB7DQorCQkJCQlpZihsIGluc3RhbmNlb2YgUG9wdWxhdGlvbk1vZGVsTGFiZWwgJiYgDQorCQkJCQkJCSgoUG9wdWxhdGlvbk1vZGVsTGFiZWwpbCkuZ2V0UG9wdWxhdGlvbklkZW50aWZpZXIoKS5lcXVhbHModGhpcy5nZXRQb3B1bGF0aW9uSWRlbnRpZmllcigpKSkNCisJCQkJCQl7Zm91bmQgPSB0cnVlO2JyZWFrO30NCisJCQkJfQ0KKwkJCQlpZihmb3VuZCljb250aW51ZTsNCisJCQkJDQorCQkJCS8vIE9rYXksIGFub3RoZXIgcG9wdWxhdGlvbiBtb2RlbCBoYXMgbm90IHlldCBhZGRlZCBwb3B1bGF0aW9uIG1vZGVsIGxhYmVscw0KKwkJCQkvLyBmb3IgdGhlIHNhbWUgcG9wdWxhdGlvbiBpZGVudGlmaWVyLCBidXQgaXQgbWlnaHQgZG8gc28gaW4gdGhlIGZ1dHVyZSBkZXBlbmRpbmcNCisJCQkJLy8gdXBvbiB0aGUgb3JkZXIgZGVjb3JhdGVHcmFwaCgpIGlzIGNhbGxlZCBvbiB0aGUgZGVjb3JhdG9ycy4gQ2hlY2sgaWYgdGhlcmUNCisJCQkJLy8gaXMgYW5vdGhlciBwb3B1bGF0aW9uIG1vZGVsIHdpdGggYSBoaWdoZXIgaXNvIGxldmVsIHRhcmdldCBub2RlIFVSSSB0aGF0IHRoZQ0KKwkJCQkvLyBub2RlIGlzIGNvbnRhaW5lZCB3aXRoaW4uDQorCQkJCQ0KKwkJCQlmb3VuZCA9IGZhbHNlOw0KKwkJCQlmb3IoRGVjb3JhdG9yIGQ6dGhpcy5nZXRHcmFwaCgpLmdldERlY29yYXRvcnMoKSkgew0KKwkJCQkJIGlmKCFkLmVxdWFscyh0aGlzKSAmJiAgDQorCQkJCQkJCSBkIGluc3RhbmNlb2YgUG9wdWxhdGlvbk1vZGVsICYmIA0KKwkJCQkJCQkgKChQb3B1bGF0aW9uTW9kZWwpZCkuZ2V0UG9wdWxhdGlvbklkZW50aWZpZXIoKS5lcXVhbHModGhpcy5nZXRQb3B1bGF0aW9uSWRlbnRpZmllcigpKSAmJg0KKwkJCQkJCQkgVXRpbGl0eS5rZXlMZXZlbCgoKFBvcHVsYXRpb25Nb2RlbClkKS5nZXRUYXJnZXRJU09LZXkoKSkgPiBVdGlsaXR5LmtleUxldmVsKHRoaXMuZ2V0VGFyZ2V0SVNPS2V5KCkpICYmDQorCQkJCQkJCSBpc0NvbnRhaW5lZChwb3B1bGF0aW9uTGFiZWwuZ2V0Tm9kZSgpLCAoKChQb3B1bGF0aW9uTW9kZWwpZCkuZ2V0VGFyZ2V0SVNPS2V5KCkpKSkNCisJCQkJCSB7Zm91bmQgPSB0cnVlO2JyZWFrO30NCisJCQkJfQ0KKwkJCQlpZihmb3VuZCkgY29udGludWU7DQorCQkJCQ0KKwkJCQkvLyBGaW5hbCBjaGVjay4gSWYgdGhpcyBpcyBub3QgYSBsZWFmIG5vZGUsIHdlIGRvbid0IGFkZCB0aGUgcG9wdWxhdGlvbiBtb2RlbCBsYWJlbCBzaW5jZSB0aGVyZSdzIG5vIHJlYXNvbg0KKwkJCQkvLyB0byBkbyB0aGUgY2FsY3VsYXRpb25zIGhlcmUgc2luY2UgdGhleSB3aWxsIGJlIGRvbmUgaW4gdGhlIGNoaWxkcmVuDQorCQkJCQ0KKwkJCQlpZighaXNMZWFmKHBvcHVsYXRpb25MYWJlbC5nZXROb2RlKCkpKSBjb250aW51ZTsNCisJCQkJDQorCQkJCS8vIE9rLCBsZXQncyBjcmVhdGUgYSBwb3B1bGF0aW9uIG1vZGVsIGxhYmVsIHRvIGtlZXAgdGhlIGR5bmFtaWMgc3RhdGUgb2YgdGhlIHBvcHVsYXRpb24NCisJCQkJDQorCQkJCWZpbmFsIFBvcHVsYXRpb25Nb2RlbExhYmVsIHBsID0gY3JlYXRlUG9wdWxhdGlvbkxhYmVsKCk7DQorCQkJCXBsLnNldFBvcHVsYXRpb25MYWJlbChwb3B1bGF0aW9uTGFiZWwpOyAvLyBSZW1lbWJlciB0aGUgc3RhdGljIHBvcHVsYXRpb24gbGFiZWwNCisJCQkJcGwuc2V0UG9wdWxhdGlvbklkZW50aWZpZXIocG9wdWxhdGlvbkxhYmVsLmdldFBvcHVsYXRpb25JZGVudGlmaWVyKCkpOw0KKwkJCQkvLyBNYWtlIGEgdW5pcXVlIFVSSSBmb3IgdGhlIGxhYmVsIHRoYXQncyB0aGUgc2FtZSBhY3Jvc3MgcnVubmluZyBpbnN0YW5jZXMNCisJCQkJVVJJIHVuaXF1ZSA9IFNURU1VUkkuY3JlYXRlVVJJKExhYmVsLlVSSV9UWVBFX0xBQkVMX1NFR01FTlQgKyAiLyIrcG9wdWxhdGlvbkxhYmVsLmdldE5vZGUoKS5nZXRVUkkoKS5sYXN0U2VnbWVudCgpKyIvIit0aGlzLmdldE5hbWUoKSsiLyIrZ2V0UG9wdWxhdGlvbklkZW50aWZpZXIoKSk7DQorCQkJCXBsLnNldFVSSSh1bmlxdWUpOw0KKwkJCQlwbC5nZXREdWJsaW5Db3JlKCkuc2V0SWRlbnRpZmllcih1bmlxdWUudG9TdHJpbmcoKSk7DQorCQkJCWdldExhYmVsc1RvVXBkYXRlKCkuYWRkKHBsKTsNCisJCQkJcG9wdWxhdGlvbkxhYmVsLmdldE5vZGUoKS5nZXRMYWJlbHMoKS5hZGQocGwpOw0KKwkJCQlwbC5zZXROb2RlKHBvcHVsYXRpb25MYWJlbC5nZXROb2RlKCkpOw0KKwkJCQlnZXRHcmFwaCgpLnB1dE5vZGVMYWJlbChwbCk7DQorCQkJfQ0KKwkJfSAvLyBmb3IgZWFjaCBwb3B1bGF0aW9uIGxhYmVsDQorDQorCQkNCisJCXJlc2V0TGFiZWxzKCk7DQorCQlyZXR1cm4gdHJ1ZTsNCisJfSAvLyBkZWNvcmF0ZUdyYXBoDQorCQ0KKwkvKioNCisJICogaXNMZWFmLiBSZXR1cm4gdHJ1ZSBpZiB0aGUgcGFzc2VkIGluIG5vZGUgaXMgYSBsZWFmDQorCSAqIEBwYXJhbSBuDQorCSAqIEByZXR1cm4NCisJICovDQorCXB1YmxpYyBib29sZWFuIGlzTGVhZihOb2RlIG4pIHsNCisJCWZvcihFZGdlIGU6bi5nZXRFZGdlcygpKQ0KKwkJCWlmKGUuZ2V0TGFiZWwoKSBpbnN0YW5jZW9mIFJlbGF0aXZlUGh5c2ljYWxSZWxhdGlvbnNoaXBMYWJlbCAmJg0KKwkJCQkJZS5nZXRBKCkuZXF1YWxzKG4pKSANCisJCQkJcmV0dXJuIGZhbHNlOw0KKwkJcmV0dXJuIHRydWU7DQorCX0NCisJDQorCS8qKg0KKwkgKiBTZWFyY2ggdGhyb3VnaCB0aGUgZ3JhcGggYW5kIGZpbmQgYWxsIG9mIHRoZSBwb3B1bGF0aW9uIGxhYmVscyB0aGF0IGhhdmUNCisJICogdGhlIHNhbWUgaWRlbnRpZmllci4NCisJICogDQorCSAqIEBwYXJhbSBwb3B1bGF0aW9uSWRlbnRpZmllcg0KKwkgKiAgICAgICAgICAgIHRoZSBwb3B1bGF0aW9uIGJlaW5nIGxhYmVsZWQNCisJICogQHBhcmFtIGdyYXBoDQorCSAqICAgICAgICAgICAgdGhlIGdyYXBoIHRvIHNlYXJjaA0KKwkgKiBAcmV0dXJuIHRoZSBQb3B1bGF0aW9uTGFiZWwgaW5zdGFuY2VzIG9mIHRoZSBncmFwaCB0aGF0IG1hdGNoIHRoZQ0KKwkgKiAgICAgICAgIGlkZW50aWZpZXIuDQorCSAqLw0KKwlwcm90ZWN0ZWQgQ29sbGVjdGlvbjxQb3B1bGF0aW9uTGFiZWw+IGdldFBvcHVsYXRpb25MYWJlbHMoDQorCQkJZmluYWwgU3RyaW5nIHBvcHVsYXRpb25JZGVudGlmaWVyLCBmaW5hbCBHcmFwaCBncmFwaCkgew0KKwkJZmluYWwgTGlzdDxQb3B1bGF0aW9uTGFiZWw+IHJldFZhbHVlID0gbmV3IEFycmF5TGlzdDxQb3B1bGF0aW9uTGFiZWw+KCk7DQorDQorCQkvLyBJdGVyYXRlIHRocm91Z2ggYWxsIG9mIHRoZSBwb3B1bGF0aW9uIGxhYmVscyBpbiB0aGUgZ3JhcGgNCisJCUVMaXN0PE5vZGVMYWJlbD4gbGFiZWxzID0gZ3JhcGguZ2V0Tm9kZUxhYmVsc0J5VHlwZVVSSSgNCisJCQkJUG9wdWxhdGlvbkxhYmVsLlVSSV9UWVBFX1BPUFVMQVRJT05fTEFCRUwpOw0KKwkJZm9yIChOb2RlTGFiZWwgcGw6bGFiZWxzKSB7DQorCQkJaWYoZ2V0VGFyZ2V0SVNPS2V5KCkgIT0gbnVsbCAmJiAhZ2V0VGFyZ2V0SVNPS2V5KCkudHJpbSgpLmVxdWFscygiIikgJiYgcGwuZ2V0Tm9kZSgpICE9IG51bGwgJiYgDQorCQkJCQkhaXNDb250YWluZWQocGwuZ2V0Tm9kZSgpLCBnZXRUYXJnZXRJU09LZXkoKSkgJiYNCisJCQkJCSFwbC5nZXROb2RlKCkuZ2V0VVJJKCkubGFzdFNlZ21lbnQoKS5lcXVhbHMoIlpaWiIpKQ0KKwkJCQljb250aW51ZTsNCisJCQkNCisJCQlmaW5hbCBQb3B1bGF0aW9uTGFiZWwgcG9wdWxhdGlvbkxhYmVsID0gKFBvcHVsYXRpb25MYWJlbCkgcGw7DQorCQkJLy8gSXMgdGhpcyBsYWJlbCBmb3IgdGhlIHBvcHVsYXRpb24gd2UncmUgbG9va2luZyBmb3I/DQorCQkJaWYgKHBvcHVsYXRpb25MYWJlbC5nZXRQb3B1bGF0aW9uSWRlbnRpZmllcigpLmVxdWFscygNCisJCQkJCXBvcHVsYXRpb25JZGVudGlmaWVyKSkgew0KKwkJCQkvLyBZZXMNCisJCQkJLy8gSWYgdGhlcmUgaXMgYSBwcm9ibGVtIHdpdGggdGhlICJub2RlIHVyaSIgb2YgdGhlIHBvcHVsYXRpb24NCisJCQkJLy8gbGFiZWwgdGhlbiBpdCB3b3VsZCBub3QgaGF2ZSBiZWVuIGFzc29jaWF0ZWQgd2l0aCBhIG5vZGUNCisJCQkJLy8gaW5zdGFuY2UgaW4gdGhlIGdyYXBoIGF0IHRoaXMgcG9pbnQuIFRoaXMgaXMgYSBwcm9ibGVtIGZvcg0KKwkJCQkvLyBkaXNlYXNlIG1vZGVscyB0aGF0IGFyZSB0cnlpbmcgdG8gbGFiZWwgdGhlIG5vZGUgKHRoZXJlIGlzbid0DQorCQkJCS8vIG9uZSEpLiBTbyBmaWx0ZXIgb3V0IHRob3NlIG1pc3Rha2VzIGhlcmUuDQorDQorCQkJCS8vIERvZXMgdGhlIHBvcHVsYXRpb24gbGFiZWwgaGF2ZSBhbiBhc3NvY2lhdGVkIG5vZGU/DQorCQkJCWlmIChwb3B1bGF0aW9uTGFiZWwuZ2V0Tm9kZSgpICE9IG51bGwpIHsNCisJCQkJCS8vIFllcw0KKwkJCQkJcmV0VmFsdWUuYWRkKHBvcHVsYXRpb25MYWJlbCk7DQorCQkJCX0gLy8gaWYgdGhlIHBvcHVsYXRpb24gbGFiZWwgaGFzIGEgbm9kZQ0KKwkJCX0gLy8gaWYgdGhlIHBvcHVsYXRpb24gd2UncmUgbG9va2luZyBmb3INCisJCX0gLy8gZm9yIGVhY2ggcG9wdWxhdGlvbiBsYWJlbA0KKw0KKwkJcmV0dXJuIHJldFZhbHVlOw0KKwl9IC8vIGdldFBvcHVsYXRpb25MYWJlbHMNCisJDQorCXByb3RlY3RlZCBib29sZWFuIGlzQ29udGFpbmVkKE5vZGUgbm9kZSwgU3RyaW5nIHRhcmdldElTT0tleSkgew0KKwkJaWYobm9kZS5nZXRVUkkoKS5sYXN0U2VnbWVudCgpLmVxdWFscyh0YXJnZXRJU09LZXkpKSANCisJCQlyZXR1cm4gdHJ1ZTsNCisJCS8vIENoZWNrIHBhcmVudHMNCisJCUVMaXN0PEVkZ2U+ZWRnZXMgPSBub2RlLmdldEVkZ2VzKCk7DQorCQkNCisJCWZvcihFZGdlIGU6ZWRnZXMpIHsNCisJCQlpZihlLmdldExhYmVsKCkgaW5zdGFuY2VvZiBSZWxhdGl2ZVBoeXNpY2FsUmVsYXRpb25zaGlwTGFiZWwgfHwNCisJCQkJCWUuZ2V0TGFiZWwoKSBpbnN0YW5jZW9mIFBpcGVUcmFuc3BvcnRFZGdlTGFiZWwpIA0KKwkJCQlpZihlLmdldEEoKS5lcXVhbHMobm9kZSkpIGNvbnRpbnVlOw0KKwkJCQllbHNlIGlmKFV0aWxpdHkua2V5TGV2ZWwoZS5nZXRBKCkuZ2V0VVJJKCkubGFzdFNlZ21lbnQoKSkgDQorCQkJCQkJPiBVdGlsaXR5LmtleUxldmVsKG5vZGUuZ2V0VVJJKCkubGFzdFNlZ21lbnQoKSkpIGNvbnRpbnVlOyAvLyBza2lwIGFpciB0cmFuc3BvcnQgZWRnZXMgdGhhdCBnb2VzICJkb3duIg0KKwkJCQllbHNlIHJldHVybiBpc0NvbnRhaW5lZChlLmdldEEoKSwgdGFyZ2V0SVNPS2V5KTsNCisJCX0NCisJCQ0KKwkJcmV0dXJuIGZhbHNlOw0KKwl9DQorDQorCS8qKg0KKwkgKiBTZWFyY2ggdGhyb3VnaCB0aGUgZ3JhcGggYW5kIGZpbmQgYWxsIG9mIHRoZSBwb3B1bGF0aW9uIG1vZGVsIGxhYmVscyAoaS5lLiBkeW5hbWljIG9uZXMsIG5vdCBzdGF0aWMpIHRoYXQgaGF2ZQ0KKwkgKiB0aGUgc2FtZSBpZGVudGlmaWVyLg0KKwkgKiANCisJICogQHBhcmFtIHBvcHVsYXRpb25JZGVudGlmaWVyDQorCSAqICAgICAgICAgICAgdGhlIHBvcHVsYXRpb24gYmVpbmcgbGFiZWxlZA0KKwkgKiBAcGFyYW0gZ3JhcGgNCisJICogICAgICAgICAgICB0aGUgZ3JhcGggdG8gc2VhcmNoDQorCSAqIEByZXR1cm4gdGhlIFBvcHVsYXRpb25MYWJlbCBpbnN0YW5jZXMgb2YgdGhlIGdyYXBoIHRoYXQgbWF0Y2ggdGhlDQorCSAqICAgICAgICAgaWRlbnRpZmllci4NCisJICovDQorCXByb3RlY3RlZCBDb2xsZWN0aW9uPFBvcHVsYXRpb25Nb2RlbExhYmVsPiBnZXRQb3B1bGF0aW9uTW9kZWxMYWJlbHMoDQorCQkJZmluYWwgU3RyaW5nIHBvcHVsYXRpb25JZGVudGlmaWVyLCBmaW5hbCBHcmFwaCBncmFwaCkgew0KKwkJZmluYWwgTGlzdDxQb3B1bGF0aW9uTW9kZWxMYWJlbD4gcmV0VmFsdWUgPSBuZXcgQXJyYXlMaXN0PFBvcHVsYXRpb25Nb2RlbExhYmVsPigpOw0KKw0KKwkJLy8gSXRlcmF0ZSB0aHJvdWdoIGFsbCBvZiB0aGUgcG9wdWxhdGlvbiBsYWJlbHMgaW4gdGhlIGdyYXBoDQorCQlFTGlzdDxOb2RlTGFiZWw+IGxhYmVscyA9IGdyYXBoLmdldE5vZGVMYWJlbHNCeVR5cGVVUkkoDQorCQkJCVBvcHVsYXRpb25Nb2RlbExhYmVsLlVSSV9UWVBFX0RZTkFNSUNfUE9QVUxBVElPTl9MQUJFTCk7DQorCQlmb3IgKE5vZGVMYWJlbCBwbDpsYWJlbHMpIHsNCisJCQlmaW5hbCBQb3B1bGF0aW9uTW9kZWxMYWJlbCBwb3B1bGF0aW9uTW9kZWxMYWJlbCA9IChQb3B1bGF0aW9uTW9kZWxMYWJlbCkgcGw7DQorCQkJLy8gSXMgdGhpcyBsYWJlbCBmb3IgdGhlIHBvcHVsYXRpb24gd2UncmUgbG9va2luZyBmb3I/DQorCQkJaWYgKHBvcHVsYXRpb25Nb2RlbExhYmVsLmdldFBvcHVsYXRpb25JZGVudGlmaWVyKCkuZXF1YWxzKA0KKwkJCQkJcG9wdWxhdGlvbklkZW50aWZpZXIpKSB7DQorCQkJIAlpZiAocG9wdWxhdGlvbk1vZGVsTGFiZWwuZ2V0Tm9kZSgpICE9IG51bGwpIHsNCisJCQkJCS8vIFllcw0KKwkJCQkJcmV0VmFsdWUuYWRkKHBvcHVsYXRpb25Nb2RlbExhYmVsKTsNCisJCQkJfSAvLyBpZiB0aGUgcG9wdWxhdGlvbiBsYWJlbCBoYXMgYSBub2RlDQorCQkJfSAvLyBpZiB0aGUgcG9wdWxhdGlvbiB3ZSdyZSBsb29raW5nIGZvcg0KKwkJfSAvLyBmb3IgZWFjaCBwb3B1bGF0aW9uIGxhYmVsDQorDQorCQlyZXR1cm4gcmV0VmFsdWU7DQorCX0gLy8gZ2V0UG9wdWxhdGlvbkxhYmVscw0KKwkNCisJcHVibGljIHZvaWQgYXBwbHlFeHRlcm5hbERlbHRhcyhTVEVNVGltZSB0aW1lLCBsb25nIHRpbWVEZWx0YSwNCisJCQlFTGlzdDxEeW5hbWljTGFiZWw+IGxhYmVscykgew0KKwkJZm9yIChmaW5hbCBJdGVyYXRvcjxEeW5hbWljTGFiZWw+IGN1cnJlbnRTdGF0ZUxhYmVsSXRlciA9IGxhYmVscw0KKwkJCQkuaXRlcmF0b3IoKTsgY3VycmVudFN0YXRlTGFiZWxJdGVyLmhhc05leHQoKTspIHsNCisJCQlmaW5hbCBTdGFuZGFyZFBvcHVsYXRpb25Nb2RlbExhYmVsIHBsYWJlbCA9IChTdGFuZGFyZFBvcHVsYXRpb25Nb2RlbExhYmVsKSBjdXJyZW50U3RhdGVMYWJlbEl0ZXINCisJCQkJCS5uZXh0KCk7DQorCQkJDQorCQkJU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxMYWJlbFZhbHVlIG15RGVsdGEgPSAoU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxMYWJlbFZhbHVlKXBsYWJlbC5nZXREZWx0YVZhbHVlKCk7DQorCQkJTm9kZSBuID0gcGxhYmVsLmdldE5vZGUoKTsNCisJCQkNCisJCQkvLyBGaW5kIG90aGVyIGxhYmVscyBvbiB0aGUgbm9kZSB0aGF0IHdhbnRzIHRvIGV4Y2hhbmdlIGRhdGENCisJCQkNCisJCQlFTGlzdDxOb2RlTGFiZWw+IGxhYnMgPSBuLmdldExhYmVscygpOw0KKwkJCWZvcihOb2RlTGFiZWwgbDpsYWJzKSB7DQorCQkJCWlmKGwgaW5zdGFuY2VvZiBJbnRlZ3JhdGlvbkxhYmVsICYmICFsLmVxdWFscyhwbGFiZWwpICYmDQorCQkJCQkJKChJbnRlZ3JhdGlvbkxhYmVsKWwpLmdldElkZW50aWZpZXIoKS5lcXVhbHMocGxhYmVsLmdldElkZW50aWZpZXIoKSkpIHsNCisJCQkJCUludGVncmF0aW9uTGFiZWxWYWx1ZSBzZGVMYWJlbFZhbHVlID0gKEludGVncmF0aW9uTGFiZWxWYWx1ZSkoKEludGVncmF0aW9uTGFiZWwpbCkuZ2V0RGVsdGFWYWx1ZSgpOw0KKwkJCQkJRUxpc3Q8RXhjaGFuZ2U+YXJyaXZhbHMgPSBzZGVMYWJlbFZhbHVlLmdldEFycml2YWxzKCk7DQorCQkJCQlFTGlzdDxFeGNoYW5nZT5kZXBhcnR1cmVzID0gc2RlTGFiZWxWYWx1ZS5nZXREZXBhcnR1cmVzKCk7DQorCQkJCQkNCisJCQkJCS8vIEFycml2YWxzIGFyZSBiaXJ0aHMuIE9ic2VydmUgdGhhdCBhcnJpdmFscyBzaG91bGQgYmUgMCBzaW5jZSANCisJCQkJCS8vIG90aGVyIGRlY29yYXRvcnMgYXJlIGRpc2Vhc2UgbW9kZWxzIHRoYXQgZG9uJ3QgY2F1c2UgYW4gImluY3JlYXNlIg0KKwkJCQkJLy8gaW4gYmlydGhzLg0KKwkJCQkJDQorCQkJCQlpZihhcnJpdmFscyAhPSBudWxsKSB7DQorCQkJCQkJZm9yIChFeGNoYW5nZSBlbnRyeSA6IGFycml2YWxzKSB7DQorCQkJCQkJCWlmKGVudHJ5LmdldFR5cGUoKSA9PSBFeGNoYW5nZVR5cGUuQklSVEhTX0FORF9ERUFUSFMpIHsNCisJCQkJCQkJCS8vIE9ubHkgdGhlIGxvY2FsIG5vZGUgbWFrZXMgc2Vuc2UgZm9yIGRpc2Vhc2UgbW9kZWxzDQorCQkJCQkJCQlteURlbHRhLnNldENvdW50KG15RGVsdGEuZ2V0Q291bnQoKStlbnRyeS5nZXRDb3VudCgpKTsNCisJCQkJCQkJCW15RGVsdGEuc2V0QmlydGhzKG15RGVsdGEuZ2V0QmlydGhzKCkrZW50cnkuZ2V0Q291bnQoKSk7DQorCQkJCQkJCX0NCisJCQkJCQl9DQorCQkJCQl9DQorCQkJCQkvLyBEZXBhcnR1cmVzIGFyZSBkZWF0aHMgDQorCQkJCQlpZihkZXBhcnR1cmVzICE9IG51bGwpIHsNCisJCQkJCQkvL2ZvcihOb2RlIG4yOmRlcGFydHVyZXMua2V5U2V0KCkpIHsNCisJCQkJCQlmb3IgKEV4Y2hhbmdlIGVudHJ5IDogZGVwYXJ0dXJlcykgew0KKwkJCQkJCQlpZihlbnRyeS5nZXRUeXBlKCkgPT0gRXhjaGFuZ2VUeXBlLkJJUlRIU19BTkRfREVBVEhTKSB7Ly8gT25seSB0aGUgbG9jYWwgbm9kZSBtYWtlcyBzZW5zZSBmb3IgZGlzZWFzZSBtb2RlbHMNCisJCQkJCQkJCW15RGVsdGEuc2V0Q291bnQobXlEZWx0YS5nZXRDb3VudCgpIC0gZW50cnkuZ2V0Q291bnQoKSk7DQorCQkJCQkJCQlteURlbHRhLnNldERlYXRocyhteURlbHRhLmdldERlYXRocygpK2VudHJ5LmdldENvdW50KCkpOw0KKwkJCQkJCQl9DQorCQkJCQkJfQ0KKwkJCQkJfQ0KKw0KKwkJCQl9DQorCQkJfQ0KKw0KKwkJfQ0KKwl9DQorCQ0KKwlwcm90ZWN0ZWQgdm9pZCBoYW5kbGVNaWdyYXRpb24oU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxMYWJlbEltcGwgbGFiZWwsIEVMaXN0PEV4Y2hhbmdlPmFycml2YWxzLEVMaXN0PEV4Y2hhbmdlPmRlcGFydHVyZXMsIGxvbmcgdGltZXBlcmlvZCwgbG9uZyB0aW1lRGVsdGEsIFN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWxWYWx1ZUltcGwgZGVsdGEpIHsNCisJCU5vZGUgbiA9IChOb2RlKWxhYmVsLmdldElkZW50aWZpYWJsZSgpOw0KKwkJDQorCQlmb3IoRWRnZSBlOm4uZ2V0RWRnZXMoKSkgew0KKwkJCWlmKGUgaW5zdGFuY2VvZiBNaWdyYXRpb25FZGdlKSB7DQorCQkJCU1pZ3JhdGlvbkVkZ2UgbWUgPSAoTWlncmF0aW9uRWRnZSllOw0KKwkJCQlpZighbWUuZ2V0UG9wdWxhdGlvbklkZW50aWZpZXIoKS5lcXVhbHModGhpcy5nZXRQb3B1bGF0aW9uSWRlbnRpZmllcigpKSkgY29udGludWU7DQorCQkJCQ0KKwkJCQkvLyBNaWdyYXRpb24gaXMgRlJPTSBBIFRPIEINCisJCQkJTm9kZSBzb3VyY2UgPSBtZS5nZXRBKCk7DQorCQkJCU5vZGUgZGVzdCA9IG1lLmdldEIoKTsNCisJCQkJDQorCQkJDQorCQkJCQ0KKwkJCQlib29sZWFuIGxlYXZpbmcgPSBzb3VyY2UuZXF1YWxzKG4pOw0KKwkJCQlkb3VibGUgcmF0ZSA9IG1lLmdldExhYmVsKCkuZ2V0Q3VycmVudFZhbHVlKCkuZ2V0TWlncmF0aW9uUmF0ZSgpOwkJCQkNCisJCQkJaWYobGVhdmluZykgew0KKwkJCQkJU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxMYWJlbFZhbHVlIHZhbCA9ICgoU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxMYWJlbFZhbHVlKSBsYWJlbC5nZXRUZW1wVmFsdWUoKSk7IC8vIFNob3VsZCBiZSBwcm9iZSB2YWx1ZQ0KKwkJCQkJZG91YmxlIGNvdW50ID0gdmFsLmdldENvdW50KCk7DQorCQkJCQlkb3VibGUgZ29vZGJ5ZSA9IGNvdW50KnJhdGUqKGRvdWJsZSl0aW1lRGVsdGEvKGRvdWJsZSl0aW1lcGVyaW9kOyAvLyByZXNjYWxlIGFuZCBhZGp1c3QNCisJCQkJCWRlbHRhLnNldENvdW50KGRlbHRhLmdldENvdW50KCktZ29vZGJ5ZSk7DQorCQkJCQkNCisJCQkJCUV4Y2hhbmdlIG1pZ3JhdGlvbkV4Y2hhbmdlID0gR3JhcGhGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVFeGNoYW5nZSgpOw0KKwkJCQkJTGFiZWwgb3RoZXJMYWJlbCA9IG51bGw7DQorCQkJCQkNCisJCQkJCWZvciAoTGFiZWwgbGFiIDogZGVzdC5nZXRMYWJlbHMoKSkgew0KKwkJCQkJCWlmIChsYWIgaW5zdGFuY2VvZiBTdGFuZGFyZFBvcHVsYXRpb25Nb2RlbExhYmVsICYmICgoU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxMYWJlbClsYWIpLmdldFBvcHVsYXRpb25JZGVudGlmaWVyKCkuZXF1YWxzKGxhYmVsLmdldFBvcHVsYXRpb25JZGVudGlmaWVyKCkpKSB7DQorCQkJCQkJCW90aGVyTGFiZWwgPSBsYWI7DQorCQkJCQkJCWJyZWFrOw0KKwkJCQkJCX0NCisJCQkJCX0NCisJCQkJCQ0KKwkJCQkJaWYob3RoZXJMYWJlbCA9PSBudWxsKSB7DQorCQkJCQkJQWN0aXZhdG9yLmxvZ0Vycm9yKCJGb3VuZCBhIG1pZ3JhdGlvbiBlZGdlIGJ1dCB3YXMgbm90IGFibGUgdG8gZmluZCB0aGUgcG9wdWxhdGlvbiBtb2RlbCBsYWJlbCBmb3Igbm9kZSAiK2Rlc3QrIiBwb3B1bGF0aW9uICIrbGFiZWwuZ2V0UG9wdWxhdGlvbklkZW50aWZpZXIoKSwgbmV3IEV4Y2VwdGlvbigpKTsNCisJCQkJCQlyZXR1cm47DQorCQkJCQl9DQorCQkJCQkNCisJCQkJCW1pZ3JhdGlvbkV4Y2hhbmdlLnNldFR5cGUoRXhjaGFuZ2VUeXBlLk1JR1JBVElPTik7DQorCQkJCQltaWdyYXRpb25FeGNoYW5nZS5zZXRPdGhlckxhYmVsKG90aGVyTGFiZWwpOw0KKwkJCQkJbWlncmF0aW9uRXhjaGFuZ2Uuc2V0Q291bnQoZ29vZGJ5ZSk7DQorCQkJCQlkZWx0YS5nZXREZXBhcnR1cmVzKCkuYWRkKG1pZ3JhdGlvbkV4Y2hhbmdlKTsNCisJCQkJfSBlbHNlIHsNCisJCQkJCS8vIEZpbmQgdGhlIHBvcHVsYXRpb24gbW9kZWwgbGFiZWwgb24gdGhlIGRlc3Qgbm9kZQ0KKwkJCQkJU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxMYWJlbFZhbHVlIG90aGVyVmFsID0gbnVsbDsNCisJCQkJCUxhYmVsIG90aGVyTGFiZWwgPSBudWxsOw0KKwkJCQkJZm9yKE5vZGVMYWJlbCBsYWI6c291cmNlLmdldExhYmVscygpKSB7DQorCQkJCQkJaWYobGFiIGluc3RhbmNlb2YgU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxMYWJlbCAmJiAoKFN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWwpbGFiKS5nZXRQb3B1bGF0aW9uSWRlbnRpZmllcigpLmVxdWFscyhsYWJlbC5nZXRQb3B1bGF0aW9uSWRlbnRpZmllcigpKSkgew0KKwkJCQkJCQlvdGhlclZhbCA9IChTdGFuZGFyZFBvcHVsYXRpb25Nb2RlbExhYmVsVmFsdWUpKChTdGFuZGFyZFBvcHVsYXRpb25Nb2RlbExhYmVsKWxhYikuZ2V0VGVtcFZhbHVlKCk7DQorCQkJCQkJCW90aGVyTGFiZWwgPSBsYWI7DQorCQkJCQkJCWJyZWFrOw0KKwkJCQkJCX0NCisJCQkJCX0NCisJCQkJCWlmKG90aGVyVmFsID09IG51bGwpIHsNCisJCQkJCQlBY3RpdmF0b3IubG9nRXJyb3IoIkZvdW5kIGEgbWlncmF0aW9uIGVkZ2UgYnV0IHdhcyBub3QgYWJsZSB0byBmaW5kIHRoZSBwb3B1bGF0aW9uIG1vZGVsIGxhYmVsIGZvciBub2RlICIrZGVzdCsiIHBvcHVsYXRpb24gIitsYWJlbC5nZXRQb3B1bGF0aW9uSWRlbnRpZmllcigpLCBuZXcgRXhjZXB0aW9uKCkpOw0KKwkJCQkJCXJldHVybjsNCisJCQkJCX0NCisJCQkJCWRvdWJsZSBjb3VudCA9IG90aGVyVmFsLmdldENvdW50KCk7DQorCQkJCQlkb3VibGUgd2VsY29tZSA9IGNvdW50KnJhdGUqKGRvdWJsZSl0aW1lRGVsdGEvKGRvdWJsZSl0aW1lcGVyaW9kOyAvLyByZXNjYWxlIGFuZCBhZGp1c3QNCisJCQkJCWRlbHRhLnNldENvdW50KGRlbHRhLmdldENvdW50KCkrd2VsY29tZSk7DQorCQkJCQkNCisJCQkJCUV4Y2hhbmdlIG1pZ3JhdGlvbkV4Y2hhbmdlID0gR3JhcGhGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVFeGNoYW5nZSgpOw0KKwkJCQkJDQorCQkJCQltaWdyYXRpb25FeGNoYW5nZS5zZXRUeXBlKEV4Y2hhbmdlVHlwZS5NSUdSQVRJT04pOw0KKwkJCQkJbWlncmF0aW9uRXhjaGFuZ2Uuc2V0T3RoZXJMYWJlbChvdGhlckxhYmVsKTsNCisJCQkJCW1pZ3JhdGlvbkV4Y2hhbmdlLnNldENvdW50KHdlbGNvbWUpOw0KKwkJCQkJZGVsdGEuZ2V0QXJyaXZhbHMoKS5hZGQobWlncmF0aW9uRXhjaGFuZ2UpOw0KKwkJCQl9DQorCQkJfQ0KKwkJfQ0KKwl9DQorCQ0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogDQorCSAqIEByZXR1cm4NCisJICogDQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkIE5PVA0KKwkgKi8NCisJcHVibGljIGFic3RyYWN0IFBvcHVsYXRpb25Nb2RlbExhYmVsIGNyZWF0ZVBvcHVsYXRpb25MYWJlbCgpOw0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQgTk9UDQorCSAqLw0KKwlwdWJsaWMgYWJzdHJhY3QgUG9wdWxhdGlvbk1vZGVsTGFiZWxWYWx1ZSBjcmVhdGVQb3B1bGF0aW9uTGFiZWxWYWx1ZSgpOw0KKwkNCisJDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJQE92ZXJyaWRlDQorCXB1YmxpYyBPYmplY3QgZUdldChpbnQgZmVhdHVyZUlELCBib29sZWFuIHJlc29sdmUsIGJvb2xlYW4gY29yZVR5cGUpIHsNCisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7DQorCQkJY2FzZSBTdGFuZGFyZFBhY2thZ2UuUE9QVUxBVElPTl9NT0RFTF9fUE9QVUxBVElPTl9JREVOVElGSUVSOg0KKwkJCQlyZXR1cm4gZ2V0UG9wdWxhdGlvbklkZW50aWZpZXIoKTsNCisJCQljYXNlIFN0YW5kYXJkUGFja2FnZS5QT1BVTEFUSU9OX01PREVMX19OQU1FOg0KKwkJCQlyZXR1cm4gZ2V0TmFtZSgpOw0KKwkJCWNhc2UgU3RhbmRhcmRQYWNrYWdlLlBPUFVMQVRJT05fTU9ERUxfX1RBUkdFVF9JU09fS0VZOg0KKwkJCQlyZXR1cm4gZ2V0VGFyZ2V0SVNPS2V5KCk7DQorCQl9DQorCQlyZXR1cm4gc3VwZXIuZUdldChmZWF0dXJlSUQsIHJlc29sdmUsIGNvcmVUeXBlKTsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCUBPdmVycmlkZQ0KKwlwdWJsaWMgdm9pZCBlU2V0KGludCBmZWF0dXJlSUQsIE9iamVjdCBuZXdWYWx1ZSkgew0KKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsNCisJCQljYXNlIFN0YW5kYXJkUGFja2FnZS5QT1BVTEFUSU9OX01PREVMX19QT1BVTEFUSU9OX0lERU5USUZJRVI6DQorCQkJCXNldFBvcHVsYXRpb25JZGVudGlmaWVyKChTdHJpbmcpbmV3VmFsdWUpOw0KKwkJCQlyZXR1cm47DQorCQkJY2FzZSBTdGFuZGFyZFBhY2thZ2UuUE9QVUxBVElPTl9NT0RFTF9fTkFNRToNCisJCQkJc2V0TmFtZSgoU3RyaW5nKW5ld1ZhbHVlKTsNCisJCQkJcmV0dXJuOw0KKwkJCWNhc2UgU3RhbmRhcmRQYWNrYWdlLlBPUFVMQVRJT05fTU9ERUxfX1RBUkdFVF9JU09fS0VZOg0KKwkJCQlzZXRUYXJnZXRJU09LZXkoKFN0cmluZyluZXdWYWx1ZSk7DQorCQkJCXJldHVybjsNCisJCX0NCisJCXN1cGVyLmVTZXQoZmVhdHVyZUlELCBuZXdWYWx1ZSk7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlAT3ZlcnJpZGUNCisJcHVibGljIHZvaWQgZVVuc2V0KGludCBmZWF0dXJlSUQpIHsNCisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7DQorCQkJY2FzZSBTdGFuZGFyZFBhY2thZ2UuUE9QVUxBVElPTl9NT0RFTF9fUE9QVUxBVElPTl9JREVOVElGSUVSOg0KKwkJCQlzZXRQb3B1bGF0aW9uSWRlbnRpZmllcihQT1BVTEFUSU9OX0lERU5USUZJRVJfRURFRkFVTFQpOw0KKwkJCQlyZXR1cm47DQorCQkJY2FzZSBTdGFuZGFyZFBhY2thZ2UuUE9QVUxBVElPTl9NT0RFTF9fTkFNRToNCisJCQkJc2V0TmFtZShOQU1FX0VERUZBVUxUKTsNCisJCQkJcmV0dXJuOw0KKwkJCWNhc2UgU3RhbmRhcmRQYWNrYWdlLlBPUFVMQVRJT05fTU9ERUxfX1RBUkdFVF9JU09fS0VZOg0KKwkJCQlzZXRUYXJnZXRJU09LZXkoVEFSR0VUX0lTT19LRVlfRURFRkFVTFQpOw0KKwkJCQlyZXR1cm47DQorCQl9DQorCQlzdXBlci5lVW5zZXQoZmVhdHVyZUlEKTsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCUBPdmVycmlkZQ0KKwlwdWJsaWMgYm9vbGVhbiBlSXNTZXQoaW50IGZlYXR1cmVJRCkgew0KKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsNCisJCQljYXNlIFN0YW5kYXJkUGFja2FnZS5QT1BVTEFUSU9OX01PREVMX19QT1BVTEFUSU9OX0lERU5USUZJRVI6DQorCQkJCXJldHVybiBQT1BVTEFUSU9OX0lERU5USUZJRVJfRURFRkFVTFQgPT0gbnVsbCA/IHBvcHVsYXRpb25JZGVudGlmaWVyICE9IG51bGwgOiAhUE9QVUxBVElPTl9JREVOVElGSUVSX0VERUZBVUxULmVxdWFscyhwb3B1bGF0aW9uSWRlbnRpZmllcik7DQorCQkJY2FzZSBTdGFuZGFyZFBhY2thZ2UuUE9QVUxBVElPTl9NT0RFTF9fTkFNRToNCisJCQkJcmV0dXJuIE5BTUVfRURFRkFVTFQgPT0gbnVsbCA/IG5hbWUgIT0gbnVsbCA6ICFOQU1FX0VERUZBVUxULmVxdWFscyhuYW1lKTsNCisJCQljYXNlIFN0YW5kYXJkUGFja2FnZS5QT1BVTEFUSU9OX01PREVMX19UQVJHRVRfSVNPX0tFWToNCisJCQkJcmV0dXJuIFRBUkdFVF9JU09fS0VZX0VERUZBVUxUID09IG51bGwgPyB0YXJnZXRJU09LZXkgIT0gbnVsbCA6ICFUQVJHRVRfSVNPX0tFWV9FREVGQVVMVC5lcXVhbHModGFyZ2V0SVNPS2V5KTsNCisJCX0NCisJCXJldHVybiBzdXBlci5lSXNTZXQoZmVhdHVyZUlEKTsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCUBPdmVycmlkZQ0KKwlwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkgew0KKwkJaWYgKGVJc1Byb3h5KCkpIHJldHVybiBzdXBlci50b1N0cmluZygpOw0KKw0KKwkJU3RyaW5nQnVmZmVyIHJlc3VsdCA9IG5ldyBTdHJpbmdCdWZmZXIoc3VwZXIudG9TdHJpbmcoKSk7DQorCQlyZXN1bHQuYXBwZW5kKCIgKHBvcHVsYXRpb25JZGVudGlmaWVyOiAiKTsNCisJCXJlc3VsdC5hcHBlbmQocG9wdWxhdGlvbklkZW50aWZpZXIpOw0KKwkJcmVzdWx0LmFwcGVuZCgiLCBuYW1lOiAiKTsNCisJCXJlc3VsdC5hcHBlbmQobmFtZSk7DQorCQlyZXN1bHQuYXBwZW5kKCIsIHRhcmdldElTT0tleTogIik7DQorCQlyZXN1bHQuYXBwZW5kKHRhcmdldElTT0tleSk7DQorCQlyZXN1bHQuYXBwZW5kKCcpJyk7DQorCQlyZXR1cm4gcmVzdWx0LnRvU3RyaW5nKCk7DQorCX0NCisNCit9IC8vUG9wdWxhdGlvbk1vZGVsSW1wbA0KZGlmZiAtLWdpdCBhL21vZGVscy9wb3B1bGF0aW9ucy9vcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vcG9wdWxhdGlvbm1vZGVscy9zdGFuZGFyZC9pbXBsL1BvcHVsYXRpb25Nb2RlbExhYmVsSW1wbC5qYXZhIGIvbW9kZWxzL3BvcHVsYXRpb25zL29yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9wb3B1bGF0aW9ubW9kZWxzL3N0YW5kYXJkL2ltcGwvUG9wdWxhdGlvbk1vZGVsTGFiZWxJbXBsLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjAyNzYyNwotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9wb3B1bGF0aW9ucy9vcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vcG9wdWxhdGlvbm1vZGVscy9zdGFuZGFyZC9pbXBsL1BvcHVsYXRpb25Nb2RlbExhYmVsSW1wbC5qYXZhCkBAIC0wLDAgKzEsMjM0IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5pbXBsOw0KKw0KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorICogQ29weXJpZ2h0IChjKSAyMDA5IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLg0KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMNCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjANCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdA0KKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sDQorICoNCisgKiBDb250cmlidXRvcnM6DQorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbg0KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KKw0KKw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb247DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5JbnRlcm5hbEVPYmplY3Q7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5pbXBsLkVOb3RpZmljYXRpb25JbXBsOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguaW1wbC5JbnRlZ3JhdGlvbkxhYmVsSW1wbDsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmltcGwuRHluYW1pY05vZGVMYWJlbEltcGw7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLlBvcHVsYXRpb25MYWJlbDsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLlBvcHVsYXRpb25Nb2RlbExhYmVsOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmRQYWNrYWdlOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxMYWJlbFZhbHVlOw0KKw0KKy8qKg0KKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorICogQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPlBvcHVsYXRpb24gTW9kZWwgTGFiZWw8L2I+PC9lbT4nLg0KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKyAqIDxwPg0KKyAqIFRoZSBmb2xsb3dpbmcgZmVhdHVyZXMgYXJlIGltcGxlbWVudGVkOg0KKyAqIDx1bD4NCisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLmltcGwuUG9wdWxhdGlvbk1vZGVsTGFiZWxJbXBsI2dldFBvcHVsYXRpb25MYWJlbCA8ZW0+UG9wdWxhdGlvbiBMYWJlbDwvZW0+fTwvbGk+DQorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5pbXBsLlBvcHVsYXRpb25Nb2RlbExhYmVsSW1wbCNnZXRQb3B1bGF0aW9uSWRlbnRpZmllciA8ZW0+UG9wdWxhdGlvbiBJZGVudGlmaWVyPC9lbT59PC9saT4NCisgKiA8L3VsPg0KKyAqIDwvcD4NCisgKg0KKyAqIEBnZW5lcmF0ZWQNCisgKi8NCitwdWJsaWMgY2xhc3MgUG9wdWxhdGlvbk1vZGVsTGFiZWxJbXBsIGV4dGVuZHMgSW50ZWdyYXRpb25MYWJlbEltcGwgaW1wbGVtZW50cyBQb3B1bGF0aW9uTW9kZWxMYWJlbCB7DQorCS8qKg0KKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRQb3B1bGF0aW9uTGFiZWwoKSA8ZW0+UG9wdWxhdGlvbiBMYWJlbDwvZW0+fScgcmVmZXJlbmNlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHNlZSAjZ2V0UG9wdWxhdGlvbkxhYmVsKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJcHJvdGVjdGVkIFBvcHVsYXRpb25MYWJlbCBwb3B1bGF0aW9uTGFiZWw7DQorDQorCS8qKg0KKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0UG9wdWxhdGlvbklkZW50aWZpZXIoKSA8ZW0+UG9wdWxhdGlvbiBJZGVudGlmaWVyPC9lbT59JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAc2VlICNnZXRQb3B1bGF0aW9uSWRlbnRpZmllcigpDQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgU3RyaW5nIFBPUFVMQVRJT05fSURFTlRJRklFUl9FREVGQVVMVCA9IG51bGw7DQorCS8qKg0KKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRQb3B1bGF0aW9uSWRlbnRpZmllcigpIDxlbT5Qb3B1bGF0aW9uIElkZW50aWZpZXI8L2VtPn0nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBzZWUgI2dldFBvcHVsYXRpb25JZGVudGlmaWVyKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJcHJvdGVjdGVkIFN0cmluZyBwb3B1bGF0aW9uSWRlbnRpZmllciA9IFBPUFVMQVRJT05fSURFTlRJRklFUl9FREVGQVVMVDsNCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgUG9wdWxhdGlvbk1vZGVsTGFiZWxJbXBsKCkgew0KKwkJc3VwZXIoKTsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCUBPdmVycmlkZQ0KKwlwcm90ZWN0ZWQgRUNsYXNzIGVTdGF0aWNDbGFzcygpIHsNCisJCXJldHVybiBTdGFuZGFyZFBhY2thZ2UuTGl0ZXJhbHMuUE9QVUxBVElPTl9NT0RFTF9MQUJFTDsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBQb3B1bGF0aW9uTGFiZWwgZ2V0UG9wdWxhdGlvbkxhYmVsKCkgew0KKwkJaWYgKHBvcHVsYXRpb25MYWJlbCAhPSBudWxsICYmIHBvcHVsYXRpb25MYWJlbC5lSXNQcm94eSgpKSB7DQorCQkJSW50ZXJuYWxFT2JqZWN0IG9sZFBvcHVsYXRpb25MYWJlbCA9IChJbnRlcm5hbEVPYmplY3QpcG9wdWxhdGlvbkxhYmVsOw0KKwkJCXBvcHVsYXRpb25MYWJlbCA9IChQb3B1bGF0aW9uTGFiZWwpZVJlc29sdmVQcm94eShvbGRQb3B1bGF0aW9uTGFiZWwpOw0KKwkJCWlmIChwb3B1bGF0aW9uTGFiZWwgIT0gb2xkUG9wdWxhdGlvbkxhYmVsKSB7DQorCQkJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkNCisJCQkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5SRVNPTFZFLCBTdGFuZGFyZFBhY2thZ2UuUE9QVUxBVElPTl9NT0RFTF9MQUJFTF9fUE9QVUxBVElPTl9MQUJFTCwgb2xkUG9wdWxhdGlvbkxhYmVsLCBwb3B1bGF0aW9uTGFiZWwpKTsNCisJCQl9DQorCQl9DQorCQlyZXR1cm4gcG9wdWxhdGlvbkxhYmVsOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIFBvcHVsYXRpb25MYWJlbCBiYXNpY0dldFBvcHVsYXRpb25MYWJlbCgpIHsNCisJCXJldHVybiBwb3B1bGF0aW9uTGFiZWw7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgdm9pZCBzZXRQb3B1bGF0aW9uTGFiZWwoUG9wdWxhdGlvbkxhYmVsIG5ld1BvcHVsYXRpb25MYWJlbCkgew0KKwkJUG9wdWxhdGlvbkxhYmVsIG9sZFBvcHVsYXRpb25MYWJlbCA9IHBvcHVsYXRpb25MYWJlbDsNCisJCXBvcHVsYXRpb25MYWJlbCA9IG5ld1BvcHVsYXRpb25MYWJlbDsNCisJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkNCisJCQllTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBTdGFuZGFyZFBhY2thZ2UuUE9QVUxBVElPTl9NT0RFTF9MQUJFTF9fUE9QVUxBVElPTl9MQUJFTCwgb2xkUG9wdWxhdGlvbkxhYmVsLCBwb3B1bGF0aW9uTGFiZWwpKTsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBTdHJpbmcgZ2V0UG9wdWxhdGlvbklkZW50aWZpZXIoKSB7DQorCQlyZXR1cm4gcG9wdWxhdGlvbklkZW50aWZpZXI7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgdm9pZCBzZXRQb3B1bGF0aW9uSWRlbnRpZmllcihTdHJpbmcgbmV3UG9wdWxhdGlvbklkZW50aWZpZXIpIHsNCisJCVN0cmluZyBvbGRQb3B1bGF0aW9uSWRlbnRpZmllciA9IHBvcHVsYXRpb25JZGVudGlmaWVyOw0KKwkJcG9wdWxhdGlvbklkZW50aWZpZXIgPSBuZXdQb3B1bGF0aW9uSWRlbnRpZmllcjsNCisJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkNCisJCQllTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBTdGFuZGFyZFBhY2thZ2UuUE9QVUxBVElPTl9NT0RFTF9MQUJFTF9fUE9QVUxBVElPTl9JREVOVElGSUVSLCBvbGRQb3B1bGF0aW9uSWRlbnRpZmllciwgcG9wdWxhdGlvbklkZW50aWZpZXIpKTsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCUBPdmVycmlkZQ0KKwlwdWJsaWMgT2JqZWN0IGVHZXQoaW50IGZlYXR1cmVJRCwgYm9vbGVhbiByZXNvbHZlLCBib29sZWFuIGNvcmVUeXBlKSB7DQorCQlzd2l0Y2ggKGZlYXR1cmVJRCkgew0KKwkJCWNhc2UgU3RhbmRhcmRQYWNrYWdlLlBPUFVMQVRJT05fTU9ERUxfTEFCRUxfX1BPUFVMQVRJT05fTEFCRUw6DQorCQkJCWlmIChyZXNvbHZlKSByZXR1cm4gZ2V0UG9wdWxhdGlvbkxhYmVsKCk7DQorCQkJCXJldHVybiBiYXNpY0dldFBvcHVsYXRpb25MYWJlbCgpOw0KKwkJCWNhc2UgU3RhbmRhcmRQYWNrYWdlLlBPUFVMQVRJT05fTU9ERUxfTEFCRUxfX1BPUFVMQVRJT05fSURFTlRJRklFUjoNCisJCQkJcmV0dXJuIGdldFBvcHVsYXRpb25JZGVudGlmaWVyKCk7DQorCQl9DQorCQlyZXR1cm4gc3VwZXIuZUdldChmZWF0dXJlSUQsIHJlc29sdmUsIGNvcmVUeXBlKTsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCUBPdmVycmlkZQ0KKwlwdWJsaWMgdm9pZCBlU2V0KGludCBmZWF0dXJlSUQsIE9iamVjdCBuZXdWYWx1ZSkgew0KKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsNCisJCQljYXNlIFN0YW5kYXJkUGFja2FnZS5QT1BVTEFUSU9OX01PREVMX0xBQkVMX19QT1BVTEFUSU9OX0xBQkVMOg0KKwkJCQlzZXRQb3B1bGF0aW9uTGFiZWwoKFBvcHVsYXRpb25MYWJlbCluZXdWYWx1ZSk7DQorCQkJCXJldHVybjsNCisJCQljYXNlIFN0YW5kYXJkUGFja2FnZS5QT1BVTEFUSU9OX01PREVMX0xBQkVMX19QT1BVTEFUSU9OX0lERU5USUZJRVI6DQorCQkJCXNldFBvcHVsYXRpb25JZGVudGlmaWVyKChTdHJpbmcpbmV3VmFsdWUpOw0KKwkJCQlyZXR1cm47DQorCQl9DQorCQlzdXBlci5lU2V0KGZlYXR1cmVJRCwgbmV3VmFsdWUpOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJQE92ZXJyaWRlDQorCXB1YmxpYyB2b2lkIGVVbnNldChpbnQgZmVhdHVyZUlEKSB7DQorCQlzd2l0Y2ggKGZlYXR1cmVJRCkgew0KKwkJCWNhc2UgU3RhbmRhcmRQYWNrYWdlLlBPUFVMQVRJT05fTU9ERUxfTEFCRUxfX1BPUFVMQVRJT05fTEFCRUw6DQorCQkJCXNldFBvcHVsYXRpb25MYWJlbCgoUG9wdWxhdGlvbkxhYmVsKW51bGwpOw0KKwkJCQlyZXR1cm47DQorCQkJY2FzZSBTdGFuZGFyZFBhY2thZ2UuUE9QVUxBVElPTl9NT0RFTF9MQUJFTF9fUE9QVUxBVElPTl9JREVOVElGSUVSOg0KKwkJCQlzZXRQb3B1bGF0aW9uSWRlbnRpZmllcihQT1BVTEFUSU9OX0lERU5USUZJRVJfRURFRkFVTFQpOw0KKwkJCQlyZXR1cm47DQorCQl9DQorCQlzdXBlci5lVW5zZXQoZmVhdHVyZUlEKTsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCUBPdmVycmlkZQ0KKwlwdWJsaWMgYm9vbGVhbiBlSXNTZXQoaW50IGZlYXR1cmVJRCkgew0KKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsNCisJCQljYXNlIFN0YW5kYXJkUGFja2FnZS5QT1BVTEFUSU9OX01PREVMX0xBQkVMX19QT1BVTEFUSU9OX0xBQkVMOg0KKwkJCQlyZXR1cm4gcG9wdWxhdGlvbkxhYmVsICE9IG51bGw7DQorCQkJY2FzZSBTdGFuZGFyZFBhY2thZ2UuUE9QVUxBVElPTl9NT0RFTF9MQUJFTF9fUE9QVUxBVElPTl9JREVOVElGSUVSOg0KKwkJCQlyZXR1cm4gUE9QVUxBVElPTl9JREVOVElGSUVSX0VERUZBVUxUID09IG51bGwgPyBwb3B1bGF0aW9uSWRlbnRpZmllciAhPSBudWxsIDogIVBPUFVMQVRJT05fSURFTlRJRklFUl9FREVGQVVMVC5lcXVhbHMocG9wdWxhdGlvbklkZW50aWZpZXIpOw0KKwkJfQ0KKwkJcmV0dXJuIHN1cGVyLmVJc1NldChmZWF0dXJlSUQpOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZCBOT1QNCisJICovDQorCUBPdmVycmlkZQ0KKwlwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkgew0KKwkJaWYgKGVJc1Byb3h5KCkpIHJldHVybiBzdXBlci50b1N0cmluZygpOw0KKw0KKwkJU3RyaW5nQnVmZmVyIHJlc3VsdCA9IG5ldyBTdHJpbmdCdWZmZXIoDQorCQkJCWdldFBvcHVsYXRpb25JZGVudGlmaWVyKCkgPT0gbnVsbCA/ICJudWxsIiA6IGdldFBvcHVsYXRpb25JZGVudGlmaWVyKCkpOw0KKwkJcmVzdWx0LmFwcGVuZCgiIFsiKTsNCisJCXJlc3VsdC5hcHBlbmQoTWF0aC5mbG9vcigoKFN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWxWYWx1ZSlnZXRDdXJyZW50VmFsdWUoKSkuZ2V0Q291bnQoKSkpOw0KKwkJcmVzdWx0LmFwcGVuZCgiXSIpOw0KKwkJcmV0dXJuIHJlc3VsdC50b1N0cmluZygpOw0KKwl9DQorDQorfSAvL1BvcHVsYXRpb25Nb2RlbExhYmVsSW1wbA0KZGlmZiAtLWdpdCBhL21vZGVscy9wb3B1bGF0aW9ucy9vcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vcG9wdWxhdGlvbm1vZGVscy9zdGFuZGFyZC9pbXBsL1BvcHVsYXRpb25Nb2RlbExhYmVsVmFsdWVJbXBsLmphdmEgYi9tb2RlbHMvcG9wdWxhdGlvbnMvb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3BvcHVsYXRpb25tb2RlbHMvc3RhbmRhcmQvaW1wbC9Qb3B1bGF0aW9uTW9kZWxMYWJlbFZhbHVlSW1wbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU4MzYyYWEKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvcG9wdWxhdGlvbnMvb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3BvcHVsYXRpb25tb2RlbHMvc3RhbmRhcmQvaW1wbC9Qb3B1bGF0aW9uTW9kZWxMYWJlbFZhbHVlSW1wbC5qYXZhCkBAIC0wLDAgKzEsNDkgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLmltcGw7DQorDQorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisgKiBDb3B5cmlnaHQgKGMpIDIwMDkgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuDQorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscw0KKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMA0KKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0DQorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwNCisgKg0KKyAqIENvbnRyaWJ1dG9yczoNCisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uDQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQorDQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5pbXBsLkludGVncmF0aW9uTGFiZWxWYWx1ZUltcGw7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5pbXBsLkxhYmVsVmFsdWVJbXBsOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuUG9wdWxhdGlvbk1vZGVsTGFiZWxWYWx1ZTsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkUGFja2FnZTsNCisNCisvKioNCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKyAqIEFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5Qb3B1bGF0aW9uIE1vZGVsIExhYmVsIFZhbHVlPC9iPjwvZW0+Jy4NCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisgKiA8cD4NCisgKiA8L3A+DQorICoNCisgKiBAZ2VuZXJhdGVkDQorICovDQorcHVibGljIGNsYXNzIFBvcHVsYXRpb25Nb2RlbExhYmVsVmFsdWVJbXBsIGV4dGVuZHMgSW50ZWdyYXRpb25MYWJlbFZhbHVlSW1wbCBpbXBsZW1lbnRzIFBvcHVsYXRpb25Nb2RlbExhYmVsVmFsdWUgew0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCBQb3B1bGF0aW9uTW9kZWxMYWJlbFZhbHVlSW1wbCgpIHsNCisJCXN1cGVyKCk7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlAT3ZlcnJpZGUNCisJcHJvdGVjdGVkIEVDbGFzcyBlU3RhdGljQ2xhc3MoKSB7DQorCQlyZXR1cm4gU3RhbmRhcmRQYWNrYWdlLkxpdGVyYWxzLlBPUFVMQVRJT05fTU9ERUxfTEFCRUxfVkFMVUU7DQorCX0NCisNCit9IC8vUG9wdWxhdGlvbk1vZGVsTGFiZWxWYWx1ZUltcGwNCmRpZmYgLS1naXQgYS9tb2RlbHMvcG9wdWxhdGlvbnMvb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3BvcHVsYXRpb25tb2RlbHMvc3RhbmRhcmQvaW1wbC9TZWFzb25hbFBvcHVsYXRpb25Nb2RlbEltcGwuamF2YSBiL21vZGVscy9wb3B1bGF0aW9ucy9vcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vcG9wdWxhdGlvbm1vZGVscy9zdGFuZGFyZC9pbXBsL1NlYXNvbmFsUG9wdWxhdGlvbk1vZGVsSW1wbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU5ZGYzMjAKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvcG9wdWxhdGlvbnMvb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3BvcHVsYXRpb25tb2RlbHMvc3RhbmRhcmQvaW1wbC9TZWFzb25hbFBvcHVsYXRpb25Nb2RlbEltcGwuamF2YQpAQCAtMCwwICsxLDUwNiBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuaW1wbDsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogCisgKiBDb3B5cmlnaHQgKGMpIDIwMTEgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuIAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyAKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0IAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwgCisgKiAKKyAqIENvbnRyaWJ1dG9yczogCisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuRUNvbGxlY3Rpb25zOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5FTGlzdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5pbXBsLkVOb3RpZmljYXRpb25JbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5EeW5hbWljTGFiZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkV4Y2hhbmdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5FeGNoYW5nZVR5cGU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkdyYXBoRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguTm9kZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuU1RFTVRpbWU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS5jZW50ZXJzLkdlb2dyYXBoaWNDZW50ZXJzOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuYWRhcHRlcnMuc3BhdGlhbC5nZW8uTGF0TG9uZ1Byb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuYWRhcHRlcnMuc3BhdGlhbC5nZW8uTGF0TG9uZ1Byb3ZpZGVyQWRhcHRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmFkYXB0ZXJzLnNwYXRpYWwuZ2VvLkxhdExvbmdQcm92aWRlckFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubm9kZXMuaW1wbC5SZWdpb25JbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5BY3RpdmF0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLlNlYXNvbmFsUG9wdWxhdGlvbk1vZGVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZFBhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWxWYWx1ZTsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPlNlYXNvbmFsIFBvcHVsYXRpb24gTW9kZWw8L2I+PC9lbT4nLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiA8cD4KKyAqIFRoZSBmb2xsb3dpbmcgZmVhdHVyZXMgYXJlIGltcGxlbWVudGVkOgorICogPHVsPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5pbXBsLlNlYXNvbmFsUG9wdWxhdGlvbk1vZGVsSW1wbCNnZXRQaGFzZSA8ZW0+UGhhc2U8L2VtPn08L2xpPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5pbXBsLlNlYXNvbmFsUG9wdWxhdGlvbk1vZGVsSW1wbCNnZXRNb2R1bGF0aW9uQW1wbGl0dWRlIDxlbT5Nb2R1bGF0aW9uIEFtcGxpdHVkZTwvZW0+fTwvbGk+CisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLmltcGwuU2Vhc29uYWxQb3B1bGF0aW9uTW9kZWxJbXBsI2dldFBlcmlvZCA8ZW0+UGVyaW9kPC9lbT59PC9saT4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuaW1wbC5TZWFzb25hbFBvcHVsYXRpb25Nb2RlbEltcGwjaXNVc2VMYXRpdHVkZSA8ZW0+VXNlIExhdGl0dWRlPC9lbT59PC9saT4KKyAqIDwvdWw+CisgKiA8L3A+CisgKgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgU2Vhc29uYWxQb3B1bGF0aW9uTW9kZWxJbXBsIGV4dGVuZHMgU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxJbXBsIGltcGxlbWVudHMgU2Vhc29uYWxQb3B1bGF0aW9uTW9kZWwgeworCQorCQorCQorCS8qKgorCSAqIGNvbnN0YW50CisJICovCisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgZG91YmxlIE1JTExJU19QRVJfREFZID0gMTAwMC4wKjYwLjAqNjAuMCoyNC4wOworCQorCS8qKgorCSAqIHRvZG8gbW9kZWwgdGhpcyBpbiBlbWYKKwkgKi8KKwlwcm90ZWN0ZWQgZG91YmxlIHNlYXNvbmFsTW9kdWxhdGlvbkV4cG9uZW50ID0gMi4wOworCQorCS8qKgorCSAqIHRoZSBlcXVhdG9yCisJICovCisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgZG91YmxlIEVRVUFUT1JfTEFUSVRVREUgPSAwLjA7CisJCisJLyoqCisJICogVE9ETyBtb2RlbCB0aGlzIGluIEVNRgorCSAqLworCXByaXZhdGUgc3RhdGljIGZpbmFsIGJvb2xlYW4gVFJPUElDQUxfT05MWSA9IHRydWU7CisJCisJLyoqCisJICogTGF0aXR1ZGUgb2YgdGhlIFRyb3BpYyBvZiBDYW5jZXIgaW4gRGVncmVlcyAoVHJvcGljIG9mIENhcHJpY29ybiBpcyAtdmUgb2YgdGhpcykuCisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBkb3VibGUgVFJPUElDX09GX0NBTkNFUl9MQVRJVFVERSA9IDIzLjQzOTQ0NDsKKworCisJLyoqCisJICogVE9ETyBtb2RlbCB0aGlzIGluIEVNRgorCSAqLworCXByaXZhdGUgc3RhdGljIGZpbmFsIGRvdWJsZSBMQVRJVFVERV9TSUdNT0lEX1dJRFRIID0gNC41OworCQorCQorCS8qKgorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRQaGFzZSgpIDxlbT5QaGFzZTwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZ2V0UGhhc2UoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgZG91YmxlIFBIQVNFX0VERUZBVUxUID0gMC4wOyAvLyBUT0RPIFRoZSBkZWZhdWx0IHZhbHVlIGxpdGVyYWwgIiIgaXMgbm90IHZhbGlkLgorCisJLyoqCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0UGhhc2UoKSA8ZW0+UGhhc2U8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI2dldFBoYXNlKCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgZG91YmxlIHBoYXNlID0gUEhBU0VfRURFRkFVTFQ7CisKKwkvKioKKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0TW9kdWxhdGlvbkFtcGxpdHVkZSgpIDxlbT5Nb2R1bGF0aW9uIEFtcGxpdHVkZTwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZ2V0TW9kdWxhdGlvbkFtcGxpdHVkZSgpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBkb3VibGUgTU9EVUxBVElPTl9BTVBMSVRVREVfRURFRkFVTFQgPSAxLjA7CisKKwkvKioKKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRNb2R1bGF0aW9uQW1wbGl0dWRlKCkgPGVtPk1vZHVsYXRpb24gQW1wbGl0dWRlPC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNnZXRNb2R1bGF0aW9uQW1wbGl0dWRlKCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgZG91YmxlIG1vZHVsYXRpb25BbXBsaXR1ZGUgPSBNT0RVTEFUSU9OX0FNUExJVFVERV9FREVGQVVMVDsKKworCS8qKgorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRQZXJpb2QoKSA8ZW0+UGVyaW9kPC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNnZXRQZXJpb2QoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgZG91YmxlIFBFUklPRF9FREVGQVVMVCA9IDM2NS4yNTsKKwkvKioKKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRQZXJpb2QoKSA8ZW0+UGVyaW9kPC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNnZXRQZXJpb2QoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBkb3VibGUgcGVyaW9kID0gUEVSSU9EX0VERUZBVUxUOworCS8qKgorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSAne0BsaW5rICNpc1VzZUxhdGl0dWRlKCkgPGVtPlVzZSBMYXRpdHVkZTwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjaXNVc2VMYXRpdHVkZSgpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBib29sZWFuIFVTRV9MQVRJVFVERV9FREVGQVVMVCA9IHRydWU7CisKKwkvKioKKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNpc1VzZUxhdGl0dWRlKCkgPGVtPlVzZSBMYXRpdHVkZTwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjaXNVc2VMYXRpdHVkZSgpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIGJvb2xlYW4gdXNlTGF0aXR1ZGUgPSBVU0VfTEFUSVRVREVfRURFRkFVTFQ7CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJcHVibGljIFNlYXNvbmFsUG9wdWxhdGlvbk1vZGVsSW1wbCgpIHsKKwkJc3VwZXIoKTsKKwl9CisJCisJCisJLyoqCisJICogQ29tcHV0ZSB0aGUgY2hhbmdlcyBpbiB0aGUgcG9wdWxhdGlvbiAKKwkgKiBUaGUgYmlydGggcmF0ZSBhbmQgZGVhdGggcmF0ZXMgYXJlIG1vZGlmaWVkIGluIGVhY2ggdGltZSBzdGVwIGJ5IGEgc2Vhc29uYWwgbW9kdWxhdGlvbiBmdW5jdGlvbgorCSAqIFRoZSBiaXJ0aC9kZWF0aCByYXRlcyBhcmUgTk9UIGNvbnN0YW50CisJICogQHBhcmFtIHRpbWUKKwkgKiBAcGFyYW0gdGltZURlbHRhCisJICogQHBhcmFtIGxhYmVscworCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgY2FsY3VsYXRlRGVsdGEoU1RFTVRpbWUgdGltZSwgbG9uZyB0aW1lRGVsdGEsCisJCQlFTGlzdDxEeW5hbWljTGFiZWw+IGxhYmVscykgeworCQkvLyBXZSBzaW1wbHkgY2FsY3VsYXRlIHRoZSBjaGFuZ2UgZnJvbSB0aGUgYmlydGgvZGVhdGggcmF0ZQorCQkvLyBhZGp1c3RlZCBmb3IgdGhlIHRpbWUgcGVyaW9kIHVzZWQgaW4gdGhlIHNpbXVsYXRpb24KKwkJCisJCQorCQlmaW5hbCBkb3VibGUgYWRqdXN0ZWRCaXJ0aFJhdGUgPSBhZGp1c3RSYXRlKHRoaXMuZ2V0QmlydGhSYXRlKCksIHRoaXMuZ2V0VGltZVBlcmlvZCgpLCB0aW1lRGVsdGEpOworCQlmaW5hbCBkb3VibGUgYWRqdXN0ZWREZWF0aFJhdGUgPSBhZGp1c3RSYXRlKHRoaXMuZ2V0RGVhdGhSYXRlKCksIHRoaXMuZ2V0VGltZVBlcmlvZCgpLCB0aW1lRGVsdGEpOworCQlkb3VibGUgbG9jYWxQaGFzZSA9IGdldFBoYXNlKCk7CisJCWZvcihEeW5hbWljTGFiZWwgbGFiZWw6bGFiZWxzKSB7CisJCQkKKwkJCVN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWxJbXBsIHNsYWJlbCA9IChTdGFuZGFyZFBvcHVsYXRpb25Nb2RlbExhYmVsSW1wbClsYWJlbDsKKwkJCVN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWxWYWx1ZUltcGwgZGVsdGEgPSAoU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxMYWJlbFZhbHVlSW1wbClzbGFiZWwuZ2V0RGVsdGFWYWx1ZSgpOworCQkJU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxMYWJlbFZhbHVlIGN1cnJlbnQgPSAoU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxMYWJlbFZhbHVlKXNsYWJlbC5nZXRQcm9iZVZhbHVlKCk7CisJCQlkb3VibGUgc2Vhc29uYWxCaXJ0aEZhY3RvciAgPSAwLjA7CisJCQlkb3VibGUgY3VycmVudFBvcHVsYXRpb24gPSBjdXJyZW50LmdldENvdW50KCk7CisJCQkvLyBuZWVkIHRvIGZpbmQgdGhlIGxhdGl0dWRlIG9mIHRoaXMgbm9kZQorCQkJLy8gZGVmYXVsdAorCQkJZG91YmxlIGxhdGl0dWRlID0gRVFVQVRPUl9MQVRJVFVERTsKKwkJCWRvdWJsZSBjdXJyZW50TWlsbGlzID0gdGltZS5nZXRUaW1lKCkuZ2V0VGltZSgpOworCQkJZG91YmxlIGxhdEZhY3RvciA9IDEuMDsgLy8gZGVmYXVsdCA9IG5vIGRlcGVuZGVuY2UKKwkJCWxvY2FsUGhhc2UgPSBnZXRQaGFzZSgpOworCQkJaWYoaXNVc2VMYXRpdHVkZSgpKSB7CisJCQkJLy8gY2VudGVyIGNvb3JkcworCQkJCWRvdWJsZVtdIGxhdF9sb25nID0gbnVsbDsKKwkJCQkKKwkJCQkvLyBHZXQgVEhJUyBub2RlCisJCQkJTm9kZSBub2RlID0gc2xhYmVsLmdldE5vZGUoKTsKKwkJCQlpZihub2RlIGluc3RhbmNlb2YgUmVnaW9uSW1wbCkgeworCQkJCQlTdHJpbmcgbm9kZVVSSSA9IG5vZGUuZ2V0VVJJKCkubGFzdFNlZ21lbnQoKTsKKwkJCQkJbGF0X2xvbmcgPSBHZW9ncmFwaGljQ2VudGVycy5nZXRDZW50ZXIobm9kZVVSSSk7CisJCQkJCS8vIHN0aWxsIG51bGw/IENvbXB1dGUgaXQKKwkJCQkJaWYobGF0X2xvbmc9PW51bGwpIHsKKwkJCQkJCS8vIEdldCB0aGUgbGF0L2xvbmcgb2YgdGhlIGNlbnRlciBvZiB0aGUgbm9kZQorCQkJCQkJZmluYWwgTGF0TG9uZ1Byb3ZpZGVyQWRhcHRlciBsYXRMb25nUHJvdmlkZXJCID0gKExhdExvbmdQcm92aWRlckFkYXB0ZXIpIExhdExvbmdQcm92aWRlckFkYXB0ZXJGYWN0b3J5LklOU1RBTkNFCisJCQkJCQkJCS5hZGFwdChub2RlLCBMYXRMb25nUHJvdmlkZXIuY2xhc3MpOworCQkJCQkJbGF0TG9uZ1Byb3ZpZGVyQi5zZXRUYXJnZXQobm9kZSk7CisJCQkJCQlsYXRfbG9uZyA9IGxhdExvbmdQcm92aWRlckIuZ2V0Q2VudGVyKCk7CisJCQkJCX0KKwkJCQkJaWYgKGxhdF9sb25nID09IG51bGwpIHsKKwkJCQkJCUFjdGl2YXRvci5sb2dFcnJvcigiQ2Fubm90IGZpbmQgbGF0aXR1ZGUgZm9yICIrIG5vZGVVUkksIG51bGwpOworCQkJCQl9CisJCQkJfSBlbHNlIHsKKwkJCQkJbGF0X2xvbmcgPSBuZXcgZG91YmxlWzJdOworCQkJCQlsYXRfbG9uZ1swXSA9IEVRVUFUT1JfTEFUSVRVREU7CisJCQkJCWxhdF9sb25nWzFdID0gRVFVQVRPUl9MQVRJVFVERTsgLy8gbm90IHVzZWQuIHNldHMgaXQgdG8gMCwwCisJCQkJfQorCisJCQkJLy8gZ2V0IHRoZSBsYXRpdHVkZQorCQkJCWlmKGxhdF9sb25nICE9IG51bGwpIHsKKwkJCQkJbGF0aXR1ZGUgPSBsYXRfbG9uZ1swXSA7CisJCQkJfSAKKwkJCQkvLyBpbiBhIGxhdGl0dWRlIGRlcGVuZGVudCBtb2RlbCwgdGhlcmUgaXMgbm8gbW9kdWxhdGlvbiBpbiB0aGUgdG9waWNzLgorCQkJCS8vIEFzIHdlIG1vdmUgYXdheSBmcm9tIHRoZSBlcXVhdG9yLCB0aGUgbW9kdWxhdGlvbiBhbXBsaXR1ZGUgaW5jcmVhc2VzIHRvIGl0J3MgbWF4aW1hbCB2YWx1ZQorCQkJCS8vIGFuZCB0aGUgY29uc3RhbnQgZmxvb3IgZGVjcmVhc2VzIHRvIGl0J3MgbWluaW11bSB2YWx1ZQorCQkJCS8vIGJhc2VkIG9uIGEgbG9naXN0aWMgKHNpZ21vaWRhbCkgZnVuY3Rpb24KKwkJCQlsYXRGYWN0b3IgID0gMS4wLygxLjAgKyBNYXRoLmV4cCgoVFJPUElDX09GX0NBTkNFUl9MQVRJVFVERSAtIE1hdGguYWJzKGxhdGl0dWRlKSkvTEFUSVRVREVfU0lHTU9JRF9XSURUSCkgKTsKKwkJCQkvLyBzZWFzb25zIHJldmVyc2UgaW4gdGhlIHNvdXRoZXJuIGhlbWlzcGhlcmUKKwkJCQlpZihsYXRpdHVkZSA8PSAwLjApIGxvY2FsUGhhc2UgPSBnZXRQaGFzZSgpK01hdGguUEk7CisJCQl9IC8vaWYgdXNlTGF0aXR1ZGUKKwkJCQorCQkJZG91YmxlIG1vZHVsYXRpb24gPSBnZXRNb2R1bGF0aW9uQW1wbGl0dWRlKCkqbGF0RmFjdG9yOworCQkJZG91YmxlIGZsb29yID0gKDEuMC1tb2R1bGF0aW9uKTsKKwkJCQkKKwkJCWRvdWJsZSBtb2R1bGF0aW9uUGVyaW9kID0gZ2V0UGVyaW9kKCk7IAorCQkJZG91YmxlIG9zY0NvcyA9IE1hdGguY29zKGxvY2FsUGhhc2UgKyAyLjAqTWF0aC5QSSpjdXJyZW50TWlsbGlzLyhtb2R1bGF0aW9uUGVyaW9kKk1JTExJU19QRVJfREFZKSApOyAvLyAxPT0+LTEgY29zaW5lCisJCQkvLyAgaW5pdCBkZWZhdWx0IChwaGFzZSAwKSAgc2Vhc29uYWxCaXJ0aEZhY3RvciAgaXMgMC4wIGluIHdpbnRlci4gcmFuZ2UgaXMgMC0+MS4wCisJCQlzZWFzb25hbEJpcnRoRmFjdG9yID0gICgxLjArKC0xLjAqb3NjQ29zKSkvMi4wOworCQkJLy8gbm93IHNjYWxlIGl0CisJCQlzZWFzb25hbEJpcnRoRmFjdG9yICAqPSBtb2R1bGF0aW9uIDsKKwkJCWRvdWJsZSBvc2NCaXJ0aFJhdGUgPSBhZGp1c3RlZEJpcnRoUmF0ZSAqIE1hdGguYWJzKHNlYXNvbmFsQmlydGhGYWN0b3IpOworCQkJLy8gYWRkIHRoZSBiYXNlIHJhdGVzCisJCQlvc2NCaXJ0aFJhdGUgKz0gKGZsb29yKmFkanVzdGVkQmlydGhSYXRlKTsKKwkJCQorCQkJaWYoVFJPUElDQUxfT05MWSkgeworCQkJCW9zY0JpcnRoUmF0ZSAqPSBnZXRUcm9waWNhbEVudmVsb3BlKGxhdGl0dWRlLCAoMipUUk9QSUNfT0ZfQ0FOQ0VSX0xBVElUVURFKSk7CisJCQl9CisJCQkvLyBvbmx5IG1vZHVsYXRlIHRoZSBiaXJ0aCByYXRlLgorCQkJZG91YmxlIGJpcnRocyA9IGN1cnJlbnRQb3B1bGF0aW9uICogb3NjQmlydGhSYXRlOworCQkJLy8gd2UgZG9uJ3QgbW9kdWxhdGUgdGhlIGRlYXRoIHJhdGUgKGluc2VjdCBsaWZlIGV4cGVjdGFuY3kKKwkJCWRvdWJsZSBkZWF0aHMgPSBjdXJyZW50UG9wdWxhdGlvbiAqIGFkanVzdGVkRGVhdGhSYXRlOworCQkJY3VycmVudFBvcHVsYXRpb24gKz0gYmlydGhzOworCQkJY3VycmVudFBvcHVsYXRpb24gLT0gZGVhdGhzOworCQkJCisJCQlkZWx0YS5zZXRDb3VudChiaXJ0aHMtZGVhdGhzKTsKKwkJCWRlbHRhLnNldEJpcnRocyhiaXJ0aHMpOworCQkJZGVsdGEuc2V0RGVhdGhzKGRlYXRocyk7CisJCQkKKwkJCQorCQkJRXhjaGFuZ2UgYmlydGhFeGNoYW5nZSA9IEdyYXBoRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlRXhjaGFuZ2UoKTsKKwkJCUV4Y2hhbmdlIGRlYXRoRXhjaGFuZ2UgPSBHcmFwaEZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZUV4Y2hhbmdlKCk7CisJCQkKKwkJCWJpcnRoRXhjaGFuZ2Uuc2V0VHlwZShFeGNoYW5nZVR5cGUuQklSVEhTX0FORF9ERUFUSFMpOworCQkJYmlydGhFeGNoYW5nZS5zZXRDb3VudChiaXJ0aHMpOworCQkJZGVhdGhFeGNoYW5nZS5zZXRUeXBlKEV4Y2hhbmdlVHlwZS5CSVJUSFNfQU5EX0RFQVRIUyk7CisJCQlkZWF0aEV4Y2hhbmdlLnNldENvdW50KGRlYXRocyk7CisJCQlkZWx0YS5nZXRBcnJpdmFscygpLmNsZWFyKCk7CisJCQlkZWx0YS5nZXREZXBhcnR1cmVzKCkuY2xlYXIoKTsKKwkJCWRlbHRhLmdldEFycml2YWxzKCkuYWRkKGJpcnRoRXhjaGFuZ2UpOworCQkJZGVsdGEuZ2V0RGVwYXJ0dXJlcygpLmFkZChkZWF0aEV4Y2hhbmdlKTsKKwkJCQorCQkJaGFuZGxlTWlncmF0aW9uKHNsYWJlbCwgZGVsdGEuZ2V0QXJyaXZhbHMoKSxkZWx0YS5nZXREZXBhcnR1cmVzKCksIHRoaXMuZ2V0VGltZVBlcmlvZCgpLCB0aW1lRGVsdGEsIGRlbHRhKTsKKwkJCWhhbmRsZVBpcGVUcmFuc3BvcnQoc2xhYmVsLCBkZWx0YS5nZXRBcnJpdmFscygpLGRlbHRhLmdldERlcGFydHVyZXMoKSwgdGltZURlbHRhLCBkZWx0YSk7CisJCQlFQ29sbGVjdGlvbnMuc29ydChkZWx0YS5nZXRBcnJpdmFscygpKTsKKwkJCUVDb2xsZWN0aW9ucy5zb3J0KGRlbHRhLmdldERlcGFydHVyZXMoKSk7CisJCX0KKwl9Ly8gY2FsY3VsYXRlRGVsdGEKKwkKKwkvKioKKwkgKiBFbnZlbG9wZSBmdW5jdGlvbiB0aGF0IGJvdW5kcyBtb3NxdWl0byBwb3B1bGF0aW9uIHRvIHRyb3BpY2FsIGJhbmQKKwkgKiBGdW5jdGlvbiBpcyA9PTEuMCBhdCBlcXVhdG9yIChjZW50ZXJlZCBhYm91dCBlcXVhdG9yKQorCSAqIEBwYXJhbSBsYXQKKwkgKiBAcGFyYW0gc2dpbWEgaXMgdGhlIHdpZHRoCisJICogQHJldHVybgorCSAqLworCXByaXZhdGUgZG91YmxlIGdldFRyb3BpY2FsRW52ZWxvcGUoZG91YmxlIGxhdCwgZG91YmxlIHNpZ21hKSB7CisJCWRvdWJsZSBleHAgPSAtKChsYXQqbGF0KS8oMi4wKnNpZ21hKnNpZ21hKSk7CisJCXJldHVybiBNYXRoLmV4cChleHApOworCX0KKwkKKwkvKioKKwkgKiBVdGlsaXR5IGZ1bmN0aW9uCisJICogQHBhcmFtIHgKKwkgKiBAcGFyYW0gbXUgbWVhbgorCSAqIEBwYXJhbSBzaWdtYSB3aWR0aAorCSAqIEByZXR1cm4KKwkgKi8KKwlwcml2YXRlIGRvdWJsZSBnZXRHYXVzaWFuVW5ub3JtYWxpemUoZG91YmxlIHgsIGRvdWJsZSBtdSwgZG91YmxlIHNpZ21hKSB7CisJCWRvdWJsZSBleHAgPSAtKCgoeC1tdSkqKHgtbXUpKS8oMi4wKnNpZ21hKnNpZ21hKSk7CisJCXJldHVybiBNYXRoLmV4cChleHApOworCX0KKworCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIEVDbGFzcyBlU3RhdGljQ2xhc3MoKSB7CisJCXJldHVybiBTdGFuZGFyZFBhY2thZ2UuTGl0ZXJhbHMuU0VBU09OQUxfUE9QVUxBVElPTl9NT0RFTDsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgZG91YmxlIGdldFBoYXNlKCkgeworCQlyZXR1cm4gcGhhc2U7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgc2V0UGhhc2UoZG91YmxlIG5ld1BoYXNlKSB7CisJCWRvdWJsZSBvbGRQaGFzZSA9IHBoYXNlOworCQlwaGFzZSA9IG5ld1BoYXNlOworCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpCisJCQllTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBTdGFuZGFyZFBhY2thZ2UuU0VBU09OQUxfUE9QVUxBVElPTl9NT0RFTF9fUEhBU0UsIG9sZFBoYXNlLCBwaGFzZSkpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBkb3VibGUgZ2V0TW9kdWxhdGlvbkFtcGxpdHVkZSgpIHsKKwkJcmV0dXJuIG1vZHVsYXRpb25BbXBsaXR1ZGU7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgc2V0TW9kdWxhdGlvbkFtcGxpdHVkZShkb3VibGUgbmV3TW9kdWxhdGlvbkFtcGxpdHVkZSkgeworCQlkb3VibGUgb2xkTW9kdWxhdGlvbkFtcGxpdHVkZSA9IG1vZHVsYXRpb25BbXBsaXR1ZGU7CisJCW1vZHVsYXRpb25BbXBsaXR1ZGUgPSBuZXdNb2R1bGF0aW9uQW1wbGl0dWRlOworCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpCisJCQllTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBTdGFuZGFyZFBhY2thZ2UuU0VBU09OQUxfUE9QVUxBVElPTl9NT0RFTF9fTU9EVUxBVElPTl9BTVBMSVRVREUsIG9sZE1vZHVsYXRpb25BbXBsaXR1ZGUsIG1vZHVsYXRpb25BbXBsaXR1ZGUpKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgZG91YmxlIGdldFBlcmlvZCgpIHsKKwkJcmV0dXJuIHBlcmlvZDsKKwl9CisKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBib29sZWFuIGlzVXNlTGF0aXR1ZGUoKSB7CisJCXJldHVybiB1c2VMYXRpdHVkZTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRVc2VMYXRpdHVkZShib29sZWFuIG5ld1VzZUxhdGl0dWRlKSB7CisJCWJvb2xlYW4gb2xkVXNlTGF0aXR1ZGUgPSB1c2VMYXRpdHVkZTsKKwkJdXNlTGF0aXR1ZGUgPSBuZXdVc2VMYXRpdHVkZTsKKwkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQorCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgU3RhbmRhcmRQYWNrYWdlLlNFQVNPTkFMX1BPUFVMQVRJT05fTU9ERUxfX1VTRV9MQVRJVFVERSwgb2xkVXNlTGF0aXR1ZGUsIHVzZUxhdGl0dWRlKSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIE9iamVjdCBlR2V0KGludCBmZWF0dXJlSUQsIGJvb2xlYW4gcmVzb2x2ZSwgYm9vbGVhbiBjb3JlVHlwZSkgeworCQlzd2l0Y2ggKGZlYXR1cmVJRCkgeworCQkJY2FzZSBTdGFuZGFyZFBhY2thZ2UuU0VBU09OQUxfUE9QVUxBVElPTl9NT0RFTF9fUEhBU0U6CisJCQkJcmV0dXJuIGdldFBoYXNlKCk7CisJCQljYXNlIFN0YW5kYXJkUGFja2FnZS5TRUFTT05BTF9QT1BVTEFUSU9OX01PREVMX19NT0RVTEFUSU9OX0FNUExJVFVERToKKwkJCQlyZXR1cm4gZ2V0TW9kdWxhdGlvbkFtcGxpdHVkZSgpOworCQkJY2FzZSBTdGFuZGFyZFBhY2thZ2UuU0VBU09OQUxfUE9QVUxBVElPTl9NT0RFTF9fUEVSSU9EOgorCQkJCXJldHVybiBnZXRQZXJpb2QoKTsKKwkJCWNhc2UgU3RhbmRhcmRQYWNrYWdlLlNFQVNPTkFMX1BPUFVMQVRJT05fTU9ERUxfX1VTRV9MQVRJVFVERToKKwkJCQlyZXR1cm4gaXNVc2VMYXRpdHVkZSgpOworCQl9CisJCXJldHVybiBzdXBlci5lR2V0KGZlYXR1cmVJRCwgcmVzb2x2ZSwgY29yZVR5cGUpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGVTZXQoaW50IGZlYXR1cmVJRCwgT2JqZWN0IG5ld1ZhbHVlKSB7CisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7CisJCQljYXNlIFN0YW5kYXJkUGFja2FnZS5TRUFTT05BTF9QT1BVTEFUSU9OX01PREVMX19QSEFTRToKKwkJCQlzZXRQaGFzZSgoRG91YmxlKW5ld1ZhbHVlKTsKKwkJCQlyZXR1cm47CisJCQljYXNlIFN0YW5kYXJkUGFja2FnZS5TRUFTT05BTF9QT1BVTEFUSU9OX01PREVMX19NT0RVTEFUSU9OX0FNUExJVFVERToKKwkJCQlzZXRNb2R1bGF0aW9uQW1wbGl0dWRlKChEb3VibGUpbmV3VmFsdWUpOworCQkJCXJldHVybjsKKwkJCWNhc2UgU3RhbmRhcmRQYWNrYWdlLlNFQVNPTkFMX1BPUFVMQVRJT05fTU9ERUxfX1VTRV9MQVRJVFVERToKKwkJCQlzZXRVc2VMYXRpdHVkZSgoQm9vbGVhbiluZXdWYWx1ZSk7CisJCQkJcmV0dXJuOworCQl9CisJCXN1cGVyLmVTZXQoZmVhdHVyZUlELCBuZXdWYWx1ZSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgZVVuc2V0KGludCBmZWF0dXJlSUQpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJCWNhc2UgU3RhbmRhcmRQYWNrYWdlLlNFQVNPTkFMX1BPUFVMQVRJT05fTU9ERUxfX1BIQVNFOgorCQkJCXNldFBoYXNlKFBIQVNFX0VERUZBVUxUKTsKKwkJCQlyZXR1cm47CisJCQljYXNlIFN0YW5kYXJkUGFja2FnZS5TRUFTT05BTF9QT1BVTEFUSU9OX01PREVMX19NT0RVTEFUSU9OX0FNUExJVFVERToKKwkJCQlzZXRNb2R1bGF0aW9uQW1wbGl0dWRlKE1PRFVMQVRJT05fQU1QTElUVURFX0VERUZBVUxUKTsKKwkJCQlyZXR1cm47CisJCQljYXNlIFN0YW5kYXJkUGFja2FnZS5TRUFTT05BTF9QT1BVTEFUSU9OX01PREVMX19VU0VfTEFUSVRVREU6CisJCQkJc2V0VXNlTGF0aXR1ZGUoVVNFX0xBVElUVURFX0VERUZBVUxUKTsKKwkJCQlyZXR1cm47CisJCX0KKwkJc3VwZXIuZVVuc2V0KGZlYXR1cmVJRCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIGJvb2xlYW4gZUlzU2V0KGludCBmZWF0dXJlSUQpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJCWNhc2UgU3RhbmRhcmRQYWNrYWdlLlNFQVNPTkFMX1BPUFVMQVRJT05fTU9ERUxfX1BIQVNFOgorCQkJCXJldHVybiBwaGFzZSAhPSBQSEFTRV9FREVGQVVMVDsKKwkJCWNhc2UgU3RhbmRhcmRQYWNrYWdlLlNFQVNPTkFMX1BPUFVMQVRJT05fTU9ERUxfX01PRFVMQVRJT05fQU1QTElUVURFOgorCQkJCXJldHVybiBtb2R1bGF0aW9uQW1wbGl0dWRlICE9IE1PRFVMQVRJT05fQU1QTElUVURFX0VERUZBVUxUOworCQkJY2FzZSBTdGFuZGFyZFBhY2thZ2UuU0VBU09OQUxfUE9QVUxBVElPTl9NT0RFTF9fUEVSSU9EOgorCQkJCXJldHVybiBwZXJpb2QgIT0gUEVSSU9EX0VERUZBVUxUOworCQkJY2FzZSBTdGFuZGFyZFBhY2thZ2UuU0VBU09OQUxfUE9QVUxBVElPTl9NT0RFTF9fVVNFX0xBVElUVURFOgorCQkJCXJldHVybiB1c2VMYXRpdHVkZSAhPSBVU0VfTEFUSVRVREVfRURFRkFVTFQ7CisJCX0KKwkJcmV0dXJuIHN1cGVyLmVJc1NldChmZWF0dXJlSUQpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKSB7CisJCWlmIChlSXNQcm94eSgpKSByZXR1cm4gc3VwZXIudG9TdHJpbmcoKTsKKworCQlTdHJpbmdCdWZmZXIgcmVzdWx0ID0gbmV3IFN0cmluZ0J1ZmZlcihzdXBlci50b1N0cmluZygpKTsKKwkJcmVzdWx0LmFwcGVuZCgiIChwaGFzZTogIik7CisJCXJlc3VsdC5hcHBlbmQocGhhc2UpOworCQlyZXN1bHQuYXBwZW5kKCIsIG1vZHVsYXRpb25BbXBsaXR1ZGU6ICIpOworCQlyZXN1bHQuYXBwZW5kKG1vZHVsYXRpb25BbXBsaXR1ZGUpOworCQlyZXN1bHQuYXBwZW5kKCIsIHBlcmlvZDogIik7CisJCXJlc3VsdC5hcHBlbmQocGVyaW9kKTsKKwkJcmVzdWx0LmFwcGVuZCgiLCB1c2VMYXRpdHVkZTogIik7CisJCXJlc3VsdC5hcHBlbmQodXNlTGF0aXR1ZGUpOworCQlyZXN1bHQuYXBwZW5kKCcpJyk7CisJCXJldHVybiByZXN1bHQudG9TdHJpbmcoKTsKKwl9CisKK30gLy9TZWFzb25hbFBvcHVsYXRpb25Nb2RlbEltcGwKZGlmZiAtLWdpdCBhL21vZGVscy9wb3B1bGF0aW9ucy9vcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vcG9wdWxhdGlvbm1vZGVscy9zdGFuZGFyZC9pbXBsL1N0YW5kYXJkRmFjdG9yeUltcGwuamF2YSBiL21vZGVscy9wb3B1bGF0aW9ucy9vcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vcG9wdWxhdGlvbm1vZGVscy9zdGFuZGFyZC9pbXBsL1N0YW5kYXJkRmFjdG9yeUltcGwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ODRhYmRjCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL3BvcHVsYXRpb25zL29yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9wb3B1bGF0aW9ubW9kZWxzL3N0YW5kYXJkL2ltcGwvU3RhbmRhcmRGYWN0b3J5SW1wbC5qYXZhCkBAIC0wLDAgKzEsMjYwIEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5pbXBsOw0KKw0KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorICogQ29weXJpZ2h0IChjKSAyMDA5IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLg0KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMNCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjANCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdA0KKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sDQorICoNCisgKiBDb250cmlidXRvcnM6DQorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbg0KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KKw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdDsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVQYWNrYWdlOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuaW1wbC5FRmFjdG9yeUltcGw7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5wbHVnaW4uRWNvcmVQbHVnaW47DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC4qOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuQWdlR3JvdXA7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5BZ2luZ1BvcHVsYXRpb25Nb2RlbDsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLkRlbW9ncmFwaGljUG9wdWxhdGlvbk1vZGVsOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuTW9zcXVpdG9Qb3B1bGF0aW9uTW9kZWw7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5Qb3B1bGF0aW9uR3JvdXA7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5Qb3B1bGF0aW9uTW9kZWxMYWJlbDsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLlBvcHVsYXRpb25Nb2RlbExhYmVsVmFsdWU7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5TZWFzb25hbFBvcHVsYXRpb25Nb2RlbDsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkRmFjdG9yeTsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkUGFja2FnZTsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkUG9wdWxhdGlvbkluaXRpYWxpemVyOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWw7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZFBvcHVsYXRpb25Nb2RlbExhYmVsOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxMYWJlbFZhbHVlOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuU3RvY2hhc3RpY1N0YW5kYXJkUG9wdWxhdGlvbk1vZGVsOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuWWV0aVBvcHVsYXRpb25Jbml0aWFsaXplcjsNCisNCisvKioNCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKyAqIEFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBtb2RlbCA8Yj5GYWN0b3J5PC9iPi4NCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisgKiBAZ2VuZXJhdGVkDQorICovDQorcHVibGljIGNsYXNzIFN0YW5kYXJkRmFjdG9yeUltcGwgZXh0ZW5kcyBFRmFjdG9yeUltcGwgaW1wbGVtZW50cyBTdGFuZGFyZEZhY3Rvcnkgew0KKwkvKioNCisJICogQ3JlYXRlcyB0aGUgZGVmYXVsdCBmYWN0b3J5IGltcGxlbWVudGF0aW9uLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIHN0YXRpYyBTdGFuZGFyZEZhY3RvcnkgaW5pdCgpIHsNCisJCXRyeSB7DQorCQkJU3RhbmRhcmRGYWN0b3J5IHRoZVN0YW5kYXJkRmFjdG9yeSA9IChTdGFuZGFyZEZhY3RvcnkpRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RUZhY3RvcnkoImh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9wb3B1bGF0aW9ubW9kZWxzL3N0YW5kYXJkIik7IA0KKwkJCWlmICh0aGVTdGFuZGFyZEZhY3RvcnkgIT0gbnVsbCkgew0KKwkJCQlyZXR1cm4gdGhlU3RhbmRhcmRGYWN0b3J5Ow0KKwkJCX0NCisJCX0NCisJCWNhdGNoIChFeGNlcHRpb24gZXhjZXB0aW9uKSB7DQorCQkJRWNvcmVQbHVnaW4uSU5TVEFOQ0UubG9nKGV4Y2VwdGlvbik7DQorCQl9DQorCQlyZXR1cm4gbmV3IFN0YW5kYXJkRmFjdG9yeUltcGwoKTsNCisJfQ0KKw0KKwkvKioNCisJICogQ3JlYXRlcyBhbiBpbnN0YW5jZSBvZiB0aGUgZmFjdG9yeS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBTdGFuZGFyZEZhY3RvcnlJbXBsKCkgew0KKwkJc3VwZXIoKTsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCUBPdmVycmlkZQ0KKwlwdWJsaWMgRU9iamVjdCBjcmVhdGUoRUNsYXNzIGVDbGFzcykgew0KKwkJc3dpdGNoIChlQ2xhc3MuZ2V0Q2xhc3NpZmllcklEKCkpIHsNCisJCQljYXNlIFN0YW5kYXJkUGFja2FnZS5TVEFOREFSRF9QT1BVTEFUSU9OX01PREVMOiByZXR1cm4gY3JlYXRlU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWwoKTsNCisJCQljYXNlIFN0YW5kYXJkUGFja2FnZS5QT1BVTEFUSU9OX01PREVMX0xBQkVMOiByZXR1cm4gY3JlYXRlUG9wdWxhdGlvbk1vZGVsTGFiZWwoKTsNCisJCQljYXNlIFN0YW5kYXJkUGFja2FnZS5TVEFOREFSRF9QT1BVTEFUSU9OX01PREVMX0xBQkVMOiByZXR1cm4gY3JlYXRlU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxMYWJlbCgpOw0KKwkJCWNhc2UgU3RhbmRhcmRQYWNrYWdlLlBPUFVMQVRJT05fTU9ERUxfTEFCRUxfVkFMVUU6IHJldHVybiBjcmVhdGVQb3B1bGF0aW9uTW9kZWxMYWJlbFZhbHVlKCk7DQorCQkJY2FzZSBTdGFuZGFyZFBhY2thZ2UuU1RBTkRBUkRfUE9QVUxBVElPTl9NT0RFTF9MQUJFTF9WQUxVRTogcmV0dXJuIGNyZWF0ZVN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWxWYWx1ZSgpOw0KKwkJCWNhc2UgU3RhbmRhcmRQYWNrYWdlLlNUT0NIQVNUSUNfU1RBTkRBUkRfUE9QVUxBVElPTl9NT0RFTDogcmV0dXJuIGNyZWF0ZVN0b2NoYXN0aWNTdGFuZGFyZFBvcHVsYXRpb25Nb2RlbCgpOw0KKwkJCWNhc2UgU3RhbmRhcmRQYWNrYWdlLkRFTU9HUkFQSElDX1BPUFVMQVRJT05fTU9ERUw6IHJldHVybiBjcmVhdGVEZW1vZ3JhcGhpY1BvcHVsYXRpb25Nb2RlbCgpOw0KKwkJCWNhc2UgU3RhbmRhcmRQYWNrYWdlLlBPUFVMQVRJT05fR1JPVVA6IHJldHVybiBjcmVhdGVQb3B1bGF0aW9uR3JvdXAoKTsNCisJCQljYXNlIFN0YW5kYXJkUGFja2FnZS5TVEFOREFSRF9QT1BVTEFUSU9OX0lOSVRJQUxJWkVSOiByZXR1cm4gY3JlYXRlU3RhbmRhcmRQb3B1bGF0aW9uSW5pdGlhbGl6ZXIoKTsNCisJCQljYXNlIFN0YW5kYXJkUGFja2FnZS5TRUFTT05BTF9QT1BVTEFUSU9OX01PREVMOiByZXR1cm4gY3JlYXRlU2Vhc29uYWxQb3B1bGF0aW9uTW9kZWwoKTsNCisJCQljYXNlIFN0YW5kYXJkUGFja2FnZS5ZRVRJX1BPUFVMQVRJT05fSU5JVElBTElaRVI6IHJldHVybiBjcmVhdGVZZXRpUG9wdWxhdGlvbkluaXRpYWxpemVyKCk7DQorCQkJY2FzZSBTdGFuZGFyZFBhY2thZ2UuTU9TUVVJVE9fUE9QVUxBVElPTl9NT0RFTDogcmV0dXJuIGNyZWF0ZU1vc3F1aXRvUG9wdWxhdGlvbk1vZGVsKCk7DQorCQkJY2FzZSBTdGFuZGFyZFBhY2thZ2UuQUdJTkdfUE9QVUxBVElPTl9NT0RFTDogcmV0dXJuIGNyZWF0ZUFnaW5nUG9wdWxhdGlvbk1vZGVsKCk7DQorCQkJY2FzZSBTdGFuZGFyZFBhY2thZ2UuQUdFX0dST1VQOiByZXR1cm4gY3JlYXRlQWdlR3JvdXAoKTsNCisJCQlkZWZhdWx0Og0KKwkJCQl0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJUaGUgY2xhc3MgJyIgKyBlQ2xhc3MuZ2V0TmFtZSgpICsgIicgaXMgbm90IGEgdmFsaWQgY2xhc3NpZmllciIpOw0KKwkJfQ0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIFN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsIGNyZWF0ZVN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsKCkgew0KKwkJU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxJbXBsIHN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsID0gbmV3IFN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsSW1wbCgpOw0KKwkJcmV0dXJuIHN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIFBvcHVsYXRpb25Nb2RlbExhYmVsIGNyZWF0ZVBvcHVsYXRpb25Nb2RlbExhYmVsKCkgew0KKwkJUG9wdWxhdGlvbk1vZGVsTGFiZWxJbXBsIHBvcHVsYXRpb25Nb2RlbExhYmVsID0gbmV3IFBvcHVsYXRpb25Nb2RlbExhYmVsSW1wbCgpOw0KKwkJcmV0dXJuIHBvcHVsYXRpb25Nb2RlbExhYmVsOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIFN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWwgY3JlYXRlU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxMYWJlbCgpIHsNCisJCVN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWxJbXBsIHN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWwgPSBuZXcgU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxMYWJlbEltcGwoKTsNCisJCXJldHVybiBzdGFuZGFyZFBvcHVsYXRpb25Nb2RlbExhYmVsOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIFBvcHVsYXRpb25Nb2RlbExhYmVsVmFsdWUgY3JlYXRlUG9wdWxhdGlvbk1vZGVsTGFiZWxWYWx1ZSgpIHsNCisJCVBvcHVsYXRpb25Nb2RlbExhYmVsVmFsdWVJbXBsIHBvcHVsYXRpb25Nb2RlbExhYmVsVmFsdWUgPSBuZXcgUG9wdWxhdGlvbk1vZGVsTGFiZWxWYWx1ZUltcGwoKTsNCisJCXJldHVybiBwb3B1bGF0aW9uTW9kZWxMYWJlbFZhbHVlOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIFN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWxWYWx1ZSBjcmVhdGVTdGFuZGFyZFBvcHVsYXRpb25Nb2RlbExhYmVsVmFsdWUoKSB7DQorCQlTdGFuZGFyZFBvcHVsYXRpb25Nb2RlbExhYmVsVmFsdWVJbXBsIHN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWxWYWx1ZSA9IG5ldyBTdGFuZGFyZFBvcHVsYXRpb25Nb2RlbExhYmVsVmFsdWVJbXBsKCk7DQorCQlyZXR1cm4gc3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxMYWJlbFZhbHVlOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIFN0b2NoYXN0aWNTdGFuZGFyZFBvcHVsYXRpb25Nb2RlbCBjcmVhdGVTdG9jaGFzdGljU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWwoKSB7DQorCQlTdG9jaGFzdGljU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxJbXBsIHN0b2NoYXN0aWNTdGFuZGFyZFBvcHVsYXRpb25Nb2RlbCA9IG5ldyBTdG9jaGFzdGljU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxJbXBsKCk7DQorCQlyZXR1cm4gc3RvY2hhc3RpY1N0YW5kYXJkUG9wdWxhdGlvbk1vZGVsOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIERlbW9ncmFwaGljUG9wdWxhdGlvbk1vZGVsIGNyZWF0ZURlbW9ncmFwaGljUG9wdWxhdGlvbk1vZGVsKCkgew0KKwkJRGVtb2dyYXBoaWNQb3B1bGF0aW9uTW9kZWxJbXBsIGRlbW9ncmFwaGljUG9wdWxhdGlvbk1vZGVsID0gbmV3IERlbW9ncmFwaGljUG9wdWxhdGlvbk1vZGVsSW1wbCgpOw0KKwkJcmV0dXJuIGRlbW9ncmFwaGljUG9wdWxhdGlvbk1vZGVsOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIFBvcHVsYXRpb25Hcm91cCBjcmVhdGVQb3B1bGF0aW9uR3JvdXAoKSB7DQorCQlQb3B1bGF0aW9uR3JvdXBJbXBsIHBvcHVsYXRpb25Hcm91cCA9IG5ldyBQb3B1bGF0aW9uR3JvdXBJbXBsKCk7DQorCQlyZXR1cm4gcG9wdWxhdGlvbkdyb3VwOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIFN0YW5kYXJkUG9wdWxhdGlvbkluaXRpYWxpemVyIGNyZWF0ZVN0YW5kYXJkUG9wdWxhdGlvbkluaXRpYWxpemVyKCkgew0KKwkJU3RhbmRhcmRQb3B1bGF0aW9uSW5pdGlhbGl6ZXJJbXBsIHN0YW5kYXJkUG9wdWxhdGlvbkluaXRpYWxpemVyID0gbmV3IFN0YW5kYXJkUG9wdWxhdGlvbkluaXRpYWxpemVySW1wbCgpOw0KKwkJcmV0dXJuIHN0YW5kYXJkUG9wdWxhdGlvbkluaXRpYWxpemVyOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIFNlYXNvbmFsUG9wdWxhdGlvbk1vZGVsIGNyZWF0ZVNlYXNvbmFsUG9wdWxhdGlvbk1vZGVsKCkgew0KKwkJU2Vhc29uYWxQb3B1bGF0aW9uTW9kZWxJbXBsIHNlYXNvbmFsUG9wdWxhdGlvbk1vZGVsID0gbmV3IFNlYXNvbmFsUG9wdWxhdGlvbk1vZGVsSW1wbCgpOw0KKwkJcmV0dXJuIHNlYXNvbmFsUG9wdWxhdGlvbk1vZGVsOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIFlldGlQb3B1bGF0aW9uSW5pdGlhbGl6ZXIgY3JlYXRlWWV0aVBvcHVsYXRpb25Jbml0aWFsaXplcigpIHsNCisJCVlldGlQb3B1bGF0aW9uSW5pdGlhbGl6ZXJJbXBsIHlldGlQb3B1bGF0aW9uSW5pdGlhbGl6ZXIgPSBuZXcgWWV0aVBvcHVsYXRpb25Jbml0aWFsaXplckltcGwoKTsNCisJCXJldHVybiB5ZXRpUG9wdWxhdGlvbkluaXRpYWxpemVyOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIE1vc3F1aXRvUG9wdWxhdGlvbk1vZGVsIGNyZWF0ZU1vc3F1aXRvUG9wdWxhdGlvbk1vZGVsKCkgew0KKwkJTW9zcXVpdG9Qb3B1bGF0aW9uTW9kZWxJbXBsIG1vc3F1aXRvUG9wdWxhdGlvbk1vZGVsID0gbmV3IE1vc3F1aXRvUG9wdWxhdGlvbk1vZGVsSW1wbCgpOw0KKwkJcmV0dXJuIG1vc3F1aXRvUG9wdWxhdGlvbk1vZGVsOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIEFnaW5nUG9wdWxhdGlvbk1vZGVsIGNyZWF0ZUFnaW5nUG9wdWxhdGlvbk1vZGVsKCkgew0KKwkJQWdpbmdQb3B1bGF0aW9uTW9kZWxJbXBsIGFnaW5nUG9wdWxhdGlvbk1vZGVsID0gbmV3IEFnaW5nUG9wdWxhdGlvbk1vZGVsSW1wbCgpOw0KKwkJcmV0dXJuIGFnaW5nUG9wdWxhdGlvbk1vZGVsOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIEFnZUdyb3VwIGNyZWF0ZUFnZUdyb3VwKCkgew0KKwkJQWdlR3JvdXBJbXBsIGFnZUdyb3VwID0gbmV3IEFnZUdyb3VwSW1wbCgpOw0KKwkJcmV0dXJuIGFnZUdyb3VwOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIFN0YW5kYXJkUGFja2FnZSBnZXRTdGFuZGFyZFBhY2thZ2UoKSB7DQorCQlyZXR1cm4gKFN0YW5kYXJkUGFja2FnZSlnZXRFUGFja2FnZSgpOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGRlcHJlY2F0ZWQNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJQERlcHJlY2F0ZWQNCisJcHVibGljIHN0YXRpYyBTdGFuZGFyZFBhY2thZ2UgZ2V0UGFja2FnZSgpIHsNCisJCXJldHVybiBTdGFuZGFyZFBhY2thZ2UuZUlOU1RBTkNFOw0KKwl9DQorDQorfSAvL1N0YW5kYXJkRmFjdG9yeUltcGwNCmRpZmYgLS1naXQgYS9tb2RlbHMvcG9wdWxhdGlvbnMvb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3BvcHVsYXRpb25tb2RlbHMvc3RhbmRhcmQvaW1wbC9TdGFuZGFyZFBhY2thZ2VJbXBsLmphdmEgYi9tb2RlbHMvcG9wdWxhdGlvbnMvb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3BvcHVsYXRpb25tb2RlbHMvc3RhbmRhcmQvaW1wbC9TdGFuZGFyZFBhY2thZ2VJbXBsLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODNlZTNjNAotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9wb3B1bGF0aW9ucy9vcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vcG9wdWxhdGlvbm1vZGVscy9zdGFuZGFyZC9pbXBsL1N0YW5kYXJkUGFja2FnZUltcGwuamF2YQpAQCAtMCwwICsxLDkxMSBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuaW1wbDsNCisNCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyAqIENvcHlyaWdodCAoYykgMjAwOSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4NCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzDQorICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wDQorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQNCisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbA0KKyAqDQorICogQ29udHJpYnV0b3JzOg0KKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24NCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCisNCisNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVBdHRyaWJ1dGU7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FUGFja2FnZTsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVSZWZlcmVuY2U7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FY29yZVBhY2thZ2U7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5pbXBsLkVQYWNrYWdlSW1wbDsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkdyYXBoUGFja2FnZTsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmxvZ2dlci5Mb2dnZXJQYWNrYWdlOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuTW9kZWxQYWNrYWdlOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuTW9kaWZpZXJQYWNrYWdlOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5MYWJlbHNQYWNrYWdlOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuQWdlR3JvdXA7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5BZ2luZ1BvcHVsYXRpb25Nb2RlbDsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLkRlbW9ncmFwaGljUG9wdWxhdGlvbk1vZGVsOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuRWFydGhTY2llbmNlUG9wdWxhdGlvbkluaXRpYWxpemVyOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuTW9zcXVpdG9Qb3B1bGF0aW9uTW9kZWw7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5Qb3B1bGF0aW9uR3JvdXA7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5Qb3B1bGF0aW9uSW5pdGlhbGl6ZXI7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5Qb3B1bGF0aW9uTW9kZWw7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5Qb3B1bGF0aW9uTW9kZWxMYWJlbDsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLlBvcHVsYXRpb25Nb2RlbExhYmVsVmFsdWU7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5TZWFzb25hbFBvcHVsYXRpb25Nb2RlbDsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkRmFjdG9yeTsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkUGFja2FnZTsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkUG9wdWxhdGlvbkluaXRpYWxpemVyOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWw7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZFBvcHVsYXRpb25Nb2RlbExhYmVsOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxMYWJlbFZhbHVlOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuU3RvY2hhc3RpY1N0YW5kYXJkUG9wdWxhdGlvbk1vZGVsOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuWWV0aVBvcHVsYXRpb25Jbml0aWFsaXplcjsNCisNCisvKioNCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKyAqIEFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBtb2RlbCA8Yj5QYWNrYWdlPC9iPi4NCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisgKiBAZ2VuZXJhdGVkDQorICovDQorcHVibGljIGNsYXNzIFN0YW5kYXJkUGFja2FnZUltcGwgZXh0ZW5kcyBFUGFja2FnZUltcGwgaW1wbGVtZW50cyBTdGFuZGFyZFBhY2thZ2Ugew0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByaXZhdGUgRUNsYXNzIHBvcHVsYXRpb25Nb2RlbEVDbGFzcyA9IG51bGw7DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJpdmF0ZSBFQ2xhc3Mgc3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxFQ2xhc3MgPSBudWxsOw0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByaXZhdGUgRUNsYXNzIHBvcHVsYXRpb25Nb2RlbExhYmVsRUNsYXNzID0gbnVsbDsNCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcml2YXRlIEVDbGFzcyBzdGFuZGFyZFBvcHVsYXRpb25Nb2RlbExhYmVsRUNsYXNzID0gbnVsbDsNCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcml2YXRlIEVDbGFzcyBwb3B1bGF0aW9uTW9kZWxMYWJlbFZhbHVlRUNsYXNzID0gbnVsbDsNCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcml2YXRlIEVDbGFzcyBzdGFuZGFyZFBvcHVsYXRpb25Nb2RlbExhYmVsVmFsdWVFQ2xhc3MgPSBudWxsOw0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByaXZhdGUgRUNsYXNzIHN0b2NoYXN0aWNTdGFuZGFyZFBvcHVsYXRpb25Nb2RlbEVDbGFzcyA9IG51bGw7DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJpdmF0ZSBFQ2xhc3MgZGVtb2dyYXBoaWNQb3B1bGF0aW9uTW9kZWxFQ2xhc3MgPSBudWxsOw0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByaXZhdGUgRUNsYXNzIHBvcHVsYXRpb25Hcm91cEVDbGFzcyA9IG51bGw7DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJpdmF0ZSBFQ2xhc3MgcG9wdWxhdGlvbkluaXRpYWxpemVyRUNsYXNzID0gbnVsbDsNCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcml2YXRlIEVDbGFzcyBzdGFuZGFyZFBvcHVsYXRpb25Jbml0aWFsaXplckVDbGFzcyA9IG51bGw7DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJpdmF0ZSBFQ2xhc3Mgc2Vhc29uYWxQb3B1bGF0aW9uTW9kZWxFQ2xhc3MgPSBudWxsOw0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByaXZhdGUgRUNsYXNzIGVhcnRoU2NpZW5jZVBvcHVsYXRpb25Jbml0aWFsaXplckVDbGFzcyA9IG51bGw7DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJpdmF0ZSBFQ2xhc3MgeWV0aVBvcHVsYXRpb25Jbml0aWFsaXplckVDbGFzcyA9IG51bGw7DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJpdmF0ZSBFQ2xhc3MgbW9zcXVpdG9Qb3B1bGF0aW9uTW9kZWxFQ2xhc3MgPSBudWxsOw0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByaXZhdGUgRUNsYXNzIGFnaW5nUG9wdWxhdGlvbk1vZGVsRUNsYXNzID0gbnVsbDsNCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcml2YXRlIEVDbGFzcyBhZ2VHcm91cEVDbGFzcyA9IG51bGw7DQorDQorCS8qKg0KKwkgKiBDcmVhdGVzIGFuIGluc3RhbmNlIG9mIHRoZSBtb2RlbCA8Yj5QYWNrYWdlPC9iPiwgcmVnaXN0ZXJlZCB3aXRoDQorCSAqIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRVBhY2thZ2UuUmVnaXN0cnkgRVBhY2thZ2UuUmVnaXN0cnl9IGJ5IHRoZSBwYWNrYWdlDQorCSAqIHBhY2thZ2UgVVJJIHZhbHVlLg0KKwkgKiA8cD5Ob3RlOiB0aGUgY29ycmVjdCB3YXkgdG8gY3JlYXRlIHRoZSBwYWNrYWdlIGlzIHZpYSB0aGUgc3RhdGljDQorCSAqIGZhY3RvcnkgbWV0aG9kIHtAbGluayAjaW5pdCBpbml0KCl9LCB3aGljaCBhbHNvIHBlcmZvcm1zDQorCSAqIGluaXRpYWxpemF0aW9uIG9mIHRoZSBwYWNrYWdlLCBvciByZXR1cm5zIHRoZSByZWdpc3RlcmVkIHBhY2thZ2UsDQorCSAqIGlmIG9uZSBhbHJlYWR5IGV4aXN0cy4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBzZWUgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVQYWNrYWdlLlJlZ2lzdHJ5DQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkUGFja2FnZSNlTlNfVVJJDQorCSAqIEBzZWUgI2luaXQoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcml2YXRlIFN0YW5kYXJkUGFja2FnZUltcGwoKSB7DQorCQlzdXBlcihlTlNfVVJJLCBTdGFuZGFyZEZhY3RvcnkuZUlOU1RBTkNFKTsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByaXZhdGUgc3RhdGljIGJvb2xlYW4gaXNJbml0ZWQgPSBmYWxzZTsNCisNCisJLyoqDQorCSAqIENyZWF0ZXMsIHJlZ2lzdGVycywgYW5kIGluaXRpYWxpemVzIHRoZSA8Yj5QYWNrYWdlPC9iPiBmb3IgdGhpcyBtb2RlbCwgYW5kIGZvciBhbnkgb3RoZXJzIHVwb24gd2hpY2ggaXQgZGVwZW5kcy4NCisJICogDQorCSAqIDxwPlRoaXMgbWV0aG9kIGlzIHVzZWQgdG8gaW5pdGlhbGl6ZSB7QGxpbmsgU3RhbmRhcmRQYWNrYWdlI2VJTlNUQU5DRX0gd2hlbiB0aGF0IGZpZWxkIGlzIGFjY2Vzc2VkLg0KKwkgKiBDbGllbnRzIHNob3VsZCBub3QgaW52b2tlIGl0IGRpcmVjdGx5LiBJbnN0ZWFkLCB0aGV5IHNob3VsZCBzaW1wbHkgYWNjZXNzIHRoYXQgZmllbGQgdG8gb2J0YWluIHRoZSBwYWNrYWdlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHNlZSAjZU5TX1VSSQ0KKwkgKiBAc2VlICNjcmVhdGVQYWNrYWdlQ29udGVudHMoKQ0KKwkgKiBAc2VlICNpbml0aWFsaXplUGFja2FnZUNvbnRlbnRzKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIHN0YXRpYyBTdGFuZGFyZFBhY2thZ2UgaW5pdCgpIHsNCisJCWlmIChpc0luaXRlZCkgcmV0dXJuIChTdGFuZGFyZFBhY2thZ2UpRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RVBhY2thZ2UoU3RhbmRhcmRQYWNrYWdlLmVOU19VUkkpOw0KKw0KKwkJLy8gT2J0YWluIG9yIGNyZWF0ZSBhbmQgcmVnaXN0ZXIgcGFja2FnZQ0KKwkJU3RhbmRhcmRQYWNrYWdlSW1wbCB0aGVTdGFuZGFyZFBhY2thZ2UgPSAoU3RhbmRhcmRQYWNrYWdlSW1wbCkoRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0KGVOU19VUkkpIGluc3RhbmNlb2YgU3RhbmRhcmRQYWNrYWdlSW1wbCA/IEVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldChlTlNfVVJJKSA6IG5ldyBTdGFuZGFyZFBhY2thZ2VJbXBsKCkpOw0KKw0KKwkJaXNJbml0ZWQgPSB0cnVlOw0KKw0KKwkJLy8gSW5pdGlhbGl6ZSBzaW1wbGUgZGVwZW5kZW5jaWVzDQorCQlMYWJlbHNQYWNrYWdlLmVJTlNUQU5DRS5lQ2xhc3MoKTsNCisJCUxvZ2dlclBhY2thZ2UuZUlOU1RBTkNFLmVDbGFzcygpOw0KKw0KKwkJLy8gQ3JlYXRlIHBhY2thZ2UgbWV0YS1kYXRhIG9iamVjdHMNCisJCXRoZVN0YW5kYXJkUGFja2FnZS5jcmVhdGVQYWNrYWdlQ29udGVudHMoKTsNCisNCisJCS8vIEluaXRpYWxpemUgY3JlYXRlZCBtZXRhLWRhdGENCisJCXRoZVN0YW5kYXJkUGFja2FnZS5pbml0aWFsaXplUGFja2FnZUNvbnRlbnRzKCk7DQorDQorCQkvLyBNYXJrIG1ldGEtZGF0YSB0byBpbmRpY2F0ZSBpdCBjYW4ndCBiZSBjaGFuZ2VkDQorCQl0aGVTdGFuZGFyZFBhY2thZ2UuZnJlZXplKCk7DQorDQorICANCisJCS8vIFVwZGF0ZSB0aGUgcmVnaXN0cnkgYW5kIHJldHVybiB0aGUgcGFja2FnZQ0KKwkJRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UucHV0KFN0YW5kYXJkUGFja2FnZS5lTlNfVVJJLCB0aGVTdGFuZGFyZFBhY2thZ2UpOw0KKwkJcmV0dXJuIHRoZVN0YW5kYXJkUGFja2FnZTsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBFQ2xhc3MgZ2V0UG9wdWxhdGlvbk1vZGVsKCkgew0KKwkJcmV0dXJuIHBvcHVsYXRpb25Nb2RlbEVDbGFzczsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBFQXR0cmlidXRlIGdldFBvcHVsYXRpb25Nb2RlbF9Qb3B1bGF0aW9uSWRlbnRpZmllcigpIHsNCisJCXJldHVybiAoRUF0dHJpYnV0ZSlwb3B1bGF0aW9uTW9kZWxFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgwKTsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBFQXR0cmlidXRlIGdldFBvcHVsYXRpb25Nb2RlbF9OYW1lKCkgew0KKwkJcmV0dXJuIChFQXR0cmlidXRlKXBvcHVsYXRpb25Nb2RlbEVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDEpOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIEVBdHRyaWJ1dGUgZ2V0UG9wdWxhdGlvbk1vZGVsX1RhcmdldElTT0tleSgpIHsNCisJCXJldHVybiAoRUF0dHJpYnV0ZSlwb3B1bGF0aW9uTW9kZWxFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgyKTsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBFQ2xhc3MgZ2V0U3RhbmRhcmRQb3B1bGF0aW9uTW9kZWwoKSB7DQorCQlyZXR1cm4gc3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxFQ2xhc3M7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgRUF0dHJpYnV0ZSBnZXRTdGFuZGFyZFBvcHVsYXRpb25Nb2RlbF9CaXJ0aFJhdGUoKSB7DQorCQlyZXR1cm4gKEVBdHRyaWJ1dGUpc3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgwKTsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBFQXR0cmlidXRlIGdldFN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsX0RlYXRoUmF0ZSgpIHsNCisJCXJldHVybiAoRUF0dHJpYnV0ZSlzdGFuZGFyZFBvcHVsYXRpb25Nb2RlbEVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDEpOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIEVBdHRyaWJ1dGUgZ2V0U3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxfVGltZVBlcmlvZCgpIHsNCisJCXJldHVybiAoRUF0dHJpYnV0ZSlzdGFuZGFyZFBvcHVsYXRpb25Nb2RlbEVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDIpOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIEVDbGFzcyBnZXRQb3B1bGF0aW9uTW9kZWxMYWJlbCgpIHsNCisJCXJldHVybiBwb3B1bGF0aW9uTW9kZWxMYWJlbEVDbGFzczsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBFUmVmZXJlbmNlIGdldFBvcHVsYXRpb25Nb2RlbExhYmVsX1BvcHVsYXRpb25MYWJlbCgpIHsNCisJCXJldHVybiAoRVJlZmVyZW5jZSlwb3B1bGF0aW9uTW9kZWxMYWJlbEVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDApOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIEVBdHRyaWJ1dGUgZ2V0UG9wdWxhdGlvbk1vZGVsTGFiZWxfUG9wdWxhdGlvbklkZW50aWZpZXIoKSB7DQorCQlyZXR1cm4gKEVBdHRyaWJ1dGUpcG9wdWxhdGlvbk1vZGVsTGFiZWxFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgxKTsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBFQ2xhc3MgZ2V0U3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxMYWJlbCgpIHsNCisJCXJldHVybiBzdGFuZGFyZFBvcHVsYXRpb25Nb2RlbExhYmVsRUNsYXNzOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIEVDbGFzcyBnZXRQb3B1bGF0aW9uTW9kZWxMYWJlbFZhbHVlKCkgew0KKwkJcmV0dXJuIHBvcHVsYXRpb25Nb2RlbExhYmVsVmFsdWVFQ2xhc3M7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgRUNsYXNzIGdldFN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWxWYWx1ZSgpIHsNCisJCXJldHVybiBzdGFuZGFyZFBvcHVsYXRpb25Nb2RlbExhYmVsVmFsdWVFQ2xhc3M7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgRUF0dHJpYnV0ZSBnZXRTdGFuZGFyZFBvcHVsYXRpb25Nb2RlbExhYmVsVmFsdWVfQ291bnQoKSB7DQorCQlyZXR1cm4gKEVBdHRyaWJ1dGUpc3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxMYWJlbFZhbHVlRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMCk7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgRUF0dHJpYnV0ZSBnZXRTdGFuZGFyZFBvcHVsYXRpb25Nb2RlbExhYmVsVmFsdWVfQmlydGhzKCkgew0KKwkJcmV0dXJuIChFQXR0cmlidXRlKXN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWxWYWx1ZUVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDEpOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIEVBdHRyaWJ1dGUgZ2V0U3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxMYWJlbFZhbHVlX0RlYXRocygpIHsNCisJCXJldHVybiAoRUF0dHJpYnV0ZSlzdGFuZGFyZFBvcHVsYXRpb25Nb2RlbExhYmVsVmFsdWVFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgyKTsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBFQXR0cmlidXRlIGdldFN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWxWYWx1ZV9EZW5zaXR5KCkgew0KKwkJcmV0dXJuIChFQXR0cmlidXRlKXN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWxWYWx1ZUVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDMpOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIEVDbGFzcyBnZXRTdG9jaGFzdGljU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWwoKSB7DQorCQlyZXR1cm4gc3RvY2hhc3RpY1N0YW5kYXJkUG9wdWxhdGlvbk1vZGVsRUNsYXNzOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIEVBdHRyaWJ1dGUgZ2V0U3RvY2hhc3RpY1N0YW5kYXJkUG9wdWxhdGlvbk1vZGVsX0dhaW4oKSB7DQorCQlyZXR1cm4gKEVBdHRyaWJ1dGUpc3RvY2hhc3RpY1N0YW5kYXJkUG9wdWxhdGlvbk1vZGVsRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMCk7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgRUNsYXNzIGdldERlbW9ncmFwaGljUG9wdWxhdGlvbk1vZGVsKCkgew0KKwkJcmV0dXJuIGRlbW9ncmFwaGljUG9wdWxhdGlvbk1vZGVsRUNsYXNzOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIEVSZWZlcmVuY2UgZ2V0RGVtb2dyYXBoaWNQb3B1bGF0aW9uTW9kZWxfUG9wdWxhdGlvbkdyb3VwcygpIHsNCisJCXJldHVybiAoRVJlZmVyZW5jZSlkZW1vZ3JhcGhpY1BvcHVsYXRpb25Nb2RlbEVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDApOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIEVDbGFzcyBnZXRQb3B1bGF0aW9uR3JvdXAoKSB7DQorCQlyZXR1cm4gcG9wdWxhdGlvbkdyb3VwRUNsYXNzOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIEVBdHRyaWJ1dGUgZ2V0UG9wdWxhdGlvbkdyb3VwX0lkZW50aWZpZXIoKSB7DQorCQlyZXR1cm4gKEVBdHRyaWJ1dGUpcG9wdWxhdGlvbkdyb3VwRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMCk7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgRUF0dHJpYnV0ZSBnZXRQb3B1bGF0aW9uR3JvdXBfRnJhY3Rpb24oKSB7DQorCQlyZXR1cm4gKEVBdHRyaWJ1dGUpcG9wdWxhdGlvbkdyb3VwRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMSk7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgRUNsYXNzIGdldFBvcHVsYXRpb25Jbml0aWFsaXplcigpIHsNCisJCXJldHVybiBwb3B1bGF0aW9uSW5pdGlhbGl6ZXJFQ2xhc3M7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgRUF0dHJpYnV0ZSBnZXRQb3B1bGF0aW9uSW5pdGlhbGl6ZXJfVGFyZ2V0SVNPS2V5KCkgew0KKwkJcmV0dXJuIChFQXR0cmlidXRlKXBvcHVsYXRpb25Jbml0aWFsaXplckVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDApOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIEVBdHRyaWJ1dGUgZ2V0UG9wdWxhdGlvbkluaXRpYWxpemVyX1BvcHVsYXRpb25JZGVudGlmaWVyKCkgew0KKwkJcmV0dXJuIChFQXR0cmlidXRlKXBvcHVsYXRpb25Jbml0aWFsaXplckVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDEpOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIEVDbGFzcyBnZXRTdGFuZGFyZFBvcHVsYXRpb25Jbml0aWFsaXplcigpIHsNCisJCXJldHVybiBzdGFuZGFyZFBvcHVsYXRpb25Jbml0aWFsaXplckVDbGFzczsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBFQXR0cmlidXRlIGdldFN0YW5kYXJkUG9wdWxhdGlvbkluaXRpYWxpemVyX0luZGl2aWR1YWxzKCkgew0KKwkJcmV0dXJuIChFQXR0cmlidXRlKXN0YW5kYXJkUG9wdWxhdGlvbkluaXRpYWxpemVyRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMCk7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgRUF0dHJpYnV0ZSBnZXRTdGFuZGFyZFBvcHVsYXRpb25Jbml0aWFsaXplcl9Vc2VEZW5zaXR5KCkgew0KKwkJcmV0dXJuIChFQXR0cmlidXRlKXN0YW5kYXJkUG9wdWxhdGlvbkluaXRpYWxpemVyRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMSk7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgRUNsYXNzIGdldFNlYXNvbmFsUG9wdWxhdGlvbk1vZGVsKCkgew0KKwkJcmV0dXJuIHNlYXNvbmFsUG9wdWxhdGlvbk1vZGVsRUNsYXNzOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIEVBdHRyaWJ1dGUgZ2V0U2Vhc29uYWxQb3B1bGF0aW9uTW9kZWxfUGhhc2UoKSB7DQorCQlyZXR1cm4gKEVBdHRyaWJ1dGUpc2Vhc29uYWxQb3B1bGF0aW9uTW9kZWxFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgwKTsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBFQXR0cmlidXRlIGdldFNlYXNvbmFsUG9wdWxhdGlvbk1vZGVsX01vZHVsYXRpb25BbXBsaXR1ZGUoKSB7DQorCQlyZXR1cm4gKEVBdHRyaWJ1dGUpc2Vhc29uYWxQb3B1bGF0aW9uTW9kZWxFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgxKTsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBFQXR0cmlidXRlIGdldFNlYXNvbmFsUG9wdWxhdGlvbk1vZGVsX1BlcmlvZCgpIHsNCisJCXJldHVybiAoRUF0dHJpYnV0ZSlzZWFzb25hbFBvcHVsYXRpb25Nb2RlbEVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDIpOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIEVBdHRyaWJ1dGUgZ2V0U2Vhc29uYWxQb3B1bGF0aW9uTW9kZWxfVXNlTGF0aXR1ZGUoKSB7DQorCQlyZXR1cm4gKEVBdHRyaWJ1dGUpc2Vhc29uYWxQb3B1bGF0aW9uTW9kZWxFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgzKTsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBFQ2xhc3MgZ2V0RWFydGhTY2llbmNlUG9wdWxhdGlvbkluaXRpYWxpemVyKCkgew0KKwkJcmV0dXJuIGVhcnRoU2NpZW5jZVBvcHVsYXRpb25Jbml0aWFsaXplckVDbGFzczsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBFQ2xhc3MgZ2V0WWV0aVBvcHVsYXRpb25Jbml0aWFsaXplcigpIHsNCisJCXJldHVybiB5ZXRpUG9wdWxhdGlvbkluaXRpYWxpemVyRUNsYXNzOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIEVDbGFzcyBnZXRNb3NxdWl0b1BvcHVsYXRpb25Nb2RlbCgpIHsNCisJCXJldHVybiBtb3NxdWl0b1BvcHVsYXRpb25Nb2RlbEVDbGFzczsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBFQXR0cmlidXRlIGdldE1vc3F1aXRvUG9wdWxhdGlvbk1vZGVsX1NjYWxpbmdGYWN0b3IoKSB7DQorCQlyZXR1cm4gKEVBdHRyaWJ1dGUpbW9zcXVpdG9Qb3B1bGF0aW9uTW9kZWxFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgwKTsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBFQXR0cmlidXRlIGdldE1vc3F1aXRvUG9wdWxhdGlvbk1vZGVsX1RpbWVQZXJpb2QoKSB7DQorCQlyZXR1cm4gKEVBdHRyaWJ1dGUpbW9zcXVpdG9Qb3B1bGF0aW9uTW9kZWxFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgxKTsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBFQXR0cmlidXRlIGdldE1vc3F1aXRvUG9wdWxhdGlvbk1vZGVsX01vcnRhbGl0eVJhdGUoKSB7DQorCQlyZXR1cm4gKEVBdHRyaWJ1dGUpbW9zcXVpdG9Qb3B1bGF0aW9uTW9kZWxFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgyKTsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBFQXR0cmlidXRlIGdldE1vc3F1aXRvUG9wdWxhdGlvbk1vZGVsX0hvc3QoKSB7DQorCQlyZXR1cm4gKEVBdHRyaWJ1dGUpbW9zcXVpdG9Qb3B1bGF0aW9uTW9kZWxFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgzKTsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBFQ2xhc3MgZ2V0QWdpbmdQb3B1bGF0aW9uTW9kZWwoKSB7DQorCQlyZXR1cm4gYWdpbmdQb3B1bGF0aW9uTW9kZWxFQ2xhc3M7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgRUF0dHJpYnV0ZSBnZXRBZ2luZ1BvcHVsYXRpb25Nb2RlbF9IYXNNYXhBZ2UoKSB7DQorCQlyZXR1cm4gKEVBdHRyaWJ1dGUpYWdpbmdQb3B1bGF0aW9uTW9kZWxFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgwKTsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBFQ2xhc3MgZ2V0QWdlR3JvdXAoKSB7DQorCQlyZXR1cm4gYWdlR3JvdXBFQ2xhc3M7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgRUF0dHJpYnV0ZSBnZXRBZ2VHcm91cF9Gcm9tQWdlKCkgew0KKwkJcmV0dXJuIChFQXR0cmlidXRlKWFnZUdyb3VwRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMCk7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgRUF0dHJpYnV0ZSBnZXRBZ2VHcm91cF9Ub0FnZSgpIHsNCisJCXJldHVybiAoRUF0dHJpYnV0ZSlhZ2VHcm91cEVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDEpOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIEVBdHRyaWJ1dGUgZ2V0QWdlR3JvdXBfRGVhdGhGYWN0b3IoKSB7DQorCQlyZXR1cm4gKEVBdHRyaWJ1dGUpYWdlR3JvdXBFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgyKTsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBFQXR0cmlidXRlIGdldEFnZUdyb3VwX0xpbWl0ZWQoKSB7DQorCQlyZXR1cm4gKEVBdHRyaWJ1dGUpYWdlR3JvdXBFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgzKTsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBTdGFuZGFyZEZhY3RvcnkgZ2V0U3RhbmRhcmRGYWN0b3J5KCkgew0KKwkJcmV0dXJuIChTdGFuZGFyZEZhY3RvcnkpZ2V0RUZhY3RvcnlJbnN0YW5jZSgpOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJpdmF0ZSBib29sZWFuIGlzQ3JlYXRlZCA9IGZhbHNlOw0KKw0KKwkvKioNCisJICogQ3JlYXRlcyB0aGUgbWV0YS1tb2RlbCBvYmplY3RzIGZvciB0aGUgcGFja2FnZS4gIFRoaXMgbWV0aG9kIGlzDQorCSAqIGd1YXJkZWQgdG8gaGF2ZSBubyBhZmZlY3Qgb24gYW55IGludm9jYXRpb24gYnV0IGl0cyBmaXJzdC4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyB2b2lkIGNyZWF0ZVBhY2thZ2VDb250ZW50cygpIHsNCisJCWlmIChpc0NyZWF0ZWQpIHJldHVybjsNCisJCWlzQ3JlYXRlZCA9IHRydWU7DQorDQorCQkvLyBDcmVhdGUgY2xhc3NlcyBhbmQgdGhlaXIgZmVhdHVyZXMNCisJCXBvcHVsYXRpb25Nb2RlbEVDbGFzcyA9IGNyZWF0ZUVDbGFzcyhQT1BVTEFUSU9OX01PREVMKTsNCisJCWNyZWF0ZUVBdHRyaWJ1dGUocG9wdWxhdGlvbk1vZGVsRUNsYXNzLCBQT1BVTEFUSU9OX01PREVMX19QT1BVTEFUSU9OX0lERU5USUZJRVIpOw0KKwkJY3JlYXRlRUF0dHJpYnV0ZShwb3B1bGF0aW9uTW9kZWxFQ2xhc3MsIFBPUFVMQVRJT05fTU9ERUxfX05BTUUpOw0KKwkJY3JlYXRlRUF0dHJpYnV0ZShwb3B1bGF0aW9uTW9kZWxFQ2xhc3MsIFBPUFVMQVRJT05fTU9ERUxfX1RBUkdFVF9JU09fS0VZKTsNCisNCisJCXN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsRUNsYXNzID0gY3JlYXRlRUNsYXNzKFNUQU5EQVJEX1BPUFVMQVRJT05fTU9ERUwpOw0KKwkJY3JlYXRlRUF0dHJpYnV0ZShzdGFuZGFyZFBvcHVsYXRpb25Nb2RlbEVDbGFzcywgU1RBTkRBUkRfUE9QVUxBVElPTl9NT0RFTF9fQklSVEhfUkFURSk7DQorCQljcmVhdGVFQXR0cmlidXRlKHN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsRUNsYXNzLCBTVEFOREFSRF9QT1BVTEFUSU9OX01PREVMX19ERUFUSF9SQVRFKTsNCisJCWNyZWF0ZUVBdHRyaWJ1dGUoc3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxFQ2xhc3MsIFNUQU5EQVJEX1BPUFVMQVRJT05fTU9ERUxfX1RJTUVfUEVSSU9EKTsNCisNCisJCXBvcHVsYXRpb25Nb2RlbExhYmVsRUNsYXNzID0gY3JlYXRlRUNsYXNzKFBPUFVMQVRJT05fTU9ERUxfTEFCRUwpOw0KKwkJY3JlYXRlRVJlZmVyZW5jZShwb3B1bGF0aW9uTW9kZWxMYWJlbEVDbGFzcywgUE9QVUxBVElPTl9NT0RFTF9MQUJFTF9fUE9QVUxBVElPTl9MQUJFTCk7DQorCQljcmVhdGVFQXR0cmlidXRlKHBvcHVsYXRpb25Nb2RlbExhYmVsRUNsYXNzLCBQT1BVTEFUSU9OX01PREVMX0xBQkVMX19QT1BVTEFUSU9OX0lERU5USUZJRVIpOw0KKw0KKwkJc3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxMYWJlbEVDbGFzcyA9IGNyZWF0ZUVDbGFzcyhTVEFOREFSRF9QT1BVTEFUSU9OX01PREVMX0xBQkVMKTsNCisNCisJCXBvcHVsYXRpb25Nb2RlbExhYmVsVmFsdWVFQ2xhc3MgPSBjcmVhdGVFQ2xhc3MoUE9QVUxBVElPTl9NT0RFTF9MQUJFTF9WQUxVRSk7DQorDQorCQlzdGFuZGFyZFBvcHVsYXRpb25Nb2RlbExhYmVsVmFsdWVFQ2xhc3MgPSBjcmVhdGVFQ2xhc3MoU1RBTkRBUkRfUE9QVUxBVElPTl9NT0RFTF9MQUJFTF9WQUxVRSk7DQorCQljcmVhdGVFQXR0cmlidXRlKHN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWxWYWx1ZUVDbGFzcywgU1RBTkRBUkRfUE9QVUxBVElPTl9NT0RFTF9MQUJFTF9WQUxVRV9fQ09VTlQpOw0KKwkJY3JlYXRlRUF0dHJpYnV0ZShzdGFuZGFyZFBvcHVsYXRpb25Nb2RlbExhYmVsVmFsdWVFQ2xhc3MsIFNUQU5EQVJEX1BPUFVMQVRJT05fTU9ERUxfTEFCRUxfVkFMVUVfX0JJUlRIUyk7DQorCQljcmVhdGVFQXR0cmlidXRlKHN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWxWYWx1ZUVDbGFzcywgU1RBTkRBUkRfUE9QVUxBVElPTl9NT0RFTF9MQUJFTF9WQUxVRV9fREVBVEhTKTsNCisJCWNyZWF0ZUVBdHRyaWJ1dGUoc3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxMYWJlbFZhbHVlRUNsYXNzLCBTVEFOREFSRF9QT1BVTEFUSU9OX01PREVMX0xBQkVMX1ZBTFVFX19ERU5TSVRZKTsNCisNCisJCXN0b2NoYXN0aWNTdGFuZGFyZFBvcHVsYXRpb25Nb2RlbEVDbGFzcyA9IGNyZWF0ZUVDbGFzcyhTVE9DSEFTVElDX1NUQU5EQVJEX1BPUFVMQVRJT05fTU9ERUwpOw0KKwkJY3JlYXRlRUF0dHJpYnV0ZShzdG9jaGFzdGljU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxFQ2xhc3MsIFNUT0NIQVNUSUNfU1RBTkRBUkRfUE9QVUxBVElPTl9NT0RFTF9fR0FJTik7DQorDQorCQlkZW1vZ3JhcGhpY1BvcHVsYXRpb25Nb2RlbEVDbGFzcyA9IGNyZWF0ZUVDbGFzcyhERU1PR1JBUEhJQ19QT1BVTEFUSU9OX01PREVMKTsNCisJCWNyZWF0ZUVSZWZlcmVuY2UoZGVtb2dyYXBoaWNQb3B1bGF0aW9uTW9kZWxFQ2xhc3MsIERFTU9HUkFQSElDX1BPUFVMQVRJT05fTU9ERUxfX1BPUFVMQVRJT05fR1JPVVBTKTsNCisNCisJCXBvcHVsYXRpb25Hcm91cEVDbGFzcyA9IGNyZWF0ZUVDbGFzcyhQT1BVTEFUSU9OX0dST1VQKTsNCisJCWNyZWF0ZUVBdHRyaWJ1dGUocG9wdWxhdGlvbkdyb3VwRUNsYXNzLCBQT1BVTEFUSU9OX0dST1VQX19JREVOVElGSUVSKTsNCisJCWNyZWF0ZUVBdHRyaWJ1dGUocG9wdWxhdGlvbkdyb3VwRUNsYXNzLCBQT1BVTEFUSU9OX0dST1VQX19GUkFDVElPTik7DQorDQorCQlwb3B1bGF0aW9uSW5pdGlhbGl6ZXJFQ2xhc3MgPSBjcmVhdGVFQ2xhc3MoUE9QVUxBVElPTl9JTklUSUFMSVpFUik7DQorCQljcmVhdGVFQXR0cmlidXRlKHBvcHVsYXRpb25Jbml0aWFsaXplckVDbGFzcywgUE9QVUxBVElPTl9JTklUSUFMSVpFUl9fVEFSR0VUX0lTT19LRVkpOw0KKwkJY3JlYXRlRUF0dHJpYnV0ZShwb3B1bGF0aW9uSW5pdGlhbGl6ZXJFQ2xhc3MsIFBPUFVMQVRJT05fSU5JVElBTElaRVJfX1BPUFVMQVRJT05fSURFTlRJRklFUik7DQorDQorCQlzdGFuZGFyZFBvcHVsYXRpb25Jbml0aWFsaXplckVDbGFzcyA9IGNyZWF0ZUVDbGFzcyhTVEFOREFSRF9QT1BVTEFUSU9OX0lOSVRJQUxJWkVSKTsNCisJCWNyZWF0ZUVBdHRyaWJ1dGUoc3RhbmRhcmRQb3B1bGF0aW9uSW5pdGlhbGl6ZXJFQ2xhc3MsIFNUQU5EQVJEX1BPUFVMQVRJT05fSU5JVElBTElaRVJfX0lORElWSURVQUxTKTsNCisJCWNyZWF0ZUVBdHRyaWJ1dGUoc3RhbmRhcmRQb3B1bGF0aW9uSW5pdGlhbGl6ZXJFQ2xhc3MsIFNUQU5EQVJEX1BPUFVMQVRJT05fSU5JVElBTElaRVJfX1VTRV9ERU5TSVRZKTsNCisNCisJCXNlYXNvbmFsUG9wdWxhdGlvbk1vZGVsRUNsYXNzID0gY3JlYXRlRUNsYXNzKFNFQVNPTkFMX1BPUFVMQVRJT05fTU9ERUwpOw0KKwkJY3JlYXRlRUF0dHJpYnV0ZShzZWFzb25hbFBvcHVsYXRpb25Nb2RlbEVDbGFzcywgU0VBU09OQUxfUE9QVUxBVElPTl9NT0RFTF9fUEhBU0UpOw0KKwkJY3JlYXRlRUF0dHJpYnV0ZShzZWFzb25hbFBvcHVsYXRpb25Nb2RlbEVDbGFzcywgU0VBU09OQUxfUE9QVUxBVElPTl9NT0RFTF9fTU9EVUxBVElPTl9BTVBMSVRVREUpOw0KKwkJY3JlYXRlRUF0dHJpYnV0ZShzZWFzb25hbFBvcHVsYXRpb25Nb2RlbEVDbGFzcywgU0VBU09OQUxfUE9QVUxBVElPTl9NT0RFTF9fUEVSSU9EKTsNCisJCWNyZWF0ZUVBdHRyaWJ1dGUoc2Vhc29uYWxQb3B1bGF0aW9uTW9kZWxFQ2xhc3MsIFNFQVNPTkFMX1BPUFVMQVRJT05fTU9ERUxfX1VTRV9MQVRJVFVERSk7DQorDQorCQllYXJ0aFNjaWVuY2VQb3B1bGF0aW9uSW5pdGlhbGl6ZXJFQ2xhc3MgPSBjcmVhdGVFQ2xhc3MoRUFSVEhfU0NJRU5DRV9QT1BVTEFUSU9OX0lOSVRJQUxJWkVSKTsNCisNCisJCXlldGlQb3B1bGF0aW9uSW5pdGlhbGl6ZXJFQ2xhc3MgPSBjcmVhdGVFQ2xhc3MoWUVUSV9QT1BVTEFUSU9OX0lOSVRJQUxJWkVSKTsNCisNCisJCW1vc3F1aXRvUG9wdWxhdGlvbk1vZGVsRUNsYXNzID0gY3JlYXRlRUNsYXNzKE1PU1FVSVRPX1BPUFVMQVRJT05fTU9ERUwpOw0KKwkJY3JlYXRlRUF0dHJpYnV0ZShtb3NxdWl0b1BvcHVsYXRpb25Nb2RlbEVDbGFzcywgTU9TUVVJVE9fUE9QVUxBVElPTl9NT0RFTF9fU0NBTElOR19GQUNUT1IpOw0KKwkJY3JlYXRlRUF0dHJpYnV0ZShtb3NxdWl0b1BvcHVsYXRpb25Nb2RlbEVDbGFzcywgTU9TUVVJVE9fUE9QVUxBVElPTl9NT0RFTF9fVElNRV9QRVJJT0QpOw0KKwkJY3JlYXRlRUF0dHJpYnV0ZShtb3NxdWl0b1BvcHVsYXRpb25Nb2RlbEVDbGFzcywgTU9TUVVJVE9fUE9QVUxBVElPTl9NT0RFTF9fTU9SVEFMSVRZX1JBVEUpOw0KKwkJY3JlYXRlRUF0dHJpYnV0ZShtb3NxdWl0b1BvcHVsYXRpb25Nb2RlbEVDbGFzcywgTU9TUVVJVE9fUE9QVUxBVElPTl9NT0RFTF9fSE9TVCk7DQorDQorCQlhZ2luZ1BvcHVsYXRpb25Nb2RlbEVDbGFzcyA9IGNyZWF0ZUVDbGFzcyhBR0lOR19QT1BVTEFUSU9OX01PREVMKTsNCisJCWNyZWF0ZUVBdHRyaWJ1dGUoYWdpbmdQb3B1bGF0aW9uTW9kZWxFQ2xhc3MsIEFHSU5HX1BPUFVMQVRJT05fTU9ERUxfX0hBU19NQVhfQUdFKTsNCisNCisJCWFnZUdyb3VwRUNsYXNzID0gY3JlYXRlRUNsYXNzKEFHRV9HUk9VUCk7DQorCQljcmVhdGVFQXR0cmlidXRlKGFnZUdyb3VwRUNsYXNzLCBBR0VfR1JPVVBfX0ZST01fQUdFKTsNCisJCWNyZWF0ZUVBdHRyaWJ1dGUoYWdlR3JvdXBFQ2xhc3MsIEFHRV9HUk9VUF9fVE9fQUdFKTsNCisJCWNyZWF0ZUVBdHRyaWJ1dGUoYWdlR3JvdXBFQ2xhc3MsIEFHRV9HUk9VUF9fREVBVEhfRkFDVE9SKTsNCisJCWNyZWF0ZUVBdHRyaWJ1dGUoYWdlR3JvdXBFQ2xhc3MsIEFHRV9HUk9VUF9fTElNSVRFRCk7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcml2YXRlIGJvb2xlYW4gaXNJbml0aWFsaXplZCA9IGZhbHNlOw0KKw0KKwkvKioNCisJICogQ29tcGxldGUgdGhlIGluaXRpYWxpemF0aW9uIG9mIHRoZSBwYWNrYWdlIGFuZCBpdHMgbWV0YS1tb2RlbC4gIFRoaXMNCisJICogbWV0aG9kIGlzIGd1YXJkZWQgdG8gaGF2ZSBubyBhZmZlY3Qgb24gYW55IGludm9jYXRpb24gYnV0IGl0cyBmaXJzdC4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyB2b2lkIGluaXRpYWxpemVQYWNrYWdlQ29udGVudHMoKSB7DQorCQlpZiAoaXNJbml0aWFsaXplZCkgcmV0dXJuOw0KKwkJaXNJbml0aWFsaXplZCA9IHRydWU7DQorDQorCQkvLyBJbml0aWFsaXplIHBhY2thZ2UNCisJCXNldE5hbWUoZU5BTUUpOw0KKwkJc2V0TnNQcmVmaXgoZU5TX1BSRUZJWCk7DQorCQlzZXROc1VSSShlTlNfVVJJKTsNCisNCisJCS8vIE9idGFpbiBvdGhlciBkZXBlbmRlbnQgcGFja2FnZXMNCisJCU1vZGVsUGFja2FnZSB0aGVNb2RlbFBhY2thZ2UgPSAoTW9kZWxQYWNrYWdlKUVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVQYWNrYWdlKE1vZGVsUGFja2FnZS5lTlNfVVJJKTsNCisJCU1vZGlmaWVyUGFja2FnZSB0aGVNb2RpZmllclBhY2thZ2UgPSAoTW9kaWZpZXJQYWNrYWdlKUVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVQYWNrYWdlKE1vZGlmaWVyUGFja2FnZS5lTlNfVVJJKTsNCisJCUVjb3JlUGFja2FnZSB0aGVFY29yZVBhY2thZ2UgPSAoRWNvcmVQYWNrYWdlKUVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVQYWNrYWdlKEVjb3JlUGFja2FnZS5lTlNfVVJJKTsNCisJCUdyYXBoUGFja2FnZSB0aGVHcmFwaFBhY2thZ2UgPSAoR3JhcGhQYWNrYWdlKUVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVQYWNrYWdlKEdyYXBoUGFja2FnZS5lTlNfVVJJKTsNCisJCUxhYmVsc1BhY2thZ2UgdGhlTGFiZWxzUGFja2FnZSA9IChMYWJlbHNQYWNrYWdlKUVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVQYWNrYWdlKExhYmVsc1BhY2thZ2UuZU5TX1VSSSk7DQorDQorCQkvLyBDcmVhdGUgdHlwZSBwYXJhbWV0ZXJzDQorDQorCQkvLyBTZXQgYm91bmRzIGZvciB0eXBlIHBhcmFtZXRlcnMNCisNCisJCS8vIEFkZCBzdXBlcnR5cGVzIHRvIGNsYXNzZXMNCisJCXBvcHVsYXRpb25Nb2RlbEVDbGFzcy5nZXRFU3VwZXJUeXBlcygpLmFkZCh0aGVNb2RlbFBhY2thZ2UuZ2V0SW50ZWdyYXRpb25EZWNvcmF0b3IoKSk7DQorCQlwb3B1bGF0aW9uTW9kZWxFQ2xhc3MuZ2V0RVN1cGVyVHlwZXMoKS5hZGQodGhlTW9kaWZpZXJQYWNrYWdlLmdldE1vZGlmaWFibGUoKSk7DQorCQlzdGFuZGFyZFBvcHVsYXRpb25Nb2RlbEVDbGFzcy5nZXRFU3VwZXJUeXBlcygpLmFkZCh0aGlzLmdldFBvcHVsYXRpb25Nb2RlbCgpKTsNCisJCXBvcHVsYXRpb25Nb2RlbExhYmVsRUNsYXNzLmdldEVTdXBlclR5cGVzKCkuYWRkKHRoZUdyYXBoUGFja2FnZS5nZXRJbnRlZ3JhdGlvbkxhYmVsKCkpOw0KKwkJc3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxMYWJlbEVDbGFzcy5nZXRFU3VwZXJUeXBlcygpLmFkZCh0aGlzLmdldFBvcHVsYXRpb25Nb2RlbExhYmVsKCkpOw0KKwkJcG9wdWxhdGlvbk1vZGVsTGFiZWxWYWx1ZUVDbGFzcy5nZXRFU3VwZXJUeXBlcygpLmFkZCh0aGVHcmFwaFBhY2thZ2UuZ2V0SW50ZWdyYXRpb25MYWJlbFZhbHVlKCkpOw0KKwkJc3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxMYWJlbFZhbHVlRUNsYXNzLmdldEVTdXBlclR5cGVzKCkuYWRkKHRoaXMuZ2V0UG9wdWxhdGlvbk1vZGVsTGFiZWxWYWx1ZSgpKTsNCisJCXN0b2NoYXN0aWNTdGFuZGFyZFBvcHVsYXRpb25Nb2RlbEVDbGFzcy5nZXRFU3VwZXJUeXBlcygpLmFkZCh0aGlzLmdldFN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsKCkpOw0KKwkJZGVtb2dyYXBoaWNQb3B1bGF0aW9uTW9kZWxFQ2xhc3MuZ2V0RVN1cGVyVHlwZXMoKS5hZGQodGhpcy5nZXRTdGFuZGFyZFBvcHVsYXRpb25Nb2RlbCgpKTsNCisJCXBvcHVsYXRpb25Jbml0aWFsaXplckVDbGFzcy5nZXRFU3VwZXJUeXBlcygpLmFkZCh0aGVNb2RlbFBhY2thZ2UuZ2V0Tm9kZURlY29yYXRvcigpKTsNCisJCXBvcHVsYXRpb25Jbml0aWFsaXplckVDbGFzcy5nZXRFU3VwZXJUeXBlcygpLmFkZCh0aGVNb2RpZmllclBhY2thZ2UuZ2V0TW9kaWZpYWJsZSgpKTsNCisJCXN0YW5kYXJkUG9wdWxhdGlvbkluaXRpYWxpemVyRUNsYXNzLmdldEVTdXBlclR5cGVzKCkuYWRkKHRoaXMuZ2V0UG9wdWxhdGlvbkluaXRpYWxpemVyKCkpOw0KKwkJc2Vhc29uYWxQb3B1bGF0aW9uTW9kZWxFQ2xhc3MuZ2V0RVN1cGVyVHlwZXMoKS5hZGQodGhpcy5nZXRTdGFuZGFyZFBvcHVsYXRpb25Nb2RlbCgpKTsNCisJCWVhcnRoU2NpZW5jZVBvcHVsYXRpb25Jbml0aWFsaXplckVDbGFzcy5nZXRFU3VwZXJUeXBlcygpLmFkZCh0aGlzLmdldFBvcHVsYXRpb25Jbml0aWFsaXplcigpKTsNCisJCXlldGlQb3B1bGF0aW9uSW5pdGlhbGl6ZXJFQ2xhc3MuZ2V0RVN1cGVyVHlwZXMoKS5hZGQodGhpcy5nZXRFYXJ0aFNjaWVuY2VQb3B1bGF0aW9uSW5pdGlhbGl6ZXIoKSk7DQorCQltb3NxdWl0b1BvcHVsYXRpb25Nb2RlbEVDbGFzcy5nZXRFU3VwZXJUeXBlcygpLmFkZCh0aGlzLmdldFBvcHVsYXRpb25Nb2RlbCgpKTsNCisJCWFnaW5nUG9wdWxhdGlvbk1vZGVsRUNsYXNzLmdldEVTdXBlclR5cGVzKCkuYWRkKHRoaXMuZ2V0RGVtb2dyYXBoaWNQb3B1bGF0aW9uTW9kZWwoKSk7DQorCQlhZ2VHcm91cEVDbGFzcy5nZXRFU3VwZXJUeXBlcygpLmFkZCh0aGlzLmdldFBvcHVsYXRpb25Hcm91cCgpKTsNCisNCisJCS8vIEluaXRpYWxpemUgY2xhc3NlcyBhbmQgZmVhdHVyZXM7IGFkZCBvcGVyYXRpb25zIGFuZCBwYXJhbWV0ZXJzDQorCQlpbml0RUNsYXNzKHBvcHVsYXRpb25Nb2RlbEVDbGFzcywgUG9wdWxhdGlvbk1vZGVsLmNsYXNzLCAiUG9wdWxhdGlvbk1vZGVsIiwgSVNfQUJTVFJBQ1QsICFJU19JTlRFUkZBQ0UsIElTX0dFTkVSQVRFRF9JTlNUQU5DRV9DTEFTUyk7DQorCQlpbml0RUF0dHJpYnV0ZShnZXRQb3B1bGF0aW9uTW9kZWxfUG9wdWxhdGlvbklkZW50aWZpZXIoKSwgdGhlRWNvcmVQYWNrYWdlLmdldEVTdHJpbmcoKSwgInBvcHVsYXRpb25JZGVudGlmaWVyIiwgImh1bWFuIiwgMCwgMSwgUG9wdWxhdGlvbk1vZGVsLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOw0KKwkJaW5pdEVBdHRyaWJ1dGUoZ2V0UG9wdWxhdGlvbk1vZGVsX05hbWUoKSwgdGhlRWNvcmVQYWNrYWdlLmdldEVTdHJpbmcoKSwgIm5hbWUiLCAiSHVtYW5Qb3B1bGF0aW9uTW9kZWwiLCAwLCAxLCBQb3B1bGF0aW9uTW9kZWwuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7DQorCQlpbml0RUF0dHJpYnV0ZShnZXRQb3B1bGF0aW9uTW9kZWxfVGFyZ2V0SVNPS2V5KCksIHRoZUVjb3JlUGFja2FnZS5nZXRFU3RyaW5nKCksICJ0YXJnZXRJU09LZXkiLCAiIiwgMCwgMSwgUG9wdWxhdGlvbk1vZGVsLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOw0KKw0KKwkJYWRkRU9wZXJhdGlvbihwb3B1bGF0aW9uTW9kZWxFQ2xhc3MsIHRoZUVjb3JlUGFja2FnZS5nZXRFU3RyaW5nKCksICJnZXRBbGxMYWJlbElkZW50aWZpZXJzIiwgMCwgLTEsIElTX1VOSVFVRSwgSVNfT1JERVJFRCk7DQorDQorCQlpbml0RUNsYXNzKHN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsRUNsYXNzLCBTdGFuZGFyZFBvcHVsYXRpb25Nb2RlbC5jbGFzcywgIlN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsIiwgIUlTX0FCU1RSQUNULCAhSVNfSU5URVJGQUNFLCBJU19HRU5FUkFURURfSU5TVEFOQ0VfQ0xBU1MpOw0KKwkJaW5pdEVBdHRyaWJ1dGUoZ2V0U3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxfQmlydGhSYXRlKCksIHRoZUVjb3JlUGFja2FnZS5nZXRFRG91YmxlKCksICJiaXJ0aFJhdGUiLCAiMC4wIiwgMCwgMSwgU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWwuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7DQorCQlpbml0RUF0dHJpYnV0ZShnZXRTdGFuZGFyZFBvcHVsYXRpb25Nb2RlbF9EZWF0aFJhdGUoKSwgdGhlRWNvcmVQYWNrYWdlLmdldEVEb3VibGUoKSwgImRlYXRoUmF0ZSIsICIwLjAiLCAwLCAxLCBTdGFuZGFyZFBvcHVsYXRpb25Nb2RlbC5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsNCisJCWluaXRFQXR0cmlidXRlKGdldFN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsX1RpbWVQZXJpb2QoKSwgZWNvcmVQYWNrYWdlLmdldEVMb25nKCksICJ0aW1lUGVyaW9kIiwgIjg2NDAwMDAwIiwgMCwgMSwgU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWwuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7DQorDQorCQlpbml0RUNsYXNzKHBvcHVsYXRpb25Nb2RlbExhYmVsRUNsYXNzLCBQb3B1bGF0aW9uTW9kZWxMYWJlbC5jbGFzcywgIlBvcHVsYXRpb25Nb2RlbExhYmVsIiwgIUlTX0FCU1RSQUNULCAhSVNfSU5URVJGQUNFLCBJU19HRU5FUkFURURfSU5TVEFOQ0VfQ0xBU1MpOw0KKwkJaW5pdEVSZWZlcmVuY2UoZ2V0UG9wdWxhdGlvbk1vZGVsTGFiZWxfUG9wdWxhdGlvbkxhYmVsKCksIHRoZUxhYmVsc1BhY2thZ2UuZ2V0UG9wdWxhdGlvbkxhYmVsKCksIG51bGwsICJwb3B1bGF0aW9uTGFiZWwiLCBudWxsLCAwLCAxLCBQb3B1bGF0aW9uTW9kZWxMYWJlbC5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfQ09NUE9TSVRFLCBJU19SRVNPTFZFX1BST1hJRVMsICFJU19VTlNFVFRBQkxFLCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsNCisJCWluaXRFQXR0cmlidXRlKGdldFBvcHVsYXRpb25Nb2RlbExhYmVsX1BvcHVsYXRpb25JZGVudGlmaWVyKCksIHRoZUVjb3JlUGFja2FnZS5nZXRFU3RyaW5nKCksICJwb3B1bGF0aW9uSWRlbnRpZmllciIsIG51bGwsIDAsIDEsIFBvcHVsYXRpb25Nb2RlbExhYmVsLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOw0KKw0KKwkJaW5pdEVDbGFzcyhzdGFuZGFyZFBvcHVsYXRpb25Nb2RlbExhYmVsRUNsYXNzLCBTdGFuZGFyZFBvcHVsYXRpb25Nb2RlbExhYmVsLmNsYXNzLCAiU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxMYWJlbCIsICFJU19BQlNUUkFDVCwgIUlTX0lOVEVSRkFDRSwgSVNfR0VORVJBVEVEX0lOU1RBTkNFX0NMQVNTKTsNCisNCisJCWluaXRFQ2xhc3MocG9wdWxhdGlvbk1vZGVsTGFiZWxWYWx1ZUVDbGFzcywgUG9wdWxhdGlvbk1vZGVsTGFiZWxWYWx1ZS5jbGFzcywgIlBvcHVsYXRpb25Nb2RlbExhYmVsVmFsdWUiLCAhSVNfQUJTVFJBQ1QsICFJU19JTlRFUkZBQ0UsIElTX0dFTkVSQVRFRF9JTlNUQU5DRV9DTEFTUyk7DQorDQorCQlpbml0RUNsYXNzKHN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWxWYWx1ZUVDbGFzcywgU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxMYWJlbFZhbHVlLmNsYXNzLCAiU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxMYWJlbFZhbHVlIiwgIUlTX0FCU1RSQUNULCAhSVNfSU5URVJGQUNFLCBJU19HRU5FUkFURURfSU5TVEFOQ0VfQ0xBU1MpOw0KKwkJaW5pdEVBdHRyaWJ1dGUoZ2V0U3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxMYWJlbFZhbHVlX0NvdW50KCksIHRoZUVjb3JlUGFja2FnZS5nZXRFRG91YmxlKCksICJjb3VudCIsIG51bGwsIDAsIDEsIFN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWxWYWx1ZS5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsNCisJCWluaXRFQXR0cmlidXRlKGdldFN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWxWYWx1ZV9CaXJ0aHMoKSwgdGhlRWNvcmVQYWNrYWdlLmdldEVEb3VibGUoKSwgImJpcnRocyIsIG51bGwsIDAsIDEsIFN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWxWYWx1ZS5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsNCisJCWluaXRFQXR0cmlidXRlKGdldFN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWxWYWx1ZV9EZWF0aHMoKSwgdGhlRWNvcmVQYWNrYWdlLmdldEVEb3VibGUoKSwgImRlYXRocyIsIG51bGwsIDAsIDEsIFN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWxWYWx1ZS5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsNCisJCWluaXRFQXR0cmlidXRlKGdldFN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWxWYWx1ZV9EZW5zaXR5KCksIHRoZUVjb3JlUGFja2FnZS5nZXRFRG91YmxlKCksICJkZW5zaXR5IiwgbnVsbCwgMCwgMSwgU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxMYWJlbFZhbHVlLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOw0KKw0KKwkJaW5pdEVDbGFzcyhzdG9jaGFzdGljU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxFQ2xhc3MsIFN0b2NoYXN0aWNTdGFuZGFyZFBvcHVsYXRpb25Nb2RlbC5jbGFzcywgIlN0b2NoYXN0aWNTdGFuZGFyZFBvcHVsYXRpb25Nb2RlbCIsICFJU19BQlNUUkFDVCwgIUlTX0lOVEVSRkFDRSwgSVNfR0VORVJBVEVEX0lOU1RBTkNFX0NMQVNTKTsNCisJCWluaXRFQXR0cmlidXRlKGdldFN0b2NoYXN0aWNTdGFuZGFyZFBvcHVsYXRpb25Nb2RlbF9HYWluKCksIHRoZUVjb3JlUGFja2FnZS5nZXRFRG91YmxlKCksICJnYWluIiwgIjAuMDEiLCAwLCAxLCBTdG9jaGFzdGljU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWwuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7DQorDQorCQlpbml0RUNsYXNzKGRlbW9ncmFwaGljUG9wdWxhdGlvbk1vZGVsRUNsYXNzLCBEZW1vZ3JhcGhpY1BvcHVsYXRpb25Nb2RlbC5jbGFzcywgIkRlbW9ncmFwaGljUG9wdWxhdGlvbk1vZGVsIiwgIUlTX0FCU1RSQUNULCAhSVNfSU5URVJGQUNFLCBJU19HRU5FUkFURURfSU5TVEFOQ0VfQ0xBU1MpOw0KKwkJaW5pdEVSZWZlcmVuY2UoZ2V0RGVtb2dyYXBoaWNQb3B1bGF0aW9uTW9kZWxfUG9wdWxhdGlvbkdyb3VwcygpLCB0aGlzLmdldFBvcHVsYXRpb25Hcm91cCgpLCBudWxsLCAicG9wdWxhdGlvbkdyb3VwcyIsIG51bGwsIDEsIC0xLCBEZW1vZ3JhcGhpY1BvcHVsYXRpb25Nb2RlbC5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCBJU19DT01QT1NJVEUsICFJU19SRVNPTFZFX1BST1hJRVMsICFJU19VTlNFVFRBQkxFLCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsNCisNCisJCWluaXRFQ2xhc3MocG9wdWxhdGlvbkdyb3VwRUNsYXNzLCBQb3B1bGF0aW9uR3JvdXAuY2xhc3MsICJQb3B1bGF0aW9uR3JvdXAiLCAhSVNfQUJTVFJBQ1QsICFJU19JTlRFUkZBQ0UsIElTX0dFTkVSQVRFRF9JTlNUQU5DRV9DTEFTUyk7DQorCQlpbml0RUF0dHJpYnV0ZShnZXRQb3B1bGF0aW9uR3JvdXBfSWRlbnRpZmllcigpLCB0aGVFY29yZVBhY2thZ2UuZ2V0RVN0cmluZygpLCAiaWRlbnRpZmllciIsIG51bGwsIDAsIDEsIFBvcHVsYXRpb25Hcm91cC5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsNCisJCWluaXRFQXR0cmlidXRlKGdldFBvcHVsYXRpb25Hcm91cF9GcmFjdGlvbigpLCB0aGVFY29yZVBhY2thZ2UuZ2V0RURvdWJsZSgpLCAiZnJhY3Rpb24iLCAiMC41IiwgMCwgMSwgUG9wdWxhdGlvbkdyb3VwLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOw0KKw0KKwkJaW5pdEVDbGFzcyhwb3B1bGF0aW9uSW5pdGlhbGl6ZXJFQ2xhc3MsIFBvcHVsYXRpb25Jbml0aWFsaXplci5jbGFzcywgIlBvcHVsYXRpb25Jbml0aWFsaXplciIsIElTX0FCU1RSQUNULCAhSVNfSU5URVJGQUNFLCBJU19HRU5FUkFURURfSU5TVEFOQ0VfQ0xBU1MpOw0KKwkJaW5pdEVBdHRyaWJ1dGUoZ2V0UG9wdWxhdGlvbkluaXRpYWxpemVyX1RhcmdldElTT0tleSgpLCB0aGVFY29yZVBhY2thZ2UuZ2V0RVN0cmluZygpLCAidGFyZ2V0SVNPS2V5IiwgbnVsbCwgMCwgMSwgUG9wdWxhdGlvbkluaXRpYWxpemVyLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOw0KKwkJaW5pdEVBdHRyaWJ1dGUoZ2V0UG9wdWxhdGlvbkluaXRpYWxpemVyX1BvcHVsYXRpb25JZGVudGlmaWVyKCksIHRoZUVjb3JlUGFja2FnZS5nZXRFU3RyaW5nKCksICJwb3B1bGF0aW9uSWRlbnRpZmllciIsICJodW1hbiIsIDAsIDEsIFBvcHVsYXRpb25Jbml0aWFsaXplci5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsNCisNCisJCWluaXRFQ2xhc3Moc3RhbmRhcmRQb3B1bGF0aW9uSW5pdGlhbGl6ZXJFQ2xhc3MsIFN0YW5kYXJkUG9wdWxhdGlvbkluaXRpYWxpemVyLmNsYXNzLCAiU3RhbmRhcmRQb3B1bGF0aW9uSW5pdGlhbGl6ZXIiLCAhSVNfQUJTVFJBQ1QsICFJU19JTlRFUkZBQ0UsIElTX0dFTkVSQVRFRF9JTlNUQU5DRV9DTEFTUyk7DQorCQlpbml0RUF0dHJpYnV0ZShnZXRTdGFuZGFyZFBvcHVsYXRpb25Jbml0aWFsaXplcl9JbmRpdmlkdWFscygpLCB0aGVFY29yZVBhY2thZ2UuZ2V0RURvdWJsZSgpLCAiaW5kaXZpZHVhbHMiLCAiMSIsIDAsIDEsIFN0YW5kYXJkUG9wdWxhdGlvbkluaXRpYWxpemVyLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOw0KKwkJaW5pdEVBdHRyaWJ1dGUoZ2V0U3RhbmRhcmRQb3B1bGF0aW9uSW5pdGlhbGl6ZXJfVXNlRGVuc2l0eSgpLCB0aGVFY29yZVBhY2thZ2UuZ2V0RUJvb2xlYW4oKSwgInVzZURlbnNpdHkiLCAiZmFsc2UiLCAwLCAxLCBTdGFuZGFyZFBvcHVsYXRpb25Jbml0aWFsaXplci5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsNCisNCisJCWluaXRFQ2xhc3Moc2Vhc29uYWxQb3B1bGF0aW9uTW9kZWxFQ2xhc3MsIFNlYXNvbmFsUG9wdWxhdGlvbk1vZGVsLmNsYXNzLCAiU2Vhc29uYWxQb3B1bGF0aW9uTW9kZWwiLCAhSVNfQUJTVFJBQ1QsICFJU19JTlRFUkZBQ0UsIElTX0dFTkVSQVRFRF9JTlNUQU5DRV9DTEFTUyk7DQorCQlpbml0RUF0dHJpYnV0ZShnZXRTZWFzb25hbFBvcHVsYXRpb25Nb2RlbF9QaGFzZSgpLCB0aGVFY29yZVBhY2thZ2UuZ2V0RURvdWJsZSgpLCAicGhhc2UiLCAiMC4wIiwgMCwgMSwgU2Vhc29uYWxQb3B1bGF0aW9uTW9kZWwuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7DQorCQlpbml0RUF0dHJpYnV0ZShnZXRTZWFzb25hbFBvcHVsYXRpb25Nb2RlbF9Nb2R1bGF0aW9uQW1wbGl0dWRlKCksIHRoZUVjb3JlUGFja2FnZS5nZXRFRG91YmxlKCksICJtb2R1bGF0aW9uQW1wbGl0dWRlIiwgIjEuMCIsIDAsIDEsIFNlYXNvbmFsUG9wdWxhdGlvbk1vZGVsLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOw0KKwkJaW5pdEVBdHRyaWJ1dGUoZ2V0U2Vhc29uYWxQb3B1bGF0aW9uTW9kZWxfUGVyaW9kKCksIHRoZUVjb3JlUGFja2FnZS5nZXRFRG91YmxlKCksICJwZXJpb2QiLCAiMzY1LjI1IiwgMCwgMSwgU2Vhc29uYWxQb3B1bGF0aW9uTW9kZWwuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgIUlTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOw0KKwkJaW5pdEVBdHRyaWJ1dGUoZ2V0U2Vhc29uYWxQb3B1bGF0aW9uTW9kZWxfVXNlTGF0aXR1ZGUoKSwgdGhlRWNvcmVQYWNrYWdlLmdldEVCb29sZWFuKCksICJ1c2VMYXRpdHVkZSIsICJ0cnVlIiwgMCwgMSwgU2Vhc29uYWxQb3B1bGF0aW9uTW9kZWwuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7DQorDQorCQlpbml0RUNsYXNzKGVhcnRoU2NpZW5jZVBvcHVsYXRpb25Jbml0aWFsaXplckVDbGFzcywgRWFydGhTY2llbmNlUG9wdWxhdGlvbkluaXRpYWxpemVyLmNsYXNzLCAiRWFydGhTY2llbmNlUG9wdWxhdGlvbkluaXRpYWxpemVyIiwgSVNfQUJTVFJBQ1QsICFJU19JTlRFUkZBQ0UsIElTX0dFTkVSQVRFRF9JTlNUQU5DRV9DTEFTUyk7DQorDQorCQlpbml0RUNsYXNzKHlldGlQb3B1bGF0aW9uSW5pdGlhbGl6ZXJFQ2xhc3MsIFlldGlQb3B1bGF0aW9uSW5pdGlhbGl6ZXIuY2xhc3MsICJZZXRpUG9wdWxhdGlvbkluaXRpYWxpemVyIiwgIUlTX0FCU1RSQUNULCAhSVNfSU5URVJGQUNFLCBJU19HRU5FUkFURURfSU5TVEFOQ0VfQ0xBU1MpOw0KKw0KKwkJaW5pdEVDbGFzcyhtb3NxdWl0b1BvcHVsYXRpb25Nb2RlbEVDbGFzcywgTW9zcXVpdG9Qb3B1bGF0aW9uTW9kZWwuY2xhc3MsICJNb3NxdWl0b1BvcHVsYXRpb25Nb2RlbCIsICFJU19BQlNUUkFDVCwgIUlTX0lOVEVSRkFDRSwgSVNfR0VORVJBVEVEX0lOU1RBTkNFX0NMQVNTKTsNCisJCWluaXRFQXR0cmlidXRlKGdldE1vc3F1aXRvUG9wdWxhdGlvbk1vZGVsX1NjYWxpbmdGYWN0b3IoKSwgdGhlRWNvcmVQYWNrYWdlLmdldEVEb3VibGUoKSwgInNjYWxpbmdGYWN0b3IiLCAiMS4wIiwgMCwgMSwgTW9zcXVpdG9Qb3B1bGF0aW9uTW9kZWwuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7DQorCQlpbml0RUF0dHJpYnV0ZShnZXRNb3NxdWl0b1BvcHVsYXRpb25Nb2RlbF9UaW1lUGVyaW9kKCksIHRoZUVjb3JlUGFja2FnZS5nZXRFTG9uZygpLCAidGltZVBlcmlvZCIsICI4NjQwMDAwMCIsIDAsIDEsIE1vc3F1aXRvUG9wdWxhdGlvbk1vZGVsLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOw0KKwkJaW5pdEVBdHRyaWJ1dGUoZ2V0TW9zcXVpdG9Qb3B1bGF0aW9uTW9kZWxfTW9ydGFsaXR5UmF0ZSgpLCB0aGVFY29yZVBhY2thZ2UuZ2V0RURvdWJsZSgpLCAibW9ydGFsaXR5UmF0ZSIsICIwLjA1IiwgMCwgMSwgTW9zcXVpdG9Qb3B1bGF0aW9uTW9kZWwuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7DQorCQlpbml0RUF0dHJpYnV0ZShnZXRNb3NxdWl0b1BvcHVsYXRpb25Nb2RlbF9Ib3N0KCksIHRoZUVjb3JlUGFja2FnZS5nZXRFU3RyaW5nKCksICJob3N0IiwgImh1bWFuIiwgMCwgMSwgTW9zcXVpdG9Qb3B1bGF0aW9uTW9kZWwuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7DQorDQorCQlpbml0RUNsYXNzKGFnaW5nUG9wdWxhdGlvbk1vZGVsRUNsYXNzLCBBZ2luZ1BvcHVsYXRpb25Nb2RlbC5jbGFzcywgIkFnaW5nUG9wdWxhdGlvbk1vZGVsIiwgIUlTX0FCU1RSQUNULCAhSVNfSU5URVJGQUNFLCBJU19HRU5FUkFURURfSU5TVEFOQ0VfQ0xBU1MpOw0KKwkJaW5pdEVBdHRyaWJ1dGUoZ2V0QWdpbmdQb3B1bGF0aW9uTW9kZWxfSGFzTWF4QWdlKCksIHRoZUVjb3JlUGFja2FnZS5nZXRFQm9vbGVhbigpLCAiaGFzTWF4QWdlIiwgbnVsbCwgMCwgMSwgQWdpbmdQb3B1bGF0aW9uTW9kZWwuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7DQorDQorCQlpbml0RUNsYXNzKGFnZUdyb3VwRUNsYXNzLCBBZ2VHcm91cC5jbGFzcywgIkFnZUdyb3VwIiwgIUlTX0FCU1RSQUNULCAhSVNfSU5URVJGQUNFLCBJU19HRU5FUkFURURfSU5TVEFOQ0VfQ0xBU1MpOw0KKwkJaW5pdEVBdHRyaWJ1dGUoZ2V0QWdlR3JvdXBfRnJvbUFnZSgpLCB0aGVFY29yZVBhY2thZ2UuZ2V0RUludCgpLCAiZnJvbUFnZSIsIG51bGwsIDAsIDEsIEFnZUdyb3VwLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOw0KKwkJaW5pdEVBdHRyaWJ1dGUoZ2V0QWdlR3JvdXBfVG9BZ2UoKSwgdGhlRWNvcmVQYWNrYWdlLmdldEVJbnQoKSwgInRvQWdlIiwgbnVsbCwgMCwgMSwgQWdlR3JvdXAuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7DQorCQlpbml0RUF0dHJpYnV0ZShnZXRBZ2VHcm91cF9EZWF0aEZhY3RvcigpLCB0aGVFY29yZVBhY2thZ2UuZ2V0RURvdWJsZSgpLCAiZGVhdGhGYWN0b3IiLCAiMS4wIiwgMCwgMSwgQWdlR3JvdXAuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7DQorCQlpbml0RUF0dHJpYnV0ZShnZXRBZ2VHcm91cF9MaW1pdGVkKCksIHRoZUVjb3JlUGFja2FnZS5nZXRFQm9vbGVhbigpLCAibGltaXRlZCIsIG51bGwsIDAsIDEsIEFnZUdyb3VwLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOw0KKw0KKwkJLy8gQ3JlYXRlIHJlc291cmNlDQorCQljcmVhdGVSZXNvdXJjZShlTlNfVVJJKTsNCisJfQ0KKw0KK30gLy9TdGFuZGFyZFBhY2thZ2VJbXBsDQpkaWZmIC0tZ2l0IGEvbW9kZWxzL3BvcHVsYXRpb25zL29yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9wb3B1bGF0aW9ubW9kZWxzL3N0YW5kYXJkL2ltcGwvU3RhbmRhcmRQb3B1bGF0aW9uSW5pdGlhbGl6ZXJJbXBsLmphdmEgYi9tb2RlbHMvcG9wdWxhdGlvbnMvb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3BvcHVsYXRpb25tb2RlbHMvc3RhbmRhcmQvaW1wbC9TdGFuZGFyZFBvcHVsYXRpb25Jbml0aWFsaXplckltcGwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMWM0MDc3Ci0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL3BvcHVsYXRpb25zL29yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9wb3B1bGF0aW9ubW9kZWxzL3N0YW5kYXJkL2ltcGwvU3RhbmRhcmRQb3B1bGF0aW9uSW5pdGlhbGl6ZXJJbXBsLmphdmEKQEAgLTAsMCArMSwyODUgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLmltcGw7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTAgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLmltcGwuRU5vdGlmaWNhdGlvbkltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLk5vZGU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLk5vZGVMYWJlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuTW9kZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLlNURU1UaW1lOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLkFyZWFMYWJlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5Qb3B1bGF0aW9uTGFiZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuUG9wdWxhdGlvbkxhYmVsVmFsdWU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLkFjdGl2YXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmRQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZFBvcHVsYXRpb25Jbml0aWFsaXplcjsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPlBvcHVsYXRpb24gSW5pdGlhbGl6ZXI8L2I+PC9lbT4nLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiA8cD4KKyAqIFRoZSBmb2xsb3dpbmcgZmVhdHVyZXMgYXJlIGltcGxlbWVudGVkOgorICogPHVsPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5pbXBsLlN0YW5kYXJkUG9wdWxhdGlvbkluaXRpYWxpemVySW1wbCNnZXRJbmRpdmlkdWFscyA8ZW0+SW5kaXZpZHVhbHM8L2VtPn08L2xpPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5pbXBsLlN0YW5kYXJkUG9wdWxhdGlvbkluaXRpYWxpemVySW1wbCNpc1VzZURlbnNpdHkgPGVtPlVzZSBEZW5zaXR5PC9lbT59PC9saT4KKyAqIDwvdWw+CisgKiA8L3A+CisgKgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgU3RhbmRhcmRQb3B1bGF0aW9uSW5pdGlhbGl6ZXJJbXBsIGV4dGVuZHMgUG9wdWxhdGlvbkluaXRpYWxpemVySW1wbCBpbXBsZW1lbnRzIFN0YW5kYXJkUG9wdWxhdGlvbkluaXRpYWxpemVyIHsKKwkvKioKKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0SW5kaXZpZHVhbHMoKSA8ZW0+SW5kaXZpZHVhbHM8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI2dldEluZGl2aWR1YWxzKCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIGRvdWJsZSBJTkRJVklEVUFMU19FREVGQVVMVCA9IDEuMDsKKworCS8qKgorCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldEluZGl2aWR1YWxzKCkgPGVtPkluZGl2aWR1YWxzPC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNnZXRJbmRpdmlkdWFscygpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIGRvdWJsZSBpbmRpdmlkdWFscyA9IElORElWSURVQUxTX0VERUZBVUxUOworCisJLyoqCisJICogVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2lzVXNlRGVuc2l0eSgpIDxlbT5Vc2UgRGVuc2l0eTwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjaXNVc2VEZW5zaXR5KCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIGJvb2xlYW4gVVNFX0RFTlNJVFlfRURFRkFVTFQgPSBmYWxzZTsKKworCS8qKgorCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2lzVXNlRGVuc2l0eSgpIDxlbT5Vc2UgRGVuc2l0eTwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjaXNVc2VEZW5zaXR5KCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgYm9vbGVhbiB1c2VEZW5zaXR5ID0gVVNFX0RFTlNJVFlfRURFRkFVTFQ7CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJcHVibGljIFN0YW5kYXJkUG9wdWxhdGlvbkluaXRpYWxpemVySW1wbCgpIHsKKwkJc3VwZXIoKTsKKwkJLy8gUG9wdWxhdGUgdGhlIHBvcHVsYXRpb24gbGFiZWxzCisJCQorCX0KKwkKKwlAT3ZlcnJpZGUgCisJcHVibGljIHZvaWQgcHJlcGFyZShNb2RlbCBtb2RlbCwgU1RFTVRpbWUgdGltZSkgeworCQkvLyBOb3RoaW5nIHRvIGRvCisJfQorCQorCS8qKgorCSAqIAorCSAqLworCUBTdXBwcmVzc1dhcm5pbmdzKCJubHMiKQorCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIGluaXRpYWxpemVMYWJlbChQb3B1bGF0aW9uTGFiZWwgbGFiLCBTVEVNVGltZSB0aW1lLCBib29sZWFuIHplcm9WYWx1ZSkgeworCQlpZih0aGlzLmlzVXNlRGVuc2l0eSgpKSB7CisJCQlOb2RlIG4gPSBsYWIuZ2V0Tm9kZSgpOworCQkJaWYobiA9PSBudWxsKSB7CisJCQkJQWN0aXZhdG9yLmxvZ0luZm9ybWF0aW9uKCJDYW5ub3QgaW5pdGlhbGl6ZSBwb3B1bGF0aW9uICIrdGhpcy5nZXRQb3B1bGF0aW9uSWRlbnRpZmllcigpKyIsIG5vIG5vZGUgZm91bmQgZm9yIitsYWIsIG5ldyBFeGNlcHRpb24oKSk7CisJCQkJcmV0dXJuOworCQkJfQorCQkJZG91YmxlIGFyZWEgPSAwLjA7CisJCQlmb3IoTm9kZUxhYmVsIGw6bi5nZXRMYWJlbHMoKSkgeworCQkJCWlmKGwgaW5zdGFuY2VvZiBBcmVhTGFiZWwpIHsKKwkJCQkJYXJlYSA9ICgoQXJlYUxhYmVsKWwpLmdldEN1cnJlbnRBcmVhVmFsdWUoKS5nZXRBcmVhKCk7CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCX0KKwkJCWlmKGFyZWEgPT0gMC4wKSB7CisJCQkJIGlmKCFuLmdldFVSSSgpLnRvU3RyaW5nKCkuY29udGFpbnMoIi90cmFuc3BvcnQvcGlwZSIpKSAvLyBObyBhcmVhIGZvciB0cmFuc3BvcnQgc3lzdGVtIG5vZGVzIGlzIGV4cGVjdGVkLgorCQkJCQkJIEFjdGl2YXRvci5sb2dJbmZvcm1hdGlvbigiV2FybmluZywgdW5hYmxlIHRvIGZpbmQgYXJlYSBpbmZvcm1hdGlvbiBmb3Igbm9kZSAiK24rIiB3aGVuIGluaXRpYWxpemluZyBwb3B1bGF0aW9uICIrdGhpcy5nZXRQb3B1bGF0aW9uSWRlbnRpZmllcigpKyIsIGRlbnNpdHkgbm90IGJlaW5nIHVzZWQhIiwgbmV3IEV4Y2VwdGlvbigpKTsKKwkJCQkgUG9wdWxhdGlvbkxhYmVsVmFsdWUgcGx2ID0gbGFiLmdldEN1cnJlbnRQb3B1bGF0aW9uVmFsdWUoKTsKKwkJCQkgaWYoIXplcm9WYWx1ZSkgcGx2LnNldENvdW50KHRoaXMuZ2V0SW5kaXZpZHVhbHMoKSk7CisJCQkJIGVsc2UgcGx2LnNldENvdW50KDAuMCk7CisJCQl9IGVsc2UgeworCQkJCSBQb3B1bGF0aW9uTGFiZWxWYWx1ZSBwbHYgPSBsYWIuZ2V0Q3VycmVudFBvcHVsYXRpb25WYWx1ZSgpOworCQkJCSBpZighemVyb1ZhbHVlKSBwbHYuc2V0Q291bnQodGhpcy5nZXRJbmRpdmlkdWFscygpKmFyZWEpOworCQkJCSBlbHNlIHBsdi5zZXRDb3VudCgwLjApOworCQkJfQorCQl9IGVsc2UgeworCQkJIFBvcHVsYXRpb25MYWJlbFZhbHVlIHBsdiA9IGxhYi5nZXRDdXJyZW50UG9wdWxhdGlvblZhbHVlKCk7CisJCQkgaWYoIXplcm9WYWx1ZSkgcGx2LnNldENvdW50KHRoaXMuZ2V0SW5kaXZpZHVhbHMoKSk7CisJCQkgZWxzZSBwbHYuc2V0Q291bnQoMC4wKTsKKwkJfQorCQkvLyBTZXQgdGhlIHZhbGlkIHllYXIgdG8gdGhlIHN0YXJ0IHllYXIgb2YgdGhlIHNlcXVlbmNlcgorCQkKKwkJbGFiLnNldFZhbGlkWWVhcihnZXRZZWFyKHRpbWUpKTsKKwl9CisJCisJCisJQE92ZXJyaWRlCisJcHVibGljIGJvb2xlYW4gZGVjb3JhdGVHcmFwaChTVEVNVGltZSB0aW1lKSB7CisJCWlmKHRoaXMuaXNHcmFwaERlY29yYXRlZCgpKSByZXR1cm4gdHJ1ZTsKKwkJc3VwZXIuZGVjb3JhdGVHcmFwaCh0aW1lKTsKKwkJcmV0dXJuIHRydWU7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIEVDbGFzcyBlU3RhdGljQ2xhc3MoKSB7CisJCXJldHVybiBTdGFuZGFyZFBhY2thZ2UuTGl0ZXJhbHMuU1RBTkRBUkRfUE9QVUxBVElPTl9JTklUSUFMSVpFUjsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgZG91YmxlIGdldEluZGl2aWR1YWxzKCkgeworCQlyZXR1cm4gaW5kaXZpZHVhbHM7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgc2V0SW5kaXZpZHVhbHMoZG91YmxlIG5ld0luZGl2aWR1YWxzKSB7CisJCWRvdWJsZSBvbGRJbmRpdmlkdWFscyA9IGluZGl2aWR1YWxzOworCQlpbmRpdmlkdWFscyA9IG5ld0luZGl2aWR1YWxzOworCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpCisJCQllTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBTdGFuZGFyZFBhY2thZ2UuU1RBTkRBUkRfUE9QVUxBVElPTl9JTklUSUFMSVpFUl9fSU5ESVZJRFVBTFMsIG9sZEluZGl2aWR1YWxzLCBpbmRpdmlkdWFscykpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBib29sZWFuIGlzVXNlRGVuc2l0eSgpIHsKKwkJcmV0dXJuIHVzZURlbnNpdHk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgc2V0VXNlRGVuc2l0eShib29sZWFuIG5ld1VzZURlbnNpdHkpIHsKKwkJYm9vbGVhbiBvbGRVc2VEZW5zaXR5ID0gdXNlRGVuc2l0eTsKKwkJdXNlRGVuc2l0eSA9IG5ld1VzZURlbnNpdHk7CisJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkKKwkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIFN0YW5kYXJkUGFja2FnZS5TVEFOREFSRF9QT1BVTEFUSU9OX0lOSVRJQUxJWkVSX19VU0VfREVOU0lUWSwgb2xkVXNlRGVuc2l0eSwgdXNlRGVuc2l0eSkpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBPYmplY3QgZUdldChpbnQgZmVhdHVyZUlELCBib29sZWFuIHJlc29sdmUsIGJvb2xlYW4gY29yZVR5cGUpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJCWNhc2UgU3RhbmRhcmRQYWNrYWdlLlNUQU5EQVJEX1BPUFVMQVRJT05fSU5JVElBTElaRVJfX0lORElWSURVQUxTOgorCQkJCXJldHVybiBnZXRJbmRpdmlkdWFscygpOworCQkJY2FzZSBTdGFuZGFyZFBhY2thZ2UuU1RBTkRBUkRfUE9QVUxBVElPTl9JTklUSUFMSVpFUl9fVVNFX0RFTlNJVFk6CisJCQkJcmV0dXJuIGlzVXNlRGVuc2l0eSgpOworCQl9CisJCXJldHVybiBzdXBlci5lR2V0KGZlYXR1cmVJRCwgcmVzb2x2ZSwgY29yZVR5cGUpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGVTZXQoaW50IGZlYXR1cmVJRCwgT2JqZWN0IG5ld1ZhbHVlKSB7CisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7CisJCQljYXNlIFN0YW5kYXJkUGFja2FnZS5TVEFOREFSRF9QT1BVTEFUSU9OX0lOSVRJQUxJWkVSX19JTkRJVklEVUFMUzoKKwkJCQlzZXRJbmRpdmlkdWFscygoRG91YmxlKW5ld1ZhbHVlKTsKKwkJCQlyZXR1cm47CisJCQljYXNlIFN0YW5kYXJkUGFja2FnZS5TVEFOREFSRF9QT1BVTEFUSU9OX0lOSVRJQUxJWkVSX19VU0VfREVOU0lUWToKKwkJCQlzZXRVc2VEZW5zaXR5KChCb29sZWFuKW5ld1ZhbHVlKTsKKwkJCQlyZXR1cm47CisJCX0KKwkJc3VwZXIuZVNldChmZWF0dXJlSUQsIG5ld1ZhbHVlKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBlVW5zZXQoaW50IGZlYXR1cmVJRCkgeworCQlzd2l0Y2ggKGZlYXR1cmVJRCkgeworCQkJY2FzZSBTdGFuZGFyZFBhY2thZ2UuU1RBTkRBUkRfUE9QVUxBVElPTl9JTklUSUFMSVpFUl9fSU5ESVZJRFVBTFM6CisJCQkJc2V0SW5kaXZpZHVhbHMoSU5ESVZJRFVBTFNfRURFRkFVTFQpOworCQkJCXJldHVybjsKKwkJCWNhc2UgU3RhbmRhcmRQYWNrYWdlLlNUQU5EQVJEX1BPUFVMQVRJT05fSU5JVElBTElaRVJfX1VTRV9ERU5TSVRZOgorCQkJCXNldFVzZURlbnNpdHkoVVNFX0RFTlNJVFlfRURFRkFVTFQpOworCQkJCXJldHVybjsKKwkJfQorCQlzdXBlci5lVW5zZXQoZmVhdHVyZUlEKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgYm9vbGVhbiBlSXNTZXQoaW50IGZlYXR1cmVJRCkgeworCQlzd2l0Y2ggKGZlYXR1cmVJRCkgeworCQkJY2FzZSBTdGFuZGFyZFBhY2thZ2UuU1RBTkRBUkRfUE9QVUxBVElPTl9JTklUSUFMSVpFUl9fSU5ESVZJRFVBTFM6CisJCQkJcmV0dXJuIGluZGl2aWR1YWxzICE9IElORElWSURVQUxTX0VERUZBVUxUOworCQkJY2FzZSBTdGFuZGFyZFBhY2thZ2UuU1RBTkRBUkRfUE9QVUxBVElPTl9JTklUSUFMSVpFUl9fVVNFX0RFTlNJVFk6CisJCQkJcmV0dXJuIHVzZURlbnNpdHkgIT0gVVNFX0RFTlNJVFlfRURFRkFVTFQ7CisJCX0KKwkJcmV0dXJuIHN1cGVyLmVJc1NldChmZWF0dXJlSUQpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKSB7CisJCWlmIChlSXNQcm94eSgpKSByZXR1cm4gc3VwZXIudG9TdHJpbmcoKTsKKworCQlTdHJpbmdCdWZmZXIgcmVzdWx0ID0gbmV3IFN0cmluZ0J1ZmZlcihzdXBlci50b1N0cmluZygpKTsKKwkJcmVzdWx0LmFwcGVuZCgiIChpbmRpdmlkdWFsczogIik7CisJCXJlc3VsdC5hcHBlbmQoaW5kaXZpZHVhbHMpOworCQlyZXN1bHQuYXBwZW5kKCIsIHVzZURlbnNpdHk6ICIpOworCQlyZXN1bHQuYXBwZW5kKHVzZURlbnNpdHkpOworCQlyZXN1bHQuYXBwZW5kKCcpJyk7CisJCXJldHVybiByZXN1bHQudG9TdHJpbmcoKTsKKwl9CisKK30gLy9TdGFuZGFyZFBvcHVsYXRpb25Jbml0aWFsaXplckltcGwKZGlmZiAtLWdpdCBhL21vZGVscy9wb3B1bGF0aW9ucy9vcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vcG9wdWxhdGlvbm1vZGVscy9zdGFuZGFyZC9pbXBsL1N0YW5kYXJkUG9wdWxhdGlvbk1vZGVsSW1wbC5qYXZhIGIvbW9kZWxzL3BvcHVsYXRpb25zL29yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9wb3B1bGF0aW9ubW9kZWxzL3N0YW5kYXJkL2ltcGwvU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxJbXBsLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzQ5MTBlYgotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9wb3B1bGF0aW9ucy9vcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vcG9wdWxhdGlvbm1vZGVscy9zdGFuZGFyZC9pbXBsL1N0YW5kYXJkUG9wdWxhdGlvbk1vZGVsSW1wbC5qYXZhCkBAIC0wLDAgKzEsNzYzIEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5pbXBsOw0KKw0KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorICogQ29weXJpZ2h0IChjKSAyMDA5IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLg0KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMNCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjANCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdA0KKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sDQorICoNCisgKiBDb250cmlidXRvcnM6DQorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbg0KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KKw0KKw0KK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0Ow0KK2ltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsNCitpbXBvcnQgamF2YS51dGlsLkxpc3Q7DQoraW1wb3J0IGphdmEudXRpbC5NYXA7DQorDQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLkVDb2xsZWN0aW9uczsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLkVMaXN0Ow0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuVVJJOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuaW1wbC5FTm90aWZpY2F0aW9uSW1wbDsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnV0aWwuRWNvcmVVdGlsOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguRHluYW1pY0xhYmVsOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguRWRnZTsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkV4Y2hhbmdlOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguRXhjaGFuZ2VUeXBlOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguR3JhcGg7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5HcmFwaEZhY3Rvcnk7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5JbnRlZ3JhdGlvbkxhYmVsVmFsdWU7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5MYWJlbFZhbHVlOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguTm9kZTsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLk5vZGVMYWJlbDsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLlNURU1UaW1lOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5Qb3B1bGF0aW9uTGFiZWxWYWx1ZTsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy50cmFuc3BvcnQuUGlwZVN0eWxlVHJhbnNwb3J0U3lzdGVtOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLnRyYW5zcG9ydC5QaXBlVHJhbnNwb3J0RWRnZTsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy50cmFuc3BvcnQuUGlwZVRyYW5zcG9ydEVkZ2VMYWJlbFZhbHVlOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuUG9wdWxhdGlvbk1vZGVsTGFiZWw7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5Qb3B1bGF0aW9uTW9kZWxMYWJlbFZhbHVlOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmRGYWN0b3J5Ow0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmRQYWNrYWdlOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWw7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZFBvcHVsYXRpb25Nb2RlbExhYmVsOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxMYWJlbFZhbHVlOw0KKw0KKy8qKg0KKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorICogQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPlBvcHVsYXRpb24gTW9kZWw8L2I+PC9lbT4nLg0KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKyAqIDxwPg0KKyAqIFRoZSBmb2xsb3dpbmcgZmVhdHVyZXMgYXJlIGltcGxlbWVudGVkOg0KKyAqIDx1bD4NCisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLmltcGwuU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxJbXBsI2dldEJpcnRoUmF0ZSA8ZW0+QmlydGggUmF0ZTwvZW0+fTwvbGk+DQorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5pbXBsLlN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsSW1wbCNnZXREZWF0aFJhdGUgPGVtPkRlYXRoIFJhdGU8L2VtPn08L2xpPg0KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuaW1wbC5TdGFuZGFyZFBvcHVsYXRpb25Nb2RlbEltcGwjZ2V0VGltZVBlcmlvZCA8ZW0+VGltZSBQZXJpb2Q8L2VtPn08L2xpPg0KKyAqIDwvdWw+DQorICogPC9wPg0KKyAqDQorICogQGdlbmVyYXRlZA0KKyAqLw0KK3B1YmxpYyBjbGFzcyBTdGFuZGFyZFBvcHVsYXRpb25Nb2RlbEltcGwgZXh0ZW5kcyBQb3B1bGF0aW9uTW9kZWxJbXBsIGltcGxlbWVudHMgU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWwgew0KKwkvKioNCisJICogVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldEJpcnRoUmF0ZSgpIDxlbT5CaXJ0aCBSYXRlPC9lbT59JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAc2VlICNnZXRCaXJ0aFJhdGUoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqIEBvcmRlcmVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIGRvdWJsZSBCSVJUSF9SQVRFX0VERUZBVUxUID0gMC4wOw0KKw0KKwkvKioNCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0QmlydGhSYXRlKCkgPGVtPkJpcnRoIFJhdGU8L2VtPn0nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBzZWUgI2dldEJpcnRoUmF0ZSgpDQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCXByb3RlY3RlZCBkb3VibGUgYmlydGhSYXRlID0gQklSVEhfUkFURV9FREVGQVVMVDsNCisNCisJLyoqDQorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXREZWF0aFJhdGUoKSA8ZW0+RGVhdGggUmF0ZTwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHNlZSAjZ2V0RGVhdGhSYXRlKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBkb3VibGUgREVBVEhfUkFURV9FREVGQVVMVCA9IDAuMDsNCisNCisJLyoqDQorCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldERlYXRoUmF0ZSgpIDxlbT5EZWF0aCBSYXRlPC9lbT59JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAc2VlICNnZXREZWF0aFJhdGUoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqIEBvcmRlcmVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgZG91YmxlIGRlYXRoUmF0ZSA9IERFQVRIX1JBVEVfRURFRkFVTFQ7DQorDQorCS8qKg0KKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0VGltZVBlcmlvZCgpIDxlbT5UaW1lIFBlcmlvZDwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHNlZSAjZ2V0VGltZVBlcmlvZCgpDQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgbG9uZyBUSU1FX1BFUklPRF9FREVGQVVMVCA9IDg2NDAwMDAwTDsNCisNCisJLyoqDQorCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldFRpbWVQZXJpb2QoKSA8ZW0+VGltZSBQZXJpb2Q8L2VtPn0nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBzZWUgI2dldFRpbWVQZXJpb2QoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqIEBvcmRlcmVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgbG9uZyB0aW1lUGVyaW9kID0gVElNRV9QRVJJT0RfRURFRkFVTFQ7DQorDQorCXByb3RlY3RlZCBNYXA8Tm9kZSwgTGlzdDxQaXBlVHJhbnNwb3J0RWRnZT4+IHBpcGVUcmFuc3BvcnRhdGlvbk5vZGVFZGdlc01hcDsNCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkIE5PVA0KKwkgKi8NCisJcHVibGljIFN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsSW1wbCgpIHsNCisJCXN1cGVyKCk7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlAT3ZlcnJpZGUNCisJcHJvdGVjdGVkIEVDbGFzcyBlU3RhdGljQ2xhc3MoKSB7DQorCQlyZXR1cm4gU3RhbmRhcmRQYWNrYWdlLkxpdGVyYWxzLlNUQU5EQVJEX1BPUFVMQVRJT05fTU9ERUw7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgZG91YmxlIGdldEJpcnRoUmF0ZSgpIHsNCisJCXJldHVybiBiaXJ0aFJhdGU7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgdm9pZCBzZXRCaXJ0aFJhdGUoZG91YmxlIG5ld0JpcnRoUmF0ZSkgew0KKwkJZG91YmxlIG9sZEJpcnRoUmF0ZSA9IGJpcnRoUmF0ZTsNCisJCWJpcnRoUmF0ZSA9IG5ld0JpcnRoUmF0ZTsNCisJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkNCisJCQllTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBTdGFuZGFyZFBhY2thZ2UuU1RBTkRBUkRfUE9QVUxBVElPTl9NT0RFTF9fQklSVEhfUkFURSwgb2xkQmlydGhSYXRlLCBiaXJ0aFJhdGUpKTsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBkb3VibGUgZ2V0RGVhdGhSYXRlKCkgew0KKwkJcmV0dXJuIGRlYXRoUmF0ZTsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyB2b2lkIHNldERlYXRoUmF0ZShkb3VibGUgbmV3RGVhdGhSYXRlKSB7DQorCQlkb3VibGUgb2xkRGVhdGhSYXRlID0gZGVhdGhSYXRlOw0KKwkJZGVhdGhSYXRlID0gbmV3RGVhdGhSYXRlOw0KKwkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQ0KKwkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIFN0YW5kYXJkUGFja2FnZS5TVEFOREFSRF9QT1BVTEFUSU9OX01PREVMX19ERUFUSF9SQVRFLCBvbGREZWF0aFJhdGUsIGRlYXRoUmF0ZSkpOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIGxvbmcgZ2V0VGltZVBlcmlvZCgpIHsNCisJCXJldHVybiB0aW1lUGVyaW9kOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIHZvaWQgc2V0VGltZVBlcmlvZChsb25nIG5ld1RpbWVQZXJpb2QpIHsNCisJCWxvbmcgb2xkVGltZVBlcmlvZCA9IHRpbWVQZXJpb2Q7DQorCQl0aW1lUGVyaW9kID0gbmV3VGltZVBlcmlvZDsNCisJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkNCisJCQllTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBTdGFuZGFyZFBhY2thZ2UuU1RBTkRBUkRfUE9QVUxBVElPTl9NT0RFTF9fVElNRV9QRVJJT0QsIG9sZFRpbWVQZXJpb2QsIHRpbWVQZXJpb2QpKTsNCisJfQ0KKw0KKwkvKioNCisJICogRGVjb3JhdGUgdGhlIGdyYXBoIGZvciBhIHN0YW5kYXJkIHBvcHVsYXRpb24gbW9kZWwNCisJICogDQorCSAqLw0KKwlAT3ZlcnJpZGUNCisJcHVibGljIGJvb2xlYW4gZGVjb3JhdGVHcmFwaChTVEVNVGltZSB0aW1lKSB7DQorCQlpZih0aGlzLmlzR3JhcGhEZWNvcmF0ZWQoKSkgcmV0dXJuIHRydWU7DQorCQlzdXBlci5kZWNvcmF0ZUdyYXBoKHRpbWUpOw0KKwkJcmV0dXJuIHRydWU7DQorCX0gLy8gZGVjb3JhdGVHcmFwaA0KKwkNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlAT3ZlcnJpZGUNCisJcHVibGljIE9iamVjdCBlR2V0KGludCBmZWF0dXJlSUQsIGJvb2xlYW4gcmVzb2x2ZSwgYm9vbGVhbiBjb3JlVHlwZSkgew0KKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsNCisJCQljYXNlIFN0YW5kYXJkUGFja2FnZS5TVEFOREFSRF9QT1BVTEFUSU9OX01PREVMX19CSVJUSF9SQVRFOg0KKwkJCQlyZXR1cm4gZ2V0QmlydGhSYXRlKCk7DQorCQkJY2FzZSBTdGFuZGFyZFBhY2thZ2UuU1RBTkRBUkRfUE9QVUxBVElPTl9NT0RFTF9fREVBVEhfUkFURToNCisJCQkJcmV0dXJuIGdldERlYXRoUmF0ZSgpOw0KKwkJCWNhc2UgU3RhbmRhcmRQYWNrYWdlLlNUQU5EQVJEX1BPUFVMQVRJT05fTU9ERUxfX1RJTUVfUEVSSU9EOg0KKwkJCQlyZXR1cm4gZ2V0VGltZVBlcmlvZCgpOw0KKwkJfQ0KKwkJcmV0dXJuIHN1cGVyLmVHZXQoZmVhdHVyZUlELCByZXNvbHZlLCBjb3JlVHlwZSk7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlAT3ZlcnJpZGUNCisJcHVibGljIHZvaWQgZVNldChpbnQgZmVhdHVyZUlELCBPYmplY3QgbmV3VmFsdWUpIHsNCisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7DQorCQkJY2FzZSBTdGFuZGFyZFBhY2thZ2UuU1RBTkRBUkRfUE9QVUxBVElPTl9NT0RFTF9fQklSVEhfUkFURToNCisJCQkJc2V0QmlydGhSYXRlKChEb3VibGUpbmV3VmFsdWUpOw0KKwkJCQlyZXR1cm47DQorCQkJY2FzZSBTdGFuZGFyZFBhY2thZ2UuU1RBTkRBUkRfUE9QVUxBVElPTl9NT0RFTF9fREVBVEhfUkFURToNCisJCQkJc2V0RGVhdGhSYXRlKChEb3VibGUpbmV3VmFsdWUpOw0KKwkJCQlyZXR1cm47DQorCQkJY2FzZSBTdGFuZGFyZFBhY2thZ2UuU1RBTkRBUkRfUE9QVUxBVElPTl9NT0RFTF9fVElNRV9QRVJJT0Q6DQorCQkJCXNldFRpbWVQZXJpb2QoKExvbmcpbmV3VmFsdWUpOw0KKwkJCQlyZXR1cm47DQorCQl9DQorCQlzdXBlci5lU2V0KGZlYXR1cmVJRCwgbmV3VmFsdWUpOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJQE92ZXJyaWRlDQorCXB1YmxpYyB2b2lkIGVVbnNldChpbnQgZmVhdHVyZUlEKSB7DQorCQlzd2l0Y2ggKGZlYXR1cmVJRCkgew0KKwkJCWNhc2UgU3RhbmRhcmRQYWNrYWdlLlNUQU5EQVJEX1BPUFVMQVRJT05fTU9ERUxfX0JJUlRIX1JBVEU6DQorCQkJCXNldEJpcnRoUmF0ZShCSVJUSF9SQVRFX0VERUZBVUxUKTsNCisJCQkJcmV0dXJuOw0KKwkJCWNhc2UgU3RhbmRhcmRQYWNrYWdlLlNUQU5EQVJEX1BPUFVMQVRJT05fTU9ERUxfX0RFQVRIX1JBVEU6DQorCQkJCXNldERlYXRoUmF0ZShERUFUSF9SQVRFX0VERUZBVUxUKTsNCisJCQkJcmV0dXJuOw0KKwkJCWNhc2UgU3RhbmRhcmRQYWNrYWdlLlNUQU5EQVJEX1BPUFVMQVRJT05fTU9ERUxfX1RJTUVfUEVSSU9EOg0KKwkJCQlzZXRUaW1lUGVyaW9kKFRJTUVfUEVSSU9EX0VERUZBVUxUKTsNCisJCQkJcmV0dXJuOw0KKwkJfQ0KKwkJc3VwZXIuZVVuc2V0KGZlYXR1cmVJRCk7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlAT3ZlcnJpZGUNCisJcHVibGljIGJvb2xlYW4gZUlzU2V0KGludCBmZWF0dXJlSUQpIHsNCisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7DQorCQkJY2FzZSBTdGFuZGFyZFBhY2thZ2UuU1RBTkRBUkRfUE9QVUxBVElPTl9NT0RFTF9fQklSVEhfUkFURToNCisJCQkJcmV0dXJuIGJpcnRoUmF0ZSAhPSBCSVJUSF9SQVRFX0VERUZBVUxUOw0KKwkJCWNhc2UgU3RhbmRhcmRQYWNrYWdlLlNUQU5EQVJEX1BPUFVMQVRJT05fTU9ERUxfX0RFQVRIX1JBVEU6DQorCQkJCXJldHVybiBkZWF0aFJhdGUgIT0gREVBVEhfUkFURV9FREVGQVVMVDsNCisJCQljYXNlIFN0YW5kYXJkUGFja2FnZS5TVEFOREFSRF9QT1BVTEFUSU9OX01PREVMX19USU1FX1BFUklPRDoNCisJCQkJcmV0dXJuIHRpbWVQZXJpb2QgIT0gVElNRV9QRVJJT0RfRURFRkFVTFQ7DQorCQl9DQorCQlyZXR1cm4gc3VwZXIuZUlzU2V0KGZlYXR1cmVJRCk7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlAT3ZlcnJpZGUNCisJcHVibGljIFN0cmluZyB0b1N0cmluZygpIHsNCisJCWlmIChlSXNQcm94eSgpKSByZXR1cm4gc3VwZXIudG9TdHJpbmcoKTsNCisNCisJCVN0cmluZ0J1ZmZlciByZXN1bHQgPSBuZXcgU3RyaW5nQnVmZmVyKHN1cGVyLnRvU3RyaW5nKCkpOw0KKwkJcmVzdWx0LmFwcGVuZCgiIChiaXJ0aFJhdGU6ICIpOw0KKwkJcmVzdWx0LmFwcGVuZChiaXJ0aFJhdGUpOw0KKwkJcmVzdWx0LmFwcGVuZCgiLCBkZWF0aFJhdGU6ICIpOw0KKwkJcmVzdWx0LmFwcGVuZChkZWF0aFJhdGUpOw0KKwkJcmVzdWx0LmFwcGVuZCgiLCB0aW1lUGVyaW9kOiAiKTsNCisJCXJlc3VsdC5hcHBlbmQodGltZVBlcmlvZCk7DQorCQlyZXN1bHQuYXBwZW5kKCcpJyk7DQorCQlyZXR1cm4gcmVzdWx0LnRvU3RyaW5nKCk7DQorCX0NCisNCisJQE92ZXJyaWRlDQorCXB1YmxpYyBQb3B1bGF0aW9uTW9kZWxMYWJlbCBjcmVhdGVQb3B1bGF0aW9uTGFiZWwoKSB7DQorCQlQb3B1bGF0aW9uTW9kZWxMYWJlbCByZXRWYWx1ZSA9ICBTdGFuZGFyZEZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZVN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWwoKTsNCisJCXJldFZhbHVlLnNldFR5cGVVUkkoUG9wdWxhdGlvbk1vZGVsTGFiZWwuVVJJX1RZUEVfRFlOQU1JQ19QT1BVTEFUSU9OX0xBQkVMKTsNCisJCXJldHVybiByZXRWYWx1ZTsNCisJfQ0KKw0KKwlAT3ZlcnJpZGUNCisJcHVibGljIFBvcHVsYXRpb25Nb2RlbExhYmVsVmFsdWUgY3JlYXRlUG9wdWxhdGlvbkxhYmVsVmFsdWUoKSB7DQorCQlyZXR1cm4gU3RhbmRhcmRGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVTdGFuZGFyZFBvcHVsYXRpb25Nb2RlbExhYmVsVmFsdWUoKTsNCisJfQ0KKw0KKwkvKioNCisJICogQ29tcHV0ZSB0aGUgY2hhbmdlcyBpbiB0aGUgcG9wdWxhdGlvbiBmcm9tIHRoZSBiaXJ0aC9kZWF0aCByYXRlDQorCSAqIGFkanVzdGVkIGZvciB0aGUgdGltZSBwZXJpb2QgdXNlZCBpbiB0aGUgc2ltdWxhdGlvbg0KKwkgKiBAcGFyYW0gdGltZQ0KKwkgKiBAcGFyYW0gdGltZURlbHRhDQorCSAqIEBwYXJhbSBsYWJlbHMNCisJICovDQorCXB1YmxpYyB2b2lkIGNhbGN1bGF0ZURlbHRhKFNURU1UaW1lIHRpbWUsIGxvbmcgdGltZURlbHRhLA0KKwkJCUVMaXN0PER5bmFtaWNMYWJlbD4gbGFiZWxzKSB7DQorCQkvLyBXZSBzaW1wbHkgY2FsY3VsYXRlIHRoZSBjaGFuZ2UgZnJvbSB0aGUgYmlydGgvZGVhdGggcmF0ZQ0KKwkJLy8gYWRqdXN0ZWQgZm9yIHRoZSB0aW1lIHBlcmlvZCB1c2VkIGluIHRoZSBzaW11bGF0aW9uDQorCQkNCisJCWRvdWJsZSBhZGp1c3RlZEJpcnRoUmF0ZSA9IGFkanVzdFJhdGUodGhpcy5nZXRCaXJ0aFJhdGUoKSwgdGhpcy5nZXRUaW1lUGVyaW9kKCksIHRpbWVEZWx0YSk7DQorCQlkb3VibGUgYWRqdXN0ZWREZWF0aFJhdGUgPSBhZGp1c3RSYXRlKHRoaXMuZ2V0RGVhdGhSYXRlKCksIHRoaXMuZ2V0VGltZVBlcmlvZCgpLCB0aW1lRGVsdGEpOw0KKwkJDQorCQlmb3IoRHluYW1pY0xhYmVsIGxhYmVsOmxhYmVscykgew0KKwkJCVN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWxJbXBsIHNsYWJlbCA9IChTdGFuZGFyZFBvcHVsYXRpb25Nb2RlbExhYmVsSW1wbClsYWJlbDsNCisJCQlTdGFuZGFyZFBvcHVsYXRpb25Nb2RlbExhYmVsVmFsdWVJbXBsIGRlbHRhID0gKFN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWxWYWx1ZUltcGwpc2xhYmVsLmdldERlbHRhVmFsdWUoKTsNCisJCQlTdGFuZGFyZFBvcHVsYXRpb25Nb2RlbExhYmVsVmFsdWUgY3VycmVudCA9IChTdGFuZGFyZFBvcHVsYXRpb25Nb2RlbExhYmVsVmFsdWUpc2xhYmVsLmdldFByb2JlVmFsdWUoKTsNCisJCQkNCisJCQlkb3VibGUgY3VycmVudFBvcHVsYXRpb24gPSBjdXJyZW50LmdldENvdW50KCk7DQorCQkJZG91YmxlIGJpcnRocyA9IGN1cnJlbnRQb3B1bGF0aW9uICogYWRqdXN0ZWRCaXJ0aFJhdGU7DQorCQkJZG91YmxlIGRlYXRocyA9IGN1cnJlbnRQb3B1bGF0aW9uICogYWRqdXN0ZWREZWF0aFJhdGU7DQorCQkJZGVsdGEuc2V0Q291bnQoYmlydGhzLWRlYXRocyk7DQorCQkJZGVsdGEuc2V0QmlydGhzKGJpcnRocyk7DQorCQkJZGVsdGEuc2V0RGVhdGhzKGRlYXRocyk7DQorCQkJDQorCQkJRXhjaGFuZ2UgYmlydGhFeGNoYW5nZSA9IEdyYXBoRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlRXhjaGFuZ2UoKTsNCisJCQlFeGNoYW5nZSBkZWF0aEV4Y2hhbmdlID0gR3JhcGhGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVFeGNoYW5nZSgpOw0KKwkJCQ0KKwkJCWJpcnRoRXhjaGFuZ2Uuc2V0VHlwZShFeGNoYW5nZVR5cGUuQklSVEhTX0FORF9ERUFUSFMpOw0KKwkJCWJpcnRoRXhjaGFuZ2Uuc2V0Q291bnQoYmlydGhzKTsNCisJCQlkZWF0aEV4Y2hhbmdlLnNldFR5cGUoRXhjaGFuZ2VUeXBlLkJJUlRIU19BTkRfREVBVEhTKTsNCisJCQlkZWF0aEV4Y2hhbmdlLnNldENvdW50KGRlYXRocyk7DQorCQkJZGVsdGEuZ2V0QXJyaXZhbHMoKS5jbGVhcigpOw0KKwkJCWRlbHRhLmdldERlcGFydHVyZXMoKS5jbGVhcigpOw0KKwkJCWRlbHRhLmdldEFycml2YWxzKCkuYWRkKGJpcnRoRXhjaGFuZ2UpOw0KKwkJCWRlbHRhLmdldERlcGFydHVyZXMoKS5hZGQoZGVhdGhFeGNoYW5nZSk7DQorCQkJDQorCQkJaGFuZGxlTWlncmF0aW9uKHNsYWJlbCwgZGVsdGEuZ2V0QXJyaXZhbHMoKSxkZWx0YS5nZXREZXBhcnR1cmVzKCksIHRoaXMuZ2V0VGltZVBlcmlvZCgpLCB0aW1lRGVsdGEsIGRlbHRhKTsNCisJCQloYW5kbGVQaXBlVHJhbnNwb3J0KHNsYWJlbCwgZGVsdGEuZ2V0QXJyaXZhbHMoKSxkZWx0YS5nZXREZXBhcnR1cmVzKCksIHRpbWVEZWx0YSwgZGVsdGEpOw0KKwkJCUVDb2xsZWN0aW9ucy5zb3J0KGRlbHRhLmdldEFycml2YWxzKCkpOw0KKwkJCUVDb2xsZWN0aW9ucy5zb3J0KGRlbHRhLmdldERlcGFydHVyZXMoKSk7DQorCQl9DQorCX0vLyBjYWxjdWxhdGVEZWx0YQ0KKw0KKwkNCisJDQorCQ0KKwkNCisJDQorCXByb3RlY3RlZCB2b2lkIGhhbmRsZVBpcGVUcmFuc3BvcnQoU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxMYWJlbEltcGwgcG9wdWxhdGlvbkxhYmVsLCBFTGlzdDxFeGNoYW5nZT5hcnJpdmFscyxFTGlzdDxFeGNoYW5nZT5kZXBhcnR1cmVzLCBsb25nIHRpbWVEZWx0YSwgU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxMYWJlbFZhbHVlSW1wbCBkZWx0YSkgew0KKwkJLy8gR2V0IHRoZSBwaXBlIHRyYW5zcG9ydCBlZGdlcyB0by9mcm9tIHRoZSBub2RlDQorCQlOb2RlIG5vZGUgPSBwb3B1bGF0aW9uTGFiZWwuZ2V0Tm9kZSgpOw0KKwkJTGlzdDxQaXBlVHJhbnNwb3J0RWRnZT5wZWRnZXMgPSBwaXBlVHJhbnNwb3J0YXRpb25Ob2RlRWRnZXNNYXAuZ2V0KG5vZGUpOw0KKwkJaWYocGVkZ2VzID09IG51bGwpIHJldHVybjsgLy8gbm8gZWRnZXMNCisJCQ0KKwkJLy8gTm93IGZpZ3VyZSBvdXQgaG93IG1hbnkgcGVvcGxlIHRvIGFjdHVhbGx5IG1vdmUgYmV0d2VlbiBub2Rlcw0KKwkJZm9yKFBpcGVUcmFuc3BvcnRFZGdlIHBlZGdlOnBlZGdlcykgew0KKwkJCWlmKCFwZWRnZS5nZXRQb3B1bGF0aW9uSWRlbnRpZmllcigpLmVxdWFscyh0aGlzLmdldFBvcHVsYXRpb25JZGVudGlmaWVyKCkpKSBjb250aW51ZTsgLy8gd3JvbmcgcG9wdWxhdGlvbg0KKwkJCQ0KKwkJCWJvb2xlYW4gaW5jb21taW5nID0gcGVkZ2UuZ2V0QigpLmVxdWFscyhub2RlKTsNCisJCQlpZihpbmNvbW1pbmcpIHsNCisJCQkJZm9yKE5vZGVMYWJlbCBsYWI6IHBlZGdlLmdldEEoKS5nZXRMYWJlbHMoKSkgew0KKwkJCQkJaWYobGFiIGluc3RhbmNlb2YgU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxMYWJlbCAmJiAoKFN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWwpbGFiKS5nZXRQb3B1bGF0aW9uSWRlbnRpZmllcigpLmVxdWFscyhwb3B1bGF0aW9uTGFiZWwuZ2V0UG9wdWxhdGlvbklkZW50aWZpZXIoKSkpIHsNCisJCQkJCQlTdGFuZGFyZFBvcHVsYXRpb25Nb2RlbExhYmVsIG90aGVyTGFiZWwgPSAoU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxMYWJlbClsYWI7DQorCQkJCQkJU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxMYWJlbFZhbHVlIG90aGVyVmFsdWUgPSAoU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxMYWJlbFZhbHVlKW90aGVyTGFiZWwuZ2V0VGVtcFZhbHVlKCk7DQorCQkJCQkJU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxMYWJlbFZhbHVlIGNoYW5nZSA9IChTdGFuZGFyZFBvcHVsYXRpb25Nb2RlbExhYmVsVmFsdWUpRWNvcmVVdGlsLmNvcHkob3RoZXJWYWx1ZSk7DQorCQkJCQkJUGlwZVRyYW5zcG9ydEVkZ2VMYWJlbFZhbHVlIGVkZ2VMYWJlbFZhbHVlID0gIChQaXBlVHJhbnNwb3J0RWRnZUxhYmVsVmFsdWUpcGVkZ2UuZ2V0TGFiZWwoKS5nZXRDdXJyZW50VmFsdWUoKTsNCisJCQkJCQlkb3VibGUgbWF4RmxvdyA9IGVkZ2VMYWJlbFZhbHVlLmdldE1heEZsb3coKTsNCisJCQkJCQlkb3VibGUgZmxvdyA9IG1heEZsb3c7DQorCQkJCQkJZG91YmxlIHBvcENvdW50ID0gKChTdGFuZGFyZFBvcHVsYXRpb25Nb2RlbExhYmVsVmFsdWUpb3RoZXJMYWJlbC5nZXRUZW1wVmFsdWUoKSkuZ2V0Q291bnQoKTsNCisJCQkJCQlpZihmbG93ID4gcG9wQ291bnQpIA0KKwkJCQkJCQlmbG93ID0gcG9wQ291bnQ7IC8vIGRvbid0IG1vdmUgbW9yZSBwZW9wbGUgdGhhbiBhdmFpbGFibGUuDQorCQkJCQkJDQorCQkJCQkJbG9uZyB0aW1lUGVyaW9kID0gZWRnZUxhYmVsVmFsdWUuZ2V0VGltZVBlcmlvZCgpOw0KKwkJCQkJCWRvdWJsZSBmYWN0b3IgPSBmbG93IC8gcG9wQ291bnQ7DQorCQkJCQkJDQorCQkJCQkJZmFjdG9yID0gZmFjdG9yICogdGltZURlbHRhIC8gdGltZVBlcmlvZDsNCisJCQkJCQlpZihEb3VibGUuaXNOYU4oZmFjdG9yKSB8fCBEb3VibGUuaXNJbmZpbml0ZShmYWN0b3IpKSBmYWN0b3IgPSAwLjA7DQorCQkJCQkJY2hhbmdlLnNjYWxlKGZhY3Rvcik7DQorCQkJCQkJDQorCQkJCQkJZGVsdGEuYWRkKChJbnRlZ3JhdGlvbkxhYmVsVmFsdWUpY2hhbmdlKTsNCisJCQkJCQkNCisJCQkJCQlFeGNoYW5nZSBtaWdyYXRpb25FeGNoYW5nZSA9IEdyYXBoRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlRXhjaGFuZ2UoKTsNCisJCQkJCQkNCisJCQkJCQltaWdyYXRpb25FeGNoYW5nZS5zZXRUeXBlKEV4Y2hhbmdlVHlwZS5NSUdSQVRJT04pOw0KKwkJCQkJCW1pZ3JhdGlvbkV4Y2hhbmdlLnNldE90aGVyTGFiZWwob3RoZXJMYWJlbCk7DQorCQkJCQkJbWlncmF0aW9uRXhjaGFuZ2Uuc2V0Q291bnQoY2hhbmdlLmdldENvdW50KCkpOw0KKwkJCQkJCWRlbHRhLmdldEFycml2YWxzKCkuYWRkKG1pZ3JhdGlvbkV4Y2hhbmdlKTsNCisJCQkJCQlicmVhazsNCisJCQkJCX0NCisJCQkJfQ0KKwkJCX0gZWxzZSB7IC8vIG91dGdvaW5nIGVkZ2UNCisJCQkJZm9yKE5vZGVMYWJlbCBsYWI6IHBlZGdlLmdldEIoKS5nZXRMYWJlbHMoKSkgew0KKwkJCQkJaWYobGFiIGluc3RhbmNlb2YgU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxMYWJlbCAmJiAoKFN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWwpbGFiKS5nZXRQb3B1bGF0aW9uSWRlbnRpZmllcigpLmVxdWFscyhwb3B1bGF0aW9uTGFiZWwuZ2V0UG9wdWxhdGlvbklkZW50aWZpZXIoKSkpIHsNCisJCQkJCQlTdGFuZGFyZFBvcHVsYXRpb25Nb2RlbExhYmVsIG90aGVyTGFiZWwgPSAoU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxMYWJlbClsYWI7DQorCQkJCQkJU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxMYWJlbFZhbHVlIHRoaXNWYWx1ZSA9IChTdGFuZGFyZFBvcHVsYXRpb25Nb2RlbExhYmVsVmFsdWUpcG9wdWxhdGlvbkxhYmVsLmdldFRlbXBWYWx1ZSgpOw0KKwkJCQkJCVN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWxWYWx1ZSBjaGFuZ2UgPSAoU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxMYWJlbFZhbHVlKUVjb3JlVXRpbC5jb3B5KHRoaXNWYWx1ZSk7DQorCQkJCQkJUGlwZVRyYW5zcG9ydEVkZ2VMYWJlbFZhbHVlIGVkZ2VMYWJlbFZhbHVlID0gIChQaXBlVHJhbnNwb3J0RWRnZUxhYmVsVmFsdWUpcGVkZ2UuZ2V0TGFiZWwoKS5nZXRDdXJyZW50VmFsdWUoKTsNCisJCQkJCQlkb3VibGUgbWF4RmxvdyA9IGVkZ2VMYWJlbFZhbHVlLmdldE1heEZsb3coKTsNCisJCQkJCQlkb3VibGUgcG9wQ291bnQgPSAoKFN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWxWYWx1ZSlwb3B1bGF0aW9uTGFiZWwuZ2V0VGVtcFZhbHVlKCkpLmdldENvdW50KCk7DQorCQkJCQkJZG91YmxlIGZsb3cgPSBtYXhGbG93Ow0KKwkJCQkJCWlmKGZsb3cgPiBwb3BDb3VudCkgDQorCQkJCQkJCWZsb3cgPSBwb3BDb3VudDsNCisNCisJCQkJCQlsb25nIHRpbWVQZXJpb2QgPSBlZGdlTGFiZWxWYWx1ZS5nZXRUaW1lUGVyaW9kKCk7DQorCQkJCQkJZG91YmxlIGZhY3RvciA9IGZsb3cgLyBwb3BDb3VudDsNCisJCQkJCQlmYWN0b3IgPSBmYWN0b3IgKiB0aW1lRGVsdGEgLyB0aW1lUGVyaW9kOw0KKwkJCQkJCWlmKERvdWJsZS5pc05hTihmYWN0b3IpIHx8IERvdWJsZS5pc0luZmluaXRlKGZhY3RvcikpIGZhY3RvciA9IDAuMDsNCisJCQkJCQljaGFuZ2Uuc2NhbGUoZmFjdG9yKTsNCisJCQkJCQkNCisJCQkJCQlkZWx0YS5zdWIoKEludGVncmF0aW9uTGFiZWxWYWx1ZSljaGFuZ2UpOw0KKwkJCQkJCQ0KKwkJCQkJCUV4Y2hhbmdlIG1pZ3JhdGlvbkV4Y2hhbmdlID0gR3JhcGhGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVFeGNoYW5nZSgpOw0KKwkJCQkJCQ0KKwkJCQkJCW1pZ3JhdGlvbkV4Y2hhbmdlLnNldFR5cGUoRXhjaGFuZ2VUeXBlLk1JR1JBVElPTik7DQorCQkJCQkJbWlncmF0aW9uRXhjaGFuZ2Uuc2V0T3RoZXJMYWJlbChvdGhlckxhYmVsKTsNCisJCQkJCQltaWdyYXRpb25FeGNoYW5nZS5zZXRDb3VudChjaGFuZ2UuZ2V0Q291bnQoKSk7DQorCQkJCQkJZGVsdGEuZ2V0RGVwYXJ0dXJlcygpLmFkZChtaWdyYXRpb25FeGNoYW5nZSk7DQorCQkJCQkJYnJlYWs7DQorCQkJCQl9DQorCQkJCX0NCisJCQl9DQorCQl9IC8vIGZvciBlYWNoIGVkZ2UJCQ0KKwl9DQorCQ0KKwlwcm90ZWN0ZWQgZG91YmxlIGFkanVzdFJhdGUoZG91YmxlIHJhdGUsIGxvbmcgcmF0ZVBlcmlvZCwgbG9uZyBhY3R1YWxQZXJpb2QpIHsNCisJCXJldHVybiByYXRlICogKChkb3VibGUpYWN0dWFsUGVyaW9kLyhkb3VibGUpcmF0ZVBlcmlvZCk7DQorCX0NCisJDQorCXB1YmxpYyB2b2lkIGRvTW9kZWxTcGVjaWZpY0FkanVzdG1lbnRzKExhYmVsVmFsdWUgbGFiZWwpIHsNCisJCS8vIFRPRE8gQXV0by1nZW5lcmF0ZWQgbWV0aG9kIHN0dWINCisJCQ0KKwl9DQorDQorCQ0KKwlwdWJsaWMgYm9vbGVhbiBpc0RldGVybWluaXN0aWMoKSB7DQorCQlyZXR1cm4gdHJ1ZTsNCisJfQ0KKw0KKwlAU3VwcHJlc3NXYXJuaW5ncygiYm94aW5nIikNCisJcHJvdGVjdGVkIHZvaWQgcG9wdWxhdGVQaXBlU3lzdGVtTm9kZXMoKSB7DQorCQlHcmFwaCBncmFwaCA9IHRoaXMuZ2V0R3JhcGgoKTsNCisJCQ0KKwkJaWYocGlwZVRyYW5zcG9ydGF0aW9uTm9kZUVkZ2VzTWFwID09IG51bGwpICBpbml0UGlwZVRyYW5zcG9ydChncmFwaCk7DQorCQkNCisJCWZvcihNYXAuRW50cnk8Tm9kZSwgTGlzdDxQaXBlVHJhbnNwb3J0RWRnZT4+ZW50cnk6cGlwZVRyYW5zcG9ydGF0aW9uTm9kZUVkZ2VzTWFwLmVudHJ5U2V0KCkpIHsNCisJCQlOb2RlIG4gPSBlbnRyeS5nZXRLZXkoKTsNCisJCQlpZihuIGluc3RhbmNlb2YgUGlwZVN0eWxlVHJhbnNwb3J0U3lzdGVtKSB7DQorCQkJCS8vIFdlIG5lZWQgdG8gY3JlYXRlIGFuIGluaXRpYWwgcG9wdWxhdGlvbiBoZXJlLiANCisJCQkJLy8gV2UgZG8gdGhpcyBieSBsb29raW5nIGF0IGFsbCBpbmNvbWluZyBwaXBlIGVkZ2VzIHRvIHRoZSBub2RlIGFuZCBhZGQgdXAgdGhlIHRvdGFsIGZsb3cuDQorCQkJCUxpc3Q8UGlwZVRyYW5zcG9ydEVkZ2U+cGlwZUVkZ2VzID0gZW50cnkuZ2V0VmFsdWUoKTsNCisJCQkJZG91YmxlIHRvdGFsUG9wID0gMC4wOw0KKwkJCQlmb3IoUGlwZVRyYW5zcG9ydEVkZ2UgcGVkZ2U6cGlwZUVkZ2VzKSANCisJCQkJCWlmKHBlZGdlLmdldEIoKS5lcXVhbHMobikpIA0KKwkJCQkJCXRvdGFsUG9wICs9ICgoUGlwZVRyYW5zcG9ydEVkZ2VMYWJlbFZhbHVlKSBwZWRnZS5nZXRMYWJlbCgpLmdldEN1cnJlbnRWYWx1ZSgpKS5nZXRNYXhGbG93KCk7DQorCQkJDQorCQkJCWZvcihOb2RlTGFiZWwgbmxhYmVsOm4uZ2V0TGFiZWxzKCkpIHsNCisJCQkJCWlmKG5sYWJlbCBpbnN0YW5jZW9mIFN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWwgJiYgKChTdGFuZGFyZFBvcHVsYXRpb25Nb2RlbExhYmVsKW5sYWJlbCkuZ2V0UG9wdWxhdGlvbklkZW50aWZpZXIoKS5lcXVhbHModGhpcy5nZXRQb3B1bGF0aW9uSWRlbnRpZmllcigpKSkgew0KKwkJCQkJCVN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWxWYWx1ZSBzcGx2ID0gKFN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWxWYWx1ZSkoKFN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWwpbmxhYmVsKS5nZXRDdXJyZW50VmFsdWUoKTsNCisJCQkJCQlzcGx2LnNldENvdW50KHRvdGFsUG9wKTsNCisJCQkJCQlQb3B1bGF0aW9uTGFiZWxWYWx1ZSBwbHYgPSAoUG9wdWxhdGlvbkxhYmVsVmFsdWUpKChTdGFuZGFyZFBvcHVsYXRpb25Nb2RlbExhYmVsKW5sYWJlbCkuZ2V0UG9wdWxhdGlvbkxhYmVsKCkuZ2V0Q3VycmVudFBvcHVsYXRpb25WYWx1ZSgpOw0KKwkJCQkJCXBsdi5zZXRDb3VudCh0b3RhbFBvcCk7DQorCQkJCQl9DQorCQkJCX0NCisJCQl9DQorCQl9DQorDQorCQkvKk1hcDxJbnRlZ2VyLCBMaXN0PFBpcGVUcmFuc3BvcnRFZGdlPj4gbWFwID0gcGlwZVRyYW5zcG9ydGF0aW9uVXBFZGdlc01hcDsNCisJCQ0KKwkJSW50ZWdlciBbXSBsZXZlbHMgPSBuZXcgSW50ZWdlclttYXAua2V5U2V0KCkuc2l6ZSgpXTsNCisJCWxldmVscyA9IG1hcC5rZXlTZXQoKS50b0FycmF5KGxldmVscyk7DQorCQlBcnJheXMuc29ydChsZXZlbHMsIDAsIGxldmVscy5sZW5ndGgsIA0KKwkJCQluZXcgQ29tcGFyYXRvcjxJbnRlZ2VyPigpIHsNCisJCQkJCXB1YmxpYyBpbnQgY29tcGFyZShJbnRlZ2VyIG8xLCBJbnRlZ2VyIG8yKSB7DQorCQkJCQkJaWYobzEgPCBvMikgcmV0dXJuIDE7DQorCQkJCQllbHNlIGlmKG8xID4gbzIpIHJldHVybiAtMTsNCisJCQkJCQlyZXR1cm4gMDsNCisJCQkJCX0NCisJCX0pOw0KKwkJDQorCQlTdGFuZGFyZFBvcHVsYXRpb25Nb2RlbExhYmVsVmFsdWUgY3VycnNyY2xhYmVsdmFsPW51bGwsIGN1cnJkZXN0bGFiZWx2YWw9bnVsbDsNCisJCVBvcHVsYXRpb25MYWJlbFZhbHVlIHN0YXRpY0Rlc3RMYWJlbFZhbHVlPW51bGw7DQorCQkNCisJCS8vIEZpcnN0LCB3ZSBjbGVhciBvdXQgYW55IGV4aXN0aW5nIHBvcHVsYXRpb24gaW4gdGhlIGFpciB0cmFuc3BvcnRhdGlvbiBzeXN0ZW0gbm9kZXMuIElmIHdlIGRvbid0IGRvIHRoaXMsIHdlIHdpbGwgbW92ZSBtb3JlIHBlb3BsZSB0aGFuIHdlDQorCQkvLyBleHBlY3QgdXAgaW50byB0aGUgYWlyIHRoZSBzZWNvbmQgdGltZSB3ZSBydW4gdGhlIHNhbWUgc2NlbmFyaW8NCisJCQ0KKwkJZm9yKGludCBsZXZlbCA6IGxldmVscykgew0KKwkJCUxpc3Q8UGlwZVRyYW5zcG9ydEVkZ2U+IGVkZ2VzID0gbWFwLmdldChsZXZlbCk7DQorCQkJDQorCQkJZm9yKFBpcGVUcmFuc3BvcnRFZGdlIHB0ZWRnZTplZGdlcykgew0KKwkJCQkvLyBNb3ZlIHBlb3BsZSBmcm9tIHNvdXJjZSB0byBkZXN0aW5hdGlvbiB1c2luZyB0aGUgZmxvdyBvZiB0aGUgcGlwZQ0KKwkJCQlOb2RlIHNvdXJjZSA9IHB0ZWRnZS5nZXRBKCk7DQorCQkJCU5vZGUgZGVzdCA9IHB0ZWRnZS5nZXRCKCk7DQorCQkJCWlmKHNvdXJjZSA9PSBudWxsIHx8IGRlc3QgPT0gbnVsbCkgY29udGludWU7IC8vIG9rLCB0aGUgcmVnaW9uIG9yIHRyYW5zcG9ydCBzeXN0ZW0gaXMgbm90IHBhcnQgb2YgdGhlIG1vZGVsDQorCQ0KKwkJCQlTdHJpbmcgcG9wSWRTcmM9bnVsbDsNCisJCQkJZm9yKE5vZGVMYWJlbCBubGFiZWw6c291cmNlLmdldExhYmVscygpKSB7DQorCQkJCQlpZihubGFiZWwgaW5zdGFuY2VvZiBQb3B1bGF0aW9uTW9kZWxMYWJlbCkgew0KKwkJCQkJCWN1cnJzcmNsYWJlbHZhbCA9IChTdGFuZGFyZFBvcHVsYXRpb25Nb2RlbExhYmVsVmFsdWUpKChQb3B1bGF0aW9uTW9kZWxMYWJlbClubGFiZWwpLmdldEN1cnJlbnRWYWx1ZSgpOw0KKwkJCQkJCXBvcElkU3JjID0gKChQb3B1bGF0aW9uTW9kZWxMYWJlbClubGFiZWwpLmdldFBvcHVsYXRpb25JZGVudGlmaWVyKCk7DQorCQkJCQl9IGVsc2UgY29udGludWU7DQorCQkJCQ0KKwkJCQkJZm9yKE5vZGVMYWJlbCBubGFiZWwyOmRlc3QuZ2V0TGFiZWxzKCkpIHsNCisJCQkJCQlpZihubGFiZWwyIGluc3RhbmNlb2YgUG9wdWxhdGlvbk1vZGVsTGFiZWwgJiYNCisJCQkJCQkJCSgoUG9wdWxhdGlvbk1vZGVsTGFiZWwpbmxhYmVsMikuZ2V0UG9wdWxhdGlvbklkZW50aWZpZXIoKS5lcXVhbHMocG9wSWRTcmMpKSB7DQorCQkJCQkJCSgoU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxMYWJlbFZhbHVlKSgoUG9wdWxhdGlvbk1vZGVsTGFiZWwpbmxhYmVsMikuZ2V0Q3VycmVudFZhbHVlKCkpLnNldENvdW50KDAuMCk7DQorCQkJCQkJCSgoUG9wdWxhdGlvbkxhYmVsVmFsdWUpKChQb3B1bGF0aW9uTW9kZWxMYWJlbClubGFiZWwyKS5nZXRQb3B1bGF0aW9uTGFiZWwoKS5nZXRDdXJyZW50VmFsdWUoKSkuc2V0Q291bnQoMC4wKTsNCisJCQkJCQl9DQorCQkJCQl9DQorCQkJCX0NCisJCQl9DQorCQl9DQorCQkNCisJCQ0KKwkJLy8gTm93LCBtb3ZlIHBlb3BsZSBmcm9tIHRoZSByZWdpb24gbm9kZXMgdXAgaW50byB0aGUgYWlyIHRyYW5zcG9ydGF0aW9uIG5vZGVzLiBXZSBtb3ZlIGV4YWN0bHkgYSBmcmFjdGlvbiBvZiBwZW9wbGUgY29ycmVzcG9uZGluZw0KKwkJLy8gdG8gdGhlIHBhc3NlbmdlciBjb3VudHMgZm9yIGVhY2ggYWlyIChwaXBlKSB0cmFuc3BvcnQgZWRnZS4NCisJCQ0KKwkJDQorCQlmb3IoaW50IGxldmVsIDogbGV2ZWxzKSB7DQorCQkJTGlzdDxQaXBlVHJhbnNwb3J0RWRnZT4gZWRnZXMgPSBtYXAuZ2V0KGxldmVsKTsNCisJCQkNCisJCQlmb3IoUGlwZVRyYW5zcG9ydEVkZ2UgcHRlZGdlOmVkZ2VzKSB7DQorCQkJCS8vIE1vdmUgcGVvcGxlIGZyb20gc291cmNlIHRvIGRlc3RpbmF0aW9uIHVzaW5nIHRoZSBmbG93IG9mIHRoZSBwaXBlDQorCQkJCU5vZGUgc291cmNlID0gcHRlZGdlLmdldEEoKTsNCisJCQkJTm9kZSBkZXN0ID0gcHRlZGdlLmdldEIoKTsNCisJCQkJaWYoc291cmNlID09IG51bGwgfHwgZGVzdCA9PSBudWxsKSBjb250aW51ZTsgLy8gb2ssIHRoZSByZWdpb24gb3IgdHJhbnNwb3J0IHN5c3RlbSBpcyBub3QgcGFydCBvZiB0aGUgbW9kZWwNCisJCQkJDQorCQkJCVBpcGVUcmFuc3BvcnRFZGdlTGFiZWxWYWx1ZSBsYWJlbCA9IChQaXBlVHJhbnNwb3J0RWRnZUxhYmVsVmFsdWUpIHB0ZWRnZS5nZXRMYWJlbCgpLmdldEN1cnJlbnRWYWx1ZSgpOw0KKwkJCQlkb3VibGUgbWF4ZmxvdyA9IGxhYmVsLmdldE1heEZsb3coKTsNCisJCQkJDQorCQkJCQ0KKwkJCQkNCisJCQkJU3RyaW5nIHBvcElkU3JjPW51bGw7DQorCQkJCWZvcihOb2RlTGFiZWwgbmxhYmVsOnNvdXJjZS5nZXRMYWJlbHMoKSkgew0KKwkJCQkJaWYobmxhYmVsIGluc3RhbmNlb2YgUG9wdWxhdGlvbk1vZGVsTGFiZWwpIHsNCisJCQkJCQljdXJyc3JjbGFiZWx2YWwgPSAoU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxMYWJlbFZhbHVlKSgoUG9wdWxhdGlvbk1vZGVsTGFiZWwpbmxhYmVsKS5nZXRDdXJyZW50VmFsdWUoKTsNCisJCQkJCQlwb3BJZFNyYyA9ICgoUG9wdWxhdGlvbk1vZGVsTGFiZWwpbmxhYmVsKS5nZXRQb3B1bGF0aW9uSWRlbnRpZmllcigpOw0KKwkJCQkJfSBlbHNlIGNvbnRpbnVlOw0KKwkJCQkNCisJCQkJCWZvcihOb2RlTGFiZWwgbmxhYmVsMjpkZXN0LmdldExhYmVscygpKSB7DQorCQkJCQkJaWYobmxhYmVsMiBpbnN0YW5jZW9mIFBvcHVsYXRpb25Nb2RlbExhYmVsICYmDQorCQkJCQkJCQkoKFBvcHVsYXRpb25Nb2RlbExhYmVsKW5sYWJlbDIpLmdldFBvcHVsYXRpb25JZGVudGlmaWVyKCkuZXF1YWxzKHBvcElkU3JjKSkgew0KKwkJCQkJCQljdXJyZGVzdGxhYmVsdmFsID0gKFN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWxWYWx1ZSkoKFBvcHVsYXRpb25Nb2RlbExhYmVsKW5sYWJlbDIpLmdldEN1cnJlbnRWYWx1ZSgpOw0KKwkJCQkJCQlzdGF0aWNEZXN0TGFiZWxWYWx1ZSA9IChQb3B1bGF0aW9uTGFiZWxWYWx1ZSkoKFBvcHVsYXRpb25Nb2RlbExhYmVsKW5sYWJlbDIpLmdldFBvcHVsYXRpb25MYWJlbCgpLmdldEN1cnJlbnRWYWx1ZSgpOw0KKwkJCQkJCX0NCisJCQkJCX0NCisJCQkJCQ0KKwkJCQkJaWYoY3VycnNyY2xhYmVsdmFsID09IG51bGwgfHwgY3VycmRlc3RsYWJlbHZhbCA9PSBudWxsKSB7DQorCQkJCQkJY29udGludWU7IC8vIHBvc3NpYmxlIGZvciB0cmFuc3BvcnQgcGlwZXMgY29ubmVjdGVkIHRvIHJlZ2lvbnMgYWJvdmUgdGhlIGxvd2VzdCByZWdpb24gcGFydCBvZiB0aGUgbW9kZWwNCisJCQkJCX0NCisJCQkJCQ0KKwkJCQkJLy8gQ2hlY2ssIG1ha2Ugc3VyZSB3ZSBkb24ndCBtb3ZlIG1vcmUgcGVvcGxlIHRoYW4gYXZhaWxhYmxlDQorCQkJCQkNCisJCQkJCWRvdWJsZSBmbG93ID0gbWF4ZmxvdzsJDQorCQkJCQlpZihjdXJyc3JjbGFiZWx2YWwuZ2V0Q291bnQoKSA8IGZsb3cpIGZsb3cgPSBjdXJyc3JjbGFiZWx2YWwuZ2V0Q291bnQoKTsgLy8gY2hlY2sNCisJCQkJCQ0KKwkJCQkJZG91YmxlIGZhY3RvciA9IGZsb3cgLyBjdXJyc3JjbGFiZWx2YWwuZ2V0Q291bnQoKTsNCisJCQkJCWlmKERvdWJsZS5pc05hTihmYWN0b3IpKSBmYWN0b3IgPSAwLjA7DQorCQkJCQkNCisJCQkJCVN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWxWYWx1ZSBtb3ZlID0gbnVsbDsNCisJCQkJCQ0KKwkJCQkJbW92ZSA9IChTdGFuZGFyZFBvcHVsYXRpb25Nb2RlbExhYmVsVmFsdWUpRWNvcmVVdGlsLmNvcHkoY3VycnNyY2xhYmVsdmFsKTsNCisJCQkJCQ0KKwkJCQkJbW92ZS5zY2FsZShmYWN0b3IpOw0KKwkJCQkNCisJCQkJCWN1cnJkZXN0bGFiZWx2YWwuYWRkKChJbnRlZ3JhdGlvbkxhYmVsVmFsdWUpbW92ZSk7DQorCQkJCQkNCisJCQkJCS8vIEFsc28gc2V0IHRoZSBwb3B1bGF0aW9ubGFiZWwgdG8gdGhlIGNvdW50IG9mIHRoZSBwb3B1bGF0aW9uIG1vZGVsIGxhYmVsIHNpbmNlIGl0J3MgMCBmb3IgYWlyIHRyYW5zcG9ydCBub2RlcyB3aGVuIGJ1aWx0IGluIFNURU0uIE5lZWRlZCB3aGVuIHdlIHJlc2V0IHRoZSB2YWx1ZSBiYWNrIHRvIHRoZSBvcmlnaW5hbCBsYXRlcg0KKwkJCQkJc3RhdGljRGVzdExhYmVsVmFsdWUuc2V0Q291bnQoY3VycmRlc3RsYWJlbHZhbC5nZXRDb3VudCgpK3N0YXRpY0Rlc3RMYWJlbFZhbHVlLmdldENvdW50KCkpOw0KKwkJCQl9IC8vIGZvciBlYWNoIGxhYmVsIG9uIHRoZSBzb3VyY2Ugbm9kZQ0KKwkJCX0NCisJCX0NCisJCQ0KKwkJLy8gQ2hlY2sgZm9yIG5vZGVzIHRoYXQgaGF2ZSBubyBpbml0aWFsIHBvcHVsYXRpb24uIEdldCByaWQgb2YgdGhvc2UNCisJCUFycmF5TGlzdDxOb2RlPm5vZGVzVG9SZW1vdmUgPSBuZXcgQXJyYXlMaXN0PE5vZGU+KCk7DQorCQlmb3IoTm9kZSBuOnBpcGVUcmFuc3BvcnRhdGlvbk5vZGVFZGdlc01hcC5rZXlTZXQoKSkgew0KKwkJCWJvb2xlYW4gcmVtb3ZlID0gZmFsc2U7DQorCQkJaWYoIChuIGluc3RhbmNlb2YgUGlwZVN0eWxlVHJhbnNwb3J0U3lzdGVtSW1wbCkpIHsNCisJCQkJUGlwZVN0eWxlVHJhbnNwb3J0U3lzdGVtSW1wbCBwc3RzID0gKFBpcGVTdHlsZVRyYW5zcG9ydFN5c3RlbUltcGwpbjsNCisJCQkJZm9yKE5vZGVMYWJlbCBsOnBzdHMuZ2V0TGFiZWxzKCkpIHsNCisJCQkJCWlmKGwgaW5zdGFuY2VvZiBTdGFuZGFyZFBvcHVsYXRpb25Nb2RlbExhYmVsKSB7DQorCQkJCQkJU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxMYWJlbCBzbCA9IChTdGFuZGFyZFBvcHVsYXRpb25Nb2RlbExhYmVsKWw7DQorCQkJCQkJU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxMYWJlbFZhbHVlIHNsdiA9IChTdGFuZGFyZFBvcHVsYXRpb25Nb2RlbExhYmVsVmFsdWUpc2wuZ2V0Q3VycmVudFZhbHVlKCk7DQorCQkJCQkJaWYoc2x2LmdldENvdW50KCkgPT0gMC4wKSB7DQorCQkJCQkJCXJlbW92ZSA9IHRydWU7YnJlYWs7DQorCQkJCQkJfQ0KKwkJCQkJfQ0KKwkJCQkJaWYocmVtb3ZlKWJyZWFrOw0KKwkJCQl9DQorCQkJCUFycmF5TGlzdDxQaXBlVHJhbnNwb3J0RWRnZT5lZGdlc1RvUmVtb3ZlID0gbmV3IEFycmF5TGlzdDxQaXBlVHJhbnNwb3J0RWRnZT4oKTsNCisJCQkJaWYocmVtb3ZlKSB7DQorCQkJCQlBY3RpdmF0b3IubG9nSW5mb3JtYXRpb24oIldhcm5pbmcsIGlnbm9yaW5nIGFpciB0cmFuc3BvcnRhdGlvbiBub2RlIHdpdGhvdXQgcG9wdWxhdGlvbiAiK24sIG5ldyBFeGNlcHRpb24oKSk7DQorCQkJCQlub2Rlc1RvUmVtb3ZlLmFkZChuKTsNCisJCQkJCS8vIFJlbW92ZSBhbGwgYWlyIHRyYW5zcG9ydCBlZGdlcyB1c2luZyB0aGUgbm9kZSBhcyB3ZWxsIGFzIHRoZSBub2RlIGl0c2VsZg0KKwkJCQkJZm9yKExpc3Q8UGlwZVRyYW5zcG9ydEVkZ2U+bCA6cGlwZVRyYW5zcG9ydGF0aW9uRG93bkVkZ2VzTWFwLnZhbHVlcygpKSB7DQorCQkJCQkJZm9yKFBpcGVUcmFuc3BvcnRFZGdlIHBzZTpsKSB7DQorCQkJCQkJCWlmKHBzZS5nZXRBKCkgPT0gbnVsbCB8fCBwc2UuZ2V0QigpID09IG51bGwpIGNvbnRpbnVlOw0KKwkJCQkJCQlpZihwc2UuZ2V0QSgpLmVxdWFscyhuKSB8fCBwc2UuZ2V0QigpLmVxdWFscyhuKSkgew0KKwkJCQkJCQkJaWYoIWVkZ2VzVG9SZW1vdmUuY29udGFpbnMocHNlKSllZGdlc1RvUmVtb3ZlLmFkZChwc2UpOw0KKwkJCQkJCQl9DQorCQkJCQkJfQ0KKwkJCQkJfQ0KKwkJCQkJZm9yKExpc3Q8UGlwZVRyYW5zcG9ydEVkZ2U+bCA6cGlwZVRyYW5zcG9ydGF0aW9uVXBFZGdlc01hcC52YWx1ZXMoKSkgew0KKwkJCQkJCWZvcihQaXBlVHJhbnNwb3J0RWRnZSBwc2U6bCkgew0KKwkJCQkJCQlpZihwc2UuZ2V0QSgpID09IG51bGwgfHwgcHNlLmdldEIoKSA9PSBudWxsKSBjb250aW51ZTsNCisJCQkJCQkJaWYocHNlLmdldEEoKS5lcXVhbHMobikgfHwgcHNlLmdldEIoKS5lcXVhbHMobikpIHsNCisJCQkJCQkJCWlmKCFlZGdlc1RvUmVtb3ZlLmNvbnRhaW5zKHBzZSkpZWRnZXNUb1JlbW92ZS5hZGQocHNlKTsNCisJCQkJCQkJfQ0KKwkJCQkJCX0NCisJCQkJCX0NCisJCQkJCWZvcihQaXBlVHJhbnNwb3J0RWRnZSBwc2U6ZWRnZXNUb1JlbW92ZSkgeyANCisJCQkJCQlmb3IoTGlzdDxQaXBlVHJhbnNwb3J0RWRnZT5sIDpwaXBlVHJhbnNwb3J0YXRpb25Eb3duRWRnZXNNYXAudmFsdWVzKCkpDQorCQkJCQkJCWwucmVtb3ZlKHBzZSk7DQorCQkJCQkJZm9yKExpc3Q8UGlwZVRyYW5zcG9ydEVkZ2U+bCA6cGlwZVRyYW5zcG9ydGF0aW9uVXBFZGdlc01hcC52YWx1ZXMoKSkNCisJCQkJCQkJbC5yZW1vdmUocHNlKTsNCisJCQkJCX0NCisJCQkJCWZvcihQaXBlVHJhbnNwb3J0RWRnZSBwc2U6ZWRnZXNUb1JlbW92ZSkgeyANCisJCQkJCQlmb3IoTGlzdDxQaXBlVHJhbnNwb3J0RWRnZT5sIDpwaXBlVHJhbnNwb3J0YXRpb25Ob2RlRWRnZXNNYXAudmFsdWVzKCkpDQorCQkJCQkJCWwucmVtb3ZlKHBzZSk7DQorCQkJCQkJZm9yKExpc3Q8UGlwZVRyYW5zcG9ydEVkZ2U+bCA6cGlwZVRyYW5zcG9ydGF0aW9uTm9kZUVkZ2VzTWFwLnZhbHVlcygpKQ0KKwkJCQkJCQlsLnJlbW92ZShwc2UpOw0KKwkJCQkJfQ0KKwkJCQkJDQorCQkJCX0NCisJCQl9DQorCQl9DQorCQlmb3IoTm9kZSBuOm5vZGVzVG9SZW1vdmUpIHBpcGVUcmFuc3BvcnRhdGlvbk5vZGVFZGdlc01hcC5yZW1vdmUobik7DQorCQkqLw0KKwl9DQorCQ0KKwkvKioNCisJICogaW5pdGlhbGl6ZSBwaXBlIHRyYW5zcG9ydCBtYXBzIG9yZ2FuaXppbmcgcGlwZXMgYnkgZGlyZWN0aW9uICh1cC9kb3duKQ0KKwkgKiBhbmQgbGV2ZWwNCisJICogQHBhcmFtIGdyYXBoDQorCSAqLw0KKwlAU3VwcHJlc3NXYXJuaW5ncygiYm94aW5nIikNCisJcHJpdmF0ZSB2b2lkIGluaXRQaXBlVHJhbnNwb3J0KEdyYXBoIGdyYXBoKSB7DQorCQlwaXBlVHJhbnNwb3J0YXRpb25Ob2RlRWRnZXNNYXAgPSBuZXcgSGFzaE1hcDxOb2RlLCBMaXN0PFBpcGVUcmFuc3BvcnRFZGdlPj4oKTsNCisJCS8vIFRyYXZlcnNlIGFsbCBwaXBlIHRyYW5zcG9ydCBlZGdlcyBhbmQgZGV0ZXJtaW5lIHdoYXQNCisJCS8vIGdlb2dyYXBoaWMgbGV2ZWwgdGhlaXIgc291cmNlIChBKSBub2RlIGlzIGF0DQorCQlmb3IoVVJJIGVkZ2VVUkkgOiBncmFwaC5nZXRFZGdlcygpLmtleVNldCgpKSB7DQorCQkJRWRnZSBlZGdlID0gZ3JhcGguZ2V0RWRnZXMoKS5nZXQoZWRnZVVSSSk7DQorCQkJDQorCQkJaWYoZWRnZSBpbnN0YW5jZW9mIFBpcGVUcmFuc3BvcnRFZGdlKSB7DQorCQkJCVBpcGVUcmFuc3BvcnRFZGdlIHBlZGdlID0gKFBpcGVUcmFuc3BvcnRFZGdlKWVkZ2U7DQorCQkJCQkJCQkNCisJCQkJDQorCQkJCU5vZGUgYSA9IGVkZ2UuZ2V0QSgpOw0KKwkJCQlOb2RlIGIgPSBlZGdlLmdldEIoKTsNCisJCQkJDQorCQkJCWlmKGEgIT0gbnVsbCkNCisJCQkJCWlmKHBpcGVUcmFuc3BvcnRhdGlvbk5vZGVFZGdlc01hcC5jb250YWluc0tleShhKSkNCisJCQkJCQlwaXBlVHJhbnNwb3J0YXRpb25Ob2RlRWRnZXNNYXAuZ2V0KGEpLmFkZChwZWRnZSk7DQorCQkJCQllbHNlIHsNCisJCQkJCQlBcnJheUxpc3Q8UGlwZVRyYW5zcG9ydEVkZ2U+IG5ld0xpc3QgPSBuZXcgQXJyYXlMaXN0PFBpcGVUcmFuc3BvcnRFZGdlPigpOw0KKwkJCQkJCW5ld0xpc3QuYWRkKHBlZGdlKTsNCisJCQkJCQlwaXBlVHJhbnNwb3J0YXRpb25Ob2RlRWRnZXNNYXAucHV0KGEsIG5ld0xpc3QpOw0KKwkJCQkJfQkNCisJCQkJDQorCQkJCWlmKGIgIT0gbnVsbCkNCisJCQkJCWlmKHBpcGVUcmFuc3BvcnRhdGlvbk5vZGVFZGdlc01hcC5jb250YWluc0tleShiKSkNCisJCQkJCQlwaXBlVHJhbnNwb3J0YXRpb25Ob2RlRWRnZXNNYXAuZ2V0KGIpLmFkZChwZWRnZSk7DQorCQkJCQllbHNlIHsNCisJCQkJCQlBcnJheUxpc3Q8UGlwZVRyYW5zcG9ydEVkZ2U+IG5ld0xpc3QgPSBuZXcgQXJyYXlMaXN0PFBpcGVUcmFuc3BvcnRFZGdlPigpOw0KKwkJCQkJCW5ld0xpc3QuYWRkKHBlZGdlKTsNCisJCQkJCQlwaXBlVHJhbnNwb3J0YXRpb25Ob2RlRWRnZXNNYXAucHV0KGIsIG5ld0xpc3QpOw0KKwkJCQkJfQkNCisJCQl9DQorCQl9DQorCQkNCisJCQ0KKwkJLyoNCisJCXBpcGVUcmFuc3BvcnRhdGlvblVwRWRnZXNNYXAgPSBuZXcgSGFzaE1hcDxJbnRlZ2VyLCBMaXN0PFBpcGVUcmFuc3BvcnRFZGdlPj4oKTsNCisJCXBpcGVUcmFuc3BvcnRhdGlvbkRvd25FZGdlc01hcCA9IG5ldyBIYXNoTWFwPEludGVnZXIsIExpc3Q8UGlwZVRyYW5zcG9ydEVkZ2U+PigpOw0KKwkJcGlwZVRyYW5zcG9ydGF0aW9uTm9kZUVkZ2VzTWFwID0gbmV3IEhhc2hNYXA8Tm9kZSwgTGlzdDxQaXBlVHJhbnNwb3J0RWRnZT4+KCk7DQorCQkvLyBUcmF2ZXJzZSBhbGwgcGlwZSB0cmFuc3BvcnQgZWRnZXMgYW5kIGRldGVybWluZSB3aGF0DQorCQkvLyBnZW9ncmFwaGljIGxldmVsIHRoZWlyIHNvdXJjZSAoQSkgbm9kZSBpcyBhdA0KKwkJZm9yKFVSSSBlZGdlVVJJIDogZ3JhcGguZ2V0RWRnZXMoKS5rZXlTZXQoKSkgew0KKwkJCUVkZ2UgZWRnZSA9IGdyYXBoLmdldEVkZ2VzKCkuZ2V0KGVkZ2VVUkkpOw0KKwkJCQ0KKwkJCWlmKGVkZ2UgaW5zdGFuY2VvZiBQaXBlVHJhbnNwb3J0RWRnZSkgew0KKwkJCQlQaXBlVHJhbnNwb3J0RWRnZSBwZWRnZSA9IChQaXBlVHJhbnNwb3J0RWRnZSllZGdlOw0KKwkJCQlpbnQgYmVnaW5MZXZlbCA9IFV0aWxpdHkua2V5TGV2ZWwoZWRnZS5nZXROb2RlQVVSSSgpLmxhc3RTZWdtZW50KCkpOw0KKwkJCQlpbnQgZW5kTGV2ZWwgPSBVdGlsaXR5LmtleUxldmVsKGVkZ2UuZ2V0Tm9kZUJVUkkoKS5sYXN0U2VnbWVudCgpKTsNCisJCQkJDQorCQkJCU1hcDxJbnRlZ2VyLCBMaXN0PFBpcGVUcmFuc3BvcnRFZGdlPj4gbWFwOw0KKwkJCQlpZihiZWdpbkxldmVsID4gZW5kTGV2ZWwpIG1hcCA9IHBpcGVUcmFuc3BvcnRhdGlvblVwRWRnZXNNYXA7DQorCQkJCWVsc2UgbWFwID0gcGlwZVRyYW5zcG9ydGF0aW9uRG93bkVkZ2VzTWFwOw0KKwkJCQkNCisJCQkJaWYobWFwLmNvbnRhaW5zS2V5KGJlZ2luTGV2ZWwpKSB7DQorCQkJCQltYXAuZ2V0KGJlZ2luTGV2ZWwpLmFkZChwZWRnZSk7DQorCQkJCX0gZWxzZSB7DQorCQkJCQlBcnJheUxpc3Q8UGlwZVRyYW5zcG9ydEVkZ2U+IGxpc3QgPSBuZXcgQXJyYXlMaXN0PFBpcGVUcmFuc3BvcnRFZGdlPigpOw0KKwkJCQkJbGlzdC5hZGQocGVkZ2UpOw0KKwkJCQkJbWFwLnB1dChiZWdpbkxldmVsLCBsaXN0KTsNCisJCQkJfQ0KKwkJCQkNCisJCQkJTm9kZSBhID0gZWRnZS5nZXRBKCk7DQorCQkJCU5vZGUgYiA9IGVkZ2UuZ2V0QigpOw0KKwkJCQkNCisJCQkJaWYoYSAhPSBudWxsKQ0KKwkJCQkJaWYocGlwZVRyYW5zcG9ydGF0aW9uTm9kZUVkZ2VzTWFwLmNvbnRhaW5zS2V5KGEpKQ0KKwkJCQkJCXBpcGVUcmFuc3BvcnRhdGlvbk5vZGVFZGdlc01hcC5nZXQoYSkuYWRkKHBlZGdlKTsNCisJCQkJCWVsc2Ugew0KKwkJCQkJCUFycmF5TGlzdDxQaXBlVHJhbnNwb3J0RWRnZT4gbmV3TGlzdCA9IG5ldyBBcnJheUxpc3Q8UGlwZVRyYW5zcG9ydEVkZ2U+KCk7DQorCQkJCQkJbmV3TGlzdC5hZGQocGVkZ2UpOw0KKwkJCQkJCXBpcGVUcmFuc3BvcnRhdGlvbk5vZGVFZGdlc01hcC5wdXQoYSwgbmV3TGlzdCk7DQorCQkJCQl9CQ0KKwkJCQkNCisJCQkJaWYoYiAhPSBudWxsKQ0KKwkJCQkJaWYocGlwZVRyYW5zcG9ydGF0aW9uTm9kZUVkZ2VzTWFwLmNvbnRhaW5zS2V5KGIpKQ0KKwkJCQkJCXBpcGVUcmFuc3BvcnRhdGlvbk5vZGVFZGdlc01hcC5nZXQoYikuYWRkKHBlZGdlKTsNCisJCQkJCWVsc2Ugew0KKwkJCQkJCUFycmF5TGlzdDxQaXBlVHJhbnNwb3J0RWRnZT4gbmV3TGlzdCA9IG5ldyBBcnJheUxpc3Q8UGlwZVRyYW5zcG9ydEVkZ2U+KCk7DQorCQkJCQkJbmV3TGlzdC5hZGQocGVkZ2UpOw0KKwkJCQkJCXBpcGVUcmFuc3BvcnRhdGlvbk5vZGVFZGdlc01hcC5wdXQoYiwgbmV3TGlzdCk7DQorCQkJCQl9CQ0KKwkJCX0NCisJCX0NCisJCSovDQorCX0NCisJDQorCQkNCisJDQorCUBPdmVycmlkZQ0KKwlwdWJsaWMgdm9pZCByZXNldExhYmVscygpIHsNCisJCXN1cGVyLnJlc2V0TGFiZWxzKCk7DQorCQkvLyBQb3B1bGF0ZSB0aGUgcGlwZSB0cmFuc3BvcnRhdGlvbiBzeXN0ZW1zDQorCQl0aGlzLnBvcHVsYXRlUGlwZVN5c3RlbU5vZGVzKCk7DQorCX0NCit9IC8vU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxJbXBsDQpkaWZmIC0tZ2l0IGEvbW9kZWxzL3BvcHVsYXRpb25zL29yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9wb3B1bGF0aW9ubW9kZWxzL3N0YW5kYXJkL2ltcGwvU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxMYWJlbEltcGwuamF2YSBiL21vZGVscy9wb3B1bGF0aW9ucy9vcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vcG9wdWxhdGlvbm1vZGVscy9zdGFuZGFyZC9pbXBsL1N0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWxJbXBsLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2Y4YjFkNAotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9wb3B1bGF0aW9ucy9vcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vcG9wdWxhdGlvbm1vZGVscy9zdGFuZGFyZC9pbXBsL1N0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWxJbXBsLmphdmEKQEAgLTAsMCArMSwxODAgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLmltcGw7DQorDQorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisgKiBDb3B5cmlnaHQgKGMpIDIwMDkgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuDQorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscw0KKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMA0KKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0DQorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwNCisgKg0KKyAqIENvbnRyaWJ1dG9yczoNCisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uDQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQorDQorDQoraW1wb3J0IGphdmEudXRpbC5DYWxlbmRhcjsNCisNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuSW50ZXJuYWxFT2JqZWN0Ow0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuaW1wbC5FTm90aWZpY2F0aW9uSW1wbDsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkdyYXBoUGFja2FnZTsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkludGVncmF0aW9uTGFiZWw7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5FeGNoYW5nZTsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkV4Y2hhbmdlVHlwZTsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkdyYXBoRmFjdG9yeTsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkludGVncmF0aW9uTGFiZWxWYWx1ZTsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLlNURU1UaW1lOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5Qb3B1bGF0aW9uTGFiZWw7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5EZW1vZ3JhcGhpY1BvcHVsYXRpb25Nb2RlbDsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLlBvcHVsYXRpb25Hcm91cDsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkRmFjdG9yeTsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkUGFja2FnZTsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxMYWJlbDsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWxWYWx1ZTsNCisNCisvKioNCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKyAqIEFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5Qb3B1bGF0aW9uIE1vZGVsIExhYmVsPC9iPjwvZW0+Jy4NCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisgKiA8cD4NCisgKiA8L3A+DQorICoNCisgKiBAZ2VuZXJhdGVkDQorICovDQorcHVibGljIGNsYXNzIFN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWxJbXBsIGV4dGVuZHMgUG9wdWxhdGlvbk1vZGVsTGFiZWxJbXBsIGltcGxlbWVudHMgU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxMYWJlbCB7DQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZCBOT1QNCisJICovDQorCXByb3RlY3RlZCBTdGFuZGFyZFBvcHVsYXRpb25Nb2RlbExhYmVsSW1wbCgpIHsNCisJCXN1cGVyKCk7DQorCQlzZXRDdXJyZW50VmFsdWUoU3RhbmRhcmRGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVTdGFuZGFyZFBvcHVsYXRpb25Nb2RlbExhYmVsVmFsdWUoKSk7DQorCQlzZXROZXh0VmFsdWUoU3RhbmRhcmRGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVTdGFuZGFyZFBvcHVsYXRpb25Nb2RlbExhYmVsVmFsdWUoKSk7DQorCQlzZXRUZW1wVmFsdWUoU3RhbmRhcmRGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVTdGFuZGFyZFBvcHVsYXRpb25Nb2RlbExhYmVsVmFsdWUoKSk7DQorCQlzZXRQcm9iZVZhbHVlKFN0YW5kYXJkRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxMYWJlbFZhbHVlKCkpOw0KKwkJc2V0RXJyb3JTY2FsZShTdGFuZGFyZEZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZVN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWxWYWx1ZSgpKTsNCisJCXNldERlbHRhVmFsdWUoU3RhbmRhcmRGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVTdGFuZGFyZFBvcHVsYXRpb25Nb2RlbExhYmVsVmFsdWUoKSk7DQorCX0NCisJDQorCS8qKg0KKwkgKiBSZXR1cm4gdGhlIGlkZW50aWZpZXIgZm9yIHRoZSBsYWJlbCwgaS5lLiB0aGUgcG9wdWxhdGlvbiBpZGVudGlmaWVyDQorCSAqIA0KKwkgKiBAcmV0dXJuIFN0cmluZyBUaGUgaWRlbnRpZmllcg0KKwkgKi8NCisJDQorCXB1YmxpYyBTdHJpbmcgZ2V0SWRlbnRpZmllcigpIHsNCisJCXJldHVybiB0aGlzLmdldFBvcHVsYXRpb25JZGVudGlmaWVyKCk7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlAT3ZlcnJpZGUNCisJcHJvdGVjdGVkIEVDbGFzcyBlU3RhdGljQ2xhc3MoKSB7DQorCQlyZXR1cm4gU3RhbmRhcmRQYWNrYWdlLkxpdGVyYWxzLlNUQU5EQVJEX1BPUFVMQVRJT05fTU9ERUxfTEFCRUw7DQorCX0NCisNCisJLyoqDQorCSAqIFJlc2V0IHRoZSBkeW5hbWljIGxhYmVsLiBUaGlzIHNldHMgdGhlIHtAbGluayBMYWJlbFZhbHVlfXMgYmFjayB0byB0aGVpcg0KKwkgKiBpbml0aWFsIHN0YXRlcy4NCisJICogDQorCSAqIEBtb2RlbCB2b2xhdGlsZT0idHJ1ZSIgdHJhbnNpZW50PSJ0cnVlIiBjaGFuZ2VhYmxlPSJmYWxzZSINCisJICovDQorCUBPdmVycmlkZQ0KKwlwdWJsaWMgdm9pZCByZXNldCgpIHsNCisJCXN1cGVyLnJlc2V0KCk7DQorCQkoKFN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWxWYWx1ZSl0aGlzLmdldEN1cnJlbnRWYWx1ZSgpKS5yZXNldCgpOw0KKwkJKChTdGFuZGFyZFBvcHVsYXRpb25Nb2RlbExhYmVsVmFsdWUpdGhpcy5nZXROZXh0VmFsdWUoKSkucmVzZXQoKTsNCisJCXRoaXMuZ2V0RGVsdGFWYWx1ZSgpLnJlc2V0KCk7DQorCQl0aGlzLmdldFRlbXBWYWx1ZSgpLnJlc2V0KCk7DQorCQl0aGlzLmdldFByb2JlVmFsdWUoKS5yZXNldCgpOw0KKwkJdGhpcy5nZXRFcnJvclNjYWxlKCkucmVzZXQoKTsNCisJCQ0KKwkJLy8gR2V0IHRoZSBmcmFjdGlvbiBvZiB0aGUgcG9wdWxhdGlvbiBncm91cCBpZiBEZW1vZ3JhcGhpY1BvcHVsYXRpb25Nb2RlbCBpcyB1c2VkDQorCQlkb3VibGUgZnJhY3Rpb24gPSAxLjA7DQorCQlpZiAoZ2V0RGVjb3JhdG9yKCkgaW5zdGFuY2VvZiBEZW1vZ3JhcGhpY1BvcHVsYXRpb25Nb2RlbCkgew0KKwkJCURlbW9ncmFwaGljUG9wdWxhdGlvbk1vZGVsIG1vZGVsID0gKERlbW9ncmFwaGljUG9wdWxhdGlvbk1vZGVsKSBnZXREZWNvcmF0b3IoKTsNCisJCQkNCisJCQlmb3IgKFBvcHVsYXRpb25Hcm91cCBncm91cCA6IG1vZGVsLmdldFBvcHVsYXRpb25Hcm91cHMoKSkgew0KKwkJCQlpZiAoZ3JvdXAuZ2V0SWRlbnRpZmllcigpID09IGdldFBvcHVsYXRpb25JZGVudGlmaWVyKCkpIHsNCisJCQkJCWZyYWN0aW9uID0gZ3JvdXAuZ2V0RnJhY3Rpb24oKTsNCisJCQkJfQ0KKwkJCX0NCisJCX0NCisJCQ0KKwkJZG91YmxlIG9yaWdpbmFsQ291bnQgPSB0aGlzLmdldFBvcHVsYXRpb25MYWJlbCgpLmdldEN1cnJlbnRQb3B1bGF0aW9uVmFsdWUoKS5nZXRDb3VudCgpICogZnJhY3Rpb247DQorCQkoKFN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWxWYWx1ZSl0aGlzLmdldEN1cnJlbnRWYWx1ZSgpKS5zZXRDb3VudChvcmlnaW5hbENvdW50KTsNCisJCQ0KKwkJLy8gU2V0IHRoZSBuZXh0IHZhbHVlIHRvby4gVGhpcyBpcyB0byBhdm9pZCBzd2l0Y2hpbmcgYmV0d2VlbiB6ZXJvIHZhbHVlcyBhbmQgbm9uLXplcm8gdmFsdWVzDQorCQkvLyB3aGVuIHRoZSBncmFwaCB1cGRhdGVzIHRvIHRoZSBuZXh0IHZhbHVlIGZvciBub2RlcyB0aGF0IGFyZSBub3QgYmVpbmcgdXBkYXRlZCBieSB0aGlzIGluc3RhbmNlDQorCQkoKEludGVncmF0aW9uTGFiZWxWYWx1ZSlnZXROZXh0VmFsdWUoKSkuc2V0KChJbnRlZ3JhdGlvbkxhYmVsVmFsdWUpZ2V0Q3VycmVudFZhbHVlKCkpOw0KKwkJDQorCX0NCisJDQorCS8qKg0KKwkgKiBSZXNldCB0byB0aGUgY29ycmVjdCBwb3B1bGF0aW9uIHZhbHVlIGZvciB0aGUNCisJICogcGFzc2VkIGluIHRpbWUNCisJICogDQorCSAqIEBwYXJhbSB0aW1lIFJlZmVyZW5jZSB0aW1lDQorCSAqLw0KKwlwdWJsaWMgdm9pZCByZXNldChTVEVNVGltZSB0aW1lKSB7DQorCQkvLyBPbmx5IHJld2luZCBwb3B1bGF0aW9uIGlmIGl0J3MgYSBzdGFuZGFyZCBwb3B1bGF0aW9uIG1vZGVsDQorCQlpZih0aGlzLmdldERlY29yYXRvcigpIGluc3RhbmNlb2YgU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWwpIHsNCisJCQlTdGFuZGFyZFBvcHVsYXRpb25Nb2RlbCBzcG0gPSAoU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWwpdGhpcy5nZXREZWNvcmF0b3IoKTsNCisJCQlQb3B1bGF0aW9uTGFiZWwgcGxhYmVsID0gdGhpcy5nZXRQb3B1bGF0aW9uTGFiZWwoKTsNCisJCQlpbnQgeWVhciA9IHBsYWJlbC5nZXRWYWxpZFllYXIoKTsNCisJCQlDYWxlbmRhciBjID0gQ2FsZW5kYXIuZ2V0SW5zdGFuY2UoKTsNCisJCQljLnNldFRpbWUodGltZS5nZXRUaW1lKCkpOw0KKwkJCWludCBzdGFydFllYXIgPSBjLmdldChDYWxlbmRhci5ZRUFSKTsNCisJCQlkb3VibGUgZ3Jvd3RoID0gc3BtLmdldEJpcnRoUmF0ZSgpIC0gc3BtLmdldERlYXRoUmF0ZSgpOw0KKwkJCWRvdWJsZSBkYWlseUdyb3d0aCA9IChzcG0uZ2V0VGltZVBlcmlvZCgpIC8gODY0MDAwMDAuMCkqZ3Jvd3RoOw0KKwkJCWRvdWJsZSBkaWZmID0gKChkb3VibGUpc3RhcnRZZWFyIC0gKGRvdWJsZSl5ZWFyKSozNjUuMjU7IC8vIGFwcHJveA0KKwkJCWRvdWJsZSBjdXJyZW50UG9wdWxhdGlvbiA9ICgoU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxMYWJlbFZhbHVlKXRoaXMuZ2V0Q3VycmVudFZhbHVlKCkpLmdldENvdW50KCk7DQorCQkJZGFpbHlHcm93dGggPSAxLjAgKyBkYWlseUdyb3d0aDsNCisJCQlkb3VibGUgbmV3UG9wdWxhdGlvbiA9IGN1cnJlbnRQb3B1bGF0aW9uICogTWF0aC5wb3coZGFpbHlHcm93dGgsIGRpZmYpOw0KKwkJCSgoU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxMYWJlbFZhbHVlKXRoaXMuZ2V0Q3VycmVudFZhbHVlKCkpLnNldENvdW50KG5ld1BvcHVsYXRpb24pOwkNCisJCQkvLyBTdG9yZSB0aGUgYWRkaXRpb25zL3N1YnN0cmFjdGlvbnMgaW4gdGhlIGRlbHRhIHZhbHVlIHNvIHRoYXQgZGlzZWFzZSBtb2RlbHMgY2FuDQorCQkJLy8gYWRqdXN0IHRoZWlyIGNvdW50cw0KKwkJCWRvdWJsZSBwb3BkaWZmID0gbmV3UG9wdWxhdGlvbiAtIGN1cnJlbnRQb3B1bGF0aW9uOw0KKwkJCWlmKHBvcGRpZmYgPiAwLjApIHsNCisJCQkJRXhjaGFuZ2UgZXhjaGFuZ2UgPSBHcmFwaEZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZUV4Y2hhbmdlKCk7DQorCQkJCQ0KKwkJCQlleGNoYW5nZS5zZXRUeXBlKEV4Y2hhbmdlVHlwZS5CSVJUSFNfQU5EX0RFQVRIUyk7DQorCQkJCWV4Y2hhbmdlLnNldENvdW50KHBvcGRpZmYpOw0KKwkJCQkoKEludGVncmF0aW9uTGFiZWxWYWx1ZSl0aGlzLmdldERlbHRhVmFsdWUoKSkuZ2V0QXJyaXZhbHMoKS5hZGQoZXhjaGFuZ2UpOw0KKwkJCQkoKFN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWxWYWx1ZSl0aGlzLmdldERlbHRhVmFsdWUoKSkuc2V0QmlydGhzKHBvcGRpZmYpOw0KKwkJCX0NCisJCQllbHNlIHsNCisJCQkJRXhjaGFuZ2UgZXhjaGFuZ2UgPSBHcmFwaEZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZUV4Y2hhbmdlKCk7DQorCQkJCQ0KKwkJCQlleGNoYW5nZS5zZXRUeXBlKEV4Y2hhbmdlVHlwZS5CSVJUSFNfQU5EX0RFQVRIUyk7DQorCQkJCWV4Y2hhbmdlLnNldENvdW50KC1wb3BkaWZmKTsNCisJCQkJKChJbnRlZ3JhdGlvbkxhYmVsVmFsdWUpdGhpcy5nZXREZWx0YVZhbHVlKCkpLmdldERlcGFydHVyZXMoKS5hZGQoZXhjaGFuZ2UpOw0KKwkJCQkoKFN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWxWYWx1ZSl0aGlzLmdldERlbHRhVmFsdWUoKSkuc2V0RGVhdGhzKC1wb3BkaWZmKTsNCisJCQl9DQorDQorCQl9DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkIE5PVA0KKwkgKi8NCisJQE92ZXJyaWRlDQorCXB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKSB7DQorCQlpZiAoZUlzUHJveHkoKSkgcmV0dXJuIHN1cGVyLnRvU3RyaW5nKCk7DQorDQorCQlTdHJpbmdCdWZmZXIgcmVzdWx0ID0gbmV3IFN0cmluZ0J1ZmZlcigNCisJCQkJZ2V0UG9wdWxhdGlvbklkZW50aWZpZXIoKSA9PSBudWxsID8gIm51bGwiIDogZ2V0UG9wdWxhdGlvbklkZW50aWZpZXIoKSk7DQorCQlyZXN1bHQuYXBwZW5kKCIgWyIpOw0KKwkJcmVzdWx0LmFwcGVuZChNYXRoLmZsb29yKCgoU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxMYWJlbFZhbHVlKWdldEN1cnJlbnRWYWx1ZSgpKS5nZXRDb3VudCgpKSk7DQorCQlyZXN1bHQuYXBwZW5kKCJdIik7DQorCQlyZXR1cm4gcmVzdWx0LnRvU3RyaW5nKCk7DQorCX0NCit9IC8vU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxMYWJlbEltcGwNCmRpZmYgLS1naXQgYS9tb2RlbHMvcG9wdWxhdGlvbnMvb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3BvcHVsYXRpb25tb2RlbHMvc3RhbmRhcmQvaW1wbC9TdGFuZGFyZFBvcHVsYXRpb25Nb2RlbExhYmVsVmFsdWVJbXBsLmphdmEgYi9tb2RlbHMvcG9wdWxhdGlvbnMvb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3BvcHVsYXRpb25tb2RlbHMvc3RhbmRhcmQvaW1wbC9TdGFuZGFyZFBvcHVsYXRpb25Nb2RlbExhYmVsVmFsdWVJbXBsLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmE2NjljMgotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9wb3B1bGF0aW9ucy9vcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vcG9wdWxhdGlvbm1vZGVscy9zdGFuZGFyZC9pbXBsL1N0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWxWYWx1ZUltcGwuamF2YQpAQCAtMCwwICsxLDQ5NyBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuaW1wbDsNCisNCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyAqIENvcHlyaWdodCAoYykgMjAwOSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4NCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzDQorICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wDQorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQNCisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbA0KKyAqDQorICogQ29udHJpYnV0b3JzOg0KKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24NCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCisNCisNCitpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLkVMaXN0Ow0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuaW1wbC5FTm90aWZpY2F0aW9uSW1wbDsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnV0aWwuRU9iamVjdFJlc29sdmluZ0VMaXN0Ow0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguRXhjaGFuZ2U7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5HcmFwaFBhY2thZ2U7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5JbnRlZ3JhdGlvbkxhYmVsVmFsdWU7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5MYWJlbFZhbHVlOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguTm9kZTsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLk5vZGVMYWJlbDsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuQXJlYUxhYmVsOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmRQYWNrYWdlOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxMYWJlbDsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWxWYWx1ZTsNCisNCisvKioNCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKyAqIEFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5Qb3B1bGF0aW9uIE1vZGVsIExhYmVsIFZhbHVlPC9iPjwvZW0+Jy4NCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisgKiA8cD4NCisgKiBUaGUgZm9sbG93aW5nIGZlYXR1cmVzIGFyZSBpbXBsZW1lbnRlZDoNCisgKiA8dWw+DQorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5pbXBsLlN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWxWYWx1ZUltcGwjZ2V0Q291bnQgPGVtPkNvdW50PC9lbT59PC9saT4NCisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLmltcGwuU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxMYWJlbFZhbHVlSW1wbCNnZXRCaXJ0aHMgPGVtPkJpcnRoczwvZW0+fTwvbGk+DQorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5pbXBsLlN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWxWYWx1ZUltcGwjZ2V0RGVhdGhzIDxlbT5EZWF0aHM8L2VtPn08L2xpPg0KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuaW1wbC5TdGFuZGFyZFBvcHVsYXRpb25Nb2RlbExhYmVsVmFsdWVJbXBsI2dldERlbnNpdHkgPGVtPkRlbnNpdHk8L2VtPn08L2xpPg0KKyAqIDwvdWw+DQorICogPC9wPg0KKyAqDQorICogQGdlbmVyYXRlZA0KKyAqLw0KK3B1YmxpYyBjbGFzcyBTdGFuZGFyZFBvcHVsYXRpb25Nb2RlbExhYmVsVmFsdWVJbXBsIGV4dGVuZHMgUG9wdWxhdGlvbk1vZGVsTGFiZWxWYWx1ZUltcGwgaW1wbGVtZW50cyBTdGFuZGFyZFBvcHVsYXRpb25Nb2RlbExhYmVsVmFsdWUgew0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCBTdGFuZGFyZFBvcHVsYXRpb25Nb2RlbExhYmVsVmFsdWVJbXBsKCkgew0KKwkJc3VwZXIoKTsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCUBPdmVycmlkZQ0KKwlwcm90ZWN0ZWQgRUNsYXNzIGVTdGF0aWNDbGFzcygpIHsNCisJCXJldHVybiBTdGFuZGFyZFBhY2thZ2UuTGl0ZXJhbHMuU1RBTkRBUkRfUE9QVUxBVElPTl9NT0RFTF9MQUJFTF9WQUxVRTsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBkb3VibGUgZ2V0Q291bnQoKSB7DQorCQlyZXR1cm4gY291bnQ7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgdm9pZCBzZXRDb3VudChkb3VibGUgbmV3Q291bnQpIHsNCisJCWRvdWJsZSBvbGRDb3VudCA9IGNvdW50Ow0KKwkJY291bnQgPSBuZXdDb3VudDsNCisJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkNCisJCQllTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBTdGFuZGFyZFBhY2thZ2UuU1RBTkRBUkRfUE9QVUxBVElPTl9NT0RFTF9MQUJFTF9WQUxVRV9fQ09VTlQsIG9sZENvdW50LCBjb3VudCkpOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIGRvdWJsZSBnZXRCaXJ0aHMoKSB7DQorCQlyZXR1cm4gYmlydGhzOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIHZvaWQgc2V0QmlydGhzKGRvdWJsZSBuZXdCaXJ0aHMpIHsNCisJCWRvdWJsZSBvbGRCaXJ0aHMgPSBiaXJ0aHM7DQorCQliaXJ0aHMgPSBuZXdCaXJ0aHM7DQorCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpDQorCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgU3RhbmRhcmRQYWNrYWdlLlNUQU5EQVJEX1BPUFVMQVRJT05fTU9ERUxfTEFCRUxfVkFMVUVfX0JJUlRIUywgb2xkQmlydGhzLCBiaXJ0aHMpKTsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBkb3VibGUgZ2V0RGVhdGhzKCkgew0KKwkJcmV0dXJuIGRlYXRoczsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyB2b2lkIHNldERlYXRocyhkb3VibGUgbmV3RGVhdGhzKSB7DQorCQlkb3VibGUgb2xkRGVhdGhzID0gZGVhdGhzOw0KKwkJZGVhdGhzID0gbmV3RGVhdGhzOw0KKwkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQ0KKwkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIFN0YW5kYXJkUGFja2FnZS5TVEFOREFSRF9QT1BVTEFUSU9OX01PREVMX0xBQkVMX1ZBTFVFX19ERUFUSFMsIG9sZERlYXRocywgZGVhdGhzKSk7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkIE5PVA0KKwkgKi8NCisJcHVibGljIGRvdWJsZSBnZXREZW5zaXR5KCkgew0KKwkJZG91YmxlIHBvcHVsYXRpb24gPSB0aGlzLmdldENvdW50KCk7DQorCQlTdGFuZGFyZFBvcHVsYXRpb25Nb2RlbExhYmVsIGxhYmVsID0gKFN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWwpdGhpcy5lQ29udGFpbmVyKCk7DQorCQlOb2RlIG49IGxhYmVsLmdldE5vZGUoKTsNCisJCWRvdWJsZSBhcmVhID0gMC4wOw0KKwkJaWYoKG4hPW51bGwpJiYobi5nZXRMYWJlbHMoKSE9bnVsbCkpIHsNCisJCQlmb3IoTm9kZUxhYmVsIG5vZGVMYWIgOiBuLmdldExhYmVscygpKSB7DQorCQkJCWlmKG5vZGVMYWIgaW5zdGFuY2VvZiBBcmVhTGFiZWwpIHsNCisJCQkJCWFyZWEgPSAoKEFyZWFMYWJlbClub2RlTGFiKS5nZXRDdXJyZW50QXJlYVZhbHVlKCkuZ2V0QXJlYSgpOw0KKwkJCQkJYnJlYWs7DQorCQkJCX0NCisJCQl9DQorCQl9IA0KKwkJDQorCQlyZXR1cm4gKGFyZWEgPiAwLjApPyAocG9wdWxhdGlvbi9hcmVhKSA6IDAuMDsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyB2b2lkIHNldERlbnNpdHkoZG91YmxlIG5ld0RlbnNpdHkpIHsNCisJCWRvdWJsZSBvbGREZW5zaXR5ID0gZGVuc2l0eTsNCisJCWRlbnNpdHkgPSBuZXdEZW5zaXR5Ow0KKwkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQ0KKwkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIFN0YW5kYXJkUGFja2FnZS5TVEFOREFSRF9QT1BVTEFUSU9OX01PREVMX0xBQkVMX1ZBTFVFX19ERU5TSVRZLCBvbGREZW5zaXR5LCBkZW5zaXR5KSk7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkIE5PVA0KKwkgKi8NCisJcHVibGljIGJvb2xlYW4gaXNTZXREZW5zaXR5KCkgew0KKwkJcmV0dXJuIHRydWU7IC8vIERlbnNpdHkgYWx3YXlzIHNldA0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZCBOT1QNCisJICovDQorCXB1YmxpYyBib29sZWFuIGF2b2lkTmVnYXRpdmUoSW50ZWdyYXRpb25MYWJlbFZhbHVlIHZhbHVlKSB7DQorCQlTdGFuZGFyZFBvcHVsYXRpb25Nb2RlbExhYmVsVmFsdWUgc3ZhbCA9IChTdGFuZGFyZFBvcHVsYXRpb25Nb2RlbExhYmVsVmFsdWUpdmFsdWU7DQorCQlib29sZWFuIGFkanVzdGVkID0gZmFsc2U7DQorCQlkb3VibGUgbmV3Q291bnQgPSB0aGlzLmdldENvdW50KCkgKyBzdmFsLmdldENvdW50KCk7DQorCQlkb3VibGUgbmV3QmlydGhzID0gdGhpcy5nZXRCaXJ0aHMoKSArIHN2YWwuZ2V0QmlydGhzKCk7DQorCQlkb3VibGUgbmV3RGVhdGhzID0gdGhpcy5nZXREZWF0aHMoKSArIHN2YWwuZ2V0RGVhdGhzKCk7DQorCQkNCisJCWlmKG5ld0NvdW50PDAuMCkgew0KKwkJCWFkanVzdGVkID0gdHJ1ZTsNCisJCQl0aGlzLnNldENvdW50KC1zdmFsLmdldENvdW50KCkpOw0KKwkJfQ0KKwkJDQorCQlpZihuZXdCaXJ0aHM8MC4wKSB7DQorCQkJYWRqdXN0ZWQgPSB0cnVlOw0KKwkJCXRoaXMuc2V0QmlydGhzKC1zdmFsLmdldEJpcnRocygpKTsNCisJCX0NCisJCQ0KKwkJaWYobmV3RGVhdGhzPDAuMCkgew0KKwkJCWFkanVzdGVkID0gdHJ1ZTsNCisJCQl0aGlzLnNldERlYXRocygtc3ZhbC5nZXREZWF0aHMoKSk7DQorCQl9DQorCQkNCisJCXJldHVybiBhZGp1c3RlZDsNCisNCisJfQ0KKwkNCisJcHVibGljIGRvdWJsZSBjb21wdXRlRGVsdGFBZGp1c3RtZW50KEludGVncmF0aW9uTGFiZWxWYWx1ZSB2YWx1ZSkgew0KKwkJU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxMYWJlbFZhbHVlIHN2YWwgPSAoU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxMYWJlbFZhbHVlKXZhbHVlOw0KKwkJZG91YmxlIG5ld0NvdW50ID0gdGhpcy5nZXRDb3VudCgpICsgc3ZhbC5nZXRDb3VudCgpOw0KKwkJZG91YmxlIG5ld0JpcnRocyA9IHRoaXMuZ2V0QmlydGhzKCkgKyBzdmFsLmdldEJpcnRocygpOw0KKwkJZG91YmxlIG5ld0RlYXRocyA9IHRoaXMuZ2V0RGVhdGhzKCkgKyBzdmFsLmdldERlYXRocygpOw0KKwkJZG91YmxlIGZhY3RvciA9IDEuMDsNCisJCQ0KKwkJaWYobmV3Q291bnQgPCBNSU5JTVVNX1ZBTFVFKSB7DQorCQkJZmFjdG9yID0gTWF0aC5taW4oZmFjdG9yLCAtc3ZhbC5nZXRDb3VudCgpL3RoaXMuZ2V0Q291bnQoKSk7DQorCQl9DQorCQkNCisJCWlmKG5ld0JpcnRocyA8IE1JTklNVU1fVkFMVUUpIHsNCisJCQlmYWN0b3IgPSBNYXRoLm1pbihmYWN0b3IsIC1zdmFsLmdldEJpcnRocygpL3RoaXMuZ2V0QmlydGhzKCkpOw0KKwkJfQ0KKwkJDQorCQlpZiAobmV3RGVhdGhzIDwgTUlOSU1VTV9WQUxVRSkgew0KKwkJCWZhY3RvciA9IE1hdGgubWluKGZhY3RvciwgLXN2YWwuZ2V0RGVhdGhzKCkvdGhpcy5nZXREZWF0aHMoKSk7DQorCQl9DQorCQkNCisJCXJldHVybiBmYWN0b3I7DQorCX0NCisNCisJLyoqDQorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRDb3VudCgpIDxlbT5Db3VudDwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHNlZSAjZ2V0Q291bnQoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqIEBvcmRlcmVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIGRvdWJsZSBDT1VOVF9FREVGQVVMVCA9IDAuMDsNCisJLyoqDQorCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldENvdW50KCkgPGVtPkNvdW50PC9lbT59JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAc2VlICNnZXRDb3VudCgpDQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCXByb3RlY3RlZCBkb3VibGUgY291bnQgPSBDT1VOVF9FREVGQVVMVDsNCisJLyoqDQorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRCaXJ0aHMoKSA8ZW0+QmlydGhzPC9lbT59JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAc2VlICNnZXRCaXJ0aHMoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqIEBvcmRlcmVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIGRvdWJsZSBCSVJUSFNfRURFRkFVTFQgPSAwLjA7DQorCS8qKg0KKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRCaXJ0aHMoKSA8ZW0+QmlydGhzPC9lbT59JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAc2VlICNnZXRCaXJ0aHMoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqIEBvcmRlcmVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgZG91YmxlIGJpcnRocyA9IEJJUlRIU19FREVGQVVMVDsNCisJLyoqDQorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXREZWF0aHMoKSA8ZW0+RGVhdGhzPC9lbT59JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAc2VlICNnZXREZWF0aHMoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqIEBvcmRlcmVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIGRvdWJsZSBERUFUSFNfRURFRkFVTFQgPSAwLjA7DQorCS8qKg0KKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXREZWF0aHMoKSA8ZW0+RGVhdGhzPC9lbT59JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAc2VlICNnZXREZWF0aHMoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqIEBvcmRlcmVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgZG91YmxlIGRlYXRocyA9IERFQVRIU19FREVGQVVMVDsNCisJLyoqDQorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXREZW5zaXR5KCkgPGVtPkRlbnNpdHk8L2VtPn0nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBzZWUgI2dldERlbnNpdHkoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqIEBvcmRlcmVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIGRvdWJsZSBERU5TSVRZX0VERUZBVUxUID0gMC4wOw0KKwkvKioNCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0RGVuc2l0eSgpIDxlbT5EZW5zaXR5PC9lbT59JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAc2VlICNnZXREZW5zaXR5KCkNCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJcHJvdGVjdGVkIGRvdWJsZSBkZW5zaXR5ID0gREVOU0lUWV9FREVGQVVMVDsNCisJDQorCXB1YmxpYyBib29sZWFuIHNhbWVWYWx1ZShMYWJlbFZhbHVlIG90aGVyVmFsdWUpIHsNCisJCWlmKCEob3RoZXJWYWx1ZSBpbnN0YW5jZW9mIFN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWxWYWx1ZSkpIHJldHVybiBmYWxzZTsNCisJCWlmKCgoU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxMYWJlbFZhbHVlKW90aGVyVmFsdWUpLmdldENvdW50KCkgPT0gZ2V0Q291bnQoKSAmJg0KKwkJCQkoKFN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWxWYWx1ZSlvdGhlclZhbHVlKS5nZXREZWF0aHMoKSA9PSBnZXREZWF0aHMoKSkNCisJCQlyZXR1cm4gdHJ1ZTsNCisJCXJldHVybiBmYWxzZTsNCisJfQ0KKwkNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlAT3ZlcnJpZGUNCisJcHVibGljIE9iamVjdCBlR2V0KGludCBmZWF0dXJlSUQsIGJvb2xlYW4gcmVzb2x2ZSwgYm9vbGVhbiBjb3JlVHlwZSkgew0KKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsNCisJCQljYXNlIFN0YW5kYXJkUGFja2FnZS5TVEFOREFSRF9QT1BVTEFUSU9OX01PREVMX0xBQkVMX1ZBTFVFX19DT1VOVDoNCisJCQkJcmV0dXJuIGdldENvdW50KCk7DQorCQkJY2FzZSBTdGFuZGFyZFBhY2thZ2UuU1RBTkRBUkRfUE9QVUxBVElPTl9NT0RFTF9MQUJFTF9WQUxVRV9fQklSVEhTOg0KKwkJCQlyZXR1cm4gZ2V0QmlydGhzKCk7DQorCQkJY2FzZSBTdGFuZGFyZFBhY2thZ2UuU1RBTkRBUkRfUE9QVUxBVElPTl9NT0RFTF9MQUJFTF9WQUxVRV9fREVBVEhTOg0KKwkJCQlyZXR1cm4gZ2V0RGVhdGhzKCk7DQorCQkJY2FzZSBTdGFuZGFyZFBhY2thZ2UuU1RBTkRBUkRfUE9QVUxBVElPTl9NT0RFTF9MQUJFTF9WQUxVRV9fREVOU0lUWToNCisJCQkJcmV0dXJuIGdldERlbnNpdHkoKTsNCisJCX0NCisJCXJldHVybiBzdXBlci5lR2V0KGZlYXR1cmVJRCwgcmVzb2x2ZSwgY29yZVR5cGUpOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJQFN1cHByZXNzV2FybmluZ3MoInVuY2hlY2tlZCIpDQorCUBPdmVycmlkZQ0KKwlwdWJsaWMgdm9pZCBlU2V0KGludCBmZWF0dXJlSUQsIE9iamVjdCBuZXdWYWx1ZSkgew0KKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsNCisJCQljYXNlIFN0YW5kYXJkUGFja2FnZS5TVEFOREFSRF9QT1BVTEFUSU9OX01PREVMX0xBQkVMX1ZBTFVFX19DT1VOVDoNCisJCQkJc2V0Q291bnQoKERvdWJsZSluZXdWYWx1ZSk7DQorCQkJCXJldHVybjsNCisJCQljYXNlIFN0YW5kYXJkUGFja2FnZS5TVEFOREFSRF9QT1BVTEFUSU9OX01PREVMX0xBQkVMX1ZBTFVFX19CSVJUSFM6DQorCQkJCXNldEJpcnRocygoRG91YmxlKW5ld1ZhbHVlKTsNCisJCQkJcmV0dXJuOw0KKwkJCWNhc2UgU3RhbmRhcmRQYWNrYWdlLlNUQU5EQVJEX1BPUFVMQVRJT05fTU9ERUxfTEFCRUxfVkFMVUVfX0RFQVRIUzoNCisJCQkJc2V0RGVhdGhzKChEb3VibGUpbmV3VmFsdWUpOw0KKwkJCQlyZXR1cm47DQorCQkJY2FzZSBTdGFuZGFyZFBhY2thZ2UuU1RBTkRBUkRfUE9QVUxBVElPTl9NT0RFTF9MQUJFTF9WQUxVRV9fREVOU0lUWToNCisJCQkJc2V0RGVuc2l0eSgoRG91YmxlKW5ld1ZhbHVlKTsNCisJCQkJcmV0dXJuOw0KKwkJfQ0KKwkJc3VwZXIuZVNldChmZWF0dXJlSUQsIG5ld1ZhbHVlKTsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCUBPdmVycmlkZQ0KKwlwdWJsaWMgdm9pZCBlVW5zZXQoaW50IGZlYXR1cmVJRCkgew0KKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsNCisJCQljYXNlIFN0YW5kYXJkUGFja2FnZS5TVEFOREFSRF9QT1BVTEFUSU9OX01PREVMX0xBQkVMX1ZBTFVFX19DT1VOVDoNCisJCQkJc2V0Q291bnQoQ09VTlRfRURFRkFVTFQpOw0KKwkJCQlyZXR1cm47DQorCQkJY2FzZSBTdGFuZGFyZFBhY2thZ2UuU1RBTkRBUkRfUE9QVUxBVElPTl9NT0RFTF9MQUJFTF9WQUxVRV9fQklSVEhTOg0KKwkJCQlzZXRCaXJ0aHMoQklSVEhTX0VERUZBVUxUKTsNCisJCQkJcmV0dXJuOw0KKwkJCWNhc2UgU3RhbmRhcmRQYWNrYWdlLlNUQU5EQVJEX1BPUFVMQVRJT05fTU9ERUxfTEFCRUxfVkFMVUVfX0RFQVRIUzoNCisJCQkJc2V0RGVhdGhzKERFQVRIU19FREVGQVVMVCk7DQorCQkJCXJldHVybjsNCisJCQljYXNlIFN0YW5kYXJkUGFja2FnZS5TVEFOREFSRF9QT1BVTEFUSU9OX01PREVMX0xBQkVMX1ZBTFVFX19ERU5TSVRZOg0KKwkJCQlzZXREZW5zaXR5KERFTlNJVFlfRURFRkFVTFQpOw0KKwkJCQlyZXR1cm47DQorCQl9DQorCQlzdXBlci5lVW5zZXQoZmVhdHVyZUlEKTsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCUBPdmVycmlkZQ0KKwlwdWJsaWMgYm9vbGVhbiBlSXNTZXQoaW50IGZlYXR1cmVJRCkgew0KKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsNCisJCQljYXNlIFN0YW5kYXJkUGFja2FnZS5TVEFOREFSRF9QT1BVTEFUSU9OX01PREVMX0xBQkVMX1ZBTFVFX19DT1VOVDoNCisJCQkJcmV0dXJuIGNvdW50ICE9IENPVU5UX0VERUZBVUxUOw0KKwkJCWNhc2UgU3RhbmRhcmRQYWNrYWdlLlNUQU5EQVJEX1BPUFVMQVRJT05fTU9ERUxfTEFCRUxfVkFMVUVfX0JJUlRIUzoNCisJCQkJcmV0dXJuIGJpcnRocyAhPSBCSVJUSFNfRURFRkFVTFQ7DQorCQkJY2FzZSBTdGFuZGFyZFBhY2thZ2UuU1RBTkRBUkRfUE9QVUxBVElPTl9NT0RFTF9MQUJFTF9WQUxVRV9fREVBVEhTOg0KKwkJCQlyZXR1cm4gZGVhdGhzICE9IERFQVRIU19FREVGQVVMVDsNCisJCQljYXNlIFN0YW5kYXJkUGFja2FnZS5TVEFOREFSRF9QT1BVTEFUSU9OX01PREVMX0xBQkVMX1ZBTFVFX19ERU5TSVRZOg0KKwkJCQlyZXR1cm4gZGVuc2l0eSAhPSBERU5TSVRZX0VERUZBVUxUOw0KKwkJfQ0KKwkJcmV0dXJuIHN1cGVyLmVJc1NldChmZWF0dXJlSUQpOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZCBOT1QNCisJICovDQorCUBPdmVycmlkZQ0KKwlwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkgew0KKwkJaWYgKGVJc1Byb3h5KCkpIHJldHVybiBzdXBlci50b1N0cmluZygpOw0KKw0KKwkJU3RyaW5nQnVmZmVyIHJlc3VsdCA9IG5ldyBTdHJpbmdCdWZmZXIoKTsNCisJCXJlc3VsdC5hcHBlbmQoIiAoY291bnQ6ICIpOw0KKwkJcmVzdWx0LmFwcGVuZChnZXRDb3VudCgpKTsNCisJCXJlc3VsdC5hcHBlbmQoIiwgYmlydGhzOiAiKTsNCisJCXJlc3VsdC5hcHBlbmQoZ2V0QmlydGhzKCkpOw0KKwkJcmVzdWx0LmFwcGVuZCgiLCBkZWF0aHM6ICIpOw0KKwkJcmVzdWx0LmFwcGVuZChnZXREZWF0aHMoKSk7DQorCQlyZXN1bHQuYXBwZW5kKCcpJyk7DQorCQlyZXR1cm4gcmVzdWx0LnRvU3RyaW5nKCk7DQorCX0NCisNCisJcHVibGljIEludGVncmF0aW9uTGFiZWxWYWx1ZSBhYnMoKSB7DQorCQl0aGlzLnNldENvdW50KE1hdGguYWJzKHRoaXMuZ2V0Q291bnQoKSkpOw0KKwkJdGhpcy5zZXRCaXJ0aHMoTWF0aC5hYnModGhpcy5nZXRCaXJ0aHMoKSkpOw0KKwkJdGhpcy5zZXREZWF0aHMoTWF0aC5hYnModGhpcy5nZXREZWF0aHMoKSkpOw0KKwkJcmV0dXJuIHRoaXM7DQorCX0NCisNCisJcHVibGljIEludGVncmF0aW9uTGFiZWxWYWx1ZSBhZGQoSW50ZWdyYXRpb25MYWJlbFZhbHVlIHZhbHVlKSB7DQorCQlTdGFuZGFyZFBvcHVsYXRpb25Nb2RlbExhYmVsVmFsdWUgdiA9IChTdGFuZGFyZFBvcHVsYXRpb25Nb2RlbExhYmVsVmFsdWUpdmFsdWU7DQorCQl0aGlzLnNldEJpcnRocyh0aGlzLmdldEJpcnRocygpICsgdi5nZXRCaXJ0aHMoKSk7DQorCQl0aGlzLnNldERlYXRocyh0aGlzLmdldERlYXRocygpICsgdi5nZXREZWF0aHMoKSk7DQorCQl0aGlzLnNldENvdW50KHRoaXMuZ2V0Q291bnQoKSArIHYuZ2V0Q291bnQoKSk7DQorCQlyZXR1cm4gdGhpczsNCisJfQ0KKw0KKwlwdWJsaWMgSW50ZWdyYXRpb25MYWJlbFZhbHVlIGFkZChkb3VibGUgYWRkaXRpb24pIHsNCisJCXRoaXMuc2V0Q291bnQodGhpcy5nZXRDb3VudCgpICsgYWRkaXRpb24pOw0KKwkJdGhpcy5zZXRCaXJ0aHModGhpcy5nZXRCaXJ0aHMoKSArIGFkZGl0aW9uKTsNCisJCXRoaXMuc2V0RGVhdGhzKHRoaXMuZ2V0RGVhdGhzKCkgKyBhZGRpdGlvbik7DQorCQlyZXR1cm4gdGhpczsNCisJfQ0KKw0KKwlwdWJsaWMgSW50ZWdyYXRpb25MYWJlbFZhbHVlIHNjYWxlKGRvdWJsZSBzY2FsZUZhY3Rvcikgew0KKwkJdGhpcy5zZXRDb3VudCh0aGlzLmdldENvdW50KCkgKiBzY2FsZUZhY3Rvcik7DQorCQl0aGlzLnNldEJpcnRocyh0aGlzLmdldEJpcnRocygpICogc2NhbGVGYWN0b3IpOw0KKwkJdGhpcy5zZXREZWF0aHModGhpcy5nZXREZWF0aHMoKSAqIHNjYWxlRmFjdG9yKTsNCisJCXJldHVybiB0aGlzOw0KKwl9DQorDQorCXB1YmxpYyBJbnRlZ3JhdGlvbkxhYmVsVmFsdWUgc2V0KEludGVncmF0aW9uTGFiZWxWYWx1ZSB2YWx1ZSkgew0KKwkJU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxMYWJlbFZhbHVlIHYgPSAoU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxMYWJlbFZhbHVlKXZhbHVlOw0KKwkJdGhpcy5zZXRDb3VudCh2LmdldENvdW50KCkpOw0KKwkJdGhpcy5zZXRCaXJ0aHModi5nZXRCaXJ0aHMoKSk7DQorCQl0aGlzLnNldERlYXRocyh2LmdldERlYXRocygpKTsNCisJCXJldHVybiB0aGlzOw0KKwl9DQorDQorCXB1YmxpYyBJbnRlZ3JhdGlvbkxhYmVsVmFsdWUgc3ViKEludGVncmF0aW9uTGFiZWxWYWx1ZSB2YWx1ZSkgew0KKwkJU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxMYWJlbFZhbHVlIHYgPSAoU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxMYWJlbFZhbHVlKXZhbHVlOw0KKwkJdGhpcy5zZXRCaXJ0aHModGhpcy5nZXRCaXJ0aHMoKSAtIHYuZ2V0QmlydGhzKCkpOw0KKwkJdGhpcy5zZXREZWF0aHModGhpcy5nZXREZWF0aHMoKSAtIHYuZ2V0RGVhdGhzKCkpOw0KKwkJdGhpcy5zZXRDb3VudCh0aGlzLmdldENvdW50KCkgLSB2LmdldENvdW50KCkpOw0KKwkJcmV0dXJuIHRoaXM7DQorCX0NCisNCisJcHVibGljIEludGVncmF0aW9uTGFiZWxWYWx1ZSBkaXZpZGUoSW50ZWdyYXRpb25MYWJlbFZhbHVlIGQpIHsNCisJCQ0KKwkJU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxMYWJlbFZhbHVlIF9zY2FsZSA9IChTdGFuZGFyZFBvcHVsYXRpb25Nb2RlbExhYmVsVmFsdWUpZDsNCisJCWRvdWJsZSBjU2NhbGVkID0gTWF0aC5hYnMoZ2V0Q291bnQoKSkgLyBNYXRoLmFicyhfc2NhbGUuZ2V0Q291bnQoKSk7DQorCQlkb3VibGUgYlNjYWxlZCA9IE1hdGguYWJzKGdldEJpcnRocygpKSAvIE1hdGguYWJzKF9zY2FsZS5nZXRCaXJ0aHMoKSk7DQorCQlkb3VibGUgZFNjYWxlZCA9IE1hdGguYWJzKGdldERlYXRocygpKSAvIE1hdGguYWJzKF9zY2FsZS5nZXREZWF0aHMoKSk7DQorCQlzZXRDb3VudChjU2NhbGVkKTsNCisJCXNldEJpcnRocyhiU2NhbGVkKTsNCisJCXNldERlYXRocyhkU2NhbGVkKTsNCisJCXJldHVybiB0aGlzOw0KKwl9DQorCQ0KKwlwdWJsaWMgZG91YmxlIG1heCgpIHsNCisJCWlmKGdldENvdW50KCkgPiBnZXRCaXJ0aHMoKSAmJiBnZXRDb3VudCgpID4gZ2V0RGVhdGhzKCkpIHJldHVybiBnZXRDb3VudCgpOw0KKwkJZWxzZSBpZihnZXRCaXJ0aHMoKSA+IGdldERlYXRocygpKSByZXR1cm4gZ2V0QmlydGhzKCk7DQorCQllbHNlIHJldHVybiBnZXREZWF0aHMoKTsNCisJfQ0KKwkNCisJQE92ZXJyaWRlDQorCXB1YmxpYyB2b2lkIHJlc2V0KCkgew0KKwkJc3VwZXIucmVzZXQoKTsNCisJCXRoaXMuc2V0Q291bnQoQ09VTlRfRURFRkFVTFQpOw0KKwkJdGhpcy5zZXRCaXJ0aHMoQklSVEhTX0VERUZBVUxUKTsNCisJCXRoaXMuc2V0RGVhdGhzKERFQVRIU19FREVGQVVMVCk7DQorCQlhcnJpdmFscyA9IG51bGw7DQorCQlkZXBhcnR1cmVzID0gbnVsbDsNCisJfQ0KKwkNCisJLyoqDQorCSAqIFByZXBhcmUgZm9yIGEgbmV3IHNpbXVsYXRpb24gY3ljbGUuIENsZWFyIG91dCB0aGUgaW5jaWRlbmNlDQorCSAqLw0KKwlwdWJsaWMgdm9pZCBwcmVwYXJlQ3ljbGUoKSB7DQorCQkvLyBOb3RoaW5nIGRvIHRvIA0KKwl9DQorCQ0KK30gLy9TdGFuZGFyZFBvcHVsYXRpb25Nb2RlbExhYmVsVmFsdWVJbXBsDQpkaWZmIC0tZ2l0IGEvbW9kZWxzL3BvcHVsYXRpb25zL29yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9wb3B1bGF0aW9ubW9kZWxzL3N0YW5kYXJkL2ltcGwvU3RvY2hhc3RpY1N0YW5kYXJkUG9wdWxhdGlvbk1vZGVsSW1wbC5qYXZhIGIvbW9kZWxzL3BvcHVsYXRpb25zL29yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9wb3B1bGF0aW9ubW9kZWxzL3N0YW5kYXJkL2ltcGwvU3RvY2hhc3RpY1N0YW5kYXJkUG9wdWxhdGlvbk1vZGVsSW1wbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFhNWJmNGEKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvcG9wdWxhdGlvbnMvb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3BvcHVsYXRpb25tb2RlbHMvc3RhbmRhcmQvaW1wbC9TdG9jaGFzdGljU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxJbXBsLmphdmEKQEAgLTAsMCArMSwyMTcgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLmltcGw7DQorDQorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisgKiBDb3B5cmlnaHQgKGMpIDIwMDkgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuDQorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscw0KKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMA0KKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0DQorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwNCisgKg0KKyAqIENvbnRyaWJ1dG9yczoNCisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uDQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQorDQorDQoraW1wb3J0IGphdmEudXRpbC5SYW5kb207DQorDQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzczsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLmltcGwuRU5vdGlmaWNhdGlvbkltcGw7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5MYWJlbFZhbHVlOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmRQYWNrYWdlOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxMYWJlbFZhbHVlOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuU3RvY2hhc3RpY1N0YW5kYXJkUG9wdWxhdGlvbk1vZGVsOw0KKw0KKy8qKg0KKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorICogQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPlN0b2NoYXN0aWMgU3RhbmRhcmQgUG9wdWxhdGlvbiBNb2RlbDwvYj48L2VtPicuDQorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorICogPHA+DQorICogVGhlIGZvbGxvd2luZyBmZWF0dXJlcyBhcmUgaW1wbGVtZW50ZWQ6DQorICogPHVsPg0KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuaW1wbC5TdG9jaGFzdGljU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxJbXBsI2dldEdhaW4gPGVtPkdhaW48L2VtPn08L2xpPg0KKyAqIDwvdWw+DQorICogPC9wPg0KKyAqDQorICogQGdlbmVyYXRlZA0KKyAqLw0KK3B1YmxpYyBjbGFzcyBTdG9jaGFzdGljU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxJbXBsIGV4dGVuZHMgU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxJbXBsIGltcGxlbWVudHMgU3RvY2hhc3RpY1N0YW5kYXJkUG9wdWxhdGlvbk1vZGVsIHsNCisJcHJvdGVjdGVkIHN0YXRpYyBkb3VibGUgTUFYX0dBSU4gPSAwLjAyOw0KKwkNCisJLyoqDQorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRHYWluKCkgPGVtPkdhaW48L2VtPn0nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBzZWUgI2dldEdhaW4oKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqIEBvcmRlcmVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIGRvdWJsZSBHQUlOX0VERUZBVUxUID0gMC4wMTsNCisNCisJLyoqDQorCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldEdhaW4oKSA8ZW0+R2FpbjwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHNlZSAjZ2V0R2FpbigpDQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCXByb3RlY3RlZCBkb3VibGUgZ2FpbiA9IEdBSU5fRURFRkFVTFQ7DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZCBOT1QNCisJICovDQorCXB1YmxpYyBTdG9jaGFzdGljU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxJbXBsKCkgew0KKwkJc3VwZXIoKTsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCUBPdmVycmlkZQ0KKwlwcm90ZWN0ZWQgRUNsYXNzIGVTdGF0aWNDbGFzcygpIHsNCisJCXJldHVybiBTdGFuZGFyZFBhY2thZ2UuTGl0ZXJhbHMuU1RPQ0hBU1RJQ19TVEFOREFSRF9QT1BVTEFUSU9OX01PREVMOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIGRvdWJsZSBnZXRHYWluKCkgew0KKwkJcmV0dXJuIGdhaW47DQorCX0NCisNCisJQE92ZXJyaWRlDQorCXB1YmxpYyB2b2lkIGRvTW9kZWxTcGVjaWZpY0FkanVzdG1lbnRzKExhYmVsVmFsdWUgbGFiZWwpIHsNCisJCWZpbmFsIFN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWxWYWx1ZSBjdXJyZW50TGFiZWxWYWx1ZSA9IChTdGFuZGFyZFBvcHVsYXRpb25Nb2RlbExhYmVsVmFsdWUpIGxhYmVsOw0KKwkJLy9kb3VibGUgb2xkQ291bnQgPSBjdXJyZW50TGFiZWxWYWx1ZS5nZXRDb3VudCgpOw0KKwkJZG91YmxlIGJpcnRocyA9IGN1cnJlbnRMYWJlbFZhbHVlLmdldEJpcnRocygpOw0KKwkJZG91YmxlIHJCaXJ0aHMgPSBiaXJ0aHMqY29tcHV0ZU5vaXNlKCk7DQorCQlkb3VibGUgZGlmZiA9IHJCaXJ0aHMgLSBiaXJ0aHM7DQorCQkNCisJCWRvdWJsZSBuZXdDb3VudCA9IGN1cnJlbnRMYWJlbFZhbHVlLmdldENvdW50KCkgKyBkaWZmOw0KKwkJZG91YmxlIG5ld0JpcnRocyA9IGN1cnJlbnRMYWJlbFZhbHVlLmdldEJpcnRocygpICsgZGlmZi8yLjA7DQorCQlkb3VibGUgbmV3RGVhdGhzID0gY3VycmVudExhYmVsVmFsdWUuZ2V0RGVhdGhzKCkgKyBkaWZmLzIuMDsNCisJCQ0KKwkJY3VycmVudExhYmVsVmFsdWUuc2V0Q291bnQobmV3Q291bnQpOw0KKwkJY3VycmVudExhYmVsVmFsdWUuc2V0QmlydGhzKG5ld0JpcnRocyk7DQorCQljdXJyZW50TGFiZWxWYWx1ZS5zZXREZWF0aHMobmV3RGVhdGhzKTsNCisJfQ0KKwkNCisJUmFuZG9tIHJhbmQgPSBuZXcgUmFuZG9tKCk7DQorCXByb3RlY3RlZCBkb3VibGUgY29tcHV0ZU5vaXNlKCkgew0KKwkJcmV0dXJuIHRoaXMuY29tcHV0ZU5vaXNlKHRoaXMuZ2V0R2FpbigpLCB0aGlzLnJhbmQpOw0KKwl9DQorCQ0KKwkvKioNCisJICogVGhpcyBtZXRob2QgcmV0dXJucyBhIGRvdWJsZSBwcmVjaXNpb24gcmFuZG9tIG5vaXNlIHZhcmlhYmxlDQorCSAqIHIgYmV0d2VlbiAoMS4wK3gpIGFuZCAoMS4wLXgpDQorCSAqIHdoZXJlIHggaXMgYSBwcm9kdWN0IEcqIE1hdGgucmFuZCgpLCBhbmQgRyBpcyBhIGdhaW4gZmFjdG9yIDA8RzxtYXggbm9pc2UNCisJICogDQorCSAqIEBwYXJhbSBnYWluDQorCSAqIEBwYXJhbSByYW5kDQorCSAqIEByZXR1cm4gbm9pc2UNCisJICovDQorCXByb3RlY3RlZCBkb3VibGUgY29tcHV0ZU5vaXNlKGZpbmFsIGRvdWJsZSBnYWluLCBmaW5hbCBSYW5kb20gcmFuZCkgew0KKyAgICAgDQorCSAgICBhc3NlcnQgKGdhaW4gPD0gTUFYX0dBSU4pOiJTVE9DSEFTVElDIE5PSVNFIG11c3QgYmUgJ3NtYWxsJywgdGhlcmVmb3JlIGdhaW4gcGFyYW1ldGVyIG11c3QgYmUgPCBNQVhfR0FJTj0iK01BWF9HQUlOOyAvLyBtYXhpbXVtIG5vaXNlIHNob3VsZCBiZSAxJQ0KKwkJZG91YmxlIHggPSAoMi4wKnJhbmQubmV4dERvdWJsZSgpKS0xLjA7IC8vICsvLSAxDQorCQl4ICo9IGdhaW47DQorCQl4ICs9IDEuMDsNCisJCWFzc2VydCAoKHg+MC4wKSYmKHg8Mi4wKSkgOiAicmFuZG9tIG5vaXNlIHNob3VsZCBiZSBhIHNtYWxsIHBlcnR1cmJhdGlvbiBHYWluIGZhY3RvciwgZywgIG11c3QgMC4wIDwgZyA8PCAxLjAgIjsNCisJCXJldHVybiB4Ow0KKwkJDQorCX0gLy8gZ2V0Tm9pc2UNCisJDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIHZvaWQgc2V0R2Fpbihkb3VibGUgbmV3R2Fpbikgew0KKwkJZG91YmxlIG9sZEdhaW4gPSBnYWluOw0KKwkJZ2FpbiA9IG5ld0dhaW47DQorCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpDQorCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgU3RhbmRhcmRQYWNrYWdlLlNUT0NIQVNUSUNfU1RBTkRBUkRfUE9QVUxBVElPTl9NT0RFTF9fR0FJTiwgb2xkR2FpbiwgZ2FpbikpOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJQE92ZXJyaWRlDQorCXB1YmxpYyBPYmplY3QgZUdldChpbnQgZmVhdHVyZUlELCBib29sZWFuIHJlc29sdmUsIGJvb2xlYW4gY29yZVR5cGUpIHsNCisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7DQorCQkJY2FzZSBTdGFuZGFyZFBhY2thZ2UuU1RPQ0hBU1RJQ19TVEFOREFSRF9QT1BVTEFUSU9OX01PREVMX19HQUlOOg0KKwkJCQlyZXR1cm4gZ2V0R2FpbigpOw0KKwkJfQ0KKwkJcmV0dXJuIHN1cGVyLmVHZXQoZmVhdHVyZUlELCByZXNvbHZlLCBjb3JlVHlwZSk7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlAT3ZlcnJpZGUNCisJcHVibGljIHZvaWQgZVNldChpbnQgZmVhdHVyZUlELCBPYmplY3QgbmV3VmFsdWUpIHsNCisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7DQorCQkJY2FzZSBTdGFuZGFyZFBhY2thZ2UuU1RPQ0hBU1RJQ19TVEFOREFSRF9QT1BVTEFUSU9OX01PREVMX19HQUlOOg0KKwkJCQlzZXRHYWluKChEb3VibGUpbmV3VmFsdWUpOw0KKwkJCQlyZXR1cm47DQorCQl9DQorCQlzdXBlci5lU2V0KGZlYXR1cmVJRCwgbmV3VmFsdWUpOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJQE92ZXJyaWRlDQorCXB1YmxpYyB2b2lkIGVVbnNldChpbnQgZmVhdHVyZUlEKSB7DQorCQlzd2l0Y2ggKGZlYXR1cmVJRCkgew0KKwkJCWNhc2UgU3RhbmRhcmRQYWNrYWdlLlNUT0NIQVNUSUNfU1RBTkRBUkRfUE9QVUxBVElPTl9NT0RFTF9fR0FJTjoNCisJCQkJc2V0R2FpbihHQUlOX0VERUZBVUxUKTsNCisJCQkJcmV0dXJuOw0KKwkJfQ0KKwkJc3VwZXIuZVVuc2V0KGZlYXR1cmVJRCk7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlAT3ZlcnJpZGUNCisJcHVibGljIGJvb2xlYW4gZUlzU2V0KGludCBmZWF0dXJlSUQpIHsNCisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7DQorCQkJY2FzZSBTdGFuZGFyZFBhY2thZ2UuU1RPQ0hBU1RJQ19TVEFOREFSRF9QT1BVTEFUSU9OX01PREVMX19HQUlOOg0KKwkJCQlyZXR1cm4gZ2FpbiAhPSBHQUlOX0VERUZBVUxUOw0KKwkJfQ0KKwkJcmV0dXJuIHN1cGVyLmVJc1NldChmZWF0dXJlSUQpOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJQE92ZXJyaWRlDQorCXB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKSB7DQorCQlpZiAoZUlzUHJveHkoKSkgcmV0dXJuIHN1cGVyLnRvU3RyaW5nKCk7DQorDQorCQlTdHJpbmdCdWZmZXIgcmVzdWx0ID0gbmV3IFN0cmluZ0J1ZmZlcihzdXBlci50b1N0cmluZygpKTsNCisJCXJlc3VsdC5hcHBlbmQoIiAoZ2FpbjogIik7DQorCQlyZXN1bHQuYXBwZW5kKGdhaW4pOw0KKwkJcmVzdWx0LmFwcGVuZCgnKScpOw0KKwkJcmV0dXJuIHJlc3VsdC50b1N0cmluZygpOw0KKwl9DQorDQorfSAvL1N0b2NoYXN0aWNTdGFuZGFyZFBvcHVsYXRpb25Nb2RlbEltcGwNCmRpZmYgLS1naXQgYS9tb2RlbHMvcG9wdWxhdGlvbnMvb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3BvcHVsYXRpb25tb2RlbHMvc3RhbmRhcmQvaW1wbC9ZZXRpUG9wdWxhdGlvbkluaXRpYWxpemVySW1wbC5qYXZhIGIvbW9kZWxzL3BvcHVsYXRpb25zL29yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9wb3B1bGF0aW9ubW9kZWxzL3N0YW5kYXJkL2ltcGwvWWV0aVBvcHVsYXRpb25Jbml0aWFsaXplckltcGwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NDdlNmNlCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL3BvcHVsYXRpb25zL29yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9wb3B1bGF0aW9ubW9kZWxzL3N0YW5kYXJkL2ltcGwvWWV0aVBvcHVsYXRpb25Jbml0aWFsaXplckltcGwuamF2YQpAQCAtMCwwICsxLDc4IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5pbXBsOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAKKyAqIENvcHlyaWdodCAoYykgMjAxMSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4gCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIAorICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wIAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQgCisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbCAKKyAqIAorICogQ29udHJpYnV0b3JzOiAKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLk5vZGU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLk5vZGVMYWJlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuU1RFTVRpbWU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuRWFydGhTY2llbmNlTGFiZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuUG9wdWxhdGlvbkxhYmVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLlBvcHVsYXRpb25MYWJlbFZhbHVlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZFBhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLllldGlQb3B1bGF0aW9uSW5pdGlhbGl6ZXI7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIEFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5ZZXRpIFBvcHVsYXRpb24gSW5pdGlhbGl6ZXI8L2I+PC9lbT4nLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiA8cD4KKyAqIDwvcD4KKyAqCisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBZZXRpUG9wdWxhdGlvbkluaXRpYWxpemVySW1wbCBleHRlbmRzIEVhcnRoU2NpZW5jZVBvcHVsYXRpb25Jbml0aWFsaXplckltcGwgaW1wbGVtZW50cyBZZXRpUG9wdWxhdGlvbkluaXRpYWxpemVyIHsKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJcHVibGljIFlldGlQb3B1bGF0aW9uSW5pdGlhbGl6ZXJJbXBsKCkgeworCQlzdXBlcigpOworCX0KKworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIGluaXRpYWxpemVMYWJlbChQb3B1bGF0aW9uTGFiZWwgbGFiLCBTVEVNVGltZSB0aW1lLCBib29sZWFuIHplcm9WYWx1ZSkgeworCQkgUG9wdWxhdGlvbkxhYmVsVmFsdWUgcGx2ID0gbGFiLmdldEN1cnJlbnRQb3B1bGF0aW9uVmFsdWUoKTsKKwkJIGlmKHplcm9WYWx1ZSkgIHBsdi5zZXRDb3VudCgwLjApOworCQkgZWxzZSB7CisJCQkgLy8gR2V0IHRoZSBlbGV2YXRpb24gCisJCQkgTm9kZSBuID0gbGFiLmdldE5vZGUoKTsKKwkJCSBkb3VibGUgZWxldmF0aW9uID0gLTE7CisJCQkgZm9yKE5vZGVMYWJlbCBubDpuLmdldExhYmVscygpKSB7CisJCQkJIGlmKG5sIGluc3RhbmNlb2YgRWFydGhTY2llbmNlTGFiZWwgJiYgKChFYXJ0aFNjaWVuY2VMYWJlbClubCkuZ2V0Q3VycmVudEVhcnRoU2NpZW5jZVZhbHVlKCkuZ2V0RGF0YVR5cGUoKS5lcXVhbHMoImVsZXZhdGlvbiIpKSB7CisJCQkJCSBlbGV2YXRpb24gPSAoKEVhcnRoU2NpZW5jZUxhYmVsKW5sKS5nZXRDdXJyZW50RWFydGhTY2llbmNlVmFsdWUoKS5nZXRNZWFuKCkuZ2V0KDApLmRvdWJsZVZhbHVlKCk7CisJCQkJCSBicmVhazsKKwkJCQkgfQorCQkJIH0KKwkJCWlmKGVsZXZhdGlvbiA9PSAtMSkgCisJCQkJLy8gbm8gZWxldmF0aW9uIGRhdGEsIHNvIG5vIHlldGkgCisJCQkJcGx2LnNldENvdW50KDAuMCk7CisJCQllbHNlIHsKKwkJCQkvLyBUaGVyZSdzIG9uZSBtb3JlIHlldGkgZm9yIGVhY2ggbWV0ZXIgb2YgZWxldmF0aW9uCisJCQkJcGx2LnNldENvdW50KGVsZXZhdGlvbik7CisJCQl9CisJCSB9CSAKKwl9CisJCisJCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIEVDbGFzcyBlU3RhdGljQ2xhc3MoKSB7CisJCXJldHVybiBTdGFuZGFyZFBhY2thZ2UuTGl0ZXJhbHMuWUVUSV9QT1BVTEFUSU9OX0lOSVRJQUxJWkVSOworCX0KKworfSAvL1lldGlQb3B1bGF0aW9uSW5pdGlhbGl6ZXJJbXBsCmRpZmYgLS1naXQgYS9tb2RlbHMvcG9wdWxhdGlvbnMvb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3BvcHVsYXRpb25tb2RlbHMvc3RhbmRhcmQvcHJvdmlkZXIvQWdlR3JvdXBJdGVtUHJvdmlkZXIuamF2YSBiL21vZGVscy9wb3B1bGF0aW9ucy9vcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vcG9wdWxhdGlvbm1vZGVscy9zdGFuZGFyZC9wcm92aWRlci9BZ2VHcm91cEl0ZW1Qcm92aWRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNjNjZhYTMKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvcG9wdWxhdGlvbnMvb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3BvcHVsYXRpb25tb2RlbHMvc3RhbmRhcmQvcHJvdmlkZXIvQWdlR3JvdXBJdGVtUHJvdmlkZXIuamF2YQpAQCAtMCwwICsxLDIyNCBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQucHJvdmlkZXI7DQorDQorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogDQorICogQ29weXJpZ2h0IChjKSAyMDExIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiANCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIA0KKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCANCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdCANCisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbCANCisgKiANCisgKiBDb250cmlidXRvcnM6IA0KKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gDQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQorDQorDQoraW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOw0KK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsNCisNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuQWRhcHRlckZhY3Rvcnk7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbjsNCisNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeTsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUVkaXRpbmdEb21haW5JdGVtUHJvdmlkZXI7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtTGFiZWxQcm92aWRlcjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtUHJvcGVydHlTb3VyY2U7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklTdHJ1Y3R1cmVkSXRlbUNvbnRlbnRQcm92aWRlcjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVRyZWVJdGVtQ29udGVudFByb3ZpZGVyOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JdGVtUHJvcGVydHlEZXNjcmlwdG9yOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5WaWV3ZXJOb3RpZmljYXRpb247DQorDQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5BZ2VHcm91cDsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkUGFja2FnZTsNCisNCisvKioNCisgKiBUaGlzIGlzIHRoZSBpdGVtIHByb3ZpZGVyIGFkYXB0ZXIgZm9yIGEge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5BZ2VHcm91cH0gb2JqZWN0Lg0KKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorICogQGdlbmVyYXRlZA0KKyAqLw0KK3B1YmxpYyBjbGFzcyBBZ2VHcm91cEl0ZW1Qcm92aWRlcg0KKwlleHRlbmRzIFBvcHVsYXRpb25Hcm91cEl0ZW1Qcm92aWRlcg0KKwlpbXBsZW1lbnRzDQorCQlJRWRpdGluZ0RvbWFpbkl0ZW1Qcm92aWRlciwNCisJCUlTdHJ1Y3R1cmVkSXRlbUNvbnRlbnRQcm92aWRlciwNCisJCUlUcmVlSXRlbUNvbnRlbnRQcm92aWRlciwNCisJCUlJdGVtTGFiZWxQcm92aWRlciwNCisJCUlJdGVtUHJvcGVydHlTb3VyY2Ugew0KKwkvKioNCisJICogVGhpcyBjb25zdHJ1Y3RzIGFuIGluc3RhbmNlIGZyb20gYSBmYWN0b3J5IGFuZCBhIG5vdGlmaWVyLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIEFnZUdyb3VwSXRlbVByb3ZpZGVyKEFkYXB0ZXJGYWN0b3J5IGFkYXB0ZXJGYWN0b3J5KSB7DQorCQlzdXBlcihhZGFwdGVyRmFjdG9yeSk7DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgcmV0dXJucyB0aGUgcHJvcGVydHkgZGVzY3JpcHRvcnMgZm9yIHRoZSBhZGFwdGVkIGNsYXNzLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJQE92ZXJyaWRlDQorCXB1YmxpYyBMaXN0PElJdGVtUHJvcGVydHlEZXNjcmlwdG9yPiBnZXRQcm9wZXJ0eURlc2NyaXB0b3JzKE9iamVjdCBvYmplY3QpIHsNCisJCWlmIChpdGVtUHJvcGVydHlEZXNjcmlwdG9ycyA9PSBudWxsKSB7DQorCQkJc3VwZXIuZ2V0UHJvcGVydHlEZXNjcmlwdG9ycyhvYmplY3QpOw0KKw0KKwkJCWFkZEZyb21BZ2VQcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0KTsNCisJCQlhZGRUb0FnZVByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QpOw0KKwkJCWFkZERlYXRoRmFjdG9yUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCk7DQorCQkJYWRkTGltaXRlZFByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QpOw0KKwkJfQ0KKwkJcmV0dXJuIGl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzOw0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIGFkZHMgYSBwcm9wZXJ0eSBkZXNjcmlwdG9yIGZvciB0aGUgRnJvbSBBZ2UgZmVhdHVyZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCB2b2lkIGFkZEZyb21BZ2VQcm9wZXJ0eURlc2NyaXB0b3IoT2JqZWN0IG9iamVjdCkgew0KKwkJaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMuYWRkDQorCQkJKGNyZWF0ZUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3INCisJCQkJKCgoQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSlhZGFwdGVyRmFjdG9yeSkuZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCksDQorCQkJCSBnZXRSZXNvdXJjZUxvY2F0b3IoKSwNCisJCQkJIGdldFN0cmluZygiX1VJX0FnZUdyb3VwX2Zyb21BZ2VfZmVhdHVyZSIpLA0KKwkJCQkgZ2V0U3RyaW5nKCJfVUlfUHJvcGVydHlEZXNjcmlwdG9yX2Rlc2NyaXB0aW9uIiwgIl9VSV9BZ2VHcm91cF9mcm9tQWdlX2ZlYXR1cmUiLCAiX1VJX0FnZUdyb3VwX3R5cGUiKSwNCisJCQkJIFN0YW5kYXJkUGFja2FnZS5MaXRlcmFscy5BR0VfR1JPVVBfX0ZST01fQUdFLA0KKwkJCQkgdHJ1ZSwNCisJCQkJIGZhbHNlLA0KKwkJCQkgZmFsc2UsDQorCQkJCSBJdGVtUHJvcGVydHlEZXNjcmlwdG9yLklOVEVHUkFMX1ZBTFVFX0lNQUdFLA0KKwkJCQkgbnVsbCwNCisJCQkJIG51bGwpKTsNCisJfQ0KKw0KKwkvKioNCisJICogVGhpcyBhZGRzIGEgcHJvcGVydHkgZGVzY3JpcHRvciBmb3IgdGhlIFRvIEFnZSBmZWF0dXJlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIHZvaWQgYWRkVG9BZ2VQcm9wZXJ0eURlc2NyaXB0b3IoT2JqZWN0IG9iamVjdCkgew0KKwkJaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMuYWRkDQorCQkJKGNyZWF0ZUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3INCisJCQkJKCgoQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSlhZGFwdGVyRmFjdG9yeSkuZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCksDQorCQkJCSBnZXRSZXNvdXJjZUxvY2F0b3IoKSwNCisJCQkJIGdldFN0cmluZygiX1VJX0FnZUdyb3VwX3RvQWdlX2ZlYXR1cmUiKSwNCisJCQkJIGdldFN0cmluZygiX1VJX1Byb3BlcnR5RGVzY3JpcHRvcl9kZXNjcmlwdGlvbiIsICJfVUlfQWdlR3JvdXBfdG9BZ2VfZmVhdHVyZSIsICJfVUlfQWdlR3JvdXBfdHlwZSIpLA0KKwkJCQkgU3RhbmRhcmRQYWNrYWdlLkxpdGVyYWxzLkFHRV9HUk9VUF9fVE9fQUdFLA0KKwkJCQkgdHJ1ZSwNCisJCQkJIGZhbHNlLA0KKwkJCQkgZmFsc2UsDQorCQkJCSBJdGVtUHJvcGVydHlEZXNjcmlwdG9yLklOVEVHUkFMX1ZBTFVFX0lNQUdFLA0KKwkJCQkgbnVsbCwNCisJCQkJIG51bGwpKTsNCisJfQ0KKw0KKwkvKioNCisJICogVGhpcyBhZGRzIGEgcHJvcGVydHkgZGVzY3JpcHRvciBmb3IgdGhlIERlYXRoIEZhY3RvciBmZWF0dXJlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIHZvaWQgYWRkRGVhdGhGYWN0b3JQcm9wZXJ0eURlc2NyaXB0b3IoT2JqZWN0IG9iamVjdCkgew0KKwkJaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMuYWRkDQorCQkJKGNyZWF0ZUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3INCisJCQkJKCgoQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSlhZGFwdGVyRmFjdG9yeSkuZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCksDQorCQkJCSBnZXRSZXNvdXJjZUxvY2F0b3IoKSwNCisJCQkJIGdldFN0cmluZygiX1VJX0FnZUdyb3VwX2RlYXRoRmFjdG9yX2ZlYXR1cmUiKSwNCisJCQkJIGdldFN0cmluZygiX1VJX1Byb3BlcnR5RGVzY3JpcHRvcl9kZXNjcmlwdGlvbiIsICJfVUlfQWdlR3JvdXBfZGVhdGhGYWN0b3JfZmVhdHVyZSIsICJfVUlfQWdlR3JvdXBfdHlwZSIpLA0KKwkJCQkgU3RhbmRhcmRQYWNrYWdlLkxpdGVyYWxzLkFHRV9HUk9VUF9fREVBVEhfRkFDVE9SLA0KKwkJCQkgdHJ1ZSwNCisJCQkJIGZhbHNlLA0KKwkJCQkgZmFsc2UsDQorCQkJCSBJdGVtUHJvcGVydHlEZXNjcmlwdG9yLlJFQUxfVkFMVUVfSU1BR0UsDQorCQkJCSBudWxsLA0KKwkJCQkgbnVsbCkpOw0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIGFkZHMgYSBwcm9wZXJ0eSBkZXNjcmlwdG9yIGZvciB0aGUgTGltaXRlZCBmZWF0dXJlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIHZvaWQgYWRkTGltaXRlZFByb3BlcnR5RGVzY3JpcHRvcihPYmplY3Qgb2JqZWN0KSB7DQorCQlpdGVtUHJvcGVydHlEZXNjcmlwdG9ycy5hZGQNCisJCQkoY3JlYXRlSXRlbVByb3BlcnR5RGVzY3JpcHRvcg0KKwkJCQkoKChDb21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5KWFkYXB0ZXJGYWN0b3J5KS5nZXRSb290QWRhcHRlckZhY3RvcnkoKSwNCisJCQkJIGdldFJlc291cmNlTG9jYXRvcigpLA0KKwkJCQkgZ2V0U3RyaW5nKCJfVUlfQWdlR3JvdXBfbGltaXRlZF9mZWF0dXJlIiksDQorCQkJCSBnZXRTdHJpbmcoIl9VSV9Qcm9wZXJ0eURlc2NyaXB0b3JfZGVzY3JpcHRpb24iLCAiX1VJX0FnZUdyb3VwX2xpbWl0ZWRfZmVhdHVyZSIsICJfVUlfQWdlR3JvdXBfdHlwZSIpLA0KKwkJCQkgU3RhbmRhcmRQYWNrYWdlLkxpdGVyYWxzLkFHRV9HUk9VUF9fTElNSVRFRCwNCisJCQkJIHRydWUsDQorCQkJCSBmYWxzZSwNCisJCQkJIGZhbHNlLA0KKwkJCQkgSXRlbVByb3BlcnR5RGVzY3JpcHRvci5CT09MRUFOX1ZBTFVFX0lNQUdFLA0KKwkJCQkgbnVsbCwNCisJCQkJIG51bGwpKTsNCisJfQ0KKw0KKwkvKioNCisJICogVGhpcyByZXR1cm5zIEFnZUdyb3VwLmdpZi4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCUBPdmVycmlkZQ0KKwlwdWJsaWMgT2JqZWN0IGdldEltYWdlKE9iamVjdCBvYmplY3QpIHsNCisJCXJldHVybiBvdmVybGF5SW1hZ2Uob2JqZWN0LCBnZXRSZXNvdXJjZUxvY2F0b3IoKS5nZXRJbWFnZSgiZnVsbC9vYmoxNi9BZ2VHcm91cCIpKTsNCisJfQ0KKw0KKwkvKioNCisJICogVGhpcyByZXR1cm5zIHRoZSBsYWJlbCB0ZXh0IGZvciB0aGUgYWRhcHRlZCBjbGFzcy4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCUBPdmVycmlkZQ0KKwlwdWJsaWMgU3RyaW5nIGdldFRleHQoT2JqZWN0IG9iamVjdCkgew0KKwkJU3RyaW5nIGxhYmVsID0gKChBZ2VHcm91cClvYmplY3QpLmdldElkZW50aWZpZXIoKTsNCisJCXJldHVybiBsYWJlbCA9PSBudWxsIHx8IGxhYmVsLmxlbmd0aCgpID09IDAgPw0KKwkJCWdldFN0cmluZygiX1VJX0FnZUdyb3VwX3R5cGUiKSA6DQorCQkJZ2V0U3RyaW5nKCJfVUlfQWdlR3JvdXBfdHlwZSIpICsgIiAiICsgbGFiZWw7DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgaGFuZGxlcyBtb2RlbCBub3RpZmljYXRpb25zIGJ5IGNhbGxpbmcge0BsaW5rICN1cGRhdGVDaGlsZHJlbn0gdG8gdXBkYXRlIGFueSBjYWNoZWQNCisJICogY2hpbGRyZW4gYW5kIGJ5IGNyZWF0aW5nIGEgdmlld2VyIG5vdGlmaWNhdGlvbiwgd2hpY2ggaXQgcGFzc2VzIHRvIHtAbGluayAjZmlyZU5vdGlmeUNoYW5nZWR9Lg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJQE92ZXJyaWRlDQorCXB1YmxpYyB2b2lkIG5vdGlmeUNoYW5nZWQoTm90aWZpY2F0aW9uIG5vdGlmaWNhdGlvbikgew0KKwkJdXBkYXRlQ2hpbGRyZW4obm90aWZpY2F0aW9uKTsNCisNCisJCXN3aXRjaCAobm90aWZpY2F0aW9uLmdldEZlYXR1cmVJRChBZ2VHcm91cC5jbGFzcykpIHsNCisJCQljYXNlIFN0YW5kYXJkUGFja2FnZS5BR0VfR1JPVVBfX0ZST01fQUdFOg0KKwkJCWNhc2UgU3RhbmRhcmRQYWNrYWdlLkFHRV9HUk9VUF9fVE9fQUdFOg0KKwkJCWNhc2UgU3RhbmRhcmRQYWNrYWdlLkFHRV9HUk9VUF9fREVBVEhfRkFDVE9SOg0KKwkJCWNhc2UgU3RhbmRhcmRQYWNrYWdlLkFHRV9HUk9VUF9fTElNSVRFRDoNCisJCQkJZmlyZU5vdGlmeUNoYW5nZWQobmV3IFZpZXdlck5vdGlmaWNhdGlvbihub3RpZmljYXRpb24sIG5vdGlmaWNhdGlvbi5nZXROb3RpZmllcigpLCBmYWxzZSwgdHJ1ZSkpOw0KKwkJCQlyZXR1cm47DQorCQl9DQorCQlzdXBlci5ub3RpZnlDaGFuZ2VkKG5vdGlmaWNhdGlvbik7DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgYWRkcyB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmVkaXQuY29tbWFuZC5Db21tYW5kUGFyYW1ldGVyfXMgZGVzY3JpYmluZyB0aGUgY2hpbGRyZW4NCisJICogdGhhdCBjYW4gYmUgY3JlYXRlZCB1bmRlciB0aGlzIG9iamVjdC4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCUBPdmVycmlkZQ0KKwlwcm90ZWN0ZWQgdm9pZCBjb2xsZWN0TmV3Q2hpbGREZXNjcmlwdG9ycyhDb2xsZWN0aW9uPE9iamVjdD4gbmV3Q2hpbGREZXNjcmlwdG9ycywgT2JqZWN0IG9iamVjdCkgew0KKwkJc3VwZXIuY29sbGVjdE5ld0NoaWxkRGVzY3JpcHRvcnMobmV3Q2hpbGREZXNjcmlwdG9ycywgb2JqZWN0KTsNCisJfQ0KKw0KK30NCmRpZmYgLS1naXQgYS9tb2RlbHMvcG9wdWxhdGlvbnMvb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3BvcHVsYXRpb25tb2RlbHMvc3RhbmRhcmQvcHJvdmlkZXIvQWdpbmdQb3B1bGF0aW9uTW9kZWxJdGVtUHJvdmlkZXIuamF2YSBiL21vZGVscy9wb3B1bGF0aW9ucy9vcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vcG9wdWxhdGlvbm1vZGVscy9zdGFuZGFyZC9wcm92aWRlci9BZ2luZ1BvcHVsYXRpb25Nb2RlbEl0ZW1Qcm92aWRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUyZjYzZDcKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvcG9wdWxhdGlvbnMvb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3BvcHVsYXRpb25tb2RlbHMvc3RhbmRhcmQvcHJvdmlkZXIvQWdpbmdQb3B1bGF0aW9uTW9kZWxJdGVtUHJvdmlkZXIuamF2YQpAQCAtMCwwICsxLDE1MiBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQucHJvdmlkZXI7DQorDQorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogDQorICogQ29weXJpZ2h0IChjKSAyMDExIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiANCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIA0KKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCANCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdCANCisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbCANCisgKiANCisgKiBDb250cmlidXRvcnM6IA0KKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gDQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQorDQorDQoraW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOw0KK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsNCisNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuQWRhcHRlckZhY3Rvcnk7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbjsNCisNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeTsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUVkaXRpbmdEb21haW5JdGVtUHJvdmlkZXI7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtTGFiZWxQcm92aWRlcjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtUHJvcGVydHlTb3VyY2U7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklTdHJ1Y3R1cmVkSXRlbUNvbnRlbnRQcm92aWRlcjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVRyZWVJdGVtQ29udGVudFByb3ZpZGVyOw0KKw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JdGVtUHJvcGVydHlEZXNjcmlwdG9yOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5WaWV3ZXJOb3RpZmljYXRpb247DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5BZ2luZ1BvcHVsYXRpb25Nb2RlbDsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkUGFja2FnZTsNCisNCisvKioNCisgKiBUaGlzIGlzIHRoZSBpdGVtIHByb3ZpZGVyIGFkYXB0ZXIgZm9yIGEge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5BZ2luZ1BvcHVsYXRpb25Nb2RlbH0gb2JqZWN0Lg0KKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorICogQGdlbmVyYXRlZA0KKyAqLw0KK3B1YmxpYyBjbGFzcyBBZ2luZ1BvcHVsYXRpb25Nb2RlbEl0ZW1Qcm92aWRlcg0KKwlleHRlbmRzIERlbW9ncmFwaGljUG9wdWxhdGlvbk1vZGVsSXRlbVByb3ZpZGVyDQorCWltcGxlbWVudHMNCisJCUlFZGl0aW5nRG9tYWluSXRlbVByb3ZpZGVyLA0KKwkJSVN0cnVjdHVyZWRJdGVtQ29udGVudFByb3ZpZGVyLA0KKwkJSVRyZWVJdGVtQ29udGVudFByb3ZpZGVyLA0KKwkJSUl0ZW1MYWJlbFByb3ZpZGVyLA0KKwkJSUl0ZW1Qcm9wZXJ0eVNvdXJjZSB7DQorCS8qKg0KKwkgKiBUaGlzIGNvbnN0cnVjdHMgYW4gaW5zdGFuY2UgZnJvbSBhIGZhY3RvcnkgYW5kIGEgbm90aWZpZXIuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgQWdpbmdQb3B1bGF0aW9uTW9kZWxJdGVtUHJvdmlkZXIoQWRhcHRlckZhY3RvcnkgYWRhcHRlckZhY3RvcnkpIHsNCisJCXN1cGVyKGFkYXB0ZXJGYWN0b3J5KTsNCisJfQ0KKw0KKwkvKioNCisJICogVGhpcyByZXR1cm5zIHRoZSBwcm9wZXJ0eSBkZXNjcmlwdG9ycyBmb3IgdGhlIGFkYXB0ZWQgY2xhc3MuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlAT3ZlcnJpZGUNCisJcHVibGljIExpc3Q8SUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I+IGdldFByb3BlcnR5RGVzY3JpcHRvcnMoT2JqZWN0IG9iamVjdCkgew0KKwkJaWYgKGl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzID09IG51bGwpIHsNCisJCQlzdXBlci5nZXRQcm9wZXJ0eURlc2NyaXB0b3JzKG9iamVjdCk7DQorDQorCQkJYWRkSGFzTWF4QWdlUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCk7DQorCQl9DQorCQlyZXR1cm4gaXRlbVByb3BlcnR5RGVzY3JpcHRvcnM7DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgYWRkcyBhIHByb3BlcnR5IGRlc2NyaXB0b3IgZm9yIHRoZSBIYXMgTWF4IEFnZSBmZWF0dXJlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIHZvaWQgYWRkSGFzTWF4QWdlUHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdCBvYmplY3QpIHsNCisJCWl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzLmFkZA0KKwkJCShjcmVhdGVJdGVtUHJvcGVydHlEZXNjcmlwdG9yDQorCQkJCSgoKENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnkpYWRhcHRlckZhY3RvcnkpLmdldFJvb3RBZGFwdGVyRmFjdG9yeSgpLA0KKwkJCQkgZ2V0UmVzb3VyY2VMb2NhdG9yKCksDQorCQkJCSBnZXRTdHJpbmcoIl9VSV9BZ2luZ1BvcHVsYXRpb25Nb2RlbF9oYXNNYXhBZ2VfZmVhdHVyZSIpLA0KKwkJCQkgZ2V0U3RyaW5nKCJfVUlfUHJvcGVydHlEZXNjcmlwdG9yX2Rlc2NyaXB0aW9uIiwgIl9VSV9BZ2luZ1BvcHVsYXRpb25Nb2RlbF9oYXNNYXhBZ2VfZmVhdHVyZSIsICJfVUlfQWdpbmdQb3B1bGF0aW9uTW9kZWxfdHlwZSIpLA0KKwkJCQkgU3RhbmRhcmRQYWNrYWdlLkxpdGVyYWxzLkFHSU5HX1BPUFVMQVRJT05fTU9ERUxfX0hBU19NQVhfQUdFLA0KKwkJCQkgdHJ1ZSwNCisJCQkJIGZhbHNlLA0KKwkJCQkgZmFsc2UsDQorCQkJCSBJdGVtUHJvcGVydHlEZXNjcmlwdG9yLkJPT0xFQU5fVkFMVUVfSU1BR0UsDQorCQkJCSBudWxsLA0KKwkJCQkgbnVsbCkpOw0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIHJldHVybnMgQWdpbmdQb3B1bGF0aW9uTW9kZWwuZ2lmLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJQE92ZXJyaWRlDQorCXB1YmxpYyBPYmplY3QgZ2V0SW1hZ2UoT2JqZWN0IG9iamVjdCkgew0KKwkJcmV0dXJuIG92ZXJsYXlJbWFnZShvYmplY3QsIGdldFJlc291cmNlTG9jYXRvcigpLmdldEltYWdlKCJmdWxsL29iajE2L0FnaW5nUG9wdWxhdGlvbk1vZGVsIikpOw0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIHJldHVybnMgdGhlIGxhYmVsIHRleHQgZm9yIHRoZSBhZGFwdGVkIGNsYXNzLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJQE92ZXJyaWRlDQorCXB1YmxpYyBTdHJpbmcgZ2V0VGV4dChPYmplY3Qgb2JqZWN0KSB7DQorCQlTdHJpbmcgbGFiZWwgPSAoKEFnaW5nUG9wdWxhdGlvbk1vZGVsKW9iamVjdCkuZ2V0TmFtZSgpOw0KKwkJcmV0dXJuIGxhYmVsID09IG51bGwgfHwgbGFiZWwubGVuZ3RoKCkgPT0gMCA/DQorCQkJZ2V0U3RyaW5nKCJfVUlfQWdpbmdQb3B1bGF0aW9uTW9kZWxfdHlwZSIpIDoNCisJCQlnZXRTdHJpbmcoIl9VSV9BZ2luZ1BvcHVsYXRpb25Nb2RlbF90eXBlIikgKyAiICIgKyBsYWJlbDsNCisJfQ0KKw0KKwkvKioNCisJICogVGhpcyBoYW5kbGVzIG1vZGVsIG5vdGlmaWNhdGlvbnMgYnkgY2FsbGluZyB7QGxpbmsgI3VwZGF0ZUNoaWxkcmVufSB0byB1cGRhdGUgYW55IGNhY2hlZA0KKwkgKiBjaGlsZHJlbiBhbmQgYnkgY3JlYXRpbmcgYSB2aWV3ZXIgbm90aWZpY2F0aW9uLCB3aGljaCBpdCBwYXNzZXMgdG8ge0BsaW5rICNmaXJlTm90aWZ5Q2hhbmdlZH0uDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlAT3ZlcnJpZGUNCisJcHVibGljIHZvaWQgbm90aWZ5Q2hhbmdlZChOb3RpZmljYXRpb24gbm90aWZpY2F0aW9uKSB7DQorCQl1cGRhdGVDaGlsZHJlbihub3RpZmljYXRpb24pOw0KKw0KKwkJc3dpdGNoIChub3RpZmljYXRpb24uZ2V0RmVhdHVyZUlEKEFnaW5nUG9wdWxhdGlvbk1vZGVsLmNsYXNzKSkgew0KKwkJCWNhc2UgU3RhbmRhcmRQYWNrYWdlLkFHSU5HX1BPUFVMQVRJT05fTU9ERUxfX0hBU19NQVhfQUdFOg0KKwkJCQlmaXJlTm90aWZ5Q2hhbmdlZChuZXcgVmlld2VyTm90aWZpY2F0aW9uKG5vdGlmaWNhdGlvbiwgbm90aWZpY2F0aW9uLmdldE5vdGlmaWVyKCksIGZhbHNlLCB0cnVlKSk7DQorCQkJCXJldHVybjsNCisJCX0NCisJCXN1cGVyLm5vdGlmeUNoYW5nZWQobm90aWZpY2F0aW9uKTsNCisJfQ0KKw0KKwkvKioNCisJICogVGhpcyBhZGRzIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuZWRpdC5jb21tYW5kLkNvbW1hbmRQYXJhbWV0ZXJ9cyBkZXNjcmliaW5nIHRoZSBjaGlsZHJlbg0KKwkgKiB0aGF0IGNhbiBiZSBjcmVhdGVkIHVuZGVyIHRoaXMgb2JqZWN0Lg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJQE92ZXJyaWRlDQorCXByb3RlY3RlZCB2b2lkIGNvbGxlY3ROZXdDaGlsZERlc2NyaXB0b3JzKENvbGxlY3Rpb248T2JqZWN0PiBuZXdDaGlsZERlc2NyaXB0b3JzLCBPYmplY3Qgb2JqZWN0KSB7DQorCQlzdXBlci5jb2xsZWN0TmV3Q2hpbGREZXNjcmlwdG9ycyhuZXdDaGlsZERlc2NyaXB0b3JzLCBvYmplY3QpOw0KKwl9DQorDQorfQ0KZGlmZiAtLWdpdCBhL21vZGVscy9wb3B1bGF0aW9ucy9vcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vcG9wdWxhdGlvbm1vZGVscy9zdGFuZGFyZC9wcm92aWRlci9EZW1vZ3JhcGhpY1BvcHVsYXRpb25Nb2RlbEl0ZW1Qcm92aWRlci5qYXZhIGIvbW9kZWxzL3BvcHVsYXRpb25zL29yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9wb3B1bGF0aW9ubW9kZWxzL3N0YW5kYXJkL3Byb3ZpZGVyL0RlbW9ncmFwaGljUG9wdWxhdGlvbk1vZGVsSXRlbVByb3ZpZGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjk3YzZiMgotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9wb3B1bGF0aW9ucy9vcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vcG9wdWxhdGlvbm1vZGVscy9zdGFuZGFyZC9wcm92aWRlci9EZW1vZ3JhcGhpY1BvcHVsYXRpb25Nb2RlbEl0ZW1Qcm92aWRlci5qYXZhCkBAIC0wLDAgKzEsMTkxIEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5wcm92aWRlcjsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAxMCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOworaW1wb3J0IGphdmEudXRpbC5MaXN0OworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FU3RydWN0dXJhbEZlYXR1cmU7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JRWRpdGluZ0RvbWFpbkl0ZW1Qcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbUxhYmVsUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1Qcm9wZXJ0eVNvdXJjZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JU3RydWN0dXJlZEl0ZW1Db250ZW50UHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVRyZWVJdGVtQ29udGVudFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLlZpZXdlck5vdGlmaWNhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuRGVtb2dyYXBoaWNQb3B1bGF0aW9uTW9kZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkUGFja2FnZTsKKworLyoqCisgKiBUaGlzIGlzIHRoZSBpdGVtIHByb3ZpZGVyIGFkYXB0ZXIgZm9yIGEge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5EZW1vZ3JhcGhpY1BvcHVsYXRpb25Nb2RlbH0gb2JqZWN0LgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgRGVtb2dyYXBoaWNQb3B1bGF0aW9uTW9kZWxJdGVtUHJvdmlkZXIKKwlleHRlbmRzIFN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsSXRlbVByb3ZpZGVyCisJaW1wbGVtZW50cworCQlJRWRpdGluZ0RvbWFpbkl0ZW1Qcm92aWRlciwKKwkJSVN0cnVjdHVyZWRJdGVtQ29udGVudFByb3ZpZGVyLAorCQlJVHJlZUl0ZW1Db250ZW50UHJvdmlkZXIsCisJCUlJdGVtTGFiZWxQcm92aWRlciwKKwkJSUl0ZW1Qcm9wZXJ0eVNvdXJjZSB7CisJLyoqCisJICogVGhpcyBjb25zdHJ1Y3RzIGFuIGluc3RhbmNlIGZyb20gYSBmYWN0b3J5IGFuZCBhIG5vdGlmaWVyLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBEZW1vZ3JhcGhpY1BvcHVsYXRpb25Nb2RlbEl0ZW1Qcm92aWRlcihBZGFwdGVyRmFjdG9yeSBhZGFwdGVyRmFjdG9yeSkgeworCQlzdXBlcihhZGFwdGVyRmFjdG9yeSk7CisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIHRoZSBwcm9wZXJ0eSBkZXNjcmlwdG9ycyBmb3IgdGhlIGFkYXB0ZWQgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIExpc3Q8SUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I+IGdldFByb3BlcnR5RGVzY3JpcHRvcnMoT2JqZWN0IG9iamVjdCkgeworCQlpZiAoaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMgPT0gbnVsbCkgeworCQkJc3VwZXIuZ2V0UHJvcGVydHlEZXNjcmlwdG9ycyhvYmplY3QpOworCisJCQlhZGRQb3B1bGF0aW9uR3JvdXBzUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCk7CisJCX0KKwkJcmV0dXJuIGl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzOworCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyBhIHByb3BlcnR5IGRlc2NyaXB0b3IgZm9yIHRoZSBQb3B1bGF0aW9uIEdyb3VwcyBmZWF0dXJlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIGFkZFBvcHVsYXRpb25Hcm91cHNQcm9wZXJ0eURlc2NyaXB0b3IoT2JqZWN0IG9iamVjdCkgeworCQlpdGVtUHJvcGVydHlEZXNjcmlwdG9ycy5hZGQKKwkJCShjcmVhdGVJdGVtUHJvcGVydHlEZXNjcmlwdG9yCisJCQkJKCgoQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSlhZGFwdGVyRmFjdG9yeSkuZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCksCisJCQkJIGdldFJlc291cmNlTG9jYXRvcigpLAorCQkJCSBnZXRTdHJpbmcoIl9VSV9EZW1vZ3JhcGhpY1BvcHVsYXRpb25Nb2RlbF9wb3B1bGF0aW9uR3JvdXBzX2ZlYXR1cmUiKSwKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfUHJvcGVydHlEZXNjcmlwdG9yX2Rlc2NyaXB0aW9uIiwgIl9VSV9EZW1vZ3JhcGhpY1BvcHVsYXRpb25Nb2RlbF9wb3B1bGF0aW9uR3JvdXBzX2ZlYXR1cmUiLCAiX1VJX0RlbW9ncmFwaGljUG9wdWxhdGlvbk1vZGVsX3R5cGUiKSwKKwkJCQkgU3RhbmRhcmRQYWNrYWdlLkxpdGVyYWxzLkRFTU9HUkFQSElDX1BPUFVMQVRJT05fTU9ERUxfX1BPUFVMQVRJT05fR1JPVVBTLAorCQkJCSB0cnVlLAorCQkJCSBmYWxzZSwKKwkJCQkgZmFsc2UsCisJCQkJIG51bGwsCisJCQkJIG51bGwsCisJCQkJIG51bGwpKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHNwZWNpZmllcyBob3cgdG8gaW1wbGVtZW50IHtAbGluayAjZ2V0Q2hpbGRyZW59IGFuZCBpcyB1c2VkIHRvIGRlZHVjZSBhbiBhcHByb3ByaWF0ZSBmZWF0dXJlIGZvciBhbgorCSAqIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuZWRpdC5jb21tYW5kLkFkZENvbW1hbmR9LCB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmVkaXQuY29tbWFuZC5SZW1vdmVDb21tYW5kfSBvcgorCSAqIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuZWRpdC5jb21tYW5kLk1vdmVDb21tYW5kfSBpbiB7QGxpbmsgI2NyZWF0ZUNvbW1hbmR9LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBDb2xsZWN0aW9uPD8gZXh0ZW5kcyBFU3RydWN0dXJhbEZlYXR1cmU+IGdldENoaWxkcmVuRmVhdHVyZXMoT2JqZWN0IG9iamVjdCkgeworCQlpZiAoY2hpbGRyZW5GZWF0dXJlcyA9PSBudWxsKSB7CisJCQlzdXBlci5nZXRDaGlsZHJlbkZlYXR1cmVzKG9iamVjdCk7CisJCQljaGlsZHJlbkZlYXR1cmVzLmFkZChTdGFuZGFyZFBhY2thZ2UuTGl0ZXJhbHMuREVNT0dSQVBISUNfUE9QVUxBVElPTl9NT0RFTF9fUE9QVUxBVElPTl9HUk9VUFMpOworCQl9CisJCXJldHVybiBjaGlsZHJlbkZlYXR1cmVzOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCBFU3RydWN0dXJhbEZlYXR1cmUgZ2V0Q2hpbGRGZWF0dXJlKE9iamVjdCBvYmplY3QsIE9iamVjdCBjaGlsZCkgeworCQkvLyBDaGVjayB0aGUgdHlwZSBvZiB0aGUgc3BlY2lmaWVkIGNoaWxkIG9iamVjdCBhbmQgcmV0dXJuIHRoZSBwcm9wZXIgZmVhdHVyZSB0byB1c2UgZm9yCisJCS8vIGFkZGluZyAoc2VlIHtAbGluayBBZGRDb21tYW5kfSkgaXQgYXMgYSBjaGlsZC4KKworCQlyZXR1cm4gc3VwZXIuZ2V0Q2hpbGRGZWF0dXJlKG9iamVjdCwgY2hpbGQpOworCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyBEZW1vZ3JhcGhpY1BvcHVsYXRpb25Nb2RlbC5naWYuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBPYmplY3QgZ2V0SW1hZ2UoT2JqZWN0IG9iamVjdCkgeworCQlyZXR1cm4gb3ZlcmxheUltYWdlKG9iamVjdCwgZ2V0UmVzb3VyY2VMb2NhdG9yKCkuZ2V0SW1hZ2UoImZ1bGwvY3VzdG9tMTYvRGVtb2dyYXBoaWNQb3B1bGF0aW9uTW9kZWwiKSk7CisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIHRoZSBsYWJlbCB0ZXh0IGZvciB0aGUgYWRhcHRlZCBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIFN0cmluZyBnZXRUZXh0KE9iamVjdCBvYmplY3QpIHsKKwkJcmV0dXJuIHN1cGVyLmdldFRleHQob2JqZWN0KTsKKwl9CisJCisJLyoqCisJICogVGhpcyByZXR1cm5zIHRoZSBsYWJlbCB0ZXh0IGZvciB0aGUgYWRhcHRlZCBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgU3RyaW5nIGdldFRleHRHZW4oT2JqZWN0IG9iamVjdCkgeworCQlTdHJpbmcgbGFiZWwgPSAoKERlbW9ncmFwaGljUG9wdWxhdGlvbk1vZGVsKW9iamVjdCkuZ2V0TmFtZSgpOworCQlyZXR1cm4gbGFiZWwgPT0gbnVsbCB8fCBsYWJlbC5sZW5ndGgoKSA9PSAwID8KKwkJCWdldFN0cmluZygiX1VJX0RlbW9ncmFwaGljUG9wdWxhdGlvbk1vZGVsX3R5cGUiKSA6CisJCQlnZXRTdHJpbmcoIl9VSV9EZW1vZ3JhcGhpY1BvcHVsYXRpb25Nb2RlbF90eXBlIikgKyAiICIgKyBsYWJlbDsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGhhbmRsZXMgbW9kZWwgbm90aWZpY2F0aW9ucyBieSBjYWxsaW5nIHtAbGluayAjdXBkYXRlQ2hpbGRyZW59IHRvIHVwZGF0ZSBhbnkgY2FjaGVkCisJICogY2hpbGRyZW4gYW5kIGJ5IGNyZWF0aW5nIGEgdmlld2VyIG5vdGlmaWNhdGlvbiwgd2hpY2ggaXQgcGFzc2VzIHRvIHtAbGluayAjZmlyZU5vdGlmeUNoYW5nZWR9LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIG5vdGlmeUNoYW5nZWQoTm90aWZpY2F0aW9uIG5vdGlmaWNhdGlvbikgeworCQl1cGRhdGVDaGlsZHJlbihub3RpZmljYXRpb24pOworCisJCXN3aXRjaCAobm90aWZpY2F0aW9uLmdldEZlYXR1cmVJRChEZW1vZ3JhcGhpY1BvcHVsYXRpb25Nb2RlbC5jbGFzcykpIHsKKwkJCWNhc2UgU3RhbmRhcmRQYWNrYWdlLkRFTU9HUkFQSElDX1BPUFVMQVRJT05fTU9ERUxfX1BPUFVMQVRJT05fR1JPVVBTOgorCQkJCWZpcmVOb3RpZnlDaGFuZ2VkKG5ldyBWaWV3ZXJOb3RpZmljYXRpb24obm90aWZpY2F0aW9uLCBub3RpZmljYXRpb24uZ2V0Tm90aWZpZXIoKSwgdHJ1ZSwgZmFsc2UpKTsKKwkJCQlyZXR1cm47CisJCX0KKwkJc3VwZXIubm90aWZ5Q2hhbmdlZChub3RpZmljYXRpb24pOworCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmVkaXQuY29tbWFuZC5Db21tYW5kUGFyYW1ldGVyfXMgZGVzY3JpYmluZyB0aGUgY2hpbGRyZW4KKwkgKiB0aGF0IGNhbiBiZSBjcmVhdGVkIHVuZGVyIHRoaXMgb2JqZWN0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIGNvbGxlY3ROZXdDaGlsZERlc2NyaXB0b3JzKENvbGxlY3Rpb248T2JqZWN0PiBuZXdDaGlsZERlc2NyaXB0b3JzLCBPYmplY3Qgb2JqZWN0KSB7CisJCXN1cGVyLmNvbGxlY3ROZXdDaGlsZERlc2NyaXB0b3JzKG5ld0NoaWxkRGVzY3JpcHRvcnMsIG9iamVjdCk7CisJfQorCit9CmRpZmYgLS1naXQgYS9tb2RlbHMvcG9wdWxhdGlvbnMvb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3BvcHVsYXRpb25tb2RlbHMvc3RhbmRhcmQvcHJvdmlkZXIvRWFydGhTY2llbmNlUG9wdWxhdGlvbkluaXRpYWxpemVySXRlbVByb3ZpZGVyLmphdmEgYi9tb2RlbHMvcG9wdWxhdGlvbnMvb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3BvcHVsYXRpb25tb2RlbHMvc3RhbmRhcmQvcHJvdmlkZXIvRWFydGhTY2llbmNlUG9wdWxhdGlvbkluaXRpYWxpemVySXRlbVByb3ZpZGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGRkN2MxOQotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9wb3B1bGF0aW9ucy9vcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vcG9wdWxhdGlvbm1vZGVscy9zdGFuZGFyZC9wcm92aWRlci9FYXJ0aFNjaWVuY2VQb3B1bGF0aW9uSW5pdGlhbGl6ZXJJdGVtUHJvdmlkZXIuamF2YQpAQCAtMCwwICsxLDEwOCBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQucHJvdmlkZXI7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIAorICogQ29weXJpZ2h0IChjKSAyMDExIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiAKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdCAKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sIAorICogCisgKiBDb250cmlidXRvcnM6IAorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiAKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LkFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuVVJJOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklFZGl0aW5nRG9tYWluSXRlbVByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtTGFiZWxQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbVByb3BlcnR5RGVzY3JpcHRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbVByb3BlcnR5U291cmNlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklTdHJ1Y3R1cmVkSXRlbUNvbnRlbnRQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JVHJlZUl0ZW1Db250ZW50UHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLkVhcnRoU2NpZW5jZVBvcHVsYXRpb25Jbml0aWFsaXplcjsKKworLyoqCisgKiBUaGlzIGlzIHRoZSBpdGVtIHByb3ZpZGVyIGFkYXB0ZXIgZm9yIGEge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5FYXJ0aFNjaWVuY2VQb3B1bGF0aW9uSW5pdGlhbGl6ZXJ9IG9iamVjdC4KKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIEVhcnRoU2NpZW5jZVBvcHVsYXRpb25Jbml0aWFsaXplckl0ZW1Qcm92aWRlcgorCWV4dGVuZHMgUG9wdWxhdGlvbkluaXRpYWxpemVySXRlbVByb3ZpZGVyCisJaW1wbGVtZW50cworCQlJRWRpdGluZ0RvbWFpbkl0ZW1Qcm92aWRlciwKKwkJSVN0cnVjdHVyZWRJdGVtQ29udGVudFByb3ZpZGVyLAorCQlJVHJlZUl0ZW1Db250ZW50UHJvdmlkZXIsCisJCUlJdGVtTGFiZWxQcm92aWRlciwKKwkJSUl0ZW1Qcm9wZXJ0eVNvdXJjZSB7CisJLyoqCisJICogVGhpcyBjb25zdHJ1Y3RzIGFuIGluc3RhbmNlIGZyb20gYSBmYWN0b3J5IGFuZCBhIG5vdGlmaWVyLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFYXJ0aFNjaWVuY2VQb3B1bGF0aW9uSW5pdGlhbGl6ZXJJdGVtUHJvdmlkZXIoQWRhcHRlckZhY3RvcnkgYWRhcHRlckZhY3RvcnkpIHsKKwkJc3VwZXIoYWRhcHRlckZhY3RvcnkpOworCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyB0aGUgcHJvcGVydHkgZGVzY3JpcHRvcnMgZm9yIHRoZSBhZGFwdGVkIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBMaXN0PElJdGVtUHJvcGVydHlEZXNjcmlwdG9yPiBnZXRQcm9wZXJ0eURlc2NyaXB0b3JzKE9iamVjdCBvYmplY3QpIHsKKwkJaWYgKGl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzID09IG51bGwpIHsKKwkJCXN1cGVyLmdldFByb3BlcnR5RGVzY3JpcHRvcnMob2JqZWN0KTsKKworCQl9CisJCXJldHVybiBpdGVtUHJvcGVydHlEZXNjcmlwdG9yczsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgdGhlIGxhYmVsIHRleHQgZm9yIHRoZSBhZGFwdGVkIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBTdHJpbmcgZ2V0VGV4dChPYmplY3Qgb2JqZWN0KSB7CisJCVVSSSBsYWJlbFZhbHVlID0gKChFYXJ0aFNjaWVuY2VQb3B1bGF0aW9uSW5pdGlhbGl6ZXIpb2JqZWN0KS5nZXRVUkkoKTsKKwkJU3RyaW5nIGxhYmVsID0gbGFiZWxWYWx1ZSA9PSBudWxsID8gbnVsbCA6IGxhYmVsVmFsdWUudG9TdHJpbmcoKTsKKwkJcmV0dXJuIGxhYmVsID09IG51bGwgfHwgbGFiZWwubGVuZ3RoKCkgPT0gMCA/CisJCQlnZXRTdHJpbmcoIl9VSV9FYXJ0aFNjaWVuY2VQb3B1bGF0aW9uSW5pdGlhbGl6ZXJfdHlwZSIpIDoKKwkJCWdldFN0cmluZygiX1VJX0VhcnRoU2NpZW5jZVBvcHVsYXRpb25Jbml0aWFsaXplcl90eXBlIikgKyAiICIgKyBsYWJlbDsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGhhbmRsZXMgbW9kZWwgbm90aWZpY2F0aW9ucyBieSBjYWxsaW5nIHtAbGluayAjdXBkYXRlQ2hpbGRyZW59IHRvIHVwZGF0ZSBhbnkgY2FjaGVkCisJICogY2hpbGRyZW4gYW5kIGJ5IGNyZWF0aW5nIGEgdmlld2VyIG5vdGlmaWNhdGlvbiwgd2hpY2ggaXQgcGFzc2VzIHRvIHtAbGluayAjZmlyZU5vdGlmeUNoYW5nZWR9LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIG5vdGlmeUNoYW5nZWQoTm90aWZpY2F0aW9uIG5vdGlmaWNhdGlvbikgeworCQl1cGRhdGVDaGlsZHJlbihub3RpZmljYXRpb24pOworCQlzdXBlci5ub3RpZnlDaGFuZ2VkKG5vdGlmaWNhdGlvbik7CisJfQorCisJLyoqCisJICogVGhpcyBhZGRzIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuZWRpdC5jb21tYW5kLkNvbW1hbmRQYXJhbWV0ZXJ9cyBkZXNjcmliaW5nIHRoZSBjaGlsZHJlbgorCSAqIHRoYXQgY2FuIGJlIGNyZWF0ZWQgdW5kZXIgdGhpcyBvYmplY3QuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgY29sbGVjdE5ld0NoaWxkRGVzY3JpcHRvcnMoQ29sbGVjdGlvbjxPYmplY3Q+IG5ld0NoaWxkRGVzY3JpcHRvcnMsIE9iamVjdCBvYmplY3QpIHsKKwkJc3VwZXIuY29sbGVjdE5ld0NoaWxkRGVzY3JpcHRvcnMobmV3Q2hpbGREZXNjcmlwdG9ycywgb2JqZWN0KTsKKwl9CisKK30KZGlmZiAtLWdpdCBhL21vZGVscy9wb3B1bGF0aW9ucy9vcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vcG9wdWxhdGlvbm1vZGVscy9zdGFuZGFyZC9wcm92aWRlci9Nb3NxdWl0b1BvcHVsYXRpb25Nb2RlbEl0ZW1Qcm92aWRlci5qYXZhIGIvbW9kZWxzL3BvcHVsYXRpb25zL29yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9wb3B1bGF0aW9ubW9kZWxzL3N0YW5kYXJkL3Byb3ZpZGVyL01vc3F1aXRvUG9wdWxhdGlvbk1vZGVsSXRlbVByb3ZpZGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzMwNjJmZQotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9wb3B1bGF0aW9ucy9vcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vcG9wdWxhdGlvbm1vZGVscy9zdGFuZGFyZC9wcm92aWRlci9Nb3NxdWl0b1BvcHVsYXRpb25Nb2RlbEl0ZW1Qcm92aWRlci5qYXZhCkBAIC0wLDAgKzEsMjIyIEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5wcm92aWRlcjsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogCisgKiBDb3B5cmlnaHQgKGMpIDIwMTEgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuIAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyAKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0IAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwgCisgKiAKKyAqIENvbnRyaWJ1dG9yczogCisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOworaW1wb3J0IGphdmEudXRpbC5MaXN0OworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkNvbXBvc2VhYmxlQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUVkaXRpbmdEb21haW5JdGVtUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1MYWJlbFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtUHJvcGVydHlEZXNjcmlwdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtUHJvcGVydHlTb3VyY2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVN0cnVjdHVyZWRJdGVtQ29udGVudFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklUcmVlSXRlbUNvbnRlbnRQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JdGVtUHJvcGVydHlEZXNjcmlwdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLlZpZXdlck5vdGlmaWNhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuTW9zcXVpdG9Qb3B1bGF0aW9uTW9kZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkUGFja2FnZTsKKworLyoqCisgKiBUaGlzIGlzIHRoZSBpdGVtIHByb3ZpZGVyIGFkYXB0ZXIgZm9yIGEge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5Nb3NxdWl0b1BvcHVsYXRpb25Nb2RlbH0gb2JqZWN0LgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgTW9zcXVpdG9Qb3B1bGF0aW9uTW9kZWxJdGVtUHJvdmlkZXIKKwlleHRlbmRzIFBvcHVsYXRpb25Nb2RlbEl0ZW1Qcm92aWRlcgorCWltcGxlbWVudHMKKwkJSUVkaXRpbmdEb21haW5JdGVtUHJvdmlkZXIsCisJCUlTdHJ1Y3R1cmVkSXRlbUNvbnRlbnRQcm92aWRlciwKKwkJSVRyZWVJdGVtQ29udGVudFByb3ZpZGVyLAorCQlJSXRlbUxhYmVsUHJvdmlkZXIsCisJCUlJdGVtUHJvcGVydHlTb3VyY2UgeworCS8qKgorCSAqIFRoaXMgY29uc3RydWN0cyBhbiBpbnN0YW5jZSBmcm9tIGEgZmFjdG9yeSBhbmQgYSBub3RpZmllci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgTW9zcXVpdG9Qb3B1bGF0aW9uTW9kZWxJdGVtUHJvdmlkZXIoQWRhcHRlckZhY3RvcnkgYWRhcHRlckZhY3RvcnkpIHsKKwkJc3VwZXIoYWRhcHRlckZhY3RvcnkpOworCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyB0aGUgcHJvcGVydHkgZGVzY3JpcHRvcnMgZm9yIHRoZSBhZGFwdGVkIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBMaXN0PElJdGVtUHJvcGVydHlEZXNjcmlwdG9yPiBnZXRQcm9wZXJ0eURlc2NyaXB0b3JzKE9iamVjdCBvYmplY3QpIHsKKwkJaWYgKGl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzID09IG51bGwpIHsKKwkJCXN1cGVyLmdldFByb3BlcnR5RGVzY3JpcHRvcnMob2JqZWN0KTsKKworCQkJYWRkU2NhbGluZ0ZhY3RvclByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QpOworCQkJYWRkVGltZVBlcmlvZFByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QpOworCQkJYWRkTW9ydGFsaXR5UmF0ZVByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QpOworCQkJYWRkSG9zdFByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QpOworCQl9CisJCXJldHVybiBpdGVtUHJvcGVydHlEZXNjcmlwdG9yczsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFkZHMgYSBwcm9wZXJ0eSBkZXNjcmlwdG9yIGZvciB0aGUgU2NhbGluZyBGYWN0b3IgZmVhdHVyZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBhZGRTY2FsaW5nRmFjdG9yUHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdCBvYmplY3QpIHsKKwkJaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMuYWRkCisJCQkoY3JlYXRlSXRlbVByb3BlcnR5RGVzY3JpcHRvcgorCQkJCSgoKENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnkpYWRhcHRlckZhY3RvcnkpLmdldFJvb3RBZGFwdGVyRmFjdG9yeSgpLAorCQkJCSBnZXRSZXNvdXJjZUxvY2F0b3IoKSwKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfTW9zcXVpdG9Qb3B1bGF0aW9uTW9kZWxfc2NhbGluZ0ZhY3Rvcl9mZWF0dXJlIiksCisJCQkJIGdldFN0cmluZygiX1VJX1Byb3BlcnR5RGVzY3JpcHRvcl9kZXNjcmlwdGlvbiIsICJfVUlfTW9zcXVpdG9Qb3B1bGF0aW9uTW9kZWxfc2NhbGluZ0ZhY3Rvcl9mZWF0dXJlIiwgIl9VSV9Nb3NxdWl0b1BvcHVsYXRpb25Nb2RlbF90eXBlIiksCisJCQkJIFN0YW5kYXJkUGFja2FnZS5MaXRlcmFscy5NT1NRVUlUT19QT1BVTEFUSU9OX01PREVMX19TQ0FMSU5HX0ZBQ1RPUiwKKwkJCQkgdHJ1ZSwKKwkJCQkgZmFsc2UsCisJCQkJIGZhbHNlLAorCQkJCSBJdGVtUHJvcGVydHlEZXNjcmlwdG9yLlJFQUxfVkFMVUVfSU1BR0UsCisJCQkJIG51bGwsCisJCQkJIG51bGwpKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFkZHMgYSBwcm9wZXJ0eSBkZXNjcmlwdG9yIGZvciB0aGUgVGltZSBQZXJpb2QgZmVhdHVyZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBhZGRUaW1lUGVyaW9kUHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdCBvYmplY3QpIHsKKwkJaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMuYWRkCisJCQkoY3JlYXRlSXRlbVByb3BlcnR5RGVzY3JpcHRvcgorCQkJCSgoKENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnkpYWRhcHRlckZhY3RvcnkpLmdldFJvb3RBZGFwdGVyRmFjdG9yeSgpLAorCQkJCSBnZXRSZXNvdXJjZUxvY2F0b3IoKSwKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfTW9zcXVpdG9Qb3B1bGF0aW9uTW9kZWxfdGltZVBlcmlvZF9mZWF0dXJlIiksCisJCQkJIGdldFN0cmluZygiX1VJX1Byb3BlcnR5RGVzY3JpcHRvcl9kZXNjcmlwdGlvbiIsICJfVUlfTW9zcXVpdG9Qb3B1bGF0aW9uTW9kZWxfdGltZVBlcmlvZF9mZWF0dXJlIiwgIl9VSV9Nb3NxdWl0b1BvcHVsYXRpb25Nb2RlbF90eXBlIiksCisJCQkJIFN0YW5kYXJkUGFja2FnZS5MaXRlcmFscy5NT1NRVUlUT19QT1BVTEFUSU9OX01PREVMX19USU1FX1BFUklPRCwKKwkJCQkgdHJ1ZSwKKwkJCQkgZmFsc2UsCisJCQkJIGZhbHNlLAorCQkJCSBJdGVtUHJvcGVydHlEZXNjcmlwdG9yLklOVEVHUkFMX1ZBTFVFX0lNQUdFLAorCQkJCSBudWxsLAorCQkJCSBudWxsKSk7CisJfQorCisJLyoqCisJICogVGhpcyBhZGRzIGEgcHJvcGVydHkgZGVzY3JpcHRvciBmb3IgdGhlIE1vcnRhbGl0eSBSYXRlIGZlYXR1cmUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgYWRkTW9ydGFsaXR5UmF0ZVByb3BlcnR5RGVzY3JpcHRvcihPYmplY3Qgb2JqZWN0KSB7CisJCWl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzLmFkZAorCQkJKGNyZWF0ZUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IKKwkJCQkoKChDb21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5KWFkYXB0ZXJGYWN0b3J5KS5nZXRSb290QWRhcHRlckZhY3RvcnkoKSwKKwkJCQkgZ2V0UmVzb3VyY2VMb2NhdG9yKCksCisJCQkJIGdldFN0cmluZygiX1VJX01vc3F1aXRvUG9wdWxhdGlvbk1vZGVsX21vcnRhbGl0eVJhdGVfZmVhdHVyZSIpLAorCQkJCSBnZXRTdHJpbmcoIl9VSV9Qcm9wZXJ0eURlc2NyaXB0b3JfZGVzY3JpcHRpb24iLCAiX1VJX01vc3F1aXRvUG9wdWxhdGlvbk1vZGVsX21vcnRhbGl0eVJhdGVfZmVhdHVyZSIsICJfVUlfTW9zcXVpdG9Qb3B1bGF0aW9uTW9kZWxfdHlwZSIpLAorCQkJCSBTdGFuZGFyZFBhY2thZ2UuTGl0ZXJhbHMuTU9TUVVJVE9fUE9QVUxBVElPTl9NT0RFTF9fTU9SVEFMSVRZX1JBVEUsCisJCQkJIHRydWUsCisJCQkJIGZhbHNlLAorCQkJCSBmYWxzZSwKKwkJCQkgSXRlbVByb3BlcnR5RGVzY3JpcHRvci5SRUFMX1ZBTFVFX0lNQUdFLAorCQkJCSBudWxsLAorCQkJCSBudWxsKSk7CisJfQorCisJLyoqCisJICogVGhpcyBhZGRzIGEgcHJvcGVydHkgZGVzY3JpcHRvciBmb3IgdGhlIEhvc3QgZmVhdHVyZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBhZGRIb3N0UHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdCBvYmplY3QpIHsKKwkJaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMuYWRkCisJCQkoY3JlYXRlSXRlbVByb3BlcnR5RGVzY3JpcHRvcgorCQkJCSgoKENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnkpYWRhcHRlckZhY3RvcnkpLmdldFJvb3RBZGFwdGVyRmFjdG9yeSgpLAorCQkJCSBnZXRSZXNvdXJjZUxvY2F0b3IoKSwKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfTW9zcXVpdG9Qb3B1bGF0aW9uTW9kZWxfaG9zdF9mZWF0dXJlIiksCisJCQkJIGdldFN0cmluZygiX1VJX1Byb3BlcnR5RGVzY3JpcHRvcl9kZXNjcmlwdGlvbiIsICJfVUlfTW9zcXVpdG9Qb3B1bGF0aW9uTW9kZWxfaG9zdF9mZWF0dXJlIiwgIl9VSV9Nb3NxdWl0b1BvcHVsYXRpb25Nb2RlbF90eXBlIiksCisJCQkJIFN0YW5kYXJkUGFja2FnZS5MaXRlcmFscy5NT1NRVUlUT19QT1BVTEFUSU9OX01PREVMX19IT1NULAorCQkJCSB0cnVlLAorCQkJCSBmYWxzZSwKKwkJCQkgZmFsc2UsCisJCQkJIEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IuR0VORVJJQ19WQUxVRV9JTUFHRSwKKwkJCQkgbnVsbCwKKwkJCQkgbnVsbCkpOworCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyBNb3NxdWl0b1BvcHVsYXRpb25Nb2RlbC5naWYuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBPYmplY3QgZ2V0SW1hZ2UoT2JqZWN0IG9iamVjdCkgeworCQlyZXR1cm4gb3ZlcmxheUltYWdlKG9iamVjdCwgZ2V0UmVzb3VyY2VMb2NhdG9yKCkuZ2V0SW1hZ2UoImZ1bGwvY3VzdG9tMTYvTW9zcXVpdG9Qb3B1bGF0aW9uTW9kZWwiKSk7CisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIHRoZSBsYWJlbCB0ZXh0IGZvciB0aGUgYWRhcHRlZCBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIFN0cmluZyBnZXRUZXh0KE9iamVjdCBvYmplY3QpIHsKKwkJU3RyaW5nIGxhYmVsID0gKChNb3NxdWl0b1BvcHVsYXRpb25Nb2RlbClvYmplY3QpLmdldFVSSSgpLmxhc3RTZWdtZW50KCk7CisJCXJldHVybiBsYWJlbCA9PSBudWxsIHx8IGxhYmVsLmxlbmd0aCgpID09IDAgPworCQkJZ2V0U3RyaW5nKCJfVUlfTW9zcXVpdG9Qb3B1bGF0aW9uTW9kZWxfdHlwZSIpIDoKKwkJCWxhYmVsOworCX0KKworCS8qKgorCSAqIFRoaXMgaGFuZGxlcyBtb2RlbCBub3RpZmljYXRpb25zIGJ5IGNhbGxpbmcge0BsaW5rICN1cGRhdGVDaGlsZHJlbn0gdG8gdXBkYXRlIGFueSBjYWNoZWQKKwkgKiBjaGlsZHJlbiBhbmQgYnkgY3JlYXRpbmcgYSB2aWV3ZXIgbm90aWZpY2F0aW9uLCB3aGljaCBpdCBwYXNzZXMgdG8ge0BsaW5rICNmaXJlTm90aWZ5Q2hhbmdlZH0uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgbm90aWZ5Q2hhbmdlZChOb3RpZmljYXRpb24gbm90aWZpY2F0aW9uKSB7CisJCXVwZGF0ZUNoaWxkcmVuKG5vdGlmaWNhdGlvbik7CisKKwkJc3dpdGNoIChub3RpZmljYXRpb24uZ2V0RmVhdHVyZUlEKE1vc3F1aXRvUG9wdWxhdGlvbk1vZGVsLmNsYXNzKSkgeworCQkJY2FzZSBTdGFuZGFyZFBhY2thZ2UuTU9TUVVJVE9fUE9QVUxBVElPTl9NT0RFTF9fU0NBTElOR19GQUNUT1I6CisJCQljYXNlIFN0YW5kYXJkUGFja2FnZS5NT1NRVUlUT19QT1BVTEFUSU9OX01PREVMX19USU1FX1BFUklPRDoKKwkJCWNhc2UgU3RhbmRhcmRQYWNrYWdlLk1PU1FVSVRPX1BPUFVMQVRJT05fTU9ERUxfX01PUlRBTElUWV9SQVRFOgorCQkJY2FzZSBTdGFuZGFyZFBhY2thZ2UuTU9TUVVJVE9fUE9QVUxBVElPTl9NT0RFTF9fSE9TVDoKKwkJCQlmaXJlTm90aWZ5Q2hhbmdlZChuZXcgVmlld2VyTm90aWZpY2F0aW9uKG5vdGlmaWNhdGlvbiwgbm90aWZpY2F0aW9uLmdldE5vdGlmaWVyKCksIGZhbHNlLCB0cnVlKSk7CisJCQkJcmV0dXJuOworCQl9CisJCXN1cGVyLm5vdGlmeUNoYW5nZWQobm90aWZpY2F0aW9uKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFkZHMge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lZGl0LmNvbW1hbmQuQ29tbWFuZFBhcmFtZXRlcn1zIGRlc2NyaWJpbmcgdGhlIGNoaWxkcmVuCisJICogdGhhdCBjYW4gYmUgY3JlYXRlZCB1bmRlciB0aGlzIG9iamVjdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgdm9pZCBjb2xsZWN0TmV3Q2hpbGREZXNjcmlwdG9ycyhDb2xsZWN0aW9uPE9iamVjdD4gbmV3Q2hpbGREZXNjcmlwdG9ycywgT2JqZWN0IG9iamVjdCkgeworCQlzdXBlci5jb2xsZWN0TmV3Q2hpbGREZXNjcmlwdG9ycyhuZXdDaGlsZERlc2NyaXB0b3JzLCBvYmplY3QpOworCX0KKworfQpkaWZmIC0tZ2l0IGEvbW9kZWxzL3BvcHVsYXRpb25zL29yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9wb3B1bGF0aW9ubW9kZWxzL3N0YW5kYXJkL3Byb3ZpZGVyL1BvcHVsYXRpb25Hcm91cEl0ZW1Qcm92aWRlci5qYXZhIGIvbW9kZWxzL3BvcHVsYXRpb25zL29yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9wb3B1bGF0aW9ubW9kZWxzL3N0YW5kYXJkL3Byb3ZpZGVyL1BvcHVsYXRpb25Hcm91cEl0ZW1Qcm92aWRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE1Zjg3MzAKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvcG9wdWxhdGlvbnMvb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3BvcHVsYXRpb25tb2RlbHMvc3RhbmRhcmQvcHJvdmlkZXIvUG9wdWxhdGlvbkdyb3VwSXRlbVByb3ZpZGVyLmphdmEKQEAgLTAsMCArMSwxODcgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLnByb3ZpZGVyOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDEwIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCitpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5BZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlJlc291cmNlTG9jYXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5Db21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklFZGl0aW5nRG9tYWluSXRlbVByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtTGFiZWxQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbVByb3BlcnR5RGVzY3JpcHRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbVByb3BlcnR5U291cmNlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklTdHJ1Y3R1cmVkSXRlbUNvbnRlbnRQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JVHJlZUl0ZW1Db250ZW50UHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSXRlbVByb3BlcnR5RGVzY3JpcHRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JdGVtUHJvdmlkZXJBZGFwdGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLlZpZXdlck5vdGlmaWNhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuUG9wdWxhdGlvbkdyb3VwOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZFBhY2thZ2U7CisKKy8qKgorICogVGhpcyBpcyB0aGUgaXRlbSBwcm92aWRlciBhZGFwdGVyIGZvciBhIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuUG9wdWxhdGlvbkdyb3VwfSBvYmplY3QuCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBQb3B1bGF0aW9uR3JvdXBJdGVtUHJvdmlkZXIKKwlleHRlbmRzIEl0ZW1Qcm92aWRlckFkYXB0ZXIKKwlpbXBsZW1lbnRzCisJCUlFZGl0aW5nRG9tYWluSXRlbVByb3ZpZGVyLAorCQlJU3RydWN0dXJlZEl0ZW1Db250ZW50UHJvdmlkZXIsCisJCUlUcmVlSXRlbUNvbnRlbnRQcm92aWRlciwKKwkJSUl0ZW1MYWJlbFByb3ZpZGVyLAorCQlJSXRlbVByb3BlcnR5U291cmNlIHsKKwkvKioKKwkgKiBUaGlzIGNvbnN0cnVjdHMgYW4gaW5zdGFuY2UgZnJvbSBhIGZhY3RvcnkgYW5kIGEgbm90aWZpZXIuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFBvcHVsYXRpb25Hcm91cEl0ZW1Qcm92aWRlcihBZGFwdGVyRmFjdG9yeSBhZGFwdGVyRmFjdG9yeSkgeworCQlzdXBlcihhZGFwdGVyRmFjdG9yeSk7CisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIHRoZSBwcm9wZXJ0eSBkZXNjcmlwdG9ycyBmb3IgdGhlIGFkYXB0ZWQgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIExpc3Q8SUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I+IGdldFByb3BlcnR5RGVzY3JpcHRvcnMoT2JqZWN0IG9iamVjdCkgeworCQlpZiAoaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMgPT0gbnVsbCkgeworCQkJc3VwZXIuZ2V0UHJvcGVydHlEZXNjcmlwdG9ycyhvYmplY3QpOworCisJCQlhZGRJZGVudGlmaWVyUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCk7CisJCQlhZGRGcmFjdGlvblByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QpOworCQl9CisJCXJldHVybiBpdGVtUHJvcGVydHlEZXNjcmlwdG9yczsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFkZHMgYSBwcm9wZXJ0eSBkZXNjcmlwdG9yIGZvciB0aGUgSWRlbnRpZmllciBmZWF0dXJlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIGFkZElkZW50aWZpZXJQcm9wZXJ0eURlc2NyaXB0b3IoT2JqZWN0IG9iamVjdCkgeworCQlpdGVtUHJvcGVydHlEZXNjcmlwdG9ycy5hZGQKKwkJCShjcmVhdGVJdGVtUHJvcGVydHlEZXNjcmlwdG9yCisJCQkJKCgoQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSlhZGFwdGVyRmFjdG9yeSkuZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCksCisJCQkJIGdldFJlc291cmNlTG9jYXRvcigpLAorCQkJCSBnZXRTdHJpbmcoIl9VSV9Qb3B1bGF0aW9uR3JvdXBfaWRlbnRpZmllcl9mZWF0dXJlIiksCisJCQkJIGdldFN0cmluZygiX1VJX1Byb3BlcnR5RGVzY3JpcHRvcl9kZXNjcmlwdGlvbiIsICJfVUlfUG9wdWxhdGlvbkdyb3VwX2lkZW50aWZpZXJfZmVhdHVyZSIsICJfVUlfUG9wdWxhdGlvbkdyb3VwX3R5cGUiKSwKKwkJCQkgU3RhbmRhcmRQYWNrYWdlLkxpdGVyYWxzLlBPUFVMQVRJT05fR1JPVVBfX0lERU5USUZJRVIsCisJCQkJIHRydWUsCisJCQkJIGZhbHNlLAorCQkJCSBmYWxzZSwKKwkJCQkgSXRlbVByb3BlcnR5RGVzY3JpcHRvci5HRU5FUklDX1ZBTFVFX0lNQUdFLAorCQkJCSBudWxsLAorCQkJCSBudWxsKSk7CisJfQorCisJLyoqCisJICogVGhpcyBhZGRzIGEgcHJvcGVydHkgZGVzY3JpcHRvciBmb3IgdGhlIEZyYWN0aW9uIGZlYXR1cmUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgYWRkRnJhY3Rpb25Qcm9wZXJ0eURlc2NyaXB0b3IoT2JqZWN0IG9iamVjdCkgeworCQlpdGVtUHJvcGVydHlEZXNjcmlwdG9ycy5hZGQKKwkJCShjcmVhdGVJdGVtUHJvcGVydHlEZXNjcmlwdG9yCisJCQkJKCgoQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSlhZGFwdGVyRmFjdG9yeSkuZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCksCisJCQkJIGdldFJlc291cmNlTG9jYXRvcigpLAorCQkJCSBnZXRTdHJpbmcoIl9VSV9Qb3B1bGF0aW9uR3JvdXBfZnJhY3Rpb25fZmVhdHVyZSIpLAorCQkJCSBnZXRTdHJpbmcoIl9VSV9Qcm9wZXJ0eURlc2NyaXB0b3JfZGVzY3JpcHRpb24iLCAiX1VJX1BvcHVsYXRpb25Hcm91cF9mcmFjdGlvbl9mZWF0dXJlIiwgIl9VSV9Qb3B1bGF0aW9uR3JvdXBfdHlwZSIpLAorCQkJCSBTdGFuZGFyZFBhY2thZ2UuTGl0ZXJhbHMuUE9QVUxBVElPTl9HUk9VUF9fRlJBQ1RJT04sCisJCQkJIHRydWUsCisJCQkJIGZhbHNlLAorCQkJCSBmYWxzZSwKKwkJCQkgSXRlbVByb3BlcnR5RGVzY3JpcHRvci5SRUFMX1ZBTFVFX0lNQUdFLAorCQkJCSBudWxsLAorCQkJCSBudWxsKSk7CisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIFBvcHVsYXRpb25Hcm91cC5naWYuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIE9iamVjdCBnZXRJbWFnZShPYmplY3Qgb2JqZWN0KSB7CisJCXJldHVybiBvdmVybGF5SW1hZ2Uob2JqZWN0LCBnZXRSZXNvdXJjZUxvY2F0b3IoKS5nZXRJbWFnZSgiZnVsbC9vYmoxNi9Qb3B1bGF0aW9uR3JvdXAiKSk7CisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIHRoZSBsYWJlbCB0ZXh0IGZvciB0aGUgYWRhcHRlZCBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgU3RyaW5nIGdldFRleHQoT2JqZWN0IG9iamVjdCkgeworCQlTdHJpbmcgbGFiZWwgPSAoKFBvcHVsYXRpb25Hcm91cClvYmplY3QpLmdldElkZW50aWZpZXIoKTsKKwkJcmV0dXJuIGxhYmVsID09IG51bGwgfHwgbGFiZWwubGVuZ3RoKCkgPT0gMCA/CisJCQlnZXRTdHJpbmcoIl9VSV9Qb3B1bGF0aW9uR3JvdXBfdHlwZSIpIDoKKwkJCWdldFN0cmluZygiX1VJX1BvcHVsYXRpb25Hcm91cF90eXBlIikgKyAiICIgKyBsYWJlbDsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGhhbmRsZXMgbW9kZWwgbm90aWZpY2F0aW9ucyBieSBjYWxsaW5nIHtAbGluayAjdXBkYXRlQ2hpbGRyZW59IHRvIHVwZGF0ZSBhbnkgY2FjaGVkCisJICogY2hpbGRyZW4gYW5kIGJ5IGNyZWF0aW5nIGEgdmlld2VyIG5vdGlmaWNhdGlvbiwgd2hpY2ggaXQgcGFzc2VzIHRvIHtAbGluayAjZmlyZU5vdGlmeUNoYW5nZWR9LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIG5vdGlmeUNoYW5nZWQoTm90aWZpY2F0aW9uIG5vdGlmaWNhdGlvbikgeworCQl1cGRhdGVDaGlsZHJlbihub3RpZmljYXRpb24pOworCisJCXN3aXRjaCAobm90aWZpY2F0aW9uLmdldEZlYXR1cmVJRChQb3B1bGF0aW9uR3JvdXAuY2xhc3MpKSB7CisJCQljYXNlIFN0YW5kYXJkUGFja2FnZS5QT1BVTEFUSU9OX0dST1VQX19JREVOVElGSUVSOgorCQkJY2FzZSBTdGFuZGFyZFBhY2thZ2UuUE9QVUxBVElPTl9HUk9VUF9fRlJBQ1RJT046CisJCQkJZmlyZU5vdGlmeUNoYW5nZWQobmV3IFZpZXdlck5vdGlmaWNhdGlvbihub3RpZmljYXRpb24sIG5vdGlmaWNhdGlvbi5nZXROb3RpZmllcigpLCBmYWxzZSwgdHJ1ZSkpOworCQkJCXJldHVybjsKKwkJfQorCQlzdXBlci5ub3RpZnlDaGFuZ2VkKG5vdGlmaWNhdGlvbik7CisJfQorCisJLyoqCisJICogVGhpcyBhZGRzIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuZWRpdC5jb21tYW5kLkNvbW1hbmRQYXJhbWV0ZXJ9cyBkZXNjcmliaW5nIHRoZSBjaGlsZHJlbgorCSAqIHRoYXQgY2FuIGJlIGNyZWF0ZWQgdW5kZXIgdGhpcyBvYmplY3QuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgY29sbGVjdE5ld0NoaWxkRGVzY3JpcHRvcnMoQ29sbGVjdGlvbjxPYmplY3Q+IG5ld0NoaWxkRGVzY3JpcHRvcnMsIE9iamVjdCBvYmplY3QpIHsKKwkJc3VwZXIuY29sbGVjdE5ld0NoaWxkRGVzY3JpcHRvcnMobmV3Q2hpbGREZXNjcmlwdG9ycywgb2JqZWN0KTsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm4gdGhlIHJlc291cmNlIGxvY2F0b3IgZm9yIHRoaXMgaXRlbSBwcm92aWRlcidzIHJlc291cmNlcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgUmVzb3VyY2VMb2NhdG9yIGdldFJlc291cmNlTG9jYXRvcigpIHsKKwkJcmV0dXJuIFN0YW5kYXJkRWRpdFBsdWdpbi5JTlNUQU5DRTsKKwl9CisKK30KZGlmZiAtLWdpdCBhL21vZGVscy9wb3B1bGF0aW9ucy9vcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vcG9wdWxhdGlvbm1vZGVscy9zdGFuZGFyZC9wcm92aWRlci9Qb3B1bGF0aW9uSW5pdGlhbGl6ZXJJdGVtUHJvdmlkZXIuamF2YSBiL21vZGVscy9wb3B1bGF0aW9ucy9vcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vcG9wdWxhdGlvbm1vZGVscy9zdGFuZGFyZC9wcm92aWRlci9Qb3B1bGF0aW9uSW5pdGlhbGl6ZXJJdGVtUHJvdmlkZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NmNmMzQ0Ci0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL3BvcHVsYXRpb25zL29yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9wb3B1bGF0aW9ubW9kZWxzL3N0YW5kYXJkL3Byb3ZpZGVyL1BvcHVsYXRpb25Jbml0aWFsaXplckl0ZW1Qcm92aWRlci5qYXZhCkBAIC0wLDAgKzEsMTg1IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5wcm92aWRlcjsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAxMCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOworaW1wb3J0IGphdmEudXRpbC5MaXN0OworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5SZXNvdXJjZUxvY2F0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlVSSTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5Db21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklFZGl0aW5nRG9tYWluSXRlbVByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtTGFiZWxQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbVByb3BlcnR5RGVzY3JpcHRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbVByb3BlcnR5U291cmNlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklTdHJ1Y3R1cmVkSXRlbUNvbnRlbnRQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JVHJlZUl0ZW1Db250ZW50UHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSXRlbVByb3BlcnR5RGVzY3JpcHRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5WaWV3ZXJOb3RpZmljYXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLnByb3ZpZGVyLk5vZGVEZWNvcmF0b3JJdGVtUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLlBvcHVsYXRpb25Jbml0aWFsaXplcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmRQYWNrYWdlOworCisvKioKKyAqIFRoaXMgaXMgdGhlIGl0ZW0gcHJvdmlkZXIgYWRhcHRlciBmb3IgYSB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLlBvcHVsYXRpb25Jbml0aWFsaXplcn0gb2JqZWN0LgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgUG9wdWxhdGlvbkluaXRpYWxpemVySXRlbVByb3ZpZGVyCisJZXh0ZW5kcyBOb2RlRGVjb3JhdG9ySXRlbVByb3ZpZGVyCisJaW1wbGVtZW50cworCQlJRWRpdGluZ0RvbWFpbkl0ZW1Qcm92aWRlciwKKwkJSVN0cnVjdHVyZWRJdGVtQ29udGVudFByb3ZpZGVyLAorCQlJVHJlZUl0ZW1Db250ZW50UHJvdmlkZXIsCisJCUlJdGVtTGFiZWxQcm92aWRlciwKKwkJSUl0ZW1Qcm9wZXJ0eVNvdXJjZSB7CisJLyoqCisJICogVGhpcyBjb25zdHJ1Y3RzIGFuIGluc3RhbmNlIGZyb20gYSBmYWN0b3J5IGFuZCBhIG5vdGlmaWVyLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBQb3B1bGF0aW9uSW5pdGlhbGl6ZXJJdGVtUHJvdmlkZXIoQWRhcHRlckZhY3RvcnkgYWRhcHRlckZhY3RvcnkpIHsKKwkJc3VwZXIoYWRhcHRlckZhY3RvcnkpOworCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyB0aGUgcHJvcGVydHkgZGVzY3JpcHRvcnMgZm9yIHRoZSBhZGFwdGVkIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBMaXN0PElJdGVtUHJvcGVydHlEZXNjcmlwdG9yPiBnZXRQcm9wZXJ0eURlc2NyaXB0b3JzKE9iamVjdCBvYmplY3QpIHsKKwkJaWYgKGl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzID09IG51bGwpIHsKKwkJCXN1cGVyLmdldFByb3BlcnR5RGVzY3JpcHRvcnMob2JqZWN0KTsKKworCQkJYWRkVGFyZ2V0SVNPS2V5UHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCk7CisJCQlhZGRQb3B1bGF0aW9uSWRlbnRpZmllclByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QpOworCQl9CisJCXJldHVybiBpdGVtUHJvcGVydHlEZXNjcmlwdG9yczsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFkZHMgYSBwcm9wZXJ0eSBkZXNjcmlwdG9yIGZvciB0aGUgVGFyZ2V0IElTTyBLZXkgZmVhdHVyZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBhZGRUYXJnZXRJU09LZXlQcm9wZXJ0eURlc2NyaXB0b3IoT2JqZWN0IG9iamVjdCkgeworCQlpdGVtUHJvcGVydHlEZXNjcmlwdG9ycy5hZGQKKwkJCShjcmVhdGVJdGVtUHJvcGVydHlEZXNjcmlwdG9yCisJCQkJKCgoQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSlhZGFwdGVyRmFjdG9yeSkuZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCksCisJCQkJIGdldFJlc291cmNlTG9jYXRvcigpLAorCQkJCSBnZXRTdHJpbmcoIl9VSV9Qb3B1bGF0aW9uSW5pdGlhbGl6ZXJfdGFyZ2V0SVNPS2V5X2ZlYXR1cmUiKSwKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfUHJvcGVydHlEZXNjcmlwdG9yX2Rlc2NyaXB0aW9uIiwgIl9VSV9Qb3B1bGF0aW9uSW5pdGlhbGl6ZXJfdGFyZ2V0SVNPS2V5X2ZlYXR1cmUiLCAiX1VJX1BvcHVsYXRpb25Jbml0aWFsaXplcl90eXBlIiksCisJCQkJIFN0YW5kYXJkUGFja2FnZS5MaXRlcmFscy5QT1BVTEFUSU9OX0lOSVRJQUxJWkVSX19UQVJHRVRfSVNPX0tFWSwKKwkJCQkgdHJ1ZSwKKwkJCQkgZmFsc2UsCisJCQkJIGZhbHNlLAorCQkJCSBJdGVtUHJvcGVydHlEZXNjcmlwdG9yLkdFTkVSSUNfVkFMVUVfSU1BR0UsCisJCQkJIG51bGwsCisJCQkJIG51bGwpKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFkZHMgYSBwcm9wZXJ0eSBkZXNjcmlwdG9yIGZvciB0aGUgUG9wdWxhdGlvbiBJZGVudGlmaWVyIGZlYXR1cmUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgYWRkUG9wdWxhdGlvbklkZW50aWZpZXJQcm9wZXJ0eURlc2NyaXB0b3IoT2JqZWN0IG9iamVjdCkgeworCQlpdGVtUHJvcGVydHlEZXNjcmlwdG9ycy5hZGQKKwkJCShjcmVhdGVJdGVtUHJvcGVydHlEZXNjcmlwdG9yCisJCQkJKCgoQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSlhZGFwdGVyRmFjdG9yeSkuZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCksCisJCQkJIGdldFJlc291cmNlTG9jYXRvcigpLAorCQkJCSBnZXRTdHJpbmcoIl9VSV9Qb3B1bGF0aW9uSW5pdGlhbGl6ZXJfcG9wdWxhdGlvbklkZW50aWZpZXJfZmVhdHVyZSIpLAorCQkJCSBnZXRTdHJpbmcoIl9VSV9Qcm9wZXJ0eURlc2NyaXB0b3JfZGVzY3JpcHRpb24iLCAiX1VJX1BvcHVsYXRpb25Jbml0aWFsaXplcl9wb3B1bGF0aW9uSWRlbnRpZmllcl9mZWF0dXJlIiwgIl9VSV9Qb3B1bGF0aW9uSW5pdGlhbGl6ZXJfdHlwZSIpLAorCQkJCSBTdGFuZGFyZFBhY2thZ2UuTGl0ZXJhbHMuUE9QVUxBVElPTl9JTklUSUFMSVpFUl9fUE9QVUxBVElPTl9JREVOVElGSUVSLAorCQkJCSB0cnVlLAorCQkJCSBmYWxzZSwKKwkJCQkgZmFsc2UsCisJCQkJIEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IuR0VORVJJQ19WQUxVRV9JTUFHRSwKKwkJCQkgbnVsbCwKKwkJCQkgbnVsbCkpOworCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyBQb3B1bGF0aW9uSW5pdGlhbGl6ZXIuZ2lmLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgT2JqZWN0IGdldEltYWdlKE9iamVjdCBvYmplY3QpIHsKKwkJcmV0dXJuIG92ZXJsYXlJbWFnZShvYmplY3QsIGdldFJlc291cmNlTG9jYXRvcigpLmdldEltYWdlKCJmdWxsL2N1c3RvbTE2L3BvcHVsYXRpb25pbml0aWFsaXplci5naWYiKSk7CisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIHRoZSBsYWJlbCB0ZXh0IGZvciB0aGUgYWRhcHRlZCBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIFN0cmluZyBnZXRUZXh0KE9iamVjdCBvYmplY3QpIHsKKwkJcmV0dXJuIHN1cGVyLmdldFRleHQob2JqZWN0KTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGhhbmRsZXMgbW9kZWwgbm90aWZpY2F0aW9ucyBieSBjYWxsaW5nIHtAbGluayAjdXBkYXRlQ2hpbGRyZW59IHRvIHVwZGF0ZSBhbnkgY2FjaGVkCisJICogY2hpbGRyZW4gYW5kIGJ5IGNyZWF0aW5nIGEgdmlld2VyIG5vdGlmaWNhdGlvbiwgd2hpY2ggaXQgcGFzc2VzIHRvIHtAbGluayAjZmlyZU5vdGlmeUNoYW5nZWR9LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIG5vdGlmeUNoYW5nZWQoTm90aWZpY2F0aW9uIG5vdGlmaWNhdGlvbikgeworCQl1cGRhdGVDaGlsZHJlbihub3RpZmljYXRpb24pOworCisJCXN3aXRjaCAobm90aWZpY2F0aW9uLmdldEZlYXR1cmVJRChQb3B1bGF0aW9uSW5pdGlhbGl6ZXIuY2xhc3MpKSB7CisJCQljYXNlIFN0YW5kYXJkUGFja2FnZS5QT1BVTEFUSU9OX0lOSVRJQUxJWkVSX19UQVJHRVRfSVNPX0tFWToKKwkJCWNhc2UgU3RhbmRhcmRQYWNrYWdlLlBPUFVMQVRJT05fSU5JVElBTElaRVJfX1BPUFVMQVRJT05fSURFTlRJRklFUjoKKwkJCQlmaXJlTm90aWZ5Q2hhbmdlZChuZXcgVmlld2VyTm90aWZpY2F0aW9uKG5vdGlmaWNhdGlvbiwgbm90aWZpY2F0aW9uLmdldE5vdGlmaWVyKCksIGZhbHNlLCB0cnVlKSk7CisJCQkJcmV0dXJuOworCQl9CisJCXN1cGVyLm5vdGlmeUNoYW5nZWQobm90aWZpY2F0aW9uKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFkZHMge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lZGl0LmNvbW1hbmQuQ29tbWFuZFBhcmFtZXRlcn1zIGRlc2NyaWJpbmcgdGhlIGNoaWxkcmVuCisJICogdGhhdCBjYW4gYmUgY3JlYXRlZCB1bmRlciB0aGlzIG9iamVjdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgdm9pZCBjb2xsZWN0TmV3Q2hpbGREZXNjcmlwdG9ycyhDb2xsZWN0aW9uPE9iamVjdD4gbmV3Q2hpbGREZXNjcmlwdG9ycywgT2JqZWN0IG9iamVjdCkgeworCQlzdXBlci5jb2xsZWN0TmV3Q2hpbGREZXNjcmlwdG9ycyhuZXdDaGlsZERlc2NyaXB0b3JzLCBvYmplY3QpOworCX0KKworCS8qKgorCSAqIFJldHVybiB0aGUgcmVzb3VyY2UgbG9jYXRvciBmb3IgdGhpcyBpdGVtIHByb3ZpZGVyJ3MgcmVzb3VyY2VzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBSZXNvdXJjZUxvY2F0b3IgZ2V0UmVzb3VyY2VMb2NhdG9yKCkgeworCQlyZXR1cm4gU3RhbmRhcmRFZGl0UGx1Z2luLklOU1RBTkNFOworCX0KKworfQpkaWZmIC0tZ2l0IGEvbW9kZWxzL3BvcHVsYXRpb25zL29yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9wb3B1bGF0aW9ubW9kZWxzL3N0YW5kYXJkL3Byb3ZpZGVyL1BvcHVsYXRpb25Nb2RlbEl0ZW1Qcm92aWRlci5qYXZhIGIvbW9kZWxzL3BvcHVsYXRpb25zL29yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9wb3B1bGF0aW9ubW9kZWxzL3N0YW5kYXJkL3Byb3ZpZGVyL1BvcHVsYXRpb25Nb2RlbEl0ZW1Qcm92aWRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg5YjQ4NTQKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvcG9wdWxhdGlvbnMvb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3BvcHVsYXRpb25tb2RlbHMvc3RhbmRhcmQvcHJvdmlkZXIvUG9wdWxhdGlvbk1vZGVsSXRlbVByb3ZpZGVyLmphdmEKQEAgLTAsMCArMSwyMTAgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLnByb3ZpZGVyOw0KKw0KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorICogQ29weXJpZ2h0IChjKSAyMDA5IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLg0KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMNCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjANCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdA0KKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sDQorICoNCisgKiBDb250cmlidXRvcnM6DQorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbg0KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KKw0KKw0KK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsNCitpbXBvcnQgamF2YS51dGlsLkxpc3Q7DQorDQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LkFkYXB0ZXJGYWN0b3J5Ow0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb247DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5SZXNvdXJjZUxvY2F0b3I7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkNvbXBvc2VhYmxlQWRhcHRlckZhY3Rvcnk7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklFZGl0aW5nRG9tYWluSXRlbVByb3ZpZGVyOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbUxhYmVsUHJvdmlkZXI7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtUHJvcGVydHlEZXNjcmlwdG9yOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbVByb3BlcnR5U291cmNlOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JU3RydWN0dXJlZEl0ZW1Db250ZW50UHJvdmlkZXI7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklUcmVlSXRlbUNvbnRlbnRQcm92aWRlcjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSXRlbVByb3BlcnR5RGVzY3JpcHRvcjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuVmlld2VyTm90aWZpY2F0aW9uOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwucHJvdmlkZXIuSW50ZWdyYXRpb25EZWNvcmF0b3JJdGVtUHJvdmlkZXI7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5wcm92aWRlci5Ob2RlRGVjb3JhdG9ySXRlbVByb3ZpZGVyOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuUG9wdWxhdGlvbk1vZGVsOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmRQYWNrYWdlOw0KKw0KKy8qKg0KKyAqIFRoaXMgaXMgdGhlIGl0ZW0gcHJvdmlkZXIgYWRhcHRlciBmb3IgYSB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLlBvcHVsYXRpb25Nb2RlbH0gb2JqZWN0Lg0KKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorICogQGdlbmVyYXRlZA0KKyAqLw0KK0BTdXBwcmVzc1dhcm5pbmdzKCJ1bnVzZWQiKSANCitwdWJsaWMgY2xhc3MgUG9wdWxhdGlvbk1vZGVsSXRlbVByb3ZpZGVyDQorCWV4dGVuZHMgSW50ZWdyYXRpb25EZWNvcmF0b3JJdGVtUHJvdmlkZXINCisJaW1wbGVtZW50cw0KKwkJSUVkaXRpbmdEb21haW5JdGVtUHJvdmlkZXIsDQorCQlJU3RydWN0dXJlZEl0ZW1Db250ZW50UHJvdmlkZXIsDQorCQlJVHJlZUl0ZW1Db250ZW50UHJvdmlkZXIsDQorCQlJSXRlbUxhYmVsUHJvdmlkZXIsDQorCQlJSXRlbVByb3BlcnR5U291cmNlIHsNCisJLyoqDQorCSAqIFRoaXMgY29uc3RydWN0cyBhbiBpbnN0YW5jZSBmcm9tIGEgZmFjdG9yeSBhbmQgYSBub3RpZmllci4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBQb3B1bGF0aW9uTW9kZWxJdGVtUHJvdmlkZXIoQWRhcHRlckZhY3RvcnkgYWRhcHRlckZhY3RvcnkpIHsNCisJCXN1cGVyKGFkYXB0ZXJGYWN0b3J5KTsNCisJfQ0KKw0KKwkvKioNCisJICogVGhpcyByZXR1cm5zIHRoZSBwcm9wZXJ0eSBkZXNjcmlwdG9ycyBmb3IgdGhlIGFkYXB0ZWQgY2xhc3MuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlAT3ZlcnJpZGUNCisJcHVibGljIExpc3Q8SUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I+IGdldFByb3BlcnR5RGVzY3JpcHRvcnMoT2JqZWN0IG9iamVjdCkgew0KKwkJaWYgKGl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzID09IG51bGwpIHsNCisJCQlzdXBlci5nZXRQcm9wZXJ0eURlc2NyaXB0b3JzKG9iamVjdCk7DQorDQorCQkJYWRkUG9wdWxhdGlvbklkZW50aWZpZXJQcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0KTsNCisJCQlhZGROYW1lUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCk7DQorCQkJYWRkVGFyZ2V0SVNPS2V5UHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCk7DQorCQl9DQorCQlyZXR1cm4gaXRlbVByb3BlcnR5RGVzY3JpcHRvcnM7DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgYWRkcyBhIHByb3BlcnR5IGRlc2NyaXB0b3IgZm9yIHRoZSBQb3B1bGF0aW9uIElkZW50aWZpZXIgZmVhdHVyZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCB2b2lkIGFkZFBvcHVsYXRpb25JZGVudGlmaWVyUHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdCBvYmplY3QpIHsNCisJCWl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzLmFkZA0KKwkJCShjcmVhdGVJdGVtUHJvcGVydHlEZXNjcmlwdG9yDQorCQkJCSgoKENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnkpYWRhcHRlckZhY3RvcnkpLmdldFJvb3RBZGFwdGVyRmFjdG9yeSgpLA0KKwkJCQkgZ2V0UmVzb3VyY2VMb2NhdG9yKCksDQorCQkJCSBnZXRTdHJpbmcoIl9VSV9Qb3B1bGF0aW9uTW9kZWxfcG9wdWxhdGlvbklkZW50aWZpZXJfZmVhdHVyZSIpLA0KKwkJCQkgZ2V0U3RyaW5nKCJfVUlfUHJvcGVydHlEZXNjcmlwdG9yX2Rlc2NyaXB0aW9uIiwgIl9VSV9Qb3B1bGF0aW9uTW9kZWxfcG9wdWxhdGlvbklkZW50aWZpZXJfZmVhdHVyZSIsICJfVUlfUG9wdWxhdGlvbk1vZGVsX3R5cGUiKSwNCisJCQkJIFN0YW5kYXJkUGFja2FnZS5MaXRlcmFscy5QT1BVTEFUSU9OX01PREVMX19QT1BVTEFUSU9OX0lERU5USUZJRVIsDQorCQkJCSB0cnVlLA0KKwkJCQkgZmFsc2UsDQorCQkJCSBmYWxzZSwNCisJCQkJIEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IuR0VORVJJQ19WQUxVRV9JTUFHRSwNCisJCQkJIG51bGwsDQorCQkJCSBudWxsKSk7DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgYWRkcyBhIHByb3BlcnR5IGRlc2NyaXB0b3IgZm9yIHRoZSBOYW1lIGZlYXR1cmUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgdm9pZCBhZGROYW1lUHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdCBvYmplY3QpIHsNCisJCWl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzLmFkZA0KKwkJCShjcmVhdGVJdGVtUHJvcGVydHlEZXNjcmlwdG9yDQorCQkJCSgoKENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnkpYWRhcHRlckZhY3RvcnkpLmdldFJvb3RBZGFwdGVyRmFjdG9yeSgpLA0KKwkJCQkgZ2V0UmVzb3VyY2VMb2NhdG9yKCksDQorCQkJCSBnZXRTdHJpbmcoIl9VSV9Qb3B1bGF0aW9uTW9kZWxfbmFtZV9mZWF0dXJlIiksDQorCQkJCSBnZXRTdHJpbmcoIl9VSV9Qcm9wZXJ0eURlc2NyaXB0b3JfZGVzY3JpcHRpb24iLCAiX1VJX1BvcHVsYXRpb25Nb2RlbF9uYW1lX2ZlYXR1cmUiLCAiX1VJX1BvcHVsYXRpb25Nb2RlbF90eXBlIiksDQorCQkJCSBTdGFuZGFyZFBhY2thZ2UuTGl0ZXJhbHMuUE9QVUxBVElPTl9NT0RFTF9fTkFNRSwNCisJCQkJIHRydWUsDQorCQkJCSBmYWxzZSwNCisJCQkJIGZhbHNlLA0KKwkJCQkgSXRlbVByb3BlcnR5RGVzY3JpcHRvci5HRU5FUklDX1ZBTFVFX0lNQUdFLA0KKwkJCQkgbnVsbCwNCisJCQkJIG51bGwpKTsNCisJfQ0KKw0KKwkvKioNCisJICogVGhpcyBhZGRzIGEgcHJvcGVydHkgZGVzY3JpcHRvciBmb3IgdGhlIFRhcmdldCBJU08gS2V5IGZlYXR1cmUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgdm9pZCBhZGRUYXJnZXRJU09LZXlQcm9wZXJ0eURlc2NyaXB0b3IoT2JqZWN0IG9iamVjdCkgew0KKwkJaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMuYWRkDQorCQkJKGNyZWF0ZUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3INCisJCQkJKCgoQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSlhZGFwdGVyRmFjdG9yeSkuZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCksDQorCQkJCSBnZXRSZXNvdXJjZUxvY2F0b3IoKSwNCisJCQkJIGdldFN0cmluZygiX1VJX1BvcHVsYXRpb25Nb2RlbF90YXJnZXRJU09LZXlfZmVhdHVyZSIpLA0KKwkJCQkgZ2V0U3RyaW5nKCJfVUlfUHJvcGVydHlEZXNjcmlwdG9yX2Rlc2NyaXB0aW9uIiwgIl9VSV9Qb3B1bGF0aW9uTW9kZWxfdGFyZ2V0SVNPS2V5X2ZlYXR1cmUiLCAiX1VJX1BvcHVsYXRpb25Nb2RlbF90eXBlIiksDQorCQkJCSBTdGFuZGFyZFBhY2thZ2UuTGl0ZXJhbHMuUE9QVUxBVElPTl9NT0RFTF9fVEFSR0VUX0lTT19LRVksDQorCQkJCSB0cnVlLA0KKwkJCQkgZmFsc2UsDQorCQkJCSBmYWxzZSwNCisJCQkJIEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IuR0VORVJJQ19WQUxVRV9JTUFHRSwNCisJCQkJIG51bGwsDQorCQkJCSBudWxsKSk7DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgcmV0dXJucyBQb3B1bGF0aW9uTW9kZWwuZ2lmLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZCBOT1QNCisJICovDQorCUBPdmVycmlkZQ0KKwlwdWJsaWMgT2JqZWN0IGdldEltYWdlKE9iamVjdCBvYmplY3QpIHsNCisJCXJldHVybiBvdmVybGF5SW1hZ2Uob2JqZWN0LCBnZXRSZXNvdXJjZUxvY2F0b3IoKS5nZXRJbWFnZSgiZnVsbC9jdXN0b20xNi9Qb3B1bGF0aW9uTW9kZWwiKSk7DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgcmV0dXJucyB0aGUgbGFiZWwgdGV4dCBmb3IgdGhlIGFkYXB0ZWQgY2xhc3MuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkIE5PVA0KKwkgKi8NCisJQE92ZXJyaWRlDQorCXB1YmxpYyBTdHJpbmcgZ2V0VGV4dChPYmplY3Qgb2JqZWN0KSB7DQorCQlyZXR1cm4gc3VwZXIuZ2V0VGV4dChvYmplY3QpOw0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIGhhbmRsZXMgbW9kZWwgbm90aWZpY2F0aW9ucyBieSBjYWxsaW5nIHtAbGluayAjdXBkYXRlQ2hpbGRyZW59IHRvIHVwZGF0ZSBhbnkgY2FjaGVkDQorCSAqIGNoaWxkcmVuIGFuZCBieSBjcmVhdGluZyBhIHZpZXdlciBub3RpZmljYXRpb24sIHdoaWNoIGl0IHBhc3NlcyB0byB7QGxpbmsgI2ZpcmVOb3RpZnlDaGFuZ2VkfS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCUBPdmVycmlkZQ0KKwlwdWJsaWMgdm9pZCBub3RpZnlDaGFuZ2VkKE5vdGlmaWNhdGlvbiBub3RpZmljYXRpb24pIHsNCisJCXVwZGF0ZUNoaWxkcmVuKG5vdGlmaWNhdGlvbik7DQorDQorCQlzd2l0Y2ggKG5vdGlmaWNhdGlvbi5nZXRGZWF0dXJlSUQoUG9wdWxhdGlvbk1vZGVsLmNsYXNzKSkgew0KKwkJCWNhc2UgU3RhbmRhcmRQYWNrYWdlLlBPUFVMQVRJT05fTU9ERUxfX1BPUFVMQVRJT05fSURFTlRJRklFUjoNCisJCQljYXNlIFN0YW5kYXJkUGFja2FnZS5QT1BVTEFUSU9OX01PREVMX19OQU1FOg0KKwkJCWNhc2UgU3RhbmRhcmRQYWNrYWdlLlBPUFVMQVRJT05fTU9ERUxfX1RBUkdFVF9JU09fS0VZOg0KKwkJCQlmaXJlTm90aWZ5Q2hhbmdlZChuZXcgVmlld2VyTm90aWZpY2F0aW9uKG5vdGlmaWNhdGlvbiwgbm90aWZpY2F0aW9uLmdldE5vdGlmaWVyKCksIGZhbHNlLCB0cnVlKSk7DQorCQkJCXJldHVybjsNCisJCX0NCisJCXN1cGVyLm5vdGlmeUNoYW5nZWQobm90aWZpY2F0aW9uKTsNCisJfQ0KKw0KKwkvKioNCisJICogVGhpcyBhZGRzIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuZWRpdC5jb21tYW5kLkNvbW1hbmRQYXJhbWV0ZXJ9cyBkZXNjcmliaW5nIHRoZSBjaGlsZHJlbg0KKwkgKiB0aGF0IGNhbiBiZSBjcmVhdGVkIHVuZGVyIHRoaXMgb2JqZWN0Lg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJQE92ZXJyaWRlDQorCXByb3RlY3RlZCB2b2lkIGNvbGxlY3ROZXdDaGlsZERlc2NyaXB0b3JzKENvbGxlY3Rpb248T2JqZWN0PiBuZXdDaGlsZERlc2NyaXB0b3JzLCBPYmplY3Qgb2JqZWN0KSB7DQorCQlzdXBlci5jb2xsZWN0TmV3Q2hpbGREZXNjcmlwdG9ycyhuZXdDaGlsZERlc2NyaXB0b3JzLCBvYmplY3QpOw0KKwl9DQorDQorCS8qKg0KKwkgKiBSZXR1cm4gdGhlIHJlc291cmNlIGxvY2F0b3IgZm9yIHRoaXMgaXRlbSBwcm92aWRlcidzIHJlc291cmNlcy4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCUBPdmVycmlkZQ0KKwlwdWJsaWMgUmVzb3VyY2VMb2NhdG9yIGdldFJlc291cmNlTG9jYXRvcigpIHsNCisJCXJldHVybiBTdGFuZGFyZEVkaXRQbHVnaW4uSU5TVEFOQ0U7DQorCX0NCisNCit9DQpkaWZmIC0tZ2l0IGEvbW9kZWxzL3BvcHVsYXRpb25zL29yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9wb3B1bGF0aW9ubW9kZWxzL3N0YW5kYXJkL3Byb3ZpZGVyL1BvcHVsYXRpb25Nb2RlbExhYmVsSXRlbVByb3ZpZGVyLmphdmEgYi9tb2RlbHMvcG9wdWxhdGlvbnMvb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3BvcHVsYXRpb25tb2RlbHMvc3RhbmRhcmQvcHJvdmlkZXIvUG9wdWxhdGlvbk1vZGVsTGFiZWxJdGVtUHJvdmlkZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNzZlMGEwCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL3BvcHVsYXRpb25zL29yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9wb3B1bGF0aW9ubW9kZWxzL3N0YW5kYXJkL3Byb3ZpZGVyL1BvcHVsYXRpb25Nb2RlbExhYmVsSXRlbVByb3ZpZGVyLmphdmEKQEAgLTAsMCArMSwxOTAgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLnByb3ZpZGVyOw0KKw0KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorICogQ29weXJpZ2h0IChjKSAyMDA5IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLg0KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMNCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjANCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdA0KKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sDQorICoNCisgKiBDb250cmlidXRvcnM6DQorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbg0KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KKw0KKw0KK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsNCitpbXBvcnQgamF2YS51dGlsLkxpc3Q7DQorDQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LkFkYXB0ZXJGYWN0b3J5Ow0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb247DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5SZXNvdXJjZUxvY2F0b3I7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5VUkk7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkNvbXBvc2VhYmxlQWRhcHRlckZhY3Rvcnk7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklFZGl0aW5nRG9tYWluSXRlbVByb3ZpZGVyOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbUxhYmVsUHJvdmlkZXI7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtUHJvcGVydHlEZXNjcmlwdG9yOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbVByb3BlcnR5U291cmNlOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JU3RydWN0dXJlZEl0ZW1Db250ZW50UHJvdmlkZXI7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklUcmVlSXRlbUNvbnRlbnRQcm92aWRlcjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSXRlbVByb3BlcnR5RGVzY3JpcHRvcjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuVmlld2VyTm90aWZpY2F0aW9uOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGgucHJvdmlkZXIuSW50ZWdyYXRpb25MYWJlbEl0ZW1Qcm92aWRlcjsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLnByb3ZpZGVyLkR5bmFtaWNOb2RlTGFiZWxJdGVtUHJvdmlkZXI7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5Qb3B1bGF0aW9uTW9kZWxMYWJlbDsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkUGFja2FnZTsNCisNCisvKioNCisgKiBUaGlzIGlzIHRoZSBpdGVtIHByb3ZpZGVyIGFkYXB0ZXIgZm9yIGEge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5Qb3B1bGF0aW9uTW9kZWxMYWJlbH0gb2JqZWN0Lg0KKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorICogQGdlbmVyYXRlZA0KKyAqLw0KK0BTdXBwcmVzc1dhcm5pbmdzKCJ1bnVzZWQiKSANCitwdWJsaWMgY2xhc3MgUG9wdWxhdGlvbk1vZGVsTGFiZWxJdGVtUHJvdmlkZXINCisJZXh0ZW5kcyBJbnRlZ3JhdGlvbkxhYmVsSXRlbVByb3ZpZGVyDQorCWltcGxlbWVudHMNCisJCUlFZGl0aW5nRG9tYWluSXRlbVByb3ZpZGVyLA0KKwkJSVN0cnVjdHVyZWRJdGVtQ29udGVudFByb3ZpZGVyLA0KKwkJSVRyZWVJdGVtQ29udGVudFByb3ZpZGVyLA0KKwkJSUl0ZW1MYWJlbFByb3ZpZGVyLA0KKwkJSUl0ZW1Qcm9wZXJ0eVNvdXJjZSB7DQorCS8qKg0KKwkgKiBUaGlzIGNvbnN0cnVjdHMgYW4gaW5zdGFuY2UgZnJvbSBhIGZhY3RvcnkgYW5kIGEgbm90aWZpZXIuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgUG9wdWxhdGlvbk1vZGVsTGFiZWxJdGVtUHJvdmlkZXIoQWRhcHRlckZhY3RvcnkgYWRhcHRlckZhY3RvcnkpIHsNCisJCXN1cGVyKGFkYXB0ZXJGYWN0b3J5KTsNCisJfQ0KKw0KKwkvKioNCisJICogVGhpcyByZXR1cm5zIHRoZSBwcm9wZXJ0eSBkZXNjcmlwdG9ycyBmb3IgdGhlIGFkYXB0ZWQgY2xhc3MuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlAT3ZlcnJpZGUNCisJcHVibGljIExpc3Q8SUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I+IGdldFByb3BlcnR5RGVzY3JpcHRvcnMoT2JqZWN0IG9iamVjdCkgew0KKwkJaWYgKGl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzID09IG51bGwpIHsNCisJCQlzdXBlci5nZXRQcm9wZXJ0eURlc2NyaXB0b3JzKG9iamVjdCk7DQorDQorCQkJYWRkUG9wdWxhdGlvbkxhYmVsUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCk7DQorCQkJYWRkUG9wdWxhdGlvbklkZW50aWZpZXJQcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0KTsNCisJCX0NCisJCXJldHVybiBpdGVtUHJvcGVydHlEZXNjcmlwdG9yczsNCisJfQ0KKw0KKwkvKioNCisJICogVGhpcyBhZGRzIGEgcHJvcGVydHkgZGVzY3JpcHRvciBmb3IgdGhlIFBvcHVsYXRpb24gTGFiZWwgZmVhdHVyZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCB2b2lkIGFkZFBvcHVsYXRpb25MYWJlbFByb3BlcnR5RGVzY3JpcHRvcihPYmplY3Qgb2JqZWN0KSB7DQorCQlpdGVtUHJvcGVydHlEZXNjcmlwdG9ycy5hZGQNCisJCQkoY3JlYXRlSXRlbVByb3BlcnR5RGVzY3JpcHRvcg0KKwkJCQkoKChDb21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5KWFkYXB0ZXJGYWN0b3J5KS5nZXRSb290QWRhcHRlckZhY3RvcnkoKSwNCisJCQkJIGdldFJlc291cmNlTG9jYXRvcigpLA0KKwkJCQkgZ2V0U3RyaW5nKCJfVUlfUG9wdWxhdGlvbk1vZGVsTGFiZWxfcG9wdWxhdGlvbkxhYmVsX2ZlYXR1cmUiKSwNCisJCQkJIGdldFN0cmluZygiX1VJX1Byb3BlcnR5RGVzY3JpcHRvcl9kZXNjcmlwdGlvbiIsICJfVUlfUG9wdWxhdGlvbk1vZGVsTGFiZWxfcG9wdWxhdGlvbkxhYmVsX2ZlYXR1cmUiLCAiX1VJX1BvcHVsYXRpb25Nb2RlbExhYmVsX3R5cGUiKSwNCisJCQkJIFN0YW5kYXJkUGFja2FnZS5MaXRlcmFscy5QT1BVTEFUSU9OX01PREVMX0xBQkVMX19QT1BVTEFUSU9OX0xBQkVMLA0KKwkJCQkgdHJ1ZSwNCisJCQkJIGZhbHNlLA0KKwkJCQkgdHJ1ZSwNCisJCQkJIG51bGwsDQorCQkJCSBudWxsLA0KKwkJCQkgbnVsbCkpOw0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIGFkZHMgYSBwcm9wZXJ0eSBkZXNjcmlwdG9yIGZvciB0aGUgUG9wdWxhdGlvbiBJZGVudGlmaWVyIGZlYXR1cmUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgdm9pZCBhZGRQb3B1bGF0aW9uSWRlbnRpZmllclByb3BlcnR5RGVzY3JpcHRvcihPYmplY3Qgb2JqZWN0KSB7DQorCQlpdGVtUHJvcGVydHlEZXNjcmlwdG9ycy5hZGQNCisJCQkoY3JlYXRlSXRlbVByb3BlcnR5RGVzY3JpcHRvcg0KKwkJCQkoKChDb21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5KWFkYXB0ZXJGYWN0b3J5KS5nZXRSb290QWRhcHRlckZhY3RvcnkoKSwNCisJCQkJIGdldFJlc291cmNlTG9jYXRvcigpLA0KKwkJCQkgZ2V0U3RyaW5nKCJfVUlfUG9wdWxhdGlvbk1vZGVsTGFiZWxfcG9wdWxhdGlvbklkZW50aWZpZXJfZmVhdHVyZSIpLA0KKwkJCQkgZ2V0U3RyaW5nKCJfVUlfUHJvcGVydHlEZXNjcmlwdG9yX2Rlc2NyaXB0aW9uIiwgIl9VSV9Qb3B1bGF0aW9uTW9kZWxMYWJlbF9wb3B1bGF0aW9uSWRlbnRpZmllcl9mZWF0dXJlIiwgIl9VSV9Qb3B1bGF0aW9uTW9kZWxMYWJlbF90eXBlIiksDQorCQkJCSBTdGFuZGFyZFBhY2thZ2UuTGl0ZXJhbHMuUE9QVUxBVElPTl9NT0RFTF9MQUJFTF9fUE9QVUxBVElPTl9JREVOVElGSUVSLA0KKwkJCQkgdHJ1ZSwNCisJCQkJIGZhbHNlLA0KKwkJCQkgZmFsc2UsDQorCQkJCSBJdGVtUHJvcGVydHlEZXNjcmlwdG9yLkdFTkVSSUNfVkFMVUVfSU1BR0UsDQorCQkJCSBudWxsLA0KKwkJCQkgbnVsbCkpOw0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIHJldHVybnMgUG9wdWxhdGlvbk1vZGVsTGFiZWwuZ2lmLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJQE92ZXJyaWRlDQorCXB1YmxpYyBPYmplY3QgZ2V0SW1hZ2UoT2JqZWN0IG9iamVjdCkgew0KKwkJcmV0dXJuIG92ZXJsYXlJbWFnZShvYmplY3QsIGdldFJlc291cmNlTG9jYXRvcigpLmdldEltYWdlKCJmdWxsL29iajE2L1BvcHVsYXRpb25Nb2RlbExhYmVsIikpOw0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIHJldHVybnMgdGhlIGxhYmVsIHRleHQgZm9yIHRoZSBhZGFwdGVkIGNsYXNzLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJQE92ZXJyaWRlDQorCXB1YmxpYyBTdHJpbmcgZ2V0VGV4dChPYmplY3Qgb2JqZWN0KSB7DQorCQlVUkkgbGFiZWxWYWx1ZSA9ICgoUG9wdWxhdGlvbk1vZGVsTGFiZWwpb2JqZWN0KS5nZXRVUkkoKTsNCisJCVN0cmluZyBsYWJlbCA9IGxhYmVsVmFsdWUgPT0gbnVsbCA/IG51bGwgOiBsYWJlbFZhbHVlLnRvU3RyaW5nKCk7DQorCQlyZXR1cm4gbGFiZWwgPT0gbnVsbCB8fCBsYWJlbC5sZW5ndGgoKSA9PSAwID8NCisJCQlnZXRTdHJpbmcoIl9VSV9Qb3B1bGF0aW9uTW9kZWxMYWJlbF90eXBlIikgOg0KKwkJCWdldFN0cmluZygiX1VJX1BvcHVsYXRpb25Nb2RlbExhYmVsX3R5cGUiKSArICIgIiArIGxhYmVsOw0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIGhhbmRsZXMgbW9kZWwgbm90aWZpY2F0aW9ucyBieSBjYWxsaW5nIHtAbGluayAjdXBkYXRlQ2hpbGRyZW59IHRvIHVwZGF0ZSBhbnkgY2FjaGVkDQorCSAqIGNoaWxkcmVuIGFuZCBieSBjcmVhdGluZyBhIHZpZXdlciBub3RpZmljYXRpb24sIHdoaWNoIGl0IHBhc3NlcyB0byB7QGxpbmsgI2ZpcmVOb3RpZnlDaGFuZ2VkfS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCUBPdmVycmlkZQ0KKwlwdWJsaWMgdm9pZCBub3RpZnlDaGFuZ2VkKE5vdGlmaWNhdGlvbiBub3RpZmljYXRpb24pIHsNCisJCXVwZGF0ZUNoaWxkcmVuKG5vdGlmaWNhdGlvbik7DQorDQorCQlzd2l0Y2ggKG5vdGlmaWNhdGlvbi5nZXRGZWF0dXJlSUQoUG9wdWxhdGlvbk1vZGVsTGFiZWwuY2xhc3MpKSB7DQorCQkJY2FzZSBTdGFuZGFyZFBhY2thZ2UuUE9QVUxBVElPTl9NT0RFTF9MQUJFTF9fUE9QVUxBVElPTl9JREVOVElGSUVSOg0KKwkJCQlmaXJlTm90aWZ5Q2hhbmdlZChuZXcgVmlld2VyTm90aWZpY2F0aW9uKG5vdGlmaWNhdGlvbiwgbm90aWZpY2F0aW9uLmdldE5vdGlmaWVyKCksIGZhbHNlLCB0cnVlKSk7DQorCQkJCXJldHVybjsNCisJCX0NCisJCXN1cGVyLm5vdGlmeUNoYW5nZWQobm90aWZpY2F0aW9uKTsNCisJfQ0KKw0KKwkvKioNCisJICogVGhpcyBhZGRzIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuZWRpdC5jb21tYW5kLkNvbW1hbmRQYXJhbWV0ZXJ9cyBkZXNjcmliaW5nIHRoZSBjaGlsZHJlbg0KKwkgKiB0aGF0IGNhbiBiZSBjcmVhdGVkIHVuZGVyIHRoaXMgb2JqZWN0Lg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJQE92ZXJyaWRlDQorCXByb3RlY3RlZCB2b2lkIGNvbGxlY3ROZXdDaGlsZERlc2NyaXB0b3JzKENvbGxlY3Rpb248T2JqZWN0PiBuZXdDaGlsZERlc2NyaXB0b3JzLCBPYmplY3Qgb2JqZWN0KSB7DQorCQlzdXBlci5jb2xsZWN0TmV3Q2hpbGREZXNjcmlwdG9ycyhuZXdDaGlsZERlc2NyaXB0b3JzLCBvYmplY3QpOw0KKwl9DQorDQorCS8qKg0KKwkgKiBSZXR1cm4gdGhlIHJlc291cmNlIGxvY2F0b3IgZm9yIHRoaXMgaXRlbSBwcm92aWRlcidzIHJlc291cmNlcy4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCUBPdmVycmlkZQ0KKwlwdWJsaWMgUmVzb3VyY2VMb2NhdG9yIGdldFJlc291cmNlTG9jYXRvcigpIHsNCisJCXJldHVybiBTdGFuZGFyZEVkaXRQbHVnaW4uSU5TVEFOQ0U7DQorCX0NCisNCit9DQpkaWZmIC0tZ2l0IGEvbW9kZWxzL3BvcHVsYXRpb25zL29yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9wb3B1bGF0aW9ubW9kZWxzL3N0YW5kYXJkL3Byb3ZpZGVyL1BvcHVsYXRpb25Nb2RlbExhYmVsVmFsdWVJdGVtUHJvdmlkZXIuamF2YSBiL21vZGVscy9wb3B1bGF0aW9ucy9vcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vcG9wdWxhdGlvbm1vZGVscy9zdGFuZGFyZC9wcm92aWRlci9Qb3B1bGF0aW9uTW9kZWxMYWJlbFZhbHVlSXRlbVByb3ZpZGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDQ2NWU3OQotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9wb3B1bGF0aW9ucy9vcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vcG9wdWxhdGlvbm1vZGVscy9zdGFuZGFyZC9wcm92aWRlci9Qb3B1bGF0aW9uTW9kZWxMYWJlbFZhbHVlSXRlbVByb3ZpZGVyLmphdmEKQEAgLTAsMCArMSwxMjcgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLnByb3ZpZGVyOw0KKw0KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorICogQ29weXJpZ2h0IChjKSAyMDA5IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLg0KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMNCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjANCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdA0KKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sDQorICoNCisgKiBDb250cmlidXRvcnM6DQorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbg0KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KKw0KKw0KK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsNCitpbXBvcnQgamF2YS51dGlsLkxpc3Q7DQorDQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LkFkYXB0ZXJGYWN0b3J5Ow0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb247DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5SZXNvdXJjZUxvY2F0b3I7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklFZGl0aW5nRG9tYWluSXRlbVByb3ZpZGVyOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbUxhYmVsUHJvdmlkZXI7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtUHJvcGVydHlEZXNjcmlwdG9yOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbVByb3BlcnR5U291cmNlOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JU3RydWN0dXJlZEl0ZW1Db250ZW50UHJvdmlkZXI7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklUcmVlSXRlbUNvbnRlbnRQcm92aWRlcjsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLnByb3ZpZGVyLkludGVncmF0aW9uTGFiZWxWYWx1ZUl0ZW1Qcm92aWRlcjsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLnByb3ZpZGVyLkxhYmVsVmFsdWVJdGVtUHJvdmlkZXI7DQorDQorLyoqDQorICogVGhpcyBpcyB0aGUgaXRlbSBwcm92aWRlciBhZGFwdGVyIGZvciBhIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuUG9wdWxhdGlvbk1vZGVsTGFiZWxWYWx1ZX0gb2JqZWN0Lg0KKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorICogQGdlbmVyYXRlZA0KKyAqLw0KK3B1YmxpYyBjbGFzcyBQb3B1bGF0aW9uTW9kZWxMYWJlbFZhbHVlSXRlbVByb3ZpZGVyDQorCWV4dGVuZHMgSW50ZWdyYXRpb25MYWJlbFZhbHVlSXRlbVByb3ZpZGVyDQorCWltcGxlbWVudHMNCisJCUlFZGl0aW5nRG9tYWluSXRlbVByb3ZpZGVyLA0KKwkJSVN0cnVjdHVyZWRJdGVtQ29udGVudFByb3ZpZGVyLA0KKwkJSVRyZWVJdGVtQ29udGVudFByb3ZpZGVyLA0KKwkJSUl0ZW1MYWJlbFByb3ZpZGVyLA0KKwkJSUl0ZW1Qcm9wZXJ0eVNvdXJjZSB7DQorCS8qKg0KKwkgKiBUaGlzIGNvbnN0cnVjdHMgYW4gaW5zdGFuY2UgZnJvbSBhIGZhY3RvcnkgYW5kIGEgbm90aWZpZXIuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgUG9wdWxhdGlvbk1vZGVsTGFiZWxWYWx1ZUl0ZW1Qcm92aWRlcihBZGFwdGVyRmFjdG9yeSBhZGFwdGVyRmFjdG9yeSkgew0KKwkJc3VwZXIoYWRhcHRlckZhY3RvcnkpOw0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIHJldHVybnMgdGhlIHByb3BlcnR5IGRlc2NyaXB0b3JzIGZvciB0aGUgYWRhcHRlZCBjbGFzcy4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCUBPdmVycmlkZQ0KKwlwdWJsaWMgTGlzdDxJSXRlbVByb3BlcnR5RGVzY3JpcHRvcj4gZ2V0UHJvcGVydHlEZXNjcmlwdG9ycyhPYmplY3Qgb2JqZWN0KSB7DQorCQlpZiAoaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMgPT0gbnVsbCkgew0KKwkJCXN1cGVyLmdldFByb3BlcnR5RGVzY3JpcHRvcnMob2JqZWN0KTsNCisNCisJCX0NCisJCXJldHVybiBpdGVtUHJvcGVydHlEZXNjcmlwdG9yczsNCisJfQ0KKw0KKwkvKioNCisJICogVGhpcyByZXR1cm5zIFBvcHVsYXRpb25Nb2RlbExhYmVsVmFsdWUuZ2lmLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJQE92ZXJyaWRlDQorCXB1YmxpYyBPYmplY3QgZ2V0SW1hZ2UoT2JqZWN0IG9iamVjdCkgew0KKwkJcmV0dXJuIG92ZXJsYXlJbWFnZShvYmplY3QsIGdldFJlc291cmNlTG9jYXRvcigpLmdldEltYWdlKCJmdWxsL29iajE2L1BvcHVsYXRpb25Nb2RlbExhYmVsVmFsdWUiKSk7DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgcmV0dXJucyB0aGUgbGFiZWwgdGV4dCBmb3IgdGhlIGFkYXB0ZWQgY2xhc3MuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlAT3ZlcnJpZGUNCisJcHVibGljIFN0cmluZyBnZXRUZXh0KE9iamVjdCBvYmplY3QpIHsNCisJCXJldHVybiBnZXRTdHJpbmcoIl9VSV9Qb3B1bGF0aW9uTW9kZWxMYWJlbFZhbHVlX3R5cGUiKTsNCisJfQ0KKw0KKwkvKioNCisJICogVGhpcyBoYW5kbGVzIG1vZGVsIG5vdGlmaWNhdGlvbnMgYnkgY2FsbGluZyB7QGxpbmsgI3VwZGF0ZUNoaWxkcmVufSB0byB1cGRhdGUgYW55IGNhY2hlZA0KKwkgKiBjaGlsZHJlbiBhbmQgYnkgY3JlYXRpbmcgYSB2aWV3ZXIgbm90aWZpY2F0aW9uLCB3aGljaCBpdCBwYXNzZXMgdG8ge0BsaW5rICNmaXJlTm90aWZ5Q2hhbmdlZH0uDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlAT3ZlcnJpZGUNCisJcHVibGljIHZvaWQgbm90aWZ5Q2hhbmdlZChOb3RpZmljYXRpb24gbm90aWZpY2F0aW9uKSB7DQorCQl1cGRhdGVDaGlsZHJlbihub3RpZmljYXRpb24pOw0KKwkJc3VwZXIubm90aWZ5Q2hhbmdlZChub3RpZmljYXRpb24pOw0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIGFkZHMge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lZGl0LmNvbW1hbmQuQ29tbWFuZFBhcmFtZXRlcn1zIGRlc2NyaWJpbmcgdGhlIGNoaWxkcmVuDQorCSAqIHRoYXQgY2FuIGJlIGNyZWF0ZWQgdW5kZXIgdGhpcyBvYmplY3QuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlAT3ZlcnJpZGUNCisJcHJvdGVjdGVkIHZvaWQgY29sbGVjdE5ld0NoaWxkRGVzY3JpcHRvcnMoQ29sbGVjdGlvbjxPYmplY3Q+IG5ld0NoaWxkRGVzY3JpcHRvcnMsIE9iamVjdCBvYmplY3QpIHsNCisJCXN1cGVyLmNvbGxlY3ROZXdDaGlsZERlc2NyaXB0b3JzKG5ld0NoaWxkRGVzY3JpcHRvcnMsIG9iamVjdCk7DQorCX0NCisNCisJLyoqDQorCSAqIFJldHVybiB0aGUgcmVzb3VyY2UgbG9jYXRvciBmb3IgdGhpcyBpdGVtIHByb3ZpZGVyJ3MgcmVzb3VyY2VzLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJQE92ZXJyaWRlDQorCXB1YmxpYyBSZXNvdXJjZUxvY2F0b3IgZ2V0UmVzb3VyY2VMb2NhdG9yKCkgew0KKwkJcmV0dXJuIFN0YW5kYXJkRWRpdFBsdWdpbi5JTlNUQU5DRTsNCisJfQ0KKw0KK30NCmRpZmYgLS1naXQgYS9tb2RlbHMvcG9wdWxhdGlvbnMvb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3BvcHVsYXRpb25tb2RlbHMvc3RhbmRhcmQvcHJvdmlkZXIvUG9wdWxhdGlvbk1vZGVsVmFsdWVJdGVtUHJvdmlkZXIuamF2YSBiL21vZGVscy9wb3B1bGF0aW9ucy9vcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vcG9wdWxhdGlvbm1vZGVscy9zdGFuZGFyZC9wcm92aWRlci9Qb3B1bGF0aW9uTW9kZWxWYWx1ZUl0ZW1Qcm92aWRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFjYzJkN2IKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvcG9wdWxhdGlvbnMvb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3BvcHVsYXRpb25tb2RlbHMvc3RhbmRhcmQvcHJvdmlkZXIvUG9wdWxhdGlvbk1vZGVsVmFsdWVJdGVtUHJvdmlkZXIuamF2YQpAQCAtMCwwICsxLDEyNiBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQucHJvdmlkZXI7DQorDQorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisgKiBDb3B5cmlnaHQgKGMpIDIwMDkgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuDQorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscw0KKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMA0KKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0DQorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwNCisgKg0KKyAqIENvbnRyaWJ1dG9yczoNCisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uDQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQorDQorDQoraW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOw0KK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsNCisNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuQWRhcHRlckZhY3Rvcnk7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlJlc291cmNlTG9jYXRvcjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUVkaXRpbmdEb21haW5JdGVtUHJvdmlkZXI7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtTGFiZWxQcm92aWRlcjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtUHJvcGVydHlTb3VyY2U7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklTdHJ1Y3R1cmVkSXRlbUNvbnRlbnRQcm92aWRlcjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVRyZWVJdGVtQ29udGVudFByb3ZpZGVyOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGgucHJvdmlkZXIuTGFiZWxWYWx1ZUl0ZW1Qcm92aWRlcjsNCisNCisvKioNCisgKiBUaGlzIGlzIHRoZSBpdGVtIHByb3ZpZGVyIGFkYXB0ZXIgZm9yIGEge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5Qb3B1bGF0aW9uTW9kZWxWYWx1ZX0gb2JqZWN0Lg0KKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorICogQGdlbmVyYXRlZA0KKyAqLw0KK3B1YmxpYyBjbGFzcyBQb3B1bGF0aW9uTW9kZWxWYWx1ZUl0ZW1Qcm92aWRlcg0KKwlleHRlbmRzIExhYmVsVmFsdWVJdGVtUHJvdmlkZXINCisJaW1wbGVtZW50cw0KKwkJSUVkaXRpbmdEb21haW5JdGVtUHJvdmlkZXIsDQorCQlJU3RydWN0dXJlZEl0ZW1Db250ZW50UHJvdmlkZXIsDQorCQlJVHJlZUl0ZW1Db250ZW50UHJvdmlkZXIsDQorCQlJSXRlbUxhYmVsUHJvdmlkZXIsDQorCQlJSXRlbVByb3BlcnR5U291cmNlIHsNCisJLyoqDQorCSAqIFRoaXMgY29uc3RydWN0cyBhbiBpbnN0YW5jZSBmcm9tIGEgZmFjdG9yeSBhbmQgYSBub3RpZmllci4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBQb3B1bGF0aW9uTW9kZWxWYWx1ZUl0ZW1Qcm92aWRlcihBZGFwdGVyRmFjdG9yeSBhZGFwdGVyRmFjdG9yeSkgew0KKwkJc3VwZXIoYWRhcHRlckZhY3RvcnkpOw0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIHJldHVybnMgdGhlIHByb3BlcnR5IGRlc2NyaXB0b3JzIGZvciB0aGUgYWRhcHRlZCBjbGFzcy4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCUBPdmVycmlkZQ0KKwlwdWJsaWMgTGlzdDxJSXRlbVByb3BlcnR5RGVzY3JpcHRvcj4gZ2V0UHJvcGVydHlEZXNjcmlwdG9ycyhPYmplY3Qgb2JqZWN0KSB7DQorCQlpZiAoaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMgPT0gbnVsbCkgew0KKwkJCXN1cGVyLmdldFByb3BlcnR5RGVzY3JpcHRvcnMob2JqZWN0KTsNCisNCisJCX0NCisJCXJldHVybiBpdGVtUHJvcGVydHlEZXNjcmlwdG9yczsNCisJfQ0KKw0KKwkvKioNCisJICogVGhpcyByZXR1cm5zIFBvcHVsYXRpb25Nb2RlbFZhbHVlLmdpZi4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCUBPdmVycmlkZQ0KKwlwdWJsaWMgT2JqZWN0IGdldEltYWdlKE9iamVjdCBvYmplY3QpIHsNCisJCXJldHVybiBvdmVybGF5SW1hZ2Uob2JqZWN0LCBnZXRSZXNvdXJjZUxvY2F0b3IoKS5nZXRJbWFnZSgiZnVsbC9vYmoxNi9Qb3B1bGF0aW9uTW9kZWxWYWx1ZSIpKTsNCisJfQ0KKw0KKwkvKioNCisJICogVGhpcyByZXR1cm5zIHRoZSBsYWJlbCB0ZXh0IGZvciB0aGUgYWRhcHRlZCBjbGFzcy4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCUBPdmVycmlkZQ0KKwlwdWJsaWMgU3RyaW5nIGdldFRleHQoT2JqZWN0IG9iamVjdCkgew0KKwkJcmV0dXJuIGdldFN0cmluZygiX1VJX1BvcHVsYXRpb25Nb2RlbFZhbHVlX3R5cGUiKTsNCisJfQ0KKw0KKwkvKioNCisJICogVGhpcyBoYW5kbGVzIG1vZGVsIG5vdGlmaWNhdGlvbnMgYnkgY2FsbGluZyB7QGxpbmsgI3VwZGF0ZUNoaWxkcmVufSB0byB1cGRhdGUgYW55IGNhY2hlZA0KKwkgKiBjaGlsZHJlbiBhbmQgYnkgY3JlYXRpbmcgYSB2aWV3ZXIgbm90aWZpY2F0aW9uLCB3aGljaCBpdCBwYXNzZXMgdG8ge0BsaW5rICNmaXJlTm90aWZ5Q2hhbmdlZH0uDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlAT3ZlcnJpZGUNCisJcHVibGljIHZvaWQgbm90aWZ5Q2hhbmdlZChOb3RpZmljYXRpb24gbm90aWZpY2F0aW9uKSB7DQorCQl1cGRhdGVDaGlsZHJlbihub3RpZmljYXRpb24pOw0KKwkJc3VwZXIubm90aWZ5Q2hhbmdlZChub3RpZmljYXRpb24pOw0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIGFkZHMge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lZGl0LmNvbW1hbmQuQ29tbWFuZFBhcmFtZXRlcn1zIGRlc2NyaWJpbmcgdGhlIGNoaWxkcmVuDQorCSAqIHRoYXQgY2FuIGJlIGNyZWF0ZWQgdW5kZXIgdGhpcyBvYmplY3QuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlAT3ZlcnJpZGUNCisJcHJvdGVjdGVkIHZvaWQgY29sbGVjdE5ld0NoaWxkRGVzY3JpcHRvcnMoQ29sbGVjdGlvbjxPYmplY3Q+IG5ld0NoaWxkRGVzY3JpcHRvcnMsIE9iamVjdCBvYmplY3QpIHsNCisJCXN1cGVyLmNvbGxlY3ROZXdDaGlsZERlc2NyaXB0b3JzKG5ld0NoaWxkRGVzY3JpcHRvcnMsIG9iamVjdCk7DQorCX0NCisNCisJLyoqDQorCSAqIFJldHVybiB0aGUgcmVzb3VyY2UgbG9jYXRvciBmb3IgdGhpcyBpdGVtIHByb3ZpZGVyJ3MgcmVzb3VyY2VzLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJQE92ZXJyaWRlDQorCXB1YmxpYyBSZXNvdXJjZUxvY2F0b3IgZ2V0UmVzb3VyY2VMb2NhdG9yKCkgew0KKwkJcmV0dXJuIFN0YW5kYXJkRWRpdFBsdWdpbi5JTlNUQU5DRTsNCisJfQ0KKw0KK30NCmRpZmYgLS1naXQgYS9tb2RlbHMvcG9wdWxhdGlvbnMvb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3BvcHVsYXRpb25tb2RlbHMvc3RhbmRhcmQvcHJvdmlkZXIvU2Vhc29uYWxQb3B1bGF0aW9uTW9kZWxJdGVtUHJvdmlkZXIuamF2YSBiL21vZGVscy9wb3B1bGF0aW9ucy9vcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vcG9wdWxhdGlvbm1vZGVscy9zdGFuZGFyZC9wcm92aWRlci9TZWFzb25hbFBvcHVsYXRpb25Nb2RlbEl0ZW1Qcm92aWRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMwNGNmMWQKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvcG9wdWxhdGlvbnMvb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3BvcHVsYXRpb25tb2RlbHMvc3RhbmRhcmQvcHJvdmlkZXIvU2Vhc29uYWxQb3B1bGF0aW9uTW9kZWxJdGVtUHJvdmlkZXIuamF2YQpAQCAtMCwwICsxLDIxOSBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQucHJvdmlkZXI7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIAorICogQ29weXJpZ2h0IChjKSAyMDExIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiAKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdCAKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sIAorICogCisgKiBDb250cmlidXRvcnM6IAorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiAKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LkFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5Db21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklFZGl0aW5nRG9tYWluSXRlbVByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtTGFiZWxQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbVByb3BlcnR5RGVzY3JpcHRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbVByb3BlcnR5U291cmNlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklTdHJ1Y3R1cmVkSXRlbUNvbnRlbnRQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JVHJlZUl0ZW1Db250ZW50UHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSXRlbVByb3BlcnR5RGVzY3JpcHRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5WaWV3ZXJOb3RpZmljYXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLlNlYXNvbmFsUG9wdWxhdGlvbk1vZGVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZFBhY2thZ2U7CisKKy8qKgorICogVGhpcyBpcyB0aGUgaXRlbSBwcm92aWRlciBhZGFwdGVyIGZvciBhIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuU2Vhc29uYWxQb3B1bGF0aW9uTW9kZWx9IG9iamVjdC4KKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIFNlYXNvbmFsUG9wdWxhdGlvbk1vZGVsSXRlbVByb3ZpZGVyCisJZXh0ZW5kcyBTdGFuZGFyZFBvcHVsYXRpb25Nb2RlbEl0ZW1Qcm92aWRlcgorCWltcGxlbWVudHMKKwkJSUVkaXRpbmdEb21haW5JdGVtUHJvdmlkZXIsCisJCUlTdHJ1Y3R1cmVkSXRlbUNvbnRlbnRQcm92aWRlciwKKwkJSVRyZWVJdGVtQ29udGVudFByb3ZpZGVyLAorCQlJSXRlbUxhYmVsUHJvdmlkZXIsCisJCUlJdGVtUHJvcGVydHlTb3VyY2UgeworCS8qKgorCSAqIFRoaXMgY29uc3RydWN0cyBhbiBpbnN0YW5jZSBmcm9tIGEgZmFjdG9yeSBhbmQgYSBub3RpZmllci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgU2Vhc29uYWxQb3B1bGF0aW9uTW9kZWxJdGVtUHJvdmlkZXIoQWRhcHRlckZhY3RvcnkgYWRhcHRlckZhY3RvcnkpIHsKKwkJc3VwZXIoYWRhcHRlckZhY3RvcnkpOworCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyB0aGUgcHJvcGVydHkgZGVzY3JpcHRvcnMgZm9yIHRoZSBhZGFwdGVkIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBMaXN0PElJdGVtUHJvcGVydHlEZXNjcmlwdG9yPiBnZXRQcm9wZXJ0eURlc2NyaXB0b3JzKE9iamVjdCBvYmplY3QpIHsKKwkJaWYgKGl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzID09IG51bGwpIHsKKwkJCXN1cGVyLmdldFByb3BlcnR5RGVzY3JpcHRvcnMob2JqZWN0KTsKKworCQkJYWRkUGhhc2VQcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0KTsKKwkJCWFkZE1vZHVsYXRpb25BbXBsaXR1ZGVQcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0KTsKKwkJCWFkZFBlcmlvZFByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QpOworCQkJYWRkVXNlTGF0aXR1ZGVQcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0KTsKKwkJfQorCQlyZXR1cm4gaXRlbVByb3BlcnR5RGVzY3JpcHRvcnM7CisJfQorCisJLyoqCisJICogVGhpcyBhZGRzIGEgcHJvcGVydHkgZGVzY3JpcHRvciBmb3IgdGhlIFBoYXNlIGZlYXR1cmUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgYWRkUGhhc2VQcm9wZXJ0eURlc2NyaXB0b3IoT2JqZWN0IG9iamVjdCkgeworCQlpdGVtUHJvcGVydHlEZXNjcmlwdG9ycy5hZGQKKwkJCShjcmVhdGVJdGVtUHJvcGVydHlEZXNjcmlwdG9yCisJCQkJKCgoQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSlhZGFwdGVyRmFjdG9yeSkuZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCksCisJCQkJIGdldFJlc291cmNlTG9jYXRvcigpLAorCQkJCSBnZXRTdHJpbmcoIl9VSV9TZWFzb25hbFBvcHVsYXRpb25Nb2RlbF9waGFzZV9mZWF0dXJlIiksCisJCQkJIGdldFN0cmluZygiX1VJX1Byb3BlcnR5RGVzY3JpcHRvcl9kZXNjcmlwdGlvbiIsICJfVUlfU2Vhc29uYWxQb3B1bGF0aW9uTW9kZWxfcGhhc2VfZmVhdHVyZSIsICJfVUlfU2Vhc29uYWxQb3B1bGF0aW9uTW9kZWxfdHlwZSIpLAorCQkJCSBTdGFuZGFyZFBhY2thZ2UuTGl0ZXJhbHMuU0VBU09OQUxfUE9QVUxBVElPTl9NT0RFTF9fUEhBU0UsCisJCQkJIHRydWUsCisJCQkJIGZhbHNlLAorCQkJCSBmYWxzZSwKKwkJCQkgSXRlbVByb3BlcnR5RGVzY3JpcHRvci5SRUFMX1ZBTFVFX0lNQUdFLAorCQkJCSBudWxsLAorCQkJCSBudWxsKSk7CisJfQorCisJLyoqCisJICogVGhpcyBhZGRzIGEgcHJvcGVydHkgZGVzY3JpcHRvciBmb3IgdGhlIE1vZHVsYXRpb24gQW1wbGl0dWRlIGZlYXR1cmUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgYWRkTW9kdWxhdGlvbkFtcGxpdHVkZVByb3BlcnR5RGVzY3JpcHRvcihPYmplY3Qgb2JqZWN0KSB7CisJCWl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzLmFkZAorCQkJKGNyZWF0ZUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IKKwkJCQkoKChDb21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5KWFkYXB0ZXJGYWN0b3J5KS5nZXRSb290QWRhcHRlckZhY3RvcnkoKSwKKwkJCQkgZ2V0UmVzb3VyY2VMb2NhdG9yKCksCisJCQkJIGdldFN0cmluZygiX1VJX1NlYXNvbmFsUG9wdWxhdGlvbk1vZGVsX21vZHVsYXRpb25BbXBsaXR1ZGVfZmVhdHVyZSIpLAorCQkJCSBnZXRTdHJpbmcoIl9VSV9Qcm9wZXJ0eURlc2NyaXB0b3JfZGVzY3JpcHRpb24iLCAiX1VJX1NlYXNvbmFsUG9wdWxhdGlvbk1vZGVsX21vZHVsYXRpb25BbXBsaXR1ZGVfZmVhdHVyZSIsICJfVUlfU2Vhc29uYWxQb3B1bGF0aW9uTW9kZWxfdHlwZSIpLAorCQkJCSBTdGFuZGFyZFBhY2thZ2UuTGl0ZXJhbHMuU0VBU09OQUxfUE9QVUxBVElPTl9NT0RFTF9fTU9EVUxBVElPTl9BTVBMSVRVREUsCisJCQkJIHRydWUsCisJCQkJIGZhbHNlLAorCQkJCSBmYWxzZSwKKwkJCQkgSXRlbVByb3BlcnR5RGVzY3JpcHRvci5SRUFMX1ZBTFVFX0lNQUdFLAorCQkJCSBudWxsLAorCQkJCSBudWxsKSk7CisJfQorCisJLyoqCisJICogVGhpcyBhZGRzIGEgcHJvcGVydHkgZGVzY3JpcHRvciBmb3IgdGhlIFBlcmlvZCBmZWF0dXJlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIGFkZFBlcmlvZFByb3BlcnR5RGVzY3JpcHRvcihPYmplY3Qgb2JqZWN0KSB7CisJCWl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzLmFkZAorCQkJKGNyZWF0ZUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IKKwkJCQkoKChDb21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5KWFkYXB0ZXJGYWN0b3J5KS5nZXRSb290QWRhcHRlckZhY3RvcnkoKSwKKwkJCQkgZ2V0UmVzb3VyY2VMb2NhdG9yKCksCisJCQkJIGdldFN0cmluZygiX1VJX1NlYXNvbmFsUG9wdWxhdGlvbk1vZGVsX3BlcmlvZF9mZWF0dXJlIiksCisJCQkJIGdldFN0cmluZygiX1VJX1Byb3BlcnR5RGVzY3JpcHRvcl9kZXNjcmlwdGlvbiIsICJfVUlfU2Vhc29uYWxQb3B1bGF0aW9uTW9kZWxfcGVyaW9kX2ZlYXR1cmUiLCAiX1VJX1NlYXNvbmFsUG9wdWxhdGlvbk1vZGVsX3R5cGUiKSwKKwkJCQkgU3RhbmRhcmRQYWNrYWdlLkxpdGVyYWxzLlNFQVNPTkFMX1BPUFVMQVRJT05fTU9ERUxfX1BFUklPRCwKKwkJCQkgZmFsc2UsCisJCQkJIGZhbHNlLAorCQkJCSBmYWxzZSwKKwkJCQkgSXRlbVByb3BlcnR5RGVzY3JpcHRvci5SRUFMX1ZBTFVFX0lNQUdFLAorCQkJCSBudWxsLAorCQkJCSBudWxsKSk7CisJfQorCisJLyoqCisJICogVGhpcyBhZGRzIGEgcHJvcGVydHkgZGVzY3JpcHRvciBmb3IgdGhlIFVzZSBMYXRpdHVkZSBmZWF0dXJlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIGFkZFVzZUxhdGl0dWRlUHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdCBvYmplY3QpIHsKKwkJaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMuYWRkCisJCQkoY3JlYXRlSXRlbVByb3BlcnR5RGVzY3JpcHRvcgorCQkJCSgoKENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnkpYWRhcHRlckZhY3RvcnkpLmdldFJvb3RBZGFwdGVyRmFjdG9yeSgpLAorCQkJCSBnZXRSZXNvdXJjZUxvY2F0b3IoKSwKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfU2Vhc29uYWxQb3B1bGF0aW9uTW9kZWxfdXNlTGF0aXR1ZGVfZmVhdHVyZSIpLAorCQkJCSBnZXRTdHJpbmcoIl9VSV9Qcm9wZXJ0eURlc2NyaXB0b3JfZGVzY3JpcHRpb24iLCAiX1VJX1NlYXNvbmFsUG9wdWxhdGlvbk1vZGVsX3VzZUxhdGl0dWRlX2ZlYXR1cmUiLCAiX1VJX1NlYXNvbmFsUG9wdWxhdGlvbk1vZGVsX3R5cGUiKSwKKwkJCQkgU3RhbmRhcmRQYWNrYWdlLkxpdGVyYWxzLlNFQVNPTkFMX1BPUFVMQVRJT05fTU9ERUxfX1VTRV9MQVRJVFVERSwKKwkJCQkgdHJ1ZSwKKwkJCQkgZmFsc2UsCisJCQkJIGZhbHNlLAorCQkJCSBJdGVtUHJvcGVydHlEZXNjcmlwdG9yLkJPT0xFQU5fVkFMVUVfSU1BR0UsCisJCQkJIG51bGwsCisJCQkJIG51bGwpKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgU2Vhc29uYWxQb3B1bGF0aW9uTW9kZWwuZ2lmLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgT2JqZWN0IGdldEltYWdlKE9iamVjdCBvYmplY3QpIHsKKwkJcmV0dXJuIG92ZXJsYXlJbWFnZShvYmplY3QsIGdldFJlc291cmNlTG9jYXRvcigpLmdldEltYWdlKCJmdWxsL2N1c3RvbTE2L1NlYXNvbmFsUG9wdWxhdGlvbk1vZGVsIikpOworCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyB0aGUgbGFiZWwgdGV4dCBmb3IgdGhlIGFkYXB0ZWQgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBTdHJpbmcgZ2V0VGV4dChPYmplY3Qgb2JqZWN0KSB7CisJCXJldHVybiBzdXBlci5nZXRUZXh0KG9iamVjdCk7CisJfQorCisJLyoqCisJICogVGhpcyBoYW5kbGVzIG1vZGVsIG5vdGlmaWNhdGlvbnMgYnkgY2FsbGluZyB7QGxpbmsgI3VwZGF0ZUNoaWxkcmVufSB0byB1cGRhdGUgYW55IGNhY2hlZAorCSAqIGNoaWxkcmVuIGFuZCBieSBjcmVhdGluZyBhIHZpZXdlciBub3RpZmljYXRpb24sIHdoaWNoIGl0IHBhc3NlcyB0byB7QGxpbmsgI2ZpcmVOb3RpZnlDaGFuZ2VkfS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBub3RpZnlDaGFuZ2VkKE5vdGlmaWNhdGlvbiBub3RpZmljYXRpb24pIHsKKwkJdXBkYXRlQ2hpbGRyZW4obm90aWZpY2F0aW9uKTsKKworCQlzd2l0Y2ggKG5vdGlmaWNhdGlvbi5nZXRGZWF0dXJlSUQoU2Vhc29uYWxQb3B1bGF0aW9uTW9kZWwuY2xhc3MpKSB7CisJCQljYXNlIFN0YW5kYXJkUGFja2FnZS5TRUFTT05BTF9QT1BVTEFUSU9OX01PREVMX19QSEFTRToKKwkJCWNhc2UgU3RhbmRhcmRQYWNrYWdlLlNFQVNPTkFMX1BPUFVMQVRJT05fTU9ERUxfX01PRFVMQVRJT05fQU1QTElUVURFOgorCQkJY2FzZSBTdGFuZGFyZFBhY2thZ2UuU0VBU09OQUxfUE9QVUxBVElPTl9NT0RFTF9fUEVSSU9EOgorCQkJY2FzZSBTdGFuZGFyZFBhY2thZ2UuU0VBU09OQUxfUE9QVUxBVElPTl9NT0RFTF9fVVNFX0xBVElUVURFOgorCQkJCWZpcmVOb3RpZnlDaGFuZ2VkKG5ldyBWaWV3ZXJOb3RpZmljYXRpb24obm90aWZpY2F0aW9uLCBub3RpZmljYXRpb24uZ2V0Tm90aWZpZXIoKSwgZmFsc2UsIHRydWUpKTsKKwkJCQlyZXR1cm47CisJCX0KKwkJc3VwZXIubm90aWZ5Q2hhbmdlZChub3RpZmljYXRpb24pOworCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmVkaXQuY29tbWFuZC5Db21tYW5kUGFyYW1ldGVyfXMgZGVzY3JpYmluZyB0aGUgY2hpbGRyZW4KKwkgKiB0aGF0IGNhbiBiZSBjcmVhdGVkIHVuZGVyIHRoaXMgb2JqZWN0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIGNvbGxlY3ROZXdDaGlsZERlc2NyaXB0b3JzKENvbGxlY3Rpb248T2JqZWN0PiBuZXdDaGlsZERlc2NyaXB0b3JzLCBPYmplY3Qgb2JqZWN0KSB7CisJCXN1cGVyLmNvbGxlY3ROZXdDaGlsZERlc2NyaXB0b3JzKG5ld0NoaWxkRGVzY3JpcHRvcnMsIG9iamVjdCk7CisJfQorCit9CmRpZmYgLS1naXQgYS9tb2RlbHMvcG9wdWxhdGlvbnMvb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3BvcHVsYXRpb25tb2RlbHMvc3RhbmRhcmQvcHJvdmlkZXIvU3RhbmRhcmRFZGl0UGx1Z2luLmphdmEgYi9tb2RlbHMvcG9wdWxhdGlvbnMvb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3BvcHVsYXRpb25tb2RlbHMvc3RhbmRhcmQvcHJvdmlkZXIvU3RhbmRhcmRFZGl0UGx1Z2luLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2I1MDAyYgotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9wb3B1bGF0aW9ucy9vcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vcG9wdWxhdGlvbm1vZGVscy9zdGFuZGFyZC9wcm92aWRlci9TdGFuZGFyZEVkaXRQbHVnaW4uamF2YQpAQCAtMCwwICsxLDEwNSBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQucHJvdmlkZXI7DQorDQorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisgKiBDb3B5cmlnaHQgKGMpIDIwMDkgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuDQorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscw0KKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMA0KKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0DQorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwNCisgKg0KKyAqIENvbnRyaWJ1dG9yczoNCisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uDQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQorDQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24uRU1GUGx1Z2luOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuUmVzb3VyY2VMb2NhdG9yOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUucHJvdmlkZXIuRWNvcmVFZGl0UGx1Z2luOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLnByb3ZpZGVyLkNvcmVFZGl0UGx1Z2luOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmVkZ2VzLnByb3ZpZGVyLkRlZmluaXRpb25zRWRpdFBsdWdpbjsNCisNCisvKioNCisgKiBUaGlzIGlzIHRoZSBjZW50cmFsIHNpbmdsZXRvbiBmb3IgdGhlIFN0YW5kYXJkIGVkaXQgcGx1Z2luLg0KKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorICogQGdlbmVyYXRlZA0KKyAqLw0KK0BTdXBwcmVzc1dhcm5pbmdzKCJzeW50aGV0aWMtYWNjZXNzIikNCitwdWJsaWMgZmluYWwgY2xhc3MgU3RhbmRhcmRFZGl0UGx1Z2luIGV4dGVuZHMgRU1GUGx1Z2luIHsNCisJLyoqDQorCSAqIEtlZXAgdHJhY2sgb2YgdGhlIHNpbmdsZXRvbi4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RhbmRhcmRFZGl0UGx1Z2luIElOU1RBTkNFID0gbmV3IFN0YW5kYXJkRWRpdFBsdWdpbigpOw0KKw0KKwkvKioNCisJICogS2VlcCB0cmFjayBvZiB0aGUgc2luZ2xldG9uLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJpdmF0ZSBzdGF0aWMgSW1wbGVtZW50YXRpb24gcGx1Z2luOw0KKw0KKwkvKioNCisJICogQ3JlYXRlIHRoZSBpbnN0YW5jZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBTdGFuZGFyZEVkaXRQbHVnaW4oKSB7DQorCQlzdXBlcg0KKwkJICAobmV3IFJlc291cmNlTG9jYXRvciBbXSB7DQorCQkgICAgIENvcmVFZGl0UGx1Z2luLklOU1RBTkNFLA0KKwkJICAgICBEZWZpbml0aW9uc0VkaXRQbHVnaW4uSU5TVEFOQ0UsDQorCQkgICAgIEVjb3JlRWRpdFBsdWdpbi5JTlNUQU5DRSwNCisJCSAgIH0pOw0KKwl9DQorDQorCS8qKg0KKwkgKiBSZXR1cm5zIHRoZSBzaW5nbGV0b24gaW5zdGFuY2Ugb2YgdGhlIEVjbGlwc2UgcGx1Z2luLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHJldHVybiB0aGUgc2luZ2xldG9uIGluc3RhbmNlLg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlAT3ZlcnJpZGUNCisJcHVibGljIFJlc291cmNlTG9jYXRvciBnZXRQbHVnaW5SZXNvdXJjZUxvY2F0b3IoKSB7DQorCQlyZXR1cm4gcGx1Z2luOw0KKwl9DQorDQorCS8qKg0KKwkgKiBSZXR1cm5zIHRoZSBzaW5nbGV0b24gaW5zdGFuY2Ugb2YgdGhlIEVjbGlwc2UgcGx1Z2luLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHJldHVybiB0aGUgc2luZ2xldG9uIGluc3RhbmNlLg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgc3RhdGljIEltcGxlbWVudGF0aW9uIGdldFBsdWdpbigpIHsNCisJCXJldHVybiBwbHVnaW47DQorCX0NCisNCisJLyoqDQorCSAqIFRoZSBhY3R1YWwgaW1wbGVtZW50YXRpb24gb2YgdGhlIEVjbGlwc2UgPGI+UGx1Z2luPC9iPi4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBzdGF0aWMgY2xhc3MgSW1wbGVtZW50YXRpb24gZXh0ZW5kcyBFY2xpcHNlUGx1Z2luIHsNCisJCS8qKg0KKwkJICogQ3JlYXRlcyBhbiBpbnN0YW5jZS4NCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJCSAqIEBnZW5lcmF0ZWQNCisJCSAqLw0KKwkJDQorCQlwdWJsaWMgSW1wbGVtZW50YXRpb24oKSB7DQorCQkJc3VwZXIoKTsNCisNCisJCQkvLyBSZW1lbWJlciB0aGUgc3RhdGljIGluc3RhbmNlLg0KKwkJCS8vDQorCQkJcGx1Z2luID0gdGhpczsNCisJCX0NCisJfQ0KKw0KK30NCmRpZmYgLS1naXQgYS9tb2RlbHMvcG9wdWxhdGlvbnMvb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3BvcHVsYXRpb25tb2RlbHMvc3RhbmRhcmQvcHJvdmlkZXIvU3RhbmRhcmRIaXN0b3J5UHJvdmlkZXJBZGFwdGVyRmFjdG9yeS5qYXZhIGIvbW9kZWxzL3BvcHVsYXRpb25zL29yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9wb3B1bGF0aW9ubW9kZWxzL3N0YW5kYXJkL3Byb3ZpZGVyL1N0YW5kYXJkSGlzdG9yeVByb3ZpZGVyQWRhcHRlckZhY3RvcnkuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNDVlYjdkCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL3BvcHVsYXRpb25zL29yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9wb3B1bGF0aW9ubW9kZWxzL3N0YW5kYXJkL3Byb3ZpZGVyL1N0YW5kYXJkSGlzdG9yeVByb3ZpZGVyQWRhcHRlckZhY3RvcnkuamF2YQpAQCAtMCwwICsxLDI5MiBAQAorLy8gU3RhbmRhcmRIaXN0b3J5UHJvdmlkZXJBZGFwdGVyRmFjdG9yeS5qYXZhCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5wcm92aWRlcjsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbnM7CitpbXBvcnQgamF2YS51dGlsLkRhdGU7CitpbXBvcnQgamF2YS51dGlsLk1hcDsKK2ltcG9ydCBqYXZhLnV0aWwuVHJlZU1hcDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LkFkYXB0ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS51dGlsLkVjb3JlVXRpbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5DaGFuZ2VOb3RpZmllcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5Db21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkNvbXBvc2VkQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUNoYW5nZU5vdGlmaWVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklOb3RpZnlDaGFuZ2VkTGlzdGVuZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5hZGFwdGVycy5oaXN0b3J5Lkhpc3RvcnlQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmFkYXB0ZXJzLmhpc3RvcnkuSGlzdG9yeVByb3ZpZGVyQWRhcHRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmFkYXB0ZXJzLmhpc3RvcnkuSGlzdG9yeVByb3ZpZGVyQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5JZGVudGlmaWFibGU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkdyYXBoUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguTGFiZWxWYWx1ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuTW9kZWxGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5TVEVNVGltZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmFkYXB0ZXJzLnJlbGF0aXZldmFsdWUuUmVsYXRpdmVWYWx1ZVByb3ZpZGVyQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLlBvcHVsYXRpb25Nb2RlbExhYmVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC51dGlsLlN0YW5kYXJkQWRhcHRlckZhY3Rvcnk7CisKKworLyoqCisgKiBUaGlzIGNsYXNzIHJlcHJlc2VudHMKKyAqLworcHVibGljIGNsYXNzIFN0YW5kYXJkSGlzdG9yeVByb3ZpZGVyQWRhcHRlckZhY3RvcnkgZXh0ZW5kcworCQlTdGFuZGFyZEFkYXB0ZXJGYWN0b3J5IGltcGxlbWVudHMgUmVsYXRpdmVWYWx1ZVByb3ZpZGVyQWRhcHRlckZhY3RvcnkgeworCisJLyoqCisJICogVGhpcyBrZWVwcyB0cmFjayBvZiB0aGUgcm9vdCBhZGFwdGVyIGZhY3RvcnkgdGhhdCBkZWxlZ2F0ZXMgdG8gdGhpcworCSAqIGFkYXB0ZXIgZmFjdG9yeS4KKwkgKi8KKwlwcm90ZWN0ZWQgQ29tcG9zZWRBZGFwdGVyRmFjdG9yeSBwYXJlbnRBZGFwdGVyRmFjdG9yeTsKKworCS8qKgorCSAqIFRoaXMgaXMgdXNlZCB0byBpbXBsZW1lbnQKKwkgKiB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUNoYW5nZU5vdGlmaWVyfS4KKwkgKi8KKwlwcm90ZWN0ZWQgSUNoYW5nZU5vdGlmaWVyIGNoYW5nZU5vdGlmaWVyID0gbmV3IENoYW5nZU5vdGlmaWVyKCk7CisKKwkvKioKKwkgKiBEZWZhdWx0IENvbnN0cnVjdG9yCisJICovCisJcHVibGljIFN0YW5kYXJkSGlzdG9yeVByb3ZpZGVyQWRhcHRlckZhY3RvcnkoKSB7CisJCXN1cGVyKCk7CisJCUhpc3RvcnlQcm92aWRlckFkYXB0ZXJGYWN0b3J5LklOU1RBTkNFLmFkZEFkYXB0ZXJGYWN0b3J5KHRoaXMpOworCX0gLy8gU3RhbmRhcmRIaXN0b3J5UHJvdmlkZXJBZGFwdGVyRmFjdG9yeQorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQudXRpbC5TdGFuZGFyZEFkYXB0ZXJGYWN0b3J5I2NyZWF0ZVBvcHVsYXRpb25Nb2RlbExhYmVsQWRhcHRlcigpCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlUG9wdWxhdGlvbk1vZGVsTGFiZWxBZGFwdGVyKCkgeworCQlyZXR1cm4gbmV3IFBvcHVsYXRpb25Nb2RlbExhYmVsSGlzdG9yeVByb3ZpZGVyKCk7CisJfSAvLyBjcmVhdGVQb3B1bGF0aW9uTW9kZWxMYWJlbEFkYXB0ZXIKKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUNoYW5nZU5vdGlmaWVyI2FkZExpc3RlbmVyKG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklOb3RpZnlDaGFuZ2VkTGlzdGVuZXIpCisJICovCisJcHVibGljIHZvaWQgYWRkTGlzdGVuZXIoZmluYWwgSU5vdGlmeUNoYW5nZWRMaXN0ZW5lciBub3RpZnlDaGFuZ2VkTGlzdGVuZXIpIHsKKwkJY2hhbmdlTm90aWZpZXIuYWRkTGlzdGVuZXIobm90aWZ5Q2hhbmdlZExpc3RlbmVyKTsKKwl9CisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklDaGFuZ2VOb3RpZmllciNmaXJlTm90aWZ5Q2hhbmdlZChvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb24pCisJICovCisJcHVibGljIHZvaWQgZmlyZU5vdGlmeUNoYW5nZWQoZmluYWwgTm90aWZpY2F0aW9uIG5vdGlmaWNhdGlvbikgeworCQljaGFuZ2VOb3RpZmllci5maXJlTm90aWZ5Q2hhbmdlZChub3RpZmljYXRpb24pOworCQlpZiAocGFyZW50QWRhcHRlckZhY3RvcnkgIT0gbnVsbCkgeworCQkJcGFyZW50QWRhcHRlckZhY3RvcnkuZmlyZU5vdGlmeUNoYW5nZWQobm90aWZpY2F0aW9uKTsKKwkJfQorCX0KKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUNoYW5nZU5vdGlmaWVyI3JlbW92ZUxpc3RlbmVyKG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklOb3RpZnlDaGFuZ2VkTGlzdGVuZXIpCisJICovCisJcHVibGljIHZvaWQgcmVtb3ZlTGlzdGVuZXIoCisJCQlmaW5hbCBJTm90aWZ5Q2hhbmdlZExpc3RlbmVyIG5vdGlmeUNoYW5nZWRMaXN0ZW5lcikgeworCQljaGFuZ2VOb3RpZmllci5yZW1vdmVMaXN0ZW5lcihub3RpZnlDaGFuZ2VkTGlzdGVuZXIpOworCX0KKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSNnZXRSb290QWRhcHRlckZhY3RvcnkoKQorCSAqLworCXB1YmxpYyBDb21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5IGdldFJvb3RBZGFwdGVyRmFjdG9yeSgpIHsKKwkJcmV0dXJuIHBhcmVudEFkYXB0ZXJGYWN0b3J5ID09IG51bGwgPyB0aGlzIDogcGFyZW50QWRhcHRlckZhY3RvcnkKKwkJCQkuZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCk7CisJfQorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5Db21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5I3NldFBhcmVudEFkYXB0ZXJGYWN0b3J5KG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkNvbXBvc2VkQWRhcHRlckZhY3RvcnkpCisJICovCisJcHVibGljIHZvaWQgc2V0UGFyZW50QWRhcHRlckZhY3RvcnkoCisJCQlmaW5hbCBDb21wb3NlZEFkYXB0ZXJGYWN0b3J5IHBhcmVudEFkYXB0ZXJGYWN0b3J5KSB7CisJCXRoaXMucGFyZW50QWRhcHRlckZhY3RvcnkgPSBwYXJlbnRBZGFwdGVyRmFjdG9yeTsKKwl9CisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC51dGlsLlN0YW5kYXJkQWRhcHRlckZhY3RvcnkjaXNGYWN0b3J5Rm9yVHlwZShqYXZhLmxhbmcuT2JqZWN0KQorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBib29sZWFuIGlzRmFjdG9yeUZvclR5cGUoZmluYWwgT2JqZWN0IHR5cGUpIHsKKwkJcmV0dXJuIHR5cGUgPT0gSGlzdG9yeVByb3ZpZGVyLmNsYXNzIHx8IHN1cGVyLmlzRmFjdG9yeUZvclR5cGUodHlwZSk7CisJfSAvLyBpc0ZhY3RvcnlGb3JUeXBlCisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklEaXNwb3NhYmxlI2Rpc3Bvc2UoKQorCSAqLworCXB1YmxpYyB2b2lkIGRpc3Bvc2UoKSB7CisJCS8vIE5vdGhpbmcKKwl9CisKKwkvKioKKwkgKiBUaGlzIGNsYXNzIGlzIGEgSGlzdG9yeSBQcm92aWRlciBmb3IgUG9wdWxhdGlvbk1vZGVsTGFiZWwgaW5zdGFuY2VzLiBJdAorCSAqIHByb3ZpZGVzIGEgY29sbGVjdGlvbiBvZiBoaXN0b3JpYyB2YWx1ZXMgb2YgYSBQb3B1bGF0aW9uTW9kZWxMYWJlbAorCSAqLworCXByaXZhdGUgc3RhdGljIGNsYXNzIFBvcHVsYXRpb25Nb2RlbExhYmVsSGlzdG9yeVByb3ZpZGVyIGV4dGVuZHMKKwkJCUhpc3RvcnlQcm92aWRlckFkYXB0ZXIgaW1wbGVtZW50cyBIaXN0b3J5UHJvdmlkZXIgeworCisJCWxvbmcgY3ljbGUgPSAwTDsKKwkJZmluYWwgU1RFTVRpbWUgc3RhcnRUaW1lID0gTW9kZWxGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVTVEVNVGltZSgpOworCisJCWZpbmFsIE1hcDxTVEVNVGltZSwgUG9wdWxhdGlvbk1vZGVsTGFiZWw+IGhpc3RvcnkgPSBDb2xsZWN0aW9ucy5zeW5jaHJvbml6ZWRNYXAobmV3IFRyZWVNYXA8U1RFTVRpbWUsIFBvcHVsYXRpb25Nb2RlbExhYmVsPigpKTsKKworCQkKKwkJLyoqCisJCSAqIEBzZWUgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuaW1wbC5BZGFwdGVySW1wbCNub3RpZnlDaGFuZ2VkKG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbikKKwkJICovCisJCUBPdmVycmlkZQorCQlwdWJsaWMgdm9pZCBub3RpZnlDaGFuZ2VkKGZpbmFsIE5vdGlmaWNhdGlvbiBtc2cpIHsKKwkJCXN3aXRjaCAobXNnLmdldEV2ZW50VHlwZSgpKSB7CisJCQljYXNlIE5vdGlmaWNhdGlvbi5TRVQ6CisJCQkJLy8gSXMgaXQgc2V0dGluZyB0aGUgbmV4dFZhbHVlPworCQkJCXN3aXRjaCAobXNnLmdldEZlYXR1cmVJRChMYWJlbFZhbHVlLmNsYXNzKSkgeworCQkJCWNhc2UgR3JhcGhQYWNrYWdlLkRZTkFNSUNfTEFCRUxfX05FWFRfVkFMVUU6CisJCQkJCS8vIElmIHRoZSBuZXh0IHZhbHVlIG51bGw/CisJCQkJCQorCQkJCQlpZiAobXNnLmdldE5ld1ZhbHVlKCkgIT0gbnVsbCkgeworCQkJCQkJLy8gTm8KKwkJCQkJCVNURU1UaW1lIHRpbWVLZXkgPSBnZW5lcmF0ZU5leHRTVEVNVGltZShjeWNsZSsrKTsKKwkJCQkJCXN5bmNocm9uaXplZCAoaGlzdG9yeSkgeworCQkJCQkJCS8vIE1ha2Ugb2YgY29weSBvZiB0aGUgZGlzZWFzZSBtb2RlbCBsYWJlbAorCQkJCQkJCWZpbmFsIFBvcHVsYXRpb25Nb2RlbExhYmVsIGRtbCA9IChQb3B1bGF0aW9uTW9kZWxMYWJlbClFY29yZVV0aWwKKwkJCQkJCQkJCS5jb3B5KChQb3B1bGF0aW9uTW9kZWxMYWJlbCkgZ2V0VGFyZ2V0KCkpOworCQkJCQkJCS8vIFdoZW4geW91IGNvcHkgYW4gRU9iamVjdCwgdGhlIHJlZmVyZW5jZXMgYXJlCisJCQkJCQkJLy8gY29waWVkIGFzIHdlbGwgdGhpcyBtZWFucyB0aGF0IHRoZSBOb2RlIHRoYXQKKwkJCQkJCQkvLyByZWZlcmVuY2VkIHRoZSBvcmlnaW5hbCBQb3B1bGF0aW9uTW9kZWxMYWJlbCB3aWxsCisJCQkJCQkJLy8gYWxzbyByZWZlcmVuY2UgdGhlIGNvcHkuIFRoaXMgYWRkcyB0aGUgY29weSB0bworCQkJCQkJCS8vIHRoZSBsaXN0IG9mIExhYmVscyBtYWludGFpbmVkIGJ5IHRoZSBOb2RlLiBXZQorCQkJCQkJCS8vIG5lZWQgdG8gcmVtb3ZlIGl0IGZyb20gdGhlIGxpc3Qgc28gdGhhdCB3ZSBkb24ndAorCQkJCQkJCS8vIGdldCBleHRyYW5lb3VzIExhYmVscyBoYW5naW5nIGFyb3VuZC4KKwkJCQkJCQlkbWwuZ2V0Tm9kZSgpLmdldExhYmVscygpLnJlbW92ZShkbWwpOworCQkJCQkJCWhpc3RvcnkucHV0KHRpbWVLZXksIGRtbCk7CisJCQkJCQl9Ly8gc3luY2hyb25pemVkCisJCQkJCQlmaXJlSGlzdG9yeUV4dGVuZGVkKCk7CisJCQkJCX0gLy8gaWYgbm90IG51bGwKKwkJCQkJYnJlYWs7CisKKwkJCQlkZWZhdWx0OgorCQkJCQlicmVhazsKKwkJCQl9IC8vIHN3aXRjaCBMYWJlbFZhbHVlIGZlYXR1cmUgSWQKKwkJCQlicmVhazsKKworCQkJZGVmYXVsdDoKKwkJCQlicmVhazsKKwkJCX0gLy8gc3dpdGNoCisKKwkJfSAvLyBub3RpZnlDaGFuZ2VkCisKKwkJLyoqCisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5hZGFwdGVycy5oaXN0b3J5Lkhpc3RvcnlQcm92aWRlckFkYXB0ZXIjZ2V0QWxsSGlzdG9yaWNUaW1lVmFsdWVzKCkKKwkJICovCisJCUBPdmVycmlkZQorCQlwdWJsaWMgU1RFTVRpbWVbXSBnZXRBbGxIaXN0b3JpY1RpbWVWYWx1ZXMoKSB7CisJCQlTVEVNVGltZVtdIHRpbWUgPSBudWxsOworCQkJc3luY2hyb25pemVkKGhpc3RvcnkpIHsKKwkJCQl0aW1lPWhpc3Rvcnkua2V5U2V0KCkudG9BcnJheShuZXcgU1RFTVRpbWVbMF0pOworCQkJfQorCQkJcmV0dXJuIHRpbWU7CisJCX0KKworCQkvKioKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmFkYXB0ZXJzLmhpc3RvcnkuSGlzdG9yeVByb3ZpZGVyQWRhcHRlciNnZXRBbGxIaXN0b3JpY0luc3RhbmNlcygpCisJCSAqLworCQlAT3ZlcnJpZGUKKwkJcHVibGljIElkZW50aWZpYWJsZVtdIGdldEFsbEhpc3RvcmljSW5zdGFuY2VzKCkgeworCQkJSWRlbnRpZmlhYmxlW10gYWxsSW5zdGFuY2VzID0gbnVsbDsKKwkJCXN5bmNocm9uaXplZChoaXN0b3J5KSB7CisJCQkJYWxsSW5zdGFuY2VzPWhpc3RvcnkudmFsdWVzKCkudG9BcnJheShuZXcgSWRlbnRpZmlhYmxlWzBdKTsKKwkJCX0KKwkJCXJldHVybiBhbGxJbnN0YW5jZXM7CisJCX0KKworCQkKKworCQkvKioKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmFkYXB0ZXJzLmhpc3RvcnkuSGlzdG9yeVByb3ZpZGVyQWRhcHRlciNnZXRIaXN0b3JpY0luc3RhbmNlcygpCisJCSAqLworCQlAT3ZlcnJpZGUKKwkJcHVibGljIElkZW50aWZpYWJsZVtdIGdldEhpc3RvcmljSW5zdGFuY2VzKFNURU1UaW1lW10gdGltZVJhbmdlKSB7CisJCQlJZGVudGlmaWFibGVbXSBhbGxWYWx1ZXMgPSBnZXRBbGxIaXN0b3JpY0luc3RhbmNlcygpOworCQkJSWRlbnRpZmlhYmxlW10gcmV0VmFsID0gbmV3IElkZW50aWZpYWJsZVt0aW1lUmFuZ2UubGVuZ3RoXTsKKwkJCVN5c3RlbS5hcnJheWNvcHkoYWxsVmFsdWVzLCAwLCByZXRWYWwsIDAsIHRpbWVSYW5nZS5sZW5ndGgpOworCQkJcmV0dXJuIHJldFZhbDsKKwkJfQorCQkKKwkJLyoqCisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5hZGFwdGVycy5oaXN0b3J5Lkhpc3RvcnlQcm92aWRlckFkYXB0ZXIjZ2V0RWFybGllc3RDeWNsZU51bWJlcigpCisJCSAqLworCQlAT3ZlcnJpZGUKKwkJcHVibGljIGludCBnZXRFYXJsaWVzdEN5Y2xlTnVtYmVyKCkgeworCQkJbG9uZyByZXRWYWx1ZSA9IDA7CisJCQlzeW5jaHJvbml6ZWQoaGlzdG9yeSkgeworCQkJCXRyeSB7CisJCQkJCXJldFZhbHVlID0gaGlzdG9yeS5rZXlTZXQoKS50b0FycmF5KG5ldyBMb25nWzBdKVswXS5sb25nVmFsdWUoKTsKKwkJCQl9IGNhdGNoIChmaW5hbCBSdW50aW1lRXhjZXB0aW9uIGUpIHsKKwkJCQkJLy8gSWdub3JlLCByZXR1cm4gMAorCQkJCX0KKwkJCX0KKwkJCXJldHVybiAoaW50KSByZXRWYWx1ZTsKKwkJfSAvLyBnZXRFYXJsaWVzdEN5Y2xlTnVtYmVyCisKKwkJLyoqCisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5hZGFwdGVycy5oaXN0b3J5Lkhpc3RvcnlQcm92aWRlckFkYXB0ZXIjZ2V0RWFybGllc3RUaW1lVmFsdWUoKQorCQkgKi8KKwkJQE92ZXJyaWRlCisJCXB1YmxpYyBTVEVNVGltZSBnZXRFYXJsaWVzdFRpbWVWYWx1ZSgpIHsKKwkJCXJldHVybiBnZW5lcmF0ZUhpc3RvcmljU1RFTVRpbWUoZ2V0RWFybGllc3RDeWNsZU51bWJlcigpKTsKKwkJfQorCisJCS8qKgorCQkgKiBAcmV0dXJuCisJCSAqLworCQlwcml2YXRlIFNURU1UaW1lIGdlbmVyYXRlSGlzdG9yaWNTVEVNVGltZShmaW5hbCBpbnQgZGF5c0luUGFzdCkgeworCQkJZmluYWwgU1RFTVRpbWUgcmV0VmFsdWUgPSBNb2RlbEZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZVNURU1UaW1lKCk7CisJCQlmaW5hbCBsb25nIGRheXNBZ28gPSByZXRWYWx1ZS5nZXRUaW1lKCkuZ2V0VGltZSgpIC0gZGF5c0luUGFzdAorCQkJCQkqIFNURU1UaW1lLlVuaXRzLkRBWS5nZXRNaWxsaXNlY29uZHMoKTsKKwkJCXJldFZhbHVlLnNldFRpbWUobmV3IERhdGUoZGF5c0FnbykpOworCQkJcmV0dXJuIHJldFZhbHVlOworCQl9IC8vIGdlbmVyYXRlSGlzdG9yaWNTVEVNVGltZQorCQkKKworCQkvKioKKwkJICogQHJldHVybgorCQkgKi8KKwkJcHJpdmF0ZSBTVEVNVGltZSBnZW5lcmF0ZU5leHRTVEVNVGltZShmaW5hbCBsb25nIGRheXNJbkZ1dHVyZSkgeworCQkJZmluYWwgU1RFTVRpbWUgcmV0VmFsdWUgPSBNb2RlbEZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZVNURU1UaW1lKCk7CisJCQlmaW5hbCBsb25nIGRheSA9IHN0YXJ0VGltZS5nZXRUaW1lKCkuZ2V0VGltZSgpICsgZGF5c0luRnV0dXJlCisJCQkJCSogU1RFTVRpbWUuVW5pdHMuREFZLmdldE1pbGxpc2Vjb25kcygpOworCQkJcmV0VmFsdWUuc2V0VGltZShuZXcgRGF0ZShkYXkpKTsKKwkJCXJldHVybiByZXRWYWx1ZTsKKwkJfSAvLyBnZW5lcmF0ZUhpc3RvcmljU1RFTVRpbWUKKwkJCisJCQorCisJCS8qKgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uYWRhcHRlcnMuaGlzdG9yeS5IaXN0b3J5UHJvdmlkZXJBZGFwdGVyI3Jlc2V0KCkKKwkJICovCisJCUBPdmVycmlkZQorCQlwdWJsaWMgdm9pZCByZXNldCgpIHsKKworCQkJY3ljbGUgPSAwOworCQkJc3luY2hyb25pemVkKGhpc3RvcnkpIHsKKwkJCQloaXN0b3J5LmNsZWFyKCk7CisJCQl9CisJCQkKKwkJCS8vIFRoZSBzdXBlciBjbGFzcyB3aWxsIHRlbGwgdGhlIGxpc3RlbmVycyB0aGF0IHRoZSBoaXN0b3J5IGhhcworCQkJLy8gY2hhbmdlZC4KKwkJCXN1cGVyLnJlc2V0KCk7CisJCX0KKworCX0gLy8gUG9wdWxhdGlvbk1vZGVsTGFiZWxIaXN0b3J5UHJvdmlkZXIKKworfSAvLyBTdGFuZGFyZEhpc3RvcnlQcm92aWRlckFkYXB0ZXJGYWN0b3J5CmRpZmYgLS1naXQgYS9tb2RlbHMvcG9wdWxhdGlvbnMvb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3BvcHVsYXRpb25tb2RlbHMvc3RhbmRhcmQvcHJvdmlkZXIvU3RhbmRhcmRJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeS5qYXZhIGIvbW9kZWxzL3BvcHVsYXRpb25zL29yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9wb3B1bGF0aW9ubW9kZWxzL3N0YW5kYXJkL3Byb3ZpZGVyL1N0YW5kYXJkSXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43OTNkMWIwCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL3BvcHVsYXRpb25zL29yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9wb3B1bGF0aW9ubW9kZWxzL3N0YW5kYXJkL3Byb3ZpZGVyL1N0YW5kYXJkSXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkuamF2YQpAQCAtMCwwICsxLDUxOCBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQucHJvdmlkZXI7DQorDQorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisgKiBDb3B5cmlnaHQgKGMpIDIwMDkgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuDQorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscw0KKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMA0KKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0DQorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwNCisgKg0KKyAqIENvbnRyaWJ1dG9yczoNCisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uDQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQorDQoraW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7DQoraW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOw0KKw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5BZGFwdGVyOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb247DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWVyOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5DaGFuZ2VOb3RpZmllcjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeTsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuQ29tcG9zZWRBZGFwdGVyRmFjdG9yeTsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUNoYW5nZU5vdGlmaWVyOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JRGlzcG9zYWJsZTsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUVkaXRpbmdEb21haW5JdGVtUHJvdmlkZXI7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtTGFiZWxQcm92aWRlcjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1Qcm9wZXJ0eVNvdXJjZTsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSU5vdGlmeUNoYW5nZWRMaXN0ZW5lcjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVN0cnVjdHVyZWRJdGVtQ29udGVudFByb3ZpZGVyOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JVHJlZUl0ZW1Db250ZW50UHJvdmlkZXI7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC51dGlsLlN0YW5kYXJkQWRhcHRlckZhY3Rvcnk7DQorDQorLyoqDQorICogVGhpcyBpcyB0aGUgZmFjdG9yeSB0aGF0IGlzIHVzZWQgdG8gcHJvdmlkZSB0aGUgaW50ZXJmYWNlcyBuZWVkZWQgdG8gc3VwcG9ydCBWaWV3ZXJzLg0KKyAqIFRoZSBhZGFwdGVycyBnZW5lcmF0ZWQgYnkgdGhpcyBmYWN0b3J5IGNvbnZlcnQgRU1GIGFkYXB0ZXIgbm90aWZpY2F0aW9ucyBpbnRvIGNhbGxzIHRvIHtAbGluayAjZmlyZU5vdGlmeUNoYW5nZWQgZmlyZU5vdGlmeUNoYW5nZWR9Lg0KKyAqIFRoZSBhZGFwdGVycyBhbHNvIHN1cHBvcnQgRWNsaXBzZSBwcm9wZXJ0eSBzaGVldHMuDQorICogTm90ZSB0aGF0IG1vc3Qgb2YgdGhlIGFkYXB0ZXJzIGFyZSBzaGFyZWQgYW1vbmcgbXVsdGlwbGUgaW5zdGFuY2VzLg0KKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorICogQGdlbmVyYXRlZA0KKyAqLw0KK3B1YmxpYyBjbGFzcyBTdGFuZGFyZEl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5IGV4dGVuZHMgU3RhbmRhcmRBZGFwdGVyRmFjdG9yeSBpbXBsZW1lbnRzIENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnksIElDaGFuZ2VOb3RpZmllciwgSURpc3Bvc2FibGUgew0KKwkvKioNCisJICogVGhpcyBrZWVwcyB0cmFjayBvZiB0aGUgcm9vdCBhZGFwdGVyIGZhY3RvcnkgdGhhdCBkZWxlZ2F0ZXMgdG8gdGhpcyBhZGFwdGVyIGZhY3RvcnkuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgQ29tcG9zZWRBZGFwdGVyRmFjdG9yeSBwYXJlbnRBZGFwdGVyRmFjdG9yeTsNCisNCisJLyoqDQorCSAqIFRoaXMgaXMgdXNlZCB0byBpbXBsZW1lbnQge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklDaGFuZ2VOb3RpZmllcn0uDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgSUNoYW5nZU5vdGlmaWVyIGNoYW5nZU5vdGlmaWVyID0gbmV3IENoYW5nZU5vdGlmaWVyKCk7DQorDQorCS8qKg0KKwkgKiBUaGlzIGtlZXBzIHRyYWNrIG9mIGFsbCB0aGUgc3VwcG9ydGVkIHR5cGVzIGNoZWNrZWQgYnkge0BsaW5rICNpc0ZhY3RvcnlGb3JUeXBlIGlzRmFjdG9yeUZvclR5cGV9Lg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIENvbGxlY3Rpb248T2JqZWN0PiBzdXBwb3J0ZWRUeXBlcyA9IG5ldyBBcnJheUxpc3Q8T2JqZWN0PigpOw0KKw0KKwkvKioNCisJICogVGhpcyBjb25zdHJ1Y3RzIGFuIGluc3RhbmNlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIFN0YW5kYXJkSXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkoKSB7DQorCQlzdXBwb3J0ZWRUeXBlcy5hZGQoSUVkaXRpbmdEb21haW5JdGVtUHJvdmlkZXIuY2xhc3MpOw0KKwkJc3VwcG9ydGVkVHlwZXMuYWRkKElTdHJ1Y3R1cmVkSXRlbUNvbnRlbnRQcm92aWRlci5jbGFzcyk7DQorCQlzdXBwb3J0ZWRUeXBlcy5hZGQoSVRyZWVJdGVtQ29udGVudFByb3ZpZGVyLmNsYXNzKTsNCisJCXN1cHBvcnRlZFR5cGVzLmFkZChJSXRlbUxhYmVsUHJvdmlkZXIuY2xhc3MpOw0KKwkJc3VwcG9ydGVkVHlwZXMuYWRkKElJdGVtUHJvcGVydHlTb3VyY2UuY2xhc3MpOw0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIGtlZXBzIHRyYWNrIG9mIHRoZSBvbmUgYWRhcHRlciB1c2VkIGZvciBhbGwge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZFBvcHVsYXRpb25Nb2RlbH0gaW5zdGFuY2VzLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIFN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsSXRlbVByb3ZpZGVyIHN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsSXRlbVByb3ZpZGVyOw0KKw0KKwkvKioNCisJICogVGhpcyBjcmVhdGVzIGFuIGFkYXB0ZXIgZm9yIGEge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZFBvcHVsYXRpb25Nb2RlbH0uDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlAT3ZlcnJpZGUNCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxBZGFwdGVyKCkgew0KKwkJaWYgKHN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsSXRlbVByb3ZpZGVyID09IG51bGwpIHsNCisJCQlzdGFuZGFyZFBvcHVsYXRpb25Nb2RlbEl0ZW1Qcm92aWRlciA9IG5ldyBTdGFuZGFyZFBvcHVsYXRpb25Nb2RlbEl0ZW1Qcm92aWRlcih0aGlzKTsNCisJCX0NCisNCisJCXJldHVybiBzdGFuZGFyZFBvcHVsYXRpb25Nb2RlbEl0ZW1Qcm92aWRlcjsNCisJfQ0KKw0KKwkvKioNCisJICogVGhpcyBrZWVwcyB0cmFjayBvZiB0aGUgb25lIGFkYXB0ZXIgdXNlZCBmb3IgYWxsIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuUG9wdWxhdGlvbk1vZGVsTGFiZWx9IGluc3RhbmNlcy4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCBQb3B1bGF0aW9uTW9kZWxMYWJlbEl0ZW1Qcm92aWRlciBwb3B1bGF0aW9uTW9kZWxMYWJlbEl0ZW1Qcm92aWRlcjsNCisNCisJLyoqDQorCSAqIFRoaXMgY3JlYXRlcyBhbiBhZGFwdGVyIGZvciBhIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuUG9wdWxhdGlvbk1vZGVsTGFiZWx9Lg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJQE92ZXJyaWRlDQorCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZVBvcHVsYXRpb25Nb2RlbExhYmVsQWRhcHRlcigpIHsNCisJCWlmIChwb3B1bGF0aW9uTW9kZWxMYWJlbEl0ZW1Qcm92aWRlciA9PSBudWxsKSB7DQorCQkJcG9wdWxhdGlvbk1vZGVsTGFiZWxJdGVtUHJvdmlkZXIgPSBuZXcgUG9wdWxhdGlvbk1vZGVsTGFiZWxJdGVtUHJvdmlkZXIodGhpcyk7DQorCQl9DQorDQorCQlyZXR1cm4gcG9wdWxhdGlvbk1vZGVsTGFiZWxJdGVtUHJvdmlkZXI7DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMga2VlcHMgdHJhY2sgb2YgdGhlIG9uZSBhZGFwdGVyIHVzZWQgZm9yIGFsbCB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWx9IGluc3RhbmNlcy4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCBTdGFuZGFyZFBvcHVsYXRpb25Nb2RlbExhYmVsSXRlbVByb3ZpZGVyIHN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWxJdGVtUHJvdmlkZXI7DQorDQorCS8qKg0KKwkgKiBUaGlzIGNyZWF0ZXMgYW4gYWRhcHRlciBmb3IgYSB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWx9Lg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJQE92ZXJyaWRlDQorCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZVN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWxBZGFwdGVyKCkgew0KKwkJaWYgKHN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWxJdGVtUHJvdmlkZXIgPT0gbnVsbCkgew0KKwkJCXN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWxJdGVtUHJvdmlkZXIgPSBuZXcgU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxMYWJlbEl0ZW1Qcm92aWRlcih0aGlzKTsNCisJCX0NCisNCisJCXJldHVybiBzdGFuZGFyZFBvcHVsYXRpb25Nb2RlbExhYmVsSXRlbVByb3ZpZGVyOw0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIGtlZXBzIHRyYWNrIG9mIHRoZSBvbmUgYWRhcHRlciB1c2VkIGZvciBhbGwge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5Qb3B1bGF0aW9uTW9kZWxMYWJlbFZhbHVlfSBpbnN0YW5jZXMuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgUG9wdWxhdGlvbk1vZGVsTGFiZWxWYWx1ZUl0ZW1Qcm92aWRlciBwb3B1bGF0aW9uTW9kZWxMYWJlbFZhbHVlSXRlbVByb3ZpZGVyOw0KKw0KKwkvKioNCisJICogVGhpcyBjcmVhdGVzIGFuIGFkYXB0ZXIgZm9yIGEge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5Qb3B1bGF0aW9uTW9kZWxMYWJlbFZhbHVlfS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCUBPdmVycmlkZQ0KKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVQb3B1bGF0aW9uTW9kZWxMYWJlbFZhbHVlQWRhcHRlcigpIHsNCisJCWlmIChwb3B1bGF0aW9uTW9kZWxMYWJlbFZhbHVlSXRlbVByb3ZpZGVyID09IG51bGwpIHsNCisJCQlwb3B1bGF0aW9uTW9kZWxMYWJlbFZhbHVlSXRlbVByb3ZpZGVyID0gbmV3IFBvcHVsYXRpb25Nb2RlbExhYmVsVmFsdWVJdGVtUHJvdmlkZXIodGhpcyk7DQorCQl9DQorDQorCQlyZXR1cm4gcG9wdWxhdGlvbk1vZGVsTGFiZWxWYWx1ZUl0ZW1Qcm92aWRlcjsNCisJfQ0KKw0KKwkvKioNCisJICogVGhpcyBrZWVwcyB0cmFjayBvZiB0aGUgb25lIGFkYXB0ZXIgdXNlZCBmb3IgYWxsIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxMYWJlbFZhbHVlfSBpbnN0YW5jZXMuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxMYWJlbFZhbHVlSXRlbVByb3ZpZGVyIHN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWxWYWx1ZUl0ZW1Qcm92aWRlcjsNCisNCisJLyoqDQorCSAqIFRoaXMgY3JlYXRlcyBhbiBhZGFwdGVyIGZvciBhIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxMYWJlbFZhbHVlfS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCUBPdmVycmlkZQ0KKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVTdGFuZGFyZFBvcHVsYXRpb25Nb2RlbExhYmVsVmFsdWVBZGFwdGVyKCkgew0KKwkJaWYgKHN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWxWYWx1ZUl0ZW1Qcm92aWRlciA9PSBudWxsKSB7DQorCQkJc3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxMYWJlbFZhbHVlSXRlbVByb3ZpZGVyID0gbmV3IFN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWxWYWx1ZUl0ZW1Qcm92aWRlcih0aGlzKTsNCisJCX0NCisNCisJCXJldHVybiBzdGFuZGFyZFBvcHVsYXRpb25Nb2RlbExhYmVsVmFsdWVJdGVtUHJvdmlkZXI7DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMga2VlcHMgdHJhY2sgb2YgdGhlIG9uZSBhZGFwdGVyIHVzZWQgZm9yIGFsbCB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLlN0b2NoYXN0aWNTdGFuZGFyZFBvcHVsYXRpb25Nb2RlbH0gaW5zdGFuY2VzLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIFN0b2NoYXN0aWNTdGFuZGFyZFBvcHVsYXRpb25Nb2RlbEl0ZW1Qcm92aWRlciBzdG9jaGFzdGljU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxJdGVtUHJvdmlkZXI7DQorDQorCS8qKg0KKwkgKiBUaGlzIGNyZWF0ZXMgYW4gYWRhcHRlciBmb3IgYSB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLlN0b2NoYXN0aWNTdGFuZGFyZFBvcHVsYXRpb25Nb2RlbH0uDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlAT3ZlcnJpZGUNCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlU3RvY2hhc3RpY1N0YW5kYXJkUG9wdWxhdGlvbk1vZGVsQWRhcHRlcigpIHsNCisJCWlmIChzdG9jaGFzdGljU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxJdGVtUHJvdmlkZXIgPT0gbnVsbCkgew0KKwkJCXN0b2NoYXN0aWNTdGFuZGFyZFBvcHVsYXRpb25Nb2RlbEl0ZW1Qcm92aWRlciA9IG5ldyBTdG9jaGFzdGljU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxJdGVtUHJvdmlkZXIodGhpcyk7DQorCQl9DQorDQorCQlyZXR1cm4gc3RvY2hhc3RpY1N0YW5kYXJkUG9wdWxhdGlvbk1vZGVsSXRlbVByb3ZpZGVyOw0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIGtlZXBzIHRyYWNrIG9mIHRoZSBvbmUgYWRhcHRlciB1c2VkIGZvciBhbGwge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5EZW1vZ3JhcGhpY1BvcHVsYXRpb25Nb2RlbH0gaW5zdGFuY2VzLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIERlbW9ncmFwaGljUG9wdWxhdGlvbk1vZGVsSXRlbVByb3ZpZGVyIGRlbW9ncmFwaGljUG9wdWxhdGlvbk1vZGVsSXRlbVByb3ZpZGVyOw0KKw0KKwkvKioNCisJICogVGhpcyBjcmVhdGVzIGFuIGFkYXB0ZXIgZm9yIGEge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5EZW1vZ3JhcGhpY1BvcHVsYXRpb25Nb2RlbH0uDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlAT3ZlcnJpZGUNCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlRGVtb2dyYXBoaWNQb3B1bGF0aW9uTW9kZWxBZGFwdGVyKCkgew0KKwkJaWYgKGRlbW9ncmFwaGljUG9wdWxhdGlvbk1vZGVsSXRlbVByb3ZpZGVyID09IG51bGwpIHsNCisJCQlkZW1vZ3JhcGhpY1BvcHVsYXRpb25Nb2RlbEl0ZW1Qcm92aWRlciA9IG5ldyBEZW1vZ3JhcGhpY1BvcHVsYXRpb25Nb2RlbEl0ZW1Qcm92aWRlcih0aGlzKTsNCisJCX0NCisNCisJCXJldHVybiBkZW1vZ3JhcGhpY1BvcHVsYXRpb25Nb2RlbEl0ZW1Qcm92aWRlcjsNCisJfQ0KKw0KKwkvKioNCisJICogVGhpcyBrZWVwcyB0cmFjayBvZiB0aGUgb25lIGFkYXB0ZXIgdXNlZCBmb3IgYWxsIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuUG9wdWxhdGlvbkdyb3VwfSBpbnN0YW5jZXMuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgUG9wdWxhdGlvbkdyb3VwSXRlbVByb3ZpZGVyIHBvcHVsYXRpb25Hcm91cEl0ZW1Qcm92aWRlcjsNCisNCisJLyoqDQorCSAqIFRoaXMgY3JlYXRlcyBhbiBhZGFwdGVyIGZvciBhIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuUG9wdWxhdGlvbkdyb3VwfS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCUBPdmVycmlkZQ0KKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVQb3B1bGF0aW9uR3JvdXBBZGFwdGVyKCkgew0KKwkJaWYgKHBvcHVsYXRpb25Hcm91cEl0ZW1Qcm92aWRlciA9PSBudWxsKSB7DQorCQkJcG9wdWxhdGlvbkdyb3VwSXRlbVByb3ZpZGVyID0gbmV3IFBvcHVsYXRpb25Hcm91cEl0ZW1Qcm92aWRlcih0aGlzKTsNCisJCX0NCisNCisJCXJldHVybiBwb3B1bGF0aW9uR3JvdXBJdGVtUHJvdmlkZXI7DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMga2VlcHMgdHJhY2sgb2YgdGhlIG9uZSBhZGFwdGVyIHVzZWQgZm9yIGFsbCB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkUG9wdWxhdGlvbkluaXRpYWxpemVyfSBpbnN0YW5jZXMuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgU3RhbmRhcmRQb3B1bGF0aW9uSW5pdGlhbGl6ZXJJdGVtUHJvdmlkZXIgc3RhbmRhcmRQb3B1bGF0aW9uSW5pdGlhbGl6ZXJJdGVtUHJvdmlkZXI7DQorDQorCS8qKg0KKwkgKiBUaGlzIGNyZWF0ZXMgYW4gYWRhcHRlciBmb3IgYSB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkUG9wdWxhdGlvbkluaXRpYWxpemVyfS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCUBPdmVycmlkZQ0KKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVTdGFuZGFyZFBvcHVsYXRpb25Jbml0aWFsaXplckFkYXB0ZXIoKSB7DQorCQlpZiAoc3RhbmRhcmRQb3B1bGF0aW9uSW5pdGlhbGl6ZXJJdGVtUHJvdmlkZXIgPT0gbnVsbCkgew0KKwkJCXN0YW5kYXJkUG9wdWxhdGlvbkluaXRpYWxpemVySXRlbVByb3ZpZGVyID0gbmV3IFN0YW5kYXJkUG9wdWxhdGlvbkluaXRpYWxpemVySXRlbVByb3ZpZGVyKHRoaXMpOw0KKwkJfQ0KKw0KKwkJcmV0dXJuIHN0YW5kYXJkUG9wdWxhdGlvbkluaXRpYWxpemVySXRlbVByb3ZpZGVyOw0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIGtlZXBzIHRyYWNrIG9mIHRoZSBvbmUgYWRhcHRlciB1c2VkIGZvciBhbGwge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5TZWFzb25hbFBvcHVsYXRpb25Nb2RlbH0gaW5zdGFuY2VzLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIFNlYXNvbmFsUG9wdWxhdGlvbk1vZGVsSXRlbVByb3ZpZGVyIHNlYXNvbmFsUG9wdWxhdGlvbk1vZGVsSXRlbVByb3ZpZGVyOw0KKw0KKwkvKioNCisJICogVGhpcyBjcmVhdGVzIGFuIGFkYXB0ZXIgZm9yIGEge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5TZWFzb25hbFBvcHVsYXRpb25Nb2RlbH0uDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlAT3ZlcnJpZGUNCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlU2Vhc29uYWxQb3B1bGF0aW9uTW9kZWxBZGFwdGVyKCkgew0KKwkJaWYgKHNlYXNvbmFsUG9wdWxhdGlvbk1vZGVsSXRlbVByb3ZpZGVyID09IG51bGwpIHsNCisJCQlzZWFzb25hbFBvcHVsYXRpb25Nb2RlbEl0ZW1Qcm92aWRlciA9IG5ldyBTZWFzb25hbFBvcHVsYXRpb25Nb2RlbEl0ZW1Qcm92aWRlcih0aGlzKTsNCisJCX0NCisNCisJCXJldHVybiBzZWFzb25hbFBvcHVsYXRpb25Nb2RlbEl0ZW1Qcm92aWRlcjsNCisJfQ0KKw0KKwkvKioNCisJICogVGhpcyBrZWVwcyB0cmFjayBvZiB0aGUgb25lIGFkYXB0ZXIgdXNlZCBmb3IgYWxsIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuWWV0aVBvcHVsYXRpb25Jbml0aWFsaXplcn0gaW5zdGFuY2VzLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIFlldGlQb3B1bGF0aW9uSW5pdGlhbGl6ZXJJdGVtUHJvdmlkZXIgeWV0aVBvcHVsYXRpb25Jbml0aWFsaXplckl0ZW1Qcm92aWRlcjsNCisNCisJLyoqDQorCSAqIFRoaXMgY3JlYXRlcyBhbiBhZGFwdGVyIGZvciBhIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuWWV0aVBvcHVsYXRpb25Jbml0aWFsaXplcn0uDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlAT3ZlcnJpZGUNCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlWWV0aVBvcHVsYXRpb25Jbml0aWFsaXplckFkYXB0ZXIoKSB7DQorCQlpZiAoeWV0aVBvcHVsYXRpb25Jbml0aWFsaXplckl0ZW1Qcm92aWRlciA9PSBudWxsKSB7DQorCQkJeWV0aVBvcHVsYXRpb25Jbml0aWFsaXplckl0ZW1Qcm92aWRlciA9IG5ldyBZZXRpUG9wdWxhdGlvbkluaXRpYWxpemVySXRlbVByb3ZpZGVyKHRoaXMpOw0KKwkJfQ0KKw0KKwkJcmV0dXJuIHlldGlQb3B1bGF0aW9uSW5pdGlhbGl6ZXJJdGVtUHJvdmlkZXI7DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMga2VlcHMgdHJhY2sgb2YgdGhlIG9uZSBhZGFwdGVyIHVzZWQgZm9yIGFsbCB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLk1vc3F1aXRvUG9wdWxhdGlvbk1vZGVsfSBpbnN0YW5jZXMuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgTW9zcXVpdG9Qb3B1bGF0aW9uTW9kZWxJdGVtUHJvdmlkZXIgbW9zcXVpdG9Qb3B1bGF0aW9uTW9kZWxJdGVtUHJvdmlkZXI7DQorDQorCS8qKg0KKwkgKiBUaGlzIGNyZWF0ZXMgYW4gYWRhcHRlciBmb3IgYSB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLk1vc3F1aXRvUG9wdWxhdGlvbk1vZGVsfS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCUBPdmVycmlkZQ0KKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVNb3NxdWl0b1BvcHVsYXRpb25Nb2RlbEFkYXB0ZXIoKSB7DQorCQlpZiAobW9zcXVpdG9Qb3B1bGF0aW9uTW9kZWxJdGVtUHJvdmlkZXIgPT0gbnVsbCkgew0KKwkJCW1vc3F1aXRvUG9wdWxhdGlvbk1vZGVsSXRlbVByb3ZpZGVyID0gbmV3IE1vc3F1aXRvUG9wdWxhdGlvbk1vZGVsSXRlbVByb3ZpZGVyKHRoaXMpOw0KKwkJfQ0KKw0KKwkJcmV0dXJuIG1vc3F1aXRvUG9wdWxhdGlvbk1vZGVsSXRlbVByb3ZpZGVyOw0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIGtlZXBzIHRyYWNrIG9mIHRoZSBvbmUgYWRhcHRlciB1c2VkIGZvciBhbGwge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5BZ2luZ1BvcHVsYXRpb25Nb2RlbH0gaW5zdGFuY2VzLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIEFnaW5nUG9wdWxhdGlvbk1vZGVsSXRlbVByb3ZpZGVyIGFnaW5nUG9wdWxhdGlvbk1vZGVsSXRlbVByb3ZpZGVyOw0KKw0KKwkvKioNCisJICogVGhpcyBjcmVhdGVzIGFuIGFkYXB0ZXIgZm9yIGEge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5BZ2luZ1BvcHVsYXRpb25Nb2RlbH0uDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlAT3ZlcnJpZGUNCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlQWdpbmdQb3B1bGF0aW9uTW9kZWxBZGFwdGVyKCkgew0KKwkJaWYgKGFnaW5nUG9wdWxhdGlvbk1vZGVsSXRlbVByb3ZpZGVyID09IG51bGwpIHsNCisJCQlhZ2luZ1BvcHVsYXRpb25Nb2RlbEl0ZW1Qcm92aWRlciA9IG5ldyBBZ2luZ1BvcHVsYXRpb25Nb2RlbEl0ZW1Qcm92aWRlcih0aGlzKTsNCisJCX0NCisNCisJCXJldHVybiBhZ2luZ1BvcHVsYXRpb25Nb2RlbEl0ZW1Qcm92aWRlcjsNCisJfQ0KKw0KKwkvKioNCisJICogVGhpcyBrZWVwcyB0cmFjayBvZiB0aGUgb25lIGFkYXB0ZXIgdXNlZCBmb3IgYWxsIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuQWdlR3JvdXB9IGluc3RhbmNlcy4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCBBZ2VHcm91cEl0ZW1Qcm92aWRlciBhZ2VHcm91cEl0ZW1Qcm92aWRlcjsNCisNCisJLyoqDQorCSAqIFRoaXMgY3JlYXRlcyBhbiBhZGFwdGVyIGZvciBhIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuQWdlR3JvdXB9Lg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJQE92ZXJyaWRlDQorCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZUFnZUdyb3VwQWRhcHRlcigpIHsNCisJCWlmIChhZ2VHcm91cEl0ZW1Qcm92aWRlciA9PSBudWxsKSB7DQorCQkJYWdlR3JvdXBJdGVtUHJvdmlkZXIgPSBuZXcgQWdlR3JvdXBJdGVtUHJvdmlkZXIodGhpcyk7DQorCQl9DQorDQorCQlyZXR1cm4gYWdlR3JvdXBJdGVtUHJvdmlkZXI7DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgcmV0dXJucyB0aGUgcm9vdCBhZGFwdGVyIGZhY3RvcnkgdGhhdCBjb250YWlucyB0aGlzIGZhY3RvcnkuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSBnZXRSb290QWRhcHRlckZhY3RvcnkoKSB7DQorCQlyZXR1cm4gcGFyZW50QWRhcHRlckZhY3RvcnkgPT0gbnVsbCA/IHRoaXMgOiBwYXJlbnRBZGFwdGVyRmFjdG9yeS5nZXRSb290QWRhcHRlckZhY3RvcnkoKTsNCisJfQ0KKw0KKwkvKioNCisJICogVGhpcyBzZXRzIHRoZSBjb21wb3NlZCBhZGFwdGVyIGZhY3RvcnkgdGhhdCBjb250YWlucyB0aGlzIGZhY3RvcnkuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgdm9pZCBzZXRQYXJlbnRBZGFwdGVyRmFjdG9yeShDb21wb3NlZEFkYXB0ZXJGYWN0b3J5IHBhcmVudEFkYXB0ZXJGYWN0b3J5KSB7DQorCQl0aGlzLnBhcmVudEFkYXB0ZXJGYWN0b3J5ID0gcGFyZW50QWRhcHRlckZhY3Rvcnk7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlAT3ZlcnJpZGUNCisJcHVibGljIGJvb2xlYW4gaXNGYWN0b3J5Rm9yVHlwZShPYmplY3QgdHlwZSkgew0KKwkJcmV0dXJuIHN1cHBvcnRlZFR5cGVzLmNvbnRhaW5zKHR5cGUpIHx8IHN1cGVyLmlzRmFjdG9yeUZvclR5cGUodHlwZSk7DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgaW1wbGVtZW50YXRpb24gc3Vic3RpdHV0ZXMgdGhlIGZhY3RvcnkgaXRzZWxmIGFzIHRoZSBrZXkgZm9yIHRoZSBhZGFwdGVyLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJQE92ZXJyaWRlDQorCXB1YmxpYyBBZGFwdGVyIGFkYXB0KE5vdGlmaWVyIG5vdGlmaWVyLCBPYmplY3QgdHlwZSkgew0KKwkJcmV0dXJuIHN1cGVyLmFkYXB0KG5vdGlmaWVyLCB0aGlzKTsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCUBPdmVycmlkZQ0KKwlwdWJsaWMgT2JqZWN0IGFkYXB0KE9iamVjdCBvYmplY3QsIE9iamVjdCB0eXBlKSB7DQorCQlpZiAoaXNGYWN0b3J5Rm9yVHlwZSh0eXBlKSkgew0KKwkJCU9iamVjdCBhZGFwdGVyID0gc3VwZXIuYWRhcHQob2JqZWN0LCB0eXBlKTsNCisJCQlpZiAoISh0eXBlIGluc3RhbmNlb2YgQ2xhc3M8Pz4pIHx8ICgoKENsYXNzPD8+KXR5cGUpLmlzSW5zdGFuY2UoYWRhcHRlcikpKSB7DQorCQkJCXJldHVybiBhZGFwdGVyOw0KKwkJCX0NCisJCX0NCisNCisJCXJldHVybiBudWxsOw0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIGFkZHMgYSBsaXN0ZW5lci4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyB2b2lkIGFkZExpc3RlbmVyKElOb3RpZnlDaGFuZ2VkTGlzdGVuZXIgbm90aWZ5Q2hhbmdlZExpc3RlbmVyKSB7DQorCQljaGFuZ2VOb3RpZmllci5hZGRMaXN0ZW5lcihub3RpZnlDaGFuZ2VkTGlzdGVuZXIpOw0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIHJlbW92ZXMgYSBsaXN0ZW5lci4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyB2b2lkIHJlbW92ZUxpc3RlbmVyKElOb3RpZnlDaGFuZ2VkTGlzdGVuZXIgbm90aWZ5Q2hhbmdlZExpc3RlbmVyKSB7DQorCQljaGFuZ2VOb3RpZmllci5yZW1vdmVMaXN0ZW5lcihub3RpZnlDaGFuZ2VkTGlzdGVuZXIpOw0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIGRlbGVnYXRlcyB0byB7QGxpbmsgI2NoYW5nZU5vdGlmaWVyfSBhbmQgdG8ge0BsaW5rICNwYXJlbnRBZGFwdGVyRmFjdG9yeX0uDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgdm9pZCBmaXJlTm90aWZ5Q2hhbmdlZChOb3RpZmljYXRpb24gbm90aWZpY2F0aW9uKSB7DQorCQljaGFuZ2VOb3RpZmllci5maXJlTm90aWZ5Q2hhbmdlZChub3RpZmljYXRpb24pOw0KKw0KKwkJaWYgKHBhcmVudEFkYXB0ZXJGYWN0b3J5ICE9IG51bGwpIHsNCisJCQlwYXJlbnRBZGFwdGVyRmFjdG9yeS5maXJlTm90aWZ5Q2hhbmdlZChub3RpZmljYXRpb24pOw0KKwkJfQ0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIGRpc3Bvc2VzIGFsbCBvZiB0aGUgaXRlbSBwcm92aWRlcnMgY3JlYXRlZCBieSB0aGlzIGZhY3RvcnkuIA0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIHZvaWQgZGlzcG9zZSgpIHsNCisJCWlmIChzdGFuZGFyZFBvcHVsYXRpb25Nb2RlbEl0ZW1Qcm92aWRlciAhPSBudWxsKSBzdGFuZGFyZFBvcHVsYXRpb25Nb2RlbEl0ZW1Qcm92aWRlci5kaXNwb3NlKCk7DQorCQlpZiAocG9wdWxhdGlvbk1vZGVsTGFiZWxJdGVtUHJvdmlkZXIgIT0gbnVsbCkgcG9wdWxhdGlvbk1vZGVsTGFiZWxJdGVtUHJvdmlkZXIuZGlzcG9zZSgpOw0KKwkJaWYgKHN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWxJdGVtUHJvdmlkZXIgIT0gbnVsbCkgc3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxMYWJlbEl0ZW1Qcm92aWRlci5kaXNwb3NlKCk7DQorCQlpZiAocG9wdWxhdGlvbk1vZGVsTGFiZWxWYWx1ZUl0ZW1Qcm92aWRlciAhPSBudWxsKSBwb3B1bGF0aW9uTW9kZWxMYWJlbFZhbHVlSXRlbVByb3ZpZGVyLmRpc3Bvc2UoKTsNCisJCWlmIChzdGFuZGFyZFBvcHVsYXRpb25Nb2RlbExhYmVsVmFsdWVJdGVtUHJvdmlkZXIgIT0gbnVsbCkgc3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxMYWJlbFZhbHVlSXRlbVByb3ZpZGVyLmRpc3Bvc2UoKTsNCisJCWlmIChzdG9jaGFzdGljU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxJdGVtUHJvdmlkZXIgIT0gbnVsbCkgc3RvY2hhc3RpY1N0YW5kYXJkUG9wdWxhdGlvbk1vZGVsSXRlbVByb3ZpZGVyLmRpc3Bvc2UoKTsNCisJCWlmIChkZW1vZ3JhcGhpY1BvcHVsYXRpb25Nb2RlbEl0ZW1Qcm92aWRlciAhPSBudWxsKSBkZW1vZ3JhcGhpY1BvcHVsYXRpb25Nb2RlbEl0ZW1Qcm92aWRlci5kaXNwb3NlKCk7DQorCQlpZiAocG9wdWxhdGlvbkdyb3VwSXRlbVByb3ZpZGVyICE9IG51bGwpIHBvcHVsYXRpb25Hcm91cEl0ZW1Qcm92aWRlci5kaXNwb3NlKCk7DQorCQlpZiAoc3RhbmRhcmRQb3B1bGF0aW9uSW5pdGlhbGl6ZXJJdGVtUHJvdmlkZXIgIT0gbnVsbCkgc3RhbmRhcmRQb3B1bGF0aW9uSW5pdGlhbGl6ZXJJdGVtUHJvdmlkZXIuZGlzcG9zZSgpOw0KKwkJaWYgKHNlYXNvbmFsUG9wdWxhdGlvbk1vZGVsSXRlbVByb3ZpZGVyICE9IG51bGwpIHNlYXNvbmFsUG9wdWxhdGlvbk1vZGVsSXRlbVByb3ZpZGVyLmRpc3Bvc2UoKTsNCisJCWlmICh5ZXRpUG9wdWxhdGlvbkluaXRpYWxpemVySXRlbVByb3ZpZGVyICE9IG51bGwpIHlldGlQb3B1bGF0aW9uSW5pdGlhbGl6ZXJJdGVtUHJvdmlkZXIuZGlzcG9zZSgpOw0KKwkJaWYgKG1vc3F1aXRvUG9wdWxhdGlvbk1vZGVsSXRlbVByb3ZpZGVyICE9IG51bGwpIG1vc3F1aXRvUG9wdWxhdGlvbk1vZGVsSXRlbVByb3ZpZGVyLmRpc3Bvc2UoKTsNCisJCWlmIChhZ2luZ1BvcHVsYXRpb25Nb2RlbEl0ZW1Qcm92aWRlciAhPSBudWxsKSBhZ2luZ1BvcHVsYXRpb25Nb2RlbEl0ZW1Qcm92aWRlci5kaXNwb3NlKCk7DQorCQlpZiAoYWdlR3JvdXBJdGVtUHJvdmlkZXIgIT0gbnVsbCkgYWdlR3JvdXBJdGVtUHJvdmlkZXIuZGlzcG9zZSgpOw0KKwl9DQorDQorfQ0KZGlmZiAtLWdpdCBhL21vZGVscy9wb3B1bGF0aW9ucy9vcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vcG9wdWxhdGlvbm1vZGVscy9zdGFuZGFyZC9wcm92aWRlci9TdGFuZGFyZFBvcHVsYXRpb25Jbml0aWFsaXplckl0ZW1Qcm92aWRlci5qYXZhIGIvbW9kZWxzL3BvcHVsYXRpb25zL29yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9wb3B1bGF0aW9ubW9kZWxzL3N0YW5kYXJkL3Byb3ZpZGVyL1N0YW5kYXJkUG9wdWxhdGlvbkluaXRpYWxpemVySXRlbVByb3ZpZGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWYzZjZkOQotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9wb3B1bGF0aW9ucy9vcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vcG9wdWxhdGlvbm1vZGVscy9zdGFuZGFyZC9wcm92aWRlci9TdGFuZGFyZFBvcHVsYXRpb25Jbml0aWFsaXplckl0ZW1Qcm92aWRlci5qYXZhCkBAIC0wLDAgKzEsMTg3IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5wcm92aWRlcjsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAxMCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOworaW1wb3J0IGphdmEudXRpbC5MaXN0OworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5VUkk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JRWRpdGluZ0RvbWFpbkl0ZW1Qcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbUxhYmVsUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1Qcm9wZXJ0eVNvdXJjZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JU3RydWN0dXJlZEl0ZW1Db250ZW50UHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVRyZWVJdGVtQ29udGVudFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuVmlld2VyTm90aWZpY2F0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZFBhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkUG9wdWxhdGlvbkluaXRpYWxpemVyOworCisvKioKKyAqIFRoaXMgaXMgdGhlIGl0ZW0gcHJvdmlkZXIgYWRhcHRlciBmb3IgYSB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkUG9wdWxhdGlvbkluaXRpYWxpemVyfSBvYmplY3QuCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBTdGFuZGFyZFBvcHVsYXRpb25Jbml0aWFsaXplckl0ZW1Qcm92aWRlcgorCWV4dGVuZHMgUG9wdWxhdGlvbkluaXRpYWxpemVySXRlbVByb3ZpZGVyCisJaW1wbGVtZW50cworCQlJRWRpdGluZ0RvbWFpbkl0ZW1Qcm92aWRlciwKKwkJSVN0cnVjdHVyZWRJdGVtQ29udGVudFByb3ZpZGVyLAorCQlJVHJlZUl0ZW1Db250ZW50UHJvdmlkZXIsCisJCUlJdGVtTGFiZWxQcm92aWRlciwKKwkJSUl0ZW1Qcm9wZXJ0eVNvdXJjZSB7CisJLyoqCisJICogVGhpcyBjb25zdHJ1Y3RzIGFuIGluc3RhbmNlIGZyb20gYSBmYWN0b3J5IGFuZCBhIG5vdGlmaWVyLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBTdGFuZGFyZFBvcHVsYXRpb25Jbml0aWFsaXplckl0ZW1Qcm92aWRlcihBZGFwdGVyRmFjdG9yeSBhZGFwdGVyRmFjdG9yeSkgeworCQlzdXBlcihhZGFwdGVyRmFjdG9yeSk7CisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIHRoZSBwcm9wZXJ0eSBkZXNjcmlwdG9ycyBmb3IgdGhlIGFkYXB0ZWQgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIExpc3Q8SUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I+IGdldFByb3BlcnR5RGVzY3JpcHRvcnMoT2JqZWN0IG9iamVjdCkgeworCQlpZiAoaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMgPT0gbnVsbCkgeworCQkJc3VwZXIuZ2V0UHJvcGVydHlEZXNjcmlwdG9ycyhvYmplY3QpOworCisJCQlhZGRJbmRpdmlkdWFsc1Byb3BlcnR5RGVzY3JpcHRvcihvYmplY3QpOworCQkJYWRkVXNlRGVuc2l0eVByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QpOworCQl9CisJCXJldHVybiBpdGVtUHJvcGVydHlEZXNjcmlwdG9yczsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFkZHMgYSBwcm9wZXJ0eSBkZXNjcmlwdG9yIGZvciB0aGUgSW5kaXZpZHVhbHMgZmVhdHVyZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBhZGRJbmRpdmlkdWFsc1Byb3BlcnR5RGVzY3JpcHRvcihPYmplY3Qgb2JqZWN0KSB7CisJCWl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzLmFkZAorCQkJKGNyZWF0ZUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IKKwkJCQkoKChDb21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5KWFkYXB0ZXJGYWN0b3J5KS5nZXRSb290QWRhcHRlckZhY3RvcnkoKSwKKwkJCQkgZ2V0UmVzb3VyY2VMb2NhdG9yKCksCisJCQkJIGdldFN0cmluZygiX1VJX1N0YW5kYXJkUG9wdWxhdGlvbkluaXRpYWxpemVyX2luZGl2aWR1YWxzX2ZlYXR1cmUiKSwKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfUHJvcGVydHlEZXNjcmlwdG9yX2Rlc2NyaXB0aW9uIiwgIl9VSV9TdGFuZGFyZFBvcHVsYXRpb25Jbml0aWFsaXplcl9pbmRpdmlkdWFsc19mZWF0dXJlIiwgIl9VSV9TdGFuZGFyZFBvcHVsYXRpb25Jbml0aWFsaXplcl90eXBlIiksCisJCQkJIFN0YW5kYXJkUGFja2FnZS5MaXRlcmFscy5TVEFOREFSRF9QT1BVTEFUSU9OX0lOSVRJQUxJWkVSX19JTkRJVklEVUFMUywKKwkJCQkgdHJ1ZSwKKwkJCQkgZmFsc2UsCisJCQkJIGZhbHNlLAorCQkJCSBJdGVtUHJvcGVydHlEZXNjcmlwdG9yLlJFQUxfVkFMVUVfSU1BR0UsCisJCQkJIG51bGwsCisJCQkJIG51bGwpKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFkZHMgYSBwcm9wZXJ0eSBkZXNjcmlwdG9yIGZvciB0aGUgVXNlIERlbnNpdHkgZmVhdHVyZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBhZGRVc2VEZW5zaXR5UHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdCBvYmplY3QpIHsKKwkJaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMuYWRkCisJCQkoY3JlYXRlSXRlbVByb3BlcnR5RGVzY3JpcHRvcgorCQkJCSgoKENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnkpYWRhcHRlckZhY3RvcnkpLmdldFJvb3RBZGFwdGVyRmFjdG9yeSgpLAorCQkJCSBnZXRSZXNvdXJjZUxvY2F0b3IoKSwKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfU3RhbmRhcmRQb3B1bGF0aW9uSW5pdGlhbGl6ZXJfdXNlRGVuc2l0eV9mZWF0dXJlIiksCisJCQkJIGdldFN0cmluZygiX1VJX1Byb3BlcnR5RGVzY3JpcHRvcl9kZXNjcmlwdGlvbiIsICJfVUlfU3RhbmRhcmRQb3B1bGF0aW9uSW5pdGlhbGl6ZXJfdXNlRGVuc2l0eV9mZWF0dXJlIiwgIl9VSV9TdGFuZGFyZFBvcHVsYXRpb25Jbml0aWFsaXplcl90eXBlIiksCisJCQkJIFN0YW5kYXJkUGFja2FnZS5MaXRlcmFscy5TVEFOREFSRF9QT1BVTEFUSU9OX0lOSVRJQUxJWkVSX19VU0VfREVOU0lUWSwKKwkJCQkgdHJ1ZSwKKwkJCQkgZmFsc2UsCisJCQkJIGZhbHNlLAorCQkJCSBJdGVtUHJvcGVydHlEZXNjcmlwdG9yLkJPT0xFQU5fVkFMVUVfSU1BR0UsCisJCQkJIG51bGwsCisJCQkJIG51bGwpKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgU3RhbmRhcmRQb3B1bGF0aW9uSW5pdGlhbGl6ZXIuZ2lmLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgT2JqZWN0IGdldEltYWdlKE9iamVjdCBvYmplY3QpIHsKKwkJcmV0dXJuIG92ZXJsYXlJbWFnZShvYmplY3QsIGdldFJlc291cmNlTG9jYXRvcigpLmdldEltYWdlKCJmdWxsL2N1c3RvbTE2L3BvcHVsYXRpb25pbml0aWFsaXplci5naWYiKSk7CisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIHRoZSBsYWJlbCB0ZXh0IGZvciB0aGUgYWRhcHRlZCBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIFN0cmluZyBnZXRUZXh0KE9iamVjdCBvYmplY3QpIHsKKwkJcmV0dXJuIHN1cGVyLmdldFRleHQob2JqZWN0KTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgdGhlIGxhYmVsIHRleHQgZm9yIHRoZSBhZGFwdGVkIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBTdHJpbmcgZ2V0VGV4dEdlbihPYmplY3Qgb2JqZWN0KSB7CisJCVVSSSBsYWJlbFZhbHVlID0gKChTdGFuZGFyZFBvcHVsYXRpb25Jbml0aWFsaXplcilvYmplY3QpLmdldFVSSSgpOworCQlTdHJpbmcgbGFiZWwgPSBsYWJlbFZhbHVlID09IG51bGwgPyBudWxsIDogbGFiZWxWYWx1ZS50b1N0cmluZygpOworCQlyZXR1cm4gbGFiZWwgPT0gbnVsbCB8fCBsYWJlbC5sZW5ndGgoKSA9PSAwID8KKwkJCWdldFN0cmluZygiX1VJX1N0YW5kYXJkUG9wdWxhdGlvbkluaXRpYWxpemVyX3R5cGUiKSA6CisJCQlnZXRTdHJpbmcoIl9VSV9TdGFuZGFyZFBvcHVsYXRpb25Jbml0aWFsaXplcl90eXBlIikgKyAiICIgKyBsYWJlbDsKKwl9CisJCisJLyoqCisJICogVGhpcyBoYW5kbGVzIG1vZGVsIG5vdGlmaWNhdGlvbnMgYnkgY2FsbGluZyB7QGxpbmsgI3VwZGF0ZUNoaWxkcmVufSB0byB1cGRhdGUgYW55IGNhY2hlZAorCSAqIGNoaWxkcmVuIGFuZCBieSBjcmVhdGluZyBhIHZpZXdlciBub3RpZmljYXRpb24sIHdoaWNoIGl0IHBhc3NlcyB0byB7QGxpbmsgI2ZpcmVOb3RpZnlDaGFuZ2VkfS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBub3RpZnlDaGFuZ2VkKE5vdGlmaWNhdGlvbiBub3RpZmljYXRpb24pIHsKKwkJdXBkYXRlQ2hpbGRyZW4obm90aWZpY2F0aW9uKTsKKworCQlzd2l0Y2ggKG5vdGlmaWNhdGlvbi5nZXRGZWF0dXJlSUQoU3RhbmRhcmRQb3B1bGF0aW9uSW5pdGlhbGl6ZXIuY2xhc3MpKSB7CisJCQljYXNlIFN0YW5kYXJkUGFja2FnZS5TVEFOREFSRF9QT1BVTEFUSU9OX0lOSVRJQUxJWkVSX19JTkRJVklEVUFMUzoKKwkJCWNhc2UgU3RhbmRhcmRQYWNrYWdlLlNUQU5EQVJEX1BPUFVMQVRJT05fSU5JVElBTElaRVJfX1VTRV9ERU5TSVRZOgorCQkJCWZpcmVOb3RpZnlDaGFuZ2VkKG5ldyBWaWV3ZXJOb3RpZmljYXRpb24obm90aWZpY2F0aW9uLCBub3RpZmljYXRpb24uZ2V0Tm90aWZpZXIoKSwgZmFsc2UsIHRydWUpKTsKKwkJCQlyZXR1cm47CisJCX0KKwkJc3VwZXIubm90aWZ5Q2hhbmdlZChub3RpZmljYXRpb24pOworCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmVkaXQuY29tbWFuZC5Db21tYW5kUGFyYW1ldGVyfXMgZGVzY3JpYmluZyB0aGUgY2hpbGRyZW4KKwkgKiB0aGF0IGNhbiBiZSBjcmVhdGVkIHVuZGVyIHRoaXMgb2JqZWN0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIGNvbGxlY3ROZXdDaGlsZERlc2NyaXB0b3JzKENvbGxlY3Rpb248T2JqZWN0PiBuZXdDaGlsZERlc2NyaXB0b3JzLCBPYmplY3Qgb2JqZWN0KSB7CisJCXN1cGVyLmNvbGxlY3ROZXdDaGlsZERlc2NyaXB0b3JzKG5ld0NoaWxkRGVzY3JpcHRvcnMsIG9iamVjdCk7CisJfQorCit9CmRpZmYgLS1naXQgYS9tb2RlbHMvcG9wdWxhdGlvbnMvb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3BvcHVsYXRpb25tb2RlbHMvc3RhbmRhcmQvcHJvdmlkZXIvU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxJdGVtUHJvdmlkZXIuamF2YSBiL21vZGVscy9wb3B1bGF0aW9ucy9vcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vcG9wdWxhdGlvbm1vZGVscy9zdGFuZGFyZC9wcm92aWRlci9TdGFuZGFyZFBvcHVsYXRpb25Nb2RlbEl0ZW1Qcm92aWRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFjNDNlMWIKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvcG9wdWxhdGlvbnMvb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3BvcHVsYXRpb25tb2RlbHMvc3RhbmRhcmQvcHJvdmlkZXIvU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxJdGVtUHJvdmlkZXIuamF2YQpAQCAtMCwwICsxLDIxMCBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQucHJvdmlkZXI7DQorDQorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisgKiBDb3B5cmlnaHQgKGMpIDIwMDkgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuDQorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscw0KKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMA0KKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0DQorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwNCisgKg0KKyAqIENvbnRyaWJ1dG9yczoNCisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uDQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQorDQorDQoraW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOw0KK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsNCisNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuQWRhcHRlckZhY3Rvcnk7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeTsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUVkaXRpbmdEb21haW5JdGVtUHJvdmlkZXI7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtTGFiZWxQcm92aWRlcjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtUHJvcGVydHlTb3VyY2U7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklTdHJ1Y3R1cmVkSXRlbUNvbnRlbnRQcm92aWRlcjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVRyZWVJdGVtQ29udGVudFByb3ZpZGVyOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JdGVtUHJvcGVydHlEZXNjcmlwdG9yOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5WaWV3ZXJOb3RpZmljYXRpb247DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZFBhY2thZ2U7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZFBvcHVsYXRpb25Nb2RlbDsNCisNCisvKioNCisgKiBUaGlzIGlzIHRoZSBpdGVtIHByb3ZpZGVyIGFkYXB0ZXIgZm9yIGEge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZFBvcHVsYXRpb25Nb2RlbH0gb2JqZWN0Lg0KKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorICogQGdlbmVyYXRlZA0KKyAqLw0KK0BTdXBwcmVzc1dhcm5pbmdzKCJ1bnVzZWQiKSANCitwdWJsaWMgY2xhc3MgU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxJdGVtUHJvdmlkZXINCisJZXh0ZW5kcyBQb3B1bGF0aW9uTW9kZWxJdGVtUHJvdmlkZXINCisJaW1wbGVtZW50cw0KKwkJSUVkaXRpbmdEb21haW5JdGVtUHJvdmlkZXIsDQorCQlJU3RydWN0dXJlZEl0ZW1Db250ZW50UHJvdmlkZXIsDQorCQlJVHJlZUl0ZW1Db250ZW50UHJvdmlkZXIsDQorCQlJSXRlbUxhYmVsUHJvdmlkZXIsDQorCQlJSXRlbVByb3BlcnR5U291cmNlIHsNCisJLyoqDQorCSAqIFRoaXMgY29uc3RydWN0cyBhbiBpbnN0YW5jZSBmcm9tIGEgZmFjdG9yeSBhbmQgYSBub3RpZmllci4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBTdGFuZGFyZFBvcHVsYXRpb25Nb2RlbEl0ZW1Qcm92aWRlcihBZGFwdGVyRmFjdG9yeSBhZGFwdGVyRmFjdG9yeSkgew0KKwkJc3VwZXIoYWRhcHRlckZhY3RvcnkpOw0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIHJldHVybnMgdGhlIHByb3BlcnR5IGRlc2NyaXB0b3JzIGZvciB0aGUgYWRhcHRlZCBjbGFzcy4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCUBPdmVycmlkZQ0KKwlwdWJsaWMgTGlzdDxJSXRlbVByb3BlcnR5RGVzY3JpcHRvcj4gZ2V0UHJvcGVydHlEZXNjcmlwdG9ycyhPYmplY3Qgb2JqZWN0KSB7DQorCQlpZiAoaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMgPT0gbnVsbCkgew0KKwkJCXN1cGVyLmdldFByb3BlcnR5RGVzY3JpcHRvcnMob2JqZWN0KTsNCisNCisJCQlhZGRCaXJ0aFJhdGVQcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0KTsNCisJCQlhZGREZWF0aFJhdGVQcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0KTsNCisJCQlhZGRUaW1lUGVyaW9kUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCk7DQorCQl9DQorCQlyZXR1cm4gaXRlbVByb3BlcnR5RGVzY3JpcHRvcnM7DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgYWRkcyBhIHByb3BlcnR5IGRlc2NyaXB0b3IgZm9yIHRoZSBCaXJ0aCBSYXRlIGZlYXR1cmUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgdm9pZCBhZGRCaXJ0aFJhdGVQcm9wZXJ0eURlc2NyaXB0b3IoT2JqZWN0IG9iamVjdCkgew0KKwkJaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMuYWRkDQorCQkJKGNyZWF0ZUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3INCisJCQkJKCgoQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSlhZGFwdGVyRmFjdG9yeSkuZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCksDQorCQkJCSBnZXRSZXNvdXJjZUxvY2F0b3IoKSwNCisJCQkJIGdldFN0cmluZygiX1VJX1N0YW5kYXJkUG9wdWxhdGlvbk1vZGVsX2JpcnRoUmF0ZV9mZWF0dXJlIiksDQorCQkJCSBnZXRTdHJpbmcoIl9VSV9Qcm9wZXJ0eURlc2NyaXB0b3JfZGVzY3JpcHRpb24iLCAiX1VJX1N0YW5kYXJkUG9wdWxhdGlvbk1vZGVsX2JpcnRoUmF0ZV9mZWF0dXJlIiwgIl9VSV9TdGFuZGFyZFBvcHVsYXRpb25Nb2RlbF90eXBlIiksDQorCQkJCSBTdGFuZGFyZFBhY2thZ2UuTGl0ZXJhbHMuU1RBTkRBUkRfUE9QVUxBVElPTl9NT0RFTF9fQklSVEhfUkFURSwNCisJCQkJIHRydWUsDQorCQkJCSBmYWxzZSwNCisJCQkJIGZhbHNlLA0KKwkJCQkgSXRlbVByb3BlcnR5RGVzY3JpcHRvci5SRUFMX1ZBTFVFX0lNQUdFLA0KKwkJCQkgbnVsbCwNCisJCQkJIG51bGwpKTsNCisJfQ0KKw0KKwkvKioNCisJICogVGhpcyBhZGRzIGEgcHJvcGVydHkgZGVzY3JpcHRvciBmb3IgdGhlIERlYXRoIFJhdGUgZmVhdHVyZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCB2b2lkIGFkZERlYXRoUmF0ZVByb3BlcnR5RGVzY3JpcHRvcihPYmplY3Qgb2JqZWN0KSB7DQorCQlpdGVtUHJvcGVydHlEZXNjcmlwdG9ycy5hZGQNCisJCQkoY3JlYXRlSXRlbVByb3BlcnR5RGVzY3JpcHRvcg0KKwkJCQkoKChDb21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5KWFkYXB0ZXJGYWN0b3J5KS5nZXRSb290QWRhcHRlckZhY3RvcnkoKSwNCisJCQkJIGdldFJlc291cmNlTG9jYXRvcigpLA0KKwkJCQkgZ2V0U3RyaW5nKCJfVUlfU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxfZGVhdGhSYXRlX2ZlYXR1cmUiKSwNCisJCQkJIGdldFN0cmluZygiX1VJX1Byb3BlcnR5RGVzY3JpcHRvcl9kZXNjcmlwdGlvbiIsICJfVUlfU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxfZGVhdGhSYXRlX2ZlYXR1cmUiLCAiX1VJX1N0YW5kYXJkUG9wdWxhdGlvbk1vZGVsX3R5cGUiKSwNCisJCQkJIFN0YW5kYXJkUGFja2FnZS5MaXRlcmFscy5TVEFOREFSRF9QT1BVTEFUSU9OX01PREVMX19ERUFUSF9SQVRFLA0KKwkJCQkgdHJ1ZSwNCisJCQkJIGZhbHNlLA0KKwkJCQkgZmFsc2UsDQorCQkJCSBJdGVtUHJvcGVydHlEZXNjcmlwdG9yLlJFQUxfVkFMVUVfSU1BR0UsDQorCQkJCSBudWxsLA0KKwkJCQkgbnVsbCkpOw0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIGFkZHMgYSBwcm9wZXJ0eSBkZXNjcmlwdG9yIGZvciB0aGUgVGltZSBQZXJpb2QgZmVhdHVyZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCB2b2lkIGFkZFRpbWVQZXJpb2RQcm9wZXJ0eURlc2NyaXB0b3IoT2JqZWN0IG9iamVjdCkgew0KKwkJaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMuYWRkDQorCQkJKGNyZWF0ZUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3INCisJCQkJKCgoQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSlhZGFwdGVyRmFjdG9yeSkuZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCksDQorCQkJCSBnZXRSZXNvdXJjZUxvY2F0b3IoKSwNCisJCQkJIGdldFN0cmluZygiX1VJX1N0YW5kYXJkUG9wdWxhdGlvbk1vZGVsX3RpbWVQZXJpb2RfZmVhdHVyZSIpLA0KKwkJCQkgZ2V0U3RyaW5nKCJfVUlfUHJvcGVydHlEZXNjcmlwdG9yX2Rlc2NyaXB0aW9uIiwgIl9VSV9TdGFuZGFyZFBvcHVsYXRpb25Nb2RlbF90aW1lUGVyaW9kX2ZlYXR1cmUiLCAiX1VJX1N0YW5kYXJkUG9wdWxhdGlvbk1vZGVsX3R5cGUiKSwNCisJCQkJIFN0YW5kYXJkUGFja2FnZS5MaXRlcmFscy5TVEFOREFSRF9QT1BVTEFUSU9OX01PREVMX19USU1FX1BFUklPRCwNCisJCQkJIHRydWUsDQorCQkJCSBmYWxzZSwNCisJCQkJIGZhbHNlLA0KKwkJCQkgSXRlbVByb3BlcnR5RGVzY3JpcHRvci5JTlRFR1JBTF9WQUxVRV9JTUFHRSwNCisJCQkJIG51bGwsDQorCQkJCSBudWxsKSk7DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgcmV0dXJucyBTdGFuZGFyZFBvcHVsYXRpb25Nb2RlbC5naWYuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkIE5PVA0KKwkgKi8NCisJQE92ZXJyaWRlDQorCXB1YmxpYyBPYmplY3QgZ2V0SW1hZ2UoT2JqZWN0IG9iamVjdCkgew0KKwkJcmV0dXJuIG92ZXJsYXlJbWFnZShvYmplY3QsIGdldFJlc291cmNlTG9jYXRvcigpLmdldEltYWdlKCJmdWxsL2N1c3RvbTE2L1N0YW5kYXJkUG9wdWxhdGlvbk1vZGVsIikpOw0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIHJldHVybnMgdGhlIGxhYmVsIHRleHQgZm9yIHRoZSBhZGFwdGVkIGNsYXNzLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZCBOT1QNCisJICovDQorCUBPdmVycmlkZQ0KKwlwdWJsaWMgU3RyaW5nIGdldFRleHQoT2JqZWN0IG9iamVjdCkgew0KKwkJcmV0dXJuIHN1cGVyLmdldFRleHQob2JqZWN0KTsNCisJfQ0KKw0KKwkvKioNCisJICogVGhpcyByZXR1cm5zIHRoZSBsYWJlbCB0ZXh0IGZvciB0aGUgYWRhcHRlZCBjbGFzcy4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCUBPdmVycmlkZQ0KKwlwdWJsaWMgU3RyaW5nIGdldFRleHRHZW4oT2JqZWN0IG9iamVjdCkgew0KKwkJU3RyaW5nIGxhYmVsID0gKChTdGFuZGFyZFBvcHVsYXRpb25Nb2RlbClvYmplY3QpLmdldE5hbWUoKTsNCisJCXJldHVybiBsYWJlbCA9PSBudWxsIHx8IGxhYmVsLmxlbmd0aCgpID09IDAgPw0KKwkJCWdldFN0cmluZygiX1VJX1N0YW5kYXJkUG9wdWxhdGlvbk1vZGVsX3R5cGUiKSA6DQorCQkJZ2V0U3RyaW5nKCJfVUlfU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxfdHlwZSIpICsgIiAiICsgbGFiZWw7DQorCX0NCisJDQorCS8qKg0KKwkgKiBUaGlzIGhhbmRsZXMgbW9kZWwgbm90aWZpY2F0aW9ucyBieSBjYWxsaW5nIHtAbGluayAjdXBkYXRlQ2hpbGRyZW59IHRvIHVwZGF0ZSBhbnkgY2FjaGVkDQorCSAqIGNoaWxkcmVuIGFuZCBieSBjcmVhdGluZyBhIHZpZXdlciBub3RpZmljYXRpb24sIHdoaWNoIGl0IHBhc3NlcyB0byB7QGxpbmsgI2ZpcmVOb3RpZnlDaGFuZ2VkfS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCUBPdmVycmlkZQ0KKwlwdWJsaWMgdm9pZCBub3RpZnlDaGFuZ2VkKE5vdGlmaWNhdGlvbiBub3RpZmljYXRpb24pIHsNCisJCXVwZGF0ZUNoaWxkcmVuKG5vdGlmaWNhdGlvbik7DQorDQorCQlzd2l0Y2ggKG5vdGlmaWNhdGlvbi5nZXRGZWF0dXJlSUQoU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWwuY2xhc3MpKSB7DQorCQkJY2FzZSBTdGFuZGFyZFBhY2thZ2UuU1RBTkRBUkRfUE9QVUxBVElPTl9NT0RFTF9fQklSVEhfUkFURToNCisJCQljYXNlIFN0YW5kYXJkUGFja2FnZS5TVEFOREFSRF9QT1BVTEFUSU9OX01PREVMX19ERUFUSF9SQVRFOg0KKwkJCWNhc2UgU3RhbmRhcmRQYWNrYWdlLlNUQU5EQVJEX1BPUFVMQVRJT05fTU9ERUxfX1RJTUVfUEVSSU9EOg0KKwkJCQlmaXJlTm90aWZ5Q2hhbmdlZChuZXcgVmlld2VyTm90aWZpY2F0aW9uKG5vdGlmaWNhdGlvbiwgbm90aWZpY2F0aW9uLmdldE5vdGlmaWVyKCksIGZhbHNlLCB0cnVlKSk7DQorCQkJCXJldHVybjsNCisJCX0NCisJCXN1cGVyLm5vdGlmeUNoYW5nZWQobm90aWZpY2F0aW9uKTsNCisJfQ0KKw0KKwkvKioNCisJICogVGhpcyBhZGRzIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuZWRpdC5jb21tYW5kLkNvbW1hbmRQYXJhbWV0ZXJ9cyBkZXNjcmliaW5nIHRoZSBjaGlsZHJlbg0KKwkgKiB0aGF0IGNhbiBiZSBjcmVhdGVkIHVuZGVyIHRoaXMgb2JqZWN0Lg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJQE92ZXJyaWRlDQorCXByb3RlY3RlZCB2b2lkIGNvbGxlY3ROZXdDaGlsZERlc2NyaXB0b3JzKENvbGxlY3Rpb248T2JqZWN0PiBuZXdDaGlsZERlc2NyaXB0b3JzLCBPYmplY3Qgb2JqZWN0KSB7DQorCQlzdXBlci5jb2xsZWN0TmV3Q2hpbGREZXNjcmlwdG9ycyhuZXdDaGlsZERlc2NyaXB0b3JzLCBvYmplY3QpOw0KKwl9DQorDQorfQ0KZGlmZiAtLWdpdCBhL21vZGVscy9wb3B1bGF0aW9ucy9vcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vcG9wdWxhdGlvbm1vZGVscy9zdGFuZGFyZC9wcm92aWRlci9TdGFuZGFyZFBvcHVsYXRpb25Nb2RlbExhYmVsSXRlbVByb3ZpZGVyLmphdmEgYi9tb2RlbHMvcG9wdWxhdGlvbnMvb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3BvcHVsYXRpb25tb2RlbHMvc3RhbmRhcmQvcHJvdmlkZXIvU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxMYWJlbEl0ZW1Qcm92aWRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIxZmNlMGYKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvcG9wdWxhdGlvbnMvb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3BvcHVsYXRpb25tb2RlbHMvc3RhbmRhcmQvcHJvdmlkZXIvU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxMYWJlbEl0ZW1Qcm92aWRlci5qYXZhCkBAIC0wLDAgKzEsMTI1IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5wcm92aWRlcjsNCisNCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyAqIENvcHlyaWdodCAoYykgMjAwOSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4NCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzDQorICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wDQorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQNCisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbA0KKyAqDQorICogQ29udHJpYnV0b3JzOg0KKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24NCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCisNCisNCitpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247DQoraW1wb3J0IGphdmEudXRpbC5MaXN0Ow0KKw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5BZGFwdGVyRmFjdG9yeTsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuVVJJOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5Db21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5Ow0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JRWRpdGluZ0RvbWFpbkl0ZW1Qcm92aWRlcjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1MYWJlbFByb3ZpZGVyOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbVByb3BlcnR5RGVzY3JpcHRvcjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1Qcm9wZXJ0eVNvdXJjZTsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVN0cnVjdHVyZWRJdGVtQ29udGVudFByb3ZpZGVyOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JVHJlZUl0ZW1Db250ZW50UHJvdmlkZXI7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLlZpZXdlck5vdGlmaWNhdGlvbjsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkdyYXBoUGFja2FnZTsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkUGFja2FnZTsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWw7DQorDQorLyoqDQorICogVGhpcyBpcyB0aGUgaXRlbSBwcm92aWRlciBhZGFwdGVyIGZvciBhIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxMYWJlbH0gb2JqZWN0Lg0KKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorICogQGdlbmVyYXRlZA0KKyAqLw0KK0BTdXBwcmVzc1dhcm5pbmdzKCJ1bnVzZWQiKSANCitwdWJsaWMgY2xhc3MgU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxMYWJlbEl0ZW1Qcm92aWRlcg0KKwlleHRlbmRzIFBvcHVsYXRpb25Nb2RlbExhYmVsSXRlbVByb3ZpZGVyDQorCWltcGxlbWVudHMNCisJCUlFZGl0aW5nRG9tYWluSXRlbVByb3ZpZGVyLA0KKwkJSVN0cnVjdHVyZWRJdGVtQ29udGVudFByb3ZpZGVyLA0KKwkJSVRyZWVJdGVtQ29udGVudFByb3ZpZGVyLA0KKwkJSUl0ZW1MYWJlbFByb3ZpZGVyLA0KKwkJSUl0ZW1Qcm9wZXJ0eVNvdXJjZSB7DQorCS8qKg0KKwkgKiBUaGlzIGNvbnN0cnVjdHMgYW4gaW5zdGFuY2UgZnJvbSBhIGZhY3RvcnkgYW5kIGEgbm90aWZpZXIuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxMYWJlbEl0ZW1Qcm92aWRlcihBZGFwdGVyRmFjdG9yeSBhZGFwdGVyRmFjdG9yeSkgew0KKwkJc3VwZXIoYWRhcHRlckZhY3RvcnkpOw0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIHJldHVybnMgdGhlIHByb3BlcnR5IGRlc2NyaXB0b3JzIGZvciB0aGUgYWRhcHRlZCBjbGFzcy4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCUBPdmVycmlkZQ0KKwlwdWJsaWMgTGlzdDxJSXRlbVByb3BlcnR5RGVzY3JpcHRvcj4gZ2V0UHJvcGVydHlEZXNjcmlwdG9ycyhPYmplY3Qgb2JqZWN0KSB7DQorCQlpZiAoaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMgPT0gbnVsbCkgew0KKwkJCXN1cGVyLmdldFByb3BlcnR5RGVzY3JpcHRvcnMob2JqZWN0KTsNCisNCisJCX0NCisJCXJldHVybiBpdGVtUHJvcGVydHlEZXNjcmlwdG9yczsNCisJfQ0KKw0KKwkvKioNCisJICogVGhpcyByZXR1cm5zIFN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWwuZ2lmLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJQE92ZXJyaWRlDQorCXB1YmxpYyBPYmplY3QgZ2V0SW1hZ2UoT2JqZWN0IG9iamVjdCkgew0KKwkJcmV0dXJuIG92ZXJsYXlJbWFnZShvYmplY3QsIGdldFJlc291cmNlTG9jYXRvcigpLmdldEltYWdlKCJmdWxsL29iajE2L1N0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWwiKSk7DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgcmV0dXJucyB0aGUgbGFiZWwgdGV4dCBmb3IgdGhlIGFkYXB0ZWQgY2xhc3MuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlAT3ZlcnJpZGUNCisJcHVibGljIFN0cmluZyBnZXRUZXh0KE9iamVjdCBvYmplY3QpIHsNCisJCVVSSSBsYWJlbFZhbHVlID0gKChTdGFuZGFyZFBvcHVsYXRpb25Nb2RlbExhYmVsKW9iamVjdCkuZ2V0VVJJKCk7DQorCQlTdHJpbmcgbGFiZWwgPSBsYWJlbFZhbHVlID09IG51bGwgPyBudWxsIDogbGFiZWxWYWx1ZS50b1N0cmluZygpOw0KKwkJcmV0dXJuIGxhYmVsID09IG51bGwgfHwgbGFiZWwubGVuZ3RoKCkgPT0gMCA/DQorCQkJZ2V0U3RyaW5nKCJfVUlfU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxMYWJlbF90eXBlIikgOg0KKwkJCWdldFN0cmluZygiX1VJX1N0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWxfdHlwZSIpICsgIiAiICsgbGFiZWw7DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgaGFuZGxlcyBtb2RlbCBub3RpZmljYXRpb25zIGJ5IGNhbGxpbmcge0BsaW5rICN1cGRhdGVDaGlsZHJlbn0gdG8gdXBkYXRlIGFueSBjYWNoZWQNCisJICogY2hpbGRyZW4gYW5kIGJ5IGNyZWF0aW5nIGEgdmlld2VyIG5vdGlmaWNhdGlvbiwgd2hpY2ggaXQgcGFzc2VzIHRvIHtAbGluayAjZmlyZU5vdGlmeUNoYW5nZWR9Lg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJQE92ZXJyaWRlDQorCXB1YmxpYyB2b2lkIG5vdGlmeUNoYW5nZWQoTm90aWZpY2F0aW9uIG5vdGlmaWNhdGlvbikgew0KKwkJdXBkYXRlQ2hpbGRyZW4obm90aWZpY2F0aW9uKTsNCisJCXN1cGVyLm5vdGlmeUNoYW5nZWQobm90aWZpY2F0aW9uKTsNCisJfQ0KKw0KKwkvKioNCisJICogVGhpcyBhZGRzIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuZWRpdC5jb21tYW5kLkNvbW1hbmRQYXJhbWV0ZXJ9cyBkZXNjcmliaW5nIHRoZSBjaGlsZHJlbg0KKwkgKiB0aGF0IGNhbiBiZSBjcmVhdGVkIHVuZGVyIHRoaXMgb2JqZWN0Lg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJQE92ZXJyaWRlDQorCXByb3RlY3RlZCB2b2lkIGNvbGxlY3ROZXdDaGlsZERlc2NyaXB0b3JzKENvbGxlY3Rpb248T2JqZWN0PiBuZXdDaGlsZERlc2NyaXB0b3JzLCBPYmplY3Qgb2JqZWN0KSB7DQorCQlzdXBlci5jb2xsZWN0TmV3Q2hpbGREZXNjcmlwdG9ycyhuZXdDaGlsZERlc2NyaXB0b3JzLCBvYmplY3QpOw0KKwl9DQorDQorfQ0KZGlmZiAtLWdpdCBhL21vZGVscy9wb3B1bGF0aW9ucy9vcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vcG9wdWxhdGlvbm1vZGVscy9zdGFuZGFyZC9wcm92aWRlci9TdGFuZGFyZFBvcHVsYXRpb25Nb2RlbExhYmVsVmFsdWVJdGVtUHJvdmlkZXIuamF2YSBiL21vZGVscy9wb3B1bGF0aW9ucy9vcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vcG9wdWxhdGlvbm1vZGVscy9zdGFuZGFyZC9wcm92aWRlci9TdGFuZGFyZFBvcHVsYXRpb25Nb2RlbExhYmVsVmFsdWVJdGVtUHJvdmlkZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMzkyZWVjCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL3BvcHVsYXRpb25zL29yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9wb3B1bGF0aW9ubW9kZWxzL3N0YW5kYXJkL3Byb3ZpZGVyL1N0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWxWYWx1ZUl0ZW1Qcm92aWRlci5qYXZhCkBAIC0wLDAgKzEsMjIyIEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5wcm92aWRlcjsNCisNCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyAqIENvcHlyaWdodCAoYykgMjAwOSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4NCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzDQorICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wDQorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQNCisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbA0KKyAqDQorICogQ29udHJpYnV0b3JzOg0KKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24NCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCisNCisNCitpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247DQoraW1wb3J0IGphdmEudXRpbC5MaXN0Ow0KKw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5BZGFwdGVyRmFjdG9yeTsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5Db21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5Ow0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JRWRpdGluZ0RvbWFpbkl0ZW1Qcm92aWRlcjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1MYWJlbFByb3ZpZGVyOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbVByb3BlcnR5RGVzY3JpcHRvcjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1Qcm9wZXJ0eVNvdXJjZTsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVN0cnVjdHVyZWRJdGVtQ29udGVudFByb3ZpZGVyOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JVHJlZUl0ZW1Db250ZW50UHJvdmlkZXI7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLlZpZXdlck5vdGlmaWNhdGlvbjsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkdyYXBoUGFja2FnZTsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkUGFja2FnZTsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWxWYWx1ZTsNCisNCisvKioNCisgKiBUaGlzIGlzIHRoZSBpdGVtIHByb3ZpZGVyIGFkYXB0ZXIgZm9yIGEge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZFBvcHVsYXRpb25Nb2RlbExhYmVsVmFsdWV9IG9iamVjdC4NCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKyAqIEBnZW5lcmF0ZWQNCisgKi8NCitAU3VwcHJlc3NXYXJuaW5ncygidW51c2VkIikgDQorcHVibGljIGNsYXNzIFN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWxWYWx1ZUl0ZW1Qcm92aWRlcg0KKwlleHRlbmRzIFBvcHVsYXRpb25Nb2RlbExhYmVsVmFsdWVJdGVtUHJvdmlkZXINCisJaW1wbGVtZW50cw0KKwkJSUVkaXRpbmdEb21haW5JdGVtUHJvdmlkZXIsDQorCQlJU3RydWN0dXJlZEl0ZW1Db250ZW50UHJvdmlkZXIsDQorCQlJVHJlZUl0ZW1Db250ZW50UHJvdmlkZXIsDQorCQlJSXRlbUxhYmVsUHJvdmlkZXIsDQorCQlJSXRlbVByb3BlcnR5U291cmNlIHsNCisJLyoqDQorCSAqIFRoaXMgY29uc3RydWN0cyBhbiBpbnN0YW5jZSBmcm9tIGEgZmFjdG9yeSBhbmQgYSBub3RpZmllci4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBTdGFuZGFyZFBvcHVsYXRpb25Nb2RlbExhYmVsVmFsdWVJdGVtUHJvdmlkZXIoQWRhcHRlckZhY3RvcnkgYWRhcHRlckZhY3RvcnkpIHsNCisJCXN1cGVyKGFkYXB0ZXJGYWN0b3J5KTsNCisJfQ0KKw0KKwkvKioNCisJICogVGhpcyByZXR1cm5zIHRoZSBwcm9wZXJ0eSBkZXNjcmlwdG9ycyBmb3IgdGhlIGFkYXB0ZWQgY2xhc3MuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlAT3ZlcnJpZGUNCisJcHVibGljIExpc3Q8SUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I+IGdldFByb3BlcnR5RGVzY3JpcHRvcnMoT2JqZWN0IG9iamVjdCkgew0KKwkJaWYgKGl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzID09IG51bGwpIHsNCisJCQlzdXBlci5nZXRQcm9wZXJ0eURlc2NyaXB0b3JzKG9iamVjdCk7DQorDQorCQkJYWRkQ291bnRQcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0KTsNCisJCQlhZGRCaXJ0aHNQcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0KTsNCisJCQlhZGREZWF0aHNQcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0KTsNCisJCQlhZGREZW5zaXR5UHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCk7DQorCQl9DQorCQlyZXR1cm4gaXRlbVByb3BlcnR5RGVzY3JpcHRvcnM7DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgYWRkcyBhIHByb3BlcnR5IGRlc2NyaXB0b3IgZm9yIHRoZSBDb3VudCBmZWF0dXJlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIHZvaWQgYWRkQ291bnRQcm9wZXJ0eURlc2NyaXB0b3IoT2JqZWN0IG9iamVjdCkgew0KKwkJaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMuYWRkDQorCQkJKGNyZWF0ZUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3INCisJCQkJKCgoQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSlhZGFwdGVyRmFjdG9yeSkuZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCksDQorCQkJCSBnZXRSZXNvdXJjZUxvY2F0b3IoKSwNCisJCQkJIGdldFN0cmluZygiX1VJX1N0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWxWYWx1ZV9jb3VudF9mZWF0dXJlIiksDQorCQkJCSBnZXRTdHJpbmcoIl9VSV9Qcm9wZXJ0eURlc2NyaXB0b3JfZGVzY3JpcHRpb24iLCAiX1VJX1N0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWxWYWx1ZV9jb3VudF9mZWF0dXJlIiwgIl9VSV9TdGFuZGFyZFBvcHVsYXRpb25Nb2RlbExhYmVsVmFsdWVfdHlwZSIpLA0KKwkJCQkgU3RhbmRhcmRQYWNrYWdlLkxpdGVyYWxzLlNUQU5EQVJEX1BPUFVMQVRJT05fTU9ERUxfTEFCRUxfVkFMVUVfX0NPVU5ULA0KKwkJCQkgdHJ1ZSwNCisJCQkJIGZhbHNlLA0KKwkJCQkgZmFsc2UsDQorCQkJCSBJdGVtUHJvcGVydHlEZXNjcmlwdG9yLlJFQUxfVkFMVUVfSU1BR0UsDQorCQkJCSBudWxsLA0KKwkJCQkgbnVsbCkpOw0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIGFkZHMgYSBwcm9wZXJ0eSBkZXNjcmlwdG9yIGZvciB0aGUgQmlydGhzIGZlYXR1cmUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgdm9pZCBhZGRCaXJ0aHNQcm9wZXJ0eURlc2NyaXB0b3IoT2JqZWN0IG9iamVjdCkgew0KKwkJaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMuYWRkDQorCQkJKGNyZWF0ZUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3INCisJCQkJKCgoQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSlhZGFwdGVyRmFjdG9yeSkuZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCksDQorCQkJCSBnZXRSZXNvdXJjZUxvY2F0b3IoKSwNCisJCQkJIGdldFN0cmluZygiX1VJX1N0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWxWYWx1ZV9iaXJ0aHNfZmVhdHVyZSIpLA0KKwkJCQkgZ2V0U3RyaW5nKCJfVUlfUHJvcGVydHlEZXNjcmlwdG9yX2Rlc2NyaXB0aW9uIiwgIl9VSV9TdGFuZGFyZFBvcHVsYXRpb25Nb2RlbExhYmVsVmFsdWVfYmlydGhzX2ZlYXR1cmUiLCAiX1VJX1N0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWxWYWx1ZV90eXBlIiksDQorCQkJCSBTdGFuZGFyZFBhY2thZ2UuTGl0ZXJhbHMuU1RBTkRBUkRfUE9QVUxBVElPTl9NT0RFTF9MQUJFTF9WQUxVRV9fQklSVEhTLA0KKwkJCQkgdHJ1ZSwNCisJCQkJIGZhbHNlLA0KKwkJCQkgZmFsc2UsDQorCQkJCSBJdGVtUHJvcGVydHlEZXNjcmlwdG9yLlJFQUxfVkFMVUVfSU1BR0UsDQorCQkJCSBudWxsLA0KKwkJCQkgbnVsbCkpOw0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIGFkZHMgYSBwcm9wZXJ0eSBkZXNjcmlwdG9yIGZvciB0aGUgRGVhdGhzIGZlYXR1cmUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgdm9pZCBhZGREZWF0aHNQcm9wZXJ0eURlc2NyaXB0b3IoT2JqZWN0IG9iamVjdCkgew0KKwkJaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMuYWRkDQorCQkJKGNyZWF0ZUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3INCisJCQkJKCgoQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSlhZGFwdGVyRmFjdG9yeSkuZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCksDQorCQkJCSBnZXRSZXNvdXJjZUxvY2F0b3IoKSwNCisJCQkJIGdldFN0cmluZygiX1VJX1N0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWxWYWx1ZV9kZWF0aHNfZmVhdHVyZSIpLA0KKwkJCQkgZ2V0U3RyaW5nKCJfVUlfUHJvcGVydHlEZXNjcmlwdG9yX2Rlc2NyaXB0aW9uIiwgIl9VSV9TdGFuZGFyZFBvcHVsYXRpb25Nb2RlbExhYmVsVmFsdWVfZGVhdGhzX2ZlYXR1cmUiLCAiX1VJX1N0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWxWYWx1ZV90eXBlIiksDQorCQkJCSBTdGFuZGFyZFBhY2thZ2UuTGl0ZXJhbHMuU1RBTkRBUkRfUE9QVUxBVElPTl9NT0RFTF9MQUJFTF9WQUxVRV9fREVBVEhTLA0KKwkJCQkgdHJ1ZSwNCisJCQkJIGZhbHNlLA0KKwkJCQkgZmFsc2UsDQorCQkJCSBJdGVtUHJvcGVydHlEZXNjcmlwdG9yLlJFQUxfVkFMVUVfSU1BR0UsDQorCQkJCSBudWxsLA0KKwkJCQkgbnVsbCkpOw0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIGFkZHMgYSBwcm9wZXJ0eSBkZXNjcmlwdG9yIGZvciB0aGUgRGVuc2l0eSBmZWF0dXJlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIHZvaWQgYWRkRGVuc2l0eVByb3BlcnR5RGVzY3JpcHRvcihPYmplY3Qgb2JqZWN0KSB7DQorCQlpdGVtUHJvcGVydHlEZXNjcmlwdG9ycy5hZGQNCisJCQkoY3JlYXRlSXRlbVByb3BlcnR5RGVzY3JpcHRvcg0KKwkJCQkoKChDb21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5KWFkYXB0ZXJGYWN0b3J5KS5nZXRSb290QWRhcHRlckZhY3RvcnkoKSwNCisJCQkJIGdldFJlc291cmNlTG9jYXRvcigpLA0KKwkJCQkgZ2V0U3RyaW5nKCJfVUlfU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxMYWJlbFZhbHVlX2RlbnNpdHlfZmVhdHVyZSIpLA0KKwkJCQkgZ2V0U3RyaW5nKCJfVUlfUHJvcGVydHlEZXNjcmlwdG9yX2Rlc2NyaXB0aW9uIiwgIl9VSV9TdGFuZGFyZFBvcHVsYXRpb25Nb2RlbExhYmVsVmFsdWVfZGVuc2l0eV9mZWF0dXJlIiwgIl9VSV9TdGFuZGFyZFBvcHVsYXRpb25Nb2RlbExhYmVsVmFsdWVfdHlwZSIpLA0KKwkJCQkgU3RhbmRhcmRQYWNrYWdlLkxpdGVyYWxzLlNUQU5EQVJEX1BPUFVMQVRJT05fTU9ERUxfTEFCRUxfVkFMVUVfX0RFTlNJVFksDQorCQkJCSBmYWxzZSwNCisJCQkJIGZhbHNlLA0KKwkJCQkgZmFsc2UsDQorCQkJCSBJdGVtUHJvcGVydHlEZXNjcmlwdG9yLlJFQUxfVkFMVUVfSU1BR0UsDQorCQkJCSBudWxsLA0KKwkJCQkgbnVsbCkpOw0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIHJldHVybnMgU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxMYWJlbFZhbHVlLmdpZi4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCUBPdmVycmlkZQ0KKwlwdWJsaWMgT2JqZWN0IGdldEltYWdlKE9iamVjdCBvYmplY3QpIHsNCisJCXJldHVybiBvdmVybGF5SW1hZ2Uob2JqZWN0LCBnZXRSZXNvdXJjZUxvY2F0b3IoKS5nZXRJbWFnZSgiZnVsbC9vYmoxNi9TdGFuZGFyZFBvcHVsYXRpb25Nb2RlbExhYmVsVmFsdWUiKSk7DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgcmV0dXJucyB0aGUgbGFiZWwgdGV4dCBmb3IgdGhlIGFkYXB0ZWQgY2xhc3MuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlAT3ZlcnJpZGUNCisJcHVibGljIFN0cmluZyBnZXRUZXh0KE9iamVjdCBvYmplY3QpIHsNCisJCVN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWxWYWx1ZSBzdGFuZGFyZFBvcHVsYXRpb25Nb2RlbExhYmVsVmFsdWUgPSAoU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxMYWJlbFZhbHVlKW9iamVjdDsNCisJCXJldHVybiBnZXRTdHJpbmcoIl9VSV9TdGFuZGFyZFBvcHVsYXRpb25Nb2RlbExhYmVsVmFsdWVfdHlwZSIpICsgIiAiICsgc3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxMYWJlbFZhbHVlLmdldENvdW50KCk7DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgaGFuZGxlcyBtb2RlbCBub3RpZmljYXRpb25zIGJ5IGNhbGxpbmcge0BsaW5rICN1cGRhdGVDaGlsZHJlbn0gdG8gdXBkYXRlIGFueSBjYWNoZWQNCisJICogY2hpbGRyZW4gYW5kIGJ5IGNyZWF0aW5nIGEgdmlld2VyIG5vdGlmaWNhdGlvbiwgd2hpY2ggaXQgcGFzc2VzIHRvIHtAbGluayAjZmlyZU5vdGlmeUNoYW5nZWR9Lg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJQE92ZXJyaWRlDQorCXB1YmxpYyB2b2lkIG5vdGlmeUNoYW5nZWQoTm90aWZpY2F0aW9uIG5vdGlmaWNhdGlvbikgew0KKwkJdXBkYXRlQ2hpbGRyZW4obm90aWZpY2F0aW9uKTsNCisNCisJCXN3aXRjaCAobm90aWZpY2F0aW9uLmdldEZlYXR1cmVJRChTdGFuZGFyZFBvcHVsYXRpb25Nb2RlbExhYmVsVmFsdWUuY2xhc3MpKSB7DQorCQkJY2FzZSBTdGFuZGFyZFBhY2thZ2UuU1RBTkRBUkRfUE9QVUxBVElPTl9NT0RFTF9MQUJFTF9WQUxVRV9fQ09VTlQ6DQorCQkJY2FzZSBTdGFuZGFyZFBhY2thZ2UuU1RBTkRBUkRfUE9QVUxBVElPTl9NT0RFTF9MQUJFTF9WQUxVRV9fQklSVEhTOg0KKwkJCWNhc2UgU3RhbmRhcmRQYWNrYWdlLlNUQU5EQVJEX1BPUFVMQVRJT05fTU9ERUxfTEFCRUxfVkFMVUVfX0RFQVRIUzoNCisJCQljYXNlIFN0YW5kYXJkUGFja2FnZS5TVEFOREFSRF9QT1BVTEFUSU9OX01PREVMX0xBQkVMX1ZBTFVFX19ERU5TSVRZOg0KKwkJCQlmaXJlTm90aWZ5Q2hhbmdlZChuZXcgVmlld2VyTm90aWZpY2F0aW9uKG5vdGlmaWNhdGlvbiwgbm90aWZpY2F0aW9uLmdldE5vdGlmaWVyKCksIGZhbHNlLCB0cnVlKSk7DQorCQkJCXJldHVybjsNCisJCX0NCisJCXN1cGVyLm5vdGlmeUNoYW5nZWQobm90aWZpY2F0aW9uKTsNCisJfQ0KKw0KKwkvKioNCisJICogVGhpcyBhZGRzIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuZWRpdC5jb21tYW5kLkNvbW1hbmRQYXJhbWV0ZXJ9cyBkZXNjcmliaW5nIHRoZSBjaGlsZHJlbg0KKwkgKiB0aGF0IGNhbiBiZSBjcmVhdGVkIHVuZGVyIHRoaXMgb2JqZWN0Lg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJQE92ZXJyaWRlDQorCXByb3RlY3RlZCB2b2lkIGNvbGxlY3ROZXdDaGlsZERlc2NyaXB0b3JzKENvbGxlY3Rpb248T2JqZWN0PiBuZXdDaGlsZERlc2NyaXB0b3JzLCBPYmplY3Qgb2JqZWN0KSB7DQorCQlzdXBlci5jb2xsZWN0TmV3Q2hpbGREZXNjcmlwdG9ycyhuZXdDaGlsZERlc2NyaXB0b3JzLCBvYmplY3QpOw0KKwl9DQorDQorfQ0KZGlmZiAtLWdpdCBhL21vZGVscy9wb3B1bGF0aW9ucy9vcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vcG9wdWxhdGlvbm1vZGVscy9zdGFuZGFyZC9wcm92aWRlci9TdGFuZGFyZFJlbGF0aXZlVmFsdWVIaXN0b3J5UHJvdmlkZXJBZGFwdGVyRmFjdG9yeS5qYXZhIGIvbW9kZWxzL3BvcHVsYXRpb25zL29yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9wb3B1bGF0aW9ubW9kZWxzL3N0YW5kYXJkL3Byb3ZpZGVyL1N0YW5kYXJkUmVsYXRpdmVWYWx1ZUhpc3RvcnlQcm92aWRlckFkYXB0ZXJGYWN0b3J5LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzJhOTQwYwotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9wb3B1bGF0aW9ucy9vcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vcG9wdWxhdGlvbm1vZGVscy9zdGFuZGFyZC9wcm92aWRlci9TdGFuZGFyZFJlbGF0aXZlVmFsdWVIaXN0b3J5UHJvdmlkZXJBZGFwdGVyRmFjdG9yeS5qYXZhCkBAIC0wLDAgKzEsMzQwIEBACisvLyBTdGFuZGFyZFJlbGF0aXZlSGlzdG9yeVZhbHVlUHJvdmlkZXJBZGFwdGVyRmFjdG9yeS5qYXZhCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5wcm92aWRlcjsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LkFkYXB0ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FU3RydWN0dXJhbEZlYXR1cmU7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuQ2hhbmdlTm90aWZpZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5Db21wb3NlZEFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklDaGFuZ2VOb3RpZmllcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbVByb3BlcnR5RGVzY3JpcHRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JTm90aWZ5Q2hhbmdlZExpc3RlbmVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5hZGFwdGVycy5oaXN0b3J5Lkhpc3RvcnlQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmFkYXB0ZXJzLmhpc3RvcnkuSGlzdG9yeVByb3ZpZGVyQWRhcHRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmFkYXB0ZXJzLmhpc3RvcnkuSGlzdG9yeVByb3ZpZGVyQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5JZGVudGlmaWFibGU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLlNURU1UaW1lOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuYWRhcHRlcnMucmVsYXRpdmV2YWx1ZS5SZWxhdGl2ZVZhbHVlUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5hZGFwdGVycy5yZWxhdGl2ZXZhbHVlLlJlbGF0aXZlVmFsdWVQcm92aWRlckFkYXB0ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5hZGFwdGVycy5yZWxhdGl2ZXZhbHVlLlJlbGF0aXZlVmFsdWVQcm92aWRlckFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuYWRhcHRlcnMucmVsYXRpdmV2YWx1ZS5oaXN0b3J5LlJlbGF0aXZlVmFsdWVIaXN0b3J5UHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5hZGFwdGVycy5yZWxhdGl2ZXZhbHVlLmhpc3RvcnkuUmVsYXRpdmVWYWx1ZUhpc3RvcnlQcm92aWRlckFkYXB0ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5hZGFwdGVycy5yZWxhdGl2ZXZhbHVlLmhpc3RvcnkuUmVsYXRpdmVWYWx1ZUhpc3RvcnlQcm92aWRlckFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5Qb3B1bGF0aW9uTW9kZWxMYWJlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQudXRpbC5TdGFuZGFyZEFkYXB0ZXJGYWN0b3J5OworCisKKy8qKgorICogVGhpcyBjbGFzcyBpcyBhIGZhY3RvcnkgZm9yIHRoaXMgbW9kZWwgdGhhdCBjcmVhdGVzCisgKiB7QGxpbmsgUmVsYXRpdmVWYWx1ZUhpc3RvcnlQcm92aWRlcn0ncyBmb3IgY2xhc3NlcyBpbiB0aGUgbW9kZWwuCisgKi8KK3B1YmxpYyBjbGFzcyBTdGFuZGFyZFJlbGF0aXZlVmFsdWVIaXN0b3J5UHJvdmlkZXJBZGFwdGVyRmFjdG9yeSBleHRlbmRzCisJCVN0YW5kYXJkQWRhcHRlckZhY3RvcnkgaW1wbGVtZW50cworCQlSZWxhdGl2ZVZhbHVlSGlzdG9yeVByb3ZpZGVyQWRhcHRlckZhY3RvcnkgeworCisJCisJCisJLyoqCisJICogVGhpcyBrZWVwcyB0cmFjayBvZiB0aGUgcm9vdCBhZGFwdGVyIGZhY3RvcnkgdGhhdCBkZWxlZ2F0ZXMgdG8gdGhpcworCSAqIGFkYXB0ZXIgZmFjdG9yeS4KKwkgKi8KKwlwcm90ZWN0ZWQgQ29tcG9zZWRBZGFwdGVyRmFjdG9yeSBwYXJlbnRBZGFwdGVyRmFjdG9yeTsKKworCS8qKgorCSAqIFRoaXMgaXMgdXNlZCB0byBpbXBsZW1lbnQKKwkgKiB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUNoYW5nZU5vdGlmaWVyfS4KKwkgKi8KKwlwcm90ZWN0ZWQgSUNoYW5nZU5vdGlmaWVyIGNoYW5nZU5vdGlmaWVyID0gbmV3IENoYW5nZU5vdGlmaWVyKCk7CisKKwkvKioKKwkgKiBUaGlzIGZhY3RvcnkgaXMgdXNlZCB0byBjcmVhdGUgaXRlbSBwcm92aWRlcnMgZm9yIHRoZSBhZGFwdGVkIGNsYXNzZXMuCisJICogVGhlIGl0ZW0gcHJvdmlkZXJzIGFyZSB1c2VkIGFzIHByb3BlcnR5IHNvdXJjZXMgdG8gZ2V0IHRoZSBwcm9wZXJ0aWVzCisJICogdGhhdCBjYW4gaGF2ZSByZWxhdGl2ZSB2YWx1ZXMuCisJICovCisJLy9wcml2YXRlIHN0YXRpYyBTdGFuZGFyZEl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5IGl0ZW1Qcm92aWRlckZhY3Rvcnk7CisKKwlwcml2YXRlIEhpc3RvcnlQcm92aWRlckFkYXB0ZXIgaGlzdG9yeVByb3ZpZGVyQWRhcHRlciA9IG51bGw7CisKKwkvKioKKwkgKiBEZWZhdWx0IENvbnN0cnVjdG9yCisJICovCisJcHVibGljIFN0YW5kYXJkUmVsYXRpdmVWYWx1ZUhpc3RvcnlQcm92aWRlckFkYXB0ZXJGYWN0b3J5KCkgeworCQlzdXBlcigpOworCQlSZWxhdGl2ZVZhbHVlSGlzdG9yeVByb3ZpZGVyQWRhcHRlckZhY3RvcnkuSU5TVEFOQ0UKKwkJCQkuYWRkQWRhcHRlckZhY3RvcnkodGhpcyk7CisJfSAvLyBTdGFuZGFyZFJlbGF0aXZlSGlzdG9yeVZhbHVlUHJvdmlkZXJBZGFwdGVyRmFjdG9yeQorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQudXRpbC5TdGFuZGFyZEFkYXB0ZXJGYWN0b3J5I2NyZWF0ZUFkYXB0ZXIob3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpZXIpCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlQWRhcHRlcihOb3RpZmllciB0YXJnZXQpIHsKKwkJQWRhcHRlciByZXRWYWx1ZSA9IG51bGw7CisKKwkJLy8gQmVmb3JlIHdlIGNyZWF0ZSBvdXIgYWRhcHRlciwgd2UgdHJ5IHRvIGFkYXB0IHRoZSB0YXJnZXQgdG8gYQorCQkvLyBIaXN0b3J5UHJvdmlkZXIuIElmIHdlIGNhbid0IHRoZW4gd2UncmUgZG9uZSBhbmQgcmV0dXJuIG51bGwgdG8KKwkJLy8gaW5kaWNhdGUgdGhhdCB0aGlzIGZhY3RvcnkgY2FuJ3QgY3JlYXRlIHRoZSBhZGFwdGVyLiBJZiBub3QsIHRoZW4gd2UKKwkJLy8gcmVtZW1iZXIgdGhlIGhpc3RvcnkgcHJvdmlkZXIgYW5kIGxldCB0aGUgc3VwZXIgY2xhc3MncyBtZXRob2QgZG8gdGhlCisJCS8vIHN3aXRjaCBvbiB0aGUgdHlwZS4KKwkJaGlzdG9yeVByb3ZpZGVyQWRhcHRlciA9IChIaXN0b3J5UHJvdmlkZXJBZGFwdGVyKSBIaXN0b3J5UHJvdmlkZXJBZGFwdGVyRmFjdG9yeS5JTlNUQU5DRQorCQkJCS5hZGFwdCh0YXJnZXQsIEhpc3RvcnlQcm92aWRlci5jbGFzcyk7CisKKwkJLy8gRGlkIHdlIHN1Y2NlZWQ/CisJCWlmIChoaXN0b3J5UHJvdmlkZXJBZGFwdGVyICE9IG51bGwpIHsKKwkJCS8vIFllcworCQkJcmV0VmFsdWUgPSBzdXBlci5jcmVhdGVBZGFwdGVyKHRhcmdldCk7CisJCX0gLy8gaWYKKworCQlyZXR1cm4gcmV0VmFsdWU7CisJfSAvLyBjcmVhdGVBZGFwdGVyCisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC51dGlsLlN0YW5kYXJkQWRhcHRlckZhY3RvcnkjY3JlYXRlUG9wdWxhdGlvbk1vZGVsTGFiZWxBZGFwdGVyKCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVQb3B1bGF0aW9uTW9kZWxMYWJlbEFkYXB0ZXIoKSB7CisJCXJldHVybiBuZXcgUG9wdWxhdGlvbk1vZGVsTGFiZWxSZWxhdGl2ZVZhbHVlSGlzdG9yeVByb3ZpZGVyKAorCQkJCWhpc3RvcnlQcm92aWRlckFkYXB0ZXIpOworCX0gLy8gY3JlYXRlUG9wdWxhdGlvbk1vZGVsTGFiZWxBZGFwdGVyCisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklDaGFuZ2VOb3RpZmllciNhZGRMaXN0ZW5lcihvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JTm90aWZ5Q2hhbmdlZExpc3RlbmVyKQorCSAqLworCXB1YmxpYyB2b2lkIGFkZExpc3RlbmVyKGZpbmFsIElOb3RpZnlDaGFuZ2VkTGlzdGVuZXIgbm90aWZ5Q2hhbmdlZExpc3RlbmVyKSB7CisJCWNoYW5nZU5vdGlmaWVyLmFkZExpc3RlbmVyKG5vdGlmeUNoYW5nZWRMaXN0ZW5lcik7CisJfSAvLyBhZGRMaXN0ZW5lcgorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JQ2hhbmdlTm90aWZpZXIjZmlyZU5vdGlmeUNoYW5nZWQob3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uKQorCSAqLworCXB1YmxpYyB2b2lkIGZpcmVOb3RpZnlDaGFuZ2VkKGZpbmFsIE5vdGlmaWNhdGlvbiBub3RpZmljYXRpb24pIHsKKwkJY2hhbmdlTm90aWZpZXIuZmlyZU5vdGlmeUNoYW5nZWQobm90aWZpY2F0aW9uKTsKKwkJaWYgKHBhcmVudEFkYXB0ZXJGYWN0b3J5ICE9IG51bGwpIHsKKwkJCXBhcmVudEFkYXB0ZXJGYWN0b3J5LmZpcmVOb3RpZnlDaGFuZ2VkKG5vdGlmaWNhdGlvbik7CisJCX0KKwl9IC8vIGZpcmVOb3RpZnlDaGFuZ2VkCisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklDaGFuZ2VOb3RpZmllciNyZW1vdmVMaXN0ZW5lcihvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JTm90aWZ5Q2hhbmdlZExpc3RlbmVyKQorCSAqLworCXB1YmxpYyB2b2lkIHJlbW92ZUxpc3RlbmVyKAorCQkJZmluYWwgSU5vdGlmeUNoYW5nZWRMaXN0ZW5lciBub3RpZnlDaGFuZ2VkTGlzdGVuZXIpIHsKKwkJY2hhbmdlTm90aWZpZXIucmVtb3ZlTGlzdGVuZXIobm90aWZ5Q2hhbmdlZExpc3RlbmVyKTsKKwl9IC8vIHJlbW92ZUxpc3RlbmVyCisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkNvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnkjZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCkKKwkgKi8KKwlwdWJsaWMgQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSBnZXRSb290QWRhcHRlckZhY3RvcnkoKSB7CisJCXJldHVybiBwYXJlbnRBZGFwdGVyRmFjdG9yeSA9PSBudWxsID8gdGhpcyA6IHBhcmVudEFkYXB0ZXJGYWN0b3J5CisJCQkJLmdldFJvb3RBZGFwdGVyRmFjdG9yeSgpOworCX0gLy8gZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5CisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkNvbXBvc2VhYmxlQWRhcHRlckZhY3Rvcnkjc2V0UGFyZW50QWRhcHRlckZhY3Rvcnkob3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuQ29tcG9zZWRBZGFwdGVyRmFjdG9yeSkKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRQYXJlbnRBZGFwdGVyRmFjdG9yeSgKKwkJCWZpbmFsIENvbXBvc2VkQWRhcHRlckZhY3RvcnkgcGFyZW50QWRhcHRlckZhY3RvcnkpIHsKKwkJdGhpcy5wYXJlbnRBZGFwdGVyRmFjdG9yeSA9IHBhcmVudEFkYXB0ZXJGYWN0b3J5OworCX0gLy8gc2V0UGFyZW50QWRhcHRlckZhY3RvcnkKKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuQWRhcHRlckZhY3RvcnkjaXNGYWN0b3J5Rm9yVHlwZShqYXZhLmxhbmcuT2JqZWN0KQorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBib29sZWFuIGlzRmFjdG9yeUZvclR5cGUoZmluYWwgT2JqZWN0IHR5cGUpIHsKKwkJcmV0dXJuIHR5cGUgPT0gUmVsYXRpdmVWYWx1ZUhpc3RvcnlQcm92aWRlci5jbGFzcworCQkJCXx8IHN1cGVyLmlzRmFjdG9yeUZvclR5cGUodHlwZSk7CisJfQorCisJLyoqCisJICogVGhpcyBkaXNwb3NlcyBhbGwgb2YgdGhlIGl0ZW0gcHJvdmlkZXJzIGNyZWF0ZWQgYnkgdGhpcyBmYWN0b3J5LgorCSAqIAorCSAqIEBzZWUgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSURpc3Bvc2FibGUjZGlzcG9zZSgpCisJICovCisJcHVibGljIHZvaWQgZGlzcG9zZSgpIHsKKwkJLy8gTm90aGluZworCX0gLy8gZGlzcG9zZQorCisJLyoqCisJICogQHJldHVybiB0aGUgaW5zdGFuY2Ugb2YgdGhlIFJlbGF0aXZlIFZhbHVlIFByb3ZpZGVyIEFkYXB0ZXIgRmFjdG9yeQorCSAqLworCXByaXZhdGUgc3RhdGljIFJlbGF0aXZlVmFsdWVQcm92aWRlckFkYXB0ZXJGYWN0b3J5IGdldFJlbGF0aXZlVmFsdWVQcm92aWRlckFkYXB0ZXJGYWN0b3J5KCkgeworCQlyZXR1cm4gUmVsYXRpdmVWYWx1ZVByb3ZpZGVyQWRhcHRlckZhY3RvcnkuSU5TVEFOQ0U7CisJfSAvLyBnZXRSZWxhdGl2ZVZhbHVlUHJvdmlkZXJBZGFwdGVyRmFjdG9yeQorCisJLyoqCisJICogVGhpcyBjbGFzcyBpcyBhIFJlbGF0aXZlIFZhbHVlIEhpc3RvcnkgUHJvdmlkZXIgZm9yIFBvcHVsYXRpb25Nb2RlbExhYmVsCisJICogaW5zdGFuY2VzLiBJdCBwcm92aWRlcyBhIGNvbGxlY3Rpb24gb2YgdGhlIHByb3BlcnRpZXMgdGhhdCBjYW4gaGF2ZQorCSAqIHJlbGF0aXZlIHZhbHVlcyBhbmQgd2lsbCBjb21wdXRlIHRoZSB2YWx1ZSBiZXR3ZWVuIDAuMCBhbmQgMS4wIGZvciBhbnkgb2YKKwkgKiB0aG9zZSBwcm9wZXJ0aWVzLiBJdCB3aWxsIGFsc28gcHJvdmlkZSBoaXN0b3JpYyByZWxhdGl2ZSB2YWx1ZXMuCisJICogCisJICogQHNlZSBQb3B1bGF0aW9uTW9kZWxMYWJlbFZhbHVlUmVsYXRpdmVWYWx1ZUhpc3RvcnlQcm92aWRlcgorCSAqLworCXB1YmxpYyBzdGF0aWMgY2xhc3MgUG9wdWxhdGlvbk1vZGVsTGFiZWxSZWxhdGl2ZVZhbHVlSGlzdG9yeVByb3ZpZGVyIGV4dGVuZHMKKwkJCVJlbGF0aXZlVmFsdWVIaXN0b3J5UHJvdmlkZXJBZGFwdGVyIGltcGxlbWVudHMKKwkJCVJlbGF0aXZlVmFsdWVIaXN0b3J5UHJvdmlkZXIgeworCisJCXByaXZhdGUgSGlzdG9yeVByb3ZpZGVyQWRhcHRlciBoaXN0b3J5UHJvdmlkZXJBZGFwdGVyID0gbnVsbDsKKworCQkvKioKKwkJICogQHBhcmFtIGhpc3RvcnlQcm92aWRlckFkYXB0ZXIKKwkJICovCisJCXB1YmxpYyBQb3B1bGF0aW9uTW9kZWxMYWJlbFJlbGF0aXZlVmFsdWVIaXN0b3J5UHJvdmlkZXIoCisJCQkJZmluYWwgSGlzdG9yeVByb3ZpZGVyQWRhcHRlciBoaXN0b3J5UHJvdmlkZXJBZGFwdGVyKSB7CisJCQl0aGlzLmhpc3RvcnlQcm92aWRlckFkYXB0ZXIgPSBoaXN0b3J5UHJvdmlkZXJBZGFwdGVyOworCQkJaGlzdG9yeVByb3ZpZGVyQWRhcHRlci5hZGRFeHRlbnNpb25MaXN0ZW5lcih0aGlzKTsKKwkJfSAvLyBQb3B1bGF0aW9uTW9kZWxMYWJlbFJlbGF0aXZlVmFsdWVIaXN0b3J5UHJvdmlkZXIKKworCQkvKioKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmFkYXB0ZXJzLnJlbGF0aXZldmFsdWUuUmVsYXRpdmVWYWx1ZVByb3ZpZGVyQWRhcHRlciNnZXRQcm9wZXJ0aWVzKCkKKwkJICovCisJCUBPdmVycmlkZQorCQlwdWJsaWMgTGlzdDxJSXRlbVByb3BlcnR5RGVzY3JpcHRvcj4gZ2V0UHJvcGVydGllcygpIHsKKwkJCWZpbmFsIFBvcHVsYXRpb25Nb2RlbExhYmVsIGRtbCA9IChQb3B1bGF0aW9uTW9kZWxMYWJlbCkgZ2V0VGFyZ2V0KCk7CisJCQlmaW5hbCBSZWxhdGl2ZVZhbHVlUHJvdmlkZXIgcnZwID0gKFJlbGF0aXZlVmFsdWVQcm92aWRlcikgZ2V0UmVsYXRpdmVWYWx1ZVByb3ZpZGVyQWRhcHRlckZhY3RvcnkoKQorCQkJCQkuYWRhcHQoZG1sLmdldEN1cnJlbnRWYWx1ZSgpLCBSZWxhdGl2ZVZhbHVlUHJvdmlkZXIuY2xhc3MpOworCQkJcmV0dXJuIHJ2cC5nZXRQcm9wZXJ0aWVzKCk7CisJCX0gLy8gZ2V0UHJvcGVydGllcworCisJCS8qKgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuYWRhcHRlcnMucmVsYXRpdmV2YWx1ZS5SZWxhdGl2ZVZhbHVlUHJvdmlkZXJBZGFwdGVyI2dldFJlbGF0aXZlVmFsdWUob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVTdHJ1Y3R1cmFsRmVhdHVyZSkKKwkJICovCisJCUBPdmVycmlkZQorCQlwdWJsaWMgZG91YmxlIGdldFJlbGF0aXZlVmFsdWUoZmluYWwgRVN0cnVjdHVyYWxGZWF0dXJlIGZlYXR1cmUpIHsKKwkJCWZpbmFsIFBvcHVsYXRpb25Nb2RlbExhYmVsIGRtbCA9IChQb3B1bGF0aW9uTW9kZWxMYWJlbCkgZ2V0VGFyZ2V0KCk7CisJCQlmaW5hbCBSZWxhdGl2ZVZhbHVlUHJvdmlkZXIgcnZwID0gKFJlbGF0aXZlVmFsdWVQcm92aWRlcikgZ2V0UmVsYXRpdmVWYWx1ZVByb3ZpZGVyQWRhcHRlckZhY3RvcnkoKQorCQkJCQkuYWRhcHQoZG1sLmdldEN1cnJlbnRWYWx1ZSgpLCBSZWxhdGl2ZVZhbHVlUHJvdmlkZXIuY2xhc3MpOworCQkJcmV0dXJuIHJ2cC5nZXRSZWxhdGl2ZVZhbHVlKGZlYXR1cmUpOworCQl9IC8vIGdldFJlbGF0aXZlVmFsdWUKKworCQkvKioKKwkJICogCisJCSAqIFRPRE8gUGVyaGFwcyBmb3IgUG9wdWxhdGlvbnMgd2Ugc2hvdWxkIG1vZGVsIGEgZGVub21pbmF0b3IuLi4uCisJCSAqIAorCQkgKiBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSBkZW5vbWluYXRvciBvciBzY2FsZSB1c2VkIHRvIGNvbnZlcnQgdG8gcmVsYXRpdmUKKwkJICogdmFsdWVzIGluIHRoZSByYW5nZSAwLTEuIEZvciBleGFtcGxlLCBpbiBhbiBFcGlkZW1pYyBDb21wYXJ0bWVudCBtb2RlbAorCQkgKiB0aGUgc3RhdGUgdmFsdWVzIGFyZSBub3JtYWxpemVkIGJ5IHBvcHVsYXRpb24uCisJCSAqIEl0IGlzIHJlcXVpcmVkIHdoZW5ldmVyIHdlIG5lZWQgdG8gc3dpdGNoIGJldHdlZW4gcmVsYXRpdmUgYW5kIGFic29sdXRlIHZhbHVlcworCQkgKiBvciBjYW4gYmUgdXNlZCB0byBjcmVhdGUgYSBsYWJlbCBzaG93aW5nIHRoZSBtYXhpbXVtIHNjYWxlIGZvciBhbnkgcmVsYXRpdmUgdmFsdWUuCisJCSAqIEByZXR1cm4gdGhlIGRlbm9taW5hdG9yIG9yIHNjYWxlIHVzZWQgdG8gbm9ybWFsaXplIHRoZSByZWxhdGl2ZSB2YWx1ZQorCQkgKi8KKwkJcHVibGljIGRvdWJsZSBnZXREZW5vbWluYXRvcihmaW5hbCBFU3RydWN0dXJhbEZlYXR1cmUgZmVhdHVyZSkgeworLy8JCQlpZihTdGFuZGFyZFJlbGF0aXZlVmFsdWVQcm92aWRlckFkYXB0ZXJGYWN0b3J5LmR5bmFtaWNEZW5vbWluYXRvck1hcC5jb250YWluc0tleShmZWF0dXJlKSkgeworLy8JCQkJcmV0dXJuIFN0YW5kYXJkUmVsYXRpdmVWYWx1ZVByb3ZpZGVyQWRhcHRlckZhY3RvcnkuZHluYW1pY0Rlbm9taW5hdG9yTWFwLmdldChmZWF0dXJlKS5kb3VibGVWYWx1ZSgpOworLy8JCQl9IGVsc2UgeworLy8JCQkJU3RhbmRhcmRSZWxhdGl2ZVZhbHVlUHJvdmlkZXJBZGFwdGVyRmFjdG9yeS5keW5hbWljRGVub21pbmF0b3JNYXAucHV0KGZlYXR1cmUsIG5ldyBEb3VibGUoMS4wKSk7CisvLwkJCQlyZXR1cm4gMS4wOworLy8JCQl9CisJCQlyZXR1cm4gU3RhbmRhcmRSZWxhdGl2ZVZhbHVlUHJvdmlkZXJBZGFwdGVyRmFjdG9yeS5ERU5PTUlOQVRPUjsKKwkJfQorCQkKKwkJLyoqCisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5hZGFwdGVycy5yZWxhdGl2ZXZhbHVlLmhpc3RvcnkuUmVsYXRpdmVWYWx1ZUhpc3RvcnlQcm92aWRlciNnZXRSZWxhdGl2ZVZhbHVlKG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IsCisJCSAqICAgICAgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLlNURU1UaW1lKQorCQkgKi8KKwkJQE92ZXJyaWRlCisJCXB1YmxpYyBkb3VibGUgZ2V0UmVsYXRpdmVWYWx1ZShmaW5hbCBJdGVtUHJvcGVydHlEZXNjcmlwdG9yIHByb3BlcnR5LAorCQkJCWZpbmFsIFNURU1UaW1lIHRpbWUpIHsKKwkJCXJldHVybiBnZXRSZWxhdGl2ZVZhbHVlKChFU3RydWN0dXJhbEZlYXR1cmUpIHByb3BlcnR5CisJCQkJCS5nZXRGZWF0dXJlKG51bGwpLCB0aW1lKTsKKwkJfQorCisJCS8qKgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuYWRhcHRlcnMucmVsYXRpdmV2YWx1ZS5oaXN0b3J5LlJlbGF0aXZlVmFsdWVIaXN0b3J5UHJvdmlkZXJBZGFwdGVyI2dldFJlbGF0aXZlVmFsdWUob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVTdHJ1Y3R1cmFsRmVhdHVyZSwKKwkJICogICAgICBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuU1RFTVRpbWUpCisJCSAqLworCQlAT3ZlcnJpZGUKKwkJcHVibGljIGRvdWJsZSBnZXRSZWxhdGl2ZVZhbHVlKGZpbmFsIEVTdHJ1Y3R1cmFsRmVhdHVyZSBmZWF0dXJlLAorCQkJCWZpbmFsIFNURU1UaW1lIHRpbWUpIHsKKwkJCWhpc3RvcnlQcm92aWRlckFkYXB0ZXIuc2V0VGFyZ2V0KGdldFRhcmdldCgpKTsKKwkJCWZpbmFsIFBvcHVsYXRpb25Nb2RlbExhYmVsIGRtbCA9IChQb3B1bGF0aW9uTW9kZWxMYWJlbCkgaGlzdG9yeVByb3ZpZGVyQWRhcHRlcgorCQkJCQkuZ2V0SW5zdGFuY2UodGltZSk7CisJCQlmaW5hbCBSZWxhdGl2ZVZhbHVlUHJvdmlkZXJBZGFwdGVyIHJ2cCA9IChSZWxhdGl2ZVZhbHVlUHJvdmlkZXJBZGFwdGVyKSBSZWxhdGl2ZVZhbHVlUHJvdmlkZXJBZGFwdGVyRmFjdG9yeS5JTlNUQU5DRQorCQkJCQkuYWRhcHQoZG1sLCBSZWxhdGl2ZVZhbHVlUHJvdmlkZXIuY2xhc3MpOworCQkJcmV0dXJuIHJ2cC5nZXRSZWxhdGl2ZVZhbHVlKGZlYXR1cmUpOworCQl9IC8vIGdldFJlbGF0aXZlVmFsdWUKKworCQkvKioKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmFkYXB0ZXJzLnJlbGF0aXZldmFsdWUuaGlzdG9yeS5SZWxhdGl2ZVZhbHVlSGlzdG9yeVByb3ZpZGVyI2dldEFsbEhpc3RvcmljUmVsYXRpdmVWYWx1ZXMob3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSXRlbVByb3BlcnR5RGVzY3JpcHRvcikKKwkJICovCisJCUBPdmVycmlkZQorCQlwdWJsaWMgZG91YmxlW10gZ2V0QWxsSGlzdG9yaWNSZWxhdGl2ZVZhbHVlcygKKwkJCQlmaW5hbCBJdGVtUHJvcGVydHlEZXNjcmlwdG9yIHByb3BlcnR5KSB7CisJCQlyZXR1cm4gZ2V0QWxsSGlzdG9yaWNSZWxhdGl2ZVZhbHVlcygoRVN0cnVjdHVyYWxGZWF0dXJlKSBwcm9wZXJ0eQorCQkJCQkuZ2V0RmVhdHVyZShudWxsKSk7CisJCX0KKworCQkvKioKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmFkYXB0ZXJzLnJlbGF0aXZldmFsdWUuaGlzdG9yeS5SZWxhdGl2ZVZhbHVlSGlzdG9yeVByb3ZpZGVyQWRhcHRlciNnZXRBbGxIaXN0b3JpY1JlbGF0aXZlVmFsdWVzKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FU3RydWN0dXJhbEZlYXR1cmUpCisJCSAqLworCQlAT3ZlcnJpZGUKKwkJcHVibGljIGRvdWJsZVtdIGdldEFsbEhpc3RvcmljUmVsYXRpdmVWYWx1ZXMoCisJCQkJZmluYWwgRVN0cnVjdHVyYWxGZWF0dXJlIGZlYXR1cmUpIHsKKwkJCWhpc3RvcnlQcm92aWRlckFkYXB0ZXIuc2V0VGFyZ2V0KGdldFRhcmdldCgpKTsKKwkJCWZpbmFsIElkZW50aWZpYWJsZVtdIGhpc3RvcmljVmFsdWVzID0gaGlzdG9yeVByb3ZpZGVyQWRhcHRlcgorCQkJCQkuZ2V0QWxsSGlzdG9yaWNJbnN0YW5jZXMoKTsKKwkJCWZpbmFsIGRvdWJsZVtdIHJldFZhbHVlID0gbmV3IGRvdWJsZVtoaXN0b3JpY1ZhbHVlcy5sZW5ndGhdOworCisJCQlpbnQgaSA9IDA7CisJCQlmb3IgKElkZW50aWZpYWJsZSBpZGVudGlmaWFibGUgOiBoaXN0b3JpY1ZhbHVlcykgeworCQkJCWZpbmFsIFBvcHVsYXRpb25Nb2RlbExhYmVsIGRtbCA9IChQb3B1bGF0aW9uTW9kZWxMYWJlbCkgaWRlbnRpZmlhYmxlOworCQkJCWZpbmFsIFJlbGF0aXZlVmFsdWVQcm92aWRlckFkYXB0ZXIgcnZwID0gKFJlbGF0aXZlVmFsdWVQcm92aWRlckFkYXB0ZXIpIFJlbGF0aXZlVmFsdWVQcm92aWRlckFkYXB0ZXJGYWN0b3J5LklOU1RBTkNFCisJCQkJCQkuYWRhcHQoZG1sLCBSZWxhdGl2ZVZhbHVlUHJvdmlkZXIuY2xhc3MpOworCQkJCXJldFZhbHVlW2krK10gPSBydnAuZ2V0UmVsYXRpdmVWYWx1ZShmZWF0dXJlKTsKKwkJCX0gLy8gZm9yIGVhY2ggSWRlbnRpZmlhYmxlCisKKwkJCXJldHVybiByZXRWYWx1ZTsKKwkJfSAvLyBnZXRBbGxIaXN0b3JpY1JlbGF0aXZlVmFsdWVzCisJCQorCisJCS8qKgorCQkgKiAKKwkJICogQHBhcmFtIHByb3BlcnR5CisJCSAqIEBwYXJhbSB0aW1lUmFuZ2UKKwkJICogQHJldHVybgorCQkgKi8KKwkJcHVibGljIGRvdWJsZVtdIGdldEhpc3RvcmljSW5zdGFuY2VzKGZpbmFsIEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IgcHJvcGVydHksIFNURU1UaW1lW10gdGltZVJhbmdlKSB7CisJCQlkb3VibGVbXSBhbGxWYWx1ZXMgPSBnZXRBbGxIaXN0b3JpY1JlbGF0aXZlVmFsdWVzKHByb3BlcnR5KTsKKwkJCWRvdWJsZVtdIHJldFZhbCA9IG5ldyBkb3VibGVbdGltZVJhbmdlLmxlbmd0aF07CisJCQlTeXN0ZW0uYXJyYXljb3B5KGFsbFZhbHVlcywgMCwgcmV0VmFsLCAwLCB0aW1lUmFuZ2UubGVuZ3RoKTsKKwkJCXJldHVybiByZXRWYWw7CisJCX0KKworCQkvKioKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmFkYXB0ZXJzLnJlbGF0aXZldmFsdWUuaGlzdG9yeS5SZWxhdGl2ZVZhbHVlSGlzdG9yeVByb3ZpZGVyQWRhcHRlciNnZXRFYXJsaWVzdFRpbWVWYWx1ZSgpCisJCSAqLworCQlAT3ZlcnJpZGUKKwkJcHVibGljIFNURU1UaW1lIGdldEVhcmxpZXN0VGltZVZhbHVlKCkgeworCQkJaGlzdG9yeVByb3ZpZGVyQWRhcHRlci5zZXRUYXJnZXQoZ2V0VGFyZ2V0KCkpOworCQkJcmV0dXJuIGhpc3RvcnlQcm92aWRlckFkYXB0ZXIuZ2V0RWFybGllc3RUaW1lVmFsdWUoKTsKKwkJfSAvLyBnZXRFYXJsaWVzdFRpbWVWYWx1ZQorCisJCS8qKgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuYWRhcHRlcnMucmVsYXRpdmV2YWx1ZS5oaXN0b3J5LlJlbGF0aXZlVmFsdWVIaXN0b3J5UHJvdmlkZXJBZGFwdGVyI2dldEFsbEhpc3RvcmljVGltZVZhbHVlcygpCisJCSAqLworCQlAT3ZlcnJpZGUKKwkJcHVibGljIFNURU1UaW1lW10gZ2V0QWxsSGlzdG9yaWNUaW1lVmFsdWVzKCkgeworCQkJaGlzdG9yeVByb3ZpZGVyQWRhcHRlci5zZXRUYXJnZXQoZ2V0VGFyZ2V0KCkpOworCQkJcmV0dXJuIGhpc3RvcnlQcm92aWRlckFkYXB0ZXIuZ2V0QWxsSGlzdG9yaWNUaW1lVmFsdWVzKCk7CisJCX0gLy8gZ2V0QWxsSGlzdG9yaWNUaW1lVmFsdWVzCisKKwl9IC8vIFBvcHVsYXRpb25Nb2RlbExhYmVsUmVsYXRpdmVWYWx1ZUhpc3RvcnlQcm92aWRlcgorCit9IC8vIFN0YW5kYXJkUmVsYXRpdmVWYWx1ZUhpc3RvcnlQcm92aWRlckFkYXB0ZXJGYWN0b3J5CmRpZmYgLS1naXQgYS9tb2RlbHMvcG9wdWxhdGlvbnMvb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3BvcHVsYXRpb25tb2RlbHMvc3RhbmRhcmQvcHJvdmlkZXIvU3RhbmRhcmRSZWxhdGl2ZVZhbHVlUHJvdmlkZXJBZGFwdGVyRmFjdG9yeS5qYXZhIGIvbW9kZWxzL3BvcHVsYXRpb25zL29yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9wb3B1bGF0aW9ubW9kZWxzL3N0YW5kYXJkL3Byb3ZpZGVyL1N0YW5kYXJkUmVsYXRpdmVWYWx1ZVByb3ZpZGVyQWRhcHRlckZhY3RvcnkuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZTRmZjY2Ci0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL3BvcHVsYXRpb25zL29yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9wb3B1bGF0aW9ubW9kZWxzL3N0YW5kYXJkL3Byb3ZpZGVyL1N0YW5kYXJkUmVsYXRpdmVWYWx1ZVByb3ZpZGVyQWRhcHRlckZhY3RvcnkuamF2YQpAQCAtMCwwICsxLDM0NiBAQAorLy8gU3RhbmRhcmRSZWxhdGl2ZVZhbHVlUHJvdmlkZXJBZGFwdGVyRmFjdG9yeS5qYXZhCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5wcm92aWRlcjsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OworaW1wb3J0IGphdmEudXRpbC5MaXN0OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LkFkYXB0ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FUmVmZXJlbmNlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FU3RydWN0dXJhbEZlYXR1cmU7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuQ2hhbmdlTm90aWZpZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5Db21wb3NlZEFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklDaGFuZ2VOb3RpZmllcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbVByb3BlcnR5RGVzY3JpcHRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbVByb3BlcnR5U291cmNlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklOb3RpZnlDaGFuZ2VkTGlzdGVuZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkucHJvdmlkZXIuUHJvcGVydHlTb3VyY2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5hZGFwdGVycy5yZWxhdGl2ZXZhbHVlLlJlbGF0aXZlVmFsdWVQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmFkYXB0ZXJzLnJlbGF0aXZldmFsdWUuUmVsYXRpdmVWYWx1ZVByb3ZpZGVyQWRhcHRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmFkYXB0ZXJzLnJlbGF0aXZldmFsdWUuUmVsYXRpdmVWYWx1ZVByb3ZpZGVyQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLlBvcHVsYXRpb25Nb2RlbExhYmVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5Qb3B1bGF0aW9uTW9kZWxMYWJlbFZhbHVlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZFBvcHVsYXRpb25Nb2RlbExhYmVsVmFsdWU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLnV0aWwuU3RhbmRhcmRBZGFwdGVyRmFjdG9yeTsKKworCisvKioKKyAqIFRoaXMgY2xhc3MgaXMgYSBmYWN0b3J5IGZvciB0aGlzIG1vZGVsIHRoYXQgY3JlYXRlcworICoge0BsaW5rIFJlbGF0aXZlVmFsdWVQcm92aWRlcn0ncyBmb3IgY2xhc3NlcyBpbiB0aGUgbW9kZWwuCisgKi8KK3B1YmxpYyBjbGFzcyBTdGFuZGFyZFJlbGF0aXZlVmFsdWVQcm92aWRlckFkYXB0ZXJGYWN0b3J5IGV4dGVuZHMKKwkJU3RhbmRhcmRBZGFwdGVyRmFjdG9yeSBpbXBsZW1lbnRzIFJlbGF0aXZlVmFsdWVQcm92aWRlckFkYXB0ZXJGYWN0b3J5IHsKKworCS8vIGR5bmFtaWNhbGx5IHRyYWNrIGFuZCB1cGRhdGUgdGhlIGRlbm9taW5hdG9yCisJLy8gcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBNYXA8RVN0cnVjdHVyYWxGZWF0dXJlLERvdWJsZT4gZHluYW1pY0Rlbm9taW5hdG9yTWFwID0gbmV3IEhhc2hNYXA8RVN0cnVjdHVyYWxGZWF0dXJlLERvdWJsZT4oKTsKKwlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIGRvdWJsZSBERU5PTUlOQVRPUiA9IDEuMDsKKwkKKwkvKioKKwkgKiBUaGlzIGtlZXBzIHRyYWNrIG9mIHRoZSByb290IGFkYXB0ZXIgZmFjdG9yeSB0aGF0IGRlbGVnYXRlcyB0byB0aGlzCisJICogYWRhcHRlciBmYWN0b3J5LgorCSAqLworCXByb3RlY3RlZCBDb21wb3NlZEFkYXB0ZXJGYWN0b3J5IHBhcmVudEFkYXB0ZXJGYWN0b3J5OworCisJLyoqCisJICogVGhpcyBpcyB1c2VkIHRvIGltcGxlbWVudAorCSAqIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JQ2hhbmdlTm90aWZpZXJ9LgorCSAqLworCXByb3RlY3RlZCBJQ2hhbmdlTm90aWZpZXIgY2hhbmdlTm90aWZpZXIgPSBuZXcgQ2hhbmdlTm90aWZpZXIoKTsKKworCS8qKgorCSAqIFRoaXMgZmFjdG9yeSBpcyB1c2VkIHRvIGNyZWF0ZSBpdGVtIHByb3ZpZGVycyBmb3IgdGhlIGFkYXB0ZWQgY2xhc3Nlcy4KKwkgKiBUaGUgaXRlbSBwcm92aWRlcnMgYXJlIHVzZWQgYXMgcHJvcGVydHkgc291cmNlcyB0byBnZXQgdGhlIHByb3BlcnRpZXMKKwkgKiB0aGF0IGNhbiBoYXZlIHJlbGF0aXZlIHZhbHVlcy4KKwkgKi8KKwlwcml2YXRlIHN0YXRpYyBTdGFuZGFyZEl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5IGl0ZW1Qcm92aWRlckZhY3Rvcnk7CisKKwkvKioKKwkgKiBDb25zdHJ1Y3RvcgorCSAqLworCXB1YmxpYyBTdGFuZGFyZFJlbGF0aXZlVmFsdWVQcm92aWRlckFkYXB0ZXJGYWN0b3J5KCkgeworCQlzdXBlcigpOworCQlSZWxhdGl2ZVZhbHVlUHJvdmlkZXJBZGFwdGVyRmFjdG9yeS5JTlNUQU5DRS5hZGRBZGFwdGVyRmFjdG9yeSh0aGlzKTsKKwl9IC8vIFN0YW5kYXJkUmVsYXRpdmVWYWx1ZVByb3ZpZGVyQWRhcHRlckZhY3RvcnkKKworCS8qKgorCSAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBieSB0aGUge0BsaW5rIFN0YW5kYXJkU3dpdGNofSBpbnN0YW5jZSBpbiB0aGUKKwkgKiBwYXJlbnQge0BsaW5rIFN0YW5kYXJkQWRhcHRlckZhY3Rvcnl9IGZvciBhbGwgY2FzZXMgZm9yIGNsYXNzZXMgZGVyaXZlZAorCSAqIGZyb20ge0BsaW5rIFBvcHVsYXRpb25Nb2RlbExhYmVsfSAoZS5nLiwge0BsaW5rIFNJTGFiZWx9LCB7QGxpbmsgU0lSTGFiZWx9LAorCSAqIHtAbGluayBTRUlSTGFiZWx9KS4KKwkgKiAKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC51dGlsLlN0YW5kYXJkQWRhcHRlckZhY3RvcnkjY3JlYXRlUG9wdWxhdGlvbk1vZGVsTGFiZWxBZGFwdGVyKCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVQb3B1bGF0aW9uTW9kZWxMYWJlbEFkYXB0ZXIoKSB7CisJCS8vIEl0IHNlZW1zIHRoYXQgeW91IGNhbid0IGhhdmUgc2luZ2xldG9uIGFkYXB0ZXJzIHRoYXQgcHJvdmlkZQorCQkvLyBiZWhhdmlvcmFsIGV4dGVuc2lvbnMgd2l0aG91dCBleHBsaWNpdGx5IHNldHRpbmcgdGhlIHRhcmdldAorCQkvLyBlYWNoIHRpbWUgaXQgaXMgYWRhcHRlZAorCQlyZXR1cm4gbmV3IFBvcHVsYXRpb25Nb2RlbExhYmVsUmVsYXRpdmVWYWx1ZVByb3ZpZGVyKCk7CisJfSAvLyBjcmVhdGVQb3B1bGF0aW9uTW9kZWxMYWJlbEFkYXB0ZXIKKworCS8qKgorCSAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBieSB0aGUge0BsaW5rIFN0YW5kYXJkU3dpdGNofSBpbnN0YW5jZSBpbiB0aGUKKwkgKiBwYXJlbnQge0BsaW5rIFN0YW5kYXJkQWRhcHRlckZhY3Rvcnl9IGZvciBhbGwgY2FzZXMgZm9yIGNsYXNzZXMgZGVyaXZlZAorCSAqIGZyb20ge0BsaW5rIFBvcHVsYXRpb25Nb2RlbExhYmVsVmFsdWV9IChlLmcuLCB7QGxpbmsgU0lMYWJlbFZhbHVlfSwKKwkgKiB7QGxpbmsgU0lSTGFiZWxWYWx1ZX0sIHtAbGluayBTRUlSTGFiZWxWYWx1ZX0pLgorCSAqIAorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLnV0aWwuU3RhbmRhcmRBZGFwdGVyRmFjdG9yeSNjcmVhdGVQb3B1bGF0aW9uTW9kZWxMYWJlbFZhbHVlQWRhcHRlcigpCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlUG9wdWxhdGlvbk1vZGVsTGFiZWxWYWx1ZUFkYXB0ZXIoKSB7CisJCS8vIEl0IHNlZW1zIHRoYXQgeW91IGNhbid0IGhhdmUgc2luZ2xldG9uIGFkYXB0ZXJzIHRoYXQgcHJvdmlkZQorCQkvLyBiZWhhdmlvcmFsIGV4dGVuc2lvbnMgd2l0aG91dCBleHBsaWNpdGx5IHNldHRpbmcgdGhlIHRhcmdldAorCQkvLyBlYWNoIHRpbWUgaXQgaXMgYWRhcHRlZAorCQlyZXR1cm4gbmV3IFBvcHVsYXRpb25Nb2RlbExhYmVsVmFsdWVSZWxhdGl2ZVZhbHVlUHJvdmlkZXIoKTsKKwl9IC8vIGNyZWF0ZVBvcHVsYXRpb25Nb2RlbExhYmVsVmFsdWVBZGFwdGVyCisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklDaGFuZ2VOb3RpZmllciNhZGRMaXN0ZW5lcihvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JTm90aWZ5Q2hhbmdlZExpc3RlbmVyKQorCSAqLworCXB1YmxpYyB2b2lkIGFkZExpc3RlbmVyKElOb3RpZnlDaGFuZ2VkTGlzdGVuZXIgbm90aWZ5Q2hhbmdlZExpc3RlbmVyKSB7CisJCWNoYW5nZU5vdGlmaWVyLmFkZExpc3RlbmVyKG5vdGlmeUNoYW5nZWRMaXN0ZW5lcik7CisJfSAvLyBhZGRMaXN0ZW5lcgorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JQ2hhbmdlTm90aWZpZXIjZmlyZU5vdGlmeUNoYW5nZWQob3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uKQorCSAqLworCXB1YmxpYyB2b2lkIGZpcmVOb3RpZnlDaGFuZ2VkKE5vdGlmaWNhdGlvbiBub3RpZmljYXRpb24pIHsKKwkJY2hhbmdlTm90aWZpZXIuZmlyZU5vdGlmeUNoYW5nZWQobm90aWZpY2F0aW9uKTsKKwkJaWYgKHBhcmVudEFkYXB0ZXJGYWN0b3J5ICE9IG51bGwpIHsKKwkJCXBhcmVudEFkYXB0ZXJGYWN0b3J5LmZpcmVOb3RpZnlDaGFuZ2VkKG5vdGlmaWNhdGlvbik7CisJCX0KKwl9IC8vIGZpcmVOb3RpZnlDaGFuZ2VkCisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklDaGFuZ2VOb3RpZmllciNyZW1vdmVMaXN0ZW5lcihvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JTm90aWZ5Q2hhbmdlZExpc3RlbmVyKQorCSAqLworCXB1YmxpYyB2b2lkIHJlbW92ZUxpc3RlbmVyKElOb3RpZnlDaGFuZ2VkTGlzdGVuZXIgbm90aWZ5Q2hhbmdlZExpc3RlbmVyKSB7CisJCWNoYW5nZU5vdGlmaWVyLnJlbW92ZUxpc3RlbmVyKG5vdGlmeUNoYW5nZWRMaXN0ZW5lcik7CisJfSAvLyByZW1vdmVMaXN0ZW5lcgorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5Db21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5I2dldFJvb3RBZGFwdGVyRmFjdG9yeSgpCisJICovCisJcHVibGljIENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnkgZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCkgeworCQlyZXR1cm4gcGFyZW50QWRhcHRlckZhY3RvcnkgPT0gbnVsbCA/IHRoaXMgOiBwYXJlbnRBZGFwdGVyRmFjdG9yeQorCQkJCS5nZXRSb290QWRhcHRlckZhY3RvcnkoKTsKKwl9IC8vIGdldFJvb3RBZGFwdGVyRmFjdG9yeQorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5Db21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5I3NldFBhcmVudEFkYXB0ZXJGYWN0b3J5KG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkNvbXBvc2VkQWRhcHRlckZhY3RvcnkpCisJICovCisJcHVibGljIHZvaWQgc2V0UGFyZW50QWRhcHRlckZhY3RvcnkoCisJCQlDb21wb3NlZEFkYXB0ZXJGYWN0b3J5IHBhcmVudEFkYXB0ZXJGYWN0b3J5KSB7CisJCXRoaXMucGFyZW50QWRhcHRlckZhY3RvcnkgPSBwYXJlbnRBZGFwdGVyRmFjdG9yeTsKKwl9IC8vIHNldFBhcmVudEFkYXB0ZXJGYWN0b3J5CisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC51dGlsLlN0YW5kYXJkQWRhcHRlckZhY3RvcnkjaXNGYWN0b3J5Rm9yVHlwZShqYXZhLmxhbmcuT2JqZWN0KQorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBib29sZWFuIGlzRmFjdG9yeUZvclR5cGUoT2JqZWN0IHR5cGUpIHsKKwkJcmV0dXJuIHR5cGUgPT0gUmVsYXRpdmVWYWx1ZVByb3ZpZGVyLmNsYXNzCisJCQkJfHwgc3VwZXIuaXNGYWN0b3J5Rm9yVHlwZSh0eXBlKTsKKwl9IC8vIGlzRmFjdG9yeUZvclR5cGUKKworCS8qKgorCSAqIFRoaXMgZGlzcG9zZXMgYWxsIG9mIHRoZSBpdGVtIHByb3ZpZGVycyBjcmVhdGVkIGJ5IHRoaXMgZmFjdG9yeS4KKwkgKiAKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklEaXNwb3NhYmxlI2Rpc3Bvc2UoKQorCSAqLworCXB1YmxpYyB2b2lkIGRpc3Bvc2UoKSB7CisJCS8vIE5vdGhpbmcKKwl9IC8vIGRpc3Bvc2UKKworCS8qKgorCSAqIEByZXR1cm4gdGhlIGluc3RhbmNlIG9mIHRoZSBSZWxhdGl2ZSBWYWx1ZSBQcm92aWRlciBBZGFwdGVyIEZhY3RvcnkKKwkgKi8KKwlwcml2YXRlIHN0YXRpYyBSZWxhdGl2ZVZhbHVlUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSBnZXRSZWxhdGl2ZVZhbHVlUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSgpIHsKKwkJcmV0dXJuIFJlbGF0aXZlVmFsdWVQcm92aWRlckFkYXB0ZXJGYWN0b3J5LklOU1RBTkNFOworCX0gLy8gZ2V0UmVsYXRpdmVWYWx1ZVByb3ZpZGVyQWRhcHRlckZhY3RvcnkKKworCS8qKgorCSAqIEByZXR1cm4gdGhlIGluc3RhbmNlIG9mIHRoZSBTdGFuZGFyZCBJdGVtIFByb3ZpZGVyIGZhY3RvcnkuCisJICovCisJcHJpdmF0ZSBzdGF0aWMgU3RhbmRhcmRJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSBnZXRJdGVtUHJvdmlkZXJGYWN0b3J5KCkgeworCQlpZiAoaXRlbVByb3ZpZGVyRmFjdG9yeSA9PSBudWxsKSB7CisJCQlpdGVtUHJvdmlkZXJGYWN0b3J5ID0gbmV3IFN0YW5kYXJkSXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkoKTsKKwkJfQorCQlyZXR1cm4gaXRlbVByb3ZpZGVyRmFjdG9yeTsKKwl9IC8vIGdldEl0ZW1Qcm92aWRlckZhY3RvcnkKKworCS8qKgorCSAqIFRoaXMgY2xhc3MgaXMgYSBSZWxhdGl2ZSBWYWx1ZSBQcm92aWRlciBmb3IgUG9wdWxhdGlvbk1vZGVsTGFiZWwgaW5zdGFuY2VzLgorCSAqIEl0IHByb3ZpZGVzIGEgY29sbGVjdGlvbiBvZiB0aGUgcHJvcGVydGllcyB0aGF0IGNhbiBoYXZlIHJlbGF0aXZlIHZhbHVlcworCSAqIGFuZCB3aWxsIGNvbXB1dGUgdGhlIHZhbHVlIGJldHdlZW4gMC4wIGFuZCAxLjAgZm9yIGFueSBvZiB0aG9zZQorCSAqIHByb3BlcnRpZXMuCisJICogCisJICogQHNlZSBQb3B1bGF0aW9uTW9kZWxMYWJlbFZhbHVlUmVsYXRpdmVWYWx1ZVByb3ZpZGVyCisJICovCisJcHVibGljIHN0YXRpYyBjbGFzcyBQb3B1bGF0aW9uTW9kZWxMYWJlbFJlbGF0aXZlVmFsdWVQcm92aWRlciBleHRlbmRzCisJCQlSZWxhdGl2ZVZhbHVlUHJvdmlkZXJBZGFwdGVyIGltcGxlbWVudHMgUmVsYXRpdmVWYWx1ZVByb3ZpZGVyIHsKKworCQkvKioKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmFkYXB0ZXJzLnJlbGF0aXZldmFsdWUuUmVsYXRpdmVWYWx1ZVByb3ZpZGVyQWRhcHRlciNnZXRQcm9wZXJ0aWVzKCkKKwkJICovCisJCUBPdmVycmlkZQorCQlwdWJsaWMgTGlzdDxJSXRlbVByb3BlcnR5RGVzY3JpcHRvcj4gZ2V0UHJvcGVydGllcygpIHsKKwkJCWZpbmFsIFBvcHVsYXRpb25Nb2RlbExhYmVsIGRtbCA9IChQb3B1bGF0aW9uTW9kZWxMYWJlbCkgZ2V0VGFyZ2V0KCk7CisJCQlmaW5hbCBSZWxhdGl2ZVZhbHVlUHJvdmlkZXIgcnZwID0gKFJlbGF0aXZlVmFsdWVQcm92aWRlcikgZ2V0UmVsYXRpdmVWYWx1ZVByb3ZpZGVyQWRhcHRlckZhY3RvcnkoKQorCQkJCQkuYWRhcHQoZG1sLmdldEN1cnJlbnRWYWx1ZSgpLCBSZWxhdGl2ZVZhbHVlUHJvdmlkZXIuY2xhc3MpOworCQkJcmV0dXJuIHJ2cC5nZXRQcm9wZXJ0aWVzKCk7CisJCX0gLy8gZ2V0UHJvcGVydGllcworCisJCS8qKgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuYWRhcHRlcnMucmVsYXRpdmV2YWx1ZS5SZWxhdGl2ZVZhbHVlUHJvdmlkZXJBZGFwdGVyI2dldFJlbGF0aXZlVmFsdWUob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVTdHJ1Y3R1cmFsRmVhdHVyZSkKKwkJICovCisJCUBPdmVycmlkZQorCQlwdWJsaWMgZG91YmxlIGdldFJlbGF0aXZlVmFsdWUoRVN0cnVjdHVyYWxGZWF0dXJlIGZlYXR1cmUpIHsKKwkJCWZpbmFsIFBvcHVsYXRpb25Nb2RlbExhYmVsIGRtbCA9IChQb3B1bGF0aW9uTW9kZWxMYWJlbCkgZ2V0VGFyZ2V0KCk7CisJCQlmaW5hbCBSZWxhdGl2ZVZhbHVlUHJvdmlkZXIgcnZwID0gKFJlbGF0aXZlVmFsdWVQcm92aWRlcikgZ2V0UmVsYXRpdmVWYWx1ZVByb3ZpZGVyQWRhcHRlckZhY3RvcnkoKQorCQkJCQkuYWRhcHQoZG1sLmdldEN1cnJlbnRWYWx1ZSgpLCBSZWxhdGl2ZVZhbHVlUHJvdmlkZXIuY2xhc3MpOworCQkJcmV0dXJuIHJ2cC5nZXRSZWxhdGl2ZVZhbHVlKGZlYXR1cmUpOworCQl9IC8vIGdldFJlbGF0aXZlVmFsdWUKKwkJCisJCS8qKgorCQkgKiB0aGlzIGhlbHBlciBtZXRob2QgcmV0dXJucyB0aGUgYWJzb2x1dGUgdG90YWwgcG9wdWxhdGlvbi4KKwkJICogSXQgaXMgcmVxdWlyZWQgd2hlbmV2ZXIgd2UgbmVlZCB0byBzd2l0Y2ggYmV0d2VlbiByZWxhdGl2ZSBhbmQgYWJzb2x1dGUgdmFsdWVzCisJCSAqIEByZXR1cm4gdGhlIHRvdGFsIGN1cnJlbnQgcG9wdWxhdGlvbiBjb3VudCAoYWJzb2x1dGUpCisJCSAqLworCQlwdWJsaWMgZG91YmxlIGdldERlbm9taW5hdG9yKGZpbmFsIEVTdHJ1Y3R1cmFsRmVhdHVyZSBmZWF0dXJlKSB7CisvLwkJCWlmKGR5bmFtaWNEZW5vbWluYXRvck1hcC5jb250YWluc0tleShmZWF0dXJlKSkgeworLy8JCQkJcmV0dXJuIGR5bmFtaWNEZW5vbWluYXRvck1hcC5nZXQoZmVhdHVyZSkuZG91YmxlVmFsdWUoKTsKKy8vCQkJfSBlbHNlIHsKKy8vCQkJCWR5bmFtaWNEZW5vbWluYXRvck1hcC5wdXQoZmVhdHVyZSwgbmV3IERvdWJsZSgxLjApKTsKKy8vCQkJCXJldHVybiAxLjA7CisvLwkJCX0KKwkJCXJldHVybiBERU5PTUlOQVRPUjsKKwkJfQorCQkKKwkJCisJCQorCisJfSAvLyBQb3B1bGF0aW9uTW9kZWxMYWJlbFJlbGF0aXZlVmFsdWVQcm92aWRlcgorCisJLyoqCisJICogVGhpcyBjbGFzcyBpcyBhIFJlbGF0aXZlIFZhbHVlIFByb3ZpZGVyIGZvciBQb3B1bGF0aW9uTW9kZWxMYWJlbFZhbHVlCisJICogaW5zdGFuY2VzLiBJdCBwcm92aWRlcyBhIGNvbGxlY3Rpb24gb2YgdGhlIHByb3BlcnRpZXMgdGhhdCBjYW4gaGF2ZQorCSAqIHJlbGF0aXZlIHZhbHVlcyBhbmQgd2lsbCBjb21wdXRlIHRoZSB2YWx1ZSBiZXR3ZWVuIDAuMCBhbmQgMS4wIGZvciBhbnkgb2YKKwkgKiB0aG9zZSBwcm9wZXJ0aWVzLgorCSAqIDxwPgorCSAqIFRoZSB7QGxpbmsgUG9wdWxhdGlvbk1vZGVsTGFiZWxWYWx1ZVJlbGF0aXZlVmFsdWVQcm92aWRlcn0gaW5zdGFuY2UgdGhhdCB3ZQorCSAqIGNyZWF0ZSBoZXJlIGZpbHRlcnMgb3V0IHRoZSBwcm9wZXJ0aWVzIHRoYXQgYXJlIG5vdCByZWxhdGl2ZSBhbmQgY2FuCisJICogcmVmbGVjdGl2ZWx5IGNvbXB1dGUgdGhlIHJlbGF0aXZlIHZhbHVlLCB3aXRoIHJlc3BlY3QgdG8gdGhlIHBvcHVsYXRpb24KKwkgKiBjb3VudCBmb3IgdGhlIGRpc2Vhc2UgbW9kZWwgbGFiZWwgdmFsdWUsIGZvciB0aGUgcmVtYWluaW5nIHByb3BlcnRpZXMuIElmCisJICogYSBuZXcgc3ViLWNsYXNzIG9mIHtAbGluayBQb3B1bGF0aW9uTW9kZWxMYWJlbFZhbHVlfSBpcyBpbnRyb2R1Y2VkIHRoYXQgaGFzCisJICogb3RoZXIgbm9uLXJlbGF0aXZlIHByb3BlcnRpZXMsIHRoZXkgd291bGQgbm90IGJlIGZpbHRlcmVkIG91dCBieSB0aGlzCisJICoge0BsaW5rIFJlbGF0aXZlVmFsdWVQcm92aWRlcn0gc28gYSBjb3JyZXNwb25kaW5nIHN1Yi1jbGFzcyBvZgorCSAqIHtAbGluayBQb3B1bGF0aW9uTW9kZWxMYWJlbFZhbHVlUmVsYXRpdmVWYWx1ZVByb3ZpZGVyfSB3b3VsZCBuZWVkIHRvIGJlCisJICogZGVmaW5lZCB0aGF0IGltcGxlbWVudGVkIHtAbGluayBSZWxhdGl2ZVZhbHVlUHJvdmlkZXIjZ2V0UHJvcGVydGllcygpfQorCSAqIHN1Y2ggdGhhdCBpdCBmaXJzdCBjYWxsZWQgaXRzIHN1cGVyLWNsYXNzCisJICogPGNvZGU+c3VwZXIuZ2V0UHJvcGVydGllczwvY29kZT4gKGkuZS4sCisJICoge0BsaW5rIFBvcHVsYXRpb25Nb2RlbExhYmVsVmFsdWVSZWxhdGl2ZVZhbHVlUHJvdmlkZXIjZ2V0UHJvcGVydGllcygpfSkgdG8KKwkgKiBnZXQgdGhlIGxpc3Qgb2YgZmlsdGVyZWQgcHJvcGVydGllcy4gVGhlbiwgaXQgd291bGQgbmVlZCB0byByZW1vdmUgYW55CisJICogbm9uLXJlbGF0aXZlIHByb3BlcnRpZXMgdGhhdCBpdCBrbm93cyBhYm91dCBmcm9tIHRoYXQgbGlzdC4KKwkgKiA8cD4KKwkgKiBUaGVyZSB3b3VsZCBwcm9iYWJseSBiZSBubyBuZWVkIGZvciB0aGUgbmV3IGNsYXNzIHRvIG92ZXJyaWRlCisJICoge0BsaW5rIFBvcHVsYXRpb25Nb2RlbExhYmVsVmFsdWVSZWxhdGl2ZVZhbHVlUHJvdmlkZXIjZ2V0UmVsYXRpdmVWYWx1ZShFU3RydWN0dXJhbEZlYXR1cmUpfQorCSAqIGFzIHRoZSByZWxhdGl2ZSB2YWx1ZXMgYXJlIGNvbXB1dGVkIHN1Y2ggdGhhdCB0aGUgbmV3IHByb3BlcnR5IHZhbHVlcyBhcmUKKwkgKiBvYnRhaW5lZCByZWZsZXhpdmVseSwgc28gdGhleSBzaG91bGQgYmUgZm91bmQuIFRoaXMgYXNzdW1lcyB0aGF0IHRoZSBuZXcKKwkgKiB2YWx1ZXMgYXJlIHJlbGF0aXZlIHRvIHRoZSBwb3B1bGF0aW9uIGNvdW50IChpLmUuLAorCSAqIHtAbGluayBQb3B1bGF0aW9uTW9kZWxMYWJlbFZhbHVlI2dldFBvcHVsYXRpb25Db3VudCgpfSkuIElmIHRoZXkncmUKKwkgKiByZWxhdGl2ZSB0byBzb21lIG90aGVyIHZhbHVlIHRoZW4gYW4gb3ZlcnJpZGUgd291bGQgYmUgbmVjZXNzYXJ5LgorCSAqLworCXB1YmxpYyBzdGF0aWMgY2xhc3MgUG9wdWxhdGlvbk1vZGVsTGFiZWxWYWx1ZVJlbGF0aXZlVmFsdWVQcm92aWRlciBleHRlbmRzCisJCQlSZWxhdGl2ZVZhbHVlUHJvdmlkZXJBZGFwdGVyIGltcGxlbWVudHMgUmVsYXRpdmVWYWx1ZVByb3ZpZGVyIHsKKworCQkvKioKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmFkYXB0ZXJzLnJlbGF0aXZldmFsdWUuUmVsYXRpdmVWYWx1ZVByb3ZpZGVyQWRhcHRlciNnZXRQcm9wZXJ0aWVzKCkKKwkJICovCisJCUBPdmVycmlkZQorCQlwdWJsaWMgTGlzdDxJSXRlbVByb3BlcnR5RGVzY3JpcHRvcj4gZ2V0UHJvcGVydGllcygpIHsKKwkJCWZpbmFsIExpc3Q8SUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I+IHJldFZhbHVlID0gbmV3IEFycmF5TGlzdDxJSXRlbVByb3BlcnR5RGVzY3JpcHRvcj4oKTsKKwkJCWZpbmFsIFN0YW5kYXJkSXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkgaXRlbVByb3ZpZGVyRmFjdG9yeSA9IGdldEl0ZW1Qcm92aWRlckZhY3RvcnkoKTsKKwkJCWZpbmFsIFBvcHVsYXRpb25Nb2RlbExhYmVsVmFsdWUgZG1sdiA9IChQb3B1bGF0aW9uTW9kZWxMYWJlbFZhbHVlKSBnZXRUYXJnZXQoKTsKKwkJCWZpbmFsIElJdGVtUHJvcGVydHlTb3VyY2UgcHJvcGVydHlTb3VyY2UgPSAoSUl0ZW1Qcm9wZXJ0eVNvdXJjZSkgaXRlbVByb3ZpZGVyRmFjdG9yeQorCQkJCQkuYWRhcHQoZG1sdiwgUHJvcGVydHlTb3VyY2UuY2xhc3MpOworCQkJZmluYWwgTGlzdDxJSXRlbVByb3BlcnR5RGVzY3JpcHRvcj4gcHJvcGVydGllcyA9IHByb3BlcnR5U291cmNlCisJCQkJCS5nZXRQcm9wZXJ0eURlc2NyaXB0b3JzKG51bGwpOworCQkJLy8gVGhlIGxpc3Qgb2YgcHJvcGVydHkgZGVzY3JpcHRvcnMgaW5jbHVkZXMgb25lcyB0aGF0IGRvIG5vdCBoYXZlCisJCQkvLyByZWxhdGl2ZSB2YWx1ZXMuIFdlIGZpbHRlciB0aG9zZSBvdXQgaGVyZSBhbmQgcmV0dXJuIHRoZSByZXN0LgorCQkJZm9yIChJSXRlbVByb3BlcnR5RGVzY3JpcHRvciBkZXNjcmlwdG9yIDogcHJvcGVydGllcykgeworCQkJCS8vIERvZXMgdGhpcyBwcm9wZXJ0eSBoYXZlIGEgcmVsYXRpdmUgdmFsdWU/CisJCQkJZmluYWwgRVN0cnVjdHVyYWxGZWF0dXJlIGZlYXR1cmUgPSAoRVN0cnVjdHVyYWxGZWF0dXJlKSBkZXNjcmlwdG9yCisJCQkJCQkuZ2V0RmVhdHVyZShudWxsKTsKKwkJCQkKKwkJCQlpZihmZWF0dXJlIGluc3RhbmNlb2YgRVJlZmVyZW5jZSkgY29udGludWU7CisJCQkJZmluYWwgaW50IGZlYXR1cmVJZCA9IGZlYXR1cmUuZ2V0RmVhdHVyZUlEKCk7CisJCQkJCisJCQkJCisJCQkJLy8gbmV3CisvLwkJCQlpZiAoIShmZWF0dXJlSWQgPT0gU3RhbmRhcmRQYWNrYWdlLlNJX0xBQkVMX1ZBTFVFX19ESVNFQVNFX0RFQVRIUyAKKy8vCQkJCQkJfHwgZmVhdHVyZUlkID09IFN0YW5kYXJkUGFja2FnZS5ESVNFQVNFX01PREVMX0xBQkVMX1ZBTFVFX19QT1BVTEFUSU9OX0NPVU5UKSkgeworCQkJCQkvLyBZZXMKKwkJCQkJcmV0VmFsdWUuYWRkKGRlc2NyaXB0b3IpOworLy8JCQkJfSAvLyBpZiBoYXMgcmVsYXRpdmUgdmFsdWUKKwkJCQkvLyBPbGQKKwkJCQkvKgorCQkJCWlmICghKGZlYXR1cmVJZCA9PSBTdGFuZGFyZFBhY2thZ2UuRElTRUFTRV9NT0RFTF9MQUJFTF9WQUxVRV9fQklSVEhTCisJCQkJCQl8fCBmZWF0dXJlSWQgPT0gU3RhbmRhcmRQYWNrYWdlLkRJU0VBU0VfTU9ERUxfTEFCRUxfVkFMVUVfX0RFQVRIUworCQkJCQkJfHwgZmVhdHVyZUlkID09IFN0YW5kYXJkUGFja2FnZS5ESVNFQVNFX01PREVMX0xBQkVMX1ZBTFVFX19ESVNFQVNFX0RFQVRIUyB8fCBmZWF0dXJlSWQgPT0gU3RhbmRhcmRQYWNrYWdlLkRJU0VBU0VfTU9ERUxfTEFCRUxfVkFMVUVfX1BPUFVMQVRJT05fQ09VTlQpKSB7CisJCQkJCS8vIFllcworCQkJCQlyZXRWYWx1ZS5hZGQoZGVzY3JpcHRvcik7CisJCQkJfSAvLyBpZiBoYXMgcmVsYXRpdmUgdmFsdWUKKwkJCQkqLworCQkJCQorCQkJfSAvLyBmb3IKKwkJCXJldHVybiByZXRWYWx1ZTsKKwkJfSAvLyBnZXRQcm9wZXJ0aWVzCisKKwkJLyoqCisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5hZGFwdGVycy5yZWxhdGl2ZXZhbHVlLlJlbGF0aXZlVmFsdWVQcm92aWRlciNnZXRSZWxhdGl2ZVZhbHVlKEVTdHJ1Y3R1cmFsRmVhdHVyZSkKKwkJICovCisJCXB1YmxpYyBkb3VibGUgZ2V0UmVsYXRpdmVWYWx1ZShmaW5hbCBFU3RydWN0dXJhbEZlYXR1cmUgZmVhdHVyZSkgeworCQkJZmluYWwgU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxMYWJlbFZhbHVlIGRtbHYgPSAoU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxMYWJlbFZhbHVlKSBnZXRUYXJnZXQoKTsKKwkJCQorCQkJZmluYWwgZG91YmxlIHBvcHVsYXRpb25Db3VudCA9IGRtbHYuZ2V0Q291bnQoKTsKKwkJCQorLy8JCQlpZihkeW5hbWljRGVub21pbmF0b3JNYXAuY29udGFpbnNLZXkoZmVhdHVyZSkpIHsKKy8vCQkJCWRvdWJsZSBvbGRWYWwgPSBkeW5hbWljRGVub21pbmF0b3JNYXAuZ2V0KGZlYXR1cmUpLmRvdWJsZVZhbHVlKCk7CisvLwkJCQlpZihvbGRWYWwgPCBwb3B1bGF0aW9uQ291bnQpIGR5bmFtaWNEZW5vbWluYXRvck1hcC5wdXQoZmVhdHVyZSwgbmV3IERvdWJsZShwb3B1bGF0aW9uQ291bnQpKTsKKy8vCQkJfSBlbHNlIHsKKy8vCQkJCWR5bmFtaWNEZW5vbWluYXRvck1hcC5wdXQoZmVhdHVyZSwgbmV3IERvdWJsZShwb3B1bGF0aW9uQ291bnQpKTsKKy8vCQkJfQorLy8JCQlkb3VibGUgZGVub20gPSBkeW5hbWljRGVub21pbmF0b3JNYXAuZ2V0KGZlYXR1cmUpLmRvdWJsZVZhbHVlKCk7CisvLwkJCWZpbmFsIGRvdWJsZSByZXRWYWwgPSBwb3B1bGF0aW9uQ291bnQvZGVub207CisJCQlmaW5hbCBkb3VibGUgcmV0VmFsID0gcG9wdWxhdGlvbkNvdW50L0RFTk9NSU5BVE9SOworCQkJcmV0dXJuIHJldFZhbDsKKwkJfSAvLyBnZXRSZWxhdGl2ZVZhbHVlCisJCQorCQkvKioKKwkJICogVE9ETyBtYXkgd2FudCB0byBtb2RlbCB0aGUgZGVub21pbmF0b3IgZm9yIGEgcG9wdWxhdGlvbgorCQkgKiBAcmV0dXJuIHRoZSBkZW5vbWluYXRvciBvciBzY2FsZSB1c2VkIHRvIG5vcm1hbGl6ZSB0aGUgcmVsYXRpdmUgdmFsdWUKKwkJICovCisJCXB1YmxpYyBkb3VibGUgZ2V0RGVub21pbmF0b3IoZmluYWwgRVN0cnVjdHVyYWxGZWF0dXJlIGZlYXR1cmUpIHsKKy8vCQkJaWYoZHluYW1pY0Rlbm9taW5hdG9yTWFwLmNvbnRhaW5zS2V5KGZlYXR1cmUpKSB7CisvLwkJCQlyZXR1cm4gZHluYW1pY0Rlbm9taW5hdG9yTWFwLmdldChmZWF0dXJlKS5kb3VibGVWYWx1ZSgpOworLy8JCQl9IGVsc2UgeworLy8JCQkJZHluYW1pY0Rlbm9taW5hdG9yTWFwLnB1dChmZWF0dXJlLCBuZXcgRG91YmxlKDEuMCkpOworLy8JCQkJcmV0dXJuIDEuMDsKKy8vCQkJfQorCQkJcmV0dXJuIERFTk9NSU5BVE9SOworCQl9CisJCQorCX0gLy8gUG9wdWxhdGlvbk1vZGVsTGFiZWxWYWx1ZVJlbGF0aXZlVmFsdWVQcm92aWRlcgorfSAvLyBTdGFuZGFyZFJlbGF0aXZlVmFsdWVQcm92aWRlckFkYXB0ZXJGYWN0b3J5CmRpZmYgLS1naXQgYS9tb2RlbHMvcG9wdWxhdGlvbnMvb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3BvcHVsYXRpb25tb2RlbHMvc3RhbmRhcmQvcHJvdmlkZXIvU3RvY2hhc3RpY1N0YW5kYXJkUG9wdWxhdGlvbk1vZGVsSXRlbVByb3ZpZGVyLmphdmEgYi9tb2RlbHMvcG9wdWxhdGlvbnMvb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3BvcHVsYXRpb25tb2RlbHMvc3RhbmRhcmQvcHJvdmlkZXIvU3RvY2hhc3RpY1N0YW5kYXJkUG9wdWxhdGlvbk1vZGVsSXRlbVByb3ZpZGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWU0YzA2MQotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9wb3B1bGF0aW9ucy9vcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vcG9wdWxhdGlvbm1vZGVscy9zdGFuZGFyZC9wcm92aWRlci9TdG9jaGFzdGljU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxJdGVtUHJvdmlkZXIuamF2YQpAQCAtMCwwICsxLDE2MiBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQucHJvdmlkZXI7DQorDQorDQorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisgKiBDb3B5cmlnaHQgKGMpIDIwMDkgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuDQorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscw0KKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMA0KKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0DQorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwNCisgKg0KKyAqIENvbnRyaWJ1dG9yczoNCisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uDQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQorDQoraW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOw0KK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsNCisNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuQWRhcHRlckZhY3Rvcnk7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeTsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUVkaXRpbmdEb21haW5JdGVtUHJvdmlkZXI7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtTGFiZWxQcm92aWRlcjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtUHJvcGVydHlTb3VyY2U7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklTdHJ1Y3R1cmVkSXRlbUNvbnRlbnRQcm92aWRlcjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVRyZWVJdGVtQ29udGVudFByb3ZpZGVyOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JdGVtUHJvcGVydHlEZXNjcmlwdG9yOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5WaWV3ZXJOb3RpZmljYXRpb247DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZFBhY2thZ2U7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5TdG9jaGFzdGljU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWw7DQorDQorLyoqDQorICogVGhpcyBpcyB0aGUgaXRlbSBwcm92aWRlciBhZGFwdGVyIGZvciBhIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuU3RvY2hhc3RpY1N0YW5kYXJkUG9wdWxhdGlvbk1vZGVsfSBvYmplY3QuDQorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisgKiBAZ2VuZXJhdGVkDQorICovDQorQFN1cHByZXNzV2FybmluZ3MoInVudXNlZCIpIA0KK3B1YmxpYyBjbGFzcyBTdG9jaGFzdGljU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxJdGVtUHJvdmlkZXINCisJZXh0ZW5kcyBTdGFuZGFyZFBvcHVsYXRpb25Nb2RlbEl0ZW1Qcm92aWRlcg0KKwlpbXBsZW1lbnRzDQorCQlJRWRpdGluZ0RvbWFpbkl0ZW1Qcm92aWRlciwNCisJCUlTdHJ1Y3R1cmVkSXRlbUNvbnRlbnRQcm92aWRlciwNCisJCUlUcmVlSXRlbUNvbnRlbnRQcm92aWRlciwNCisJCUlJdGVtTGFiZWxQcm92aWRlciwNCisJCUlJdGVtUHJvcGVydHlTb3VyY2Ugew0KKwkvKioNCisJICogVGhpcyBjb25zdHJ1Y3RzIGFuIGluc3RhbmNlIGZyb20gYSBmYWN0b3J5IGFuZCBhIG5vdGlmaWVyLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIFN0b2NoYXN0aWNTdGFuZGFyZFBvcHVsYXRpb25Nb2RlbEl0ZW1Qcm92aWRlcihBZGFwdGVyRmFjdG9yeSBhZGFwdGVyRmFjdG9yeSkgew0KKwkJc3VwZXIoYWRhcHRlckZhY3RvcnkpOw0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIHJldHVybnMgdGhlIHByb3BlcnR5IGRlc2NyaXB0b3JzIGZvciB0aGUgYWRhcHRlZCBjbGFzcy4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCUBPdmVycmlkZQ0KKwlwdWJsaWMgTGlzdDxJSXRlbVByb3BlcnR5RGVzY3JpcHRvcj4gZ2V0UHJvcGVydHlEZXNjcmlwdG9ycyhPYmplY3Qgb2JqZWN0KSB7DQorCQlpZiAoaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMgPT0gbnVsbCkgew0KKwkJCXN1cGVyLmdldFByb3BlcnR5RGVzY3JpcHRvcnMob2JqZWN0KTsNCisNCisJCQlhZGRHYWluUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCk7DQorCQl9DQorCQlyZXR1cm4gaXRlbVByb3BlcnR5RGVzY3JpcHRvcnM7DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgYWRkcyBhIHByb3BlcnR5IGRlc2NyaXB0b3IgZm9yIHRoZSBHYWluIGZlYXR1cmUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgdm9pZCBhZGRHYWluUHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdCBvYmplY3QpIHsNCisJCWl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzLmFkZA0KKwkJCShjcmVhdGVJdGVtUHJvcGVydHlEZXNjcmlwdG9yDQorCQkJCSgoKENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnkpYWRhcHRlckZhY3RvcnkpLmdldFJvb3RBZGFwdGVyRmFjdG9yeSgpLA0KKwkJCQkgZ2V0UmVzb3VyY2VMb2NhdG9yKCksDQorCQkJCSBnZXRTdHJpbmcoIl9VSV9TdG9jaGFzdGljU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxfZ2Fpbl9mZWF0dXJlIiksDQorCQkJCSBnZXRTdHJpbmcoIl9VSV9Qcm9wZXJ0eURlc2NyaXB0b3JfZGVzY3JpcHRpb24iLCAiX1VJX1N0b2NoYXN0aWNTdGFuZGFyZFBvcHVsYXRpb25Nb2RlbF9nYWluX2ZlYXR1cmUiLCAiX1VJX1N0b2NoYXN0aWNTdGFuZGFyZFBvcHVsYXRpb25Nb2RlbF90eXBlIiksDQorCQkJCSBTdGFuZGFyZFBhY2thZ2UuTGl0ZXJhbHMuU1RPQ0hBU1RJQ19TVEFOREFSRF9QT1BVTEFUSU9OX01PREVMX19HQUlOLA0KKwkJCQkgdHJ1ZSwNCisJCQkJIGZhbHNlLA0KKwkJCQkgZmFsc2UsDQorCQkJCSBJdGVtUHJvcGVydHlEZXNjcmlwdG9yLlJFQUxfVkFMVUVfSU1BR0UsDQorCQkJCSBudWxsLA0KKwkJCQkgbnVsbCkpOw0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIHJldHVybnMgU3RvY2hhc3RpY1N0YW5kYXJkUG9wdWxhdGlvbk1vZGVsLmdpZi4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQgTk9UDQorCSAqLw0KKwlAT3ZlcnJpZGUNCisJcHVibGljIE9iamVjdCBnZXRJbWFnZShPYmplY3Qgb2JqZWN0KSB7DQorCQlyZXR1cm4gb3ZlcmxheUltYWdlKG9iamVjdCwgZ2V0UmVzb3VyY2VMb2NhdG9yKCkuZ2V0SW1hZ2UoImZ1bGwvY3VzdG9tMTYvU3RvY2hhc3RpY1N0YW5kYXJkUG9wdWxhdGlvbk1vZGVsIikpOw0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIHJldHVybnMgdGhlIGxhYmVsIHRleHQgZm9yIHRoZSBhZGFwdGVkIGNsYXNzLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZCBOT1QNCisJICovDQorCUBPdmVycmlkZQ0KKwlwdWJsaWMgU3RyaW5nIGdldFRleHQoT2JqZWN0IG9iamVjdCkgew0KKwkJcmV0dXJuIHN1cGVyLmdldFRleHQob2JqZWN0KTsNCisJfQ0KKw0KKwkvKioNCisJICogVGhpcyByZXR1cm5zIHRoZSBsYWJlbCB0ZXh0IGZvciB0aGUgYWRhcHRlZCBjbGFzcy4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCUBPdmVycmlkZQ0KKwlwdWJsaWMgU3RyaW5nIGdldFRleHRHZW4oT2JqZWN0IG9iamVjdCkgew0KKwkJU3RyaW5nIGxhYmVsID0gKChTdG9jaGFzdGljU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWwpb2JqZWN0KS5nZXROYW1lKCk7DQorCQlyZXR1cm4gbGFiZWwgPT0gbnVsbCB8fCBsYWJlbC5sZW5ndGgoKSA9PSAwID8NCisJCQlnZXRTdHJpbmcoIl9VSV9TdG9jaGFzdGljU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxfdHlwZSIpIDoNCisJCQlnZXRTdHJpbmcoIl9VSV9TdG9jaGFzdGljU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxfdHlwZSIpICsgIiAiICsgbGFiZWw7DQorCX0NCisJDQorCS8qKg0KKwkgKiBUaGlzIGhhbmRsZXMgbW9kZWwgbm90aWZpY2F0aW9ucyBieSBjYWxsaW5nIHtAbGluayAjdXBkYXRlQ2hpbGRyZW59IHRvIHVwZGF0ZSBhbnkgY2FjaGVkDQorCSAqIGNoaWxkcmVuIGFuZCBieSBjcmVhdGluZyBhIHZpZXdlciBub3RpZmljYXRpb24sIHdoaWNoIGl0IHBhc3NlcyB0byB7QGxpbmsgI2ZpcmVOb3RpZnlDaGFuZ2VkfS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCUBPdmVycmlkZQ0KKwlwdWJsaWMgdm9pZCBub3RpZnlDaGFuZ2VkKE5vdGlmaWNhdGlvbiBub3RpZmljYXRpb24pIHsNCisJCXVwZGF0ZUNoaWxkcmVuKG5vdGlmaWNhdGlvbik7DQorDQorCQlzd2l0Y2ggKG5vdGlmaWNhdGlvbi5nZXRGZWF0dXJlSUQoU3RvY2hhc3RpY1N0YW5kYXJkUG9wdWxhdGlvbk1vZGVsLmNsYXNzKSkgew0KKwkJCWNhc2UgU3RhbmRhcmRQYWNrYWdlLlNUT0NIQVNUSUNfU1RBTkRBUkRfUE9QVUxBVElPTl9NT0RFTF9fR0FJTjoNCisJCQkJZmlyZU5vdGlmeUNoYW5nZWQobmV3IFZpZXdlck5vdGlmaWNhdGlvbihub3RpZmljYXRpb24sIG5vdGlmaWNhdGlvbi5nZXROb3RpZmllcigpLCBmYWxzZSwgdHJ1ZSkpOw0KKwkJCQlyZXR1cm47DQorCQl9DQorCQlzdXBlci5ub3RpZnlDaGFuZ2VkKG5vdGlmaWNhdGlvbik7DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgYWRkcyB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmVkaXQuY29tbWFuZC5Db21tYW5kUGFyYW1ldGVyfXMgZGVzY3JpYmluZyB0aGUgY2hpbGRyZW4NCisJICogdGhhdCBjYW4gYmUgY3JlYXRlZCB1bmRlciB0aGlzIG9iamVjdC4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCUBPdmVycmlkZQ0KKwlwcm90ZWN0ZWQgdm9pZCBjb2xsZWN0TmV3Q2hpbGREZXNjcmlwdG9ycyhDb2xsZWN0aW9uPE9iamVjdD4gbmV3Q2hpbGREZXNjcmlwdG9ycywgT2JqZWN0IG9iamVjdCkgew0KKwkJc3VwZXIuY29sbGVjdE5ld0NoaWxkRGVzY3JpcHRvcnMobmV3Q2hpbGREZXNjcmlwdG9ycywgb2JqZWN0KTsNCisJfQ0KKw0KK30NCmRpZmYgLS1naXQgYS9tb2RlbHMvcG9wdWxhdGlvbnMvb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3BvcHVsYXRpb25tb2RlbHMvc3RhbmRhcmQvcHJvdmlkZXIvWWV0aVBvcHVsYXRpb25Jbml0aWFsaXplckl0ZW1Qcm92aWRlci5qYXZhIGIvbW9kZWxzL3BvcHVsYXRpb25zL29yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9wb3B1bGF0aW9ubW9kZWxzL3N0YW5kYXJkL3Byb3ZpZGVyL1lldGlQb3B1bGF0aW9uSW5pdGlhbGl6ZXJJdGVtUHJvdmlkZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZDgxNGE5Ci0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL3BvcHVsYXRpb25zL29yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9wb3B1bGF0aW9ubW9kZWxzL3N0YW5kYXJkL3Byb3ZpZGVyL1lldGlQb3B1bGF0aW9uSW5pdGlhbGl6ZXJJdGVtUHJvdmlkZXIuamF2YQpAQCAtMCwwICsxLDExOCBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQucHJvdmlkZXI7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIAorICogQ29weXJpZ2h0IChjKSAyMDExIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiAKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdCAKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sIAorICogCisgKiBDb250cmlidXRvcnM6IAorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiAKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5BZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlVSSTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JRWRpdGluZ0RvbWFpbkl0ZW1Qcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbUxhYmVsUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1Qcm9wZXJ0eVNvdXJjZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JU3RydWN0dXJlZEl0ZW1Db250ZW50UHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVRyZWVJdGVtQ29udGVudFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5ZZXRpUG9wdWxhdGlvbkluaXRpYWxpemVyOworCisvKioKKyAqIFRoaXMgaXMgdGhlIGl0ZW0gcHJvdmlkZXIgYWRhcHRlciBmb3IgYSB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLllldGlQb3B1bGF0aW9uSW5pdGlhbGl6ZXJ9IG9iamVjdC4KKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIFlldGlQb3B1bGF0aW9uSW5pdGlhbGl6ZXJJdGVtUHJvdmlkZXIKKwlleHRlbmRzIEVhcnRoU2NpZW5jZVBvcHVsYXRpb25Jbml0aWFsaXplckl0ZW1Qcm92aWRlcgorCWltcGxlbWVudHMKKwkJSUVkaXRpbmdEb21haW5JdGVtUHJvdmlkZXIsCisJCUlTdHJ1Y3R1cmVkSXRlbUNvbnRlbnRQcm92aWRlciwKKwkJSVRyZWVJdGVtQ29udGVudFByb3ZpZGVyLAorCQlJSXRlbUxhYmVsUHJvdmlkZXIsCisJCUlJdGVtUHJvcGVydHlTb3VyY2UgeworCS8qKgorCSAqIFRoaXMgY29uc3RydWN0cyBhbiBpbnN0YW5jZSBmcm9tIGEgZmFjdG9yeSBhbmQgYSBub3RpZmllci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgWWV0aVBvcHVsYXRpb25Jbml0aWFsaXplckl0ZW1Qcm92aWRlcihBZGFwdGVyRmFjdG9yeSBhZGFwdGVyRmFjdG9yeSkgeworCQlzdXBlcihhZGFwdGVyRmFjdG9yeSk7CisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIHRoZSBwcm9wZXJ0eSBkZXNjcmlwdG9ycyBmb3IgdGhlIGFkYXB0ZWQgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIExpc3Q8SUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I+IGdldFByb3BlcnR5RGVzY3JpcHRvcnMoT2JqZWN0IG9iamVjdCkgeworCQlpZiAoaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMgPT0gbnVsbCkgeworCQkJc3VwZXIuZ2V0UHJvcGVydHlEZXNjcmlwdG9ycyhvYmplY3QpOworCisJCX0KKwkJcmV0dXJuIGl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzOworCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyBZZXRpUG9wdWxhdGlvbkluaXRpYWxpemVyLmdpZi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgT2JqZWN0IGdldEltYWdlKE9iamVjdCBvYmplY3QpIHsKKwkJcmV0dXJuIG92ZXJsYXlJbWFnZShvYmplY3QsIGdldFJlc291cmNlTG9jYXRvcigpLmdldEltYWdlKCJmdWxsL29iajE2L1lldGlQb3B1bGF0aW9uSW5pdGlhbGl6ZXIiKSk7CisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIHRoZSBsYWJlbCB0ZXh0IGZvciB0aGUgYWRhcHRlZCBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgU3RyaW5nIGdldFRleHQoT2JqZWN0IG9iamVjdCkgeworCQlVUkkgbGFiZWxWYWx1ZSA9ICgoWWV0aVBvcHVsYXRpb25Jbml0aWFsaXplcilvYmplY3QpLmdldFVSSSgpOworCQlTdHJpbmcgbGFiZWwgPSBsYWJlbFZhbHVlID09IG51bGwgPyBudWxsIDogbGFiZWxWYWx1ZS50b1N0cmluZygpOworCQlyZXR1cm4gbGFiZWwgPT0gbnVsbCB8fCBsYWJlbC5sZW5ndGgoKSA9PSAwID8KKwkJCWdldFN0cmluZygiX1VJX1lldGlQb3B1bGF0aW9uSW5pdGlhbGl6ZXJfdHlwZSIpIDoKKwkJCWdldFN0cmluZygiX1VJX1lldGlQb3B1bGF0aW9uSW5pdGlhbGl6ZXJfdHlwZSIpICsgIiAiICsgbGFiZWw7CisJfQorCisJLyoqCisJICogVGhpcyBoYW5kbGVzIG1vZGVsIG5vdGlmaWNhdGlvbnMgYnkgY2FsbGluZyB7QGxpbmsgI3VwZGF0ZUNoaWxkcmVufSB0byB1cGRhdGUgYW55IGNhY2hlZAorCSAqIGNoaWxkcmVuIGFuZCBieSBjcmVhdGluZyBhIHZpZXdlciBub3RpZmljYXRpb24sIHdoaWNoIGl0IHBhc3NlcyB0byB7QGxpbmsgI2ZpcmVOb3RpZnlDaGFuZ2VkfS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBub3RpZnlDaGFuZ2VkKE5vdGlmaWNhdGlvbiBub3RpZmljYXRpb24pIHsKKwkJdXBkYXRlQ2hpbGRyZW4obm90aWZpY2F0aW9uKTsKKwkJc3VwZXIubm90aWZ5Q2hhbmdlZChub3RpZmljYXRpb24pOworCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmVkaXQuY29tbWFuZC5Db21tYW5kUGFyYW1ldGVyfXMgZGVzY3JpYmluZyB0aGUgY2hpbGRyZW4KKwkgKiB0aGF0IGNhbiBiZSBjcmVhdGVkIHVuZGVyIHRoaXMgb2JqZWN0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIGNvbGxlY3ROZXdDaGlsZERlc2NyaXB0b3JzKENvbGxlY3Rpb248T2JqZWN0PiBuZXdDaGlsZERlc2NyaXB0b3JzLCBPYmplY3Qgb2JqZWN0KSB7CisJCXN1cGVyLmNvbGxlY3ROZXdDaGlsZERlc2NyaXB0b3JzKG5ld0NoaWxkRGVzY3JpcHRvcnMsIG9iamVjdCk7CisJfQorCit9CmRpZmYgLS1naXQgYS9tb2RlbHMvcG9wdWxhdGlvbnMvb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3BvcHVsYXRpb25tb2RlbHMvc3RhbmRhcmQvdXRpbC9TdGFuZGFyZEFkYXB0ZXJGYWN0b3J5LmphdmEgYi9tb2RlbHMvcG9wdWxhdGlvbnMvb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3BvcHVsYXRpb25tb2RlbHMvc3RhbmRhcmQvdXRpbC9TdGFuZGFyZEFkYXB0ZXJGYWN0b3J5LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDNkMjQ1ZAotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9wb3B1bGF0aW9ucy9vcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vcG9wdWxhdGlvbm1vZGVscy9zdGFuZGFyZC91dGlsL1N0YW5kYXJkQWRhcHRlckZhY3RvcnkuamF2YQpAQCAtMCwwICsxLDY5OCBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQudXRpbDsNCisNCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyAqIENvcHlyaWdodCAoYykgMjAwOSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4NCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzDQorICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wDQorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQNCisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbA0KKyAqDQorICogQ29udHJpYnV0b3JzOg0KKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24NCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCisNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuQWRhcHRlcjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpZXI7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LmltcGwuQWRhcHRlckZhY3RvcnlJbXBsOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdDsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5JZGVudGlmaWFibGU7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uU2FuaXR5Q2hlY2tlcjsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkR5bmFtaWNMYWJlbDsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkR5bmFtaWNOb2RlTGFiZWw7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5JbnRlZ3JhdGlvbkxhYmVsOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguSW50ZWdyYXRpb25MYWJlbFZhbHVlOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguTGFiZWw7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5MYWJlbFZhbHVlOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguTm9kZUxhYmVsOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuRGVjb3JhdG9yOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuSW50ZWdyYXRpb25EZWNvcmF0b3I7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5Ob2RlRGVjb3JhdG9yOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuTW9kaWZpYWJsZTsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLio7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5BZ2VHcm91cDsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLkFnaW5nUG9wdWxhdGlvbk1vZGVsOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuRGVtb2dyYXBoaWNQb3B1bGF0aW9uTW9kZWw7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5FYXJ0aFNjaWVuY2VQb3B1bGF0aW9uSW5pdGlhbGl6ZXI7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5Nb3NxdWl0b1BvcHVsYXRpb25Nb2RlbDsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLlBvcHVsYXRpb25Hcm91cDsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLlBvcHVsYXRpb25Jbml0aWFsaXplcjsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLlBvcHVsYXRpb25Nb2RlbDsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLlBvcHVsYXRpb25Nb2RlbExhYmVsOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuUG9wdWxhdGlvbk1vZGVsTGFiZWxWYWx1ZTsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLlNlYXNvbmFsUG9wdWxhdGlvbk1vZGVsOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmRQYWNrYWdlOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmRQb3B1bGF0aW9uSW5pdGlhbGl6ZXI7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZFBvcHVsYXRpb25Nb2RlbDsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWw7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZFBvcHVsYXRpb25Nb2RlbExhYmVsVmFsdWU7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5TdG9jaGFzdGljU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWw7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5ZZXRpUG9wdWxhdGlvbkluaXRpYWxpemVyOw0KKw0KKy8qKg0KKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorICogVGhlIDxiPkFkYXB0ZXIgRmFjdG9yeTwvYj4gZm9yIHRoZSBtb2RlbC4NCisgKiBJdCBwcm92aWRlcyBhbiBhZGFwdGVyIDxjb2RlPmNyZWF0ZVhYWDwvY29kZT4gbWV0aG9kIGZvciBlYWNoIGNsYXNzIG9mIHRoZSBtb2RlbC4NCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZFBhY2thZ2UNCisgKiBAZ2VuZXJhdGVkDQorICovDQorcHVibGljIGNsYXNzIFN0YW5kYXJkQWRhcHRlckZhY3RvcnkgZXh0ZW5kcyBBZGFwdGVyRmFjdG9yeUltcGwgew0KKwkvKioNCisJICogVGhlIGNhY2hlZCBtb2RlbCBwYWNrYWdlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIHN0YXRpYyBTdGFuZGFyZFBhY2thZ2UgbW9kZWxQYWNrYWdlOw0KKw0KKwkvKioNCisJICogQ3JlYXRlcyBhbiBpbnN0YW5jZSBvZiB0aGUgYWRhcHRlciBmYWN0b3J5Lg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIFN0YW5kYXJkQWRhcHRlckZhY3RvcnkoKSB7DQorCQlpZiAobW9kZWxQYWNrYWdlID09IG51bGwpIHsNCisJCQltb2RlbFBhY2thZ2UgPSBTdGFuZGFyZFBhY2thZ2UuZUlOU1RBTkNFOw0KKwkJfQ0KKwl9DQorDQorCS8qKg0KKwkgKiBSZXR1cm5zIHdoZXRoZXIgdGhpcyBmYWN0b3J5IGlzIGFwcGxpY2FibGUgZm9yIHRoZSB0eXBlIG9mIHRoZSBvYmplY3QuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyA8Y29kZT50cnVlPC9jb2RlPiBpZiB0aGUgb2JqZWN0IGlzIGVpdGhlciB0aGUgbW9kZWwncyBwYWNrYWdlIG9yIGlzIGFuIGluc3RhbmNlIG9iamVjdCBvZiB0aGUgbW9kZWwuDQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcmV0dXJuIHdoZXRoZXIgdGhpcyBmYWN0b3J5IGlzIGFwcGxpY2FibGUgZm9yIHRoZSB0eXBlIG9mIHRoZSBvYmplY3QuDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCUBPdmVycmlkZQ0KKwlwdWJsaWMgYm9vbGVhbiBpc0ZhY3RvcnlGb3JUeXBlKE9iamVjdCBvYmplY3QpIHsNCisJCWlmIChvYmplY3QgPT0gbW9kZWxQYWNrYWdlKSB7DQorCQkJcmV0dXJuIHRydWU7DQorCQl9DQorCQlpZiAob2JqZWN0IGluc3RhbmNlb2YgRU9iamVjdCkgew0KKwkJCXJldHVybiAoKEVPYmplY3Qpb2JqZWN0KS5lQ2xhc3MoKS5nZXRFUGFja2FnZSgpID09IG1vZGVsUGFja2FnZTsNCisJCX0NCisJCXJldHVybiBmYWxzZTsNCisJfQ0KKw0KKwkvKioNCisJICogVGhlIHN3aXRjaCB0aGF0IGRlbGVnYXRlcyB0byB0aGUgPGNvZGU+Y3JlYXRlWFhYPC9jb2RlPiBtZXRob2RzLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJQFN1cHByZXNzV2FybmluZ3MoInVudXNlZCIpIA0KKwlwcm90ZWN0ZWQgU3RhbmRhcmRTd2l0Y2g8QWRhcHRlcj4gbW9kZWxTd2l0Y2ggPQ0KKwkJbmV3IFN0YW5kYXJkU3dpdGNoPEFkYXB0ZXI+KCkgew0KKwkJCUBPdmVycmlkZQ0KKwkJCXB1YmxpYyBBZGFwdGVyIGNhc2VQb3B1bGF0aW9uTW9kZWwoUG9wdWxhdGlvbk1vZGVsIG9iamVjdCkgew0KKwkJCQlyZXR1cm4gY3JlYXRlUG9wdWxhdGlvbk1vZGVsQWRhcHRlcigpOw0KKwkJCX0NCisJCQlAT3ZlcnJpZGUNCisJCQlwdWJsaWMgQWRhcHRlciBjYXNlU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWwoU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWwgb2JqZWN0KSB7DQorCQkJCXJldHVybiBjcmVhdGVTdGFuZGFyZFBvcHVsYXRpb25Nb2RlbEFkYXB0ZXIoKTsNCisJCQl9DQorCQkJQE92ZXJyaWRlDQorCQkJcHVibGljIEFkYXB0ZXIgY2FzZVBvcHVsYXRpb25Nb2RlbExhYmVsKFBvcHVsYXRpb25Nb2RlbExhYmVsIG9iamVjdCkgew0KKwkJCQlyZXR1cm4gY3JlYXRlUG9wdWxhdGlvbk1vZGVsTGFiZWxBZGFwdGVyKCk7DQorCQkJfQ0KKwkJCUBPdmVycmlkZQ0KKwkJCXB1YmxpYyBBZGFwdGVyIGNhc2VTdGFuZGFyZFBvcHVsYXRpb25Nb2RlbExhYmVsKFN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWwgb2JqZWN0KSB7DQorCQkJCXJldHVybiBjcmVhdGVTdGFuZGFyZFBvcHVsYXRpb25Nb2RlbExhYmVsQWRhcHRlcigpOw0KKwkJCX0NCisJCQlAT3ZlcnJpZGUNCisJCQlwdWJsaWMgQWRhcHRlciBjYXNlUG9wdWxhdGlvbk1vZGVsTGFiZWxWYWx1ZShQb3B1bGF0aW9uTW9kZWxMYWJlbFZhbHVlIG9iamVjdCkgew0KKwkJCQlyZXR1cm4gY3JlYXRlUG9wdWxhdGlvbk1vZGVsTGFiZWxWYWx1ZUFkYXB0ZXIoKTsNCisJCQl9DQorCQkJQE92ZXJyaWRlDQorCQkJcHVibGljIEFkYXB0ZXIgY2FzZVN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWxWYWx1ZShTdGFuZGFyZFBvcHVsYXRpb25Nb2RlbExhYmVsVmFsdWUgb2JqZWN0KSB7DQorCQkJCXJldHVybiBjcmVhdGVTdGFuZGFyZFBvcHVsYXRpb25Nb2RlbExhYmVsVmFsdWVBZGFwdGVyKCk7DQorCQkJfQ0KKwkJCUBPdmVycmlkZQ0KKwkJCXB1YmxpYyBBZGFwdGVyIGNhc2VTdG9jaGFzdGljU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWwoU3RvY2hhc3RpY1N0YW5kYXJkUG9wdWxhdGlvbk1vZGVsIG9iamVjdCkgew0KKwkJCQlyZXR1cm4gY3JlYXRlU3RvY2hhc3RpY1N0YW5kYXJkUG9wdWxhdGlvbk1vZGVsQWRhcHRlcigpOw0KKwkJCX0NCisJCQlAT3ZlcnJpZGUNCisJCQlwdWJsaWMgQWRhcHRlciBjYXNlRGVtb2dyYXBoaWNQb3B1bGF0aW9uTW9kZWwoRGVtb2dyYXBoaWNQb3B1bGF0aW9uTW9kZWwgb2JqZWN0KSB7DQorCQkJCXJldHVybiBjcmVhdGVEZW1vZ3JhcGhpY1BvcHVsYXRpb25Nb2RlbEFkYXB0ZXIoKTsNCisJCQl9DQorCQkJQE92ZXJyaWRlDQorCQkJcHVibGljIEFkYXB0ZXIgY2FzZVBvcHVsYXRpb25Hcm91cChQb3B1bGF0aW9uR3JvdXAgb2JqZWN0KSB7DQorCQkJCXJldHVybiBjcmVhdGVQb3B1bGF0aW9uR3JvdXBBZGFwdGVyKCk7DQorCQkJfQ0KKwkJCUBPdmVycmlkZQ0KKwkJCXB1YmxpYyBBZGFwdGVyIGNhc2VQb3B1bGF0aW9uSW5pdGlhbGl6ZXIoUG9wdWxhdGlvbkluaXRpYWxpemVyIG9iamVjdCkgew0KKwkJCQlyZXR1cm4gY3JlYXRlUG9wdWxhdGlvbkluaXRpYWxpemVyQWRhcHRlcigpOw0KKwkJCX0NCisJCQlAT3ZlcnJpZGUNCisJCQlwdWJsaWMgQWRhcHRlciBjYXNlU3RhbmRhcmRQb3B1bGF0aW9uSW5pdGlhbGl6ZXIoU3RhbmRhcmRQb3B1bGF0aW9uSW5pdGlhbGl6ZXIgb2JqZWN0KSB7DQorCQkJCXJldHVybiBjcmVhdGVTdGFuZGFyZFBvcHVsYXRpb25Jbml0aWFsaXplckFkYXB0ZXIoKTsNCisJCQl9DQorCQkJQE92ZXJyaWRlDQorCQkJcHVibGljIEFkYXB0ZXIgY2FzZVNlYXNvbmFsUG9wdWxhdGlvbk1vZGVsKFNlYXNvbmFsUG9wdWxhdGlvbk1vZGVsIG9iamVjdCkgew0KKwkJCQlyZXR1cm4gY3JlYXRlU2Vhc29uYWxQb3B1bGF0aW9uTW9kZWxBZGFwdGVyKCk7DQorCQkJfQ0KKwkJCUBPdmVycmlkZQ0KKwkJCXB1YmxpYyBBZGFwdGVyIGNhc2VFYXJ0aFNjaWVuY2VQb3B1bGF0aW9uSW5pdGlhbGl6ZXIoRWFydGhTY2llbmNlUG9wdWxhdGlvbkluaXRpYWxpemVyIG9iamVjdCkgew0KKwkJCQlyZXR1cm4gY3JlYXRlRWFydGhTY2llbmNlUG9wdWxhdGlvbkluaXRpYWxpemVyQWRhcHRlcigpOw0KKwkJCX0NCisJCQlAT3ZlcnJpZGUNCisJCQlwdWJsaWMgQWRhcHRlciBjYXNlWWV0aVBvcHVsYXRpb25Jbml0aWFsaXplcihZZXRpUG9wdWxhdGlvbkluaXRpYWxpemVyIG9iamVjdCkgew0KKwkJCQlyZXR1cm4gY3JlYXRlWWV0aVBvcHVsYXRpb25Jbml0aWFsaXplckFkYXB0ZXIoKTsNCisJCQl9DQorCQkJQE92ZXJyaWRlDQorCQkJcHVibGljIEFkYXB0ZXIgY2FzZU1vc3F1aXRvUG9wdWxhdGlvbk1vZGVsKE1vc3F1aXRvUG9wdWxhdGlvbk1vZGVsIG9iamVjdCkgew0KKwkJCQlyZXR1cm4gY3JlYXRlTW9zcXVpdG9Qb3B1bGF0aW9uTW9kZWxBZGFwdGVyKCk7DQorCQkJfQ0KKwkJCUBPdmVycmlkZQ0KKwkJCXB1YmxpYyBBZGFwdGVyIGNhc2VBZ2luZ1BvcHVsYXRpb25Nb2RlbChBZ2luZ1BvcHVsYXRpb25Nb2RlbCBvYmplY3QpIHsNCisJCQkJcmV0dXJuIGNyZWF0ZUFnaW5nUG9wdWxhdGlvbk1vZGVsQWRhcHRlcigpOw0KKwkJCX0NCisJCQlAT3ZlcnJpZGUNCisJCQlwdWJsaWMgQWRhcHRlciBjYXNlQWdlR3JvdXAoQWdlR3JvdXAgb2JqZWN0KSB7DQorCQkJCXJldHVybiBjcmVhdGVBZ2VHcm91cEFkYXB0ZXIoKTsNCisJCQl9DQorCQkJQE92ZXJyaWRlDQorCQkJcHVibGljIDxUPiBBZGFwdGVyIGNhc2VDb21wYXJhYmxlKENvbXBhcmFibGU8VD4gb2JqZWN0KSB7DQorCQkJCXJldHVybiBjcmVhdGVDb21wYXJhYmxlQWRhcHRlcigpOw0KKwkJCX0NCisJCQlAT3ZlcnJpZGUNCisJCQlwdWJsaWMgQWRhcHRlciBjYXNlU2FuaXR5Q2hlY2tlcihTYW5pdHlDaGVja2VyIG9iamVjdCkgew0KKwkJCQlyZXR1cm4gY3JlYXRlU2FuaXR5Q2hlY2tlckFkYXB0ZXIoKTsNCisJCQl9DQorCQkJQE92ZXJyaWRlDQorCQkJcHVibGljIEFkYXB0ZXIgY2FzZUlkZW50aWZpYWJsZShJZGVudGlmaWFibGUgb2JqZWN0KSB7DQorCQkJCXJldHVybiBjcmVhdGVJZGVudGlmaWFibGVBZGFwdGVyKCk7DQorCQkJfQ0KKwkJCUBPdmVycmlkZQ0KKwkJCXB1YmxpYyBBZGFwdGVyIGNhc2VEZWNvcmF0b3IoRGVjb3JhdG9yIG9iamVjdCkgew0KKwkJCQlyZXR1cm4gY3JlYXRlRGVjb3JhdG9yQWRhcHRlcigpOw0KKwkJCX0NCisJCQlAT3ZlcnJpZGUNCisJCQlwdWJsaWMgQWRhcHRlciBjYXNlTm9kZURlY29yYXRvcihOb2RlRGVjb3JhdG9yIG9iamVjdCkgew0KKwkJCQlyZXR1cm4gY3JlYXRlTm9kZURlY29yYXRvckFkYXB0ZXIoKTsNCisJCQl9DQorCQkJQE92ZXJyaWRlDQorCQkJcHVibGljIEFkYXB0ZXIgY2FzZUludGVncmF0aW9uRGVjb3JhdG9yKEludGVncmF0aW9uRGVjb3JhdG9yIG9iamVjdCkgew0KKwkJCQlyZXR1cm4gY3JlYXRlSW50ZWdyYXRpb25EZWNvcmF0b3JBZGFwdGVyKCk7DQorCQkJfQ0KKwkJCUBPdmVycmlkZQ0KKwkJCXB1YmxpYyBBZGFwdGVyIGNhc2VNb2RpZmlhYmxlKE1vZGlmaWFibGUgb2JqZWN0KSB7DQorCQkJCXJldHVybiBjcmVhdGVNb2RpZmlhYmxlQWRhcHRlcigpOw0KKwkJCX0NCisJCQlAT3ZlcnJpZGUNCisJCQlwdWJsaWMgQWRhcHRlciBjYXNlTGFiZWwoTGFiZWwgb2JqZWN0KSB7DQorCQkJCXJldHVybiBjcmVhdGVMYWJlbEFkYXB0ZXIoKTsNCisJCQl9DQorCQkJQE92ZXJyaWRlDQorCQkJcHVibGljIEFkYXB0ZXIgY2FzZUR5bmFtaWNMYWJlbChEeW5hbWljTGFiZWwgb2JqZWN0KSB7DQorCQkJCXJldHVybiBjcmVhdGVEeW5hbWljTGFiZWxBZGFwdGVyKCk7DQorCQkJfQ0KKwkJCUBPdmVycmlkZQ0KKwkJCXB1YmxpYyBBZGFwdGVyIGNhc2VOb2RlTGFiZWwoTm9kZUxhYmVsIG9iamVjdCkgew0KKwkJCQlyZXR1cm4gY3JlYXRlTm9kZUxhYmVsQWRhcHRlcigpOw0KKwkJCX0NCisJCQlAT3ZlcnJpZGUNCisJCQlwdWJsaWMgQWRhcHRlciBjYXNlRHluYW1pY05vZGVMYWJlbChEeW5hbWljTm9kZUxhYmVsIG9iamVjdCkgew0KKwkJCQlyZXR1cm4gY3JlYXRlRHluYW1pY05vZGVMYWJlbEFkYXB0ZXIoKTsNCisJCQl9DQorCQkJQE92ZXJyaWRlDQorCQkJcHVibGljIEFkYXB0ZXIgY2FzZUludGVncmF0aW9uTGFiZWwoSW50ZWdyYXRpb25MYWJlbCBvYmplY3QpIHsNCisJCQkJcmV0dXJuIGNyZWF0ZUludGVncmF0aW9uTGFiZWxBZGFwdGVyKCk7DQorCQkJfQ0KKwkJCUBPdmVycmlkZQ0KKwkJCXB1YmxpYyBBZGFwdGVyIGNhc2VMYWJlbFZhbHVlKExhYmVsVmFsdWUgb2JqZWN0KSB7DQorCQkJCXJldHVybiBjcmVhdGVMYWJlbFZhbHVlQWRhcHRlcigpOw0KKwkJCX0NCisJCQlAT3ZlcnJpZGUNCisJCQlwdWJsaWMgQWRhcHRlciBjYXNlSW50ZWdyYXRpb25MYWJlbFZhbHVlKEludGVncmF0aW9uTGFiZWxWYWx1ZSBvYmplY3QpIHsNCisJCQkJcmV0dXJuIGNyZWF0ZUludGVncmF0aW9uTGFiZWxWYWx1ZUFkYXB0ZXIoKTsNCisJCQl9DQorCQkJQE92ZXJyaWRlDQorCQkJcHVibGljIEFkYXB0ZXIgZGVmYXVsdENhc2UoRU9iamVjdCBvYmplY3QpIHsNCisJCQkJcmV0dXJuIGNyZWF0ZUVPYmplY3RBZGFwdGVyKCk7DQorCQkJfQ0KKwkJfTsNCisNCisJLyoqDQorCSAqIENyZWF0ZXMgYW4gYWRhcHRlciBmb3IgdGhlIDxjb2RlPnRhcmdldDwvY29kZT4uDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcGFyYW0gdGFyZ2V0IHRoZSBvYmplY3QgdG8gYWRhcHQuDQorCSAqIEByZXR1cm4gdGhlIGFkYXB0ZXIgZm9yIHRoZSA8Y29kZT50YXJnZXQ8L2NvZGU+Lg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlAT3ZlcnJpZGUNCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlQWRhcHRlcihOb3RpZmllciB0YXJnZXQpIHsNCisJCXJldHVybiBtb2RlbFN3aXRjaC5kb1N3aXRjaCgoRU9iamVjdCl0YXJnZXQpOw0KKwl9DQorDQorDQorCS8qKg0KKwkgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5Qb3B1bGF0aW9uTW9kZWwgPGVtPlBvcHVsYXRpb24gTW9kZWw8L2VtPn0nLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7DQorCSAqIGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZSB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5Lg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuDQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLlBvcHVsYXRpb25Nb2RlbA0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVQb3B1bGF0aW9uTW9kZWxBZGFwdGVyKCkgew0KKwkJcmV0dXJuIG51bGw7DQorCX0NCisNCisJLyoqDQorCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsIDxlbT5Qb3B1bGF0aW9uIE1vZGVsPC9lbT59Jy4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOw0KKwkgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLg0KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZFBvcHVsYXRpb25Nb2RlbA0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVTdGFuZGFyZFBvcHVsYXRpb25Nb2RlbEFkYXB0ZXIoKSB7DQorCQlyZXR1cm4gbnVsbDsNCisJfQ0KKw0KKwkvKioNCisJICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuUG9wdWxhdGlvbk1vZGVsTGFiZWwgPGVtPlBvcHVsYXRpb24gTW9kZWwgTGFiZWw8L2VtPn0nLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7DQorCSAqIGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZSB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5Lg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuDQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLlBvcHVsYXRpb25Nb2RlbExhYmVsDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZVBvcHVsYXRpb25Nb2RlbExhYmVsQWRhcHRlcigpIHsNCisJCXJldHVybiBudWxsOw0KKwl9DQorDQorCS8qKg0KKwkgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZFBvcHVsYXRpb25Nb2RlbExhYmVsIDxlbT5Qb3B1bGF0aW9uIE1vZGVsIExhYmVsPC9lbT59Jy4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOw0KKwkgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLg0KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZFBvcHVsYXRpb25Nb2RlbExhYmVsDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZVN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWxBZGFwdGVyKCkgew0KKwkJcmV0dXJuIG51bGw7DQorCX0NCisNCisJLyoqDQorCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkludGVncmF0aW9uTGFiZWwgPGVtPkludGVncmF0aW9uIExhYmVsPC9lbT59Jy4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOw0KKwkgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLg0KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5JbnRlZ3JhdGlvbkxhYmVsDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZUludGVncmF0aW9uTGFiZWxBZGFwdGVyKCkgew0KKwkJcmV0dXJuIG51bGw7DQorCX0NCisNCisJLyoqDQorCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkludGVncmF0aW9uTGFiZWxWYWx1ZSA8ZW0+SW50ZWdyYXRpb24gTGFiZWwgVmFsdWU8L2VtPn0nLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7DQorCSAqIGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZSB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5Lg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuDQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkludGVncmF0aW9uTGFiZWxWYWx1ZQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVJbnRlZ3JhdGlvbkxhYmVsVmFsdWVBZGFwdGVyKCkgew0KKwkJcmV0dXJuIG51bGw7DQorCX0NCisNCisJLyoqDQorCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLkludGVncmF0aW9uRGVjb3JhdG9yIDxlbT5JbnRlZ3JhdGlvbiBEZWNvcmF0b3I8L2VtPn0nLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7DQorCSAqIGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZSB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5Lg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuDQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLkludGVncmF0aW9uRGVjb3JhdG9yDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZUludGVncmF0aW9uRGVjb3JhdG9yQWRhcHRlcigpIHsNCisJCXJldHVybiBudWxsOw0KKwl9DQorDQorCS8qKg0KKwkgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5Qb3B1bGF0aW9uTW9kZWxMYWJlbFZhbHVlIDxlbT5Qb3B1bGF0aW9uIE1vZGVsIExhYmVsIFZhbHVlPC9lbT59Jy4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOw0KKwkgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLg0KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5Qb3B1bGF0aW9uTW9kZWxMYWJlbFZhbHVlDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZVBvcHVsYXRpb25Nb2RlbExhYmVsVmFsdWVBZGFwdGVyKCkgew0KKwkJcmV0dXJuIG51bGw7DQorCX0NCisNCisJLyoqDQorCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWxWYWx1ZSA8ZW0+UG9wdWxhdGlvbiBNb2RlbCBMYWJlbCBWYWx1ZTwvZW0+fScuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsNCisJICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuDQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4NCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxMYWJlbFZhbHVlDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZVN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWxWYWx1ZUFkYXB0ZXIoKSB7DQorCQlyZXR1cm4gbnVsbDsNCisJfQ0KKw0KKwkvKioNCisJICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuU3RvY2hhc3RpY1N0YW5kYXJkUG9wdWxhdGlvbk1vZGVsIDxlbT5TdG9jaGFzdGljIFN0YW5kYXJkIFBvcHVsYXRpb24gTW9kZWw8L2VtPn0nLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7DQorCSAqIGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZSB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5Lg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuDQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLlN0b2NoYXN0aWNTdGFuZGFyZFBvcHVsYXRpb25Nb2RlbA0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVTdG9jaGFzdGljU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxBZGFwdGVyKCkgew0KKwkJcmV0dXJuIG51bGw7DQorCX0NCisNCisJLyoqDQorCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLkRlbW9ncmFwaGljUG9wdWxhdGlvbk1vZGVsIDxlbT5EZW1vZ3JhcGhpYyBQb3B1bGF0aW9uIE1vZGVsPC9lbT59Jy4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOw0KKwkgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLg0KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5EZW1vZ3JhcGhpY1BvcHVsYXRpb25Nb2RlbA0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVEZW1vZ3JhcGhpY1BvcHVsYXRpb25Nb2RlbEFkYXB0ZXIoKSB7DQorCQlyZXR1cm4gbnVsbDsNCisJfQ0KKw0KKwkvKioNCisJICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuUG9wdWxhdGlvbkdyb3VwIDxlbT5Qb3B1bGF0aW9uIEdyb3VwPC9lbT59Jy4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOw0KKwkgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLg0KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5Qb3B1bGF0aW9uR3JvdXANCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlUG9wdWxhdGlvbkdyb3VwQWRhcHRlcigpIHsNCisJCXJldHVybiBudWxsOw0KKwl9DQorDQorCS8qKg0KKwkgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5Qb3B1bGF0aW9uSW5pdGlhbGl6ZXIgPGVtPlBvcHVsYXRpb24gSW5pdGlhbGl6ZXI8L2VtPn0nLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7DQorCSAqIGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZSB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5Lg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuDQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLlBvcHVsYXRpb25Jbml0aWFsaXplcg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVQb3B1bGF0aW9uSW5pdGlhbGl6ZXJBZGFwdGVyKCkgew0KKwkJcmV0dXJuIG51bGw7DQorCX0NCisNCisJLyoqDQorCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkUG9wdWxhdGlvbkluaXRpYWxpemVyIDxlbT5Qb3B1bGF0aW9uIEluaXRpYWxpemVyPC9lbT59Jy4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOw0KKwkgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLg0KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZFBvcHVsYXRpb25Jbml0aWFsaXplcg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVTdGFuZGFyZFBvcHVsYXRpb25Jbml0aWFsaXplckFkYXB0ZXIoKSB7DQorCQlyZXR1cm4gbnVsbDsNCisJfQ0KKw0KKwkvKioNCisJICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuU2Vhc29uYWxQb3B1bGF0aW9uTW9kZWwgPGVtPlNlYXNvbmFsIFBvcHVsYXRpb24gTW9kZWw8L2VtPn0nLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7DQorCSAqIGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZSB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5Lg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuDQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLlNlYXNvbmFsUG9wdWxhdGlvbk1vZGVsDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZVNlYXNvbmFsUG9wdWxhdGlvbk1vZGVsQWRhcHRlcigpIHsNCisJCXJldHVybiBudWxsOw0KKwl9DQorDQorCS8qKg0KKwkgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5FYXJ0aFNjaWVuY2VQb3B1bGF0aW9uSW5pdGlhbGl6ZXIgPGVtPkVhcnRoIFNjaWVuY2UgUG9wdWxhdGlvbiBJbml0aWFsaXplcjwvZW0+fScuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsNCisJICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuDQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4NCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuRWFydGhTY2llbmNlUG9wdWxhdGlvbkluaXRpYWxpemVyDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZUVhcnRoU2NpZW5jZVBvcHVsYXRpb25Jbml0aWFsaXplckFkYXB0ZXIoKSB7DQorCQlyZXR1cm4gbnVsbDsNCisJfQ0KKw0KKwkvKioNCisJICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuWWV0aVBvcHVsYXRpb25Jbml0aWFsaXplciA8ZW0+WWV0aSBQb3B1bGF0aW9uIEluaXRpYWxpemVyPC9lbT59Jy4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOw0KKwkgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLg0KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5ZZXRpUG9wdWxhdGlvbkluaXRpYWxpemVyDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZVlldGlQb3B1bGF0aW9uSW5pdGlhbGl6ZXJBZGFwdGVyKCkgew0KKwkJcmV0dXJuIG51bGw7DQorCX0NCisNCisJLyoqDQorCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLk1vc3F1aXRvUG9wdWxhdGlvbk1vZGVsIDxlbT5Nb3NxdWl0byBQb3B1bGF0aW9uIE1vZGVsPC9lbT59Jy4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOw0KKwkgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLg0KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5Nb3NxdWl0b1BvcHVsYXRpb25Nb2RlbA0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVNb3NxdWl0b1BvcHVsYXRpb25Nb2RlbEFkYXB0ZXIoKSB7DQorCQlyZXR1cm4gbnVsbDsNCisJfQ0KKw0KKwkvKioNCisJICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuQWdpbmdQb3B1bGF0aW9uTW9kZWwgPGVtPkFnaW5nIFBvcHVsYXRpb24gTW9kZWw8L2VtPn0nLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7DQorCSAqIGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZSB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5Lg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuDQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLkFnaW5nUG9wdWxhdGlvbk1vZGVsDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZUFnaW5nUG9wdWxhdGlvbk1vZGVsQWRhcHRlcigpIHsNCisJCXJldHVybiBudWxsOw0KKwl9DQorDQorCS8qKg0KKwkgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5BZ2VHcm91cCA8ZW0+QWdlIEdyb3VwPC9lbT59Jy4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOw0KKwkgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLg0KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5BZ2VHcm91cA0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVBZ2VHcm91cEFkYXB0ZXIoKSB7DQorCQlyZXR1cm4gbnVsbDsNCisJfQ0KKw0KKwkvKioNCisJICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBqYXZhLmxhbmcuQ29tcGFyYWJsZSA8ZW0+Q29tcGFyYWJsZTwvZW0+fScuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsNCisJICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuDQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4NCisJICogQHNlZSBqYXZhLmxhbmcuQ29tcGFyYWJsZQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVDb21wYXJhYmxlQWRhcHRlcigpIHsNCisJCXJldHVybiBudWxsOw0KKwl9DQorDQorCS8qKg0KKwkgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uSWRlbnRpZmlhYmxlIDxlbT5JZGVudGlmaWFibGU8L2VtPn0nLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7DQorCSAqIGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZSB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5Lg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuDQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5JZGVudGlmaWFibGUNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlSWRlbnRpZmlhYmxlQWRhcHRlcigpIHsNCisJCXJldHVybiBudWxsOw0KKwl9DQorDQorCS8qKg0KKwkgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5EZWNvcmF0b3IgPGVtPkRlY29yYXRvcjwvZW0+fScuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsNCisJICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuDQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4NCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuRGVjb3JhdG9yDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZURlY29yYXRvckFkYXB0ZXIoKSB7DQorCQlyZXR1cm4gbnVsbDsNCisJfQ0KKw0KKwkvKioNCisJICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuTm9kZURlY29yYXRvciA8ZW0+Tm9kZSBEZWNvcmF0b3I8L2VtPn0nLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7DQorCSAqIGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZSB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5Lg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuDQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLk5vZGVEZWNvcmF0b3INCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlTm9kZURlY29yYXRvckFkYXB0ZXIoKSB7DQorCQlyZXR1cm4gbnVsbDsNCisJfQ0KKw0KKwkvKioNCisJICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuTW9kaWZpYWJsZSA8ZW0+TW9kaWZpYWJsZTwvZW0+fScuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsNCisJICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuDQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4NCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuTW9kaWZpYWJsZQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVNb2RpZmlhYmxlQWRhcHRlcigpIHsNCisJCXJldHVybiBudWxsOw0KKwl9DQorDQorCS8qKg0KKwkgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5MYWJlbCA8ZW0+TGFiZWw8L2VtPn0nLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7DQorCSAqIGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZSB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5Lg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuDQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkxhYmVsDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZUxhYmVsQWRhcHRlcigpIHsNCisJCXJldHVybiBudWxsOw0KKwl9DQorDQorCS8qKg0KKwkgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5EeW5hbWljTGFiZWwgPGVtPkR5bmFtaWMgTGFiZWw8L2VtPn0nLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7DQorCSAqIGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZSB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5Lg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuDQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkR5bmFtaWNMYWJlbA0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVEeW5hbWljTGFiZWxBZGFwdGVyKCkgew0KKwkJcmV0dXJuIG51bGw7DQorCX0NCisNCisJLyoqDQorCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLk5vZGVMYWJlbCA8ZW0+Tm9kZSBMYWJlbDwvZW0+fScuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsNCisJICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuDQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4NCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguTm9kZUxhYmVsDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZU5vZGVMYWJlbEFkYXB0ZXIoKSB7DQorCQlyZXR1cm4gbnVsbDsNCisJfQ0KKw0KKwkvKioNCisJICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguRHluYW1pY05vZGVMYWJlbCA8ZW0+RHluYW1pYyBOb2RlIExhYmVsPC9lbT59Jy4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOw0KKwkgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLg0KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5EeW5hbWljTm9kZUxhYmVsDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZUR5bmFtaWNOb2RlTGFiZWxBZGFwdGVyKCkgew0KKwkJcmV0dXJuIG51bGw7DQorCX0NCisNCisJLyoqDQorCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5TYW5pdHlDaGVja2VyIDxlbT5TYW5pdHkgQ2hlY2tlcjwvZW0+fScuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsNCisJICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuDQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4NCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLlNhbml0eUNoZWNrZXINCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlU2FuaXR5Q2hlY2tlckFkYXB0ZXIoKSB7DQorCQlyZXR1cm4gbnVsbDsNCisJfQ0KKw0KKwkvKioNCisJICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguTGFiZWxWYWx1ZSA8ZW0+TGFiZWwgVmFsdWU8L2VtPn0nLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7DQorCSAqIGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZSB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5Lg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuDQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkxhYmVsVmFsdWUNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlTGFiZWxWYWx1ZUFkYXB0ZXIoKSB7DQorCQlyZXR1cm4gbnVsbDsNCisJfQ0KKw0KKwkvKioNCisJICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciB0aGUgZGVmYXVsdCBjYXNlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsLg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZUVPYmplY3RBZGFwdGVyKCkgew0KKwkJcmV0dXJuIG51bGw7DQorCX0NCisNCit9IC8vU3RhbmRhcmRBZGFwdGVyRmFjdG9yeQ0KZGlmZiAtLWdpdCBhL21vZGVscy9wb3B1bGF0aW9ucy9vcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vcG9wdWxhdGlvbm1vZGVscy9zdGFuZGFyZC91dGlsL1N0YW5kYXJkU3dpdGNoLmphdmEgYi9tb2RlbHMvcG9wdWxhdGlvbnMvb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3BvcHVsYXRpb25tb2RlbHMvc3RhbmRhcmQvdXRpbC9TdGFuZGFyZFN3aXRjaC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY4MDg2MmEKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvcG9wdWxhdGlvbnMvb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3BvcHVsYXRpb25tb2RlbHMvc3RhbmRhcmQvdXRpbC9TdGFuZGFyZFN3aXRjaC5qYXZhCkBAIC0wLDAgKzEsODI1IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC51dGlsOw0KKw0KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorICogQ29weXJpZ2h0IChjKSAyMDA5IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLg0KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMNCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjANCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdA0KKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sDQorICoNCisgKiBDb250cmlidXRvcnM6DQorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbg0KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KKw0KK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsNCisNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzczsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3Q7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uSWRlbnRpZmlhYmxlOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLlNhbml0eUNoZWNrZXI7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5EeW5hbWljTGFiZWw7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5EeW5hbWljTm9kZUxhYmVsOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguSW50ZWdyYXRpb25MYWJlbDsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkludGVncmF0aW9uTGFiZWxWYWx1ZTsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkxhYmVsOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguTGFiZWxWYWx1ZTsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLk5vZGVMYWJlbDsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLkRlY29yYXRvcjsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLkludGVncmF0aW9uRGVjb3JhdG9yOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuTm9kZURlY29yYXRvcjsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLk1vZGlmaWFibGU7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC4qOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuQWdlR3JvdXA7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5BZ2luZ1BvcHVsYXRpb25Nb2RlbDsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLkRlbW9ncmFwaGljUG9wdWxhdGlvbk1vZGVsOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuRWFydGhTY2llbmNlUG9wdWxhdGlvbkluaXRpYWxpemVyOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuTW9zcXVpdG9Qb3B1bGF0aW9uTW9kZWw7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5Qb3B1bGF0aW9uR3JvdXA7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5Qb3B1bGF0aW9uSW5pdGlhbGl6ZXI7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5Qb3B1bGF0aW9uTW9kZWw7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5Qb3B1bGF0aW9uTW9kZWxMYWJlbDsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLlBvcHVsYXRpb25Nb2RlbExhYmVsVmFsdWU7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5TZWFzb25hbFBvcHVsYXRpb25Nb2RlbDsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkUGFja2FnZTsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkUG9wdWxhdGlvbkluaXRpYWxpemVyOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWw7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZFBvcHVsYXRpb25Nb2RlbExhYmVsOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxMYWJlbFZhbHVlOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuU3RvY2hhc3RpY1N0YW5kYXJkUG9wdWxhdGlvbk1vZGVsOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuWWV0aVBvcHVsYXRpb25Jbml0aWFsaXplcjsNCisNCisvKioNCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKyAqIFRoZSA8Yj5Td2l0Y2g8L2I+IGZvciB0aGUgbW9kZWwncyBpbmhlcml0YW5jZSBoaWVyYXJjaHkuDQorICogSXQgc3VwcG9ydHMgdGhlIGNhbGwge0BsaW5rICNkb1N3aXRjaChFT2JqZWN0KSBkb1N3aXRjaChvYmplY3QpfQ0KKyAqIHRvIGludm9rZSB0aGUgPGNvZGU+Y2FzZVhYWDwvY29kZT4gbWV0aG9kIGZvciBlYWNoIGNsYXNzIG9mIHRoZSBtb2RlbCwNCisgKiBzdGFydGluZyB3aXRoIHRoZSBhY3R1YWwgY2xhc3Mgb2YgdGhlIG9iamVjdA0KKyAqIGFuZCBwcm9jZWVkaW5nIHVwIHRoZSBpbmhlcml0YW5jZSBoaWVyYXJjaHkNCisgKiB1bnRpbCBhIG5vbi1udWxsIHJlc3VsdCBpcyByZXR1cm5lZCwNCisgKiB3aGljaCBpcyB0aGUgcmVzdWx0IG9mIHRoZSBzd2l0Y2guDQorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmRQYWNrYWdlDQorICogQGdlbmVyYXRlZA0KKyAqLw0KK0BTdXBwcmVzc1dhcm5pbmdzKCJhbGwiKQ0KK3B1YmxpYyBjbGFzcyBTdGFuZGFyZFN3aXRjaDxUMT4gew0KKwkvKioNCisJICogVGhlIGNhY2hlZCBtb2RlbCBwYWNrYWdlDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgc3RhdGljIFN0YW5kYXJkUGFja2FnZSBtb2RlbFBhY2thZ2U7DQorDQorCS8qKg0KKwkgKiBDcmVhdGVzIGFuIGluc3RhbmNlIG9mIHRoZSBzd2l0Y2guDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgU3RhbmRhcmRTd2l0Y2goKSB7DQorCQlpZiAobW9kZWxQYWNrYWdlID09IG51bGwpIHsNCisJCQltb2RlbFBhY2thZ2UgPSBTdGFuZGFyZFBhY2thZ2UuZUlOU1RBTkNFOw0KKwkJfQ0KKwl9DQorDQorCS8qKg0KKwkgKiBDYWxscyA8Y29kZT5jYXNlWFhYPC9jb2RlPiBmb3IgZWFjaCBjbGFzcyBvZiB0aGUgbW9kZWwgdW50aWwgb25lIHJldHVybnMgYSBub24gbnVsbCByZXN1bHQ7IGl0IHlpZWxkcyB0aGF0IHJlc3VsdC4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEByZXR1cm4gdGhlIGZpcnN0IG5vbi1udWxsIHJlc3VsdCByZXR1cm5lZCBieSBhIDxjb2RlPmNhc2VYWFg8L2NvZGU+IGNhbGwuDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBUMSBkb1N3aXRjaChFT2JqZWN0IHRoZUVPYmplY3QpIHsNCisJCXJldHVybiBkb1N3aXRjaCh0aGVFT2JqZWN0LmVDbGFzcygpLCB0aGVFT2JqZWN0KTsNCisJfQ0KKw0KKwkvKioNCisJICogQ2FsbHMgPGNvZGU+Y2FzZVhYWDwvY29kZT4gZm9yIGVhY2ggY2xhc3Mgb2YgdGhlIG1vZGVsIHVudGlsIG9uZSByZXR1cm5zIGEgbm9uIG51bGwgcmVzdWx0OyBpdCB5aWVsZHMgdGhhdCByZXN1bHQuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcmV0dXJuIHRoZSBmaXJzdCBub24tbnVsbCByZXN1bHQgcmV0dXJuZWQgYnkgYSA8Y29kZT5jYXNlWFhYPC9jb2RlPiBjYWxsLg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgVDEgZG9Td2l0Y2goRUNsYXNzIHRoZUVDbGFzcywgRU9iamVjdCB0aGVFT2JqZWN0KSB7DQorCQlpZiAodGhlRUNsYXNzLmVDb250YWluZXIoKSA9PSBtb2RlbFBhY2thZ2UpIHsNCisJCQlyZXR1cm4gZG9Td2l0Y2godGhlRUNsYXNzLmdldENsYXNzaWZpZXJJRCgpLCB0aGVFT2JqZWN0KTsNCisJCX0NCisJCWVsc2Ugew0KKwkJCUxpc3Q8RUNsYXNzPiBlU3VwZXJUeXBlcyA9IHRoZUVDbGFzcy5nZXRFU3VwZXJUeXBlcygpOw0KKwkJCXJldHVybg0KKwkJCQllU3VwZXJUeXBlcy5pc0VtcHR5KCkgPw0KKwkJCQkJZGVmYXVsdENhc2UodGhlRU9iamVjdCkgOg0KKwkJCQkJZG9Td2l0Y2goZVN1cGVyVHlwZXMuZ2V0KDApLCB0aGVFT2JqZWN0KTsNCisJCX0NCisJfQ0KKw0KKwkvKioNCisJICogQ2FsbHMgPGNvZGU+Y2FzZVhYWDwvY29kZT4gZm9yIGVhY2ggY2xhc3Mgb2YgdGhlIG1vZGVsIHVudGlsIG9uZSByZXR1cm5zIGEgbm9uIG51bGwgcmVzdWx0OyBpdCB5aWVsZHMgdGhhdCByZXN1bHQuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcmV0dXJuIHRoZSBmaXJzdCBub24tbnVsbCByZXN1bHQgcmV0dXJuZWQgYnkgYSA8Y29kZT5jYXNlWFhYPC9jb2RlPiBjYWxsLg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgVDEgZG9Td2l0Y2goaW50IGNsYXNzaWZpZXJJRCwgRU9iamVjdCB0aGVFT2JqZWN0KSB7DQorCQlzd2l0Y2ggKGNsYXNzaWZpZXJJRCkgew0KKwkJCWNhc2UgU3RhbmRhcmRQYWNrYWdlLlBPUFVMQVRJT05fTU9ERUw6IHsNCisJCQkJUG9wdWxhdGlvbk1vZGVsIHBvcHVsYXRpb25Nb2RlbCA9IChQb3B1bGF0aW9uTW9kZWwpdGhlRU9iamVjdDsNCisJCQkJVDEgcmVzdWx0ID0gY2FzZVBvcHVsYXRpb25Nb2RlbChwb3B1bGF0aW9uTW9kZWwpOw0KKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VJbnRlZ3JhdGlvbkRlY29yYXRvcihwb3B1bGF0aW9uTW9kZWwpOw0KKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VNb2RpZmlhYmxlKHBvcHVsYXRpb25Nb2RlbCk7DQorCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZU5vZGVEZWNvcmF0b3IocG9wdWxhdGlvbk1vZGVsKTsNCisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlRGVjb3JhdG9yKHBvcHVsYXRpb25Nb2RlbCk7DQorCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZUlkZW50aWZpYWJsZShwb3B1bGF0aW9uTW9kZWwpOw0KKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VDb21wYXJhYmxlKHBvcHVsYXRpb25Nb2RlbCk7DQorCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZVNhbml0eUNoZWNrZXIocG9wdWxhdGlvbk1vZGVsKTsNCisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBkZWZhdWx0Q2FzZSh0aGVFT2JqZWN0KTsNCisJCQkJcmV0dXJuIHJlc3VsdDsNCisJCQl9DQorCQkJY2FzZSBTdGFuZGFyZFBhY2thZ2UuU1RBTkRBUkRfUE9QVUxBVElPTl9NT0RFTDogew0KKwkJCQlTdGFuZGFyZFBvcHVsYXRpb25Nb2RlbCBzdGFuZGFyZFBvcHVsYXRpb25Nb2RlbCA9IChTdGFuZGFyZFBvcHVsYXRpb25Nb2RlbCl0aGVFT2JqZWN0Ow0KKwkJCQlUMSByZXN1bHQgPSBjYXNlU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWwoc3RhbmRhcmRQb3B1bGF0aW9uTW9kZWwpOw0KKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VQb3B1bGF0aW9uTW9kZWwoc3RhbmRhcmRQb3B1bGF0aW9uTW9kZWwpOw0KKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VJbnRlZ3JhdGlvbkRlY29yYXRvcihzdGFuZGFyZFBvcHVsYXRpb25Nb2RlbCk7DQorCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZU1vZGlmaWFibGUoc3RhbmRhcmRQb3B1bGF0aW9uTW9kZWwpOw0KKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VOb2RlRGVjb3JhdG9yKHN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsKTsNCisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlRGVjb3JhdG9yKHN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsKTsNCisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlSWRlbnRpZmlhYmxlKHN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsKTsNCisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlQ29tcGFyYWJsZShzdGFuZGFyZFBvcHVsYXRpb25Nb2RlbCk7DQorCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZVNhbml0eUNoZWNrZXIoc3RhbmRhcmRQb3B1bGF0aW9uTW9kZWwpOw0KKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGRlZmF1bHRDYXNlKHRoZUVPYmplY3QpOw0KKwkJCQlyZXR1cm4gcmVzdWx0Ow0KKwkJCX0NCisJCQljYXNlIFN0YW5kYXJkUGFja2FnZS5QT1BVTEFUSU9OX01PREVMX0xBQkVMOiB7DQorCQkJCVBvcHVsYXRpb25Nb2RlbExhYmVsIHBvcHVsYXRpb25Nb2RlbExhYmVsID0gKFBvcHVsYXRpb25Nb2RlbExhYmVsKXRoZUVPYmplY3Q7DQorCQkJCVQxIHJlc3VsdCA9IGNhc2VQb3B1bGF0aW9uTW9kZWxMYWJlbChwb3B1bGF0aW9uTW9kZWxMYWJlbCk7DQorCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZUludGVncmF0aW9uTGFiZWwocG9wdWxhdGlvbk1vZGVsTGFiZWwpOw0KKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VEeW5hbWljTm9kZUxhYmVsKHBvcHVsYXRpb25Nb2RlbExhYmVsKTsNCisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlRHluYW1pY0xhYmVsKHBvcHVsYXRpb25Nb2RlbExhYmVsKTsNCisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlTm9kZUxhYmVsKHBvcHVsYXRpb25Nb2RlbExhYmVsKTsNCisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlTGFiZWwocG9wdWxhdGlvbk1vZGVsTGFiZWwpOw0KKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VJZGVudGlmaWFibGUocG9wdWxhdGlvbk1vZGVsTGFiZWwpOw0KKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VDb21wYXJhYmxlKHBvcHVsYXRpb25Nb2RlbExhYmVsKTsNCisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlU2FuaXR5Q2hlY2tlcihwb3B1bGF0aW9uTW9kZWxMYWJlbCk7DQorCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gZGVmYXVsdENhc2UodGhlRU9iamVjdCk7DQorCQkJCXJldHVybiByZXN1bHQ7DQorCQkJfQ0KKwkJCWNhc2UgU3RhbmRhcmRQYWNrYWdlLlNUQU5EQVJEX1BPUFVMQVRJT05fTU9ERUxfTEFCRUw6IHsNCisJCQkJU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxMYWJlbCBzdGFuZGFyZFBvcHVsYXRpb25Nb2RlbExhYmVsID0gKFN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWwpdGhlRU9iamVjdDsNCisJCQkJVDEgcmVzdWx0ID0gY2FzZVN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWwoc3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxMYWJlbCk7DQorCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZVBvcHVsYXRpb25Nb2RlbExhYmVsKHN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWwpOw0KKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VJbnRlZ3JhdGlvbkxhYmVsKHN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWwpOw0KKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VEeW5hbWljTm9kZUxhYmVsKHN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWwpOw0KKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VEeW5hbWljTGFiZWwoc3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxMYWJlbCk7DQorCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZU5vZGVMYWJlbChzdGFuZGFyZFBvcHVsYXRpb25Nb2RlbExhYmVsKTsNCisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlTGFiZWwoc3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxMYWJlbCk7DQorCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZUlkZW50aWZpYWJsZShzdGFuZGFyZFBvcHVsYXRpb25Nb2RlbExhYmVsKTsNCisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlQ29tcGFyYWJsZShzdGFuZGFyZFBvcHVsYXRpb25Nb2RlbExhYmVsKTsNCisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlU2FuaXR5Q2hlY2tlcihzdGFuZGFyZFBvcHVsYXRpb25Nb2RlbExhYmVsKTsNCisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBkZWZhdWx0Q2FzZSh0aGVFT2JqZWN0KTsNCisJCQkJcmV0dXJuIHJlc3VsdDsNCisJCQl9DQorCQkJY2FzZSBTdGFuZGFyZFBhY2thZ2UuUE9QVUxBVElPTl9NT0RFTF9MQUJFTF9WQUxVRTogew0KKwkJCQlQb3B1bGF0aW9uTW9kZWxMYWJlbFZhbHVlIHBvcHVsYXRpb25Nb2RlbExhYmVsVmFsdWUgPSAoUG9wdWxhdGlvbk1vZGVsTGFiZWxWYWx1ZSl0aGVFT2JqZWN0Ow0KKwkJCQlUMSByZXN1bHQgPSBjYXNlUG9wdWxhdGlvbk1vZGVsTGFiZWxWYWx1ZShwb3B1bGF0aW9uTW9kZWxMYWJlbFZhbHVlKTsNCisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlSW50ZWdyYXRpb25MYWJlbFZhbHVlKHBvcHVsYXRpb25Nb2RlbExhYmVsVmFsdWUpOw0KKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VMYWJlbFZhbHVlKHBvcHVsYXRpb25Nb2RlbExhYmVsVmFsdWUpOw0KKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VTYW5pdHlDaGVja2VyKHBvcHVsYXRpb25Nb2RlbExhYmVsVmFsdWUpOw0KKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGRlZmF1bHRDYXNlKHRoZUVPYmplY3QpOw0KKwkJCQlyZXR1cm4gcmVzdWx0Ow0KKwkJCX0NCisJCQljYXNlIFN0YW5kYXJkUGFja2FnZS5TVEFOREFSRF9QT1BVTEFUSU9OX01PREVMX0xBQkVMX1ZBTFVFOiB7DQorCQkJCVN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWxWYWx1ZSBzdGFuZGFyZFBvcHVsYXRpb25Nb2RlbExhYmVsVmFsdWUgPSAoU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxMYWJlbFZhbHVlKXRoZUVPYmplY3Q7DQorCQkJCVQxIHJlc3VsdCA9IGNhc2VTdGFuZGFyZFBvcHVsYXRpb25Nb2RlbExhYmVsVmFsdWUoc3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxMYWJlbFZhbHVlKTsNCisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlUG9wdWxhdGlvbk1vZGVsTGFiZWxWYWx1ZShzdGFuZGFyZFBvcHVsYXRpb25Nb2RlbExhYmVsVmFsdWUpOw0KKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VJbnRlZ3JhdGlvbkxhYmVsVmFsdWUoc3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxMYWJlbFZhbHVlKTsNCisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlTGFiZWxWYWx1ZShzdGFuZGFyZFBvcHVsYXRpb25Nb2RlbExhYmVsVmFsdWUpOw0KKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VTYW5pdHlDaGVja2VyKHN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWxWYWx1ZSk7DQorCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gZGVmYXVsdENhc2UodGhlRU9iamVjdCk7DQorCQkJCXJldHVybiByZXN1bHQ7DQorCQkJfQ0KKwkJCWNhc2UgU3RhbmRhcmRQYWNrYWdlLlNUT0NIQVNUSUNfU1RBTkRBUkRfUE9QVUxBVElPTl9NT0RFTDogew0KKwkJCQlTdG9jaGFzdGljU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWwgc3RvY2hhc3RpY1N0YW5kYXJkUG9wdWxhdGlvbk1vZGVsID0gKFN0b2NoYXN0aWNTdGFuZGFyZFBvcHVsYXRpb25Nb2RlbCl0aGVFT2JqZWN0Ow0KKwkJCQlUMSByZXN1bHQgPSBjYXNlU3RvY2hhc3RpY1N0YW5kYXJkUG9wdWxhdGlvbk1vZGVsKHN0b2NoYXN0aWNTdGFuZGFyZFBvcHVsYXRpb25Nb2RlbCk7DQorCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZVN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsKHN0b2NoYXN0aWNTdGFuZGFyZFBvcHVsYXRpb25Nb2RlbCk7DQorCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZVBvcHVsYXRpb25Nb2RlbChzdG9jaGFzdGljU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWwpOw0KKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VJbnRlZ3JhdGlvbkRlY29yYXRvcihzdG9jaGFzdGljU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWwpOw0KKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VNb2RpZmlhYmxlKHN0b2NoYXN0aWNTdGFuZGFyZFBvcHVsYXRpb25Nb2RlbCk7DQorCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZU5vZGVEZWNvcmF0b3Ioc3RvY2hhc3RpY1N0YW5kYXJkUG9wdWxhdGlvbk1vZGVsKTsNCisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlRGVjb3JhdG9yKHN0b2NoYXN0aWNTdGFuZGFyZFBvcHVsYXRpb25Nb2RlbCk7DQorCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZUlkZW50aWZpYWJsZShzdG9jaGFzdGljU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWwpOw0KKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VDb21wYXJhYmxlKHN0b2NoYXN0aWNTdGFuZGFyZFBvcHVsYXRpb25Nb2RlbCk7DQorCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZVNhbml0eUNoZWNrZXIoc3RvY2hhc3RpY1N0YW5kYXJkUG9wdWxhdGlvbk1vZGVsKTsNCisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBkZWZhdWx0Q2FzZSh0aGVFT2JqZWN0KTsNCisJCQkJcmV0dXJuIHJlc3VsdDsNCisJCQl9DQorCQkJY2FzZSBTdGFuZGFyZFBhY2thZ2UuREVNT0dSQVBISUNfUE9QVUxBVElPTl9NT0RFTDogew0KKwkJCQlEZW1vZ3JhcGhpY1BvcHVsYXRpb25Nb2RlbCBkZW1vZ3JhcGhpY1BvcHVsYXRpb25Nb2RlbCA9IChEZW1vZ3JhcGhpY1BvcHVsYXRpb25Nb2RlbCl0aGVFT2JqZWN0Ow0KKwkJCQlUMSByZXN1bHQgPSBjYXNlRGVtb2dyYXBoaWNQb3B1bGF0aW9uTW9kZWwoZGVtb2dyYXBoaWNQb3B1bGF0aW9uTW9kZWwpOw0KKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VTdGFuZGFyZFBvcHVsYXRpb25Nb2RlbChkZW1vZ3JhcGhpY1BvcHVsYXRpb25Nb2RlbCk7DQorCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZVBvcHVsYXRpb25Nb2RlbChkZW1vZ3JhcGhpY1BvcHVsYXRpb25Nb2RlbCk7DQorCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZUludGVncmF0aW9uRGVjb3JhdG9yKGRlbW9ncmFwaGljUG9wdWxhdGlvbk1vZGVsKTsNCisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlTW9kaWZpYWJsZShkZW1vZ3JhcGhpY1BvcHVsYXRpb25Nb2RlbCk7DQorCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZU5vZGVEZWNvcmF0b3IoZGVtb2dyYXBoaWNQb3B1bGF0aW9uTW9kZWwpOw0KKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VEZWNvcmF0b3IoZGVtb2dyYXBoaWNQb3B1bGF0aW9uTW9kZWwpOw0KKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VJZGVudGlmaWFibGUoZGVtb2dyYXBoaWNQb3B1bGF0aW9uTW9kZWwpOw0KKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VDb21wYXJhYmxlKGRlbW9ncmFwaGljUG9wdWxhdGlvbk1vZGVsKTsNCisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlU2FuaXR5Q2hlY2tlcihkZW1vZ3JhcGhpY1BvcHVsYXRpb25Nb2RlbCk7DQorCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gZGVmYXVsdENhc2UodGhlRU9iamVjdCk7DQorCQkJCXJldHVybiByZXN1bHQ7DQorCQkJfQ0KKwkJCWNhc2UgU3RhbmRhcmRQYWNrYWdlLlBPUFVMQVRJT05fR1JPVVA6IHsNCisJCQkJUG9wdWxhdGlvbkdyb3VwIHBvcHVsYXRpb25Hcm91cCA9IChQb3B1bGF0aW9uR3JvdXApdGhlRU9iamVjdDsNCisJCQkJVDEgcmVzdWx0ID0gY2FzZVBvcHVsYXRpb25Hcm91cChwb3B1bGF0aW9uR3JvdXApOw0KKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGRlZmF1bHRDYXNlKHRoZUVPYmplY3QpOw0KKwkJCQlyZXR1cm4gcmVzdWx0Ow0KKwkJCX0NCisJCQljYXNlIFN0YW5kYXJkUGFja2FnZS5QT1BVTEFUSU9OX0lOSVRJQUxJWkVSOiB7DQorCQkJCVBvcHVsYXRpb25Jbml0aWFsaXplciBwb3B1bGF0aW9uSW5pdGlhbGl6ZXIgPSAoUG9wdWxhdGlvbkluaXRpYWxpemVyKXRoZUVPYmplY3Q7DQorCQkJCVQxIHJlc3VsdCA9IGNhc2VQb3B1bGF0aW9uSW5pdGlhbGl6ZXIocG9wdWxhdGlvbkluaXRpYWxpemVyKTsNCisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlTm9kZURlY29yYXRvcihwb3B1bGF0aW9uSW5pdGlhbGl6ZXIpOw0KKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VNb2RpZmlhYmxlKHBvcHVsYXRpb25Jbml0aWFsaXplcik7DQorCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZURlY29yYXRvcihwb3B1bGF0aW9uSW5pdGlhbGl6ZXIpOw0KKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VJZGVudGlmaWFibGUocG9wdWxhdGlvbkluaXRpYWxpemVyKTsNCisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlQ29tcGFyYWJsZShwb3B1bGF0aW9uSW5pdGlhbGl6ZXIpOw0KKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VTYW5pdHlDaGVja2VyKHBvcHVsYXRpb25Jbml0aWFsaXplcik7DQorCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gZGVmYXVsdENhc2UodGhlRU9iamVjdCk7DQorCQkJCXJldHVybiByZXN1bHQ7DQorCQkJfQ0KKwkJCWNhc2UgU3RhbmRhcmRQYWNrYWdlLlNUQU5EQVJEX1BPUFVMQVRJT05fSU5JVElBTElaRVI6IHsNCisJCQkJU3RhbmRhcmRQb3B1bGF0aW9uSW5pdGlhbGl6ZXIgc3RhbmRhcmRQb3B1bGF0aW9uSW5pdGlhbGl6ZXIgPSAoU3RhbmRhcmRQb3B1bGF0aW9uSW5pdGlhbGl6ZXIpdGhlRU9iamVjdDsNCisJCQkJVDEgcmVzdWx0ID0gY2FzZVN0YW5kYXJkUG9wdWxhdGlvbkluaXRpYWxpemVyKHN0YW5kYXJkUG9wdWxhdGlvbkluaXRpYWxpemVyKTsNCisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlUG9wdWxhdGlvbkluaXRpYWxpemVyKHN0YW5kYXJkUG9wdWxhdGlvbkluaXRpYWxpemVyKTsNCisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlTm9kZURlY29yYXRvcihzdGFuZGFyZFBvcHVsYXRpb25Jbml0aWFsaXplcik7DQorCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZU1vZGlmaWFibGUoc3RhbmRhcmRQb3B1bGF0aW9uSW5pdGlhbGl6ZXIpOw0KKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VEZWNvcmF0b3Ioc3RhbmRhcmRQb3B1bGF0aW9uSW5pdGlhbGl6ZXIpOw0KKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VJZGVudGlmaWFibGUoc3RhbmRhcmRQb3B1bGF0aW9uSW5pdGlhbGl6ZXIpOw0KKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VDb21wYXJhYmxlKHN0YW5kYXJkUG9wdWxhdGlvbkluaXRpYWxpemVyKTsNCisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlU2FuaXR5Q2hlY2tlcihzdGFuZGFyZFBvcHVsYXRpb25Jbml0aWFsaXplcik7DQorCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gZGVmYXVsdENhc2UodGhlRU9iamVjdCk7DQorCQkJCXJldHVybiByZXN1bHQ7DQorCQkJfQ0KKwkJCWNhc2UgU3RhbmRhcmRQYWNrYWdlLlNFQVNPTkFMX1BPUFVMQVRJT05fTU9ERUw6IHsNCisJCQkJU2Vhc29uYWxQb3B1bGF0aW9uTW9kZWwgc2Vhc29uYWxQb3B1bGF0aW9uTW9kZWwgPSAoU2Vhc29uYWxQb3B1bGF0aW9uTW9kZWwpdGhlRU9iamVjdDsNCisJCQkJVDEgcmVzdWx0ID0gY2FzZVNlYXNvbmFsUG9wdWxhdGlvbk1vZGVsKHNlYXNvbmFsUG9wdWxhdGlvbk1vZGVsKTsNCisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWwoc2Vhc29uYWxQb3B1bGF0aW9uTW9kZWwpOw0KKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VQb3B1bGF0aW9uTW9kZWwoc2Vhc29uYWxQb3B1bGF0aW9uTW9kZWwpOw0KKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VJbnRlZ3JhdGlvbkRlY29yYXRvcihzZWFzb25hbFBvcHVsYXRpb25Nb2RlbCk7DQorCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZU1vZGlmaWFibGUoc2Vhc29uYWxQb3B1bGF0aW9uTW9kZWwpOw0KKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VOb2RlRGVjb3JhdG9yKHNlYXNvbmFsUG9wdWxhdGlvbk1vZGVsKTsNCisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlRGVjb3JhdG9yKHNlYXNvbmFsUG9wdWxhdGlvbk1vZGVsKTsNCisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlSWRlbnRpZmlhYmxlKHNlYXNvbmFsUG9wdWxhdGlvbk1vZGVsKTsNCisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlQ29tcGFyYWJsZShzZWFzb25hbFBvcHVsYXRpb25Nb2RlbCk7DQorCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZVNhbml0eUNoZWNrZXIoc2Vhc29uYWxQb3B1bGF0aW9uTW9kZWwpOw0KKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGRlZmF1bHRDYXNlKHRoZUVPYmplY3QpOw0KKwkJCQlyZXR1cm4gcmVzdWx0Ow0KKwkJCX0NCisJCQljYXNlIFN0YW5kYXJkUGFja2FnZS5FQVJUSF9TQ0lFTkNFX1BPUFVMQVRJT05fSU5JVElBTElaRVI6IHsNCisJCQkJRWFydGhTY2llbmNlUG9wdWxhdGlvbkluaXRpYWxpemVyIGVhcnRoU2NpZW5jZVBvcHVsYXRpb25Jbml0aWFsaXplciA9IChFYXJ0aFNjaWVuY2VQb3B1bGF0aW9uSW5pdGlhbGl6ZXIpdGhlRU9iamVjdDsNCisJCQkJVDEgcmVzdWx0ID0gY2FzZUVhcnRoU2NpZW5jZVBvcHVsYXRpb25Jbml0aWFsaXplcihlYXJ0aFNjaWVuY2VQb3B1bGF0aW9uSW5pdGlhbGl6ZXIpOw0KKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VQb3B1bGF0aW9uSW5pdGlhbGl6ZXIoZWFydGhTY2llbmNlUG9wdWxhdGlvbkluaXRpYWxpemVyKTsNCisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlTm9kZURlY29yYXRvcihlYXJ0aFNjaWVuY2VQb3B1bGF0aW9uSW5pdGlhbGl6ZXIpOw0KKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VNb2RpZmlhYmxlKGVhcnRoU2NpZW5jZVBvcHVsYXRpb25Jbml0aWFsaXplcik7DQorCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZURlY29yYXRvcihlYXJ0aFNjaWVuY2VQb3B1bGF0aW9uSW5pdGlhbGl6ZXIpOw0KKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VJZGVudGlmaWFibGUoZWFydGhTY2llbmNlUG9wdWxhdGlvbkluaXRpYWxpemVyKTsNCisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlQ29tcGFyYWJsZShlYXJ0aFNjaWVuY2VQb3B1bGF0aW9uSW5pdGlhbGl6ZXIpOw0KKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VTYW5pdHlDaGVja2VyKGVhcnRoU2NpZW5jZVBvcHVsYXRpb25Jbml0aWFsaXplcik7DQorCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gZGVmYXVsdENhc2UodGhlRU9iamVjdCk7DQorCQkJCXJldHVybiByZXN1bHQ7DQorCQkJfQ0KKwkJCWNhc2UgU3RhbmRhcmRQYWNrYWdlLllFVElfUE9QVUxBVElPTl9JTklUSUFMSVpFUjogew0KKwkJCQlZZXRpUG9wdWxhdGlvbkluaXRpYWxpemVyIHlldGlQb3B1bGF0aW9uSW5pdGlhbGl6ZXIgPSAoWWV0aVBvcHVsYXRpb25Jbml0aWFsaXplcil0aGVFT2JqZWN0Ow0KKwkJCQlUMSByZXN1bHQgPSBjYXNlWWV0aVBvcHVsYXRpb25Jbml0aWFsaXplcih5ZXRpUG9wdWxhdGlvbkluaXRpYWxpemVyKTsNCisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlRWFydGhTY2llbmNlUG9wdWxhdGlvbkluaXRpYWxpemVyKHlldGlQb3B1bGF0aW9uSW5pdGlhbGl6ZXIpOw0KKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VQb3B1bGF0aW9uSW5pdGlhbGl6ZXIoeWV0aVBvcHVsYXRpb25Jbml0aWFsaXplcik7DQorCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZU5vZGVEZWNvcmF0b3IoeWV0aVBvcHVsYXRpb25Jbml0aWFsaXplcik7DQorCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZU1vZGlmaWFibGUoeWV0aVBvcHVsYXRpb25Jbml0aWFsaXplcik7DQorCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZURlY29yYXRvcih5ZXRpUG9wdWxhdGlvbkluaXRpYWxpemVyKTsNCisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlSWRlbnRpZmlhYmxlKHlldGlQb3B1bGF0aW9uSW5pdGlhbGl6ZXIpOw0KKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VDb21wYXJhYmxlKHlldGlQb3B1bGF0aW9uSW5pdGlhbGl6ZXIpOw0KKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VTYW5pdHlDaGVja2VyKHlldGlQb3B1bGF0aW9uSW5pdGlhbGl6ZXIpOw0KKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGRlZmF1bHRDYXNlKHRoZUVPYmplY3QpOw0KKwkJCQlyZXR1cm4gcmVzdWx0Ow0KKwkJCX0NCisJCQljYXNlIFN0YW5kYXJkUGFja2FnZS5NT1NRVUlUT19QT1BVTEFUSU9OX01PREVMOiB7DQorCQkJCU1vc3F1aXRvUG9wdWxhdGlvbk1vZGVsIG1vc3F1aXRvUG9wdWxhdGlvbk1vZGVsID0gKE1vc3F1aXRvUG9wdWxhdGlvbk1vZGVsKXRoZUVPYmplY3Q7DQorCQkJCVQxIHJlc3VsdCA9IGNhc2VNb3NxdWl0b1BvcHVsYXRpb25Nb2RlbChtb3NxdWl0b1BvcHVsYXRpb25Nb2RlbCk7DQorCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZVBvcHVsYXRpb25Nb2RlbChtb3NxdWl0b1BvcHVsYXRpb25Nb2RlbCk7DQorCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZUludGVncmF0aW9uRGVjb3JhdG9yKG1vc3F1aXRvUG9wdWxhdGlvbk1vZGVsKTsNCisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlTW9kaWZpYWJsZShtb3NxdWl0b1BvcHVsYXRpb25Nb2RlbCk7DQorCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZU5vZGVEZWNvcmF0b3IobW9zcXVpdG9Qb3B1bGF0aW9uTW9kZWwpOw0KKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VEZWNvcmF0b3IobW9zcXVpdG9Qb3B1bGF0aW9uTW9kZWwpOw0KKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VJZGVudGlmaWFibGUobW9zcXVpdG9Qb3B1bGF0aW9uTW9kZWwpOw0KKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VDb21wYXJhYmxlKG1vc3F1aXRvUG9wdWxhdGlvbk1vZGVsKTsNCisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlU2FuaXR5Q2hlY2tlcihtb3NxdWl0b1BvcHVsYXRpb25Nb2RlbCk7DQorCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gZGVmYXVsdENhc2UodGhlRU9iamVjdCk7DQorCQkJCXJldHVybiByZXN1bHQ7DQorCQkJfQ0KKwkJCWNhc2UgU3RhbmRhcmRQYWNrYWdlLkFHSU5HX1BPUFVMQVRJT05fTU9ERUw6IHsNCisJCQkJQWdpbmdQb3B1bGF0aW9uTW9kZWwgYWdpbmdQb3B1bGF0aW9uTW9kZWwgPSAoQWdpbmdQb3B1bGF0aW9uTW9kZWwpdGhlRU9iamVjdDsNCisJCQkJVDEgcmVzdWx0ID0gY2FzZUFnaW5nUG9wdWxhdGlvbk1vZGVsKGFnaW5nUG9wdWxhdGlvbk1vZGVsKTsNCisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlRGVtb2dyYXBoaWNQb3B1bGF0aW9uTW9kZWwoYWdpbmdQb3B1bGF0aW9uTW9kZWwpOw0KKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VTdGFuZGFyZFBvcHVsYXRpb25Nb2RlbChhZ2luZ1BvcHVsYXRpb25Nb2RlbCk7DQorCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZVBvcHVsYXRpb25Nb2RlbChhZ2luZ1BvcHVsYXRpb25Nb2RlbCk7DQorCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZUludGVncmF0aW9uRGVjb3JhdG9yKGFnaW5nUG9wdWxhdGlvbk1vZGVsKTsNCisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlTW9kaWZpYWJsZShhZ2luZ1BvcHVsYXRpb25Nb2RlbCk7DQorCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZU5vZGVEZWNvcmF0b3IoYWdpbmdQb3B1bGF0aW9uTW9kZWwpOw0KKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VEZWNvcmF0b3IoYWdpbmdQb3B1bGF0aW9uTW9kZWwpOw0KKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VJZGVudGlmaWFibGUoYWdpbmdQb3B1bGF0aW9uTW9kZWwpOw0KKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VDb21wYXJhYmxlKGFnaW5nUG9wdWxhdGlvbk1vZGVsKTsNCisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlU2FuaXR5Q2hlY2tlcihhZ2luZ1BvcHVsYXRpb25Nb2RlbCk7DQorCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gZGVmYXVsdENhc2UodGhlRU9iamVjdCk7DQorCQkJCXJldHVybiByZXN1bHQ7DQorCQkJfQ0KKwkJCWNhc2UgU3RhbmRhcmRQYWNrYWdlLkFHRV9HUk9VUDogew0KKwkJCQlBZ2VHcm91cCBhZ2VHcm91cCA9IChBZ2VHcm91cCl0aGVFT2JqZWN0Ow0KKwkJCQlUMSByZXN1bHQgPSBjYXNlQWdlR3JvdXAoYWdlR3JvdXApOw0KKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VQb3B1bGF0aW9uR3JvdXAoYWdlR3JvdXApOw0KKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGRlZmF1bHRDYXNlKHRoZUVPYmplY3QpOw0KKwkJCQlyZXR1cm4gcmVzdWx0Ow0KKwkJCX0NCisJCQlkZWZhdWx0OiByZXR1cm4gZGVmYXVsdENhc2UodGhlRU9iamVjdCk7DQorCQl9DQorCX0NCisNCisJLyoqDQorCSAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPlBvcHVsYXRpb24gTW9kZWw8L2VtPicuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOw0KKwkgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLg0KKwkgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5Qb3B1bGF0aW9uIE1vZGVsPC9lbT4nLg0KKwkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIFQxIGNhc2VQb3B1bGF0aW9uTW9kZWwoUG9wdWxhdGlvbk1vZGVsIG9iamVjdCkgew0KKwkJcmV0dXJuIG51bGw7DQorCX0NCisNCisJLyoqDQorCSAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPlBvcHVsYXRpb24gTW9kZWw8L2VtPicuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOw0KKwkgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLg0KKwkgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5Qb3B1bGF0aW9uIE1vZGVsPC9lbT4nLg0KKwkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIFQxIGNhc2VTdGFuZGFyZFBvcHVsYXRpb25Nb2RlbChTdGFuZGFyZFBvcHVsYXRpb25Nb2RlbCBvYmplY3QpIHsNCisJCXJldHVybiBudWxsOw0KKwl9DQorDQorCS8qKg0KKwkgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5Qb3B1bGF0aW9uIE1vZGVsIExhYmVsPC9lbT4nLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsNCisJICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guDQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4NCisJICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+UG9wdWxhdGlvbiBNb2RlbCBMYWJlbDwvZW0+Jy4NCisJICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBUMSBjYXNlUG9wdWxhdGlvbk1vZGVsTGFiZWwoUG9wdWxhdGlvbk1vZGVsTGFiZWwgb2JqZWN0KSB7DQorCQlyZXR1cm4gbnVsbDsNCisJfQ0KKw0KKwkvKioNCisJICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+UG9wdWxhdGlvbiBNb2RlbCBMYWJlbDwvZW0+Jy4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7DQorCSAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guDQorCSAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPlBvcHVsYXRpb24gTW9kZWwgTGFiZWw8L2VtPicuDQorCSAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgVDEgY2FzZVN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWwoU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxMYWJlbCBvYmplY3QpIHsNCisJCXJldHVybiBudWxsOw0KKwl9DQorDQorCS8qKg0KKwkgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5JbnRlZ3JhdGlvbiBMYWJlbDwvZW0+Jy4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7DQorCSAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guDQorCSAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkludGVncmF0aW9uIExhYmVsPC9lbT4nLg0KKwkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIFQxIGNhc2VJbnRlZ3JhdGlvbkxhYmVsKEludGVncmF0aW9uTGFiZWwgb2JqZWN0KSB7DQorCQlyZXR1cm4gbnVsbDsNCisJfQ0KKw0KKwkvKioNCisJICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+SW50ZWdyYXRpb24gTGFiZWwgVmFsdWU8L2VtPicuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOw0KKwkgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLg0KKwkgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5JbnRlZ3JhdGlvbiBMYWJlbCBWYWx1ZTwvZW0+Jy4NCisJICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBUMSBjYXNlSW50ZWdyYXRpb25MYWJlbFZhbHVlKEludGVncmF0aW9uTGFiZWxWYWx1ZSBvYmplY3QpIHsNCisJCXJldHVybiBudWxsOw0KKwl9DQorDQorCS8qKg0KKwkgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5JbnRlZ3JhdGlvbiBEZWNvcmF0b3I8L2VtPicuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOw0KKwkgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLg0KKwkgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5JbnRlZ3JhdGlvbiBEZWNvcmF0b3I8L2VtPicuDQorCSAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgVDEgY2FzZUludGVncmF0aW9uRGVjb3JhdG9yKEludGVncmF0aW9uRGVjb3JhdG9yIG9iamVjdCkgew0KKwkJcmV0dXJuIG51bGw7DQorCX0NCisNCisJLyoqDQorCSAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPlBvcHVsYXRpb24gTW9kZWwgTGFiZWwgVmFsdWU8L2VtPicuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOw0KKwkgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLg0KKwkgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5Qb3B1bGF0aW9uIE1vZGVsIExhYmVsIFZhbHVlPC9lbT4nLg0KKwkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIFQxIGNhc2VQb3B1bGF0aW9uTW9kZWxMYWJlbFZhbHVlKFBvcHVsYXRpb25Nb2RlbExhYmVsVmFsdWUgb2JqZWN0KSB7DQorCQlyZXR1cm4gbnVsbDsNCisJfQ0KKw0KKwkvKioNCisJICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+UG9wdWxhdGlvbiBNb2RlbCBMYWJlbCBWYWx1ZTwvZW0+Jy4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7DQorCSAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guDQorCSAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPlBvcHVsYXRpb24gTW9kZWwgTGFiZWwgVmFsdWU8L2VtPicuDQorCSAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgVDEgY2FzZVN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWxWYWx1ZShTdGFuZGFyZFBvcHVsYXRpb25Nb2RlbExhYmVsVmFsdWUgb2JqZWN0KSB7DQorCQlyZXR1cm4gbnVsbDsNCisJfQ0KKw0KKwkvKioNCisJICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+U3RvY2hhc3RpYyBTdGFuZGFyZCBQb3B1bGF0aW9uIE1vZGVsPC9lbT4nLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsNCisJICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guDQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4NCisJICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+U3RvY2hhc3RpYyBTdGFuZGFyZCBQb3B1bGF0aW9uIE1vZGVsPC9lbT4nLg0KKwkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIFQxIGNhc2VTdG9jaGFzdGljU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWwoU3RvY2hhc3RpY1N0YW5kYXJkUG9wdWxhdGlvbk1vZGVsIG9iamVjdCkgew0KKwkJcmV0dXJuIG51bGw7DQorCX0NCisNCisJLyoqDQorCSAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkRlbW9ncmFwaGljIFBvcHVsYXRpb24gTW9kZWw8L2VtPicuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOw0KKwkgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLg0KKwkgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5EZW1vZ3JhcGhpYyBQb3B1bGF0aW9uIE1vZGVsPC9lbT4nLg0KKwkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIFQxIGNhc2VEZW1vZ3JhcGhpY1BvcHVsYXRpb25Nb2RlbChEZW1vZ3JhcGhpY1BvcHVsYXRpb25Nb2RlbCBvYmplY3QpIHsNCisJCXJldHVybiBudWxsOw0KKwl9DQorDQorCS8qKg0KKwkgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5Qb3B1bGF0aW9uIEdyb3VwPC9lbT4nLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsNCisJICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guDQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4NCisJICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+UG9wdWxhdGlvbiBHcm91cDwvZW0+Jy4NCisJICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBUMSBjYXNlUG9wdWxhdGlvbkdyb3VwKFBvcHVsYXRpb25Hcm91cCBvYmplY3QpIHsNCisJCXJldHVybiBudWxsOw0KKwl9DQorDQorCS8qKg0KKwkgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5Qb3B1bGF0aW9uIEluaXRpYWxpemVyPC9lbT4nLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsNCisJICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guDQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4NCisJICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+UG9wdWxhdGlvbiBJbml0aWFsaXplcjwvZW0+Jy4NCisJICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBUMSBjYXNlUG9wdWxhdGlvbkluaXRpYWxpemVyKFBvcHVsYXRpb25Jbml0aWFsaXplciBvYmplY3QpIHsNCisJCXJldHVybiBudWxsOw0KKwl9DQorDQorCS8qKg0KKwkgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5Qb3B1bGF0aW9uIEluaXRpYWxpemVyPC9lbT4nLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsNCisJICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guDQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4NCisJICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+UG9wdWxhdGlvbiBJbml0aWFsaXplcjwvZW0+Jy4NCisJICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBUMSBjYXNlU3RhbmRhcmRQb3B1bGF0aW9uSW5pdGlhbGl6ZXIoU3RhbmRhcmRQb3B1bGF0aW9uSW5pdGlhbGl6ZXIgb2JqZWN0KSB7DQorCQlyZXR1cm4gbnVsbDsNCisJfQ0KKw0KKwkvKioNCisJICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+U2Vhc29uYWwgUG9wdWxhdGlvbiBNb2RlbDwvZW0+Jy4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7DQorCSAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guDQorCSAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPlNlYXNvbmFsIFBvcHVsYXRpb24gTW9kZWw8L2VtPicuDQorCSAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgVDEgY2FzZVNlYXNvbmFsUG9wdWxhdGlvbk1vZGVsKFNlYXNvbmFsUG9wdWxhdGlvbk1vZGVsIG9iamVjdCkgew0KKwkJcmV0dXJuIG51bGw7DQorCX0NCisNCisJLyoqDQorCSAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkVhcnRoIFNjaWVuY2UgUG9wdWxhdGlvbiBJbml0aWFsaXplcjwvZW0+Jy4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7DQorCSAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guDQorCSAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkVhcnRoIFNjaWVuY2UgUG9wdWxhdGlvbiBJbml0aWFsaXplcjwvZW0+Jy4NCisJICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBUMSBjYXNlRWFydGhTY2llbmNlUG9wdWxhdGlvbkluaXRpYWxpemVyKEVhcnRoU2NpZW5jZVBvcHVsYXRpb25Jbml0aWFsaXplciBvYmplY3QpIHsNCisJCXJldHVybiBudWxsOw0KKwl9DQorDQorCS8qKg0KKwkgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5ZZXRpIFBvcHVsYXRpb24gSW5pdGlhbGl6ZXI8L2VtPicuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOw0KKwkgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLg0KKwkgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5ZZXRpIFBvcHVsYXRpb24gSW5pdGlhbGl6ZXI8L2VtPicuDQorCSAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgVDEgY2FzZVlldGlQb3B1bGF0aW9uSW5pdGlhbGl6ZXIoWWV0aVBvcHVsYXRpb25Jbml0aWFsaXplciBvYmplY3QpIHsNCisJCXJldHVybiBudWxsOw0KKwl9DQorDQorCS8qKg0KKwkgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5Nb3NxdWl0byBQb3B1bGF0aW9uIE1vZGVsPC9lbT4nLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsNCisJICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guDQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4NCisJICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+TW9zcXVpdG8gUG9wdWxhdGlvbiBNb2RlbDwvZW0+Jy4NCisJICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBUMSBjYXNlTW9zcXVpdG9Qb3B1bGF0aW9uTW9kZWwoTW9zcXVpdG9Qb3B1bGF0aW9uTW9kZWwgb2JqZWN0KSB7DQorCQlyZXR1cm4gbnVsbDsNCisJfQ0KKw0KKwkvKioNCisJICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+QWdpbmcgUG9wdWxhdGlvbiBNb2RlbDwvZW0+Jy4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7DQorCSAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guDQorCSAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkFnaW5nIFBvcHVsYXRpb24gTW9kZWw8L2VtPicuDQorCSAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgVDEgY2FzZUFnaW5nUG9wdWxhdGlvbk1vZGVsKEFnaW5nUG9wdWxhdGlvbk1vZGVsIG9iamVjdCkgew0KKwkJcmV0dXJuIG51bGw7DQorCX0NCisNCisJLyoqDQorCSAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkFnZSBHcm91cDwvZW0+Jy4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7DQorCSAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guDQorCSAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkFnZSBHcm91cDwvZW0+Jy4NCisJICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBUMSBjYXNlQWdlR3JvdXAoQWdlR3JvdXAgb2JqZWN0KSB7DQorCQlyZXR1cm4gbnVsbDsNCisJfQ0KKw0KKwkvKioNCisJICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+Q29tcGFyYWJsZTwvZW0+Jy4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7DQorCSAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guDQorCSAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkNvbXBhcmFibGU8L2VtPicuDQorCSAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgPFQ+IFQxIGNhc2VDb21wYXJhYmxlKENvbXBhcmFibGU8VD4gb2JqZWN0KSB7DQorCQlyZXR1cm4gbnVsbDsNCisJfQ0KKw0KKwkvKioNCisJICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+SWRlbnRpZmlhYmxlPC9lbT4nLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsNCisJICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guDQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4NCisJICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+SWRlbnRpZmlhYmxlPC9lbT4nLg0KKwkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIFQxIGNhc2VJZGVudGlmaWFibGUoSWRlbnRpZmlhYmxlIG9iamVjdCkgew0KKwkJcmV0dXJuIG51bGw7DQorCX0NCisNCisJLyoqDQorCSAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkRlY29yYXRvcjwvZW0+Jy4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7DQorCSAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guDQorCSAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkRlY29yYXRvcjwvZW0+Jy4NCisJICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBUMSBjYXNlRGVjb3JhdG9yKERlY29yYXRvciBvYmplY3QpIHsNCisJCXJldHVybiBudWxsOw0KKwl9DQorDQorCS8qKg0KKwkgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5Ob2RlIERlY29yYXRvcjwvZW0+Jy4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7DQorCSAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guDQorCSAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPk5vZGUgRGVjb3JhdG9yPC9lbT4nLg0KKwkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIFQxIGNhc2VOb2RlRGVjb3JhdG9yKE5vZGVEZWNvcmF0b3Igb2JqZWN0KSB7DQorCQlyZXR1cm4gbnVsbDsNCisJfQ0KKw0KKwkvKioNCisJICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+TW9kaWZpYWJsZTwvZW0+Jy4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7DQorCSAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guDQorCSAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPk1vZGlmaWFibGU8L2VtPicuDQorCSAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgVDEgY2FzZU1vZGlmaWFibGUoTW9kaWZpYWJsZSBvYmplY3QpIHsNCisJCXJldHVybiBudWxsOw0KKwl9DQorDQorCS8qKg0KKwkgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5MYWJlbDwvZW0+Jy4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7DQorCSAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guDQorCSAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkxhYmVsPC9lbT4nLg0KKwkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIFQxIGNhc2VMYWJlbChMYWJlbCBvYmplY3QpIHsNCisJCXJldHVybiBudWxsOw0KKwl9DQorDQorCS8qKg0KKwkgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5EeW5hbWljIExhYmVsPC9lbT4nLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsNCisJICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guDQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4NCisJICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+RHluYW1pYyBMYWJlbDwvZW0+Jy4NCisJICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBUMSBjYXNlRHluYW1pY0xhYmVsKER5bmFtaWNMYWJlbCBvYmplY3QpIHsNCisJCXJldHVybiBudWxsOw0KKwl9DQorDQorCS8qKg0KKwkgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5Ob2RlIExhYmVsPC9lbT4nLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsNCisJICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guDQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4NCisJICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+Tm9kZSBMYWJlbDwvZW0+Jy4NCisJICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBUMSBjYXNlTm9kZUxhYmVsKE5vZGVMYWJlbCBvYmplY3QpIHsNCisJCXJldHVybiBudWxsOw0KKwl9DQorDQorCS8qKg0KKwkgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5EeW5hbWljIE5vZGUgTGFiZWw8L2VtPicuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOw0KKwkgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLg0KKwkgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5EeW5hbWljIE5vZGUgTGFiZWw8L2VtPicuDQorCSAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgVDEgY2FzZUR5bmFtaWNOb2RlTGFiZWwoRHluYW1pY05vZGVMYWJlbCBvYmplY3QpIHsNCisJCXJldHVybiBudWxsOw0KKwl9DQorDQorCS8qKg0KKwkgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5TYW5pdHkgQ2hlY2tlcjwvZW0+Jy4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7DQorCSAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guDQorCSAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPlNhbml0eSBDaGVja2VyPC9lbT4nLg0KKwkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIFQxIGNhc2VTYW5pdHlDaGVja2VyKFNhbml0eUNoZWNrZXIgb2JqZWN0KSB7DQorCQlyZXR1cm4gbnVsbDsNCisJfQ0KKw0KKwkvKioNCisJICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+TGFiZWwgVmFsdWU8L2VtPicuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOw0KKwkgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLg0KKwkgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5MYWJlbCBWYWx1ZTwvZW0+Jy4NCisJICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBUMSBjYXNlTGFiZWxWYWx1ZShMYWJlbFZhbHVlIG9iamVjdCkgew0KKwkJcmV0dXJuIG51bGw7DQorCX0NCisNCisJLyoqDQorCSAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkVPYmplY3Q8L2VtPicuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOw0KKwkgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaCwgYnV0IHRoaXMgaXMgdGhlIGxhc3QgY2FzZSBhbnl3YXkuDQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4NCisJICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+RU9iamVjdDwvZW0+Jy4NCisJICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBUMSBkZWZhdWx0Q2FzZShFT2JqZWN0IG9iamVjdCkgew0KKwkJcmV0dXJuIG51bGw7DQorCX0NCisNCit9IC8vU3RhbmRhcmRTd2l0Y2gNCmRpZmYgLS1naXQgYS9tb2RlbHMvcG9wdWxhdGlvbnMvb3JnLmVjbGlwc2Uuc3RlbS51aS5wb3B1bGF0aW9ubW9kZWxzLy5jbGFzc3BhdGggYi9tb2RlbHMvcG9wdWxhdGlvbnMvb3JnLmVjbGlwc2Uuc3RlbS51aS5wb3B1bGF0aW9ubW9kZWxzLy5jbGFzc3BhdGgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzA0ZTg2MQotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9wb3B1bGF0aW9ucy9vcmcuZWNsaXBzZS5zdGVtLnVpLnBvcHVsYXRpb25tb2RlbHMvLmNsYXNzcGF0aApAQCAtMCwwICsxLDcgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8Y2xhc3NwYXRoPgorCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJzcmMiIHBhdGg9InNyYyIvPgorCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJjb24iIHBhdGg9Im9yZy5lY2xpcHNlLmpkdC5sYXVuY2hpbmcuSlJFX0NPTlRBSU5FUi9vcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwuZGVidWcudWkubGF1bmNoZXIuU3RhbmRhcmRWTVR5cGUvSjJTRS0xLjUiLz4KKwk8Y2xhc3NwYXRoZW50cnkga2luZD0iY29uIiBwYXRoPSJvcmcuZWNsaXBzZS5wZGUuY29yZS5yZXF1aXJlZFBsdWdpbnMiLz4KKwk8Y2xhc3NwYXRoZW50cnkga2luZD0ib3V0cHV0IiBwYXRoPSJiaW4iLz4KKzwvY2xhc3NwYXRoPgpkaWZmIC0tZ2l0IGEvbW9kZWxzL3BvcHVsYXRpb25zL29yZy5lY2xpcHNlLnN0ZW0udWkucG9wdWxhdGlvbm1vZGVscy8ucHJvamVjdCBiL21vZGVscy9wb3B1bGF0aW9ucy9vcmcuZWNsaXBzZS5zdGVtLnVpLnBvcHVsYXRpb25tb2RlbHMvLnByb2plY3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjVkODhmNwotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9wb3B1bGF0aW9ucy9vcmcuZWNsaXBzZS5zdGVtLnVpLnBvcHVsYXRpb25tb2RlbHMvLnByb2plY3QKQEAgLTAsMCArMSwyOCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4NCis8cHJvamVjdERlc2NyaXB0aW9uPg0KKwk8bmFtZT5vcmcuZWNsaXBzZS5zdGVtLnVpLnBvcHVsYXRpb25tb2RlbHM8L25hbWU+DQorCTxjb21tZW50PjwvY29tbWVudD4NCisJPHByb2plY3RzPg0KKwk8L3Byb2plY3RzPg0KKwk8YnVpbGRTcGVjPg0KKwkJPGJ1aWxkQ29tbWFuZD4NCisJCQk8bmFtZT5vcmcuZWNsaXBzZS5qZHQuY29yZS5qYXZhYnVpbGRlcjwvbmFtZT4NCisJCQk8YXJndW1lbnRzPg0KKwkJCTwvYXJndW1lbnRzPg0KKwkJPC9idWlsZENvbW1hbmQ+DQorCQk8YnVpbGRDb21tYW5kPg0KKwkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5NYW5pZmVzdEJ1aWxkZXI8L25hbWU+DQorCQkJPGFyZ3VtZW50cz4NCisJCQk8L2FyZ3VtZW50cz4NCisJCTwvYnVpbGRDb21tYW5kPg0KKwkJPGJ1aWxkQ29tbWFuZD4NCisJCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuU2NoZW1hQnVpbGRlcjwvbmFtZT4NCisJCQk8YXJndW1lbnRzPg0KKwkJCTwvYXJndW1lbnRzPg0KKwkJPC9idWlsZENvbW1hbmQ+DQorCTwvYnVpbGRTcGVjPg0KKwk8bmF0dXJlcz4NCisJCTxuYXR1cmU+b3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YW5hdHVyZTwvbmF0dXJlPg0KKwkJPG5hdHVyZT5vcmcuZWNsaXBzZS5wZGUuUGx1Z2luTmF0dXJlPC9uYXR1cmU+DQorCTwvbmF0dXJlcz4NCis8L3Byb2plY3REZXNjcmlwdGlvbj4NCmRpZmYgLS1naXQgYS9tb2RlbHMvcG9wdWxhdGlvbnMvb3JnLmVjbGlwc2Uuc3RlbS51aS5wb3B1bGF0aW9ubW9kZWxzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcyBiL21vZGVscy9wb3B1bGF0aW9ucy9vcmcuZWNsaXBzZS5zdGVtLnVpLnBvcHVsYXRpb25tb2RlbHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJhZDU4ZjcKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvcG9wdWxhdGlvbnMvb3JnLmVjbGlwc2Uuc3RlbS51aS5wb3B1bGF0aW9ubW9kZWxzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcwpAQCAtMCwwICsxLDE1IEBACisjVHVlIFNlcCAwMSAxNjo1NToxNSBFRFQgMjAwOQorZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmRvYy5jb21tZW50LnN1cHBvcnQ9ZGlzYWJsZWQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW52YWxpZEphdmFkb2M9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbnZhbGlkSmF2YWRvY1RhZ3M9ZW5hYmxlZAorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbnZhbGlkSmF2YWRvY1RhZ3NEZXByZWNhdGVkUmVmPWVuYWJsZWQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW52YWxpZEphdmFkb2NUYWdzTm90VmlzaWJsZVJlZj1lbmFibGVkCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmludmFsaWRKYXZhZG9jVGFnc1Zpc2liaWxpdHk9cHVibGljCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdKYXZhZG9jQ29tbWVudHM9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nSmF2YWRvY0NvbW1lbnRzT3ZlcnJpZGluZz1lbmFibGVkCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdKYXZhZG9jQ29tbWVudHNWaXNpYmlsaXR5PXB1YmxpYworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nSmF2YWRvY1RhZ0Rlc2NyaXB0aW9uPXJldHVybl90YWcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0phdmFkb2NUYWdzPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0phdmFkb2NUYWdzT3ZlcnJpZGluZz1lbmFibGVkCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdKYXZhZG9jVGFnc1Zpc2liaWxpdHk9cHVibGljCmRpZmYgLS1naXQgYS9tb2RlbHMvcG9wdWxhdGlvbnMvb3JnLmVjbGlwc2Uuc3RlbS51aS5wb3B1bGF0aW9ubW9kZWxzL01FVEEtSU5GL01BTklGRVNULk1GIGIvbW9kZWxzL3BvcHVsYXRpb25zL29yZy5lY2xpcHNlLnN0ZW0udWkucG9wdWxhdGlvbm1vZGVscy9NRVRBLUlORi9NQU5JRkVTVC5NRgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZDdkZWJiCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL3BvcHVsYXRpb25zL29yZy5lY2xpcHNlLnN0ZW0udWkucG9wdWxhdGlvbm1vZGVscy9NRVRBLUlORi9NQU5JRkVTVC5NRgpAQCAtMCwwICsxLDIzIEBACitNYW5pZmVzdC1WZXJzaW9uOiAxLjANCitCdW5kbGUtTWFuaWZlc3RWZXJzaW9uOiAyDQorQnVuZGxlLU5hbWU6ICVwbHVnaW5OYW1lDQorQnVuZGxlLVN5bWJvbGljTmFtZTogb3JnLmVjbGlwc2Uuc3RlbS51aS5wb3B1bGF0aW9ubW9kZWxzO3NpbmdsZXRvbjo9dHJ1ZQ0KK0J1bmRsZS1WZXJzaW9uOiAxLjIuMQ0KK0J1bmRsZS1DbGFzc1BhdGg6IC4NCitCdW5kbGUtQWN0aXZhdG9yOiBvcmcuZWNsaXBzZS5zdGVtLnVpLnBvcHVsYXRpb25tb2RlbHMuQWN0aXZhdG9yDQorQnVuZGxlLVZlbmRvcjogJXByb3ZpZGVyTmFtZQ0KK0J1bmRsZS1Mb2NhbGl6YXRpb246IHBsdWdpbg0KK0J1bmRsZS1SZXF1aXJlZEV4ZWN1dGlvbkVudmlyb25tZW50OiBKMlNFLTEuNQ0KK0V4cG9ydC1QYWNrYWdlOiBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQucHJlc2VudGF0aW9uDQorUmVxdWlyZS1CdW5kbGU6IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZSwNCisgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXM7dmlzaWJpbGl0eTo9cmVleHBvcnQsDQorIG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVsczt2aXNpYmlsaXR5Oj1yZWV4cG9ydCwNCisgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnhtaTt2aXNpYmlsaXR5Oj1yZWV4cG9ydCwNCisgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWk7dmlzaWJpbGl0eTo9cmVleHBvcnQsDQorIG9yZy5lY2xpcHNlLnVpLmlkZTt2aXNpYmlsaXR5Oj1yZWV4cG9ydCwNCisgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlO3Zpc2liaWxpdHk6PXJlZXhwb3J0LA0KKyBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuZWRpdDt2aXNpYmlsaXR5Oj1yZWV4cG9ydCwNCisgb3JnLmVjbGlwc2Uuc3RlbS51aSwNCisgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucywNCisgb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeQ0KK0J1bmRsZS1BY3RpdmF0aW9uUG9saWN5OiBsYXp5DQpkaWZmIC0tZ2l0IGEvbW9kZWxzL3BvcHVsYXRpb25zL29yZy5lY2xpcHNlLnN0ZW0udWkucG9wdWxhdGlvbm1vZGVscy9idWlsZC5wcm9wZXJ0aWVzIGIvbW9kZWxzL3BvcHVsYXRpb25zL29yZy5lY2xpcHNlLnN0ZW0udWkucG9wdWxhdGlvbm1vZGVscy9idWlsZC5wcm9wZXJ0aWVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVlNjAwYmYKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvcG9wdWxhdGlvbnMvb3JnLmVjbGlwc2Uuc3RlbS51aS5wb3B1bGF0aW9ubW9kZWxzL2J1aWxkLnByb3BlcnRpZXMKQEAgLTAsMCArMSwxOCBAQAorDQorIyA8Y29weXJpZ2h0Pg0KKyMgPC9jb3B5cmlnaHQ+DQorIw0KKyMgJElkJA0KKw0KK2Jpbi5pbmNsdWRlcyA9IC4sXA0KKyAgICAgICAgICAgICAgIGljb25zLyxcDQorICAgICAgICAgICAgICAgTUVUQS1JTkYvLFwNCisgICAgICAgICAgICAgICBwbHVnaW4ueG1sLFwNCisgICAgICAgICAgICAgICBwbHVnaW4ucHJvcGVydGllcyxcDQorICAgICAgICAgICAgICAgYmluLyxcDQorICAgICAgICAgICAgICAgcGx1Z2luX2RlLnByb3BlcnRpZXMsXA0KKyAgICAgICAgICAgICAgIHBsdWdpbl9rci5wcm9wZXJ0aWVzLFwNCisgICAgICAgICAgICAgICBwbHVnaW5femgucHJvcGVydGllcw0KK2phcnMuY29tcGlsZS5vcmRlciA9IC4NCitzb3VyY2UuLiA9IHNyYy8NCitvdXRwdXQuLiA9IGJpbi8NCmRpZmYgLS1naXQgYS9tb2RlbHMvcG9wdWxhdGlvbnMvb3JnLmVjbGlwc2Uuc3RlbS51aS5wb3B1bGF0aW9ubW9kZWxzL2ljb25zL2Z1bGwvY3VzdG9tMTYvcG9wdWxhdGlvbmluaXRpYWxpemVyLmdpZiBiL21vZGVscy9wb3B1bGF0aW9ucy9vcmcuZWNsaXBzZS5zdGVtLnVpLnBvcHVsYXRpb25tb2RlbHMvaWNvbnMvZnVsbC9jdXN0b20xNi9wb3B1bGF0aW9uaW5pdGlhbGl6ZXIuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjM5YmY4YzEKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvcG9wdWxhdGlvbnMvb3JnLmVjbGlwc2Uuc3RlbS51aS5wb3B1bGF0aW9ubW9kZWxzL2ljb25zL2Z1bGwvY3VzdG9tMTYvcG9wdWxhdGlvbmluaXRpYWxpemVyLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9tb2RlbHMvcG9wdWxhdGlvbnMvb3JnLmVjbGlwc2Uuc3RlbS51aS5wb3B1bGF0aW9ubW9kZWxzL2ljb25zL2Z1bGwvY3VzdG9tMTYvcG9wdWxhdGlvbm1vZGVsLmdpZiBiL21vZGVscy9wb3B1bGF0aW9ucy9vcmcuZWNsaXBzZS5zdGVtLnVpLnBvcHVsYXRpb25tb2RlbHMvaWNvbnMvZnVsbC9jdXN0b20xNi9wb3B1bGF0aW9ubW9kZWwuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM0NmY5MzIKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvcG9wdWxhdGlvbnMvb3JnLmVjbGlwc2Uuc3RlbS51aS5wb3B1bGF0aW9ubW9kZWxzL2ljb25zL2Z1bGwvY3VzdG9tMTYvcG9wdWxhdGlvbm1vZGVsLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9tb2RlbHMvcG9wdWxhdGlvbnMvb3JnLmVjbGlwc2Uuc3RlbS51aS5wb3B1bGF0aW9ubW9kZWxzL2ljb25zL2Z1bGwvY3VzdG9tMTYvcG9wdWxhdGlvbm1vZGVsLnBzZCBiL21vZGVscy9wb3B1bGF0aW9ucy9vcmcuZWNsaXBzZS5zdGVtLnVpLnBvcHVsYXRpb25tb2RlbHMvaWNvbnMvZnVsbC9jdXN0b20xNi9wb3B1bGF0aW9ubW9kZWwucHNkCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg3ZmNjZjAKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvcG9wdWxhdGlvbnMvb3JnLmVjbGlwc2Uuc3RlbS51aS5wb3B1bGF0aW9ubW9kZWxzL2ljb25zL2Z1bGwvY3VzdG9tMTYvcG9wdWxhdGlvbm1vZGVsLnBzZApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9tb2RlbHMvcG9wdWxhdGlvbnMvb3JnLmVjbGlwc2Uuc3RlbS51aS5wb3B1bGF0aW9ubW9kZWxzL2ljb25zL2Z1bGwvb2JqMTYvTGFiZWxzTW9kZWxGaWxlLmdpZiBiL21vZGVscy9wb3B1bGF0aW9ucy9vcmcuZWNsaXBzZS5zdGVtLnVpLnBvcHVsYXRpb25tb2RlbHMvaWNvbnMvZnVsbC9vYmoxNi9MYWJlbHNNb2RlbEZpbGUuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIyNTE3OTIKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvcG9wdWxhdGlvbnMvb3JnLmVjbGlwc2Uuc3RlbS51aS5wb3B1bGF0aW9ubW9kZWxzL2ljb25zL2Z1bGwvb2JqMTYvTGFiZWxzTW9kZWxGaWxlLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9tb2RlbHMvcG9wdWxhdGlvbnMvb3JnLmVjbGlwc2Uuc3RlbS51aS5wb3B1bGF0aW9ubW9kZWxzL2ljb25zL2Z1bGwvb2JqMTYvU3RhbmRhcmRNb2RlbEZpbGUuZ2lmIGIvbW9kZWxzL3BvcHVsYXRpb25zL29yZy5lY2xpcHNlLnN0ZW0udWkucG9wdWxhdGlvbm1vZGVscy9pY29ucy9mdWxsL29iajE2L1N0YW5kYXJkTW9kZWxGaWxlLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYWUyZjhjCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL3BvcHVsYXRpb25zL29yZy5lY2xpcHNlLnN0ZW0udWkucG9wdWxhdGlvbm1vZGVscy9pY29ucy9mdWxsL29iajE2L1N0YW5kYXJkTW9kZWxGaWxlLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9tb2RlbHMvcG9wdWxhdGlvbnMvb3JnLmVjbGlwc2Uuc3RlbS51aS5wb3B1bGF0aW9ubW9kZWxzL2ljb25zL2Z1bGwvd2l6YmFuL05ld0xhYmVscy5naWYgYi9tb2RlbHMvcG9wdWxhdGlvbnMvb3JnLmVjbGlwc2Uuc3RlbS51aS5wb3B1bGF0aW9ubW9kZWxzL2ljb25zL2Z1bGwvd2l6YmFuL05ld0xhYmVscy5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTdmZDFlMQotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9wb3B1bGF0aW9ucy9vcmcuZWNsaXBzZS5zdGVtLnVpLnBvcHVsYXRpb25tb2RlbHMvaWNvbnMvZnVsbC93aXpiYW4vTmV3TGFiZWxzLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9tb2RlbHMvcG9wdWxhdGlvbnMvb3JnLmVjbGlwc2Uuc3RlbS51aS5wb3B1bGF0aW9ubW9kZWxzL2ljb25zL2Z1bGwvd2l6YmFuL05ld1N0YW5kYXJkLmdpZiBiL21vZGVscy9wb3B1bGF0aW9ucy9vcmcuZWNsaXBzZS5zdGVtLnVpLnBvcHVsYXRpb25tb2RlbHMvaWNvbnMvZnVsbC93aXpiYW4vTmV3U3RhbmRhcmQuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI1ZjMxMmQKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvcG9wdWxhdGlvbnMvb3JnLmVjbGlwc2Uuc3RlbS51aS5wb3B1bGF0aW9ubW9kZWxzL2ljb25zL2Z1bGwvd2l6YmFuL05ld1N0YW5kYXJkLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9tb2RlbHMvcG9wdWxhdGlvbnMvb3JnLmVjbGlwc2Uuc3RlbS51aS5wb3B1bGF0aW9ubW9kZWxzL3BsdWdpbi5wcm9wZXJ0aWVzIGIvbW9kZWxzL3BvcHVsYXRpb25zL29yZy5lY2xpcHNlLnN0ZW0udWkucG9wdWxhdGlvbm1vZGVscy9wbHVnaW4ucHJvcGVydGllcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYzlhZDEwCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL3BvcHVsYXRpb25zL29yZy5lY2xpcHNlLnN0ZW0udWkucG9wdWxhdGlvbm1vZGVscy9wbHVnaW4ucHJvcGVydGllcwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9tb2RlbHMvcG9wdWxhdGlvbnMvb3JnLmVjbGlwc2Uuc3RlbS51aS5wb3B1bGF0aW9ubW9kZWxzL3BsdWdpbi54bWwgYi9tb2RlbHMvcG9wdWxhdGlvbnMvb3JnLmVjbGlwc2Uuc3RlbS51aS5wb3B1bGF0aW9ubW9kZWxzL3BsdWdpbi54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWM2YTkwNgotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9wb3B1bGF0aW9ucy9vcmcuZWNsaXBzZS5zdGVtLnVpLnBvcHVsYXRpb25tb2RlbHMvcGx1Z2luLnhtbApAQCAtMCwwICsxLDE0OCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4NCis8P2VjbGlwc2UgdmVyc2lvbj0iMy4wIj8+DQorDQorPCEtLQ0KKyA8Y29weXJpZ2h0Pg0KKyA8L2NvcHlyaWdodD4NCisNCisgJElkJA0KKy0tPg0KKw0KKzxwbHVnaW4+DQorDQorICAgPGV4dGVuc2lvbiBwb2ludD0ib3JnLmVjbGlwc2UudWkubmV3V2l6YXJkcyI+DQorICAgICAgPGNhdGVnb3J5DQorICAgICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLmVtZi5lY29yZS5XaXphcmQuY2F0ZWdvcnkuSUQiDQorICAgICAgICAgICAgbmFtZT0iJV9VSV9XaXphcmRfY2F0ZWdvcnkiLz4NCisgICAgICA8d2l6YXJkDQorICAgICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5wcmVzZW50YXRpb24uU3RhbmRhcmRNb2RlbFdpemFyZElEIg0KKyAgICAgICAgICAgIG5hbWU9IiVfVUlfU3RhbmRhcmRNb2RlbFdpemFyZF9sYWJlbCINCisgICAgICAgICAgICBjbGFzcz0ib3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLnByZXNlbnRhdGlvbi5TdGFuZGFyZE1vZGVsV2l6YXJkIg0KKyAgICAgICAgICAgIGNhdGVnb3J5PSJvcmcuZWNsaXBzZS5lbWYuZWNvcmUuV2l6YXJkLmNhdGVnb3J5LklEIg0KKyAgICAgICAgICAgIGljb249Imljb25zL2Z1bGwvY3VzdG9tMTYvcG9wdWxhdGlvbm1vZGVsLmdpZiI+DQorICAgICAgICAgPGRlc2NyaXB0aW9uPiVfVUlfU3RhbmRhcmRNb2RlbFdpemFyZF9kZXNjcmlwdGlvbjwvZGVzY3JpcHRpb24+DQorICAgICAgICAgPHNlbGVjdGlvbiBjbGFzcz0ib3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVJlc291cmNlIi8+DQorICAgICAgPC93aXphcmQ+DQorICAgIDx3aXphcmQNCisgICAgICAgICAgY2F0ZWdvcnk9Im9yZy5lY2xpcHNlLnN0ZW0udWkud2l6YXJkcy5zdGVtY2F0ZWdvcnkiDQorICAgICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS5zdGVtLnVpLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQud2l6YXJkcy5OZXdQb3B1bGF0aW9uTW9kZWxXaXphcmQiDQorICAgICAgICAgIGhhc1BhZ2VzPSJ0cnVlIg0KKyAgICAgICAgICBpY29uPSJpY29ucy9mdWxsL2N1c3RvbTE2L3BvcHVsYXRpb25tb2RlbC5naWYiDQorICAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQucHJlc2VudGF0aW9uLlN0YW5kYXJkTW9kZWxXaXphcmRJRCINCisgICAgICAgICAgbmFtZT0iJV9VSV9OZXdfUG9wdWxhdGlvbl9Nb2RlbCIvPg0KKyAgICA8d2l6YXJkDQorICAgICAgICAgIGNhdGVnb3J5PSJvcmcuZWNsaXBzZS5zdGVtLnVpLndpemFyZHMuc3RlbWNhdGVnb3J5Ig0KKyAgICAgICAgICBjbGFzcz0ib3JnLmVjbGlwc2Uuc3RlbS51aS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLndpemFyZHMuTmV3UG9wdWxhdGlvbkluaXRpYWxpemVyV2l6YXJkIg0KKyAgICAgICAgICBoYXNQYWdlcz0idHJ1ZSINCisgICAgICAgICAgaWNvbj0iaWNvbnMvZnVsbC9jdXN0b20xNi9wb3B1bGF0aW9uaW5pdGlhbGl6ZXIuZ2lmIg0KKyAgICAgICAgICBpZD0ib3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLnByZXNlbnRhdGlvbi5TdGFuZGFyZE1vZGVsV2l6YXJkSUQiDQorICAgICAgICAgIG5hbWU9IiVfVUlfTmV3X1BvcHVsYXRpb25fSW5pdGlhbGl6ZXIiLz4gICAgICANCisgICA8L2V4dGVuc2lvbj4NCisNCisJPGV4dGVuc2lvbg0KKyAgICAgICAgcG9pbnQ9Im9yZy5lY2xpcHNlLnVpLnZpZXdzIj4NCisgICAgIDx2aWV3DQorICAgICAgICAgICBjYXRlZ29yeT0ib3JnLmVjbGlwc2Uuc3RlbS51aS52aWV3cyINCisgICAgICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS5zdGVtLnVpLnZpZXdzLnBvcHVsYXRpb25tb2RlbC5Qb3B1bGF0aW9uTW9kZWxWaWV3Ig0KKyAgICAgICAgICAgaWNvbj0iaWNvbnMvZnVsbC9jdXN0b20xNi9wb3B1bGF0aW9ubW9kZWwuZ2lmIg0KKyAgICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLnN0ZW0udWkudmlld3MucG9wdWxhdGlvbm1vZGVscyINCisgICAgICAgICAgIG5hbWU9IiVfVUlfUFZpZXdfTmFtZSIvPg0KKyAgICAgPHZpZXcNCisgICAgICAgICAgIGNhdGVnb3J5PSJvcmcuZWNsaXBzZS5zdGVtLnVpLnZpZXdzIg0KKyAgICAgICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLnN0ZW0udWkudmlld3MucG9wdWxhdGlvbm1vZGVsLlBvcHVsYXRpb25Jbml0aWFsaXplclZpZXciDQorICAgICAgICAgICBpY29uPSJpY29ucy9mdWxsL2N1c3RvbTE2L3BvcHVsYXRpb25pbml0aWFsaXplci5naWYiDQorICAgICAgICAgICBpZD0ib3JnLmVjbGlwc2Uuc3RlbS51aS52aWV3cy5wb3B1bGF0aW9uaW5pdGlhbGl6ZXIiDQorICAgICAgICAgICBuYW1lPSIlX1VJX1BJVmlld19OYW1lIi8+ICAgICAgDQorICA8L2V4dGVuc2lvbj4NCisgIA0KKyAgIDxleHRlbnNpb24gcG9pbnQ9Im9yZy5lY2xpcHNlLnVpLmVkaXRvcnMiPg0KKyAgICAgIDxlZGl0b3INCisgICAgICAgICAgICBpZD0ib3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLnByZXNlbnRhdGlvbi5TdGFuZGFyZEVkaXRvcklEIg0KKyAgICAgICAgICAgIG5hbWU9IiVfVUlfU3RhbmRhcmRFZGl0b3JfbGFiZWwiDQorICAgICAgICAgICAgaWNvbj0iaWNvbnMvZnVsbC9jdXN0b20xNi9wb3B1bGF0aW9ubW9kZWwuZ2lmIg0KKyAgICAgICAgICAgIGV4dGVuc2lvbnM9InN0YW5kYXJkIg0KKyAgICAgICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQucHJlc2VudGF0aW9uLlN0YW5kYXJkRWRpdG9yIg0KKyAgICAgICAgICAgIGNvbnRyaWJ1dG9yQ2xhc3M9Im9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5wcmVzZW50YXRpb24uU3RhbmRhcmRBY3Rpb25CYXJDb250cmlidXRvciI+DQorICAgICAgPC9lZGl0b3I+DQorICAgPC9leHRlbnNpb24+DQorDQorCTxleHRlbnNpb24NCisgICAgICAgIHBvaW50PSJvcmcuZWNsaXBzZS51aS5tZW51cyI+DQorICAgICA8bWVudUNvbnRyaWJ1dGlvbg0KKyAgICAgICAgICAgbG9jYXRpb25VUkk9Im1lbnU6b3JnLmVjbGlwc2Uuc3RlbS51aS5tZW51Lm5ld3dpemFyZHM/YWZ0ZXI9YWRkaXRpb25zIj4NCisgICAgICAgIDxjb21tYW5kDQorICAgICAgICAgICAgICBjb21tYW5kSWQ9Im9yZy5lY2xpcHNlLnN0ZW0udWkucG9wdWxhdGlvbm1vZGVscy5jb21tYW5kLndpei5wb3B1bGF0aW9ubW9kZWwiDQorICAgICAgICAgICAgICBpY29uPSJpY29ucy9mdWxsL2N1c3RvbTE2L3BvcHVsYXRpb25tb2RlbC5naWYiDQorICAgICAgICAgICAgICBsYWJlbD0iJV9VSV9Qb3B1bGF0aW9uTW9kZWxXaXphcmRfbGFiZWwiDQorICAgICAgICAgICAgICBzdHlsZT0icHVzaCINCisgICAgICAgICAgICAgIHRvb2x0aXA9IiVfVUlfUG9wdWxhdGlvbk1vZGVsX2Rlc2NyaXB0aW9uIj4NCisgICAgICAgIDwvY29tbWFuZD4NCisgICAgICAgICA8Y29tbWFuZA0KKyAgICAgICAgICAgICAgY29tbWFuZElkPSJvcmcuZWNsaXBzZS5zdGVtLnVpLnBvcHVsYXRpb25tb2RlbHMuY29tbWFuZC53aXoucG9wdWxhdGlvbmluaXRpYWxpemVyIg0KKyAgICAgICAgICAgICAgaWNvbj0iaWNvbnMvZnVsbC9jdXN0b20xNi9wb3B1bGF0aW9uaW5pdGlhbGl6ZXIuZ2lmIg0KKyAgICAgICAgICAgICAgbGFiZWw9IiVfVUlfUG9wdWxhdGlvbkluaXRpYWxpemVyV2l6YXJkX2xhYmVsIg0KKyAgICAgICAgICAgICAgc3R5bGU9InB1c2giDQorICAgICAgICAgICAgICB0b29sdGlwPSIlX1VJX1BvcHVsYXRpb25Jbml0aWFsaXplcl9kZXNjcmlwdGlvbiI+DQorICAgICAgICA8L2NvbW1hbmQ+DQorICAgICA8L21lbnVDb250cmlidXRpb24+DQorICAgICA8bWVudUNvbnRyaWJ1dGlvbg0KKyAgICAgICAgICAgbG9jYXRpb25VUkk9InRvb2xiYXI6b3JnLmVjbGlwc2Uuc3RlbS51aS50b29sYmFyLm5ld3dpemFyZHM/YWZ0ZXI9YWRkaXRpb25zIj4NCisgICAgICAgIDxjb21tYW5kDQorICAgICAgICAgICAgICBjb21tYW5kSWQ9Im9yZy5lY2xpcHNlLnN0ZW0udWkucG9wdWxhdGlvbm1vZGVscy5jb21tYW5kLndpei5wb3B1bGF0aW9ubW9kZWwiDQorICAgICAgICAgICAgICBpY29uPSJpY29ucy9mdWxsL2N1c3RvbTE2L3BvcHVsYXRpb25tb2RlbC5naWYiDQorICAgICAgICAgICAgICBsYWJlbD0iJV9VSV9Qb3B1bGF0aW9uTW9kZWxXaXphcmRfbGFiZWwiDQorICAgICAgICAgICAgICBzdHlsZT0icHVzaCINCisgICAgICAgICAgICAgIHRvb2x0aXA9IiVfVUlfUG9wdWxhdGlvbk1vZGVsX2Rlc2NyaXB0aW9uIj4NCisgICAgICAgIDwvY29tbWFuZD4NCisgICAgICAgIDxjb21tYW5kDQorICAgICAgICAgICAgICBjb21tYW5kSWQ9Im9yZy5lY2xpcHNlLnN0ZW0udWkucG9wdWxhdGlvbm1vZGVscy5jb21tYW5kLndpei5wb3B1bGF0aW9uaW5pdGlhbGl6ZXIiDQorICAgICAgICAgICAgICBpY29uPSJpY29ucy9mdWxsL2N1c3RvbTE2L3BvcHVsYXRpb25pbml0aWFsaXplci5naWYiDQorICAgICAgICAgICAgICBsYWJlbD0iJV9VSV9Qb3B1bGF0aW9uSW5pdGlhbGl6ZXJXaXphcmRfbGFiZWwiDQorICAgICAgICAgICAgICBzdHlsZT0icHVzaCINCisgICAgICAgICAgICAgIHRvb2x0aXA9IiVfVUlfUG9wdWxhdGlvbkluaXRpYWxpemVyX2Rlc2NyaXB0aW9uIj4NCisgICAgICAgIDwvY29tbWFuZD4NCisgICAgIDwvbWVudUNvbnRyaWJ1dGlvbj4NCisgIDwvZXh0ZW5zaW9uPg0KKyAgDQorICA8ZXh0ZW5zaW9uDQorICAgICAgICBwb2ludD0ib3JnLmVjbGlwc2UudWkuY29tbWFuZHMiPg0KKyAgICAgPGNvbW1hbmQNCisgICAgICAgICAgIGRlZmF1bHRIYW5kbGVyPSJvcmcuZWNsaXBzZS5zdGVtLnVpLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQud2l6YXJkcy5OZXdQb3B1bGF0aW9uTW9kZWxXaXphcmQkTmV3UG9wdWxhdGlvbk1vZGVsV2l6YXJkQ29tbWFuZEhhbmRsZXIiDQorICAgICAgICAgICBkZXNjcmlwdGlvbj0iJV9VSV9Qb3B1bGF0aW9uTW9kZWxfZGVzY3JpcHRpb24iDQorICAgICAgICAgICBpZD0ib3JnLmVjbGlwc2Uuc3RlbS51aS5wb3B1bGF0aW9ubW9kZWxzLmNvbW1hbmQud2l6LnBvcHVsYXRpb25tb2RlbCINCisgICAgICAgICAgIG5hbWU9IiVfVUlfUG9wdWxhdGlvbk1vZGVsV2l6YXJkX2xhYmVsIj4NCisgICAgIDwvY29tbWFuZD4NCisgICAgICA8Y29tbWFuZA0KKyAgICAgICAgICAgZGVmYXVsdEhhbmRsZXI9Im9yZy5lY2xpcHNlLnN0ZW0udWkucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC53aXphcmRzLk5ld1BvcHVsYXRpb25Jbml0aWFsaXplcldpemFyZCROZXdQb3B1bGF0aW9uSW5pdGlhbGl6ZXJXaXphcmRDb21tYW5kSGFuZGxlciINCisgICAgICAgICAgIGRlc2NyaXB0aW9uPSIlX1VJX1BvcHVsYXRpb25Jbml0aWFsaXplcl9kZXNjcmlwdGlvbiINCisgICAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5zdGVtLnVpLnBvcHVsYXRpb25tb2RlbHMuY29tbWFuZC53aXoucG9wdWxhdGlvbmluaXRpYWxpemVyIg0KKyAgICAgICAgICAgbmFtZT0iJV9VSV9Qb3B1bGF0aW9uSW5pdGlhbGl6ZXJXaXphcmRfbGFiZWwiPg0KKyAgICAgPC9jb21tYW5kPg0KKyAgPC9leHRlbnNpb24+DQorICANCisgIDxleHRlbnNpb24NCisgICAgICAgICBwb2ludD0ib3JnLmVjbGlwc2UudWkucHJlZmVyZW5jZVBhZ2VzIj4NCisgICAgICA8cGFnZQ0KKyAgICAgIAkgICAgY2F0ZWdvcnk9Im9yZy5lY2xpcHNlLnN0ZW0udWkucHJlZmVyZW5jZXMuVmlzdWFsaXphdGlvblByZWZlcmVuY2VQYWdlIg0KKyAgICAgICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS5zdGVtLnVpLnBvcHVsYXRpb25tb2RlbHMucHJlZmVyZW5jZXMuUG9wdWxhdGlvblByZWZlcmVuY2VQYWdlIg0KKyAgICAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5zdGVtLnVpLnByZWZlcmVuY2VzLlBvcHVsYXRpb25QcmVmZXJlbmNlUGFnZSINCisgICAgICAgICAgICBuYW1lPSIlX1VJX1BvcHVsYXRpb25QUGFnZSIvPg0KKyAgIDwvZXh0ZW5zaW9uPg0KKyAgIDxleHRlbnNpb24NCisgICAgICAgICBwb2ludD0ib3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLnByZWZlcmVuY2VzIj4NCisgICAgICA8aW5pdGlhbGl6ZXIgY2xhc3M9Im9yZy5lY2xpcHNlLnN0ZW0udWkucG9wdWxhdGlvbm1vZGVscy5wcmVmZXJlbmNlcy5QcmVmZXJlbmNlSW5pdGlhbGl6ZXIiLz4NCisgICA8L2V4dGVuc2lvbj4NCisgICANCisgICA8ZXh0ZW5zaW9uDQorICAgICAgICBwb2ludD0ib3JnLmVjbGlwc2UudWkuc3RhcnR1cCI+DQorICAgICA8c3RhcnR1cA0KKyAgICAgICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLnN0ZW0udWkucG9wdWxhdGlvbm1vZGVscy5hZGFwdGVycy5TdGFuZGFyZFJlbGF0aXZlVmFsdWVQcm92aWRlckFkYXB0ZXJGYWN0b3J5Ij48L3N0YXJ0dXA+DQorICA8L2V4dGVuc2lvbj4NCisgIA0KKyAgPGV4dGVuc2lvbg0KKyAgICAgICAgcG9pbnQ9Im9yZy5lY2xpcHNlLnVpLnN0YXJ0dXAiPg0KKyAgICAgPHN0YXJ0dXANCisgICAgICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS5zdGVtLnVpLnBvcHVsYXRpb25tb2RlbHMuYWRhcHRlcnMuUG9wdWxhdGlvbk1vZGVsTmV3TW9kaWZpZXJQYWdlQWRhcHRlckZhY3RvcnkiPjwvc3RhcnR1cD4NCisgIDwvZXh0ZW5zaW9uPg0KKyAgDQorPC9wbHVnaW4+DQpkaWZmIC0tZ2l0IGEvbW9kZWxzL3BvcHVsYXRpb25zL29yZy5lY2xpcHNlLnN0ZW0udWkucG9wdWxhdGlvbm1vZGVscy9wbHVnaW5fZGUucHJvcGVydGllcyBiL21vZGVscy9wb3B1bGF0aW9ucy9vcmcuZWNsaXBzZS5zdGVtLnVpLnBvcHVsYXRpb25tb2RlbHMvcGx1Z2luX2RlLnByb3BlcnRpZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWUwOTQ1YwotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9wb3B1bGF0aW9ucy9vcmcuZWNsaXBzZS5zdGVtLnVpLnBvcHVsYXRpb25tb2RlbHMvcGx1Z2luX2RlLnByb3BlcnRpZXMKQEAgLTAsMCArMSw5OCBAQAorCisjLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyMgKiBDb3B5cmlnaHQgKGMpIDIwMDkgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisjICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworIyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorIyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisjICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyMgKgorIyAqIENvbnRyaWJ1dG9yczoKKyMgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisjICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyMgVG8gY29kZSBkZXZlbG9wZXI6CisjICAgRG8gTk9UIGNoYW5nZSB0aGUgcHJvcGVydGllcyBiZXR3ZWVuIHRoaXMgbGluZSBhbmQgdGhlCisjICAgIiUlJSBFTkQgT0YgVFJBTlNMQVRFRCBQUk9QRVJUSUVTICUlJSIgbGluZS4KKyMgICBNYWtlIGEgbmV3IHByb3BlcnR5IG5hbWUsIGFwcGVuZCB0byB0aGUgZW5kIG9mIHRoZSBmaWxlIGFuZCBjaGFuZ2UKKyMgICB0aGUgY29kZSB0byB1c2UgdGhlIG5ldyBwcm9wZXJ0eS4KKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorIyAlJSUgRU5EIE9GIFRSQU5TTEFURUQgUFJPUEVSVElFUyAlJSUKKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworCitwbHVnaW5OYW1lPVNURU0gQmV2XHUwMGY2bGtlcnVuZ3Ntb2RlbGwtQmVudXR6ZXJvYmVyZmxcdTAwZTRjaGUKK3Byb3ZpZGVyTmFtZT1FY2xpcHNlLm9yZworCitfVUlfU3RhbmRhcmRFZGl0b3JfbWVudT0mU3RhbmRhcmQgRWRpdG9yCisKK19VSV9DcmVhdGVDaGlsZF9tZW51X2l0ZW09Jk5ldyBDaGlsZAorX1VJX0NyZWF0ZVNpYmxpbmdfbWVudV9pdGVtPU4mZXVlcyBHZXNjaHdpc3RlcnRlaWwKKworX1VJX1Nob3dQcm9wZXJ0aWVzVmlld19tZW51X2l0ZW09U2hvdyAmIFByb3BlcnRpZXMgVmlldworX1VJX1JlZnJlc2hWaWV3ZXJfbWVudV9pdGVtPSZSZWZyZXNoCisKK19VSV9TZWxlY3Rpb25QYWdlX2xhYmVsPUF1c3dhaGwKK19VSV9QYXJlbnRQYWdlX2xhYmVsPUVsdGVybnRlaWwKK19VSV9MaXN0UGFnZV9sYWJlbD1MaXN0ZQorX1VJX1RyZWVQYWdlX2xhYmVsPUJhdW0KK19VSV9UYWJsZVBhZ2VfbGFiZWw9VGFiZWxsZQorX1VJX1RyZWVXaXRoQ29sdW1uc1BhZ2VfbGFiZWw9QmF1bSBtaXQgU3BhbHRlbgorX1VJX09iamVjdENvbHVtbl9sYWJlbD1PYmpla3QKK19VSV9TZWxmQ29sdW1uX2xhYmVsPVNlbGJzdAorCitfVUlfTm9PYmplY3RTZWxlY3RlZD1OaWNodHMgYXVzZ2V3XHUwMGU0aGx0CitfVUlfU2luZ2xlT2JqZWN0U2VsZWN0ZWQ9QXVzZ2V3XHUwMGU0aGx0ZXMgT2JqZWt0OiB7MH0KK19VSV9NdWx0aU9iamVjdFNlbGVjdGVkPUF1c2dld1x1MDBlNGhsdGUgezB9IE9iamVrdGUKKworX1VJX09wZW5FZGl0b3JFcnJvcl9sYWJlbD1FZGl0b3IgXHUwMGY2ZmZuZW4KKworX1VJX1dpemFyZF9jYXRlZ29yeT1CZWlzcGllbCBFTUYgTW9kZWxsIEVyc3RlbGx1bmdzYXNzaXN0ZW50CisKK19VSV9DcmVhdGVNb2RlbEVycm9yX21lc3NhZ2U9QXVmZ2V0cmV0ZW5lIFByb2JsZW1lIGluIGRlciBEYXRlaSAiezB9IgorCitfVUlfU3RhbmRhcmRNb2RlbFdpemFyZF9sYWJlbD1TdGFuZGFyZG1vZGVsbAorX1VJX1N0YW5kYXJkTW9kZWxXaXphcmRfZGVzY3JpcHRpb249TmV1ZXMgU3RhbmRhcmQtTW9kZWxsIGVyc3RlbGxlbgorCitfVUlfU3RhbmRhcmRFZGl0b3JfbGFiZWw9U3RhbmRhcmRtb2RlbGwtRWRpdG9yCisKK19VSV9TdGFuZGFyZEVkaXRvckZpbGVuYW1lRGVmYXVsdEJhc2U9TWVpbgorX1VJX1N0YW5kYXJkRWRpdG9yRmlsZW5hbWVFeHRlbnNpb25zPVN0YW5kYXJkCisKK19XQVJOX0ZpbGVuYW1lRXh0ZW5zaW9uPURlciBEYXRlaW5hbWUgbXVzcyBhdWYgIi57MH0iIGVuZGVuCitfV0FSTl9GaWxlbmFtZUV4dGVuc2lvbnM9RGVyIERhdGVpbmFtZSBtdXNzIGVpbmUgZGVyIGZvbGdlbmRlbiBFbmR1bmdlbiBoYWJlbjogezB9CisKK19VSV9Nb2RlbE9iamVjdD0mTW9kZWwgT2JqZWN0CitfVUlfWE1MRW5jb2Rpbmc9JlhNTCBFbmNvZGluZworX1VJX1hNTEVuY29kaW5nQ2hvaWNlcz1VVEYtOCBBU0NJSSBVVEYtMTYgVVRGLTE2QkUgVVRGLTE2TEUgSVNPLTg4NTktMQorX1VJX1dpemFyZF9pbml0aWFsX29iamVjdF9kZXNjcmlwdGlvbj1adSBlcnpldWdlbmRlcyBNb2RlbGxvYmpla3Qgd1x1MDBlNGhsZW4KKworX1VJX0ZpbGVDb25mbGljdF9sYWJlbD1EYXRlaWtvbmZsaWt0CitfV0FSTl9GaWxlQ29uZmxpY3Q9RXMgZ2lidCBuaWNodCBnZXNwZWljaGVydGUgXHUwMGM0bmRlcnVuZ2VuLCBkaWUgS29uZmxpa3RlIG1pdCBcdTAwYzRuZGVydW5nZW4gYXVcdTAwZGZlcmhhbGIgZGVzIEVkaXRvcnMgZXJ6ZXVnZW4uIE1cdTAwZjZjaHRlbiBTaWUgZGllIFx1MDBjNG5kZXJ1bmdlbiBpbSBFZGl0b3IgdmVyd2VyZmVuPworCitfVUlfUG9wdWxhdGlvbk1vZGVsV2l6YXJkX2xhYmVsPUJldlx1MDBmNmxrZXJ1bmdzbW9kZWxsCitfVUlfTGFiZWxzRWRpdG9yX21lbnU9JkxhYmVscyBFZGl0b3IKKworX1VJX0xhYmVsc01vZGVsV2l6YXJkX2xhYmVsPUxhYmVscy1Nb2RlbGwKK19VSV9MYWJlbHNNb2RlbFdpemFyZF9kZXNjcmlwdGlvbj1OZXVlcyBMYWJlbHMtTW9kZWxsIGVyc3RlbGxlbgorCitfVUlfTGFiZWxzRWRpdG9yX2xhYmVsPUxhYmVscy1Nb2RlbGxlZGl0b3IKKworX1VJX0xhYmVsc0VkaXRvckZpbGVuYW1lRGVmYXVsdEJhc2U9TWVpbgorX1VJX0xhYmVsc0VkaXRvckZpbGVuYW1lRXh0ZW5zaW9ucz1MYWJlbAorCitfVUlfUG9wdWxhdGlvbk1vZGVsX2Rlc2NyaXB0aW9uPU5ldWVzIEJldlx1MDBmNmxrZXJ1bmdzbW9kZWxsIGRlZmluaWVyZW4KK19VSV9Qb3B1bGF0aW9uSW5pdGlhbGl6ZXJfZGVzY3JpcHRpb249TmV1ZW4gQmV2XHUwMGY2bGtlcnVuZ3Npbml0aWFsaXNpZXJlciBkZWZpbmllcmVuCitfVUlfUG9wdWxhdGlvbkluaXRpYWxpemVyV2l6YXJkX2xhYmVsPUJldlx1MDBmNmxrZXJ1bmdzaW5pdGlhbGlzaWVyZXIKKworX1VJX1BWaWV3X05hbWU9QmV2XHUwMGY2bGtlcnVuZ3Ntb2RlbGwtQW56ZWlnZQorX1VJX1BJVmlld19OYW1lPUJldlx1MDBmNmxrZXJ1bmdzaW5pdGlhbGlzaWVyZXItQW56ZWlnZQorX1VJX1BvcHVsYXRpb25QUGFnZT1CZXZcdTAwZjZsa2VydW5nc21vZGVsaWVydW5nCisKK19VSV9OZXdfUG9wdWxhdGlvbl9Nb2RlbD1CZXZcdTAwZjZsa2VydW5nc21vZGVsbAorCitfVUlfV2l6YXJkX2xhYmVsPU5ldQorCisKZGlmZiAtLWdpdCBhL21vZGVscy9wb3B1bGF0aW9ucy9vcmcuZWNsaXBzZS5zdGVtLnVpLnBvcHVsYXRpb25tb2RlbHMvcGx1Z2luX2tyLnByb3BlcnRpZXMgYi9tb2RlbHMvcG9wdWxhdGlvbnMvb3JnLmVjbGlwc2Uuc3RlbS51aS5wb3B1bGF0aW9ubW9kZWxzL3BsdWdpbl9rci5wcm9wZXJ0aWVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRlMDY1ODIKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvcG9wdWxhdGlvbnMvb3JnLmVjbGlwc2Uuc3RlbS51aS5wb3B1bGF0aW9ubW9kZWxzL3BsdWdpbl9rci5wcm9wZXJ0aWVzCkBAIC0wLDAgKzEsOTggQEAKKworIy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjICogQ29weXJpZ2h0IChjKSAyMDA5IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorIyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyMgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyMgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorIyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisjICoKKyMgKiBDb250cmlidXRvcnM6CisjICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorIyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisjIFRvIGNvZGUgZGV2ZWxvcGVyOgorIyAgIERvIE5PVCBjaGFuZ2UgdGhlIHByb3BlcnRpZXMgYmV0d2VlbiB0aGlzIGxpbmUgYW5kIHRoZQorIyAgICIlJSUgRU5EIE9GIFRSQU5TTEFURUQgUFJPUEVSVElFUyAlJSUiIGxpbmUuCisjICAgTWFrZSBhIG5ldyBwcm9wZXJ0eSBuYW1lLCBhcHBlbmQgdG8gdGhlIGVuZCBvZiB0aGUgZmlsZSBhbmQgY2hhbmdlCisjICAgdGhlIGNvZGUgdG8gdXNlIHRoZSBuZXcgcHJvcGVydHkuCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyMgJSUlIEVORCBPRiBUUkFOU0xBVEVEIFBST1BFUlRJRVMgJSUlCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKworcGx1Z2luTmFtZT1TVEVNIFx1Yzc3OFx1YWQ2YyBcdWJhYThcdWIzNzggVUkKK3Byb3ZpZGVyTmFtZT1FY2xpcHNlLm9yZworCitfVUlfU3RhbmRhcmRFZGl0b3JfbWVudT0mU3RhbmRhcmQgRWRpdG9yCisKK19VSV9DcmVhdGVDaGlsZF9tZW51X2l0ZW09Jk5ldyBDaGlsZAorX1VJX0NyZWF0ZVNpYmxpbmdfbWVudV9pdGVtPU4mICBcdWQ2MTVcdWM4MWMgXHVjNzkwXHViOWU0CisKK19VSV9TaG93UHJvcGVydGllc1ZpZXdfbWVudV9pdGVtPVx1ZDQ1Y1x1YzJkYyBcdWJjMGYgXHVjMThkXHVjMTMxXHViY2Y0XHVhZTMwCitfVUlfUmVmcmVzaFZpZXdlcl9tZW51X2l0ZW09JlJlZnJlc2gKKworX1VJX1NlbGVjdGlvblBhZ2VfbGFiZWw9XHVjMTIwXHVkMGRkCitfVUlfUGFyZW50UGFnZV9sYWJlbD1cdWJkODBcdWJhYTgKK19VSV9MaXN0UGFnZV9sYWJlbD1cdWJhYTlcdWI4NWQKK19VSV9UcmVlUGFnZV9sYWJlbD1cdWIwOThcdWJiMzQKK19VSV9UYWJsZVBhZ2VfbGFiZWw9XHVkMTRjXHVjNzc0XHViZTE0CitfVUlfVHJlZVdpdGhDb2x1bW5zUGFnZV9sYWJlbD1cdWIwOThcdWJiMzRcdWM2NDAgXHVjNWY0CitfVUlfT2JqZWN0Q29sdW1uX2xhYmVsPVx1YWMxY1x1Y2NiNAorX1VJX1NlbGZDb2x1bW5fbGFiZWw9XHVjMTQwXHVkNTA0CisKK19VSV9Ob09iamVjdFNlbGVjdGVkPVx1YzU0NFx1YmIzNFx1YWM4M1x1YjNjNCBcdWM1NDggXHVjMTIwXHVkMGRkXHVkNTY4CitfVUlfU2luZ2xlT2JqZWN0U2VsZWN0ZWQ9XHVjMTIwXHVkMGRkXHVkNTVjIFx1YWMxZFx1Y2NiNCA6IHswfQorX1VJX011bHRpT2JqZWN0U2VsZWN0ZWQ9XHVjMTIwXHVkMGRkXHViNDFjIHswfSBcdWFjMWRcdWNjYjQKKworX1VJX09wZW5FZGl0b3JFcnJvcl9sYWJlbD1cdWM2MjRcdWQ1MDggXHVjNWQwXHViNTE0XHVkMTMwCisKK19VSV9XaXphcmRfY2F0ZWdvcnk9XHVjNjA4XHVjODFjIEVNRiBcdWJhYThcdWIzNzggXHVjMGRkXHVjMTMxIFx1YjljOFx1YmM5NVx1YzBhYworCitfVUlfQ3JlYXRlTW9kZWxFcnJvcl9tZXNzYWdlPVx1ZDMwY1x1Yzc3YyAnezB9ICJcdWM1ZDBcdWMxMWMgXHViYjM4XHVjODFjIFx1YmMxY1x1YzBkZAorCitfVUlfU3RhbmRhcmRNb2RlbFdpemFyZF9sYWJlbD1cdWQ0NWNcdWM5MDAgXHViYWE4XHViMzc4CitfVUlfU3RhbmRhcmRNb2RlbFdpemFyZF9kZXNjcmlwdGlvbj1cdWMwYzhcdWI4NWNcdWM2YjQgXHVkNDVjXHVjOTAwIFx1YmFhOFx1YjM3OFx1Yzc0NCBcdWI5Y2NcdWI0ZTRcdWFlMzAKKworX1VJX1N0YW5kYXJkRWRpdG9yX2xhYmVsPVx1ZDQ1Y1x1YzkwMCBcdWJhYThcdWIzNzggXHVkM2I4XHVjOWQxXHVhZTMwCisKK19VSV9TdGFuZGFyZEVkaXRvckZpbGVuYW1lRGVmYXVsdEJhc2U9XHViMDk4XHVjNzU4CitfVUlfU3RhbmRhcmRFZGl0b3JGaWxlbmFtZUV4dGVuc2lvbnM9XHVkNDVjXHVjOTAwCisKK19XQVJOX0ZpbGVuYW1lRXh0ZW5zaW9uPVx1ZDMwY1x1Yzc3YyBcdWM3NzRcdWI5ODRcdWM3NDAgIi57MH0iXHViODVjIFx1YjA1ZFx1YjA5OFx1YzU3Y1x1ZDU2OC4KK19XQVJOX0ZpbGVuYW1lRXh0ZW5zaW9ucz1cdWQzMGNcdWM3N2MgXHVjNzc0XHViOTg0XHVjNzQwIFx1YjJlNFx1Yzc0YyBcdWQ2NTVcdWM3YTVcdWM3OTAgXHVjOTExIFx1ZDU1OFx1YjA5OFx1Yjk3YyBcdWFjMDBcdWM4MzhcdWM1N2NcdWQ1NjggOiB7MH0KKworX1VJX01vZGVsT2JqZWN0PSZNb2RlbCBPYmplY3QKK19VSV9YTUxFbmNvZGluZz0mWE1MIEVuY29kaW5nCitfVUlfWE1MRW5jb2RpbmdDaG9pY2VzPVVURiAtIDggQVNDSUkgVVRGIC0gMTYgVVRGIC0gMTZCRSBVVEYgLSAxNkxFIElTTyAtIDg4NTkgLSAxCitfVUlfV2l6YXJkX2luaXRpYWxfb2JqZWN0X2Rlc2NyaXB0aW9uPVx1YzBkZFx1YzEzMVx1ZDU2MCBcdWJhYThcdWIzNzggXHVhYzFjXHVjY2I0IFx1YzEyMFx1ZDBkZAorCitfVUlfRmlsZUNvbmZsaWN0X2xhYmVsPVx1ZDMwY1x1Yzc3YyBcdWNkYTlcdWIzY2MKK19XQVJOX0ZpbGVDb25mbGljdD1cdWM4MDBcdWM3YTVcdWI0MThcdWM5YzAgXHVjNTRhXHVjNzQwIFx1YzBhY1x1ZDU2ZFx1YjRlNFx1Yzc3NCBcdWQzYjhcdWM5ZDFcdWFlMzAgXHVjNjc4XHViZDgwXHVjNzU4IFx1YmNjMFx1YWNiZCBcdWMwYWNcdWQ1NmRcdWI0ZTRcdWFjZmMgXHVjZGE5XHViM2NjXHVkNTY4LiBcdWM3NzQgXHVkM2I4XHVjOWQxXHVhZTMwXHVjNzU4IFx1YmNjMFx1YWNiZCBcdWMwYWNcdWQ1NmRcdWI0ZTRcdWM3NDQgXHVjZGU4XHVjMThjIFx1ZDU1OFx1YzJkY1x1YWNhMFx1YzJiNVx1YjJjOFx1YWU0Yz8KKworX1VJX1BvcHVsYXRpb25Nb2RlbFdpemFyZF9sYWJlbD1cdWM3NzhcdWFkNmMgXHViYWE4XHViMzc4CitfVUlfTGFiZWxzRWRpdG9yX21lbnU9JkxhYmVscyBFZGl0b3IKKworX1VJX0xhYmVsc01vZGVsV2l6YXJkX2xhYmVsPVx1Yjc3Y1x1YmNhOCBcdWJhYThcdWIzNzgKK19VSV9MYWJlbHNNb2RlbFdpemFyZF9kZXNjcmlwdGlvbj1cdWMwYzhcdWI4NWNcdWM2YjQgXHViNzdjXHViY2E4IFx1YmFhOFx1YjM3OCBcdWI5Y2NcdWI0ZTRcdWFlMzAKKworX1VJX0xhYmVsc0VkaXRvcl9sYWJlbD1cdWI3N2NcdWJjYTggXHViYWE4XHViMzc4IFx1ZDNiOFx1YzlkMVx1YWUzMAorCitfVUlfTGFiZWxzRWRpdG9yRmlsZW5hbWVEZWZhdWx0QmFzZT1cdWIwOThcdWM3NTgKK19VSV9MYWJlbHNFZGl0b3JGaWxlbmFtZUV4dGVuc2lvbnM9XHViNzdjXHViY2E4CisKK19VSV9Qb3B1bGF0aW9uTW9kZWxfZGVzY3JpcHRpb249XHVjMGM4XHViODVjXHVjNmI0IFx1Yzc3OFx1YWQ2YyBcdWJhYThcdWIzNzhcdWM3NDQgXHVjODE1XHVjNzU4CitfVUlfUG9wdWxhdGlvbkluaXRpYWxpemVyX2Rlc2NyaXB0aW9uPVx1YzBjOFx1Yjg1Y1x1YzZiNCBcdWM3NzhcdWFkNmMgXHVjZDA4XHVhZTMwXHVkNjU0IFx1YzgxNVx1Yzc1OAorX1VJX1BvcHVsYXRpb25Jbml0aWFsaXplcldpemFyZF9sYWJlbD1cdWM3NzhcdWFkNmMgXHVjZDA4XHVhZTMwXHVkNjU0CisKK19VSV9QVmlld19OYW1lPVx1Yzc3OFx1YWQ2YyBcdWJhYThcdWIzNzggXHViY2Y0XHVhZTMwCitfVUlfUElWaWV3X05hbWU9XHVjNzc4XHVhZDZjIFx1Y2QwOFx1YWUzMFx1ZDY1NCBcdWJjZjRcdWFlMzAKK19VSV9Qb3B1bGF0aW9uUFBhZ2U9XHVjNzc4XHVhZDZjIFx1YmFhOFx1YjM3OFx1YjljMQorCitfVUlfTmV3X1BvcHVsYXRpb25fTW9kZWw9XHVjNzc4XHVhZDZjIFx1YmFhOFx1YjM3OAorCitfVUlfV2l6YXJkX2xhYmVsPVx1YzBjOFx1Yjg1Y1x1YzZiNAorCisKZGlmZiAtLWdpdCBhL21vZGVscy9wb3B1bGF0aW9ucy9vcmcuZWNsaXBzZS5zdGVtLnVpLnBvcHVsYXRpb25tb2RlbHMvcGx1Z2luX3poLnByb3BlcnRpZXMgYi9tb2RlbHMvcG9wdWxhdGlvbnMvb3JnLmVjbGlwc2Uuc3RlbS51aS5wb3B1bGF0aW9ubW9kZWxzL3BsdWdpbl96aC5wcm9wZXJ0aWVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZhNTZjMmYKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvcG9wdWxhdGlvbnMvb3JnLmVjbGlwc2Uuc3RlbS51aS5wb3B1bGF0aW9ubW9kZWxzL3BsdWdpbl96aC5wcm9wZXJ0aWVzCkBAIC0wLDAgKzEsOTggQEAKKworIy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjICogQ29weXJpZ2h0IChjKSAyMDA5IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorIyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyMgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyMgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorIyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisjICoKKyMgKiBDb250cmlidXRvcnM6CisjICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorIyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisjIFRvIGNvZGUgZGV2ZWxvcGVyOgorIyAgIERvIE5PVCBjaGFuZ2UgdGhlIHByb3BlcnRpZXMgYmV0d2VlbiB0aGlzIGxpbmUgYW5kIHRoZQorIyAgICIlJSUgRU5EIE9GIFRSQU5TTEFURUQgUFJPUEVSVElFUyAlJSUiIGxpbmUuCisjICAgTWFrZSBhIG5ldyBwcm9wZXJ0eSBuYW1lLCBhcHBlbmQgdG8gdGhlIGVuZCBvZiB0aGUgZmlsZSBhbmQgY2hhbmdlCisjICAgdGhlIGNvZGUgdG8gdXNlIHRoZSBuZXcgcHJvcGVydHkuCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyMgJSUlIEVORCBPRiBUUkFOU0xBVEVEIFBST1BFUlRJRVMgJSUlCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKworcGx1Z2luTmFtZT1TVEVNXHU3OWNkXHU3ZmE0XHU2YTIxXHU1NzhiXHU3Njg0XHU3NTI4XHU2MjM3XHU3NTRjXHU5NzYyCitwcm92aWRlck5hbWU9RWNsaXBzZS5vcmcKKworX1VJX1N0YW5kYXJkRWRpdG9yX21lbnU9JlN0YW5kYXJkIEVkaXRvcgorCitfVUlfQ3JlYXRlQ2hpbGRfbWVudV9pdGVtPSZOZXcgQ2hpbGQKK19VSV9DcmVhdGVTaWJsaW5nX21lbnVfaXRlbT1cdTY1YjBcdTc1MWZcdTYyMTBcdTRlMDBcdTRlMmFcdTUxNDRcdTVmMWZcdTdjN2IKKworX1VJX1Nob3dQcm9wZXJ0aWVzVmlld19tZW51X2l0ZW09XHU2NjNlXHU3OTNhXHU1NDhjXHU1YzVlXHU2MDI3XHU2N2U1XHU3NzBiCitfVUlfUmVmcmVzaFZpZXdlcl9tZW51X2l0ZW09JlJlZnJlc2gKKworX1VJX1NlbGVjdGlvblBhZ2VfbGFiZWw9XHU5MDA5XHU2MmU5CitfVUlfUGFyZW50UGFnZV9sYWJlbD1cdTViYjZcdTk1N2YKK19VSV9MaXN0UGFnZV9sYWJlbD1cdTc2ZWVcdTVmNTUKK19VSV9UcmVlUGFnZV9sYWJlbD1cdTY4MTEKK19VSV9UYWJsZVBhZ2VfbGFiZWw9XHU4ODY4CitfVUlfVHJlZVdpdGhDb2x1bW5zUGFnZV9sYWJlbD1cdTUyMDZcdTUyMTdcdTc2ODRcdTY4MTEKK19VSV9PYmplY3RDb2x1bW5fbGFiZWw9XHU1YmY5XHU4YzYxCitfVUlfU2VsZkNvbHVtbl9sYWJlbD1cdTgxZWFcdTVkZjEKKworX1VJX05vT2JqZWN0U2VsZWN0ZWQ9XHU2NWUwXHU5MDA5XHU1YjlhXHU1MTg1XHU1YmI5CitfVUlfU2luZ2xlT2JqZWN0U2VsZWN0ZWQ9XHU5MDA5XHU2MmU5XHU1YmY5XHU4YzYxXHVmZjFhezB9CitfVUlfTXVsdGlPYmplY3RTZWxlY3RlZD1cdTkwMDlcdTYyZTl7MH1cdTViZjlcdThjNjEKKworX1VJX09wZW5FZGl0b3JFcnJvcl9sYWJlbD1cdTYyNTNcdTVmMDBcdTdmMTZcdThmOTFcdTU2NjgKKworX1VJX1dpemFyZF9jYXRlZ29yeT1cdTRmOGJcdTU5ODJFTUZcdTZhMjFcdTU3OGJcdTUyMWJcdTVlZmFcdTU0MTFcdTViZmMKKworX1VJX0NyZWF0ZU1vZGVsRXJyb3JfbWVzc2FnZT1cdTU3MjhcdTY1ODdcdTRlZjZcdTIwMWN7MH1cdTIwMWRcdTRlMmRcdTkwNDdcdTUyMzBcdTc2ODRcdTk1ZWVcdTk4OTgKKworX1VJX1N0YW5kYXJkTW9kZWxXaXphcmRfbGFiZWw9XHU2ODA3XHU1MWM2XHU2YTIxXHU1NzhiCitfVUlfU3RhbmRhcmRNb2RlbFdpemFyZF9kZXNjcmlwdGlvbj1cdTUyMWJcdTVlZmFcdTRlMDBcdTRlMmFcdTY1YjBcdTc2ODRcdTY4MDdcdTUxYzZcdTZhMjFcdTU3OGIKKworX1VJX1N0YW5kYXJkRWRpdG9yX2xhYmVsPVx1NjgwN1x1NTFjNlx1NmEyMVx1NTc4Ylx1N2YxNlx1OGY5MVx1NTY2OAorCitfVUlfU3RhbmRhcmRFZGl0b3JGaWxlbmFtZURlZmF1bHRCYXNlPVx1NjIxMVx1NzY4NAorX1VJX1N0YW5kYXJkRWRpdG9yRmlsZW5hbWVFeHRlbnNpb25zPVx1NjgwN1x1NTFjNlx1NzY4NAorCitfV0FSTl9GaWxlbmFtZUV4dGVuc2lvbj1cdTY1ODdcdTRlZjZcdTU0MGRcdTVmYzVcdTk4N2JcdTRlZTUnezB9ICcnXHU3ZWQzXHU1YzNlCitfV0FSTl9GaWxlbmFtZUV4dGVuc2lvbnM9XHU2NTg3XHU0ZWY2XHU1NDBkXHU1ZmM1XHU5ODdiXHU1MTc3XHU2NzA5XHU0ZWU1XHU0ZTBiXHU2MjY5XHU1YzU1XHU1NDBkXHU0ZTRiXHU0ZTAwXHVmZjFhezB9CisKK19VSV9Nb2RlbE9iamVjdD0mTW9kZWwgT2JqZWN0CitfVUlfWE1MRW5jb2Rpbmc9JlhNTCBFbmNvZGluZworX1VJX1hNTEVuY29kaW5nQ2hvaWNlcz1VVEYtOCBBU0NJSSBVVEYtMTYgVVRGLTE2QkUgVVRGLTE2TEUgSVNPLTg4NTktMQorX1VJX1dpemFyZF9pbml0aWFsX29iamVjdF9kZXNjcmlwdGlvbj1cdTkwMDlcdTYyZTlcdTUyMWJcdTVlZmFcdTRlMDBcdTRlMmFcdTZhMjFcdTU3OGJcdTViZjlcdThjNjEKKworX1VJX0ZpbGVDb25mbGljdF9sYWJlbD1cdTY1ODdcdTRlZjZcdTUxYjJcdTdhODEKK19XQVJOX0ZpbGVDb25mbGljdD1cdTY3MDlcdTY3MmFcdTRmZGRcdTViNThcdTc2ODRcdTY2ZjRcdTY1MzlcdTRlMGVcdTdmMTZcdThmOTFcdTU2NjhcdTU5MTZcdTc2ODRcdTY2ZjRcdTY1MzlcdTUxYjJcdTdhODFcdTMwMDJcdTRmNjBcdTYwZjNcdTY1M2VcdTVmMDNcdThmZDlcdTRlMmFcdTdmMTZcdThmOTFcdTU2NjhcdTc2ODRcdTY2ZjRcdTY1MzlcdTU0MTdcdWZmMWYKKworX1VJX1BvcHVsYXRpb25Nb2RlbFdpemFyZF9sYWJlbD1cdTc5Y2RcdTdmYTRcdTZhMjFcdTU3OGIKK19VSV9MYWJlbHNFZGl0b3JfbWVudT0mTGFiZWxzIEVkaXRvcgorCitfVUlfTGFiZWxzTW9kZWxXaXphcmRfbGFiZWw9XHU2ODA3XHU3YjdlTW9kZWwKK19VSV9MYWJlbHNNb2RlbFdpemFyZF9kZXNjcmlwdGlvbj1cdTVlZmFcdTdhY2JcdTZhMjFcdTU3OGJcdTc2ODRcdTY1YjBcdTY4MDdcdTdiN2UKKworX1VJX0xhYmVsc0VkaXRvcl9sYWJlbD1cdTY4MDdcdTdiN2VcdTZhMjFcdTU3OGJcdTdmMTZcdThmOTFcdTU2NjgKKworX1VJX0xhYmVsc0VkaXRvckZpbGVuYW1lRGVmYXVsdEJhc2U9XHU2MjExXHU3Njg0CitfVUlfTGFiZWxzRWRpdG9yRmlsZW5hbWVFeHRlbnNpb25zPVx1NjgwN1x1N2I3ZQorCitfVUlfUG9wdWxhdGlvbk1vZGVsX2Rlc2NyaXB0aW9uPVx1NWI5YVx1NGU0OVx1NGUwMFx1NGUyYVx1NjViMFx1NzY4NFx1NzljZFx1N2ZhNFx1NmEyMVx1NTc4YgorX1VJX1BvcHVsYXRpb25Jbml0aWFsaXplcl9kZXNjcmlwdGlvbj1cdTViOWFcdTRlNDlcdTRlMDBcdTRlMmFcdTY1YjBcdTc2ODRcdTc5Y2RcdTdmYTRcdTUyMWRcdTU5Y2JcdTUzMTYKK19VSV9Qb3B1bGF0aW9uSW5pdGlhbGl6ZXJXaXphcmRfbGFiZWw9XHU3OWNkXHU3ZmE0XHU1MjFkXHU1OWNiXHU1MzE2CisKK19VSV9QVmlld19OYW1lPVx1NzljZFx1N2ZhNFx1NmEyMVx1NTc4Ylx1OGJkNVx1NTZmZQorX1VJX1BJVmlld19OYW1lPVx1NzljZFx1N2ZhNFx1NTIxZFx1NTljYlx1NTMxNlx1OGJkNVx1NTZmZQorX1VJX1BvcHVsYXRpb25QUGFnZT1cdTc5Y2RcdTdmYTRcdTZhMjFcdTU3OGIKKworX1VJX05ld19Qb3B1bGF0aW9uX01vZGVsPVx1NzljZFx1N2ZhNFx1NmEyMVx1NTc4YgorCitfVUlfV2l6YXJkX2xhYmVsPVx1NjViMFx1NWVmYQorCisKZGlmZiAtLWdpdCBhL21vZGVscy9wb3B1bGF0aW9ucy9vcmcuZWNsaXBzZS5zdGVtLnVpLnBvcHVsYXRpb25tb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vcG9wdWxhdGlvbm1vZGVscy9zdGFuZGFyZC9wcmVzZW50YXRpb24vU3RhbmRhcmRBY3Rpb25CYXJDb250cmlidXRvci5qYXZhIGIvbW9kZWxzL3BvcHVsYXRpb25zL29yZy5lY2xpcHNlLnN0ZW0udWkucG9wdWxhdGlvbm1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9wb3B1bGF0aW9ubW9kZWxzL3N0YW5kYXJkL3ByZXNlbnRhdGlvbi9TdGFuZGFyZEFjdGlvbkJhckNvbnRyaWJ1dG9yLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDRlODZjNAotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9wb3B1bGF0aW9ucy9vcmcuZWNsaXBzZS5zdGVtLnVpLnBvcHVsYXRpb25tb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vcG9wdWxhdGlvbm1vZGVscy9zdGFuZGFyZC9wcmVzZW50YXRpb24vU3RhbmRhcmRBY3Rpb25CYXJDb250cmlidXRvci5qYXZhCkBAIC0wLDAgKzEsNDI3IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5wcmVzZW50YXRpb247DQorDQorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisgKiBDb3B5cmlnaHQgKGMpIDIwMDkgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuDQorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscw0KKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMA0KKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0DQorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwNCisgKg0KKyAqIENvbnRyaWJ1dG9yczoNCisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uDQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQorDQoraW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7DQoraW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOw0KKw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnVpLnZpZXdlci5JVmlld2VyUHJvdmlkZXI7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LmRvbWFpbi5FZGl0aW5nRG9tYWluOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5kb21haW4uSUVkaXRpbmdEb21haW5Qcm92aWRlcjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkuYWN0aW9uLkNvbnRyb2xBY3Rpb247DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmFjdGlvbi5DcmVhdGVDaGlsZEFjdGlvbjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkuYWN0aW9uLkNyZWF0ZVNpYmxpbmdBY3Rpb247DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmFjdGlvbi5FZGl0aW5nRG9tYWluQWN0aW9uQmFyQ29udHJpYnV0b3I7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmFjdGlvbi5Mb2FkUmVzb3VyY2VBY3Rpb247DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmFjdGlvbi5WYWxpZGF0ZUFjdGlvbjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLkFjdGlvbjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLkFjdGlvbkNvbnRyaWJ1dGlvbkl0ZW07DQoraW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JQWN0aW9uOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSUNvbnRyaWJ1dGlvbkl0ZW07DQoraW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JQ29udHJpYnV0aW9uTWFuYWdlcjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklNZW51TGlzdGVuZXI7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JTWVudU1hbmFnZXI7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JVG9vbEJhck1hbmFnZXI7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5NZW51TWFuYWdlcjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLlNlcGFyYXRvcjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLlN1YkNvbnRyaWJ1dGlvbkl0ZW07DQoraW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvbjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb25Qcm92aWRlcjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU3RydWN0dXJlZFNlbGVjdGlvbjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5TZWxlY3Rpb25DaGFuZ2VkRXZlbnQ7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuVmlld2VyOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5JRWRpdG9yUGFydDsNCitpbXBvcnQgb3JnLmVjbGlwc2UudWkuUGFydEluaXRFeGNlcHRpb247DQorDQorLyoqDQorICogVGhpcyBpcyB0aGUgYWN0aW9uIGJhciBjb250cmlidXRvciBmb3IgdGhlIFN0YW5kYXJkIG1vZGVsIGVkaXRvci4NCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKyAqIEBnZW5lcmF0ZWQNCisgKi8NCitwdWJsaWMgY2xhc3MgU3RhbmRhcmRBY3Rpb25CYXJDb250cmlidXRvcg0KKwlleHRlbmRzIEVkaXRpbmdEb21haW5BY3Rpb25CYXJDb250cmlidXRvcg0KKwlpbXBsZW1lbnRzIElTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIgew0KKwkvKioNCisJICogVGhpcyBrZWVwcyB0cmFjayBvZiB0aGUgYWN0aXZlIGVkaXRvci4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCBJRWRpdG9yUGFydCBhY3RpdmVFZGl0b3JQYXJ0Ow0KKw0KKwkvKioNCisJICogVGhpcyBrZWVwcyB0cmFjayBvZiB0aGUgY3VycmVudCBzZWxlY3Rpb24gcHJvdmlkZXIuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgSVNlbGVjdGlvblByb3ZpZGVyIHNlbGVjdGlvblByb3ZpZGVyOw0KKw0KKwkvKioNCisJICogVGhpcyBhY3Rpb24gb3BlbnMgdGhlIFByb3BlcnRpZXMgdmlldy4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCBJQWN0aW9uIHNob3dQcm9wZXJ0aWVzVmlld0FjdGlvbiA9DQorCQluZXcgQWN0aW9uKFN0YW5kYXJkRWRpdG9yUGx1Z2luLklOU1RBTkNFLmdldFN0cmluZygiX1VJX1Nob3dQcm9wZXJ0aWVzVmlld19tZW51X2l0ZW0iKSkgew0KKwkJCUBPdmVycmlkZQ0KKwkJCXB1YmxpYyB2b2lkIHJ1bigpIHsNCisJCQkJdHJ5IHsNCisJCQkJCWdldFBhZ2UoKS5zaG93Vmlldygib3JnLmVjbGlwc2UudWkudmlld3MuUHJvcGVydHlTaGVldCIpOw0KKwkJCQl9DQorCQkJCWNhdGNoIChQYXJ0SW5pdEV4Y2VwdGlvbiBleGNlcHRpb24pIHsNCisJCQkJCVN0YW5kYXJkRWRpdG9yUGx1Z2luLklOU1RBTkNFLmxvZyhleGNlcHRpb24pOw0KKwkJCQl9DQorCQkJfQ0KKwkJfTsNCisNCisJLyoqDQorCSAqIFRoaXMgYWN0aW9uIHJlZnJlc2hlcyB0aGUgdmlld2VyIG9mIHRoZSBjdXJyZW50IGVkaXRvciBpZiB0aGUgZWRpdG9yDQorCSAqIGltcGxlbWVudHMge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5jb21tb24udWkudmlld2VyLklWaWV3ZXJQcm92aWRlcn0uDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgSUFjdGlvbiByZWZyZXNoVmlld2VyQWN0aW9uID0NCisJCW5ldyBBY3Rpb24oU3RhbmRhcmRFZGl0b3JQbHVnaW4uSU5TVEFOQ0UuZ2V0U3RyaW5nKCJfVUlfUmVmcmVzaFZpZXdlcl9tZW51X2l0ZW0iKSkgew0KKwkJCUBPdmVycmlkZQ0KKwkJCXB1YmxpYyBib29sZWFuIGlzRW5hYmxlZCgpIHsNCisJCQkJcmV0dXJuIGFjdGl2ZUVkaXRvclBhcnQgaW5zdGFuY2VvZiBJVmlld2VyUHJvdmlkZXI7DQorCQkJfQ0KKw0KKwkJCUBPdmVycmlkZQ0KKwkJCXB1YmxpYyB2b2lkIHJ1bigpIHsNCisJCQkJaWYgKGFjdGl2ZUVkaXRvclBhcnQgaW5zdGFuY2VvZiBJVmlld2VyUHJvdmlkZXIpIHsNCisJCQkJCVZpZXdlciB2aWV3ZXIgPSAoKElWaWV3ZXJQcm92aWRlcilhY3RpdmVFZGl0b3JQYXJ0KS5nZXRWaWV3ZXIoKTsNCisJCQkJCWlmICh2aWV3ZXIgIT0gbnVsbCkgew0KKwkJCQkJCXZpZXdlci5yZWZyZXNoKCk7DQorCQkJCQl9DQorCQkJCX0NCisJCQl9DQorCQl9Ow0KKw0KKwkvKioNCisJICogVGhpcyB3aWxsIGNvbnRhaW4gb25lIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5hY3Rpb24uQ3JlYXRlQ2hpbGRBY3Rpb259IGNvcnJlc3BvbmRpbmcgdG8gZWFjaCBkZXNjcmlwdG9yDQorCSAqIGdlbmVyYXRlZCBmb3IgdGhlIGN1cnJlbnQgc2VsZWN0aW9uIGJ5IHRoZSBpdGVtIHByb3ZpZGVyLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIENvbGxlY3Rpb248SUFjdGlvbj4gY3JlYXRlQ2hpbGRBY3Rpb25zOw0KKw0KKwkvKioNCisJICogVGhpcyBpcyB0aGUgbWVudSBtYW5hZ2VyIGludG8gd2hpY2ggbWVudSBjb250cmlidXRpb24gaXRlbXMgc2hvdWxkIGJlIGFkZGVkIGZvciBDcmVhdGVDaGlsZCBhY3Rpb25zLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIElNZW51TWFuYWdlciBjcmVhdGVDaGlsZE1lbnVNYW5hZ2VyOw0KKw0KKwkvKioNCisJICogVGhpcyB3aWxsIGNvbnRhaW4gb25lIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5hY3Rpb24uQ3JlYXRlU2libGluZ0FjdGlvbn0gY29ycmVzcG9uZGluZyB0byBlYWNoIGRlc2NyaXB0b3INCisJICogZ2VuZXJhdGVkIGZvciB0aGUgY3VycmVudCBzZWxlY3Rpb24gYnkgdGhlIGl0ZW0gcHJvdmlkZXIuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgQ29sbGVjdGlvbjxJQWN0aW9uPiBjcmVhdGVTaWJsaW5nQWN0aW9uczsNCisNCisJLyoqDQorCSAqIFRoaXMgaXMgdGhlIG1lbnUgbWFuYWdlciBpbnRvIHdoaWNoIG1lbnUgY29udHJpYnV0aW9uIGl0ZW1zIHNob3VsZCBiZSBhZGRlZCBmb3IgQ3JlYXRlU2libGluZyBhY3Rpb25zLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIElNZW51TWFuYWdlciBjcmVhdGVTaWJsaW5nTWVudU1hbmFnZXI7DQorDQorCS8qKg0KKwkgKiBUaGlzIGNyZWF0ZXMgYW4gaW5zdGFuY2Ugb2YgdGhlIGNvbnRyaWJ1dG9yLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIFN0YW5kYXJkQWN0aW9uQmFyQ29udHJpYnV0b3IoKSB7DQorCQlzdXBlcihBRERJVElPTlNfTEFTVF9TVFlMRSk7DQorCQlsb2FkUmVzb3VyY2VBY3Rpb24gPSBuZXcgTG9hZFJlc291cmNlQWN0aW9uKCk7DQorCQl2YWxpZGF0ZUFjdGlvbiA9IG5ldyBWYWxpZGF0ZUFjdGlvbigpOw0KKwkJY29udHJvbEFjdGlvbiA9IG5ldyBDb250cm9sQWN0aW9uKCk7DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgYWRkcyBTZXBhcmF0b3JzIGZvciBlZGl0b3IgYWRkaXRpb25zIHRvIHRoZSB0b29sIGJhci4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCUBPdmVycmlkZQ0KKwlwdWJsaWMgdm9pZCBjb250cmlidXRlVG9Ub29sQmFyKElUb29sQmFyTWFuYWdlciB0b29sQmFyTWFuYWdlcikgew0KKwkJdG9vbEJhck1hbmFnZXIuYWRkKG5ldyBTZXBhcmF0b3IoInN0YW5kYXJkLXNldHRpbmdzIikpOw0KKwkJdG9vbEJhck1hbmFnZXIuYWRkKG5ldyBTZXBhcmF0b3IoInN0YW5kYXJkLWFkZGl0aW9ucyIpKTsNCisJfQ0KKw0KKwkvKioNCisJICogVGhpcyBhZGRzIHRvIHRoZSBtZW51IGJhciBhIG1lbnUgYW5kIHNvbWUgc2VwYXJhdG9ycyBmb3IgZWRpdG9yIGFkZGl0aW9ucywNCisJICogYXMgd2VsbCBhcyB0aGUgc3ViLW1lbnVzIGZvciBvYmplY3QgY3JlYXRpb24gaXRlbXMuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlAT3ZlcnJpZGUNCisJcHVibGljIHZvaWQgY29udHJpYnV0ZVRvTWVudShJTWVudU1hbmFnZXIgbWVudU1hbmFnZXIpIHsNCisJCXN1cGVyLmNvbnRyaWJ1dGVUb01lbnUobWVudU1hbmFnZXIpOw0KKw0KKwkJSU1lbnVNYW5hZ2VyIHN1Ym1lbnVNYW5hZ2VyID0gbmV3IE1lbnVNYW5hZ2VyKFN0YW5kYXJkRWRpdG9yUGx1Z2luLklOU1RBTkNFLmdldFN0cmluZygiX1VJX1N0YW5kYXJkRWRpdG9yX21lbnUiKSwgIm9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZE1lbnVJRCIpOw0KKwkJbWVudU1hbmFnZXIuaW5zZXJ0QWZ0ZXIoImFkZGl0aW9ucyIsIHN1Ym1lbnVNYW5hZ2VyKTsNCisJCXN1Ym1lbnVNYW5hZ2VyLmFkZChuZXcgU2VwYXJhdG9yKCJzZXR0aW5ncyIpKTsNCisJCXN1Ym1lbnVNYW5hZ2VyLmFkZChuZXcgU2VwYXJhdG9yKCJhY3Rpb25zIikpOw0KKwkJc3VibWVudU1hbmFnZXIuYWRkKG5ldyBTZXBhcmF0b3IoImFkZGl0aW9ucyIpKTsNCisJCXN1Ym1lbnVNYW5hZ2VyLmFkZChuZXcgU2VwYXJhdG9yKCJhZGRpdGlvbnMtZW5kIikpOw0KKw0KKwkJLy8gUHJlcGFyZSBmb3IgQ3JlYXRlQ2hpbGQgaXRlbSBhZGRpdGlvbiBvciByZW1vdmFsLg0KKwkJLy8NCisJCWNyZWF0ZUNoaWxkTWVudU1hbmFnZXIgPSBuZXcgTWVudU1hbmFnZXIoU3RhbmRhcmRFZGl0b3JQbHVnaW4uSU5TVEFOQ0UuZ2V0U3RyaW5nKCJfVUlfQ3JlYXRlQ2hpbGRfbWVudV9pdGVtIikpOw0KKwkJc3VibWVudU1hbmFnZXIuaW5zZXJ0QmVmb3JlKCJhZGRpdGlvbnMiLCBjcmVhdGVDaGlsZE1lbnVNYW5hZ2VyKTsNCisNCisJCS8vIFByZXBhcmUgZm9yIENyZWF0ZVNpYmxpbmcgaXRlbSBhZGRpdGlvbiBvciByZW1vdmFsLg0KKwkJLy8NCisJCWNyZWF0ZVNpYmxpbmdNZW51TWFuYWdlciA9IG5ldyBNZW51TWFuYWdlcihTdGFuZGFyZEVkaXRvclBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoIl9VSV9DcmVhdGVTaWJsaW5nX21lbnVfaXRlbSIpKTsNCisJCXN1Ym1lbnVNYW5hZ2VyLmluc2VydEJlZm9yZSgiYWRkaXRpb25zIiwgY3JlYXRlU2libGluZ01lbnVNYW5hZ2VyKTsNCisNCisJCS8vIEZvcmNlIGFuIHVwZGF0ZSBiZWNhdXNlIEVjbGlwc2UgaGlkZXMgZW1wdHkgbWVudXMgbm93Lg0KKwkJLy8NCisJCXN1Ym1lbnVNYW5hZ2VyLmFkZE1lbnVMaXN0ZW5lcg0KKwkJCShuZXcgSU1lbnVMaXN0ZW5lcigpIHsNCisJCQkJIHB1YmxpYyB2b2lkIG1lbnVBYm91dFRvU2hvdyhJTWVudU1hbmFnZXIgbWVudU1hbmFnZXIpIHsNCisJCQkJCSBtZW51TWFuYWdlci51cGRhdGVBbGwodHJ1ZSk7DQorCQkJCSB9DQorCQkJIH0pOw0KKw0KKwkJYWRkR2xvYmFsQWN0aW9ucyhzdWJtZW51TWFuYWdlcik7DQorCX0NCisNCisJLyoqDQorCSAqIFdoZW4gdGhlIGFjdGl2ZSBlZGl0b3IgY2hhbmdlcywgdGhpcyByZW1lbWJlcnMgdGhlIGNoYW5nZSBhbmQgcmVnaXN0ZXJzIHdpdGggaXQgYXMgYSBzZWxlY3Rpb24gcHJvdmlkZXIuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlAT3ZlcnJpZGUNCisJcHVibGljIHZvaWQgc2V0QWN0aXZlRWRpdG9yKElFZGl0b3JQYXJ0IHBhcnQpIHsNCisJCXN1cGVyLnNldEFjdGl2ZUVkaXRvcihwYXJ0KTsNCisJCWFjdGl2ZUVkaXRvclBhcnQgPSBwYXJ0Ow0KKw0KKwkJLy8gU3dpdGNoIHRvIHRoZSBuZXcgc2VsZWN0aW9uIHByb3ZpZGVyLg0KKwkJLy8NCisJCWlmIChzZWxlY3Rpb25Qcm92aWRlciAhPSBudWxsKSB7DQorCQkJc2VsZWN0aW9uUHJvdmlkZXIucmVtb3ZlU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyKHRoaXMpOw0KKwkJfQ0KKwkJaWYgKHBhcnQgPT0gbnVsbCkgew0KKwkJCXNlbGVjdGlvblByb3ZpZGVyID0gbnVsbDsNCisJCX0NCisJCWVsc2Ugew0KKwkJCXNlbGVjdGlvblByb3ZpZGVyID0gcGFydC5nZXRTaXRlKCkuZ2V0U2VsZWN0aW9uUHJvdmlkZXIoKTsNCisJCQlzZWxlY3Rpb25Qcm92aWRlci5hZGRTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIodGhpcyk7DQorDQorCQkJLy8gRmFrZSBhIHNlbGVjdGlvbiBjaGFuZ2VkIGV2ZW50IHRvIHVwZGF0ZSB0aGUgbWVudXMuDQorCQkJLy8NCisJCQlpZiAoc2VsZWN0aW9uUHJvdmlkZXIuZ2V0U2VsZWN0aW9uKCkgIT0gbnVsbCkgew0KKwkJCQlzZWxlY3Rpb25DaGFuZ2VkKG5ldyBTZWxlY3Rpb25DaGFuZ2VkRXZlbnQoc2VsZWN0aW9uUHJvdmlkZXIsIHNlbGVjdGlvblByb3ZpZGVyLmdldFNlbGVjdGlvbigpKSk7DQorCQkJfQ0KKwkJfQ0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIGltcGxlbWVudHMge0BsaW5rIG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcn0sDQorCSAqIGhhbmRsaW5nIHtAbGluayBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlNlbGVjdGlvbkNoYW5nZWRFdmVudH1zIGJ5IHF1ZXJ5aW5nIGZvciB0aGUgY2hpbGRyZW4gYW5kIHNpYmxpbmdzDQorCSAqIHRoYXQgY2FuIGJlIGFkZGVkIHRvIHRoZSBzZWxlY3RlZCBvYmplY3QgYW5kIHVwZGF0aW5nIHRoZSBtZW51cyBhY2NvcmRpbmdseS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyB2b2lkIHNlbGVjdGlvbkNoYW5nZWQoU2VsZWN0aW9uQ2hhbmdlZEV2ZW50IGV2ZW50KSB7DQorCQkvLyBSZW1vdmUgYW55IG1lbnUgaXRlbXMgZm9yIG9sZCBzZWxlY3Rpb24uDQorCQkvLw0KKwkJaWYgKGNyZWF0ZUNoaWxkTWVudU1hbmFnZXIgIT0gbnVsbCkgew0KKwkJCWRlcG9wdWxhdGVNYW5hZ2VyKGNyZWF0ZUNoaWxkTWVudU1hbmFnZXIsIGNyZWF0ZUNoaWxkQWN0aW9ucyk7DQorCQl9DQorCQlpZiAoY3JlYXRlU2libGluZ01lbnVNYW5hZ2VyICE9IG51bGwpIHsNCisJCQlkZXBvcHVsYXRlTWFuYWdlcihjcmVhdGVTaWJsaW5nTWVudU1hbmFnZXIsIGNyZWF0ZVNpYmxpbmdBY3Rpb25zKTsNCisJCX0NCisNCisJCS8vIFF1ZXJ5IHRoZSBuZXcgc2VsZWN0aW9uIGZvciBhcHByb3ByaWF0ZSBuZXcgY2hpbGQvc2libGluZyBkZXNjcmlwdG9ycw0KKwkJLy8NCisJCUNvbGxlY3Rpb248Pz4gbmV3Q2hpbGREZXNjcmlwdG9ycyA9IG51bGw7DQorCQlDb2xsZWN0aW9uPD8+IG5ld1NpYmxpbmdEZXNjcmlwdG9ycyA9IG51bGw7DQorDQorCQlJU2VsZWN0aW9uIHNlbGVjdGlvbiA9IGV2ZW50LmdldFNlbGVjdGlvbigpOw0KKwkJaWYgKHNlbGVjdGlvbiBpbnN0YW5jZW9mIElTdHJ1Y3R1cmVkU2VsZWN0aW9uICYmICgoSVN0cnVjdHVyZWRTZWxlY3Rpb24pc2VsZWN0aW9uKS5zaXplKCkgPT0gMSkgew0KKwkJCU9iamVjdCBvYmplY3QgPSAoKElTdHJ1Y3R1cmVkU2VsZWN0aW9uKXNlbGVjdGlvbikuZ2V0Rmlyc3RFbGVtZW50KCk7DQorDQorCQkJRWRpdGluZ0RvbWFpbiBkb21haW4gPSAoKElFZGl0aW5nRG9tYWluUHJvdmlkZXIpYWN0aXZlRWRpdG9yUGFydCkuZ2V0RWRpdGluZ0RvbWFpbigpOw0KKw0KKwkJCW5ld0NoaWxkRGVzY3JpcHRvcnMgPSBkb21haW4uZ2V0TmV3Q2hpbGREZXNjcmlwdG9ycyhvYmplY3QsIG51bGwpOw0KKwkJCW5ld1NpYmxpbmdEZXNjcmlwdG9ycyA9IGRvbWFpbi5nZXROZXdDaGlsZERlc2NyaXB0b3JzKG51bGwsIG9iamVjdCk7DQorCQl9DQorDQorCQkvLyBHZW5lcmF0ZSBhY3Rpb25zIGZvciBzZWxlY3Rpb247IHBvcHVsYXRlIGFuZCByZWRyYXcgdGhlIG1lbnVzLg0KKwkJLy8NCisJCWNyZWF0ZUNoaWxkQWN0aW9ucyA9IGdlbmVyYXRlQ3JlYXRlQ2hpbGRBY3Rpb25zKG5ld0NoaWxkRGVzY3JpcHRvcnMsIHNlbGVjdGlvbik7DQorCQljcmVhdGVTaWJsaW5nQWN0aW9ucyA9IGdlbmVyYXRlQ3JlYXRlU2libGluZ0FjdGlvbnMobmV3U2libGluZ0Rlc2NyaXB0b3JzLCBzZWxlY3Rpb24pOw0KKw0KKwkJaWYgKGNyZWF0ZUNoaWxkTWVudU1hbmFnZXIgIT0gbnVsbCkgew0KKwkJCXBvcHVsYXRlTWFuYWdlcihjcmVhdGVDaGlsZE1lbnVNYW5hZ2VyLCBjcmVhdGVDaGlsZEFjdGlvbnMsIG51bGwpOw0KKwkJCWNyZWF0ZUNoaWxkTWVudU1hbmFnZXIudXBkYXRlKHRydWUpOw0KKwkJfQ0KKwkJaWYgKGNyZWF0ZVNpYmxpbmdNZW51TWFuYWdlciAhPSBudWxsKSB7DQorCQkJcG9wdWxhdGVNYW5hZ2VyKGNyZWF0ZVNpYmxpbmdNZW51TWFuYWdlciwgY3JlYXRlU2libGluZ0FjdGlvbnMsIG51bGwpOw0KKwkJCWNyZWF0ZVNpYmxpbmdNZW51TWFuYWdlci51cGRhdGUodHJ1ZSk7DQorCQl9DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgZ2VuZXJhdGVzIGEge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmFjdGlvbi5DcmVhdGVDaGlsZEFjdGlvbn0gZm9yIGVhY2ggb2JqZWN0IGluIDxjb2RlPmRlc2NyaXB0b3JzPC9jb2RlPiwNCisJICogYW5kIHJldHVybnMgdGhlIGNvbGxlY3Rpb24gb2YgdGhlc2UgYWN0aW9ucy4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCBDb2xsZWN0aW9uPElBY3Rpb24+IGdlbmVyYXRlQ3JlYXRlQ2hpbGRBY3Rpb25zKENvbGxlY3Rpb248Pz4gZGVzY3JpcHRvcnMsIElTZWxlY3Rpb24gc2VsZWN0aW9uKSB7DQorCQlDb2xsZWN0aW9uPElBY3Rpb24+IGFjdGlvbnMgPSBuZXcgQXJyYXlMaXN0PElBY3Rpb24+KCk7DQorCQlpZiAoZGVzY3JpcHRvcnMgIT0gbnVsbCkgew0KKwkJCWZvciAoT2JqZWN0IGRlc2NyaXB0b3IgOiBkZXNjcmlwdG9ycykgew0KKwkJCQlhY3Rpb25zLmFkZChuZXcgQ3JlYXRlQ2hpbGRBY3Rpb24oYWN0aXZlRWRpdG9yUGFydCwgc2VsZWN0aW9uLCBkZXNjcmlwdG9yKSk7DQorCQkJfQ0KKwkJfQ0KKwkJcmV0dXJuIGFjdGlvbnM7DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgZ2VuZXJhdGVzIGEge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmFjdGlvbi5DcmVhdGVTaWJsaW5nQWN0aW9ufSBmb3IgZWFjaCBvYmplY3QgaW4gPGNvZGU+ZGVzY3JpcHRvcnM8L2NvZGU+LA0KKwkgKiBhbmQgcmV0dXJucyB0aGUgY29sbGVjdGlvbiBvZiB0aGVzZSBhY3Rpb25zLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIENvbGxlY3Rpb248SUFjdGlvbj4gZ2VuZXJhdGVDcmVhdGVTaWJsaW5nQWN0aW9ucyhDb2xsZWN0aW9uPD8+IGRlc2NyaXB0b3JzLCBJU2VsZWN0aW9uIHNlbGVjdGlvbikgew0KKwkJQ29sbGVjdGlvbjxJQWN0aW9uPiBhY3Rpb25zID0gbmV3IEFycmF5TGlzdDxJQWN0aW9uPigpOw0KKwkJaWYgKGRlc2NyaXB0b3JzICE9IG51bGwpIHsNCisJCQlmb3IgKE9iamVjdCBkZXNjcmlwdG9yIDogZGVzY3JpcHRvcnMpIHsNCisJCQkJYWN0aW9ucy5hZGQobmV3IENyZWF0ZVNpYmxpbmdBY3Rpb24oYWN0aXZlRWRpdG9yUGFydCwgc2VsZWN0aW9uLCBkZXNjcmlwdG9yKSk7DQorCQkJfQ0KKwkJfQ0KKwkJcmV0dXJuIGFjdGlvbnM7DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgcG9wdWxhdGVzIHRoZSBzcGVjaWZpZWQgPGNvZGU+bWFuYWdlcjwvY29kZT4gd2l0aCB7QGxpbmsgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLkFjdGlvbkNvbnRyaWJ1dGlvbkl0ZW19cw0KKwkgKiBiYXNlZCBvbiB0aGUge0BsaW5rIG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JQWN0aW9ufXMgY29udGFpbmVkIGluIHRoZSA8Y29kZT5hY3Rpb25zPC9jb2RlPiBjb2xsZWN0aW9uLA0KKwkgKiBieSBpbnNlcnRpbmcgdGhlbSBiZWZvcmUgdGhlIHNwZWNpZmllZCBjb250cmlidXRpb24gaXRlbSA8Y29kZT5jb250cmlidXRpb25JRDwvY29kZT4uDQorCSAqIElmIDxjb2RlPmNvbnRyaWJ1dGlvbklEPC9jb2RlPiBpcyA8Y29kZT5udWxsPC9jb2RlPiwgdGhleSBhcmUgc2ltcGx5IGFkZGVkLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIHZvaWQgcG9wdWxhdGVNYW5hZ2VyKElDb250cmlidXRpb25NYW5hZ2VyIG1hbmFnZXIsIENvbGxlY3Rpb248PyBleHRlbmRzIElBY3Rpb24+IGFjdGlvbnMsIFN0cmluZyBjb250cmlidXRpb25JRCkgew0KKwkJaWYgKGFjdGlvbnMgIT0gbnVsbCkgew0KKwkJCWZvciAoSUFjdGlvbiBhY3Rpb24gOiBhY3Rpb25zKSB7DQorCQkJCWlmIChjb250cmlidXRpb25JRCAhPSBudWxsKSB7DQorCQkJCQltYW5hZ2VyLmluc2VydEJlZm9yZShjb250cmlidXRpb25JRCwgYWN0aW9uKTsNCisJCQkJfQ0KKwkJCQllbHNlIHsNCisJCQkJCW1hbmFnZXIuYWRkKGFjdGlvbik7DQorCQkJCX0NCisJCQl9DQorCQl9DQorCX0NCisJCQ0KKwkvKioNCisJICogVGhpcyByZW1vdmVzIGZyb20gdGhlIHNwZWNpZmllZCA8Y29kZT5tYW5hZ2VyPC9jb2RlPiBhbGwge0BsaW5rIG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5BY3Rpb25Db250cmlidXRpb25JdGVtfXMNCisJICogYmFzZWQgb24gdGhlIHtAbGluayBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSUFjdGlvbn1zIGNvbnRhaW5lZCBpbiB0aGUgPGNvZGU+YWN0aW9uczwvY29kZT4gY29sbGVjdGlvbi4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCB2b2lkIGRlcG9wdWxhdGVNYW5hZ2VyKElDb250cmlidXRpb25NYW5hZ2VyIG1hbmFnZXIsIENvbGxlY3Rpb248PyBleHRlbmRzIElBY3Rpb24+IGFjdGlvbnMpIHsNCisJCWlmIChhY3Rpb25zICE9IG51bGwpIHsNCisJCQlJQ29udHJpYnV0aW9uSXRlbVtdIGl0ZW1zID0gbWFuYWdlci5nZXRJdGVtcygpOw0KKwkJCWZvciAoaW50IGkgPSAwOyBpIDwgaXRlbXMubGVuZ3RoOyBpKyspIHsNCisJCQkJLy8gTG9vayBpbnRvIFN1YkNvbnRyaWJ1dGlvbkl0ZW1zDQorCQkJCS8vDQorCQkJCUlDb250cmlidXRpb25JdGVtIGNvbnRyaWJ1dGlvbkl0ZW0gPSBpdGVtc1tpXTsNCisJCQkJd2hpbGUgKGNvbnRyaWJ1dGlvbkl0ZW0gaW5zdGFuY2VvZiBTdWJDb250cmlidXRpb25JdGVtKSB7DQorCQkJCQljb250cmlidXRpb25JdGVtID0gKChTdWJDb250cmlidXRpb25JdGVtKWNvbnRyaWJ1dGlvbkl0ZW0pLmdldElubmVySXRlbSgpOw0KKwkJCQl9DQorDQorCQkJCS8vIERlbGV0ZSB0aGUgQWN0aW9uQ29udHJpYnV0aW9uSXRlbXMgd2l0aCBtYXRjaGluZyBhY3Rpb24uDQorCQkJCS8vDQorCQkJCWlmIChjb250cmlidXRpb25JdGVtIGluc3RhbmNlb2YgQWN0aW9uQ29udHJpYnV0aW9uSXRlbSkgew0KKwkJCQkJSUFjdGlvbiBhY3Rpb24gPSAoKEFjdGlvbkNvbnRyaWJ1dGlvbkl0ZW0pY29udHJpYnV0aW9uSXRlbSkuZ2V0QWN0aW9uKCk7DQorCQkJCQlpZiAoYWN0aW9ucy5jb250YWlucyhhY3Rpb24pKSB7DQorCQkJCQkJbWFuYWdlci5yZW1vdmUoY29udHJpYnV0aW9uSXRlbSk7DQorCQkJCQl9DQorCQkJCX0NCisJCQl9DQorCQl9DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgcG9wdWxhdGVzIHRoZSBwb3AtdXAgbWVudSBiZWZvcmUgaXQgYXBwZWFycy4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCUBPdmVycmlkZQ0KKwlwdWJsaWMgdm9pZCBtZW51QWJvdXRUb1Nob3coSU1lbnVNYW5hZ2VyIG1lbnVNYW5hZ2VyKSB7DQorCQlzdXBlci5tZW51QWJvdXRUb1Nob3cobWVudU1hbmFnZXIpOw0KKwkJTWVudU1hbmFnZXIgc3VibWVudU1hbmFnZXIgPSBudWxsOw0KKw0KKwkJc3VibWVudU1hbmFnZXIgPSBuZXcgTWVudU1hbmFnZXIoU3RhbmRhcmRFZGl0b3JQbHVnaW4uSU5TVEFOQ0UuZ2V0U3RyaW5nKCJfVUlfQ3JlYXRlQ2hpbGRfbWVudV9pdGVtIikpOw0KKwkJcG9wdWxhdGVNYW5hZ2VyKHN1Ym1lbnVNYW5hZ2VyLCBjcmVhdGVDaGlsZEFjdGlvbnMsIG51bGwpOw0KKwkJbWVudU1hbmFnZXIuaW5zZXJ0QmVmb3JlKCJlZGl0Iiwgc3VibWVudU1hbmFnZXIpOw0KKw0KKwkJc3VibWVudU1hbmFnZXIgPSBuZXcgTWVudU1hbmFnZXIoU3RhbmRhcmRFZGl0b3JQbHVnaW4uSU5TVEFOQ0UuZ2V0U3RyaW5nKCJfVUlfQ3JlYXRlU2libGluZ19tZW51X2l0ZW0iKSk7DQorCQlwb3B1bGF0ZU1hbmFnZXIoc3VibWVudU1hbmFnZXIsIGNyZWF0ZVNpYmxpbmdBY3Rpb25zLCBudWxsKTsNCisJCW1lbnVNYW5hZ2VyLmluc2VydEJlZm9yZSgiZWRpdCIsIHN1Ym1lbnVNYW5hZ2VyKTsNCisJfQ0KKw0KKwkvKioNCisJICogVGhpcyBpbnNlcnRzIGdsb2JhbCBhY3Rpb25zIGJlZm9yZSB0aGUgImFkZGl0aW9ucy1lbmQiIHNlcGFyYXRvci4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCUBPdmVycmlkZQ0KKwlwcm90ZWN0ZWQgdm9pZCBhZGRHbG9iYWxBY3Rpb25zKElNZW51TWFuYWdlciBtZW51TWFuYWdlcikgew0KKwkJbWVudU1hbmFnZXIuaW5zZXJ0QWZ0ZXIoImFkZGl0aW9ucy1lbmQiLCBuZXcgU2VwYXJhdG9yKCJ1aS1hY3Rpb25zIikpOw0KKwkJbWVudU1hbmFnZXIuaW5zZXJ0QWZ0ZXIoInVpLWFjdGlvbnMiLCBzaG93UHJvcGVydGllc1ZpZXdBY3Rpb24pOw0KKw0KKwkJcmVmcmVzaFZpZXdlckFjdGlvbi5zZXRFbmFibGVkKHJlZnJlc2hWaWV3ZXJBY3Rpb24uaXNFbmFibGVkKCkpOwkJDQorCQltZW51TWFuYWdlci5pbnNlcnRBZnRlcigidWktYWN0aW9ucyIsIHJlZnJlc2hWaWV3ZXJBY3Rpb24pOw0KKw0KKwkJc3VwZXIuYWRkR2xvYmFsQWN0aW9ucyhtZW51TWFuYWdlcik7DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgZW5zdXJlcyB0aGF0IGEgZGVsZXRlIGFjdGlvbiB3aWxsIGNsZWFuIHVwIGFsbCByZWZlcmVuY2VzIHRvIGRlbGV0ZWQgb2JqZWN0cy4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCUBPdmVycmlkZQ0KKwlwcm90ZWN0ZWQgYm9vbGVhbiByZW1vdmVBbGxSZWZlcmVuY2VzT25EZWxldGUoKSB7DQorCQlyZXR1cm4gdHJ1ZTsNCisJfQ0KKw0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9tb2RlbHMvcG9wdWxhdGlvbnMvb3JnLmVjbGlwc2Uuc3RlbS51aS5wb3B1bGF0aW9ubW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3BvcHVsYXRpb25tb2RlbHMvc3RhbmRhcmQvcHJlc2VudGF0aW9uL1N0YW5kYXJkRWRpdG9yLmphdmEgYi9tb2RlbHMvcG9wdWxhdGlvbnMvb3JnLmVjbGlwc2Uuc3RlbS51aS5wb3B1bGF0aW9ubW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3BvcHVsYXRpb25tb2RlbHMvc3RhbmRhcmQvcHJlc2VudGF0aW9uL1N0YW5kYXJkRWRpdG9yLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjdiMzFiZQotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9wb3B1bGF0aW9ucy9vcmcuZWNsaXBzZS5zdGVtLnVpLnBvcHVsYXRpb25tb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vcG9wdWxhdGlvbm1vZGVscy9zdGFuZGFyZC9wcmVzZW50YXRpb24vU3RhbmRhcmRFZGl0b3IuamF2YQpAQCAtMCwwICsxLDE4MDQgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLnByZXNlbnRhdGlvbjsNCisNCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyAqIENvcHlyaWdodCAoYykgMjAwOSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4NCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzDQorICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wDQorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQNCisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbA0KKyAqDQorICogQ29udHJpYnV0b3JzOg0KKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24NCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCisNCisNCitpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsNCitpbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbTsNCitpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsNCitpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247DQoraW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uczsNCitpbXBvcnQgamF2YS51dGlsLkV2ZW50T2JqZWN0Ow0KK2ltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsNCitpbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOw0KK2ltcG9ydCBqYXZhLnV0aWwuTGlua2VkSGFzaE1hcDsNCitpbXBvcnQgamF2YS51dGlsLkxpc3Q7DQoraW1wb3J0IGphdmEudXRpbC5NYXA7DQorDQoraW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklGaWxlOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JTWFya2VyOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUmVzb3VyY2U7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklSZXNvdXJjZUNoYW5nZUV2ZW50Ow0KK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUmVzb3VyY2VDaGFuZ2VMaXN0ZW5lcjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVJlc291cmNlRGVsdGE7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklSZXNvdXJjZURlbHRhVmlzaXRvcjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuUmVzb3VyY2VzUGx1Z2luOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQ29yZUV4Y2VwdGlvbjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQYXRoOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVByb2dyZXNzTW9uaXRvcjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLk51bGxQcm9ncmVzc01vbml0b3I7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24uY29tbWFuZC5CYXNpY0NvbW1hbmRTdGFjazsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5jb21tYW5kLkNvbW1hbmQ7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24uY29tbWFuZC5Db21tYW5kU3RhY2s7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24uY29tbWFuZC5Db21tYW5kU3RhY2tMaXN0ZW5lcjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuQWRhcHRlckZhY3Rvcnk7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51aS5NYXJrZXJIZWxwZXI7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udWkuVmlld2VyUGFuZTsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51aS5lZGl0b3IuUHJvYmxlbUVkaXRvclBhcnQ7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udWkudmlld2VyLklWaWV3ZXJQcm92aWRlcjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLkJhc2ljRGlhZ25vc3RpYzsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLkRpYWdub3N0aWM7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5VUkk7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0Ow0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRVZhbGlkYXRvcjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnByb3ZpZGVyLkVjb3JlSXRlbVByb3ZpZGVyQWRhcHRlckZhY3Rvcnk7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5yZXNvdXJjZS5SZXNvdXJjZTsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnJlc291cmNlLlJlc291cmNlU2V0Ow0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUudXRpbC5FQ29udGVudEFkYXB0ZXI7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS51dGlsLkVjb3JlVXRpbDsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQuZG9tYWluLkFkYXB0ZXJGYWN0b3J5RWRpdGluZ0RvbWFpbjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQuZG9tYWluLkVkaXRpbmdEb21haW47DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LmRvbWFpbi5JRWRpdGluZ0RvbWFpblByb3ZpZGVyOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5BZGFwdGVyRmFjdG9yeUl0ZW1EZWxlZ2F0b3I7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkNvbXBvc2VkQWRhcHRlckZhY3Rvcnk7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLlJlZmxlY3RpdmVJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeTsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIucmVzb3VyY2UuUmVzb3VyY2VJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeTsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkuYWN0aW9uLkVkaXRpbmdEb21haW5BY3Rpb25CYXJDb250cmlidXRvcjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkuY2VsbGVkaXRvci5BZGFwdGVyRmFjdG9yeVRyZWVFZGl0b3I7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmRuZC5FZGl0aW5nRG9tYWluVmlld2VyRHJvcEFkYXB0ZXI7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmRuZC5Mb2NhbFRyYW5zZmVyOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5kbmQuVmlld2VyRHJhZ0FkYXB0ZXI7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLnByb3ZpZGVyLkFkYXB0ZXJGYWN0b3J5Q29udGVudFByb3ZpZGVyOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5wcm92aWRlci5BZGFwdGVyRmFjdG9yeUxhYmVsUHJvdmlkZXI7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLnByb3ZpZGVyLlVud3JhcHBpbmdTZWxlY3Rpb25Qcm92aWRlcjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkudXRpbC5FZGl0VUlNYXJrZXJIZWxwZXI7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLnV0aWwuRWRpdFVJVXRpbDsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkudmlldy5FeHRlbmRlZFByb3BlcnR5U2hlZXRQYWdlOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSU1lbnVMaXN0ZW5lcjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklNZW51TWFuYWdlcjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklTdGF0dXNMaW5lTWFuYWdlcjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklUb29sQmFyTWFuYWdlcjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLk1lbnVNYW5hZ2VyOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uU2VwYXJhdG9yOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5kaWFsb2dzLk1lc3NhZ2VEaWFsb2c7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmRpYWxvZ3MuUHJvZ3Jlc3NNb25pdG9yRGlhbG9nOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLkNvbHVtbldlaWdodERhdGE7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvbjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb25Qcm92aWRlcjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU3RydWN0dXJlZFNlbGVjdGlvbjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5MaXN0Vmlld2VyOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlNlbGVjdGlvbkNoYW5nZWRFdmVudDsNCitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5TdHJ1Y3R1cmVkU2VsZWN0aW9uOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlN0cnVjdHVyZWRWaWV3ZXI7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuVGFibGVMYXlvdXQ7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuVGFibGVWaWV3ZXI7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuVHJlZVZpZXdlcjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5WaWV3ZXI7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24ucHJvdmlkZXIuQ29tbW9uSXRlbVByb3ZpZGVyQWRhcHRlckZhY3Rvcnk7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5wcm92aWRlci5HcmFwaEl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5Ow0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubG9nZ2VyLnByb3ZpZGVyLkxvZ2dlckl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5Ow0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwucHJvdmlkZXIuTW9kZWxJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeTsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLnByb3ZpZGVyLk1vZGlmaWVySXRlbVByb3ZpZGVyQWRhcHRlckZhY3Rvcnk7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zY2VuYXJpby5wcm92aWRlci5TY2VuYXJpb0l0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5Ow0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2VxdWVuY2VyLnByb3ZpZGVyLlNlcXVlbmNlckl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5Ow0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc29sdmVyLnByb3ZpZGVyLlNvbHZlckl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5Ow0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5wcm92aWRlci5MYWJlbHNJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeTsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLnByb3ZpZGVyLlN0YW5kYXJkSXRlbVByb3ZpZGVyQWRhcHRlckZhY3Rvcnk7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5TV1Q7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5jdXN0b20uQ1RhYkZvbGRlcjsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmRuZC5ETkQ7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5kbmQuVHJhbnNmZXI7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuQ29udHJvbEFkYXB0ZXI7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuQ29udHJvbEV2ZW50Ow0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZ3JhcGhpY3MuUG9pbnQ7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5sYXlvdXQuRmlsbExheW91dDsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5NZW51Ow0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5UYWJsZTsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuVGFibGVDb2x1bW47DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlRyZWU7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlRyZWVDb2x1bW47DQoraW1wb3J0IG9yZy5lY2xpcHNlLnVpLklBY3Rpb25CYXJzOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5JRWRpdG9ySW5wdXQ7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnVpLklFZGl0b3JQYXJ0Ow0KK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5JRWRpdG9yU2l0ZTsNCitpbXBvcnQgb3JnLmVjbGlwc2UudWkuSVBhcnRMaXN0ZW5lcjsNCitpbXBvcnQgb3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaFBhcnQ7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnVpLlBhcnRJbml0RXhjZXB0aW9uOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5hY3Rpb25zLldvcmtzcGFjZU1vZGlmeU9wZXJhdGlvbjsNCitpbXBvcnQgb3JnLmVjbGlwc2UudWkuZGlhbG9ncy5TYXZlQXNEaWFsb2c7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnVpLmlkZS5JR290b01hcmtlcjsNCitpbXBvcnQgb3JnLmVjbGlwc2UudWkucGFydC5GaWxlRWRpdG9ySW5wdXQ7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnVpLnBhcnQuTXVsdGlQYWdlRWRpdG9yUGFydDsNCitpbXBvcnQgb3JnLmVjbGlwc2UudWkudmlld3MuY29udGVudG91dGxpbmUuQ29udGVudE91dGxpbmU7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnVpLnZpZXdzLmNvbnRlbnRvdXRsaW5lLkNvbnRlbnRPdXRsaW5lUGFnZTsNCitpbXBvcnQgb3JnLmVjbGlwc2UudWkudmlld3MuY29udGVudG91dGxpbmUuSUNvbnRlbnRPdXRsaW5lUGFnZTsNCitpbXBvcnQgb3JnLmVjbGlwc2UudWkudmlld3MucHJvcGVydGllcy5JUHJvcGVydHlTaGVldFBhZ2U7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnVpLnZpZXdzLnByb3BlcnRpZXMuUHJvcGVydHlTaGVldDsNCitpbXBvcnQgb3JnLmVjbGlwc2UudWkudmlld3MucHJvcGVydGllcy5Qcm9wZXJ0eVNoZWV0UGFnZTsNCisNCisNCisvKioNCisgKiBUaGlzIGlzIGFuIGV4YW1wbGUgb2YgYSBTdGFuZGFyZCBtb2RlbCBlZGl0b3IuDQorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisgKiBAZ2VuZXJhdGVkDQorICovDQorQFN1cHByZXNzV2FybmluZ3MoImFsbCIpIA0KK3B1YmxpYyBjbGFzcyBTdGFuZGFyZEVkaXRvcg0KKwlleHRlbmRzIE11bHRpUGFnZUVkaXRvclBhcnQNCisJaW1wbGVtZW50cyBJRWRpdGluZ0RvbWFpblByb3ZpZGVyLCBJU2VsZWN0aW9uUHJvdmlkZXIsIElNZW51TGlzdGVuZXIsIElWaWV3ZXJQcm92aWRlciwgSUdvdG9NYXJrZXIgew0KKwkvKioNCisJICogVGhpcyBrZWVwcyB0cmFjayBvZiB0aGUgZWRpdGluZyBkb21haW4gdGhhdCBpcyB1c2VkIHRvIHRyYWNrIGFsbCBjaGFuZ2VzIHRvIHRoZSBtb2RlbC4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCBBZGFwdGVyRmFjdG9yeUVkaXRpbmdEb21haW4gZWRpdGluZ0RvbWFpbjsNCisNCisJLyoqDQorCSAqIFRoaXMgaXMgdGhlIG9uZSBhZGFwdGVyIGZhY3RvcnkgdXNlZCBmb3IgcHJvdmlkaW5nIHZpZXdzIG9mIHRoZSBtb2RlbC4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCBDb21wb3NlZEFkYXB0ZXJGYWN0b3J5IGFkYXB0ZXJGYWN0b3J5Ow0KKw0KKwkvKioNCisJICogVGhpcyBpcyB0aGUgY29udGVudCBvdXRsaW5lIHBhZ2UuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgSUNvbnRlbnRPdXRsaW5lUGFnZSBjb250ZW50T3V0bGluZVBhZ2U7DQorDQorCS8qKg0KKwkgKiBUaGlzIGlzIGEga2x1ZGdlLi4uDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgSVN0YXR1c0xpbmVNYW5hZ2VyIGNvbnRlbnRPdXRsaW5lU3RhdHVzTGluZU1hbmFnZXI7DQorDQorCS8qKg0KKwkgKiBUaGlzIGlzIHRoZSBjb250ZW50IG91dGxpbmUgcGFnZSdzIHZpZXdlci4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCBUcmVlVmlld2VyIGNvbnRlbnRPdXRsaW5lVmlld2VyOw0KKw0KKwkvKioNCisJICogVGhpcyBpcyB0aGUgcHJvcGVydHkgc2hlZXQgcGFnZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCBQcm9wZXJ0eVNoZWV0UGFnZSBwcm9wZXJ0eVNoZWV0UGFnZTsNCisNCisJLyoqDQorCSAqIFRoaXMgaXMgdGhlIHZpZXdlciB0aGF0IHNoYWRvd3MgdGhlIHNlbGVjdGlvbiBpbiB0aGUgY29udGVudCBvdXRsaW5lLg0KKwkgKiBUaGUgcGFyZW50IHJlbGF0aW9uIG11c3QgYmUgY29ycmVjdGx5IGRlZmluZWQgZm9yIHRoaXMgdG8gd29yay4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCBUcmVlVmlld2VyIHNlbGVjdGlvblZpZXdlcjsNCisNCisJLyoqDQorCSAqIFRoaXMgaW52ZXJ0cyB0aGUgcm9sbCBvZiBwYXJlbnQgYW5kIGNoaWxkIGluIHRoZSBjb250ZW50IHByb3ZpZGVyIGFuZCBzaG93IHBhcmVudHMgYXMgYSB0cmVlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIFRyZWVWaWV3ZXIgcGFyZW50Vmlld2VyOw0KKw0KKwkvKioNCisJICogVGhpcyBzaG93cyBob3cgYSB0cmVlIHZpZXcgd29ya3MuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgVHJlZVZpZXdlciB0cmVlVmlld2VyOw0KKw0KKwkvKioNCisJICogVGhpcyBzaG93cyBob3cgYSBsaXN0IHZpZXcgd29ya3MuDQorCSAqIEEgbGlzdCB2aWV3ZXIgZG9lc24ndCBzdXBwb3J0IGljb25zLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIExpc3RWaWV3ZXIgbGlzdFZpZXdlcjsNCisNCisJLyoqDQorCSAqIFRoaXMgc2hvd3MgaG93IGEgdGFibGUgdmlldyB3b3Jrcy4NCisJICogQSB0YWJsZSBjYW4gYmUgdXNlZCBhcyBhIGxpc3Qgd2l0aCBpY29ucy4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCBUYWJsZVZpZXdlciB0YWJsZVZpZXdlcjsNCisNCisJLyoqDQorCSAqIFRoaXMgc2hvd3MgaG93IGEgdHJlZSB2aWV3IHdpdGggY29sdW1ucyB3b3Jrcy4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCBUcmVlVmlld2VyIHRyZWVWaWV3ZXJXaXRoQ29sdW1uczsNCisNCisJLyoqDQorCSAqIFRoaXMga2VlcHMgdHJhY2sgb2YgdGhlIGFjdGl2ZSB2aWV3ZXIgcGFuZSwgaW4gdGhlIGJvb2suDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgVmlld2VyUGFuZSBjdXJyZW50Vmlld2VyUGFuZTsNCisNCisJLyoqDQorCSAqIFRoaXMga2VlcHMgdHJhY2sgb2YgdGhlIGFjdGl2ZSBjb250ZW50IHZpZXdlciwgd2hpY2ggbWF5IGJlIGVpdGhlciBvbmUgb2YgdGhlIHZpZXdlcnMgaW4gdGhlIHBhZ2VzIG9yIHRoZSBjb250ZW50IG91dGxpbmUgdmlld2VyLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIFZpZXdlciBjdXJyZW50Vmlld2VyOw0KKw0KKwkvKioNCisJICogVGhpcyBsaXN0ZW5zIHRvIHdoaWNoIGV2ZXIgdmlld2VyIGlzIGFjdGl2ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCBJU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyIHNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcjsNCisNCisJLyoqDQorCSAqIFRoaXMga2VlcHMgdHJhY2sgb2YgYWxsIHRoZSB7QGxpbmsgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyfXMgdGhhdCBhcmUgbGlzdGVuaW5nIHRvIHRoaXMgZWRpdG9yLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIENvbGxlY3Rpb248SVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcj4gc2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVycyA9IG5ldyBBcnJheUxpc3Q8SVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcj4oKTsNCisNCisJLyoqDQorCSAqIFRoaXMga2VlcHMgdHJhY2sgb2YgdGhlIHNlbGVjdGlvbiBvZiB0aGUgZWRpdG9yIGFzIGEgd2hvbGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgSVNlbGVjdGlvbiBlZGl0b3JTZWxlY3Rpb24gPSBTdHJ1Y3R1cmVkU2VsZWN0aW9uLkVNUFRZOw0KKw0KKwkvKioNCisJICogVGhlIE1hcmtlckhlbHBlciBpcyByZXNwb25zaWJsZSBmb3IgY3JlYXRpbmcgd29ya3NwYWNlIHJlc291cmNlIG1hcmtlcnMgcHJlc2VudGVkDQorCSAqIGluIEVjbGlwc2UncyBQcm9ibGVtcyBWaWV3Lg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIE1hcmtlckhlbHBlciBtYXJrZXJIZWxwZXIgPSBuZXcgRWRpdFVJTWFya2VySGVscGVyKCk7DQorDQorCS8qKg0KKwkgKiBUaGlzIGxpc3RlbnMgZm9yIHdoZW4gdGhlIG91dGxpbmUgYmVjb21lcyBhY3RpdmUNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCBJUGFydExpc3RlbmVyIHBhcnRMaXN0ZW5lciA9DQorCQluZXcgSVBhcnRMaXN0ZW5lcigpIHsNCisJCQlwdWJsaWMgdm9pZCBwYXJ0QWN0aXZhdGVkKElXb3JrYmVuY2hQYXJ0IHApIHsNCisJCQkJaWYgKHAgaW5zdGFuY2VvZiBDb250ZW50T3V0bGluZSkgew0KKwkJCQkJaWYgKCgoQ29udGVudE91dGxpbmUpcCkuZ2V0Q3VycmVudFBhZ2UoKSA9PSBjb250ZW50T3V0bGluZVBhZ2UpIHsNCisJCQkJCQlnZXRBY3Rpb25CYXJDb250cmlidXRvcigpLnNldEFjdGl2ZUVkaXRvcihTdGFuZGFyZEVkaXRvci50aGlzKTsNCisNCisJCQkJCQlzZXRDdXJyZW50Vmlld2VyKGNvbnRlbnRPdXRsaW5lVmlld2VyKTsNCisJCQkJCX0NCisJCQkJfQ0KKwkJCQllbHNlIGlmIChwIGluc3RhbmNlb2YgUHJvcGVydHlTaGVldCkgew0KKwkJCQkJaWYgKCgoUHJvcGVydHlTaGVldClwKS5nZXRDdXJyZW50UGFnZSgpID09IHByb3BlcnR5U2hlZXRQYWdlKSB7DQorCQkJCQkJZ2V0QWN0aW9uQmFyQ29udHJpYnV0b3IoKS5zZXRBY3RpdmVFZGl0b3IoU3RhbmRhcmRFZGl0b3IudGhpcyk7DQorCQkJCQkJaGFuZGxlQWN0aXZhdGUoKTsNCisJCQkJCX0NCisJCQkJfQ0KKwkJCQllbHNlIGlmIChwID09IFN0YW5kYXJkRWRpdG9yLnRoaXMpIHsNCisJCQkJCWhhbmRsZUFjdGl2YXRlKCk7DQorCQkJCX0NCisJCQl9DQorCQkJcHVibGljIHZvaWQgcGFydEJyb3VnaHRUb1RvcChJV29ya2JlbmNoUGFydCBwKSB7DQorCQkJCS8vIElnbm9yZS4NCisJCQl9DQorCQkJcHVibGljIHZvaWQgcGFydENsb3NlZChJV29ya2JlbmNoUGFydCBwKSB7DQorCQkJCS8vIElnbm9yZS4NCisJCQl9DQorCQkJcHVibGljIHZvaWQgcGFydERlYWN0aXZhdGVkKElXb3JrYmVuY2hQYXJ0IHApIHsNCisJCQkJLy8gSWdub3JlLg0KKwkJCX0NCisJCQlwdWJsaWMgdm9pZCBwYXJ0T3BlbmVkKElXb3JrYmVuY2hQYXJ0IHApIHsNCisJCQkJLy8gSWdub3JlLg0KKwkJCX0NCisJCX07DQorDQorCS8qKg0KKwkgKiBSZXNvdXJjZXMgdGhhdCBoYXZlIGJlZW4gcmVtb3ZlZCBzaW5jZSBsYXN0IGFjdGl2YXRpb24uDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgQ29sbGVjdGlvbjxSZXNvdXJjZT4gcmVtb3ZlZFJlc291cmNlcyA9IG5ldyBBcnJheUxpc3Q8UmVzb3VyY2U+KCk7DQorDQorCS8qKg0KKwkgKiBSZXNvdXJjZXMgdGhhdCBoYXZlIGJlZW4gY2hhbmdlZCBzaW5jZSBsYXN0IGFjdGl2YXRpb24uDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgQ29sbGVjdGlvbjxSZXNvdXJjZT4gY2hhbmdlZFJlc291cmNlcyA9IG5ldyBBcnJheUxpc3Q8UmVzb3VyY2U+KCk7DQorDQorCS8qKg0KKwkgKiBSZXNvdXJjZXMgdGhhdCBoYXZlIGJlZW4gc2F2ZWQuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgQ29sbGVjdGlvbjxSZXNvdXJjZT4gc2F2ZWRSZXNvdXJjZXMgPSBuZXcgQXJyYXlMaXN0PFJlc291cmNlPigpOw0KKw0KKwkvKioNCisJICogTWFwIHRvIHN0b3JlIHRoZSBkaWFnbm9zdGljIGFzc29jaWF0ZWQgd2l0aCBhIHJlc291cmNlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIE1hcDxSZXNvdXJjZSwgRGlhZ25vc3RpYz4gcmVzb3VyY2VUb0RpYWdub3N0aWNNYXAgPSBuZXcgTGlua2VkSGFzaE1hcDxSZXNvdXJjZSwgRGlhZ25vc3RpYz4oKTsNCisNCisJLyoqDQorCSAqIENvbnRyb2xzIHdoZXRoZXIgdGhlIHByb2JsZW0gaW5kaWNhdGlvbiBzaG91bGQgYmUgdXBkYXRlZC4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCBib29sZWFuIHVwZGF0ZVByb2JsZW1JbmRpY2F0aW9uID0gdHJ1ZTsNCisNCisJLyoqDQorCSAqIEFkYXB0ZXIgdXNlZCB0byB1cGRhdGUgdGhlIHByb2JsZW0gaW5kaWNhdGlvbiB3aGVuIHJlc291cmNlcyBhcmUgZGVtYW5kZWQgbG9hZGVkLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIEVDb250ZW50QWRhcHRlciBwcm9ibGVtSW5kaWNhdGlvbkFkYXB0ZXIgPSANCisJCW5ldyBFQ29udGVudEFkYXB0ZXIoKSB7DQorCQkJQE92ZXJyaWRlDQorCQkJcHVibGljIHZvaWQgbm90aWZ5Q2hhbmdlZChOb3RpZmljYXRpb24gbm90aWZpY2F0aW9uKSB7DQorCQkJCWlmIChub3RpZmljYXRpb24uZ2V0Tm90aWZpZXIoKSBpbnN0YW5jZW9mIFJlc291cmNlKSB7DQorCQkJCQlzd2l0Y2ggKG5vdGlmaWNhdGlvbi5nZXRGZWF0dXJlSUQoUmVzb3VyY2UuY2xhc3MpKSB7DQorCQkJCQkJY2FzZSBSZXNvdXJjZS5SRVNPVVJDRV9fSVNfTE9BREVEOg0KKwkJCQkJCWNhc2UgUmVzb3VyY2UuUkVTT1VSQ0VfX0VSUk9SUzoNCisJCQkJCQljYXNlIFJlc291cmNlLlJFU09VUkNFX19XQVJOSU5HUzogew0KKwkJCQkJCQlSZXNvdXJjZSByZXNvdXJjZSA9IChSZXNvdXJjZSlub3RpZmljYXRpb24uZ2V0Tm90aWZpZXIoKTsNCisJCQkJCQkJRGlhZ25vc3RpYyBkaWFnbm9zdGljID0gYW5hbHl6ZVJlc291cmNlUHJvYmxlbXMocmVzb3VyY2UsIG51bGwpOw0KKwkJCQkJCQlpZiAoZGlhZ25vc3RpYy5nZXRTZXZlcml0eSgpICE9IERpYWdub3N0aWMuT0spIHsNCisJCQkJCQkJCXJlc291cmNlVG9EaWFnbm9zdGljTWFwLnB1dChyZXNvdXJjZSwgZGlhZ25vc3RpYyk7DQorCQkJCQkJCX0NCisJCQkJCQkJZWxzZSB7DQorCQkJCQkJCQlyZXNvdXJjZVRvRGlhZ25vc3RpY01hcC5yZW1vdmUocmVzb3VyY2UpOw0KKwkJCQkJCQl9DQorDQorCQkJCQkJCWlmICh1cGRhdGVQcm9ibGVtSW5kaWNhdGlvbikgew0KKwkJCQkJCQkJZ2V0U2l0ZSgpLmdldFNoZWxsKCkuZ2V0RGlzcGxheSgpLmFzeW5jRXhlYw0KKwkJCQkJCQkJCShuZXcgUnVubmFibGUoKSB7DQorCQkJCQkJCQkJCSBwdWJsaWMgdm9pZCBydW4oKSB7DQorCQkJCQkJCQkJCQkgdXBkYXRlUHJvYmxlbUluZGljYXRpb24oKTsNCisJCQkJCQkJCQkJIH0NCisJCQkJCQkJCQkgfSk7DQorCQkJCQkJCX0NCisJCQkJCQkJYnJlYWs7DQorCQkJCQkJfQ0KKwkJCQkJfQ0KKwkJCQl9DQorCQkJCWVsc2Ugew0KKwkJCQkJc3VwZXIubm90aWZ5Q2hhbmdlZChub3RpZmljYXRpb24pOw0KKwkJCQl9DQorCQkJfQ0KKw0KKwkJCUBPdmVycmlkZQ0KKwkJCXByb3RlY3RlZCB2b2lkIHNldFRhcmdldChSZXNvdXJjZSB0YXJnZXQpIHsNCisJCQkJYmFzaWNTZXRUYXJnZXQodGFyZ2V0KTsNCisJCQl9DQorDQorCQkJQE92ZXJyaWRlDQorCQkJcHJvdGVjdGVkIHZvaWQgdW5zZXRUYXJnZXQoUmVzb3VyY2UgdGFyZ2V0KSB7DQorCQkJCWJhc2ljVW5zZXRUYXJnZXQodGFyZ2V0KTsNCisJCQl9DQorCQl9Ow0KKw0KKwkvKioNCisJICogVGhpcyBsaXN0ZW5zIGZvciB3b3Jrc3BhY2UgY2hhbmdlcy4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCBJUmVzb3VyY2VDaGFuZ2VMaXN0ZW5lciByZXNvdXJjZUNoYW5nZUxpc3RlbmVyID0NCisJCW5ldyBJUmVzb3VyY2VDaGFuZ2VMaXN0ZW5lcigpIHsNCisJCQlwdWJsaWMgdm9pZCByZXNvdXJjZUNoYW5nZWQoSVJlc291cmNlQ2hhbmdlRXZlbnQgZXZlbnQpIHsNCisJCQkJSVJlc291cmNlRGVsdGEgZGVsdGEgPSBldmVudC5nZXREZWx0YSgpOw0KKwkJCQl0cnkgew0KKwkJCQkJY2xhc3MgUmVzb3VyY2VEZWx0YVZpc2l0b3IgaW1wbGVtZW50cyBJUmVzb3VyY2VEZWx0YVZpc2l0b3Igew0KKwkJCQkJCXByb3RlY3RlZCBSZXNvdXJjZVNldCByZXNvdXJjZVNldCA9IGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKTsNCisJCQkJCQlwcm90ZWN0ZWQgQ29sbGVjdGlvbjxSZXNvdXJjZT4gY2hhbmdlZFJlc291cmNlcyA9IG5ldyBBcnJheUxpc3Q8UmVzb3VyY2U+KCk7DQorCQkJCQkJcHJvdGVjdGVkIENvbGxlY3Rpb248UmVzb3VyY2U+IHJlbW92ZWRSZXNvdXJjZXMgPSBuZXcgQXJyYXlMaXN0PFJlc291cmNlPigpOw0KKw0KKwkJCQkJCXB1YmxpYyBib29sZWFuIHZpc2l0KElSZXNvdXJjZURlbHRhIGRlbHRhKSB7DQorCQkJCQkJCWlmIChkZWx0YS5nZXRSZXNvdXJjZSgpLmdldFR5cGUoKSA9PSBJUmVzb3VyY2UuRklMRSkgew0KKwkJCQkJCQkJaWYgKGRlbHRhLmdldEtpbmQoKSA9PSBJUmVzb3VyY2VEZWx0YS5SRU1PVkVEIHx8DQorCQkJCQkJCQkgICAgZGVsdGEuZ2V0S2luZCgpID09IElSZXNvdXJjZURlbHRhLkNIQU5HRUQgJiYgZGVsdGEuZ2V0RmxhZ3MoKSAhPSBJUmVzb3VyY2VEZWx0YS5NQVJLRVJTKSB7DQorCQkJCQkJCQkJUmVzb3VyY2UgcmVzb3VyY2UgPSByZXNvdXJjZVNldC5nZXRSZXNvdXJjZShVUkkuY3JlYXRlUGxhdGZvcm1SZXNvdXJjZVVSSShkZWx0YS5nZXRGdWxsUGF0aCgpLnRvU3RyaW5nKCksIHRydWUpLCBmYWxzZSk7DQorCQkJCQkJCQkJaWYgKHJlc291cmNlICE9IG51bGwpIHsNCisJCQkJCQkJCQkJaWYgKGRlbHRhLmdldEtpbmQoKSA9PSBJUmVzb3VyY2VEZWx0YS5SRU1PVkVEKSB7DQorCQkJCQkJCQkJCQlyZW1vdmVkUmVzb3VyY2VzLmFkZChyZXNvdXJjZSk7DQorCQkJCQkJCQkJCX0NCisJCQkJCQkJCQkJZWxzZSBpZiAoIXNhdmVkUmVzb3VyY2VzLnJlbW92ZShyZXNvdXJjZSkpIHsNCisJCQkJCQkJCQkJCWNoYW5nZWRSZXNvdXJjZXMuYWRkKHJlc291cmNlKTsNCisJCQkJCQkJCQkJfQ0KKwkJCQkJCQkJCX0NCisJCQkJCQkJCX0NCisJCQkJCQkJfQ0KKw0KKwkJCQkJCQlyZXR1cm4gdHJ1ZTsNCisJCQkJCQl9DQorDQorCQkJCQkJcHVibGljIENvbGxlY3Rpb248UmVzb3VyY2U+IGdldENoYW5nZWRSZXNvdXJjZXMoKSB7DQorCQkJCQkJCXJldHVybiBjaGFuZ2VkUmVzb3VyY2VzOw0KKwkJCQkJCX0NCisNCisJCQkJCQlwdWJsaWMgQ29sbGVjdGlvbjxSZXNvdXJjZT4gZ2V0UmVtb3ZlZFJlc291cmNlcygpIHsNCisJCQkJCQkJcmV0dXJuIHJlbW92ZWRSZXNvdXJjZXM7DQorCQkJCQkJfQ0KKwkJCQkJfQ0KKw0KKwkJCQkJZmluYWwgUmVzb3VyY2VEZWx0YVZpc2l0b3IgdmlzaXRvciA9IG5ldyBSZXNvdXJjZURlbHRhVmlzaXRvcigpOw0KKwkJCQkJZGVsdGEuYWNjZXB0KHZpc2l0b3IpOw0KKw0KKwkJCQkJaWYgKCF2aXNpdG9yLmdldFJlbW92ZWRSZXNvdXJjZXMoKS5pc0VtcHR5KCkpIHsNCisJCQkJCQlnZXRTaXRlKCkuZ2V0U2hlbGwoKS5nZXREaXNwbGF5KCkuYXN5bmNFeGVjDQorCQkJCQkJCShuZXcgUnVubmFibGUoKSB7DQorCQkJCQkJCQkgcHVibGljIHZvaWQgcnVuKCkgew0KKwkJCQkJCQkJCSByZW1vdmVkUmVzb3VyY2VzLmFkZEFsbCh2aXNpdG9yLmdldFJlbW92ZWRSZXNvdXJjZXMoKSk7DQorCQkJCQkJCQkJIGlmICghaXNEaXJ0eSgpKSB7DQorCQkJCQkJCQkJCSBnZXRTaXRlKCkuZ2V0UGFnZSgpLmNsb3NlRWRpdG9yKFN0YW5kYXJkRWRpdG9yLnRoaXMsIGZhbHNlKTsNCisJCQkJCQkJCQkgfQ0KKwkJCQkJCQkJIH0NCisJCQkJCQkJIH0pOw0KKwkJCQkJfQ0KKw0KKwkJCQkJaWYgKCF2aXNpdG9yLmdldENoYW5nZWRSZXNvdXJjZXMoKS5pc0VtcHR5KCkpIHsNCisJCQkJCQlnZXRTaXRlKCkuZ2V0U2hlbGwoKS5nZXREaXNwbGF5KCkuYXN5bmNFeGVjDQorCQkJCQkJCShuZXcgUnVubmFibGUoKSB7DQorCQkJCQkJCQkgcHVibGljIHZvaWQgcnVuKCkgew0KKwkJCQkJCQkJCSBjaGFuZ2VkUmVzb3VyY2VzLmFkZEFsbCh2aXNpdG9yLmdldENoYW5nZWRSZXNvdXJjZXMoKSk7DQorCQkJCQkJCQkJIGlmIChnZXRTaXRlKCkuZ2V0UGFnZSgpLmdldEFjdGl2ZUVkaXRvcigpID09IFN0YW5kYXJkRWRpdG9yLnRoaXMpIHsNCisJCQkJCQkJCQkJIGhhbmRsZUFjdGl2YXRlKCk7DQorCQkJCQkJCQkJIH0NCisJCQkJCQkJCSB9DQorCQkJCQkJCSB9KTsNCisJCQkJCX0NCisJCQkJfQ0KKwkJCQljYXRjaCAoQ29yZUV4Y2VwdGlvbiBleGNlcHRpb24pIHsNCisJCQkJCVN0YW5kYXJkRWRpdG9yUGx1Z2luLklOU1RBTkNFLmxvZyhleGNlcHRpb24pOw0KKwkJCQl9DQorCQkJfQ0KKwkJfTsNCisNCisJLyoqDQorCSAqIEhhbmRsZXMgYWN0aXZhdGlvbiBvZiB0aGUgZWRpdG9yIG9yIGl0J3MgYXNzb2NpYXRlZCB2aWV3cy4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCB2b2lkIGhhbmRsZUFjdGl2YXRlKCkgew0KKwkJLy8gUmVjb21wdXRlIHRoZSByZWFkIG9ubHkgc3RhdGUuDQorCQkvLw0KKwkJaWYgKGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VUb1JlYWRPbmx5TWFwKCkgIT0gbnVsbCkgew0KKwkJICBlZGl0aW5nRG9tYWluLmdldFJlc291cmNlVG9SZWFkT25seU1hcCgpLmNsZWFyKCk7DQorDQorCQkgIC8vIFJlZnJlc2ggYW55IGFjdGlvbnMgdGhhdCBtYXkgYmVjb21lIGVuYWJsZWQgb3IgZGlzYWJsZWQuDQorCQkgIC8vDQorCQkgIHNldFNlbGVjdGlvbihnZXRTZWxlY3Rpb24oKSk7DQorCQl9DQorDQorCQlpZiAoIXJlbW92ZWRSZXNvdXJjZXMuaXNFbXB0eSgpKSB7DQorCQkJaWYgKGhhbmRsZURpcnR5Q29uZmxpY3QoKSkgew0KKwkJCQlnZXRTaXRlKCkuZ2V0UGFnZSgpLmNsb3NlRWRpdG9yKFN0YW5kYXJkRWRpdG9yLnRoaXMsIGZhbHNlKTsNCisJCQl9DQorCQkJZWxzZSB7DQorCQkJCXJlbW92ZWRSZXNvdXJjZXMuY2xlYXIoKTsNCisJCQkJY2hhbmdlZFJlc291cmNlcy5jbGVhcigpOw0KKwkJCQlzYXZlZFJlc291cmNlcy5jbGVhcigpOw0KKwkJCX0NCisJCX0NCisJCWVsc2UgaWYgKCFjaGFuZ2VkUmVzb3VyY2VzLmlzRW1wdHkoKSkgew0KKwkJCWNoYW5nZWRSZXNvdXJjZXMucmVtb3ZlQWxsKHNhdmVkUmVzb3VyY2VzKTsNCisJCQloYW5kbGVDaGFuZ2VkUmVzb3VyY2VzKCk7DQorCQkJY2hhbmdlZFJlc291cmNlcy5jbGVhcigpOw0KKwkJCXNhdmVkUmVzb3VyY2VzLmNsZWFyKCk7DQorCQl9DQorCX0NCisNCisJLyoqDQorCSAqIEhhbmRsZXMgd2hhdCB0byBkbyB3aXRoIGNoYW5nZWQgcmVzb3VyY2VzIG9uIGFjdGl2YXRpb24uDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgdm9pZCBoYW5kbGVDaGFuZ2VkUmVzb3VyY2VzKCkgew0KKwkJaWYgKCFjaGFuZ2VkUmVzb3VyY2VzLmlzRW1wdHkoKSAmJiAoIWlzRGlydHkoKSB8fCBoYW5kbGVEaXJ0eUNvbmZsaWN0KCkpKSB7DQorCQkJaWYgKGlzRGlydHkoKSkgew0KKwkJCQljaGFuZ2VkUmVzb3VyY2VzLmFkZEFsbChlZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkuZ2V0UmVzb3VyY2VzKCkpOw0KKwkJCX0NCisJCQllZGl0aW5nRG9tYWluLmdldENvbW1hbmRTdGFjaygpLmZsdXNoKCk7DQorDQorCQkJdXBkYXRlUHJvYmxlbUluZGljYXRpb24gPSBmYWxzZTsNCisJCQlmb3IgKFJlc291cmNlIHJlc291cmNlIDogY2hhbmdlZFJlc291cmNlcykgew0KKwkJCQlpZiAocmVzb3VyY2UuaXNMb2FkZWQoKSkgew0KKwkJCQkJcmVzb3VyY2UudW5sb2FkKCk7DQorCQkJCQl0cnkgew0KKwkJCQkJCXJlc291cmNlLmxvYWQoQ29sbGVjdGlvbnMuRU1QVFlfTUFQKTsNCisJCQkJCX0NCisJCQkJCWNhdGNoIChJT0V4Y2VwdGlvbiBleGNlcHRpb24pIHsNCisJCQkJCQlpZiAoIXJlc291cmNlVG9EaWFnbm9zdGljTWFwLmNvbnRhaW5zS2V5KHJlc291cmNlKSkgew0KKwkJCQkJCQlyZXNvdXJjZVRvRGlhZ25vc3RpY01hcC5wdXQocmVzb3VyY2UsIGFuYWx5emVSZXNvdXJjZVByb2JsZW1zKHJlc291cmNlLCBleGNlcHRpb24pKTsNCisJCQkJCQl9DQorCQkJCQl9DQorCQkJCX0NCisJCQl9DQorDQorCQkJaWYgKEFkYXB0ZXJGYWN0b3J5RWRpdGluZ0RvbWFpbi5pc1N0YWxlKGVkaXRvclNlbGVjdGlvbikpIHsNCisJCQkJc2V0U2VsZWN0aW9uKFN0cnVjdHVyZWRTZWxlY3Rpb24uRU1QVFkpOw0KKwkJCX0NCisNCisJCQl1cGRhdGVQcm9ibGVtSW5kaWNhdGlvbiA9IHRydWU7DQorCQkJdXBkYXRlUHJvYmxlbUluZGljYXRpb24oKTsNCisJCX0NCisJfQ0KKyAgDQorCS8qKg0KKwkgKiBVcGRhdGVzIHRoZSBwcm9ibGVtcyBpbmRpY2F0aW9uIHdpdGggdGhlIGluZm9ybWF0aW9uIGRlc2NyaWJlZCBpbiB0aGUgc3BlY2lmaWVkIGRpYWdub3N0aWMuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgdm9pZCB1cGRhdGVQcm9ibGVtSW5kaWNhdGlvbigpIHsNCisJCWlmICh1cGRhdGVQcm9ibGVtSW5kaWNhdGlvbikgew0KKwkJCUJhc2ljRGlhZ25vc3RpYyBkaWFnbm9zdGljID0NCisJCQkJbmV3IEJhc2ljRGlhZ25vc3RpYw0KKwkJCQkJKERpYWdub3N0aWMuT0ssDQorCQkJCQkgIm9yZy5lY2xpcHNlLnN0ZW0udWkucG9wdWxhdGlvbm1vZGVscyIsDQorCQkJCQkgMCwNCisJCQkJCSBudWxsLA0KKwkJCQkJIG5ldyBPYmplY3QgW10geyBlZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkgfSk7DQorCQkJZm9yIChEaWFnbm9zdGljIGNoaWxkRGlhZ25vc3RpYyA6IHJlc291cmNlVG9EaWFnbm9zdGljTWFwLnZhbHVlcygpKSB7DQorCQkJCWlmIChjaGlsZERpYWdub3N0aWMuZ2V0U2V2ZXJpdHkoKSAhPSBEaWFnbm9zdGljLk9LKSB7DQorCQkJCQlkaWFnbm9zdGljLmFkZChjaGlsZERpYWdub3N0aWMpOw0KKwkJCQl9DQorCQkJfQ0KKw0KKwkJCWludCBsYXN0RWRpdG9yUGFnZSA9IGdldFBhZ2VDb3VudCgpIC0gMTsNCisJCQlpZiAobGFzdEVkaXRvclBhZ2UgPj0gMCAmJiBnZXRFZGl0b3IobGFzdEVkaXRvclBhZ2UpIGluc3RhbmNlb2YgUHJvYmxlbUVkaXRvclBhcnQpIHsNCisJCQkJKChQcm9ibGVtRWRpdG9yUGFydClnZXRFZGl0b3IobGFzdEVkaXRvclBhZ2UpKS5zZXREaWFnbm9zdGljKGRpYWdub3N0aWMpOw0KKwkJCQlpZiAoZGlhZ25vc3RpYy5nZXRTZXZlcml0eSgpICE9IERpYWdub3N0aWMuT0spIHsNCisJCQkJCXNldEFjdGl2ZVBhZ2UobGFzdEVkaXRvclBhZ2UpOw0KKwkJCQl9DQorCQkJfQ0KKwkJCWVsc2UgaWYgKGRpYWdub3N0aWMuZ2V0U2V2ZXJpdHkoKSAhPSBEaWFnbm9zdGljLk9LKSB7DQorCQkJCVByb2JsZW1FZGl0b3JQYXJ0IHByb2JsZW1FZGl0b3JQYXJ0ID0gbmV3IFByb2JsZW1FZGl0b3JQYXJ0KCk7DQorCQkJCXByb2JsZW1FZGl0b3JQYXJ0LnNldERpYWdub3N0aWMoZGlhZ25vc3RpYyk7DQorCQkJCXByb2JsZW1FZGl0b3JQYXJ0LnNldE1hcmtlckhlbHBlcihtYXJrZXJIZWxwZXIpOw0KKwkJCQl0cnkgew0KKwkJCQkJYWRkUGFnZSgrK2xhc3RFZGl0b3JQYWdlLCBwcm9ibGVtRWRpdG9yUGFydCwgZ2V0RWRpdG9ySW5wdXQoKSk7DQorCQkJCQlzZXRQYWdlVGV4dChsYXN0RWRpdG9yUGFnZSwgcHJvYmxlbUVkaXRvclBhcnQuZ2V0UGFydE5hbWUoKSk7DQorCQkJCQlzZXRBY3RpdmVQYWdlKGxhc3RFZGl0b3JQYWdlKTsNCisJCQkJCXNob3dUYWJzKCk7DQorCQkJCX0NCisJCQkJY2F0Y2ggKFBhcnRJbml0RXhjZXB0aW9uIGV4Y2VwdGlvbikgew0KKwkJCQkJU3RhbmRhcmRFZGl0b3JQbHVnaW4uSU5TVEFOQ0UubG9nKGV4Y2VwdGlvbik7DQorCQkJCX0NCisJCQl9DQorDQorCQkJaWYgKG1hcmtlckhlbHBlci5oYXNNYXJrZXJzKGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKSkpIHsNCisJCQkJbWFya2VySGVscGVyLmRlbGV0ZU1hcmtlcnMoZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpKTsNCisJCQkJaWYgKGRpYWdub3N0aWMuZ2V0U2V2ZXJpdHkoKSAhPSBEaWFnbm9zdGljLk9LKSB7DQorCQkJCQl0cnkgew0KKwkJCQkJCW1hcmtlckhlbHBlci5jcmVhdGVNYXJrZXJzKGRpYWdub3N0aWMpOw0KKwkJCQkJfQ0KKwkJCQkJY2F0Y2ggKENvcmVFeGNlcHRpb24gZXhjZXB0aW9uKSB7DQorCQkJCQkJU3RhbmRhcmRFZGl0b3JQbHVnaW4uSU5TVEFOQ0UubG9nKGV4Y2VwdGlvbik7DQorCQkJCQl9DQorCQkJCX0NCisJCQl9DQorCQl9DQorCX0NCisNCisJLyoqDQorCSAqIFNob3dzIGEgZGlhbG9nIHRoYXQgYXNrcyBpZiBjb25mbGljdGluZyBjaGFuZ2VzIHNob3VsZCBiZSBkaXNjYXJkZWQuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgYm9vbGVhbiBoYW5kbGVEaXJ0eUNvbmZsaWN0KCkgew0KKwkJcmV0dXJuDQorCQkJTWVzc2FnZURpYWxvZy5vcGVuUXVlc3Rpb24NCisJCQkJKGdldFNpdGUoKS5nZXRTaGVsbCgpLA0KKwkJCQkgZ2V0U3RyaW5nKCJfVUlfRmlsZUNvbmZsaWN0X2xhYmVsIiksDQorCQkJCSBnZXRTdHJpbmcoIl9XQVJOX0ZpbGVDb25mbGljdCIpKTsNCisJfQ0KKw0KKwkvKioNCisJICogVGhpcyBjcmVhdGVzIGEgbW9kZWwgZWRpdG9yLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIFN0YW5kYXJkRWRpdG9yKCkgew0KKwkJc3VwZXIoKTsNCisJCWluaXRpYWxpemVFZGl0aW5nRG9tYWluKCk7DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgc2V0cyB1cCB0aGUgZWRpdGluZyBkb21haW4gZm9yIHRoZSBtb2RlbCBlZGl0b3IuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgdm9pZCBpbml0aWFsaXplRWRpdGluZ0RvbWFpbigpIHsNCisJCS8vIENyZWF0ZSBhbiBhZGFwdGVyIGZhY3RvcnkgdGhhdCB5aWVsZHMgaXRlbSBwcm92aWRlcnMuDQorCQkvLw0KKwkJYWRhcHRlckZhY3RvcnkgPSBuZXcgQ29tcG9zZWRBZGFwdGVyRmFjdG9yeShDb21wb3NlZEFkYXB0ZXJGYWN0b3J5LkRlc2NyaXB0b3IuUmVnaXN0cnkuSU5TVEFOQ0UpOw0KKw0KKwkJYWRhcHRlckZhY3RvcnkuYWRkQWRhcHRlckZhY3RvcnkobmV3IFJlc291cmNlSXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkoKSk7DQorCQlhZGFwdGVyRmFjdG9yeS5hZGRBZGFwdGVyRmFjdG9yeShuZXcgU3RhbmRhcmRJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSgpKTsNCisJCWFkYXB0ZXJGYWN0b3J5LmFkZEFkYXB0ZXJGYWN0b3J5KG5ldyBDb21tb25JdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSgpKTsNCisJCWFkYXB0ZXJGYWN0b3J5LmFkZEFkYXB0ZXJGYWN0b3J5KG5ldyBHcmFwaEl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5KCkpOw0KKwkJYWRhcHRlckZhY3RvcnkuYWRkQWRhcHRlckZhY3RvcnkobmV3IE1vZGVsSXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkoKSk7DQorCQlhZGFwdGVyRmFjdG9yeS5hZGRBZGFwdGVyRmFjdG9yeShuZXcgTW9kaWZpZXJJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSgpKTsNCisJCWFkYXB0ZXJGYWN0b3J5LmFkZEFkYXB0ZXJGYWN0b3J5KG5ldyBTY2VuYXJpb0l0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5KCkpOw0KKwkJYWRhcHRlckZhY3RvcnkuYWRkQWRhcHRlckZhY3RvcnkobmV3IFNlcXVlbmNlckl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5KCkpOw0KKwkJYWRhcHRlckZhY3RvcnkuYWRkQWRhcHRlckZhY3RvcnkobmV3IFNvbHZlckl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5KCkpOw0KKwkJYWRhcHRlckZhY3RvcnkuYWRkQWRhcHRlckZhY3RvcnkobmV3IExhYmVsc0l0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5KCkpOw0KKwkJYWRhcHRlckZhY3RvcnkuYWRkQWRhcHRlckZhY3RvcnkobmV3IEVjb3JlSXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkoKSk7DQorCQlhZGFwdGVyRmFjdG9yeS5hZGRBZGFwdGVyRmFjdG9yeShuZXcgTG9nZ2VySXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkoKSk7DQorCQlhZGFwdGVyRmFjdG9yeS5hZGRBZGFwdGVyRmFjdG9yeShuZXcgUmVmbGVjdGl2ZUl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5KCkpOw0KKw0KKwkJLy8gQ3JlYXRlIHRoZSBjb21tYW5kIHN0YWNrIHRoYXQgd2lsbCBub3RpZnkgdGhpcyBlZGl0b3IgYXMgY29tbWFuZHMgYXJlIGV4ZWN1dGVkLg0KKwkJLy8NCisJCUJhc2ljQ29tbWFuZFN0YWNrIGNvbW1hbmRTdGFjayA9IG5ldyBCYXNpY0NvbW1hbmRTdGFjaygpOw0KKw0KKwkJLy8gQWRkIGEgbGlzdGVuZXIgdG8gc2V0IHRoZSBtb3N0IHJlY2VudCBjb21tYW5kJ3MgYWZmZWN0ZWQgb2JqZWN0cyB0byBiZSB0aGUgc2VsZWN0aW9uIG9mIHRoZSB2aWV3ZXIgd2l0aCBmb2N1cy4NCisJCS8vDQorCQljb21tYW5kU3RhY2suYWRkQ29tbWFuZFN0YWNrTGlzdGVuZXINCisJCQkobmV3IENvbW1hbmRTdGFja0xpc3RlbmVyKCkgew0KKwkJCQkgcHVibGljIHZvaWQgY29tbWFuZFN0YWNrQ2hhbmdlZChmaW5hbCBFdmVudE9iamVjdCBldmVudCkgew0KKwkJCQkJIGdldENvbnRhaW5lcigpLmdldERpc3BsYXkoKS5hc3luY0V4ZWMNCisJCQkJCQkgKG5ldyBSdW5uYWJsZSgpIHsNCisJCQkJCQkJICBwdWJsaWMgdm9pZCBydW4oKSB7DQorCQkJCQkJCQkgIGZpcmVQcm9wZXJ0eUNoYW5nZShJRWRpdG9yUGFydC5QUk9QX0RJUlRZKTsNCisNCisJCQkJCQkJCSAgLy8gVHJ5IHRvIHNlbGVjdCB0aGUgYWZmZWN0ZWQgb2JqZWN0cy4NCisJCQkJCQkJCSAgLy8NCisJCQkJCQkJCSAgQ29tbWFuZCBtb3N0UmVjZW50Q29tbWFuZCA9ICgoQ29tbWFuZFN0YWNrKWV2ZW50LmdldFNvdXJjZSgpKS5nZXRNb3N0UmVjZW50Q29tbWFuZCgpOw0KKwkJCQkJCQkJICBpZiAobW9zdFJlY2VudENvbW1hbmQgIT0gbnVsbCkgew0KKwkJCQkJCQkJCSAgc2V0U2VsZWN0aW9uVG9WaWV3ZXIobW9zdFJlY2VudENvbW1hbmQuZ2V0QWZmZWN0ZWRPYmplY3RzKCkpOw0KKwkJCQkJCQkJICB9DQorCQkJCQkJCQkgIGlmIChwcm9wZXJ0eVNoZWV0UGFnZSAhPSBudWxsICYmICFwcm9wZXJ0eVNoZWV0UGFnZS5nZXRDb250cm9sKCkuaXNEaXNwb3NlZCgpKSB7DQorCQkJCQkJCQkJICBwcm9wZXJ0eVNoZWV0UGFnZS5yZWZyZXNoKCk7DQorCQkJCQkJCQkgIH0NCisJCQkJCQkJICB9DQorCQkJCQkJICB9KTsNCisJCQkJIH0NCisJCQkgfSk7DQorDQorCQkvLyBDcmVhdGUgdGhlIGVkaXRpbmcgZG9tYWluIHdpdGggYSBzcGVjaWFsIGNvbW1hbmQgc3RhY2suDQorCQkvLw0KKwkJZWRpdGluZ0RvbWFpbiA9IG5ldyBBZGFwdGVyRmFjdG9yeUVkaXRpbmdEb21haW4oYWRhcHRlckZhY3RvcnksIGNvbW1hbmRTdGFjaywgbmV3IEhhc2hNYXA8UmVzb3VyY2UsIEJvb2xlYW4+KCkpOw0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIGlzIGhlcmUgZm9yIHRoZSBsaXN0ZW5lciB0byBiZSBhYmxlIHRvIGNhbGwgaXQuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwkJCUBPdmVycmlkZQ0KKwlwcm90ZWN0ZWQgdm9pZCBmaXJlUHJvcGVydHlDaGFuZ2UoaW50IGFjdGlvbikgew0KKwkJc3VwZXIuZmlyZVByb3BlcnR5Q2hhbmdlKGFjdGlvbik7DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgc2V0cyB0aGUgc2VsZWN0aW9uIGludG8gd2hpY2hldmVyIHZpZXdlciBpcyBhY3RpdmUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgdm9pZCBzZXRTZWxlY3Rpb25Ub1ZpZXdlcihDb2xsZWN0aW9uPD8+IGNvbGxlY3Rpb24pIHsNCisJCWZpbmFsIENvbGxlY3Rpb248Pz4gdGhlU2VsZWN0aW9uID0gY29sbGVjdGlvbjsNCisJCS8vIE1ha2Ugc3VyZSBpdCdzIG9rYXkuDQorCQkvLw0KKwkJaWYgKHRoZVNlbGVjdGlvbiAhPSBudWxsICYmICF0aGVTZWxlY3Rpb24uaXNFbXB0eSgpKSB7DQorCQkJUnVubmFibGUgcnVubmFibGUgPQ0KKwkJCQluZXcgUnVubmFibGUoKSB7DQorCQkJCQlwdWJsaWMgdm9pZCBydW4oKSB7DQorCQkJCQkJLy8gVHJ5IHRvIHNlbGVjdCB0aGUgaXRlbXMgaW4gdGhlIGN1cnJlbnQgY29udGVudCB2aWV3ZXIgb2YgdGhlIGVkaXRvci4NCisJCQkJCQkvLw0KKwkJCQkJCWlmIChjdXJyZW50Vmlld2VyICE9IG51bGwpIHsNCisJCQkJCQkJY3VycmVudFZpZXdlci5zZXRTZWxlY3Rpb24obmV3IFN0cnVjdHVyZWRTZWxlY3Rpb24odGhlU2VsZWN0aW9uLnRvQXJyYXkoKSksIHRydWUpOw0KKwkJCQkJCX0NCisJCQkJCX0NCisJCQkJfTsNCisJCQlnZXRTaXRlKCkuZ2V0U2hlbGwoKS5nZXREaXNwbGF5KCkuYXN5bmNFeGVjKHJ1bm5hYmxlKTsNCisJCX0NCisJfQ0KKw0KKwkvKioNCisJICogVGhpcyByZXR1cm5zIHRoZSBlZGl0aW5nIGRvbWFpbiBhcyByZXF1aXJlZCBieSB0aGUge0BsaW5rIElFZGl0aW5nRG9tYWluUHJvdmlkZXJ9IGludGVyZmFjZS4NCisJICogVGhpcyBpcyBpbXBvcnRhbnQgZm9yIGltcGxlbWVudGluZyB0aGUgc3RhdGljIG1ldGhvZHMgb2Yge0BsaW5rIEFkYXB0ZXJGYWN0b3J5RWRpdGluZ0RvbWFpbn0NCisJICogYW5kIGZvciBzdXBwb3J0aW5nIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5hY3Rpb24uQ29tbWFuZEFjdGlvbn0uDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgRWRpdGluZ0RvbWFpbiBnZXRFZGl0aW5nRG9tYWluKCkgew0KKwkJcmV0dXJuIGVkaXRpbmdEb21haW47DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgY2xhc3MgUmV2ZXJzZUFkYXB0ZXJGYWN0b3J5Q29udGVudFByb3ZpZGVyIGV4dGVuZHMgQWRhcHRlckZhY3RvcnlDb250ZW50UHJvdmlkZXIgew0KKwkJLyoqDQorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCQkgKiBAZ2VuZXJhdGVkDQorCQkgKi8NCisJCXB1YmxpYyBSZXZlcnNlQWRhcHRlckZhY3RvcnlDb250ZW50UHJvdmlkZXIoQWRhcHRlckZhY3RvcnkgYWRhcHRlckZhY3RvcnkpIHsNCisJCQlzdXBlcihhZGFwdGVyRmFjdG9yeSk7DQorCQl9DQorDQorCQkvKioNCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJCSAqIEBnZW5lcmF0ZWQNCisJCSAqLw0KKwkJQE92ZXJyaWRlDQorCQlwdWJsaWMgT2JqZWN0IFtdIGdldEVsZW1lbnRzKE9iamVjdCBvYmplY3QpIHsNCisJCQlPYmplY3QgcGFyZW50ID0gc3VwZXIuZ2V0UGFyZW50KG9iamVjdCk7DQorCQkJcmV0dXJuIChwYXJlbnQgPT0gbnVsbCA/IENvbGxlY3Rpb25zLkVNUFRZX1NFVCA6IENvbGxlY3Rpb25zLnNpbmdsZXRvbihwYXJlbnQpKS50b0FycmF5KCk7DQorCQl9DQorDQorCQkvKioNCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJCSAqIEBnZW5lcmF0ZWQNCisJCSAqLw0KKwkJQE92ZXJyaWRlDQorCQlwdWJsaWMgT2JqZWN0IFtdIGdldENoaWxkcmVuKE9iamVjdCBvYmplY3QpIHsNCisJCQlPYmplY3QgcGFyZW50ID0gc3VwZXIuZ2V0UGFyZW50KG9iamVjdCk7DQorCQkJcmV0dXJuIChwYXJlbnQgPT0gbnVsbCA/IENvbGxlY3Rpb25zLkVNUFRZX1NFVCA6IENvbGxlY3Rpb25zLnNpbmdsZXRvbihwYXJlbnQpKS50b0FycmF5KCk7DQorCQl9DQorDQorCQkvKioNCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJCSAqIEBnZW5lcmF0ZWQNCisJCSAqLw0KKwkJQE92ZXJyaWRlDQorCQlwdWJsaWMgYm9vbGVhbiBoYXNDaGlsZHJlbihPYmplY3Qgb2JqZWN0KSB7DQorCQkJT2JqZWN0IHBhcmVudCA9IHN1cGVyLmdldFBhcmVudChvYmplY3QpOw0KKwkJCXJldHVybiBwYXJlbnQgIT0gbnVsbDsNCisJCX0NCisNCisJCS8qKg0KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkJICogQGdlbmVyYXRlZA0KKwkJICovDQorCQlAT3ZlcnJpZGUNCisJCXB1YmxpYyBPYmplY3QgZ2V0UGFyZW50KE9iamVjdCBvYmplY3QpIHsNCisJCQlyZXR1cm4gbnVsbDsNCisJCX0NCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyB2b2lkIHNldEN1cnJlbnRWaWV3ZXJQYW5lKFZpZXdlclBhbmUgdmlld2VyUGFuZSkgew0KKwkJaWYgKGN1cnJlbnRWaWV3ZXJQYW5lICE9IHZpZXdlclBhbmUpIHsNCisJCQlpZiAoY3VycmVudFZpZXdlclBhbmUgIT0gbnVsbCkgew0KKwkJCQljdXJyZW50Vmlld2VyUGFuZS5zaG93Rm9jdXMoZmFsc2UpOw0KKwkJCX0NCisJCQljdXJyZW50Vmlld2VyUGFuZSA9IHZpZXdlclBhbmU7DQorCQl9DQorCQlzZXRDdXJyZW50Vmlld2VyKGN1cnJlbnRWaWV3ZXJQYW5lLmdldFZpZXdlcigpKTsNCisJfQ0KKw0KKwkvKioNCisJICogVGhpcyBtYWtlcyBzdXJlIHRoYXQgb25lIGNvbnRlbnQgdmlld2VyLCBlaXRoZXIgZm9yIHRoZSBjdXJyZW50IHBhZ2Ugb3IgdGhlIG91dGxpbmUgdmlldywgaWYgaXQgaGFzIGZvY3VzLA0KKwkgKiBpcyB0aGUgY3VycmVudCBvbmUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgdm9pZCBzZXRDdXJyZW50Vmlld2VyKFZpZXdlciB2aWV3ZXIpIHsNCisJCS8vIElmIGl0IGlzIGNoYW5naW5nLi4uDQorCQkvLw0KKwkJaWYgKGN1cnJlbnRWaWV3ZXIgIT0gdmlld2VyKSB7DQorCQkJaWYgKHNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lciA9PSBudWxsKSB7DQorCQkJCS8vIENyZWF0ZSB0aGUgbGlzdGVuZXIgb24gZGVtYW5kLg0KKwkJCQkvLw0KKwkJCQlzZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIgPQ0KKwkJCQkJbmV3IElTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIoKSB7DQorCQkJCQkJLy8gVGhpcyBqdXN0IG5vdGlmaWVzIHRob3NlIHRoaW5ncyB0aGF0IGFyZSBhZmZlY3RlZCBieSB0aGUgc2VjdGlvbi4NCisJCQkJCQkvLw0KKwkJCQkJCXB1YmxpYyB2b2lkIHNlbGVjdGlvbkNoYW5nZWQoU2VsZWN0aW9uQ2hhbmdlZEV2ZW50IHNlbGVjdGlvbkNoYW5nZWRFdmVudCkgew0KKwkJCQkJCQlzZXRTZWxlY3Rpb24oc2VsZWN0aW9uQ2hhbmdlZEV2ZW50LmdldFNlbGVjdGlvbigpKTsNCisJCQkJCQl9DQorCQkJCQl9Ow0KKwkJCX0NCisNCisJCQkvLyBTdG9wIGxpc3RlbmluZyB0byB0aGUgb2xkIG9uZS4NCisJCQkvLw0KKwkJCWlmIChjdXJyZW50Vmlld2VyICE9IG51bGwpIHsNCisJCQkJY3VycmVudFZpZXdlci5yZW1vdmVTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIoc2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyKTsNCisJCQl9DQorDQorCQkJLy8gU3RhcnQgbGlzdGVuaW5nIHRvIHRoZSBuZXcgb25lLg0KKwkJCS8vDQorCQkJaWYgKHZpZXdlciAhPSBudWxsKSB7DQorCQkJCXZpZXdlci5hZGRTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIoc2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyKTsNCisJCQl9DQorDQorCQkJLy8gUmVtZW1iZXIgaXQuDQorCQkJLy8NCisJCQljdXJyZW50Vmlld2VyID0gdmlld2VyOw0KKw0KKwkJCS8vIFNldCB0aGUgZWRpdG9ycyBzZWxlY3Rpb24gYmFzZWQgb24gdGhlIGN1cnJlbnQgdmlld2VyJ3Mgc2VsZWN0aW9uLg0KKwkJCS8vDQorCQkJc2V0U2VsZWN0aW9uKGN1cnJlbnRWaWV3ZXIgPT0gbnVsbCA/IFN0cnVjdHVyZWRTZWxlY3Rpb24uRU1QVFkgOiBjdXJyZW50Vmlld2VyLmdldFNlbGVjdGlvbigpKTsNCisJCX0NCisJfQ0KKw0KKwkvKioNCisJICogVGhpcyByZXR1cm5zIHRoZSB2aWV3ZXIgYXMgcmVxdWlyZWQgYnkgdGhlIHtAbGluayBJVmlld2VyUHJvdmlkZXJ9IGludGVyZmFjZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBWaWV3ZXIgZ2V0Vmlld2VyKCkgew0KKwkJcmV0dXJuIGN1cnJlbnRWaWV3ZXI7DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgY3JlYXRlcyBhIGNvbnRleHQgbWVudSBmb3IgdGhlIHZpZXdlciBhbmQgYWRkcyBhIGxpc3RlbmVyIGFzIHdlbGwgcmVnaXN0ZXJpbmcgdGhlIG1lbnUgZm9yIGV4dGVuc2lvbi4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCB2b2lkIGNyZWF0ZUNvbnRleHRNZW51Rm9yKFN0cnVjdHVyZWRWaWV3ZXIgdmlld2VyKSB7DQorCQlNZW51TWFuYWdlciBjb250ZXh0TWVudSA9IG5ldyBNZW51TWFuYWdlcigiI1BvcFVwIik7DQorCQljb250ZXh0TWVudS5hZGQobmV3IFNlcGFyYXRvcigiYWRkaXRpb25zIikpOw0KKwkJY29udGV4dE1lbnUuc2V0UmVtb3ZlQWxsV2hlblNob3duKHRydWUpOw0KKwkJY29udGV4dE1lbnUuYWRkTWVudUxpc3RlbmVyKHRoaXMpOw0KKwkJTWVudSBtZW51PSBjb250ZXh0TWVudS5jcmVhdGVDb250ZXh0TWVudSh2aWV3ZXIuZ2V0Q29udHJvbCgpKTsNCisJCXZpZXdlci5nZXRDb250cm9sKCkuc2V0TWVudShtZW51KTsNCisJCWdldFNpdGUoKS5yZWdpc3RlckNvbnRleHRNZW51KGNvbnRleHRNZW51LCBuZXcgVW53cmFwcGluZ1NlbGVjdGlvblByb3ZpZGVyKHZpZXdlcikpOw0KKw0KKwkJaW50IGRuZE9wZXJhdGlvbnMgPSBETkQuRFJPUF9DT1BZIHwgRE5ELkRST1BfTU9WRSB8IERORC5EUk9QX0xJTks7DQorCQlUcmFuc2ZlcltdIHRyYW5zZmVycyA9IG5ldyBUcmFuc2ZlcltdIHsgTG9jYWxUcmFuc2Zlci5nZXRJbnN0YW5jZSgpIH07DQorCQl2aWV3ZXIuYWRkRHJhZ1N1cHBvcnQoZG5kT3BlcmF0aW9ucywgdHJhbnNmZXJzLCBuZXcgVmlld2VyRHJhZ0FkYXB0ZXIodmlld2VyKSk7DQorCQl2aWV3ZXIuYWRkRHJvcFN1cHBvcnQoZG5kT3BlcmF0aW9ucywgdHJhbnNmZXJzLCBuZXcgRWRpdGluZ0RvbWFpblZpZXdlckRyb3BBZGFwdGVyKGVkaXRpbmdEb21haW4sIHZpZXdlcikpOw0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIGlzIHRoZSBtZXRob2QgY2FsbGVkIHRvIGxvYWQgYSByZXNvdXJjZSBpbnRvIHRoZSBlZGl0aW5nIGRvbWFpbidzIHJlc291cmNlIHNldCBiYXNlZCBvbiB0aGUgZWRpdG9yJ3MgaW5wdXQuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgdm9pZCBjcmVhdGVNb2RlbCgpIHsNCisJCVVSSSByZXNvdXJjZVVSSSA9IEVkaXRVSVV0aWwuZ2V0VVJJKGdldEVkaXRvcklucHV0KCkpOw0KKwkJRXhjZXB0aW9uIGV4Y2VwdGlvbiA9IG51bGw7DQorCQlSZXNvdXJjZSByZXNvdXJjZSA9IG51bGw7DQorCQl0cnkgew0KKwkJCS8vIExvYWQgdGhlIHJlc291cmNlIHRocm91Z2ggdGhlIGVkaXRpbmcgZG9tYWluLg0KKwkJCS8vDQorCQkJcmVzb3VyY2UgPSBlZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkuZ2V0UmVzb3VyY2UocmVzb3VyY2VVUkksIHRydWUpOw0KKwkJfQ0KKwkJY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7DQorCQkJZXhjZXB0aW9uID0gZTsNCisJCQlyZXNvdXJjZSA9IGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKS5nZXRSZXNvdXJjZShyZXNvdXJjZVVSSSwgZmFsc2UpOw0KKwkJfQ0KKw0KKwkJRGlhZ25vc3RpYyBkaWFnbm9zdGljID0gYW5hbHl6ZVJlc291cmNlUHJvYmxlbXMocmVzb3VyY2UsIGV4Y2VwdGlvbik7DQorCQlpZiAoZGlhZ25vc3RpYy5nZXRTZXZlcml0eSgpICE9IERpYWdub3N0aWMuT0spIHsNCisJCQlyZXNvdXJjZVRvRGlhZ25vc3RpY01hcC5wdXQocmVzb3VyY2UsICBhbmFseXplUmVzb3VyY2VQcm9ibGVtcyhyZXNvdXJjZSwgZXhjZXB0aW9uKSk7DQorCQl9DQorCQllZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkuZUFkYXB0ZXJzKCkuYWRkKHByb2JsZW1JbmRpY2F0aW9uQWRhcHRlcik7DQorCX0NCisNCisJLyoqDQorCSAqIFJldHVybnMgYSBkaWFnbm9zdGljIGRlc2NyaWJpbmcgdGhlIGVycm9ycyBhbmQgd2FybmluZ3MgbGlzdGVkIGluIHRoZSByZXNvdXJjZQ0KKwkgKiBhbmQgdGhlIHNwZWNpZmllZCBleGNlcHRpb24gKGlmIGFueSkuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgRGlhZ25vc3RpYyBhbmFseXplUmVzb3VyY2VQcm9ibGVtcyhSZXNvdXJjZSByZXNvdXJjZSwgRXhjZXB0aW9uIGV4Y2VwdGlvbikgew0KKwkJaWYgKCFyZXNvdXJjZS5nZXRFcnJvcnMoKS5pc0VtcHR5KCkgfHwgIXJlc291cmNlLmdldFdhcm5pbmdzKCkuaXNFbXB0eSgpKSB7DQorCQkJQmFzaWNEaWFnbm9zdGljIGJhc2ljRGlhZ25vc3RpYyA9DQorCQkJCW5ldyBCYXNpY0RpYWdub3N0aWMNCisJCQkJCShEaWFnbm9zdGljLkVSUk9SLA0KKwkJCQkJICJvcmcuZWNsaXBzZS5zdGVtLnVpLnBvcHVsYXRpb25tb2RlbHMiLA0KKwkJCQkJIDAsDQorCQkJCQkgZ2V0U3RyaW5nKCJfVUlfQ3JlYXRlTW9kZWxFcnJvcl9tZXNzYWdlIiwgcmVzb3VyY2UuZ2V0VVJJKCkpLA0KKwkJCQkJIG5ldyBPYmplY3QgW10geyBleGNlcHRpb24gPT0gbnVsbCA/IChPYmplY3QpcmVzb3VyY2UgOiBleGNlcHRpb24gfSk7DQorCQkJYmFzaWNEaWFnbm9zdGljLm1lcmdlKEVjb3JlVXRpbC5jb21wdXRlRGlhZ25vc3RpYyhyZXNvdXJjZSwgdHJ1ZSkpOw0KKwkJCXJldHVybiBiYXNpY0RpYWdub3N0aWM7DQorCQl9DQorCQllbHNlIGlmIChleGNlcHRpb24gIT0gbnVsbCkgew0KKwkJCXJldHVybg0KKwkJCQluZXcgQmFzaWNEaWFnbm9zdGljDQorCQkJCQkoRGlhZ25vc3RpYy5FUlJPUiwNCisJCQkJCSAib3JnLmVjbGlwc2Uuc3RlbS51aS5wb3B1bGF0aW9ubW9kZWxzIiwNCisJCQkJCSAwLA0KKwkJCQkJIGdldFN0cmluZygiX1VJX0NyZWF0ZU1vZGVsRXJyb3JfbWVzc2FnZSIsIHJlc291cmNlLmdldFVSSSgpKSwNCisJCQkJCSBuZXcgT2JqZWN0W10geyBleGNlcHRpb24gfSk7DQorCQl9DQorCQllbHNlIHsNCisJCQlyZXR1cm4gRGlhZ25vc3RpYy5PS19JTlNUQU5DRTsNCisJCX0NCisJfQ0KKw0KKwkvKioNCisJICogVGhpcyBpcyB0aGUgbWV0aG9kIHVzZWQgYnkgdGhlIGZyYW1ld29yayB0byBpbnN0YWxsIHlvdXIgb3duIGNvbnRyb2xzLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJQE92ZXJyaWRlDQorCXB1YmxpYyB2b2lkIGNyZWF0ZVBhZ2VzKCkgew0KKwkJLy8gQ3JlYXRlcyB0aGUgbW9kZWwgZnJvbSB0aGUgZWRpdG9yIGlucHV0DQorCQkvLw0KKwkJY3JlYXRlTW9kZWwoKTsNCisNCisJCS8vIE9ubHkgY3JlYXRlcyB0aGUgb3RoZXIgcGFnZXMgaWYgdGhlcmUgaXMgc29tZXRoaW5nIHRoYXQgY2FuIGJlIGVkaXRlZA0KKwkJLy8NCisJCWlmICghZ2V0RWRpdGluZ0RvbWFpbigpLmdldFJlc291cmNlU2V0KCkuZ2V0UmVzb3VyY2VzKCkuaXNFbXB0eSgpKSB7DQorCQkJLy8gQ3JlYXRlIGEgcGFnZSBmb3IgdGhlIHNlbGVjdGlvbiB0cmVlIHZpZXcuDQorCQkJLy8NCisJCQl7DQorCQkJCVZpZXdlclBhbmUgdmlld2VyUGFuZSA9DQorCQkJCQluZXcgVmlld2VyUGFuZShnZXRTaXRlKCkuZ2V0UGFnZSgpLCBTdGFuZGFyZEVkaXRvci50aGlzKSB7DQorCQkJCQkJQE92ZXJyaWRlDQorCQkJCQkJcHVibGljIFZpZXdlciBjcmVhdGVWaWV3ZXIoQ29tcG9zaXRlIGNvbXBvc2l0ZSkgew0KKwkJCQkJCQlUcmVlIHRyZWUgPSBuZXcgVHJlZShjb21wb3NpdGUsIFNXVC5NVUxUSSk7DQorCQkJCQkJCVRyZWVWaWV3ZXIgbmV3VHJlZVZpZXdlciA9IG5ldyBUcmVlVmlld2VyKHRyZWUpOw0KKwkJCQkJCQlyZXR1cm4gbmV3VHJlZVZpZXdlcjsNCisJCQkJCQl9DQorCQkJCQkJQE92ZXJyaWRlDQorCQkJCQkJcHVibGljIHZvaWQgcmVxdWVzdEFjdGl2YXRpb24oKSB7DQorCQkJCQkJCXN1cGVyLnJlcXVlc3RBY3RpdmF0aW9uKCk7DQorCQkJCQkJCXNldEN1cnJlbnRWaWV3ZXJQYW5lKHRoaXMpOw0KKwkJCQkJCX0NCisJCQkJCX07DQorCQkJCXZpZXdlclBhbmUuY3JlYXRlQ29udHJvbChnZXRDb250YWluZXIoKSk7DQorDQorCQkJCXNlbGVjdGlvblZpZXdlciA9IChUcmVlVmlld2VyKXZpZXdlclBhbmUuZ2V0Vmlld2VyKCk7DQorCQkJCXNlbGVjdGlvblZpZXdlci5zZXRDb250ZW50UHJvdmlkZXIobmV3IEFkYXB0ZXJGYWN0b3J5Q29udGVudFByb3ZpZGVyKGFkYXB0ZXJGYWN0b3J5KSk7DQorDQorCQkJCXNlbGVjdGlvblZpZXdlci5zZXRMYWJlbFByb3ZpZGVyKG5ldyBBZGFwdGVyRmFjdG9yeUxhYmVsUHJvdmlkZXIoYWRhcHRlckZhY3RvcnkpKTsNCisJCQkJc2VsZWN0aW9uVmlld2VyLnNldElucHV0KGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKSk7DQorCQkJCXNlbGVjdGlvblZpZXdlci5zZXRTZWxlY3Rpb24obmV3IFN0cnVjdHVyZWRTZWxlY3Rpb24oZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpLmdldFJlc291cmNlcygpLmdldCgwKSksIHRydWUpOw0KKwkJCQl2aWV3ZXJQYW5lLnNldFRpdGxlKGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKSk7DQorDQorCQkJCW5ldyBBZGFwdGVyRmFjdG9yeVRyZWVFZGl0b3Ioc2VsZWN0aW9uVmlld2VyLmdldFRyZWUoKSwgYWRhcHRlckZhY3RvcnkpOw0KKw0KKwkJCQljcmVhdGVDb250ZXh0TWVudUZvcihzZWxlY3Rpb25WaWV3ZXIpOw0KKwkJCQlpbnQgcGFnZUluZGV4ID0gYWRkUGFnZSh2aWV3ZXJQYW5lLmdldENvbnRyb2woKSk7DQorCQkJCXNldFBhZ2VUZXh0KHBhZ2VJbmRleCwgZ2V0U3RyaW5nKCJfVUlfU2VsZWN0aW9uUGFnZV9sYWJlbCIpKTsNCisJCQl9DQorDQorCQkJLy8gQ3JlYXRlIGEgcGFnZSBmb3IgdGhlIHBhcmVudCB0cmVlIHZpZXcuDQorCQkJLy8NCisJCQl7DQorCQkJCVZpZXdlclBhbmUgdmlld2VyUGFuZSA9DQorCQkJCQluZXcgVmlld2VyUGFuZShnZXRTaXRlKCkuZ2V0UGFnZSgpLCBTdGFuZGFyZEVkaXRvci50aGlzKSB7DQorCQkJCQkJQE92ZXJyaWRlDQorCQkJCQkJcHVibGljIFZpZXdlciBjcmVhdGVWaWV3ZXIoQ29tcG9zaXRlIGNvbXBvc2l0ZSkgew0KKwkJCQkJCQlUcmVlIHRyZWUgPSBuZXcgVHJlZShjb21wb3NpdGUsIFNXVC5NVUxUSSk7DQorCQkJCQkJCVRyZWVWaWV3ZXIgbmV3VHJlZVZpZXdlciA9IG5ldyBUcmVlVmlld2VyKHRyZWUpOw0KKwkJCQkJCQlyZXR1cm4gbmV3VHJlZVZpZXdlcjsNCisJCQkJCQl9DQorCQkJCQkJQE92ZXJyaWRlDQorCQkJCQkJcHVibGljIHZvaWQgcmVxdWVzdEFjdGl2YXRpb24oKSB7DQorCQkJCQkJCXN1cGVyLnJlcXVlc3RBY3RpdmF0aW9uKCk7DQorCQkJCQkJCXNldEN1cnJlbnRWaWV3ZXJQYW5lKHRoaXMpOw0KKwkJCQkJCX0NCisJCQkJCX07DQorCQkJCXZpZXdlclBhbmUuY3JlYXRlQ29udHJvbChnZXRDb250YWluZXIoKSk7DQorDQorCQkJCXBhcmVudFZpZXdlciA9IChUcmVlVmlld2VyKXZpZXdlclBhbmUuZ2V0Vmlld2VyKCk7DQorCQkJCXBhcmVudFZpZXdlci5zZXRBdXRvRXhwYW5kTGV2ZWwoMzApOw0KKwkJCQlwYXJlbnRWaWV3ZXIuc2V0Q29udGVudFByb3ZpZGVyKG5ldyBSZXZlcnNlQWRhcHRlckZhY3RvcnlDb250ZW50UHJvdmlkZXIoYWRhcHRlckZhY3RvcnkpKTsNCisJCQkJcGFyZW50Vmlld2VyLnNldExhYmVsUHJvdmlkZXIobmV3IEFkYXB0ZXJGYWN0b3J5TGFiZWxQcm92aWRlcihhZGFwdGVyRmFjdG9yeSkpOw0KKw0KKwkJCQljcmVhdGVDb250ZXh0TWVudUZvcihwYXJlbnRWaWV3ZXIpOw0KKwkJCQlpbnQgcGFnZUluZGV4ID0gYWRkUGFnZSh2aWV3ZXJQYW5lLmdldENvbnRyb2woKSk7DQorCQkJCXNldFBhZ2VUZXh0KHBhZ2VJbmRleCwgZ2V0U3RyaW5nKCJfVUlfUGFyZW50UGFnZV9sYWJlbCIpKTsNCisJCQl9DQorDQorCQkJLy8gVGhpcyBpcyB0aGUgcGFnZSBmb3IgdGhlIGxpc3Qgdmlld2VyDQorCQkJLy8NCisJCQl7DQorCQkJCVZpZXdlclBhbmUgdmlld2VyUGFuZSA9DQorCQkJCQluZXcgVmlld2VyUGFuZShnZXRTaXRlKCkuZ2V0UGFnZSgpLCBTdGFuZGFyZEVkaXRvci50aGlzKSB7DQorCQkJCQkJQE92ZXJyaWRlDQorCQkJCQkJcHVibGljIFZpZXdlciBjcmVhdGVWaWV3ZXIoQ29tcG9zaXRlIGNvbXBvc2l0ZSkgew0KKwkJCQkJCQlyZXR1cm4gbmV3IExpc3RWaWV3ZXIoY29tcG9zaXRlKTsNCisJCQkJCQl9DQorCQkJCQkJQE92ZXJyaWRlDQorCQkJCQkJcHVibGljIHZvaWQgcmVxdWVzdEFjdGl2YXRpb24oKSB7DQorCQkJCQkJCXN1cGVyLnJlcXVlc3RBY3RpdmF0aW9uKCk7DQorCQkJCQkJCXNldEN1cnJlbnRWaWV3ZXJQYW5lKHRoaXMpOw0KKwkJCQkJCX0NCisJCQkJCX07DQorCQkJCXZpZXdlclBhbmUuY3JlYXRlQ29udHJvbChnZXRDb250YWluZXIoKSk7DQorCQkJCWxpc3RWaWV3ZXIgPSAoTGlzdFZpZXdlcil2aWV3ZXJQYW5lLmdldFZpZXdlcigpOw0KKwkJCQlsaXN0Vmlld2VyLnNldENvbnRlbnRQcm92aWRlcihuZXcgQWRhcHRlckZhY3RvcnlDb250ZW50UHJvdmlkZXIoYWRhcHRlckZhY3RvcnkpKTsNCisJCQkJbGlzdFZpZXdlci5zZXRMYWJlbFByb3ZpZGVyKG5ldyBBZGFwdGVyRmFjdG9yeUxhYmVsUHJvdmlkZXIoYWRhcHRlckZhY3RvcnkpKTsNCisNCisJCQkJY3JlYXRlQ29udGV4dE1lbnVGb3IobGlzdFZpZXdlcik7DQorCQkJCWludCBwYWdlSW5kZXggPSBhZGRQYWdlKHZpZXdlclBhbmUuZ2V0Q29udHJvbCgpKTsNCisJCQkJc2V0UGFnZVRleHQocGFnZUluZGV4LCBnZXRTdHJpbmcoIl9VSV9MaXN0UGFnZV9sYWJlbCIpKTsNCisJCQl9DQorDQorCQkJLy8gVGhpcyBpcyB0aGUgcGFnZSBmb3IgdGhlIHRyZWUgdmlld2VyDQorCQkJLy8NCisJCQl7DQorCQkJCVZpZXdlclBhbmUgdmlld2VyUGFuZSA9DQorCQkJCQluZXcgVmlld2VyUGFuZShnZXRTaXRlKCkuZ2V0UGFnZSgpLCBTdGFuZGFyZEVkaXRvci50aGlzKSB7DQorCQkJCQkJQE92ZXJyaWRlDQorCQkJCQkJcHVibGljIFZpZXdlciBjcmVhdGVWaWV3ZXIoQ29tcG9zaXRlIGNvbXBvc2l0ZSkgew0KKwkJCQkJCQlyZXR1cm4gbmV3IFRyZWVWaWV3ZXIoY29tcG9zaXRlKTsNCisJCQkJCQl9DQorCQkJCQkJQE92ZXJyaWRlDQorCQkJCQkJcHVibGljIHZvaWQgcmVxdWVzdEFjdGl2YXRpb24oKSB7DQorCQkJCQkJCXN1cGVyLnJlcXVlc3RBY3RpdmF0aW9uKCk7DQorCQkJCQkJCXNldEN1cnJlbnRWaWV3ZXJQYW5lKHRoaXMpOw0KKwkJCQkJCX0NCisJCQkJCX07DQorCQkJCXZpZXdlclBhbmUuY3JlYXRlQ29udHJvbChnZXRDb250YWluZXIoKSk7DQorCQkJCXRyZWVWaWV3ZXIgPSAoVHJlZVZpZXdlcil2aWV3ZXJQYW5lLmdldFZpZXdlcigpOw0KKwkJCQl0cmVlVmlld2VyLnNldENvbnRlbnRQcm92aWRlcihuZXcgQWRhcHRlckZhY3RvcnlDb250ZW50UHJvdmlkZXIoYWRhcHRlckZhY3RvcnkpKTsNCisJCQkJdHJlZVZpZXdlci5zZXRMYWJlbFByb3ZpZGVyKG5ldyBBZGFwdGVyRmFjdG9yeUxhYmVsUHJvdmlkZXIoYWRhcHRlckZhY3RvcnkpKTsNCisNCisJCQkJbmV3IEFkYXB0ZXJGYWN0b3J5VHJlZUVkaXRvcih0cmVlVmlld2VyLmdldFRyZWUoKSwgYWRhcHRlckZhY3RvcnkpOw0KKw0KKwkJCQljcmVhdGVDb250ZXh0TWVudUZvcih0cmVlVmlld2VyKTsNCisJCQkJaW50IHBhZ2VJbmRleCA9IGFkZFBhZ2Uodmlld2VyUGFuZS5nZXRDb250cm9sKCkpOw0KKwkJCQlzZXRQYWdlVGV4dChwYWdlSW5kZXgsIGdldFN0cmluZygiX1VJX1RyZWVQYWdlX2xhYmVsIikpOw0KKwkJCX0NCisNCisJCQkvLyBUaGlzIGlzIHRoZSBwYWdlIGZvciB0aGUgdGFibGUgdmlld2VyLg0KKwkJCS8vDQorCQkJew0KKwkJCQlWaWV3ZXJQYW5lIHZpZXdlclBhbmUgPQ0KKwkJCQkJbmV3IFZpZXdlclBhbmUoZ2V0U2l0ZSgpLmdldFBhZ2UoKSwgU3RhbmRhcmRFZGl0b3IudGhpcykgew0KKwkJCQkJCUBPdmVycmlkZQ0KKwkJCQkJCXB1YmxpYyBWaWV3ZXIgY3JlYXRlVmlld2VyKENvbXBvc2l0ZSBjb21wb3NpdGUpIHsNCisJCQkJCQkJcmV0dXJuIG5ldyBUYWJsZVZpZXdlcihjb21wb3NpdGUpOw0KKwkJCQkJCX0NCisJCQkJCQlAT3ZlcnJpZGUNCisJCQkJCQlwdWJsaWMgdm9pZCByZXF1ZXN0QWN0aXZhdGlvbigpIHsNCisJCQkJCQkJc3VwZXIucmVxdWVzdEFjdGl2YXRpb24oKTsNCisJCQkJCQkJc2V0Q3VycmVudFZpZXdlclBhbmUodGhpcyk7DQorCQkJCQkJfQ0KKwkJCQkJfTsNCisJCQkJdmlld2VyUGFuZS5jcmVhdGVDb250cm9sKGdldENvbnRhaW5lcigpKTsNCisJCQkJdGFibGVWaWV3ZXIgPSAoVGFibGVWaWV3ZXIpdmlld2VyUGFuZS5nZXRWaWV3ZXIoKTsNCisNCisJCQkJVGFibGUgdGFibGUgPSB0YWJsZVZpZXdlci5nZXRUYWJsZSgpOw0KKwkJCQlUYWJsZUxheW91dCBsYXlvdXQgPSBuZXcgVGFibGVMYXlvdXQoKTsNCisJCQkJdGFibGUuc2V0TGF5b3V0KGxheW91dCk7DQorCQkJCXRhYmxlLnNldEhlYWRlclZpc2libGUodHJ1ZSk7DQorCQkJCXRhYmxlLnNldExpbmVzVmlzaWJsZSh0cnVlKTsNCisNCisJCQkJVGFibGVDb2x1bW4gb2JqZWN0Q29sdW1uID0gbmV3IFRhYmxlQ29sdW1uKHRhYmxlLCBTV1QuTk9ORSk7DQorCQkJCWxheW91dC5hZGRDb2x1bW5EYXRhKG5ldyBDb2x1bW5XZWlnaHREYXRhKDMsIDEwMCwgdHJ1ZSkpOw0KKwkJCQlvYmplY3RDb2x1bW4uc2V0VGV4dChnZXRTdHJpbmcoIl9VSV9PYmplY3RDb2x1bW5fbGFiZWwiKSk7DQorCQkJCW9iamVjdENvbHVtbi5zZXRSZXNpemFibGUodHJ1ZSk7DQorDQorCQkJCVRhYmxlQ29sdW1uIHNlbGZDb2x1bW4gPSBuZXcgVGFibGVDb2x1bW4odGFibGUsIFNXVC5OT05FKTsNCisJCQkJbGF5b3V0LmFkZENvbHVtbkRhdGEobmV3IENvbHVtbldlaWdodERhdGEoMiwgMTAwLCB0cnVlKSk7DQorCQkJCXNlbGZDb2x1bW4uc2V0VGV4dChnZXRTdHJpbmcoIl9VSV9TZWxmQ29sdW1uX2xhYmVsIikpOw0KKwkJCQlzZWxmQ29sdW1uLnNldFJlc2l6YWJsZSh0cnVlKTsNCisNCisJCQkJdGFibGVWaWV3ZXIuc2V0Q29sdW1uUHJvcGVydGllcyhuZXcgU3RyaW5nIFtdIHsiYSIsICJiIn0pOw0KKwkJCQl0YWJsZVZpZXdlci5zZXRDb250ZW50UHJvdmlkZXIobmV3IEFkYXB0ZXJGYWN0b3J5Q29udGVudFByb3ZpZGVyKGFkYXB0ZXJGYWN0b3J5KSk7DQorCQkJCXRhYmxlVmlld2VyLnNldExhYmVsUHJvdmlkZXIobmV3IEFkYXB0ZXJGYWN0b3J5TGFiZWxQcm92aWRlcihhZGFwdGVyRmFjdG9yeSkpOw0KKw0KKwkJCQljcmVhdGVDb250ZXh0TWVudUZvcih0YWJsZVZpZXdlcik7DQorCQkJCWludCBwYWdlSW5kZXggPSBhZGRQYWdlKHZpZXdlclBhbmUuZ2V0Q29udHJvbCgpKTsNCisJCQkJc2V0UGFnZVRleHQocGFnZUluZGV4LCBnZXRTdHJpbmcoIl9VSV9UYWJsZVBhZ2VfbGFiZWwiKSk7DQorCQkJfQ0KKw0KKwkJCS8vIFRoaXMgaXMgdGhlIHBhZ2UgZm9yIHRoZSB0YWJsZSB0cmVlIHZpZXdlci4NCisJCQkvLw0KKwkJCXsNCisJCQkJVmlld2VyUGFuZSB2aWV3ZXJQYW5lID0NCisJCQkJCW5ldyBWaWV3ZXJQYW5lKGdldFNpdGUoKS5nZXRQYWdlKCksIFN0YW5kYXJkRWRpdG9yLnRoaXMpIHsNCisJCQkJCQlAT3ZlcnJpZGUNCisJCQkJCQlwdWJsaWMgVmlld2VyIGNyZWF0ZVZpZXdlcihDb21wb3NpdGUgY29tcG9zaXRlKSB7DQorCQkJCQkJCXJldHVybiBuZXcgVHJlZVZpZXdlcihjb21wb3NpdGUpOw0KKwkJCQkJCX0NCisJCQkJCQlAT3ZlcnJpZGUNCisJCQkJCQlwdWJsaWMgdm9pZCByZXF1ZXN0QWN0aXZhdGlvbigpIHsNCisJCQkJCQkJc3VwZXIucmVxdWVzdEFjdGl2YXRpb24oKTsNCisJCQkJCQkJc2V0Q3VycmVudFZpZXdlclBhbmUodGhpcyk7DQorCQkJCQkJfQ0KKwkJCQkJfTsNCisJCQkJdmlld2VyUGFuZS5jcmVhdGVDb250cm9sKGdldENvbnRhaW5lcigpKTsNCisNCisJCQkJdHJlZVZpZXdlcldpdGhDb2x1bW5zID0gKFRyZWVWaWV3ZXIpdmlld2VyUGFuZS5nZXRWaWV3ZXIoKTsNCisNCisJCQkJVHJlZSB0cmVlID0gdHJlZVZpZXdlcldpdGhDb2x1bW5zLmdldFRyZWUoKTsNCisJCQkJdHJlZS5zZXRMYXlvdXREYXRhKG5ldyBGaWxsTGF5b3V0KCkpOw0KKwkJCQl0cmVlLnNldEhlYWRlclZpc2libGUodHJ1ZSk7DQorCQkJCXRyZWUuc2V0TGluZXNWaXNpYmxlKHRydWUpOw0KKw0KKwkJCQlUcmVlQ29sdW1uIG9iamVjdENvbHVtbiA9IG5ldyBUcmVlQ29sdW1uKHRyZWUsIFNXVC5OT05FKTsNCisJCQkJb2JqZWN0Q29sdW1uLnNldFRleHQoZ2V0U3RyaW5nKCJfVUlfT2JqZWN0Q29sdW1uX2xhYmVsIikpOw0KKwkJCQlvYmplY3RDb2x1bW4uc2V0UmVzaXphYmxlKHRydWUpOw0KKwkJCQlvYmplY3RDb2x1bW4uc2V0V2lkdGgoMjUwKTsNCisNCisJCQkJVHJlZUNvbHVtbiBzZWxmQ29sdW1uID0gbmV3IFRyZWVDb2x1bW4odHJlZSwgU1dULk5PTkUpOw0KKwkJCQlzZWxmQ29sdW1uLnNldFRleHQoZ2V0U3RyaW5nKCJfVUlfU2VsZkNvbHVtbl9sYWJlbCIpKTsNCisJCQkJc2VsZkNvbHVtbi5zZXRSZXNpemFibGUodHJ1ZSk7DQorCQkJCXNlbGZDb2x1bW4uc2V0V2lkdGgoMjAwKTsNCisNCisJCQkJdHJlZVZpZXdlcldpdGhDb2x1bW5zLnNldENvbHVtblByb3BlcnRpZXMobmV3IFN0cmluZyBbXSB7ImEiLCAiYiJ9KTsNCisJCQkJdHJlZVZpZXdlcldpdGhDb2x1bW5zLnNldENvbnRlbnRQcm92aWRlcihuZXcgQWRhcHRlckZhY3RvcnlDb250ZW50UHJvdmlkZXIoYWRhcHRlckZhY3RvcnkpKTsNCisJCQkJdHJlZVZpZXdlcldpdGhDb2x1bW5zLnNldExhYmVsUHJvdmlkZXIobmV3IEFkYXB0ZXJGYWN0b3J5TGFiZWxQcm92aWRlcihhZGFwdGVyRmFjdG9yeSkpOw0KKw0KKwkJCQljcmVhdGVDb250ZXh0TWVudUZvcih0cmVlVmlld2VyV2l0aENvbHVtbnMpOw0KKwkJCQlpbnQgcGFnZUluZGV4ID0gYWRkUGFnZSh2aWV3ZXJQYW5lLmdldENvbnRyb2woKSk7DQorCQkJCXNldFBhZ2VUZXh0KHBhZ2VJbmRleCwgZ2V0U3RyaW5nKCJfVUlfVHJlZVdpdGhDb2x1bW5zUGFnZV9sYWJlbCIpKTsNCisJCQl9DQorDQorCQkJZ2V0U2l0ZSgpLmdldFNoZWxsKCkuZ2V0RGlzcGxheSgpLmFzeW5jRXhlYw0KKwkJCQkobmV3IFJ1bm5hYmxlKCkgew0KKwkJCQkJIHB1YmxpYyB2b2lkIHJ1bigpIHsNCisJCQkJCQkgc2V0QWN0aXZlUGFnZSgwKTsNCisJCQkJCSB9DQorCQkJCSB9KTsNCisJCX0NCisNCisJCS8vIEVuc3VyZXMgdGhhdCB0aGlzIGVkaXRvciB3aWxsIG9ubHkgZGlzcGxheSB0aGUgcGFnZSdzIHRhYg0KKwkJLy8gYXJlYSBpZiB0aGVyZSBhcmUgbW9yZSB0aGFuIG9uZSBwYWdlDQorCQkvLw0KKwkJZ2V0Q29udGFpbmVyKCkuYWRkQ29udHJvbExpc3RlbmVyDQorCQkJKG5ldyBDb250cm9sQWRhcHRlcigpIHsNCisJCQkJYm9vbGVhbiBndWFyZCA9IGZhbHNlOw0KKwkJCQlAT3ZlcnJpZGUNCisJCQkJcHVibGljIHZvaWQgY29udHJvbFJlc2l6ZWQoQ29udHJvbEV2ZW50IGV2ZW50KSB7DQorCQkJCQlpZiAoIWd1YXJkKSB7DQorCQkJCQkJZ3VhcmQgPSB0cnVlOw0KKwkJCQkJCWhpZGVUYWJzKCk7DQorCQkJCQkJZ3VhcmQgPSBmYWxzZTsNCisJCQkJCX0NCisJCQkJfQ0KKwkJCSB9KTsNCisNCisJCWdldFNpdGUoKS5nZXRTaGVsbCgpLmdldERpc3BsYXkoKS5hc3luY0V4ZWMNCisJCQkobmV3IFJ1bm5hYmxlKCkgew0KKwkJCQkgcHVibGljIHZvaWQgcnVuKCkgew0KKwkJCQkJIHVwZGF0ZVByb2JsZW1JbmRpY2F0aW9uKCk7DQorCQkJCSB9DQorCQkJIH0pOw0KKwl9DQorDQorCS8qKg0KKwkgKiBJZiB0aGVyZSBpcyBqdXN0IG9uZSBwYWdlIGluIHRoZSBtdWx0aS1wYWdlIGVkaXRvciBwYXJ0LA0KKwkgKiB0aGlzIGhpZGVzIHRoZSBzaW5nbGUgdGFiIGF0IHRoZSBib3R0b20uDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgdm9pZCBoaWRlVGFicygpIHsNCisJCWlmIChnZXRQYWdlQ291bnQoKSA8PSAxKSB7DQorCQkJc2V0UGFnZVRleHQoMCwgIiIpOw0KKwkJCWlmIChnZXRDb250YWluZXIoKSBpbnN0YW5jZW9mIENUYWJGb2xkZXIpIHsNCisJCQkJKChDVGFiRm9sZGVyKWdldENvbnRhaW5lcigpKS5zZXRUYWJIZWlnaHQoMSk7DQorCQkJCVBvaW50IHBvaW50ID0gZ2V0Q29udGFpbmVyKCkuZ2V0U2l6ZSgpOw0KKwkJCQlnZXRDb250YWluZXIoKS5zZXRTaXplKHBvaW50LngsIHBvaW50LnkgKyA2KTsNCisJCQl9DQorCQl9DQorCX0NCisNCisJLyoqDQorCSAqIElmIHRoZXJlIGlzIG1vcmUgdGhhbiBvbmUgcGFnZSBpbiB0aGUgbXVsdGktcGFnZSBlZGl0b3IgcGFydCwNCisJICogdGhpcyBzaG93cyB0aGUgdGFicyBhdCB0aGUgYm90dG9tLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIHZvaWQgc2hvd1RhYnMoKSB7DQorCQlpZiAoZ2V0UGFnZUNvdW50KCkgPiAxKSB7DQorCQkJc2V0UGFnZVRleHQoMCwgZ2V0U3RyaW5nKCJfVUlfU2VsZWN0aW9uUGFnZV9sYWJlbCIpKTsNCisJCQlpZiAoZ2V0Q29udGFpbmVyKCkgaW5zdGFuY2VvZiBDVGFiRm9sZGVyKSB7DQorCQkJCSgoQ1RhYkZvbGRlcilnZXRDb250YWluZXIoKSkuc2V0VGFiSGVpZ2h0KFNXVC5ERUZBVUxUKTsNCisJCQkJUG9pbnQgcG9pbnQgPSBnZXRDb250YWluZXIoKS5nZXRTaXplKCk7DQorCQkJCWdldENvbnRhaW5lcigpLnNldFNpemUocG9pbnQueCwgcG9pbnQueSAtIDYpOw0KKwkJCX0NCisJCX0NCisJfQ0KKw0KKwkvKioNCisJICogVGhpcyBpcyB1c2VkIHRvIHRyYWNrIHRoZSBhY3RpdmUgdmlld2VyLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJQE92ZXJyaWRlDQorCXByb3RlY3RlZCB2b2lkIHBhZ2VDaGFuZ2UoaW50IHBhZ2VJbmRleCkgew0KKwkJc3VwZXIucGFnZUNoYW5nZShwYWdlSW5kZXgpOw0KKw0KKwkJaWYgKGNvbnRlbnRPdXRsaW5lUGFnZSAhPSBudWxsKSB7DQorCQkJaGFuZGxlQ29udGVudE91dGxpbmVTZWxlY3Rpb24oY29udGVudE91dGxpbmVQYWdlLmdldFNlbGVjdGlvbigpKTsNCisJCX0NCisJfQ0KKw0KKwkvKioNCisJICogVGhpcyBpcyBob3cgdGhlIGZyYW1ld29yayBkZXRlcm1pbmVzIHdoaWNoIGludGVyZmFjZXMgd2UgaW1wbGVtZW50Lg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJQFN1cHByZXNzV2FybmluZ3MoInVuY2hlY2tlZCIpDQorCUBPdmVycmlkZQ0KKwlwdWJsaWMgT2JqZWN0IGdldEFkYXB0ZXIoQ2xhc3Mga2V5KSB7DQorCQlpZiAoa2V5LmVxdWFscyhJQ29udGVudE91dGxpbmVQYWdlLmNsYXNzKSkgew0KKwkJCXJldHVybiBzaG93T3V0bGluZVZpZXcoKSA/IGdldENvbnRlbnRPdXRsaW5lUGFnZSgpIDogbnVsbDsNCisJCX0NCisJCWVsc2UgaWYgKGtleS5lcXVhbHMoSVByb3BlcnR5U2hlZXRQYWdlLmNsYXNzKSkgew0KKwkJCXJldHVybiBnZXRQcm9wZXJ0eVNoZWV0UGFnZSgpOw0KKwkJfQ0KKwkJZWxzZSBpZiAoa2V5LmVxdWFscyhJR290b01hcmtlci5jbGFzcykpIHsNCisJCQlyZXR1cm4gdGhpczsNCisJCX0NCisJCWVsc2Ugew0KKwkJCXJldHVybiBzdXBlci5nZXRBZGFwdGVyKGtleSk7DQorCQl9DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgYWNjZXNzZXMgYSBjYWNoZWQgdmVyc2lvbiBvZiB0aGUgY29udGVudCBvdXRsaW5lci4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBJQ29udGVudE91dGxpbmVQYWdlIGdldENvbnRlbnRPdXRsaW5lUGFnZSgpIHsNCisJCWlmIChjb250ZW50T3V0bGluZVBhZ2UgPT0gbnVsbCkgew0KKwkJCS8vIFRoZSBjb250ZW50IG91dGxpbmUgaXMganVzdCBhIHRyZWUuDQorCQkJLy8NCisJCQljbGFzcyBNeUNvbnRlbnRPdXRsaW5lUGFnZSBleHRlbmRzIENvbnRlbnRPdXRsaW5lUGFnZSB7DQorCQkJCUBPdmVycmlkZQ0KKwkJCQlwdWJsaWMgdm9pZCBjcmVhdGVDb250cm9sKENvbXBvc2l0ZSBwYXJlbnQpIHsNCisJCQkJCXN1cGVyLmNyZWF0ZUNvbnRyb2wocGFyZW50KTsNCisJCQkJCWNvbnRlbnRPdXRsaW5lVmlld2VyID0gZ2V0VHJlZVZpZXdlcigpOw0KKwkJCQkJY29udGVudE91dGxpbmVWaWV3ZXIuYWRkU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyKHRoaXMpOw0KKw0KKwkJCQkJLy8gU2V0IHVwIHRoZSB0cmVlIHZpZXdlci4NCisJCQkJCS8vDQorCQkJCQljb250ZW50T3V0bGluZVZpZXdlci5zZXRDb250ZW50UHJvdmlkZXIobmV3IEFkYXB0ZXJGYWN0b3J5Q29udGVudFByb3ZpZGVyKGFkYXB0ZXJGYWN0b3J5KSk7DQorCQkJCQljb250ZW50T3V0bGluZVZpZXdlci5zZXRMYWJlbFByb3ZpZGVyKG5ldyBBZGFwdGVyRmFjdG9yeUxhYmVsUHJvdmlkZXIoYWRhcHRlckZhY3RvcnkpKTsNCisJCQkJCWNvbnRlbnRPdXRsaW5lVmlld2VyLnNldElucHV0KGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKSk7DQorDQorCQkJCQkvLyBNYWtlIHN1cmUgb3VyIHBvcHVwcyB3b3JrLg0KKwkJCQkJLy8NCisJCQkJCWNyZWF0ZUNvbnRleHRNZW51Rm9yKGNvbnRlbnRPdXRsaW5lVmlld2VyKTsNCisNCisJCQkJCWlmICghZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpLmdldFJlc291cmNlcygpLmlzRW1wdHkoKSkgew0KKwkJCQkJICAvLyBTZWxlY3QgdGhlIHJvb3Qgb2JqZWN0IGluIHRoZSB2aWV3Lg0KKwkJCQkJICAvLw0KKwkJCQkJICBjb250ZW50T3V0bGluZVZpZXdlci5zZXRTZWxlY3Rpb24obmV3IFN0cnVjdHVyZWRTZWxlY3Rpb24oZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpLmdldFJlc291cmNlcygpLmdldCgwKSksIHRydWUpOw0KKwkJCQkJfQ0KKwkJCQl9DQorDQorCQkJCUBPdmVycmlkZQ0KKwkJCQlwdWJsaWMgdm9pZCBtYWtlQ29udHJpYnV0aW9ucyhJTWVudU1hbmFnZXIgbWVudU1hbmFnZXIsIElUb29sQmFyTWFuYWdlciB0b29sQmFyTWFuYWdlciwgSVN0YXR1c0xpbmVNYW5hZ2VyIHN0YXR1c0xpbmVNYW5hZ2VyKSB7DQorCQkJCQlzdXBlci5tYWtlQ29udHJpYnV0aW9ucyhtZW51TWFuYWdlciwgdG9vbEJhck1hbmFnZXIsIHN0YXR1c0xpbmVNYW5hZ2VyKTsNCisJCQkJCWNvbnRlbnRPdXRsaW5lU3RhdHVzTGluZU1hbmFnZXIgPSBzdGF0dXNMaW5lTWFuYWdlcjsNCisJCQkJfQ0KKw0KKwkJCQlAT3ZlcnJpZGUNCisJCQkJcHVibGljIHZvaWQgc2V0QWN0aW9uQmFycyhJQWN0aW9uQmFycyBhY3Rpb25CYXJzKSB7DQorCQkJCQlzdXBlci5zZXRBY3Rpb25CYXJzKGFjdGlvbkJhcnMpOw0KKwkJCQkJZ2V0QWN0aW9uQmFyQ29udHJpYnV0b3IoKS5zaGFyZUdsb2JhbEFjdGlvbnModGhpcywgYWN0aW9uQmFycyk7DQorCQkJCX0NCisJCQl9DQorDQorCQkJY29udGVudE91dGxpbmVQYWdlID0gbmV3IE15Q29udGVudE91dGxpbmVQYWdlKCk7DQorDQorCQkJLy8gTGlzdGVuIHRvIHNlbGVjdGlvbiBzbyB0aGF0IHdlIGNhbiBoYW5kbGUgaXQgaXMgYSBzcGVjaWFsIHdheS4NCisJCQkvLw0KKwkJCWNvbnRlbnRPdXRsaW5lUGFnZS5hZGRTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXINCisJCQkJKG5ldyBJU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyKCkgew0KKwkJCQkJIC8vIFRoaXMgZW5zdXJlcyB0aGF0IHdlIGhhbmRsZSBzZWxlY3Rpb25zIGNvcnJlY3RseS4NCisJCQkJCSAvLw0KKwkJCQkJIHB1YmxpYyB2b2lkIHNlbGVjdGlvbkNoYW5nZWQoU2VsZWN0aW9uQ2hhbmdlZEV2ZW50IGV2ZW50KSB7DQorCQkJCQkJIGhhbmRsZUNvbnRlbnRPdXRsaW5lU2VsZWN0aW9uKGV2ZW50LmdldFNlbGVjdGlvbigpKTsNCisJCQkJCSB9DQorCQkJCSB9KTsNCisJCX0NCisNCisJCXJldHVybiBjb250ZW50T3V0bGluZVBhZ2U7DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgYWNjZXNzZXMgYSBjYWNoZWQgdmVyc2lvbiBvZiB0aGUgcHJvcGVydHkgc2hlZXQuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgSVByb3BlcnR5U2hlZXRQYWdlIGdldFByb3BlcnR5U2hlZXRQYWdlKCkgew0KKwkJaWYgKHByb3BlcnR5U2hlZXRQYWdlID09IG51bGwpIHsNCisJCQlwcm9wZXJ0eVNoZWV0UGFnZSA9DQorCQkJCW5ldyBFeHRlbmRlZFByb3BlcnR5U2hlZXRQYWdlKGVkaXRpbmdEb21haW4pIHsNCisJCQkJCUBPdmVycmlkZQ0KKwkJCQkJcHVibGljIHZvaWQgc2V0U2VsZWN0aW9uVG9WaWV3ZXIoTGlzdDw/PiBzZWxlY3Rpb24pIHsNCisJCQkJCQlTdGFuZGFyZEVkaXRvci50aGlzLnNldFNlbGVjdGlvblRvVmlld2VyKHNlbGVjdGlvbik7DQorCQkJCQkJU3RhbmRhcmRFZGl0b3IudGhpcy5zZXRGb2N1cygpOw0KKwkJCQkJfQ0KKw0KKwkJCQkJQE92ZXJyaWRlDQorCQkJCQlwdWJsaWMgdm9pZCBzZXRBY3Rpb25CYXJzKElBY3Rpb25CYXJzIGFjdGlvbkJhcnMpIHsNCisJCQkJCQlzdXBlci5zZXRBY3Rpb25CYXJzKGFjdGlvbkJhcnMpOw0KKwkJCQkJCWdldEFjdGlvbkJhckNvbnRyaWJ1dG9yKCkuc2hhcmVHbG9iYWxBY3Rpb25zKHRoaXMsIGFjdGlvbkJhcnMpOw0KKwkJCQkJfQ0KKwkJCQl9Ow0KKwkJCXByb3BlcnR5U2hlZXRQYWdlLnNldFByb3BlcnR5U291cmNlUHJvdmlkZXIobmV3IEFkYXB0ZXJGYWN0b3J5Q29udGVudFByb3ZpZGVyKGFkYXB0ZXJGYWN0b3J5KSk7DQorCQl9DQorDQorCQlyZXR1cm4gcHJvcGVydHlTaGVldFBhZ2U7DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgZGVhbHMgd2l0aCBob3cgd2Ugd2FudCBzZWxlY3Rpb24gaW4gdGhlIG91dGxpbmVyIHRvIGFmZmVjdCB0aGUgb3RoZXIgdmlld3MuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgdm9pZCBoYW5kbGVDb250ZW50T3V0bGluZVNlbGVjdGlvbihJU2VsZWN0aW9uIHNlbGVjdGlvbikgew0KKwkJaWYgKGN1cnJlbnRWaWV3ZXJQYW5lICE9IG51bGwgJiYgIXNlbGVjdGlvbi5pc0VtcHR5KCkgJiYgc2VsZWN0aW9uIGluc3RhbmNlb2YgSVN0cnVjdHVyZWRTZWxlY3Rpb24pIHsNCisJCQlJdGVyYXRvcjw/PiBzZWxlY3RlZEVsZW1lbnRzID0gKChJU3RydWN0dXJlZFNlbGVjdGlvbilzZWxlY3Rpb24pLml0ZXJhdG9yKCk7DQorCQkJaWYgKHNlbGVjdGVkRWxlbWVudHMuaGFzTmV4dCgpKSB7DQorCQkJCS8vIEdldCB0aGUgZmlyc3Qgc2VsZWN0ZWQgZWxlbWVudC4NCisJCQkJLy8NCisJCQkJT2JqZWN0IHNlbGVjdGVkRWxlbWVudCA9IHNlbGVjdGVkRWxlbWVudHMubmV4dCgpOw0KKw0KKwkJCQkvLyBJZiBpdCdzIHRoZSBzZWxlY3Rpb24gdmlld2VyLCB0aGVuIHdlIHdhbnQgaXQgdG8gc2VsZWN0IHRoZSBzYW1lIHNlbGVjdGlvbiBhcyB0aGlzIHNlbGVjdGlvbi4NCisJCQkJLy8NCisJCQkJaWYgKGN1cnJlbnRWaWV3ZXJQYW5lLmdldFZpZXdlcigpID09IHNlbGVjdGlvblZpZXdlcikgew0KKwkJCQkJQXJyYXlMaXN0PE9iamVjdD4gc2VsZWN0aW9uTGlzdCA9IG5ldyBBcnJheUxpc3Q8T2JqZWN0PigpOw0KKwkJCQkJc2VsZWN0aW9uTGlzdC5hZGQoc2VsZWN0ZWRFbGVtZW50KTsNCisJCQkJCXdoaWxlIChzZWxlY3RlZEVsZW1lbnRzLmhhc05leHQoKSkgew0KKwkJCQkJCXNlbGVjdGlvbkxpc3QuYWRkKHNlbGVjdGVkRWxlbWVudHMubmV4dCgpKTsNCisJCQkJCX0NCisNCisJCQkJCS8vIFNldCB0aGUgc2VsZWN0aW9uIHRvIHRoZSB3aWRnZXQuDQorCQkJCQkvLw0KKwkJCQkJc2VsZWN0aW9uVmlld2VyLnNldFNlbGVjdGlvbihuZXcgU3RydWN0dXJlZFNlbGVjdGlvbihzZWxlY3Rpb25MaXN0KSk7DQorCQkJCX0NCisJCQkJZWxzZSB7DQorCQkJCQkvLyBTZXQgdGhlIGlucHV0IHRvIHRoZSB3aWRnZXQuDQorCQkJCQkvLw0KKwkJCQkJaWYgKGN1cnJlbnRWaWV3ZXJQYW5lLmdldFZpZXdlcigpLmdldElucHV0KCkgIT0gc2VsZWN0ZWRFbGVtZW50KSB7DQorCQkJCQkJY3VycmVudFZpZXdlclBhbmUuZ2V0Vmlld2VyKCkuc2V0SW5wdXQoc2VsZWN0ZWRFbGVtZW50KTsNCisJCQkJCQljdXJyZW50Vmlld2VyUGFuZS5zZXRUaXRsZShzZWxlY3RlZEVsZW1lbnQpOw0KKwkJCQkJfQ0KKwkJCQl9DQorCQkJfQ0KKwkJfQ0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIGlzIGZvciBpbXBsZW1lbnRpbmcge0BsaW5rIElFZGl0b3JQYXJ0fSBhbmQgc2ltcGx5IHRlc3RzIHRoZSBjb21tYW5kIHN0YWNrLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJQE92ZXJyaWRlDQorCXB1YmxpYyBib29sZWFuIGlzRGlydHkoKSB7DQorCQlyZXR1cm4gKChCYXNpY0NvbW1hbmRTdGFjayllZGl0aW5nRG9tYWluLmdldENvbW1hbmRTdGFjaygpKS5pc1NhdmVOZWVkZWQoKTsNCisJfQ0KKw0KKwkvKioNCisJICogVGhpcyBpcyBmb3IgaW1wbGVtZW50aW5nIHtAbGluayBJRWRpdG9yUGFydH0gYW5kIHNpbXBseSBzYXZlcyB0aGUgbW9kZWwgZmlsZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCUBPdmVycmlkZQ0KKwlwdWJsaWMgdm9pZCBkb1NhdmUoSVByb2dyZXNzTW9uaXRvciBwcm9ncmVzc01vbml0b3IpIHsNCisJCS8vIFNhdmUgb25seSByZXNvdXJjZXMgdGhhdCBoYXZlIGFjdHVhbGx5IGNoYW5nZWQuDQorCQkvLw0KKwkJZmluYWwgTWFwPE9iamVjdCwgT2JqZWN0PiBzYXZlT3B0aW9ucyA9IG5ldyBIYXNoTWFwPE9iamVjdCwgT2JqZWN0PigpOw0KKwkJc2F2ZU9wdGlvbnMucHV0KFJlc291cmNlLk9QVElPTl9TQVZFX09OTFlfSUZfQ0hBTkdFRCwgUmVzb3VyY2UuT1BUSU9OX1NBVkVfT05MWV9JRl9DSEFOR0VEX01FTU9SWV9CVUZGRVIpOw0KKw0KKwkJLy8gRG8gdGhlIHdvcmsgd2l0aGluIGFuIG9wZXJhdGlvbiBiZWNhdXNlIHRoaXMgaXMgYSBsb25nIHJ1bm5pbmcgYWN0aXZpdHkgdGhhdCBtb2RpZmllcyB0aGUgd29ya2JlbmNoLg0KKwkJLy8NCisJCVdvcmtzcGFjZU1vZGlmeU9wZXJhdGlvbiBvcGVyYXRpb24gPQ0KKwkJCW5ldyBXb3Jrc3BhY2VNb2RpZnlPcGVyYXRpb24oKSB7DQorCQkJCS8vIFRoaXMgaXMgdGhlIG1ldGhvZCB0aGF0IGdldHMgaW52b2tlZCB3aGVuIHRoZSBvcGVyYXRpb24gcnVucy4NCisJCQkJLy8NCisJCQkJQE92ZXJyaWRlDQorCQkJCXB1YmxpYyB2b2lkIGV4ZWN1dGUoSVByb2dyZXNzTW9uaXRvciBtb25pdG9yKSB7DQorCQkJCQkvLyBTYXZlIHRoZSByZXNvdXJjZXMgdG8gdGhlIGZpbGUgc3lzdGVtLg0KKwkJCQkJLy8NCisJCQkJCWJvb2xlYW4gZmlyc3QgPSB0cnVlOw0KKwkJCQkJZm9yIChSZXNvdXJjZSByZXNvdXJjZSA6IGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKS5nZXRSZXNvdXJjZXMoKSkgew0KKwkJCQkJCWlmICgoZmlyc3QgfHwgIXJlc291cmNlLmdldENvbnRlbnRzKCkuaXNFbXB0eSgpIHx8IGlzUGVyc2lzdGVkKHJlc291cmNlKSkgJiYgIWVkaXRpbmdEb21haW4uaXNSZWFkT25seShyZXNvdXJjZSkpIHsNCisJCQkJCQkJdHJ5IHsNCisJCQkJCQkJCWxvbmcgdGltZVN0YW1wID0gcmVzb3VyY2UuZ2V0VGltZVN0YW1wKCk7DQorCQkJCQkJCQlyZXNvdXJjZS5zYXZlKHNhdmVPcHRpb25zKTsNCisJCQkJCQkJCWlmIChyZXNvdXJjZS5nZXRUaW1lU3RhbXAoKSAhPSB0aW1lU3RhbXApIHsNCisJCQkJCQkJCQlzYXZlZFJlc291cmNlcy5hZGQocmVzb3VyY2UpOw0KKwkJCQkJCQkJfQ0KKwkJCQkJCQl9DQorCQkJCQkJCWNhdGNoIChFeGNlcHRpb24gZXhjZXB0aW9uKSB7DQorCQkJCQkJCQlyZXNvdXJjZVRvRGlhZ25vc3RpY01hcC5wdXQocmVzb3VyY2UsIGFuYWx5emVSZXNvdXJjZVByb2JsZW1zKHJlc291cmNlLCBleGNlcHRpb24pKTsNCisJCQkJCQkJfQ0KKwkJCQkJCQlmaXJzdCA9IGZhbHNlOw0KKwkJCQkJCX0NCisJCQkJCX0NCisJCQkJfQ0KKwkJCX07DQorDQorCQl1cGRhdGVQcm9ibGVtSW5kaWNhdGlvbiA9IGZhbHNlOw0KKwkJdHJ5IHsNCisJCQkvLyBUaGlzIHJ1bnMgdGhlIG9wdGlvbnMsIGFuZCBzaG93cyBwcm9ncmVzcy4NCisJCQkvLw0KKwkJCW5ldyBQcm9ncmVzc01vbml0b3JEaWFsb2coZ2V0U2l0ZSgpLmdldFNoZWxsKCkpLnJ1bih0cnVlLCBmYWxzZSwgb3BlcmF0aW9uKTsNCisNCisJCQkvLyBSZWZyZXNoIHRoZSBuZWNlc3Nhcnkgc3RhdGUuDQorCQkJLy8NCisJCQkoKEJhc2ljQ29tbWFuZFN0YWNrKWVkaXRpbmdEb21haW4uZ2V0Q29tbWFuZFN0YWNrKCkpLnNhdmVJc0RvbmUoKTsNCisJCQlmaXJlUHJvcGVydHlDaGFuZ2UoSUVkaXRvclBhcnQuUFJPUF9ESVJUWSk7DQorCQl9DQorCQljYXRjaCAoRXhjZXB0aW9uIGV4Y2VwdGlvbikgew0KKwkJCS8vIFNvbWV0aGluZyB3ZW50IHdyb25nIHRoYXQgc2hvdWxkbid0Lg0KKwkJCS8vDQorCQkJU3RhbmRhcmRFZGl0b3JQbHVnaW4uSU5TVEFOQ0UubG9nKGV4Y2VwdGlvbik7DQorCQl9DQorCQl1cGRhdGVQcm9ibGVtSW5kaWNhdGlvbiA9IHRydWU7DQorCQl1cGRhdGVQcm9ibGVtSW5kaWNhdGlvbigpOw0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIHJldHVybnMgd2hldGhlciBzb21ldGhpbmcgaGFzIGJlZW4gcGVyc2lzdGVkIHRvIHRoZSBVUkkgb2YgdGhlIHNwZWNpZmllZCByZXNvdXJjZS4NCisJICogVGhlIGltcGxlbWVudGF0aW9uIHVzZXMgdGhlIFVSSSBjb252ZXJ0ZXIgZnJvbSB0aGUgZWRpdG9yJ3MgcmVzb3VyY2Ugc2V0IHRvIHRyeSB0byBvcGVuIGFuIGlucHV0IHN0cmVhbS4gDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgYm9vbGVhbiBpc1BlcnNpc3RlZChSZXNvdXJjZSByZXNvdXJjZSkgew0KKwkJYm9vbGVhbiByZXN1bHQgPSBmYWxzZTsNCisJCXRyeSB7DQorCQkJSW5wdXRTdHJlYW0gc3RyZWFtID0gZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpLmdldFVSSUNvbnZlcnRlcigpLmNyZWF0ZUlucHV0U3RyZWFtKHJlc291cmNlLmdldFVSSSgpKTsNCisJCQlpZiAoc3RyZWFtICE9IG51bGwpIHsNCisJCQkJcmVzdWx0ID0gdHJ1ZTsNCisJCQkJc3RyZWFtLmNsb3NlKCk7DQorCQkJfQ0KKwkJfQ0KKwkJY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsNCisJCQkvLyBJZ25vcmUNCisJCX0NCisJCXJldHVybiByZXN1bHQ7DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgYWx3YXlzIHJldHVybnMgdHJ1ZSBiZWNhdXNlIGl0IGlzIG5vdCBjdXJyZW50bHkgc3VwcG9ydGVkLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJQE92ZXJyaWRlDQorCXB1YmxpYyBib29sZWFuIGlzU2F2ZUFzQWxsb3dlZCgpIHsNCisJCXJldHVybiB0cnVlOw0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIGFsc28gY2hhbmdlcyB0aGUgZWRpdG9yJ3MgaW5wdXQuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlAT3ZlcnJpZGUNCisJcHVibGljIHZvaWQgZG9TYXZlQXMoKSB7DQorCQlTYXZlQXNEaWFsb2cgc2F2ZUFzRGlhbG9nID0gbmV3IFNhdmVBc0RpYWxvZyhnZXRTaXRlKCkuZ2V0U2hlbGwoKSk7DQorCQlzYXZlQXNEaWFsb2cub3BlbigpOw0KKwkJSVBhdGggcGF0aCA9IHNhdmVBc0RpYWxvZy5nZXRSZXN1bHQoKTsNCisJCWlmIChwYXRoICE9IG51bGwpIHsNCisJCQlJRmlsZSBmaWxlID0gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmdldFJvb3QoKS5nZXRGaWxlKHBhdGgpOw0KKwkJCWlmIChmaWxlICE9IG51bGwpIHsNCisJCQkJZG9TYXZlQXMoVVJJLmNyZWF0ZVBsYXRmb3JtUmVzb3VyY2VVUkkoZmlsZS5nZXRGdWxsUGF0aCgpLnRvU3RyaW5nKCksIHRydWUpLCBuZXcgRmlsZUVkaXRvcklucHV0KGZpbGUpKTsNCisJCQl9DQorCQl9DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgdm9pZCBkb1NhdmVBcyhVUkkgdXJpLCBJRWRpdG9ySW5wdXQgZWRpdG9ySW5wdXQpIHsNCisJCShlZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkuZ2V0UmVzb3VyY2VzKCkuZ2V0KDApKS5zZXRVUkkodXJpKTsNCisJCXNldElucHV0V2l0aE5vdGlmeShlZGl0b3JJbnB1dCk7DQorCQlzZXRQYXJ0TmFtZShlZGl0b3JJbnB1dC5nZXROYW1lKCkpOw0KKwkJSVByb2dyZXNzTW9uaXRvciBwcm9ncmVzc01vbml0b3IgPQ0KKwkJCWdldEFjdGlvbkJhcnMoKS5nZXRTdGF0dXNMaW5lTWFuYWdlcigpICE9IG51bGwgPw0KKwkJCQlnZXRBY3Rpb25CYXJzKCkuZ2V0U3RhdHVzTGluZU1hbmFnZXIoKS5nZXRQcm9ncmVzc01vbml0b3IoKSA6DQorCQkJCW5ldyBOdWxsUHJvZ3Jlc3NNb25pdG9yKCk7DQorCQlkb1NhdmUocHJvZ3Jlc3NNb25pdG9yKTsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyB2b2lkIGdvdG9NYXJrZXIoSU1hcmtlciBtYXJrZXIpIHsNCisJCXRyeSB7DQorCQkJaWYgKG1hcmtlci5nZXRUeXBlKCkuZXF1YWxzKEVWYWxpZGF0b3IuTUFSS0VSKSkgew0KKwkJCQlTdHJpbmcgdXJpQXR0cmlidXRlID0gbWFya2VyLmdldEF0dHJpYnV0ZShFVmFsaWRhdG9yLlVSSV9BVFRSSUJVVEUsIG51bGwpOw0KKwkJCQlpZiAodXJpQXR0cmlidXRlICE9IG51bGwpIHsNCisJCQkJCVVSSSB1cmkgPSBVUkkuY3JlYXRlVVJJKHVyaUF0dHJpYnV0ZSk7DQorCQkJCQlFT2JqZWN0IGVPYmplY3QgPSBlZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkuZ2V0RU9iamVjdCh1cmksIHRydWUpOw0KKwkJCQkJaWYgKGVPYmplY3QgIT0gbnVsbCkgew0KKwkJCQkJICBzZXRTZWxlY3Rpb25Ub1ZpZXdlcihDb2xsZWN0aW9ucy5zaW5nbGV0b24oZWRpdGluZ0RvbWFpbi5nZXRXcmFwcGVyKGVPYmplY3QpKSk7DQorCQkJCQl9DQorCQkJCX0NCisJCQl9DQorCQl9DQorCQljYXRjaCAoQ29yZUV4Y2VwdGlvbiBleGNlcHRpb24pIHsNCisJCQlTdGFuZGFyZEVkaXRvclBsdWdpbi5JTlNUQU5DRS5sb2coZXhjZXB0aW9uKTsNCisJCX0NCisJfQ0KKw0KKwkvKioNCisJICogVGhpcyBpcyBjYWxsZWQgZHVyaW5nIHN0YXJ0dXAuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlAT3ZlcnJpZGUNCisJcHVibGljIHZvaWQgaW5pdChJRWRpdG9yU2l0ZSBzaXRlLCBJRWRpdG9ySW5wdXQgZWRpdG9ySW5wdXQpIHsNCisJCXNldFNpdGUoc2l0ZSk7DQorCQlzZXRJbnB1dFdpdGhOb3RpZnkoZWRpdG9ySW5wdXQpOw0KKwkJc2V0UGFydE5hbWUoZWRpdG9ySW5wdXQuZ2V0TmFtZSgpKTsNCisJCXNpdGUuc2V0U2VsZWN0aW9uUHJvdmlkZXIodGhpcyk7DQorCQlzaXRlLmdldFBhZ2UoKS5hZGRQYXJ0TGlzdGVuZXIocGFydExpc3RlbmVyKTsNCisJCVJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5hZGRSZXNvdXJjZUNoYW5nZUxpc3RlbmVyKHJlc291cmNlQ2hhbmdlTGlzdGVuZXIsIElSZXNvdXJjZUNoYW5nZUV2ZW50LlBPU1RfQ0hBTkdFKTsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCUBPdmVycmlkZQ0KKwlwdWJsaWMgdm9pZCBzZXRGb2N1cygpIHsNCisJCWlmIChjdXJyZW50Vmlld2VyUGFuZSAhPSBudWxsKSB7DQorCQkJY3VycmVudFZpZXdlclBhbmUuc2V0Rm9jdXMoKTsNCisJCX0NCisJCWVsc2Ugew0KKwkJCWdldENvbnRyb2woZ2V0QWN0aXZlUGFnZSgpKS5zZXRGb2N1cygpOw0KKwkJfQ0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIGltcGxlbWVudHMge0BsaW5rIG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvblByb3ZpZGVyfS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyB2b2lkIGFkZFNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcihJU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyIGxpc3RlbmVyKSB7DQorCQlzZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXJzLmFkZChsaXN0ZW5lcik7DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgaW1wbGVtZW50cyB7QGxpbmsgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uUHJvdmlkZXJ9Lg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIHZvaWQgcmVtb3ZlU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyKElTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIgbGlzdGVuZXIpIHsNCisJCXNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcnMucmVtb3ZlKGxpc3RlbmVyKTsNCisJfQ0KKw0KKwkvKioNCisJICogVGhpcyBpbXBsZW1lbnRzIHtAbGluayBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb25Qcm92aWRlcn0gdG8gcmV0dXJuIHRoaXMgZWRpdG9yJ3Mgb3ZlcmFsbCBzZWxlY3Rpb24uDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgSVNlbGVjdGlvbiBnZXRTZWxlY3Rpb24oKSB7DQorCQlyZXR1cm4gZWRpdG9yU2VsZWN0aW9uOw0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIGltcGxlbWVudHMge0BsaW5rIG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvblByb3ZpZGVyfSB0byBzZXQgdGhpcyBlZGl0b3IncyBvdmVyYWxsIHNlbGVjdGlvbi4NCisJICogQ2FsbGluZyB0aGlzIHJlc3VsdCB3aWxsIG5vdGlmeSB0aGUgbGlzdGVuZXJzLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIHZvaWQgc2V0U2VsZWN0aW9uKElTZWxlY3Rpb24gc2VsZWN0aW9uKSB7DQorCQllZGl0b3JTZWxlY3Rpb24gPSBzZWxlY3Rpb247DQorDQorCQlmb3IgKElTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIgbGlzdGVuZXIgOiBzZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXJzKSB7DQorCQkJbGlzdGVuZXIuc2VsZWN0aW9uQ2hhbmdlZChuZXcgU2VsZWN0aW9uQ2hhbmdlZEV2ZW50KHRoaXMsIHNlbGVjdGlvbikpOw0KKwkJfQ0KKwkJc2V0U3RhdHVzTGluZU1hbmFnZXIoc2VsZWN0aW9uKTsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyB2b2lkIHNldFN0YXR1c0xpbmVNYW5hZ2VyKElTZWxlY3Rpb24gc2VsZWN0aW9uKSB7DQorCQlJU3RhdHVzTGluZU1hbmFnZXIgc3RhdHVzTGluZU1hbmFnZXIgPSBjdXJyZW50Vmlld2VyICE9IG51bGwgJiYgY3VycmVudFZpZXdlciA9PSBjb250ZW50T3V0bGluZVZpZXdlciA/DQorCQkJY29udGVudE91dGxpbmVTdGF0dXNMaW5lTWFuYWdlciA6IGdldEFjdGlvbkJhcnMoKS5nZXRTdGF0dXNMaW5lTWFuYWdlcigpOw0KKw0KKwkJaWYgKHN0YXR1c0xpbmVNYW5hZ2VyICE9IG51bGwpIHsNCisJCQlpZiAoc2VsZWN0aW9uIGluc3RhbmNlb2YgSVN0cnVjdHVyZWRTZWxlY3Rpb24pIHsNCisJCQkJQ29sbGVjdGlvbjw/PiBjb2xsZWN0aW9uID0gKChJU3RydWN0dXJlZFNlbGVjdGlvbilzZWxlY3Rpb24pLnRvTGlzdCgpOw0KKwkJCQlzd2l0Y2ggKGNvbGxlY3Rpb24uc2l6ZSgpKSB7DQorCQkJCQljYXNlIDA6IHsNCisJCQkJCQlzdGF0dXNMaW5lTWFuYWdlci5zZXRNZXNzYWdlKGdldFN0cmluZygiX1VJX05vT2JqZWN0U2VsZWN0ZWQiKSk7DQorCQkJCQkJYnJlYWs7DQorCQkJCQl9DQorCQkJCQljYXNlIDE6IHsNCisJCQkJCQlTdHJpbmcgdGV4dCA9IG5ldyBBZGFwdGVyRmFjdG9yeUl0ZW1EZWxlZ2F0b3IoYWRhcHRlckZhY3RvcnkpLmdldFRleHQoY29sbGVjdGlvbi5pdGVyYXRvcigpLm5leHQoKSk7DQorCQkJCQkJc3RhdHVzTGluZU1hbmFnZXIuc2V0TWVzc2FnZShnZXRTdHJpbmcoIl9VSV9TaW5nbGVPYmplY3RTZWxlY3RlZCIsIHRleHQpKTsNCisJCQkJCQlicmVhazsNCisJCQkJCX0NCisJCQkJCWRlZmF1bHQ6IHsNCisJCQkJCQlzdGF0dXNMaW5lTWFuYWdlci5zZXRNZXNzYWdlKGdldFN0cmluZygiX1VJX011bHRpT2JqZWN0U2VsZWN0ZWQiLCBJbnRlZ2VyLnRvU3RyaW5nKGNvbGxlY3Rpb24uc2l6ZSgpKSkpOw0KKwkJCQkJCWJyZWFrOw0KKwkJCQkJfQ0KKwkJCQl9DQorCQkJfQ0KKwkJCWVsc2Ugew0KKwkJCQlzdGF0dXNMaW5lTWFuYWdlci5zZXRNZXNzYWdlKCIiKTsNCisJCQl9DQorCQl9DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgbG9va3MgdXAgYSBzdHJpbmcgaW4gdGhlIHBsdWdpbidzIHBsdWdpbi5wcm9wZXJ0aWVzIGZpbGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcml2YXRlIHN0YXRpYyBTdHJpbmcgZ2V0U3RyaW5nKFN0cmluZyBrZXkpIHsNCisJCXJldHVybiBTdGFuZGFyZEVkaXRvclBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoa2V5KTsNCisJfQ0KKw0KKwkvKioNCisJICogVGhpcyBsb29rcyB1cCBhIHN0cmluZyBpbiBwbHVnaW4ucHJvcGVydGllcywgbWFraW5nIGEgc3Vic3RpdHV0aW9uLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIGdldFN0cmluZyhTdHJpbmcga2V5LCBPYmplY3QgczEpIHsNCisJCXJldHVybiBTdGFuZGFyZEVkaXRvclBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoa2V5LCBuZXcgT2JqZWN0IFtdIHsgczEgfSk7DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgaW1wbGVtZW50cyB7QGxpbmsgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklNZW51TGlzdGVuZXJ9IHRvIGhlbHAgZmlsbCB0aGUgY29udGV4dCBtZW51cyB3aXRoIGNvbnRyaWJ1dGlvbnMgZnJvbSB0aGUgRWRpdCBtZW51Lg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIHZvaWQgbWVudUFib3V0VG9TaG93KElNZW51TWFuYWdlciBtZW51TWFuYWdlcikgew0KKwkJKChJTWVudUxpc3RlbmVyKWdldEVkaXRvclNpdGUoKS5nZXRBY3Rpb25CYXJDb250cmlidXRvcigpKS5tZW51QWJvdXRUb1Nob3cobWVudU1hbmFnZXIpOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIEVkaXRpbmdEb21haW5BY3Rpb25CYXJDb250cmlidXRvciBnZXRBY3Rpb25CYXJDb250cmlidXRvcigpIHsNCisJCXJldHVybiAoRWRpdGluZ0RvbWFpbkFjdGlvbkJhckNvbnRyaWJ1dG9yKWdldEVkaXRvclNpdGUoKS5nZXRBY3Rpb25CYXJDb250cmlidXRvcigpOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIElBY3Rpb25CYXJzIGdldEFjdGlvbkJhcnMoKSB7DQorCQlyZXR1cm4gZ2V0QWN0aW9uQmFyQ29udHJpYnV0b3IoKS5nZXRBY3Rpb25CYXJzKCk7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgQWRhcHRlckZhY3RvcnkgZ2V0QWRhcHRlckZhY3RvcnkoKSB7DQorCQlyZXR1cm4gYWRhcHRlckZhY3Rvcnk7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlAT3ZlcnJpZGUNCisJcHVibGljIHZvaWQgZGlzcG9zZSgpIHsNCisJCXVwZGF0ZVByb2JsZW1JbmRpY2F0aW9uID0gZmFsc2U7DQorDQorCQlSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkucmVtb3ZlUmVzb3VyY2VDaGFuZ2VMaXN0ZW5lcihyZXNvdXJjZUNoYW5nZUxpc3RlbmVyKTsNCisNCisJCWdldFNpdGUoKS5nZXRQYWdlKCkucmVtb3ZlUGFydExpc3RlbmVyKHBhcnRMaXN0ZW5lcik7DQorDQorCQlhZGFwdGVyRmFjdG9yeS5kaXNwb3NlKCk7DQorDQorCQlpZiAoZ2V0QWN0aW9uQmFyQ29udHJpYnV0b3IoKS5nZXRBY3RpdmVFZGl0b3IoKSA9PSB0aGlzKSB7DQorCQkJZ2V0QWN0aW9uQmFyQ29udHJpYnV0b3IoKS5zZXRBY3RpdmVFZGl0b3IobnVsbCk7DQorCQl9DQorDQorCQlpZiAocHJvcGVydHlTaGVldFBhZ2UgIT0gbnVsbCkgew0KKwkJCXByb3BlcnR5U2hlZXRQYWdlLmRpc3Bvc2UoKTsNCisJCX0NCisNCisJCWlmIChjb250ZW50T3V0bGluZVBhZ2UgIT0gbnVsbCkgew0KKwkJCWNvbnRlbnRPdXRsaW5lUGFnZS5kaXNwb3NlKCk7DQorCQl9DQorDQorCQlzdXBlci5kaXNwb3NlKCk7DQorCX0NCisNCisJLyoqDQorCSAqIFJldHVybnMgd2hldGhlciB0aGUgb3V0bGluZSB2aWV3IHNob3VsZCBiZSBwcmVzZW50ZWQgdG8gdGhlIHVzZXIuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgYm9vbGVhbiBzaG93T3V0bGluZVZpZXcoKSB7DQorCQlyZXR1cm4gdHJ1ZTsNCisJfQ0KK30NCmRpZmYgLS1naXQgYS9tb2RlbHMvcG9wdWxhdGlvbnMvb3JnLmVjbGlwc2Uuc3RlbS51aS5wb3B1bGF0aW9ubW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3BvcHVsYXRpb25tb2RlbHMvc3RhbmRhcmQvcHJlc2VudGF0aW9uL1N0YW5kYXJkRWRpdG9yUGx1Z2luLmphdmEgYi9tb2RlbHMvcG9wdWxhdGlvbnMvb3JnLmVjbGlwc2Uuc3RlbS51aS5wb3B1bGF0aW9ubW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3BvcHVsYXRpb25tb2RlbHMvc3RhbmRhcmQvcHJlc2VudGF0aW9uL1N0YW5kYXJkRWRpdG9yUGx1Z2luLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTBkNzYzZAotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9wb3B1bGF0aW9ucy9vcmcuZWNsaXBzZS5zdGVtLnVpLnBvcHVsYXRpb25tb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vcG9wdWxhdGlvbm1vZGVscy9zdGFuZGFyZC9wcmVzZW50YXRpb24vU3RhbmRhcmRFZGl0b3JQbHVnaW4uamF2YQpAQCAtMCwwICsxLDExMyBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQucHJlc2VudGF0aW9uOw0KKw0KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorICogQ29weXJpZ2h0IChjKSAyMDA5IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLg0KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMNCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjANCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdA0KKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sDQorICoNCisgKiBDb250cmlidXRvcnM6DQorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbg0KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KKw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLkVNRlBsdWdpbjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51aS5FY2xpcHNlVUlQbHVnaW47DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5SZXNvdXJjZUxvY2F0b3I7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5wcm92aWRlci5FY29yZUVkaXRQbHVnaW47DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24ucHJvdmlkZXIuQ29yZUVkaXRQbHVnaW47DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuZWRnZXMucHJvdmlkZXIuRGVmaW5pdGlvbnNFZGl0UGx1Z2luOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnVpLnBvcHVsYXRpb25tb2RlbHMuYWRhcHRlcnMuU3RhbmRhcmRSZWxhdGl2ZVZhbHVlUHJvdmlkZXJBZGFwdGVyRmFjdG9yeTsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS51aS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLndpemFyZHMuU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxQcm9wZXJ0eUVkaXRvckFkYXB0ZXJGYWN0b3J5Ow0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnVpLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQud2l6YXJkcy5TdGFuZGFyZFByb3BlcnR5U3RyaW5nUHJvdmlkZXJBZGFwdGVyRmFjdG9yeTsNCisNCisvKioNCisgKiBUaGlzIGlzIHRoZSBjZW50cmFsIHNpbmdsZXRvbiBmb3IgdGhlIFN0YW5kYXJkIGVkaXRvciBwbHVnaW4uDQorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisgKiBAZ2VuZXJhdGVkDQorICovDQorQFN1cHByZXNzV2FybmluZ3MoInN5bnRoZXRpYy1hY2Nlc3MiKQ0KK3B1YmxpYyBmaW5hbCBjbGFzcyBTdGFuZGFyZEVkaXRvclBsdWdpbiBleHRlbmRzIEVNRlBsdWdpbiB7DQorCS8qKg0KKwkgKiBLZWVwIHRyYWNrIG9mIHRoZSBzaW5nbGV0b24uDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgc3RhdGljIGZpbmFsIFN0YW5kYXJkRWRpdG9yUGx1Z2luIElOU1RBTkNFID0gbmV3IFN0YW5kYXJkRWRpdG9yUGx1Z2luKCk7DQorCQ0KKwkvKioNCisJICogS2VlcCB0cmFjayBvZiB0aGUgc2luZ2xldG9uLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJpdmF0ZSBzdGF0aWMgSW1wbGVtZW50YXRpb24gcGx1Z2luOw0KKw0KKwkvKioNCisJICogQ3JlYXRlIHRoZSBpbnN0YW5jZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBTdGFuZGFyZEVkaXRvclBsdWdpbigpIHsNCisJCXN1cGVyDQorCQkJKG5ldyBSZXNvdXJjZUxvY2F0b3IgW10gew0KKwkJCQlDb3JlRWRpdFBsdWdpbi5JTlNUQU5DRSwNCisJCQkJRGVmaW5pdGlvbnNFZGl0UGx1Z2luLklOU1RBTkNFLA0KKwkJCQlFY29yZUVkaXRQbHVnaW4uSU5TVEFOQ0UsDQorCQkJfSk7DQorCX0NCisNCisJLyoqDQorCSAqIFJldHVybnMgdGhlIHNpbmdsZXRvbiBpbnN0YW5jZSBvZiB0aGUgRWNsaXBzZSBwbHVnaW4uDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcmV0dXJuIHRoZSBzaW5nbGV0b24gaW5zdGFuY2UuDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCUBPdmVycmlkZQ0KKwlwdWJsaWMgUmVzb3VyY2VMb2NhdG9yIGdldFBsdWdpblJlc291cmNlTG9jYXRvcigpIHsNCisJCXJldHVybiBwbHVnaW47DQorCX0NCisJDQorCS8qKg0KKwkgKiBSZXR1cm5zIHRoZSBzaW5nbGV0b24gaW5zdGFuY2Ugb2YgdGhlIEVjbGlwc2UgcGx1Z2luLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHJldHVybiB0aGUgc2luZ2xldG9uIGluc3RhbmNlLg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgc3RhdGljIEltcGxlbWVudGF0aW9uIGdldFBsdWdpbigpIHsNCisJCXJldHVybiBwbHVnaW47DQorCX0NCisJDQorCS8qKg0KKwkgKiBUaGUgYWN0dWFsIGltcGxlbWVudGF0aW9uIG9mIHRoZSBFY2xpcHNlIDxiPlBsdWdpbjwvYj4uDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgc3RhdGljIGNsYXNzIEltcGxlbWVudGF0aW9uIGV4dGVuZHMgRWNsaXBzZVVJUGx1Z2luIHsNCisJCS8qKg0KKwkJICogQ3JlYXRlcyBhbiBpbnN0YW5jZS4NCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJCSAqIEBnZW5lcmF0ZWQgTk9UDQorCQkgKi8NCisJCXB1YmxpYyBJbXBsZW1lbnRhdGlvbigpIHsNCisJCQlzdXBlcigpOw0KKwkNCisJCQkvLyBSZW1lbWJlciB0aGUgc3RhdGljIGluc3RhbmNlLg0KKwkJCS8vDQorCQkJcGx1Z2luID0gdGhpczsNCisJCQluZXcgU3RhbmRhcmRQcm9wZXJ0eVN0cmluZ1Byb3ZpZGVyQWRhcHRlckZhY3RvcnkoKTsNCisJCQluZXcgU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxQcm9wZXJ0eUVkaXRvckFkYXB0ZXJGYWN0b3J5KCk7DQorCQkJbmV3IFN0YW5kYXJkRWRpdG9yKCk7DQorCQkJLy8gQWRkIHRvIFJlbGF0aXZlVmFsdWVQcm92aWRlckFkYXB0ZXJGYWN0b3J5LklOU1RBTkNFDQorCQkJbmV3IFN0YW5kYXJkUmVsYXRpdmVWYWx1ZVByb3ZpZGVyQWRhcHRlckZhY3RvcnkoKTsNCisJCX0NCisJfQ0KKw0KK30NCmRpZmYgLS1naXQgYS9tb2RlbHMvcG9wdWxhdGlvbnMvb3JnLmVjbGlwc2Uuc3RlbS51aS5wb3B1bGF0aW9ubW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3BvcHVsYXRpb25tb2RlbHMvc3RhbmRhcmQvcHJlc2VudGF0aW9uL1N0YW5kYXJkTW9kZWxXaXphcmQuamF2YSBiL21vZGVscy9wb3B1bGF0aW9ucy9vcmcuZWNsaXBzZS5zdGVtLnVpLnBvcHVsYXRpb25tb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vcG9wdWxhdGlvbm1vZGVscy9zdGFuZGFyZC9wcmVzZW50YXRpb24vU3RhbmRhcmRNb2RlbFdpemFyZC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRmNTMzZGEKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvcG9wdWxhdGlvbnMvb3JnLmVjbGlwc2Uuc3RlbS51aS5wb3B1bGF0aW9ubW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3BvcHVsYXRpb25tb2RlbHMvc3RhbmRhcmQvcHJlc2VudGF0aW9uL1N0YW5kYXJkTW9kZWxXaXphcmQuamF2YQpAQCAtMCwwICsxLDYxMSBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQucHJlc2VudGF0aW9uOw0KKw0KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorICogQ29weXJpZ2h0IChjKSAyMDA5IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLg0KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMNCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjANCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdA0KKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sDQorICoNCisgKiBDb250cmlidXRvcnM6DQorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbg0KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KKw0KKw0KK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0Ow0KK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlzOw0KK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsNCitpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb25zOw0KK2ltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsNCitpbXBvcnQgamF2YS51dGlsLkxpc3Q7DQoraW1wb3J0IGphdmEudXRpbC5NYXA7DQoraW1wb3J0IGphdmEudXRpbC5NaXNzaW5nUmVzb3VyY2VFeGNlcHRpb247DQoraW1wb3J0IGphdmEudXRpbC5TdHJpbmdUb2tlbml6ZXI7DQorDQoraW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklDb250YWluZXI7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklGaWxlOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JRm9sZGVyOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdDsNCitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVJlc291cmNlOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5SZXNvdXJjZXNQbHVnaW47DQoraW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUHJvZ3Jlc3NNb25pdG9yOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGF0aDsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5Db21tb25QbHVnaW47DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5VUkk7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3NpZmllcjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3Q7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5yZXNvdXJjZS5SZXNvdXJjZTsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnJlc291cmNlLlJlc291cmNlU2V0Ow0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUucmVzb3VyY2UuaW1wbC5SZXNvdXJjZVNldEltcGw7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS54bWkuWE1MUmVzb3VyY2U7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLnByb3ZpZGVyLkV4dGVuZGVkSW1hZ2VSZWdpc3RyeTsNCitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuZGlhbG9ncy5NZXNzYWdlRGlhbG9nOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb247DQoraW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVN0cnVjdHVyZWRTZWxlY3Rpb247DQoraW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuU3RydWN0dXJlZFNlbGVjdGlvbjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uud2l6YXJkLldpemFyZDsNCitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uud2l6YXJkLldpemFyZFBhZ2U7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZEZhY3Rvcnk7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZFBhY2thZ2U7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5wcm92aWRlci5TdGFuZGFyZEVkaXRQbHVnaW47DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5TV1Q7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuTW9kaWZ5RXZlbnQ7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuTW9kaWZ5TGlzdGVuZXI7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5sYXlvdXQuR3JpZERhdGE7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5sYXlvdXQuR3JpZExheW91dDsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tYm87DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZTsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuTGFiZWw7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnVpLklOZXdXaXphcmQ7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2g7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2hQYWdlOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5JV29ya2JlbmNoUGFydDsNCitpbXBvcnQgb3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaFdpbmRvdzsNCitpbXBvcnQgb3JnLmVjbGlwc2UudWkuUGFydEluaXRFeGNlcHRpb247DQoraW1wb3J0IG9yZy5lY2xpcHNlLnVpLmFjdGlvbnMuV29ya3NwYWNlTW9kaWZ5T3BlcmF0aW9uOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5kaWFsb2dzLldpemFyZE5ld0ZpbGVDcmVhdGlvblBhZ2U7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnVpLnBhcnQuRmlsZUVkaXRvcklucHV0Ow0KK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5wYXJ0LklTZXRTZWxlY3Rpb25UYXJnZXQ7DQorDQorDQorLyoqDQorICogVGhpcyBpcyBhIHNpbXBsZSB3aXphcmQgZm9yIGNyZWF0aW5nIGEgbmV3IG1vZGVsIGZpbGUuDQorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisgKiBAZ2VuZXJhdGVkDQorICovDQorcHVibGljIGNsYXNzIFN0YW5kYXJkTW9kZWxXaXphcmQgZXh0ZW5kcyBXaXphcmQgaW1wbGVtZW50cyBJTmV3V2l6YXJkIHsNCisJLyoqDQorCSAqIFRoZSBzdXBwb3J0ZWQgZXh0ZW5zaW9ucyBmb3IgY3JlYXRlZCBmaWxlcy4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBzdGF0aWMgZmluYWwgTGlzdDxTdHJpbmc+IEZJTEVfRVhURU5TSU9OUyA9DQorCQlDb2xsZWN0aW9ucy51bm1vZGlmaWFibGVMaXN0KEFycmF5cy5hc0xpc3QoU3RhbmRhcmRFZGl0b3JQbHVnaW4uSU5TVEFOQ0UuZ2V0U3RyaW5nKCJfVUlfU3RhbmRhcmRFZGl0b3JGaWxlbmFtZUV4dGVuc2lvbnMiKS5zcGxpdCgiXFxzKixcXHMqIikpKTsNCisNCisJLyoqDQorCSAqIEEgZm9ybWF0dGVkIGxpc3Qgb2Ygc3VwcG9ydGVkIGZpbGUgZXh0ZW5zaW9ucywgc3VpdGFibGUgZm9yIGRpc3BsYXkuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBGT1JNQVRURURfRklMRV9FWFRFTlNJT05TID0NCisJCVN0YW5kYXJkRWRpdG9yUGx1Z2luLklOU1RBTkNFLmdldFN0cmluZygiX1VJX1N0YW5kYXJkRWRpdG9yRmlsZW5hbWVFeHRlbnNpb25zIikucmVwbGFjZUFsbCgiXFxzKixcXHMqIiwgIiwgIik7DQorDQorCS8qKg0KKwkgKiBUaGlzIGNhY2hlcyBhbiBpbnN0YW5jZSBvZiB0aGUgbW9kZWwgcGFja2FnZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCBTdGFuZGFyZFBhY2thZ2Ugc3RhbmRhcmRQYWNrYWdlID0gU3RhbmRhcmRQYWNrYWdlLmVJTlNUQU5DRTsNCisNCisJLyoqDQorCSAqIFRoaXMgY2FjaGVzIGFuIGluc3RhbmNlIG9mIHRoZSBtb2RlbCBmYWN0b3J5Lg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIFN0YW5kYXJkRmFjdG9yeSBzdGFuZGFyZEZhY3RvcnkgPSBzdGFuZGFyZFBhY2thZ2UuZ2V0U3RhbmRhcmRGYWN0b3J5KCk7DQorDQorCS8qKg0KKwkgKiBUaGlzIGlzIHRoZSBmaWxlIGNyZWF0aW9uIHBhZ2UuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgU3RhbmRhcmRNb2RlbFdpemFyZE5ld0ZpbGVDcmVhdGlvblBhZ2UgbmV3RmlsZUNyZWF0aW9uUGFnZTsNCisNCisJLyoqDQorCSAqIFRoaXMgaXMgdGhlIGluaXRpYWwgb2JqZWN0IGNyZWF0aW9uIHBhZ2UuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgU3RhbmRhcmRNb2RlbFdpemFyZEluaXRpYWxPYmplY3RDcmVhdGlvblBhZ2UgaW5pdGlhbE9iamVjdENyZWF0aW9uUGFnZTsNCisNCisJLyoqDQorCSAqIFJlbWVtYmVyIHRoZSBzZWxlY3Rpb24gZHVyaW5nIGluaXRpYWxpemF0aW9uIGZvciBwb3B1bGF0aW5nIHRoZSBkZWZhdWx0IGNvbnRhaW5lci4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCBJU3RydWN0dXJlZFNlbGVjdGlvbiBzZWxlY3Rpb247DQorDQorCS8qKg0KKwkgKiBSZW1lbWJlciB0aGUgd29ya2JlbmNoIGR1cmluZyBpbml0aWFsaXphdGlvbi4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCBJV29ya2JlbmNoIHdvcmtiZW5jaDsNCisNCisJLyoqDQorCSAqIENhY2hlcyB0aGUgbmFtZXMgb2YgdGhlIHR5cGVzIHRoYXQgY2FuIGJlIGNyZWF0ZWQgYXMgdGhlIHJvb3Qgb2JqZWN0Lg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIExpc3Q8U3RyaW5nPiBpbml0aWFsT2JqZWN0TmFtZXM7DQorDQorCS8qKg0KKwkgKiBUaGlzIGp1c3QgcmVjb3JkcyB0aGUgaW5mb3JtYXRpb24uDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgdm9pZCBpbml0KElXb3JrYmVuY2ggd29ya2JlbmNoLCBJU3RydWN0dXJlZFNlbGVjdGlvbiBzZWxlY3Rpb24pIHsNCisJCXRoaXMud29ya2JlbmNoID0gd29ya2JlbmNoOw0KKwkJdGhpcy5zZWxlY3Rpb24gPSBzZWxlY3Rpb247DQorCQlzZXRXaW5kb3dUaXRsZShTdGFuZGFyZEVkaXRvclBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoIl9VSV9XaXphcmRfbGFiZWwiKSk7DQorCQlzZXREZWZhdWx0UGFnZUltYWdlRGVzY3JpcHRvcihFeHRlbmRlZEltYWdlUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0SW1hZ2VEZXNjcmlwdG9yKFN0YW5kYXJkRWRpdG9yUGx1Z2luLklOU1RBTkNFLmdldEltYWdlKCJmdWxsL3dpemJhbi9OZXdTdGFuZGFyZCIpKSk7DQorCX0NCisNCisJLyoqDQorCSAqIFJldHVybnMgdGhlIG5hbWVzIG9mIHRoZSB0eXBlcyB0aGF0IGNhbiBiZSBjcmVhdGVkIGFzIHRoZSByb290IG9iamVjdC4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCBDb2xsZWN0aW9uPFN0cmluZz4gZ2V0SW5pdGlhbE9iamVjdE5hbWVzKCkgew0KKwkJaWYgKGluaXRpYWxPYmplY3ROYW1lcyA9PSBudWxsKSB7DQorCQkJaW5pdGlhbE9iamVjdE5hbWVzID0gbmV3IEFycmF5TGlzdDxTdHJpbmc+KCk7DQorCQkJZm9yIChFQ2xhc3NpZmllciBlQ2xhc3NpZmllciA6IHN0YW5kYXJkUGFja2FnZS5nZXRFQ2xhc3NpZmllcnMoKSkgew0KKwkJCQlpZiAoZUNsYXNzaWZpZXIgaW5zdGFuY2VvZiBFQ2xhc3MpIHsNCisJCQkJCUVDbGFzcyBlQ2xhc3MgPSAoRUNsYXNzKWVDbGFzc2lmaWVyOw0KKwkJCQkJaWYgKCFlQ2xhc3MuaXNBYnN0cmFjdCgpKSB7DQorCQkJCQkJaW5pdGlhbE9iamVjdE5hbWVzLmFkZChlQ2xhc3MuZ2V0TmFtZSgpKTsNCisJCQkJCX0NCisJCQkJfQ0KKwkJCX0NCisJCQlDb2xsZWN0aW9ucy5zb3J0KGluaXRpYWxPYmplY3ROYW1lcywgQ29tbW9uUGx1Z2luLklOU1RBTkNFLmdldENvbXBhcmF0b3IoKSk7DQorCQl9DQorCQlyZXR1cm4gaW5pdGlhbE9iamVjdE5hbWVzOw0KKwl9DQorDQorCS8qKg0KKwkgKiBDcmVhdGUgYSBuZXcgbW9kZWwuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgRU9iamVjdCBjcmVhdGVJbml0aWFsTW9kZWwoKSB7DQorCQlFQ2xhc3MgZUNsYXNzID0gKEVDbGFzcylzdGFuZGFyZFBhY2thZ2UuZ2V0RUNsYXNzaWZpZXIoaW5pdGlhbE9iamVjdENyZWF0aW9uUGFnZS5nZXRJbml0aWFsT2JqZWN0TmFtZSgpKTsNCisJCUVPYmplY3Qgcm9vdE9iamVjdCA9IHN0YW5kYXJkRmFjdG9yeS5jcmVhdGUoZUNsYXNzKTsNCisJCXJldHVybiByb290T2JqZWN0Ow0KKwl9DQorDQorCS8qKg0KKwkgKiBEbyB0aGUgd29yayBhZnRlciBldmVyeXRoaW5nIGlzIHNwZWNpZmllZC4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCUBPdmVycmlkZQ0KKwlwdWJsaWMgYm9vbGVhbiBwZXJmb3JtRmluaXNoKCkgew0KKwkJdHJ5IHsNCisJCQkvLyBSZW1lbWJlciB0aGUgZmlsZS4NCisJCQkvLw0KKwkJCWZpbmFsIElGaWxlIG1vZGVsRmlsZSA9IGdldE1vZGVsRmlsZSgpOw0KKw0KKwkJCS8vIERvIHRoZSB3b3JrIHdpdGhpbiBhbiBvcGVyYXRpb24uDQorCQkJLy8NCisJCQlXb3Jrc3BhY2VNb2RpZnlPcGVyYXRpb24gb3BlcmF0aW9uID0NCisJCQkJbmV3IFdvcmtzcGFjZU1vZGlmeU9wZXJhdGlvbigpIHsNCisJCQkJCUBPdmVycmlkZQ0KKwkJCQkJcHJvdGVjdGVkIHZvaWQgZXhlY3V0ZShJUHJvZ3Jlc3NNb25pdG9yIHByb2dyZXNzTW9uaXRvcikgew0KKwkJCQkJCXRyeSB7DQorCQkJCQkJCS8vIENyZWF0ZSBhIHJlc291cmNlIHNldA0KKwkJCQkJCQkvLw0KKwkJCQkJCQlSZXNvdXJjZVNldCByZXNvdXJjZVNldCA9IG5ldyBSZXNvdXJjZVNldEltcGwoKTsNCisNCisJCQkJCQkJLy8gR2V0IHRoZSBVUkkgb2YgdGhlIG1vZGVsIGZpbGUuDQorCQkJCQkJCS8vDQorCQkJCQkJCVVSSSBmaWxlVVJJID0gVVJJLmNyZWF0ZVBsYXRmb3JtUmVzb3VyY2VVUkkobW9kZWxGaWxlLmdldEZ1bGxQYXRoKCkudG9TdHJpbmcoKSwgdHJ1ZSk7DQorDQorCQkJCQkJCS8vIENyZWF0ZSBhIHJlc291cmNlIGZvciB0aGlzIGZpbGUuDQorCQkJCQkJCS8vDQorCQkJCQkJCVJlc291cmNlIHJlc291cmNlID0gcmVzb3VyY2VTZXQuY3JlYXRlUmVzb3VyY2UoZmlsZVVSSSk7DQorDQorCQkJCQkJCS8vIEFkZCB0aGUgaW5pdGlhbCBtb2RlbCBvYmplY3QgdG8gdGhlIGNvbnRlbnRzLg0KKwkJCQkJCQkvLw0KKwkJCQkJCQlFT2JqZWN0IHJvb3RPYmplY3QgPSBjcmVhdGVJbml0aWFsTW9kZWwoKTsNCisJCQkJCQkJaWYgKHJvb3RPYmplY3QgIT0gbnVsbCkgew0KKwkJCQkJCQkJcmVzb3VyY2UuZ2V0Q29udGVudHMoKS5hZGQocm9vdE9iamVjdCk7DQorCQkJCQkJCX0NCisNCisJCQkJCQkJLy8gU2F2ZSB0aGUgY29udGVudHMgb2YgdGhlIHJlc291cmNlIHRvIHRoZSBmaWxlIHN5c3RlbS4NCisJCQkJCQkJLy8NCisJCQkJCQkJTWFwPE9iamVjdCwgT2JqZWN0PiBvcHRpb25zID0gbmV3IEhhc2hNYXA8T2JqZWN0LCBPYmplY3Q+KCk7DQorCQkJCQkJCW9wdGlvbnMucHV0KFhNTFJlc291cmNlLk9QVElPTl9FTkNPRElORywgaW5pdGlhbE9iamVjdENyZWF0aW9uUGFnZS5nZXRFbmNvZGluZygpKTsNCisJCQkJCQkJcmVzb3VyY2Uuc2F2ZShvcHRpb25zKTsNCisJCQkJCQl9DQorCQkJCQkJY2F0Y2ggKEV4Y2VwdGlvbiBleGNlcHRpb24pIHsNCisJCQkJCQkJU3RhbmRhcmRFZGl0b3JQbHVnaW4uSU5TVEFOQ0UubG9nKGV4Y2VwdGlvbik7DQorCQkJCQkJfQ0KKwkJCQkJCWZpbmFsbHkgew0KKwkJCQkJCQlwcm9ncmVzc01vbml0b3IuZG9uZSgpOw0KKwkJCQkJCX0NCisJCQkJCX0NCisJCQkJfTsNCisNCisJCQlnZXRDb250YWluZXIoKS5ydW4oZmFsc2UsIGZhbHNlLCBvcGVyYXRpb24pOw0KKw0KKwkJCS8vIFNlbGVjdCB0aGUgbmV3IGZpbGUgcmVzb3VyY2UgaW4gdGhlIGN1cnJlbnQgdmlldy4NCisJCQkvLw0KKwkJCUlXb3JrYmVuY2hXaW5kb3cgd29ya2JlbmNoV2luZG93ID0gd29ya2JlbmNoLmdldEFjdGl2ZVdvcmtiZW5jaFdpbmRvdygpOw0KKwkJCUlXb3JrYmVuY2hQYWdlIHBhZ2UgPSB3b3JrYmVuY2hXaW5kb3cuZ2V0QWN0aXZlUGFnZSgpOw0KKwkJCWZpbmFsIElXb3JrYmVuY2hQYXJ0IGFjdGl2ZVBhcnQgPSBwYWdlLmdldEFjdGl2ZVBhcnQoKTsNCisJCQlpZiAoYWN0aXZlUGFydCBpbnN0YW5jZW9mIElTZXRTZWxlY3Rpb25UYXJnZXQpIHsNCisJCQkJZmluYWwgSVNlbGVjdGlvbiB0YXJnZXRTZWxlY3Rpb24gPSBuZXcgU3RydWN0dXJlZFNlbGVjdGlvbihtb2RlbEZpbGUpOw0KKwkJCQlnZXRTaGVsbCgpLmdldERpc3BsYXkoKS5hc3luY0V4ZWMNCisJCQkJCShuZXcgUnVubmFibGUoKSB7DQorCQkJCQkJIHB1YmxpYyB2b2lkIHJ1bigpIHsNCisJCQkJCQkJICgoSVNldFNlbGVjdGlvblRhcmdldClhY3RpdmVQYXJ0KS5zZWxlY3RSZXZlYWwodGFyZ2V0U2VsZWN0aW9uKTsNCisJCQkJCQkgfQ0KKwkJCQkJIH0pOw0KKwkJCX0NCisNCisJCQkvLyBPcGVuIGFuIGVkaXRvciBvbiB0aGUgbmV3IGZpbGUuDQorCQkJLy8NCisJCQl0cnkgew0KKwkJCQlwYWdlLm9wZW5FZGl0b3INCisJCQkJCShuZXcgRmlsZUVkaXRvcklucHV0KG1vZGVsRmlsZSksDQorCQkJCQkgd29ya2JlbmNoLmdldEVkaXRvclJlZ2lzdHJ5KCkuZ2V0RGVmYXVsdEVkaXRvcihtb2RlbEZpbGUuZ2V0RnVsbFBhdGgoKS50b1N0cmluZygpKS5nZXRJZCgpKTsJCQkJCSAJIA0KKwkJCX0NCisJCQljYXRjaCAoUGFydEluaXRFeGNlcHRpb24gZXhjZXB0aW9uKSB7DQorCQkJCU1lc3NhZ2VEaWFsb2cub3BlbkVycm9yKHdvcmtiZW5jaFdpbmRvdy5nZXRTaGVsbCgpLCBTdGFuZGFyZEVkaXRvclBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoIl9VSV9PcGVuRWRpdG9yRXJyb3JfbGFiZWwiKSwgZXhjZXB0aW9uLmdldE1lc3NhZ2UoKSk7DQorCQkJCXJldHVybiBmYWxzZTsNCisJCQl9DQorDQorCQkJcmV0dXJuIHRydWU7DQorCQl9DQorCQljYXRjaCAoRXhjZXB0aW9uIGV4Y2VwdGlvbikgew0KKwkJCVN0YW5kYXJkRWRpdG9yUGx1Z2luLklOU1RBTkNFLmxvZyhleGNlcHRpb24pOw0KKwkJCXJldHVybiBmYWxzZTsNCisJCX0NCisJfQ0KKw0KKwkvKioNCisJICogVGhpcyBpcyB0aGUgb25lIHBhZ2Ugb2YgdGhlIHdpemFyZC4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBjbGFzcyBTdGFuZGFyZE1vZGVsV2l6YXJkTmV3RmlsZUNyZWF0aW9uUGFnZSBleHRlbmRzIFdpemFyZE5ld0ZpbGVDcmVhdGlvblBhZ2Ugew0KKwkJLyoqDQorCQkgKiBQYXNzIGluIHRoZSBzZWxlY3Rpb24uDQorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCQkgKiBAZ2VuZXJhdGVkDQorCQkgKi8NCisJCXB1YmxpYyBTdGFuZGFyZE1vZGVsV2l6YXJkTmV3RmlsZUNyZWF0aW9uUGFnZShTdHJpbmcgcGFnZUlkLCBJU3RydWN0dXJlZFNlbGVjdGlvbiBzZWxlY3Rpb24pIHsNCisJCQlzdXBlcihwYWdlSWQsIHNlbGVjdGlvbik7DQorCQl9DQorDQorCQkvKioNCisJCSAqIFRoZSBmcmFtZXdvcmsgY2FsbHMgdGhpcyB0byBzZWUgaWYgdGhlIGZpbGUgaXMgY29ycmVjdC4NCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJCSAqIEBnZW5lcmF0ZWQNCisJCSAqLw0KKwkJQE92ZXJyaWRlDQorCQlwcm90ZWN0ZWQgYm9vbGVhbiB2YWxpZGF0ZVBhZ2UoKSB7DQorCQkJaWYgKHN1cGVyLnZhbGlkYXRlUGFnZSgpKSB7DQorCQkJCVN0cmluZyBleHRlbnNpb24gPSBuZXcgUGF0aChnZXRGaWxlTmFtZSgpKS5nZXRGaWxlRXh0ZW5zaW9uKCk7DQorCQkJCWlmIChleHRlbnNpb24gPT0gbnVsbCB8fCAhRklMRV9FWFRFTlNJT05TLmNvbnRhaW5zKGV4dGVuc2lvbikpIHsNCisJCQkJCVN0cmluZyBrZXkgPSBGSUxFX0VYVEVOU0lPTlMuc2l6ZSgpID4gMSA/ICJfV0FSTl9GaWxlbmFtZUV4dGVuc2lvbnMiIDogIl9XQVJOX0ZpbGVuYW1lRXh0ZW5zaW9uIjsNCisJCQkJCXNldEVycm9yTWVzc2FnZShTdGFuZGFyZEVkaXRvclBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoa2V5LCBuZXcgT2JqZWN0IFtdIHsgRk9STUFUVEVEX0ZJTEVfRVhURU5TSU9OUyB9KSk7DQorCQkJCQlyZXR1cm4gZmFsc2U7DQorCQkJCX0NCisJCQkJcmV0dXJuIHRydWU7DQorCQkJfQ0KKwkJCXJldHVybiBmYWxzZTsNCisJCX0NCisNCisJCS8qKg0KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkJICogQGdlbmVyYXRlZA0KKwkJICovDQorCQlwdWJsaWMgSUZpbGUgZ2V0TW9kZWxGaWxlKCkgew0KKwkJCXJldHVybiBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuZ2V0Um9vdCgpLmdldEZpbGUoZ2V0Q29udGFpbmVyRnVsbFBhdGgoKS5hcHBlbmQoZ2V0RmlsZU5hbWUoKSkpOw0KKwkJfQ0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIGlzIHRoZSBwYWdlIHdoZXJlIHRoZSB0eXBlIG9mIG9iamVjdCB0byBjcmVhdGUgaXMgc2VsZWN0ZWQuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgY2xhc3MgU3RhbmRhcmRNb2RlbFdpemFyZEluaXRpYWxPYmplY3RDcmVhdGlvblBhZ2UgZXh0ZW5kcyBXaXphcmRQYWdlIHsNCisJCS8qKg0KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkJICogQGdlbmVyYXRlZA0KKwkJICovDQorCQlwcm90ZWN0ZWQgQ29tYm8gaW5pdGlhbE9iamVjdEZpZWxkOw0KKw0KKwkJLyoqDQorCQkgKiBAZ2VuZXJhdGVkDQorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCQkgKi8NCisJCXByb3RlY3RlZCBMaXN0PFN0cmluZz4gZW5jb2RpbmdzOw0KKw0KKwkJLyoqDQorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCQkgKiBAZ2VuZXJhdGVkDQorCQkgKi8NCisJCXByb3RlY3RlZCBDb21ibyBlbmNvZGluZ0ZpZWxkOw0KKw0KKwkJLyoqDQorCQkgKiBQYXNzIGluIHRoZSBzZWxlY3Rpb24uDQorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCQkgKiBAZ2VuZXJhdGVkDQorCQkgKi8NCisJCXB1YmxpYyBTdGFuZGFyZE1vZGVsV2l6YXJkSW5pdGlhbE9iamVjdENyZWF0aW9uUGFnZShTdHJpbmcgcGFnZUlkKSB7DQorCQkJc3VwZXIocGFnZUlkKTsNCisJCX0NCisNCisJCS8qKg0KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkJICogQGdlbmVyYXRlZA0KKwkJICovDQorCQlwdWJsaWMgdm9pZCBjcmVhdGVDb250cm9sKENvbXBvc2l0ZSBwYXJlbnQpIHsNCisJCQlDb21wb3NpdGUgY29tcG9zaXRlID0gbmV3IENvbXBvc2l0ZShwYXJlbnQsIFNXVC5OT05FKTsgew0KKwkJCQlHcmlkTGF5b3V0IGxheW91dCA9IG5ldyBHcmlkTGF5b3V0KCk7DQorCQkJCWxheW91dC5udW1Db2x1bW5zID0gMTsNCisJCQkJbGF5b3V0LnZlcnRpY2FsU3BhY2luZyA9IDEyOw0KKwkJCQljb21wb3NpdGUuc2V0TGF5b3V0KGxheW91dCk7DQorDQorCQkJCUdyaWREYXRhIGRhdGEgPSBuZXcgR3JpZERhdGEoKTsNCisJCQkJZGF0YS52ZXJ0aWNhbEFsaWdubWVudCA9IEdyaWREYXRhLkZJTEw7DQorCQkJCWRhdGEuZ3JhYkV4Y2Vzc1ZlcnRpY2FsU3BhY2UgPSB0cnVlOw0KKwkJCQlkYXRhLmhvcml6b250YWxBbGlnbm1lbnQgPSBHcmlkRGF0YS5GSUxMOw0KKwkJCQljb21wb3NpdGUuc2V0TGF5b3V0RGF0YShkYXRhKTsNCisJCQl9DQorDQorCQkJTGFiZWwgY29udGFpbmVyTGFiZWwgPSBuZXcgTGFiZWwoY29tcG9zaXRlLCBTV1QuTEVGVCk7DQorCQkJew0KKwkJCQljb250YWluZXJMYWJlbC5zZXRUZXh0KFN0YW5kYXJkRWRpdG9yUGx1Z2luLklOU1RBTkNFLmdldFN0cmluZygiX1VJX01vZGVsT2JqZWN0IikpOw0KKw0KKwkJCQlHcmlkRGF0YSBkYXRhID0gbmV3IEdyaWREYXRhKCk7DQorCQkJCWRhdGEuaG9yaXpvbnRhbEFsaWdubWVudCA9IEdyaWREYXRhLkZJTEw7DQorCQkJCWNvbnRhaW5lckxhYmVsLnNldExheW91dERhdGEoZGF0YSk7DQorCQkJfQ0KKw0KKwkJCWluaXRpYWxPYmplY3RGaWVsZCA9IG5ldyBDb21ibyhjb21wb3NpdGUsIFNXVC5CT1JERVIpOw0KKwkJCXsNCisJCQkJR3JpZERhdGEgZGF0YSA9IG5ldyBHcmlkRGF0YSgpOw0KKwkJCQlkYXRhLmhvcml6b250YWxBbGlnbm1lbnQgPSBHcmlkRGF0YS5GSUxMOw0KKwkJCQlkYXRhLmdyYWJFeGNlc3NIb3Jpem9udGFsU3BhY2UgPSB0cnVlOw0KKwkJCQlpbml0aWFsT2JqZWN0RmllbGQuc2V0TGF5b3V0RGF0YShkYXRhKTsNCisJCQl9DQorDQorCQkJZm9yIChTdHJpbmcgb2JqZWN0TmFtZSA6IGdldEluaXRpYWxPYmplY3ROYW1lcygpKSB7DQorCQkJCWluaXRpYWxPYmplY3RGaWVsZC5hZGQoZ2V0TGFiZWwob2JqZWN0TmFtZSkpOw0KKwkJCX0NCisNCisJCQlpZiAoaW5pdGlhbE9iamVjdEZpZWxkLmdldEl0ZW1Db3VudCgpID09IDEpIHsNCisJCQkJaW5pdGlhbE9iamVjdEZpZWxkLnNlbGVjdCgwKTsNCisJCQl9DQorCQkJaW5pdGlhbE9iamVjdEZpZWxkLmFkZE1vZGlmeUxpc3RlbmVyKHZhbGlkYXRvcik7DQorDQorCQkJTGFiZWwgZW5jb2RpbmdMYWJlbCA9IG5ldyBMYWJlbChjb21wb3NpdGUsIFNXVC5MRUZUKTsNCisJCQl7DQorCQkJCWVuY29kaW5nTGFiZWwuc2V0VGV4dChTdGFuZGFyZEVkaXRvclBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoIl9VSV9YTUxFbmNvZGluZyIpKTsNCisNCisJCQkJR3JpZERhdGEgZGF0YSA9IG5ldyBHcmlkRGF0YSgpOw0KKwkJCQlkYXRhLmhvcml6b250YWxBbGlnbm1lbnQgPSBHcmlkRGF0YS5GSUxMOw0KKwkJCQllbmNvZGluZ0xhYmVsLnNldExheW91dERhdGEoZGF0YSk7DQorCQkJfQ0KKwkJCWVuY29kaW5nRmllbGQgPSBuZXcgQ29tYm8oY29tcG9zaXRlLCBTV1QuQk9SREVSKTsNCisJCQl7DQorCQkJCUdyaWREYXRhIGRhdGEgPSBuZXcgR3JpZERhdGEoKTsNCisJCQkJZGF0YS5ob3Jpem9udGFsQWxpZ25tZW50ID0gR3JpZERhdGEuRklMTDsNCisJCQkJZGF0YS5ncmFiRXhjZXNzSG9yaXpvbnRhbFNwYWNlID0gdHJ1ZTsNCisJCQkJZW5jb2RpbmdGaWVsZC5zZXRMYXlvdXREYXRhKGRhdGEpOw0KKwkJCX0NCisNCisJCQlmb3IgKFN0cmluZyBlbmNvZGluZyA6IGdldEVuY29kaW5ncygpKSB7DQorCQkJCWVuY29kaW5nRmllbGQuYWRkKGVuY29kaW5nKTsNCisJCQl9DQorDQorCQkJZW5jb2RpbmdGaWVsZC5zZWxlY3QoMCk7DQorCQkJZW5jb2RpbmdGaWVsZC5hZGRNb2RpZnlMaXN0ZW5lcih2YWxpZGF0b3IpOw0KKw0KKwkJCXNldFBhZ2VDb21wbGV0ZSh2YWxpZGF0ZVBhZ2UoKSk7DQorCQkJc2V0Q29udHJvbChjb21wb3NpdGUpOw0KKwkJfQ0KKw0KKwkJLyoqDQorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCQkgKiBAZ2VuZXJhdGVkDQorCQkgKi8NCisJCXByb3RlY3RlZCBNb2RpZnlMaXN0ZW5lciB2YWxpZGF0b3IgPQ0KKwkJCW5ldyBNb2RpZnlMaXN0ZW5lcigpIHsNCisJCQkJcHVibGljIHZvaWQgbW9kaWZ5VGV4dChNb2RpZnlFdmVudCBlKSB7DQorCQkJCQlzZXRQYWdlQ29tcGxldGUodmFsaWRhdGVQYWdlKCkpOw0KKwkJCQl9DQorCQkJfTsNCisNCisJCS8qKg0KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkJICogQGdlbmVyYXRlZA0KKwkJICovDQorCQlwcm90ZWN0ZWQgYm9vbGVhbiB2YWxpZGF0ZVBhZ2UoKSB7DQorCQkJcmV0dXJuIGdldEluaXRpYWxPYmplY3ROYW1lKCkgIT0gbnVsbCAmJiBnZXRFbmNvZGluZ3MoKS5jb250YWlucyhlbmNvZGluZ0ZpZWxkLmdldFRleHQoKSk7DQorCQl9DQorDQorCQkvKioNCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJCSAqIEBnZW5lcmF0ZWQNCisJCSAqLw0KKwkJQE92ZXJyaWRlDQorCQlwdWJsaWMgdm9pZCBzZXRWaXNpYmxlKGJvb2xlYW4gdmlzaWJsZSkgew0KKwkJCXN1cGVyLnNldFZpc2libGUodmlzaWJsZSk7DQorCQkJaWYgKHZpc2libGUpIHsNCisJCQkJaWYgKGluaXRpYWxPYmplY3RGaWVsZC5nZXRJdGVtQ291bnQoKSA9PSAxKSB7DQorCQkJCQlpbml0aWFsT2JqZWN0RmllbGQuY2xlYXJTZWxlY3Rpb24oKTsNCisJCQkJCWVuY29kaW5nRmllbGQuc2V0Rm9jdXMoKTsNCisJCQkJfQ0KKwkJCQllbHNlIHsNCisJCQkJCWVuY29kaW5nRmllbGQuY2xlYXJTZWxlY3Rpb24oKTsNCisJCQkJCWluaXRpYWxPYmplY3RGaWVsZC5zZXRGb2N1cygpOw0KKwkJCQl9DQorCQkJfQ0KKwkJfQ0KKw0KKwkJLyoqDQorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCQkgKiBAZ2VuZXJhdGVkDQorCQkgKi8NCisJCXB1YmxpYyBTdHJpbmcgZ2V0SW5pdGlhbE9iamVjdE5hbWUoKSB7DQorCQkJU3RyaW5nIGxhYmVsID0gaW5pdGlhbE9iamVjdEZpZWxkLmdldFRleHQoKTsNCisNCisJCQlmb3IgKFN0cmluZyBuYW1lIDogZ2V0SW5pdGlhbE9iamVjdE5hbWVzKCkpIHsNCisJCQkJaWYgKGdldExhYmVsKG5hbWUpLmVxdWFscyhsYWJlbCkpIHsNCisJCQkJCXJldHVybiBuYW1lOw0KKwkJCQl9DQorCQkJfQ0KKwkJCXJldHVybiBudWxsOw0KKwkJfQ0KKw0KKwkJLyoqDQorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCQkgKiBAZ2VuZXJhdGVkDQorCQkgKi8NCisJCXB1YmxpYyBTdHJpbmcgZ2V0RW5jb2RpbmcoKSB7DQorCQkJcmV0dXJuIGVuY29kaW5nRmllbGQuZ2V0VGV4dCgpOw0KKwkJfQ0KKw0KKwkJLyoqDQorCQkgKiBSZXR1cm5zIHRoZSBsYWJlbCBmb3IgdGhlIHNwZWNpZmllZCB0eXBlIG5hbWUuDQorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCQkgKiBAZ2VuZXJhdGVkDQorCQkgKi8NCisJCXByb3RlY3RlZCBTdHJpbmcgZ2V0TGFiZWwoU3RyaW5nIHR5cGVOYW1lKSB7DQorCQkJdHJ5IHsNCisJCQkJcmV0dXJuIFN0YW5kYXJkRWRpdFBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoIl9VSV8iICsgdHlwZU5hbWUgKyAiX3R5cGUiKTsNCisJCQl9DQorCQkJY2F0Y2goTWlzc2luZ1Jlc291cmNlRXhjZXB0aW9uIG1yZSkgew0KKwkJCQlTdGFuZGFyZEVkaXRvclBsdWdpbi5JTlNUQU5DRS5sb2cobXJlKTsNCisJCQl9DQorCQkJcmV0dXJuIHR5cGVOYW1lOw0KKwkJfQ0KKw0KKwkJLyoqDQorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCQkgKiBAZ2VuZXJhdGVkDQorCQkgKi8NCisJCXByb3RlY3RlZCBDb2xsZWN0aW9uPFN0cmluZz4gZ2V0RW5jb2RpbmdzKCkgew0KKwkJCWlmIChlbmNvZGluZ3MgPT0gbnVsbCkgew0KKwkJCQllbmNvZGluZ3MgPSBuZXcgQXJyYXlMaXN0PFN0cmluZz4oKTsNCisJCQkJZm9yIChTdHJpbmdUb2tlbml6ZXIgc3RyaW5nVG9rZW5pemVyID0gbmV3IFN0cmluZ1Rva2VuaXplcihTdGFuZGFyZEVkaXRvclBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoIl9VSV9YTUxFbmNvZGluZ0Nob2ljZXMiKSk7IHN0cmluZ1Rva2VuaXplci5oYXNNb3JlVG9rZW5zKCk7ICkgew0KKwkJCQkJZW5jb2RpbmdzLmFkZChzdHJpbmdUb2tlbml6ZXIubmV4dFRva2VuKCkpOw0KKwkJCQl9DQorCQkJfQ0KKwkJCXJldHVybiBlbmNvZGluZ3M7DQorCQl9DQorCX0NCisNCisJLyoqDQorCSAqIFRoZSBmcmFtZXdvcmsgY2FsbHMgdGhpcyB0byBjcmVhdGUgdGhlIGNvbnRlbnRzIG9mIHRoZSB3aXphcmQuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwkJQE92ZXJyaWRlDQorCXB1YmxpYyB2b2lkIGFkZFBhZ2VzKCkgew0KKwkJLy8gQ3JlYXRlIGEgcGFnZSwgc2V0IHRoZSB0aXRsZSwgYW5kIHRoZSBpbml0aWFsIG1vZGVsIGZpbGUgbmFtZS4NCisJCS8vDQorCQluZXdGaWxlQ3JlYXRpb25QYWdlID0gbmV3IFN0YW5kYXJkTW9kZWxXaXphcmROZXdGaWxlQ3JlYXRpb25QYWdlKCJXaGF0ZXZlciIsIHNlbGVjdGlvbik7DQorCQluZXdGaWxlQ3JlYXRpb25QYWdlLnNldFRpdGxlKFN0YW5kYXJkRWRpdG9yUGx1Z2luLklOU1RBTkNFLmdldFN0cmluZygiX1VJX1N0YW5kYXJkTW9kZWxXaXphcmRfbGFiZWwiKSk7DQorCQluZXdGaWxlQ3JlYXRpb25QYWdlLnNldERlc2NyaXB0aW9uKFN0YW5kYXJkRWRpdG9yUGx1Z2luLklOU1RBTkNFLmdldFN0cmluZygiX1VJX1N0YW5kYXJkTW9kZWxXaXphcmRfZGVzY3JpcHRpb24iKSk7DQorCQluZXdGaWxlQ3JlYXRpb25QYWdlLnNldEZpbGVOYW1lKFN0YW5kYXJkRWRpdG9yUGx1Z2luLklOU1RBTkNFLmdldFN0cmluZygiX1VJX1N0YW5kYXJkRWRpdG9yRmlsZW5hbWVEZWZhdWx0QmFzZSIpICsgIi4iICsgRklMRV9FWFRFTlNJT05TLmdldCgwKSk7DQorCQlhZGRQYWdlKG5ld0ZpbGVDcmVhdGlvblBhZ2UpOw0KKw0KKwkJLy8gVHJ5IGFuZCBnZXQgdGhlIHJlc291cmNlIHNlbGVjdGlvbiB0byBkZXRlcm1pbmUgYSBjdXJyZW50IGRpcmVjdG9yeSBmb3IgdGhlIGZpbGUgZGlhbG9nLg0KKwkJLy8NCisJCWlmIChzZWxlY3Rpb24gIT0gbnVsbCAmJiAhc2VsZWN0aW9uLmlzRW1wdHkoKSkgew0KKwkJCS8vIEdldCB0aGUgcmVzb3VyY2UuLi4NCisJCQkvLw0KKwkJCU9iamVjdCBzZWxlY3RlZEVsZW1lbnQgPSBzZWxlY3Rpb24uaXRlcmF0b3IoKS5uZXh0KCk7DQorCQkJaWYgKHNlbGVjdGVkRWxlbWVudCBpbnN0YW5jZW9mIElSZXNvdXJjZSkgew0KKwkJCQkvLyBHZXQgdGhlIHJlc291cmNlIHBhcmVudCwgaWYgaXRzIGEgZmlsZS4NCisJCQkJLy8NCisJCQkJSVJlc291cmNlIHNlbGVjdGVkUmVzb3VyY2UgPSAoSVJlc291cmNlKXNlbGVjdGVkRWxlbWVudDsNCisJCQkJaWYgKHNlbGVjdGVkUmVzb3VyY2UuZ2V0VHlwZSgpID09IElSZXNvdXJjZS5GSUxFKSB7DQorCQkJCQlzZWxlY3RlZFJlc291cmNlID0gc2VsZWN0ZWRSZXNvdXJjZS5nZXRQYXJlbnQoKTsNCisJCQkJfQ0KKw0KKwkJCQkvLyBUaGlzIGdpdmVzIHVzIGEgZGlyZWN0b3J5Li4uDQorCQkJCS8vDQorCQkJCWlmIChzZWxlY3RlZFJlc291cmNlIGluc3RhbmNlb2YgSUZvbGRlciB8fCBzZWxlY3RlZFJlc291cmNlIGluc3RhbmNlb2YgSVByb2plY3QpIHsNCisJCQkJCS8vIFNldCB0aGlzIGZvciB0aGUgY29udGFpbmVyLg0KKwkJCQkJLy8NCisJCQkJCW5ld0ZpbGVDcmVhdGlvblBhZ2Uuc2V0Q29udGFpbmVyRnVsbFBhdGgoc2VsZWN0ZWRSZXNvdXJjZS5nZXRGdWxsUGF0aCgpKTsNCisNCisJCQkJCS8vIE1ha2UgdXAgYSB1bmlxdWUgbmV3IG5hbWUgaGVyZS4NCisJCQkJCS8vDQorCQkJCQlTdHJpbmcgZGVmYXVsdE1vZGVsQmFzZUZpbGVuYW1lID0gU3RhbmRhcmRFZGl0b3JQbHVnaW4uSU5TVEFOQ0UuZ2V0U3RyaW5nKCJfVUlfU3RhbmRhcmRFZGl0b3JGaWxlbmFtZURlZmF1bHRCYXNlIik7DQorCQkJCQlTdHJpbmcgZGVmYXVsdE1vZGVsRmlsZW5hbWVFeHRlbnNpb24gPSBGSUxFX0VYVEVOU0lPTlMuZ2V0KDApOw0KKwkJCQkJU3RyaW5nIG1vZGVsRmlsZW5hbWUgPSBkZWZhdWx0TW9kZWxCYXNlRmlsZW5hbWUgKyAiLiIgKyBkZWZhdWx0TW9kZWxGaWxlbmFtZUV4dGVuc2lvbjsNCisJCQkJCWZvciAoaW50IGkgPSAxOyAoKElDb250YWluZXIpc2VsZWN0ZWRSZXNvdXJjZSkuZmluZE1lbWJlcihtb2RlbEZpbGVuYW1lKSAhPSBudWxsOyArK2kpIHsNCisJCQkJCQltb2RlbEZpbGVuYW1lID0gZGVmYXVsdE1vZGVsQmFzZUZpbGVuYW1lICsgaSArICIuIiArIGRlZmF1bHRNb2RlbEZpbGVuYW1lRXh0ZW5zaW9uOw0KKwkJCQkJfQ0KKwkJCQkJbmV3RmlsZUNyZWF0aW9uUGFnZS5zZXRGaWxlTmFtZShtb2RlbEZpbGVuYW1lKTsNCisJCQkJfQ0KKwkJCX0NCisJCX0NCisJCWluaXRpYWxPYmplY3RDcmVhdGlvblBhZ2UgPSBuZXcgU3RhbmRhcmRNb2RlbFdpemFyZEluaXRpYWxPYmplY3RDcmVhdGlvblBhZ2UoIldoYXRldmVyMiIpOw0KKwkJaW5pdGlhbE9iamVjdENyZWF0aW9uUGFnZS5zZXRUaXRsZShTdGFuZGFyZEVkaXRvclBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoIl9VSV9TdGFuZGFyZE1vZGVsV2l6YXJkX2xhYmVsIikpOw0KKwkJaW5pdGlhbE9iamVjdENyZWF0aW9uUGFnZS5zZXREZXNjcmlwdGlvbihTdGFuZGFyZEVkaXRvclBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoIl9VSV9XaXphcmRfaW5pdGlhbF9vYmplY3RfZGVzY3JpcHRpb24iKSk7DQorCQlhZGRQYWdlKGluaXRpYWxPYmplY3RDcmVhdGlvblBhZ2UpOw0KKwl9DQorDQorCS8qKg0KKwkgKiBHZXQgdGhlIGZpbGUgZnJvbSB0aGUgcGFnZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBJRmlsZSBnZXRNb2RlbEZpbGUoKSB7DQorCQlyZXR1cm4gbmV3RmlsZUNyZWF0aW9uUGFnZS5nZXRNb2RlbEZpbGUoKTsNCisJfQ0KKw0KK30NCmRpZmYgLS1naXQgYS9tb2RlbHMvcG9wdWxhdGlvbnMvb3JnLmVjbGlwc2Uuc3RlbS51aS5wb3B1bGF0aW9ubW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3BvcHVsYXRpb25tb2RlbHMvQWN0aXZhdG9yLmphdmEgYi9tb2RlbHMvcG9wdWxhdGlvbnMvb3JnLmVjbGlwc2Uuc3RlbS51aS5wb3B1bGF0aW9ubW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3BvcHVsYXRpb25tb2RlbHMvQWN0aXZhdG9yLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmIwMGQ5ZQotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9wb3B1bGF0aW9ucy9vcmcuZWNsaXBzZS5zdGVtLnVpLnBvcHVsYXRpb25tb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvcG9wdWxhdGlvbm1vZGVscy9BY3RpdmF0b3IuamF2YQpAQCAtMCwwICsxLDExNCBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnVpLnBvcHVsYXRpb25tb2RlbHM7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU3RhdHVzOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5wcmVzZW50YXRpb24uU3RhbmRhcmRFZGl0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS51aS5wb3B1bGF0aW9ubW9kZWxzLmFkYXB0ZXJzLlN0YW5kYXJkUmVsYXRpdmVWYWx1ZVByb3ZpZGVyQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS51aS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLndpemFyZHMuU3RhbmRhcmRQb3B1bGF0aW9uSW5pdGlhbGl6ZXJQcm9wZXJ0eUVkaXRvckFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udWkucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC53aXphcmRzLlN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsUHJvcGVydHlFZGl0b3JBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnVpLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQud2l6YXJkcy5TdGFuZGFyZFByb3BlcnR5U3RyaW5nUHJvdmlkZXJBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5wbHVnaW4uQWJzdHJhY3RVSVBsdWdpbjsKK2ltcG9ydCBvcmcub3NnaS5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dDsKKworLyoqCisgKiBUaGUgbWFpbiBwbHVnaW4gY2xhc3MgdG8gYmUgdXNlZCBpbiB0aGUgZGVza3RvcC4KKyAqLworcHVibGljIGNsYXNzIEFjdGl2YXRvciBleHRlbmRzIEFic3RyYWN0VUlQbHVnaW4geworCisJLyoqCisJICogVGhlIHN5bWJvbGljIGlkZW50aWZpZXIgZm9yIHRoaXMgcGx1Zy1pbgorCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFBMVUdJTl9JRCA9ICJvcmcuZWNsaXBzZS5zdGVtLnVpLnBvcHVsYXRpb25tb2RlbHMiOyAvLyROT04tTkxTLTEkCisKKwkvLyBUaGUgc2hhcmVkIGluc3RhbmNlLgorCXByaXZhdGUgc3RhdGljIEFjdGl2YXRvciBwbHVnaW47CisKKwkvKioKKwkgKiBUaGUgY29uc3RydWN0b3IuCisJICovCisJcHVibGljIEFjdGl2YXRvcigpIHsKKwkJc3VwZXIoKTsKKwkJcGx1Z2luID0gdGhpczsKKwl9CisKKwkvKioKKwkgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgdXBvbiBwbHVnLWluIGFjdGl2YXRpb24KKwkgKiAKKwkgKiBAcGFyYW0gY29udGV4dAorCSAqIEB0aHJvd3MgRXhjZXB0aW9uCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgc3RhcnQoQnVuZGxlQ29udGV4dCBjb250ZXh0KSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJc3VwZXIuc3RhcnQoY29udGV4dCk7CisJCW5ldyBTdGFuZGFyZFByb3BlcnR5U3RyaW5nUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSgpOworCQluZXcgU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxQcm9wZXJ0eUVkaXRvckFkYXB0ZXJGYWN0b3J5KCk7CisJCW5ldyBTdGFuZGFyZFBvcHVsYXRpb25Jbml0aWFsaXplclByb3BlcnR5RWRpdG9yQWRhcHRlckZhY3RvcnkoKTsKKwkJbmV3IFN0YW5kYXJkRWRpdG9yKCk7CisJCS8vIEFkZCB0byBSZWxhdGl2ZVZhbHVlUHJvdmlkZXJBZGFwdGVyRmFjdG9yeS5JTlNUQU5DRQorCQluZXcgU3RhbmRhcmRSZWxhdGl2ZVZhbHVlUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSgpOworCisJCQorCX0gLy8gc3RhcnQKKworCS8qKgorCSAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCB3aGVuIHRoZSBwbHVnLWluIGlzIHN0b3BwZWQKKwkgKiAKKwkgKiBAcGFyYW0gY29udGV4dAorCSAqIEB0aHJvd3MgRXhjZXB0aW9uCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgc3RvcChCdW5kbGVDb250ZXh0IGNvbnRleHQpIHRocm93cyBFeGNlcHRpb24geworCQlzdXBlci5zdG9wKGNvbnRleHQpOworCQlwbHVnaW4gPSBudWxsOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIHNoYXJlZCBpbnN0YW5jZS4KKwkgKiAKKwkgKiBAcmV0dXJuIHRoZSBzaGFyZWQgaW5zdGFuY2UuCisJICovCisJcHVibGljIHN0YXRpYyBBY3RpdmF0b3IgZ2V0RGVmYXVsdCgpIHsKKwkJcmV0dXJuIHBsdWdpbjsKKwl9CisKKworCS8qKgorCSAqIExvZyBhbiBlcnJvciB0byB0aGUgSUxvZyBmb3IgdGhpcyBwbHVnaW4KKwkgKiAKKwkgKiBAcGFyYW0gbWVzc2FnZQorCSAqICAgICAgICAgICAgdGhlIGxvY2FsaXplZCBlcnJvciBtZXNzYWdlIHRleHQKKwkgKiBAcGFyYW0gZXhjZXB0aW9uCisJICogICAgICAgICAgICB0aGUgYXNzb2NpYXRlZCBleGNlcHRpb24sIG9yIG51bGwKKwkgKi8KKwlwdWJsaWMgc3RhdGljIHZvaWQgbG9nRXJyb3IoU3RyaW5nIG1lc3NhZ2UsIFRocm93YWJsZSBleGNlcHRpb24pIHsKKwkJcGx1Z2luLmdldExvZygpLmxvZygKKwkJCQluZXcgU3RhdHVzKElTdGF0dXMuRVJST1IsIHBsdWdpbi5nZXRCdW5kbGUoKS5nZXRTeW1ib2xpY05hbWUoKSwKKwkJCQkJCTAsIG1lc3NhZ2UsIGV4Y2VwdGlvbikpOworCX0gLy8gbG9nRXJyb3IKKworCS8qKgorCSAqIExvZyBpbmZvcm1hdGlvbiB0byB0aGUgSUxvZyBmb3IgdGhpcyBwbHVnaW4KKwkgKiAKKwkgKiBAcGFyYW0gbWVzc2FnZQorCSAqICAgICAgICAgICAgdGhlIGxvY2FsaXplZCBpbmZvcm1hdGlvbiBtZXNzYWdlIHRleHQKKwkgKiBAcGFyYW0gZXhjZXB0aW9uCisJICogICAgICAgICAgICB0aGUgYXNzb2NpYXRlZCBleGNlcHRpb24sIG9yIG51bGwKKwkgKi8KKwlwdWJsaWMgc3RhdGljIHZvaWQgbG9nSW5mb3JtYXRpb24oU3RyaW5nIG1lc3NhZ2UsIFRocm93YWJsZSBleGNlcHRpb24pIHsKKwkJcGx1Z2luLmdldExvZygpLmxvZygKKwkJCQluZXcgU3RhdHVzKElTdGF0dXMuSU5GTywgcGx1Z2luLmdldEJ1bmRsZSgpLmdldFN5bWJvbGljTmFtZSgpLAorCQkJCQkJMCwgbWVzc2FnZSwgZXhjZXB0aW9uKSk7CisJfSAvLyBsb2dJbmZvcm1hdGlvbgorCit9IC8vIEFjdGl2YXRvcgpkaWZmIC0tZ2l0IGEvbW9kZWxzL3BvcHVsYXRpb25zL29yZy5lY2xpcHNlLnN0ZW0udWkucG9wdWxhdGlvbm1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9wb3B1bGF0aW9ubW9kZWxzL2FkYXB0ZXJzL1BvcHVsYXRpb25Jbml0aWFsaXplclByb3BlcnR5RWRpdG9yLmphdmEgYi9tb2RlbHMvcG9wdWxhdGlvbnMvb3JnLmVjbGlwc2Uuc3RlbS51aS5wb3B1bGF0aW9ubW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3BvcHVsYXRpb25tb2RlbHMvYWRhcHRlcnMvUG9wdWxhdGlvbkluaXRpYWxpemVyUHJvcGVydHlFZGl0b3IuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZjdmN2UxCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL3BvcHVsYXRpb25zL29yZy5lY2xpcHNlLnN0ZW0udWkucG9wdWxhdGlvbm1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9wb3B1bGF0aW9ubW9kZWxzL2FkYXB0ZXJzL1BvcHVsYXRpb25Jbml0aWFsaXplclByb3BlcnR5RWRpdG9yLmphdmEKQEAgLTAsMCArMSw3OSBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnVpLnBvcHVsYXRpb25tb2RlbHMuYWRhcHRlcnM7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTAgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3Q7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzczsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRVN0cnVjdHVyYWxGZWF0dXJlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5Qb3B1bGF0aW9uSW5pdGlhbGl6ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnVpLmVkaXRvcnMuR2VuZXJpY1Byb3BlcnR5RWRpdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuTW9kaWZ5TGlzdGVuZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlOworCitAU3VwcHJlc3NXYXJuaW5ncygiYWxsIikKK2Fic3RyYWN0IHB1YmxpYyBjbGFzcyBQb3B1bGF0aW9uSW5pdGlhbGl6ZXJQcm9wZXJ0eUVkaXRvciBleHRlbmRzIEdlbmVyaWNQcm9wZXJ0eUVkaXRvciB7CisKKwkvKioKKwkgKiBAcGFyYW0gZmVhdHVyZQorCSAqIEByZXR1cm4gPGNvZGU+dHJ1ZTwvY29kZT4gaWYgdGhlIGZlYXR1cmUgaXMgYSBkdWJsaW4gY29yZSBmZWF0dXJlIHRoYXQKKwkgKiAgICAgICAgIGlzIHNwZWNpZmllZCBieSBhIHVzZXIuCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIGJvb2xlYW4gaXNVc2VyU3BlY2lmaWVkUHJvcGVydHkoZmluYWwgRVN0cnVjdHVyYWxGZWF0dXJlIGZlYXR1cmUpIHsKKwkJYm9vbGVhbiByZXRWYWx1ZSA9IGZhbHNlOworCQlpZihmZWF0dXJlLmdldEZlYXR1cmVJRCgpID09IFN0YW5kYXJkUGFja2FnZS5QT1BVTEFUSU9OX0lOSVRJQUxJWkVSX19UQVJHRVRfSVNPX0tFWSkKKwkJCXJldHVybiBmYWxzZTsKKwkJZmluYWwgRUNsYXNzIGNvbnRhaW5pbmdDbGFzcyA9IGZlYXR1cmUuZ2V0RUNvbnRhaW5pbmdDbGFzcygpOworCQkvLyBJcyBpdCBhIGRpc2Vhc2UgbW9kZWwgcHJvcGVydHk/CisJCWlmIChjb250YWluaW5nQ2xhc3MuZXF1YWxzKFN0YW5kYXJkUGFja2FnZS5lSU5TVEFOQ0UuZ2V0UG9wdWxhdGlvbkluaXRpYWxpemVyKCkpCisJCQkJfHwgY29udGFpbmluZ0NsYXNzLmdldEVBbGxTdXBlclR5cGVzKCkuY29udGFpbnMoCisJCQkJCQlTdGFuZGFyZFBhY2thZ2UuZUlOU1RBTkNFLmdldFBvcHVsYXRpb25Jbml0aWFsaXplcigpKSkgeworCQkJLy8gWWVzCisJCQlyZXRWYWx1ZSA9IHRydWU7CisJCX0gLy8gaWYgYSBkaXNlYXNlIG1vZGVsIHByb3BlcnR5CisJCXJldHVybiByZXRWYWx1ZTsKKwl9IC8vIGlzVXNlclNwZWNpZmllZERpc2Vhc2VNb2RlbFByb3BlcnR5CisKKwlwdWJsaWMgUG9wdWxhdGlvbkluaXRpYWxpemVyUHJvcGVydHlFZGl0b3IoQ29tcG9zaXRlIHBhcmVudCwgaW50IHN0eWxlLCBJUHJvamVjdCBwcm9qZWN0KSB7CisJCXN1cGVyKHBhcmVudCxzdHlsZSwgcHJvamVjdCk7CisJfQorCisJcHVibGljIFBvcHVsYXRpb25Jbml0aWFsaXplclByb3BlcnR5RWRpdG9yKGZpbmFsIENvbXBvc2l0ZSBwYXJlbnQsIGZpbmFsIGludCBzdHlsZSwKKwkJCWZpbmFsIFBvcHVsYXRpb25Jbml0aWFsaXplciBwb3B1bGF0aW9uSW5pdGlhbGl6ZXIsCisJCQlmaW5hbCBNb2RpZnlMaXN0ZW5lciBwcm9qZWN0VmFsaWRhdG9yLCBJUHJvamVjdCBwcm9qZWN0KSB7CisJCXN1cGVyKHBhcmVudCwgc3R5bGUsIHBvcHVsYXRpb25Jbml0aWFsaXplciwgcHJvamVjdFZhbGlkYXRvciwgcHJvamVjdCk7CisJfQorCQorCXB1YmxpYyB2b2lkIHBvcHVsYXRlKFBvcHVsYXRpb25Jbml0aWFsaXplciBwb3B1bGF0aW9uSW5pdGlhbGl6ZXIpIHsKKwkJCisJfQorCisJcHVibGljIGJvb2xlYW4gdmFsaWRhdGUoKSB7CisJCQorCQkKKwkJcmV0dXJuIHRydWU7CisJfSAvLyB2YWxpZGF0ZQorCisJCQorCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGRpc3Bvc2UoKSB7CisJCXN1cGVyLmRpc3Bvc2UoKTsKKwl9CisKKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgdm9pZCBjaGVja1N1YmNsYXNzKCkgeworCQkvLyBEaXNhYmxlIHRoZSBjaGVjayB0aGF0IHByZXZlbnRzIHN1Yi1jbGFzc2luZyBvZiBTV1QgY29tcG9uZW50cworCX0KKworCit9IC8vIFBvcHVsYXRpb25Jbml0aWFsaXplclByb3BlcnR5RWRpdG9yCmRpZmYgLS1naXQgYS9tb2RlbHMvcG9wdWxhdGlvbnMvb3JnLmVjbGlwc2Uuc3RlbS51aS5wb3B1bGF0aW9ubW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3BvcHVsYXRpb25tb2RlbHMvYWRhcHRlcnMvUG9wdWxhdGlvbkluaXRpYWxpemVyUHJvcGVydHlFZGl0b3JBZGFwdGVyLmphdmEgYi9tb2RlbHMvcG9wdWxhdGlvbnMvb3JnLmVjbGlwc2Uuc3RlbS51aS5wb3B1bGF0aW9ubW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3BvcHVsYXRpb25tb2RlbHMvYWRhcHRlcnMvUG9wdWxhdGlvbkluaXRpYWxpemVyUHJvcGVydHlFZGl0b3JBZGFwdGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTgzZWNhOQotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9wb3B1bGF0aW9ucy9vcmcuZWNsaXBzZS5zdGVtLnVpLnBvcHVsYXRpb25tb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvcG9wdWxhdGlvbm1vZGVscy9hZGFwdGVycy9Qb3B1bGF0aW9uSW5pdGlhbGl6ZXJQcm9wZXJ0eUVkaXRvckFkYXB0ZXIuamF2YQpAQCAtMCwwICsxLDI0IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0udWkucG9wdWxhdGlvbm1vZGVscy5hZGFwdGVyczsKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTAgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LkFkYXB0ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuaW1wbC5BZGFwdGVySW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnVpLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQud2l6YXJkcy5Qb3B1bGF0aW9uSW5pdGlhbGl6ZXJQcm9wZXJ0eUNvbXBvc2l0ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLk1vZGlmeUxpc3RlbmVyOworCithYnN0cmFjdCBwdWJsaWMgY2xhc3MgUG9wdWxhdGlvbkluaXRpYWxpemVyUHJvcGVydHlFZGl0b3JBZGFwdGVyIGV4dGVuZHMgQWRhcHRlckltcGwKKwkJaW1wbGVtZW50cyBBZGFwdGVyIHsKKworCWFic3RyYWN0IHB1YmxpYyBQb3B1bGF0aW9uSW5pdGlhbGl6ZXJQcm9wZXJ0eUVkaXRvciBjcmVhdGVQb3B1bGF0aW9uSW5pdGlhbGl6ZXJQcm9wZXJ0eUVkaXRvcigKKwkJCVBvcHVsYXRpb25Jbml0aWFsaXplclByb3BlcnR5Q29tcG9zaXRlIHBvcHVsYXRpb25Jbml0aWFsaXplclByb3BlcnR5Q29tcG9zaXRlLAorCQkJaW50IHN0eWxlLCBNb2RpZnlMaXN0ZW5lciBwcm9qZWN0VmFsaWRhdG9yLCBJUHJvamVjdCBwcm9qZWN0KTsKK30gLy8gUG9wdWxhdGlvbkluaXRpYWxpemVyUHJvcGVydHlFZGl0b3JBZGFwdGVyCmRpZmYgLS1naXQgYS9tb2RlbHMvcG9wdWxhdGlvbnMvb3JnLmVjbGlwc2Uuc3RlbS51aS5wb3B1bGF0aW9ubW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3BvcHVsYXRpb25tb2RlbHMvYWRhcHRlcnMvUG9wdWxhdGlvbkluaXRpYWxpemVyUHJvcGVydHlFZGl0b3JBZGFwdGVyRmFjdG9yeS5qYXZhIGIvbW9kZWxzL3BvcHVsYXRpb25zL29yZy5lY2xpcHNlLnN0ZW0udWkucG9wdWxhdGlvbm1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9wb3B1bGF0aW9ubW9kZWxzL2FkYXB0ZXJzL1BvcHVsYXRpb25Jbml0aWFsaXplclByb3BlcnR5RWRpdG9yQWRhcHRlckZhY3RvcnkuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNzlkMDM2Ci0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL3BvcHVsYXRpb25zL29yZy5lY2xpcHNlLnN0ZW0udWkucG9wdWxhdGlvbm1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9wb3B1bGF0aW9ubW9kZWxzL2FkYXB0ZXJzL1BvcHVsYXRpb25Jbml0aWFsaXplclByb3BlcnR5RWRpdG9yQWRhcHRlckZhY3RvcnkuamF2YQpAQCAtMCwwICsxLDM0IEBACisvLyBEaXNlYXNlTW9kZWxQcm9wZXJ0eUVkaXRvckFkYXB0ZXJGYWN0b3J5LmphdmEKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS51aS5wb3B1bGF0aW9ubW9kZWxzLmFkYXB0ZXJzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTAgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuQ29tcG9zZWRBZGFwdGVyRmFjdG9yeTsKKworLyoqCisgKiBUaGlzIGNsYXNzIHJlcHJlc2VudHMKKyAqLworcHVibGljIGludGVyZmFjZSBQb3B1bGF0aW9uSW5pdGlhbGl6ZXJQcm9wZXJ0eUVkaXRvckFkYXB0ZXJGYWN0b3J5IHsKKworCVBvcHVsYXRpb25Jbml0aWFsaXplclByb3BlcnR5RWRpdG9yQWRhcHRlckZhY3RvcnlJbXBsIElOU1RBTkNFID0gbmV3IFBvcHVsYXRpb25Jbml0aWFsaXplclByb3BlcnR5RWRpdG9yQWRhcHRlckZhY3RvcnlJbXBsKCk7CisKKwlwdWJsaWMgY2xhc3MgUG9wdWxhdGlvbkluaXRpYWxpemVyUHJvcGVydHlFZGl0b3JBZGFwdGVyRmFjdG9yeUltcGwgZXh0ZW5kcworCQkJQ29tcG9zZWRBZGFwdGVyRmFjdG9yeSBpbXBsZW1lbnRzCisJCQlQb3B1bGF0aW9uSW5pdGlhbGl6ZXJQcm9wZXJ0eUVkaXRvckFkYXB0ZXJGYWN0b3J5IHsKKworCQlAT3ZlcnJpZGUKKwkJcHVibGljIGJvb2xlYW4gaXNGYWN0b3J5Rm9yVHlwZShPYmplY3QgdHlwZSkgeworCQkJcmV0dXJuIHR5cGUgPT0gUG9wdWxhdGlvbkluaXRpYWxpemVyUHJvcGVydHlFZGl0b3JBZGFwdGVyLmNsYXNzOworCQl9CisKKwl9IAorfSAKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9tb2RlbHMvcG9wdWxhdGlvbnMvb3JnLmVjbGlwc2Uuc3RlbS51aS5wb3B1bGF0aW9ubW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3BvcHVsYXRpb25tb2RlbHMvYWRhcHRlcnMvUG9wdWxhdGlvbk1vZGVsTmV3TW9kaWZpZXJQYWdlQWRhcHRlckZhY3RvcnkuamF2YSBiL21vZGVscy9wb3B1bGF0aW9ucy9vcmcuZWNsaXBzZS5zdGVtLnVpLnBvcHVsYXRpb25tb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvcG9wdWxhdGlvbm1vZGVscy9hZGFwdGVycy9Qb3B1bGF0aW9uTW9kZWxOZXdNb2RpZmllclBhZ2VBZGFwdGVyRmFjdG9yeS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY3OTAxZGQKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvcG9wdWxhdGlvbnMvb3JnLmVjbGlwc2Uuc3RlbS51aS5wb3B1bGF0aW9ubW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3BvcHVsYXRpb25tb2RlbHMvYWRhcHRlcnMvUG9wdWxhdGlvbk1vZGVsTmV3TW9kaWZpZXJQYWdlQWRhcHRlckZhY3RvcnkuamF2YQpAQCAtMCwwICsxLDEzOCBAQAorLy8gRGlzZWFzZU5ld01vZGlmaWVyUGFnZUFkYXB0ZXJGYWN0b3J5LmphdmEKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS51aS5wb3B1bGF0aW9ubW9kZWxzLmFkYXB0ZXJzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LkFkYXB0ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzczsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRVN0cnVjdHVyYWxGZWF0dXJlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uSWRlbnRpZmlhYmxlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZFBhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLnV0aWwuU3RhbmRhcmRBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnVpLmFkYXB0ZXJzLm5ld21vZGlmaWVycGFnZS5OZXdNb2RpZmllclBhZ2VBZGFwdGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udWkuYWRhcHRlcnMubmV3bW9kaWZpZXJwYWdlLk5ld01vZGlmaWVyUGFnZUFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udWkucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC53aXphcmRzLlBvcHVsYXRpb25Nb2RlbFdpemFyZE1lc3NhZ2VzOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udWkud2l6YXJkcy5OZXdNb2RpZmllclBhZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuSVN0YXJ0dXA7CisKKy8qKgorICogVGhpcyBjbGFzcyBpcyBhbiB7QGxpbmsgTmV3TW9kaWZpZXJQYWdlQWRhcHRlckZhY3Rvcnl9IHRoYXQgYWRhcHRzCisgKiB7QGxpbmsgUG9wdWxhdGlvbk1vZGVsfXMgYW5kIHtAbGluayBQb3B1bGF0aW9uSW5pdGlhbGl6ZXJ9cyB0byB7QGxpbmsgTmV3TW9kaWZpZXJQYWdlfXMuCisgKi8KK3B1YmxpYyBjbGFzcyBQb3B1bGF0aW9uTW9kZWxOZXdNb2RpZmllclBhZ2VBZGFwdGVyRmFjdG9yeSBleHRlbmRzCisJCVN0YW5kYXJkQWRhcHRlckZhY3RvcnkgaW1wbGVtZW50cyBOZXdNb2RpZmllclBhZ2VBZGFwdGVyRmFjdG9yeSwgSVN0YXJ0dXAgeworCisJLyoqCisJICogRGVmYXVsdCBjb25zdHJ1Y3Rvci4KKwkgKi8KKwlwdWJsaWMgUG9wdWxhdGlvbk1vZGVsTmV3TW9kaWZpZXJQYWdlQWRhcHRlckZhY3RvcnkoKSB7CisJCXN1cGVyKCk7CisJCU5ld01vZGlmaWVyUGFnZUFkYXB0ZXJGYWN0b3J5LklOU1RBTkNFLmFkZEFkYXB0ZXJGYWN0b3J5KHRoaXMpOworCX0KKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2UudWkuSVN0YXJ0dXAjZWFybHlTdGFydHVwKCkKKwkgKi8KKwlwdWJsaWMgdm9pZCBlYXJseVN0YXJ0dXAoKSB7CisJCS8vIE5vdGhpbmcgdG8gZG8gdGhlIGNvbnN0cnVjdG9yIHdpbGwgZG8gZXZlcnl0aGluZy4JCQorCX0KKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNjZW5hcmlvLnV0aWwuU2NlbmFyaW9BZGFwdGVyRmFjdG9yeSNpc0ZhY3RvcnlGb3JUeXBlKGphdmEubGFuZy5PYmplY3QpCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIGJvb2xlYW4gaXNGYWN0b3J5Rm9yVHlwZShmaW5hbCBPYmplY3QgdHlwZSkgeworCQlyZXR1cm4gdHlwZSA9PSBOZXdNb2RpZmllclBhZ2VBZGFwdGVyLmNsYXNzIHx8IHN1cGVyLmlzRmFjdG9yeUZvclR5cGUodHlwZSk7CisJfQorCisJQE92ZXJyaWRlCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlUG9wdWxhdGlvbk1vZGVsQWRhcHRlcigpIHsKKwkJcmV0dXJuIG5ldyBQb3B1bGF0aW9uTW9kZWxOZXdNb2RpZmllclBhZ2VBZGFwdGVyKCk7CisJfQorCisJQE92ZXJyaWRlCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxBZGFwdGVyKCkgeworCQlyZXR1cm4gbmV3IFBvcHVsYXRpb25Nb2RlbE5ld01vZGlmaWVyUGFnZUFkYXB0ZXIoKTsKKwl9CisKKwlAT3ZlcnJpZGUKKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVTdG9jaGFzdGljU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxBZGFwdGVyKCkgeworCQlyZXR1cm4gbmV3IFBvcHVsYXRpb25Nb2RlbE5ld01vZGlmaWVyUGFnZUFkYXB0ZXIoKTsKKwl9CisJCisJQE92ZXJyaWRlCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlU2Vhc29uYWxQb3B1bGF0aW9uTW9kZWxBZGFwdGVyKCkgeworCQlyZXR1cm4gbmV3IFBvcHVsYXRpb25Nb2RlbE5ld01vZGlmaWVyUGFnZUFkYXB0ZXIoKTsKKwl9CisJCisJCisJQE92ZXJyaWRlCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlUG9wdWxhdGlvbkluaXRpYWxpemVyQWRhcHRlcigpIHsKKwkJcmV0dXJuIG5ldyBQb3B1bGF0aW9uTW9kZWxOZXdNb2RpZmllclBhZ2VBZGFwdGVyKCk7CisJfQorCisJQE92ZXJyaWRlCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlU3RhbmRhcmRQb3B1bGF0aW9uSW5pdGlhbGl6ZXJBZGFwdGVyKCkgeworCQlyZXR1cm4gbmV3IFBvcHVsYXRpb25Nb2RlbE5ld01vZGlmaWVyUGFnZUFkYXB0ZXIoKTsKKwl9CisJCisJLyoqCisJICogVGhpcyBjbGFzcyBhZGFwdHMge0BsaW5rIFBvcHVsYXRpb25Nb2RlbH1zIHRvIHtAbGluayBOZXdNb2RpZmllclBhZ2V9cworCSAqLworCXByaXZhdGUgc3RhdGljIGNsYXNzIFBvcHVsYXRpb25Nb2RlbE5ld01vZGlmaWVyUGFnZUFkYXB0ZXIgZXh0ZW5kcworCQkJTmV3TW9kaWZpZXJQYWdlQWRhcHRlciB7CisKKwkJLyoqCisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS51aS5hZGFwdGVycy5uZXdtb2RpZmllcnBhZ2UuTmV3TW9kaWZpZXJQYWdlQWRhcHRlciNjcmVhdGVOZXdNb2RpZmllclBhZ2UoKQorCQkgKi8KKwkJQE92ZXJyaWRlCisJCXB1YmxpYyBOZXdNb2RpZmllclBhZ2UgY3JlYXRlTmV3TW9kaWZpZXJQYWdlKCkgeworCQkJcmV0dXJuIG5ldyBOZXdNb2RpZmllclBhZ2UoKElkZW50aWZpYWJsZSkgZ2V0VGFyZ2V0KCkpIHsKKwkJCQlAT3ZlcnJpZGUKKwkJCQlwcm90ZWN0ZWQgYm9vbGVhbiBpc1VzZXJTcGVjaWZpZWRQcm9wZXJ0eSgKKwkJCQkJCWZpbmFsIEVTdHJ1Y3R1cmFsRmVhdHVyZSBmZWF0dXJlKSB7CisJCQkJCWJvb2xlYW4gcmV0VmFsdWUgPSBmYWxzZTsKKwkJCQkJZmluYWwgRUNsYXNzIGNvbnRhaW5pbmdDbGFzcyA9IGZlYXR1cmUuZ2V0RUNvbnRhaW5pbmdDbGFzcygpOworCQkJCQkvLyBJcyBpdCBhIGRpc2Vhc2UgbW9kZWwgcHJvcGVydHk/CisJCQkJCWlmIChjb250YWluaW5nQ2xhc3MuZXF1YWxzKFN0YW5kYXJkUGFja2FnZS5lSU5TVEFOQ0UuZ2V0UG9wdWxhdGlvbk1vZGVsKCkpCisJCQkJCQkJfHwgY29udGFpbmluZ0NsYXNzLmdldEVBbGxTdXBlclR5cGVzKCkuY29udGFpbnMoCisJCQkJCQkJCQlTdGFuZGFyZFBhY2thZ2UuZUlOU1RBTkNFLmdldFBvcHVsYXRpb25Nb2RlbCgpKSB8fAorCQkJCQkJCQkJY29udGFpbmluZ0NsYXNzLmVxdWFscyhTdGFuZGFyZFBhY2thZ2UuZUlOU1RBTkNFLmdldFBvcHVsYXRpb25Jbml0aWFsaXplcigpKSB8fAorCQkJCQkJCQkJCQljb250YWluaW5nQ2xhc3MuZ2V0RUFsbFN1cGVyVHlwZXMoKS5jb250YWlucygKKwkJCQkJCQkJCQkJCQlTdGFuZGFyZFBhY2thZ2UuZUlOU1RBTkNFLmdldFBvcHVsYXRpb25Jbml0aWFsaXplcigpKSkgeworCQkJCQkJCisJCQkJCQlpZihmZWF0dXJlLmdldEZlYXR1cmVJRCgpID09IFN0YW5kYXJkUGFja2FnZS5ERU1PR1JBUEhJQ19QT1BVTEFUSU9OX01PREVMX19QT1BVTEFUSU9OX0dST1VQUykKKwkJCQkJCQlyZXR1cm4gZmFsc2U7CisKKwkJCQkJCS8vIFllcworCQkJCQkJcmV0VmFsdWUgPSB0cnVlOworCQkJCQl9IC8vIGlmIGEgcG9wdWxhdGlvbiBtb2RlbCBwcm9wZXJ0eQorCQkJCQlyZXR1cm4gcmV0VmFsdWU7CisJCQkJfSAvLyBpc1VzZXJTcGVjaWZpZWRQcm9wZXJ0eQorCisJCQkJQE92ZXJyaWRlCisJCQkJcHJvdGVjdGVkIFN0cmluZyBnZXRCb3R0b21UZXh0KCkgeworCQkJCQlyZXR1cm4gUG9wdWxhdGlvbk1vZGVsV2l6YXJkTWVzc2FnZXMuZ2V0U3RyaW5nKCJQTVRQX0RlZiIpOworCQkJCX0KKworCQkJCUBPdmVycmlkZQorCQkJCXByb3RlY3RlZCBib29sZWFuIGlzTW9kaWZpYWJsZVByb3BlcnR5KAorCQkJCQkJZmluYWwgRVN0cnVjdHVyYWxGZWF0dXJlIGZlYXR1cmUpIHsKKwkJCQkJYm9vbGVhbiByZXRWYWx1ZSA9IHN1cGVyLmlzTW9kaWZpYWJsZVByb3BlcnR5KGZlYXR1cmUpOworCisJCQkJCXJldHVybiByZXRWYWx1ZTsKKwkJCQl9IC8vIGlzTW9kaWZpYWJsZVByb3BlcnR5CisJCQl9OworCQl9IC8vIGNyZWF0ZU5ld01vZGlmaWVyUGFnZQorCisJfSAvLyAKK30gLy8gCmRpZmYgLS1naXQgYS9tb2RlbHMvcG9wdWxhdGlvbnMvb3JnLmVjbGlwc2Uuc3RlbS51aS5wb3B1bGF0aW9ubW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3BvcHVsYXRpb25tb2RlbHMvYWRhcHRlcnMvUG9wdWxhdGlvbk1vZGVsUHJvcGVydHlFZGl0b3IuamF2YSBiL21vZGVscy9wb3B1bGF0aW9ucy9vcmcuZWNsaXBzZS5zdGVtLnVpLnBvcHVsYXRpb25tb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvcG9wdWxhdGlvbm1vZGVscy9hZGFwdGVycy9Qb3B1bGF0aW9uTW9kZWxQcm9wZXJ0eUVkaXRvci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgwMjNhZTAKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvcG9wdWxhdGlvbnMvb3JnLmVjbGlwc2Uuc3RlbS51aS5wb3B1bGF0aW9ubW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3BvcHVsYXRpb25tb2RlbHMvYWRhcHRlcnMvUG9wdWxhdGlvbk1vZGVsUHJvcGVydHlFZGl0b3IuamF2YQpAQCAtMCwwICsxLDg0IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0udWkucG9wdWxhdGlvbm1vZGVscy5hZGFwdGVyczsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FU3RydWN0dXJhbEZlYXR1cmU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLlBvcHVsYXRpb25Nb2RlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmRQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udWkuZWRpdG9ycy5HZW5lcmljUHJvcGVydHlFZGl0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5Nb2RpZnlMaXN0ZW5lcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGU7CisKK0BTdXBwcmVzc1dhcm5pbmdzKCJhbGwiKQorYWJzdHJhY3QgcHVibGljIGNsYXNzIFBvcHVsYXRpb25Nb2RlbFByb3BlcnR5RWRpdG9yIGV4dGVuZHMgR2VuZXJpY1Byb3BlcnR5RWRpdG9yIHsKKworCS8qKgorCSAqIEBwYXJhbSBmZWF0dXJlCisJICogQHJldHVybiA8Y29kZT50cnVlPC9jb2RlPiBpZiB0aGUgZmVhdHVyZSBpcyBhIGR1YmxpbiBjb3JlIGZlYXR1cmUgdGhhdAorCSAqICAgICAgICAgaXMgc3BlY2lmaWVkIGJ5IGEgdXNlci4KKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgYm9vbGVhbiBpc1VzZXJTcGVjaWZpZWRQcm9wZXJ0eShmaW5hbCBFU3RydWN0dXJhbEZlYXR1cmUgZmVhdHVyZSkgeworCQlib29sZWFuIHJldFZhbHVlID0gZmFsc2U7CisJCWZpbmFsIEVDbGFzcyBjb250YWluaW5nQ2xhc3MgPSBmZWF0dXJlLmdldEVDb250YWluaW5nQ2xhc3MoKTsKKworCQlpZihjb250YWluaW5nQ2xhc3MuZXF1YWxzKFN0YW5kYXJkUGFja2FnZS5lSU5TVEFOQ0UuZ2V0RGVtb2dyYXBoaWNQb3B1bGF0aW9uTW9kZWwoKSkgJiYgZmVhdHVyZS5nZXRGZWF0dXJlSUQoKSA9PSBTdGFuZGFyZFBhY2thZ2UuREVNT0dSQVBISUNfUE9QVUxBVElPTl9NT0RFTF9fUE9QVUxBVElPTl9HUk9VUFMpCisJCQlyZXR1cm4gZmFsc2U7CisJCWlmKGNvbnRhaW5pbmdDbGFzcy5lcXVhbHMoU3RhbmRhcmRQYWNrYWdlLmVJTlNUQU5DRS5nZXRQb3B1bGF0aW9uTW9kZWwoKSkgJiYgZmVhdHVyZS5nZXRGZWF0dXJlSUQoKSA9PSBTdGFuZGFyZFBhY2thZ2UuUE9QVUxBVElPTl9NT0RFTF9fVEFSR0VUX0lTT19LRVkpCisJCQlyZXR1cm4gZmFsc2U7CisJCQorCQkvLyBJcyBpdCBhIHBvcHVsYXRpb24gbW9kZWwgcHJvcGVydHk/CisJCWlmIChjb250YWluaW5nQ2xhc3MuZXF1YWxzKFN0YW5kYXJkUGFja2FnZS5lSU5TVEFOQ0UuZ2V0UG9wdWxhdGlvbk1vZGVsKCkpCisJCQkJfHwgY29udGFpbmluZ0NsYXNzLmdldEVBbGxTdXBlclR5cGVzKCkuY29udGFpbnMoCisJCQkJCQlTdGFuZGFyZFBhY2thZ2UuZUlOU1RBTkNFLmdldFBvcHVsYXRpb25Nb2RlbCgpKSkgeworCQkJLy8gWWVzCisJCQlyZXRWYWx1ZSA9IHRydWU7CisJCX0gLy8gaWYgYSBkaXNlYXNlIG1vZGVsIHByb3BlcnR5CisJCXJldHVybiByZXRWYWx1ZTsKKwl9IC8vIGlzVXNlclNwZWNpZmllZERpc2Vhc2VNb2RlbFByb3BlcnR5CisKKworCXB1YmxpYyBQb3B1bGF0aW9uTW9kZWxQcm9wZXJ0eUVkaXRvcihDb21wb3NpdGUgcGFyZW50LCBpbnQgc3R5bGUsIElQcm9qZWN0IHByb2plY3QpIHsKKwkJc3VwZXIocGFyZW50LHN0eWxlLCBwcm9qZWN0KTsKKwl9CisKKwlwdWJsaWMgUG9wdWxhdGlvbk1vZGVsUHJvcGVydHlFZGl0b3IoZmluYWwgQ29tcG9zaXRlIHBhcmVudCwgZmluYWwgaW50IHN0eWxlLAorCQkJZmluYWwgUG9wdWxhdGlvbk1vZGVsIHBvcHVsYXRpb25Nb2RlbCwKKwkJCWZpbmFsIE1vZGlmeUxpc3RlbmVyIHByb2plY3RWYWxpZGF0b3IsIElQcm9qZWN0IHByb2plY3QpIHsKKwkJc3VwZXIocGFyZW50LCBzdHlsZSwgcG9wdWxhdGlvbk1vZGVsLCBwcm9qZWN0VmFsaWRhdG9yLCBwcm9qZWN0KTsKKworCX0KKwkJCisJcHVibGljIHZvaWQgcG9wdWxhdGUoUG9wdWxhdGlvbk1vZGVsIHBvcHVsYXRpb25Nb2RlbCkgeworCQkKKwl9CisKKwlwdWJsaWMgYm9vbGVhbiB2YWxpZGF0ZSgpIHsKKwkJCisJCQorCQlyZXR1cm4gdHJ1ZTsKKwl9IC8vIHZhbGlkYXRlCisKKwkJCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgZGlzcG9zZSgpIHsKKwkJc3VwZXIuZGlzcG9zZSgpOworCX0KKworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIGNoZWNrU3ViY2xhc3MoKSB7CisJCS8vIERpc2FibGUgdGhlIGNoZWNrIHRoYXQgcHJldmVudHMgc3ViLWNsYXNzaW5nIG9mIFNXVCBjb21wb25lbnRzCisJfQorCit9IC8vIFBvcHVsYXRpb25Nb2RlbFByb3BlcnR5RWRpdG9yCmRpZmYgLS1naXQgYS9tb2RlbHMvcG9wdWxhdGlvbnMvb3JnLmVjbGlwc2Uuc3RlbS51aS5wb3B1bGF0aW9ubW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3BvcHVsYXRpb25tb2RlbHMvYWRhcHRlcnMvUG9wdWxhdGlvbk1vZGVsUHJvcGVydHlFZGl0b3JBZGFwdGVyLmphdmEgYi9tb2RlbHMvcG9wdWxhdGlvbnMvb3JnLmVjbGlwc2Uuc3RlbS51aS5wb3B1bGF0aW9ubW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3BvcHVsYXRpb25tb2RlbHMvYWRhcHRlcnMvUG9wdWxhdGlvbk1vZGVsUHJvcGVydHlFZGl0b3JBZGFwdGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTA3ZTBiNQotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9wb3B1bGF0aW9ucy9vcmcuZWNsaXBzZS5zdGVtLnVpLnBvcHVsYXRpb25tb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvcG9wdWxhdGlvbm1vZGVscy9hZGFwdGVycy9Qb3B1bGF0aW9uTW9kZWxQcm9wZXJ0eUVkaXRvckFkYXB0ZXIuamF2YQpAQCAtMCwwICsxLDI0IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0udWkucG9wdWxhdGlvbm1vZGVscy5hZGFwdGVyczsKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LkFkYXB0ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuaW1wbC5BZGFwdGVySW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnVpLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQud2l6YXJkcy5Qb3B1bGF0aW9uTW9kZWxQcm9wZXJ0eUNvbXBvc2l0ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLk1vZGlmeUxpc3RlbmVyOworCithYnN0cmFjdCBwdWJsaWMgY2xhc3MgUG9wdWxhdGlvbk1vZGVsUHJvcGVydHlFZGl0b3JBZGFwdGVyIGV4dGVuZHMgQWRhcHRlckltcGwKKwkJaW1wbGVtZW50cyBBZGFwdGVyIHsKKworCWFic3RyYWN0IHB1YmxpYyBQb3B1bGF0aW9uTW9kZWxQcm9wZXJ0eUVkaXRvciBjcmVhdGVQb3B1bGF0aW9uTW9kZWxQcm9wZXJ0eUVkaXRvcigKKwkJCVBvcHVsYXRpb25Nb2RlbFByb3BlcnR5Q29tcG9zaXRlIGRpc2Vhc2VNb2RlbFByb3BlcnR5Q29tcG9zaXRlLAorCQkJaW50IHN0eWxlLCBNb2RpZnlMaXN0ZW5lciBwcm9qZWN0VmFsaWRhdG9yLCBJUHJvamVjdCBwcm9qZWN0KTsKK30gLy8gUG9wdWxhdGlvbk1vZGVsUHJvcGVydHlFZGl0b3JBZGFwdGVyCmRpZmYgLS1naXQgYS9tb2RlbHMvcG9wdWxhdGlvbnMvb3JnLmVjbGlwc2Uuc3RlbS51aS5wb3B1bGF0aW9ubW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3BvcHVsYXRpb25tb2RlbHMvYWRhcHRlcnMvUG9wdWxhdGlvbk1vZGVsUHJvcGVydHlFZGl0b3JBZGFwdGVyRmFjdG9yeS5qYXZhIGIvbW9kZWxzL3BvcHVsYXRpb25zL29yZy5lY2xpcHNlLnN0ZW0udWkucG9wdWxhdGlvbm1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9wb3B1bGF0aW9ubW9kZWxzL2FkYXB0ZXJzL1BvcHVsYXRpb25Nb2RlbFByb3BlcnR5RWRpdG9yQWRhcHRlckZhY3RvcnkuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMjAwODY2Ci0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL3BvcHVsYXRpb25zL29yZy5lY2xpcHNlLnN0ZW0udWkucG9wdWxhdGlvbm1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9wb3B1bGF0aW9ubW9kZWxzL2FkYXB0ZXJzL1BvcHVsYXRpb25Nb2RlbFByb3BlcnR5RWRpdG9yQWRhcHRlckZhY3RvcnkuamF2YQpAQCAtMCwwICsxLDM0IEBACisvLyBEaXNlYXNlTW9kZWxQcm9wZXJ0eUVkaXRvckFkYXB0ZXJGYWN0b3J5LmphdmEKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS51aS5wb3B1bGF0aW9ubW9kZWxzLmFkYXB0ZXJzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuQ29tcG9zZWRBZGFwdGVyRmFjdG9yeTsKKworLyoqCisgKiBUaGlzIGNsYXNzIHJlcHJlc2VudHMKKyAqLworcHVibGljIGludGVyZmFjZSBQb3B1bGF0aW9uTW9kZWxQcm9wZXJ0eUVkaXRvckFkYXB0ZXJGYWN0b3J5IHsKKworCVBvcHVsYXRpb25Nb2RlbFByb3BlcnR5RWRpdG9yQWRhcHRlckZhY3RvcnlJbXBsIElOU1RBTkNFID0gbmV3IFBvcHVsYXRpb25Nb2RlbFByb3BlcnR5RWRpdG9yQWRhcHRlckZhY3RvcnlJbXBsKCk7CisKKwlwdWJsaWMgY2xhc3MgUG9wdWxhdGlvbk1vZGVsUHJvcGVydHlFZGl0b3JBZGFwdGVyRmFjdG9yeUltcGwgZXh0ZW5kcworCQkJQ29tcG9zZWRBZGFwdGVyRmFjdG9yeSBpbXBsZW1lbnRzCisJCQlQb3B1bGF0aW9uTW9kZWxQcm9wZXJ0eUVkaXRvckFkYXB0ZXJGYWN0b3J5IHsKKworCQlAT3ZlcnJpZGUKKwkJcHVibGljIGJvb2xlYW4gaXNGYWN0b3J5Rm9yVHlwZShPYmplY3QgdHlwZSkgeworCQkJcmV0dXJuIHR5cGUgPT0gUG9wdWxhdGlvbk1vZGVsUHJvcGVydHlFZGl0b3JBZGFwdGVyLmNsYXNzOworCQl9CisKKwl9IC8vIFBvcHVsYXRpb25Nb2RlbFByb3BlcnR5RWRpdG9yQWRhcHRlckZhY3RvcnlJbXBsCit9IC8vIFBvcHVsYXRpb25Nb2RlbFByb3BlcnR5RWRpdG9yQWRhcHRlckZhY3RvcnkKZGlmZiAtLWdpdCBhL21vZGVscy9wb3B1bGF0aW9ucy9vcmcuZWNsaXBzZS5zdGVtLnVpLnBvcHVsYXRpb25tb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvcG9wdWxhdGlvbm1vZGVscy9hZGFwdGVycy9TdGFuZGFyZFJlbGF0aXZlVmFsdWVQcm92aWRlckFkYXB0ZXJGYWN0b3J5LmphdmEgYi9tb2RlbHMvcG9wdWxhdGlvbnMvb3JnLmVjbGlwc2Uuc3RlbS51aS5wb3B1bGF0aW9ubW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3BvcHVsYXRpb25tb2RlbHMvYWRhcHRlcnMvU3RhbmRhcmRSZWxhdGl2ZVZhbHVlUHJvdmlkZXJBZGFwdGVyRmFjdG9yeS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMzYzg5OTEKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvcG9wdWxhdGlvbnMvb3JnLmVjbGlwc2Uuc3RlbS51aS5wb3B1bGF0aW9ubW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3BvcHVsYXRpb25tb2RlbHMvYWRhcHRlcnMvU3RhbmRhcmRSZWxhdGl2ZVZhbHVlUHJvdmlkZXJBZGFwdGVyRmFjdG9yeS5qYXZhCkBAIC0wLDAgKzEsMzYzIEBACisvLyBTdGFuZGFyZFJlbGF0aXZlVmFsdWVQcm92aWRlckFkYXB0ZXJGYWN0b3J5LmphdmEKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS51aS5wb3B1bGF0aW9ubW9kZWxzLmFkYXB0ZXJzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5BZGFwdGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRVJlZmVyZW5jZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRVN0cnVjdHVyYWxGZWF0dXJlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkNoYW5nZU5vdGlmaWVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkNvbXBvc2VhYmxlQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuQ29tcG9zZWRBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JQ2hhbmdlTm90aWZpZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1Qcm9wZXJ0eVNvdXJjZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JTm90aWZ5Q2hhbmdlZExpc3RlbmVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLnByb3ZpZGVyLlByb3BlcnR5U291cmNlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuYWRhcHRlcnMucmVsYXRpdmV2YWx1ZS5SZWxhdGl2ZVZhbHVlUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5hZGFwdGVycy5yZWxhdGl2ZXZhbHVlLlJlbGF0aXZlVmFsdWVQcm92aWRlckFkYXB0ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5hZGFwdGVycy5yZWxhdGl2ZXZhbHVlLlJlbGF0aXZlVmFsdWVQcm92aWRlckFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5Qb3B1bGF0aW9uTW9kZWxMYWJlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuUG9wdWxhdGlvbk1vZGVsTGFiZWxWYWx1ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmRQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZFBvcHVsYXRpb25Nb2RlbExhYmVsVmFsdWU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLnByb3ZpZGVyLlN0YW5kYXJkSXRlbVByb3ZpZGVyQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLnV0aWwuU3RhbmRhcmRBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnVpLkFjdGl2YXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnVpLnBvcHVsYXRpb25tb2RlbHMucHJlZmVyZW5jZXMuUHJlZmVyZW5jZUNvbnN0YW50czsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnVpLnBvcHVsYXRpb25tb2RlbHMucHJlZmVyZW5jZXMuUHJlZmVyZW5jZUluaXRpYWxpemVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklTdGFydHVwOworCisvKioKKyAqIFRoaXMgY2xhc3MgaXMgYSBmYWN0b3J5IGZvciB0aGlzIG1vZGVsIHRoYXQgY3JlYXRlcworICoge0BsaW5rIFJlbGF0aXZlVmFsdWVQcm92aWRlcn0ncyBmb3IgY2xhc3NlcyBpbiB0aGUgbW9kZWwuCisgKi8KK3B1YmxpYyBjbGFzcyBTdGFuZGFyZFJlbGF0aXZlVmFsdWVQcm92aWRlckFkYXB0ZXJGYWN0b3J5IGV4dGVuZHMKKwkJU3RhbmRhcmRBZGFwdGVyRmFjdG9yeSBpbXBsZW1lbnRzIFJlbGF0aXZlVmFsdWVQcm92aWRlckFkYXB0ZXJGYWN0b3J5LCBJU3RhcnR1cCB7CisJCisJLyoqCisJICogVGhpcyBrZWVwcyB0cmFjayBvZiB0aGUgcm9vdCBhZGFwdGVyIGZhY3RvcnkgdGhhdCBkZWxlZ2F0ZXMgdG8gdGhpcworCSAqIGFkYXB0ZXIgZmFjdG9yeS4KKwkgKi8KKwlwcm90ZWN0ZWQgQ29tcG9zZWRBZGFwdGVyRmFjdG9yeSBwYXJlbnRBZGFwdGVyRmFjdG9yeTsKKworCS8qKgorCSAqIFRoaXMgaXMgdXNlZCB0byBpbXBsZW1lbnQKKwkgKiB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUNoYW5nZU5vdGlmaWVyfS4KKwkgKi8KKwlwcm90ZWN0ZWQgSUNoYW5nZU5vdGlmaWVyIGNoYW5nZU5vdGlmaWVyID0gbmV3IENoYW5nZU5vdGlmaWVyKCk7CisKKwkvKioKKwkgKiBUaGlzIGZhY3RvcnkgaXMgdXNlZCB0byBjcmVhdGUgaXRlbSBwcm92aWRlcnMgZm9yIHRoZSBhZGFwdGVkIGNsYXNzZXMuCisJICogVGhlIGl0ZW0gcHJvdmlkZXJzIGFyZSB1c2VkIGFzIHByb3BlcnR5IHNvdXJjZXMgdG8gZ2V0IHRoZSBwcm9wZXJ0aWVzCisJICogdGhhdCBjYW4gaGF2ZSByZWxhdGl2ZSB2YWx1ZXMuCisJICovCisJcHJpdmF0ZSBzdGF0aWMgU3RhbmRhcmRJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSBpdGVtUHJvdmlkZXJGYWN0b3J5OworCisJLyoqCisJICogQ29uc3RydWN0b3IKKwkgKi8KKwlwdWJsaWMgU3RhbmRhcmRSZWxhdGl2ZVZhbHVlUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSgpIHsKKwkJc3VwZXIoKTsKKwkJUmVsYXRpdmVWYWx1ZVByb3ZpZGVyQWRhcHRlckZhY3RvcnkuSU5TVEFOQ0UuYWRkQWRhcHRlckZhY3RvcnkodGhpcyk7CisJfSAvLyBTdGFuZGFyZFJlbGF0aXZlVmFsdWVQcm92aWRlckFkYXB0ZXJGYWN0b3J5CisKKwkvKioKKwkgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgYnkgdGhlIHtAbGluayBTdGFuZGFyZFN3aXRjaH0gaW5zdGFuY2UgaW4gdGhlCisJICogcGFyZW50IHtAbGluayBTdGFuZGFyZEFkYXB0ZXJGYWN0b3J5fSBmb3IgYWxsIGNhc2VzIGZvciBjbGFzc2VzIGRlcml2ZWQKKwkgKiBmcm9tIHtAbGluayBEaXNlYXNlTW9kZWxMYWJlbH0gKGUuZy4sIHtAbGluayBTSUxhYmVsfSwge0BsaW5rIFNJUkxhYmVsfSwKKwkgKiB7QGxpbmsgU0VJUkxhYmVsfSkuCisJICogCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQudXRpbC5TdGFuZGFyZEFkYXB0ZXJGYWN0b3J5I2NyZWF0ZURpc2Vhc2VNb2RlbExhYmVsQWRhcHRlcigpCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxMYWJlbEFkYXB0ZXIoKSB7CisJCS8vIEl0IHNlZW1zIHRoYXQgeW91IGNhbid0IGhhdmUgc2luZ2xldG9uIGFkYXB0ZXJzIHRoYXQgcHJvdmlkZQorCQkvLyBiZWhhdmlvcmFsIGV4dGVuc2lvbnMgd2l0aG91dCBleHBsaWNpdGx5IHNldHRpbmcgdGhlIHRhcmdldAorCQkvLyBlYWNoIHRpbWUgaXQgaXMgYWRhcHRlZAorCQlyZXR1cm4gbmV3IFN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWxSZWxhdGl2ZVZhbHVlUHJvdmlkZXIoKTsKKwl9IC8vIGNyZWF0ZURpc2Vhc2VNb2RlbExhYmVsQWRhcHRlcgorCisJLyoqCisJICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIGJ5IHRoZSB7QGxpbmsgU3RhbmRhcmRTd2l0Y2h9IGluc3RhbmNlIGluIHRoZQorCSAqIHBhcmVudCB7QGxpbmsgU3RhbmRhcmRBZGFwdGVyRmFjdG9yeX0gZm9yIGFsbCBjYXNlcyBmb3IgY2xhc3NlcyBkZXJpdmVkCisJICogZnJvbSB7QGxpbmsgRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZX0gKGUuZy4sIHtAbGluayBTSUxhYmVsVmFsdWV9LAorCSAqIHtAbGluayBTSVJMYWJlbFZhbHVlfSwge0BsaW5rIFNFSVJMYWJlbFZhbHVlfSkuCisJICogCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQudXRpbC5TdGFuZGFyZEFkYXB0ZXJGYWN0b3J5I2NyZWF0ZURpc2Vhc2VNb2RlbExhYmVsVmFsdWVBZGFwdGVyKCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVTdGFuZGFyZFBvcHVsYXRpb25Nb2RlbExhYmVsVmFsdWVBZGFwdGVyKCkgeworCQkvLyBJdCBzZWVtcyB0aGF0IHlvdSBjYW4ndCBoYXZlIHNpbmdsZXRvbiBhZGFwdGVycyB0aGF0IHByb3ZpZGUKKwkJLy8gYmVoYXZpb3JhbCBleHRlbnNpb25zIHdpdGhvdXQgZXhwbGljaXRseSBzZXR0aW5nIHRoZSB0YXJnZXQKKwkJLy8gZWFjaCB0aW1lIGl0IGlzIGFkYXB0ZWQKKwkJcmV0dXJuIG5ldyBQb3B1bGF0aW9uTW9kZWxMYWJlbFZhbHVlUmVsYXRpdmVWYWx1ZVByb3ZpZGVyKCk7CisJfSAvLyBjcmVhdGVEaXNlYXNlTW9kZWxMYWJlbFZhbHVlQWRhcHRlcgorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JQ2hhbmdlTm90aWZpZXIjYWRkTGlzdGVuZXIob3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSU5vdGlmeUNoYW5nZWRMaXN0ZW5lcikKKwkgKi8KKwlwdWJsaWMgdm9pZCBhZGRMaXN0ZW5lcihJTm90aWZ5Q2hhbmdlZExpc3RlbmVyIG5vdGlmeUNoYW5nZWRMaXN0ZW5lcikgeworCQljaGFuZ2VOb3RpZmllci5hZGRMaXN0ZW5lcihub3RpZnlDaGFuZ2VkTGlzdGVuZXIpOworCX0gLy8gYWRkTGlzdGVuZXIKKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUNoYW5nZU5vdGlmaWVyI2ZpcmVOb3RpZnlDaGFuZ2VkKG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbikKKwkgKi8KKwlwdWJsaWMgdm9pZCBmaXJlTm90aWZ5Q2hhbmdlZChOb3RpZmljYXRpb24gbm90aWZpY2F0aW9uKSB7CisJCWNoYW5nZU5vdGlmaWVyLmZpcmVOb3RpZnlDaGFuZ2VkKG5vdGlmaWNhdGlvbik7CisJCWlmIChwYXJlbnRBZGFwdGVyRmFjdG9yeSAhPSBudWxsKSB7CisJCQlwYXJlbnRBZGFwdGVyRmFjdG9yeS5maXJlTm90aWZ5Q2hhbmdlZChub3RpZmljYXRpb24pOworCQl9CisJfSAvLyBmaXJlTm90aWZ5Q2hhbmdlZAorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JQ2hhbmdlTm90aWZpZXIjcmVtb3ZlTGlzdGVuZXIob3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSU5vdGlmeUNoYW5nZWRMaXN0ZW5lcikKKwkgKi8KKwlwdWJsaWMgdm9pZCByZW1vdmVMaXN0ZW5lcihJTm90aWZ5Q2hhbmdlZExpc3RlbmVyIG5vdGlmeUNoYW5nZWRMaXN0ZW5lcikgeworCQljaGFuZ2VOb3RpZmllci5yZW1vdmVMaXN0ZW5lcihub3RpZnlDaGFuZ2VkTGlzdGVuZXIpOworCX0gLy8gcmVtb3ZlTGlzdGVuZXIKKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSNnZXRSb290QWRhcHRlckZhY3RvcnkoKQorCSAqLworCXB1YmxpYyBDb21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5IGdldFJvb3RBZGFwdGVyRmFjdG9yeSgpIHsKKwkJcmV0dXJuIHBhcmVudEFkYXB0ZXJGYWN0b3J5ID09IG51bGwgPyB0aGlzIDogcGFyZW50QWRhcHRlckZhY3RvcnkKKwkJCQkuZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCk7CisJfSAvLyBnZXRSb290QWRhcHRlckZhY3RvcnkKKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSNzZXRQYXJlbnRBZGFwdGVyRmFjdG9yeShvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5Db21wb3NlZEFkYXB0ZXJGYWN0b3J5KQorCSAqLworCXB1YmxpYyB2b2lkIHNldFBhcmVudEFkYXB0ZXJGYWN0b3J5KAorCQkJQ29tcG9zZWRBZGFwdGVyRmFjdG9yeSBwYXJlbnRBZGFwdGVyRmFjdG9yeSkgeworCQl0aGlzLnBhcmVudEFkYXB0ZXJGYWN0b3J5ID0gcGFyZW50QWRhcHRlckZhY3Rvcnk7CisJfSAvLyBzZXRQYXJlbnRBZGFwdGVyRmFjdG9yeQorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQudXRpbC5TdGFuZGFyZEFkYXB0ZXJGYWN0b3J5I2lzRmFjdG9yeUZvclR5cGUoamF2YS5sYW5nLk9iamVjdCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgYm9vbGVhbiBpc0ZhY3RvcnlGb3JUeXBlKE9iamVjdCB0eXBlKSB7CisJCXJldHVybiB0eXBlID09IFJlbGF0aXZlVmFsdWVQcm92aWRlci5jbGFzcworCQkJCXx8IHN1cGVyLmlzRmFjdG9yeUZvclR5cGUodHlwZSk7CisJfSAvLyBpc0ZhY3RvcnlGb3JUeXBlCisKKwkvKioKKwkgKiBUaGlzIGRpc3Bvc2VzIGFsbCBvZiB0aGUgaXRlbSBwcm92aWRlcnMgY3JlYXRlZCBieSB0aGlzIGZhY3RvcnkuCisJICogCisJICogQHNlZSBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JRGlzcG9zYWJsZSNkaXNwb3NlKCkKKwkgKi8KKwlwdWJsaWMgdm9pZCBkaXNwb3NlKCkgeworCQkvLyBOb3RoaW5nCisJfSAvLyBkaXNwb3NlCisKKwkvKioKKwkgKiBAcmV0dXJuIHRoZSBpbnN0YW5jZSBvZiB0aGUgUmVsYXRpdmUgVmFsdWUgUHJvdmlkZXIgQWRhcHRlciBGYWN0b3J5CisJICovCisJcHJpdmF0ZSBzdGF0aWMgUmVsYXRpdmVWYWx1ZVByb3ZpZGVyQWRhcHRlckZhY3RvcnkgZ2V0UmVsYXRpdmVWYWx1ZVByb3ZpZGVyQWRhcHRlckZhY3RvcnkoKSB7CisJCXJldHVybiBSZWxhdGl2ZVZhbHVlUHJvdmlkZXJBZGFwdGVyRmFjdG9yeS5JTlNUQU5DRTsKKwl9IC8vIGdldFJlbGF0aXZlVmFsdWVQcm92aWRlckFkYXB0ZXJGYWN0b3J5CisKKwkvKioKKwkgKiBAcmV0dXJuIHRoZSBpbnN0YW5jZSBvZiB0aGUgU3RhbmRhcmQgSXRlbSBQcm92aWRlciBmYWN0b3J5LgorCSAqLworCXByaXZhdGUgc3RhdGljIFN0YW5kYXJkSXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkgZ2V0SXRlbVByb3ZpZGVyRmFjdG9yeSgpIHsKKwkJaWYgKGl0ZW1Qcm92aWRlckZhY3RvcnkgPT0gbnVsbCkgeworCQkJaXRlbVByb3ZpZGVyRmFjdG9yeSA9IG5ldyBTdGFuZGFyZEl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5KCk7CisJCX0KKwkJcmV0dXJuIGl0ZW1Qcm92aWRlckZhY3Rvcnk7CisJfSAvLyBnZXRJdGVtUHJvdmlkZXJGYWN0b3J5CisKKwkvKioKKwkgKiAKKwkgKiAKKwkgKiBAc2VlIERpc2Vhc2VNb2RlbExhYmVsVmFsdWVSZWxhdGl2ZVZhbHVlUHJvdmlkZXIKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGNsYXNzIFN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWxSZWxhdGl2ZVZhbHVlUHJvdmlkZXIgZXh0ZW5kcworCQkJUmVsYXRpdmVWYWx1ZVByb3ZpZGVyQWRhcHRlciBpbXBsZW1lbnRzIFJlbGF0aXZlVmFsdWVQcm92aWRlciB7CisKKwkJLyoqCisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5hZGFwdGVycy5yZWxhdGl2ZXZhbHVlLlJlbGF0aXZlVmFsdWVQcm92aWRlckFkYXB0ZXIjZ2V0UHJvcGVydGllcygpCisJCSAqLworCQlAT3ZlcnJpZGUKKwkJcHVibGljIExpc3Q8SUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I+IGdldFByb3BlcnRpZXMoKSB7CisJCQlmaW5hbCBQb3B1bGF0aW9uTW9kZWxMYWJlbCBwb3AgPSAoUG9wdWxhdGlvbk1vZGVsTGFiZWwpIGdldFRhcmdldCgpOworCQkJZmluYWwgUmVsYXRpdmVWYWx1ZVByb3ZpZGVyIHJ2cCA9IChSZWxhdGl2ZVZhbHVlUHJvdmlkZXIpIGdldFJlbGF0aXZlVmFsdWVQcm92aWRlckFkYXB0ZXJGYWN0b3J5KCkKKwkJCQkJLmFkYXB0KHBvcC5nZXRDdXJyZW50VmFsdWUoKSwgUmVsYXRpdmVWYWx1ZVByb3ZpZGVyLmNsYXNzKTsKKwkJCXJldHVybiBydnAuZ2V0UHJvcGVydGllcygpOworCQl9IC8vIGdldFByb3BlcnRpZXMKKworCQkvKioKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmFkYXB0ZXJzLnJlbGF0aXZldmFsdWUuUmVsYXRpdmVWYWx1ZVByb3ZpZGVyQWRhcHRlciNnZXRSZWxhdGl2ZVZhbHVlKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FU3RydWN0dXJhbEZlYXR1cmUpCisJCSAqLworCQlAT3ZlcnJpZGUKKwkJcHVibGljIGRvdWJsZSBnZXRSZWxhdGl2ZVZhbHVlKEVTdHJ1Y3R1cmFsRmVhdHVyZSBmZWF0dXJlKSB7CisJCQlmaW5hbCBQb3B1bGF0aW9uTW9kZWxMYWJlbCBwb3AgPSAoUG9wdWxhdGlvbk1vZGVsTGFiZWwpIGdldFRhcmdldCgpOworCQkJZmluYWwgUmVsYXRpdmVWYWx1ZVByb3ZpZGVyIHJ2cCA9IChSZWxhdGl2ZVZhbHVlUHJvdmlkZXIpIGdldFJlbGF0aXZlVmFsdWVQcm92aWRlckFkYXB0ZXJGYWN0b3J5KCkKKwkJCQkJLmFkYXB0KHBvcC5nZXRDdXJyZW50VmFsdWUoKSwgUmVsYXRpdmVWYWx1ZVByb3ZpZGVyLmNsYXNzKTsKKwkJCXJldHVybiBydnAuZ2V0UmVsYXRpdmVWYWx1ZShmZWF0dXJlKTsKKwkJfSAvLyBnZXRSZWxhdGl2ZVZhbHVlCisJCQorCQkvKioKKwkJICogdGhpcyBoZWxwZXIgbWV0aG9kIHJldHVybnMgdGhlIGFic29sdXRlIHRvdGFsIHBvcHVsYXRpb24uCisJCSAqIEl0IGlzIHJlcXVpcmVkIHdoZW5ldmVyIHdlIG5lZWQgdG8gc3dpdGNoIGJldHdlZW4gcmVsYXRpdmUgYW5kIGFic29sdXRlIHZhbHVlcworCQkgKiBAcmV0dXJuIHRoZSB0b3RhbCBjdXJyZW50IHBvcHVsYXRpb24gY291bnQgKGFic29sdXRlKQorCQkgKi8KKwkJQFN1cHByZXNzV2FybmluZ3MoImRlcHJlY2F0aW9uIikKKwkJQE92ZXJyaWRlCisJCXB1YmxpYyBkb3VibGUgZ2V0RGVub21pbmF0b3IoZmluYWwgRVN0cnVjdHVyYWxGZWF0dXJlIGZlYXR1cmUpIHsKKwkJCVN0cmluZyBfcG9wUmVmID0gQWN0aXZhdG9yLmdldERlZmF1bHQoKS5nZXRQbHVnaW5QcmVmZXJlbmNlcygpLmdldFN0cmluZyhQcmVmZXJlbmNlQ29uc3RhbnRzLlJFRkVSRU5DRV9QT1BVTEFUSU9OKTsKKwkJCVN0cmluZyBfZGVuc1JlZiA9IEFjdGl2YXRvci5nZXREZWZhdWx0KCkuZ2V0UGx1Z2luUHJlZmVyZW5jZXMoKS5nZXRTdHJpbmcoUHJlZmVyZW5jZUNvbnN0YW50cy5SRUZFUkVOQ0VfREVOU0lUWSk7CisJCisJCQlkb3VibGUgcG9wUmVmID0gRG91YmxlLnBhcnNlRG91YmxlKF9wb3BSZWYpOworCQkJZG91YmxlIGRlbnNSZWYgPSBEb3VibGUucGFyc2VEb3VibGUoX2RlbnNSZWYpOworCQkJCisJCQlpZihwb3BSZWYgPT0gMCkgcG9wUmVmID0gUHJlZmVyZW5jZUluaXRpYWxpemVyLkRFRkFVTFRfUkVGRVJFTkNFX1BPUFVMQVRJT047CisJCQlpZihkZW5zUmVmID09IDApIHBvcFJlZiA9IFByZWZlcmVuY2VJbml0aWFsaXplci5ERUZBVUxUX1JFRkVSRU5DRV9ERU5TSVRZOworCQkKKwkJCWlmKGZlYXR1cmUgIT0gbnVsbCAmJiBmZWF0dXJlLmdldEZlYXR1cmVJRCgpID09IFN0YW5kYXJkUGFja2FnZS5TVEFOREFSRF9QT1BVTEFUSU9OX01PREVMX0xBQkVMX1ZBTFVFX19ERU5TSVRZKQorCQkJCXJldHVybiBkZW5zUmVmOworCQkJZWxzZQorCQkJCXJldHVybiBwb3BSZWY7CisJCX0KKwkJCisJCQorCQkKKworCX0gLy8gRGlzZWFzZU1vZGVsTGFiZWxSZWxhdGl2ZVZhbHVlUHJvdmlkZXIKKworCS8qKgorCSAqCisJICovCisJcHVibGljIHN0YXRpYyBjbGFzcyBQb3B1bGF0aW9uTW9kZWxMYWJlbFZhbHVlUmVsYXRpdmVWYWx1ZVByb3ZpZGVyIGV4dGVuZHMKKwkJCVJlbGF0aXZlVmFsdWVQcm92aWRlckFkYXB0ZXIgaW1wbGVtZW50cyBSZWxhdGl2ZVZhbHVlUHJvdmlkZXIgeworCisJCS8qKgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuYWRhcHRlcnMucmVsYXRpdmV2YWx1ZS5SZWxhdGl2ZVZhbHVlUHJvdmlkZXJBZGFwdGVyI2dldFByb3BlcnRpZXMoKQorCQkgKi8KKwkJQE92ZXJyaWRlCisJCXB1YmxpYyBMaXN0PElJdGVtUHJvcGVydHlEZXNjcmlwdG9yPiBnZXRQcm9wZXJ0aWVzKCkgeworCQkJZmluYWwgTGlzdDxJSXRlbVByb3BlcnR5RGVzY3JpcHRvcj4gcmV0VmFsdWUgPSBuZXcgQXJyYXlMaXN0PElJdGVtUHJvcGVydHlEZXNjcmlwdG9yPigpOworCQkJZmluYWwgU3RhbmRhcmRJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSBpdGVtUHJvdmlkZXJGYWN0b3J5ID0gZ2V0SXRlbVByb3ZpZGVyRmFjdG9yeSgpOworCQkJZmluYWwgUG9wdWxhdGlvbk1vZGVsTGFiZWxWYWx1ZSBwb3B2ID0gKFBvcHVsYXRpb25Nb2RlbExhYmVsVmFsdWUpIGdldFRhcmdldCgpOworCQkJZmluYWwgSUl0ZW1Qcm9wZXJ0eVNvdXJjZSBwcm9wZXJ0eVNvdXJjZSA9IChJSXRlbVByb3BlcnR5U291cmNlKSBpdGVtUHJvdmlkZXJGYWN0b3J5CisJCQkJCS5hZGFwdChwb3B2LCBQcm9wZXJ0eVNvdXJjZS5jbGFzcyk7CisJCQlmaW5hbCBMaXN0PElJdGVtUHJvcGVydHlEZXNjcmlwdG9yPiBwcm9wZXJ0aWVzID0gcHJvcGVydHlTb3VyY2UKKwkJCQkJLmdldFByb3BlcnR5RGVzY3JpcHRvcnMobnVsbCk7CisJCQkvLyBUaGUgbGlzdCBvZiBwcm9wZXJ0eSBkZXNjcmlwdG9ycyBpbmNsdWRlcyBvbmVzIHRoYXQgZG8gbm90IGhhdmUKKwkJCS8vIHJlbGF0aXZlIHZhbHVlcy4gV2UgZmlsdGVyIHRob3NlIG91dCBoZXJlIGFuZCByZXR1cm4gdGhlIHJlc3QuCisJCQlmb3IgKElJdGVtUHJvcGVydHlEZXNjcmlwdG9yIGRlc2NyaXB0b3IgOiBwcm9wZXJ0aWVzKSB7CisJCQkJLy8gRG9lcyB0aGlzIHByb3BlcnR5IGhhdmUgYSByZWxhdGl2ZSB2YWx1ZT8KKwkJCQlmaW5hbCBFU3RydWN0dXJhbEZlYXR1cmUgZmVhdHVyZSA9IChFU3RydWN0dXJhbEZlYXR1cmUpIGRlc2NyaXB0b3IKKwkJCQkJCS5nZXRGZWF0dXJlKG51bGwpOworCQkJCQorCQkJCWlmKGZlYXR1cmUgaW5zdGFuY2VvZiBFUmVmZXJlbmNlKSBjb250aW51ZTsgLy8gc2tpcCBhcnJpdmFscyBldGMuCisJCQkJZmluYWwgaW50IGZlYXR1cmVJZCA9IGZlYXR1cmUuZ2V0RmVhdHVyZUlEKCk7CisJCQkJCisJCQkJCisJCQkJLy8gbmV3CisvLwkJCQlpZiAoIShmZWF0dXJlSWQgPT0gU3RhbmRhcmRQYWNrYWdlLlNUQU5EQVJEX1BPUFVMQVRJT05fTU9ERUxfTEFCRUxfVkFMVUVfX0JJUlRIUyAKKy8vCQkJCQkJfHwgZmVhdHVyZUlkID09IFN0YW5kYXJkUGFja2FnZS5TVEFOREFSRF9QT1BVTEFUSU9OX01PREVMX0xBQkVMX1ZBTFVFX19ERUFUSFMpKSB7CisJCQkJCS8vIFllcworCQkJCQorCQkJCQlyZXRWYWx1ZS5hZGQoZGVzY3JpcHRvcik7CisJCQkJCisvLwkJCQl9IC8vIGlmIGhhcyByZWxhdGl2ZSB2YWx1ZQorCQkJCS8vIE9sZAorCQkJCS8qCisJCQkJaWYgKCEoZmVhdHVyZUlkID09IFN0YW5kYXJkUGFja2FnZS5ESVNFQVNFX01PREVMX0xBQkVMX1ZBTFVFX19CSVJUSFMKKwkJCQkJCXx8IGZlYXR1cmVJZCA9PSBTdGFuZGFyZFBhY2thZ2UuRElTRUFTRV9NT0RFTF9MQUJFTF9WQUxVRV9fREVBVEhTCisJCQkJCQl8fCBmZWF0dXJlSWQgPT0gU3RhbmRhcmRQYWNrYWdlLkRJU0VBU0VfTU9ERUxfTEFCRUxfVkFMVUVfX0RJU0VBU0VfREVBVEhTIHx8IGZlYXR1cmVJZCA9PSBTdGFuZGFyZFBhY2thZ2UuRElTRUFTRV9NT0RFTF9MQUJFTF9WQUxVRV9fUE9QVUxBVElPTl9DT1VOVCkpIHsKKwkJCQkJLy8gWWVzCisJCQkJCXJldFZhbHVlLmFkZChkZXNjcmlwdG9yKTsKKwkJCQl9IC8vIGlmIGhhcyByZWxhdGl2ZSB2YWx1ZQorCQkJCSovCisJCQkJCisJCQl9IC8vIGZvcgorCQkJcmV0dXJuIHJldFZhbHVlOworCQl9IC8vIGdldFByb3BlcnRpZXMKKworCQkvKioKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmFkYXB0ZXJzLnJlbGF0aXZldmFsdWUuUmVsYXRpdmVWYWx1ZVByb3ZpZGVyI2dldFJlbGF0aXZlVmFsdWUoRVN0cnVjdHVyYWxGZWF0dXJlKQorCQkgKi8KKwkJQFN1cHByZXNzV2FybmluZ3MoImRlcHJlY2F0aW9uIikKKwkJQE92ZXJyaWRlCisJCXB1YmxpYyBkb3VibGUgZ2V0UmVsYXRpdmVWYWx1ZShmaW5hbCBFU3RydWN0dXJhbEZlYXR1cmUgZmVhdHVyZSkgeworCQkJaWYoZmVhdHVyZT09bnVsbCkgcmV0dXJuIDAuMDsKKwkJCWZpbmFsIFN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWxWYWx1ZSBwb3B2ID0gKFN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWxWYWx1ZSkgZ2V0VGFyZ2V0KCk7CisJCQlPYmplY3Qgb2JqID0gbnVsbDsKKwkJCWlmKHBvcHYhPW51bGwpIG9iaiA9IHBvcHYuZUdldChmZWF0dXJlKTsKKwkJCWRvdWJsZSByZXRWYWx1ZSA9IDAuMDsKKwkJCWlmKG9iaiAhPSBudWxsKSB7CisJCQkJZG91YmxlIGNvdW50ID0gKChEb3VibGUpIG9iaikuZG91YmxlVmFsdWUoKTsKKwkJCisJCQkJU3RyaW5nIF9wb3BSZWYgPSBBY3RpdmF0b3IuZ2V0RGVmYXVsdCgpLmdldFBsdWdpblByZWZlcmVuY2VzKCkuZ2V0U3RyaW5nKFByZWZlcmVuY2VDb25zdGFudHMuUkVGRVJFTkNFX1BPUFVMQVRJT04pOworCQkJCVN0cmluZyBfZGVuc1JlZiA9IEFjdGl2YXRvci5nZXREZWZhdWx0KCkuZ2V0UGx1Z2luUHJlZmVyZW5jZXMoKS5nZXRTdHJpbmcoUHJlZmVyZW5jZUNvbnN0YW50cy5SRUZFUkVOQ0VfREVOU0lUWSk7CisJCQorCQkJCWlmKChfcG9wUmVmPT1udWxsKXx8KF9wb3BSZWYubGVuZ3RoKCk8PTApKSB7CisJCQkJCV9wb3BSZWYgPSAiMCI7CisJCQkJfQorCQkJCWlmKChfZGVuc1JlZj09bnVsbCl8fChfZGVuc1JlZi5sZW5ndGgoKTw9MCkpIHsKKwkJCQkJX2RlbnNSZWYgPSAiMCI7CisJCQkJfQorCQkJCWRvdWJsZSBwb3BSZWYgPSBEb3VibGUucGFyc2VEb3VibGUoX3BvcFJlZik7CisJCQkJZG91YmxlIGRlbnNSZWYgPSBEb3VibGUucGFyc2VEb3VibGUoX2RlbnNSZWYpOworCQkJCQorCQkJCWlmKHBvcFJlZiA9PSAwKSBwb3BSZWYgPSBQcmVmZXJlbmNlSW5pdGlhbGl6ZXIuREVGQVVMVF9SRUZFUkVOQ0VfUE9QVUxBVElPTjsKKwkJCQlpZihkZW5zUmVmID09IDApIGRlbnNSZWYgPSBQcmVmZXJlbmNlSW5pdGlhbGl6ZXIuREVGQVVMVF9SRUZFUkVOQ0VfREVOU0lUWTsKKwkJCQkKKwkJCQkKKwkJCQlpZihmZWF0dXJlLmdldEZlYXR1cmVJRCgpID09IFN0YW5kYXJkUGFja2FnZS5TVEFOREFSRF9QT1BVTEFUSU9OX01PREVMX0xBQkVMX1ZBTFVFX19ERU5TSVRZKQorCQkJCQlyZXRWYWx1ZSA9IChjb3VudCAvIGRlbnNSZWYpOworCQkJCWVsc2UKKwkJCQkJcmV0VmFsdWUgPSAoY291bnQgLyBwb3BSZWYpOworCQkJfS8vaWYgdmFsaWQgZmVhdHVyZQorCQkJCisJCQkvLyBKSEsgdGhpcyBjb3VsZCBiZSA+IDEgYnV0IHRoYXQgaXMgY29ycmVjdCwgcmVsYXRpdmUgdmFsdWUgY2FuIGJlIHR3aWNlIHRoZSByZWZlcmVuY2UgdmFsdWUuCisJCQkvLyBwbG90dGluZyByb3V0aW5lcyBzaG91bGQgaGFuZGxlIHRoYXQgY2FzZS4KKwkJCXJldHVybiByZXRWYWx1ZTsKKwkJfSAvLyBnZXRSZWxhdGl2ZVZhbHVlCisJCQorCQkvKioKKwkJICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgZGVub21pbmF0b3Igb3Igc2NhbGUgdXNlZCB0byBjb252ZXJ0IHRvIHJlbGF0aXZlCisJCSAqIHZhbHVlcyBpbiB0aGUgcmFuZ2UgMC0xLiBGb3IgZXhhbXBsZSwgaW4gYW4gRXBpZGVtaWMgQ29tcGFydG1lbnQgbW9kZWwKKwkJICogdGhlIHN0YXRlIHZhbHVlcyBhcmUgbm9ybWFsaXplZCBieSBwb3B1bGF0aW9uLgorCQkgKiBJdCBpcyByZXF1aXJlZCB3aGVuZXZlciB3ZSBuZWVkIHRvIHN3aXRjaCBiZXR3ZWVuIHJlbGF0aXZlIGFuZCBhYnNvbHV0ZSB2YWx1ZXMKKwkJICogb3IgY2FuIGJlIHVzZWQgdG8gY3JlYXRlIGEgbGFiZWwgc2hvd2luZyB0aGUgbWF4aW11bSBzY2FsZSBmb3IgYW55IHJlbGF0aXZlIHZhbHVlLgorCQkgKiBAcmV0dXJuIHRoZSBkZW5vbWluYXRvciBvciBzY2FsZSB1c2VkIHRvIG5vcm1hbGl6ZSB0aGUgcmVsYXRpdmUgdmFsdWUKKwkJICovCisJCUBPdmVycmlkZQorCQlwdWJsaWMgZG91YmxlIGdldERlbm9taW5hdG9yKGZpbmFsIEVTdHJ1Y3R1cmFsRmVhdHVyZSBmZWF0dXJlKSB7CisJCQlsb25nIHBvcFJlZiA9IEFjdGl2YXRvci5nZXREZWZhdWx0KCkuZ2V0UGx1Z2luUHJlZmVyZW5jZXMoKS5nZXRMb25nKFByZWZlcmVuY2VDb25zdGFudHMuUkVGRVJFTkNFX1BPUFVMQVRJT04pOworCQkJbG9uZyBkZW5zUmVmID0gQWN0aXZhdG9yLmdldERlZmF1bHQoKS5nZXRQbHVnaW5QcmVmZXJlbmNlcygpLmdldExvbmcoUHJlZmVyZW5jZUNvbnN0YW50cy5SRUZFUkVOQ0VfREVOU0lUWSk7CisJCisJCQlpZihwb3BSZWYgPT0gMCkgcG9wUmVmID0gUHJlZmVyZW5jZUluaXRpYWxpemVyLkRFRkFVTFRfUkVGRVJFTkNFX1BPUFVMQVRJT047CisJCQlpZihkZW5zUmVmID09IDApIHBvcFJlZiA9IFByZWZlcmVuY2VJbml0aWFsaXplci5ERUZBVUxUX1JFRkVSRU5DRV9ERU5TSVRZOworCQorCQkJaWYoZmVhdHVyZS5nZXRGZWF0dXJlSUQoKSA9PSBTdGFuZGFyZFBhY2thZ2UuU1RBTkRBUkRfUE9QVUxBVElPTl9NT0RFTF9MQUJFTF9WQUxVRV9fREVOU0lUWSkKKwkJCQlyZXR1cm4gZGVuc1JlZjsKKwkJCWVsc2UKKwkJCQlyZXR1cm4gcG9wUmVmOworCQkKKwkJfQorCQkKKwl9IC8vIFBvcHVsYXRpb25Nb2RlbExhYmVsVmFsdWVSZWxhdGl2ZVZhbHVlUHJvdmlkZXIKKworCXB1YmxpYyB2b2lkIGVhcmx5U3RhcnR1cCgpIHsKKwkJLy8gRG9uZQorCX0KK30gLy8gU3RhbmRhcmRSZWxhdGl2ZVZhbHVlUHJvdmlkZXJBZGFwdGVyRmFjdG9yeQpkaWZmIC0tZ2l0IGEvbW9kZWxzL3BvcHVsYXRpb25zL29yZy5lY2xpcHNlLnN0ZW0udWkucG9wdWxhdGlvbm1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9wb3B1bGF0aW9ubW9kZWxzL3ByZWZlcmVuY2VzL1BvcHVsYXRpb25QcmVmZXJlbmNlUGFnZS5qYXZhIGIvbW9kZWxzL3BvcHVsYXRpb25zL29yZy5lY2xpcHNlLnN0ZW0udWkucG9wdWxhdGlvbm1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9wb3B1bGF0aW9ubW9kZWxzL3ByZWZlcmVuY2VzL1BvcHVsYXRpb25QcmVmZXJlbmNlUGFnZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQyZmFjMjMKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvcG9wdWxhdGlvbnMvb3JnLmVjbGlwc2Uuc3RlbS51aS5wb3B1bGF0aW9ubW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3BvcHVsYXRpb25tb2RlbHMvcHJlZmVyZW5jZXMvUG9wdWxhdGlvblByZWZlcmVuY2VQYWdlLmphdmEKQEAgLTAsMCArMSw4MCBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnVpLnBvcHVsYXRpb25tb2RlbHMucHJlZmVyZW5jZXM7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UucHJlZmVyZW5jZS5GaWVsZEVkaXRvclByZWZlcmVuY2VQYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnByZWZlcmVuY2UuSVByZWZlcmVuY2VTdG9yZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5wcmVmZXJlbmNlLlN0cmluZ0ZpZWxkRWRpdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udWkuQWN0aXZhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udWkucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC53aXphcmRzLlBvcHVsYXRpb25Nb2RlbFdpemFyZE1lc3NhZ2VzOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2g7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaFByZWZlcmVuY2VQYWdlOworCisvKioKKyAqIFRoaXMgY2xhc3MgcmVwcmVzZW50cyBhIHByZWZlcmVuY2UgcGFnZSB0aGF0IGlzIGNvbnRyaWJ1dGVkIHRvIHRoZQorICogUHJlZmVyZW5jZXMgZGlhbG9nLiBCeSBzdWItY2xhc3NpbmcgPHNhbXA+RmllbGRFZGl0b3JQcmVmZXJlbmNlUGFnZTwvc2FtcD4sCisgKiB3ZSBjYW4gdXNlIHRoZSBmaWVsZCBzdXBwb3J0IGJ1aWx0IGludG8gSkZhY2UgdGhhdCBhbGxvd3MgdXMgdG8gY3JlYXRlIGEgcGFnZQorICogdGhhdCBpcyBzbWFsbCBhbmQga25vd3MgaG93IHRvIHNhdmUsIHJlc3RvcmUgYW5kIGFwcGx5IGl0c2VsZi4KKyAqIDxwPgorICogVGhpcyBwYWdlIGlzIHVzZWQgdG8gbW9kaWZ5IHByZWZlcmVuY2VzIG9ubHkuIFRoZXkgYXJlIHN0b3JlZCBpbiB0aGUKKyAqIHByZWZlcmVuY2Ugc3RvcmUgdGhhdCBiZWxvbmdzIHRvIHRoZSBtYWluIHBsdWctaW4gY2xhc3MuIFRoYXQgd2F5LAorICogcHJlZmVyZW5jZXMgY2FuIGJlIGFjY2Vzc2VkIGRpcmVjdGx5IHZpYSB0aGUgcHJlZmVyZW5jZSBzdG9yZS4KKyAqLworCitwdWJsaWMgY2xhc3MgUG9wdWxhdGlvblByZWZlcmVuY2VQYWdlIGV4dGVuZHMKKwkJRmllbGRFZGl0b3JQcmVmZXJlbmNlUGFnZSBpbXBsZW1lbnRzIElXb3JrYmVuY2hQcmVmZXJlbmNlUGFnZSB7CisKKwkKKwkvKioKKwkgKiBDb25zdHJ1Y3RvcgorCSAqLworCXB1YmxpYyBQb3B1bGF0aW9uUHJlZmVyZW5jZVBhZ2UoKSB7CisJCXN1cGVyKEdSSUQpOworCQlzZXRQcmVmZXJlbmNlU3RvcmUoQWN0aXZhdG9yLmdldERlZmF1bHQoKS5nZXRQcmVmZXJlbmNlU3RvcmUoKSk7CisJCXNldERlc2NyaXB0aW9uKFBvcHVsYXRpb25Nb2RlbFdpemFyZE1lc3NhZ2VzLmdldFN0cmluZygiUG9wdWxhdGlvblBQYWdlVElUTEUiKSk7IC8vJE5PTi1OTFMtMSQKKwl9CisKKwkvKioKKwkgKiBDcmVhdGVzIHRoZSBmaWVsZCBlZGl0b3JzLiBGaWVsZCBlZGl0b3JzIGFyZSBhYnN0cmFjdGlvbnMgb2YgdGhlIGNvbW1vbgorCSAqIEdVSSBibG9ja3MgbmVlZGVkIHRvIG1hbmlwdWxhdGUgdmFyaW91cyB0eXBlcyBvZiBwcmVmZXJlbmNlcy4gRWFjaCBmaWVsZAorCSAqIGVkaXRvciBrbm93cyBob3cgdG8gc2F2ZSBhbmQgcmVzdG9yZSBpdHNlbGYuCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgY3JlYXRlRmllbGRFZGl0b3JzKCkgeworCisJCUlQcmVmZXJlbmNlU3RvcmUgc3RvcmUgPSBBY3RpdmF0b3IuZ2V0RGVmYXVsdCgpLmdldFByZWZlcmVuY2VTdG9yZSgpOworCQlsb25nIHJlZlBvcCA9IHN0b3JlLmdldExvbmcoUHJlZmVyZW5jZUNvbnN0YW50cy5SRUZFUkVOQ0VfUE9QVUxBVElPTik7CisJCWxvbmcgcmVmRGVucyA9IHN0b3JlLmdldExvbmcoUHJlZmVyZW5jZUNvbnN0YW50cy5SRUZFUkVOQ0VfREVOU0lUWSk7CisJCQorCQlmaW5hbCBTdHJpbmdGaWVsZEVkaXRvciByZWZlcmVuY2VQb3B1bGF0aW9uVGhyZWFkc0ZpZWxkRWRpdG9yID0gbmV3IFN0cmluZ0ZpZWxkRWRpdG9yKAorCQkJCVByZWZlcmVuY2VDb25zdGFudHMuUkVGRVJFTkNFX1BPUFVMQVRJT04sCisJCQkJUG9wdWxhdGlvbk1vZGVsV2l6YXJkTWVzc2FnZXMuZ2V0U3RyaW5nKCJSZWZlcmVuY2VQb3B1bGF0aW9uIiksIGdldEZpZWxkRWRpdG9yUGFyZW50KCkpOyAvLyROT04tTkxTLTEkCisJCQorCQlyZWZlcmVuY2VQb3B1bGF0aW9uVGhyZWFkc0ZpZWxkRWRpdG9yLnNldFN0cmluZ1ZhbHVlKCIiK3JlZlBvcCk7CisJCWFkZEZpZWxkKHJlZmVyZW5jZVBvcHVsYXRpb25UaHJlYWRzRmllbGRFZGl0b3IpOworCQkKKwkJZmluYWwgU3RyaW5nRmllbGRFZGl0b3IgcmVmZXJlbmNlRGVuc2l0eVRocmVhZHNGaWVsZEVkaXRvciA9IG5ldyBTdHJpbmdGaWVsZEVkaXRvcigKKwkJCQlQcmVmZXJlbmNlQ29uc3RhbnRzLlJFRkVSRU5DRV9ERU5TSVRZLAorCQkJCVBvcHVsYXRpb25Nb2RlbFdpemFyZE1lc3NhZ2VzLmdldFN0cmluZygiUmVmZXJlbmNlRGVuc2l0eSIpLCBnZXRGaWVsZEVkaXRvclBhcmVudCgpKTsgLy8kTk9OLU5MUy0xJAorCQlyZWZlcmVuY2VQb3B1bGF0aW9uVGhyZWFkc0ZpZWxkRWRpdG9yLnNldFN0cmluZ1ZhbHVlKCIiK3JlZkRlbnMpOworCQlhZGRGaWVsZChyZWZlcmVuY2VEZW5zaXR5VGhyZWFkc0ZpZWxkRWRpdG9yKTsKKwkJCisJfSAvLyBjcmVhdGVGaWVsZEVkaXRvcnMKKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaFByZWZlcmVuY2VQYWdlI2luaXQob3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaCkKKwkgKi8KKwlwdWJsaWMgdm9pZCBpbml0KElXb3JrYmVuY2ggd29ya2JlbmNoKSB7CisJCS8vIE5vdGhpbmcKKwl9CisKK30gLy8gUG9wdWxhdGlvblByZWZlcmVuY2VQYWdlCmRpZmYgLS1naXQgYS9tb2RlbHMvcG9wdWxhdGlvbnMvb3JnLmVjbGlwc2Uuc3RlbS51aS5wb3B1bGF0aW9ubW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3BvcHVsYXRpb25tb2RlbHMvcHJlZmVyZW5jZXMvUHJlZmVyZW5jZUNvbnN0YW50cy5qYXZhIGIvbW9kZWxzL3BvcHVsYXRpb25zL29yZy5lY2xpcHNlLnN0ZW0udWkucG9wdWxhdGlvbm1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9wb3B1bGF0aW9ubW9kZWxzL3ByZWZlcmVuY2VzL1ByZWZlcmVuY2VDb25zdGFudHMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zN2Y0MjM1Ci0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL3BvcHVsYXRpb25zL29yZy5lY2xpcHNlLnN0ZW0udWkucG9wdWxhdGlvbm1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9wb3B1bGF0aW9ubW9kZWxzL3ByZWZlcmVuY2VzL1ByZWZlcmVuY2VDb25zdGFudHMuamF2YQpAQCAtMCwwICsxLDI5IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0udWkucG9wdWxhdGlvbm1vZGVscy5wcmVmZXJlbmNlczsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKgorICogQ29uc3RhbnQgZGVmaW5pdGlvbnMgZm9yIHBsdWctaW4gcHJlZmVyZW5jZXMKKyAqLworcHVibGljIGNsYXNzIFByZWZlcmVuY2VDb25zdGFudHMgeworCisJLyoqCisJICogVGhpcyBpcyB0aGUgcHJlZmVyZW5jZSBmb3IgdGhlIHJlZmVyZW5jZSBwb3B1bGF0aW9uCisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUkVGRVJFTkNFX1BPUFVMQVRJT04gPSAicmVmZXJlbmNlUG9wdWxhdGlvbiI7IC8vJE5PTi1OTFMtMSQKKworCS8qKgorCSAqIFRoaXMgaXMgdGhlIHByZWZlcmVuY2UgZm9yIHRoZSByZWZlcmVuY2UgZGVuc2l0eQorCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFJFRkVSRU5DRV9ERU5TSVRZID0gInJlZmVyZW5jZURlbnNpdHkiOyAvLyROT04tTkxTLTEkCisKK30gLy8gUHJlZmVyZW5jZUNvbnN0YW50cwpkaWZmIC0tZ2l0IGEvbW9kZWxzL3BvcHVsYXRpb25zL29yZy5lY2xpcHNlLnN0ZW0udWkucG9wdWxhdGlvbm1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9wb3B1bGF0aW9ubW9kZWxzL3ByZWZlcmVuY2VzL1ByZWZlcmVuY2VJbml0aWFsaXplci5qYXZhIGIvbW9kZWxzL3BvcHVsYXRpb25zL29yZy5lY2xpcHNlLnN0ZW0udWkucG9wdWxhdGlvbm1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9wb3B1bGF0aW9ubW9kZWxzL3ByZWZlcmVuY2VzL1ByZWZlcmVuY2VJbml0aWFsaXplci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU5NTgxMzkKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvcG9wdWxhdGlvbnMvb3JnLmVjbGlwc2Uuc3RlbS51aS5wb3B1bGF0aW9ubW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3BvcHVsYXRpb25tb2RlbHMvcHJlZmVyZW5jZXMvUHJlZmVyZW5jZUluaXRpYWxpemVyLmphdmEKQEAgLTAsMCArMSwzNiBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnVpLnBvcHVsYXRpb25tb2RlbHMucHJlZmVyZW5jZXM7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLnByZWZlcmVuY2VzLkFic3RyYWN0UHJlZmVyZW5jZUluaXRpYWxpemVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnByZWZlcmVuY2UuSVByZWZlcmVuY2VTdG9yZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnVpLkFjdGl2YXRvcjsKKworLyoqCisgKiBDbGFzcyB1c2VkIHRvIGluaXRpYWxpemUgZGVmYXVsdCBwcmVmZXJlbmNlIHZhbHVlcy4KKyAqLworcHVibGljIGNsYXNzIFByZWZlcmVuY2VJbml0aWFsaXplciBleHRlbmRzIEFic3RyYWN0UHJlZmVyZW5jZUluaXRpYWxpemVyIHsKKworCXB1YmxpYyBzdGF0aWMgbG9uZyBERUZBVUxUX1JFRkVSRU5DRV9QT1BVTEFUSU9OID0gMTYwMDAwMDA7CisJcHVibGljIHN0YXRpYyBsb25nIERFRkFVTFRfUkVGRVJFTkNFX0RFTlNJVFkgPSAyNTAwMDsKKwkKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5wcmVmZXJlbmNlcy5BYnN0cmFjdFByZWZlcmVuY2VJbml0aWFsaXplciNpbml0aWFsaXplRGVmYXVsdFByZWZlcmVuY2VzKCkKKwkgKi8KKwlwdWJsaWMgdm9pZCBpbml0aWFsaXplRGVmYXVsdFByZWZlcmVuY2VzKCkgeworCQlJUHJlZmVyZW5jZVN0b3JlIHN0b3JlID0gQWN0aXZhdG9yLmdldERlZmF1bHQoKS5nZXRQcmVmZXJlbmNlU3RvcmUoKTsKKwkJc3RvcmUuc2V0RGVmYXVsdChQcmVmZXJlbmNlQ29uc3RhbnRzLlJFRkVSRU5DRV9QT1BVTEFUSU9OLAorCQkJCQkJREVGQVVMVF9SRUZFUkVOQ0VfUE9QVUxBVElPTisiIik7CisJCXN0b3JlLnNldERlZmF1bHQoUHJlZmVyZW5jZUNvbnN0YW50cy5SRUZFUkVOQ0VfREVOU0lUWSwKKwkJCQlERUZBVUxUX1JFRkVSRU5DRV9ERU5TSVRZKyIiKTsKKwl9CQorfSAvLyBQcmVmZXJlbmNlSW5pdGlhbGl6ZXIKZGlmZiAtLWdpdCBhL21vZGVscy9wb3B1bGF0aW9ucy9vcmcuZWNsaXBzZS5zdGVtLnVpLnBvcHVsYXRpb25tb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvcG9wdWxhdGlvbm1vZGVscy9zdGFuZGFyZC93aXphcmRzL01vc3F1aXRvUG9wdWxhdGlvbk1vZGVsUHJvcGVydHlFZGl0b3JBZGFwdGVyLmphdmEgYi9tb2RlbHMvcG9wdWxhdGlvbnMvb3JnLmVjbGlwc2Uuc3RlbS51aS5wb3B1bGF0aW9ubW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3BvcHVsYXRpb25tb2RlbHMvc3RhbmRhcmQvd2l6YXJkcy9Nb3NxdWl0b1BvcHVsYXRpb25Nb2RlbFByb3BlcnR5RWRpdG9yQWRhcHRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFhNGRhM2QKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvcG9wdWxhdGlvbnMvb3JnLmVjbGlwc2Uuc3RlbS51aS5wb3B1bGF0aW9ubW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3BvcHVsYXRpb25tb2RlbHMvc3RhbmRhcmQvd2l6YXJkcy9Nb3NxdWl0b1BvcHVsYXRpb25Nb2RlbFByb3BlcnR5RWRpdG9yQWRhcHRlci5qYXZhCkBAIC0wLDAgKzEsMzEgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS51aS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLndpemFyZHM7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5Qb3B1bGF0aW9uTW9kZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS51aS5wb3B1bGF0aW9ubW9kZWxzLmFkYXB0ZXJzLlBvcHVsYXRpb25Nb2RlbFByb3BlcnR5RWRpdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udWkucG9wdWxhdGlvbm1vZGVscy5hZGFwdGVycy5Qb3B1bGF0aW9uTW9kZWxQcm9wZXJ0eUVkaXRvckFkYXB0ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5Nb2RpZnlMaXN0ZW5lcjsKKworcHVibGljIGNsYXNzIE1vc3F1aXRvUG9wdWxhdGlvbk1vZGVsUHJvcGVydHlFZGl0b3JBZGFwdGVyIGV4dGVuZHMKKwkJUG9wdWxhdGlvbk1vZGVsUHJvcGVydHlFZGl0b3JBZGFwdGVyIHsKKworCUBPdmVycmlkZQorCXB1YmxpYyBQb3B1bGF0aW9uTW9kZWxQcm9wZXJ0eUVkaXRvciBjcmVhdGVQb3B1bGF0aW9uTW9kZWxQcm9wZXJ0eUVkaXRvcigKKwkJCWZpbmFsIFBvcHVsYXRpb25Nb2RlbFByb3BlcnR5Q29tcG9zaXRlIHBvcHVsYXRpb25Nb2RlbFByb3BlcnR5Q29tcG9zaXRlLAorCQkJZmluYWwgaW50IHN0eWxlLCBmaW5hbCBNb2RpZnlMaXN0ZW5lciBwcm9qZWN0VmFsaWRhdG9yLCBJUHJvamVjdCBwcm9qZWN0KSB7CisJCXJldHVybiBuZXcgU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxQcm9wZXJ0eUVkaXRvcigKKwkJCQlwb3B1bGF0aW9uTW9kZWxQcm9wZXJ0eUNvbXBvc2l0ZSwgc3R5bGUsCisJCQkJKFBvcHVsYXRpb25Nb2RlbCkgZ2V0VGFyZ2V0KCksIHByb2plY3RWYWxpZGF0b3IsIHByb2plY3QpOworCX0gLy8gY3JlYXRlUG9wdWxhdGlvbk1vZGVsUHJvcGVydHlFZGl0b3IKKworfSAvLyBNb3NxdWl0b1BvcHVsYXRpb25Nb2RlbFByb3BlcnR5RWRpdG9yQWRhcHRlcgpkaWZmIC0tZ2l0IGEvbW9kZWxzL3BvcHVsYXRpb25zL29yZy5lY2xpcHNlLnN0ZW0udWkucG9wdWxhdGlvbm1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9wb3B1bGF0aW9ubW9kZWxzL3N0YW5kYXJkL3dpemFyZHMvTmV3UG9wdWxhdGlvbkluaXRpYWxpemVyV2l6YXJkLmphdmEgYi9tb2RlbHMvcG9wdWxhdGlvbnMvb3JnLmVjbGlwc2Uuc3RlbS51aS5wb3B1bGF0aW9ubW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3BvcHVsYXRpb25tb2RlbHMvc3RhbmRhcmQvd2l6YXJkcy9OZXdQb3B1bGF0aW9uSW5pdGlhbGl6ZXJXaXphcmQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYWQyNzhjCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL3BvcHVsYXRpb25zL29yZy5lY2xpcHNlLnN0ZW0udWkucG9wdWxhdGlvbm1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9wb3B1bGF0aW9ubW9kZWxzL3N0YW5kYXJkL3dpemFyZHMvTmV3UG9wdWxhdGlvbkluaXRpYWxpemVyV2l6YXJkLmphdmEKQEAgLTAsMCArMSwxOTYgQEAKKy8vIE5ld0Rpc2Vhc2VXaXphcmQuamF2YQorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnVpLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQud2l6YXJkczsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAxMCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLmNvbW1hbmRzLkFic3RyYWN0SGFuZGxlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLmNvbW1hbmRzLkV4ZWN1dGlvbkV2ZW50OworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUuY29tbWFuZHMuRXhlY3V0aW9uRXhjZXB0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUuY29tbWFuZHMuSUhhbmRsZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5TdHJ1Y3R1cmVkU2VsZWN0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLndpemFyZC5XaXphcmREaWFsb2c7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLlNURU1VUkk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5EdWJsaW5Db3JlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uSWRlbnRpZmlhYmxlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5Qb3B1bGF0aW9uSW5pdGlhbGl6ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLlBvcHVsYXRpb25Nb2RlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmRQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udWkud2l6YXJkcy5EdWJsaW5Db3JlUGFnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnVpLndpemFyZHMuTmV3SWRlbnRpZmlhYmxlUGFnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnVpLndpemFyZHMuTmV3SWRlbnRpZmlhYmxlV2l6YXJkOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udWkud2l6YXJkcy5OZXdTVEVNUHJvamVjdFdpemFyZDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnVpLndpemFyZHMuU1RFTVdpemFyZERpYWxvZzsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuU1dUOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5JV29ya2JlbmNoV2luZG93OworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLmhhbmRsZXJzLkhhbmRsZXJVdGlsOworCisvKioKKyAqIFRoaXMgY2xhc3MgaXMgYSBXaXphcmQgZm9yIG1ha2luZyBuZXcgU1RFTSB7QGxpbmsgRGlzZWFzZU1vZGVsfSBpbnN0YW5jZXMuCisgKi8KK3B1YmxpYyBjbGFzcyBOZXdQb3B1bGF0aW9uSW5pdGlhbGl6ZXJXaXphcmQgZXh0ZW5kcyBOZXdJZGVudGlmaWFibGVXaXphcmQgeworCisJcHJpdmF0ZSBOZXdQb3B1bGF0aW9uSW5pdGlhbGl6ZXJQYWdlIG5kcCA9IG51bGw7CisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0udWkud2l6YXJkcy5OZXdJZGVudGlmaWFibGVXaXphcmQjZ2V0V2l6YXJkVGl0bGUoKQorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCBTdHJpbmcgZ2V0V2l6YXJkVGl0bGUoKSB7CisJCXJldHVybiBQb3B1bGF0aW9uTW9kZWxXaXphcmRNZXNzYWdlcy5nZXRTdHJpbmcoIk5Qb3B1bGF0aW9uSW5pdGlhbGl6ZXJXaXoud2l6YXJkX3RpdGxlIik7IC8vJE5PTi1OTFMtMSQKKwl9CisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0udWkud2l6YXJkcy5OZXdJZGVudGlmaWFibGVXaXphcmQjY3JlYXRlTmV3SWRlbnRpZmlhYmxlUGFnZSgpCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIE5ld0lkZW50aWZpYWJsZVBhZ2UgY3JlYXRlTmV3SWRlbnRpZmlhYmxlUGFnZSgpIHsKKwkJbmRwID0gbmV3IE5ld1BvcHVsYXRpb25Jbml0aWFsaXplclBhZ2UoUG9wdWxhdGlvbk1vZGVsV2l6YXJkTWVzc2FnZXMKKwkJCQkuZ2V0U3RyaW5nKCJOUG9wdWxhdGlvbkluaXRpYWxpeHplcldpei5wYWdlX3RpdGxlIiksdGhpcyk7IC8vJE5PTi1OTFMtMSQKKwkJbmRwLnNldFRpdGxlKFBvcHVsYXRpb25Nb2RlbFdpemFyZE1lc3NhZ2VzLmdldFN0cmluZygiTlBvcHVsYXRpb25Jbml0aWFsaXplcldpei5wYWdlX3RpdGxlIikpOyAvLyROT04tTkxTLTEkCisJCW5kcC5zZXREZXNjcmlwdGlvbihQb3B1bGF0aW9uTW9kZWxXaXphcmRNZXNzYWdlcworCQkJCS5nZXRTdHJpbmcoIk5Qb3B1bGF0aW9uSW5pdGlhbGl6ZXJXaXoucGFnZV9kZXNjcmlwdGlvbiIpKTsgLy8kTk9OLU5MUy0xJAorCQl0aGlzLnNldEhlbHBDb250ZXh0SWQoIm9yZy5lY2xpcHNlLnN0ZW0uZG9jLm5ld3BvcHVsYXRpb25pbml0aWFsaXplcl9jb250ZXh0aWQiKTsKKwkJcmV0dXJuIG5kcDsKKwl9IC8vIGNyZWF0ZU5ld0lkZW50aWZpYWJsZVBhZ2UKKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS51aS53aXphcmRzLk5ld0lkZW50aWZpYWJsZVdpemFyZCNjcmVhdGVEdWJsaW5Db3JlUGFnZSgpCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIER1YmxpbkNvcmVQYWdlIGNyZWF0ZUR1YmxpbkNvcmVQYWdlKCkgeworCQlyZXR1cm4gbmV3IER1YmxpbkNvcmVQYWdlKCkgeworCQkJLyoqCisJCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0udWkud2l6YXJkcy5OZXdJZGVudGlmaWFibGVXaXphcmQuRHVibGluQ29yZVBhZ2UjaW5pdGlhbGl6ZURDRmllbGRzKCkKKwkJCSAqLworCQkJQE92ZXJyaWRlCisJCQlwcm90ZWN0ZWQgdm9pZCBpbml0aWFsaXplRENBdHRyaWJ1dGVzKCkgeworCQkJCXN1cGVyLmluaXRpYWxpemVEQ0F0dHJpYnV0ZXMoKTsKKwkJCQlmb3JtYXQuc2V0VGV4dChTdGFuZGFyZFBhY2thZ2UuZU5TX1VSSSk7CisJCQkJZm9ybWF0LnNldEVuYWJsZWQoZmFsc2UpOworCQkJCXR5cGUuc2V0VGV4dChTVEVNVVJJLmNyZWF0ZVR5cGVVUkkoCisJCQkJCQlQb3B1bGF0aW9uTW9kZWwuVVJJX1RZUEVfUE9QVUxBVElPTk1PREVMX1NFR01FTlQpLnRvU3RyaW5nKCkpOworCQkJCXR5cGUuc2V0RW5hYmxlZChmYWxzZSk7CisJCQkJCisKKwkJCQkvLyBKSEsgZ2V0IHRoZSBwcmVzZXQgRHVibGluIENvcmUgZmllbGRzIGZyb20gdGhlIHBsdWdpbi54bWwKKwkJCQlmaW5hbCBQb3B1bGF0aW9uSW5pdGlhbGl6ZXIgcG9wdWxhdGlvbkluaXRpYWxpemVyID0gbmRwLmdldFNlbGVjdGVkUG9wdWxhdGlvbkluaXRpYWxpemVyKCk7CisJCQkJRHVibGluQ29yZSBwbHVnZ2luRHVibGluQ29yZSA9IHBvcHVsYXRpb25Jbml0aWFsaXplci5nZXREdWJsaW5Db3JlKCk7CisJCQkJdGhpcy51cGRhdGVEdWJsaW5Db3JlUGFnZShwbHVnZ2luRHVibGluQ29yZSk7CisJCQl9CisJCX07IC8vIER1YmxpbkNvcmVQYWdlCisJfSAvLyBjcmVhdGVEdWJsaW5Db3JlUGFnZQorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnVpLndpemFyZHMuTmV3SWRlbnRpZmlhYmxlV2l6YXJkI2NyZWF0ZUlkZW50aWZpYWJsZSgpCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIElkZW50aWZpYWJsZSBjcmVhdGVJZGVudGlmaWFibGUoKSB7CisJCWZpbmFsIFBvcHVsYXRpb25Jbml0aWFsaXplciByZXRWYWx1ZSA9IG5kcC5nZXRTZWxlY3RlZFBvcHVsYXRpb25Jbml0aWFsaXplcigpOworCQlyZXRWYWx1ZS5zZXREdWJsaW5Db3JlKG5ld0R1YmxpbkNvcmVQYWdlLmNyZWF0ZUR1YmxpbkNvcmUoKSk7CisJCXJldHVybiByZXRWYWx1ZTsKKwl9IC8vIGNyZWF0ZVNwZWNpZmljSWRlbnRpZmlhYmxlCisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0udWkud2l6YXJkcy5OZXdJZGVudGlmaWFibGVXaXphcmQjZ2V0U2VyaWFsaXphdGlvbkZvbGRlck5hbWUoKQorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCBTdHJpbmcgZ2V0U2VyaWFsaXphdGlvbkZvbGRlck5hbWUoKSB7CisJCXJldHVybiBOZXdTVEVNUHJvamVjdFdpemFyZC5ERUNPUkFUT1JTX0ZPTERFUl9OQU1FOworCX0KKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS51aS53aXphcmRzLk5ld0lkZW50aWZpYWJsZVdpemFyZCNnZXRTZXJpYWxpemF0aW9uRmlsZU5hbWVFeHRlbnNpb24oKQorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCBTdHJpbmcgZ2V0U2VyaWFsaXphdGlvbkZpbGVOYW1lRXh0ZW5zaW9uKCkgeworCQlyZXR1cm4gU3RhbmRhcmRQYWNrYWdlLmVOQU1FOworCX0gLy8gZ2V0SWRlbnRpZmlhYmxlU2VyaWFsaXphdGlvbkZpbGVFeHRlbnNpb24KKworCXByb3RlY3RlZCBzdGF0aWMgY2xhc3MgTmV3UG9wdWxhdGlvbkluaXRpYWxpemVyUGFnZSBleHRlbmRzIE5ld0lkZW50aWZpYWJsZVBhZ2UgeworCisJCVBvcHVsYXRpb25Jbml0aWFsaXplckRlZmluaXRpb25Db250cm9sIGRkYyA9IG51bGw7CisJCQorCQlOZXdQb3B1bGF0aW9uSW5pdGlhbGl6ZXJXaXphcmQgcGFyZW50V2l6YXJkID0gbnVsbDsKKworCQkvKioKKwkJICogQHBhcmFtIHBhZ2VOYW1lCisJCSAqIEBwYXJhbSBucGl3IHRoZSBOZXdQb3B1bGF0aW9uSW5pdGlhbGl6ZXJXaXphcmQKKwkJICovCisJCXByb3RlY3RlZCBOZXdQb3B1bGF0aW9uSW5pdGlhbGl6ZXJQYWdlKGZpbmFsIFN0cmluZyBwYWdlTmFtZSwgTmV3UG9wdWxhdGlvbkluaXRpYWxpemVyV2l6YXJkIG5waXcpIHsKKwkJCXN1cGVyKHBhZ2VOYW1lKTsKKwkJCXBhcmVudFdpemFyZCA9IG5waXc7CisJCX0KKworCQkvKioKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnVpLndpemFyZHMuTmV3SWRlbnRpZmlhYmxlV2l6YXJkLk5ld0lkZW50aWZpYWJsZVBhZ2UjZ2V0RENEZXNjcmlwdGlvbigpCisJCSAqLworCQlAT3ZlcnJpZGUKKwkJcHJvdGVjdGVkIFN0cmluZyBnZXREQ0Rlc2NyaXB0aW9uKCkgeworCQkJLy8gTGVhdmUgZGVzY3JpcHRpb24vdGl0bGUgYmxhbmsKKwkJCXJldHVybiAiIjsKKy8vCQkJcmV0dXJuIE1lc3NhZ2VGb3JtYXQuZm9ybWF0KFBvcHVsYXRpb25Nb2RlbFdpemFyZE1lc3NhZ2VzCisvLwkJCQkJLmdldFN0cmluZygiTlBvcHVsYXRpb25Jbml0aWFsaXplcldpei5EQ19ERVNDUklQVElPTiIpLCAvLyROT04tTkxTLTEkCisvLwkJCQkJbmV3IE9iamVjdFtdIHsgc2VyaWFsaXphdGlvbkZpbGVOYW1lRmllbGQuZ2V0VGV4dCgpIH0pOworCQl9IC8vIGdldERDRGVzY3JpcHRpb24KKworCQlAT3ZlcnJpZGUKKwkJcHJvdGVjdGVkIENvbXBvc2l0ZSBjcmVhdGVTcGVjaWZpY0NvbXBvc2l0ZShmaW5hbCBDb21wb3NpdGUgcGFyZW50KSB7CisJCQlkZGMgPSBuZXcgUG9wdWxhdGlvbkluaXRpYWxpemVyRGVmaW5pdGlvbkNvbnRyb2wocGFyZW50LCBTV1QuTk9ORSwKKwkJCQkJcHJvamVjdFZhbGlkYXRvciwgc3VwZXIuZ2V0U2VsZWN0ZWRQcm9qZWN0KCksIHBhcmVudFdpemFyZCk7CisJCQlyZXR1cm4gZGRjOworCQl9IC8vIGNyZWF0ZVNwZWNpZmljQ29tcG9zaXRlCisKKwkJQE92ZXJyaWRlCisJCXByb3RlY3RlZCBib29sZWFuIHZhbGlkYXRlUGFnZSgpIHsKKwkJCWJvb2xlYW4gcmV0VmFsdWUgPSBzdXBlci52YWxpZGF0ZVBhZ2UoKTsKKwkJCWlmIChyZXRWYWx1ZSkgeworCQkJCXNldEVycm9yTWVzc2FnZShudWxsKTsKKwkJCQlyZXRWYWx1ZSA9IGRkYy52YWxpZGF0ZSgpOworCQkJCS8vIEVycm9yPworCQkJCWlmICghcmV0VmFsdWUpIHsKKwkJCQkJLy8gWWVzCisJCQkJCXNldEVycm9yTWVzc2FnZShkZGMuZ2V0RXJyb3JNZXNzYWdlKCkpOworCQkJCX0gLy8gaWYKKwkJCX0KKwkJCXJldHVybiByZXRWYWx1ZTsKKwkJfSAvLyB2YWxpZGF0ZVBhZ2UKKworCQlQb3B1bGF0aW9uSW5pdGlhbGl6ZXIgZ2V0U2VsZWN0ZWRQb3B1bGF0aW9uSW5pdGlhbGl6ZXIoKSB7CisJCQlyZXR1cm4gZGRjLmdldFNlbGVjdGVkUG9wdWxhdGlvbkluaXRpYWxpemVyKCk7CisJCX0gLy8gZ2V0U2VsZWN0ZWREaXNlYXNlTW9kZWwKKworCX0gLy8gTmV3RGlzZWFzZVBhZ2UKKworCS8qKgorCSAqIFRoaXMgY2xhc3MgaXMgYSB7QGxpbmsgSUhhbmRsZXJ9IGZvciB0aGUgY29tbWFuZCB0aGF0IGNyZWF0ZXMgYQorCSAqIHtAbGluayBOZXdQb3B1bGF0aW9uTW9kZWxXaXphcmR9CisJICovCisJcHVibGljIHN0YXRpYyBjbGFzcyBOZXdQb3B1bGF0aW9uSW5pdGlhbGl6ZXJXaXphcmRDb21tYW5kSGFuZGxlciBleHRlbmRzIEFic3RyYWN0SGFuZGxlcgorCQkJaW1wbGVtZW50cyBJSGFuZGxlciB7CisKKwkJLyoqCisJCSAqIEBzZWUgb3JnLmVjbGlwc2UuY29yZS5jb21tYW5kcy5BYnN0cmFjdEhhbmRsZXIjZXhlY3V0ZShvcmcuZWNsaXBzZS5jb3JlLmNvbW1hbmRzLkV4ZWN1dGlvbkV2ZW50KQorCQkgKi8KKwkJcHVibGljIE9iamVjdCBleGVjdXRlKGZpbmFsIEV4ZWN1dGlvbkV2ZW50IGV4ZWN1dGlvbkV2ZW50KQorCQkJCXRocm93cyBFeGVjdXRpb25FeGNlcHRpb24geworCQkJZmluYWwgSVdvcmtiZW5jaFdpbmRvdyB3aW5kb3cgPSBIYW5kbGVyVXRpbAorCQkJCQkuZ2V0QWN0aXZlV29ya2JlbmNoV2luZG93Q2hlY2tlZChleGVjdXRpb25FdmVudCk7CisJCQlmaW5hbCBOZXdQb3B1bGF0aW9uSW5pdGlhbGl6ZXJXaXphcmQgd2l6YXJkID0gbmV3IE5ld1BvcHVsYXRpb25Jbml0aWFsaXplcldpemFyZCgpOworCQkJd2l6YXJkLmluaXQod2luZG93LmdldFdvcmtiZW5jaCgpLCBTdHJ1Y3R1cmVkU2VsZWN0aW9uLkVNUFRZKTsKKwkJCWZpbmFsIFdpemFyZERpYWxvZyB3aXphcmREaWFsb2cgPSBuZXcgU1RFTVdpemFyZERpYWxvZyh3aW5kb3cKKwkJCQkJLmdldFNoZWxsKCksIHdpemFyZCk7CisJCQl3aXphcmREaWFsb2cub3BlbigpOworCQkJcmV0dXJuIG51bGw7CisJCX0gLy8gZXhlY3V0ZQorCX0gLy8gTmV3RGlzZWFzZVdpemFyZENvbW1hbmRIYW5kbGVyCit9IC8vIE5ld0Rpc2Vhc2VXaXphcmQKZGlmZiAtLWdpdCBhL21vZGVscy9wb3B1bGF0aW9ucy9vcmcuZWNsaXBzZS5zdGVtLnVpLnBvcHVsYXRpb25tb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvcG9wdWxhdGlvbm1vZGVscy9zdGFuZGFyZC93aXphcmRzL05ld1BvcHVsYXRpb25Nb2RlbFdpemFyZC5qYXZhIGIvbW9kZWxzL3BvcHVsYXRpb25zL29yZy5lY2xpcHNlLnN0ZW0udWkucG9wdWxhdGlvbm1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9wb3B1bGF0aW9ubW9kZWxzL3N0YW5kYXJkL3dpemFyZHMvTmV3UG9wdWxhdGlvbk1vZGVsV2l6YXJkLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmNkNzM3ZgotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9wb3B1bGF0aW9ucy9vcmcuZWNsaXBzZS5zdGVtLnVpLnBvcHVsYXRpb25tb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvcG9wdWxhdGlvbm1vZGVscy9zdGFuZGFyZC93aXphcmRzL05ld1BvcHVsYXRpb25Nb2RlbFdpemFyZC5qYXZhCkBAIC0wLDAgKzEsMTk4IEBACisvLyBOZXdEaXNlYXNlV2l6YXJkLmphdmEKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS51aS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLndpemFyZHM7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDcsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5jb21tYW5kcy5BYnN0cmFjdEhhbmRsZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5jb21tYW5kcy5FeGVjdXRpb25FdmVudDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLmNvbW1hbmRzLkV4ZWN1dGlvbkV4Y2VwdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLmNvbW1hbmRzLklIYW5kbGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuU3RydWN0dXJlZFNlbGVjdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS53aXphcmQuV2l6YXJkRGlhbG9nOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5TVEVNVVJJOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uRHVibGluQ29yZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLklkZW50aWZpYWJsZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuUG9wdWxhdGlvbk1vZGVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZFBhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS51aS53aXphcmRzLkR1YmxpbkNvcmVQYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udWkud2l6YXJkcy5OZXdJZGVudGlmaWFibGVQYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udWkud2l6YXJkcy5OZXdJZGVudGlmaWFibGVXaXphcmQ7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS51aS53aXphcmRzLk5ld1NURU1Qcm9qZWN0V2l6YXJkOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udWkud2l6YXJkcy5TVEVNV2l6YXJkRGlhbG9nOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5TV1Q7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2hXaW5kb3c7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuaGFuZGxlcnMuSGFuZGxlclV0aWw7CisKKy8qKgorICogVGhpcyBjbGFzcyBpcyBhIFdpemFyZCBmb3IgbWFraW5nIG5ldyBTVEVNIHtAbGluayBEaXNlYXNlTW9kZWx9IGluc3RhbmNlcy4KKyAqLworcHVibGljIGNsYXNzIE5ld1BvcHVsYXRpb25Nb2RlbFdpemFyZCBleHRlbmRzIE5ld0lkZW50aWZpYWJsZVdpemFyZCB7CisKKwlwcml2YXRlIE5ld1BvcHVsYXRpb25Nb2RlbFBhZ2UgbmRwID0gbnVsbDsKKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS51aS53aXphcmRzLk5ld0lkZW50aWZpYWJsZVdpemFyZCNnZXRXaXphcmRUaXRsZSgpCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIFN0cmluZyBnZXRXaXphcmRUaXRsZSgpIHsKKwkJcmV0dXJuIFBvcHVsYXRpb25Nb2RlbFdpemFyZE1lc3NhZ2VzLmdldFN0cmluZygiTlBvcHVsYXRpb25Nb2RlbFdpei53aXphcmRfdGl0bGUiKTsgLy8kTk9OLU5MUy0xJAorCX0KKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS51aS53aXphcmRzLk5ld0lkZW50aWZpYWJsZVdpemFyZCNjcmVhdGVOZXdJZGVudGlmaWFibGVQYWdlKCkKKwkgKi8KKwlAU3VwcHJlc3NXYXJuaW5ncygibmxzIikKKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgTmV3SWRlbnRpZmlhYmxlUGFnZSBjcmVhdGVOZXdJZGVudGlmaWFibGVQYWdlKCkgeworCQluZHAgPSBuZXcgTmV3UG9wdWxhdGlvbk1vZGVsUGFnZShQb3B1bGF0aW9uTW9kZWxXaXphcmRNZXNzYWdlcworCQkJCS5nZXRTdHJpbmcoIk5Qb3B1bGF0aW9uTW9kZWxXaXoucGFnZV90aXRsZSIpLCB0aGlzKTsgLy8kTk9OLU5MUy0xJAorCQluZHAuc2V0VGl0bGUoUG9wdWxhdGlvbk1vZGVsV2l6YXJkTWVzc2FnZXMuZ2V0U3RyaW5nKCJOUG9wdWxhdGlvbk1vZGVsV2l6LnBhZ2VfdGl0bGUiKSk7IC8vJE5PTi1OTFMtMSQKKwkJbmRwLnNldERlc2NyaXB0aW9uKFBvcHVsYXRpb25Nb2RlbFdpemFyZE1lc3NhZ2VzCisJCQkJLmdldFN0cmluZygiTlBvcHVsYXRpb25Nb2RlbFdpei5wYWdlX2Rlc2NyaXB0aW9uIikpOyAKKwkJdGhpcy5zZXRIZWxwQ29udGV4dElkKCJvcmcuZWNsaXBzZS5zdGVtLmRvYy5uZXdwb3B1bGF0aW9uX2NvbnRleHRpZCIpOworCQlyZXR1cm4gbmRwOworCX0gLy8gY3JlYXRlTmV3SWRlbnRpZmlhYmxlUGFnZQorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnVpLndpemFyZHMuTmV3SWRlbnRpZmlhYmxlV2l6YXJkI2NyZWF0ZUR1YmxpbkNvcmVQYWdlKCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgRHVibGluQ29yZVBhZ2UgY3JlYXRlRHVibGluQ29yZVBhZ2UoKSB7CisJCXJldHVybiBuZXcgRHVibGluQ29yZVBhZ2UoKSB7CisJCQkvKioKKwkJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS51aS53aXphcmRzLk5ld0lkZW50aWZpYWJsZVdpemFyZC5EdWJsaW5Db3JlUGFnZSNpbml0aWFsaXplRENGaWVsZHMoKQorCQkJICovCisJCQlAT3ZlcnJpZGUKKwkJCXByb3RlY3RlZCB2b2lkIGluaXRpYWxpemVEQ0F0dHJpYnV0ZXMoKSB7CisJCQkJc3VwZXIuaW5pdGlhbGl6ZURDQXR0cmlidXRlcygpOworCQkJCWZvcm1hdC5zZXRUZXh0KFN0YW5kYXJkUGFja2FnZS5lTlNfVVJJKTsKKwkJCQlmb3JtYXQuc2V0RW5hYmxlZChmYWxzZSk7CisJCQkJdHlwZS5zZXRUZXh0KFNURU1VUkkuY3JlYXRlVHlwZVVSSSgKKwkJCQkJCVBvcHVsYXRpb25Nb2RlbC5VUklfVFlQRV9QT1BVTEFUSU9OTU9ERUxfU0VHTUVOVCkudG9TdHJpbmcoKSk7CisJCQkJdHlwZS5zZXRFbmFibGVkKGZhbHNlKTsKKwkJCQkKKwkJCQkvLyBKSEsgZ2V0IHRoZSBwcmVzZXQgRHVibGluIENvcmUgZmllbGRzIGZyb20gdGhlIHBsdWdpbi54bWwKKwkJCQlmaW5hbCBQb3B1bGF0aW9uTW9kZWwgcG9wdWxhdGlvbk1vZGVsID0gbmRwLmdldFNlbGVjdGVkUG9wdWxhdGlvbk1vZGVsKCk7CisJCQkJRHVibGluQ29yZSBwbHVnZ2luRHVibGluQ29yZSA9IHBvcHVsYXRpb25Nb2RlbC5nZXREdWJsaW5Db3JlKCk7CisJCQkJdGhpcy51cGRhdGVEdWJsaW5Db3JlUGFnZShwbHVnZ2luRHVibGluQ29yZSk7CisJCQkJCisJCQl9CisJCX07IC8vIER1YmxpbkNvcmVQYWdlCisJfSAvLyBjcmVhdGVEdWJsaW5Db3JlUGFnZQorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnVpLndpemFyZHMuTmV3SWRlbnRpZmlhYmxlV2l6YXJkI2NyZWF0ZUlkZW50aWZpYWJsZSgpCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIElkZW50aWZpYWJsZSBjcmVhdGVJZGVudGlmaWFibGUoKSB7CisJCWZpbmFsIFBvcHVsYXRpb25Nb2RlbCByZXRWYWx1ZSA9IG5kcC5nZXRTZWxlY3RlZFBvcHVsYXRpb25Nb2RlbCgpOworCQlyZXRWYWx1ZS5zZXREdWJsaW5Db3JlKG5ld0R1YmxpbkNvcmVQYWdlLmNyZWF0ZUR1YmxpbkNvcmUoKSk7CisJCXJldHVybiByZXRWYWx1ZTsKKwl9IC8vIGNyZWF0ZVNwZWNpZmljSWRlbnRpZmlhYmxlCisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0udWkud2l6YXJkcy5OZXdJZGVudGlmaWFibGVXaXphcmQjZ2V0U2VyaWFsaXphdGlvbkZvbGRlck5hbWUoKQorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCBTdHJpbmcgZ2V0U2VyaWFsaXphdGlvbkZvbGRlck5hbWUoKSB7CisJCXJldHVybiBOZXdTVEVNUHJvamVjdFdpemFyZC5ERUNPUkFUT1JTX0ZPTERFUl9OQU1FOworCX0KKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS51aS53aXphcmRzLk5ld0lkZW50aWZpYWJsZVdpemFyZCNnZXRTZXJpYWxpemF0aW9uRmlsZU5hbWVFeHRlbnNpb24oKQorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCBTdHJpbmcgZ2V0U2VyaWFsaXphdGlvbkZpbGVOYW1lRXh0ZW5zaW9uKCkgeworCQlyZXR1cm4gU3RhbmRhcmRQYWNrYWdlLmVOQU1FOworCX0gLy8gZ2V0SWRlbnRpZmlhYmxlU2VyaWFsaXphdGlvbkZpbGVFeHRlbnNpb24KKworCXByb3RlY3RlZCBzdGF0aWMgY2xhc3MgTmV3UG9wdWxhdGlvbk1vZGVsUGFnZSBleHRlbmRzIE5ld0lkZW50aWZpYWJsZVBhZ2UgeworCisJCVBvcHVsYXRpb25Nb2RlbERlZmluaXRpb25Db250cm9sIGRkYyA9IG51bGw7CisJCQorCQkKKwkJTmV3UG9wdWxhdGlvbk1vZGVsV2l6YXJkIHBhcmVudFdpemFyZCA9IG51bGw7CisKKwkJCisKKwkJLyoqCisJCSAqIEBwYXJhbSBwYWdlTmFtZQorCQkgKi8KKwkJcHJvdGVjdGVkIE5ld1BvcHVsYXRpb25Nb2RlbFBhZ2UoZmluYWwgU3RyaW5nIHBhZ2VOYW1lLCBOZXdQb3B1bGF0aW9uTW9kZWxXaXphcmQgbmV3UG9wdWxhdGlvbldpemFyZCkgeworCQkJc3VwZXIocGFnZU5hbWUpOworCQkJcGFyZW50V2l6YXJkID0gbmV3UG9wdWxhdGlvbldpemFyZDsKKwkJfQorCisJCS8qKgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0udWkud2l6YXJkcy5OZXdJZGVudGlmaWFibGVXaXphcmQuTmV3SWRlbnRpZmlhYmxlUGFnZSNnZXREQ0Rlc2NyaXB0aW9uKCkKKwkJICovCisJCUBPdmVycmlkZQorCQlwcm90ZWN0ZWQgU3RyaW5nIGdldERDRGVzY3JpcHRpb24oKSB7CisJCQkvLyBMZWF2ZSBkZXNjcmlwdGlvbi90aXRsZSBibGFuaworCQkJcmV0dXJuICIiOworLy8JCQlyZXR1cm4gTWVzc2FnZUZvcm1hdC5mb3JtYXQoUG9wdWxhdGlvbk1vZGVsV2l6YXJkTWVzc2FnZXMKKy8vCQkJCQkuZ2V0U3RyaW5nKCJOUG9wdWxhdGlvbldpei5EQ19ERVNDUklQVElPTiIpLCAvLyROT04tTkxTLTEkCisvLwkJCQkJbmV3IE9iamVjdFtdIHsgc2VyaWFsaXphdGlvbkZpbGVOYW1lRmllbGQuZ2V0VGV4dCgpIH0pOworCQl9IC8vIGdldERDRGVzY3JpcHRpb24KKworCQlAT3ZlcnJpZGUKKwkJcHJvdGVjdGVkIENvbXBvc2l0ZSBjcmVhdGVTcGVjaWZpY0NvbXBvc2l0ZShmaW5hbCBDb21wb3NpdGUgcGFyZW50KSB7CisJCQlkZGMgPSBuZXcgUG9wdWxhdGlvbk1vZGVsRGVmaW5pdGlvbkNvbnRyb2wocGFyZW50LCBTV1QuTk9ORSwKKwkJCQkJcHJvamVjdFZhbGlkYXRvciwgc3VwZXIuZ2V0U2VsZWN0ZWRQcm9qZWN0KCksIHBhcmVudFdpemFyZCk7CisJCQlyZXR1cm4gZGRjOworCQl9IC8vIGNyZWF0ZVNwZWNpZmljQ29tcG9zaXRlCisKKwkJQE92ZXJyaWRlCisJCXByb3RlY3RlZCBib29sZWFuIHZhbGlkYXRlUGFnZSgpIHsKKwkJCWJvb2xlYW4gcmV0VmFsdWUgPSBzdXBlci52YWxpZGF0ZVBhZ2UoKTsKKwkJCWlmIChyZXRWYWx1ZSkgeworCQkJCXNldEVycm9yTWVzc2FnZShudWxsKTsKKwkJCQlyZXRWYWx1ZSA9IGRkYy52YWxpZGF0ZSgpOworCQkJCS8vIEVycm9yPworCQkJCWlmICghcmV0VmFsdWUpIHsKKwkJCQkJLy8gWWVzCisJCQkJCXNldEVycm9yTWVzc2FnZShkZGMuZ2V0RXJyb3JNZXNzYWdlKCkpOworCQkJCX0gLy8gaWYKKwkJCX0KKwkJCXJldHVybiByZXRWYWx1ZTsKKwkJfSAvLyB2YWxpZGF0ZVBhZ2UKKworCQlQb3B1bGF0aW9uTW9kZWwgZ2V0U2VsZWN0ZWRQb3B1bGF0aW9uTW9kZWwoKSB7CisJCQlyZXR1cm4gZGRjLmdldFNlbGVjdGVkUG9wdWxhdGlvbk1vZGVsKCk7CisJCX0gLy8gZ2V0U2VsZWN0ZWREaXNlYXNlTW9kZWwKKworCX0gLy8gTmV3RGlzZWFzZVBhZ2UKKworCS8qKgorCSAqIFRoaXMgY2xhc3MgaXMgYSB7QGxpbmsgSUhhbmRsZXJ9IGZvciB0aGUgY29tbWFuZCB0aGF0IGNyZWF0ZXMgYQorCSAqIHtAbGluayBOZXdQb3B1bGF0aW9uTW9kZWxXaXphcmR9CisJICovCisJcHVibGljIHN0YXRpYyBjbGFzcyBOZXdQb3B1bGF0aW9uTW9kZWxXaXphcmRDb21tYW5kSGFuZGxlciBleHRlbmRzIEFic3RyYWN0SGFuZGxlcgorCQkJaW1wbGVtZW50cyBJSGFuZGxlciB7CisKKwkJLyoqCisJCSAqIEBzZWUgb3JnLmVjbGlwc2UuY29yZS5jb21tYW5kcy5BYnN0cmFjdEhhbmRsZXIjZXhlY3V0ZShvcmcuZWNsaXBzZS5jb3JlLmNvbW1hbmRzLkV4ZWN1dGlvbkV2ZW50KQorCQkgKi8KKwkJcHVibGljIE9iamVjdCBleGVjdXRlKGZpbmFsIEV4ZWN1dGlvbkV2ZW50IGV4ZWN1dGlvbkV2ZW50KQorCQkJCXRocm93cyBFeGVjdXRpb25FeGNlcHRpb24geworCQkJZmluYWwgSVdvcmtiZW5jaFdpbmRvdyB3aW5kb3cgPSBIYW5kbGVyVXRpbAorCQkJCQkuZ2V0QWN0aXZlV29ya2JlbmNoV2luZG93Q2hlY2tlZChleGVjdXRpb25FdmVudCk7CisJCQlmaW5hbCBOZXdQb3B1bGF0aW9uTW9kZWxXaXphcmQgd2l6YXJkID0gbmV3IE5ld1BvcHVsYXRpb25Nb2RlbFdpemFyZCgpOworCQkJd2l6YXJkLmluaXQod2luZG93LmdldFdvcmtiZW5jaCgpLCBTdHJ1Y3R1cmVkU2VsZWN0aW9uLkVNUFRZKTsKKwkJCWZpbmFsIFdpemFyZERpYWxvZyB3aXphcmREaWFsb2cgPSBuZXcgU1RFTVdpemFyZERpYWxvZyh3aW5kb3cKKwkJCQkJLmdldFNoZWxsKCksIHdpemFyZCk7CisJCQl3aXphcmREaWFsb2cub3BlbigpOworCQkJcmV0dXJuIG51bGw7CisJCX0gLy8gZXhlY3V0ZQorCX0gLy8gTmV3RGlzZWFzZVdpemFyZENvbW1hbmRIYW5kbGVyCit9IC8vIE5ld0Rpc2Vhc2VXaXphcmQKZGlmZiAtLWdpdCBhL21vZGVscy9wb3B1bGF0aW9ucy9vcmcuZWNsaXBzZS5zdGVtLnVpLnBvcHVsYXRpb25tb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvcG9wdWxhdGlvbm1vZGVscy9zdGFuZGFyZC93aXphcmRzL1BvcHVsYXRpb25Jbml0aWFsaXplckRlZmluaXRpb25Db250cm9sLmphdmEgYi9tb2RlbHMvcG9wdWxhdGlvbnMvb3JnLmVjbGlwc2Uuc3RlbS51aS5wb3B1bGF0aW9ubW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3BvcHVsYXRpb25tb2RlbHMvc3RhbmRhcmQvd2l6YXJkcy9Qb3B1bGF0aW9uSW5pdGlhbGl6ZXJEZWZpbml0aW9uQ29udHJvbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY1OWQ2OWUKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvcG9wdWxhdGlvbnMvb3JnLmVjbGlwc2Uuc3RlbS51aS5wb3B1bGF0aW9ubW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3BvcHVsYXRpb25tb2RlbHMvc3RhbmRhcmQvd2l6YXJkcy9Qb3B1bGF0aW9uSW5pdGlhbGl6ZXJEZWZpbml0aW9uQ29udHJvbC5qYXZhCkBAIC0wLDAgKzEsMjY0IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0udWkucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC53aXphcmRzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDEwIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQ29yZUV4Y2VwdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSUNvbmZpZ3VyYXRpb25FbGVtZW50OworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JRXh0ZW5zaW9uUmVnaXN0cnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBsYXRmb3JtOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5VUkk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnV0aWwuRWNvcmVVdGlsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uRHVibGluQ29yZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuUG9wdWxhdGlvbkluaXRpYWxpemVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udWkuQWN0aXZhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udWkud2lkZ2V0cy5Mb2NhdGlvblBpY2tlckRpYWxvZzsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuU1dUOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuTW9kaWZ5TGlzdGVuZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5TZWxlY3Rpb25BZGFwdGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuU2VsZWN0aW9uRXZlbnQ7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5TZWxlY3Rpb25MaXN0ZW5lcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QubGF5b3V0LkdyaWREYXRhOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5sYXlvdXQuR3JpZExheW91dDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5CdXR0b247CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tYm87CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkxhYmVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLlBsYXRmb3JtVUk7CisKKy8qKgorICogVGhpcyBjbGFzcyByZXByZXNlbnRzIHRoZSBTV1QgY29udHJvbCBmb3IgZGVmaW5pbmcgYSBkaXNlYXNlLgorICovCitwdWJsaWMgY2xhc3MgUG9wdWxhdGlvbkluaXRpYWxpemVyRGVmaW5pdGlvbkNvbnRyb2wgZXh0ZW5kcyBDb21wb3NpdGUgeworCisJcHJpdmF0ZSBzdGF0aWMgUG9wdWxhdGlvbkluaXRpYWxpemVyW10gcG9wdWxhdGlvbkluaXRpYWxpemVycyA9IG51bGw7CisKKwlwcml2YXRlIGZpbmFsIENvbWJvIGNvbWJvOworCisJcHJpdmF0ZSBmaW5hbCBQb3B1bGF0aW9uSW5pdGlhbGl6ZXJQcm9wZXJ0eUNvbXBvc2l0ZSBwb3B1bGF0aW9uSW5pdGlhbGl6ZXJQcm9wZXJ0eUNvbXBvc2l0ZTsKKworCXByaXZhdGUgU3RyaW5nIGlzb0tleT0iIjsKKwkKKwlwcml2YXRlIFVSSSB0YXJnZXRVUkkgPSBudWxsOworCQorCisJcHJpdmF0ZSBOZXdQb3B1bGF0aW9uSW5pdGlhbGl6ZXJXaXphcmQgbmV3UG9wdWxhdGlvbkluaXRpYWxpemVyV2l6YXJkOworCQorCS8qKgorCSAqIENyZWF0ZSB0aGUgY29tcG9zaXRlCisJICogCisJICogQHBhcmFtIHBhcmVudAorCSAqIEBwYXJhbSBzdHlsZQorCSAqIEBwYXJhbSBwcm9qZWN0VmFsaWRhdG9yCisJICovCisJcHVibGljIFBvcHVsYXRpb25Jbml0aWFsaXplckRlZmluaXRpb25Db250cm9sKGZpbmFsIENvbXBvc2l0ZSBwYXJlbnQsIGZpbmFsIGludCBzdHlsZSwKKwkJCU1vZGlmeUxpc3RlbmVyIHByb2plY3RWYWxpZGF0b3IsIGZpbmFsIElQcm9qZWN0IHByb2plY3QsIE5ld1BvcHVsYXRpb25Jbml0aWFsaXplcldpemFyZCBucGl3eikgeworCQlzdXBlcihwYXJlbnQsIHN0eWxlKTsKKwkJbmV3UG9wdWxhdGlvbkluaXRpYWxpemVyV2l6YXJkID0gbnBpd3o7CisJCQorCQlmaW5hbCBHcmlkTGF5b3V0IGdyaWRMYXlvdXQgPSBuZXcgR3JpZExheW91dCgpOworCQlncmlkTGF5b3V0Lm1hcmdpbldpZHRoID0gMDsKKwkJZ3JpZExheW91dC5udW1Db2x1bW5zID0gMjsKKwkJc2V0TGF5b3V0KGdyaWRMYXlvdXQpOworCisJCWZpbmFsIExhYmVsIHBvcHVsYXRpb25Jbml0aWFsaXplckxhYmVsID0gbmV3IExhYmVsKHRoaXMsIFNXVC5OT05FKTsKKwkJZmluYWwgR3JpZERhdGEgZ2RfcG9wdWxhdGlvbkluaXRpYWxpemVyTGFiZWwgPSBuZXcgR3JpZERhdGEoU1dULkZJTEwsIFNXVC5DRU5URVIsIHRydWUsIGZhbHNlKTsKKwkJZ2RfcG9wdWxhdGlvbkluaXRpYWxpemVyTGFiZWwud2lkdGhIaW50ID0gMTAwOworCQlwb3B1bGF0aW9uSW5pdGlhbGl6ZXJMYWJlbC5zZXRMYXlvdXREYXRhKGdkX3BvcHVsYXRpb25Jbml0aWFsaXplckxhYmVsKTsKKwkJcG9wdWxhdGlvbkluaXRpYWxpemVyTGFiZWwuc2V0VGV4dChQb3B1bGF0aW9uTW9kZWxXaXphcmRNZXNzYWdlcy5nZXRTdHJpbmcoIkREQy41IikpOyAvLyROT04tTkxTLTEkCisKKwkJY29tYm8gPSBuZXcgQ29tYm8odGhpcywgU1dULlJFQURfT05MWSk7CisJCWNvbWJvLnNldFRleHRMaW1pdCgzMCk7CisJCWZpbmFsIEdyaWREYXRhIGdkX2NvbWJvID0gbmV3IEdyaWREYXRhKFNXVC5GSUxMLCBTV1QuQ0VOVEVSLCB0cnVlLAorCQkJCWZhbHNlKTsKKwkJZ2RfY29tYm8ud2lkdGhIaW50ID0gMzAzOworCQljb21iby5zZXRMYXlvdXREYXRhKGdkX2NvbWJvKTsKKworCQljb21iby5zZXRUb29sVGlwVGV4dChQb3B1bGF0aW9uTW9kZWxXaXphcmRNZXNzYWdlcy5nZXRTdHJpbmcoIkREQy4xIikpOyAvLyROT04tTkxTLTEkCisJCS8vIEluaXRpYWxpemUgdGhlIGxpc3Qgb2YgZGlzZWFzZSBtb2RlbHMgYXZhaWxhYmxlCisJCWNvbWJvLnNldEl0ZW1zKGdldFBvcHVsYXRpb25Jbml0aWFsaXplck5hbWVzKGdldFBvcHVsYXRpb25Jbml0aWFsaXplcnMoKSkpOworCQljb21iby5zZWxlY3QoMCk7CisJCWNvbWJvLmFkZE1vZGlmeUxpc3RlbmVyKHByb2plY3RWYWxpZGF0b3IpOworCisJCQorCQlwb3B1bGF0aW9uSW5pdGlhbGl6ZXJQcm9wZXJ0eUNvbXBvc2l0ZSA9IG5ldyBQb3B1bGF0aW9uSW5pdGlhbGl6ZXJQcm9wZXJ0eUNvbXBvc2l0ZSh0aGlzLAorCQkJCVNXVC5OT05FLCBnZXRQb3B1bGF0aW9uSW5pdGlhbGl6ZXJzKCksIHByb2plY3RWYWxpZGF0b3IsIHByb2plY3QpOworCQlmaW5hbCBHcmlkRGF0YSBnZF9wb3B1bGF0aW9uSW5pdGlhbGl6ZXJQcm9wZXJ0eUNvbnRyb2wgPSBuZXcgR3JpZERhdGEoU1dULkZJTEwsCisJCQkJU1dULkNFTlRFUiwgdHJ1ZSwgZmFsc2UsIDIsIDEpOworCQlwb3B1bGF0aW9uSW5pdGlhbGl6ZXJQcm9wZXJ0eUNvbXBvc2l0ZQorCQkJCS5zZXRMYXlvdXREYXRhKGdkX3BvcHVsYXRpb25Jbml0aWFsaXplclByb3BlcnR5Q29udHJvbCk7CisKKwkJY29tYm8uYWRkU2VsZWN0aW9uTGlzdGVuZXIobmV3IFNlbGVjdGlvbkFkYXB0ZXIoKSB7CisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyB2b2lkIHdpZGdldFNlbGVjdGVkKFNlbGVjdGlvbkV2ZW50IGUpIHsKKwkJCQlwb3B1bGF0aW9uSW5pdGlhbGl6ZXJQcm9wZXJ0eUNvbXBvc2l0ZQorCQkJCQkJLmRpc3BsYXlQb3B1bGF0aW9uSW5pdGlhbGl6ZXIoZ2V0UG9wdWxhdGlvbkluaXRpYWxpemVycygpW2NvbWJvCisJCQkJCQkJCS5nZXRTZWxlY3Rpb25JbmRleCgpXSk7CisJCQkJCisJCQkJLy8gdXBkYXRlIHRoZSBkdWJsaW4gY29yZSBmcm9tIHRoZSBwbHVnaW4gZGVmYXVsdHMgZm9yIHRoZQorCQkJCS8vIG5ld2x5IHNlbGVjdGVkIGRpc2Vhc2UgbW9kZWw7CisJCQkJbmV3UG9wdWxhdGlvbkluaXRpYWxpemVyV2l6YXJkLm5ld0R1YmxpbkNvcmVQYWdlLnVwZGF0ZUR1YmxpbkNvcmVQYWdlKGdldFNlbGVjdGVkUG9wdWxhdGlvbkluaXRpYWxpemVyKCkuZ2V0RHVibGluQ29yZSgpKTsKKwkJCQkKKwkJCQkKKwkJCQkvLyBsYXlvdXQoKTsKKwkJCX0gLy8gd2lkZ2V0U2VsZWN0ZWQKKworCQl9KTsKKwkJLy9maW5hbCBQb3B1bGF0aW9uSW5pdGlhbGl6ZXJEZWZpbml0aW9uQ29udHJvbCBzZWxmID0gdGhpczsKKworCQkvLyBMb2NhdGlvbiBwaWNrZXIKKwkJLy8gSVNPIEtleQorCQlmaW5hbCBMYWJlbCBpc29LZXlMYWJlbCA9IG5ldyBMYWJlbCh0aGlzLCBTV1QuTk9ORSk7CisJCWlzb0tleUxhYmVsLnNldFRleHQoUG9wdWxhdGlvbk1vZGVsV2l6YXJkTWVzc2FnZXMuZ2V0U3RyaW5nKCJOUG9wV2l6SVNPSyIpKTsgLy8kTk9OLU5MUy0xJAorCQlmaW5hbCBHcmlkRGF0YSBnZF9pc29LZXlMYWJlbCA9IG5ldyBHcmlkRGF0YShTV1QuRklMTCwgU1dULkNFTlRFUiwgdHJ1ZSwgZmFsc2UpOworCQlpc29LZXlMYWJlbC5zZXRMYXlvdXREYXRhKGdkX2lzb0tleUxhYmVsKTsKKwkJCisJCWZpbmFsIExhYmVsIGlzb2tleVZhbHVlTGFiZWwgPSBuZXcgTGFiZWwodGhpcywgU1dULk5PTkUpOworCQlpc29rZXlWYWx1ZUxhYmVsLnNldFRleHQoaXNvS2V5KTsKKworCQlmaW5hbCBHcmlkRGF0YSBnZF9pc29LZXlMYWJlbFZhbHVlID0gbmV3IEdyaWREYXRhKFNXVC5GSUxMLCBTV1QuQ0VOVEVSLCB0cnVlLCBmYWxzZSk7CisJCWlzb2tleVZhbHVlTGFiZWwuc2V0TGF5b3V0RGF0YShnZF9pc29LZXlMYWJlbFZhbHVlKTsKKwkJCisJCWZpbmFsIEJ1dHRvbiBsb2NhdGlvbkJ1dHRvbiA9IG5ldyBCdXR0b24odGhpcywgU1dULk5PTkUpOworCQlsb2NhdGlvbkJ1dHRvbi5zZXRUZXh0KFBvcHVsYXRpb25Nb2RlbFdpemFyZE1lc3NhZ2VzLmdldFN0cmluZygiTlBvcFdpelBpY2tMb2MiKSk7CisJCWZpbmFsIEdyaWREYXRhIGxiX2lzb0tleUxhYmVsID0gbmV3IEdyaWREYXRhKFNXVC5GSUxMLCBTV1QuQ0VOVEVSLCB0cnVlLCBmYWxzZSk7CisJCWxvY2F0aW9uQnV0dG9uLnNldExheW91dERhdGEobGJfaXNvS2V5TGFiZWwpOworCQkKKwkJbG9jYXRpb25CdXR0b24uYWRkU2VsZWN0aW9uTGlzdGVuZXIobmV3IFNlbGVjdGlvbkxpc3RlbmVyKCkgeworCQkJCisJCQlwdWJsaWMgdm9pZCB3aWRnZXRTZWxlY3RlZChTZWxlY3Rpb25FdmVudCBhcmcwKSB7CisJCQkJTG9jYXRpb25QaWNrZXJEaWFsb2cgbHBEaWFsb2cgPSBuZXcgTG9jYXRpb25QaWNrZXJEaWFsb2coUG9wdWxhdGlvbkluaXRpYWxpemVyRGVmaW5pdGlvbkNvbnRyb2wudGhpcy5nZXRTaGVsbCgpLCBTV1QuTk9ORSwgUG9wdWxhdGlvbk1vZGVsV2l6YXJkTWVzc2FnZXMuZ2V0U3RyaW5nKCJOUG9wV2l6UGlja0xvY1RpdGxlIiksIFBvcHVsYXRpb25Jbml0aWFsaXplckRlZmluaXRpb25Db250cm9sLnRoaXMuaXNvS2V5LCBwcm9qZWN0KTsKKwkJCQlPYmplY3QgW10gcmV0ID0gbHBEaWFsb2cub3BlbigpOworCQkJCWlmKHJldCAhPSBudWxsKSB7CisJCQkJCWlzb2tleVZhbHVlTGFiZWwuc2V0VGV4dCgoU3RyaW5nKXJldFswXSk7CisJCQkJCWlzb0tleSA9IChTdHJpbmcpcmV0WzBdOworCQkJCQl0YXJnZXRVUkkgPSAoVVJJKXJldFsxXTsKKwkJCQl9CisJCQl9CisJCQkKKwkJCXB1YmxpYyB2b2lkIHdpZGdldERlZmF1bHRTZWxlY3RlZChTZWxlY3Rpb25FdmVudCBhcmcwKSB7CisJCQkJCisJCQl9CisJCX0pOworCQkKKwkJUGxhdGZvcm1VSS5nZXRXb3JrYmVuY2goKS5nZXRIZWxwU3lzdGVtKCkuc2V0SGVscChwYXJlbnQsICJvcmcuZWNsaXBzZS5zdGVtLmRvYy5uZXdwb3B1bGF0aW9uaW5pdGlhbGl6ZXJfY29udGV4dGlkIik7CisKKwl9IC8vIERpc2Vhc2VEZWZpbml0aW9uQ29udHJvbAorCisJLyoqCisJICogQHJldHVybiBhbiBhcnJheSBvZiB0aGUge0BsaW5rIERpc2Vhc2VNb2RlbHN9cyBkZWZpbmVkIGluIHRoZSBzeXN0ZW0uCisJICovCisJcHJpdmF0ZSBQb3B1bGF0aW9uSW5pdGlhbGl6ZXJbXSBnZXRQb3B1bGF0aW9uSW5pdGlhbGl6ZXJzKCkgeworCQlpZiAocG9wdWxhdGlvbkluaXRpYWxpemVycyA9PSBudWxsKSB7CisJCQlmaW5hbCBJRXh0ZW5zaW9uUmVnaXN0cnkgcmVnaXN0cnkgPSBQbGF0Zm9ybS5nZXRFeHRlbnNpb25SZWdpc3RyeSgpOworCQkJZmluYWwgSUNvbmZpZ3VyYXRpb25FbGVtZW50W10gcG9wdWxhdGlvbkluaXRpYWxpemVyQ29uZmlnRWxlbWVudHMgPSByZWdpc3RyeQorCQkJCQkuZ2V0Q29uZmlndXJhdGlvbkVsZW1lbnRzRm9yKG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5Db25zdGFudHMuSURfUE9QVUxBVElPTl9JTklUSUFMSVpFUl9FWFRFTlNJT05fUE9JTlQpOworCisJCQlmaW5hbCBMaXN0PFBvcHVsYXRpb25Jbml0aWFsaXplcj4gdGVtcCA9IG5ldyBBcnJheUxpc3Q8UG9wdWxhdGlvbkluaXRpYWxpemVyPigpOworCisJCQlwb3B1bGF0aW9uSW5pdGlhbGl6ZXJzID0gbmV3IFBvcHVsYXRpb25Jbml0aWFsaXplcltwb3B1bGF0aW9uSW5pdGlhbGl6ZXJDb25maWdFbGVtZW50cy5sZW5ndGhdOworCisJCQlmb3IgKGludCBpID0gMDsgaSA8IHBvcHVsYXRpb25Jbml0aWFsaXplckNvbmZpZ0VsZW1lbnRzLmxlbmd0aDsgaSsrKSB7CisJCQkJZmluYWwgSUNvbmZpZ3VyYXRpb25FbGVtZW50IGVsZW1lbnQgPSBwb3B1bGF0aW9uSW5pdGlhbGl6ZXJDb25maWdFbGVtZW50c1tpXTsKKwkJCQkvLyBEb2VzIHRoZSBlbGVtZW50IHNwZWNpZnkgdGhlIGNsYXNzIG9mIHRoZSBwb3B1bGF0aW9uIG1vZGVsPworCQkJCWlmIChlbGVtZW50LmdldE5hbWUoKS5lcXVhbHMob3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLkNvbnN0YW50cy5QT1BVTEFUSU9OX0lOSVRJQUxJWkVSX0VMRU1FTlQpKSB7CisJCQkJCS8vIFllcworCQkJCQl0cnkgeworCQkJCQkJdGVtcC5hZGQoKFBvcHVsYXRpb25Jbml0aWFsaXplcikgZWxlbWVudAorCQkJCQkJCQkuY3JlYXRlRXhlY3V0YWJsZUV4dGVuc2lvbigiY2xhc3MiKSk7IC8vJE5PTi1OTFMtMSQKKwkJCQkJfSBjYXRjaCAoZmluYWwgQ29yZUV4Y2VwdGlvbiBlKSB7CisJCQkJCQlBY3RpdmF0b3IubG9nRXJyb3IoCisJCQkJCQkJCVBvcHVsYXRpb25Nb2RlbFdpemFyZE1lc3NhZ2VzLmdldFN0cmluZygiRERDLjQiKSwgZSk7IC8vJE5PTi1OTFMtMSQKKwkJCQkJfQorCQkJCX0gLy8gaWYKKwkJCX0gLy8gZm9yIGVhY2ggY29uZmlndXJhdGlvbiBlbGVtZW50CisKKwkJCXBvcHVsYXRpb25Jbml0aWFsaXplcnMgPSB0ZW1wLnRvQXJyYXkobmV3IFBvcHVsYXRpb25Jbml0aWFsaXplcltdIHt9KTsKKwkJfSAvLyBpZiBwb3B1bGF0aW9uTW9kZWxzIG5vdCBjcmVhdGVkCisJCQorCQkvLyBub3cgdXBkYXRlIHRoZSBkdWJsaW4gY29yZXMgd2l0aCB0aGUgZGVmYXVsdCBwbHVnaW4ueG1sIGluZm8KKwkJZm9yKFBvcHVsYXRpb25Jbml0aWFsaXplciBwb3B1bGF0aW9uSW5pdGlhbGl6ZXI6IHBvcHVsYXRpb25Jbml0aWFsaXplcnMpIHsKKwkJCWlmKHBvcHVsYXRpb25Jbml0aWFsaXplciAhPSBudWxsKSB7CisJCQkJLy8gSkhLIGdldHRpbmcgREMgaW5mbyBmcm9tIHRoZSBwbHVnZ2luLnhtbAorCQkJCUR1YmxpbkNvcmUgZHVibGluQ29yZSA9IG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5BY3RpdmF0b3IuZ2V0UGx1Z2luRHVibGluQ29yZShwb3B1bGF0aW9uSW5pdGlhbGl6ZXIpOworCQkJCWlmKGR1YmxpbkNvcmUgIT0gbnVsbCkgeworCQkJCQlwb3B1bGF0aW9uSW5pdGlhbGl6ZXIuc2V0RHVibGluQ29yZShkdWJsaW5Db3JlKTsKKwkJCQl9CisJCQl9CisJCX0KKworCQlyZXR1cm4gcG9wdWxhdGlvbkluaXRpYWxpemVyczsKKwl9IC8vIGdldFBvcHVsYXRpb25Nb2RlbHMKKworCS8qKgorCSAqIEByZXR1cm4gdGhlIG5hbWVzIG9mIHRoZSBkaXNlYXNlIG1vZGVscworCSAqLworCXByaXZhdGUgU3RyaW5nW10gZ2V0UG9wdWxhdGlvbkluaXRpYWxpemVyTmFtZXMoZmluYWwgUG9wdWxhdGlvbkluaXRpYWxpemVyW10gcG9wdWxhdGlvbk1vZGVscykgeworCQlmaW5hbCBTdHJpbmdbXSByZXRWYWx1ZSA9IG5ldyBTdHJpbmdbcG9wdWxhdGlvbkluaXRpYWxpemVycy5sZW5ndGhdOworCQlmb3IgKGludCBpID0gMDsgaSA8IHBvcHVsYXRpb25Jbml0aWFsaXplcnMubGVuZ3RoOyBpKyspIHsKKwkJCVN0cmluZyBuYW1lID0gcG9wdWxhdGlvbkluaXRpYWxpemVyc1tpXS5nZXREdWJsaW5Db3JlKCkuZ2V0VGl0bGUoKTsKKwkJCS8vIFdhcyBhIG5hbWUgc3BlY2lmaWVkPworCQkJaWYgKChuYW1lID09IG51bGwpIHx8IG5hbWUuZXF1YWxzKCIiKSkgeyAvLyROT04tTkxTLTEkCisJCQkJLy8gTm8KKwkJCQluYW1lID0gcG9wdWxhdGlvbkluaXRpYWxpemVyc1tpXS5nZXRDbGFzcygpLmdldFNpbXBsZU5hbWUoKTsKKwkJCX0gLy8gaWYKKworCQkJcmV0VmFsdWVbaV0gPSBuYW1lOworCQl9IC8vIGZvciBpCisJCXJldHVybiByZXRWYWx1ZTsKKwl9IC8vIGdldFBvcHVsYXRpb25Nb2RlbE5hbWVzCisKKwkKKwlQb3B1bGF0aW9uSW5pdGlhbGl6ZXIgZ2V0U2VsZWN0ZWRQb3B1bGF0aW9uSW5pdGlhbGl6ZXIoKSB7CisJCWZpbmFsIFBvcHVsYXRpb25Jbml0aWFsaXplciByZXRWYWx1ZSA9IChQb3B1bGF0aW9uSW5pdGlhbGl6ZXIpRWNvcmVVdGlsCisJCQkJLmNvcHkoZ2V0UG9wdWxhdGlvbkluaXRpYWxpemVycygpW2NvbWJvLmdldFNlbGVjdGlvbkluZGV4KCldKTsKKwkJcG9wdWxhdGlvbkluaXRpYWxpemVyUHJvcGVydHlDb21wb3NpdGUucG9wdWxhdGVQb3B1bGF0aW9uSW5pdGlhbGl6ZXIocmV0VmFsdWUpOworCQlyZXRWYWx1ZS5zZXRUYXJnZXRJU09LZXkodGhpcy5nZXRJc29LZXkoKSk7CisJCXJldHVybiByZXRWYWx1ZTsKKwl9IC8vIGdldFNlbGVjdGVkUG9wdWxhdGlvbk1vZGVsCisKKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBkaXNwb3NlKCkgeworCQlzdXBlci5kaXNwb3NlKCk7CisJfQorCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgY2hlY2tTdWJjbGFzcygpIHsKKwkJLy8gRGlzYWJsZSB0aGUgY2hlY2sgdGhhdCBwcmV2ZW50cyBzdWItY2xhc3Npbmcgb2YgU1dUIGNvbXBvbmVudHMKKwl9CisKKwkvKioKKwkgKiBAcmV0dXJuIDxjb2RlPnRydWU8L2NvZGU+IGlmIHRoZSBjb250ZW50cyBvZiB0aGUgY29udHJvbCBhcmUgdmFsaWQsCisJICogICAgICAgICA8Y29kZT5mYWxzZTwvY29kZT4gb3RoZXJ3aXNlLgorCSAqLworCXB1YmxpYyBib29sZWFuIHZhbGlkYXRlKCkgeworCQlyZXR1cm4gcG9wdWxhdGlvbkluaXRpYWxpemVyUHJvcGVydHlDb21wb3NpdGUudmFsaWRhdGUoKTsKKwl9IC8vIHZhbGlkYXRlCisKKwkvKioKKwkgKiBAcmV0dXJuIHRoZSBlcnJvciBtZXNzYWdlIHNldCBieSB7QGxpbmsgI3ZhbGlkYXRlKCl9CisJICovCisJcHVibGljIFN0cmluZyBnZXRFcnJvck1lc3NhZ2UoKSB7CisJCXJldHVybiBwb3B1bGF0aW9uSW5pdGlhbGl6ZXJQcm9wZXJ0eUNvbXBvc2l0ZS5nZXRFcnJvck1lc3NhZ2UoKTsKKwl9CisKKwlwdWJsaWMgU3RyaW5nIGdldElzb0tleSgpIHsKKwkJcmV0dXJuIGlzb0tleTsKKwl9CisJCisJcHVibGljIFVSSSBnZXRUYXJnZXRVUkkoKSB7CisJCXJldHVybiB0YXJnZXRVUkk7CisJfQorfSAKZGlmZiAtLWdpdCBhL21vZGVscy9wb3B1bGF0aW9ucy9vcmcuZWNsaXBzZS5zdGVtLnVpLnBvcHVsYXRpb25tb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvcG9wdWxhdGlvbm1vZGVscy9zdGFuZGFyZC93aXphcmRzL1BvcHVsYXRpb25Jbml0aWFsaXplclByb3BlcnR5Q29tcG9zaXRlLmphdmEgYi9tb2RlbHMvcG9wdWxhdGlvbnMvb3JnLmVjbGlwc2Uuc3RlbS51aS5wb3B1bGF0aW9ubW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3BvcHVsYXRpb25tb2RlbHMvc3RhbmRhcmQvd2l6YXJkcy9Qb3B1bGF0aW9uSW5pdGlhbGl6ZXJQcm9wZXJ0eUNvbXBvc2l0ZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYxMjBjOTkKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvcG9wdWxhdGlvbnMvb3JnLmVjbGlwc2Uuc3RlbS51aS5wb3B1bGF0aW9ubW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3BvcHVsYXRpb25tb2RlbHMvc3RhbmRhcmQvd2l6YXJkcy9Qb3B1bGF0aW9uSW5pdGlhbGl6ZXJQcm9wZXJ0eUNvbXBvc2l0ZS5qYXZhCkBAIC0wLDAgKzEsMTI5IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0udWkucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC53aXphcmRzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDEwIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOworaW1wb3J0IGphdmEudXRpbC5NYXA7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuUG9wdWxhdGlvbkluaXRpYWxpemVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udWkuQWN0aXZhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udWkucG9wdWxhdGlvbm1vZGVscy5hZGFwdGVycy5Qb3B1bGF0aW9uSW5pdGlhbGl6ZXJQcm9wZXJ0eUVkaXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnVpLnBvcHVsYXRpb25tb2RlbHMuYWRhcHRlcnMuUG9wdWxhdGlvbkluaXRpYWxpemVyUHJvcGVydHlFZGl0b3JBZGFwdGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udWkucG9wdWxhdGlvbm1vZGVscy5hZGFwdGVycy5Qb3B1bGF0aW9uSW5pdGlhbGl6ZXJQcm9wZXJ0eUVkaXRvckFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5TV1Q7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmN1c3RvbS5TdGFja0xheW91dDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLk1vZGlmeUxpc3RlbmVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5MYWJlbDsKKworLyoqCisgKiBUaGlzIGNsYXNzIHJlcHJlc2VudHMKKyAqLworcHVibGljIGNsYXNzIFBvcHVsYXRpb25Jbml0aWFsaXplclByb3BlcnR5Q29tcG9zaXRlIGV4dGVuZHMgQ29tcG9zaXRlIHsKKworCXByaXZhdGUgZmluYWwgTWFwPFBvcHVsYXRpb25Jbml0aWFsaXplciwgUG9wdWxhdGlvbkluaXRpYWxpemVyUHJvcGVydHlFZGl0b3I+IGluaXRpYWxpemVyTWFwID0gbmV3IEhhc2hNYXA8UG9wdWxhdGlvbkluaXRpYWxpemVyLCBQb3B1bGF0aW9uSW5pdGlhbGl6ZXJQcm9wZXJ0eUVkaXRvcj4oKTsKKworCXByaXZhdGUgU3RhY2tMYXlvdXQgc3RhY2tMYXlvdXQgPSBudWxsOworCisJLyoqCisJICogQ3JlYXRlIHRoZSBjb21wb3NpdGUKKwkgKiAKKwkgKiBAcGFyYW0gcGFyZW50CisJICogQHBhcmFtIHN0eWxlCisJICogQHBhcmFtIHByb2plY3RWYWxpZGF0b3IKKwkgKi8KKwlwdWJsaWMgUG9wdWxhdGlvbkluaXRpYWxpemVyUHJvcGVydHlDb21wb3NpdGUoZmluYWwgQ29tcG9zaXRlIHBhcmVudCwKKwkJCWZpbmFsIGludCBzdHlsZSwgZmluYWwgUG9wdWxhdGlvbkluaXRpYWxpemVyW10gcG9wdWxhdGlvbkluaXRpYWxpemVycywKKwkJCU1vZGlmeUxpc3RlbmVyIHByb2plY3RWYWxpZGF0b3IsIElQcm9qZWN0IHByb2plY3QpIHsKKwkJc3VwZXIocGFyZW50LCBzdHlsZSk7CisJCXN0YWNrTGF5b3V0ID0gbmV3IFN0YWNrTGF5b3V0KCk7CisJCXNldExheW91dChzdGFja0xheW91dCk7CisKKwkJTGFiZWwgbGFiZWw7CisJCWxhYmVsID0gbmV3IExhYmVsKHRoaXMsIFNXVC5OT05FKTsKKwkJbGFiZWwuc2V0VGV4dChQb3B1bGF0aW9uTW9kZWxXaXphcmRNZXNzYWdlcy5nZXRTdHJpbmcoIkRNUEMzIikpOyAvLyROT04tTkxTLTEkCisJCVBvcHVsYXRpb25Jbml0aWFsaXplclByb3BlcnR5RWRpdG9yIGZpcnN0T25lID0gbnVsbDsKKwkJLy8gQW55IGRpc2Vhc2UgbW9kZWxzPworCQlpZiAocG9wdWxhdGlvbkluaXRpYWxpemVycyAhPSBudWxsKSB7CisJCQkvLyBZZXMKKwkJCWZvciAoaW50IGkgPSAwOyBpIDwgcG9wdWxhdGlvbkluaXRpYWxpemVycy5sZW5ndGg7IGkrKykgeworCisJCQkJUG9wdWxhdGlvbkluaXRpYWxpemVyUHJvcGVydHlFZGl0b3JBZGFwdGVyIGRtcGVhID0gKFBvcHVsYXRpb25Jbml0aWFsaXplclByb3BlcnR5RWRpdG9yQWRhcHRlcikgUG9wdWxhdGlvbkluaXRpYWxpemVyUHJvcGVydHlFZGl0b3JBZGFwdGVyRmFjdG9yeS5JTlNUQU5DRQorCQkJCQkJLmFkYXB0KHBvcHVsYXRpb25Jbml0aWFsaXplcnNbaV0sCisJCQkJCQkJCVBvcHVsYXRpb25Jbml0aWFsaXplclByb3BlcnR5RWRpdG9yQWRhcHRlci5jbGFzcyk7CisKKwkJCQlmaW5hbCBQb3B1bGF0aW9uSW5pdGlhbGl6ZXJQcm9wZXJ0eUVkaXRvciBkbXBlID0gZG1wZWEKKwkJCQkJCS5jcmVhdGVQb3B1bGF0aW9uSW5pdGlhbGl6ZXJQcm9wZXJ0eUVkaXRvcih0aGlzLCBTV1QuTk9ORSwKKwkJCQkJCQkJcHJvamVjdFZhbGlkYXRvciwgcHJvamVjdCk7CisKKwkJCQlpbml0aWFsaXplck1hcC5wdXQocG9wdWxhdGlvbkluaXRpYWxpemVyc1tpXSwgZG1wZSk7CisJCQkJaWYgKGZpcnN0T25lID09IG51bGwpIHsKKwkJCQkJLy8gWWVzCisJCQkJCWZpcnN0T25lID0gZG1wZTsKKwkJCQl9IC8vIGlmCisJCQl9IC8vIGZvciBpCisJCX0gLy8gaWYgYW55IGRpc2Vhc2UgbW9kZWxzPworCisJCXN0YWNrTGF5b3V0LnRvcENvbnRyb2wgPSBmaXJzdE9uZTsKKwl9IC8vIERpc2Vhc2VNb2RlbFByb3BlcnR5Q29tcG9zaXRlCisKKwl2b2lkIGRpc3BsYXlQb3B1bGF0aW9uSW5pdGlhbGl6ZXIoZmluYWwgUG9wdWxhdGlvbkluaXRpYWxpemVyIGluaXRpYWxpemVyKSB7CisJCWZpbmFsIFBvcHVsYXRpb25Jbml0aWFsaXplclByb3BlcnR5RWRpdG9yIGRtcGUgPSBpbml0aWFsaXplck1hcC5nZXQoaW5pdGlhbGl6ZXIpOworCQkvLyBEaWQgd2UgZmluZCBpdD8KKwkJaWYgKGRtcGUgIT0gbnVsbCkgeworCQkJLy8gWWVzCisJCQlzdGFja0xheW91dC50b3BDb250cm9sID0gZG1wZTsKKwkJCWxheW91dCgpOworCQl9IC8vIGlmCisJCWVsc2UgeworCQkJQWN0aXZhdG9yLmxvZ0Vycm9yKFBvcHVsYXRpb25Nb2RlbFdpemFyZE1lc3NhZ2VzLmdldFN0cmluZygiRE1QQzQiKSAvLyROT04tTkxTLTEkCisJCQkJCSsgaW5pdGlhbGl6ZXIuZ2V0Q2xhc3MoKS5nZXROYW1lKCkgKyAiXCIiLCBudWxsKTsgLy8kTk9OLU5MUy0xJAorCQl9CisJfSAvLyBkaXNwbGF5RGlzZWFzZU1vZGVsCisJCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgZGlzcG9zZSgpIHsKKwkJc3VwZXIuZGlzcG9zZSgpOworCX0KKworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIGNoZWNrU3ViY2xhc3MoKSB7CisJCS8vIERpc2FibGUgdGhlIGNoZWNrIHRoYXQgcHJldmVudHMgc3ViLWNsYXNzaW5nIG9mIFNXVCBjb21wb25lbnRzCisJfQorCisJLyoqCisJICogQHJldHVybiA8Y29kZT50cnVlPC9jb2RlPiBpZiB0aGUgY29udGVudHMgb2YgdGhlIGNvbXBvc2l0ZSBhcmUgdmFsaWQsCisJICogICAgICAgICA8Y29kZT5mYWxzZTwvY29kZT4gb3RoZXJ3aXNlLgorCSAqLworCXB1YmxpYyBib29sZWFuIHZhbGlkYXRlKCkgeworCQlyZXR1cm4gKChQb3B1bGF0aW9uSW5pdGlhbGl6ZXJQcm9wZXJ0eUVkaXRvcikgKHN0YWNrTGF5b3V0LnRvcENvbnRyb2wpKQorCQkJCS52YWxpZGF0ZSgpOworCX0gLy8gdmFsaWRhdGUKKworCS8qKgorCSAqIEByZXR1cm4KKwkgKi8KKwlwdWJsaWMgU3RyaW5nIGdldEVycm9yTWVzc2FnZSgpIHsKKwkJcmV0dXJuICgoUG9wdWxhdGlvbkluaXRpYWxpemVyUHJvcGVydHlFZGl0b3IpIChzdGFja0xheW91dC50b3BDb250cm9sKSkKKwkJCQkuZ2V0RXJyb3JNZXNzYWdlKCk7CisJfQorCisJLyoqCisJICogQHBhcmFtIGRpc2Vhc2VNb2RlbAorCSAqLworCXB1YmxpYyB2b2lkIHBvcHVsYXRlUG9wdWxhdGlvbkluaXRpYWxpemVyKFBvcHVsYXRpb25Jbml0aWFsaXplciBwb3B1bGF0aW9uSW5pdGlhbGl6ZXIpIHsKKwkJKChQb3B1bGF0aW9uSW5pdGlhbGl6ZXJQcm9wZXJ0eUVkaXRvcikgKHN0YWNrTGF5b3V0LnRvcENvbnRyb2wpKQorCQkJCS5wb3B1bGF0ZShwb3B1bGF0aW9uSW5pdGlhbGl6ZXIpOworCX0gLy8gcG9wdWxhdGVQb3B1bGF0aW9uSW5pdGlhbGl6ZXIKKworfSAKZGlmZiAtLWdpdCBhL21vZGVscy9wb3B1bGF0aW9ucy9vcmcuZWNsaXBzZS5zdGVtLnVpLnBvcHVsYXRpb25tb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvcG9wdWxhdGlvbm1vZGVscy9zdGFuZGFyZC93aXphcmRzL1BvcHVsYXRpb25Nb2RlbERlZmluaXRpb25Db250cm9sLmphdmEgYi9tb2RlbHMvcG9wdWxhdGlvbnMvb3JnLmVjbGlwc2Uuc3RlbS51aS5wb3B1bGF0aW9ubW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3BvcHVsYXRpb25tb2RlbHMvc3RhbmRhcmQvd2l6YXJkcy9Qb3B1bGF0aW9uTW9kZWxEZWZpbml0aW9uQ29udHJvbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjExMzYzOWMKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvcG9wdWxhdGlvbnMvb3JnLmVjbGlwc2Uuc3RlbS51aS5wb3B1bGF0aW9ubW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3BvcHVsYXRpb25tb2RlbHMvc3RhbmRhcmQvd2l6YXJkcy9Qb3B1bGF0aW9uTW9kZWxEZWZpbml0aW9uQ29udHJvbC5qYXZhCkBAIC0wLDAgKzEsMjY4IEBACisvLyBQb3B1bGF0aW9uRGVmaW5pdGlvbkNvbnRyb2wuamF2YQorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnVpLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQud2l6YXJkczsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OworaW1wb3J0IGphdmEudXRpbC5MaXN0OworCitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3Q7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkNvcmVFeGNlcHRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklDb25maWd1cmF0aW9uRWxlbWVudDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSUV4dGVuc2lvblJlZ2lzdHJ5OworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QbGF0Zm9ybTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuVVJJOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS51dGlsLkVjb3JlVXRpbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLkR1YmxpbkNvcmU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLlBvcHVsYXRpb25Nb2RlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnVpLkFjdGl2YXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnVpLndpZGdldHMuTG9jYXRpb25QaWNrZXJEaWFsb2c7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LlNXVDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLk1vZGlmeUxpc3RlbmVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuU2VsZWN0aW9uQWRhcHRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLlNlbGVjdGlvbkV2ZW50OworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuU2VsZWN0aW9uTGlzdGVuZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5HcmlkRGF0YTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QubGF5b3V0LkdyaWRMYXlvdXQ7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQnV0dG9uOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbWJvOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5MYWJlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5QbGF0Zm9ybVVJOworCisvKioKKyAqIFRoaXMgY2xhc3MgcmVwcmVzZW50cyB0aGUgU1dUIGNvbnRyb2wgZm9yIGRlZmluaW5nIGEgZGlzZWFzZS4KKyAqLworcHVibGljIGNsYXNzIFBvcHVsYXRpb25Nb2RlbERlZmluaXRpb25Db250cm9sIGV4dGVuZHMgQ29tcG9zaXRlIHsKKworCXByaXZhdGUgc3RhdGljIFBvcHVsYXRpb25Nb2RlbFtdIHBvcHVsYXRpb25Nb2RlbHMgPSBudWxsOworCisJcHJpdmF0ZSBmaW5hbCBDb21ibyBjb21ibzsKKworCXByaXZhdGUgZmluYWwgUG9wdWxhdGlvbk1vZGVsUHJvcGVydHlDb21wb3NpdGUgcG9wdWxhdGlvbk1vZGVsUHJvcGVydHlDb21wb3NpdGU7CisKKwlwcml2YXRlIFN0cmluZyBpc29LZXk9IiI7IC8vJE5PTi1OTFMtMSQKKworCXByaXZhdGUgVVJJIHRhcmdldFVSSSA9IG51bGw7CisJCisJcHJpdmF0ZSBOZXdQb3B1bGF0aW9uTW9kZWxXaXphcmQgbmV3UG9wdWxhdGlvbldpemFyZDsKKwkKKwkKKwkvKioKKwkgKiBDcmVhdGUgdGhlIGNvbXBvc2l0ZQorCSAqIAorCSAqIEBwYXJhbSBwYXJlbnQKKwkgKiBAcGFyYW0gc3R5bGUKKwkgKiBAcGFyYW0gcHJvamVjdFZhbGlkYXRvcgorCSAqIEBwYXJhbSBucHd6IHRoZSBOZXdQb3B1bGF0aW9uTW9kZWxXaXphcmQKKwkgKi8KKwlAU3VwcHJlc3NXYXJuaW5ncygibmxzIikKKwlwdWJsaWMgUG9wdWxhdGlvbk1vZGVsRGVmaW5pdGlvbkNvbnRyb2woZmluYWwgQ29tcG9zaXRlIHBhcmVudCwgZmluYWwgaW50IHN0eWxlLAorCQkJTW9kaWZ5TGlzdGVuZXIgcHJvamVjdFZhbGlkYXRvciwgZmluYWwgSVByb2plY3QgcHJvamVjdCwgTmV3UG9wdWxhdGlvbk1vZGVsV2l6YXJkIG5wd3opIHsKKwkJc3VwZXIocGFyZW50LCBzdHlsZSk7CisJCW5ld1BvcHVsYXRpb25XaXphcmQgPSBucHd6OworCQlmaW5hbCBHcmlkTGF5b3V0IGdyaWRMYXlvdXQgPSBuZXcgR3JpZExheW91dCgpOworCQlncmlkTGF5b3V0Lm1hcmdpbldpZHRoID0gMDsKKwkJZ3JpZExheW91dC5udW1Db2x1bW5zID0gMjsKKwkJc2V0TGF5b3V0KGdyaWRMYXlvdXQpOworCisJCWZpbmFsIExhYmVsIHBvcHVsYXRpb25Nb2RlbExhYmVsID0gbmV3IExhYmVsKHRoaXMsIFNXVC5OT05FKTsKKwkJZmluYWwgR3JpZERhdGEgZ2RfcG9wdWxhdGlvbk1vZGVsTGFiZWwgPSBuZXcgR3JpZERhdGEoU1dULkZJTEwsIFNXVC5DRU5URVIsIHRydWUsIGZhbHNlKTsKKwkJZ2RfcG9wdWxhdGlvbk1vZGVsTGFiZWwud2lkdGhIaW50ID0gMTAwOworCQlwb3B1bGF0aW9uTW9kZWxMYWJlbC5zZXRMYXlvdXREYXRhKGdkX3BvcHVsYXRpb25Nb2RlbExhYmVsKTsKKwkJcG9wdWxhdGlvbk1vZGVsTGFiZWwuc2V0VGV4dChQb3B1bGF0aW9uTW9kZWxXaXphcmRNZXNzYWdlcy5nZXRTdHJpbmcoIkREQy4wIikpOyAvLyROT04tTkxTLTEkCisKKwkJY29tYm8gPSBuZXcgQ29tYm8odGhpcywgU1dULlJFQURfT05MWSk7CisJCWNvbWJvLnNldFRleHRMaW1pdCgzMCk7CisJCWZpbmFsIEdyaWREYXRhIGdkX2NvbWJvID0gbmV3IEdyaWREYXRhKFNXVC5GSUxMLCBTV1QuQ0VOVEVSLCB0cnVlLAorCQkJCWZhbHNlKTsKKwkJZ2RfY29tYm8ud2lkdGhIaW50ID0gMzAzOworCQljb21iby5zZXRMYXlvdXREYXRhKGdkX2NvbWJvKTsKKworCQljb21iby5zZXRUb29sVGlwVGV4dChQb3B1bGF0aW9uTW9kZWxXaXphcmRNZXNzYWdlcy5nZXRTdHJpbmcoIkREQy4xIikpOyAvLyROT04tTkxTLTEkCisJCS8vIEluaXRpYWxpemUgdGhlIGxpc3Qgb2YgZGlzZWFzZSBtb2RlbHMgYXZhaWxhYmxlCisJCWNvbWJvLnNldEl0ZW1zKGdldFBvcHVsYXRpb25Nb2RlbE5hbWVzKGdldFBvcHVsYXRpb25Nb2RlbHMoKSkpOworCQljb21iby5zZWxlY3QoMCk7CisJCWNvbWJvLmFkZE1vZGlmeUxpc3RlbmVyKHByb2plY3RWYWxpZGF0b3IpOworCisJCQorCQlwb3B1bGF0aW9uTW9kZWxQcm9wZXJ0eUNvbXBvc2l0ZSA9IG5ldyBQb3B1bGF0aW9uTW9kZWxQcm9wZXJ0eUNvbXBvc2l0ZSh0aGlzLAorCQkJCVNXVC5OT05FLCBnZXRQb3B1bGF0aW9uTW9kZWxzKCksIHByb2plY3RWYWxpZGF0b3IsIHByb2plY3QpOworCQlmaW5hbCBHcmlkRGF0YSBnZF9wb3B1bGF0aW9uTW9kZWxQcm9wZXJ0eUNvbnRyb2wgPSBuZXcgR3JpZERhdGEoU1dULkZJTEwsCisJCQkJU1dULkNFTlRFUiwgdHJ1ZSwgZmFsc2UsIDIsIDEpOworCQlwb3B1bGF0aW9uTW9kZWxQcm9wZXJ0eUNvbXBvc2l0ZQorCQkJCS5zZXRMYXlvdXREYXRhKGdkX3BvcHVsYXRpb25Nb2RlbFByb3BlcnR5Q29udHJvbCk7CisKKwkJY29tYm8uYWRkU2VsZWN0aW9uTGlzdGVuZXIobmV3IFNlbGVjdGlvbkFkYXB0ZXIoKSB7CisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyB2b2lkIHdpZGdldFNlbGVjdGVkKFNlbGVjdGlvbkV2ZW50IGUpIHsKKwkJCQlwb3B1bGF0aW9uTW9kZWxQcm9wZXJ0eUNvbXBvc2l0ZQorCQkJCQkJLmRpc3BsYXlEaXNlYXNlTW9kZWwoZ2V0UG9wdWxhdGlvbk1vZGVscygpW2NvbWJvCisJCQkJCQkJCS5nZXRTZWxlY3Rpb25JbmRleCgpXSk7CisJCQkJCisJCQkJLy8gdXBkYXRlIHRoZSBkdWJsaW4gY29yZSBmcm9tIHRoZSBwbHVnaW4gZGVmYXVsdHMgZm9yIHRoZQorCQkJCS8vIG5ld2x5IHNlbGVjdGVkIGRpc2Vhc2UgbW9kZWw7CisJCQkJbmV3UG9wdWxhdGlvbldpemFyZC5uZXdEdWJsaW5Db3JlUGFnZS51cGRhdGVEdWJsaW5Db3JlUGFnZShnZXRTZWxlY3RlZFBvcHVsYXRpb25Nb2RlbCgpLmdldER1YmxpbkNvcmUoKSk7CisJCQkJCisJCQkJLy8gbGF5b3V0KCk7CisJCQl9IC8vIHdpZGdldFNlbGVjdGVkCisKKwkJfSk7CisJCS8vZmluYWwgUG9wdWxhdGlvbk1vZGVsRGVmaW5pdGlvbkNvbnRyb2wgc2VsZiA9IHRoaXM7CisKKwkJLy8gTG9jYXRpb24gcGlja2VyCisJCS8vIElTTyBLZXkKKwkJZmluYWwgTGFiZWwgaXNvS2V5TGFiZWwgPSBuZXcgTGFiZWwodGhpcywgU1dULk5PTkUpOworCQlpc29LZXlMYWJlbC5zZXRUZXh0KFBvcHVsYXRpb25Nb2RlbFdpemFyZE1lc3NhZ2VzLmdldFN0cmluZygiTlBvcFdpeklTT0siKSk7IC8vJE5PTi1OTFMtMSQKKwkJZmluYWwgR3JpZERhdGEgZ2RfaXNvS2V5TGFiZWwgPSBuZXcgR3JpZERhdGEoU1dULkZJTEwsIFNXVC5DRU5URVIsIHRydWUsIGZhbHNlKTsKKwkJaXNvS2V5TGFiZWwuc2V0TGF5b3V0RGF0YShnZF9pc29LZXlMYWJlbCk7CisJCQorCQlmaW5hbCBMYWJlbCBpc29rZXlWYWx1ZUxhYmVsID0gbmV3IExhYmVsKHRoaXMsIFNXVC5OT05FKTsKKwkJaXNva2V5VmFsdWVMYWJlbC5zZXRUZXh0KGlzb0tleSk7CisKKwkJZmluYWwgR3JpZERhdGEgZ2RfaXNvS2V5TGFiZWxWYWx1ZSA9IG5ldyBHcmlkRGF0YShTV1QuRklMTCwgU1dULkNFTlRFUiwgdHJ1ZSwgZmFsc2UpOworCQlpc29rZXlWYWx1ZUxhYmVsLnNldExheW91dERhdGEoZ2RfaXNvS2V5TGFiZWxWYWx1ZSk7CisJCQorCQlmaW5hbCBCdXR0b24gbG9jYXRpb25CdXR0b24gPSBuZXcgQnV0dG9uKHRoaXMsIFNXVC5OT05FKTsKKwkJbG9jYXRpb25CdXR0b24uc2V0VGV4dChQb3B1bGF0aW9uTW9kZWxXaXphcmRNZXNzYWdlcy5nZXRTdHJpbmcoIk5Qb3BXaXpQaWNrTG9jIikpOworCQlmaW5hbCBHcmlkRGF0YSBsYl9pc29LZXlMYWJlbCA9IG5ldyBHcmlkRGF0YShTV1QuRklMTCwgU1dULkNFTlRFUiwgdHJ1ZSwgZmFsc2UpOworCQlsb2NhdGlvbkJ1dHRvbi5zZXRMYXlvdXREYXRhKGxiX2lzb0tleUxhYmVsKTsKKwkJCisJCWxvY2F0aW9uQnV0dG9uLmFkZFNlbGVjdGlvbkxpc3RlbmVyKG5ldyBTZWxlY3Rpb25MaXN0ZW5lcigpIHsKKwkJCQorCQkJcHVibGljIHZvaWQgd2lkZ2V0U2VsZWN0ZWQoU2VsZWN0aW9uRXZlbnQgYXJnMCkgeworCQkJCUxvY2F0aW9uUGlja2VyRGlhbG9nIGxwRGlhbG9nID0gbmV3IExvY2F0aW9uUGlja2VyRGlhbG9nKFBvcHVsYXRpb25Nb2RlbERlZmluaXRpb25Db250cm9sLnRoaXMuZ2V0U2hlbGwoKSwgU1dULk5PTkUsIFBvcHVsYXRpb25Nb2RlbFdpemFyZE1lc3NhZ2VzLmdldFN0cmluZygiTlBvcFdpelBpY2tMb2NUaXRsZSIpLCBQb3B1bGF0aW9uTW9kZWxEZWZpbml0aW9uQ29udHJvbC50aGlzLmlzb0tleSwgcHJvamVjdCk7CisJCQkJCisJCQkJT2JqZWN0IFtdIHJldCAgPSBscERpYWxvZy5vcGVuKCk7CisJCQkJaWYocmV0ICE9IG51bGwpIHsgCisJCQkJCWlzb2tleVZhbHVlTGFiZWwuc2V0VGV4dCgoU3RyaW5nKXJldFswXSk7CisJCQkJCWlzb0tleSA9IChTdHJpbmcpcmV0WzBdOworCQkJCQl0YXJnZXRVUkkgPSAoVVJJKXJldFsxXTsKKwkJCQl9CisJCQl9CisJCQkKKwkJCXB1YmxpYyB2b2lkIHdpZGdldERlZmF1bHRTZWxlY3RlZChTZWxlY3Rpb25FdmVudCBhcmcwKSB7CisJCQkJCisJCQl9CisJCX0pOworCQkKKwkJUGxhdGZvcm1VSS5nZXRXb3JrYmVuY2goKS5nZXRIZWxwU3lzdGVtKCkuc2V0SGVscChwYXJlbnQsICJvcmcuZWNsaXBzZS5zdGVtLmRvYy5uZXdwb3B1bGF0aW9uX2NvbnRleHRpZCIpOworCisJfSAvLyBEaXNlYXNlRGVmaW5pdGlvbkNvbnRyb2wKKworCS8qKgorCSAqIEByZXR1cm4gYW4gYXJyYXkgb2YgdGhlIHtAbGluayBEaXNlYXNlTW9kZWxzfXMgZGVmaW5lZCBpbiB0aGUgc3lzdGVtLgorCSAqLworCXByaXZhdGUgUG9wdWxhdGlvbk1vZGVsW10gZ2V0UG9wdWxhdGlvbk1vZGVscygpIHsKKwkJaWYgKHBvcHVsYXRpb25Nb2RlbHMgPT0gbnVsbCkgeworCQkJZmluYWwgSUV4dGVuc2lvblJlZ2lzdHJ5IHJlZ2lzdHJ5ID0gUGxhdGZvcm0uZ2V0RXh0ZW5zaW9uUmVnaXN0cnkoKTsKKwkJCWZpbmFsIElDb25maWd1cmF0aW9uRWxlbWVudFtdIHBvcHVsYXRpb25Nb2RlbENvbmZpZ0VsZW1lbnRzID0gcmVnaXN0cnkKKwkJCQkJLmdldENvbmZpZ3VyYXRpb25FbGVtZW50c0ZvcihvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuQ29uc3RhbnRzLklEX1BPUFVMQVRJT05fTU9ERUxfRVhURU5TSU9OX1BPSU5UKTsKKworCQkJZmluYWwgTGlzdDxQb3B1bGF0aW9uTW9kZWw+IHRlbXAgPSBuZXcgQXJyYXlMaXN0PFBvcHVsYXRpb25Nb2RlbD4oKTsKKworCQkJcG9wdWxhdGlvbk1vZGVscyA9IG5ldyBQb3B1bGF0aW9uTW9kZWxbcG9wdWxhdGlvbk1vZGVsQ29uZmlnRWxlbWVudHMubGVuZ3RoXTsKKworCQkJZm9yIChpbnQgaSA9IDA7IGkgPCBwb3B1bGF0aW9uTW9kZWxDb25maWdFbGVtZW50cy5sZW5ndGg7IGkrKykgeworCQkJCWZpbmFsIElDb25maWd1cmF0aW9uRWxlbWVudCBlbGVtZW50ID0gcG9wdWxhdGlvbk1vZGVsQ29uZmlnRWxlbWVudHNbaV07CisJCQkJLy8gRG9lcyB0aGUgZWxlbWVudCBzcGVjaWZ5IHRoZSBjbGFzcyBvZiB0aGUgcG9wdWxhdGlvbiBtb2RlbD8KKwkJCQlpZiAoZWxlbWVudC5nZXROYW1lKCkuZXF1YWxzKG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5Db25zdGFudHMuUE9QVUxBVElPTl9NT0RFTF9FTEVNRU5UKSkgeworCQkJCQkvLyBZZXMKKwkJCQkJdHJ5IHsKKwkJCQkJCXRlbXAuYWRkKChQb3B1bGF0aW9uTW9kZWwpIGVsZW1lbnQKKwkJCQkJCQkJLmNyZWF0ZUV4ZWN1dGFibGVFeHRlbnNpb24oImNsYXNzIikpOyAvLyROT04tTkxTLTEkCisJCQkJCX0gY2F0Y2ggKGZpbmFsIENvcmVFeGNlcHRpb24gZSkgeworCQkJCQkJQWN0aXZhdG9yLmxvZ0Vycm9yKAorCQkJCQkJCQlQb3B1bGF0aW9uTW9kZWxXaXphcmRNZXNzYWdlcy5nZXRTdHJpbmcoIkREQy4zIiksIGUpOyAvLyROT04tTkxTLTEkCisJCQkJCX0KKwkJCQl9IC8vIGlmCisJCQl9IC8vIGZvciBlYWNoIGNvbmZpZ3VyYXRpb24gZWxlbWVudAorCisJCQlwb3B1bGF0aW9uTW9kZWxzID0gdGVtcC50b0FycmF5KG5ldyBQb3B1bGF0aW9uTW9kZWxbXSB7fSk7CisJCX0gLy8gaWYgcG9wdWxhdGlvbk1vZGVscyBub3QgY3JlYXRlZAorCQkKKwkJCisKKwkJLy8gbm93IHVwZGF0ZSB0aGUgZHVibGluIGNvcmVzIHdpdGggdGhlIGRlZmF1bHQgcGx1Z2luLnhtbCBpbmZvCisJCWZvcihQb3B1bGF0aW9uTW9kZWwgcG9wdWxhdGlvbk1vZGVsOiBwb3B1bGF0aW9uTW9kZWxzKSB7CisJCQlpZihwb3B1bGF0aW9uTW9kZWwgIT0gbnVsbCkgeworCQkJCS8vIEpISyBnZXR0aW5nIERDIGluZm8gZnJvbSB0aGUgcGx1Z2dpbi54bWwKKwkJCQlEdWJsaW5Db3JlIGR1YmxpbkNvcmUgPSBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuQWN0aXZhdG9yLmdldFBsdWdpbkR1YmxpbkNvcmUocG9wdWxhdGlvbk1vZGVsKTsKKwkJCQlpZihkdWJsaW5Db3JlICE9IG51bGwpIHsKKwkJCQkJcG9wdWxhdGlvbk1vZGVsLnNldER1YmxpbkNvcmUoZHVibGluQ29yZSk7CisJCQkJfQorCQkJfQorCQl9CisKKwkJcmV0dXJuIHBvcHVsYXRpb25Nb2RlbHM7CisJfSAvLyBnZXRQb3B1bGF0aW9uTW9kZWxzCisKKwkvKioKKwkgKiBAcmV0dXJuIHRoZSBuYW1lcyBvZiB0aGUgZGlzZWFzZSBtb2RlbHMKKwkgKi8KKwlwcml2YXRlIFN0cmluZ1tdIGdldFBvcHVsYXRpb25Nb2RlbE5hbWVzKGZpbmFsIFBvcHVsYXRpb25Nb2RlbFtdIHBvcHVsYXRpb25Nb2RlbHMpIHsKKwkJZmluYWwgU3RyaW5nW10gcmV0VmFsdWUgPSBuZXcgU3RyaW5nW3BvcHVsYXRpb25Nb2RlbHMubGVuZ3RoXTsKKwkJZm9yIChpbnQgaSA9IDA7IGkgPCBwb3B1bGF0aW9uTW9kZWxzLmxlbmd0aDsgaSsrKSB7CisJCQlTdHJpbmcgbmFtZSA9IHBvcHVsYXRpb25Nb2RlbHNbaV0uZ2V0RHVibGluQ29yZSgpLmdldFRpdGxlKCk7CisJCQkvLyBXYXMgYSBuYW1lIHNwZWNpZmllZD8KKwkJCWlmICgobmFtZSA9PSBudWxsKSB8fCBuYW1lLmVxdWFscygiIikpIHsgLy8kTk9OLU5MUy0xJAorCQkJCS8vIE5vCisJCQkJbmFtZSA9IHBvcHVsYXRpb25Nb2RlbHNbaV0uZ2V0Q2xhc3MoKS5nZXRTaW1wbGVOYW1lKCk7CisJCQl9IC8vIGlmCisKKwkJCXJldFZhbHVlW2ldID0gbmFtZTsKKwkJfSAvLyBmb3IgaQorCQlyZXR1cm4gcmV0VmFsdWU7CisJfSAvLyBnZXRQb3B1bGF0aW9uTW9kZWxOYW1lcworCisJCisJUG9wdWxhdGlvbk1vZGVsIGdldFNlbGVjdGVkUG9wdWxhdGlvbk1vZGVsKCkgeworCQlmaW5hbCBQb3B1bGF0aW9uTW9kZWwgcmV0VmFsdWUgPSAoUG9wdWxhdGlvbk1vZGVsKUVjb3JlVXRpbAorCQkJCS5jb3B5KGdldFBvcHVsYXRpb25Nb2RlbHMoKVtjb21iby5nZXRTZWxlY3Rpb25JbmRleCgpXSk7CisJCXBvcHVsYXRpb25Nb2RlbFByb3BlcnR5Q29tcG9zaXRlLnBvcHVsYXRlUG9wdWxhdGlvbk1vZGVsKHJldFZhbHVlKTsKKwkJcmV0VmFsdWUuc2V0VGFyZ2V0SVNPS2V5KHRoaXMuZ2V0SXNvS2V5KCkpOworCQlyZXR1cm4gcmV0VmFsdWU7CisJfSAvLyBnZXRTZWxlY3RlZFBvcHVsYXRpb25Nb2RlbAorCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgZGlzcG9zZSgpIHsKKwkJc3VwZXIuZGlzcG9zZSgpOworCX0KKworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIGNoZWNrU3ViY2xhc3MoKSB7CisJCS8vIERpc2FibGUgdGhlIGNoZWNrIHRoYXQgcHJldmVudHMgc3ViLWNsYXNzaW5nIG9mIFNXVCBjb21wb25lbnRzCisJfQorCisJLyoqCisJICogQHJldHVybiA8Y29kZT50cnVlPC9jb2RlPiBpZiB0aGUgY29udGVudHMgb2YgdGhlIGNvbnRyb2wgYXJlIHZhbGlkLAorCSAqICAgICAgICAgPGNvZGU+ZmFsc2U8L2NvZGU+IG90aGVyd2lzZS4KKwkgKi8KKwlwdWJsaWMgYm9vbGVhbiB2YWxpZGF0ZSgpIHsKKwkJcmV0dXJuIHBvcHVsYXRpb25Nb2RlbFByb3BlcnR5Q29tcG9zaXRlLnZhbGlkYXRlKCk7CisJfSAvLyB2YWxpZGF0ZQorCisJLyoqCisJICogQHJldHVybiB0aGUgZXJyb3IgbWVzc2FnZSBzZXQgYnkge0BsaW5rICN2YWxpZGF0ZSgpfQorCSAqLworCXB1YmxpYyBTdHJpbmcgZ2V0RXJyb3JNZXNzYWdlKCkgeworCQlyZXR1cm4gcG9wdWxhdGlvbk1vZGVsUHJvcGVydHlDb21wb3NpdGUuZ2V0RXJyb3JNZXNzYWdlKCk7CisJfQorCisJcHVibGljIFN0cmluZyBnZXRJc29LZXkoKSB7CisJCXJldHVybiBpc29LZXk7CisJfQorCQorCXB1YmxpYyBVUkkgZ2V0VGFyZ2V0VVJJKCkgeworCQlyZXR1cm4gdGFyZ2V0VVJJOworCX0KK30gLy8gUG9wdWxhdGlvbkRlZmluaXRpb25Db250cm9sCmRpZmYgLS1naXQgYS9tb2RlbHMvcG9wdWxhdGlvbnMvb3JnLmVjbGlwc2Uuc3RlbS51aS5wb3B1bGF0aW9ubW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3BvcHVsYXRpb25tb2RlbHMvc3RhbmRhcmQvd2l6YXJkcy9Qb3B1bGF0aW9uTW9kZWxQcm9wZXJ0eUNvbXBvc2l0ZS5qYXZhIGIvbW9kZWxzL3BvcHVsYXRpb25zL29yZy5lY2xpcHNlLnN0ZW0udWkucG9wdWxhdGlvbm1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9wb3B1bGF0aW9ubW9kZWxzL3N0YW5kYXJkL3dpemFyZHMvUG9wdWxhdGlvbk1vZGVsUHJvcGVydHlDb21wb3NpdGUuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNzJiNGU0Ci0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL3BvcHVsYXRpb25zL29yZy5lY2xpcHNlLnN0ZW0udWkucG9wdWxhdGlvbm1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9wb3B1bGF0aW9ubW9kZWxzL3N0YW5kYXJkL3dpemFyZHMvUG9wdWxhdGlvbk1vZGVsUHJvcGVydHlDb21wb3NpdGUuamF2YQpAQCAtMCwwICsxLDEzMCBAQAorLy8gRGlzZWFzZU1vZGVsUHJvcGVydHlDb21wb3NpdGUuamF2YQorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnVpLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQud2l6YXJkczsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKK2ltcG9ydCBqYXZhLnV0aWwuTWFwOworCitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3Q7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLlBvcHVsYXRpb25Nb2RlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnVpLkFjdGl2YXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnVpLnBvcHVsYXRpb25tb2RlbHMuYWRhcHRlcnMuUG9wdWxhdGlvbk1vZGVsUHJvcGVydHlFZGl0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS51aS5wb3B1bGF0aW9ubW9kZWxzLmFkYXB0ZXJzLlBvcHVsYXRpb25Nb2RlbFByb3BlcnR5RWRpdG9yQWRhcHRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnVpLnBvcHVsYXRpb25tb2RlbHMuYWRhcHRlcnMuUG9wdWxhdGlvbk1vZGVsUHJvcGVydHlFZGl0b3JBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuU1dUOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5jdXN0b20uU3RhY2tMYXlvdXQ7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5Nb2RpZnlMaXN0ZW5lcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuTGFiZWw7CisKKy8qKgorICogVGhpcyBjbGFzcyByZXByZXNlbnRzCisgKi8KK3B1YmxpYyBjbGFzcyBQb3B1bGF0aW9uTW9kZWxQcm9wZXJ0eUNvbXBvc2l0ZSBleHRlbmRzIENvbXBvc2l0ZSB7CisKKwlwcml2YXRlIGZpbmFsIE1hcDxQb3B1bGF0aW9uTW9kZWwsIFBvcHVsYXRpb25Nb2RlbFByb3BlcnR5RWRpdG9yPiBtb2RlbE1hcCA9IG5ldyBIYXNoTWFwPFBvcHVsYXRpb25Nb2RlbCwgUG9wdWxhdGlvbk1vZGVsUHJvcGVydHlFZGl0b3I+KCk7CisKKwlwcml2YXRlIFN0YWNrTGF5b3V0IHN0YWNrTGF5b3V0ID0gbnVsbDsKKworCS8qKgorCSAqIENyZWF0ZSB0aGUgY29tcG9zaXRlCisJICogCisJICogQHBhcmFtIHBhcmVudAorCSAqIEBwYXJhbSBzdHlsZQorCSAqIEBwYXJhbSBwcm9qZWN0VmFsaWRhdG9yCisJICovCisJcHVibGljIFBvcHVsYXRpb25Nb2RlbFByb3BlcnR5Q29tcG9zaXRlKGZpbmFsIENvbXBvc2l0ZSBwYXJlbnQsCisJCQlmaW5hbCBpbnQgc3R5bGUsIGZpbmFsIFBvcHVsYXRpb25Nb2RlbFtdIHBvcHVsYXRpb25Nb2RlbHMsCisJCQlNb2RpZnlMaXN0ZW5lciBwcm9qZWN0VmFsaWRhdG9yLCBJUHJvamVjdCBwcm9qZWN0KSB7CisJCXN1cGVyKHBhcmVudCwgc3R5bGUpOworCQlzdGFja0xheW91dCA9IG5ldyBTdGFja0xheW91dCgpOworCQlzZXRMYXlvdXQoc3RhY2tMYXlvdXQpOworCisJCUxhYmVsIGxhYmVsOworCQlsYWJlbCA9IG5ldyBMYWJlbCh0aGlzLCBTV1QuTk9ORSk7CisJCWxhYmVsLnNldFRleHQoUG9wdWxhdGlvbk1vZGVsV2l6YXJkTWVzc2FnZXMuZ2V0U3RyaW5nKCJETVBDMSIpKTsgLy8kTk9OLU5MUy0xJAorCQlQb3B1bGF0aW9uTW9kZWxQcm9wZXJ0eUVkaXRvciBmaXJzdE9uZSA9IG51bGw7CisJCS8vIEFueSBkaXNlYXNlIG1vZGVscz8KKwkJaWYgKHBvcHVsYXRpb25Nb2RlbHMgIT0gbnVsbCkgeworCQkJLy8gWWVzCisJCQlmb3IgKGludCBpID0gMDsgaSA8IHBvcHVsYXRpb25Nb2RlbHMubGVuZ3RoOyBpKyspIHsKKworCQkJCVBvcHVsYXRpb25Nb2RlbFByb3BlcnR5RWRpdG9yQWRhcHRlciBkbXBlYSA9IChQb3B1bGF0aW9uTW9kZWxQcm9wZXJ0eUVkaXRvckFkYXB0ZXIpIFBvcHVsYXRpb25Nb2RlbFByb3BlcnR5RWRpdG9yQWRhcHRlckZhY3RvcnkuSU5TVEFOQ0UKKwkJCQkJCS5hZGFwdChwb3B1bGF0aW9uTW9kZWxzW2ldLAorCQkJCQkJCQlQb3B1bGF0aW9uTW9kZWxQcm9wZXJ0eUVkaXRvckFkYXB0ZXIuY2xhc3MpOworCisJCQkJZmluYWwgUG9wdWxhdGlvbk1vZGVsUHJvcGVydHlFZGl0b3IgZG1wZSA9IGRtcGVhCisJCQkJCQkuY3JlYXRlUG9wdWxhdGlvbk1vZGVsUHJvcGVydHlFZGl0b3IodGhpcywgU1dULk5PTkUsCisJCQkJCQkJCXByb2plY3RWYWxpZGF0b3IsIHByb2plY3QpOworCisJCQkJbW9kZWxNYXAucHV0KHBvcHVsYXRpb25Nb2RlbHNbaV0sIGRtcGUpOworCQkJCWlmIChmaXJzdE9uZSA9PSBudWxsKSB7CisJCQkJCS8vIFllcworCQkJCQlmaXJzdE9uZSA9IGRtcGU7CisJCQkJfSAvLyBpZgorCQkJfSAvLyBmb3IgaQorCQl9IC8vIGlmIGFueSBkaXNlYXNlIG1vZGVscz8KKworCQlzdGFja0xheW91dC50b3BDb250cm9sID0gZmlyc3RPbmU7CisJfSAvLyBEaXNlYXNlTW9kZWxQcm9wZXJ0eUNvbXBvc2l0ZQorCisJdm9pZCBkaXNwbGF5RGlzZWFzZU1vZGVsKGZpbmFsIFBvcHVsYXRpb25Nb2RlbCBkaXNlYXNlTW9kZWwpIHsKKwkJZmluYWwgUG9wdWxhdGlvbk1vZGVsUHJvcGVydHlFZGl0b3IgZG1wZSA9IG1vZGVsTWFwLmdldChkaXNlYXNlTW9kZWwpOworCQkvLyBEaWQgd2UgZmluZCBpdD8KKwkJaWYgKGRtcGUgIT0gbnVsbCkgeworCQkJLy8gWWVzCisJCQlzdGFja0xheW91dC50b3BDb250cm9sID0gZG1wZTsKKwkJCWxheW91dCgpOworCQl9IC8vIGlmCisJCWVsc2UgeworCQkJQWN0aXZhdG9yLmxvZ0Vycm9yKFBvcHVsYXRpb25Nb2RlbFdpemFyZE1lc3NhZ2VzLmdldFN0cmluZygiRE1QQzIiKSAvLyROT04tTkxTLTEkCisJCQkJCSsgZGlzZWFzZU1vZGVsLmdldENsYXNzKCkuZ2V0TmFtZSgpICsgIlwiIiwgbnVsbCk7IC8vJE5PTi1OTFMtMSQKKwkJfQorCX0gLy8gZGlzcGxheURpc2Vhc2VNb2RlbAorCQorCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGRpc3Bvc2UoKSB7CisJCXN1cGVyLmRpc3Bvc2UoKTsKKwl9CisKKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgdm9pZCBjaGVja1N1YmNsYXNzKCkgeworCQkvLyBEaXNhYmxlIHRoZSBjaGVjayB0aGF0IHByZXZlbnRzIHN1Yi1jbGFzc2luZyBvZiBTV1QgY29tcG9uZW50cworCX0KKworCS8qKgorCSAqIEByZXR1cm4gPGNvZGU+dHJ1ZTwvY29kZT4gaWYgdGhlIGNvbnRlbnRzIG9mIHRoZSBjb21wb3NpdGUgYXJlIHZhbGlkLAorCSAqICAgICAgICAgPGNvZGU+ZmFsc2U8L2NvZGU+IG90aGVyd2lzZS4KKwkgKi8KKwlwdWJsaWMgYm9vbGVhbiB2YWxpZGF0ZSgpIHsKKwkJcmV0dXJuICgoUG9wdWxhdGlvbk1vZGVsUHJvcGVydHlFZGl0b3IpIChzdGFja0xheW91dC50b3BDb250cm9sKSkKKwkJCQkudmFsaWRhdGUoKTsKKwl9IC8vIHZhbGlkYXRlCisKKwkvKioKKwkgKiBAcmV0dXJuCisJICovCisJcHVibGljIFN0cmluZyBnZXRFcnJvck1lc3NhZ2UoKSB7CisJCXJldHVybiAoKFBvcHVsYXRpb25Nb2RlbFByb3BlcnR5RWRpdG9yKSAoc3RhY2tMYXlvdXQudG9wQ29udHJvbCkpCisJCQkJLmdldEVycm9yTWVzc2FnZSgpOworCX0KKworCS8qKgorCSAqIEBwYXJhbSBkaXNlYXNlTW9kZWwKKwkgKi8KKwlwdWJsaWMgdm9pZCBwb3B1bGF0ZVBvcHVsYXRpb25Nb2RlbChQb3B1bGF0aW9uTW9kZWwgcG9wdWxhdGlvbk1vZGVsKSB7CisJCSgoUG9wdWxhdGlvbk1vZGVsUHJvcGVydHlFZGl0b3IpIChzdGFja0xheW91dC50b3BDb250cm9sKSkKKwkJCQkucG9wdWxhdGUocG9wdWxhdGlvbk1vZGVsKTsKKwl9IC8vIHBvcHVsYXRlUG9wdWxhdGlvbk1vZGVsCisKK30gLy8gUG9wdWxhdGlvbk1vZGVsUHJvcGVydHlDb21wb3NpdGUKZGlmZiAtLWdpdCBhL21vZGVscy9wb3B1bGF0aW9ucy9vcmcuZWNsaXBzZS5zdGVtLnVpLnBvcHVsYXRpb25tb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvcG9wdWxhdGlvbm1vZGVscy9zdGFuZGFyZC93aXphcmRzL1BvcHVsYXRpb25Nb2RlbFdpemFyZE1lc3NhZ2VzLmphdmEgYi9tb2RlbHMvcG9wdWxhdGlvbnMvb3JnLmVjbGlwc2Uuc3RlbS51aS5wb3B1bGF0aW9ubW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3BvcHVsYXRpb25tb2RlbHMvc3RhbmRhcmQvd2l6YXJkcy9Qb3B1bGF0aW9uTW9kZWxXaXphcmRNZXNzYWdlcy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdlODdlYzIKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvcG9wdWxhdGlvbnMvb3JnLmVjbGlwc2Uuc3RlbS51aS5wb3B1bGF0aW9ubW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3BvcHVsYXRpb25tb2RlbHMvc3RhbmRhcmQvd2l6YXJkcy9Qb3B1bGF0aW9uTW9kZWxXaXphcmRNZXNzYWdlcy5qYXZhCkBAIC0wLDAgKzEsNDYgQEAKKy8vIERpc2Vhc2VXaXphcmRNZXNzYWdlcy5qYXZhCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0udWkucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC53aXphcmRzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGphdmEudXRpbC5NaXNzaW5nUmVzb3VyY2VFeGNlcHRpb247CitpbXBvcnQgamF2YS51dGlsLlJlc291cmNlQnVuZGxlOworCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLkNvbnN0YW50czsKKworLyoqCisgKiBUaGlzIGNsYXNzIGlzIHRoZSBSZXNvdXJjZSBCdW5kbGUgZm9yIHRoaXMgcGFja2FnZS4KKyAqLworcHVibGljIGNsYXNzIFBvcHVsYXRpb25Nb2RlbFdpemFyZE1lc3NhZ2VzIHsKKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgQlVORExFX05BTUUgPSBDb25zdGFudHMuSURfUk9PVAorCQkJKyAiLnVpLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQud2l6YXJkcy5wb3B1bGF0aW9ubW9kZWx3aXphcmRtZXNzYWdlcyI7IC8vJE5PTi1OTFMtMSQKKworCXByaXZhdGUgc3RhdGljIGZpbmFsIFJlc291cmNlQnVuZGxlIFJFU09VUkNFX0JVTkRMRSA9IFJlc291cmNlQnVuZGxlCisJCQkuZ2V0QnVuZGxlKEJVTkRMRV9OQU1FKTsKKworCXByaXZhdGUgUG9wdWxhdGlvbk1vZGVsV2l6YXJkTWVzc2FnZXMoKSB7CisJCS8vIGVtcHR5CisJfQorCisJLyoqCisJICogQHBhcmFtIGtleQorCSAqICAgICAgICAgICAgdGhlIGtleSBmb3IgdGhlIG1lc3NhZ2UKKwkgKiBAcmV0dXJuIHRoZSBzdHJpbmcgdGhhdCBtYXRjaGVzIHRoZSBrZXkKKwkgKi8KKwlwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRTdHJpbmcoZmluYWwgU3RyaW5nIGtleSkgeworCQl0cnkgeworCQkJcmV0dXJuIFJFU09VUkNFX0JVTkRMRS5nZXRTdHJpbmcoa2V5KTsKKwkJfSBjYXRjaCAoZmluYWwgTWlzc2luZ1Jlc291cmNlRXhjZXB0aW9uIGUpIHsKKwkJCXJldHVybiAnIScgKyBrZXkgKyAnISc7CisJCX0KKwl9IC8vIGdldFN0cmluZworfSAvLyBEaXNlYXNlV2l6YXJkTWVzc2FnZXMKZGlmZiAtLWdpdCBhL21vZGVscy9wb3B1bGF0aW9ucy9vcmcuZWNsaXBzZS5zdGVtLnVpLnBvcHVsYXRpb25tb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvcG9wdWxhdGlvbm1vZGVscy9zdGFuZGFyZC93aXphcmRzL1N0YW5kYXJkUG9wdWxhdGlvbkluaXRpYWxpemVyUHJvcGVydHlFZGl0b3IuamF2YSBiL21vZGVscy9wb3B1bGF0aW9ucy9vcmcuZWNsaXBzZS5zdGVtLnVpLnBvcHVsYXRpb25tb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvcG9wdWxhdGlvbm1vZGVscy9zdGFuZGFyZC93aXphcmRzL1N0YW5kYXJkUG9wdWxhdGlvbkluaXRpYWxpemVyUHJvcGVydHlFZGl0b3IuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNzNlNWVmCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL3BvcHVsYXRpb25zL29yZy5lY2xpcHNlLnN0ZW0udWkucG9wdWxhdGlvbm1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9wb3B1bGF0aW9ubW9kZWxzL3N0YW5kYXJkL3dpemFyZHMvU3RhbmRhcmRQb3B1bGF0aW9uSW5pdGlhbGl6ZXJQcm9wZXJ0eUVkaXRvci5qYXZhCkBAIC0wLDAgKzEsMTMwIEBACisvLyBTdGFuZGFyZERpc2Vhc2VNb2RlbFByb3BlcnR5RWRpdG9yLmphdmEKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS51aS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLndpemFyZHM7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTAgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgamF2YS51dGlsLk1hcDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FU3RydWN0dXJhbEZlYXR1cmU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLlBvcHVsYXRpb25Jbml0aWFsaXplcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmRQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZFBvcHVsYXRpb25Jbml0aWFsaXplcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnVpLnBvcHVsYXRpb25tb2RlbHMuYWRhcHRlcnMuUG9wdWxhdGlvbkluaXRpYWxpemVyUHJvcGVydHlFZGl0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5Nb2RpZnlMaXN0ZW5lcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5CdXR0b247CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlRleHQ7CisKKy8qKgorICogVGhpcyBjbGFzcyBpcyBhIHtAbGluayBDb21wb3NpdGV9IHRoYXQgcHJlc2VudHMgdGhlIHByb3BlcnRpZXMgb2YgYQorICoge0BsaW5rIFBvcHVsYXRpb25Jbml0aWFsaXplcn0gZm9yIGVkaXRpbmcuCisgKi8KK3B1YmxpYyBjbGFzcyBTdGFuZGFyZFBvcHVsYXRpb25Jbml0aWFsaXplclByb3BlcnR5RWRpdG9yIGV4dGVuZHMgUG9wdWxhdGlvbkluaXRpYWxpemVyUHJvcGVydHlFZGl0b3IgeworCQorCS8qKgorCSAqIENyZWF0ZSB0aGUgY29tcG9zaXRlCisJICogCisJICogQHBhcmFtIHBhcmVudAorCSAqIEBwYXJhbSBzdHlsZQorCSAqIEBwYXJhbSBwcm9qZWN0VmFsaWRhdG9yCisJICovCisJcHVibGljIFN0YW5kYXJkUG9wdWxhdGlvbkluaXRpYWxpemVyUHJvcGVydHlFZGl0b3IoZmluYWwgQ29tcG9zaXRlIHBhcmVudCwgZmluYWwgaW50IHN0eWxlLAorCQkJZmluYWwgUG9wdWxhdGlvbkluaXRpYWxpemVyIHBvcHVsYXRpb25Jbml0aWFsaXplciwKKwkJCWZpbmFsIE1vZGlmeUxpc3RlbmVyIHByb2plY3RWYWxpZGF0b3IsIElQcm9qZWN0IHByb2plY3QpIHsKKwkJc3VwZXIocGFyZW50LCBzdHlsZSwgcG9wdWxhdGlvbkluaXRpYWxpemVyLCBwcm9qZWN0VmFsaWRhdG9yLCBwcm9qZWN0KTsKKwkJCisJfSAvLyBTdGFuZGFyZFBvcHVsYXRpb25Jbml0aWFsaXplclByb3BlcnR5RWRpdG9yCisKKwkvKioKKwkgKiBAcGFyYW0gZGlzZWFzZU1vZGVsCisJICogICAgICAgICAgICB0aGUge0BsaW5rIERpc2Vhc2VNb2RlbH0gaW5zdGFuY2UgdG8gcG9wdWxhdGUuCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgcG9wdWxhdGUoZmluYWwgUG9wdWxhdGlvbkluaXRpYWxpemVyIHBvcHVsYXRpb25Jbml0aWFsaXplcikgeworCQlzdXBlci5wb3B1bGF0ZShwb3B1bGF0aW9uSW5pdGlhbGl6ZXIpOworCQkKKwkJZm9yIChmaW5hbCBNYXAuRW50cnk8RVN0cnVjdHVyYWxGZWF0dXJlLCBUZXh0PiBlbnRyeSA6IG1hcC5lbnRyeVNldCgpKSB7CisJCQlzd2l0Y2ggKGVudHJ5LmdldEtleSgpLmdldEZlYXR1cmVJRCgpKSB7CisJCQljYXNlIFN0YW5kYXJkUGFja2FnZS5QT1BVTEFUSU9OX0lOSVRJQUxJWkVSX19QT1BVTEFUSU9OX0lERU5USUZJRVI6CisJCQkJKChQb3B1bGF0aW9uSW5pdGlhbGl6ZXIpcG9wdWxhdGlvbkluaXRpYWxpemVyKS5zZXRQb3B1bGF0aW9uSWRlbnRpZmllcihlbnRyeS5nZXRWYWx1ZSgpLmdldFRleHQoKSk7CisJCQkJYnJlYWs7CisJCQljYXNlIFN0YW5kYXJkUGFja2FnZS5TVEFOREFSRF9QT1BVTEFUSU9OX0lOSVRJQUxJWkVSX19JTkRJVklEVUFMUzoKKwkJCQkoKFN0YW5kYXJkUG9wdWxhdGlvbkluaXRpYWxpemVyKXBvcHVsYXRpb25Jbml0aWFsaXplcikKKwkJCQkJCS5zZXRJbmRpdmlkdWFscygoRG91YmxlLnBhcnNlRG91YmxlKGVudHJ5LmdldFZhbHVlKCkuZ2V0VGV4dCgpLnRyaW0oKSkpKTsKKwkJCQlicmVhazsKKwkJCWRlZmF1bHQ6CisJCQkJYnJlYWs7CisJCQl9IC8vIHN3aXRjaAorCQl9IC8vIGZvciBlYWNoIE1hcC5lbnRyeQorCisJCWZvciAoZmluYWwgTWFwLkVudHJ5PEVTdHJ1Y3R1cmFsRmVhdHVyZSwgQnV0dG9uPiBlbnRyeSA6IGJvb2xlYW5NYXAuZW50cnlTZXQoKSkgeworCQkJc3dpdGNoIChlbnRyeS5nZXRLZXkoKS5nZXRGZWF0dXJlSUQoKSkgeworCQkJY2FzZSBTdGFuZGFyZFBhY2thZ2UuU1RBTkRBUkRfUE9QVUxBVElPTl9JTklUSUFMSVpFUl9fVVNFX0RFTlNJVFk6CisJCQkJKChTdGFuZGFyZFBvcHVsYXRpb25Jbml0aWFsaXplcilwb3B1bGF0aW9uSW5pdGlhbGl6ZXIpLnNldFVzZURlbnNpdHkoZW50cnkuZ2V0VmFsdWUoKS5nZXRTZWxlY3Rpb24oKSk7CisJCQkJYnJlYWs7CisJCQlkZWZhdWx0OgorCQkJCWJyZWFrOworCQkJfSAvLyBzd2l0Y2gKKwkJfSAvLyBmb3IgZWFjaCBNYXAuZW50cnkKKworCX0gLy8gcG9wdWxhdGUKKworCS8qKgorCSAqIEByZXR1cm4gPGNvZGU+dHJ1ZTwvY29kZT4gaWYgdGhlIGNvbnRlbnRzIGFyZSB2YWxpZCwgPGNvZGU+ZmFsc2U8L2NvZGU+CisJICogICAgICAgICBvdGhlcndpc2UuCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIGJvb2xlYW4gdmFsaWRhdGUoKSB7CisJCWJvb2xlYW4gcmV0VmFsdWUgPSBzdXBlci52YWxpZGF0ZSgpOworCisJCWlmIChyZXRWYWx1ZSkgeworCQkJLy8gWWVzCisJCQlmaW5hbCBUZXh0IHRleHQgPSBtYXAKKwkJCQkJLmdldChTdGFuZGFyZFBhY2thZ2UuTGl0ZXJhbHMuUE9QVUxBVElPTl9JTklUSUFMSVpFUl9fUE9QVUxBVElPTl9JREVOVElGSUVSKTsKKwkJCXJldFZhbHVlID0gIXRleHQuZ2V0VGV4dCgpLmVxdWFscygiIik7IC8vJE5PTi1OTFMtMSQKKwkJCS8vIG5vdGhpbmc/CisJCQlpZiAoIXJldFZhbHVlKSB7CisJCQkJLy8gWWVzCisJCQkJZXJyb3JNZXNzYWdlID0gUG9wdWxhdGlvbk1vZGVsV2l6YXJkTWVzc2FnZXMuZ2V0U3RyaW5nKCJORGl6V2l6RXJyMTUiKTsgLy8kTk9OLU5MUy0xJAorCQkJfSAvLyBpZgorCQl9IC8vIGlmCisKKwkJLy8gCisJCWlmIChyZXRWYWx1ZSkgeworCQkJLy8gWWVzCisJCQlmaW5hbCBUZXh0IHRleHQgPSBtYXAKKwkJCQkJLmdldChTdGFuZGFyZFBhY2thZ2UuTGl0ZXJhbHMuU1RBTkRBUkRfUE9QVUxBVElPTl9JTklUSUFMSVpFUl9fSU5ESVZJRFVBTFMpOworCQkJaWYodGV4dCAhPSBudWxsKSB7CisJCQkJcmV0VmFsdWUgPSAhdGV4dC5nZXRUZXh0KCkuZXF1YWxzKCIiKTsgLy8kTk9OLU5MUy0xJAorCQkJCS8vIG5vdGhpbmc/CisJCQkJaWYgKCFyZXRWYWx1ZSkgeworCQkJCQkvLyBZZXMKKwkJCQkJZXJyb3JNZXNzYWdlID0gUG9wdWxhdGlvbk1vZGVsV2l6YXJkTWVzc2FnZXMuZ2V0U3RyaW5nKCJORGl6V2l6RXJyMTYiKTsgLy8kTk9OLU5MUy0xJAorCQkJCX0gLy8gaWYKKwkJCQllbHNlIHsKKwkJCQkJLy8gTm8KKwkJCQkJLy8gSXMgaXQgYSB2YWxpZCB2YWx1ZSA+IDA/CisJCQkJCXJldFZhbHVlID0gaXNWYWxpZFZhbHVlKHRleHQuZ2V0VGV4dCgpLCAwLjApOworCQkJCQlpZiAoIXJldFZhbHVlKSB7CisJCQkJCQkvLyBObworCQkJCQkJZXJyb3JNZXNzYWdlID0gUG9wdWxhdGlvbk1vZGVsV2l6YXJkTWVzc2FnZXMKKwkJCQkJCQkJLmdldFN0cmluZygiTkRpeldpekVycjE3Iik7IC8vJE5PTi1OTFMtMSQKKwkJCQkJfSAvLyBpZgorCQkJCX0KKwkJCX0KKwkJfSAKKwkJCQkKKwkJcmV0dXJuIHJldFZhbHVlOworCX0gLy8gdmFsaWRhdGUKKworfSAvLyBTdGFuZGFyZFByb3BlcnR5TW9kZWxQcm9wZXJ0eUVkaXRvcgpkaWZmIC0tZ2l0IGEvbW9kZWxzL3BvcHVsYXRpb25zL29yZy5lY2xpcHNlLnN0ZW0udWkucG9wdWxhdGlvbm1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9wb3B1bGF0aW9ubW9kZWxzL3N0YW5kYXJkL3dpemFyZHMvU3RhbmRhcmRQb3B1bGF0aW9uSW5pdGlhbGl6ZXJQcm9wZXJ0eUVkaXRvckFkYXB0ZXIuamF2YSBiL21vZGVscy9wb3B1bGF0aW9ucy9vcmcuZWNsaXBzZS5zdGVtLnVpLnBvcHVsYXRpb25tb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvcG9wdWxhdGlvbm1vZGVscy9zdGFuZGFyZC93aXphcmRzL1N0YW5kYXJkUG9wdWxhdGlvbkluaXRpYWxpemVyUHJvcGVydHlFZGl0b3JBZGFwdGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjIzYmY0OAotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9wb3B1bGF0aW9ucy9vcmcuZWNsaXBzZS5zdGVtLnVpLnBvcHVsYXRpb25tb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvcG9wdWxhdGlvbm1vZGVscy9zdGFuZGFyZC93aXphcmRzL1N0YW5kYXJkUG9wdWxhdGlvbkluaXRpYWxpemVyUHJvcGVydHlFZGl0b3JBZGFwdGVyLmphdmEKQEAgLTAsMCArMSwzMSBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnVpLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQud2l6YXJkczsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAxMCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3Q7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLlBvcHVsYXRpb25Jbml0aWFsaXplcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnVpLnBvcHVsYXRpb25tb2RlbHMuYWRhcHRlcnMuUG9wdWxhdGlvbkluaXRpYWxpemVyUHJvcGVydHlFZGl0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS51aS5wb3B1bGF0aW9ubW9kZWxzLmFkYXB0ZXJzLlBvcHVsYXRpb25Jbml0aWFsaXplclByb3BlcnR5RWRpdG9yQWRhcHRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLk1vZGlmeUxpc3RlbmVyOworCitwdWJsaWMgY2xhc3MgU3RhbmRhcmRQb3B1bGF0aW9uSW5pdGlhbGl6ZXJQcm9wZXJ0eUVkaXRvckFkYXB0ZXIgZXh0ZW5kcworCQlQb3B1bGF0aW9uSW5pdGlhbGl6ZXJQcm9wZXJ0eUVkaXRvckFkYXB0ZXIgeworCisJQE92ZXJyaWRlCisJcHVibGljIFBvcHVsYXRpb25Jbml0aWFsaXplclByb3BlcnR5RWRpdG9yIGNyZWF0ZVBvcHVsYXRpb25Jbml0aWFsaXplclByb3BlcnR5RWRpdG9yKAorCQkJZmluYWwgUG9wdWxhdGlvbkluaXRpYWxpemVyUHJvcGVydHlDb21wb3NpdGUgcG9wdWxhdGlvbkluaXRpYWxpemVyUHJvcGVydHlDb21wb3NpdGUsCisJCQlmaW5hbCBpbnQgc3R5bGUsIGZpbmFsIE1vZGlmeUxpc3RlbmVyIHByb2plY3RWYWxpZGF0b3IsIElQcm9qZWN0IHByb2plY3QpIHsKKwkJcmV0dXJuIG5ldyBTdGFuZGFyZFBvcHVsYXRpb25Jbml0aWFsaXplclByb3BlcnR5RWRpdG9yKAorCQkJCXBvcHVsYXRpb25Jbml0aWFsaXplclByb3BlcnR5Q29tcG9zaXRlLCBzdHlsZSwKKwkJCQkoUG9wdWxhdGlvbkluaXRpYWxpemVyKSBnZXRUYXJnZXQoKSwgcHJvamVjdFZhbGlkYXRvciwgcHJvamVjdCk7CisJfSAKKworfSAKZGlmZiAtLWdpdCBhL21vZGVscy9wb3B1bGF0aW9ucy9vcmcuZWNsaXBzZS5zdGVtLnVpLnBvcHVsYXRpb25tb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvcG9wdWxhdGlvbm1vZGVscy9zdGFuZGFyZC93aXphcmRzL1N0YW5kYXJkUG9wdWxhdGlvbkluaXRpYWxpemVyUHJvcGVydHlFZGl0b3JBZGFwdGVyRmFjdG9yeS5qYXZhIGIvbW9kZWxzL3BvcHVsYXRpb25zL29yZy5lY2xpcHNlLnN0ZW0udWkucG9wdWxhdGlvbm1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9wb3B1bGF0aW9ubW9kZWxzL3N0YW5kYXJkL3dpemFyZHMvU3RhbmRhcmRQb3B1bGF0aW9uSW5pdGlhbGl6ZXJQcm9wZXJ0eUVkaXRvckFkYXB0ZXJGYWN0b3J5LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjFiYmY4MwotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9wb3B1bGF0aW9ucy9vcmcuZWNsaXBzZS5zdGVtLnVpLnBvcHVsYXRpb25tb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvcG9wdWxhdGlvbm1vZGVscy9zdGFuZGFyZC93aXphcmRzL1N0YW5kYXJkUG9wdWxhdGlvbkluaXRpYWxpemVyUHJvcGVydHlFZGl0b3JBZGFwdGVyRmFjdG9yeS5qYXZhCkBAIC0wLDAgKzEsNDQgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS51aS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLndpemFyZHM7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTAgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LkFkYXB0ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLnV0aWwuU3RhbmRhcmRBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnVpLnBvcHVsYXRpb25tb2RlbHMuYWRhcHRlcnMuUG9wdWxhdGlvbkluaXRpYWxpemVyUHJvcGVydHlFZGl0b3JBZGFwdGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udWkucG9wdWxhdGlvbm1vZGVscy5hZGFwdGVycy5Qb3B1bGF0aW9uSW5pdGlhbGl6ZXJQcm9wZXJ0eUVkaXRvckFkYXB0ZXJGYWN0b3J5OworCitwdWJsaWMgY2xhc3MgU3RhbmRhcmRQb3B1bGF0aW9uSW5pdGlhbGl6ZXJQcm9wZXJ0eUVkaXRvckFkYXB0ZXJGYWN0b3J5IGV4dGVuZHMKKwkJU3RhbmRhcmRBZGFwdGVyRmFjdG9yeSBpbXBsZW1lbnRzCisJCVBvcHVsYXRpb25Jbml0aWFsaXplclByb3BlcnR5RWRpdG9yQWRhcHRlckZhY3RvcnkgeworCisJcHVibGljIFN0YW5kYXJkUG9wdWxhdGlvbkluaXRpYWxpemVyUHJvcGVydHlFZGl0b3JBZGFwdGVyRmFjdG9yeSgpIHsKKwkJc3VwZXIoKTsKKwkJUG9wdWxhdGlvbkluaXRpYWxpemVyUHJvcGVydHlFZGl0b3JBZGFwdGVyRmFjdG9yeS5JTlNUQU5DRQorCQkJCS5hZGRBZGFwdGVyRmFjdG9yeSh0aGlzKTsKKwl9CisKKwlAT3ZlcnJpZGUKKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVTdGFuZGFyZFBvcHVsYXRpb25Jbml0aWFsaXplckFkYXB0ZXIoKSB7CisJCXJldHVybiBuZXcgU3RhbmRhcmRQb3B1bGF0aW9uSW5pdGlhbGl6ZXJQcm9wZXJ0eUVkaXRvckFkYXB0ZXIoKTsKKwl9CisKKwlAT3ZlcnJpZGUKKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVZZXRpUG9wdWxhdGlvbkluaXRpYWxpemVyQWRhcHRlcigpIHsKKwkJcmV0dXJuIG5ldyBTdGFuZGFyZFBvcHVsYXRpb25Jbml0aWFsaXplclByb3BlcnR5RWRpdG9yQWRhcHRlcigpOworCX0KKwkKKwlAT3ZlcnJpZGUKKwlwdWJsaWMgYm9vbGVhbiBpc0ZhY3RvcnlGb3JUeXBlKE9iamVjdCB0eXBlKSB7CisJCXJldHVybiB0eXBlID09IFBvcHVsYXRpb25Jbml0aWFsaXplclByb3BlcnR5RWRpdG9yQWRhcHRlci5jbGFzcworCQkJCXx8IHN1cGVyLmlzRmFjdG9yeUZvclR5cGUodHlwZSk7CisJfQorCit9IC8vIFN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsUHJvcGVydHlFZGl0b3JBZGFwdGVyRmFjdG9yeQpkaWZmIC0tZ2l0IGEvbW9kZWxzL3BvcHVsYXRpb25zL29yZy5lY2xpcHNlLnN0ZW0udWkucG9wdWxhdGlvbm1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9wb3B1bGF0aW9ubW9kZWxzL3N0YW5kYXJkL3dpemFyZHMvU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxQcm9wZXJ0eUVkaXRvci5qYXZhIGIvbW9kZWxzL3BvcHVsYXRpb25zL29yZy5lY2xpcHNlLnN0ZW0udWkucG9wdWxhdGlvbm1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9wb3B1bGF0aW9ubW9kZWxzL3N0YW5kYXJkL3dpemFyZHMvU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxQcm9wZXJ0eUVkaXRvci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQwNzcxYzYKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvcG9wdWxhdGlvbnMvb3JnLmVjbGlwc2Uuc3RlbS51aS5wb3B1bGF0aW9ubW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3BvcHVsYXRpb25tb2RlbHMvc3RhbmRhcmQvd2l6YXJkcy9TdGFuZGFyZFBvcHVsYXRpb25Nb2RlbFByb3BlcnR5RWRpdG9yLmphdmEKQEAgLTAsMCArMSw4NTggQEAKKy8vIFN0YW5kYXJkRGlzZWFzZU1vZGVsUHJvcGVydHlFZGl0b3IuamF2YQorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnVpLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQud2l6YXJkczsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNywgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OworCitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3Q7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLkFnZUdyb3VwOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5BZ2luZ1BvcHVsYXRpb25Nb2RlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuRGVtb2dyYXBoaWNQb3B1bGF0aW9uTW9kZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLk1vc3F1aXRvUG9wdWxhdGlvbk1vZGVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5Qb3B1bGF0aW9uR3JvdXA7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLlBvcHVsYXRpb25Nb2RlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuU2Vhc29uYWxQb3B1bGF0aW9uTW9kZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmRQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZFBvcHVsYXRpb25Nb2RlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnVpLnBvcHVsYXRpb25tb2RlbHMuYWRhcHRlcnMuUG9wdWxhdGlvbk1vZGVsUHJvcGVydHlFZGl0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LlNXVDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLk1vZGlmeUV2ZW50OworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuTW9kaWZ5TGlzdGVuZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5TZWxlY3Rpb25FdmVudDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLlNlbGVjdGlvbkxpc3RlbmVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5sYXlvdXQuR3JpZERhdGE7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5HcmlkTGF5b3V0OworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkJ1dHRvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuRXZlbnQ7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuR3JvdXA7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuTGFiZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuTGlzdGVuZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuVGV4dDsKKworLyoqCisgKiBUaGlzIGNsYXNzIGlzIGEge0BsaW5rIENvbXBvc2l0ZX0gdGhhdCBwcmVzZW50cyB0aGUgcHJvcGVydGllcyBvZiBhCisgKiB7QGxpbmsgRGlzZWFzZU1vZGVsfSBmb3IgZWRpdGluZy4KKyAqLworcHVibGljIGNsYXNzIFN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsUHJvcGVydHlFZGl0b3IgZXh0ZW5kcworCQlQb3B1bGF0aW9uTW9kZWxQcm9wZXJ0eUVkaXRvciB7CisKKwlwcml2YXRlIEFycmF5TGlzdDxDb21wb3NpdGU+IGdyb3VwQ29tcG9zaXRlcyA9IG5ldyBBcnJheUxpc3Q8Q29tcG9zaXRlPigpOworCXByaXZhdGUgQXJyYXlMaXN0PFRleHQ+IGdyb3VwSURDb21wb3NpdGVzID0gbmV3IEFycmF5TGlzdDxUZXh0PigpOworCXByaXZhdGUgQXJyYXlMaXN0PFRleHQ+IGdyb3VwRnJhY0NvbXBvc2l0ZXMgPSBuZXcgQXJyYXlMaXN0PFRleHQ+KCk7CisJcHJpdmF0ZSBBcnJheUxpc3Q8VGV4dD4gZ3JvdXBGcm9tQWdlQ29tcG9zaXRlcyA9IG5ldyBBcnJheUxpc3Q8VGV4dD4oKTsKKwlwcml2YXRlIEFycmF5TGlzdDxUZXh0PiBncm91cFRvQWdlQ29tcG9zaXRlcyA9IG5ldyBBcnJheUxpc3Q8VGV4dD4oKTsKKwlwcml2YXRlIEFycmF5TGlzdDxUZXh0PiBncm91cERlYXRoRmFjdG9yQ29tcG9zaXRlcyA9IG5ldyBBcnJheUxpc3Q8VGV4dD4oKTsKKworCXByaXZhdGUgc3RhdGljIGRvdWJsZSBERUZBVUxUX1BPUFVMQVRJT05fRlJBQ1RJT04gPSAxLjA7CisJcHJpdmF0ZSBzdGF0aWMgaW50IERFRkFVTFRfQUdFR1JPVVBfUkFOR0UgPSAyMDsKKwlwcml2YXRlIHN0YXRpYyBkb3VibGUgREVGQVVMVF9ERUFUSF9GQUNUT1IgPSAxLjA7CisKKwlHcm91cCBhbGxHcm91cHM7CisKKwlTdHJpbmcgcG9wdWxhdGlvbklEOworCisJLyoqCisJICogQ3JlYXRlIHRoZSBjb21wb3NpdGUKKwkgKiAKKwkgKiBAcGFyYW0gcGFyZW50CisJICogQHBhcmFtIHN0eWxlCisJICogQHBhcmFtIHByb2plY3RWYWxpZGF0b3IKKwkgKi8KKwlwdWJsaWMgU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxQcm9wZXJ0eUVkaXRvcihmaW5hbCBDb21wb3NpdGUgcGFyZW50LAorCQkJZmluYWwgaW50IHN0eWxlLCBmaW5hbCBQb3B1bGF0aW9uTW9kZWwgcG9wdWxhdGlvbk1vZGVsLAorCQkJZmluYWwgTW9kaWZ5TGlzdGVuZXIgcHJvamVjdFZhbGlkYXRvciwgSVByb2plY3QgcHJvamVjdCkgeworCQlzdXBlcihwYXJlbnQsIHN0eWxlLCBwb3B1bGF0aW9uTW9kZWwsIHByb2plY3RWYWxpZGF0b3IsIHByb2plY3QpOworCQlwb3B1bGF0aW9uSUQgPSBwb3B1bGF0aW9uTW9kZWwuZ2V0UG9wdWxhdGlvbklkZW50aWZpZXIoKTsKKworCQlpZiAocG9wdWxhdGlvbk1vZGVsIGluc3RhbmNlb2YgRGVtb2dyYXBoaWNQb3B1bGF0aW9uTW9kZWwKKwkJCQkmJiAhKHBvcHVsYXRpb25Nb2RlbCBpbnN0YW5jZW9mIEFnaW5nUG9wdWxhdGlvbk1vZGVsKSkgeworCQkJYWxsR3JvdXBzID0gbmV3IEdyb3VwKHRoaXMsIFNXVC5OT05FKTsKKwkJCWFsbEdyb3Vwcy5zZXRMYXlvdXQobmV3IEdyaWRMYXlvdXQoMSwgdHJ1ZSkpOworCQkJYWxsR3JvdXBzLnNldExheW91dERhdGEobmV3IEdyaWREYXRhKEdyaWREYXRhLkZJTEwsCisJCQkJCUdyaWREYXRhLkNFTlRFUiwgdHJ1ZSwgZmFsc2UsIDMsIDEpKTsKKworCQkJYWRkUG9wdWxhdGlvbkdyb3VwRmllbGQoYWxsR3JvdXBzLCBwcm9qZWN0VmFsaWRhdG9yKTsKKworCQkJZmluYWwgQnV0dG9uIGFkZEJ1dHRvbiA9IG5ldyBCdXR0b24odGhpcywgU1dULk5PTkUpOworCQkJYWRkQnV0dG9uLnNldFRleHQoUG9wdWxhdGlvbk1vZGVsV2l6YXJkTWVzc2FnZXMKKwkJCQkJLmdldFN0cmluZygiYWRkR3JvdXAiKSk7CisJCQlhZGRCdXR0b24uc2V0VG9vbFRpcFRleHQoUG9wdWxhdGlvbk1vZGVsV2l6YXJkTWVzc2FnZXMKKwkJCQkJLmdldFN0cmluZygiYWRkR3JvdXBUVCIpKTsKKwkJCWFkZEJ1dHRvbi5zZXRMYXlvdXREYXRhKG5ldyBHcmlkRGF0YShHcmlkRGF0YS5CRUdJTk5JTkcsCisJCQkJCUdyaWREYXRhLkJFR0lOTklORywgdHJ1ZSwgdHJ1ZSwgMywgMSkpOworCQkJYWRkQnV0dG9uLmFkZFNlbGVjdGlvbkxpc3RlbmVyKG5ldyBTZWxlY3Rpb25MaXN0ZW5lcigpIHsKKworCQkJCUBPdmVycmlkZQorCQkJCXB1YmxpYyB2b2lkIHdpZGdldFNlbGVjdGVkKFNlbGVjdGlvbkV2ZW50IGFyZzApIHsKKwkJCQkJYWRkUG9wdWxhdGlvbkdyb3VwRmllbGQoYWxsR3JvdXBzLCBwcm9qZWN0VmFsaWRhdG9yKTsKKwkJCQkJdXBkYXRlR3VpKCk7CisJCQkJfQorCisJCQkJQE92ZXJyaWRlCisJCQkJcHVibGljIHZvaWQgd2lkZ2V0RGVmYXVsdFNlbGVjdGVkKFNlbGVjdGlvbkV2ZW50IGFyZzApIHsKKwkJCQl9CisJCQl9KTsKKwkJfSBlbHNlIGlmIChwb3B1bGF0aW9uTW9kZWwgaW5zdGFuY2VvZiBBZ2luZ1BvcHVsYXRpb25Nb2RlbCkgeworCQkJZmluYWwgQnV0dG9uIGhhc01heEFnZUJ1dHRvbiA9IGJvb2xlYW5NYXAKKwkJCQkJLmdldChTdGFuZGFyZFBhY2thZ2UuTGl0ZXJhbHMuQUdJTkdfUE9QVUxBVElPTl9NT0RFTF9fSEFTX01BWF9BR0UpOworCisJCQloYXNNYXhBZ2VCdXR0b24uYWRkTGlzdGVuZXIoU1dULlNlbGVjdGlvbiwgbmV3IExpc3RlbmVyKCkgeworCisJCQkJQE92ZXJyaWRlCisJCQkJcHVibGljIHZvaWQgaGFuZGxlRXZlbnQoRXZlbnQgZXZlbnQpIHsKKwkJCQkJdXBkYXRlVGV4dEZpZWxkcygpOworCQkJCX0KKwkJCX0pOworCisJCQlhbGxHcm91cHMgPSBuZXcgR3JvdXAodGhpcywgU1dULk5PTkUpOworCQkJYWxsR3JvdXBzLnNldExheW91dChuZXcgR3JpZExheW91dCgxLCB0cnVlKSk7CisJCQlhbGxHcm91cHMuc2V0TGF5b3V0RGF0YShuZXcgR3JpZERhdGEoR3JpZERhdGEuRklMTCwKKwkJCQkJR3JpZERhdGEuQ0VOVEVSLCB0cnVlLCBmYWxzZSwgMywgMSkpOworCisJCQlhZGRBZ2VHcm91cEZpZWxkKGFsbEdyb3VwcywgcHJvamVjdFZhbGlkYXRvcik7CisKKwkJCWZpbmFsIEJ1dHRvbiBhZGRCdXR0b24gPSBuZXcgQnV0dG9uKHRoaXMsIFNXVC5OT05FKTsKKwkJCWFkZEJ1dHRvbi5zZXRUZXh0KFBvcHVsYXRpb25Nb2RlbFdpemFyZE1lc3NhZ2VzCisJCQkJCS5nZXRTdHJpbmcoImFkZEdyb3VwIikpOworCQkJYWRkQnV0dG9uLnNldFRvb2xUaXBUZXh0KFBvcHVsYXRpb25Nb2RlbFdpemFyZE1lc3NhZ2VzCisJCQkJCS5nZXRTdHJpbmcoImFkZEdyb3VwVFQiKSk7CisJCQlhZGRCdXR0b24uc2V0TGF5b3V0RGF0YShuZXcgR3JpZERhdGEoR3JpZERhdGEuQkVHSU5OSU5HLAorCQkJCQlHcmlkRGF0YS5CRUdJTk5JTkcsIHRydWUsIHRydWUsIDMsIDEpKTsKKwkJCWFkZEJ1dHRvbi5hZGRTZWxlY3Rpb25MaXN0ZW5lcihuZXcgU2VsZWN0aW9uTGlzdGVuZXIoKSB7CisKKwkJCQlAT3ZlcnJpZGUKKwkJCQlwdWJsaWMgdm9pZCB3aWRnZXRTZWxlY3RlZChTZWxlY3Rpb25FdmVudCBhcmcwKSB7CisJCQkJCWFkZEFnZUdyb3VwRmllbGQoYWxsR3JvdXBzLCBwcm9qZWN0VmFsaWRhdG9yKTsKKwkJCQkJdXBkYXRlR3VpKCk7CisJCQkJfQorCisJCQkJQE92ZXJyaWRlCisJCQkJcHVibGljIHZvaWQgd2lkZ2V0RGVmYXVsdFNlbGVjdGVkKFNlbGVjdGlvbkV2ZW50IGFyZzApIHsKKwkJCQl9CisJCQl9KTsKKworCQkJZmluYWwgQnV0dG9uIGZyYWN0aW9uc0J1dHRvbiA9IG5ldyBCdXR0b24odGhpcywgU1dULk5PTkUpOworCQkJZnJhY3Rpb25zQnV0dG9uLnNldFRleHQoUG9wdWxhdGlvbk1vZGVsV2l6YXJkTWVzc2FnZXMKKwkJCQkJLmdldFN0cmluZygic2V0RnJhY3Rpb25zIikpOworCQkJZnJhY3Rpb25zQnV0dG9uLnNldFRvb2xUaXBUZXh0KFBvcHVsYXRpb25Nb2RlbFdpemFyZE1lc3NhZ2VzCisJCQkJCS5nZXRTdHJpbmcoInNldEZyYWN0aW9uc1RUIikpOworCQkJZnJhY3Rpb25zQnV0dG9uLnNldExheW91dERhdGEobmV3IEdyaWREYXRhKEdyaWREYXRhLkJFR0lOTklORywKKwkJCQkJR3JpZERhdGEuQ0VOVEVSLCB0cnVlLCB0cnVlLCAzLCAxKSk7CisJCQlmcmFjdGlvbnNCdXR0b24uYWRkU2VsZWN0aW9uTGlzdGVuZXIobmV3IFNlbGVjdGlvbkxpc3RlbmVyKCkgeworCisJCQkJQE92ZXJyaWRlCisJCQkJcHVibGljIHZvaWQgd2lkZ2V0U2VsZWN0ZWQoU2VsZWN0aW9uRXZlbnQgZSkgeworCQkJCQlzZXRGcmFjdGlvblRvRXF1aWxpYnJpdW0oKTsKKwkJCQl9CisKKwkJCQlAT3ZlcnJpZGUKKwkJCQlwdWJsaWMgdm9pZCB3aWRnZXREZWZhdWx0U2VsZWN0ZWQoU2VsZWN0aW9uRXZlbnQgZSkgeworCQkJCX0KKwkJCX0pOworCisJCQlmaW5hbCBCdXR0b24gZGVhdGhSYXRlc0J1dHRvbiA9IG5ldyBCdXR0b24odGhpcywgU1dULk5PTkUpOworCQkJZGVhdGhSYXRlc0J1dHRvbi5zZXRUZXh0KFBvcHVsYXRpb25Nb2RlbFdpemFyZE1lc3NhZ2VzCisJCQkJCS5nZXRTdHJpbmcoInNldERlYXRoUmF0ZXMiKSk7CisJCQlkZWF0aFJhdGVzQnV0dG9uLnNldFRvb2xUaXBUZXh0KFBvcHVsYXRpb25Nb2RlbFdpemFyZE1lc3NhZ2VzCisJCQkJCS5nZXRTdHJpbmcoInNldERlYXRoUmF0ZXNUVCIpKTsKKwkJCWRlYXRoUmF0ZXNCdXR0b24uc2V0TGF5b3V0RGF0YShuZXcgR3JpZERhdGEoR3JpZERhdGEuQkVHSU5OSU5HLAorCQkJCQlHcmlkRGF0YS5DRU5URVIsIHRydWUsIHRydWUsIDMsIDEpKTsKKwkJCWRlYXRoUmF0ZXNCdXR0b24uYWRkU2VsZWN0aW9uTGlzdGVuZXIobmV3IFNlbGVjdGlvbkxpc3RlbmVyKCkgeworCisJCQkJQE92ZXJyaWRlCisJCQkJcHVibGljIHZvaWQgd2lkZ2V0U2VsZWN0ZWQoU2VsZWN0aW9uRXZlbnQgZSkgeworCQkJCQlzZXREZWF0aFJhdGVzVG9FcXVpbGlicml1bSgpOworCQkJCX0KKworCQkJCUBPdmVycmlkZQorCQkJCXB1YmxpYyB2b2lkIHdpZGdldERlZmF1bHRTZWxlY3RlZChTZWxlY3Rpb25FdmVudCBlKSB7CisJCQkJfQorCQkJfSk7CisJCX0KKwl9IC8vIFN0YW5kYXJkRGlzZWFzZU1vZGVsUHJvcGVydHlFZGl0b3IKKworCXByaXZhdGUgdm9pZCBhZGRQb3B1bGF0aW9uR3JvdXBGaWVsZChmaW5hbCBDb21wb3NpdGUgcGFyZW50LAorCQkJZmluYWwgTW9kaWZ5TGlzdGVuZXIgcHJvamVjdFZhbGlkYXRvcikgeworCQlHcm91cCBncm91cEluZm8gPSBuZXcgR3JvdXAocGFyZW50LCBTV1QuQk9SREVSKTsKKwkJZ3JvdXBJbmZvLnNldExheW91dChuZXcgR3JpZExheW91dCgxMSwgZmFsc2UpKTsKKwkJZ3JvdXBJbmZvLnNldExheW91dERhdGEobmV3IEdyaWREYXRhKEdyaWREYXRhLkZJTEwsIEdyaWREYXRhLkNFTlRFUiwKKwkJCQl0cnVlLCBmYWxzZSkpOworCQlncm91cENvbXBvc2l0ZXMuYWRkKGdyb3VwSW5mbyk7CisKKwkJZmluYWwgQnV0dG9uIHJlbW92ZUJ1dHRvbiA9IG5ldyBCdXR0b24oZ3JvdXBJbmZvLCBTV1QuTk9ORSk7CisJCXJlbW92ZUJ1dHRvbi5zZXRUZXh0KFBvcHVsYXRpb25Nb2RlbFdpemFyZE1lc3NhZ2VzCisJCQkJLmdldFN0cmluZygicmVtb3ZlR3JvdXAiKSk7CisJCXJlbW92ZUJ1dHRvbi5zZXRUb29sVGlwVGV4dChQb3B1bGF0aW9uTW9kZWxXaXphcmRNZXNzYWdlcworCQkJCS5nZXRTdHJpbmcoInJlbW92ZUdyb3VwVFQiKSk7CisJCXJlbW92ZUJ1dHRvbi5zZXRMYXlvdXREYXRhKG5ldyBHcmlkRGF0YShHcmlkRGF0YS5CRUdJTk5JTkcsCisJCQkJR3JpZERhdGEuQ0VOVEVSLCB0cnVlLCBmYWxzZSkpOworCQlyZW1vdmVCdXR0b24uYWRkU2VsZWN0aW9uTGlzdGVuZXIobmV3IFNlbGVjdGlvbkxpc3RlbmVyKCkgeworCisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyB2b2lkIHdpZGdldFNlbGVjdGVkKFNlbGVjdGlvbkV2ZW50IGFyZzApIHsKKwkJCQlpbnQgaW5kID0gZ3JvdXBDb21wb3NpdGVzLmluZGV4T2YocmVtb3ZlQnV0dG9uLmdldFBhcmVudCgpKTsKKworCQkJCWdyb3VwQ29tcG9zaXRlcy5yZW1vdmUoaW5kKTsKKwkJCQlncm91cEZyYWNDb21wb3NpdGVzLnJlbW92ZShpbmQpOworCQkJCWdyb3VwSURDb21wb3NpdGVzLnJlbW92ZShpbmQpOworCisJCQkJcmVtb3ZlQnV0dG9uLmdldFBhcmVudCgpLmRpc3Bvc2UoKTsKKwkJCQl1cGRhdGVHdWkoKTsKKwkJCX0KKworCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgdm9pZCB3aWRnZXREZWZhdWx0U2VsZWN0ZWQoU2VsZWN0aW9uRXZlbnQgYXJnMCkgeworCQkJfQorCQl9KTsKKworCQlMYWJlbCBsYWJlbDsKKwkJVGV4dCB0ZXh0OworCisJCWxhYmVsID0gbmV3IExhYmVsKGdyb3VwSW5mbywgU1dULk5PTkUpOworCQlsYWJlbC5zZXRUZXh0KFBvcHVsYXRpb25Nb2RlbFdpemFyZE1lc3NhZ2VzLmdldFN0cmluZygicG9wdWxhdGlvbklkIikpOworCQlsYWJlbC5zZXRMYXlvdXREYXRhKG5ldyBHcmlkRGF0YShHcmlkRGF0YS5FTkQsIEdyaWREYXRhLkNFTlRFUiwgdHJ1ZSwKKwkJCQlmYWxzZSkpOworCisJCXRleHQgPSBuZXcgVGV4dChncm91cEluZm8sIFNXVC5CT1JERVIgfCBTV1QuVFJBSUwpOworCQl0ZXh0LnNldFRleHQocG9wdWxhdGlvbklEICsgZ3JvdXBDb21wb3NpdGVzLnNpemUoKSk7CisJCXRleHQuc2V0TGF5b3V0RGF0YShuZXcgR3JpZERhdGEoR3JpZERhdGEuRklMTCwgR3JpZERhdGEuQ0VOVEVSLCB0cnVlLAorCQkJCWZhbHNlKSk7CisJCXRleHQuYWRkTW9kaWZ5TGlzdGVuZXIocHJvamVjdFZhbGlkYXRvcik7CisJCWdyb3VwSURDb21wb3NpdGVzLmFkZCh0ZXh0KTsKKworCQlsYWJlbCA9IG5ldyBMYWJlbChncm91cEluZm8sIFNXVC5OT05FKTsKKwkJbGFiZWwuc2V0VGV4dChQb3B1bGF0aW9uTW9kZWxXaXphcmRNZXNzYWdlcworCQkJCS5nZXRTdHJpbmcoInBvcHVsYXRpb25JZEZyYWN0aW9uIikpOworCQlsYWJlbC5zZXRMYXlvdXREYXRhKG5ldyBHcmlkRGF0YShHcmlkRGF0YS5FTkQsIEdyaWREYXRhLkNFTlRFUiwgdHJ1ZSwKKwkJCQlmYWxzZSkpOworCisJCXRleHQgPSBuZXcgVGV4dChncm91cEluZm8sIFNXVC5CT1JERVIgfCBTV1QuVFJBSUwpOworCQl0ZXh0LnNldFRleHQoREVGQVVMVF9QT1BVTEFUSU9OX0ZSQUNUSU9OICsgIiIpOworCQl0ZXh0LnNldExheW91dERhdGEobmV3IEdyaWREYXRhKEdyaWREYXRhLkVORCwgR3JpZERhdGEuQ0VOVEVSLCB0cnVlLAorCQkJCWZhbHNlKSk7CisJCXRleHQuYWRkTW9kaWZ5TGlzdGVuZXIocHJvamVjdFZhbGlkYXRvcik7CisJCWdyb3VwRnJhY0NvbXBvc2l0ZXMuYWRkKHRleHQpOworCQlnZXRQYXJlbnQoKS5wYWNrKCk7CisJCWdldFBhcmVudCgpLmxheW91dCgpOworCX0KKworCXByaXZhdGUgdm9pZCBhZGRBZ2VHcm91cEZpZWxkKGZpbmFsIENvbXBvc2l0ZSBwYXJlbnQsCisJCQlmaW5hbCBNb2RpZnlMaXN0ZW5lciBwcm9qZWN0VmFsaWRhdG9yKSB7CisJCUdyb3VwIGdyb3VwSW5mbyA9IG5ldyBHcm91cChwYXJlbnQsIFNXVC5CT1JERVIpOworCQlncm91cEluZm8uc2V0TGF5b3V0KG5ldyBHcmlkTGF5b3V0KDExLCBmYWxzZSkpOworCQlncm91cEluZm8uc2V0TGF5b3V0RGF0YShuZXcgR3JpZERhdGEoR3JpZERhdGEuRklMTCwgR3JpZERhdGEuQ0VOVEVSLAorCQkJCXRydWUsIGZhbHNlKSk7CisJCWdyb3VwQ29tcG9zaXRlcy5hZGQoZ3JvdXBJbmZvKTsKKworCQlmaW5hbCBCdXR0b24gcmVtb3ZlQnV0dG9uID0gbmV3IEJ1dHRvbihncm91cEluZm8sIFNXVC5OT05FKTsKKwkJcmVtb3ZlQnV0dG9uLnNldFRleHQoUG9wdWxhdGlvbk1vZGVsV2l6YXJkTWVzc2FnZXMKKwkJCQkuZ2V0U3RyaW5nKCJyZW1vdmVHcm91cCIpKTsKKwkJcmVtb3ZlQnV0dG9uLnNldFRvb2xUaXBUZXh0KFBvcHVsYXRpb25Nb2RlbFdpemFyZE1lc3NhZ2VzCisJCQkJLmdldFN0cmluZygicmVtb3ZlR3JvdXBUVCIpKTsKKwkJcmVtb3ZlQnV0dG9uLnNldExheW91dERhdGEobmV3IEdyaWREYXRhKEdyaWREYXRhLkJFR0lOTklORywKKwkJCQlHcmlkRGF0YS5DRU5URVIsIHRydWUsIGZhbHNlKSk7CisJCXJlbW92ZUJ1dHRvbi5hZGRTZWxlY3Rpb25MaXN0ZW5lcihuZXcgU2VsZWN0aW9uTGlzdGVuZXIoKSB7CisKKwkJCUBPdmVycmlkZQorCQkJcHVibGljIHZvaWQgd2lkZ2V0U2VsZWN0ZWQoU2VsZWN0aW9uRXZlbnQgYXJnMCkgeworCQkJCWludCBpbmQgPSBncm91cENvbXBvc2l0ZXMuaW5kZXhPZihyZW1vdmVCdXR0b24uZ2V0UGFyZW50KCkpOworCisJCQkJZ3JvdXBDb21wb3NpdGVzLnJlbW92ZShpbmQpOworCQkJCWdyb3VwRnJhY0NvbXBvc2l0ZXMucmVtb3ZlKGluZCk7CisJCQkJZ3JvdXBJRENvbXBvc2l0ZXMucmVtb3ZlKGluZCk7CisJCQkJZ3JvdXBGcm9tQWdlQ29tcG9zaXRlcy5yZW1vdmUoaW5kKTsKKwkJCQlncm91cFRvQWdlQ29tcG9zaXRlcy5yZW1vdmUoaW5kKTsKKwkJCQlncm91cERlYXRoRmFjdG9yQ29tcG9zaXRlcy5yZW1vdmUoaW5kKTsKKworCQkJCXVwZGF0ZVRleHRGaWVsZHMoKTsKKwkJCQlyZW1vdmVCdXR0b24uZ2V0UGFyZW50KCkuZGlzcG9zZSgpOworCQkJCXVwZGF0ZUd1aSgpOworCQkJfQorCisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyB2b2lkIHdpZGdldERlZmF1bHRTZWxlY3RlZChTZWxlY3Rpb25FdmVudCBhcmcwKSB7CisJCQl9CisJCX0pOworCisJCUxhYmVsIGxhYmVsOworCQlUZXh0IHRleHQ7CisKKwkJbGFiZWwgPSBuZXcgTGFiZWwoZ3JvdXBJbmZvLCBTV1QuTk9ORSk7CisJCWxhYmVsLnNldFRleHQoUG9wdWxhdGlvbk1vZGVsV2l6YXJkTWVzc2FnZXMuZ2V0U3RyaW5nKCJwb3B1bGF0aW9uSWQiKSk7CisJCWxhYmVsLnNldExheW91dERhdGEobmV3IEdyaWREYXRhKEdyaWREYXRhLkVORCwgR3JpZERhdGEuQ0VOVEVSLCB0cnVlLAorCQkJCWZhbHNlKSk7CisKKwkJdGV4dCA9IG5ldyBUZXh0KGdyb3VwSW5mbywgU1dULkJPUkRFUiB8IFNXVC5UUkFJTCk7CisJCXRleHQuc2V0RWRpdGFibGUoZmFsc2UpOworCQl0ZXh0LnNldExheW91dERhdGEobmV3IEdyaWREYXRhKEdyaWREYXRhLkZJTEwsIEdyaWREYXRhLkNFTlRFUiwgdHJ1ZSwKKwkJCQlmYWxzZSkpOworCQl0ZXh0LmFkZE1vZGlmeUxpc3RlbmVyKHByb2plY3RWYWxpZGF0b3IpOworCQlncm91cElEQ29tcG9zaXRlcy5hZGQodGV4dCk7CisKKwkJbGFiZWwgPSBuZXcgTGFiZWwoZ3JvdXBJbmZvLCBTV1QuTk9ORSk7CisJCWxhYmVsLnNldFRleHQoUG9wdWxhdGlvbk1vZGVsV2l6YXJkTWVzc2FnZXMKKwkJCQkuZ2V0U3RyaW5nKCJwb3B1bGF0aW9uSWRGcmFjdGlvbiIpKTsKKwkJbGFiZWwuc2V0TGF5b3V0RGF0YShuZXcgR3JpZERhdGEoR3JpZERhdGEuRU5ELCBHcmlkRGF0YS5DRU5URVIsIHRydWUsCisJCQkJZmFsc2UpKTsKKworCQl0ZXh0ID0gbmV3IFRleHQoZ3JvdXBJbmZvLCBTV1QuQk9SREVSIHwgU1dULlRSQUlMKTsKKwkJdGV4dC5zZXRUZXh0KERFRkFVTFRfUE9QVUxBVElPTl9GUkFDVElPTiArICIiKTsKKwkJdGV4dC5zZXRMYXlvdXREYXRhKG5ldyBHcmlkRGF0YShHcmlkRGF0YS5GSUxMLCBHcmlkRGF0YS5DRU5URVIsIHRydWUsCisJCQkJZmFsc2UpKTsKKwkJdGV4dC5hZGRNb2RpZnlMaXN0ZW5lcihwcm9qZWN0VmFsaWRhdG9yKTsKKwkJZ3JvdXBGcmFjQ29tcG9zaXRlcy5hZGQodGV4dCk7CisKKwkJbGFiZWwgPSBuZXcgTGFiZWwoZ3JvdXBJbmZvLCBTV1QuTk9ORSk7CisJCWxhYmVsLnNldFRleHQoUG9wdWxhdGlvbk1vZGVsV2l6YXJkTWVzc2FnZXMuZ2V0U3RyaW5nKCJmcm9tQWdlIikpOworCQlsYWJlbC5zZXRMYXlvdXREYXRhKG5ldyBHcmlkRGF0YShHcmlkRGF0YS5FTkQsIEdyaWREYXRhLkNFTlRFUiwgdHJ1ZSwKKwkJCQlmYWxzZSkpOworCisJCXRleHQgPSBuZXcgVGV4dChncm91cEluZm8sIFNXVC5CT1JERVIgfCBTV1QuVFJBSUwpOworCQl0ZXh0LnNldEVkaXRhYmxlKGZhbHNlKTsKKwkJdGV4dC5zZXRMYXlvdXREYXRhKG5ldyBHcmlkRGF0YShHcmlkRGF0YS5GSUxMLCBHcmlkRGF0YS5DRU5URVIsIHRydWUsCisJCQkJZmFsc2UpKTsKKwkJdGV4dC5hZGRNb2RpZnlMaXN0ZW5lcihwcm9qZWN0VmFsaWRhdG9yKTsKKwkJZ3JvdXBGcm9tQWdlQ29tcG9zaXRlcy5hZGQodGV4dCk7CisKKwkJbGFiZWwgPSBuZXcgTGFiZWwoZ3JvdXBJbmZvLCBTV1QuTk9ORSk7CisJCWxhYmVsLnNldFRleHQoUG9wdWxhdGlvbk1vZGVsV2l6YXJkTWVzc2FnZXMuZ2V0U3RyaW5nKCJ0b0FnZSIpKTsKKwkJbGFiZWwuc2V0TGF5b3V0RGF0YShuZXcgR3JpZERhdGEoR3JpZERhdGEuRU5ELCBHcmlkRGF0YS5DRU5URVIsIHRydWUsCisJCQkJZmFsc2UpKTsKKworCQl0ZXh0ID0gbmV3IFRleHQoZ3JvdXBJbmZvLCBTV1QuQk9SREVSIHwgU1dULlRSQUlMKTsKKwkJdGV4dC5zZXRMYXlvdXREYXRhKG5ldyBHcmlkRGF0YShHcmlkRGF0YS5GSUxMLCBHcmlkRGF0YS5DRU5URVIsIHRydWUsCisJCQkJZmFsc2UpKTsKKwkJdGV4dC5hZGRNb2RpZnlMaXN0ZW5lcihwcm9qZWN0VmFsaWRhdG9yKTsKKwkJdGV4dC5hZGRNb2RpZnlMaXN0ZW5lcihuZXcgTW9kaWZ5TGlzdGVuZXIoKSB7CisKKwkJCUBPdmVycmlkZQorCQkJcHVibGljIHZvaWQgbW9kaWZ5VGV4dChNb2RpZnlFdmVudCBlKSB7CisJCQkJdXBkYXRlVGV4dEZpZWxkcygpOworCQkJfQorCQl9KTsKKwkJZ3JvdXBUb0FnZUNvbXBvc2l0ZXMuYWRkKHRleHQpOworCisJCWxhYmVsID0gbmV3IExhYmVsKGdyb3VwSW5mbywgU1dULk5PTkUpOworCQlsYWJlbC5zZXRUZXh0KFBvcHVsYXRpb25Nb2RlbFdpemFyZE1lc3NhZ2VzLmdldFN0cmluZygiZGVhdGhGYWN0b3IiKSk7CisJCWxhYmVsLnNldExheW91dERhdGEobmV3IEdyaWREYXRhKEdyaWREYXRhLkVORCwgR3JpZERhdGEuQ0VOVEVSLCB0cnVlLAorCQkJCWZhbHNlKSk7CisKKwkJdGV4dCA9IG5ldyBUZXh0KGdyb3VwSW5mbywgU1dULkJPUkRFUiB8IFNXVC5UUkFJTCk7CisJCXRleHQuc2V0VGV4dChERUZBVUxUX0RFQVRIX0ZBQ1RPUiArICIiKTsKKwkJdGV4dC5zZXRMYXlvdXREYXRhKG5ldyBHcmlkRGF0YShHcmlkRGF0YS5GSUxMLCBHcmlkRGF0YS5DRU5URVIsIHRydWUsCisJCQkJZmFsc2UpKTsKKwkJdGV4dC5hZGRNb2RpZnlMaXN0ZW5lcihwcm9qZWN0VmFsaWRhdG9yKTsKKwkJZ3JvdXBEZWF0aEZhY3RvckNvbXBvc2l0ZXMuYWRkKHRleHQpOworCisJCXVwZGF0ZVRleHRGaWVsZHMoKTsKKwl9CisKKwkvKioKKwkgKiBAcGFyYW0gZGlzZWFzZU1vZGVsCisJICogICAgICAgICAgICB0aGUge0BsaW5rIERpc2Vhc2VNb2RlbH0gaW5zdGFuY2UgdG8gcG9wdWxhdGUuCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgcG9wdWxhdGUoZmluYWwgUG9wdWxhdGlvbk1vZGVsIHBvcHVsYXRpb25Nb2RlbCkgeworCQlzdXBlci5wb3B1bGF0ZShwb3B1bGF0aW9uTW9kZWwpOworCisJCXBvcHVsYXRpb25Nb2RlbAorCQkJCS5zZXRQb3B1bGF0aW9uSWRlbnRpZmllcihtYXAKKwkJCQkJCS5nZXQoU3RhbmRhcmRQYWNrYWdlLkxpdGVyYWxzLlBPUFVMQVRJT05fTU9ERUxfX1BPUFVMQVRJT05fSURFTlRJRklFUikKKwkJCQkJCS5nZXRUZXh0KCkpOworCQlwb3B1bGF0aW9uTW9kZWwuc2V0TmFtZShtYXAuZ2V0KAorCQkJCVN0YW5kYXJkUGFja2FnZS5MaXRlcmFscy5QT1BVTEFUSU9OX01PREVMX19OQU1FKS5nZXRUZXh0KCkpOworCisJCWlmIChwb3B1bGF0aW9uTW9kZWwgaW5zdGFuY2VvZiBTdGFuZGFyZFBvcHVsYXRpb25Nb2RlbCkgeworCQkJU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWwgbW9kZWwgPSAoU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWwpIHBvcHVsYXRpb25Nb2RlbDsKKworCQkJbW9kZWwuc2V0QmlydGhSYXRlKERvdWJsZQorCQkJCQkucGFyc2VEb3VibGUobWFwCisJCQkJCQkJLmdldChTdGFuZGFyZFBhY2thZ2UuTGl0ZXJhbHMuU1RBTkRBUkRfUE9QVUxBVElPTl9NT0RFTF9fQklSVEhfUkFURSkKKwkJCQkJCQkuZ2V0VGV4dCgpKSk7CisJCQltb2RlbC5zZXREZWF0aFJhdGUoRG91YmxlCisJCQkJCS5wYXJzZURvdWJsZShtYXAKKwkJCQkJCQkuZ2V0KFN0YW5kYXJkUGFja2FnZS5MaXRlcmFscy5TVEFOREFSRF9QT1BVTEFUSU9OX01PREVMX19ERUFUSF9SQVRFKQorCQkJCQkJCS5nZXRUZXh0KCkpKTsKKwkJCW1vZGVsLnNldFRpbWVQZXJpb2QoTG9uZworCQkJCQkucGFyc2VMb25nKG1hcAorCQkJCQkJCS5nZXQoU3RhbmRhcmRQYWNrYWdlLkxpdGVyYWxzLlNUQU5EQVJEX1BPUFVMQVRJT05fTU9ERUxfX1RJTUVfUEVSSU9EKQorCQkJCQkJCS5nZXRUZXh0KCkpKTsKKwkJfQorCisJCWlmIChwb3B1bGF0aW9uTW9kZWwgaW5zdGFuY2VvZiBTZWFzb25hbFBvcHVsYXRpb25Nb2RlbCkgeworCQkJU2Vhc29uYWxQb3B1bGF0aW9uTW9kZWwgbW9kZWwgPSAoU2Vhc29uYWxQb3B1bGF0aW9uTW9kZWwpIHBvcHVsYXRpb25Nb2RlbDsKKworCQkJbW9kZWwuc2V0TW9kdWxhdGlvbkFtcGxpdHVkZShEb3VibGUKKwkJCQkJLnBhcnNlRG91YmxlKG1hcAorCQkJCQkJCS5nZXQoU3RhbmRhcmRQYWNrYWdlLkxpdGVyYWxzLlNFQVNPTkFMX1BPUFVMQVRJT05fTU9ERUxfX01PRFVMQVRJT05fQU1QTElUVURFKQorCQkJCQkJCS5nZXRUZXh0KCkpKTsKKwkJCW1vZGVsLnNldFBoYXNlKERvdWJsZS5wYXJzZURvdWJsZShtYXAuZ2V0KAorCQkJCQlTdGFuZGFyZFBhY2thZ2UuTGl0ZXJhbHMuU0VBU09OQUxfUE9QVUxBVElPTl9NT0RFTF9fUEhBU0UpCisJCQkJCS5nZXRUZXh0KCkpKTsKKwkJfQorCisJCWlmIChwb3B1bGF0aW9uTW9kZWwgaW5zdGFuY2VvZiBNb3NxdWl0b1BvcHVsYXRpb25Nb2RlbCkgeworCQkJTW9zcXVpdG9Qb3B1bGF0aW9uTW9kZWwgbW9kZWwgPSAoTW9zcXVpdG9Qb3B1bGF0aW9uTW9kZWwpIHBvcHVsYXRpb25Nb2RlbDsKKworCQkJbW9kZWwuc2V0U2NhbGluZ0ZhY3RvcihEb3VibGUKKwkJCQkJLnBhcnNlRG91YmxlKG1hcAorCQkJCQkJCS5nZXQoU3RhbmRhcmRQYWNrYWdlLkxpdGVyYWxzLk1PU1FVSVRPX1BPUFVMQVRJT05fTU9ERUxfX1NDQUxJTkdfRkFDVE9SKQorCQkJCQkJCS5nZXRUZXh0KCkpKTsKKwkJCW1vZGVsLnNldFRpbWVQZXJpb2QoTG9uZworCQkJCQkucGFyc2VMb25nKG1hcAorCQkJCQkJCS5nZXQoU3RhbmRhcmRQYWNrYWdlLkxpdGVyYWxzLk1PU1FVSVRPX1BPUFVMQVRJT05fTU9ERUxfX1RJTUVfUEVSSU9EKQorCQkJCQkJCS5nZXRUZXh0KCkpKTsKKwkJfQorCisJCWlmIChwb3B1bGF0aW9uTW9kZWwgaW5zdGFuY2VvZiBEZW1vZ3JhcGhpY1BvcHVsYXRpb25Nb2RlbAorCQkJCSYmICEocG9wdWxhdGlvbk1vZGVsIGluc3RhbmNlb2YgQWdpbmdQb3B1bGF0aW9uTW9kZWwpKSB7CisJCQlEZW1vZ3JhcGhpY1BvcHVsYXRpb25Nb2RlbCBkcG0gPSAoRGVtb2dyYXBoaWNQb3B1bGF0aW9uTW9kZWwpIHBvcHVsYXRpb25Nb2RlbDsKKworCQkJLy8gQWRkIGdyb3VwcworCQkJZm9yIChpbnQgaSA9IDA7IGkgPCBncm91cElEQ29tcG9zaXRlcy5zaXplKCk7ICsraSkgeworCQkJCVBvcHVsYXRpb25Hcm91cCBuZXdHcm91cCA9IFN0YW5kYXJkRmFjdG9yeS5lSU5TVEFOQ0UKKwkJCQkJCS5jcmVhdGVQb3B1bGF0aW9uR3JvdXAoKTsKKwkJCQlTdHJpbmcgaWQgPSBncm91cElEQ29tcG9zaXRlcy5nZXQoaSkuZ2V0VGV4dCgpOworCQkJCWRvdWJsZSBmciA9IERvdWJsZS5wYXJzZURvdWJsZShncm91cEZyYWNDb21wb3NpdGVzLmdldChpKQorCQkJCQkJLmdldFRleHQoKSk7CisJCQkJbmV3R3JvdXAuc2V0SWRlbnRpZmllcihpZCk7CisJCQkJbmV3R3JvdXAuc2V0RnJhY3Rpb24oZnIpOworCQkJCWRwbS5nZXRQb3B1bGF0aW9uR3JvdXBzKCkuYWRkKG5ld0dyb3VwKTsKKwkJCX0KKwkJfQorCisJCWlmIChwb3B1bGF0aW9uTW9kZWwgaW5zdGFuY2VvZiBBZ2luZ1BvcHVsYXRpb25Nb2RlbCkgeworCQkJQWdpbmdQb3B1bGF0aW9uTW9kZWwgZHBtID0gKEFnaW5nUG9wdWxhdGlvbk1vZGVsKSBwb3B1bGF0aW9uTW9kZWw7CisKKwkJCS8vIEFkZCBncm91cHMKKwkJCWZvciAoaW50IGkgPSAwOyBpIDwgZ3JvdXBJRENvbXBvc2l0ZXMuc2l6ZSgpOyArK2kpIHsKKwkJCQlBZ2VHcm91cCBuZXdHcm91cCA9IFN0YW5kYXJkRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlQWdlR3JvdXAoKTsKKworCQkJCW5ld0dyb3VwLnNldElkZW50aWZpZXIoZ3JvdXBJRENvbXBvc2l0ZXMuZ2V0KGkpLmdldFRleHQoKSk7CisJCQkJbmV3R3JvdXAuc2V0RnJhY3Rpb24oRG91YmxlLnBhcnNlRG91YmxlKGdyb3VwRnJhY0NvbXBvc2l0ZXMKKwkJCQkJCS5nZXQoaSkuZ2V0VGV4dCgpKSk7CisJCQkJbmV3R3JvdXAuc2V0RnJvbUFnZShJbnRlZ2VyLnBhcnNlSW50KGdyb3VwRnJvbUFnZUNvbXBvc2l0ZXMKKwkJCQkJCS5nZXQoaSkuZ2V0VGV4dCgpKSk7CisJCQkJdHJ5IHsKKwkJCQkJbmV3R3JvdXAuc2V0TGltaXRlZCh0cnVlKTsKKwkJCQkJbmV3R3JvdXAuc2V0VG9BZ2UoSW50ZWdlci5wYXJzZUludChncm91cFRvQWdlQ29tcG9zaXRlcworCQkJCQkJCS5nZXQoaSkuZ2V0VGV4dCgpKSk7CisJCQkJfSBjYXRjaCAoTnVtYmVyRm9ybWF0RXhjZXB0aW9uIGUpIHsKKwkJCQkJbmV3R3JvdXAuc2V0TGltaXRlZChmYWxzZSk7CisJCQkJfQorCQkJCW5ld0dyb3VwLnNldERlYXRoRmFjdG9yKERvdWJsZQorCQkJCQkJLnBhcnNlRG91YmxlKGdyb3VwRGVhdGhGYWN0b3JDb21wb3NpdGVzLmdldChpKQorCQkJCQkJCQkuZ2V0VGV4dCgpKSk7CisJCQkJZHBtLmdldFBvcHVsYXRpb25Hcm91cHMoKS5hZGQobmV3R3JvdXApOworCQkJfQorCQl9CisJfSAvLyBwb3B1bGF0ZQorCisJLyoqCisJICogQHJldHVybiA8Y29kZT50cnVlPC9jb2RlPiBpZiB0aGUgY29udGVudHMgYXJlIHZhbGlkLCA8Y29kZT5mYWxzZTwvY29kZT4KKwkgKiAgICAgICAgIG90aGVyd2lzZS4KKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgYm9vbGVhbiB2YWxpZGF0ZSgpIHsKKwkJaWYgKCFzdXBlci52YWxpZGF0ZSgpKSB7CisJCQlyZXR1cm4gZmFsc2U7CisJCX0KKworCQlUZXh0IHRleHQ7CisKKwkJLy8gUG9wdWxhdGlvbiBJZGVudGlmaWVyCisJCXRleHQgPSBtYXAKKwkJCQkuZ2V0KFN0YW5kYXJkUGFja2FnZS5MaXRlcmFscy5QT1BVTEFUSU9OX01PREVMX19QT1BVTEFUSU9OX0lERU5USUZJRVIpOworCQlpZiAodGV4dCAhPSBudWxsKSB7CisJCQlpZiAodGV4dC5nZXRUZXh0KCkuZXF1YWxzKCIiKSkgeworCQkJCWVycm9yTWVzc2FnZSA9IFBvcHVsYXRpb25Nb2RlbFdpemFyZE1lc3NhZ2VzCisJCQkJCQkuZ2V0U3RyaW5nKCJORGl6V2l6RXJyMCIpOyAvLyROT04tTkxTLTEkCisJCQkJcmV0dXJuIGZhbHNlOworCQkJfQorCQl9CisKKwkJLy8gQmFja2dyb3VuZCBNb3J0YWxpdHkgUmF0ZQorCQl0ZXh0ID0gbWFwCisJCQkJLmdldChTdGFuZGFyZFBhY2thZ2UuTGl0ZXJhbHMuU1RBTkRBUkRfUE9QVUxBVElPTl9NT0RFTF9fREVBVEhfUkFURSk7CisJCWlmICh0ZXh0ICE9IG51bGwpIHsKKwkJCWlmICh0ZXh0LmdldFRleHQoKS5lcXVhbHMoIiIpKSB7CisJCQkJZXJyb3JNZXNzYWdlID0gUG9wdWxhdGlvbk1vZGVsV2l6YXJkTWVzc2FnZXMKKwkJCQkJCS5nZXRTdHJpbmcoIk5EaXpXaXpFcnI0Iik7IC8vJE5PTi1OTFMtMSQKKwkJCQlyZXR1cm4gZmFsc2U7CisJCQl9IGVsc2UgaWYgKCFpc1ZhbGlkVmFsdWUodGV4dC5nZXRUZXh0KCksIDAuMCkpIHsKKwkJCQllcnJvck1lc3NhZ2UgPSBQb3B1bGF0aW9uTW9kZWxXaXphcmRNZXNzYWdlcworCQkJCQkJLmdldFN0cmluZygiTkRpeldpekVycjUiKTsgLy8kTk9OLU5MUy0xJAorCQkJCXJldHVybiBmYWxzZTsKKwkJCX0KKwkJfQorCisJCS8vIEJpcnRoIFJhdGUKKwkJdGV4dCA9IG1hcAorCQkJCS5nZXQoU3RhbmRhcmRQYWNrYWdlLkxpdGVyYWxzLlNUQU5EQVJEX1BPUFVMQVRJT05fTU9ERUxfX0JJUlRIX1JBVEUpOworCQlpZiAodGV4dCAhPSBudWxsKSB7CisJCQlpZiAodGV4dC5nZXRUZXh0KCkuZXF1YWxzKCIiKSkgeworCQkJCWVycm9yTWVzc2FnZSA9IFBvcHVsYXRpb25Nb2RlbFdpemFyZE1lc3NhZ2VzCisJCQkJCQkuZ2V0U3RyaW5nKCJORGl6V2l6RXJyNiIpOyAvLyROT04tTkxTLTEkCisJCQkJcmV0dXJuIGZhbHNlOworCQkJfSBlbHNlIGlmICghaXNWYWxpZFZhbHVlKHRleHQuZ2V0VGV4dCgpLCAwLjApKSB7CisJCQkJZXJyb3JNZXNzYWdlID0gUG9wdWxhdGlvbk1vZGVsV2l6YXJkTWVzc2FnZXMKKwkJCQkJCS5nZXRTdHJpbmcoIk5EaXpXaXpFcnI3Iik7IC8vJE5PTi1OTFMtMSQKKwkJCQlyZXR1cm4gZmFsc2U7CisJCQl9CisJCX0KKworCQkvLyBUaW1lIFBlcmlvZAorCQl0ZXh0ID0gbWFwCisJCQkJLmdldChTdGFuZGFyZFBhY2thZ2UuTGl0ZXJhbHMuU1RBTkRBUkRfUE9QVUxBVElPTl9NT0RFTF9fVElNRV9QRVJJT0QpOworCQlpZiAodGV4dCAhPSBudWxsKSB7CisJCQlpZiAodGV4dC5nZXRUZXh0KCkuZXF1YWxzKCIiKSkgeworCQkJCWVycm9yTWVzc2FnZSA9IFBvcHVsYXRpb25Nb2RlbFdpemFyZE1lc3NhZ2VzCisJCQkJCQkuZ2V0U3RyaW5nKCJORGl6V2l6RXJyOCIpOyAvLyROT04tTkxTLTEkCisJCQkJcmV0dXJuIGZhbHNlOworCQkJfSBlbHNlIGlmICghaXNWYWxpZExvbmdWYWx1ZSh0ZXh0LmdldFRleHQoKSwgMEwpKSB7CisJCQkJZXJyb3JNZXNzYWdlID0gUG9wdWxhdGlvbk1vZGVsV2l6YXJkTWVzc2FnZXMKKwkJCQkJCS5nZXRTdHJpbmcoIk5EaXpXaXpFcnI5Iik7IC8vJE5PTi1OTFMtMSQKKwkJCQlyZXR1cm4gZmFsc2U7CisJCQl9CisJCX0KKworCQkvLyBHYWluCisJCXRleHQgPSBtYXAKKwkJCQkuZ2V0KFN0YW5kYXJkUGFja2FnZS5MaXRlcmFscy5TVE9DSEFTVElDX1NUQU5EQVJEX1BPUFVMQVRJT05fTU9ERUxfX0dBSU4pOworCQlpZiAodGV4dCAhPSBudWxsKSB7CisJCQlpZiAodGV4dC5nZXRUZXh0KCkuZXF1YWxzKCIiKSkgeworCQkJCWVycm9yTWVzc2FnZSA9IFBvcHVsYXRpb25Nb2RlbFdpemFyZE1lc3NhZ2VzCisJCQkJCQkuZ2V0U3RyaW5nKCJORGl6V2l6RXJyMTAiKTsgLy8kTk9OLU5MUy0xJAorCQkJCXJldHVybiBmYWxzZTsKKwkJCX0gZWxzZSBpZiAoIWlzVmFsaWRWYWx1ZSh0ZXh0LmdldFRleHQoKSwgMC4wKSkgeworCQkJCWVycm9yTWVzc2FnZSA9IFBvcHVsYXRpb25Nb2RlbFdpemFyZE1lc3NhZ2VzCisJCQkJCQkuZ2V0U3RyaW5nKCJORGl6V2l6RXJyMTAiKTsgLy8kTk9OLU5MUy0xJAorCQkJCXJldHVybiBmYWxzZTsKKwkJCX0KKwkJfQorCisJCS8vIE1vZHVsYXRpb24gQW1wbGl0dWRlCisJCXRleHQgPSBtYXAKKwkJCQkuZ2V0KFN0YW5kYXJkUGFja2FnZS5MaXRlcmFscy5TRUFTT05BTF9QT1BVTEFUSU9OX01PREVMX19NT0RVTEFUSU9OX0FNUExJVFVERSk7CisJCWlmICh0ZXh0ICE9IG51bGwpIHsKKwkJCWlmICh0ZXh0LmdldFRleHQoKS5lcXVhbHMoIiIpKSB7CisJCQkJZXJyb3JNZXNzYWdlID0gUG9wdWxhdGlvbk1vZGVsV2l6YXJkTWVzc2FnZXMKKwkJCQkJCS5nZXRTdHJpbmcoIk5EaXpXaXpFcnIxOCIpOyAvLyROT04tTkxTLTEkCisJCQkJcmV0dXJuIGZhbHNlOworCQkJfSBlbHNlIGlmICghaXNWYWxpZERvdWJsZVZhbHVlKHRleHQuZ2V0VGV4dCgpLCAwLjAsIDEuMCkpIHsKKwkJCQllcnJvck1lc3NhZ2UgPSBQb3B1bGF0aW9uTW9kZWxXaXphcmRNZXNzYWdlcworCQkJCQkJLmdldFN0cmluZygiTkRpeldpekVycjE4Iik7IC8vJE5PTi1OTFMtMSQKKwkJCQlyZXR1cm4gZmFsc2U7CisJCQl9CisJCX0KKworCQkvLyBQaGFzZQorCQl0ZXh0ID0gbWFwCisJCQkJLmdldChTdGFuZGFyZFBhY2thZ2UuTGl0ZXJhbHMuU0VBU09OQUxfUE9QVUxBVElPTl9NT0RFTF9fUEhBU0UpOworCQlpZiAodGV4dCAhPSBudWxsKSB7CisJCQlpZiAodGV4dC5nZXRUZXh0KCkuZXF1YWxzKCIiKSkgeworCQkJCWVycm9yTWVzc2FnZSA9IFBvcHVsYXRpb25Nb2RlbFdpemFyZE1lc3NhZ2VzCisJCQkJCQkuZ2V0U3RyaW5nKCJORGl6V2l6RXJyMTkiKTsgLy8kTk9OLU5MUy0xJAorCQkJCXJldHVybiBmYWxzZTsKKwkJCX0gZWxzZSBpZiAoIWlzVmFsaWREb3VibGVWYWx1ZSh0ZXh0LmdldFRleHQoKSkpIHsKKwkJCQllcnJvck1lc3NhZ2UgPSBQb3B1bGF0aW9uTW9kZWxXaXphcmRNZXNzYWdlcworCQkJCQkJLmdldFN0cmluZygiTkRpeldpekVycjE5Iik7IC8vJE5PTi1OTFMtMSQKKwkJCQlyZXR1cm4gZmFsc2U7CisJCQl9CisJCX0KKworCQkvLyBTY2FsaW5nIEZhY3RvcgorCQl0ZXh0ID0gbWFwCisJCQkJLmdldChTdGFuZGFyZFBhY2thZ2UuTGl0ZXJhbHMuTU9TUVVJVE9fUE9QVUxBVElPTl9NT0RFTF9fU0NBTElOR19GQUNUT1IpOworCQlpZiAodGV4dCAhPSBudWxsKSB7CisJCQlpZiAodGV4dC5nZXRUZXh0KCkuZXF1YWxzKCIiKSkgeworCQkJCWVycm9yTWVzc2FnZSA9IFBvcHVsYXRpb25Nb2RlbFdpemFyZE1lc3NhZ2VzCisJCQkJCQkuZ2V0U3RyaW5nKCJORGl6V2l6RXJyMjAiKTsgLy8kTk9OLU5MUy0xJAorCQkJCXJldHVybiBmYWxzZTsKKwkJCX0gZWxzZSBpZiAoIWlzVmFsaWREb3VibGVWYWx1ZSh0ZXh0LmdldFRleHQoKSkpIHsKKwkJCQllcnJvck1lc3NhZ2UgPSBQb3B1bGF0aW9uTW9kZWxXaXphcmRNZXNzYWdlcworCQkJCQkJLmdldFN0cmluZygiTkRpeldpekVycjIwIik7IC8vJE5PTi1OTFMtMSQKKwkJCQlyZXR1cm4gZmFsc2U7CisJCQl9CisJCX0KKworCQkvLyBUaW1lIFBlcmlvZAorCQl0ZXh0ID0gbWFwCisJCQkJLmdldChTdGFuZGFyZFBhY2thZ2UuTGl0ZXJhbHMuTU9TUVVJVE9fUE9QVUxBVElPTl9NT0RFTF9fVElNRV9QRVJJT0QpOworCQlpZiAodGV4dCAhPSBudWxsKSB7CisJCQlpZiAodGV4dC5nZXRUZXh0KCkuZXF1YWxzKCIiKSkgeworCQkJCWVycm9yTWVzc2FnZSA9IFBvcHVsYXRpb25Nb2RlbFdpemFyZE1lc3NhZ2VzCisJCQkJCQkuZ2V0U3RyaW5nKCJORGl6V2l6RXJyMjEiKTsgLy8kTk9OLU5MUy0xJAorCQkJCXJldHVybiBmYWxzZTsKKwkJCX0gZWxzZSBpZiAoIWlzVmFsaWRMb25nVmFsdWUodGV4dC5nZXRUZXh0KCkpKSB7CisJCQkJZXJyb3JNZXNzYWdlID0gUG9wdWxhdGlvbk1vZGVsV2l6YXJkTWVzc2FnZXMKKwkJCQkJCS5nZXRTdHJpbmcoIk5EaXpXaXpFcnIyMSIpOyAvLyROT04tTkxTLTEkCisJCQkJcmV0dXJuIGZhbHNlOworCQkJfQorCQl9CisKKwkJLy8gQ2hlY2sgdGhhdCB0aGUgZ3JvdXAgZnJhY3Rpb25zIGFkZCB1cCB0byA8IDEuMAorCQlkb3VibGUgc3VtID0gMC4wOworCQlmb3IgKFRleHQgdCA6IGdyb3VwRnJhY0NvbXBvc2l0ZXMpIHsKKwkJCWlmICghaXNWYWxpZFZhbHVlKHQuZ2V0VGV4dCgpLCAwKSkgeworCQkJCWVycm9yTWVzc2FnZSA9IFBvcHVsYXRpb25Nb2RlbFdpemFyZE1lc3NhZ2VzCisJCQkJCQkuZ2V0U3RyaW5nKCJORGl6V2l6RXJyMTMiKTsgLy8kTk9OLU5MUy0xJAorCQkJCXJldHVybiBmYWxzZTsKKwkJCX0KKwkJCXN1bSArPSBEb3VibGUucGFyc2VEb3VibGUodC5nZXRUZXh0KCkpOworCQl9CisJCWlmIChzdW0gPiAxLjApIHsKKwkJCWVycm9yTWVzc2FnZSA9IFBvcHVsYXRpb25Nb2RlbFdpemFyZE1lc3NhZ2VzCisJCQkJCS5nZXRTdHJpbmcoIk5EaXpXaXpFcnIxMSIpOyAvLyROT04tTkxTLTEkCisJCQlyZXR1cm4gZmFsc2U7CisJCX0KKworCQkvLyBDaGVjayBncm91cCBJRHMKKwkJZm9yIChUZXh0IHQgOiBncm91cElEQ29tcG9zaXRlcykgeworCQkJaWYgKHQuZ2V0VGV4dCgpLnRyaW0oKS5lcXVhbHMoIiIpKSB7CisJCQkJZXJyb3JNZXNzYWdlID0gUG9wdWxhdGlvbk1vZGVsV2l6YXJkTWVzc2FnZXMKKwkJCQkJCS5nZXRTdHJpbmcoIk5EaXpXaXpFcnIxMiIpOyAvLyROT04tTkxTLTEkCisJCQkJcmV0dXJuIGZhbHNlOworCQkJfQorCQl9CisKKwkJLy8gQ2hlY2sgdG9BZ2UgdmFsdWVzCisJCWludCBsYXN0VmFsdWUgPSAtMTsKKwkJZm9yIChUZXh0IHQgOiBncm91cFRvQWdlQ29tcG9zaXRlcykgeworCQkJaWYgKHQuZ2V0RWRpdGFibGUoKSkgeworCQkJCWlmICghaXNWYWxpZEludFZhbHVlKHQuZ2V0VGV4dCgpLCAwKSkgeworCQkJCQllcnJvck1lc3NhZ2UgPSBQb3B1bGF0aW9uTW9kZWxXaXphcmRNZXNzYWdlcworCQkJCQkJCS5nZXRTdHJpbmcoIk5EaXpXaXpFcnIyMiIpOyAvLyROT04tTkxTLTEkCisJCQkJCXJldHVybiBmYWxzZTsKKwkJCQl9CisJCQkJaWYgKEludGVnZXIucGFyc2VJbnQodC5nZXRUZXh0KCkpIDw9IGxhc3RWYWx1ZSkgeworCQkJCQllcnJvck1lc3NhZ2UgPSBQb3B1bGF0aW9uTW9kZWxXaXphcmRNZXNzYWdlcworCQkJCQkJCS5nZXRTdHJpbmcoIk5EaXpXaXpFcnIyMiIpOyAvLyROT04tTkxTLTEkCisJCQkJCXJldHVybiBmYWxzZTsKKwkJCQl9CisJCQkJbGFzdFZhbHVlID0gSW50ZWdlci5wYXJzZUludCh0LmdldFRleHQoKSk7CisJCQl9CisJCX0KKworCQkvLyBDaGVjayBkZWF0aCBmYWN0b3IKKwkJZm9yIChUZXh0IHQgOiBncm91cERlYXRoRmFjdG9yQ29tcG9zaXRlcykgeworCQkJaWYgKCFpc1ZhbGlkVmFsdWUodC5nZXRUZXh0KCksIDApKSB7CisJCQkJZXJyb3JNZXNzYWdlID0gUG9wdWxhdGlvbk1vZGVsV2l6YXJkTWVzc2FnZXMKKwkJCQkJCS5nZXRTdHJpbmcoIk5EaXpXaXpFcnIyMyIpOyAvLyROT04tTkxTLTEkCisJCQkJcmV0dXJuIGZhbHNlOworCQkJfQorCQl9CisKKwkJcmV0dXJuIHRydWU7CisJfSAvLyB2YWxpZGF0ZQorCisJcHJpdmF0ZSB2b2lkIHVwZGF0ZUd1aSgpIHsKKwkJcGFjaygpOworCQlnZXRQYXJlbnQoKS5sYXlvdXQoKTsKKwkJZ2V0UGFyZW50KCkuZ2V0UGFyZW50KCkuZ2V0UGFyZW50KCkubGF5b3V0KCk7CisJfQorCisJcHJpdmF0ZSB2b2lkIHVwZGF0ZVRleHRGaWVsZHMoKSB7CisJCUJ1dHRvbiBoYXNNYXhBZ2VCdXR0b24gPSBib29sZWFuTWFwCisJCQkJLmdldChTdGFuZGFyZFBhY2thZ2UuTGl0ZXJhbHMuQUdJTkdfUE9QVUxBVElPTl9NT0RFTF9fSEFTX01BWF9BR0UpOworCQlpbnQgbiA9IGdyb3VwVG9BZ2VDb21wb3NpdGVzLnNpemUoKTsKKworCQlmb3IgKGludCBpID0gMDsgaSA8IG47IGkrKykgeworCQkJaWYgKGkgPT0gMCkgeworCQkJCWlmICghZ3JvdXBGcm9tQWdlQ29tcG9zaXRlcy5nZXQoaSkuZ2V0VGV4dCgpLmVxdWFscygiMCIpKSB7CisJCQkJCWdyb3VwRnJvbUFnZUNvbXBvc2l0ZXMuZ2V0KGkpLnNldFRleHQoIjAiKTsKKwkJCQl9CisJCQl9IGVsc2UgeworCQkJCXRyeSB7CisJCQkJCVN0cmluZyBhZ2UgPSAoSW50ZWdlci5wYXJzZUludChncm91cFRvQWdlQ29tcG9zaXRlcy5nZXQoCisJCQkJCQkJaSAtIDEpLmdldFRleHQoKSkgKyAxKQorCQkJCQkJCSsgIiI7CisKKwkJCQkJaWYgKCFncm91cEZyb21BZ2VDb21wb3NpdGVzLmdldChpKS5nZXRUZXh0KCkuZXF1YWxzKGFnZSkpIHsKKwkJCQkJCWdyb3VwRnJvbUFnZUNvbXBvc2l0ZXMuZ2V0KGkpLnNldFRleHQoYWdlKTsKKwkJCQkJfQorCQkJCX0gY2F0Y2ggKE51bWJlckZvcm1hdEV4Y2VwdGlvbiBlKSB7CisJCQkJCS8vIElnbm9yZSBwYWdlIHdpbGwgYmUgaW52YWxpZGF0ZWQKKwkJCQl9CisJCQl9CisKKwkJCWlmIChpID09IG4gLSAxICYmICFoYXNNYXhBZ2VCdXR0b24uZ2V0U2VsZWN0aW9uKCkpIHsKKwkJCQlpZiAoZ3JvdXBUb0FnZUNvbXBvc2l0ZXMuZ2V0KGkpLmdldEVkaXRhYmxlKCkpIHsKKwkJCQkJZ3JvdXBUb0FnZUNvbXBvc2l0ZXMuZ2V0KGkpLnNldEVkaXRhYmxlKGZhbHNlKTsKKwkJCQl9CisKKwkJCQlpZiAoIWdyb3VwVG9BZ2VDb21wb3NpdGVzLmdldChpKS5nZXRUZXh0KCkuZXF1YWxzKCIgIikpIHsKKwkJCQkJZ3JvdXBUb0FnZUNvbXBvc2l0ZXMuZ2V0KGkpLnNldFRleHQoIiAiKTsKKwkJCQl9CisJCQl9IGVsc2UgeworCQkJCWlmICghZ3JvdXBUb0FnZUNvbXBvc2l0ZXMuZ2V0KGkpLmdldEVkaXRhYmxlKCkpIHsKKwkJCQkJZ3JvdXBUb0FnZUNvbXBvc2l0ZXMuZ2V0KGkpLnNldEVkaXRhYmxlKHRydWUpOworCQkJCX0KKworCQkJCWlmIChncm91cFRvQWdlQ29tcG9zaXRlcy5nZXQoaSkuZ2V0VGV4dCgpLnRyaW0oKS5lcXVhbHMoIiIpKSB7CisJCQkJCXRyeSB7CisJCQkJCQlpbnQgYWdlID0gSW50ZWdlci5wYXJzZUludChncm91cEZyb21BZ2VDb21wb3NpdGVzCisJCQkJCQkJCS5nZXQoaSkuZ2V0VGV4dCgpKSArIERFRkFVTFRfQUdFR1JPVVBfUkFOR0UgLSAxOworCisJCQkJCQlncm91cFRvQWdlQ29tcG9zaXRlcy5nZXQoaSkuc2V0VGV4dChhZ2UgKyAiIik7CisJCQkJCX0gY2F0Y2ggKE51bWJlckZvcm1hdEV4Y2VwdGlvbiBlKSB7CisJCQkJCQkvLyBJZ25vcmUgcGFnZSB3aWxsIGJlIGludmFsaWRhdGVkCisJCQkJCX0KKwkJCQl9CisJCQl9CisKKwkJCVN0cmluZyBpZCA9IHBvcHVsYXRpb25JRAorCQkJCQkrIGdyb3VwRnJvbUFnZUNvbXBvc2l0ZXMuZ2V0KGkpLmdldFRleHQoKS50cmltKCkgKyAiLSIKKwkJCQkJKyBncm91cFRvQWdlQ29tcG9zaXRlcy5nZXQoaSkuZ2V0VGV4dCgpLnRyaW0oKTsKKworCQkJaWYgKCFncm91cElEQ29tcG9zaXRlcy5nZXQoaSkuZ2V0VGV4dCgpLmVxdWFscyhpZCkpIHsKKwkJCQlncm91cElEQ29tcG9zaXRlcy5nZXQoaSkuc2V0VGV4dChpZCk7CisJCQl9CisJCX0KKwl9CisKKwlwcml2YXRlIHZvaWQgc2V0RnJhY3Rpb25Ub0VxdWlsaWJyaXVtKCkgeworCQlkb3VibGUgYmlydGhSYXRlID0gRG91YmxlLnBhcnNlRG91YmxlKG1hcC5nZXQoCisJCQkJU3RhbmRhcmRQYWNrYWdlLkxpdGVyYWxzLlNUQU5EQVJEX1BPUFVMQVRJT05fTU9ERUxfX0JJUlRIX1JBVEUpCisJCQkJLmdldFRleHQoKSk7CisJCWRvdWJsZSBkZWF0aFJhdGUgPSBEb3VibGUucGFyc2VEb3VibGUobWFwLmdldCgKKwkJCQlTdGFuZGFyZFBhY2thZ2UuTGl0ZXJhbHMuU1RBTkRBUkRfUE9QVUxBVElPTl9NT0RFTF9fREVBVEhfUkFURSkKKwkJCQkuZ2V0VGV4dCgpKTsKKwkJbG9uZyB0aW1lUGVyaW9kID0gTG9uZworCQkJCS5wYXJzZUxvbmcobWFwCisJCQkJCQkuZ2V0KFN0YW5kYXJkUGFja2FnZS5MaXRlcmFscy5TVEFOREFSRF9QT1BVTEFUSU9OX01PREVMX19USU1FX1BFUklPRCkKKwkJCQkJCS5nZXRUZXh0KCkpOworCisJCWludCBuID0gZ3JvdXBDb21wb3NpdGVzLnNpemUoKTsKKwkJaW50W10gYWdlUmFuZ2VzID0gbmV3IGludFtuXTsKKwkJZG91YmxlW10gZGVhdGhSYXRlcyA9IG5ldyBkb3VibGVbbl07CisJCWRvdWJsZVtdIGZyYWN0aW9ucyA9IG5ldyBkb3VibGVbbl07CisKKwkJZm9yIChpbnQgaSA9IDA7IGkgPCBuOyBpKyspIHsKKwkJCXRyeSB7CisJCQkJYWdlUmFuZ2VzW2ldID0gSW50ZWdlci5wYXJzZUludChncm91cFRvQWdlQ29tcG9zaXRlcy5nZXQoaSkKKwkJCQkJCS5nZXRUZXh0KCkpCisJCQkJCQktIEludGVnZXIucGFyc2VJbnQoZ3JvdXBGcm9tQWdlQ29tcG9zaXRlcy5nZXQoaSkKKwkJCQkJCQkJLmdldFRleHQoKSkgKyAxOworCQkJfSBjYXRjaCAoTnVtYmVyRm9ybWF0RXhjZXB0aW9uIGUpIHsKKwkJCQlhZ2VSYW5nZXNbaV0gPSAwOworCQkJfQorCisJCQlkZWF0aFJhdGVzW2ldID0gRG91YmxlLnBhcnNlRG91YmxlKGdyb3VwRGVhdGhGYWN0b3JDb21wb3NpdGVzCisJCQkJCS5nZXQoaSkuZ2V0VGV4dCgpKSAqIGRlYXRoUmF0ZTsKKwkJCWZyYWN0aW9uc1tpXSA9IERvdWJsZS5wYXJzZURvdWJsZShncm91cEZyYWNDb21wb3NpdGVzLmdldChpKQorCQkJCQkuZ2V0VGV4dCgpKTsKKwkJfQorCisJCWRvdWJsZSB5ZWFycyA9IChkb3VibGUpIHRpbWVQZXJpb2QgLyAzMTU1Njk1MjIxNi4wOworCisJCWZvciAoaW50IHN0ZXAgPSAwOyBzdGVwIDwgMTAwMDAwMDsgc3RlcCsrKSB7CisJCQlkb3VibGUgc3VtID0gMC4wOworCisJCQlmb3IgKGludCBpID0gMDsgaSA8IG47IGkrKykgeworCQkJCXN1bSArPSBmcmFjdGlvbnNbaV07CisJCQl9CisKKwkJCWZvciAoaW50IGkgPSBuIC0gMTsgaSA+PSAwOyBpLS0pIHsKKwkJCQlkb3VibGUgYXJyaXZhbHMgPSAwLjA7CisJCQkJZG91YmxlIGRlcGFydXJlcyA9IDAuMDsKKworCQkJCWlmIChpID09IDApIHsKKwkJCQkJYXJyaXZhbHMgPSBiaXJ0aFJhdGUgKiBzdW07CisJCQkJfSBlbHNlIHsKKwkJCQkJYXJyaXZhbHMgPSB5ZWFycyAvIGFnZVJhbmdlc1tpIC0gMV0gKiBmcmFjdGlvbnNbaSAtIDFdOworCQkJCX0KKworCQkJCWlmIChhZ2VSYW5nZXNbaV0gIT0gMCkgeworCQkJCQlkZXBhcnVyZXMgPSAoZGVhdGhSYXRlc1tpXSArIHllYXJzIC8gYWdlUmFuZ2VzW2ldKQorCQkJCQkJCSogZnJhY3Rpb25zW2ldOworCQkJCX0gZWxzZSB7CisJCQkJCWRlcGFydXJlcyA9IGRlYXRoUmF0ZXNbaV0gKiBmcmFjdGlvbnNbaV07CisJCQkJfQorCisJCQkJZnJhY3Rpb25zW2ldICs9IGFycml2YWxzIC0gZGVwYXJ1cmVzOworCQkJfQorCQl9CisKKwkJZG91YmxlIHN1bSA9IDAuMDsKKworCQlmb3IgKGludCBpID0gMDsgaSA8IG47IGkrKykgeworCQkJc3VtICs9IGZyYWN0aW9uc1tpXTsKKwkJfQorCisJCWZvciAoaW50IGkgPSAwOyBpIDwgbjsgaSsrKSB7CisJCQlncm91cEZyYWNDb21wb3NpdGVzLmdldChpKS5zZXRUZXh0KChmcmFjdGlvbnNbaV0gLyBzdW0pICsgIiIpOworCQl9CisJfQorCisJcHJpdmF0ZSB2b2lkIHNldERlYXRoUmF0ZXNUb0VxdWlsaWJyaXVtKCkgeworCQlkb3VibGUgYmlydGhSYXRlID0gRG91YmxlLnBhcnNlRG91YmxlKG1hcC5nZXQoCisJCQkJU3RhbmRhcmRQYWNrYWdlLkxpdGVyYWxzLlNUQU5EQVJEX1BPUFVMQVRJT05fTU9ERUxfX0JJUlRIX1JBVEUpCisJCQkJLmdldFRleHQoKSk7CisJCWRvdWJsZSBkZWF0aFJhdGUgPSBEb3VibGUucGFyc2VEb3VibGUobWFwLmdldCgKKwkJCQlTdGFuZGFyZFBhY2thZ2UuTGl0ZXJhbHMuU1RBTkRBUkRfUE9QVUxBVElPTl9NT0RFTF9fREVBVEhfUkFURSkKKwkJCQkuZ2V0VGV4dCgpKTsKKwkJbG9uZyB0aW1lUGVyaW9kID0gTG9uZworCQkJCS5wYXJzZUxvbmcobWFwCisJCQkJCQkuZ2V0KFN0YW5kYXJkUGFja2FnZS5MaXRlcmFscy5TVEFOREFSRF9QT1BVTEFUSU9OX01PREVMX19USU1FX1BFUklPRCkKKwkJCQkJCS5nZXRUZXh0KCkpOworCisJCWludCBuID0gZ3JvdXBDb21wb3NpdGVzLnNpemUoKTsKKwkJaW50W10gYWdlUmFuZ2VzID0gbmV3IGludFtuXTsKKwkJZG91YmxlW10gZnJhY3Rpb25zID0gbmV3IGRvdWJsZVtuXTsKKworCQlmb3IgKGludCBpID0gMDsgaSA8IG47IGkrKykgeworCQkJdHJ5IHsKKwkJCQlhZ2VSYW5nZXNbaV0gPSBJbnRlZ2VyLnBhcnNlSW50KGdyb3VwVG9BZ2VDb21wb3NpdGVzLmdldChpKQorCQkJCQkJLmdldFRleHQoKSkKKwkJCQkJCS0gSW50ZWdlci5wYXJzZUludChncm91cEZyb21BZ2VDb21wb3NpdGVzLmdldChpKQorCQkJCQkJCQkuZ2V0VGV4dCgpKSArIDE7CisJCQl9IGNhdGNoIChOdW1iZXJGb3JtYXRFeGNlcHRpb24gZSkgeworCQkJCWFnZVJhbmdlc1tpXSA9IDA7CisJCQl9CisKKwkJCWZyYWN0aW9uc1tpXSA9IERvdWJsZS5wYXJzZURvdWJsZShncm91cEZyYWNDb21wb3NpdGVzLmdldChpKQorCQkJCQkuZ2V0VGV4dCgpKTsKKwkJfQorCisJCWRvdWJsZSB5ZWFycyA9IChkb3VibGUpIHRpbWVQZXJpb2QgLyAzMTU1Njk1MjIxNi4wOworCQlkb3VibGUgc3VtID0gMC4wOworCQlkb3VibGVbXSBkZWF0aEZhY3RvcnMgPSBuZXcgZG91YmxlW25dOworCisJCWZvciAoaW50IGkgPSAwOyBpIDwgbjsgaSsrKSB7CisJCQlzdW0gKz0gZnJhY3Rpb25zW2ldOworCQl9CisKKwkJZm9yIChpbnQgaSA9IDA7IGkgPCBuOyBpKyspIHsKKwkJCWRvdWJsZSBkZXNpcmVkRGVhdGhzID0gMC4wOworCisJCQlpZiAoaSA9PSAwKSB7CisJCQkJZGVzaXJlZERlYXRocyA9IGJpcnRoUmF0ZSAqIHN1bSAtIHllYXJzIC8gYWdlUmFuZ2VzW2ldCisJCQkJCQkqIGZyYWN0aW9uc1tpXTsKKwkJCX0gZWxzZSBpZiAoYWdlUmFuZ2VzW2ldICE9IDApIHsKKwkJCQlkZXNpcmVkRGVhdGhzID0geWVhcnMgLyBhZ2VSYW5nZXNbaSAtIDFdICogZnJhY3Rpb25zW2kgLSAxXQorCQkJCQkJLSB5ZWFycyAvIGFnZVJhbmdlc1tpXSAqIGZyYWN0aW9uc1tpXTsKKwkJCX0gZWxzZSB7CisJCQkJZGVzaXJlZERlYXRocyA9IHllYXJzIC8gYWdlUmFuZ2VzW2kgLSAxXSAqIGZyYWN0aW9uc1tpIC0gMV07CisJCQl9CisKKwkJCWRlYXRoRmFjdG9yc1tpXSA9IGRlc2lyZWREZWF0aHMgLyBmcmFjdGlvbnNbaV0gLyBkZWF0aFJhdGU7CisJCX0KKworCQlmb3IgKGludCBpID0gMDsgaSA8IG47IGkrKykgeworCQkJZ3JvdXBEZWF0aEZhY3RvckNvbXBvc2l0ZXMuZ2V0KGkpLnNldFRleHQoZGVhdGhGYWN0b3JzW2ldICsgIiIpOworCQl9CisJfQorfSAvLyBTdGFuZGFyZFByb3BlcnR5TW9kZWxQcm9wZXJ0eUVkaXRvcgpkaWZmIC0tZ2l0IGEvbW9kZWxzL3BvcHVsYXRpb25zL29yZy5lY2xpcHNlLnN0ZW0udWkucG9wdWxhdGlvbm1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9wb3B1bGF0aW9ubW9kZWxzL3N0YW5kYXJkL3dpemFyZHMvU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxQcm9wZXJ0eUVkaXRvckFkYXB0ZXIuamF2YSBiL21vZGVscy9wb3B1bGF0aW9ucy9vcmcuZWNsaXBzZS5zdGVtLnVpLnBvcHVsYXRpb25tb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvcG9wdWxhdGlvbm1vZGVscy9zdGFuZGFyZC93aXphcmRzL1N0YW5kYXJkUG9wdWxhdGlvbk1vZGVsUHJvcGVydHlFZGl0b3JBZGFwdGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2JjMWUyMAotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9wb3B1bGF0aW9ucy9vcmcuZWNsaXBzZS5zdGVtLnVpLnBvcHVsYXRpb25tb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvcG9wdWxhdGlvbm1vZGVscy9zdGFuZGFyZC93aXphcmRzL1N0YW5kYXJkUG9wdWxhdGlvbk1vZGVsUHJvcGVydHlFZGl0b3JBZGFwdGVyLmphdmEKQEAgLTAsMCArMSwzMSBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnVpLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQud2l6YXJkczsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3Q7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLlBvcHVsYXRpb25Nb2RlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnVpLnBvcHVsYXRpb25tb2RlbHMuYWRhcHRlcnMuUG9wdWxhdGlvbk1vZGVsUHJvcGVydHlFZGl0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS51aS5wb3B1bGF0aW9ubW9kZWxzLmFkYXB0ZXJzLlBvcHVsYXRpb25Nb2RlbFByb3BlcnR5RWRpdG9yQWRhcHRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLk1vZGlmeUxpc3RlbmVyOworCitwdWJsaWMgY2xhc3MgU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxQcm9wZXJ0eUVkaXRvckFkYXB0ZXIgZXh0ZW5kcworCQlQb3B1bGF0aW9uTW9kZWxQcm9wZXJ0eUVkaXRvckFkYXB0ZXIgeworCisJQE92ZXJyaWRlCisJcHVibGljIFBvcHVsYXRpb25Nb2RlbFByb3BlcnR5RWRpdG9yIGNyZWF0ZVBvcHVsYXRpb25Nb2RlbFByb3BlcnR5RWRpdG9yKAorCQkJZmluYWwgUG9wdWxhdGlvbk1vZGVsUHJvcGVydHlDb21wb3NpdGUgcG9wdWxhdGlvbk1vZGVsUHJvcGVydHlDb21wb3NpdGUsCisJCQlmaW5hbCBpbnQgc3R5bGUsIGZpbmFsIE1vZGlmeUxpc3RlbmVyIHByb2plY3RWYWxpZGF0b3IsIElQcm9qZWN0IHByb2plY3QpIHsKKwkJcmV0dXJuIG5ldyBTdGFuZGFyZFBvcHVsYXRpb25Nb2RlbFByb3BlcnR5RWRpdG9yKAorCQkJCXBvcHVsYXRpb25Nb2RlbFByb3BlcnR5Q29tcG9zaXRlLCBzdHlsZSwKKwkJCQkoUG9wdWxhdGlvbk1vZGVsKSBnZXRUYXJnZXQoKSwgcHJvamVjdFZhbGlkYXRvciwgcHJvamVjdCk7CisJfSAvLyBjcmVhdGVQb3B1bGF0aW9uTW9kZWxQcm9wZXJ0eUVkaXRvcgorCit9IC8vIFN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsUHJvcGVydHlFZGl0b3JBZGFwdGVyCmRpZmYgLS1naXQgYS9tb2RlbHMvcG9wdWxhdGlvbnMvb3JnLmVjbGlwc2Uuc3RlbS51aS5wb3B1bGF0aW9ubW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3BvcHVsYXRpb25tb2RlbHMvc3RhbmRhcmQvd2l6YXJkcy9TdGFuZGFyZFBvcHVsYXRpb25Nb2RlbFByb3BlcnR5RWRpdG9yQWRhcHRlckZhY3RvcnkuamF2YSBiL21vZGVscy9wb3B1bGF0aW9ucy9vcmcuZWNsaXBzZS5zdGVtLnVpLnBvcHVsYXRpb25tb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvcG9wdWxhdGlvbm1vZGVscy9zdGFuZGFyZC93aXphcmRzL1N0YW5kYXJkUG9wdWxhdGlvbk1vZGVsUHJvcGVydHlFZGl0b3JBZGFwdGVyRmFjdG9yeS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ2YWFlOTYKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvcG9wdWxhdGlvbnMvb3JnLmVjbGlwc2Uuc3RlbS51aS5wb3B1bGF0aW9ubW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3BvcHVsYXRpb25tb2RlbHMvc3RhbmRhcmQvd2l6YXJkcy9TdGFuZGFyZFBvcHVsYXRpb25Nb2RlbFByb3BlcnR5RWRpdG9yQWRhcHRlckZhY3RvcnkuamF2YQpAQCAtMCwwICsxLDQ1IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0udWkucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC53aXphcmRzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5BZGFwdGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC51dGlsLlN0YW5kYXJkQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS51aS5wb3B1bGF0aW9ubW9kZWxzLmFkYXB0ZXJzLlBvcHVsYXRpb25Nb2RlbFByb3BlcnR5RWRpdG9yQWRhcHRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnVpLnBvcHVsYXRpb25tb2RlbHMuYWRhcHRlcnMuUG9wdWxhdGlvbk1vZGVsUHJvcGVydHlFZGl0b3JBZGFwdGVyRmFjdG9yeTsKKworcHVibGljIGNsYXNzIFN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsUHJvcGVydHlFZGl0b3JBZGFwdGVyRmFjdG9yeSBleHRlbmRzCisJCVN0YW5kYXJkQWRhcHRlckZhY3RvcnkgaW1wbGVtZW50cworCQlQb3B1bGF0aW9uTW9kZWxQcm9wZXJ0eUVkaXRvckFkYXB0ZXJGYWN0b3J5IHsKKworCXB1YmxpYyBTdGFuZGFyZFBvcHVsYXRpb25Nb2RlbFByb3BlcnR5RWRpdG9yQWRhcHRlckZhY3RvcnkoKSB7CisJCXN1cGVyKCk7CisJCVBvcHVsYXRpb25Nb2RlbFByb3BlcnR5RWRpdG9yQWRhcHRlckZhY3RvcnkuSU5TVEFOQ0UKKwkJCQkuYWRkQWRhcHRlckZhY3RvcnkodGhpcyk7CisJfQorCisJQE92ZXJyaWRlCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxBZGFwdGVyKCkgeworCQlyZXR1cm4gbmV3IFN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsUHJvcGVydHlFZGl0b3JBZGFwdGVyKCk7CisJfQorCisKKwlAT3ZlcnJpZGUKKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVNb3NxdWl0b1BvcHVsYXRpb25Nb2RlbEFkYXB0ZXIoKSB7CisJCXJldHVybiBuZXcgTW9zcXVpdG9Qb3B1bGF0aW9uTW9kZWxQcm9wZXJ0eUVkaXRvckFkYXB0ZXIoKTsKKwl9CisJCisJQE92ZXJyaWRlCisJcHVibGljIGJvb2xlYW4gaXNGYWN0b3J5Rm9yVHlwZShPYmplY3QgdHlwZSkgeworCQlyZXR1cm4gdHlwZSA9PSBQb3B1bGF0aW9uTW9kZWxQcm9wZXJ0eUVkaXRvckFkYXB0ZXIuY2xhc3MKKwkJCQl8fCBzdXBlci5pc0ZhY3RvcnlGb3JUeXBlKHR5cGUpOworCX0KKworfSAvLyBTdGFuZGFyZFBvcHVsYXRpb25Nb2RlbFByb3BlcnR5RWRpdG9yQWRhcHRlckZhY3RvcnkKZGlmZiAtLWdpdCBhL21vZGVscy9wb3B1bGF0aW9ucy9vcmcuZWNsaXBzZS5zdGVtLnVpLnBvcHVsYXRpb25tb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvcG9wdWxhdGlvbm1vZGVscy9zdGFuZGFyZC93aXphcmRzL1N0YW5kYXJkUHJvcGVydHlTdHJpbmdQcm92aWRlckFkYXB0ZXJGYWN0b3J5LmphdmEgYi9tb2RlbHMvcG9wdWxhdGlvbnMvb3JnLmVjbGlwc2Uuc3RlbS51aS5wb3B1bGF0aW9ubW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3BvcHVsYXRpb25tb2RlbHMvc3RhbmRhcmQvd2l6YXJkcy9TdGFuZGFyZFByb3BlcnR5U3RyaW5nUHJvdmlkZXJBZGFwdGVyRmFjdG9yeS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlkZGI1NjIKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvcG9wdWxhdGlvbnMvb3JnLmVjbGlwc2Uuc3RlbS51aS5wb3B1bGF0aW9ubW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3BvcHVsYXRpb25tb2RlbHMvc3RhbmRhcmQvd2l6YXJkcy9TdGFuZGFyZFByb3BlcnR5U3RyaW5nUHJvdmlkZXJBZGFwdGVyRmFjdG9yeS5qYXZhCkBAIC0wLDAgKzEsMTE2IEBACisvLyBTdGFuZGFyZFByb3BlcnR5U3RyaW5nUHJvdmlkZXJBZGFwdGVyRmFjdG9yeS5qYXZhCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0udWkucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC53aXphcmRzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuQWRhcHRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRVN0cnVjdHVyYWxGZWF0dXJlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtUHJvcGVydHlEZXNjcmlwdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC51dGlsLlN0YW5kYXJkQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS51aS5hZGFwdGVycy5wcm9wZXJ0eXN0cmluZ3MuUHJvcGVydHlTdHJpbmdQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnVpLmFkYXB0ZXJzLnByb3BlcnR5c3RyaW5ncy5Qcm9wZXJ0eVN0cmluZ1Byb3ZpZGVyQWRhcHRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnVpLmFkYXB0ZXJzLnByb3BlcnR5c3RyaW5ncy5Qcm9wZXJ0eVN0cmluZ1Byb3ZpZGVyQWRhcHRlckZhY3Rvcnk7CisKKy8qKgorICogVGhpcyBjbGFzcyBpcyB1c2VkIHRvIE5MUydkIHN0cmluZ3MgZm9yIHtAbGluayBEaXNlYXNlTW9kZWx9IHByb3BlcnRpZXMuIAorICovCitwdWJsaWMgY2xhc3MgU3RhbmRhcmRQcm9wZXJ0eVN0cmluZ1Byb3ZpZGVyQWRhcHRlckZhY3RvcnkgZXh0ZW5kcworCQlTdGFuZGFyZEFkYXB0ZXJGYWN0b3J5IGltcGxlbWVudHMgUHJvcGVydHlTdHJpbmdQcm92aWRlckFkYXB0ZXJGYWN0b3J5IHsKKworCQorCVByb3BlcnR5U3RyaW5nUHJvdmlkZXJBZGFwdGVyIGFkYXB0ZXIgPSBudWxsOworCisJLyoqCisJICogRGVmYXVsdCBDb25zdHJ1Y3RvcgorCSAqLworCXB1YmxpYyBTdGFuZGFyZFByb3BlcnR5U3RyaW5nUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSgpIHsKKwkJc3VwZXIoKTsKKwkJUHJvcGVydHlTdHJpbmdQcm92aWRlckFkYXB0ZXJGYWN0b3J5LklOU1RBTkNFLmFkZEFkYXB0ZXJGYWN0b3J5KHRoaXMpOworCX0KKwkKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LmltcGwuQWRhcHRlckZhY3RvcnlJbXBsI2lzRmFjdG9yeUZvclR5cGUoamF2YS5sYW5nLk9iamVjdCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgYm9vbGVhbiBpc0ZhY3RvcnlGb3JUeXBlKE9iamVjdCB0eXBlKSB7CisJCXJldHVybiAgc3VwZXIuaXNGYWN0b3J5Rm9yVHlwZSh0eXBlKSB8fCB0eXBlID09IFByb3BlcnR5U3RyaW5nUHJvdmlkZXIuY2xhc3M7CisJfQorCisJLyoqCisJICoKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVQb3B1bGF0aW9uTW9kZWxBZGFwdGVyKCkgeworCQkvLyBIYXZlIHdlIGNyZWF0ZWQgb25lIGJlZm9yZT8KKwkJaWYgKGFkYXB0ZXIgPT0gbnVsbCkgeworCQkJLy8gTm8KKwkJCWFkYXB0ZXIgPSBuZXcgU3RhbmRhcmRQcm9wZXJ0eVN0cmluZ1Byb3ZpZGVyQWRhcHRlcigpOworCQl9IC8vIGlmIHdlIGRpZG4ndCBjcmVhdGUgb25lIGJlZm9yZQorCQlyZXR1cm4gYWRhcHRlcjsKKwl9IC8vIGNyZWF0ZURpc2Vhc2VNb2RlbEFkYXB0ZXIKKworCS8qKgorCSAqIAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZVBvcHVsYXRpb25Jbml0aWFsaXplckFkYXB0ZXIoKSB7CisJCS8vIEhhdmUgd2UgY3JlYXRlZCBvbmUgYmVmb3JlPworCQlpZiAoYWRhcHRlciA9PSBudWxsKSB7CisJCQkvLyBObworCQkJYWRhcHRlciA9IG5ldyBTdGFuZGFyZFByb3BlcnR5U3RyaW5nUHJvdmlkZXJBZGFwdGVyKCk7CisJCX0gLy8gaWYgd2UgZGlkbid0IGNyZWF0ZSBvbmUgYmVmb3JlCisJCXJldHVybiBhZGFwdGVyOworCX0gLy8gY3JlYXRlRGlzZWFzZU1vZGVsQWRhcHRlcgorCisJLyoqCisJICogVGhpcyBjbGFzcyByZXByZXNlbnRzIAorCSAqLworCXB1YmxpYyBzdGF0aWMgY2xhc3MgU3RhbmRhcmRQcm9wZXJ0eVN0cmluZ1Byb3ZpZGVyQWRhcHRlciBleHRlbmRzCisJCQlQcm9wZXJ0eVN0cmluZ1Byb3ZpZGVyQWRhcHRlciB7CisKKwkJLyoqCisJCSAqIEBwYXJhbSBkZXNjcmlwdG9yCisJCSAqIEByZXR1cm4gdGhlIE5MUydkIG5hbWUgb2YgdGhlIHByb3BlcnR5IHRvIGRpc3BsYXkgdG8gdGhlIHVzZXIKKwkJICovCisJCXB1YmxpYyBTdHJpbmcgZ2V0UHJvcGVydHlOYW1lKElJdGVtUHJvcGVydHlEZXNjcmlwdG9yIGRlc2NyaXB0b3IpIHsKKwkJCXJldHVybiBQb3B1bGF0aW9uTW9kZWxXaXphcmRNZXNzYWdlcworCQkJCQkuZ2V0U3RyaW5nKCgoRVN0cnVjdHVyYWxGZWF0dXJlKSBkZXNjcmlwdG9yCisJCQkJCQkJLmdldEZlYXR1cmUobnVsbCkpLmdldE5hbWUoKSk7CisJCX0gLy8gZ2V0UHJvcGVydHlOYW1lCisKKwkJLyoqCisJCSAqIEBwYXJhbSBkZXNjcmlwdG9yCisJCSAqIEByZXR1cm4gdGhlIE5MUydkIHRvb2wgdGlwIHRleHQgdGhhdCBkZXNjcmliZXMgdGhlIHByb3BlcnR5CisJCSAqLworCQlwdWJsaWMgU3RyaW5nIGdldFByb3BlcnR5VG9vbFRpcCgKKwkJCQlJSXRlbVByb3BlcnR5RGVzY3JpcHRvciBkZXNjcmlwdG9yKSB7CisJCQlmaW5hbCBFU3RydWN0dXJhbEZlYXR1cmUgZmVhdHVyZSA9IChFU3RydWN0dXJhbEZlYXR1cmUpIGRlc2NyaXB0b3IKKwkJCQkJLmdldEZlYXR1cmUobnVsbCk7CisJCQlyZXR1cm4gUG9wdWxhdGlvbk1vZGVsV2l6YXJkTWVzc2FnZXMuZ2V0U3RyaW5nKGZlYXR1cmUuZ2V0TmFtZSgpCisJCQkJCSsgVFRfU1VGRklYKTsKKwkJfSAvLyBnZXRQcm9wZXJ0eVRvb2xUaXAKKworCQkvKioKKwkJICogQHBhcmFtIGRlc2NyaXB0b3IKKwkJICogQHJldHVybiB0aGUgTkxTJ2QgdGV4dCB0aGF0IHJlcHJlc2VudHMgdGhlIHVuaXRzIG9mIHRoZQorCQkgKiAgICAgICAgIHByb3BlcnR5CisJCSAqLworCQlwdWJsaWMgU3RyaW5nIGdldFByb3BlcnR5VW5pdHMoCisJCQkJSUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IgZGVzY3JpcHRvcikgeworCQkJZmluYWwgRVN0cnVjdHVyYWxGZWF0dXJlIGZlYXR1cmUgPSAoRVN0cnVjdHVyYWxGZWF0dXJlKSBkZXNjcmlwdG9yCisJCQkJCS5nZXRGZWF0dXJlKG51bGwpOworCQkJcmV0dXJuIFBvcHVsYXRpb25Nb2RlbFdpemFyZE1lc3NhZ2VzLmdldFN0cmluZyhmZWF0dXJlLmdldE5hbWUoKQorCQkJCQkrIFVOSVRfU1VGRklYKTsKKwkJfSAvLyBnZXRQcm9wZXJ0eVVuaXRzCisKKwl9IC8vIFN0YW5kYXJkUHJvcGVydHlTdHJpbmdQcm92aWRlckFkYXB0ZXIKK30gLy8gU3RhbmRhcmRQcm9wZXJ0eVN0cmluZ1Byb3ZpZGVyQWRhcHRlckZhY3RvcnkKZGlmZiAtLWdpdCBhL21vZGVscy9wb3B1bGF0aW9ucy9vcmcuZWNsaXBzZS5zdGVtLnVpLnBvcHVsYXRpb25tb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvcG9wdWxhdGlvbm1vZGVscy9zdGFuZGFyZC93aXphcmRzL3BvcHVsYXRpb25tb2RlbHdpemFyZG1lc3NhZ2VzLnByb3BlcnRpZXMgYi9tb2RlbHMvcG9wdWxhdGlvbnMvb3JnLmVjbGlwc2Uuc3RlbS51aS5wb3B1bGF0aW9ubW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3BvcHVsYXRpb25tb2RlbHMvc3RhbmRhcmQvd2l6YXJkcy9wb3B1bGF0aW9ubW9kZWx3aXphcmRtZXNzYWdlcy5wcm9wZXJ0aWVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYxYjJiZmIKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvcG9wdWxhdGlvbnMvb3JnLmVjbGlwc2Uuc3RlbS51aS5wb3B1bGF0aW9ubW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3BvcHVsYXRpb25tb2RlbHMvc3RhbmRhcmQvd2l6YXJkcy9wb3B1bGF0aW9ubW9kZWx3aXphcmRtZXNzYWdlcy5wcm9wZXJ0aWVzCkBAIC0wLDAgKzEsMTYxIEBACisjIGRpc2Vhc2V3aXphcmRtZXNzYWdlcy5wcm9wZXJ0aWVzCisjCisjLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyMgKiBDb3B5cmlnaHQgKGMpIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisjICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworIyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorIyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisjICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyMgKgorIyAqIENvbnRyaWJ1dG9yczoKKyMgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisjICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyMgTmV3IERpc2Vhc2UgV2l6YXJkCisKK05Qb3B1bGF0aW9uTW9kZWxXaXoud2l6YXJkX3RpdGxlID0gTmV3IFBvcHVsYXRpb24gTW9kZWwKK05Qb3B1bGF0aW9uTW9kZWxXaXoucGFnZV90aXRsZSA9IENyZWF0ZSBhIG5ldyBwb3B1bGF0aW9uIG1vZGVsCitOUG9wdWxhdGlvbk1vZGVsV2l6LnBhZ2VfZGVzY3JpcHRpb24gPSBEZWZpbmUgYSBuZXcgcG9wdWxhdGlvbiBtb2RlbCBpbiBhIHByb2plY3QKKworTlBvcHVsYXRpb25Jbml0aWFsaXplcldpei53aXphcmRfdGl0bGUgPSBOZXcgUG9wdWxhdGlvbiBJbml0aWFsaXplcgorTlBvcHVsYXRpb25Jbml0aWFsaXplcldpei5wYWdlX3RpdGxlID0gQ3JlYXRlIGEgbmV3IHBvcHVsYXRpb24gaW5pdGlhbGl6ZXIKK05Qb3B1bGF0aW9uSW5pdGlhbGl6ZXJXaXoucGFnZV9kZXNjcmlwdGlvbiA9ICBEZWZpbmUgYSBuZXcgcG9wdWxhdGlvbiBpbml0aWFsaXplciBpbiBhIHByb2plY3QKKworTlBvcHVsYXRpb25XaXouRENfREVTQ1JJUFRJT04gPSBQb3B1bGF0aW9uIE1vZGVsICJ7MH0iCitOUG9wdWxhdGlvbkluaXRpYWxpemVyV2l6LkRDX0RFU0NSSVBUSU9OID0gUG9wdWxhdGlvbiBJbml0aWFsaXplciAiezB9IgorCitQTVRQX0RlZiA9ICpQTS9UUCA9IFBvcHVsYXRpb24gTWVtYmVyL1RpbWUgUGVyaW9kCisKK2RlYXRoUmF0ZSA9IEJhY2tncm91bmQgTW9ydGFsaXR5IFJhdGUgKFx1MDNiYykKK2RlYXRoUmF0ZVRUID0gVGhlIHJhdGUgYXQgd2hpY2ggcG9wdWxhdGlvbiBtZW1iZXJzIGRpZSBmcm9tIGNhdXNlcyBvdGhlciB0aGFuIHRoZSBkaXNlYXNlLgorZGVhdGhSYXRlVU5JVCA9IFBNL1RQKgorCitiaXJ0aFJhdGUgPSBCYWNrZ3JvdW5kIEJpcnRoIFJhdGUKK2JpcnRoUmF0ZVRUID0gVGhlIHJhdGUgYXQgd2hpY2ggcG9wdWxhdGlvbiBtZW1iZXJzIGFyZSBib3JuLgorYmlydGhSYXRlVU5JVCA9IFBNL1RQKgorCitwb3B1bGF0aW9uSWRlbnRpZmllciA9IFBvcHVsYXRpb24KK3BvcHVsYXRpb25JZGVudGlmaWVyVFQgPSBUaGUgbmFtZSBvZiB0aGUgcG9wdWxhdGlvbiBpbmZlY3RlZCBieSB0aGlzIGRpc2Vhc2UuIChlLmcuLCBodW1hbikKK3BvcHVsYXRpb25JZGVudGlmaWVyVU5JVCA9IAorCit0aW1lUGVyaW9kID0gVGltZSBQZXJpb2QgKFRQKQordGltZVBlcmlvZFRUID0gVGhlIHRpbWUgcGVyaW9kIGZvciB0aGUgcmF0ZXMgKGUuZy4sIDg2NDAwMDAwbXMgPSAxIGRheSkuCit0aW1lUGVyaW9kVU5JVCA9IG1zCisKK25hbWUgPSBNb2RlbCBuYW1lCituYW1lVFQgPSBTcGVjaWZ5IGEgbmFtZSBmb3IgdGhlIHBvcHVsYXRpb24gbW9kZWwKK25hbWVVTklUID0gCisKK2dhaW4gPSBSYW5kb20gbm9pc2UgZ2FpbgorZ2FpblRUID0gU3BlY2lmeSB0aGUgcmFuZG9tIG5vaXNlIGdhaW4gZm9yIHRoZSBwb3B1bGF0aW9uIG1vZGVsCitnYWluVU5JVCA9IAorCittb2R1bGF0aW9uQW1wbGl0dWRlID0gRnJhY3Rpb24gb2YgYmFzZSBCaXJ0aC9EZWF0aCByYXRlcyB0byBtb2R1bGF0ZSAoMC4wLT4xLjApCittb2R1bGF0aW9uQW1wbGl0dWRlVFQgPSBTcGVjaWZ5IHRoZSBzZWFzb25hbCBtb2R1bGF0aW9uIGFtcGxpdHVkZQorbW9kdWxhdGlvbkFtcGxpdHVkZVVOSVQgPSAKKworcGhhc2UgPSBQaGFzZQorcGhhc2VUVCA9IFNwZWNpZnkgdGhlIHNlYXNvbmFsIHBoYXNlICgwLT4ycGkpCitwaGFzZVVOSVQgPSAKKworcGVyaW9kID0gU2Vhb25hbCBQZXJpb2QKK3BlcmlvZFRUID0gU3BlY2lmeSB0aGUgc2Vhc29uYWwgcGVyaW9kCitwZXJpb2RVTklUID0gW3RpbWVdIAorCit1c2VMYXRpdHVkZSA9IHVzZSBsYXRpdHVkZQordXNlTGF0aXR1ZGVUVCA9IHVzZSBsYXRpdHVkZSBmdW5jdGlvbj8KK3VzZUxhdGl0dWRlVU5JVCA9IAorCitoYXNNYXhBZ2UgPSBVc2UgTWF4aW11bSBBZ2UKK2hhc01heEFnZVRUID0gVXNlIE1heGltdW0gQWdlIGZvciBMYXN0IEFnZSBHcm91cD8KK2hhc01heEFnZVVOSVQgPSAKKworTkRpeldpekVycjA9TWlzc2luZyBQb3B1bGF0aW9uIElkZW50aWZpZXIKK05EaXpXaXpFcnI0PU1pc3NpbmcgQmFja2dyb3VuZCBNb3J0YWxpdHkgUmF0ZS4KK05EaXpXaXpFcnI1PUJhY2tncm91bmQgbW9ydGFsaXR5IHJhdGUgaXMgaW52YWxpZC4KK05EaXpXaXpFcnI2PU1pc3NpbmcgQmFja2dyb3VuZCBCaXJ0aCBSYXRlLgorTkRpeldpekVycjc9QmFja2dyb3VuZCBiaXJ0aCByYXRlIGlzIGludmFsaWQuCitORGl6V2l6RXJyOD1NaXNzaW5nIFRpbWUgUGVyaW9kCitORGl6V2l6RXJyOT1UaW1lIHBlcmlvZCBpcyBpbnZhbGlkCitORGl6V2l6RXJyMTA9R2FpbiBpcyBpbnZhbGlkCitORGl6V2l6RXJyMTE9VGhlIGdyb3VwIGZyYWN0aW9ucyBhZGQgdXAgdG8gYSB2YWx1ZSBncmVhdGVyIHRoYW4gMS4KK05EaXpXaXpFcnIxMj1NaXNzaW5nIGdyb3VwIGlkCitORGl6V2l6RXJyMTM9SW52YWxpZCBmcmFjdGlvbgorIAorTkRpeldpekVycjE1PU1pc3NpbmcgcG9wdWxhdGlvbiBpZGVudGlmaWVyCitORGl6V2l6RXJyMTY9TWlzc2luZyBpbmRpdmlkdWFscyBjb3VudAorTkRpeldpekVycjE3PUludmFsaWQgaW5kaXZpZHVhbCBjb3VudC4gTXVzdCBiZSBncmVhdGVyIHRoYW4gMAorCitORGl6V2l6RXJyMTg9TW9kdWxhdGlvbiBBbXBsaXR1ZGUgaXMgSW52YWxpZAorTkRpeldpekVycjE5PVBoYXNlIGlzIEludmFsaWQKK05EaXpXaXpFcnIyMD1TY2FsaW5nIGZhY3RvciBpcyBpbnZhbGlkCitORGl6V2l6RXJyMjE9VGltZSBwZXJpb2QgaXMgaW52YWxpZAorCitORGl6V2l6RXJyMjI9SW52YWxpZCBUbyBBZ2UgdmFsdWUKK05EaXpXaXpFcnIyMz1JbnZhbGlkIE1vcnRhbGl0eSBGYWN0b3IKKyAKK0RNUEMxPVBvcHVsYXRpb24gTW9kZWwgUHJvcGVydHkgQ29udHJvbAorRE1QQzI9TWlzc2luZyBQb3B1bGF0aW9uIFByb3BlcnR5IEVkaXRvciBmb3IgIgorRE1QQzM9UG9wdWxhdGlvbiBJbml0aWFsaXplciBQcm9wZXJ0eSBDb250cm9sCitETVBDND1NaXNzaW5nIFBvcHVsYXRpb24gSW5pdGlhbGl6ZXIgUHJvcGVydHkgRWRpdG9yIGZvciAiCisKK0REQy4wPVBvcHVsYXRpb24gTW9kZWw6CitEREMuMT1VbmRlcmx5aW5nIE1hdGhlbWF0aWNhbCBQb3B1bGF0aW9uIE1vZGVsCitEREMuMj1jbGFzcworRERDLjM9UHJvYmxlbSBjcmVhdGluZyBQb3B1bGF0aW9uIE1vZGVsIGluc3RhbmNlCitEREMuND1Qcm9ibGVtIGNyZWF0aW5nIFBvcHVsYXRpb24gSW5pdGlhbGl6ZXIgaW5zdGFuY2UKK0REQy41PVBvcHVsYXRpb24gSW5pdGlhbGl6ZXI6CisKKyMgUHJlZmVyZW5jZXMKK1BvcHVsYXRpb25QUGFnZVRJVExFPVBvcHVsYXRpb24gTW9kZWxpbmcKK1JlZmVyZW5jZVBvcHVsYXRpb249UmVmZXJlbmNlIHBvcHVsYXRpb24gKGluZGl2aWR1YWxzKQorUmVmZXJlbmNlRGVuc2l0eT1SZWZlcmVuY2UgcG9wdWxhdGlvbiBkZW5zaXR5IChpbmRpdmlkdWFscy9zcSBrbSkKKworI1BvcHVsYXRpb24gZ3JvdXBzCithZGRHcm91cD0rCithZGRHcm91cFRUPUFkZCBhIG5ldyBwb3B1bGF0aW9uIGdyb3VwCisKK3JlbW92ZUdyb3VwPS0KK3JlbW92ZUdyb3VwVFQ9UmVtb3ZlIHBvcHVsYXRpb24gZ3JvdXAKKworcG9wdWxhdGlvbklkID0gSWRlbnRpZmllcgorcG9wdWxhdGlvbklkRnJhY3Rpb24gPSBGcmFjdGlvbgorCitzZXRGcmFjdGlvbnMgPSBTZXQgRnJhY3Rpb25zIHRvIEVxdWlsaWJyaXVtCitzZXRGcmFjdGlvbnNUVCA9CisKK3NldERlYXRoUmF0ZXMgPSBTZXQgRGVhdGggUmF0ZXMgdG8gRXF1aWxpYnJpdW0KK3NldERlYXRoUmF0ZXNUVCA9CisKKyNBZ2UgR3JvdXBzCitmcm9tQWdlID0gRnJvbSBBZ2UKK3RvQWdlID0gVG8gQWdlCitkZWF0aEZhY3RvciA9IE1vcnRhbGl0eSBGYWN0b3IKKworTlBvcFdpeklTT0sgPSBMb2NhdGlvbiBJU08gS2V5CitOUG9wV2l6UGlja0xvYyA9IFBpY2sgTG9jYXRpb24KK05Qb3BXaXpQaWNrTG9jVGl0bGUgPSBQaWNrIExvY2F0aW9uCisKK2luZGl2aWR1YWxzID0gSW5kaXZpZHVhbHMKK2luZGl2aWR1YWxzVFQgPSBOdW1iZXIgb2YgaW5kaXZpZHVhbHMKK2luZGl2aWR1YWxzVU5JVD0gQ291bnQgb3IgQ291bnQgLyBrbV4yCisKK3VzZURlbnNpdHkgPSBVc2UgZGVuc2l0eQordXNlRGVuc2l0eVRUID0gVXNlIGluZGl2aWR1YWxzIHBlciBzcXVhcmUga2lsb21ldGVyCit1c2VEZW5zaXR5VU5JVCA9IAorCitZRVMgPSBZZXMKK05PID0gTm8KKworCitzY2FsaW5nRmFjdG9yID0gU2NhbGluZyBGYWN0b3IKK3NjYWxpbmdGYWN0b3JUVCA9IFNwZWNpZnkgdGhlIHNjYWxpbmcgZmFjdG9yCitzY2FsaW5nRmFjdG9yVU5JVCA9IAorCittb3J0YWxpdHlSYXRlID0gTW9ydGFsaXR5IFJhdGUKK21vcnRhbGl0eVJhdGVVTklUID0gdmVjdG9yL3RwCittb3J0YWxpdHlSYXRlVFQgID0gTW9ydGFsaXR5IFJhdGUuIDEgLyAoTW9ydGFsaXR5IFJhdGUpIGlzIHRoZSB2ZWN0b3IgbGlmZSBleHBlY3RhbmN5LgorCitob3N0ID0gSG9zdAoraG9zdFVOSVQgPSAKK2hvc3RUVCA9IFRoZSBhbmltYWwgdGhlIHZlY3RvciBkcmF3cyBibG9vZCBmcm9tICh1c3VhbGx5IGh1bWFuKQpkaWZmIC0tZ2l0IGEvbW9kZWxzL3BvcHVsYXRpb25zL29yZy5lY2xpcHNlLnN0ZW0udWkucG9wdWxhdGlvbm1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9wb3B1bGF0aW9ubW9kZWxzL3N0YW5kYXJkL3dpemFyZHMvcG9wdWxhdGlvbm1vZGVsd2l6YXJkbWVzc2FnZXNfZGUucHJvcGVydGllcyBiL21vZGVscy9wb3B1bGF0aW9ucy9vcmcuZWNsaXBzZS5zdGVtLnVpLnBvcHVsYXRpb25tb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvcG9wdWxhdGlvbm1vZGVscy9zdGFuZGFyZC93aXphcmRzL3BvcHVsYXRpb25tb2RlbHdpemFyZG1lc3NhZ2VzX2RlLnByb3BlcnRpZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzk0YTg3YwotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9wb3B1bGF0aW9ucy9vcmcuZWNsaXBzZS5zdGVtLnVpLnBvcHVsYXRpb25tb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvcG9wdWxhdGlvbm1vZGVscy9zdGFuZGFyZC93aXphcmRzL3BvcHVsYXRpb25tb2RlbHdpemFyZG1lc3NhZ2VzX2RlLnByb3BlcnRpZXMKQEAgLTAsMCArMSwxNjEgQEAKKyMgZGlzZWFzZXdpemFyZG1lc3NhZ2VzLnByb3BlcnRpZXMKKyMKKyMvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIyAqIENvcHlyaWdodCAoYykgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyMgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisjICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisjICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyMgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorIyAqCisjICogQ29udHJpYnV0b3JzOgorIyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworIyBOZXcgRGlzZWFzZSBXaXphcmQKKworTlBvcHVsYXRpb25Nb2RlbFdpei53aXphcmRfdGl0bGU9TmV1ZXMgQmV2XHUwMGY2bGtlcnVuZ3Ntb2RlbGwKK05Qb3B1bGF0aW9uTW9kZWxXaXoucGFnZV90aXRsZT1OZXVlcyBCZXZcdTAwZjZsa2VydW5nc21vZGVsbCBlcnN0ZWxsZW4KK05Qb3B1bGF0aW9uTW9kZWxXaXoucGFnZV9kZXNjcmlwdGlvbj1OZXVlcyBCZXZcdTAwZjZsa2VydW5nc21vZGVsbCBpbiBlaW5lbSBQcm9qZWt0IGRlZmluaWVyZW4KKworTlBvcHVsYXRpb25Jbml0aWFsaXplcldpei53aXphcmRfdGl0bGU9TmV1ZXIgQmV2XHUwMGY2bGtlcnVuZ3Npbml0aWFsaXNpZXJlcgorTlBvcHVsYXRpb25Jbml0aWFsaXplcldpei5wYWdlX3RpdGxlPU5ldWVuIEJldlx1MDBmNmxrZXJ1bmdzaW5pdGlhbGlzaWVyZXIgZXJzdGVsbGVuCitOUG9wdWxhdGlvbkluaXRpYWxpemVyV2l6LnBhZ2VfZGVzY3JpcHRpb249TmV1ZW4gQmV2XHUwMGY2bGtlcnVuZ3Npbml0aWFsaXNpZXJlciBpbiBlaW5lbSBQcm9qZWt0IGRlZmluaWVyZW4KKworTlBvcHVsYXRpb25XaXouRENfREVTQ1JJUFRJT049QmV2XHUwMGY2bGtlcnVuZ3Ntb2RlbGwgInswfSIKK05Qb3B1bGF0aW9uSW5pdGlhbGl6ZXJXaXouRENfREVTQ1JJUFRJT049QmV2XHUwMGY2bGtlcnVuZ3Npbml0aWFsaXNpZXJlciAiezB9IgorCitQTVRQX0RlZiA9ICpQTS9UUCA9IFBvcHVsYXRpb24gTWVtYmVyL1RpbWUgUGVyaW9kCisKK2RlYXRoUmF0ZT1TdGVyYmxpY2hrZWl0c3JhdGUgKFwgdTAzYmMpCitkZWF0aFJhdGVUVD1EaWUgUmF0ZSwgbWl0IGRlciBCZXZcdTAwZjZsa2VydW5nc21pdGdsaWVkZXIgc3RlcmJlbiBhdXMgYW5kZXJlbiBHclx1MDBmY25kZW4gYWxzIGRlciBLcmFua2hlaXQuCitkZWF0aFJhdGVVTklUPVBNIC8gVFAgKgorCitiaXJ0aFJhdGU9R2VidXJ0ZW5yYXRlCitiaXJ0aFJhdGVUVD1EaWUgUmF0ZSwgbWl0IGRlciBCZXZcdTAwZjZsa2VydW5nc21pdGdsaWVkZXIgZ2Vib3JlbiB3ZXJkZW4uCitiaXJ0aFJhdGVVTklUPVBNIC8gVFAgKgorCitwb3B1bGF0aW9uSWRlbnRpZmllcj1CZXZcdTAwZjZsa2VydW5nCitwb3B1bGF0aW9uSWRlbnRpZmllclRUPURlciBOYW1lIGRlciB2b24gZGllc2VyIEtyYW5raGVpdCBpbmZpemllcnRlbiBCZXZcdTAwZjZsa2VydW5nLiAoWi4gQi4sIE1lbnNjaCkKK3BvcHVsYXRpb25JZGVudGlmaWVyVU5JVD0KKwordGltZVBlcmlvZD1aZWl0cmF1bSAoVFApCit0aW1lUGVyaW9kVFQgPSBUaGUgdGltZSBwZXJpb2QgZm9yIHRoZSByYXRlcyAoZS5nLiwgODY0MDAwMDBtcyA9IDEgZGF5KS4KK3RpbWVQZXJpb2RVTklUPW1zCisKK25hbWU9TW9kZWxsbmFtZQorbmFtZVRUPU5hbWVuIGZcdTAwZmNyIEJldlx1MDBmNmxrZXJ1bmdzbW9kZWxsIGFuZ2ViZW4KK25hbWVVTklUPQorCitnYWluPVdlaVx1MDBkZmVzLVJhdXNjaGVuLVZlcnN0XHUwMGU0cmt1bmcKK2dhaW5UVD1WZXJzdFx1MDBlNHJrdW5nIGRlcyB3ZWlcdTAwZGZlbiByYXVzY2hlbnMgZlx1MDBmY3IgZGFzIEJldlx1MDBmNmxrZXJ1bmdzbW9kZWxsIGFuZ2ViZW4KK2dhaW5VTklUPQorCittb2R1bGF0aW9uQW1wbGl0dWRlPUFudGVpbCBkZXIgR2VidXJ0cy0gU3RlcmJlcmF0ZSB6dSBtb2R1bGllcmVuICgwLjAtPiAxLDApCittb2R1bGF0aW9uQW1wbGl0dWRlVFQ9U2Fpc29uYWxlIE1vZHVsYXRpb25zYW1wbGl0dWRlIGFuZ2ViZW4KK21vZHVsYXRpb25BbXBsaXR1ZGVVTklUPQorCitwaGFzZT1QaGFzZQorcGhhc2VUVD1TYWlzb25hbGVuIFBoYXNlIGFuZ2ViZW4gKDAgLT4gMnBpKQorcGhhc2VVTklUPQorCitwZXJpb2Q9U2Fpc29uYWxlIERhdWVyCitwZXJpb2RUVD1TYWlzb25hbGUgRGF1ZXIgYW5nZWJlbgorcGVyaW9kVU5JVD1bWmVpdF0KKwordXNlTGF0aXR1ZGU9QnJlaXRlbmdyYWQgYmVudXR6ZW4KK3VzZUxhdGl0dWRlVFQ9QnJlaXRlbmdyYWQtRnVua3Rpb24gYmVudXR6ZW4/Cit1c2VMYXRpdHVkZVVOSVQ9CisKK2hhc01heEFnZT1IXHUwMGY2Y2hzdGFsdGVyIGJlbnV0emVuCitoYXNNYXhBZ2VUVD1IXHUwMGY2Y2hzdGFsdGVyIGZcdTAwZmNyIGRpZSBsZXR6dGUgQmV2XHUwMGY2bGtlcnVuZ3NncnVwcGUgYmVudXR6ZW4/CitoYXNNYXhBZ2VVTklUPQorCitORGl6V2l6RXJyMD1CZXZcdTAwZjZsa2VydW5nc2JlemVpY2huZXIgZmVobHQuCitORGl6V2l6RXJyND1TdGVyYmxpY2hrZWl0c3JhdGUgZmVobHQuCitORGl6V2l6RXJyNT1TdGVyYmxpY2hrZWl0c3JhdGUgaXN0IHVuZ1x1MDBmY2x0aWcuCitORGl6V2l6RXJyNj1HZWJ1cnRlbnJhdGUgZmVobHQuCitORGl6V2l6RXJyNz1HZWJ1cnRlbnJhdGUgaXN0IHVuZ1x1MDBmY2x0aWcuCitORGl6V2l6RXJyOD1aZWl0cmF1bSBmZWhsdC4KK05EaXpXaXpFcnI5PVplaXRyYXVtIGlzdCB1bmdcdTAwZmNsdGlnCitORGl6V2l6RXJyMTA9WnVuYWhtZSBpc3QgdW5nXHUwMGZjbHRpZworTkRpeldpekVycjExPURpZSBHcnVwcGVuYW50ZWlsZSBlcmdlYmVuIHp1c2FtbWVuIGVpbmVuIFdlcnQgZ3JcdTAwZjZcdTAwZGZlciAxLgorTkRpeldpekVycjEyPUdydXBwZW4tSUQgZmVobHQuCitORGl6V2l6RXJyMTM9VW5nXHUwMGZjbHRpZ2VyIEFudGVpbAorIAorTkRpeldpekVycjE1PUJldlx1MDBmNmxrZXJ1bmdzYmV6ZWljaG5lciBmZWhsdC4KK05EaXpXaXpFcnIxNj1QZXJzb25lbmFuemFobCBmZWhsdC4KK05EaXpXaXpFcnIxNz1VbmdcdTAwZmNsdGlnZSBBbnphaGwgdm9uIFBlcnNvbmVuLiBNdXNzIGdyXHUwMGY2XHUwMGRmZXIgYWxzIDAgc2VpbgorCitORGl6V2l6RXJyMTg9TW9kdWxhdGlvbnNhbXBsaXR1ZGUgaXN0IHVuZ1x1MDBmY2x0aWcKK05EaXpXaXpFcnIxOT1QaGFzZSBpc3QgdW5nXHUwMGZjbHRpZworTkRpeldpekVycjIwPVNrYWxpZXJ1bmdzZmFrdG9yIGlzdCB1bmdcdTAwZmNsdGlnCitORGl6V2l6RXJyMjE9WmVpdHJhdW0gaXN0IHVuZ1x1MDBmY2x0aWcKKworTkRpeldpekVycjIyPVVuZ1x1MDBmY2x0aWdlciBcdTIwMWVCaXMgQWx0ZXJcdTIwMWMtV2VydAorTkRpeldpekVycjIzPVVuZ1x1MDBmY2x0aWdlciBNb3J0YWxpdFx1MDBlNHRzZmFrdG9yCisgCitETVBDMT1CZXZcdTAwZjZsa2VydW5nc21vZGVsbC1FaWdlbnNjaGFmdHNzdGV1ZXJ1bmcKK0RNUEMyPUJldlx1MDBmNmxrZXJ1bmdzZWlnZW5zY2hhZnRzLUVkaXRvciBmXHUwMGZjciAiIGZlaGx0CitETVBDMz1CZXZcdTAwZjZsa2VydW5nc2luaXRpYWxpc2llcmVyLUVpZ2Vuc2NoYWZ0c3N0ZXVlcnVuZworRE1QQzQ9QmV2XHUwMGY2bGtlcnVuZ3Npbml0aWFsaXNpZXJlci1FaWdlbnNjaGFmdHNlZGl0b3IgZlx1MDBmY3IgIiBmZWhsdAorCitEREMuMD1CZXZcdTAwZjZsa2VydW5nc21vZGVsbDoKK0REQy4xPVp1Z3J1bmRlIGxpZWdlbmRlcyBtYXRoZW1hdGlzY2hlcyBCZXZcdTAwZjZsa2VydW5nc21vZGVsbAorRERDLjI9S2xhc3NlCitEREMuMz1Qcm9ibGVtIGJlaW0gRXJzdGVsbGVuIHZvbiBCZXZcdTAwZjZsa2VydW5nc21vZGVsbC1JbnN0YW56CitEREMuND1Qcm9ibGVtIGJlaW0gRXJzdGVsbGVuIHZvbiBCZXZcdTAwZjZsa2VydW5nc2luaXRpYWxpc2llcmVyLUluc3RhbnoKK0REQy41PUJldlx1MDBmNmxrZXJ1bmdzaW5pdGlhbGlzaWVyZXI6CisKKyMgUHJlZmVyZW5jZXMKK1BvcHVsYXRpb25QUGFnZVRJVExFPUJldlx1MDBmNmxrZXJ1bmdzbW9kZWxpZXJ1bmcKK1JlZmVyZW5jZVBvcHVsYXRpb249UmVmZXJlbnotQmV2XHUwMGY2bGtlcnVuZyAoRWluemVscGVyc29uZW4pCitSZWZlcmVuY2VEZW5zaXR5PVJlZmVyZW56LUJldlx1MDBmNmxrZXJ1bmdzZGljaHRlIChQZXJzb25lbiAvIHFrbSkKKworI1BvcHVsYXRpb24gZ3JvdXBzCithZGRHcm91cD0rCithZGRHcm91cFRUPU5ldWUgQmV2XHUwMGY2bGtlcnVuZ3NncnVwcGUgaGluenVmXHUwMGZjZ2VuCisKK3JlbW92ZUdyb3VwPS0KK3JlbW92ZUdyb3VwVFQ9QmV2XHUwMGY2bGtlcnVuZ3NncnVwcGUgZW50ZmVybmVuCisKK3BvcHVsYXRpb25JZD1CZXplaWNobmVyCitwb3B1bGF0aW9uSWRGcmFjdGlvbj1BbnRlaWwKKworc2V0RnJhY3Rpb25zPVNldCBGcmFjdGlvbnMgdG8gRXF1aWxpYnJpdW0KK3NldEZyYWN0aW9uc1RUPQorCitzZXREZWF0aFJhdGVzPVNldCBEZWF0aCBSYXRlcyB0byBFcXVpbGlicml1bQorc2V0RGVhdGhSYXRlc1RUPQorCisjQWdlIEdyb3VwcworZnJvbUFnZT1Wb24gQWx0ZXIKK3RvQWdlPUJpcyBBbHRlcgorZGVhdGhGYWN0b3I9TW9ydGFsaXRcdTAwZTR0c2Zha3RvcgorCitOUG9wV2l6SVNPSz1PcnQgSVNPIFNjaGxcdTAwZmNzc2VsCitOUG9wV2l6UGlja0xvYz1PcnQgd1x1MDBlNGhsZW4KK05Qb3BXaXpQaWNrTG9jVGl0bGU9T3J0IHdcdTAwZTRobGVuCisKK2luZGl2aWR1YWxzPUVpbnplbHBlcnNvbmVuCitpbmRpdmlkdWFsc1RUPUFuemFobCBkZXIgUGVyc29uZW4KK2luZGl2aWR1YWxzVU5JVD1BbnphaGwgb2RlciBBbnphaGwgLyBrbSBeIDIKKwordXNlRGVuc2l0eT1EaWNodGUgdmVyd2VuZGVuCit1c2VEZW5zaXR5VFQ9SW5kaXZpZHVlbiBwcm8gUXVhZHJhdGtpbG9tZXRlciB2ZXJ3ZW5kZW4KK3VzZURlbnNpdHlVTklUPQorCitZRVM9SmEKK05PPU5laW4KKworCitzY2FsaW5nRmFjdG9yPVNrYWxpZXJ1bmdzZmFrdG9yCitzY2FsaW5nRmFjdG9yVFQ9U2thbGllcnVuZ3NmYWt0b3IgYW5nZWJlbgorc2NhbGluZ0ZhY3RvclVOSVQ9CisKK21vcnRhbGl0eVJhdGU9TW9ydGFsaXRcdTAwZTR0c3JhdGUKK21vcnRhbGl0eVJhdGVVTklUPVx1MDBkY2JlcnRyXHUwMGU0Z2VyL3RwCittb3J0YWxpdHlSYXRlVFQ9TW9ydGFsaXRcdTAwZTR0c3JhdGUuIDEgLyAoTW9ydGFsaXRcdTAwZTR0c3JhdGUpIGlzdCBkaWUgTGViZW5zZXJ3YXJ0dW5nIGRlciBcdTAwZGNiZXJ0clx1MDBlNGdlci4KKworaG9zdD1XaXJ0Citob3N0VU5JVD0KK2hvc3RUVD1EaWUgU3BlemllcyB3ZWxjaGVyIGRlciBcdTAwZGNiZXJ0clx1MDBlNGdlciBkYXMgQmx1dCBhdXMgZW50emllaHQgKGluIGRlciBSZWdlbCBkZXIgTWVuc2NoKQpkaWZmIC0tZ2l0IGEvbW9kZWxzL3BvcHVsYXRpb25zL29yZy5lY2xpcHNlLnN0ZW0udWkucG9wdWxhdGlvbm1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9wb3B1bGF0aW9ubW9kZWxzL3N0YW5kYXJkL3dpemFyZHMvcG9wdWxhdGlvbm1vZGVsd2l6YXJkbWVzc2FnZXNfa3IucHJvcGVydGllcyBiL21vZGVscy9wb3B1bGF0aW9ucy9vcmcuZWNsaXBzZS5zdGVtLnVpLnBvcHVsYXRpb25tb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvcG9wdWxhdGlvbm1vZGVscy9zdGFuZGFyZC93aXphcmRzL3BvcHVsYXRpb25tb2RlbHdpemFyZG1lc3NhZ2VzX2tyLnByb3BlcnRpZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWVlYTA4NAotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9wb3B1bGF0aW9ucy9vcmcuZWNsaXBzZS5zdGVtLnVpLnBvcHVsYXRpb25tb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvcG9wdWxhdGlvbm1vZGVscy9zdGFuZGFyZC93aXphcmRzL3BvcHVsYXRpb25tb2RlbHdpemFyZG1lc3NhZ2VzX2tyLnByb3BlcnRpZXMKQEAgLTAsMCArMSwxNjEgQEAKKyMgZGlzZWFzZXdpemFyZG1lc3NhZ2VzLnByb3BlcnRpZXMKKyMKKyMvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIyAqIENvcHlyaWdodCAoYykgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyMgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisjICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisjICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyMgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorIyAqCisjICogQ29udHJpYnV0b3JzOgorIyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworIyBOZXcgRGlzZWFzZSBXaXphcmQKKworTlBvcHVsYXRpb25Nb2RlbFdpei53aXphcmRfdGl0bGU9XHVjMGM4XHViODVjXHVjNmI0IFx1Yzc3OFx1YWQ2YyBcdWJhYThcdWIzNzgKK05Qb3B1bGF0aW9uTW9kZWxXaXoucGFnZV90aXRsZT1cdWMwYzhcdWI4NWNcdWM2YjQgXHVjNzc4XHVhZDZjIFx1YmFhOFx1YjM3OCBcdWI5Y2NcdWI0ZTRcdWFlMzAKK05Qb3B1bGF0aW9uTW9kZWxXaXoucGFnZV9kZXNjcmlwdGlvbj1cdWQ1MDRcdWI4NWNcdWM4MWRcdWQyYjhcdWM1ZDAgXHVjMGM4XHViODVjXHVjNmI0IFx1Yzc3OFx1YWQ2YyBcdWJhYThcdWIzNzhcdWM3NDQgXHVjODE1XHVjNzU4CisKK05Qb3B1bGF0aW9uSW5pdGlhbGl6ZXJXaXoud2l6YXJkX3RpdGxlPVx1YzBjOFx1Yjg1Y1x1YzZiNCBcdWM3NzhcdWFkNmMgXHVjZDA4XHVhZTMwXHVkNjU0CitOUG9wdWxhdGlvbkluaXRpYWxpemVyV2l6LnBhZ2VfdGl0bGU9XHVjMGM4XHViODVjXHVjNmI0IFx1Yzc3OFx1YWQ2YyBcdWNkMDhcdWFlMzBcdWQ2NTQgXHViOWNjXHViNGU0XHVhZTMwCitOUG9wdWxhdGlvbkluaXRpYWxpemVyV2l6LnBhZ2VfZGVzY3JpcHRpb249XHVkNTA0XHViODVjXHVjODFkXHVkMmI4XHVjNWQwIFx1YzBjOFx1Yjg1Y1x1YzZiNCBcdWM3NzhcdWFkNmMgXHVjZDA4XHVhZTMwXHVkNjU0XHViOTdjIFx1YzgxNVx1Yzc1OAorCitOUG9wdWxhdGlvbldpei5EQ19ERVNDUklQVElPTj1cdWM3NzhcdWFkNmMgXHViYWE4XHViMzc4ICJ7MH0iCitOUG9wdWxhdGlvbkluaXRpYWxpemVyV2l6LkRDX0RFU0NSSVBUSU9OPVx1Yzc3OFx1YWQ2YyBcdWNkMDhcdWFlMzBcdWQ2NTQgInswfSIKKworUE1UUF9EZWYgPSAqUE0vVFAgPSBQb3B1bGF0aW9uIE1lbWJlci9UaW1lIFBlcmlvZAorCitkZWF0aFJhdGU9XHViYzMwXHVhY2JkIFx1YzBhY1x1YjlkZFx1Yjk2MCAoXCB1MDNiYykKK2RlYXRoUmF0ZVRUPVx1Yzc3OFx1YWQ2YyBcdWFkNmNcdWMxMzFcdWM2ZDBcdWI0ZTRcdWM3NzQgXHVjOWM4XHViY2QxIFx1Yzc3NFx1YzY3OFx1Yzc1OCBcdWM2ZDBcdWM3NzhcdWM3M2NcdWI4NWMgXHVjMGFjXHViOWRkXHVkNTU4XHViMjk0IFx1YzE4ZFx1YjNjNC4KK2RlYXRoUmF0ZVVOSVQ9UE0gLyBUUCAqCisKK2JpcnRoUmF0ZT1cdWJjMzBcdWFjYmQgXHVjZDljXHVjMGRkXHViOTYwCitiaXJ0aFJhdGVUVD1cdWM3NzhcdWFkNmMgXHVhZDZjXHVjMTMxXHVjNmQwXHViNGU0XHVjNzc0IFx1ZDBjNFx1YzBkZFx1ZDU1OFx1YjI5NCBcdWMxOGRcdWIzYzQuCitiaXJ0aFJhdGVVTklUPVBNIC8gVFAgKgorCitwb3B1bGF0aW9uSWRlbnRpZmllcj1cdWM3NzhcdWFkNmMKK3BvcHVsYXRpb25JZGVudGlmaWVyVFQ9XHVjOWM4XHViY2QxXHVjNWQwIFx1YzgwNFx1YzVmY1x1YjQxYyBcdWM3NzhcdWFkNmNcdWM3NTggXHVjNzc0XHViOTg0LiAoXHVjNjA4LCBcdWM3NzhcdWFjMDQpCitwb3B1bGF0aW9uSWRlbnRpZmllclVOSVQ9CisKK3RpbWVQZXJpb2Q9XHVhZTMwXHVhYzA0IChUUCkKK3RpbWVQZXJpb2RUVCA9IFRoZSB0aW1lIHBlcmlvZCBmb3IgdGhlIHJhdGVzIChlLmcuLCA4NjQwMDAwMG1zID0gMSBkYXkpLgordGltZVBlcmlvZFVOSVQ9TVMKKworbmFtZT1cdWJhYThcdWIzNzggXHVjNzc0XHViOTg0CituYW1lVFQ9XHVjNzc4XHVhZDZjIFx1YmFhOFx1YjM3OFx1Yzc1OCBcdWM3NzRcdWI5ODQgXHVjOWMwXHVjODE1CituYW1lVU5JVD0KKworZ2Fpbj1cdWI3OWNcdWIzNjQgXHViMTc4XHVjNzc0XHVjOTg4IFx1Yzc3NFx1YjRkZAorZ2FpblRUPVx1Yzc3OFx1YWQ2YyBcdWJhYThcdWIzNzhcdWM1ZDAgXHViMzAwXHVkNTVjIFx1YmIzNFx1Yzc5MVx1YzcwNCBcdWIxNzhcdWM3NzRcdWM5ODggXHVjNzc0XHViNGRkIFx1YzljMFx1YzgxNQorZ2FpblVOSVQ9CisKK21vZHVsYXRpb25BbXBsaXR1ZGU9XHVjODcwXHVjODA4XHVjNzQ0IFx1YzcwNFx1ZDU1YyBcdWNkOWNcdWMwZGRcdWM3MjggLyBcdWMwYWNcdWI5ZGRcdWI5NjAgXHViZDg0XHVjMjE4XHVhYzEyICgwLjAgLT4gMS4wKQorbW9kdWxhdGlvbkFtcGxpdHVkZVRUPVx1YWNjNFx1YzgwOCBcdWJjYzBcdWM4NzAgXHVjOWM0XHVkM2VkIFx1YzljMFx1YzgxNQorbW9kdWxhdGlvbkFtcGxpdHVkZVVOSVQ9CisKK3BoYXNlPVx1YjJlOFx1YWNjNAorcGhhc2VUVD1cdWFjYzRcdWM4MDggXHViMmU4XHVhY2M0XHViOTdjIFx1YzljMFx1YzgxNSgwLT4gMnBpKQorcGhhc2VVTklUPQorCitwZXJpb2Q9XHVhY2M0XHVjODA4IFx1YWUzMFx1YWMwNAorcGVyaW9kVFQ9XHVhY2M0XHVjODA4IFx1YWUzMFx1YWMwNCBcdWM5YzBcdWM4MTUKK3BlcmlvZFVOSVQ9W1x1YzJkY1x1YWMwNF0KKwordXNlTGF0aXR1ZGU9XHVjNzA0XHViM2M0XHViOTdjIFx1YzBhY1x1YzZhOQordXNlTGF0aXR1ZGVUVD1cdWM3MDRcdWIzYzQgXHVhZTMwXHViMmE1XHVjNzQ0IFx1YzBhY1x1YzZhOVx1ZDU2OVx1YjJjOFx1YWU0Yz8KK3VzZUxhdGl0dWRlVU5JVD0KKworaGFzTWF4QWdlPVx1Y2Q1Y1x1YjMwMCBcdWIwOThcdWM3NzQgXHVjMGFjXHVjNmE5CitoYXNNYXhBZ2VUVD1cdWI5YzhcdWM5YzBcdWI5YzkgXHVjNWYwXHViODM5IFx1YWRmOFx1YjhmOVx1Yzc1OCBcdWNkNWNcdWIzMDAgXHVjNWYwXHViODM5IFx1YzBhY1x1YzZhOT8KK2hhc01heEFnZVVOSVQ9CisKK05EaXpXaXpFcnIwPVx1Yzc3OFx1YWQ2YyBcdWMyZGRcdWJjYzRcdWM3OTAgXHVjNWM2XHVjNzRjCitORGl6V2l6RXJyND1cdWJjMzBcdWFjYmQgXHVjMGFjXHViOWRkXHViOTYwIFx1YzVjNlx1Yzc0Yy4KK05EaXpXaXpFcnI1PVx1YmMzMFx1YWNiZCBcdWMwYWNcdWI5ZGRcdWI5NjBcdWM3NzQgXHVjNzk4XHViYWJiXHViNDE4XHVjNWM4XHVjNzRjLgorTkRpeldpekVycjY9XHViYzMwXHVhY2JkIFx1Y2Q5Y1x1YzBiMFx1YzcyOCBcdWM1YzZcdWM3NGMuCitORGl6V2l6RXJyNz1cdWJjMzBcdWFjYmQgXHVjZDljXHVjMGIwXHVjNzI4XHVjNzc0IFx1Yzc5OFx1YmFiYlx1YjQxOFx1YzVjOFx1Yzc0Yy4KK05EaXpXaXpFcnI4PVx1YWUzMFx1YWMwNCBcdWM1YzZcdWM3NGMKK05EaXpXaXpFcnI5PVx1YWUzMFx1YWMwNFx1Yzc3NCBcdWM3OThcdWJhYmJcdWI0MThcdWM1YzhcdWM3NGMKK05EaXpXaXpFcnIxMD1cdWM3NzRcdWI0ZGRcdWM3NzQgXHVjNzk4XHViYWJiXHViNDE4XHVjNWM4XHVjNzRjCitORGl6V2l6RXJyMTE9XHVhZGY4XHViOGY5IFx1YmQ4NFx1YzIxOFx1YjI5NCAxXHViY2Y0XHViMmU0IFx1ZDA3MCBcdWFjMTJcdWM3M2NcdWI4NWMgXHVkNTY5XHVkNTc0XHVjOWM4IFx1YzIxOCBcdWM3ODhcdWM3NGMuCitORGl6V2l6RXJyMTI9XHVhZGY4XHViOGY5IElEIFx1YzVjNlx1Yzc0YworTkRpeldpekVycjEzPVx1Yzc5OFx1YmFiYlx1YjQxYyBcdWJkODRcdWMyMTgKKyAKK05EaXpXaXpFcnIxNT1cdWM3NzhcdWFkNmMgXHVjMmRkXHViY2M0XHVjNzkwIFx1YzVjNlx1Yzc0YworTkRpeldpekVycjE2PVx1YWMxY1x1Yzc3OCBcdWNlNzRcdWM2YjRcdWQyYjggXHVjNWM2XHVjNzRjCitORGl6V2l6RXJyMTc9XHVjNzk4XHViYWJiXHViNDFjIFx1YWMxY1x1Yzc3OCBcdWNlNzRcdWM2YjRcdWQyYjguIDBcdWJjZjRcdWIyZTQgXHVjZWU0XHVjNTdjXHVkNTY4CisKK05EaXpXaXpFcnIxOD1cdWJjYzBcdWM4NzAgXHVjOWM0XHVkM2VkIFx1YzYyNFx1Yjk1OAorTkRpeldpekVycjE5PVx1YjJlOFx1YWNjNFx1YWMwMCBcdWM3OThcdWJhYmJcdWI0MThcdWM1YzhcdWM3NGMKK05EaXpXaXpFcnIyMD1cdWQ2NTVcdWM3YTVcdWMxMzEgXHVjODcwXHVjODE1IFx1YzY5NFx1YzE4Y1x1YWMwMCBcdWM3OThcdWJhYmJcdWI0MThcdWM1YzhcdWM3NGMKK05EaXpXaXpFcnIyMT1cdWFlMzBcdWFjMDRcdWM3NzQgXHVjNzk4XHViYWJiXHViNDE4XHVjNWM4XHVjNzRjCisKK05EaXpXaXpFcnIyMj1cdWM3OThcdWJhYmJcdWI0MWMgXHViMDk4XHVjNzc0IFx1YWMxMgorTkRpeldpekVycjIzPVx1Yzc5OFx1YmFiYlx1YjQxYyBcdWMwYWNcdWI5ZGQgXHVkMzI5XHVkMTMwCisgCitETVBDMT1cdWM3NzhcdWFkNmMgXHViYWE4XHViMzc4IFx1YzE4ZFx1YzEzMSBcdWM4MWNcdWM1YjQKK0RNUEMyPSJcdWI5N2MgXHVjNzA0XHVkNTVjIFx1Yzc3OFx1YWQ2YyBcdWMxOGRcdWMxMzEgXHVjNWQwXHViNTE0XHVkMTMwIFx1YzVjNlx1Yzc0YworRE1QQzM9XHVjNzc4XHVhZDZjIFx1Y2QwOFx1YWUzMFx1ZDY1NCBcdWMxOGRcdWMxMzEgXHVjODFjXHVjNWI0CitETVBDND0iXHViOTdjIFx1YzcwNFx1ZDU1YyBcdWM3NzhcdWFkNmMgXHVjZDA4XHVhZTMwXHVkNjU0IFx1YzE4ZFx1YzEzMSBcdWM1ZDBcdWI1MTRcdWQxMzAgXHVjNWM2XHVjNzRjCisKK0REQy4wPVx1Yzc3OFx1YWQ2YyBcdWJhYThcdWIzNzggOgorRERDLjE9XHVhZTMwXHViYzE4XHVkNTU4XHViMjk0IFx1YzIxOFx1ZDU1OVx1YzgwMSBcdWM3NzhcdWFkNmMgXHViYWE4XHViMzc4CitEREMuMj1cdWQwNzRcdWI3OThcdWMyYTQKK0REQy4zPVx1Yzc3OFx1YWQ2YyBcdWJhYThcdWIzNzggXHVjMGFjXHViODQwIFx1YzBkZFx1YzEzMSBcdWM5MTEgXHViYjM4XHVjODFjIFx1YmMxY1x1YzBkZAorRERDLjQ9XHVjNzc4XHVhZDZjIFx1Y2QwOFx1YWUzMFx1ZDY1NCBcdWMwYWNcdWI4NDAgXHVjMGRkXHVjMTMxIFx1YzkxMSBcdWJiMzhcdWM4MWMgXHViYzFjXHVjMGRkCitEREMuNT1cdWM3NzhcdWFkNmMgXHVjZDA4XHVhZTMwXHVkNjU0IDoKKworIyBQcmVmZXJlbmNlcworUG9wdWxhdGlvblBQYWdlVElUTEU9XHVjNzc4XHVhZDZjIFx1YmFhOFx1YjM3OFx1YjljMQorUmVmZXJlbmNlUG9wdWxhdGlvbj1cdWNjMzhcdWM4NzAgXHVjNzc4XHVhZDZjIChcdWFjMWNcdWM3NzgpCitSZWZlcmVuY2VEZW5zaXR5PVx1Y2MzOFx1Yzg3MCBcdWM3NzhcdWFkNmMgXHViYzAwXHViM2M0IChcdWFjMWNcdWM3NzggLyBcdWQzYzlcdWJjMjkgXHVkMGFjXHViODVjXHViYmY4XHVkMTMwKQorCisjUG9wdWxhdGlvbiBncm91cHMKK2FkZEdyb3VwPSsKK2FkZEdyb3VwVFQ9XHVjMGM4XHViODVjXHVjNmI0IFx1Yzc3OFx1YWQ2YyBcdWFkZjhcdWI4ZjlcdWM3NDQgXHVjZDk0XHVhYzAwCisKK3JlbW92ZUdyb3VwPS0KK3JlbW92ZUdyb3VwVFQ9XHVjNzc4XHVhZDZjIFx1YWRmOFx1YjhmOVx1Yzc0NCBcdWM4MWNcdWFjNzBcdWQ1NjgKKworcG9wdWxhdGlvbklkPVx1YzJkZFx1YmNjNFx1Yzc5MAorcG9wdWxhdGlvbklkRnJhY3Rpb249XHViZDg0XHVjMjE4CisKK3NldEZyYWN0aW9ucz1TZXQgRnJhY3Rpb25zIHRvIEVxdWlsaWJyaXVtCitzZXRGcmFjdGlvbnNUVD0KKworc2V0RGVhdGhSYXRlcz1TZXQgRGVhdGggUmF0ZXMgdG8gRXF1aWxpYnJpdW0KK3NldERlYXRoUmF0ZXNUVD0KKworI0FnZSBHcm91cHMKK2Zyb21BZ2U9XHViMDk4XHVjNzc0IFx1YmQ4MFx1ZDEzMAordG9BZ2U9XHViMDk4XHVjNzc0CitkZWF0aEZhY3Rvcj1cdWMwYWNcdWI5ZGRcdWI5NjAgXHVjNjk0XHVjNzc4CisKK05Qb3BXaXpJU09LPVx1YzcwNFx1Y2U1OCBJU08gXHVkMGE0CitOUG9wV2l6UGlja0xvYz1cdWM3MDRcdWNlNTggXHVjMTIwXHVkMGRkCitOUG9wV2l6UGlja0xvY1RpdGxlPVx1YzcwNFx1Y2U1OCBcdWMxMjBcdWQwZGQKKworaW5kaXZpZHVhbHM9XHVhYzFjXHVjNzc4CitpbmRpdmlkdWFsc1RUPVx1YWMxY1x1Yzc3OCBcdWJjODhcdWQ2MzgKK2luZGl2aWR1YWxzVU5JVD1cdWQ2OWZcdWMyMTggXHViNjEwXHViMjk0IFx1ZDY5Zlx1YzIxOC9rbV4yCisKK3VzZURlbnNpdHk9XHViYzAwXHViM2M0XHViOTdjIFx1YzBhY1x1YzZhOQordXNlRGVuc2l0eVRUPVx1YzgxY1x1YWNmMWttIFx1YjJmOSBcdWFjMWNcdWM3NzggXHVjMGFjXHVjNmE5Cit1c2VEZW5zaXR5VU5JVD0KKworWUVTPVllcworTk89Tm8KKworCitzY2FsaW5nRmFjdG9yPVx1ZDY1NVx1YzdhNVx1YzEzMSBcdWM2OTRcdWMxOGMKK3NjYWxpbmdGYWN0b3JUVD1cdWMyYTRcdWNmMDBcdWM3N2NcdWI5YzEgXHVhY2M0XHVjMjE4IFx1YzljMFx1YzgxNQorc2NhbGluZ0ZhY3RvclVOSVQ9CisKK21vcnRhbGl0eVJhdGU9XHVjMGFjXHViOWRkXHViOTYwCittb3J0YWxpdHlSYXRlVU5JVD1cdWJjYTFcdWQxMzAgLyBUUAorbW9ydGFsaXR5UmF0ZVRUPVx1YzBhY1x1YjlkZFx1Yjk2MC4gMSAvIChcdWMwYWNcdWI5ZGRcdWI5NjApXHVjNzQwIFx1YzIxOFx1YmE4NSBcdWJjYTFcdWQxMzBcdWM3ODQuCisKK2hvc3Q9XHVjMjE5XHVjOGZjCitob3N0VU5JVD0KK2hvc3RUVD1cdWJjYTFcdWQxMzBcdWFjMDAgXHVkNjA4XHVjNTYxXHVjNzQ0IFx1ZDY1NVx1YmNmNFx1ZDU1OFx1YjI5NCBcdWIzZDlcdWJiM2MgXHVhYzFjXHVjY2I0IChcdWM3N2NcdWJjMThcdWM4MDFcdWM3M2NcdWI4NWMgXHVjMGFjXHViNzhjKQpkaWZmIC0tZ2l0IGEvbW9kZWxzL3BvcHVsYXRpb25zL29yZy5lY2xpcHNlLnN0ZW0udWkucG9wdWxhdGlvbm1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9wb3B1bGF0aW9ubW9kZWxzL3N0YW5kYXJkL3dpemFyZHMvcG9wdWxhdGlvbm1vZGVsd2l6YXJkbWVzc2FnZXNfemgucHJvcGVydGllcyBiL21vZGVscy9wb3B1bGF0aW9ucy9vcmcuZWNsaXBzZS5zdGVtLnVpLnBvcHVsYXRpb25tb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvcG9wdWxhdGlvbm1vZGVscy9zdGFuZGFyZC93aXphcmRzL3BvcHVsYXRpb25tb2RlbHdpemFyZG1lc3NhZ2VzX3poLnByb3BlcnRpZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODUwODFmNgotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9wb3B1bGF0aW9ucy9vcmcuZWNsaXBzZS5zdGVtLnVpLnBvcHVsYXRpb25tb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvcG9wdWxhdGlvbm1vZGVscy9zdGFuZGFyZC93aXphcmRzL3BvcHVsYXRpb25tb2RlbHdpemFyZG1lc3NhZ2VzX3poLnByb3BlcnRpZXMKQEAgLTAsMCArMSwxNjEgQEAKKyMgZGlzZWFzZXdpemFyZG1lc3NhZ2VzLnByb3BlcnRpZXMKKyMKKyMvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIyAqIENvcHlyaWdodCAoYykgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyMgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisjICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisjICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyMgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorIyAqCisjICogQ29udHJpYnV0b3JzOgorIyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworIyBOZXcgRGlzZWFzZSBXaXphcmQKKworTlBvcHVsYXRpb25Nb2RlbFdpei53aXphcmRfdGl0bGU9XHU2NWIwXHU1ZWZhXHU3OWNkXHU3ZmE0XHU2YTIxXHU1NzhiCitOUG9wdWxhdGlvbk1vZGVsV2l6LnBhZ2VfdGl0bGU9XHU1MjFiXHU1ZWZhXHU0ZTAwXHU0ZTJhXHU2NWIwXHU3Njg0XHU3OWNkXHU3ZmE0XHU2YTIxXHU1NzhiCitOUG9wdWxhdGlvbk1vZGVsV2l6LnBhZ2VfZGVzY3JpcHRpb249XHU1NzI4XHU0ZTAwXHU0ZTJhXHU5ODc5XHU3NmVlXHU0ZTJkXHU1YjlhXHU0ZTQ5XHU0ZTAwXHU0ZTJhXHU2NWIwXHU3Njg0XHU3OWNkXHU3ZmE0XHU2YTIxXHU1NzhiCisKK05Qb3B1bGF0aW9uSW5pdGlhbGl6ZXJXaXoud2l6YXJkX3RpdGxlPVx1NjViMFx1NWVmYVx1NzljZFx1N2ZhNFx1NTIxZFx1NTljYlx1NTMxNgorTlBvcHVsYXRpb25Jbml0aWFsaXplcldpei5wYWdlX3RpdGxlPVx1NTIxYlx1NWVmYVx1NGUwMFx1NGUyYVx1NjViMFx1NzY4NFx1NzljZFx1N2ZhNFx1NTIxZFx1NTljYlx1NTMxNgorTlBvcHVsYXRpb25Jbml0aWFsaXplcldpei5wYWdlX2Rlc2NyaXB0aW9uPVx1NTcyOFx1NGUwMFx1NGUyYVx1OTg3OVx1NzZlZVx1NGUyZFx1NWI5YVx1NGU0OVx1NGUwMFx1NGUyYVx1NjViMFx1NzY4NFx1NzljZFx1N2ZhNFx1NTIxZFx1NTljYlx1NTMxNgorCitOUG9wdWxhdGlvbldpei5EQ19ERVNDUklQVElPTj1cdTc5Y2RcdTdmYTRcdTZhMjFcdTU3OGJcdTIwMWN7MH1cdTIwMWQKK05Qb3B1bGF0aW9uSW5pdGlhbGl6ZXJXaXouRENfREVTQ1JJUFRJT049XHUyMDFjezB9XHUyMDFjXHU3OWNkXHU3ZmE0XHU1MjFkXHU1OWNiXHU1MzE2CisKK1BNVFBfRGVmID0gKlBNL1RQID0gUG9wdWxhdGlvbiBNZW1iZXIvVGltZSBQZXJpb2QKKworZGVhdGhSYXRlPVx1ODBjY1x1NjY2Zlx1NmI3Ylx1NGVhMVx1NzM4N1x1ZmYwOFx1MDNiY1x1ZmYwOQorZGVhdGhSYXRlVFQ9XHU3OWNkXHU3ZmE0XHU2MjEwXHU1NDU4XHU1NmUwXHU0ZTNhXHU5NjY0XHU3NWJlXHU3NWM1XHU0ZWU1XHU1OTE2XHU3Njg0XHU1NmUwXHU3ZDIwXHU2YjdiXHU0ZWExXHU3Njg0XHU5MDFmXHU3Mzg3CitkZWF0aFJhdGVVTklUPVBNL1RQKgorCitiaXJ0aFJhdGU9XHU4MGNjXHU2NjZmXHU1MWZhXHU3NTFmXHU3Mzg3CitiaXJ0aFJhdGVUVD1cdTUxZmFcdTc1MWZcdTczODcKK2JpcnRoUmF0ZVVOSVQ9UE0vVFAqCisKK3BvcHVsYXRpb25JZGVudGlmaWVyPVx1NzljZFx1N2ZhNAorcG9wdWxhdGlvbklkZW50aWZpZXJUVD1cdTc1MzFcdTY3MmNcdTc1YzVcdTc2ODRcdTYxMWZcdTY3ZDNcdTc2ODRcdTc5Y2RcdTdmYTRcdTc2ODRcdTU0MGRcdTc5ZjBcdTMwMDIgXHVmZjA4XHU0ZjhiXHU1OTgyXHVmZjBjXHU0ZWJhXHVmZjA5Citwb3B1bGF0aW9uSWRlbnRpZmllclVOSVQ9CisKK3RpbWVQZXJpb2Q9XHU2NWY2XHU5NWY0XHU2YmI1XHVmZjA4VFBcdWZmMDkKK3RpbWVQZXJpb2RUVCA9IFRoZSB0aW1lIHBlcmlvZCBmb3IgdGhlIHJhdGVzIChlLmcuLCA4NjQwMDAwMG1zID0gMSBkYXkpLgordGltZVBlcmlvZFVOSVQ9XHU2YmViXHU3OWQyCisKK25hbWU9XHU2YTIxXHU1NzhiXHU1NDBkXHU3OWYwCituYW1lVFQ9XHU2MzA3XHU1YjlhXHU0ZTAwXHU0ZTJhXHU3OWNkXHU3ZmE0XHU2YTIxXHU1NzhiXHU3Njg0XHU1NDBkXHU3OWYwCituYW1lVU5JVD0KKworZ2Fpbj1cdTk2OGZcdTY3M2FcdTU2NmFcdTU4ZjBcdTU4OWVcdTc2Y2EKK2dhaW5UVD1cdTRlM2FcdTc5Y2RcdTdmYTRcdTZhMjFcdTU3OGJcdTYzMDdcdTViOWFcdTk2OGZcdTY3M2FcdTU2NmFcdTU4ZjBcdTU4OWVcdTc2Y2EKK2dhaW5VTklUPQorCittb2R1bGF0aW9uQW1wbGl0dWRlPVx1NTdmYVx1NjcyY1x1NTFmYVx1NzUxZi9cdTZiN2JcdTRlYTFcdTczODdcdTZiZDRcdTRmOGJcdTc2ODRcdThjMDNcdTUyMzZcdWZmMDgwLjAgLT4gMS4wXHVmZjA5Cittb2R1bGF0aW9uQW1wbGl0dWRlVFQ9XHU2MzA3XHU1YjlhXHU1YjYzXHU4MjgyXHU2MDI3XHU4YzAzXHU1MjM2XHU1ZTQ1XHU1ZWE2Cittb2R1bGF0aW9uQW1wbGl0dWRlVU5JVD0KKworcGhhc2U9XHU3NmY4CitwaGFzZVRUPVx1NjMwN1x1NWI5YVx1NWI2M1x1ODI4Mlx1NjAyN1x1OTYzNlx1NmJiNVx1ZmYwODAgLSA+IDJQSVx1ZmYwOQorcGhhc2VVTklUPQorCitwZXJpb2Q9XHU1YjYzXHU4MjgyXHU2MDI3XHU2NWY2XHU2YmI1CitwZXJpb2RUVD1cdTYzMDdcdTViOWFcdTViNjNcdTgyODJcdTYwMjdcdTY3MWYKK3BlcmlvZFVOSVQ9W1x1NjVmNlx1OTVmNF0KKwordXNlTGF0aXR1ZGU9XHU0ZjdmXHU3NTI4XHU3ZWFjXHU1ZWE2Cit1c2VMYXRpdHVkZVRUPVx1NGY3Zlx1NzUyOFx1N2VhY1x1NWVhNlx1NTI5Zlx1ODBmZFx1ZmYxZgordXNlTGF0aXR1ZGVVTklUPQorCitoYXNNYXhBZ2U9XHU3NTI4XHU2NzAwXHU1OTI3XHU3Njg0XHU1ZTc0XHU5Zjg0CitoYXNNYXhBZ2VUVD1cdTc1MjhcdTY3MDBcdTU0MGVcdTRlMDBcdTRlMmFcdTVlNzRcdTlmODRcdTdlYzRcdTkxY2NcdTc2ODRcdTY3MDBcdTU5MjdcdTVlNzRcdTlmODQKK2hhc01heEFnZVVOSVQ9CisKK05EaXpXaXpFcnIwPVx1N2YzYVx1NWMxMVx1NzljZFx1N2ZhNFx1NjgwN1x1OGJjNlx1N2IyNgorTkRpeldpekVycjQ9XHU3ZjNhXHU1YzExXHU4MGNjXHU2NjZmXHU2YjdiXHU0ZWExXHU3Mzg3XHUzMDAyCitORGl6V2l6RXJyNT1cdTgwY2NcdTY2NmZcdTZiN2JcdTRlYTFcdTczODdcdTY2MmZcdTY1ZTBcdTY1NDhcdTc2ODRcdTMwMDIKK05EaXpXaXpFcnI2PVx1N2YzYVx1NWMxMVx1ODBjY1x1NjY2Zlx1NTFmYVx1NzUxZlx1NzM4N1x1MzAwMgorTkRpeldpekVycjc9XHU4MGNjXHU2NjZmXHU1MWZhXHU3NTFmXHU3Mzg3XHU2NjJmXHU2NWUwXHU2NTQ4XHU3Njg0XHUzMDAyCitORGl6V2l6RXJyOD1cdTdmM2FcdTVjMTFcdTY1ZjZcdTk1ZjRcdTZiYjUKK05EaXpXaXpFcnI5PVx1NjVmNlx1OTVmNFx1NmJiNVx1NjYyZlx1NjVlMFx1NjU0OFx1NzY4NAorTkRpeldpekVycjEwPVx1NTg5ZVx1NzZjYVx1NjYyZlx1NjVlMFx1NjU0OFx1NzY4NAorTkRpeldpekVycjExPVx1OGJlNVx1N2VjNFx1NTIwNlx1NjU3MFx1NTJhMFx1OGQ3N1x1Njc2NVx1NTAzY1x1NTkyN1x1NGU4ZTFcdTMwMDIKK05EaXpXaXpFcnIxMj1cdTdmM2FcdTVjMTFcdTdlYzRcdTY4MDdcdTUzZjcKK05EaXpXaXpFcnIxMz1cdTY1ZTBcdTY1NDhcdTc2ODRcdTUyMDZcdTY1NzAKKyAKK05EaXpXaXpFcnIxNT1cdTU5MzFcdThlMmFcdTc5Y2RcdTdmYTRcdTY4MDdcdThiYzZcdTdiMjYKK05EaXpXaXpFcnIxNj1cdTU5MzFcdThlMmFcdTRlYmFcdTU0NThcdTY1NzAKK05EaXpXaXpFcnIxNz1cdTY1ZTBcdTY1NDhcdTc2ODRcdTRlMmFcdTRmNTNcdTY1NzBcdTkxY2ZcdTMwMDJcdTVmYzVcdTk4N2JcdTU5MjdcdTRlOGUwCisKK05EaXpXaXpFcnIxOD1cdThjMDNcdTUyMzZcdTVlNDVcdTVlYTZcdTY2MmZcdTY1ZTBcdTY1NDhcdTc2ODQKK05EaXpXaXpFcnIxOT1cdTc2ZjhcdTY1ZTBcdTY1NDgKK05EaXpXaXpFcnIyMD1cdTdmMjlcdTY1M2VcdTU2ZTBcdTViNTBcdTY2MmZcdTY1ZTBcdTY1NDhcdTc2ODQKK05EaXpXaXpFcnIyMT1cdTY1ZjZcdTk1ZjRcdTZiYjVcdTY2MmZcdTY1ZTBcdTY1NDhcdTc2ODQKKworTkRpeldpekVycjIyPVx1NWJmOVx1NGU4ZVx1NWU3NFx1OWY4NFx1NTAzY1x1NjVlMFx1NjU0OAorTkRpeldpekVycjIzPVx1NjVlMFx1NjU0OFx1NmI3Ylx1NGVhMVx1NTZlMFx1NWI1MAorIAorRE1QQzE9XHU3OWNkXHU3ZmE0XHU2YTIxXHU1NzhiXHU3Njg0XHU1YzVlXHU2MDI3XHU2M2E3XHU1MjM2CitETVBDMj1cdTdmM2FcdTVjMTFcdTc5Y2RcdTdmYTRcdTVjNWVcdTYwMjdcdTdmMTZcdThmOTFcdTU2NjgKK0RNUEMzPVx1NzljZFx1N2ZhNFx1NTIxZFx1NTljYlx1NTMxNlx1NWM1ZVx1NjAyN1x1NjNhN1x1NTIzNgorRE1QQzQ9XHU3ZjNhXHU1YzExXHU3OWNkXHU3ZmE0XHU1MjFkXHU1OWNiXHU1MzE2XHU1YzVlXHU2MDI3XHU3ZjE2XHU4ZjkxXHU1NjY4CisKK0REQy4wPVx1NzljZFx1N2ZhNFx1NmEyMVx1NTc4YgorRERDLjE9XHU1N2ZhXHU2NzJjXHU3Njg0XHU2NTcwXHU1YjY2XHU3OWNkXHU3ZmE0XHU2YTIxXHU1NzhiCitEREMuMj1cdTdjN2IKK0REQy4zPVx1NTIxYlx1NWVmYVx1NzljZFx1N2ZhNFx1NmEyMVx1NTc4Ylx1NzY4NFx1NWI5ZVx1NGY4Ylx1NzY4NFx1OTVlZVx1OTg5OAorRERDLjQ9XHU1MjFiXHU1ZWZhXHU3OWNkXHU3ZmE0XHU1MjFkXHU1OWNiXHU1MzE2XHU1YjllXHU0ZjhiXHU3Njg0XHU5NWVlXHU5ODk4CitEREMuNT1cdTc5Y2RcdTdmYTRcdTUyMWRcdTU5Y2JcdTUzMTYKKworIyBQcmVmZXJlbmNlcworUG9wdWxhdGlvblBQYWdlVElUTEU9XHU3OWNkXHU3ZmE0XHU2YTIxXHU1NzhiCitSZWZlcmVuY2VQb3B1bGF0aW9uPVx1NTNjMlx1ODAwM1x1NzljZFx1N2ZhNFx1ZmYwOFx1NGUyYVx1NGViYVx1ZmYwOQorUmVmZXJlbmNlRGVuc2l0eT1cdTUzYzJcdTgwMDNcdTc5Y2RcdTdmYTRcdTViYzZcdTVlYTZcdWZmMDhcdTRlMmFcdTRlYmEvXHU1ZTczXHU2NWI5XHU1MTZjXHU5MWNjXHVmZjA5CisKKyNQb3B1bGF0aW9uIGdyb3VwcworYWRkR3JvdXA9KworYWRkR3JvdXBUVD1cdTZkZmJcdTUyYTBcdTRlMDBcdTRlMmFcdTY1YjBcdTc2ODRcdTc5Y2RcdTdmYTRcdTdmYTRcdTRmNTMKKworcmVtb3ZlR3JvdXA9LSAKK3JlbW92ZUdyb3VwVFQ9XHU1MjIwXHU5NjY0XHU3ZmE0XHU0ZjUzCisKK3BvcHVsYXRpb25JZD1cdTY4MDdcdThiYzZcdTdiMjYKK3BvcHVsYXRpb25JZEZyYWN0aW9uPVx1NTIwNlx1NjU3MAorCitzZXRGcmFjdGlvbnM9U2V0IEZyYWN0aW9ucyB0byBFcXVpbGlicml1bQorc2V0RnJhY3Rpb25zVFQ9CisKK3NldERlYXRoUmF0ZXM9U2V0IERlYXRoIFJhdGVzIHRvIEVxdWlsaWJyaXVtCitzZXREZWF0aFJhdGVzVFQ9CisKKyNBZ2UgR3JvdXBzCitmcm9tQWdlPVx1NGVjZVx1NWU3NFx1OWY4NAordG9BZ2U9XHU1ZTc0XHU5Zjg0CitkZWF0aEZhY3Rvcj1cdTZiN2JcdTRlYTFcdTU2ZTBcdTViNTAKKworTlBvcFdpeklTT0s9XHU1NzMwXHU3MGI5XHU3Njg0SVNPXHU2ODA3XHU1M2Y3CitOUG9wV2l6UGlja0xvYz1cdTkwMDlcdTYyZTlcdTU3MzBcdTcwYjkKK05Qb3BXaXpQaWNrTG9jVGl0bGU9XHU5MDA5XHU2MmU5XHU1NzMwXHU3MGI5CisKK2luZGl2aWR1YWxzPVx1NGUyYVx1NGViYQoraW5kaXZpZHVhbHNUVD1cdTRlYmFcdTY1NzAKK2luZGl2aWR1YWxzVU5JVD1cdThiYTFcdTY1NzBcdTYyMTZcdThiYTFcdTY1NzAvXHU1ZTczXHU2NWI5XHU1MTZjXHU5MWNjCisKK3VzZURlbnNpdHk9XHU0ZjdmXHU3NTI4XHU1YmM2XHU1ZWE2Cit1c2VEZW5zaXR5VFQ9XHU0ZjdmXHU3NTI4XHU2YmNmXHU1ZTczXHU2NWI5XHU1MTZjXHU5MWNjXHU3Njg0XHU0ZWJhXHU2NTcwCit1c2VEZW5zaXR5VU5JVD0KKworWUVTPVx1NjYyZlx1NzY4NAorTk89XHU2NWUwCisKKworc2NhbGluZ0ZhY3Rvcj1cdTdmMjlcdTY1M2VcdTU2ZTBcdTViNTAKK3NjYWxpbmdGYWN0b3JUVD1cdTYzMDdcdTViOWFcdTZiZDRcdTRmOGJcdTU2ZTBcdTViNTAKK3NjYWxpbmdGYWN0b3JVTklUPQorCittb3J0YWxpdHlSYXRlPVx1NmI3Ylx1NGVhMVx1NzM4NworbW9ydGFsaXR5UmF0ZVVOSVQ9XHU0ZjIwXHU2NGFkXHU1YTkyXHU0ZWNiL1x1NjVmNlx1OTVmNFx1NmJiNQorbW9ydGFsaXR5UmF0ZVRUPVx1NmI3Ylx1NGVhMVx1NzM4N1x1MzAwMiAxIC9cdWZmMDhcdTZiN2JcdTRlYTFcdTczODdcdWZmMDlcdTRlM2FcdThmN2RcdTRmNTNcdTc2ODRcdTViZmZcdTU0N2RcdTMwMDIKKworaG9zdD1cdTViYzRcdTRlM2IKK2hvc3RVTklUPQoraG9zdFRUPVx1NGYyMFx1NjdkM1x1NWE5Mlx1NGVjYlx1NGVjZVx1NTJhOFx1NzI2OVx1NTFmYVx1NTQzOFx1ODg0MFx1ZmYwOFx1OTAxYVx1NWUzOFx1NGVjZVx1NGViYVx1N2M3Ylx1NTkwNFx1ZmYwOQpkaWZmIC0tZ2l0IGEvbW9kZWxzL3BvcHVsYXRpb25zL29yZy5lY2xpcHNlLnN0ZW0udWkucG9wdWxhdGlvbm1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS92aWV3cy9wb3B1bGF0aW9ubW9kZWwvUG9wdWxhdGlvbk1vZGVsVmlldy5qYXZhIGIvbW9kZWxzL3BvcHVsYXRpb25zL29yZy5lY2xpcHNlLnN0ZW0udWkucG9wdWxhdGlvbm1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS92aWV3cy9wb3B1bGF0aW9ubW9kZWwvUG9wdWxhdGlvbk1vZGVsVmlldy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAyOTdlNmIKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvcG9wdWxhdGlvbnMvb3JnLmVjbGlwc2Uuc3RlbS51aS5wb3B1bGF0aW9ubW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3ZpZXdzL3BvcHVsYXRpb25tb2RlbC9Qb3B1bGF0aW9uTW9kZWxWaWV3LmphdmEKQEAgLTAsMCArMSwxMzAgQEAKKy8vIFBvcHVsYXRpb25Nb2RlbFZpZXcuamF2YQorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnVpLnZpZXdzLnBvcHVsYXRpb25tb2RlbDsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5yZXNvdXJjZS5JbWFnZURlc2NyaXB0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLkNvbnN0YW50czsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnVpLnZpZXdzLklkZW50aWZpYWJsZURlbGVnYXRlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udWkudmlld3MuSWRlbnRpZmlhYmxlUGx1Z2luVmlldzsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZ3JhcGhpY3MuSW1hZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkucGx1Z2luLkFic3RyYWN0VUlQbHVnaW47CisKKy8qKgorICogVGhpcyBjbGFzcyBpbXBsZW1lbnRzIGEgdmlldyBvZiB0aGUgcGx1Z2dlZCBpbiBwb3B1bGFpdG9uIG1vZGVsLgorICovCitwdWJsaWMgY2xhc3MgUG9wdWxhdGlvbk1vZGVsVmlldyBleHRlbmRzIElkZW50aWZpYWJsZVBsdWdpblZpZXcgeworCisJLyoqCisJICogVGhlIGlkZW50aWZpZXIgb2YgdGhlIFNlcXVlbmNlcnMgVmlldworCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIElEX1BPUFVMQVRJT05fTU9ERUxfVklFVyA9ICJvcmcuZWNsaXBzZS5zdGVtLnVpLnZpZXdzLnBvcHVsYXRpb25tb2RlbHMiOyAvLyROT04tTkxTLTEkCisKKwkvKioKKwkgKiBEZWZhdWx0IENvbnN0cnVjdG9yCisJICovCisJcHVibGljIFBvcHVsYXRpb25Nb2RlbFZpZXcoKSB7CisJCXN1cGVyKCk7CisJfSAvLyBQb3B1bGF0aW9uVmlldworCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnVpLnZpZXdzLkV4ZWN1dGFibGVQbHVnaW5WaWV3I2dldElucHV0KCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgSWRlbnRpZmlhYmxlVmlld01vZGVsIGdldElucHV0KCkgeworCQlyZXR1cm4gUG9wdWxhdGlvblZpZXdNb2RlbC5nZXRNb2RlbCgpOworCX0gLy8gZ2V0SW5wdXQKKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS51aS52aWV3cy5JZGVudGlmaWFibGVQbHVnaW5WaWV3I2dldElkZW50aWZpYWJsZVBsdWdpblZpZXdMYWJlbENvbnRlbnRQcm92aWRlcigpCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIElkZW50aWZpYWJsZVBsdWdpblZpZXdMYWJlbENvbnRlbnRQcm92aWRlciBnZXRJZGVudGlmaWFibGVQbHVnaW5WaWV3TGFiZWxDb250ZW50UHJvdmlkZXIoKSB7CisJCXJldHVybiBuZXcgUG9wdWxhdGlvblZpZXdUcmVlQ29udGVudFByb3ZpZGVyKCk7CisJfSAvLyBnZXRJZGVudGlmaWFibGVQbHVnaW5WaWV3TGFiZWxDb250ZW50UHJvdmlkZXIKKworCS8qKgorCSAqIFRoaXMgY2xhc3MgaXMgdGhlIG1vZGVsIG9mIHRoZSBwbHVnZ2VkIGluIDxjb2RlPlBvcHVsYXRpb25Nb2RlbDwvY29kZT4KKwkgKi8KKwlwdWJsaWMgc3RhdGljIGNsYXNzIFBvcHVsYXRpb25WaWV3TW9kZWwgZXh0ZW5kcyBJZGVudGlmaWFibGVWaWV3TW9kZWwgeworCisJCXByaXZhdGUgc3RhdGljIFBvcHVsYXRpb25WaWV3TW9kZWwgbW9kZWwgPSBudWxsOworCisJCS8qKgorCQkgKiBAcGFyYW0gZXh0ZW5zaW9uUG9pbnRJRAorCQkgKi8KKwkJcHJpdmF0ZSBQb3B1bGF0aW9uVmlld01vZGVsKFN0cmluZyBleHRlbnNpb25Qb2ludElEKSB7CisJCQlzdXBlcihleHRlbnNpb25Qb2ludElEKTsKKwkJfSAvLyBQb3B1bGF0aW9uTW9kZWxWaWV3TW9kZWwKKworCQkvKioKKwkJICogQHJldHVybiB0aGUgc2luZ2xldG9uIGluc3RhbmNlIG9mIHRoZSBtb2RlbAorCQkgKi8KKwkJcHVibGljIHN0YXRpYyBQb3B1bGF0aW9uVmlld01vZGVsIGdldE1vZGVsKCkgeworCQkJLy8gRG8gd2UgbmVlZCB0byBtYWtlIHRoZSBtb2RlbD8KKwkJCWlmIChtb2RlbCA9PSBudWxsKSB7CisJCQkJLy8gWWVzCisJCQkJbW9kZWwgPSBuZXcgUG9wdWxhdGlvblZpZXdNb2RlbCgKKwkJCQkJCUNvbnN0YW50cy5JRF9QT1BVTEFUSU9OX01PREVMX0VYVEVOU0lPTl9QT0lOVCk7CisJCQl9CisJCQlyZXR1cm4gbW9kZWw7CisJCX0gLy8gZ2V0TW9kZWwKKworCX0gLy8gUG9wdWxhaXRvblZpZXdNb2RlbAorCisJLyoqCisJICogVGhpcyBjbGFzcyBpcyB0aGUgY29udGVudCBwcm92aWRlciBvZiB0aGUgcG9wdWxhdGlvbiB2aWV3LgorCSAqLworCXByaXZhdGUgc3RhdGljIGNsYXNzIFBvcHVsYXRpb25WaWV3VHJlZUNvbnRlbnRQcm92aWRlciBleHRlbmRzCisJCQlJZGVudGlmaWFibGVQbHVnaW5WaWV3TGFiZWxDb250ZW50UHJvdmlkZXIgeworCisJCS8vIFRoaXMgaXMgdGhlIGltYWdlIHVzZWQgdG8gcmVwcmVzZW50IHBvcHVsYXRpb24gbW9kZWxzIGluIHRoZSBwb3B1bGF0aW9uIHZpZXcKKwkJc3RhdGljIEltYWdlRGVzY3JpcHRvciBwb3B1bGF0aW9uSWNvbiA9IG51bGw7CisKKwkJLy8gSWYgdHJ1ZSB0aGVuIHdlJ3ZlIG5ldmVyIHRyaWVkIHRvIGdldCB0aGUgaWNvbgorCQlzdGF0aWMgYm9vbGVhbiBwb3B1bGF0aW9uSWNvbkZpcnN0VGltZSA9IHRydWU7CisKKwkJLyoqCisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS51aS52aWV3cy5JZGVudGlmaWFibGVQbHVnaW5WaWV3LklkZW50aWZpYWJsZVBsdWdpblZpZXdMYWJlbENvbnRlbnRQcm92aWRlciNnZXRJbWFnZShqYXZhLmxhbmcuT2JqZWN0KQorCQkgKi8KKwkJcHVibGljIEltYWdlIGdldEltYWdlKE9iamVjdCBlbGVtZW50KSB7CisJCQlyZXR1cm4gKGVsZW1lbnQgaW5zdGFuY2VvZiBJZGVudGlmaWFibGVEZWxlZ2F0ZSkgPyBnZXRQb3B1bGF0aW9uSWNvbigpCisJCQkJCTogc3VwZXIuZ2V0SW1hZ2UoZWxlbWVudCk7CisJCX0gLy8gZ2V0SW1hZ2UKKworCQkvKioKKwkJICogQHJldHVybiB0aGUgaWNvbiB0byBiZSB1c2VkIHRvIHJlcHJlc2VudCBwb3B1bGF0aW9uIG1vZGVscywgb3IgbnVsbCBpZiBpdAorCQkgKiAgICAgICAgIGNhbid0IGJlIGxvYWRlZC4KKwkJICovCisJCXByaXZhdGUgSW1hZ2UgZ2V0UG9wdWxhdGlvbkljb24oKSB7CisJCQkvLyBTaG91bGQgd2UgdHJ5IHRvIGxvYWQgdGhlIGljb24/CisJCQlpZiAocG9wdWxhdGlvbkljb25GaXJzdFRpbWUgJiYgcG9wdWxhdGlvbkljb24gPT0gbnVsbCkgeworCQkJCS8vIFllcworCQkJCXBvcHVsYXRpb25JY29uRmlyc3RUaW1lID0gZmFsc2U7CisJCQkJcG9wdWxhdGlvbkljb24gPSAKKwkJCQlBYnN0cmFjdFVJUGx1Z2luLmltYWdlRGVzY3JpcHRvckZyb21QbHVnaW4oCisJCQkJCSJvcmcuZWNsaXBzZS5zdGVtLnVpLnBvcHVsYXRpb25tb2RlbHMiCSwgImljb25zL2Z1bGwvY3VzdG9tMTYvIiArICJwb3B1bGF0aW9ubW9kZWwuZ2lmIik7CisJCQl9IC8vIGlmIHdlIHNob3VsZCBsb2FkIHRoZSBpY29uCisJCQlyZXR1cm4gcG9wdWxhdGlvbkljb24uY3JlYXRlSW1hZ2UoKTsKKwkJfSAvLyBnZXRQb3B1bGF0aW9uSWNvbgorCisJCS8qKgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0udWkudmlld3MuSWRlbnRpZmlhYmxlUGx1Z2luVmlldy5JZGVudGlmaWFibGVQbHVnaW5WaWV3TGFiZWxDb250ZW50UHJvdmlkZXIjZGlzcG9zZSgpCisJCSAqLworCQlAT3ZlcnJpZGUKKwkJcHVibGljIHZvaWQgZGlzcG9zZSgpIHsKKwkJCXN1cGVyLmRpc3Bvc2UoKTsKKwkJCS8vIFRPRE8gZGlzcG9zZSBvZiB0aGUgaW1hZ2UKKwkJfQorCisJfSAvLyBQb3B1bGF0aW9uTW9kZWxWaWV3VHJlZUNvbnRlbnRQcm92aWRlcgorfSAvLyBQb3B1bGF0aW9uVmlldwpkaWZmIC0tZ2l0IGEvcmVsZW5nL29yZy5lY2xpcHNlLnN0ZW0ucmVsZW5nLmJ1Y2ttaW5zdGVyLy5wcm9qZWN0IGIvcmVsZW5nL29yZy5lY2xpcHNlLnN0ZW0ucmVsZW5nLmJ1Y2ttaW5zdGVyLy5wcm9qZWN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhkYjhkMzQKLS0tIC9kZXYvbnVsbAorKysgYi9yZWxlbmcvb3JnLmVjbGlwc2Uuc3RlbS5yZWxlbmcuYnVja21pbnN0ZXIvLnByb2plY3QKQEAgLTAsMCArMSwxMSBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4NCis8cHJvamVjdERlc2NyaXB0aW9uPg0KKwk8bmFtZT5vcmcuZWNsaXBzZS5zdGVtLnJlbGVuZy5idWNrbWluc3RlcjwvbmFtZT4NCisJPGNvbW1lbnQ+PC9jb21tZW50Pg0KKwk8cHJvamVjdHM+DQorCTwvcHJvamVjdHM+DQorCTxidWlsZFNwZWM+DQorCTwvYnVpbGRTcGVjPg0KKwk8bmF0dXJlcz4NCisJPC9uYXR1cmVzPg0KKzwvcHJvamVjdERlc2NyaXB0aW9uPg0KZGlmZiAtLWdpdCBhL3JlbGVuZy9vcmcuZWNsaXBzZS5zdGVtLnJlbGVuZy5idWNrbWluc3Rlci9idWNrbWluc3Rlci5jc3BlYyBiL3JlbGVuZy9vcmcuZWNsaXBzZS5zdGVtLnJlbGVuZy5idWNrbWluc3Rlci9idWNrbWluc3Rlci5jc3BlYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NzZjMzM4Ci0tLSAvZGV2L251bGwKKysrIGIvcmVsZW5nL29yZy5lY2xpcHNlLnN0ZW0ucmVsZW5nLmJ1Y2ttaW5zdGVyL2J1Y2ttaW5zdGVyLmNzcGVjCkBAIC0wLDAgKzEsNiBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz48Y3M6Y3NwZWMgeG1sbnM6Y3M9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvYnVja21pbnN0ZXIvQ1NwZWMtMS4wIiBuYW1lPSJvcmcuZWNsaXBzZS5zdGVtLnJlbGVuZy5idWNrbWluc3RlciIgY29tcG9uZW50VHlwZT0iYnVja21pbnN0ZXIiIHZlcnNpb249IjEuMC4wIj4NCisgICAgPGNzOmRlcGVuZGVuY2llcz4NCisgICAgICAgIDxjczpkZXBlbmRlbmN5IG5hbWU9Im9yZy5lY2xpcHNlLnN0ZW0uaW50ZXJuYWwuZGF0YSIgY29tcG9uZW50VHlwZT0ib3NnaS5idW5kbGUiLz4NCisgICAgICAgIDxjczpkZXBlbmRlbmN5IG5hbWU9Im9yZy5lY2xpcHNlLnN0ZW0udWkiIGNvbXBvbmVudFR5cGU9Im9zZ2kuYnVuZGxlIi8+DQorICAgIDwvY3M6ZGVwZW5kZW5jaWVzPg0KKzwvY3M6Y3NwZWM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvcmVsZW5nL29yZy5lY2xpcHNlLnN0ZW0ucmVsZW5nLmJ1Y2ttaW5zdGVyL2J1Y2ttaW5zdGVyLnByb3BlcnRpZXMgYi9yZWxlbmcvb3JnLmVjbGlwc2Uuc3RlbS5yZWxlbmcuYnVja21pbnN0ZXIvYnVja21pbnN0ZXIucHJvcGVydGllcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMjE5NDEzCi0tLSAvZGV2L251bGwKKysrIGIvcmVsZW5nL29yZy5lY2xpcHNlLnN0ZW0ucmVsZW5nLmJ1Y2ttaW5zdGVyL2J1Y2ttaW5zdGVyLnByb3BlcnRpZXMKQEAgLTAsMCArMSw2OCBAQAorIyBidWNrbWluc3Rlci5wcm9wZXJ0aWVzDQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorIyBUaGVzZSBwcm9wZXJ0aWVzIGNvbnRyb2wgaG93IGJ1Y2ttaW5zdGVyIHBlcmZvcm1zIGEgYnVpbGQsIHdoZXJlIG91dHB1dCBzaG91bGQgYmUgcGxhY2VkLA0KKyMgd2hlcmUgdGVtcG9yYXJ5IGZpbGVzIHNob3VsZCBiZSBrZXB0LCBhbmQgd2hlcmUgb3B0aW9ucyBmb3Igc2lnbmluZywgcGFja2luZywgYW5kDQorIyBwbGF0Zm9ybXMgYXJlIHN0YXRlZC4NCisjDQorDQorIyBJcyB1c2VkIHRvIHNlbGVjdCB0aGUgZGVwZW5kZW5jeSBsb2NhdGlvbiBpbiB0aGUgcm1hcA0KKyMgYnVpbGQudHlwZT1ODQorDQorIyBXaGVyZSBhbGwgdGhlIG91dHB1dCBzaG91bGQgZ28NCitidWNrbWluc3Rlci5vdXRwdXQucm9vdD0vdGVtcC9TVEVNL291dHB1dA0KKw0KKyMgV2hlcmUgdGhlIHRlbXAgZmlsZXMgc2hvdWxkIGdvDQorYnVja21pbnN0ZXIudGVtcC5yb290PS90ZW1wL1NURU0vdGVtcA0KKw0KKyMgVGhlIGdlbmVyYXRlZCBwMiBzaXRlDQorI3AycmVwb3NpdG9yeSA9ICR7YnVja21pbnN0ZXIub3V0cHV0LnJvb3R9L29yZy5lY2xpcHNlLnN0ZW0uc2l0ZS5mZWF0dXJlXzAuMC4wLWVjbGlwc2UuZmVhdHVyZS9zaXRlLnAyDQorDQorIyBTZXRzIHRoZSBKYXZhIGNvbXBpbGVyIGNvbXBsaWFuY2UgbGV2ZWwNCitvcmcuZWNsaXBzZS5idWNrbWluc3Rlci5jb3JlLmpkdC5jb21wbGlhbmNlbGV2ZWw9IDEuNQ0KKw0KKyMgVGhlIG51bWJlciBvZiB0aHJlYWRzIHRvIHJ1biBpbiBwYXJhbGxlbCBmb3IgbWF0ZXJpYWxpemF0aW9uDQorb3JnLmVjbGlwc2UuYnVja21pbnN0ZXIuY29yZS5tYXhQYXJhbGxlbE1hdGVyaWFsaXphdGlvbnM9NA0KKw0KKyMgVGhlIG51bWJlciBvZiB0aHJlYWRzIHRvIHJ1biBpbiBwYXJhbGxlbCBmb3IgUk1BUCByZXNvbHV0aW9uDQorb3JnLmVjbGlwc2UuYnVja21pbnN0ZXIuY29yZS5tYXhQYXJhbGxlbFJlc29sdXRpb25zPTQNCisNCisjIEhvdyAucXVhbGlmaWVyIGluIHZlcnNpb25zIHNob3VsZCBiZSByZXBsYWNlZA0KKw0KKyNxdWFsaWZpZXIucmVwbGFjZW1lbnQuKj1nZW5lcmF0b3I6bGFzdE1vZGlmaWVkDQorI2dlbmVyYXRvci5sYXN0TW9kaWZpZWQuZm9ybWF0PSd2J3l5eXlNTWRkLUhIbW0NCisjcXVhbGlmaWVyLnJlcGxhY2VtZW50Lio9Z2VuZXJhdG9yOmxhc3RSZXZpc2lvbg0KKyNnZW5lcmF0b3IubGFzdFJldmlzaW9uLmZvcm1hdD1yezAsbnVtYmVyLDAwMDAwfQ0KK3F1YWxpZmllci5yZXBsYWNlbWVudC4qPWdlbmVyYXRvcjpidWlsZFRpbWVzdGFtcA0KK2dlbmVyYXRvci5idWlsZFRpbWVzdGFtcC5mb3JtYXQ9J3YneXl5eU1NZGQnXydISG1tDQorDQorIyBJZiBhIHNpdGUgc2hvdWxkIHVzZSBwYWNrMjAwLCB0dXJuIG9mZiBmb3IgZmFzdGVyIGJ1aWxkDQorIyBjb21tZW50ZWQgb3V0LCBpcyBjb250cm9sbGVkIGJ5IHRoZSBodWRzb24gaW50ZXJmYWNlDQorI3NpdGUucGFjazIwMD1mYWxzZQ0KKw0KKyMgSWYgYSBzaXRlIHNob3VsZCBiZSBzaWduZWQNCisjc2l0ZS5zaWduaW5nPWZhbHNlDQorDQorIyBTaG91bGQgc291cmNlIGJ1bmRsZXMgYmUgYnVpbHQgYW5kIGluY2x1ZGVkDQorI2NiaS5pbmNsdWRlLnNvdXJjZT10cnVlDQorY2JpLmluY2x1ZGUuc291cmNlPWZhbHNlDQorDQorIyBXaGF0IHBsYXRmb3JtcyBzaG91bGQgYmUgYnVpbHQsICogZm9yICJhbGwiDQorIyBUaGlzIHByb3BlcnRpZXMgZmlsZSBpcyB1c2VkIHRvIGNyZWF0ZSB0aGUgInVwZGF0ZSBzaXRlIiBzbyBpdCBzaG91bGQgc3BlY2lmeQ0KKyMgImFsbCIgKGkuZS4sICIqIikgc28gdGhhdCBhbGwgb2YgdGhlIGRpZmZlcmVudCBwbGF0Zm9ybXMgd2lsbCBiZSBwcmVzZW50IGluIA0KKyMgdGhlIGNvbGxlY3Rpb24gb2YgZmVhdHVyZSBhbmQgcGx1Z2lucyBpbiB0aGUgdXBkYXRlIHNpdGUuICBOb3QgYWxsIHdpbGwgYmUgDQorIyB1c2VkLiAgV2UgbGlzdCBhbGwgb2YgdGhlIGFsbG93ZWQgdmFsdWVzIGZvciByZWZlcmVuY2UuDQorIw0KKyMgUG9zc2libGUgVmFsdWVzIGZvciB0YXJnZXQub3M6IHdpbjMyLCB3aW4zMiwgbGludXgsIG1hY29zeCwgYWl4LCBzb2xhcmlzLCBocHV4LCBxbngNCisjdGFyZ2V0Lm9zPSoNCisjIFBvc3NpYmxlIFZhbHVlcyBmb3IgdGFyZ2V0LndzOiB3aW4zMiwgbW90aWYsIGd0aywgcGhvdG9uLCBjYXJib24gDQorI3RhcmdldC53cz0qDQorIyBQb3NzaWJsZSB2YWx1ZXMgZm9yIHRhcmdldC5hcmNoOiB4ODYsIHg4Nl82NCwgaWE2NCwgaWE2NF8zMiwgcHBjLCBQQV9SSVNDLCBzcGFyYyANCisjdGFyZ2V0LmFyY2g9Kg0KKw0KKw0KK3NpZ25pbmcudHlwZT1lY2xpcHNlLmxvY2FsDQorI3NpZ25pbmcudHlwZT1lY2xpcHNlLnJlbW90ZQ0KKw0KK2J1Y2ttaW5zdGVyLnAyLnNpdGU9aHR0cDovL2Rvd25sb2FkLmVjbGlwc2Uub3JnL3Rvb2xzL2J1Y2ttaW5zdGVyL2hlYWRsZXNzLTMuNg0KK2RpcmVjdG9yLnVybD1odHRwOi8vZG93bmxvYWQuZWNsaXBzZS5vcmcvdG9vbHMvYnVja21pbnN0ZXIvcHJvZHVjdHMvZGlyZWN0b3JfbGF0ZXN0LnppcA0KK2VjbGlwc2Uuc3RhZ2luZy5hcmVhPSR7ZW52LkhVRFNPTl9IT01FfS9qb2JzLyR7ZW52LkpPQl9OQU1FfS9zaWduaW5nDQpkaWZmIC0tZ2l0IGEvcmVsZW5nL29yZy5lY2xpcHNlLnN0ZW0ucmVsZW5nLmJ1Y2ttaW5zdGVyL2J1Y2ttaW5zdGVySURFLnByb3BlcnRpZXMgYi9yZWxlbmcvb3JnLmVjbGlwc2Uuc3RlbS5yZWxlbmcuYnVja21pbnN0ZXIvYnVja21pbnN0ZXJJREUucHJvcGVydGllcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ODFkMzk3Ci0tLSAvZGV2L251bGwKKysrIGIvcmVsZW5nL29yZy5lY2xpcHNlLnN0ZW0ucmVsZW5nLmJ1Y2ttaW5zdGVyL2J1Y2ttaW5zdGVySURFLnByb3BlcnRpZXMKQEAgLTAsMCArMSw3MSBAQAorIyBidWNrbWluc3Rlci5wcm9wZXJ0aWVzDQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorIyBUaGVzZSBwcm9wZXJ0aWVzIGNvbnRyb2wgaG93IEJ1Y2ttaW5zdGVyIHBlcmZvcm1zIGEgYnVpbGQsIHdoZXJlIG91dHB1dCBzaG91bGQgYmUgcGxhY2VkLA0KKyMgd2hlcmUgdGVtcG9yYXJ5IGZpbGVzIHNob3VsZCBiZSBrZXB0LCBhbmQgd2hlcmUgb3B0aW9ucyBmb3Igc2lnbmluZywgcGFja2luZywgYW5kDQorIyBwbGF0Zm9ybXMgYXJlIHN0YXRlZC4NCisjDQorIyBUaGlzIGZpbGUgaXMgc3BlY2lmaWNhbGx5IGZvciBjb25maWd1cmluZyBidWlsZHMgdHJpZ2dlcmVkIGZyb20gdGhlIEVjbGlwc2UgSURFLg0KKyMgVHlwaWNhbGx5IGZvciB0ZXN0aW5nIGFuZCBkZXZlbG9wbWVudCBwdXJwb3Nlcy4NCisNCisjIElzIHVzZWQgdG8gc2VsZWN0IHRoZSBkZXBlbmRlbmN5IGxvY2F0aW9uIGluIHRoZSBybWFwDQorIyBidWlsZC50eXBlPU4NCisNCisjIFdoZXJlIGFsbCB0aGUgb3V0cHV0IHNob3VsZCBnbw0KK2J1Y2ttaW5zdGVyLm91dHB1dC5yb290PS90ZW1wL1NURU0vb3V0cHV0DQorDQorIyBXaGVyZSB0aGUgdGVtcCBmaWxlcyBzaG91bGQgZ28NCitidWNrbWluc3Rlci50ZW1wLnJvb3Q9L3RlbXAvU1RFTS90ZW1wDQorDQorIyBUaGUgZ2VuZXJhdGVkIHAyIHNpdGUNCisjcDJyZXBvc2l0b3J5ID0gJHtidWNrbWluc3Rlci5vdXRwdXQucm9vdH0vb3JnLmVjbGlwc2Uuc3RlbS5zaXRlLmZlYXR1cmVfMC4wLjAtZWNsaXBzZS5mZWF0dXJlL3NpdGUucDINCisNCisjIFNldHMgdGhlIEphdmEgY29tcGlsZXIgY29tcGxpYW5jZSBsZXZlbA0KK29yZy5lY2xpcHNlLmJ1Y2ttaW5zdGVyLmNvcmUuamR0LmNvbXBsaWFuY2VsZXZlbD0gMS41DQorDQorIyBUaGUgbnVtYmVyIG9mIHRocmVhZHMgdG8gcnVuIGluIHBhcmFsbGVsIGZvciBtYXRlcmlhbGl6YXRpb24NCitvcmcuZWNsaXBzZS5idWNrbWluc3Rlci5jb3JlLm1heFBhcmFsbGVsTWF0ZXJpYWxpemF0aW9ucz00DQorDQorIyBUaGUgbnVtYmVyIG9mIHRocmVhZHMgdG8gcnVuIGluIHBhcmFsbGVsIGZvciBSTUFQIHJlc29sdXRpb24NCitvcmcuZWNsaXBzZS5idWNrbWluc3Rlci5jb3JlLm1heFBhcmFsbGVsUmVzb2x1dGlvbnM9NA0KKw0KKyMgSG93IC5xdWFsaWZpZXIgaW4gdmVyc2lvbnMgc2hvdWxkIGJlIHJlcGxhY2VkDQorDQorI3F1YWxpZmllci5yZXBsYWNlbWVudC4qPWdlbmVyYXRvcjpsYXN0TW9kaWZpZWQNCisjZ2VuZXJhdG9yLmxhc3RNb2RpZmllZC5mb3JtYXQ9J3YneXl5eU1NZGQtSEhtbQ0KKyNxdWFsaWZpZXIucmVwbGFjZW1lbnQuKj1nZW5lcmF0b3I6bGFzdFJldmlzaW9uDQorI2dlbmVyYXRvci5sYXN0UmV2aXNpb24uZm9ybWF0PXJ7MCxudW1iZXIsMDAwMDB9DQorcXVhbGlmaWVyLnJlcGxhY2VtZW50Lio9Z2VuZXJhdG9yOmJ1aWxkVGltZXN0YW1wDQorZ2VuZXJhdG9yLmJ1aWxkVGltZXN0YW1wLmZvcm1hdD0ndid5eXl5TU1kZCdfJ0hIbW0NCisNCisjIElmIGEgc2l0ZSBzaG91bGQgdXNlIHBhY2syMDAsIHR1cm4gb2ZmIGZvciBmYXN0ZXIgYnVpbGQNCisjIGNvbW1lbnRlZCBvdXQsIGlzIGNvbnRyb2xsZWQgYnkgdGhlIGh1ZHNvbiBpbnRlcmZhY2UNCisjc2l0ZS5wYWNrMjAwPWZhbHNlDQorDQorIyBJZiBhIHNpdGUgc2hvdWxkIGJlIHNpZ25lZA0KKyNzaXRlLnNpZ25pbmc9ZmFsc2UNCisNCisjIFNob3VsZCBzb3VyY2UgYnVuZGxlcyBiZSBidWlsdCBhbmQgaW5jbHVkZWQNCisjY2JpLmluY2x1ZGUuc291cmNlPXRydWUNCitjYmkuaW5jbHVkZS5zb3VyY2U9ZmFsc2UNCisNCisjIFdoYXQgcGxhdGZvcm1zIHNob3VsZCBiZSBidWlsdCwgKiBmb3IgImFsbCINCisjIFRoaXMgcHJvcGVydGllcyBmaWxlIGlzIHVzZWQgdG8gY3JlYXRlIHRoZSAidXBkYXRlIHNpdGUiIHNvIGl0IHNob3VsZCBzcGVjaWZ5DQorIyAiYWxsIiAoaS5lLiwgIioiKSBzbyB0aGF0IGFsbCBvZiB0aGUgZGlmZmVyZW50IHBsYXRmb3JtcyB3aWxsIGJlIHByZXNlbnQgaW4gDQorIyB0aGUgY29sbGVjdGlvbiBvZiBmZWF0dXJlIGFuZCBwbHVnaW5zIGluIHRoZSB1cGRhdGUgc2l0ZS4gIE5vdCBhbGwgd2lsbCBiZSANCisjIHVzZWQuICBXZSBsaXN0IGFsbCBvZiB0aGUgYWxsb3dlZCB2YWx1ZXMgZm9yIHJlZmVyZW5jZS4NCisjDQorIyBQb3NzaWJsZSBWYWx1ZXMgZm9yIHRhcmdldC5vczogd2luMzIsIHdpbjMyLCBsaW51eCwgbWFjb3N4LCBhaXgsIHNvbGFyaXMsIGhwdXgsIHFueA0KKyN0YXJnZXQub3M9Kg0KKyMgUG9zc2libGUgVmFsdWVzIGZvciB0YXJnZXQud3M6IHdpbjMyLCBtb3RpZiwgZ3RrLCBwaG90b24sIGNhcmJvbiANCisjdGFyZ2V0LndzPSoNCisjIFBvc3NpYmxlIHZhbHVlcyBmb3IgdGFyZ2V0LmFyY2g6IHg4NiwgeDg2XzY0LCBpYTY0LCBpYTY0XzMyLCBwcGMsIFBBX1JJU0MsIHNwYXJjIA0KKyN0YXJnZXQuYXJjaD0qDQorIyBMYW5ndWFnZSB0YXJnZXQgKEVuZ2xpc2ggZm9yIG5vdykNCit0YXJnZXQubmw9ZW4NCisNCitzaWduaW5nLnR5cGU9ZWNsaXBzZS5sb2NhbA0KKyNzaWduaW5nLnR5cGU9ZWNsaXBzZS5yZW1vdGUNCisNCitidWNrbWluc3Rlci5wMi5zaXRlPWh0dHA6Ly9kb3dubG9hZC5lY2xpcHNlLm9yZy90b29scy9idWNrbWluc3Rlci9oZWFkbGVzcy0zLjYNCitkaXJlY3Rvci51cmw9aHR0cDovL2Rvd25sb2FkLmVjbGlwc2Uub3JnL3Rvb2xzL2J1Y2ttaW5zdGVyL3Byb2R1Y3RzL2RpcmVjdG9yX2xhdGVzdC56aXANCitlY2xpcHNlLnN0YWdpbmcuYXJlYT0ke2Vudi5IVURTT05fSE9NRX0vam9icy8ke2Vudi5KT0JfTkFNRX0vc2lnbmluZw0KZGlmZiAtLWdpdCBhL3JlbGVuZy9vcmcuZWNsaXBzZS5zdGVtLnJlbGVuZy5idWNrbWluc3Rlci9wcm92aXNpb24uY3F1ZXJ5IGIvcmVsZW5nL29yZy5lY2xpcHNlLnN0ZW0ucmVsZW5nLmJ1Y2ttaW5zdGVyL3Byb3Zpc2lvbi5jcXVlcnkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTFkNzE4NwotLS0gL2Rldi9udWxsCisrKyBiL3JlbGVuZy9vcmcuZWNsaXBzZS5zdGVtLnJlbGVuZy5idWNrbWluc3Rlci9wcm92aXNpb24uY3F1ZXJ5CkBAIC0wLDAgKzEsMjEgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+PGNxOmNvbXBvbmVudFF1ZXJ5IHhtbG5zOmNxPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2J1Y2ttaW5zdGVyL0NRdWVyeS0xLjAiIHJlc291cmNlTWFwPSIuL3N0ZW0ucm1hcCI+DQorICAgIDxjcTpyb290UmVxdWVzdCBuYW1lPSJvcmcuZWNsaXBzZS5zdGVtLmludGVybmFsLmRhdGEiIGNvbXBvbmVudFR5cGU9Im9zZ2kuYnVuZGxlIi8+DQorICAgIDxjcTphZHZpc29yTm9kZSBuYW1lUGF0dGVybj0ib3JnLmVjbGlwc2Uuc3d0LmNvY29hLm1hY29zeCIgY29tcG9uZW50VHlwZT0ib3NnaS5idW5kbGUiIHNraXBDb21wb25lbnQ9InRydWUiLz4NCisgICAgPGNxOmFkdmlzb3JOb2RlIG5hbWVQYXR0ZXJuPSJvcmcuZWNsaXBzZS5jb3JlLmZpbGVzeXN0ZW0ubGludXgueDg2XzY0IiBjb21wb25lbnRUeXBlPSJvc2dpLmJ1bmRsZSIgc2tpcENvbXBvbmVudD0idHJ1ZSIvPg0KKyAgICA8Y3E6YWR2aXNvck5vZGUgbmFtZVBhdHRlcm49Im9yZy5lY2xpcHNlLmNvcmUubmV0LndpbjMyLng4Nl82NCIgY29tcG9uZW50VHlwZT0ib3NnaS5idW5kbGUiIHNraXBDb21wb25lbnQ9InRydWUiLz4NCisgICAgPGNxOmFkdmlzb3JOb2RlIG5hbWVQYXR0ZXJuPSJvcmcuZWNsaXBzZS5jb3JlLmZpbGVzeXN0ZW0ud2luMzIueDg2XzY0IiBjb21wb25lbnRUeXBlPSJvc2dpLmJ1bmRsZSIgc2tpcENvbXBvbmVudD0idHJ1ZSIvPg0KKyAgICA8Y3E6YWR2aXNvck5vZGUgbmFtZVBhdHRlcm49Im9yZy5lY2xpcHNlLnVpLmNhcmJvbiIgY29tcG9uZW50VHlwZT0ib3NnaS5idW5kbGUiIHNraXBDb21wb25lbnQ9InRydWUiLz4NCisgICAgPGNxOmFkdmlzb3JOb2RlIG5hbWVQYXR0ZXJuPSJvcmcuZWNsaXBzZS5zd3QuZ3RrLmxpbnV4Lng4NiIgY29tcG9uZW50VHlwZT0ib3NnaS5idW5kbGUiIHNraXBDb21wb25lbnQ9InRydWUiLz4NCisgICAgPGNxOmFkdmlzb3JOb2RlIG5hbWVQYXR0ZXJuPSJvcmcuZWNsaXBzZS5jb3JlLmZpbGVzeXN0ZW0ubWFjb3N4IiBjb21wb25lbnRUeXBlPSJvc2dpLmJ1bmRsZSIgc2tpcENvbXBvbmVudD0idHJ1ZSIvPg0KKyAgICA8Y3E6YWR2aXNvck5vZGUgbmFtZVBhdHRlcm49Im9yZy5lY2xpcHNlLnVpLmNvY29hIiBjb21wb25lbnRUeXBlPSJvc2dpLmJ1bmRsZSIgc2tpcENvbXBvbmVudD0idHJ1ZSIvPg0KKyAgICA8Y3E6YWR2aXNvck5vZGUgbmFtZVBhdHRlcm49Im9yZy5lY2xpcHNlLnN3dC53aW4zMi53aW4zMi54ODZfNjQiIGNvbXBvbmVudFR5cGU9Im9zZ2kuYnVuZGxlIiBza2lwQ29tcG9uZW50PSJ0cnVlIi8+DQorICAgIDxjcTphZHZpc29yTm9kZSBuYW1lUGF0dGVybj0ib3JnLmVjbGlwc2UuY29yZS5maWxlc3lzdGVtLmxpbnV4Lng4NiIgY29tcG9uZW50VHlwZT0ib3NnaS5idW5kbGUiIHNraXBDb21wb25lbnQ9InRydWUiLz4NCisgICAgPGNxOmFkdmlzb3JOb2RlIG5hbWVQYXR0ZXJuPSJvcmcuZWNsaXBzZS51cGRhdGUuY29yZS5saW51eCIgY29tcG9uZW50VHlwZT0ib3NnaS5idW5kbGUiIHNraXBDb21wb25lbnQ9InRydWUiLz4NCisgICAgPGNxOmFkdmlzb3JOb2RlIG5hbWVQYXR0ZXJuPSJvcmcuZWNsaXBzZS5lcXVpbm94LnNlY3VyaXR5Lm1hY29zeCIgY29tcG9uZW50VHlwZT0ib3NnaS5idW5kbGUiIHNraXBDb21wb25lbnQ9InRydWUiLz4NCisgICAgPGNxOmFkdmlzb3JOb2RlIG5hbWVQYXR0ZXJuPSJvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5jb21wYXRpYmlsaXR5IiBjb21wb25lbnRUeXBlPSJvc2dpLmJ1bmRsZSIgc2tpcENvbXBvbmVudD0idHJ1ZSIvPg0KKyAgICA8Y3E6YWR2aXNvck5vZGUgbmFtZVBhdHRlcm49Im9yZy5lY2xpcHNlLnN3dC5jYXJib24ubWFjb3N4IiBjb21wb25lbnRUeXBlPSJvc2dpLmJ1bmRsZSIgc2tpcENvbXBvbmVudD0idHJ1ZSIvPg0KKyAgICA8Y3E6YWR2aXNvck5vZGUgbmFtZVBhdHRlcm49Im9yZy5lY2xpcHNlLmNvcmUubmV0LmxpbnV4Lng4NiIgY29tcG9uZW50VHlwZT0ib3NnaS5idW5kbGUiIHNraXBDb21wb25lbnQ9InRydWUiLz4NCisgICAgPGNxOmFkdmlzb3JOb2RlIG5hbWVQYXR0ZXJuPSJvcmcuZWNsaXBzZS5zdGVtLnVpIiBjb21wb25lbnRUeXBlPSJvc2dpLmJ1bmRsZSIgYWxsb3dDaXJjdWxhckRlcGVuZGVuY3k9InRydWUiLz4NCisgICAgPGNxOmFkdmlzb3JOb2RlIG5hbWVQYXR0ZXJuPSJvcmcuZWNsaXBzZS5zdGVtLmludGVybmFsLmRhdGEiIGNvbXBvbmVudFR5cGU9Im9zZ2kuYnVuZGxlIiBhbGxvd0NpcmN1bGFyRGVwZW5kZW5jeT0idHJ1ZSIvPg0KKyAgICA8Y3E6YWR2aXNvck5vZGUgbmFtZVBhdHRlcm49Im9yZy5tb3ppbGxhLnJoaW5vIiBjb21wb25lbnRUeXBlPSJvc2dpLmJ1bmRsZSIgc2tpcENvbXBvbmVudD0idHJ1ZSIvPg0KKzwvY3E6Y29tcG9uZW50UXVlcnk+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvcmVsZW5nL29yZy5lY2xpcHNlLnN0ZW0ucmVsZW5nLmJ1Y2ttaW5zdGVyL3N0ZW0ucm1hcCBiL3JlbGVuZy9vcmcuZWNsaXBzZS5zdGVtLnJlbGVuZy5idWNrbWluc3Rlci9zdGVtLnJtYXAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTFhMDE0OAotLS0gL2Rldi9udWxsCisrKyBiL3JlbGVuZy9vcmcuZWNsaXBzZS5zdGVtLnJlbGVuZy5idWNrbWluc3Rlci9zdGVtLnJtYXAKQEAgLTAsMCArMSwxMjUgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+DQorPHJtOnJtYXAgeG1sbnM6cm09Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvYnVja21pbnN0ZXIvUk1hcC0xLjAiDQorCQkgeG1sbnM6YmM9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvYnVja21pbnN0ZXIvQ29tbW9uLTEuMCINCisJCSB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIg0KKwkJIHhtbG5zOnBtcD0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9idWNrbWluc3Rlci9QREVNYXBQcm92aWRlci0xLjAiDQorCQkgPg0KKw0KKyAgPHJtOnByb3BlcnR5IGtleT0iT1JCSVRfUkVWSVNJT04iIHZhbHVlPSJTMjAxMDEwMTQwODQ1NTciIC8+DQorIA0KKyAgPHJtOmxvY2F0b3IgcGF0dGVybj0iXm9yZ1wuZWNsaXBzZVwuc3RlbVwuKFwuLispPyIgc2VhcmNoUGF0aFJlZj0ibG9jYWxXb3Jrc3BhY2UiIGZhaWxPbkVycm9yPSJmYWxzZSIgLz4NCisgIDxybTpsb2NhdG9yIHBhdHRlcm49Il5vcmdcLmVjbGlwc2VcLnN0ZW1cLihcLi4rKT8iIHNlYXJjaFBhdGhSZWY9InN0ZW1zb3VyY2UiIGZhaWxPbkVycm9yPSJ0cnVlIiAvPg0KKyAgPCEtLQ0KKyAgPHJtOmxvY2F0b3IgcGF0dGVybj0iIiBzZWFyY2hQYXRoUmVmPSJlY2xpcHNlMy42IiBmYWlsT25FcnJvcj0iZmFsc2UiLz4NCisgIC0tPg0KKyAgPHJtOmxvY2F0b3Igc2VhcmNoUGF0aFJlZj0ib3JiaXQiIGZhaWxPbkVycm9yPSJ0cnVlIi8+DQorIA0KKyAgICANCisgIDxybTpzZWFyY2hQYXRoIG5hbWU9ImxvY2FsV29ya3NwYWNlIj4NCisgICAgPHJtOnByb3ZpZGVyIGNvbXBvbmVudFR5cGVzPSJvc2dpLmJ1bmRsZSxlY2xpcHNlLmZlYXR1cmUiDQorICAgICAgICByZWFkZXJUeXBlPSJsb2NhbCINCisgICAgICAgIHNvdXJjZT0idHJ1ZSINCisgICAgICAgIG11dGFibGU9InRydWUiPg0KKyAgICAgICAgPHJtOnVyaSBmb3JtYXQ9ImZpbGU6Ly8vezB9L3sxfS8iPg0KKyAgICAgICAgICA8YmM6cHJvcGVydHlSZWYga2V5PSJ3b3Jrc3BhY2Uucm9vdCIvPg0KKyAgICAgICAgICA8YmM6cHJvcGVydHlSZWYga2V5PSJidWNrbWluc3Rlci5jb21wb25lbnQiLz4NCisgICAgICAgIDwvcm06dXJpPg0KKyAgICAgPC9ybTpwcm92aWRlcj4NCisgICAgIA0KKyAgICAgIDxybTpwcm92aWRlciBjb21wb25lbnRUeXBlcz0ib3NnaS5idW5kbGUiDQorICAgICAgICByZWFkZXJUeXBlPSJsb2NhbCINCisgICAgICAgIHNvdXJjZT0idHJ1ZSINCisgICAgICAgIG11dGFibGU9InRydWUiPg0KKyAgICAgICAgPHJtOnVyaSBmb3JtYXQ9ImZpbGU6Ly8vezB9L3BsdWdpbnMvezF9LyI+DQorICAgICAgICAgIDxiYzpwcm9wZXJ0eVJlZiBrZXk9IndvcmtzcGFjZS5yb290Ii8+DQorICAgICAgICAgIDxiYzpwcm9wZXJ0eVJlZiBrZXk9ImJ1Y2ttaW5zdGVyLmNvbXBvbmVudCIvPg0KKyAgICAgICAgPC9ybTp1cmk+DQorICAgICA8L3JtOnByb3ZpZGVyPg0KKyAgICAgDQorICAgICAgPHJtOnByb3ZpZGVyIGNvbXBvbmVudFR5cGVzPSJlY2xpcHNlLmZlYXR1cmUiDQorICAgICAgICByZWFkZXJUeXBlPSJsb2NhbCINCisgICAgICAgIHNvdXJjZT0idHJ1ZSINCisgICAgICAgIG11dGFibGU9InRydWUiPg0KKyAgICAgICAgPHJtOnVyaSBmb3JtYXQ9ImZpbGU6Ly8vezB9L2ZlYXR1cmVzL3sxfS8iPg0KKyAgICAgICAgICA8YmM6cHJvcGVydHlSZWYga2V5PSJ3b3Jrc3BhY2Uucm9vdCIvPg0KKyAgICAgICAgICA8YmM6cHJvcGVydHlSZWYga2V5PSJidWNrbWluc3Rlci5jb21wb25lbnQiLz4NCisgICAgICAgIDwvcm06dXJpPg0KKyAgICAgPC9ybTpwcm92aWRlcj4NCisgICAgIA0KKyAgPC9ybTpzZWFyY2hQYXRoPg0KKyAgDQorICA8cm06c2VhcmNoUGF0aCBuYW1lPSJzdGVtc291cmNlIj4NCisgIA0KKyAgDQorICAgIDxybTpwcm92aWRlciBjb21wb25lbnRUeXBlcz0ib3NnaS5idW5kbGUsZWNsaXBzZS5mZWF0dXJlLGJ1Y2ttaW5zdGVyIiANCisgICAgICByZWFkZXJUeXBlPSJzdm4iIA0KKyAgICAgIHNvdXJjZT0idHJ1ZSINCisgICAgICBtdXRhYmxlPSJ0cnVlIg0KKyAgICAgIHJlc29sdXRpb25GaWx0ZXI9IiI+DQorICAgICAgPHJtOnVyaSBmb3JtYXQ9Imh0dHA6Ly9kZXYuZWNsaXBzZS5vcmcvc3Zucm9vdC90ZWNobm9sb2d5L29yZy5lY2xpcHNlLnN0ZW0vdHJ1bmsvezB9Ij4NCisgICAgICAgIDxiYzpwcm9wZXJ0eVJlZiBrZXk9ImJ1Y2ttaW5zdGVyLmNvbXBvbmVudCIvPg0KKyAgICAgIDwvcm06dXJpPg0KKyAgICA8L3JtOnByb3ZpZGVyPg0KKyAgICANCisgICAgPCEtLQ0KKyAgICA8cm06cHJvdmlkZXIgY29tcG9uZW50VHlwZXM9Im9zZ2kuYnVuZGxlLGVjbGlwc2UuZmVhdHVyZSxidWNrbWluc3RlciIgDQorICAgICAgcmVhZGVyVHlwZT0ic3ZuIiANCisgICAgICBzb3VyY2U9InRydWUiDQorICAgICAgbXV0YWJsZT0idHJ1ZSINCisgICAgICByZXNvbHV0aW9uRmlsdGVyPSIiPg0KKyAgICAgIDxybTp1cmkgZm9ybWF0PSJzdm4rc3NoOi8vZGV2LmVjbGlwc2Uub3JnL3N2bnJvb3QvdGVjaG5vbG9neS9vcmcuZWNsaXBzZS5zdGVtL3RydW5rL3swfSI+DQorICAgICAgICA8YmM6cHJvcGVydHlSZWYga2V5PSJidWNrbWluc3Rlci5jb21wb25lbnQiLz4NCisgICAgICA8L3JtOnVyaT4NCisgICAgPC9ybTpwcm92aWRlcj4NCisgICAgLS0+DQorICAgIA0KKyAgICA8cm06cHJvdmlkZXIgY29tcG9uZW50VHlwZXM9Im9zZ2kuYnVuZGxlIiANCisgICAgICByZWFkZXJUeXBlPSJzdm4iIA0KKyAgICAgIHNvdXJjZT0idHJ1ZSINCisgICAgICBtdXRhYmxlPSJ0cnVlIg0KKyAgICAgIHJlc29sdXRpb25GaWx0ZXI9IihidWNrbWluc3Rlci5jb21wb25lbnQ9b3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzLmZvcmNpbmcuZWRpdG9yKSI+DQorICAgICAgPHJtOnVyaSBmb3JtYXQ9InN2bitzc2g6Ly9kZXYuZWNsaXBzZS5vcmcvc3Zucm9vdC90ZWNobm9sb2d5L29yZy5lY2xpcHNlLnN0ZW0vdHJ1bmsvb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzLmZvcmNpbmciPg0KKyAgICAgICAgPGJjOnByb3BlcnR5UmVmIGtleT0iYnVja21pbnN0ZXIuY29tcG9uZW50Ii8+DQorICAgICAgPC9ybTp1cmk+DQorICAgIDwvcm06cHJvdmlkZXI+DQorICA8L3JtOnNlYXJjaFBhdGg+DQorICANCisgIDxybTpzZWFyY2hQYXRoIG5hbWU9ImVjbGlwc2UzLjYiPg0KKyAgICA8cm06cHJvdmlkZXIgY29tcG9uZW50VHlwZXM9Im9zZ2kuYnVuZGxlLGVjbGlwc2UuZmVhdHVyZSIgDQorICAgICAgcmVhZGVyVHlwZT0icDIiIA0KKyAgICAgIHNvdXJjZT0iZmFsc2UiIA0KKyAgICAgIG11dGFibGU9ImZhbHNlIj4NCisgICAgICA8cm06dXJpIGZvcm1hdD0iaHR0cDovL2Rvd25sb2FkLmVjbGlwc2Uub3JnL3JlbGVhc2VzL2hlbGlvcyIvPg0KKyAgICA8L3JtOnByb3ZpZGVyPg0KKyAgICANCisgICAgIDxybTpwcm92aWRlciBjb21wb25lbnRUeXBlcz0ib3NnaS5idW5kbGUsZWNsaXBzZS5mZWF0dXJlIiANCisgICAgICByZWFkZXJUeXBlPSJwMiIgDQorICAgICAgc291cmNlPSJmYWxzZSIgDQorICAgICAgbXV0YWJsZT0iZmFsc2UiPg0KKyAgICAgIDxybTp1cmkgZm9ybWF0PSJodHRwOi8vZG93bmxvYWQuZWNsaXBzZS5vcmcvZWNsaXBzZS91cGRhdGVzLzMuNiIvPg0KKyAgICA8L3JtOnByb3ZpZGVyPg0KKyAgICANCisgIDwvcm06c2VhcmNoUGF0aD4NCisgIA0KKyAgPHJtOnNlYXJjaFBhdGggbmFtZT0ib3JiaXQiPg0KKyAgDQorICAJPHJtOnByb3ZpZGVyIGNvbXBvbmVudFR5cGVzPSJvc2dpLmJ1bmRsZSIgDQorICAJCXJlYWRlclR5cGU9InAyIiAgICAJDQorICAgIAlzb3VyY2UgPSJmYWxzZSIgDQorICAgIAltdXRhYmxlPSJmYWxzZSI+DQorICAgIAk8cm06dXJpIGZvcm1hdD0iaHR0cDovL2Rvd25sb2FkLmVjbGlwc2Uub3JnL3Rvb2xzL29yYml0L2Rvd25sb2Fkcy9kcm9wcy8ke09SQklUX1JFVklTSU9OfS91cGRhdGVTaXRlP2ltcG9ydFR5cGU9YmluYXJ5Ii8+DQorICAgIDwvcm06cHJvdmlkZXI+DQorICAgIA0KKyAgICA8cm06cHJvdmlkZXIgeHNpOnR5cGU9InBtcDpQREVNYXBQcm92aWRlciIgY29tcG9uZW50VHlwZXM9Im9zZ2kuYnVuZGxlLGVjbGlwc2UuZmVhdHVyZSIgDQorICAgICAgCXJlYWRlclR5cGU9ImN2cyIgIA0KKyAgICAgIAltdXRhYmxlPSJmYWxzZSIgDQorICAgICAgCXNvdXJjZT0idHJ1ZSI+DQorCQk8cm06dXJpIGZvcm1hdD0iOnBzZXJ2ZXI6YW5vbnltb3VzQGRldi5lY2xpcHNlLm9yZzovY3Zzcm9vdC90b29scyxvcmcuZWNsaXBzZS5vcmJpdC9vcmcuZWNsaXBzZS5vcmJpdC5yZWxlbmcvbWFwcyI+DQorCQkJPGJjOnByb3BlcnR5UmVmIGtleT0iYnVja21pbnN0ZXIuY29tcG9uZW50IiAvPg0KKwkJPC9ybTp1cmk+DQorCTwvcm06cHJvdmlkZXI+DQorICAgIA0KKyAgPC9ybTpzZWFyY2hQYXRoPg0KKw0KKyAgDQorPC9ybTpybWFwPg0KZGlmZiAtLWdpdCBhL3JlbGVuZy9vcmcuZWNsaXBzZS5zdGVtLnJlbGVuZy50YXJnZXRwbGF0Zm9ybXMvLnByb2plY3QgYi9yZWxlbmcvb3JnLmVjbGlwc2Uuc3RlbS5yZWxlbmcudGFyZ2V0cGxhdGZvcm1zLy5wcm9qZWN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYwZjc0MzQKLS0tIC9kZXYvbnVsbAorKysgYi9yZWxlbmcvb3JnLmVjbGlwc2Uuc3RlbS5yZWxlbmcudGFyZ2V0cGxhdGZvcm1zLy5wcm9qZWN0CkBAIC0wLDAgKzEsMTEgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+DQorPHByb2plY3REZXNjcmlwdGlvbj4NCisJPG5hbWU+b3JnLmVjbGlwc2Uuc3RlbS5yZWxlbmcudGFyZ2V0cGxhdGZvcm1zPC9uYW1lPg0KKwk8Y29tbWVudD48L2NvbW1lbnQ+DQorCTxwcm9qZWN0cz4NCisJPC9wcm9qZWN0cz4NCisJPGJ1aWxkU3BlYz4NCisJPC9idWlsZFNwZWM+DQorCTxuYXR1cmVzPg0KKwk8L25hdHVyZXM+DQorPC9wcm9qZWN0RGVzY3JpcHRpb24+DQpkaWZmIC0tZ2l0IGEvcmVsZW5nL29yZy5lY2xpcHNlLnN0ZW0ucmVsZW5nLnRhcmdldHBsYXRmb3Jtcy9TVEVNLUVjbGlwc2UzNi50YXJnZXQgYi9yZWxlbmcvb3JnLmVjbGlwc2Uuc3RlbS5yZWxlbmcudGFyZ2V0cGxhdGZvcm1zL1NURU0tRWNsaXBzZTM2LnRhcmdldApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MTI4YTFmCi0tLSAvZGV2L251bGwKKysrIGIvcmVsZW5nL29yZy5lY2xpcHNlLnN0ZW0ucmVsZW5nLnRhcmdldHBsYXRmb3Jtcy9TVEVNLUVjbGlwc2UzNi50YXJnZXQKQEAgLTAsMCArMSwyMiBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+Cis8P3BkZSB2ZXJzaW9uPSIzLjYiPz4KKworPHRhcmdldCBuYW1lPSJTVEVNLUVjbGlwc2UzNiIgc2VxdWVuY2VOdW1iZXI9IjMiPgorPGxvY2F0aW9ucz4KKzxsb2NhdGlvbiBpbmNsdWRlQWxsUGxhdGZvcm1zPSJmYWxzZSIgaW5jbHVkZU1vZGU9InBsYW5uZXIiIGluY2x1ZGVTb3VyY2U9InRydWUiIHR5cGU9Ikluc3RhbGxhYmxlVW5pdCI+Cis8dW5pdCBpZD0ib3JnLmVjbGlwc2UuYmlydC5mZWF0dXJlLmdyb3VwIiB2ZXJzaW9uPSIyLjYuMi5yMjYyX3YyMDEwMTAwOC05aUY3QTlKR0hNQkNSei1SOHRieFJlbDhrUXJJIi8+Cis8dW5pdCBpZD0ib3JnLmVjbGlwc2UuZW1mLnNkay5mZWF0dXJlLmdyb3VwIiB2ZXJzaW9uPSIyLjYuMS52MjAxMDA5MTQtMTIxOCIvPgorPHVuaXQgaWQ9Im9yZy5lY2xpcHNlLnplc3Quc2RrLmZlYXR1cmUuZ3JvdXAiIHZlcnNpb249IjEuMi4wLnYyMDEwMDUxOS0yMDUwLTY3OTE4Q09LTkhBS1FaSUhOVGRXUVRkVUw3VU0iLz4KKzxyZXBvc2l0b3J5IGxvY2F0aW9uPSJodHRwOi8vZG93bmxvYWQuZWNsaXBzZS5vcmcvcmVsZWFzZXMvaGVsaW9zIi8+Cis8L2xvY2F0aW9uPgorPGxvY2F0aW9uIGluY2x1ZGVBbGxQbGF0Zm9ybXM9ImZhbHNlIiBpbmNsdWRlTW9kZT0icGxhbm5lciIgaW5jbHVkZVNvdXJjZT0idHJ1ZSIgdHlwZT0iSW5zdGFsbGFibGVVbml0Ij4KKzx1bml0IGlkPSJvcmcuYXBhY2hlLmNvbW1vbnMubWF0aCIgdmVyc2lvbj0iMi4xLjAudjIwMTEwNTIxMDY1MiIvPgorPHVuaXQgaWQ9Im9yZy5hcGFjaGUuY29tbW9ucy5tYXRoLnNvdXJjZSIgdmVyc2lvbj0iMi4xLjAudjIwMTEwNTIxMDY1MiIvPgorPHJlcG9zaXRvcnkgbG9jYXRpb249Imh0dHA6Ly9kb3dubG9hZC5lY2xpcHNlLm9yZy90b29scy9vcmJpdC9kb3dubG9hZHMvZHJvcHMvUjIwMTEwNTIzMTgyNDU4L3JlcG9zaXRvcnkvIi8+Cis8L2xvY2F0aW9uPgorPGxvY2F0aW9uIGluY2x1ZGVBbGxQbGF0Zm9ybXM9ImZhbHNlIiBpbmNsdWRlTW9kZT0icGxhbm5lciIgaW5jbHVkZVNvdXJjZT0idHJ1ZSIgdHlwZT0iSW5zdGFsbGFibGVVbml0Ij4KKzx1bml0IGlkPSJvcmcuZWNsaXBzZS5zZGsuaWRlIiB2ZXJzaW9uPSIzLjYuMi5NMjAxMTAyMTAtMTIwMCIvPgorPHJlcG9zaXRvcnkgbG9jYXRpb249Imh0dHA6Ly9kb3dubG9hZC5lY2xpcHNlLm9yZy9lY2xpcHNlL3VwZGF0ZXMvMy42Ii8+Cis8L2xvY2F0aW9uPgorPC9sb2NhdGlvbnM+Cis8L3RhcmdldD4KZGlmZiAtLWdpdCBhL3JlbGVuZy9vcmcuZWNsaXBzZS5zdGVtLnJlbGVuZy50YXJnZXRwbGF0Zm9ybXMvU1RFTS1FY2xpcHNlMzcudGFyZ2V0IGIvcmVsZW5nL29yZy5lY2xpcHNlLnN0ZW0ucmVsZW5nLnRhcmdldHBsYXRmb3Jtcy9TVEVNLUVjbGlwc2UzNy50YXJnZXQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTY2ZTFhYQotLS0gL2Rldi9udWxsCisrKyBiL3JlbGVuZy9vcmcuZWNsaXBzZS5zdGVtLnJlbGVuZy50YXJnZXRwbGF0Zm9ybXMvU1RFTS1FY2xpcHNlMzcudGFyZ2V0CkBAIC0wLDAgKzEsMjIgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04IiBzdGFuZGFsb25lPSJubyI/PgorPD9wZGUgdmVyc2lvbj0iMy42Ij8+CisKKzx0YXJnZXQgbmFtZT0iU1RFTS1FY2xpcHNlMzciIHNlcXVlbmNlTnVtYmVyPSIyIj4KKzxsb2NhdGlvbnM+Cis8bG9jYXRpb24gaW5jbHVkZUFsbFBsYXRmb3Jtcz0iZmFsc2UiIGluY2x1ZGVNb2RlPSJwbGFubmVyIiBpbmNsdWRlU291cmNlPSJ0cnVlIiB0eXBlPSJJbnN0YWxsYWJsZVVuaXQiPgorPHVuaXQgaWQ9Im9yZy5lY2xpcHNlLmJpcnQuZmVhdHVyZS5ncm91cCIgdmVyc2lvbj0iMy43LjAudjIwMTEwNjAzLUJERjlFN0FHVHp1SGZuZ3otOEEwOFd2V0R2OHYiLz4KKzx1bml0IGlkPSJvcmcuZWNsaXBzZS5lbWYuc2RrLmZlYXR1cmUuZ3JvdXAiIHZlcnNpb249IjIuNy4wLnYyMDExMDYwNi0wOTQ5Ii8+Cis8dW5pdCBpZD0ib3JnLmVjbGlwc2UuemVzdC5zZGsuZmVhdHVyZS5ncm91cCIgdmVyc2lvbj0iMS4zLjAudjIwMTEwNDI1LTIwNTAtNjdDLThDT01ORUFLUVRLR1BXVFFUWWhVTjhaUSIvPgorPHJlcG9zaXRvcnkgbG9jYXRpb249Imh0dHA6Ly9kb3dubG9hZC5lY2xpcHNlLm9yZy9yZWxlYXNlcy9pbmRpZ28iLz4KKzwvbG9jYXRpb24+Cis8bG9jYXRpb24gaW5jbHVkZUFsbFBsYXRmb3Jtcz0iZmFsc2UiIGluY2x1ZGVNb2RlPSJwbGFubmVyIiBpbmNsdWRlU291cmNlPSJ0cnVlIiB0eXBlPSJJbnN0YWxsYWJsZVVuaXQiPgorPHVuaXQgaWQ9Im9yZy5lY2xpcHNlLnNkay5pZGUiIHZlcnNpb249IjMuNy4wLkkyMDExMDYxMy0xNzM2Ii8+Cis8cmVwb3NpdG9yeSBsb2NhdGlvbj0iaHR0cDovL2Rvd25sb2FkLmVjbGlwc2Uub3JnL2VjbGlwc2UvdXBkYXRlcy8zLjciLz4KKzwvbG9jYXRpb24+Cis8bG9jYXRpb24gaW5jbHVkZUFsbFBsYXRmb3Jtcz0iZmFsc2UiIGluY2x1ZGVNb2RlPSJwbGFubmVyIiBpbmNsdWRlU291cmNlPSJ0cnVlIiB0eXBlPSJJbnN0YWxsYWJsZVVuaXQiPgorPHVuaXQgaWQ9Im9yZy5hcGFjaGUuY29tbW9ucy5tYXRoIiB2ZXJzaW9uPSIyLjEuMC52MjAxMTA1MjEwNjUyIi8+Cis8dW5pdCBpZD0ib3JnLmFwYWNoZS5jb21tb25zLm1hdGguc291cmNlIiB2ZXJzaW9uPSIyLjEuMC52MjAxMTA1MjEwNjUyIi8+Cis8cmVwb3NpdG9yeSBsb2NhdGlvbj0iaHR0cDovL2Rvd25sb2FkLmVjbGlwc2Uub3JnL3Rvb2xzL29yYml0L2Rvd25sb2Fkcy9kcm9wcy9SMjAxMTA1MjMxODI0NTgvcmVwb3NpdG9yeS8iLz4KKzwvbG9jYXRpb24+Cis8L2xvY2F0aW9ucz4KKzwvdGFyZ2V0PgpkaWZmIC0tZ2l0IGEvcmVsZW5nL29yZy5lY2xpcHNlLnN0ZW0ucmVsZW5nLnRhcmdldHBsYXRmb3Jtcy9idWNrbWluc3Rlci5jc3BlYyBiL3JlbGVuZy9vcmcuZWNsaXBzZS5zdGVtLnJlbGVuZy50YXJnZXRwbGF0Zm9ybXMvYnVja21pbnN0ZXIuY3NwZWMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWM2MjExOQotLS0gL2Rldi9udWxsCisrKyBiL3JlbGVuZy9vcmcuZWNsaXBzZS5zdGVtLnJlbGVuZy50YXJnZXRwbGF0Zm9ybXMvYnVja21pbnN0ZXIuY3NwZWMKQEAgLTAsMCArMSBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz48Y3M6Y3NwZWMgeG1sbnM6Y3M9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvYnVja21pbnN0ZXIvQ1NwZWMtMS4wIiBuYW1lPSJvcmcuZWNsaXBzZS5zdGVtLnJlbGVuZy50YXJnZXRwbGF0Zm9ybXMiIGNvbXBvbmVudFR5cGU9ImJ1Y2ttaW5zdGVyIiB2ZXJzaW9uPSIxLjAuMCIvPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3JlbGVuZy9vcmcuZWNsaXBzZS5zdGVtLnJlbGVuZy51cGRhdGVzaXRlLy5wcm9qZWN0IGIvcmVsZW5nL29yZy5lY2xpcHNlLnN0ZW0ucmVsZW5nLnVwZGF0ZXNpdGUvLnByb2plY3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTdlMmUzZAotLS0gL2Rldi9udWxsCisrKyBiL3JlbGVuZy9vcmcuZWNsaXBzZS5zdGVtLnJlbGVuZy51cGRhdGVzaXRlLy5wcm9qZWN0CkBAIC0wLDAgKzEsMTcgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8cHJvamVjdERlc2NyaXB0aW9uPgorCTxuYW1lPm9yZy5lY2xpcHNlLnN0ZW0ucmVsZW5nLnVwZGF0ZXNpdGU8L25hbWU+CisJPGNvbW1lbnQ+PC9jb21tZW50PgorCTxwcm9qZWN0cz4KKwk8L3Byb2plY3RzPgorCTxidWlsZFNwZWM+CisJCTxidWlsZENvbW1hbmQ+CisJCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuVXBkYXRlU2l0ZUJ1aWxkZXI8L25hbWU+CisJCQk8YXJndW1lbnRzPgorCQkJPC9hcmd1bWVudHM+CisJCTwvYnVpbGRDb21tYW5kPgorCTwvYnVpbGRTcGVjPgorCTxuYXR1cmVzPgorCQk8bmF0dXJlPm9yZy5lY2xpcHNlLnBkZS5VcGRhdGVTaXRlTmF0dXJlPC9uYXR1cmU+CisJPC9uYXR1cmVzPgorPC9wcm9qZWN0RGVzY3JpcHRpb24+CmRpZmYgLS1naXQgYS9yZWxlbmcvb3JnLmVjbGlwc2Uuc3RlbS5yZWxlbmcudXBkYXRlc2l0ZS9hZGRvbnMvc2l0ZS54bWwgYi9yZWxlbmcvb3JnLmVjbGlwc2Uuc3RlbS5yZWxlbmcudXBkYXRlc2l0ZS9hZGRvbnMvc2l0ZS54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDViMTY3OAotLS0gL2Rldi9udWxsCisrKyBiL3JlbGVuZy9vcmcuZWNsaXBzZS5zdGVtLnJlbGVuZy51cGRhdGVzaXRlL2FkZG9ucy9zaXRlLnhtbApAQCAtMCwwICsxLDQ3IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPHNpdGU+CisgICA8ZGVzY3JpcHRpb24gbmFtZT0iU1RFTSBBZGQtb25zIiB1cmw9Imh0dHA6Ly9kb3dubG9hZC5lY2xpcHNlLm9yZy9zdGVtL3VwZGF0ZS1zaXRlL2FkZG9ucy8iPgorICAgICAgRG93bmxvYWRhYmxlIGFkZC1vbnMgZm9yIFNURU0sIGluY2x1ZGluZyBleHRyYSBkYXRhLgorICAgPC9kZXNjcmlwdGlvbj4KKyAgIDxmZWF0dXJlIHVybD0iZmVhdHVyZXMvb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS5lYXJ0aHNjaWVuY2UuZmVhdHVyZV8yLjAuMC5qYXIiIGlkPSJvcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5LmVhcnRoc2NpZW5jZS5mZWF0dXJlIiB2ZXJzaW9uPSIyLjAuMCI+CisgICAgICA8Y2F0ZWdvcnkgbmFtZT0ib3JnLmVjbGlwc2Uuc3RlbS5kYXRhIi8+CisgICA8L2ZlYXR1cmU+CisgICA8ZmVhdHVyZSB1cmw9ImZlYXR1cmVzL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkuZWFydGhzY2llbmNlLjIwMDAuZmVhdHVyZV8yLjAuMC5qYXIiIGlkPSJvcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5LmVhcnRoc2NpZW5jZS4yMDAwLmZlYXR1cmUiIHZlcnNpb249IjIuMC4wIj4KKyAgICAgIDxjYXRlZ29yeSBuYW1lPSJvcmcuZWNsaXBzZS5zdGVtLmRhdGEiLz4KKyAgIDwvZmVhdHVyZT4KKyAgIDxmZWF0dXJlIHVybD0iZmVhdHVyZXMvb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS5lYXJ0aHNjaWVuY2UuMjAwMS5mZWF0dXJlXzIuMC4wLmphciIgaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkuZWFydGhzY2llbmNlLjIwMDEuZmVhdHVyZSIgdmVyc2lvbj0iMi4wLjAiPgorICAgICAgPGNhdGVnb3J5IG5hbWU9Im9yZy5lY2xpcHNlLnN0ZW0uZGF0YSIvPgorICAgPC9mZWF0dXJlPgorICAgPGZlYXR1cmUgdXJsPSJmZWF0dXJlcy9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5LmVhcnRoc2NpZW5jZS4yMDAyLmZlYXR1cmVfMi4wLjAuamFyIiBpZD0ib3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS5lYXJ0aHNjaWVuY2UuMjAwMi5mZWF0dXJlIiB2ZXJzaW9uPSIyLjAuMCI+CisgICAgICA8Y2F0ZWdvcnkgbmFtZT0ib3JnLmVjbGlwc2Uuc3RlbS5kYXRhIi8+CisgICA8L2ZlYXR1cmU+CisgICA8ZmVhdHVyZSB1cmw9ImZlYXR1cmVzL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkuZWFydGhzY2llbmNlLjIwMDMuZmVhdHVyZV8yLjAuMC5qYXIiIGlkPSJvcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5LmVhcnRoc2NpZW5jZS4yMDAzLmZlYXR1cmUiIHZlcnNpb249IjIuMC4wIj4KKyAgICAgIDxjYXRlZ29yeSBuYW1lPSJvcmcuZWNsaXBzZS5zdGVtLmRhdGEiLz4KKyAgIDwvZmVhdHVyZT4KKyAgIDxmZWF0dXJlIHVybD0iZmVhdHVyZXMvb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS5lYXJ0aHNjaWVuY2UuMjAwNC5mZWF0dXJlXzIuMC4wLmphciIgaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkuZWFydGhzY2llbmNlLjIwMDQuZmVhdHVyZSIgdmVyc2lvbj0iMi4wLjAiPgorICAgICAgPGNhdGVnb3J5IG5hbWU9Im9yZy5lY2xpcHNlLnN0ZW0uZGF0YSIvPgorICAgPC9mZWF0dXJlPgorICAgPGZlYXR1cmUgdXJsPSJmZWF0dXJlcy9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5LmVhcnRoc2NpZW5jZS4yMDA1LmZlYXR1cmVfMi4wLjAuamFyIiBpZD0ib3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS5lYXJ0aHNjaWVuY2UuMjAwNS5mZWF0dXJlIiB2ZXJzaW9uPSIyLjAuMCI+CisgICAgICA8Y2F0ZWdvcnkgbmFtZT0ib3JnLmVjbGlwc2Uuc3RlbS5kYXRhIi8+CisgICA8L2ZlYXR1cmU+CisgICA8ZmVhdHVyZSB1cmw9ImZlYXR1cmVzL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkuZWFydGhzY2llbmNlLjIwMDYuZmVhdHVyZV8yLjAuMC5qYXIiIGlkPSJvcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5LmVhcnRoc2NpZW5jZS4yMDA2LmZlYXR1cmUiIHZlcnNpb249IjIuMC4wIj4KKyAgICAgIDxjYXRlZ29yeSBuYW1lPSJvcmcuZWNsaXBzZS5zdGVtLmRhdGEiLz4KKyAgIDwvZmVhdHVyZT4KKyAgIDxmZWF0dXJlIHVybD0iZmVhdHVyZXMvb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS5lYXJ0aHNjaWVuY2UuMjAwNy5mZWF0dXJlXzIuMC4wLmphciIgaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkuZWFydGhzY2llbmNlLjIwMDcuZmVhdHVyZSIgdmVyc2lvbj0iMi4wLjAiPgorICAgICAgPGNhdGVnb3J5IG5hbWU9Im9yZy5lY2xpcHNlLnN0ZW0uZGF0YSIvPgorICAgPC9mZWF0dXJlPgorICAgPGZlYXR1cmUgdXJsPSJmZWF0dXJlcy9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5LmVhcnRoc2NpZW5jZS4yMDA4LmZlYXR1cmVfMi4wLjAuamFyIiBpZD0ib3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS5lYXJ0aHNjaWVuY2UuMjAwOC5mZWF0dXJlIiB2ZXJzaW9uPSIyLjAuMCI+CisgICAgICA8Y2F0ZWdvcnkgbmFtZT0ib3JnLmVjbGlwc2Uuc3RlbS5kYXRhIi8+CisgICA8L2ZlYXR1cmU+CisgICA8ZmVhdHVyZSB1cmw9ImZlYXR1cmVzL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkuZWFydGhzY2llbmNlLjIwMDkuZmVhdHVyZV8yLjAuMC5qYXIiIGlkPSJvcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5LmVhcnRoc2NpZW5jZS4yMDA5LmZlYXR1cmUiIHZlcnNpb249IjIuMC4wIj4KKyAgICAgIDxjYXRlZ29yeSBuYW1lPSJvcmcuZWNsaXBzZS5zdGVtLmRhdGEiLz4KKyAgIDwvZmVhdHVyZT4KKyAgIDxmZWF0dXJlIHVybD0iZmVhdHVyZXMvb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS5lYXJ0aHNjaWVuY2UuMjAxMC5mZWF0dXJlXzIuMC4wLmphciIgaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkuZWFydGhzY2llbmNlLjIwMTAuZmVhdHVyZSIgdmVyc2lvbj0iMi4wLjAiPgorICAgICAgPGNhdGVnb3J5IG5hbWU9Im9yZy5lY2xpcHNlLnN0ZW0uZGF0YSIvPgorICAgPC9mZWF0dXJlPgorICAgPGNhdGVnb3J5LWRlZiBuYW1lPSJvcmcuZWNsaXBzZS5zdGVtLmRhdGEiIGxhYmVsPSJTVEVNIERlbm9taW5hdG9yIERhdGEiPgorICAgICAgPGRlc2NyaXB0aW9uPgorICAgICAgICAgQWRkaXRpb25hbCBkZW5vbWluYXRvciBkYXRhIGZvciB1c2UgaW4gU1RFTQorICAgICAgPC9kZXNjcmlwdGlvbj4KKyAgIDwvY2F0ZWdvcnktZGVmPgorPC9zaXRlPgpkaWZmIC0tZ2l0IGEvcmVsZW5nL29yZy5lY2xpcHNlLnN0ZW0ucmVsZW5nLnVwZGF0ZXNpdGUvY29tcG9zaXRlQXJ0aWZhY3RzLmphciBiL3JlbGVuZy9vcmcuZWNsaXBzZS5zdGVtLnJlbGVuZy51cGRhdGVzaXRlL2NvbXBvc2l0ZUFydGlmYWN0cy5qYXIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWQ3NmFkNgotLS0gL2Rldi9udWxsCisrKyBiL3JlbGVuZy9vcmcuZWNsaXBzZS5zdGVtLnJlbGVuZy51cGRhdGVzaXRlL2NvbXBvc2l0ZUFydGlmYWN0cy5qYXIKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcmVsZW5nL29yZy5lY2xpcHNlLnN0ZW0ucmVsZW5nLnVwZGF0ZXNpdGUvY29tcG9zaXRlQ29udGVudC5qYXIgYi9yZWxlbmcvb3JnLmVjbGlwc2Uuc3RlbS5yZWxlbmcudXBkYXRlc2l0ZS9jb21wb3NpdGVDb250ZW50LmphcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNmI4ZWQ0Ci0tLSAvZGV2L251bGwKKysrIGIvcmVsZW5nL29yZy5lY2xpcHNlLnN0ZW0ucmVsZW5nLnVwZGF0ZXNpdGUvY29tcG9zaXRlQ29udGVudC5qYXIKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcmVsZW5nL29yZy5lY2xpcHNlLnN0ZW0ucmVsZW5nLy5wcm9qZWN0IGIvcmVsZW5nL29yZy5lY2xpcHNlLnN0ZW0ucmVsZW5nLy5wcm9qZWN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ1NDdjNTkKLS0tIC9kZXYvbnVsbAorKysgYi9yZWxlbmcvb3JnLmVjbGlwc2Uuc3RlbS5yZWxlbmcvLnByb2plY3QKQEAgLTAsMCArMSwxMSBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxwcm9qZWN0RGVzY3JpcHRpb24+CisJPG5hbWU+b3JnLmVjbGlwc2Uuc3RlbS5yZWxlbmc8L25hbWU+CisJPGNvbW1lbnQ+PC9jb21tZW50PgorCTxwcm9qZWN0cz4KKwk8L3Byb2plY3RzPgorCTxidWlsZFNwZWM+CisJPC9idWlsZFNwZWM+CisJPG5hdHVyZXM+CisJPC9uYXR1cmVzPgorPC9wcm9qZWN0RGVzY3JpcHRpb24+CmRpZmYgLS1naXQgYS9yZWxlbmcvb3JnLmVjbGlwc2Uuc3RlbS5yZWxlbmcvQ29uZmlnRmVhdHVyZS9hbGxFbGVtZW50cy54bWwgYi9yZWxlbmcvb3JnLmVjbGlwc2Uuc3RlbS5yZWxlbmcvQ29uZmlnRmVhdHVyZS9hbGxFbGVtZW50cy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzVmODA0OAotLS0gL2Rldi9udWxsCisrKyBiL3JlbGVuZy9vcmcuZWNsaXBzZS5zdGVtLnJlbGVuZy9Db25maWdGZWF0dXJlL2FsbEVsZW1lbnRzLnhtbApAQCAtMCwwICsxLDQ5IEBACis8cHJvamVjdCBuYW1lPSJhbGxFbGVtZW50cyBEZWxlZ2F0b3IiPgorCTxwcm9wZXJ0eSBuYW1lPSJkZWZhdWx0QXNzZW1ibHlFbmFibGVkIiB2YWx1ZT0idHJ1ZSIgLz4KKwkKKyAJPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gCS0tPgorIAk8IS0tIFJ1biBhIGdpdmVuICR7dGFyZ2V0fSBvbiBhbGwgZWxlbWVudHMgYmVpbmcgYnVpbHQJCQkJCQktLT4KKwk8IS0tIFJlcGxhY2UgZWxlbWVudC5pZCB3aXRoIHRoZSBpZCBvZiB0aGUgdG9wIGxldmVsIGVsZW1lbnQgYmVpbmcgYnVpbHQuICAgIC0tPgorCTwhLS0gSWYgZWxlbWVudC5pZCBkb2VzIG5vdCBleGlzdCBpbiAke2J1aWxkRGlyZWN0b3J5fS9mZWF0dXJlcy9lbGVtZW50LmlkICAgLS0+CisJPCEtLSBvciAke2Jhc2VMb2NhdGlvbn0vZmVhdHVyZXMvZWxlbWVudC5pZCwgdGhlbiB5b3UgbXVzdCBwcm92aWRlIHRoZSAgICAgICAtLT4KKwk8IS0tIGxvY2F0aW9uIGJ5IHNldHRpbmcgdGhlIHByb3BlcnR5ICJwbHVnaW5QYXRoIiAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPgorCTwhLS0gQWRkIG9uIDxhbnQ+IHRhc2sgZm9yIGVhY2ggdG9wIGxldmVsIGVsZW1lbnQgYmVpbmcgYnVpbHQuICAgICAgICAgICAgIC0tPgorIAk8IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAJLS0+CisgCTx0YXJnZXQgbmFtZT0iYWxsRWxlbWVudHNEZWxlZ2F0b3IiPgorIAkJPGFudCBhbnRmaWxlPSIke2dlbmVyaWNUYXJnZXRzfSIgdGFyZ2V0PSIke3RhcmdldH0iPgorCSAJCTxwcm9wZXJ0eSBuYW1lPSJ0eXBlIiB2YWx1ZT0iJHt0b3BMZXZlbEVsZW1lbnRUeXBlfSIgLz4KKwkgCQk8cHJvcGVydHkgbmFtZT0iaWQiIHZhbHVlPSIke3RvcExldmVsRWxlbWVudElkfSIgLz4KKyAJCTwvYW50PgorIAk8L3RhcmdldD4KKyAKKwk8IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+CisJPCEtLSAgVGhlIGRlZmF1bHQgYXNzZW1ibGUgdGFyZ2V0LCB0aGlzIHdpbGwgYmUgY2FsbGVkIHRvIGFzc2VtYmxlIGVhY2gJCS0tPgkgCisJPCEtLSAgY29uZmlnIGlmIGEgY3VzdG9tIGFzc2VtYmxlIHRhcmdldCBpcyBub3QgZGVmaW5lZC4JCQkJCS0tPgorCTwhLS0gVGhlIGZvbGxvd2luZyBwcm9wZXJ0aWVzIHdpbGwgYmUgZGVmaW5lZDoJCQkJCQkJCS0tPgorCTwhLS0gCQljb25maWcgOiBUaGUgY29uZmlndXJhdGlvbiBiZWluZyBhc3NlbWJsZWQgZWcgIndpbjMyLndpbjMyLng4NiIJLS0+CisJPCEtLSAJCWVsZW1lbnQ6IFRoZSBlbGVtZW50IGJlaW5nIGFzc2VtYmxlZCBlZyAib3JnLmVjbGlwc2Uuc2RrIgkJLS0+CisJPCEtLSAJCWFzc2VtYmxlU2NyaXB0TmFtZTogVGhlIGFzc2VtYmxlIHNjcmlwdCB0byBiZSBjYWxsZWQJCQktLT4KKwk8IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+CisJPHRhcmdldCBuYW1lPSJkZWZhdWx0QXNzZW1ibGUiPgorCQk8YW50IGFudGZpbGU9IiR7YXNzZW1ibGVTY3JpcHROYW1lfSIgZGlyPSIke2J1aWxkRGlyZWN0b3J5fSIgLz4KKwk8L3RhcmdldD4JCisJCisgCTwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CS0tPgorIAk8IS0tIEN1c3RvbSB0YXJnZXRzIHRvIGFzc2VtYmxlIHRoZSBidWlsdCBlbGVtZW50cyBmb3IgcGFydGljdWxhciAJCQktLT4KKyAJPCEtLSBjb25maWd1cmF0aW9ucy4gIFRoZXNlIGdlbmVyYWxseSBjYWxsIHRoZSBnZW5lcmF0ZWQgYXNzZW1ibGUgc2NyaXB0cyAJLS0+CisgCTwhLS0gKG5hbWVkIGluICAke2Fzc2VtYmxlU2NyaXB0TmFtZX0pIGJ1dCBtYXkgYWxzbyBhZGQgcHJlIGFuZCBwb3N0CQktLT4gCisgCTwhLS0gcHJvY2Vzc2luZyAgICAgIAkJCQkJCQkJCQkJCQkJLS0+CisgCTwhLS0gQWRkIG9uZSB0YXJnZXQgZm9yIGVhY2ggcm9vdCBlbGVtZW50IGFuZCBlYWNoIGNvbmZpZ3VyYXRpb24gZm9yIHdoaWNoCS0tPiAKKyAJPCEtLSBjdXN0b20gcHJvY2Vzc2luZyBpcyBkZXNpcmVkLiBSZXBsYWNlIGVsZW1lbnQuaWQgd2l0aCB0aGUgaWQgb2YgdGhlIAktLT4KKyAJPCEtLSB0b3AgbGV2ZWwgZWxlbWVudCBiZWluZyBidWlsdC4gIEEgcHJvcGVydHkgd2l0aCBhIG1hdGNoaW5nIG5hbWUgbXVzdCAJLS0+CisgCTwhLS0gYmUgZGVmaW5lZCBmb3IgdGhpcyBjdXN0b20gdGFyZ2V0IHRvIGJlIGNhbGxlZCBpbnN0ZWFkIG9mIHRoZSAJCQktLT4KKyAJPCEtLSBkZWZhdWx0QXNzZW1ibGUgdGFyZ2V0IGFib3ZlLgkJCQkJCQkJCQkJLS0+CisJPCEtLQlFeGFtcGxlOiAgbmFtZT0iYXNzZW1ibGUub3JnLmVjbGlwc2Uuc2RrIgkJCQkJCQktLT4KKwk8IS0tCUV4YW1wbGU6ICBuYW1lPSJhc3NlbWJsZS5vcmcuZWNsaXBzZS5zZGsud2luMzIud2luMzIueDg2IgkJCS0tPgorIAk8IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+CisJPHByb3BlcnR5IG5hbWU9ImFzc2VtYmxlLm9yZy5lY2xpcHNlLnN0ZW0uZmVhdHVyZS53aW4zMi53aW4zMi54ODYiIHZhbHVlPSJ0cnVlIiAvPgorIAk8dGFyZ2V0IG5hbWU9ImFzc2VtYmxlLm9yZy5lY2xpcHNlLnN0ZW0uZmVhdHVyZS53aW4zMi53aW4zMi54ODYiPgorIAkJPGFudCBhbnRmaWxlPSIke2Fzc2VtYmxlU2NyaXB0TmFtZX0iIGRpcj0iJHtidWlsZERpcmVjdG9yeX0iLz4KKyAJPC90YXJnZXQ+CisJCis8L3Byb2plY3Q+CmRpZmYgLS1naXQgYS9yZWxlbmcvb3JnLmVjbGlwc2Uuc3RlbS5yZWxlbmcvQ29uZmlnRmVhdHVyZS9idWlsZC5wcm9wZXJ0aWVzIGIvcmVsZW5nL29yZy5lY2xpcHNlLnN0ZW0ucmVsZW5nL0NvbmZpZ0ZlYXR1cmUvYnVpbGQucHJvcGVydGllcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NjQzNWE2Ci0tLSAvZGV2L251bGwKKysrIGIvcmVsZW5nL29yZy5lY2xpcHNlLnN0ZW0ucmVsZW5nL0NvbmZpZ0ZlYXR1cmUvYnVpbGQucHJvcGVydGllcwpAQCAtMCwwICsxLDI0OCBAQAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBDb3B5cmlnaHQgKGMpIDIwMDMsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisjIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisjIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisjIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisjIAorIyBDb250cmlidXRvcnM6CisjICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBQYXJhbWV0ZXJzIGRlc2NyaWJpbmcgaG93IGFuZCB3aGVyZSB0byBleGVjdXRlIHRoZSBidWlsZC4KKyMgVHlwaWNhbCB1c2VycyBuZWVkIG9ubHkgdXBkYXRlIHRoZSBmb2xsb3dpbmcgcHJvcGVydGllczoKKyMgICAgYmFzZUxvY2F0aW9uIC0gd2hlcmUgdGhpbmdzIHlvdSBhcmUgYnVpbGRpbmcgYWdhaW5zdCBhcmUgaW5zdGFsbGVkCisjICAgIGJvb3RjbGFzc3BhdGggLSBUaGUgYmFzZSBqYXJzIHRvIGNvbXBpbGUgYWdhaW5zdCAodHlwaWNhbHkgcnQuamFyKQorIyAgICBjb25maWdzIC0gdGhlIGxpc3Qgb2Yge29zLCB3cywgYXJjaH0gY29uZmlndXJhdGlvbnMgdG8gYnVpbGQuICAKKyMKKyMgT2YgY291cnNlIGFueSBvZiB0aGUgc2V0dGluZ3MgaGVyZSBjYW4gYmUgb3ZlcnJpZGRlbiBieSBzcGVjJ2luZyAKKyMgdGhlbSBvbiB0aGUgY29tbWFuZCBsaW5lIChlLmcuLCAtRGJhc2VMb2NhdGlvbj1kOi9lY2xpcHNlCisKKyNUaGUgdHlwZSBvZiB0aGUgdG9wIGxldmVsIGVsZW1lbnQgd2UgYXJlIGJ1aWxkaW5nLCAgZ2VuZXJhbGx5ICJmZWF0dXJlIgordG9wTGV2ZWxFbGVtZW50VHlwZSA9IGZlYXR1cmUKKyNUaGUgaWQgb2YgdGhlIHRvcCBsZXZlbCBlbGVtZW50IHdlIGFyZSBidWlsZGluZwordG9wTGV2ZWxFbGVtZW50SWQgPSBvcmcuZWNsaXBzZS5zdGVtLmZlYXR1cmUKKworIyMjIyMjIyMjIyMjIyBQUk9EVUNUL1BBQ0tBR0lORyBDT05UUk9MICMjIyMjIyMjIyMjIyMKKyNwcm9kdWN0PW9yZy5lY2xpcHNlLnN0ZW0udWkvc3RlbS5wcm9kdWN0CitydW5QYWNrYWdlcj1mYWxzZQorCisjU2V0IHRoZSBuYW1lIG9mIHRoZSBhcmNoaXZlIHRoYXQgd2lsbCByZXN1bHQgZnJvbSB0aGUgcHJvZHVjdCBidWlsZC4KKyNhcmNoaXZlTmFtZVByZWZpeD0KKworIyBUaGUgcHJlZml4IHRoYXQgd2lsbCBiZSB1c2VkIGluIHRoZSBnZW5lcmF0ZWQgYXJjaGl2ZS4KK2FyY2hpdmVQcmVmaXg9c3RlbQorCisjIFRoZSBsb2NhdGlvbiB1bmRlcndoaWNoIGFsbCBvZiB0aGUgYnVpbGQgb3V0cHV0IHdpbGwgYmUgY29sbGVjdGVkLgorY29sbGVjdGluZ0ZvbGRlcj0ke2FyY2hpdmVQcmVmaXh9CisKKworCitwMi5nYXRoZXJpbmcgPSB0cnVlCitnZW5lcmF0ZS5wMi5tZXRhZGF0YSA9IHRydWUKK3AyLm1ldGFkYXRhLnJlcG8gPSBmaWxlOi8vJHtidWlsZERpcmVjdG9yeX0vcmVwbworcDIuYXJ0aWZhY3QucmVwbyA9IGZpbGU6Ly8ke2J1aWxkRGlyZWN0b3J5fS9yZXBvCitwMi5mbGF2b3IgPSB0b29saW5nCitwMi5wdWJsaXNoLmFydGlmYWN0cyA9IHRydWUKK3AyLmRpcmVjdG9yLnByb2ZpbGU9U1RFTVByb2ZpbGUKKyNwMi5jYXRlZ29yeS5zaXRlPWZpbGU6Ly8ke2J1aWxkRGlyZWN0b3J5fS9zaXRlLnhtbAorCisKKyMgVGhlIGxpc3Qgb2Yge29zLCB3cywgYXJjaH0gY29uZmlndXJhdGlvbnMgdG8gYnVpbGQuICBUaGlzIAorIyB2YWx1ZSBpcyBhICcmJyBzZXBhcmF0ZWQgbGlzdCBvZiAnLCcgc2VwYXJhdGUgdHJpcGxlcy4gIEZvciBleGFtcGxlLCAKKyMgICAgIGNvbmZpZ3M9d2luMzIsd2luMzIseDg2ICYgbGludXgsbW90aWYseDg2CisjIEJ5IGRlZmF1bHQgdGhlIHZhbHVlIGlzICosKiwqCisjY29uZmlncyA9ICosICosICoKKyNjb25maWdzPXdpbjMyLCB3aW4zMiwgeDg2ICYgd2luMzIsIHdpbjMyLCB4ODZfNjQgJiBtYWNvc3gsIGNvY29hLCB4ODYgJiBtYWNvc3gsIGNvY29hLCB4ODZfNjQgJiBsaW51eCwgZ3RrLCB4ODYgJiBsaW51eCwgZ3RrLCB4ODZfNjQgJiBsaW51eCwgZ3RrLCBwcGM2NAorI2NvbmZpZ3M9bWFjb3N4LCBjb2NvYSwgeDg2CisKKworCisjCXdpbjMyLCB3aW4zMiwgeDg2ICYgXAorIwlsaW51eCwgZ3RrLCBwcGMgJlwKKyMgbGludXgsIGd0aywgeDg2ICYgXAorIwlsaW51eCwgZ3RrLCB4ODZfNjQgJiBcCisjCWxpbnV4LCBtb3RpZiwgeDg2ICYgXAorIwlzb2xhcmlzLCBtb3RpZiwgc3BhcmMgJiBcCisjCXNvbGFyaXMsIGd0aywgc3BhcmMgJiBcCisjCWFpeCwgbW90aWYsIHBwYyAmIFwKKyMJaHB1eCwgbW90aWYsIFBBX1JJU0MgJiBcCisjCW1hY29zeCwgY29jb2EsIHg4NiAmIFwKKyMJbWFjb3N4LCBjYXJib24sIHBwYworCisjIEJ5IGRlZmF1bHQgUERFIGNyZWF0ZXMgb25lIGFyY2hpdmUgKHJlc3VsdCkgcGVyIGVudHJ5IGxpc3RlZCBpbiB0aGUgY29uZmlncyBwcm9wZXJ0eS4KKyMgU2V0dGluZyB0aGlzIHZhbHVlIHRvIHRydWUgd2lsbCBjYXVzZSBQREUgdG8gb25seSBjcmVhdGUgb25lIG91dHB1dCBjb250YWluaW5nIGFsbCAKKyMgYXJ0aWZhY3RzIGZvciBhbGwgdGhlIHBsYXRmb3JtcyBsaXN0ZWQgaW4gdGhlIGNvbmZpZ3MgcHJvcGVydHkuCisjIFRvIGNvbnRyb2wgdGhlIG91dHB1dCBmb3JtYXQgZm9yIHRoZSBncm91cCwgYWRkIGEgImdyb3VwLCBncm91cCwgZ3JvdXAgLSA8Zm9ybWF0PiIgZW50cnkgdG8gdGhlCisjIGFyY2hpdmVzRm9ybWF0LiAKKyNncm91cENvbmZpZ3VyYXRpb25zPXRydWUKKworI1RoZSBmb3JtYXQgb2YgdGhlIGFyY2hpdmUuIEJ5IGRlZmF1bHQgYSB6aXAgaXMgY3JlYXRlZCB1c2luZyBhbnRaaXAuCisjVGhlIGxpc3QgY2FuIG9ubHkgY29udGFpbiB0aGUgY29uZmlndXJhdGlvbiBmb3Igd2hpY2ggdGhlIGRlc2lyZWQgZm9ybWF0IGlzIGRpZmZlcmVudCB0aGFuIHppcC4KKyNhcmNoaXZlc0Zvcm1hdD13aW4zMiwgd2luMzIsIHg4NiAtIGFudFppcCYgXAorIwlsaW51eCwgZ3RrLCBwcGMgLSBhbnRaaXAgJlwKKyMgICAgbGludXgsIGd0aywgeDg2IC0gYW50WmlwJiBcCisjCWxpbnV4LCBndGssIHg4Nl82NCAtIGFudFppcCYgXAorIyBsaW51eCwgbW90aWYsIHg4NiAtIGFudFppcCYgXAorIwlzb2xhcmlzLCBtb3RpZiwgc3BhcmMgLSBhbnRaaXAmIFwKKyMJc29sYXJpcywgZ3RrLCBzcGFyYyAtIGFudFppcCYgXAorIwlhaXgsIG1vdGlmLCBwcGMgLSBhbnRaaXAmIFwKKyMJaHB1eCwgbW90aWYsIFBBX1JJU0MgLSBhbnRaaXAmIFwKKyMJbWFjb3N4LCBjYXJib24sIHBwYyAtIGFudFppcAorCQorI1NldCB0byB0cnVlIGlmIHlvdSB3YW50IHRoZSBvdXRwdXQgdG8gYmUgcmVhZHkgZm9yIGFuIHVwZGF0ZSBqYXIgKG5vIHNpdGUueG1sIGdlbmVyYXRlZCkKKyNvdXRwdXRVcGRhdGVKYXJzID0gZmFsc2UKKworI1NldCB0byB0cnVlIGZvciBKbmxwIGdlbmVyYXRpb24KKyNjb2RlYmFzZSBzaG91bGQgYmUgYSBVUkwgdGhhdCB3aWxsIGJlIHVzZWQgYXMgdGhlIHJvb3Qgb2YgYWxsIHJlbGF0aXZlIFVSTHMgaW4gdGhlIG91dHB1dC4KKyNnZW5lcmF0ZUpubHA9ZmFsc2UKKyNqbmxwLmNvZGViYXNlPTxjb2RlYmFzZSB1cmw+Cisjam5scC5qMnNlPTxqMnNlIHZlcnNpb24+Cisjam5scC5sb2NhbGU9PGEgbG9jYWxlPgorI2pubHAuZ2VuZXJhdGVPZmZsaW5lQWxsb3dlZD10cnVlIG9yIGZhbHNlIGdlbmVyYXRlIDxvZmZsaW5lQWxsb3dlZC8+IGF0dHJpYnV0ZSBpbiB0aGUgZ2VuZXJhdGVkIGZlYXR1cmVzCisjam5scC5jb25maWdzPSR7Y29uZmlnc30JCQkjdW5jb21tZW50IHRvIGZpbHRlciB0aGUgY29udGVudCBvZiB0aGUgZ2VuZXJhdGVkIGpubHAgZmlsZXMgYmFzZWQgb24gdGhlIGNvbmZpZ3VyYXRpb24gYmVpbmcgYnVpbHQKKworI1NldCB0byB0cnVlIGlmIHlvdSB3YW50IHRvIHNpZ24gamFycworI3NpZ25KYXJzPWZhbHNlCisjc2lnbi5hbGlhcz08YWxpYXM+Cisjc2lnbi5rZXlzdG9yZT08a2V5c3RvcmUgbG9jYXRpb24+Cisjc2lnbi5zdG9yZXBhc3M9PGtleXN0b3JlIHBhc3N3b3JkPgorCisjQXJndW1lbnRzIHRvIHNlbmQgdG8gdGhlIHppcCBleGVjdXRhYmxlCit6aXBhcmdzPQorCisjQXJndW1lbnRzIHRvIHNlbmQgdG8gdGhlIHRhciBleGVjdXRhYmxlCit0YXJhcmdzPQorCisjQ29udHJvbCB0aGUgY3JlYXRpb24gb2YgYSBmaWxlIGNvbnRhaW5pbmcgdGhlIHZlcnNpb24gaW5jbHVkZWQgaW4gZWFjaCBjb25maWd1cmF0aW9uIC0gb24gYnkgZGVmYXVsdCAKKyNnZW5lcmF0ZVZlcnNpb25zTGlzdHM9ZmFsc2UKKworIyMjIyMjIyMjIyMjIyMgQlVJTEQgTkFNSU5HIENPTlRST0wgIyMjIyMjIyMjIyMjIyMjIworIyBUaGUgZGlyZWN0b3J5IGludG8gd2hpY2ggdGhlIGJ1aWxkIGVsZW1lbnRzIGFyZSBmZXRjaGVkIGFuZCB3aGVyZQorIyB0aGUgYnVpbGQgdGFrZXMgcGxhY2UuCitidWlsZERpcmVjdG9yeT0ke2Jhc2V9L2J1aWxkCisKKyMgVHlwZSBvZiBidWlsZC4gIFVzZWQgaW4gbmFtaW5nIHRoZSBidWlsZCBvdXRwdXQuICBUeXBpY2FsbHkgdGhpcyB2YWx1ZSBpcworIyBvbmUgb2YgSSwgTiwgTSwgUywgLi4uCitidWlsZFR5cGU9SQorCisjIElEIG9mIHRoZSBidWlsZC4gIFVzZWQgaW4gbmFtaW5nIHRoZSBidWlsZCBvdXRwdXQuCitidWlsZElkPVdlZWtseUJ1aWxkCisKKyMgTGFiZWwgZm9yIHRoZSBidWlsZC4gIFVzZWQgaW4gbmFtaW5nIHRoZSBidWlsZCBvdXRwdXQKK2J1aWxkTGFiZWw9JHtidWlsZFR5cGV9LiR7YnVpbGRJZH0KKworIyBUaW1lc3RhbXAgZm9yIHRoZSBidWlsZC4gIFVzZWQgaW4gbmFtaW5nIHRoZSBidWlsZCBvdXRwdXQKK3RpbWVzdGFtcD0ke1FVQUxJRklFUn0KKworI1RoZSB2YWx1ZSB0byBiZSB1c2VkIGZvciB0aGUgcXVhbGlmaWVyIG9mIGEgcGx1Z2luIG9yIGZlYXR1cmUgd2hlbiB5b3Ugd2FudCB0byBvdmVycmlkZSB0aGUgdmFsdWUgY29tcHV0ZWQgYnkgcGRlLgorI1RoZSB2YWx1ZSB3aWxsIG9ubHkgYmUgYXBwbGllZCB0byBwbHVnaW4gb3IgZmVhdHVyZXMgaW5kaWNhdGluZyBidWlsZC5wcm9wZXJ0aWVzLCBxdWFsaWZpZXIgPSBjb250ZXh0IAorI2ZvcmNlQ29udGV4dFF1YWxpZmllcj08dGhlIHZhbHVlIGZvciB0aGUgcXVhbGlmaWVyPgorCisjRW5hYmxlIC8gZGlzYWJsZSB0aGUgZ2VuZXJhdGlvbiBvZiBhIHN1ZmZpeCBmb3IgdGhlIGZlYXR1cmVzIHRoYXQgdXNlIC5xdWFsaWZpZXIuIAorI1RoZSBnZW5lcmF0ZWQgc3VmZml4IGlzIGNvbXB1dGVkIGFjY29yZGluZyB0byB0aGUgY29udGVudCBvZiB0aGUgZmVhdHVyZSAgIAorI2dlbmVyYXRlRmVhdHVyZVZlcnNpb25TdWZmaXg9dHJ1ZQorCisjIyMjIyMjIyMjIyMjIEJBU0UgQ09OVFJPTCAjIyMjIyMjIyMjIyMjCisjIFNldHRpbmdzIGZvciB0aGUgYmFzZSBFY2xpcHNlIGNvbXBvbmVudHMgYW5kIEphdmEgY2xhc3MgbGlicmFyaWVzIAorIyBhZ2FpbnN0IHdoaWNoIHlvdSBhcmUgYnVpbGRpbmcuCisjIEJhc2UgbG9jYXRpb24gZm9yIGFueXRoaW5nIHRoZSBidWlsZCBuZWVkcyB0byBjb21waWxlIGFnYWluc3QuICBGb3IgZXhhbXBsZSwKKyMgaW4gbW9zdCBSQ1AgYXBwIG9yIGEgcGx1Zy1pbiwgIHRoZSBiYXNlTG9jYXRpb24gc2hvdWxkIGJlIHRoZSBsb2NhdGlvbiBvZiBhIHByZXZpb3VzbHkKKyMgaW5zdGFsbGVkIEVjbGlwc2UgYWdhaW5zdCB3aGljaCB0aGUgYXBwbGljYXRpb24gb3IgcGx1Zy1pbiBjb2RlIHdpbGwgYmUgY29tcGlsZWQgYW5kIHRoZSBSQ1AgZGVsdGEgcGFjay4KKworI2Jhc2U9PHBhdGgvdG8vcGFyZW50L29mL2VjbGlwc2U+CisjYmFzZUxvY2F0aW9uPSR7YmFzZX0vZWNsaXBzZQorI09zL1dzL0FyY2gvbmwgb2YgdGhlIGVjbGlwc2Ugc3BlY2lmaWVkIGJ5IGJhc2VMb2NhdGlvbgorYmFzZW9zPXdpbjMyCitiYXNld3M9d2luMzIKK2Jhc2VhcmNoPXg4NgorCisjdGhpcyBwcm9wZXJ0eSBpbmRpY2F0ZXMgd2hldGhlciB5b3Ugd2FudCB0aGUgc2V0IG9mIHBsdWctaW5zIGFuZCBmZWF0dXJlcyB0byBiZSBjb25zaWRlcmVkIGR1cmluZyB0aGUgYnVpbGQgdG8gYmUgbGltaXRlZCB0byB0aGUgb25lcyByZWFjaGFibGUgZnJvbSB0aGUgZmVhdHVyZXMgLyBwbHVnaW5zIGJlaW5nIGJ1aWx0CitmaWx0ZXJlZERlcGVuZGVuY3lDaGVjaz1mYWxzZQorCisjdGhpcyBwcm9wZXJ0eSBpbmRpY2F0ZXMgd2hldGhlciB0aGUgcmVzb2x1dGlvbiBzaG91bGQgYmUgZG9uZSBpbiBkZXZlbG9wbWVudCBtb2RlIChpLmUuIGlnbm9yZSBtdWx0aXBsZSBidW5kbGVzIHdpdGggc2luZ2xldG9ucykKK3Jlc29sdXRpb24uZGV2TW9kZT1mYWxzZQorCisjcGx1Z2luUGF0aCBpcyBhIGxpc3Qgb2YgbG9jYXRpb25zIGluIHdoaWNoIHRvIGZpbmQgcGx1Z2lucyBhbmQgZmVhdHVyZXMuICBUaGlzIGxpc3QgaXMgc2VwYXJhdGVkIGJ5IHRoZSBwbGF0Zm9ybSBmaWxlIHNlcGFyYXRvciAoOyBvciA6KQorI2EgbG9jYXRpb24gaXMgb25lIG9mOiAgCisjLSB0aGUgbG9jYXRpb24gb2YgdGhlIGphciBvciBmb2xkZXIgdGhhdCBpcyB0aGUgcGx1Z2luIG9yIGZlYXR1cmUgOiAvcGF0aC90by9mb28uamFyIG9yIC9wYXRoL3RvL2ZvbworIy0gYSBkaXJlY3RvcnkgdGhhdCBjb250YWlucyBhIC9wbHVnaW5zIG9yIC9mZWF0dXJlcyBzdWJkaXJlY3RvcnkKKyMtIHRoZSBsb2NhdGlvbiBvZiBhIGZlYXR1cmUueG1sLCBvciBmb3IgMi4xIHN0eWxlIHBsdWdpbnMsIHRoZSBwbHVnaW4ueG1sIG9yIGZyYWdtZW50LnhtbAorI3BsdWdpblBhdGg9CisKK3NraXBCYXNlPXRydWUKK2VjbGlwc2VVUkw9PHVybCBmb3IgZWNsaXBzZSBkb3dubG9hZCBzaXRlPgorZWNsaXBzZUJ1aWxkSWQ9PElkIG9mIEVjbGlwc2UgYnVpbGQgdG8gZ2V0PgorZWNsaXBzZUJhc2VVUkw9JHtlY2xpcHNlVVJMfS9lY2xpcHNlLXBsYXRmb3JtLSR7ZWNsaXBzZUJ1aWxkSWR9LXdpbjMyLnppcAorCisKKyMjIyMjIyMjIyMjIyMgTUFQIEZJTEUgQ09OVFJPTCAjIyMjIyMjIyMjIyMjIyMjCisjIFRoaXMgc2VjdGlvbiBkZWZpbmVzIENWUyB0YWdzIHRvIHVzZSB3aGVuIGZldGNoaW5nIHRoZSBtYXAgZmlsZXMgZnJvbSB0aGUgcmVwb3NpdG9yeS4KKyMgSWYgeW91IHdhbnQgdG8gZmV0Y2ggdGhlIG1hcCBmaWxlIGZyb20gcmVwb3NpdG9yeSAvIGxvY2F0aW9uLCBjaGFuZ2UgdGhlIGdldE1hcEZpbGVzIHRhcmdldCBpbiB0aGUgY3VzdG9tVGFyZ2V0cy54bWwKKworc2tpcE1hcHM9dHJ1ZQorbWFwc1JlcG89OnBzZXJ2ZXI6YW5vbnltb3VzQGV4YW1wbGUuY29tL3BhdGgvdG8vcmVwbworbWFwc1Jvb3Q9cGF0aC90by9tYXBzCittYXBzQ2hlY2tvdXRUYWc9SEVBRAorCisjdGFnTWFwcz10cnVlCittYXBzVGFnVGFnPXYke2J1aWxkSWR9CisKKworIyMjIyMjIyMjIyMjIFJFUE9TSVRPUlkgQ09OVFJPTCAjIyMjIyMjIyMjIyMjIyMKKyMgVGhpcyBzZWN0aW9uIGRlZmluZXMgcHJvcGVydGllcyBwYXJhbWV0ZXJpemluZyB0aGUgcmVwb3NpdG9yaWVzIHdoZXJlIHBsdWdpbnMsIGZyYWdtZW50cworIyBidW5kbGVzIGFuZCBmZWF0dXJlcyBhcmUgYmVpbmcgb2J0YWluZWQgZnJvbS4gCisKKyMgVGhlIHRhZ3MgdG8gdXNlIHdoZW4gZmV0Y2hpbmcgZWxlbWVudHMgdG8gYnVpbGQuCisjIEJ5IGRlZmF1bHQgdGhlYnVpbGRlciB3aWxsIHVzZSB3aGF0ZXZlciBpcyBpbiB0aGUgbWFwcy4gIAorIyBUaGlzIHZhbHVlIHRha2VzIHRoZSBmb3JtIG9mIGEgY29tbWEgc2VwYXJhdGVkIGxpc3Qgb2YgcmVwb3NpdG9yeSBpZGVudGlmaWVyIChsaWtlIHVzZWQgaW4gdGhlIG1hcCBmaWxlcykgYW5kIHRoZSAKKyMgb3ZlcnJpZGluZyB2YWx1ZQorIyBGb3IgZXhhbXBsZSBmZXRjaFRhZz1DVlM9SEVBRCwgU1ZOPXYyMDA1MDEwMQorZmV0Y2hUYWc9U1ZOPXRydW5rCisjc2tpcEZldGNoPXRydWUKKworCisjIyMjIyMjIyMjIyMjIEpBVkEgQ09NUElMRVIgT1BUSU9OUyAjIyMjIyMjIyMjIyMjIworIyBUaGUgbG9jYXRpb24gb2YgdGhlIEphdmEgamFycyB0byBjb21waWxlIGFnYWluc3QuICBUeXBpY2FsbHkgdGhlIHJ0LmphciBmb3IgeW91ciBKREsvSlJFCisjYm9vdGNsYXNzcGF0aD0ke2phdmEuaG9tZX0vbGliL3J0LmphcgorCisjIHNwZWNpZmljIEpSRSBsb2NhdGlvbnMgdG8gY29tcGlsZSBhZ2FpbnN0LiBUaGVzZSB2YWx1ZXMgYXJlIHVzZWQgdG8gY29tcGlsZSBidW5kbGVzIHNwZWNpZnlpbmcgYSAKKyMgQnVuZGxlLVJlcXVpcmVkRXhlY3V0aW9uRW52aXJvbm1lbnQuIFVuY29tbWVudCBhbmQgc2V0IHZhbHVlcyBmb3IgZW52aXJvbm1lbnRzIHRoYXQgeW91IHN1cHBvcnQKKyNDREMtMS4wL0ZvdW5kYXRpb24tMS4wPSAvcGF0aC90by9ydC5qYXIKKyNDREMtMS4xL0ZvdW5kYXRpb24tMS4xPQorI09TR2kvTWluaW11bS0xLjA9CisjT1NHaS9NaW5pbXVtLTEuMT0KKyNKUkUtMS4xPQorI0oyU0UtMS4yPQorI0oyU0UtMS4zPQorI0oyU0UtMS40PQorI0oyU0UtMS41PQorI0phdmFTRS0xLjY9CisjUGVyc29uYWxKYXZhLTEuMT0KKyNQZXJzb25hbEphdmEtMS4yPQorI0NEQy0xLjAvUGVyc29uYWxCYXNpcy0xLjA9CisjQ0RDLTEuMC9QZXJzb25hbEphdmEtMS4wPQorI0NEQy0xLjEvUGVyc29uYWxCYXNpcy0xLjE9CisjQ0RDLTEuMS9QZXJzb25hbEphdmEtMS4xPQorCisjIFNwZWNpZnkgdGhlIG91dHB1dCBmb3JtYXQgb2YgdGhlIGNvbXBpbGVyIGxvZyB3aGVuIGVjbGlwc2UgamR0IGlzIHVzZWQKK2xvZ0V4dGVuc2lvbj0ubG9nCisKKyMgV2hldGhlciBvciBub3QgdG8gaW5jbHVkZSBkZWJ1ZyBpbmZvIGluIHRoZSBvdXRwdXQgamFycworamF2YWNEZWJ1Z0luZm89ZmFsc2UgCisKKyMgV2hldGhlciBvciBub3QgdG8gZmFpbCB0aGUgYnVpbGQgaWYgdGhlcmUgYXJlIGNvbXBpbGVyIGVycm9ycworamF2YWNGYWlsT25FcnJvcj10cnVlCisKKyMgRW5hYmxlIG9yIGRpc2FibGUgdmVyYm9zZSBtb2RlIG9mIHRoZSBjb21waWxlcgoramF2YWNWZXJib3NlPXRydWUKKworIyBFeHRyYSBhcmd1bWVudHMgZm9yIHRoZSBjb21waWxlci4gVGhlc2UgYXJlIHNwZWNpZmljIHRvIHRoZSBqYXZhIGNvbXBpbGVyIGJlaW5nIHVzZWQuCisjY29tcGlsZXJBcmc9CisKKyMgRGVmYXVsdCB2YWx1ZSBmb3IgdGhlIHZlcnNpb24gb2YgdGhlIHNvdXJjZSBjb2RlLiBUaGlzIHZhbHVlIGlzIHVzZWQgd2hlbiBjb21waWxpbmcgcGx1Zy1pbnMgdGhhdCBkbyBub3Qgc2V0IHRoZSBCdW5kbGUtUmVxdWlyZWRFeGVjdXRpb25FbnZpcm9ubWVudCBvciBzZXQgamF2YWNTb3VyY2UgaW4gYnVpbGQucHJvcGVydGllcworamF2YWNTb3VyY2U9MS42CisKKyMgRGVmYXVsdCB2YWx1ZSBmb3IgdGhlIHZlcnNpb24gb2YgdGhlIGJ5dGUgY29kZSB0YXJnZXRlZC4gVGhpcyB2YWx1ZSBpcyB1c2VkIHdoZW4gY29tcGlsaW5nIHBsdWctaW5zIHRoYXQgZG8gbm90IHNldCB0aGUgQnVuZGxlLVJlcXVpcmVkRXhlY3V0aW9uRW52aXJvbm1lbnQgb3Igc2V0IGphdmFjVGFyZ2V0IGluIGJ1aWxkLnByb3BlcnRpZXMuCitqYXZhY1RhcmdldD0xLjYKKwpkaWZmIC0tZ2l0IGEvcmVsZW5nL29yZy5lY2xpcHNlLnN0ZW0ucmVsZW5nL0NvbmZpZ0ZlYXR1cmUvY3VzdG9tVGFyZ2V0cy54bWwgYi9yZWxlbmcvb3JnLmVjbGlwc2Uuc3RlbS5yZWxlbmcvQ29uZmlnRmVhdHVyZS9jdXN0b21UYXJnZXRzLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YWNjMjIzCi0tLSAvZGV2L251bGwKKysrIGIvcmVsZW5nL29yZy5lY2xpcHNlLnN0ZW0ucmVsZW5nL0NvbmZpZ0ZlYXR1cmUvY3VzdG9tVGFyZ2V0cy54bWwKQEAgLTAsMCArMSwzODMgQEAKKzxwcm9qZWN0IG5hbWU9IkJ1aWxkIHNwZWNpZmljIHRhcmdldHMgYW5kIHByb3BlcnRpZXMiIGRlZmF1bHQ9Im5vRGVmYXVsdCI+CisKKwkKKwkKKwk8IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4KKwk8IS0tIFJ1biBhIGdpdmVuICR7dGFyZ2V0fSBvbiBhbGwgZWxlbWVudHMgYmVpbmcgYnVpbHQgLS0+CisJPCEtLSBBZGQgb24gPGFudD4gdGFzayBmb3IgZWFjaCB0b3AgbGV2ZWwgZWxlbWVudCBiZWluZyBidWlsdC4gLS0+CisJPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+CQorCTxwcm9wZXJ0eSBuYW1lPSJhbGxFbGVtZW50c0ZpbGUiIHZhbHVlPSIke2J1aWxkZXJ9L2FsbEVsZW1lbnRzLnhtbCIgLz4KKwk8aW1wb3J0IGZpbGU9IiR7YWxsRWxlbWVudHNGaWxlfSIgLz4KKwk8dGFyZ2V0IG5hbWU9ImFsbEVsZW1lbnRzIj4KKwkJPGFudGNhbGwgdGFyZ2V0PSJhbGxFbGVtZW50c0RlbGVnYXRvciIgLz4JCQorCTwvdGFyZ2V0PgorCQorCTwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPgorCTwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPgorCTx0YXJnZXQgbmFtZT0iZ2V0QmFzZUNvbXBvbmVudHMiIGRlcGVuZHM9ImNoZWNrTG9jYWxCYXNlIiB1bmxlc3M9InNraXBCYXNlIj4KKwkJPGdldCBzcmM9IiR7ZWNsaXBzZUJhc2VVUkx9IiBkZXN0PSIke2Jhc2V9L3RlbXAtYmFzZS56aXAiIC8+CisJCTx1bnppcCBkZXN0PSIke2Jhc2V9IiBvdmVyd3JpdGU9InRydWUiIHNyYz0iJHtiYXNlfS90ZW1wLWJhc2UuemlwIiAvPgorCTwvdGFyZ2V0PgorCisJPHRhcmdldCBuYW1lPSJjaGVja0xvY2FsQmFzZSI+CisJCTxhdmFpbGFibGUgZmlsZT0iJHtiYXNlfSIgcHJvcGVydHk9InNraXBCYXNlIiAvPgorCTwvdGFyZ2V0PgorCisJPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+CisJPCEtLSBDaGVjayBvdXQgbWFwIGZpbGVzIGZyb20gY29ycmVjdCByZXBvc2l0b3J5IC0tPgorCTwhLS0gUmVwbGFjZSB2YWx1ZXMgZm9yIG1hcHNDaGVja291dFRhZyBhcyBkZXNpcmVkLiAtLT4KKwk8IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4KKwk8dGFyZ2V0IG5hbWU9ImdldE1hcEZpbGVzIiBkZXBlbmRzPSJjaGVja0xvY2FsTWFwcyIgdW5sZXNzPSJza2lwTWFwcyI+CQkKKwkJPHByb3BlcnR5IG5hbWU9Im1hcHNDaGVja291dFRhZyIgdmFsdWU9IkhFQUQiIC8+CisJCTxjdnMgY3ZzUm9vdD0iJHttYXBzUmVwb30iIHBhY2thZ2U9IiR7bWFwc1Jvb3R9IiBkZXN0PSIke2J1aWxkRGlyZWN0b3J5fS9tYXBzIiB0YWc9IiR7bWFwc0NoZWNrb3V0VGFnfSIgLz4KKwk8L3RhcmdldD4KKworCTx0YXJnZXQgbmFtZT0iY2hlY2tMb2NhbE1hcHMiPgorCQk8YXZhaWxhYmxlIHByb3BlcnR5PSJza2lwTWFwcyIgZmlsZT0iJHtidWlsZERpcmVjdG9yeX0vbWFwcyIgLz4KKwk8L3RhcmdldD4KKworCTx0YXJnZXQgbmFtZT0idGFnTWFwRmlsZXMiIGlmPSJ0YWdNYXBzIj4KKwkJPGN2cyBkZXN0PSIke2J1aWxkRGlyZWN0b3J5fS9tYXBzLyR7bWFwc1Jvb3R9IiBjb21tYW5kPSJ0YWcgJHttYXBzVGFnVGFnfSIgLz4KKwk8L3RhcmdldD4KKworCTwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPgorCisJPHRhcmdldCBuYW1lPSJjbGVhbiIgdW5sZXNzPSJub2NsZWFuIj4KKwkJPGFudGNhbGwgdGFyZ2V0PSJhbGxFbGVtZW50cyI+CisJCQk8cGFyYW0gbmFtZT0idGFyZ2V0IiB2YWx1ZT0iY2xlYW5FbGVtZW50IiAvPgorCQk8L2FudGNhbGw+CisJPC90YXJnZXQ+CisKKwk8IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4KKwk8IS0tIFN0ZXBzIHRvIGRvIGJlZm9yZSBzZXR1cCAtLT4KKwk8IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4KKwk8dHlwZWRlZiByZXNvdXJjZT0ib3JnL3RpZ3Jpcy9zdWJ2ZXJzaW9uL3N2bmFudC9zdm5hbnRsaWIueG1sIiBjbGFzc3BhdGg9InN2bmFudC5qYXIiIC8+IAorCTx0YXJnZXQgbmFtZT0icHJlU2V0dXAiPgorCQk8IS0tIDxzdm4+CisJCQk8Y2hlY2tvdXQgdXJsPSJzdm46Ly9kZXYuZWNsaXBzZS5vcmcvc3Zucm9vdC90ZWNobm9sb2d5L29yZy5lY2xpcHNlLnN0ZW0vdHJ1bmsiIGRlc3RQYXRoPSIke2Jhc2V9L2NoZWNrb3V0X2RpciIgLz4KKwkJPC9zdm4+IC0tPgorCTwvdGFyZ2V0PgorCisJPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+CisJPCEtLSBTdGVwcyB0byBkbyBhZnRlciBzZXR1cCBidXQgYmVmb3JlIHN0YXJ0aW5nIHRoZSBidWlsZCBwcm9wZXIgLS0+CisJPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+CisJPHRhcmdldCBuYW1lPSJwb3N0U2V0dXAiPgorCQk8YW50Y2FsbCB0YXJnZXQ9ImdldEJhc2VDb21wb25lbnRzIiAvPgorCQk8IS0tIEZldGNoIHRoZSBVSSBwbHVnaW4gZmlyc3QgYmVjYXVzZSB0aGF0J3Mgd2hlcmUgdGhlIHN0ZW0ucHJvZHVjdCBmaWxlIGlzIC0tPgorCQk8YW50IGFudGZpbGU9IiR7Z2VuZXJpY1RhcmdldHN9IiB0YXJnZXQ9ImZldGNoRWxlbWVudCI+CisJCQk8cHJvcGVydHkgbmFtZT0idHlwZSIgdmFsdWU9ImZlYXR1cmUiLz4KKwkJCTxwcm9wZXJ0eSBuYW1lPSJpZCIgdmFsdWU9Im9yZy5lY2xpcHNlLnN0ZW0uZmVhdHVyZSIvPgorCQk8L2FudD4KKwk8L3RhcmdldD4KKworCTwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPgorCTwhLS0gU3RlcHMgdG8gZG8gYmVmb3JlIGZldGNoaW5nIHRoZSBidWlsZCBlbGVtZW50cyAtLT4KKwk8IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4KKwk8dGFyZ2V0IG5hbWU9InByZUZldGNoIj4KKwk8L3RhcmdldD4KKworCTwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPgorCTwhLS0gU3RlcHMgdG8gZG8gYWZ0ZXIgZmV0Y2hpbmcgdGhlIGJ1aWxkIGVsZW1lbnRzIC0tPgorCTwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPgorCTx0YXJnZXQgbmFtZT0icG9zdEZldGNoIj4KKwkJPCEtLSBUaGlzIGNhbGwgd2FzIGFkZGVkIHRvIGdldCB0aGUgaW50ZXJuYWwgZGF0YSBwbHVnaW4gb3V0IG9mIHRoZSAgICAtLT4KKwkJPCEtLSByZXBvc2l0b3J5IHRvIGJlIHVzZWQgbGF0ZXIgdG8gYnVpbGQgdGhlIHN0ZW0uZ2VvZ3JhcGh5IHBsdWdpbiAgICAtLT4gICAgCisJCTwhLS1hbnQgYW50ZmlsZT0iJHtnZW5lcmljVGFyZ2V0c30iIHRhcmdldD0iZmV0Y2hFbGVtZW50Ij4KKwkJCTxwcm9wZXJ0eSBuYW1lPSJ0eXBlIiB2YWx1ZT0icGx1Z2luIi8+CisJCQk8cHJvcGVydHkgbmFtZT0iaWQiIHZhbHVlPSJvcmcuZWNsaXBzZS5zdGVtLmludGVybmFsLmRhdGEiLz4KKwkJPC9hbnQ+CisJCTxhbnQgYW50ZmlsZT0iJHtnZW5lcmljVGFyZ2V0c30iIHRhcmdldD0iZmV0Y2hFbGVtZW50Ij4KKwkJCTxwcm9wZXJ0eSBuYW1lPSJ0eXBlIiB2YWx1ZT0icGx1Z2luIi8+CisJCQk8cHJvcGVydHkgbmFtZT0iaWQiIHZhbHVlPSJvcmcuZWNsaXBzZS5zdGVtLnRyYW5zcG9ydCIvPgorCQk8L2FudC0tPgorCTwvdGFyZ2V0PgorCisJPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+CisJPCEtLSBTdGVwcyB0byBkbyBiZWZvcmUgZ2VuZXJhdGluZyB0aGUgYnVpbGQgc2NyaXB0cy4gLS0+CisJPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+CisJPHRhcmdldCBuYW1lPSJwcmVHZW5lcmF0ZSI+CisJPC90YXJnZXQ+CisKKwk8IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4KKwk8IS0tIFN0ZXBzIHRvIGRvIGFmdGVyIGdlbmVyYXRpbmcgdGhlIGJ1aWxkIHNjcmlwdHMuIC0tPgorCTwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPgorCTx0YXJnZXQgbmFtZT0icG9zdEdlbmVyYXRlIj4KKwkJPCEtLWFudCBhbnRmaWxlPSIke2dlbmVyaWNUYXJnZXRzfSIgdGFyZ2V0PSJnZW5lcmF0ZVNjcmlwdCI+CisJCQk8cHJvcGVydHkgbmFtZT0idHlwZSIgdmFsdWU9InBsdWdpbiIvPgorCQkJPHByb3BlcnR5IG5hbWU9ImlkIiB2YWx1ZT0ib3JnLmVjbGlwc2Uuc3RlbS50cmFuc3BvcnQiLz4KKwkJPC9hbnQ+CisJCTxhbnQgYW50ZmlsZT0iJHtnZW5lcmljVGFyZ2V0c30iIHRhcmdldD0iZ2VuZXJhdGVTY3JpcHQiPgorCQkJPHByb3BlcnR5IG5hbWU9InR5cGUiIHZhbHVlPSJwbHVnaW4iLz4KKwkJCTxwcm9wZXJ0eSBuYW1lPSJpZCIgdmFsdWU9Im9yZy5lY2xpcHNlLnN0ZW0uaW50ZXJuYWwuZGF0YSIvPgorCQk8L2FudC0tPgorCQk8IS0tYW50Y2FsbCB0YXJnZXQ9ImNsZWFuIiAvLS0+CisJPC90YXJnZXQ+CisKKwk8IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4KKwk8IS0tIFN0ZXBzIHRvIGRvIGJlZm9yZSBydW5uaW5nIHRoZSBidWlsZC54bWxzIGZvciB0aGUgZWxlbWVudHMgYmVpbmcgYnVpbHQuIC0tPgorCTwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPgorCTx0YXJnZXQgbmFtZT0icHJlUHJvY2VzcyI+CisJCTxhbnQgZGlyPSIke2J1aWxkRGlyZWN0b3J5fS9wbHVnaW5zL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkuaW5mcmFzdHJ1Y3R1cmUudHJhbnNwb3J0YXRpb24iIGFudGZpbGU9ImJ1aWxkLnhtbCIgdGFyZ2V0PSJAZG90Ii8+CisJPC90YXJnZXQ+CisKKwk8IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4KKwk8IS0tIFN0ZXBzIHRvIGRvIGFmdGVyIHJ1bm5pbmcgdGhlIGJ1aWxkLnhtbHMgZm9yIHRoZSBlbGVtZW50cyBiZWluZyBidWlsdC4gLS0+CisJPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+CisJPHRhcmdldCBuYW1lPSJwb3N0UHJvY2VzcyI+CisJCTwhLS0gUnVuIHRoZSB1cGRhdGUueG1sIHNjcmlwdCBmcm9tIHRoZSBpbnRlcm5hbC5kYXRhIHBsdWdpbiB0byBnZW5lcmF0ZSBhbGwgaW50ZXJuYWwgZGF0YSAgLS0+CisJCTxhbnQgYW50ZmlsZT0iJHtidWlsZERpcmVjdG9yeX0vcGx1Z2lucy9vcmcuZWNsaXBzZS5zdGVtLmludGVybmFsLmRhdGEvdXBkYXRlLnhtbCIvPgorCisJCTxhbnQgZGlyPSIke2J1aWxkRGlyZWN0b3J5fS9wbHVnaW5zL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkiCisJCQkgYW50ZmlsZT0iYnVpbGQueG1sIiB0YXJnZXQ9IkBkb3QiLz4KKwkJCisJCTwhLS0gV2UgYXJlIGJ1aWxkaW5nIHRoZSBkYXRhLmdlb2dyYXBoeSBwbHVnaW4gYWdhaW4gc28gdGhhdCB0aGUgZmlsZXMgICAtLT4KKwkJPCEtLSB0aGF0IHdlcmUgZ2VuZXJhdGVkIGluIHRoZSBwcmV2aW91cyBhbnQgY2FsbCAoeHh4X25hbWVzLnByb3BlcnRpZXMpIC0tPgorCQk8IS0tIHdpbGwgYmUgY29waWVkIHRvIHRoZSBiaW5hcnkgZm9sZGVyIHRvIGJlIGluY2x1ZGVkIGluIHRoZSBmaW5hbCBqYXIuLS0+CisKKwkJPCEtLSBXZSBhcmUgYnVpbGRpbmcgdGhlIHBsdWdpbiBhZ2FpbiBzbyB0aGF0IHRoZSBmaWxlcyB0aGF0IHdlcmUgLS0+CisJCTwhLS0gZ2VuZXJhdGVkIGluIHRoZSBwcmV2aW91cyBhbnQgY2FsbCB3aWxsIGJlIGluY2x1ZGVkIGluIHRoZSBmaW5hbCBqYXIuLS0+CisJCTwhLS1hbnQgZGlyPSIke2J1aWxkRGlyZWN0b3J5fS9wbHVnaW5zL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkuaW5mcmFzdHJ1Y3R1cmUudHJhbnNwb3J0YXRpb24iCisJCQkgYW50ZmlsZT0iYnVpbGQueG1sIiB0YXJnZXQ9IkBkb3QiLy0tPgorCQkKKwkJPCEtLWFudCBkaXI9IiR7YnVpbGREaXJlY3Rvcnl9L3BsdWdpbnMvb3JnLmVjbGlwc2Uuc3RlbS50cmFuc3BvcnQiCisJCQkgYW50ZmlsZT0iYnVpbGQueG1sIiB0YXJnZXQ9IkBkb3QiLy0tPgorCQkJIAorCQk8IS0tIFRoZSBpbnRlcm5hbCBkYXRhIHBsdWdpbiBpc24ndCBjb21waWxlZCBldmVuIHRob3VnaCB3ZSBnZW5lcmF0ZSBpdHMgLS0+CisJCTwhLS0gYnVpbGQueG1sIGZpbGUgYWJvdmUgaW4gcG9zdEdlbmVyYXRlIC0tPgorCQk8IS0tYW50IGRpcj0iJHtidWlsZERpcmVjdG9yeX0vcGx1Z2lucy9vcmcuZWNsaXBzZS5zdGVtLmludGVybmFsLmRhdGEiCisJCQkgYW50ZmlsZT0iYnVpbGQueG1sIiB0YXJnZXQ9IkBkb3QiLy0tPgorCTwvdGFyZ2V0PgorCisJPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+CisJPCEtLSBTdGVwcyB0byBkbyBiZWZvcmUgcnVubmluZyBhc3NlbWJsZS4gLS0+CisJPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+CisJPHRhcmdldCBuYW1lPSJwcmVBc3NlbWJsZSI+CisJPC90YXJnZXQ+CisKKwk8IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4KKwk8IS0tIFN0ZXBzIHRvIGRvIGFmdGVyICBydW5uaW5nIGFzc2VtYmxlLiAtLT4KKwk8IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4KKwk8dGFyZ2V0IG5hbWU9InBvc3RBc3NlbWJsZSI+CisJPC90YXJnZXQ+CisKKwk8IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4KKwk8IS0tIFN0ZXBzIHRvIGRvIGJlZm9yZSBydW5uaW5nIHBhY2thZ2UuIC0tPgorCTwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPgorCTx0YXJnZXQgbmFtZT0icHJlUGFja2FnZSI+CisJCTwhLS0KKwkJPGRlbGV0ZSBpbmNsdWRlZW1wdHlkaXJzPSJ0cnVlIj4KKwkJCTxmaWxlc2V0IGRpcj0iJHtidWlsZERpcmVjdG9yeX0vcGx1Z2lucyIgZGVmYXVsdGV4Y2x1ZGVzPSJmYWxzZSI+CisJCQkgICA8aW5jbHVkZSBuYW1lPSIqKi9vcmcuZWNsaXBzZS5zdGVtLmludGVybmFsKi8qKiIgLz4KKwkJCTwvZmlsZXNldD4KKwkJPC9kZWxldGU+CisJCS0tPgorCTwvdGFyZ2V0PgorCisJPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+CisJPCEtLSBTdGVwcyB0byBkbyBhZnRlciAgcnVubmluZyBwYWNrYWdlLiAtLT4KKwk8IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4KKwk8dGFyZ2V0IG5hbWU9InBvc3RQYWNrYWdlIj4KKwkJCisJPC90YXJnZXQ+CisKKwk8IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4KKwk8IS0tIFN0ZXBzIHRvIGRvIGFmdGVyIHRoZSBidWlsZCBpcyBkb25lLiAtLT4KKwk8IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4KKwk8cHJvcGVydHkgbmFtZT0icGFja2FnZXNEaXIiIHZhbHVlPSIke2J1aWxkRGlyZWN0b3J5fS8ke2J1aWxkTGFiZWx9IiAvPgorCTwhLS08cHJvcGVydHkgbmFtZT0icGFja2FnZVBvc3RmaXgiIHZhbHVlPSIke21ham9yVmVyc2lvbn0uJHtmb3JjZUNvbnRleHRRdWFsaWZpZXJ9IiAvPi0tPgorCTxwcm9wZXJ0eSBuYW1lPSJwYWNrYWdlUG9zdGZpeCIgdmFsdWU9IiR7YnVpbGRMYWJlbFN1ZmZpeH0iIC8+CisJPHRhcmdldCBuYW1lPSJwb3N0QnVpbGQiPgorCQkKKwkJPCEtLTxhbnRjYWxsIHRhcmdldD0idXBkYXRlWmlwRmlsZSI+CisJCQk8cGFyYW0gbmFtZT0ib3NfY29uZiIgdmFsdWU9Im1hY29zeC5jb2NvYS54ODYiLz4KKwkJPC9hbnRjYWxsPgorCQkKKwkJCisJCTxhbnRjYWxsIHRhcmdldD0idXBkYXRlWmlwRmlsZSI+CisJCQk8cGFyYW0gbmFtZT0ib3NfY29uZiIgdmFsdWU9Im1hY29zeC5jb2NvYS54ODZfNjQiLz4KKwkJPC9hbnRjYWxsPgorCisJCTxhbnRjYWxsIHRhcmdldD0idXBkYXRlWmlwRmlsZSI+CisJCQk8cGFyYW0gbmFtZT0ib3NfY29uZiIgdmFsdWU9ImxpbnV4Lmd0ay54ODYiLz4KKwkJPC9hbnRjYWxsPgorCQk8YW50Y2FsbCB0YXJnZXQ9InVwZGF0ZVppcEZpbGUiPgorCQkJPHBhcmFtIG5hbWU9Im9zX2NvbmYiIHZhbHVlPSJsaW51eC5ndGsueDg2XzY0Ii8+CisJCTwvYW50Y2FsbD4KKwkJPGFudGNhbGwgdGFyZ2V0PSJ1cGRhdGVaaXBGaWxlIj4KKwkJCTxwYXJhbSBuYW1lPSJvc19jb25mIiB2YWx1ZT0id2luMzIud2luMzIueDg2Ii8+CisJCTwvYW50Y2FsbD4KKwkJPGFudGNhbGwgdGFyZ2V0PSJ1cGRhdGVaaXBGaWxlIj4KKwkJCTxwYXJhbSBuYW1lPSJvc19jb25mIiB2YWx1ZT0id2luMzIud2luMzIueDg2XzY0Ii8+CisJCTwvYW50Y2FsbD4JCQorCQk8YW50Y2FsbCB0YXJnZXQ9InVwZGF0ZVppcEZpbGUiPgorCQkJPHBhcmFtIG5hbWU9Im9zX2NvbmYiIHZhbHVlPSJsaW51eC5ndGsucHBjNjQiLz4KKwkJPC9hbnRjYWxsPgorCQkKKwkJLS0+CisJCQorCQk8IS0tbW92ZSBmaWxlPSIke3BhY2thZ2VzRGlyfS8ke2J1aWxkSWR9LWxpbnV4Lmd0ay54ODYuemlwIiB0b2ZpbGU9IiR7cGFja2FnZXNEaXJ9L1NURU0tbGludXguZ3RrLng4Ni0ke3BhY2thZ2VQb3N0Zml4fS56aXAiLz4KKwkJPG1vdmUgZmlsZT0iJHtwYWNrYWdlc0Rpcn0vJHtidWlsZElkfS1saW51eC5ndGsueDg2XzY0LnppcCIgdG9maWxlPSIke3BhY2thZ2VzRGlyfS9TVEVNLWxpbnV4Lmd0ay54ODZfNjQtJHtwYWNrYWdlUG9zdGZpeH0uemlwIi8+CisJCTxtb3ZlIGZpbGU9IiR7cGFja2FnZXNEaXJ9LyR7YnVpbGRJZH0td2luMzIud2luMzIueDg2LnppcCIgdG9maWxlPSIke3BhY2thZ2VzRGlyfS9TVEVNLXdpbjMyLSR7cGFja2FnZVBvc3RmaXh9LnppcCIvPgorCQk8bW92ZSBmaWxlPSIke3BhY2thZ2VzRGlyfS8ke2J1aWxkSWR9LW1hY29zeC5jYXJib24ucHBjLnppcCIgdG9maWxlPSIke3BhY2thZ2VzRGlyfS9TVEVNLW1hY29zeC5jYXJib24ucHBjLSR7cGFja2FnZVBvc3RmaXh9LnppcCIvPgorCQk8bW92ZSBmaWxlPSIke3BhY2thZ2VzRGlyfS8ke2J1aWxkSWR9LW1hY29zeC5jb2NvYS54ODYuemlwIiB0b2ZpbGU9IiR7cGFja2FnZXNEaXJ9L1NURU0tbWFjb3N4LmNvY29hLng4Ni0ke3BhY2thZ2VQb3N0Zml4fS56aXAiLz4KKwkJPG1vdmUgZmlsZT0iJHtwYWNrYWdlc0Rpcn0vJHtidWlsZElkfS1saW51eC5ndGsucHBjLnppcCIgdG9maWxlPSIke3BhY2thZ2VzRGlyfS9TVEVNLWxpbnV4Lmd0ay5wcGMtJHtwYWNrYWdlUG9zdGZpeH0uemlwIi8tLT4KKwkJCisJCTwhLS0gQWRkIHRoZSBkZWZhdWx0IHdvcmtzcGFjZSB0byBhbGwgemlwIGZpbGVzIC0tPgorCQk8IS0tdW56aXAgc3JjPSIke3BhY2thZ2VzRGlyfS9TVEVNLWxpbnV4Lmd0ay54ODYtJHtwYWNrYWdlUG9zdGZpeH0uemlwIiBkZXN0PSIke3BhY2thZ2VzRGlyfS8uLi8uLi9yZXNvdXJjZXMvY29uZmlndXJhdGlvbiI+CisJCQk8cGF0dGVybnNldD4KKwkJCQk8aW5jbHVkZSBuYW1lPSJzdGVtL2NvbmZpZ3VyYXRpb24vY29uZmlnLmluaSIvPgorCQkJPC9wYXR0ZXJuc2V0PgorCQkJPG1hcHBlciB0eXBlPSJmbGF0dGVuIi8+CisJCTwvdW56aXA+CisJCTxwcm9wZXJ0eWZpbGUgZmlsZT0iJHtwYWNrYWdlc0Rpcn0vLi4vLi4vcmVzb3VyY2VzL2NvbmZpZ3VyYXRpb24vY29uZmlnLmluaSI+CisJCQk8ZW50cnkga2V5PSJzdGVtLmJ1aWxkSWQiIHZhbHVlPSIke3BhY2thZ2VQb3N0Zml4fSIvPgorCQk8L3Byb3BlcnR5ZmlsZT4KKwkJPHppcCBkZXN0ZmlsZT0iJHtwYWNrYWdlc0Rpcn0vU1RFTS1saW51eC5ndGsueDg2LSR7cGFja2FnZVBvc3RmaXh9LnppcCIgdXBkYXRlPSJ0cnVlIj4KKwkJCTx6aXBmaWxlc2V0IGRpcj0iJHtwYWNrYWdlc0Rpcn0vLi4vLi4vcmVzb3VyY2VzL3dvcmtzcGFjZSIgcHJlZml4PSJzdGVtL3dvcmtzcGFjZSIvPgorCQkJPHppcGZpbGVzZXQgZGlyPSIke3BhY2thZ2VzRGlyfS8uLi8uLi9yZXNvdXJjZXMvY29uZmlndXJhdGlvbiIgcHJlZml4PSJzdGVtL2NvbmZpZ3VyYXRpb24iLz4KKwkJPC96aXA+CisJCTx6aXAgZGVzdGZpbGU9IiR7cGFja2FnZXNEaXJ9L1NURU0tbGludXguZ3RrLng4Nl82NC0ke3BhY2thZ2VQb3N0Zml4fS56aXAiIHVwZGF0ZT0idHJ1ZSI+CisJCQk8emlwZmlsZXNldCBkaXI9IiR7cGFja2FnZXNEaXJ9Ly4uLy4uL3Jlc291cmNlcy93b3Jrc3BhY2UiIHByZWZpeD0ic3RlbS93b3Jrc3BhY2UiLz4KKwkJPC96aXA+CisJCTx6aXAgZGVzdGZpbGU9IiR7cGFja2FnZXNEaXJ9L1NURU0td2luMzItJHtwYWNrYWdlUG9zdGZpeH0uemlwIiB1cGRhdGU9InRydWUiPgorCQkJPHppcGZpbGVzZXQgZGlyPSIke3BhY2thZ2VzRGlyfS8uLi8uLi9yZXNvdXJjZXMvd29ya3NwYWNlIiBwcmVmaXg9InN0ZW0vd29ya3NwYWNlIi8+CisJCTwvemlwPgorCQk8emlwIGRlc3RmaWxlPSIke3BhY2thZ2VzRGlyfS9TVEVNLW1hY29zeC5jYXJib24ucHBjLSR7cGFja2FnZVBvc3RmaXh9LnppcCIgdXBkYXRlPSJ0cnVlIj4KKwkJCTx6aXBmaWxlc2V0IGRpcj0iJHtwYWNrYWdlc0Rpcn0vLi4vLi4vcmVzb3VyY2VzL3dvcmtzcGFjZSIgcHJlZml4PSJzdGVtL3dvcmtzcGFjZSIvPgorCQk8L3ppcD4KKwkJPHppcCBkZXN0ZmlsZT0iJHtwYWNrYWdlc0Rpcn0vU1RFTS1tYWNvc3guY29jb2EueDg2LSR7cGFja2FnZVBvc3RmaXh9LnppcCIgdXBkYXRlPSJ0cnVlIj4KKwkJCTx6aXBmaWxlc2V0IGRpcj0iJHtwYWNrYWdlc0Rpcn0vLi4vLi4vcmVzb3VyY2VzL3dvcmtzcGFjZSIgcHJlZml4PSJzdGVtL3dvcmtzcGFjZSIvPgorCQk8L3ppcD4KKwkJPHppcCBkZXN0ZmlsZT0iJHtwYWNrYWdlc0Rpcn0vU1RFTS1saW51eC5ndGsucHBjLSR7cGFja2FnZVBvc3RmaXh9LnppcCIgdXBkYXRlPSJ0cnVlIj4KKwkJCTx6aXBmaWxlc2V0IGRpcj0iJHtwYWNrYWdlc0Rpcn0vLi4vLi4vcmVzb3VyY2VzL3dvcmtzcGFjZSIgcHJlZml4PSJzdGVtL3dvcmtzcGFjZSIvPgorCQk8L3ppcC0tPgorCQkKKwkJCisJCTxjb25kaXRpb24gcHJvcGVydHk9InRvLnB1Ymxpc2guYnVpbGQiPgorCQkJPGlzdHJ1ZSB2YWx1ZT0iJHt0b1B1Ymxpc2h9Ii8+CisJCTwvY29uZGl0aW9uPgorCQkKKwkJPGFudGNhbGwgdGFyZ2V0PSJwdWJsaXNoIiAvPgorCQkKKwkJPCEtLSBDaGVjayBpZiB0aGVyZSBpcyBhIHJlcXVlc3QgdG8gcHVibGlzaCB0aGUgYmluYXJpZXMgLS0+CisJCTwhLS08aXN0cnVlIHZhbHVlPSIke3RvUHVibGlzaH0iPgorCQkJPGFudGNhbGwgdGFyZ2V0PSJwdWJsaXNoIiAvPgorCQkJPGFudGNhbGwgdGFyZ2V0PSJ1cGRhdGVXZWJTaXRlV2l0aFdlZWtseUJ1aWxkIiAvPgorCQk8L2lzdHJ1ZT4tLT4KKwk8L3RhcmdldD4KKwkKKwk8dGFyZ2V0IG5hbWU9InVwZGF0ZVppcEZpbGUiPgorCQk8bW92ZSBmaWxlPSIke3BhY2thZ2VzRGlyfS8ke2J1aWxkSWR9LSR7b3NfY29uZn0uemlwIiB0b2ZpbGU9IiR7cGFja2FnZXNEaXJ9L1NURU0tJHtvc19jb25mfS0ke3BhY2thZ2VQb3N0Zml4fS56aXAiLz4KKwkJPHVuemlwIHNyYz0iJHtwYWNrYWdlc0Rpcn0vU1RFTS0ke29zX2NvbmZ9LSR7cGFja2FnZVBvc3RmaXh9LnppcCIgZGVzdD0iJHtwYWNrYWdlc0Rpcn0vLi4vLi4vcmVzb3VyY2VzL2NvbmZpZ3VyYXRpb24iPgorCQkJPHBhdHRlcm5zZXQ+CisJCQkJPGluY2x1ZGUgbmFtZT0ic3RlbS9jb25maWd1cmF0aW9uL2NvbmZpZy5pbmkiLz4KKwkJCTwvcGF0dGVybnNldD4KKwkJCTxtYXBwZXIgdHlwZT0iZmxhdHRlbiIvPgorCQk8L3VuemlwPgorCQk8cHJvcGVydHlmaWxlIGZpbGU9IiR7cGFja2FnZXNEaXJ9Ly4uLy4uL3Jlc291cmNlcy9jb25maWd1cmF0aW9uL2NvbmZpZy5pbmkiPgorCQkJPGVudHJ5IGtleT0ic3RlbS5idWlsZElkIiB2YWx1ZT0iJHtwYWNrYWdlUG9zdGZpeH0iLz4KKwkJPC9wcm9wZXJ0eWZpbGU+CisJCTx6aXAgZGVzdGZpbGU9IiR7cGFja2FnZXNEaXJ9L1NURU0tJHtvc19jb25mfS0ke3BhY2thZ2VQb3N0Zml4fS56aXAiIHVwZGF0ZT0idHJ1ZSI+CisJCQk8emlwZmlsZXNldCBkaXI9IiR7cGFja2FnZXNEaXJ9Ly4uLy4uL3Jlc291cmNlcy93b3Jrc3BhY2UiIHByZWZpeD0ic3RlbS93b3Jrc3BhY2UiLz4KKwkJCTwhLS08emlwZmlsZXNldCBkaXI9IiR7cGFja2FnZXNEaXJ9Ly4uLy4uL3Jlc291cmNlcy9jb25maWd1cmF0aW9uIiBwcmVmaXg9InN0ZW0vY29uZmlndXJhdGlvbiIvPi0tPgorCQk8L3ppcD4KKwk8L3RhcmdldD4KKworCTwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPgorCTwhLS0gU3RlcHMgdG8gZG8gdG8gdGVzdCB0aGUgYnVpbGQgcmVzdWx0cyAtLT4KKwk8IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4KKwk8dGFyZ2V0IG5hbWU9InRlc3QiPgorCQkKKwk8L3RhcmdldD4KKworCTwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPgorCTwhLS0gU3RlcHMgdG8gZG8gdG8gcHVibGlzaCB0aGUgYnVpbGQgcmVzdWx0cyAtLT4KKwk8IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4KKwk8cHJvcGVydHkgbmFtZT0icHVibGlzaERpckZpbGVQYXRoIiB2YWx1ZT0iJHtwdWJsaXNoRGlyfS8ke2J1aWxkVHlwZUZ1bGx9IiAvPgorCTx0YXJnZXQgbmFtZT0icHVibGlzaCIgaWY9InRvLnB1Ymxpc2guYnVpbGQiPgorCQk8IS0tIElmIHJ1bm5pbmcgb3V0c2lkZSBvZiBidWlsZC5lY2xpcHNlLm9yZyBvciBkb3dubG9hZDEuZWNsaXBzZS5vcmcgc2VydmVycyB0aGVuIHVzZSB0aGlzIG9uZSB0byBTQ1AgdGhlIGZpbGVzIC0tPgorCQk8IS0tc2NwIHRvZGlyPSIke3VzZXJuYW1lfToke3Bhc3N3b3JkfUBkb3dubG9hZDEuZWNsaXBzZS5vcmc6fi9kb3dubG9hZHMvc3RlbSI+CisJCQk8ZmlsZXNldCBkaXI9IiR7cGFja2FnZXNEaXJ9Ij4KKwkJCQk8aW5jbHVkZSBuYW1lPSJTVEVNLSotJHtwYWNrYWdlUG9zdGZpeH0uemlwIi8+CisJCQk8L2ZpbGVzZXQ+CisJCTwvc2NwLS0+CisJCTwhLS0gSWYgcnVubmluZyBvbiBidWlsZC5lY2xpcHNlLm9yZyBvciBkb3dubG9hZDEuZWNsaXBzZS5vcmcgc2VydmVycywgdGhlbiB1c2UgdGhpcyBvbmUgdG8gY29weSB0aGUgZmlsZXMgLS0+CisJCTxta2RpciBkaXI9IiR7cHVibGlzaERpckZpbGVQYXRofSIvPgorCQkJCQorCQkJCQorCQk8Y29uZGl0aW9uIHByb3BlcnR5PSJjbGVhbnVwLnB1Ymxpc2guZGlyLmZpcnN0Ij4KKwkJCTxpc3RydWUgdmFsdWU9IiR7Y2xlYW51cEZpcnN0fSIvPgorCQk8L2NvbmRpdGlvbj4KKwkJPGFudGNhbGwgdGFyZ2V0PSJjbGVhbnVwLnB1Ymxpc2guZGlyIiAvPgorCQkJCQorCQk8Y29weSB0b2Rpcj0iJHtwdWJsaXNoRGlyRmlsZVBhdGh9Ij4KKwkJCTxmaWxlc2V0IGRpcj0iJHtwYWNrYWdlc0Rpcn0iPgorCQkJCTxpbmNsdWRlIG5hbWU9IlNURU0tKi0ke3BhY2thZ2VQb3N0Zml4fS56aXAiLz4KKwkJCTwvZmlsZXNldD4KKwkJPC9jb3B5PgorCQkKKwkJCisJCTxwcm9wZXJ0eWZpbGUgZmlsZT0iJHtwdWJsaXNoRGlyfS92ZXJzaW9ucyI+CisJCQk8ZW50cnkga2V5PSIke2J1aWxkVHlwZUZ1bGx9LnZlcnNpb24iIHZhbHVlPSIke3BhY2thZ2VQb3N0Zml4fSIvPgorCQkJPGVudHJ5IGtleT0iJHtidWlsZFR5cGVGdWxsfS5kYXRlIiB2YWx1ZT0iJHtidWlsZERhdGV9Ii8+CisJCTwvcHJvcGVydHlmaWxlPgorCQkKKwkJCisJPC90YXJnZXQ+CisJCisJCisJPHRhcmdldCBuYW1lPSJjbGVhbnVwLnB1Ymxpc2guZGlyIiBpZj0iY2xlYW51cC5wdWJsaXNoLmRpci5maXJzdCI+CisJCTxkZWxldGU+CisgICAgCQk8ZmlsZXNldCBkaXI9IiR7cHVibGlzaERpckZpbGVQYXRofSIgaW5jbHVkZXM9IioqLyoiLz4KKyAgCQk8L2RlbGV0ZT4JCisJPC90YXJnZXQ+CisJCisJPHRhcmdldCBuYW1lPSJ1cGRhdGVXZWJTaXRlV2l0aFdlZWtseUJ1aWxkIj4KKwkJPCEtLSBMb2FkIHRoZSBwcm9wZXJ0aWVzIGZpbGUgd2hpY2ggaG9sZHMgdGhlIGxhc3Qgd2Vla2x5L3N0YWJsZSBidWlsZCBwb3N0Zml4ZXMgLS0+CisJCTxsb2FkcHJvcGVydGllcz4KKwkJCTxmaWxlIGZpbGU9IiR7YmFzZX0vbXkucHJvcGVydGllcyIvPgorCQk8L2xvYWRwcm9wZXJ0aWVzPgorCQkKKwkJPCEtLSBDaGVja291dC91cGRhdGVkIHRoZSBTVEVNIHdlYnNpdGUgZmlsZXMgZnJvbSBDVlMgLS0+CisJCTxjdnMgY3ZzUm9vdD0iJHt1c2VybmFtZX1AZGV2LmVjbGlwc2Uub3JnOi9jdnNyb290L29yZy5lY2xpcHNlIgorCQkJcGFja2FnZT0id3d3L3N0ZW0iCisJCQlkZXN0PSIke2J1aWxkRGlyZWN0b3J5fSIKKwkJLz4KKwkJCisJCTwhLS0gVXBkYXRlIHRoZSBkb3dubG9hZHMucGhwIGZpbGUgLS0+CisJCTxyZXBsYWNlcmVnZXhwIGJ5bGluZT0idHJ1ZSI+CisJCQk8cmVnZXhwIHBhdHRlcm49IiR7bGFzdFdlZWtseUJ1aWxkfSIvPgorCQkJPHN1YnN0aXR1dGlvbiBleHByZXNzaW9uPSIke3BhY2thZ2VQb3N0Zml4fSIvPgorCQkJPGZpbGVzZXQgZGlyPSIke2Jhc2V9L3d3dy9zdGVtIj4KKwkJCQk8aW5jbHVkZSBuYW1lPSJkb3dubG9hZHMucGhwIi8+CisJCQk8L2ZpbGVzZXQ+CisJCTwvcmVwbGFjZXJlZ2V4cD4KKwkJCisJCTwhLS0gQ29tbWl0IHRoZSB1cGRhdGVkIGRvd25sb2Fkcy5waHAgZmlsZSBpbnRvIENWUyAtLT4KKwkJPGN2cyBjdnNSb290PSIke3VzZXJuYW1lfUBkZXYuZWNsaXBzZS5vcmc6L2N2c3Jvb3Qvb3JnLmVjbGlwc2UiCisJCQlwYWNrYWdlPSJ3d3cvc3RlbSIKKwkJCWRlc3Q9IiR7YnVpbGREaXJlY3Rvcnl9Ly4uIiAKKwkJCWNvbW1hbmQ9ImNvbW1pdCAtbSAnVXBkYXRlZCB0byBXZWVrbHkgSW50ZWdyYXRpb24gQnVpbGQgJHtwYWNrYWdlUG9zdGZpeH0nIi8+CisKKwkJPCEtLSBTYXZlIHRoZSB1cGRhdGVkIHBvc3RmaXggb2YgdGhlIHdlZWtseSBidWlsZCBpbnRvIHRoZSBwcm9wZXJ0aWVzIGZpbGUgLS0+CisJCTxwcm9wZXJ0eWZpbGUgZmlsZT0iJHtiYXNlfS9teS5wcm9wZXJ0aWVzIj4KKwkJCTxlbnRyeSAga2V5PSJsYXN0V2Vla2x5QnVpbGQiIHZhbHVlPSIke3BhY2thZ2VQb3N0Zml4fSIvPgorCQkJPGVudHJ5ICBrZXk9Imxhc3RTdGFibGVCdWlsZCIgdmFsdWU9IiR7bGFzdFN0YWJsZUJ1aWxkfSIvPgorCQk8L3Byb3BlcnR5ZmlsZT4KKwkJCisJCTwhLS0gRGVsZXRlIHRoZSBwcmV2aW91cyB3ZWVrbHkgYnVpbGQgZmlsZXMgZnJvbSB0aGUgcHVibGlzaCBkaXJlY3RvcnkgLS0+CisJCTxkZWxldGU+CisJCQk8ZmlsZXNldCBkaXI9IiR7cHVibGlzaERpcn0iPgorCQkJCTxpbmNsdWRlIG5hbWU9IlNURU0tKi0ke2xhc3RXZWVrbHlCdWlsZH0uemlwIi8+CisJCQk8L2ZpbGVzZXQ+CisJCTwvZGVsZXRlPgorCTwvdGFyZ2V0PgorCisJPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+CisJPCEtLSBEZWZhdWx0IHRhcmdldCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0+CisJPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+CisJPHRhcmdldCBuYW1lPSJub0RlZmF1bHQiPgorCQk8ZWNobyBtZXNzYWdlPSJZb3UgbXVzdCBzcGVjaWZ5IGEgdGFyZ2V0IHdoZW4gaW52b2tpbmcgdGhpcyBmaWxlIiAvPgorCTwvdGFyZ2V0PgorCis8L3Byb2plY3Q+CmRpZmYgLS1naXQgYS9yZWxlbmcvb3JnLmVjbGlwc2Uuc3RlbS5yZWxlbmcvQ29uZmlnRmVhdHVyZS9wMi5pbmYgYi9yZWxlbmcvb3JnLmVjbGlwc2Uuc3RlbS5yZWxlbmcvQ29uZmlnRmVhdHVyZS9wMi5pbmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmM2MWU4YgotLS0gL2Rldi9udWxsCisrKyBiL3JlbGVuZy9vcmcuZWNsaXBzZS5zdGVtLnJlbGVuZy9Db25maWdGZWF0dXJlL3AyLmluZgpAQCAtMCwwICsxLDczIEBACitpbnN0cnVjdGlvbnMuY29uZmlndXJlPVwKK2FkZFJlcG9zaXRvcnkodHlwZTowLGxvY2F0aW9uOmh0dHAkeyM1OH0vL2Rvd25sb2FkLmVjbGlwc2Uub3JnL2VjbGlwc2UvdXBkYXRlcy8zLjcsbmFtZTpUaGUgRWNsaXBzZSBQcm9qZWN0IFVwZGF0ZXMpO1wKK2FkZFJlcG9zaXRvcnkodHlwZToxLGxvY2F0aW9uOmh0dHAkeyM1OH0vL2Rvd25sb2FkLmVjbGlwc2Uub3JnL2VjbGlwc2UvdXBkYXRlcy8zLjcsbmFtZTpUaGUgRWNsaXBzZSBQcm9qZWN0IFVwZGF0ZXMpO1wKK2FkZFJlcG9zaXRvcnkodHlwZTowLGxvY2F0aW9uOmh0dHAkeyM1OH0vL2Rvd25sb2FkLmVjbGlwc2Uub3JnL3JlbGVhc2VzL2luZGlnbyxuYW1lOkluZGlnbyk7XAorYWRkUmVwb3NpdG9yeSh0eXBlOjEsbG9jYXRpb246aHR0cCR7IzU4fS8vZG93bmxvYWQuZWNsaXBzZS5vcmcvcmVsZWFzZXMvaW5kaWdvLG5hbWU6SW5kaWdvKTtcCisgIG1rZGlyKHBhdGg6JHtpbnN0YWxsRm9sZGVyfS9kcm9waW5zKTsKK3JlcXVpcmVzLjEubmFtZXNwYWNlPW9yZy5lY2xpcHNlLmVxdWlub3gucDIuaXUKK3JlcXVpcmVzLjEubmFtZT10b29saW5nb3JnLmVjbGlwc2UuY29uZmlndXJhdGlvbi5tYWNvc3gKK3JlcXVpcmVzLjEuZmlsdGVyPShvc2dpLm9zPW1hY29zeCkKK3JlcXVpcmVzLjEucmFuZ2U9WzEuMC4wLDEuMC4wXQorcmVxdWlyZXMuMS5ncmVlZHk9dHJ1ZQorCityZXF1aXJlcy4yLm5hbWVzcGFjZT1vcmcuZWNsaXBzZS5lcXVpbm94LnAyLml1CityZXF1aXJlcy4yLm5hbWU9dG9vbGluZ29yZy5lY2xpcHNlLmNvbmZpZ3VyYXRpb24KK3JlcXVpcmVzLjIuZmlsdGVyPSghKG9zZ2kub3M9bWFjb3N4KSkKK3JlcXVpcmVzLjIucmFuZ2U9WzEuMC4wLDEuMC4wXQorcmVxdWlyZXMuMi5ncmVlZHk9dHJ1ZQorCityZXF1aXJlcy4zLm5hbWVzcGFjZT1vcmcuZWNsaXBzZS5lcXVpbm94LnAyLml1CityZXF1aXJlcy4zLm5hbWU9dG9vbGluZ29yZy5lY2xpcHNlLmNvbmZpZ3VyYXRpb24ubWFjb3N4Lng4Nl82NAorcmVxdWlyZXMuMy5maWx0ZXI9KCYob3NnaS5vcz1tYWNvc3gpIChvc2dpLmFyY2g9eDg2XzY0KSkKK3JlcXVpcmVzLjMucmFuZ2U9WzEuMC4wLDEuMC4wXQorcmVxdWlyZXMuMy5ncmVlZHk9dHJ1ZQorCit1bml0cy4xLmlkPXRvb2xpbmdvcmcuZWNsaXBzZS5jb25maWd1cmF0aW9uLm1hY29zeAordW5pdHMuMS52ZXJzaW9uPTEuMC4wCit1bml0cy4xLnByb3ZpZGVzLjEubmFtZXNwYWNlPW9yZy5lY2xpcHNlLmVxdWlub3gucDIuaXUKK3VuaXRzLjEucHJvdmlkZXMuMS5uYW1lPXRvb2xpbmdvcmcuZWNsaXBzZS5jb25maWd1cmF0aW9uLm1hY29zeAordW5pdHMuMS5wcm92aWRlcy4xLnZlcnNpb249MS4wLjAKK3VuaXRzLjEuZmlsdGVyPShvc2dpLm9zPW1hY29zeCkKK3VuaXRzLjEudG91Y2hwb2ludC5pZD1vcmcuZWNsaXBzZS5lcXVpbm94LnAyLm9zZ2kKK3VuaXRzLjEudG91Y2hwb2ludC52ZXJzaW9uPTEuMC4wCit1bml0cy4xLmluc3RydWN0aW9ucy5jb25maWd1cmU9c2V0UHJvZ3JhbVByb3BlcnR5KHByb3BOYW1lOm9zZ2kuaW5zdGFuY2UuYXJlYS5kZWZhdWx0LHByb3BWYWx1ZTpAdXNlci5ob21lL0RvY3VtZW50cy93b3Jrc3BhY2UpOwordW5pdHMuMS5pbnN0cnVjdGlvbnMudW5jb25maWd1cmU9c2V0UHJvZ3JhbVByb3BlcnR5KHByb3BOYW1lOm9zZ2kuaW5zdGFuY2UuYXJlYS5kZWZhdWx0LHByb3BWYWx1ZTopOworCit1bml0cy4yLmlkPXRvb2xpbmdvcmcuZWNsaXBzZS5jb25maWd1cmF0aW9uCit1bml0cy4yLnZlcnNpb249MS4wLjAKK3VuaXRzLjIucHJvdmlkZXMuMS5uYW1lc3BhY2U9b3JnLmVjbGlwc2UuZXF1aW5veC5wMi5pdQordW5pdHMuMi5wcm92aWRlcy4xLm5hbWU9dG9vbGluZ29yZy5lY2xpcHNlLmNvbmZpZ3VyYXRpb24KK3VuaXRzLjIucHJvdmlkZXMuMS52ZXJzaW9uPTEuMC4wCit1bml0cy4yLmZpbHRlcj0oIShvc2dpLm9zPW1hY29zeCkpCit1bml0cy4yLnRvdWNocG9pbnQuaWQ9b3JnLmVjbGlwc2UuZXF1aW5veC5wMi5vc2dpCit1bml0cy4yLnRvdWNocG9pbnQudmVyc2lvbj0xLjAuMAordW5pdHMuMi5pbnN0cnVjdGlvbnMuY29uZmlndXJlPXNldFByb2dyYW1Qcm9wZXJ0eShwcm9wTmFtZTpvc2dpLmluc3RhbmNlLmFyZWEuZGVmYXVsdCxwcm9wVmFsdWU6QHVzZXIuaG9tZS93b3Jrc3BhY2UpOwordW5pdHMuMi5pbnN0cnVjdGlvbnMudW5jb25maWd1cmU9c2V0UHJvZ3JhbVByb3BlcnR5KHByb3BOYW1lOm9zZ2kuaW5zdGFuY2UuYXJlYS5kZWZhdWx0LHByb3BWYWx1ZTopOworCit1bml0cy4zLmlkPXRvb2xpbmdvcmcuZWNsaXBzZS5jb25maWd1cmF0aW9uLm1hY29zeC54ODZfNjQKK3VuaXRzLjMudmVyc2lvbj0xLjAuMAordW5pdHMuMy5wcm92aWRlcy4xLm5hbWVzcGFjZT1vcmcuZWNsaXBzZS5lcXVpbm94LnAyLml1Cit1bml0cy4zLnByb3ZpZGVzLjEubmFtZT10b29saW5nb3JnLmVjbGlwc2UuY29uZmlndXJhdGlvbi5tYWNvc3gueDg2XzY0Cit1bml0cy4zLnByb3ZpZGVzLjEudmVyc2lvbj0xLjAuMAordW5pdHMuMy5maWx0ZXI9KCYob3NnaS5vcz1tYWNvc3gpIChvc2dpLmFyY2g9eDg2XzY0KSkKK3VuaXRzLjMudG91Y2hwb2ludC5pZD1vcmcuZWNsaXBzZS5lcXVpbm94LnAyLm9zZ2kKK3VuaXRzLjMudG91Y2hwb2ludC52ZXJzaW9uPTEuMC4wCit1bml0cy4zLmluc3RydWN0aW9ucy5jb25maWd1cmU9YWRkSnZtQXJnKGp2bUFyZzotWG1zNDBtKTthZGRKdm1BcmcoanZtQXJnOi1YbXg1MTJtKTsKK3VuaXRzLjMuaW5zdHJ1Y3Rpb25zLnVuY29uZmlndXJlPXJlbW92ZUp2bUFyZyhqdm1Bcmc6LVhtczQwbSk7cmVtb3ZlSnZtQXJnKGp2bUFyZzotWG14NTEybSk7CisKK3JlcXVpcmVzLjQubmFtZXNwYWNlPW9yZy5lY2xpcHNlLmVxdWlub3gucDIuaXUKK3JlcXVpcmVzLjQubmFtZT10b29saW5nb3JnLmVjbGlwc2UuY29uZmlndXJhdGlvbi5haXgucHBjNjQKK3JlcXVpcmVzLjQuZmlsdGVyPSgmKG9zZ2kub3M9YWl4KSAob3NnaS5hcmNoPXBwYzY0KSkKK3JlcXVpcmVzLjQucmFuZ2U9WzEuMC4wLDEuMC4wXQorcmVxdWlyZXMuNC5ncmVlZHk9dHJ1ZQorCit1bml0cy40LmlkPXRvb2xpbmdvcmcuZWNsaXBzZS5jb25maWd1cmF0aW9uLmFpeC5wcGM2NAordW5pdHMuNC52ZXJzaW9uPTEuMC4wCit1bml0cy40LnByb3ZpZGVzLjEubmFtZXNwYWNlPW9yZy5lY2xpcHNlLmVxdWlub3gucDIuaXUKK3VuaXRzLjQucHJvdmlkZXMuMS5uYW1lPXRvb2xpbmdvcmcuZWNsaXBzZS5jb25maWd1cmF0aW9uLmFpeC5wcGM2NAordW5pdHMuNC5wcm92aWRlcy4xLnZlcnNpb249MS4wLjAKK3VuaXRzLjQuZmlsdGVyPSgmKG9zZ2kub3M9YWl4KSAob3NnaS5hcmNoPXBwYzY0KSkKK3VuaXRzLjQudG91Y2hwb2ludC5pZD1vcmcuZWNsaXBzZS5lcXVpbm94LnAyLm9zZ2kKK3VuaXRzLjQudG91Y2hwb2ludC52ZXJzaW9uPTEuMC4wCit1bml0cy40Lmluc3RydWN0aW9ucy5jb25maWd1cmU9YWRkSnZtQXJnKGp2bUFyZzotWG1zNDBtKTthZGRKdm1BcmcoanZtQXJnOi1YbXg1MTJtKTsKK3VuaXRzLjQuaW5zdHJ1Y3Rpb25zLnVuY29uZmlndXJlPXJlbW92ZUp2bUFyZyhqdm1Bcmc6LVhtczQwbSk7cmVtb3ZlSnZtQXJnKGp2bUFyZzotWG14NTEybSk7CmRpZmYgLS1naXQgYS9yZWxlbmcvb3JnLmVjbGlwc2Uuc3RlbS5yZWxlbmcvQ29uZmlnUHJvZHVjdC9hbGxFbGVtZW50cy54bWwgYi9yZWxlbmcvb3JnLmVjbGlwc2Uuc3RlbS5yZWxlbmcvQ29uZmlnUHJvZHVjdC9hbGxFbGVtZW50cy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzVmODA0OAotLS0gL2Rldi9udWxsCisrKyBiL3JlbGVuZy9vcmcuZWNsaXBzZS5zdGVtLnJlbGVuZy9Db25maWdQcm9kdWN0L2FsbEVsZW1lbnRzLnhtbApAQCAtMCwwICsxLDQ5IEBACis8cHJvamVjdCBuYW1lPSJhbGxFbGVtZW50cyBEZWxlZ2F0b3IiPgorCTxwcm9wZXJ0eSBuYW1lPSJkZWZhdWx0QXNzZW1ibHlFbmFibGVkIiB2YWx1ZT0idHJ1ZSIgLz4KKwkKKyAJPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gCS0tPgorIAk8IS0tIFJ1biBhIGdpdmVuICR7dGFyZ2V0fSBvbiBhbGwgZWxlbWVudHMgYmVpbmcgYnVpbHQJCQkJCQktLT4KKwk8IS0tIFJlcGxhY2UgZWxlbWVudC5pZCB3aXRoIHRoZSBpZCBvZiB0aGUgdG9wIGxldmVsIGVsZW1lbnQgYmVpbmcgYnVpbHQuICAgIC0tPgorCTwhLS0gSWYgZWxlbWVudC5pZCBkb2VzIG5vdCBleGlzdCBpbiAke2J1aWxkRGlyZWN0b3J5fS9mZWF0dXJlcy9lbGVtZW50LmlkICAgLS0+CisJPCEtLSBvciAke2Jhc2VMb2NhdGlvbn0vZmVhdHVyZXMvZWxlbWVudC5pZCwgdGhlbiB5b3UgbXVzdCBwcm92aWRlIHRoZSAgICAgICAtLT4KKwk8IS0tIGxvY2F0aW9uIGJ5IHNldHRpbmcgdGhlIHByb3BlcnR5ICJwbHVnaW5QYXRoIiAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPgorCTwhLS0gQWRkIG9uIDxhbnQ+IHRhc2sgZm9yIGVhY2ggdG9wIGxldmVsIGVsZW1lbnQgYmVpbmcgYnVpbHQuICAgICAgICAgICAgIC0tPgorIAk8IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAJLS0+CisgCTx0YXJnZXQgbmFtZT0iYWxsRWxlbWVudHNEZWxlZ2F0b3IiPgorIAkJPGFudCBhbnRmaWxlPSIke2dlbmVyaWNUYXJnZXRzfSIgdGFyZ2V0PSIke3RhcmdldH0iPgorCSAJCTxwcm9wZXJ0eSBuYW1lPSJ0eXBlIiB2YWx1ZT0iJHt0b3BMZXZlbEVsZW1lbnRUeXBlfSIgLz4KKwkgCQk8cHJvcGVydHkgbmFtZT0iaWQiIHZhbHVlPSIke3RvcExldmVsRWxlbWVudElkfSIgLz4KKyAJCTwvYW50PgorIAk8L3RhcmdldD4KKyAKKwk8IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+CisJPCEtLSAgVGhlIGRlZmF1bHQgYXNzZW1ibGUgdGFyZ2V0LCB0aGlzIHdpbGwgYmUgY2FsbGVkIHRvIGFzc2VtYmxlIGVhY2gJCS0tPgkgCisJPCEtLSAgY29uZmlnIGlmIGEgY3VzdG9tIGFzc2VtYmxlIHRhcmdldCBpcyBub3QgZGVmaW5lZC4JCQkJCS0tPgorCTwhLS0gVGhlIGZvbGxvd2luZyBwcm9wZXJ0aWVzIHdpbGwgYmUgZGVmaW5lZDoJCQkJCQkJCS0tPgorCTwhLS0gCQljb25maWcgOiBUaGUgY29uZmlndXJhdGlvbiBiZWluZyBhc3NlbWJsZWQgZWcgIndpbjMyLndpbjMyLng4NiIJLS0+CisJPCEtLSAJCWVsZW1lbnQ6IFRoZSBlbGVtZW50IGJlaW5nIGFzc2VtYmxlZCBlZyAib3JnLmVjbGlwc2Uuc2RrIgkJLS0+CisJPCEtLSAJCWFzc2VtYmxlU2NyaXB0TmFtZTogVGhlIGFzc2VtYmxlIHNjcmlwdCB0byBiZSBjYWxsZWQJCQktLT4KKwk8IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+CisJPHRhcmdldCBuYW1lPSJkZWZhdWx0QXNzZW1ibGUiPgorCQk8YW50IGFudGZpbGU9IiR7YXNzZW1ibGVTY3JpcHROYW1lfSIgZGlyPSIke2J1aWxkRGlyZWN0b3J5fSIgLz4KKwk8L3RhcmdldD4JCisJCisgCTwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CS0tPgorIAk8IS0tIEN1c3RvbSB0YXJnZXRzIHRvIGFzc2VtYmxlIHRoZSBidWlsdCBlbGVtZW50cyBmb3IgcGFydGljdWxhciAJCQktLT4KKyAJPCEtLSBjb25maWd1cmF0aW9ucy4gIFRoZXNlIGdlbmVyYWxseSBjYWxsIHRoZSBnZW5lcmF0ZWQgYXNzZW1ibGUgc2NyaXB0cyAJLS0+CisgCTwhLS0gKG5hbWVkIGluICAke2Fzc2VtYmxlU2NyaXB0TmFtZX0pIGJ1dCBtYXkgYWxzbyBhZGQgcHJlIGFuZCBwb3N0CQktLT4gCisgCTwhLS0gcHJvY2Vzc2luZyAgICAgIAkJCQkJCQkJCQkJCQkJLS0+CisgCTwhLS0gQWRkIG9uZSB0YXJnZXQgZm9yIGVhY2ggcm9vdCBlbGVtZW50IGFuZCBlYWNoIGNvbmZpZ3VyYXRpb24gZm9yIHdoaWNoCS0tPiAKKyAJPCEtLSBjdXN0b20gcHJvY2Vzc2luZyBpcyBkZXNpcmVkLiBSZXBsYWNlIGVsZW1lbnQuaWQgd2l0aCB0aGUgaWQgb2YgdGhlIAktLT4KKyAJPCEtLSB0b3AgbGV2ZWwgZWxlbWVudCBiZWluZyBidWlsdC4gIEEgcHJvcGVydHkgd2l0aCBhIG1hdGNoaW5nIG5hbWUgbXVzdCAJLS0+CisgCTwhLS0gYmUgZGVmaW5lZCBmb3IgdGhpcyBjdXN0b20gdGFyZ2V0IHRvIGJlIGNhbGxlZCBpbnN0ZWFkIG9mIHRoZSAJCQktLT4KKyAJPCEtLSBkZWZhdWx0QXNzZW1ibGUgdGFyZ2V0IGFib3ZlLgkJCQkJCQkJCQkJLS0+CisJPCEtLQlFeGFtcGxlOiAgbmFtZT0iYXNzZW1ibGUub3JnLmVjbGlwc2Uuc2RrIgkJCQkJCQktLT4KKwk8IS0tCUV4YW1wbGU6ICBuYW1lPSJhc3NlbWJsZS5vcmcuZWNsaXBzZS5zZGsud2luMzIud2luMzIueDg2IgkJCS0tPgorIAk8IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+CisJPHByb3BlcnR5IG5hbWU9ImFzc2VtYmxlLm9yZy5lY2xpcHNlLnN0ZW0uZmVhdHVyZS53aW4zMi53aW4zMi54ODYiIHZhbHVlPSJ0cnVlIiAvPgorIAk8dGFyZ2V0IG5hbWU9ImFzc2VtYmxlLm9yZy5lY2xpcHNlLnN0ZW0uZmVhdHVyZS53aW4zMi53aW4zMi54ODYiPgorIAkJPGFudCBhbnRmaWxlPSIke2Fzc2VtYmxlU2NyaXB0TmFtZX0iIGRpcj0iJHtidWlsZERpcmVjdG9yeX0iLz4KKyAJPC90YXJnZXQ+CisJCis8L3Byb2plY3Q+CmRpZmYgLS1naXQgYS9yZWxlbmcvb3JnLmVjbGlwc2Uuc3RlbS5yZWxlbmcvQ29uZmlnUHJvZHVjdC9idWlsZC5wcm9wZXJ0aWVzIGIvcmVsZW5nL29yZy5lY2xpcHNlLnN0ZW0ucmVsZW5nL0NvbmZpZ1Byb2R1Y3QvYnVpbGQucHJvcGVydGllcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYzUxMzAzCi0tLSAvZGV2L251bGwKKysrIGIvcmVsZW5nL29yZy5lY2xpcHNlLnN0ZW0ucmVsZW5nL0NvbmZpZ1Byb2R1Y3QvYnVpbGQucHJvcGVydGllcwpAQCAtMCwwICsxLDI0OCBAQAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBDb3B5cmlnaHQgKGMpIDIwMDMsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisjIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisjIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisjIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisjIAorIyBDb250cmlidXRvcnM6CisjICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBQYXJhbWV0ZXJzIGRlc2NyaWJpbmcgaG93IGFuZCB3aGVyZSB0byBleGVjdXRlIHRoZSBidWlsZC4KKyMgVHlwaWNhbCB1c2VycyBuZWVkIG9ubHkgdXBkYXRlIHRoZSBmb2xsb3dpbmcgcHJvcGVydGllczoKKyMgICAgYmFzZUxvY2F0aW9uIC0gd2hlcmUgdGhpbmdzIHlvdSBhcmUgYnVpbGRpbmcgYWdhaW5zdCBhcmUgaW5zdGFsbGVkCisjICAgIGJvb3RjbGFzc3BhdGggLSBUaGUgYmFzZSBqYXJzIHRvIGNvbXBpbGUgYWdhaW5zdCAodHlwaWNhbHkgcnQuamFyKQorIyAgICBjb25maWdzIC0gdGhlIGxpc3Qgb2Yge29zLCB3cywgYXJjaH0gY29uZmlndXJhdGlvbnMgdG8gYnVpbGQuICAKKyMKKyMgT2YgY291cnNlIGFueSBvZiB0aGUgc2V0dGluZ3MgaGVyZSBjYW4gYmUgb3ZlcnJpZGRlbiBieSBzcGVjJ2luZyAKKyMgdGhlbSBvbiB0aGUgY29tbWFuZCBsaW5lIChlLmcuLCAtRGJhc2VMb2NhdGlvbj1kOi9lY2xpcHNlCisKKyNUaGUgdHlwZSBvZiB0aGUgdG9wIGxldmVsIGVsZW1lbnQgd2UgYXJlIGJ1aWxkaW5nLCAgZ2VuZXJhbGx5ICJmZWF0dXJlIgordG9wTGV2ZWxFbGVtZW50VHlwZSA9IHByb2R1Y3QKKyNUaGUgaWQgb2YgdGhlIHRvcCBsZXZlbCBlbGVtZW50IHdlIGFyZSBidWlsZGluZwordG9wTGV2ZWxFbGVtZW50SWQgPSBvcmcuZWNsaXBzZS5zdGVtLnVpLnByb2R1Y3QKKworIyMjIyMjIyMjIyMjIyBQUk9EVUNUL1BBQ0tBR0lORyBDT05UUk9MICMjIyMjIyMjIyMjIyMKK3Byb2R1Y3Q9JHtiYXNlfS9Db25maWdQcm9kdWN0L3N0ZW0ucHJvZHVjdAorcnVuUGFja2FnZXI9dHJ1ZQorCisjU2V0IHRoZSBuYW1lIG9mIHRoZSBhcmNoaXZlIHRoYXQgd2lsbCByZXN1bHQgZnJvbSB0aGUgcHJvZHVjdCBidWlsZC4KKyNhcmNoaXZlTmFtZVByZWZpeD0KKworIyBUaGUgcHJlZml4IHRoYXQgd2lsbCBiZSB1c2VkIGluIHRoZSBnZW5lcmF0ZWQgYXJjaGl2ZS4KK2FyY2hpdmVQcmVmaXg9c3RlbQorCisjIFRoZSBsb2NhdGlvbiB1bmRlcndoaWNoIGFsbCBvZiB0aGUgYnVpbGQgb3V0cHV0IHdpbGwgYmUgY29sbGVjdGVkLgorY29sbGVjdGluZ0ZvbGRlcj0ke2FyY2hpdmVQcmVmaXh9CisKKworCitwMi5nYXRoZXJpbmcgPSB0cnVlCitnZW5lcmF0ZS5wMi5tZXRhZGF0YSA9IHRydWUKK3AyLm1ldGFkYXRhLnJlcG8gPSBmaWxlOi8vJHtidWlsZERpcmVjdG9yeX0vcmVwbworcDIuYXJ0aWZhY3QucmVwbyA9IGZpbGU6Ly8ke2J1aWxkRGlyZWN0b3J5fS9yZXBvCitwMi5mbGF2b3IgPSB0b29saW5nCitwMi5wdWJsaXNoLmFydGlmYWN0cyA9IHRydWUKK3AyLmRpcmVjdG9yLnByb2ZpbGU9U1RFTVByb2ZpbGUKKyNwMi5jYXRlZ29yeS5zaXRlPWZpbGU6Ly8ke2J1aWxkRGlyZWN0b3J5fS9zaXRlLnhtbAorCisKKyMgVGhlIGxpc3Qgb2Yge29zLCB3cywgYXJjaH0gY29uZmlndXJhdGlvbnMgdG8gYnVpbGQuICBUaGlzIAorIyB2YWx1ZSBpcyBhICcmJyBzZXBhcmF0ZWQgbGlzdCBvZiAnLCcgc2VwYXJhdGUgdHJpcGxlcy4gIEZvciBleGFtcGxlLCAKKyMgICAgIGNvbmZpZ3M9d2luMzIsd2luMzIseDg2ICYgbGludXgsbW90aWYseDg2CisjIEJ5IGRlZmF1bHQgdGhlIHZhbHVlIGlzICosKiwqCisjY29uZmlncyA9ICosICosICoKK2NvbmZpZ3M9d2luMzIsIHdpbjMyLCB4ODYgJiB3aW4zMiwgd2luMzIsIHg4Nl82NCAmIG1hY29zeCwgY29jb2EsIHg4NiAmIG1hY29zeCwgY29jb2EsIHg4Nl82NCAmIGxpbnV4LCBndGssIHg4NiAmIGxpbnV4LCBndGssIHg4Nl82NCAmIGxpbnV4LCBndGssIHBwYzY0CisjY29uZmlncz1tYWNvc3gsIGNvY29hLCB4ODYKKworCisKKyMJd2luMzIsIHdpbjMyLCB4ODYgJiBcCisjCWxpbnV4LCBndGssIHBwYyAmXAorIyBsaW51eCwgZ3RrLCB4ODYgJiBcCisjCWxpbnV4LCBndGssIHg4Nl82NCAmIFwKKyMJbGludXgsIG1vdGlmLCB4ODYgJiBcCisjCXNvbGFyaXMsIG1vdGlmLCBzcGFyYyAmIFwKKyMJc29sYXJpcywgZ3RrLCBzcGFyYyAmIFwKKyMJYWl4LCBtb3RpZiwgcHBjICYgXAorIwlocHV4LCBtb3RpZiwgUEFfUklTQyAmIFwKKyMJbWFjb3N4LCBjb2NvYSwgeDg2ICYgXAorIwltYWNvc3gsIGNhcmJvbiwgcHBjCisKKyMgQnkgZGVmYXVsdCBQREUgY3JlYXRlcyBvbmUgYXJjaGl2ZSAocmVzdWx0KSBwZXIgZW50cnkgbGlzdGVkIGluIHRoZSBjb25maWdzIHByb3BlcnR5LgorIyBTZXR0aW5nIHRoaXMgdmFsdWUgdG8gdHJ1ZSB3aWxsIGNhdXNlIFBERSB0byBvbmx5IGNyZWF0ZSBvbmUgb3V0cHV0IGNvbnRhaW5pbmcgYWxsIAorIyBhcnRpZmFjdHMgZm9yIGFsbCB0aGUgcGxhdGZvcm1zIGxpc3RlZCBpbiB0aGUgY29uZmlncyBwcm9wZXJ0eS4KKyMgVG8gY29udHJvbCB0aGUgb3V0cHV0IGZvcm1hdCBmb3IgdGhlIGdyb3VwLCBhZGQgYSAiZ3JvdXAsIGdyb3VwLCBncm91cCAtIDxmb3JtYXQ+IiBlbnRyeSB0byB0aGUKKyMgYXJjaGl2ZXNGb3JtYXQuIAorI2dyb3VwQ29uZmlndXJhdGlvbnM9dHJ1ZQorCisjVGhlIGZvcm1hdCBvZiB0aGUgYXJjaGl2ZS4gQnkgZGVmYXVsdCBhIHppcCBpcyBjcmVhdGVkIHVzaW5nIGFudFppcC4KKyNUaGUgbGlzdCBjYW4gb25seSBjb250YWluIHRoZSBjb25maWd1cmF0aW9uIGZvciB3aGljaCB0aGUgZGVzaXJlZCBmb3JtYXQgaXMgZGlmZmVyZW50IHRoYW4gemlwLgorI2FyY2hpdmVzRm9ybWF0PXdpbjMyLCB3aW4zMiwgeDg2IC0gYW50WmlwJiBcCisjCWxpbnV4LCBndGssIHBwYyAtIGFudFppcCAmXAorIyAgICBsaW51eCwgZ3RrLCB4ODYgLSBhbnRaaXAmIFwKKyMJbGludXgsIGd0aywgeDg2XzY0IC0gYW50WmlwJiBcCisjIGxpbnV4LCBtb3RpZiwgeDg2IC0gYW50WmlwJiBcCisjCXNvbGFyaXMsIG1vdGlmLCBzcGFyYyAtIGFudFppcCYgXAorIwlzb2xhcmlzLCBndGssIHNwYXJjIC0gYW50WmlwJiBcCisjCWFpeCwgbW90aWYsIHBwYyAtIGFudFppcCYgXAorIwlocHV4LCBtb3RpZiwgUEFfUklTQyAtIGFudFppcCYgXAorIwltYWNvc3gsIGNhcmJvbiwgcHBjIC0gYW50WmlwCisJCisjU2V0IHRvIHRydWUgaWYgeW91IHdhbnQgdGhlIG91dHB1dCB0byBiZSByZWFkeSBmb3IgYW4gdXBkYXRlIGphciAobm8gc2l0ZS54bWwgZ2VuZXJhdGVkKQorI291dHB1dFVwZGF0ZUphcnMgPSBmYWxzZQorCisjU2V0IHRvIHRydWUgZm9yIEpubHAgZ2VuZXJhdGlvbgorI2NvZGViYXNlIHNob3VsZCBiZSBhIFVSTCB0aGF0IHdpbGwgYmUgdXNlZCBhcyB0aGUgcm9vdCBvZiBhbGwgcmVsYXRpdmUgVVJMcyBpbiB0aGUgb3V0cHV0LgorI2dlbmVyYXRlSm5scD1mYWxzZQorI2pubHAuY29kZWJhc2U9PGNvZGViYXNlIHVybD4KKyNqbmxwLmoyc2U9PGoyc2UgdmVyc2lvbj4KKyNqbmxwLmxvY2FsZT08YSBsb2NhbGU+Cisjam5scC5nZW5lcmF0ZU9mZmxpbmVBbGxvd2VkPXRydWUgb3IgZmFsc2UgZ2VuZXJhdGUgPG9mZmxpbmVBbGxvd2VkLz4gYXR0cmlidXRlIGluIHRoZSBnZW5lcmF0ZWQgZmVhdHVyZXMKKyNqbmxwLmNvbmZpZ3M9JHtjb25maWdzfQkJCSN1bmNvbW1lbnQgdG8gZmlsdGVyIHRoZSBjb250ZW50IG9mIHRoZSBnZW5lcmF0ZWQgam5scCBmaWxlcyBiYXNlZCBvbiB0aGUgY29uZmlndXJhdGlvbiBiZWluZyBidWlsdAorCisjU2V0IHRvIHRydWUgaWYgeW91IHdhbnQgdG8gc2lnbiBqYXJzCisjc2lnbkphcnM9ZmFsc2UKKyNzaWduLmFsaWFzPTxhbGlhcz4KKyNzaWduLmtleXN0b3JlPTxrZXlzdG9yZSBsb2NhdGlvbj4KKyNzaWduLnN0b3JlcGFzcz08a2V5c3RvcmUgcGFzc3dvcmQ+CisKKyNBcmd1bWVudHMgdG8gc2VuZCB0byB0aGUgemlwIGV4ZWN1dGFibGUKK3ppcGFyZ3M9CisKKyNBcmd1bWVudHMgdG8gc2VuZCB0byB0aGUgdGFyIGV4ZWN1dGFibGUKK3RhcmFyZ3M9CisKKyNDb250cm9sIHRoZSBjcmVhdGlvbiBvZiBhIGZpbGUgY29udGFpbmluZyB0aGUgdmVyc2lvbiBpbmNsdWRlZCBpbiBlYWNoIGNvbmZpZ3VyYXRpb24gLSBvbiBieSBkZWZhdWx0IAorI2dlbmVyYXRlVmVyc2lvbnNMaXN0cz1mYWxzZQorCisjIyMjIyMjIyMjIyMjIyBCVUlMRCBOQU1JTkcgQ09OVFJPTCAjIyMjIyMjIyMjIyMjIyMjCisjIFRoZSBkaXJlY3RvcnkgaW50byB3aGljaCB0aGUgYnVpbGQgZWxlbWVudHMgYXJlIGZldGNoZWQgYW5kIHdoZXJlCisjIHRoZSBidWlsZCB0YWtlcyBwbGFjZS4KK2J1aWxkRGlyZWN0b3J5PSR7YmFzZX0vYnVpbGQKKworIyBUeXBlIG9mIGJ1aWxkLiAgVXNlZCBpbiBuYW1pbmcgdGhlIGJ1aWxkIG91dHB1dC4gIFR5cGljYWxseSB0aGlzIHZhbHVlIGlzCisjIG9uZSBvZiBJLCBOLCBNLCBTLCAuLi4KK2J1aWxkVHlwZT1JCisKKyMgSUQgb2YgdGhlIGJ1aWxkLiAgVXNlZCBpbiBuYW1pbmcgdGhlIGJ1aWxkIG91dHB1dC4KK2J1aWxkSWQ9V2Vla2x5QnVpbGQKKworIyBMYWJlbCBmb3IgdGhlIGJ1aWxkLiAgVXNlZCBpbiBuYW1pbmcgdGhlIGJ1aWxkIG91dHB1dAorYnVpbGRMYWJlbD0ke2J1aWxkVHlwZX0uJHtidWlsZElkfQorCisjIFRpbWVzdGFtcCBmb3IgdGhlIGJ1aWxkLiAgVXNlZCBpbiBuYW1pbmcgdGhlIGJ1aWxkIG91dHB1dAordGltZXN0YW1wPSR7UVVBTElGSUVSfQorCisjVGhlIHZhbHVlIHRvIGJlIHVzZWQgZm9yIHRoZSBxdWFsaWZpZXIgb2YgYSBwbHVnaW4gb3IgZmVhdHVyZSB3aGVuIHlvdSB3YW50IHRvIG92ZXJyaWRlIHRoZSB2YWx1ZSBjb21wdXRlZCBieSBwZGUuCisjVGhlIHZhbHVlIHdpbGwgb25seSBiZSBhcHBsaWVkIHRvIHBsdWdpbiBvciBmZWF0dXJlcyBpbmRpY2F0aW5nIGJ1aWxkLnByb3BlcnRpZXMsIHF1YWxpZmllciA9IGNvbnRleHQgCisjZm9yY2VDb250ZXh0UXVhbGlmaWVyPTx0aGUgdmFsdWUgZm9yIHRoZSBxdWFsaWZpZXI+CisKKyNFbmFibGUgLyBkaXNhYmxlIHRoZSBnZW5lcmF0aW9uIG9mIGEgc3VmZml4IGZvciB0aGUgZmVhdHVyZXMgdGhhdCB1c2UgLnF1YWxpZmllci4gCisjVGhlIGdlbmVyYXRlZCBzdWZmaXggaXMgY29tcHV0ZWQgYWNjb3JkaW5nIHRvIHRoZSBjb250ZW50IG9mIHRoZSBmZWF0dXJlICAgCisjZ2VuZXJhdGVGZWF0dXJlVmVyc2lvblN1ZmZpeD10cnVlCisKKyMjIyMjIyMjIyMjIyMgQkFTRSBDT05UUk9MICMjIyMjIyMjIyMjIyMKKyMgU2V0dGluZ3MgZm9yIHRoZSBiYXNlIEVjbGlwc2UgY29tcG9uZW50cyBhbmQgSmF2YSBjbGFzcyBsaWJyYXJpZXMgCisjIGFnYWluc3Qgd2hpY2ggeW91IGFyZSBidWlsZGluZy4KKyMgQmFzZSBsb2NhdGlvbiBmb3IgYW55dGhpbmcgdGhlIGJ1aWxkIG5lZWRzIHRvIGNvbXBpbGUgYWdhaW5zdC4gIEZvciBleGFtcGxlLAorIyBpbiBtb3N0IFJDUCBhcHAgb3IgYSBwbHVnLWluLCAgdGhlIGJhc2VMb2NhdGlvbiBzaG91bGQgYmUgdGhlIGxvY2F0aW9uIG9mIGEgcHJldmlvdXNseQorIyBpbnN0YWxsZWQgRWNsaXBzZSBhZ2FpbnN0IHdoaWNoIHRoZSBhcHBsaWNhdGlvbiBvciBwbHVnLWluIGNvZGUgd2lsbCBiZSBjb21waWxlZCBhbmQgdGhlIFJDUCBkZWx0YSBwYWNrLgorCisjYmFzZT08cGF0aC90by9wYXJlbnQvb2YvZWNsaXBzZT4KKyNiYXNlTG9jYXRpb249JHtiYXNlfS9lY2xpcHNlCisjT3MvV3MvQXJjaC9ubCBvZiB0aGUgZWNsaXBzZSBzcGVjaWZpZWQgYnkgYmFzZUxvY2F0aW9uCitiYXNlb3M9d2luMzIKK2Jhc2V3cz13aW4zMgorYmFzZWFyY2g9eDg2CisKKyN0aGlzIHByb3BlcnR5IGluZGljYXRlcyB3aGV0aGVyIHlvdSB3YW50IHRoZSBzZXQgb2YgcGx1Zy1pbnMgYW5kIGZlYXR1cmVzIHRvIGJlIGNvbnNpZGVyZWQgZHVyaW5nIHRoZSBidWlsZCB0byBiZSBsaW1pdGVkIHRvIHRoZSBvbmVzIHJlYWNoYWJsZSBmcm9tIHRoZSBmZWF0dXJlcyAvIHBsdWdpbnMgYmVpbmcgYnVpbHQKK2ZpbHRlcmVkRGVwZW5kZW5jeUNoZWNrPWZhbHNlCisKKyN0aGlzIHByb3BlcnR5IGluZGljYXRlcyB3aGV0aGVyIHRoZSByZXNvbHV0aW9uIHNob3VsZCBiZSBkb25lIGluIGRldmVsb3BtZW50IG1vZGUgKGkuZS4gaWdub3JlIG11bHRpcGxlIGJ1bmRsZXMgd2l0aCBzaW5nbGV0b25zKQorcmVzb2x1dGlvbi5kZXZNb2RlPWZhbHNlCisKKyNwbHVnaW5QYXRoIGlzIGEgbGlzdCBvZiBsb2NhdGlvbnMgaW4gd2hpY2ggdG8gZmluZCBwbHVnaW5zIGFuZCBmZWF0dXJlcy4gIFRoaXMgbGlzdCBpcyBzZXBhcmF0ZWQgYnkgdGhlIHBsYXRmb3JtIGZpbGUgc2VwYXJhdG9yICg7IG9yIDopCisjYSBsb2NhdGlvbiBpcyBvbmUgb2Y6ICAKKyMtIHRoZSBsb2NhdGlvbiBvZiB0aGUgamFyIG9yIGZvbGRlciB0aGF0IGlzIHRoZSBwbHVnaW4gb3IgZmVhdHVyZSA6IC9wYXRoL3RvL2Zvby5qYXIgb3IgL3BhdGgvdG8vZm9vCisjLSBhIGRpcmVjdG9yeSB0aGF0IGNvbnRhaW5zIGEgL3BsdWdpbnMgb3IgL2ZlYXR1cmVzIHN1YmRpcmVjdG9yeQorIy0gdGhlIGxvY2F0aW9uIG9mIGEgZmVhdHVyZS54bWwsIG9yIGZvciAyLjEgc3R5bGUgcGx1Z2lucywgdGhlIHBsdWdpbi54bWwgb3IgZnJhZ21lbnQueG1sCitwbHVnaW5QYXRoPSRCVUlMRF9IT01FCisKK3NraXBCYXNlPXRydWUKK2VjbGlwc2VVUkw9PHVybCBmb3IgZWNsaXBzZSBkb3dubG9hZCBzaXRlPgorZWNsaXBzZUJ1aWxkSWQ9PElkIG9mIEVjbGlwc2UgYnVpbGQgdG8gZ2V0PgorZWNsaXBzZUJhc2VVUkw9JHtlY2xpcHNlVVJMfS9lY2xpcHNlLXBsYXRmb3JtLSR7ZWNsaXBzZUJ1aWxkSWR9LXdpbjMyLnppcAorCisKKyMjIyMjIyMjIyMjIyMgTUFQIEZJTEUgQ09OVFJPTCAjIyMjIyMjIyMjIyMjIyMjCisjIFRoaXMgc2VjdGlvbiBkZWZpbmVzIENWUyB0YWdzIHRvIHVzZSB3aGVuIGZldGNoaW5nIHRoZSBtYXAgZmlsZXMgZnJvbSB0aGUgcmVwb3NpdG9yeS4KKyMgSWYgeW91IHdhbnQgdG8gZmV0Y2ggdGhlIG1hcCBmaWxlIGZyb20gcmVwb3NpdG9yeSAvIGxvY2F0aW9uLCBjaGFuZ2UgdGhlIGdldE1hcEZpbGVzIHRhcmdldCBpbiB0aGUgY3VzdG9tVGFyZ2V0cy54bWwKKworc2tpcE1hcHM9dHJ1ZQorbWFwc1JlcG89OnBzZXJ2ZXI6YW5vbnltb3VzQGV4YW1wbGUuY29tL3BhdGgvdG8vcmVwbworbWFwc1Jvb3Q9cGF0aC90by9tYXBzCittYXBzQ2hlY2tvdXRUYWc9SEVBRAorCisjdGFnTWFwcz10cnVlCittYXBzVGFnVGFnPXYke2J1aWxkSWR9CisKKworIyMjIyMjIyMjIyMjIFJFUE9TSVRPUlkgQ09OVFJPTCAjIyMjIyMjIyMjIyMjIyMKKyMgVGhpcyBzZWN0aW9uIGRlZmluZXMgcHJvcGVydGllcyBwYXJhbWV0ZXJpemluZyB0aGUgcmVwb3NpdG9yaWVzIHdoZXJlIHBsdWdpbnMsIGZyYWdtZW50cworIyBidW5kbGVzIGFuZCBmZWF0dXJlcyBhcmUgYmVpbmcgb2J0YWluZWQgZnJvbS4gCisKKyMgVGhlIHRhZ3MgdG8gdXNlIHdoZW4gZmV0Y2hpbmcgZWxlbWVudHMgdG8gYnVpbGQuCisjIEJ5IGRlZmF1bHQgdGhlYnVpbGRlciB3aWxsIHVzZSB3aGF0ZXZlciBpcyBpbiB0aGUgbWFwcy4gIAorIyBUaGlzIHZhbHVlIHRha2VzIHRoZSBmb3JtIG9mIGEgY29tbWEgc2VwYXJhdGVkIGxpc3Qgb2YgcmVwb3NpdG9yeSBpZGVudGlmaWVyIChsaWtlIHVzZWQgaW4gdGhlIG1hcCBmaWxlcykgYW5kIHRoZSAKKyMgb3ZlcnJpZGluZyB2YWx1ZQorIyBGb3IgZXhhbXBsZSBmZXRjaFRhZz1DVlM9SEVBRCwgU1ZOPXYyMDA1MDEwMQorZmV0Y2hUYWc9U1ZOPXRydW5rCitza2lwRmV0Y2g9dHJ1ZQorCisKKyMjIyMjIyMjIyMjIyMgSkFWQSBDT01QSUxFUiBPUFRJT05TICMjIyMjIyMjIyMjIyMjCisjIFRoZSBsb2NhdGlvbiBvZiB0aGUgSmF2YSBqYXJzIHRvIGNvbXBpbGUgYWdhaW5zdC4gIFR5cGljYWxseSB0aGUgcnQuamFyIGZvciB5b3VyIEpESy9KUkUKKyNib290Y2xhc3NwYXRoPSR7amF2YS5ob21lfS9saWIvcnQuamFyCisKKyMgc3BlY2lmaWMgSlJFIGxvY2F0aW9ucyB0byBjb21waWxlIGFnYWluc3QuIFRoZXNlIHZhbHVlcyBhcmUgdXNlZCB0byBjb21waWxlIGJ1bmRsZXMgc3BlY2lmeWluZyBhIAorIyBCdW5kbGUtUmVxdWlyZWRFeGVjdXRpb25FbnZpcm9ubWVudC4gVW5jb21tZW50IGFuZCBzZXQgdmFsdWVzIGZvciBlbnZpcm9ubWVudHMgdGhhdCB5b3Ugc3VwcG9ydAorI0NEQy0xLjAvRm91bmRhdGlvbi0xLjA9IC9wYXRoL3RvL3J0LmphcgorI0NEQy0xLjEvRm91bmRhdGlvbi0xLjE9CisjT1NHaS9NaW5pbXVtLTEuMD0KKyNPU0dpL01pbmltdW0tMS4xPQorI0pSRS0xLjE9CisjSjJTRS0xLjI9CisjSjJTRS0xLjM9CisjSjJTRS0xLjQ9CisjSjJTRS0xLjU9CisjSmF2YVNFLTEuNj0KKyNQZXJzb25hbEphdmEtMS4xPQorI1BlcnNvbmFsSmF2YS0xLjI9CisjQ0RDLTEuMC9QZXJzb25hbEJhc2lzLTEuMD0KKyNDREMtMS4wL1BlcnNvbmFsSmF2YS0xLjA9CisjQ0RDLTEuMS9QZXJzb25hbEJhc2lzLTEuMT0KKyNDREMtMS4xL1BlcnNvbmFsSmF2YS0xLjE9CisKKyMgU3BlY2lmeSB0aGUgb3V0cHV0IGZvcm1hdCBvZiB0aGUgY29tcGlsZXIgbG9nIHdoZW4gZWNsaXBzZSBqZHQgaXMgdXNlZAorbG9nRXh0ZW5zaW9uPS5sb2cKKworIyBXaGV0aGVyIG9yIG5vdCB0byBpbmNsdWRlIGRlYnVnIGluZm8gaW4gdGhlIG91dHB1dCBqYXJzCitqYXZhY0RlYnVnSW5mbz1mYWxzZSAKKworIyBXaGV0aGVyIG9yIG5vdCB0byBmYWlsIHRoZSBidWlsZCBpZiB0aGVyZSBhcmUgY29tcGlsZXIgZXJyb3JzCitqYXZhY0ZhaWxPbkVycm9yPXRydWUKKworIyBFbmFibGUgb3IgZGlzYWJsZSB2ZXJib3NlIG1vZGUgb2YgdGhlIGNvbXBpbGVyCitqYXZhY1ZlcmJvc2U9dHJ1ZQorCisjIEV4dHJhIGFyZ3VtZW50cyBmb3IgdGhlIGNvbXBpbGVyLiBUaGVzZSBhcmUgc3BlY2lmaWMgdG8gdGhlIGphdmEgY29tcGlsZXIgYmVpbmcgdXNlZC4KKyNjb21waWxlckFyZz0KKworIyBEZWZhdWx0IHZhbHVlIGZvciB0aGUgdmVyc2lvbiBvZiB0aGUgc291cmNlIGNvZGUuIFRoaXMgdmFsdWUgaXMgdXNlZCB3aGVuIGNvbXBpbGluZyBwbHVnLWlucyB0aGF0IGRvIG5vdCBzZXQgdGhlIEJ1bmRsZS1SZXF1aXJlZEV4ZWN1dGlvbkVudmlyb25tZW50IG9yIHNldCBqYXZhY1NvdXJjZSBpbiBidWlsZC5wcm9wZXJ0aWVzCitqYXZhY1NvdXJjZT0xLjYKKworIyBEZWZhdWx0IHZhbHVlIGZvciB0aGUgdmVyc2lvbiBvZiB0aGUgYnl0ZSBjb2RlIHRhcmdldGVkLiBUaGlzIHZhbHVlIGlzIHVzZWQgd2hlbiBjb21waWxpbmcgcGx1Zy1pbnMgdGhhdCBkbyBub3Qgc2V0IHRoZSBCdW5kbGUtUmVxdWlyZWRFeGVjdXRpb25FbnZpcm9ubWVudCBvciBzZXQgamF2YWNUYXJnZXQgaW4gYnVpbGQucHJvcGVydGllcy4KK2phdmFjVGFyZ2V0PTEuNgorCmRpZmYgLS1naXQgYS9yZWxlbmcvb3JnLmVjbGlwc2Uuc3RlbS5yZWxlbmcvQ29uZmlnUHJvZHVjdC9jdXN0b21UYXJnZXRzLnhtbCBiL3JlbGVuZy9vcmcuZWNsaXBzZS5zdGVtLnJlbGVuZy9Db25maWdQcm9kdWN0L2N1c3RvbVRhcmdldHMueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg4ZDdiMzIKLS0tIC9kZXYvbnVsbAorKysgYi9yZWxlbmcvb3JnLmVjbGlwc2Uuc3RlbS5yZWxlbmcvQ29uZmlnUHJvZHVjdC9jdXN0b21UYXJnZXRzLnhtbApAQCAtMCwwICsxLDM4OCBAQAorPHByb2plY3QgbmFtZT0iQnVpbGQgc3BlY2lmaWMgdGFyZ2V0cyBhbmQgcHJvcGVydGllcyIgZGVmYXVsdD0ibm9EZWZhdWx0Ij4KKworCQorCQorCTwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPgorCTwhLS0gUnVuIGEgZ2l2ZW4gJHt0YXJnZXR9IG9uIGFsbCBlbGVtZW50cyBiZWluZyBidWlsdCAtLT4KKwk8IS0tIEFkZCBvbiA8YW50PiB0YXNrIGZvciBlYWNoIHRvcCBsZXZlbCBlbGVtZW50IGJlaW5nIGJ1aWx0LiAtLT4KKwk8IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4JCisJPHByb3BlcnR5IG5hbWU9ImFsbEVsZW1lbnRzRmlsZSIgdmFsdWU9IiR7YnVpbGRlcn0vYWxsRWxlbWVudHMueG1sIiAvPgorCTxpbXBvcnQgZmlsZT0iJHthbGxFbGVtZW50c0ZpbGV9IiAvPgorCTx0YXJnZXQgbmFtZT0iYWxsRWxlbWVudHMiPgorCQk8YW50Y2FsbCB0YXJnZXQ9ImFsbEVsZW1lbnRzRGVsZWdhdG9yIiAvPgkJCisJPC90YXJnZXQ+CisJCisJPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+CisJPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+CisJPHRhcmdldCBuYW1lPSJnZXRCYXNlQ29tcG9uZW50cyIgZGVwZW5kcz0iY2hlY2tMb2NhbEJhc2UiIHVubGVzcz0ic2tpcEJhc2UiPgorCQk8Z2V0IHNyYz0iJHtlY2xpcHNlQmFzZVVSTH0iIGRlc3Q9IiR7YmFzZX0vdGVtcC1iYXNlLnppcCIgLz4KKwkJPHVuemlwIGRlc3Q9IiR7YmFzZX0iIG92ZXJ3cml0ZT0idHJ1ZSIgc3JjPSIke2Jhc2V9L3RlbXAtYmFzZS56aXAiIC8+CisJPC90YXJnZXQ+CisKKwk8dGFyZ2V0IG5hbWU9ImNoZWNrTG9jYWxCYXNlIj4KKwkJPGF2YWlsYWJsZSBmaWxlPSIke2Jhc2V9IiBwcm9wZXJ0eT0ic2tpcEJhc2UiIC8+CisJPC90YXJnZXQ+CisKKwk8IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4KKwk8IS0tIENoZWNrIG91dCBtYXAgZmlsZXMgZnJvbSBjb3JyZWN0IHJlcG9zaXRvcnkgLS0+CisJPCEtLSBSZXBsYWNlIHZhbHVlcyBmb3IgbWFwc0NoZWNrb3V0VGFnIGFzIGRlc2lyZWQuIC0tPgorCTwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPgorCTx0YXJnZXQgbmFtZT0iZ2V0TWFwRmlsZXMiIGRlcGVuZHM9ImNoZWNrTG9jYWxNYXBzIiB1bmxlc3M9InNraXBNYXBzIj4JCQorCQk8cHJvcGVydHkgbmFtZT0ibWFwc0NoZWNrb3V0VGFnIiB2YWx1ZT0iSEVBRCIgLz4KKwkJPGN2cyBjdnNSb290PSIke21hcHNSZXBvfSIgcGFja2FnZT0iJHttYXBzUm9vdH0iIGRlc3Q9IiR7YnVpbGREaXJlY3Rvcnl9L21hcHMiIHRhZz0iJHttYXBzQ2hlY2tvdXRUYWd9IiAvPgorCTwvdGFyZ2V0PgorCisJPHRhcmdldCBuYW1lPSJjaGVja0xvY2FsTWFwcyI+CisJCTxhdmFpbGFibGUgcHJvcGVydHk9InNraXBNYXBzIiBmaWxlPSIke2J1aWxkRGlyZWN0b3J5fS9tYXBzIiAvPgorCTwvdGFyZ2V0PgorCisJPHRhcmdldCBuYW1lPSJ0YWdNYXBGaWxlcyIgaWY9InRhZ01hcHMiPgorCQk8Y3ZzIGRlc3Q9IiR7YnVpbGREaXJlY3Rvcnl9L21hcHMvJHttYXBzUm9vdH0iIGNvbW1hbmQ9InRhZyAke21hcHNUYWdUYWd9IiAvPgorCTwvdGFyZ2V0PgorCisJPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+CisKKwk8dGFyZ2V0IG5hbWU9ImNsZWFuIiB1bmxlc3M9Im5vY2xlYW4iPgorCQk8YW50Y2FsbCB0YXJnZXQ9ImFsbEVsZW1lbnRzIj4KKwkJCTxwYXJhbSBuYW1lPSJ0YXJnZXQiIHZhbHVlPSJjbGVhbkVsZW1lbnQiIC8+CisJCTwvYW50Y2FsbD4KKwk8L3RhcmdldD4KKworCTwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPgorCTwhLS0gU3RlcHMgdG8gZG8gYmVmb3JlIHNldHVwIC0tPgorCTwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPgorCTx0eXBlZGVmIHJlc291cmNlPSJvcmcvdGlncmlzL3N1YnZlcnNpb24vc3ZuYW50L3N2bmFudGxpYi54bWwiIGNsYXNzcGF0aD0ic3ZuYW50LmphciIgLz4gCisJPHRhcmdldCBuYW1lPSJwcmVTZXR1cCI+CisJCTwhLS0gPHN2bj4KKwkJCTxjaGVja291dCB1cmw9InN2bjovL2Rldi5lY2xpcHNlLm9yZy9zdm5yb290L3RlY2hub2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS90cnVuayIgZGVzdFBhdGg9IiR7YmFzZX0vY2hlY2tvdXRfZGlyIiAvPgorCQk8L3N2bj4gLS0+CisJPC90YXJnZXQ+CisKKwk8IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4KKwk8IS0tIFN0ZXBzIHRvIGRvIGFmdGVyIHNldHVwIGJ1dCBiZWZvcmUgc3RhcnRpbmcgdGhlIGJ1aWxkIHByb3BlciAtLT4KKwk8IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4KKwk8dGFyZ2V0IG5hbWU9InBvc3RTZXR1cCI+CisJCTxhbnRjYWxsIHRhcmdldD0iZ2V0QmFzZUNvbXBvbmVudHMiIC8+CisJCTwhLS0gRmV0Y2ggdGhlIFVJIHBsdWdpbiBmaXJzdCBiZWNhdXNlIHRoYXQncyB3aGVyZSB0aGUgc3RlbS5wcm9kdWN0IGZpbGUgaXMgLS0+CisJCTwhLS08YW50IGFudGZpbGU9IiR7Z2VuZXJpY1RhcmdldHN9IiB0YXJnZXQ9ImZldGNoRWxlbWVudCI+CisJCQk8cHJvcGVydHkgbmFtZT0idHlwZSIgdmFsdWU9InBsdWdpbiIvPgorCQkJPHByb3BlcnR5IG5hbWU9ImlkIiB2YWx1ZT0ib3JnLmVjbGlwc2Uuc3RlbS51aSIvPgorCQk8L2FudD4tLT4KKwk8L3RhcmdldD4KKworCTwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPgorCTwhLS0gU3RlcHMgdG8gZG8gYmVmb3JlIGZldGNoaW5nIHRoZSBidWlsZCBlbGVtZW50cyAtLT4KKwk8IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4KKwk8dGFyZ2V0IG5hbWU9InByZUZldGNoIj4KKwk8L3RhcmdldD4KKworCTwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPgorCTwhLS0gU3RlcHMgdG8gZG8gYWZ0ZXIgZmV0Y2hpbmcgdGhlIGJ1aWxkIGVsZW1lbnRzIC0tPgorCTwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPgorCTx0YXJnZXQgbmFtZT0icG9zdEZldGNoIj4KKwkJPCEtLSBUaGlzIGNhbGwgd2FzIGFkZGVkIHRvIGdldCB0aGUgaW50ZXJuYWwgZGF0YSBwbHVnaW4gb3V0IG9mIHRoZSAgICAtLT4KKwkJPCEtLSByZXBvc2l0b3J5IHRvIGJlIHVzZWQgbGF0ZXIgdG8gYnVpbGQgdGhlIHN0ZW0uZ2VvZ3JhcGh5IHBsdWdpbiAgICAtLT4gICAgCisJCTwhLS1hbnQgYW50ZmlsZT0iJHtnZW5lcmljVGFyZ2V0c30iIHRhcmdldD0iZmV0Y2hFbGVtZW50Ij4KKwkJCTxwcm9wZXJ0eSBuYW1lPSJ0eXBlIiB2YWx1ZT0icGx1Z2luIi8+CisJCQk8cHJvcGVydHkgbmFtZT0iaWQiIHZhbHVlPSJvcmcuZWNsaXBzZS5zdGVtLmludGVybmFsLmRhdGEiLz4KKwkJPC9hbnQ+CisJCTxhbnQgYW50ZmlsZT0iJHtnZW5lcmljVGFyZ2V0c30iIHRhcmdldD0iZmV0Y2hFbGVtZW50Ij4KKwkJCTxwcm9wZXJ0eSBuYW1lPSJ0eXBlIiB2YWx1ZT0icGx1Z2luIi8+CisJCQk8cHJvcGVydHkgbmFtZT0iaWQiIHZhbHVlPSJvcmcuZWNsaXBzZS5zdGVtLnRyYW5zcG9ydCIvPgorCQk8L2FudC0tPgorCTwvdGFyZ2V0PgorCisJPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+CisJPCEtLSBTdGVwcyB0byBkbyBiZWZvcmUgZ2VuZXJhdGluZyB0aGUgYnVpbGQgc2NyaXB0cy4gLS0+CisJPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+CisJPHRhcmdldCBuYW1lPSJwcmVHZW5lcmF0ZSI+CisJPC90YXJnZXQ+CisKKwk8IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4KKwk8IS0tIFN0ZXBzIHRvIGRvIGFmdGVyIGdlbmVyYXRpbmcgdGhlIGJ1aWxkIHNjcmlwdHMuIC0tPgorCTwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPgorCTx0YXJnZXQgbmFtZT0icG9zdEdlbmVyYXRlIj4KKwkJPCEtLWFudCBhbnRmaWxlPSIke2dlbmVyaWNUYXJnZXRzfSIgdGFyZ2V0PSJnZW5lcmF0ZVNjcmlwdCI+CisJCQk8cHJvcGVydHkgbmFtZT0idHlwZSIgdmFsdWU9InBsdWdpbiIvPgorCQkJPHByb3BlcnR5IG5hbWU9ImlkIiB2YWx1ZT0ib3JnLmVjbGlwc2Uuc3RlbS50cmFuc3BvcnQiLz4KKwkJPC9hbnQ+CisJCTxhbnQgYW50ZmlsZT0iJHtnZW5lcmljVGFyZ2V0c30iIHRhcmdldD0iZ2VuZXJhdGVTY3JpcHQiPgorCQkJPHByb3BlcnR5IG5hbWU9InR5cGUiIHZhbHVlPSJwbHVnaW4iLz4KKwkJCTxwcm9wZXJ0eSBuYW1lPSJpZCIgdmFsdWU9Im9yZy5lY2xpcHNlLnN0ZW0uaW50ZXJuYWwuZGF0YSIvPgorCQk8L2FudC0tPgorCQk8IS0tYW50Y2FsbCB0YXJnZXQ9ImNsZWFuIiAvLS0+CisJPC90YXJnZXQ+CisKKwk8IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4KKwk8IS0tIFN0ZXBzIHRvIGRvIGJlZm9yZSBydW5uaW5nIHRoZSBidWlsZC54bWxzIGZvciB0aGUgZWxlbWVudHMgYmVpbmcgYnVpbHQuIC0tPgorCTwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPgorCTx0YXJnZXQgbmFtZT0icHJlUHJvY2VzcyI+CisJCTwhLS0KKwkJPGFudCBkaXI9IiR7YnVpbGREaXJlY3Rvcnl9L3BsdWdpbnMvb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS5pbmZyYXN0cnVjdHVyZS50cmFuc3BvcnRhdGlvbiIgYW50ZmlsZT0iYnVpbGQueG1sIiB0YXJnZXQ9IkBkb3QiLz4KKwkJLS0+CisJPC90YXJnZXQ+CisKKwk8IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4KKwk8IS0tIFN0ZXBzIHRvIGRvIGFmdGVyIHJ1bm5pbmcgdGhlIGJ1aWxkLnhtbHMgZm9yIHRoZSBlbGVtZW50cyBiZWluZyBidWlsdC4gLS0+CisJPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+CisJPHRhcmdldCBuYW1lPSJwb3N0UHJvY2VzcyI+CisJCTwhLS0gUnVuIHRoZSB1cGRhdGUueG1sIHNjcmlwdCBmcm9tIHRoZSBpbnRlcm5hbC5kYXRhIHBsdWdpbiB0byBnZW5lcmF0ZSBhbGwgaW50ZXJuYWwgZGF0YSAgLS0+CisJCTwhLS08YW50IGFudGZpbGU9IiR7YnVpbGREaXJlY3Rvcnl9L3BsdWdpbnMvb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcm5hbC5kYXRhL3VwZGF0ZS54bWwiLz4KKworCQk8YW50IGRpcj0iJHtidWlsZERpcmVjdG9yeX0vcGx1Z2lucy9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5IgorCQkJIGFudGZpbGU9ImJ1aWxkLnhtbCIgdGFyZ2V0PSJAZG90Ii8+CisJCS0tPgorCQkKKwkJPCEtLSBXZSBhcmUgYnVpbGRpbmcgdGhlIGRhdGEuZ2VvZ3JhcGh5IHBsdWdpbiBhZ2FpbiBzbyB0aGF0IHRoZSBmaWxlcyAgIC0tPgorCQk8IS0tIHRoYXQgd2VyZSBnZW5lcmF0ZWQgaW4gdGhlIHByZXZpb3VzIGFudCBjYWxsICh4eHhfbmFtZXMucHJvcGVydGllcykgLS0+CisJCTwhLS0gd2lsbCBiZSBjb3BpZWQgdG8gdGhlIGJpbmFyeSBmb2xkZXIgdG8gYmUgaW5jbHVkZWQgaW4gdGhlIGZpbmFsIGphci4tLT4KKworCQk8IS0tIFdlIGFyZSBidWlsZGluZyB0aGUgcGx1Z2luIGFnYWluIHNvIHRoYXQgdGhlIGZpbGVzIHRoYXQgd2VyZSAtLT4KKwkJPCEtLSBnZW5lcmF0ZWQgaW4gdGhlIHByZXZpb3VzIGFudCBjYWxsIHdpbGwgYmUgaW5jbHVkZWQgaW4gdGhlIGZpbmFsIGphci4tLT4KKwkJPCEtLWFudCBkaXI9IiR7YnVpbGREaXJlY3Rvcnl9L3BsdWdpbnMvb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS5pbmZyYXN0cnVjdHVyZS50cmFuc3BvcnRhdGlvbiIKKwkJCSBhbnRmaWxlPSJidWlsZC54bWwiIHRhcmdldD0iQGRvdCIvLS0+CisJCQorCQk8IS0tYW50IGRpcj0iJHtidWlsZERpcmVjdG9yeX0vcGx1Z2lucy9vcmcuZWNsaXBzZS5zdGVtLnRyYW5zcG9ydCIKKwkJCSBhbnRmaWxlPSJidWlsZC54bWwiIHRhcmdldD0iQGRvdCIvLS0+CisJCQkgCisJCTwhLS0gVGhlIGludGVybmFsIGRhdGEgcGx1Z2luIGlzbid0IGNvbXBpbGVkIGV2ZW4gdGhvdWdoIHdlIGdlbmVyYXRlIGl0cyAtLT4KKwkJPCEtLSBidWlsZC54bWwgZmlsZSBhYm92ZSBpbiBwb3N0R2VuZXJhdGUgLS0+CisJCTwhLS1hbnQgZGlyPSIke2J1aWxkRGlyZWN0b3J5fS9wbHVnaW5zL29yZy5lY2xpcHNlLnN0ZW0uaW50ZXJuYWwuZGF0YSIKKwkJCSBhbnRmaWxlPSJidWlsZC54bWwiIHRhcmdldD0iQGRvdCIvLS0+CisJPC90YXJnZXQ+CisKKwk8IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4KKwk8IS0tIFN0ZXBzIHRvIGRvIGJlZm9yZSBydW5uaW5nIGFzc2VtYmxlLiAtLT4KKwk8IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4KKwk8dGFyZ2V0IG5hbWU9InByZUFzc2VtYmxlIj4KKwk8L3RhcmdldD4KKworCTwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPgorCTwhLS0gU3RlcHMgdG8gZG8gYWZ0ZXIgIHJ1bm5pbmcgYXNzZW1ibGUuIC0tPgorCTwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPgorCTx0YXJnZXQgbmFtZT0icG9zdEFzc2VtYmxlIj4KKwk8L3RhcmdldD4KKworCTwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPgorCTwhLS0gU3RlcHMgdG8gZG8gYmVmb3JlIHJ1bm5pbmcgcGFja2FnZS4gLS0+CisJPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+CisJPHRhcmdldCBuYW1lPSJwcmVQYWNrYWdlIj4KKwkJCisJCTxlY2hvcHJvcGVydGllcy8+CisJCTwhLS0KKwkJPGRlbGV0ZSBpbmNsdWRlZW1wdHlkaXJzPSJ0cnVlIj4KKwkJCTxmaWxlc2V0IGRpcj0iJHtidWlsZERpcmVjdG9yeX0vcGx1Z2lucyIgZGVmYXVsdGV4Y2x1ZGVzPSJmYWxzZSI+CisJCQkgICA8aW5jbHVkZSBuYW1lPSIqKi9vcmcuZWNsaXBzZS5zdGVtLmludGVybmFsKi8qKiIgLz4KKwkJCTwvZmlsZXNldD4KKwkJPC9kZWxldGU+CisJCS0tPgorCTwvdGFyZ2V0PgorCisJPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+CisJPCEtLSBTdGVwcyB0byBkbyBhZnRlciAgcnVubmluZyBwYWNrYWdlLiAtLT4KKwk8IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4KKwk8dGFyZ2V0IG5hbWU9InBvc3RQYWNrYWdlIj4KKwkJCisJPC90YXJnZXQ+CisKKwk8IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4KKwk8IS0tIFN0ZXBzIHRvIGRvIGFmdGVyIHRoZSBidWlsZCBpcyBkb25lLiAtLT4KKwk8IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4KKwk8cHJvcGVydHkgbmFtZT0icGFja2FnZXNEaXIiIHZhbHVlPSIke2J1aWxkRGlyZWN0b3J5fS8ke2J1aWxkTGFiZWx9IiAvPgorCTwhLS08cHJvcGVydHkgbmFtZT0icGFja2FnZVBvc3RmaXgiIHZhbHVlPSIke21ham9yVmVyc2lvbn0uJHtmb3JjZUNvbnRleHRRdWFsaWZpZXJ9IiAvPi0tPgorCTxwcm9wZXJ0eSBuYW1lPSJwYWNrYWdlUG9zdGZpeCIgdmFsdWU9IiR7YnVpbGRMYWJlbFN1ZmZpeH0iIC8+CisJPHRhcmdldCBuYW1lPSJwb3N0QnVpbGQiPgorCQkKKwkJPGFudGNhbGwgdGFyZ2V0PSJ1cGRhdGVaaXBGaWxlIj4KKwkJCTxwYXJhbSBuYW1lPSJvc19jb25mIiB2YWx1ZT0ibWFjb3N4LmNvY29hLng4NiIvPgorCQk8L2FudGNhbGw+CisJCQorCQkKKwkJPGFudGNhbGwgdGFyZ2V0PSJ1cGRhdGVaaXBGaWxlIj4KKwkJCTxwYXJhbSBuYW1lPSJvc19jb25mIiB2YWx1ZT0ibWFjb3N4LmNvY29hLng4Nl82NCIvPgorCQk8L2FudGNhbGw+CisKKwkJPGFudGNhbGwgdGFyZ2V0PSJ1cGRhdGVaaXBGaWxlIj4KKwkJCTxwYXJhbSBuYW1lPSJvc19jb25mIiB2YWx1ZT0ibGludXguZ3RrLng4NiIvPgorCQk8L2FudGNhbGw+CisJCTxhbnRjYWxsIHRhcmdldD0idXBkYXRlWmlwRmlsZSI+CisJCQk8cGFyYW0gbmFtZT0ib3NfY29uZiIgdmFsdWU9ImxpbnV4Lmd0ay54ODZfNjQiLz4KKwkJPC9hbnRjYWxsPgorCQk8YW50Y2FsbCB0YXJnZXQ9InVwZGF0ZVppcEZpbGUiPgorCQkJPHBhcmFtIG5hbWU9Im9zX2NvbmYiIHZhbHVlPSJ3aW4zMi53aW4zMi54ODYiLz4KKwkJPC9hbnRjYWxsPgorCQk8YW50Y2FsbCB0YXJnZXQ9InVwZGF0ZVppcEZpbGUiPgorCQkJPHBhcmFtIG5hbWU9Im9zX2NvbmYiIHZhbHVlPSJ3aW4zMi53aW4zMi54ODZfNjQiLz4KKwkJPC9hbnRjYWxsPgkJCisJCTxhbnRjYWxsIHRhcmdldD0idXBkYXRlWmlwRmlsZSI+CisJCQk8cGFyYW0gbmFtZT0ib3NfY29uZiIgdmFsdWU9ImxpbnV4Lmd0ay5wcGM2NCIvPgorCQk8L2FudGNhbGw+CisJCQorCQkKKwkJCisJCTwhLS1tb3ZlIGZpbGU9IiR7cGFja2FnZXNEaXJ9LyR7YnVpbGRJZH0tbGludXguZ3RrLng4Ni56aXAiIHRvZmlsZT0iJHtwYWNrYWdlc0Rpcn0vU1RFTS1saW51eC5ndGsueDg2LSR7cGFja2FnZVBvc3RmaXh9LnppcCIvPgorCQk8bW92ZSBmaWxlPSIke3BhY2thZ2VzRGlyfS8ke2J1aWxkSWR9LWxpbnV4Lmd0ay54ODZfNjQuemlwIiB0b2ZpbGU9IiR7cGFja2FnZXNEaXJ9L1NURU0tbGludXguZ3RrLng4Nl82NC0ke3BhY2thZ2VQb3N0Zml4fS56aXAiLz4KKwkJPG1vdmUgZmlsZT0iJHtwYWNrYWdlc0Rpcn0vJHtidWlsZElkfS13aW4zMi53aW4zMi54ODYuemlwIiB0b2ZpbGU9IiR7cGFja2FnZXNEaXJ9L1NURU0td2luMzItJHtwYWNrYWdlUG9zdGZpeH0uemlwIi8+CisJCTxtb3ZlIGZpbGU9IiR7cGFja2FnZXNEaXJ9LyR7YnVpbGRJZH0tbWFjb3N4LmNhcmJvbi5wcGMuemlwIiB0b2ZpbGU9IiR7cGFja2FnZXNEaXJ9L1NURU0tbWFjb3N4LmNhcmJvbi5wcGMtJHtwYWNrYWdlUG9zdGZpeH0uemlwIi8+CisJCTxtb3ZlIGZpbGU9IiR7cGFja2FnZXNEaXJ9LyR7YnVpbGRJZH0tbWFjb3N4LmNvY29hLng4Ni56aXAiIHRvZmlsZT0iJHtwYWNrYWdlc0Rpcn0vU1RFTS1tYWNvc3guY29jb2EueDg2LSR7cGFja2FnZVBvc3RmaXh9LnppcCIvPgorCQk8bW92ZSBmaWxlPSIke3BhY2thZ2VzRGlyfS8ke2J1aWxkSWR9LWxpbnV4Lmd0ay5wcGMuemlwIiB0b2ZpbGU9IiR7cGFja2FnZXNEaXJ9L1NURU0tbGludXguZ3RrLnBwYy0ke3BhY2thZ2VQb3N0Zml4fS56aXAiLy0tPgorCQkKKwkJPCEtLSBBZGQgdGhlIGRlZmF1bHQgd29ya3NwYWNlIHRvIGFsbCB6aXAgZmlsZXMgLS0+CisJCTwhLS11bnppcCBzcmM9IiR7cGFja2FnZXNEaXJ9L1NURU0tbGludXguZ3RrLng4Ni0ke3BhY2thZ2VQb3N0Zml4fS56aXAiIGRlc3Q9IiR7cGFja2FnZXNEaXJ9Ly4uLy4uL3Jlc291cmNlcy9jb25maWd1cmF0aW9uIj4KKwkJCTxwYXR0ZXJuc2V0PgorCQkJCTxpbmNsdWRlIG5hbWU9InN0ZW0vY29uZmlndXJhdGlvbi9jb25maWcuaW5pIi8+CisJCQk8L3BhdHRlcm5zZXQ+CisJCQk8bWFwcGVyIHR5cGU9ImZsYXR0ZW4iLz4KKwkJPC91bnppcD4KKwkJPHByb3BlcnR5ZmlsZSBmaWxlPSIke3BhY2thZ2VzRGlyfS8uLi8uLi9yZXNvdXJjZXMvY29uZmlndXJhdGlvbi9jb25maWcuaW5pIj4KKwkJCTxlbnRyeSBrZXk9InN0ZW0uYnVpbGRJZCIgdmFsdWU9IiR7cGFja2FnZVBvc3RmaXh9Ii8+CisJCTwvcHJvcGVydHlmaWxlPgorCQk8emlwIGRlc3RmaWxlPSIke3BhY2thZ2VzRGlyfS9TVEVNLWxpbnV4Lmd0ay54ODYtJHtwYWNrYWdlUG9zdGZpeH0uemlwIiB1cGRhdGU9InRydWUiPgorCQkJPHppcGZpbGVzZXQgZGlyPSIke3BhY2thZ2VzRGlyfS8uLi8uLi9yZXNvdXJjZXMvd29ya3NwYWNlIiBwcmVmaXg9InN0ZW0vd29ya3NwYWNlIi8+CisJCQk8emlwZmlsZXNldCBkaXI9IiR7cGFja2FnZXNEaXJ9Ly4uLy4uL3Jlc291cmNlcy9jb25maWd1cmF0aW9uIiBwcmVmaXg9InN0ZW0vY29uZmlndXJhdGlvbiIvPgorCQk8L3ppcD4KKwkJPHppcCBkZXN0ZmlsZT0iJHtwYWNrYWdlc0Rpcn0vU1RFTS1saW51eC5ndGsueDg2XzY0LSR7cGFja2FnZVBvc3RmaXh9LnppcCIgdXBkYXRlPSJ0cnVlIj4KKwkJCTx6aXBmaWxlc2V0IGRpcj0iJHtwYWNrYWdlc0Rpcn0vLi4vLi4vcmVzb3VyY2VzL3dvcmtzcGFjZSIgcHJlZml4PSJzdGVtL3dvcmtzcGFjZSIvPgorCQk8L3ppcD4KKwkJPHppcCBkZXN0ZmlsZT0iJHtwYWNrYWdlc0Rpcn0vU1RFTS13aW4zMi0ke3BhY2thZ2VQb3N0Zml4fS56aXAiIHVwZGF0ZT0idHJ1ZSI+CisJCQk8emlwZmlsZXNldCBkaXI9IiR7cGFja2FnZXNEaXJ9Ly4uLy4uL3Jlc291cmNlcy93b3Jrc3BhY2UiIHByZWZpeD0ic3RlbS93b3Jrc3BhY2UiLz4KKwkJPC96aXA+CisJCTx6aXAgZGVzdGZpbGU9IiR7cGFja2FnZXNEaXJ9L1NURU0tbWFjb3N4LmNhcmJvbi5wcGMtJHtwYWNrYWdlUG9zdGZpeH0uemlwIiB1cGRhdGU9InRydWUiPgorCQkJPHppcGZpbGVzZXQgZGlyPSIke3BhY2thZ2VzRGlyfS8uLi8uLi9yZXNvdXJjZXMvd29ya3NwYWNlIiBwcmVmaXg9InN0ZW0vd29ya3NwYWNlIi8+CisJCTwvemlwPgorCQk8emlwIGRlc3RmaWxlPSIke3BhY2thZ2VzRGlyfS9TVEVNLW1hY29zeC5jb2NvYS54ODYtJHtwYWNrYWdlUG9zdGZpeH0uemlwIiB1cGRhdGU9InRydWUiPgorCQkJPHppcGZpbGVzZXQgZGlyPSIke3BhY2thZ2VzRGlyfS8uLi8uLi9yZXNvdXJjZXMvd29ya3NwYWNlIiBwcmVmaXg9InN0ZW0vd29ya3NwYWNlIi8+CisJCTwvemlwPgorCQk8emlwIGRlc3RmaWxlPSIke3BhY2thZ2VzRGlyfS9TVEVNLWxpbnV4Lmd0ay5wcGMtJHtwYWNrYWdlUG9zdGZpeH0uemlwIiB1cGRhdGU9InRydWUiPgorCQkJPHppcGZpbGVzZXQgZGlyPSIke3BhY2thZ2VzRGlyfS8uLi8uLi9yZXNvdXJjZXMvd29ya3NwYWNlIiBwcmVmaXg9InN0ZW0vd29ya3NwYWNlIi8+CisJCTwvemlwLS0+CisJCQorCQkKKwkJPGNvbmRpdGlvbiBwcm9wZXJ0eT0idG8ucHVibGlzaC5idWlsZCI+CisJCQk8aXN0cnVlIHZhbHVlPSIke3RvUHVibGlzaH0iLz4KKwkJPC9jb25kaXRpb24+CisJCQorCQk8YW50Y2FsbCB0YXJnZXQ9InB1Ymxpc2giIC8+CisJCQorCQk8IS0tIENoZWNrIGlmIHRoZXJlIGlzIGEgcmVxdWVzdCB0byBwdWJsaXNoIHRoZSBiaW5hcmllcyAtLT4KKwkJPCEtLTxpc3RydWUgdmFsdWU9IiR7dG9QdWJsaXNofSI+CisJCQk8YW50Y2FsbCB0YXJnZXQ9InB1Ymxpc2giIC8+CisJCQk8YW50Y2FsbCB0YXJnZXQ9InVwZGF0ZVdlYlNpdGVXaXRoV2Vla2x5QnVpbGQiIC8+CisJCTwvaXN0cnVlPi0tPgorCTwvdGFyZ2V0PgorCQorCTx0YXJnZXQgbmFtZT0idXBkYXRlWmlwRmlsZSI+CisJCTxtb3ZlIGZpbGU9IiR7cGFja2FnZXNEaXJ9LyR7YnVpbGRJZH0tJHtvc19jb25mfS56aXAiIHRvZmlsZT0iJHtwYWNrYWdlc0Rpcn0vU1RFTS0ke29zX2NvbmZ9LSR7cGFja2FnZVBvc3RmaXh9LnppcCIvPgorCQk8dW56aXAgc3JjPSIke3BhY2thZ2VzRGlyfS9TVEVNLSR7b3NfY29uZn0tJHtwYWNrYWdlUG9zdGZpeH0uemlwIiBkZXN0PSIke3BhY2thZ2VzRGlyfS8uLi8uLi9yZXNvdXJjZXMvY29uZmlndXJhdGlvbiI+CisJCQk8cGF0dGVybnNldD4KKwkJCQk8aW5jbHVkZSBuYW1lPSJzdGVtL2NvbmZpZ3VyYXRpb24vY29uZmlnLmluaSIvPgorCQkJPC9wYXR0ZXJuc2V0PgorCQkJPG1hcHBlciB0eXBlPSJmbGF0dGVuIi8+CisJCTwvdW56aXA+CisJCTxwcm9wZXJ0eWZpbGUgZmlsZT0iJHtwYWNrYWdlc0Rpcn0vLi4vLi4vcmVzb3VyY2VzL2NvbmZpZ3VyYXRpb24vY29uZmlnLmluaSI+CisJCQk8ZW50cnkga2V5PSJzdGVtLmJ1aWxkSWQiIHZhbHVlPSIke3BhY2thZ2VQb3N0Zml4fSIvPgorCQk8L3Byb3BlcnR5ZmlsZT4KKwkJPHppcCBkZXN0ZmlsZT0iJHtwYWNrYWdlc0Rpcn0vU1RFTS0ke29zX2NvbmZ9LSR7cGFja2FnZVBvc3RmaXh9LnppcCIgdXBkYXRlPSJ0cnVlIj4KKwkJCTx6aXBmaWxlc2V0IGRpcj0iJHtwYWNrYWdlc0Rpcn0vLi4vLi4vcmVzb3VyY2VzL3dvcmtzcGFjZSIgcHJlZml4PSJzdGVtL3dvcmtzcGFjZSIvPgorCQkJPCEtLTx6aXBmaWxlc2V0IGRpcj0iJHtwYWNrYWdlc0Rpcn0vLi4vLi4vcmVzb3VyY2VzL2NvbmZpZ3VyYXRpb24iIHByZWZpeD0ic3RlbS9jb25maWd1cmF0aW9uIi8+LS0+CisJCTwvemlwPgorCTwvdGFyZ2V0PgorCisJPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+CisJPCEtLSBTdGVwcyB0byBkbyB0byB0ZXN0IHRoZSBidWlsZCByZXN1bHRzIC0tPgorCTwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPgorCTx0YXJnZXQgbmFtZT0idGVzdCI+CisJCQorCTwvdGFyZ2V0PgorCisJPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+CisJPCEtLSBTdGVwcyB0byBkbyB0byBwdWJsaXNoIHRoZSBidWlsZCByZXN1bHRzIC0tPgorCTwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPgorCTxwcm9wZXJ0eSBuYW1lPSJwdWJsaXNoRGlyRmlsZVBhdGgiIHZhbHVlPSIke3B1Ymxpc2hEaXJ9LyR7YnVpbGRUeXBlRnVsbH0iIC8+CisJPHRhcmdldCBuYW1lPSJwdWJsaXNoIiBpZj0idG8ucHVibGlzaC5idWlsZCI+CisJCTwhLS0gSWYgcnVubmluZyBvdXRzaWRlIG9mIGJ1aWxkLmVjbGlwc2Uub3JnIG9yIGRvd25sb2FkMS5lY2xpcHNlLm9yZyBzZXJ2ZXJzIHRoZW4gdXNlIHRoaXMgb25lIHRvIFNDUCB0aGUgZmlsZXMgLS0+CisJCTwhLS1zY3AgdG9kaXI9IiR7dXNlcm5hbWV9OiR7cGFzc3dvcmR9QGRvd25sb2FkMS5lY2xpcHNlLm9yZzp+L2Rvd25sb2Fkcy9zdGVtIj4KKwkJCTxmaWxlc2V0IGRpcj0iJHtwYWNrYWdlc0Rpcn0iPgorCQkJCTxpbmNsdWRlIG5hbWU9IlNURU0tKi0ke3BhY2thZ2VQb3N0Zml4fS56aXAiLz4KKwkJCTwvZmlsZXNldD4KKwkJPC9zY3AtLT4KKwkJPCEtLSBJZiBydW5uaW5nIG9uIGJ1aWxkLmVjbGlwc2Uub3JnIG9yIGRvd25sb2FkMS5lY2xpcHNlLm9yZyBzZXJ2ZXJzLCB0aGVuIHVzZSB0aGlzIG9uZSB0byBjb3B5IHRoZSBmaWxlcyAtLT4KKwkJPG1rZGlyIGRpcj0iJHtwdWJsaXNoRGlyRmlsZVBhdGh9Ii8+CisJCQkJCisJCQkJCisJCTxjb25kaXRpb24gcHJvcGVydHk9ImNsZWFudXAucHVibGlzaC5kaXIuZmlyc3QiPgorCQkJPGlzdHJ1ZSB2YWx1ZT0iJHtjbGVhbnVwRmlyc3R9Ii8+CisJCTwvY29uZGl0aW9uPgorCQk8YW50Y2FsbCB0YXJnZXQ9ImNsZWFudXAucHVibGlzaC5kaXIiIC8+CisJCQkJCisJCTxjb3B5IHRvZGlyPSIke3B1Ymxpc2hEaXJGaWxlUGF0aH0iPgorCQkJPGZpbGVzZXQgZGlyPSIke3BhY2thZ2VzRGlyfSI+CisJCQkJPGluY2x1ZGUgbmFtZT0iU1RFTS0qLSR7cGFja2FnZVBvc3RmaXh9LnppcCIvPgorCQkJPC9maWxlc2V0PgorCQk8L2NvcHk+CisJCQorCQkKKwkJPHByb3BlcnR5ZmlsZSBmaWxlPSIke3B1Ymxpc2hEaXJ9L3ZlcnNpb25zIj4KKwkJCTxlbnRyeSBrZXk9IiR7YnVpbGRUeXBlRnVsbH0udmVyc2lvbiIgdmFsdWU9IiR7cGFja2FnZVBvc3RmaXh9Ii8+CisJCQk8ZW50cnkga2V5PSIke2J1aWxkVHlwZUZ1bGx9LmRhdGUiIHZhbHVlPSIke2J1aWxkRGF0ZX0iLz4KKwkJPC9wcm9wZXJ0eWZpbGU+CisJCQorCQkKKwk8L3RhcmdldD4KKwkKKwkKKwk8dGFyZ2V0IG5hbWU9ImNsZWFudXAucHVibGlzaC5kaXIiIGlmPSJjbGVhbnVwLnB1Ymxpc2guZGlyLmZpcnN0Ij4KKwkJPGRlbGV0ZT4KKyAgICAJCTxmaWxlc2V0IGRpcj0iJHtwdWJsaXNoRGlyRmlsZVBhdGh9IiBpbmNsdWRlcz0iKiovKiIvPgorICAJCTwvZGVsZXRlPgkKKwk8L3RhcmdldD4KKwkKKwk8dGFyZ2V0IG5hbWU9InVwZGF0ZVdlYlNpdGVXaXRoV2Vla2x5QnVpbGQiPgorCQk8IS0tIExvYWQgdGhlIHByb3BlcnRpZXMgZmlsZSB3aGljaCBob2xkcyB0aGUgbGFzdCB3ZWVrbHkvc3RhYmxlIGJ1aWxkIHBvc3RmaXhlcyAtLT4KKwkJPGxvYWRwcm9wZXJ0aWVzPgorCQkJPGZpbGUgZmlsZT0iJHtiYXNlfS9teS5wcm9wZXJ0aWVzIi8+CisJCTwvbG9hZHByb3BlcnRpZXM+CisJCQorCQk8IS0tIENoZWNrb3V0L3VwZGF0ZWQgdGhlIFNURU0gd2Vic2l0ZSBmaWxlcyBmcm9tIENWUyAtLT4KKwkJPGN2cyBjdnNSb290PSIke3VzZXJuYW1lfUBkZXYuZWNsaXBzZS5vcmc6L2N2c3Jvb3Qvb3JnLmVjbGlwc2UiCisJCQlwYWNrYWdlPSJ3d3cvc3RlbSIKKwkJCWRlc3Q9IiR7YnVpbGREaXJlY3Rvcnl9IgorCQkvPgorCQkKKwkJPCEtLSBVcGRhdGUgdGhlIGRvd25sb2Fkcy5waHAgZmlsZSAtLT4KKwkJPHJlcGxhY2VyZWdleHAgYnlsaW5lPSJ0cnVlIj4KKwkJCTxyZWdleHAgcGF0dGVybj0iJHtsYXN0V2Vla2x5QnVpbGR9Ii8+CisJCQk8c3Vic3RpdHV0aW9uIGV4cHJlc3Npb249IiR7cGFja2FnZVBvc3RmaXh9Ii8+CisJCQk8ZmlsZXNldCBkaXI9IiR7YmFzZX0vd3d3L3N0ZW0iPgorCQkJCTxpbmNsdWRlIG5hbWU9ImRvd25sb2Fkcy5waHAiLz4KKwkJCTwvZmlsZXNldD4KKwkJPC9yZXBsYWNlcmVnZXhwPgorCQkKKwkJPCEtLSBDb21taXQgdGhlIHVwZGF0ZWQgZG93bmxvYWRzLnBocCBmaWxlIGludG8gQ1ZTIC0tPgorCQk8Y3ZzIGN2c1Jvb3Q9IiR7dXNlcm5hbWV9QGRldi5lY2xpcHNlLm9yZzovY3Zzcm9vdC9vcmcuZWNsaXBzZSIKKwkJCXBhY2thZ2U9Ind3dy9zdGVtIgorCQkJZGVzdD0iJHtidWlsZERpcmVjdG9yeX0vLi4iIAorCQkJY29tbWFuZD0iY29tbWl0IC1tICdVcGRhdGVkIHRvIFdlZWtseSBJbnRlZ3JhdGlvbiBCdWlsZCAke3BhY2thZ2VQb3N0Zml4fSciLz4KKworCQk8IS0tIFNhdmUgdGhlIHVwZGF0ZWQgcG9zdGZpeCBvZiB0aGUgd2Vla2x5IGJ1aWxkIGludG8gdGhlIHByb3BlcnRpZXMgZmlsZSAtLT4KKwkJPHByb3BlcnR5ZmlsZSBmaWxlPSIke2Jhc2V9L215LnByb3BlcnRpZXMiPgorCQkJPGVudHJ5ICBrZXk9Imxhc3RXZWVrbHlCdWlsZCIgdmFsdWU9IiR7cGFja2FnZVBvc3RmaXh9Ii8+CisJCQk8ZW50cnkgIGtleT0ibGFzdFN0YWJsZUJ1aWxkIiB2YWx1ZT0iJHtsYXN0U3RhYmxlQnVpbGR9Ii8+CisJCTwvcHJvcGVydHlmaWxlPgorCQkKKwkJPCEtLSBEZWxldGUgdGhlIHByZXZpb3VzIHdlZWtseSBidWlsZCBmaWxlcyBmcm9tIHRoZSBwdWJsaXNoIGRpcmVjdG9yeSAtLT4KKwkJPGRlbGV0ZT4KKwkJCTxmaWxlc2V0IGRpcj0iJHtwdWJsaXNoRGlyfSI+CisJCQkJPGluY2x1ZGUgbmFtZT0iU1RFTS0qLSR7bGFzdFdlZWtseUJ1aWxkfS56aXAiLz4KKwkJCTwvZmlsZXNldD4KKwkJPC9kZWxldGU+CisJPC90YXJnZXQ+CisKKwk8IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4KKwk8IS0tIERlZmF1bHQgdGFyZ2V0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLT4KKwk8IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4KKwk8dGFyZ2V0IG5hbWU9Im5vRGVmYXVsdCI+CisJCTxlY2hvIG1lc3NhZ2U9IllvdSBtdXN0IHNwZWNpZnkgYSB0YXJnZXQgd2hlbiBpbnZva2luZyB0aGlzIGZpbGUiIC8+CisJPC90YXJnZXQ+CisKKzwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL3JlbGVuZy9vcmcuZWNsaXBzZS5zdGVtLnJlbGVuZy9Db25maWdQcm9kdWN0L3AyLmluZiBiL3JlbGVuZy9vcmcuZWNsaXBzZS5zdGVtLnJlbGVuZy9Db25maWdQcm9kdWN0L3AyLmluZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YmViNjk2Ci0tLSAvZGV2L251bGwKKysrIGIvcmVsZW5nL29yZy5lY2xpcHNlLnN0ZW0ucmVsZW5nL0NvbmZpZ1Byb2R1Y3QvcDIuaW5mCkBAIC0wLDAgKzEsMTYxIEBACitpbnN0cnVjdGlvbnMuY29uZmlndXJlPVwKK2FkZFJlcG9zaXRvcnkodHlwZTowLGxvY2F0aW9uOmh0dHAkeyM1OH0vL2Rvd25sb2FkLmVjbGlwc2Uub3JnL3N0ZW0vdXBkYXRlLXNpdGUvLG5hbWU6U1RFTSBBZGQtb25zKTtcCithZGRSZXBvc2l0b3J5KHR5cGU6MSxsb2NhdGlvbjpodHRwJHsjNTh9Ly9kb3dubG9hZC5lY2xpcHNlLm9yZy9zdGVtL3VwZGF0ZS1zaXRlLyxuYW1lOlNURU0gQWRkLW9ucyk7XAorbWtkaXIocGF0aDoke2luc3RhbGxGb2xkZXJ9L2Ryb3BpbnMpO1wKK29yZy5lY2xpcHNlLmVxdWlub3gucDIudG91Y2hwb2ludC5uYXRpdmVzLnJlbW92ZShwYXRoOiR7aW5zdGFsbEZvbGRlcn0vbGF1bmNoZXIpO1wKK29yZy5lY2xpcHNlLmVxdWlub3gucDIudG91Y2hwb2ludC5uYXRpdmVzLnJlbW92ZShwYXRoOiR7aW5zdGFsbEZvbGRlcn0vbGF1bmNoZXIuZXhlKTtcCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIERpc2FibGUgRWNsaXBzZSBGZWF0dXJlIFBsdWdpbnMgIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworcmVxdWlyZXMuMC5uYW1lc3BhY2U9b3JnLmVjbGlwc2UuZXF1aW5veC5wMi5pdQorcmVxdWlyZXMuMC5uYW1lPWNvbmZpZ3VyZS5vcmcuZWNsaXBzZS5zZWFyY2gKK3JlcXVpcmVzLjAucmFuZ2U9WyR2ZXJzaW9uJCwkdmVyc2lvbiRdCityZXF1aXJlcy4wLmdyZWVkeT10cnVlCisKK3VuaXRzLjAuaWQ9Y29uZmlndXJlLm9yZy5lY2xpcHNlLnNlYXJjaAordW5pdHMuMC52ZXJzaW9uPSR2ZXJzaW9uJAordW5pdHMuMC5wcm92aWRlcy4xLm5hbWVzcGFjZT1vcmcuZWNsaXBzZS5lcXVpbm94LnAyLml1Cit1bml0cy4wLnByb3ZpZGVzLjEubmFtZT1jb25maWd1cmUub3JnLmVjbGlwc2Uuc2VhcmNoCit1bml0cy4wLnByb3ZpZGVzLjEudmVyc2lvbj0kdmVyc2lvbiQKK3VuaXRzLjAuaW5zdHJ1Y3Rpb25zLmluc3RhbGw9Cit1bml0cy4wLmhvc3RSZXF1aXJlbWVudHMuMS5uYW1lc3BhY2U9b3NnaS5idW5kbGUKK3VuaXRzLjAuaG9zdFJlcXVpcmVtZW50cy4xLm5hbWU9b3JnLmVjbGlwc2Uuc2VhcmNoCit1bml0cy4wLmhvc3RSZXF1aXJlbWVudHMuMS5yYW5nZT1bMC4wLjAsMTAuMC4wXQordW5pdHMuMC5ob3N0UmVxdWlyZW1lbnRzLjEuZ3JlZWR5PWZhbHNlCit1bml0cy4wLmhvc3RSZXF1aXJlbWVudHMuMi5uYW1lc3BhY2U9b3JnLmVjbGlwc2UuZXF1aW5veC5wMi5lY2xpcHNlLnR5cGUKK3VuaXRzLjAuaG9zdFJlcXVpcmVtZW50cy4yLm5hbWU9YnVuZGxlCit1bml0cy4wLmhvc3RSZXF1aXJlbWVudHMuMi5yYW5nZT1bMC4wLjAsMTAuMC4wKQordW5pdHMuMC5ob3N0UmVxdWlyZW1lbnRzLjIuZ3JlZWR5PWZhbHNlCit1bml0cy4wLnJlcXVpcmVzLjEubmFtZXNwYWNlPW9zZ2kuYnVuZGxlCit1bml0cy4wLnJlcXVpcmVzLjEubmFtZT1vcmcuZWNsaXBzZS5zZWFyY2gKK3VuaXRzLjAucmVxdWlyZXMuMS5yYW5nZT1bMC4wLjAsMTAuMC4wXQordW5pdHMuMC5yZXF1aXJlcy4xLmdyZWVkeT1mYWxzZQorCisjIGRpc2FibGUgb3JnLmVjbGlwc2UudWkuZXh0ZXJuYWx0b29scworcmVxdWlyZXMuMS5uYW1lc3BhY2U9b3JnLmVjbGlwc2UuZXF1aW5veC5wMi5pdQorcmVxdWlyZXMuMS5uYW1lPWNvbmZpZ3VyZS5vcmcuZWNsaXBzZS51aS5leHRlcm5hbHRvb2xzCityZXF1aXJlcy4xLnJhbmdlPVskdmVyc2lvbiQsJHZlcnNpb24kXQorcmVxdWlyZXMuMS5ncmVlZHk9dHJ1ZQorCit1bml0cy4xLmlkPWNvbmZpZ3VyZS5vcmcuZWNsaXBzZS51aS5leHRlcm5hbHRvb2xzCit1bml0cy4xLnZlcnNpb249JHZlcnNpb24kCit1bml0cy4xLnByb3ZpZGVzLjEubmFtZXNwYWNlPW9yZy5lY2xpcHNlLmVxdWlub3gucDIuaXUKK3VuaXRzLjEucHJvdmlkZXMuMS5uYW1lPWNvbmZpZ3VyZS5vcmcuZWNsaXBzZS51aS5leHRlcm5hbHRvb2xzCit1bml0cy4xLnByb3ZpZGVzLjEudmVyc2lvbj0kdmVyc2lvbiQKK3VuaXRzLjEuaW5zdHJ1Y3Rpb25zLmluc3RhbGw9Cit1bml0cy4xLmhvc3RSZXF1aXJlbWVudHMuMS5uYW1lc3BhY2U9b3NnaS5idW5kbGUKK3VuaXRzLjEuaG9zdFJlcXVpcmVtZW50cy4xLm5hbWU9b3JnLmVjbGlwc2UudWkuZXh0ZXJuYWx0b29scwordW5pdHMuMS5ob3N0UmVxdWlyZW1lbnRzLjEucmFuZ2U9WzAuMC4wLDEwLjAuMF0KK3VuaXRzLjEuaG9zdFJlcXVpcmVtZW50cy4xLmdyZWVkeT1mYWxzZQordW5pdHMuMS5ob3N0UmVxdWlyZW1lbnRzLjIubmFtZXNwYWNlPW9yZy5lY2xpcHNlLmVxdWlub3gucDIuZWNsaXBzZS50eXBlCit1bml0cy4xLmhvc3RSZXF1aXJlbWVudHMuMi5uYW1lPWJ1bmRsZQordW5pdHMuMS5ob3N0UmVxdWlyZW1lbnRzLjIucmFuZ2U9WzAuMC4wLDEwLjAuMCkKK3VuaXRzLjEuaG9zdFJlcXVpcmVtZW50cy4yLmdyZWVkeT1mYWxzZQordW5pdHMuMS5yZXF1aXJlcy4xLm5hbWVzcGFjZT1vc2dpLmJ1bmRsZQordW5pdHMuMS5yZXF1aXJlcy4xLm5hbWU9b3JnLmVjbGlwc2UudWkuZXh0ZXJuYWx0b29scwordW5pdHMuMS5yZXF1aXJlcy4xLnJhbmdlPVswLjAuMCwxMC4wLjBdCit1bml0cy4xLnJlcXVpcmVzLjEuZ3JlZWR5PWZhbHNlCisKKyMgZGlzYWJsZSBvcmcuZWNsaXBzZS5jb3JlLmV4dGVybmFsdG9vbHMKK3JlcXVpcmVzLjIubmFtZXNwYWNlPW9yZy5lY2xpcHNlLmVxdWlub3gucDIuaXUKK3JlcXVpcmVzLjIubmFtZT1jb25maWd1cmUub3JnLmVjbGlwc2UuY29yZS5leHRlcm5hbHRvb2xzCityZXF1aXJlcy4yLnJhbmdlPVskdmVyc2lvbiQsJHZlcnNpb24kXQorcmVxdWlyZXMuMi5ncmVlZHk9dHJ1ZQorCit1bml0cy4yLmlkPWNvbmZpZ3VyZS5vcmcuZWNsaXBzZS5jb3JlLmV4dGVybmFsdG9vbHMKK3VuaXRzLjIudmVyc2lvbj0kdmVyc2lvbiQKK3VuaXRzLjIucHJvdmlkZXMuMS5uYW1lc3BhY2U9b3JnLmVjbGlwc2UuZXF1aW5veC5wMi5pdQordW5pdHMuMi5wcm92aWRlcy4xLm5hbWU9Y29uZmlndXJlLm9yZy5lY2xpcHNlLmNvcmUuZXh0ZXJuYWx0b29scwordW5pdHMuMi5wcm92aWRlcy4xLnZlcnNpb249JHZlcnNpb24kCit1bml0cy4yLmluc3RydWN0aW9ucy5pbnN0YWxsPQordW5pdHMuMi5ob3N0UmVxdWlyZW1lbnRzLjEubmFtZXNwYWNlPW9zZ2kuYnVuZGxlCit1bml0cy4yLmhvc3RSZXF1aXJlbWVudHMuMS5uYW1lPW9yZy5lY2xpcHNlLmNvcmUuZXh0ZXJuYWx0b29scwordW5pdHMuMi5ob3N0UmVxdWlyZW1lbnRzLjEucmFuZ2U9WzAuMC4wLDEwLjAuMF0KK3VuaXRzLjIuaG9zdFJlcXVpcmVtZW50cy4xLmdyZWVkeT1mYWxzZQordW5pdHMuMi5ob3N0UmVxdWlyZW1lbnRzLjIubmFtZXNwYWNlPW9yZy5lY2xpcHNlLmVxdWlub3gucDIuZWNsaXBzZS50eXBlCit1bml0cy4yLmhvc3RSZXF1aXJlbWVudHMuMi5uYW1lPWJ1bmRsZQordW5pdHMuMi5ob3N0UmVxdWlyZW1lbnRzLjIucmFuZ2U9WzAuMC4wLDEwLjAuMCkKK3VuaXRzLjIuaG9zdFJlcXVpcmVtZW50cy4yLmdyZWVkeT1mYWxzZQordW5pdHMuMi5yZXF1aXJlcy4xLm5hbWVzcGFjZT1vc2dpLmJ1bmRsZQordW5pdHMuMi5yZXF1aXJlcy4xLm5hbWU9b3JnLmVjbGlwc2UuY29yZS5leHRlcm5hbHRvb2xzCit1bml0cy4yLnJlcXVpcmVzLjEucmFuZ2U9WzAuMC4wLDEwLjAuMF0KK3VuaXRzLjIucmVxdWlyZXMuMS5ncmVlZHk9ZmFsc2UKKworIyBkaXNhYmxlIG9yZy5lY2xpcHNlLmRlYnVnLmNvcmUKK3JlcXVpcmVzLjMubmFtZXNwYWNlPW9yZy5lY2xpcHNlLmVxdWlub3gucDIuaXUKK3JlcXVpcmVzLjMubmFtZT1jb25maWd1cmUub3JnLmVjbGlwc2UuZGVidWcuY29yZQorcmVxdWlyZXMuMy5yYW5nZT1bJHZlcnNpb24kLCR2ZXJzaW9uJF0KK3JlcXVpcmVzLjMuZ3JlZWR5PXRydWUKKwordW5pdHMuMy5pZD1jb25maWd1cmUub3JnLmVjbGlwc2UuZGVidWcuY29yZQordW5pdHMuMy52ZXJzaW9uPSR2ZXJzaW9uJAordW5pdHMuMy5wcm92aWRlcy4xLm5hbWVzcGFjZT1vcmcuZWNsaXBzZS5lcXVpbm94LnAyLml1Cit1bml0cy4zLnByb3ZpZGVzLjEubmFtZT1jb25maWd1cmUub3JnLmVjbGlwc2UuZGVidWcuY29yZQordW5pdHMuMy5wcm92aWRlcy4xLnZlcnNpb249JHZlcnNpb24kCit1bml0cy4zLmluc3RydWN0aW9ucy5pbnN0YWxsPQordW5pdHMuMy5ob3N0UmVxdWlyZW1lbnRzLjEubmFtZXNwYWNlPW9zZ2kuYnVuZGxlCit1bml0cy4zLmhvc3RSZXF1aXJlbWVudHMuMS5uYW1lPW9yZy5lY2xpcHNlLmRlYnVnLmNvcmUKK3VuaXRzLjMuaG9zdFJlcXVpcmVtZW50cy4xLnJhbmdlPVswLjAuMCwxMC4wLjBdCit1bml0cy4zLmhvc3RSZXF1aXJlbWVudHMuMS5ncmVlZHk9ZmFsc2UKK3VuaXRzLjMuaG9zdFJlcXVpcmVtZW50cy4yLm5hbWVzcGFjZT1vcmcuZWNsaXBzZS5lcXVpbm94LnAyLmVjbGlwc2UudHlwZQordW5pdHMuMy5ob3N0UmVxdWlyZW1lbnRzLjIubmFtZT1idW5kbGUKK3VuaXRzLjMuaG9zdFJlcXVpcmVtZW50cy4yLnJhbmdlPVswLjAuMCwxMC4wLjApCit1bml0cy4zLmhvc3RSZXF1aXJlbWVudHMuMi5ncmVlZHk9ZmFsc2UKK3VuaXRzLjMucmVxdWlyZXMuMS5uYW1lc3BhY2U9b3NnaS5idW5kbGUKK3VuaXRzLjMucmVxdWlyZXMuMS5uYW1lPW9yZy5lY2xpcHNlLmRlYnVnLmNvcmUKK3VuaXRzLjMucmVxdWlyZXMuMS5yYW5nZT1bMC4wLjAsMTAuMC4wXQordW5pdHMuMy5yZXF1aXJlcy4xLmdyZWVkeT1mYWxzZQorCisjIGRpc2FibGUgb3JnLmVjbGlwc2UuZGVidWcudWkKK3JlcXVpcmVzLjQubmFtZXNwYWNlPW9yZy5lY2xpcHNlLmVxdWlub3gucDIuaXUKK3JlcXVpcmVzLjQubmFtZT1jb25maWd1cmUub3JnLmVjbGlwc2UuZGVidWcudWkKK3JlcXVpcmVzLjQucmFuZ2U9WyR2ZXJzaW9uJCwkdmVyc2lvbiRdCityZXF1aXJlcy40LmdyZWVkeT10cnVlCisKK3VuaXRzLjQuaWQ9Y29uZmlndXJlLm9yZy5lY2xpcHNlLmRlYnVnLnVpCit1bml0cy40LnZlcnNpb249JHZlcnNpb24kCit1bml0cy40LnByb3ZpZGVzLjEubmFtZXNwYWNlPW9yZy5lY2xpcHNlLmVxdWlub3gucDIuaXUKK3VuaXRzLjQucHJvdmlkZXMuMS5uYW1lPWNvbmZpZ3VyZS5vcmcuZWNsaXBzZS5kZWJ1Zy51aQordW5pdHMuNC5wcm92aWRlcy4xLnZlcnNpb249JHZlcnNpb24kCit1bml0cy40Lmluc3RydWN0aW9ucy5pbnN0YWxsPQordW5pdHMuNC5ob3N0UmVxdWlyZW1lbnRzLjEubmFtZXNwYWNlPW9zZ2kuYnVuZGxlCit1bml0cy40Lmhvc3RSZXF1aXJlbWVudHMuMS5uYW1lPW9yZy5lY2xpcHNlLmRlYnVnLnVpCit1bml0cy40Lmhvc3RSZXF1aXJlbWVudHMuMS5yYW5nZT1bMC4wLjAsMTAuMC4wXQordW5pdHMuNC5ob3N0UmVxdWlyZW1lbnRzLjEuZ3JlZWR5PWZhbHNlCit1bml0cy40Lmhvc3RSZXF1aXJlbWVudHMuMi5uYW1lc3BhY2U9b3JnLmVjbGlwc2UuZXF1aW5veC5wMi5lY2xpcHNlLnR5cGUKK3VuaXRzLjQuaG9zdFJlcXVpcmVtZW50cy4yLm5hbWU9YnVuZGxlCit1bml0cy40Lmhvc3RSZXF1aXJlbWVudHMuMi5yYW5nZT1bMC4wLjAsMTAuMC4wKQordW5pdHMuNC5ob3N0UmVxdWlyZW1lbnRzLjIuZ3JlZWR5PWZhbHNlCit1bml0cy40LnJlcXVpcmVzLjEubmFtZXNwYWNlPW9zZ2kuYnVuZGxlCit1bml0cy40LnJlcXVpcmVzLjEubmFtZT1vcmcuZWNsaXBzZS5kZWJ1Zy51aQordW5pdHMuNC5yZXF1aXJlcy4xLnJhbmdlPVswLjAuMCwxMC4wLjBdCit1bml0cy40LnJlcXVpcmVzLjEuZ3JlZWR5PWZhbHNlCisKKworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMjIyBDdXN0b21pemUgTWFjIE9TIFggV29ya3NwYWNlIExvY2F0aW9uICMjIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK3JlcXVpcmVzLjUubmFtZXNwYWNlPW9yZy5lY2xpcHNlLmVxdWlub3gucDIuaXUKK3JlcXVpcmVzLjUubmFtZT10b29saW5nLm9yZy5lY2xpcHNlLmNvbmZpZ3VyYXRpb24ubWFjb3N4CityZXF1aXJlcy41LmZpbHRlcj0ob3NnaS5vcz1tYWNvc3gpCityZXF1aXJlcy41LnJhbmdlPVsxLjAuMCwxLjAuMF0KK3JlcXVpcmVzLjUuZ3JlZWR5PXRydWUKKwordW5pdHMuNS5pZD10b29saW5nLm9yZy5lY2xpcHNlLmNvbmZpZ3VyYXRpb24ubWFjb3N4Cit1bml0cy41LnZlcnNpb249MS4wLjAKK3VuaXRzLjUucHJvdmlkZXMuMS5uYW1lc3BhY2U9b3JnLmVjbGlwc2UuZXF1aW5veC5wMi5pdQordW5pdHMuNS5wcm92aWRlcy4xLm5hbWU9dG9vbGluZy5vcmcuZWNsaXBzZS5jb25maWd1cmF0aW9uLm1hY29zeAordW5pdHMuNS5wcm92aWRlcy4xLnZlcnNpb249MS4wLjAKK3VuaXRzLjUuZmlsdGVyPShvc2dpLm9zPW1hY29zeCkKK3VuaXRzLjUudG91Y2hwb2ludC5pZD1vcmcuZWNsaXBzZS5lcXVpbm94LnAyLm9zZ2kKK3VuaXRzLjUudG91Y2hwb2ludC52ZXJzaW9uPTEuMC4wCit1bml0cy41Lmluc3RydWN0aW9ucy5jb25maWd1cmU9c2V0UHJvZ3JhbVByb3BlcnR5KHByb3BOYW1lOm9zZ2kuaW5zdGFuY2UuYXJlYS5kZWZhdWx0LHByb3BWYWx1ZTouLi8uLi8uLi93b3Jrc3BhY2UpOwordW5pdHMuNS5pbnN0cnVjdGlvbnMudW5jb25maWd1cmU9c2V0UHJvZ3JhbVByb3BlcnR5KHByb3BOYW1lOm9zZ2kuaW5zdGFuY2UuYXJlYS5kZWZhdWx0LHByb3BWYWx1ZTopOworCisKKworCmRpZmYgLS1naXQgYS9yZWxlbmcvb3JnLmVjbGlwc2Uuc3RlbS5yZWxlbmcvQ29uZmlnUHJvZHVjdC9zdGVtLnByb2R1Y3QgYi9yZWxlbmcvb3JnLmVjbGlwc2Uuc3RlbS5yZWxlbmcvQ29uZmlnUHJvZHVjdC9zdGVtLnByb2R1Y3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDI4MjRiMAotLS0gL2Rldi9udWxsCisrKyBiL3JlbGVuZy9vcmcuZWNsaXBzZS5zdGVtLnJlbGVuZy9Db25maWdQcm9kdWN0L3N0ZW0ucHJvZHVjdApAQCAtMCwwICsxLDE5MCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzw/cGRlIHZlcnNpb249IjMuNSI/PgorCis8cHJvZHVjdCBuYW1lPSJTVEVNIiB1aWQ9Im9yZy5lY2xpcHNlLnN0ZW0udWkucHJvZHVjdCIgaWQ9Im9yZy5lY2xpcHNlLnN0ZW0udWkucHJvZHVjdCIgYXBwbGljYXRpb249Im9yZy5lY2xpcHNlLnN0ZW0udWkuQ29yZUVkaXRvckFkdmlzb3JBcHBsaWNhdGlvbiIgdmVyc2lvbj0iMS4yLjEiIHVzZUZlYXR1cmVzPSJ0cnVlIiBpbmNsdWRlTGF1bmNoZXJzPSJ0cnVlIj4KKworICAgPGFib3V0SW5mbz4KKyAgICAgIDxpbWFnZSBwYXRoPSIvb3JnLmVjbGlwc2Uuc3RlbS51aS9icmFuZGluZy9vaGY2NF82NF8zMi5naWYiLz4KKyAgICAgIDx0ZXh0PgorICAgICAgICAgU1RFTSAtIFNwYXRpb3RlbXBvcmFsIEVwaWRlbW9sb2dpY2FsIE1vZGVsZXIKKyAgICAgIDwvdGV4dD4KKyAgIDwvYWJvdXRJbmZvPgorCisgICA8Y29uZmlnSW5pIHVzZT0iZGVmYXVsdCI+CisgICA8L2NvbmZpZ0luaT4KKworICAgPGxhdW5jaGVyQXJncz4KKyAgICAgIDxwcm9ncmFtQXJncz4tY29uc29sZSAtY29uc29sZUxvZzwvcHJvZ3JhbUFyZ3M+CisgICAgICA8dm1BcmdzPi1YbXM0MDBNIC1YbXg2MDBNPC92bUFyZ3M+CisgICA8L2xhdW5jaGVyQXJncz4KKworICAgPHdpbmRvd0ltYWdlcyBpMTY9Ii9vcmcuZWNsaXBzZS5zdGVtLnVpL2JyYW5kaW5nL29oZjE2XzE2XzMyLmdpZiIgaTMyPSIvb3JnLmVjbGlwc2Uuc3RlbS51aS9icmFuZGluZy9vaGYzMl8zMl8zMi5naWYiIGk0OD0iL29yZy5lY2xpcHNlLnN0ZW0udWkvYnJhbmRpbmcvb2hmNDhfNDhfMzIuZ2lmIiBpNjQ9Ii9vcmcuZWNsaXBzZS5zdGVtLnVpL2JyYW5kaW5nL29oZjY0XzY0XzMyLmdpZiIgaTEyOD0iL29yZy5lY2xpcHNlLnN0ZW0udWkvYnJhbmRpbmcvb2hmMTI4XzEyOF8zMi5naWYiLz4KKworICAgPHNwbGFzaAorICAgICAgbG9jYXRpb249Im9yZy5lY2xpcHNlLnN0ZW0udWkiCisgICAgICBzdGFydHVwUHJvZ3Jlc3NSZWN0PSIwLDQxMyw0MzEsMTUiCisgICAgICBzdGFydHVwTWVzc2FnZVJlY3Q9IjEwLDM4MCw0MzEsMjAiCisgICAgICBzdGFydHVwRm9yZWdyb3VuZENvbG9yPSJGRkZGRkYiIC8+CisgICA8bGF1bmNoZXIgbmFtZT0iU1RFTSI+CisgICAgICA8bGludXggaWNvbj0iL29yZy5lY2xpcHNlLnN0ZW0udWkvYnJhbmRpbmcvU1RFTTEyOF8xMjhfMzIueHBtIi8+CisgICAgICA8bWFjb3N4IGljb249Ii9vcmcuZWNsaXBzZS5zdGVtLnVpL2JyYW5kaW5nL1NURU0xMjhfMTI4XzMyLmljbnMiLz4KKyAgICAgIDxzb2xhcmlzLz4KKyAgICAgIDx3aW4gdXNlSWNvPSJmYWxzZSI+CisgICAgICAgICA8Ym1wCisgICAgICAgICAgICB3aW5TbWFsbExvdz0iL29yZy5lY2xpcHNlLnN0ZW0udWkvYnJhbmRpbmcvb2hmMTZfMTZfOC5ibXAiCisgICAgICAgICAgICB3aW5NZWRpdW1Mb3c9Ii9vcmcuZWNsaXBzZS5zdGVtLnVpL2JyYW5kaW5nL29oZjMyXzMyXzguYm1wIgorICAgICAgICAgICAgd2luTGFyZ2VMb3c9Ii9vcmcuZWNsaXBzZS5zdGVtLnVpL2JyYW5kaW5nL29oZjQ4XzQ4XzguYm1wIi8+CisgICAgICA8L3dpbj4KKyAgIDwvbGF1bmNoZXI+CisKKyAgIDx2bT4KKyAgIDwvdm0+CisKKyAgIDxsaWNlbnNlPgorICAgICAgICA8dXJsPmh0dHA6Ly9lY2xpcHNlLm9yZy9sZWdhbC9lcGwvbm90aWNlLnBocDwvdXJsPgorICAgICAgICA8dGV4dD4KKyAgIDMyCSAgIEVjbGlwc2UgRm91bmRhdGlvbiBTb2Z0d2FyZSBVc2VyIEFncmVlbWVudAorMzMJRmVicnVhcnkgMSwgMjAxMQorMzQJCiszNQlVc2FnZSBPZiBDb250ZW50CiszNgkKKzM3CVRIRSBFQ0xJUFNFIEZPVU5EQVRJT04gTUFLRVMgQVZBSUxBQkxFIFNPRlRXQVJFLCBET0NVTUVOVEFUSU9OLCBJTkZPUk1BVElPTiBBTkQvT1IKKzM4CU9USEVSIE1BVEVSSUFMUyBGT1IgT1BFTiBTT1VSQ0UgUFJPSkVDVFMgKENPTExFQ1RJVkVMWSAmcXVvdDtDT05URU5UJnF1b3Q7KS4KKzM5CVVTRSBPRiBUSEUgQ09OVEVOVCBJUyBHT1ZFUk5FRCBCWSBUSEUgVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgVEhJUworNDAJQUdSRUVNRU5UIEFORC9PUiBUSEUgVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgTElDRU5TRSBBR1JFRU1FTlRTIE9SCis0MQlOT1RJQ0VTIElORElDQVRFRCBPUiBSRUZFUkVOQ0VEIEJFTE9XLiAgQlkgVVNJTkcgVEhFIENPTlRFTlQsIFlPVQorNDIJQUdSRUUgVEhBVCBZT1VSIFVTRSBPRiBUSEUgQ09OVEVOVCBJUyBHT1ZFUk5FRCBCWSBUSElTIEFHUkVFTUVOVAorNDMJQU5EL09SIFRIRSBURVJNUyBBTkQgQ09ORElUSU9OUyBPRiBBTlkgQVBQTElDQUJMRSBMSUNFTlNFIEFHUkVFTUVOVFMKKzQ0CU9SIE5PVElDRVMgSU5ESUNBVEVEIE9SIFJFRkVSRU5DRUQgQkVMT1cuICBJRiBZT1UgRE8gTk9UIEFHUkVFIFRPIFRIRQorNDUJVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgVEhJUyBBR1JFRU1FTlQgQU5EIFRIRSBURVJNUyBBTkQgQ09ORElUSU9OUworNDYJT0YgQU5ZIEFQUExJQ0FCTEUgTElDRU5TRSBBR1JFRU1FTlRTIE9SIE5PVElDRVMgSU5ESUNBVEVEIE9SIFJFRkVSRU5DRUQKKzQ3CUJFTE9XLCBUSEVOIFlPVSBNQVkgTk9UIFVTRSBUSEUgQ09OVEVOVC4KKzQ4CQorNDkJQXBwbGljYWJsZSBMaWNlbnNlcworNTAJCis1MQlVbmxlc3Mgb3RoZXJ3aXNlIGluZGljYXRlZCwgYWxsIENvbnRlbnQgbWFkZSBhdmFpbGFibGUgYnkgdGhlCis1MglFY2xpcHNlIEZvdW5kYXRpb24gaXMgcHJvdmlkZWQgdG8geW91IHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZgorNTMJdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjAgKCZxdW90O0VQTCZxdW90OykuIEEgY29weSBvZiB0aGUgRVBMIGlzCis1NAlwcm92aWRlZCB3aXRoIHRoaXMgQ29udGVudCBhbmQgaXMgYWxzbyBhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwuCis1NQlGb3IgcHVycG9zZXMgb2YgdGhlIEVQTCwgJnF1b3Q7UHJvZ3JhbSZxdW90OyB3aWxsIG1lYW4gdGhlIENvbnRlbnQuCis1NgkKKzU3CUNvbnRlbnQgaW5jbHVkZXMsIGJ1dCBpcyBub3QgbGltaXRlZCB0bywgc291cmNlIGNvZGUsIG9iamVjdCBjb2RlLAorNTgJZG9jdW1lbnRhdGlvbiBhbmQgb3RoZXIgZmlsZXMgbWFpbnRhaW5lZCBpbiB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uIHNvdXJjZSBjb2RlCis1OQlyZXBvc2l0b3J5ICgmcXVvdDtSZXBvc2l0b3J5JnF1b3Q7KSBpbiBzb2Z0d2FyZSBtb2R1bGVzICgmcXVvdDtNb2R1bGVzJnF1b3Q7KSBhbmQgbWFkZSBhdmFpbGFibGUKKzYwCWFzIGRvd25sb2FkYWJsZSBhcmNoaXZlcyAoJnF1b3Q7RG93bmxvYWRzJnF1b3Q7KS4KKzYxCQorNjIJICAgICAgLSBDb250ZW50IG1heSBiZSBzdHJ1Y3R1cmVkIGFuZCBwYWNrYWdlZCBpbnRvIG1vZHVsZXMgdG8gZmFjaWxpdGF0ZSBkZWxpdmVyaW5nLAorNjMJICAgICAgICAgZXh0ZW5kaW5nLCBhbmQgdXBncmFkaW5nIHRoZSBDb250ZW50LiBUeXBpY2FsIG1vZHVsZXMgbWF5IGluY2x1ZGUgcGx1Zy1pbnMgKCZxdW90O1BsdWctaW5zJnF1b3Q7KSwKKzY0CSAgICAgICAgIHBsdWctaW4gZnJhZ21lbnRzICgmcXVvdDtGcmFnbWVudHMmcXVvdDspLCBhbmQgZmVhdHVyZXMgKCZxdW90O0ZlYXR1cmVzJnF1b3Q7KS4KKzY1CSAgICAgICAtIEVhY2ggUGx1Zy1pbiBvciBGcmFnbWVudCBtYXkgYmUgcGFja2FnZWQgYXMgYSBzdWItZGlyZWN0b3J5IG9yIEpBUiAoSmF2YShUTSkgQVJjaGl2ZSkKKzY2CSAgICAgICAgIGluIGEgZGlyZWN0b3J5IG5hbWVkICZxdW90O3BsdWdpbnMmcXVvdDsuCis2NwkgICAgICAgLSBBIEZlYXR1cmUgaXMgYSBidW5kbGUgb2Ygb25lIG9yIG1vcmUgUGx1Zy1pbnMgYW5kL29yIEZyYWdtZW50cyBhbmQgYXNzb2NpYXRlZCBtYXRlcmlhbC4KKzY4CSAgICAgICAgIEVhY2ggRmVhdHVyZSBtYXkgYmUgcGFja2FnZWQgYXMgYSBzdWItZGlyZWN0b3J5IGluIGEgZGlyZWN0b3J5IG5hbWVkICZxdW90O2ZlYXR1cmVzJnF1b3Q7LgorNjkJICAgICAgICAgV2l0aGluIGEgRmVhdHVyZSwgZmlsZXMgbmFtZWQgJnF1b3Q7ZmVhdHVyZS54bWwmcXVvdDsgbWF5IGNvbnRhaW4gYSBsaXN0IG9mIHRoZSBuYW1lcyBhbmQgdmVyc2lvbgorNzAJICAgICAgICAgbnVtYmVycyBvZiB0aGUgUGx1Zy1pbnMgYW5kL29yIEZyYWdtZW50cyBhc3NvY2lhdGVkIHdpdGggdGhhdCBGZWF0dXJlLgorNzEJICAgICAgIC0gRmVhdHVyZXMgbWF5IGFsc28gaW5jbHVkZSBvdGhlciBGZWF0dXJlcyAoJnF1b3Q7SW5jbHVkZWQgRmVhdHVyZXMmcXVvdDspLiBXaXRoaW4gYSBGZWF0dXJlLCBmaWxlcworNzIJICAgICAgICAgbmFtZWQgJnF1b3Q7ZmVhdHVyZS54bWwmcXVvdDsgbWF5IGNvbnRhaW4gYSBsaXN0IG9mIHRoZSBuYW1lcyBhbmQgdmVyc2lvbiBudW1iZXJzIG9mIEluY2x1ZGVkIEZlYXR1cmVzLgorNzMJCis3NAlUaGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgZ292ZXJuaW5nIFBsdWctaW5zIGFuZCBGcmFnbWVudHMgc2hvdWxkIGJlCis3NQljb250YWluZWQgaW4gZmlsZXMgbmFtZWQgJnF1b3Q7YWJvdXQuaHRtbCZxdW90OyAoJnF1b3Q7QWJvdXRzJnF1b3Q7KS4gVGhlIHRlcm1zIGFuZAorNzYJY29uZGl0aW9ucyBnb3Zlcm5pbmcgRmVhdHVyZXMgYW5kIEluY2x1ZGVkIEZlYXR1cmVzIHNob3VsZCBiZSBjb250YWluZWQKKzc3CWluIGZpbGVzIG5hbWVkICZxdW90O2xpY2Vuc2UuaHRtbCZxdW90OyAoJnF1b3Q7RmVhdHVyZSBMaWNlbnNlcyZxdW90OykuIEFib3V0cyBhbmQgRmVhdHVyZQorNzgJTGljZW5zZXMgbWF5IGJlIGxvY2F0ZWQgaW4gYW55IGRpcmVjdG9yeSBvZiBhIERvd25sb2FkIG9yIE1vZHVsZQorNzkJaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG8gdGhlIGZvbGxvd2luZyBsb2NhdGlvbnM6Cis4MAkKKzgxCSAgICAgICAtIFRoZSB0b3AtbGV2ZWwgKHJvb3QpIGRpcmVjdG9yeQorODIJICAgICAgIC0gUGx1Zy1pbiBhbmQgRnJhZ21lbnQgZGlyZWN0b3JpZXMKKzgzCSAgICAgICAtIEluc2lkZSBQbHVnLWlucyBhbmQgRnJhZ21lbnRzIHBhY2thZ2VkIGFzIEpBUnMKKzg0CSAgICAgICAtIFN1Yi1kaXJlY3RvcmllcyBvZiB0aGUgZGlyZWN0b3J5IG5hbWVkICZxdW90O3NyYyZxdW90OyBvZiBjZXJ0YWluIFBsdWctaW5zCis4NQkgICAgICAgLSBGZWF0dXJlIGRpcmVjdG9yaWVzCis4NgkKKzg3CU5vdGU6IGlmIGEgRmVhdHVyZSBtYWRlIGF2YWlsYWJsZSBieSB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uIGlzIGluc3RhbGxlZCB1c2luZyB0aGUKKzg4CVByb3Zpc2lvbmluZyBUZWNobm9sb2d5IChhcyBkZWZpbmVkIGJlbG93KSwgeW91IG11c3QgYWdyZWUgdG8gYSBsaWNlbnNlICgmcXVvdDtGZWF0dXJlIAorODkJVXBkYXRlIExpY2Vuc2UmcXVvdDspIGR1cmluZyB0aGUgaW5zdGFsbGF0aW9uIHByb2Nlc3MuIElmIHRoZSBGZWF0dXJlIGNvbnRhaW5zCis5MAlJbmNsdWRlZCBGZWF0dXJlcywgdGhlIEZlYXR1cmUgVXBkYXRlIExpY2Vuc2Ugc2hvdWxkIGVpdGhlciBwcm92aWRlIHlvdQorOTEJd2l0aCB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgZ292ZXJuaW5nIHRoZSBJbmNsdWRlZCBGZWF0dXJlcyBvciBpbmZvcm0KKzkyCXlvdSB3aGVyZSB5b3UgY2FuIGxvY2F0ZSB0aGVtLiBGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlcyBtYXkgYmUgZm91bmQgaW4KKzkzCXRoZSAmcXVvdDtsaWNlbnNlJnF1b3Q7IHByb3BlcnR5IG9mIGZpbGVzIG5hbWVkICZxdW90O2ZlYXR1cmUucHJvcGVydGllcyZxdW90OyBmb3VuZCB3aXRoaW4gYSBGZWF0dXJlLgorOTQJU3VjaCBBYm91dHMsIEZlYXR1cmUgTGljZW5zZXMsIGFuZCBGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlcyBjb250YWluIHRoZQorOTUJdGVybXMgYW5kIGNvbmRpdGlvbnMgKG9yIHJlZmVyZW5jZXMgdG8gc3VjaCB0ZXJtcyBhbmQgY29uZGl0aW9ucykgdGhhdAorOTYJZ292ZXJuIHlvdXIgdXNlIG9mIHRoZSBhc3NvY2lhdGVkIENvbnRlbnQgaW4gdGhhdCBkaXJlY3RvcnkuCis5NwkKKzk4CVRIRSBBQk9VVFMsIEZFQVRVUkUgTElDRU5TRVMsIEFORCBGRUFUVVJFIFVQREFURSBMSUNFTlNFUyBNQVkgUkVGRVIKKzk5CVRPIFRIRSBFUEwgT1IgT1RIRVIgTElDRU5TRSBBR1JFRU1FTlRTLCBOT1RJQ0VTIE9SIFRFUk1TIEFORCBDT05ESVRJT05TLgorMTAwCVNPTUUgT0YgVEhFU0UgT1RIRVIgTElDRU5TRSBBR1JFRU1FTlRTIE1BWSBJTkNMVURFIChCVVQgQVJFIE5PVCBMSU1JVEVEIFRPKToKKzEwMQkKKzEwMgkgICAgICAgLSBFY2xpcHNlIERpc3RyaWJ1dGlvbiBMaWNlbnNlIFZlcnNpb24gMS4wIChhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9saWNlbnNlcy9lZGwtdjEuMC5odG1sKQorMTAzCSAgICAgICAtIENvbW1vbiBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMCAoYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvY3BsLXYxMC5odG1sKQorMTA0CSAgICAgICAtIEFwYWNoZSBTb2Z0d2FyZSBMaWNlbnNlIDEuMSAoYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFKQorMTA1CSAgICAgICAtIEFwYWNoZSBTb2Z0d2FyZSBMaWNlbnNlIDIuMCAoYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMCkKKzEwNgkgICAgICAgLSBNZXRybyBMaW5rIFB1YmxpYyBMaWNlbnNlIDEuMDAgKGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3Lm9wZW5ncm91cC5vcmcvb3Blbm1vdGlmL3N1cHBvcnRlcnMvbWV0cm9saW5rL2xpY2Vuc2UuaHRtbCkKKzEwNwkgICAgICAgLSBNb3ppbGxhIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4xIChhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5tb3ppbGxhLm9yZy9NUEwvTVBMLTEuMS5odG1sKQorMTA4CQorMTA5CUlUIElTIFlPVVIgT0JMSUdBVElPTiBUTyBSRUFEIEFORCBBQ0NFUFQgQUxMIFNVQ0ggVEVSTVMgQU5EIENPTkRJVElPTlMgUFJJT1IKKzExMAlUTyBVU0UgT0YgVEhFIENPTlRFTlQuIElmIG5vIEFib3V0LCBGZWF0dXJlIExpY2Vuc2UsIG9yIEZlYXR1cmUgVXBkYXRlIExpY2Vuc2UKKzExMQlpcyBwcm92aWRlZCwgcGxlYXNlIGNvbnRhY3QgdGhlIEVjbGlwc2UgRm91bmRhdGlvbiB0byBkZXRlcm1pbmUgd2hhdCB0ZXJtcyBhbmQgY29uZGl0aW9ucworMTEyCWdvdmVybiB0aGF0IHBhcnRpY3VsYXIgQ29udGVudC4KKzExMwkKKzExNAlVc2Ugb2YgUHJvdmlzaW9uaW5nIFRlY2hub2xvZ3kKKzExNQkKKzExNglUaGUgRWNsaXBzZSBGb3VuZGF0aW9uIG1ha2VzIGF2YWlsYWJsZSBwcm92aXNpb25pbmcgc29mdHdhcmUsIGV4YW1wbGVzIG9mIHdoaWNoIGluY2x1ZGUsCisxMTcJYnV0IGFyZSBub3QgbGltaXRlZCB0bywgcDIgYW5kIHRoZSBFY2xpcHNlIFVwZGF0ZSBNYW5hZ2VyICgmcXVvdDtQcm92aXNpb25pbmcgVGVjaG5vbG9neSZxdW90OykgZm9yCisxMTgJdGhlIHB1cnBvc2Ugb2YgYWxsb3dpbmcgdXNlcnMgdG8gaW5zdGFsbCBzb2Z0d2FyZSwgZG9jdW1lbnRhdGlvbiwgaW5mb3JtYXRpb24gYW5kL29yCisxMTkJb3RoZXIgbWF0ZXJpYWxzIChjb2xsZWN0aXZlbHkgJnF1b3Q7SW5zdGFsbGFibGUgU29mdHdhcmUmcXVvdDspLiBUaGlzIGNhcGFiaWxpdHkgaXMgcHJvdmlkZWQgd2l0aAorMTIwCXRoZSBpbnRlbnQgb2YgYWxsb3dpbmcgc3VjaCB1c2VycyB0byBpbnN0YWxsLCBleHRlbmQgYW5kIHVwZGF0ZSBFY2xpcHNlLWJhc2VkIHByb2R1Y3RzLgorMTIxCUluZm9ybWF0aW9uIGFib3V0IHBhY2thZ2luZyBJbnN0YWxsYWJsZSBTb2Z0d2FyZSBpcyBhdmFpbGFibGUgYXQKKzEyMglodHRwOi8vZWNsaXBzZS5vcmcvZXF1aW5veC9wMi9yZXBvc2l0b3J5X3BhY2thZ2luZy5odG1sICgmcXVvdDtTcGVjaWZpY2F0aW9uJnF1b3Q7KS4KKzEyMwkKKzEyNAlZb3UgbWF5IHVzZSBQcm92aXNpb25pbmcgVGVjaG5vbG9neSB0byBhbGxvdyBvdGhlciBwYXJ0aWVzIHRvIGluc3RhbGwgSW5zdGFsbGFibGUgU29mdHdhcmUuCisxMjUJWW91IHNoYWxsIGJlIHJlc3BvbnNpYmxlIGZvciBlbmFibGluZyB0aGUgYXBwbGljYWJsZSBsaWNlbnNlIGFncmVlbWVudHMgcmVsYXRpbmcgdG8gdGhlCisxMjYJSW5zdGFsbGFibGUgU29mdHdhcmUgdG8gYmUgcHJlc2VudGVkIHRvLCBhbmQgYWNjZXB0ZWQgYnksIHRoZSB1c2VycyBvZiB0aGUgUHJvdmlzaW9uaW5nIFRlY2hub2xvZ3kKKzEyNwlpbiBhY2NvcmRhbmNlIHdpdGggdGhlIFNwZWNpZmljYXRpb24uIEJ5IHVzaW5nIFByb3Zpc2lvbmluZyBUZWNobm9sb2d5IGluIHN1Y2ggYSBtYW5uZXIgYW5kCisxMjgJbWFraW5nIGl0IGF2YWlsYWJsZSBpbiBhY2NvcmRhbmNlIHdpdGggdGhlIFNwZWNpZmljYXRpb24sIHlvdSBmdXJ0aGVyIGFja25vd2xlZGdlIHlvdXIKKzEyOQlhZ3JlZW1lbnQgdG8sIGFuZCB0aGUgYWNxdWlzaXRpb24gb2YgYWxsIG5lY2Vzc2FyeSByaWdodHMgdG8gcGVybWl0IHRoZSBmb2xsb3dpbmc6CisxMzAJCisxMzEJICAgICAgIDEuIEEgc2VyaWVzIG9mIGFjdGlvbnMgbWF5IG9jY3VyICgmcXVvdDtQcm92aXNpb25pbmcgUHJvY2VzcyZxdW90OykgaW4gd2hpY2ggYSB1c2VyIG1heSBleGVjdXRlCisxMzIJICAgICAgICAgIHRoZSBQcm92aXNpb25pbmcgVGVjaG5vbG9neSBvbiBhIG1hY2hpbmUgKCZxdW90O1RhcmdldCBNYWNoaW5lJnF1b3Q7KSB3aXRoIHRoZSBpbnRlbnQgb2YgaW5zdGFsbGluZywKKzEzMwkgICAgICAgICAgZXh0ZW5kaW5nIG9yIHVwZGF0aW5nIHRoZSBmdW5jdGlvbmFsaXR5IG9mIGFuIEVjbGlwc2UtYmFzZWQgcHJvZHVjdC4KKzEzNAkgICAgICAgMi4gRHVyaW5nIHRoZSBQcm92aXNpb25pbmcgUHJvY2VzcywgdGhlIFByb3Zpc2lvbmluZyBUZWNobm9sb2d5IG1heSBjYXVzZSB0aGlyZCBwYXJ0eQorMTM1CSAgICAgICAgICBJbnN0YWxsYWJsZSBTb2Z0d2FyZSBvciBhIHBvcnRpb24gdGhlcmVvZiB0byBiZSBhY2Nlc3NlZCBhbmQgY29waWVkIHRvIHRoZSBUYXJnZXQgTWFjaGluZS4KKzEzNgkgICAgICAgMy4gUHVyc3VhbnQgdG8gdGhlIFNwZWNpZmljYXRpb24sIHlvdSB3aWxsIHByb3ZpZGUgdG8gdGhlIHVzZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIHRoYXQKKzEzNwkgICAgICAgICAgZ292ZXJuIHRoZSB1c2Ugb2YgdGhlIEluc3RhbGxhYmxlIFNvZnR3YXJlICgmcXVvdDtJbnN0YWxsYWJsZSBTb2Z0d2FyZSBBZ3JlZW1lbnQmcXVvdDspIGFuZCBzdWNoCisxMzgJICAgICAgICAgIEluc3RhbGxhYmxlIFNvZnR3YXJlIEFncmVlbWVudCBzaGFsbCBiZSBhY2Nlc3NlZCBmcm9tIHRoZSBUYXJnZXQgTWFjaGluZSBpbiBhY2NvcmRhbmNlCisxMzkJICAgICAgICAgIHdpdGggdGhlIFNwZWNpZmljYXRpb24uIFN1Y2ggSW5zdGFsbGFibGUgU29mdHdhcmUgQWdyZWVtZW50IG11c3QgaW5mb3JtIHRoZSB1c2VyIG9mIHRoZQorMTQwCSAgICAgICAgICB0ZXJtcyBhbmQgY29uZGl0aW9ucyB0aGF0IGdvdmVybiB0aGUgSW5zdGFsbGFibGUgU29mdHdhcmUgYW5kIG11c3Qgc29saWNpdCBhY2NlcHRhbmNlIGJ5CisxNDEJICAgICAgICAgIHRoZSBlbmQgdXNlciBpbiB0aGUgbWFubmVyIHByZXNjcmliZWQgaW4gc3VjaCBJbnN0YWxsYWJsZSBTb2Z0d2FyZSBBZ3JlZW1lbnQuIFVwb24gc3VjaAorMTQyCSAgICAgICAgICBpbmRpY2F0aW9uIG9mIGFncmVlbWVudCBieSB0aGUgdXNlciwgdGhlIHByb3Zpc2lvbmluZyBUZWNobm9sb2d5IHdpbGwgY29tcGxldGUgaW5zdGFsbGF0aW9uCisxNDMJICAgICAgICAgIG9mIHRoZSBJbnN0YWxsYWJsZSBTb2Z0d2FyZS4KKzE0NAkKKzE0NQlDcnlwdG9ncmFwaHkKKzE0NgkKKzE0NwlDb250ZW50IG1heSBjb250YWluIGVuY3J5cHRpb24gc29mdHdhcmUuIFRoZSBjb3VudHJ5IGluIHdoaWNoIHlvdSBhcmUKKzE0OAljdXJyZW50bHkgbWF5IGhhdmUgcmVzdHJpY3Rpb25zIG9uIHRoZSBpbXBvcnQsIHBvc3Nlc3Npb24sIGFuZCB1c2UsCisxNDkJYW5kL29yIHJlLWV4cG9ydCB0byBhbm90aGVyIGNvdW50cnksIG9mIGVuY3J5cHRpb24gc29mdHdhcmUuIEJFRk9SRQorMTUwCXVzaW5nIGFueSBlbmNyeXB0aW9uIHNvZnR3YXJlLCBwbGVhc2UgY2hlY2sgdGhlIGNvdW50cnkmYXBvcztzIGxhd3MsCisxNTEJcmVndWxhdGlvbnMgYW5kIHBvbGljaWVzIGNvbmNlcm5pbmcgdGhlIGltcG9ydCwgcG9zc2Vzc2lvbiwgb3IgdXNlLCBhbmQKKzE1MglyZS1leHBvcnQgb2YgZW5jcnlwdGlvbiBzb2Z0d2FyZSwgdG8gc2VlIGlmIHRoaXMgaXMgcGVybWl0dGVkLgorMTUzCQorMTU0CUphdmEgYW5kIGFsbCBKYXZhLWJhc2VkIHRyYWRlbWFya3MgYXJlIHRyYWRlbWFya3Mgb2YgT3JhY2xlIENvcnBvcmF0aW9uIGluIHRoZSBVbml0ZWQgU3RhdGVzLCBvdGhlciBjb3VudHJpZXMsIG9yIGJvdGguCisxNTUKKyAgICAgICAgIDwvdGV4dD4KKyAgIDwvbGljZW5zZT4KKworICAgPHBsdWdpbnM+CisgICA8L3BsdWdpbnM+CisKKyAgIDxmZWF0dXJlcz4KKyAgICAgIDxmZWF0dXJlIGlkPSJvcmcuZWNsaXBzZS5zdGVtLnByb2R1Y3QuZmVhdHVyZSIgdmVyc2lvbj0iMS4yLjEiLz4KKyAgIDwvZmVhdHVyZXM+CisKKyAgIDxjb25maWd1cmF0aW9ucz4KKyAgICAgIDxwbHVnaW4gaWQ9Im9yZy5lY2xpcHNlLmNvcmUucnVudGltZSIgYXV0b1N0YXJ0PSJ0cnVlIiBzdGFydExldmVsPSIwIiAvPgorICAgICAgPHBsdWdpbiBpZD0ib3JnLmVjbGlwc2UuZXF1aW5veC5jb21tb24iIGF1dG9TdGFydD0idHJ1ZSIgc3RhcnRMZXZlbD0iMiIgLz4KKyAgICAgIDxwbHVnaW4gaWQ9Im9yZy5lY2xpcHNlLmVxdWlub3guZHMiIGF1dG9TdGFydD0idHJ1ZSIgc3RhcnRMZXZlbD0iMiIgLz4KKyAgICAgIDxwbHVnaW4gaWQ9Im9yZy5lY2xpcHNlLmVxdWlub3gucDIucmVjb25jaWxlci5kcm9waW5zIiBhdXRvU3RhcnQ9InRydWUiIHN0YXJ0TGV2ZWw9IjAiIC8+CisgICAgICA8cGx1Z2luIGlkPSJvcmcuZWNsaXBzZS5lcXVpbm94LnNpbXBsZWNvbmZpZ3VyYXRvciIgYXV0b1N0YXJ0PSJ0cnVlIiBzdGFydExldmVsPSIxIiAvPgorICAgICAgPHBsdWdpbiBpZD0ib3JnLmVjbGlwc2Uub3NnaSIgYXV0b1N0YXJ0PSJ0cnVlIiBzdGFydExldmVsPSItMSIgLz4KKyAgICAgIDxwbHVnaW4gaWQ9Im9yZy5lY2xpcHNlLnVwZGF0ZS5jb25maWd1cmF0b3IiIGF1dG9TdGFydD0idHJ1ZSIgc3RhcnRMZXZlbD0iMCIgLz4KKyAgIDwvY29uZmlndXJhdGlvbnM+CisKKzwvcHJvZHVjdD4KZGlmZiAtLWdpdCBhL3JlbGVuZy9vcmcuZWNsaXBzZS5zdGVtLnJlbGVuZy9Db25maWdUZXN0cy9ydW5UZXN0cy54bWwgYi9yZWxlbmcvb3JnLmVjbGlwc2Uuc3RlbS5yZWxlbmcvQ29uZmlnVGVzdHMvcnVuVGVzdHMueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjljODY0ODgKLS0tIC9kZXYvbnVsbAorKysgYi9yZWxlbmcvb3JnLmVjbGlwc2Uuc3RlbS5yZWxlbmcvQ29uZmlnVGVzdHMvcnVuVGVzdHMueG1sCkBAIC0wLDAgKzEsMTE5IEBACis8cHJvamVjdCBkZWZhdWx0PSJtYWluIiBiYXNlZGlyPSIuLiI+CisKKworCTwhLS0gCisKK1NURVBTOgorCistIFVuemlwIEVjbGlwc2UgcnVudGltZSBidW5kbGUgZnJvbSBFQ0xJUFNFX0JVTkRMRV9QQVRICistIENvcHkgZmVhdHVyZXMgZnJvbSBidWlsZC9mZWF0dXJlcyB0byBlY2xpcHNlL2ZlYXR1cmVzCistIENvcHkgcGx1Z2lucyBmcm9tIGJ1aWxkL3BsdWdpbnMgdG8gZWNsaXBzZS9wbHVnaW5zCistIExvYWQgYW5kIGludm9rZSBhbnQgZm9yIGVhY2ggInRlc3QueG1sIiBpbiB0aGUgdGVzdCBwbHVnaW5zCistIENvbGxlY3QgY29uZmlnIGZpbGVzCistIERlbGV0ZSBlY2xpcHNlIHJ1bnRpbWUKKworIC0tPgorCTxwcm9wZXJ0eSBuYW1lPSJlY2xpcHNlLWhvbWUiIHZhbHVlPSIke2Jhc2VkaXJ9L2VjbGlwc2UtcnVudGltZSIgLz4KKwk8cHJvcGVydHkgbmFtZT0iZWNsaXBzZS50ZXN0LmhvbWUiIHZhbHVlPSIke2VjbGlwc2UtaG9tZX0iIC8+CisJPHByb3BlcnR5IG5hbWU9ImJ1aWxkLnJlcG8iIHZhbHVlPSIke2J1aWxkSG9tZX0vYnVpbGRSZXBvIiAvPgorCTxwcm9wZXJ0eSBuYW1lPSJwbHVnaW4ucGF0aCIgdmFsdWU9IiR7YnVpbGRIb21lfS9wbHVnaW5zIiAvPgorCTxwcm9wZXJ0eSBuYW1lPSJyZXBvcnRzLnBhdGgiIHZhbHVlPSIke2J1aWxkSG9tZX0vdGVzdHMiIC8+CisKKworCTxwcm9wZXJ0eSBuYW1lPSJvcyIgdmFsdWU9IiR7b3NnaS5vc30iIC8+CisJPHByb3BlcnR5IG5hbWU9ImFyY2giIHZhbHVlPSIke29zZ2kuYXJjaH0iIC8+CisJPHByb3BlcnR5IG5hbWU9IndzIiB2YWx1ZT0iJHtvc2dpLndzfSIgLz4KKworCTx0YXJnZXQgbmFtZT0iaW5pdCI+CisJCTxlY2hvcHJvcGVydGllcyAvPgorCQk8bWtkaXIgZGlyPSIke3JlcG9ydHMucGF0aH0iIC8+CisKKworCisKKwkJPCEtLSBEZWxldGUgb2xkIGRpcmVjdG9yeSBqdXN0IGluIGNhc2UgLS0+CisKKwkJPGRlbGV0ZSBkaXI9IiR7ZWNsaXBzZS50ZXN0LmhvbWV9IiAvPgorCisJCTxjb3B5IHRvZGlyPSIke2VjbGlwc2UudGVzdC5ob21lfSI+CisJCQk8ZmlsZXNldCBkaXI9IiR7ZWNsaXBzZS5ob21lfSIgLz4KKwkJPC9jb3B5PgorCisJCTwhLS0gVW56aXAgdGhlIEVjbGlwc2UgcnVudGltZSBwYWNrYWdlIC0tPgorCQk8IS0tIDx1bnppcCBzcmM9IiR7ZWNsaXBzZUJ1bmRsZX0iIGRlc3Q9IiR7ZWNsaXBzZS50ZXN0LmhvbWV9IiAvPgorIC0tPgorCisJCTxjb3B5IHRvZGlyPSIke2VjbGlwc2UudGVzdC5ob21lfS9mZWF0dXJlcyI+CisJCQk8ZmlsZXNldCBkaXI9IiR7YnVpbGQucmVwb30vZmVhdHVyZXMiPgorCQkJCTxpbmNsdWRlIG5hbWU9Im9yZy5lY2xpcHNlLnN0ZW0uKiIgLz4KKwkJCTwvZmlsZXNldD4KKwkJPC9jb3B5PgorCisJCTxjb3B5IHRvZGlyPSIke2VjbGlwc2UudGVzdC5ob21lfS9wbHVnaW5zIj4KKwkJCTxmaWxlc2V0IGRpcj0iJHtidWlsZC5yZXBvfS9wbHVnaW5zIj4KKwkJCQk8aW5jbHVkZSBuYW1lPSJvcmcuZWNsaXBzZS5zdGVtLioiIC8+CisJCQk8L2ZpbGVzZXQ+CisJCTwvY29weT4KKworCTwvdGFyZ2V0PgorCisJPHRhcmdldCBuYW1lPSJydW5UZXN0Ij4KKwkJPGVjaG8+UnVubmluZyB0ZXN0IGZvciAke3BsdWdpbn08L2VjaG8+CisKKwkJPGFudCBhbnRmaWxlPSIke3BsdWdpbi5wYXRofS8ke3BsdWdpbn0vdGVzdC54bWwiIGRpcj0iJHtlY2xpcHNlLWhvbWV9IiAvPgorCQk8Y29weSBmaWxlPSIke2VjbGlwc2UtaG9tZX0vJHtwbHVnaW59LnhtbCIgdG9kaXI9IiR7cmVwb3J0cy5wYXRofSIgLz4KKwk8L3RhcmdldD4KKworCisJPHRhcmdldCBuYW1lPSJtYWluIiBkZXBlbmRzPSJpbml0Ij4KKwkJPGFudGNhbGwgdGFyZ2V0PSJydW5UZXN0Ij4KKwkJCTxwYXJhbSBuYW1lPSJwbHVnaW4iIHZhbHVlPSJvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUiIC8+CisJCTwvYW50Y2FsbD4KKwkJPGFudGNhbGwgdGFyZ2V0PSJydW5UZXN0Ij4KKwkJCTxwYXJhbSBuYW1lPSJwbHVnaW4iIHZhbHVlPSJvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmpvYnMiIC8+CisJCTwvYW50Y2FsbD4KKwkJPGFudGNhbGwgdGFyZ2V0PSJydW5UZXN0Ij4KKwkJCTxwYXJhbSBuYW1lPSJwbHVnaW4iIHZhbHVlPSJvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRlZmluaXRpb25zIiAvPgorCQk8L2FudGNhbGw+CisJCTxhbnRjYWxsIHRhcmdldD0icnVuVGVzdCI+CisJCQk8cGFyYW0gbmFtZT0icGx1Z2luIiB2YWx1ZT0ib3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kaXNlYXNlbW9kZWxzIiAvPgorCQk8L2FudGNhbGw+CisJCTxhbnRjYWxsIHRhcmdldD0icnVuVGVzdCI+CisJCQk8cGFyYW0gbmFtZT0icGx1Z2luIiB2YWx1ZT0ib3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kaXNlYXNlbW9kZWxzLmV4YW1wbGUiIC8+CisJCTwvYW50Y2FsbD4KKwkJPGFudGNhbGwgdGFyZ2V0PSJydW5UZXN0Ij4KKwkJCTxwYXJhbSBuYW1lPSJwbHVnaW4iIHZhbHVlPSJvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRpc2Vhc2Vtb2RlbHMuZXhwZXJpbWVudGFsIiAvPgorCQk8L2FudGNhbGw+CisJCTxhbnRjYWxsIHRhcmdldD0icnVuVGVzdCI+CisJCQk8cGFyYW0gbmFtZT0icGx1Z2luIiB2YWx1ZT0ib3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kaXNlYXNlbW9kZWxzLmV4dGVybmFsZGF0YXNvdXJjZSIgLz4KKwkJPC9hbnRjYWxsPgorCQk8YW50Y2FsbCB0YXJnZXQ9InJ1blRlc3QiPgorCQkJPHBhcmFtIG5hbWU9InBsdWdpbiIgdmFsdWU9Im9yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGlzZWFzZW1vZGVscy5mb3JjaW5nIiAvPgorCQk8L2FudGNhbGw+CisJCTxhbnRjYWxsIHRhcmdldD0icnVuVGVzdCI+CisJCQk8cGFyYW0gbmFtZT0icGx1Z2luIiB2YWx1ZT0ib3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kaXNlYXNlbW9kZWxzLm11bHRpcG9wdWxhdGlvbiIgLz4KKwkJPC9hbnRjYWxsPgorCQk8YW50Y2FsbCB0YXJnZXQ9InJ1blRlc3QiPgorCQkJPHBhcmFtIG5hbWU9InBsdWdpbiIgdmFsdWU9Im9yZy5lY2xpcHNlLnN0ZW0udGVzdHMucG9wdWxhdGlvbm1vZGVscyIgLz4KKwkJPC9hbnRjYWxsPgorCQk8YW50Y2FsbCB0YXJnZXQ9InJ1blRlc3QiPgorCQkJPHBhcmFtIG5hbWU9InBsdWdpbiIgdmFsdWU9Im9yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZ3JhcGhlZGl0b3IiIC8+CisJCTwvYW50Y2FsbD4KKwkJPGFudGNhbGwgdGFyZ2V0PSJydW5UZXN0Ij4KKwkJCTxwYXJhbSBuYW1lPSJwbHVnaW4iIHZhbHVlPSJvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmdyYXBoZ2VuZXJhdG9ycyIgLz4KKwkJPC9hbnRjYWxsPgorCQk8YW50Y2FsbCB0YXJnZXQ9InJ1blRlc3QiPgorCQkJPHBhcmFtIG5hbWU9InBsdWdpbiIgdmFsdWU9Im9yZy5lY2xpcHNlLnN0ZW0udGVzdHMuaW50ZXJuYWwuZGF0YSIgLz4KKwkJPC9hbnRjYWxsPgorCQk8YW50Y2FsbCB0YXJnZXQ9InJ1blRlc3QiPgorCQkJPHBhcmFtIG5hbWU9InBsdWdpbiIgdmFsdWU9Im9yZy5lY2xpcHNlLnN0ZW0udGVzdHMudHJhbnNwb3J0IiAvPgorCQk8L2FudGNhbGw+CisJCTxhbnRjYWxsIHRhcmdldD0icnVuVGVzdCI+CisJCQk8cGFyYW0gbmFtZT0icGx1Z2luIiB2YWx1ZT0ib3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51aSIgLz4KKwkJPC9hbnRjYWxsPgorCQk8YW50Y2FsbCB0YXJnZXQ9InJ1blRlc3QiPgorCQkJPHBhcmFtIG5hbWU9InBsdWdpbiIgdmFsdWU9Im9yZy5lY2xpcHNlLnN0ZW0udGVzdHMuYXV0b21hdGljZXhwZXJpbWVudCIgLz4KKwkJPC9hbnRjYWxsPgorCTwvdGFyZ2V0PgorCis8L3Byb2plY3Q+CmRpZmYgLS1naXQgYS9yZWxlbmcvb3JnLmVjbGlwc2Uuc3RlbS5yZWxlbmcvUkVBRE1FLnR4dCBiL3JlbGVuZy9vcmcuZWNsaXBzZS5zdGVtLnJlbGVuZy9SRUFETUUudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM3M2UxZTIKLS0tIC9kZXYvbnVsbAorKysgYi9yZWxlbmcvb3JnLmVjbGlwc2Uuc3RlbS5yZWxlbmcvUkVBRE1FLnR4dApAQCAtMCwwICsxLDYxIEBACitUaGlzIHByb2plY3Qgc2VydmVzIGFzIHRoZSByZXBvc2l0b3J5IGZvciB0aGUgcmVsZWFzZSBlbmdpbmVlcmluZyBjb21wb25lbnRzIG9mIHRoZSBTVEVNIHByb2plY3QuICAKKworVGhlIGZvbGRlcnMgIjMuMyIgYW5kICIzLjQiIGNvbnRhaW4gdGhlIHNjcmlwdHMgYW5kIGNvbmZpZ3VyYXRpb24gZmlsZXMgbmVlZGVkIHRvIGJ1aWxkIFNURU0gZm9yIHRoZSAKK0VjbGlwc2UgMy4zIGFuZCAzLjQgcGxhdGZvcm1zLCByZXNwZWN0aXZlbHkuICBUaGUgZm9sZGVyICJtYXBzIiBjb250YWlucyB0aGUgY29uZmlndXJhdGlvbiBmaWxlcyB0aGF0CittYXAgdGhlIGlkJ3Mgb2YgdGhlIHBsdWdpbnMgYW5kIGZlYXR1cmVzIHRvIHRoZWlyIHJlcG9zaXRvcnkgbG9jYXRpb25zLiAgVGhpcyBpbmRpcmVjdGlvbiBhbGxvd3MgdGhlCitleGFjdCByZXBvc2l0b3J5IHZlcnNpb24gb2YgYSBwbHVnaW4gdG8gYmUgYWx0ZXJlZCB3aXRob3V0IGNoYW5naW5nIHRoZSByZXN0IG9mIHRoZSBidWlsZCBwcm9jZXNzLgorCitUaGUgZmlsZXMgdGhhdCBkZWZpbmUgdGhlIGJ1aWxkIHByb2Nlc3MgYXJlIGluIHRoZSAiMy4zL2NvbmZpZyIgYW5kICIzLjQvY29uZmlnIiBmb2xkZXJzLiAgVGhlIGZpbGVzCitpbiB0aGVzZSB0d28gZm9sZGVycyBvbmx5IGRpZmZlciBzbGlnaHRseSBpbiB0aGUgZGV0YWlscyB0aGF0IGFyZSBkaWZmZXJlbnQgYmV0d2VlbiB2ZXJzaW9ucyAzLjMgYW5kIDMuNAorb2YgRWNsaXBzZS4gIAorCisJYWxsRWxlbWVudHMueG1sCQlUaGlzIGhhcyB0byBkbyB3aXRoICJmZWF0dXJlIiBidWlsZHMuCisJYnVpbGQuYmF0CQkJVGhpcyBpcyB0aGUgc2NyaXB0IGZpbGUgdGhhdCBydW5zIHRoZSBidWlsZCBwcm9jZXNzLgorCWJ1aWxkLnByb3BlcnRpZXMJU3BlY2lmaWNhdGlvbiBvZiB0aGUgYnVpbGQgcHJvY2Vzcywgc3VjaCBhcyB0aGUgcGxhdGZvcm1zIHRvIGJ1aWxkIG9uLCB0aGUKKwkJCQkJCXZlcnNpb24gbnVtYmVyIGVuY29kZWQgaW4gdGhlIGJ1aWxkLgorCWN1c3RvbVRhcmdldHMueG1sCVRoZSBtYWluIHRvcC1sZXZlbCBzZXQgb2YgYW50IHRhcmdldHMgdGhhdCBhcmUgcHJvY2Vzc2VkIGR1cmluZyB0aGUgYnVpbGQuICBUaGlzCisJCQkJCQkJaXMgbW9kaWZpZWQgdG8gaW5jb3Jwb3JhdGUgc3BlY2lmaWMgcHJvY2Vzc2luZyBzdGVwcy4gIEluIHRoZSBjYXNlIG9mIFNURU0sCisJCQkJCQkJdGhpcyBpbmNsdWRlczoKKwkJCQkJCQkJInBvc3RzZXR1cCIgCQltb2RpZmllZCBmb3IgaW50ZXJuYWwuZGF0YQorCQkJCQkJCQkicG9zdGdlbmVyYXRlIiAJbW9kaWZpZWQgdG8gaW5jbHVkZSBpbnRlcm5hbC5kYXRhCisJCQkJCQkJCSJwb3N0cHJvY2VzcyIgCW1vZGlmaWVkIHRvIHJ1biB0aGUgYW50IHNjcmlwdHMgZm9yIGludGVybmFsLmRhdGEgYW5kIGdlLnZpZXcKKworVGhlICJyZXNvdXJjZXMiIGZvbGRlciBjb250YWlucyBmaWxlcyB0aGF0IGFyZSB1c2VmdWwgZm9yIHRoZSBlbnRpcmUgcHJvamVjdC4KKworCWNvZGVjbGVhbnVwY29uZmlndXJhdGlvbi54bWwgY29udGFpbnMgdGhlIHNwZWNpZmljYXRpb24gb2YgInNvdXJjZSBjb2RlIGNsZWFudXAiCisJCisKK0NyZWF0aW5nIGEgQnVpbGQKKy0tLS0tLS0tLS0tLS0tLS0KK1RvIHN0YXJ0IGEgYnVpbGQsIHJ1biB0aGUgImJ1aWxkLmJhdCIgZmlsZSBpbiBlaXRoZXIgdGhlICIzLjMvY29uZmlnIiBvciAiMy40L2NvbmZpZyIgZmlsZS4gIFRoaXMgb25seQord29ya3Mgb24gdGhlIHdpbmRvd3MgcGxhdGZvcm0uICBJbiB0aGUgZnV0dXJlIGEgImJ1aWxkLnNoIiBmaWxlIHdpbGwgbGlrZWx5IGJlIHByb3ZpZGVkIGZvciBidWlsZHMgb24KK3VuaXgvbGludXguICBXaGVuIGNyZWF0aW5nIGEgYnVpbGQgZm9yIGRpc3RyaWJ1dGlvbiB0aGUgYnVpbGQuYmF0IGZpbGUgbmVlZHMgdG8gYmUgZWRpdGVkIHRvIHVwZGF0ZSB0d28KK3ZhcmlhYmxlcyB0aGF0IHNwZWNpZnkgdGhlIHZlcnNpb24gYW5kIHF1YWxpZmllci4gIFRoZSB0d28gbGluZXMgaW4gcXVlc3Rpb24gYXJlOgorCisJc2V0IE1BSk9SX1ZFUlNJT049MC4yLjIKKworCXNldCBRVUFMSUZJRVI9STIwMDgwMTE4LTEyMDAKKwkKK1RoZSBRVUFMSUZJRVIgdmFyaWFibGUgc3BlY2lmaWVzIHRoZSBkYXRlIGFuZCB0aW1lIG9mIHRoZSBidWlsZCwgaW4gdGhlIGV4YW1wbGUgYWJvdmUsIEphbnVhcnkgMTgsIDIwMDgsIGF0IDEyMDAuICAKK0xpa2VseSB0aGUgTUFKT1JfVkVSU0lPTiBudW1iZXIgd291bGQgbm90IGNoYW5nZSBhcyBmcmVxdWVudGx5IGFzIHRoZSBRVUFMSUZJRVIuCisKK0FkZGluZyBhIG5ldyB2ZXJzaW9uIG9mIEVjbGlwc2UKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworV2hlbiB5b3UgaW5zdGFsbCBhIG5ldyB2ZXJzaW9uIG9mIEVjbGlwc2UsIHlvdSBuZWVkIHRvIGFsc28gaW5zdGFsbCB0aGUgImVjbGlwc2UgUkNQIGRlbHRhIHBhY2siIGZvciAKK2FsbCBwbGF0Zm9ybXMuICBZb3UnbGwgZmluZCB0aGlzIGRpc3RyaWJ1dGVkIG9uIHRoZSBkb3dubG9hZCBwYWdlIGZvciB0aGUgdmVyc2lvbiBvZiBFY2xpcHNlLiAgRm9yIGluc3RhbmNlLAorZm9yIEVjbGlwc2UgMy40TTQsIHRoZSBkb3dubG9hZCBwYWdlIGlzIGF0OgorCitodHRwOi8vZG93bmxvYWQuZWNsaXBzZS5vcmcvZWNsaXBzZS9kb3dubG9hZHMvZHJvcHMvUy0zLjRNNC0yMDA3MTIxMzE3MDAvaW5kZXgucGhwCisKK2FuZCB0aGUgZGVsdGEgcGFjayBpcyBuYW1lZDogZWNsaXBzZS1SQ1AtMy40TTQtZGVsdGEtcGFjay56aXAgYW5kIGlzIGZvdW5kIGxpc3RlZCB1bmRlciB0aGUgIlJDUCBTREsiIAorc2VjdGlvbiBvZiB0aGUgcGFnZS4KKworVGhlIGRlbHRhIHBhY2sgemlwIGZpbGUgY29udGFpbnMgYSBzaW5nbGUgdG9wLWxldmVsIGZvbGRlciBjYWxsZWQgImVjbGlwc2UiLiAgVGhpcyBmb2xkZXIgaXMgYSAibWF0Y2giCitmb3IgdGhlIHRvcC1sZXZlbCBmb2xkZXIgb2YgdGhlIEVjbGlwc2UgaW5zdGFsbGF0aW9uLiAgVG8gaW5jb3Jwb3JhdGUgdGhlIGNvbnRlbnRzIG9mIHRoZSBkZWx0YSBwYWNrLAordGhlIGZpbGUgaXMgdW56aXBwZWQgIm92ZXIiIHRoZSBpbnN0YWxsIGZvbGRlci4gIE1ha2Ugc3VyZSB0aGF0IHRoZSB5b3UncmUgbm90IHJ1bm5pbmcgRWNsaXBzZSBmcm9tCit0aGUgaW5zdGFsbGF0aW9uIHlvdSBhcmUgb3ZlcndyaXRpbmcuCisgCisKKyAKKwpkaWZmIC0tZ2l0IGEvcmVsZW5nL29yZy5lY2xpcHNlLnN0ZW0ucmVsZW5nL2Jvb3RzdHJhcEh1ZHNvbi5zaCBiL3JlbGVuZy9vcmcuZWNsaXBzZS5zdGVtLnJlbGVuZy9ib290c3RyYXBIdWRzb24uc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZGRlZjg0NgotLS0gL2Rldi9udWxsCisrKyBiL3JlbGVuZy9vcmcuZWNsaXBzZS5zdGVtLnJlbGVuZy9ib290c3RyYXBIdWRzb24uc2gKQEAgLTAsMCArMSw1IEBACisjIS9iaW4vYmFzaAorCitDVVJSRU5UX0RJUj0kKGNkICQoZGlybmFtZSAkMCk7IHB3ZCkKKworc291cmNlICRDVVJSRU5UX0RJUi9idWlsZC5zaApkaWZmIC0tZ2l0IGEvcmVsZW5nL29yZy5lY2xpcHNlLnN0ZW0ucmVsZW5nL2Jvb3RzdHJhcE1hbnVhbC5zaCBiL3JlbGVuZy9vcmcuZWNsaXBzZS5zdGVtLnJlbGVuZy9ib290c3RyYXBNYW51YWwuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMzI4OTJlNAotLS0gL2Rldi9udWxsCisrKyBiL3JlbGVuZy9vcmcuZWNsaXBzZS5zdGVtLnJlbGVuZy9ib290c3RyYXBNYW51YWwuc2gKQEAgLTAsMCArMSwzNSBAQAorIyEvYmluL2Jhc2gKKworU0tJUEZFQVRVUkU9ZmFsc2UKK1NLSVBQUk9EVUNUPWZhbHNlCitSVU5URVNUUz10cnVlCisKKyMgQnVpbGQgcGFyYW1ldGVycyB0aGF0IHNob3VsZCBiZSBzZXQgd2hlbiBydW5uaW5nIHRoZSBidWlsZCBtYW51YWxseSBmcm9tIGNvbW1hbmQgbGluZSAKKyMgYW5kIG5vdCBmcm9tIGNvbnRpbnVvdXMgaW50ZWdyYXRpb24uCisKKyMgUGF0aCB0byBKYXZhIEpSRQorSkFWQV9IT01FPS9vcHQvYnVpbGR0b29scy9qYXZhL3N1bi8xLjYuMF8yNQorCisjIFBhdGggdG8gYW4gRWNsaXBzZSBTREsgaW5zdGFsbGF0aW9uCitFQ0xJUFNFX0hPTUU9L29wdC9idWlsZHRvb2xzL2VjbGlwc2UvZWNsaXBzZTM2MjAKKworIyBNYWpvciBWZXJzaW9uIC0gdGhlIHJlbGVhc2UgdHJhaW4gdGhlIGJ1aWxkIGNvbWVzIGZyb20sICBlZzogWC5ZLloKK01BSk9SX1ZFUlNJT049MS4yLjEKKworIyBUeXBlIG9mIGJ1aWxkCisjIEV4YW1wbGVzOgorIyAgKiBuaWdodGx5IC0gYXV0by1nZW5lcmF0ZWQgYnVpbGRzIHRoYXQgaGFwcGVuIGV2ZXJ5IG5pZ2h0CisjICAqIGludGVncmF0aW9uIC0gd2Vla2x5IG9yIG1vcmUgb2Z0ZW4gYnVpbGRzIHRoYXQgYXJlIHNlbWktc3RhYmxlCisjICAqIHN0YWJsZSAtIHN0YWJsZSBub24tcmVsZWFzZSBidWlsZHMsIGdlbmVyYWxseSBtaWxlc3RvbmVzIG9yIHJlbGVhc2UgY2FuZGlkYXRlcworIyAgKiByZWxlYXNlIC0gb2ZmaWNpYWwgc3RhYmxlIHJlbGVhc2VzCitCVUlMRF9UWVBFPW5pZ2h0bHkKKworIyBUaGUgdmVyc2lvbiBxdWFsaWZpZXIgZm9yIHN0YWJsZSBidWlsZHMuICBFeGFtcGxlcyBhcmUgTTEsIE0yLCBSQzEsIFJDMiwgZXRjCitWRVJTSU9OX1FVQUxJRklFUj0KKworIyBXaGV0aGVyIHRvIHB1Ymxpc2ggdGhpcyBidWlsZCB0byBFY2xpcHNlICh0cnVlKSBvciBub3QgKGZhbHNlKS4KK1BVQkxJU0hfQlVJTEQ9ZmFsc2UKKworUFVCTElTSF9ESVI9L29wdC9zdGVtL2J1aWxkcworCitzb3VyY2UgYnVpbGQuc2gKZGlmZiAtLWdpdCBhL3JlbGVuZy9vcmcuZWNsaXBzZS5zdGVtLnJlbGVuZy9idWlsZC5zaCBiL3JlbGVuZy9vcmcuZWNsaXBzZS5zdGVtLnJlbGVuZy9idWlsZC5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4zYjZlYTM4Ci0tLSAvZGV2L251bGwKKysrIGIvcmVsZW5nL29yZy5lY2xpcHNlLnN0ZW0ucmVsZW5nL2J1aWxkLnNoCkBAIC0wLDAgKzEsNjcgQEAKKyMhL2Jpbi9iYXNoCisKK0JVSUxEX0RBVEU9YGRhdGUgLXUgKyVZJW0lZGAKKworIyByb290IG9mIGJ1aWxkIHRyZWUKK0JVSUxEX1JPT1Q9JChjZCAkKGRpcm5hbWUgJDApOyBwd2QpCisKK2VjaG8gQnVpbGRUeXBlOiAkQlVJTERfVFlQRQorZWNobyBNYWpvclZlcnNpb246ICRNQUpPUl9WRVJTSU9OCitlY2hvIEJ1aWxkRGF0ZTogJEJVSUxEX0RBVEUKKworY2FzZSAkQlVJTERfVFlQRSBpbgorICBpbnRlZ3JhdGlvbiApIAorICAJQlVJTERfUVVBTElGSUVSX1BSRUZJWD1JCisgIAlCVUlMRF9MQUJFTD0kTUFKT1JfVkVSU0lPTi4kQlVJTERfUVVBTElGSUVSX1BSRUZJWCRCVUlMRF9EQVRFCisgIAk7OworICBzdGFibGUgKSAKKyAgCUJVSUxEX1FVQUxJRklFUl9QUkVGSVg9TQorICAJQlVJTERfTEFCRUw9JE1BSk9SX1ZFUlNJT04kVkVSU0lPTl9RVUFMSUZJRVIKKyAgCTs7CisgIHJlbGVhc2UgKSAKKyAgCUJVSUxEX1FVQUxJRklFUl9QUkVGSVg9CisgIAlCVUlMRF9MQUJFTD0kTUFKT1JfVkVSU0lPTgorICAJOzsKKyAgKikgCisgICNkZWZhdWx0OiBuaWdodGx5CisgIAlCVUlMRF9RVUFMSUZJRVJfUFJFRklYPU4KKyAgCUJVSUxEX0xBQkVMPSRNQUpPUl9WRVJTSU9OLiRCVUlMRF9RVUFMSUZJRVJfUFJFRklYJEJVSUxEX0RBVEUKKyAgCTs7Citlc2FjCisKK1FVQUxJRklFUj0kQlVJTERfUVVBTElGSUVSX1BSRUZJWCRCVUlMRF9EQVRFCitQVUJMSVNIX0RJUj0kUFVCTElTSF9ESVIKKworZWNobyBCdWlsZExhYmVsOiAkQlVJTERfTEFCRUwKK2VjaG8gQ29udGV4dFF1YWxpZmllcjogJFFVQUxJRklFUgorZWNobyBCdWlsZFJvb3Q6ICRCVUlMRF9ST09UCitlY2hvIFB1Ymxpc2hEaXI6ICRQVUJMSVNIX0RJUgorCitCVUlMRF9IT01FPSRCVUlMRF9ST09UL2J1aWxkCisKK0pBVkFfVk1fQVJHUz0iLVhtczEwMjRNIC1YbXgxMDI0TSIKKyNKQVZBX1ZNX0FSR1M9Ii1YbXMxMDI0TSAtWG14MTAyNE0gLVhkZWJ1ZyAtWHJ1bmpkd3A6dHJhbnNwb3J0PWR0X3NvY2tldCxhZGRyZXNzPWxvY2FsaG9zdDo4MDAwLHN1c3BlbmQ9biIKKworCitpZiBbICIkU0tJUEZFQVRVUkUiICE9ICJ0cnVlIiBdOyB0aGVuIAorIHJtIC1yIC1mICRCVUlMRF9IT01FCisgbWtkaXIgLXAgJEJVSUxEX0hPTUUvbWFwcworIGNwICRCVUlMRF9ST09UL21hcHMvc3RlbS5tYXAgJEJVSUxEX0hPTUUvbWFwcy8KKworIHNvdXJjZSAkQlVJTERfUk9PVC9idWlsZEZlYXR1cmUuc2gKK2ZpCisKK2lmIFsgIiRTS0lQUFJPRFVDVCIgIT0gInRydWUiIF07IHRoZW4gCisgc291cmNlICRCVUlMRF9ST09UL2J1aWxkUHJvZHVjdC5zaAorZmkKKworaWYgWyAiJFJVTlRFU1RTIiA9ICJ0cnVlIiBdOyB0aGVuIAorIGVjaG8gIlJ1bm5pbmcgSlVuaXQgVGVzdHMiCisgc291cmNlICRCVUlMRF9ST09UL3J1blRlc3RzLnNoCitmaQorCisKKworCisKKwpkaWZmIC0tZ2l0IGEvcmVsZW5nL29yZy5lY2xpcHNlLnN0ZW0ucmVsZW5nL2J1aWxkRmVhdHVyZS5zaCBiL3JlbGVuZy9vcmcuZWNsaXBzZS5zdGVtLnJlbGVuZy9idWlsZEZlYXR1cmUuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMWVlMmQ0OAotLS0gL2Rldi9udWxsCisrKyBiL3JlbGVuZy9vcmcuZWNsaXBzZS5zdGVtLnJlbGVuZy9idWlsZEZlYXR1cmUuc2gKQEAgLTAsMCArMSwyNCBAQAorIyEvYmluL2Jhc2gKKyMgRmVhdHVyZSBidWlsZAorJEpBVkFfSE9NRS9iaW4vamF2YSBcCisgJEpBVkFfVk1fQVJHUyBcCisgLWphciAkRUNMSVBTRV9IT01FL3BsdWdpbnMvb3JnLmVjbGlwc2UuZXF1aW5veC5sYXVuY2hlcl8qLmphciBcCisgLWFwcGxpY2F0aW9uIG9yZy5lY2xpcHNlLmFudC5jb3JlLmFudFJ1bm5lciBcCisgLWJ1aWxkZmlsZSAkRUNMSVBTRV9IT01FL3BsdWdpbnMvb3JnLmVjbGlwc2UucGRlLmJ1aWxkXyovc2NyaXB0cy9idWlsZC54bWwgXAorIC1EdG9QdWJsaXNoPSRQVUJMSVNIX0JVSUxEIFwKKyAtRHVzZXJuYW1lPSRFQ0xJUFNFX0RFVkVMT1BFUl9VU0VSTkFNRSBcCisgLURwYXNzd29yZD0kRUNMSVBTRV9ERVZFTE9QRVJfUEFTU1dPUkQgXAorIC1EY2hlY2tvdXREaXI9JEJVSUxEX1JPT1QvLi4vLi4vIFwKKyAtRGJhc2U9JEJVSUxEX1JPT1QgXAorIC1EYmFzZUxvY2F0aW9uPSRFQ0xJUFNFX0hPTUUgXAorIC1EYnVpbGRlcj0kQlVJTERfUk9PVC9Db25maWdGZWF0dXJlIFwKKyAtRGZvcmNlQ29udGV4dFF1YWxpZmllcj0kUVVBTElGSUVSIFwKKyAtRG1ham9yVmVyc2lvbj0kTUFKT1JfVkVSU0lPTiBcCisgLURidWlsZExhYmVsU3VmZml4PSRCVUlMRF9MQUJFTFwKKyAtRHB1Ymxpc2hEaXI9JFBVQkxJU0hfRElSIFwKKyAtRGJ1aWxkRGF0ZT0kQlVJTERfREFURSBcCisgLURjbGVhbnVwRmlyc3Q9JENMRUFOX0ZJUlNUIFwKKyAtRGJ1aWxkVHlwZUZ1bGw9JEJVSUxEX1RZUEUgXAorIC1EZWNsaXBzZS5wMi5kYXRhLmFyZWE9cGxhdGZvcm06L2Jhc2UvcDIgXAorIC1EZWNsaXBzZS5wMi5wcm9maWxlPVNURU1Qcm9maWxlIFwKKyAkKgpkaWZmIC0tZ2l0IGEvcmVsZW5nL29yZy5lY2xpcHNlLnN0ZW0ucmVsZW5nL2J1aWxkUHJvZHVjdC5zaCBiL3JlbGVuZy9vcmcuZWNsaXBzZS5zdGVtLnJlbGVuZy9idWlsZFByb2R1Y3Quc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMWNmYjAxMQotLS0gL2Rldi9udWxsCisrKyBiL3JlbGVuZy9vcmcuZWNsaXBzZS5zdGVtLnJlbGVuZy9idWlsZFByb2R1Y3Quc2gKQEAgLTAsMCArMSwyNyBAQAorIyEvYmluL2Jhc2gKKworY3AgJEJVSUxEX1JPT1QvLi4vLi4vY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3N0ZW0ucHJvZHVjdCAkQlVJTERfUk9PVC9Db25maWdQcm9kdWN0LworCisjIFByb2R1Y3QgYnVpbGQKKyRKQVZBX0hPTUUvYmluL2phdmEgXAorICRKQVZBX1ZNX0FSR1MgXAorIC1qYXIgJEVDTElQU0VfSE9NRS9wbHVnaW5zL29yZy5lY2xpcHNlLmVxdWlub3gubGF1bmNoZXJfKi5qYXIgXAorIC1hcHBsaWNhdGlvbiBvcmcuZWNsaXBzZS5hbnQuY29yZS5hbnRSdW5uZXIgXAorIC1idWlsZGZpbGUgJEVDTElQU0VfSE9NRS9wbHVnaW5zL29yZy5lY2xpcHNlLnBkZS5idWlsZF8qL3NjcmlwdHMvcHJvZHVjdEJ1aWxkL3Byb2R1Y3RCdWlsZC54bWwgXAorIC1EdG9QdWJsaXNoPSRQVUJMSVNIX0JVSUxEIFwKKyAtRHVzZXJuYW1lPSRFQ0xJUFNFX0RFVkVMT1BFUl9VU0VSTkFNRSBcCisgLURwYXNzd29yZD0kRUNMSVBTRV9ERVZFTE9QRVJfUEFTU1dPUkQgXAorIC1EY2hlY2tvdXREaXI9JEJVSUxEX1JPT1QvLi4vIFwKKyAtRGJhc2U9JEJVSUxEX1JPT1QgXAorIC1EYmFzZUxvY2F0aW9uPSRFQ0xJUFNFX0hPTUUgXAorIC1EYnVpbGRlcj0kQlVJTERfUk9PVC9Db25maWdQcm9kdWN0IFwKKyAtRGZvcmNlQ29udGV4dFF1YWxpZmllcj0kUVVBTElGSUVSIFwKKyAtRG1ham9yVmVyc2lvbj0kTUFKT1JfVkVSU0lPTiBcCisgLURidWlsZExhYmVsU3VmZml4PSRCVUlMRF9MQUJFTFwKKyAtRHB1Ymxpc2hEaXI9JFBVQkxJU0hfRElSIFwKKyAtRGJ1aWxkRGF0ZT0kQlVJTERfREFURSBcCisgLURjbGVhbnVwRmlyc3Q9JENMRUFOX0ZJUlNUIFwKKyAtRGJ1aWxkVHlwZUZ1bGw9JEJVSUxEX1RZUEUgXAorIC1EZWNsaXBzZS5wMi5kYXRhLmFyZWE9cGxhdGZvcm06L2Jhc2UvcDIgXAorIC1EZWNsaXBzZS5wMi5wcm9maWxlPVNURU1Qcm9maWxlIFwKKyAkKgpkaWZmIC0tZ2l0IGEvcmVsZW5nL29yZy5lY2xpcHNlLnN0ZW0ucmVsZW5nL21hcHMvc3RlbS5tYXAgYi9yZWxlbmcvb3JnLmVjbGlwc2Uuc3RlbS5yZWxlbmcvbWFwcy9zdGVtLm1hcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZDUxYmJmCi0tLSAvZGV2L251bGwKKysrIGIvcmVsZW5nL29yZy5lY2xpcHNlLnN0ZW0ucmVsZW5nL21hcHMvc3RlbS5tYXAKQEAgLTAsMCArMSwxODAgQEAKKyEqKiogT3JiaXQgRGVwZW5kZW5jaWVzICoqKg0KKyFXUzpFWENMVURFDQorcGx1Z2luQG9yZy5hcGFjaGUuY29tbW9ucy5tYXRoPXYyXzEsOnBzZXJ2ZXI6YW5vbnltb3VzQGRldi5lY2xpcHNlLm9yZzovY3Zzcm9vdC90b29scyxudWxsLG9yZy5lY2xpcHNlLm9yYml0L29yZy5hcGFjaGUuY29tbW9ucy5tYXRoDQorDQorISoqKiBTVEVNIEZlYXR1cmVzICoqKg0KKyFXUzpTVEVNLUZlYXR1cmVzDQorZmVhdHVyZUBvcmcuZWNsaXBzZS5zdGVtLmZlYXR1cmU9Q09QWSwke2NoZWNrb3V0RGlyfS9mZWF0dXJlcyxvcmcuZWNsaXBzZS5zdGVtLmZlYXR1cmUNCitmZWF0dXJlQG9yZy5lY2xpcHNlLnN0ZW0ucHJvZHVjdC5mZWF0dXJlPUNPUFksJHtjaGVja291dERpcn0vZmVhdHVyZXMsb3JnLmVjbGlwc2Uuc3RlbS5wcm9kdWN0LmZlYXR1cmUNCitmZWF0dXJlQG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5mZWF0dXJlPUNPUFksJHtjaGVja291dERpcn0vZmVhdHVyZXMsb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmZlYXR1cmUNCitmZWF0dXJlQG9yZy5lY2xpcHNlLnN0ZW0uaW50ZXJuYWwuZGF0YS5mZWF0dXJlPUNPUFksJHtjaGVja291dERpcn0vZmVhdHVyZXMsb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcm5hbC5kYXRhLmZlYXR1cmUNCitmZWF0dXJlQG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuZmVhdHVyZT1DT1BZLCR7Y2hlY2tvdXREaXJ9L2ZlYXR1cmVzLG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuZmVhdHVyZQ0KK2ZlYXR1cmVAb3JnLmVjbGlwc2Uuc3RlbS5kaXN0cmlidXRlZC5mZWF0dXJlPUNPUFksJHtjaGVja291dERpcn0vZmVhdHVyZXMsb3JnLmVjbGlwc2Uuc3RlbS5kaXN0cmlidXRlZC5mZWF0dXJlDQorZmVhdHVyZUBvcmcuZWNsaXBzZS5zdGVtLm1vZGVscy5lcGlkZW1pb2xvZ3kuZmVhdHVyZT1DT1BZLCR7Y2hlY2tvdXREaXJ9L2ZlYXR1cmVzLG9yZy5lY2xpcHNlLnN0ZW0ubW9kZWxzLmVwaWRlbWlvbG9neS5mZWF0dXJlDQorZmVhdHVyZUBvcmcuZWNsaXBzZS5zdGVtLm1vZGVscy5wb3B1bGF0aW9uLmZlYXR1cmU9Q09QWSwke2NoZWNrb3V0RGlyfS9mZWF0dXJlcyxvcmcuZWNsaXBzZS5zdGVtLm1vZGVscy5wb3B1bGF0aW9uLmZlYXR1cmUNCitmZWF0dXJlQG9yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkuZmVhdHVyZT1DT1BZLCR7Y2hlY2tvdXREaXJ9L2ZlYXR1cmVzLG9yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkuZmVhdHVyZQ0KK2ZlYXR1cmVAb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLnBvcHVsYXRpb24uaHVtYW4uZmVhdHVyZT1DT1BZLCR7Y2hlY2tvdXREaXJ9L2ZlYXR1cmVzLG9yZy5lY2xpcHNlLnN0ZW0uZGF0YS5wb3B1bGF0aW9uLmh1bWFuLmZlYXR1cmUNCitmZWF0dXJlQG9yZy5lY2xpcHNlLnN0ZW0uZGF0YS50cmFuc3BvcnRhdGlvbi5mZWF0dXJlPUNPUFksJHtjaGVja291dERpcn0vZmVhdHVyZXMsb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLnRyYW5zcG9ydGF0aW9uLmZlYXR1cmUNCitmZWF0dXJlQG9yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZmVhdHVyZT1DT1BZLCR7Y2hlY2tvdXREaXJ9L2ZlYXR1cmVzLG9yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZmVhdHVyZQ0KKw0KKyEqKiogU1RFTSBDb3JlICoqKg0KKyFXUzpTVEVNLUNvcmUNCitwbHVnaW5Ab3JnLmVjbGlwc2Uuc3RlbS5jb3JlPUNPUFksJHtjaGVja291dERpcn0vY29yZSxvcmcuZWNsaXBzZS5zdGVtLmNvcmUNCitwbHVnaW5Ab3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucz1DT1BZLCR7Y2hlY2tvdXREaXJ9L2NvcmUsb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucw0KK3BsdWdpbkBvcmcuZWNsaXBzZS5zdGVtLmdyYXBoZ2VuZXJhdG9ycz1DT1BZLCR7Y2hlY2tvdXREaXJ9L2NvcmUsb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaGdlbmVyYXRvcnMNCitwbHVnaW5Ab3JnLmVjbGlwc2Uuc3RlbS5qb2JzPUNPUFksJHtjaGVja291dERpcn0vY29yZSxvcmcuZWNsaXBzZS5zdGVtLmpvYnMNCitmcmFnbWVudEBvcmcuZWNsaXBzZS5zdGVtLmpvYnMubmwxPUNPUFksJHtjaGVja291dERpcn0vY29yZSxvcmcuZWNsaXBzZS5zdGVtLmpvYnMubmwxDQorcGx1Z2luQG9yZy5lY2xpcHNlLnN0ZW0uc2VxdWVuY2Vycz1DT1BZLCR7Y2hlY2tvdXREaXJ9L2NvcmUsb3JnLmVjbGlwc2Uuc3RlbS5zZXF1ZW5jZXJzDQorcGx1Z2luQG9yZy5lY2xpcHNlLnN0ZW0uc29sdmVycy5mZD1DT1BZLCR7Y2hlY2tvdXREaXJ9L2NvcmUsb3JnLmVjbGlwc2Uuc3RlbS5zb2x2ZXJzLmZkDQorcGx1Z2luQG9yZy5lY2xpcHNlLnN0ZW0uc29sdmVycy5yaz1DT1BZLCR7Y2hlY2tvdXREaXJ9L2NvcmUsb3JnLmVjbGlwc2Uuc3RlbS5zb2x2ZXJzLnJrDQorcGx1Z2luQG9yZy5lY2xpcHNlLnN0ZW0udHJhbnNwb3J0PUNPUFksJHtjaGVja291dERpcn0vY29yZSxvcmcuZWNsaXBzZS5zdGVtLnRyYW5zcG9ydA0KK3BsdWdpbkBvcmcuZWNsaXBzZS5zdGVtLnVpPUNPUFksJHtjaGVja291dERpcn0vY29yZSxvcmcuZWNsaXBzZS5zdGVtLnVpDQorcGx1Z2luQG9yZy5lY2xpcHNlLnN0ZW0udWkuZ2U9Q09QWSwke2NoZWNrb3V0RGlyfS9jb3JlLG9yZy5lY2xpcHNlLnN0ZW0udWkuZ2UNCitwbHVnaW5Ab3JnLmVjbGlwc2Uuc3RlbS51aS5ncmFwaGVkaXRvcj1DT1BZLCR7Y2hlY2tvdXREaXJ9L2NvcmUsb3JnLmVjbGlwc2Uuc3RlbS51aS5ncmFwaGVkaXRvcg0KK3BsdWdpbkBvcmcuZWNsaXBzZS5zdGVtLnVpLmhlYWRsZXNzPUNPUFksJHtjaGVja291dERpcn0vY29yZSxvcmcuZWNsaXBzZS5zdGVtLnVpLmhlYWRsZXNzDQorcGx1Z2luQG9yZy5lY2xpcHNlLnN0ZW0udWkuZ3JhcGhnZW5lcmF0b3JzPUNPUFksJHtjaGVja291dERpcn0vY29yZSxvcmcuZWNsaXBzZS5zdGVtLnVpLmdyYXBoZ2VuZXJhdG9ycw0KK2ZyYWdtZW50QG9yZy5lY2xpcHNlLnN0ZW0udWkubmwxPUNPUFksJHtjaGVja291dERpcn0vY29yZSxvcmcuZWNsaXBzZS5zdGVtLnVpLm5sMQ0KK3BsdWdpbkBvcmcuZWNsaXBzZS5zdGVtLnVpLnJlcG9ydHM9Q09QWSwke2NoZWNrb3V0RGlyfS9jb3JlLG9yZy5lY2xpcHNlLnN0ZW0udWkucmVwb3J0cw0KK3BsdWdpbkBvcmcuZWNsaXBzZS5zdGVtLnVpLnNvbHZlcnMuZmQ9Q09QWSwke2NoZWNrb3V0RGlyfS9jb3JlLG9yZy5lY2xpcHNlLnN0ZW0udWkuc29sdmVycy5mZA0KK3BsdWdpbkBvcmcuZWNsaXBzZS5zdGVtLnVpLnNvbHZlcnMucms9Q09QWSwke2NoZWNrb3V0RGlyfS9jb3JlLG9yZy5lY2xpcHNlLnN0ZW0udWkuc29sdmVycy5yaw0KK3BsdWdpbkBvcmcuZWNsaXBzZS5zdGVtLnVpLnRyYW5zcG9ydD1DT1BZLCR7Y2hlY2tvdXREaXJ9L2NvcmUsb3JnLmVjbGlwc2Uuc3RlbS51aS50cmFuc3BvcnQNCitwbHVnaW5Ab3JnLmVjbGlwc2Uuc3RlbS51dGlsLmxvZ2dlcnM9Q09QWSwke2NoZWNrb3V0RGlyfS9jb3JlLG9yZy5lY2xpcHNlLnN0ZW0udXRpbC5sb2dnZXJzDQorDQorISoqKiBBbmFseXNpcyAqKioNCishV1M6U1RFTS1BbmFseXNpcw0KK3BsdWdpbkBvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzPUNPUFksJHtjaGVja291dERpcn0vYW5hbHlzaXMsb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcw0KK3BsdWdpbkBvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQ9Q09QWSwke2NoZWNrb3V0RGlyfS9hbmFseXNpcyxvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQNCitwbHVnaW5Ab3JnLmVjbGlwc2Uuc3RlbS51dGlsLmFuYWx5c2lzPUNPUFksJHtjaGVja291dERpcn0vYW5hbHlzaXMsb3JnLmVjbGlwc2Uuc3RlbS51dGlsLmFuYWx5c2lzDQorDQorISoqKiBEYXRhICoqKg0KKyFXUzpTVEVNLURhdGENCitwbHVnaW5Ab3JnLmVjbGlwc2Uuc3RlbS5pbnRlcm5hbC5kYXRhPUNPUFksJHtjaGVja291dERpcn0vZGF0YSxvcmcuZWNsaXBzZS5zdGVtLmludGVybmFsLmRhdGENCitwbHVnaW5Ab3JnLmVjbGlwc2Uuc3RlbS5pbnRlcm5hbC5kYXRhLmdlb2dyYXBoeT1DT1BZLCR7Y2hlY2tvdXREaXJ9L2RhdGEvZ2VvZ3JhcGh5LG9yZy5lY2xpcHNlLnN0ZW0uaW50ZXJuYWwuZGF0YS5nZW9ncmFwaHkNCitwbHVnaW5Ab3JnLmVjbGlwc2Uuc3RlbS5pbnRlcm5hbC5kYXRhLmdlb2dyYXBoeS5pbmZyYXN0cnVjdHVyZS50cmFuc3BvcnRhdGlvbj1DT1BZLCR7Y2hlY2tvdXREaXJ9L2RhdGEvZ2VvZ3JhcGh5LG9yZy5lY2xpcHNlLnN0ZW0uaW50ZXJuYWwuZGF0YS5nZW9ncmFwaHkuaW5mcmFzdHJ1Y3R1cmUudHJhbnNwb3J0YXRpb24NCitwbHVnaW5Ab3JnLmVjbGlwc2Uuc3RlbS5pbnRlcm5hbC5kYXRhLmdlb2dyYXBoeS5tb2RlbHM9Q09QWSwke2NoZWNrb3V0RGlyfS9kYXRhL2dlb2dyYXBoeSxvcmcuZWNsaXBzZS5zdGVtLmludGVybmFsLmRhdGEuZ2VvZ3JhcGh5Lm1vZGVscw0KK3BsdWdpbkBvcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5PUNPUFksJHtjaGVja291dERpcn0vZGF0YS9nZW9ncmFwaHksb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeQ0KK3BsdWdpbkBvcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5LmluZnJhc3RydWN0dXJlLnRyYW5zcG9ydGF0aW9uPUNPUFksJHtjaGVja291dERpcn0vZGF0YS9nZW9ncmFwaHksb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS5pbmZyYXN0cnVjdHVyZS50cmFuc3BvcnRhdGlvbg0KK3BsdWdpbkBvcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5Lm1vZGVscz1DT1BZLCR7Y2hlY2tvdXREaXJ9L2RhdGEvZ2VvZ3JhcGh5LG9yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkubW9kZWxzDQorDQorISoqKiBQb3B1bGF0aW9uIERhdGEgKioqDQorcGx1Z2luQG9yZy5lY2xpcHNlLnN0ZW0uaW50ZXJuYWwuZGF0YS5nZW9ncmFwaHkucG9wdWxhdGlvbj1DT1BZLCR7Y2hlY2tvdXREaXJ9L2RhdGEvcG9wdWxhdGlvbixvcmcuZWNsaXBzZS5zdGVtLmludGVybmFsLmRhdGEuZ2VvZ3JhcGh5LnBvcHVsYXRpb24NCitwbHVnaW5Ab3JnLmVjbGlwc2Uuc3RlbS5pbnRlcm5hbC5kYXRhLmdlb2dyYXBoeS5wb3B1bGF0aW9uLmh1bWFuPUNPUFksJHtjaGVja291dERpcn0vZGF0YS9wb3B1bGF0aW9uLG9yZy5lY2xpcHNlLnN0ZW0uaW50ZXJuYWwuZGF0YS5nZW9ncmFwaHkucG9wdWxhdGlvbi5odW1hbg0KK3BsdWdpbkBvcmcuZWNsaXBzZS5zdGVtLmludGVybmFsLmRhdGEuZ2VvZ3JhcGh5LnBvcHVsYXRpb24uaHVtYW4ubW9kZWxzPUNPUFksJHtjaGVja291dERpcn0vZGF0YS9wb3B1bGF0aW9uLG9yZy5lY2xpcHNlLnN0ZW0uaW50ZXJuYWwuZGF0YS5nZW9ncmFwaHkucG9wdWxhdGlvbi5odW1hbi5tb2RlbHMNCitwbHVnaW5Ab3JnLmVjbGlwc2Uuc3RlbS5pbnRlcm5hbC5kYXRhLnBvcHVsYXRpb24uaHVtYW49Q09QWSwke2NoZWNrb3V0RGlyfS9kYXRhL3BvcHVsYXRpb24sb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcm5hbC5kYXRhLnBvcHVsYXRpb24uaHVtYW4NCitwbHVnaW5Ab3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS5wb3B1bGF0aW9uLmh1bWFuPUNPUFksJHtjaGVja291dERpcn0vZGF0YS9wb3B1bGF0aW9uLG9yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkucG9wdWxhdGlvbi5odW1hbg0KK3BsdWdpbkBvcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5LnBvcHVsYXRpb24uaHVtYW4ubW9kZWxzPUNPUFksJHtjaGVja291dERpcn0vZGF0YS9wb3B1bGF0aW9uLG9yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkucG9wdWxhdGlvbi5odW1hbi5tb2RlbHMNCisNCisNCishKioqIEVwaWRlbWlvbG9neSAvIERpc2Vhc2UgTW9kZWxzICoqKg0KKyFXUzpTVEVNLURpc2Vhc2VNb2RlbHMNCitwbHVnaW5Ab3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmRpc2Vhc2Vtb2RlbHMubW9kZWxzPUNPUFksJHtjaGVja291dERpcn0vbW9kZWxzL2VwaWRlbWlvbG9neSxvcmcuZWNsaXBzZS5zdGVtLmRhdGEuZGlzZWFzZW1vZGVscy5tb2RlbHMNCitwbHVnaW5Ab3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmRpc2Vhc2Vtb2RlbHMuc2NlbmFyaW9zPUNPUFksJHtjaGVja291dERpcn0vbW9kZWxzL2VwaWRlbWlvbG9neSxvcmcuZWNsaXBzZS5zdGVtLmRhdGEuZGlzZWFzZW1vZGVscy5zY2VuYXJpb3MNCitwbHVnaW5Ab3JnLmVjbGlwc2Uuc3RlbS5pbnRlcm5hbC5kaXNlYXNlbW9kZWxzLm1vZGVscz1DT1BZLCR7Y2hlY2tvdXREaXJ9L21vZGVscy9lcGlkZW1pb2xvZ3ksb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcm5hbC5kaXNlYXNlbW9kZWxzLm1vZGVscw0KK3BsdWdpbkBvcmcuZWNsaXBzZS5zdGVtLmludGVybmFsLmRpc2Vhc2Vtb2RlbHMuc2NlbmFyaW9zPUNPUFksJHtjaGVja291dERpcn0vbW9kZWxzL2VwaWRlbWlvbG9neSxvcmcuZWNsaXBzZS5zdGVtLmludGVybmFsLmRpc2Vhc2Vtb2RlbHMuc2NlbmFyaW9zDQorcGx1Z2luQG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscz1DT1BZLCR7Y2hlY2tvdXREaXJ9L21vZGVscy9lcGlkZW1pb2xvZ3ksb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzDQorcGx1Z2luQG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leGFtcGxlPUNPUFksJHtjaGVja291dERpcn0vbW9kZWxzL2VwaWRlbWlvbG9neSxvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXhhbXBsZQ0KK3BsdWdpbkBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXhwZXJpbWVudGFsPUNPUFksJHtjaGVja291dERpcn0vbW9kZWxzL2VwaWRlbWlvbG9neSxvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXhwZXJpbWVudGFsDQorcGx1Z2luQG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leHRlcm5hbGRhdGFzb3VyY2U9Q09QWSwke2NoZWNrb3V0RGlyfS9tb2RlbHMvZXBpZGVtaW9sb2d5LG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leHRlcm5hbGRhdGFzb3VyY2UNCitwbHVnaW5Ab3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmZvcmNpbmc9Q09QWSwke2NoZWNrb3V0RGlyfS9tb2RlbHMvZXBpZGVtaW9sb2d5LG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5mb3JjaW5nDQorcGx1Z2luQG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5nbG9iYWxpbmZsdWVuemFtb2RlbD1DT1BZLCR7Y2hlY2tvdXREaXJ9L21vZGVscy9lcGlkZW1pb2xvZ3ksb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmdsb2JhbGluZmx1ZW56YW1vZGVsDQorcGx1Z2luQG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5tdWx0aXBvcHVsYXRpb249Q09QWSwke2NoZWNrb3V0RGlyfS9tb2RlbHMvZXBpZGVtaW9sb2d5LG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5tdWx0aXBvcHVsYXRpb24NCitwbHVnaW5Ab3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvcj1DT1BZLCR7Y2hlY2tvdXREaXJ9L21vZGVscy9lcGlkZW1pb2xvZ3ksb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvcg0KK3BsdWdpbkBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2VzPUNPUFksJHtjaGVja291dERpcn0vbW9kZWxzL2VwaWRlbWlvbG9neSxvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2VzDQorcGx1Z2luQG9yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscz1DT1BZLCR7Y2hlY2tvdXREaXJ9L21vZGVscy9lcGlkZW1pb2xvZ3ksb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzDQorcGx1Z2luQG9yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy5leGFtcGxlPUNPUFksJHtjaGVja291dERpcn0vbW9kZWxzL2VwaWRlbWlvbG9neSxvcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMuZXhhbXBsZQ0KK3BsdWdpbkBvcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMuZXhwZXJpbWVudGFsPUNPUFksJHtjaGVja291dERpcn0vbW9kZWxzL2VwaWRlbWlvbG9neSxvcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMuZXhwZXJpbWVudGFsDQorcGx1Z2luQG9yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy5leHRlcm5hbGRhdGFzb3VyY2U9Q09QWSwke2NoZWNrb3V0RGlyfS9tb2RlbHMvZXBpZGVtaW9sb2d5LG9yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy5leHRlcm5hbGRhdGFzb3VyY2UNCitwbHVnaW5Ab3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzLmZvcmNpbmc9Q09QWSwke2NoZWNrb3V0RGlyfS9tb2RlbHMvZXBpZGVtaW9sb2d5LG9yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy5mb3JjaW5nDQorcGx1Z2luQG9yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy5nbG9iYWxpbmZsdWVuemFtb2RlbD1DT1BZLCR7Y2hlY2tvdXREaXJ9L21vZGVscy9lcGlkZW1pb2xvZ3ksb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzLmdsb2JhbGluZmx1ZW56YW1vZGVsDQorcGx1Z2luQG9yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy5tdWx0aXBvcHVsYXRpb249Q09QWSwke2NoZWNrb3V0RGlyfS9tb2RlbHMvZXBpZGVtaW9sb2d5LG9yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy5tdWx0aXBvcHVsYXRpb24NCitwbHVnaW5Ab3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzLnZlY3Rvcj1DT1BZLCR7Y2hlY2tvdXREaXJ9L21vZGVscy9lcGlkZW1pb2xvZ3ksb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzLnZlY3Rvcg0KK3BsdWdpbkBvcmcuZWNsaXBzZS5zdGVtLmludGVydmVudGlvbnM9Q09QWSwke2NoZWNrb3V0RGlyfS9tb2RlbHMvZXBpZGVtaW9sb2d5LG9yZy5lY2xpcHNlLnN0ZW0uaW50ZXJ2ZW50aW9ucw0KK3BsdWdpbkBvcmcuZWNsaXBzZS5zdGVtLnVpLmludGVydmVudGlvbnM9Q09QWSwke2NoZWNrb3V0RGlyfS9tb2RlbHMvZXBpZGVtaW9sb2d5LG9yZy5lY2xpcHNlLnN0ZW0udWkuaW50ZXJ2ZW50aW9ucw0KKw0KKw0KKyEqKiogUG9wdWxhdGlvbiBNb2RlbHMgKioqDQorIVdTOlNURU0tUG9wdWxhdGlvbk1vZGVscw0KK3BsdWdpbkBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHM9Q09QWSwke2NoZWNrb3V0RGlyfS9tb2RlbHMvcG9wdWxhdGlvbnMsb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzDQorcGx1Z2luQG9yZy5lY2xpcHNlLnN0ZW0udWkucG9wdWxhdGlvbm1vZGVscz1DT1BZLCR7Y2hlY2tvdXREaXJ9L21vZGVscy9wb3B1bGF0aW9ucyxvcmcuZWNsaXBzZS5zdGVtLnVpLnBvcHVsYXRpb25tb2RlbHMNCisNCishKioqIERpc3RyaWJ1dGVkIFNURU0gKioqDQorIVdTOlNURU0tRGlzdHJpYnV0ZWQNCitwbHVnaW5Ab3JnLmVjbGlwc2Uuc3RlbS5ncmFwaHN5bmNocm9uaXplcj1DT1BZLCR7Y2hlY2tvdXREaXJ9L2Rpc3RyaWJ1dGVkLG9yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhzeW5jaHJvbml6ZXINCisNCishKioqIFRlc3RzICoqKg0KKyFXUzpTVEVNLVRlc3RzDQorcGx1Z2luQG9yZy5lY2xpcHNlLnN0ZW0udGVzdHMuYXV0b21hdGljZXhwZXJpbWVudD1DT1BZLCR7Y2hlY2tvdXREaXJ9L3Rlc3RzLG9yZy5lY2xpcHNlLnN0ZW0udGVzdHMuYXV0b21hdGljZXhwZXJpbWVudA0KK3BsdWdpbkBvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmU9Q09QWSwke2NoZWNrb3V0RGlyfS90ZXN0cyxvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUNCitwbHVnaW5Ab3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kZWZpbml0aW9ucz1DT1BZLCR7Y2hlY2tvdXREaXJ9L3Rlc3RzLG9yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGVmaW5pdGlvbnMNCitwbHVnaW5Ab3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kaXNlYXNlbW9kZWxzPUNPUFksJHtjaGVja291dERpcn0vdGVzdHMsb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kaXNlYXNlbW9kZWxzDQorcGx1Z2luQG9yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGlzZWFzZW1vZGVscy5leGFtcGxlPUNPUFksJHtjaGVja291dERpcn0vdGVzdHMsb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kaXNlYXNlbW9kZWxzLmV4YW1wbGUNCitwbHVnaW5Ab3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kaXNlYXNlbW9kZWxzLmV4cGVyaW1lbnRhbD1DT1BZLCR7Y2hlY2tvdXREaXJ9L3Rlc3RzLG9yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGlzZWFzZW1vZGVscy5leHBlcmltZW50YWwNCitwbHVnaW5Ab3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kaXNlYXNlbW9kZWxzLmV4dGVybmFsZGF0YXNvdXJjZT1DT1BZLCR7Y2hlY2tvdXREaXJ9L3Rlc3RzLG9yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGlzZWFzZW1vZGVscy5leHRlcm5hbGRhdGFzb3VyY2UNCitwbHVnaW5Ab3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kaXNlYXNlbW9kZWxzLmZvcmNpbmc9Q09QWSwke2NoZWNrb3V0RGlyfS90ZXN0cyxvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRpc2Vhc2Vtb2RlbHMuZm9yY2luZw0KK3BsdWdpbkBvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRpc2Vhc2Vtb2RlbHMubXVsdGlwb3B1bGF0aW9uPUNPUFksJHtjaGVja291dERpcn0vdGVzdHMsb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kaXNlYXNlbW9kZWxzLm11bHRpcG9wdWxhdGlvbg0KK3BsdWdpbkBvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmdyYXBoZWRpdG9yPUNPUFksJHtjaGVja291dERpcn0vdGVzdHMsb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5ncmFwaGVkaXRvcg0KK3BsdWdpbkBvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmdyYXBoZ2VuZXJhdG9ycz1DT1BZLCR7Y2hlY2tvdXREaXJ9L3Rlc3RzLG9yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZ3JhcGhnZW5lcmF0b3JzDQorcGx1Z2luQG9yZy5lY2xpcHNlLnN0ZW0udGVzdHMuaW50ZXJuYWwuZGF0YT1DT1BZLCR7Y2hlY2tvdXREaXJ9L3Rlc3RzLG9yZy5lY2xpcHNlLnN0ZW0udGVzdHMuaW50ZXJuYWwuZGF0YQ0KK3BsdWdpbkBvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmpvYnM9Q09QWSwke2NoZWNrb3V0RGlyfS90ZXN0cyxvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmpvYnMNCitwbHVnaW5Ab3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5wb3B1bGF0aW9ubW9kZWxzPUNPUFksJHtjaGVja291dERpcn0vdGVzdHMsb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5wb3B1bGF0aW9ubW9kZWxzDQorcGx1Z2luQG9yZy5lY2xpcHNlLnN0ZW0udGVzdHMudHJhbnNwb3J0PUNPUFksJHtjaGVja291dERpcn0vdGVzdHMsb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy50cmFuc3BvcnQNCitwbHVnaW5Ab3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51aT1DT1BZLCR7Y2hlY2tvdXREaXJ9L3Rlc3RzLG9yZy5lY2xpcHNlLnN0ZW0udGVzdHMudWkNCitwbHVnaW5Ab3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51aS5nZT1DT1BZLCR7Y2hlY2tvdXREaXJ9L3Rlc3RzLG9yZy5lY2xpcHNlLnN0ZW0udGVzdHMudWkuZ2UNCitwbHVnaW5Ab3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsPUNPUFksJHtjaGVja291dERpcn0vdGVzdHMsb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsDQorcGx1Z2luQG9yZy5lY2xpcHNlLnN0ZW0udGVzdHMuaW50ZXJ2ZW50aW9ucz1DT1BZLCR7Y2hlY2tvdXREaXJ9L3Rlc3RzLG9yZy5lY2xpcHNlLnN0ZW0udGVzdHMuaW50ZXJ2ZW50aW9ucw0KK3BsdWdpbkBvcmcuZWNsaXBzZS5zdGVtLnNhbXBsZT1DT1BZLCR7Y2hlY2tvdXREaXJ9L3Rlc3RzLG9yZy5lY2xpcHNlLnN0ZW0uc2FtcGxlDQorDQorDQorISoqKiBFYXJ0aCBTY2llbmNlIERhdGEgKioqDQorIVdTOlNURU0tRGF0YS1FYXJ0aFNjaWVuY2UNCitwbHVnaW5Ab3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS5lYXJ0aHNjaWVuY2UuMjAwMD1DT1BZLCR7Y2hlY2tvdXREaXJ9L2RhdGEvZWFydGhzY2llbmNlLG9yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkuZWFydGhzY2llbmNlLjIwMDANCitwbHVnaW5Ab3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS5lYXJ0aHNjaWVuY2UuMjAwMC5tb2RlbHM9Q09QWSwke2NoZWNrb3V0RGlyfS9kYXRhL2VhcnRoc2NpZW5jZSxvcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5LmVhcnRoc2NpZW5jZS4yMDAwLm1vZGVscw0KK3BsdWdpbkBvcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5LmVhcnRoc2NpZW5jZS4yMDAxPUNPUFksJHtjaGVja291dERpcn0vZGF0YS9lYXJ0aHNjaWVuY2Usb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS5lYXJ0aHNjaWVuY2UuMjAwMQ0KK3BsdWdpbkBvcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5LmVhcnRoc2NpZW5jZS4yMDAxLm1vZGVscz1DT1BZLCR7Y2hlY2tvdXREaXJ9L2RhdGEvZWFydGhzY2llbmNlLG9yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkuZWFydGhzY2llbmNlLjIwMDEubW9kZWxzDQorcGx1Z2luQG9yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkuZWFydGhzY2llbmNlLjIwMDI9Q09QWSwke2NoZWNrb3V0RGlyfS9kYXRhL2VhcnRoc2NpZW5jZSxvcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5LmVhcnRoc2NpZW5jZS4yMDAyDQorcGx1Z2luQG9yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkuZWFydGhzY2llbmNlLjIwMDIubW9kZWxzPUNPUFksJHtjaGVja291dERpcn0vZGF0YS9lYXJ0aHNjaWVuY2Usb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS5lYXJ0aHNjaWVuY2UuMjAwMi5tb2RlbHMNCitwbHVnaW5Ab3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS5lYXJ0aHNjaWVuY2UuMjAwMz1DT1BZLCR7Y2hlY2tvdXREaXJ9L2RhdGEvZWFydGhzY2llbmNlLG9yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkuZWFydGhzY2llbmNlLjIwMDMNCitwbHVnaW5Ab3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS5lYXJ0aHNjaWVuY2UuMjAwMy5tb2RlbHM9Q09QWSwke2NoZWNrb3V0RGlyfS9kYXRhL2VhcnRoc2NpZW5jZSxvcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5LmVhcnRoc2NpZW5jZS4yMDAzLm1vZGVscw0KK3BsdWdpbkBvcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5LmVhcnRoc2NpZW5jZS4yMDA0PUNPUFksJHtjaGVja291dERpcn0vZGF0YS9lYXJ0aHNjaWVuY2Usb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS5lYXJ0aHNjaWVuY2UuMjAwNA0KK3BsdWdpbkBvcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5LmVhcnRoc2NpZW5jZS4yMDA0Lm1vZGVscz1DT1BZLCR7Y2hlY2tvdXREaXJ9L2RhdGEvZWFydGhzY2llbmNlLG9yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkuZWFydGhzY2llbmNlLjIwMDQubW9kZWxzDQorcGx1Z2luQG9yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkuZWFydGhzY2llbmNlLjIwMDU9Q09QWSwke2NoZWNrb3V0RGlyfS9kYXRhL2VhcnRoc2NpZW5jZSxvcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5LmVhcnRoc2NpZW5jZS4yMDA1DQorcGx1Z2luQG9yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkuZWFydGhzY2llbmNlLjIwMDUubW9kZWxzPUNPUFksJHtjaGVja291dERpcn0vZGF0YS9lYXJ0aHNjaWVuY2Usb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS5lYXJ0aHNjaWVuY2UuMjAwNS5tb2RlbHMNCitwbHVnaW5Ab3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS5lYXJ0aHNjaWVuY2UuMjAwNj1DT1BZLCR7Y2hlY2tvdXREaXJ9L2RhdGEvZWFydGhzY2llbmNlLG9yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkuZWFydGhzY2llbmNlLjIwMDYNCitwbHVnaW5Ab3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS5lYXJ0aHNjaWVuY2UuMjAwNi5tb2RlbHM9Q09QWSwke2NoZWNrb3V0RGlyfS9kYXRhL2VhcnRoc2NpZW5jZSxvcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5LmVhcnRoc2NpZW5jZS4yMDA2Lm1vZGVscw0KK3BsdWdpbkBvcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5LmVhcnRoc2NpZW5jZS4yMDA3PUNPUFksJHtjaGVja291dERpcn0vZGF0YS9lYXJ0aHNjaWVuY2Usb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS5lYXJ0aHNjaWVuY2UuMjAwNw0KK3BsdWdpbkBvcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5LmVhcnRoc2NpZW5jZS4yMDA3Lm1vZGVscz1DT1BZLCR7Y2hlY2tvdXREaXJ9L2RhdGEvZWFydGhzY2llbmNlLG9yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkuZWFydGhzY2llbmNlLjIwMDcubW9kZWxzDQorcGx1Z2luQG9yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkuZWFydGhzY2llbmNlLjIwMDg9Q09QWSwke2NoZWNrb3V0RGlyfS9kYXRhL2VhcnRoc2NpZW5jZSxvcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5LmVhcnRoc2NpZW5jZS4yMDA4DQorcGx1Z2luQG9yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkuZWFydGhzY2llbmNlLjIwMDgubW9kZWxzPUNPUFksJHtjaGVja291dERpcn0vZGF0YS9lYXJ0aHNjaWVuY2Usb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS5lYXJ0aHNjaWVuY2UuMjAwOC5tb2RlbHMNCitwbHVnaW5Ab3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS5lYXJ0aHNjaWVuY2UuMjAwOT1DT1BZLCR7Y2hlY2tvdXREaXJ9L2RhdGEvZWFydGhzY2llbmNlLG9yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkuZWFydGhzY2llbmNlLjIwMDkNCitwbHVnaW5Ab3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS5lYXJ0aHNjaWVuY2UuMjAwOS5tb2RlbHM9Q09QWSwke2NoZWNrb3V0RGlyfS9kYXRhL2VhcnRoc2NpZW5jZSxvcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5LmVhcnRoc2NpZW5jZS4yMDA5Lm1vZGVscw0KK3BsdWdpbkBvcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5LmVhcnRoc2NpZW5jZS4yMDEwPUNPUFksJHtjaGVja291dERpcn0vZGF0YS9lYXJ0aHNjaWVuY2Usb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS5lYXJ0aHNjaWVuY2UuMjAxMA0KK3BsdWdpbkBvcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5LmVhcnRoc2NpZW5jZS4yMDEwLm1vZGVscz1DT1BZLCR7Y2hlY2tvdXREaXJ9L2RhdGEvZWFydGhzY2llbmNlLG9yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkuZWFydGhzY2llbmNlLjIwMTAubW9kZWxzDQorcGx1Z2luQG9yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkuZWFydGhzY2llbmNlLmNvbWJpbmVkPUNPUFksJHtjaGVja291dERpcn0vZGF0YS9lYXJ0aHNjaWVuY2Usb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS5lYXJ0aHNjaWVuY2UuY29tYmluZWQNCitwbHVnaW5Ab3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS5lYXJ0aHNjaWVuY2UuY29tYmluZWQubW9kZWxzPUNPUFksJHtjaGVja291dERpcn0vZGF0YS9lYXJ0aHNjaWVuY2Usb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS5lYXJ0aHNjaWVuY2UuY29tYmluZWQubW9kZWxzDQorcGx1Z2luQG9yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkuZWFydGhzY2llbmNlLmVsZXZhdGlvbj1DT1BZLCR7Y2hlY2tvdXREaXJ9L2RhdGEvZWFydGhzY2llbmNlLG9yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkuZWFydGhzY2llbmNlLmVsZXZhdGlvbg0KK3BsdWdpbkBvcmcuZWNsaXBzZS5zdGVtLmludGVybmFsLmRhdGEuZ2VvZ3JhcGh5LmVhcnRoc2NpZW5jZT1DT1BZLCR7Y2hlY2tvdXREaXJ9L2RhdGEvZWFydGhzY2llbmNlLG9yZy5lY2xpcHNlLnN0ZW0uaW50ZXJuYWwuZGF0YS5nZW9ncmFwaHkuZWFydGhzY2llbmNlDQorcGx1Z2luQG9yZy5lY2xpcHNlLnN0ZW0uaW50ZXJuYWwuZGF0YS5nZW9ncmFwaHkuZWFydGhzY2llbmNlLjIwMDA9Q09QWSwke2NoZWNrb3V0RGlyfS9kYXRhL2VhcnRoc2NpZW5jZSxvcmcuZWNsaXBzZS5zdGVtLmludGVybmFsLmRhdGEuZ2VvZ3JhcGh5LmVhcnRoc2NpZW5jZS4yMDAwDQorcGx1Z2luQG9yZy5lY2xpcHNlLnN0ZW0uaW50ZXJuYWwuZGF0YS5nZW9ncmFwaHkuZWFydGhzY2llbmNlLjIwMDAubW9kZWxzPUNPUFksJHtjaGVja291dERpcn0vZGF0YS9lYXJ0aHNjaWVuY2Usb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcm5hbC5kYXRhLmdlb2dyYXBoeS5lYXJ0aHNjaWVuY2UuMjAwMC5tb2RlbHMNCitwbHVnaW5Ab3JnLmVjbGlwc2Uuc3RlbS5pbnRlcm5hbC5kYXRhLmdlb2dyYXBoeS5lYXJ0aHNjaWVuY2UuMjAwMT1DT1BZLCR7Y2hlY2tvdXREaXJ9L2RhdGEvZWFydGhzY2llbmNlLG9yZy5lY2xpcHNlLnN0ZW0uaW50ZXJuYWwuZGF0YS5nZW9ncmFwaHkuZWFydGhzY2llbmNlLjIwMDENCitwbHVnaW5Ab3JnLmVjbGlwc2Uuc3RlbS5pbnRlcm5hbC5kYXRhLmdlb2dyYXBoeS5lYXJ0aHNjaWVuY2UuMjAwMS5tb2RlbHM9Q09QWSwke2NoZWNrb3V0RGlyfS9kYXRhL2VhcnRoc2NpZW5jZSxvcmcuZWNsaXBzZS5zdGVtLmludGVybmFsLmRhdGEuZ2VvZ3JhcGh5LmVhcnRoc2NpZW5jZS4yMDAxLm1vZGVscw0KK3BsdWdpbkBvcmcuZWNsaXBzZS5zdGVtLmludGVybmFsLmRhdGEuZ2VvZ3JhcGh5LmVhcnRoc2NpZW5jZS4yMDAyPUNPUFksJHtjaGVja291dERpcn0vZGF0YS9lYXJ0aHNjaWVuY2Usb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcm5hbC5kYXRhLmdlb2dyYXBoeS5lYXJ0aHNjaWVuY2UuMjAwMg0KK3BsdWdpbkBvcmcuZWNsaXBzZS5zdGVtLmludGVybmFsLmRhdGEuZ2VvZ3JhcGh5LmVhcnRoc2NpZW5jZS4yMDAyLm1vZGVscz1DT1BZLCR7Y2hlY2tvdXREaXJ9L2RhdGEvZWFydGhzY2llbmNlLG9yZy5lY2xpcHNlLnN0ZW0uaW50ZXJuYWwuZGF0YS5nZW9ncmFwaHkuZWFydGhzY2llbmNlLjIwMDIubW9kZWxzDQorcGx1Z2luQG9yZy5lY2xpcHNlLnN0ZW0uaW50ZXJuYWwuZGF0YS5nZW9ncmFwaHkuZWFydGhzY2llbmNlLjIwMDM9Q09QWSwke2NoZWNrb3V0RGlyfS9kYXRhL2VhcnRoc2NpZW5jZSxvcmcuZWNsaXBzZS5zdGVtLmludGVybmFsLmRhdGEuZ2VvZ3JhcGh5LmVhcnRoc2NpZW5jZS4yMDAzDQorcGx1Z2luQG9yZy5lY2xpcHNlLnN0ZW0uaW50ZXJuYWwuZGF0YS5nZW9ncmFwaHkuZWFydGhzY2llbmNlLjIwMDMubW9kZWxzPUNPUFksJHtjaGVja291dERpcn0vZGF0YS9lYXJ0aHNjaWVuY2Usb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcm5hbC5kYXRhLmdlb2dyYXBoeS5lYXJ0aHNjaWVuY2UuMjAwMy5tb2RlbHMNCitwbHVnaW5Ab3JnLmVjbGlwc2Uuc3RlbS5pbnRlcm5hbC5kYXRhLmdlb2dyYXBoeS5lYXJ0aHNjaWVuY2UuMjAwND1DT1BZLCR7Y2hlY2tvdXREaXJ9L2RhdGEvZWFydGhzY2llbmNlLG9yZy5lY2xpcHNlLnN0ZW0uaW50ZXJuYWwuZGF0YS5nZW9ncmFwaHkuZWFydGhzY2llbmNlLjIwMDQNCitwbHVnaW5Ab3JnLmVjbGlwc2Uuc3RlbS5pbnRlcm5hbC5kYXRhLmdlb2dyYXBoeS5lYXJ0aHNjaWVuY2UuMjAwNC5tb2RlbHM9Q09QWSwke2NoZWNrb3V0RGlyfS9kYXRhL2VhcnRoc2NpZW5jZSxvcmcuZWNsaXBzZS5zdGVtLmludGVybmFsLmRhdGEuZ2VvZ3JhcGh5LmVhcnRoc2NpZW5jZS4yMDA0Lm1vZGVscw0KK3BsdWdpbkBvcmcuZWNsaXBzZS5zdGVtLmludGVybmFsLmRhdGEuZ2VvZ3JhcGh5LmVhcnRoc2NpZW5jZS4yMDA1PUNPUFksJHtjaGVja291dERpcn0vZGF0YS9lYXJ0aHNjaWVuY2Usb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcm5hbC5kYXRhLmdlb2dyYXBoeS5lYXJ0aHNjaWVuY2UuMjAwNQ0KK3BsdWdpbkBvcmcuZWNsaXBzZS5zdGVtLmludGVybmFsLmRhdGEuZ2VvZ3JhcGh5LmVhcnRoc2NpZW5jZS4yMDA1Lm1vZGVscz1DT1BZLCR7Y2hlY2tvdXREaXJ9L2RhdGEvZWFydGhzY2llbmNlLG9yZy5lY2xpcHNlLnN0ZW0uaW50ZXJuYWwuZGF0YS5nZW9ncmFwaHkuZWFydGhzY2llbmNlLjIwMDUubW9kZWxzDQorcGx1Z2luQG9yZy5lY2xpcHNlLnN0ZW0uaW50ZXJuYWwuZGF0YS5nZW9ncmFwaHkuZWFydGhzY2llbmNlLjIwMDY9Q09QWSwke2NoZWNrb3V0RGlyfS9kYXRhL2VhcnRoc2NpZW5jZSxvcmcuZWNsaXBzZS5zdGVtLmludGVybmFsLmRhdGEuZ2VvZ3JhcGh5LmVhcnRoc2NpZW5jZS4yMDA2DQorcGx1Z2luQG9yZy5lY2xpcHNlLnN0ZW0uaW50ZXJuYWwuZGF0YS5nZW9ncmFwaHkuZWFydGhzY2llbmNlLjIwMDYubW9kZWxzPUNPUFksJHtjaGVja291dERpcn0vZGF0YS9lYXJ0aHNjaWVuY2Usb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcm5hbC5kYXRhLmdlb2dyYXBoeS5lYXJ0aHNjaWVuY2UuMjAwNi5tb2RlbHMNCitwbHVnaW5Ab3JnLmVjbGlwc2Uuc3RlbS5pbnRlcm5hbC5kYXRhLmdlb2dyYXBoeS5lYXJ0aHNjaWVuY2UuMjAwNz1DT1BZLCR7Y2hlY2tvdXREaXJ9L2RhdGEvZWFydGhzY2llbmNlLG9yZy5lY2xpcHNlLnN0ZW0uaW50ZXJuYWwuZGF0YS5nZW9ncmFwaHkuZWFydGhzY2llbmNlLjIwMDcNCitwbHVnaW5Ab3JnLmVjbGlwc2Uuc3RlbS5pbnRlcm5hbC5kYXRhLmdlb2dyYXBoeS5lYXJ0aHNjaWVuY2UuMjAwNy5tb2RlbHM9Q09QWSwke2NoZWNrb3V0RGlyfS9kYXRhL2VhcnRoc2NpZW5jZSxvcmcuZWNsaXBzZS5zdGVtLmludGVybmFsLmRhdGEuZ2VvZ3JhcGh5LmVhcnRoc2NpZW5jZS4yMDA3Lm1vZGVscw0KK3BsdWdpbkBvcmcuZWNsaXBzZS5zdGVtLmludGVybmFsLmRhdGEuZ2VvZ3JhcGh5LmVhcnRoc2NpZW5jZS4yMDA4PUNPUFksJHtjaGVja291dERpcn0vZGF0YS9lYXJ0aHNjaWVuY2Usb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcm5hbC5kYXRhLmdlb2dyYXBoeS5lYXJ0aHNjaWVuY2UuMjAwOA0KK3BsdWdpbkBvcmcuZWNsaXBzZS5zdGVtLmludGVybmFsLmRhdGEuZ2VvZ3JhcGh5LmVhcnRoc2NpZW5jZS4yMDA4Lm1vZGVscz1DT1BZLCR7Y2hlY2tvdXREaXJ9L2RhdGEvZWFydGhzY2llbmNlLG9yZy5lY2xpcHNlLnN0ZW0uaW50ZXJuYWwuZGF0YS5nZW9ncmFwaHkuZWFydGhzY2llbmNlLjIwMDgubW9kZWxzDQorcGx1Z2luQG9yZy5lY2xpcHNlLnN0ZW0uaW50ZXJuYWwuZGF0YS5nZW9ncmFwaHkuZWFydGhzY2llbmNlLjIwMDk9Q09QWSwke2NoZWNrb3V0RGlyfS9kYXRhL2VhcnRoc2NpZW5jZSxvcmcuZWNsaXBzZS5zdGVtLmludGVybmFsLmRhdGEuZ2VvZ3JhcGh5LmVhcnRoc2NpZW5jZS4yMDA5DQorcGx1Z2luQG9yZy5lY2xpcHNlLnN0ZW0uaW50ZXJuYWwuZGF0YS5nZW9ncmFwaHkuZWFydGhzY2llbmNlLjIwMDkubW9kZWxzPUNPUFksJHtjaGVja291dERpcn0vZGF0YS9lYXJ0aHNjaWVuY2Usb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcm5hbC5kYXRhLmdlb2dyYXBoeS5lYXJ0aHNjaWVuY2UuMjAwOS5tb2RlbHMNCitwbHVnaW5Ab3JnLmVjbGlwc2Uuc3RlbS5pbnRlcm5hbC5kYXRhLmdlb2dyYXBoeS5lYXJ0aHNjaWVuY2UuMjAxMD1DT1BZLCR7Y2hlY2tvdXREaXJ9L2RhdGEvZWFydGhzY2llbmNlLG9yZy5lY2xpcHNlLnN0ZW0uaW50ZXJuYWwuZGF0YS5nZW9ncmFwaHkuZWFydGhzY2llbmNlLjIwMTANCitwbHVnaW5Ab3JnLmVjbGlwc2Uuc3RlbS5pbnRlcm5hbC5kYXRhLmdlb2dyYXBoeS5lYXJ0aHNjaWVuY2UuMjAxMC5tb2RlbHM9Q09QWSwke2NoZWNrb3V0RGlyfS9kYXRhL2VhcnRoc2NpZW5jZSxvcmcuZWNsaXBzZS5zdGVtLmludGVybmFsLmRhdGEuZ2VvZ3JhcGh5LmVhcnRoc2NpZW5jZS4yMDEwLm1vZGVscw0KK3BsdWdpbkBvcmcuZWNsaXBzZS5zdGVtLmludGVybmFsLmRhdGEuZ2VvZ3JhcGh5LmVhcnRoc2NpZW5jZS5jb21iaW5lZD1DT1BZLCR7Y2hlY2tvdXREaXJ9L2RhdGEvZWFydGhzY2llbmNlLG9yZy5lY2xpcHNlLnN0ZW0uaW50ZXJuYWwuZGF0YS5nZW9ncmFwaHkuZWFydGhzY2llbmNlLmNvbWJpbmVkDQorcGx1Z2luQG9yZy5lY2xpcHNlLnN0ZW0uaW50ZXJuYWwuZGF0YS5nZW9ncmFwaHkuZWFydGhzY2llbmNlLmNvbWJpbmVkLm1vZGVscz1DT1BZLCR7Y2hlY2tvdXREaXJ9L2RhdGEvZWFydGhzY2llbmNlLG9yZy5lY2xpcHNlLnN0ZW0uaW50ZXJuYWwuZGF0YS5nZW9ncmFwaHkuZWFydGhzY2llbmNlLmNvbWJpbmVkLm1vZGVscw0KK3BsdWdpbkBvcmcuZWNsaXBzZS5zdGVtLmludGVybmFsLmRhdGEuZ2VvZ3JhcGh5LmVhcnRoc2NpZW5jZS5lbGV2YXRpb249Q09QWSwke2NoZWNrb3V0RGlyfS9kYXRhL2VhcnRoc2NpZW5jZSxvcmcuZWNsaXBzZS5zdGVtLmludGVybmFsLmRhdGEuZ2VvZ3JhcGh5LmVhcnRoc2NpZW5jZS5lbGV2YXRpb24NCmRpZmYgLS1naXQgYS9yZWxlbmcvb3JnLmVjbGlwc2Uuc3RlbS5yZWxlbmcvbWFwcy9zdGVtLnN2bi5tYXAgYi9yZWxlbmcvb3JnLmVjbGlwc2Uuc3RlbS5yZWxlbmcvbWFwcy9zdGVtLnN2bi5tYXAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODc1MTBjMwotLS0gL2Rldi9udWxsCisrKyBiL3JlbGVuZy9vcmcuZWNsaXBzZS5zdGVtLnJlbGVuZy9tYXBzL3N0ZW0uc3ZuLm1hcApAQCAtMCwwICsxLDE4MCBAQAorISoqKiBPcmJpdCBEZXBlbmRlbmNpZXMgKioqCishV1M6RVhDTFVERQorcGx1Z2luQG9yZy5hcGFjaGUuY29tbW9ucy5tYXRoPXYyXzEsOnBzZXJ2ZXI6YW5vbnltb3VzQGRldi5lY2xpcHNlLm9yZzovY3Zzcm9vdC90b29scyxudWxsLG9yZy5lY2xpcHNlLm9yYml0L29yZy5hcGFjaGUuY29tbW9ucy5tYXRoCisKKyEqKiogU1RFTSBGZWF0dXJlcyAqKioKKyFXUzpTVEVNLUZlYXR1cmVzCitmZWF0dXJlQG9yZy5lY2xpcHNlLnN0ZW0uZmVhdHVyZT1TVk4sdXJsPWh0dHA6Ly9kZXYuZWNsaXBzZS5vcmcvc3Zucm9vdC90ZWNobm9sb2d5L29yZy5lY2xpcHNlLnN0ZW0sdGFnPXRydW5rLHBhdGg9ZmVhdHVyZXMvb3JnLmVjbGlwc2Uuc3RlbS5mZWF0dXJlCitmZWF0dXJlQG9yZy5lY2xpcHNlLnN0ZW0ucHJvZHVjdC5mZWF0dXJlPVNWTix1cmw9aHR0cDovL2Rldi5lY2xpcHNlLm9yZy9zdm5yb290L3RlY2hub2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbSx0YWc9dHJ1bmsscGF0aD1mZWF0dXJlcy9vcmcuZWNsaXBzZS5zdGVtLnByb2R1Y3QuZmVhdHVyZQorZmVhdHVyZUBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZmVhdHVyZT1TVk4sdXJsPWh0dHA6Ly9kZXYuZWNsaXBzZS5vcmcvc3Zucm9vdC90ZWNobm9sb2d5L29yZy5lY2xpcHNlLnN0ZW0sdGFnPXRydW5rLHBhdGg9ZmVhdHVyZXMvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmZlYXR1cmUKK2ZlYXR1cmVAb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcm5hbC5kYXRhLmZlYXR1cmU9U1ZOLHVybD1odHRwOi8vZGV2LmVjbGlwc2Uub3JnL3N2bnJvb3QvdGVjaG5vbG9neS9vcmcuZWNsaXBzZS5zdGVtLHRhZz10cnVuayxwYXRoPWZlYXR1cmVzL29yZy5lY2xpcHNlLnN0ZW0uaW50ZXJuYWwuZGF0YS5mZWF0dXJlCitmZWF0dXJlQG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuZmVhdHVyZT1TVk4sdXJsPWh0dHA6Ly9kZXYuZWNsaXBzZS5vcmcvc3Zucm9vdC90ZWNobm9sb2d5L29yZy5lY2xpcHNlLnN0ZW0sdGFnPXRydW5rLHBhdGg9ZmVhdHVyZXMvb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5mZWF0dXJlCitmZWF0dXJlQG9yZy5lY2xpcHNlLnN0ZW0uZGlzdHJpYnV0ZWQuZmVhdHVyZT1TVk4sdXJsPWh0dHA6Ly9kZXYuZWNsaXBzZS5vcmcvc3Zucm9vdC90ZWNobm9sb2d5L29yZy5lY2xpcHNlLnN0ZW0sdGFnPXRydW5rLHBhdGg9ZmVhdHVyZXMvb3JnLmVjbGlwc2Uuc3RlbS5kaXN0cmlidXRlZC5mZWF0dXJlCitmZWF0dXJlQG9yZy5lY2xpcHNlLnN0ZW0ubW9kZWxzLmVwaWRlbWlvbG9neS5mZWF0dXJlPVNWTix1cmw9aHR0cDovL2Rldi5lY2xpcHNlLm9yZy9zdm5yb290L3RlY2hub2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbSx0YWc9dHJ1bmsscGF0aD1mZWF0dXJlcy9vcmcuZWNsaXBzZS5zdGVtLm1vZGVscy5lcGlkZW1pb2xvZ3kuZmVhdHVyZQorZmVhdHVyZUBvcmcuZWNsaXBzZS5zdGVtLm1vZGVscy5wb3B1bGF0aW9uLmZlYXR1cmU9U1ZOLHVybD1odHRwOi8vZGV2LmVjbGlwc2Uub3JnL3N2bnJvb3QvdGVjaG5vbG9neS9vcmcuZWNsaXBzZS5zdGVtLHRhZz10cnVuayxwYXRoPWZlYXR1cmVzL29yZy5lY2xpcHNlLnN0ZW0ubW9kZWxzLnBvcHVsYXRpb24uZmVhdHVyZQorZmVhdHVyZUBvcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5LmZlYXR1cmU9U1ZOLHVybD1odHRwOi8vZGV2LmVjbGlwc2Uub3JnL3N2bnJvb3QvdGVjaG5vbG9neS9vcmcuZWNsaXBzZS5zdGVtLHRhZz10cnVuayxwYXRoPWZlYXR1cmVzL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkuZmVhdHVyZQorZmVhdHVyZUBvcmcuZWNsaXBzZS5zdGVtLmRhdGEucG9wdWxhdGlvbi5odW1hbi5mZWF0dXJlPVNWTix1cmw9aHR0cDovL2Rldi5lY2xpcHNlLm9yZy9zdm5yb290L3RlY2hub2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbSx0YWc9dHJ1bmsscGF0aD1mZWF0dXJlcy9vcmcuZWNsaXBzZS5zdGVtLmRhdGEucG9wdWxhdGlvbi5odW1hbi5mZWF0dXJlCitmZWF0dXJlQG9yZy5lY2xpcHNlLnN0ZW0uZGF0YS50cmFuc3BvcnRhdGlvbi5mZWF0dXJlPVNWTix1cmw9aHR0cDovL2Rldi5lY2xpcHNlLm9yZy9zdm5yb290L3RlY2hub2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbSx0YWc9dHJ1bmsscGF0aD1mZWF0dXJlcy9vcmcuZWNsaXBzZS5zdGVtLmRhdGEudHJhbnNwb3J0YXRpb24uZmVhdHVyZQorZmVhdHVyZUBvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmZlYXR1cmU9U1ZOLHVybD1odHRwOi8vZGV2LmVjbGlwc2Uub3JnL3N2bnJvb3QvdGVjaG5vbG9neS9vcmcuZWNsaXBzZS5zdGVtLHRhZz10cnVuayxwYXRoPWZlYXR1cmVzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZmVhdHVyZQorCishKioqIFNURU0gQ29yZSAqKioKKyFXUzpTVEVNLUNvcmUKK3BsdWdpbkBvcmcuZWNsaXBzZS5zdGVtLmNvcmU9U1ZOLHVybD1odHRwOi8vZGV2LmVjbGlwc2Uub3JnL3N2bnJvb3QvdGVjaG5vbG9neS9vcmcuZWNsaXBzZS5zdGVtLHRhZz10cnVuayxwYXRoPWNvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlCitwbHVnaW5Ab3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucz1TVk4sdXJsPWh0dHA6Ly9kZXYuZWNsaXBzZS5vcmcvc3Zucm9vdC90ZWNobm9sb2d5L29yZy5lY2xpcHNlLnN0ZW0sdGFnPXRydW5rLHBhdGg9Y29yZS9vcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zCitwbHVnaW5Ab3JnLmVjbGlwc2Uuc3RlbS5ncmFwaGdlbmVyYXRvcnM9U1ZOLHVybD1odHRwOi8vZGV2LmVjbGlwc2Uub3JnL3N2bnJvb3QvdGVjaG5vbG9neS9vcmcuZWNsaXBzZS5zdGVtLHRhZz10cnVuayxwYXRoPWNvcmUvb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaGdlbmVyYXRvcnMKK3BsdWdpbkBvcmcuZWNsaXBzZS5zdGVtLmpvYnM9U1ZOLHVybD1odHRwOi8vZGV2LmVjbGlwc2Uub3JnL3N2bnJvb3QvdGVjaG5vbG9neS9vcmcuZWNsaXBzZS5zdGVtLHRhZz10cnVuayxwYXRoPWNvcmUvb3JnLmVjbGlwc2Uuc3RlbS5qb2JzCishZnJhZ21lbnRAb3JnLmVjbGlwc2Uuc3RlbS5qb2JzLm5sMT1TVk4sdXJsPWh0dHA6Ly9kZXYuZWNsaXBzZS5vcmcvc3Zucm9vdC90ZWNobm9sb2d5L29yZy5lY2xpcHNlLnN0ZW0sdGFnPXRydW5rLHBhdGg9Y29yZS9vcmcuZWNsaXBzZS5zdGVtLmpvYnMubmwxCitwbHVnaW5Ab3JnLmVjbGlwc2Uuc3RlbS5zZXF1ZW5jZXJzPVNWTix1cmw9aHR0cDovL2Rldi5lY2xpcHNlLm9yZy9zdm5yb290L3RlY2hub2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbSx0YWc9dHJ1bmsscGF0aD1jb3JlL29yZy5lY2xpcHNlLnN0ZW0uc2VxdWVuY2VycworcGx1Z2luQG9yZy5lY2xpcHNlLnN0ZW0uc29sdmVycy5mZD1TVk4sdXJsPWh0dHA6Ly9kZXYuZWNsaXBzZS5vcmcvc3Zucm9vdC90ZWNobm9sb2d5L29yZy5lY2xpcHNlLnN0ZW0sdGFnPXRydW5rLHBhdGg9Y29yZS9vcmcuZWNsaXBzZS5zdGVtLnNvbHZlcnMuZmQKK3BsdWdpbkBvcmcuZWNsaXBzZS5zdGVtLnNvbHZlcnMucms9U1ZOLHVybD1odHRwOi8vZGV2LmVjbGlwc2Uub3JnL3N2bnJvb3QvdGVjaG5vbG9neS9vcmcuZWNsaXBzZS5zdGVtLHRhZz10cnVuayxwYXRoPWNvcmUvb3JnLmVjbGlwc2Uuc3RlbS5zb2x2ZXJzLnJrCitwbHVnaW5Ab3JnLmVjbGlwc2Uuc3RlbS50cmFuc3BvcnQ9U1ZOLHVybD1odHRwOi8vZGV2LmVjbGlwc2Uub3JnL3N2bnJvb3QvdGVjaG5vbG9neS9vcmcuZWNsaXBzZS5zdGVtLHRhZz10cnVuayxwYXRoPWNvcmUvb3JnLmVjbGlwc2Uuc3RlbS50cmFuc3BvcnQKK3BsdWdpbkBvcmcuZWNsaXBzZS5zdGVtLnVpPVNWTix1cmw9aHR0cDovL2Rldi5lY2xpcHNlLm9yZy9zdm5yb290L3RlY2hub2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbSx0YWc9dHJ1bmsscGF0aD1jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkKK3BsdWdpbkBvcmcuZWNsaXBzZS5zdGVtLnVpLmdlPVNWTix1cmw9aHR0cDovL2Rldi5lY2xpcHNlLm9yZy9zdm5yb290L3RlY2hub2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbSx0YWc9dHJ1bmsscGF0aD1jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkuZ2UKK3BsdWdpbkBvcmcuZWNsaXBzZS5zdGVtLnVpLmdyYXBoZWRpdG9yPVNWTix1cmw9aHR0cDovL2Rldi5lY2xpcHNlLm9yZy9zdm5yb290L3RlY2hub2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbSx0YWc9dHJ1bmsscGF0aD1jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkuZ3JhcGhlZGl0b3IKK3BsdWdpbkBvcmcuZWNsaXBzZS5zdGVtLnVpLmhlYWRsZXNzPVNWTix1cmw9aHR0cDovL2Rldi5lY2xpcHNlLm9yZy9zdm5yb290L3RlY2hub2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbSx0YWc9dHJ1bmsscGF0aD1jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkuaGVhZGxlc3MKK3BsdWdpbkBvcmcuZWNsaXBzZS5zdGVtLnVpLmdyYXBoZ2VuZXJhdG9ycz1TVk4sdXJsPWh0dHA6Ly9kZXYuZWNsaXBzZS5vcmcvc3Zucm9vdC90ZWNobm9sb2d5L29yZy5lY2xpcHNlLnN0ZW0sdGFnPXRydW5rLHBhdGg9Y29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLmdyYXBoZ2VuZXJhdG9ycworIWZyYWdtZW50QG9yZy5lY2xpcHNlLnN0ZW0udWkubmwxPVNWTix1cmw9aHR0cDovL2Rldi5lY2xpcHNlLm9yZy9zdm5yb290L3RlY2hub2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbSx0YWc9dHJ1bmsscGF0aD1jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkubmwxCitwbHVnaW5Ab3JnLmVjbGlwc2Uuc3RlbS51aS5yZXBvcnRzPVNWTix1cmw9aHR0cDovL2Rldi5lY2xpcHNlLm9yZy9zdm5yb290L3RlY2hub2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbSx0YWc9dHJ1bmsscGF0aD1jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkucmVwb3J0cworcGx1Z2luQG9yZy5lY2xpcHNlLnN0ZW0udWkuc29sdmVycy5mZD1TVk4sdXJsPWh0dHA6Ly9kZXYuZWNsaXBzZS5vcmcvc3Zucm9vdC90ZWNobm9sb2d5L29yZy5lY2xpcHNlLnN0ZW0sdGFnPXRydW5rLHBhdGg9Y29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLnNvbHZlcnMuZmQKK3BsdWdpbkBvcmcuZWNsaXBzZS5zdGVtLnVpLnNvbHZlcnMucms9U1ZOLHVybD1odHRwOi8vZGV2LmVjbGlwc2Uub3JnL3N2bnJvb3QvdGVjaG5vbG9neS9vcmcuZWNsaXBzZS5zdGVtLHRhZz10cnVuayxwYXRoPWNvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5zb2x2ZXJzLnJrCitwbHVnaW5Ab3JnLmVjbGlwc2Uuc3RlbS51aS50cmFuc3BvcnQ9U1ZOLHVybD1odHRwOi8vZGV2LmVjbGlwc2Uub3JnL3N2bnJvb3QvdGVjaG5vbG9neS9vcmcuZWNsaXBzZS5zdGVtLHRhZz10cnVuayxwYXRoPWNvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS50cmFuc3BvcnQKK3BsdWdpbkBvcmcuZWNsaXBzZS5zdGVtLnV0aWwubG9nZ2Vycz1TVk4sdXJsPWh0dHA6Ly9kZXYuZWNsaXBzZS5vcmcvc3Zucm9vdC90ZWNobm9sb2d5L29yZy5lY2xpcHNlLnN0ZW0sdGFnPXRydW5rLHBhdGg9Y29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWwubG9nZ2VycworCishKioqIEFuYWx5c2lzICoqKgorIVdTOlNURU0tQW5hbHlzaXMKK3BsdWdpbkBvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzPVNWTix1cmw9aHR0cDovL2Rldi5lY2xpcHNlLm9yZy9zdm5yb290L3RlY2hub2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbSx0YWc9dHJ1bmsscGF0aD1hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzCitwbHVnaW5Ab3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5hdXRvbWF0aWNleHBlcmltZW50PVNWTix1cmw9aHR0cDovL2Rldi5lY2xpcHNlLm9yZy9zdm5yb290L3RlY2hub2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbSx0YWc9dHJ1bmsscGF0aD1hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQKK3BsdWdpbkBvcmcuZWNsaXBzZS5zdGVtLnV0aWwuYW5hbHlzaXM9U1ZOLHVybD1odHRwOi8vZGV2LmVjbGlwc2Uub3JnL3N2bnJvb3QvdGVjaG5vbG9neS9vcmcuZWNsaXBzZS5zdGVtLHRhZz10cnVuayxwYXRoPWFuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0udXRpbC5hbmFseXNpcworCishKioqIERhdGEgKioqCishV1M6U1RFTS1EYXRhCitwbHVnaW5Ab3JnLmVjbGlwc2Uuc3RlbS5pbnRlcm5hbC5kYXRhPVNWTix1cmw9aHR0cDovL2Rldi5lY2xpcHNlLm9yZy9zdm5yb290L3RlY2hub2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbSx0YWc9dHJ1bmsscGF0aD1kYXRhL29yZy5lY2xpcHNlLnN0ZW0uaW50ZXJuYWwuZGF0YQorcGx1Z2luQG9yZy5lY2xpcHNlLnN0ZW0uaW50ZXJuYWwuZGF0YS5nZW9ncmFwaHk9U1ZOLHVybD1odHRwOi8vZGV2LmVjbGlwc2Uub3JnL3N2bnJvb3QvdGVjaG5vbG9neS9vcmcuZWNsaXBzZS5zdGVtLHRhZz10cnVuayxwYXRoPWRhdGEvZ2VvZ3JhcGh5L29yZy5lY2xpcHNlLnN0ZW0uaW50ZXJuYWwuZGF0YS5nZW9ncmFwaHkKK3BsdWdpbkBvcmcuZWNsaXBzZS5zdGVtLmludGVybmFsLmRhdGEuZ2VvZ3JhcGh5LmluZnJhc3RydWN0dXJlLnRyYW5zcG9ydGF0aW9uPVNWTix1cmw9aHR0cDovL2Rldi5lY2xpcHNlLm9yZy9zdm5yb290L3RlY2hub2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbSx0YWc9dHJ1bmsscGF0aD1kYXRhL2dlb2dyYXBoeS9vcmcuZWNsaXBzZS5zdGVtLmludGVybmFsLmRhdGEuZ2VvZ3JhcGh5LmluZnJhc3RydWN0dXJlLnRyYW5zcG9ydGF0aW9uCitwbHVnaW5Ab3JnLmVjbGlwc2Uuc3RlbS5pbnRlcm5hbC5kYXRhLmdlb2dyYXBoeS5tb2RlbHM9U1ZOLHVybD1odHRwOi8vZGV2LmVjbGlwc2Uub3JnL3N2bnJvb3QvdGVjaG5vbG9neS9vcmcuZWNsaXBzZS5zdGVtLHRhZz10cnVuayxwYXRoPWRhdGEvZ2VvZ3JhcGh5L29yZy5lY2xpcHNlLnN0ZW0uaW50ZXJuYWwuZGF0YS5nZW9ncmFwaHkubW9kZWxzCitwbHVnaW5Ab3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeT1TVk4sdXJsPWh0dHA6Ly9kZXYuZWNsaXBzZS5vcmcvc3Zucm9vdC90ZWNobm9sb2d5L29yZy5lY2xpcHNlLnN0ZW0sdGFnPXRydW5rLHBhdGg9ZGF0YS9nZW9ncmFwaHkvb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeQorcGx1Z2luQG9yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkuaW5mcmFzdHJ1Y3R1cmUudHJhbnNwb3J0YXRpb249U1ZOLHVybD1odHRwOi8vZGV2LmVjbGlwc2Uub3JnL3N2bnJvb3QvdGVjaG5vbG9neS9vcmcuZWNsaXBzZS5zdGVtLHRhZz10cnVuayxwYXRoPWRhdGEvZ2VvZ3JhcGh5L29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkuaW5mcmFzdHJ1Y3R1cmUudHJhbnNwb3J0YXRpb24KK3BsdWdpbkBvcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5Lm1vZGVscz1TVk4sdXJsPWh0dHA6Ly9kZXYuZWNsaXBzZS5vcmcvc3Zucm9vdC90ZWNobm9sb2d5L29yZy5lY2xpcHNlLnN0ZW0sdGFnPXRydW5rLHBhdGg9ZGF0YS9nZW9ncmFwaHkvb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS5tb2RlbHMKKworISoqKiBQb3B1bGF0aW9uIERhdGEgKioqCitwbHVnaW5Ab3JnLmVjbGlwc2Uuc3RlbS5pbnRlcm5hbC5kYXRhLmdlb2dyYXBoeS5wb3B1bGF0aW9uPVNWTix1cmw9aHR0cDovL2Rldi5lY2xpcHNlLm9yZy9zdm5yb290L3RlY2hub2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbSx0YWc9dHJ1bmsscGF0aD1kYXRhL3BvcHVsYXRpb24vb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcm5hbC5kYXRhLmdlb2dyYXBoeS5wb3B1bGF0aW9uCitwbHVnaW5Ab3JnLmVjbGlwc2Uuc3RlbS5pbnRlcm5hbC5kYXRhLmdlb2dyYXBoeS5wb3B1bGF0aW9uLmh1bWFuPVNWTix1cmw9aHR0cDovL2Rldi5lY2xpcHNlLm9yZy9zdm5yb290L3RlY2hub2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbSx0YWc9dHJ1bmsscGF0aD1kYXRhL3BvcHVsYXRpb24vb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcm5hbC5kYXRhLmdlb2dyYXBoeS5wb3B1bGF0aW9uLmh1bWFuCitwbHVnaW5Ab3JnLmVjbGlwc2Uuc3RlbS5pbnRlcm5hbC5kYXRhLmdlb2dyYXBoeS5wb3B1bGF0aW9uLmh1bWFuLm1vZGVscz1TVk4sdXJsPWh0dHA6Ly9kZXYuZWNsaXBzZS5vcmcvc3Zucm9vdC90ZWNobm9sb2d5L29yZy5lY2xpcHNlLnN0ZW0sdGFnPXRydW5rLHBhdGg9ZGF0YS9wb3B1bGF0aW9uL29yZy5lY2xpcHNlLnN0ZW0uaW50ZXJuYWwuZGF0YS5nZW9ncmFwaHkucG9wdWxhdGlvbi5odW1hbi5tb2RlbHMKK3BsdWdpbkBvcmcuZWNsaXBzZS5zdGVtLmludGVybmFsLmRhdGEucG9wdWxhdGlvbi5odW1hbj1TVk4sdXJsPWh0dHA6Ly9kZXYuZWNsaXBzZS5vcmcvc3Zucm9vdC90ZWNobm9sb2d5L29yZy5lY2xpcHNlLnN0ZW0sdGFnPXRydW5rLHBhdGg9ZGF0YS9wb3B1bGF0aW9uL29yZy5lY2xpcHNlLnN0ZW0uaW50ZXJuYWwuZGF0YS5wb3B1bGF0aW9uLmh1bWFuCitwbHVnaW5Ab3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS5wb3B1bGF0aW9uLmh1bWFuPVNWTix1cmw9aHR0cDovL2Rldi5lY2xpcHNlLm9yZy9zdm5yb290L3RlY2hub2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbSx0YWc9dHJ1bmsscGF0aD1kYXRhL3BvcHVsYXRpb24vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS5wb3B1bGF0aW9uLmh1bWFuCitwbHVnaW5Ab3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS5wb3B1bGF0aW9uLmh1bWFuLm1vZGVscz1TVk4sdXJsPWh0dHA6Ly9kZXYuZWNsaXBzZS5vcmcvc3Zucm9vdC90ZWNobm9sb2d5L29yZy5lY2xpcHNlLnN0ZW0sdGFnPXRydW5rLHBhdGg9ZGF0YS9wb3B1bGF0aW9uL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkucG9wdWxhdGlvbi5odW1hbi5tb2RlbHMKKworCishKioqIEVwaWRlbWlvbG9neSAvIERpc2Vhc2UgTW9kZWxzICoqKgorIVdTOlNURU0tRGlzZWFzZU1vZGVscworcGx1Z2luQG9yZy5lY2xpcHNlLnN0ZW0uZGF0YS5kaXNlYXNlbW9kZWxzLm1vZGVscz1TVk4sdXJsPWh0dHA6Ly9kZXYuZWNsaXBzZS5vcmcvc3Zucm9vdC90ZWNobm9sb2d5L29yZy5lY2xpcHNlLnN0ZW0sdGFnPXRydW5rLHBhdGg9bW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZGlzZWFzZW1vZGVscy5tb2RlbHMKK3BsdWdpbkBvcmcuZWNsaXBzZS5zdGVtLmRhdGEuZGlzZWFzZW1vZGVscy5zY2VuYXJpb3M9U1ZOLHVybD1odHRwOi8vZGV2LmVjbGlwc2Uub3JnL3N2bnJvb3QvdGVjaG5vbG9neS9vcmcuZWNsaXBzZS5zdGVtLHRhZz10cnVuayxwYXRoPW1vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmRpc2Vhc2Vtb2RlbHMuc2NlbmFyaW9zCitwbHVnaW5Ab3JnLmVjbGlwc2Uuc3RlbS5pbnRlcm5hbC5kaXNlYXNlbW9kZWxzLm1vZGVscz1TVk4sdXJsPWh0dHA6Ly9kZXYuZWNsaXBzZS5vcmcvc3Zucm9vdC90ZWNobm9sb2d5L29yZy5lY2xpcHNlLnN0ZW0sdGFnPXRydW5rLHBhdGg9bW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmludGVybmFsLmRpc2Vhc2Vtb2RlbHMubW9kZWxzCitwbHVnaW5Ab3JnLmVjbGlwc2Uuc3RlbS5pbnRlcm5hbC5kaXNlYXNlbW9kZWxzLnNjZW5hcmlvcz1TVk4sdXJsPWh0dHA6Ly9kZXYuZWNsaXBzZS5vcmcvc3Zucm9vdC90ZWNobm9sb2d5L29yZy5lY2xpcHNlLnN0ZW0sdGFnPXRydW5rLHBhdGg9bW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmludGVybmFsLmRpc2Vhc2Vtb2RlbHMuc2NlbmFyaW9zCitwbHVnaW5Ab3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzPVNWTix1cmw9aHR0cDovL2Rldi5lY2xpcHNlLm9yZy9zdm5yb290L3RlY2hub2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbSx0YWc9dHJ1bmsscGF0aD1tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscworcGx1Z2luQG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leGFtcGxlPVNWTix1cmw9aHR0cDovL2Rldi5lY2xpcHNlLm9yZy9zdm5yb290L3RlY2hub2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbSx0YWc9dHJ1bmsscGF0aD1tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leGFtcGxlCitwbHVnaW5Ab3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4cGVyaW1lbnRhbD1TVk4sdXJsPWh0dHA6Ly9kZXYuZWNsaXBzZS5vcmcvc3Zucm9vdC90ZWNobm9sb2d5L29yZy5lY2xpcHNlLnN0ZW0sdGFnPXRydW5rLHBhdGg9bW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXhwZXJpbWVudGFsCitwbHVnaW5Ab3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4dGVybmFsZGF0YXNvdXJjZT1TVk4sdXJsPWh0dHA6Ly9kZXYuZWNsaXBzZS5vcmcvc3Zucm9vdC90ZWNobm9sb2d5L29yZy5lY2xpcHNlLnN0ZW0sdGFnPXRydW5rLHBhdGg9bW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXh0ZXJuYWxkYXRhc291cmNlCitwbHVnaW5Ab3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmZvcmNpbmc9U1ZOLHVybD1odHRwOi8vZGV2LmVjbGlwc2Uub3JnL3N2bnJvb3QvdGVjaG5vbG9neS9vcmcuZWNsaXBzZS5zdGVtLHRhZz10cnVuayxwYXRoPW1vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmZvcmNpbmcKK3BsdWdpbkBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZ2xvYmFsaW5mbHVlbnphbW9kZWw9U1ZOLHVybD1odHRwOi8vZGV2LmVjbGlwc2Uub3JnL3N2bnJvb3QvdGVjaG5vbG9neS9vcmcuZWNsaXBzZS5zdGVtLHRhZz10cnVuayxwYXRoPW1vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmdsb2JhbGluZmx1ZW56YW1vZGVsCitwbHVnaW5Ab3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLm11bHRpcG9wdWxhdGlvbj1TVk4sdXJsPWh0dHA6Ly9kZXYuZWNsaXBzZS5vcmcvc3Zucm9vdC90ZWNobm9sb2d5L29yZy5lY2xpcHNlLnN0ZW0sdGFnPXRydW5rLHBhdGg9bW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMubXVsdGlwb3B1bGF0aW9uCitwbHVnaW5Ab3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvcj1TVk4sdXJsPWh0dHA6Ly9kZXYuZWNsaXBzZS5vcmcvc3Zucm9vdC90ZWNobm9sb2d5L29yZy5lY2xpcHNlLnN0ZW0sdGFnPXRydW5rLHBhdGg9bW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yCitwbHVnaW5Ab3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlcz1TVk4sdXJsPWh0dHA6Ly9kZXYuZWNsaXBzZS5vcmcvc3Zucm9vdC90ZWNobm9sb2d5L29yZy5lY2xpcHNlLnN0ZW0sdGFnPXRydW5rLHBhdGg9bW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2VzCitwbHVnaW5Ab3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzPVNWTix1cmw9aHR0cDovL2Rldi5lY2xpcHNlLm9yZy9zdm5yb290L3RlY2hub2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbSx0YWc9dHJ1bmsscGF0aD1tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscworcGx1Z2luQG9yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy5leGFtcGxlPVNWTix1cmw9aHR0cDovL2Rldi5lY2xpcHNlLm9yZy9zdm5yb290L3RlY2hub2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbSx0YWc9dHJ1bmsscGF0aD1tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy5leGFtcGxlCitwbHVnaW5Ab3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzLmV4cGVyaW1lbnRhbD1TVk4sdXJsPWh0dHA6Ly9kZXYuZWNsaXBzZS5vcmcvc3Zucm9vdC90ZWNobm9sb2d5L29yZy5lY2xpcHNlLnN0ZW0sdGFnPXRydW5rLHBhdGg9bW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMuZXhwZXJpbWVudGFsCitwbHVnaW5Ab3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzLmV4dGVybmFsZGF0YXNvdXJjZT1TVk4sdXJsPWh0dHA6Ly9kZXYuZWNsaXBzZS5vcmcvc3Zucm9vdC90ZWNobm9sb2d5L29yZy5lY2xpcHNlLnN0ZW0sdGFnPXRydW5rLHBhdGg9bW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMuZXh0ZXJuYWxkYXRhc291cmNlCitwbHVnaW5Ab3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzLmZvcmNpbmc9U1ZOLHVybD1odHRwOi8vZGV2LmVjbGlwc2Uub3JnL3N2bnJvb3QvdGVjaG5vbG9neS9vcmcuZWNsaXBzZS5zdGVtLHRhZz10cnVuayxwYXRoPW1vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzLmZvcmNpbmcKK3BsdWdpbkBvcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMuZ2xvYmFsaW5mbHVlbnphbW9kZWw9U1ZOLHVybD1odHRwOi8vZGV2LmVjbGlwc2Uub3JnL3N2bnJvb3QvdGVjaG5vbG9neS9vcmcuZWNsaXBzZS5zdGVtLHRhZz10cnVuayxwYXRoPW1vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzLmdsb2JhbGluZmx1ZW56YW1vZGVsCitwbHVnaW5Ab3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzLm11bHRpcG9wdWxhdGlvbj1TVk4sdXJsPWh0dHA6Ly9kZXYuZWNsaXBzZS5vcmcvc3Zucm9vdC90ZWNobm9sb2d5L29yZy5lY2xpcHNlLnN0ZW0sdGFnPXRydW5rLHBhdGg9bW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMubXVsdGlwb3B1bGF0aW9uCitwbHVnaW5Ab3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzLnZlY3Rvcj1TVk4sdXJsPWh0dHA6Ly9kZXYuZWNsaXBzZS5vcmcvc3Zucm9vdC90ZWNobm9sb2d5L29yZy5lY2xpcHNlLnN0ZW0sdGFnPXRydW5rLHBhdGg9bW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMudmVjdG9yCitwbHVnaW5Ab3JnLmVjbGlwc2Uuc3RlbS5pbnRlcnZlbnRpb25zPVNWTix1cmw9aHR0cDovL2Rldi5lY2xpcHNlLm9yZy9zdm5yb290L3RlY2hub2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbSx0YWc9dHJ1bmsscGF0aD1tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uaW50ZXJ2ZW50aW9ucworcGx1Z2luQG9yZy5lY2xpcHNlLnN0ZW0udWkuaW50ZXJ2ZW50aW9ucz1TVk4sdXJsPWh0dHA6Ly9kZXYuZWNsaXBzZS5vcmcvc3Zucm9vdC90ZWNobm9sb2d5L29yZy5lY2xpcHNlLnN0ZW0sdGFnPXRydW5rLHBhdGg9bW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmludGVydmVudGlvbnMKKworCishKioqIFBvcHVsYXRpb24gTW9kZWxzICoqKgorIVdTOlNURU0tUG9wdWxhdGlvbk1vZGVscworcGx1Z2luQG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscz1TVk4sdXJsPWh0dHA6Ly9kZXYuZWNsaXBzZS5vcmcvc3Zucm9vdC90ZWNobm9sb2d5L29yZy5lY2xpcHNlLnN0ZW0sdGFnPXRydW5rLHBhdGg9bW9kZWxzL3BvcHVsYXRpb25zL29yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscworcGx1Z2luQG9yZy5lY2xpcHNlLnN0ZW0udWkucG9wdWxhdGlvbm1vZGVscz1TVk4sdXJsPWh0dHA6Ly9kZXYuZWNsaXBzZS5vcmcvc3Zucm9vdC90ZWNobm9sb2d5L29yZy5lY2xpcHNlLnN0ZW0sdGFnPXRydW5rLHBhdGg9bW9kZWxzL3BvcHVsYXRpb25zL29yZy5lY2xpcHNlLnN0ZW0udWkucG9wdWxhdGlvbm1vZGVscworCishKioqIERpc3RyaWJ1dGVkIFNURU0gKioqCishV1M6U1RFTS1EaXN0cmlidXRlZAorcGx1Z2luQG9yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhzeW5jaHJvbml6ZXI9U1ZOLHVybD1odHRwOi8vZGV2LmVjbGlwc2Uub3JnL3N2bnJvb3QvdGVjaG5vbG9neS9vcmcuZWNsaXBzZS5zdGVtLHRhZz10cnVuayxwYXRoPWRpc3RyaWJ1dGVkL29yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhzeW5jaHJvbml6ZXIKKworISoqKiBUZXN0cyAqKioKKyFXUzpTVEVNLVRlc3RzCitwbHVnaW5Ab3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5hdXRvbWF0aWNleHBlcmltZW50PVNWTix1cmw9aHR0cDovL2Rldi5lY2xpcHNlLm9yZy9zdm5yb290L3RlY2hub2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbSx0YWc9dHJ1bmsscGF0aD10ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmF1dG9tYXRpY2V4cGVyaW1lbnQKK3BsdWdpbkBvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmU9U1ZOLHVybD1odHRwOi8vZGV2LmVjbGlwc2Uub3JnL3N2bnJvb3QvdGVjaG5vbG9neS9vcmcuZWNsaXBzZS5zdGVtLHRhZz10cnVuayxwYXRoPXRlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZQorcGx1Z2luQG9yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGVmaW5pdGlvbnM9U1ZOLHVybD1odHRwOi8vZGV2LmVjbGlwc2Uub3JnL3N2bnJvb3QvdGVjaG5vbG9neS9vcmcuZWNsaXBzZS5zdGVtLHRhZz10cnVuayxwYXRoPXRlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGVmaW5pdGlvbnMKK3BsdWdpbkBvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRpc2Vhc2Vtb2RlbHM9U1ZOLHVybD1odHRwOi8vZGV2LmVjbGlwc2Uub3JnL3N2bnJvb3QvdGVjaG5vbG9neS9vcmcuZWNsaXBzZS5zdGVtLHRhZz10cnVuayxwYXRoPXRlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGlzZWFzZW1vZGVscworcGx1Z2luQG9yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGlzZWFzZW1vZGVscy5leGFtcGxlPVNWTix1cmw9aHR0cDovL2Rldi5lY2xpcHNlLm9yZy9zdm5yb290L3RlY2hub2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbSx0YWc9dHJ1bmsscGF0aD10ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRpc2Vhc2Vtb2RlbHMuZXhhbXBsZQorcGx1Z2luQG9yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGlzZWFzZW1vZGVscy5leHBlcmltZW50YWw9U1ZOLHVybD1odHRwOi8vZGV2LmVjbGlwc2Uub3JnL3N2bnJvb3QvdGVjaG5vbG9neS9vcmcuZWNsaXBzZS5zdGVtLHRhZz10cnVuayxwYXRoPXRlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGlzZWFzZW1vZGVscy5leHBlcmltZW50YWwKK3BsdWdpbkBvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRpc2Vhc2Vtb2RlbHMuZXh0ZXJuYWxkYXRhc291cmNlPVNWTix1cmw9aHR0cDovL2Rldi5lY2xpcHNlLm9yZy9zdm5yb290L3RlY2hub2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbSx0YWc9dHJ1bmsscGF0aD10ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRpc2Vhc2Vtb2RlbHMuZXh0ZXJuYWxkYXRhc291cmNlCitwbHVnaW5Ab3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kaXNlYXNlbW9kZWxzLmZvcmNpbmc9U1ZOLHVybD1odHRwOi8vZGV2LmVjbGlwc2Uub3JnL3N2bnJvb3QvdGVjaG5vbG9neS9vcmcuZWNsaXBzZS5zdGVtLHRhZz10cnVuayxwYXRoPXRlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGlzZWFzZW1vZGVscy5mb3JjaW5nCitwbHVnaW5Ab3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kaXNlYXNlbW9kZWxzLm11bHRpcG9wdWxhdGlvbj1TVk4sdXJsPWh0dHA6Ly9kZXYuZWNsaXBzZS5vcmcvc3Zucm9vdC90ZWNobm9sb2d5L29yZy5lY2xpcHNlLnN0ZW0sdGFnPXRydW5rLHBhdGg9dGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kaXNlYXNlbW9kZWxzLm11bHRpcG9wdWxhdGlvbgorcGx1Z2luQG9yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZ3JhcGhlZGl0b3I9U1ZOLHVybD1odHRwOi8vZGV2LmVjbGlwc2Uub3JnL3N2bnJvb3QvdGVjaG5vbG9neS9vcmcuZWNsaXBzZS5zdGVtLHRhZz10cnVuayxwYXRoPXRlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZ3JhcGhlZGl0b3IKK3BsdWdpbkBvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmdyYXBoZ2VuZXJhdG9ycz1TVk4sdXJsPWh0dHA6Ly9kZXYuZWNsaXBzZS5vcmcvc3Zucm9vdC90ZWNobm9sb2d5L29yZy5lY2xpcHNlLnN0ZW0sdGFnPXRydW5rLHBhdGg9dGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5ncmFwaGdlbmVyYXRvcnMKK3BsdWdpbkBvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmludGVybmFsLmRhdGE9U1ZOLHVybD1odHRwOi8vZGV2LmVjbGlwc2Uub3JnL3N2bnJvb3QvdGVjaG5vbG9neS9vcmcuZWNsaXBzZS5zdGVtLHRhZz10cnVuayxwYXRoPXRlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuaW50ZXJuYWwuZGF0YQorcGx1Z2luQG9yZy5lY2xpcHNlLnN0ZW0udGVzdHMuam9icz1TVk4sdXJsPWh0dHA6Ly9kZXYuZWNsaXBzZS5vcmcvc3Zucm9vdC90ZWNobm9sb2d5L29yZy5lY2xpcHNlLnN0ZW0sdGFnPXRydW5rLHBhdGg9dGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5qb2JzCitwbHVnaW5Ab3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5wb3B1bGF0aW9ubW9kZWxzPVNWTix1cmw9aHR0cDovL2Rldi5lY2xpcHNlLm9yZy9zdm5yb290L3RlY2hub2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbSx0YWc9dHJ1bmsscGF0aD10ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnBvcHVsYXRpb25tb2RlbHMKK3BsdWdpbkBvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnRyYW5zcG9ydD1TVk4sdXJsPWh0dHA6Ly9kZXYuZWNsaXBzZS5vcmcvc3Zucm9vdC90ZWNobm9sb2d5L29yZy5lY2xpcHNlLnN0ZW0sdGFnPXRydW5rLHBhdGg9dGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy50cmFuc3BvcnQKK3BsdWdpbkBvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnVpPVNWTix1cmw9aHR0cDovL2Rldi5lY2xpcHNlLm9yZy9zdm5yb290L3RlY2hub2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbSx0YWc9dHJ1bmsscGF0aD10ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnVpCitwbHVnaW5Ab3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51aS5nZT1TVk4sdXJsPWh0dHA6Ly9kZXYuZWNsaXBzZS5vcmcvc3Zucm9vdC90ZWNobm9sb2d5L29yZy5lY2xpcHNlLnN0ZW0sdGFnPXRydW5rLHBhdGg9dGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51aS5nZQorcGx1Z2luQG9yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbD1TVk4sdXJsPWh0dHA6Ly9kZXYuZWNsaXBzZS5vcmcvc3Zucm9vdC90ZWNobm9sb2d5L29yZy5lY2xpcHNlLnN0ZW0sdGFnPXRydW5rLHBhdGg9dGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsCitwbHVnaW5Ab3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5pbnRlcnZlbnRpb25zPVNWTix1cmw9aHR0cDovL2Rldi5lY2xpcHNlLm9yZy9zdm5yb290L3RlY2hub2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbSx0YWc9dHJ1bmsscGF0aD10ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmludGVydmVudGlvbnMKK3BsdWdpbkBvcmcuZWNsaXBzZS5zdGVtLnNhbXBsZT1TVk4sdXJsPWh0dHA6Ly9kZXYuZWNsaXBzZS5vcmcvc3Zucm9vdC90ZWNobm9sb2d5L29yZy5lY2xpcHNlLnN0ZW0sdGFnPXRydW5rLHBhdGg9dGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS5zYW1wbGUKKworCishKioqIEVhcnRoIFNjaWVuY2UgRGF0YSAqKioKKyFXUzpTVEVNLURhdGEtRWFydGhTY2llbmNlCitwbHVnaW5Ab3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS5lYXJ0aHNjaWVuY2UuMjAwMD1TVk4sdXJsPWh0dHA6Ly9kZXYuZWNsaXBzZS5vcmcvc3Zucm9vdC90ZWNobm9sb2d5L29yZy5lY2xpcHNlLnN0ZW0sdGFnPXRydW5rLHBhdGg9ZGF0YS9lYXJ0aHNjaWVuY2Uvb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS5lYXJ0aHNjaWVuY2UuMjAwMAorcGx1Z2luQG9yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkuZWFydGhzY2llbmNlLjIwMDAubW9kZWxzPVNWTix1cmw9aHR0cDovL2Rldi5lY2xpcHNlLm9yZy9zdm5yb290L3RlY2hub2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbSx0YWc9dHJ1bmsscGF0aD1kYXRhL2VhcnRoc2NpZW5jZS9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5LmVhcnRoc2NpZW5jZS4yMDAwLm1vZGVscworcGx1Z2luQG9yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkuZWFydGhzY2llbmNlLjIwMDE9U1ZOLHVybD1odHRwOi8vZGV2LmVjbGlwc2Uub3JnL3N2bnJvb3QvdGVjaG5vbG9neS9vcmcuZWNsaXBzZS5zdGVtLHRhZz10cnVuayxwYXRoPWRhdGEvZWFydGhzY2llbmNlL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkuZWFydGhzY2llbmNlLjIwMDEKK3BsdWdpbkBvcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5LmVhcnRoc2NpZW5jZS4yMDAxLm1vZGVscz1TVk4sdXJsPWh0dHA6Ly9kZXYuZWNsaXBzZS5vcmcvc3Zucm9vdC90ZWNobm9sb2d5L29yZy5lY2xpcHNlLnN0ZW0sdGFnPXRydW5rLHBhdGg9ZGF0YS9lYXJ0aHNjaWVuY2Uvb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS5lYXJ0aHNjaWVuY2UuMjAwMS5tb2RlbHMKK3BsdWdpbkBvcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5LmVhcnRoc2NpZW5jZS4yMDAyPVNWTix1cmw9aHR0cDovL2Rldi5lY2xpcHNlLm9yZy9zdm5yb290L3RlY2hub2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbSx0YWc9dHJ1bmsscGF0aD1kYXRhL2VhcnRoc2NpZW5jZS9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5LmVhcnRoc2NpZW5jZS4yMDAyCitwbHVnaW5Ab3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS5lYXJ0aHNjaWVuY2UuMjAwMi5tb2RlbHM9U1ZOLHVybD1odHRwOi8vZGV2LmVjbGlwc2Uub3JnL3N2bnJvb3QvdGVjaG5vbG9neS9vcmcuZWNsaXBzZS5zdGVtLHRhZz10cnVuayxwYXRoPWRhdGEvZWFydGhzY2llbmNlL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkuZWFydGhzY2llbmNlLjIwMDIubW9kZWxzCitwbHVnaW5Ab3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS5lYXJ0aHNjaWVuY2UuMjAwMz1TVk4sdXJsPWh0dHA6Ly9kZXYuZWNsaXBzZS5vcmcvc3Zucm9vdC90ZWNobm9sb2d5L29yZy5lY2xpcHNlLnN0ZW0sdGFnPXRydW5rLHBhdGg9ZGF0YS9lYXJ0aHNjaWVuY2Uvb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS5lYXJ0aHNjaWVuY2UuMjAwMworcGx1Z2luQG9yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkuZWFydGhzY2llbmNlLjIwMDMubW9kZWxzPVNWTix1cmw9aHR0cDovL2Rldi5lY2xpcHNlLm9yZy9zdm5yb290L3RlY2hub2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbSx0YWc9dHJ1bmsscGF0aD1kYXRhL2VhcnRoc2NpZW5jZS9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5LmVhcnRoc2NpZW5jZS4yMDAzLm1vZGVscworcGx1Z2luQG9yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkuZWFydGhzY2llbmNlLjIwMDQ9U1ZOLHVybD1odHRwOi8vZGV2LmVjbGlwc2Uub3JnL3N2bnJvb3QvdGVjaG5vbG9neS9vcmcuZWNsaXBzZS5zdGVtLHRhZz10cnVuayxwYXRoPWRhdGEvZWFydGhzY2llbmNlL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkuZWFydGhzY2llbmNlLjIwMDQKK3BsdWdpbkBvcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5LmVhcnRoc2NpZW5jZS4yMDA0Lm1vZGVscz1TVk4sdXJsPWh0dHA6Ly9kZXYuZWNsaXBzZS5vcmcvc3Zucm9vdC90ZWNobm9sb2d5L29yZy5lY2xpcHNlLnN0ZW0sdGFnPXRydW5rLHBhdGg9ZGF0YS9lYXJ0aHNjaWVuY2Uvb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS5lYXJ0aHNjaWVuY2UuMjAwNC5tb2RlbHMKK3BsdWdpbkBvcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5LmVhcnRoc2NpZW5jZS4yMDA1PVNWTix1cmw9aHR0cDovL2Rldi5lY2xpcHNlLm9yZy9zdm5yb290L3RlY2hub2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbSx0YWc9dHJ1bmsscGF0aD1kYXRhL2VhcnRoc2NpZW5jZS9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5LmVhcnRoc2NpZW5jZS4yMDA1CitwbHVnaW5Ab3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS5lYXJ0aHNjaWVuY2UuMjAwNS5tb2RlbHM9U1ZOLHVybD1odHRwOi8vZGV2LmVjbGlwc2Uub3JnL3N2bnJvb3QvdGVjaG5vbG9neS9vcmcuZWNsaXBzZS5zdGVtLHRhZz10cnVuayxwYXRoPWRhdGEvZWFydGhzY2llbmNlL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkuZWFydGhzY2llbmNlLjIwMDUubW9kZWxzCitwbHVnaW5Ab3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS5lYXJ0aHNjaWVuY2UuMjAwNj1TVk4sdXJsPWh0dHA6Ly9kZXYuZWNsaXBzZS5vcmcvc3Zucm9vdC90ZWNobm9sb2d5L29yZy5lY2xpcHNlLnN0ZW0sdGFnPXRydW5rLHBhdGg9ZGF0YS9lYXJ0aHNjaWVuY2Uvb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS5lYXJ0aHNjaWVuY2UuMjAwNgorcGx1Z2luQG9yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkuZWFydGhzY2llbmNlLjIwMDYubW9kZWxzPVNWTix1cmw9aHR0cDovL2Rldi5lY2xpcHNlLm9yZy9zdm5yb290L3RlY2hub2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbSx0YWc9dHJ1bmsscGF0aD1kYXRhL2VhcnRoc2NpZW5jZS9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5LmVhcnRoc2NpZW5jZS4yMDA2Lm1vZGVscworcGx1Z2luQG9yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkuZWFydGhzY2llbmNlLjIwMDc9U1ZOLHVybD1odHRwOi8vZGV2LmVjbGlwc2Uub3JnL3N2bnJvb3QvdGVjaG5vbG9neS9vcmcuZWNsaXBzZS5zdGVtLHRhZz10cnVuayxwYXRoPWRhdGEvZWFydGhzY2llbmNlL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkuZWFydGhzY2llbmNlLjIwMDcKK3BsdWdpbkBvcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5LmVhcnRoc2NpZW5jZS4yMDA3Lm1vZGVscz1TVk4sdXJsPWh0dHA6Ly9kZXYuZWNsaXBzZS5vcmcvc3Zucm9vdC90ZWNobm9sb2d5L29yZy5lY2xpcHNlLnN0ZW0sdGFnPXRydW5rLHBhdGg9ZGF0YS9lYXJ0aHNjaWVuY2Uvb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS5lYXJ0aHNjaWVuY2UuMjAwNy5tb2RlbHMKK3BsdWdpbkBvcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5LmVhcnRoc2NpZW5jZS4yMDA4PVNWTix1cmw9aHR0cDovL2Rldi5lY2xpcHNlLm9yZy9zdm5yb290L3RlY2hub2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbSx0YWc9dHJ1bmsscGF0aD1kYXRhL2VhcnRoc2NpZW5jZS9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5LmVhcnRoc2NpZW5jZS4yMDA4CitwbHVnaW5Ab3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS5lYXJ0aHNjaWVuY2UuMjAwOC5tb2RlbHM9U1ZOLHVybD1odHRwOi8vZGV2LmVjbGlwc2Uub3JnL3N2bnJvb3QvdGVjaG5vbG9neS9vcmcuZWNsaXBzZS5zdGVtLHRhZz10cnVuayxwYXRoPWRhdGEvZWFydGhzY2llbmNlL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkuZWFydGhzY2llbmNlLjIwMDgubW9kZWxzCitwbHVnaW5Ab3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS5lYXJ0aHNjaWVuY2UuMjAwOT1TVk4sdXJsPWh0dHA6Ly9kZXYuZWNsaXBzZS5vcmcvc3Zucm9vdC90ZWNobm9sb2d5L29yZy5lY2xpcHNlLnN0ZW0sdGFnPXRydW5rLHBhdGg9ZGF0YS9lYXJ0aHNjaWVuY2Uvb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS5lYXJ0aHNjaWVuY2UuMjAwOQorcGx1Z2luQG9yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkuZWFydGhzY2llbmNlLjIwMDkubW9kZWxzPVNWTix1cmw9aHR0cDovL2Rldi5lY2xpcHNlLm9yZy9zdm5yb290L3RlY2hub2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbSx0YWc9dHJ1bmsscGF0aD1kYXRhL2VhcnRoc2NpZW5jZS9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5LmVhcnRoc2NpZW5jZS4yMDA5Lm1vZGVscworcGx1Z2luQG9yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkuZWFydGhzY2llbmNlLjIwMTA9U1ZOLHVybD1odHRwOi8vZGV2LmVjbGlwc2Uub3JnL3N2bnJvb3QvdGVjaG5vbG9neS9vcmcuZWNsaXBzZS5zdGVtLHRhZz10cnVuayxwYXRoPWRhdGEvZWFydGhzY2llbmNlL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkuZWFydGhzY2llbmNlLjIwMTAKK3BsdWdpbkBvcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5LmVhcnRoc2NpZW5jZS4yMDEwLm1vZGVscz1TVk4sdXJsPWh0dHA6Ly9kZXYuZWNsaXBzZS5vcmcvc3Zucm9vdC90ZWNobm9sb2d5L29yZy5lY2xpcHNlLnN0ZW0sdGFnPXRydW5rLHBhdGg9ZGF0YS9lYXJ0aHNjaWVuY2Uvb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS5lYXJ0aHNjaWVuY2UuMjAxMC5tb2RlbHMKK3BsdWdpbkBvcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5LmVhcnRoc2NpZW5jZS5jb21iaW5lZD1TVk4sdXJsPWh0dHA6Ly9kZXYuZWNsaXBzZS5vcmcvc3Zucm9vdC90ZWNobm9sb2d5L29yZy5lY2xpcHNlLnN0ZW0sdGFnPXRydW5rLHBhdGg9ZGF0YS9lYXJ0aHNjaWVuY2Uvb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS5lYXJ0aHNjaWVuY2UuY29tYmluZWQKK3BsdWdpbkBvcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5LmVhcnRoc2NpZW5jZS5jb21iaW5lZC5tb2RlbHM9U1ZOLHVybD1odHRwOi8vZGV2LmVjbGlwc2Uub3JnL3N2bnJvb3QvdGVjaG5vbG9neS9vcmcuZWNsaXBzZS5zdGVtLHRhZz10cnVuayxwYXRoPWRhdGEvZWFydGhzY2llbmNlL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkuZWFydGhzY2llbmNlLmNvbWJpbmVkLm1vZGVscworcGx1Z2luQG9yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkuZWFydGhzY2llbmNlLmVsZXZhdGlvbj1TVk4sdXJsPWh0dHA6Ly9kZXYuZWNsaXBzZS5vcmcvc3Zucm9vdC90ZWNobm9sb2d5L29yZy5lY2xpcHNlLnN0ZW0sdGFnPXRydW5rLHBhdGg9ZGF0YS9lYXJ0aHNjaWVuY2Uvb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS5lYXJ0aHNjaWVuY2UuZWxldmF0aW9uCitwbHVnaW5Ab3JnLmVjbGlwc2Uuc3RlbS5pbnRlcm5hbC5kYXRhLmdlb2dyYXBoeS5lYXJ0aHNjaWVuY2U9U1ZOLHVybD1odHRwOi8vZGV2LmVjbGlwc2Uub3JnL3N2bnJvb3QvdGVjaG5vbG9neS9vcmcuZWNsaXBzZS5zdGVtLHRhZz10cnVuayxwYXRoPWRhdGEvZWFydGhzY2llbmNlL29yZy5lY2xpcHNlLnN0ZW0uaW50ZXJuYWwuZGF0YS5nZW9ncmFwaHkuZWFydGhzY2llbmNlCitwbHVnaW5Ab3JnLmVjbGlwc2Uuc3RlbS5pbnRlcm5hbC5kYXRhLmdlb2dyYXBoeS5lYXJ0aHNjaWVuY2UuMjAwMD1TVk4sdXJsPWh0dHA6Ly9kZXYuZWNsaXBzZS5vcmcvc3Zucm9vdC90ZWNobm9sb2d5L29yZy5lY2xpcHNlLnN0ZW0sdGFnPXRydW5rLHBhdGg9ZGF0YS9lYXJ0aHNjaWVuY2Uvb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcm5hbC5kYXRhLmdlb2dyYXBoeS5lYXJ0aHNjaWVuY2UuMjAwMAorcGx1Z2luQG9yZy5lY2xpcHNlLnN0ZW0uaW50ZXJuYWwuZGF0YS5nZW9ncmFwaHkuZWFydGhzY2llbmNlLjIwMDAubW9kZWxzPVNWTix1cmw9aHR0cDovL2Rldi5lY2xpcHNlLm9yZy9zdm5yb290L3RlY2hub2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbSx0YWc9dHJ1bmsscGF0aD1kYXRhL2VhcnRoc2NpZW5jZS9vcmcuZWNsaXBzZS5zdGVtLmludGVybmFsLmRhdGEuZ2VvZ3JhcGh5LmVhcnRoc2NpZW5jZS4yMDAwLm1vZGVscworcGx1Z2luQG9yZy5lY2xpcHNlLnN0ZW0uaW50ZXJuYWwuZGF0YS5nZW9ncmFwaHkuZWFydGhzY2llbmNlLjIwMDE9U1ZOLHVybD1odHRwOi8vZGV2LmVjbGlwc2Uub3JnL3N2bnJvb3QvdGVjaG5vbG9neS9vcmcuZWNsaXBzZS5zdGVtLHRhZz10cnVuayxwYXRoPWRhdGEvZWFydGhzY2llbmNlL29yZy5lY2xpcHNlLnN0ZW0uaW50ZXJuYWwuZGF0YS5nZW9ncmFwaHkuZWFydGhzY2llbmNlLjIwMDEKK3BsdWdpbkBvcmcuZWNsaXBzZS5zdGVtLmludGVybmFsLmRhdGEuZ2VvZ3JhcGh5LmVhcnRoc2NpZW5jZS4yMDAxLm1vZGVscz1TVk4sdXJsPWh0dHA6Ly9kZXYuZWNsaXBzZS5vcmcvc3Zucm9vdC90ZWNobm9sb2d5L29yZy5lY2xpcHNlLnN0ZW0sdGFnPXRydW5rLHBhdGg9ZGF0YS9lYXJ0aHNjaWVuY2Uvb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcm5hbC5kYXRhLmdlb2dyYXBoeS5lYXJ0aHNjaWVuY2UuMjAwMS5tb2RlbHMKK3BsdWdpbkBvcmcuZWNsaXBzZS5zdGVtLmludGVybmFsLmRhdGEuZ2VvZ3JhcGh5LmVhcnRoc2NpZW5jZS4yMDAyPVNWTix1cmw9aHR0cDovL2Rldi5lY2xpcHNlLm9yZy9zdm5yb290L3RlY2hub2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbSx0YWc9dHJ1bmsscGF0aD1kYXRhL2VhcnRoc2NpZW5jZS9vcmcuZWNsaXBzZS5zdGVtLmludGVybmFsLmRhdGEuZ2VvZ3JhcGh5LmVhcnRoc2NpZW5jZS4yMDAyCitwbHVnaW5Ab3JnLmVjbGlwc2Uuc3RlbS5pbnRlcm5hbC5kYXRhLmdlb2dyYXBoeS5lYXJ0aHNjaWVuY2UuMjAwMi5tb2RlbHM9U1ZOLHVybD1odHRwOi8vZGV2LmVjbGlwc2Uub3JnL3N2bnJvb3QvdGVjaG5vbG9neS9vcmcuZWNsaXBzZS5zdGVtLHRhZz10cnVuayxwYXRoPWRhdGEvZWFydGhzY2llbmNlL29yZy5lY2xpcHNlLnN0ZW0uaW50ZXJuYWwuZGF0YS5nZW9ncmFwaHkuZWFydGhzY2llbmNlLjIwMDIubW9kZWxzCitwbHVnaW5Ab3JnLmVjbGlwc2Uuc3RlbS5pbnRlcm5hbC5kYXRhLmdlb2dyYXBoeS5lYXJ0aHNjaWVuY2UuMjAwMz1TVk4sdXJsPWh0dHA6Ly9kZXYuZWNsaXBzZS5vcmcvc3Zucm9vdC90ZWNobm9sb2d5L29yZy5lY2xpcHNlLnN0ZW0sdGFnPXRydW5rLHBhdGg9ZGF0YS9lYXJ0aHNjaWVuY2Uvb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcm5hbC5kYXRhLmdlb2dyYXBoeS5lYXJ0aHNjaWVuY2UuMjAwMworcGx1Z2luQG9yZy5lY2xpcHNlLnN0ZW0uaW50ZXJuYWwuZGF0YS5nZW9ncmFwaHkuZWFydGhzY2llbmNlLjIwMDMubW9kZWxzPVNWTix1cmw9aHR0cDovL2Rldi5lY2xpcHNlLm9yZy9zdm5yb290L3RlY2hub2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbSx0YWc9dHJ1bmsscGF0aD1kYXRhL2VhcnRoc2NpZW5jZS9vcmcuZWNsaXBzZS5zdGVtLmludGVybmFsLmRhdGEuZ2VvZ3JhcGh5LmVhcnRoc2NpZW5jZS4yMDAzLm1vZGVscworcGx1Z2luQG9yZy5lY2xpcHNlLnN0ZW0uaW50ZXJuYWwuZGF0YS5nZW9ncmFwaHkuZWFydGhzY2llbmNlLjIwMDQ9U1ZOLHVybD1odHRwOi8vZGV2LmVjbGlwc2Uub3JnL3N2bnJvb3QvdGVjaG5vbG9neS9vcmcuZWNsaXBzZS5zdGVtLHRhZz10cnVuayxwYXRoPWRhdGEvZWFydGhzY2llbmNlL29yZy5lY2xpcHNlLnN0ZW0uaW50ZXJuYWwuZGF0YS5nZW9ncmFwaHkuZWFydGhzY2llbmNlLjIwMDQKK3BsdWdpbkBvcmcuZWNsaXBzZS5zdGVtLmludGVybmFsLmRhdGEuZ2VvZ3JhcGh5LmVhcnRoc2NpZW5jZS4yMDA0Lm1vZGVscz1TVk4sdXJsPWh0dHA6Ly9kZXYuZWNsaXBzZS5vcmcvc3Zucm9vdC90ZWNobm9sb2d5L29yZy5lY2xpcHNlLnN0ZW0sdGFnPXRydW5rLHBhdGg9ZGF0YS9lYXJ0aHNjaWVuY2Uvb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcm5hbC5kYXRhLmdlb2dyYXBoeS5lYXJ0aHNjaWVuY2UuMjAwNC5tb2RlbHMKK3BsdWdpbkBvcmcuZWNsaXBzZS5zdGVtLmludGVybmFsLmRhdGEuZ2VvZ3JhcGh5LmVhcnRoc2NpZW5jZS4yMDA1PVNWTix1cmw9aHR0cDovL2Rldi5lY2xpcHNlLm9yZy9zdm5yb290L3RlY2hub2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbSx0YWc9dHJ1bmsscGF0aD1kYXRhL2VhcnRoc2NpZW5jZS9vcmcuZWNsaXBzZS5zdGVtLmludGVybmFsLmRhdGEuZ2VvZ3JhcGh5LmVhcnRoc2NpZW5jZS4yMDA1CitwbHVnaW5Ab3JnLmVjbGlwc2Uuc3RlbS5pbnRlcm5hbC5kYXRhLmdlb2dyYXBoeS5lYXJ0aHNjaWVuY2UuMjAwNS5tb2RlbHM9U1ZOLHVybD1odHRwOi8vZGV2LmVjbGlwc2Uub3JnL3N2bnJvb3QvdGVjaG5vbG9neS9vcmcuZWNsaXBzZS5zdGVtLHRhZz10cnVuayxwYXRoPWRhdGEvZWFydGhzY2llbmNlL29yZy5lY2xpcHNlLnN0ZW0uaW50ZXJuYWwuZGF0YS5nZW9ncmFwaHkuZWFydGhzY2llbmNlLjIwMDUubW9kZWxzCitwbHVnaW5Ab3JnLmVjbGlwc2Uuc3RlbS5pbnRlcm5hbC5kYXRhLmdlb2dyYXBoeS5lYXJ0aHNjaWVuY2UuMjAwNj1TVk4sdXJsPWh0dHA6Ly9kZXYuZWNsaXBzZS5vcmcvc3Zucm9vdC90ZWNobm9sb2d5L29yZy5lY2xpcHNlLnN0ZW0sdGFnPXRydW5rLHBhdGg9ZGF0YS9lYXJ0aHNjaWVuY2Uvb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcm5hbC5kYXRhLmdlb2dyYXBoeS5lYXJ0aHNjaWVuY2UuMjAwNgorcGx1Z2luQG9yZy5lY2xpcHNlLnN0ZW0uaW50ZXJuYWwuZGF0YS5nZW9ncmFwaHkuZWFydGhzY2llbmNlLjIwMDYubW9kZWxzPVNWTix1cmw9aHR0cDovL2Rldi5lY2xpcHNlLm9yZy9zdm5yb290L3RlY2hub2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbSx0YWc9dHJ1bmsscGF0aD1kYXRhL2VhcnRoc2NpZW5jZS9vcmcuZWNsaXBzZS5zdGVtLmludGVybmFsLmRhdGEuZ2VvZ3JhcGh5LmVhcnRoc2NpZW5jZS4yMDA2Lm1vZGVscworcGx1Z2luQG9yZy5lY2xpcHNlLnN0ZW0uaW50ZXJuYWwuZGF0YS5nZW9ncmFwaHkuZWFydGhzY2llbmNlLjIwMDc9U1ZOLHVybD1odHRwOi8vZGV2LmVjbGlwc2Uub3JnL3N2bnJvb3QvdGVjaG5vbG9neS9vcmcuZWNsaXBzZS5zdGVtLHRhZz10cnVuayxwYXRoPWRhdGEvZWFydGhzY2llbmNlL29yZy5lY2xpcHNlLnN0ZW0uaW50ZXJuYWwuZGF0YS5nZW9ncmFwaHkuZWFydGhzY2llbmNlLjIwMDcKK3BsdWdpbkBvcmcuZWNsaXBzZS5zdGVtLmludGVybmFsLmRhdGEuZ2VvZ3JhcGh5LmVhcnRoc2NpZW5jZS4yMDA3Lm1vZGVscz1TVk4sdXJsPWh0dHA6Ly9kZXYuZWNsaXBzZS5vcmcvc3Zucm9vdC90ZWNobm9sb2d5L29yZy5lY2xpcHNlLnN0ZW0sdGFnPXRydW5rLHBhdGg9ZGF0YS9lYXJ0aHNjaWVuY2Uvb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcm5hbC5kYXRhLmdlb2dyYXBoeS5lYXJ0aHNjaWVuY2UuMjAwNy5tb2RlbHMKK3BsdWdpbkBvcmcuZWNsaXBzZS5zdGVtLmludGVybmFsLmRhdGEuZ2VvZ3JhcGh5LmVhcnRoc2NpZW5jZS4yMDA4PVNWTix1cmw9aHR0cDovL2Rldi5lY2xpcHNlLm9yZy9zdm5yb290L3RlY2hub2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbSx0YWc9dHJ1bmsscGF0aD1kYXRhL2VhcnRoc2NpZW5jZS9vcmcuZWNsaXBzZS5zdGVtLmludGVybmFsLmRhdGEuZ2VvZ3JhcGh5LmVhcnRoc2NpZW5jZS4yMDA4CitwbHVnaW5Ab3JnLmVjbGlwc2Uuc3RlbS5pbnRlcm5hbC5kYXRhLmdlb2dyYXBoeS5lYXJ0aHNjaWVuY2UuMjAwOC5tb2RlbHM9U1ZOLHVybD1odHRwOi8vZGV2LmVjbGlwc2Uub3JnL3N2bnJvb3QvdGVjaG5vbG9neS9vcmcuZWNsaXBzZS5zdGVtLHRhZz10cnVuayxwYXRoPWRhdGEvZWFydGhzY2llbmNlL29yZy5lY2xpcHNlLnN0ZW0uaW50ZXJuYWwuZGF0YS5nZW9ncmFwaHkuZWFydGhzY2llbmNlLjIwMDgubW9kZWxzCitwbHVnaW5Ab3JnLmVjbGlwc2Uuc3RlbS5pbnRlcm5hbC5kYXRhLmdlb2dyYXBoeS5lYXJ0aHNjaWVuY2UuMjAwOT1TVk4sdXJsPWh0dHA6Ly9kZXYuZWNsaXBzZS5vcmcvc3Zucm9vdC90ZWNobm9sb2d5L29yZy5lY2xpcHNlLnN0ZW0sdGFnPXRydW5rLHBhdGg9ZGF0YS9lYXJ0aHNjaWVuY2Uvb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcm5hbC5kYXRhLmdlb2dyYXBoeS5lYXJ0aHNjaWVuY2UuMjAwOQorcGx1Z2luQG9yZy5lY2xpcHNlLnN0ZW0uaW50ZXJuYWwuZGF0YS5nZW9ncmFwaHkuZWFydGhzY2llbmNlLjIwMDkubW9kZWxzPVNWTix1cmw9aHR0cDovL2Rldi5lY2xpcHNlLm9yZy9zdm5yb290L3RlY2hub2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbSx0YWc9dHJ1bmsscGF0aD1kYXRhL2VhcnRoc2NpZW5jZS9vcmcuZWNsaXBzZS5zdGVtLmludGVybmFsLmRhdGEuZ2VvZ3JhcGh5LmVhcnRoc2NpZW5jZS4yMDA5Lm1vZGVscworcGx1Z2luQG9yZy5lY2xpcHNlLnN0ZW0uaW50ZXJuYWwuZGF0YS5nZW9ncmFwaHkuZWFydGhzY2llbmNlLjIwMTA9U1ZOLHVybD1odHRwOi8vZGV2LmVjbGlwc2Uub3JnL3N2bnJvb3QvdGVjaG5vbG9neS9vcmcuZWNsaXBzZS5zdGVtLHRhZz10cnVuayxwYXRoPWRhdGEvZWFydGhzY2llbmNlL29yZy5lY2xpcHNlLnN0ZW0uaW50ZXJuYWwuZGF0YS5nZW9ncmFwaHkuZWFydGhzY2llbmNlLjIwMTAKK3BsdWdpbkBvcmcuZWNsaXBzZS5zdGVtLmludGVybmFsLmRhdGEuZ2VvZ3JhcGh5LmVhcnRoc2NpZW5jZS4yMDEwLm1vZGVscz1TVk4sdXJsPWh0dHA6Ly9kZXYuZWNsaXBzZS5vcmcvc3Zucm9vdC90ZWNobm9sb2d5L29yZy5lY2xpcHNlLnN0ZW0sdGFnPXRydW5rLHBhdGg9ZGF0YS9lYXJ0aHNjaWVuY2Uvb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcm5hbC5kYXRhLmdlb2dyYXBoeS5lYXJ0aHNjaWVuY2UuMjAxMC5tb2RlbHMKK3BsdWdpbkBvcmcuZWNsaXBzZS5zdGVtLmludGVybmFsLmRhdGEuZ2VvZ3JhcGh5LmVhcnRoc2NpZW5jZS5jb21iaW5lZD1TVk4sdXJsPWh0dHA6Ly9kZXYuZWNsaXBzZS5vcmcvc3Zucm9vdC90ZWNobm9sb2d5L29yZy5lY2xpcHNlLnN0ZW0sdGFnPXRydW5rLHBhdGg9ZGF0YS9lYXJ0aHNjaWVuY2Uvb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcm5hbC5kYXRhLmdlb2dyYXBoeS5lYXJ0aHNjaWVuY2UuY29tYmluZWQKK3BsdWdpbkBvcmcuZWNsaXBzZS5zdGVtLmludGVybmFsLmRhdGEuZ2VvZ3JhcGh5LmVhcnRoc2NpZW5jZS5jb21iaW5lZC5tb2RlbHM9U1ZOLHVybD1odHRwOi8vZGV2LmVjbGlwc2Uub3JnL3N2bnJvb3QvdGVjaG5vbG9neS9vcmcuZWNsaXBzZS5zdGVtLHRhZz10cnVuayxwYXRoPWRhdGEvZWFydGhzY2llbmNlL29yZy5lY2xpcHNlLnN0ZW0uaW50ZXJuYWwuZGF0YS5nZW9ncmFwaHkuZWFydGhzY2llbmNlLmNvbWJpbmVkLm1vZGVscworcGx1Z2luQG9yZy5lY2xpcHNlLnN0ZW0uaW50ZXJuYWwuZGF0YS5nZW9ncmFwaHkuZWFydGhzY2llbmNlLmVsZXZhdGlvbj1TVk4sdXJsPWh0dHA6Ly9kZXYuZWNsaXBzZS5vcmcvc3Zucm9vdC90ZWNobm9sb2d5L29yZy5lY2xpcHNlLnN0ZW0sdGFnPXRydW5rLHBhdGg9ZGF0YS9lYXJ0aHNjaWVuY2Uvb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcm5hbC5kYXRhLmdlb2dyYXBoeS5lYXJ0aHNjaWVuY2UuZWxldmF0aW9uCmRpZmYgLS1naXQgYS9yZWxlbmcvb3JnLmVjbGlwc2Uuc3RlbS5yZWxlbmcvcmVzb3VyY2VzL1NURU1UUFRQU3RhdGljQW5hbHlzaXNSdWxlcy5kYXQgYi9yZWxlbmcvb3JnLmVjbGlwc2Uuc3RlbS5yZWxlbmcvcmVzb3VyY2VzL1NURU1UUFRQU3RhdGljQW5hbHlzaXNSdWxlcy5kYXQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTVjMWU5NAotLS0gL2Rldi9udWxsCisrKyBiL3JlbGVuZy9vcmcuZWNsaXBzZS5zdGVtLnJlbGVuZy9yZXNvdXJjZXMvU1RFTVRQVFBTdGF0aWNBbmFseXNpc1J1bGVzLmRhdApAQCAtMCwwICsxLDE3OSBAQAorY29kZXJldmlldy5qYXZhLmFuYWx5c2lzUHJvdmlkZXIKK2NvZGVyZXZpZXcuamF2YS5qMnNlYmVzdHByYWN0aWNlcworY29kZXJldmlldy5qYXZhLmNhdGVnb3J5LmF3dAorY29kZXJldmlldy5qYXZhLnJ1bGVzLmF3dC5SdWxlQXd0UGVlcgorY29kZXJldmlldy5qYXZhLnJ1bGVzLmF3dC5SdWxlQXd0UGVlci52YXJpYWJsZS5TRVZFUklUWSwyCitjb2RlcmV2aWV3LmphdmEuY2F0ZWdvcnkuY2FzdGluZworY29kZXJldmlldy5qYXZhLnJ1bGVzLmNhc3RpbmcuUnVsZUNhc3RpbmdQcmltaXRpdmVzCitjb2RlcmV2aWV3LmphdmEucnVsZXMuY2FzdGluZy5SdWxlQ2FzdGluZ1ByaW1pdGl2ZXMudmFyaWFibGUuU0VWRVJJVFksMQorY29kZXJldmlldy5qYXZhLnJ1bGVzLmNhc3RpbmcuUnVsZUNhc3RpbmdPYmplY3REb3duY2FzdC52YXJpYWJsZS5TRVZFUklUWSwwCitjb2RlcmV2aWV3LmphdmEuY2F0ZWdvcnkuY2xvbmVhYmxlCitjb2RlcmV2aWV3LmphdmEucnVsZXMuY2xvbmVhYmxlLlJ1bGVDbG9uZWFibGVTdXBlckNsb25lCitjb2RlcmV2aWV3LmphdmEucnVsZXMuY2xvbmVhYmxlLlJ1bGVDbG9uZWFibGVTdXBlckNsb25lLnZhcmlhYmxlLlNFVkVSSVRZLDIKK2NvZGVyZXZpZXcuamF2YS5ydWxlcy5jbG9uZWFibGUuUnVsZUNsb25lYWJsZU92ZXJyaWRlQ2xvbmUKK2NvZGVyZXZpZXcuamF2YS5ydWxlcy5jbG9uZWFibGUuUnVsZUNsb25lYWJsZU92ZXJyaWRlQ2xvbmUudmFyaWFibGUuU0VWRVJJVFksMQorY29kZXJldmlldy5qYXZhLnJ1bGVzLmNsb25lYWJsZS5SdWxlQ2xvbmVhYmxlSW1wbGVtZW50Q2xvbmVhYmxlCitjb2RlcmV2aWV3LmphdmEucnVsZXMuY2xvbmVhYmxlLlJ1bGVDbG9uZWFibGVJbXBsZW1lbnRDbG9uZWFibGUudmFyaWFibGUuU0VWRVJJVFksMQorY29kZXJldmlldy5qYXZhLmNhdGVnb3J5LmNvbXBhcmlzb24KK2NvZGVyZXZpZXcuamF2YS5ydWxlcy5jb21wYXJpc29uLlJ1bGVDb21wYXJpc29uRXF1YWxzSGFzaENvZGUKK2NvZGVyZXZpZXcuamF2YS5ydWxlcy5jb21wYXJpc29uLlJ1bGVDb21wYXJpc29uRXF1YWxzSGFzaENvZGUudmFyaWFibGUuU0VWRVJJVFksMgorY29kZXJldmlldy5qYXZhLnJ1bGVzLmNvbXBhcmlzb24uUnVsZUNvbXBhcmlzb25QbGFjZUNvbnN0YW50cy52YXJpYWJsZS5TRVZFUklUWSwwCitjb2RlcmV2aWV3LmphdmEucnVsZXMuY29tcGFyaXNvbi5SdWxlQ29tcGFyaXNvbkluc3RhbmNlT2ZFcXVhbHMudmFyaWFibGUuU0VWRVJJVFksMQorY29kZXJldmlldy5qYXZhLnJ1bGVzLmNvbXBhcmlzb24uUnVsZUNvbXBhcmlzb25SZWZlcmVuY2VFcXVhbGl0eS52YXJpYWJsZS5TRVZFUklUWSwxCitjb2RlcmV2aWV3LmphdmEucnVsZXMuY29tcGFyaXNvbi5SdWxlQ29tcGFyaXNvbkNsYXNzTmFtZUNvbXBhcmlzb24KK2NvZGVyZXZpZXcuamF2YS5ydWxlcy5jb21wYXJpc29uLlJ1bGVDb21wYXJpc29uQ2xhc3NOYW1lQ29tcGFyaXNvbi52YXJpYWJsZS5TRVZFUklUWSwyCitjb2RlcmV2aWV3LmphdmEuY2F0ZWdvcnkuY29uZGl0aW9uYWwKK2NvZGVyZXZpZXcuamF2YS5ydWxlcy5jb25kaXRpb25hbC5SdWxlQ29uZGl0aW9uYWxUZXJuYXJ5Citjb2RlcmV2aWV3LmphdmEucnVsZXMuY29uZGl0aW9uYWwuUnVsZUNvbmRpdGlvbmFsVGVybmFyeS52YXJpYWJsZS5TRVZFUklUWSwwCitjb2RlcmV2aWV3LmphdmEucnVsZXMuY29uZGl0aW9uYWwuUnVsZUNvbmRpdGlvbmFsTmVnYXRpb25JZkNvbmRpdGlvbgorY29kZXJldmlldy5qYXZhLnJ1bGVzLmNvbmRpdGlvbmFsLlJ1bGVDb25kaXRpb25hbE5lZ2F0aW9uSWZDb25kaXRpb24udmFyaWFibGUuU0VWRVJJVFksMAorY29kZXJldmlldy5qYXZhLmNhdGVnb3J5LmNvbnN0cnVjdG9ycworY29kZXJldmlldy5qYXZhLnJ1bGVzLmNvbnN0cnVjdG9ycy5SdWxlQ29uc3RydWN0b3JzQWJzdHJhY3RNZXRob2RzCitjb2RlcmV2aWV3LmphdmEucnVsZXMuY29uc3RydWN0b3JzLlJ1bGVDb25zdHJ1Y3RvcnNBYnN0cmFjdE1ldGhvZHMudmFyaWFibGUuU0VWRVJJVFksMAorY29kZXJldmlldy5qYXZhLnJ1bGVzLmNvbnN0cnVjdG9ycy5SdWxlQ29uc3RydWN0b3JzT3ZlcnJpZGFibGVNZXRob2RzLnZhcmlhYmxlLlNFVkVSSVRZLDAKK2NvZGVyZXZpZXcuamF2YS5jYXRlZ29yeS5kZWNsYXJhdGlvbgorY29kZXJldmlldy5qYXZhLnJ1bGVzLmRlY2xhcmF0aW9uLlJ1bGVEZWNsYXJhdGlvbkNBcnJheVN0eWxlCitjb2RlcmV2aWV3LmphdmEucnVsZXMuZGVjbGFyYXRpb24uUnVsZURlY2xhcmF0aW9uQ0FycmF5U3R5bGUudmFyaWFibGUuU0VWRVJJVFksMAorY29kZXJldmlldy5qYXZhLnJ1bGVzLmRlY2xhcmF0aW9uLlJ1bGVEZWNsYXJhdGlvbk11bHRpcGxlRGVjbGFyYXRpb24KK2NvZGVyZXZpZXcuamF2YS5ydWxlcy5kZWNsYXJhdGlvbi5SdWxlRGVjbGFyYXRpb25NdWx0aXBsZURlY2xhcmF0aW9uLnZhcmlhYmxlLlNFVkVSSVRZLDAKK2NvZGVyZXZpZXcuamF2YS5ydWxlcy5kZWNsYXJhdGlvbi5SdWxlRGVjbGFyYXRpb25NaXhlZERlY2xhcmF0aW9uCitjb2RlcmV2aWV3LmphdmEucnVsZXMuZGVjbGFyYXRpb24uUnVsZURlY2xhcmF0aW9uTWl4ZWREZWNsYXJhdGlvbi52YXJpYWJsZS5TRVZFUklUWSwwCitjb2RlcmV2aWV3LmphdmEucnVsZXMuZGVjbGFyYXRpb24uUnVsZURlY2xhcmF0aW9uRGVjbGFyZUNvbnN0YW50cy52YXJpYWJsZS5TRVZFUklUWSwwCitjb2RlcmV2aWV3LmphdmEucnVsZXMuZGVjbGFyYXRpb24uUnVsZURlY2xhcmF0aW9uSW50ZXJmYWNlQ29uc3RhbnRzCitjb2RlcmV2aWV3LmphdmEucnVsZXMuZGVjbGFyYXRpb24uUnVsZURlY2xhcmF0aW9uSW50ZXJmYWNlQ29uc3RhbnRzLnZhcmlhYmxlLlNFVkVSSVRZLDAKK2NvZGVyZXZpZXcuamF2YS5jYXRlZ29yeS5leGNlcHRpb25zCitjb2RlcmV2aWV3LmphdmEucnVsZXMuZXhjZXB0aW9ucy5SdWxlRXhjZXB0aW9uc1NwZWNpZmljRXhjZXB0aW9ucworY29kZXJldmlldy5qYXZhLnJ1bGVzLmV4Y2VwdGlvbnMuUnVsZUV4Y2VwdGlvbnNTcGVjaWZpY0V4Y2VwdGlvbnMudmFyaWFibGUuU0VWRVJJVFksMAorY29kZXJldmlldy5qYXZhLnJ1bGVzLmV4Y2VwdGlvbnMuUnVsZUV4Y2VwdGlvbnNDYXRjaEdlbmVyaWMudmFyaWFibGUuU0VWRVJJVFksMAorY29kZXJldmlldy5qYXZhLnJ1bGVzLmV4Y2VwdGlvbnMuUnVsZUV4Y2VwdGlvbnNFeHRlbmRFcnJvcgorY29kZXJldmlldy5qYXZhLnJ1bGVzLmV4Y2VwdGlvbnMuUnVsZUV4Y2VwdGlvbnNFeHRlbmRFcnJvci52YXJpYWJsZS5TRVZFUklUWSwwCitjb2RlcmV2aWV3LmphdmEucnVsZXMuZXhjZXB0aW9ucy5SdWxlRXhjZXB0aW9uc0V4dGVuZEVycm9yLnZhcmlhYmxlLkNMQVNTLGphdmEubGFuZy5FcnJvcgorY29kZXJldmlldy5qYXZhLnJ1bGVzLmV4Y2VwdGlvbnMuUnVsZUV4Y2VwdGlvbnNFeHRlbmRSdW50aW1lRXhjZXB0aW9uCitjb2RlcmV2aWV3LmphdmEucnVsZXMuZXhjZXB0aW9ucy5SdWxlRXhjZXB0aW9uc0V4dGVuZFJ1bnRpbWVFeGNlcHRpb24udmFyaWFibGUuU0VWRVJJVFksMAorY29kZXJldmlldy5qYXZhLnJ1bGVzLmV4Y2VwdGlvbnMuUnVsZUV4Y2VwdGlvbnNFeHRlbmRSdW50aW1lRXhjZXB0aW9uLnZhcmlhYmxlLkNMQVNTLGphdmEubGFuZy5SdW50aW1lRXhjZXB0aW9uCitjb2RlcmV2aWV3LmphdmEucnVsZXMuZXhjZXB0aW9ucy5SdWxlRXhjZXB0aW9uc0V4dGVuZFRocm93YWJsZQorY29kZXJldmlldy5qYXZhLnJ1bGVzLmV4Y2VwdGlvbnMuUnVsZUV4Y2VwdGlvbnNFeHRlbmRUaHJvd2FibGUudmFyaWFibGUuU0VWRVJJVFksMAorY29kZXJldmlldy5qYXZhLnJ1bGVzLmV4Y2VwdGlvbnMuUnVsZUV4Y2VwdGlvbnNFeHRlbmRUaHJvd2FibGUudmFyaWFibGUuQ0xBU1MsamF2YS5sYW5nLlRocm93YWJsZQorY29kZXJldmlldy5qYXZhLnJ1bGVzLmV4Y2VwdGlvbnMuUnVsZUV4Y2VwdGlvbnNUaHJvd0Vycm9yCitjb2RlcmV2aWV3LmphdmEucnVsZXMuZXhjZXB0aW9ucy5SdWxlRXhjZXB0aW9uc1Rocm93RXJyb3IudmFyaWFibGUuU0VWRVJJVFksMAorY29kZXJldmlldy5qYXZhLnJ1bGVzLmV4Y2VwdGlvbnMuUnVsZUV4Y2VwdGlvbnNUaHJvd0Vycm9yLnZhcmlhYmxlLkNMQVNTLGphdmEubGFuZy5FcnJvcgorY29kZXJldmlldy5qYXZhLnJ1bGVzLmV4Y2VwdGlvbnMuUnVsZUV4Y2VwdGlvbnNUaHJvd0V4Y2VwdGlvbgorY29kZXJldmlldy5qYXZhLnJ1bGVzLmV4Y2VwdGlvbnMuUnVsZUV4Y2VwdGlvbnNUaHJvd0V4Y2VwdGlvbi52YXJpYWJsZS5TRVZFUklUWSwwCitjb2RlcmV2aWV3LmphdmEucnVsZXMuZXhjZXB0aW9ucy5SdWxlRXhjZXB0aW9uc1Rocm93RXhjZXB0aW9uLnZhcmlhYmxlLkNMQVNTLGphdmEubGFuZy5FeGNlcHRpb24KK2NvZGVyZXZpZXcuamF2YS5ydWxlcy5leGNlcHRpb25zLlJ1bGVFeGNlcHRpb25zVGhyb3dUaHJvd2FibGUKK2NvZGVyZXZpZXcuamF2YS5ydWxlcy5leGNlcHRpb25zLlJ1bGVFeGNlcHRpb25zVGhyb3dUaHJvd2FibGUudmFyaWFibGUuU0VWRVJJVFksMAorY29kZXJldmlldy5qYXZhLnJ1bGVzLmV4Y2VwdGlvbnMuUnVsZUV4Y2VwdGlvbnNUaHJvd1Rocm93YWJsZS52YXJpYWJsZS5DTEFTUyxqYXZhLmxhbmcuVGhyb3dhYmxlCitjb2RlcmV2aWV3LmphdmEucnVsZXMuZXhjZXB0aW9ucy5SdWxlRXhjZXB0aW9uc0luc3RhbmNlb2ZDYXRjaAorY29kZXJldmlldy5qYXZhLnJ1bGVzLmV4Y2VwdGlvbnMuUnVsZUV4Y2VwdGlvbnNJbnN0YW5jZW9mQ2F0Y2gudmFyaWFibGUuU0VWRVJJVFksMQorY29kZXJldmlldy5qYXZhLmNhdGVnb3J5LmluaXRpYWxpemF0aW9uCitjb2RlcmV2aWV3LmphdmEucnVsZXMuaW5pdGlhbGl6YXRpb24uUnVsZUluaXRpYWxpemF0aW9uSW5pdGlhbGl6ZVN0YXRpY0ZpZWxkcy52YXJpYWJsZS5TRVZFUklUWSwwCitjb2RlcmV2aWV3LmphdmEucnVsZXMuaW5pdGlhbGl6YXRpb24uUnVsZUluaXRpYWxpemF0aW9uQ2hhaW5pbmdBc3NpZ25tZW50cworY29kZXJldmlldy5qYXZhLnJ1bGVzLmluaXRpYWxpemF0aW9uLlJ1bGVJbml0aWFsaXphdGlvbkNoYWluaW5nQXNzaWdubWVudHMudmFyaWFibGUuU0VWRVJJVFksMAorY29kZXJldmlldy5qYXZhLnJ1bGVzLmluaXRpYWxpemF0aW9uLlJ1bGVJbml0aWFsaXphdGlvbkFzc2lnbmluZ01ldGhvZFBhcmFtZXRlci52YXJpYWJsZS5TRVZFUklUWSwwCitjb2RlcmV2aWV3LmphdmEuY2F0ZWdvcnkubG9vcAorY29kZXJldmlldy5qYXZhLnJ1bGVzLmxvb3AuUnVsZUxvb3BOb0NvbmRpdGlvbkZvckxvb3AKK2NvZGVyZXZpZXcuamF2YS5ydWxlcy5sb29wLlJ1bGVMb29wTm9Db25kaXRpb25Gb3JMb29wLnZhcmlhYmxlLlNFVkVSSVRZLDAKK2NvZGVyZXZpZXcuamF2YS5ydWxlcy5sb29wLlJ1bGVMb29wTm9Jbml0SW5jckZvckxvb3AKK2NvZGVyZXZpZXcuamF2YS5ydWxlcy5sb29wLlJ1bGVMb29wTm9Jbml0SW5jckZvckxvb3AudmFyaWFibGUuU0VWRVJJVFksMAorY29kZXJldmlldy5qYXZhLnJ1bGVzLmxvb3AuUnVsZUxvb3BBc3NpZ25Mb29wVmFyaWFibGUKK2NvZGVyZXZpZXcuamF2YS5ydWxlcy5sb29wLlJ1bGVMb29wQXNzaWduTG9vcFZhcmlhYmxlLnZhcmlhYmxlLlNFVkVSSVRZLDEKK2NvZGVyZXZpZXcuamF2YS5ydWxlcy5sb29wLlJ1bGVMb29wQ29udGludWVTdGF0ZW1lbnQudmFyaWFibGUuU0VWRVJJVFksMAorY29kZXJldmlldy5qYXZhLmNhdGVnb3J5Lm51bGwKK2NvZGVyZXZpZXcuamF2YS5ydWxlcy5udWxscy5SdWxlTnVsbEVtcHR5QXJyYXkKK2NvZGVyZXZpZXcuamF2YS5ydWxlcy5udWxscy5SdWxlTnVsbEVtcHR5QXJyYXkudmFyaWFibGUuU0VWRVJJVFksMgorY29kZXJldmlldy5qYXZhLnJ1bGVzLm51bGxzLlJ1bGVOdWxsRW51bWVyYXRpb24KK2NvZGVyZXZpZXcuamF2YS5ydWxlcy5udWxscy5SdWxlTnVsbEVudW1lcmF0aW9uLnZhcmlhYmxlLlNFVkVSSVRZLDEKK2NvZGVyZXZpZXcuamF2YS5ydWxlcy5udWxscy5SdWxlTnVsbEl0ZXJhdG9yCitjb2RlcmV2aWV3LmphdmEucnVsZXMubnVsbHMuUnVsZU51bGxJdGVyYXRvci52YXJpYWJsZS5TRVZFUklUWSwxCitjb2RlcmV2aWV3LmphdmEuY2F0ZWdvcnkucG9ydGFiaWxpdHkKK2NvZGVyZXZpZXcuamF2YS5ydWxlcy5wb3J0YWJpbGl0eS5SdWxlUG9ydGFiaWxpdHlTeXN0ZW1HZXRlbnYKK2NvZGVyZXZpZXcuamF2YS5ydWxlcy5wb3J0YWJpbGl0eS5SdWxlUG9ydGFiaWxpdHlTeXN0ZW1HZXRlbnYudmFyaWFibGUuU0VWRVJJVFksMQorY29kZXJldmlldy5qYXZhLnJ1bGVzLnBvcnRhYmlsaXR5LlJ1bGVQb3J0YWJpbGl0eUxpbmVTZXBhcmF0b3JzCitjb2RlcmV2aWV3LmphdmEucnVsZXMucG9ydGFiaWxpdHkuUnVsZVBvcnRhYmlsaXR5TGluZVNlcGFyYXRvcnMudmFyaWFibGUuU0VWRVJJVFksMQorY29kZXJldmlldy5qYXZhLnJ1bGVzLnBvcnRhYmlsaXR5LlJ1bGVQb3J0YWJpbGl0eUZpbGVTZXBhcmF0b3IKK2NvZGVyZXZpZXcuamF2YS5ydWxlcy5wb3J0YWJpbGl0eS5SdWxlUG9ydGFiaWxpdHlGaWxlU2VwYXJhdG9yLnZhcmlhYmxlLlNFVkVSSVRZLDEKK2NvZGVyZXZpZXcuamF2YS5jYXRlZ29yeS5yZWZsZWN0aW9uCitjb2RlcmV2aWV3LmphdmEucnVsZXMucmVmbGVjdGlvbi5SdWxlUmVmbGVjdGlvbkdldERlY2xhcmVkRmllbGQKK2NvZGVyZXZpZXcuamF2YS5ydWxlcy5yZWZsZWN0aW9uLlJ1bGVSZWZsZWN0aW9uR2V0RGVjbGFyZWRGaWVsZC52YXJpYWJsZS5TRVZFUklUWSwwCitjb2RlcmV2aWV3LmphdmEucnVsZXMucmVmbGVjdGlvbi5SdWxlUmVmbGVjdGlvbkdldERlY2xhcmVkRmllbGQudmFyaWFibGUuQ0xBU1MsamF2YS5sYW5nLkNsYXNzCitjb2RlcmV2aWV3LmphdmEucnVsZXMucmVmbGVjdGlvbi5SdWxlUmVmbGVjdGlvbkdldERlY2xhcmVkRmllbGQudmFyaWFibGUuTUVUSE9ELGdldERlY2xhcmVkRmllbGQKK2NvZGVyZXZpZXcuamF2YS5ydWxlcy5yZWZsZWN0aW9uLlJ1bGVSZWZsZWN0aW9uR2V0RGVjbGFyZWRNZXRob2QKK2NvZGVyZXZpZXcuamF2YS5ydWxlcy5yZWZsZWN0aW9uLlJ1bGVSZWZsZWN0aW9uR2V0RGVjbGFyZWRNZXRob2QudmFyaWFibGUuU0VWRVJJVFksMAorY29kZXJldmlldy5qYXZhLnJ1bGVzLnJlZmxlY3Rpb24uUnVsZVJlZmxlY3Rpb25HZXREZWNsYXJlZE1ldGhvZC52YXJpYWJsZS5DTEFTUyxqYXZhLmxhbmcuQ2xhc3MKK2NvZGVyZXZpZXcuamF2YS5ydWxlcy5yZWZsZWN0aW9uLlJ1bGVSZWZsZWN0aW9uR2V0RGVjbGFyZWRNZXRob2QudmFyaWFibGUuTUVUSE9ELGdldERlY2xhcmVkTWV0aG9kCitjb2RlcmV2aWV3LmphdmEucnVsZXMucmVmbGVjdGlvbi5SdWxlUmVmbGVjdGlvbkdldEZpZWxkCitjb2RlcmV2aWV3LmphdmEucnVsZXMucmVmbGVjdGlvbi5SdWxlUmVmbGVjdGlvbkdldEZpZWxkLnZhcmlhYmxlLlNFVkVSSVRZLDAKK2NvZGVyZXZpZXcuamF2YS5ydWxlcy5yZWZsZWN0aW9uLlJ1bGVSZWZsZWN0aW9uR2V0RmllbGQudmFyaWFibGUuQ0xBU1MsamF2YS5sYW5nLkNsYXNzCitjb2RlcmV2aWV3LmphdmEucnVsZXMucmVmbGVjdGlvbi5SdWxlUmVmbGVjdGlvbkdldEZpZWxkLnZhcmlhYmxlLk1FVEhPRCxnZXRGaWVsZAorY29kZXJldmlldy5qYXZhLnJ1bGVzLnJlZmxlY3Rpb24uUnVsZVJlZmxlY3Rpb25HZXRNZXRob2QKK2NvZGVyZXZpZXcuamF2YS5ydWxlcy5yZWZsZWN0aW9uLlJ1bGVSZWZsZWN0aW9uR2V0TWV0aG9kLnZhcmlhYmxlLlNFVkVSSVRZLDAKK2NvZGVyZXZpZXcuamF2YS5ydWxlcy5yZWZsZWN0aW9uLlJ1bGVSZWZsZWN0aW9uR2V0TWV0aG9kLnZhcmlhYmxlLkNMQVNTLGphdmEubGFuZy5DbGFzcworY29kZXJldmlldy5qYXZhLnJ1bGVzLnJlZmxlY3Rpb24uUnVsZVJlZmxlY3Rpb25HZXRNZXRob2QudmFyaWFibGUuTUVUSE9ELGdldE1ldGhvZAorY29kZXJldmlldy5qYXZhLmNhdGVnb3J5LnNlcmlhbGl6YXRpb24KK2NvZGVyZXZpZXcuamF2YS5ydWxlcy5zZXJpYWxpemF0aW9uLlJ1bGVTZXJpYWxpemF0aW9uU2VyaWFsVmVyc2lvblVJRAorY29kZXJldmlldy5qYXZhLnJ1bGVzLnNlcmlhbGl6YXRpb24uUnVsZVNlcmlhbGl6YXRpb25TZXJpYWxWZXJzaW9uVUlELnZhcmlhYmxlLlNFVkVSSVRZLDAKK2NvZGVyZXZpZXcuamF2YS5ydWxlcy5zZXJpYWxpemF0aW9uLlJ1bGVTZXJpYWxpemF0aW9uUmVhZFdyaXRlT2JqZWN0Citjb2RlcmV2aWV3LmphdmEucnVsZXMuc2VyaWFsaXphdGlvbi5SdWxlU2VyaWFsaXphdGlvblJlYWRXcml0ZU9iamVjdC52YXJpYWJsZS5TRVZFUklUWSwyCitjb2RlcmV2aWV3LmphdmEucnVsZXMuc2VyaWFsaXphdGlvbi5SdWxlU2VyaWFsaXphdGlvblJlc29sdmVPYmplY3QKK2NvZGVyZXZpZXcuamF2YS5ydWxlcy5zZXJpYWxpemF0aW9uLlJ1bGVTZXJpYWxpemF0aW9uUmVzb2x2ZU9iamVjdC52YXJpYWJsZS5TRVZFUklUWSwyCitjb2RlcmV2aWV3LmphdmEucnVsZXMuc2VyaWFsaXphdGlvbi5SdWxlU2VyaWFsaXphdGlvblNlcmlhbGl6YWJsZUZpZWxkCitjb2RlcmV2aWV3LmphdmEucnVsZXMuc2VyaWFsaXphdGlvbi5SdWxlU2VyaWFsaXphdGlvblNlcmlhbGl6YWJsZUZpZWxkLnZhcmlhYmxlLlNFVkVSSVRZLDIKK2NvZGVyZXZpZXcuamF2YS5ydWxlcy5zZXJpYWxpemF0aW9uLlJ1bGVTZXJpYWxpemF0aW9uVHJhbnNpZW50RmllbGQKK2NvZGVyZXZpZXcuamF2YS5ydWxlcy5zZXJpYWxpemF0aW9uLlJ1bGVTZXJpYWxpemF0aW9uVHJhbnNpZW50RmllbGQudmFyaWFibGUuU0VWRVJJVFksMAorY29kZXJldmlldy5qYXZhLmNhdGVnb3J5LnN0YXRlbWVudAorY29kZXJldmlldy5qYXZhLnJ1bGVzLnN0YXRlbWVudC5SdWxlU3RhdGVtZW50U3Vycm91bmRXaXRoQnJhY2VzLnZhcmlhYmxlLlNFVkVSSVRZLDAKK2NvZGVyZXZpZXcuamF2YS5ydWxlcy5zdGF0ZW1lbnQuUnVsZVN0YXRlbWVudEVtcHR5U3RhdGVtZW50Citjb2RlcmV2aWV3LmphdmEucnVsZXMuc3RhdGVtZW50LlJ1bGVTdGF0ZW1lbnRFbXB0eVN0YXRlbWVudC52YXJpYWJsZS5TRVZFUklUWSwwCitjb2RlcmV2aWV3LmphdmEuY2F0ZWdvcnkuc3dpdGNoCitjb2RlcmV2aWV3LmphdmEucnVsZXMuc3dpdGNoZXMuUnVsZVN3aXRjaEJyZWFrCitjb2RlcmV2aWV3LmphdmEucnVsZXMuc3dpdGNoZXMuUnVsZVN3aXRjaEJyZWFrLnZhcmlhYmxlLlNFVkVSSVRZLDEKK2NvZGVyZXZpZXcuamF2YS5ydWxlcy5zd2l0Y2hlcy5SdWxlU3dpdGNoRGVmYXVsdExhYmVsLnZhcmlhYmxlLlNFVkVSSVRZLDAKK2NvZGVyZXZpZXcuamF2YS5ydWxlcy5zd2l0Y2hlcy5SdWxlU3dpdGNoQnJhbmNoLnZhcmlhYmxlLlNFVkVSSVRZLDAKK2NvZGVyZXZpZXcuamF2YS5jYXRlZ29yeS50aHJlYWRzCitjb2RlcmV2aWV3LmphdmEudGhyZWFkcy5ub25zeW5jaHJvbml6ZWRub3RpZnkKK2NvZGVyZXZpZXcuamF2YS50aHJlYWRzLm5vbnN5bmNocm9uaXplZG5vdGlmeS52YXJpYWJsZS5TRVZFUklUWSwyCitjb2RlcmV2aWV3LmphdmEudGhyZWFkcy5ub25zeW5jaHJvbml6ZWRub3RpZnkudmFyaWFibGUuQ0xBU1MsamF2YS5sYW5nLk9iamVjdAorY29kZXJldmlldy5qYXZhLnRocmVhZHMubm9uc3luY2hyb25pemVkbm90aWZ5LnZhcmlhYmxlLk1FVEhPRCxub3RpZnkKK2NvZGVyZXZpZXcuamF2YS50aHJlYWRzLm5vbnN5bmNocm9uaXplZG5vdGlmeWFsbAorY29kZXJldmlldy5qYXZhLnRocmVhZHMubm9uc3luY2hyb25pemVkbm90aWZ5YWxsLnZhcmlhYmxlLlNFVkVSSVRZLDIKK2NvZGVyZXZpZXcuamF2YS50aHJlYWRzLm5vbnN5bmNocm9uaXplZG5vdGlmeWFsbC52YXJpYWJsZS5DTEFTUyxqYXZhLmxhbmcuT2JqZWN0Citjb2RlcmV2aWV3LmphdmEudGhyZWFkcy5ub25zeW5jaHJvbml6ZWRub3RpZnlhbGwudmFyaWFibGUuTUVUSE9ELG5vdGlmeUFsbAorY29kZXJldmlldy5qYXZhLnRocmVhZHMubm9uc3luY2hyb25pemVkd2FpdAorY29kZXJldmlldy5qYXZhLnRocmVhZHMubm9uc3luY2hyb25pemVkd2FpdC52YXJpYWJsZS5TRVZFUklUWSwyCitjb2RlcmV2aWV3LmphdmEudGhyZWFkcy5ub25zeW5jaHJvbml6ZWR3YWl0LnZhcmlhYmxlLkNMQVNTLGphdmEubGFuZy5PYmplY3QKK2NvZGVyZXZpZXcuamF2YS50aHJlYWRzLm5vbnN5bmNocm9uaXplZHdhaXQudmFyaWFibGUuTUVUSE9ELHdhaXQKK2NvZGVyZXZpZXcuamF2YS50aHJlYWRzLmRlc3Ryb3kKK2NvZGVyZXZpZXcuamF2YS50aHJlYWRzLmRlc3Ryb3kudmFyaWFibGUuU0VWRVJJVFksMgorY29kZXJldmlldy5qYXZhLnRocmVhZHMuZGVzdHJveS52YXJpYWJsZS5DTEFTUyxqYXZhLmxhbmcuVGhyZWFkCitjb2RlcmV2aWV3LmphdmEudGhyZWFkcy5kZXN0cm95LnZhcmlhYmxlLk1FVEhPRCxkZXN0cm95Citjb2RlcmV2aWV3LmphdmEudGhyZWFkcy5yZXN1bWUKK2NvZGVyZXZpZXcuamF2YS50aHJlYWRzLnJlc3VtZS52YXJpYWJsZS5TRVZFUklUWSwyCitjb2RlcmV2aWV3LmphdmEudGhyZWFkcy5yZXN1bWUudmFyaWFibGUuQ0xBU1MsamF2YS5sYW5nLlRocmVhZAorY29kZXJldmlldy5qYXZhLnRocmVhZHMucmVzdW1lLnZhcmlhYmxlLk1FVEhPRCxyZXN1bWUKK2NvZGVyZXZpZXcuamF2YS50aHJlYWRzLnN0b3AKK2NvZGVyZXZpZXcuamF2YS50aHJlYWRzLnN0b3AudmFyaWFibGUuU0VWRVJJVFksMgorY29kZXJldmlldy5qYXZhLnRocmVhZHMuc3RvcC52YXJpYWJsZS5DTEFTUyxqYXZhLmxhbmcuVGhyZWFkCitjb2RlcmV2aWV3LmphdmEudGhyZWFkcy5zdG9wLnZhcmlhYmxlLk1FVEhPRCxzdG9wCitjb2RlcmV2aWV3LmphdmEudGhyZWFkcy5zdXNwZW5kCitjb2RlcmV2aWV3LmphdmEudGhyZWFkcy5zdXNwZW5kLnZhcmlhYmxlLlNFVkVSSVRZLDIKK2NvZGVyZXZpZXcuamF2YS50aHJlYWRzLnN1c3BlbmQudmFyaWFibGUuQ0xBU1MsamF2YS5sYW5nLlRocmVhZAorY29kZXJldmlldy5qYXZhLnRocmVhZHMuc3VzcGVuZC52YXJpYWJsZS5NRVRIT0Qsc3VzcGVuZAorY29kZXJldmlldy5qYXZhLnRocmVhZHMueWllbGQKK2NvZGVyZXZpZXcuamF2YS50aHJlYWRzLnlpZWxkLnZhcmlhYmxlLlNFVkVSSVRZLDAKK2NvZGVyZXZpZXcuamF2YS50aHJlYWRzLnlpZWxkLnZhcmlhYmxlLkNMQVNTLGphdmEubGFuZy5UaHJlYWQKK2NvZGVyZXZpZXcuamF2YS50aHJlYWRzLnlpZWxkLnZhcmlhYmxlLk1FVEhPRCx5aWVsZAorY29kZXJldmlldy5qYXZhLnRocmVhZHMuZXh0ZW5kdGhyZWFkCitjb2RlcmV2aWV3LmphdmEudGhyZWFkcy5leHRlbmR0aHJlYWQudmFyaWFibGUuU0VWRVJJVFksMAorY29kZXJldmlldy5qYXZhLnRocmVhZHMuZXh0ZW5kdGhyZWFkLnZhcmlhYmxlLkNMQVNTLGphdmEubGFuZy5UaHJlYWQKK2NvZGVyZXZpZXcuamF2YS50aHJlYWRzLm92ZXJyaWRlc3luY2hyb25pemFibGUKK2NvZGVyZXZpZXcuamF2YS50aHJlYWRzLm92ZXJyaWRlc3luY2hyb25pemFibGUudmFyaWFibGUuU0VWRVJJVFksMgorY29kZXJldmlldy5qYXZhLnRocmVhZHMuc3luY2hyb25pemVkdGhpcworY29kZXJldmlldy5qYXZhLnRocmVhZHMuc3luY2hyb25pemVkdGhpcy52YXJpYWJsZS5TRVZFUklUWSwwCitjb2RlcmV2aWV3LmphdmEudGhyZWFkcy5ub3RpZnlhbGwKK2NvZGVyZXZpZXcuamF2YS50aHJlYWRzLm5vdGlmeWFsbC52YXJpYWJsZS5TRVZFUklUWSwwCitjb2RlcmV2aWV3LmphdmEudGhyZWFkcy53YWl0b3V0c2lkZWxvb3AKK2NvZGVyZXZpZXcuamF2YS50aHJlYWRzLndhaXRvdXRzaWRlbG9vcC52YXJpYWJsZS5TRVZFUklUWSwwCitjb2RlcmV2aWV3LmphdmEudGhyZWFkcy5zeW5jaHJvbml6ZWRtZXRob2QKK2NvZGVyZXZpZXcuamF2YS50aHJlYWRzLnN5bmNocm9uaXplZG1ldGhvZC52YXJpYWJsZS5TRVZFUklUWSwwCitjb2RlcmV2aWV3LmphdmEudGhyZWFkcy53aGlsZXNsZWVwCitjb2RlcmV2aWV3LmphdmEudGhyZWFkcy53aGlsZXNsZWVwLnZhcmlhYmxlLlNFVkVSSVRZLDAKZGlmZiAtLWdpdCBhL3JlbGVuZy9vcmcuZWNsaXBzZS5zdGVtLnJlbGVuZy9yZXNvdXJjZXMvY29kZWNsZWFudXBjb25maWd1cmF0aW9uLnhtbCBiL3JlbGVuZy9vcmcuZWNsaXBzZS5zdGVtLnJlbGVuZy9yZXNvdXJjZXMvY29kZWNsZWFudXBjb25maWd1cmF0aW9uLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNGVkNjgzCi0tLSAvZGV2L251bGwKKysrIGIvcmVsZW5nL29yZy5lY2xpcHNlLnN0ZW0ucmVsZW5nL3Jlc291cmNlcy9jb2RlY2xlYW51cGNvbmZpZ3VyYXRpb24ueG1sCkBAIC0wLDAgKzEsNTEgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8cHJvZmlsZXMgdmVyc2lvbj0iMiI+Cis8cHJvZmlsZSBraW5kPSJDbGVhblVwUHJvZmlsZSIgbmFtZT0iY2xlYW51cCIgdmVyc2lvbj0iMiI+Cis8c2V0dGluZyBpZD0iY2xlYW51cC5yZW1vdmVfdW5uZWNlc3NhcnlfbmxzX3RhZ3MiIHZhbHVlPSJ0cnVlIi8+Cis8c2V0dGluZyBpZD0iY2xlYW51cC5hbHdheXNfdXNlX3RoaXNfZm9yX25vbl9zdGF0aWNfbWV0aG9kX2FjY2VzcyIgdmFsdWU9ImZhbHNlIi8+Cis8c2V0dGluZyBpZD0iY2xlYW51cC5yZW1vdmVfdHJhaWxpbmdfd2hpdGVzcGFjZXNfaWdub3JlX2VtcHR5IiB2YWx1ZT0iZmFsc2UiLz4KKzxzZXR0aW5nIGlkPSJjbGVhbnVwLnJlbW92ZV91bm5lY2Vzc2FyeV9jYXN0cyIgdmFsdWU9InRydWUiLz4KKzxzZXR0aW5nIGlkPSJjbGVhbnVwLnVzZV90aGlzX2Zvcl9ub25fc3RhdGljX21ldGhvZF9hY2Nlc3Nfb25seV9pZl9uZWNlc3NhcnkiIHZhbHVlPSJ0cnVlIi8+Cis8c2V0dGluZyBpZD0iY2xlYW51cC5hZGRfbWlzc2luZ19kZXByZWNhdGVkX2Fubm90YXRpb25zIiB2YWx1ZT0idHJ1ZSIvPgorPHNldHRpbmcgaWQ9ImNsZWFudXAucXVhbGlmeV9zdGF0aWNfbWVtYmVyX2FjY2Vzc2VzX3Rocm91Z2hfc3VidHlwZXNfd2l0aF9kZWNsYXJpbmdfY2xhc3MiIHZhbHVlPSJ0cnVlIi8+Cis8c2V0dGluZyBpZD0iY2xlYW51cC5hZGRfZ2VuZXJhdGVkX3NlcmlhbF92ZXJzaW9uX2lkIiB2YWx1ZT0iZmFsc2UiLz4KKzxzZXR0aW5nIGlkPSJjbGVhbnVwLnVzZV90aGlzX2Zvcl9ub25fc3RhdGljX2ZpZWxkX2FjY2VzcyIgdmFsdWU9ImZhbHNlIi8+Cis8c2V0dGluZyBpZD0iY2xlYW51cC5tYWtlX2xvY2FsX3ZhcmlhYmxlX2ZpbmFsIiB2YWx1ZT0idHJ1ZSIvPgorPHNldHRpbmcgaWQ9ImNsZWFudXAuYWRkX2RlZmF1bHRfc2VyaWFsX3ZlcnNpb25faWQiIHZhbHVlPSJ0cnVlIi8+Cis8c2V0dGluZyBpZD0iY2xlYW51cC5yZW1vdmVfdHJhaWxpbmdfd2hpdGVzcGFjZXNfYWxsIiB2YWx1ZT0idHJ1ZSIvPgorPHNldHRpbmcgaWQ9ImNsZWFudXAucmVtb3ZlX3VudXNlZF9wcml2YXRlX3R5cGVzIiB2YWx1ZT0idHJ1ZSIvPgorPHNldHRpbmcgaWQ9ImNsZWFudXAuYWRkX3NlcmlhbF92ZXJzaW9uX2lkIiB2YWx1ZT0iZmFsc2UiLz4KKzxzZXR0aW5nIGlkPSJjbGVhbnVwLmFsd2F5c191c2VfcGFyZW50aGVzZXNfaW5fZXhwcmVzc2lvbnMiIHZhbHVlPSJ0cnVlIi8+Cis8c2V0dGluZyBpZD0iY2xlYW51cC5hbHdheXNfdXNlX2Jsb2NrcyIgdmFsdWU9InRydWUiLz4KKzxzZXR0aW5nIGlkPSJjbGVhbnVwLnNvcnRfbWVtYmVyc19hbGwiIHZhbHVlPSJmYWxzZSIvPgorPHNldHRpbmcgaWQ9ImNsZWFudXAuYWRkX21pc3NpbmdfYW5ub3RhdGlvbnMiIHZhbHVlPSJ0cnVlIi8+Cis8c2V0dGluZyBpZD0iY2xlYW51cC51c2VfYmxvY2tzX29ubHlfZm9yX3JldHVybl9hbmRfdGhyb3ciIHZhbHVlPSJmYWxzZSIvPgorPHNldHRpbmcgaWQ9ImNsZWFudXAucXVhbGlmeV9zdGF0aWNfbWVtYmVyX2FjY2Vzc2VzX3Rocm91Z2hfaW5zdGFuY2VzX3dpdGhfZGVjbGFyaW5nX2NsYXNzIiB2YWx1ZT0idHJ1ZSIvPgorPHNldHRpbmcgaWQ9ImNsZWFudXAucmVtb3ZlX3VudXNlZF9wcml2YXRlX21ldGhvZHMiIHZhbHVlPSJ0cnVlIi8+Cis8c2V0dGluZyBpZD0iY2xlYW51cC5vcmdhbml6ZV9pbXBvcnRzIiB2YWx1ZT0idHJ1ZSIvPgorPHNldHRpbmcgaWQ9ImNsZWFudXAubmV2ZXJfdXNlX3BhcmVudGhlc2VzX2luX2V4cHJlc3Npb25zIiB2YWx1ZT0iZmFsc2UiLz4KKzxzZXR0aW5nIGlkPSJjbGVhbnVwLm5ldmVyX3VzZV9ibG9ja3MiIHZhbHVlPSJmYWxzZSIvPgorPHNldHRpbmcgaWQ9ImNsZWFudXAucXVhbGlmeV9zdGF0aWNfZmllbGRfYWNjZXNzZXNfd2l0aF9kZWNsYXJpbmdfY2xhc3MiIHZhbHVlPSJmYWxzZSIvPgorPHNldHRpbmcgaWQ9ImNsZWFudXAudXNlX3RoaXNfZm9yX25vbl9zdGF0aWNfbWV0aG9kX2FjY2VzcyIgdmFsdWU9ImZhbHNlIi8+Cis8c2V0dGluZyBpZD0iY2xlYW51cC5yZW1vdmVfdW51c2VkX2ltcG9ydHMiIHZhbHVlPSJ0cnVlIi8+Cis8c2V0dGluZyBpZD0iY2xlYW51cC5jb252ZXJ0X3RvX2VuaGFuY2VkX2Zvcl9sb29wIiB2YWx1ZT0idHJ1ZSIvPgorPHNldHRpbmcgaWQ9ImNsZWFudXAudXNlX3RoaXNfZm9yX25vbl9zdGF0aWNfZmllbGRfYWNjZXNzX29ubHlfaWZfbmVjZXNzYXJ5IiB2YWx1ZT0idHJ1ZSIvPgorPHNldHRpbmcgaWQ9ImNsZWFudXAubWFrZV9wcml2YXRlX2ZpZWxkc19maW5hbCIgdmFsdWU9InRydWUiLz4KKzxzZXR0aW5nIGlkPSJjbGVhbnVwLmZvcm1hdF9zb3VyY2VfY29kZSIgdmFsdWU9InRydWUiLz4KKzxzZXR0aW5nIGlkPSJjbGVhbnVwLmFkZF9taXNzaW5nX292ZXJyaWRlX2Fubm90YXRpb25zIiB2YWx1ZT0idHJ1ZSIvPgorPHNldHRpbmcgaWQ9ImNsZWFudXAuYWx3YXlzX3VzZV90aGlzX2Zvcl9ub25fc3RhdGljX2ZpZWxkX2FjY2VzcyIgdmFsdWU9ImZhbHNlIi8+Cis8c2V0dGluZyBpZD0iY2xlYW51cC5yZW1vdmVfdW51c2VkX3ByaXZhdGVfZmllbGRzIiB2YWx1ZT0idHJ1ZSIvPgorPHNldHRpbmcgaWQ9ImNsZWFudXAubWFrZV92YXJpYWJsZV9kZWNsYXJhdGlvbnNfZmluYWwiIHZhbHVlPSJ0cnVlIi8+Cis8c2V0dGluZyBpZD0iY2xlYW51cC5xdWFsaWZ5X3N0YXRpY19tZXRob2RfYWNjZXNzZXNfd2l0aF9kZWNsYXJpbmdfY2xhc3MiIHZhbHVlPSJmYWxzZSIvPgorPHNldHRpbmcgaWQ9ImNsZWFudXAucmVtb3ZlX3VudXNlZF9sb2NhbF92YXJpYWJsZXMiIHZhbHVlPSJ0cnVlIi8+Cis8c2V0dGluZyBpZD0iY2xlYW51cC5tYWtlX3BhcmFtZXRlcnNfZmluYWwiIHZhbHVlPSJ0cnVlIi8+Cis8c2V0dGluZyBpZD0iY2xlYW51cC51c2VfcGFyZW50aGVzZXNfaW5fZXhwcmVzc2lvbnMiIHZhbHVlPSJmYWxzZSIvPgorPHNldHRpbmcgaWQ9ImNsZWFudXAudXNlX2Jsb2NrcyIgdmFsdWU9InRydWUiLz4KKzxzZXR0aW5nIGlkPSJjbGVhbnVwLnJlbW92ZV9wcml2YXRlX2NvbnN0cnVjdG9ycyIgdmFsdWU9InRydWUiLz4KKzxzZXR0aW5nIGlkPSJjbGVhbnVwLnJlbW92ZV91bnVzZWRfcHJpdmF0ZV9tZW1iZXJzIiB2YWx1ZT0idHJ1ZSIvPgorPHNldHRpbmcgaWQ9ImNsZWFudXAucXVhbGlmeV9zdGF0aWNfbWVtYmVyX2FjY2Vzc2VzX3dpdGhfZGVjbGFyaW5nX2NsYXNzIiB2YWx1ZT0idHJ1ZSIvPgorPHNldHRpbmcgaWQ9ImNsZWFudXAuYWRkX21pc3NpbmdfbmxzX3RhZ3MiIHZhbHVlPSJmYWxzZSIvPgorPHNldHRpbmcgaWQ9ImNsZWFudXAucmVtb3ZlX3RyYWlsaW5nX3doaXRlc3BhY2VzIiB2YWx1ZT0idHJ1ZSIvPgorPHNldHRpbmcgaWQ9ImNsZWFudXAuc29ydF9tZW1iZXJzIiB2YWx1ZT0iZmFsc2UiLz4KKzwvcHJvZmlsZT4KKzwvcHJvZmlsZXM+CmRpZmYgLS1naXQgYS9yZWxlbmcvb3JnLmVjbGlwc2Uuc3RlbS5yZWxlbmcvcmVzb3VyY2VzL3dvcmtzcGFjZS8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMvLnJvb3QvLmluZGV4ZXMvaGlzdG9yeS52ZXJzaW9uIGIvcmVsZW5nL29yZy5lY2xpcHNlLnN0ZW0ucmVsZW5nL3Jlc291cmNlcy93b3Jrc3BhY2UvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLy5yb290Ly5pbmRleGVzL2hpc3RvcnkudmVyc2lvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNWNiOTU1Ci0tLSAvZGV2L251bGwKKysrIGIvcmVsZW5nL29yZy5lY2xpcHNlLnN0ZW0ucmVsZW5nL3Jlc291cmNlcy93b3Jrc3BhY2UvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLy5yb290Ly5pbmRleGVzL2hpc3RvcnkudmVyc2lvbgpAQCAtMCwwICsxIEBACisCClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvcmVsZW5nL29yZy5lY2xpcHNlLnN0ZW0ucmVsZW5nL3Jlc291cmNlcy93b3Jrc3BhY2UvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLy5yb290Ly5pbmRleGVzL3Byb3BlcnRpZXMudmVyc2lvbiBiL3JlbGVuZy9vcmcuZWNsaXBzZS5zdGVtLnJlbGVuZy9yZXNvdXJjZXMvd29ya3NwYWNlLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy8ucm9vdC8uaW5kZXhlcy9wcm9wZXJ0aWVzLnZlcnNpb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmIyYWFhNwotLS0gL2Rldi9udWxsCisrKyBiL3JlbGVuZy9vcmcuZWNsaXBzZS5zdGVtLnJlbGVuZy9yZXNvdXJjZXMvd29ya3NwYWNlLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy8ucm9vdC8uaW5kZXhlcy9wcm9wZXJ0aWVzLnZlcnNpb24KQEAgLTAsMCArMSBAQAorAQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3JlbGVuZy9vcmcuZWNsaXBzZS5zdGVtLnJlbGVuZy9yZXNvdXJjZXMvd29ya3NwYWNlLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy8ucm9vdC8yLnRyZWUgYi9yZWxlbmcvb3JnLmVjbGlwc2Uuc3RlbS5yZWxlbmcvcmVzb3VyY2VzL3dvcmtzcGFjZS8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMvLnJvb3QvMi50cmVlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAzYTRkYWQKLS0tIC9kZXYvbnVsbAorKysgYi9yZWxlbmcvb3JnLmVjbGlwc2Uuc3RlbS5yZWxlbmcvcmVzb3VyY2VzL3dvcmtzcGFjZS8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMvLnJvb3QvMi50cmVlCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3JlbGVuZy9vcmcuZWNsaXBzZS5zdGVtLnJlbGVuZy9yZXNvdXJjZXMvd29ya3NwYWNlLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy8uc2FmZXRhYmxlL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzIGIvcmVsZW5nL29yZy5lY2xpcHNlLnN0ZW0ucmVsZW5nL3Jlc291cmNlcy93b3Jrc3BhY2UvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLy5zYWZldGFibGUvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODMyZmI1MQotLS0gL2Rldi9udWxsCisrKyBiL3JlbGVuZy9vcmcuZWNsaXBzZS5zdGVtLnJlbGVuZy9yZXNvdXJjZXMvd29ya3NwYWNlLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy8uc2FmZXRhYmxlL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3JlbGVuZy9vcmcuZWNsaXBzZS5zdGVtLnJlbGVuZy9yZXNvdXJjZXMvd29ya3NwYWNlLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMvQ1NWTG9nZ2VyX1ByZWZlcmVuY2VzLnR4dCBiL3JlbGVuZy9vcmcuZWNsaXBzZS5zdGVtLnJlbGVuZy9yZXNvdXJjZXMvd29ya3NwYWNlLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMvQ1NWTG9nZ2VyX1ByZWZlcmVuY2VzLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNWI0ZTFmCi0tLSAvZGV2L251bGwKKysrIGIvcmVsZW5nL29yZy5lY2xpcHNlLnN0ZW0ucmVsZW5nL3Jlc291cmNlcy93b3Jrc3BhY2UvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy9DU1ZMb2dnZXJfUHJlZmVyZW5jZXMudHh0CkBAIC0wLDAgKzEsMyBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4NCis8c2VjdGlvbiBuYW1lPSJyb290Ij4NCis8L3NlY3Rpb24+DQpkaWZmIC0tZ2l0IGEvcmVsZW5nL29yZy5lY2xpcHNlLnN0ZW0ucmVsZW5nL3Jlc291cmNlcy93b3Jrc3BhY2UvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLnN0ZW0udWkucmVwb3J0cy9QaGFzZVNwYWNlX1ByZWZlcmVuY2VzLnR4dCBiL3JlbGVuZy9vcmcuZWNsaXBzZS5zdGVtLnJlbGVuZy9yZXNvdXJjZXMvd29ya3NwYWNlLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5zdGVtLnVpLnJlcG9ydHMvUGhhc2VTcGFjZV9QcmVmZXJlbmNlcy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGY5MGE3OQotLS0gL2Rldi9udWxsCisrKyBiL3JlbGVuZy9vcmcuZWNsaXBzZS5zdGVtLnJlbGVuZy9yZXNvdXJjZXMvd29ya3NwYWNlLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5zdGVtLnVpLnJlcG9ydHMvUGhhc2VTcGFjZV9QcmVmZXJlbmNlcy50eHQKQEAgLTAsMCArMSw4IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/Pg0KKzxzZWN0aW9uIG5hbWU9InJvb3QiPg0KKwk8c2VjdGlvbiBuYW1lPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5kaXNlYXNlbW9kZWxzLnNjZW5hcmlvcy9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L1VTQS9VU0FfMV8yX2Rpc2Vhc2VfSW5mbHVlbnphLnNjZW5hcmlvIj4NCisJCTxsaXN0IGtleT0ibG9jYXRpb24uaWRzIj4NCisJCQk8aXRlbSB2YWx1ZT0ic3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vbm9kZS9nZW8vcmVnaW9uL1VTLU5ZLTM2MDgxIi8+DQorCQk8L2xpc3Q+DQorCTwvc2VjdGlvbj4NCis8L3NlY3Rpb24+DQpkaWZmIC0tZ2l0IGEvcmVsZW5nL29yZy5lY2xpcHNlLnN0ZW0ucmVsZW5nL3Jlc291cmNlcy93b3Jrc3BhY2UvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLnN0ZW0udWkucmVwb3J0cy9UaW1lU2VyaWVzX1ByZWZlcmVuY2VzLnR4dCBiL3JlbGVuZy9vcmcuZWNsaXBzZS5zdGVtLnJlbGVuZy9yZXNvdXJjZXMvd29ya3NwYWNlLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5zdGVtLnVpLnJlcG9ydHMvVGltZVNlcmllc19QcmVmZXJlbmNlcy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGY5MGE3OQotLS0gL2Rldi9udWxsCisrKyBiL3JlbGVuZy9vcmcuZWNsaXBzZS5zdGVtLnJlbGVuZy9yZXNvdXJjZXMvd29ya3NwYWNlLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5zdGVtLnVpLnJlcG9ydHMvVGltZVNlcmllc19QcmVmZXJlbmNlcy50eHQKQEAgLTAsMCArMSw4IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/Pg0KKzxzZWN0aW9uIG5hbWU9InJvb3QiPg0KKwk8c2VjdGlvbiBuYW1lPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5kaXNlYXNlbW9kZWxzLnNjZW5hcmlvcy9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L1VTQS9VU0FfMV8yX2Rpc2Vhc2VfSW5mbHVlbnphLnNjZW5hcmlvIj4NCisJCTxsaXN0IGtleT0ibG9jYXRpb24uaWRzIj4NCisJCQk8aXRlbSB2YWx1ZT0ic3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vbm9kZS9nZW8vcmVnaW9uL1VTLU5ZLTM2MDgxIi8+DQorCQk8L2xpc3Q+DQorCTwvc2VjdGlvbj4NCis8L3NlY3Rpb24+DQpkaWZmIC0tZ2l0IGEvcmVsZW5nL29yZy5lY2xpcHNlLnN0ZW0ucmVsZW5nL3Jlc291cmNlcy93b3Jrc3BhY2UvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLnVpLndvcmtiZW5jaC9kaWFsb2dfc2V0dGluZ3MueG1sIGIvcmVsZW5nL29yZy5lY2xpcHNlLnN0ZW0ucmVsZW5nL3Jlc291cmNlcy93b3Jrc3BhY2UvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLnVpLndvcmtiZW5jaC9kaWFsb2dfc2V0dGluZ3MueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFkNDM1NTgKLS0tIC9kZXYvbnVsbAorKysgYi9yZWxlbmcvb3JnLmVjbGlwc2Uuc3RlbS5yZWxlbmcvcmVzb3VyY2VzL3dvcmtzcGFjZS8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UudWkud29ya2JlbmNoL2RpYWxvZ19zZXR0aW5ncy54bWwKQEAgLTAsMCArMSwxOCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4NCis8c2VjdGlvbiBuYW1lPSJXb3JrYmVuY2giPg0KKwk8c2VjdGlvbiBuYW1lPSJXb3JrYmVuY2hQcmVmZXJlbmNlRGlhbG9nU2V0dGluZ3MiPg0KKwkJPGl0ZW0gdmFsdWU9IjgzIiBrZXk9IkRJQUxPR19ZX09SSUdJTiIvPg0KKwkJPGl0ZW0gdmFsdWU9IjQ4OSIga2V5PSJESUFMT0dfWF9PUklHSU4iLz4NCisJPC9zZWN0aW9uPg0KKwk8c2VjdGlvbiBuYW1lPSJTaG93Vmlld0RpYWxvZyI+DQorCQk8aXRlbSB2YWx1ZT0iNDAzIiBrZXk9IkRJQUxPR19XSURUSCIvPg0KKwkJPGl0ZW0gdmFsdWU9Im9yZy5lY2xpcHNlLnN0ZW0udXRpbC5sb2dnZXJzIiBrZXk9IlNob3dWaWV3RGlhbG9nLlNUT1JFX1NFTEVDVEVEX1ZJRVdfSUQiLz4NCisJCTxpdGVtIHZhbHVlPSIxNTQiIGtleT0iRElBTE9HX1lfT1JJR0lOIi8+DQorCQk8aXRlbSB2YWx1ZT0iNjAzIiBrZXk9IkRJQUxPR19YX09SSUdJTiIvPg0KKwkJPGl0ZW0gdmFsdWU9IjQ3MCIga2V5PSJESUFMT0dfSEVJR0hUIi8+DQorCQk8aXRlbSB2YWx1ZT0iMXxUYWhvbWF8MTIuMHwwfFdJTkRPV1N8MXwtMTZ8MHwwfDB8NDAwfDB8MHwwfDF8MHwwfDB8MHxUYWhvbWEiIGtleT0iRElBTE9HX0ZPTlRfTkFNRSIvPg0KKwkJPGxpc3Qga2V5PSJTaG93Vmlld0RpYWxvZy5TVE9SRV9FWFBBTkRFRF9DQVRFR09SSUVTX0lEIj4NCisJCQk8aXRlbSB2YWx1ZT0ib3JnLmVjbGlwc2Uuc3RlbS51aS52aWV3cyIvPg0KKwkJPC9saXN0Pg0KKwk8L3NlY3Rpb24+DQorPC9zZWN0aW9uPg0KZGlmZiAtLWdpdCBhL3JlbGVuZy9vcmcuZWNsaXBzZS5zdGVtLnJlbGVuZy9yZXNvdXJjZXMvd29ya3NwYWNlLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS51aS53b3JrYmVuY2gvd29ya2JlbmNoLnhtbCBiL3JlbGVuZy9vcmcuZWNsaXBzZS5zdGVtLnJlbGVuZy9yZXNvdXJjZXMvd29ya3NwYWNlLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS51aS53b3JrYmVuY2gvd29ya2JlbmNoLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NDBkYWE4Ci0tLSAvZGV2L251bGwKKysrIGIvcmVsZW5nL29yZy5lY2xpcHNlLnN0ZW0ucmVsZW5nL3Jlc291cmNlcy93b3Jrc3BhY2UvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLnVpLndvcmtiZW5jaC93b3JrYmVuY2gueG1sCkBAIC0wLDAgKzEsMjk1IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/Pg0KKzx3b3JrYmVuY2ggcHJvZ3Jlc3NDb3VudD0iMTEiIHZlcnNpb249IjIuMCI+DQorPHdvcmtiZW5jaEFkdmlzb3IvPg0KKzx3aW5kb3cgaGVpZ2h0PSI5MzQiIG1heGltaXplZD0idHJ1ZSIgd2lkdGg9IjEyOTIiIHg9IjIyIiB5PSIzOSI+DQorPGZhc3RWaWV3RGF0YSBmYXN0Vmlld0xvY2F0aW9uPSIxMDI0Ii8+DQorPHBlcnNwZWN0aXZlQmFyPg0KKzxpdGVtU2l6ZSB4PSIxNjAiLz4NCis8L3BlcnNwZWN0aXZlQmFyPg0KKzxjb29sYmFyTGF5b3V0IGxvY2tlZD0iMCI+DQorPGNvb2xJdGVtIGlkPSJvcmcuZWNsaXBzZS5zdGVtLnVpLnRvb2xiYXIubmV3d2l6YXJkcyIgaXRlbVR5cGU9InR5cGVUb29sQmFyQ29udHJpYnV0aW9uIiB4PSIyNjkiIHk9IjIyIi8+DQorPGNvb2xJdGVtIGlkPSJvcmcuZWNsaXBzZS5zdGVtLnVpLnRvb2xiYXIiIGl0ZW1UeXBlPSJ0eXBlVG9vbEJhckNvbnRyaWJ1dGlvbiIgeD0iMTMxIiB5PSIyMiIvPg0KKzwvY29vbGJhckxheW91dD4NCis8cGFnZSBmb2N1cz0idHJ1ZSIgbGFiZWw9IldvcmtzcGFjZSAtIFNpbXVsYXRpb24iPg0KKzxlZGl0b3JzPg0KKzxlZGl0b3JBcmVhIGFjdGl2ZVdvcmtib29rPSJEZWZhdWx0RWRpdG9yV29ya2Jvb2siPg0KKzxpbmZvIHBhcnQ9IkRlZmF1bHRFZGl0b3JXb3JrYm9vayI+DQorPGZvbGRlciBhcHBlYXJhbmNlPSIxIiBleHBhbmRlZD0iMiI+DQorPHByZXNlbnRhdGlvbiBpZD0ib3JnLmVjbGlwc2UudWkucHJlc2VudGF0aW9ucy5Xb3JrYmVuY2hQcmVzZW50YXRpb25GYWN0b3J5Ii8+DQorPC9mb2xkZXI+DQorPC9pbmZvPg0KKzwvZWRpdG9yQXJlYT4NCis8L2VkaXRvcnM+DQorPHZpZXdzPg0KKzx2aWV3IGlkPSJvcmcuZWNsaXBzZS5zdGVtLnVpLnZpZXdzLnNlcXVlbmNlcnMiIHBhcnROYW1lPSJTZXF1ZW5jZXJzIi8+DQorPHZpZXcgaWQ9Im9yZy5lY2xpcHNlLnN0ZW0udWkudmlld3MuZ3JhcGhzIiBwYXJ0TmFtZT0iR3JhcGhzIi8+DQorPHZpZXcgaWQ9Im9yZy5lY2xpcHNlLnN0ZW0udWkudmlld3MucHJlZGljYXRlcyIgcGFydE5hbWU9IlByZWRpY2F0ZXMiLz4NCis8dmlldyBpZD0ib3JnLmVjbGlwc2Uuc3RlbS51dGlsLmFuYWx5c2lzLnZpZXdzLmx5YXB1bm92IiBwYXJ0TmFtZT0iTHlhcHVub3YiLz4NCis8dmlldyBpZD0ib3JnLmVjbGlwc2Uuc3RlbS51aS52aWV3cy5yZXBvcnRzLnBoYXNlU3BhY2UiIHBhcnROYW1lPSJQaGFzZSBTcGFjZSI+DQorPHZpZXdTdGF0ZS8+DQorPC92aWV3Pg0KKzx2aWV3IGlkPSJvcmcuZWNsaXBzZS5wZGUucnVudGltZS5Mb2dWaWV3IiBwYXJ0TmFtZT0iRXJyb3IgTG9nIj4NCis8dmlld1N0YXRlIGFjdGl2YXRlPSJ0cnVlIiBhbGxTZXNzaW9ucz0idHJ1ZSIgY29sdW1uMj0iNDQ4IiBjb2x1bW4zPSIxNTAiIGNvbHVtbjQ9IjE1MCIgZXJyb3I9InRydWUiIGdyb3VwQnk9IjAiIGluZm89InRydWUiIGxpbWl0PSI1MCIgb2s9InRydWUiIG9yZGVyVHlwZT0iMiIgb3JkZXJWYWx1ZT0iLTEiIHNob3dfZmlsdGVyX3RleHQ9InRydWUiIHVzZUxpbWl0PSJ0cnVlIiB3YXJuaW5nPSJ0cnVlIi8+DQorPC92aWV3Pg0KKzx2aWV3IGlkPSJvcmcuZWNsaXBzZS51aS52aWV3cy5UYXNrTGlzdCIgcGFydE5hbWU9IlRhc2tzIi8+DQorPHZpZXcgaWQ9Im9yZy5lY2xpcHNlLnN0ZW0udWkudmlld3Muc2ltdWxhdGlvbmNvbnRyb2x2aWV3IiBwYXJ0TmFtZT0iU2ltdWxhdGlvbiBDb250cm9sIj4NCis8dmlld1N0YXRlLz4NCis8L3ZpZXc+DQorPHZpZXcgaWQ9Im9yZy5lY2xpcHNlLnVpLnZpZXdzLkNvbnRlbnRPdXRsaW5lIiBwYXJ0TmFtZT0iT3V0bGluZSI+DQorPHZpZXdTdGF0ZS8+DQorPC92aWV3Pg0KKzx2aWV3IGlkPSJvcmcuZWNsaXBzZS51aS5uYXZpZ2F0b3IuUHJvamVjdEV4cGxvcmVyIiBwYXJ0TmFtZT0iUHJvamVjdCBFeHBsb3JlciI+DQorPHZpZXdTdGF0ZSBDb21tb25OYXZpZ2F0b3IuTElOS0lOR19FTkFCTEVEPSIwIiBvcmcuZWNsaXBzZS51aS5uYXZpZ2F0b3IucmVzb3VyY2VzLndvcmtpbmdTZXRzLnNob3dUb3BMZXZlbFdvcmtpbmdTZXRzPSIwIi8+DQorPC92aWV3Pg0KKzx2aWV3IGlkPSJvcmcuZWNsaXBzZS5zdGVtLnV0aWwuYW5hbHlzaXMudmlld3MuYWdncmVnYXRlIiBwYXJ0TmFtZT0iRXBpZGVtaWMiLz4NCis8dmlldyBpZD0ib3JnLmVjbGlwc2Uuc3RlbS51aS52aWV3cy5tb2RlbHMiIHBhcnROYW1lPSJNb2RlbHMiLz4NCis8dmlldyBpZD0ib3JnLmVjbGlwc2Uuc3RlbS51aS52aWV3cy5kZWNvcmF0b3JzIiBwYXJ0TmFtZT0iRGVjb3JhdG9ycyIvPg0KKzx2aWV3IGlkPSJvcmcuZWNsaXBzZS51aS52aWV3cy5Qcm9wZXJ0eVNoZWV0IiBwYXJ0TmFtZT0iUHJvcGVydGllcyIvPg0KKzx2aWV3IGlkPSJvcmcuZWNsaXBzZS5zdGVtLnV0aWwubG9nZ2VycyIgcGFydE5hbWU9IkNTViBMb2dnZXIiPg0KKzx2aWV3U3RhdGUvPg0KKzwvdmlldz4NCis8dmlldyBpZD0ib3JnLmVjbGlwc2Uuc3RlbS51aS52aWV3cy5kaXNlYXNlcyIgcGFydE5hbWU9IkRpc2Vhc2VzIi8+DQorPHZpZXcgaWQ9Im9yZy5lY2xpcHNlLnN0ZW0udXRpbC5hbmFseXNpcy52aWV3cy5wcm9jZXNzb3IiIHBhcnROYW1lPSJQcm9jZXNzb3IiPg0KKzx2aWV3U3RhdGUvPg0KKzwvdmlldz4NCis8dmlldyBpZD0ib3JnLmVjbGlwc2Uuc3RlbS51aS52aWV3cy5zY2VuYXJpb3MiIHBhcnROYW1lPSJTY2VuYXJpb3MiPg0KKzx2aWV3U3RhdGUvPg0KKzwvdmlldz4NCis8dmlldyBpZD0ib3JnLmVjbGlwc2Uuc3RlbS51dGlsLmFuYWx5c2lzLnZpZXdzLmVzdGltYXRvciIgcGFydE5hbWU9IkVzdGltYXRvciIvPg0KKzx2aWV3IGlkPSJvcmcuZWNsaXBzZS5zdGVtLnV0aWwuYW5hbHlzaXMudmlld3MuY29tcGFyaXNvbiIgcGFydE5hbWU9IlNjZW5hcmlvQ29tcGFyaXNvbiIvPg0KKzx2aWV3IGlkPSJvcmcuZWNsaXBzZS5zdGVtLnVpLnZpZXdzLnRyaWdnZXJzIiBwYXJ0TmFtZT0iVHJpZ2dlcnMiLz4NCis8dmlldyBpZD0ib3JnLmVjbGlwc2Uuc3RlbS51aS52aWV3cy5nZW9ncmFwaGljLm1hcCIgcGFydE5hbWU9Ik1hcCI+DQorPHZpZXdTdGF0ZS8+DQorPC92aWV3Pg0KKzx2aWV3IGlkPSJvcmcuZWNsaXBzZS5zdGVtLnVpLnZpZXdzLnJlcG9ydHMiIHBhcnROYW1lPSJUaW1lIFNlcmllcyI+DQorPHZpZXdTdGF0ZS8+DQorPC92aWV3Pg0KKzwvdmlld3M+DQorPHBlcnNwZWN0aXZlcyBhY3RpdmVQYXJ0PSJvcmcuZWNsaXBzZS5zdGVtLnVpLnZpZXdzLnNjZW5hcmlvcyIgYWN0aXZlUGVyc3BlY3RpdmU9Im9yZy5lY2xpcHNlLnN0ZW0udWkuU1RFTVNpbXVsYXRpb25QZXJzcGVjdGl2ZSI+DQorPHBlcnNwZWN0aXZlIGVkaXRvckFyZWFUcmltU3RhdGU9IjIiIGVkaXRvckFyZWFWaXNpYmxlPSIwIiBmaXhlZD0iMCIgdmVyc2lvbj0iMC4wMTYiPg0KKzxkZXNjcmlwdG9yIGNsYXNzPSJvcmcuZWNsaXBzZS5zdGVtLnV0aWwuYW5hbHlzaXMucGVyc3BlY3RpdmVzLkFuYWx5c2lzIiBpZD0ib3JnLmVjbGlwc2Uuc3RlbS51dGlsLmFuYWx5c2lzLnBlcnNwZWN0aXZlcy5TVEVNQW5hbHlzaXNQZXJzcGVjdGl2ZSIgbGFiZWw9IkFuYWx5c2lzIi8+DQorPGFsd2F5c09uQWN0aW9uU2V0IGlkPSJvcmcuZWNsaXBzZS51aS5hY3Rpb25TZXQua2V5QmluZGluZ3MiLz4NCis8YWx3YXlzT25BY3Rpb25TZXQgaWQ9Im9yZy5lY2xpcHNlLnVpLmFjdGlvblNldC5vcGVuRmlsZXMiLz4NCis8c2hvd192aWV3X2FjdGlvbiBpZD0ib3JnLmVjbGlwc2Uuc3RlbS51dGlsLmFuYWx5c2lzLnZpZXdzLnByb2Nlc3NvciIvPg0KKzxzaG93X3ZpZXdfYWN0aW9uIGlkPSJvcmcuZWNsaXBzZS5zdGVtLnV0aWwuYW5hbHlzaXMudmlld3MuZXN0aW1hdG9yIi8+DQorPHNob3dfdmlld19hY3Rpb24gaWQ9Im9yZy5lY2xpcHNlLnN0ZW0udXRpbC5hbmFseXNpcy52aWV3cy5jb21wYXJpc29uIi8+DQorPHNob3dfdmlld19hY3Rpb24gaWQ9Im9yZy5lY2xpcHNlLnN0ZW0udXRpbC5hbmFseXNpcy52aWV3cy5seWFwdW5vdiIvPg0KKzxzaG93X3ZpZXdfYWN0aW9uIGlkPSJvcmcuZWNsaXBzZS5zdGVtLnV0aWwuYW5hbHlzaXMudmlld3MuYWdncmVnYXRlIi8+DQorPHBlcnNwZWN0aXZlX2FjdGlvbiBpZD0ib3JnLmVjbGlwc2Uuc3RlbS51dGlsLmFuYWx5c2lzLnBlcnNwZWN0aXZlcy5TVEVNQW5hbHlzaXNQZXJzcGVjdGl2ZSIvPg0KKzx2aWV3IGlkPSJvcmcuZWNsaXBzZS5zdGVtLnV0aWwuYW5hbHlzaXMudmlld3MucHJvY2Vzc29yIi8+DQorPHZpZXcgaWQ9Im9yZy5lY2xpcHNlLnN0ZW0udXRpbC5hbmFseXNpcy52aWV3cy5lc3RpbWF0b3IiLz4NCis8dmlldyBpZD0ib3JnLmVjbGlwc2Uuc3RlbS51dGlsLmFuYWx5c2lzLnZpZXdzLmNvbXBhcmlzb24iLz4NCis8dmlldyBpZD0ib3JnLmVjbGlwc2Uuc3RlbS51dGlsLmFuYWx5c2lzLnZpZXdzLmx5YXB1bm92Ii8+DQorPHZpZXcgaWQ9Im9yZy5lY2xpcHNlLnN0ZW0udXRpbC5hbmFseXNpcy52aWV3cy5hZ2dyZWdhdGUiLz4NCis8ZmFzdFZpZXdCYXJzLz4NCis8bGF5b3V0Pg0KKzxtYWluV2luZG93Pg0KKzxpbmZvIGZvbGRlcj0idHJ1ZSIgcGFydD0idG9wIj4NCis8Zm9sZGVyIGFjdGl2ZVBhZ2VJRD0ib3JnLmVjbGlwc2Uuc3RlbS51dGlsLmFuYWx5c2lzLnZpZXdzLnByb2Nlc3NvciIgYXBwZWFyYW5jZT0iMiIgZXhwYW5kZWQ9IjIiPg0KKzxwYWdlIGNvbnRlbnQ9Im9yZy5lY2xpcHNlLnN0ZW0udXRpbC5hbmFseXNpcy52aWV3cy5wcm9jZXNzb3IiIGxhYmVsPSJQcm9jZXNzb3IiLz4NCis8cGFnZSBjb250ZW50PSJvcmcuZWNsaXBzZS5zdGVtLnV0aWwuYW5hbHlzaXMudmlld3MuZXN0aW1hdG9yIiBsYWJlbD0iRXN0aW1hdG9yIi8+DQorPHBhZ2UgY29udGVudD0ib3JnLmVjbGlwc2Uuc3RlbS51dGlsLmFuYWx5c2lzLnZpZXdzLmNvbXBhcmlzb24iIGxhYmVsPSJTY2VuYXJpb0NvbXBhcmlzb24iLz4NCis8cGFnZSBjb250ZW50PSJvcmcuZWNsaXBzZS5zdGVtLnV0aWwuYW5hbHlzaXMudmlld3MubHlhcHVub3YiIGxhYmVsPSJMeWFwdW5vdiIvPg0KKzxwYWdlIGNvbnRlbnQ9Im9yZy5lY2xpcHNlLnN0ZW0udXRpbC5hbmFseXNpcy52aWV3cy5hZ2dyZWdhdGUiIGxhYmVsPSJFcGlkZW1pYyIvPg0KKzxwcmVzZW50YXRpb24gaWQ9Im9yZy5lY2xpcHNlLnVpLnByZXNlbnRhdGlvbnMuV29ya2JlbmNoUHJlc2VudGF0aW9uRmFjdG9yeSI+DQorPHBhcnQgaWQ9IjAiLz4NCis8cGFydCBpZD0iMSIvPg0KKzxwYXJ0IGlkPSIyIi8+DQorPHBhcnQgaWQ9IjMiLz4NCis8cGFydCBpZD0iNCIvPg0KKzwvcHJlc2VudGF0aW9uPg0KKzwvZm9sZGVyPg0KKzwvaW5mbz4NCis8aW5mbyBmb2xkZXI9InRydWUiIHBhcnQ9InN0aWNreUZvbGRlclJpZ2h0IiByYXRpbz0iMC43NSIgcmF0aW9MZWZ0PSI3NTYiIHJhdGlvUmlnaHQ9IjI1MiIgcmVsYXRpb25zaGlwPSIyIiByZWxhdGl2ZT0idG9wIj4NCis8Zm9sZGVyIGFwcGVhcmFuY2U9IjIiIGV4cGFuZGVkPSIyIj4NCis8cGFnZSBjb250ZW50PSJvcmcuZWNsaXBzZS5oZWxwLnVpLkhlbHBWaWV3IiBsYWJlbD0iTGFiZWxOb3RGb3VuZCIvPg0KKzxwYWdlIGNvbnRlbnQ9Im9yZy5lY2xpcHNlLnVpLmludGVybmFsLmludHJvdmlldyIgbGFiZWw9IkxhYmVsTm90Rm91bmQiLz4NCis8L2ZvbGRlcj4NCis8L2luZm8+DQorPGluZm8gcGFydD0ib3JnLmVjbGlwc2UudWkuZWRpdG9yc3MiIHJhdGlvPSIwLjk0OTgzODE2IiByYXRpb0xlZnQ9IjU4NyIgcmF0aW9SaWdodD0iMzEiIHJlbGF0aW9uc2hpcD0iNCIgcmVsYXRpdmU9InRvcCIvPg0KKzwvbWFpbldpbmRvdz4NCis8L2xheW91dD4NCis8L3BlcnNwZWN0aXZlPg0KKzxwZXJzcGVjdGl2ZSBlZGl0b3JBcmVhVHJpbVN0YXRlPSIyIiBlZGl0b3JBcmVhVmlzaWJsZT0iMSIgZml4ZWQ9IjAiIHZlcnNpb249IjAuMDE2Ij4NCis8ZGVzY3JpcHRvciBjbGFzcz0ib3JnLmVjbGlwc2Uuc3RlbS51aS5wZXJzcGVjdGl2ZXMuRGVzaWduZXIiIGlkPSJvcmcuZWNsaXBzZS5zdGVtLnVpLlNURU1EZXNpZ25lclBlcnNwZWN0aXZlIiBsYWJlbD0iRGVzaWduZXIiLz4NCis8YWx3YXlzT25BY3Rpb25TZXQgaWQ9Im9yZy5lY2xpcHNlLnVpLmFjdGlvblNldC5rZXlCaW5kaW5ncyIvPg0KKzxhbHdheXNPbkFjdGlvblNldCBpZD0ib3JnLmVjbGlwc2UudWkuYWN0aW9uU2V0Lm9wZW5GaWxlcyIvPg0KKzxzaG93X3ZpZXdfYWN0aW9uIGlkPSJvcmcuZWNsaXBzZS5zdGVtLnVpLnZpZXdzLnNpbXVsYXRpb25jb250cm9sdmlldyIvPg0KKzxzaG93X3ZpZXdfYWN0aW9uIGlkPSJvcmcuZWNsaXBzZS5zdGVtLnVpLnZpZXdzLmdyYXBocyIvPg0KKzxzaG93X3ZpZXdfYWN0aW9uIGlkPSJvcmcuZWNsaXBzZS5zdGVtLnVpLnZpZXdzLm1vZGVscyIvPg0KKzxzaG93X3ZpZXdfYWN0aW9uIGlkPSJvcmcuZWNsaXBzZS5zdGVtLnVpLnZpZXdzLnNjZW5hcmlvcyIvPg0KKzxzaG93X3ZpZXdfYWN0aW9uIGlkPSJvcmcuZWNsaXBzZS5zdGVtLnVpLnZpZXdzLnNlcXVlbmNlcnMiLz4NCis8c2hvd192aWV3X2FjdGlvbiBpZD0ib3JnLmVjbGlwc2Uuc3RlbS51aS52aWV3cy5kZWNvcmF0b3JzIi8+DQorPHNob3dfdmlld19hY3Rpb24gaWQ9Im9yZy5lY2xpcHNlLnN0ZW0udWkudmlld3MudHJpZ2dlcnMiLz4NCis8c2hvd192aWV3X2FjdGlvbiBpZD0ib3JnLmVjbGlwc2Uuc3RlbS51aS52aWV3cy5wcmVkaWNhdGVzIi8+DQorPHNob3dfdmlld19hY3Rpb24gaWQ9Im9yZy5lY2xpcHNlLnVpLm5hdmlnYXRvci5Qcm9qZWN0RXhwbG9yZXIiLz4NCis8c2hvd192aWV3X2FjdGlvbiBpZD0ib3JnLmVjbGlwc2Uuc3RlbS51aS52aWV3cy5kaXNlYXNlcyIvPg0KKzxuZXdfd2l6YXJkX2FjdGlvbiBpZD0ib3JnLmVjbGlwc2Uuc3RlbS51aS53aXphcmRzLm5ld3N0ZW1wcm9qZWN0Ii8+DQorPHBlcnNwZWN0aXZlX2FjdGlvbiBpZD0ib3JnLmVjbGlwc2Uuc3RlbS51aS5TVEVNRGVzaWduZXJQZXJzcGVjdGl2ZSIvPg0KKzx2aWV3IGlkPSJvcmcuZWNsaXBzZS51aS5uYXZpZ2F0b3IuUHJvamVjdEV4cGxvcmVyIi8+DQorPHZpZXcgaWQ9Im9yZy5lY2xpcHNlLnN0ZW0udWkudmlld3Muc2NlbmFyaW9zIi8+DQorPHZpZXcgaWQ9Im9yZy5lY2xpcHNlLnN0ZW0udWkudmlld3MubW9kZWxzIi8+DQorPHZpZXcgaWQ9Im9yZy5lY2xpcHNlLnN0ZW0udWkudmlld3MuZ3JhcGhzIi8+DQorPHZpZXcgaWQ9Im9yZy5lY2xpcHNlLnN0ZW0udWkudmlld3MudHJpZ2dlcnMiLz4NCis8dmlldyBpZD0ib3JnLmVjbGlwc2Uuc3RlbS51aS52aWV3cy5wcmVkaWNhdGVzIi8+DQorPHZpZXcgaWQ9Im9yZy5lY2xpcHNlLnN0ZW0udWkudmlld3Muc2VxdWVuY2VycyIvPg0KKzx2aWV3IGlkPSJvcmcuZWNsaXBzZS5zdGVtLnVpLnZpZXdzLmRlY29yYXRvcnMiLz4NCis8dmlldyBpZD0ib3JnLmVjbGlwc2UudWkudmlld3MuUHJvcGVydHlTaGVldCIvPg0KKzx2aWV3IGlkPSJvcmcuZWNsaXBzZS51aS52aWV3cy5UYXNrTGlzdCIvPg0KKzx2aWV3IGlkPSJvcmcuZWNsaXBzZS5wZGUucnVudGltZS5Mb2dWaWV3Ii8+DQorPHZpZXcgaWQ9Im9yZy5lY2xpcHNlLnN0ZW0udWkudmlld3MuZGlzZWFzZXMiLz4NCis8dmlldyBpZD0ib3JnLmVjbGlwc2UudWkudmlld3MuQ29udGVudE91dGxpbmUiLz4NCis8ZmFzdFZpZXdCYXJzLz4NCis8bGF5b3V0Pg0KKzxtYWluV2luZG93Pg0KKzxpbmZvIGZvbGRlcj0idHJ1ZSIgcGFydD0ibGVmdCI+DQorPGZvbGRlciBhY3RpdmVQYWdlSUQ9Im9yZy5lY2xpcHNlLnVpLm5hdmlnYXRvci5Qcm9qZWN0RXhwbG9yZXIiIGFwcGVhcmFuY2U9IjIiIGV4cGFuZGVkPSIyIj4NCis8cGFnZSBjb250ZW50PSJvcmcuZWNsaXBzZS51aS5uYXZpZ2F0b3IuUHJvamVjdEV4cGxvcmVyIiBsYWJlbD0iUHJvamVjdCBFeHBsb3JlciIvPg0KKzxwcmVzZW50YXRpb24gaWQ9Im9yZy5lY2xpcHNlLnVpLnByZXNlbnRhdGlvbnMuV29ya2JlbmNoUHJlc2VudGF0aW9uRmFjdG9yeSI+DQorPHBhcnQgaWQ9IjAiLz4NCis8L3ByZXNlbnRhdGlvbj4NCis8L2ZvbGRlcj4NCis8L2luZm8+DQorPGluZm8gZm9sZGVyPSJ0cnVlIiBwYXJ0PSJzdGlja3lGb2xkZXJSaWdodCIgcmF0aW89IjAuNzUiIHJhdGlvTGVmdD0iNzU2IiByYXRpb1JpZ2h0PSIyNTIiIHJlbGF0aW9uc2hpcD0iMiIgcmVsYXRpdmU9ImxlZnQiPg0KKzxmb2xkZXIgYXBwZWFyYW5jZT0iMiIgZXhwYW5kZWQ9IjIiPg0KKzxwYWdlIGNvbnRlbnQ9Im9yZy5lY2xpcHNlLmhlbHAudWkuSGVscFZpZXciIGxhYmVsPSJMYWJlbE5vdEZvdW5kIi8+DQorPHBhZ2UgY29udGVudD0ib3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuaW50cm92aWV3IiBsYWJlbD0iTGFiZWxOb3RGb3VuZCIvPg0KKzwvZm9sZGVyPg0KKzwvaW5mbz4NCis8aW5mbyBwYXJ0PSJvcmcuZWNsaXBzZS51aS5lZGl0b3JzcyIgcmF0aW89IjAuMjUiIHJhdGlvTGVmdD0iMjUyIiByYXRpb1JpZ2h0PSI3NTYiIHJlbGF0aW9uc2hpcD0iMiIgcmVsYXRpdmU9ImxlZnQiLz4NCis8aW5mbyBmb2xkZXI9InRydWUiIHBhcnQ9ImJvdHRvbSIgcmF0aW89IjAuNjU4NTc2MSIgcmF0aW9MZWZ0PSI0MDciIHJhdGlvUmlnaHQ9IjIxMSIgcmVsYXRpb25zaGlwPSI0IiByZWxhdGl2ZT0ib3JnLmVjbGlwc2UudWkuZWRpdG9yc3MiPg0KKzxmb2xkZXIgYWN0aXZlUGFnZUlEPSJvcmcuZWNsaXBzZS5zdGVtLnVpLnZpZXdzLnNjZW5hcmlvcyIgYXBwZWFyYW5jZT0iMiIgZXhwYW5kZWQ9IjIiPg0KKzxwYWdlIGNvbnRlbnQ9Im9yZy5lY2xpcHNlLnN0ZW0udWkudmlld3Muc2NlbmFyaW9zIiBsYWJlbD0iU2NlbmFyaW9zIi8+DQorPHBhZ2UgY29udGVudD0ib3JnLmVjbGlwc2Uuc3RlbS51aS52aWV3cy5tb2RlbHMiIGxhYmVsPSJNb2RlbHMiLz4NCis8cGFnZSBjb250ZW50PSJvcmcuZWNsaXBzZS5zdGVtLnVpLnZpZXdzLmdyYXBocyIgbGFiZWw9IkdyYXBocyIvPg0KKzxwYWdlIGNvbnRlbnQ9Im9yZy5lY2xpcHNlLnN0ZW0udWkudmlld3MudHJpZ2dlcnMiIGxhYmVsPSJUcmlnZ2VycyIvPg0KKzxwYWdlIGNvbnRlbnQ9Im9yZy5lY2xpcHNlLnN0ZW0udWkudmlld3MucHJlZGljYXRlcyIgbGFiZWw9IlByZWRpY2F0ZXMiLz4NCis8cGFnZSBjb250ZW50PSJvcmcuZWNsaXBzZS5zdGVtLnVpLnZpZXdzLnNlcXVlbmNlcnMiIGxhYmVsPSJTZXF1ZW5jZXJzIi8+DQorPHBhZ2UgY29udGVudD0ib3JnLmVjbGlwc2Uuc3RlbS51aS52aWV3cy5kZWNvcmF0b3JzIiBsYWJlbD0iRGVjb3JhdG9ycyIvPg0KKzxwYWdlIGNvbnRlbnQ9Im9yZy5lY2xpcHNlLnVpLnZpZXdzLlByb3BlcnR5U2hlZXQiIGxhYmVsPSJQcm9wZXJ0aWVzIi8+DQorPHBhZ2UgY29udGVudD0ib3JnLmVjbGlwc2UudWkudmlld3MuVGFza0xpc3QiIGxhYmVsPSJUYXNrcyIvPg0KKzxwYWdlIGNvbnRlbnQ9Im9yZy5lY2xpcHNlLnBkZS5ydW50aW1lLkxvZ1ZpZXciIGxhYmVsPSJFcnJvciBMb2ciLz4NCis8cGFnZSBjb250ZW50PSJvcmcuZWNsaXBzZS5zdGVtLnVpLnZpZXdzLmRpc2Vhc2VzIiBsYWJlbD0iRGlzZWFzZXMiLz4NCis8cGFnZSBjb250ZW50PSJvcmcuZWNsaXBzZS51aS52aWV3cy5Qcm9ibGVtVmlldyIgbGFiZWw9IkxhYmVsTm90Rm91bmQiLz4NCis8cHJlc2VudGF0aW9uIGlkPSJvcmcuZWNsaXBzZS51aS5wcmVzZW50YXRpb25zLldvcmtiZW5jaFByZXNlbnRhdGlvbkZhY3RvcnkiPg0KKzxwYXJ0IGlkPSIwIi8+DQorPHBhcnQgaWQ9IjEiLz4NCis8cGFydCBpZD0iMiIvPg0KKzxwYXJ0IGlkPSIzIi8+DQorPHBhcnQgaWQ9IjQiLz4NCis8cGFydCBpZD0iNSIvPg0KKzxwYXJ0IGlkPSI2Ii8+DQorPHBhcnQgaWQ9IjciLz4NCis8cGFydCBpZD0iOCIvPg0KKzxwYXJ0IGlkPSI5Ii8+DQorPHBhcnQgaWQ9IjEwIi8+DQorPC9wcmVzZW50YXRpb24+DQorPC9mb2xkZXI+DQorPC9pbmZvPg0KKzxpbmZvIGZvbGRlcj0idHJ1ZSIgcGFydD0ib3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuVmlld1N0YWNrQDEyODBjODUiIHJhdGlvPSIwLjc1IiByYXRpb0xlZnQ9IjU2NyIgcmF0aW9SaWdodD0iMTg5IiByZWxhdGlvbnNoaXA9IjIiIHJlbGF0aXZlPSJvcmcuZWNsaXBzZS51aS5lZGl0b3JzcyI+DQorPGZvbGRlciBhY3RpdmVQYWdlSUQ9Im9yZy5lY2xpcHNlLnVpLnZpZXdzLkNvbnRlbnRPdXRsaW5lIiBhcHBlYXJhbmNlPSIyIiBleHBhbmRlZD0iMiI+DQorPHBhZ2UgY29udGVudD0ib3JnLmVjbGlwc2UudWkudmlld3MuQ29udGVudE91dGxpbmUiIGxhYmVsPSJPdXRsaW5lIi8+DQorPHByZXNlbnRhdGlvbiBpZD0ib3JnLmVjbGlwc2UudWkucHJlc2VudGF0aW9ucy5Xb3JrYmVuY2hQcmVzZW50YXRpb25GYWN0b3J5Ij4NCis8cGFydCBpZD0iMCIvPg0KKzwvcHJlc2VudGF0aW9uPg0KKzwvZm9sZGVyPg0KKzwvaW5mbz4NCis8L21haW5XaW5kb3c+DQorPC9sYXlvdXQ+DQorPC9wZXJzcGVjdGl2ZT4NCis8cGVyc3BlY3RpdmUgZWRpdG9yQXJlYVRyaW1TdGF0ZT0iMiIgZWRpdG9yQXJlYVZpc2libGU9IjAiIGZpeGVkPSIwIiB2ZXJzaW9uPSIwLjAxNiI+DQorPGRlc2NyaXB0b3IgY2xhc3M9Im9yZy5lY2xpcHNlLnN0ZW0udWkucGVyc3BlY3RpdmVzLlNpbXVsYXRpb24iIGlkPSJvcmcuZWNsaXBzZS5zdGVtLnVpLlNURU1TaW11bGF0aW9uUGVyc3BlY3RpdmUiIGxhYmVsPSJTaW11bGF0aW9uIi8+DQorPGFsd2F5c09uQWN0aW9uU2V0IGlkPSJvcmcuZWNsaXBzZS51aS5hY3Rpb25TZXQua2V5QmluZGluZ3MiLz4NCis8YWx3YXlzT25BY3Rpb25TZXQgaWQ9Im9yZy5lY2xpcHNlLnVpLmFjdGlvblNldC5vcGVuRmlsZXMiLz4NCis8c2hvd192aWV3X2FjdGlvbiBpZD0ib3JnLmVjbGlwc2Uuc3RlbS51aS52aWV3cy5zaW11bGF0aW9uY29udHJvbHZpZXciLz4NCis8c2hvd192aWV3X2FjdGlvbiBpZD0ib3JnLmVjbGlwc2UudWkudmlld3MuUHJvZ3Jlc3NWaWV3Ii8+DQorPHNob3dfdmlld19hY3Rpb24gaWQ9Im9yZy5lY2xpcHNlLnN0ZW0udWkudmlld3Muc2NlbmFyaW9zIi8+DQorPHNob3dfdmlld19hY3Rpb24gaWQ9Im9yZy5lY2xpcHNlLnN0ZW0udWkudmlld3MuYWN0aXZlc2ltdWxhdGlvbnMiLz4NCis8c2hvd192aWV3X2FjdGlvbiBpZD0ib3JnLmVjbGlwc2Uuc3RlbS51aS52aWV3cy5hY3RpdmViYXRjaGVzIi8+DQorPHNob3dfdmlld19hY3Rpb24gaWQ9Im9yZy5lY2xpcHNlLnN0ZW0udWkudmlld3MuZ2VvZ3JhcGhpYy5tYXAiLz4NCis8c2hvd192aWV3X2FjdGlvbiBpZD0ib3JnLmVjbGlwc2Uuc3RlbS51aS52aWV3cy5nZSIvPg0KKzxzaG93X3ZpZXdfYWN0aW9uIGlkPSJvcmcuZWNsaXBzZS5zdGVtLnVpLnZpZXdzLnJlcG9ydHMiLz4NCis8c2hvd192aWV3X2FjdGlvbiBpZD0ib3JnLmVjbGlwc2Uuc3RlbS51aS52aWV3cy5yZXBvcnRzLnBoYXNlU3BhY2UiLz4NCis8cGVyc3BlY3RpdmVfYWN0aW9uIGlkPSJvcmcuZWNsaXBzZS5zdGVtLnVpLlNURU1TaW11bGF0aW9uUGVyc3BlY3RpdmUiLz4NCis8dmlldyBpZD0ib3JnLmVjbGlwc2Uuc3RlbS51aS52aWV3cy5nZW9ncmFwaGljLm1hcCIvPg0KKzx2aWV3IGlkPSJvcmcuZWNsaXBzZS5zdGVtLnVpLnZpZXdzLnNpbXVsYXRpb25jb250cm9sdmlldyIvPg0KKzx2aWV3IGlkPSJvcmcuZWNsaXBzZS5wZGUucnVudGltZS5Mb2dWaWV3Ii8+DQorPHZpZXcgaWQ9Im9yZy5lY2xpcHNlLnN0ZW0udWkudmlld3MucmVwb3J0cy5waGFzZVNwYWNlIi8+DQorPHZpZXcgaWQ9Im9yZy5lY2xpcHNlLnN0ZW0udWkudmlld3MucmVwb3J0cyIvPg0KKzx2aWV3IGlkPSJvcmcuZWNsaXBzZS5zdGVtLnV0aWwubG9nZ2VycyIvPg0KKzx2aWV3IGlkPSJvcmcuZWNsaXBzZS51aS5uYXZpZ2F0b3IuUHJvamVjdEV4cGxvcmVyIi8+DQorPHZpZXcgaWQ9Im9yZy5lY2xpcHNlLnN0ZW0udWkudmlld3Muc2NlbmFyaW9zIi8+DQorPGZhc3RWaWV3QmFycy8+DQorPHZpZXdMYXlvdXRSZWMgaWQ9Im9yZy5lY2xpcHNlLnN0ZW0udWkudmlld3MuZ2VvZ3JhcGhpYy5tYXAiIHNob3dUaXRsZT0idHJ1ZSIgc3RhbmRhbG9uZT0idHJ1ZSIvPg0KKzxsYXlvdXQ+DQorPG1haW5XaW5kb3c+DQorPGluZm8gcGFydD0ib3JnLmVjbGlwc2UudWkuZWRpdG9yc3MiLz4NCis8aW5mbyBmb2xkZXI9InRydWUiIHBhcnQ9InN0aWNreUZvbGRlclJpZ2h0IiByYXRpbz0iMC43NSIgcmF0aW9MZWZ0PSI3NTYiIHJhdGlvUmlnaHQ9IjI1MiIgcmVsYXRpb25zaGlwPSIyIiByZWxhdGl2ZT0ib3JnLmVjbGlwc2UudWkuZWRpdG9yc3MiPg0KKzxmb2xkZXIgYXBwZWFyYW5jZT0iMiIgZXhwYW5kZWQ9IjIiPg0KKzxwYWdlIGNvbnRlbnQ9Im9yZy5lY2xpcHNlLmhlbHAudWkuSGVscFZpZXciIGxhYmVsPSJMYWJlbE5vdEZvdW5kIi8+DQorPHBhZ2UgY29udGVudD0ib3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuaW50cm92aWV3IiBsYWJlbD0iTGFiZWxOb3RGb3VuZCIvPg0KKzwvZm9sZGVyPg0KKzwvaW5mbz4NCis8aW5mbyBmb2xkZXI9InRydWUiIHBhcnQ9Im9yZy5lY2xpcHNlLnVpLmludGVybmFsLlZpZXdTdGFja0A2NzUwMzkiIHJhdGlvPSIwLjA0OTYwMzE3NSIgcmF0aW9MZWZ0PSI1MCIgcmF0aW9SaWdodD0iOTU4IiByZWxhdGlvbnNoaXA9IjIiIHJlbGF0aXZlPSJvcmcuZWNsaXBzZS51aS5lZGl0b3JzcyI+DQorPGZvbGRlciBhY3RpdmVQYWdlSUQ9Im9yZy5lY2xpcHNlLnN0ZW0udWkudmlld3Muc2NlbmFyaW9zIiBhcHBlYXJhbmNlPSIyIiBleHBhbmRlZD0iMiI+DQorPHBhZ2UgY29udGVudD0ib3JnLmVjbGlwc2UudWkubmF2aWdhdG9yLlByb2plY3RFeHBsb3JlciIgbGFiZWw9IlByb2plY3QgRXhwbG9yZXIiLz4NCis8cGFnZSBjb250ZW50PSJvcmcuZWNsaXBzZS5zdGVtLnVpLnZpZXdzLnNjZW5hcmlvcyIgbGFiZWw9IlNjZW5hcmlvcyIvPg0KKzxwcmVzZW50YXRpb24gaWQ9Im9yZy5lY2xpcHNlLnVpLnByZXNlbnRhdGlvbnMuV29ya2JlbmNoUHJlc2VudGF0aW9uRmFjdG9yeSI+DQorPHBhcnQgaWQ9IjAiLz4NCis8cGFydCBpZD0iMSIvPg0KKzwvcHJlc2VudGF0aW9uPg0KKzwvZm9sZGVyPg0KKzwvaW5mbz4NCis8aW5mbyBmb2xkZXI9InRydWUiIHBhcnQ9ImxlZnQiIHJhdGlvPSIwLjU5OTAzMzgzIiByYXRpb0xlZnQ9IjM3MiIgcmF0aW9SaWdodD0iMjQ5IiByZWxhdGlvbnNoaXA9IjQiIHJlbGF0aXZlPSJvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5WaWV3U3RhY2tANjc1MDM5Ij4NCis8Zm9sZGVyIGFjdGl2ZVBhZ2VJRD0ib3JnLmVjbGlwc2Uuc3RlbS51aS52aWV3cy5zaW11bGF0aW9uY29udHJvbHZpZXciIGFwcGVhcmFuY2U9IjIiIGV4cGFuZGVkPSIyIj4NCis8cGFnZSBjb250ZW50PSJvcmcuZWNsaXBzZS5zdGVtLnVpLnZpZXdzLnNpbXVsYXRpb25jb250cm9sdmlldyIgbGFiZWw9IlNpbXVsYXRpb24gQ29udHJvbCIvPg0KKzxwcmVzZW50YXRpb24gaWQ9Im9yZy5lY2xpcHNlLnVpLnByZXNlbnRhdGlvbnMuV29ya2JlbmNoUHJlc2VudGF0aW9uRmFjdG9yeSI+DQorPHBhcnQgaWQ9IjAiLz4NCis8L3ByZXNlbnRhdGlvbj4NCis8L2ZvbGRlcj4NCis8L2luZm8+DQorPGluZm8gZm9sZGVyPSJ0cnVlIiBwYXJ0PSJib3R0b20iIHJhdGlvPSIwLjI5OTU4MjQ1IiByYXRpb0xlZnQ9IjI4NyIgcmF0aW9SaWdodD0iNjcxIiByZWxhdGlvbnNoaXA9IjIiIHJlbGF0aXZlPSJsZWZ0Ij4NCis8Zm9sZGVyIGFjdGl2ZVBhZ2VJRD0ib3JnLmVjbGlwc2Uuc3RlbS51aS52aWV3cy5yZXBvcnRzIiBhcHBlYXJhbmNlPSIyIiBleHBhbmRlZD0iMiI+DQorPHBhZ2UgY29udGVudD0ib3JnLmVjbGlwc2UucGRlLnJ1bnRpbWUuTG9nVmlldyIgbGFiZWw9IkVycm9yIExvZyIvPg0KKzxwYWdlIGNvbnRlbnQ9Im9yZy5lY2xpcHNlLnN0ZW0udWkudmlld3MucmVwb3J0cy5waGFzZVNwYWNlIiBsYWJlbD0iUGhhc2UgU3BhY2UiLz4NCis8cGFnZSBjb250ZW50PSJvcmcuZWNsaXBzZS5zdGVtLnVpLnZpZXdzLnJlcG9ydHMiIGxhYmVsPSJUaW1lIFNlcmllcyIvPg0KKzxwYWdlIGNvbnRlbnQ9Im9yZy5lY2xpcHNlLnN0ZW0udXRpbC5sb2dnZXJzIiBsYWJlbD0iQ1NWIExvZ2dlciIvPg0KKzxwcmVzZW50YXRpb24gaWQ9Im9yZy5lY2xpcHNlLnVpLnByZXNlbnRhdGlvbnMuV29ya2JlbmNoUHJlc2VudGF0aW9uRmFjdG9yeSI+DQorPHBhcnQgaWQ9IjIiLz4NCis8cGFydCBpZD0iMSIvPg0KKzxwYXJ0IGlkPSIzIi8+DQorPHBhcnQgaWQ9IjAiLz4NCis8L3ByZXNlbnRhdGlvbj4NCis8L2ZvbGRlcj4NCis8L2luZm8+DQorPGluZm8gZm9sZGVyPSJ0cnVlIiBwYXJ0PSJvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5WaWV3U3RhY2tAMTNmNTg0MSIgcmF0aW89IjAuMjk5NTAyNSIgcmF0aW9MZWZ0PSIzMDEiIHJhdGlvUmlnaHQ9IjcwNCIgcmVsYXRpb25zaGlwPSIyIiByZWxhdGl2ZT0ib3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuVmlld1N0YWNrQDY3NTAzOSI+DQorPGZvbGRlciBhY3RpdmVQYWdlSUQ9Im9yZy5lY2xpcHNlLnN0ZW0udWkudmlld3MuZ2VvZ3JhcGhpYy5tYXAiIGFwcGVhcmFuY2U9IjMiIGV4cGFuZGVkPSIyIj4NCis8cGFnZSBjb250ZW50PSJvcmcuZWNsaXBzZS5zdGVtLnVpLnZpZXdzLmdlb2dyYXBoaWMubWFwIiBsYWJlbD0iTWFwIi8+DQorPHByZXNlbnRhdGlvbiBpZD0ib3JnLmVjbGlwc2UudWkucHJlc2VudGF0aW9ucy5Xb3JrYmVuY2hQcmVzZW50YXRpb25GYWN0b3J5Ij4NCis8cGFydCBpZD0iMCIvPg0KKzwvcHJlc2VudGF0aW9uPg0KKzwvZm9sZGVyPg0KKzwvaW5mbz4NCis8L21haW5XaW5kb3c+DQorPC9sYXlvdXQ+DQorPC9wZXJzcGVjdGl2ZT4NCis8L3BlcnNwZWN0aXZlcz4NCis8d29ya2luZ1NldHMvPg0KKzxuYXZpZ2F0aW9uSGlzdG9yeS8+DQorPGlucHV0IGZhY3RvcnlJRD0ib3JnLmVjbGlwc2UudWkuaW50ZXJuYWwubW9kZWwuUmVzb3VyY2VGYWN0b3J5IiBwYXRoPSIvIiB0eXBlPSI4Ii8+DQorPC9wYWdlPg0KKzx3b3JrYmVuY2hXaW5kb3dBZHZpc29yLz4NCis8YWN0aW9uQmFyQWR2aXNvci8+DQorPHRyaW1MYXlvdXQ+DQorPHRyaW1BcmVhIElNZW1lbnRvLmludGVybmFsLmlkPSIxMjgiPg0KKzx0cmltSXRlbSBJTWVtZW50by5pbnRlcm5hbC5pZD0ib3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuV29ya2JlbmNoV2luZG93LnRvcEJhciIvPg0KKzwvdHJpbUFyZWE+DQorPHRyaW1BcmVhIElNZW1lbnRvLmludGVybmFsLmlkPSIxMDI0Ij4NCis8dHJpbUl0ZW0gSU1lbWVudG8uaW50ZXJuYWwuaWQ9Im9yZy5lY2xpc2UudWkuaW50ZXJuYWwuRmFzdFZpZXdCYXIiLz4NCis8dHJpbUl0ZW0gSU1lbWVudG8uaW50ZXJuYWwuaWQ9Im9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5TdGF0dXNMaW5lTWFuYWdlciIvPg0KKzx0cmltSXRlbSBJTWVtZW50by5pbnRlcm5hbC5pZD0ib3JnLmVjbGlwc2UudWkuaW50ZXJuYWwucHJvZ3Jlc3MuUHJvZ3Jlc3NSZWdpb24iLz4NCis8L3RyaW1BcmVhPg0KKzwvdHJpbUxheW91dD4NCis8L3dpbmRvdz4NCis8bXJ1TGlzdC8+DQorPC93b3JrYmVuY2g+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvcmVsZW5nL29yZy5lY2xpcHNlLnN0ZW0ucmVsZW5nL3J1blRlc3RzLnNoIGIvcmVsZW5nL29yZy5lY2xpcHNlLnN0ZW0ucmVsZW5nL3J1blRlc3RzLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjA0MWZhZmEKLS0tIC9kZXYvbnVsbAorKysgYi9yZWxlbmcvb3JnLmVjbGlwc2Uuc3RlbS5yZWxlbmcvcnVuVGVzdHMuc2gKQEAgLTAsMCArMSwxNiBAQAorIyEvYmluL2Jhc2gKK2VjaG8gaGVyZQorIyAtRHdzPSR3cyAtRG9zPSRvcyAtRGFyY2g9JGFyY2gKKworCiskSkFWQV9IT01FL2Jpbi9qYXZhIFwKKyAtamFyICRFQ0xJUFNFX0hPTUUvcGx1Z2lucy9vcmcuZWNsaXBzZS5lcXVpbm94LmxhdW5jaGVyXyouamFyIFwKKyAtZGF0YSAkQlVJTERfSE9NRS93b3Jrc3BhY2UgXAorIC1hcHBsaWNhdGlvbiBvcmcuZWNsaXBzZS5hbnQuY29yZS5hbnRSdW5uZXIgXAorIC1maWxlICRCVUlMRF9ST09UL0NvbmZpZ1Rlc3RzL3J1blRlc3RzLnhtbCBcCisgLUQkaW5zdGFsbG1vZGU9dHJ1ZSBcCisgLVhzdGFydE9uRmlyc3RUaHJlYWQgXAorIC1sb2dnZXIgb3JnLmFwYWNoZS50b29scy5hbnQuRGVmYXVsdExvZ2dlciBcCisgLURlY2xpcHNlQnVuZGxlPWVjbGlwc2UtdGVzdC1ydW50aW1lLnppcCBcCisgLURidWlsZEhvbWU9JEJVSUxEX0hPTUUgXAorJCoKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0uc2FtcGxlLy5jbGFzc3BhdGggYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnNhbXBsZS8uY2xhc3NwYXRoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMwNGU4NjEKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnNhbXBsZS8uY2xhc3NwYXRoCkBAIC0wLDAgKzEsNyBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxjbGFzc3BhdGg+CisJPGNsYXNzcGF0aGVudHJ5IGtpbmQ9InNyYyIgcGF0aD0ic3JjIi8+CisJPGNsYXNzcGF0aGVudHJ5IGtpbmQ9ImNvbiIgcGF0aD0ib3JnLmVjbGlwc2UuamR0LmxhdW5jaGluZy5KUkVfQ09OVEFJTkVSL29yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC5kZWJ1Zy51aS5sYXVuY2hlci5TdGFuZGFyZFZNVHlwZS9KMlNFLTEuNSIvPgorCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJjb24iIHBhdGg9Im9yZy5lY2xpcHNlLnBkZS5jb3JlLnJlcXVpcmVkUGx1Z2lucyIvPgorCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJvdXRwdXQiIHBhdGg9ImJpbiIvPgorPC9jbGFzc3BhdGg+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnNhbXBsZS8ucHJvamVjdCBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0uc2FtcGxlLy5wcm9qZWN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcxMzdjMTAKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnNhbXBsZS8ucHJvamVjdApAQCAtMCwwICsxLDI4IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPHByb2plY3REZXNjcmlwdGlvbj4KKwk8bmFtZT5vcmcuZWNsaXBzZS5zdGVtLnNhbXBsZTwvbmFtZT4KKwk8Y29tbWVudD48L2NvbW1lbnQ+CisJPHByb2plY3RzPgorCTwvcHJvamVjdHM+CisJPGJ1aWxkU3BlYz4KKwkJPGJ1aWxkQ29tbWFuZD4KKwkJCTxuYW1lPm9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFidWlsZGVyPC9uYW1lPgorCQkJPGFyZ3VtZW50cz4KKwkJCTwvYXJndW1lbnRzPgorCQk8L2J1aWxkQ29tbWFuZD4KKwkJPGJ1aWxkQ29tbWFuZD4KKwkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5NYW5pZmVzdEJ1aWxkZXI8L25hbWU+CisJCQk8YXJndW1lbnRzPgorCQkJPC9hcmd1bWVudHM+CisJCTwvYnVpbGRDb21tYW5kPgorCQk8YnVpbGRDb21tYW5kPgorCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLlNjaGVtYUJ1aWxkZXI8L25hbWU+CisJCQk8YXJndW1lbnRzPgorCQkJPC9hcmd1bWVudHM+CisJCTwvYnVpbGRDb21tYW5kPgorCTwvYnVpbGRTcGVjPgorCTxuYXR1cmVzPgorCQk8bmF0dXJlPm9yZy5lY2xpcHNlLnBkZS5QbHVnaW5OYXR1cmU8L25hdHVyZT4KKwkJPG5hdHVyZT5vcmcuZWNsaXBzZS5qZHQuY29yZS5qYXZhbmF0dXJlPC9uYXR1cmU+CisJPC9uYXR1cmVzPgorPC9wcm9qZWN0RGVzY3JpcHRpb24+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnNhbXBsZS8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnNhbXBsZS8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzNiYzczZAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0uc2FtcGxlLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcwpAQCAtMCwwICsxLDU3IEBACisjTW9uIEphbiAyMSAxMjo0Mzo1NiBFU1QgMjAwOAorZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvZGVnZW4udGFyZ2V0UGxhdGZvcm09MS41CitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb21wbGlhbmNlPTEuNQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5hbm5vdGF0aW9uU3VwZXJJbnRlcmZhY2U9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5hc3NlcnRJZGVudGlmaWVyPWVycm9yCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmF1dG9ib3hpbmc9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5kZXByZWNhdGlvbj13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRlcHJlY2F0aW9uSW5EZXByZWNhdGVkQ29kZT1kaXNhYmxlZAorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5kZXByZWNhdGlvbldoZW5PdmVycmlkaW5nRGVwcmVjYXRlZE1ldGhvZD1kaXNhYmxlZAorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5kaXNjb3VyYWdlZFJlZmVyZW5jZT13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmVtcHR5U3RhdGVtZW50PXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZW51bUlkZW50aWZpZXI9ZXJyb3IKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZmFsbHRocm91Z2hDYXNlPWlnbm9yZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5maWVsZEhpZGluZz1pZ25vcmUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZmluYWxQYXJhbWV0ZXJCb3VuZD13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZpbmFsbHlCbG9ja05vdENvbXBsZXRpbmdOb3JtYWxseT13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZvcmJpZGRlblJlZmVyZW5jZT1lcnJvcgorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5oaWRkZW5DYXRjaEJsb2NrPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW5jb21wYXRpYmxlTm9uSW5oZXJpdGVkSW50ZXJmYWNlTWV0aG9kPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW5jb21wbGV0ZUVudW1Td2l0Y2g9aWdub3JlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmluZGlyZWN0U3RhdGljQWNjZXNzPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubG9jYWxWYXJpYWJsZUhpZGluZz1pZ25vcmUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWV0aG9kV2l0aENvbnN0cnVjdG9yTmFtZT13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdEZXByZWNhdGVkQW5ub3RhdGlvbj13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdPdmVycmlkZUFubm90YXRpb249aWdub3JlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdTZXJpYWxWZXJzaW9uPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubm9FZmZlY3RBc3NpZ25tZW50PXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubm9JbXBsaWNpdFN0cmluZ0NvbnZlcnNpb249d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5ub25FeHRlcm5hbGl6ZWRTdHJpbmdMaXRlcmFsPWlnbm9yZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5udWxsUmVmZXJlbmNlPWlnbm9yZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5vdmVycmlkaW5nUGFja2FnZURlZmF1bHRNZXRob2Q9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5wYXJhbWV0ZXJBc3NpZ25tZW50PWlnbm9yZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5wb3NzaWJsZUFjY2lkZW50YWxCb29sZWFuQXNzaWdubWVudD13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnJhd1R5cGVSZWZlcmVuY2U9aWdub3JlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnNwZWNpYWxQYXJhbWV0ZXJIaWRpbmdGaWVsZD1kaXNhYmxlZAorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5zdGF0aWNBY2Nlc3NSZWNlaXZlcj13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnN1cHByZXNzV2FybmluZ3M9ZW5hYmxlZAorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5zeW50aGV0aWNBY2Nlc3NFbXVsYXRpb249d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS50eXBlUGFyYW1ldGVySGlkaW5nPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5jaGVja2VkVHlwZU9wZXJhdGlvbj13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVuZG9jdW1lbnRlZEVtcHR5QmxvY2s9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bmhhbmRsZWRXYXJuaW5nVG9rZW49d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bm5lY2Vzc2FyeUVsc2U9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bm5lY2Vzc2FyeVR5cGVDaGVjaz13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVucXVhbGlmaWVkRmllbGRBY2Nlc3M9aWdub3JlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZERlY2xhcmVkVGhyb3duRXhjZXB0aW9uPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkRGVjbGFyZWRUaHJvd25FeGNlcHRpb25XaGVuT3ZlcnJpZGluZz1lbmFibGVkCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZEltcG9ydD13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZExhYmVsPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkTG9jYWw9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRQYXJhbWV0ZXI9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRQYXJhbWV0ZXJXaGVuSW1wbGVtZW50aW5nQWJzdHJhY3Q9ZW5hYmxlZAorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRQYXJhbWV0ZXJXaGVuT3ZlcnJpZGluZ0NvbmNyZXRlPWVuYWJsZWQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkUHJpdmF0ZU1lbWJlcj13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnZhcmFyZ3NBcmd1bWVudE5lZWRDYXN0PXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnNvdXJjZT0xLjUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0uc2FtcGxlL01FVEEtSU5GL01BTklGRVNULk1GIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS5zYW1wbGUvTUVUQS1JTkYvTUFOSUZFU1QuTUYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmU0YmM5ZgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0uc2FtcGxlL01FVEEtSU5GL01BTklGRVNULk1GCkBAIC0wLDAgKzEsMTUgQEAKK01hbmlmZXN0LVZlcnNpb246IDEuMAorQnVuZGxlLU1hbmlmZXN0VmVyc2lvbjogMgorQnVuZGxlLU5hbWU6ICVwbHVnaW5OYW1lCitCdW5kbGUtU3ltYm9saWNOYW1lOiBvcmcuZWNsaXBzZS5zdGVtLnNhbXBsZTtzaW5nbGV0b246PXRydWUKK0J1bmRsZS1WZXJzaW9uOiAxLjIuMQorQnVuZGxlLUFjdGl2YXRvcjogb3JnLmVjbGlwc2Uuc3RlbS5zYW1wbGUuQWN0aXZhdG9yCitCdW5kbGUtVmVuZG9yOiAlcHJvdmlkZXJOYW1lCitCdW5kbGUtTG9jYWxpemF0aW9uOiBwbHVnaW4KK1JlcXVpcmUtQnVuZGxlOiBvcmcuZWNsaXBzZS5zdGVtLmpvYnMsCisgb3JnLmp1bml0LAorIG9yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGlzZWFzZW1vZGVscworQnVuZGxlLUFjdGl2YXRpb25Qb2xpY3k6IGxhenkKK0V4cG9ydC1QYWNrYWdlOiBvcmcuZWNsaXBzZS5zdGVtLnNhbXBsZSwKKyBvcmcuZWNsaXBzZS5zdGVtLnNhbXBsZS5hZGFwdGlvbgorQnVuZGxlLVJlcXVpcmVkRXhlY3V0aW9uRW52aXJvbm1lbnQ6IEoyU0UtMS41CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnNhbXBsZS9idWlsZC5wcm9wZXJ0aWVzIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS5zYW1wbGUvYnVpbGQucHJvcGVydGllcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNzM5NzJkCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS5zYW1wbGUvYnVpbGQucHJvcGVydGllcwpAQCAtMCwwICsxLDggQEAKK3NvdXJjZS4uID0gc3JjLworb3V0cHV0Li4gPSBiaW4vCitiaW4uaW5jbHVkZXMgPSBNRVRBLUlORi8sXAorICAgICAgICAgICAgICAgLixcCisgICAgICAgICAgICAgICBwbHVnaW4ueG1sLFwKKyAgICAgICAgICAgICAgIHBsdWdpbi5wcm9wZXJ0aWVzLFwKKyAgICAgICAgICAgICAgIG5vdGljZS5odG1sLFwKKyAgICAgICAgICAgICAgIGVwbC12MTAuaHRtbApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS5zYW1wbGUvZXBsLXYxMC5odG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS5zYW1wbGUvZXBsLXYxMC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVkNGIxOTYKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnNhbXBsZS9lcGwtdjEwLmh0bWwKQEAgLTAsMCArMSwzMjggQEAKKzxodG1sIHhtbG5zOm89InVybjpzY2hlbWFzLW1pY3Jvc29mdC1jb206b2ZmaWNlOm9mZmljZSIKK3htbG5zOnc9InVybjpzY2hlbWFzLW1pY3Jvc29mdC1jb206b2ZmaWNlOndvcmQiCit4bWxucz0iaHR0cDovL3d3dy53My5vcmcvVFIvUkVDLWh0bWw0MCI+CisKKzxoZWFkPgorPG1ldGEgaHR0cC1lcXVpdj1Db250ZW50LVR5cGUgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PXdpbmRvd3MtMTI1MiI+Cis8bWV0YSBuYW1lPVByb2dJZCBjb250ZW50PVdvcmQuRG9jdW1lbnQ+Cis8bWV0YSBuYW1lPUdlbmVyYXRvciBjb250ZW50PSJNaWNyb3NvZnQgV29yZCA5Ij4KKzxtZXRhIG5hbWU9T3JpZ2luYXRvciBjb250ZW50PSJNaWNyb3NvZnQgV29yZCA5Ij4KKzxsaW5rIHJlbD1GaWxlLUxpc3QKK2hyZWY9Ii4vRWNsaXBzZSUyMEVQTCUyMDIwMDNfMTFfMTAlMjBGaW5hbF9maWxlcy9maWxlbGlzdC54bWwiPgorPHRpdGxlPkVjbGlwc2UgUHVibGljIExpY2Vuc2UgLSBWZXJzaW9uIDEuMDwvdGl0bGU+Cis8IS0tW2lmIGd0ZSBtc28gOV0+PHhtbD4KKyA8bzpEb2N1bWVudFByb3BlcnRpZXM+CisgIDxvOlJldmlzaW9uPjI8L286UmV2aXNpb24+CisgIDxvOlRvdGFsVGltZT4zPC9vOlRvdGFsVGltZT4KKyAgPG86Q3JlYXRlZD4yMDA0LTAzLTA1VDIzOjAzOjAwWjwvbzpDcmVhdGVkPgorICA8bzpMYXN0U2F2ZWQ+MjAwNC0wMy0wNVQyMzowMzowMFo8L286TGFzdFNhdmVkPgorICA8bzpQYWdlcz40PC9vOlBhZ2VzPgorICA8bzpXb3Jkcz4xNjI2PC9vOldvcmRzPgorICA8bzpDaGFyYWN0ZXJzPjkyNzA8L286Q2hhcmFjdGVycz4KKyAgIDxvOkxpbmVzPjc3PC9vOkxpbmVzPgorICA8bzpQYXJhZ3JhcGhzPjE4PC9vOlBhcmFncmFwaHM+CisgIDxvOkNoYXJhY3RlcnNXaXRoU3BhY2VzPjExMzg0PC9vOkNoYXJhY3RlcnNXaXRoU3BhY2VzPgorICA8bzpWZXJzaW9uPjkuNDQwMjwvbzpWZXJzaW9uPgorIDwvbzpEb2N1bWVudFByb3BlcnRpZXM+Cis8L3htbD48IVtlbmRpZl0tLT48IS0tW2lmIGd0ZSBtc28gOV0+PHhtbD4KKyA8dzpXb3JkRG9jdW1lbnQ+CisgIDx3OlRyYWNrUmV2aXNpb25zLz4KKyA8L3c6V29yZERvY3VtZW50PgorPC94bWw+PCFbZW5kaWZdLS0+Cis8c3R5bGU+Cis8IS0tCisgLyogRm9udCBEZWZpbml0aW9ucyAqLworQGZvbnQtZmFjZQorCXtmb250LWZhbWlseTpUYWhvbWE7CisJcGFub3NlLTE6MiAxMSA2IDQgMyA1IDQgNCAyIDQ7CisJbXNvLWZvbnQtY2hhcnNldDowOworCW1zby1nZW5lcmljLWZvbnQtZmFtaWx5OnN3aXNzOworCW1zby1mb250LXBpdGNoOnZhcmlhYmxlOworCW1zby1mb250LXNpZ25hdHVyZTo1NTM2Nzk0OTUgLTIxNDc0ODM2NDggOCAwIDY2MDQ3IDA7fQorIC8qIFN0eWxlIERlZmluaXRpb25zICovCitwLk1zb05vcm1hbCwgbGkuTXNvTm9ybWFsLCBkaXYuTXNvTm9ybWFsCisJe21zby1zdHlsZS1wYXJlbnQ6IiI7CisJbWFyZ2luOjBpbjsKKwltYXJnaW4tYm90dG9tOi4wMDAxcHQ7CisJbXNvLXBhZ2luYXRpb246d2lkb3ctb3JwaGFuOworCWZvbnQtc2l6ZToxMi4wcHQ7CisJZm9udC1mYW1pbHk6IlRpbWVzIE5ldyBSb21hbiI7CisJbXNvLWZhcmVhc3QtZm9udC1mYW1pbHk6IlRpbWVzIE5ldyBSb21hbiI7fQorcAorCXttYXJnaW4tcmlnaHQ6MGluOworCW1zby1tYXJnaW4tdG9wLWFsdDphdXRvOworCW1zby1tYXJnaW4tYm90dG9tLWFsdDphdXRvOworCW1hcmdpbi1sZWZ0OjBpbjsKKwltc28tcGFnaW5hdGlvbjp3aWRvdy1vcnBoYW47CisJZm9udC1zaXplOjEyLjBwdDsKKwlmb250LWZhbWlseToiVGltZXMgTmV3IFJvbWFuIjsKKwltc28tZmFyZWFzdC1mb250LWZhbWlseToiVGltZXMgTmV3IFJvbWFuIjt9CitwLkJhbGxvb25UZXh0LCBsaS5CYWxsb29uVGV4dCwgZGl2LkJhbGxvb25UZXh0CisJe21zby1zdHlsZS1uYW1lOiJCYWxsb29uIFRleHQiOworCW1hcmdpbjowaW47CisJbWFyZ2luLWJvdHRvbTouMDAwMXB0OworCW1zby1wYWdpbmF0aW9uOndpZG93LW9ycGhhbjsKKwlmb250LXNpemU6OC4wcHQ7CisJZm9udC1mYW1pbHk6VGFob21hOworCW1zby1mYXJlYXN0LWZvbnQtZmFtaWx5OiJUaW1lcyBOZXcgUm9tYW4iO30KK0BwYWdlIFNlY3Rpb24xCisJe3NpemU6OC41aW4gMTEuMGluOworCW1hcmdpbjoxLjBpbiAxLjI1aW4gMS4waW4gMS4yNWluOworCW1zby1oZWFkZXItbWFyZ2luOi41aW47CisJbXNvLWZvb3Rlci1tYXJnaW46LjVpbjsKKwltc28tcGFwZXItc291cmNlOjA7fQorZGl2LlNlY3Rpb24xCisJe3BhZ2U6U2VjdGlvbjE7fQorLS0+Cis8L3N0eWxlPgorPC9oZWFkPgorCis8Ym9keSBsYW5nPUVOLVVTIHN0eWxlPSd0YWItaW50ZXJ2YWw6LjVpbic+CisKKzxkaXYgY2xhc3M9U2VjdGlvbjE+CisKKzxwIGFsaWduPWNlbnRlciBzdHlsZT0ndGV4dC1hbGlnbjpjZW50ZXInPjxiPkVjbGlwc2UgUHVibGljIExpY2Vuc2UgLSB2IDEuMDwvYj4KKzwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPlRIRSBBQ0NPTVBBTllJTkcgUFJPR1JBTSBJUyBQUk9WSURFRCBVTkRFUgorVEhFIFRFUk1TIE9GIFRISVMgRUNMSVBTRSBQVUJMSUMgTElDRU5TRSAoJnF1b3Q7QUdSRUVNRU5UJnF1b3Q7KS4gQU5ZIFVTRSwKK1JFUFJPRFVDVElPTiBPUiBESVNUUklCVVRJT04gT0YgVEhFIFBST0dSQU0gQ09OU1RJVFVURVMgUkVDSVBJRU5UJ1MgQUNDRVBUQU5DRQorT0YgVEhJUyBBR1JFRU1FTlQuPC9zcGFuPiA8L3A+CisKKzxwPjxiPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4xLiBERUZJTklUSU9OUzwvc3Bhbj48L2I+IDwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPiZxdW90O0NvbnRyaWJ1dGlvbiZxdW90OyBtZWFuczo8L3NwYW4+IDwvcD4KKworPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YSkKK2luIHRoZSBjYXNlIG9mIHRoZSBpbml0aWFsIENvbnRyaWJ1dG9yLCB0aGUgaW5pdGlhbCBjb2RlIGFuZCBkb2N1bWVudGF0aW9uCitkaXN0cmlidXRlZCB1bmRlciB0aGlzIEFncmVlbWVudCwgYW5kPGJyIGNsZWFyPWxlZnQ+CitiKSBpbiB0aGUgY2FzZSBvZiBlYWNoIHN1YnNlcXVlbnQgQ29udHJpYnV0b3I6PC9zcGFuPjwvcD4KKworPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+aSkKK2NoYW5nZXMgdG8gdGhlIFByb2dyYW0sIGFuZDwvc3Bhbj48L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmlpKQorYWRkaXRpb25zIHRvIHRoZSBQcm9ncmFtOzwvc3Bhbj48L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPndoZXJlCitzdWNoIGNoYW5nZXMgYW5kL29yIGFkZGl0aW9ucyB0byB0aGUgUHJvZ3JhbSBvcmlnaW5hdGUgZnJvbSBhbmQgYXJlIGRpc3RyaWJ1dGVkCitieSB0aGF0IHBhcnRpY3VsYXIgQ29udHJpYnV0b3IuIEEgQ29udHJpYnV0aW9uICdvcmlnaW5hdGVzJyBmcm9tIGEgQ29udHJpYnV0b3IKK2lmIGl0IHdhcyBhZGRlZCB0byB0aGUgUHJvZ3JhbSBieSBzdWNoIENvbnRyaWJ1dG9yIGl0c2VsZiBvciBhbnlvbmUgYWN0aW5nIG9uCitzdWNoIENvbnRyaWJ1dG9yJ3MgYmVoYWxmLiBDb250cmlidXRpb25zIGRvIG5vdCBpbmNsdWRlIGFkZGl0aW9ucyB0byB0aGUKK1Byb2dyYW0gd2hpY2g6IChpKSBhcmUgc2VwYXJhdGUgbW9kdWxlcyBvZiBzb2Z0d2FyZSBkaXN0cmlidXRlZCBpbiBjb25qdW5jdGlvbgord2l0aCB0aGUgUHJvZ3JhbSB1bmRlciB0aGVpciBvd24gbGljZW5zZSBhZ3JlZW1lbnQsIGFuZCAoaWkpIGFyZSBub3QgZGVyaXZhdGl2ZQord29ya3Mgb2YgdGhlIFByb2dyYW0uIDwvc3Bhbj48L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4mcXVvdDtDb250cmlidXRvciZxdW90OyBtZWFucyBhbnkgcGVyc29uIG9yCitlbnRpdHkgdGhhdCBkaXN0cmlidXRlcyB0aGUgUHJvZ3JhbS48L3NwYW4+IDwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPiZxdW90O0xpY2Vuc2VkIFBhdGVudHMgJnF1b3Q7IG1lYW4gcGF0ZW50CitjbGFpbXMgbGljZW5zYWJsZSBieSBhIENvbnRyaWJ1dG9yIHdoaWNoIGFyZSBuZWNlc3NhcmlseSBpbmZyaW5nZWQgYnkgdGhlIHVzZQorb3Igc2FsZSBvZiBpdHMgQ29udHJpYnV0aW9uIGFsb25lIG9yIHdoZW4gY29tYmluZWQgd2l0aCB0aGUgUHJvZ3JhbS4gPC9zcGFuPjwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPiZxdW90O1Byb2dyYW0mcXVvdDsgbWVhbnMgdGhlIENvbnRyaWJ1dGlvbnMKK2Rpc3RyaWJ1dGVkIGluIGFjY29yZGFuY2Ugd2l0aCB0aGlzIEFncmVlbWVudC48L3NwYW4+IDwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPiZxdW90O1JlY2lwaWVudCZxdW90OyBtZWFucyBhbnlvbmUgd2hvCityZWNlaXZlcyB0aGUgUHJvZ3JhbSB1bmRlciB0aGlzIEFncmVlbWVudCwgaW5jbHVkaW5nIGFsbCBDb250cmlidXRvcnMuPC9zcGFuPiA8L3A+CisKKzxwPjxiPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4yLiBHUkFOVCBPRiBSSUdIVFM8L3NwYW4+PC9iPiA8L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmEpCitTdWJqZWN0IHRvIHRoZSB0ZXJtcyBvZiB0aGlzIEFncmVlbWVudCwgZWFjaCBDb250cmlidXRvciBoZXJlYnkgZ3JhbnRzIFJlY2lwaWVudAorYSBub24tZXhjbHVzaXZlLCB3b3JsZHdpZGUsIHJveWFsdHktZnJlZSBjb3B5cmlnaHQgbGljZW5zZSB0bzxzcGFuCitzdHlsZT0nY29sb3I6cmVkJz4gPC9zcGFuPnJlcHJvZHVjZSwgcHJlcGFyZSBkZXJpdmF0aXZlIHdvcmtzIG9mLCBwdWJsaWNseQorZGlzcGxheSwgcHVibGljbHkgcGVyZm9ybSwgZGlzdHJpYnV0ZSBhbmQgc3VibGljZW5zZSB0aGUgQ29udHJpYnV0aW9uIG9mIHN1Y2gKK0NvbnRyaWJ1dG9yLCBpZiBhbnksIGFuZCBzdWNoIGRlcml2YXRpdmUgd29ya3MsIGluIHNvdXJjZSBjb2RlIGFuZCBvYmplY3QgY29kZQorZm9ybS48L3NwYW4+PC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5iKQorU3ViamVjdCB0byB0aGUgdGVybXMgb2YgdGhpcyBBZ3JlZW1lbnQsIGVhY2ggQ29udHJpYnV0b3IgaGVyZWJ5IGdyYW50cworUmVjaXBpZW50IGEgbm9uLWV4Y2x1c2l2ZSwgd29ybGR3aWRlLDxzcGFuIHN0eWxlPSdjb2xvcjpncmVlbic+IDwvc3Bhbj5yb3lhbHR5LWZyZWUKK3BhdGVudCBsaWNlbnNlIHVuZGVyIExpY2Vuc2VkIFBhdGVudHMgdG8gbWFrZSwgdXNlLCBzZWxsLCBvZmZlciB0byBzZWxsLCBpbXBvcnQKK2FuZCBvdGhlcndpc2UgdHJhbnNmZXIgdGhlIENvbnRyaWJ1dGlvbiBvZiBzdWNoIENvbnRyaWJ1dG9yLCBpZiBhbnksIGluIHNvdXJjZQorY29kZSBhbmQgb2JqZWN0IGNvZGUgZm9ybS4gVGhpcyBwYXRlbnQgbGljZW5zZSBzaGFsbCBhcHBseSB0byB0aGUgY29tYmluYXRpb24KK29mIHRoZSBDb250cmlidXRpb24gYW5kIHRoZSBQcm9ncmFtIGlmLCBhdCB0aGUgdGltZSB0aGUgQ29udHJpYnV0aW9uIGlzIGFkZGVkCitieSB0aGUgQ29udHJpYnV0b3IsIHN1Y2ggYWRkaXRpb24gb2YgdGhlIENvbnRyaWJ1dGlvbiBjYXVzZXMgc3VjaCBjb21iaW5hdGlvbgordG8gYmUgY292ZXJlZCBieSB0aGUgTGljZW5zZWQgUGF0ZW50cy4gVGhlIHBhdGVudCBsaWNlbnNlIHNoYWxsIG5vdCBhcHBseSB0bworYW55IG90aGVyIGNvbWJpbmF0aW9ucyB3aGljaCBpbmNsdWRlIHRoZSBDb250cmlidXRpb24uIE5vIGhhcmR3YXJlIHBlciBzZSBpcworbGljZW5zZWQgaGVyZXVuZGVyLiA8L3NwYW4+PC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5jKQorUmVjaXBpZW50IHVuZGVyc3RhbmRzIHRoYXQgYWx0aG91Z2ggZWFjaCBDb250cmlidXRvciBncmFudHMgdGhlIGxpY2Vuc2VzIHRvIGl0cworQ29udHJpYnV0aW9ucyBzZXQgZm9ydGggaGVyZWluLCBubyBhc3N1cmFuY2VzIGFyZSBwcm92aWRlZCBieSBhbnkgQ29udHJpYnV0b3IKK3RoYXQgdGhlIFByb2dyYW0gZG9lcyBub3QgaW5mcmluZ2UgdGhlIHBhdGVudCBvciBvdGhlciBpbnRlbGxlY3R1YWwgcHJvcGVydHkKK3JpZ2h0cyBvZiBhbnkgb3RoZXIgZW50aXR5LiBFYWNoIENvbnRyaWJ1dG9yIGRpc2NsYWltcyBhbnkgbGlhYmlsaXR5IHRvIFJlY2lwaWVudAorZm9yIGNsYWltcyBicm91Z2h0IGJ5IGFueSBvdGhlciBlbnRpdHkgYmFzZWQgb24gaW5mcmluZ2VtZW50IG9mIGludGVsbGVjdHVhbAorcHJvcGVydHkgcmlnaHRzIG9yIG90aGVyd2lzZS4gQXMgYSBjb25kaXRpb24gdG8gZXhlcmNpc2luZyB0aGUgcmlnaHRzIGFuZAorbGljZW5zZXMgZ3JhbnRlZCBoZXJldW5kZXIsIGVhY2ggUmVjaXBpZW50IGhlcmVieSBhc3N1bWVzIHNvbGUgcmVzcG9uc2liaWxpdHkKK3RvIHNlY3VyZSBhbnkgb3RoZXIgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBuZWVkZWQsIGlmIGFueS4gRm9yIGV4YW1wbGUsCitpZiBhIHRoaXJkIHBhcnR5IHBhdGVudCBsaWNlbnNlIGlzIHJlcXVpcmVkIHRvIGFsbG93IFJlY2lwaWVudCB0byBkaXN0cmlidXRlCit0aGUgUHJvZ3JhbSwgaXQgaXMgUmVjaXBpZW50J3MgcmVzcG9uc2liaWxpdHkgdG8gYWNxdWlyZSB0aGF0IGxpY2Vuc2UgYmVmb3JlCitkaXN0cmlidXRpbmcgdGhlIFByb2dyYW0uPC9zcGFuPjwvcD4KKworPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+ZCkKK0VhY2ggQ29udHJpYnV0b3IgcmVwcmVzZW50cyB0aGF0IHRvIGl0cyBrbm93bGVkZ2UgaXQgaGFzIHN1ZmZpY2llbnQgY29weXJpZ2h0CityaWdodHMgaW4gaXRzIENvbnRyaWJ1dGlvbiwgaWYgYW55LCB0byBncmFudCB0aGUgY29weXJpZ2h0IGxpY2Vuc2Ugc2V0IGZvcnRoIGluCit0aGlzIEFncmVlbWVudC4gPC9zcGFuPjwvcD4KKworPHA+PGI+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPjMuIFJFUVVJUkVNRU5UUzwvc3Bhbj48L2I+IDwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkEgQ29udHJpYnV0b3IgbWF5IGNob29zZSB0byBkaXN0cmlidXRlIHRoZQorUHJvZ3JhbSBpbiBvYmplY3QgY29kZSBmb3JtIHVuZGVyIGl0cyBvd24gbGljZW5zZSBhZ3JlZW1lbnQsIHByb3ZpZGVkIHRoYXQ6PC9zcGFuPgorPC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5hKQoraXQgY29tcGxpZXMgd2l0aCB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhpcyBBZ3JlZW1lbnQ7IGFuZDwvc3Bhbj48L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmIpCitpdHMgbGljZW5zZSBhZ3JlZW1lbnQ6PC9zcGFuPjwvcD4KKworPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+aSkKK2VmZmVjdGl2ZWx5IGRpc2NsYWltcyBvbiBiZWhhbGYgb2YgYWxsIENvbnRyaWJ1dG9ycyBhbGwgd2FycmFudGllcyBhbmQKK2NvbmRpdGlvbnMsIGV4cHJlc3MgYW5kIGltcGxpZWQsIGluY2x1ZGluZyB3YXJyYW50aWVzIG9yIGNvbmRpdGlvbnMgb2YgdGl0bGUKK2FuZCBub24taW5mcmluZ2VtZW50LCBhbmQgaW1wbGllZCB3YXJyYW50aWVzIG9yIGNvbmRpdGlvbnMgb2YgbWVyY2hhbnRhYmlsaXR5CithbmQgZml0bmVzcyBmb3IgYSBwYXJ0aWN1bGFyIHB1cnBvc2U7IDwvc3Bhbj48L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmlpKQorZWZmZWN0aXZlbHkgZXhjbHVkZXMgb24gYmVoYWxmIG9mIGFsbCBDb250cmlidXRvcnMgYWxsIGxpYWJpbGl0eSBmb3IgZGFtYWdlcywKK2luY2x1ZGluZyBkaXJlY3QsIGluZGlyZWN0LCBzcGVjaWFsLCBpbmNpZGVudGFsIGFuZCBjb25zZXF1ZW50aWFsIGRhbWFnZXMsIHN1Y2gKK2FzIGxvc3QgcHJvZml0czsgPC9zcGFuPjwvcD4KKworPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+aWlpKQorc3RhdGVzIHRoYXQgYW55IHByb3Zpc2lvbnMgd2hpY2ggZGlmZmVyIGZyb20gdGhpcyBBZ3JlZW1lbnQgYXJlIG9mZmVyZWQgYnkgdGhhdAorQ29udHJpYnV0b3IgYWxvbmUgYW5kIG5vdCBieSBhbnkgb3RoZXIgcGFydHk7IGFuZDwvc3Bhbj48L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPml2KQorc3RhdGVzIHRoYXQgc291cmNlIGNvZGUgZm9yIHRoZSBQcm9ncmFtIGlzIGF2YWlsYWJsZSBmcm9tIHN1Y2ggQ29udHJpYnV0b3IsIGFuZAoraW5mb3JtcyBsaWNlbnNlZXMgaG93IHRvIG9idGFpbiBpdCBpbiBhIHJlYXNvbmFibGUgbWFubmVyIG9uIG9yIHRocm91Z2ggYQorbWVkaXVtIGN1c3RvbWFyaWx5IHVzZWQgZm9yIHNvZnR3YXJlIGV4Y2hhbmdlLjxzcGFuIHN0eWxlPSdjb2xvcjpibHVlJz4gPC9zcGFuPjwvc3Bhbj48L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5XaGVuIHRoZSBQcm9ncmFtIGlzIG1hZGUgYXZhaWxhYmxlIGluIHNvdXJjZQorY29kZSBmb3JtOjwvc3Bhbj4gPC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5hKQoraXQgbXVzdCBiZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGlzIEFncmVlbWVudDsgYW5kIDwvc3Bhbj48L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmIpIGEKK2NvcHkgb2YgdGhpcyBBZ3JlZW1lbnQgbXVzdCBiZSBpbmNsdWRlZCB3aXRoIGVhY2ggY29weSBvZiB0aGUgUHJvZ3JhbS4gPC9zcGFuPjwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkNvbnRyaWJ1dG9ycyBtYXkgbm90IHJlbW92ZSBvciBhbHRlciBhbnkKK2NvcHlyaWdodCBub3RpY2VzIGNvbnRhaW5lZCB3aXRoaW4gdGhlIFByb2dyYW0uIDwvc3Bhbj48L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5FYWNoIENvbnRyaWJ1dG9yIG11c3QgaWRlbnRpZnkgaXRzZWxmIGFzIHRoZQorb3JpZ2luYXRvciBvZiBpdHMgQ29udHJpYnV0aW9uLCBpZiBhbnksIGluIGEgbWFubmVyIHRoYXQgcmVhc29uYWJseSBhbGxvd3MKK3N1YnNlcXVlbnQgUmVjaXBpZW50cyB0byBpZGVudGlmeSB0aGUgb3JpZ2luYXRvciBvZiB0aGUgQ29udHJpYnV0aW9uLiA8L3NwYW4+PC9wPgorCis8cD48Yj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+NC4gQ09NTUVSQ0lBTCBESVNUUklCVVRJT048L3NwYW4+PC9iPiA8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5Db21tZXJjaWFsIGRpc3RyaWJ1dG9ycyBvZiBzb2Z0d2FyZSBtYXkKK2FjY2VwdCBjZXJ0YWluIHJlc3BvbnNpYmlsaXRpZXMgd2l0aCByZXNwZWN0IHRvIGVuZCB1c2VycywgYnVzaW5lc3MgcGFydG5lcnMKK2FuZCB0aGUgbGlrZS4gV2hpbGUgdGhpcyBsaWNlbnNlIGlzIGludGVuZGVkIHRvIGZhY2lsaXRhdGUgdGhlIGNvbW1lcmNpYWwgdXNlCitvZiB0aGUgUHJvZ3JhbSwgdGhlIENvbnRyaWJ1dG9yIHdobyBpbmNsdWRlcyB0aGUgUHJvZ3JhbSBpbiBhIGNvbW1lcmNpYWwKK3Byb2R1Y3Qgb2ZmZXJpbmcgc2hvdWxkIGRvIHNvIGluIGEgbWFubmVyIHdoaWNoIGRvZXMgbm90IGNyZWF0ZSBwb3RlbnRpYWwKK2xpYWJpbGl0eSBmb3Igb3RoZXIgQ29udHJpYnV0b3JzLiBUaGVyZWZvcmUsIGlmIGEgQ29udHJpYnV0b3IgaW5jbHVkZXMgdGhlCitQcm9ncmFtIGluIGEgY29tbWVyY2lhbCBwcm9kdWN0IG9mZmVyaW5nLCBzdWNoIENvbnRyaWJ1dG9yICgmcXVvdDtDb21tZXJjaWFsCitDb250cmlidXRvciZxdW90OykgaGVyZWJ5IGFncmVlcyB0byBkZWZlbmQgYW5kIGluZGVtbmlmeSBldmVyeSBvdGhlcgorQ29udHJpYnV0b3IgKCZxdW90O0luZGVtbmlmaWVkIENvbnRyaWJ1dG9yJnF1b3Q7KSBhZ2FpbnN0IGFueSBsb3NzZXMsIGRhbWFnZXMgYW5kCitjb3N0cyAoY29sbGVjdGl2ZWx5ICZxdW90O0xvc3NlcyZxdW90OykgYXJpc2luZyBmcm9tIGNsYWltcywgbGF3c3VpdHMgYW5kIG90aGVyCitsZWdhbCBhY3Rpb25zIGJyb3VnaHQgYnkgYSB0aGlyZCBwYXJ0eSBhZ2FpbnN0IHRoZSBJbmRlbW5pZmllZCBDb250cmlidXRvciB0bwordGhlIGV4dGVudCBjYXVzZWQgYnkgdGhlIGFjdHMgb3Igb21pc3Npb25zIG9mIHN1Y2ggQ29tbWVyY2lhbCBDb250cmlidXRvciBpbgorY29ubmVjdGlvbiB3aXRoIGl0cyBkaXN0cmlidXRpb24gb2YgdGhlIFByb2dyYW0gaW4gYSBjb21tZXJjaWFsIHByb2R1Y3QKK29mZmVyaW5nLiBUaGUgb2JsaWdhdGlvbnMgaW4gdGhpcyBzZWN0aW9uIGRvIG5vdCBhcHBseSB0byBhbnkgY2xhaW1zIG9yIExvc3NlcworcmVsYXRpbmcgdG8gYW55IGFjdHVhbCBvciBhbGxlZ2VkIGludGVsbGVjdHVhbCBwcm9wZXJ0eSBpbmZyaW5nZW1lbnQuIEluIG9yZGVyCit0byBxdWFsaWZ5LCBhbiBJbmRlbW5pZmllZCBDb250cmlidXRvciBtdXN0OiBhKSBwcm9tcHRseSBub3RpZnkgdGhlIENvbW1lcmNpYWwKK0NvbnRyaWJ1dG9yIGluIHdyaXRpbmcgb2Ygc3VjaCBjbGFpbSwgYW5kIGIpIGFsbG93IHRoZSBDb21tZXJjaWFsIENvbnRyaWJ1dG9yCit0byBjb250cm9sLCBhbmQgY29vcGVyYXRlIHdpdGggdGhlIENvbW1lcmNpYWwgQ29udHJpYnV0b3IgaW4sIHRoZSBkZWZlbnNlIGFuZAorYW55IHJlbGF0ZWQgc2V0dGxlbWVudCBuZWdvdGlhdGlvbnMuIFRoZSBJbmRlbW5pZmllZCBDb250cmlidXRvciBtYXkgcGFydGljaXBhdGUKK2luIGFueSBzdWNoIGNsYWltIGF0IGl0cyBvd24gZXhwZW5zZS48L3NwYW4+IDwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkZvciBleGFtcGxlLCBhIENvbnRyaWJ1dG9yIG1pZ2h0IGluY2x1ZGUgdGhlCitQcm9ncmFtIGluIGEgY29tbWVyY2lhbCBwcm9kdWN0IG9mZmVyaW5nLCBQcm9kdWN0IFguIFRoYXQgQ29udHJpYnV0b3IgaXMgdGhlbiBhCitDb21tZXJjaWFsIENvbnRyaWJ1dG9yLiBJZiB0aGF0IENvbW1lcmNpYWwgQ29udHJpYnV0b3IgdGhlbiBtYWtlcyBwZXJmb3JtYW5jZQorY2xhaW1zLCBvciBvZmZlcnMgd2FycmFudGllcyByZWxhdGVkIHRvIFByb2R1Y3QgWCwgdGhvc2UgcGVyZm9ybWFuY2UgY2xhaW1zIGFuZAord2FycmFudGllcyBhcmUgc3VjaCBDb21tZXJjaWFsIENvbnRyaWJ1dG9yJ3MgcmVzcG9uc2liaWxpdHkgYWxvbmUuIFVuZGVyIHRoaXMKK3NlY3Rpb24sIHRoZSBDb21tZXJjaWFsIENvbnRyaWJ1dG9yIHdvdWxkIGhhdmUgdG8gZGVmZW5kIGNsYWltcyBhZ2FpbnN0IHRoZQorb3RoZXIgQ29udHJpYnV0b3JzIHJlbGF0ZWQgdG8gdGhvc2UgcGVyZm9ybWFuY2UgY2xhaW1zIGFuZCB3YXJyYW50aWVzLCBhbmQgaWYgYQorY291cnQgcmVxdWlyZXMgYW55IG90aGVyIENvbnRyaWJ1dG9yIHRvIHBheSBhbnkgZGFtYWdlcyBhcyBhIHJlc3VsdCwgdGhlCitDb21tZXJjaWFsIENvbnRyaWJ1dG9yIG11c3QgcGF5IHRob3NlIGRhbWFnZXMuPC9zcGFuPiA8L3A+CisKKzxwPjxiPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz41LiBOTyBXQVJSQU5UWTwvc3Bhbj48L2I+IDwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkVYQ0VQVCBBUyBFWFBSRVNTTFkgU0VUIEZPUlRIIElOIFRISVMKK0FHUkVFTUVOVCwgVEhFIFBST0dSQU0gSVMgUFJPVklERUQgT04gQU4gJnF1b3Q7QVMgSVMmcXVvdDsgQkFTSVMsIFdJVEhPVVQKK1dBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgRUlUSEVSIEVYUFJFU1MgT1IgSU1QTElFRCBJTkNMVURJTkcsCitXSVRIT1VUIExJTUlUQVRJT04sIEFOWSBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgVElUTEUsIE5PTi1JTkZSSU5HRU1FTlQsCitNRVJDSEFOVEFCSUxJVFkgT1IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIEVhY2ggUmVjaXBpZW50IGlzIHNvbGVseQorcmVzcG9uc2libGUgZm9yIGRldGVybWluaW5nIHRoZSBhcHByb3ByaWF0ZW5lc3Mgb2YgdXNpbmcgYW5kIGRpc3RyaWJ1dGluZyB0aGUKK1Byb2dyYW0gYW5kIGFzc3VtZXMgYWxsIHJpc2tzIGFzc29jaWF0ZWQgd2l0aCBpdHMgZXhlcmNpc2Ugb2YgcmlnaHRzIHVuZGVyIHRoaXMKK0FncmVlbWVudCAsIGluY2x1ZGluZyBidXQgbm90IGxpbWl0ZWQgdG8gdGhlIHJpc2tzIGFuZCBjb3N0cyBvZiBwcm9ncmFtIGVycm9ycywKK2NvbXBsaWFuY2Ugd2l0aCBhcHBsaWNhYmxlIGxhd3MsIGRhbWFnZSB0byBvciBsb3NzIG9mIGRhdGEsIHByb2dyYW1zIG9yCitlcXVpcG1lbnQsIGFuZCB1bmF2YWlsYWJpbGl0eSBvciBpbnRlcnJ1cHRpb24gb2Ygb3BlcmF0aW9ucy4gPC9zcGFuPjwvcD4KKworPHA+PGI+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPjYuIERJU0NMQUlNRVIgT0YgTElBQklMSVRZPC9zcGFuPjwvYj4gPC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+RVhDRVBUIEFTIEVYUFJFU1NMWSBTRVQgRk9SVEggSU4gVEhJUworQUdSRUVNRU5ULCBORUlUSEVSIFJFQ0lQSUVOVCBOT1IgQU5ZIENPTlRSSUJVVE9SUyBTSEFMTCBIQVZFIEFOWSBMSUFCSUxJVFkgRk9SCitBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyhJTkNMVURJTkcgV0lUSE9VVCBMSU1JVEFUSU9OIExPU1QgUFJPRklUUyksIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCitPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORworTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPUiBESVNUUklCVVRJT04gT0YKK1RIRSBQUk9HUkFNIE9SIFRIRSBFWEVSQ0lTRSBPRiBBTlkgUklHSFRTIEdSQU5URUQgSEVSRVVOREVSLCBFVkVOIElGIEFEVklTRUQgT0YKK1RIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRVMuPC9zcGFuPiA8L3A+CisKKzxwPjxiPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz43LiBHRU5FUkFMPC9zcGFuPjwvYj4gPC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+SWYgYW55IHByb3Zpc2lvbiBvZiB0aGlzIEFncmVlbWVudCBpcyBpbnZhbGlkCitvciB1bmVuZm9yY2VhYmxlIHVuZGVyIGFwcGxpY2FibGUgbGF3LCBpdCBzaGFsbCBub3QgYWZmZWN0IHRoZSB2YWxpZGl0eSBvcgorZW5mb3JjZWFiaWxpdHkgb2YgdGhlIHJlbWFpbmRlciBvZiB0aGUgdGVybXMgb2YgdGhpcyBBZ3JlZW1lbnQsIGFuZCB3aXRob3V0CitmdXJ0aGVyIGFjdGlvbiBieSB0aGUgcGFydGllcyBoZXJldG8sIHN1Y2ggcHJvdmlzaW9uIHNoYWxsIGJlIHJlZm9ybWVkIHRvIHRoZQorbWluaW11bSBleHRlbnQgbmVjZXNzYXJ5IHRvIG1ha2Ugc3VjaCBwcm92aXNpb24gdmFsaWQgYW5kIGVuZm9yY2VhYmxlLjwvc3Bhbj4gPC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+SWYgUmVjaXBpZW50IGluc3RpdHV0ZXMgcGF0ZW50IGxpdGlnYXRpb24KK2FnYWluc3QgYW55IGVudGl0eSAoaW5jbHVkaW5nIGEgY3Jvc3MtY2xhaW0gb3IgY291bnRlcmNsYWltIGluIGEgbGF3c3VpdCkKK2FsbGVnaW5nIHRoYXQgdGhlIFByb2dyYW0gaXRzZWxmIChleGNsdWRpbmcgY29tYmluYXRpb25zIG9mIHRoZSBQcm9ncmFtIHdpdGgKK290aGVyIHNvZnR3YXJlIG9yIGhhcmR3YXJlKSBpbmZyaW5nZXMgc3VjaCBSZWNpcGllbnQncyBwYXRlbnQocyksIHRoZW4gc3VjaAorUmVjaXBpZW50J3MgcmlnaHRzIGdyYW50ZWQgdW5kZXIgU2VjdGlvbiAyKGIpIHNoYWxsIHRlcm1pbmF0ZSBhcyBvZiB0aGUgZGF0ZQorc3VjaCBsaXRpZ2F0aW9uIGlzIGZpbGVkLiA8L3NwYW4+PC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+QWxsIFJlY2lwaWVudCdzIHJpZ2h0cyB1bmRlciB0aGlzIEFncmVlbWVudAorc2hhbGwgdGVybWluYXRlIGlmIGl0IGZhaWxzIHRvIGNvbXBseSB3aXRoIGFueSBvZiB0aGUgbWF0ZXJpYWwgdGVybXMgb3IKK2NvbmRpdGlvbnMgb2YgdGhpcyBBZ3JlZW1lbnQgYW5kIGRvZXMgbm90IGN1cmUgc3VjaCBmYWlsdXJlIGluIGEgcmVhc29uYWJsZQorcGVyaW9kIG9mIHRpbWUgYWZ0ZXIgYmVjb21pbmcgYXdhcmUgb2Ygc3VjaCBub25jb21wbGlhbmNlLiBJZiBhbGwgUmVjaXBpZW50J3MKK3JpZ2h0cyB1bmRlciB0aGlzIEFncmVlbWVudCB0ZXJtaW5hdGUsIFJlY2lwaWVudCBhZ3JlZXMgdG8gY2Vhc2UgdXNlIGFuZAorZGlzdHJpYnV0aW9uIG9mIHRoZSBQcm9ncmFtIGFzIHNvb24gYXMgcmVhc29uYWJseSBwcmFjdGljYWJsZS4gSG93ZXZlciwKK1JlY2lwaWVudCdzIG9ibGlnYXRpb25zIHVuZGVyIHRoaXMgQWdyZWVtZW50IGFuZCBhbnkgbGljZW5zZXMgZ3JhbnRlZCBieQorUmVjaXBpZW50IHJlbGF0aW5nIHRvIHRoZSBQcm9ncmFtIHNoYWxsIGNvbnRpbnVlIGFuZCBzdXJ2aXZlLiA8L3NwYW4+PC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+RXZlcnlvbmUgaXMgcGVybWl0dGVkIHRvIGNvcHkgYW5kIGRpc3RyaWJ1dGUKK2NvcGllcyBvZiB0aGlzIEFncmVlbWVudCwgYnV0IGluIG9yZGVyIHRvIGF2b2lkIGluY29uc2lzdGVuY3kgdGhlIEFncmVlbWVudCBpcworY29weXJpZ2h0ZWQgYW5kIG1heSBvbmx5IGJlIG1vZGlmaWVkIGluIHRoZSBmb2xsb3dpbmcgbWFubmVyLiBUaGUgQWdyZWVtZW50CitTdGV3YXJkIHJlc2VydmVzIHRoZSByaWdodCB0byBwdWJsaXNoIG5ldyB2ZXJzaW9ucyAoaW5jbHVkaW5nIHJldmlzaW9ucykgb2YKK3RoaXMgQWdyZWVtZW50IGZyb20gdGltZSB0byB0aW1lLiBObyBvbmUgb3RoZXIgdGhhbiB0aGUgQWdyZWVtZW50IFN0ZXdhcmQgaGFzCit0aGUgcmlnaHQgdG8gbW9kaWZ5IHRoaXMgQWdyZWVtZW50LiBUaGUgRWNsaXBzZSBGb3VuZGF0aW9uIGlzIHRoZSBpbml0aWFsCitBZ3JlZW1lbnQgU3Rld2FyZC4gVGhlIEVjbGlwc2UgRm91bmRhdGlvbiBtYXkgYXNzaWduIHRoZSByZXNwb25zaWJpbGl0eSB0bworc2VydmUgYXMgdGhlIEFncmVlbWVudCBTdGV3YXJkIHRvIGEgc3VpdGFibGUgc2VwYXJhdGUgZW50aXR5LiBFYWNoIG5ldyB2ZXJzaW9uCitvZiB0aGUgQWdyZWVtZW50IHdpbGwgYmUgZ2l2ZW4gYSBkaXN0aW5ndWlzaGluZyB2ZXJzaW9uIG51bWJlci4gVGhlIFByb2dyYW0KKyhpbmNsdWRpbmcgQ29udHJpYnV0aW9ucykgbWF5IGFsd2F5cyBiZSBkaXN0cmlidXRlZCBzdWJqZWN0IHRvIHRoZSB2ZXJzaW9uIG9mCit0aGUgQWdyZWVtZW50IHVuZGVyIHdoaWNoIGl0IHdhcyByZWNlaXZlZC4gSW4gYWRkaXRpb24sIGFmdGVyIGEgbmV3IHZlcnNpb24gb2YKK3RoZSBBZ3JlZW1lbnQgaXMgcHVibGlzaGVkLCBDb250cmlidXRvciBtYXkgZWxlY3QgdG8gZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbQorKGluY2x1ZGluZyBpdHMgQ29udHJpYnV0aW9ucykgdW5kZXIgdGhlIG5ldyB2ZXJzaW9uLiBFeGNlcHQgYXMgZXhwcmVzc2x5IHN0YXRlZAoraW4gU2VjdGlvbnMgMihhKSBhbmQgMihiKSBhYm92ZSwgUmVjaXBpZW50IHJlY2VpdmVzIG5vIHJpZ2h0cyBvciBsaWNlbnNlcyB0bwordGhlIGludGVsbGVjdHVhbCBwcm9wZXJ0eSBvZiBhbnkgQ29udHJpYnV0b3IgdW5kZXIgdGhpcyBBZ3JlZW1lbnQsIHdoZXRoZXIKK2V4cHJlc3NseSwgYnkgaW1wbGljYXRpb24sIGVzdG9wcGVsIG9yIG90aGVyd2lzZS4gQWxsIHJpZ2h0cyBpbiB0aGUgUHJvZ3JhbSBub3QKK2V4cHJlc3NseSBncmFudGVkIHVuZGVyIHRoaXMgQWdyZWVtZW50IGFyZSByZXNlcnZlZC48L3NwYW4+IDwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPlRoaXMgQWdyZWVtZW50IGlzIGdvdmVybmVkIGJ5IHRoZSBsYXdzIG9mIHRoZQorU3RhdGUgb2YgTmV3IFlvcmsgYW5kIHRoZSBpbnRlbGxlY3R1YWwgcHJvcGVydHkgbGF3cyBvZiB0aGUgVW5pdGVkIFN0YXRlcyBvZgorQW1lcmljYS4gTm8gcGFydHkgdG8gdGhpcyBBZ3JlZW1lbnQgd2lsbCBicmluZyBhIGxlZ2FsIGFjdGlvbiB1bmRlciB0aGlzCitBZ3JlZW1lbnQgbW9yZSB0aGFuIG9uZSB5ZWFyIGFmdGVyIHRoZSBjYXVzZSBvZiBhY3Rpb24gYXJvc2UuIEVhY2ggcGFydHkgd2FpdmVzCitpdHMgcmlnaHRzIHRvIGEganVyeSB0cmlhbCBpbiBhbnkgcmVzdWx0aW5nIGxpdGlnYXRpb24uPC9zcGFuPiA8L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbD48IVtpZiAhc3VwcG9ydEVtcHR5UGFyYXNdPiZuYnNwOzwhW2VuZGlmXT48bzpwPjwvbzpwPjwvcD4KKworPC9kaXY+CisKKzwvYm9keT4KKworPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0uc2FtcGxlL25vdGljZS5odG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS5zYW1wbGUvbm90aWNlLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzZhZjk2NgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0uc2FtcGxlL25vdGljZS5odG1sCkBAIC0wLDAgKzEsNzkgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAvL0VOIj4KKzxodG1sPgorPGhlYWQ+Cis8bWV0YSBodHRwLWVxdWl2PUNvbnRlbnQtVHlwZSBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9aXNvLTg4NTktMSI+Cis8dGl0bGU+RWNsaXBzZS5vcmcgU29mdHdhcmUgVXNlciBBZ3JlZW1lbnQ8L3RpdGxlPgorPC9oZWFkPgorCis8Ym9keSBsYW5nPSJFTi1VUyIgbGluaz1ibHVlIHZsaW5rPXB1cnBsZT4KKzxoMj5FY2xpcHNlIEZvdW5kYXRpb24gU29mdHdhcmUgVXNlciBBZ3JlZW1lbnQ8L2gyPgorPHA+TWFyY2ggMTcsIDIwMDU8L3A+CisKKzxoMz5Vc2FnZSBPZiBDb250ZW50PC9oMz4KKworPHA+VEhFIEVDTElQU0UgRk9VTkRBVElPTiBNQUtFUyBBVkFJTEFCTEUgU09GVFdBUkUsIERPQ1VNRU5UQVRJT04sIElORk9STUFUSU9OIEFORC9PUiBPVEhFUiBNQVRFUklBTFMgRk9SIE9QRU4gU09VUkNFIFBST0pFQ1RTCisgICAoQ09MTEVDVElWRUxZICZxdW90O0NPTlRFTlQmcXVvdDspLiAgVVNFIE9GIFRIRSBDT05URU5UIElTIEdPVkVSTkVEIEJZIFRIRSBURVJNUyBBTkQgQ09ORElUSU9OUyBPRiBUSElTIEFHUkVFTUVOVCBBTkQvT1IgVEhFIFRFUk1TIEFORAorICAgQ09ORElUSU9OUyBPRiBMSUNFTlNFIEFHUkVFTUVOVFMgT1IgTk9USUNFUyBJTkRJQ0FURUQgT1IgUkVGRVJFTkNFRCBCRUxPVy4gIEJZIFVTSU5HIFRIRSBDT05URU5ULCBZT1UgQUdSRUUgVEhBVCBZT1VSIFVTRQorICAgT0YgVEhFIENPTlRFTlQgSVMgR09WRVJORUQgQlkgVEhJUyBBR1JFRU1FTlQgQU5EL09SIFRIRSBURVJNUyBBTkQgQ09ORElUSU9OUyBPRiBBTlkgQVBQTElDQUJMRSBMSUNFTlNFIEFHUkVFTUVOVFMgT1IKKyAgIE5PVElDRVMgSU5ESUNBVEVEIE9SIFJFRkVSRU5DRUQgQkVMT1cuICBJRiBZT1UgRE8gTk9UIEFHUkVFIFRPIFRIRSBURVJNUyBBTkQgQ09ORElUSU9OUyBPRiBUSElTIEFHUkVFTUVOVCBBTkQgVEhFIFRFUk1TIEFORAorICAgQ09ORElUSU9OUyBPRiBBTlkgQVBQTElDQUJMRSBMSUNFTlNFIEFHUkVFTUVOVFMgT1IgTk9USUNFUyBJTkRJQ0FURUQgT1IgUkVGRVJFTkNFRCBCRUxPVywgVEhFTiBZT1UgTUFZIE5PVCBVU0UgVEhFIENPTlRFTlQuPC9wPgorICAgCis8aDM+QXBwbGljYWJsZSBMaWNlbnNlczwvaDM+ICAgCisgICAKKzxwPlVubGVzcyBvdGhlcndpc2UgaW5kaWNhdGVkLCBhbGwgQ29udGVudCBtYWRlIGF2YWlsYWJsZSBieSB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uIGlzIHByb3ZpZGVkIHRvIHlvdSB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjAKKyAgICgmcXVvdDtFUEwmcXVvdDspLiAgQSBjb3B5IG9mIHRoZSBFUEwgaXMgcHJvdmlkZWQgd2l0aCB0aGlzIENvbnRlbnQgYW5kIGlzIGFsc28gYXZhaWxhYmxlIGF0IDxhIGhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sIj5odHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbDwvYT4uCisgICBGb3IgcHVycG9zZXMgb2YgdGhlIEVQTCwgJnF1b3Q7UHJvZ3JhbSZxdW90OyB3aWxsIG1lYW4gdGhlIENvbnRlbnQuPC9wPgorCis8cD5Db250ZW50IGluY2x1ZGVzLCBidXQgaXMgbm90IGxpbWl0ZWQgdG8sIHNvdXJjZSBjb2RlLCBvYmplY3QgY29kZSwgZG9jdW1lbnRhdGlvbiBhbmQgb3RoZXIgZmlsZXMgbWFpbnRhaW5lZCBpbiB0aGUgRWNsaXBzZS5vcmcgQ1ZTIHJlcG9zaXRvcnkgKCZxdW90O1JlcG9zaXRvcnkmcXVvdDspIGluIENWUworICAgbW9kdWxlcyAoJnF1b3Q7TW9kdWxlcyZxdW90OykgYW5kIG1hZGUgYXZhaWxhYmxlIGFzIGRvd25sb2FkYWJsZSBhcmNoaXZlcyAoJnF1b3Q7RG93bmxvYWRzJnF1b3Q7KS48L3A+CisgICAKKzx1bD4KKwk8bGk+Q29udGVudCBtYXkgYmUgc3RydWN0dXJlZCBhbmQgcGFja2FnZWQgaW50byBtb2R1bGVzIHRvIGZhY2lsaXRhdGUgZGVsaXZlcmluZywgZXh0ZW5kaW5nLCBhbmQgdXBncmFkaW5nIHRoZSBDb250ZW50LiAgVHlwaWNhbCBtb2R1bGVzIG1heSBpbmNsdWRlIHBsdWctaW5zICgmcXVvdDtQbHVnLWlucyZxdW90OyksIHBsdWctaW4gZnJhZ21lbnRzICgmcXVvdDtGcmFnbWVudHMmcXVvdDspLCBhbmQgZmVhdHVyZXMgKCZxdW90O0ZlYXR1cmVzJnF1b3Q7KS48L2xpPgorCTxsaT5FYWNoIFBsdWctaW4gb3IgRnJhZ21lbnQgbWF5IGJlIHBhY2thZ2VkIGFzIGEgc3ViLWRpcmVjdG9yeSBvciBKQVIgKEphdmEmdHJhZGU7IEFSY2hpdmUpIGluIGEgZGlyZWN0b3J5IG5hbWVkICZxdW90O3BsdWdpbnMmcXVvdDsuPC9saT4KKwk8bGk+QSBGZWF0dXJlIGlzIGEgYnVuZGxlIG9mIG9uZSBvciBtb3JlIFBsdWctaW5zIGFuZC9vciBGcmFnbWVudHMgYW5kIGFzc29jaWF0ZWQgbWF0ZXJpYWwuICBFYWNoIEZlYXR1cmUgbWF5IGJlIHBhY2thZ2VkIGFzIGEgc3ViLWRpcmVjdG9yeSBpbiBhIGRpcmVjdG9yeSBuYW1lZCAmcXVvdDtmZWF0dXJlcyZxdW90Oy4gIFdpdGhpbiBhIEZlYXR1cmUsIGZpbGVzIG5hbWVkICZxdW90O2ZlYXR1cmUueG1sJnF1b3Q7IG1heSBjb250YWluIGEgbGlzdCBvZiB0aGUgbmFtZXMgYW5kIHZlcnNpb24gbnVtYmVycyBvZiB0aGUgUGx1Zy1pbnMKKyAgICAgIGFuZC9vciBGcmFnbWVudHMgYXNzb2NpYXRlZCB3aXRoIHRoYXQgRmVhdHVyZS48L2xpPgorCTxsaT5GZWF0dXJlcyBtYXkgYWxzbyBpbmNsdWRlIG90aGVyIEZlYXR1cmVzICgmcXVvdDtJbmNsdWRlZCBGZWF0dXJlcyZxdW90OykuIFdpdGhpbiBhIEZlYXR1cmUsIGZpbGVzIG5hbWVkICZxdW90O2ZlYXR1cmUueG1sJnF1b3Q7IG1heSBjb250YWluIGEgbGlzdCBvZiB0aGUgbmFtZXMgYW5kIHZlcnNpb24gbnVtYmVycyBvZiBJbmNsdWRlZCBGZWF0dXJlcy48L2xpPgorPC91bD4gICAKKyAKKzxwPlRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBnb3Zlcm5pbmcgUGx1Zy1pbnMgYW5kIEZyYWdtZW50cyBzaG91bGQgYmUgY29udGFpbmVkIGluIGZpbGVzIG5hbWVkICZxdW90O2Fib3V0Lmh0bWwmcXVvdDsgKCZxdW90O0Fib3V0cyZxdW90OykuIFRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBnb3Zlcm5pbmcgRmVhdHVyZXMgYW5kCitJbmNsdWRlZCBGZWF0dXJlcyBzaG91bGQgYmUgY29udGFpbmVkIGluIGZpbGVzIG5hbWVkICZxdW90O2xpY2Vuc2UuaHRtbCZxdW90OyAoJnF1b3Q7RmVhdHVyZSBMaWNlbnNlcyZxdW90OykuICBBYm91dHMgYW5kIEZlYXR1cmUgTGljZW5zZXMgbWF5IGJlIGxvY2F0ZWQgaW4gYW55IGRpcmVjdG9yeSBvZiBhIERvd25sb2FkIG9yIE1vZHVsZQoraW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG8gdGhlIGZvbGxvd2luZyBsb2NhdGlvbnM6PC9wPgorCis8dWw+CisJPGxpPlRoZSB0b3AtbGV2ZWwgKHJvb3QpIGRpcmVjdG9yeTwvbGk+CisJPGxpPlBsdWctaW4gYW5kIEZyYWdtZW50IGRpcmVjdG9yaWVzPC9saT4KKwk8bGk+SW5zaWRlIFBsdWctaW5zIGFuZCBGcmFnbWVudHMgcGFja2FnZWQgYXMgSkFSczwvbGk+CisJPGxpPlN1Yi1kaXJlY3RvcmllcyBvZiB0aGUgZGlyZWN0b3J5IG5hbWVkICZxdW90O3NyYyZxdW90OyBvZiBjZXJ0YWluIFBsdWctaW5zPC9saT4KKwk8bGk+RmVhdHVyZSBkaXJlY3RvcmllczwvbGk+Cis8L3VsPgorCQkKKzxwPk5vdGU6IGlmIGEgRmVhdHVyZSBtYWRlIGF2YWlsYWJsZSBieSB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uIGlzIGluc3RhbGxlZCB1c2luZyB0aGUgRWNsaXBzZSBVcGRhdGUgTWFuYWdlciwgeW91IG11c3QgYWdyZWUgdG8gYSBsaWNlbnNlICgmcXVvdDtGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlJnF1b3Q7KSBkdXJpbmcgdGhlCitpbnN0YWxsYXRpb24gcHJvY2Vzcy4gIElmIHRoZSBGZWF0dXJlIGNvbnRhaW5zIEluY2x1ZGVkIEZlYXR1cmVzLCB0aGUgRmVhdHVyZSBVcGRhdGUgTGljZW5zZSBzaG91bGQgZWl0aGVyIHByb3ZpZGUgeW91IHdpdGggdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIGdvdmVybmluZyB0aGUgSW5jbHVkZWQgRmVhdHVyZXMgb3IKK2luZm9ybSB5b3Ugd2hlcmUgeW91IGNhbiBsb2NhdGUgdGhlbS4gIEZlYXR1cmUgVXBkYXRlIExpY2Vuc2VzIG1heSBiZSBmb3VuZCBpbiB0aGUgJnF1b3Q7bGljZW5zZSZxdW90OyBwcm9wZXJ0eSBvZiBmaWxlcyBuYW1lZCAmcXVvdDtmZWF0dXJlLnByb3BlcnRpZXMmcXVvdDsgZm91bmQgd2l0aGluIGEgRmVhdHVyZS4KK1N1Y2ggQWJvdXRzLCBGZWF0dXJlIExpY2Vuc2VzLCBhbmQgRmVhdHVyZSBVcGRhdGUgTGljZW5zZXMgY29udGFpbiB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgKG9yIHJlZmVyZW5jZXMgdG8gc3VjaCB0ZXJtcyBhbmQgY29uZGl0aW9ucykgdGhhdCBnb3Zlcm4geW91ciB1c2Ugb2YgdGhlIGFzc29jaWF0ZWQgQ29udGVudCBpbgordGhhdCBkaXJlY3RvcnkuPC9wPgorCis8cD5USEUgQUJPVVRTLCBGRUFUVVJFIExJQ0VOU0VTLCBBTkQgRkVBVFVSRSBVUERBVEUgTElDRU5TRVMgTUFZIFJFRkVSIFRPIFRIRSBFUEwgT1IgT1RIRVIgTElDRU5TRSBBR1JFRU1FTlRTLCBOT1RJQ0VTIE9SIFRFUk1TIEFORCBDT05ESVRJT05TLiAgU09NRSBPRiBUSEVTRQorT1RIRVIgTElDRU5TRSBBR1JFRU1FTlRTIE1BWSBJTkNMVURFIChCVVQgQVJFIE5PVCBMSU1JVEVEIFRPKTo8L3A+CisKKzx1bD4KKwk8bGk+Q29tbW9uIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4wIChhdmFpbGFibGUgYXQgPGEgaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9jcGwtdjEwLmh0bWwiPmh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvY3BsLXYxMC5odG1sPC9hPik8L2xpPgorCTxsaT5BcGFjaGUgU29mdHdhcmUgTGljZW5zZSAxLjEgKGF2YWlsYWJsZSBhdCA8YSBocmVmPSJodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRSI+aHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0U8L2E+KTwvbGk+CisJPGxpPkFwYWNoZSBTb2Z0d2FyZSBMaWNlbnNlIDIuMCAoYXZhaWxhYmxlIGF0IDxhIGhyZWY9Imh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMCI+aHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wPC9hPik8L2xpPgorCTxsaT5JQk0gUHVibGljIExpY2Vuc2UgMS4wIChhdmFpbGFibGUgYXQgPGEgaHJlZj0iaHR0cDovL29zcy5zb2Z0d2FyZS5pYm0uY29tL2RldmVsb3BlcndvcmtzL29wZW5zb3VyY2UvbGljZW5zZTEwLmh0bWwiPmh0dHA6Ly9vc3Muc29mdHdhcmUuaWJtLmNvbS9kZXZlbG9wZXJ3b3Jrcy9vcGVuc291cmNlL2xpY2Vuc2UxMC5odG1sPC9hPik8L2xpPgkKKwk8bGk+TWV0cm8gTGluayBQdWJsaWMgTGljZW5zZSAxLjAwIChhdmFpbGFibGUgYXQgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuZ3JvdXAub3JnL29wZW5tb3RpZi9zdXBwb3J0ZXJzL21ldHJvbGluay9saWNlbnNlLmh0bWwiPmh0dHA6Ly93d3cub3Blbmdyb3VwLm9yZy9vcGVubW90aWYvc3VwcG9ydGVycy9tZXRyb2xpbmsvbGljZW5zZS5odG1sPC9hPik8L2xpPgorCTxsaT5Nb3ppbGxhIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4xIChhdmFpbGFibGUgYXQgPGEgaHJlZj0iaHR0cDovL3d3dy5tb3ppbGxhLm9yZy9NUEwvTVBMLTEuMS5odG1sIj5odHRwOi8vd3d3Lm1vemlsbGEub3JnL01QTC9NUEwtMS4xLmh0bWw8L2E+KTwvbGk+Cis8L3VsPgorCis8cD5JVCBJUyBZT1VSIE9CTElHQVRJT04gVE8gUkVBRCBBTkQgQUNDRVBUIEFMTCBTVUNIIFRFUk1TIEFORCBDT05ESVRJT05TIFBSSU9SIFRPIFVTRSBPRiBUSEUgQ09OVEVOVC4gIElmIG5vIEFib3V0LCBGZWF0dXJlIExpY2Vuc2UsIG9yIEZlYXR1cmUgVXBkYXRlIExpY2Vuc2UgaXMgcHJvdmlkZWQsIHBsZWFzZQorY29udGFjdCB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uIHRvIGRldGVybWluZSB3aGF0IHRlcm1zIGFuZCBjb25kaXRpb25zIGdvdmVybiB0aGF0IHBhcnRpY3VsYXIgQ29udGVudC48L3A+CisKKzxoMz5DcnlwdG9ncmFwaHk8L2gzPgorCis8cD5Db250ZW50IG1heSBjb250YWluIGVuY3J5cHRpb24gc29mdHdhcmUuIFRoZSBjb3VudHJ5IGluIHdoaWNoIHlvdSBhcmUgY3VycmVudGx5IG1heSBoYXZlIHJlc3RyaWN0aW9ucyBvbiB0aGUgaW1wb3J0LCBwb3NzZXNzaW9uLCBhbmQgdXNlLCBhbmQvb3IgcmUtZXhwb3J0IHRvCisgICBhbm90aGVyIGNvdW50cnksIG9mIGVuY3J5cHRpb24gc29mdHdhcmUuIEJFRk9SRSB1c2luZyBhbnkgZW5jcnlwdGlvbiBzb2Z0d2FyZSwgcGxlYXNlIGNoZWNrIHRoZSBjb3VudHJ5J3MgbGF3cywgcmVndWxhdGlvbnMgYW5kIHBvbGljaWVzIGNvbmNlcm5pbmcgdGhlIGltcG9ydCwKKyAgIHBvc3Nlc3Npb24sIG9yIHVzZSwgYW5kIHJlLWV4cG9ydCBvZiBlbmNyeXB0aW9uIHNvZnR3YXJlLCB0byBzZWUgaWYgdGhpcyBpcyBwZXJtaXR0ZWQuPC9wPgorICAgCis8c21hbGw+SmF2YSBhbmQgYWxsIEphdmEtYmFzZWQgdHJhZGVtYXJrcyBhcmUgdHJhZGVtYXJrcyBvZiBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuIGluIHRoZSBVbml0ZWQgU3RhdGVzLCBvdGhlciBjb3VudHJpZXMsIG9yIGJvdGguPC9zbWFsbD4gICAKKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0uc2FtcGxlL3BsdWdpbi5wcm9wZXJ0aWVzIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS5zYW1wbGUvcGx1Z2luLnByb3BlcnRpZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDMzNTNlOQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0uc2FtcGxlL3BsdWdpbi5wcm9wZXJ0aWVzCkBAIC0wLDAgKzEsMzYgQEAKKyMvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIyAqIENvcHlyaWdodCAoYykgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyMgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisjICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisjICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyMgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorIyAqCisjICogQ29udHJpYnV0b3JzOgorIyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorIyBUbyBjb2RlIGRldmVsb3BlcjoKKyMgICBEbyBOT1QgY2hhbmdlIHRoZSBwcm9wZXJ0aWVzIGJldHdlZW4gdGhpcyBsaW5lIGFuZCB0aGUKKyMgICAiJSUlIEVORCBPRiBUUkFOU0xBVEVEIFBST1BFUlRJRVMgJSUlIiBsaW5lLgorIyAgIE1ha2UgYSBuZXcgcHJvcGVydHkgbmFtZSwgYXBwZW5kIHRvIHRoZSBlbmQgb2YgdGhlIGZpbGUgYW5kIGNoYW5nZQorIyAgIHRoZSBjb2RlIHRvIHVzZSB0aGUgbmV3IHByb3BlcnR5LgorIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisjICUlJSBFTkQgT0YgVFJBTlNMQVRFRCBQUk9QRVJUSUVTICUlJQorIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitwbHVnaW5OYW1lID0gU1RFTSBTYW1wbGUgTW9kZWwKK3Byb3ZpZGVyTmFtZSA9IEVjbGlwc2Uub3JnCisKKyMgVmlldyAxCit2MU5hbWUgPSBWaWV3IEV4YW1wbGUgMQordjJOYW1lID0gUmVsYXRpdmUgVmFsdWUgVmlldyBFeGFtcGxlCit2M05hbWUgPSBVdGlsaXR5IFZpZXcKKworCisjIENhdGVnb3JpZXMKK19VSV9TYW1wbGVfQ2F0ZWdvcnkgPSBTYW1wbGUKKworIyBHcmFwaCBDYXRlZ29yaWVzCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnNhbXBsZS9wbHVnaW4ueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS5zYW1wbGUvcGx1Z2luLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYjg0MjNjCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS5zYW1wbGUvcGx1Z2luLnhtbApAQCAtMCwwICsxLDI0IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPD9lY2xpcHNlIHZlcnNpb249IjMuMiI/PgorPHBsdWdpbj4KKyAgIAorICAgPGV4dGVuc2lvbgorICAgICAgICAgcG9pbnQ9Im9yZy5lY2xpcHNlLnVpLnZpZXdzIj4KKyAgICAgIDx2aWV3CisgICAgICAgICAgICBjYXRlZ29yeT0ib3JnLmVjbGlwc2Uuc3RlbS51aS52aWV3cyIKKyAgICAgICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS5zdGVtLnNhbXBsZS5hZGFwdGlvbi5WaWV3RXhhbXBsZTEiCisgICAgICAgICAgICBpZD0ib3JnLmVjbGlwc2Uuc3RlbS5zYW1wbGUuYWRhcHRlci52aWV3ZXhhbXBsZTEiCisgICAgICAgICAgICBuYW1lPSIldjFOYW1lIi8+CisgICAgICA8dmlldworICAgICAgICAgICAgY2F0ZWdvcnk9Im9yZy5lY2xpcHNlLnN0ZW0udWkudmlld3MiCisgICAgICAgICAgICBjbGFzcz0ib3JnLmVjbGlwc2Uuc3RlbS5zYW1wbGUuYWRhcHRpb24uUmVsYXRpdmVWYWx1ZVZpZXdFeGFtcGxlIgorICAgICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uc2FtcGxlLmFkYXB0ZXIucmVsYXRpdmV2YWx1ZXZpZXdleGFtcGxlIgorICAgICAgICAgICAgbmFtZT0iJXYyTmFtZSIvPgorICAgICAgPHZpZXcKKyAgICAgICAgICAgIGNhdGVnb3J5PSJvcmcuZWNsaXBzZS5zdGVtLnVpLnZpZXdzIgorICAgICAgICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLnN0ZW0uc2FtcGxlLlV0aWxpdHlWaWV3IgorICAgICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uc2FtcGxlLnV0aWxpdHl2aWV3IgorICAgICAgICAgICAgbmFtZT0iJXYzTmFtZSIvPgorICAgPC9leHRlbnNpb24+CisKKzwvcGx1Z2luPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS5zYW1wbGUvcGx1Z2luX2RlLnByb3BlcnRpZXMgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnNhbXBsZS9wbHVnaW5fZGUucHJvcGVydGllcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNGJiYzU3Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS5zYW1wbGUvcGx1Z2luX2RlLnByb3BlcnRpZXMKQEAgLTAsMCArMSwzNiBAQAorIy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjICogQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorIyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyMgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyMgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorIyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisjICoKKyMgKiBDb250cmlidXRvcnM6CisjICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorIyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisjIFRvIGNvZGUgZGV2ZWxvcGVyOgorIyAgIERvIE5PVCBjaGFuZ2UgdGhlIHByb3BlcnRpZXMgYmV0d2VlbiB0aGlzIGxpbmUgYW5kIHRoZQorIyAgICIlJSUgRU5EIE9GIFRSQU5TTEFURUQgUFJPUEVSVElFUyAlJSUiIGxpbmUuCisjICAgTWFrZSBhIG5ldyBwcm9wZXJ0eSBuYW1lLCBhcHBlbmQgdG8gdGhlIGVuZCBvZiB0aGUgZmlsZSBhbmQgY2hhbmdlCisjICAgdGhlIGNvZGUgdG8gdXNlIHRoZSBuZXcgcHJvcGVydHkuCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyMgJSUlIEVORCBPRiBUUkFOU0xBVEVEIFBST1BFUlRJRVMgJSUlCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK3BsdWdpbk5hbWU9U1RFTSBCZWlzcGllbHNtb2RlbGwKK3Byb3ZpZGVyTmFtZT1FY2xpcHNlLm9yZworCisjIFZpZXcgMQordjFOYW1lPUFuemVpZ2UgQmVpc3BpZWwgMQordjJOYW1lPVJlbGF0aXZlcyBXZXJ0YW56ZWlnZS1CZWlzcGllbAordjNOYW1lPVV0aWxpdHktQW56ZWlnZQorCisKKyMgQ2F0ZWdvcmllcworX1VJX1NhbXBsZV9DYXRlZ29yeT1Qcm9iZQorCisjIEdyYXBoIENhdGVnb3JpZXMKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0uc2FtcGxlL3BsdWdpbl9rci5wcm9wZXJ0aWVzIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS5zYW1wbGUvcGx1Z2luX2tyLnByb3BlcnRpZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTQwYjAyNQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0uc2FtcGxlL3BsdWdpbl9rci5wcm9wZXJ0aWVzCkBAIC0wLDAgKzEsMzYgQEAKKyMvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIyAqIENvcHlyaWdodCAoYykgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyMgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisjICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisjICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyMgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorIyAqCisjICogQ29udHJpYnV0b3JzOgorIyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorIyBUbyBjb2RlIGRldmVsb3BlcjoKKyMgICBEbyBOT1QgY2hhbmdlIHRoZSBwcm9wZXJ0aWVzIGJldHdlZW4gdGhpcyBsaW5lIGFuZCB0aGUKKyMgICAiJSUlIEVORCBPRiBUUkFOU0xBVEVEIFBST1BFUlRJRVMgJSUlIiBsaW5lLgorIyAgIE1ha2UgYSBuZXcgcHJvcGVydHkgbmFtZSwgYXBwZW5kIHRvIHRoZSBlbmQgb2YgdGhlIGZpbGUgYW5kIGNoYW5nZQorIyAgIHRoZSBjb2RlIHRvIHVzZSB0aGUgbmV3IHByb3BlcnR5LgorIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisjICUlJSBFTkQgT0YgVFJBTlNMQVRFRCBQUk9QRVJUSUVTICUlJQorIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitwbHVnaW5OYW1lPVNURU0gXHVjMGQ4XHVkNTBjIFx1YmFhOFx1YjM3OAorcHJvdmlkZXJOYW1lPUVjbGlwc2Uub3JnCisKKyMgVmlldyAxCit2MU5hbWU9XHVjNjA4MSBcdWJjZjRcdWFlMzAKK3YyTmFtZT1cdWMwYzFcdWIzMDAgXHVhYzAwXHVjZTU4IFx1YzYwOFx1YzgxYyBcdWJjZjRcdWFlMzAKK3YzTmFtZT1cdWM3MjBcdWQyZjhcdWI5YWNcdWQyZjAgXHViY2Y0XHVhZTMwCisKKworIyBDYXRlZ29yaWVzCitfVUlfU2FtcGxlX0NhdGVnb3J5PVx1YWNhY1x1YmNmOAorCisjIEdyYXBoIENhdGVnb3JpZXMKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0uc2FtcGxlL3BsdWdpbl96aC5wcm9wZXJ0aWVzIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS5zYW1wbGUvcGx1Z2luX3poLnByb3BlcnRpZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTc1NjcyOAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0uc2FtcGxlL3BsdWdpbl96aC5wcm9wZXJ0aWVzCkBAIC0wLDAgKzEsMzYgQEAKKyMvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIyAqIENvcHlyaWdodCAoYykgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyMgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisjICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisjICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyMgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorIyAqCisjICogQ29udHJpYnV0b3JzOgorIyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorIyBUbyBjb2RlIGRldmVsb3BlcjoKKyMgICBEbyBOT1QgY2hhbmdlIHRoZSBwcm9wZXJ0aWVzIGJldHdlZW4gdGhpcyBsaW5lIGFuZCB0aGUKKyMgICAiJSUlIEVORCBPRiBUUkFOU0xBVEVEIFBST1BFUlRJRVMgJSUlIiBsaW5lLgorIyAgIE1ha2UgYSBuZXcgcHJvcGVydHkgbmFtZSwgYXBwZW5kIHRvIHRoZSBlbmQgb2YgdGhlIGZpbGUgYW5kIGNoYW5nZQorIyAgIHRoZSBjb2RlIHRvIHVzZSB0aGUgbmV3IHByb3BlcnR5LgorIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisjICUlJSBFTkQgT0YgVFJBTlNMQVRFRCBQUk9QRVJUSUVTICUlJQorIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitwbHVnaW5OYW1lPVNURU1cdTc5M2FcdTRmOGJcdTZhMjFcdTU3OGIKK3Byb3ZpZGVyTmFtZT1FY2xpcHNlLm9yZworCisjIFZpZXcgMQordjFOYW1lPVx1NjdlNVx1NzcwYlx1NzkzYVx1NGY4YjEKK3YyTmFtZT1cdTc2ZjhcdTViZjlcdTUwM2NcdTg5YzZcdTU2ZmVcdTgzMDNcdTRmOGIKK3YzTmFtZT1cdTVlOTRcdTc1MjhcdTc5M2FcdTU2ZmUKKworCisjIENhdGVnb3JpZXMKK19VSV9TYW1wbGVfQ2F0ZWdvcnk9XHU2ODM3XHU1NGMxCisKKyMgR3JhcGggQ2F0ZWdvcmllcwpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS5zYW1wbGUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vc2FtcGxlL0FjdGl2YXRvci5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS5zYW1wbGUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vc2FtcGxlL0FjdGl2YXRvci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgxNGM4MzYKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnNhbXBsZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9zYW1wbGUvQWN0aXZhdG9yLmphdmEKQEAgLTAsMCArMSw2MiBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnNhbXBsZTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5wbHVnaW4uQWJzdHJhY3RVSVBsdWdpbjsKK2ltcG9ydCBvcmcub3NnaS5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dDsKKworLyoqCisgKiBUaGUgYWN0aXZhdG9yIGNsYXNzIGNvbnRyb2xzIHRoZSBwbHVnLWluIGxpZmUgY3ljbGUKKyAqLworcHVibGljIGNsYXNzIEFjdGl2YXRvciBleHRlbmRzIEFic3RyYWN0VUlQbHVnaW4geworCisJCisJLyoqCisJICogVGhlIHBsdWctaW4gSUQKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBQTFVHSU5fSUQgPSAib3JnLmVjbGlwc2Uuc3RlbS5zYW1wbGUiOworCisJLy8gVGhlIHNoYXJlZCBpbnN0YW5jZQorCXByaXZhdGUgc3RhdGljIEFjdGl2YXRvciBwbHVnaW47CisJCisJLyoqCisJICogVGhlIGNvbnN0cnVjdG9yCisJICovCisJcHVibGljIEFjdGl2YXRvcigpIHsKKwkJcGx1Z2luID0gdGhpczsKKwl9CisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnVpLnBsdWdpbi5BYnN0cmFjdFVJUGx1Z2luI3N0YXJ0KG9yZy5vc2dpLmZyYW1ld29yay5CdW5kbGVDb250ZXh0KQorCSAqLworCXB1YmxpYyB2b2lkIHN0YXJ0KEJ1bmRsZUNvbnRleHQgY29udGV4dCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCXN1cGVyLnN0YXJ0KGNvbnRleHQpOworCX0KKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2UudWkucGx1Z2luLkFic3RyYWN0VUlQbHVnaW4jc3RvcChvcmcub3NnaS5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dCkKKwkgKi8KKwlwdWJsaWMgdm9pZCBzdG9wKEJ1bmRsZUNvbnRleHQgY29udGV4dCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCXBsdWdpbiA9IG51bGw7CisJCXN1cGVyLnN0b3AoY29udGV4dCk7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgc2hhcmVkIGluc3RhbmNlCisJICoKKwkgKiBAcmV0dXJuIHRoZSBzaGFyZWQgaW5zdGFuY2UKKwkgKi8KKwlwdWJsaWMgc3RhdGljIEFjdGl2YXRvciBnZXREZWZhdWx0KCkgeworCQlyZXR1cm4gcGx1Z2luOworCX0KKworfSAvLyBBY3RpdmF0b3IKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0uc2FtcGxlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3NhbXBsZS9VdGlsaXR5VGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS5zYW1wbGUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vc2FtcGxlL1V0aWxpdHlUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWZiMWQ2MAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0uc2FtcGxlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3NhbXBsZS9VdGlsaXR5VGVzdC5qYXZhCkBAIC0wLDAgKzEsOTkgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5zYW1wbGU7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOworCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5hZGFwdGVycy5zcGF0aWFsLmdlby5MYXRMb25nOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuYWRhcHRlcnMuc3BhdGlhbC5nZW8uTGF0TG9uZy5TZWdtZW50OworCisvKioKKyAqCisgKi8KK3B1YmxpYyBjbGFzcyBVdGlsaXR5VGVzdCBleHRlbmRzIFRlc3RDYXNlIHsKKyAgICBMYXRMb25nIHBvbHlnb24xID1udWxsOworICAgIExhdExvbmcgcG9seWdvbjIgPW51bGw7CisgICAgTGF0TG9uZyBwb2x5Z29uMyA9bnVsbDsKKyAgICBMYXRMb25nIHBvbHlnb240ID1udWxsOworCS8qIChub24tSmF2YWRvYykKKwkgKiBAc2VlIGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZSNzZXRVcCgpCisJICovCisJcHJvdGVjdGVkIHZvaWQgc2V0VXAoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJc3VwZXIuc2V0VXAoKTsKKwkJCisJCWRvdWJsZVtdW10gZDEgPSB7ezAuMCwgMC4wfSwKKwkJCQl7MTAuMCwgMC4wfSwKKwkJCQl7MTAuMCwgMTAuMH0sCisJCQkJezAuMCwgMTAuMH0sCisJCQkJezAuMCwgMC4wfSB9OworCQlTZWdtZW50IHMxID0gbmV3IFNlZ21lbnQoZDEpOworCQlwb2x5Z29uMSA9IG5ldyBMYXRMb25nKCk7CisJCXBvbHlnb24xLmFkZChzMSk7CisJCQorCQlkb3VibGVbXVtdIGQyID0ge3sxMC4wLCAwLjB9LAorCQkJCXsxMC4wLCAyMC4wfSwKKwkJCQl7MjAuMCwgMC4wfSwKKwkJCQl7MTAuMCwgMC4wfSB9OworCQlTZWdtZW50IHMyID0gbmV3IFNlZ21lbnQoZDIpOworCQlwb2x5Z29uMiA9IG5ldyBMYXRMb25nKCk7CisJCXBvbHlnb24yLmFkZChzMik7CisJCQorCQlkb3VibGVbXVtdIGQzID0ge3syMC4wLCAwLjB9LAorCQkJCXsyMC4wLCAyMC4wfSwKKwkJCQl7NDAuMCwgMC4wfSwKKwkJCQl7MjAuMCwgMC4wfSB9OworCQlTZWdtZW50IHMzID0gbmV3IFNlZ21lbnQoZDMpOworCQlwb2x5Z29uMyA9IG5ldyBMYXRMb25nKCk7CisJCXBvbHlnb24zLmFkZChzMyk7CisJCQorCQlkb3VibGVbXVtdIGQ0YSA9IHt7LTIwLjAsIDAuMH0sCisJCQkJey0yMC4wLCAtMTAuMH0sCisJCQkJey00MC4wLCAtMTAuMH0sCisJCQkJey0yMC4wLCAtMTAuMH0sCisJCQkJey0yMC4wLCAwLjB9IH07CisJCVNlZ21lbnQgczRhID0gbmV3IFNlZ21lbnQoZDRhKTsKKwkJcG9seWdvbjQgPSBuZXcgTGF0TG9uZygpOworCQlwb2x5Z29uNC5hZGQoczRhKTsKKwkJZG91YmxlW11bXSBkNGIgPSB7ezAwLjAsIDAuMH0sCisJCQkJey0yMC4wLCAwLjB9LAorCQkJCXstMjAuMCwgLTIwLjB9LAorCQkJCXswLjAsIC0yMC4wfSwKKwkJCQl7MC4wLCAwLjB9IH07CisJCVNlZ21lbnQgczRiID0gbmV3IFNlZ21lbnQoZDRiKTsJCQorCQlwb2x5Z29uNC5hZGQoczRiKTsKKwkJCisJfQorCisJLyogKG5vbi1KYXZhZG9jKQorCSAqIEBzZWUganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlI3RlYXJEb3duKCkKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCB0ZWFyRG93bigpIHRocm93cyBFeGNlcHRpb24geworCQlzdXBlci50ZWFyRG93bigpOworCX0KKworCS8qKgorCSAqIFRlc3QgbWV0aG9kIGZvciAKKwkgKiB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5zYW1wbGUuVXRpbGl0eSNzZXRCQm94KFN0cmluZywgTGF0TG9uZyl9LgorCSAqLworLy8JcHVibGljIHZvaWQgdGVzdEdldEJCb3hMYXRMb25nKCkgeworLy8JCU1hcDxTdHJpbmcsUmVjdGFuZ2xlW10+IG1hcCA9IG5ldyBIYXNoTWFwPFN0cmluZyxSZWN0YW5nbGVbXT4oKTsKKy8vCQlOZWlnaGJvclV0aWxpdHkuc2V0QkJveChtYXAsIlRlc3QzIixwb2x5Z29uMyk7CisvLwkJTmVpZ2hib3JVdGlsaXR5LnNldEJCb3gobWFwLCJUZXN0MSIscG9seWdvbjEpOworLy8JCU5laWdoYm9yVXRpbGl0eS5zZXRCQm94KG1hcCwiVGVzdDQiLHBvbHlnb240KTsKKy8vCQlOZWlnaGJvclV0aWxpdHkuc2V0QkJveChtYXAsIlRlc3QyIixwb2x5Z29uMik7CisvLwkJTGlzdCBsaXN0ID0gTmVpZ2hib3JVdGlsaXR5LnByb2Nlc3NCQm94KG1hcCk7CisvLwkgICAgQXNzZXJ0LmFzc2VydE5vdE51bGwobGlzdCk7CisvLwkgICAgQXNzZXJ0LmFzc2VydEVxdWFscyhsaXN0LnNpemUoKSwzKTsKKy8vCQkKKy8vCX0KKworfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS5zYW1wbGUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vc2FtcGxlL1V0aWxpdHlWaWV3LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnNhbXBsZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9zYW1wbGUvVXRpbGl0eVZpZXcuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NmMzMTAzCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS5zYW1wbGUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vc2FtcGxlL1V0aWxpdHlWaWV3LmphdmEKQEAgLTAsMCArMSw0NjMgQEAKKy8vIFV0aWxpdHlWaWV3LmphdmEKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5zYW1wbGU7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklMYWJlbFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSUxhYmVsUHJvdmlkZXJMaXN0ZW5lcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU3RydWN0dXJlZENvbnRlbnRQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTdHJ1Y3R1cmVkU2VsZWN0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuTGFiZWxQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLkxpc3RWaWV3ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5WaWV3ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkdyYXBoOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5Ob2RlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zY2VuYXJpby5TY2VuYXJpbzsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmFkYXB0ZXJzLnNwYXRpYWwuZ2VvLkxhdExvbmc7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5hZGFwdGVycy5zcGF0aWFsLmdlby5MYXRMb25nLlNlZ21lbnQ7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5hZGFwdGVycy5zcGF0aWFsLmdlby5MYXRMb25nUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5hZGFwdGVycy5zcGF0aWFsLmdlby5MYXRMb25nUHJvdmlkZXJBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmpvYnMuc2ltdWxhdGlvbi5JU2ltdWxhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmpvYnMuc2ltdWxhdGlvbi5TaW11bGF0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ncmFwaGljcy5JbWFnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGU7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuSVNlbGVjdGlvbkxpc3RlbmVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklTZWxlY3Rpb25TZXJ2aWNlOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2hQYXJ0OworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLnBhcnQuVmlld1BhcnQ7CisKKy8qKgorICogVGhpcyBjbGFzcyBpcyBhbiBleGFtcGxlIG9mIGhvdyB0byBydW4gR1VJIGNvZGUgaW4gRWNsaXBzZSBhbmQgbW9uaXRvciB0aGUKKyAqICJzZWxlY3RlZCIgc2ltdWxhdGlvbiwgYW5kIGhvdyB0byBleHRyYWN0IHRoZSBjYW5vbmljYWwgZ3JhcGggZnJvbSB0aGUKKyAqIHNlbGVjdGVkIHNpbXVsYXRpb24gYW5kIHRoZW4gZXh0cmFjdCBkYXRhIGZyb20gaXQuCisgKiA8cD4KKyAqIEl0IGNyZWF0cyBhbiBFY2xpcHNlICJWaWV3IiBjYWxsZWQgIlZpZXcgRXhhbXBsZTEiIHRoYXQgc2ltcGx5ICJkdW1wcyIgdGhlCisgKiBsYXRpdHVkZSBhbmQgbG9uZ2l0dWRlIGRhdGEgZXh0cmFjdGVkIGZyb20gdGhlIGNhbm9uaWNhbCBncmFwaCB0byB0aGUgdmlldydzCisgKiB3aW5kb3cuIFRoZSBleGFtcGxlIGlzIHNpbXBsZSwgYnV0IGl0IGhlbHBzIHRvIHVuZGVyc3RhbmQgaG93IGEgSkZhY2UKKyAqICJWaWV3ZXIiIChub3QgdGhlIHNhbWUgYXMgYW4gRWNsaXBzZSAiVmlldyIpIHdvcmtzIHdpdGggY29udGVudCBhbmQgbGFiZWwKKyAqIHByb3ZpZGVycy4KKyAqIDxwPgorICogVGhlcmUgYXJlIHRocmVlIGNsYXNzZXMgZGVmaW5lZCBpbiB0aGlzIGV4YW1wbGUuIFRoZSBmaXJzdCBpcyB0aGUgcGFyZW50CisgKiBjbGFzcyB0aGF0IGlzIGEgPGNvZGU+Vmlld1BhcnQ8L2NvZGU+IGFuZCBpbXBsZW1lbnRzIHdoYXQgaXMgc2VlbiBpbiB0aGUKKyAqIHZpZXcncyB3aW5kb3cgaW4gRWNsaXBzZS4gSXQgY29udGFpbnMgYSBKRmFjZSA8Y29kZT5MaXN0Vmlld2VyPC9jb2RlPiB3aGljaAorICogYmFzaWNhbGx5IG1haW50YWlucyBhIGxpc3Qgb2YgT2JqZWN0cyBhbmQgY3JlYXRlcyBhIGRpc3BsYXkgdGhhdCBwcmludHMgYQorICogZGVzY3JpcHRpdmUgdGV4dCBzdHJpbmcgZm9yIGVhY2ggb25lLiBUaGUgbWV0aG9kCisgKiA8Y29kZT5jcmVhdGVQYXJ0Q29udHJvbDwvY29kZT4gaXMgdGhlIGNvZGUgdGhhdCBpbml0aWFsaXplcyB0aGUgU1dUCisgKiBncmFwaGljcyBmb3IgdGhlIGRpc3BsYXkgb2YgdGhlIHZpZXcuIEl0IGlzIHBhc3NlZCBhbiBTV1QKKyAqIDxjb2RlPkNvbXBvc2l0ZTwvY29kZT4gaW5zdGFuY2UgY2FsbGVkIDxjb2RlPnBhcmVudDwvY29kZT4gdGhhdCBpcyB1c2VkCisgKiB0byAiY29udGFpbiIgdGhlIFNXVC9KRmFjZSBlbGVtZW50cyBvZiB0aGUgdmlldydzIHRoYXQgbWFrZSB1cCB0aGUgZGlzcGxheSBpbgorICogdGhlIHZpZXcuIFRoZSBtZXRob2QgZG9lcyB0aHJlZSB0aGluZ3MsIGl0IGZpcnN0IGNyZWF0ZXMgdGhlCisgKiA8Y29kZT5MaXN0Vmlld2VyPC9jb2RlPiBpbnN0YW5jZSwgZ2l2aW5nIHRoZSBwYXJlbnQgYXMgYW4gYXJndW1lbnQgdG8gdGhlCisgKiBjb25zdHJ1Y3RlciAodGhpcyBtYWtlcyBpdCBwYXJ0IG9mIHRoZSBkaXNwbGF5KSwgaXQgdGhlbiBjcmVhdGVzIGFuZCBwYXNzZXMKKyAqIHRvIHRoZSA8Y29kZT5MaXN0Vmlld2VyPC9jb2RlPiB0aGUgIkNvbnRlbnQiIGFuZCAiTGFiZWwiIHByb3ZpZGVycyBpdAorICogbmVlZHMuIFRoZSBDb250ZW50IGFuZCBMYWJlbCBwcm92aWRlcnMgYXJlIHRoZSBvdGhlciB0d28gY2xhc3NlcyBpbiB0aGlzCisgKiBleGFtcGxlLgorICogPHA+CisgKiBUaGUgY29udGVudCBwcm92aWRlciBjbGFzcyBpcyB7QGxpbmsgVXRpbGl0eVZpZXdDb250ZW50UHJvdmlkZXJ9LCB3aGlsZSBub3QKKyAqIGNvbXBsZXgsIGl0IG1heSBub3QgYmUgb2J2aW91cyB3aGF0J3MgaXQncyBkb2luZy4gSXQncyBqb2IgaXMgdG8gbWFpbnRhaW4gdGhlCisgKiBjb250ZW50cyBvZiB0aGUgPGNvZGU+TGlzdFZpZXdlcjwvY29kZT4ncyBpbnRlcm5hbCBsaXN0IG9mIHRoaW5ncyB0bworICogZGlzcGxheS4gSXQgcGVyZm9ybXMgdGhlICJDb250cm9sZXIiIGpvYiBpbiBhbiAiTVZDIiBhcmNoaXRlY3R1cmUuIEluIG91cgorICogZXhhbXBsZSwgdGhlIGNvbnRlbnQgcHJvdmlkZXIgaXMgYW4ge0BsaW5rIElTZWxlY3Rpb25MaXN0ZW5lcn0gd2hpY2ggbWVhbnMgaXQKKyAqIGhhcyBhIDxjb2RlPnNlbGVjdGlvbkNoYW5nZWQ8L2NvZGU+IG1ldGhvZC4gVGhlIGlkZWEgYmVoaW5kIHRoZSBtZXRob2QgaXMKKyAqIHRoYXQgaXQgaXMgY2FsbGVkIHdoZW5ldmVyIHRoZSB1c2VyICJzZWxlY3RzIiBzb21ldGhpbmcgaW4gdGhlIEVjbGlwc2UKKyAqIGludGVyZmFjZS4gVGhpcyBkb2Vzbid0IGhhcHBlbiBhdXRvbWF0aWNhbGx5LCBhbiBpbnN0YW5jZSBvZiB0aGUgY2xhc3MgbXVzdAorICogYmUgcmVnaXN0ZXJlZCB3aXRoIHRoZSBFY2xpcHNlICJzZWxlY3Rpb24gc2VydmljZSIgdGhhdCBzZXJ2ZXMgYXMgYSBjZW50cmFsCisgKiBkaXNwYXRjaGVyIGZvciBzZWxlY3Rpb25zLiBUaGlzIHJlZ2lzdHJhdGlvbiBpcyBkb25lIGluIHRoZQorICogPGNvZGU+Y3JlYXRlUGFydENvbnRyb2w8L2NvZGU+IG1ldGhvZCBvZiB0aGUgcGFyZW50IGNsYXNzLiBXaGVuIHNvbWV0aGluZworICogaXMgc2VsZWN0ZWQgYW5kIHRoZSBtZXRob2QgaXMgY2FsbGVkLCBpdCBtdXN0IGZpbHRlciBvdXQgdGhlIHNlbGVjdGlvbnMgYW5kCisgKiBpZ25vcmUgdGhvc2UgdGhhdCBhcmUgbm90IGluc3RhbmNlcyBvZiB7QGxpbmsgSVNpbXVsYXRpb259LiBXaGVuIGl0IGRvZXMKKyAqIGZpbmQgYSBzaW11bGF0aW9uIGluc3RhbmNlLCBpdCByZW1vdmVzIHRoZSBjdXJyZW50IGNvbnRlbnRzIG9mIHRoZSBsaXN0CisgKiBtYWludGFpbmVkIGJ5IHRoZSA8Y29kZT5MaXN0Vmlld2VyPC9jb2RlPiBhbmQgYWRkcyB0aGUgbmV3bHkgc2VsZWN0ZWQKKyAqIGluc3RhbmNlcy4gSXQgdGhlbiB0ZWxscyB0aGUgdmlld2VyIHRvIHJlZHJhdyBpdHNlbGYuCisgKiA8cD4KKyAqIFRoZSBsYWJlbCBwcm92aWRlciBjbGFzcyBpcyB7QGxpbmsgVXRpbGl0eVZpZXdMYWJlbFByb3ZpZGVyfSBhbmQgaXMgdGhlCisgKiBlYXNpZXN0IHRvIHVuZGVyc3RhbmQsIGl0cyBpcyB1c2VkIGJ5IHRoZSA8Y29kZT5MaXN0Vmlld2VyPC9jb2RlPiB0bworICogZ2VuZXJhdGUgYSB0ZXh0IHN0cmluZyBmb3IgYW55IG9mIHRoZSA8Y29kZT5PYmplY3RzPC9jb2RlPiAoaS5lLiwKKyAqIDxjb2RlPklTaW11bGF0aW9uPC9jb2RlPiBpbnN0YW5jZXMpIGl0IGNvbnRhaW5zLiBUaGUgbWV0aG9kCisgKiB7QGxpbmsgVXRpbGl0eVZpZXdMYWJlbFByb3ZpZGVyI2dldFRleHQoT2JqZWN0KX0gZG9lcyB0aGlzIGFuZCBpbiB0aGlzCisgKiBleGFtcGxlIGRvZXMgdGhlIHdvcmsgdG8gZXh0cmFjdCB0aGUgbGF0aXR1ZGUgYW5kIGxvbmdpdHVkZSBkYXRhIGZyb20gdGhlCisgKiBjYW5vbmljYWwgZ3JhcGggdXNlZCBpbiB0aGUgc2ltdWxhdGlvbi4gVGhlbiBpdCBqdXN0IHJldHVybnMgdGhhdCBkYXRhIGFzIGEKKyAqIChsb25nKSBzdHJpbmcgdG8gYmUgZGlzcGxheWVkLgorICogCisgKiBUbyBzZWUgdGhlIGV4YW1wbGUgaW4gYWN0aW9uLCB5b3UgbmVlZCB0bzoKKyAqIDxvbD4KKyAqIDxsaT4gUnVuIFNURU08L2xpPgorICogPGxpPiBPcGVuIHRoZSAiVmlldyBFeGFtcGxlIDEiIHZpZXcuCisgKiAiV2luZG93LT5TaG93Jm5ic3A7Vmlldy0+T3RoZXItPlNURU0tPlZpZXcmbmJzcDtFeGFtcGxlJm5ic3A7MSI8L2xpPgorICogPGxpPiBPcGVuIHRoZSAiQWN0aXZlIFNpbXVsYXRpb25zIiB2aWV3LgorICogIldpbmRvdy0+U2hvdyZuYnNwO1ZpZXctPkFjdGl2ZSZuYnNwO1NpbXVsYXRpb25zIjwvbGk+LgorICogCisgKiA8bGk+IEdvIHRvIHRoZSAiU2NlbmFyaW9zIiB2aWV3LiBJdCBzaG93cyB0aGUgU1RFTSBTY2VuYXJpb3MgdGhhdCBhcmUgcGx1Z2dlZAorICogaW50byBTVEVNLiA8L2xpPgorICogPGxpPiBFeHBhbmQgIlRlc3QtPkRpc2Vhc2UmbmJzcDtNb2RlbHMtPlN0YW5kYXJkIiBhbmQgeW91J2xsIHNlZSBkaXNlYXNlCisgKiBtb2RlbGluZyBzY2VuYXJpb3MgdGhhdCBhcmUgcGx1Z2dlZCBpbnRvIFNURU0uIDwvbGk+CisgKiA8bGk+IERvdWJsZS1jbGljayBvbiBhIHNjZW5hcmlvIGluIHRoZSBsaXN0IChlLmcuLCAiU0VJUiAxIHggMSIpIGl0IHdpbGwKKyAqIGJlZ2luIHNpbXVsYXRpb24gYW5kIGFuIGVudHJ5IHdpbGwgYXBwZWFyIGluIHRoZSAiQWN0aXZlIFNpbXVsYXRpb25zIiB2aWV3LgorICogPC9saT4KKyAqIDxsaT4gU2luZ2xlIGNsaWNrIG9uIHRoZSBlbnRyeSBpbiB0aGUgQWN0aXZlIFNpbXVsYXRpb25zIHZpZXcuIFRoaXMgd2lsbAorICogc2VsZWN0IHRoYXQgc2ltdWxhdGlvbiBhbmQgdGhlIGxhdGl0dWRlL2xvbmdpdHVkZSBkYXRhIGZvciB0aGF0IHNjZW5hcmlvIHdpbGwKKyAqIGFwcGVhciBpbiB0aGUgVmlldyBFeGFtcGxlIDEgdmlldyBhcyBhIHNpbmdsZSAobG9uZykgc3RyaW5nLiA8L2xpPgorICogPC9vbD4KKyAqIElmIHlvdSBkb3VibGUtY2xpY2sgb24gYW5vdGhlciBwbHVnZ2VkLWluIFNjZW5hcmlvIHNvIHRoYXQgdHdvIGVudHJpZXMgYXJlCisgKiBkaXNwbGF5ZWQgaW4gdGhlIEFjdGl2ZSBTaW11bGF0aW9ucyB2aWV3IGFuZCB0aGUgeW91IHNlbGVjdCBib3RoLCB5b3UnbGwgc2VlCisgKiB0d28gZW50cmllcyBpbiB0aGUgVmlldyBFeGFtcGxlIDEgdmlldywgb25lIGZvciBlYWNoIG9mIHRoZSBzZWxlY3RlZAorICogc2ltdWxhdGlvbnMuCisgKiAKKyAqLworcHVibGljIGNsYXNzIFV0aWxpdHlWaWV3IGV4dGVuZHMgVmlld1BhcnQgeworCisJLyoqCisJICogVGhlIGlkZW50aWZpZXIgb2YgdGhlIFZpZXcgRXhhbXBsZTEgVmlldy4gTm9ib2R5IHVzZXMgdGhpcyByaWdodCBub3csIGJ1dAorCSAqIGl0IHdvdWxkIGJlIHVzZWZ1bCBpZiB3ZSB3YW50ZWQgdG8gcHJvZ3JhbW1hdGljYWxseSBhZGQgdGhpcyB2aWV3IHRvIGEKKwkgKiBwZXJzcGVjdGl2ZS4KKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBJRF9WSUVXX0VYQU1QTEUxX1ZJRVcgPSAib3JnLmVjbGlwc2Uuc3RlbS5zYW1wbGUuYWRhcHRlcnMuVXRpbGl0eVZpZXciOworCisJLyoqCisJICogVGhpcyBpcyB0aGUge0BsaW5rIExpc3RWaWV3ZXJ9IHRoYXQgY3JlYXRlcyB0aGUgZGlzcGxheSB0aGF0IHdpbGwgc2hvdyB1cAorCSAqIGluIHRoZSB2aWV3J3Mgd2luZG93LiBJdCBjb250YWlucyBhIGxpc3Qgb2YgT2JqZWN0cywgd2hpY2ggaW4gdGhpcworCSAqIGV4YW1wbGUncyBjYXNlIHdpbGwgYmUgaW5zdGFuY2VzIG9mIElTaW11bGF0aW9uLgorCSAqLworCXByb3RlY3RlZCBMaXN0Vmlld2VyIGx2ID0gbnVsbDsKKworCS8qKgorCSAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCB3aGVuIHRoZSB2aWV3IGlzIGNyZWF0ZWQgYW5kIGl0IGhhcyB0aGUKKwkgKiByZXNwb25zaWJpbGl0eSBmb3IgZG9pbmcgYWxsIG9mIHRoZSBpbml0aWFsaXphdGlvbi4gSXQgY3JlYXRlcyB0aGUKKwkgKiB7QGxpbmsgTGlzdFZpZXdlcn0gYW5kIGluc3RhbmNlcyBvZiB0aGUgQ29udGVudFByb3ZpZGVyIGFuZAorCSAqIHtAbGluayBMYWJlbFByb3ZpZGVyfSBmb3IgdGhlIHZpZXdlci4gSXQgYWxzbyBnZXRzIGEgcmVmZXJlbmNlIHRvIHRoZQorCSAqIHNlbGVjdGlvbiBzZXJ2aWNlIGFuZCByZWdpc3RlcnMgdGhlIGNvbnRlbnQgcHJvdmlkZXIgc28gaXQgd2lsbCBiZQorCSAqIG5vdGlmaWVkIHdoZW4gc29tZXRoaW5nIGlzIHNlbGVjdGVkLgorCSAqIAorCSAqIEBzZWUgb3JnLmVjbGlwc2UudWkucGFydC5Xb3JrYmVuY2hQYXJ0I2NyZWF0ZVBhcnRDb250cm9sKG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZSkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBjcmVhdGVQYXJ0Q29udHJvbChDb21wb3NpdGUgcGFyZW50KSB7CisJCS8vIENyZWF0ZSB0aGUgY29udGVudCBwcm92aWRlcgorCQlVdGlsaXR5Vmlld0NvbnRlbnRQcm92aWRlciBjb250ZW50UHJvdmlkZXIgPSBuZXcgVXRpbGl0eVZpZXdDb250ZW50UHJvdmlkZXIoKTsKKwkJLy8gQ3JlYXRlIHRoZSBMaXN0Vmlld2VyCisJCWx2ID0gbmV3IExpc3RWaWV3ZXIocGFyZW50KTsKKworCQkvLyBMZXQgdGhlIExpc3RWaWV3ZXIga25vdyB3aG8gaXRzIGNvbnRlbnQgYW5kIGxhYmVsIHByb3ZpZGVycyBhcmUKKwkJbHYuc2V0Q29udGVudFByb3ZpZGVyKGNvbnRlbnRQcm92aWRlcik7CisJCWx2LnNldExhYmVsUHJvdmlkZXIobmV3IFV0aWxpdHlWaWV3TGFiZWxQcm92aWRlcigpKTsKKworCQkvLyBUaGlzIGNhbGwgdGVsbHMgdGhlIHZpZXdlcidzIGNvbnRlbnQgcHJvdmlkZXIgd2hlcmUgaXQgc2hvdWxkIGdldCB0aGUKKwkJLy8gc291cmNlIG9mIGl0cyBjb250ZW50LiBJbiB0aGlzIGNhc2UgaXQgaXMgdGhlIHNlbGVjdGlvbiBzZXJ2aWNlLgorCQlsdi5zZXRJbnB1dChnZXRTaXRlKCkuZ2V0V29ya2JlbmNoV2luZG93KCkuZ2V0U2VsZWN0aW9uU2VydmljZSgpKTsKKworCQkvLyBXZSBhbHNvIHdhbnQgdG8gYmUgYWJsZSB0byBoYXZlIGEgdXNlciBzZWxlY3QgYSBzaW11bGF0aW9uIGZyb20gb3VyCisJCS8vIHZpZXcgYW5kIGhhdmUgdGhhdCBiZSBzZWVuIGJ5IG90aGVycy4gU28gd2UgcmVnaXN0ZXIgdGhlIExpc3RWaWV3ZXIKKwkJLy8gaW5zdGFuY2UgYXMgdGhlIHZpZXcncyBzZWxlY3Rpb24gcHJvdmlkZXIuIFdoZW4geW91IGNsaWNrIG9uIHRoZSB2aWV3CisJCS8vIGluIHRoZSBpbnRlcmZhY2UgaXQgZmluZHMgdGhlIHVuZGVybHlpbmcgT2JqZWN0IChpLmUuLCBJU2ltdWxhdGlvbikKKwkJLy8geW91IHNlbGVjdGVkIGFuZCBwYXNzZXMgaXQgdG8gdGhlIHNlbGVjdGlvbiBzZXJ2aWNlLgorCQlnZXRTaXRlKCkuc2V0U2VsZWN0aW9uUHJvdmlkZXIobHYpOworCisJfSAvLyBjcmVhdGVQYXJ0Q29udHJvbAorCisJLyoqCisJICogVGhpcyBpcyByZXF1aXJlZCBieSB0aGUgaW50ZXJmYWNlLCBidXQgd2UncmUgbm90IHVzaW5nIGl0LgorCSAqIAorCSAqIEBzZWUgb3JnLmVjbGlwc2UudWkucGFydC5Xb3JrYmVuY2hQYXJ0I3NldEZvY3VzKCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBzZXRGb2N1cygpIHsKKwkJLy8gTm90aGluZworCX0gLy8gc2V0Rm9jdXMKKworCS8qKgorCSAqIFRoaXMgY2xhc3MgaXMgdGhlIGNvbnRlbnQgcHJvdmlkZXIgZm9yIHRoZSB2aWV3LiBJdCBpcyBhbHNvIGEgc2VsZWN0aW9uCisJICogbGlzdGVuZXIgYW5kIHVzZXMgdGhlIHNlbGVjdGlvbiBzZXJ2aWNlIGFzIHRoZSBzb3VyY2Ugb2YgaXRzIGlucHV0LiBJdAorCSAqIGxvb2tzIGZvciBzZWxlY3RlZCB7QGxpbmsgSVNpbXVsYXRpb259IGluc3RhbmNlcyBhbmQgdXBkYXRlcyB0aGUgbGlzdCBpbgorCSAqIHRoZSB2aWV3J3Mge0BsaW5rIExpc3RWaWV3ZXJ9IGluc3RhbmNlIHdpdGggdGhlIGN1cnJlbnQgc2VsZWN0aW9uLgorCSAqLworCXB1YmxpYyBjbGFzcyBVdGlsaXR5Vmlld0NvbnRlbnRQcm92aWRlciBpbXBsZW1lbnRzCisJCQlJU3RydWN0dXJlZENvbnRlbnRQcm92aWRlciwgSVNlbGVjdGlvbkxpc3RlbmVyIHsKKworCQkvLyBXZSByZW1lbWJlciB0aGUgTGlzdFZpZXdlciB0aGF0IHdlJ3JlIHByb3ZpZGluZyBjb250ZW50IGZvciBiZWNhdXNlCisJCS8vIHdlIG5lZWQgdG8gbWFuaXB1bGF0ZSBpdHMgbGlzdCBpbiB0aGUgbWV0aG9kIHNlbGVjdGlvbkNoYW5nZWQuCisJCXByaXZhdGUgTGlzdFZpZXdlciB2aWV3ZXIgPSBudWxsOworCisJCS8vIFRoZXNlIGFyZSB0aGUgc2ltdWxhdGlvbnMgd2UgYWRkZWQgdG8gdGhlIExpc3RWaWV3ZXIsIHdlIHJlbWVtYmVyCisJCS8vIHRoZXNlIHNvIHdlIGNhbiByZW1vdmUgdGhlbSB3aGVuIGEgZGlmZmVyZW50IHNldCBvZiBzaW11bGF0aW9ucyBpcworCQkvLyBzZWxlY3RlZC4KKwkJcHJpdmF0ZSBMaXN0PElTaW11bGF0aW9uPiBzZWxlY3RlZFNpbXVsYXRpb25zID0gbnVsbDsKKworCQkvKioKKwkJICogVGhpcyBpcyB1c2VkIGJ5IHRoZSBMaXN0Vmlld2VyIHRvIGdldCB0aGUgaW5pdGlhbCBsaXN0IG9mIElTaW11bGF0aW9uCisJCSAqIGluc3RhbmNlcy4KKwkJICogCisJCSAqIEBzZWUgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU3RydWN0dXJlZENvbnRlbnRQcm92aWRlciNnZXRFbGVtZW50cyhqYXZhLmxhbmcuT2JqZWN0KQorCQkgKi8KKwkJcHVibGljIE9iamVjdFtdIGdldEVsZW1lbnRzKAorCQkJCUBTdXBwcmVzc1dhcm5pbmdzKCJ1bnVzZWQiKSBPYmplY3QgaW5wdXRFbGVtZW50KSB7CisJCQlPYmplY3RbXSByZXRWYWx1ZSA9IG5ldyBPYmplY3RbXSB7fTsKKworCQkJLy8gQW55dGhpbmcgeWV0PworCQkJaWYgKHNlbGVjdGVkU2ltdWxhdGlvbnMgIT0gbnVsbCkgeworCQkJCS8vIFllcworCQkJCXJldFZhbHVlID0gc2VsZWN0ZWRTaW11bGF0aW9ucy50b0FycmF5KCk7CisJCQl9CisJCQlyZXR1cm4gcmV0VmFsdWU7CisJCX0gLy8gZ2V0RWxlbWVudHMKKworCQkvKioKKwkJICogVGhpcyBpcyBjYWxsZWQgd2hlbiB0aGUgdmlldyBpcyBjbG9zZWQsIHdlIGNvdWxkIHJlbW92ZSBvdXJzZWx2ZXMgYXMKKwkJICogYSBzZWxlY3Rpb24gc2VydmljZSBsaXN0ZW5lciwgYnV0IHRoaXMgaXMgcmVhbGx5IGZvciBjbGVhbmluZyB1cCBTV1QKKwkJICogdGhpbmdzLiBUaGUgbWV0aG9kIGlucHV0Q2hhbmdlZCB3aWxsIGJlIGNhbGxlZCBiZWZvcmUgZGlzcG9zZSB3aGVuCisJCSAqIHRoZSB2aWV3IGlzIGNsb3NlZCwgd2UgcmVtb3ZlIG91cnNlbHZlcyBmcm9tIHRoZSBzZWxlY3Rpb24gc2VydmljZQorCQkgKiB0aGVyZS4KKwkJICogCisJCSAqIEBzZWUgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JQ29udGVudFByb3ZpZGVyI2Rpc3Bvc2UoKQorCQkgKi8KKwkJcHVibGljIHZvaWQgZGlzcG9zZSgpIHsKKwkJCS8vIE5vdGhpbmcgdG8gZG8KKwkJfSAvLyBkaXNwb3NlCisKKwkJLyoqCisJCSAqIEBzZWUgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JQ29udGVudFByb3ZpZGVyI2lucHV0Q2hhbmdlZChvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlZpZXdlciwKKwkJICogICAgICBqYXZhLmxhbmcuT2JqZWN0LCBqYXZhLmxhbmcuT2JqZWN0KQorCQkgKi8KKwkJcHVibGljIHZvaWQgaW5wdXRDaGFuZ2VkKFZpZXdlciB2aWV3ZXIsIE9iamVjdCBvbGRJbnB1dCwgT2JqZWN0IG5ld0lucHV0KSB7CisJCQkvLyBXZSByZW1lbWJlciB0aGUgTGlzdFZpZXdlciB3ZSdyZSBwcm92aWRpbmcgY29udGVudCBmb3IgYmVjYXVzZQorCQkJLy8gd2UnbGwgaGF2ZSB0byBjaGFuZ2UgdGhlIGxpc3Qgb2YgdGhpbmdzIGl0IGNvbnRhaW5zIGluIHRoZQorCQkJLy8gc2VsZWN0aW9uQ2hhbmdlZCBtZXRob2QuCisJCQl0aGlzLnZpZXdlciA9IChMaXN0Vmlld2VyKSB2aWV3ZXI7CisKKwkJCS8vIFdlcmUgd2UgcHJldmlvdXNseSBnZXR0aW5nIGlucHV0IGZyb20gYSBkaWZmZXJlbnQgc2VydmljZT8KKwkJCWlmIChvbGRJbnB1dCAhPSBudWxsKSB7CisJCQkJLy8gWWVzCisJCQkJLy8gTm90IGFueSBtb3JlLgorCQkJCWZpbmFsIElTZWxlY3Rpb25TZXJ2aWNlIG9sZFNTID0gKElTZWxlY3Rpb25TZXJ2aWNlKSBvbGRJbnB1dDsKKwkJCQlvbGRTUy5yZW1vdmVQb3N0U2VsZWN0aW9uTGlzdGVuZXIodGhpcyk7CisJCQl9CisKKwkJCS8vIElzIHRoZXJlIHNvbWUgbmV3IGlucHV0IHdlIHNob3VsZCByZWdpc3RlciB3aXRoPworCQkJaWYgKG5ld0lucHV0ICE9IG51bGwpIHsKKwkJCQkvLyBZZXMKKwkJCQkvLyBSZWdpc3RlciB1cyB3aXRoIHRoZSBuZXcgc2VydmljZS4gU2luY2UgdGhlcmUgc2hvdWxkIG9ubHkKKwkJCQkvLyByZWFsbHkgYmUgb25lIHNlbGVjdGlvbiBzZXJ2aWNlIGluIEVjbGlwc2UsIHRoaXMgd291bGQgb25seQorCQkJCS8vIGhhcHBlbiBvbmNlLCBob3dldmVyLCB0aGUgY29kZSBjYW4gaGFuZGxlIGEgY2hhbmdlIGlmIG5lZWRlZC4KKwkJCQlmaW5hbCBJU2VsZWN0aW9uU2VydmljZSBzcyA9IChJU2VsZWN0aW9uU2VydmljZSkgbmV3SW5wdXQ7CisJCQkJc3MuYWRkUG9zdFNlbGVjdGlvbkxpc3RlbmVyKHRoaXMpOworCQkJfQorCisJCX0gLy8gaW5wdXRDaGFuZ2VkCisKKwkJLyoqCisJCSAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCB3aGVuZXZlciBBTllUSElORyBpcyBzZWxlY3RlZCBpbiB0aGUgRWNsaXBzZQorCQkgKiB3b3JrYmVuY2guIEl0J3Mgam9iIGlzIHRvIGZpbHRlciBvdXQgc2VsZWN0aW9ucyBvZgorCQkgKiB7QGxpbmsgSVNpbXVsYXRpb259IGluc3RhbmNlcyBhbmQgdXBkYXRlIHRoZSBsaXN0IGluIHRoZQorCQkgKiB7QGxpbmsgTGlzdFZpZXdlcn0uCisJCSAqIAorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnVpLklTZWxlY3Rpb25MaXN0ZW5lciNzZWxlY3Rpb25DaGFuZ2VkKG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2hQYXJ0LAorCQkgKiAgICAgIG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvbikKKwkJICovCisJCXB1YmxpYyB2b2lkIHNlbGVjdGlvbkNoYW5nZWQoZmluYWwgSVdvcmtiZW5jaFBhcnQgcGFydCwKKwkJCQlmaW5hbCBJU2VsZWN0aW9uIHNlbGVjdGlvbikgeworCisJCQkvLyBJcyB0aGlzIHNlbGVjdGlvbiBjaGFuZ2VkIGV2ZW50IGNvbWluZyBmcm9tIG91ciB2aWV3PworCQkJaWYgKHBhcnQgIT0gVXRpbGl0eVZpZXcudGhpcykgeworCQkJCS8vIE5vCisJCQkJLy8gVGhpcyB3aWxsIGhvbGQgdGhlIG5ldyBzaW11bGF0aW9ucyB0aGF0IGhhdmUgYmVlbiBzZWxlY3RlZAorCQkJCWZpbmFsIExpc3Q8SVNpbXVsYXRpb24+IHRlbXAgPSBuZXcgQXJyYXlMaXN0PElTaW11bGF0aW9uPigpOworCisJCQkJLy8gSXMgaXQgYSBzdHJ1Y3R1cmVkIHNlbGVjdGlvbj8KKwkJCQlpZiAoc2VsZWN0aW9uIGluc3RhbmNlb2YgSVN0cnVjdHVyZWRTZWxlY3Rpb24pIHsKKwkJCQkJLy8gWWVzCisJCQkJCWZpbmFsIExpc3QgbGlzdCA9ICgoSVN0cnVjdHVyZWRTZWxlY3Rpb24pIHNlbGVjdGlvbikKKwkJCQkJCQkudG9MaXN0KCk7CisKKwkJCQkJLy8gR28gdGhyb3VnaCBldmVyeXRoaW5nIGluIHRoZSBsaXN0IG9mIHRoaW5ncyB0aGF0IHdlcmUKKwkJCQkJLy8gc2VsZWN0ZWQgYW5kIHBpY2sgb3V0IHRoZSBvbmVzIHRoYXQgYXJlIElTaW11bGF0aW9ucy4KKwkJCQkJZm9yIChmaW5hbCBJdGVyYXRvciBzZWxlY3Rpb25JdGVyID0gbGlzdC5pdGVyYXRvcigpOyBzZWxlY3Rpb25JdGVyCisJCQkJCQkJLmhhc05leHQoKTspIHsKKwkJCQkJCWZpbmFsIE9iamVjdCBvYmogPSBzZWxlY3Rpb25JdGVyLm5leHQoKTsKKwkJCQkJCWlmIChvYmogaW5zdGFuY2VvZiBJU2ltdWxhdGlvbikgeworCQkJCQkJCXRlbXAuYWRkKChJU2ltdWxhdGlvbikgb2JqKTsKKwkJCQkJCX0KKwkJCQkJfSAvLyBmb3IgZWFjaCBzZWxlY3RlZCBpdGVtCisJCQkJfSAvLyBpZiBzdHJ1Y3R1cmVkIHNlbGVjdGlvbgorCisJCQkJLy8gRGlkIHdlIGZpbmQgYW55IG5ldyBzaW11bGF0aW9ucyB0aGF0IHdlcmUgc2VsZWN0ZWQ/CisJCQkJaWYgKHRlbXAuc2l6ZSgpID4gMCkgeworCQkJCQkvLyBZZXMKKwkJCQkJLy8gVGVsbCB0aGUgTGlzdFZpZXdlciBub3QgdG8gcmVkcmF3IHdoaWxlIHdlJ3JlIGNoYW5naW5nCisJCQkJCS8vIGl0cyBsaXN0LgorCQkJCQl2aWV3ZXIuZ2V0TGlzdCgpLnNldFJlZHJhdyhmYWxzZSk7CisJCQkJCXRyeSB7CisJCQkJCQkvLyBEbyB3ZSBoYXZlIGFueSBvbGQgc2VsZWN0aW9ucyB3ZSBzaG91bGQgcmVtb3ZlPworCQkJCQkJaWYgKHNlbGVjdGVkU2ltdWxhdGlvbnMgIT0gbnVsbCkgeworCQkJCQkJCS8vIFllcworCQkJCQkJCXZpZXdlci5yZW1vdmUoc2VsZWN0ZWRTaW11bGF0aW9ucy50b0FycmF5KCkpOworCQkJCQkJfQorCQkJCQkJLy8gQWRkIHRoZSBuZXcgc2VsZWN0aW9ucyB0byB0aGUgTGlzdFZpZXdlcidzIGxpc3QuIEl0CisJCQkJCQkvLyB3aWxsIHVzZSB0aGUgbGFiZWwgcHJvdmlkZXIgdG8gZ2V0IGEgdGV4dCBzdHJpbmcgZm9yCisJCQkJCQkvLyBlYWNoIG9uZS4KKwkJCQkJCXZpZXdlci5hZGQodGVtcC50b0FycmF5KCkpOworCisJCQkJCQkvLyBSZW1lbWJlciB3aGF0IHdlIGFkZGVkIHRoaXMgdGltZSBzbyB3ZSBjYW4gcmVtb3ZlIGl0CisJCQkJCQkvLyBuZXh0IHNlbGVjdGlvbi4KKwkJCQkJCXNlbGVjdGVkU2ltdWxhdGlvbnMgPSB0ZW1wOworCQkJCQl9IC8vIHRyeQorCQkJCQlmaW5hbGx5IHsKKwkJCQkJCS8vIFRoZSBMaXN0Vmlld2VyIHNob3VsZCB1cGRhdGUgaXRzZWxmIG5vdy4KKwkJCQkJCXZpZXdlci5nZXRMaXN0KCkuc2V0UmVkcmF3KHRydWUpOworCQkJCQl9CisJCQkJfSAvLyBpZiBhbnkgbmV3IHNpbXVsYXRpb25zIHNlbGVjdGVkCisJCQl9IC8vIGlmIHNlbGVjdGlvbiBjaGFuZ2VkIGV2ZW50IGNvbWluZyBmcm9tIG91ciB2aWV3PworCQl9IC8vIHNlbGVjdGlvbkNoYW5nZWQKKworCX0gLy8gVXRpbGl0eVZpZXdDb250ZW50UHJvdmlkZXIKKworCS8qKgorCSAqIFRoaXMgY2xhc3MgaXMgdGhlIGxhYmVsIHByb3ZpZGVyIGZvciB0aGUgdmlldy4gSXQgaXMgdXNlZCBieSB0aGUKKwkgKiBMaXN0Vmlld2VyIHRvIGNvbnZlcnQgSVNpbXVsYXRpb24gaW5zdGFuY2VzIHRvIHRleHQgc3RyaW5ncy4KKwkgKi8KKwlwdWJsaWMgc3RhdGljIGNsYXNzIFV0aWxpdHlWaWV3TGFiZWxQcm92aWRlciBpbXBsZW1lbnRzIElMYWJlbFByb3ZpZGVyIHsKKworCQkvKioKKwkJICogVGhpcyBpcyBjYWxsZWQgYnkgdGhlIHtAbGluayBMaXN0Vmlld2VyfSBmb3IgZWFjaCB7QGxpbmsgT2JqZWN0fSBpbgorCQkgKiBpdHMgbGlzdCB0byBnZW5lcmF0ZSBhIHRleHQge0BsaW5rIFN0cmluZ30gdGhhdCByZXByZXNlbnRzIHRoYXQKKwkJICoge0BsaW5rIE9iamVjdH0uIFRoaXMgaW1wbGVtZW50YXRpb24gZGlncyBpbnRvIHRoZSB7QGxpbmsgU2ltdWxhdGlvbn0KKwkJICogdG8gZ2V0IHRoZSB7QGxpbmsgU2NlbmFyaW99IGFuZCB0aGVuIGZyb20gdGhhdCBpdCBvYnRhaW5zIHRoZQorCQkgKiBjYW5vbmljYWwge0BsaW5rIEdyYXBofS4gSXQgdGhlbiBnb2VzIHRocm91Z2ggdGhlIHtAbGluayBOb2RlfXMgb2YKKwkJICogdGhlIHtAbGluayBHcmFwaH0gYW5kIHVzaW5nIGEge0BsaW5rIExhdExvbmdQcm92aWRlckFkYXB0ZXJGYWN0b3J5fQorCQkgKiBjcmVhdGVzIGEge0BsaW5rIExhdExvbmdQcm92aWRlcn0gZm9yIGVhY2gge0BsaW5rIE5vZGV9IHRoYXQgY2FuCisJCSAqIHJldHVybiB0aGUgbGF0aXR1ZGUgYW5kIGxvbmdpdHVkZSBkYXRhIG9mIHRoZSB7QGxpbmsgTm9kZX0uIFRoYXQKKwkJICogZGF0YSBpcyBqdXN0IHR1cm5lZCBpbnRvIGEgc3RyaW5nIGFuZCByZXR1cm5lZCBhcyB0aGUgdGV4dHVhbAorCQkgKiByZXByZXNlbnRhdGlvbiBvZiB0aGUge0BsaW5rIFNpbXVsYXRpb259LgorCQkgKiAKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklMYWJlbFByb3ZpZGVyI2dldFRleHQoamF2YS5sYW5nLk9iamVjdCkKKwkJICovCisJCXB1YmxpYyBTdHJpbmcgZ2V0VGV4dChPYmplY3QgZWxlbWVudCkgeworCQkJZmluYWwgU3RyaW5nQnVpbGRlciBzYiA9IG5ldyBTdHJpbmdCdWlsZGVyKCk7CisKKwkJCS8vIEV4dHJhY3QgdGhlIHNjZW5hcmlvIGFuZCB0aGVuIHRoZSBjYW5vbmljYWwgZ3JhcGgKKwkJCWZpbmFsIElTaW11bGF0aW9uIHNpbXVsYXRpb24gPSAoSVNpbXVsYXRpb24pIGVsZW1lbnQ7CisJCQlmaW5hbCBTY2VuYXJpbyBzY2VuYXJpbyA9IHNpbXVsYXRpb24uZ2V0U2NlbmFyaW8oKTsKKwkJCWZpbmFsIEdyYXBoIGNhbm9uaWNhbEdyYXBoID0gc2NlbmFyaW8uZ2V0Q2Fub25pY2FsR3JhcGgoKTsKKworCQkJLy8gR2V0IHRoZSBub2RlcyBmcm9tIHRoZSBncmFwaCBhbmQgaXRlcmF0ZSB0aHJvdWdoIHRoZW0uIE5vdGUgdGhhdAorCQkJLy8gdGhlIGdldE5vZGVzIGNhbGwgcmV0dXJucyBhIE1hcCBpbnN0YW5jZSB3aGVyZSB0aGUga2V5cyBhcmUgdGhlCisJCQkvLyBVUkkncyBvZiB0aGUgTm9kZSBpbnN0YW5jZXMuIFdlIGdldCB0aGUgdmFsdWVzIG9mIHRoZSBtYXAgdG8KKwkJCS8vIGl0ZXJhdGUgdGhyb3VnaCB0aGUgbm9kZXMuCisJCQkvLyBNYXA8U3RyaW5nLFJlY3RhbmdsZVtdPiBtYXAgPSBuZXcgSGFzaE1hcDxTdHJpbmcsUmVjdGFuZ2xlW10+KCk7CisJCQlmb3IgKGZpbmFsIEl0ZXJhdG9yIG5vZGVJdGVyID0gY2Fub25pY2FsR3JhcGguZ2V0Tm9kZXMoKS52YWx1ZXMoKQorCQkJCQkuaXRlcmF0b3IoKTsgbm9kZUl0ZXIuaGFzTmV4dCgpOykgeworCQkJCWZpbmFsIE5vZGUgbm9kZSA9IChOb2RlKSBub2RlSXRlci5uZXh0KCk7CisKKwkJCQkvLyBXZSdkIGxpa2UgdG8gaGF2ZSBhY2Nlc3MgdG8gbGF0L2xvbmcgZGF0YSBvZiB0aGUgbm9kZSBpZgorCQkJCS8vIHRoZXJlIGlzIGFueSwgdG8gZG8gdGhhdCB3ZSB1c2UgYSBmYWN0b3J5IHRvIGNyZWF0ZSBhbgorCQkJCS8vIGFkYXB0ZXIgdGhhdCBrbm93cyBhYm91dCB0aGUgaW5uZXIgZGV0YWlscyBvZiBub2RlcyAoaXQKKwkJCQkvLyByZWFsbHkga25vd3MgYWJvdXQgYWxsIElkZW50aWZpYWJsZXMpIGFuZCBpbXBsZW1lbnRzIHRoZQorCQkJCS8vIExhdExvbmdQcm92aWRlciBpbnRlcmZhY2UuCisJCQkJZmluYWwgTGF0TG9uZ1Byb3ZpZGVyIGxhdExvbmdQcm92aWRlciA9IChMYXRMb25nUHJvdmlkZXIpIExhdExvbmdQcm92aWRlckFkYXB0ZXJGYWN0b3J5LklOU1RBTkNFCisJCQkJCQkuYWRhcHQobm9kZSwgTGF0TG9uZ1Byb3ZpZGVyLmNsYXNzKTsKKworCQkJCS8vIFRoZSBub2RlIG1heSBvciBtYXkgbm90IGhhdmUgbGF0L2xvbmcgZGF0YSBhc3NvY2lhdGVkIHdpdGgKKwkJCQkvLyBpdCwgaWYgaXQgZG9lc24ndCB0aGUgbGlzdCB0aGF0J3MgcmV0dXJuZWQgd2lsbCBiZSBlbXB0eS4KKwkJCQlmaW5hbCBMYXRMb25nIGxhdExvbmcgPSBsYXRMb25nUHJvdmlkZXIuZ2V0TGF0TG9uZygpOworCisJCQkJLy8gU3RyaW5nIG5hbWUgPSBub2RlLmdldER1YmxpbkNvcmUoKS5nZXRJZGVudGlmaWVyKCk7CisJCQkJLy8gTmVpZ2hib3JVdGlsaXR5LnNldEJCb3gobWFwLG5hbWUsbGF0TG9uZyk7CisKKwkJCQkvLyBOb3cgd2UganVzdCBnbyB0aHJvdWdoIGVhY2ggc2VnbWVudCBhbmQgY3JlYXRlIGEgc3RyaW5nLgorCQkJCWZvciAoU2VnbWVudCBzZWdtZW50IDogbGF0TG9uZy5nZXRTZWdtZW50cygpKSB7CisKKwkJCQkJc2IuYXBwZW5kKGNyZWF0ZVN0cmluZ09mTGF0TG9uZ0RhdGEoc2VnbWVudCkpOworCQkJCQlzYi5hcHBlbmQoIi8vLyIpOworCQkJCX0gLy8gZm9yCisJCQl9IC8vIGZvcgorCQkJLy8gTmVpZ2hib3JVdGlsaXR5LnByb2Nlc3NCQm94KG1hcCk7CisJCQkvLyBOb3cgaWYgd2UgZGlkbid0IGZpbmQgYW55IGxhdC9sb25nIGRhdGEsIHdlIGp1c3QgcmV0dXJuIGEgc2ltcGxlCisJCQkvLyByZXNwb25zZS4gVGhpcyB3aWxsIGFwcGVhciBpbiB0aGUgdmlldyBpbnN0ZWFkIG9mIHRoZSBkYXRhLgorCQkJU3RyaW5nIHJldFZhbHVlID0gc2IudG9TdHJpbmcoKTsKKwkJCXJldFZhbHVlID0gcmV0VmFsdWUubGVuZ3RoKCkgPT0gMCA/ICJObyBMYXQvTG9uZyBEYXRhIiA6IHJldFZhbHVlOworCisJCQlyZXR1cm4gcmV0VmFsdWU7CisJCX0gLy8gZ2V0VGV4dAorCisJCS8qKgorCQkgKiBXZSBkb24ndCBoYXZlIGFueSBpbWFnZXMgYXNzb2NpYXRlZCB3aXRoIHtAbGluayBTaW11bGF0aW9ufSwgYnV0IGlmCisJCSAqIHdlIGRpZCB3ZSdkIHJldHVybiB0aGVtIGhlcmUuIFJldHVybmluZyBudWxsIGp1c3QgdGVsbHMgdGhlIGNhbGxlcgorCQkgKiB0aGF0IHRoZXJlIGFyZSBubyBpbWFnZXMuCisJCSAqIAorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSUxhYmVsUHJvdmlkZXIjZ2V0SW1hZ2UoamF2YS5sYW5nLk9iamVjdCkKKwkJICovCisJCXB1YmxpYyBJbWFnZSBnZXRJbWFnZShAU3VwcHJlc3NXYXJuaW5ncygidW51c2VkIikgT2JqZWN0IGVsZW1lbnQpIHsKKwkJCXJldHVybiBudWxsOworCQl9IC8vIGdldEltYWdlCisKKwkJLyoqCisJCSAqIFJlcXVpcmVkIGJ5IHRoZSBpbnRlcmZhY2UsIGJ1dCBub3QgdXNlZCBieSB1cy4KKwkJICogCisJCSAqIEBzZWUgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JQmFzZUxhYmVsUHJvdmlkZXIjYWRkTGlzdGVuZXIob3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JTGFiZWxQcm92aWRlckxpc3RlbmVyKQorCQkgKi8KKwkJcHVibGljIHZvaWQgYWRkTGlzdGVuZXIoCisJCQkJQFN1cHByZXNzV2FybmluZ3MoInVudXNlZCIpIElMYWJlbFByb3ZpZGVyTGlzdGVuZXIgbGlzdGVuZXIpIHsKKwkJCS8vIG5vdGhpbmcKKwkJfQorCisJCS8qKgorCQkgKiBSZXF1aXJlZCBieSB0aGUgaW50ZXJmYWNlLCBidXQgbm90IHVzZWQgYnkgdXMuCisJCSAqIAorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSUJhc2VMYWJlbFByb3ZpZGVyI2Rpc3Bvc2UoKQorCQkgKi8KKwkJcHVibGljIHZvaWQgZGlzcG9zZSgpIHsKKwkJCS8vIG5vdGhpbmcKKwkJfQorCisJCS8qKgorCQkgKiBSZXF1aXJlZCBieSB0aGUgaW50ZXJmYWNlLCBidXQgbm90IHVzZWQgYnkgdXMuCisJCSAqIAorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSUJhc2VMYWJlbFByb3ZpZGVyI2lzTGFiZWxQcm9wZXJ0eShqYXZhLmxhbmcuT2JqZWN0LAorCQkgKiAgICAgIGphdmEubGFuZy5TdHJpbmcpCisJCSAqLworCQlwdWJsaWMgYm9vbGVhbiBpc0xhYmVsUHJvcGVydHkoCisJCQkJQFN1cHByZXNzV2FybmluZ3MoInVudXNlZCIpIE9iamVjdCBlbGVtZW50LAorCQkJCUBTdXBwcmVzc1dhcm5pbmdzKCJ1bnVzZWQiKSBTdHJpbmcgcHJvcGVydHkpIHsKKwkJCXJldHVybiBmYWxzZTsKKwkJfQorCisJCS8qKgorCQkgKiBSZXF1aXJlZCBieSB0aGUgaW50ZXJmYWNlLCBidXQgbm90IHVzZWQgYnkgdXMuCisJCSAqIAorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSUJhc2VMYWJlbFByb3ZpZGVyI3JlbW92ZUxpc3RlbmVyKG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSUxhYmVsUHJvdmlkZXJMaXN0ZW5lcikKKwkJICovCisJCXB1YmxpYyB2b2lkIHJlbW92ZUxpc3RlbmVyKAorCQkJCUBTdXBwcmVzc1dhcm5pbmdzKCJ1bnVzZWQiKSBJTGFiZWxQcm92aWRlckxpc3RlbmVyIGxpc3RlbmVyKSB7CisJCQkvLyBub3RoaW5nCisJCX0KKwl9IC8vIFV0aWxpdHlWaWV3TGFiZWxQcm92aWRlcgorCisJLyoqCisJICogQHBhcmFtIHNlZ21lbnQKKwkgKiBAcmV0dXJuIGEgc3RyaW5nIG9mIHRoZSBsYXQvbG9uZyBwb2ludHMKKwkgKi8KKwlwdWJsaWMgc3RhdGljIFN0cmluZyBjcmVhdGVTdHJpbmdPZkxhdExvbmdEYXRhKGZpbmFsIFNlZ21lbnQgc2VnbWVudCkgeworCQlmaW5hbCBTdHJpbmdCdWlsZGVyIHNiID0gbmV3IFN0cmluZ0J1aWxkZXIoKTsKKwkJZmluYWwgaW50IHNpemUgPSBzZWdtZW50LnNpemUoKTsKKwkJZm9yIChpbnQgaSA9IDA7IGkgPCBzaXplOyBpKyspIHsKKwkJCXNiLmFwcGVuZCgiKCIpOworCQkJc2IuYXBwZW5kKHNlZ21lbnQubGF0aXR1ZGUoaSkpOworCQkJc2IuYXBwZW5kKCIsICIpOworCQkJc2IuYXBwZW5kKHNlZ21lbnQubG9uZ2l0dWRlKGkpKTsKKwkJCXNiLmFwcGVuZCgiKSIpOworCQl9IC8vIGZvciBlYWNoIGxhdC9sb25nIHBhaXIKKwkJcmV0dXJuIHNiLnRvU3RyaW5nKCk7CisJfSAvLyBjcmVhdGVTdHJpbmdPZkxhdExvbmdEYXRhCit9IC8vIFV0aWxpdHlWaWV3CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnNhbXBsZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9zYW1wbGUvYWRhcHRpb24vRXhhbXBsZTEuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0uc2FtcGxlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3NhbXBsZS9hZGFwdGlvbi9FeGFtcGxlMS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY4ZjZjMmYKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnNhbXBsZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9zYW1wbGUvYWRhcHRpb24vRXhhbXBsZTEuamF2YQpAQCAtMCwwICsxLDEyOSBAQAorLy8gRXhhbXBsZTEuamF2YQorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnNhbXBsZS5hZGFwdGlvbjsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguRWRnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguR3JhcGg7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLk5vZGU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNjZW5hcmlvLlNjZW5hcmlvOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuYWRhcHRlcnMuc3BhdGlhbC5nZW8uTGF0TG9uZzsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmFkYXB0ZXJzLnNwYXRpYWwuZ2VvLkxhdExvbmcuU2VnbWVudDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmFkYXB0ZXJzLnNwYXRpYWwuZ2VvLkxhdExvbmdQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmFkYXB0ZXJzLnNwYXRpYWwuZ2VvLkxhdExvbmdQcm92aWRlckFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC50ZXN0cy5EZXRlcm1pbmlzdGljU0VJUlNjZW5hcmlvVGVzdDsKKworLyoqCisgKiBUaGlzIGNsYXNzIGlzIGFuIGV4YW1wbGUgb2YgaG93IHRvIG9idGFpbiB0aGUgY2Fub25pY2FsIGdyYXBoIGZyb20gYQorICogc2NlbmFyaW8sIGFjY2VzcyB0aGUgbm9kZXMgaW4gdGhlIGdyYXBoLCBhbmQgYWRhcHQgdGhlIG5vZGVzIHRvIHByb2R1Y2UKKyAqIGxhdC9sb25nIGRhdGEgc2V0cyBmb3IgZWFjaCBub2RlLgorICovCitwdWJsaWMgY2xhc3MgRXhhbXBsZTEgeworCisJLyoqCisJICogQHBhcmFtIGFyZ3MKKwkgKiAgICAgICAgICAgIG5vbmUKKwkgKi8KKwlwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CisKKwkJLy8gVGhpcyBjcmVhdGVzIGEgc2NlbmFyaW8gdGhhdCdzIHJlYWR5IHRvIGJlICJzdGVwcGVkIiAoaS5lLiwKKwkJLy8gc2ltdWxhdGVkKS4gVGhlIHdvcmxkIGlzIGEgbGF0dGljZSAoZ3JpZCkgdGhhdCAyeDIgd2hlcmUgZWFjaCBub2RlCisJCS8vIGhhcyBhIHBvcHVsYXRpb24gb2YgMTAwIGh1bWFucyBhbmQgaGFzIGFuIGFyZWEgb2YgMTAwIHNxdWFyZQorCQkvLyBraWxvbWV0ZXJzLiBUaGVyZSBpcyBvbmUgZGlzZWFzZSB0aGF0IGlzIG1vZGVsZWQgd2l0aCBhCisJCS8vICJkZXRlcm1pbmlzdGljIFNFSVIgZGlzZWFzZSBtb2RlbCIuIE9uZSBwZXJzb24gaW4gdGhlIG5vZGUgYXQKKwkJLy8gcG9zaXRpb24gWzBdWzBdLCBpbiB0aGUgdXBwZXIgbGVmdCBvZiB0aGUgZ3JpZCwgaXMgaW5mZWN0ZWQuCisJCWZpbmFsIFNjZW5hcmlvIHNjZW5hcmlvID0gRGV0ZXJtaW5pc3RpY1NFSVJTY2VuYXJpb1Rlc3QuY3JlYXRlU2NlbmFyaW8oCisJCQkJMiwgMik7CisKKwkJLy8gVGhpcyB3aWxsIGluaXRpYWxpemUgdGhlIHNjZW5hcmlvIGFuZCBtYWtlIGl0IHJlYWR5IHRvIHN0ZXAgdGhyb3VnaAorCQkvLyB0aGUgc2ltdWxhdGlvbiBzZXF1ZW5jZS4gSW4gcGFydGljdWxhciwgaXQgd2lsbCBjcmVhdGUgdGhlIGNhbm9uaWNhbAorCQkvLyBncmFwaCBmcm9tIHRoZSBzY2VuYXJpbydzIG1vZGVsLgorCQlzY2VuYXJpby5pbml0aWFsaXplKCk7CisKKwkJLy8gV2UgZ2V0IHRoZSBncmFwaC4uLgorCQlmaW5hbCBHcmFwaCBjYW5vbmljYWxHcmFwaCA9IHNjZW5hcmlvLmdldENhbm9uaWNhbEdyYXBoKCk7CisKKwkJLy8gLi4uYW5kIGNhbiBub3cgaXRlcmF0ZSB0aHJvdWdoIHRoZSBub2Rlcy4gTm90ZSB0aGF0IHRoZSBtZXRob2QKKwkJLy8gImdldE5vZGVzIiByZXR1cm5zIGEgbWFwIGluZGV4ZWQgYnkgdGhlIFVSSSBvZiBlYWNoIG9mIHRoZSBub2RlcywKKwkJLy8gdGh1cyB3ZSBuZWVkIHRvIGdldCB0aGUgdmFsdWVzIG9mIHRoZSBtYXAgdG8gaGF2ZSBhbiBhY3R1YWwgbGlzdCB0bworCQkvLyBpdGVyYXRvciBvdmVyLgorCQlmb3IgKGZpbmFsIEl0ZXJhdG9yIG5vZGVJdGVyID0gY2Fub25pY2FsR3JhcGguZ2V0Tm9kZXMoKS52YWx1ZXMoKQorCQkJCS5pdGVyYXRvcigpOyBub2RlSXRlci5oYXNOZXh0KCk7KSB7CisJCQlmaW5hbCBOb2RlIG5vZGUgPSAoTm9kZSkgbm9kZUl0ZXIubmV4dCgpOworCisJCQkvLyBXZSdkIGxpa2UgdG8gaGF2ZSBhY2Nlc3MgdG8gbGF0L2xvbmcgZGF0YSBvZiB0aGUgbm9kZSBpZiB0aGVyZSBpcworCQkJLy8gYW55LCB0byBkbyB0aGF0IHdlIHVzZSBhIGZhY3RvcnkgdG8gY3JlYXRlIGFuIGFkYXB0ZXIgdGhhdCBrbm93cworCQkJLy8gYWJvdXQgdGhlIGlubmVyIGRldGFpbHMgb2Ygbm9kZXMgKGl0IHJlYWxseSBrbm93cyBhYm91dCBhbGwKKwkJCS8vIElkZW50aWZpYWJsZXMpIGFuZCBpbXBsZW1lbnRzIHRoZSBMYXRMb25nUHJvdmlkZXIgaW50ZXJmYWNlLgorCQkJZmluYWwgTGF0TG9uZ1Byb3ZpZGVyIGxhdExvbmdQcm92aWRlciA9IChMYXRMb25nUHJvdmlkZXIpIExhdExvbmdQcm92aWRlckFkYXB0ZXJGYWN0b3J5LklOU1RBTkNFCisJCQkJCS5hZGFwdChub2RlLCBMYXRMb25nUHJvdmlkZXIuY2xhc3MpOworCisJCQkvLyBUaGUgbm9kZSBtYXkgb3IgbWF5IG5vdCBoYXZlIGxhdC9sb25nIGRhdGEgYXNzb2NpYXRlZCB3aXRoIGl0LCBpZgorCQkJLy8gaXQgZG9lc24ndCB0aGUgbGlzdCB0aGF0J3MgcmV0dXJuZWQgd2lsbCBiZSBlbXB0eS4KKwkJCWZpbmFsIExhdExvbmcgbGF0TG9uZ0RhdGEgPSBsYXRMb25nUHJvdmlkZXIuZ2V0TGF0TG9uZygpOworCisJCQlTeXN0ZW0ub3V0LnByaW50bG4oIlRoZSBsYXQvbG9uZyBkYXRhIGZvciBcIiIKKwkJCQkJKyBub2RlLmdldER1YmxpbkNvcmUoKS5nZXRUaXRsZSgpICsgIlwiIGlzOiIpOworCQkJb3V0cHV0TGF0TG9uZ0RhdGEobGF0TG9uZ0RhdGEpOworCQl9IC8vIGZvciBlYWNoIG5vZGUKKworCQlTeXN0ZW0ub3V0LnByaW50bG4oIkVkZ2VzLi4uIik7CisKKwkJLy8gRm9yIGZ1biwgbGV0J3MgZG8gdGhlIGVkZ2VzLCB0aGVyZSBtaWdodCBub3QgYmUgYW55dGhpbmcgZGVmaW5lZCBmb3IKKwkJLy8gdGhlbS4uLnlldAorCQlmb3IgKGZpbmFsIEl0ZXJhdG9yIGVkZ2VJdGVyID0gY2Fub25pY2FsR3JhcGguZ2V0RWRnZXMoKS52YWx1ZXMoKQorCQkJCS5pdGVyYXRvcigpOyBlZGdlSXRlci5oYXNOZXh0KCk7KSB7CisJCQlmaW5hbCBFZGdlIGVkZ2UgPSAoRWRnZSkgZWRnZUl0ZXIubmV4dCgpOworCQkJZmluYWwgTGF0TG9uZ1Byb3ZpZGVyIGxhdExvbmdQcm92aWRlciA9IChMYXRMb25nUHJvdmlkZXIpIExhdExvbmdQcm92aWRlckFkYXB0ZXJGYWN0b3J5LklOU1RBTkNFCisJCQkJCS5hZGFwdChlZGdlLCBMYXRMb25nUHJvdmlkZXIuY2xhc3MpOworCisJCQlmaW5hbCBMYXRMb25nIGxhdExvbmdEYXRhID0gbGF0TG9uZ1Byb3ZpZGVyLmdldExhdExvbmcoKTsKKworCQkJU3lzdGVtLm91dC5wcmludGxuKCJUaGUgbGF0L2xvbmcgZGF0YSBmb3IgXCIiCisJCQkJCSsgZWRnZS5nZXREdWJsaW5Db3JlKCkuZ2V0VGl0bGUoKSArICJcIiBpczoiKTsKKwkJCW91dHB1dExhdExvbmdEYXRhKGxhdExvbmdEYXRhKTsKKwkJfSAvLyBmb3IgZWFjaCBlZGdlCisJfSAvLyBtYWluCisKKwkvKioKKwkgKiBAcGFyYW0gbGF0TG9uZworCSAqICAgICAgICAgICAgYSBMYXRMb25nIGluc3RhbmNlCisJICovCisJcHVibGljIHN0YXRpYyB2b2lkIG91dHB1dExhdExvbmdEYXRhKExhdExvbmcgbGF0TG9uZykgeworCQlmb3IgKFNlZ21lbnQgc2VnbWVudCA6IGxhdExvbmcuZ2V0U2VnbWVudHMoKSkgeworCQkJZmluYWwgaW50IHNpemUgPSBzZWdtZW50LnNpemUoKTsKKwkJCWZvciAoaW50IGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7CisJCQkJU3lzdGVtLm91dC5wcmludGxuKGNyZWF0ZVN0cmluZ09mTGF0TG9uZ0RhdGEoc2VnbWVudCkpOworCQkJfSAvLyBmb3IgZWFjaCBsYXQvbG9uZyBwYWlyCisJCQlTeXN0ZW0ub3V0LnByaW50bG4oKTsKKwkJfSAvLyBmb3IgZWFjaCBzZWdtZW50CisJfSAvLyBvdXRwdXRMYXRMb25nRGF0YQorCisJLyoqCisJICogQHBhcmFtIHNlZ21lbnQKKwkgKiBAcmV0dXJuIGEgc3RyaW5nIG9mIHRoZSBsYXQvbG9uZyBwb2ludHMKKwkgKi8KKwlwdWJsaWMgc3RhdGljIFN0cmluZyBjcmVhdGVTdHJpbmdPZkxhdExvbmdEYXRhKGZpbmFsIFNlZ21lbnQgc2VnbWVudCkgeworCQlmaW5hbCBTdHJpbmdCdWlsZGVyIHNiID0gbmV3IFN0cmluZ0J1aWxkZXIoKTsKKwkJZmluYWwgaW50IHNpemUgPSBzZWdtZW50LnNpemUoKTsKKwkJZm9yIChpbnQgaSA9IDA7IGkgPCBzaXplOyBpKyspIHsKKwkJCXNiLmFwcGVuZCgiKCIpOworCQkJc2IuYXBwZW5kKHNlZ21lbnQubGF0aXR1ZGUoaSkpOworCQkJc2IuYXBwZW5kKCIsICIpOworCQkJc2IuYXBwZW5kKHNlZ21lbnQubG9uZ2l0dWRlKGkpKTsKKwkJCXNiLmFwcGVuZCgiKSIpOworCQl9IC8vIGZvciBlYWNoIGxhdC9sb25nIHBhaXIKKwkJcmV0dXJuIHNiLnRvU3RyaW5nKCk7CisJfSAvLyBjcmVhdGVTdHJpbmdPZkxhdExvbmdEYXRhCit9IC8vIEV4YW1wbGUxCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnNhbXBsZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9zYW1wbGUvYWRhcHRpb24vUmVsYXRpdmVWYWx1ZVZpZXdFeGFtcGxlLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnNhbXBsZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9zYW1wbGUvYWRhcHRpb24vUmVsYXRpdmVWYWx1ZVZpZXdFeGFtcGxlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmU5YjM1ZAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0uc2FtcGxlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3NhbXBsZS9hZGFwdGlvbi9SZWxhdGl2ZVZhbHVlVmlld0V4YW1wbGUuamF2YQpAQCAtMCwwICsxLDY2OCBAQAorLy8gUmVsYXRpdmVWYWx1ZVZpZXdFeGFtcGxlLmphdmEKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5zYW1wbGUuYWRhcHRpb247CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgamF2YS50ZXh0Lk51bWJlckZvcm1hdDsKK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OworaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JTGFiZWxQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklMYWJlbFByb3ZpZGVyTGlzdGVuZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVN0cnVjdHVyZWRTZWxlY3Rpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JVGFibGVDb2xvclByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVRhYmxlTGFiZWxQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklUcmVlQ29udGVudFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuVHJlZVZpZXdlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlZpZXdlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlZpZXdlclNvcnRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguR3JhcGg7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLk5vZGVMYWJlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuRGVjb3JhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuYWRhcHRlcnMucmVsYXRpdmV2YWx1ZS5SZWxhdGl2ZVZhbHVlUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5hZGFwdGVycy5yZWxhdGl2ZXZhbHVlLlJlbGF0aXZlVmFsdWVQcm92aWRlckFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uam9icy5zaW11bGF0aW9uLklTaW11bGF0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5TV1Q7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5TZWxlY3Rpb25BZGFwdGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuU2VsZWN0aW9uRXZlbnQ7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmdyYXBoaWNzLkNvbG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ncmFwaGljcy5JbWFnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuVHJlZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5UcmVlQ29sdW1uOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklTZWxlY3Rpb25MaXN0ZW5lcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5JU2VsZWN0aW9uU2VydmljZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5JV29ya2JlbmNoUGFydDsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5wYXJ0LlZpZXdQYXJ0OworCisvKioKKyAqIFRoaXMgY2xhc3MgaXMgYW4gZXhhbXBsZSBvZiBob3cgdG8gcnVuIEdVSSBjb2RlIGluIEVjbGlwc2UgYW5kIG1vbml0b3IgdGhlCisgKiAic2VsZWN0ZWQiIHNpbXVsYXRpb24sIGFuZCBob3cgdG8gZXh0cmFjdCB0aGUgY2Fub25pY2FsIGdyYXBoIGZyb20gdGhlCisgKiBzZWxlY3RlZCBzaW11bGF0aW9uIGFuZCB0aGVuIGV4dHJhY3QgZGF0YSBmcm9tIGl0LiBJbiBwYXJ0aWN1bGFyLCB0aGlzCisgKiBleGFtcGxlIHZpZXcgaWxsdXN0cmF0ZXMgaG93IHRvIGV4cGxvcmUgdGhlIGNhbm9uaWNhbCBncmFwaCBhbmQgZGlzY292ZXIKKyAqIHByb3BlcnR5IHZhbHVlcyBvZiBncmFwaCBjb21wb25lbnRzIHRoYXQgY2FuIGJlIHJlcHJlc2VudGVkIGFzIGEgdmFsdWUKKyAqIGJldHdlZW4gMC4wIGFuZCAxLjAgKGluY2x1c2l2ZSkgcmVsYXRpdmUgdG8gb3RoZXIgcGVlciBwcm9wZXJ0eSB2YWx1ZXMuIEZvcgorICogaW5zdGFuY2UsIGluIHRoZSBjYXNlIG9mIGEgZGlzZWFzZSBtb2RlbCwgdGhlIGRpc2Vhc2UgbW9kZWwgbGFiZWwgdmFsdWVzCisgKiBjb250YWluIHBvcHVsYXRpb24gbnVtYmVycyBmb3IgcG9wdWxhdGlvbiBtZW1iZXJzIGluIGRpZmZlcmVudCBkaXNlYXNlIHN0YXRlcworICogKGUuZy4sICJzdXNjZXB0aWJsZSIsICJleHBvc2VkIiwgImluZmVjdGlvdXMiLCAicmVjb3ZlcmVkIikuIFRoZSBudW1iZXIgb2YKKyAqIG1lbWJlcnMgaW4gZWFjaCBzdGF0ZSBjYW4gYmUgcmVwcmVzZW50ZWQgcmVsYXRpdmUgdG8gdGhlIHRvdGFsIHBvcHVsYXRpb24KKyAqIGZpZ3VyZSAoaS5lLiwgYXMgYSBwZXJjZW50YWdlIG9mIHRoZSBzdW0gb2YgYWxsIHRoZSBzdGF0ZXMpLiBUaGUgcmVsYXRpdmUKKyAqIHZhbHVlcyBjYW4gYmUgaW50ZXJwcmV0ZWQgYnkgYSBnZW5lcmljIGdyYXBoaWNhbCBpbnRlcmZhY2UgdG8gZGlzcGxheQorICogZGlmZmVyZW50IGNvbG9ycyBvciBpbnRlbnNpdGllcyB0byByZXByZXNlbnQgdGhlIHByb3BlcnR5IHZhbHVlLgorICogPHA+CisgKiBUaGUgZGlzY292ZXJ5IG9mIHByb3BlcnRpZXMgYW5kIHRoZWlyIGNvbnZlcnNpb24gdG8gcmVsYXRpdmUgdmFsdWVzIGlzCisgKiBmYWNpbGl0YXRlZCBieSBhbiBpbnRlcmZhY2UgY2FsbGVkIHtAbGluayBSZWxhdGl2ZVZhbHVlUHJvdmlkZXJ9LiBJbnN0YW5jZXMKKyAqIG9mIGNsYXNzZXMgdGhhdCBpbXBsZW1lbnQgdGhpcyBpbnRlcmZhY2UgY2FuIHByb3ZpZGUgYSBsaXN0IG9mIHByb3BlcnRpZXMgZm9yCisgKiB3aGljaCByZWxhdGl2ZSB2YWx1ZXMgY2FuIGJlIGdlbmVyYXRlZCwgYW5kLCBnaXZlbiBvbmUgb2YgdGhvc2UgcHJvcGVydGllcywKKyAqIGNhbiBnZW5lcmF0ZSBpdHMgcmVsYXRpdmUgdmFsdWUuIFRoZSBwcm9wZXJ0aWVzIGNvbnRhaW4gZGV0YWlscyBzdWNoIGFzIHRoZQorICogbmFtZSBvZiB0aGUgcHJvcGVydHkgYW5kIGEgdGV4dCBkZXNjcmlwdGlvbiwgYW1vbmcgb3RoZXIgdGhpbmdzLiBUaGVzZSB2YWx1ZXMKKyAqIGNvdWxkIGJlIHByZXNlbnRlZCB0byBhIHVzZXIgb2YgYSBncmFwaGljYWwgaW50ZXJmYWNlIGluIGEgbWVudSB0byBzZWxlY3QgdGhlCisgKiAocmVsYXRpdmUpIHByb3BlcnR5IHZhbHVlcyB0byBkaXNwbGF5LiBUaGUgdHJpY2ssIGFuZCB0aGUgcG9pbnQgb2YgdGhpcworICogZXhhbXBsZSwgaXMgb2J0YWluaW5nIHtAbGluayBSZWxhdGl2ZVZhbHVlUHJvdmlkZXJ9J3MgZm9yIGNvbXBvbmVudHMgb2YgdGhlCisgKiBncmFwaC4KKyAqIDxwPgorICogSW5zdGFuY2VzIG9mIHtAbGluayBSZWxhdGl2ZVZhbHVlUHJvdmlkZXJ9IGFyZSBjcmVhdGVkIGJ5IGFuIGFkYXB0ZXIgZmFjdG9yeQorICogY2FsbGVkIHtAbGluayBSZWxhdGl2ZVZhbHVlUHJvdmlkZXJBZGFwdGVyRmFjdG9yeX0uIFRoaXMgYWRhcHRlciBmYWN0b3J5IGNhbgorICogYmUgZ2l2ZW4gYW55IGNvbXBvbmVudCBpbiBhIGdyYXBoIGFuZCwgaWYgcG9zc2libGUsIGNyZWF0ZSBhCisgKiB7QGxpbmsgUmVsYXRpdmVWYWx1ZVByb3ZpZGVyfSBmb3IgaXQuIElmIGl0IGNhbid0LCBpdCBzaW1wbHkgcmV0dXJucworICogPGNvZGU+bnVsbDwvY29kZT4gYXMgdGhlIHJlc3VsdCBvZiB0aGUgYXR0ZW1wdC4gVGhlIGZhY3RvcnkgY2FuIGJlCisgKiBnZW5lcmljYWxseSBleHRlbmRlZCB0byBlbmNvbXBhc3MgbmV3IGdyYXBoIGNvbXBvbmVudHMuIFRoaXMgYWxsb3dzIGNsaWVudHMKKyAqIG9mIHRoZSBmYWN0b3J5IHRvIG9idGFpbiBhZGFwdGVycyBmb3IgZnV0dXJlIGVuaGFuY2VtZW50cyB3aXRoIG5vIGNoYW5nZSB0bworICogdGhlIGludGVyZmFjZS4gQW4gZXhhbXBsZSBvZiB0aGlzIGlzIHRoZQorICoge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5wcm92aWRlci5TdGFuZGFyZFJlbGF0aXZlVmFsdWVQcm92aWRlckFkYXB0ZXJGYWN0b3J5fQorICogd2hpY2ggcHJvdmlkZXMgcmVsYXRpdmUgdmFsdWVzIGZvciBwcm9wZXJ0aWVzIG9mIHRoZSAic3RhbmRhcmQiIFNURU0gZGlzZWFzZQorICogbW9kZWwgY29tcG9uZW50cywgaW4gcGFydGljdWxhciwgZm9yIHRoZSBkaXNlYXNlIG1vZGVsIGxhYmVsIHZhbHVlcyAoZS5nLiwKKyAqIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU0lMYWJlbFZhbHVlfSwKKyAqIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU0lSTGFiZWxWYWx1ZX0sIGFuZAorICoge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TRUlSTGFiZWxWYWx1ZX0pLgorICogPHA+CisgKiBUaGlzIGV4YW1wbGUgaWxsdXN0cmF0ZXMgaG93IHRvIHRyYWNrIHdoaWNoIHNpbXVsYXRpb24gaXMgc2VsZWN0ZWQgYW5kIHRoZW4KKyAqIGhvdyB0byBleHRyYWN0IHRoZSBzaW11bGF0aW9uJ3MgdW5kZXJseWluZworICoge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zY2VuYXJpby5TY2VuYXJpb30gYW5kIHRoZW4gZnJvbSB0aGF0IG9idGFpbgorICogdGhlIDxlbT5jYW5vbmljYWwgZ3JhcGg8L2VtPi4gVGhlIGNhbm9uaWNhbCBncmFwaCBpcyB0aGUgYWN0dWFsIGdyYXBoIHVzZWQKKyAqIHRvIHJlcHJlc2VudCB0aGUgc2ltdWxhdGlvbiBzdGF0ZSBpbmZvcm1hdGlvbi4gVGhlIHNpbXVsYXRpb24gcHJvY2VlZHMgYnkKKyAqIHVwZGF0aW5nIHRoZSB2YWx1ZXMgb2YgbGFiZWxzIG9uIGVkZ2VzIGFuZCBub2RlcyBpbiB0aGUgZ3JhcGguIFRoZSBleGFtcGxlCisgKiBzaG93cyBob3cgdG8gb2J0YWluIHRoZSBkZWNvcmF0b3JzIChlLmcuLCBkaXNlYXNlIG1vZGVscyBzdWNoIGFzCisgKiB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLkRldGVybWluaXN0aWNTRUlSRGlzZWFzZU1vZGVsfSkKKyAqIHRoYXQgdXBkYXRlIHRoZSBzdGF0ZSBvZiB0aGUgZ3JhcGggYW5kIHRoZW4gZnJvbSB0aG9zZSBkaXNjb3ZlciBwcm9wZXJ0aWVzCisgKiB0aGF0IGNhbiBoYXZlIHJlbGF0aXZlIHZhbHVlcy4gVGhlIGV4YW1wbGUgdGhlbiBzaG93cyBob3cgdG8gdXNlIHRoZSBhZGFwdGVyCisgKiBmYWN0b3J5IHRvIGNyZWF0ZSB7QGxpbmsgUmVsYXRpdmVWYWx1ZVByb3ZpZGVyfSdzLgorICogPHA+CisgKiBUbyBzZWUgdGhlIGV4YW1wbGUgaW4gYWN0aW9uLCB5b3UgbmVlZCB0bzoKKyAqIDxvbD4KKyAqIDxsaT4gUnVuIFNURU08L2xpPgorICogPGxpPiBPcGVuIHRoZSAiUmVsYXRpdmUgVmFsdWUgVmlldyBFeGFtcGxlIiB2aWV3LgorICogIldpbmRvdy0+U2hvdyZuYnNwO1ZpZXctPk90aGVyLT5TVEVNLT5SZWxhdGl2ZSZuYnNwO1ZhbHVlJm5ic3A7VmlldyZuYnNwO0V4YW1wbGUiPC9saT4KKyAqIDxsaT4gT3BlbiB0aGUgIkFjdGl2ZSBTaW11bGF0aW9ucyIgdmlldy4KKyAqICJXaW5kb3ctPlNob3cmbmJzcDtWaWV3LT5BY3RpdmUmbmJzcDtTaW11bGF0aW9ucyI8L2xpPi4KKyAqIAorICogPGxpPiBHbyB0byB0aGUgIlNjZW5hcmlvcyIgdmlldy4gSXQgc2hvd3MgdGhlIFNURU0gU2NlbmFyaW9zIHRoYXQgYXJlIHBsdWdnZWQKKyAqIGludG8gU1RFTS4gPC9saT4KKyAqIDxsaT4gRXhwYW5kICJUZXN0LT5EaXNlYXNlJm5ic3A7TW9kZWxzLT5TdGFuZGFyZCIgYW5kIHlvdSdsbCBzZWUgZGlzZWFzZQorICogbW9kZWxpbmcgc2NlbmFyaW9zIHRoYXQgYXJlIHBsdWdnZWQgaW50byBTVEVNLiA8L2xpPgorICogPGxpPiBEb3VibGUtY2xpY2sgb24gYSBzY2VuYXJpbyBpbiB0aGUgbGlzdCAoZS5nLiwgIlNFSVIgMSB4IDEiKSBpdCB3aWxsCisgKiBiZWdpbiBzaW11bGF0aW9uIGFuZCBhbiBlbnRyeSB3aWxsIGFwcGVhciBpbiB0aGUgIkFjdGl2ZSBTaW11bGF0aW9ucyIgdmlldy4KKyAqIDwvbGk+CisgKiA8bGk+IFNpbmdsZSBjbGljayBvbiB0aGUgZW50cnkgaW4gdGhlIEFjdGl2ZSBTaW11bGF0aW9ucyB2aWV3LiBUaGlzIHdpbGwKKyAqIHNlbGVjdCB0aGF0IHNpbXVsYXRpb24gYW5kIHRoZSByZWxhdGl2ZSB2YWx1ZXMgZm9yIHRoYXQgc2NlbmFyaW8gd2lsbCBhcHBlYXIKKyAqIGluIHRoZSBSZWxhdGl2ZSBWYWx1ZSBWaWV3IEV4YW1wbGUgdmlldy48L2xpPgorICogPC9vbD4KKyAqIElmIHlvdSBkb3VibGUtY2xpY2sgb24gYW5vdGhlciBwbHVnZ2VkLWluIFNjZW5hcmlvIHNvIHRoYXQgdHdvIGVudHJpZXMgYXJlCisgKiBkaXNwbGF5ZWQgaW4gdGhlIEFjdGl2ZSBTaW11bGF0aW9ucyB2aWV3IGFuZCBpZiB5b3Ugc2VsZWN0IGJvdGgsIHlvdSdsbCBzZWUKKyAqIGRhdGEgZnJvbSBib3RoIHNpbXVsYXRpb25zLgorICogCisgKi8KK3B1YmxpYyBjbGFzcyBSZWxhdGl2ZVZhbHVlVmlld0V4YW1wbGUgZXh0ZW5kcyBWaWV3UGFydCB7CisKKwkvKioKKwkgKiBUaGUgaWRlbnRpZmllciBvZiB0aGUgUmVsYXRpdmUgVmFsdWUgVmlldyBFeGFtcGxlIFZpZXcuIE5vYm9keSB1c2VzIHRoaXMKKwkgKiByaWdodCBub3csIGJ1dCBpdCB3b3VsZCBiZSB1c2VmdWwgaWYgd2Ugd2FudGVkIHRvIHByb2dyYW1hdGljYWxseSBhZGQKKwkgKiB0aGlzIHZpZXcgdG8gYSBwZXJzcGVjdGl2ZS4KKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBJRF9WSUVXX0VYQU1QTEUxX1ZJRVcgPSAib3JnLmVjbGlwc2Uuc3RlbS5zYW1wbGUuYWRhcHRlci5yZWxhdGl2ZXZhbHVldmlld2V4YW1wbGUiOworCisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IE5VTUJFUl9PRl9GUkFDVElPTkFMX0RJR0lUUyA9IDI7CisKKwlUcmVlVmlld2VyIHRyZWVWaWV3ZXIgPSBudWxsOworCisJcHJpdmF0ZSBzdGF0aWMgTnVtYmVyRm9ybWF0IGZvcm1hdHRlciA9IG51bGw7CisKKwkvKioKKwkgKiBAcmV0dXJuIGEgbnVtYmVyIGZvcm1hdHRlcgorCSAqLworCXByb3RlY3RlZCBzdGF0aWMgTnVtYmVyRm9ybWF0IGdldEZvcm1hdHRlcigpIHsKKwkJLy8gSXMgdGhlcmUgYWxyZWFkeSBhIGZvcm1hdHRlcj8KKwkJaWYgKGZvcm1hdHRlciA9PSBudWxsKSB7CisJCQkvLyBObworCQkJZm9ybWF0dGVyID0gTnVtYmVyRm9ybWF0LmdldE51bWJlckluc3RhbmNlKCk7CisJCQlmb3JtYXR0ZXIuc2V0TWF4aW11bUZyYWN0aW9uRGlnaXRzKE5VTUJFUl9PRl9GUkFDVElPTkFMX0RJR0lUUyk7CisJCQlmb3JtYXR0ZXIuc2V0TWluaW11bUZyYWN0aW9uRGlnaXRzKE5VTUJFUl9PRl9GUkFDVElPTkFMX0RJR0lUUyk7CisJCX0KKwkJcmV0dXJuIGZvcm1hdHRlcjsKKwl9IC8vIGdldEZvcm1hdHRlcgorCisJLyoqCisJICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIHdoZW4gdGhlIHZpZXcgaXMgY3JlYXRlZCBhbmQgaXQgaGFzIHRoZQorCSAqIHJlc3BvbnNpYmlsaXR5IGZvciBkb2luZyBhbGwgb2YgdGhlIGluaXRpYWxpemF0aW9uLiBJdCBjcmVhdGVzIHRoZQorCSAqIFRyZWVWaWV3ZXIgYW5kIGluc3RhbmNlcyBvZiB0aGUgQ29udGVudFByb3ZpZGVyIGFuZCBMYWJlbFByb3ZpZGVyIGZvciB0aGUKKwkgKiB2aWV3ZXIuIEl0IGFsc28gZ2V0cyBhIHJlZmVyZW5jZSB0byB0aGUgc2VsZWN0aW9uIHNlcnZpY2UgYW5kIHJlZ2lzdGVycworCSAqIHRoZSBjb250ZW50IHByb3ZpZGVyIHNvIGl0IHdpbGwgYmUgbm90aWZpZWQgd2hlbiBzb21ldGhpbmcgaXMgc2VsZWN0ZWQuCisJICogCisJICogQHNlZSBvcmcuZWNsaXBzZS51aS5wYXJ0LldvcmtiZW5jaFBhcnQjY3JlYXRlUGFydENvbnRyb2wob3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlKQorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGNyZWF0ZVBhcnRDb250cm9sKENvbXBvc2l0ZSBwYXJlbnQpIHsKKwkJLy8gQ3JlYXRlIHRoZSBUcmVlVmlld2VyCisJCXRyZWVWaWV3ZXIgPSBuZXcgVHJlZVZpZXdlcihwYXJlbnQsIFNXVC5GVUxMX1NFTEVDVElPTiB8IFNXVC5IX1NDUk9MTAorCQkJCXwgU1dULlZfU0NST0xMKTsKKworCQlmaW5hbCBUcmVlIHRyZWUgPSB0cmVlVmlld2VyLmdldFRyZWUoKTsKKwkJdHJlZS5zZXRMaW5lc1Zpc2libGUodHJ1ZSk7CisJCXRyZWUuc2V0SGVhZGVyVmlzaWJsZSh0cnVlKTsKKworCQlmaW5hbCBUcmVlQ29sdW1uIHNpbXVsYXRpb25Db2x1bW4gPSBuZXcgVHJlZUNvbHVtbih0cmVlLCBTV1QuTk9ORSk7CisJCXNpbXVsYXRpb25Db2x1bW4uc2V0VGV4dCgiU2ltdWxhdGlvbiIpOworCQlzaW11bGF0aW9uQ29sdW1uLnNldFJlc2l6YWJsZSh0cnVlKTsKKwkJc2ltdWxhdGlvbkNvbHVtbi5zZXRXaWR0aCgyMDApOworCQlzaW11bGF0aW9uQ29sdW1uLmFkZFNlbGVjdGlvbkxpc3RlbmVyKG5ldyBTZWxlY3Rpb25BZGFwdGVyKCkgeworCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgdm9pZCB3aWRnZXRTZWxlY3RlZChAU3VwcHJlc3NXYXJuaW5ncygidW51c2VkIikKKwkJCVNlbGVjdGlvbkV2ZW50IGUpIHsKKwkJCQkoKFJlbGF0aXZlVmFsdWVWaWV3U29ydGVyKSB0cmVlVmlld2VyLmdldFNvcnRlcigpKS5kb1NvcnQoMCk7CisJCQkJdHJlZVZpZXdlci5yZWZyZXNoKHRydWUpOworCQkJfQorCQl9KTsKKworCQlmaW5hbCBUcmVlQ29sdW1uIGRlY29yYXRvckNvbHVtbiA9IG5ldyBUcmVlQ29sdW1uKHRyZWUsIFNXVC5OT05FKTsKKwkJZGVjb3JhdG9yQ29sdW1uLnNldFRleHQoIkRlY29yYXRvciIpOworCQlkZWNvcmF0b3JDb2x1bW4uc2V0UmVzaXphYmxlKHRydWUpOworCQlkZWNvcmF0b3JDb2x1bW4uc2V0V2lkdGgoMjAwKTsKKwkJZGVjb3JhdG9yQ29sdW1uLmFkZFNlbGVjdGlvbkxpc3RlbmVyKG5ldyBTZWxlY3Rpb25BZGFwdGVyKCkgeworCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgdm9pZCB3aWRnZXRTZWxlY3RlZChAU3VwcHJlc3NXYXJuaW5ncygidW51c2VkIikKKwkJCVNlbGVjdGlvbkV2ZW50IGUpIHsKKwkJCQkoKFJlbGF0aXZlVmFsdWVWaWV3U29ydGVyKSB0cmVlVmlld2VyLmdldFNvcnRlcigpKS5kb1NvcnQoMSk7CisJCQkJdHJlZVZpZXdlci5yZWZyZXNoKHRydWUpOworCQkJfQorCQl9KTsKKworCQlmaW5hbCBUcmVlQ29sdW1uIG5vZGVDb2x1bW4gPSBuZXcgVHJlZUNvbHVtbih0cmVlLCBTV1QuTk9ORSk7CisJCW5vZGVDb2x1bW4uc2V0VGV4dCgiTm9kZSIpOworCQlub2RlQ29sdW1uLnNldFJlc2l6YWJsZSh0cnVlKTsKKwkJbm9kZUNvbHVtbi5zZXRXaWR0aCgxMDApOworCQlub2RlQ29sdW1uLmFkZFNlbGVjdGlvbkxpc3RlbmVyKG5ldyBTZWxlY3Rpb25BZGFwdGVyKCkgeworCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgdm9pZCB3aWRnZXRTZWxlY3RlZChAU3VwcHJlc3NXYXJuaW5ncygidW51c2VkIikKKwkJCVNlbGVjdGlvbkV2ZW50IGUpIHsKKwkJCQkoKFJlbGF0aXZlVmFsdWVWaWV3U29ydGVyKSB0cmVlVmlld2VyLmdldFNvcnRlcigpKS5kb1NvcnQoMik7CisJCQkJdHJlZVZpZXdlci5yZWZyZXNoKHRydWUpOworCQkJfQorCQl9KTsKKworCQlmaW5hbCBUcmVlQ29sdW1uIGN1cnJlbnRWYWx1ZUNvbHVtbiA9IG5ldyBUcmVlQ29sdW1uKHRyZWUsIFNXVC5OT05FKTsKKwkJY3VycmVudFZhbHVlQ29sdW1uLnNldFRleHQoIkN1cnJlbnQgVmFsdWVzIik7CisJCWN1cnJlbnRWYWx1ZUNvbHVtbi5zZXRSZXNpemFibGUodHJ1ZSk7CisJCWN1cnJlbnRWYWx1ZUNvbHVtbi5zZXRXaWR0aCgxMDApOworCQljdXJyZW50VmFsdWVDb2x1bW4uYWRkU2VsZWN0aW9uTGlzdGVuZXIobmV3IFNlbGVjdGlvbkFkYXB0ZXIoKSB7CisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyB2b2lkIHdpZGdldFNlbGVjdGVkKEBTdXBwcmVzc1dhcm5pbmdzKCJ1bnVzZWQiKQorCQkJU2VsZWN0aW9uRXZlbnQgZSkgeworCQkJCSgoUmVsYXRpdmVWYWx1ZVZpZXdTb3J0ZXIpIHRyZWVWaWV3ZXIuZ2V0U29ydGVyKCkpLmRvU29ydCgzKTsKKwkJCQl0cmVlVmlld2VyLnJlZnJlc2godHJ1ZSk7CisJCQl9CisJCX0pOworCisJCWZpbmFsIFRyZWVDb2x1bW4gcmVsYXRpdmVWYWx1ZUNvbHVtbiA9IG5ldyBUcmVlQ29sdW1uKHRyZWUsIFNXVC5OT05FKTsKKwkJcmVsYXRpdmVWYWx1ZUNvbHVtbi5zZXRUZXh0KCJSZWxhdGl2ZSBWYWx1ZXMiKTsKKwkJcmVsYXRpdmVWYWx1ZUNvbHVtbi5zZXRSZXNpemFibGUodHJ1ZSk7CisJCXJlbGF0aXZlVmFsdWVDb2x1bW4uc2V0V2lkdGgoMTAwKTsKKwkJY3VycmVudFZhbHVlQ29sdW1uLmFkZFNlbGVjdGlvbkxpc3RlbmVyKG5ldyBTZWxlY3Rpb25BZGFwdGVyKCkgeworCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgdm9pZCB3aWRnZXRTZWxlY3RlZChAU3VwcHJlc3NXYXJuaW5ncygidW51c2VkIikKKwkJCVNlbGVjdGlvbkV2ZW50IGUpIHsKKwkJCQkoKFJlbGF0aXZlVmFsdWVWaWV3U29ydGVyKSB0cmVlVmlld2VyLmdldFNvcnRlcigpKS5kb1NvcnQoNCk7CisJCQkJdHJlZVZpZXdlci5yZWZyZXNoKHRydWUpOworCQkJfQorCQl9KTsKKworCQkvLyBMZXQgdGhlIExpc3RWaWV3ZXIga25vdyB3aG8gaXRzIGNvbnRlbnQgYW5kIGxhYmVsIHByb3ZpZGVycyBhcmUKKwkJdHJlZVZpZXdlci5zZXRDb250ZW50UHJvdmlkZXIobmV3IFJlbGF0aXZlVmFsdWVWaWV3Q29udGVudFByb3ZpZGVyKCkpOworCQl0cmVlVmlld2VyLnNldExhYmVsUHJvdmlkZXIobmV3IFJlbGF0aXZlVmFsdWVWaWV3TGFiZWxQcm92aWRlcigpKTsKKwkJdHJlZVZpZXdlci5zZXRTb3J0ZXIobmV3IFJlbGF0aXZlVmFsdWVWaWV3U29ydGVyKCkpOworCisJCS8vIFRoaXMgY2FsbCB0ZWxscyB0aGUgdmlld2VyJ3MgY29udGVudCBwcm92aWRlciB3aGVyZSBpdCBzaG91bGQgZ2V0IHRoZQorCQkvLyBzb3VyY2Ugb2YgaXRzIGNvbnRlbnQuIEluIHRoaXMgY2FzZSBpdCBpcyB0aGUgc2VsZWN0aW9uIHNlcnZpY2UuCisJCXRyZWVWaWV3ZXIuc2V0SW5wdXQoZ2V0U2l0ZSgpLmdldFdvcmtiZW5jaFdpbmRvdygpCisJCQkJLmdldFNlbGVjdGlvblNlcnZpY2UoKSk7CisKKwkJLy8gV2UgYWxzbyB3YW50IHRvIGJlIGFibGUgdG8gaGF2ZSBhIHVzZXIgc2VsZWN0IGEgc2ltbHVhdGlvbiBmcm9tIG91cgorCQkvLyB2aWV3IGFuZCBoYXZlIHRoYXQgYmUgc2VlbiBieSBvdGhlcnMuIFNvIHdlIHJlZ2lzdGVyIHRoZSBUcmVlVmlld2VyCisJCS8vIGluc3RhbmNlIGFzIHRoZSB2aWV3J3Mgc2VsZWN0aW9uIHByb3ZpZGVyLiBXaGVuIHlvdSBjbGljayBvbiB0aGUgdmlldworCQkvLyBpbiB0aGUgaW50ZXJmYWNlIGl0IGZpbmRzIHRoZSB1bmRlcmx5aW5nIE9iamVjdCAoaS5lLiwgSVNpbXVsYXRpb24pCisJCS8vIHlvdSBzZWxlY3RlZCBhbmQgcGFzc2VzIGl0IHRvIHRoZSBzZWxlY3Rpb24gc2VydmljZS4KKwkJLy8gZ2V0U2l0ZSgpLnNldFNlbGVjdGlvblByb3ZpZGVyKHRyZWVWaWV3ZXIpOworCisJfSAvLyBjcmVhdGVQYXJ0Q29udHJvbAorCisJLyoqCisJICogVGhpcyBpcyByZXF1aXJlZCBieSB0aGUgaW50ZXJmYWNlLCBidXQgd2UncmUgbm90IHVzaW5nIGl0LgorCSAqIAorCSAqIEBzZWUgb3JnLmVjbGlwc2UudWkucGFydC5Xb3JrYmVuY2hQYXJ0I3NldEZvY3VzKCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBzZXRGb2N1cygpIHsKKwkJLy8gbm90aGluZworCX0gLy8gc2V0Rm9jdXMKKworCS8qKgorCSAqIFRoaXMgY2xhc3MgaXMgdGhlIGNvbnRlbnQgcHJvdmlkZXIuCisJICovCisJcHVibGljIGNsYXNzIFJlbGF0aXZlVmFsdWVWaWV3Q29udGVudFByb3ZpZGVyIGltcGxlbWVudHMKKwkJCUlUcmVlQ29udGVudFByb3ZpZGVyLCBJU2VsZWN0aW9uTGlzdGVuZXIgeworCisJCUlTZWxlY3Rpb25TZXJ2aWNlIHNzID0gbnVsbDsKKworCQlwcml2YXRlIFRyZWVWaWV3ZXIgdmlld2VyID0gbnVsbDsKKworCQlwcml2YXRlIExpc3Q8SVNpbXVsYXRpb24+IHNlbGVjdGVkU2ltdWxhdGlvbnM7CisKKwkJLyoqCisJCSAqIEBzZWUgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU3RydWN0dXJlZENvbnRlbnRQcm92aWRlciNnZXRFbGVtZW50cyhqYXZhLmxhbmcuT2JqZWN0KQorCQkgKi8KKwkJcHVibGljIE9iamVjdFtdIGdldEVsZW1lbnRzKE9iamVjdCBpbnB1dEVsZW1lbnQpIHsKKwkJCXJldHVybiBuZXcgT2JqZWN0W10geyBpbnB1dEVsZW1lbnQgfTsKKwkJfSAvLyBnZXRFbGVtZW50cworCisJCS8qKgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSUNvbnRlbnRQcm92aWRlciNkaXNwb3NlKCkKKwkJICovCisJCXB1YmxpYyB2b2lkIGRpc3Bvc2UoKSB7CisJCQkvLyBUT0RPIEF1dG8tZ2VuZXJhdGVkIG1ldGhvZCBzdHViCisJCX0KKworCQkvKioKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklDb250ZW50UHJvdmlkZXIjaW5wdXRDaGFuZ2VkKG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuVmlld2VyLAorCQkgKiAgICAgIGphdmEubGFuZy5PYmplY3QsIGphdmEubGFuZy5PYmplY3QpCisJCSAqLworCQlwdWJsaWMgdm9pZCBpbnB1dENoYW5nZWQoVmlld2VyIHZpZXdlciwgT2JqZWN0IG9sZElucHV0LCBPYmplY3QgbmV3SW5wdXQpIHsKKwkJCS8vIFdlIHJlbWVtYmVyIHRoZSBUcmVlVmlld2VyIHdlJ3JlIHByb3ZpZGluZyBjb250ZW50IGZvciBiZWNhdXNlCisJCQkvLyB3ZSdsbCBoYXZlIHRvIGNoYW5nZSB0aGUgbGlzdCBvZiB0aGluZ3MgaXQgY29udGFpbnMgaW4gdGhlCisJCQkvLyBzZWxlY3Rpb25DaGFuZ2VkIG1ldGhvZC4KKwkJCXRoaXMudmlld2VyID0gKFRyZWVWaWV3ZXIpIHZpZXdlcjsKKworCQkJLy8gV2VyZSB3ZSBwcmV2aW91c2x5IGdldHRpbmcgaW5wdXQgZnJvbSBhIGRpZmZlcmVudCBzZXJ2aWNlPworCQkJaWYgKG9sZElucHV0ICE9IG51bGwpIHsKKwkJCQkvLyBZZXMKKwkJCQkvLyBOb3QgYW55IG1vcmUuCisJCQkJZmluYWwgSVNlbGVjdGlvblNlcnZpY2Ugb2xkU1MgPSAoSVNlbGVjdGlvblNlcnZpY2UpIG9sZElucHV0OworCQkJCW9sZFNTLnJlbW92ZVBvc3RTZWxlY3Rpb25MaXN0ZW5lcih0aGlzKTsKKwkJCX0KKworCQkJLy8gSXMgdGhlcmUgc29tZSBuZXcgaW5wdXQgd2Ugc2hvdWxkIHJlZ2lzdGVyIHdpdGg/CisJCQlpZiAobmV3SW5wdXQgIT0gbnVsbCkgeworCQkJCS8vIFllcworCQkJCS8vIFJlZ2lzdGVyIHVzIHdpdGggdGhlIG5ldyBzZXJ2aWNlLiBTaW5jZSB0aGVyZSBzaG91bGQgb25seQorCQkJCS8vIHJlYWxseSBiZSBvbmUgc2VsZWN0aW9uIHNlcnZpY2UgaW4gRWNsaXBzZSwgdGhpcyB3b3VsZCBvbmx5CisJCQkJLy8gaGFwcGVuIG9uY2UsIGhvd2V2ZXIsIHRoZSBjb2RlIGNhbiBoYW5kbGUgYSBjaGFuZ2UgaWYgbmVlZGVkLgorCQkJCXNzID0gKElTZWxlY3Rpb25TZXJ2aWNlKSBuZXdJbnB1dDsKKwkJCQlzcy5hZGRQb3N0U2VsZWN0aW9uTGlzdGVuZXIodGhpcyk7CisJCQl9CisKKwkJfSAvLyBpbnB1dENoYW5nZWQKKworCQkvKioKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklUcmVlQ29udGVudFByb3ZpZGVyI2dldENoaWxkcmVuKGphdmEubGFuZy5PYmplY3QpCisJCSAqLworCQlwdWJsaWMgT2JqZWN0W10gZ2V0Q2hpbGRyZW4oT2JqZWN0IHBhcmVudEVsZW1lbnQpIHsKKwkJCU9iamVjdFtdIHJldFZhbHVlID0gbnVsbDsKKwkJCWlmIChwYXJlbnRFbGVtZW50IGluc3RhbmNlb2YgSVNlbGVjdGlvblNlcnZpY2UpIHsKKwkJCQlyZXRWYWx1ZSA9IHNlbGVjdGVkU2ltdWxhdGlvbnMgPT0gbnVsbCA/IG51bGwKKwkJCQkJCTogc2VsZWN0ZWRTaW11bGF0aW9ucy50b0FycmF5KCk7CisJCQl9IGVsc2UgaWYgKHBhcmVudEVsZW1lbnQgaW5zdGFuY2VvZiBJU2ltdWxhdGlvbikgeworCQkJCUlTaW11bGF0aW9uIHNpbXVsYXRpb24gPSAoSVNpbXVsYXRpb24pIHBhcmVudEVsZW1lbnQ7CisJCQkJcmV0VmFsdWUgPSBzaW11bGF0aW9uLmdldFNjZW5hcmlvKCkuZ2V0Q2Fub25pY2FsR3JhcGgoKQorCQkJCQkJLmdldERlY29yYXRvcnMoKS50b0FycmF5KCk7CisJCQl9IGVsc2UgaWYgKHBhcmVudEVsZW1lbnQgaW5zdGFuY2VvZiBEZWNvcmF0b3IpIHsKKwkJCQlEZWNvcmF0b3IgZGVjb3JhdG9yID0gKERlY29yYXRvcikgcGFyZW50RWxlbWVudDsKKwkJCQlyZXRWYWx1ZSA9IGRlY29yYXRvci5nZXRMYWJlbHNUb1VwZGF0ZSgpLnRvQXJyYXkoKTsKKwkJCX0KKworCQkJLy8gZWxzZSBpZiAocGFyZW50RWxlbWVudCBpbnN0YW5jZW9mIExhYmVsKSB7CisJCQkvLyBMYWJlbCBsYWJlbCA9IChMYWJlbCkgcGFyZW50RWxlbWVudDsKKwkJCS8vIFJlbGF0aXZlVmFsdWVQcm92aWRlciBydnAgPSAoUmVsYXRpdmVWYWx1ZVByb3ZpZGVyKQorCQkJLy8gUmVsYXRpdmVWYWx1ZVByb3ZpZGVyQWRhcHRlckZhY3RvcnkuSU5TVEFOQ0UKKwkJCS8vIC5hZGFwdChsYWJlbCwgUmVsYXRpdmVWYWx1ZVByb3ZpZGVyLmNsYXNzKTsKKwkJCS8vIHJldFZhbHVlID0gcnZwLmdldFByb3BlcnRpZXMoKS50b0FycmF5KCk7CisJCQkvLyB9CisJCQlyZXR1cm4gcmV0VmFsdWU7CisJCX0gLy8gZ2V0Q2hpbGRyZW4KKworCQkvKioKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklUcmVlQ29udGVudFByb3ZpZGVyI2dldFBhcmVudChqYXZhLmxhbmcuT2JqZWN0KQorCQkgKi8KKwkJQFN1cHByZXNzV2FybmluZ3MoIm51bGwiKQorCQlwdWJsaWMgT2JqZWN0IGdldFBhcmVudChPYmplY3QgZWxlbWVudCkgeworCQkJT2JqZWN0IHJldFZhbHVlID0gbnVsbDsKKwkJCWlmIChlbGVtZW50IGluc3RhbmNlb2YgSVNlbGVjdGlvblNlcnZpY2UpIHsKKwkJCQlyZXRWYWx1ZSA9IG51bGw7CisJCQl9IGVsc2UgaWYgKGVsZW1lbnQgaW5zdGFuY2VvZiBJU2ltdWxhdGlvbikgeworCQkJCXJldFZhbHVlID0gc3M7CisJCQl9IGVsc2UgaWYgKGVsZW1lbnQgaW5zdGFuY2VvZiBEZWNvcmF0b3IpIHsKKwkJCQlEZWNvcmF0b3IgZGVjb3JhdG9yID0gKERlY29yYXRvcikgZWxlbWVudDsKKwkJCQlyZXRWYWx1ZSA9IGRlY29yYXRvci5lQ29udGFpbmVyKCkuZUNvbnRhaW5lcigpOworCQkJfQorCQkJLy8gaWYgKGVsZW1lbnQgaW5zdGFuY2VvZiBMYWJlbCkgeworCQkJLy8gTGFiZWwgbGFiZWwgPSAoTGFiZWwpIGVsZW1lbnQ7CisJCQkvLyBsYWJlbC5nCisJCQkvLyB9CisJCQlyZXR1cm4gcmV0VmFsdWU7CisJCX0gLy8gZ2V0UGFyZW50CisKKwkJLyoqCisJCSAqIEBzZWUgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JVHJlZUNvbnRlbnRQcm92aWRlciNoYXNDaGlsZHJlbihqYXZhLmxhbmcuT2JqZWN0KQorCQkgKi8KKwkJcHVibGljIGJvb2xlYW4gaGFzQ2hpbGRyZW4oT2JqZWN0IGVsZW1lbnQpIHsKKwkJCWJvb2xlYW4gcmV0VmFsdWUgPSBmYWxzZTsKKwkJCWlmIChlbGVtZW50IGluc3RhbmNlb2YgSVNlbGVjdGlvblNlcnZpY2UpIHsKKwkJCQlyZXRWYWx1ZSA9IHNlbGVjdGVkU2ltdWxhdGlvbnMgIT0gbnVsbAorCQkJCQkJJiYgc2VsZWN0ZWRTaW11bGF0aW9ucy5zaXplKCkgPiAwOworCQkJfSBlbHNlIGlmIChlbGVtZW50IGluc3RhbmNlb2YgSVNpbXVsYXRpb24pIHsKKwkJCQlmaW5hbCBJU2ltdWxhdGlvbiBzaW11bGF0aW9uID0gKElTaW11bGF0aW9uKSBlbGVtZW50OworCQkJCWZpbmFsIEdyYXBoIGNhbm9uaWNhbEdyYXBoID0gc2ltdWxhdGlvbi5nZXRTY2VuYXJpbygpCisJCQkJCQkuZ2V0Q2Fub25pY2FsR3JhcGgoKTsKKwkJCQkvLyBEbyB3ZSBoYXZlIGEgY2Fub25pY2FsIEdyYXBoIHlldD8KKwkJCQlpZiAoY2Fub25pY2FsR3JhcGggIT0gbnVsbCkgeworCQkJCQkvLyBZZXMKKwkJCQkJcmV0VmFsdWUgPSBjYW5vbmljYWxHcmFwaC5nZXREZWNvcmF0b3JzKCkuc2l6ZSgpID4gMDsKKwkJCQl9IC8vIGlmCisJCQl9IGVsc2UgaWYgKGVsZW1lbnQgaW5zdGFuY2VvZiBEZWNvcmF0b3IpIHsKKwkJCQlEZWNvcmF0b3IgZGVjb3JhdG9yID0gKERlY29yYXRvcikgZWxlbWVudDsKKwkJCQlyZXRWYWx1ZSA9IGRlY29yYXRvci5nZXRMYWJlbHNUb1VwZGF0ZSgpLnNpemUoKSA+IDA7CisJCQl9CisKKwkJCS8vIGVsc2UgaWYgKGVsZW1lbnQgaW5zdGFuY2VvZiBMYWJlbCkgeworCQkJLy8gTGFiZWwgbGFiZWwgPSAoTGFiZWwpIGVsZW1lbnQ7CisJCQkvLyBSZWxhdGl2ZVZhbHVlUHJvdmlkZXIgcnZwID0gKFJlbGF0aXZlVmFsdWVQcm92aWRlcikKKwkJCS8vIFJlbGF0aXZlVmFsdWVQcm92aWRlckFkYXB0ZXJGYWN0b3J5LklOU1RBTkNFCisJCQkvLyAuYWRhcHQobGFiZWwsIFJlbGF0aXZlVmFsdWVQcm92aWRlci5jbGFzcyk7CisJCQkvLyByZXRWYWx1ZSA9IHJ2cCAhPSBudWxsICYmIHJ2cC5nZXRQcm9wZXJ0aWVzKCkuc2l6ZSgpID4gMDsKKwkJCS8vIH0KKwkJCXJldHVybiByZXRWYWx1ZTsKKwkJfSAvLyBoYXNDaGlsZHJlbgorCisJCS8qKgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnVpLklTZWxlY3Rpb25MaXN0ZW5lciNzZWxlY3Rpb25DaGFuZ2VkKG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2hQYXJ0LAorCQkgKiAgICAgIG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvbikKKwkJICovCisJCXB1YmxpYyB2b2lkIHNlbGVjdGlvbkNoYW5nZWQoSVdvcmtiZW5jaFBhcnQgcGFydCwgSVNlbGVjdGlvbiBzZWxlY3Rpb24pIHsKKworCQkJLy8gSXMgdGhpcyBzZWxlY3Rpb24gY2hhbmdlZCBldmVudCBjb21pbmcgZnJvbSBvdXIgdmlldz8KKwkJCWlmIChwYXJ0ICE9IFJlbGF0aXZlVmFsdWVWaWV3RXhhbXBsZS50aGlzKSB7CisJCQkJLy8gTm8KKwkJCQkvLyBUaGlzIHdpbGwgaG9sZCB0aGUgbmV3IHNpbXVsYXRpb25zIHRoYXQgaGF2ZSBiZWVuIHNlbGVjdGVkCisJCQkJZmluYWwgTGlzdDxJU2ltdWxhdGlvbj4gdGVtcCA9IG5ldyBBcnJheUxpc3Q8SVNpbXVsYXRpb24+KCk7CisKKwkJCQkvLyBJcyBpdCBhIHN0cnVjdHVyZWQgc2VsZWN0aW9uPworCQkJCWlmIChzZWxlY3Rpb24gaW5zdGFuY2VvZiBJU3RydWN0dXJlZFNlbGVjdGlvbikgeworCQkJCQkvLyBZZXMKKwkJCQkJZmluYWwgTGlzdCBsaXN0ID0gKChJU3RydWN0dXJlZFNlbGVjdGlvbikgc2VsZWN0aW9uKQorCQkJCQkJCS50b0xpc3QoKTsKKworCQkJCQkvLyBHbyB0aHJvdWdoIGV2ZXJ5dGhpbmcgaW4gdGhlIGxpc3Qgb2YgdGhpbmdzIHRoYXQgd2VyZQorCQkJCQkvLyBzZWxlY3RlZCBhbmQgcGljayBvdXQgdGhlIG9uZXMgdGhhdCBhcmUgSVNpbXVsYXRpb25zLgorCQkJCQlmb3IgKGZpbmFsIEl0ZXJhdG9yIHNlbGVjdGlvbkl0ZXIgPSBsaXN0Lml0ZXJhdG9yKCk7IHNlbGVjdGlvbkl0ZXIKKwkJCQkJCQkuaGFzTmV4dCgpOykgeworCQkJCQkJZmluYWwgT2JqZWN0IG9iaiA9IHNlbGVjdGlvbkl0ZXIubmV4dCgpOworCQkJCQkJaWYgKG9iaiBpbnN0YW5jZW9mIElTaW11bGF0aW9uKSB7CisJCQkJCQkJdGVtcC5hZGQoKElTaW11bGF0aW9uKSBvYmopOworCQkJCQkJfQorCQkJCQl9IC8vIGZvciBlYWNoIHNlbGVjdGVkIGl0ZW0KKwkJCQl9IC8vIGlmIHN0cnVjdHVyZWQgc2VsZWN0aW9uCisKKwkJCQkvLyBEaWQgd2UgZmluZCBhbnkgbmV3IHNpbXVsYXRpb25zIHRoYXQgd2VyZSBzZWxlY3RlZD8KKwkJCQlpZiAodGVtcC5zaXplKCkgPiAwKSB7CisJCQkJCS8vIFllcworCQkJCQkvLyBUZWxsIHRoZSBMaXN0Vmlld2VyIG5vdCB0byByZWRyYXcgd2hpbGUgd2UncmUgY2hhbmdpbmcKKwkJCQkJLy8gaXRzIGxpc3QuCisJCQkJCXZpZXdlci5nZXRUcmVlKCkuc2V0UmVkcmF3KGZhbHNlKTsKKwkJCQkJdHJ5IHsKKwkJCQkJCS8vIERvIHdlIGhhdmUgYW55IG9sZCBzZWxlY3Rpb25zIHdlIHNob3VsZCByZW1vdmU/CisJCQkJCQlpZiAoc2VsZWN0ZWRTaW11bGF0aW9ucyAhPSBudWxsKSB7CisJCQkJCQkJLy8gWWVzCisJCQkJCQkJdmlld2VyLnJlbW92ZShzZWxlY3RlZFNpbXVsYXRpb25zLnRvQXJyYXkoKSk7CisJCQkJCQl9CisJCQkJCQkvLyBBZGQgdGhlIG5ldyBzZWxlY3Rpb25zIHRvIHRoZSBMaXN0Vmlld2VyJ3MgbGlzdC4gSXQKKwkJCQkJCS8vIHdpbGwgdXNlIHRoZSBsYWJlbCBwcm92aWRlciB0byBnZXQgYSB0ZXh0IHN0cmluZyBmb3IKKwkJCQkJCS8vIGVhY2ggb25lLgorCQkJCQkJdmlld2VyLmFkZChzcywgdGVtcC50b0FycmF5KCkpOworCisJCQkJCQkvLyBSZW1lbWJlciB3aGF0IHdlIGFkZGVkIHRoaXMgdGltZSBzbyB3ZSBjYW4gcmVtb3ZlIGl0CisJCQkJCQkvLyBuZXh0IHNlbGVjdGlvbi4KKwkJCQkJCXNlbGVjdGVkU2ltdWxhdGlvbnMgPSB0ZW1wOworCQkJCQl9IC8vIHRyeQorCQkJCQlmaW5hbGx5IHsKKwkJCQkJCS8vIFRoZSBMaXN0Vmlld2VyIHNob3VsZCB1cGRhdGUgaXRzZWxmIG5vdy4KKwkJCQkJCXZpZXdlci5nZXRUcmVlKCkuc2V0UmVkcmF3KHRydWUpOworCQkJCQl9CisJCQkJfSAvLyBpZiBhbnkgbmV3IHNpbXVsYXRpb25zIHNlbGVjdGVkCisJCQl9IC8vIGlmIHNlbGVjdGlvbiBjaGFuZ2VkIGV2ZW50IGNvbWluZyBmcm9tIG91ciB2aWV3PworCisJCX0gLy8gc2VsZWN0aW9uQ2hhbmdlZAorCisJfSAvLyBSZWxhdGl2ZVZhbHVlVmlld0NvbnRlbnRQcm92aWRlcgorCisJLyoqCisJICogVGhpcyBjbGFzcyBpcyBhIExhYmVsIHByb3ZpZGVyCisJICovCisJcHVibGljIHN0YXRpYyBjbGFzcyBSZWxhdGl2ZVZhbHVlVmlld0xhYmVsUHJvdmlkZXIgaW1wbGVtZW50cyBJTGFiZWxQcm92aWRlciwKKwkJCUlUYWJsZUxhYmVsUHJvdmlkZXIsIElUYWJsZUNvbG9yUHJvdmlkZXIgeworCisJCXByaXZhdGUgZmluYWwgTGlzdDxJTGFiZWxQcm92aWRlckxpc3RlbmVyPiBsaXN0ZW5lcnMgPSBuZXcgQXJyYXlMaXN0PElMYWJlbFByb3ZpZGVyTGlzdGVuZXI+KCk7CisKKwkJLyoqCisJCSAqIEBzZWUgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JTGFiZWxQcm92aWRlciNnZXRJbWFnZShqYXZhLmxhbmcuT2JqZWN0KQorCQkgKi8KKwkJcHVibGljIEltYWdlIGdldEltYWdlKEBTdXBwcmVzc1dhcm5pbmdzKCJ1bnVzZWQiKQorCQlPYmplY3QgZWxlbWVudCkgeworCQkJcmV0dXJuIG51bGw7CisJCX0gLy8gZ2V0SW1hZ2UKKworCQkvKioKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklMYWJlbFByb3ZpZGVyI2dldFRleHQoamF2YS5sYW5nLk9iamVjdCkKKwkJICovCisJCXB1YmxpYyBTdHJpbmcgZ2V0VGV4dChPYmplY3QgZWxlbWVudCkgeworCQkJU3RyaW5nIHJldFZhbHVlID0gIiI7CisJCQlpZiAoZWxlbWVudCBpbnN0YW5jZW9mIElTZWxlY3Rpb25TZXJ2aWNlKSB7CisJCQkJcmV0VmFsdWUgPSAiQWN0aXZlIFNpbXVsYXRpb25zIjsKKwkJCX0gZWxzZSBpZiAoZWxlbWVudCBpbnN0YW5jZW9mIElTaW11bGF0aW9uKSB7CisJCQkJSVNpbXVsYXRpb24gc2ltdWxhdGlvbiA9IChJU2ltdWxhdGlvbikgZWxlbWVudDsKKwkJCQlyZXRWYWx1ZSA9IHNpbXVsYXRpb24uZ2V0TmFtZSgpICsgIiAoIgorCQkJCQkJKyBzaW11bGF0aW9uLmdldFNlcXVlbmNlTnVtYmVyKCkgKyAiKSI7CisJCQl9IGVsc2UgaWYgKGVsZW1lbnQgaW5zdGFuY2VvZiBEZWNvcmF0b3IpIHsKKwkJCQlEZWNvcmF0b3IgZGVjb3JhdG9yID0gKERlY29yYXRvcikgZWxlbWVudDsKKwkJCQkvLyBmaW5hbCBTdHJpbmcgdGl0bGUgPSBkZWNvcmF0b3IuZ2V0RHVibGluQ29yZSgpLmdldFRpdGxlKCk7CisJCQkJLy8gZmluYWwgU3RyaW5nQnVpbGRlciBzYiA9IG5ldyBTdHJpbmdCdWlsZGVyKCk7CisJCQkJcmV0VmFsdWUgPSBkZWNvcmF0b3IudG9TdHJpbmcoKTsKKwkJCX0gZWxzZSBpZiAoZWxlbWVudCBpbnN0YW5jZW9mIE5vZGVMYWJlbCkgeworCQkJCU5vZGVMYWJlbCBub2RlTGFiZWwgPSAoTm9kZUxhYmVsKSBlbGVtZW50OworCQkJCXJldFZhbHVlID0gbm9kZUxhYmVsLmdldE5vZGUoKS5nZXREdWJsaW5Db3JlKCkuZ2V0VGl0bGUoKTsKKwkJCQlyZXRWYWx1ZSA9IHJldFZhbHVlID09IG51bGwgPyAiTGFiZWwiIDogcmV0VmFsdWU7CisJCQl9IGVsc2UgaWYgKGVsZW1lbnQgaW5zdGFuY2VvZiBJdGVtUHJvcGVydHlEZXNjcmlwdG9yKSB7CisJCQkJSXRlbVByb3BlcnR5RGVzY3JpcHRvciBwcm9wZXJ0eSA9IChJdGVtUHJvcGVydHlEZXNjcmlwdG9yKSBlbGVtZW50OworCQkJCXJldFZhbHVlID0gcHJvcGVydHkuZ2V0RGlzcGxheU5hbWUobnVsbCk7CisJCQl9CisJCQlyZXR1cm4gcmV0VmFsdWU7CisJCX0gLy8gZ2V0VGV4dAorCisJCS8qKgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVRhYmxlTGFiZWxQcm92aWRlciNnZXRDb2x1bW5JbWFnZShqYXZhLmxhbmcuT2JqZWN0LAorCQkgKiAgICAgIGludCkKKwkJICovCisJCXB1YmxpYyBJbWFnZSBnZXRDb2x1bW5JbWFnZShAU3VwcHJlc3NXYXJuaW5ncygidW51c2VkIikKKwkJT2JqZWN0IGVsZW1lbnQsIEBTdXBwcmVzc1dhcm5pbmdzKCJ1bnVzZWQiKQorCQlpbnQgY29sdW1uSW5kZXgpIHsKKwkJCXJldHVybiBudWxsOworCQl9IC8vIGdldENvbHVtbkltYWdlCisKKwkJLyoqCisJCSAqIEBzZWUgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JVGFibGVMYWJlbFByb3ZpZGVyI2dldENvbHVtblRleHQoamF2YS5sYW5nLk9iamVjdCwKKwkJICogICAgICBpbnQpCisJCSAqLworCQlwdWJsaWMgU3RyaW5nIGdldENvbHVtblRleHQoT2JqZWN0IGVsZW1lbnQsIGludCBjb2x1bW5JbmRleCkgeworCQkJU3RyaW5nIHJldFZhbHVlID0gIiI7CisJCQlpZiAoY29sdW1uSW5kZXggPT0gMCAmJiBlbGVtZW50IGluc3RhbmNlb2YgSVNlbGVjdGlvblNlcnZpY2UpIHsKKwkJCQlyZXRWYWx1ZSA9ICJBY3RpdmUgU2ltdWxhdGlvbnMiOworCQkJfSBlbHNlIGlmIChjb2x1bW5JbmRleCA9PSAwICYmIGVsZW1lbnQgaW5zdGFuY2VvZiBJU2ltdWxhdGlvbikgeworCQkJCUlTaW11bGF0aW9uIHNpbXVsYXRpb24gPSAoSVNpbXVsYXRpb24pIGVsZW1lbnQ7CisJCQkJcmV0VmFsdWUgPSBzaW11bGF0aW9uLmdldE5hbWUoKSArICIgKCIKKwkJCQkJCSsgc2ltdWxhdGlvbi5nZXRTZXF1ZW5jZU51bWJlcigpICsgIikiOworCQkJfSBlbHNlIGlmIChjb2x1bW5JbmRleCA9PSAxICYmIGVsZW1lbnQgaW5zdGFuY2VvZiBEZWNvcmF0b3IpIHsKKwkJCQlEZWNvcmF0b3IgZGVjb3JhdG9yID0gKERlY29yYXRvcikgZWxlbWVudDsKKwkJCQkvLyBmaW5hbCBTdHJpbmcgdGl0bGUgPSBkZWNvcmF0b3IuZ2V0RHVibGluQ29yZSgpLmdldFRpdGxlKCk7CisJCQkJLy8gZmluYWwgU3RyaW5nQnVpbGRlciBzYiA9IG5ldyBTdHJpbmdCdWlsZGVyKCk7CisJCQkJcmV0VmFsdWUgPSBkZWNvcmF0b3IudG9TdHJpbmcoKTsKKwkJCX0gZWxzZSBpZiAoY29sdW1uSW5kZXggPT0gMiAmJiBlbGVtZW50IGluc3RhbmNlb2YgTm9kZUxhYmVsKSB7CisJCQkJTm9kZUxhYmVsIG5vZGVMYWJlbCA9IChOb2RlTGFiZWwpIGVsZW1lbnQ7CisJCQkJcmV0VmFsdWUgPSBub2RlTGFiZWwuZ2V0Tm9kZSgpLmdldER1YmxpbkNvcmUoKS5nZXRUaXRsZSgpOworCQkJCXJldFZhbHVlID0gcmV0VmFsdWUgPT0gbnVsbCA/ICJOb2RlIiA6IHJldFZhbHVlOworCQkJfQorCisJCQllbHNlIGlmIChjb2x1bW5JbmRleCA9PSAzICYmIGVsZW1lbnQgaW5zdGFuY2VvZiBOb2RlTGFiZWwpIHsKKwkJCQlOb2RlTGFiZWwgbm9kZUxhYmVsID0gKE5vZGVMYWJlbCkgZWxlbWVudDsKKwkJCQlyZXRWYWx1ZSA9IG5vZGVMYWJlbC5nZXRDdXJyZW50VmFsdWUoKS50b1N0cmluZygpOworCQkJfSAvLyBlbHNlIGluZGV4ID0gMyAmJiBOb2RlTGFiZWwKKworCQkJZWxzZSBpZiAoY29sdW1uSW5kZXggPT0gNCAmJiBlbGVtZW50IGluc3RhbmNlb2YgTm9kZUxhYmVsKSB7CisJCQkJCisJCQkJUmVsYXRpdmVWYWx1ZVByb3ZpZGVyIHJ2cCA9IChSZWxhdGl2ZVZhbHVlUHJvdmlkZXIpIFJlbGF0aXZlVmFsdWVQcm92aWRlckFkYXB0ZXJGYWN0b3J5LklOU1RBTkNFCisJCQkJCQkuYWRhcHQoZWxlbWVudCwgUmVsYXRpdmVWYWx1ZVByb3ZpZGVyLmNsYXNzKTsKKwkJCQkvLyBEb2VzIHRoZSBsYWJlbCBoYXZlIHJlbGF0aXZlIHZhbHVlcz8KKwkJCQlpZiAocnZwICE9IG51bGwpIHsKKwkJCQkJLy8gWWVzCisKKwkJCQkJZmluYWwgU3RyaW5nQnVpbGRlciBzYiA9IG5ldyBTdHJpbmdCdWlsZGVyKCk7CisJCQkJCWZvciAoSXRlcmF0b3IgcHJvcGVydHlJdGVyID0gcnZwLmdldFByb3BlcnRpZXMoKS5pdGVyYXRvcigpOyBwcm9wZXJ0eUl0ZXIKKwkJCQkJCQkuaGFzTmV4dCgpOykgeworCQkJCQkJSXRlbVByb3BlcnR5RGVzY3JpcHRvciBwcm9wZXJ0eSA9IChJdGVtUHJvcGVydHlEZXNjcmlwdG9yKSBwcm9wZXJ0eUl0ZXIKKwkJCQkJCQkJLm5leHQoKTsKKwkJCQkJCXNiLmFwcGVuZChwcm9wZXJ0eS5nZXREaXNwbGF5TmFtZShwcm9wZXJ0eSkpOworCQkJCQkJc2IuYXBwZW5kKCI6ICIpOworCisJCQkJCQlzYi5hcHBlbmQoZ2V0Rm9ybWF0dGVyKCkuZm9ybWF0KAorCQkJCQkJCQlydnAuZ2V0UmVsYXRpdmVWYWx1ZShwcm9wZXJ0eSkpKTsKKworCQkJCQkJaWYgKHByb3BlcnR5SXRlci5oYXNOZXh0KCkpIHsKKwkJCQkJCQlzYi5hcHBlbmQoIiwgIik7CisJCQkJCQl9CisJCQkJCX0gLy8gZm9yIGVhY2ggcHJvcGVydHkKKwkJCQkJcmV0VmFsdWUgPSBzYi50b1N0cmluZygpOworCQkJCX0gLy8gaWYKKwkJCQllbHNlIHsKKwkJCQkJcmV0VmFsdWUgPSAiIjsKKwkJCQl9CisJCQl9IC8vIGVsc2UgaW5kZXggPSA0ICYmIE5vZGVMYWJlbAorCisJCQlyZXR1cm4gcmV0VmFsdWU7CisJCX0gLy8gZ2V0Q29sdW1uVGV4dAorCisJCS8qKgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVRhYmxlQ29sb3JQcm92aWRlciNnZXRCYWNrZ3JvdW5kKGphdmEubGFuZy5PYmplY3QsCisJCSAqICAgICAgaW50KQorCQkgKi8KKwkJcHVibGljIENvbG9yIGdldEJhY2tncm91bmQoQFN1cHByZXNzV2FybmluZ3MoInVudXNlZCIpCisJCU9iamVjdCBlbGVtZW50LCBAU3VwcHJlc3NXYXJuaW5ncygidW51c2VkIikKKwkJaW50IGNvbHVtbkluZGV4KSB7CisJCQlyZXR1cm4gbnVsbDsKKwkJfQorCisJCS8qKgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVRhYmxlQ29sb3JQcm92aWRlciNnZXRGb3JlZ3JvdW5kKGphdmEubGFuZy5PYmplY3QsCisJCSAqICAgICAgaW50KQorCQkgKi8KKwkJcHVibGljIENvbG9yIGdldEZvcmVncm91bmQoQFN1cHByZXNzV2FybmluZ3MoInVudXNlZCIpCisJCU9iamVjdCBlbGVtZW50LCBAU3VwcHJlc3NXYXJuaW5ncygidW51c2VkIikKKwkJaW50IGNvbHVtbkluZGV4KSB7CisJCQlyZXR1cm4gbnVsbDsKKwkJfQorCisJCS8qKgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSUJhc2VMYWJlbFByb3ZpZGVyI2Rpc3Bvc2UoKQorCQkgKi8KKwkJcHVibGljIHZvaWQgZGlzcG9zZSgpIHsKKwkJCS8vIFRPRE8gQXV0by1nZW5lcmF0ZWQgbWV0aG9kIHN0dWIKKwkJfQorCisJCS8qKgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSUJhc2VMYWJlbFByb3ZpZGVyI2lzTGFiZWxQcm9wZXJ0eShqYXZhLmxhbmcuT2JqZWN0LAorCQkgKiAgICAgIGphdmEubGFuZy5TdHJpbmcpCisJCSAqLworCQlwdWJsaWMgYm9vbGVhbiBpc0xhYmVsUHJvcGVydHkoQFN1cHByZXNzV2FybmluZ3MoInVudXNlZCIpCisJCU9iamVjdCBlbGVtZW50LCBAU3VwcHJlc3NXYXJuaW5ncygidW51c2VkIikKKwkJU3RyaW5nIHByb3BlcnR5KSB7CisJCQlyZXR1cm4gZmFsc2U7CisJCX0KKworCQkvKioKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklCYXNlTGFiZWxQcm92aWRlciNhZGRMaXN0ZW5lcihvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklMYWJlbFByb3ZpZGVyTGlzdGVuZXIpCisJCSAqLworCQlwdWJsaWMgdm9pZCBhZGRMaXN0ZW5lcihJTGFiZWxQcm92aWRlckxpc3RlbmVyIGxpc3RlbmVyKSB7CisJCQlsaXN0ZW5lcnMuYWRkKGxpc3RlbmVyKTsKKwkJfSAvLyBhZGRMaXN0ZW5lcgorCisJCS8qKgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSUJhc2VMYWJlbFByb3ZpZGVyI3JlbW92ZUxpc3RlbmVyKG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSUxhYmVsUHJvdmlkZXJMaXN0ZW5lcikKKwkJICovCisJCXB1YmxpYyB2b2lkIHJlbW92ZUxpc3RlbmVyKElMYWJlbFByb3ZpZGVyTGlzdGVuZXIgbGlzdGVuZXIpIHsKKwkJCWxpc3RlbmVycy5yZW1vdmUobGlzdGVuZXIpOworCQl9IC8vIHJlbW92ZUxpc3RlbmVyCisKKwl9IC8vIFJlbGF0aXZlVmFsdWVWaWV3TGFiZWxQcm92aWRlcgorCisJLyoqCisJICogVGhpcyBjbGFzcyBpbXBsZW1lbnRzIHRoZSBzb3J0aW5nIG9mIHRoZSBSZWxhdGl2ZVZhbHVlIFZpZXcgdmlld2VyCisJICovCisJcHVibGljIHN0YXRpYyBjbGFzcyBSZWxhdGl2ZVZhbHVlVmlld1NvcnRlciBleHRlbmRzIFZpZXdlclNvcnRlciB7CisJCXByaXZhdGUgc3RhdGljIGZpbmFsIGludCBBU0NFTkRJTkcgPSAwOworCisJCXByaXZhdGUgc3RhdGljIGZpbmFsIGludCBERVNDRU5ESU5HID0gMTsKKworCQlwcml2YXRlIGludCBjb2x1bW4gPSAtMTsKKworCQlwcml2YXRlIGludCBkaXJlY3Rpb24gPSBBU0NFTkRJTkc7CisKKwkJLyoqCisJCSAqIEBwYXJhbSBjb2x1bW4KKwkJICogICAgICAgICAgICB0aGUgY29sdW1uIHRvIHNvcnQKKwkJICovCisJCXB1YmxpYyB2b2lkIGRvU29ydChpbnQgY29sdW1uKSB7CisJCQlkaXJlY3Rpb24gPSB0aGlzLmNvbHVtbiA9PSBjb2x1bW4gPyAxIC0gZGlyZWN0aW9uIDogQVNDRU5ESU5HOworCQkJdGhpcy5jb2x1bW4gPSBjb2x1bW47CisJCX0KKworCQkvKioKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlZpZXdlckNvbXBhcmF0b3IjY29tcGFyZShvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlZpZXdlciwKKwkJICogICAgICBqYXZhLmxhbmcuT2JqZWN0LCBqYXZhLmxhbmcuT2JqZWN0KQorCQkgKi8KKwkJQE92ZXJyaWRlCisJCXB1YmxpYyBpbnQgY29tcGFyZShWaWV3ZXIgdmlld2VyLCBPYmplY3QgZTEsIE9iamVjdCBlMikgeworCQkJaW50IHJjID0gc3VwZXIuY29tcGFyZSh2aWV3ZXIsIGUxLCBlMik7CisJCQlpZiAoZGlyZWN0aW9uID09IERFU0NFTkRJTkcpIHsKKwkJCQlyYyA9IC1yYzsKKwkJCX0KKwkJCXJldHVybiByYzsKKwkJfSAvLyBjb21wYXJlCisKKwl9IC8vIFJlbGF0aXZlVmFsdWVWaWV3U29ydGVyCit9IC8vIFJlbGF0aXZlVmFsdWVWaWV3RXhhbXBsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS5zYW1wbGUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vc2FtcGxlL2FkYXB0aW9uL1ZpZXdFeGFtcGxlMS5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS5zYW1wbGUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vc2FtcGxlL2FkYXB0aW9uL1ZpZXdFeGFtcGxlMS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI3OGNkZjUKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnNhbXBsZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9zYW1wbGUvYWRhcHRpb24vVmlld0V4YW1wbGUxLmphdmEKQEAgLTAsMCArMSw0MzYgQEAKKy8vIFZpZXdFeGFtcGxlMS5qYXZhCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uc2FtcGxlLmFkYXB0aW9uOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7CitpbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOworaW1wb3J0IGphdmEudXRpbC5MaXN0OworCitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JTGFiZWxQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklMYWJlbFByb3ZpZGVyTGlzdGVuZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVN0cnVjdHVyZWRDb250ZW50UHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU3RydWN0dXJlZFNlbGVjdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLkxpc3RWaWV3ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5WaWV3ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkdyYXBoOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5Ob2RlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zY2VuYXJpby5TY2VuYXJpbzsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmFkYXB0ZXJzLnNwYXRpYWwuZ2VvLkxhdExvbmc7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5hZGFwdGVycy5zcGF0aWFsLmdlby5MYXRMb25nLlNlZ21lbnQ7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5hZGFwdGVycy5zcGF0aWFsLmdlby5MYXRMb25nUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5hZGFwdGVycy5zcGF0aWFsLmdlby5MYXRMb25nUHJvdmlkZXJBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmpvYnMuc2ltdWxhdGlvbi5JU2ltdWxhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZ3JhcGhpY3MuSW1hZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklTZWxlY3Rpb25MaXN0ZW5lcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5JU2VsZWN0aW9uU2VydmljZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5JV29ya2JlbmNoUGFydDsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5wYXJ0LlZpZXdQYXJ0OworCisvKioKKyAqIFRoaXMgY2xhc3MgaXMgYW4gZXhhbXBsZSBvZiBob3cgdG8gcnVuIEdVSSBjb2RlIGluIEVjbGlwc2UgYW5kIG1vbml0b3IgdGhlCisgKiAic2VsZWN0ZWQiIHNpbXVsYXRpb24sIGFuZCBob3cgdG8gZXh0cmFjdCB0aGUgY2Fub25pY2FsIGdyYXBoIGZyb20gdGhlCisgKiBzZWxlY3RlZCBzaW11bGF0aW9uIGFuZCB0aGVuIGV4dHJhY3QgZGF0YSBmcm9tIGl0LgorICogPHA+CisgKiBJdCBjcmVhdHMgYW4gRWNsaXBzZSAiVmlldyIgY2FsbGVkICJWaWV3IEV4YW1wbGUxIiB0aGF0IHNpbXBseSAiZHVtcHMiIHRoZQorICogbGF0aXR1ZGUgYW5kIGxvbmdpdHVkZSBkYXRhIGV4dHJhY3RlZCBmcm9tIHRoZSBjYW5vbmljYWwgZ3JhcGggdG8gdGhlIHZpZXcncworICogd2luZG93LiBUaGUgZXhhbXBsZSBpcyBzaW1wbGUsIGJ1dCBpdCBoZWxwcyB0byB1bmRlcnN0YW5kIGhvdyBhIEpGYWNlCisgKiAiVmlld2VyIiAobm90IHRoZSBzYW1lIGFzIGFuIEVjbGlwc2UgIlZpZXciKSB3b3JrcyB3aXRoIGNvbnRlbnQgYW5kIGxhYmVsCisgKiBwcm92aWRlcnMuCisgKiA8cD4KKyAqIFRoZXJlIGFyZSB0aHJlZSBjbGFzc2VzIGRlZmluZWQgaW4gdGhpcyBleGFtcGxlLiBUaGUgZmlyc3QgaXMgdGhlIHBhcmVudAorICogY2xhc3MgdGhhdCBpcyBhIDxjb2RlPlZpZXdQYXJ0PC9jb2RlPiBhbmQgaW1wbGVtZW50cyB3aGF0IGlzIHNlZW4gaW4gdGhlCisgKiB2aWV3J3Mgd2luZG93IGluIEVjbGlwc2UuIEl0IGNvbnRhaW5zIGEgSkZhY2UgPGNvZGU+TGlzdFZpZXdlcjwvY29kZT4gd2hpY2gKKyAqIGJhc2ljYWxseSBtYWludGFpbnMgYSBsaXN0IG9mIE9iamVjdHMgYW5kIGNyZWF0ZXMgYSBkaXNwbGF5IHRoYXQgcHJpbnRzIGEKKyAqIGRlc2NyaXB0aXZlIHRleHQgc3RyaW5nIGZvciBlYWNoIG9uZS4gVGhlIG1ldGhvZAorICogPGNvZGU+Y3JlYXRlUGFydENvbnRyb2w8L2NvZGU+IGlzIHRoZSBjb2RlIHRoYXQgaW5pdGlhbGl6ZXMgdGhlIFNXVAorICogZ3JhcGhpY3MgZm9yIHRoZSBkaXNwbGF5IG9mIHRoZSB2aWV3LiBJdCBpcyBwYXNzZWQgYW4gU1dUCisgKiA8Y29kZT5Db21wb3NpdGU8L2NvZGU+IGluc3RhbmNlIGNhbGxlZCA8Y29kZT5wYXJlbnQ8L2NvZGU+IHRoYXQgaXMgdXNlZAorICogdG8gImNvbnRhaW4iIHRoZSBTV1QvSkZhY2UgZWxlbWVudHMgb2YgdGhlIHZpZXcncyB0aGF0IG1ha2UgdXAgdGhlIGRpc3BsYXkgaW4KKyAqIHRoZSB2aWV3LiBUaGUgbWV0aG9kIGRvZXMgdGhyZWUgdGhpbmdzLCBpdCBmaXJzdCBjcmVhdGVzIHRoZQorICogPGNvZGU+TGlzdFZpZXdlcjwvY29kZT4gaW5zdGFuY2UsIGdpdmluZyB0aGUgcGFyZW50IGFzIGFuIGFyZ3VtZW50IHRvIHRoZQorICogY29uc3RydWN0ZXIgKHRoaXMgbWFrZXMgaXQgcGFydCBvZiB0aGUgZGlzcGxheSksIGl0IHRoZW4gY3JlYXRlcyBhbmQgcGFzc2VzCisgKiB0byB0aGUgPGNvZGU+TGlzdFZpZXdlcjwvY29kZT4gdGhlICJDb250ZW50IiBhbmQgIkxhYmVsIiBwcm92aWRlcnMgaXQKKyAqIG5lZWRzLiBUaGUgQ29udGVudCBhbmQgTGFiZWwgcHJvdmlkZXJzIGFyZSB0aGUgb3RoZXIgdHdvIGNsYXNzZXMgaW4gdGhpcworICogZXhhbXBsZS4KKyAqIDxwPgorICogVGhlIGNvbnRlbnQgcHJvdmlkZXIgY2xhc3MgaXMge0BsaW5rIFZpZXdFeGFtcGxlMUNvbnRlbnRQcm92aWRlcn0sIHdoaWxlIG5vdAorICogY29tcGxleCwgaXQgbWF5IG5vdCBiZSBvYnZpb3VzIHdoYXQncyBpdCdzIGRvaW5nLiBJdCdzIGpvYiBpcyB0byBtYWludGFpbiB0aGUKKyAqIGNvbnRlbnRzIG9mIHRoZSA8Y29kZT5MaXN0Vmlld2VyPC9jb2RlPidzIGludGVybmFsIGxpc3Qgb2YgdGhpbmdzIHRvCisgKiBkaXNwbGF5LiBJdCBwZXJmb3JtcyB0aGUgIkNvbnRyb2xlciIgam9iIGluIGFuICJNVkMiIGFyY2hpdGVjdHVyZS4gSW4gb3VyCisgKiBleGFtcGxlLCB0aGUgY29udGVudCBwcm92aWRlciBpcyBhbiB7QGxpbmsgSVNlbGVjdGlvbkxpc3RlbmVyfSB3aGljaCBtZWFucyBpdAorICogaGFzIGEgPGNvZGU+c2VsZWN0aW9uQ2hhbmdlZDwvY29kZT4gbWV0aG9kLiBUaGUgaWRlYSBiZWhpbmQgdGhlIG1ldGhvZCBpcworICogdGhhdCBpdCBpcyBjYWxsZWQgd2hlbmV2ZXIgdGhlIHVzZXIgInNlbGVjdHMiIHNvbWV0aGluZyBpbiB0aGUgRWNsaXBzZQorICogaW50ZXJmYWNlLiBUaGlzIGRvZXNuJ3QgaGFwcGVuIGF1dG9tYXRpY2FsbHksIGFuIGluc3RhbmNlIG9mIHRoZSBjbGFzcyBtdXN0CisgKiBiZSByZWdpc3RlcmVkIHdpdGggdGhlIEVjbGlwc2UgInNlbGVjdGlvbiBzZXJ2aWNlIiB0aGF0IHNlcnZlcyBhcyBhIGNlbnRyYWwKKyAqIGRpc3BhdGNoZXIgZm9yIHNlbGVjdGlvbnMuIFRoaXMgcmVnaXN0cmF0aW9uIGlzIGRvbmUgaW4gdGhlCisgKiA8Y29kZT5jcmVhdGVQYXJ0Q29udHJvbDwvY29kZT4gbWV0aG9kIG9mIHRoZSBwYXJlbnQgY2xhc3MuIFdoZW4gc29tZXRoaW5nCisgKiBpcyBzZWxlY3RlZCBhbmQgdGhlIG1ldGhvZCBpcyBjYWxsZWQsIGl0IG11c3QgZmlsdGVyIG91dCB0aGUgc2VsZWN0aW9ucyBhbmQKKyAqIGlnbm9yZSB0aG9zZSB0aGF0IGFyZSBub3QgaW5zdGFuY2VzIG9mIHtAbGluayBJU2ltdWxhdGlvbn0uIFdoZW4gaXQgZG9lcworICogZmluZCBhIHNpbXVsYXRpb24gaW5zdGFuY2UsIGl0IHJlbW92ZXMgdGhlIGN1cnJlbnQgY29udGVudHMgb2YgdGhlIGxpc3QKKyAqIG1haW50YWluZWQgYnkgdGhlIDxjb2RlPkxpc3RWaWV3ZXI8L2NvZGU+IGFuZCBhZGRzIHRoZSBuZXdseSBzZWxlY3RlZAorICogaW5zdGFuY2VzLiBJdCB0aGVuIHRlbGxzIHRoZSB2aWV3ZXIgdG8gcmVkcmF3IGl0c2VsZi4KKyAqIDxwPgorICogVGhlIGxhYmVsIHByb3ZpZGVyIGNsYXNzIGlzIHtAbGluayBWaWV3RXhhbXBsZTFMYWJlbFByb3ZpZGVyfSBhbmQgaXMgdGhlCisgKiBlYXNpZXN0IHRvIHVuZGVyc3RhbmQsIGl0cyBpcyB1c2VkIGJ5IHRoZSA8Y29kZT5MaXN0Vmlld2VyPC9jb2RlPiB0bworICogZ2VuZXJhdGUgYSB0ZXh0IHN0cmluZyBmb3IgYW55IG9mIHRoZSA8Y29kZT5PYmplY3RzPC9jb2RlPiAoaS5lLiwKKyAqIDxjb2RlPklTaW11bGF0aW9uPC9jb2RlPiBpbnN0YW5jZXMpIGl0IGNvbnRhaW5zLiBUaGUgbWV0aG9kCisgKiB7QGxpbmsgVmlld0V4YW1wbGUxTGFiZWxQcm92aWRlciNnZXRUZXh0KE9iamVjdCl9IGRvZXMgdGhpcyBhbmQgaW4gdGhpcworICogZXhhbXBsZSBkb2VzIHRoZSB3b3JrIHRvIGV4dHJhY3QgdGhlIGxhdGl0dWRlIGFuZCBsb25naXR1ZGUgZGF0YSBmcm9tIHRoZQorICogY2Fub25pY2FsIGdyYXBoIHVzZWQgaW4gdGhlIHNpbXVsYXRpb24uIFRoZW4gaXQganVzdCByZXR1cm5zIHRoYXQgZGF0YSBhcyBhCisgKiAobG9uZykgc3RyaW5nIHRvIGJlIGRpc3BsYXllZC4KKyAqIAorICogVG8gc2VlIHRoZSBleGFtcGxlIGluIGFjdGlvbiwgeW91IG5lZWQgdG86CisgKiA8b2w+CisgKiA8bGk+IFJ1biBTVEVNPC9saT4KKyAqIDxsaT4gT3BlbiB0aGUgIlZpZXcgRXhhbXBsZSAxIiB2aWV3LgorICogIldpbmRvdy0+U2hvdyZuYnNwO1ZpZXctPk90aGVyLT5TVEVNLT5WaWV3Jm5ic3A7RXhhbXBsZSZuYnNwOzEiPC9saT4KKyAqIDxsaT4gT3BlbiB0aGUgIkFjdGl2ZSBTaW11bGF0aW9ucyIgdmlldy4KKyAqICJXaW5kb3ctPlNob3cmbmJzcDtWaWV3LT5BY3RpdmUmbmJzcDtTaW11bGF0aW9ucyI8L2xpPi4KKyAqIAorICogPGxpPiBHbyB0byB0aGUgIlNjZW5hcmlvcyIgdmlldy4gSXQgc2hvd3MgdGhlIFNURU0gU2NlbmFyaW9zIHRoYXQgYXJlIHBsdWdnZWQKKyAqIGludG8gU1RFTS4gPC9saT4KKyAqIDxsaT4gRXhwYW5kICJUZXN0LT5EaXNlYXNlJm5ic3A7TW9kZWxzLT5TdGFuZGFyZCIgYW5kIHlvdSdsbCBzZWUgZGlzZWFzZQorICogbW9kZWxpbmcgc2NlbmFyaW9zIHRoYXQgYXJlIHBsdWdnZWQgaW50byBTVEVNLiA8L2xpPgorICogPGxpPiBEb3VibGUtY2xpY2sgb24gYSBzY2VuYXJpbyBpbiB0aGUgbGlzdCAoZS5nLiwgIlNFSVIgMSB4IDEiKSBpdCB3aWxsCisgKiBiZWdpbiBzaW11bGF0aW9uIGFuZCBhbiBlbnRyeSB3aWxsIGFwcGVhciBpbiB0aGUgIkFjdGl2ZSBTaW11bGF0aW9ucyIgdmlldy4KKyAqIDwvbGk+CisgKiA8bGk+IFNpbmdsZSBjbGljayBvbiB0aGUgZW50cnkgaW4gdGhlIEFjdGl2ZSBTaW11bGF0aW9ucyB2aWV3LiBUaGlzIHdpbGwKKyAqIHNlbGVjdCB0aGF0IHNpbXVsYXRpb24gYW5kIHRoZSBsYXRpdHVkZS9sb25naXR1ZGUgZGF0YSBmb3IgdGhhdCBzY2VuYXJpbyB3aWxsCisgKiBhcHBlYXIgaW4gdGhlIFZpZXcgRXhhbXBsZSAxIHZpZXcgYXMgYSBzaW5nbGUgKGxvbmcpIHN0cmluZy4gPC9saT4KKyAqIDwvb2w+CisgKiBJZiB5b3UgZG91YmxlLWNsaWNrIG9uIGFub3RoZXIgcGx1Z2dlZC1pbiBTY2VuYXJpbyBzbyB0aGF0IHR3byBlbnRyaWVzIGFyZQorICogZGlzcGxheWVkIGluIHRoZSBBY3RpdmUgU2ltdWxhdGlvbnMgdmlldyBhbmQgdGhlIHlvdSBzZWxlY3QgYm90aCwgeW91J2xsIHNlZQorICogdHdvIGVudHJpZXMgaW4gdGhlIFZpZXcgRXhhbXBsZSAxIHZpZXcsIG9uZSBmb3IgZWFjaCBvZiB0aGUgc2VsZWN0ZWQKKyAqIHNpbXVsYXRpb25zLgorICogCisgKi8KK3B1YmxpYyBjbGFzcyBWaWV3RXhhbXBsZTEgZXh0ZW5kcyBWaWV3UGFydCB7CisKKwkvKioKKwkgKiBUaGUgaWRlbnRpZmllciBvZiB0aGUgVmlldyBFeGFtcGxlMSBWaWV3LiBOb2JvZHkgdXNlcyB0aGlzIHJpZ2h0IG5vdywgYnV0CisJICogaXQgd291bGQgYmUgdXNlZnVsIGlmIHdlIHdhbnRlZCB0byBwcm9ncmFtYXRpY2FsbHkgYWRkIHRoaXMgdmlldyB0byBhCisJICogcGVyc3BlY3RpdmUuCisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgSURfVklFV19FWEFNUExFMV9WSUVXID0gIm9yZy5lY2xpcHNlLnN0ZW0uc2FtcGxlLmFkYXB0ZXJzLnZpZXdleGFtcGxlMSI7CisKKwkvKioKKwkgKiBUaGlzIGlzIHRoZSBMaXN0Vmlld2VyIHRoYXQgY3JlYXRlcyB0aGUgZGlzcGxheSB0aGF0IHdpbGwgc2hvdyB1cCBpbiB0aGUKKwkgKiB2aWV3J3Mgd2luZG93LiBJdCBjb250YWlucyBhIGxpc3Qgb2YgT2JqZWN0cywgd2hpY2ggaW4gdGhpcyBleGFtcGxlJ3MKKwkgKiBjYXNlIHdpbGwgYmUgaW5zdGFuY2VzIG9mIElTaW11bGF0aW9uLgorCSAqLworCXByb3RlY3RlZCBMaXN0Vmlld2VyIGx2ID0gbnVsbDsKKworCS8qKgorCSAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCB3aGVuIHRoZSB2aWV3IGlzIGNyZWF0ZWQgYW5kIGl0IGhhcyB0aGUKKwkgKiByZXNwb25zaWJpbGl0eSBmb3IgZG9pbmcgYWxsIG9mIHRoZSBpbml0aWFsaXphdGlvbi4gSXQgY3JlYXRlcyB0aGUKKwkgKiBMaXN0Vmlld2VyIGFuZCBpbnN0YW5jZXMgb2YgdGhlIENvbnRlbnRQcm92aWRlciBhbmQgTGFiZWxQcm92aWRlciBmb3IgdGhlCisJICogdmlld2VyLiBJdCBhbHNvIGdldHMgYSByZWZlcmVuY2UgdG8gdGhlIHNlbGVjdGlvbiBzZXJ2aWNlIGFuZCByZWdpc3RlcnMKKwkgKiB0aGUgY29udGVudCBwcm92aWRlciBzbyBpdCB3aWxsIGJlIG5vdGlmaWVkIHdoZW4gc29tZXRoaW5nIGlzIHNlbGVjdGVkLgorCSAqIAorCSAqIEBzZWUgb3JnLmVjbGlwc2UudWkucGFydC5Xb3JrYmVuY2hQYXJ0I2NyZWF0ZVBhcnRDb250cm9sKG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZSkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBjcmVhdGVQYXJ0Q29udHJvbChDb21wb3NpdGUgcGFyZW50KSB7CisJCS8vIENyZWF0ZSB0aGUgY29udGVudCBwcm92aWRlcgorCQlWaWV3RXhhbXBsZTFDb250ZW50UHJvdmlkZXIgY29udGVudFByb3ZpZGVyID0gbmV3IFZpZXdFeGFtcGxlMUNvbnRlbnRQcm92aWRlcigpOworCQkvLyBDcmVhdGUgdGhlIExpc3RWaWV3ZXIKKwkJbHYgPSBuZXcgTGlzdFZpZXdlcihwYXJlbnQpOworCisJCS8vIExldCB0aGUgTGlzdFZpZXdlciBrbm93IHdobyBpdHMgY29udGVudCBhbmQgbGFiZWwgcHJvdmlkZXJzIGFyZQorCQlsdi5zZXRDb250ZW50UHJvdmlkZXIoY29udGVudFByb3ZpZGVyKTsKKwkJbHYuc2V0TGFiZWxQcm92aWRlcihuZXcgVmlld0V4YW1wbGUxTGFiZWxQcm92aWRlcigpKTsKKworCQkvLyBUaGlzIGNhbGwgdGVsbHMgdGhlIHZpZXdlcidzIGNvbnRlbnQgcHJvdmlkZXIgd2hlcmUgaXQgc2hvdWxkIGdldCB0aGUKKwkJLy8gc291cmNlIG9mIGl0cyBjb250ZW50LiBJbiB0aGlzIGNhc2UgaXQgaXMgdGhlIHNlbGVjdGlvbiBzZXJ2aWNlLgorCQlsdi5zZXRJbnB1dChnZXRTaXRlKCkuZ2V0V29ya2JlbmNoV2luZG93KCkuZ2V0U2VsZWN0aW9uU2VydmljZSgpKTsKKworCQkvLyBXZSBhbHNvIHdhbnQgdG8gYmUgYWJsZSB0byBoYXZlIGEgdXNlciBzZWxlY3QgYSBzaW1sdWF0aW9uIGZyb20gb3VyCisJCS8vIHZpZXcgYW5kIGhhdmUgdGhhdCBiZSBzZWVuIGJ5IG90aGVycy4gU28gd2UgcmVnaXN0ZXIgdGhlIExpc3RWaWV3ZXIKKwkJLy8gaW5zdGFuY2UgYXMgdGhlIHZpZXcncyBzZWxlY3Rpb24gcHJvdmlkZXIuIFdoZW4geW91IGNsaWNrIG9uIHRoZSB2aWV3CisJCS8vIGluIHRoZSBpbnRlcmZhY2UgaXQgZmluZHMgdGhlIHVuZGVybHlpbmcgT2JqZWN0IChpLmUuLCBJU2ltdWxhdGlvbikKKwkJLy8geW91IHNlbGVjdGVkIGFuZCBwYXNzZXMgaXQgdG8gdGhlIHNlbGVjdGlvbiBzZXJ2aWNlLgorCQlnZXRTaXRlKCkuc2V0U2VsZWN0aW9uUHJvdmlkZXIobHYpOworCisJfSAvLyBjcmVhdGVQYXJ0Q29udHJvbAorCisJLyoqCisJICogVGhpcyBpcyByZXF1aXJlZCBieSB0aGUgaW50ZXJmYWNlLCBidXQgd2UncmUgbm90IHVzaW5nIGl0LgorCSAqIAorCSAqIEBzZWUgb3JnLmVjbGlwc2UudWkucGFydC5Xb3JrYmVuY2hQYXJ0I3NldEZvY3VzKCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBzZXRGb2N1cygpIHsKKwkJLy8gTm90aGluZworCX0gLy8gc2V0Rm9jdXMKKworCS8qKgorCSAqIFRoaXMgY2xhc3MgaXMgdGhlIGNvbnRlbnQgcHJvdmlkZXIgZm9yIHRoZSB2aWV3LiBJdCBpcyBhbHNvIGEgc2VsZWN0aW9uCisJICogbGlzdGVuZXIgYW5kIHVzZXMgdGhlIHNlbGVjdGlvbiBzZXJ2aWNlIGFzIHRoZSBzb3VyY2Ugb2YgaXRzIGlucHV0LiBJdAorCSAqIGxvb2tzIGZvciBzZWxlY3RlZCBJU2ltdWxhdGlvbiBpbnN0YW5jZXMgYW5kIHVwZGF0ZXMgdGhlIGxpc3QgaW4gdGhlCisJICogdmlldydzIExpc3RWaWV3ZXIgaW5zdGFuY2Ugd2l0aCB0aGUgY3VycmVudCBzZWxlY3Rpb24uCisJICovCisJcHVibGljIGNsYXNzIFZpZXdFeGFtcGxlMUNvbnRlbnRQcm92aWRlciBpbXBsZW1lbnRzCisJCQlJU3RydWN0dXJlZENvbnRlbnRQcm92aWRlciwgSVNlbGVjdGlvbkxpc3RlbmVyIHsKKworCQkvLyBXZSByZW1lbWJlciB0aGUgTGlzdFZpZXdlciB0aGF0IHdlJ3JlIHByb3ZpZGluZyBjb250ZW50IGZvciBiZWNhdXNlCisJCS8vIHdlIG5lZWQgdG8gbWFuaXB1bGF0ZSBpdHMgbGlzdCBpbiB0aGUgbWV0aG9kIHNlbGVjdGlvbkNoYW5nZWQuCisJCXByaXZhdGUgTGlzdFZpZXdlciB2aWV3ZXIgPSBudWxsOworCisJCS8vIFRoZXNlIGFyZSB0aGUgc2ltdWxhdGlvbnMgd2UgYWRkZWQgdG8gdGhlIExpc3RWaWV3ZXIsIHdlIHJlbWVtYmVyCisJCS8vIHRoZXNlIHNvIHdlIGNhbiByZW1vdmUgdGhlbSB3aGVuIGEgZGlmZmVyZW50IHNldCBvZiBzaW11bGF0aW9ucyBpcworCQkvLyBzZWxlY3RlZC4KKwkJcHJpdmF0ZSBMaXN0PElTaW11bGF0aW9uPiBzZWxlY3RlZFNpbXVsYXRpb25zID0gbnVsbDsKKworCQkvKioKKwkJICogVGhpcyBpcyB1c2VkIGJ5IHRoZSBMaXN0Vmlld2VyIHRvIGdldCB0aGUgaW5pdGlhbCBsaXN0IG9mIElTaW11bGF0aW9uCisJCSAqIGluc3RhbmNlcy4KKwkJICogCisJCSAqIEBzZWUgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU3RydWN0dXJlZENvbnRlbnRQcm92aWRlciNnZXRFbGVtZW50cyhqYXZhLmxhbmcuT2JqZWN0KQorCQkgKi8KKwkJcHVibGljIE9iamVjdFtdIGdldEVsZW1lbnRzKEBTdXBwcmVzc1dhcm5pbmdzKCJ1bnVzZWQiKQorCQlPYmplY3QgaW5wdXRFbGVtZW50KSB7CisJCQlPYmplY3RbXSByZXRWYWx1ZSA9IG5ldyBPYmplY3RbXSB7fTsKKworCQkJLy8gQW55dGhpbmcgeWV0PworCQkJaWYgKHNlbGVjdGVkU2ltdWxhdGlvbnMgIT0gbnVsbCkgeworCQkJCS8vIFllcworCQkJCXJldFZhbHVlID0gc2VsZWN0ZWRTaW11bGF0aW9ucy50b0FycmF5KCk7CisJCQl9CisJCQlyZXR1cm4gcmV0VmFsdWU7CisJCX0gLy8gZ2V0RWxlbWVudHMKKworCQkvKioKKwkJICogVGhpcyBpcyBjYWxsZWQgd2hlbiB0aGUgdmlldyBpcyBjbG9zZWQsIHdlIGNvdWxkIHJlbW92ZSBvdXJzZWx2ZXMgYXMKKwkJICogYSBzZWxlY3Rpb24gc2VydmljZSBsaXN0ZW5lciwgYnV0IHRoaXMgaXMgcmVhbGx5IGZvciBjbGVhbmluZyB1cCBTV1QKKwkJICogdGhpbmdzLiBUaGUgbWV0aG9kIGlucHV0Q2hhbmdlZCB3aWxsIGJlIGNhbGxlZCBiZWZvcmUgZGlzcG9zZSB3aGVuCisJCSAqIHRoZSB2aWV3IGlzIGNsb3NlZCwgd2UgcmVtb3ZlIG91cnNlbHZlcyBmcm9tIHRoZSBzZWxlY3Rpb24gc2VydmljZQorCQkgKiB0aGVyZS4KKwkJICogCisJCSAqIEBzZWUgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JQ29udGVudFByb3ZpZGVyI2Rpc3Bvc2UoKQorCQkgKi8KKwkJcHVibGljIHZvaWQgZGlzcG9zZSgpIHsKKwkJCS8vIE5vdGhpbmcgdG8gZG8KKwkJfSAvLyBkaXNwb3NlCisKKwkJLyoqCisJCSAqIEBzZWUgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JQ29udGVudFByb3ZpZGVyI2lucHV0Q2hhbmdlZChvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlZpZXdlciwKKwkJICogICAgICBqYXZhLmxhbmcuT2JqZWN0LCBqYXZhLmxhbmcuT2JqZWN0KQorCQkgKi8KKwkJcHVibGljIHZvaWQgaW5wdXRDaGFuZ2VkKFZpZXdlciB2aWV3ZXIsIE9iamVjdCBvbGRJbnB1dCwgT2JqZWN0IG5ld0lucHV0KSB7CisJCQkvLyBXZSByZW1lbWJlciB0aGUgTGlzdFZpZXdlciB3ZSdyZSBwcm92aWRpbmcgY29udGVudCBmb3IgYmVjYXVzZQorCQkJLy8gd2UnbGwgaGF2ZSB0byBjaGFuZ2UgdGhlIGxpc3Qgb2YgdGhpbmdzIGl0IGNvbnRhaW5zIGluIHRoZQorCQkJLy8gc2VsZWN0aW9uQ2hhbmdlZCBtZXRob2QuCisJCQl0aGlzLnZpZXdlciA9IChMaXN0Vmlld2VyKSB2aWV3ZXI7CisKKwkJCS8vIFdlcmUgd2UgcHJldmlvdXNseSBnZXR0aW5nIGlucHV0IGZyb20gYSBkaWZmZXJlbnQgc2VydmljZT8KKwkJCWlmIChvbGRJbnB1dCAhPSBudWxsKSB7CisJCQkJLy8gWWVzCisJCQkJLy8gTm90IGFueSBtb3JlLgorCQkJCWZpbmFsIElTZWxlY3Rpb25TZXJ2aWNlIG9sZFNTID0gKElTZWxlY3Rpb25TZXJ2aWNlKSBvbGRJbnB1dDsKKwkJCQlvbGRTUy5yZW1vdmVQb3N0U2VsZWN0aW9uTGlzdGVuZXIodGhpcyk7CisJCQl9CisKKwkJCS8vIElzIHRoZXJlIHNvbWUgbmV3IGlucHV0IHdlIHNob3VsZCByZWdpc3RlciB3aXRoPworCQkJaWYgKG5ld0lucHV0ICE9IG51bGwpIHsKKwkJCQkvLyBZZXMKKwkJCQkvLyBSZWdpc3RlciB1cyB3aXRoIHRoZSBuZXcgc2VydmljZS4gU2luY2UgdGhlcmUgc2hvdWxkIG9ubHkKKwkJCQkvLyByZWFsbHkgYmUgb25lIHNlbGVjdGlvbiBzZXJ2aWNlIGluIEVjbGlwc2UsIHRoaXMgd291bGQgb25seQorCQkJCS8vIGhhcHBlbiBvbmNlLCBob3dldmVyLCB0aGUgY29kZSBjYW4gaGFuZGxlIGEgY2hhbmdlIGlmIG5lZWRlZC4KKwkJCQlmaW5hbCBJU2VsZWN0aW9uU2VydmljZSBzcyA9IChJU2VsZWN0aW9uU2VydmljZSkgbmV3SW5wdXQ7CisJCQkJc3MuYWRkUG9zdFNlbGVjdGlvbkxpc3RlbmVyKHRoaXMpOworCQkJfQorCisJCX0gLy8gaW5wdXRDaGFuZ2VkCisKKwkJLyoqCisJCSAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCB3aGVuZXZlciBBTllUSElORyBpcyBzZWxlY3RlZCBpbiB0aGUgRWNsaXBzZQorCQkgKiB3b3JrYmVuY2guIEl0J3Mgam9iIGlzIHRvIGZpbHRlciBvdXQgc2VsZWN0aW9ucyBvZiBJU2ltdWxhdGlvbgorCQkgKiBpbnN0YW5jZXMgYW5kIHVwZGF0ZSB0aGUgbGlzdCBpbiB0aGUgTGlzdFZpZXdlci4KKwkJICogCisJCSAqIEBzZWUgb3JnLmVjbGlwc2UudWkuSVNlbGVjdGlvbkxpc3RlbmVyI3NlbGVjdGlvbkNoYW5nZWQob3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaFBhcnQsCisJCSAqICAgICAgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uKQorCQkgKi8KKwkJcHVibGljIHZvaWQgc2VsZWN0aW9uQ2hhbmdlZChmaW5hbCBJV29ya2JlbmNoUGFydCBwYXJ0LCBmaW5hbCBJU2VsZWN0aW9uIHNlbGVjdGlvbikgeworCisJCQkvLyBJcyB0aGlzIHNlbGVjdGlvbiBjaGFuZ2VkIGV2ZW50IGNvbWluZyBmcm9tIG91ciB2aWV3PworCQkJaWYgKHBhcnQgIT0gVmlld0V4YW1wbGUxLnRoaXMpIHsKKwkJCQkvLyBObworCQkJCS8vIFRoaXMgd2lsbCBob2xkIHRoZSBuZXcgc2ltdWxhdGlvbnMgdGhhdCBoYXZlIGJlZW4gc2VsZWN0ZWQKKwkJCQlmaW5hbCBMaXN0PElTaW11bGF0aW9uPiB0ZW1wID0gbmV3IEFycmF5TGlzdDxJU2ltdWxhdGlvbj4oKTsKKworCQkJCS8vIElzIGl0IGEgc3RydWN0dXJlZCBzZWxlY3Rpb24/CisJCQkJaWYgKHNlbGVjdGlvbiBpbnN0YW5jZW9mIElTdHJ1Y3R1cmVkU2VsZWN0aW9uKSB7CisJCQkJCS8vIFllcworCQkJCQlmaW5hbCBMaXN0IGxpc3QgPSAoKElTdHJ1Y3R1cmVkU2VsZWN0aW9uKSBzZWxlY3Rpb24pCisJCQkJCQkJLnRvTGlzdCgpOworCisJCQkJCS8vIEdvIHRocm91Z2ggZXZlcnl0aGluZyBpbiB0aGUgbGlzdCBvZiB0aGluZ3MgdGhhdCB3ZXJlCisJCQkJCS8vIHNlbGVjdGVkIGFuZCBwaWNrIG91dCB0aGUgb25lcyB0aGF0IGFyZSBJU2ltdWxhdGlvbnMuCisJCQkJCWZvciAoZmluYWwgSXRlcmF0b3Igc2VsZWN0aW9uSXRlciA9IGxpc3QuaXRlcmF0b3IoKTsgc2VsZWN0aW9uSXRlcgorCQkJCQkJCS5oYXNOZXh0KCk7KSB7CisJCQkJCQlmaW5hbCBPYmplY3Qgb2JqID0gc2VsZWN0aW9uSXRlci5uZXh0KCk7CisJCQkJCQlpZiAob2JqIGluc3RhbmNlb2YgSVNpbXVsYXRpb24pIHsKKwkJCQkJCQl0ZW1wLmFkZCgoSVNpbXVsYXRpb24pIG9iaik7CisJCQkJCQl9CisJCQkJCX0gLy8gZm9yIGVhY2ggc2VsZWN0ZWQgaXRlbQorCQkJCX0gLy8gaWYgc3RydWN0dXJlZCBzZWxlY3Rpb24KKworCQkJCS8vIERpZCB3ZSBmaW5kIGFueSBuZXcgc2ltdWxhdGlvbnMgdGhhdCB3ZXJlIHNlbGVjdGVkPworCQkJCWlmICh0ZW1wLnNpemUoKSA+IDApIHsKKwkJCQkJLy8gWWVzCisJCQkJCS8vIFRlbGwgdGhlIExpc3RWaWV3ZXIgbm90IHRvIHJlZHJhdyB3aGlsZSB3ZSdyZSBjaGFuZ2luZworCQkJCQkvLyBpdHMgbGlzdC4KKwkJCQkJdmlld2VyLmdldExpc3QoKS5zZXRSZWRyYXcoZmFsc2UpOworCQkJCQl0cnkgeworCQkJCQkJLy8gRG8gd2UgaGF2ZSBhbnkgb2xkIHNlbGVjdGlvbnMgd2Ugc2hvdWxkIHJlbW92ZT8KKwkJCQkJCWlmIChzZWxlY3RlZFNpbXVsYXRpb25zICE9IG51bGwpIHsKKwkJCQkJCQkvLyBZZXMKKwkJCQkJCQl2aWV3ZXIucmVtb3ZlKHNlbGVjdGVkU2ltdWxhdGlvbnMudG9BcnJheSgpKTsKKwkJCQkJCX0KKwkJCQkJCS8vIEFkZCB0aGUgbmV3IHNlbGVjdGlvbnMgdG8gdGhlIExpc3RWaWV3ZXIncyBsaXN0LiBJdAorCQkJCQkJLy8gd2lsbCB1c2UgdGhlIGxhYmVsIHByb3ZpZGVyIHRvIGdldCBhIHRleHQgc3RyaW5nIGZvcgorCQkJCQkJLy8gZWFjaCBvbmUuCisJCQkJCQl2aWV3ZXIuYWRkKHRlbXAudG9BcnJheSgpKTsKKworCQkJCQkJLy8gUmVtZW1iZXIgd2hhdCB3ZSBhZGRlZCB0aGlzIHRpbWUgc28gd2UgY2FuIHJlbW92ZSBpdAorCQkJCQkJLy8gbmV4dCBzZWxlY3Rpb24uCisJCQkJCQlzZWxlY3RlZFNpbXVsYXRpb25zID0gdGVtcDsKKwkJCQkJfSAvLyB0cnkKKwkJCQkJZmluYWxseSB7CisJCQkJCQkvLyBUaGUgTGlzdFZpZXdlciBzaG91bGQgdXBkYXRlIGl0c2VsZiBub3cuCisJCQkJCQl2aWV3ZXIuZ2V0TGlzdCgpLnNldFJlZHJhdyh0cnVlKTsKKwkJCQkJfQorCQkJCX0gLy8gaWYgYW55IG5ldyBzaW11bGF0aW9ucyBzZWxlY3RlZAorCQkJfSAvLyBpZiBzZWxlY3Rpb24gY2hhbmdlZCBldmVudCBjb21pbmcgZnJvbSBvdXIgdmlldz8KKwkJfSAvLyBzZWxlY3Rpb25DaGFuZ2VkCisKKwl9IC8vIFZpZXdFeGFtcGxlMUNvbnRlbnRQcm92aWRlcgorCisJLyoqCisJICogVGhpcyBjbGFzcyBpcyB0aGUgbGFiZWwgcHJvdmlkZXIgZm9yIHRoZSB2aWV3LiBJdCBpcyB1c2VkIGJ5IHRoZQorCSAqIExpc3RWaWV3ZXIgdG8gY29udmVydCBJU2ltdWxhdGlvbiBpbnN0YW5jZXMgdG8gdGV4dCBzdHJpbmdzLgorCSAqLworCXB1YmxpYyBzdGF0aWMgY2xhc3MgVmlld0V4YW1wbGUxTGFiZWxQcm92aWRlciBpbXBsZW1lbnRzIElMYWJlbFByb3ZpZGVyIHsKKworCQkvKioKKwkJICogVGhpcyBpcyBjYWxsZWQgYnkgdGhlIExpc3RWaWV3ZXIgZm9yIGVhY2ggT2JqZWN0IGluIGl0cyBsaXN0IHRvCisJCSAqIGdlbmVyYXRlIGEgdGV4dCBzdHJpbmcgdGhhdCByZXByZXNlbnRzIHRoYXQgT2JqZWN0LiBUaGlzCisJCSAqIGltcGxlbWVudGF0aW9uIGRpZ3MgaW50byB0aGUgc2ltdWxhdGlvbiB0byBnZXQgdGhlIHNjZW5hcmlvIGFuZCB0aGVuCisJCSAqIGZyb20gdGhhdCBpdCBvYnRhaW5zIHRoZSBjYW5vbmljYWwgZ3JhcGguIEl0IHRoZW4gZ29lcyB0aHJvdWdoIHRoZQorCQkgKiBub2RlcyBvZiB0aGUgZ3JhcGggYW5kIHVzaW5nIGEgTGF0TG9uZ1Byb3ZpZGVyQWRhcHRlckZhY3RvcnkgY3JlYXRlcworCQkgKiBhIExhdExvbmdQcm92aWRlciBmb3IgZWFjaCBub2RlIHRoYXQgY2FuIHJldHVybiB0aGUgbGF0aXR1ZGUgYW5kCisJCSAqIGxvbmdpdHVkZSBkYXRhIG9mIHRoZSBub2RlLiBUaGF0IGRhdGEgaXMganVzdCB0dXJuZWQgaW50byBhIHN0cmluZworCQkgKiBhbmQgcmV0dXJuZWQgYXMgdGhlIHRleHR1YWwgcmVwcmVzZW50YXRpb24gb2YgdGhlIHNpbXVsYXRpb24uCisJCSAqIAorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSUxhYmVsUHJvdmlkZXIjZ2V0VGV4dChqYXZhLmxhbmcuT2JqZWN0KQorCQkgKi8KKwkJcHVibGljIFN0cmluZyBnZXRUZXh0KE9iamVjdCBlbGVtZW50KSB7CisJCQlmaW5hbCBTdHJpbmdCdWlsZGVyIHNiID0gbmV3IFN0cmluZ0J1aWxkZXIoKTsKKworCQkJLy8gRXh0cmFjdCB0aGUgc2NlbmFyaW8gYW5kIHRoZW4gdGhlIGNhbm9uaWNhbCBncmFwaAorCQkJZmluYWwgSVNpbXVsYXRpb24gc2ltdWxhdGlvbiA9IChJU2ltdWxhdGlvbikgZWxlbWVudDsKKwkJCWZpbmFsIFNjZW5hcmlvIHNjZW5hcmlvID0gc2ltdWxhdGlvbi5nZXRTY2VuYXJpbygpOworCQkJZmluYWwgR3JhcGggY2Fub25pY2FsR3JhcGggPSBzY2VuYXJpby5nZXRDYW5vbmljYWxHcmFwaCgpOworCisJCQkvLyBHZXQgdGhlIG5vZGVzIGZyb20gdGhlIGdyYXBoIGFuZCBpdGVyYXRlIHRocm91Z2ggdGhlbS4gTm90ZSB0aGF0CisJCQkvLyB0aGUgZ2V0Tm9kZXMgY2FsbCByZXR1cm5zIGEgTWFwIGluc3RhbmNlIHdoZXJlIHRoZSBrZXlzIGFyZSB0aGUKKwkJCS8vIFVSSSdzIG9mIHRoZSBOb2RlIGluc3RhbmNlcy4gV2UgZ2V0IHRoZSB2YWx1ZXMgb2YgdGhlIG1hcCB0bworCQkJLy8gaW50ZXJhdGUgdGhyb3VnaCB0aGUgbm9kZXMuCisJCQlmb3IgKGZpbmFsIEl0ZXJhdG9yIG5vZGVJdGVyID0gY2Fub25pY2FsR3JhcGguZ2V0Tm9kZXMoKS52YWx1ZXMoKQorCQkJCQkuaXRlcmF0b3IoKTsgbm9kZUl0ZXIuaGFzTmV4dCgpOykgeworCQkJCWZpbmFsIE5vZGUgbm9kZSA9IChOb2RlKSBub2RlSXRlci5uZXh0KCk7CisKKwkJCQkvLyBXZSdkIGxpa2UgdG8gaGF2ZSBhY2Nlc3MgdG8gbGF0L2xvbmcgZGF0YSBvZiB0aGUgbm9kZSBpZgorCQkJCS8vIHRoZXJlIGlzIGFueSwgdG8gZG8gdGhhdCB3ZSB1c2UgYSBmYWN0b3J5IHRvIGNyZWF0ZSBhbgorCQkJCS8vIGFkYXB0ZXIgdGhhdCBrbm93cyBhYm91dCB0aGUgaW5uZXIgZGV0YWlscyBvZiBub2RlcyAoaXQKKwkJCQkvLyByZWFsbHkga25vd3MgYWJvdXQgYWxsIElkZW50aWZpYWJsZXMpIGFuZCBpbXBsZW1lbnRzIHRoZQorCQkJCS8vIExhdExvbmdQcm92aWRlciBpbnRlcmZhY2UuCisJCQkJZmluYWwgTGF0TG9uZ1Byb3ZpZGVyIGxhdExvbmdQcm92aWRlciA9IChMYXRMb25nUHJvdmlkZXIpIExhdExvbmdQcm92aWRlckFkYXB0ZXJGYWN0b3J5LklOU1RBTkNFCisJCQkJCQkuYWRhcHQobm9kZSwgTGF0TG9uZ1Byb3ZpZGVyLmNsYXNzKTsKKworCQkJCS8vIFRoZSBub2RlIG1heSBvciBtYXkgbm90IGhhdmUgbGF0L2xvbmcgZGF0YSBhc3NvY2lhdGVkIHdpdGgKKwkJCQkvLyBpdCwgaWYgaXQgZG9lc24ndCB0aGUgbGlzdCB0aGF0J3MgcmV0dXJuZWQgd2lsbCBiZSBlbXB0eS4KKwkJCQlmaW5hbCBMYXRMb25nIGxhdExvbmcgPSBsYXRMb25nUHJvdmlkZXIuZ2V0TGF0TG9uZygpOworCisJCQkJLy8gTm93IHdlIGp1c3QgZ28gdGhyb3VnaCBlYWNoIHNlZ21lbnQgYW5kIGNyZWF0ZSBhIHN0cmluZy4KKwkJCQlmb3IgKFNlZ21lbnQgc2VnbWVudCA6IGxhdExvbmcuZ2V0U2VnbWVudHMoKSkgeworCQkJCQlzYi5hcHBlbmQoRXhhbXBsZTEuY3JlYXRlU3RyaW5nT2ZMYXRMb25nRGF0YShzZWdtZW50KSk7CisJCQkJCXNiLmFwcGVuZCgiLy8vIik7CisJCQkJfSAvLyBmb3IKKwkJCX0gLy8gZm9yCisKKwkJCS8vIE5vdyBpZiB3ZSBkaWRuJ3QgZmluZCBhbnkgbGF0L2xvbmcgZGF0YSwgd2UganVzdCByZXR1cm4gYSBzaW1wbGUKKwkJCS8vIHJlc3BvbnNlLiBUaGlzIHdpbGwgYXBwZWFyIGluIHRoZSB2aWV3IGluc3RlYWQgb2YgdGhlIGRhdGEuCisJCQlTdHJpbmcgcmV0VmFsdWUgPSBzYi50b1N0cmluZygpOworCQkJcmV0VmFsdWUgPSByZXRWYWx1ZS5sZW5ndGgoKSA9PSAwID8gIk5vIExhdC9Mb25nIERhdGEiIDogcmV0VmFsdWU7CisKKwkJCXJldHVybiByZXRWYWx1ZTsKKwkJfSAvLyBnZXRUZXh0CisKKwkJLyoqCisJCSAqIFdlIGRvbid0IGhhdmUgYW55IGltYWdlcyBhc3NvY2lhdGVkIHdpdGggc2ltdWxhdGlvbnMsIGJ1dCBpZiB3ZSBkaWQKKwkJICogd2UnZCByZXR1cm4gdGhlbSBoZXJlLiBSZXR1cm5pbmcgbnVsbCBqdXN0IHRlbGxzIHRoZSBjYWxsZXIgdGhhdAorCQkgKiB0aGVyZSBhcmUgbm8gaW1hZ2VzLgorCQkgKiAKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklMYWJlbFByb3ZpZGVyI2dldEltYWdlKGphdmEubGFuZy5PYmplY3QpCisJCSAqLworCQlwdWJsaWMgSW1hZ2UgZ2V0SW1hZ2UoQFN1cHByZXNzV2FybmluZ3MoInVudXNlZCIpCisJCU9iamVjdCBlbGVtZW50KSB7CisJCQlyZXR1cm4gbnVsbDsKKwkJfSAvLyBnZXRJbWFnZQorCisJCS8qKgorCQkgKiBSZXF1aXJlZCBieSB0aGUgaW50ZXJmYWNlLCBidXQgbm90IHVzZWQgYnkgdXMuCisJCSAqIAorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSUJhc2VMYWJlbFByb3ZpZGVyI2FkZExpc3RlbmVyKG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSUxhYmVsUHJvdmlkZXJMaXN0ZW5lcikKKwkJICovCisJCXB1YmxpYyB2b2lkIGFkZExpc3RlbmVyKEBTdXBwcmVzc1dhcm5pbmdzKCJ1bnVzZWQiKQorCQlJTGFiZWxQcm92aWRlckxpc3RlbmVyIGxpc3RlbmVyKSB7CisJCQkvLyBub3RoaW5nCisJCX0KKworCQkvKioKKwkJICogUmVxdWlyZWQgYnkgdGhlIGludGVyZmFjZSwgYnV0IG5vdCB1c2VkIGJ5IHVzLgorCQkgKiAKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklCYXNlTGFiZWxQcm92aWRlciNkaXNwb3NlKCkKKwkJICovCisJCXB1YmxpYyB2b2lkIGRpc3Bvc2UoKSB7CisJCQkvLyBub3RoaW5nCisJCX0KKworCQkvKioKKwkJICogUmVxdWlyZWQgYnkgdGhlIGludGVyZmFjZSwgYnV0IG5vdCB1c2VkIGJ5IHVzLgorCQkgKiAKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklCYXNlTGFiZWxQcm92aWRlciNpc0xhYmVsUHJvcGVydHkoamF2YS5sYW5nLk9iamVjdCwKKwkJICogICAgICBqYXZhLmxhbmcuU3RyaW5nKQorCQkgKi8KKwkJcHVibGljIGJvb2xlYW4gaXNMYWJlbFByb3BlcnR5KEBTdXBwcmVzc1dhcm5pbmdzKCJ1bnVzZWQiKQorCQlPYmplY3QgZWxlbWVudCwgQFN1cHByZXNzV2FybmluZ3MoInVudXNlZCIpCisJCVN0cmluZyBwcm9wZXJ0eSkgeworCQkJcmV0dXJuIGZhbHNlOworCQl9CisKKwkJLyoqCisJCSAqIFJlcXVpcmVkIGJ5IHRoZSBpbnRlcmZhY2UsIGJ1dCBub3QgdXNlZCBieSB1cy4KKwkJICogCisJCSAqIEBzZWUgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JQmFzZUxhYmVsUHJvdmlkZXIjcmVtb3ZlTGlzdGVuZXIob3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JTGFiZWxQcm92aWRlckxpc3RlbmVyKQorCQkgKi8KKwkJcHVibGljIHZvaWQgcmVtb3ZlTGlzdGVuZXIoQFN1cHByZXNzV2FybmluZ3MoInVudXNlZCIpCisJCUlMYWJlbFByb3ZpZGVyTGlzdGVuZXIgbGlzdGVuZXIpIHsKKwkJCS8vIG5vdGhpbmcKKwkJfQorCX0gLy8gVmlld0V4YW1wbGUxTGFiZWxQcm92aWRlcgorCit9IC8vIFZpZXdFeGFtcGxlMQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5hdXRvbWF0aWNleHBlcmltZW50Ly5jbGFzc3BhdGggYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmF1dG9tYXRpY2V4cGVyaW1lbnQvLmNsYXNzcGF0aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZDFhNDMwCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5hdXRvbWF0aWNleHBlcmltZW50Ly5jbGFzc3BhdGgKQEAgLTAsMCArMSw3IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/Pg0KKzxjbGFzc3BhdGg+DQorCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJjb24iIHBhdGg9Im9yZy5lY2xpcHNlLmpkdC5sYXVuY2hpbmcuSlJFX0NPTlRBSU5FUi9vcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwuZGVidWcudWkubGF1bmNoZXIuU3RhbmRhcmRWTVR5cGUvSjJTRS0xLjUiLz4NCisJPGNsYXNzcGF0aGVudHJ5IGtpbmQ9ImNvbiIgcGF0aD0ib3JnLmVjbGlwc2UucGRlLmNvcmUucmVxdWlyZWRQbHVnaW5zIi8+DQorCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJzcmMiIHBhdGg9InNyYyIvPg0KKwk8Y2xhc3NwYXRoZW50cnkga2luZD0ib3V0cHV0IiBwYXRoPSJiaW4iLz4NCis8L2NsYXNzcGF0aD4NCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmF1dG9tYXRpY2V4cGVyaW1lbnQvLnByb2plY3QgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmF1dG9tYXRpY2V4cGVyaW1lbnQvLnByb2plY3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWZhZmYyZgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuYXV0b21hdGljZXhwZXJpbWVudC8ucHJvamVjdApAQCAtMCwwICsxLDI4IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/Pg0KKzxwcm9qZWN0RGVzY3JpcHRpb24+DQorCTxuYW1lPm9yZy5lY2xpcHNlLnN0ZW0udGVzdHMuYXV0b21hdGljZXhwZXJpbWVudDwvbmFtZT4NCisJPGNvbW1lbnQ+PC9jb21tZW50Pg0KKwk8cHJvamVjdHM+DQorCTwvcHJvamVjdHM+DQorCTxidWlsZFNwZWM+DQorCQk8YnVpbGRDb21tYW5kPg0KKwkJCTxuYW1lPm9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFidWlsZGVyPC9uYW1lPg0KKwkJCTxhcmd1bWVudHM+DQorCQkJPC9hcmd1bWVudHM+DQorCQk8L2J1aWxkQ29tbWFuZD4NCisJCTxidWlsZENvbW1hbmQ+DQorCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLk1hbmlmZXN0QnVpbGRlcjwvbmFtZT4NCisJCQk8YXJndW1lbnRzPg0KKwkJCTwvYXJndW1lbnRzPg0KKwkJPC9idWlsZENvbW1hbmQ+DQorCQk8YnVpbGRDb21tYW5kPg0KKwkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5TY2hlbWFCdWlsZGVyPC9uYW1lPg0KKwkJCTxhcmd1bWVudHM+DQorCQkJPC9hcmd1bWVudHM+DQorCQk8L2J1aWxkQ29tbWFuZD4NCisJPC9idWlsZFNwZWM+DQorCTxuYXR1cmVzPg0KKwkJPG5hdHVyZT5vcmcuZWNsaXBzZS5wZGUuUGx1Z2luTmF0dXJlPC9uYXR1cmU+DQorCQk8bmF0dXJlPm9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFuYXR1cmU8L25hdHVyZT4NCisJPC9uYXR1cmVzPg0KKzwvcHJvamVjdERlc2NyaXB0aW9uPg0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuYXV0b21hdGljZXhwZXJpbWVudC9NRVRBLUlORi9NQU5JRkVTVC5NRiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuYXV0b21hdGljZXhwZXJpbWVudC9NRVRBLUlORi9NQU5JRkVTVC5NRgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYTA0NDRkCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5hdXRvbWF0aWNleHBlcmltZW50L01FVEEtSU5GL01BTklGRVNULk1GCkBAIC0wLDAgKzEsMTYgQEAKK01hbmlmZXN0LVZlcnNpb246IDEuMAorQnVuZGxlLU1hbmlmZXN0VmVyc2lvbjogMgorQnVuZGxlLU5hbWU6IFNURU0gQXV0b21hdGljIEV4cGVyaW1lbnQgVGVzdCBTdWl0ZQorQnVuZGxlLVN5bWJvbGljTmFtZTogb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5hdXRvbWF0aWNleHBlcmltZW50O3NpbmdsZXRvbjo9dHJ1ZQorQnVuZGxlLVZlcnNpb246IDEuMi4xCitCdW5kbGUtUmVxdWlyZWRFeGVjdXRpb25FbnZpcm9ubWVudDogSjJTRS0xLjUKK1JlcXVpcmUtQnVuZGxlOiBvcmcuZWNsaXBzZS5lbWYuZWNvcmUsCisgb3JnLmp1bml0O3Zpc2liaWxpdHk6PXJlZXhwb3J0LAorIG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMsCisgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLAorIG9yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZSwKKyBvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRpc2Vhc2Vtb2RlbHMsCisgb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5hdXRvbWF0aWNleHBlcmltZW50LAorIG9yZy5lY2xpcHNlLmNvcmUucnVudGltZQorQnVuZGxlLVZlbmRvcjogRWNsaXBzZS5vcmcKK0V4cG9ydC1QYWNrYWdlOiBvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmF1dG9tYXRpY2V4cGVyaW1lbnQKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuYXV0b21hdGljZXhwZXJpbWVudC9idWlsZC5wcm9wZXJ0aWVzIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5hdXRvbWF0aWNleHBlcmltZW50L2J1aWxkLnByb3BlcnRpZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmYyMDM3NQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuYXV0b21hdGljZXhwZXJpbWVudC9idWlsZC5wcm9wZXJ0aWVzCkBAIC0wLDAgKzEsNSBAQAorc291cmNlLi4gPSBzcmMvDQorb3V0cHV0Li4gPSBiaW4vDQorYmluLmluY2x1ZGVzID0gTUVUQS1JTkYvLFwNCisgICAgICAgICAgICAgICAuLFwNCisgICAgICAgICAgICAgICBwbHVnaW4ueG1sDQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5hdXRvbWF0aWNleHBlcmltZW50L3BsdWdpbi54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmF1dG9tYXRpY2V4cGVyaW1lbnQvcGx1Z2luLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NTM1NjkwCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5hdXRvbWF0aWNleHBlcmltZW50L3BsdWdpbi54bWwKQEAgLTAsMCArMSw1IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPD9lY2xpcHNlIHZlcnNpb249IjMuNCI/PgorPHBsdWdpbj4KKworPC9wbHVnaW4+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmF1dG9tYXRpY2V4cGVyaW1lbnQvcmVzb3VyY2VzL0F1dG9tYXRlZEV4cGVyaW1lbnRFeGFtcGxlLy5wcm9qZWN0IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5hdXRvbWF0aWNleHBlcmltZW50L3Jlc291cmNlcy9BdXRvbWF0ZWRFeHBlcmltZW50RXhhbXBsZS8ucHJvamVjdApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4wY2NkMTE5Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5hdXRvbWF0aWNleHBlcmltZW50L3Jlc291cmNlcy9BdXRvbWF0ZWRFeHBlcmltZW50RXhhbXBsZS8ucHJvamVjdApAQCAtMCwwICsxLDEyIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPHByb2plY3REZXNjcmlwdGlvbj4KKwk8bmFtZT5BdXRvbWF0ZWRFeHBlcmltZW50RXhhbXBsZTwvbmFtZT4KKwk8Y29tbWVudD48L2NvbW1lbnQ+CisJPHByb2plY3RzPgorCTwvcHJvamVjdHM+CisJPGJ1aWxkU3BlYz4KKwk8L2J1aWxkU3BlYz4KKwk8bmF0dXJlcz4KKwkJPG5hdHVyZT5vcmcuZWNsaXBzZS5zdGVtLnN0ZW1uYXR1cmU8L25hdHVyZT4KKwk8L25hdHVyZXM+Cis8L3Byb2plY3REZXNjcmlwdGlvbj4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuYXV0b21hdGljZXhwZXJpbWVudC9yZXNvdXJjZXMvQXV0b21hdGVkRXhwZXJpbWVudEV4YW1wbGUvUmVjb3JkZWQgU2ltdWxhdGlvbnMvUmVmZXJlbmNlL0Rpc2Vhc2UgRGVhdGhzXzAuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5hdXRvbWF0aWNleHBlcmltZW50L3Jlc291cmNlcy9BdXRvbWF0ZWRFeHBlcmltZW50RXhhbXBsZS9SZWNvcmRlZCBTaW11bGF0aW9ucy9SZWZlcmVuY2UvRGlzZWFzZSBEZWF0aHNfMC5jc3YKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMmMyNDQwMQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuYXV0b21hdGljZXhwZXJpbWVudC9yZXNvdXJjZXMvQXV0b21hdGVkRXhwZXJpbWVudEV4YW1wbGUvUmVjb3JkZWQgU2ltdWxhdGlvbnMvUmVmZXJlbmNlL0Rpc2Vhc2UgRGVhdGhzXzAuY3N2CkBAIC0wLDAgKzEgQEAKK2l0ZXJhdGlvbix0aW1lLApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5hdXRvbWF0aWNleHBlcmltZW50L3Jlc291cmNlcy9BdXRvbWF0ZWRFeHBlcmltZW50RXhhbXBsZS9SZWNvcmRlZCBTaW11bGF0aW9ucy9SZWZlcmVuY2UvRGlzZWFzZSBEZWF0aHNfMS5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmF1dG9tYXRpY2V4cGVyaW1lbnQvcmVzb3VyY2VzL0F1dG9tYXRlZEV4cGVyaW1lbnRFeGFtcGxlL1JlY29yZGVkIFNpbXVsYXRpb25zL1JlZmVyZW5jZS9EaXNlYXNlIERlYXRoc18xLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5hZmU0OTEzCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5hdXRvbWF0aWNleHBlcmltZW50L3Jlc291cmNlcy9BdXRvbWF0ZWRFeHBlcmltZW50RXhhbXBsZS9SZWNvcmRlZCBTaW11bGF0aW9ucy9SZWZlcmVuY2UvRGlzZWFzZSBEZWF0aHNfMS5jc3YKQEAgLTAsMCArMSw2MyBAQAoraXRlcmF0aW9uLHRpbWUsU0UtQUIsU0UtQUMsU0UtQkQsU0UtQkgsU0UtQyxTRS1ELFNFLUYsU0UtRyxTRS1ILFNFLUksU0UtSyxTRS1LUCxTRS1MLFNFLU1PLFNFLU4sU0UtUkksU0UtUyxTRS1TSyxTRS1TVCxTRS1ULFNFLVUsU0UtWCxTRS1ZLFNFLVoKKzEsVHVlIDIgTm92IDEwLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyLEZyaSAzIFNlcCAxMCwwLjEyNzE4NDQ4MTQwNzQ0MzM0LDcuMzc4ODMxOTc4MzAxNzc3RS0xMSw3LjY1MTcyNTY4MTAwNzQ1MkUtMTQsNy4zMDg3MjY1NjQ2MzczMTNFLTEzLDAuMDAxMTk0OTI5ODY2MjEwMDA4MiwwLjAwMTA5NzcwMjQ2MTgyOTM5NDMsMi42NDU0NDIwNTUzOTAwOTE1RS04LDEuMzc2MzM1NDc3OTU5NDI0NUUtMTAsMi43MDIxNjc3NTU4ODMwMDhFLTgsMC4wLDYuOTY3MDgyMjk4NTUxNTI5RS0xMSwxLjE4Njg3MTQ0ODI3OTM0MTdFLTcsMi4yMzcxMDIxMDU2NTI1MTJFLTEwLDIuMDExOTQ5NzMyNzMyNzYzNkUtMTUsNi44Nzg5NTgyODU4MTE5NzVFLTExLDcuODQ0OTQ5MjE1MDMzMTE1RS0xMywyLjg5NTY2NDkyNDQwNjA5NTNFLTgsMi44NjQ2MDMzMjY4MjQ5MTc4RS04LDcuNzA2MDUwNTg1MTk0ODQ4RS02LDcuMTYwNDYzNTEwMDIyNDIzRS02LDEuNDU2OTE3MTU5OTUzNTg3NUUtNSw3LjU5OTQ1Nzc3OTA5MzkxMkUtNiwyLjIyMzU3MDMxNDk4NDA3NUUtOCwyLjA3MjUzNzM0NzI4ODQzOThFLTgKKzMsU2F0IDQgU2VwIDEwLDAuMzI5NDI4NDgzMjk4MDkyMiwzLjcwNDA0MjE1NTU0NDQ0NzVFLTksOC4yNzEzMjkyNzc3NzAwOEUtMTIsNy43NDIwOTU5NTU3OTMxNjlFLTExLDAuMDA2MzMzMDE2MjY1MDQ4NjU2LDAuMDA1NzMwMDI1NzIzMTcwODIxLDYuMTI2Mzk0NTI2Mjk1Nzc2RS03LDYuNzE5MTI1OTE4OTgxNjQ5RS05LDYuMjU0MzI4OTQwNDE4MDRFLTcsMC4wLDMuNDE1ODA3OTE2NjcyMjUyN0UtOSwyLjc1MTQ5NDAyOTQyMzgzODRFLTYsMS4wOTgwODIwOTIxNDgwNDIxRS04LDQuNjA1Nzg3NzgzNDU1NjQ2RS0xMywzLjM3ODUwMTcxOTQxNTQ1MjJFLTksOC4xODgwOTA2MDYzNDI4MjNFLTExLDYuNzYzMTkxOTExNTMyMzRFLTcsNi42NDcwMDcxMTk0NTEzOTRFLTcsOC41MjAzODQxMDQ4Mjc1MzRFLTUsNy44OTIxODY2MDc3OTE0ODdFLTUsMS42MDMxODk1NTA2NTAwNzcyRS00LDguNTAyODY4NjE3MTA5MTk4RS01LDUuMjUxMTQ2NDM3ODMyNDkzRS03LDQuODk3MzM2ODQxNTg4ODNFLTcKKzQsU3VuIDUgU2VwIDEwLDAuNjUxMzUwMTIzNjcxMTE3Nyw0LjIwODYxODMzNDk5NzYxOUUtOCwxLjQ2MzkyNzI0NTQwNjcyMTVFLTEwLDEuMzQyNjk5MTIxMjgxNThFLTksMC4wMTkwNzA4ODc4OTk3ODc1NSwwLjAxNjk5MzUzMDM1NDI0NzQyLDQuMzk5NjU4ODgxNTM2Nzk5RS02LDcuNDIzNzM1NjI2MzI3MDQ1RS04LDQuNDg4Njc2MTYxNTM5OTk0RS02LDAuMCwzLjc5MDIzODI1ODY5MzUyNEUtOCwxLjk3NzY0MDgzODMxMzQ0OThFLTUsMS4yMTk5MzczMDQ5ODc3OTQ4RS03LDEuMjM2MDU5Nzg3NzEzOTk3MUUtMTEsMy43NTYyNDc4OTY0Njk2NTJFLTgsMS4zOTg4NTUxNzgwMjMyMzAzRS05LDQuODk5MzkyMDYzNDg2NTM4RS02LDQuNzgzMjc1OTg2MDk3ODc5RS02LDMuOTY5Njk0NDQ0MzE5ODhFLTQsMy42NjU0MDIxOTYwNzU2NDFFLTQsNy40MzEwNTMyMjU2MzE3NjZFLTQsNC4wMDgwODYzODI0OTY3MDVFLTQsMy44NDU2NTgxNTY4NzAxMDc1RS02LDMuNTg3ODg4NjE3MDc4NzYwNkUtNgorNSxNb24gNiBTZXAgMTAsMS4xNjQyMzU0NzU1NjY5ODY2LDIuNjIxNDkzODM4NDA4NDExRS03LDEuMjQ4MDM5ODI4MjU0MTM3M0UtOSwxLjEyMTcyMzQzNjEzOTQwODVFLTgsMC4wNDU3OTcwNjM0Njk1NzU3MiwwLjA0MDE5MjY3OTE2MDMyMTQ4LDEuOTY2NjM5MjcwNzQ4Nzc2MkUtNSw0LjQ5NjUyNDQzNzkyMTYyNEUtNywyLjAwNTAxODk2MzA5MDE0NUUtNSwwLjAsMi4zMDU2MTQ0Nzg3Nzg4OTFFLTcsOC44NDU2NTc0MDA5MzExMzZFLTUsNy40MzAyODQ5MTU2NTkzNTZFLTcsMS4zOTk4MjI1ODQyNzY4ODdFLTEwLDIuMjg5Nzg0OTcxNTQ1NzU2NUUtNywxLjE1MDk3MTI0MzYyODU4RS04LDIuMjA5MzUwNzA5MTAzNTcyRS01LDIuMTQyNTc0MzY2OTM3OTkzRS01LDAuMDAxMzA0MjIxMjYyMjQ5NDcxLDAuMDAxMjAwNDEwODM3MjE0MTg0NSwwLjAwMjQyODA2NTU1MDA2MjQ1MzYsMC4wMDEzMzE5MDg5MTEwODgzMzI3LDEuNzUyODU3OTQyOTIyNjY5NUUtNSwxLjYzNTUxMzUwNTkxMjkwOEUtNQorNixUdWUgNyBTZXAgMTAsMS45ODIwNDQyODY5ODAzNzkyLDEuMTc4NTQ4MDc5Njk5MTQxOUUtNiw3LjE2MTY2OTc2MjI3OTI2NkUtOSw2LjMwODI0OTQ1MzQ3Nzc1NkUtOCwwLjA5NzUwMTQxNjI0Mjg3NTQ5LDAuMDg0Mjk2NDU5NjA0NDEwMjIsNi43OTkwMjEwNzc0Mjc2OTJFLTUsMS45NjU4ODAwMTIyMDUyOTJFLTYsNi45MjYzODMxOTE4NTU0NjRFLTUsMC4wLDEuMDEyMzQ0NDcyNjI1Mzk5NkUtNiwzLjA1OTM5NTczMzE2NjAxNzRFLTQsMy4yNjY2ODgzNzUzNDE2MTkzRS02LDkuOTM5NzY2NDQ4MDQ5MTg3RS0xMCwxLjAwNzY2MzkxNzExNjk2NDZFLTYsNi4zNzM5ODIzMjI0NjIxNUUtOCw3LjcwNTg0Njk0NDcwMjk0N0UtNSw3LjQyMjg5NzAwNDUzOTc0OEUtNSwwLjAwMzU0ODg0MDg1MDk5NjA2OSwwLjAwMzI1NTg5OTc2NDkzMjA0MTQsMC4wMDY1Njg1MTc5Nzg5MTg4NywwLjAwMzY2NDMyOTMxNzQ1MjgsNi4xNzgzODE4NTgwNDY5OTZFLTUsNS43NjM2MzMwOTgwNjY3NzZFLTUKKzcsV2VkIDggU2VwIDEwLDMuMjg3MDQ3OTgwOTkwMDQwNiw0LjMxODQ2ODM3NTE2MDMyMkUtNiwzLjIwNTcyOTY3NTE2NDQyNkUtOCwyLjc2NzY2NTAzOTQ5MDY4MDVFLTcsMC4xOTI4Njk1ODAxMDcyMjExLDAuMTY0MzIzNDQzNDMxNDE2ODYsMi4wMDE1OTYxMjczMDQxNTY2RS00LDcuMDA2MjA0NjkyNDY2NDZFLTYsMi4wMzczOTgwNzE0ODAwNzU3RS00LDAuMCwzLjYyMzMyMzc1NzU4Nzc5ODNFLTYsOS4wMDg1MzU3NTc4MzYxNEUtNCwxLjE3MDczMzg0MjQ2Nzc5MTVFLTUsNS4yNjY1MDMzNzU5ODY5MjM1RS05LDMuNjE1MTY0MTI5ODkzNTU2NkUtNiwyLjc1MzUyMTkwMjYwMDQ2OEUtNywyLjI4ODY4MTUwOTg5MTg5MDJFLTQsMi4xODk5MDk2OTA1MDQ0ODA2RS00LDAuMDA4NTg5MDcyNjI0ODc3MDk4LDAuMDA3ODU0NzUyMDIzNTQxODksMC4wMTU4MDAxODE0ODMzNjY4NzQsMC4wMDg5NjMwODU3NDkwOTUxNzYsMS44NTQwNTc4MTMyOTMzMTA1RS00LDEuNzI4NzU0MDQ2MjExNzE0M0UtNAorOCxUaHUgOSBTZXAgMTAsNS4zNzA4OTQ3MTk5MzY5MTIsMS4zNzUzMzI1Njk4MzI5OTA3RS01LDEuMjA5OTI0MjA4ODYyMTgyNEUtNywxLjAyNDAxNTI4MTI3NzE1ODRFLTYsMC4zNjMzNzMzOTc2NzU4ODE2LDAuMzA1MjI1OTc0MTUwODk4Myw1LjI4MDE3OTg0MzI5NjU2OUUtNCwyLjE3MDYwNzQxNjQ1Mzg4MkUtNSw1LjM2OTg2NjM2NDMzMzkyMkUtNCwwLjAsMS4xMjczMjA5Njk5NTk4MzM3RS01LDAuMDAyMzc2NDEzMjYxODI4MzQ3NiwzLjY0NzM4Njg1NjYzMTUzNUUtNSwyLjI4MTkzNjE3OTI3NjM2MzZFLTgsMS4xMjc1NzYwOTg2NTcxNjE1RS01LDEuMDAzMDA5MTA4NTY4NjcyM0UtNiw2LjA5MDg3NjA5NDk4NjM2OUUtNCw1Ljc4OTMwMjQyMTQxODIyN0UtNCwwLjAxOTIwMjIzNDg0Mzk5NDM5LDAuMDE3NTAzOTA4NTEyNzQxNDU2LDAuMDM1MDk3MDkzOTc5ODA0MzUsMC4wMjAyNDI0ODU5NjE2MTAyNzUsNC45ODQzNjg0MzA2NzA4NTJFLTQsNC42NDM4NDIxNjM4NjAwMDM1RS00Cis5LEZyaSAxMCBTZXAgMTAsOC43MDAzNzIzODY0MzQ5MTIsMy45NTY2NTk2MTgzMjQ3Njc0RS01LDQuMDM1MDQyOTIwNzA1Njg0RS03LDMuMzQ4MzQwMTc3NDE2OTExNUUtNiwwLjY2MTY1NjM0ODMyMTU0MDksMC41NDgyMzgwODcwOTcxNjYzLDAuMDAxMjg2NzkyMzM1MjEwNDU1NSw2LjA3NjA0OTA5NTYzNTA1RS01LDAuMDAxMzA3NDE1NTA5NTE2NTY0NSwwLjAsMy4xNjg5MzkyMTUxNDk4NEUtNSwwLjAwNTc5MDAwMTQ3MjU3NTcyNDYsMS4wMjY2OTA4ODcxMDE3MTUyRS00LDguNTQ1NDE4MjY1NDY0MTg3RS04LDMuMTc3ODc1MDk4MjY5NTc3NUUtNSwzLjIyODY0ODA5NjYxMzIyMzhFLTYsMC4wMDE0OTczOTA1NzMzMTEwNTc2LDAuMDAxNDEzODgxMTI3NTY3ODc3MSwwLjA0MDU1ODQwMTMxMjk4LDAuMDM2ODUyMTQyNzE3MTExMzA1LDAuMDczNjM0NTc0NDQwMDU5NjgsMC4wNDMxNjk4MzMyMDAwNzc2NzQsMC4wMDEyMzc1NDMzODI3MjkwNzUyLDAuMDAxMTUxNzYwODMyMjAwOTg5NQorMTAsU2F0IDExIFNlcCAxMCwxNC4wMjI2MTY1MTE0NDEzOTIsMS4wNTM2NTY4MjI2NTMzMzkxRS00LDEuMjI0NjQyNzY4Nzc3NjAyN0UtNiw5Ljk2NTcxODcwMzUwNjE1RS02LDEuMTc1MTk2MTYwMjI4NTkzMiwwLjk2MTEyODAxNzU5MDcyMjYsMC4wMDI5NTM3Mzg5NjIyNjM2NjY4LDEuNTc0NzY1MTE0MTU3MTk5RS00LDAuMDAyOTk4MTAxMjAxMTY3NzUyNiwwLjAsOC4yNDc0MTkyNDM5NzE5MzVFLTUsMC4wMTMyODQ1MTM4MjczNzI2NTQsMi42NzU3NDc3NDE5ODc3OTFFLTQsMi44NjMzMDMzMzUxMzcwNjJFLTcsOC4yOTI4MTY2ODQwODI1MTNFLTUsOS40NTkyMzY5MDkwNzE1NDJFLTYsMC4wMDM0NjcwMzYxNDEyOTE5NzgsMC4wMDMyNTIzODk5OTEyOTk2OTc4LDAuMDgyMTAzMjgwMjc2MDY0NzQsMC4wNzQzNjAxMzU5NjIyOTk4NCwwLjE0ODAyMTc4MDg2NzcyNDMzLDAuMDg4MTkwMzEyOTUxMzExODcsMC4wMDI4OTMyMzEyMzU5MjI2OTIsMC4wMDI2ODkwMDk1MjYwMzE1NzcKKzExLFN1biAxMiBTZXAgMTAsMjIuNTMzMjE4MjQ2MDc0MTQyLDIuNjQyMjI0OTQxMTM2MzY5M0UtNCwzLjQ1NDEwMDgxODYxMTU0OTZFLTYsMi43NTY5NjY0ODc4Nzg0MzJFLTUsMi4wNDg3ODIyMTQwMzIxMzc0LDEuNjU0OTg2NTg3NDYzMTM0MiwwLjAwNjQ3MzAxMTYzMzQzMDE2LDMuODQ0NTA5MTM3NjMyNzUyN0UtNCwwLjAwNjU2MzMyODA0NzkxMjc1NjQsMC4wLDIuMDIxNzYyNTUxMTE1Mzc4RS00LDAuMDI5MDkyMjk1MzA1NzkwMDU3LDYuNTY4NDQ2NTYyMzcwNDM2RS00LDguNzk5ODM2MDA5ODc5MDU2RS03LDIuMDM4NTY1MzA2ODkzMjgwNUUtNCwyLjU3NTkwMjI4NDM5NzAzMkUtNSwwLjAwNzY2MzA4NzA1NTE1NDI2NTYsMC4wMDcxNDI1NTYwMjM4MjYxODQ1LDAuMTYwODY2NzMzNzE3MTI2MjMsMC4xNDUyMjk0MzA0OTU2ODM3NCwwLjI4NzkzMTY3MDkyMjU2OTE2LDAuMTc0Mjg1MzUyNjEzNzIxMzgsMC4wMDY0NTUzOTQ3ODgxNjA2NTEsMC4wMDU5OTAwNTM4MDc0Nzc3ODUKKzEyLE1vbiAxMyBTZXAgMTAsMzYuMTQzOTMzMzIyNzE4NCw2LjMxMzI5NDMzMjQ0NDUxNUUtNCw5LjE4MzI3NjQ3MjAxNDQwOUUtNiw3LjE5MDkxMDIzNjA3MzMxRS01LDMuNTIwNzUxMzc0NDg5MjQxLDIuODExMDc0MzI3OTI1Njk4NywwLjAxMzY2OTg4MDA1NDA0NzQxMSw4Ljk0NTc0NTgzNTA0MzIzOUUtNCwwLjAxMzg0NTMyMjczODgwNDA1NiwwLjAsNC43MjM1NTg5MzIyNTcwODQ1RS00LDAuMDYxMzgwODYxMzMxNjEzNjM0LDAuMDAxNTM2NzgzMDU5MzUzNDU1NCwyLjUyMjM1NzQyNjgzMTYxMDNFLTYsNC43NzY1NjgyNTU5NTgxMTlFLTQsNi42MTMzNDA3ODExMzMxOEUtNSwwLjAxNjMxOTk2MTIyMzg3NDQxNiwwLjAxNTExNTQzNjg3MTM0NTI1OCwwLjMwNzE2NjY1Mjc4MjQ4MTksMC4yNzY0MjcxMzY3ODY0ODA2LDAuNTQ1Njk3MDM4MTAwMTg0NywwLjMzNTQ4MTk1MTE2NzI1MzQsMC4wMTM4NzQ4NjY5MzQ4MDI5MzQsMC4wMTI4NTA2NzIyMjczNjg2MTIKKzEzLFR1ZSAxNCBTZXAgMTAsNTcuOTA3MDMzMzgyNzgwNzk2LDAuMDAxNDQ5OTQ4NDY4ODU4OTY2NiwyLjMyNTk0Mjg2MDAzNTUzODdFLTUsMS43ODcxODk4MTU5MTExNTE2RS00LDUuOTgxNzgzNzI0NTI5NTg2LDQuNzI0MjA2MjY4MzMzNzU5LDAuMDI4MDExNzY3NTQxODAzODQ4LDAuMDAyMDAxNDQ5MDE0MTc4NjcyOCwwLjAyODMzODU0NjQwNDU2MTExMywwLjAsMC4wMDEwNjEwNDk2MTIxOTc0MDQ5LDAuMTI1NjMyNjg0NjYxODY2NywwLjAwMzQ1Njk2MTMyNjgyMDA1NCw2LjgyNzg1MDEwMDk3MDU0NzRFLTYsMC4wMDEwNzYxNTI1NDAwMTIyODI5LDEuNjE3ODU3NTY4Mzc5NDEzN0UtNCwwLjAzMzcyMDI0NDczMzU1MjUzLDAuMDMxMDM4MTAyOTQwMTM4MTMsMC41NzQ0NTUyNDY2MzI2NzA2LDAuNTE1MzM1ODY1NTYxODQwMywxLjAxMjcwODIwNTcwOTA4ODYsMC42MzIxNDAzODcxOTE4OTc2LDAuMDI4OTI1OTU2MDgyMTcyNTYzLDAuMDI2NzM0MjUxODMyNjYxNDIzCisxNCxXZWQgMTUgU2VwIDEwLDkyLjY4MjMwMjQxNTM5NDE5LDAuMDAzMjIyMTg3NzQ1MzIzMzU2LDUuNjU3OTA0NDI5MTAwOTIxRS01LDQuMjY2ODc2ODU5MTAxMDU2NUUtNCwxMC4wNjkyNjQ1NDI4MzUyNCw3Ljg3MjA4NTAzOTEzODg0NSwwLjA1NTk4OTM3NzU2MDM3ODgxLDAuMDA0MzM0MzYyNjMwMjY4MzIxNSwwLjA1NjU3NDMwNTQzNzc0MjY0LDAuMCwwLjAwMjMwNjg5MzE2ODE3NTc2MjMsMC4yNTA3NTcxODMwMjUzMTQ5LDAuMDA3NTI2NzE1OTQyOTYyMTExLDEuNzYyMjA1MDcxNjY3MjI0NEUtNSwwLjAwMjM0NjkxMjk1ODQ1ODI1NjQsMy44MDIwMTcyOTcxNDQ0NDRFLTQsMC4wNjc5NDkwNDU0NTg4NzQ1OCwwLjA2MjE2NDk3NzI5Njc2Mjk1LDEuMDU2MTc5NTI0OTkzMzE0LDAuOTQ0NTE1MzIzNzcwODQzOCwxLjg0NzE3MTQwODExNTYwMzQsMS4xNzAzNDc5OTAxMzYyMSwwLjA1ODc5ODA3NzM4MzYwNjg3LDAuMDU0MjE1OTYzNDk3ODY2ODIKKzE1LFRodSAxNiBTZXAgMTAsMTQ4LjE3MDc2Njc1MTYwMiwwLjAwNjk2Mzg4NzgzMjMxMjQ2NCwxLjMyOTk1NjIwMTIxMzU2MDJFLTQsOS44NDYzNzQ0MDI3NjkwODNFLTQsMTYuODE2NjE1NzU4NzQ3MDIsMTMuMDI0NTk1NDc4MTg5NDQ1LDAuMTA5NTkzMjI3NDI3MDM2MjEsMC4wMDkxMzE5MTQ3ODIwMzU2ODYsMC4xMTA1OTk0NTgwMjEwMjk1OSwwLjAsMC4wMDQ4NzkxODU0MzU1NjkzNDIsMC40OTAwMDg3OTg1MDgxODc0NiwwLjAxNTk0MjIwNjM2NzEyMjkzNyw0LjM2Nzg3MTU3ODUzNjAwNDVFLTUsMC4wMDQ5Nzk0NzczMjgzNTQ5NzMsOC42MzYwNjk4ODgxODYxOTRFLTQsMC4xMzQwNjUwODA5MzE2NTcyLDAuMTIxOTI1NjM2Mzk4MjMxMzMsMS45MTQ0MTI1Nzg5OTc2NDY3LDEuNzA2NjYxNDk1NTg4NzMxNCwzLjMyMDYxNTI2MjU4ODAzLDIuMTM0OTE1Njk2OTIxNTUxNSwwLjExNjk5NzI0NzE0NTExMSwwLjEwNzYwMzAzNDI1NTYxNDM4CisxNixGcmkgMTcgU2VwIDEwLDIzNi40NzkzMTMyNTQxNTY5LDAuMDE0NjkyNjg4MDAxNjMxNTgxLDMuMDM0NzczNDg1NTA2OTg4NUUtNCwwLjAwMjIwNjI2ODY1NTUyNTg0MTUsMjcuODg0Mzc0NDc4MzA3NTUzLDIxLjQxMjMyNjM1MjM2NjA0OCwwLjIxMDY5NDY3NzcxOTY0NTU2LDAuMDE4Nzg4MjMzMjY4MzUxMywwLjIxMjM1NTIyNTQ1ODc2NTA2LDAuMCwwLjAxMDA3Njk2ODc0ODMxNjkyNCwwLjk0MDIyNDU5MDk1Nzk2NjUsMC4wMzI5NzMyNTk5NjE3MDYyNCwxLjA0NTMxNjE0NDEwMjQ3MTVFLTQsMC4wMTAzMTY5ODA2Njc1MzI2NzcsMC4wMDE5MDQ2NTA2MjgyNjEzNjg2LDAuMjU5NzU1NTEwOTYzMTg4NSwwLjIzNDg2ODQ0MTMxNTAzOTI2LDMuNDI3OTczNDMyMjUwMTIxLDMuMDQ2MzAxNTk3MTQwMzIxMyw1Ljg5NDczNTQwNDc4Nzc2ODUsMy44NDQ4MjM4ODA3MDgyNTg2LDAuMjI4NTY2ODc1NzM0NTA2NjIsMC4yMDk2MjEwNDYyMzg3MzYyCisxNyxTYXQgMTggU2VwIDEwLDM3Ni4zOTgxMjk4MTg1MTQ3LDAuMDMwMzY5MjYzOTY0NjYyOTEzLDYuNzUyMTU1ODcwNzYwOTNFLTQsMC4wMDQ4MjEyODIxMDczNTgyMDcsNDUuOTE2MTY1NzY5NDkwMjcsMzQuOTg3NzE0MjAzNjU2ODgsMC4zOTg5MjMxMDMwMjc1NDU3LDAuMDM3ODg0NDY1NDMzNjE2MzYsMC40MDE1MjY5NjUwNzMyNDU3NiwwLjAsMC4wMjAzOTU0MDQ3OTgxODQyNCwxLjc3NjA5ODcxNzYxMTYzMDMsMC4wNjY4MzM2OTQ3MDc4OTc3NCwyLjQyODE2ODE1OTUwNDcxM0UtNCwwLjAyMDk0OTg2OTIyODM1ODM2MywwLjAwNDA5NjkyODIxNDU2OTA0OCwwLjQ5NTU1MzAzNDEyNjk5MjUsMC40NDU1NDY5OTM3NTkxMzIyNiw2LjA3MzkwMDYyMTU3MzcwNyw1LjM4MDM0NjI5ODcxMzI2NSwxMC4zNDkyOTY2MDkwOTk5ODUsNi44NDcwODMzNTg3MDA5ODQsMC40Mzk1NjI3MTg1MTMwMzc1LDAuNDAxOTA0OTc1MjQxNzc2MworMTgsU3VuIDE5IFNlcCAxMCw1OTYuNDgyMjE4ODA5OTU2NywwLjA2MTY1NTMwODgyMDk0NzcwNSwwLjAwMTQ2OTQ1OTc1ODg1MDYwMDIsMC4wMTAzMDc4MzA4MzMwMjMxMDQsNzUuMDQwNzc3OTE2NTM3MTQsNTYuNzkzMDcxMDEzMjAzMTQ2LDAuNzQ1Mjk4NDIwMTYzMjIwOCwwLjA3NTA1OTk5NjAzMjUwNzg5LDAuNzQ5MTEwOTM5MjU4MjA5MiwwLjAsMC4wNDA1NTc5NTk2OTk0MzQ0NywzLjMwOTA4ODE4NjE5Mjk2MiwwLjEzMzA5NzYzMzI4NTI5OTksNS40OTUyNjU2NjAxNjc5NjRFLTQsMC4wNDE4MDEyMDM3NzI5MjUyNzQsMC4wMDg2MjIyNTE5MzY5MTAxMTEsMC45MzI2NjU2Mzc1NDk3MjY2LDAuODMzOTQ1NDUyODc5MjA4MiwxMC42NjEwMTM0MDE3OTcsOS40MTI1MDk0NzY4NjA2MiwxNy45ODUxOTgxMTk3OTYyNzYsMTIuMDY5NDI1MzU1MTcxMzksMC44MzM3Mzc2MDYwODYwNjY1LDAuNzU5ODI1NjAwMjk3MDgzNgorMTksTW9uIDIwIFNlcCAxMCw5MzguNjc5MzM3ODM2MzY4NSwwLjEyMzIwMjY3OTgyMzk3MjM3LDAuMDAzMTM2MjA1MjY1MDYyNDMxNiwwLjAyMTYxNzY1NjIyMTA2MjMzOCwxMjEuNTMzMjAxMjU3NDc0MjUsOTEuNDUyNjgzMDU2NTQ4MjcsMS4zNzYwMzQ1OTg0NTYyNTUsMC4xNDY0MzMyNjQ5NjIwNTE3LDEuMzgxMDM2OTE4ODEwNTAzNCwwLjAsMC4wNzk0MDk3NDkwOTE2NzI0Niw2LjA4ODgyMDE0MDgyMTg0MiwwLjI2MDk3NDc1MTI3ODgzNzgsMC4wMDEyMTU0MTIxOTk3MjE5MzYyLDAuMDgyMTI3MjU1OTE5MTU5MTksMC4wMTc4MDA2NzkxMzY3MDY3NzgsMS43MzQyNjc5MzM0NDQ2MzY3LDEuNTQyNDE5MjM5NzM0NDkyMiwxOC41NDc3ODcyNjQ5MDc0NTYsMTYuMzE4NDA3NTY5MjI3MjE1LDMwLjk0MTkzOTUxMzY0MDUzLDIxLjA2NjM0MTE2OTE0ODUzMywxLjU2MTk4MDYzMjk2ODA3NTksMS40MTg0OTg1MTM3MDU4NTc3CisyMCxUdWUgMjEgU2VwIDEwLDE0NjEuMzMzMDY4Mjk5NzA0OCwwLjI0MjcyOTIyOTQ3ODkwMDcsMC4wMDY1Nzg0NzM1OTY5MzI3NTEsMC4wNDQ1Njg4MjYwMjM2OTIyNiwxOTQuNTIzNjE2MTQ5MTY3NCwxNDUuNzIwMzE1NjI5NzAyNzIsMi41MTM0NjE4NTU3ODA3OTg2LDAuMjgxNzcwNzU3NjkxNjEyMSwyLjUxODY1MjY5ODEyNjExLDAuMCwwLjE1MzM0NDUwNDg2MzY0MTgyLDExLjA3MzgyOTE3NzU0MjQ1OSwwLjUwNDY4NjQzNjM2NjQyMDYsMC4wMDI2MzM5NjEzNDk4MDEzODQsMC4xNTkxNTU3MjU2MjEwNjQyMywwLjAzNjEyODQwNzMxMDIxMTkxLDMuMTg5NTY4MDc3NDc2MzY3NSwyLjgyMjAyMzkxMzA2NzkwNDYsMzEuOTg3NDA2NDcxMjU4NjYyLDI4LjAzNDI1ODk0NjkwMzk0Myw1Mi42NjU3NTEzNjMxMzcyNSwzNi4zOTkwMzE4ODAwODU2NDQsMi44OTM0NTY0Mjc3ODM0MDk2LDIuNjE3NTcxNTQxMjUwNDQKKzIxLFdlZCAyMiBTZXAgMTAsMjIzOC42OTMzMDEzMjYzNDgsMC40NzIxMzUxNjQzODU4OTk3NSwwLjAxMzU4NjQ4ODEwNjM4Mjk3MSwwLjA5MDQ5NTA4NzI2NDk4ODI0LDMwNi40MDM2ODczMTAxNjg2NiwyMjguODUzNDM1NTY0OTExLDQuNTQ1NDgxMjA1OTYzNTM4LDAuNTM1NTE0NTMyODYwOTAzOCw0LjU0NzE0MDYyNzM5MTY2MywwLjAsMC4yOTI0NTMwNDIwODM1Mjg4LDE5LjkxMTYxMTIxNzA1NDE2MiwwLjk2MzkwNjU5NDE0NzE1NTQsMC4wMDU2MDUyNjA0MDIwODc1MSwwLjMwNDY0NzUwNjA4MDAxNzg0LDAuMDcyMjE3ODM4MDUxOTk5MDksNS44MDU4OTkyNTE3ODU4NDY1LDUuMTExMDc0MjIxOTgzNTUyLDU0LjY1MjUyOTQxNTQ2MTU1LDQ3LjY4NTE2ODUwNjkyOTcsODguNTM3NjYzNTQzNjA0NDcsNjIuMTg2MTA4MTI2NzE4LDUuMzAzMDU1NzczNzU4MDU1LDQuNzc2OTA4OTI3ODE3MjkyCisyMixUaHUgMjMgU2VwIDEwLDMzNTIuMTMxMTY5NzM5NTI5NSwwLjkwNzYyMDEzNzk4ODc4ODMsMC4wMjc2Njk5Mjk4MjQzMzAyNiwwLjE4MTIzODY1OTIwMzQzMjA3LDQ3Mi4xOTIzODU5MDQ3NDg0NSwzNTIuMzExMDY2OTg4OTA4Myw4LjE0MTI5MDcyNDc5MzU2NywxLjAwNjI5MTA4NTk3MTIyODgsOC4xMjg3OTE0MzQ2Njc5ODcsMC4wLDAuNTUxNDQyMDE2NDQxMDY5NywzNS4zNzkxMTg1NTIyODE5MTYsMS44MjAxMTI0NjE3NDA2NjM3LDAuMDExNzM1MTQ3MDA2OTI0NzgsMC41NzY2MjAwMzIxOTA1NzI3LDAuMTQyMzg5ODE2NTU0MTgwOTUsMTAuNDYyMzUzNTM0ODY4NDI5LDkuMTY1NjgzMjE4MjE3NzgzLDkyLjM4MTc1NjEzNDE3ODA2LDgwLjE2NzkwNjQ5MjA1NjAzLDE0Ni41NjkwMzAwNzc5NDY1NCwxMDQuODE1MjY0MTU3MTg3NDYsOS42MTc1OTc0MjQ3ODMyNTQsOC42MjA4ODcyMzU4MjkyMTIKKzIzLEZyaSAyNCBTZXAgMTAsNDg2OC43MjIyMDMyMjM5ODIsMS43MjU3MTM5NDgyNjgyNzUzLDAuMDU1NjQyMzYwNzE1OTYyMzgsMC4zNTg1MDExMTI1Nzg1NzE2NSw3MDYuODczNDg0NDI5Mzc0Nyw1MjguMDU1MjYzMDI0NjE4NywxNC40Mzk4NTk5Nzc0Mzk5MjUsMS44NzExMzMyNTI2OTQ2ODAyLDE0LjM4NTU3NjkxMzM4Mzk3OSwwLjAsMS4wMjg4NjA1MjE5Mzg4ODYyLDYyLjAzMDk0OTI2NzQ4MywzLjQwMDY2MTM4MTYzNzEzOTYsMC4wMjQyMTExNzA2MDg4ODYzNSwxLjA4MDE1NjI1MTMwNjgxMSwwLjI3NzI4OTQ4OTUwNzgwMzk3LDE4LjY1OTE0NTY1MjAxNzU0NiwxNi4yNzEwNDU5MzQxOTk4NzIsMTU0LjEyNzA2NjYzMTU4MzMyLDEzMi44MjgzNzA1NzQ3NTE1NywyMzcuODQzMTgzMTg1NDk1OTIsMTczLjY2OTAxNDQwMzUyMTQsMTcuMjUyODEyMDkwMjA1MDQsMTUuMzc0MzQ3OTAxNTgzNzQzCisyNCxTYXQgMjUgU2VwIDEwLDY4MDkuOTUzMjAyMTc2MTQxNSwzLjI0NjM2NTU4MjkwMjQ2NiwwLjExMDU4OTE3NjgzOTk0MzQzLDAuNzAxMDgxNzAxMTc5MTE3OCwxMDIwLjI3MDM1OTc1NTE1Miw3NjQuOTkxODUyNzkxMDU5NywyNS4zNDIyNzczMjY1MTEzMzYsMy40NDM5NzQ3OTgzMzA0OTIyLDI1LjE3NzYyMDEwOTY1MDE0LDAuMCwxLjkwMDEzMzg3OTE1NDI5MiwxMDcuMDMyODc2NDAzNDIwNDMsNi4yODkwNTY1NjcxNDEzNzIsMC4wNDkyODY5MzA2NDgxNjY3NTYsMi4wMDM0ODA4MDI0MzY5MzgsMC41MzM4MzU1MDI3NzYwMjE3LDMyLjkwMDczMDAzMDUwMTksMjguNTY1OTg0NzMyOTYzNTkyLDI1Mi44OTQxMjU4MDE5NzA1NywyMTUuOTgwMTg2NTI3NjY5OSwzNzYuMDAyNjM5MjA5MzI1MywyODEuNDE3NjYwMDIxMjg2MzQsMzAuNTc2NDk0ODIwMzg5MzUsMjcuMDQ3NDM0OTI4OTkzNzU2CisyNSxTdW4gMjYgU2VwIDEwLDkxMjYuMTkyMDQ2MTg3NTUyLDYuMDQxODQ1NDE2MjIxODQ2LDAuMjE3NDA5OTQ2NDgwNzkxNDYsMS4zNTY1ODUxNTM2Nzc0MTU2LDE0MTEuMTQ3OTg5MTk0MTIxMiwxMDY0LjQ4MzkyNTM4MTE3MjksNDMuOTQ0MjE5MzcxNzYyNCw2LjI3NDY0OTU5Mzk5NDAyMyw0My41MDIyNjAwOTI2MTk1MTUsMC4wLDMuNDczNzYxMjI2OTk2ODY1LDE4MC45OTAyODg0NzgxNTgyMiwxMS41MTI2Njg2NzU1OTAzMiwwLjA5OTExNjcwMzQ0NDQxMDc5LDMuNjgwMjQ4MTAxODg4MTM5LDEuMDE2ODA3MTUyNjYwOTksNTcuMjQ3NzkxMjMzMTAxOTE0LDQ5LjUxMzQ2NTIwMTk4ODc1LDQwNi4xMzk1OTkwNzUyNjk4NywzNDIuNzQ0NDMxNzU3NjIxOCw1NzQuODkwNDUzMzQ4NzY2Miw0NDMuMDc3OTgxOTk2NjAxODYsNTMuNDI2NDY3Nzk5NDk2NTY0LDQ2LjgwNDk0MzMwMzY0MTQ2CisyNixNb24gMjcgU2VwIDEwLDExNjk3LjQ1NDkyNDA3MzUxMiwxMS4xMTc4NzcwOTQzNTQ2OTgsMC40MjI5NzE4MzM0NDY1NzMsMi41OTg2NjU4MDIyMjI0Mjk0LDE4NjQuMjY4NDk0MDc4NjQyOCwxNDE3LjQyNzU5ODc3MDA0ODcsNzUuMTA5MTY2NjIyNDk2NDYsMTEuMzA5MzAzMTAzMjE2Njc4LDczLjk5MDY1MzA0NjEzNzU4LDAuMCw2LjI4MzExNzMyMzkwMzEwMSwyOTguMTgyNTg2MjY0MjM4MzUsMjAuODQ5OTA2NDY5MTU3MTcyLDAuMTk3MDc5NTA5NjUxNjcyMjYsNi42OTMzNDk1MjkwMjkzNywxLjkxNjg4NTQ5MTY3Mjc4NCw5OC4wMDg0NTE1MTgyOTU3MSw4NC41MDMyMjc5MjM4Mzk4Nyw2MzQuNTk5ODc1NTk3NjQ2OCw1MjcuMzkyNzU4MDMwMTE2Myw4NDMuOTYzNjk5MDEyNzMyNiw2NzIuODk0Njg1NTYwMDY3Nyw5MS43NTEwNzA3MTM1NjgwNSw3OS4zMjgzMjQ3NjQzMjk3OQorMjcsVHVlIDI4IFNlcCAxMCwxNDM2NC45OTc1NTA5NjgyNDMsMjAuMjAzMzM3NDA3MzQ5MDYsMC44MTQ0OTYxNjg1NDEzMzQ5LDQuOTI5MjQxMDE1NTE2OTkzLDIzNTMuMzIwODA2NzE0MzU1NSwxODA1LjM3MTU1NzgzMDc1MzMsMTI2LjExMDAyNzMyNTQ5NzksMjAuMTM5NzEyNDI3NDE0MDQzLDEyMy4zODI1MjQxMTQzMDQ4NiwwLjAsMTEuMjMwNzI4OTQzMTM2MDA2LDQ3NS4xNzcyNzg2MjczMywzNy4zMTM4NTgxNTIyMTA5MDUsMC4zODc3MDI3MzYzOTk0MTU2NiwxMi4wNDM0ODAzNTY1MDc1NTEsMy41NzY4MDczODQ0NTc3NzU1LDE2NC40MDI2NTg3Mzc5OTE5NywxNDEuNDc2MTkyODc0NjgwMzIsOTU4LjM1MTI5MzIxNTY2OTgsNzgxLjYyNDAyMjM5NzQ0NTksMTE4Mi45MzkzNTEwNTYyMjE1LDk3OS4wMTczMTY1NjE0NTAxLDE1NC4yMDc4MzYyMDU2NTUzOCwxMzAuOTMyNDE0NjE5ODM1NTMKKzI4LFdlZCAyOSBTZXAgMTAsMTY5NzQuNjg5MTgyOTgxOTcsMzYuMTg4OTcyNDc4MDM1ODEsMS41NTI1MDg3MTk2NTQyNDEzLDkuMjU5MjI4MjE1NTQ2NTg1LDI4NDguMzMwMDMyNDI5MjY1LDIyMDUuNDE3MDM5NDYzMzE5NywyMDcuMTA3NDgxMjI1OTcwNDUsMzUuMzY4NDI4NjgzMzk5MzksMjAwLjY3NjUxMzIxNTY3Nzk0LDAuMCwxOS44MDMxMjkwMDIyOTk3NzMsNzI2LjgwNDMyNjY1NTMyNjMsNjUuODczNzk5MDAzNjUyMTIsMC43NTUwOTU5MzYwOTIwODE4LDIxLjQxNDQ0Njc0MjM5NzAyMiw2LjYwNTAxOTMzMzY3NDkxNCwyNjguNzcxOTEyMDAzNTAwNiwyMzEuMjY1NTQ2MzU0MDA4ODUsMTM4OS44NDQ5NzE3NjU0NzE5LDExMDkuNDMwNjgyNTE4NzM0MywxNTc4Ljk5OTc3NDQyNzMyMzIsMTM1OC4wNjQyNzk0MTUzOTUsMjUyLjMwNTkxNzI0ODU4NjIsMjA5LjAxNjUwNzE4MzI5MTM3CisyOSxUaHUgMzAgU2VwIDEwLDE5NDA4LjQyMzc5NDc1MTY1Niw2My43MjcwNzE4NzEwMzYzOTQsMi45MjgyMzgyMjk5Mjg4NTM2LDE3LjIxODk1MjY1MDM3ODU0NywzMzIzLjA1MzQyNzg5MzEzMzYsMjU5NS45NjYzMTA4NzQxODYsMzMwLjk0ODU2NjM4MjE1NzE0LDYxLjA3NjQzMTA4OTE1MTEzLDMxNi40MDMxOTgzODI2NjEsMC4wLDM0LjM1NTYxNjk3NjAyMzA5LDEwNTkuNzkyNjQzMDMxMzIxNiwxMTQuNDE1NTE5Mjg2MzQyMjMsMS40NTY1MzczNTMzNzk0NDY4LDM3LjU1OTUyMzIyMTE4NDM0LDEyLjA2MjU3OTA2MjY2NjQ4Nyw0MjUuNTQ2MjQ2MzQyOTA5OTcsMzY3LjA0MDk2MzA0NjgwMzEsMTkyNi4yNTI1MDUzNTU3MjY3LDE1MDMuMDMyODI0MDE1ODQzNSwyMDA5LjEzMjk4MDcxOTA1NzMsMTc5My4yNjE3NTUwMzY0MDgsMzk5LjM0ODY3MTI4NTY4ODIsMzIwLjM4OTU0MzA0OTQ1NjQKKzMwLEZyaSAxIE9jdCAxMCwyMTU5NC42Mjg0MzcyNTgyNjMsMTA5LjkzMTgzMjU2OTExNzY2LDUuNDYxMzkzODczODQ0ODUyLDMxLjY3ODQ4MTMzNzg5MzU4LDM3NTkuMDkxMjYwNjE3MDY5NiwyOTYwLjU4NTcwNDM0NDA2NzQsNTExLjYwNTI0MzEwMjQzMzYsMTAzLjMwNTEyMzAwNjA3NTk2LDQ4MC40ODQ3MTMxMjUyNjE5LDAuMCw1OC40Mjk0MjYwOTc3MjQ2NDQsMTQ2Ny4xNDM0OTkyMzA4MDQzLDE5NC44MTU4MjkxNjgzODEyNCwyLjc4MzAzOTcyMzgxNTExNDYsNjQuODE4MTk2NDMwNjY4MzIsMjEuNzU5MjgyODI1MTY3Njc0LDY0OC4xODMwNTcyOTU1NjEzLDU2Mi4xMTY2NDk4MTQxMDgxLDI1NDYuMDMzNzMwNTY3MTY2NSwxOTQyLjk3ODc3NzkyNDM2NjgsMjQ0Ni41OTY1NDU2MjAxNDQ4LDIyNTguMjgxMzMwMzQ2Mzk2LDYwNy40MTMzOTk1ODk5NzIyLDQ2OC41NjM1MTI2OTM4MzUyNgorMzEsU2F0IDIgT2N0IDEwLDIzNTAzLjE5ODUzNjg2MTc1LDE4NC45Mzg3NTAyMjU4NjI1LDEwLjA2MTI1NDUwNDA1NTQ5OCw1Ny41ODY4MTY2NTgwNjg0Niw0MTQ2LjQyODYyMjIzOTM4MiwzMjg5LjE5Nzc3ODU0MzQwOCw3NjAuNzU1Njg0MTYyNDQwMywxNzAuMjk3NzAwODgwODQ0MjIsNjk4LjcyMjUxMjI0MTg3MjYsMC4wLDk2Ljk3NTcxMjIwMjQyMzgxLDE5MjcuNTY2NDg3MTE0Mjc0NywzMjMuNzA2MDk2MjMyOTgzNTUsNS4yNjY3MzUwNTYxOTAzOTI1LDEwOS43MDQ1ODkwMTI5MDAzNywzOC42OTM1NDIzNTE3ODU0OCw5NDQuMTQ3OTQzMDUwNTcwNiw4MjUuODEyNDQ0ODczMjYwMSwzMjEzLjIwNzU1OTE5NDE4MiwyNDAzLjAzNDMzNjY0MDIwMjYsMjg2Ny42MjM5OTMwMDU0MjQsMjcyNC42NjQ0MDM1MjY4OTIsODgyLjQ3NzA1MTU4NTM4NzIsNjUxLjE5MTQwNzc5MjAxOTIKKzMyLFN1biAzIE9jdCAxMCwyNTEzNC4wMDQ5NDk3ODMyMiwzMDEuNzgwNjA5NDAzMTk1MzQsMTguMjgwOTY1NjQzNTkwNTQ1LDEwMy4yNTQxMjk4ODQ5NjU5OCw0NDgxLjg3MjgyMzE3NjgyOCwzNTc3LjM4MTc3MDM4MzMxODMsMTA4My4wMzU3MDU5NDk5NTk1LDI3Mi4wMzYzNTA4NTM1NzMzLDk2OS4yMjg5ODEwOTA4NDI4LDAuMCwxNTYuMjM0OTQ4NTE3OTQ5NDgsMjQxMS4yNzM1MjQyNzIzNTQ3LDUyMi4wNjk1MzU0NTY3MjQyLDkuODY3NDczNzc3NjM3NTc0LDE4MS4zNzQzOTExMTgyNTI0LDY3LjY0NDMwMTY1MjQ0MzczLDEzMDkuOTI4ODU1NjE5OTQ3LDExNTguNTE3NTA2MzU5MTg3OCwzODg3LjI5OTgzNTUzODE2NjUsMjg1Ny4wNjI4MzA4NjU2NDMzLDMyNTUuMzExNTM0NzU0MTU5MywzMTY4LjQ5MTM4OTA5MDgzODgsMTIxOS43NzcxOTY5NDQyNzE1LDg1OS40OTQxOTQzODY4MDEKKzMzLE1vbiA0IE9jdCAxMCwyNjUwNS4yOTkzMDY1MTIwNTcsNDc0LjcyOTU0NTk4NTgyNjMsMzIuNjk2NTAzMjMwMTMzODQsMTgyLjE1NjA3MTMxOTE2MzY2LDQ3NjYuODczODQzODM4Mzg1LDM4MjQuODg0NDkyMjMwMTczMiwxNDcyLjEwMDYzOTgyMzQwNSw0MTguNTMwOTg2NTkzNjg3NywxMjgxLjA3NTIyODA2NjYxMDIsMC4wLDI0Mi45MjIxNTMzOTc1Nzk0MiwyODg4LjUyNDA5OTUyNjIyNSw4MTIuNDk1NzA3NDIyMTA3LDE4LjI4OTAzMTA5NDMwODIxNCwyOTEuNTY2MjU3ODU5NDcyOTYsMTE1Ljg0MDE5MzAyMDAzNSwxNzI5LjQ1MjI4MDY4MjkyNjgsMTU0OC44MDQ2MTk4Mjg1NTcyLDQ1MzMuMTEyNzAxMjI3OTEsMzI4NC4yOTUxMjAzMDIwNDksMzYwMC4yNzc4ODM4ODA0Mzg0LDM1NzMuNjQyMTUzMDcyNzEzLDE2MDIuODExNjE3OTU5MzU2MiwxMDgwLjQ2ODE4Mzg3MDI4MjUKKzM0LFR1ZSA1IE9jdCAxMCwyNzY0NC42NzE0NTc4MjA4OSw3MTUuNDA1MzkyODY5NDIzMyw1Ny40MjY5MjEyOTk0MzMxMywzMTUuMTM3ODI3ODA1NzYyMjQsNTAwNS41NzIwMDYxMDUyNjIsNDAzNC4wOTQ3NTIxNDA0NDksMTkxMC4yNjQyOTgwMzE4MjU1LDYxNi43MTIyNTQ0MTc3NzA1LDE2MTYuNTMyMTE4NTkyODA5NCwwLjAsMzYyLjQ4MzUwODk1MDEzOTgsMzMzNi4wNjg1NTU5NjQ4NiwxMjEzLjMzNTI4MTYxMDkzOTMsMzMuNDk4MzA1MTc1OTE1Miw0NTMuNDExNTMzNDI5MjM3MDcsMTkzLjQ1NzQ0Njk1MzcwMzY1LDIxNzcuNzIzODQ0NDk5MzYzNiwxOTc1LjE0NjM5ODI0MjkxMTEsNTEyNi4wNjY3MDY2MDQwNjUsMzY3MS40MjE2OTI0OTE5Mzc0LDM4OTkuMzQ1MTc5NjA1MDk2LDM5MzEuODI3NjQ3MzA0Nzg4LDIwMDcuNDg4ODMwNzgxNjA3MiwxMzAwLjU3NzIxNzA5OTI3MjUKKzM1LFdlZCA2IE9jdCAxMCwyODU4Mi45NTE5ODYyMzMxNiwxMDI3LjI3ODM1OTMwNTY2MDIsOTguNzYwODE2Mjk2MjU1MDMsNTMyLjM4MDc1NDY5NDY3Niw1MjAzLjM1ODQxNjYzNTI4Myw0MjA4LjgxNjI2NDUyODY3NzUsMjM3Mi41OTI1NzE2NjExNzYsODY2Ljg1NzQwODExOTQzNDgsMTk1NS44MDE5ODk0ODE5ODg0LDAuMCw1MTYuNzM3OTAwNzkzMTI0OSwzNzM5LjQ5MDc4Mzk2NDA1NiwxNzMwLjg0Mzg1OTI1MTcyMDcsNjAuNTQ0MzY5NDAyNTY2MzIsNjc4LjU4NzMxMDc1ODYyNDUsMzEzLjQ0MTQyNjAyOTk5OTcsMjYyNy43MzM5NDcwODA1ODksMjQxMS43MDM3ODM3MDUxMTg0LDU2NTIuODMwMzcwMzg2MDI2LDQwMTIuMTE3NTk0MDkyNTQ3Myw0MTUzLjU5NjEyNzM1NDM1OSw0MjQwLjkwMDM5NDE3MTAzMjUsMjQwOC45OTY3NzEwNDE2ODY4LDE1MDguODA2OTE3NzQ5ODAxMgorMzYsVGh1IDcgT2N0IDEwLDI5MzUwLjUzNDE3Njc4MTc1LDE0MDEuNDQxMjg1NzYzMzU1MiwxNjUuNzMwMDM0OTEzNDYxNDgsODczLjUzMjAwMjU2NzY1ODcsNTM2NS45Mzg0MDgxNjgyODksNDM1My40MDg1NDMxMTQ4NDMsMjgzMy4yNTU5OTc2MDg3NDQ2LDExNjAuNTgxNzIwMzQ2ODczMiwyMjgxLjU5MDU1NDA1MjQxNzcsMC4wLDcwMi4wNDIxNTc1MTU4NTQ5LDQwOTIuMzk4MzYxODAzMzgxNywyMzUzLjA5MzYzMDcyNTkzMywxMDcuNzg1MDE3NDgwNzM1ODIsOTczLjA2MjQ3MjAyNDE3NTEsNDg5Ljk1MjYzMTY2MDkwOTUsMzA1Ni42NzUwMDMxNTQ0NDI1LDI4MzQuNzk3MTg1ODA0MzE2NSw2MTA5LjE5NTM5MzM1NzU4NSw0MzA1LjM1MTAyOTA4MjE5LDQzNjYuNjA0MDk5MDY3NTU2LDQ1MDIuNzc0Njk4MTk4NDI0LDI3ODcuMzk1Mjc3MTk0MTUzLDE2OTcuOTg1ODI5NTAxODU0MQorMzcsRnJpIDggT2N0IDEwLDI5OTc1LjQwNDg0MTE3OTI2LDE4MTcuMTY5MDE5NzM1MTU5NSwyNzAuMjI4MDI1NzE2MzY4LDEzODMuMjU5NTQ0OTQ4NTY2Niw1NDk4Ljc4NDcxNjMyNzcxMiw0NDcyLjI0NjExOTU4ODUxNSwzMjcwLjg0MjQ4OTk3MDU5OCwxNDgyLjA5OTY2NzQxMDQzMjksMjU4MS42NDY0MzYzNzQ5NDYsMC4wLDkwOS4zNDg2MDE4MzkwNzY0LDQzOTQuMjYyNjQyNzIzMDM2LDMwNTAuMTMyMTE1MzA0MzIzLDE4OC41OTU5MTI1ODc1NTU5LDEzMzMuMTE4MDY3ODQzMTA0Nyw3MzQuOTY4NDQ3MjkyOTkyNiwzNDQ5LjAzMTgyMjMzNDY4NDQsMzIyNi45OTI2MjgzMzAzOTIsNjQ5Ny4xNTkzNTc0ODgyNzUsNDU1My41MTQ2NjYyOTM4MzIsNDU0My4xMTc2ODg0NDY3ODUsNDcyMS42NDcyOTkxMTU5NSwzMTI5LjkzMzIwNzA3MzIzNTMsMTg2NC42MjEwMzQyOTI2NTQKKzM4LFNhdCA5IE9jdCAxMCwzMDQ4Mi4yNzQ0NDU3OCwyMjQ3LjY5NDcwNTUxNzk4NDQsNDI1LjkyNjg5NTg0NjQwOSwyMDk5LjYyNjkxNjEzOTgxNSw1NjA2Ljg1NzgyNzk4NzUzMSw0NTY5LjQxMzM5ODE4MDI1MywzNjcwLjg2NTA4NTU2NDk3MDMsMTgxMi4zNDI2MDg2MDUwOTY4LDI4NDkuMTMwNTc1NzExMDgxMywwLjAsMTEyNi40Mzc5NTY1OTEyNTA3LDQ2NDguMTg2MjM1MjM2MjYwNSwzNzgxLjMxMzM0NzU1MTk2LDMyMy40OTU3NDI1OTUxNzAwNCwxNzQ0LjE4MjkwMTk0MDA1OTgsMTA1My42MDc3Njk0MzMwMTU2LDM3OTYuNjc1OTQyOTYxMzM2NywzNTc4LjEwOTI3NTM1NzQ5OCw2ODIyLjMyMTE4MTc3ODk1Nyw0NzYwLjg4MDE1NDkzNTAyMyw0Njg4LjIwMDkyNTEzODUxNCw0OTAyLjcxOTE1OTgyMzU5LDM0MzAuNjI3NzUyMjI1Mjk2NywyMDA4LjAxNDY4Mjg3Mzc1NTYKKzM5LFN1biAxMCBPY3QgMTAsMzA4OTIuMzYzMTg4MDcwMTQsMjY2Ny42MTIzNTQyMDE3MjIsNjQ1LjEzODU3MTc5OTMwMzUsMzAzNi42MjA1OTg5ODgwMTMsNTY5NC40OTQ3NzMzNzU2MjMsNDY0OC41NTc5MDgyMzkzMTUsNDAyNS43MzAzNDA5ODQ0MDI2LDIxMzMuNjExMDU0MzEwMTE5LDMwODEuNjc1MzE5NzE5OTEwNSwwLjAsMTM0MS4wNzUxMzcwNTkyMzI1LDQ4NTkuMTQ1Nzk3MzMzODQ3LDQ1MDUuNzE3ODc5NjQ2ODc5LDU0Mi4yMzkzODU2NzExOTA5LDIxODMuNzc1OTA5NzM2MzU1NSwxNDQwLjI3NjQzNDcyNzQwNzYsNDA5Ny4zMzAzMjExMDY2MSwzODg0LjE3NzM3NDMwMTMwNTUsNzA5MS45NTk5Nzc5ODI3Nyw0OTMyLjUwMjM5ODk4NzQ3OSw0ODA2LjcyOTMxNTMwMTk0Nyw1MDUxLjM3OTY1MDgwMjg3LDM2ODguNTY1MjkyNzk1MTk2LDIxMjkuMjY5MTgxMjAxOTY3Cis0MCxNb24gMTEgT2N0IDEwLDMxMjIzLjU0NzcwNzIzNTQ1LDMwNTcuOTA5NTAwMzU3MTczLDkzMy42NzEyNTE2ODg0NzA4LDQxNjkuNjYxNzEzOTg4NTU3LDU3NjUuMzk1NjA4OTY4NzIxLDQ3MTIuODQxMDg4NjkxNzUxLDQzMzMuMzI3ODUxNjQ0MjUsMjQzMi42MjA2ODA0MTM0ODI3LDMyODAuMDIzMTI5MjE3ODczLDAuMCwxNTQzLjQ1ODc3NzEyNTUzNzgsNTAzMi44MDA0NzYwOTc1MDUsNTE5MC4zMTEzMzk2NDY5NzMsODg0LjYyNzk3MjY2NTU1MzgsMjYyNy4xMzQ1OTg0Mjg5OTY1LDE4NzguMjUzMjMyNzI5NDQ0Myw0MzUyLjYzNDI5NDU4MzIzMiw0MTQ1LjYzODkyMzk3NDA1NSw3MzEzLjc4MTIyOTU1ODgwNTUsNTA3My41MjMxODc3NTg2NTgsNDkwMy4xMjk4NDYxMTU3MTksNTE3Mi43Mzg1NDMyNDk3MzgsMzkwNi4wNDMwNjk1NjMwNDYsMjIzMC40Njg2NjEyMjA1ODk2Cis0MSxUdWUgMTIgT2N0IDEwLDMxNDkwLjY4NDYyNjg5MzE2LDM0MDcuMzk2NjY5MDc4Mjk3LDEyODUuOTMyNTk3NDA0MjkzOCw1NDM1Ljk3MzEyNjEwODI4MjUsNTgyMi42NjUzODM5Mjc1MjcsNDc2NC45NDk2NTM5MDEzNjIsNDU5NS4yNzMyODM4NTgzMjIsMjcwMS4zNzYyMjYyODc4NjI3LDM0NDYuNzc2OTIwMzkzNTEsMC4wLDE3MjcuMjI5MjU3NjExMjcwNCw1MTc0Ljc3MjgzODg2NTQ2MDUsNTgxMy4zNzgzNzM2NTY5MTksMTM5Ny41Mzg3OTIxMTQ2NTk4LDMwNTIuNTcyMTMzODIwMzY5MywyMzQzLjUwOTMxOTgyOTczNzMsNDU2Ni40Njc4NzkzODA1MjcsNDM2NS42MjA2NjIwMTg5OTUsNzQ5NS4xODQ0ODkzMjUxNTYsNTE4OC43Nzg2MjY3ODUwNTE1LDQ5ODEuMjc3OTAyNzk0NzI1LDUyNzEuMzk1Mzk4MzAyMjA1LDQwODcuMDY3MDMzNzkwNzI5NSwyMzE0LjEwNzIwOTcxODg1NDQKKzQyLFdlZCAxMyBPY3QgMTAsMzE3MDUuOTk5MTkxNTMzOTgsMzcxMS42NDIzNTcwMDU2Nzk1LDE2ODQuMDE2NDg5NTkzMTA4Miw2NzUyLjI2ODE3NDMxNjgwNyw1ODY4Ljg3NjczNjIzODUxNCw0ODA3LjEzMTYyMzM0ODQ2OTUsNDgxNS4zNTM1NDY3MTI5MzcsMjkzNi41MjM4NTUxNTQ5OTI0LDM1ODUuNDQ4MzAwOTU4OTMzLDAuMCwxODg5LjI5MDE3ODgxMTc0NzksNTI5MC4yNTg0ODE4NTY3NjUsNjM2NC4wNDgyNjE1MTUwNjUsMjEyNS4wOTIwNTQ1MTM0NDg2LDM0NDQuNTU5MTExMTk0MjQ3LDI4MTAuNzYwNjM1MDg3NjQ2Myw0NzQzLjcyNzM5MTAyNzkyMSw0NTQ4LjU5NzUxNzk3NTUwNCw3NjQyLjg4MzM2NTUxMzU0Niw1MjgyLjYwMjMwOTM2MjU5NSw1MDQ0LjQ4MTQyNTQxNzUxLDUzNTEuMzUyMTA4NjA5MzY1LDQyMzYuMzEzMjA5Mzk5NjI4LDIzODIuNzI4MTM5NjQ2NDQ4NworNDMsVGh1IDE0IE9jdCAxMCwzMTg3OS40NzkzODM0ODQ1NiwzOTcwLjk4MTY0NjA4MDgxOCwyMTAyLjM1MjE3NDc5OTY2MzgsODAzOC41NDQ1NTM5MDE1OTksNTkwNi4xNDM1NjMxNDA3Njg1LDQ4NDEuMjQ5NjU1NjU5Njk5LDQ5OTguMzgwMTIyMDgwMjU0LDMxMzguMDkwNTI4NDMzOTYxLDM2OTkuODI1NjAzODA2NzcsMC4wLDIwMjkuMDQ4NDYwNDM3MzUxLDUzODMuODUzNTQwNTc0MzAxLDY4MzkuODY1MDU5MDUyOTI4LDMwOTEuMzk5OTIzODg1NDc1LDM3OTQuMjg3MTg1MDQ1ODg4LDMyNTguNjA5MzMxMzQyNTk5NSw0ODg5LjUzODA5OTU5MTA1Nyw0Njk5LjQ5NjQ0NTUyMjU2Niw3NzYyLjc1NTI5MDA0MzMzMiw1MzU4Ljc1OTk2NTY3ODQ0Nyw1MDk1LjUxNjU3NzY2ODc3OSw1NDE2LjAxMjkyOTk1NzUyOCw0MzU4LjQ4ODczNjQ4Njg5NywyNDM4LjcyMzA1NzQyODYxMQorNDQsRnJpIDE1IE9jdCAxMCwzMjAxOS4yNDIxOTUyMjk5ODUsNDE4OC42MDQyODU2MzgwODYsMjUxNS4xMDcwODE3MjYyOTAzLDkyMzQuNjMzNzc3MjIwMjYsNTkzNi4xOTE0NDM5MTE0NzUsNDg2OC44MzQ4OTY1OTM1NCw1MTQ5LjQyNTQzNDE4NDQwNywzMzA4LjIxNDk0MzkyMDk5NTcsMzc5My41OTA1NDM2NDEyMDk1LDAuMCwyMTQ3LjU1MTEyMjAwNTQ5MSw1NDU5LjUwODE2NzE3NjgzMiw3MjQzLjk3NTMzMzE5Nzk3Miw0MjgyLjY5NDc1MzU3MzM4OSw0MDk4LjYyMDA1NTE3NTIyLDM2NzIuMDgyMTMxNzM2NDc3NSw1MDA4Ljc5MzUzMzY0MjcxMiw0ODIzLjE1MDU3MDQ1MDQyNiw3ODU5LjgyMTc4NTYxMjE5OSw1NDIwLjQ1Mzg0NDE2MDU2Nyw1MTM2LjY4NDQxNjUwNDIxMSw1NDY4LjIyNzM4MzI4NDEwNCw0NDU3Ljk3OTcwMzI1MTAyNSwyNDg0LjIzMzU4NzQyODMwMgorNDUsU2F0IDE2IE9jdCAxMCwzMjEzMS44NTcyODE0MzUxNDMsNDM2OS4xMDMxMDU5NDkzODUsMjkwMS45ODM2NTY5Mzk5MDEsMTAzMDUuMDc2MjQ1MjQ1NzcsNTk2MC40MTgyMjc5MDUyMTIsNDg5MS4xMzMyNDQwODg5MDcsNTI3My4zNDc1NDM5NjIxNjEsMzQ1MC4xMjE2OTYzMTg4OTksMzg3MC4xMDM3Mjg0OTYzMzksMC4wLDIyNDYuNzQ5NDA1MzAzOTQ2Myw1NTIwLjU0NjM1ODQwNzkzNyw3NTgyLjY5MjkyNjE0NDg3NSw1NjQxLjgwOTc0NDE0NDczNiw0MzU4LjQwODY4MDE0NDkzNyw0MDQyLjc3MjkyMDA4NDM3MzMsNTEwNS45MTExOTk5ODIyODEsNDkyMy45OTQ2ODI3OTQxNzg1LDc5MzguMjk0OTMwMDE5ODkyNSw1NDcwLjM1ODU0OTg0MDU1Miw1MTY5Ljg3MTUxMDI4OTI2OSw1NTEwLjM0OTU0MjM0MjY4LDQ1MzguNjg0NjYwODgxMjU5LDI1MjEuMTEzNjU4MjQ2MDc5NQorNDYsU3VuIDE3IE9jdCAxMCwzMjIyMi42Mjc3Nzc4NTMwODYsNDUxNy41MTc2NDM2OTgyNSwzMjUwLjQwMjYyNTcwNTcwMjYsMTEyMzUuODMzMjA0MDU4NDc2LDU5NzkuOTU1MTU5NjIzNTk4LDQ5MDkuMTU4MDU2MjI3NTk5LDUzNzQuNTY5NDk5NDcwNTIsMzU2Ny40NDU1MTUzNDk3MzgzLDM5MzIuMzI2NTA4NjM5MTYwNywwLjAsMjMyOC45ODgyNTg1NDI0NDU3LDU1NjkuNzI5NjAyMjUwOTM4LDc4NjMuNzcwMjE0NjIyNjc5LDcwODIuMTc2NDAzMDc0Njc1LDQ1NzYuOTQ5MzQ4NzQ3OTk0LDQzNjcuNTc5OTE5MzUyODc1LDUxODQuNzUwOTc0NjUzODg2LDUwMDUuOTQ2MjQwNjEwODg5LDgwMDEuNjY4ODIwOTcyMDI1LDU1MTAuNjg4NjEwMDY1NzU4LDUxOTYuNjE2OTUzOTkwMjE3LDU1NDQuMzEwNDM4NTc2NDgzLDQ2MDMuOTY3MTExMzU5NTA2LDI1NTAuOTM2NjU2Njc1MjcyCis0NyxNb24gMTggT2N0IDEwLDMyMjk1LjgyNjE3NDU1MjE5Niw0NjM4Ljc2NzMwMDYxNTU4NCwzNTU0LjgzMTg2OTU0NDYxOCwxMjAyNy45NDQ3NzE2OTE4NDgsNTk5NS43MTYzNTI4MjU4Myw0OTIzLjczMjIyOTU4NTg5OCw1NDU2Ljk4MjkyODA0MjE2NiwzNjYzLjgwNDE5ODMyOTEzNywzOTgyLjgwNDQ2MDk3MjI0NywwLjAsMjM5Ni42NzQ4ODM5MTQxNTgsNTYwOS4zMzAwMDM1OTE3MzUsODA5NS4yNTgxNjAxMTI5NjIsODUxMy4yMzA5MjA0NDE2NTQsNDc1OC43NjgxNDA2MTI0NjgsNDY0Ny4xMjQ4NTUzOTAxOTUsNTI0OC42MDkxMjAzNDczMDIsNTA3Mi4zNzYwODA5NzYyOTYsODA1Mi44MTc0NjQxNzA0MTQsNTU0My4yNjQ0MDY4ODA2ODIsNTIxOC4xNzExMjI0Nzc1ODksNTU3MS42ODUxMjE1Mzg0MTUsNDY1Ni42Njk3NzI1MjQ3LDI1NzUuMDE4MzY0NTg2Njk5NgorNDgsVHVlIDE5IE9jdCAxMCwzMjM1NC44ODk2MjQwOTY4Miw0NzM3LjM1MzUzMzM4MTg2MywzODE0Ljg4MDc3MjQ0NDY1MywxMjY5MS40MjY5OTM5MzMwNDIsNjAwOC40MzgzNDgzOTQ1NDcsNDkzNS41MjEzODIxMjkzMjksNTUyMy45MjYxMzU2Nzg5MiwzNzQyLjU1NDM5NTU5NjEwNjYsNDAyMy42ODQ1NzE5ODQwMzEsMC4wLDI0NTIuMDgzNzkwMDkyNjc2Myw1NjQxLjIwMjM1ODc3NTIyOCw4Mjg0LjgyMzAzMDQ5NTk3NCw5ODYxLjgwNjYyNDU3Nzc0NSw0OTA4Ljc3ODE5NTk3MzUyNzUsNDg4NC4zNTcwODY3MTUwMDIsNTMwMC4yNTIxOTkwMTk3NDksNTEyNi4xMjg0ODA5Nzg5MDIsODA5NC4wODgyMDg3MDU5OTcsNTU2OS41NzE5MjQ0MzIxMzM1LDUyMzUuNTQ1NTEzMzg1OTIyLDU1OTMuNzUxNjkwNzcwOTg0LDQ2OTkuMTU5NjU4NDg3MDE3LDI1OTQuNDQ2MTY2MzQxOTczCis0OSxXZWQgMjAgT2N0IDEwLDMyNDAyLjU4MDY5NTEwMTQ5Myw0ODE3LjIzMzIwNjY4MzA4OTUsNDAzMy4zMjM2MzQzMjE2OTE4LDEzMjQwLjY2MzEwMDY2MjE2MSw2MDE4LjcxMzU3OTEzMTQxNyw0OTQ1LjA2MjYyNzcwOTA0LDU1NzguMjEyNzAwMzMxNzQ1NSwzODA2LjY3ODU1NDM2MDM3MzMsNDA1Ni43NTM1MzIxOTAwOTc4LDAuMCwyNDk3LjI1OTk4NTgzOTU0MSw1NjY2Ljg1MjI4MDI3NDA1OSw4NDM5LjM5NTUxODg5NjIwNSwxMTA4MS4yMTM2MzE4MTk4NTUsNTAzMS43Njc2OTc1NDU5ODMsNTA4My40NzI3NDc3MDkyNTgsNTM0MS45NzM3OTY5ODE1MDIsNTE2OS41NzA1NDQxNDc3MDUsODEyNy4zODg1NDA3MzcxNjEsNTU5MC44MTgyNTU1NDY3MDcsNTI0OS41NTYwMDIzMzUyODgsNTYxMS41NDM1MzA4NzcwODEsNDczMy4zODY3MTI0OTA5MDc1LDI2MTAuMTExMTExMDY2OTMzNQorNTAsVGh1IDIxIE9jdCAxMCwzMjQ0MS4xMTg4NDEwODI1MjcsNDg4MS43OTM2OTkxODUyNzMsNDIxNC41NTAwNTg3MjcyNzcsMTM2OTEuMzgxODkyODE5NjU4LDYwMjcuMDE4ODM0NjgzLDQ5NTIuNzg5Nzc4NDU4MDEsNTYyMi4xODgxNzE5MjA0ODIsMzg1OC43NTYyODE3NDk2NjEsNDA4My40ODU4Nzc4NDQ1Mzg3LDAuMCwyNTMzLjk4NjMxODg4NzY3OCw1Njg3LjQ5Nzc4OTAzOTEzNjUsODU2NS4wNDE1MTUzMDI3MjQsMTIxNDkuNzc5MzU2OTgyOTM0LDUxMzIuMTM0OTIxMDgxNDk4LDUyNDkuMTY0MjA3NTcxODc4LDUzNzUuNjYwNTAxNTk2NDAyLDUyMDQuNjU0OTIzOTE5NTAzLDgxNTQuMjYzOTI0NzUxNjE5LDU2MDcuOTgxODk3NTU4Njg0LDUyNjAuODYwMDQzNDg1Mzg0LDU2MjUuODk0NzI1MzAyMjY0LDQ3NjAuOTQ1MzMyMTE5MzEyLDI2MjIuNzM5NjI5MTk1NTA0Cis1MSxGcmkgMjIgT2N0IDEwLDMyNDcyLjI4NjYwMjczMzcxLDQ5MzMuODgxMTA5NDE4NDc1LDQzNjMuNTIyMzY0ODk4Njg0LDE0MDU4Ljg4MDM4Mjk0ODY4LDYwMzMuNzM3MDE4NjY4NzU1LDQ5NTkuMDUyMDc1MDk0NDA4LDU2NTcuNzg2NjA1MTk1MzYyLDM5MDAuOTcwOTAzNTg3NDI1Nyw0MTA1LjA4ODI2OTg0NTA3MDUsMC4wLDI1NjMuNzgwNjI1NDUzODQxLDU3MDQuMTIwNjkzNTU3NTU0LDg2NjYuOTQwNjIyOTgxODM0LDEzMDY0LjQ3NTg3ODYxMTY0Nyw1MjEzLjc1NjMwMTkzMTI0NSw1Mzg2LjExNzUyMTE3MDIwMSw1NDAyLjg1MjM5MjgyOTY2NSw1MjMyLjk3ODkzNDYzODk1Niw4MTc1Ljk2MjMzMzM4ODM1NSw1NjIxLjg1Mjk5MzAzODk2OSw1MjY5Ljk4NjE5MTkwOTQ4OCw1NjM3LjQ3Njc1MDMwOTQwOSw0NzgzLjEzMTM3NDU3NTY4NCwyNjMyLjkyMDY3NzQxMzE0NgorNTIsU2F0IDIzIE9jdCAxMCwzMjQ5Ny41MTU3ODE2Njc1NzUsNDk3NS44NTU5MjEzNTcxMyw0NDg1LjE0OTQyMDExMDc4MiwxNDM1Ny4xMDgyMzM4MTUwMDgsNjAzOS4xNzU5NDg2MDg3ODg1LDQ5NjQuMTMxMDU4ODc0NzM2NSw1Njg2LjU5Mzk4Mjk2Mjk2MiwzOTM1LjE0Njc3MzU1MzM4Myw0MTIyLjU0NDAzMTY1OCwwLjAsMjU4Ny45MTY0Nzk2NTQyMjYsNTcxNy41MTExNjE5MzM5NDQsODc0OS40NDgwOTk4NDY1NzksMTM4MzMuOTYwNzA3NTk2NzU0LDUyNzkuOTY1NDAwMjY1NDY4LDU0OTguNzI5OTEzMTI3ODk5LDU0MjQuODAxNjY5NzM5NDc4LDUyNTUuODQzMzQyNjU1MTEyLDgxOTMuNDkwMTg3NjM3Nzk5LDU2MzMuMDY5MTYzNzAzNTQyNSw1Mjc3LjM1OTM1NjMwNzg4NCw1NjQ2LjgyOTg3NTQzODAyMiw0ODAwLjk5MzkwOTIxNzYyNywyNjQxLjEzMDU2NjE3MjI1NworNTMsU3VuIDI0IE9jdCAxMCwzMjUxNy45NTY3MTg1OTc3Nyw1MDA5LjY1NzI4NDgxOTU1Miw0NTgzLjk1MzI2Mjc3MjI5NywxNDU5OC4yODg2NTAwNTk3ODksNjA0My41ODMxMDA1OTMzMjUsNDk2OC4yNTM2Njk4ODA1NTksNTcwOS45MDQzMzMxMDMyNTgsMzk2Mi43OTI2Nzg4OTg2MTgsNDEzNi42NTE0Mjg0NzU1MDYsMC4wLDI2MDcuNDUwNDQ1MDgyODY1LDU3MjguMzA0MjI4NTUyNDQ1LDg4MTYuMTgyNTc1MTAzNDk0LDE0NDczLjAwMTgxOTE0OTMyNSw1MzMzLjU3NjU2Nzc5Njg3OCw1NTkwLjk1OTc1Mzc5MzA5LDU0NDIuNTIyOTAyOTM5ODQxLDUyNzQuMzAzMjg1MTEwNzMzLDgyMDcuNjU4MTAyNDc3MjYyLDU2NDIuMTQ0MzcxNjgwMDQ4LDUyODMuMzIwOTc4ODYzNTg3LDU2NTQuMzg4NDg5ODg5Nzk0LDQ4MTUuMzc5NjQwMDAyNDYxLDI2NDcuNzUzNjAyNjMwMjI5Cis1NCxNb24gMjUgT2N0IDEwLDMyNTM0LjUzMzk3OTAxNzYyNiw1MDM2Ljg2NzEzNDI2NjA5NCw0NjYzLjkyMjY1MDU5OTkxNCwxNDc5Mi44NTI3NDk2Njc1LDYwNDcuMTU3NDkwNzUzNDY5LDQ5NzEuNjAyODU0NzYxNDc2LDU3MjguNzY5NTUxMzc2OTk2LDM5ODUuMTQ3MDExNjU1MTk4Niw0MTQ4LjA1NjY4OTgzNjI2OSwwLjAsMjYyMy4yNTE3ODY5MDE2NjIsNTczNy4wMDk3ODQxMTY0ODUsODg3MC4xMjQzNDQ1ODQ5NzgsMTQ5OTguNjc0MjM0NDI1OTMsNTM3Ni45MzQ1NDgzMTUxNDUsNTY2Ni4yNjk2Mzc3ODM3NjEsNTQ1Ni44MzYwNDQwOTY5NzcsNTI4OS4yMTIyMTYzMjg4NDcsODIxOS4xMTg0NzA3ODkzMiw1NjQ5LjQ5MjYxMjcwNzc3Niw1Mjg4LjE0NTM5MzY5MzU5Myw1NjYwLjUwMTcyMjk5MjYwNiw0ODI2Ljk3MDQ1Njk0OTcyNCwyNjUzLjA5OTM1MTIyMDY0MworNTUsVHVlIDI2IE9jdCAxMCwzMjU0Ny45OTEwNDQxODIxNDUsNTA1OC43NjkzODAzNzUxMjUsNDcyOC40NzcyMzg0MTk3Mjk1LDE0OTQ5LjU0MTM1MDQ0NTcyLDYwNTAuMDU5MjI3ODAyMTI5NSw0OTc0LjMyNjEzMTY2NjQ1NCw1NzQ0LjA0MjM2ODk2NTY2OCw0MDAzLjIyMDU0MDMyNTYwNyw0MTU3LjI4MTkxNzIyMDc2NSwwLjAsMjYzNi4wMzEyODM2OTM2NzgsNTc0NC4wMzcwMjAwNzQxODgsODkxMy43MTIwMjY3MTQ1NTEsMTU0MjguMDQ5OTA4MTU0MTcxLDU0MTEuOTczOTk0OTQzMjU0LDU3MjcuNjI2ODI3OTcxMjAzLDU0NjguNDAyNTYxMjc5NzM4LDUzMDEuMjU5MDQ1ODU4NTE2LDgyMjguMzk2MTIxMzczOTc3LDU2NTUuNDQ3MjM1NTcyNjMzLDUyOTIuMDUzMDM0ODE3NDczLDU2NjUuNDUwMTQ5MDkyOTU5LDQ4MzYuMzE0Njg3NTUzNjk1LDI2NTcuNDE2ODkyMTAyMTI4Cis1NixXZWQgMjcgT2N0IDEwLDMyNTU4LjkyNjE0NTAzODU2LDUwNzYuNDAyMTQ4NDAwMjQ5LDQ3ODAuNDkyMDczMzc0NDIsMTUwNzUuNTg0NjQwMzY0ODk0LDYwNTIuNDE3MTkzMDE0NzQ0LDQ5NzYuNTQyNTA3MjU1OTI1LDU3NTYuNDEyNzQzMjkwOTU0LDQwMTcuODM0ODg4MTEwODM1LDQxNjQuNzQ4MzYxNTAzODUxLDAuMCwyNjQ2LjM2NzUxNTQ5NDE3Nyw1NzQ5LjcxNDI1MTYyNzQ4NCw4OTQ4LjkzMTQ3NjUwMTQwMiwxNTc3Ni45NTAwODgzOTY2Miw1NDQwLjI3OTkyNjkyMzA0NSw1Nzc3LjUzNjI1NzEzNDIzNyw1NDc3Ljc1NTQzNDYzMDE4Niw1MzEwLjk5OTA5Njc1OTUwMiw4MjM1LjkxMzIxMzMwMzQxNiw1NjYwLjI3NjYzODE0NDQ5NCw1Mjk1LjIyMTA4MDEwNTA0Miw1NjY5LjQ1OTI4MTMxMzM5OTUsNDg0My44NTI4MjQwOTEwMDEsMjY2MC45MDY1MDc5NzQzMDA0Cis1NyxUaHUgMjggT2N0IDEwLDMyNTY3LjgyMDk3MTQxMjAyOCw1MDkwLjYwMjUzOTY0MDc0LDQ4MjIuMzUxMTc1NDk2NDM1LDE1MTc2LjkwNzUzNzMwMTUzLDYwNTQuMzM1MTkzMTU1MjgyLDQ5NzguMzQ4MDMzODMwMjUzLDU3NjYuNDM4MTYxOTMxNDgsNDAyOS42NTU5MDE5NTU2MjYsNDE3MC43OTU1OTQ0NTYzNDEsMC4wLDI2NTQuNzI5ODc4MjE5ODUwNCw1NzU0LjMwNDkwODk1MjA1Nyw4OTc3LjM5NDA2ODQxODA0OSwxNjA1OS4zODE4MTkzNDQyODYsNTQ2My4xNDQwNTEzNjUxOTksNTgxOC4wODg5MzQ1MDIwMTA1LDU0ODUuMzIzNzc4NDQ1MDE3LDUzMTguODc5NTk0MDY4NDc2LDgyNDIuMDA5MzQ5Njg0NTgsNTY2NC4xOTY5NDU5MDM2NDgsNTI5Ny43OTE5OTc4MzI2MTEsNTY3Mi43MTA0Mjg2OTc0OTMsNDg0OS45Mzg1MjE3NzMwNzIsMjY2My43MjkxODYzNzU2MTQKKzU4LEZyaSAyOSBPY3QgMTAsMzI1NzUuMDYzNjY5MDEsNTEwMi4wNDQyNTA0NTQ5ODcsNDg1Ni4wMTE4MTcyNTg3MDgsMTUyNTguMzMyMjgwOTY3NTg1LDYwNTUuODk2ODk3MDU4MDc5LDQ5NzkuODIwMjgzNTAwODEzLDU3NzQuNTY4Njc4MjE1MDU2LDQwMzkuMjIyMDE4NTM5MTA1LDQxNzUuNjk3MjA1ODUxNzg5NSwwLjAsMjY2MS40OTgyNzI3NzYzNTEzLDU3NTguMDIwNDA4NTQ3MzgxLDkwMDAuNDAzOTE1OTA4NDk3LDE2Mjg3LjM4MjMyOTczNzYwNiw1NDgxLjYxNDk0OTg3ODM5Myw1ODUxLjAxNTcxNjI4MTY5OCw1NDkxLjQ1MjkzOTI0NjMyNCw1MzI1LjI2MDUxNzE4MDcxNCw4MjQ2Ljk1Nzc5NzY4OTM5Niw1NjY3LjM4MjI0MzkwODAyNSw1Mjk5Ljg4MDQwODE5OTc0Miw1Njc1LjM0OTQyNDI5NzQwOSw0ODU0Ljg1NTY0MTgyMDc2NywyNjY2LjAxNDMxOTA2NzMzNQorNTksU2F0IDMwIE9jdCAxMCwzMjU4MC45NjcyNTkxNzY0MjUsNTExMS4yNjg3NTA0NzQ0OSw0ODgzLjA2OTI5MDkzODExMywxNTMyMy43NjQwNjk5MDM0MTMsNjA1Ny4xNjk3OTM2Nzk2NDksNDk4MS4wMjE5NDYzNDE0NjA1LDU3ODEuMTY3NDMwODczOTIxLDQwNDYuOTY3OTg5ODk3MzM3LDQxNzkuNjczNTc5MTUwMTgzLDAuMCwyNjY2Ljk3OTY0OTQ5NzM0NTcsNTc2MS4wMzA0ODg4NjA3OTIsOTAxOS4wMTQ1MDM4MDMxNjQsMTY0NzEuMDg3ODI2ODUzMzE2LDU0OTYuNTQxNDI0NjgwNjk5LDU4NzcuNzQwMjgzNjIzNDcwNSw1NDk2LjQyMDgxMjY4MDIxNSw1MzMwLjQzMTU1NzM1NDY2Myw4MjUwLjk3ODUzOTkzODc3OCw1NjY5Ljk3MjgxNTk2NTMwMDUsNTMwMS41Nzg1ODU1NjQ3MDYsNTY3Ny40OTM2MzExNDYwMzMsNDg1OC44MzIwMjI3NzIwNjIsMjY2Ny44NjU5MTcyNjY3MjA4Cis2MCxTdW4gMzEgT2N0IDEwLDMyNTg1Ljc4NDM5NDQwNDY4LDUxMTguNzEwODY1MTM0MzcxLDQ5MDQuODE2OTU4NDA3MjY2LDE1Mzc2LjM1MzkzMjA2ODU4Myw2MDU4LjIwODM2NTE4NDkyOSw0OTgyLjAwMzcyMjg5MjExNyw1Nzg2LjUyNzM2NzQ2ODE5Miw0MDUzLjI0NDUwMjgxMDI0NDMsNDE4Mi45MDIyNDUzNDM3MTEsMC4wLDI2NzEuNDIxNzM2MDYxMDU3LDU3NjMuNDcxNDk2NTU1MzIxLDkwMzQuMDc1NzY4NzgwODQsMTY2MTguOTEyMjQ4NTExODA2LDU1MDguNjA5MTYzNDYyOTgsNTg5OS40MjgwNzM3Mzg0OTMsNTUwMC40NTEwMzk2NjQwMjM1LDUzMzQuNjI1ODQ4Nzg5MTU4LDgyNTQuMjQ4NzYxMDE1NDM5LDU2NzIuMDgxNzY5OTI1MzcxLDUzMDIuOTYwODY3OTg5ODI2LDU2NzkuMjM3NTYwODQzNzcxLDQ4NjIuMDUwNTcyMTQ2MTI0LDI2NjkuMzY3NjE1NzY1MjA5Cis2MSxNb24gMSBOb3YgMTAsMzI1ODkuNzE5MTgyMTA1ODUsNTEyNC43MTk2MTM4ODg1MDYsNDkyMi4yOTkzMjc3NTE3NzM1LDE1NDE4LjYzNzY4MzY0OTM3OCw2MDU5LjA1NjYzMTE4NTI1MzUsNDk4Mi44MDY2NDkzODYxODUsNTc5MC44ODQ4MTgwMDExLDQwNTguMzM0MjY5NDIyMjkxLDQxODUuNTI2MjQ4NDM0NjEyLDAuMCwyNjc1LjAyNDMyNTI3MDU5MjMsNTc2NS40NTMwMjI5MDkwNzksOTA0Ni4yNzI4NjM4ODgwOCwxNjczNy43NjgyNDkxNjYzMzYsNTUxOC4zNzEzMDM0NTYwMTIsNTkxNy4wMjk3MDc1NTc0OTgsNTUwMy43MjM2NDkxNTU0MDYsNTMzOC4wMzEwNTI3Nzk4NzEsODI1Ni45MTEyNjUzNjIwOCw1NjczLjgwMDM2MDcxOTQ5MDUsNTMwNC4wODcxOTAyMzkxOSw1NjgwLjY1NzM3NzMxMTg3NCw0ODY0LjY1ODE3OTA5ODM3NTUsMjY3MC41ODY2OTQ2Mzg1OTEKKzYyLFR1ZSAyIE5vdiAxMCwzMjU5Mi45MzY2NjMyMjc0OTQsNTEyOS41NzUwOTI4NTEzMzM1LDQ5MzYuMzU3NTY0NTM3NTk0LDE1NDUyLjY1MjI1Njg5OTkxMyw2MDU5Ljc1MDE4OTQyMjEwOCw0OTgzLjQ2Mzk2NzI4MjIzLDU3OTQuNDMwNDc4NjYyOTc3LDQwNjIuNDY1MTQzNzkxODQsNDE4Ny42NjA4ODk0MzEwNzEsMC4wLDI2NzcuOTQ4NDk0NTMwNzg3LDU3NjcuMDYzMjE1NDk2NTE1LDkwNTYuMTU3ODUwNDc5MTcyLDE2ODMzLjI5MjU4NTY4MDI5NCw1NTI2LjI3MzY0MjgyNDM2Myw1OTMxLjMxODUyMTY0Mzg2OCw1NTA2LjM4MzYyNDU0NzcxMyw1MzQwLjc5ODI4NTE2ODU1NSw4MjU5LjA4MTIzMDkyNjM1NSw1Njc1LjIwMjI2NTAyNjk3OCw1MzA1LjAwNTkxNDQ2MTQ2NSw1NjgxLjgxNDUwNjE4OTIwNyw0ODY2Ljc3Mjg2NDM3MDY5NCwyNjcxLjU3NzMwNzM4MzEzOApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5hdXRvbWF0aWNleHBlcmltZW50L3Jlc291cmNlcy9BdXRvbWF0ZWRFeHBlcmltZW50RXhhbXBsZS9SZWNvcmRlZCBTaW11bGF0aW9ucy9SZWZlcmVuY2UvSV8wLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuYXV0b21hdGljZXhwZXJpbWVudC9yZXNvdXJjZXMvQXV0b21hdGVkRXhwZXJpbWVudEV4YW1wbGUvUmVjb3JkZWQgU2ltdWxhdGlvbnMvUmVmZXJlbmNlL0lfMC5jc3YKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMmMyNDQwMQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuYXV0b21hdGljZXhwZXJpbWVudC9yZXNvdXJjZXMvQXV0b21hdGVkRXhwZXJpbWVudEV4YW1wbGUvUmVjb3JkZWQgU2ltdWxhdGlvbnMvUmVmZXJlbmNlL0lfMC5jc3YKQEAgLTAsMCArMSBAQAoraXRlcmF0aW9uLHRpbWUsCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmF1dG9tYXRpY2V4cGVyaW1lbnQvcmVzb3VyY2VzL0F1dG9tYXRlZEV4cGVyaW1lbnRFeGFtcGxlL1JlY29yZGVkIFNpbXVsYXRpb25zL1JlZmVyZW5jZS9JXzEuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5hdXRvbWF0aWNleHBlcmltZW50L3Jlc291cmNlcy9BdXRvbWF0ZWRFeHBlcmltZW50RXhhbXBsZS9SZWNvcmRlZCBTaW11bGF0aW9ucy9SZWZlcmVuY2UvSV8xLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5kYmU1Nzg0Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5hdXRvbWF0aWNleHBlcmltZW50L3Jlc291cmNlcy9BdXRvbWF0ZWRFeHBlcmltZW50RXhhbXBsZS9SZWNvcmRlZCBTaW11bGF0aW9ucy9SZWZlcmVuY2UvSV8xLmNzdgpAQCAtMCwwICsxLDYzIEBACitpdGVyYXRpb24sdGltZSxTRS1BQixTRS1BQyxTRS1CRCxTRS1CSCxTRS1DLFNFLUQsU0UtRixTRS1HLFNFLUgsU0UtSSxTRS1LLFNFLUtQLFNFLUwsU0UtTU8sU0UtTixTRS1SSSxTRS1TLFNFLVNLLFNFLVNULFNFLVQsU0UtVSxTRS1YLFNFLVksU0UtWgorMSxUdWUgMiBOb3YgMTAsMTAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyLEZyaSAzIFNlcCAxMCwxNS44OTI1NTA0Mjg4MDIwNDEsNC4wNzA1MjcxMDY0ODk1MjNFLTgsNS4wODE4Mjg3OTAzNjI5MDVFLTExLDQuODM5MTY3MDAwNjE1NjM2RS0xMCwwLjI3MTk1MDg1Mjc3NTE3NDMsMC4yNDgxNjY1NzkzNjgwNzc4NywxLjE2Mzk3MjgwNDE4Mjc3N0UtNSw3LjU1NDQ4MDgwODU1MDk2RS04LDEuMTg4Nzk1NTY5ODE0MjY0RS01LDAuMCwzLjgyNzA2NTcxNTU3NzM3NjVFLTgsNS4yMjM0Njc1NzI1NDk5MDE1RS01LDEuMjI5MDk5MTI5MjI5ODkyM0UtNywxLjU2MjYzMjEwNDAzNjk5OTJFLTEyLDMuNzc5Nzg2NzIwNzgxMTgxRS04LDUuMTgyODc5ODg5NjQ1ODQ2RS0xMCwxLjI3NjQ3NTkxMTg4NDA5NTVFLTUsMS4yNjA5MzUzNTE4NDQ3MTI1RS01LDAuMDAyNTY2MzIyMjA1MzA5NTAyMywwLjAwMjM4MjM1OTkwNTUzMzc0NywwLjAwNDg0NTIzOTI4NDUyODE5NywwLjAwMjUzOTg4NDUzMTMxNTg4Niw5LjgyNjc5OTYzOTg2NzY1NkUtNiw5LjE2MDc0OTMzNTE4MzIxNUUtNgorMyxTYXQgNCBTZXAgMTAsMjUuMjgzNzQ0MDU4MTA1NTcsMS4wNzk4NTQwOTcyMzc0NTE4RS02LDIuODY1MDc0Njk4NjI4MjU3RS05LDIuNjY1OTQ5MDkwMzI1MTQwMkUtOCwwLjgxNDc5MTQ0MTI1MzAwMDIsMC43Mjg0Njk1MTkyODA1MTc1LDEuNDQyMTkzMjUwNzg5ODE1N0UtNCwxLjk0MDA4MzAyNzYxNDgxNzRFLTYsMS40NzE5MzMyOTY5ODg0NzMyRS00LDAuMCw5Ljg3NzQyOTQ5NjI5NjgwMkUtNyw2LjQ3OTczNTQwNzk5NTg4M0UtNCwzLjE3NjYwODI2Njk3MzA1OEUtNiwxLjgzNzEwNzI3NzQxNDg2NjNFLTEwLDkuNzc1OTcwMDExNzk1MTlFLTcsMi44MDczNjgwNjQxMzM1MzJFLTgsMS41OTc5MTgxNDY0Mzk4Mzg2RS00LDEuNTY2MDcwMTA4ODQ1NkUtNCwwLjAxNTUxNzE4NTc5MzE5ODIzNCwwLjAxNDM0ODI0MjM1NjI3NjkxLDAuMDI5MTE3NTA4OTMyODc4MDMsMC4wMTU1ODU2MzkwMDYyOTM5NzYsMS4yNDY0MjkxNDcwOTI4NjFFLTQsMS4xNjI2OTg1OTA3ODUyMzEzRS00Cis0LFN1biA1IFNlcCAxMCw0MC4yNjI4MjYyNDczMDcxNCw4LjY3MTkyMjg5MjI3Njc4RS02LDMuNTQ4MDgwODMwMzIyNDc2RS04LDMuMjI3MDAyNjE3Mjc2NDczRS03LDEuODM2MTY1MDY4NzcwNzY5MywxLjYxMDIxMzQzOTIxNDE5MDUsNy4zOTE0NDUxMDgzMTY3NzlFLTQsMS41MDg4NzgxOTk2MzQ5Nzg3RS01LDcuNTM4MDA1MjA5NDMwNjQzRS00LDAuMCw3LjcxOTk3MDg1MzY5Nzg1OEUtNiwwLjAwMzMyMzkyMjkxMjA3OTYzMywyLjQ4NjI5NDc1NjMyMTIwM0UtNSwzLjQwODgzNjA5MDIxMzc4NzVFLTksNy42NTgzNzUzNTU0NjE0MjhFLTYsMy4zNDA3NjUzOTUxNTMxMDA1RS03LDguMjczODYyMTY4MTU0ODFFLTQsOC4wNDU4MDQwNzAxMjU5MDlFLTQsMC4wNTI1NTgzMTc2MTYwODk3NSwwLjA0ODQxMjcwOTQwMjY2ODM4LDAuMDk3OTkwODQ1NzI5MjUxNjQsMC4wNTM1MjkwMDg1MzM2NzEsNi41MzU5MzA5MTM0ODQxMzhFLTQsNi4wOTg2MjIyNDc0NTU1MzRFLTQKKzUsTW9uIDYgU2VwIDEwLDY0LjE3MjEzOTg1OTIzMzEzLDQuMjkzODc5NTU5MDE0ODk0RS01LDIuMzg0NjQyNjU5ODAzODU3RS03LDIuMTIwNTk4MDAwNTYwMzY5NUUtNiwzLjY4NzA2MTM0MzU4ODMyNDQsMy4xNzUwNzc2NzE1ODkzMzAzLDAuMDAyNjQ4NDcwOTA4NDcyNjQ2NSw3LjIzOTM0OTE4MjI1ODQ1NUUtNSwwLjAwMjY5ODY4ODcyOTU5OTA1OSwwLjAsMy43MjE5MTM5Njk4NTM4MDc0RS01LDAuMDExOTE3MTk5MTI3MjM2NDI2LDEuMjAwNDA5Nzg1MzQ2OTUxNEUtNCwzLjAxMzU3NzgzMTg4MzI3MkUtOCwzLjcwMTM0NDExMTcxMDgxOUUtNSwyLjE1ODI1ODkxMjI2MTk0MkUtNiwwLjAwMjk5NDgwMjYwMDc0MjYyNSwwLjAwMjg4OTkwMTg0NDU2NTQ1NDMsMC4xNDA3MDc0ODc1NjM1MTQ3LDAuMTI5MTIyMzk2NTIxOTMxNTMsMC4yNjA1Nzk5MTg1NzQ5NjA5MywwLjE0NTE4NjYzNTQ3MzQ2MTcyLDAuMDAyMzk0NjU1MzA1NDQwMzczLDAuMDAyMjM0MjM4MjExMzkyNTgKKzYsVHVlIDcgU2VwIDEwLDEwMi4zNjExMDg1Mzc3NTgxMSwxLjYzNDM2NjkzNTMxMzE2M0UtNCwxLjE1MDA0NTk2MjI0ODc1ODZFLTYsMS4wMDAzMDQ3ODkyMTI3MTEyRS01LDYuOTU2NzUzNjcxMzQwNzQsNS44ODk0NjM3MzIzMzgyNzgsMC4wMDc4MTE3ODk1NzUwNzA1NDEsMi42NzE0NzIzMTYxOTUxNTI2RS00LDAuMDA3OTUyNTk0MjkxMDExNTU5LDAuMCwxLjM4MDAyNTk1NTQ3OTIxN0UtNCwwLjAzNTE2MDgzMDk5MDM2OTk4LDQuNDU3NDA3MjI0MTMyMTIzRS00LDEuNzgyNzQzMjQwMTY1OTI3RS03LDEuMzc1OTc3ODI0ODQ1NTM5RS00LDEuMDAwODg5ODg0ODQyNDc5M0UtNSwwLjAwODkyMTc1NjU2OTQ4MjQ2NiwwLjAwODU0NDMxMjkzNDAxNDQ1OCwwLjMzMTUzNDczMTU4MzA0NDcsMC4zMDMxMTk1NjMyMTMyMzgyLDAuNjA5NzA0NDEwODM0MzgwMywwLjM0NjI4NjA0NDUyMjI2MDAzLDAuMDA3MjE3NzIxMjgyNTc2NTY4LDAuMDA2NzMxMjAxMDQ2Mzg2NTIzCis3LFdlZCA4IFNlcCAxMCwxNjMuMzk0MDYzOTEzNDQ0NTcsNS4yNjk0NTc4MTMwODY2MTJFLTQsNC40OTg2NDIzNjM0NjU0ODZFLTYsMy44Mjg2NjQ4MzgxNDExMDFFLTUsMTIuNjI3MTM4NzMzNjY1NjQsMTAuNTIwODYxMDI5NzgxMDMsMC4wMjAzODQwNjc5ODA0ODM3NDUsOC4zNTUwNTA0NjcyMDE5ODNFLTQsMC4wMjA3MzEyOTM2MzgyNzQxLDAuMCw0LjMzNjMyMzg2MDM0ODMxNEUtNCwwLjA5MTc1MTkyNDc2NjM4MjA4LDAuMDAxNDAyNjc1Mjg2ODU4Mjc3LDguMTg3NzMyNjA3MDcxMDg3RS03LDQuMzM1MjgyNDIxOTA1ODI1NkUtNCwzLjc2NjIwNTAwOTExODU1OTRFLTUsMC4wMjM1MDk2NTMwMzAwNDQ3MiwwLjAyMjM0ODY2MDE1MzQxNDA4LDAuNzIxMDE0NjAxMjIxNjY3OSwwLjY1NjgyOTU5MjM2NDQ2OCwxLjMxNjQwNzUxMTM4MjI0MjcsMC43NjE3MDA3NDg1Nzc3NzA4LDAuMDE5MjM0Nzg0NzYzNTEzNDA3LDAuMDE3OTIzNDkyMTg1MzQxMjQ1Cis4LFRodSA5IFNlcCAxMCwyNjAuOTg0ODIwOTk5MjcyMzYsMC4wMDE1MTYxMTE4NTI0MTcwNjM3LDEuNTI0NDgzMTEzMjg2NTEyOUUtNSwxLjI2OTk2MTYwMTE5OTAxNUUtNCwyMi4zMjc2MzIzNjQ1MjcyNzIsMTguMzI5MDc0OTcyMzM5NzcsMC4wNDg5MTE4MjE4OTA3NzM1MjYsMC4wMDIzMzMxMjc3NTgzNzU2ODksMC4wNDk2OTM3MTk2Mjk1MzYwNSwwLjAsMC4wMDEyMTY0OTI1MzkzNzE2NTUsMC4yMjAxMDY3NDIwNDAzODI4OSwwLjAwMzk0MDg0NTcyNzY1NDkyOCwzLjE2MjIxMDg0ODU3NTcxNDdFLTYsMC4wMDEyMTk2MTI5MzU2MTQ4NDEyLDEuMjI4MjAzMDIzNzk3MjFFLTQsMC4wNTY5NTYwNzM0NTIwMjI4MiwwLjA1Mzc1MTg5ODQ0NjQyODMsMS40ODQ2Mzg3MjE1NTE0MTY1LDEuMzQ3NjYyODM3Mzg2Nzg3MiwyLjY5MDQ0NzAzMTM3MzU1MSwxLjU4NTA3NzU0NTc1Mjg4MSwwLjA0NzEwODAwMDkzMTUzMTc3LDAuMDQzODQ1Nzg0NDYwODMzNDQKKzksRnJpIDEwIFNlcCAxMCw0MTcuMDkwMzIwODgxNzkyOTMsMC4wMDQwMTM1ODE2ODE3NzU5NjksNC42NTExOTA1MTY4MTg1MzM1RS01LDMuNzk0MDE1MDk1NjMxNjcyNEUtNCwzOC43NDYzMTY0MzI3MjM3OSwzMS4zNzE2Mzc0NzQxOTQ3NjMsMC4xMTA0MDYzNzE0ODkxMjk1NiwwLjAwNTk5Nzc3MjIyNzMyMTYxMiwwLjExMjA1MDYyNTM2NTQyMjA0LDAuMCwwLjAwMzE0MTQwNjg4OTg4MDgyMTYsMC40OTY1OTQ5NDEyODIzNDYyNywwLjAxMDE5MTkxMzg4NTMwNzM0OSwxLjA3NjAwNTA5NDMxODUxNEUtNSwwLjAwMzE1ODUyNDk3NTQxMTQyMTYsMy42MDc0NTczNjkwOTMxN0UtNCwwLjEyOTc4MDAwMTkzMzc0NTQsMC4xMjE2MTQ0MTEzMzYxNjk4LDIuOTM4Mjc5ODU3MzkzOTk2LDIuNjU3ODA4NjY0MTA1MjM2Myw1LjI4MzkzMjIwNDQxMjk1MSwzLjE2NzkxNjA5NjAyMzY2NTQsMC4xMDg0NzExNjYzMTcxMTU3LDAuMTAwODA4MjMwMjg5ODkyMgorMTAsU2F0IDExIFNlcCAxMCw2NjYuODUxMzM3NzA3Mjg4NiwwLjAwOTk3ODYwNjA1ODYyMTAyLDEuMzExMjMxNjMwNjc0NDgwMkUtNCwwLjAwMTA0NzY1NDcxMjUzNTAyMyw2Ni4zMTM0MTMzMjkxMTg0Miw1My4wMTE4MDQzMzM0NjE5MywwLjIzODAzNjk0MTAyMzAxOCwwLjAxNDQ4ODk5MzkzMjQ2OTQwOCwwLjI0MTMwNTg4MzA5MDgwOTk3LDAuMCwwLjAwNzYyMjM5MjA3NzAzMTkyMSwxLjA2OTgxNTg3MDkwMDgyODUsMC4wMjQ3NjY4NzU4MDk3MTkwMTgsMy4zMjg4Mjc5NTE0MTc4ODk2RS01LDAuMDA3Njg2OTc5MDcyNzMxMTA3LDkuNzk0OTU1MTM3NjIwMzY1RS00LDAuMjgyMzg1MzU4MzEzMTIxMTcsMC4yNjI3OTQ3ODIzNTYzNTE3Myw1LjY0NTA3MzY3NzAwMDMwNjUsNS4wODg3NDY0MDU1NjUxNDQsMTAuMDcyMDIzMDU4ODQxMzMyLDYuMTQxNzI5MTEzNjg0Mzk3LDAuMjM4NDEzMTc5Njk0NTg0NCwwLjIyMTE4MjgwMDc1OTU3NzUyCisxMSxTdW4gMTIgU2VwIDEwLDEwNjYuNDQzMzEzMjk4OTk5LDAuMDIzNjA2OTg1MjA2ODgzMywzLjQ3MjE3ODkxNTQ2OTM1NjVFLTQsMC4wMDI3MTgzNDgwMzExMjg4MDI0LDExMi4yNzY4Mzg0MTc4MjUxNSw4OC43MDY4NzA1OTY0MDI5LDAuNDk0OTg2Mjc3MjExODczNCwwLjAzMzMyMzUzMDY1MDc2MDU0LDAuNTAxMTg2NjkyNjI0MTcxNiwwLjAsMC4wMTc2MDY5NjgxMzAzMzMwNjgsMi4yMjIzMTY1ODQyODc5OTg2LDAuMDU3Mjk0ODcyMDgzMjk3NjYsOS41NTEwNzUxODgzMDk1M0UtNSwwLjAxNzgxMDk5NTE5OTgzNzYwOCwwLjAwMjQ5OTEzNDE2MTk1NDcyOCwwLjU5MjQ5MzY4NzEyMzYyOTYsMC41NDc2ODg3NTc4NTIxNzcyLDEwLjU5NjYyODY0NzQzOTI0Niw5LjUyMDEzMTQyMTk0NzUyNywxOC43NTQ4MjYwNDAzMDE0LDExLjYyNTY4ODQ0OTk1NDUzLDAuNTA1MTI4Nzg2OTY0NzM4OCwwLjQ2NzY2ODk0NTI4MDcxMzM0CisxMixNb24gMTMgU2VwIDEwLDE3MDUuNDg0MDE2Nzk3MDMxNywwLjA1MzY0ODY4Nzg5MzI1Nzg4NSw4LjczOTg0MDI2NDI3NjMyNkUtNCwwLjAwNjcwNzAwMDUzODk4MzA2MjUsMTg4LjQ1NzUxMTQwOTk3MDEyLDE0Ny4yOTUwNjU1OTY4NDM3OCwwLjk5OTc1MzcwMzQxOTE4MjIsMC4wNzM2NTk1OTU4NTc1MTY0LDEuMDExMDMzMDc3MDIxMzc3MywwLjAsMC4wMzkwODQ3MjgwNTI0OTU5NDQsNC40ODI4MjM0NzIwNjIzNjcsMC4xMjczNzgxMjgzMDg5OTY0LDIuNTc4MzE0MTIxNjMyNDkwNEUtNCwwLjAzOTY2MjA0ODc5NTE0ODU2LDAuMDA2MDYzNDgwNjE1MzcwOTAzLDEuMjA3MjEyMzkyNDMwMDQ5LDEuMTA4NjM4ODc0ODEyMzk1MiwxOS41MjUwMTM1MzI0NjQxMSwxNy40ODI5MjkzODU3MTcyMDYsMzQuMjcyMzgyNjg2MTEyNjksMjEuNTg1NzU3NzMzNDIzOTQ3LDEuMDM4OTUwMTI5MDExODk3NCwwLjk1OTY2ODUzMDkwNDY5MDQKKzEzLFR1ZSAxNCBTZXAgMTAsMjcyNi40MzcxODg0NTkxMzEsMC4xMTc5OTQ3NzU1NjcwOTY0NiwwLjAwMjExMDk3NzcwNDIyMDg4MjYsMC4wMTU4ODQ1MDc5Njc2MjExMzUsMzE0LjA4MTc4OTMyNTYyNTA0LDI0My4wNzA2MDI3NTIzMjk1NiwxLjk3MjE4Mzk3MDE2MjUzMiwwLjE1NzY2MzM2MjcyNjQ5NTUsMS45OTE4Nzc2MjQzMjU1NzE2LDAuMCwwLjA4NDAwNjA3MjQ4OTY5OTE3LDguODI5Mzc5MTAwODM4NTM1LDAuMjc0MTkxNTI3ODE0ODI5MSw2LjYyMzcwNzA4ODc1MzMxRS00LDAuMDg1NTIzNDE5OTg4ODA5ODYsMC4wMTQxMjI4MDI2OTY2NzE2NjIsMi40MDE3ODc0NzM3MDg5MjA3LDIuMTkxNjc3Nzg3MzI5MzYsMzUuNDM4MzI4MTE2NDYwNzcsMzEuNjI3ODQwODc3MDAyNTQ0LDYxLjY3OTc2MDE2NjU5MzA0LDM5LjQ1MzQ0NDk2MzQxODcxLDIuMDg1OTA0NDcyNTQwOTkyMywxLjkyMTgyMDM2OTMzNDI4OTIKKzE0LFdlZCAxNSBTZXAgMTAsNDM1NC4zODE1MTgyNjgyNzEsMC4yNTI1MDI5MTU2NDkwNTM3NSwwLjAwNDkyNTUzNDQ0ODA3NDM0OCwwLjAzNjM1NDAwMDI0ODQzODMxNiw1MjAuMTY5MDQ2NDE4NDk1OSwzOTguOTc0OTcwMDU2NTk0MSwzLjgxNDc0MjA1MTQ4MTE3OSwwLjMyODUyMjc3NDkyNTQ3NjYsMy44NDc2OTg3MjExNDkxMTUsMC4wLDAuMTc1NzU0MjgzMTQ1Mzg2LDE3LjA0NjkwMTM2MDgwOTI4MywwLjU3NDUxODI1MDUxNjI5MjQsMC4wMDE2MzI1MzgxOTkwMjc1ODY3LDAuMTc5NTI1MzUwNDMzNjA1OSwwLjAzMTc5MDM4MTUzMDE3ODI1LDQuNjg0Mjk1NTk0NzQyNTI5NSw0LjI0ODE3Mzc5NDczMjg0Miw2My41MTg3NTgxMDk0Mzg1Nyw1Ni41MDUzOTUxNjg5MTg3OTUsMTA5LjU5MDUzOTY5NDQ1NDE4LDcxLjE2Mzc2MDYzOTc0NDA4LDQuMTA0MDczOTA4MDIwOTgzLDMuNzcwNzc0NzUwMTcyOTg0CisxNSxUaHUgMTYgU2VwIDEwLDY5NDEuMjg3MDE0NDA4MTkxLDAuNTI3NzQ4NjU4OTA2MTUwMywwLjAxMTE1NTM1MTk3NTc5ODM5LDAuMDgwNzg2Njg2MDA3NzY1NTgsODU2LjIyODQ5MDE5MjQ0NDcsNjUxLjQ1MzIxMjU5OTk3MjUsNy4yNTUxNDY2NjM3NjYxODQsMC42Njg4OTUwMjIzMjQ1MzA3LDcuMzA3ODI4MDc1NjY1OTk5LDAuMCwwLjM1OTI3MjYxOTczMTc2MjUsMzIuMzUyMTIwNzIyMjk1MzIsMS4xNzYyMDIwNDc1NjU5NjE4LDAuMDAzODgyNTUwMTk2Nzk5NTE3NSwwLjM2ODIxOTI4NzEzODQ0OTEsMC4wNjk0ODQ0NDQ2MTAwMTYyLDguOTgwODgxOTczNTg0Mjc4LDguMDk2MDg5NDI1ODIzMzQyLDExMi42MjI5NTEyNTM2MTgzMyw5OS44NjA0MDc2Nzk2NTI2MSwxOTIuNTQzNDU3NzQ3NzE1OTMsMTI2Ljg4NzA5Mjk3OTc0MzkzLDcuOTM1NjcyNTU2MDQ0MTI3NSw3LjI2OTExMzQ5NzYwMzE4MQorMTYsRnJpIDE3IFNlcCAxMCwxMTAyOC4zOTY2OTIyMjc1MiwxLjA4MTEzNzgwMDQ2NTQ4NjQsMC4wMjQ2MzQwMDcxNzQ3MTcyNywwLjE3NTA5NTE2NzUwMjM3NTI4LDE0MDAuNDgwMjk4Njg5NTQ4NCwxMDU3Ljk1ODEzNjM2NjkxMSwxMy42MDI1ODQzNzY4NDQyNDMsMS4zMzU1ODU5MjAzNDU4ODcsMTMuNjgxODczMjI1MTAyMDMsMC4wLDAuNzIwMTQ3NjE0OTgyMzA5NCw2MC41MDM1NTUyMzU1NDU2NCwyLjM2MTIyMTI2MjI0NTM4MzYsMC4wMDg5NTgwMTkxNTY1OTM4NjIsMC43NDA2MzY3NDQxNzQ5MDg0LDAuMTQ4MTQyODg5NjAyMDcxMzQsMTYuOTY5NDk5ODY4MDY1NDY2LDE1LjIwOTEwMzM0ODU3OTUyLDE5Ny44MTUwMTg3MDgxNzQ4MiwxNzQuODE5OTgxODAyMDI2NTUsMzM0LjkyNzc1ODcxODIzNDksMjIzLjk1MjExMDU4NzczOTQ3LDE1LjExODE1NDI1ODc1NzE3MywxMy44MDM0ODk5NjkyOTk1NjIKKzE3LFNhdCAxOCBTZXAgMTAsMTc0MjQuOTcxMjczMTk1NDg2LDIuMTc2NTI3MzkzOTgxNDQ3LDAuMDUzMjE3MTcwMzAzNjQxODU2LDAuMzcxMzczMzEwMTkwODQxMywyMjczLjQ5NTYzNTA3NjUyMSwxNzA2LjkyNDU0NjM4NzQ1MzMsMjUuMTg3MTU0NjE0NjczMjgzLDIuNjIyMDAyMjE5NzgzOTgxNCwyNS4yOTY0OTkxNDEyMzUwNzQsMC4wLDEuNDE5MTQ3MjgzNDgwODkwMywxMTEuNjkzNjc4NjQxMjQ0NjYsNC42NjAxMjY3NTIxNzU4MDgsMC4wMjAxMzM0MjUyNTYyNjgxNCwxLjQ2NDY5MDAyOTY5OTMxMzMsMC4zMDkxMTE1NjEwODg1NjczLDMxLjY1ODMxNDcyMDc3NDk0MywyOC4yMTQ5OTI4MzY4NzkyMDUsMzQ0LjQ4NjgyNjE0NjMzODYsMzAzLjQwMzkwMjI1NTEzNTU2LDU3Ny4xMjQ1MjEzMDcwOTAyLDM5MS41NDc0NDU3MDcxMzEyNiwyOC40Mjg1MjIzMDAzMTQyMywyNS44NjYzNDE3NTM3NDAxMTYKKzE4LFN1biAxOSBTZXAgMTAsMjcyODUuMjc0MzI2NTI3Niw0LjMxNDk2MjYyMjcxOTg2NiwwLjExMjc3MDE2MTEzODQ0OTE4LDAuNzcyODc0MzM1NDI5MzY1MiwzNjU0LjYyNDA0NTk1NTEwOCwyNzMwLjEzNzU1NzMzMDQ2OSw0Ni4xMjI5MjgyOTAzNDYzOCw1LjA3MTQ5NzM5ODkxMDUyMiw0Ni4yNTE0MzM2ODE4MTE3MiwwLjAsMi43NTUxMDg5OTgzMTcwMTc0LDIwMy43Nzg2MDMzMDQzMDM5NCw5LjA2MDcwMjQyOTIzMzUyMywwLjA0NDIyMjMwOTI5ODEwMjYyLDIuODUzODA1NzMyMzAyNTgwNywwLjYzMjkxNjAwOTcyMTA4MzksNTguMzkzNjk4MTIyOTM5NDUsNTEuNzU5OTgzMzM4OTYyODIsNTk0Ljk5NTIyNjQyODAxNTUsNTIyLjEyNjU5MzEwODAwNzgsOTg0Ljg5OTEwOTM4NDA2MTUsNjc4LjE3OTgxNjMyMzA1MzMsNTIuODM2ODA3NTU4ODM1MTgsNDcuODk0ODk3NzA3Nzk5MzIKKzE5LE1vbiAyMCBTZXAgMTAsNDIxMjYuMDY2Njg5MzM5ODksOC40MzgxNTUzODg3ODAxNTUsMC4yMzQ5MjI4OTEyMDkyOTI0NCwxLjU4MTcyMTgxMTM2MTAxMiw1Nzk0LjkzMTU4OTQ4MjQ1NCw0MzEzLjM3NTExMzU1MTE0Miw4My42MTE2ODA4NTgzNTM2NCw5LjY4MDY4NzYxNTg2NjQyLDgzLjcwNjgwMzU0OTI4NTU4LDAuMCw1LjI3ODE2NTE3MzQxNDE3MiwzNjcuNjY1OTM4MzEyODk5MTMsMTcuMzg0MjM3MTg3NTk2NzM1LDAuMDk1MTgyMTk3NzQ4NjY4MzcsNS40ODc0NzUxNjQ1NjU2NzYsMS4yNzQ0NzYyNTQ2NTA2MDEsMTA2LjU5MTM0MTk5OTA1NTMsOTMuOTg2MTMzNjM2Nzk0MjQsMTAxOS4wMTExODI2NzEwOTEyLDg5MC41NjcxMTQ3OTQ0NzExLDE2NjIuNzQ1MTMzMTc3ODYyNywxMTYyLjkyMTI0MTg2MTc3NjcsOTcuMTUxNzg2OTE5MDE0MjQsODcuNzA1MzYxODQ1OTQ1NzYKKzIwLFR1ZSAyMSBTZXAgMTAsNjM2NTUuMzQ4OTk2MDQ2NzEsMTYuMjk4NTM1NzUwNzExMTg1LDAuNDgxOTk1NDgxODkxNTUxMywzLjE4OTEyMzM4MTEwOTUzNDUsOTAwOS45OTg2ODU4MTcyOSw2Njk0LjMwOTk3MTEwMjY2NiwxNTAuMTM3MzA5MDg5MjU5NSwxOC4yNjA2MjM0NjY4MTA1NDMsMTUwLjAzOTQ2MzQ4NDg3NDIzLDAuMCw5Ljk5MTYzMDA5MDg3NzE0Myw2NTYuMDIxNzUyNzUyMTkyMiwzMi45NTc0NDk5MTYyNjkzOSwwLjIwMTIwNTg4MTM4Mzc1NTE0LDEwLjQyNzM4MDY5MjIyMjU3MiwyLjUyODUxMTg3NzgxOTM4ODcsMTkyLjY1OTIzMzcyOTE3Njg2LDE2OS4wMTQ1MzM3MDM2OTI5NiwxNzI4LjgwMTE3Nzg4ODgxMzUsMTUwMy42MDc1MzM0Mjk3NDg2LDI3NzAuMzE2NDU4OTc2NjA0MywxOTcwLjkzOTc3NDIyMjMzMTYsMTc2LjgwOTc2MDgxNzY1MTMyLDE1OC44OTA2ODQwNjQ1OTM3CisyMSxXZWQgMjIgU2VwIDEwLDkzMjA4LjYxNTE5Mzk0MDU0LDMxLjEyNDg2MjYzNjU4NjU2LDAuOTc1NDU0NDYzODk4NzU5OCw2LjM0NDQ0MDIzMjM3NDE0NDUsMTM2MTkuNzkxODU1MjYyMzYsMTAxMjUuMjAwNDE3MDE4NDUsMjY3LjA4MjU1NzExNDQxMTEsMzQuMDcxNzE5NTk1OTQ4MDQ2LDI2Ni4zNzA2NDI1MTY3NDU5LDAuMCwxOC43MDgyOTk1NjE5MDc5NiwxMTU2LjYzMzg3OTgxNTY5NjcsNjEuODAwMDAzMTkzMTg5MDgsMC40MTg1MjQ2MDc3NTU0MjkyNywxOS42MDEyNzc4MTc5NjEwOTQsNC45NDk5MzQwNTAyODk5NTYsMzQ0LjgxNzM1NjM4MjE3ODA1LDMwMS4wMjMxNDE2Mzk5ODY1MywyODk5Ljc3MDU0OTUxMTAzNjcsMjUwNi44MTcwMTMwMTA1Mjk1LDQ1MzYuNDAyOTQ4ODk3MTY4LDMyOTEuNDMzMTk1ODc2NjI1LDMxOC40NzkyMDAwMTUyNTU3NCwyODQuNjk3NTUwMzQ3NzgxOTQKKzIyLFRodSAyMyBTZXAgMTAsMTMwNjUyLjQ5NTI1OTA5MzI3LDU4LjgwMzEyNjUxMDk3NzI4LDEuOTQ5NjUxOTMyNTM4NjQsMTIuNDY5MjE1NTE3MjkzODgzLDE5Nzk1LjExMTk4NDQ5NDExMywxNDc3MC4zNzEzMjAwNjU3NjgsNDcwLjUwMjcxODMyMTY0NTcsNjIuOTI1MTAxMzUxOTUzNzcsNDY4LjEyODQwNTQ2ODg3MDY1LDAuMCwzNC42NzExNTAwNzM0NDU0NDYsMjAxMS4wOTczMjM0MjY1NjI4LDExNC42OTU5MTIxNjMxNjU3OSwwLjg1ODAxMTUzNzk5NTU2NTQsMzYuNDc3MTM5ODE1NDU1MjksOS41NzMzODY5MzcxODQwNCw2MTAuNzU2NDI2MzQ5NTAxMyw1MzAuNzA3ODY2MjQ4NjMyNCw0NzkzLjI4MTQyNjQyNTQ4MSw0MTEwLjc1NjY0OTExMDkxOSw3MjU0LjYxNTkwNDEyOTI3OSw1Mzg5LjY3MDgxOTY3NjQxOSw1NjcuMzYzNjUzMjYwMjczNiw1MDMuOTU4ODkwNjI3NzQ2MzcKKzIzLEZyaSAyNCBTZXAgMTAsMTczMDcxLjcxNTYzMTE2Mjc4LDEwOS45NTc5NDk4ODk1NzQ2MiwzLjg1MzQ2MTE1NTgyOTgxODYsMjQuMjQyMDgxMTE3MDAzMjgsMjczMTMuOTg1ODUyNDc2NjQ2LDIwNTMzLjM2NTY0MDg3MzgzLDgyMC4wNjM2MTA0NzM2ODQ1LDExNS4wOTM1MjU2NDY0MTQwMiw4MTMuNDYwNzI4OTUzNTczLDAuMCw2My42MzQxNzE5MDMyMzQ0NCwzNDM2Ljg0MTI4NzUyMzg1NSwyMTAuODAwNTQyOTkxMjQxOTQsMS43MzY1OTYzMTczNjQ4ODQsNjcuMjUyNjc4MDE0MTExMzcsMTguMzE2NTI0NzY5ODc0MTMyLDEwNjkuMjkxNzcyMjY4NTYsOTI1LjExNzkyNzcxOTAwMzgsNzc3MS4yNDQ1NzM0MDg0NCw2NTkyLjc0NjgxODUyMjQ3NywxMTIzMC42Mzg5MTAwMDEzMDIsODU5My4wMzIyNjkxNjA5ODcsOTk4LjE4NzE3NjIzMzM4NDUsODc5LjQ5MTgzNjE3MDg2NTEKKzI0LFNhdCAyNSBTZXAgMTAsMjE0MzQ2LjU1NjUxNjM5ODA2LDIwMy4zNzMzMjc1OTg4NjI1NSw3LjUzMjUwMDUzNDMzNTkyMyw0Ni42Mjk1NDY5ODEzNDAzMywzNTM0OC41NTg3NjY2Mjg3MywyNjg4MC4xNzMzMjUyMDAxOTgsMTQxMC43NTA4NjcxNjE2ODcsMjA4LjMxMjM5NDg5NjU0NzcsMTM5My43OTM0OTAwNjkzNDUxLDAuMCwxMTUuNTc5MjEwNDEyMzE1MDksNTczOC44OTYwODY3NzM1NDQsMzgzLjM5ODEwNDMzNjk2MTg2LDMuNDcxNDk4OTg5NDc0NjU4LDEyMi43NjE5MDI4MTUxNDY5NSwzNC42NjQ0NTE0MTYxMjg2NCwxODQ1LjE5NjIwMDA3NjgwNzgsMTU5MC4yODc2MDA1MDMwNzEyLDEyMjc0LjA2MjQ2MDQyMjIzNCwxMDI1Ny44NjkwODk0ODI2NjcsMTY2MzguNzc4Mzk5OTI2MDUsMTMyMTEuMjI2MzQ5NDYzMjczLDE3MjkuMjA3NjUzNTUzMDk4NywxNTA2Ljk0Nzk1NjA1MTg2NjYKKzI1LFN1biAyNiBTZXAgMTAsMjQ2ODQyLjE3NzQ5MTI5OTgsMzcxLjk1MDc5MzQxNDAyMjksMTQuNTgwMjAwMTU2NTI5NzMzLDg4Ljg0OTUyMTc1MTg2NTk2LDQyNTY1LjY5OTU0MDgxODY4LDMyODYyLjQ0MzczODc1MTM5LDIzODkuMTgwMTE4ODU1MjIxLDM3My4wOTA0MjAyNTk5NDM5LDIzNDcuMTE3NDc4NTI2ODgzLDAuMCwyMDcuNzUxOTM5MDgzODI2MSw5MjkxLjYzNzEzMjE4Nzc4OSw2OTAuMDI1OTc2OTg2OTU2Nyw2Ljg2NjYxMTMzNjc4NjI0OCwyMjEuOTcwNzczMTA3NDEyNDQsNjQuOTgxOTUwNjIwMzE4NzcsMzEyNy43MjE3NDQ4MzQ0MDM2LDI2ODcuNTY5MTI1NTU1MDQ0LDE4NzI2LjI4MTQ1NDA1OTQ0LDE1MzM3Ljk1Njk3MDY5NDk5MSwyMzMwNC45NDgxNjAwODc0NjgsMTkzNjYuNjMxMDMxNTQwNTE0LDI5MzguNTcyNzQ5MjQyODM4LDI1MjEuOTMwNzQwMzMxNjM0CisyNixNb24gMjcgU2VwIDEwLDI2NDY4NS4wNjg4NjQ3ODgsNjcxLjI0NjI3NDQ1NDY3MDgsMjcuOTI2OTA5NDMyODE5MDgsMTY3LjYwNjE5OTMwNjgxMDI4LDQ3NjA1LjMyOTAzNzgwMTY5LDM3NDA4LjY2ODM2MDk3Nzc1LDM5NjMuNTY2Mjk2NjY2ODI4LDY1OS42MDY0NDQ4NTQwODk4LDM4NjIuMDUzMjc0OTk0MTMyNiwwLjAsMzY4LjcyNDc3NjE1MDM1NzcsMTQ0MjguNjY3NzEyOTAyNTE2LDEyMjYuMTk4MTg4NTI5MDE1MiwxMy40MzUyOTA3NjEwNzI3NzMsMzk2Ljc4NDg1NDAxNTY2ODksMTIwLjUyNTYzMzQwMzU3MjIxLDUxNzYuOTg0MzM4NjE1Mjc3LDQ0NDEuNTUyMDI0NzY0NDkxLDI3MzExLjg1NjI0NDY0MjYyMiwyMTc5NC43ODY0OTU3MzIwNiwzMDUwOS40OTA4MDAzMTIxNCwyNjc0MS44NzMwOTA2MDk1Myw0ODY5LjkyNjc0MjI5MTA0Myw0MDg4LjM1NjYwNDE0MDkyMTcKKzI3LFR1ZSAyOCBTZXAgMTAsMjY2MTk5Ljc1NTc5NzM2MjYsMTE5Mi44NzMwNzE5MjAwNDA3LDUyLjk1MDkxNjIyNzU3MjI1LDMxMy4xMzI0NjYyNzgzMDA5LDQ5NjkxLjg4NjYyOTQzMDM5NSwzOTc4Ny40NjYxMjQ0OTYzMzUsNjQwNS40MDkwMjMwNTE5NzUsMTE0OC44MjExOTMwNTAxMTYzLDYxNjYuNzkzMzU0Nzc5NjQ4LDAuMCw2NDQuOTcxMzY0Mjk3MjQ4MywyMTIyNy43OTMzNjI2NzkyNiwyMTQ3LjQyNTA0OTc3NTY5MjUsMjYuMDMxNzU0MDczMzAwMTU2LDcwMC40OTcwNTQ1OTkyODE3LDIyMS4yMzU3OTI0ODY5NjEyNiw4MzA4LjM2ODQyNjUwNjQ3LDcxMzMuNzQwNTI5NTMwMzMsMzc2NTkuNDA2ODc1NjAwMjk2LDI5MTI0LjU3OTYzNjI0MTQ2LDM3MDY3LjA1MjI1MjgzODEwNCwzNDQyOS4zNzk4ODcwMTgwMjUsNzgxNC40NjY2NjcyNzcxNDcsNjM1OC4wNzMzMDUxMzU4MTUKKzI4LFdlZCAyOSBTZXAgMTAsMjUzNzU0LjE0MjQ0Njc1NDM4LDIwODAuMzk1Nzg1ODM5OTA2Nyw5OS4zMzE5OTg4NDIwNDczLDU3OS4xMDYzNzM1NzI3MzM2LDQ4ODY1LjY3OTMyNjAzOTA4NCwzOTg1NC44MzgwMDM4ODM2MiwxMDAwOS44ODMxODc4NTQ3MzcsMTk2My43Njc3OTA3Njc4MTc2LDk0NzAuNDczMjAzODM0NjM2LDAuMCwxMTA4LjA0ODI5MjEyNTM5MSwyOTIxOS41ODIxNDc1NzkxMDUsMzY5My42MzA0OTA1MDIxMzQ4LDQ5Ljk2MjAyNTczMTg1MTYxLDEyMTguNDc4OTMyNTU1MzI4NCw0MDEuNTE1NDE2NjgyNjMxNjcsMTI4MTAuMzU3MzQ1MTYzODMsMTEwNDYuNTQ3NTI2MjI3NzU0LDQ4NTk4LjQ0ODY3NTQyMDA0LDM2MzA2LjI2OTg4NTA1MDAyNCw0MTc0OS4xMzk0ODI0NTc1NCw0MTA5Mi45OTczNzg1Mzg1OTYsMTIwMzEuNTkyODI3Mjc1NzA4LDkzNzYuNTcwMDc3MjM3Mzc1CisyOSxUaHUgMzAgU2VwIDEwLDIzMTgxMC42Mzc2NjcxMDM4NSwzNTQ0LjUyOTIwMjc5ODYxODQsMTg0LjE5MTAxNTIzMTE1MTU0LDEwNTkuMTczNjU3ODY2Nzk3Miw0NTc3MS45OTY4NDg0NDI0OCwzNzk3OS4zODMxNDk4MDE3OSwxNDk5Ni4yMDI2NDM3MjIzNzIsMzI3Ny42MTI3Njg4NzU2MzUsMTM4NDUuODQ1ODExNTM1ODAzLDAuMCwxODYwLjgzNTIzMzUxMjcyNzIsMzcyNjIuMjIyODY4NDExMDIsNjIxMC41ODcwMDkyNTU5OTUsOTQuOTg5NTYyODkwMDYxNTksMjA4MS41MjM2NTYwNzQ0NzksNzE5LjI5NzQxMzI1MjI3ODgsMTg3NzcuMDAyMTg2MTQxMjAyLDE2MzM2Ljk4MzkxMjI2MTc2Nyw1ODMxNS45NTg0Nzc5MTU2Myw0MjA4MC4zODYzNjk3MTM0MTUsNDM4MTkuNTczMDIyNjczMzM2LDQ1NDkzLjgwNjQ0ODQwODIzNSwxNzU4Ni42NjMzNDI5MzE4MDMsMTI5NjAuOTc3ODMzNjQ2OTIKKzMwLEZyaSAxIE9jdCAxMCwyMDQ5NDkuMTYxMzMzNjQwMDUsNTg2NS4xMjE1ODIyMjM1ODQ1LDMzNy4xNDU2MjYyNDY3Njc4LDE5MTIuOTE1NTE3NTQ5MDkxNCw0MTI3MS44NDM5NjI5MjA5NDYsMzQ3NzguMTE5ODY4NzIyOTYsMjEzMzcuNDgzMjgwMTgzNjQyLDUzMDUuNjY3MjU3ODEzNDE2LDE5MDczLjIzODIyMDY3Mzc1LDAuMCwzMDM2LjMxODI2NjQ4NTAwMiw0Mzg0Mi4wNTEwNDcyNjM2OSwxMDE0Ni4zNDAwMjg5NTI5LDE3OC44NTY3ODgwMTY1MDM1MSwzNDc3LjUwMzQzMjE3NjY1NzUsMTI2OC44Mjg2MjQ5MTQzNzU3LDI1ODgzLjQ5NzAwMDM0MTE1LDIyODQxLjkyNzIxOTU1NTgzLDY1MDIyLjAzOTYxMjc2MzksNDU0NTguNzA4NDA0MzY4NDE1LDQzMjcwLjQ0NzQyNDYwMjUyLDQ3MDIzLjg3NTU4NzczNjI4LDI0MTM0LjQ1NjA3NTEzMjA1NywxNjYzNS42MTQ0Mjk0NjU2NDQKKzMxLFNhdCAyIE9jdCAxMCwxNzY3ODIuNTg3NzU4ODY2NDYsOTM1NS44MjExODE2MDMyLDYwOC4wNDA5NTUxNjM4MTAyLDM0MDMuOTc3NDI1MzcyNTEzLDM2MTQ2LjQ1NDI5NDEyNjIxLDMwODczLjQ1MDAwMzU3NjMyLDI4NTc2LjU2MTQ4NTU3MTg4LDgyNjEuNDg4OTkwMjc2NzYsMjQ1NDUuMTM3NjY5OTAyMTkzLDAuMCw0Nzc3Ljk2OTk3NDI3MzU2OSw0NzczMC4zMTkyMDEzMzQ0MiwxNTk4NS4wMzg3OTU4NDk3MDMsMzMzLjMzNDY0OTczNzE3Myw1NjUxLjgyNzE3MzExODgxMTUsMjE5Ni4yNTEwNTMxMzE0NjQsMzMyNTMuNzI3MDA3MjU5NzUsMjk5MDguODE3OTgwODgwOSw2NzcyMC41NjcwOTg0MjkwNSw0NjEwNy40MzE5MTUwNTQ1Nyw0MDY1Mi42MDI5NDQ1NDIwMiw0NTg0OC43MjI5NzExMjI5MiwzMDgwMC45NTg3MTIyOTYwMSwxOTczOS40MDM5MzQ3OTQyMgorMzIsU3VuIDMgT2N0IDEwLDE0OTY5OC4wMTM4NzczMDg4NCwxNDI1Ni44MzkyMTM0MDM3MzUsMTA3Ny45MDQ1MjAzODY0MDc1LDU5NDkuOTUyNTM0MTM2MDQ5LDMwOTcwLjA0NTAzNzQ3MzI0MywyNjc2MS45MTc2MjQ0NTgxOCwzNTc3NC4wMzQ5NDY5NDgxMiwxMjI1Ny45NDcwMTQ2OTY1MzgsMjkzNjkuNjYyNTI1ODU2MTg3LDAuMCw3MTg4LjQ5NTc4MzQ2OTAzOCw0ODUwNC4xNzk2Njg1Mjg3OCwyNDA3My4zOTQ1OTYzNzE5NTYsNjE0LjMxNjM5ODU0NjcxMDcsODg3OS4wNTY2MTI0ODIwODMsMzcxMy4xMTE1MDAwNzUzNDE2LDM5NjI3LjYzMzgxOTIyNjE4LDM2NDM4LjM3NTcxNjIxMDAxLDY2NTAyLjI2ODgyNjMwNDQ3LDQ0MzQ4Ljc2MTEyMTAyMDMsMzY3MzEuMTYwNDgxMDgyMTk1LDQyNjQ4LjM3ODI4MTM2MzEzLDM2Mzc2LjM0ODk3NDU4OTQ4NCwyMTY5Ny41Njg5MTQxMDE3NQorMzMsTW9uIDQgT2N0IDEwLDEyNTAzMC43MTk1ODE0MDI2MiwyMDUzNi40MTU1NzM1NjI4MiwxODcyLjcwOTk1ODIxMTM2MiwxMDE3My44MzA4MTIyNzEyMywyNjEwMS42OTg4NTkyNzkyOTUsMjI3ODAuNjQ4MTE3ODM2MzE3LDQxNzM2LjMxMDU2NjAxMTIsMTcxNjIuNTI0MzUzODUyMTA2LDMyNjk1LjI0ODY5NzQwMjA5NCwwLjAsMTAyNDMuNjk4NjAyNjgyMjQ5LDQ2NTU0Ljg4ODcxODg1OTkxLDM0MzMxLjE1NjcyNzM4NTczNiwxMTE4LjAzNTIwMDAyNzU5MzksMTMzODIuMzYwMjU1OTk4Mzk0LDYwOTUuNDE2MDA2Mjc0MjM0LDQzODQ3LjY0Nzk2MzUzOTk3LDQxMjQ5LjM2MjQ1ODg0ODU3Niw2MjI1MC4xMDIzNzIxOTQyNCw0MDg3Ny4wMTkxMjUwODg3OSwzMjIxMi42NDM3MDg0NzYwNDcsMzgyNDYuNzk4MTAwMjI4Mjc2LDM5ODE2LjM5MzY1MjE2NDA4NiwyMjI2Ni4yMjU4NTQ0NTMxNDMKKzM0LFR1ZSA1IE9jdCAxMCwxMDMzNjMuNTI1MjA3NDAxMjEsMjc2NjQuNjIyMjUwNDkxMDc3LDMxNzcuMDY1MjIxMzkyMDQ1LDE2OTI0LjIxNzIwODg0NjI1LDIxNzI5LjQyNTc2OTQ2NDU1NywxOTEyNi4zMzkyNDg5MTkzNzIsNDU0NjkuMDQxMjczNjIyNzMsMjI0ODEuODAwMDEzNTczLDM0MDU3LjkyMDk2MDIxNDAyLDAuMCwxMzcwMi4xMzI1MDk5Njc4MTIsNDI3MTUuNjEwMDUwODIyNTUsNDU5NTEuOTc2ODQ3MTQ0NCwyMDA1Ljg1NTk1NTc4MzY5MywxOTE4OC4yNDc5ODE4OTg4Niw5NjQ1LjgzMDU3NzkwNTU5NSw0NTM0NS40MDY3MTAyOTQ1NSw0MzU3Ni41NTY3NjI5MTM0MjQsNTYxMjIuNTIyNDE5OTk4ODE1LDM2NDQ1Ljk4MjYxNzcyNjI3LDI3NjIxLjkzNzQ1OTcyNzkwNiwzMzM1OC4xNjkxMzgzNDY4NCw0MDY5NS42OTAwNzI4NDU2NzUsMjE1NjkuODk4Mjg4ODY2ODEKKzM1LFdlZCA2IE9jdCAxMCw4NDgwMi4yODc5MTYwMTE2OSwzNDU2MC43Mjc3Nzk5NjM1LDUyMzkuNzkzMzA0Njc5NDM5LDI3MTkxLjM0MzU1NDcxMDE0LDE3OTIzLjkwODc4NDUwOTQ4LDE1ODkxLjU5OTM1ODA3Mjk3Niw0NjU1Ni42MjQ1NDUzNTc4MSwyNzQwNC45NTQ4NzY2NTQ4MTQsMzM1MDMuNTAzMjk3NTQ3NDIsMC4wLDE3MDg3Ljg1NDk2MTI4MDY0NiwzNzg2Ni4yNDkzODcyMjYzNCw1NzM1MC42MTgxNDA2MjMwMiwzNTM5LjY3ODk0Mzc4MDEzNjcsMjU5NTMuMTkyOTM1Nzc3MzUsMTQ1OTIuMzMyMTM0NjY2Mzg1LDQ0MjcxLjM3NTI5NjkxOTMyLDQzMzMzLjIyNjI4ODE5NDkxNCw0OTE2NS4xOTEwNzA0MjEyNCwzMTY3OS4yNzU2ODY5NiwyMzI5MC4wNTM2NTA5MDYxNSwyODQ5MS4zMjc2ODEzODgwNzcsMzkyNjkuOTAwNTE4NzIwNjksMTk5NTcuMDA3MzU0OTYxNDQ2CiszNixUaHUgNyBPY3QgMTAsNjkxODEuOTU3NzE5MTQxMjEsMzk5MTUuNzQ4ODMyOTY4ODM1LDgzNTMuNzcwMzMyODUxMTAyLDQxODAyLjQyMjE3NTI0OTg1LDE0NjgzLjgwOTYxNTc1Nzg2MiwxMzEwMC4zMzUxNDkxNjQzNSw0NTIxNC45OTUwODY4MTkwMzUsMzEwNjkuMDMzOTIxNTk0ODIyLDMxNDQ5LjYwMTc5NjkwNjAwNSwwLjAsMTk4MTcuOTc5ODQzNTIxNDQsMzI3MTAuMzQyMDcwNDUwMjMsNjY1ODYuNDM0MDAzMjkxNzQsNjEyNy41ODk5NjczMjE3MSwzMjg4MS42Nzc0NDAxODY0NDYsMjA5MTcuNDY0NTQ1MDcwOTUsNDEyNTguNDQzNDk1ODgzMzcsNDA5OTMuNDY3MTY0NzkxNTQsNDIxNDUuNTQwNjY1NTA4ODEsMjcwMDkuOTQ0OTc4NTkyMzk3LDE5MzkyLjE0MDk1Nzc3Mjc2NSwyMzk1NS42MzI2NDE3NzYyNiwzNjE5OC4zNzI5MzgyNDA5NjYsMTc4MjIuMTkzOTc0MjYxMTMyCiszNyxGcmkgOCBPY3QgMTAsNTYyMDQuMzE5NjIzMTE0MzgsNDI3NzAuMjM3NTkwODA1OTMsMTI3NzguODE3MzAzMzUzOTIyLDYwODA4LjQ1MTQ3MTE3MTQ4LDExOTY4LjM1NjU1MTMxMjMyNywxMDczNS41NjA5NjU1MTM3MTgsNDIwNjEuMTQ0MTM4NTY1OTIsMzI5MDguMjA4Nzk5MjgwNDQsMjg0NDkuMzY5MDQxMDc1NzQ0LDAuMCwyMTQzMy44MjExMzAyMDY0NDUsMjc3MTcuMjE3NzAwMDc2NjkzLDcyMTI0LjY3ODY0OTkyMDcxLDEwMzcyLjU3NjAxMjcxNTA0LDM4ODgwLjc0NzkzMjM2OTUsMjgxNzcuNzg5ODEyNTk5OTkzLDM3MDgwLjMwNzkyOTQyNTUxNSwzNzI3Ny45OTgzMzAwMzIwNywzNTU0My43OTIwMDc2NzIwMDQsMjI2OTUuODU3MTM2NDAwNzE1LDE1OTk1LjgzOTk1ODQzMTM2NSwxOTkwNi45NDI2NzY0OTU4NCwzMjIxMi42MDA0NjMxMDIzMDIsMTU0OTQuOTU5NTI1MTM4CiszOCxTYXQgOSBPY3QgMTAsNDU1MjMuMDAzNjI5Njk3ODIsNDI5MDIuODE5MzAxMTI0OTc1LDE4NTc1LjI0NTgyMjQ5ODY2Miw4MjcyNS40Mjc5MzkzMzQwOCw5NzE4LjYzMzg5Mzg0MzgxMyw4NzU4Ljg1MzI1NDg0MzU5MiwzNzgxOS40MTU1MjYzMTgzMiwzMjg0MC4wMzUxNDQwODY1NiwyNTAxMC40MjIwNzAyODI1MiwwLjAsMjE3NzUuNzYwODA2MzgzMjM4LDIzMTUyLjQ3Mzk4MDg1NDYzLDczNDE1LjAyMjUzOTc0NTIsMTcxMDEuMDEyMTk5MjQ4Mzk1LDQyOTQ2LjY5MDE1MDc0NTEzLDM1NDU3LjM2OTc5NzAyNDY5LDMyNDEzLjk3ODgyODIwNzI3NywzMjg4Mi40MDAxODQwNjg2NywyOTYxMi4wMDI2OTcyMzM2ODIsMTg4NjIuNzI0MjQ4NDA4NTA3LDEzMTAyLjUzOTMxMDMwMjIxLDE2Mzk4LjA2MTAyNzgxMzk5LDI3OTE0LjI5ODgwODM3ODczNSwxMzIwMy41NTgwNTEwNzU0ODQKKzM5LFN1biAxMCBPY3QgMTAsMzY3OTIuMTYyODQyOTQ4MjYsNDA3NjEuNzc2MjYzMjU2MTUsMjUzNzMuMTI4NzA1ODczMTEsMTA0MjYzLjYxMDU0NjIzMDM4LDc4NzAuNDgyMzc1ODAwOTQ1LDcxMjIuODk0NDcxNjQ0NDIxLDMzMTIxLjcxODYzNzIxMzg4LDMxMTkwLjkxOTIwOTE2Mjk5MiwyMTUxMy4xODg4MTQxMDAxOCwwLjAsMjA5ODYuNjIxMzY1MDcyMDUsMTkxMzUuMDY0NDg4NDM0OTA2LDcwOTA5LjI4Njg4NjQ5NDA0LDI3MzE0LjQ5Njc4NzI3MjM1LDQ0NTQ4Ljc5MjI0NDAyMzEyLDQxNTkwLjAxMjg5OTcxMjQ4NSwyNzc0Ny4yMTczNzc5OTgwMzMsMjgzNDEuNzE1MzM1MTI0MzA3LDI0NDQ1LjUwNzA1ODMyNTMwNCwxNTU0OC4yNjQ0MDA3NTgxNDgsMTA2NzcuMTk3MTY5NzIxMzM0LDEzNDE5LjY3NzQ2ODEyNTAxMiwyMzcxNC4wNTc3NTE3MTk1NywxMTA4My4xMTY3NDA4NDE5MzUKKzQwLE1vbiAxMSBPY3QgMTAsMjk2OTEuNzM1MzAxODEwODgsMzcxMTMuMzA2MDgzMjk3MDEsMzIyNDIuMjQwNTQ0MTgyMjUyLDEyMTI2NS4zNDI4OTM1MTAxMSw2MzYxLjQ4Njc2MDg2MzA0NzUsNTc3OC42Njg3NTI1NDc4OTEsMjg0MjcuNjczNDYxNzUxOTY1LDI4NDc5LjEwODA1MzYyOTc5LDE4MjAxLjU3NTg5Njk2NTA3OCwwLjAsMTkzODQuNTEwMjA0NTg4MzE0LDE1NjkwLjM3MzE1NjQ4MDI3Myw2NTY0OC4yMzc0OTY0Njc1MSw0MTk1OS44MjcxNzcwNTU1NSw0Mzc1NS40NDU0MTU5NzA0OSw0NTU5My4wNTE0MjEyMTU5NiwyMzM4MC41MDgxMTQ1MDYxOTYsMjQwMDUuMTk1MjkxMzI4Njc3LDIwMDQyLjg1MjUzNjQzNzY2LDEyNzM3LjA2Mjk1MTAyOTQzOCw4NjY3LjY1NTAzODM1NTcwMiwxMDkyOS4wMjgyMzUzMzkwNzQsMTk4NTAuMDMyMzA1MTYwMzc0LDkxOTkuMDU2NzE3NDM4MTk4Cis0MSxUdWUgMTIgT2N0IDEwLDIzOTM4Ljc1MDg1NDQ4NTM2LDMyNzEzLjgxMzE2NTA2NTcyMywzNzkwMy4wMTU1MzQ0NTAzOSwxMzA1NjUuNDM4NzAxNDY1MTcsNTEzNS4yNjIxMDI2NjEyNTgsNDY4MC40NzU2MDcxMTQ0OTEsMjQwMjYuNTQzMDY4NDE4NDksMjUyMTguMzk3MzAyODkyMDIzLDE1MjA4LjgxNzAzOTQ5ODExOSwwLjAsMTczMTkuMzY2MjEzODgyODI2LDEyNzkxLjAwNDQ5MjMwMDU1LDU4Nzg4LjMyNzQ4MDk0NjQ3LDYxMzg3Ljg0NjcxNjAwMzI1LDQxMDcyLjQwNDIyOTA3MzU0LDQ3MDI3LjUxOTE4NzMwNzQ3LDE5NDY5LjE3MDAxNzIzNzQsMjAwNjcuMjgzMzE1NzcxNjQsMTYzNDkuOTcxMTcyMzk1MjQ2LDEwMzg2LjQxNjYzNDIzMzc3LDcwMTcuMDU5NzAyNTkyNzA4LDg4NjkuMDY3NzM5MTU2MjEzLDE2NDMzLjc0ODc2ODM0MDIyNSw3NTcxLjM5NzUyODAxMDM5NworNDIsV2VkIDEzIE9jdCAxMCwxOTI5MC4wMjU2NTQ5Nzc5MzMsMjgxNDQuMTY4OTQwOTM2NTM1LDQxMjczLjk5NDM0NDQxOTg2LDEzMTMzMS43MjEwMDg1ODE4NCw0MTQyLjE1NzQxODc5MTc3NiwzNzg2LjkxOTgzNzQ3OTQxNywyMDA3MS4wNzQxOTQ0MTM2OTMsMjE4MTMuODM1MDMyMDYzNzQ0LDEyNTg5LjI5MDQwNzIzMjkyNCwwLjAsMTUwODQuNDU2MjQyMjQ4MTU2LDEwMzgyLjgyOTU1NTMyMjM3LDUxMzA5LjU5ODQ5Nzk0NzI0LDg0NTU4LjA1NTg2OTU4Njk3LDM3MTgwLjIwMjEzNjkwNTIxNiw0NjA2MS43MDU3NjU1NTc2MDYsMTYwNjguOTY1OTkzNTU3MDEsMTY2MTEuMTY1NTI4MDk5NjQsMTMyODcuODI1NDc2MjUwNzAyLDg0NDEuMTI3NzgxNDg1MTcsNTY2OS44NDgwMTQ2NDE2NDcsNzE3OC45NjY1MDI3Nzc4MiwxMzQ5NC41MTkzNTc2NDY5ODMsNjE5Mi44MzQyMjUwOTEzNDgKKzQzLFRodSAxNCBPY3QgMTAsMTU1NDAuNzcyNjYyMDE3NzU1LDIzNzc5LjI3Mzc3NTM1NjE3LDQxOTUyLjQzMzc3ODAyOTYzLDEyNDkxMy44NDMwMzM1MzU1NCwzMzM5LjkyMTkwOTg0MDYxMywzMDYyLjIwMzMyNzA0NTI3MjUsMTY2MTkuNzgwMDQ2MTczMjcsMTg1MzcuMDYyMTY4OTI0MzksMTAzNDguMDAwMjEzNDU1MTcyLDAuMCwxMjg4NS45ODQxMjA2MDc4OTYsODQwMi4wMzc3MDcwNTgyOTgsNDM5MTAuNTI0MTYzMzE5MTksMTA4NDg1LjQ2NjkwMjM0OTYsMzI3MTYuMzcyNjg4NDk0MTkzLDQzMjU4LjAxNTA1OTMwMzA4NSwxMzE3NS4yNDQ3MTY3NjgzODgsMTM2NDkuNzkzNzg4NzYwMzE1LDEwNzcwLjIzOTM2MTQzNjI1NSw2ODQzLjgwNjU5NDM0MTU4OTUsNDU3NS40Nzk4NDg2NDE1MzUsNTgwMC42Mzc2NDM0NDg3NzUsMTEwMTMuOTc4NjQwNTIyNzI4LDUwNDEuOTUxMDEwNTQwNjk0Cis0NCxGcmkgMTUgT2N0IDEwLDEyNTIwLjg0NDcxOTU1ODU5LDE5ODIzLjQwMjY3NDg1NTM2Miw0MDI1Ni44MjgxOTg0NDQxMiwxMTM3MjAuMDI4MDA5NDE0NzcsMjY5Mi45NDE2NDE0ODI2Mzk2LDI0NzUuNjQ2MzEyNzAxODQ4NywxMzY3MS4wMjExNzU1NzE3MDgsMTU1NDMuMDkyNTA5MzM1MDY1LDg0NjEuMzM5MzkyNTMxOTcyLDAuMCwxMDg0OC4xMzI2ODcwMDM4MjcsNjc4NC4yNzcyMDg1ODU4NTA1LDM3MDIwLjI1NDc0MjMyMTcsMTI4Nzk0Ljc2OTk4MDQ4Mjk4LDI4MTY3Ljc4MTQ3NTY2MjI5NCwzOTI5OC4wOTIwMDg1ODM1MiwxMDc0OS44MDcyOTE1MzgwODcsMTExNTUuMzY2NDg2MjA3MzIyLDg3MTMuMjI5NzIwMDU4MzU2LDU1MzkuNTkyMjc2MzM2ODczLDM2ODkuNDk5NjYxMTc2MzA2LDQ2ODEuNDQ4MDg3OTYzMDg4LDg5NDkuMzEzMTg4NTE2MDY3LDQwOTEuMTI1MzcxMTIzNzcyOAorNDUsU2F0IDE2IE9jdCAxMCwxMDA5MC4yMDEzOTg5MDU4MjMsMTYzNjEuMzI3NzQ0MjQyNTUsMzY5MTAuMzA1MzkyOTg3MDE1LDEwMDE0Ni4wOTM0MTIxNjc0OCwyMTcxLjMwMTY1NDQ2NzE3MTQsMjAwMC45OTgzNDQ4NTI2MzM0LDExMTg3LjgxNjE4NTk0Mzk5LDEyOTAwLjA5NzI4ODEzMzA5LDY4OTAuOTU5MjgxNTYxNzQ5LDAuMCw5MDMxLjQ1NTkwMzYzMDQ1OCw1NDY5LjM4NzA1MTgwNjA5LDMwODU1LjI1ODE1NjY1Nzk4NywxNDE1MzguMjc4MjMzMjc5MywyMzg0OC4wNDA5NzU1MjE5MjYsMzQ3OTAuNDAwNDY0MDc5NzgsODczOC4zMzg2NTc1MzcwOTUsOTA3OS4wOTI5ODU2MjkyNDIsNzAzOS42Mjc0NTYyOTA2NDcsNDQ3OC4zNDk1NDA2OTMwMzgsMjk3My41NzQxMzY5MTkyODU2LDM3NzUuMTU4NzY3ODc0NTgyLDcyNDcuNzc2MzczMDg2MiwzMzExLjE4MjMxMTQxODI2MzUKKzQ2LFN1biAxNyBPY3QgMTAsODEzNC43OTA5NzExNjM4MTUsMTM0MDQuMDYyMTE4NDQxOTksMzI2ODQuNzIyMjY2NjAyNzM0LDg2MDMzLjEzNjI4Njc3OTYxLDE3NTEuMjgzNDk3NDAxNTk0MywxNjE3LjY2MzY1ODA3MTA5NTgsOTEyMS42MDg3NDY4NjY2NSwxMDYyNS41MDg4OTk2MTIyMjksNTU5Ni4wNjQ0NDU4ODc4MDQsMC4wLDc0NTYuODM1MjE0Mjk0OTQ4LDQ0MDUuMDQwNzcxNzQwNTA2LDI1NDk1Ljc1NjMzMzMwNzk1MiwxNDQ5ODcuODMwNDE5NTA4NTQsMTk5MzcuMjM4OTA2MjM1ODIsMzAxODMuNjEzMzEzMzU2ODg3LDcwODQuNTY1MzQxMDcwMjA0LDczNjcuNDM5Njc3ODAwOTUzLDU2ODIuOTM1MDcyMTUwNTg4LDM2MTcuOTU0MDcyMjMwODYzLDIzOTYuMjk3MTM1ODQxOTI1LDMwNDMuMTk5MjE3NTEzNjIzNCw1ODU2LjAzMTMzODIyMDY0MiwyNjc1LjMyNTU2MTAyMjk4MjYKKzQ3LE1vbiAxOCBPY3QgMTAsNjU2MS45MzIxNTgxMTU4ODUsMTA5MjEuMTU5ODE3NjU4MjgsMjgxOTcuOTg2NjA4MDI4Niw3MjU2NC4wMjUzOTYyMzI5MiwxNDEzLjI1MzIxOTEzNjkzMTIsMTMwOC4zMjMwMTQ1MjQyNjI2LDc0MTcuMDY4NDAwNTkwMzc5LDg3MDIuODAxMTE0ODc4NTE1LDQ1MzUuNDQ3MDc5MDczNTIyLDAuMCw2MTE4LjgxNjE5NjYyMTUxOCwzNTQ1LjkyMzg0ODIwMDA5ODcsMjA5MzEuMDAyOTk0NzY5MTE1LDEzOTk4OC44NTUwMTIyMDY0NSwxNjUxMC4yMjkxMDM5Nzg5LDI1Nzc2Ljg4NDgxMzMwMDY1NCw1NzMzLjI3NzI3MDMwMTAzMiw1OTY2LjA2NzEwMDg2MDg5NCw0NTg1Ljg4MjQ5NjgzMDY4NiwyOTIyLjAxODIyNzg5NjY3MTgsMTkzMS4zOTIwNjk2MjkwMTgxLDI0NTMuMDIyNjk0Mzg2NjEsNDcyMy45MDE1MDA5NDk3OTUsMjE1OS4xNjE3OTE2MDMyNjI0Cis0OCxUdWUgMTkgT2N0IDEwLDUyOTYuNjA3MzAzMzQwNTE1LDg4NjIuMTQyMzExNzc2NDY0LDIzODYwLjYwMDM2NzI1NzE4Miw2MDM3Ny4zMzM2MTk4NjUwNywxMTQxLjA1MDgyMDM1NzIyOSwxMDU4LjUyNDI1ODYyNzIwNSw2MDE4Ljc4MTMzNjk1MjczLDcwOTcuNDUxNzkxNjYxMDcsMzY3MC40Nzg1NjU3MzUyMTEsMC4wLDQ5OTcuMzcyOTE0NjgwMTAxNSwyODUzLjYyMzQyMzE1NzU5NDUsMTcwOTguNTU1MzQxMjM0OSwxMjg5NTEuNzAxMjk3NjkzNSwxMzU3My4wMzgyNTU3Nzk3MiwyMTc0MS41Mzk3MTY1OTAwMTQsNDYzMy42NTc2OTUzMzE5NTcsNDgyMy45ODA5MDI5MDgzNDMsMzcwMC4wNDA1Mzk5NzkyNDIsMjM1OS42NTk2OTM0MDcxMzYsMTU1Ny4wOTE2NDYzMTUwNDM0LDE5NzcuNTA5NjY2MTc5NzU0NywzODA2LjUyMjAzNjA4NzksMTc0MS4yNzM2MDU5NTc4OTQyCis0OSxXZWQgMjAgT2N0IDEwLDQyNzguNDM5NTQ2NTc1ODM4LDcxNzAuMjU2MjcyNTE5NDc1LDE5OTAyLjgzNzgyOTE1MzcyNiw0OTczNS4wODg0Nzc5NTYwNiw5MjEuOTYxNTQ5MTEyNDYzLDg1Ny4wMDAwOTE5MzQxNTU2LDQ4NzcuODI3MTczNTQyMzkwNSw1NzcwLjcwMTgwMDIyMDE2MSwyOTY3Ljk2MzUzNzM4Mzc1OCwwLjAsNDA2Ny43ODkwODY4Mjg3Njg2LDIyOTYuNjM2NDQwMDI2MDcyMywxMzkxNy43MTgwNzk0MzU0MzcsMTE0NTc5Ljk2Mzc1NTI4MTY5LDExMDk5LjEzMjA5NjMwMjY2OCwxODE2MS41Njg3MjE5MTI3MiwzNzQyLjE1MDgyNTM5NzgyNywzODk3LjAzNjg4MjQ0MzE1MzQsMjk4NS43NTcwMTYyODA5MTU2LDE5MDUuOTQ3NzA0Njg2NTI5LDEyNTUuOTY0MTY0ODk5MTMyMSwxNTk0Ljc0OTMwMzg1NzU0OTQsMzA2NS40MDMxOTk1NTUyOTksMTQwMy44MzIzNTIyNTQ5NjgKKzUwLFRodSAyMSBPY3QgMTAsMzQ1OC43NzMwNjM4MDQ5ODQzLDU3ODkuMjQyMjAzNDQ1MzQ4LDE2NDI2LjE2NDU3MzI1Myw0MDY2NS4yNTY0ODg3NTM0NzUsNzQ1LjQ5Mzk3NjU1NTE4NDEsNjk0LjI5NjIyOTQ0MzU1NTEsMzk0OS42ODUxODM5OTIxMzUsNDY4MS41MDQ3ODE5Nzc5OTc1LDIzOTguNjg2Mzg1NTY2MzI0LDAuMCwzMzAyLjk0MzM5MTMwODYyNCwxODQ4LjgxMzIwOTk2ODA4MjIsMTEyOTguMzM5MTc4OTY3NzkyLDk5MDk0LjYwMTEyOTEwODkxLDkwMzkuNjg3MjE2OTY0MjE3LDE1MDU2LjM1ODY5NTg2MTA2OSwzMDIwLjkwMjk5MDIwNDA3MSwzMTQ2LjUxODAxMjg5ODYxNjcsMjQxMC4xMDQ1MTM1MzMyOTQzLDE1MzkuOTg2NDc0NTMwNDkzLDEwMTMuNjU5MDk2NDkzODY0NiwxMjg2LjY3NzM5Mjg1MDkzNSwyNDY3Ljg2NzQzODk1OTA4MDYsMTEzMS42OTkwNjc4NjY0MworNTEsRnJpIDIyIE9jdCAxMCwyNzk4LjU0MTQzODI5OTMxNDQsNDY2Ny41MjIwNDMzNzgzMzQsMTM0NTAuNjQ0ODc2MDc0MjE3LDMzMDY3LjY2NDA1OTM5NjkxLDYwMy4yOTEwMTA1NzYyMjIsNTYyLjg5MTQ5MTUxMjM2MzcsMzE5Ni41Njk3Mjc2NjkwNTY2LDM3OTIuMDE5OTQ5NzYyMDU1LDE5MzguMjMwNTU4MDI0NzEzNywwLjAsMjY3Ny4yNjIyNjQ5NDQyNDc0LDE0ODguOTIyNDQ3NjA1ODQyNSw5MTU0LjQyODg2MDA2MDIwNSw4Mzk5OC4yODQ0ODg2MzcsNzM0MC42ODgxMzUzNTQ0MzYsMTI0MDguNzg0NzMwOTA4MjU5LDI0MzguMzc0MTAxNDE3MDk3LDI1NDAuMDAxMDczODU3ODI1LDE5NDYuMzM2NTQ2NDM5OTU1OCwxMjQ0Ljg4NzMzNjM3NDgwMzIsODE4LjY1NjM5NzQ5NjE1MjQsMTAzOC43MjgyNjU0NjIzNjgyLDE5ODYuNzc5NDc0ODY4Njk0LDkxMi40NTY0NjIwNTEzMzg1Cis1MixTYXQgMjMgT2N0IDEwLDIyNjYuMzg1MzUzNzg2MTA1LDM3NTkuNjkyMzk0ODIzMjk5OCwxMDk1MC4zNjQ2OTYxMzU4MSwyNjc4MS44MjE4MjA2MzMzNTUsNDg4LjYzMzcyNjA1MDk2NTgzLDQ1Ni43MTYxNzAxMTM3MjU2LDI1ODYuNTczMTgxMzg2OTU0LDMwNjguNDQwNTczOTYxNjc3NywxNTY2LjI2MjE1NTY4NzE3MDIsMC4wLDIxNjcuNjAxMzcwOTYzMTE0NywxMTk5Ljc0MTk4NzE0NDI1OTQsNzQwNy42MTkyNTM4NTAxMjgsNzAxNTEuMDU1MzYwNTc3NTIsNTk0OC40MTg0Nzg0OTk5MzYsMTAxODAuNTcyMTgwODEzMzg0LDE5NjguNDA5MzI0MzQ2OTIyOSwyMDUwLjQ5MDkxMzExMDM5ODcsMTU3Mi43MzE1MDY0NjAyNDYyLDEwMDYuOTMzODUzODgxNTM0NCw2NjEuNjY5OTg5ODc0NzU3OSw4MzkuMTMyODMxOTE0NTk0NCwxNTk5Ljc5OTAzNzUwOTI2MzYsNzM1LjkzMDk1MzczODE2MworNTMsU3VuIDI0IE9jdCAxMCwxODM3LjE0NjE3NDkyMzU3ODcsMzAyNi44Nzk3Njg4MjE2NzgsODg3Ni45MzY1NzMxMjUyNjQsMjE2MjguMDE5NDc1NjA4MiwzOTYuMTI0ODA2MTAyOTI4MywzNzAuODc3ODA1NzA2NDM1NiwyMDkzLjEwMzI4Mzc5OTgzODcsMjQ4MS40ODIyMTYyNzc5OTEsMTI2Ni4wMTM4Nzc3MTM2NTI4LDAuMCwxNzUzLjczODkxNTM4OTgwNjIsOTY3LjM1ODE2MjcxNzI0MjMsNTk4OS4xMTExMDQ1MjgyNTA1LDU3OTQ1LjUwMjY2ODAyNDcxLDQ4MTMuMTY0NjkzMDkzNzMxLDgzMjMuNzgyNDE1NTk2MjY2LDE1ODkuNTE1MDU5NTQzNzI1OCwxNjU1LjczODI1MDg4OTI1NjMsMTI3MS43MTMyNTU2MTM4NDk1LDgxNS4wMjM3MzQ4NzQ2OTU3LDUzNS4yMjg3NTIyNTMxOTY1LDY3OC40MDU0NDYxOTg2Nzc0LDEyODguNjc3ODEzNDAyMDY3Miw1OTMuODM4NDk5MzY0NTg4OAorNTQsTW9uIDI1IE9jdCAxMCwxNDkwLjY0NDk0Nzg2OTk5MTcsMjQzNi40MjgwOTMzOTkyODcsNzE3My44OTI0MDQ2MTg4NjQsMTc0MzAuMjQ2NzE1NDEyNywzMjEuNDMwNjU3MzM2NzUwNzYsMzAxLjQzNTg5Njk2ODE5MzYsMTY5NC4yMDkyNDEzODkwMjM0LDIwMDYuMzA1NzQyMDMyMjQ4NiwxMDIzLjc1OTU0NjI1OTM1NzIsMC4wLDE0MTguNDE4ODY0OTQ1MjM5Miw3ODAuNTYzMzAzOTAwMDQzOSw0ODM5Ljk5ODIxOTgzMDM2Niw0NzQ3NS41MjM0NDIxMDU1MSwzODkwLjg3MDIzOTQ1NjIxODMsNjc4OC4xNTE2Njc2MTE0NCwxMjg0LjE0NTQzODczNTM2NDIsMTMzNy41NDEwMDI3NjMyMjE3LDEwMjkuMDk3OTA4Mzc5OTI0OCw2NjAuMTkyNzYxNDg3MzE0OSw0MzMuMzI5NjE5OTQxODQ1Niw1NDguOTE0NDUxOTE2MDYxMiwxMDM4LjU5NTg3Mzg2NzM1Miw0NzkuNDY0MjU2NDY2ODQwMQorNTUsVHVlIDI2IE9jdCAxMCwxMjEwLjY5Njg0ODUzNTU1OCwxOTYxLjI3MDYwODYwNTE0MjYsNTc4NC44NTM4ODA2NTgxNTgsMTQwMjcuNjkxMzAyMjE0MDg3LDI2MS4wNzIzOTAwMzk1OTQwNCwyNDUuMjE3OTkzMDYzNjQzOTIsMTM3MS44OTkyMzY3NjA4ODI2LDE2MjIuMTUyODIxMjIyMjIxMyw4MjguMzIyNjA1ODgzODk0MywwLjAsMTE0Ny4xNTY5NDI3Njg0NDg1LDYzMC4zNDg0NTI3NzI1MDU3LDM5MTAuNzE3OTU1OTg2NTQ0LDM4NjY0LjE5OTcxMzQ4NDg2NCwzMTQzLjU4MzQ4MTAwOTkwNCw1NTI1LjQxOTc1NTkyODQzMiwxMDM4LjA0NzM1MzQxOTM5NzUsMTA4MS4wODkyOTUxNTAzMDcyLDgzMy40NjA4Mjk4NDc3MjMxLDUzNS4yMTU2NTEyMjg3NzIzLDM1MS4xNTMxMjM5NjEwODUwNCw0NDQuNTI3MjIyNjEwNDQ4Nyw4MzcuNTY4NTc3ODQyODM0MywzODcuMzgzNDQzNTI5OTUyMDUKKzU2LFdlZCAyNyBPY3QgMTAsOTg0LjMxODE4MTA3NzM3NjMsMTU3OS4xOTAxNTgzNDY4MDMsNDY1Ny43NDE1NzQ4MTU2MTcsMTEyNzkuNDI2NTY0NjYzOTY3LDIxMi4yNTcyNDQ3MzQxMTg4NywxOTkuNjcwNTUyNTA3MTc1NTYsMTExMS41MDQyNTI5ODE2OTMzLDEzMTEuODYxMzI3MDA4OTA2LDY3MC42Mzg4NDQxNzA5MTczLDAuMCw5MjcuOTM5MTQ1OTgyMTcyNiw1MDkuNDgyNzU0NTU4OTA1NjQsMzE2MC4wOTAwOTE1Mjc3NTc1LDMxMzQ5LjUzMTIwMjYxMzEzNiwyNTM5LjI0NDg5MzA3MTY1NDYsNDQ5MS42MTE4MjEyMzkwMzMsODM5LjY4NDYxNjY2OTY2NzMsODc0LjM4MjE0NTU3NjMyOSw2NzUuNjEyMDg3NTY4NTYxMyw0MzQuMjc1OTAyMzY1OTg1ODcsMjg0LjgzMTk1ODgyMzI3Njg2LDM2MC4zMTk2MTY5MDQ4NDg2Niw2NzUuOTM0MjQ1MjU2NzUzMiwzMTMuMjI0MTk4NDM3NDg2ODUKKzU3LFRodSAyOCBPY3QgMTAsODAxLjA4OTYwNTE5Mzg5MDYsMTI3Mi4wNzkyNzA1ODg4ODEsMzc0Ni41OTQ2MTEzMTUyODEsOTA2NS4yNTUyODU3NDA5NDUsMTcyLjc0MjcwNDM4MjMwMjA3LDE2Mi43MzgwMDc1NTY4MjU2NCw5MDEuMTEwNDc1MTE4NTY4OCwxMDYxLjM1MzAyMjQ1NDkxMDYsNTQzLjM3ODI5MzE3NTEwNzIsMC4wLDc1MC44ODYwODQyNDY2NTIsNDEyLjE2ODAzMjM5MzMwNzYsMjU1NC4yMTAzMzE3NTg0MzM4LDI1MzM3LjMyMDE2Njg2ODQwNSwyMDUxLjE0NDE5NTExNjUxNCwzNjQ3Ljk5ODI1MTY2NDQzOTUsNjc5Ljc0NDQ0ODc4MjMzNzMsNzA3LjcyMzE5MTUxNDc3NzksNTQ4LjE2NTQ3ODA3NDUxNzksMzUyLjY5NDU2MDM1MjUxMzEsMjMxLjI2MzM3NDYyNDYyNTYsMjkyLjMzOTQ0MjA4MDg4NjYsNTQ1LjkyMTIzNjA0NTU2OTIsMjUzLjQ2OTE4NzUwOTM3Mjg2Cis1OCxGcmkgMjkgT2N0IDEwLDY1Mi42NDU3MDIzNjExMTE1LDEwMjUuMjU2ODI5NjYzNzUyOCwzMDEyLjAyNDQ3MDYyODQ2NCw3Mjg0LjU0Mjg2OTQwOTU4NDUsMTQwLjcyNzQxMTkzMTMwMiwxMzIuNzY1Mjc2NDc3MTAyOCw3MzEuMDY5MzgzMzQzNDgzLDg1OS4xNDYyMDIxODAzODE1LDQ0MC42MjU3ODIzMDMxOTE0LDAuMCw2MDcuOTI1MzU4NDY5Mjg0MiwzMzMuNzU3NTY5MjkwNTA5OCwyMDY1LjM1MjgxMDMxMDM4NDUsMjA0MzEuNDI4MjUyMDUwMDEzLDE2NTcuMjUwNDAwMjkxMzE1NCwyOTYxLjI2MDM2NzIzMTc2NjQsNTUwLjcyMzA1NzQ5OTU2ODgsNTczLjI5NDcyNjc1OTgwNjMsNDQ1LjE4NzMzNDkyMTI0OTEsMjg2LjcwOTMwOTQwNTg4MzMsMTg3Ljk1NzkwMjA4MDA5NTc4LDIzNy40MTUwNjA3Mzg2ODkwOCw0NDEuMjg3OTgxNTkxNDMzNDQsMjA1LjI5MTg3NDAxNDU3NTcKKzU5LFNhdCAzMCBPY3QgMTAsNTMyLjI2NjIzMDA5ODU3MDMsODI2Ljg2NTI5MzQzMzcwMTQsMjQyMC45NDAzMDQzMzA0NzM3LDU4NTQuMTI4NjEwMTMxNzYsMTE0Ljc2MzY3MzM2NDExMDAzLDEwOC40MTkyNTA3NTcwODI4Niw1OTMuNTgzMTMxNTc2NDUwOCw2OTUuOTE2ODE4NzY2NjcxOCwzNTcuNjE0ODE3NDU1NjgyMywwLjAsNDkyLjQ5MjA1NzM2MjA4MTYsMjcwLjUyODM5ODk1MTYyNSwxNjcwLjk1NzQ3MjYzNTk0NjUsMTY0NDkuNTQ2NDMyMTUyODYsMTMzOS41MjU3Njk0OTc4Mjg4LDI0MDMuMjEwODQ0NzY2OTIwNyw0NDYuNTgyMDU1OTY4Nzc0OSw0NjQuODAzMDQ1NDE4NjQ5MTYsMzYxLjkxMTc2NjIxODk4OTU2LDIzMy4yOTUzMjgwOTA0NzcwMywxNTIuOTE3NjY1MjQ0MTAyNDcsMTkzLjAwMTAzNDk2OTYzNTA3LDM1Ny4wMjY5NjkxMDIyNjgyLDE2Ni40MjI1MTY4MDI1NzI1NworNjAsU3VuIDMxIE9jdCAxMCw0MzQuNTQ5MDIyNjgxMjY3Nyw2NjcuMzU0MzQwOTgyOTYyMSwxOTQ1LjkyODAxODg5MDY5LDQ3MDUuOTM2NTM0OTY2Mjc1LDkzLjY4NzMzODczMjk5NDkyLDg4LjYyNTY0NTM4MDgxNjc5LDQ4Mi4zNTg2NjgzNDQyOTkyNSw1NjQuMTE2NzQ5ODQ0NTg3NywyOTAuNTA4MjE3Mzg4NDI1MSwwLjAsMzk5LjI2NTY5OTg2MTMzODcsMjE5LjQ5NzY5NDMxMjc2Njk1LDEzNTIuNzM1NDI1MDU5MTE0NywxMzIzMC4xODU2MDg3OTk5MiwxMDgzLjI4MjM1NTc1MTg5MjMsMTk1MC4yOTM2NTk4OTU5NjIsMzYyLjQ2NjMyNzQ1ODczMzQsMzc3LjE4NjMwOTg1ODIxNTU3LDI5NC41MTA2NTAzMzYwNzYsMTkwLjAyMDUzNTM3ODMzNTE4LDEyNC41Mzg2OTEyNDEzMjUxMSwxNTcuMDUzOTY5ODU0NTI1NCwyODkuMTIzMjkzMTMwNDIwOTYsMTM1LjAzOTIwNjQxOTYyMTQyCis2MSxNb24gMSBOb3YgMTAsMzU1LjE0ODMyMTU3NTI5NTk0LDUzOS4wNDcyNjQ0ODQxODE4LDE1NjQuNTAzNDY5MzI0MDAzMiwzNzg0LjYyMTE2NTAxNDgyOSw3Ni41NjE2NDM4MDUxNzA4NSw3Mi41MTgyNTM4ODQ1MTY5NywzOTIuMzIyMjE5NDc5NDA5MSw0NTcuNjQ5Mzc5NTAxNTg0ODYsMjM2LjIxODY5ODcwNTAyMTksMC4wLDMyMy45NDUxNzIzODYxMzE4NCwxNzguMjc1MTcyMTIyMzYyMTQsMTA5NS45MDA0MzYzNzQ4MTMxLDEwNjM0LjYyMjEwNjY4MDg2OCw4NzYuNjA3OTg1MzEzNjM0MiwxNTgzLjAwMTEwMzMyMDUwNTMsMjk0LjQ3Mzk4MzI5Njc3MDI2LDMwNi4zNzU4MTM0NjE3ODE3LDIzOS45MDgzOTQwNzAwNjA4LDE1NC45Mjg5NDAyMjg4NzU5LDEwMS41MzI1OTgyMTc5NTIxNCwxMjcuOTMyODQxMTYyOTIwOTUsMjM0LjM1ODg5NTQyNTQ0ODk0LDEwOS42Nzk2ODYwNTExNjc4NQorNjIsVHVlIDIgTm92IDEwLDI5MC41NjU0NjgzNjE4MjY2LDQzNS43ODE4OTk3MjQ3NjkzLDEyNTguMzYwMzY2NTIyMjE4NiwzMDQ1LjQxMzE4NjMwOTQwNyw2Mi42MzIyNDYzMTM3Nzk0NSw1OS4zOTgxOTQ5MDc5NzkyNywzMTkuMzg1NDExNTQwMzU1MywzNzEuNTk4MzA2NzUxMTA5OCwxOTIuMjYyOTc4ODYxODM3MSwwLjAsMjYzLjA1OTYxOTIwNTY2OTEsMTQ0Ljk0NDcxNDg2NzQ5ODIyLDg4OC41MjEzODQ3ODI4MTIyLDg1NDYuMTMxMzAyNzk1NzQsNzA5Ljg3MDE1MzQ2NTc0MDcsMTI4NS4yODc0MjkwOTI2MTY4LDIzOS40Njk3NzU1MDI4NTQzNiwyNDkuMTAyMDEzMDE2NTcxNjgsMTk1LjYzMzA1MTgyODA1NDcsMTI2LjQ0NjgyMDk5NzMwMDIyLDgyLjg2Mzg3ODEyNzExNzMyLDEwNC4zMTkwODY5MDI2MDA4MiwxOTAuMTU0NTUwMTg5MTgyOSw4OS4xNzAyNDU2NDMzNTk1NgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5hdXRvbWF0aWNleHBlcmltZW50L3Jlc291cmNlcy9BdXRvbWF0ZWRFeHBlcmltZW50RXhhbXBsZS9SZWNvcmRlZCBTaW11bGF0aW9ucy9SZWZlcmVuY2UvSW5jaWRlbmNlXzAuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5hdXRvbWF0aWNleHBlcmltZW50L3Jlc291cmNlcy9BdXRvbWF0ZWRFeHBlcmltZW50RXhhbXBsZS9SZWNvcmRlZCBTaW11bGF0aW9ucy9SZWZlcmVuY2UvSW5jaWRlbmNlXzAuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjJjMjQ0MDEKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmF1dG9tYXRpY2V4cGVyaW1lbnQvcmVzb3VyY2VzL0F1dG9tYXRlZEV4cGVyaW1lbnRFeGFtcGxlL1JlY29yZGVkIFNpbXVsYXRpb25zL1JlZmVyZW5jZS9JbmNpZGVuY2VfMC5jc3YKQEAgLTAsMCArMSBAQAoraXRlcmF0aW9uLHRpbWUsCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmF1dG9tYXRpY2V4cGVyaW1lbnQvcmVzb3VyY2VzL0F1dG9tYXRlZEV4cGVyaW1lbnRFeGFtcGxlL1JlY29yZGVkIFNpbXVsYXRpb25zL1JlZmVyZW5jZS9JbmNpZGVuY2VfMS5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmF1dG9tYXRpY2V4cGVyaW1lbnQvcmVzb3VyY2VzL0F1dG9tYXRlZEV4cGVyaW1lbnRFeGFtcGxlL1JlY29yZGVkIFNpbXVsYXRpb25zL1JlZmVyZW5jZS9JbmNpZGVuY2VfMS5jc3YKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uOWFmOWQ5YQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuYXV0b21hdGljZXhwZXJpbWVudC9yZXNvdXJjZXMvQXV0b21hdGVkRXhwZXJpbWVudEV4YW1wbGUvUmVjb3JkZWQgU2ltdWxhdGlvbnMvUmVmZXJlbmNlL0luY2lkZW5jZV8xLmNzdgpAQCAtMCwwICsxLDYzIEBACitpdGVyYXRpb24sdGltZSxTRS1BQixTRS1BQyxTRS1CRCxTRS1CSCxTRS1DLFNFLUQsU0UtRixTRS1HLFNFLUgsU0UtSSxTRS1LLFNFLUtQLFNFLUwsU0UtTU8sU0UtTixTRS1SSSxTRS1TLFNFLVNLLFNFLVNULFNFLVQsU0UtVSxTRS1YLFNFLVksU0UtWgorMSxUdWUgMiBOb3YgMTAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzIsRnJpIDMgU2VwIDEwLDMuODE1NTM0NDQyMjIzMzAwNiwyLjIxMzY0OTU5MzQ5MDUzMjhFLTksMi4yOTU1MTc3MDQzMDIyMzUyRS0xMiwyLjE5MjYxNzk2OTM5MTE5MzVFLTExLDAuMDM1ODQ3ODk1OTg2MzAwMjUsMC4wMzI5MzEwNzM4NTQ4ODE4Miw3LjkzNjMyNjE2NjE3MDI3NEUtNyw0LjEyOTAwNjQzMzg3ODI3MzVFLTksOC4xMDY1MDMyNjc2NDkwMjRFLTcsMC4wLDIuMDkwMTI0Njg5NTY1NDU4N0UtOSwzLjU2MDYxNDM0NDgzODAyNTRFLTYsNi43MTEzMDYzMTY5NTc1MzY0RS05LDYuMDM1ODQ5MTk4MTk4MjlFLTE0LDIuMDYzNjg3NDg1NzQzNTkyRS05LDIuMzUzNDg0NzY0NTA5OTM0M0UtMTEsOC42ODY5OTQ3NzMyMTgyODVFLTcsOC41OTM4MDk5ODA0NzQ3NTRFLTcsMi4zMTE4MTUxNzU1NTg0NTQ3RS00LDIuMTQ4MTM5MDUzMDA2NzI3RS00LDQuMzcwNzUxNDc5ODYwNzYyM0UtNCwyLjI3OTgzNzMzMzcyODE3MzVFLTQsNi42NzA3MTA5NDQ5NTIyMjVFLTcsNi4yMTc2MTIwNDE4NjUzMTlFLTcKKzMsU2F0IDQgU2VwIDEwLDYuMDY3MzIwMDU2NzE5NDYyLDEuMDg5MDc2MTUwNzI4NDI4OUUtNywyLjQ1ODQ0MzYwNjI4ODAwMTVFLTEwLDIuMzAwNzAyNjA3MDQ0MDM5RS05LDAuMTU0MTQyNTkxOTY1MTU5NDUsMC4xMzg5Njk2OTc4NDAyNDI4LDEuNzU4NTU1MDk2MjI3MDI5NUUtNSwxLjk3NDQ0NzcxMTM1NTcxMTRFLTcsMS43OTUyMzM2NDk0NDg5MjE1RS01LDAuMCwxLjAwMzg0MTEyODEwNjAyMTJFLTcsNy44OTg0MjA2NTM3ODc3MTJFLTUsMy4yMjcxMzMyMTMyNzQ1NTA0RS03LDEuMzc1NzAwNDg1ODM4NDk2RS0xMSw5LjkyOTEzNjQwOTY3MTk5OUUtOCwyLjQzMjg5MjMzNDI1Nzc0NzdFLTksMS45NDIwODc2MjU3Mjc1MTlFLTUsMS45MDgxNjQwMzYwMzA2NzA4RS01LDAuMDAyMzI0OTMzNzEzODkyNDE0NywwLjAwMjE1Mjg0MjA3NzAzNjc3MywwLjAwNDM3MjQ5MzUwMzk2NDE1NSwwLjAwMjMyMjg3Njg1MTc1OTk0MiwxLjUwODYzNjgyMTkwMDIyNTVFLTUsMS40MDcwMjQ5MzIwNTc5OTU4RS01Cis0LFN1biA1IFNlcCAxMCw5LjY1NzY0OTIxMTE5MDc2MiwxLjE1MTQ2NDIzNTgzMjk1MjJFLTYsNC4xNDM2NDE4NTc4ODcwNjNFLTksMy43OTU4MzQ0ODUxNzA5NDRFLTgsMC4zODIxMzYxNDkwNDIxNjY5LDAuMzM3OTA1MTM4OTMyMjk3OSwxLjEzNjEwNTgyODY3MjE2NjRFLTQsMi4wMjU1NDY5MTAzMjg2NjM2RS02LDEuMTU4OTcyOTgwMjQ5NDU3RS00LDAuMCwxLjAzNDU5NzI0MDEwNzg4OTVFLTYsNS4xMDc0NzQzMDYxMTMxOTdFLTQsMy4zMzAzODcyODczMTg5NzJFLTYsMy41NzAwMDU3Mjk2MzgzMjE0RS0xMCwxLjAyNTUxOTMxNzM1ODQzMkUtNiwzLjk1MDkyMjgxNTg3OTQwNkUtOCwxLjI2NjkyMTg2MTY5OTk5MUUtNCwxLjIzNTU3MjU4MjI0NTgyMThFLTQsMC4wMDkzNTI5NjgxMDE1MTEzNzksMC4wMDg2Mjg1NTA2MDU4ODk0NzgsMC4wMTc0ODM1OTEwMjQ5NDUwNjMsMC4wMDk0NzMzOTg1NjIzNTczNTQsOS45NjE2MzA1MzkyNjA1NzhFLTUsOS4yOTQ0NjQ3OTg3NTk2MzJFLTUKKzUsTW9uIDYgU2VwIDEwLDE1LjM4NjU2MDU1Njg3NjA3Myw2LjYwMTg5NjAxNDcyNTk0OEUtNiwzLjMwNDk0MTMxMTE0MDM5NUUtOCwyLjk2MjM2MDU3MjAzMzc1MkUtNywwLjgwMTc4NTI2NzA5MzY0NDgsMC42OTU5NzQ0NjQxODIyMjIsNC41ODAwMjAxNDc3ODUyODlFLTQsMS4xMjYyNDUyNjI1ODY2NzZFLTUsNC42Njg0NTQwNDA4MDg0MzZFLTQsMC4wLDUuNzc5NzcxOTU4NzI4NjE1RS02LDAuMDAyMDYwNDA0OTY4Nzg1MzA2LDEuODYzMTA0MjgzMjAxNDY4NEUtNSwzLjgyODY0OTgxNjUxNjQ2MjVFLTksNS43NDI0ODA1NDU2OTYzNzRFLTYsMy4wMzMyNTcxNzc0Nzg3NzFFLTcsNS4xNTgyMzQ1MDgyNjQ3NTNFLTQsNC45OTI3NDAzMDQ5ODQ2MTZFLTQsMC4wMjcyMTc1NTQ1MzQ1MjQ0NzgsMC4wMjUwMTYxMTg1MjgxOTg2MDcsMC4wNTA1NDg4MDY4MjQ5NzgzLDAuMDI3OTMzMDA4MTg1MTU5ODY1LDQuMTA0ODc2MzgxNzA2OTc3RS00LDMuODMwMTczOTMyNjE1MDk2NkUtNAorNixUdWUgNyBTZXAgMTAsMjQuNTM0MjY0MzQyNDAxNzgsMi43NDkxOTYwODc1NzQ5MDJFLTUsMS43NzQwODg5ODAyMDc1MzlFLTcsMS41NTU5NTc4MDUyMDE1MDQyRS02LDEuNTUxMTMwNTgzMTk4OTkzNCwxLjMyMzExMzQxMzMyMjY2MjUsMC4wMDE0NDk3MTQ1NDIwMDM2NzQ3LDQuNTQ4NjgyNzA1MjM5Mzg5RS01LDAuMDAxNDc2NDA5MjY4NjI5NTk2LDAuMCwyLjM0NTM0OTA3NDI0MjUzMDhFLTUsMC4wMDY1MjQ0ODk5NzkyMTg3MTIsNy41NzA5Nzk2NTEzMjcwNTJFLTUsMi41NjE5ODMxNTkxMzE2OUUtOCwyLjMzNjA1NjI1OTg4NzE2NjhFLTUsMS41NjY5MDMzMjM2NTAwNzAzRS02LDAuMDAxNjQ4OTQ4ODcwNjc5ODEyOSwwLjAwMTU4NDA5Njc5MTI4MDUyNjIsMC4wNjczMzg1ODc2NjIzOTc5MywwLjA2MTY2NDY2NzgzMTUzNTY4LDAuMTI0MjEzNTcyODY1NjkyNDYsMC4wNjk5NzI2MTIxOTA5MzQwMSwwLjAwMTMyNzY1NzE3NDUzNzI5NzcsMC4wMDEyMzg0MzU4Nzc2NDYxNjAxCis3LFdlZCA4IFNlcCAxMCwzOS4xNTAxMTA4MjAyODk4NTQsOS40MTk3NjA4ODYzODM1MzZFLTUsNy40Njg2ODgwOTY4MDk0OTlFLTcsNi40MTA1MjAyODI0Mjg3MTVFLTYsMi44NjEwNDQ5MTU5MzAzNjc3LDIuNDAwODA5NTE0ODEwMTk4NywwLjAwMzk2NTA4MjA1ODY4NDE2MjUsMS41MTIwOTc0MDQwNzgzNTA1RS00LDAuMDA0MDM0Mjc5MjU2ODgzNTg4LDAuMCw3LjgzMjkzNzg1NDg4NzE5OUUtNSwwLjAxNzg0NzQyMDA3NDAxMDM2NywyLjUzMjE5NTAxNDgwMDg4ODVFLTQsMS4yODE3NTgwMTkzNTQ2MDEzRS03LDcuODIyNTAwNjM4MzI5NzczRS01LDYuMzQ4MzcxMDExMDYyNzU4RS02LDAuMDA0NTU0MjkwNDQ2MjY0Nzg1NCwwLjAwNDM0Mjg1OTk3MDE1MTUxNywwLjE1MTIwNjk1MzIxNjQzMDg1LDAuMTM3OTY1NTY3NzU4Mjk1NDcsMC4yNzY5NDk5MDUxMzM0NDAwMywwLjE1ODk2MjY5Mjk0OTI3MTIzLDAuMDAzNzA4NjU4ODgyNDY1ODMyMywwLjAwMzQ1NzE3MjIwOTIxNTExMDYKKzgsVGh1IDkgU2VwIDEwLDYyLjUxNTQwMjE2ODQwNjE1NSwyLjgzMDQ1NzE5Njk1MDg3NTRFLTQsMi42NjgwNTM3MjQwMzcyMTkyRS02LDIuMjQxNzQ2MzMxOTg0MjcwNkUtNSw1LjExNTExNDUyNzA1OTgxNCw0LjIyNzA3NTkyMTU4NDQ0NSwwLjAwOTgzNTc1MTE0Nzk3NzIzNyw0LjQwOTk2MDg0MTYyMTcwN0UtNCwwLjAwOTk5NzQwNDg3ODU2MTU0MSwwLjAsMi4yOTQ5NjU3ODI2MDMxNjJFLTQsMC4wNDQyNjY3OTA1ODEzNDIsNy40Mjk5NTkwNDI0OTEyMjdFLTQsNS4yNjU4NTc1MjUwMzMwMTRFLTcsMi4yOTgxNzkwNTcwMDM0MTgyRS00LDIuMTgyOTcwNzU0OTI1ODc2RS01LDAuMDExNDA2NTgzNzU1MjgzNDM0LDAuMDEwNzk4MTc4MTkyNzQxMjQsMC4zMTgzOTQ4NjY1NzM1MTg4NCwwLjI4OTQ3NDY5NDY3NTk4Njk3LDAuNTc4OTA3Mzc0ODkzMTI0MiwwLjMzODM4MjAwNjM3NTQ1MjksMC4wMDkzOTA5MzE4NTIxMzI2MjUsMC4wMDg3NDUyNjQzNTI5NDQ4NjcKKzksRnJpIDEwIFNlcCAxMCw5OS44ODQzMjk5OTQ5Mzk5Niw3Ljc0Mzk4MTE0NTQ3NTMzRS00LDguNDc1MzU2MTM1NTMwNTA2RS02LDYuOTcyOTc0Njg4NDE5MjZFLTUsOC45NDg0ODg1MTkzNjk3NzUsNy4yOTAzNjMzODgzODgwNCwwLjAyMjc2MzIzMDUyNjQyMzk1MiwwLjAwMTE3MTYzMjUwMzc1NDM1MDIsMC4wMjMxMTI4NjYxOTI0OTUxNywwLjAsNi4xMjQ4NTQ3MzU1NzAwMTdFLTQsMC4xMDI0MDc2NDYzMjI0MjEzLDAuMDAxOTg1ODU2NjA0MzE1Njg1NCwxLjg3OTA0NDYyNTg1NjM0NjZFLTYsNi4xNTA4OTY5OTg4MzcyNDZFLTQsNi42NzY5MTY5NjQxMzM2NTVFLTUsMC4wMjY2NDkwODg5MTQzNzI2MiwwLjAyNTA0ODUyNjU2Mjc4MTYzLDAuNjQwNjg0OTk0MDY5NTY4MSwwLjU4MDQ0NzAyNjEzMTA5NTQsMS4xNTYxMjQ0MTM4MDc2NTk4LDAuNjg3ODIwNDE3MTU0MDIyMSwwLjAyMjE3MzE5NjE4OTg1OTY5NywwLjAyMDYyMTI5ODQ3NDQ0OTY2NworMTAsU2F0IDExIFNlcCAxMCwxNTkuNjY3MzIzNzUwMTk0NDQsMC4wMDE5NzM5NzI1ODI0NjI1ODczLDIuNDYzNDE1NDMwMTIxMTAyNEUtNSwxLjk4NTIxMzU1NzgyNjc3MkUtNCwxNS40MDYxOTQzNTcyMTE1NjYsMTIuMzg2Njk3OTE0ODA2Njk0LDAuMDUwMDA4Mzk4ODExNTk2MzQsMC4wMDI5MDE0ODA2MTM3ODEwODE2LDAuMDUwNzIwNTcwNzQ5NTM1NjQsMC4wLDAuMDAxNTIzNTQ0MDA4NjQ2NjI4MywwLjIyNDgzNTM3MDY0MzkwNzgsMC4wMDQ5NDcxNzA1NjQ2NTgyMjcsNi4wMjYyODQ1MjU3NzE5MjlFLTYsMC4wMDE1MzQ0ODI0NzU3NDM4ODAzLDEuODY5MTc2NjQzNzM3NDk1NUUtNCwwLjA1OTA4OTM2NzAzOTQyNzYyLDAuMDU1MTU1MjY1OTExOTU0NjQsMS4yNDYzNDYzNjg4OTI1NDMxLDEuMTI1MjM5Nzk3MzU1NjU1NiwyLjIzMTYxNjE5MjgyOTk0LDEuMzUwNjE0MzkyNTM3MDI2LDAuMDQ5NjcwNjM1NTk1ODA4NTA0LDAuMDQ2MTE3NDYwODE0OTE3NjIKKzExLFN1biAxMiBTZXAgMTAsMjU1LjMxODA1MjAzODk4MjQ3LDAuMDA0NzY1NzA0MzU1NDQ5MDkxLDYuNjg4Mzc0MTQ5NTAxODRFLTUsNS4yODExODM4NTI1ODM0NUUtNCwyNi4yMDc1ODE2MTQxMDYzMywyMC44MTU3NTcwOTYxNzIzNDQsMC4xMDU1NzgxODAxMzQ5OTQ3NywwLjAwNjgwOTIzMjA3MDQyNjY2MSwwLjEwNjk1NjgwNTQwMjM1MDA3LDAuMCwwLjAwMzU5MTA2MTg4MDE1NDU1MywwLjQ3NDIzMzQ0NDM1MjUyMjIsMC4wMTE2NzgwOTY0NjExNDc5MzMsMS43ODA5NTk4MDI0MjI1OThFLTUsMC4wMDM2Mjc4NTA5MTU0NTUwODczLDQuODg5OTM1NzgwNDY5NjMzRS00LDAuMTI1ODgxNTI3NDE1ODY4NiwwLjExNjcwNDk4MDk3NTc5NDYzLDIuMzYyOTAzNjAzMjMxODQ0LDIuMTI2MDc4ODM2MDAxNTE2LDQuMTk3Mjk2NzAxNjQ1MzQzLDIuNTgyODUxMTg5ODcyMjg1NywwLjEwNjg2NDkwNjU2NzEzODc2LDAuMDk5MDMxMzI4NDQzMzg2MjUKKzEyLE1vbiAxMyBTZXAgMTAsNDA4LjMyMTQ1MjI5OTMyNzUsMC4wMTEwMTMyMDgxNzM5MjQ0MzksMS43MTg3NTI2OTYwMjA4NTgyRS00LDAuMDAxMzMwMTgzMTI0NDU4NDYzNyw0NC4xNTkwNzQ4MTM3MTMxMDQsMzQuNjgyNjMyMjEzODc2OTE0LDAuMjE1OTA2MDUyNjE4NTE3NTksMC4wMTUzMDM3MTAwOTIyMzE0NiwwLjIxODQ1OTg0MDcyNjczOTA1LDAuMCwwLjAwODEwNTM4OTE0MzQyNTExOCwwLjk2ODY1Njk4MDc3NDcwNzMsMC4wMjYzOTgxNTIwOTM0OTIzNTcsNC45MjcxMjE0Nzc1MzExMTNFLTUsMC4wMDgyMTQwMDg4NDcxOTQ1MTQsMC4wMDEyMTEyMzE1NDkwMjA4NDQ3LDAuMjU5NzA2MjI1MDYxNjA0NSwwLjIzOTE4NjQyNTQyNTU3MjI1LDQuMzg4OTk3NTcxOTYwNjY5LDMuOTM1OTMxMTg4NzIzOTA4LDcuNzMyOTYxMDE1MzI4NDY3LDQuODM1ODk3OTU2NjA1OTYxLDAuMjIyNTg0MTY0Mzk5MjY4NDUsMC4yMDU4MTg1NTI1OTY3MjQ5CisxMyxUdWUgMTQgU2VwIDEwLDY1Mi44OTMwMDE4MDE4NzIxLDAuMDI0NTU4NTcxMDY4NDM1NDUzLDQuMjIyODQ1NjM4NTAyMjk0RS00LDAuMDAzMjA0Mjk2Mzc2OTExNDYyLDczLjgzMDk3MDUwMTIxMDMyLDU3LjM5Mzk1ODIxMjI0MTgyLDAuNDMwMjU2NjI0NjMyNjkzMSwwLjAzMzIwNjIzMjkyMDIzMDQ1NywwLjQzNDc5NjcwOTk3MjcxMTcsMC4wLDAuMDE3NjYwODExNTY5MTUwODg1LDEuOTI3NTU0Njk5OTA3NTkxNCwwLjA1NzYwNTM0ODAyMzk5NzkzLDEuMjkxNjQ3ODAyMjQxNjgxRS00LDAuMDE3OTU0ODcxNDMyNDk0MTI1LDAuMDAyODY5NTcwNDcwNzk4Mjg3NiwwLjUyMjAwODUwNTI5MDM0MzEsMC40Nzc2Nzk5ODIwNjM3ODYxLDguMDE4NjU3ODE1NTA1NjYsNy4xNjcyNjE4NjMyNjA3ODksMTQuMDEwMzM1MDI4MjY3MTIyLDguODk5NzUzMDgwNzM5MzI3LDAuNDUxNTMyNjc0NDIxMDg4NzQsMC40MTY1MDczODgxNTg3ODQyNAorMTQsV2VkIDE1IFNlcCAxMCwxMDQzLjI1ODA3MDk3ODQwMTcsMC4wNTMxNjcxNzgyOTM5MzE2OSw5Ljk5NTg4NDcwNzE5NjE0NEUtNCwwLjAwNzQzOTA2MTEyOTU2OTcxNSwxMjIuNjI0NDI0NTQ5MTY5NjIsOTQuNDM2MzYzMTI0MTUyNTgsMC44MzkzMjgzMDA1NTcyNDg3LDAuMDY5OTg3NDA4NDgyNjg5NDcsMC44NDcwNzI3NzA5OTU0NDU2LDAuMCwwLjAzNzM3NTMwNjY3OTM1MDcyNSwzLjc1MzczNDk1MDkwMzQ0NiwwLjEyMjA5MjYzODQ4NDI2MTY4LDMuMjM4MjYwMTg0NzEwNTA5NUUtNCwwLjAzODEyMjgxMjU1MzM3OTE5NiwwLjAwNjU1MjQ3OTE4NjI5NTA5MSwxLjAyNjg2NDAyMTc1OTY2MSwwLjkzMzgwNjIzMDY5ODc0NDcsMTQuNDUxNzI4MzUwODE5MzA0LDEyLjg3NTM4Mzc0NjI3MDEwNSwyNS4wMzM4OTYwNzIxOTU0NDMsMTYuMTQ2MjI4MDg4MzI5MzY2LDAuODk2MTYzNjM5MDQzMDI5MSwwLjgyNDQ1MTM0OTk1NjE2MgorMTUsVGh1IDE2IFNlcCAxMCwxNjY0LjY1MzkzMDA4NjIzMzUsMC4xMTIyNTEwMDI2MDk2NzMyNCwwLjAwMjI5MjQ5NzI3NDkxMDQwNCwwLjAxNjczODQ5MjYzMTAwNDA4MywyMDIuNDIwNTM2NDc3MzUzMzgsMTU0LjU3NTMxMzE3MTUxNzk2LDEuNjA4MTE1NDk1OTk5NzIxNSwwLjE0MzkyNjU2NDU1MzAyMDksMS42MjA3NTQ1Nzc0OTg2MDg1LDAuMCwwLjA3NzE2ODc2ODAyMTgwNzQyLDcuMTc3NTQ4NDY0NDg2MTc5LDAuMjUyNDY0NzEyNzI0ODI0ODUsNy44MTY5OTk1MjA2MDYzNDJFLTQsMC4wNzg5NzY5MzEwOTY5MDE1MSwwLjAxNDUwMjE1Nzc3MzEyNTI0OCwxLjk4MzQ4MTA2NDE4MzQ3ODQsMS43OTI4MTk3NzMwNDQwNTEsMjUuNzQ2OTkxNjIwMTI5OTgyLDIyLjg2NDM4NTE1NDUzNjYxMyw0NC4yMDMzMTU2MzQxNzI3OTYsMjguOTM3MDMxMjAzNTYwMjUyLDEuNzQ1OTc1MDkyODQ1MTIzNiwxLjYwMTYxMjEyMjczMjQyNTgKKzE2LEZyaSAxNyBTZXAgMTAsMjY0OS4yNTYzOTUwNzY2NDcsMC4yMzE4NjQwMDUwNzk1NzM1OCwwLjAwNTExNDQ1MTg1Mjg4MDI4NSwwLjAzNjY0ODkzNjQ1NzQ2Nzk4LDMzMi4wMzI3NjE1ODY4MTYwNCwyNTEuNjMxOTI2MjI1Mjk3OTUsMy4wMzMwNDM1MDg3NzgyNzgzLDAuMjg5Njg5NTU0NTg5NDY4NTUsMy4wNTI2NzMwMjMxMzIwNjQ3LDAuMCwwLjE1NTkzMzQ5OTM4MjQyNzQ1LDEzLjUwNjQ3Mzc3MzQ5MzM3NCwwLjUxMDkzMTYwNzgzNzQ5ODksMC4wMDE4MjU1ODY5NTg3NDY2MTMsMC4xNjAxMjUxMDAxNzUzMzExMywwLjAzMTIzMTMwOTE4MzI4MjQ3OCwzLjc3MDcxMjkwMDk0NTkzOSwzLjM4ODI4NDE0NzUwNDIzNjUsNDUuNDA2ODI1NTk3NTc0MjI2LDQwLjE4OTIwMzA0NjU0NzcsNzcuMjIzNjA0MjY1OTkyMTQsNTEuMjk3MjQ1NTEzNjAxMiwzLjM0NzA4ODg1NzY4MTg2ODUsMy4wNjA1NDAzNTk0OTM2NTM2CisxNyxTYXQgMTggU2VwIDEwLDQxOTcuNTY0NDk2OTMwNzM1LDAuNDcwMjk3Mjc4ODkwOTM5ODYsMC4wMTExNTIxNDcxNTU3NjE4MiwwLjA3ODQ1MDQwMzU1NDk3MDk3LDU0MC45NTM3Mzg3MzU0ODE2LDQwNy4yNjE2MzU1Mzg3MjUwNSw1LjY0Njg1Mjc1OTIzNzAwNiwwLjU3Mjg4Njk2NDk1Nzk1MTgsNS42NzUxNTIxODg0MzQ0MjEsMC4wLDAuMzA5NTUzMDgxNDk2MDE5NDYsMjUuMDc2MjIzNzk5NjA5OTEsMS4wMTU4MTMwNDIzODU3NDQ4LDAuMDA0MTQ4NTU2MDQ2MjA2NzI0NSwwLjMxODk4NjY1NjgyNDc3MDQ1LDAuMDY1NzY4MzI3NTg5MjMwMzcsNy4wNzM5MjU2OTQ5MTQxMTksNi4zMjAzNTY1NzMzMjI3OSw3OS4zNzc4MTU2Nzk3MDc1Nyw3MC4wMjEzNDEwNDcxODgzMywxMzMuNjM2ODM2MTI5MzY2NDYsOTAuMDY3Nzg0MzM5NzgxNzQsNi4zMjk4NzUyODMzNTU5MjUsNS43Njg1MTc4NzAwOTEyMDQ1CisxOCxTdW4gMTkgU2VwIDEwLDY2MDIuNTIyNjY5NzQzMjU5LDAuOTM4NTgxMzQ1Njg4NTQ0MSwwLjAyMzgyNzMyNTE1MzIzNTIxNiwwLjE2NDU5NjQ2MTc2OTk0NjgzLDg3My43MzgzNjQ0MTE0MDU5LDY1NC4xNjA3MDQyODYzODc4LDEwLjM5MTI1OTUxNDA3MDI1MywxLjExNTI2NTkxNzk2Njc0NjEsMTAuNDI3NTE5MjI1NTQ4ODk5LDAuMCwwLjYwNDg3NjY0NzAzNzUwNjksNDUuOTg5Njg0MDU3NDM5OTQsMS45ODc5MTgxNTczMjIwNjQsMC4wMDkyMDEyOTI1MDE5ODk3NTUsMC42MjU1NDAwMzYzMzcwMDcsMC4xMzU3NTk3MTE2NzAyMzE5MywxMy4xMTMzNzgxMDI2ODIwMywxMS42NTE5NTM3NzM2MDIyODMsMTM3LjYxMzM4MzQwNjY5ODc3LDEyMC45NjQ4OTUzNDQ0MjA3LDIyOS4wNzcwNDUzMjA4ODg2MywxNTYuNjcwMjU5ODk0MTEyMTUsMTEuODI1MjQ2NjI3MTkwODcsMTAuNzM3NjE4NzUxNjU5MjIKKzE5LE1vbiAyMCBTZXAgMTAsMTAyNjUuOTEzNTcwNzkyMzUyLDEuODQ2NDIxMTMwMDkwNzM5MiwwLjA1MDAwMjM2NTE4NjM1NDk0LDAuMzM5Mjk0NzYxNjQxMTc2OSwxMzk0Ljc3MjcwMDIyODExMjYsMTAzOS43ODgzNjEzMDAzNTQsMTguOTIyMDg1MzQ4NzkxMDM2LDIuMTQxMTk4MDY3ODg2MzEzNiwxOC45NTc3NzkzODY1Njg4MiwwLjAsMS4xNjU1NTM2ODE3NjcxMzk3LDgzLjM5MTk1ODYzODg2NjM4LDMuODM2MzEzNTM5ODA2MTM2LDAuMDE5OTc2NTY5MDExMTU0MTk1LDEuMjA5NzgxNTY0Mzg3MDE3MywwLjI3NTM1MjgxNTk5Mzg5OTksMjQuMDQ4MDY4ODc2ODQ3MywyMS4yNTQyMTM2MDU2NTg1MjQsMjM2LjYwMzIxNTg5MzMxMzcyLDIwNy4xNzY5NDI3NzA5OTc4LDM4OC43MDIyNDE4MTUzMjc1NywyNjkuOTA3NDc0NDE5MzE0MywyMS44NDcyOTA4MDY0NjAyODMsMTkuNzYwMTg3NDAyMjYzMjI3CisyMCxUdWUgMjEgU2VwIDEwLDE1Njc5LjYxMTkxMzkwMDA5LDMuNTg1Nzk2NDg5NjQ3ODUsMC4xMDMyNjgwNDk5NTYxMDk1OCwwLjY4ODUzNTA5NDA3ODg5NzcsMjE4OS43MTI0NDY3NTA3OTMzLDE2MjguMDI4OTc3MTk0NjMzOSwzNC4xMjI4MTc3MTk3MzYzMSw0LjA2MDEyNDc4MTg4NjgxMiwzNC4xMjg0NzMzNzk0NjgyMSwwLjAsMi4yMTgwNDI2NzMxNTkwOCwxNDkuNTUwMjcxMTAxNjE4NSw3LjMxMTM1MDU1MjYyNzQ4MywwLjA0MjU1NjQ3NDUwMjM4MzQyLDIuMzEwODU0MDkxMDU3MTUwMiwwLjU0OTgzMTg0NTIwNTE1NDIsNDMuNjU5MDA0MzIwOTUxOTMsMzguMzg4MTQwMjAwMDAyMzYsNDAzLjE4ODU3NjE5MDUzNjIsMzUxLjQ3NTU0MTMzMDMwMTgsNjUxLjcxNDM1NTQ4NDkwMTcsNDU5Ljk4MDcyMTMyODExMzMsMzkuOTQ0MjczODQ0NDYwMDEsMzUuOTcyMTkwODI2MzM3NDcKKzIxLFdlZCAyMiBTZXAgMTAsMjMzMjAuODA2OTkwNzk5MzEsNi44ODIxNzgwNDcyMDk5NzEsMC4yMTAyNDA0MzUyODM1MDY2NywxLjM3Nzc4NzgzNzIzODg3OTIsMzM1Ni40MDIxMzQ4MzAwMzk0LDI0OTMuOTkzNTk4MDU2MjQ4Niw2MC45NjA1ODA1MDU0ODIxOCw3LjYxMjMxMzI1NTA3ODc0Nyw2MC44NTQ2Mzc4Nzc5NjY1OCwwLjAsNC4xNzMyNTYxMTY1OTY2MSwyNjUuMTMzNDYxMTg1MzUwOTQsMTMuNzc2NjA0NzMzNDIyMDUsMC4wODkxMzg5NzE1Njg1ODM4LDQuMzY0NzUzNDEzNzY4NjA4LDEuMDgyNjgyOTIyMjUzNjE1LDc4LjQ4OTkzNTIyOTI4NDMzLDY4LjY3MTUwOTI2NzQ2OTQyLDY3OS45NTM2ODgzMjYwODY1LDU4OS41MjcyODY4MDA3NzI3LDEwNzYuMTU3MzY1NDE0MDE3Miw3NzMuNjEyMjg3Mzk4OTcwNyw3Mi4yODc5ODAzNzkyMzkzNiw2NC43ODAxMjE1OTcwMDU1NQorMjIsVGh1IDIzIFNlcCAxMCwzMzQwMy4xMzYwNTIzOTU0MzUsMTMuMDY0NTQ5MjA4MDg2NjU1LDAuNDIyNTAzMjUxNTM4NDE4NTYsMi43MjIzMDcxNTgxNTMzMTQzLDQ5NzMuNjYwOTU3ODM3Mzk1NSwzNzAzLjcyODk0MjcxOTkyMSwxMDcuODc0Mjg1NTY0OTAwOSwxNC4xMjMyOTY1OTMzMDk3NDYsMTA3LjQ0OTUyNDIxODI4OTcsMC4wLDcuNzY5NjY5MjMwNzI2MjIzLDQ2NC4wMjUyMjAwNTY4MzI2LDI1LjY4NjE3NjAyNzgwNTI0MiwwLjE4Mzg5NjU5ODE0NTExODEzLDguMTU5MTc1NzgzMzE2NjQzLDIuMTA1MTU5MzU1MDY1NDU1NywxMzkuNjkzNjI4NDkyNDc3NDcsMTIxLjYzODI2OTg4NzAyNjkxLDExMzEuODc2ODAxNTYxNDk1Myw5NzQuNDgyMTM5NTUzNzg5OSwxNzQwLjk0MDk5NjAzMDI2MjMsMTI3OC44NzQ2ODA5MTQwODQsMTI5LjQzNjI0OTUzMDc1NTk2LDExNS4zMTkzNDkyNDAzNTc1OAorMjMsRnJpIDI0IFNlcCAxMCw0NTQ5Ny43MzEwMDQ1MzM1NzYsMjQuNTQyODE0MzA4Mzg0NTk2LDAuODM5MTcyOTI2NzQ4OTY0LDUuMzE3ODczNjAxMjU0MTg2NSw3MDQwLjQzMjk1NTczODc4MSw1MjcyLjMyNTg4MTA3MTMxLDE4OC45NTcwNzc1NzkzOTA3LDI1Ljk0NTI2NTAwMTcwMzUzNiwxODcuNzAzNTY0MzYxNDc5NzgsMC4wLDE0LjMyMjU1NTE2NDkzNDUwMSw3OTkuNTU0OTIxNDU2MDMyNCw0Ny40MTY0Njc1OTY4OTQyOCwwLjM3NDI4MDcwODA1ODg0NzEsMTUuMTA2MDg2NTczNDg3MTUsNC4wNDY5OTAxODg2MDg2OTEsMjQ1LjkwMzc2MzUxNDQ3MzU1LDIxMy4xNjA4ODE0Nzk0NjI2LDE4NTIuMzU5MzE0OTIyMTU4MywxNTc5LjgxMzkyMjQ4MDg2NjUsMjczOC4yMjQ1OTMyMjY0OCwyMDY1LjYxMjUwNzM5MDAxOCwyMjkuMDU2NDM5OTYyNjUzNSwyMDIuNjAzODE5OTcyNjM1ODIKKzI0LFNhdCAyNSBTZXAgMTAsNTgyMzYuOTI5OTY4NTY0ODMsNDUuNjE5NTQ5MDM5MDI1NzEsMS42NDg0MDQ0ODM3MTk0MzE4LDEwLjI3NzQxNzY1ODAxNjM4Niw5NDAxLjkwNjI1OTc3MzMyMSw3MTA4LjA5NzY5Mjk5MzIzMSwzMjcuMDcyNTIwNDcyMTQyMjMsNDcuMTg1MjQ2MzY5MDc0MzU2LDMyMy43NjEyOTU4ODc5ODQ2NiwwLjAsMjYuMTM4MjAwNzE2NDYyMTg3LDEzNTAuMDU3ODE0MDc4MTIzLDg2LjY1MTg1NTU2NTEyNjk4LDAuNzUyMjcyODAxMTc4NDEyLDI3LjY5OTczNjUzMzkwMzc5Niw3LjY5NjM4MDM5ODA0NjUyOSw0MjcuMjQ3NTMxMzU0NTMwMywzNjguODQ4MTYzOTYyOTExNjYsMjk2My4wMTE3NzUxMTE2MTc3LDI0OTQuNTU0NDc4NTg3NTQ5NSw0MTQ0Ljc4MzY4MDcxNDg4LDMyMzIuNDU5MzY4NTMyOTQ2NCwzOTkuNzEwNDgxOTA1NTI5MiwzNTAuMTkyNjEwODIyMzAwMgorMjUsU3VuIDI2IFNlcCAxMCw2OTQ4Ny4xNjUzMjAzNDIzLDgzLjg2NDM5NDk5OTU4MTM4LDMuMjA0NjIzMDg5MjI1NDQwNiwxOS42NjUxMDM1NzQ5NDg5MzMsMTE3MjYuMzI4ODgzMTY5MDc3LDg5ODQuNzYyMTc3NzAzMzkzLDU1OC4wNTgyNjEzNTc1MzE4LDg0LjkyMDI0Mzg2OTkwNTkzLDU0OS43MzkxOTk0ODkwODE3LDAuMCw0Ny4yMDg4MjA0MzUyNzcyLDIyMTguNzIyMzYyMjQyMTMzNCwxNTYuNzA4MzYzMjUzNDY4NSwxLjQ5NDg5MzE4Mzg4NzMyMDcsNTAuMzAzMDE4OTgzNTM2MDQsMTQuNDg5MTQ5NDk2NTQ5MDU0LDczMC40MTE4MzYwNzgwMDA1LDYyOC40MjQ0MTQwNzA3NTQ3LDQ1OTcuMzY0MTk4MTk4OTc3LDM4MDIuOTI3MzU2ODk4NTU2LDU5NjYuNjM0NDI0MTgzMjI3LDQ4NDkuODA5NjU5MjU5NDY0LDY4NS40OTkxODkzNzMyMTYzLDU5Mi43MjUyNTEyMzk0MzA5CisyNixNb24gMjcgU2VwIDEwLDc3MTM3Ljg4NjMzNjU3ODgsMTUyLjI4MDk1MDM0Mzk4NTYsNi4xNjY4NTY2MDg5NzM0NDUsMzcuMjYyNDE5NDU2MzUwNCwxMzU5My42MTUxNDY1MzU2NDIsMTA1ODguMzEwMjAxNjY2MjcsOTM0Ljk0ODQxNzUyMjAyMTgsMTUxLjAzOTYwNTI3NjY3OTY1LDkxNC42NTE3ODg2MDU1NDIzLDAuMCw4NC4yODA2ODI5MDcxODcwNiwzNTE1Ljc2ODkzMzU4MjQwNDgsMjgwLjExNzEzMzgwNzAwNTYsMi45Mzg4ODQxODYyMTc4NDI4LDkwLjM5MzA0MjgxNDIzNjksMjcuMDAyMzUwMTcwMzUzODE0LDEyMjIuODE5ODA4NTU1ODE0MiwxMDQ5LjY5Mjg4MTY1NTUzMzUsNjg1My44MDgyOTU2NzEzMTEsNTUzOS40NDk3ODgxNzQ4MzQsODA3Mi4xOTczNjk5MTg5OTQsNjg5NC41MDExMDY5MDM5NzQsMTE0OS43MzgwODc0MjIxNDQ2LDk3NS43MDE0NDM4MjA2NDk1CisyNyxUdWUgMjggU2VwIDEwLDgwMDI2LjI3ODgwNjg0MTksMjcyLjU2MzgwOTM4OTgzMDksMTEuNzQ1NzMwMDUyODQyODU0LDY5LjkxNzI1NjM5ODgzNjkxLDE0NjcxLjU2OTM3OTA3MTM4MSwxMTYzOC4zMTg3NzE4MjExNDUsMTUzMC4wMjU4MjEwOTAwNDI5LDI2NC45MTIyNzk3MjU5MjA5NCwxNDgxLjc1NjEzMjA0NTAxODQsMC4wLDE0OC40MjgzNDg1NzY5ODcxNiw1MzA5Ljg0MDc3MDg5Mjc0OCw0OTMuOTE4NTUwNDkxNjEyMSw1LjcxODY5NjgwMjQzMjMwMSwxNjAuNTAzOTI0ODI0MzQ1NDMsNDkuNzk3NjU2NzgzNTQ5NzUsMTk5MS44MjYyMTY1OTA4ODcsMTcwOS4xODg5NDg1MjUyMTMyLDk3MTIuNTQyNTI4NTQwNjksNzYyNi45Mzc5MzEwMTk4ODcsMTAxNjkuMjY5NTYxMzA0NjY1LDkxODMuNjc4OTMwMDQxNDcsMTg3My43MDI5NjQ3NjI2MTg5LDE1NDguMTIyNjk1NjY1MTcyCisyOCxXZWQgMjkgU2VwIDEwLDc4MjkwLjc0ODk2MDQxMTgsNDc5LjU2OTA1MjEyMDYwMjQ2LDIyLjE0MDM3NjUzMzM4NzE5NCwxMjkuODk5NjE2MDAwODg3NywxNDg1MC4yNzY3NzE0NDcyOTIsMTIwMDEuMzY0NDQ4OTc2OTg3LDI0MjkuOTIzNjE3MDE0MTc2LDQ1Ni44NjE0ODc2Nzk1NjAzNSwyMzE4LjgxOTY3MzA0MTE5MywwLjAsMjU3LjE3MjAwMTc3NDkxMzA0LDc1NDguODExNDQwODM5ODk0LDg1Ni43OTgyMjU1NDMyMzY2LDExLjAyMTc5NTk5MDc3OTk4LDI4MS4xMjg5OTE1NzY2ODQwMyw5MC44NDYzNTg0NzY1MTQxNywzMTMxLjA3NzU5Nzk2NTI2LDI2OTMuNjgwNjA0Mzc5ODU1LDEyOTQ0LjgxMDM1NjQ5NDA1Miw5ODM0LjE5OTgwMzYzODY1NCwxMTg4MS44MTI3MDExMzMwNDIsMTEzNzEuNDA4ODg1NjE4MzQ0LDI5NDIuOTQyNDMxMjg3OTI0NiwyMzQyLjUyMjc3NjkwMzY3NQorMjksVGh1IDMwIFNlcCAxMCw3MzAxMi4wMzgzNTMwOTA1NSw4MjYuMTQyOTgxNzkwMDE3OCw0MS4yNzE4ODUzMDgyMzgzNzUsMjM4Ljc5MTczMzA0NDk1ODksMTQyNDEuNzAxODYzOTE2MDU2LDExNzE2LjQ3ODE0MjMyNjAwNiwzNzE1LjIzMjU1NDY4NTYwMiw3NzEuMjQwMDcyMTcyNTUyMSwzNDcxLjgwMDU1NTAwOTQ5MjcsMC4wLDQzNi41NzQ2MzkyMTE2OTk1LDk5ODkuNjQ5NDkxMjc5ODU1LDE0NTYuMjUxNjA4NDgwNzAzMiwyMS4wNDMyNDI1MTg2MjA5NSw0ODQuMzUyMjk0MzYzNjE5NiwxNjMuNzI2NzkxODY5NzQ3MTYsNDcwMy4yMzAwMzAxODIyODIsNDA3My4yNjI1MDA3ODM4Mjc0LDE2MDkyLjIyNjAwNzcwNzY0OCwxMTgwOC4wNjQyNDQ5MTMyNjcsMTI5MDMuOTk2MTg4NzUyMDE4LDEzMDU1LjkyNDI2ODYzMDM4Niw0NDExLjI4MjYyMTExMzA2LDMzNDEuMTkxMDc1OTg0OTUxCiszMCxGcmkgMSBPY3QgMTAsNjU1ODYuMTM5Mjc1MTk4MjIsMTM4Ni4xNDI4MjA5NDI0Mzc1LDc1Ljk5NDY2OTMxNzQ3OTk1LDQzMy43ODU4NjA2MjU0NTA5NCwxMzA4MS4xMzQ5ODE3MTgwODQsMTA5MzguNTgxODA0MDk2NDM5LDU0MTkuNzAwMzAxNjA4Mjk0NSwxMjY2Ljg2MDc1NzUwNzc0NTMsNDkyMi40NDU0NDIyNzgwMjgsMC4wLDcyMi4yMTQyNzM2NTEwNDY2LDEyMjIwLjUyNTY4NTk4NDQ3NCwyNDEyLjAwOTI5NjQ2MTE3LDM5Ljc5NTA3MTExMzA3MDA0LDgxNy43NjAxOTYyODQ1MTk2LDI5MC45MDExMTI4NzUwMzU2LDY2NzkuMTA0MzI4NTc5NTM3LDU4NTIuMjcwNjAzMDE5MTQ4LDE4NTkzLjQzNjc1NjM0MzE4NCwxMzE5OC4zNzg2MTcyNTU3MDUsMTMxMjMuOTA2OTQ3MDMyNjQsMTM5NTAuNTg3MjU5Mjk5NjQ0LDYyNDEuOTQxODQ5MTI4NTIwNSw0NDQ1LjIxOTA4OTMzMTM2NgorMzEsU2F0IDIgT2N0IDEwLDU3MjU3LjEwMjk4ODEwNDYzNCwyMjUwLjIwNzUyOTcwMjM0NDMsMTM3Ljk5NTgxODkwNjMxOTQsNzc3LjI1MDA1OTYwNTI0NjIsMTE2MjAuMTIwODQ4NjY5Mzk0LDk4NTguMzYyMjI1OTgwMjE4LDc0NzQuNTEzMjMxODAwMiwyMDA5Ljc3NzMzNjI0MzA0ODUsNjU0Ny4xMzM5NzM0OTgzMTcsMC4wLDExNTYuMzg4NTgzMTQwOTc0NiwxMzgxMi42ODk2MzY1MDQxMTgsMzg2Ni43MDgwMTE5MzgwNjksNzQuNTEwODU5OTcxMjU4MywxMzQ2LjU5MTc3NzQ2Njk2MSw1MDguMDI3Nzg1Nzk4NTM0Myw4ODc4Ljk0NjU3MjY1MDI3OSw3OTEwLjg3Mzg1MTc3NDU2LDIwMDE1LjIxNDg1ODgxMDQ2NSwxMzgwMS42NjY3NjE0NzUwNiwxMjYzMC44MjM0MjE1NTgzODIsMTM5OTEuNDkyMTk1NDE0ODkyLDgyNTEuOTA5NTU5ODYyNDU0LDU0NzguODM2ODUyOTQ1NTE4CiszMixTdW4gMyBPY3QgMTAsNDg5MjQuMTkyMzg3NjQ0MDksMzUwNS4yNTU3NzUzMTk5ODUsMjQ2LjU5MTMzNDE4NjA1MTQsMTM3MC4wMTkzOTY4MDY5MjUyLDEwMDYzLjMyNjAyODEyMzM3Miw4NjQ1LjUxOTc1NTE5NzMwNyw5NjY4LjQwMDY1MzYyNTU3NSwzMDUyLjE1OTQ5OTE4MTg3NDMsODExNS4xOTQwNjU0NjkxMDUsMC4wLDE3NzcuNzc3MDg5NDY1NzY5MiwxNDUxMS4yMTExMTQ3NDIzOSw1OTUwLjkwMzE3NjcxMjIxOSwxMzguMDIyMTYxNjQzNDE1NDQsMjE1MC4wOTQwNjMxNjA1NjEzLDg2OC41MjI3NzkwMTk3NDc0LDEwOTczLjQyNzM3NzA4MTI4Myw5OTgxLjE1MTg0NDU3NzgzMSwyMDIyMi43NjgyOTAzMTk1MzUsMTM2MjAuODU0ODI2NzYzMjA5LDExNjMwLjYyNjI1MjQ2MjA2NSwxMzMxNC44MDk1NjY5MTg0MDYsMTAxMTkuMDA0MzYwNzY2NTIxLDYyNDkuMDgzNTk3ODQzNDU3CiszMyxNb24gNCBPY3QgMTAsNDExMzguODMwNzAxODY1MDcsNTE4OC40NjgwOTc0Nzg5MjksNDMyLjQ2NjEyNzU5NjI5OTAzLDIzNjcuMDU4MjQzMDI1OTMxLDg1NTAuMDMwNjE5ODQ2NzQ2LDc0MjUuMDgxNjU1NDA1NjYyLDExNjcxLjk0ODAxNjIwMzM2NSw0Mzk0LjgzOTA3MjIwMzQzMSw5MzU1LjM4NzQwOTI3MzAyLDAuMCwyNjAwLjYxNjE0NjM4ODg5OCwxNDMxNy41MTcyNTc2MTYxLDg3MTIuNzg1MTU4OTYxNDc4LDI1Mi42NDY3MTk1MDAxMTkyNywzMzA1Ljc1NjAwMjIzNjYxNjUsMTQ0NS44NzY3NDEwMjc3MzgzLDEyNTg1LjcwMjc1MTg4OTM5MiwxMTcwOC42MTM0MDQwODEwNzIsMTkzNzQuMzg1OTcwNjkyMzM2LDEyODE2Ljk2ODY4MzA5MjE1OCwxMDM0OC45OTA0NzM3ODgzNjMsMTIxNTQuNTIyOTE5NDU2MjA5LDExNDkxLjAzMjYzMDQ1MjUzNyw2NjI5LjIxOTY4NDUwNDQzNTUKKzM0LFR1ZSA1IE9jdCAxMCwzNDE4MS4xNjQ1MzkyNjQ5Niw3MjIwLjI3NTQwNjUwNzkwNiw3NDEuOTEyNTQyMDc4OTc4NywzOTg5LjQ1MjY5NDU5Nzk1Niw3MTYwLjk0NDg2ODAwNjI5Myw2Mjc2LjMwNzc5NzMwODI3OSwxMzE0NC45MDk3NDYyNTI2MTMsNTk0NS40MzgwMzQ3MjI0ODgsMTAwNjMuNzA2NzE1Nzg1OTc1LDAuMCwzNTg2Ljg0MDY2NjU3NjgxMzQsMTM0MjYuMzMzNjkzMTU5MDQ2LDEyMDI1LjE4NzIyNTY2NDk3LDQ1Ni4yNzgyMjI0NDgyMDk2LDQ4NTUuMzU4MjY3MDkyOTI1LDIzMjguNTE3NjE4MDEwMDU5LDEzNDQ4LjE0NjkxNDQ5MzA5OCwxMjc5MC4yNTMzNTI0MzA2MTgsMTc3ODguNjIwMTYxMjg0NjQsMTE2MTMuNzk3MTY1Njk2NjUxLDg5NzIuMDE4ODcxNzM5NzI5LDEwNzQ1LjU2NDgyNjk2MjI1NiwxMjE0MC4zMTYzODQ2Njc1MzIsNjYwMy4yNzA5OTY4Njk3MDYKKzM1LFdlZCA2IE9jdCAxMCwyODE0OC40MTU4NTIzNjgwNiw5MzU2LjE4ODk5MzA4NzExMSwxMjQwLjAxNjg0OTkwNDY1NjUsNjUxNy4yODc4MDY2Njc0MTMsNTkzMy41OTIzMTU5MDA2Niw1MjQxLjY0NTM3MTY0Njg4NSwxMzg2OS44NDgyMDg4ODA1MTQsNzUwNC4zNTQ2MTEwNDk5MzIsMTAxNzguMDk2MTI2Njc1MzY3LDAuMCw0NjI3LjYzMTc1NTI4OTU1MjUsMTIxMDIuNjY2ODM5OTc1ODcsMTU1MjUuMjU3MzI5MjIzNDM3LDgxMS4zODE5MjY3OTk1MzM5LDY3NTUuMjczMzE5ODgxNjI4LDM1OTkuNTE5MzcyMjg4ODgzNSwxMzUwMC4zMDMwNzc0MzY3NzMsMTMwOTYuNzIxNTYzODY2MjMxLDE1ODAyLjkwOTkxMzQ1ODgyMywxMDIyMC44NzcwNDgwMTgyODEsNzYyNy41Mjg0MzI0Nzc4NzYsOTI3Mi4xODI0MDU5ODczNDMsMTIwNDUuMjM4MjA3ODAyMzgsNjI0Ni44OTEwMTk1MTU4NjEKKzM2LFRodSA3IE9jdCAxMCwyMzAyNy40NjU3MTY0NTc3NCwxMTIyNC44ODc3OTM3MzA4NTIsMjAwOS4wNzY1NTg1MTYxOTMyLDEwMjM0LjUzNzQzNjE4OTQ3NCw0ODc3LjM5OTc0NTk5MDE5OCw0MzM3Ljc2ODM1NzU4NDk2NSwxMzgxOS45MDI3Nzg0MjcwMzcsODgxMS43MjkzNjY4MjMxNDksOTc3My42NTY5MzcxMTI4NzIsMC4wLDU1NTkuMTI3NzAxNjgxOTAyLDEwNTg3LjIyNzMzNTE3OTc4NSwxODY2Ny40OTMxNDQyMjYzNzcsMTQxNy4yMTk0NDIzNDUwODQ2LDg4MzQuMjU0ODM3OTY2NTEzLDUyOTUuMzM2MTY4OTI3MjkzLDEyODY4LjIzMTY4MjIxNTU5OSwxMjY5Mi44MDIwNjI5NzU5NDksMTM2OTAuOTUwNjg5MTQ2NzgsODc5Ny4wMDMwNDk2ODkyOTIsNjM5MC4yMzkxNTEzOTU4NzgsNzg1Ni4yMjkxMjA4MjE3MzEsMTEzNTEuOTU1MTg0NTczOTgyLDU2NzUuMzY3MzUyNTYxNTk3CiszNyxGcmkgOCBPY3QgMTAsMTg3NDYuMTE5OTMxOTI1MzQsMTI0NzEuODMyMDE5MTU0MTM1LDMxMzQuOTM5NzI0MDg3MTk1NCwxNTI5MS44MjYyNzE0MjcyMzUsMzk4NS4zODkyNDQ3ODI3MDgsMzU2NS4xMjcyOTQyMTAxNjgsMTMxMjcuNTk0NzcwODU1NTg3LDk2NDUuNTM4NDExOTA2NzksOTAwMS42NzY0Njk2NzU4NDcsMC4wLDYyMTkuMTkzMzI5Njk2NjQ0LDkwNTUuOTI4NDI3NTg5NjUyLDIwOTExLjE1NDUzNzM1MTcwNywyNDI0LjMyNjg1MzIwNDYwMjcsMTA4MDEuNjY3ODc0NTY3ODg3LDczNTAuNDc0NDY4OTYyNDksMTE3NzAuNzA0NTc1NDA3MjY0LDExNzY1Ljg2MzI3NTc4MjI1LDExNjM4LjkxODkyMzkyMDcxMyw3NDQ0LjkwOTExNjM0OTI3NSw1Mjk1LjQwNzY4MTM3Njg5Miw2NTY2LjE3ODAyNzUyNTc5MSwxMDI3Ni4xMzc4OTYzNzI0NDcsNDk5OS4wNTYxNDM3MjM5OTcKKzM4LFNhdCA5IE9jdCAxMCwxNTIwNi4wODgxMzgwMjIxMzQsMTI5MTUuNzcwNTczNDg0NzQsNDY3MC45NjYxMDM5MDEyMjksMjE0OTEuMDIxMTM1NzM3NDU3LDMyNDIuMTkzMzQ5Nzk0NTc2LDI5MTUuMDE4MzU3NzUyMTcxLDEyMDAwLjY3Nzg2NzgzMTE3Myw5OTA3LjI4ODIzNTgzOTkxNyw4MDI0LjUyNDE4MDA4NDA2OSwwLjAsNjUxMi42ODA2NDI1NjUyMjg1LDc2MTcuNzA3Nzc1Mzk2NzQzLDIxOTM1LjQzNjk2NzQyOTA5Nyw0MDQ2Ljk5NDkwMDIyODQyNDMsMTIzMzEuOTQ1MDIyOTA4NjU2LDk1NTkuMTc5NjY0MjAwNjg4LDEwNDI5LjMyMzYxODc5OTU3MiwxMDUzMy40OTk0MTA4MTMxNjcsOTc1NC44NTQ3Mjg3MjA0NTMsNjIyMC45NjQ2NTkyMzU3MTg1LDQzNTIuNDk3MTAwNzUxODYyLDU0MzIuMTU1ODIxMjI5MjQxLDkwMjAuODM2MzU0NTYxODM4LDQzMDEuODA5NDU3NDMzMDUKKzM5LFN1biAxMCBPY3QgMTAsMTIzMDIuNjYyMjY4NzA0MjA3LDEyNTk3LjUyOTQ2MDUxMjEzMyw2NTc2LjM1MDI3ODU4NjgzMywyODEwOS44MTA0ODU0NDU5NDUsMjYyOS4xMDgzNjE2NDI3NjcsMjM3NC4zMzUzMDE3NzE4MTc3LDEwNjQ1Ljk1NzY2MjU4Mjk2Myw5NjM4LjA1MzM3MTE1MDY3OCw2OTc2LjM0MjMyMDI2NDg4MSwwLjAsNjQzOS4xMTU0MTQwMzk0NTEsNjMyOC43ODY4NjI5Mjc2MDEsMjE3MzIuMTM1OTYyODQ3NTgsNjU2Mi4zMDkyOTIyODA2MjUsMTMxODcuNzkwMjMzODg4ODQ5LDExNjAwLjA1OTk1ODgzMTc2NSw5MDE5LjYzMTM0NDM1ODIxNyw5MTgyLjA0Mjk2ODMxNDIyNSw4MDg5LjE2Mzg4NjExNDM5NjUsNTE0OC42NjczMjE1NzM2NjcsMzU1NS44NTE3MDQ5MDMwMTMsNDQ1OS44MTQ3MjkzNzgzNzgsNzczOC4xMjYyMTcwOTY5NzYsMzYzNy42MzQ5NDk4NDYzMzYKKzQwLE1vbiAxMSBPY3QgMTAsOTkzNS41MzU1NzQ5NTkzMiwxMTcwOC45MTQzODQ2NjM1MTQsODY1NS45ODAzOTY2NzUwMjIsMzM5OTEuMjMzNDUwMDE2MzA1LDIxMjcuMDI1MDY3NzkyOTM1LDE5MjguNDk1NDEzNTczMDcxOCw5MjI3LjkyNTMxOTc5NTQxMyw4OTcwLjI4ODc4MzEwMDkwNyw1OTUwLjQzNDI4NDkzODg2MiwwLjAsNjA3MS41MDkyMDE5ODkxNiw1MjA5LjY0MDM2MjkwOTcyOSwyMDUzNy44MDM4MDAwMDI4MDYsMTAyNzEuNjU3NjA5ODMwODgzLDEzMzAwLjc2MDY2MDc3OTIyOCwxMzEzOS4zMDM5NDAwNjExMDEsNzY1OS4xMTkyMDQyOTg2ODUsNzg0My44NDY0OTAxODI0ODMsNjY1NC42Mzc1NDcyODEwNjcsNDIzMC42MjM2NjMxMzU0MzcsMjg5Mi4wMTU5MjQ0MTMxMzY0LDM2NDAuNzY2NzczNDA2MDE0LDY1MjQuMzMzMzAzMDM1NDkyLDMwMzUuOTg0NDAwNTU4NjczOAorNDEsVHVlIDEyIE9jdCAxMCw4MDE0LjEwNzU4OTczMTE3MywxMDQ4NC42MTUwNjE2MzM3MjcsMTA1NjcuODQwMzcxNDc0Njg3LDM3OTg5LjM0MjM2MzU5MTc5LDE3MTguMDkzMjQ4NzY0MTgyNiwxNTYzLjI1Njk1NjI4ODMzNzMsNzg1OC4zNjI5NjY0MjIxOTEsODA2Mi42NjYzNzYyMzEzOSw1MDAyLjYxMzczNTI2OTEwMiwwLjAsNTUxMy4xMTQ0MTQ1NzE5OCw0MjU5LjE3MDg4MzAzODY0NCwxODY5Mi4wMTEwMjAyOTg0MywxNTM4Ny4zMjQ1ODM0NzMxNzcsMTI3NjMuMTI2MDYxNzQxMTgzLDEzOTU3LjY4MjYxMzAwODc5Miw2NDE1LjAwNzU0MzkxODgzMyw2NTk5LjQ1MjE0MTM0ODIxOCw1NDQyLjA5Nzc5Mjk5MDUxNywzNDU3LjY2MzE3MDc5MTc5NDUsMjM0NC40NDE3MDAzNzAxNjYsMjk1OS43MDU2NTE1NzQwNDMsNTQzMC43MTg5MjY4MzA0OTY1LDI1MDkuMTU2NDU0OTQ3OTI2MgorNDIsV2VkIDEzIE9jdCAxMCw2NDU5LjQzNjkzOTIyNDcxLDkxMjcuMzcwNjM3ODIxNDgxLDExOTQyLjUxNjc2NTY2NDQyNCwzOTQ4OC44NTE0NDYyNTU3MzYsMTM4Ni4zNDA1NjkzMjk2MTIyLDEyNjUuNDU5MDgzNDEzMjExMSw2NjAyLjQwNzg4NTYzODQyNCw3MDU0LjQyODg2NjAxMzg3Nyw0MTYwLjE0MTQxNjk2MjY5NCwwLjAsNDg2MS44Mjc2MzYwMTQzMiwzNDY0LjU2OTI4OTczOTA5NjMsMTY1MjAuMDk2NjM1NzQ0MzY1LDIxODI2LjU5Nzg3MTk2MzY2MiwxMTc1OS42MDkzMjEyMTYzMzQsMTQwMTcuNTM5NDU3NzM3Mjc5LDUzMTcuNzg1MzQ5NDIxODA1LDU0ODkuMzA1Njc4Njk1Mjg2LDQ0MzAuOTY2Mjg1NjUxNjg1LDI4MTQuNzEwNDc3MzI2MjkxMywxODk2LjEwNTY3ODY4MzU1OTMsMjM5OC43MDEzMDkyMTQ4MDMsNDQ3Ny4zODUyNjgyNjY5NDIsMjA1OC42Mjc4OTc4Mjc4MzYKKzQzLFRodSAxNCBPY3QgMTAsNTIwNC40MDU3NTg1MTczNjYsNzc4MC4xNzg2NzIyNTQxNDgsMTI1NTAuMDcwNTU2MTk2Njc1LDM4NTg4LjI5MTM4NzU0Mzc3LDExMTguMDA0ODA3MDY3NjI3MywxMDIzLjU0MDk2OTMzNjg4NzQsNTQ5MC43OTcyNjEwMTk1NCw2MDQ3LjAwMDE5ODM2OTA2NCwzNDMxLjMxOTA4NTQzNTEwMjQsMC4wLDQxOTIuNzQ4NDQ4NzY4MDkyLDI4MDcuODUxNzYxNTI2MTIyLDE0Mjc0LjUwMzkyNjEzNTg3OCwyODk4OS4yMzYwODExNjA3ODMsMTA0OTEuODQyMjE1NTQ5MjI0LDEzNDM1LjQ2MDg4NzY0ODU4NCw0Mzc0LjMyMTI1Njg5NDEwMiw0NTI2Ljk2NzgyNjQxMTg1MSwzNTk2LjE1NzczNTg5MzYwMTUsMjI4NC43Mjk2ODk0NzU1NTIzLDE1MzEuMDU0NTY3NTM4MDY1LDE5MzkuODI0NjQwNDQ0OTA0NiwzNjY1LjI2NTgxMjYxODA2NjMsMTY3OS44NDc1MzM0NjQ4NjY3Cis0NCxGcmkgMTUgT2N0IDEwLDQxOTIuODg0MzUyMzYyODI3LDY1MjguNjc5MTg2NzE4MDY0LDEyMzgyLjY0NzIwNzc5ODgwMiwzNTg4Mi42NzY2OTk1NTk4NDUsOTAxLjQzNjQyMzEyMTIxMzEsODI3LjU1NzIyODAxNTIyNjEsNDUzMS4zNTkzNjMxMjQ2MTgsNTEwMy43MzI0NjQ2MTEwNSwyODEyLjk0ODE5NTAzMzE5OCwwLjAsMzU1NS4wNzk4NDcwNDQxODczLDIyNjkuNjM4Nzk4MDc1OTI2LDEyMTIzLjMwODIyNDM1MTMyNCwzNTczOC44NDQ4OTA2Mzc0MSw5MTI5Ljk4NjEwMzg3OTk2LDEyNDA0LjE4NDAxMTgxNjMzOCwzNTc3LjY2MzAyMTU0OTYzMzQsMzcwOS42MjM3NDc4MzU4MjksMjkxMS45OTQ4NjcwNjYwMDA2LDE4NTAuODE2MzU0NDYzNjIxOCwxMjM1LjAzNTE2NTA2Mjk0ODIsMTU2Ni40MzM1OTk3OTcyNjk4LDI5ODQuNzI5MDAyOTIzNzk0MywxMzY1LjMxNTg5OTk5MDczCis0NSxTYXQgMTYgT2N0IDEwLDMzNzguNDUyNTg2MTU0ODM3LDU0MTQuOTY0NjA5MzM4OTc2NSwxMTYwNi4yOTcyNTY0MDgzMjcsMzIxMTMuMjc0MDQwNzY1MTk4LDcyNi44MDM1MTk4MTIwOTE4LDY2OC45NTA0MjQ4NjA5OTA5LDM3MTcuNjYzMjkzMzMyNTg2LDQyNTcuMjAyNTcxOTM3MDk0LDIyOTUuMzk1NTQ1NjUzOTA5LDAuMCwyOTc1Ljk0ODQ5ODk1MzY2MDQsMTgzMS4xNDU3MzY5MzMxNjc0LDEwMTYxLjUyNzc4ODQwNzA3NSw0MDc3My40NDk3MTcxNDA0Myw3NzkzLjY1ODc0OTA5MTQ3MSwxMTEyMC43MjM2NTA0MzY4NiwyOTEzLjUyOTk5MDE4NzA2NTMsMzAyNS4zMjMzNzAzMTI1NDIsMjM1NC4xOTQzMzIyMzA4MjE2LDE0OTcuMTQxMTcwMzk5NTM2Niw5OTUuNjEyODEzNTUxNzczNSwxMjYzLjY2NDc3MTc1NzI5MTQsMjQyMS4xNDg3Mjg5MDcwNTA2LDExMDYuNDAyMTI0NTMzMzI1NAorNDYsU3VuIDE3IE9jdCAxMCwyNzIzLjExNDg5MjUzODI4OTUsNDQ1Mi40MzYxMzI0NjU5NDg1LDEwNDUyLjU2OTA2Mjk3NDA1MSwyNzkyMi43MDg3NjQzODExODMsNTg2LjEwNzk1MTU1MTU2ODksNTQwLjc0NDM2NDE2MDc2NzksMzAzNi42NTg2NjUyNTA3ODYzLDM1MTkuNzE0NTcwOTI1MTgwNCwxODY2LjY4MzQwNDI4NDYzODUsMC4wLDI0NjcuMTY1NTk3MTU0OTgzNSwxNDc1LjQ5NzMxNTI5MDAyLDg0MzIuMzE4NjU0MzM0MTEsNDMyMTAuOTk5NzY3ODk4MTksNjU1Ni4yMjAwNTgwOTE3MjcsOTc0NC4yMDk5NzgwNTUwNCwyMzY1LjE5MzI0MDE0ODE2ODYsMjQ1OC41NDY3MzQ1MDEyODUzLDE5MDEuMjE2NzI4NTYzOTcxLDEyMDkuOTAxODA2NzU2MTY2Myw4MDIuMzYzMzExMDI4NDI0NSwxMDE4LjgyNjg4NzAxNDA0NDksMTk1OC40NzM1MTQzNDc0MDYsODk0LjY4OTk1Mjg3NTc3MzEKKzQ3LE1vbiAxOCBPY3QgMTAsMjE5NS45NTE5MDA5NzMyNjYsMzYzNy40ODk3MDc1MTk5ODYsOTEzMi44NzczMTUxNjc0NTQsMjM3NjMuMzQ3MDI5MDAxMTQzLDQ3Mi44MzU3OTYwNjY5Nzk0Nyw0MzcuMjI1MjAwNzQ4OTE1MSwyNDcyLjQwMjg1NzE0OTM2MzYsMjg5MC43NjA0ODkzODE5NDg0LDE1MTQuMzM4NTY5OTkyNTg5LDAuMCwyMDMwLjU5ODc2MTE1MTM2ODMsMTE4OC4wMTIwNDAyMjM4NzM2LDY5NDQuNjM4MzY0NzA4NTA5NSw0MjkzMS42MzU1MjEwMDkzNyw1NDU0LjU2Mzc1NTkzNDIxLDgzODYuMzQ4MDgxMTE5NjMxLDE5MTUuNzQ0MzcwODAyNDc0OCwxOTkyLjg5NTIxMDk2MjIyNiwxNTM0LjQ1OTI5NTk1MTY1LDk3Ny4yNzM5MDQ0NDc3MTYsNjQ2LjYyNTA1NDYyMTE2NjcsODIxLjI0MDQ4ODg1Nzk4MzUsMTU4MS4wNzk4MzQ5NTU4NTM2LDcyMi40NTEyMzczNDI4MzQ4Cis0OCxUdWUgMTkgT2N0IDEwLDE3NzEuOTAzNDg2MzM4NzUxNSwyOTU3LjU4Njk4Mjk4ODM3MjcsNzgwMS40NjcwODcwMDEwNDgsMTk5MDQuNDY2NjY3MjM1ODQzLDM4MS42NTk4NjcwNjE0OTY0LDM1My42NzQ1NzYzMDI5MzYyLDIwMDguMjk2MjI5MTAyNjI2LDIzNjIuNTA1OTE4MDA5MDg1LDEyMjYuNDAzMzMwMzUzNTM4OSwwLjAsMTY2Mi4yNjcxODUzNTU1NDQsOTU2LjE3MDY1NTUwNDgwNCw1Njg2Ljk0NjExMTQ5MDMyNyw0MDQ1Ny4yNzExMjQwODI3Myw0NTAwLjMwMTY2MDgzMTc3MSw3MTE2Ljk2NjkzOTc0NDIwMSwxNTQ5LjI5MjM2MDE3MzQwNjUsMTYxMi41NzIwMDAwNzgxOTM1LDEyMzguMTIyMzM2MDY3NTA4LDc4OS4yMjU1MjY1NDM1Mzk2LDUyMS4yMzE3MjcyNDk5ODg4LDY2MS45OTcwNzY5NzcwOTc1LDEyNzQuNjk2NTc4ODY5NDgwMiw1ODIuODM0MDUyNjU4MjE2NworNDksV2VkIDIwIE9jdCAxMCwxNDMwLjczMjEzMDE0MDEzMTQsMjM5Ni4zOTAxOTkwMzY4MTMsNjU1My4yODU4NTYzMTExNiwxNjQ3Ny4wODMyMDE4NzM1NjQsMzA4LjI1NjkyMjEwNjExNjEsMjg2LjIzNzM2NzM5MTMzNDI2LDE2MjguNTk2OTM5NTg0NzYzLDE5MjMuNzI0NzYyOTI4MDAzMiw5OTIuMDY4ODA2MTgyMDAxMywwLjAsMTM1NS4yODU4NzI0MDU5MzIsNzY5LjQ5NzY0NDk2NDkxODksNDYzNy4xNzQ2NTIwMDY4ODQsMzY1ODIuMjEwMjE3MjYzMzQ2LDM2ODkuNjg1MDQ3MTczNjI4LDU5NzMuNDY5ODI5ODI3NzE4LDEyNTEuNjQ3OTM4ODUyNTk3NywxMzAzLjI2MTg5NTA2NDA4MjIsOTk5LjAwOTk2MDkzNDkwMTEsNjM3LjM4OTkzMzQzNzIwNzYsNDIwLjMxNDY2ODQ4MDk3MTY1LDUzMy43NTUyMDMxODI5MDA5LDEwMjYuODExNjIwMTE2NzI0LDQ2OS45NDgzNDE3NDg4MjYyNAorNTAsVGh1IDIxIE9jdCAxMCwxMTU2LjE0NDM3OTQzMTA0NywxOTM2LjgxNDc3NTA2NTQ5MjMsNTQzNi43OTI3MzIxNjc1NDQsMTM1MjEuNTYzNzY0NzI0OTM3LDI0OS4xNTc2NjY1NDc1MDg1NCwyMzEuODE0NTIyNDY5MTIxMDcsMTMxOS4yNjQxNDc2NjIxMTY2LDE1NjIuMzMxODIxNjc4NjI2Nyw4MDEuOTcwMzY5NjMzMjI3NSwwLjAsMTEwMS43ODk5OTE0NDQxMDcsNjE5LjM2NTI2Mjk1MjMxMzUsMzc2OS4zNzk4OTIxOTU1ODIsMzIwNTYuOTcxNzU0ODkyMzYsMzAxMS4wMTY3MDYwNjU0NDUsNDk3MC43NDM3OTU4Nzg1NzQsMTAxMC42MDExMzg0NDcwMTIzLDEwNTIuNTMxMzkzMTUzOTYzNiw4MDYuMjYxNTIwNDMzNzUxNSw1MTQuOTA5MjYwMzU5MjgzMywzMzkuMTIxMjM0NTAyOTA5MDMsNDMwLjUzNTgzMjc1NTUxMjczLDgyNi43NTg1ODg4NTIxNTM3LDM3OC44NTU1NDM4NTcxMjIwMworNTEsRnJpIDIyIE9jdCAxMCw5MzUuMDMyODQ5NTM1NTQ0MSwxNTYyLjYyMjMwNjk5NjA0ODYsNDQ2OS4xNjkxODUxNDIxNjYsMTEwMjQuOTU0NzAzODcwNjk1LDIwMS41NDU1MTk1NzI2MzgzNywxODcuODY4ODk5MDkxOTI3NjMsMTA2Ny45NTI5OTgyNDY0MzMzLDEyNjYuNDM4NjU1MTMyOTQwNSw2NDguMDcxNzYwMDE1OTQ3MiwwLjAsODkzLjgyOTE5Njk4NDg3NSw0OTguNjg3MTM1NTUyNTI5MywzMDU2Ljk3MzIzMDM3MzMyNDQsMjc0NDAuODk1NjQ4ODYxMzQ4LDI0NDguNjQxNDI1NDkyNDA2Niw0MTA4LjU5OTQwNzk0OTcwOSw4MTUuNzU2NzM2OTk3ODY2MSw4NDkuNzIwMzIxNTgzNTk4OSw2NTAuOTUyMjU5MTAyMDczOSw0MTYuMTMyODY0NDA4NTI4MSwyNzMuNzg0NDUyNzIzMDk5OSwzNDcuNDYwNzUwMjE0MzMyOTYsNjY1LjU4MTI3MzY5MTE4MiwzMDUuNDMxNDQ2NTI5MjYyNQorNTIsU2F0IDIzIE9jdCAxMCw3NTYuODc1MzY4MDE1OTE3LDEyNTkuMjQ0MzU4MTU5NjcwMSwzNjQ4LjgxMTY1NjM2MjkyMyw4OTQ2LjgzNTUyNTk4OTg1LDE2My4xNjc4OTgyMDEwMzA1LDE1Mi4zNjk1MTM0MDk4NTE1LDg2NC4yMjEzMzMwMjgwMDMxLDEwMjUuMjc2MDk4OTc4NzMzNyw1MjMuNjcyODU0Mzg3ODkwNywwLjAsNzI0LjA3NTYyNjAxMTUzOTMsNDAxLjcxNDA1MTI5MTcwOCwyNDc1LjIyNDMwNTk0MjM1MTcsMjMwODQuNTQ0ODY5NTUzMjQzLDE5ODYuMjcyOTUwMDI2NzAxLDMzNzguMzcxNzU4NzMwOTIsNjU4LjQ3ODMwNzI5NDMzOCw2ODUuOTMyMjQwNDg0NjgyOCw1MjUuODM1NjI3NDgzMzAyNiwzMzYuNDg1MTE5OTM3MjI4NTUsMjIxLjE5NDkzMTk1MTg5ODI3LDI4MC41OTM3NTM4NTgzOTg4LDUzNS44NzYwMzkyNTgyOTgsMjQ2LjI5NjY2Mjc3MzMzNTg3Cis1MyxTdW4gMjQgT2N0IDEwLDYxMy4yMjgxMDc5MDU4MzgsMTAxNC4wNDA5MDM4NzI2NDE4LDI5NjQuMTE1Mjc5ODQ1NDY2LDcyMzUuNDEyNDg3MzQzNDE5LDEzMi4yMTQ1NTk1MzYwODY3LDEyMy42NzgzMzAxNzQ2NTgzOCw2OTkuMzEwNTA0MjA4ODc4NSw4MjkuMzc3MTYwMzU3MDU1Niw0MjMuMjIxOTA0NTI1MjA4OTcsMC4wLDU4Ni4wMTg5NjI4NTkxNjI5LDMyMy43OTE5OTg1NTUwMzkyNCwyMDAyLjAzNDI1NzcwNzQ3MDMsMTkxNzEuMjMzMzQ2NTc3MTY2LDE2MDguMzM1MDI1OTQyMzI2NCwyNzY2Ljg5NTIxOTk1NTc0NCw1MzEuNjM2OTk2MDEwODczMSw1NTMuNzk4MjczNjY4NjA4LDQyNS4wMzc0NDUxODM4NjA2NSwyNzIuMjU2MjM5Mjk1MTQ2OTQsMTc4Ljg0ODY3NjY3MTA2OTE0LDIyNi43NTg0MzM1NTMxMzY1LDQzMS41NzE5MjM1NDUwMTAzNSwxOTguNjkxMDkzNzM5MTUzNzYKKzU0LE1vbiAyNSBPY3QgMTAsNDk3LjMxNzgxMjU5NTc1NTcsODE2LjI5NTQ4MzM5NjI3NDksMjM5OS4wODE2MzQ4Mjg1MDM0LDU4MzYuOTIyOTg4MjMxMzI0LDEwNy4yMzE3MDQ4MDQzNDAzMSwxMDAuNDc1NTQ2NDI3NTM0NzEsNTY1Ljk1NjU0ODIxMjE1NjEsNjcwLjYyOTk4MjY5NzQyOCwzNDIuMTU3ODQwODIyODcyMjMsMC4wLDQ3NC4wNDAyNTQ1NjM5MDk4LDI2MS4xNjY2NjY5MjExOTI3LDE2MTguMjUzMDg0NDQ0NTAxNCwxNTc3MC4xNzI0NTgyOTgwODIsMTMwMC43Mzk0MTU1NDc5ODcsMjI1OS4yOTY1MTk3MjAxNDk3LDQyOS4zOTQyMzQ3MTQwOSw0NDcuMjY3OTM2NTQzNDIwNjYsMzQzLjgxMTA0OTM2MTc3OTE3LDIyMC40NDcyMzA4MzE4NDIwMywxNDQuNzMyNDQ0OTAwMjAyMywxODMuMzk2OTkzMDg0MzYwMTMsMzQ3LjcyNDUwODQxNzg4MzUsMTYwLjM3MjQ1NzcxMjQxNTU4Cis1NSxUdWUgMjYgT2N0IDEwLDQwMy43MTE5NTQ5MzU1NjU3Niw2NTcuMDY3MzgzMjcwOTczOSwxOTM2LjYzNzYzNDU5NDQ3MTgsNDcwMC42NTgwMjMzNDY1NjMsODcuMDUyMTExNDU5ODIxLDgxLjY5ODMwNzE0OTMyOTAzLDQ1OC4xODQ1Mjc2NjAxODk5LDU0Mi4yMDU4NjAxMTIyNDQ2LDI3Ni43NTY4MjE1MzQ4ODU2LDAuMCwzODMuMzg0OTAzNzYwNDY2MDUsMjEwLjgxNzA3ODczMTA4NDM0LDEzMDcuNjMwNDYzODg3MTg0OCwxMjg4MS4yNzAyMTE4NDcyNTIsMTA1MS4xODMzOTg4NDMyODkzLDE4NDAuNzE1NzA1NjIzMjY2LDM0Ni45OTU1MTU0ODI4MDQxLDM2MS40MDQ4ODU4OTAwOTk5MywyNzguMzI5NTE3NTM5NzI5MDcsMTc4LjYzODY4NTk0NTcyMDgyLDExNy4yMjkyMzM3MTY0MzAxNywxNDguNDUyNzgzMDEwNTY2MSwyODAuMzI2OTE4MTE5MTQ4MiwxMjkuNTI2MjI2NDQ0NTUxNworNTYsV2VkIDI3IE9jdCAxMCwzMjguMDUzMDI1NjkyNTAwMSw1MjguOTgzMDQwNzUzNzE0NiwxNTYwLjQ0NTA0ODY0MDcwNjMsMzc4MS4yOTg2OTc1NzUyMzc0LDcwLjczODk1NjM3ODQ2MDkzLDY2LjQ5MTI2NzY4NDEwNzgzLDM3MS4xMTEyMjk3NTg1NzgsNDM4LjQzMDQzMzU1Njg0NjQsMjIzLjk5MzMyODQ5MjU3NTksMC4wLDMxMC4wODY5NTQwMTQ5ODUxNywxNzAuMzE2OTQ2NTk4ODk2NzgsMTA1Ni41ODM0OTM2MDU0OTIsMTA0NjcuMDA1NDA3MjczNDE4LDg0OS4xNzc5NTkzOTM3NTI5LDE0OTcuMjgyODc0ODkwOTgyNCwyODAuNTg2MjAwNTEzNDM0NzMsMjkyLjIwMTUyNzAyOTU1NjksMjI1LjUxMjc1Nzg4MzE2MTUsMTQ0Ljg4MjA3NzE1NTg0NTY4LDk1LjA0MTM1ODYyNzA3NTY1LDEyMC4yNzM5NjY2MTMyMjQwNSwyMjYuMTQ0MDk2MTE5MTk2MzgsMTA0LjY4ODQ3NjE2NTE4MjYKKzU3LFRodSAyOCBPY3QgMTAsMjY2Ljg0NDc5MTIwNDA3MzgzLDQyNi4wMTE3MzcyMTQ3Mzg5NiwxMjU1Ljc3MzA2MzY2MDQzNTgsMzAzOS42ODY5MDgwOTkwOTEsNTcuNTQwMDA0MjE2MTA5NjYsNTQuMTY1Nzk3MjI5ODY4MTIsMzAwLjc2MjU1OTIxNTc5MTQsMzU0LjYzMDQxNTM0MzczNjU2LDE4MS40MTY5ODg1NzQ2OTgwNSwwLjAsMjUwLjg3MDg4MTc3MDIxNiwxMzcuNzE5NzE5NzM3MjEwNDUsODUzLjg3Nzc1NzQ5OTQzODIsODQ3Mi45NTE5Mjg0Mjk5OSw2ODUuOTIzNzMzMjY0NjA4MSwxMjE2LjU4MDMyMTAzMzIyMjYsMjI3LjA1MDMxNDQ0NDkzNjMzLDIzNi40MTQ5MTkyNjkxODc5MiwxODIuODg0MDkxNDM0OTM5NiwxMTcuNjA5MjMyNzc0NTkzODksNzcuMTI3NTMxODI3MDc3NTUsOTcuNTM0NDIxNTIyNzgzMTIsMTgyLjU3MDkzMDQ2MjEzOTg0LDg0LjY4MDM1MjAzOTQwMjM0Cis1OCxGcmkgMjkgT2N0IDEwLDIxNy4yODA5Mjc5MzkyMTkyNSwzNDMuMjUxMzI0NDI3NDA4NiwxMDA5LjgxOTI1Mjg2ODE4NzIsMjQ0Mi43NDIzMDk5ODE2NjQsNDYuODUxMTE3MDgzOTI2NTQsNDQuMTY3NDkwMTE2ODIzNDIsMjQzLjkxNTQ4ODUwNzI4NzAyLDI4Ni45ODM0OTc1MDQzNjQyLDE0Ny4wNDgzNDE4NjM0NjA3LDAuMCwyMDMuMDUxODM2Njk1MDI3MjgsMTExLjQ2NDk4Nzg1OTY3OTIxLDY5MC4yOTU0MjQ3MTMzODczLDY4NDAuMDE1MzExNzk5NjExLDU1NC4xMjY5NTUzOTU4NDc3LDk4Ny44MDM0NTMzOTA2MTQ1LDE4My44NzQ4MjQwMzkyMTUzNSwxOTEuNDI3NjkzMzY3MTMyNjMsMTQ4LjQ1MzQ0MDE0NDQ3NTI4LDk1LjU1ODk0MDEzMTMwOTk0LDYyLjY1MjMxMTAxMzk1ODY2LDc5LjE2OTg2Nzk5NzUwMjUxLDE0Ny41MTM2MDE0MzA4NTI1Myw2OC41NTM5ODA3NTE2Mjc4OAorNTksU2F0IDMwIE9jdCAxMCwxNzcuMTA3NzA0OTkyNzc2MTIsMjc2LjczNTAwMDU4NTA4NDgsODExLjcyNDIxMDM4MjE0MTEsMTk2Mi45NTM2NjgwNzQ4MjMzLDM4LjE4Njg5ODY0NzA5OTM3LDM2LjA0OTg4NTIxOTM5MzIzLDE5Ny45NjI1Nzk3NjU5NDMxMywyMzIuMzc5MTQwNzQ2OTU3NjYsMTE5LjI5MTE5ODk1MTgxOTQ3LDAuMCwxNjQuNDQxMzAxNjI5ODUwNSw5MC4zMDI0MDk0MDIzMjAxOCw1NTguMzE3NjM2ODM5OTgzNiw1NTExLjE2NDkxMzQ3MTI1MjUsNDQ3Ljc5NDI0NDA2OTE2MzIsODAxLjczNzAyMDI1MzE2MTQsMTQ5LjAzNjIwMzAxNjcxOTc1LDE1NS4xMzEyMDUyMTg0NzQ5MiwxMjAuNjIyMjY3NDgxNDY4NTgsNzcuNzE3MTYxNzE4MjQ1NzMsNTAuOTQ1MzIwOTQ4OTI3OSw2NC4zMjYyMDU0NTg3MTg1LDExOS4yOTE0Mjg1Mzg4NDI2Miw1NS41NDc5NDU5ODE1NzY3OQorNjAsU3VuIDMxIE9jdCAxMCwxNDQuNTE0MDU2ODQ3NjI4NjQsMjIzLjI2MzQzOTc5NjQyMTksNjUyLjQzMDAyNDA3NDU4MDYsMTU3Ny42OTU4NjQ5NTUwNzg2LDMxLjE1NzE0NTE1ODQxNjE0MiwyOS40NTMyOTY1MTk3MTIyMTgsMTYwLjc5ODA5NzgyODEyNTEyLDE4OC4yOTUzODczODcyMTg0Myw5Ni44NTk5ODU4MDU4MDU2OCwwLjAsMTMzLjI2MjU5NjkxMTMyODc5LDczLjIzMDIzMDgzNTkwNzQ2LDQ1MS44Mzc5NDkzMzAyMjExLDQ0MzQuNzMyNjQ5NzU0NzE1LDM2Mi4wMzIxNjM0Njg0MzI5LDY1MC42MzM3MDM0NTA2ODk4LDEyMC45MDY4MDk1MTQyNjA3NCwxMjUuODI4NzQzMDM0ODc0ODIsOTguMTA2NjMyMjk5ODU1NTgsNjMuMjY4NjE4ODAyMTE1NDMsNDEuNDY4NDcyNzUzNTg1NDUsNTIuMzE3ODkwOTMyMTA2OTEsOTYuNTU2NDgxMjIxODU4MjIsNDUuMDUwOTU0OTU0NjUxMjQ2Cis2MSxNb24gMSBOb3YgMTAsMTE4LjA0MzYzMTAzNTE5NDc5LDE4MC4yNjI0NjI2MjQwMzk0Nyw1MjQuNDcxMDgwMzM1MjA5LDEyNjguNTEyNTQ3NDIzODY3NSwyNS40NDc5ODAwMDk3Mjk0MjcsMjQuMDg3Nzk0ODIyMDI0MjI1LDEzMC43MjM1MTU5ODcyNDIyOCwxNTIuNjkyOTk4MzYxNDE0NTcsNzguNzIwMDkyNzI3MDYwNzcsMC4wLDEwOC4wNzc2NzYyODYwNTIwOCw1OS40NDU3OTA2MTI3MzQzNywzNjUuOTEyODUzMjE3MjA0NCwzNTY1LjY4MDAxOTYzNTk1OSwyOTIuODY0MTk5NzkwOTY5NDUsNTI4LjA0OTAxNDU3MDE0NDksOTguMTc4Mjg0NzQxNDk1NTMsMTAyLjE1NjExOTcyMTM5NDAyLDc5Ljg3NTEzMDM5OTIwMjUzLDUxLjU1NzcyMzgyMzU2NDk5LDMzLjc4OTY2NzQ4MDk0MDkzNSw0Mi41OTQ0OTQwNDMxNDE1NSw3OC4yMjgyMDg1Njc1MjgzLDM2LjU3MjM2NjIwMTQ1MjI5Cis2MixUdWUgMiBOb3YgMTAsOTYuNTI0NDMzNjQ5NDA4NTEsMTQ1LjY2NDM2ODg4NDg1MTExLDQyMS43NDcxMDM1NzQ2MzI0MywxMDIwLjQzNzE5NzUxNjA1MzIsMjAuODA2NzQ3MTA1NjIzMDE4LDE5LjcxOTUzNjg4MTMzNTU4LDEwNi4zNjk4MTk4NTYzMzc4NCwxMjMuOTI2MjMxMDg2NDc0MTMsNjQuMDM5MjI5ODkzNzg2NDQsMC4wLDg3LjcyNTA3NzgwNTg0OTQyLDQ4LjMwNTc3NzYyMzA5MTUyLDI5Ni41NDk1OTc3MzI3NzUxLDI4NjUuNzMwMDk1NDE4ODM0LDIzNy4wNzAxODEwNTA1NDI5NCw0MjguNjY0NDIyNTkxMDk0NTQsNzkuNzk5MjYxNzY5MjE3MzEsODMuMDE2OTcxNjYwNDkwODgsNjUuMDk4OTY2OTI4MjM0MjYsNDIuMDU3MTI5MjI0NjUzMzQsMjcuNTYxNzI2NjY4MjU1NDY3LDM0LjcxMzg2NjMxOTk2OTE0LDYzLjQ0MDU1ODE2OTU0NDczLDI5LjcxODM4MjMzNjQxMzUxMgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5hdXRvbWF0aWNleHBlcmltZW50L3Jlc291cmNlcy9BdXRvbWF0ZWRFeHBlcmltZW50RXhhbXBsZS9SZWNvcmRlZCBTaW11bGF0aW9ucy9SZWZlcmVuY2UvUG9wdWxhdGlvbiBDb3VudF8wLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuYXV0b21hdGljZXhwZXJpbWVudC9yZXNvdXJjZXMvQXV0b21hdGVkRXhwZXJpbWVudEV4YW1wbGUvUmVjb3JkZWQgU2ltdWxhdGlvbnMvUmVmZXJlbmNlL1BvcHVsYXRpb24gQ291bnRfMC5jc3YKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMmMyNDQwMQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuYXV0b21hdGljZXhwZXJpbWVudC9yZXNvdXJjZXMvQXV0b21hdGVkRXhwZXJpbWVudEV4YW1wbGUvUmVjb3JkZWQgU2ltdWxhdGlvbnMvUmVmZXJlbmNlL1BvcHVsYXRpb24gQ291bnRfMC5jc3YKQEAgLTAsMCArMSBAQAoraXRlcmF0aW9uLHRpbWUsCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmF1dG9tYXRpY2V4cGVyaW1lbnQvcmVzb3VyY2VzL0F1dG9tYXRlZEV4cGVyaW1lbnRFeGFtcGxlL1JlY29yZGVkIFNpbXVsYXRpb25zL1JlZmVyZW5jZS9Qb3B1bGF0aW9uIENvdW50XzEuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5hdXRvbWF0aWNleHBlcmltZW50L3Jlc291cmNlcy9BdXRvbWF0ZWRFeHBlcmltZW50RXhhbXBsZS9SZWNvcmRlZCBTaW11bGF0aW9ucy9SZWZlcmVuY2UvUG9wdWxhdGlvbiBDb3VudF8xLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi42M2FmZDc5Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5hdXRvbWF0aWNleHBlcmltZW50L3Jlc291cmNlcy9BdXRvbWF0ZWRFeHBlcmltZW50RXhhbXBsZS9SZWNvcmRlZCBTaW11bGF0aW9ucy9SZWZlcmVuY2UvUG9wdWxhdGlvbiBDb3VudF8xLmNzdgpAQCAtMCwwICsxLDYzIEBACitpdGVyYXRpb24sdGltZSxTRS1BQixTRS1BQyxTRS1CRCxTRS1CSCxTRS1DLFNFLUQsU0UtRixTRS1HLFNFLUgsU0UtSSxTRS1LLFNFLUtQLFNFLUwsU0UtTU8sU0UtTixTRS1SSSxTRS1TLFNFLVNLLFNFLVNULFNFLVQsU0UtVSxTRS1YLFNFLVksU0UtWgorMSxUdWUgMiBOb3YgMTAsMTY4MzQ4OC4wLDI2Mzk1Ny4wLDI1NTEzOS4wLDc5NzIwNi4wLDMxMjg1My4wLDI1NzE2MS4wLDI5ODA2Ni4wLDIwODk5Mi4wLDIxNTQ3MC4wLDU2Nzk2LjAsMTM3NzgzLjAsMjk3MDk1LjAsNDY1OTQzLjAsODc4MTU4LjAsMjg0NDQ4LjAsMzA2MDYxLjAsMjgzMzYzLjAsMjc0ODEwLjAsNDI1NDg3LjAsMjkyMzk0LjAsMjczNTg0LjAsMjkyODk3LjAsMjUwNTE1LjAsMTM3NTQ0LjAKKzIsRnJpIDMgU2VwIDEwLDE2ODM0ODcuODcyODE1NTE4MiwyNjM5NTcuMDAwMDAwMDAwMSwyNTUxMzkuMDAwMDAwMDAwMDYsNzk3MjA2LjAsMzEyODUyLjk5ODgwNTA3MDIsMjU3MTYwLjk5ODkwMjI5NzUyLDI5ODA2NS45OTk5OTk5NzM2LDIwODk5MS45OTk5OTk5OTk4OCwyMTU0NjkuOTk5OTk5OTcyOTMsNTY3OTYuMCwxMzc3ODIuOTk5OTk5OTk5OTQsMjk3MDk0Ljk5OTk5OTg4MTQzLDQ2NTk0Mi45OTk5OTk5OTk3Nyw4NzgxNTcuOTk5OTk5OTk5NSwyODQ0NDguMDAwMDAwMDAwMDYsMzA2MDYxLjAwMDAwMDAwMDEsMjgzMzYyLjk5OTk5OTk3MSwyNzQ4MDkuOTk5OTk5OTcxMjUsNDI1NDg2Ljk5OTk5MjI5MzgsMjkyMzkzLjk5OTk5MjgzOTQ3LDI3MzU4My45OTk5ODU0MzA5LDI5Mjg5Ni45OTk5OTI0MDA2LDI1MDUxNC45OTk5OTk5Nzc5LDEzNzU0My45OTk5OTk5NzkyOAorMyxTYXQgNCBTZXAgMTAsMTY4MzQ4Ny42NzA1NzE1MTYzLDI2Mzk1Ni45OTk5OTk5OTY0NSwyNTUxMzkuMDAwMDAwMDAwMDYsNzk3MjA1Ljk5OTk5OTk5OTgsMzEyODUyLjk5MzY2Njk4MzczLDI1NzE2MC45OTQyNjk5NzQzLDI5ODA2NS45OTk5OTkzODc0LDIwODk5MS45OTk5OTk5OTMzLDIxNTQ2OS45OTk5OTkzNzQ0NCw1Njc5Ni4wLDEzNzc4Mi45OTk5OTk5OTY2MiwyOTcwOTQuOTk5OTk3MjQ4Niw0NjU5NDIuOTk5OTk5OTg5MDYsODc4MTU3Ljk5OTk5OTk5OTQsMjg0NDQ3Ljk5OTk5OTk5Njc0LDMwNjA2MS4wMDAwMDAwMDAwNiwyODMzNjIuOTk5OTk5MzIzNiwyNzQ4MDkuOTk5OTk5MzM1Miw0MjU0ODYuOTk5OTE0Nzk2MDMsMjkyMzkzLjk5OTkyMTA3ODA0LDI3MzU4My45OTk4Mzk2ODExNCwyOTI4OTYuOTk5OTE0OTcxMzUsMjUwNTE0Ljk5OTk5OTQ3NSwxMzc1NDMuOTk5OTk5NTEwMjQKKzQsU3VuIDUgU2VwIDEwLDE2ODM0ODcuMzQ4NjQ5ODc2MiwyNjM5NTYuOTk5OTk5OTU4MDMsMjU1MTM4Ljk5OTk5OTk5OTksNzk3MjA1Ljk5OTk5OTk5ODYsMzEyODUyLjk4MDkyOTExMjA2LDI1NzE2MC45ODMwMDY0Njk2NywyOTgwNjUuOTk5OTk1NjAwNCwyMDg5OTEuOTk5OTk5OTI1NzksMjE1NDY5Ljk5OTk5NTUxMTI2LDU2Nzk1Ljk5OTk5OTk5OTk4NSwxMzc3ODIuOTk5OTk5OTYyMTQsMjk3MDk0Ljk5OTk4MDIyMzcsNDY1OTQyLjk5OTk5OTg3Nzk0LDg3ODE1Ny45OTk5OTk5OTkxLDI4NDQ0Ny45OTk5OTk5NjI2MywzMDYwNjAuOTk5OTk5OTk4NywyODMzNjIuOTk5OTk1MTAwNTQsMjc0ODA5Ljk5OTk5NTIxNjYsNDI1NDg2Ljk5OTYwMzAzMDQ1LDI5MjM5My45OTk2MzM0NTk2NywyNzM1ODMuOTk5MjU2ODk0NzUsMjkyODk2Ljk5OTU5OTE5MTM2LDI1MDUxNC45OTk5OTYxNTQ0NSwxMzc1NDMuOTk5OTk2NDEyMDgKKzUsTW9uIDYgU2VwIDEwLDE2ODM0ODYuODM1NzY0NTI1LDI2Mzk1Ni45OTk5OTk3MzgsMjU1MTM4Ljk5OTk5OTk5ODg0LDc5NzIwNS45OTk5OTk5ODg4LDMxMjg1Mi45NTQyMDI5MzY1LDI1NzE2MC45NTk4MDczMjA3NiwyOTgwNjUuOTk5OTgwMzMzNiwyMDg5OTEuOTk5OTk5NTUwMzcsMjE1NDY5Ljk5OTk3OTk0OTc2LDU2Nzk2LjAsMTM3NzgyLjk5OTk5OTc2OTQ3LDI5NzA5NC45OTk5MTE1NDM1LDQ2NTk0Mi45OTk5OTkyNTY4LDg3ODE1Ny45OTk5OTk5OTg4LDI4NDQ0Ny45OTk5OTk3NzEyLDMwNjA2MC45OTk5OTk5ODg2LDI4MzM2Mi45OTk5Nzc5MDY0NywyNzQ4MDkuOTk5OTc4NTc0MTcsNDI1NDg2Ljk5ODY5NTc3ODYsMjkyMzkzLjk5ODc5OTU4OTEsMjczNTgzLjk5NzU3MTkzNDU0LDI5Mjg5Ni45OTg2NjgwOTEsMjUwNTE0Ljk5OTk4MjQ3MTQ2LDEzNzU0My45OTk5ODM2NDQ4NAorNixUdWUgNyBTZXAgMTAsMTY4MzQ4Ni4wMTc5NTU3MTQ0LDI2Mzk1Ni45OTk5OTg4MjE2LDI1NTEzOC45OTk5OTk5OTI4NCw3OTcyMDUuOTk5OTk5OTM2OSwzMTI4NTIuOTAyNDk4NTgzOCwyNTcxNjAuOTE1NzAzNTQwMzIsMjk4MDY1Ljk5OTkzMjAwOTg0LDIwODk5MS45OTk5OTgwMzQxOCwyMTU0NjkuOTk5OTMwNzM2MTQsNTY3OTYuMCwxMzc3ODIuOTk5OTk4OTg3NywyOTcwOTQuOTk5Njk0MDYwNTMsNDY1OTQyLjk5OTk5NjczMzI3LDg3ODE1Ny45OTk5OTk5OTc5LDI4NDQ0Ny45OTk5OTg5OTI1NCwzMDYwNjAuOTk5OTk5OTM2NCwyODMzNjIuOTk5OTIyOTQxNTYsMjc0ODA5Ljk5OTkyNTc3MDksNDI1NDg2Ljk5NjQ1MTE1OSwyOTIzOTMuOTk2NzQ0MTAwMSwyNzM1ODMuOTkzNDMxNDgyMDYsMjkyODk2Ljk5NjMzNTY3MDYsMjUwNTE0Ljk5OTkzODIxNjI0LDEzNzU0My45OTk5NDIzNjM2NQorNyxXZWQgOCBTZXAgMTAsMTY4MzQ4NC43MTI5NTIwMjA2LDI2Mzk1Ni45OTk5OTU2ODE3LDI1NTEzOC45OTk5OTk5Njc5LDc5NzIwNS45OTk5OTk3MjM0LDMxMjg1Mi44MDcxMzA0MTk5LDI1NzE2MC44MzU2NzY1NTY0NSwyOTgwNjUuOTk5Nzk5ODQwNDQsMjA4OTkxLjk5OTk5Mjk5Mzg2LDIxNTQ2OS45OTk3OTYyNjAxNSw1Njc5NS45OTk5OTk5OTk5ODUsMTM3NzgyLjk5OTk5NjM3NjcyLDI5NzA5NC45OTkwOTkxNDY1LDQ2NTk0Mi45OTk5ODgyOTI2LDg3ODE1Ny45OTk5OTk5OTM1LDI4NDQ0Ny45OTk5OTYzODUsMzA2MDYwLjk5OTk5OTcyNDgsMjgzMzYyLjk5OTc3MTEzMTksMjc0ODA5Ljk5OTc4MTAwODksNDI1NDg2Ljk5MTQxMDkyNzI2LDI5MjM5My45OTIxNDUyNDc5MywyNzM1ODMuOTg0MTk5ODE4NSwyOTI4OTYuOTkxMDM2OTE0MywyNTA1MTQuOTk5ODE0NTk0MjUsMTM3NTQzLjk5OTgyNzEyNDU2Cis4LFRodSA5IFNlcCAxMCwxNjgzNDgyLjYyOTEwNTI4MTYsMjYzOTU2Ljk5OTk4NjI0Njg3LDI1NTEzOC45OTk5OTk4Nzg5Niw3OTcyMDUuOTk5OTk4OTc2LDMxMjg1Mi42MzY2MjY2MDIzLDI1NzE2MC42OTQ3NzQwMjU3NiwyOTgwNjUuOTk5NDcxOTgyMDcsMjA4OTkxLjk5OTk3ODI5NCwyMTU0NjkuOTk5NDYzMDEzMzIsNTY3OTUuOTk5OTk5OTk5OTg1LDEzNzc4Mi45OTk5ODg3MjY4MywyOTcwOTQuOTk3NjIzNTg2OCw0NjU5NDIuOTk5OTYzNTI2LDg3ODE1Ny45OTk5OTk5NzU5LDI4NDQ0Ny45OTk5ODg3MjQ0LDMwNjA2MC45OTk5OTg5OTcxNCwyODMzNjIuOTk5MzkwOTEyNSwyNzQ4MDkuOTk5NDIxMDY5NjMsNDI1NDg2Ljk4MDc5Nzc2NDk2LDI5MjM5My45ODI0OTYwOTE1LDI3MzU4My45NjQ5MDI5MDYsMjkyODk2Ljk3OTc1NzUxNDEsMjUwNTE0Ljk5OTUwMTU2MzI2LDEzNzU0My45OTk1MzU2MTU3NgorOSxGcmkgMTAgU2VwIDEwLDE2ODM0NzkuMjk5NjI3NjE1NCwyNjM5NTYuOTk5OTYwNDMzNjMsMjU1MTM4Ljk5OTk5OTU5NjQ1LDc5NzIwNS45OTk5OTY2NTE3LDMxMjg1Mi4zMzgzNDM2NTE2LDI1NzE2MC40NTE3NjE5MTI4MiwyOTgwNjUuOTk4NzEzMjA3NywyMDg5OTEuOTk5OTM5MjM5NjQsMjE1NDY5Ljk5ODY5MjU4NDUyLDU2Nzk1Ljk5OTk5OTk5OTk4LDEzNzc4Mi45OTk5NjgzMTA2NCwyOTcwOTQuOTk0MjA5OTk4NjQsNDY1OTQyLjk5OTg5NzMzMDc3LDg3ODE1Ny45OTk5OTk5MTMyLDI4NDQ0Ny45OTk5NjgyMjE0NywzMDYwNjAuOTk5OTk2NzcxNTcsMjgzMzYyLjk5ODUwMjYwOTUsMjc0ODA5Ljk5ODU4NjExODcsNDI1NDg2Ljk1OTQ0MTU5ODUsMjkyMzkzLjk2MzE0Nzg1NzM0LDI3MzU4My45MjYzNjU0MjU1LDI5Mjg5Ni45NTY4MzAxNjY4NiwyNTA1MTQuOTk4NzYyNDU2NjQsMTM3NTQzLjk5ODg0ODIzOTEzCisxMCxTYXQgMTEgU2VwIDEwLDE2ODM0NzMuOTc3MzgzNDkwNywyNjM5NTYuOTk5ODk0NjM0NTMsMjU1MTM4Ljk5OTk5ODc3NTMsNzk3MjA1Ljk5OTk5MDAzNDMsMzEyODUxLjgyNDgwMzgzOTgsMjU3MTYwLjAzODg3MTk4MjM0LDI5ODA2NS45OTcwNDYyNjExLDIwODk5MS45OTk4NDI1MjM2OCwyMTU0NjkuOTk3MDAxODk4NzcsNTY3OTUuOTk5OTk5OTk5OTgsMTM3NzgyLjk5OTkxNzUyNTg2LDI5NzA5NC45ODY3MTU0ODYzLDQ2NTk0Mi45OTk3MzI0MjUxLDg3ODE1Ny45OTk5OTk3MTIzLDI4NDQ0Ny45OTk5MTcwNzIsMzA2MDYwLjk5OTk5MDU0MDksMjgzMzYyLjk5NjUzMjk2Mzk0LDI3NDgwOS45OTY3NDc2MDk4Nyw0MjU0ODYuOTE3ODk2NzE5NTMsMjkyMzkzLjkyNTYzOTg2NDEsMjczNTgzLjg1MTk3ODIxOTEsMjkyODk2LjkxMTgwOTY4NzA0LDI1MDUxNC45OTcxMDY3Njg4LDEzNzU0My45OTczMTA5OTA0NAorMTEsU3VuIDEyIFNlcCAxMCwxNjgzNDY1LjQ2Njc4MTc1NTcsMjYzOTU2Ljk5OTczNTc3NzczLDI1NTEzOC45OTk5OTY1NDU4NCw3OTcyMDUuOTk5OTcyNDMwMywzMTI4NTAuOTUxMjE3Nzg2LDI1NzE1OS4zNDUwMTM0MTI0NywyOTgwNjUuOTkzNTI2OTg4NDMsMjA4OTkxLjk5OTYxNTU0OTI4LDIxNTQ2OS45OTM0MzY2NzE5LDU2Nzk1Ljk5OTk5OTk5OTk3LDEzNzc4Mi45OTk3OTc4MjM3OCwyOTcwOTQuOTcwOTA3NzA0OCw0NjU5NDIuOTk5MzQzMTU1MDcsODc4MTU3Ljk5OTk5OTExODcsMjg0NDQ3Ljk5OTc5NjE0MzYsMzA2MDYwLjk5OTk3NDI0MTEzLDI4MzM2Mi45OTIzMzY5MTMsMjc0ODA5Ljk5Mjg1NzQ0Mzg3LDQyNTQ4Ni44MzkxMzMyNjYsMjkyMzkzLjg1NDc3MDU2OTYsMjczNTgzLjcxMjA2ODMyOTEsMjkyODk2LjgyNTcxNDY0NzQsMjUwNTE0Ljk5MzU0NDYwNTIsMTM3NTQzLjk5NDAwOTk0NjE1CisxMixNb24gMTMgU2VwIDEwLDE2ODM0NTEuODU2MDY2Njc4OSwyNjM5NTYuOTk5MzY4NjcwOCwyNTUxMzguOTk5OTkwODE2Nyw3OTcyMDUuOTk5OTI4MDkxLDMxMjg0OS40NzkyNDg2MjU1LDI1NzE1OC4xODg5MjU2NzIwMywyOTgwNjUuOTg2MzMwMTE5OTUsMjA4OTkxLjk5OTEwNTQyNTYsMjE1NDY5Ljk4NjE1NDY3NzIzLDU2Nzk1Ljk5OTk5OTk5OTk2LDEzNzc4Mi45OTk1Mjc2NDQxMywyOTcwOTQuOTM4NjE5MTM4OCw0NjU5NDIuOTk4NDYzMjE2Nyw4NzgxNTcuOTk5OTk3NDc2MSwyODQ0NDcuOTk5NTIyMzQzNCwzMDYwNjAuOTk5OTMzODY2OCwyODMzNjIuOTgzNjgwMDM4OSwyNzQ4MDkuOTg0ODg0NTYzMSw0MjU0ODYuNjkyODMzMzQ2OSwyOTIzOTMuNzIzNTcyODYzMjcsMjczNTgzLjQ1NDMwMjk2MTgsMjkyODk2LjY2NDUxODA0ODg3LDI1MDUxNC45ODYxMjUxMzMxLDEzNzU0My45ODcxNDkzMjc3MworMTMsVHVlIDE0IFNlcCAxMCwxNjgzNDMwLjA5Mjk2NjYxODcsMjYzOTU2Ljk5ODU1MDA1MTcsMjU1MTM4Ljk5OTk3Njc0MDU0LDc5NzIwNS45OTk4MjEyODEsMzEyODQ3LjAxODIxNjI3NTQ0LDI1NzE1Ni4yNzU3OTM3MzE1NiwyOTgwNjUuOTcxOTg4MjMyNDYsMjA4OTkxLjk5Nzk5ODU1MTIsMjE1NDY5Ljk3MTY2MTQ1MzU0LDU2Nzk1Ljk5OTk5OTk5OTk1NiwxMzc3ODIuOTk4OTM4OTUwNDIsMjk3MDk0Ljg3NDM2NzMxNTUsNDY1OTQyLjk5NjU0MzAzODQsODc4MTU3Ljk5OTk5MzE3MDYsMjg0NDQ3Ljk5ODkyMzg0NzYsMzA2MDYwLjk5OTgzODIxNDQsMjgzMzYyLjk2NjI3OTc1NTM1LDI3NDgwOS45Njg5NjE4OTcsNDI1NDg2LjQyNTU0NDc1MywyOTIzOTMuNDg0NjY0MTM0NDUsMjczNTgyLjk4NzI5MTc5NDIsMjkyODk2LjM2Nzg1OTYxMjg2LDI1MDUxNC45NzEwNzQwNDM5NSwxMzc1NDMuOTczMjY1NzQ4MQorMTQsV2VkIDE1IFNlcCAxMCwxNjgzMzk1LjMxNzY5NzU4NiwyNjM5NTYuOTk2Nzc3ODEyNCwyNTUxMzguOTk5OTQzNDIwODcsNzk3MjA1Ljk5OTU3MzMxMjEsMzEyODQyLjkzMDczNTQ1NzE2LDI1NzE1My4xMjc5MTQ5NjA3NiwyOTgwNjUuOTQ0MDEwNjIyNDUsMjA4OTkxLjk5NTY2NTYzNzU3LDIxNTQ2OS45NDM0MjU2OTQ0OCw1Njc5NS45OTk5OTk5OTk5NSwxMzc3ODIuOTk3NjkzMTA2ODgsMjk3MDk0Ljc0OTI0MjgxNzA1LDQ2NTk0Mi45OTI0NzMyODM4NCw4NzgxNTcuOTk5OTgyMzc2NCwyODQ0NDcuOTk3NjUzMDg3MjUsMzA2MDYwLjk5OTYxOTc5ODQsMjgzMzYyLjkzMjA1MDk1NDYsMjc0ODA5LjkzNzgzNTAyMjcsNDI1NDg1Ljk0MzgyMDQ3NDYsMjkyMzkzLjA1NTQ4NDY3NjI3LDI3MzU4Mi4xNTI4Mjg1OTE5LDI5Mjg5NS44Mjk2NTIwMDk5LDI1MDUxNC45NDEyMDE5MjI2LDEzNzU0My45NDU3ODQwMzY0NQorMTUsVGh1IDE2IFNlcCAxMCwxNjgzMzM5LjgyOTIzMzI0OTksMjYzOTU2Ljk5MzAzNjExMjM0LDI1NTEzOC45OTk4NjcwMDQyOCw3OTcyMDUuOTk5MDE1MzYyNCwzMTI4MzYuMTgzMzg0MjQxMjUsMjU3MTQ3Ljk3NTQwNDUyMTcsMjk4MDY1Ljg5MDQwNjc3MjU1LDIwODk5MS45OTA4NjgwODU0NCwyMTU0NjkuODg5NDAwNTQxOSw1Njc5NS45OTk5OTk5OTk5NTYsMTM3NzgyLjk5NTEyMDgxNDY1LDI5NzA5NC41MDk5OTEyMDE2LDQ2NTk0Mi45ODQwNTc3OTM0NSw4NzgxNTcuOTk5OTU2MzE5OCwyODQ0NDcuOTk1MDIwNTIyOCwzMDYwNjAuOTk5MTM2MzkzMTMsMjgzMzYyLjg2NTkzNDkxOTEsMjc0ODA5Ljg3ODA3NDM2MzYsNDI1NDg1LjA4NTU4NzQyMDYsMjkyMzkyLjI5MzMzODUwNDQ1LDI3MzU4MC42NzkzODQ3Mzc0LDI5Mjg5NC44NjUwODQzMDMxNCwyNTA1MTQuODgzMDAyNzUyODUsMTM3NTQzLjg5MjM5Njk2NTY4CisxNixGcmkgMTcgU2VwIDEwLDE2ODMyNTEuNTIwNjg2NzQ3LDI2Mzk1Ni45ODUzMDczMTIyLDI1NTEzOC45OTk2OTY1MjI2LDc5NzIwNS45OTc3OTM3MzEyLDMxMjgyNS4xMTU2MjU1MjE3NSwyNTcxMzkuNTg3NjczNjQ3NTMsMjk4MDY1Ljc4OTMwNTMyMjMsMjA4OTkxLjk4MTIxMTc2Njk1LDIxNTQ2OS43ODc2NDQ3NzQ1LDU2Nzk1Ljk5OTk5OTk5OTk1NiwxMzc3ODIuOTg5OTIzMDMxMzMsMjk3MDk0LjA1OTc3NTQwOTEsNDY1OTQyLjk2NzAyNjczOTg1LDg3ODE1Ny45OTk4OTU0NjY4LDI4NDQ0Ny45ODk2ODMwMTk1LDMwNjA2MC45OTgwOTUzNDk1LDI4MzM2Mi43NDAyNDQ0ODkxNiwyNzQ4MDkuNzY1MTMxNTU4NjQsNDI1NDgzLjU3MjAyNjU2NzMsMjkyMzkwLjk1MzY5ODQwMjg1LDI3MzU3OC4xMDUyNjQ1OTUyLDI5Mjg5My4xNTUxNzYxMTkzNiwyNTA1MTQuNzcxNDMzMTI0MjYsMTM3NTQzLjc5MDM3ODk1MzY4CisxNyxTYXQgMTggU2VwIDEwLDE2ODMxMTEuNjAxODcwMTgzLDI2Mzk1Ni45Njk2MzA3MzYzLDI1NTEzOC45OTkzMjQ3ODQzOCw3OTcyMDUuOTk1MTc4NzE3NywzMTI4MDcuMDgzODM0MjMwNTUsMjU3MTI2LjAxMjI4NTc5NjI2LDI5ODA2NS42MDEwNzY4OTcsMjA4OTkxLjk2MjExNTUzNDc4LDIxNTQ2OS41OTg0NzMwMzQ5Miw1Njc5NS45OTk5OTk5OTk5NiwxMzc3ODIuOTc5NjA0NTk1MjUsMjk3MDkzLjIyMzkwMTI4MjUsNDY1OTQyLjkzMzE2NjMwNTA3LDg3ODE1Ny45OTk3NTcxODE2LDI4NDQ0Ny45NzkwNTAxMzA5MywzMDYwNjAuOTk1OTAzMDcxOTUsMjgzMzYyLjUwNDQ0Njk2NiwyNzQ4MDkuNTU0NDUzMDA2Miw0MjU0ODAuOTI2MDk5Mzc4LDI5MjM4OC42MTk2NTM3MDEzLDI3MzU3My42NTA3MDMzOTA4LDI5Mjg5MC4xNTI5MTY2NDE0NCwyNTA1MTQuNTYwNDM3MjgxNTYsMTM3NTQzLjU5ODA5NTAyNDcKKzE4LFN1biAxOSBTZXAgMTAsMTY4Mjg5MS41MTc3ODExOTE1LDI2Mzk1Ni45MzgzNDQ2OTE0LDI1NTEzOC45OTg1MzA1NDAyLDc5NzIwNS45ODk2OTIxNjksMzEyNzc3Ljk1OTIyMjA4MzQ1LDI1NzEwNC4yMDY5Mjg5ODY3NiwyOTgwNjUuMjU0NzAxNTc5ODYsMjA4OTkxLjkyNDk0MDAwNDIsMjE1NDY5LjI1MDg4OTA2MDgsNTY3OTUuOTk5OTk5OTk5OTU2LDEzNzc4Mi45NTk0NDIwNDAzNiwyOTcwOTEuNjkwOTExODEzOSw0NjU5NDIuODY2OTAyMzY2NSw4NzgxNTcuOTk5NDUwNDcyLDI4NDQ0Ny45NTgxOTg3OTY0MywzMDYwNjAuOTkxMzc3NzQ4MiwyODMzNjIuMDY3MzM0MzYyNTQsMjc0ODA5LjE2NjA1NDU0NzA3LDQyNTQ3Ni4zMzg5ODY1OTc4NCwyOTIzODQuNTg3NDkwNTIzMSwyNzM1NjYuMDE0ODAxODgwMTcsMjkyODg0LjkzMDU3NDY0NDk0LDI1MDUxNC4xNjYyNjIzOTM5MywxMzc1NDMuMjQwMTc0Mzk5NjMKKzE5LE1vbiAyMCBTZXAgMTAsMTY4MjU0OS4zMjA2NjIxNjUsMjYzOTU2Ljg3Njc5NzMyMDQ0LDI1NTEzOC45OTY4NjM3OTQ3NSw3OTcyMDUuOTc4MzgyMzQzNywzMTI3MzEuNDY2Nzk4NzQyNTMsMjU3MDY5LjU0NzMxNjk0MzM4LDI5ODA2NC42MjM5NjU0MDE2LDIwODk5MS44NTM1NjY3MzUyMywyMTU0NjguNjE4OTYzMDgxMjIsNTY3OTUuOTk5OTk5OTk5OTU2LDEzNzc4Mi45MjA1OTAyNTA5NiwyOTcwODguOTExMTc5ODU5MjUsNDY1OTQyLjczOTAyNTI0ODU2LDg3ODE1Ny45OTg3ODQ1ODY2LDI4NDQ0Ny45MTc4NzI3NDQyNiwzMDYwNjAuOTgyMTk5MzIxMDQsMjgzMzYxLjI2NTczMjA2NjcsMjc0ODA4LjQ1NzU4MDc2MDI0LDQyNTQ2OC40NTIyMTI3MzQ3MywyOTIzNzcuNjgxNTkyNDMwOCwyNzM1NTMuMDU4MDYwNDg2MzQsMjkyODc1LjkzMzY1ODgzMDksMjUwNTEzLjQzODAxOTM2NzA1LDEzNzU0Mi41ODE1MDE0ODYyMgorMjAsVHVlIDIxIFNlcCAxMCwxNjgyMDI2LjY2NjkzMTcwMTgsMjYzOTU2Ljc1NzI3MDc3MDczLDI1NTEzOC45OTM0MjE1MjYzMyw3OTcyMDUuOTU1NDMxMTczOSwzMTI2NTguNDc2MzgzODUwOSwyNTcwMTUuMjc5Njg0MzcwMiwyOTgwNjMuNDg2NTM4MTQ0MywyMDg5OTEuNzE4MjI5MjQyNDUsMjE1NDY3LjQ4MTM0NzMwMTg2LDU2Nzk1Ljk5OTk5OTk5OTk1LDEzNzc4Mi44NDY2NTU0OTUxNywyOTcwODMuOTI2MTcwODIyNSw0NjU5NDIuNDk1MzEzNTYzNSw4NzgxNTcuOTk3MzY2MDM3MywyODQ0NDcuODQwODQ0Mjc0NTYsMzA2MDYwLjk2Mzg3MTU5MjgzLDI4MzM1OS44MTA0MzE5MjI2NywyNzQ4MDcuMTc3OTc2MDg2OSw0MjU0NTUuMDEyNTkzNTI4NCwyOTIzNjUuOTY1NzQxMDUzMSwyNzM1MzEuMzM0MjQ4NjM2OCwyOTI4NjAuNjAwOTY4MTIsMjUwNTEyLjEwNjU0MzU3MjI0LDEzNzU0MS4zODI0Mjg0NTg3CisyMSxXZWQgMjIgU2VwIDEwLDE2ODEyNDkuMzA2Njk4Njc1LDI2Mzk1Ni41Mjc4NjQ4MzU4NywyNTUxMzguOTg2NDEzNTExODYsNzk3MjA1LjkwOTUwNDkxMjYsMzEyNTQ2LjU5NjMxMjY4OTksMjU2OTMyLjE0NjU2NDQzNDk4LDI5ODA2MS40NTQ1MTg3OTQxLDIwODk5MS40NjQ0ODU0NjczLDIxNTQ2NS40NTI4NTkzNzI2LDU2Nzk1Ljk5OTk5OTk5OTk1NiwxMzc3ODIuNzA3NTQ2OTU3OTQsMjk3MDc1LjA4ODM4ODc4Myw0NjU5NDIuMDM2MDkzNDA1NzQsODc4MTU3Ljk5NDM5NDczODMsMjg0NDQ3LjY5NTM1MjQ5NDEsMzA2MDYwLjkyNzc4MjE2MjEsMjgzMzU3LjE5NDEwMDc0ODM0LDI3NDgwNC44ODg5MjU3NzgsNDI1NDMyLjM0NzQ3MDU4NDIsMjkyMzQ2LjMxNDgzMTQ5MzEsMjczNDk1LjQ2MjMzNjQ1NjM0LDI5MjgzNC44MTM4OTE4NzM0LDI1MDUwOS42OTY5NDQyMjYyOCwxMzc1MzkuMjIzMDkxMDcyMTQKKzIyLFRodSAyMyBTZXAgMTAsMTY4MDEzNS44Njg4MzAyNjE1LDI2Mzk1Ni4wOTIzNzk4NjIyNywyNTUxMzguOTcyMzMwMDcwMTYsNzk3MjA1LjgxODc2MTM0MDcsMzEyMzgwLjgwNzYxNDA5NTMsMjU2ODA4LjY4ODkzMzAxMDk3LDI5ODA1Ny44NTg3MDkyNzUyNiwyMDg5OTAuOTkzNzA4OTE0MTUsMjE1NDYxLjg3MTIwODU2NTM3LDU2Nzk1Ljk5OTk5OTk5OTk1NiwxMzc3ODIuNDQ4NTU3OTgzNTYsMjk3MDU5LjYyMDg4MTQ0NzgsNDY1OTQxLjE3OTg4NzUzODE0LDg3ODE1Ny45ODgyNjQ4NTE3LDI4NDQ0Ny40MjMzNzk5NjgsMzA2MDYwLjg1NzYxMDE4MzYsMjgzMzUyLjUzNzY0NjQ2NTMsMjc0ODAwLjgzNDMxNjc4MTgsNDI1Mzk0LjYxODI0Mzg2NTU1LDI5MjMxMy44MzIwOTM1MDgsMjczNDM3LjQzMDk2OTkyMiwyOTI3OTIuMTg0NzM1ODQzLDI1MDUwNS4zODI0MDI1NzUyMywxMzc1MzUuMzc5MTEyNzY0MTUKKzIzLEZyaSAyNCBTZXAgMTAsMTY3ODYxOS4yNzc3OTY3NzcsMjYzOTU1LjI3NDI4NjA1MiwyNTUxMzguOTQ0MzU3NjM5MjQsNzk3MjA1LjY0MTQ5ODg4NzQsMzEyMTQ2LjEyNjUxNTU3MDcsMjU2NjMyLjk0NDczNjk3NTI1LDI5ODA1MS41NjAxNDAwMjI1NCwyMDg5OTAuMTI4ODY2NzQ3NDMsMjE1NDU1LjYxNDQyMzA4NjU4LDU2Nzk1Ljk5OTk5OTk5OTk2LDEzNzc4MS45NzExMzk0NzgwNiwyOTcwMzIuOTY5MDUwNzMyNyw0NjU5MzkuNTk5MzM4NjE4Miw4NzgxNTcuOTc1Nzg4ODI4MSwyODQ0NDYuOTE5ODQzNzQ4ODUsMzA2MDYwLjcyMjcxMDUxMDY2LDI4MzM0NC4zNDA4NTQzNDgxNSwyNzQ3OTMuNzI4OTU0MDY1NzcsNDI1MzMyLjg3MjkzMzM2OCwyOTIyNjEuMTcxNjI5NDI1MjUsMjczMzQ2LjE1NjgxNjgxNDQ0LDI5MjcyMy4zMzA5ODU1OTY2NCwyNTA0OTcuNzQ3MTg3OTA5ODIsMTM3NTI4LjYyNTY1MjA5ODM2CisyNCxTYXQgMjUgU2VwIDEwLDE2NzY2NzguMDQ2Nzk3ODI1LDI2Mzk1My43NTM2MzQ0MTczLDI1NTEzOC44ODk0MTA4MjMxMiw3OTcyMDUuMjk4OTE4Mjk4NywzMTE4MzIuNzI5NjQwMjQ0OSwyNTYzOTYuMDA4MTQ3MjA4ODMsMjk4MDQwLjY1NzcyMjY3MzU1LDIwODk4OC41NTYwMjUyMDE4LDIxNTQ0NC44MjIzNzk4OTAzMyw1Njc5NS45OTk5OTk5OTk5OCwxMzc3ODEuMDk5ODY2MTIwODQsMjk2OTg3Ljk2NzEyMzU5NjcsNDY1OTM2LjcxMDk0MzQzMjc2LDg3ODE1Ny45NTA3MTMwNjgyLDI4NDQ0NS45OTY1MTkxOTc3LDMwNjA2MC40NjYxNjQ0OTczNywyODMzMzAuMDk5MjY5OTY5NywyNzQ3ODEuNDM0MDE1MjY3MDYsNDI1MjM0LjEwNTg3NDE5NzcsMjkyMTc4LjAxOTgxMzQ3MjMsMjczMjA3Ljk5NzM2MDc5MDYsMjkyNjE1LjU4MjMzOTk3ODksMjUwNDg0LjQyMzUwNTE3OTU4LDEzNzUxNi45NTI1NjUwNzA5NworMjUsU3VuIDI2IFNlcCAxMCwxNjc0MzYxLjgwNzk1MzgxMzYsMjYzOTUwLjk1ODE1NDU4NCwyNTUxMzguNzgyNTkwMDUzNDUsNzk3MjA0LjY0MzQxNDg0NjQsMzExNDQxLjg1MjAxMDgwNjAzLDI1NjA5Ni41MTYwNzQ2MTg3LDI5ODAyMi4wNTU3ODA2MjgzLDIwODk4NS43MjUzNTA0MDYxNCwyMTU0MjYuNDk3NzM5OTA3MzgsNTY3OTUuOTk5OTk5OTk5OTgsMTM3Nzc5LjUyNjIzODc3MzAyLDI5NjkxNC4wMDk3MTE1MjE5LDQ2NTkzMS40ODczMzEzMjQxNCw4NzgxNTcuOTAwODgzMjk1NSwyODQ0NDQuMzE5NzUxODk4MywzMDYwNTkuOTgzMTkyODQ3NDYsMjgzMzA1Ljc1MjIwODc2NzEsMjc0NzYwLjQ4NjUzNDc5OCw0MjUwODAuODYwNDAwOTI0NCwyOTIwNTEuMjU1NTY4MjQyNCwyNzMwMDkuMTA5NTQ2NjUxMSwyOTI0NTMuOTIyMDE4MDAzNjUsMjUwNDYxLjU3MzUzMjIwMDQ4LDEzNzQ5Ny4xOTUwNTY2OTYzCisyNixNb24gMjcgU2VwIDEwLDE2NzE3OTAuNTQ1MDc1OTI3NCwyNjM5NDUuODgyMTIyOTA1OSwyNTUxMzguNTc3MDI4MTY2NDcsNzk3MjAzLjQwMTMzNDE5NzcsMzEwOTg4LjczMTUwNTkyMTUsMjU1NzQzLjU3MjQwMTIyOTgsMjk3OTkwLjg5MDgzMzM3NzYsMjA4OTgwLjY5MDY5Njg5NjkzLDIxNTM5Ni4wMDkzNDY5NTM4OCw1Njc5NS45OTk5OTk5OTk5ODUsMTM3Nzc2LjcxNjg4MjY3NjEsMjk2Nzk2LjgxNzQxMzczNTg0LDQ2NTkyMi4xNTAwOTM1MzA2NSw4NzgxNTcuODAyOTIwNDg5MSwyODQ0NDEuMzA2NjUwNDcxMiwzMDYwNTkuMDgzMTE0NTA4NSwyODMyNjQuOTkxNTQ4NDgxODYsMjc0NzI1LjQ5Njc3MjA3NjIsNDI0ODUyLjQwMDEyNDQwMiwyOTE4NjYuNjA3MjQxOTY5ODUsMjcyNzQwLjAzNjMwMDk4NzEsMjkyMjI0LjEwNTMxNDQ0MDIsMjUwNDIzLjI0ODkyOTI4NjQzLDEzNzQ2NC42NzE2NzUyMzU2MgorMjcsVHVlIDI4IFNlcCAxMCwxNjY5MTIzLjAwMjQ0OTAzMjksMjYzOTM2Ljc5NjY2MjU5Mjk3LDI1NTEzOC4xODU1MDM4MzE0Miw3OTcyMDEuMDcwNzU4OTg0NCwzMTA0OTkuNjc5MTkzMjg1NzYsMjU1MzU1LjYyODQ0MjE2OTEsMjk3OTM5Ljg4OTk3MjY3NDU0LDIwODk3MS44NjAyODc1NzI3MiwyMTUzNDYuNjE3NDc1ODg1NzgsNTY3OTUuOTk5OTk5OTk5OTgsMTM3NzcxLjc2OTI3MTA1Njg3LDI5NjYxOS44MjI3MjEzNzI3Nyw0NjU5MDUuNjg2MTQxODQ3NjMsODc4MTU3LjYxMjI5NzI2MjYsMjg0NDM1Ljk1NjUxOTY0MzcsMzA2MDU3LjQyMzE5MjYxNTYsMjgzMTk4LjU5NzM0MTI2MjIsMjc0NjY4LjUyMzgwNzEyNTM0LDQyNDUyOC42NDg3MDY3ODM5NSwyOTE2MTIuMzc1OTc3NjAyNSwyNzI0MDEuMDYwNjQ4OTQzNjUsMjkxOTE3Ljk4MjY4MzQzODgsMjUwMzYwLjc5MjE2Mzc5NDI4LDEzNzQxMy4wNjc1ODUzODAxNAorMjgsV2VkIDI5IFNlcCAxMCwxNjY2NTEzLjMxMDgxNzAxODgsMjYzOTIwLjgxMTAyNzUyMjI2LDI1NTEzNy40NDc0OTEyODAzMyw3OTcxOTYuNzQwNzcxNzg0NCwzMTAwMDQuNjY5OTY3NTcwOSwyNTQ5NTUuNTgyOTYwNTM2NTMsMjk3ODU4Ljg5MjUxODc3NDEsMjA4OTU2LjYzMTU3MTMxNjc0LDIxNTI2OS4zMjM0ODY3ODQzNiw1Njc5NS45OTk5OTk5OTk5OCwxMzc3NjMuMTk2ODcwOTk3NywyOTYzNjguMTk1NjczMzQ0OCw0NjU4NzcuMTI2MjAwOTk2Miw4NzgxNTcuMjQ0OTA0MDYzLDI4NDQyNi41ODU1NTMyNTc4NCwzMDYwNTQuMzk0OTgwNjY2NCwyODMwOTQuMjI4MDg3OTk2NywyNzQ1NzguNzM0NDUzNjQ1OTQsNDI0MDk3LjE1NTAyODIzNDEsMjkxMjg0LjU2OTMxNzQ4MTIsMjcyMDA1LjAwMDIyNTU3MjUsMjkxNTM4LjkzNTcyMDU4NDgsMjUwMjYyLjY5NDA4Mjc1MTM1LDEzNzMzNC45ODM0OTI4MTY2OAorMjksVGh1IDMwIFNlcCAxMCwxNjY0MDc5LjU3NjIwNTI0OTIsMjYzODkzLjI3MjkyODEyOTI0LDI1NTEzNi4wNzE3NjE3NzAwNiw3OTcxODguNzgxMDQ3MzQ5OCwzMDk1MjkuOTQ2NTcyMTA3MDMsMjU0NTY1LjAzMzY4OTEyNTY0LDI5NzczNS4wNTE0MzM2MTc4MywyMDg5MzAuOTIzNTY4OTEwOTIsMjE1MTUzLjU5NjgwMTYxNzQsNTY3OTUuOTk5OTk5OTk5OTgsMTM3NzQ4LjY0NDM4MzAyMzk2LDI5NjAzNS4yMDczNTY5Njg4LDQ2NTgyOC41ODQ0ODA3MTM2LDg3ODE1Ni41NDM0NjI2NDU4LDI4NDQxMC40NDA0NzY3NzksMzA2MDQ4LjkzNzQyMDkzNzQsMjgyOTM3LjQ1Mzc1MzY1NzMsMjc0NDQyLjk1OTAzNjk1MzEsNDIzNTYwLjc0NzQ5NDY0MzksMjkwODkwLjk2NzE3NTk4NDA2LDI3MTU3NC44NjcwMTkyODA4LDI5MTEwMy43MzgyNDQ5NjM4LDI1MDExNS42NTEzMjg3MTQyMiwxMzcyMjMuNjEwNDU2OTUwNTMKKzMwLEZyaSAxIE9jdCAxMCwxNjYxODkzLjM3MTU2Mjc0MjQsMjYzODQ3LjA2ODE2NzQzMTE2LDI1NTEzMy41Mzg2MDYxMjYxNSw3OTcxNzQuMzIxNTE4NjYyNCwzMDkwOTMuOTA4NzM5MzgzMTYsMjU0MjAwLjQxNDI5NTY1NTcsMjk3NTU0LjM5NDc1Njg5NzYsMjA4ODg4LjY5NDg3Njk5Mzk1LDIxNDk4OS41MTUyODY4NzQ4LDU2Nzk1Ljk5OTk5OTk5OTk3LDEzNzcyNC41NzA1NzM5MDIyOCwyOTU2MjcuODU2NTAwNzY5NCw0NjU3NDguMTg0MTcwODMxNiw4NzgxNTUuMjE2OTYwMjc1NSwyODQzODMuMTgxODAzNTY5NTUsMzA2MDM5LjI0MDcxNzE3NDgzLDI4MjcxNC44MTY5NDI3MDQ2LDI3NDI0Ny44ODMzNTAxODU4LDQyMjk0MC45NjYyNjk0MzI0NSwyOTA0NTEuMDIxMjIyMDc1NTYsMjcxMTM3LjQwMzQ1NDM3OTY0LDI5MDYzOC43MTg2Njk2NTM4NywyNDk5MDcuNTg2NjAwNDA5OTQsMTM3MDc1LjQzNjQ4NzMwNjE0CiszMSxTYXQgMiBPY3QgMTAsMTY1OTk4NC44MDE0NjMxMzkyLDI2Mzc3Mi4wNjEyNDk3NzQ1LDI1NTEyOC45Mzg3NDU0OTU5OCw3OTcxNDguNDEzMTgzMzQyMiwzMDg3MDYuNTcxMzc3NzYwODUsMjUzODcxLjgwMjIyMTQ1NjM3LDI5NzMwNS4yNDQzMTU4Mzc2LDIwODgyMS43MDIyOTkxMTkyLDIxNDc3MS4yNzc0ODc3NTgxNCw1Njc5NS45OTk5OTk5OTk5ODUsMTM3Njg2LjAyNDI4Nzc5NzYsMjk1MTY3LjQzMzUxMjg4NTgsNDY1NjE5LjI5MzkwMzc2Nyw4NzgxNTIuNzMzMjY0OTQzNCwyODQzMzguMjk1NDEwOTg3MzQsMzA2MDIyLjMwNjQ1NzY0ODMsMjgyNDE4Ljg1MjA1Njk0OTYzLDI3Mzk4NC4xODc1NTUxMjY3Myw0MjIyNzMuNzkyNDQwODA1MzUsMjg5OTkwLjk2NTY2MzM1OTczLDI3MDcxNi4zNzYwMDY5OTQzNCwyOTAxNzIuMzM1NTk2NDczMzYsMjQ5NjMyLjUyMjk0ODQxNDU1LDEzNjg5Mi44MDg1OTIyMDc5MworMzIsU3VuIDMgT2N0IDEwLDE2NTgzNTMuOTk1MDUwMjE3NSwyNjM2NTUuMjE5MzkwNTk3MTQsMjU1MTIwLjcxOTAzNDM1NjQ0LDc5NzEwMi43NDU4NzAxMTU0LDMwODM3MS4xMjcxNzY4MjMzLDI1MzU4My42MTgyMjk2MTY1LDI5Njk4Mi45NjQyOTQwNTAxLDIwODcxOS45NjM2NDkxNDY1LDIxNDUwMC43NzEwMTg5MDkxNyw1Njc5NS45OTk5OTk5OTk5ODUsMTM3NjI2Ljc2NTA1MTQ4MjA3LDI5NDY4My43MjY0NzU3Mjc3NCw0NjU0MjAuOTMwNDY0NTQzMyw4NzgxNDguMTMyNTI2MjIyLDI4NDI2Ni42MjU2MDg4ODIsMzA1OTkzLjM1NTY5ODM0NzYsMjgyMDUzLjA3MTE0NDM4MDI2LDI3MzY1MS40ODI0OTM2NDA4LDQyMTU5OS43MDAxNjQ0NjE0LDI4OTUzNi45MzcxNjkxMzQyNywyNzAzMjguNjg4NDY1MjQ1NjUsMjg5NzI4LjUwODYxMDkwOTQsMjQ5Mjk1LjIyMjgwMzA1NTY2LDEzNjY4NC41MDU4MDU2MTMxOAorMzMsTW9uIDQgT2N0IDEwLDE2NTY5ODIuNzAwNjkzNDg4OCwyNjM0ODIuMjcwNDU0MDE0NTQsMjU1MTA2LjMwMzQ5Njc2OTk4LDc5NzAyMy44NDM5Mjg2ODEsMzA4MDg2LjEyNjE1NjE2MTgzLDI1MzMzNi4xMTU1MDc3Njk2LDI5NjU5My44OTkzNjAxNzY2NCwyMDg1NzMuNDY5MDEzNDA2MzcsMjE0MTg4LjkyNDc3MTkzMzM4LDU2Nzk1Ljk5OTk5OTk5OTk4NSwxMzc1NDAuMDc3ODQ2NjAyNDIsMjk0MjA2LjQ3NTkwMDQ3Mzk1LDQ2NTEzMC41MDQyOTI1Nzc5Nyw4NzgxMzkuNzEwOTY4OTA1NCwyODQxNTYuNDMzNzQyMTQwNzcsMzA1OTQ1LjE1OTgwNjk4LDI4MTYzMy41NDc3MTkzMTcyNiwyNzMyNjEuMTk1MzgwMTcxNCw0MjA5NTMuODg3Mjk4NzcxNjUsMjg5MTA5LjcwNDg3OTY5NzksMjY5OTgzLjcyMjExNjExOTM0LDI4OTMyMy4zNTc4NDY5Mjc1LDI0ODkxMi4xODgzODIwNDA2LDEzNjQ2My41MzE4MTYxMjk3CiszNCxUdWUgNSBPY3QgMTAsMTY1NTg0My4zMjg1NDIxOCwyNjMyNDEuNTk0NjA3MTMwOSwyNTUwODEuNTczMDc4NzAwNjYsNzk2ODkwLjg2MjE3MjE5NDUsMzA3ODQ3LjQyNzk5Mzg5NDksMjUzMTI2LjkwNTI0Nzg1OTI4LDI5NjE1NS43MzU3MDE5NjgzLDIwODM3NS4yODc3NDU1ODIyNiwyMTM4NTMuNDY3ODgxNDA3MTgsNTY3OTUuOTk5OTk5OTk5OTg1LDEzNzQyMC41MTY0OTEwNDk4NywyOTM3NTguOTMxNDQ0MDM1Myw0NjQ3MjkuNjY0NzE4Mzg5MDUsODc4MTI0LjUwMTY5NDgyMzYsMjgzOTk0LjU4ODQ2NjU3MDk1LDMwNTg2Ny41NDI1NTMwNDYzNywyODExODUuMjc2MTU1NTAwOCwyNzI4MzQuODUzNjAxNzU3MSw0MjAzNjAuOTMzMjkzMzk1NDQsMjg4NzIyLjU3ODMwNzUwNzk3LDI2OTY4NC42NTQ4MjAzOTQ3LDI4ODk2NS4xNzIzNTI2OTU0MywyNDg1MDcuNTExMTY5MjE4MywxMzYyNDMuNDIyNzgyOTAwNjgKKzM1LFdlZCA2IE9jdCAxMCwxNjU0OTA1LjA0ODAxMzc2NzcsMjYyOTI5LjcyMTY0MDY5NDY1LDI1NTA0MC4yMzkxODM3MDM4Nyw3OTY2NzMuNjE5MjQ1MzA1NywzMDc2NDkuNjQxNTgzMzY0OSwyNTI5NTIuMTgzNzM1NDcxMDQsMjk1NjkzLjQwNzQyODMzOSwyMDgxMjUuMTQyNTkxODgwNTgsMjEzNTE0LjE5ODAxMDUxNzk4LDU2Nzk1Ljk5OTk5OTk5OTk4NSwxMzcyNjYuMjYyMDk5MjA2OSwyOTMzNTUuNTA5MjE2MDM2MDcsNDY0MjEyLjE1NjE0MDc0ODMsODc4MDk3LjQ1NTYzMDU5NjgsMjgzNzY5LjQxMjY4OTI0MTYsMzA1NzQ3LjU1ODU3Mzk3MDEsMjgwNzM1LjI2NjA1MjkxOTYsMjcyMzk4LjI5NjIxNjI5NDg3LDQxOTgzNC4xNjk2Mjk2MTM1LDI4ODM4MS44ODI0MDU5MDc0LDI2OTQzMC40MDM4NzI2NDU0NiwyODg2NTYuMDk5NjA1ODI5MSwyNDgxMDYuMDAzMjI4OTU4MjMsMTM2MDM1LjE5MzA4MjI1MDEzCiszNixUaHUgNyBPY3QgMTAsMTY1NDEzNy40NjU4MjMyMTkyLDI2MjU1NS41NTg3MTQyMzcsMjU0OTczLjI2OTk2NTA4NjY2LDc5NjMzMi40Njc5OTc0MzI3LDMwNzQ4Ny4wNjE1OTE4MzE4NSwyNTI4MDcuNTkxNDU2ODg0OSwyOTUyMzIuNzQ0MDAyMzkxMzUsMjA3ODMxLjQxODI3OTY1MzE1LDIxMzE4OC40MDk0NDU5NDc1Niw1Njc5Ni4wLDEzNzA4MC45NTc4NDI0ODQxNywyOTMwMDIuNjAxNjM4MTk2OCw0NjM1ODkuOTA2MzY5Mjc0MSw4NzgwNTAuMjE0OTgyNTE4NywyODM0NzQuOTM3NTI3OTc2LDMwNTU3MS4wNDczNjgzMzkxNSwyODAzMDYuMzI0OTk2ODQ1OCwyNzE5NzUuMjAyODE0MTk1NjUsNDE5Mzc3LjgwNDYwNjY0MiwyODgwODguNjQ4OTcwOTE3NzQsMjY5MjE3LjM5NTkwMDkzMjI2LDI4ODM5NC4yMjUzMDE4MDE3NSwyNDc3MjcuNjA0NzIyODA1NzYsMTM1ODQ2LjAxNDE3MDQ5ODEKKzM3LEZyaSA4IE9jdCAxMCwxNjUzNTEyLjU5NTE1ODgyMTcsMjYyMTM5LjgzMDk4MDI2NTIyLDI1NDg2OC43NzE5NzQyODM3Nyw3OTU4MjIuNzQwNDU1MDUxNywzMDczNTQuMjE1MjgzNjcyNDQsMjUyNjg4Ljc1Mzg4MDQxMTIsMjk0Nzk1LjE1NzUxMDAyOTUsMjA3NTA5LjkwMDMzMjU4OTYsMjEyODg4LjM1MzU2MzYyNTA3LDU2Nzk2LjAwMDAwMDAwMDAxNSwxMzY4NzMuNjUxMzk4MTYwOTMsMjkyNzAwLjczNzM1NzI3NzEzLDQ2Mjg5Mi44Njc4ODQ2OTU2NSw4Nzc5NjkuNDA0MDg3NDExOCwyODMxMTQuODgxOTMyMTU3MSwzMDUzMjYuMDMxNTUyNzA3MSwyNzk5MTMuOTY4MTc3NjY1NTUsMjcxNTgzLjAwNzM3MTY2OTUsNDE4OTg5Ljg0MDY0MjUxMTI2LDI4Nzg0MC40ODUzMzM3MDYsMjY5MDQwLjg4MjMxMTU1MzA1LDI4ODE3NS4zNTI3MDA4ODQzLDI0NzM4NS4wNjY3OTI5MjY3LDEzNTY3OS4zNzg5NjU3MDczCiszOCxTYXQgOSBPY3QgMTAsMTY1MzAwNS43MjU1NTQyMjA4LDI2MTcwOS4zMDUyOTQ0ODI0LDI1NDcxMy4wNzMxMDQxNTM3NCw3OTUxMDYuMzczMDgzODYwNCwzMDcyNDYuMTQyMTcyMDEyNTQsMjUyNTkxLjU4NjYwMTgxOTQ2LDI5NDM5NS4xMzQ5MTQ0MzUwNCwyMDcxNzkuNjU3MzkxMzk0OTUsMjEyNjIwLjg2OTQyNDI4ODk1LDU2Nzk2LjAwMDAwMDAwMDAxNSwxMzY2NTYuNTYyMDQzNDA4NzUsMjkyNDQ2LjgxMzc2NDc2Mzk0LDQ2MjE2MS42ODY2NTI0NDgsODc3ODM0LjUwNDI1NzQwNCwyODI3MDMuODE3MDk4MDYwMTYsMzA1MDA3LjM5MjIzMDU2NzA2LDI3OTU2Ni4zMjQwNTcwMzg5LDI3MTIzMS44OTA3MjQ2NDI0NCw0MTg2NjQuNjc4ODE4MjIwNiwyODc2MzMuMTE5ODQ1MDY0OSwyNjg4OTUuNzk5MDc0ODYxMiwyODc5OTQuMjgwODQwMTc2NiwyNDcwODQuMzcyMjQ3Nzc0NjgsMTM1NTM1Ljk4NTMxNzEyNjE4CiszOSxTdW4gMTAgT2N0IDEwLDE2NTI1OTUuNjM2ODExOTMwNywyNjEyODkuMzg3NjQ1Nzk4NjgsMjU0NDkzLjg2MTQyODIwMDgsNzk0MTY5LjM3OTQwMTAxMjMsMzA3MTU4LjUwNTIyNjYyNDQsMjUyNTEyLjQ0MjA5MTc2MDQsMjk0MDQwLjI2OTY1OTAxNTY0LDIwNjg1OC4zODg5NDU2ODk5LDIxMjM4OC4zMjQ2ODAyODAxMSw1Njc5Ni4wMDAwMDAwMDAwMTUsMTM2NDQxLjkyNDg2Mjk0MDc3LDI5MjIzNS44NTQyMDI2NjYzLDQ2MTQzNy4yODIxMjAzNTMxMyw4Nzc2MTUuNzYwNjE0MzI4MiwyODIyNjQuMjI0MDkwMjYzOSwzMDQ2MjAuNzIzNTY1MjcyNywyNzkyNjUuNjY5Njc4ODkzNSwyNzA5MjUuODIyNjI1Njk4Niw0MTgzOTUuMDQwMDIyMDE2ODUsMjg3NDYxLjQ5NzYwMTAxMjM1LDI2ODc3Ny4yNzA2ODQ2OTc4LDI4Nzg0NS42MjAzNDkxOTczNiwyNDY4MjYuNDM0NzA3MjA0NzUsMTM1NDE0LjczMDgxODc5Nzk4Cis0MCxNb24gMTEgT2N0IDEwLDE2NTIyNjQuNDUyMjkyNzY1NSwyNjA4OTkuMDkwNDk5NjQzMiwyNTQyMDUuMzI4NzQ4MzExNjcsNzkzMDM2LjMzODI4NjAxMTcsMzA3MDg3LjYwNDM5MTAzMTIsMjUyNDQ4LjE1ODkxMTMwNzk4LDI5MzczMi42NzIxNDgzNTU4LDIwNjU1OS4zNzkzMTk1ODY1LDIxMjE4OS45NzY4NzA3ODIxNSw1Njc5Ni4wMDAwMDAwMDAwMSwxMzYyMzkuNTQxMjIyODc0NDgsMjkyMDYyLjE5OTUyMzkwMjYsNDYwNzUyLjY4ODY2MDM1Myw4NzcyNzMuMzcyMDI3MzMzOCwyODE4MjAuODY1NDAxNTcxMjcsMzA0MTgyLjc0Njc2NzI3MDYsMjc5MDEwLjM2NTcwNTQxNjksMjcwNjY0LjM2MTA3NjAyNTksNDE4MTczLjIxODc3MDQ0MDcsMjg3MzIwLjQ3NjgxMjI0MTIsMjY4NjgwLjg3MDE1Mzg4NDA1LDI4NzcyNC4yNjE0NTY3NTA0NSwyNDY2MDguOTU2OTMwNDM2OSwxMzUzMTMuNTMxMzM4Nzc5MzcKKzQxLFR1ZSAxMiBPY3QgMTAsMTY1MTk5Ny4zMTUzNzMxMDgsMjYwNTQ5LjYwMzMzMDkyMjA4LDI1Mzg1My4wNjc0MDI1OTU4Myw3OTE3NzAuMDI2ODczODkyLDMwNzAzMC4zMzQ2MTYwNzI0LDI1MjM5Ni4wNTAzNDYwOTgzNywyOTM0NzAuNzI2NzE2MTQxNywyMDYyOTAuNjIzNzczNzEyMTQsMjEyMDIzLjIyMzA3OTYwNjU0LDU2Nzk2LjAwMDAwMDAwMDAxLDEzNjA1NS43NzA3NDIzODg3MywyOTE5MjAuMjI3MTYxMTM0NjUsNDYwMTI5LjYyMTYyNjM0MzEsODc2NzYwLjQ2MTIwNzg4NDYsMjgxMzk1LjQyNzg2NjE3OTg1LDMwMzcxNy40OTA2ODAxNzAzLDI3ODc5Ni41MzIxMjA2MTk2NywyNzA0NDQuMzc5MzM3OTgwOTQsNDE3OTkxLjgxNTUxMDY3NDMsMjg3MjA1LjIyMTM3MzIxNDgsMjY4NjAyLjcyMjA5NzIwNSwyODc2MjUuNjA0NjAxNjk4LDI0NjQyNy45MzI5NjYyMDkyLDEzNTIyOS44OTI3OTAyODExCis0MixXZWQgMTMgT2N0IDEwLDE2NTE3ODIuMDAwODA4NDY3MiwyNjAyNDUuMzU3NjQyOTk0NjcsMjUzNDU0Ljk4MzUxMDQwNzA0LDc5MDQ1My43MzE4MjU2ODM1LDMwNjk4NC4xMjMyNjM3NjE0LDI1MjM1My44NjgzNzY2NTEzLDI5MzI1MC42NDY0NTMyODcxLDIwNjA1NS40NzYxNDQ4NDUwMiwyMTE4ODQuNTUxNjk5MDQxMSw1Njc5Ni4wMDAwMDAwMDAwMSwxMzU4OTMuNzA5ODIxMTg4MywyOTE4MDQuNzQxNTE4MTQzMzMsNDU5NTc4Ljk1MTczODQ4NDk2LDg3NjAzMi45MDc5NDU0ODU5LDI4MTAwMy40NDA4ODg4MDYsMzAzMjUwLjIzOTM2NDkxMjQsMjc4NjE5LjI3MjYwODk3MjIsMjcwMjYxLjQwMjQ4MjAyNDQ1LDQxNzg0NC4xMTY2MzQ0ODU5LDI4NzExMS4zOTc2OTA2MzcyNywyNjg1MzkuNTE4NTc0NTgyMjQsMjg3NTQ1LjY0Nzg5MTM5MDg0LDI0NjI3OC42ODY3OTA2MDAyNywxMzUxNjEuMjcxODYwMzUzNTMKKzQzLFRodSAxNCBPY3QgMTAsMTY1MTYwOC41MjA2MTY1MTY3LDI1OTk4Ni4wMTgzNTM5MTk1NiwyNTMwMzYuNjQ3ODI1MjAwNSw3ODkxNjcuNDU1NDQ2MDk4NywzMDY5NDYuODU2NDM2ODU5MiwyNTIzMTkuNzUwMzQ0MzQwMSwyOTMwNjcuNjE5ODc3OTE5OCwyMDU4NTMuOTA5NDcxNTY1OTcsMjExNzcwLjE3NDM5NjE5MzI3LDU2Nzk2LjAwMDAwMDAwMDAxNSwxMzU3NTMuOTUxNTM5NTYyNywyOTE3MTEuMTQ2NDU5NDI1OCw0NTkxMDMuMTM0OTQwOTQ3MSw4NzUwNjYuNjAwMDc2MTEzOCwyODA2NTMuNzEyODE0OTU0MzQsMzAyODAyLjM5MDY2ODY1NzQzLDI3ODQ3My40NjE5MDA0MDkxLDI3MDExMC41MDM1NTQ0NzczNiw0MTc3MjQuMjQ0NzA5OTU2MDUsMjg3MDM1LjI0MDAzNDMyMTQ0LDI2ODQ4OC40ODM0MjIzMzEsMjg3NDgwLjk4NzA3MDA0MjcsMjQ2MTU2LjUxMTI2MzUxMywxMzUxMDUuMjc2OTQyNTcxMzMKKzQ0LEZyaSAxNSBPY3QgMTAsMTY1MTQ2OC43NTc4MDQ3NzE0LDI1OTc2OC4zOTU3MTQzNjIzLDI1MjYyMy44OTI5MTgyNzM5Miw3ODc5NzEuMzY2MjIyNzgsMzA2OTE2LjgwODU1NjA4ODUsMjUyMjkyLjE2NTEwMzQwNjI3LDI5MjkxNi41NzQ1NjU4MTU2LDIwNTY4My43ODUwNTYwNzg5OCwyMTE2NzYuNDA5NDU2MzU4ODQsNTY3OTYuMDAwMDAwMDAwMDE1LDEzNTYzNS40NDg4Nzc5OTQ1NSwyOTE2MzUuNDkxODMyODIzMyw0NTg2OTkuMDI0NjY2ODAyLDg3Mzg3NS4zMDUyNDY0MjU5LDI4MDM0OS4zNzk5NDQ4MjUxLDMwMjM4OC45MTc4NjgyNjM1NSwyNzgzNTQuMjA2NDY2MzU3NDYsMjY5OTg2Ljg0OTQyOTU0OTUzLDQxNzYyNy4xNzgyMTQzODcxNSwyODY5NzMuNTQ2MTU1ODM5MzQsMjY4NDQ3LjMxNTU4MzQ5NTU0LDI4NzQyOC43NzI2MTY3MTYxLDI0NjA1Ny4wMjAyOTY3NDg5LDEzNTA1OS43NjY0MTI1NzE2NQorNDUsU2F0IDE2IE9jdCAxMCwxNjUxMzU2LjE0MjcxODU2NjMsMjU5NTg3Ljg5Njg5NDA1MSwyNTIyMzcuMDE2MzQzMDYwMyw3ODY5MDAuOTIzNzU0NzU0NSwzMDY4OTIuNTgxNzcyMDk0NjUsMjUyMjY5Ljg2Njc1NTkxMDkyLDI5Mjc5Mi42NTI0NTYwMzc5LDIwNTU0MS44NzgzMDM2ODEwNiwyMTE1OTkuODk2MjcxNTAzNzMsNTY3OTYuMDAwMDAwMDAwMDE1LDEzNTUzNi4yNTA1OTQ2OTYxLDI5MTU3NC40NTM2NDE1OTIyMyw0NTgzNjAuMzA3MDczODU1MTMsODcyNTE2LjE5MDI1NTg1NDUsMjgwMDg5LjU5MTMxOTg1NTM2LDMwMjAxOC4yMjcwNzk5MTU3LDI3ODI1Ny4wODg4MDAwMTc4NCwyNjk4ODYuMDA1MzE3MjA1NzQsNDE3NTQ4LjcwNTA2OTk3OTUsMjg2OTIzLjY0MTQ1MDE1OTMsMjY4NDE0LjEyODQ4OTcxMDUsMjg3Mzg2LjY1MDQ1NzY1NzUsMjQ1OTc2LjMxNTMzOTExODY1LDEzNTAyMi44ODYzNDE3NTM4NQorNDYsU3VuIDE3IE9jdCAxMCwxNjUxMjY1LjM3MjIyMjE0OCwyNTk0MzkuNDgyMzU2MzAyMTIsMjUxODg4LjU5NzM3NDI5NDUsNzg1OTcwLjE2Njc5NTk0MTgsMzA2ODczLjA0NDg0MDM3NjI0LDI1MjI1MS44NDE5NDM3NzIyLDI5MjY5MS40MzA1MDA1Mjk1MywyMDU0MjQuNTU0NDg0NjUwMjMsMjExNTM3LjY3MzQ5MTM2MDk0LDU2Nzk2LjAwMDAwMDAwMDAxNSwxMzU0NTQuMDExNzQxNDU3NiwyOTE1MjUuMjcwMzk3NzQ5Myw0NTgwNzkuMjI5Nzg1Mzc3NCw4NzEwNzUuODIzNTk2OTI0NSwyNzk4NzEuMDUwNjUxMjUyMjcsMzAxNjkzLjQyMDA4MDY0NzE2LDI3ODE3OC4yNDkwMjUzNDYzLDI2OTgwNC4wNTM3NTkzODkwMyw0MTc0ODUuMzMxMTc5MDI3MzMsMjg2ODgzLjMxMTM4OTkzNDEsMjY4Mzg3LjM4MzA0NjAwOTUsMjg3MzUyLjY4OTU2MTQyMzczLDI0NTkxMS4wMzI4ODg2NDA0LDEzNDk5My4wNjMzNDMzMjQ2NworNDcsTW9uIDE4IE9jdCAxMCwxNjUxMTkyLjE3MzgyNTQ0ODgsMjU5MzE4LjIzMjY5OTM4NDgsMjUxNTg0LjE2ODEzMDQ1NTYsNzg1MTc4LjA1NTIyODMwODMsMzA2ODU3LjI4MzY0NzE3NDEsMjUyMjM3LjI2Nzc3MDQxMzksMjkyNjA5LjAxNzA3MTk1NzksMjA1MzI4LjE5NTgwMTY3MDg0LDIxMTQ4Ny4xOTU1MzkwMjc4Niw1Njc5Ni4wMDAwMDAwMDAwMTUsMTM1Mzg2LjMyNTExNjA4NTg4LDI5MTQ4NS42Njk5OTY0MDg1LDQ1Nzg0Ny43NDE4Mzk4ODcxLDg2OTY0NC43NjkwNzk1NTc2LDI3OTY4OS4yMzE4NTkzODc4MywzMDE0MTMuODc1MTQ0NjA5ODMsMjc4MTE0LjM5MDg3OTY1Mjg3LDI2OTczNy42MjM5MTkwMjM2LDQxNzQzNC4xODI1MzU4Mjg5NiwyODY4NTAuNzM1NTkzMTE5MTcsMjY4MzY1LjgyODg3NzUyMjIsMjg3MzI1LjMxNDg3ODQ2MTc3LDI0NTg1OC4zMzAyMjc0NzUxOCwxMzQ5NjguOTgxNjM1NDEzMjUKKzQ4LFR1ZSAxOSBPY3QgMTAsMTY1MTEzMy4xMTAzNzU5MDQ1LDI1OTIxOS42NDY0NjY2MTg1MiwyNTEzMjQuMTE5MjI3NTU1NTgsNzg0NTE0LjU3MzAwNjA2NzIsMzA2ODQ0LjU2MTY1MTYwNTQsMjUyMjI1LjQ3ODYxNzg3MDQ1LDI5MjU0Mi4wNzM4NjQzMjExNywyMDUyNDkuNDQ1NjA0NDAzODgsMjExNDQ2LjMxNTQyODAxNjA0LDU2Nzk2LjAwMDAwMDAwMDAxLDEzNTMzMC45MTYyMDk5MDczNiwyOTE0NTMuNzk3NjQxMjI1LDQ1NzY1OC4xNzY5Njk1MDQxLDg2ODI5Ni4xOTMzNzU0MjE1LDI3OTUzOS4yMjE4MDQwMjY3NSwzMDExNzYuNjQyOTEzMjg1MDYsMjc4MDYyLjc0NzgwMDk4MDQ2LDI2OTY4My44NzE1MTkwMjEwNSw0MTczOTIuOTExNzkxMjkzMzYsMjg2ODI0LjQyODA3NTU2NzcsMjY4MzQ4LjQ1NDQ4NjYxMzg2LDI4NzMwMy4yNDgzMDkyMjkxNSwyNDU4MTUuODQwMzQxNTEyODcsMTM0OTQ5LjU1MzgzMzY1Nzk2Cis0OSxXZWQgMjAgT2N0IDEwLDE2NTEwODUuNDE5MzA0ODk5OSwyNTkxMzkuNzY2NzkzMzE3MjgsMjUxMTA1LjY3NjM2NTY3ODU1LDc4Mzk2NS4zMzY4OTkzMzgsMzA2ODM0LjI4NjQyMDg2ODU0LDI1MjIxNS45MzczNzIyOTA3NiwyOTI0ODcuNzg3Mjk5NjY4MzYsMjA1MTg1LjMyMTQ0NTYzOTY1LDIxMTQxMy4yNDY0Njc4MDk5OCw1Njc5Ni4wMDAwMDAwMDAwMSwxMzUyODUuNzQwMDE0MTYwNSwyOTE0MjguMTQ3NzE5NzI2MTQsNDU3NTAzLjYwNDQ4MTEwMzksODY3MDc2Ljc4NjM2ODE3OTQsMjc5NDE2LjIzMjMwMjQ1NDI0LDMwMDk3Ny41MjcyNTIyOTA4LDI3ODAyMS4wMjYyMDMwMTg3MywyNjk2NDAuNDI5NDU1ODUyMjUsNDE3MzU5LjYxMTQ1OTI2MjIsMjg2ODAzLjE4MTc0NDQ1MzEsMjY4MzM0LjQ0Mzk5NzY2NDU1LDI4NzI4NS40NTY0NjkxMjMxLDI0NTc4MS42MTMyODc1MDg5NSwxMzQ5MzMuODg4ODg4OTMzMDMKKzUwLFRodSAyMSBPY3QgMTAsMTY1MTA0Ni44ODExNTg5MTg4LDI1OTA3NS4yMDYzMDA4MTUxLDI1MDkyNC40NDk5NDEyNzI5Niw3ODM1MTQuNjE4MTA3MTgwNywzMDY4MjUuOTgxMTY1MzE2OTUsMjUyMjA4LjIxMDIyMTU0MTc4LDI5MjQ0My44MTE4MjgwNzk2MywyMDUxMzMuMjQzNzE4MjUwMzYsMjExMzg2LjUxNDEyMjE1NTUyLDU2Nzk2LjAwMDAwMDAwMDAxNSwxMzUyNDkuMDEzNjgxMTEyMzgsMjkxNDA3LjUwMjIxMDk2MTEsNDU3Mzc3Ljk1ODQ4NDY5NzQ1LDg2NjAwOC4yMjA2NDMwMTYzLDI3OTMxNS44NjUwNzg5MTg3NSwzMDA4MTEuODM1NzkyNDI4MiwyNzc5ODcuMzM5NDk4NDAzODMsMjY5NjA1LjM0NTA3NjA4MDQ3LDQxNzMzMi43MzYwNzUyNDc3NSwyODY3ODYuMDE4MTAyNDQxMSwyNjgzMjMuMTM5OTU2NTE0NCwyODcyNzEuMTA1Mjc0Njk3OTQsMjQ1NzU0LjA1NDY2Nzg4MDU1LDEzNDkyMS4yNjAzNzA4MDQ0NgorNTEsRnJpIDIyIE9jdCAxMCwxNjUxMDE1LjcxMzM5NzI2NzcsMjU5MDIzLjExODg5MDU4MTg5LDI1MDc3NS40Nzc2MzUxMDE1Niw3ODMxNDcuMTE5NjE3MDUxNywzMDY4MTkuMjYyOTgxMzMxMiwyNTIyMDEuOTQ3OTI0OTA1MzcsMjkyNDA4LjIxMzM5NDgwNDgsMjA1MDkxLjAyOTA5NjQxMjYsMjExMzY0LjkxMTczMDE1NDk3LDU2Nzk2LjAwMDAwMDAwMDAxLDEzNTIxOS4yMTkzNzQ1NDYyLDI5MTM5MC44NzkzMDY0NDI2LDQ1NzI3Ni4wNTkzNzcwMTgzLDg2NTA5My41MjQxMjEzODc0LDI3OTIzNC4yNDM2OTgwNjksMzAwNjc0Ljg4MjQ3ODgyOTgsMjc3OTYwLjE0NzYwNzE3MDUsMjY5NTc3LjAyMTA2NTM2MSw0MTczMTEuMDM3NjY2NjExLDI4Njc3Mi4xNDcwMDY5NjA4LDI2ODMxNC4wMTM4MDgwOTAzLDI4NzI1OS41MjMyNDk2OTA4LDI0NTczMS44Njg2MjU0MjQyLDEzNDkxMS4wNzkzMjI1ODY4MworNTIsU2F0IDIzIE9jdCAxMCwxNjUwOTkwLjQ4NDIxODMzMzgsMjU4OTgxLjE0NDA3ODY0MzI2LDI1MDY1My44NTA1Nzk4ODk0Niw3ODI4NDguODkxNzY2MTg1MywzMDY4MTMuODI0MDUxMzkxMSwyNTIxOTYuODY4OTQxMTI1MDUsMjkyMzc5LjQwNjAxNzAzNzIsMjA1MDU2Ljg1MzIyNjQ0NjY2LDIxMTM0Ny40NTU5NjgzNDIwMiw1Njc5Ni4wMDAwMDAwMDAwMSwxMzUxOTUuMDgzNTIwMzQ1ODMsMjkxMzc3LjQ4ODgzODA2NjMsNDU3MTkzLjU1MTkwMDE1MzYzLDg2NDMyNC4wMzkyOTI0MDI0LDI3OTE2OC4wMzQ1OTk3MzQ3NiwzMDA1NjIuMjcwMDg2ODcyMiwyNzc5MzguMTk4MzMwMjYwNzYsMjY5NTU0LjE1NjY1NzM0NDksNDE3MjkzLjUwOTgxMjM2MTU2LDI4Njc2MC45MzA4MzYyOTYyMywyNjgzMDYuNjQwNjQzNjkxOTQsMjg3MjUwLjE3MDEyNDU2MjIsMjQ1NzE0LjAwNjA5MDc4MjIzLDEzNDkwMi44Njk0MzM4Mjc3Cis1MyxTdW4gMjQgT2N0IDEwLDE2NTA5NzAuMDQzMjgxNDAzNiwyNTg5NDcuMzQyNzE1MTgwODMsMjUwNTU1LjA0NjczNzIyNzk0LDc4MjYwNy43MTEzNDk5NDA0LDMwNjgwOS40MTY4OTk0MDY2LDI1MjE5Mi43NDYzMzAxMTkyMywyOTIzNTYuMDk1NjY2ODk2OSwyMDUwMjkuMjA3MzIxMTAxNDIsMjExMzMzLjM0ODU3MTUyNDUyLDU2Nzk2LjAwMDAwMDAwMDAxNSwxMzUxNzUuNTQ5NTU0OTE3MTgsMjkxMzY2LjY5NTc3MTQ0NzczLDQ1NzEyNi44MTc0MjQ4OTY3LDg2MzY4NC45OTgxODA4NDk3LDI3OTExNC40MjM0MzIyMDMzLDMwMDQ3MC4wNDAyNDYyMDcsMjc3OTIwLjQ3NzA5NzA2MDM2LDI2OTUzNS42OTY3MTQ4ODkyNiw0MTcyNzkuMzQxODk3NTIyMSwyODY3NTEuODU1NjI4MzE5OCwyNjgzMDAuNjc5MDIxMTM2MjUsMjg3MjQyLjYxMTUxMDExMDUsMjQ1Njk5LjYyMDM1OTk5NzM4LDEzNDg5Ni4yNDYzOTczNjk3NAorNTQsTW9uIDI1IE9jdCAxMCwxNjUwOTUzLjQ2NjAyMDk4MzYsMjU4OTIwLjEzMjg2NTczNDI4LDI1MDQ3NS4wNzczNDk0MDAzMiw3ODI0MTMuMTQ3MjUwMzMyOCwzMDY4MDUuODQyNTA5MjQ2NDMsMjUyMTg5LjM5NzE0NTIzODMsMjkyMzM3LjIzMDQ0ODYyMzI1LDIwNTAwNi44NTI5ODgzNDQ4MiwyMTEzMjEuOTQzMzEwMTYzNzQsNTY3OTYuMDAwMDAwMDAwMDE1LDEzNTE1OS43NDgyMTMwOTgzOCwyOTEzNTcuOTkwMjE1ODgzNzYsNDU3MDcyLjg3NTY1NTQxNTI0LDg2MzE1OS4zMjU3NjU1NzMyLDI3OTA3MS4wNjU0NTE2ODUwNSwzMDAzOTQuNzMwMzYyMjE2MywyNzc5MDYuMTYzOTU1OTAzMiwyNjk1MjAuNzg3NzgzNjcxMSw0MTcyNjcuODgxNTI5MjEsMjg2NzQ0LjUwNzM4NzI5MjA1LDI2ODI5NS44NTQ2MDYzMDYyNCwyODcyMzYuNDk4Mjc3MDA3NywyNDU2ODguMDI5NTQzMDUwMTMsMTM0ODkwLjkwMDY0ODc3OTMyCis1NSxUdWUgMjYgT2N0IDEwLDE2NTA5NDAuMDA4OTU1ODE5LDI1ODg5OC4yMzA2MTk2MjUyNSwyNTA0MTAuNTIyNzYxNTgwNSw3ODIyNTYuNDU4NjQ5NTU0NSwzMDY4MDIuOTQwNzcyMTk3NzMsMjUyMTg2LjY3Mzg2ODMzMzM0LDI5MjMyMS45NTc2MzEwMzQ1NCwyMDQ5ODguNzc5NDU5Njc0NDQsMjExMzEyLjcxODA4Mjc3OTI2LDU2Nzk2LjAwMDAwMDAwMDAxNSwxMzUxNDYuOTY4NzE2MzA2MzUsMjkxMzUwLjk2Mjk3OTkyNjAzLDQ1NzAyOS4yODc5NzMyODU2NSw4NjI3MjkuOTUwMDkxODQ0OSwyNzkwMzYuMDI2MDA1MDU2OSwzMDAzMzMuMzczMTcyMDI4OCwyNzc4OTQuNTk3NDM4NzIwNCwyNjk1MDguNzQwOTU0MTQxNSw0MTcyNTguNjAzODc4NjI1MywyODY3MzguNTUyNzY0NDI3MiwyNjgyOTEuOTQ2OTY1MTgyNCwyODcyMzEuNTQ5ODUwOTA3MywyNDU2NzguNjg1MzEyNDQ2MTUsMTM0ODg2LjU4MzEwNzg5Nzg0Cis1NixXZWQgMjcgT2N0IDEwLDE2NTA5MjkuMDczODU0OTYyOCwyNTg4ODAuNTk3ODUxNjAwMSwyNTAzNTguNTA3OTI2NjI1NzgsNzgyMTMwLjQxNTM1OTYzNTMsMzA2ODAwLjU4MjgwNjk4NTA3LDI1MjE4NC40NTc0OTI3NDM5LDI5MjMwOS41ODcyNTY3MDkzLDIwNDk3NC4xNjUxMTE4ODkxNiwyMTEzMDUuMjUxNjM4NDk2MTUsNTY3OTYuMDAwMDAwMDAwMDE1LDEzNTEzNi42MzI0ODQ1MDU4NiwyOTEzNDUuMjg1NzQ4MzcyNyw0NTY5OTQuMDY4NTIzNDk4ODMsODYyMzgxLjA0OTkxMTYwMjQsMjc5MDA3LjcyMDA3MzA3NzEzLDMwMDI4My40NjM3NDI4NjU4LDI3Nzg4NS4yNDQ1NjUzNjk5NywyNjk0OTkuMDAwOTAzMjQwNDYsNDE3MjUxLjA4Njc4NjY5NTkzLDI4NjczMy43MjMzNjE4NTU0LDI2ODI4OC43Nzg5MTk4OTQ4MywyODcyMjcuNTQwNzE4Njg2OCwyNDU2NzEuMTQ3MTc1OTA4ODUsMTM0ODgzLjA5MzQ5MjAyNTY1Cis1NyxUaHUgMjggT2N0IDEwLDE2NTA5MjAuMTc5MDI4NTg5LDI1ODg2Ni4zOTc0NjAzNTk2LDI1MDMxNi42NDg4MjQ1MDM4Miw3ODIwMjkuMDkyNDYyNjk4NywzMDY3OTguNjY0ODA2ODQ0NTUsMjUyMTgyLjY1MTk2NjE2OTYsMjkyMjk5LjU2MTgzODA2ODcsMjA0OTYyLjM0NDA5ODA0NDM2LDIxMTI5OS4yMDQ0MDU1NDM2OSw1Njc5Ni4wMDAwMDAwMDAwMTUsMTM1MTI4LjI3MDEyMTc4MDIsMjkxMzQwLjY5NTA5MTA0ODIsNDU2OTY1LjYwNTkzMTU4MjE2LDg2MjA5OC42MTgxODA2NTQ4LDI3ODk4NC44NTU5NDg2MzUsMzAwMjQyLjkxMTA2NTQ5OCwyNzc4NzcuNjc2MjIxNTU1MTYsMjY5NDkxLjEyMDQwNTkzMTUsNDE3MjQ0Ljk5MDY1MDMxNDgsMjg2NzI5LjgwMzA1NDA5NjI0LDI2ODI4Ni4yMDgwMDIxNjcyMywyODcyMjQuMjg5NTcxMzAyNywyNDU2NjUuMDYxNDc4MjI2OCwxMzQ4ODAuMjcwODEzNjI0MzcKKzU4LEZyaSAyOSBPY3QgMTAsMTY1MDkxMi45MzYzMzA5OTA5LDI1ODg1NC45NTU3NDk1NDUzNiwyNTAyODIuOTg4MTgyNzQxNTQsNzgxOTQ3LjY2NzcxOTAzMjcsMzA2Nzk3LjEwMzEwMjk0MTc2LDI1MjE4MS4xNzk3MTY0OTksMjkyMjkxLjQzMTMyMTc4NTE0LDIwNDk1Mi43Nzc5ODE0NjA4OCwyMTEyOTQuMzAyNzk0MTQ4MjQsNTY3OTYuMDAwMDAwMDAwMDE1LDEzNTEyMS41MDE3MjcyMjM3LDI5MTMzNi45Nzk1OTE0NTI4Nyw0NTY5NDIuNTk2MDg0MDkxNyw4NjE4NzAuNjE3NjcwMjYxNCwyNzg5NjYuMzg1MDUwMTIxOCwzMDAyMDkuOTg0MjgzNzE4MywyNzc4NzEuNTQ3MDYwNzUzODYsMjY5NDg0LjczOTQ4MjgxOTMsNDE3MjQwLjA0MjIwMjMxMDA1LDI4NjcyNi42MTc3NTYwOTE5LDI2ODI4NC4xMTk1OTE4MDAxLDI4NzIyMS42NTA1NzU3MDI4LDI0NTY2MC4xNDQzNTgxNzkxLDEzNDg3Ny45ODU2ODA5MzI2NAorNTksU2F0IDMwIE9jdCAxMCwxNjUwOTA3LjAzMjc0MDgyNDYsMjU4ODQ1LjczMTI0OTUyNTg1LDI1MDI1NS45MzA3MDkwNjIxNCw3ODE4ODIuMjM1OTMwMDk2OSwzMDY3OTUuODMwMjA2MzIwMiwyNTIxNzkuOTc4MDUzNjU4MzYsMjkyMjg0LjgzMjU2OTEyNjIsMjA0OTQ1LjAzMjAxMDEwMjYyLDIxMTI5MC4zMjY0MjA4NDk4Myw1Njc5Ni4wMDAwMDAwMDAwMTUsMTM1MTE2LjAyMDM1MDUwMjcsMjkxMzMzLjk2OTUxMTEzOTQ0LDQ1NjkyMy45ODU0OTYxOTcsODYxNjg2LjkxMjE3MzE0NTgsMjc4OTUxLjQ1ODU3NTMxOTUsMzAwMTgzLjI1OTcxNjM3NjQzLDI3Nzg2Ni41NzkxODczMTk5NiwyNjk0NzkuNTY4NDQyNjQ1Myw0MTcyMzYuMDIxNDYwMDYwNiwyODY3MjQuMDI3MTg0MDM0NjQsMjY4MjgyLjQyMTQxNDQzNTE0LDI4NzIxOS41MDYzNjg4NTQxNCwyNDU2NTYuMTY3OTc3MjI3ODMsMTM0ODc2LjEzNDA4MjczMzI1Cis2MCxTdW4gMzEgT2N0IDEwLDE2NTA5MDIuMjE1NjA1NTk2MywyNTg4MzguMjg5MTM0ODY1OTgsMjUwMjM0LjE4MzA0MTU5Mjk0LDc4MTgyOS42NDYwNjc5MzE4LDMwNjc5NC43OTE2MzQ4MTQ5MywyNTIxNzguOTk2Mjc3MTA3NjgsMjkyMjc5LjQ3MjYzMjUzMiwyMDQ5MzguNzU1NDk3MTg5NzMsMjExMjg3LjA5Nzc1NDY1NjM0LDU2Nzk2LjAwMDAwMDAwMDAxLDEzNTExMS41NzgyNjM5Mzg5OCwyOTEzMzEuNTI4NTAzNDQ0OSw0NTY5MDguOTI0MjMxMjE5NCw4NjE1MzkuMDg3NzUxNDg3NCwyNzg5MzkuMzkwODM2NTM3MjMsMzAwMTYxLjU3MTkyNjI2MTUsMjc3ODYyLjU0ODk2MDMzNjEzLDI2OTQ3NS4zNzQxNTEyMTA3Nyw0MTcyMzIuNzUxMjM4OTgzOTQsMjg2NzIxLjkxODIzMDA3NDYsMjY4MjgxLjAzOTEzMjAxLDI4NzIxNy43NjI0MzkxNTY0LDI0NTY1Mi45NDk0Mjc4NTM3NywxMzQ4NzQuNjMyMzg0MjM0NzUKKzYxLE1vbiAxIE5vdiAxMCwxNjUwODk4LjI4MDgxNzg5NTIsMjU4ODMyLjI4MDM4NjExMTg0LDI1MDIxNi43MDA2NzIyNDg0NCw3ODE3ODcuMzYyMzE2MzUxLDMwNjc5My45NDMzNjg4MTQ2NSwyNTIxNzguMTkzMzUwNjEzNjQsMjkyMjc1LjExNTE4MTk5OTEsMjA0OTMzLjY2NTczMDU3NzcsMjExMjg0LjQ3Mzc1MTU2NTQ0LDU2Nzk2LjAsMTM1MTA3Ljk3NTY3NDcyOTQ1LDI5MTMyOS41NDY5NzcwOTExLDQ1Njg5Ni43MjcxMzYxMTIxLDg2MTQyMC4yMzE3NTA4MzI5LDI3ODkyOS42Mjg2OTY1NDQxNSwzMDAxNDMuOTcwMjkyNDQyNCwyNzc4NTkuMjc2MzUwODQ0NzcsMjY5NDcxLjk2ODk0NzIyMDA3LDQxNzIzMC4wODg3MzQ2MzczLDI4NjcyMC4xOTk2MzkyODA0NCwyNjgyNzkuOTEyODA5NzYwNiwyODcyMTYuMzQyNjIyNjg4MywyNDU2NTAuMzQxODIwOTAxNTUsMTM0ODczLjQxMzMwNTM2MTM4Cis2MixUdWUgMiBOb3YgMTAsMTY1MDg5NS4wNjMzMzY3NzM1LDI1ODgyNy40MjQ5MDcxNDkwMiwyNTAyMDIuNjQyNDM1NDYyNjIsNzgxNzUzLjM0Nzc0MzEwMDQsMzA2NzkzLjI0OTgxMDU3NzgsMjUyMTc3LjUzNjAzMjcxNzYsMjkyMjcxLjU2OTUyMTMzNzIsMjA0OTI5LjUzNDg1NjIwODEzLDIxMTI4Mi4zMzkxMTA1Njg5OCw1Njc5Ni4wLDEzNTEwNS4wNTE1MDU0NjkyNSwyOTEzMjcuOTM2Nzg0NTAzNjMsNDU2ODg2Ljg0MjE0OTUyMTA1LDg2MTMyNC43MDc0MTQzMTg4LDI3ODkyMS43MjYzNTcxNzU4NSwzMDAxMjkuNjgxNDc4MzU2MDcsMjc3ODU2LjYxNjM3NTQ1MjQzLDI2OTQ2OS4yMDE3MTQ4MzEzNSw0MTcyMjcuOTE4NzY5MDczMDMsMjg2NzE4Ljc5NzczNDk3Mjk2LDI2ODI3OC45OTQwODU1MzgzLDI4NzIxNS4xODU0OTM4MTEsMjQ1NjQ4LjIyNzEzNTYyOTIyLDEzNDg3Mi40MjI2OTI2MTY4NQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5hdXRvbWF0aWNleHBlcmltZW50L3Jlc291cmNlcy9BdXRvbWF0ZWRFeHBlcmltZW50RXhhbXBsZS9SZWNvcmRlZCBTaW11bGF0aW9ucy9SZWZlcmVuY2UvUl8wLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuYXV0b21hdGljZXhwZXJpbWVudC9yZXNvdXJjZXMvQXV0b21hdGVkRXhwZXJpbWVudEV4YW1wbGUvUmVjb3JkZWQgU2ltdWxhdGlvbnMvUmVmZXJlbmNlL1JfMC5jc3YKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMmMyNDQwMQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuYXV0b21hdGljZXhwZXJpbWVudC9yZXNvdXJjZXMvQXV0b21hdGVkRXhwZXJpbWVudEV4YW1wbGUvUmVjb3JkZWQgU2ltdWxhdGlvbnMvUmVmZXJlbmNlL1JfMC5jc3YKQEAgLTAsMCArMSBAQAoraXRlcmF0aW9uLHRpbWUsCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmF1dG9tYXRpY2V4cGVyaW1lbnQvcmVzb3VyY2VzL0F1dG9tYXRlZEV4cGVyaW1lbnRFeGFtcGxlL1JlY29yZGVkIFNpbXVsYXRpb25zL1JlZmVyZW5jZS9SXzEuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5hdXRvbWF0aWNleHBlcmltZW50L3Jlc291cmNlcy9BdXRvbWF0ZWRFeHBlcmltZW50RXhhbXBsZS9SZWNvcmRlZCBTaW11bGF0aW9ucy9SZWZlcmVuY2UvUl8xLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi45NjA2MDA4Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5hdXRvbWF0aWNleHBlcmltZW50L3Jlc291cmNlcy9BdXRvbWF0ZWRFeHBlcmltZW50RXhhbXBsZS9SZWNvcmRlZCBTaW11bGF0aW9ucy9SZWZlcmVuY2UvUl8xLmNzdgpAQCAtMCwwICsxLDYzIEBACitpdGVyYXRpb24sdGltZSxTRS1BQixTRS1BQyxTRS1CRCxTRS1CSCxTRS1DLFNFLUQsU0UtRixTRS1HLFNFLUgsU0UtSSxTRS1LLFNFLUtQLFNFLUwsU0UtTU8sU0UtTixTRS1SSSxTRS1TLFNFLVNLLFNFLVNULFNFLVQsU0UtVSxTRS1YLFNFLVksU0UtWgorMSxUdWUgMiBOb3YgMTAsNTg5MjIwLjc5OTk5OTk5OTksOTIzODQuOTUsODkyOTguNjUsMjc5MDIyLjEsMTA5NDk4LjU0OTk5OTk5OTk5LDkwMDA2LjM0OTk5OTk5OTk5LDEwNDMyMy4wOTk5OTk5OTk5OSw3MzE0Ny4yLDc1NDE0LjUsMTk4NzguNiw0ODIyNC4wNDk5OTk5OTk5OTYsMTAzOTgzLjI1LDE2MzA4MC4wNSwzMDczNTUuMyw5OTU1Ni43OTk5OTk5OTk5OSwxMDcxMjEuMzQ5OTk5OTk5OTksOTkxNzcuMDQ5OTk5OTk5OTksOTYxODMuNSwxNDg5MjAuNDQ5OTk5OTk5OTgsMTAyMzM3LjksOTU3NTQuNCwxMDI1MTMuOTUsODc2ODAuMjUsNDgxNDAuMzk5OTk5OTk5OTk0CisyLEZyaSAzIFNlcCAxMCw1ODg2MzUuNjg3NDg2MjQxMSw5MjI5Mi42MTEyMjcwODM2Miw4OTIwOS4zOTU5ODQ0NDU2LDI3ODc0My4yMTczNjQ1NTc4NCwxMDkzODkuMTQyMDE3NzUyODYsODk5MTYuNDIxNTU4OTUwNTIsMTA0MjE4LjgyOTA0NDk2MDY2LDczMDc0LjA4OTM2MTQxNTk5LDc1MzM5LjEyMzE5NTQ5NDUsMTk4NTguNzMxMzM1OTg3NzI2LDQ4MTc1Ljg1MDA1Mzk5MTc0LDEwMzg3OS4zMTg3Mjc4NTg3NywxNjI5MTcuMDUxNDYyODU4NTQsMzA3MDQ4LjA5ODMyNjQzNjgsOTk0NTcuMjkyOTYxODEzNDcsMTA3MDE0LjI4MjE5MjgyNTkyLDk5MDc3LjkyMjUyMjg2ODE4LDk2MDg3LjM2NDU3NjU4MjU4LDE0ODc3MS42MDQyMTY1Mzg0NiwxMDIyMzUuNjEzNDY2NjYxNTcsOTU2NTguNjkzODk4MjE3NzcsMTAyNDExLjQ4NzUxNzgyNDA5LDg3NTkyLjYxMzU3NjE4MjI1LDQ4MDkyLjI4MzY2MjgwMDI1NQorMyxTYXQgNCBTZXAgMTAsNTg4MDUzLjQxMDUzOTczOTMsOTIyMDAuMzY0NzQ2ODkyNzgsODkxMjAuMjMxMTc4Mjk0ODcsMjc4NDY0LjYxMzQ3MjM1ODU2LDEwOTI3OS45NjE2MzExMDM3Nyw4OTgyNi42ODg5OTI3ODcyOCwxMDQxMTQuNjYyMzI1NTQ0NzMsNzMwMDEuMDUxNzk3MTIwNjYsNzUyNjMuODIxNzQ3MjUzODQsMTk4MzguODgyNTMwNzA4NDQsNDgxMjcuNjk4MjgzOTM1ODMsMTAzNzc1LjQ5MTQxMDQ0MDQsMTYyNzU0LjIxNTg0MzA5ODAzLDMwNjc0MS4yMDM3MDA5OTc2Myw5OTM1Ny44ODUzODEwMjUzMywxMDY5MDcuMzIxMzk5OTQ1NCw5ODk3OC44OTQxNDIyMTI0LDk1OTkxLjMyNTI1ODc1MzMsMTQ4NjIyLjkwOTI5NzQyNDYsMTAyMTMzLjQzMTEwNjAyNjU4LDk1NTYzLjA4NzM4ODYzMTYxLDEwMjMwOS4xMjk1NDEwMjE2Nyw4NzUwNS4wNjQ3NTkzOTkzMyw0ODA0NC4yMTU0MzEzMzE2ODYKKzQsU3VuIDUgU2VwIDEwLDU4NzQ3NS4zMDQyNTI4NDkxLDkyMTA4LjIxMDQ2ODExNjQzLDg5MDMxLjE1NTQ5MjM4NjY0LDI3ODE4Ni4yODgwNDQ4MzE4LDEwOTE3MS4xMTgyNjE3NjU2Miw4OTczNy4yNDQ5NjAzMjk2MywxMDQwMTAuNTk5ODE2NzcwNiw3MjkyOC4wODcyMzU3MTA0OCw3NTE4OC41OTU2NjA3MzA4LDE5ODE5LjA1MzU2NDMxMzM0NCw0ODA3OS41OTQ2NDI1MTYwMSwxMDM2NzEuNzY4MzAwMDQxNTcsMTYyNTkxLjU0Mjk4MDU3MzE0LDMwNjQzNC42MTU4MTY3ODgsOTkyNTguNTc3MTU5MDU2NjcsMTA2ODAwLjQ2NzUxNDQzMjIyLDk4ODc5Ljk2NDg0NzY3MDA3LDk1ODk1LjM4MjAzNjY3Mzk1LDE0ODQ3NC4zNzAwMjQwMjUyNywxMDIwMzEuMzU3MzQ5Njk3MDUsOTU0NjcuNTg5NTQzNDE2NTQsMTAyMjA2Ljg4MTAxODU5ODAxLDg3NDE3LjYwMzUzMjE3MTE4LDQ3OTk2LjE5NTMyMjkxMjkzCis1LE1vbiA2IFNlcCAxMCw1ODY5MDMuNTAyMDUzNDYyOCw5MjAxNi4xNDgzMDMwMDU0NSw4ODk0Mi4xNjg4Mzc2NzAyLDI3NzkwOC4yNDA4MDM4NzQ0LDEwOTA2Mi44MDMxNDEzODQwNyw4OTY0OC4yNDgyMzQ1Mzg1NywxMDM5MDYuNjQxNjYyNzQyOTksNzI4NTUuMTk1NjExNjI0OTUsNzUxMTMuNDQ1MTEzNDk5NDcsMTk3OTkuMjQ0NDE2OTczNDY2LDQ4MDMxLjUzOTA4NTQzNzE2LDEwMzU2OC4xNTA0MDk5Mzc3LDE2MjQyOS4wMzI3MjQ4OTYzLDMwNjEyOC4zMzQzNjcyMjMyNiw5OTE1OS4zNjgyMDAzODc1NiwxMDY2OTMuNzIwNDI5NjU5MTQsOTg3ODEuMTM0ODIxOTQ3ODEsOTU3OTkuNTM1MDg1NDI1NDYsMTQ4MzI1Ljk5NzA3MjU3ODQ3LDEwMTkyOS40MDE5OTY2MzcyNCw5NTM3Mi4yMjAxOTkzMjU5NCwxMDIxMDQuNzUzMTQ1MzAzNDgsODczMzAuMjMwMDMzMjAwMDQsNDc5NDguMjIzNTAwNTU2MTYKKzYsVHVlIDcgU2VwIDEwLDU4NjM0MS40MTQ4NTc0MzQxLDkxOTI0LjE3ODE3NDkyNTU4LDg4ODUzLjI3MTEyNTI3NDMsMjc3NjMwLjQ3MTQ3MjQzOTc2LDEwODk1NS4zNDUyODgwMzM1NCw4OTU1OS45NjczMTUwNjQ5NiwxMDM4MDIuNzg4NDA2MjA0ODcsNzI3ODIuMzc2ODc2OTQwNTEsNzUwMzguMzcwNjg4MzkzNjEsMTk3NzkuNDU1MDY4ODc5NjUsNDc5ODMuNTMxNTc3NTYyMjQ0LDEwMzQ2NC42NDA1NDgxNDc4NywxNjIyNjYuNjg0OTU1MzAyOTgsMzA1ODIyLjM1OTA0NjA0MDE2LDk5MDYwLjI1ODQxODcwMDE4LDEwNjU4Ny4wODAwMzk4NzgxNiw5ODY4Mi40MDQ3MDk1MDQ2Niw5NTcwMy43ODUwMTc1ODkzOCwxNDgxNzcuODEyNTIzNDQ3NDcsMTAxODI3LjU4NTE4MDUxNDg4LDk1Mjc3LjAxOTgwOTQ4NDEyLDEwMjAwMi43NjkzNzAxNDAzLDg3MjQyLjk0NDc4MDg0Mjg4LDQ3OTAwLjMwMDQ4MTEwNTY1Cis3LFdlZCA4IFNlcCAxMCw1ODU3OTQuNDk4NTc3MzY0OCw5MTgzMi4zMDAwMzc2ODIzMiw4ODc2NC40NjIyNjY3MjU5OCwyNzczNTIuOTc5Nzc2MzUwOSwxMDg4NDkuMzA0MTU4MTQxOSw4OTQ3Mi44NTE4Mzc1MTc2NiwxMDM2OTkuMDQxNDY1MzA3NTksNzI3MDkuNjMxMDMwMjcyNzgsNzQ5NjMuMzczODU2OTY1ODcsMTk3NTkuNjg1NTAwMjQyNTU1LDQ3OTM1LjU3MjEwODA1MjcxNSwxMDMzNjEuMjQ1NDYyNTc4LDE2MjEwNC40OTk2Mjk3Njg5LDMwNTUxNi42ODk1NDczNDQxNyw5ODk2MS4yNDc3NTIwOTc5NiwxMDY0ODAuNTQ2MjQxOTY0MTQsOTg1ODMuNzc2MTgxOTI4OTksOTU2MDguMTMzNDA5NTQ4MDMsMTQ4MDI5Ljg1OTkxNjE3NTAyLDEwMTcyNS45NDYzOTc1NDExMiw5NTE4Mi4wNjcyNDEzMTU5NiwxMDE5MDAuOTc2NDc4Njk3MTgsODcxNTUuNzQ5MTUwMDk5NTIsNDc4NTIuNDI3NTc4NTE0Cis4LFRodSA5IFNlcCAxMCw1ODUyNzEuNDgzNDYyOTQxMyw5MTc0MC41MTM5MjE0MjE3LDg4Njc1Ljc0MjE3NDU2Njk5LDI3NzA3NS43NjU0NDkyNTg5NiwxMDg3NDUuNjIyMDU5NTc3NDUsODkzODcuNjQ4ODY0NTE2MTYsMTAzNTk1LjQwNDA4NzYyNDg4LDcyNjM2Ljk1ODE4Mjc1NTM1LDc0ODg4LjQ1Nzk0NTQyOTUsMTk3MzkuOTM1NjkxMjkyNiw0Nzg4Ny42NjA3MjUxNDQ2MiwxMDMyNTcuOTgwMTI4MzU1ODYsMTYxOTQyLjQ3Njg5ODA2NTMsMzA1MjExLjMyNTU2NTc2MTIsOTg4NjIuMzM2MTk4MjAyNzMsMTA2Mzc0LjExODk0MDA3Mzg3LDk4NDg1LjI1MzA4MjkxODI3LDk1NTEyLjU4Mzg1NzgzMjI3LDE0Nzg4Mi4yMjIzMDExOTUzNSwxMDE2MjQuNTYwNjQ0MzE2Myw5NTA4Ny41MTE0MDEzNjkxMywxMDE3OTkuNDY0NjY5MDI3LDg3MDY4LjY0NjM1MTIyODg5LDQ3ODA0LjYwNzgxMDcxMDA1NQorOSxGcmkgMTAgU2VwIDEwLDU4NDc4Ni4zNDI4MDg1OTQ5LDkxNjQ4LjgyMDAzNjU0MzY2LDg4NTg3LjExMDc2Mzk1OTc5LDI3Njc5OC44MjgyNDUyMjU3NywxMDg2NDUuODc1MjE2NDQwMTUsODkzMDUuNTkyOTM4NTM4NjcsMTAzNDkxLjg4MzIxNzM1Mzg1LDcyNTY0LjM1ODcwMjA4NTk3LDc0ODEzLjYzMDAyMjA5MzIzLDE5NzIwLjIwNTYyMjI3OTk4Nyw0NzgzOS43OTc2MTI0OTc0NCwxMDMxNTQuODc2MTIzMzIxNiwxNjE3ODAuNjE3MzUwNDQwNDQsMzA0OTA2LjI2Njc5Njg4MDYsOTg3NjMuNTIzODkxNTI5ODQsMTA2MjY3Ljc5ODA1NzIxMDM0LDk4Mzg2Ljg0MzY5MzYyNDMsOTU0MTcuMTQ0MDUyMDM5MTksMTQ3NzM1LjA1NDM5NjIxOTM1LDEwMTUyMy41NjcwNjg0NTQyNiw5NDk5My42MjcwMjg4MzYyMSwxMDE2OTguNDAzNjAzMDQ3MjYsODY5ODEuNjQzMzg4MzI1NzQsNDc3NTYuODQ3NzA5NjM5NjI0CisxMCxTYXQgMTEgU2VwIDEwLDU4NDM2MS40NDI0OTYyNzAzLDkxNTU3LjIxODk5ODc3OTQsODg0OTguNTY3OTU2NjE0MywyNzY1MjIuMTY3OTY4NzExNjQsMTA4NTUyLjY4MjgyNTYxNjA0LDg5MjI4LjcxMzAyODUxMTEyLDEwMzM4OC40OTMwNDkzOTkxNyw3MjQ5MS44MzM1MTM3MTI0NSw3NDczOC45MDQ0ODQ4NDIxMiwxOTcwMC40OTUyNzM0NzQ2NCw0Nzc5MS45ODMyNDk3MDU2NiwxMDMwNTEuOTk3NTQ0NjQzMTgsMTYxNjE4LjkyMjU0MTQ5OTk1LDMwNDYwMS41MTI5Mzg0MzU5LDk4NjY0LjgxMTI2Njc3MTE3LDEwNjE2MS41ODM1NjIxODQ3Nyw5ODI4OC41NjUwOTA1NzE1OSw5NTMyMS44Mjk3MzE4NTU5LDE0NzU4OC42Mzg5NzUzNTY4NSwxMDE0MjMuMjE4OTgzOTg3MjQsOTQ5MDAuOTExNTAyNDcwOTksMTAxNTk4LjEwNjA0NDg0NzExLDg2ODk0Ljc1NDg3MDI5Mjg1LDQ3NzA5LjE2MDgyOTc4NzYyCisxMSxTdW4gMTIgU2VwIDEwLDU4NDAzMi41NzM1MjEwMTgzLDkxNDY1LjcxMjMwNjc5MzYsODg0MTAuMTEzNjkwMDUxMjIsMjc2MjQ1Ljc4NDU0MzY0NywxMDg0NzAuMzgwMDI2NjU3Myw4OTE2MC4zMzUxNTU3MjM1NiwxMDMyODUuMjYxNzY1MTQ3ODIsNzI0MTkuMzg0NzIwMzMxMDQsNzQ2NjQuMzA5ODQ3MTQzOTksMTk2ODAuODA0NjI1MTY2Miw0Nzc0NC4yMTg3NDM5OTgxNSwxMDI5NDkuNDcxMDgwOTA3MzEsMTYxNDU3LjM5NjA3NDU1Mzg2LDMwNDI5Ny4wNjM2OTMzMDE5LDk4NTY2LjE5OTM5Nzc1Nzk3LDEwNjA1NS40NzU1MzA1MTE4Myw5ODE5MC40NTE0Nzk2ODA0NCw5NTIyNi42NzIyMDA4NjY1NCwxNDc0NDMuNDg1OTUxNjUwOTgsMTAxMzIzLjk3MTU4NTkzOTAzLDk0ODEwLjI1MzQ0MDA3MzE3LDEwMTQ5OS4xNDA0MTczMTg2Niw4NjgwOC4wMTAzNjY0MjI5Nyw0NzY2MS41NzQ1MDM1MjY0OAorMTIsTW9uIDEzIFNlcCAxMCw1ODM4NTYuOTY2MTM2MTQ4Nyw5MTM3NC4zMDMzMjA1NDkzMyw4ODMyMS43NDc5Mzg0ODkwNiwyNzU5NjkuNjc4MTY1NTgzMDYsMTA4NDA2LjEwMjc2MTg5ODQ4LDg5MTA1Ljg4NjE0MDQ5MjU2LDEwMzE4Mi4yNDM5Mzk0NjEzNiw3MjM0Ny4wMTY4MzAyOTU4Miw3NDU4OS45MDEyMjAzMDY3MSwxOTY2MS4xMzM2NTc2NjQwMyw0NzY5Ni41MDY0OTEyNzc3MywxMDI4NDcuNTQxMjk2MzAzODQsMTYxMjk2LjA0NTc2Njk2NzE1LDMwMzk5Mi45MTg3NzY2ODc0LDk4NDY3LjY5MDY3NTQ4MDUxLDEwNTk0OS40NzQyNzU3NjE4MSw5ODA5Mi41Njk2OTg3Mjc5MSw5NTEzMS43MzIyMDY5MjIyMywxNDczMDAuNTAzMTg4NTM3NDYsMTAxMjI2LjYzMjQyMTIwNDg2LDk0NzIzLjIyMDA1NzQzNDIzLDEwMTQwMi41MjU3Mzc4MzI0Niw4NjcyMS40NjgyMzE3NDUwNiw0NzYxNC4xNDI0Nzk3NDc3MTYKKzEzLFR1ZSAxNCBTZXAgMTAsNTgzOTI1Ljk5MzA4NDY3MSw5MTI4Mi45OTkyMzcwNDQzMiw4ODIzMy40NzA3NTg4MTE5OCwyNzU2OTMuODQ5NjI5MTk0NjUsMTA4MzcxLjU0ODAzNzQwMjE3LDg5MDc0LjE5MjQ0NjY1OTQ1LDEwMzA3OS41NDMzMzUxNTA1OCw3MjI3NC43MzkxNjY2MzU3Myw3NDUxNS43ODMyMDUzMzM4NiwxOTY0MS40ODIzNTEyOTcxNiw0NzY0OC44NTE0NzgxODkyNCwxMDI3NDYuNjcxODYwNzU2NSwxNjExMzQuODg3OTIyNTM5MDYsMzAzNjg5LjA3NzkzMjgyNzQ3LDk4MzY5LjI5MDE0OTI3NjE3LDEwNTg0My41ODA2MjY5MDQ4Myw5Nzk5NS4wNDc5MzYxOTY5LDk1MDM3LjEyNTQ5MjgyNzQ3LDE0NzE2MS4yOTEzNTYzNjk2LDEwMTEzMi42MjA0MTYyMDYzNyw5NDY0Mi41NDgxOTY2NTA0NCwxMDEzMTAuMDY5NjQ1MTU0MjUsODY2MzUuMjQxNDQyNzUzNDUsNDc1NjYuOTY4NDU5NDc4ODkKKzE0LFdlZCAxNSBTZXAgMTAsNTg0Mzg1LjEzNjEwNzU2OSw5MTE5MS44MTUwMDgwMzIyNyw4ODE0NS4yODIzODkyNDUwNSwyNzU0MTguMzAxMDE2NDAxODUsMTA4Mzg1Ljc5ODkxODE4OTgyLDg5MDc5LjU1NTgxNjkwNTk4LDEwMjk3Ny4zNTQyNjg5MjA2Nyw3MjIwMi41NzA1MDk0NTY5NCw3NDQ0Mi4xNTEzNjMwNDQyLDE5NjIxLjg1MDY4NjQxNDI3Niw0NzYwMS4yNjM4MDIwOTYyNywxMDI2NDcuNzI4NjA3ODA0MzcsMTYwOTczLjk1NTYxNDI2NjUsMzAzMzg1LjU0MDk3MjUxOTUsOTgyNzEuMDA4MTMzNDY3OTYsMTA1NzM3Ljc5NjUwMDA3MzI0LDk3ODk4LjEyODI3Njg2MjIyLDk0OTQzLjA2OTI2MDU4NzY1LDE0NzAyOC42NDg4MjM5ODU5NSwxMDEwNDQuNDA3OTExNzkxNTUsOTQ1NzIuOTc1NTI4MjcyMSwxMDEyMjQuOTQ5MTU5NDEwMDEsODY1NDkuNTQ1MjcwMjgwNzIsNDc1MjAuMjQ5MzUxNzE5NDEKKzE1LFRodSAxNiBTZXAgMTAsNTg1NDY0LjkyOTM2NjE0MTEsOTExMDAuNzgwOTc1NDU2MTUsODgwNTcuMTgzNDU2MzE1MzgsMjc1MTQzLjAzNzEwOTg3MDcsMTA4NDc5Ljc5NTAxOTMxMSw4OTE0NS4wMjUxMjI1NDQxOCwxMDI4NzYuMDM1NzgzMzE5NzIsNzIxMzAuNTQ3ODkxMjcwMjIsNzQzNjkuMzY2NDUwNzU4NzQsMTk2MDIuMjM4NjQzMzgzNzE2LDQ3NTUzLjc2MzQ2NTc0MjgsMTAyNTUyLjMwNjUyNjk3Mzg5LDE2MDgxMy4zMTQ0NzIyNTMyLDMwMzA4Mi4zMDc4NTUxMzA3LDk4MTcyLjg2NTE4NjU5OTc3LDEwNTYzMi4xMjYwNTA2OTU2Niw5NzgwMi4yNjE2Nzc2ODEzOCw5NDg0OS45NjU2NjYyNjM2MywxNDY5MDcuNDI5MDA4MzAyNCwxMDA5NjYuMjY4MDQ0MDQzMjIsOTQ1MjIuNjMzMTA3NzE2MTksMTAxMTUyLjY5ODc1ODc0OTA0LDg2NDY0Ljc4NDE4Mjg4NTM5LDQ3NDc0LjM1Mzc1MzAxODUxCisxNixGcmkgMTcgU2VwIDEwLDU4NzUyNy43OTEwNzMyNzQyLDkxMDA5Ljk1NzQ5MTUyMDI4LDg3OTY5LjE3NTM5OTAwNzI5LDI3NDg2OC4wNjgyMzEzODY1NCwxMDg3MDMuMjQ5NzkzMjk1MDgsODkzMDcuNDQwOTI1MzA4MDcsMTAyNzc2LjI0Mjg1MzUwOTI5LDcyMDU4Ljc0Mjk1NzkyNTE1LDc0Mjk4LjA4NTU2MjA2OTM4LDE5NTgyLjY0NjIwMjU5MzQyNyw0NzUwNi4zODkzMzU3NDI0LDEwMjQ2My4zMDU5MDEzOTM3LDE2MDY1My4wOTIyNDMyNTQ1LDMwMjc3OS4zNzg4NjI3MjgzNiw5ODA3NC45MDE0NDU3ODU1LDEwNTUyNi41Nzc5NDA3NTM2Myw5NzcwOC4yNzczMjczNDQ1Miw5NDc1OC41NDk4NzY5NjEwNiwxNDY4MDUuOTgxMjU2Mjk5ODMsMTAwOTA1LjUyMzIyMTAzODYsOTQ1MDUuMzQ2MjY2MDI3MzQsMTAxMTAyLjg3MDYzNzkxNjkyLDg2MzgxLjcwODIxMDg2MTIxLDQ3NDI5Ljk2MjMwMTM0NDAyCisxNyxTYXQgMTggU2VwIDEwLDU5MTEzNi4xODI3MTcxMzk3LDkwOTE5LjQ2MzExMzIxMDczLDg3ODgxLjI2MTM0MDgxODYyLDI3NDU5My40MTU5Njc0NDE3NSwxMDkxMzUuMzA1OTYzNDI0NTQsODk2MjUuMjUyMzUxNzE3NDcsMTAyNjc5LjE2MjI5OTYwOTI2LDcxOTg3LjI5Mjg2NDg1NzI3LDc0MjI5LjQ5NzIxNzE3NzIsMTk1NjMuMDczMzQ0NDUwOTgyLDQ3NDU5LjIxNjEwNzM3OTMyNSwxMDIzODUuOTU4NzcxMzg5NDEsMTYwNDkzLjUzNDgxMzExMjg0LDMwMjQ3Ni43NTQ5Njk4NjMzNCw5Nzk3Ny4xOTQ0MTA2MjExLDEwNTQyMS4xNjk4NDc5NjAzNCw5NzYxNy42ODg2NDI1MjU4OSw5NDY3MC4xNTYyMTEwMDQ0NiwxNDY3MzguNTkwNDQwNTQ5MywxMDA4NzQuNjU3NjcyOTYxNjYsOTQ1NDQuNDY0MjIwMTAxNTEsMTAxMDkxLjg0NTIzNDMxMjUyLDg2MzAxLjY5NjcyMDk5ODY5LDQ3Mzg4LjMyMTk4MDIwMTMzNAorMTgsU3VuIDE5IFNlcCAxMCw1OTcxNDQuODEwMjU4MDgxMSw5MDgyOS41MjcyNTk5MjYzMyw4Nzc5My40NDc4MjIzNTU0OCwyNzQzMTkuMTI0MzI2NTY2MywxMDk4OTkuNTYxMjQ0NDMxMTYsOTAxODkuNTMxMTEwOTk5NjgsMTAyNTg2LjkyMTA0NTM5NjIyLDcxOTE2LjQ1NjMyMjg4NzYyLDc0MTY1LjcyNzY1MDA1NDYsMTk1NDMuNTIwMDQ5MzgzNTA0LDQ3NDEyLjM4NTIyMDQyNTc5LDEwMjMyOS41OTI5NzMwOTMyMSwxNjAzMzUuMTA4NTMyMDI4ODUsMzAyMTc0LjQzODYwMDE2MDI0LDk3ODc5Ljg5MTQ1MDMxMDEsMTA1MzE1LjkzNzA3MTAwOTk4LDk3NTMzLjIyNzIzNDA1ODI5LDk0NTg3LjE4MDA4ODY1NzM5LDE0NjcyOS40NzYwMjQ1Mjk0LDEwMDg5NC43NDMzMDgyNDIyNCw5NDY3OC45Mzk3MDExMDQ5NywxMDExNDcuNDAyOTk3MjA3NDYsODYyMjcuMjU4MTAyODg1NzUsNDczNTEuNjkwMTQzMjc5MTA2CisxOSxNb24gMjAgU2VwIDEwLDYwNjgwOS4xMTYzNDI5MjQzLDkwNzQwLjU4ODczMjgxMDg4LDg3NzA1Ljc0ODIzNzAyNjksMjc0MDQ1LjI4MTQ2MTMxMDUsMTExMTgzLjg0NTQ5NDI0MjQ0LDkxMTM4LjY5NDc0NzQwNDksMTAyNTAzLjI5ODk1OTUwOTA1LDcxODQ2LjcxNjA1NTAyMTU4LDc0MTEwLjU0ODIyNzEzNjU5LDE5NTIzLjk4NjI5NzgzNzcxLDQ3MzY2LjE2MTU2NzIwODkyLDEwMjMxMC42Njg4NzY5MjYzNywxNjAxNzguNjg4MTY2OTEyNTYsMzAxODcyLjQzNTE2NjI3NTIsOTc3ODMuMjY5NzI0NzE3ODQsMTA1MjEwLjk0OTAwNTQ0ODUyLDk3NDU5Ljc4MDAwMzMyODg0LDk0NTEzLjg4NDgyNTQ5NDc3LDE0NjgxOS4zMTUzODk4MDkwNSwxMDEwMDAuOTgxNTQ5MzMxMTUsOTQ5NzIuODMyOTA4MzYxMjUsMTAxMzE2LjA5MDc3NTE2MTEyLDg2MTYyLjkxMTQxNTYzMjM5LDQ3MzI0LjExMzQyMDU5NDUyCisyMCxUdWUgMjEgU2VwIDEwLDYyMTg3NC45MjI2MDQ2NDQ0LDkwNjUzLjQ3NzY5ODQ5NzMsODc2MTguMTg5NTQ5NjA2MTgsMjczNzcyLjA2MTM4NzYxOTYsMTEzMjYxLjQxNTM1NTk1MDA2LDkyNjc0Ljg3NjIwNzQxMDM3LDEwMjQzNC45NTQzMTAyMDQ3NSw3MTc3OC45NjM1NTg3MzY0LDc0MDcwLjU4Nzc4NTA4MjIxLDE5NTA0LjQ3MjA3MDI3OTgzNyw0NzMyMS4wMzYxMzE4NTI3NiwxMDIzNTcuODkyMDM0OTAzMiwxNjAwMjUuODk3NjI0MDYzNDgsMzAxNTcwLjc1NjE1NDg1NjIsOTc2ODcuODQ1MTUxOTg3MSwxMDUxMDYuMzQwMjMyNTA1MzYsOTc0MDYuMDA4MjU3NjM5MDksOTQ0NTcuNzg4OTk4ODI2NzksMTQ3MDc1LjU3NDE2OTkwMTE0LDEwMTI1MS4zNDYxNjgzNzE2Miw5NTUyOS4zMjM3Mjc0OTIyMywxMDE2NzQuNTk2MjQxNjAwMDgsODYxMTYuNzE3ODU4ODkyMiw0NzMxMi43Njg5NDA4MzY4NzUKKzIxLFdlZCAyMiBTZXAgMTAsNjQ0NTYzLjI0NzQzNzAxNTIsOTA1NjkuNzQ4NjM4NTU4OTEsODc1MzAuODI1MzAyMTM1NDIsMjczNDk5LjgwMzM0NDA3MTcsMTE2NTAzLjA1MDEyODYwNzE1LDk1MDc1LjA4MDMwMjEyODcsMTAyMzkzLjUwMzU3MzQzNjksNzE3MTQuODI5MzczNjcyMjQsNzQwNTcuMzgxMzMyNjc5NDksMTk0ODQuOTc3MzQ3MTk1NjU4LDQ3Mjc3LjkxMDEzNDk3MTcxLDEwMjUyMC41OTg2OTE5NjM0LDE1OTg3OS43MjIxNDc2MDA1NSwzMDEyNjkuNDI1MjMzNjMxNSw5NzU5NC41Njg5MzM5OTc5NywxMDUwMDIuMzY4NjI5NzU4NSw5NzM4Ny4xMDU0MjEzMjQ2LDk0NDMyLjAxODg4OTIzNjE2LDE0NzYwOC4yMTUwODE5ODExNSwxMDE3MzkuNDAzMDI3OTg4MzcsOTY1MDkuNTA1NjE3MzIxNTQsMTAyMzQ2LjIzMDk1NjA5NzE1LDg2MTAyLjg5OTU1NDQ4Nzg2LDQ3MzMwLjIzMDY4OTc2MzkzCisyMixUaHUgMjMgU2VwIDEwLDY3NzMwNi4zODMyMjM0Nzc4LDkwNDkyLjI4Mjg2NjA1MDQ1LDg3NDQzLjc2MDU0Mzg5MDg4LDI3MzIyOS4xNjEzNDM0NjE2NiwxMjEzNTcuOTM0NjMyNTk3NzEsOTg2ODIuMDQ2NTIwNzA2NTksMTAyMzk4Ljk4NjY3Mzc0NDY3LDcxNjU3LjI2NzM0MzczODgsNzQwOTAuNzYxODAxOTgzMDQsMTk0NjUuNTAyMTA5MDkwNDUyLDQ3MjM4LjQyMjAzODA3Nzk0LDEwMjg4MS45NDM4Nzk2MjQxNCwxNTk3NDUuNTk2OTg5NjY0NzcsMzAwOTY4LjQ5MDIwODQ4NTM0LDk3NTA1LjE3ODY2MjczMzAxLDEwNDg5OS41MjI5NjY2NzU3MSw5NzQyOS4zOTc0MTAyNTM1OSw5NDQ1OS4yMTcyNTI3MzU4OCwxNDg1OTIuMDM4ODU3NTI4MSwxMDI2MTEuNzQ5NDk1MjUzMzksOTgxNTMuMTgyOTQ2Njk5NTYsMTAzNTIyLjIyMzYyMzE4OTE5LDg2MTQ2LjIxNzQzMjg4MzgsNDczOTguMTkxMjc3MzE1NTY0CisyMyxGcmkgMjQgU2VwIDEwLDcyMjEwNS40Njc2NTg0ODQsOTA0MjYuMzY3NjMxNDQ0MzEsODczNTcuMTk5MjkxMzQ5NTUsMjcyOTYxLjM4NDI1ODc4MjYsMTI4MjczLjczOTQ0NDI0NzM3LDEwMzg1My4yNDg1NzAwNzU1LDEwMjQ4NS41MTAxOTIzMzU0NCw3MTYxMS41Nzk0ODU0ODgwMSw3NDIwNC4zMjY0MDU0NzEyLDE5NDQ2LjA0NjMzNjQ4ODk4LDQ3MjA1LjUyMzM0Mjk4MjQ0LDEwMzU3OC4zMDQxMjQ3OTc2NywxNTk2MzMuMzI2MzkzMDAwMTcsMzAwNjY4LjA0NjI2Nzc3OTgsOTc0MjIuODIxNTIwNjQ3OTgsMTA0Nzk4LjcyMTA2MDI5ODA1LDk3NTc3LjgwODk2NjU5NTQsOTQ1NzcuODY5Mzk0NTI3OCwxNTAyOTUuMDI4NzQ3NjYwNjMsMTA0MDg4LjI3NTE4NDc1NDM0LDEwMDc5Mi4wMzQwMDc5NjgxNSwxMDU0ODMuNDEzMDgxMTY1ODMsODYyODkuMDY2OTM4MjU0Niw0NzU1My4zMjg2Njk4ODk0NgorMjQsU2F0IDI1IFNlcCAxMCw3Nzk1OTIuNTc5MDI1NTA5OCw5MDM4MS41ODU1Mjk3Njk2Myw4NzI3MS41MzM0Mjc5NTU4LDI3MjY5OC44MzIxNDYxMzY0LDEzNzU0Mi45MzgwMjMyNjM4MiwxMTA4NTQuMTUxMDQ2OTIxODgsMTAyNzA5Ljk5OTY0NjA0MDQ1LDcxNTg3LjE2NzY3ODQ5MzU0LDc0NDUzLjc3MzA4MjExMDQyLDE5NDI2LjYxMDAwOTkzNTQ2Niw0NzE4NC40Njc4NDE1NDM2NSwxMDQ4MjQuMjE3OTY0NTk3MTMsMTU5NTYwLjM4NTY5MDM2NjI0LDMwMDM2OC4yODA0NDUyNTk4LDk3MzUzLjEzNDY2NTAxOTgsMTA0NzAxLjY2NzY2MDU4ODk0LDk3OTA3LjMzMzIxODgwNjU4LDk0ODUyLjAxOTE1NDAyMjI2LDE1MzEwNi40NTE5MzA3MDE2NSwxMDY0NzcuNjM4MDI4Mzk2MDYsMTA0ODM0LjEzOTUyNzA2NzkyLDEwODYwOC45NDE0MDE1MTc2Myw4NjYwMi4zNDk4ODczNzY1NSw0Nzg1NS44MzIzMDQ2MzQ2NworMjUsU3VuIDI2IFNlcCAxMCw4NDgyNjYuNjIzOTQ3NDEyNiw5MDM3NS4wNzU3ODQ5ODkyNCw4NzE4Ny41MDg3MTE5MTE1OCwyNzI0NDUuOTI1OTQwMDQ4OTQsMTQ5MTI2LjExMjM4NjIyMDA1LDExOTcyMy43NzM0OTA4MzgyNywxMDMxNjUuMTQ0NjYxMjg2ODIsNzE2MDAuNDk4MTg0OTgxODEsNzQ5MjguODQ0Njc4NDU5NCwxOTQwNy4xOTMxMDk5OTM1ODMsNDcxODQuNDk0NDcyMjk3OTksMTA2OTM3LjE0ODExMjk5MDk0LDE1OTU1Ny41NDI3MTI3NTY5MywzMDAwNjkuNTU2NTI5MDc5MSw5NzMwNi4xMTA1MzEwMjExNywxMDQ2MTEuNTAwOTg2MTc1NTEsOTg1MzkuNTUzNTAyMjU1NTEsOTUzODUuMzUyMTY3MTQ5OSwxNTc1NDguNjQ5NDAyMTA0MjYsMTEwMTcyLjM2NzA1MTUwNzA2LDExMDY5My4xNzY3MjcyNTA1NSwxMTMzNDcuOTI2MjE0OTYxMyw4NzIwMC45Nzc0ODg2MTY1OCw0ODQwMC40NTQ2NjI2Mjk1NAorMjYsTW9uIDI3IFNlcCAxMCw5MjQ1MTguNTU4MDgzNDYyMiw5MDQzNi45NTgxNTg1Nzg3LDg3MTA2LjUyODg4ODAxMjExLDI3MjIxMC44NjE5NDIxMDU0NiwxNjI1NjQuMDA3NjY3MTA1OSwxMzAxODcuMjQxMjc1NTk5MzEsMTAzOTk2LjU1MTQwNzg4Mjg2LDcxNjc5LjkwNDcxMjU4NzI1LDc1NzY4LjE4NTY1ODgzMzksMTkzODcuNzk1NjE3MjQ2NDIyLDQ3MjIxLjU3NjEyMjQ2ODM3NCwxMTAzNDQuNDA0MzY1MDAxNzYsMTU5Njc4LjA1NTM3OTIxLDI5OTc3Mi41NzQ1MzU1NzgzLDk3Mjk5LjIwNTI2NTY1ODAyLDEwNDUzMy45MzIwMDcwNTEzOCw5OTY2My4zMjI4NzY4OTQ2Nyw5NjMzOS4yMjY0MTEwNzgxOCwxNjQyNDEuNzc2NzA3MDE0NTYsMTE1NTk5LjA5MjI4MzExNzg5LDExODY1MC44ODIwMjg3MDM2NCwxMjAxMjUuODc0NjE5OTQ3NzMsODgyNjMuMDMxNjQyNTE0NTYsNDkzMjcuMzMxMjI5OTM4MTEKKzI3LFR1ZSAyOCBTZXAgMTAsMTAwMzU4MC44MTczODExMzE4LDkwNjE5LjAwNjk1MTc2ODk2LDg3MDMxLjIwNjM3ODQyNTU5LDI3MjAwOC42NzMwNjQ0MzIzLDE3NzA2NS44MTMwNTI4MzE3NCwxNDE2ODkuNjgwMTQyNzUzNSwxMDU0MjEuOTI4Nzg3MTA3NzcsNzE4NzMuMDUyNjc3MDA2MjksNzcxNzMuNTI4MzQxMTI0NTgsMTkzNjguNDE3NTEyMjk2NDk1LDQ3MzIyLjczOTE4MTYwMDc0LDExNTU0MS40NzE5MjQzNzc3MiwxNjAwMTIuMTUxNzI5OTg3MDMsMjk5NDc4LjY2Nzk0ODQyODU0LDk3MzYyLjM4NTk0NzQ5NCwxMDQ0NzkuMjI1NTkzNDczMzUsMTAxNTU0LjYxODEyMDEwMDk1LDk3OTUxLjMzNzEyMzMwNzMsMTczNzg1LjU2Mzk0ODA4MjY4LDEyMzEwNi44NjAyODc5MzIyLDEyODY5Ni42NDE0NjEyMDQ4NSwxMjkxODUuMDkwMDc3MzAyMjQsOTAwNDcuNjUyNjEzMTUwOTksNTA4MjUuNDM0MTMzOTY4ODIKKzI4LFdlZCAyOSBTZXAgMTAsMTA4MDgyOS4wNDE4NzEyNTIyLDkxMDA3Ljc4NDY3NTM0MTgzLDg2OTY2LjM0OTEzNTE4MzgsMjcxODY2LjY0MTY0NjE2NTgsMTkxNzMxLjY2ODkxMjg3MzA4LDE1MzU0My40Mjg1NjAxNzU1NSwxMDc3NDUuMzU4NTc0MTQ3NjQsNzIyNTcuODY4OTcxNzQ0ODcsNzk0MTQuMTM2NTQ0NTk1OTUsMTkzNDkuMDU4Nzc1NzY1NjksNDc1MzIuNDk1MDgyMTUyNzQ1LDEyMjk3MS4yMjY2NzEzNjUxMywxNjA3MDguNjI4MDE2NjY0NjIsMjk5MTkwLjM1NTg1MDg2ODksOTc1NDYuMDczNTg4NzU5MjYsMTA0NDY1LjYwNDAyMTQ1NjAyLDEwNDU4Mi43MzkyODExOTIwMSwxMDA1NDUuODY2NjUwNjk5ODksMTg2NTUwLjQ3OTQ3NzUwNTU4LDEzMjgxMy4yNzkyOTUxMTU5NiwxNDA0NDQuMDAwMjI0NTcxMDYsMTQwNDIxLjg2MTY3NzYwMzY4LDkyODk5LjIyNjc1NDg5MDM2LDUzMTE2LjA2MTUwMjcyMjcyCisyOSxUaHUgMzAgU2VwIDEwLDExNTI3MjMuNzQ3Mjg5NzIxNCw5MTc0Mi41ODg4OTI1MTIxOCw4NjkyMC42Nzk2MTkyMzgxNywyNzE4MzMuNTk1MTk5NTM5OTcsMjA1Nzc0LjUzODc4ODE3OTcsMTY1MTAwLjUzNjU5OTU3ODYzLDExMTM1MS4xNjcyMTYxMzI5OCw3Mjk1Ni41MzQ1MzQ5NDc2LDgyODA0LjkzNjc0Mzc2OTMsMTkzMjkuNzE5Mzg4Mjk1Mjc4LDQ3OTIxLjM2MTUyMjMwODk2NiwxMzI4MzMuMTc0ODU5ODI5MDcsMTYyMDAzLjU4NjEzOTI0OTIsMjk4OTEyLjM0ODg4MjY1NDMzLDk3OTMyLjcwNzk1NTQ4NzIzLDEwNDUyNC44NDM0ODk2ODE1MywxMDkxNzkuMjM3MjI1NjE5MDcsMTA0NTE2LjcyOTgzNTAzNzU2LDIwMjQ0OC40NDg0MTE5Nzc3LDE0NDQ4Mi44MzkyODA3Nzg0NSwxNTMyMDEuMjI0NDg2MTIxMTgsMTUzMzMxLjAxODcwMzgyMDUsOTcyMTUuNTkwNjE4MjM1ODksNTY0MDIuNTgyNzkwMDMwODQKKzMwLEZyaSAxIE9jdCAxMCwxMjE3MTI0LjI4NDEyOTE1MTYsOTMwMzYuMzk5OTg3NDY3MDcsODY5MDkuNzYyODcxNDA2OTksMjcxOTk1LjQ4NzczODk0Nzk3LDIxODY0My4zNTA5MjEzMTk0MiwxNzU4NjguNTUyNjY2NDQ2MTYsMTE2NjU3LjAyMTY4NzI0NzM0LDc0MTQ5Ljg5MjU4MDUxNjg1LDg3NjQyLjI4OTEwMzMzMzA3LDE5MzEwLjM5OTMzMDU0NTg2LDQ4NTk1LjM0NjcwNzI2MzM5NCwxNDQ5MTQuOTkwNDgxNjQ2MSwxNjQyNTIuNTY1MzQ2ODU3OCwyOTg2NTMuMzYzMjAyOTI4OSw5ODY1Mi4yMTA0MjMyMTgwMSwxMDQ3MTEuMTQwMjcwODY5MjgsMTE1NzQ2LjA1NjM4NDUwNTk0LDExMDI2MS43NzM1OTQyODI2NCwyMjA4MzAuNDEyMjc5MjU1NTQsMTU3NTMwLjI5NDgyOTk4MDUzLDE2NjE2NS40MzMwNDU3ODY4LDE2NzEyMS40MTY3NjAzMzU1LDEwMzM1Ny40MDk1MTk5OTQ5OCw2MDc4OS4yOTc3MjI0ODE5NgorMzEsU2F0IDIgT2N0IDEwLDEyNzMxMzUuNTQ3Mzg0NjAwMiw5NTE5Mi41ODAwMDE2MDU3OCw4Njk2MC44MzAxMjc5ODYwOSwyNzI1MDAuNTI2ODQ5NjE4NjUsMjMwMDM5LjAwMTI3NTU5NzA1LDE4NTU0Ni4xMDg5MzQ0MjExMiwxMjQwMTEuMzgxNDY3OTY2NTUsNzYwODQuNjI2MzI2ODExNCw5NDA5OC42ODkyMjUwNzU0NSwxOTI5MS4wOTg1ODMxOTczOSw0OTcwMi42Mjk2OTg5OTAzODYsMTU4NTc2LjAzMDg0NTE3MzAyLDE2Nzk1My4zMTU5MDM5NjE0LDI5ODQyOS4zMzY1NzA0NDE0Myw5OTg5OS41ODA0MzE3MDYyNiwxMDUxMTQuMjc4NDA2NDc1MDYsMTI0NTA1LjA2MTQ2MjczNDQ4LDExODA1OC42NjM3MTQzMTAyMSwyNDA2MTQuOTcwMjAwMTI3NjYsMTcxMTY3LjYyNzU1NTg0Nzc4LDE3ODYyMy43OTUwMzcxMzk0NCwxODA5MzguODQ3OTg5MDE0NiwxMTE1MDIuMDU1ODU3ODUxMDgsNjYyMDQuNzE0OTU5MTE5MzkKKzMyLFN1biAzIE9jdCAxMCwxMzIwNzYyLjEwOTMxOTg5Nyw5ODYwMS4wNjExOTU0MDI4Myw4NzEyMC4zOTI1MzA4MzM5OCwyNzM1OTcuNTYwNDk0MjQyMiwyMzk4NjcuMjQzODEwNjQzNTYsMTk0MDAxLjc1MTEzMzAxNjY2LDEzMzU1MS4xODA0ODU1NjI0LDc5MDU5LjMxMzU1NDAxMzQsMTAyMTE1Ljg5NjMwNTQ1ODI0LDE5MjcxLjgxNzEyNjk0OTEwMyw1MTQyOS45MDA2NDA2ODgyOCwxNzI5MjEuNTExMTU0ODgxLDE3MzczMy41NzczNjAxNzksMjk4MjY5LjAxNjU1MzE0NzQ2LDEwMTk0OC44MzA2ODQzMTczMiwxMDU4NzcuMzQzMTA3NjUzNTYsMTM1MzQ4LjcyMDg4OTcwNDA0LDEyNzkxNi45OTA2NTQ2NDUxNSwyNjA1ODcuMTA0OTMyMTI3MDMsMTg0NjEwLjU0Nzg5OTk2OTk0LDE5MDA2OS45NzUxMTY5Mjg3MiwxOTQwNjYuMDczNjM3MjEyLDEyMTUwNC42OTU4NDk3MzgyNyw3MjM4NC41NTI0NjE1NTUxNAorMzMsTW9uIDQgT2N0IDEwLDEzNjA1NTkuNjU4OTEwNjI4MiwxMDM2ODguNTQxMjcwNjkxNSw4NzQ2NS41ODU0MzE5NzM4NCwyNzU2OTAuMDc5OTcwMDEzNzYsMjQ4MTczLjEzMTc3MjI4MjE1LDIwMTIyOS4xMTcxNDY2MjYyNiwxNDUwODMuOTU5NDQzOTkzNyw4MzM3My4wNTg4ODQzOTgwMSwxMTEzNjQuNjI2MDEyNTAxOTgsMTkyNTIuNTU0OTQyNTE5NTUzLDUzOTc3Ljg4OTE1MDM3NTgwNiwxODcwNTguOTg3ODg2NzA4MDYsMTgyMjY4LjYxNzQ2NDg5Njk2LDI5ODIyMy40Mjk1NzgyNDM4LDEwNTE1MS4xNDg5NzE0NDc3MiwxMDcyMTYuNzMyMTEzMTI1NzUsMTQ3NzkyLjk1NzQ5OTY4ODI2LDEzOTQ5Mi4wMTkxODQzMzM2MiwyNzk2OTEuMjQzMzI4ODMyNTYsMTk3MjM2LjUwNDg4ODE0MTczLDIwMDIyMy43MDQ3MjYxNzAzNCwyMDYwMjAuNDQxOTYyODg2NTQsMTMyODY4LjYyNzA0OTg3ODA3LDc4OTM4LjEyNDQxNjI0OTA5CiszNCxUdWUgNSBPY3QgMTAsMTM5MzM2My4zMTc1MTU2NDYzLDExMDgwMS43NDk2MDc3MDU3Myw4ODExOS43Mzc3NTk0NDI4NSwyNzk0MDIuMTU0NTU0MTkzLDI1NTA4Mi4zMzkwMDA4MjUzLDIwNzMwMS4wNjc5NTc0MzE3NSwxNTgwNzcuMzgwOTE1MTg5Miw4OTIzMi4zMjcwNTE3ODkwNSwxMjEzMTIuMDI3NjA1MzMzNzEsMTkyMzMuMzEyMDEwNjQ2NTQ3LDU3NTA5LjA3MjY5NzI4ODAzLDIwMDI5MS41NDg4NTI2MjUyNywxOTQxMDUuOTA3NjIwODIyMjIsMjk4MzgxLjQyNzQ0MzE2OTksMTA5ODk5LjEyNjk2MzIwNDI1LDEwOTQzNy4wMTEzMTMzMDYxNSwxNjEwODYuNzAwODM5MjY0NiwxNTIxMzYuNTE1NDE1ODE0NiwyOTcxOTEuMjY3MTQzNjQzNjQsMjA4NjQ3LjI0ODE5MDY0Njk2LDIwODk5MS4wMDA2MTQ5MzgxMiwyMTY1NTQuNTk1OTY4MjYzNDYsMTQ0ODcwLjA5NDkzMjQ1NTU0LDg1NDU5LjE3ODY1NTU4NDU1CiszNSxXZWQgNiBPY3QgMTAsMTQyMDEwNC41MzMyNjA0ODc3LDEyMDA0Mi42ODg1ODc5ODYyMSw4OTI3MS4xMTA1MjkwMDEwNSwyODU2MzcuMTc4NDU4ODA4NSwyNjA3NTcuOTE1NTg1OTI5MTIsMjEyMzMyLjgxNTA5NzQ1MjA4LDE3MTc4Mi4zMjUyMDQyMTYzOCw5NjY0My44NjYzODY0Nzk0LDEzMTM2My43NzA5NDM5NTY0MiwxOTIxNC4wODgzMTIwODcxNTUsNjIwNzYuOTk1OTI1NTQwMzUsMjEyMTg3Ljg1MzQ3NDI2NTk4LDIwOTQyOS42ODE2Njk5NzEwMywyOTg4OTQuMjA5Njc5NjcwNzUsMTE2NTQxLjM0ODkyMTk2MzE0LDExMjkyNS40NzI3OTE0NzAyMSwxNzQ0MTkuMjIyNzA4NjQ5NCwxNjUwNzQuNjI0MDI5MTkxLDMxMjY4OS4wNjEzNDk1NTYzLDIxODY1NC4zNTQyNjA0NjA3NCwyMTY0MDUuNzIxNzA0NjA4NSwyMjU2MDUuNTc1NzM5NDM1MzMsMTU2NzY0LjQ3ODkyNTA0MDksOTE2MTcuNDkwMzM2Mjc0NjMKKzM2LFRodSA3IE9jdCAxMCwxNDQxNzAwLjcwNDE4MDQ4NjMsMTMxMTQyLjExNzM0NzM1NzUsOTExOTAuMDM0MDg2MzIxNjEsMjk1NTgxLjQ3MDkzODA4ODY2LDI2NTM3Mi4xNjg5MjUyNzQ5LDIxNjQ1Ni4xMTg4NzY1NjExLDE4NTQyMy41OTAwNjgyODA1MiwxMDUzNTQuNjg3NTgxNzAzMDIsMTQxMDAxLjE5MzAwNzMxOTQsMTkxOTQuODgzODI3NjE3NjgzLDY3NTcxLjM2NzQzMTg3OTMsMjIyNTU3LjU3ODE0MTc5MTg2LDIyNzg3OC43NTA2MDMyOTE2NCwzMDAwMTIuMDQwMzQyNDczODMsMTI1MjU0Ljg3ODU3MzUyMjIzLDExODEwNS40NTEzNTQwMzkwOCwxODcxMDYuNjE0NzU2OTIxMDIsMTc3NTk2LjAzMDkxMTYzNzUzLDMyNjA2MC40NjA0Nzc0NDc4NCwyMjcyMjguMjk4NDM1NTY0MjQsMjIyNTc2LjM3MTgyNDY4NzE0LDIzMzIzMi4yNzE4NDkwNTgwMiwxNjc5NTMuOTk2ODM2NTE4ODcsOTcxOTguMzk1NzcyOTg0NDQKKzM3LEZyaSA4IE9jdCAxMCwxNDU4OTk2LjE0OTk1MTQ4NDUsMTQzNDc2LjcxMDM3Mjk5NjQzLDk0MjMyLjM3Mjk0MTU3MTE0LDMxMDU3MC42OTU2MTE0Njk4NiwyNjkwOTAuMjU4Nzg4OTc3LDIxOTgwMy4wNTcyMDU4NTk3OCwxOTgzNTkuMjEzMTk5MDU3MjQsMTE0ODkwLjE0ODc3ODk4MzM5LDE0OTg1Ny4zNjQyMzk2NzYxLDE5MTc1LjY5ODUzODAzMzYzNCw3MzcxOS45NTUwNDMyODI5MywyMzEzODYuNDA4OTA3NjQwMiwyNDg1NTEuODI2Nzk0NTU1LDMwMjEzNS4zOTkwNjY5OTk1NSwxMzU5MjYuMTA1NDUwMzk2ODYsMTI1MzM0LjM4NzE4MjA2MDQxLDE5ODY4NC4zMTgxNjI0MjE4NywxODkxNzguNDEyODE4MTI2NiwzMzczNjcuNDk5MzM2NjM4NywyMzQ0NDIuMjYzNzcxOTIyODIsMjI3NjQ2LjU4MjcwMjc1NDYyLDIzOTU2MS45NTEwMDMxNzYsMTc4MDU3LjAyODQ4MDkwNzM1LDEwMjA5Ny43NDUxNjQxNzMxMgorMzgsU2F0IDkgT2N0IDEwLDE0NzI3MzYuMTAzOTMxNDAxLDE1NjI0Mi42MjMzMjM5NzE4Nyw5ODgwNi45NjQwNTI0ODkyNywzMzE3NDEuMTA4NDA5NTk3MjUsMjcyMDYxLjgxOTYzODU4MiwyMjI0OTYuODc1OTc4Mjk1MDUsMjEwMTU1LjUyNjQwNDIyMTkyLDEyNDY3Ny42NTA0NDIyMDg1LDE1NzcyOC4wMDg5NDYyNTMxNiwxOTE1Ni41MzI0MjQxNDk3Miw4MDE1NS43MDU3OTcxNjI3LDIzODc2OC45MjQyMzgyNDI2NSwyNzAyMjcuOTA0MTI0NDQ1NzUsMzA1ODc4LjU1NDQ1Mzk0ODEsMTQ4MTE2LjEzMDE5Mjc1NTgsMTM0NzYzLjY5OTUwMDc1NDQ1LDIwODkwOS43MjcwNDcwNTI5LDE5OTUxNy40NTMzMjIxMzQxLDM0Njc4MC4xMzExMzY0OTgzNiwyNDA0MjUuNjk4MTEyODk0MTcsMjMxNzY5LjI5OTIwNDI3MjE2LDI0NDc1MS44NjE3NzA4MzQ5OCwxODY4OTUuMjgwMzE3NDQ0NjIsMTA2Mjk1LjMwMDQxMDI5MTg2CiszOSxTdW4gMTAgT2N0IDEwLDE0ODM1NjAuMzk4OTEwMzM2LDE2ODY3Ny42Mzc3NTYwNjcwNywxMDUyODEuNDM5OTMzMzQxODMsMzU5NTA1LjgzMzM4Nzk2OCwyNzQ0MTcuNjQxODk2MTgwMywyMjQ2NDcuNTk3OTg2Mjg0OTYsMjIwNTg1Ljk5NDgwMjUyMDQ0LDEzNDE4Ni4yMjk2MjUwNTA3NCwxNjQ1NDMuMTI3NTk5MTA2NjQsMTkxMzcuMzg1NDY2Nzk5ODIsODY1MTEuNDY3MjI1MzI3NSwyNDQ4NTUuNzk3Nzg5NjI3NzIsMjkxNjc5LjAyMTczMTc1MjI2LDMxMjEzMi4xMTI4MDkzOTg0NCwxNjExNDkuMzI2NjIwMDM2NzcsMTQ2MjIzLjQxODY4NjEyNjUzLDIxNzcxNS45MjgwMzc5MTQ4NSwyMDg0OTUuMzc1NDY2ODM5NjcsMzU0NTE4LjUxNTg5NTA2MTU0LDI0NTMzMS40MDM2MjE3MDEzMiwyMzUwOTEuNjU5NTQyMjUxOSwyNDg5NjQuNzQzNDA2MTk0NTIsMTk0NDQyLjYzMTg0NjU0NDksMTA5ODI0LjgyMTk2NzkzMDU2Cis0MCxNb24gMTEgT2N0IDEwLDE0OTIwMDcuOTcyMjA0NDgyNCwxODAyMTIuMDE0ODE4MDMwOTMsMTEzODI4LjAzNzE2NzkxNDk4LDM5MzEyMS4xNzY5NTQ2ODg4NSwyNzYyNjkuMjg1NjQ3Mzk2MywyMjYzNTAuNTYwNTk1ODUyOCwyMjk1ODguNzE0NTUyNTk5MzgsMTQzMDE3Ljg0NzYxOTA1MTIzLDE3MDMyNi4wNDM5NzU5MjI0NSwxOTExOC4yNTc2NDY4MzY5ODgsOTI0OTMuNDMzMjc0MDg4MDIsMjQ5ODE4LjAxNDczMTE4OTA2LDMxMTkxNC44OTQ4NTM2MzU3NSwzMjIwODcuMDI1OTU4NDgzNzUsMTc0MjgyLjM1MDI3MTU0OCwxNTkyMTAuMTA1MDI4NjY3MywyMjUxNTMuNTAyNjgwNjkzNywyMTYxMjYuODAxNzQ0ODIwOTYsMzYwODE1LjM3NTkzMjQyNTIsMjQ5MzE0LjYzMzY3NzI0Nzk3LDIzNzc0Ny4yMDU2MDA3NDY3MywyNTIzNTQuNzg3ODkxOTY1MTMsMjAwNzY5LjI2MjAzMTQ2NDA1LDExMjc0OS40NzE4NzA5Nzk2MQorNDEsVHVlIDEyIE9jdCAxMCwxNDk4NTI2LjY2ODIwODUwNjcsMTkwNTExLjE1NzIwNDYzNDU0LDEyNDI3Ni45NjYxNjA0OTQ0Nyw0MzA2OTguODM5MDEyODA4MSwyNzc3MTAuMzU4MzIxMjUxNywyMjc2ODYuNzcxMzQwMDI0NTQsMjM3MjEzLjU2NTY1OTc5MDk3LDE1MDkzMy40NTU5OTk4NjMyLDE3NTE1NS44NDE1Mjk1MDQyOCwxOTA5OS4xNDg5NDUxMzMzOSw5NzkxMS4yOTMxMjI4NDY2NSwyNTM4MjUuMjkxMTY4NzYyNzIsMzMwMjg1LjYzMjE2NzExNzU1LDMzNzE0NS4yMTkyNjMwNDk1NCwxODY4NjQuODM0MzE4ODAzNiwxNzMwMDEuNzE2MzQ3NjQ2OTYsMjMxMzQwLjE2NTA3NDA4MjEsMjIyNTA2LjgzODA1ODE5Mzk3LDM2NTg5NC4wMjYzMTU0NDM4NiwyNTI1MjEuMzE5ODY0ODE3NzUsMjM5ODUyLjgwNTg4MDIwMjQyLDI1NTA2MC43MzQwODU1NTc3LDIwNTk5Ni41MTIyMTg5MTc2NiwxMTUxNDQuNjQwMzg0MTI4NzcKKzQyLFdlZCAxMyBPY3QgMTAsMTUwMzQ4NC45ODI3NzY5NzMsMTk5NDQzLjQzNTQwNjI1MTM0LDEzNjA4OS4zODMyMDg2ODE5Nyw0Njk3MzcuNDg3NTc2ODg1MSwyNzg4MTguNDA5NjA1OTU5OCwyMjg3MjQuMDAyNjI4MzA1NywyNDM1NzUuNDc5NTg5MTk0NywxNTc4MzMuNDE1NjMzMTY5MzIsMTc5MTM4Ljc2OTgyMzExNCwxOTA4MC4wNTkzNDI1ODAzMywxMDI2NzIuNzcyMzcyNzU4NjMsMjU3MDM0LjM3MDE4NDk4OTY4LDM0NjQ2Ny4xNjM4MDAwOTIyLDM1ODYyNC41MTA5OTkwMjA0LDE5ODQzMS42OTY4MzY5MTU1NCwxODY4MzkuMzA5NzMyMTA3NjUsMjM2NDIzLjk4MjkyNzQyMDc2LDIyNzc3MC45MTgwMTcwMzE0NSwzNjk5NTYuOTkwMjM5MjQ5NTQsMjU1MDgyLjE3OTc3Mzc4MDMsMjQxNTA4LjE5NzI2MTczOTM1LDI1NzIwMy4yNjA5OTIwNzM0OCwyMTAyNjUuNjkyNTU4MDExMDQsMTE3MDg3LjExNzc4Nzc0Mzk2Cis0MyxUaHUgMTQgT2N0IDEwLDE1MDcxODMuOTYwMDk1OTgxOCwyMDcwMjAuMjcyMzg4MzQ1OTQsMTQ4NDk3LjE3NjI2MDY3OTM1LDUwNzgzNi44MjcxMzA2MTMyNywyNzk2NTcuMTU2NTIwNjIwOCwyMjk1MTguNDA0MjI1MDQ0MywyNDg4MTkuOTkyNDAzMTg0MjQsMTYzNzE5LjU1Njg3Nzg2MzIyLDE4MjM4OS4yNjg2MDAzMTkxNiwxOTA2MC45ODg4MjAwODgyMSwxMDY3NjAuNzQ4NzEwMjY2NTgsMjU5NTgzLjg2MzEyNjUwNDI2LDM2MDM4OC4wNTM4MTAwMjUwNCwzODcyNDEuNDExODMxMzk4MTUsMjA4NzE5Ljg1MDYyODYxNTY1LDIwMDA4MS4yMzg4NDE4NTEzNiwyNDA1NTkuNzM5NjU1NjYyNzQsMjMyMDY3Ljg5MjA2MjQ2ODksMzczMTgxLjUxNTU1MTM1ODMsMjU3MTEwLjc3MjkxMDY0ODY3LDI0Mjc5Ny4wNzE3NDgxNzA3NCwyNTg4ODUuMDA2OTIzNjg2NzcsMjEzNzE4LjkwMzc5MDY5NDI4LDExODY0OS4wNjgzMzkxNTE2OAorNDQsRnJpIDE1IE9jdCAxMCwxNTA5ODY4LjI0MjY4NDIzMzcsMjEzMzM4LjY3MjY0NjkwODU4LDE2MDcyNS4xNjg1NjU4NzUsNTQzMTkzLjcwNDc1NDAzNzksMjgwMjc4LjYwODg0OTY4ODUsMjMwMTE2LjEyOTQ4Njc0MzA0LDI1MzEwMC4zMTc1NjMwODMzNCwxNjg2NTcuMDI1Nzc0MjgzNTQsMTg1MDE4LjQ2NTU2NTAxMzYsMTkwNDEuOTM3MzU4NTg2NDkyLDExMDIwNy4yOTMyODQxNzY4NSwyNjE1OTIuODcyOTczMDcyODcsMzcyMTQ0LjkyMjIzODM0ODc1LDQyMjU3NS44NTQ2MDczNzc1LDIxNzYzNi41NDM5NjcxNjI5MywyMTIyNzkuMTQyMzY5NzQ4MTUsMjQzODk1LjExNDM2NTM0Mjg2LDIzNTU0My42NDc0MTc2MDUsMzc1NzE5LjAwODU1NTQxMDg0LDI1ODcwMy42NDkzNDEyMjMwMywyNDM3ODguNzkxNzY3NTIzMDcsMjYwMTkxLjg3NDAxNTkzNDk0LDIxNjQ4OC40NzcyNzk2MDc0NywxMTk4OTUuMDg4MzAxMDE4ODQKKzQ1LFNhdCAxNiBPY3QgMTAsMTUxMTczNS44MzIzNTkyMjg3LDIxODUzNy42MTIxMjY2NzI4MiwxNzIxNjQuOTM1ODIxMzgxMDIsNTc0NzQ3LjY2NTM2NTI3NzMsMjgwNzI0Ljg5NzU0OTcwODksMjMwNTU0LjczMjU4ODczMTY4LDI1NjU2My4wODY4MTQ1OTQxNiwxNzI3NDMuNDYxNjg5Mzg0MzYsMTg3MTI3Ljc0ODU4OTkwMDUsMTkwMjIuOTA0OTM5MDIzNzIzLDExMzA3MS41NTY2OTkyMzYxOSwyNjMxNjEuNjA4NDkwMTAyNDYsMzgxOTI5LjI1Nzk3OTMyNiw0NjI5MDYuODc4OTEwMDk5NCwyMjUyMDguNjcxNDI3NzI0NjgsMjIzMTgyLjAyMTYzODUxNTI2LDI0NjU2My4zNjQ2MzQ5OTQxOCwyMzgzMzEuOTgwODYxOTI5ODMsMzc3Njk2LjQ1MzE4MjE1NDMsMjU5OTQxLjQ0MTM1MjcyMDYzLDI0NDU0MC4yMjIxMjgwMDAxNywyNjExOTQuODIyNzE2MTg0NDMsMjE4NjkxLjk5MzA3NDg5ODYsMTIwODgxLjA4Mjc3MjIwOTgzCis0NixTdW4gMTcgT2N0IDEwLDE1MTI5NDYuNTU3MTEwMDgyNiwyMjI3NjkuMzIwNTIzNzc5MzcsMTgyNDQwLjA5NTYxMjIwMDYyLDYwMjA4MS42MDM5MTE3NjU1LDI4MTAzMC4xMTc0Nzc4OTExLDIzMDg2NC43NTc2MDgzMzIwMywyNTkzNDEuNzQxMjExOTYzNywxNzYwODguNzAzMDUyMzkwNjYsMTg4ODA2LjQzMjQxMzU4NTA1LDE5MDAzLjg5MTU0MjM2NzQ4LDExNTQyNC40MzQ3NDc3OTQwNiwyNjQzNzMuMzExNjU2NjcyNiwzODk5NzUuNDg5NjI2NjgxMiw1MDU2MzMuNjkwNjUyMDA2LDIzMTUzNi40MjA2MzUwOTIyLDIzMjY5OC4xNzU0MzI4NjYxOCwyNDg2ODAuODk0MjUyODc0ODMsMjQwNTUxLjA0MzEzNjI1OTc0LDM3OTIxOS4xNzgwNzc0NTUyLDI2MDg5MC45MDU0MTU1OTQyLDI0NTA5Ny43NTE5ODYxOTE3MiwyNjE5NTIuMDU3ODE2MTEwMTcsMjIwNDMwLjg3MDI0MTM0ODA4LDEyMTY1NC40ODg5OTAzODgyNworNDcsTW9uIDE4IE9jdCAxMCwxNTEzNjI5LjE4MTc5NDY2ODgsMjI2MTgyLjI3MjEwMDE4NjQ3LDE5MTM4NS45NDY4MjI0MzY1Myw2MjUyMzAuOTU1NzQ3NjE2OCwyODEyMjEuODE4ODQ2MzIwOCwyMzEwNzEuMDA3MTgyNzE4NCwyNjE1NTMuNjUzNTk5ODg0ODgsMTc4ODAxLjk2OTkyOTMwMTg4LDE5MDEzMS4yNzU1MjEzNTMyLDE4OTg0Ljg5NzE0OTYwNDM2LDExNzMzOC42MTgzODI3ODE5MywyNjUyOTYuNDY3MjY5MjA1MSwzOTY1MjYuNzYyMjMzMzA0Niw1NDgwMzguMzYwNTY3MjY3LDIzNjc1Ni43NTE2OTk3MzYyMywyNDA4NDcuNjM5Njg4MDY4NTQsMjUwMzQ3LjA5MDczMjc5NzA1LDI0MjMwMi40NzY0MzAwNTg1NCwzODAzNzMuODEzMzc2MTE2LDI2MTYwNi45MTI5NjY2MTc2NCwyNDU0OTkuMDY2OTg0ODAwMywyNjI1MTEuMDUxOTYwODc1MywyMjE3OTAuODEwODM4MzQwOTksMTIyMjU0Ljk3MjU1MjMwNjg5Cis0OCxUdWUgMTkgT2N0IDEwLDE1MTM4ODcuMjk1NDEzNDU2MiwyMjg5MTIuMjYwMTM5OTE2MiwxOTg5OTIuMTE1NzE1Nzc0NjIsNjQ0NTAwLjI1MDQ0MjA2NjIsMjgxMzIyLjE5OTg5NzU3MDYsMjMxMTkzLjU0MzIzNTYyOTksMjYzMjk5LjQ4ODE4NDkwNDMzLDE4MDk4NC41NDIzMDIxODE5NywxOTExNjcuMDA4MDE3Nzk1NDgsMTg5NjUuOTIxNzQxNzM5OTcsMTE4ODgyLjc0NjczNzM2Mzc5LDI2NTk4Ni45Nzg4NTE1OTAxLDQwMTgxNC40NDE1NDQ2NzkyLDU4NzkyNy4zNjg0MDIyNDQ1LDI0MTAxOC4wOTIxODgxNzcwNSwyNDc3MjAuMjIxMjI1MDczOTQsMjUxNjQ1LjM1OTI5MTkzOTgsMjQzNjcyLjAzMjUzMjY4OTA3LDM4MTIzMS4xMTEwNTE0NTM1NywyNjIxMzQuMjUzODIwMjgyNzMsMjQ1Nzc0LjY1MjQ4MDYwNDE2LDI2MjkxMC4zMjY0MzgyMjI2LDIyMjg0My4xNjc0MjMxMTA0MywxMjI3MTUuMzEwOTg2NzU1MDQKKzQ5LFdlZCAyMCBPY3QgMTAsMTUxMzgwNC4xNTYzOTA3NCwyMzEwNzguNjEyNDQ4ODM0MiwyMDUzNDMuMTM0NDMzNjUwNTYsNjYwMzI0LjY1MzgxMTAxNzMsMjgxMzQ5LjExNTY4NjkyMjYsMjMxMjQ4LjU1NDUxNTU5MDksMjY0NjY0LjA3NDcyNDg1ODQ1LDE4MjcyNi4zNzgzMDkwNDM0NCwxOTE5NjcuNDkxOTU3MDA0MDQsMTg5NDYuOTY1Mjk5Nzk4OTAzLDEyMDExOC41MDg2NTE0MzQ1NiwyNjY0OTAuMjIzOTM5NjEzMyw0MDYwNDcuNjA1MzM5MjU0MjUsNjIzOTAzLjMwMDA1NzQ3NTksMjQ0NDY0Ljk3MzU5MDQyMDQ0LDI1MzQ0My4wMTk0NTExNjkyNCwyNTI2NDQuODM5Nzc2NDk0ODMsMjQ0NzMxLjA2OTYzMTQxOTY3LDM4MTg0OC41NjMyODA2MTgxLDI2MjUwOS4zMTA2MDY0MjM1LDI0NTk0OS4wOTc3MzczNTk1OCwyNjMxODEuMDI2MzgxMDg5NDcsMjIzNjQ2LjcxNTUyMDU3MjU2LDEyMzA2Mi4zNjIwMzM1MDU4NworNTAsVGh1IDIxIE9jdCAxMCwxNTEzNDQ2LjY1NDkxODk3MDgsMjMyNzgzLjQ2MTU0MTMyOTA0LDIxMDU3MS44ODIyOTgyNDYzOCw2NzMxNzkuMjM3ODU4Nzk1NCwyODEzMTYuOTM1OTIyMzA5OSwyMzEyNDkuMTE2MTM4NDU2NjgsMjY1NzE4LjEyNDQ5ODI0MjE2LDE4NDEwNS4yNjY5ODAxOTAzLDE5MjU3Ny4xNzU3MjA3MjE3LDE4OTI4LjAyNzgwNDgyNDcxNiwxMjEwOTkuNjcwMzYxODQyODMsMjY2ODQyLjkxMTQxODk1NDYsNDA5NDA5LjE5MTEwNjgzMTU0LDY1NTMyMC4yNjk2NTI2MTc1LDI0NzIzMC4wOTEwNzI4OTI1NywyNTgxNTcuODg0NzgxNjEwNywyNTM0MDIuMzk5MjE0NzQ2NDYsMjQ1NTM4LjQ0NzQ0OTgyMDQ0LDM4MjI3Mi43NDk3MjkyODM1LDI2Mjc2MS41NzUyNjExNDQ1NSwyNDYwNDIuMjE3MjUzOTMxODYsMjYzMzQ4LjI4OTg0NjIyMSwyMjQyNDkuNTExMDE4OTcwNjMsMTIzMzE4LjAyMDU2Njc3ODM5Cis1MSxGcmkgMjIgT2N0IDEwLDE1MTI4NjguNTEzNzM5Njc0LDIzNDExMi42MDc2NzkxNDc2NSwyMTQ4MjguMjc2NjczMjE1NzMsNjgzNTI1LjY0OTM4Njc4NDIsMjgxMjM3LjIwMDgyODAzMDc2LDIzMTIwNS43NTQzMjM1NTIyNSwyNjY1MTkuOTM5NTgzOTExMDQsMTg1MTg3LjAzNzE3MTExNTk1LDE5MzAzMi40MzExMzY4Nzk3MiwxODkwOS4xMDkyMzc4Nzk5MDgsMTIxODcxLjk5ODAyODUzMzU1LDI2NzA3NC42MzA3NzQxNzgzLDQxMjA1NS4zNzgyNjg5OTY0LDY4MjA5Mi4wNzkxMzc4NTU3LDI0OTQzMC4zNTk2Mzk1MTU2NiwyNjIwMDYuMzM1NTg4NTI0NzYsMjUzOTY0LjQ1NzkyNDQ0MTksMjQ2MTQyLjMxMjE5MDA1NjQzLDM4MjU0MS4yODMzNjQ1MzkyLDI2MjkxNC44NjI1MjI0MDMzLDI0NjA2OS45NDA3NTQyNzg1NiwyNjM0MzIuMzU0MDczNzg1OSwyMjQ2OTAuNjEwMTc3NTI5NSwxMjM1MDAuMDM3NDkyNDQxOTkKKzUyLFNhdCAyMyBPY3QgMTAsMTUxMjExMi44ODUxNzc4MTk4LDIzNTEzNy4yMDQzNjY1ODUwNywyMTgyNjAuNDgxMTc4NjAyMjMsNjkxNzg0LjY3MTk5NDYzNDMsMjgxMTE5LjE4NzY3Nzc2ODc2LDIzMTEyNi45NTQ4MzY3OTQzMiwyNjcxMTcuMzI2OTk1ODE1MDMsMTg2MDI2LjY4ODI2MTA2NDA2LDE5MzM2Mi44OTcwMDc4MTg3NywxODg5MC4yMDk1ODAwNDU5MTQsMTIyNDczLjg4NzkyODg5Mjg0LDI2NzIwOS4xOTU2Nzc0Njg0NCw0MTQxMTcuNDcyMzM4MDcyNyw3MDQ0ODIuOTg4MjcxMzc5NywyNTExNjYuMjk5MzMxNTA1OCwyNjUxMjEuMDg3Njk0MTAyNCwyNTQzNjguNzU3ODUwMzc2NjYsMjQ2NTgxLjg3MDA3NDcxMzYsMzgyNjg0LjQ5Njc1NzQyODIsMjYyOTg4LjM5MDA2NTk1ODg0LDI0NjA0NS4wNzQyNTkzNzE0LDI2MzQ0OS41MDE5MTI0MTQ1NiwyMjUwMDEuNjMwNDAzNzcwMDIsMTIzNjIyLjc2ODMzMjUyOTk3Cis1MyxTdW4gMjQgT2N0IDEwLDE1MTEyMTQuNDM4OTc1OTgzNSwyMzU5MTUuNzAwNDQ2NjU2MDMsMjIxMDA0LjkxMTcyMTY0ODgsNjk4MzI0LjkwMDM4MDQxOTUsMjgwOTcwLjM1NTE2NzQ5Mjc2LDIzMTAxOS41NTc3NzU0NjcsMjY3NTQ5LjI5MTgyNzcxMzI2LDE4NjY2OS43MDI1MDk2ODEyNiwxOTM1OTIuNjMzNjI3NzM4ODMsMTg4NzEuMzI4ODEyNDIzMDgsMTIyOTM3LjE5MDk3NDg0MTQsMjY3MjY1Ljc0NDM5NjQ4NDIsNDE1NzA0LjU2MDAxMDgyMjY2LDcyMjk0MC4yMDMzMTIzNDA5LDI1MjUyMi43NjEzNTI5NTYwMywyNjc2MjEuNTY0OTgzODMwNjcsMjU0NjQ1Ljg3ODA0MDY0NDk4LDI0Njg4OC45MjMwNjUzNjQ5LDM4MjcyNi44MjEwMjA4MzI3NSwyNjI5OTcuNjQ4NDkxNDExMiwyNDU5NzcuOTA4MjkxOTQ0ODgsMjYzNDEyLjgyNTE3MDU5MDcsMjI1MjA4LjA4OTY3ODI5OTMyLDEyMzY5Ny43OTU1ODg2NjgxMworNTQsTW9uIDI1IE9jdCAxMCwxNTEwMjAxLjA0MDQ3NzU0NzYsMjM2NDk1Ljc3NTM5MzkzNTUsMjIzMTgxLjg1NzIzODMxMTg0LDcwMzQ2MC44MjUyMDE1MTAzLDI4MDc5Ni43MDE0OTI2NDUxLDIzMDg4OS4wNzcyODA2NjYxOCwyNjc4NDcuNTM5OTcwOTMzNiwxODcxNTMuNDA5MDI2Mjc4NDIsMTkzNzQxLjExODUyODcxMjIyLDE4ODUyLjQ2NjkxNjEzMDYyNiwxMjMyODguMTEwMTczMDgyNjUsMjY3MjU5LjY0MzcwMzg2NTY0LDQxNjkwNi40Nzg3Njk5NjY1LDczNzk3OS42NTI4NzYyNjYyLDI1MzU3MC40MzEwNDUwNzY3LDI2OTYxMi4yMDYwODQ0ODgxLDI1NDgyMC41MzE0MjgwNjk1NywyNDcwODkuMTkzOTc4MjY0NiwzODI2ODcuOTE4NjQzMTQzLDI2Mjk1NS4xMTU0NzYyMzg5LDI0NTg3Ni43MTA4OTAzMTQ4MywyNjMzMzIuODQ2MTAwMDg0OCwyMjUzMzAuNTM4NjE1Mzg1NywxMjM3MzQuNDQ5MDY0MDE0MDcKKzU1LFR1ZSAyNiBPY3QgMTAsMTUwOTA5NS4wOTc0NjI0MDY4LDIzNjkxNi4xMjQ5MjI0NTQ3LDIyNDg5NC40MjE4ODY1ODAzNiw3MDc0NTUuOTM5NTA1MDQ3OSwyODA2MDMuMDUyMjM1NjY5NjMsMjMwNzM5Ljk1OTY3NzQ5NTEsMjY4MDM3Ljc3Mzc3NDY5Njg2LDE4NzUwOC4yNzQ0MTg5ODQ1NywxOTM4MjQuMDg3ODU4MjIyOTgsMTg4MzMuNjIzODcyMzA2NjYsMTIzNTQ4LjA3MDE4ODgwNzE1LDI2NzIwMy4yMjU2MDAzNzgyNCw0MTc3OTYuNzM0MzM5MzMyMjcsNzUwMTE2LjY1MzcxMDgwMjgsMjU0MzY3LjYyNjY4MTAzNDQyLDI3MTE4Mi40OTI3NjIyMDE3NiwyNTQ5MTIuNjU0MTk1NjQ2MSwyNDcyMDMuNDQ2MTI4NTM2MDIsMzgyNTgzLjYwNzUxOTMxOTMsMjYyODcwLjgzODA3MDU4MTE0LDI0NTc0OC4xMjU2NjM3NDMwNiwyNjMyMTguMDIwODUxNjM0NzMsMjI1Mzg1LjUwMjQ4Njc3MjI4LDEyMzc0MC4yMzU2NDc1MDUwOAorNTYsV2VkIDI3IE9jdCAxMCwxNTA3OTE0LjY0MDA2MjYwMjIsMjM3MjA4LjAzNjMxMzg4NDgsMjI2MjI5LjI3NjgxNjEwNzQ1LDcxMDUyOC4xNzcyMzIxMjc2LDI4MDM5My4yOTE4MTgxMjI4LDIzMDU3NS43OTE5NDUzMDkxLDI2ODE0MC43ODkyMDk4Mjk3LDE4Nzc1OS4wNjM0MTE3NDA0NywxOTM4NTQuMjM4MDgyMzcxMjcsMTg4MTQuNzk5NjYyMTA4MTM3LDEyMzczNC41MTAzNjA5NTQ1OSwyNjcxMDYuMzg0NzMwNzI1MjYsNDE4NDM1LjE4MzA3MDI4MTQsNzU5ODI4LjUwMjk0NjU4NDMsMjU0OTYyLjEyNDYxODgzOTE1LDI3MjQwNy45NTQ0ODQxMjk3LDI1NDkzOC4zMDk5NTY5MzM2NiwyNDcyNDguNDE2NTU3MDI4NzIsMzgyNDI2LjYxMTIzNzg2MTUsMjYyNzUyLjkwNTc2NDIyMDQsMjQ1NTk3LjQ5MjU2OTEyODAyLDI2MzA3NS4xNDYxNDMxNzE5NCwyMjUzODYuMjU2NjY1Njc0ODIsMTIzNzIxLjE5MTU1OTIwMjYyCis1NyxUaHUgMjggT2N0IDEwLDE1MDY2NzQuMTg1OTY2OTQ5NCwyMzczOTYuNzM3OTc2NjQyMTIsMjI3MjU4LjI4MzI1MTgwMzc4LDcxMjg1Ni4xMTY0ODczMTk5LDI4MDE3MC41NDg5MzM0NjUyNywyMzAzOTkuNDY5MjA0MTA2NiwyNjgxNzMuMzg5NDIxNDc5MywxODc5MjUuODQ1MTAxMzU1MSwxOTM4NDEuODAzODcyMDk5MiwxODc5NS45OTQyNjY3MTA4NDQsMTIzODYxLjU3ODc2NDgyOTMsMjY2OTc3LjA2MDMwNzg0NDgsNDE4ODcwLjM5Mjg2ODc1Njk2LDc2NzUzNy42MjA5NDgzNDM5LDI1NTM5Mi44NTg2MzE5OTE4NCwyNzMzNTEuNjMzODU3MzgyNywyNTQ5MTAuNDMxOTA3NTMzNjcsMjQ3MjM3LjU4NDMxMzcwMjk0LDM4MjIyNy4xNjUyNzQwNDUyLDI2MjYwNy44MzI2MDIwMjk4NCwyNDU0MjkuMTA1NDc3ODMzMjIsMjYyOTA5LjY4NjQ2NDA0Mzc0LDIyNTM0My40NTk0OTM5MzI5OCwxMjM2ODIuMTY4NzQxNjk3NDcKKzU4LEZyaSAyOSBPY3QgMTAsMTUwNTM4NS40MzM0ODQyNzQ3LDIzNzUwMi41MzM0OTA5NTQxNywyMjgwNDAuNDM0NzMwMDg3NTIsNzE0NTg1LjA5MzU2NTI0OTUsMjc5OTM3LjM0NTMyMzExOTcsMjMwMjEzLjMyOTU2MTY0OTk0LDI2ODE0OS4xMzk0MDAwNTg3LDE4ODAyNC44NDgxOTI5NjU5LDE5Mzc5NS4wMzEyMzM1OTk1OCwxODc3Ny4yMDc2NjczMDkzODMsMTIzOTQwLjcyNTg3MTUwOTg2LDI2NjgyMS42MjQwMDc4MzYxNiw0MTkxNDEuNjcwMDI3OTE0NCw3NzM2MDYuOTQwOTAyOTA1NCwyNTU2OTEuNDMzNTc3MTgzODQsMjc0MDY1LjcxMTQyMzE1MjUsMjU0ODM5LjQyODU4NDM0MjQxLDI0NzE4MS43OTg5NjIxMTkzNiwzODE5OTMuNTA1ODI1NzA3NzUsMjYyNDQwLjg2NTU1ODcwMjE1LDI0NTI0Ni40MTg5NjAwODY2LDI2MjcyNi4wMzcxMTM1NDY3NCwyMjUyNjUuNjY1OTI1NDIsMTIzNjI3LjA2NjkwNTc3MjY4Cis1OSxTYXQgMzAgT2N0IDEwLDE1MDQwNTcuODE2NjY3NjAxNywyMzc1NDEuNzQxMzk1MDY1NjgsMjI4NjIzLjgxMjAwMjgzOTIzLDcxNTgzMi44MDI0NDk1MTIxLDI3OTY5NS43MTUwNjMxMzg5LDIzMDAxOS4yNjI1NTg4Mjk5NCwyNjgwNzguOTg0NDg5Mzk1MzQsMTg4MDY5LjE3NjI0MDQ1NzcyLDE5MzcyMC41NjI1NjgyODE2LDE4NzU4LjQzOTg0NTExNzE1NSwxMjM5ODEuMjAzMzIxNzA4OCwyNjY2NDUuMTkxNDQ0NzY4MzQsNDE5MjgwLjc2NjU4MzA0NSw3NzgzNDIuMDMxNDU2MzU4LDI1NTg4My40MzI0MzU3NjM1LDI3NDU5My4xMDUwNTA4MzAxLDI1NDczMy42NzU2NDI2NTU3NSwyNDcwODkuNzkxNjY5NjE0NDcsMzgxNzMyLjI2MzE1MDIzMTg1LDI2MjI1Ni4yMzI4NTIzMzE0LDI0NTA1Mi4yMTQxMDUzODIsMjYyNTI3LjczNTMzOTgzNzksMjI1MTU5Ljc0MjU1MzcxNzQ2LDEyMzU1OS4wMjA4NDI2MTE4Cis2MCxTdW4gMzEgT2N0IDEwLDE1MDI2OTguOTUwMDEzMjM4NSwyMzc1MjcuNDY2MjQ3Njk0MTMsMjI5MDQ3LjM5NDUyMjQzNDc0LDcxNjY5NC4yMDYwNTY4MTYyLDI3OTQ0Ny4zMDAxOTQ4ODQzLDIyOTgxOC43OTYzNDgxNjcxNSwyNjc5NzEuNzU0NDQ4MzY4LDE4ODA2OS4zOTkwNDc5MzE4NiwxOTM2MjMuNzQ4NzMwMjE0MjMsMTg3MzkuNjkwNzgxMzY2MzM1LDEyMzk5MC40Nzc3NDg1Nzg2LDI2NjQ1MS44NzE4ODUzMTIsNDE5MzEzLjI5OTU0NzU5MzEsNzgxOTk2LjUxNDEwMjkwMTksMjU1OTg5LjUyMTcxMjYzMjYsMjc0OTY4Ljk0NjM4MzMyNDksMjU0NTk5LjkxMzU2NzUzMDAyLDI0Njk2OC41ODkwNDM3NjMsMzgxNDQ4Ljc3NzYwMjA4MDIsMjYyMDU3LjM0MzYxODQ3NDk2LDI0NDg0OC43MzE0MTM0MjQyNSwyNjIzMTcuNjI5NjY3ODEwOSwyMjUwMzEuMjAxODc3MjA0OSwxMjM0ODAuNTUxMjM0MTI0NzUKKzYxLE1vbiAxIE5vdiAxMCwxNTAxMzE0Ljk4NDgwODY0MjQsMjM3NDcwLjIyNjY2MzU1NjgyLDIyOTM0Mi42NjEwMjI0MTk3NSw3MTcyNDUuNzI1NTc4MzM1MywyNzkxOTMuNDI3NDA0NDUxMSwyMjk2MTMuMTY3Nzc1NzA4NTQsMjY3ODM0LjU3MjU2MzIyNTg3LDE4ODAzNC4wMzc2NzE0Mjg1LDE5MzUwOC45MDExNTE0NDM1NywxODcyMC45NjA0NTczMDc4NTQsMTIzOTc0LjU3MTAyMDM1NSwyNjYyNDQuOTY4MjQzMzY3ODUsNDE5MjU5LjkxOTM4MDIyMzI2LDc4NDc3OC43NDE0MjI2ODQ5LDI1NjAyNi4zNzI3OTk2Mjg2MiwyNzUyMjEuODkwNzgzMzY1NDcsMjU0NDQzLjU2ODQyNTg3NjAzLDI0NjgyMy44NDcxODg2MTEyLDM4MTE0Ny4zNTMzMjgxNDc5LDI2MTg0Ni45NDgzMzcyNjk3LDI0NDYzNy43NzcyNjk0NDc1LDI2MjA5OC4wMTU2MzAwNTI2LDIyNDg4NC40NzA4OTM1OTcxLDEyMzM5My42ODU4NTU1NDgxOQorNjIsVHVlIDIgTm92IDEwLDE0OTk5MTAuODk0ODA2MTAzMywyMzczNzguNDY0MTE1MTUzNTYsMjI5NTM0Ljk2MTY1MTI0MTcsNzE3NTQ4Ljc0NzA0OTIwNjIsMjc4OTM1LjE2OTUyNjY1NjQsMjI5NDAzLjM3ODcyOTA4ODEsMjY3NjczLjE4NjY5NDk4NzQsMTg3OTY5Ljk1OTc1OTY3MzgzLDE5MzM3OS40OTUwOTYwMDMyMywxODcwMi4yNDg4NTQyMTEzOTcsMTIzOTM4LjMzODEyNTczNjA1LDI2NjAyNy4xMzcxNTM4NTA0LDQxOTEzNy4yNjUyMTU2OTc1LDc4Njg1OC42MDA1MDIwMjY3LDI1NjAwNy40MjE5MjAwMjAwNSwyNzUzNzUuMjQ5MTg2NDgwNTMsMjU0MjY5LjAxMDAzODk2OTQzLDI0NjY2MC4xMjA3NTkyNjI2NSwzODA4MzEuNDYxODA3ODEzNiwyNjE2MjcuMjY3NjY1MzE4ODgsMjQ0NDIwLjgwOTI1NDU4NTYsMjYxODcwLjc0NDU0NTM0NDEyLDIyNDcyMy4xMDY1NzIyNDkxOCwxMjMzMDAuMDU2ODYyMDA4NTQKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuYXV0b21hdGljZXhwZXJpbWVudC9yZXNvdXJjZXMvQXV0b21hdGVkRXhwZXJpbWVudEV4YW1wbGUvUmVjb3JkZWQgU2ltdWxhdGlvbnMvUmVmZXJlbmNlL1NfMC5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmF1dG9tYXRpY2V4cGVyaW1lbnQvcmVzb3VyY2VzL0F1dG9tYXRlZEV4cGVyaW1lbnRFeGFtcGxlL1JlY29yZGVkIFNpbXVsYXRpb25zL1JlZmVyZW5jZS9TXzAuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjJjMjQ0MDEKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmF1dG9tYXRpY2V4cGVyaW1lbnQvcmVzb3VyY2VzL0F1dG9tYXRlZEV4cGVyaW1lbnRFeGFtcGxlL1JlY29yZGVkIFNpbXVsYXRpb25zL1JlZmVyZW5jZS9TXzAuY3N2CkBAIC0wLDAgKzEgQEAKK2l0ZXJhdGlvbix0aW1lLApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5hdXRvbWF0aWNleHBlcmltZW50L3Jlc291cmNlcy9BdXRvbWF0ZWRFeHBlcmltZW50RXhhbXBsZS9SZWNvcmRlZCBTaW11bGF0aW9ucy9SZWZlcmVuY2UvU18xLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuYXV0b21hdGljZXhwZXJpbWVudC9yZXNvdXJjZXMvQXV0b21hdGVkRXhwZXJpbWVudEV4YW1wbGUvUmVjb3JkZWQgU2ltdWxhdGlvbnMvUmVmZXJlbmNlL1NfMS5jc3YKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMGIwMTA4NwotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuYXV0b21hdGljZXhwZXJpbWVudC9yZXNvdXJjZXMvQXV0b21hdGVkRXhwZXJpbWVudEV4YW1wbGUvUmVjb3JkZWQgU2ltdWxhdGlvbnMvUmVmZXJlbmNlL1NfMS5jc3YKQEAgLTAsMCArMSw2MyBAQAoraXRlcmF0aW9uLHRpbWUsU0UtQUIsU0UtQUMsU0UtQkQsU0UtQkgsU0UtQyxTRS1ELFNFLUYsU0UtRyxTRS1ILFNFLUksU0UtSyxTRS1LUCxTRS1MLFNFLU1PLFNFLU4sU0UtUkksU0UtUyxTRS1TSyxTRS1TVCxTRS1ULFNFLVUsU0UtWCxTRS1ZLFNFLVoKKzEsVHVlIDIgTm92IDEwLDEwOTQyNTcuMjAwMDAwMDAwMiwxNzE1NzIuMDUsMTY1ODQwLjM1LDUxODE4My45LDIwMzM1NC40NSwxNjcxNTQuNjUwMDAwMDAwMDIsMTkzNzQyLjkwMDAwMDAwMDAyLDEzNTg0NC44LDE0MDA1NS41LDM2OTE3LjQsODk1NTguOTUwMDAwMDAwMDEsMTkzMTExLjc1LDMwMjg2Mi45NSw1NzA4MDIuNywxODQ4OTEuMiwxOTg5MzkuNjUwMDAwMDAwMDIsMTg0MTg1Ljk1LDE3ODYyNi41LDI3NjU2Ni41NTAwMDAwMDAwNSwxOTAwNTYuMSwxNzc4MjkuNiwxOTAzODMuMDUsMTYyODM0Ljc1LDg5NDAzLjYKKzIsRnJpIDMgU2VwIDEwLDEwOTQ4MzYuMjkyNzc4ODQ4MiwxNzE2NjQuMzg4NzcyODc1NzcsMTY1OTI5LjYwNDAxNTU1NDQyLDUxODQ2Mi43ODI2MzU0NDE3LDIwMzQ2My41ODQ4MzY0NjQ1MiwxNjcyNDQuMzI5MTc2NzY3NjQsMTkzODQ3LjE3MDk0MzM3MzIsMTM1OTE3LjkxMDYzODUwODMzLDE0MDEzMC44NzY3OTI1OTA0OCwzNjkzNy4yNjg2NjQwMTIyNyw4OTYwNy4xNDk5NDU5Njk5NCwxOTMyMTUuNjgxMjE5Nzg3OTgsMzAzMDI1Ljk0ODUzNzAxODMsNTcxMTA5LjkwMTY3MzU2MjcsMTg0OTkwLjcwNzAzODE0ODc3LDE5OTA0Ni43MTc4MDcxNzM2NywxODQyODUuMDc3NDY0MzM4MDcsMTc4NzIyLjYzNTQxMDc3OTMzLDI3NjcxNS4zOTMyMDk0MzMxLDE5MDE1OC4zODQxNDM4MTgsMTc3OTI1LjMwMTI0MTk3Mzg1LDE5MDQ4NS41MDk5MzQ2OTE5NSwxNjI5MjIuMzg2NDEzOTY4ODcsODk0NTEuNzE2MzI4MDE4MjkKKzMsU2F0IDQgU2VwIDEwLDEwOTU0MDguOTc2Mjg3NzE4OSwxNzE3NTYuNjM1MjUyMDIzOCwxNjYwMTguNzY4ODIxNzAyMzQsNTE4NzQxLjM4NjUyNzYxNDYsMjAzNTcyLjIxNzI0NDQzODcsMTY3MzMzLjU3NjgwNzY2NzcsMTkzOTUxLjMzNzUyOTYyMzM2LDEzNTk5MC45NDgyMDA5MzI1NiwxNDAyMDYuMTc4MTA0OTI3MywzNjk1Ny4xMTc0NjkyOTE1Niw4OTY1NS4zMDE3MTUwNzMwNCwxOTMzMTkuNTA3OTM4ODM0NjMsMzAzMTg4Ljc4NDE1MzcxNDM3LDU3MTQxNi43OTYyOTkwMDE2LDE4NTA5MC4xMTQ2MTc5OTM4MiwxOTkxNTMuNjc4NjAwMDI2NTYsMTg0Mzg0LjEwNTY5NzMxOTQ0LDE3ODgxOC42NzQ1ODM5NzQ5LDI3Njg2NC4wNzUxMDAxODU2NCwxOTAyNjAuNTU0NDY2ODA5MTIsMTc4MDIwLjg4MzMzMzU0MDYsMTkwNTg3Ljg1NDc4ODMxMDY1LDE2MzAwOS45MzUxMTU0MzI3NSw4OTQ5OS43ODQ0NTE5MDg3Cis0LFN1biA1IFNlcCAxMCwxMDk1OTcxLjc4MTU3MDc3OTksMTcxODQ4Ljc4OTUyMzE2OTcsMTY2MTA3Ljg0NDUwNzU3NzgsNTE5MDE5LjcxMTk1NDg0NDEsMjAzNjgwLjAyNjUwMjI3NzcsMTY3NDIyLjEyNzgzMjcwMDgyLDE5NDA1NS4zOTk0Mzk2ODUyOCwxMzYwNjMuOTEyNzQ5MTI2NTIsMTQwMjgxLjQwMzU4MDk3OTksMzY5NzYuOTQ2NDM1Njg2NjQ1LDg5NzAzLjQwNTM0OTcyNjE2LDE5MzQyMy4yMjgzNTYyNTkyLDMwMzM1MS40NTY5OTQ0NDE4Niw1NzE3MjMuMzg0MTgzMjA3OCwxODUxODkuNDIyODMzMjQ3NTgsMTk5MjYwLjUzMjQ4NTIzMjQzLDE4NDQ4My4wMzQzMjAwNDQyNywxNzg5MTQuNjE3MTUzOTYyMywyNzcwMTIuNTc3MDIwNjg3NiwxOTAzNjIuNTkzODcxMDUzMjIsMTc4MTE2LjMxMTcyMjYzMjQ3LDE5MDY5MC4wNjUwNTE1ODQ4MiwxNjMwOTcuMzk1ODEwMzkwMTgsODk1NDcuODA0MDYzNjM2OTQKKzUsTW9uIDYgU2VwIDEwLDEwOTY1MTkuMTYxNTcxMjAzLDE3MTk0MC44NTE2NTM3OTM3NywxNjYxOTYuODMxMTYyMDkwMTUsNTE5Mjk3Ljc1OTE5Mzk5MzksMjAzNzg2LjQ2NDAwMDIwODg5LDE2NzUwOS41MzY0OTUxMTA2LDE5NDE1OS4zNTU2NjkxMTk3NCwxMzYxMzYuODA0MzE1NTMxOTUsMTQwMzU2LjU1MjE2Nzc2MTU1LDM2OTk2Ljc1NTU4MzAyNjUzNCw4OTc1MS40NjA4NzcxMTMxOCwxOTM1MjYuODM3NTg0NDA2NywzMDM1MTMuOTY3MTU0MzE5Niw1NzIwMjkuNjY1NjMyNzQ1NSwxODUyODguNjMxNzYyMzcwMiwxOTkzNjcuMjc5NTY4MTcxMjIsMTg0NTgxLjg2MjE2MTE1NjA1LDE3OTAxMC40NjIwMDMyNDY4NSwyNzcxNjAuODYwOTE1NzEyNTUsMTkwNDY0LjQ2NzY4MDU1NTMzLDE3ODIxMS41MTY3OTI2OTAwMywxOTA3OTIuMTAwMzM2MTUyMSwxNjMxODQuNzY3NTU0NjE2MTIsODk1OTUuNzc0MjQ4ODUwNDcKKzYsVHVlIDcgU2VwIDEwLDEwOTcwNDIuMjQxOTg5NzQyNSwxNzIwMzIuODIxNjYwNDU5MzMsMTY2Mjg1LjcyODg3MzU2ODUsNTE5NTc1LjUyODUxNzQ5NDE1LDIwMzg5MC42MDA0NTY4Nzg4NiwxNjc1OTUuMDU4OTI0NzQzLDE5NDI2My4yMDM3MTQwMTU0LDEzNjIwOS42MjI4NTM5NDY0NCwxNDA0MzEuNjIxMjg5NzQ4MjMsMzcwMTYuNTQ0OTMxMTIwMzUsODk3OTkuNDY4MjgzNDIyODYsMTkzNjMwLjMyMzk4NTA4MTY2LDMwMzY3Ni4zMTQ1OTU2ODk2LDU3MjMzNS42NDA5NTM3Nzk1LDE4NTM4Ny43NDE0NDI2OTQ2LDE5OTQ3My45MTk5NTAwNDkzLDE4NDY4MC41ODYyOTE2ODAzLDE3OTEwNi4yMDYzNjM4Njg1OCwyNzczMDguODUyMzkyOTc5OTYsMTkwNTY2LjEwODQ0NDAyMjA0LDE3ODMwNi4zNjM5MTc1ODcxMiwxOTA4OTMuODgwNjc5NDg1OCwxNjMyNzIuMDQ3OTM5NjUyMDUsODk2NDMuNjkyNzMwMDU2OTQKKzcsV2VkIDggU2VwIDEwLDEwOTc1MjYuODIwMzEwNzQyMSwxNzIxMjQuNjk5NDMxMDUzNjIsMTY2Mzc0LjUzNzcyODc0MzI4LDUxOTg1My4wMjAxODUwODU3NywyMDM5OTAuODc1ODMzNTQ0MzMsMTY3Njc3LjQ2Mjk3ODAwOTAyLDE5NDM2Ni45Mzc5NTA0NjQ4NywxMzYyODIuMzY4MTI3MjE2MDMsMTQwNTA2LjYwNTIwODAwMDY2LDM3MDM2LjMxNDQ5OTc1NzQzNSw4OTg0Ny40Mjc0NTQ2OTE2MSwxOTM3MzMuNjYxODg0NjQzNzUsMzAzODM4LjQ5ODk1NTg0ODQsNTcyNjQxLjMxMDQ1MTgzMDYsMTg1NDg2Ljc1MTgxMDc1ODgsMTk5NTgwLjQ1MzcyMDA5ODYyLDE4NDc3OS4yMDAwNzk1NDk4NiwxNzkyMDEuODQ0MDIyODAwNywyNzc0NTYuNDEwNDgwMTUxLDE5MDY2Ny4zODg5MTgxMTQ0NSwxNzg0MDAuNjAwNTUwOTkxMTYsMTkwOTk1LjI1Mjg1NzQ2ODUsMTYzMzU5LjIzMTQyOTcwOTk3LDg5NjkxLjU1NDMyNTExODM3Cis4LFRodSA5IFNlcCAxMCwxMDk3OTUwLjE2MDgyMTM0MTIsMTcyMjE2LjQ4NDU0ODcxMzMsMTY2NDYzLjI1NzgxMDA2NzE1LDUyMDEzMC4yMzQ0MjI3MjA5LDIwNDA4NC42ODY5MzQ2NjAzNiwxNjc3NTQuNzE2ODM0NTM3MjgsMTk0NDcwLjU0NjQ3MjUzNTMyLDEzNjM1NS4wMzk0NjI0MTA5LDE0MDU4MS40OTE4MjM4NjQyLDM3MDU2LjA2NDMwODcwNzM4NCw4OTg5NS4zMzgwNDcwODk2NywxOTM4MzYuNzk3Mzg4NDg4OSwzMDQwMDAuNTE5MTI0NjE0OTUsNTcyOTQ2LjY3NDQzMTA1MjUsMTg1NTg1LjY2MjU3MDkwODc4LDE5OTY4Ni44ODA5MzYxMDMsMTg0ODc3LjY4OTM1MTkyMDc0LDE3OTI5Ny4zNjE4MTEzMzg5LDI3NzYwMy4yNzM4NTc4NDgxLDE5MDc2OC4wNzQxODg5Mzc4LDE3ODQ5My43NjMwNTQ1MDU0OSwxOTEwOTUuOTMwMDEwOTQxMzIsMTYzNDQ2LjMwNjA0MjMzMzQyLDg5NzM5LjM0Nzg3OTEyMTI0Cis5LEZyaSAxMCBTZXAgMTAsMTA5ODI3NS44NjY0OTgxMzg4LDE3MjMwOC4xNzU5MTAzMDgyNiwxNjY1NTEuODg5MTg5MTI0NzUsNTIwNDA3LjE3MTM3MjAyNDM0LDIwNDE2Ny43MTY4MTA3Nzg3NywxNjc4MjMuNDg3MTg1ODk5OTUsMTk0NTc0LjAwNTA4OTQ4MjM4LDEzNjQyNy42MzUyMzkzODE0MywxNDA2NTYuMjU2NjE5ODY1OSwzNzA3NS43OTQzNzc3MTk5OSw4OTk0My4xOTkyMTQ0MDYzMSwxOTM5MzkuNjIxNDkxNzM1NzQsMzA0MTYyLjM3MjM1NDk3NjQsNTczMjUxLjczMzE5MjI3MjYsMTg1Njg0LjQ3MjkxODE2NjY2LDE5OTc5My4yMDE1Nzg4MTU0NywxODQ5NzYuMDI1MDI4OTgzMjgsMTc5MzkyLjczMjkxOTY2ODIsMjc3NzQ4Ljk2Njc2NTUyMTgsMTkwODY3LjczODI3MDczODk1LDE3ODU4NS4wMTU0MDQzODQ4NywxOTExOTUuMzg1MzExMDIzNTcsMTYzNTMzLjI0NjkwMjk2NDYsODk3ODcuMDUwMzMwMzY5MjIKKzEwLFNhdCAxMSBTZXAgMTAsMTA5ODQ0NS42ODM1NDk1MTMsMTcyMzk5Ljc3MDkxNzI0OTEsMTY2NjQwLjQzMTkxMTAzNzgzLDUyMDY4My44MzA5NzM2Njc5LDIwNDIzMi44Mjg1NjQ4OTQ2MiwxNjc4NzguMzE0MDM5MTM3NzcsMTk0Njc3LjI2NTk1OTkyMDksMTM2NTAwLjE1MTgzOTgxNzMsMTQwNzMwLjg1MTIxMTE3MzU1LDM3MDk1LjUwNDcyNjUyNTM0LDg5OTkxLjAwOTA0NTQyODEsMTk0MDQxLjkxOTM1NDk3MjIsMzA0MzI0LjA1MjQyNDA0OTMsNTczNTU2LjQ4NzAyNzk4ODIsMTg1NzgzLjE4MDk2MzMyMTgsMTk5ODk5LjQxNTQ0ODg2MDY0LDE4NTA3NC4xNDkwNTcwMzQwNSwxNzk0ODcuOTA0MjIwOTcxNiwyNzc4OTIuNjMzODQ3Njg1NywxOTA5NjUuNjE3OTA5NDcxMywxNzg2NzIuODY4NDUyNjg5MywxOTEyOTIuNjY0MDM1NzI2MjgsMTYzNjIwLjAwMzgyMzI5NjI1LDg5ODM0LjYxNTI5ODQwMjA2CisxMSxTdW4gMTIgU2VwIDEwLDEwOTgzNjYuNDQ5OTQ3NDM4NCwxNzI0OTEuMjYzODIxOTk4OSwxNjY3MjguODg1OTU5Mjc2NzMsNTIwOTYwLjIxMjcxMDQzNTI3LDIwNDI2OC4yOTQzNTI3MTA4NiwxNjc5MTAuMzAyOTg3MDkyNTIsMTk0NzgwLjIzNjc3NTU2MzM2LDEzNjU3Mi41ODE1NzE2ODc1NywxNDA4MDUuMTgyNDAyODM1MywzNzExNS4xOTUzNzQ4MzM3Nyw5MDAzOC43NjM0NDY4NTc1LDE5NDE0My4yNzc1MTAyMTMyLDMwNDQ4NS41NDU5NzM3MjkxNyw1NzM4NjAuOTM2MjEwMzA2LDE4NTg4MS43ODI1ODczOTA0OCwyMDAwMDUuNTIxOTQ0NTk1MTUsMTg1MTcxLjk0ODM2MzU0NTQ3LDE3OTU4Mi43NzI5Njc4MTk0NywyNzgwMzIuNzU2NTUyOTY3NjUsMTkxMDYwLjM2MzA1MzIwODYsMTc4NzU0LjcwMzgwMjIxNTYsMTkxMzg2LjA1OTYwODg3ODgsMTYzNzA2LjQ3ODA0OTM5NTMsODk4ODEuOTUxODM3NDc0NAorMTIsTW9uIDEzIFNlcCAxMCwxMDk3ODg5LjQwNTkxMzczMzIsMTcyNTgyLjY0MjM5OTQzMzYsMTY2ODE3LjI1MTE3ODM0MzYsNTIxMjM2LjMxNTA1NTUwNzMsMjA0MjU0LjkxODk3NTMxNzA2LDE2NzkwNS4wMDc3MTk1ODI2NSwxOTQ4ODIuNzQyNjM2OTU1MTcsMTM2NjQ0LjkwODYxNTUzMzkzLDE0MDg3OS4wNzM5MDEyOTM0OCwzNzEzNC44NjYzNDIzMzU5Myw5MDA4Ni40NTM5NTE2MzgzNSwxOTQyNDIuOTE0NDk5MzYyOSwzMDQ2NDYuODI1MzE4MTIxMyw1NzQxNjUuMDgwOTYyOTU3MiwxODU5ODAuMjY5MTg0ODE0MDcsMjAwMTExLjUxOTU5NDYyNDM4LDE4NTI2OS4yMDY3Njg5MTg1MiwxNzk2NzcuMTQ0MDM4NzY2MDQsMjc4MTY2LjY2NDYzMTI3NywxOTExNDkuNjA4MjIyMjcyNjgsMTc4ODI1Ljk2MTg2Mjg0MTUsMTkxNDcyLjU1MzAyMjQ4Mjk5LDE2Mzc5Mi40Nzg5NDMyNTkwMiw4OTkyOC44ODUwMDEwNDkxCisxMyxUdWUgMTQgU2VwIDEwLDEwOTY3NzcuNjYyNjkzNDg4NiwxNzI2NzMuODgxMzE4MjMxOCwxNjY5MDUuNTI3MTA2OTUwODUsNTIxNTEyLjEzNDMwNzU3ODMsMjA0MTYxLjM4ODM4OTU0NzY1LDE2NzgzOS4wMTI3NDQzMTk4LDE5NDk4NC40NTY0NjkxMTE3MywxMzY3MTcuMTAxMTY4NTUyNzMsMTQwOTUyLjE5NjU3ODQ5NTM1LDM3MTU0LjUxNzY0ODcwMjgsOTAxMzQuMDYzNDU0Njg4NjksMTk0MzM5LjM3MzEyNzQ1ODE1LDMwNDgwNy44MzQ0Mjg5NzE2LDU3NDQ2OC45MjEzOTc5NzI1LDE4NjA3OC42MjMyNTExNTE0NywyMDAyMTcuNDA1MDg4NTA2OSwxODUzNjUuNTE2NTU2MDg0NzQsMTc5NzcwLjY1MTc5MTI4MjIsMjc4Mjg5LjY5NTg2MDI2NywxOTEyMjkuMjM2NDA3MDUxMSwxNzg4NzguNzU5MzM0OTc3MiwxOTE1NDYuODQ0NzY5NDk1MiwxNjM4NzcuNjQzNzI2ODE3OTQsODk5NzUuMDgyOTg1ODk5ODgKKzE0LFdlZCAxNSBTZXAgMTAsMTA5NDY1NS44MDAwNzE3NDksMTcyNzY0LjkyOTI2Njg2NDUyLDE2Njk5My43MTI2Mjg2NDEzNyw1MjE3ODcuNjYyMjAyOTEsMjAzOTM2Ljk2Mjc3MDg0ODg2LDE2NzY3NC41OTcxMjc5OTgyLDE5NTA4NC43NzQ5OTk2NTAzLDEzNjc4OS4wOTY2MzM0MDU3MiwxNDEwMjMuOTQ0MzYzOTI5MTMsMzcxNzQuMTQ5MzEzNTg1NjcsOTAxODEuNTU4MTM2NzI3NDYsMTk0NDI5Ljk3MzczMzY1MTksMzA0OTY4LjQ2MjM0MDc2NjgsNTc0NzcyLjQ1NzM3NzMxODgsMTg2MTc2LjgwOTk5NDI2ODg0LDIwMDMyMy4xNzEzMjkzNDM2MywxODU0NjAuMTE5NDc4NDk3NjUsMTc5ODYyLjYyMDQwMDY0MDI3LDI3ODM5My43NzYyMzgzNzkyNCwxOTEyOTIuMTQyMTc3NzE1OCwxNzg4OTkuNTg2NzYwNjI1MzMsMTkxNTk5LjcxNjczMTk2MDEzLDE2Mzk2MS4yOTE4NTc3MzM4Niw5MDAxOS45MjU2NTc1NjY4NworMTUsVGh1IDE2IFNlcCAxMCwxMDkwOTMzLjYxMjg1MjcwMDUsMTcyODU1LjY4NDMxMTk5NzMsMTY3MDgxLjgwNTI1NTMzNjk1LDUyMjA2Mi44ODExMTg4MDU3LDIwMzUwMC4xNTk4NzQ3Mzc4MiwxNjczNTEuNDk3MDY5Mzc3NTcsMTk1MTgyLjU5OTQ3Njc4OTEsMTM2ODYwLjc3NDA4MTc5MjksMTQxMDkzLjIxNTEyMTcwNzUsMzcxOTMuNzYxMzU2NjE2MjQsOTAyMjguODcyMzgyNDUyMSwxOTQ1MDkuODUxMzQzNTA1MzgsMzA1MTI4LjQ5MzM4MzQ5MjcsNTc1MDc1LjY4ODIxODYzODksMTg2Mjc0Ljc2MTYxNDYzNTksMjAwNDI4LjgwMzYwMTI1Mjg4LDE4NTU1MS42MjMzNzUyNjQxNywxNzk5NTEuODE2MzE4Njc0MSwyNzg0NjUuMDMzNjI3ODY0NiwxOTEzMjYuMTY0ODg2NzgxNTcsMTc4ODY1LjUwMjgxOTI3MzUsMTkxNjE1LjI3OTIzMjU3NDM0LDE2NDA0Mi4xNjMxNDczMTE0LDkwMDYyLjI2OTUzMDQ0OTU2CisxNixGcmkgMTcgU2VwIDEwLDEwODQ2OTUuMzMyOTIxMjQ1NCwxNzI5NDUuOTQ2Njc3OTkxNDgsMTY3MTY5Ljc5OTY2MzUwODE3LDUyMjMzNy43NTQ0NjcxNzcxNSwyMDI3MjEuMzg1NTMzNTM3MSwxNjY3NzQuMTg4NjExOTcyNTUsMTk1Mjc1Ljk0Mzg2NzQzNjE0LDEzNjkzMS45MDI2Njc5MjE0NCwxNDExNTguMDIwMjA5NDgwMDIsMzcyMTMuMzUzNzk3NDA2NTI2LDkwMjc1Ljg4MDQzOTY3Mzk0LDE5NDU3MC4yNTAzMTg3Nzk4NywzMDUyODcuNTEzNTYyMjIzMSw1NzUzNzguNjEyMDc0NzE5MywxODYzNzIuMzQ3NjAwNDg5ODMsMjAwNTM0LjI3MjAxMTcwNjI5LDE4NTYzNy40OTM0MTcyNzY1NCwxODAwMzYuMDA2MTUxMjQ5LDI3ODQ3OS43NzU3NTE1NTkzLDE5MTMxMC42MTA0OTU1NjIyMywxNzg3MzcuODMxMjM5ODQ5NjIsMTkxNTY2LjMzMjQyNzYxNDcsMTY0MTE3Ljk0NTA2ODAwNDMsOTAxMDAuMDI0NTg3NjQwMzUKKzE3LFNhdCAxOCBTZXAgMTAsMTA3NDU1MC40NDc4Nzk4NDc4LDE3MzAzNS4zMjk5OTAxMzE1NSwxNjcyNTcuNjg0NzY2Nzk1NSw1MjI2MTIuMjA3ODM3OTY1NzUsMjAxMzk4LjI4MjIzNTcyOTQ4LDE2NTc5My44MzUzODc2OTEzMywxOTUzNjEuMjUxNjIyNjczMDQsMTM3MDAyLjA0NzI0ODQ1NzczLDE0MTIxNC44MDQ3NTY3MTY0OCwzNzIzMi45MjY2NTU1NDg5OCw5MDMyMi4zNDQzNDk5MzI0NSwxOTQ1OTUuNTcxNDUxMjUxOCwzMDU0NDQuNzM4MjI2NDQwMSw1NzU2ODEuMjI0NjUzODkzLDE4NjQ2OS4zMTk5NDk0ODAxNSwyMDA2MzkuNTE2OTQzNTUwNSwxODU3MTMuMTU3NDg5NzE5MywxODAxMTEuMTgzMjQ5MTY0ODcsMjc4Mzk3Ljg0ODgzMjY4MjM2LDE5MTIxMC41NTgwNzg0ODQ1MiwxNzg0NTIuMDYxOTYxOTgyMjUsMTkxNDA2Ljc2MDIzNjYyMTc1LDE2NDE4NC40MzUxOTM5ODI1Myw5MDEyOS40MDk3NzMwNjk2MQorMTgsU3VuIDE5IFNlcCAxMCwxMDU4NDYxLjQzMzE5NjU4MywxNzMxMjMuMDk2MTIyMTQyNCwxNjczNDUuNDM3OTM4MDIzNjIsNTIyODg2LjA5MjQ5MTI2NzMsMTk5MjIzLjc3MzkzMTY5NzIxLDE2NDE4NC41MzgyNjA2NTY1OCwxOTU0MzIuMjEwNzI3ODkzMywxMzcwNzAuMzk3MTE5NzE3NjQsMTQxMjU3LjI3MTgwNTMyNDM2LDM3MjUyLjQ3OTk1MDYxNjQ1LDkwMzY3LjgxOTExMjYxNjI2LDE5NDU1OC4zMTkzMzU0MTY0LDMwNTU5OC42OTc2Njc5MDg0NSw1NzU5ODMuNTE2NjI4MDAyNSwxODY1NjUuMjEyOTQyNzU0MDMsMjAwNzQ0LjQyMTM5MDcyODUzLDE4NTc3MC40NDY0MDIxODEzNSwxODAxNzAuMjI1OTgyNTUwNzQsMjc4MTUxLjg2NzczNTY0MDQ0LDE5MDk2Ny43MTc1ODkxNzI5LDE3NzkwMi4xNzU5OTEzOTExMiwxOTEwNTkuMzQ3NzYxMTE0NDIsMTY0MjM0LjA3MTM1MTk0OTM2LDkwMTQzLjY1NTEzMzQxMjczCisxOSxNb24gMjAgU2VwIDEwLDEwMzM2MTQuMTM3NjI5OTAxLDE3MzIwNy44NDk5MDkxMjA3NiwxNjc0MzMuMDEzNzAzODc2Niw1MjMxNTkuMTE1MTk5MjIxOCwxOTU3NTIuNjg5NzE1MDE3NjUsMTYxNjE3LjQ3NzQ1NTk4NzMzLDE5NTQ3Ny43MTMzMjUwMzQyMiwxMzcxMzUuNDU2ODI0MDk3NzUsMTQxMjc0LjM2MzkzMjM5NTMyLDM3MjcyLjAxMzcwMjE2MjI1LDkwNDExLjQ4MDg1Nzg2ODY0LDE5NDQxMC41NzYzNjQ2MiwzMDU3NDYuNjY2NjIxMTQ4MzUsNTc2Mjg1LjQ2ODQzNjExMzYsMTg2NjU5LjE2MDY3Mjg2MTg4LDIwMDg0OC43NTg3MTc2MTc4NiwxODU3OTQuODk0Mzg2NzM4OCwxODAyMDAuNTg2NjIxNjI4NjcsMjc3NjMwLjEyNTY0MDI1NDYsMTkwNDg2LjEzMjkyODMwNTE2LDE3NjkxNy40ODAwMTg5NDcyMiwxOTAzOTYuOTIxNjQxODA4LDE2NDI1My4zNzQ4MTY4MTU2Niw5MDEzMC43NjI3MTkwNDU3NAorMjAsVHVlIDIxIFNlcCAxMCw5OTY0OTYuMzk1MzMxMDEwNiwxNzMyODYuOTgxMDM2NTIyNzIsMTY3NTIwLjMyMTg3NjQzODI4LDUyMzQzMC43MDQ5MjAxNzMyLDE5MDM4Ny4wNjIzNDIwODM1NSwxNTc2NDYuMDkzNTA1ODU3MTYsMTk1NDc4LjM5NDkxODg1MDI3LDEzNzE5NC40OTQwNDcwMzkyNSwxNDEyNDYuODU0MDk4NzM0OCwzNzI5MS41Mjc5Mjk3MjAxMSw5MDQ1MS44MTg4OTM1NTE1NCwxOTQwNzAuMDEyMzgzMTY3MTQsMzA1ODgzLjY0MDIzOTU4Mzc0LDU3NjU4Ny4wNDAwMDUyOTk3LDE4Njc0OS41NjgzMTE1OTUyNCwyMDA5NTIuMDk1MTI3MjA5NjQsMTg1NzYxLjE0Mjk0MDU1NDQyLDE4MDE4MC4zNzQ0NDM1NTY0NCwyNzY2NTAuNjM3MjQ1NzM4NCwxODk2MTEuMDEyMDM5MjUxNzQsMTc1MjMxLjY5NDA2MjE2Nzk4LDE4OTIxNS4wNjQ5NTIyOTc1NywxNjQyMTguNTc4OTIzODYyNCw5MDA2OS43MjI4MDM1NTcyMgorMjEsV2VkIDIyIFNlcCAxMCw5NDM0NzcuNDQ0MDY3NzE5MywxNzMzNTUuNjU0MzYzNjQwMzUsMTY3NjA3LjE4NTY1NjkxMjU0LDUyMzY5OS43NjE3MjA2MDg1LDE4MjQyMy43NTQzMjg4MjAzNiwxNTE3MzEuODY1ODQ1Mjg3ODMsMTk1NDAwLjg2ODM4ODI0MjgsMTM3MjQyLjU2MzM5MjE5OTA4LDE0MTE0MS43MDA4ODQxNzY0LDM3MzExLjAyMjY1MjgwNDMsOTA0ODYuMDg5MTEyNDI0MzIsMTkzMzk3Ljg1NTgxNzAwMzksMzA2MDAwLjUxMzk0MjYxMiw1NzY4ODguMTUwNjM2NDk5LDE4NjgzMy41MjUxNDA2NzgxMywyMDEwNTMuNjA5MjE4MzUzMzIsMTg1NjI1LjI3MTMyMzA0MTU4LDE4MDA3MS44NDY4OTQ5MDE4NiwyNzQ5MjQuMzYxODM5MDkyMDUsMTg4MTAwLjA5NDc5MDQ5NDIsMTcyNDQ5LjU1Mzc3MDIzNzY2LDE4NzE5Ny4xNDk3Mzk4OTk2LDE2NDA4OC4zMTgxODk3MjMxNiw4OTkyNC4yOTQ4NTA5NjA0MgorMjIsVGh1IDIzIFNlcCAxMCw4NzIxNzYuOTkwMzQ3NjkwNSwxNzM0MDUuMDA2Mzg3MzAwODIsMTY3NjkzLjI2MjEzNDI0NjczLDUyMzk2NC4xODgyMDIzNjE3NSwxNzEyMjcuNzYwOTk3MDAzNDQsMTQzMzU2LjI3MTA5MjIzODYsMTk1MTg4LjM2OTMxNzIwODksMTM3MjcwLjgwMTI2MzgyMzM4LDE0MDkwMi45ODEwMDExMTM0NSwzNzMzMC40OTc4OTA5MDk1MSw5MDUwOS4zNTUzNjk4MzIxOSwxOTIxNjYuNTc5Njc4Mzk3MDcsMzA2MDgwLjg4Njk4NTcxMDIsNTc3MTg4LjY0MDA0NDgyODQsMTg2OTA1Ljc2NzU3NzQxOTUyLDIwMTE1MS43NjEyNTY1NzA3LDE4NTMxMi4zODM4MDk4NjIyLDE3OTgxMC45MDkxOTc3OTcyNywyNzIwMDkuMjk3OTU5OTExOSwxODU1OTEuMzI1OTQ5MTQzNjUsMTY4MDI5LjYzMjExOTA5MzE4LDE4Mzg4MC4yOTAyOTI5NzczNiwxNjM3OTEuODAxMzE2NDMxMTQsODk2MzMuMjI4OTQ0ODIwODIKKzIzLEZyaSAyNCBTZXAgMTAsNzgzNDQyLjA5NDUwNzEzMDMsMTczNDE4Ljk0ODcwNDcxODEyLDE2Nzc3Ny44OTE2MDUxMzM4Niw1MjQyMjAuMDE1MTU4OTg3OCwxNTY1NTguNDAxMjE4ODQ2NjQsMTMyMjQ2LjMzMDUyNjAyNTk0LDE5NDc0NS45ODYzMzcyMTM0NiwxMzcyNjMuNDU1ODU1NjEzMDIsMTQwNDM3LjgyNzI4ODY2MTgyLDM3MzQ5Ljk1MzY2MzUxMDk4LDkwNTEyLjgxMzYyNDU5MjQsMTkwMDE3LjgyMzYzODQxMTEyLDMwNjA5NS40NzI0MDI2MjY3Niw1Nzc0ODguMTkyOTI0NzMxLDE4Njk1Ni44NDU2NDUwODY3OCwyMDEyNDMuNjg1MTI1NDQyNzIsMTg0Njk3LjI0MDExNTQ4NDE2LDE3OTI5MC43NDE2MzE4MTg5NiwyNjcyNjYuNTk5NjEyMjk4OTUsMTgxNTgwLjE0OTYyNjE0ODQsMTYxMzIzLjQ4Mzg5ODg0NSwxNzg2NDYuODg1NjM1MjY5OCwxNjMyMTAuNDkzMDczNDIxODIsODkwOTUuODA1MTQ2MDM4MDQKKzI0LFNhdCAyNSBTZXAgMTAsNjgyNzM4LjkxMTI1NTkxNzIsMTczMzY4Ljc5NDc3NzA0ODg3LDE2Nzg1OS44MjM0ODIzMzI5OCw1MjQ0NTkuODM3MjI1MTgwOSwxMzg5NDEuMjMyODUwMzUyMzYsMTE4NjYxLjY4Mzc3NTA4Njc2LDE5MzkxOS45MDcyMDk0NzE0LDEzNzE5My4wNzU5NTE4MTE3LDEzOTU5Ny4yNTU4MDc3MTA1OCwzNzM2OS4zODk5OTAwNjQ1MSw5MDQ4MS4wNTI4MTQxNjQ5LDE4NjQyNC44NTMwNzIyMjYwMiwzMDU5OTIuOTI3MTQ4NzI5NSw1Nzc3ODYuMTk4NzY4ODE4OSwxODY5NzAuMDk5OTUxMzYyOCwyMDEzMjQuMTM0MDUyNDkyMywxODM1NzcuNTY5ODUxMDg2MjcsMTc4MzM5LjEyNzI2MDc0MTcyLDI1OTg1My41OTE0ODMwNzM3NSwxNzU0NDIuNTEyNjk1NTkzNTYsMTUxNzM1LjA3OTQzMzc5NjY0LDE3MDc5NS40MTQ1ODg5OTc5OCwxNjIxNTIuODY1OTY0MjQ5OTQsODgxNTQuMTcyMzA0Mzg0NDIKKzI1LFN1biAyNiBTZXAgMTAsNTc5MjUzLjAwNjUxNTEwMTEsMTczMjAzLjkzMTU3NjE4MDc0LDE2NzkzNi42OTM2Nzc5ODUzNCw1MjQ2NjkuODY3OTUzMDQ1NSwxMTk3NTAuMDQwMDgzNzY3MzEsMTAzNTEwLjI5ODg0NTAyOTAzLDE5MjQ2Ny43MzEwMDA0ODYyNCwxMzcwMTIuMTM2NzQ1MTY0MzcsMTM4MTUwLjUzNTU4MjkyMTEsMzczODguODA2ODkwMDA2Mzk1LDkwMzg3LjI3OTgyNzM5MTE5LDE4MDY4NS4yMjQ0NjYzNDMyLDMwNTY4My45MTg2NDE1ODAyNyw1NzgwODEuNDc3NzQyODc5NSwxODY5MTYuMjM4NDQ3NzY5NzIsMjAxMzgzLjUwMDI1NjA1MTY2LDE4MTYzOC40NzY5NjE2NzcxNywxNzY2ODcuNTY1MjQyMDkzMDYsMjQ4ODA1LjkyOTU0NDc2MDY3LDE2NjU0MC45MzE1NDYwNDAzMiwxMzkwMTAuOTg0NjU5MzEzMDgsMTU5NzM5LjM2NDc3MTUwMTgsMTYwMzIyLjAyMzI5NDM0MTA1LDg2NTc0LjgwOTY1MzczNTE0CisyNixNb24gMjcgU2VwIDEwLDQ4MjU4Ni45MTgxMjc2Nzc0LDE3MjgzNy42Nzc2ODk4NzI1NCwxNjgwMDQuMTIxMjMwNzIxNTYsNTI0ODI0LjkzMzE5Mjc4NTUsMTAwODE5LjM5NDgwMTAxMzkxLDg4MTQ3LjY2Mjc2NDY1MjczLDE5MDAzMC43NzMxMjg4Mjc5LDEzNjY0MS4xNzk1Mzk0NTU2LDEzNTc2NS43NzA0MTMxMjU4NywzNzQwOC4yMDQzODI3NTM1Niw5MDE4Ni40MTU5ODQwNTczNiwxNzIwMjMuNzQ1MzM1ODMxNTcsMzA1MDE3Ljg5NjUyNTc5MTYsNTc4MzcxLjc5MzA5NDE0OTgsMTg2NzQ1LjMxNjUzMDc5NzQ5LDIwMTQwNC42MjU0NzQwNTM1MiwxNzg0MjQuNjg0MzMyOTcxOTYsMTczOTQ0LjcxODMzNjIzMzUsMjMzMjk4Ljc2NzE3Mjc0NDgsMTU0NDcyLjcyODQ2MzExOTksMTIzNTc5LjY2MzQ3MTk3MTM2LDE0NTM1Ni4zNTc2MDM4ODI5MywxNTcyOTAuMjkwNTQ0NDgwOCw4NDA0OC45ODM4NDExNTY2CisyNyxUdWUgMjggU2VwIDEwLDM5OTM0Mi40MjkyNzA1Mzg0NCwxNzIxMjQuOTE2NjM4OTAzOTYsMTY4MDU0LjAyODIwOTE3ODI3LDUyNDg3OS4yNjUyMjgyNzM4LDgzNzQxLjk3OTUxMTAyMzY2LDczODc4LjQ4MjE3NDkxOTI2LDE4NjExMi41NTIxNjI1MTQ4MiwxMzU5NDkuOTg2NDE3NTE2MywxMzIwMDYuMjk1Nzc5OTgxNTMsMzc0MjcuNTgyNDg3NzAzNDgsODk4MDQuMDU4NzI1MTU4ODcsMTU5ODUwLjU1NzQzNDMxNTgsMzAzNzQ2LjEwOTM2MjA4NDk0LDU3ODY1Mi45MTI1OTQ3NjA4LDE4NjM3My4wNzM1MTc1NTA0NSwyMDEzNTYuOTYxODA2NjU1MywxNzMzMzUuNjEwNzk0NjU0NzksMTY5NTgzLjQ0NjE1NDI4NzcsMjEzMDgzLjY3Nzg4MzEwMSwxMzkzODAuOTM2MDUzNDI4ODYsMTA2NjM3LjM2NjkzNDkwMDY3LDEyODMwMy41MTI3MTkxMTg1NSwxNTI0OTguNjcyODgzMzY2MTIsODAyMjkuNTYwMTQ2Mjc1NQorMjgsV2VkIDI5IFNlcCAxMCwzMzE5MzAuMTI2NDk5MDEyMywxNzA4MzIuNjMwNTY2MzQwNTIsMTY4MDcxLjc2NjM1NzI1NDQ3LDUyNDc1MC45OTI3NTIwNDU5LDY5NDA3LjMyMTcyODY1ODczLDYxNTU3LjMxNjM5NjQ3NzM3LDE4MDEwMy42NTA3NTY3NzE2OCwxMzQ3MzQuOTk0ODA4ODA0MDQsMTI2Mzg0LjcxMzczODM1Mzc5LDM3NDQ2Ljk0MTIyNDIzNDI5LDg5MTIyLjY1MzQ5NjcxOTU2LDE0NDE3Ny4zODY4NTQ0MDA1NCwzMDE0NzQuODY3NjkzODI5NSw1Nzg5MTYuOTI3MDI3NDYyMywxODU2NjIuMDMzMDMxOTQzMjMsMjAxMTg3LjI3NTU0MjUyNzc2LDE2NTcwMS4xMzE0NjE2NDA4NSwxNjI5ODYuMzIwMjc2NzE4MzIsMTg4OTQ4LjIyNjg3NTMwODUsMTIyMTY1LjAyMDEzNzMxNTIxLDg5ODExLjg2MDUxODU0MzkyLDExMDAyNC4wNzY2NjQ0NDI1NywxNDUzMzEuODc0NTAwNTg1MjgsNzQ4NDIuMzUxOTEyODU2NgorMjksVGh1IDMwIFNlcCAxMCwyNzk1NDUuMTkxMjQ4NDIzOSwxNjg2MDYuMTU0ODMyODE4NDYsMTY4MDMxLjIwMTEyNzMwMDc0LDUyNDI5Ni4wMTIxODk5NDMsNTc5ODMuNDEwOTM1NDg0ODksNTE0ODUuMTEzOTM5NzQ1MjMsMTcxMzg3LjY4MTU3Mzc2MjUsMTMyNjk2Ljc3NjI2NTA4NzY4LDExODUwMi44MTQyNDYzMTIzLDM3NDY2LjI4MDYxMTcwNDcsODc5NjYuNDQ3NjI3MjAyMjcsMTI1OTM5LjgwOTYyODcyODcsMjk3NjE0LjQxMTMzMjIwODQsNTc5MTQ5LjIwNTAxNzEwMTUsMTg0Mzk2LjIwODg2NTIxNzMsMjAwODA0Ljc5NjUxODAwMzYsMTU0OTgxLjIxNDM0MTg5NzAyLDE1MzU4OS4yNDUyODk2NTM4LDE2Mjc5Ni4zNDA2MDQ3NTA1MywxMDQzMjcuNzQxNTI1NDkyMTgsNzQ1NTQuMDY5NTEwNDg2MjcsOTIyNzguOTEzMDkyNzM1MDksMTM1MzEzLjM5NzM2NzU0NjU0LDY3ODYwLjA0OTgzMzI3Mjc2CiszMCxGcmkgMSBPY3QgMTAsMjM5ODE5LjkyNjA5OTk1MDc3LDE2NDk0NS41NDY1OTc3NDA1MywxNjc4ODYuNjMwMTA4NDcyNDMsNTIzMjY1LjkxODI2MjE2NTMsNDkxNzguNzEzODU1MTQyNzgsNDM1NTMuNzQxNzYwNDg2NTg0LDE1OTU1OS44ODk3ODk0NjY2MywxMjk0MzMuMTM1MDM4NjYzNjksMTA4MjczLjk4Nzk2Mjg2Nzk5LDM3NDg1LjYwMDY2OTQ1NDExNCw4NjA5Mi45MDU2MDAxNTM4NywxMDY4NzAuODE0OTcxODU5NTcsMjkxMzQ5LjI3ODc5NTAyMDksNTc5MzIyLjk5Njk2OTMzMDEsMTgyMjUzLjQ2Nzk0ODE3NDg2LDIwMDA1OS4yNzE4MjEzOTEyMiwxNDEwODUuMjYzNTU3ODU3NTQsMTQxMTQ0LjE4MjUzNjM0NzM2LDEzNzA4OC41MTQzNzc0MTMwMyw4NzQ2Mi4wMTc5ODc3MjY2LDYxNzAxLjUyMjk4Mzk5MDMyNiw3NjQ5My40MjYzMjE1ODIwOCwxMjI0MTUuNzIxMDA1MjgyOSw1OTY1MC41MjQzMzUzNTg1MgorMzEsU2F0IDIgT2N0IDEwLDIxMDA2Ni42NjYzMTk2NzI1NCwxNTkyMjMuNjYwMDY2NTY1NDcsMTY3NTYwLjA2NzY2MjM0NjEsNTIxMjQzLjkwODkwODM1MTAzLDQyNTIxLjExNTgwODAzNzU1LDM3NDUyLjI0MzI4MzQ1ODkzNCwxNDQ3MTcuMzAxMzYyMjk5MiwxMjQ0NzUuNTg2OTgyMDMxMDMsOTYxMjcuNDUwNTkyNzgwNTEsMzc1MDQuOTAxNDE2ODAyNiw4MzIwNS40MjQ2MTQ1MzM2NCw4ODg2MS4wODM0NjYzNzg0MiwyODE2ODAuOTM5MjAzOTU1OTMsNTc5MzkwLjA2MjA0NDc2NDYsMTc4Nzg2Ljg4NzgwNjE2MjI3LDE5ODcxMS43NzY5OTgwNDE3NSwxMjQ2NjAuMDYzNTg2OTU1NCwxMjYwMTYuNzA1ODU5OTM1NTgsMTEzOTM4LjI1NTE0MjI0ODY5LDcyNzE1LjkwNjE5MjQ1NzM1LDUxNDM5Ljk3ODAyNTMxMjg2LDYzMzg0Ljc2NDYzNjMzNTgyLDEwNzMyOS41MDgzNzgyNjc0Niw1MDk0OC42ODk2OTgyOTQzMgorMzIsU3VuIDMgT2N0IDEwLDE4Nzg5My44NzE4NTMwMTE2NiwxNTA3OTcuMzE4OTgxNzkwNTcsMTY2OTIyLjQyMTk4MzEzNjA3LDUxNzU1NS4yMzI4NDE3MzcxLDM3NTMzLjgzODMyODcwNjU2LDMyODE5Ljk0OTQ3MjE0MTY0LDEyNzY1Ny43NDg4NjE1Mzk2MSwxMTc0MDIuNzAzMDgwNDM2NTUsODMwMTUuMjEyMTg3NTk0NzMsMzc1MjQuMTgyODczMDUwODgsNzkwMDguMzY4NjI3MzI0NzMsNzMyNTguMDM1NjUyMzE4LDI2NzYxMy45NTg1MDc5OTIyNyw1NzkyNjQuNzk5NTc0NTI3OSwxNzM0MzguNzM4MzEyMDgyNiwxOTY0MDIuOTAxMDkwNjE4NzIsMTA3MDc2LjcxNjQzNTQ1MDAzLDEwOTI5Ni4xMTYxMjI3ODU2NCw5NDUxMC4zMjY0MDYwMjk5LDYwNTc3LjYyODE0ODE0NDA1LDQzNTI3LjU1Mjg2NzIzNDcsNTMwMTQuMDU2NjkyMzM0Mjg1LDkxNDE0LjE3Nzk3ODcyNzkyLDQyNjAyLjM4NDQyOTk1NjI4CiszMyxNb24gNCBPY3QgMTAsMTcxMzkyLjMyMjIwMTQ1Nzk4LDEzOTI1Ny4zMTM2MDk3NjAyLDE2NTc2OC4wMDgxMDY1ODQ3NSw1MTExNTkuOTMzMTQ2Mzk2MDcsMzM4MTEuMjk1NTI0NjAwMzcsMjkzMjYuMzUwMjQzMzA3MDI4LDEwOTc3My42MjkzNTAxNzE3OSwxMDgwMzcuODg1Nzc1MTU2MjUsNzAxMjkuMDUwMDYyMDI5MzIsMzc1NDMuNDQ1MDU3NDgwNDM2LDczMzE4LjQ5MDA5MzU0NDM5LDYwNTkyLjU5OTI5NDkwNTk5NSwyNDg1MzAuNzMwMTAwMjk1MjIsNTc4Nzk4LjI0NjE5MDYzNCwxNjU2MjIuOTI0NTE0Njk0NjMsMTkyNjMzLjAxMTY4NzU4MDAzLDg5OTkyLjk0MjI1NjA4OTA1LDkyNTE5LjgxMzczNjk4OTI1LDc5MDEyLjU0MTU5Nzc0NDgzLDUwOTk2LjE4MDg2NjQ2NzM1LDM3NTQ3LjM3MzY4MTQ3Mjk3LDQ1MDU2LjExNzc4MzgxMjY1LDc2MjI3LjE2NzY3OTk5ODQzLDM1MjU5LjE4MTU0NTQyNzQ1CiszNCxUdWUgNSBPY3QgMTAsMTU5MTE2LjQ4NTgxOTEzMjMzLDEyNDc3NS4yMjI3NDg5MzQxLDE2Mzc4NC43NzAwOTc4NjU3NSw1MDA1NjQuNDkwNDA5MTU1MjYsMzEwMzUuNjYzMjIzNjA1MDc1LDI2Njk5LjQ5ODA0MTUwODE2LDkyNjA5LjMxMzUxMzE1NjM2LDk2NjYxLjE2MDY4MDIyMDIxLDU4NDgzLjUxOTMxNTg1OTQ1LDM3NTYyLjY4Nzk4OTM1MzQzNSw2NjIwOS4zMTEyODM3OTQwNCw1MDc1MS43NzI1NDA1ODc1MSwyMjQ2NzEuNzgwMjUwNDIyNDgsNTc3NzM3LjIxODI5NTg3LDE1NDkwNy4yMTM1MjE0Njc4NCwxODY3ODQuNzAwNjYxODM0NjIsNzQ3NTMuMTY4NjA1OTQxNjUsNzcxMjEuNzgxNDIzMDI5MDUsNjcwNDcuMTQzNzI5NzUzMDIsNDM2MjkuMzQ3NDk5MTM0NzUsMzMwNzEuNzE2NzQ1NzI4Njg1LDM5MDUyLjQwNzI0NjA4NTEyLDYyOTQxLjcyNjE2MzkxNzEwNSwyOTIxNC4zNDU4Mzg0NDkzMjQKKzM1LFdlZCA2IE9jdCAxMCwxNDk5OTguMjI2ODM3MjY4MjQsMTA4MzI2LjMwNTI3Mjc0NDk3LDE2MDUyOS4zMzUzNTAwMjMzOCw0ODM4NDUuMDk3MjMxNzg3LDI4OTY3LjgxNzIxMjkyNjMzMywyNDcyNy43NjkyNzk5NDU5OCw3NzM1NC40NTc2Nzg3NjQ3OCw4NDA3Ni4zMjEzMjg3NDYzNyw0ODY0Ni45MjM3NjkwMTQxNCwzNzU4MS45MTE2ODc5MTI4Myw1ODEwMS40MTEyMTIzODU5MSw0MzMwMS40MDYzNTQ1NDM3OCwxOTc0MzEuODU2MzMwMTU0MjMsNTc1NjYzLjU2NzAwNzE0NiwxNDEyNzQuODcwODMxNTAxMSwxNzgyMjkuNzUzNjQ3ODMzNDgsNjIwNDQuNjY4MDQ3MzUwODc1LDYzOTkwLjQ0NTg5ODkwODkyNSw1Nzk3OS45MTcyMDk2MzU5NSwzODA0OC4yNTI0NTg0ODY2NSwyOTczNC42Mjg1MTcxMzA3OTcsMzQ1NTkuMTk2MTg1MDA1NzMsNTIwNzEuNjIzNzg1MTk2NjYsMjQ0NjAuNjk1MzkxMDE0MDc2CiszNixUaHUgNyBPY3QgMTAsMTQzMjU0LjgwMzkyMzU5MTU2LDkxNDk3LjY5MjUzMzkxMDY1LDE1NTQyOS40NjU1NDU5MTM5Niw0NTg5NDguNTc0ODg0MDk0MSwyNzQzMS4wODMwNTA3OTkwNjUsMjMyNTEuMTM3NDMxMTU5NDYzLDY0NTk0LjE1ODg0NzI5MTgxNiw3MTQwNy42OTY3NzYzNTUzMSw0MDczNy42MTQ2NDE3MjIxMywzNzYwMS4xMTYxNzIzODIzMiw0OTY5MS42MTA1NjcwODM0MywzNzczNC42ODE0MjU5NTQ2OTUsMTY5MTI0LjcyMTc2MjY5MDcsNTcxOTEwLjU4NDY3MjcyMzEsMTI1MzM4LjM4MTUxNDI2NzM0LDE2NjU0OC4xMzE0NjkyMjkxNSw1MTk0MS4yNjY3NDQwNDEzOCw1MzM4NS43MDQ3Mzc3NjY2MSw1MTE3MS44MDM0NjM2ODUzNiwzMzg1MC40MDU1NTY3NjExLDI3MjQ4Ljg4MzExODQ3MjM4LDMxMjA2LjMyMDgxMDk2NzQ5LDQzNTc1LjIzNDk0ODA0NTkyLDIwODI1LjQyNDQyMzI1MjUyMworMzcsRnJpIDggT2N0IDEwLDEzODMxMi4xMjU1ODQyMjI3Myw3NTg5Mi44ODMwMTY0NjI4NywxNDc4NTcuNTgxNzI5MzU4Nyw0MjQ0NDMuNTkzMzcyNDEwNCwyNjI5NS41OTk5NDMzODMxLDIyMTUwLjEzNTcwOTAzNzcyNCw1NDM3NC44MDAxNzI0MDYzMzYsNTk3MTEuNTQyNzU0MzI1NzcsMzQ1ODEuNjIwMjgyODczMjQsMzc2MjAuMzAxNDYxOTY2MzgsNDE3MTkuODc1MjI0NjcxNTcsMzM1OTcuMTEwNzQ5NTYwMjU1LDE0MjIxNi4zNjI0NDAyMTk5Niw1NjU0NjEuNDI5MDA3Njk3MywxMDgzMDguMDI4NTQ5MzkwNzYsMTUxODEzLjg1NDU1ODA0NjcsNDQxNDkuMzQyMDg1ODE4MTYsNDUxMjYuNTk2MjIzNTEwODcsNDYwNzguNTQ5Mjk4MjAwNTMsMzA3MDIuMzY0NDI1MzgyNTA4LDI1Mzk4LjQ1OTY1MDM2NzA2MiwyODcwNi40NTkwMjEyMTI0MzUsMzcxMTUuNDM3ODQ4OTE3MDM0LDE4MDg2LjY3NDI3NjM5NjE3NworMzgsU2F0IDkgT2N0IDEwLDEzNDc0Ni42MTc5OTMxMjIxNyw2MjU2My44NjI2NjkzODU1NTUsMTM3MzMwLjg2MzIyOTE2NTgsMzgwNjM5LjgzNjczNDkyOTEsMjU0NjUuNjg4NjM5NTg2NzIyLDIxMzM1Ljg1NzM2ODY4MDgxNiw0NjQyMC4xOTI5ODM4OTQ4MSw0OTY2MS45NzE4MDUwOTk4NywyOTg4Mi40Mzg0MDc3NTMyNjcsMzc2MzkuNDY3NTc1ODUwMywzNDcyNS4wOTU0Mzk4NjI4MiwzMDUyNS40MTU1NDU2NjY2NSwxMTg1MTguNzU5OTg4MjU3MSw1NTQ4NTQuOTM3NjA0MjA3NSw5MTY0MC45OTY3NTQ1NTkyNCwxMzQ3ODYuMzIyOTMyNzg3OTcsMzgyNDIuNjE4MTgxNzc4NjcsMzg4MzIuMDM3MjE4NDM5NjYsNDIyNzIuNTQ0OTg0NDg4NTYsMjgzNDQuNjk3NDgzNzYyMiwyNDAyMy45NjA1NjAyODY4OCwyNjg0NC4zNTgwNDE1Mjc2NzQsMzIyNzQuNzkzMTIxOTUxMzE2LDE2MDM3LjEyNjg1NTc1ODg0CiszOSxTdW4gMTAgT2N0IDEwLDEzMjI0My4wNzUwNTg2NDY1Niw1MTg0OS45NzM2MjY0NzU0NiwxMjM4MzkuMjkyNzg4OTg1ODgsMzMwMzk5LjkzNTQ2NjgxMzg1LDI0ODcwLjM4MDk1NDY0MzE1NSwyMDc0MS45NDk2MzM4MzEwMTYsNDAzMzIuNTU2MjE5MjgxMzQsNDE0ODEuMjQwMTExNDc2MTcsMjYzMzIuMDA4MjY3MDczMzE0LDM3NjU4LjYxNDUzMzIwMDE5LDI4OTQzLjgzNjI3MjU0MTIyLDI4MjQ0Ljk5MTkyNDYwMzY5NSw5ODg0OC45NzM1MDIxMDY4Miw1MzgxNjkuMTUxMDE3NjU3NCw3NjU2Ni4xMDUyMjYyMDQwMiwxMTY4MDcuMjkxOTc5NDMzNjYsMzM4MDIuNTI0MjYyOTgwNjQ1LDM0MDg4LjczMTgyMzczNDYyLDM5NDMxLjAxNzA2ODYzLDI2NTgxLjgyOTU3ODU1MjkxNSwyMzAwOC40MTM5NzI3MjQ1OCwyNTQ2MS4xOTk0NzQ4Nzc4NCwyODY2OS43NDUxMDg5NDAyOSwxNDUwNi43OTIxMTAwMjU0ODQKKzQwLE1vbiAxMSBPY3QgMTAsMTMwNTY0Ljc0NDc4NjQ3MjE5LDQzNTczLjc2OTU5ODMxNTI2NiwxMDgxMzUuMDUxMDM2MjE0NDMsMjc4NjQ5LjgxODQzNzgxMjgsMjQ0NTYuODMxOTgyNzcxODg0LDIwMzE4LjkyOTU2MjkwNzMwMiwzNTcxNi4yODQxMzQwMDQ0NCwzNTA2Mi40MjM2NDY5MDU0OSwyMzY2Mi4zNTY5OTc4OTQ2MzYsMzc2NzcuNzQyMzUzMTYzMDIsMjQzNjEuNTk3NzQ0MTk4MTM0LDI2NTUzLjgxMTYzNjIzMzI3LDgzMTg5LjU1NjMxMDI0OTc1LDUxMzIyNi41MTg4OTE3OTQ1LDYzNzgzLjA2OTcxNDA1Mjc1LDk5Mzc5LjU5MDMxNzM4NzMyLDMwNDc2LjM1NDkxMDIxNzAyNSwzMDUzMi4zNjQwMzk4NzYyNSwzNzMxNC45OTAzMDE1Nzc4NiwyNTI2OC43ODAxODM5NjM3OTQsMjIyNjYuMDA5NTE0NzgxNiwyNDQ0MC40NDUzMjk0NDYyOCwyNTk4OS42NjI1OTM4MTI0NTMsMTMzNjUuMDAyNzUwMzYxNTUzCis0MSxUdWUgMTIgT2N0IDEwLDEyOTUzMS44OTYzMTAxMTU5NSwzNzMyNC42MzI5NjEyMjE4MSw5MTY3My4wODU3MDc2NTA5OSwyMzA1MDUuNzQ5MTU5NjE4NzgsMjQxODQuNzE0MTkyMTU5NDQsMjAwMjguODAzMzk4OTU5MzQyLDMyMjMwLjYxNzk4NzkzMjIzNywzMDEzOC43NzA0NzA5NTY5MzcsMjE2NTguNTY0NTEwNjA0MTI3LDM3Njk2Ljg1MTA1NDg2NjYxNiwyMDgyNS4xMTE0MDU2NTkyNzgsMjUzMDMuOTMxNTAwMDcxMzY1LDcxMDU1LjY2MTk3ODI3OTA4LDQ3ODIyNy4zOTUyMjg4MzE4NSw1MzQ1OC4xODkzMTgzMDI3NCw4MzY4OC4yNTUxNDUyMTU4NywyNzk4Ny4xOTcwMjkzMDAxNDcsMjc4NzAuMjU3OTY0MDE1MzQsMzU3NDcuODE4MDIyODM1MjE0LDI0Mjk3LjQ4NDg3NDE2MzI5MiwyMTczMi44NTY1MTQ0MDk4OTQsMjM2OTUuODAyNzc2OTg0MTE0LDIzOTk3LjY3MTk3ODk1MTMxNSwxMjUxMy44NTQ4NzgxNDE5NDUKKzQyLFdlZCAxMyBPY3QgMTAsMTI5MDA2Ljk5MjM3NjUxNjMxLDMyNjU3Ljc1MzI5NTgwNjc5Nyw3NjA5MS42MDU5NTczMDUyMiwxODkzODQuNTIzMjQwMjE2NTcsMjQwMjMuNTU2MjM5MDA5ODcsMTk4NDIuOTQ1OTEwODY2MTksMjk2MDQuMDkyNjY5Njc4NjgsMjY0MDguMjI1NDc5NjExOTM4LDIwMTU2LjQ5MTQ2ODY5NDE2LDM3NzE1Ljk0MDY1NzQxOTY4LDE4MTM2LjQ4MTIwNjE4MTUsMjQzODcuNTQxNzc3ODMxMzEzLDYxODAyLjE4OTQ0MDQ0NTU1LDQzMjg1MC4zNDEwNzY4Nzg1LDQ1MzkxLjU0MTkxNDk4NTI0Niw3MDM0OS4yMjM4NjcyNDcxNCwyNjEyNi4zMjM2ODc5OTQ0NDUsMjU4NzkuMzE4OTM2ODkzMzY3LDM0NTk5LjMwMDkxODk4NTYyLDIzNTg4LjA5MDEzNTM3MTc5LDIxMzYxLjQ3MzI5ODIwMTI0MywyMzE2My40MjAzOTY1Mzk1NDMsMjI1MTguNDc0ODc0OTQyMjU4LDExODgxLjMxOTg0NzUxODIwNQorNDMsVGh1IDE0IE9jdCAxMCwxMjg4ODMuNzg3ODU4NTE3MDUsMjkxODYuNDcyMTkwMjE3NDQsNjI1ODcuMDM3Nzg2NDkxNTIsMTU2NDE2Ljc4NTI4MTk0OTg4LDIzOTQ5Ljc3ODAwNjM5NzczNywxOTczOS4xNDI3OTIyNTA1MjgsMjc2MjcuODQ3NDI4NTYyMjY1LDIzNTk3LjI5MDQyNDc3ODM4OCwxOTAzMi45MDU1ODI0MTg5MjcsMzc3MzUuMDExMTc5OTExOCwxNjEwNy4yMTg3MDg2ODgyMTMsMjM3MjUuMjQ1NjI1ODYzMjU2LDU0ODA0LjU1Njk2NzYwMjg3NSwzNzkzMzkuNzIxMzQyMzY2MSwzOTIxNy40ODk0OTc4NDQ1MTUsNTk0NjMuMTM2NzY3NTAyOTc2LDI0NzM4LjQ3NzUyNzk3Nzk0MiwyNDM5Mi44MTc3MDMyNDgxNywzMzc3Mi40ODk3OTcxNjE1MSwyMzA4MC42NjA1MjkzMzExNjYsMjExMTUuOTMxODI1NTE4NzAzLDIyNzk1LjM0MjUwMjkwNzEzMywyMTQyMy42Mjg4MzIyOTU5OTUsMTE0MTQuMjU3NTkyODc4OTYzCis0NCxGcmkgMTUgT2N0IDEwLDEyOTA3OS42NzA0MDA5NzkxMywyNjYwNi4zMjAzOTI1OTgzNSw1MTY0MS44OTYxNTM5NTQ3OSwxMzEwNTcuNjMzNDU5MzI3MzQsMjM5NDUuMjU4MDY0OTE3MzE4LDE5NzAwLjM4OTMwMzk2MTM4LDI2MTQ1LjIzNTgyNzE2MDU3NCwyMTQ4My42NjY3NzI0NjAzNjUsMTgxOTYuNjA0NDk4ODEzMjY3LDM3NzU0LjA2MjY0MTQxMzUyLDE0NTgwLjAyMjkwNjgxMzg2NSwyMzI1OC4zNDE2NTExNjQ1OCw0OTUzMy44NDc2ODYxMzE2MTYsMzIyNTA0LjY4MDY1ODU2NTQsMzQ1NDUuMDU0NTAxOTk5ODQ2LDUwODExLjY4MzQ4OTkzMTg4NiwyMzcwOS4yODQ4MDk0NzY0ODUsMjMyODcuODM1NTI1NzM3MTcsMzMxOTQuOTM5OTM4OTE3OTQ1LDIyNzMwLjMwNDUzODI3OTQxLDIwOTY5LjAyNDE1NDc5NjE2MywyMjU1NS40NTA1MTI4MTgwNiwyMDYxOS4yMjk4Mjg2MjUzNTcsMTEwNzMuNTUyNzQwNDI5MDM1Cis0NSxTYXQgMTYgT2N0IDEwLDEyOTUzMC4xMDg5NjA0MzE3NywyNDY4OC45NTcwMjMxMzU2Myw0MzE2MS43NzUxMjg2OTIyNiwxMTIwMDcuMTY0OTc3MzA5NjksMjM5OTYuMzgyNTY3OTE4NTk0LDE5NzE0LjEzNTgyMjMyNjU5MiwyNTA0MS43NDk0NTU0OTk3NDMsMTk4OTguMzE5MzI2MTYzNjA0LDE3NTgxLjE4ODQwMDA0MTQ4MywzNzc3My4wOTUwNjA5NzYyOSwxMzQzMy4yMzc5OTE4Mjk0NDYsMjI5NDMuNDU4MDk5NjgzNjYzLDQ1NTc1Ljc5MDkzNzg3MTEzNCwyNjgwNzEuMDMzMTEyNDc1OCwzMTAzMi44Nzg5MTY2MDg3NDgsNDQwNDUuODA0OTc3MzIwNjMsMjI5NTUuMzg1NTA3NDg2NTc1LDIyNDc0LjkzMTQ2OTY0NjY4LDMyODEyLjYyNDQzMTUzNDU3NiwyMjUwMy44NTA1NTY3NDU2NCwyMDkwMC4zMzIyMjQ3OTEwMjYsMjI0MTYuNjY4OTczNTk4NTEzLDIwMDM2LjU0NTg5MTEzMzgzLDEwODMwLjYyMTI1ODEyNTc2NAorNDYsU3VuIDE3IE9jdCAxMCwxMzAxODQuMDI0MTQwOTAxNzksMjMyNjYuMDk5NzE0MDgwNzU2LDM2NzYzLjc3OTQ5NTQ5MTE1LDk3ODU1LjQyNjU5NzM5NjYsMjQwOTEuNjQzODY1MDgzNTg0LDE5NzY5LjQyMDY3NzM2OTA1MywyNDIyOC4wODA1NDE2OTkxOCwxODcxMC4zNDI1MzI2NDczNDQsMTcxMzUuMTc2NjMxODg4MDgsMzc3OTIuMTA4NDU3NjMyNTMsMTI1NzIuNzQxNzc5MzY4NTc0LDIyNzQ2LjkxNzk2OTMzNjE3Myw0MjYwNy45ODM4MjUzODgyMDQsMjIwNDU0LjMwMjUyNTQxMDAyLDI4Mzk3LjM5MTEwOTkyNDI3NiwzODgxMS42MzEzMzQ0MjQxMSwyMjQxMi43ODk0MzE0MDEyNDUsMjE4ODUuNTcwOTQ1MzI4MzM0LDMyNTgzLjIxODAyOTQyMTUzMiwyMjM3NC40NTE5MDIxMDkwMjQsMjA4OTMuMzMzOTIzOTc1ODkzLDIyMzU3LjQzMjUyNzc5OTkxMiwxOTYyNC4xMzEzMDkwNzE2NiwxMDY2My4yNDg3OTE5MTM0MjcKKzQ3LE1vbiAxOCBPY3QgMTAsMTMxMDAxLjA1OTg3MjY2NDI4LDIyMjE0LjgwMDc4MTU0MDAzOCwzMjAwMC4yMzQ2OTk5OTA0NjIsODczODMuMDc0MDg0NDU4NjMsMjQyMjIuMjExNTgxNzE2MzQ3LDE5ODU3LjkzNzU3MzE3MTIyNCwyMzYzOC4yOTUwNzE0ODI2MDQsMTc4MjMuNDI0NzU3NDkwNDMzLDE2ODIwLjQ3MjkzODYwMTExNywzNzgxMS4xMDI4NTAzOTU2NTUsMTE5MjguODkwNTM2NjgyNDIyLDIyNjQzLjI3ODg3OTAwMzMyLDQwMzg5Ljk3NjYxMTgxMzM1NiwxODE2MTcuNTUzNTAwMDg0MDYsMjY0MjIuMjUxMDU1NjcyNjcsMzQ3ODkuMzUwNjQzMjQwNjY1LDIyMDM0LjAyMjg3NjU1NDc5LDIxNDY5LjA4MDM4ODEwNDE5NywzMjQ3NC40ODY2NjI4ODIyOSwyMjMyMS44MDQzOTg2MDQ4NTgsMjA5MzUuMzY5ODIzMDkyODc1LDIyMzYxLjI0MDIyMzE5OTg0NiwxOTM0My42MTc4ODgxODQ0MDYsMTA1NTQuODQ3MjkxNTAzMQorNDgsVHVlIDE5IE9jdCAxMCwxMzE5NDkuMjA3NjU5MTA3NzUsMjE0NDUuMjQ0MDE0OTI1ODQ0LDI4NDcxLjQwMzE0NDUyMzc3LDc5NjM2Ljk4ODk0NDEzNTg0LDI0MzgxLjMxMDkzMzY3NzU4NSwxOTk3My40MTExMjM2MTMzNCwyMzIyMy44MDQzNDI0NjQxMTUsMTcxNjcuNDUxNTEwNTYwODQ4LDE2NjA4LjgyODg0NDQ4NTM1NywzNzgzMC4wNzgyNTgyNjAwNCwxMTQ1MC43OTY1NTc4NjM0NzYsMjI2MTMuMTk1MzY2NDc3MzMsMzg3NDUuMTgwMDgzNTksMTUxNDE3LjEyMzY3NTQ4MzQyLDI0OTQ4LjA5MTM2MDA2OTk1NywzMTcxNC44ODE5NzE2MjExLDIxNzgzLjczMDgxMzcwODcwNiwyMTE4Ny44NTgwODM0MjM2MywzMjQ2MS43NjAxOTk4NjA1NDIsMjIzMzAuNTE0NTYxODc3ODQsMjEwMTYuNzEwMzU5Njk0NjksMjI0MTUuNDEyMjA0ODI2OCwxOTE2Ni4xNTA4ODIzMTQ1MzgsMTA0OTIuOTY5MjQwOTQ1MDQ0Cis0OSxXZWQgMjAgT2N0IDEwLDEzMzAwMi44MjMzNjc1ODM4NiwyMDg5MC44OTgwNzE5NjM2MTcsMjU4NTkuNzA0MTAyODc0MjU3LDczOTA1LjU5NDYxMDM2NDc2LDI0NTYzLjIwOTE4NDgzMzQyOCwyMDExMC4zODI3NjQ3NjU3MTMsMjI5NDUuODg1NDAxMjY3NTM3LDE2Njg4LjI0MTMzNjM3NjAzNSwxNjQ3Ny43OTA5NzM0MjIxOSwzNzg0OS4wMzQ3MDAyMDExMDQsMTEwOTkuNDQyMjc1ODk3MTY3LDIyNjQxLjI4NzM0MDA4Njc1NCwzNzUzOC4yODEwNjI0MTQyMiwxMjg1OTMuNTIyNTU1NDIxNjksMjM4NTIuMTI2NjE1NzMxMTQ0LDI5MzcyLjkzOTA3OTIwODg0LDIxNjM0LjAzNTYwMTEyNjA1LDIxMDEyLjMyMjk0MTk4OTQ0LDMyNTI1LjI5MTE2MjM2MzE3MywyMjM4Ny45MjM0MzMzNDMxMTIsMjExMjkuMzgyMDk1NDA1ODM2LDIyNTA5LjY4MDc4NDE3NjA4MiwxOTA2OS40OTQ1NjczODEwOSwxMDQ2Ny42OTQ1MDMxNzIxOTMKKzUwLFRodSAyMSBPY3QgMTAsMTM0MTQxLjQ1MzE3NjE0MywyMDUwMi41MDI1NTYwNDA3MDUsMjM5MjYuNDAzMDY5NzczNTgsNjk2NzAuMTIzNzU5NjMxNzUsMjQ3NjMuNTUxMjY2NDUxODcsMjAyNjQuNzk3ODUzNjQxNTU0LDIyNzc2LjAwMjE0NTg0NTMzLDE2MzQ2LjQ3MTk1NjA4MjA3MiwxNjQxMC42NTIwMTU4Njc1LDM3ODY3Ljk3MjE5NTE3NTI5NCwxMDg0Ni4zOTk5Mjc5NjA5MTYsMjI3MTUuNzc3NTgyMDM4MzY1LDM2NjcwLjQyODE5ODg5ODEsMTExNTkzLjM0OTg2MTI4OTg0LDIzMDQ2LjA4Njc4OTA2MTk3NCwyNzU5Ny41OTIzMTQ5NTY0MzMsMjE1NjQuMDM3MjkzNDUzMjksMjA5MjAuMzc5NjEzMzYxNDEsMzI2NDkuODgxODMyNDMwOTMyLDIyNDg0LjQ1NjM2Njc2NjA1NSwyMTI2Ny4yNjM2MDYwODg2OTgsMjI2MzYuMTM4MDM1NjI2MDE2LDE5MDM2LjY3NjIwOTk1MDg0LDEwNDcxLjU0MDczNjE1OTYzOQorNTEsRnJpIDIyIE9jdCAxMCwxMzUzNDguNjU4MjE5Mjk0NDIsMjAyNDIuOTg5MTY4MDU1OTA1LDIyNDk2LjU1NjA4NTgxMTYwNCw2NjU1My44MDYxNzA4NzA1OCwyNDk3OC43NzExNDI3MjQyLDIwNDMzLjMwMjEwOTg0MDc3LDIyNjkxLjcwNDA4MzIyNDczLDE2MTExLjk3MTk3NTUzNDU4OSwxNjM5NC4yNTAwMzUyNTA1MywzNzg4Ni44OTA3NjIxMjAxLDEwNjY5Ljk1OTA4MTA2ODQwNCwyMjgyNy4zMjYwODQ2NTg1LDM2MDY2LjI1MjI0Nzk2MTY3NSw5OTAwMy4xNjA0OTQ4OTQ3OCwyMjQ2My4xOTU5MjMxOTg5MDYsMjYyNTkuNzYyMTU5Mzk2ODIsMjE1NTcuMzE1NTgxMzExNTQ1LDIwODk0LjcwNzgwMTQ0Njc1NSwzMjgyMy40MTc3NTU2MzE4NCwyMjYxMi4zOTcxNDgxODI3MDcsMjE0MjUuNDE2NjU2MzE1NTk2LDIyNzg4LjQ0MDkxMDQ0MjU1NCwxOTA1NC40Nzg5NzMwMjU5OSwxMDQ5OC41ODUzNjgwOTM0OTIKKzUyLFNhdCAyMyBPY3QgMTAsMTM2NjExLjIxMzY4NjcyNzksMjAwODQuMjQ3MzE3MjM0ODk1LDIxNDQzLjAwNDcwNTE1MTQyMyw2NDI4Mi4zOTc5NTA5MTc2LDI1MjA2LjAwMjY0NzU3MTQwNCwyMDYxMy4xOTc5MzQyMTcwMTMsMjI2NzUuNTA1ODM5ODM1MjEsMTU5NjEuNzI0MzkxNDIwOTEsMTY0MTguMjk2ODA0ODM2MDkzLDM3OTA1Ljc5MDQxOTk1NDA5LDEwNTUzLjU5NDIyMDQ4OTg1NSwyMjk2OC41NTExNzM0NTM1NzIsMzU2NjguNDYwMzA4MjMwNzUsODk2ODkuOTk1NjYwNDQ1MTcsMjIwNTMuMzE2Nzg5NzI5LDI1MjYwLjYxMDIxMTk1NjQ0LDIxNjAxLjAzMTE1NTUzNzE2MywyMDkyMS43OTU2Njk1MjA4NjMsMzMwMzYuMjgxNTQ4NDczMDksMjI3NjUuNjA2OTE2NDU1ODgzLDIxNTk5Ljg5NjM5NDQ0NTc2LDIyOTYxLjUzNTM4MDIzMzA1NywxOTExMi41NzY2NDk1MDI5NTMsMTA1NDQuMTcwMTQ3NTU5NTcxCis1MyxTdW4gMjQgT2N0IDEwLDEzNzkxOC40NTgxMzA0OTY1NSwyMDAwNC43NjI0OTk3MDMxMDUsMjA2NzMuMTk4NDQyNDUzODY4LDYyNjU0Ljc5MTQ5MzkxMjc4LDI1NDQyLjkzNjkyNTgxMDg4NSwyMDgwMi4zMTA3NDg5NDU4LDIyNzEzLjcwMDU1NTM4MzgyOCwxNTg3OC4wMjI1OTUxNDIxNjksMTY0NzQuNzAxMDY2MDcyMDI2LDM3OTI0LjY3MTE4NzU3NjkzLDEwNDg0LjYxOTY2NDY4NTk2MywyMzEzMy41OTMyMTIyNDYyOCwzNTQzMy4xNDYzMDk1NDU3OCw4Mjc5OS4yOTIyMDA0ODQxMiwyMTc3OC40OTczODYxNTM1NjIsMjQ1MjQuNjkyODQ2NzgwMDQzLDIxNjg1LjA4Mzk5Njg3MTY2LDIwOTkxLjAzNTM5ODYzNTA3NSwzMzI4MC44MDc2MjEwNzU0OTUsMjI5MzkuMTgzNDAyMDMzODk0LDIxNzg3LjU0MTk3NjkzODE1LDIzMTUxLjM4MDg5MzMyMTA4LDE5MjAyLjg1Mjg2ODI5NjAwNiwxMDYwNC42MTIzMDkzMzcwMjgKKzU0LE1vbiAyNSBPY3QgMTAsMTM5MjYxLjc4MDU5NTU2NjE4LDE5OTg3LjkyOTM3ODM5OTQ4LDIwMTE5LjMyNzcwNjQ2OTU5OCw2MTUyMi4wNzUzMzM0MDk3MiwyNTY4Ny43MTAzNTkyNjQ1ODQsMjA5OTguODgzOTY3NjAzOTMsMjI3OTUuNDgxMjM2MzAwNjI0LDE1ODQ3LjEzODIyMDAzNDE2NSwxNjU1Ny4wNjUyMzUxOTIxNywzNzk0My41MzMwODM4NjkzODQsMTA0NTMuMjE5MTc1MDcwNDgyLDIzMzE3Ljc4MzIwODExODA1MywzNTMyNi4zOTg2NjU2MTgzMjYsNzc3MDQuMTQ5NDQ3MjAxNSwyMTYwOS43NjQxNjcxNTIxNSwyMzk5NC4zNzI2MTAxMTY4MSwyMTgwMS40ODcwODkwOTgyOCwyMTA5NC4wNTI4MDI2NDMzLDMzNTUwLjg2NDk3NzY4NzA1LDIzMTI5LjE5OTE0OTU2NTg1LDIxOTg1LjgxNDA5NjA0OTU1LDIzMzU0LjczNzcyNTAwNjg1MywxOTMxOC44OTUwNTM3OTcwNzgsMTA2NzYuOTg3MzI4Mjk4NDIKKzU1LFR1ZSAyNiBPY3QgMTAsMTQwNjM0LjIxNDY0NDg3NjcsMjAwMjAuODM1MDg4NTY1MzgsMTk3MzEuMjQ2OTk0MzQxOTksNjA3NzIuODI3ODQyMjkyNTY1LDI1OTM4LjgxNjE0NjQ4ODQ4MywyMTIwMS40OTYxOTc3NzQ2MTcsMjI5MTIuMjg0NjE5NTc2ODMsMTU4NTguMzUyMjE5NDY3NjMyLDE2NjYwLjMwNzYxODY3MjM4LDM3OTYyLjM3NjEyNzY5MzM1LDEwNDUxLjc0MTU4NDczMDc2LDIzNTE3LjM4ODkyNjc3NTI5LDM1MzIxLjgzNTY3Nzk2Njg1NCw3Mzk0OS4wOTY2Njc1NTcyNywyMTUyNC44MTU4NDMwMTI2MSwyMzYyNS40NjA2NTM4OTg2MjMsMjE5NDMuODk1ODg5NjU0OTQ1LDIxMjI0LjIwNTUzMDQ1NTEzLDMzODQxLjUzNTUyOTQ1ODMzLDIzMzMyLjQ5OTA0MjYxNzMwMywyMjE5Mi42NjgxNzc0NzgyMTYsMjM1NjkuMDAxNzc2NjYyMTEzLDE5NDU1LjYxNDI0NzgzMTA0LDEwNzU4Ljk2NDAxNjg2MjgxNAorNTYsV2VkIDI3IE9jdCAxMCwxNDIwMzAuMTE1NjExMjgzMSwyMDA5My4zNzEzNzkzNjg0OTUsMTk0NzEuNDg5NTM1NzAyNzI3LDYwMzIyLjgxMTU2Mjg0MzY4NiwyNjE5NS4wMzM3NDQxMjgxNywyMTQwOC45OTQ5OTQ5Mjc2NCwyMzA1Ny4yOTM3OTM4OTc4NzIsMTU5MDMuMjQwMzczMTM5Nzk0LDE2NzgwLjM3NDcxMTk1Mzk3LDM3OTgxLjIwMDMzNzg5MTg3NCwxMDQ3NC4xODI5Nzc1NjkwOTMsMjM3MjkuNDE4MjYzMDg4NTYsMzUzOTguNzk1MzYxNjg5Njg1LDcxMjAzLjAxNTc2MjQwNTA4LDIxNTA2LjM1MDU2MTE2NjM0NiwyMzM4My44OTc0Mzc0OTcwNzUsMjIxMDcuMjQ5OTkxNzY2NjYsMjEzNzYuMjAyMjAwNjM1NDM1LDM0MTQ4Ljg2MzQ2MTI2NTg2NCwyMzU0Ni41NDE2OTUyNjg5OSwyMjQwNi40NTQzOTE5NDM1MTMsMjM3OTIuMDc0OTU4NjEwMDMyLDE5NjA4Ljk1NjI2NDk3NzI1MiwxMDg0OC42Nzc3MzQzODU1NjEKKzU3LFRodSAyOCBPY3QgMTAsMTQzNDQ0LjkwMzQ1NjQ0NTgsMjAxOTcuNTgwMjEzMTI4NjA0LDE5MzExLjc3MDk2MTM4NDc0Nyw2MDEwNy43MjA2ODk2Mzc4ODUsMjY0NTUuMzczMTY4OTk2OTksMjE2MjAuNDQ0NzU0NTA2MTUyLDIzMjI1LjA2MTk0MTQ3MDgyNywxNTk3NS4xNDU5NzQyMzQzNDEsMTY5MTQuMDIyMjQwMjY5MzcsMzgwMDAuMDA1NzMzMjg5MTc0LDEwNTE1LjgwNTI3MjcwNDIyNywyMzk1MS40NjY3NTA4MTAwOSwzNTU0MS4wMDI3MzEwNjY3Nyw2OTIyMy42NzcwNjU0NDI1NSwyMTU0MC44NTMxMjE1MjY2NywyMzI0My4yNzg5NTY0NTA4NjQsMjIyODcuNDk5ODY1MjM5MTYyLDIxNTQ1LjgxMjkwMDcxMzc3NiwzNDQ2OS42NTk4OTgxOTUwOCwyMzc2OS4yNzU4OTE3MTM5LDIyNjI1LjgzOTE0OTcwOTM3NiwyNDAyMi4yNjM2NjUxNzgxMSwxOTc3NS42ODA3NDgyNDgyNDQsMTA5NDQuNjMyODg0NDE3NTE3Cis1OCxGcmkgMjkgT2N0IDEwLDE0NDg3NC44NTcxNDQzNTUyMiwyMDMyNy4xNjU0Mjg5Mjc0NTIsMTkyMzAuNTI4OTgyMDI1NTUzLDYwMDc4LjAzMTI4NDM3MzYzLDI2NzE5LjAzMDM2Nzg5MDczNywyMTgzNS4wODQ4NzgzNzE5NjMsMjM0MTEuMjIyNTM4MzgyOTIsMTYwNjguNzgzNTg2MzE0NTksMTcwNTguNjQ1Nzc4MjQ1NDYsMzgwMTguNzkyMzMyNjkwNjMsMTA1NzIuODUwNDk3MjQ0NTUyLDI0MTgxLjU5ODAxNDMyNjE3NywzNTczNS41NzMyNDU4NjY5LDY3ODMyLjI0ODUxNTMwNjAzLDIxNjE3LjcwMTA3MjY0NjY1OCwyMzE4My4wMTI0OTMzMzQwMiwyMjQ4MS4zOTU0MTg5MTE4NSwyMTcyOS42NDU3OTM5NDAxLDM0ODAxLjM0OTA0MTY4MTAzLDIzOTk5LjA0Mjg4Nzk4MzgzNiwyMjg0OS43NDI3Mjk2MzM0MTQsMjQyNTguMTk4NDAxNDE3MzYsMTk5NTMuMTkwNDUxMTY3NjU1LDExMDQ1LjYyNjkwMTE0NTM5MQorNTksU2F0IDMwIE9jdCAxMCwxNDYzMTYuOTQ5ODQzMTI0MjUsMjA0NzcuMTI0NTYxMDI2NDgsMTkyMTEuMTc4NDAxODkyNDMsNjAxOTUuMzA0ODcwNDUzMTI1LDI2OTg1LjM1MTQ2OTgxNzE2OCwyMjA1Mi4yOTYyNDQwNzEzNCwyMzYxMi4yNjQ5NDgxNTQ0NCwxNjE3OS45Mzg5NTA4NzgyMzksMTcyMTIuMTQ5MDM1MTEyNTU0LDM4MDM3LjU2MDE1NDg4Mjg1NiwxMDY0Mi4zMjQ5NzE0MzE4MDYsMjQ0MTguMjQ5NjY3NDE5NDcsMzU5NzIuMjYxNDQwNTE2MDgsNjY4OTUuMzM0Mjg0NjM0OTQsMjE3MjguNTAwMzcwMDU4MTYsMjMxODYuOTQzODIwNzc5NDEyLDIyNjg2LjMyMTQ4ODY5NTQxNiwyMTkyNC45NzM3Mjc2MTIxOCwzNTE0MS44NDY1NDM2MDk3OSwyNDIzNC40OTkwMDM2MTI3NDYsMjMwNzcuMjg5NjQzODA5MDEsMjQ0OTguNzY5OTk0MDQ2NTc1LDIwMTM5LjM5ODQ1NDQwODEwMywxMTE1MC42OTA3MjMzMTg4NzQKKzYwLFN1biAzMSBPY3QgMTAsMTQ3NzY4LjcxNjU2OTY3NjYsMjA2NDMuNDY4NTQ2MTg4ODc3LDE5MjQwLjg2MDUwMDI2NzUyNSw2MDQyOS41MDM0NzYxNDkzMSwyNzI1My44MDQxMDExOTc2NTMsMjIyNzEuNTc0MjgzNTU5NzIsMjM4MjUuMzU5NTE1ODE5NzEsMTYzMDUuMjM5Njk5NDEzMjk0LDE3MzcyLjg0MDgwNzA1MzY4NiwzODA1Ni4zMDkyMTg2MzM2NywxMDcyMS44MzQ4MTU0OTkwNDUsMjQ2NjAuMTU4OTIzODIwMTMsMzYyNDIuODg5MjU4NTY3MTY0LDY2MzEyLjM4ODAzOTc4NTYsMjE4NjYuNTg2NzY4MTUyNzM0LDIzMjQyLjMzMTg4MzA0MDU3NywyMjkwMC4xNjkwNjUzNDczNjcsMjIxMjkuNTk4Nzk3NTg5NTYyLDM1NDg5LjQ2Mjk4NjU2NzcsMjQ0NzQuNTU0MDc2MjIxMjc3LDIzMzA3Ljc2OTAyNzM0NDQzLDI0NzQzLjA3ODgwMTQ5MDk3NCwyMDMzMi42MjQyNTc1MTg0NTUsMTEyNTkuMDQxOTQzNjkwMzg3Cis2MSxNb24gMSBOb3YgMTAsMTQ5MjI4LjE0NzY4NzY3NzQ3LDIwODIzLjAwNjQ1ODA3MDgzNSwxOTMwOS41MzYxODA1MDQ2ODUsNjA3NTcuMDE1NTczMDAwODIsMjc1MjMuOTU0MzIwNTU4MzcyLDIyNDkyLjUwNzMyMTAyMDU3LDI0MDQ4LjIyMDM5OTI5Mzg0LDE2NDQxLjk3ODY3OTY0NzYyLDE3NTM5LjM1MzkwMTQxNjg1MywzODA3NS4wMzk1NDI2OTIxNDYsMTA4MDkuNDU5NDgxOTg4MzIyLDI0OTA2LjMwMzU2MTYwMDg5LDM2NTQwLjkwNzMxOTUxNDA2LDY2MDA2Ljg2ODIyMTQ2NzE3LDIyMDI2LjY0NzkxMTYwMTkyNSwyMzMzOS4wNzg0MDU3NTY0NjcsMjMxMjEuMjMzOTQxNjcxOTYyLDIyMzQxLjc0NTk0NTE0NzA3NSwzNTg0Mi44MjcwMTI0MTkzNSwyNDcxOC4zMjIzNjE3ODE4NjYsMjM1NDAuNjAyOTQyMDk1MTUsMjQ5OTAuMzk0MTUxNDcyNzc0LDIwNTMxLjUxMjAzMTg3ODk4NSwxMTM3MC4wNDc3NjM3NjIwMworNjIsVHVlIDIgTm92IDEwLDE1MDY5My42MDMwNjIzMDg0NSwyMTAxMy4xNzg4OTIyNzA3LDE5NDA5LjMyMDQxNzY5ODY5NSw2MTE1OS4xODc1MDc1ODQ4LDI3Nzk1LjQ0ODAzNzYwNzYzLDIyNzE0Ljc1OTEwODcyMTUyLDI0Mjc4Ljk5NzQxNDgwOTQ0NCwxNjU4Ny45NzY3ODk3ODMyMDYsMTc3MTAuNTgxMDM1NzAzOTIsMzgwOTMuNzUxMTQ1Nzg4NjEsMTA5MDMuNjUzNzYwNTI3NTQsMjUxNTUuODU0OTE1Nzg1NzUsMzY4NjEuMDU1NTQ5MDQwNzEsNjU5MTkuOTc1NjA5NDk2NCwyMjIwNC40MzQyODM2OTAwNDcsMjM0NjkuMTQ0ODYyNzgyOTIzLDIzMzQ4LjEzNjU2MDk4MDE3MiwyMjU1OS45Nzg5NDI1NTIxNCwzNjIwMC44MjM5MDk0MzEzNzYsMjQ5NjUuMDgzMjQ4NjU2NzgsMjM3NzUuMzIwOTUyODI1NjEyLDI1MjQwLjEyMTg2MTU2NDI2LDIwNzM0Ljk2NjAxMzE5MDg1NywxMTQ4My4xOTU1ODQ5NjQ5NDgKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuYXV0b21hdGljZXhwZXJpbWVudC9yZXNvdXJjZXMvQXV0b21hdGVkRXhwZXJpbWVudEV4YW1wbGUvZGVjb3JhdG9ycy9TSVIuc3RhbmRhcmQgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmF1dG9tYXRpY2V4cGVyaW1lbnQvcmVzb3VyY2VzL0F1dG9tYXRlZEV4cGVyaW1lbnRFeGFtcGxlL2RlY29yYXRvcnMvU0lSLnN0YW5kYXJkCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmVmNjVjZjUKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmF1dG9tYXRpY2V4cGVyaW1lbnQvcmVzb3VyY2VzL0F1dG9tYXRlZEV4cGVyaW1lbnRFeGFtcGxlL2RlY29yYXRvcnMvU0lSLnN0YW5kYXJkCkBAIC0wLDAgKzEsNCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQ6RGV0ZXJtaW5pc3RpY1NJUkRpc2Vhc2VNb2RlbCB4bWk6dmVyc2lvbj0iMi4wIiB4bWxuczp4bWk9Imh0dHA6Ly93d3cub21nLm9yZy9YTUkiIHhtbG5zOm9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvc3RhbmRhcmQuZWNvcmUiIHVSST0icGxhdGZvcm06L3Jlc291cmNlL0F1dG9tYXRlZEV4cGVyaW1lbnRFeGFtcGxlL2RlY29yYXRvcnMvU0lSLnN0YW5kYXJkIiB0eXBlVVJJPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vSWRlbnRpZmlhYmxlIiBkaXNlYXNlTmFtZT0ic2lyIiB0cmFuc21pc3Npb25SYXRlPSIxLjIiIHJlY292ZXJ5UmF0ZT0iMC4zIiBpbmZlY3Rpb3VzTW9ydGFsaXR5UmF0ZT0iMC4wMSIgaW1tdW5pdHlMb3NzUmF0ZT0iMC4wMDEwIj4KKyAgPGR1YmxpbkNvcmUgdGl0bGU9IiIgaWRlbnRpZmllcj0icGxhdGZvcm06L3Jlc291cmNlL0F1dG9tYXRlZEV4cGVyaW1lbnRFeGFtcGxlL2RlY29yYXRvcnMvU0lSLnN0YW5kYXJkIiBkZXNjcmlwdGlvbj0iRGlzZWFzZSAmcXVvdDtTSVImcXVvdDsiIGNyZWF0b3I9ImVkbHVuZCIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9zdGFuZGFyZC5lY29yZSIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL2Rpc2Vhc2Vtb2RlbCIgY3JlYXRlZD0iMjAxMC0wOS0wMSIvPgorPC9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQ6RGV0ZXJtaW5pc3RpY1NJUkRpc2Vhc2VNb2RlbD4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuYXV0b21hdGljZXhwZXJpbWVudC9yZXNvdXJjZXMvQXV0b21hdGVkRXhwZXJpbWVudEV4YW1wbGUvZGVjb3JhdG9ycy9TSVJJbmZlY3Rvci5zdGFuZGFyZCBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuYXV0b21hdGljZXhwZXJpbWVudC9yZXNvdXJjZXMvQXV0b21hdGVkRXhwZXJpbWVudEV4YW1wbGUvZGVjb3JhdG9ycy9TSVJJbmZlY3Rvci5zdGFuZGFyZApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5mYTY0MGNmCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5hdXRvbWF0aWNleHBlcmltZW50L3Jlc291cmNlcy9BdXRvbWF0ZWRFeHBlcmltZW50RXhhbXBsZS9kZWNvcmF0b3JzL1NJUkluZmVjdG9yLnN0YW5kYXJkCkBAIC0wLDAgKzEsNCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQ6U0lJbmZlY3RvciB4bWk6dmVyc2lvbj0iMi4wIiB4bWxuczp4bWk9Imh0dHA6Ly93d3cub21nLm9yZy9YTUkiIHhtbG5zOm9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvc3RhbmRhcmQuZWNvcmUiIHVSST0icGxhdGZvcm06L3Jlc291cmNlL0F1dG9tYXRlZEV4cGVyaW1lbnRFeGFtcGxlL2RlY29yYXRvcnMvU0lSSW5mZWN0b3Iuc3RhbmRhcmQiIHR5cGVVUkk9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9JZGVudGlmaWFibGUiIHRhcmdldFVSST0ic3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vbm9kZS9nZW8vcmVnaW9uL1NFLUFCIiBkaXNlYXNlTmFtZT0ic2lyIiB0YXJnZXRJU09LZXk9IlNFLUFCIiBwb3B1bGF0aW9uSWRlbnRpZmllcj0iaHVtYW4iIGluZmVjdGlvdXNDb3VudD0iMTAuMCI+CisgIDxkdWJsaW5Db3JlIHRpdGxlPSIiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9yZXNvdXJjZS9BdXRvbWF0ZWRFeHBlcmltZW50RXhhbXBsZS9kZWNvcmF0b3JzL1NJUkluZmVjdG9yLnN0YW5kYXJkIiBkZXNjcmlwdGlvbj0iSW5mZWN0IDEwICZxdW90O2h1bWFuJnF1b3Q7IHBvcHVsYXRpb24gbWVtYmVycyB3aXRoIHRoZSBkaXNlYXNlICZxdW90O3NpciZxdW90OyBhdCB0aGUgbG9jYXRpb24gJnF1b3Q7U3RvY2tob2xtLCBTd2VkZW4mcXVvdDsgKFNFLUFCKS4iIGNyZWF0b3I9ImVkbHVuZCIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9zdGFuZGFyZC5lY29yZSIgY3JlYXRlZD0iMjAxMC0wOS0wMSIvPgorPC9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQ6U0lJbmZlY3Rvcj4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuYXV0b21hdGljZXhwZXJpbWVudC9yZXNvdXJjZXMvQXV0b21hdGVkRXhwZXJpbWVudEV4YW1wbGUvZGVjb3JhdG9ycy9TSVJJbm9jdWxhdG9yLnN0YW5kYXJkIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5hdXRvbWF0aWNleHBlcmltZW50L3Jlc291cmNlcy9BdXRvbWF0ZWRFeHBlcmltZW50RXhhbXBsZS9kZWNvcmF0b3JzL1NJUklub2N1bGF0b3Iuc3RhbmRhcmQKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNDA2NWVlOAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuYXV0b21hdGljZXhwZXJpbWVudC9yZXNvdXJjZXMvQXV0b21hdGVkRXhwZXJpbWVudEV4YW1wbGUvZGVjb3JhdG9ycy9TSVJJbm9jdWxhdG9yLnN0YW5kYXJkCkBAIC0wLDAgKzEsNCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQ6U0lSSW5vY3VsYXRvciB4bWk6dmVyc2lvbj0iMi4wIiB4bWxuczp4bWk9Imh0dHA6Ly93d3cub21nLm9yZy9YTUkiIHhtbG5zOm9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvc3RhbmRhcmQuZWNvcmUiIHVSST0icGxhdGZvcm06L3Jlc291cmNlL0F1dG9tYXRlZEV4cGVyaW1lbnRFeGFtcGxlL2RlY29yYXRvcnMvU0lSSW5vY3VsYXRvci5zdGFuZGFyZCIgdHlwZVVSST0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0lkZW50aWZpYWJsZSIgdGFyZ2V0VVJJPSJzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9ub2RlL2dlby9yZWdpb24vU1dFIiBkaXNlYXNlTmFtZT0ic2lyIiB0YXJnZXRJU09LZXk9IlNXRSIgcG9wdWxhdGlvbklkZW50aWZpZXI9Imh1bWFuIiBpbmZlY3Rpb3VzQ291bnQ9IjAuMCIgaW5vY3VsYXRlZFBlcmNlbnRhZ2U9IjM1LjAiPgorICA8ZHVibGluQ29yZSB0aXRsZT0iIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcmVzb3VyY2UvQXV0b21hdGVkRXhwZXJpbWVudEV4YW1wbGUvZGVjb3JhdG9ycy9TSVJJbm9jdWxhdG9yLnN0YW5kYXJkIiBkZXNjcmlwdGlvbj0iSW5vY3VsYXRlIDY1ICZxdW90O2h1bWFuJnF1b3Q7IHBlcmNlbnQgb2YgcG9wdWxhdGlvbiBhZ2FpbnN0IHRoZSBkaXNlYXNlICZxdW90O3NpciZxdW90OyBhdCB0aGUgbG9jYXRpb24gJnF1b3Q7U3dlZGVuJnF1b3Q7IChTV0UpLiIgY3JlYXRvcj0iZWRsdW5kIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3N0YW5kYXJkLmVjb3JlIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vSWRlbnRpZmlhYmxlIiBjcmVhdGVkPSIyMDEwLTA5LTAxIi8+Cis8L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZDpTSVJJbm9jdWxhdG9yPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5hdXRvbWF0aWNleHBlcmltZW50L3Jlc291cmNlcy9BdXRvbWF0ZWRFeHBlcmltZW50RXhhbXBsZS9leHBlcmltZW50cy9BdXRvbWF0ZWRFeHBlcmltZW50LmF1dG9tYXRpY2V4cGVyaW1lbnQgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmF1dG9tYXRpY2V4cGVyaW1lbnQvcmVzb3VyY2VzL0F1dG9tYXRlZEV4cGVyaW1lbnRFeGFtcGxlL2V4cGVyaW1lbnRzL0F1dG9tYXRlZEV4cGVyaW1lbnQuYXV0b21hdGljZXhwZXJpbWVudApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi43MmYwOWE4Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5hdXRvbWF0aWNleHBlcmltZW50L3Jlc291cmNlcy9BdXRvbWF0ZWRFeHBlcmltZW50RXhhbXBsZS9leHBlcmltZW50cy9BdXRvbWF0ZWRFeHBlcmltZW50LmF1dG9tYXRpY2V4cGVyaW1lbnQKQEAgLTAsMCArMSw4IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJBU0NJSSI/Pg0KKzxvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQ6QXV0b21hdGljRXhwZXJpbWVudCB4bWk6dmVyc2lvbj0iMi4wIiB4bWxuczp4bWk9Imh0dHA6Ly93d3cub21nLm9yZy9YTUkiIHhtbG5zOm9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuYXV0b21hdGljZXhwZXJpbWVudD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvYXV0b21hdGljZXhwZXJpbWVudC5lY29yZSIgdVJJPSJwbGF0Zm9ybTovcmVzb3VyY2UvQXV0b21hdGVkRXhwZXJpbWVudEV4YW1wbGUvZXhwZXJpbWVudHMvQXV0b21hdGVkRXhwZXJpbWVudC5hdXRvbWF0aWNleHBlcmltZW50IiB0eXBlVVJJPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vaWRlbnRpZmlhYmxlMjA5IiBlcnJvckFuYWx5c2lzQWxnb3JpdGhtPSJOZWRsZXItTWVhZCBBbGdvcml0aG0iIGVycm9yRnVuY3Rpb249IlNpbXBsZSBlcnJvciBmdW5jdGlvbiIgdG9sZXJhbmNlPSIxRS02IiByZWZlcmFuY2VEYXRhRGlyPSJwbGF0Zm9ybTovcmVzb3VyY2UvQXV0b21hdGVkRXhwZXJpbWVudEV4YW1wbGUvUmVjb3JkZWQgU2ltdWxhdGlvbnMvUmVmZXJlbmNlIiByZUluaXQ9InRydWUiIG1heGltdW1OdW1iZXJPZkl0ZXJhdGlvbnM9IjUiPg0KKyAgPGR1YmxpbkNvcmUgdGl0bGU9IkF1dG9tYXRpYyBFeHBlcmltZW50IEV4YW1wbGUiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9yZXNvdXJjZS9BdXRvbWF0ZWRFeHBlcmltZW50RXhhbXBsZS9leHBlcmltZW50cy9BdXRvbWF0ZWRFeHBlcmltZW50LmF1dG9tYXRpY2V4cGVyaW1lbnQiIGRlc2NyaXB0aW9uPSJBbiBleGFtcGxlIGF1dG9tYXRlZCBleHBlcmltZW50IiBjcmVhdG9yPSJtZXNpa2EiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZXhwZXJpbWVudC5lY29yZSIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL2lkZW50aWZpYWJsZTIwOSIgY3JlYXRlZD0iMjAxMC0wOS0wMSIvPg0KKyAgPGJhc2VTY2VuYXJpbyBocmVmPSIuLi9zY2VuYXJpb3MvQXV0b21hdGVkRXhwZXJpbWVudC5zY2VuYXJpbyMvIi8+DQorICAgIDxwYXJhbWV0ZXJzIGluaXRpYWxWYWx1ZT0iMC44IiBzdGVwPSIwLjIiIGZlYXR1cmVOYW1lPSJ0cmFuc21pc3Npb25SYXRlIiBsb3dlckJvdW5kPSIwLjAwMSIgdXBwZXJCb3VuZD0iMTAuMCIgdGFyZ2V0VVJJPSJwbGF0Zm9ybTovcmVzb3VyY2UvQXV0b21hdGVkRXhwZXJpbWVudEV4YW1wbGUvZGVjb3JhdG9ycy9TSVIuc3RhbmRhcmQiIC8+IAorICAgIDxwYXJhbWV0ZXJzIGluaXRpYWxWYWx1ZT0iMC4yIiBzdGVwPSIwLjMiIGZlYXR1cmVOYW1lPSJyZWNvdmVyeVJhdGUiIGxvd2VyQm91bmQ9IjAuMDAxIiB1cHBlckJvdW5kPSIyLjAiIHRhcmdldFVSST0icGxhdGZvcm06L3Jlc291cmNlL0F1dG9tYXRlZEV4cGVyaW1lbnRFeGFtcGxlL2RlY29yYXRvcnMvU0lSLnN0YW5kYXJkIiAvPiAKKyAgICA8cGFyYW1ldGVycyBpbml0aWFsVmFsdWU9IjIwIiBzdGVwPSIzMCIgZmVhdHVyZU5hbWU9Imlub2N1bGF0ZWRQZXJjZW50YWdlIiBsb3dlckJvdW5kPSIwIiB1cHBlckJvdW5kPSIxMDAiIHRhcmdldFVSST0icGxhdGZvcm06L3Jlc291cmNlL0F1dG9tYXRlZEV4cGVyaW1lbnRFeGFtcGxlL2RlY29yYXRvcnMvU0lSSW5vY3VsYXRvci5zdGFuZGFyZCIvPgorPC9vcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQ6QXV0b21hdGljRXhwZXJpbWVudD4NCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmF1dG9tYXRpY2V4cGVyaW1lbnQvcmVzb3VyY2VzL0F1dG9tYXRlZEV4cGVyaW1lbnRFeGFtcGxlL21vZGVscy9Nb2RlbDEubW9kZWwgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmF1dG9tYXRpY2V4cGVyaW1lbnQvcmVzb3VyY2VzL0F1dG9tYXRlZEV4cGVyaW1lbnRFeGFtcGxlL21vZGVscy9Nb2RlbDEubW9kZWwKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZWQyM2M3YQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuYXV0b21hdGljZXhwZXJpbWVudC9yZXNvdXJjZXMvQXV0b21hdGVkRXhwZXJpbWVudEV4YW1wbGUvbW9kZWxzL01vZGVsMS5tb2RlbApAQCAtMCwwICsxLDYgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8b3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsOk1vZGVsIHhtaTp2ZXJzaW9uPSIyLjAiIHhtbG5zOnhtaT0iaHR0cDovL3d3dy5vbWcub3JnL1hNSSIgeG1sbnM6b3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsPSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9tb2RlbC5lY29yZSIgdVJJPSJwbGF0Zm9ybTovcmVzb3VyY2UvQXV0b21hdGVkRXhwZXJpbWVudEV4YW1wbGUvbW9kZWxzL01vZGVsMS5tb2RlbCIgdHlwZVVSST0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL01vZGVsIj4KKyAgPGR1YmxpbkNvcmUgdGl0bGU9IiIgaWRlbnRpZmllcj0icGxhdGZvcm06L3Jlc291cmNlL0F1dG9tYXRlZEV4cGVyaW1lbnRFeGFtcGxlL21vZGVscy9Nb2RlbDEubW9kZWwiIGRlc2NyaXB0aW9uPSJNb2RlbCAmcXVvdDtNb2RlbDEmcXVvdDsiIGNyZWF0b3I9ImVkbHVuZCIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9tb2RlbC5lY29yZSIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL01vZGVsIiBjcmVhdGVkPSIyMDEwLTA5LTAxIi8+CisgIDxtb2RlbHMgaHJlZj0icGxhdGZvcm06L3Jlc291cmNlL0F1dG9tYXRlZEV4cGVyaW1lbnRFeGFtcGxlL21vZGVscy9Nb2RlbDIubW9kZWwjLyIvPgorICA8bm9kZURlY29yYXRvcnMgaHJlZj0icGxhdGZvcm06L3Jlc291cmNlL0F1dG9tYXRlZEV4cGVyaW1lbnRFeGFtcGxlL2RlY29yYXRvcnMvU0lSLnN0YW5kYXJkIy8iLz4KKzwvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsOk1vZGVsPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5hdXRvbWF0aWNleHBlcmltZW50L3Jlc291cmNlcy9BdXRvbWF0ZWRFeHBlcmltZW50RXhhbXBsZS9tb2RlbHMvTW9kZWwyLm1vZGVsIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5hdXRvbWF0aWNleHBlcmltZW50L3Jlc291cmNlcy9BdXRvbWF0ZWRFeHBlcmltZW50RXhhbXBsZS9tb2RlbHMvTW9kZWwyLm1vZGVsCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjE0YWE0ZjEKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmF1dG9tYXRpY2V4cGVyaW1lbnQvcmVzb3VyY2VzL0F1dG9tYXRlZEV4cGVyaW1lbnRFeGFtcGxlL21vZGVscy9Nb2RlbDIubW9kZWwKQEAgLTAsMCArMSw1IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbDpNb2RlbCB4bWk6dmVyc2lvbj0iMi4wIiB4bWxuczp4bWk9Imh0dHA6Ly93d3cub21nLm9yZy9YTUkiIHhtbG5zOm9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvbW9kZWwuZWNvcmUiIHVSST0icGxhdGZvcm06L3Jlc291cmNlL0F1dG9tYXRlZEV4cGVyaW1lbnRFeGFtcGxlL21vZGVscy9Nb2RlbDIubW9kZWwiIHR5cGVVUkk9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9Nb2RlbCI+CisgIDxkdWJsaW5Db3JlIHRpdGxlPSIiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9yZXNvdXJjZS9BdXRvbWF0ZWRFeHBlcmltZW50RXhhbXBsZS9tb2RlbHMvTW9kZWwyLm1vZGVsIiBkZXNjcmlwdGlvbj0iTW9kZWwgJnF1b3Q7TW9kZWwyJnF1b3Q7IiBjcmVhdG9yPSJlZGx1bmQiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvbW9kZWwuZWNvcmUiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9Nb2RlbCIgY3JlYXRlZD0iMjAxMC0wOS0wMSIvPgorICA8bW9kZWxzIGhyZWY9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS5wb3B1bGF0aW9uLmh1bWFuLm1vZGVscy9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L1NXRS9TV0VfMF8xX3BvcHVsYXRpb24ubW9kZWwjLyIvPgorPC9vcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWw6TW9kZWw+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmF1dG9tYXRpY2V4cGVyaW1lbnQvcmVzb3VyY2VzL0F1dG9tYXRlZEV4cGVyaW1lbnRFeGFtcGxlL3NjZW5hcmlvcy9BdXRvbWF0ZWRFeHBlcmltZW50LnNjZW5hcmlvIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5hdXRvbWF0aWNleHBlcmltZW50L3Jlc291cmNlcy9BdXRvbWF0ZWRFeHBlcmltZW50RXhhbXBsZS9zY2VuYXJpb3MvQXV0b21hdGVkRXhwZXJpbWVudC5zY2VuYXJpbwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5lNTczMjIwCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5hdXRvbWF0aWNleHBlcmltZW50L3Jlc291cmNlcy9BdXRvbWF0ZWRFeHBlcmltZW50RXhhbXBsZS9zY2VuYXJpb3MvQXV0b21hdGVkRXhwZXJpbWVudC5zY2VuYXJpbwpAQCAtMCwwICsxLDExIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zY2VuYXJpbzpTY2VuYXJpbyB4bWk6dmVyc2lvbj0iMi4wIiB4bWxuczp4bWk9Imh0dHA6Ly93d3cub21nLm9yZy9YTUkiIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIHhtbG5zOm9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zY2VuYXJpbz0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvc2NlbmFyaW8uZWNvcmUiIHhtbG5zOm9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zZXF1ZW5jZXI9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3NlcXVlbmNlci5lY29yZSIgeG1sbnM6b3JnLmVjbGlwc2Uuc3RlbS5zb2x2ZXJzLnJrPSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vc29sdmVycy9yayIgdVJJPSJwbGF0Zm9ybTovcmVzb3VyY2UvQXV0b21hdGVkRXhwZXJpbWVudEV4YW1wbGUvc2NlbmFyaW9zL0F1dG9tYXRlZEV4cGVyaW1lbnQuc2NlbmFyaW8iIHR5cGVVUkk9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9TY2VuYXJpbyI+CisgIDxkdWJsaW5Db3JlIHRpdGxlPSIiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9yZXNvdXJjZS9BdXRvbWF0ZWRFeHBlcmltZW50RXhhbXBsZS9zY2VuYXJpb3MvQXV0b21hdGVkRXhwZXJpbWVudC5zY2VuYXJpbyIgZGVzY3JpcHRpb249IlNjZW5hcmlvICZxdW90O0F1dG9tYXRlZEV4cGVyaW1lbnQmcXVvdDsiIGNyZWF0b3I9ImVkbHVuZCIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9zY2VuYXJpby5lY29yZSIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL1NjZW5hcmlvIiBjcmVhdGVkPSIyMDEwLTA5LTAxIi8+CisgIDxtb2RlbCBocmVmPSJwbGF0Zm9ybTovcmVzb3VyY2UvQXV0b21hdGVkRXhwZXJpbWVudEV4YW1wbGUvbW9kZWxzL01vZGVsMS5tb2RlbCMvIi8+CisgIDxzZXF1ZW5jZXIgeHNpOnR5cGU9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zZXF1ZW5jZXI6U2VxdWVudGlhbFNlcXVlbmNlciIgaHJlZj0icGxhdGZvcm06L3Jlc291cmNlL0F1dG9tYXRlZEV4cGVyaW1lbnRFeGFtcGxlL3NlcXVlbmNlcnMvU2VxdWVuY2VyLnNlcXVlbmNlciMvIi8+CisgIDxzY2VuYXJpb0RlY29yYXRvcnMgaHJlZj0icGxhdGZvcm06L3Jlc291cmNlL0F1dG9tYXRlZEV4cGVyaW1lbnRFeGFtcGxlL2RlY29yYXRvcnMvU0lSSW5vY3VsYXRvci5zdGFuZGFyZCMvIi8+CisgIDxzY2VuYXJpb0RlY29yYXRvcnMgaHJlZj0icGxhdGZvcm06L3Jlc291cmNlL0F1dG9tYXRlZEV4cGVyaW1lbnRFeGFtcGxlL2RlY29yYXRvcnMvU0lSSW5mZWN0b3Iuc3RhbmRhcmQjLyIvPgorICA8c29sdmVyIHhzaTp0eXBlPSJvcmcuZWNsaXBzZS5zdGVtLnNvbHZlcnMucms6UnVuZ2VLdXR0YSIgdVJJPSJzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9SdW5nZUt1dHRhU29sdmVyL0RGQ0JCNjFDMUM1NkM1OTIiIHR5cGVVUkk9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9Tb2x2ZXIiPgorICAgIDxkdWJsaW5Db3JlIGlkZW50aWZpZXI9InN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL1J1bmdlS3V0dGFTb2x2ZXIvREZDQkI2MUMxQzU2QzU5MiIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL1NvbHZlciIvPgorICA8L3NvbHZlcj4KKzwvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNjZW5hcmlvOlNjZW5hcmlvPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5hdXRvbWF0aWNleHBlcmltZW50L3Jlc291cmNlcy9BdXRvbWF0ZWRFeHBlcmltZW50RXhhbXBsZS9zZXF1ZW5jZXJzL1NlcXVlbmNlci5zZXF1ZW5jZXIgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmF1dG9tYXRpY2V4cGVyaW1lbnQvcmVzb3VyY2VzL0F1dG9tYXRlZEV4cGVyaW1lbnRFeGFtcGxlL3NlcXVlbmNlcnMvU2VxdWVuY2VyLnNlcXVlbmNlcgpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi40ZWFmM2U2Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5hdXRvbWF0aWNleHBlcmltZW50L3Jlc291cmNlcy9BdXRvbWF0ZWRFeHBlcmltZW50RXhhbXBsZS9zZXF1ZW5jZXJzL1NlcXVlbmNlci5zZXF1ZW5jZXIKQEAgLTAsMCArMSw2IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zZXF1ZW5jZXI6U2VxdWVudGlhbFNlcXVlbmNlciB4bWk6dmVyc2lvbj0iMi4wIiB4bWxuczp4bWk9Imh0dHA6Ly93d3cub21nLm9yZy9YTUkiIHhtbG5zOm9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zZXF1ZW5jZXI9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3NlcXVlbmNlci5lY29yZSIgdVJJPSJwbGF0Zm9ybTovcmVzb3VyY2UvQXV0b21hdGVkRXhwZXJpbWVudEV4YW1wbGUvc2VxdWVuY2Vycy9TZXF1ZW5jZXIuc2VxdWVuY2VyIiB0eXBlVVJJPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vSWRlbnRpZmlhYmxlIj4KKyAgPGR1YmxpbkNvcmUgdGl0bGU9IiIgaWRlbnRpZmllcj0icGxhdGZvcm06L3Jlc291cmNlL0F1dG9tYXRlZEV4cGVyaW1lbnRFeGFtcGxlL3NlcXVlbmNlcnMvU2VxdWVuY2VyLnNlcXVlbmNlciIgZGVzY3JpcHRpb249IlNlcXVlbnRpYWwgU2VxdWVuY2VyIHN0YXJ0aW5nIGZyb20gMjAxMC0wOS0wMSB0byAyMDEwLTExLTAxIHdpdGggYSBjeWNsZSBwZXJpb2Qgb2YgMSBkYXkuIiBjcmVhdG9yPSJlZGx1bmQiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvc2VxdWVuY2VyLmVjb3JlIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vU2VxdWVuY2VyIiBjcmVhdGVkPSIyMDEwLTA5LTAxIiB2YWxpZD0ic3RhcnQ9MjAxMC0wOS0wMTsgZW5kPTIwMTAtMTEtMDE7Ii8+CisgIDxzdGFydFRpbWUgdGltZT0iMjAxMC0wOS0wMVQxMjowMDowMC42MDgtMDcwMCIvPgorICA8ZW5kVGltZSB0aW1lPSIyMDEwLTExLTAxVDExOjU5OjU5LjYwOC0wNzAwIi8+Cis8L29yZy5lY2xpcHNlLnN0ZW0uY29yZS5zZXF1ZW5jZXI6U2VxdWVudGlhbFNlcXVlbmNlcj4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuYXV0b21hdGljZXhwZXJpbWVudC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS90ZXN0cy9hdXRvbWF0aWNleHBlcmltZW50L0F1dG9tYXRpY0V4cGVyaW1lbnRBbGxUZXN0cy5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5hdXRvbWF0aWNleHBlcmltZW50L3NyYy9vcmcvZWNsaXBzZS9zdGVtL3Rlc3RzL2F1dG9tYXRpY2V4cGVyaW1lbnQvQXV0b21hdGljRXhwZXJpbWVudEFsbFRlc3RzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDQ3NWMxYgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuYXV0b21hdGljZXhwZXJpbWVudC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS90ZXN0cy9hdXRvbWF0aWNleHBlcmltZW50L0F1dG9tYXRpY0V4cGVyaW1lbnRBbGxUZXN0cy5qYXZhCkBAIC0wLDAgKzEsMzkgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTEgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0udGVzdHMuYXV0b21hdGljZXhwZXJpbWVudDsKKworaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0OworaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0U3VpdGU7CitpbXBvcnQganVuaXQudGV4dHVpLlRlc3RSdW5uZXI7CisKKy8qKgorICogVGVzdCBzdWl0ZSBmb3IgQXV0b21hdGljIEV4cGVyaW1lbnQgdGVzdHMKKyAqCisgKi8KK3B1YmxpYyBjbGFzcyBBdXRvbWF0aWNFeHBlcmltZW50QWxsVGVzdHMgZXh0ZW5kcyBUZXN0U3VpdGUgCit7CisJcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgeworCQlUZXN0UnVubmVyLnJ1bihzdWl0ZSgpKTsKKwl9CisKKwlwdWJsaWMgc3RhdGljIFRlc3Qgc3VpdGUoKSB7CisJCVRlc3RTdWl0ZSBzdWl0ZSA9IG5ldyBBdXRvbWF0aWNFeHBlcmltZW50QWxsVGVzdHMoIkF1dG9tYXRpYyBFeHBlcmltZW50IFRlc3RzIik7CisJCXN1aXRlLmFkZFRlc3RTdWl0ZShBdXRvbWF0aWNFeHBlcmltZW50VGVzdC5jbGFzcyk7CisJCXN1aXRlLmFkZFRlc3RTdWl0ZShOZWxkZXJNZWFkQWxnb3JpdGhtVGVzdC5jbGFzcyk7CisJCXJldHVybiBzdWl0ZTsKKwl9CisKKwlwdWJsaWMgQXV0b21hdGljRXhwZXJpbWVudEFsbFRlc3RzKFN0cmluZyBuYW1lKSB7CisJCXN1cGVyKG5hbWUpOworCX0KKworfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5hdXRvbWF0aWNleHBlcmltZW50L3NyYy9vcmcvZWNsaXBzZS9zdGVtL3Rlc3RzL2F1dG9tYXRpY2V4cGVyaW1lbnQvQXV0b21hdGljRXhwZXJpbWVudFRlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuYXV0b21hdGljZXhwZXJpbWVudC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS90ZXN0cy9hdXRvbWF0aWNleHBlcmltZW50L0F1dG9tYXRpY0V4cGVyaW1lbnRUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzFiZDUxMgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuYXV0b21hdGljZXhwZXJpbWVudC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS90ZXN0cy9hdXRvbWF0aWNleHBlcmltZW50L0F1dG9tYXRpY0V4cGVyaW1lbnRUZXN0LmphdmEKQEAgLTAsMCArMSwxNzAgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5hdXRvbWF0aWNleHBlcmltZW50Ow0KKw0KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorICogQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLg0KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMNCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjANCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdA0KKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sDQorICoNCisgKiBDb250cmlidXRvcnM6DQorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbg0KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KKw0KK2ltcG9ydCBqYXZhLmlvLkZpbGU7DQoraW1wb3J0IGphdmEuaW8uRmlsZU5vdEZvdW5kRXhjZXB0aW9uOw0KK2ltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOw0KKw0KK2ltcG9ydCBqdW5pdC50ZXh0dWkuVGVzdFJ1bm5lcjsNCisNCitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkNvcmVFeGNlcHRpb247DQoraW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QbGF0Zm9ybTsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlVSSTsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnJlc291cmNlLlJlc291cmNlOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUucmVzb3VyY2UuUmVzb3VyY2VTZXQ7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5yZXNvdXJjZS5pbXBsLlJlc291cmNlU2V0SW1wbDsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5hdXRvbWF0aWNleHBlcmltZW50LkF1dG9tYXRpY0V4cGVyaW1lbnQ7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuYXV0b21hdGljZXhwZXJpbWVudC5FcnJvckFuYWx5c2lzQWxnb3JpdGhtOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQuRXJyb3JBbmFseXNpc0FsZ29yaXRobUZhY3Rvcnk7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5TVEVNWE1JUmVzb3VyY2VGYWN0b3J5SW1wbDsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi50ZXN0cy5JZGVudGlmaWFibGVUZXN0Ow0KKw0KK3B1YmxpYyBjbGFzcyBBdXRvbWF0aWNFeHBlcmltZW50VGVzdCANCisJZXh0ZW5kcyBJZGVudGlmaWFibGVUZXN0IHsNCisJDQorCXN0YXRpYyBmaW5hbCBTdHJpbmcgUlVOVElNRV9XT1JLU1BBQ0VfUEFUSCA9ICBQbGF0Zm9ybS5nZXRMb2NhdGlvbigpLnRvT1NTdHJpbmcoKTsNCisJcHJpdmF0ZSBmaW5hbCBzdGF0aWMgU3RyaW5nIFJFRkVSRU5DRV9ESVIgPSAiLi9yZXNvdXJjZXMvIjsgLy8kTk9OLU5MUy0xJA0KKwlwcml2YXRlIGZpbmFsIHN0YXRpYyBTdHJpbmcgQVVUT01BVEVEX0VYUEVSSU1FTlRfRVhBTVBMRSA9ICJBdXRvbWF0ZWRFeHBlcmltZW50RXhhbXBsZSI7Ly8kTk9OLU5MUy0xJA0KKwlwcml2YXRlIGZpbmFsIHN0YXRpYyBTdHJpbmcgc2VwID0gRmlsZS5zZXBhcmF0b3I7DQorCXByaXZhdGUgZmluYWwgc3RhdGljIFN0cmluZyBBVVRPTUFUSUNfRVhQRVJJTUVOVF9SVU5fVEFSR0VUID0gIi9leHBlcmltZW50cy9BdXRvbWF0ZWRFeHBlcmltZW50LmF1dG9tYXRpY2V4cGVyaW1lbnQiOyAvLyROT04tTkxTLTEkDQorCXByaXZhdGUgc3RhdGljIEZpbGUgdGFyZ2V0RGlyZWN0b3J5ID0gbnVsbDsNCisNCisJDQorCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsNCisJCVRlc3RSdW5uZXIucnVuKEF1dG9tYXRpY0V4cGVyaW1lbnRUZXN0LmNsYXNzKTsNCisJfQ0KKw0KKwlwdWJsaWMgQXV0b21hdGljRXhwZXJpbWVudFRlc3QoU3RyaW5nIG5hbWUpIHsNCisJCXN1cGVyKG5hbWUpOw0KKwl9DQorDQorCS8qKg0KKwkgKiBSZXR1cm5zIHRoZSBmaXh0dXJlIGZvciB0aGlzIEV4cGVyaW1lbnQgdGVzdCBjYXNlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jDQorCSAqIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJQE92ZXJyaWRlDQorCXByb3RlY3RlZCBBdXRvbWF0aWNFeHBlcmltZW50IGdldEZpeHR1cmUoKSB7DQorCQlyZXR1cm4gKEF1dG9tYXRpY0V4cGVyaW1lbnQpZml4dHVyZTsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIA0KKwkgKiBAc2VlIGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZSNzZXRVcCgpDQorCSAqIEBnZW5lcmF0ZWQgTk9UDQorCSAqLw0KKwlAT3ZlcnJpZGUNCisJcHJvdGVjdGVkIHZvaWQgc2V0VXAoKSB0aHJvd3MgRXhjZXB0aW9uIHsNCisJCXNldEZpeHR1cmUoY3JlYXRlRml4dHVyZSgpKTsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBzZWUganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlI3RlYXJEb3duKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJQE92ZXJyaWRlDQorCXByb3RlY3RlZCB2b2lkIHRlYXJEb3duKCkgdGhyb3dzIEV4Y2VwdGlvbiB7DQorCQlzZXRGaXh0dXJlKG51bGwpOw0KKwkgICAgLy8vLyBjbGVhbiB1cCAvLy8vDQorCQl0cnkgew0KKwkJCWFzc2VydFRydWUoVGVzdFV0aWwucmVtb3ZlRGlyZWN0b3J5KHRhcmdldERpcmVjdG9yeSkpOw0KKwkJfSBjYXRjaChDb3JlRXhjZXB0aW9uIGNlKSB7DQorCQkJY2UucHJpbnRTdGFja1RyYWNlKCk7DQorCQkJZmFpbCgpOw0KKwkJfQkNCisJCS8vLy8vLy8vLy8vLy8vLy8vLy8vLw0KKwl9DQorDQorCS8qKg0KKwkgKiBUZXN0cyB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZXhwZXJpbWVudC5FeHBlcmltZW50I3VwZGF0ZVNjZW5hcmlvKCkgPGVtPlVwZGF0ZSBTY2VuYXJpbzwvZW0+fScNCisJICogb3BlcmF0aW9uLiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogDQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmV4cGVyaW1lbnQuRXhwZXJpbWVudCN1cGRhdGVTY2VuYXJpbygpDQorCSAqIEBnZW5lcmF0ZWQgTk9UDQorCSAqLw0KKwlwdWJsaWMgdm9pZCB0ZXN0QXV0b21hdGljRXhwZXJpbWVudCgpIA0KKwl7DQorCQlBdXRvbWF0aWNFeHBlcmltZW50IGF1dG9tYXRpY0V4cGVyaW1lbnQgPSBnZXRGaXh0dXJlKCk7DQorCQlhc3NlcnROb3ROdWxsKGF1dG9tYXRpY0V4cGVyaW1lbnQpOw0KKwkJU3RyaW5nIGFsZ29yaXRobU5hbWUgPSBhdXRvbWF0aWNFeHBlcmltZW50LmdldEVycm9yQW5hbHlzaXNBbGdvcml0aG0oKTsNCisJCUVycm9yQW5hbHlzaXNBbGdvcml0aG0gYWxnb3JpdGhtID0gDQorCQkJRXJyb3JBbmFseXNpc0FsZ29yaXRobUZhY3RvcnkuSU5TVEFOQ0UuY3JlYXRlRXJyb3JBbmFseXNpc0FsZ29yaXRobShhdXRvbWF0aWNFeHBlcmltZW50KTsNCisJCWFzc2VydE5vdE51bGwoYWxnb3JpdGhtKTsNCisJCWFsZ29yaXRobS5pbml0KGF1dG9tYXRpY0V4cGVyaW1lbnQsIGFsZ29yaXRobSk7DQorCQlhbGdvcml0aG0uZXhlY3V0ZSgpOw0KKwkJYXNzZXJ0VHJ1ZSh0cnVlKTsNCisJfQ0KKw0KKwkvKioNCisJICogQHJldHVybiBhbiB7QGxpbmsgQXV0b21hdGljRXhwZXJpbWVudH0gZm9yIHRlc3RpbmcuDQorCSAqLw0KKwlwdWJsaWMgc3RhdGljIEF1dG9tYXRpY0V4cGVyaW1lbnQgY3JlYXRlRml4dHVyZSgpIHsNCisJCS8vIDEuIGNvcHkgdGhlIHByb2plY3QgZm9sZGVycyBmb3IgdGhlIGV4cGVyaW1lbnQgdG8gcnVuIA0KKwkJLy8gICAgRlJPTSB0aGUgc291cmNlIGRpcmVjdG9yeSBUTyB0aGUgcnVudGltZSB3b3Jrc3BhY2Ugd2hlcmUgZXZlciB0aGF0IGlzDQorCQlGaWxlIHJlZkRpcmVjdG9yeSA9IG5ldyBGaWxlKFJFRkVSRU5DRV9ESVIpOw0KKwkJaWYgKHJlZkRpcmVjdG9yeS5pc0RpcmVjdG9yeSgpKSB7DQorCQkJLy8gc2hvdWxkIGFsd2F5cyBiZSB0cnVlDQorCQkJRmlsZVtdIHByb2plY3RzID0gcmVmRGlyZWN0b3J5Lmxpc3RGaWxlcygpOw0KKwkJCWlmKHByb2plY3RzPT1udWxsKSBmYWlsKCJFcnJvcjpBdXRvbWF0ZWRFeHBlcmltZW50IHByb2plY3RzIG5vdCBmb3VuZCAhISIpOy8vJE5PTi1OTFMtMSQNCisJCQlmb3IgKGludCBpID0gMDsgaSA8IHByb2plY3RzLmxlbmd0aDsgaSArKykgew0KKwkJCQlpZihwcm9qZWN0c1tpXS5pc0RpcmVjdG9yeSgpKSB7DQorCQkJCQlTdHJpbmcgcnVuUHJvamVjdE5hbWUgPSBSVU5USU1FX1dPUktTUEFDRV9QQVRIK3NlcCtwcm9qZWN0c1tpXS5nZXROYW1lKCk7DQorCQkJCQlpZihwcm9qZWN0c1tpXS5nZXROYW1lKCkuZXF1YWxzSWdub3JlQ2FzZShBVVRPTUFURURfRVhQRVJJTUVOVF9FWEFNUExFKSkgew0KKwkJCQkJCXRhcmdldERpcmVjdG9yeSA9IG5ldyBGaWxlKHJ1blByb2plY3ROYW1lKTsNCisJCQkJCQl0cnkgew0KKwkJCQkJCQlUZXN0VXRpbC5pbXBvcnRQcm9qZWN0KHByb2plY3RzW2ldLCB0YXJnZXREaXJlY3RvcnkpOw0KKwkJCQkJCQkvLyAyLiB0aGVyZSBpcyBvbmx5IG9uZSBpbiB0aGlzIHRlc3QuIEludGVncmF0aW9uIHRlc3RzIHdpbGwgcHJvdmlkZSBmb3IgbW9yZS4NCisJCQkJCQkJDQorCQkJCQkJCQlyZXR1cm4gbG9hZEF1dG9tYXRpY0V4cGVyaW1lbnQocnVuUHJvamVjdE5hbWUrQVVUT01BVElDX0VYUEVSSU1FTlRfUlVOX1RBUkdFVCk7DQorCQkJCQkJCQ0KKwkJCQkJCX0gY2F0Y2ggKEV4Y2VwdGlvbiBpb2UpIHsNCisJCQkJCQkJU3lzdGVtLm91dC5wcmludGxuKCJDb3B5IGZhaWxlZCAiK2lvZS5nZXRNZXNzYWdlKCkpOw0KKwkJCQkJCQlpb2UucHJpbnRTdGFja1RyYWNlKCk7DQorCQkJCQkJCWZhaWwoIkVycm9yOkF1dG9tYXRlZEV4cGVyaW1lbnQgZmFpbGVkIHRvIGNvcHkgdGVzdCBwcm9qZWN0ICAhISIpOy8vJE5PTi1OTFMtMSQNCisJCQkJCQl9DQorCQkJCQl9DQorCQkJCX0vLyBpZiBwcm9qZWN0IGRpcmVjdG9yeQ0KKwkJCX0vL2Zvcg0KKwkNCisJCX0vLyBpZg0KKwkJLy8gZWxzZSB3ZSBmYWlsZQ0KKwkJZmFpbCgiRXJyb3I6QXV0b21hdGVkRXhwZXJpbWVudCBmYWlsZWQgdG8gaW5pdGlhbGl6ZSB0ZXN0IHByb2plY3QgICEhIik7Ly8kTk9OLU5MUy0xJA0KKwkJcmV0dXJuIG51bGw7DQorCX0NCisJDQorCXN0YXRpYyBBdXRvbWF0aWNFeHBlcmltZW50IGxvYWRBdXRvbWF0aWNFeHBlcmltZW50KGZpbmFsIFN0cmluZyBmaWxlbmFtZSkgew0KKwkJZmluYWwgUmVzb3VyY2VTZXQgcmVzb3VyY2VTZXQgPSBuZXcgUmVzb3VyY2VTZXRJbXBsKCk7DQorCQlyZXNvdXJjZVNldC5nZXRSZXNvdXJjZUZhY3RvcnlSZWdpc3RyeSgpLmdldEV4dGVuc2lvblRvRmFjdG9yeU1hcCgpLnB1dCgiKiIsIC8vJE5PTi1OTFMtMSQNCisJCQkJU1RFTVhNSVJlc291cmNlRmFjdG9yeUltcGwuSU5TVEFOQ0UpOw0KKwkJcmVzb3VyY2VTZXQuZ2V0UmVzb3VyY2VGYWN0b3J5UmVnaXN0cnkoKS5nZXRQcm90b2NvbFRvRmFjdG9yeU1hcCgpLnB1dCgicGxhdGZvcm0iLCAvLyROT04tTkxTLTEkDQorCQkJCVNURU1YTUlSZXNvdXJjZUZhY3RvcnlJbXBsLklOU1RBTkNFKTsNCisJCWZpbmFsIFJlc291cmNlIHJlc291cmNlID0gcmVzb3VyY2VTZXQuZ2V0UmVzb3VyY2UoVVJJLmNyZWF0ZUZpbGVVUkkoZmlsZW5hbWUpLCB0cnVlKTsNCisJCXRyeSANCisJCXsJCQkNCisJCQlyZXNvdXJjZS5sb2FkKG51bGwpOw0KKwkJfSANCisJCWNhdGNoIChGaWxlTm90Rm91bmRFeGNlcHRpb24gZSkgDQorCQl7DQorCQkJZS5wcmludFN0YWNrVHJhY2UoKTsNCisJCX0gDQorCQljYXRjaCAoSU9FeGNlcHRpb24gZSkgDQorCQl7DQorCQkJZS5wcmludFN0YWNrVHJhY2UoKTsNCisJCX0NCisJCUF1dG9tYXRpY0V4cGVyaW1lbnQgdG9SZXR1cm4gPSAoQXV0b21hdGljRXhwZXJpbWVudClyZXNvdXJjZS5nZXRDb250ZW50cygpLmdldCgwKTsNCisJCXJldHVybiB0b1JldHVybjsNCisJfQ0KK30NCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmF1dG9tYXRpY2V4cGVyaW1lbnQvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdGVzdHMvYXV0b21hdGljZXhwZXJpbWVudC9OZWxkZXJNZWFkQWxnb3JpdGhtVGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5hdXRvbWF0aWNleHBlcmltZW50L3NyYy9vcmcvZWNsaXBzZS9zdGVtL3Rlc3RzL2F1dG9tYXRpY2V4cGVyaW1lbnQvTmVsZGVyTWVhZEFsZ29yaXRobVRlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YTgxYThjCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5hdXRvbWF0aWNleHBlcmltZW50L3NyYy9vcmcvZWNsaXBzZS9zdGVtL3Rlc3RzL2F1dG9tYXRpY2V4cGVyaW1lbnQvTmVsZGVyTWVhZEFsZ29yaXRobVRlc3QuamF2YQpAQCAtMCwwICsxLDY4IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0udGVzdHMuYXV0b21hdGljZXhwZXJpbWVudDsNCisNCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyAqIENvcHlyaWdodCAoYykgMjAwOSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4NCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzDQorICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wDQorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQNCisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbA0KKyAqDQorICogQ29udHJpYnV0b3JzOg0KKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24NCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCisNCitpbXBvcnQgamF2YS51dGlsLkFycmF5czsNCisNCitpbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOw0KKw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLkFuYWx5c2lzUGFja2FnZTsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5FcnJvclJlc3VsdDsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5hdXRvbWF0aWNleHBlcmltZW50Lk5lbGRlck1lYWRBbGdvcml0aG07DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuYXV0b21hdGljZXhwZXJpbWVudC5TaW1wbGV4RnVuY3Rpb247DQorDQorcHVibGljIGNsYXNzIE5lbGRlck1lYWRBbGdvcml0aG1UZXN0IGV4dGVuZHMgVGVzdENhc2Ugew0KKwlib29sZWFuIGRlYnVnID0gZmFsc2U7DQorCQ0KKwlwdWJsaWMgTmVsZGVyTWVhZEFsZ29yaXRobVRlc3QoU3RyaW5nIG5hbWUpIHsNCisJCXN1cGVyKG5hbWUpOw0KKwl9DQorDQorCXB1YmxpYyB2b2lkIHRlc3RFeGVjdXRlKCkgew0KKwkJTmVsZGVyTWVhZEFsZ29yaXRobSBuZWxkZXIgPSBuZXcgTmVsZGVyTWVhZEFsZ29yaXRobSgpOw0KKwkJbmVsZGVyLnNldFBhcmFtZXRlckxpbWl0cygwLCAwLjAsIDk5OTk5OTkuMCk7DQorCQluZWxkZXIuc2V0UGFyYW1ldGVyTGltaXRzKDEsIDAuMCwgOTk5OTk5OS4wKTsNCisJCWRvdWJsZVtdIGluaXRTdGFydCA9IHsgMS44LCAxLjIgfTsNCisJCWRvdWJsZVtdIHN0ZXAgPSB7IDAuNSwgMC41IH07DQorCQluZWxkZXIuZXhlY3V0ZShuZXcgU2FtcGxlRnVuY3Rpb24oKSwgaW5pdFN0YXJ0LCBzdGVwLCAwLjAxLCAtMSk7DQorCQlTeXN0ZW0ub3V0LnByaW50bG4oIlJlc3VsdHM6Iik7DQorCQlTeXN0ZW0ub3V0LnByaW50bG4oIk1pbmltdW0gUGFyYW1ldGVycyAtICIgKyBBcnJheXMudG9TdHJpbmcobmVsZGVyLmdldE1pbmltdW1QYXJhbWV0ZXJzVmFsdWVzKCkpKTsNCisJCVN5c3RlbS5vdXQucHJpbnRsbigiTWluaW11bSBGdW5jdGlvbiBWYWx1ZSAtICIgKyBuZWxkZXIuZ2V0TWluaW11bUZ1bmN0aW9uVmFsdWUoKSk7DQorCQlhc3NlcnRUcnVlKE1hdGgucm91bmQobmVsZGVyLmdldE1pbmltdW1QYXJhbWV0ZXJzVmFsdWVzKClbMF0pID09IDMpOw0KKwkJYXNzZXJ0VHJ1ZShNYXRoLnJvdW5kKG5lbGRlci5nZXRNaW5pbXVtUGFyYW1ldGVyc1ZhbHVlcygpWzFdKSA9PSAyKTsNCisJCWFzc2VydFRydWUoTWF0aC5yb3VuZChuZWxkZXIuZ2V0TWluaW11bUZ1bmN0aW9uVmFsdWUoKSkgPT0gLTcpOw0KKwl9DQorCQ0KKwljbGFzcyBTYW1wbGVGdW5jdGlvbiBpbXBsZW1lbnRzIFNpbXBsZXhGdW5jdGlvbiB7DQorDQorCQlwdWJsaWMgRXJyb3JSZXN1bHQgZ2V0VmFsdWUoZG91YmxlW10gcGFyYW1ldGVycykgew0KKwkJCS8vZih4LHkpID0gLTR4ICsgeF4yIC0geSAtIHh5ICsgeV4yDQorCQkJLy9Mb2NhbCBtaW5pbXVtIGZvciB0aGlzIGZ1bmN0aW9uIGlzIC03IGF0IHg9MyBhbmQgeT0yDQorCQkJZG91YmxlIHggPSBwYXJhbWV0ZXJzWzBdOw0KKwkJCWRvdWJsZSB5ID0gcGFyYW1ldGVyc1sxXTsNCisJCQlkb3VibGUgcmVzdWx0ID0gLTQgKiB4Ow0KKwkJCXJlc3VsdCArPSBNYXRoLnBvdyh4LCAyKTsNCisJCQlyZXN1bHQgLT0geTsNCisJCQlyZXN1bHQgLT0geCAqIHk7DQorCQkJcmVzdWx0ICs9IE1hdGgucG93KHksIDIpOw0KKwkJCWlmKGRlYnVnKSB7DQorCQkJCVN5c3RlbS5vdXQucHJpbnRsbigiRnVuY3Rpb24gdmFsdWUgZm9yIHg9IiArIHggKyAiLCB5PSIgKyB5ICsgIiBpczogIiArIHJlc3VsdCk7DQorCQkJfQ0KKwkJCQ0KKwkJCUVycm9yUmVzdWx0IHJlcyA9IEFuYWx5c2lzUGFja2FnZS5lSU5TVEFOQ0UuZ2V0QW5hbHlzaXNGYWN0b3J5KCkuY3JlYXRlRXJyb3JSZXN1bHQoKTsNCisJCQlyZXMuc2V0RXJyb3IocmVzdWx0KTsNCisJCQlyZXR1cm4gcmVzOw0KKwkJfQ0KKwkJDQorCX0NCisNCit9DQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5hdXRvbWF0aWNleHBlcmltZW50L3NyYy9vcmcvZWNsaXBzZS9zdGVtL3Rlc3RzL2F1dG9tYXRpY2V4cGVyaW1lbnQvVGVzdFV0aWwuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuYXV0b21hdGljZXhwZXJpbWVudC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS90ZXN0cy9hdXRvbWF0aWNleHBlcmltZW50L1Rlc3RVdGlsLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjljZjU5NAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuYXV0b21hdGljZXhwZXJpbWVudC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS90ZXN0cy9hdXRvbWF0aWNleHBlcmltZW50L1Rlc3RVdGlsLmphdmEKQEAgLTAsMCArMSwxMDYgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5hdXRvbWF0aWNleHBlcmltZW50OworCitpbXBvcnQgamF2YS5pby5GaWxlOworaW1wb3J0IGphdmEuaW8uRmlsZUlucHV0U3RyZWFtOworaW1wb3J0IGphdmEuaW8uRmlsZU91dHB1dFN0cmVhbTsKK2ltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOworaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW07CitpbXBvcnQgamF2YS5pby5PdXRwdXRTdHJlYW07CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdERlc2NyaXB0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLlJlc291cmNlc1BsdWdpbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQ29yZUV4Y2VwdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGF0aDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGxhdGZvcm07CisKKy8qKgorICogVGVzdFV0aWwKKyAqIEBhdXRob3IgamhrYXVmCisgKgorICovCitwdWJsaWMgY2xhc3MgVGVzdFV0aWwgeworCQorCXN0YXRpYyBmaW5hbCBTdHJpbmcgUlVOVElNRV9XT1JLU1BBQ0VfUEFUSCA9ICBQbGF0Zm9ybS5nZXRMb2NhdGlvbigpLnRvT1NTdHJpbmcoKTsKKwkKKwkvKioKKwkgKiBUaGlzIHdpbGwgY3JlYXRlIHRhcmdldExvY2F0aW9uIGlmIGl0IGRvZXMgbm90IGFscmVhZHkgZXhpc3QKKwkgKiBAcGFyYW0gc291cmNlRGlyZWN0b3J5IHNvdXJjZSBkaXJlY3RvcnkKKwkgKiBAcGFyYW0gdGFyZ2V0RGlyZWN0b3J5IGRlc3RpbmF0aW9uIGRpcmVjdG9yeQorCSAqIEB0aHJvd3MgSU9FeGNlcHRpb24KKwkgKiBAdGhyb3dzIENvcmVFeGNlcHRpb24gCisJICovCisgICAgcHVibGljIHN0YXRpYyB2b2lkIGNvcHlEaXJlY3RvcnlSZWN1cnNpdmUoRmlsZSBzb3VyY2VEaXJlY3RvcnkgLCBGaWxlIHRhcmdldERpcmVjdG9yeSkKKyAgICB0aHJvd3MgSU9FeGNlcHRpb24sIENvcmVFeGNlcHRpb24geworICAgIAkKKyAgICAgICAgaWYgKHNvdXJjZURpcmVjdG9yeS5pc0RpcmVjdG9yeSgpKSB7CisgICAgICAgICAgICBpZiAoIXRhcmdldERpcmVjdG9yeS5leGlzdHMoKSkgeworICAgICAgICAgICAgICAgIHRhcmdldERpcmVjdG9yeS5ta2RpcigpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBTdHJpbmdbXSBjaGlsZHJlbiA9IHNvdXJjZURpcmVjdG9yeS5saXN0KCk7CisgICAgICAgICAgICBmb3IgKGludCBpPTA7IGk8Y2hpbGRyZW4ubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgICAgICBjb3B5RGlyZWN0b3J5UmVjdXJzaXZlKG5ldyBGaWxlKHNvdXJjZURpcmVjdG9yeSwgY2hpbGRyZW5baV0pLAorICAgICAgICAgICAgICAgICAgICAgICAgbmV3IEZpbGUodGFyZ2V0RGlyZWN0b3J5LCBjaGlsZHJlbltpXSkpOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgCisgICAgICAgICAgICBJbnB1dFN0cmVhbSBpbnB1dFN0cmVhbSA9IG5ldyBGaWxlSW5wdXRTdHJlYW0oc291cmNlRGlyZWN0b3J5KTsKKyAgICAgICAgICAgIE91dHB1dFN0cmVhbSBvdXRwdXRTdHJlYW0gPSBuZXcgRmlsZU91dHB1dFN0cmVhbSh0YXJnZXREaXJlY3RvcnkpOworICAgICAgICAgICAgCisgICAgICAgICAgICAvLyBDb3B5IHRoZSBiaXRzIGZyb20gaW5zdHJlYW0gdG8gb3V0c3RyZWFtCisgICAgICAgICAgICBieXRlW10gYnVmZmVyID0gbmV3IGJ5dGVbMTAyNF07CisgICAgICAgICAgICBpbnQgbGVuOworICAgICAgICAgICAgd2hpbGUgKChsZW4gPSBpbnB1dFN0cmVhbS5yZWFkKGJ1ZmZlcikpID4gMCkgeworICAgICAgICAgICAgICAgIG91dHB1dFN0cmVhbS53cml0ZShidWZmZXIsIDAsIGxlbik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpbnB1dFN0cmVhbS5jbG9zZSgpOworICAgICAgICAgICAgb3V0cHV0U3RyZWFtLmNsb3NlKCk7CisgICAgICAgIH0KKyAgICAgIAorICAgIH0vL2NvcHlEaXJlY3RvcnkKKyAgICAKKyAgICAKKyAgICAvKioKKyAgICAgKiAKKyAgICAgKiBAcGFyYW0gc291cmNlRGlyZWN0b3J5CisgICAgICogQHBhcmFtIHRhcmdldERpcmVjdG9yeQorICAgICAqIEB0aHJvd3MgSU9FeGNlcHRpb24KKyAgICAgKiBAdGhyb3dzIENvcmVFeGNlcHRpb24KKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIHZvaWQgaW1wb3J0UHJvamVjdChGaWxlIHNvdXJjZURpcmVjdG9yeSAsIEZpbGUgdGFyZ2V0RGlyZWN0b3J5KSAgdGhyb3dzIElPRXhjZXB0aW9uLCBDb3JlRXhjZXB0aW9uIHsKKyAgICAJIAorICAgICAgICBpZih0YXJnZXREaXJlY3RvcnkuZXhpc3RzKCkpIHJldHVybjsgLy8gYWxyZWFkeSBleGlzdHMKKyAgICAJaWYgKHNvdXJjZURpcmVjdG9yeS5pc0RpcmVjdG9yeSgpKSB7CisgICAgICAgICAgY29weURpcmVjdG9yeVJlY3Vyc2l2ZShzb3VyY2VEaXJlY3RvcnksIHRhcmdldERpcmVjdG9yeSk7CisgICAgICAgIH0gCisgICAgICAgIAorICAgICAgICAvLyBkb25lIGNvcHlpbmcuIE5vdyBjcmVhdGUgdGhlIEVjbGlwc2UgT1NHaSBQcm9qZWN0ICAgCisgICAgICAgIFN0cmluZyBwYXRoU1RSID0gdGFyZ2V0RGlyZWN0b3J5LmdldEFic29sdXRlUGF0aCgpKyIvLnByb2plY3QiOy8vJE5PTi1OTFMtMSQKKyAgICAgICAgSVByb2plY3REZXNjcmlwdGlvbiBkZXNjcmlwdGlvbiA9IFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5sb2FkUHJvamVjdERlc2NyaXB0aW9uKG5ldyBQYXRoKHBhdGhTVFIpKTsKKyAgICAgICAgSVByb2plY3QgcHJvamVjdCA9IFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5nZXRSb290KCkuZ2V0UHJvamVjdChkZXNjcmlwdGlvbi5nZXROYW1lKCkpOworICAgICAgICBwcm9qZWN0LmNyZWF0ZShkZXNjcmlwdGlvbiwgbnVsbCk7CisgICAgICAgIHByb2plY3Qub3BlbihudWxsKTsKKyAgICAgfS8vY29weURpcmVjdG9yeQorICAgIAorICAgIC8qKgorICAgICAqIAorICAgICAqIEBwYXJhbSB0YXJnZXREaXJlY3RvcnkKKyAgICAgKiBAdGhyb3dzIENvcmVFeGNlcHRpb24gCisgICAgICogCisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBib29sZWFuIHJlbW92ZURpcmVjdG9yeShGaWxlIHRhcmdldERpcmVjdG9yeSkgdGhyb3dzIENvcmVFeGNlcHRpb24gIHsKKyAgICAJCisgICAgCVN0cmluZyBwYXRoU1RSID0gdGFyZ2V0RGlyZWN0b3J5LmdldEFic29sdXRlUGF0aCgpKyIvLnByb2plY3QiOyAvLyROT04tTkxTLTEkCisgICAgICAgIElQcm9qZWN0RGVzY3JpcHRpb24gZGVzY3JpcHRpb24gPSBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkubG9hZFByb2plY3REZXNjcmlwdGlvbihuZXcgUGF0aChwYXRoU1RSKSk7CisgICAgICAgIElQcm9qZWN0IHByb2plY3QgPSBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuZ2V0Um9vdCgpLmdldFByb2plY3QoZGVzY3JpcHRpb24uZ2V0TmFtZSgpKTsKKyAgICAJcHJvamVjdC5kZWxldGUodHJ1ZSwgdHJ1ZSwgbnVsbCk7CisgICAgCWlmKHRhcmdldERpcmVjdG9yeS5leGlzdHMoKSkgeworICAgIAkJcmV0dXJuIHRhcmdldERpcmVjdG9yeS5kZWxldGUoKTsKKyAgICAJfQorICAgIAlyZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgCisgICAgCisKK30vLyBUZXN0VXRpbApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5hdXRvbWF0aWNleHBlcmltZW50L3Rlc3QueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5hdXRvbWF0aWNleHBlcmltZW50L3Rlc3QueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM4NzdmNDgKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmF1dG9tYXRpY2V4cGVyaW1lbnQvdGVzdC54bWwKQEAgLTAsMCArMSw1MyBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKworPHByb2plY3QgbmFtZT0idGVzdHN1aXRlIiBkZWZhdWx0PSJydW4iIGJhc2VkaXI9Ii4iPgorICA8IS0tIFRoZSBwcm9wZXJ0eSAke2VjbGlwc2UtaG9tZX0gc2hvdWxkIGJlIHBhc3NlZCBpbnRvIHRoaXMgc2NyaXB0IC0tPgorICA8IS0tIFNldCBhIG1lYW5pbmdmdWwgZGVmYXVsdCB2YWx1ZSBmb3Igd2hlbiBpdCBpcyBub3QuIC0tPgorICA8cHJvcGVydHkgbmFtZT0iZWNsaXBzZS1ob21lIiB2YWx1ZT0iIi8+CisKKworICA8IS0tIHNldHMgdGhlIHByb3BlcnRpZXMgZWNsaXBzZS1ob21lLCBhbmQgbGlicmFyeS1maWxlIC0tPgorICA8cHJvcGVydHkgbmFtZT0icGx1Z2luLW5hbWUiIHZhbHVlPSJvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmF1dG9tYXRpY2V4cGVyaW1lbnQiLz4KKyAgPHByb3BlcnR5IG5hbWU9ImxpYnJhcnktZmlsZSIKKyAgICAgICAgICAgIHZhbHVlPSIke2VjbGlwc2UtaG9tZX0vcGx1Z2lucy9vcmcuZWNsaXBzZS50ZXN0XzMuMy4wL2xpYnJhcnkueG1sIi8+CisKKyAgPCEtLSBUaGlzIHRhcmdldCBob2xkcyBhbGwgaW5pdGlhbGl6YXRpb24gY29kZSB0aGF0IG5lZWRzIHRvIGJlIGRvbmUgZm9yIC0tPgorICA8IS0tIGFsbCB0ZXN0cyB0aGF0IGFyZSB0byBiZSBydW4uIEluaXRpYWxpemF0aW9uIGZvciBpbmRpdmlkdWFsIHRlc3RzIC0tPgorICA8IS0tIHNob3VsZCBiZSBkb25lIHdpdGhpbiB0aGUgYm9keSBvZiB0aGUgc3VpdGUgdGFyZ2V0LiAtLT4KKyAgPHRhcmdldCBuYW1lPSJpbml0Ij4KKyAgICA8dHN0YW1wLz4KKyAgICA8ZGVsZXRlPgorICAgICAgPGZpbGVzZXQgZGlyPSIke2VjbGlwc2UtaG9tZX0iIGluY2x1ZGVzPSJvcmcqLnhtbCIvPgorICAgIDwvZGVsZXRlPgorICA8L3RhcmdldD4KKworICA8IS0tIFRoaXMgdGFyZ2V0IGRlZmluZXMgdGhlIHRlc3RzIHRoYXQgbmVlZCB0byBiZSBydW4uIC0tPgorICA8dGFyZ2V0IG5hbWU9InN1aXRlIj4KKyAgICA8cHJvcGVydHkgbmFtZT0iZGF0YS1kaXIiIHZhbHVlPSIke2VjbGlwc2UtaG9tZX0vdG1wIi8+CisgICAgPGRlbGV0ZSBkaXI9IiR7ZGF0YS1kaXJ9IiBxdWlldD0idHJ1ZSIvPgorICAgIDxhbnQgdGFyZ2V0PSJ1aS10ZXN0IiBhbnRmaWxlPSIke2xpYnJhcnktZmlsZX0iIGRpcj0iJHtlY2xpcHNlLWhvbWV9Ij4KKyAgICAgIDxwcm9wZXJ0eSBuYW1lPSJkYXRhLWRpciIgdmFsdWU9IiR7ZGF0YS1kaXJ9Ii8+CisgICAgICA8cHJvcGVydHkgbmFtZT0icGx1Z2luLW5hbWUiIHZhbHVlPSIke3BsdWdpbi1uYW1lfSIvPgorICAgICAgPHByb3BlcnR5IG5hbWU9ImNsYXNzbmFtZSIgdmFsdWU9Im9yZy5lY2xpcHNlLnN0ZW0udGVzdHMuYXV0b21hdGljZXhwZXJpbWVudC5BdXRvbWF0aWNFeHBlcmltZW50QWxsVGVzdHMiLz4KKyAgICA8L2FudD4KKyAgPC90YXJnZXQ+CisKKyAgPCEtLSBUaGlzIHRhcmdldCBob2xkcyBjb2RlIHRvIGNsZWFudXAgdGhlIHRlc3RpbmcgZW52aXJvbm1lbnQgYWZ0ZXIgLS0+CisgIDwhLS0gYWZ0ZXIgYWxsIG9mIHRoZSB0ZXN0cyBoYXZlIGJlZW4gcnVuLiBZb3UgY2FuIHVzZSB0aGlzIHRhcmdldCB0byAtLT4KKyAgPCEtLSBkZWxldGUgdGVtcG9yYXJ5IGZpbGVzIHRoYXQgaGF2ZSBiZWVuIGNyZWF0ZWQuIC0tPgorICA8dGFyZ2V0IG5hbWU9ImNsZWFudXAiPgorICA8L3RhcmdldD4KKworICA8IS0tIFRoaXMgdGFyZ2V0IHJ1bnMgdGhlIHRlc3Qgc3VpdGUuIEFueSBhY3Rpb25zIHRoYXQgbmVlZCB0byBoYXBwZW4gLS0+CisgIDwhLS0gYWZ0ZXIgYWxsIHRoZSB0ZXN0cyBoYXZlIGJlZW4gcnVuIHNob3VsZCBnbyBoZXJlLiAtLT4KKyAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQsc3VpdGUsY2xlYW51cCI+CisgICAgPGFudCB0YXJnZXQ9ImNvbGxlY3QiIGFudGZpbGU9IiR7bGlicmFyeS1maWxlfSIgZGlyPSIke2VjbGlwc2UtaG9tZX0iPgorICAgICAgPHByb3BlcnR5IG5hbWU9ImluY2x1ZGVzIiB2YWx1ZT0ib3JnKi54bWwiLz4KKyAgICAgIDxwcm9wZXJ0eSBuYW1lPSJvdXRwdXQtZmlsZSIgdmFsdWU9IiR7cGx1Z2luLW5hbWV9LnhtbCIvPgorICAgIDwvYW50PgorICA8L3RhcmdldD4KKworICA8IS0tIFRoaXMgdGFyZ2V0IHJ1bnMgdGhlIHBlcmZvcm1hbmNlIHRlc3Qgc3VpdGVzLiAtLT4KKyAgPHRhcmdldCBuYW1lPSJwZXJmb3JtYW5jZSI+CisgIDwvdGFyZ2V0PgorPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlLy5jbGFzc3BhdGggYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvLmNsYXNzcGF0aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMDRlODYxCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlLy5jbGFzc3BhdGgKQEAgLTAsMCArMSw3IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPGNsYXNzcGF0aD4KKwk8Y2xhc3NwYXRoZW50cnkga2luZD0ic3JjIiBwYXRoPSJzcmMiLz4KKwk8Y2xhc3NwYXRoZW50cnkga2luZD0iY29uIiBwYXRoPSJvcmcuZWNsaXBzZS5qZHQubGF1bmNoaW5nLkpSRV9DT05UQUlORVIvb3JnLmVjbGlwc2UuamR0LmludGVybmFsLmRlYnVnLnVpLmxhdW5jaGVyLlN0YW5kYXJkVk1UeXBlL0oyU0UtMS41Ii8+CisJPGNsYXNzcGF0aGVudHJ5IGtpbmQ9ImNvbiIgcGF0aD0ib3JnLmVjbGlwc2UucGRlLmNvcmUucmVxdWlyZWRQbHVnaW5zIi8+CisJPGNsYXNzcGF0aGVudHJ5IGtpbmQ9Im91dHB1dCIgcGF0aD0iYmluIi8+Cis8L2NsYXNzcGF0aD4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS8ucHJvamVjdCBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS8ucHJvamVjdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMGUyOWJiCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlLy5wcm9qZWN0CkBAIC0wLDAgKzEsMjggQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8cHJvamVjdERlc2NyaXB0aW9uPgorCTxuYW1lPm9yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZTwvbmFtZT4KKwk8Y29tbWVudD48L2NvbW1lbnQ+CisJPHByb2plY3RzPgorCTwvcHJvamVjdHM+CisJPGJ1aWxkU3BlYz4KKwkJPGJ1aWxkQ29tbWFuZD4KKwkJCTxuYW1lPm9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFidWlsZGVyPC9uYW1lPgorCQkJPGFyZ3VtZW50cz4KKwkJCTwvYXJndW1lbnRzPgorCQk8L2J1aWxkQ29tbWFuZD4KKwkJPGJ1aWxkQ29tbWFuZD4KKwkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5NYW5pZmVzdEJ1aWxkZXI8L25hbWU+CisJCQk8YXJndW1lbnRzPgorCQkJPC9hcmd1bWVudHM+CisJCTwvYnVpbGRDb21tYW5kPgorCQk8YnVpbGRDb21tYW5kPgorCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLlNjaGVtYUJ1aWxkZXI8L25hbWU+CisJCQk8YXJndW1lbnRzPgorCQkJPC9hcmd1bWVudHM+CisJCTwvYnVpbGRDb21tYW5kPgorCTwvYnVpbGRTcGVjPgorCTxuYXR1cmVzPgorCQk8bmF0dXJlPm9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFuYXR1cmU8L25hdHVyZT4KKwkJPG5hdHVyZT5vcmcuZWNsaXBzZS5wZGUuUGx1Z2luTmF0dXJlPC9uYXR1cmU+CisJPC9uYXR1cmVzPgorPC9wcm9qZWN0RGVzY3JpcHRpb24+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNGQwY2RmCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcwpAQCAtMCwwICsxLDY5IEBACisjTW9uIEphbiAyMSAxMjo0NjowMSBFU1QgMjAwOAorZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvZGVnZW4udGFyZ2V0UGxhdGZvcm09MS41CitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb21wbGlhbmNlPTEuNQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuZG9jLmNvbW1lbnQuc3VwcG9ydD1lbmFibGVkCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmFubm90YXRpb25TdXBlckludGVyZmFjZT13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmFzc2VydElkZW50aWZpZXI9ZXJyb3IKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uYXV0b2JveGluZz13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRlcHJlY2F0aW9uPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZGVwcmVjYXRpb25JbkRlcHJlY2F0ZWRDb2RlPWRpc2FibGVkCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRlcHJlY2F0aW9uV2hlbk92ZXJyaWRpbmdEZXByZWNhdGVkTWV0aG9kPWRpc2FibGVkCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRpc2NvdXJhZ2VkUmVmZXJlbmNlPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZW1wdHlTdGF0ZW1lbnQ9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5lbnVtSWRlbnRpZmllcj1lcnJvcgorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5mYWxsdGhyb3VnaENhc2U9aWdub3JlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZpZWxkSGlkaW5nPWlnbm9yZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5maW5hbFBhcmFtZXRlckJvdW5kPWlnbm9yZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5maW5hbGx5QmxvY2tOb3RDb21wbGV0aW5nTm9ybWFsbHk9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5mb3JiaWRkZW5SZWZlcmVuY2U9ZXJyb3IKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaGlkZGVuQ2F0Y2hCbG9jaz13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmluY29tcGF0aWJsZU5vbkluaGVyaXRlZEludGVyZmFjZU1ldGhvZD13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmluY29tcGxldGVFbnVtU3dpdGNoPWlnbm9yZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbmRpcmVjdFN0YXRpY0FjY2Vzcz13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmludmFsaWRKYXZhZG9jPWlnbm9yZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbnZhbGlkSmF2YWRvY1RhZ3M9ZW5hYmxlZAorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbnZhbGlkSmF2YWRvY1RhZ3NEZXByZWNhdGVkUmVmPWVuYWJsZWQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW52YWxpZEphdmFkb2NUYWdzTm90VmlzaWJsZVJlZj1lbmFibGVkCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmludmFsaWRKYXZhZG9jVGFnc1Zpc2liaWxpdHk9cHVibGljCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmxvY2FsVmFyaWFibGVIaWRpbmc9aWdub3JlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1ldGhvZFdpdGhDb25zdHJ1Y3Rvck5hbWU9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nRGVwcmVjYXRlZEFubm90YXRpb249d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nSmF2YWRvY0NvbW1lbnRzPWlnbm9yZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nSmF2YWRvY0NvbW1lbnRzT3ZlcnJpZGluZz1lbmFibGVkCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdKYXZhZG9jQ29tbWVudHNWaXNpYmlsaXR5PXB1YmxpYworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nSmF2YWRvY1RhZ3M9aWdub3JlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdKYXZhZG9jVGFnc092ZXJyaWRpbmc9ZW5hYmxlZAorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nSmF2YWRvY1RhZ3NWaXNpYmlsaXR5PXB1YmxpYworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nT3ZlcnJpZGVBbm5vdGF0aW9uPWlnbm9yZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nU2VyaWFsVmVyc2lvbj13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm5vRWZmZWN0QXNzaWdubWVudD13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm5vSW1wbGljaXRTdHJpbmdDb252ZXJzaW9uPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubm9uRXh0ZXJuYWxpemVkU3RyaW5nTGl0ZXJhbD1pZ25vcmUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubnVsbFJlZmVyZW5jZT1pZ25vcmUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ub3ZlcnJpZGluZ1BhY2thZ2VEZWZhdWx0TWV0aG9kPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ucGFyYW1ldGVyQXNzaWdubWVudD1pZ25vcmUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ucG9zc2libGVBY2NpZGVudGFsQm9vbGVhbkFzc2lnbm1lbnQ9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5yYXdUeXBlUmVmZXJlbmNlPWlnbm9yZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5zcGVjaWFsUGFyYW1ldGVySGlkaW5nRmllbGQ9ZGlzYWJsZWQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uc3RhdGljQWNjZXNzUmVjZWl2ZXI9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5zdXBwcmVzc1dhcm5pbmdzPWVuYWJsZWQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uc3ludGhldGljQWNjZXNzRW11bGF0aW9uPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udHlwZVBhcmFtZXRlckhpZGluZz13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVuY2hlY2tlZFR5cGVPcGVyYXRpb249aWdub3JlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVuZG9jdW1lbnRlZEVtcHR5QmxvY2s9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bmhhbmRsZWRXYXJuaW5nVG9rZW49d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bm5lY2Vzc2FyeUVsc2U9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bm5lY2Vzc2FyeVR5cGVDaGVjaz13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVucXVhbGlmaWVkRmllbGRBY2Nlc3M9aWdub3JlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZERlY2xhcmVkVGhyb3duRXhjZXB0aW9uPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkRGVjbGFyZWRUaHJvd25FeGNlcHRpb25XaGVuT3ZlcnJpZGluZz1lbmFibGVkCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZEltcG9ydD13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZExhYmVsPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkTG9jYWw9aWdub3JlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZFBhcmFtZXRlcj1pZ25vcmUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkUGFyYW1ldGVyV2hlbkltcGxlbWVudGluZ0Fic3RyYWN0PWVuYWJsZWQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkUGFyYW1ldGVyV2hlbk92ZXJyaWRpbmdDb25jcmV0ZT1lbmFibGVkCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZFByaXZhdGVNZW1iZXI9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS52YXJhcmdzQXJndW1lbnROZWVkQ2FzdD13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5zb3VyY2U9MS41CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvTUVUQS1JTkYvTUFOSUZFU1QuTUYgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvTUVUQS1JTkYvTUFOSUZFU1QuTUYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjM3ZmMwNwotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9NRVRBLUlORi9NQU5JRkVTVC5NRgpAQCAtMCwwICsxLDMwIEBACitNYW5pZmVzdC1WZXJzaW9uOiAxLjAKK0J1bmRsZS1NYW5pZmVzdFZlcnNpb246IDIKK0J1bmRsZS1OYW1lOiAlcGx1Z2luTmFtZQorQnVuZGxlLVN5bWJvbGljTmFtZTogb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlO3NpbmdsZXRvbjo9dHJ1ZQorQnVuZGxlLVZlcnNpb246IDEuMi4xCitCdW5kbGUtQ2xhc3NQYXRoOiAuCitCdW5kbGUtVmVuZG9yOiAlcHJvdmlkZXJOYW1lCitCdW5kbGUtTG9jYWxpemF0aW9uOiBwbHVnaW4KK0V4cG9ydC1QYWNrYWdlOiBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLnRlc3RzLAorIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5leHBlcmltZW50LnRlc3RzLAorIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC50ZXN0cywKKyBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwudGVzdHMsCisgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNjZW5hcmlvLnRlc3RzLAorIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zZXF1ZW5jZXIudGVzdHMsCisgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnRlc3RzLAorIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS50ZXN0cy51dGlsCitSZXF1aXJlLUJ1bmRsZTogb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLAorIG9yZy5lY2xpcHNlLnN0ZW0uY29yZTt2aXNpYmlsaXR5Oj1yZWV4cG9ydCwKKyBvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwsCisgb3JnLmp1bml0O3Zpc2liaWxpdHk6PXJlZXhwb3J0LAorIG9yZy5lY2xpcHNlLnN0ZW0uc29sdmVycy5mZCwKKyBvcmcuZWNsaXBzZS5zdGVtLmpvYnM7YnVuZGxlLXZlcnNpb249IjEuMS4wIiwKKyBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHM7YnVuZGxlLXZlcnNpb249IjEuMS4wIiwKKyBvcmcuZWNsaXBzZS5zdGVtLnV0aWwubG9nZ2VycztidW5kbGUtdmVyc2lvbj0iMS4xLjAiLAorIG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXM7YnVuZGxlLXZlcnNpb249IjEuMS4wIiwKKyBvcmcuZWNsaXBzZS5zdGVtLnVpCitCdW5kbGUtQWN0aXZhdGlvblBvbGljeTogbGF6eQorQnVuZGxlLVJlcXVpcmVkRXhlY3V0aW9uRW52aXJvbm1lbnQ6IEoyU0UtMS41CitJbXBvcnQtUGFja2FnZTogb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMKK0J1bmRsZS1BY3RpdmF0b3I6IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS50ZXN0cy5BY3RpdmF0b3IKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9idWlsZC5wcm9wZXJ0aWVzIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL2J1aWxkLnByb3BlcnRpZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjkxMTU1OAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9idWlsZC5wcm9wZXJ0aWVzCkBAIC0wLDAgKzEsMTQgQEAKKyMgPGNvcHlyaWdodD4KKyMgPC9jb3B5cmlnaHQ+CisjCisjICRJZCQKKworYmluLmluY2x1ZGVzID0gLixcCisgICAgICAgICAgICAgICBNRVRBLUlORi8sXAorICAgICAgICAgICAgICAgdGVtcC8sXAorICAgICAgICAgICAgICAgZXBsLXYxMC5odG1sLFwKKyAgICAgICAgICAgICAgIG5vdGljZS5odG1sLFwKKyAgICAgICAgICAgICAgIHBsdWdpbi5wcm9wZXJ0aWVzCitqYXJzLmNvbXBpbGUub3JkZXIgPSAuCitzb3VyY2UuLiA9IHNyYy8KK291dHB1dC4uID0gYmluLwpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL2VwbC12MTAuaHRtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9lcGwtdjEwLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWQ0YjE5NgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9lcGwtdjEwLmh0bWwKQEAgLTAsMCArMSwzMjggQEAKKzxodG1sIHhtbG5zOm89InVybjpzY2hlbWFzLW1pY3Jvc29mdC1jb206b2ZmaWNlOm9mZmljZSIKK3htbG5zOnc9InVybjpzY2hlbWFzLW1pY3Jvc29mdC1jb206b2ZmaWNlOndvcmQiCit4bWxucz0iaHR0cDovL3d3dy53My5vcmcvVFIvUkVDLWh0bWw0MCI+CisKKzxoZWFkPgorPG1ldGEgaHR0cC1lcXVpdj1Db250ZW50LVR5cGUgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PXdpbmRvd3MtMTI1MiI+Cis8bWV0YSBuYW1lPVByb2dJZCBjb250ZW50PVdvcmQuRG9jdW1lbnQ+Cis8bWV0YSBuYW1lPUdlbmVyYXRvciBjb250ZW50PSJNaWNyb3NvZnQgV29yZCA5Ij4KKzxtZXRhIG5hbWU9T3JpZ2luYXRvciBjb250ZW50PSJNaWNyb3NvZnQgV29yZCA5Ij4KKzxsaW5rIHJlbD1GaWxlLUxpc3QKK2hyZWY9Ii4vRWNsaXBzZSUyMEVQTCUyMDIwMDNfMTFfMTAlMjBGaW5hbF9maWxlcy9maWxlbGlzdC54bWwiPgorPHRpdGxlPkVjbGlwc2UgUHVibGljIExpY2Vuc2UgLSBWZXJzaW9uIDEuMDwvdGl0bGU+Cis8IS0tW2lmIGd0ZSBtc28gOV0+PHhtbD4KKyA8bzpEb2N1bWVudFByb3BlcnRpZXM+CisgIDxvOlJldmlzaW9uPjI8L286UmV2aXNpb24+CisgIDxvOlRvdGFsVGltZT4zPC9vOlRvdGFsVGltZT4KKyAgPG86Q3JlYXRlZD4yMDA0LTAzLTA1VDIzOjAzOjAwWjwvbzpDcmVhdGVkPgorICA8bzpMYXN0U2F2ZWQ+MjAwNC0wMy0wNVQyMzowMzowMFo8L286TGFzdFNhdmVkPgorICA8bzpQYWdlcz40PC9vOlBhZ2VzPgorICA8bzpXb3Jkcz4xNjI2PC9vOldvcmRzPgorICA8bzpDaGFyYWN0ZXJzPjkyNzA8L286Q2hhcmFjdGVycz4KKyAgIDxvOkxpbmVzPjc3PC9vOkxpbmVzPgorICA8bzpQYXJhZ3JhcGhzPjE4PC9vOlBhcmFncmFwaHM+CisgIDxvOkNoYXJhY3RlcnNXaXRoU3BhY2VzPjExMzg0PC9vOkNoYXJhY3RlcnNXaXRoU3BhY2VzPgorICA8bzpWZXJzaW9uPjkuNDQwMjwvbzpWZXJzaW9uPgorIDwvbzpEb2N1bWVudFByb3BlcnRpZXM+Cis8L3htbD48IVtlbmRpZl0tLT48IS0tW2lmIGd0ZSBtc28gOV0+PHhtbD4KKyA8dzpXb3JkRG9jdW1lbnQ+CisgIDx3OlRyYWNrUmV2aXNpb25zLz4KKyA8L3c6V29yZERvY3VtZW50PgorPC94bWw+PCFbZW5kaWZdLS0+Cis8c3R5bGU+Cis8IS0tCisgLyogRm9udCBEZWZpbml0aW9ucyAqLworQGZvbnQtZmFjZQorCXtmb250LWZhbWlseTpUYWhvbWE7CisJcGFub3NlLTE6MiAxMSA2IDQgMyA1IDQgNCAyIDQ7CisJbXNvLWZvbnQtY2hhcnNldDowOworCW1zby1nZW5lcmljLWZvbnQtZmFtaWx5OnN3aXNzOworCW1zby1mb250LXBpdGNoOnZhcmlhYmxlOworCW1zby1mb250LXNpZ25hdHVyZTo1NTM2Nzk0OTUgLTIxNDc0ODM2NDggOCAwIDY2MDQ3IDA7fQorIC8qIFN0eWxlIERlZmluaXRpb25zICovCitwLk1zb05vcm1hbCwgbGkuTXNvTm9ybWFsLCBkaXYuTXNvTm9ybWFsCisJe21zby1zdHlsZS1wYXJlbnQ6IiI7CisJbWFyZ2luOjBpbjsKKwltYXJnaW4tYm90dG9tOi4wMDAxcHQ7CisJbXNvLXBhZ2luYXRpb246d2lkb3ctb3JwaGFuOworCWZvbnQtc2l6ZToxMi4wcHQ7CisJZm9udC1mYW1pbHk6IlRpbWVzIE5ldyBSb21hbiI7CisJbXNvLWZhcmVhc3QtZm9udC1mYW1pbHk6IlRpbWVzIE5ldyBSb21hbiI7fQorcAorCXttYXJnaW4tcmlnaHQ6MGluOworCW1zby1tYXJnaW4tdG9wLWFsdDphdXRvOworCW1zby1tYXJnaW4tYm90dG9tLWFsdDphdXRvOworCW1hcmdpbi1sZWZ0OjBpbjsKKwltc28tcGFnaW5hdGlvbjp3aWRvdy1vcnBoYW47CisJZm9udC1zaXplOjEyLjBwdDsKKwlmb250LWZhbWlseToiVGltZXMgTmV3IFJvbWFuIjsKKwltc28tZmFyZWFzdC1mb250LWZhbWlseToiVGltZXMgTmV3IFJvbWFuIjt9CitwLkJhbGxvb25UZXh0LCBsaS5CYWxsb29uVGV4dCwgZGl2LkJhbGxvb25UZXh0CisJe21zby1zdHlsZS1uYW1lOiJCYWxsb29uIFRleHQiOworCW1hcmdpbjowaW47CisJbWFyZ2luLWJvdHRvbTouMDAwMXB0OworCW1zby1wYWdpbmF0aW9uOndpZG93LW9ycGhhbjsKKwlmb250LXNpemU6OC4wcHQ7CisJZm9udC1mYW1pbHk6VGFob21hOworCW1zby1mYXJlYXN0LWZvbnQtZmFtaWx5OiJUaW1lcyBOZXcgUm9tYW4iO30KK0BwYWdlIFNlY3Rpb24xCisJe3NpemU6OC41aW4gMTEuMGluOworCW1hcmdpbjoxLjBpbiAxLjI1aW4gMS4waW4gMS4yNWluOworCW1zby1oZWFkZXItbWFyZ2luOi41aW47CisJbXNvLWZvb3Rlci1tYXJnaW46LjVpbjsKKwltc28tcGFwZXItc291cmNlOjA7fQorZGl2LlNlY3Rpb24xCisJe3BhZ2U6U2VjdGlvbjE7fQorLS0+Cis8L3N0eWxlPgorPC9oZWFkPgorCis8Ym9keSBsYW5nPUVOLVVTIHN0eWxlPSd0YWItaW50ZXJ2YWw6LjVpbic+CisKKzxkaXYgY2xhc3M9U2VjdGlvbjE+CisKKzxwIGFsaWduPWNlbnRlciBzdHlsZT0ndGV4dC1hbGlnbjpjZW50ZXInPjxiPkVjbGlwc2UgUHVibGljIExpY2Vuc2UgLSB2IDEuMDwvYj4KKzwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPlRIRSBBQ0NPTVBBTllJTkcgUFJPR1JBTSBJUyBQUk9WSURFRCBVTkRFUgorVEhFIFRFUk1TIE9GIFRISVMgRUNMSVBTRSBQVUJMSUMgTElDRU5TRSAoJnF1b3Q7QUdSRUVNRU5UJnF1b3Q7KS4gQU5ZIFVTRSwKK1JFUFJPRFVDVElPTiBPUiBESVNUUklCVVRJT04gT0YgVEhFIFBST0dSQU0gQ09OU1RJVFVURVMgUkVDSVBJRU5UJ1MgQUNDRVBUQU5DRQorT0YgVEhJUyBBR1JFRU1FTlQuPC9zcGFuPiA8L3A+CisKKzxwPjxiPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4xLiBERUZJTklUSU9OUzwvc3Bhbj48L2I+IDwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPiZxdW90O0NvbnRyaWJ1dGlvbiZxdW90OyBtZWFuczo8L3NwYW4+IDwvcD4KKworPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YSkKK2luIHRoZSBjYXNlIG9mIHRoZSBpbml0aWFsIENvbnRyaWJ1dG9yLCB0aGUgaW5pdGlhbCBjb2RlIGFuZCBkb2N1bWVudGF0aW9uCitkaXN0cmlidXRlZCB1bmRlciB0aGlzIEFncmVlbWVudCwgYW5kPGJyIGNsZWFyPWxlZnQ+CitiKSBpbiB0aGUgY2FzZSBvZiBlYWNoIHN1YnNlcXVlbnQgQ29udHJpYnV0b3I6PC9zcGFuPjwvcD4KKworPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+aSkKK2NoYW5nZXMgdG8gdGhlIFByb2dyYW0sIGFuZDwvc3Bhbj48L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmlpKQorYWRkaXRpb25zIHRvIHRoZSBQcm9ncmFtOzwvc3Bhbj48L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPndoZXJlCitzdWNoIGNoYW5nZXMgYW5kL29yIGFkZGl0aW9ucyB0byB0aGUgUHJvZ3JhbSBvcmlnaW5hdGUgZnJvbSBhbmQgYXJlIGRpc3RyaWJ1dGVkCitieSB0aGF0IHBhcnRpY3VsYXIgQ29udHJpYnV0b3IuIEEgQ29udHJpYnV0aW9uICdvcmlnaW5hdGVzJyBmcm9tIGEgQ29udHJpYnV0b3IKK2lmIGl0IHdhcyBhZGRlZCB0byB0aGUgUHJvZ3JhbSBieSBzdWNoIENvbnRyaWJ1dG9yIGl0c2VsZiBvciBhbnlvbmUgYWN0aW5nIG9uCitzdWNoIENvbnRyaWJ1dG9yJ3MgYmVoYWxmLiBDb250cmlidXRpb25zIGRvIG5vdCBpbmNsdWRlIGFkZGl0aW9ucyB0byB0aGUKK1Byb2dyYW0gd2hpY2g6IChpKSBhcmUgc2VwYXJhdGUgbW9kdWxlcyBvZiBzb2Z0d2FyZSBkaXN0cmlidXRlZCBpbiBjb25qdW5jdGlvbgord2l0aCB0aGUgUHJvZ3JhbSB1bmRlciB0aGVpciBvd24gbGljZW5zZSBhZ3JlZW1lbnQsIGFuZCAoaWkpIGFyZSBub3QgZGVyaXZhdGl2ZQord29ya3Mgb2YgdGhlIFByb2dyYW0uIDwvc3Bhbj48L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4mcXVvdDtDb250cmlidXRvciZxdW90OyBtZWFucyBhbnkgcGVyc29uIG9yCitlbnRpdHkgdGhhdCBkaXN0cmlidXRlcyB0aGUgUHJvZ3JhbS48L3NwYW4+IDwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPiZxdW90O0xpY2Vuc2VkIFBhdGVudHMgJnF1b3Q7IG1lYW4gcGF0ZW50CitjbGFpbXMgbGljZW5zYWJsZSBieSBhIENvbnRyaWJ1dG9yIHdoaWNoIGFyZSBuZWNlc3NhcmlseSBpbmZyaW5nZWQgYnkgdGhlIHVzZQorb3Igc2FsZSBvZiBpdHMgQ29udHJpYnV0aW9uIGFsb25lIG9yIHdoZW4gY29tYmluZWQgd2l0aCB0aGUgUHJvZ3JhbS4gPC9zcGFuPjwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPiZxdW90O1Byb2dyYW0mcXVvdDsgbWVhbnMgdGhlIENvbnRyaWJ1dGlvbnMKK2Rpc3RyaWJ1dGVkIGluIGFjY29yZGFuY2Ugd2l0aCB0aGlzIEFncmVlbWVudC48L3NwYW4+IDwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPiZxdW90O1JlY2lwaWVudCZxdW90OyBtZWFucyBhbnlvbmUgd2hvCityZWNlaXZlcyB0aGUgUHJvZ3JhbSB1bmRlciB0aGlzIEFncmVlbWVudCwgaW5jbHVkaW5nIGFsbCBDb250cmlidXRvcnMuPC9zcGFuPiA8L3A+CisKKzxwPjxiPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4yLiBHUkFOVCBPRiBSSUdIVFM8L3NwYW4+PC9iPiA8L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmEpCitTdWJqZWN0IHRvIHRoZSB0ZXJtcyBvZiB0aGlzIEFncmVlbWVudCwgZWFjaCBDb250cmlidXRvciBoZXJlYnkgZ3JhbnRzIFJlY2lwaWVudAorYSBub24tZXhjbHVzaXZlLCB3b3JsZHdpZGUsIHJveWFsdHktZnJlZSBjb3B5cmlnaHQgbGljZW5zZSB0bzxzcGFuCitzdHlsZT0nY29sb3I6cmVkJz4gPC9zcGFuPnJlcHJvZHVjZSwgcHJlcGFyZSBkZXJpdmF0aXZlIHdvcmtzIG9mLCBwdWJsaWNseQorZGlzcGxheSwgcHVibGljbHkgcGVyZm9ybSwgZGlzdHJpYnV0ZSBhbmQgc3VibGljZW5zZSB0aGUgQ29udHJpYnV0aW9uIG9mIHN1Y2gKK0NvbnRyaWJ1dG9yLCBpZiBhbnksIGFuZCBzdWNoIGRlcml2YXRpdmUgd29ya3MsIGluIHNvdXJjZSBjb2RlIGFuZCBvYmplY3QgY29kZQorZm9ybS48L3NwYW4+PC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5iKQorU3ViamVjdCB0byB0aGUgdGVybXMgb2YgdGhpcyBBZ3JlZW1lbnQsIGVhY2ggQ29udHJpYnV0b3IgaGVyZWJ5IGdyYW50cworUmVjaXBpZW50IGEgbm9uLWV4Y2x1c2l2ZSwgd29ybGR3aWRlLDxzcGFuIHN0eWxlPSdjb2xvcjpncmVlbic+IDwvc3Bhbj5yb3lhbHR5LWZyZWUKK3BhdGVudCBsaWNlbnNlIHVuZGVyIExpY2Vuc2VkIFBhdGVudHMgdG8gbWFrZSwgdXNlLCBzZWxsLCBvZmZlciB0byBzZWxsLCBpbXBvcnQKK2FuZCBvdGhlcndpc2UgdHJhbnNmZXIgdGhlIENvbnRyaWJ1dGlvbiBvZiBzdWNoIENvbnRyaWJ1dG9yLCBpZiBhbnksIGluIHNvdXJjZQorY29kZSBhbmQgb2JqZWN0IGNvZGUgZm9ybS4gVGhpcyBwYXRlbnQgbGljZW5zZSBzaGFsbCBhcHBseSB0byB0aGUgY29tYmluYXRpb24KK29mIHRoZSBDb250cmlidXRpb24gYW5kIHRoZSBQcm9ncmFtIGlmLCBhdCB0aGUgdGltZSB0aGUgQ29udHJpYnV0aW9uIGlzIGFkZGVkCitieSB0aGUgQ29udHJpYnV0b3IsIHN1Y2ggYWRkaXRpb24gb2YgdGhlIENvbnRyaWJ1dGlvbiBjYXVzZXMgc3VjaCBjb21iaW5hdGlvbgordG8gYmUgY292ZXJlZCBieSB0aGUgTGljZW5zZWQgUGF0ZW50cy4gVGhlIHBhdGVudCBsaWNlbnNlIHNoYWxsIG5vdCBhcHBseSB0bworYW55IG90aGVyIGNvbWJpbmF0aW9ucyB3aGljaCBpbmNsdWRlIHRoZSBDb250cmlidXRpb24uIE5vIGhhcmR3YXJlIHBlciBzZSBpcworbGljZW5zZWQgaGVyZXVuZGVyLiA8L3NwYW4+PC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5jKQorUmVjaXBpZW50IHVuZGVyc3RhbmRzIHRoYXQgYWx0aG91Z2ggZWFjaCBDb250cmlidXRvciBncmFudHMgdGhlIGxpY2Vuc2VzIHRvIGl0cworQ29udHJpYnV0aW9ucyBzZXQgZm9ydGggaGVyZWluLCBubyBhc3N1cmFuY2VzIGFyZSBwcm92aWRlZCBieSBhbnkgQ29udHJpYnV0b3IKK3RoYXQgdGhlIFByb2dyYW0gZG9lcyBub3QgaW5mcmluZ2UgdGhlIHBhdGVudCBvciBvdGhlciBpbnRlbGxlY3R1YWwgcHJvcGVydHkKK3JpZ2h0cyBvZiBhbnkgb3RoZXIgZW50aXR5LiBFYWNoIENvbnRyaWJ1dG9yIGRpc2NsYWltcyBhbnkgbGlhYmlsaXR5IHRvIFJlY2lwaWVudAorZm9yIGNsYWltcyBicm91Z2h0IGJ5IGFueSBvdGhlciBlbnRpdHkgYmFzZWQgb24gaW5mcmluZ2VtZW50IG9mIGludGVsbGVjdHVhbAorcHJvcGVydHkgcmlnaHRzIG9yIG90aGVyd2lzZS4gQXMgYSBjb25kaXRpb24gdG8gZXhlcmNpc2luZyB0aGUgcmlnaHRzIGFuZAorbGljZW5zZXMgZ3JhbnRlZCBoZXJldW5kZXIsIGVhY2ggUmVjaXBpZW50IGhlcmVieSBhc3N1bWVzIHNvbGUgcmVzcG9uc2liaWxpdHkKK3RvIHNlY3VyZSBhbnkgb3RoZXIgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBuZWVkZWQsIGlmIGFueS4gRm9yIGV4YW1wbGUsCitpZiBhIHRoaXJkIHBhcnR5IHBhdGVudCBsaWNlbnNlIGlzIHJlcXVpcmVkIHRvIGFsbG93IFJlY2lwaWVudCB0byBkaXN0cmlidXRlCit0aGUgUHJvZ3JhbSwgaXQgaXMgUmVjaXBpZW50J3MgcmVzcG9uc2liaWxpdHkgdG8gYWNxdWlyZSB0aGF0IGxpY2Vuc2UgYmVmb3JlCitkaXN0cmlidXRpbmcgdGhlIFByb2dyYW0uPC9zcGFuPjwvcD4KKworPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+ZCkKK0VhY2ggQ29udHJpYnV0b3IgcmVwcmVzZW50cyB0aGF0IHRvIGl0cyBrbm93bGVkZ2UgaXQgaGFzIHN1ZmZpY2llbnQgY29weXJpZ2h0CityaWdodHMgaW4gaXRzIENvbnRyaWJ1dGlvbiwgaWYgYW55LCB0byBncmFudCB0aGUgY29weXJpZ2h0IGxpY2Vuc2Ugc2V0IGZvcnRoIGluCit0aGlzIEFncmVlbWVudC4gPC9zcGFuPjwvcD4KKworPHA+PGI+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPjMuIFJFUVVJUkVNRU5UUzwvc3Bhbj48L2I+IDwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkEgQ29udHJpYnV0b3IgbWF5IGNob29zZSB0byBkaXN0cmlidXRlIHRoZQorUHJvZ3JhbSBpbiBvYmplY3QgY29kZSBmb3JtIHVuZGVyIGl0cyBvd24gbGljZW5zZSBhZ3JlZW1lbnQsIHByb3ZpZGVkIHRoYXQ6PC9zcGFuPgorPC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5hKQoraXQgY29tcGxpZXMgd2l0aCB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhpcyBBZ3JlZW1lbnQ7IGFuZDwvc3Bhbj48L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmIpCitpdHMgbGljZW5zZSBhZ3JlZW1lbnQ6PC9zcGFuPjwvcD4KKworPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+aSkKK2VmZmVjdGl2ZWx5IGRpc2NsYWltcyBvbiBiZWhhbGYgb2YgYWxsIENvbnRyaWJ1dG9ycyBhbGwgd2FycmFudGllcyBhbmQKK2NvbmRpdGlvbnMsIGV4cHJlc3MgYW5kIGltcGxpZWQsIGluY2x1ZGluZyB3YXJyYW50aWVzIG9yIGNvbmRpdGlvbnMgb2YgdGl0bGUKK2FuZCBub24taW5mcmluZ2VtZW50LCBhbmQgaW1wbGllZCB3YXJyYW50aWVzIG9yIGNvbmRpdGlvbnMgb2YgbWVyY2hhbnRhYmlsaXR5CithbmQgZml0bmVzcyBmb3IgYSBwYXJ0aWN1bGFyIHB1cnBvc2U7IDwvc3Bhbj48L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmlpKQorZWZmZWN0aXZlbHkgZXhjbHVkZXMgb24gYmVoYWxmIG9mIGFsbCBDb250cmlidXRvcnMgYWxsIGxpYWJpbGl0eSBmb3IgZGFtYWdlcywKK2luY2x1ZGluZyBkaXJlY3QsIGluZGlyZWN0LCBzcGVjaWFsLCBpbmNpZGVudGFsIGFuZCBjb25zZXF1ZW50aWFsIGRhbWFnZXMsIHN1Y2gKK2FzIGxvc3QgcHJvZml0czsgPC9zcGFuPjwvcD4KKworPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+aWlpKQorc3RhdGVzIHRoYXQgYW55IHByb3Zpc2lvbnMgd2hpY2ggZGlmZmVyIGZyb20gdGhpcyBBZ3JlZW1lbnQgYXJlIG9mZmVyZWQgYnkgdGhhdAorQ29udHJpYnV0b3IgYWxvbmUgYW5kIG5vdCBieSBhbnkgb3RoZXIgcGFydHk7IGFuZDwvc3Bhbj48L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPml2KQorc3RhdGVzIHRoYXQgc291cmNlIGNvZGUgZm9yIHRoZSBQcm9ncmFtIGlzIGF2YWlsYWJsZSBmcm9tIHN1Y2ggQ29udHJpYnV0b3IsIGFuZAoraW5mb3JtcyBsaWNlbnNlZXMgaG93IHRvIG9idGFpbiBpdCBpbiBhIHJlYXNvbmFibGUgbWFubmVyIG9uIG9yIHRocm91Z2ggYQorbWVkaXVtIGN1c3RvbWFyaWx5IHVzZWQgZm9yIHNvZnR3YXJlIGV4Y2hhbmdlLjxzcGFuIHN0eWxlPSdjb2xvcjpibHVlJz4gPC9zcGFuPjwvc3Bhbj48L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5XaGVuIHRoZSBQcm9ncmFtIGlzIG1hZGUgYXZhaWxhYmxlIGluIHNvdXJjZQorY29kZSBmb3JtOjwvc3Bhbj4gPC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5hKQoraXQgbXVzdCBiZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGlzIEFncmVlbWVudDsgYW5kIDwvc3Bhbj48L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmIpIGEKK2NvcHkgb2YgdGhpcyBBZ3JlZW1lbnQgbXVzdCBiZSBpbmNsdWRlZCB3aXRoIGVhY2ggY29weSBvZiB0aGUgUHJvZ3JhbS4gPC9zcGFuPjwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkNvbnRyaWJ1dG9ycyBtYXkgbm90IHJlbW92ZSBvciBhbHRlciBhbnkKK2NvcHlyaWdodCBub3RpY2VzIGNvbnRhaW5lZCB3aXRoaW4gdGhlIFByb2dyYW0uIDwvc3Bhbj48L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5FYWNoIENvbnRyaWJ1dG9yIG11c3QgaWRlbnRpZnkgaXRzZWxmIGFzIHRoZQorb3JpZ2luYXRvciBvZiBpdHMgQ29udHJpYnV0aW9uLCBpZiBhbnksIGluIGEgbWFubmVyIHRoYXQgcmVhc29uYWJseSBhbGxvd3MKK3N1YnNlcXVlbnQgUmVjaXBpZW50cyB0byBpZGVudGlmeSB0aGUgb3JpZ2luYXRvciBvZiB0aGUgQ29udHJpYnV0aW9uLiA8L3NwYW4+PC9wPgorCis8cD48Yj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+NC4gQ09NTUVSQ0lBTCBESVNUUklCVVRJT048L3NwYW4+PC9iPiA8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5Db21tZXJjaWFsIGRpc3RyaWJ1dG9ycyBvZiBzb2Z0d2FyZSBtYXkKK2FjY2VwdCBjZXJ0YWluIHJlc3BvbnNpYmlsaXRpZXMgd2l0aCByZXNwZWN0IHRvIGVuZCB1c2VycywgYnVzaW5lc3MgcGFydG5lcnMKK2FuZCB0aGUgbGlrZS4gV2hpbGUgdGhpcyBsaWNlbnNlIGlzIGludGVuZGVkIHRvIGZhY2lsaXRhdGUgdGhlIGNvbW1lcmNpYWwgdXNlCitvZiB0aGUgUHJvZ3JhbSwgdGhlIENvbnRyaWJ1dG9yIHdobyBpbmNsdWRlcyB0aGUgUHJvZ3JhbSBpbiBhIGNvbW1lcmNpYWwKK3Byb2R1Y3Qgb2ZmZXJpbmcgc2hvdWxkIGRvIHNvIGluIGEgbWFubmVyIHdoaWNoIGRvZXMgbm90IGNyZWF0ZSBwb3RlbnRpYWwKK2xpYWJpbGl0eSBmb3Igb3RoZXIgQ29udHJpYnV0b3JzLiBUaGVyZWZvcmUsIGlmIGEgQ29udHJpYnV0b3IgaW5jbHVkZXMgdGhlCitQcm9ncmFtIGluIGEgY29tbWVyY2lhbCBwcm9kdWN0IG9mZmVyaW5nLCBzdWNoIENvbnRyaWJ1dG9yICgmcXVvdDtDb21tZXJjaWFsCitDb250cmlidXRvciZxdW90OykgaGVyZWJ5IGFncmVlcyB0byBkZWZlbmQgYW5kIGluZGVtbmlmeSBldmVyeSBvdGhlcgorQ29udHJpYnV0b3IgKCZxdW90O0luZGVtbmlmaWVkIENvbnRyaWJ1dG9yJnF1b3Q7KSBhZ2FpbnN0IGFueSBsb3NzZXMsIGRhbWFnZXMgYW5kCitjb3N0cyAoY29sbGVjdGl2ZWx5ICZxdW90O0xvc3NlcyZxdW90OykgYXJpc2luZyBmcm9tIGNsYWltcywgbGF3c3VpdHMgYW5kIG90aGVyCitsZWdhbCBhY3Rpb25zIGJyb3VnaHQgYnkgYSB0aGlyZCBwYXJ0eSBhZ2FpbnN0IHRoZSBJbmRlbW5pZmllZCBDb250cmlidXRvciB0bwordGhlIGV4dGVudCBjYXVzZWQgYnkgdGhlIGFjdHMgb3Igb21pc3Npb25zIG9mIHN1Y2ggQ29tbWVyY2lhbCBDb250cmlidXRvciBpbgorY29ubmVjdGlvbiB3aXRoIGl0cyBkaXN0cmlidXRpb24gb2YgdGhlIFByb2dyYW0gaW4gYSBjb21tZXJjaWFsIHByb2R1Y3QKK29mZmVyaW5nLiBUaGUgb2JsaWdhdGlvbnMgaW4gdGhpcyBzZWN0aW9uIGRvIG5vdCBhcHBseSB0byBhbnkgY2xhaW1zIG9yIExvc3NlcworcmVsYXRpbmcgdG8gYW55IGFjdHVhbCBvciBhbGxlZ2VkIGludGVsbGVjdHVhbCBwcm9wZXJ0eSBpbmZyaW5nZW1lbnQuIEluIG9yZGVyCit0byBxdWFsaWZ5LCBhbiBJbmRlbW5pZmllZCBDb250cmlidXRvciBtdXN0OiBhKSBwcm9tcHRseSBub3RpZnkgdGhlIENvbW1lcmNpYWwKK0NvbnRyaWJ1dG9yIGluIHdyaXRpbmcgb2Ygc3VjaCBjbGFpbSwgYW5kIGIpIGFsbG93IHRoZSBDb21tZXJjaWFsIENvbnRyaWJ1dG9yCit0byBjb250cm9sLCBhbmQgY29vcGVyYXRlIHdpdGggdGhlIENvbW1lcmNpYWwgQ29udHJpYnV0b3IgaW4sIHRoZSBkZWZlbnNlIGFuZAorYW55IHJlbGF0ZWQgc2V0dGxlbWVudCBuZWdvdGlhdGlvbnMuIFRoZSBJbmRlbW5pZmllZCBDb250cmlidXRvciBtYXkgcGFydGljaXBhdGUKK2luIGFueSBzdWNoIGNsYWltIGF0IGl0cyBvd24gZXhwZW5zZS48L3NwYW4+IDwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkZvciBleGFtcGxlLCBhIENvbnRyaWJ1dG9yIG1pZ2h0IGluY2x1ZGUgdGhlCitQcm9ncmFtIGluIGEgY29tbWVyY2lhbCBwcm9kdWN0IG9mZmVyaW5nLCBQcm9kdWN0IFguIFRoYXQgQ29udHJpYnV0b3IgaXMgdGhlbiBhCitDb21tZXJjaWFsIENvbnRyaWJ1dG9yLiBJZiB0aGF0IENvbW1lcmNpYWwgQ29udHJpYnV0b3IgdGhlbiBtYWtlcyBwZXJmb3JtYW5jZQorY2xhaW1zLCBvciBvZmZlcnMgd2FycmFudGllcyByZWxhdGVkIHRvIFByb2R1Y3QgWCwgdGhvc2UgcGVyZm9ybWFuY2UgY2xhaW1zIGFuZAord2FycmFudGllcyBhcmUgc3VjaCBDb21tZXJjaWFsIENvbnRyaWJ1dG9yJ3MgcmVzcG9uc2liaWxpdHkgYWxvbmUuIFVuZGVyIHRoaXMKK3NlY3Rpb24sIHRoZSBDb21tZXJjaWFsIENvbnRyaWJ1dG9yIHdvdWxkIGhhdmUgdG8gZGVmZW5kIGNsYWltcyBhZ2FpbnN0IHRoZQorb3RoZXIgQ29udHJpYnV0b3JzIHJlbGF0ZWQgdG8gdGhvc2UgcGVyZm9ybWFuY2UgY2xhaW1zIGFuZCB3YXJyYW50aWVzLCBhbmQgaWYgYQorY291cnQgcmVxdWlyZXMgYW55IG90aGVyIENvbnRyaWJ1dG9yIHRvIHBheSBhbnkgZGFtYWdlcyBhcyBhIHJlc3VsdCwgdGhlCitDb21tZXJjaWFsIENvbnRyaWJ1dG9yIG11c3QgcGF5IHRob3NlIGRhbWFnZXMuPC9zcGFuPiA8L3A+CisKKzxwPjxiPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz41LiBOTyBXQVJSQU5UWTwvc3Bhbj48L2I+IDwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkVYQ0VQVCBBUyBFWFBSRVNTTFkgU0VUIEZPUlRIIElOIFRISVMKK0FHUkVFTUVOVCwgVEhFIFBST0dSQU0gSVMgUFJPVklERUQgT04gQU4gJnF1b3Q7QVMgSVMmcXVvdDsgQkFTSVMsIFdJVEhPVVQKK1dBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgRUlUSEVSIEVYUFJFU1MgT1IgSU1QTElFRCBJTkNMVURJTkcsCitXSVRIT1VUIExJTUlUQVRJT04sIEFOWSBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgVElUTEUsIE5PTi1JTkZSSU5HRU1FTlQsCitNRVJDSEFOVEFCSUxJVFkgT1IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIEVhY2ggUmVjaXBpZW50IGlzIHNvbGVseQorcmVzcG9uc2libGUgZm9yIGRldGVybWluaW5nIHRoZSBhcHByb3ByaWF0ZW5lc3Mgb2YgdXNpbmcgYW5kIGRpc3RyaWJ1dGluZyB0aGUKK1Byb2dyYW0gYW5kIGFzc3VtZXMgYWxsIHJpc2tzIGFzc29jaWF0ZWQgd2l0aCBpdHMgZXhlcmNpc2Ugb2YgcmlnaHRzIHVuZGVyIHRoaXMKK0FncmVlbWVudCAsIGluY2x1ZGluZyBidXQgbm90IGxpbWl0ZWQgdG8gdGhlIHJpc2tzIGFuZCBjb3N0cyBvZiBwcm9ncmFtIGVycm9ycywKK2NvbXBsaWFuY2Ugd2l0aCBhcHBsaWNhYmxlIGxhd3MsIGRhbWFnZSB0byBvciBsb3NzIG9mIGRhdGEsIHByb2dyYW1zIG9yCitlcXVpcG1lbnQsIGFuZCB1bmF2YWlsYWJpbGl0eSBvciBpbnRlcnJ1cHRpb24gb2Ygb3BlcmF0aW9ucy4gPC9zcGFuPjwvcD4KKworPHA+PGI+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPjYuIERJU0NMQUlNRVIgT0YgTElBQklMSVRZPC9zcGFuPjwvYj4gPC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+RVhDRVBUIEFTIEVYUFJFU1NMWSBTRVQgRk9SVEggSU4gVEhJUworQUdSRUVNRU5ULCBORUlUSEVSIFJFQ0lQSUVOVCBOT1IgQU5ZIENPTlRSSUJVVE9SUyBTSEFMTCBIQVZFIEFOWSBMSUFCSUxJVFkgRk9SCitBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyhJTkNMVURJTkcgV0lUSE9VVCBMSU1JVEFUSU9OIExPU1QgUFJPRklUUyksIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCitPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORworTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPUiBESVNUUklCVVRJT04gT0YKK1RIRSBQUk9HUkFNIE9SIFRIRSBFWEVSQ0lTRSBPRiBBTlkgUklHSFRTIEdSQU5URUQgSEVSRVVOREVSLCBFVkVOIElGIEFEVklTRUQgT0YKK1RIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRVMuPC9zcGFuPiA8L3A+CisKKzxwPjxiPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz43LiBHRU5FUkFMPC9zcGFuPjwvYj4gPC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+SWYgYW55IHByb3Zpc2lvbiBvZiB0aGlzIEFncmVlbWVudCBpcyBpbnZhbGlkCitvciB1bmVuZm9yY2VhYmxlIHVuZGVyIGFwcGxpY2FibGUgbGF3LCBpdCBzaGFsbCBub3QgYWZmZWN0IHRoZSB2YWxpZGl0eSBvcgorZW5mb3JjZWFiaWxpdHkgb2YgdGhlIHJlbWFpbmRlciBvZiB0aGUgdGVybXMgb2YgdGhpcyBBZ3JlZW1lbnQsIGFuZCB3aXRob3V0CitmdXJ0aGVyIGFjdGlvbiBieSB0aGUgcGFydGllcyBoZXJldG8sIHN1Y2ggcHJvdmlzaW9uIHNoYWxsIGJlIHJlZm9ybWVkIHRvIHRoZQorbWluaW11bSBleHRlbnQgbmVjZXNzYXJ5IHRvIG1ha2Ugc3VjaCBwcm92aXNpb24gdmFsaWQgYW5kIGVuZm9yY2VhYmxlLjwvc3Bhbj4gPC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+SWYgUmVjaXBpZW50IGluc3RpdHV0ZXMgcGF0ZW50IGxpdGlnYXRpb24KK2FnYWluc3QgYW55IGVudGl0eSAoaW5jbHVkaW5nIGEgY3Jvc3MtY2xhaW0gb3IgY291bnRlcmNsYWltIGluIGEgbGF3c3VpdCkKK2FsbGVnaW5nIHRoYXQgdGhlIFByb2dyYW0gaXRzZWxmIChleGNsdWRpbmcgY29tYmluYXRpb25zIG9mIHRoZSBQcm9ncmFtIHdpdGgKK290aGVyIHNvZnR3YXJlIG9yIGhhcmR3YXJlKSBpbmZyaW5nZXMgc3VjaCBSZWNpcGllbnQncyBwYXRlbnQocyksIHRoZW4gc3VjaAorUmVjaXBpZW50J3MgcmlnaHRzIGdyYW50ZWQgdW5kZXIgU2VjdGlvbiAyKGIpIHNoYWxsIHRlcm1pbmF0ZSBhcyBvZiB0aGUgZGF0ZQorc3VjaCBsaXRpZ2F0aW9uIGlzIGZpbGVkLiA8L3NwYW4+PC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+QWxsIFJlY2lwaWVudCdzIHJpZ2h0cyB1bmRlciB0aGlzIEFncmVlbWVudAorc2hhbGwgdGVybWluYXRlIGlmIGl0IGZhaWxzIHRvIGNvbXBseSB3aXRoIGFueSBvZiB0aGUgbWF0ZXJpYWwgdGVybXMgb3IKK2NvbmRpdGlvbnMgb2YgdGhpcyBBZ3JlZW1lbnQgYW5kIGRvZXMgbm90IGN1cmUgc3VjaCBmYWlsdXJlIGluIGEgcmVhc29uYWJsZQorcGVyaW9kIG9mIHRpbWUgYWZ0ZXIgYmVjb21pbmcgYXdhcmUgb2Ygc3VjaCBub25jb21wbGlhbmNlLiBJZiBhbGwgUmVjaXBpZW50J3MKK3JpZ2h0cyB1bmRlciB0aGlzIEFncmVlbWVudCB0ZXJtaW5hdGUsIFJlY2lwaWVudCBhZ3JlZXMgdG8gY2Vhc2UgdXNlIGFuZAorZGlzdHJpYnV0aW9uIG9mIHRoZSBQcm9ncmFtIGFzIHNvb24gYXMgcmVhc29uYWJseSBwcmFjdGljYWJsZS4gSG93ZXZlciwKK1JlY2lwaWVudCdzIG9ibGlnYXRpb25zIHVuZGVyIHRoaXMgQWdyZWVtZW50IGFuZCBhbnkgbGljZW5zZXMgZ3JhbnRlZCBieQorUmVjaXBpZW50IHJlbGF0aW5nIHRvIHRoZSBQcm9ncmFtIHNoYWxsIGNvbnRpbnVlIGFuZCBzdXJ2aXZlLiA8L3NwYW4+PC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+RXZlcnlvbmUgaXMgcGVybWl0dGVkIHRvIGNvcHkgYW5kIGRpc3RyaWJ1dGUKK2NvcGllcyBvZiB0aGlzIEFncmVlbWVudCwgYnV0IGluIG9yZGVyIHRvIGF2b2lkIGluY29uc2lzdGVuY3kgdGhlIEFncmVlbWVudCBpcworY29weXJpZ2h0ZWQgYW5kIG1heSBvbmx5IGJlIG1vZGlmaWVkIGluIHRoZSBmb2xsb3dpbmcgbWFubmVyLiBUaGUgQWdyZWVtZW50CitTdGV3YXJkIHJlc2VydmVzIHRoZSByaWdodCB0byBwdWJsaXNoIG5ldyB2ZXJzaW9ucyAoaW5jbHVkaW5nIHJldmlzaW9ucykgb2YKK3RoaXMgQWdyZWVtZW50IGZyb20gdGltZSB0byB0aW1lLiBObyBvbmUgb3RoZXIgdGhhbiB0aGUgQWdyZWVtZW50IFN0ZXdhcmQgaGFzCit0aGUgcmlnaHQgdG8gbW9kaWZ5IHRoaXMgQWdyZWVtZW50LiBUaGUgRWNsaXBzZSBGb3VuZGF0aW9uIGlzIHRoZSBpbml0aWFsCitBZ3JlZW1lbnQgU3Rld2FyZC4gVGhlIEVjbGlwc2UgRm91bmRhdGlvbiBtYXkgYXNzaWduIHRoZSByZXNwb25zaWJpbGl0eSB0bworc2VydmUgYXMgdGhlIEFncmVlbWVudCBTdGV3YXJkIHRvIGEgc3VpdGFibGUgc2VwYXJhdGUgZW50aXR5LiBFYWNoIG5ldyB2ZXJzaW9uCitvZiB0aGUgQWdyZWVtZW50IHdpbGwgYmUgZ2l2ZW4gYSBkaXN0aW5ndWlzaGluZyB2ZXJzaW9uIG51bWJlci4gVGhlIFByb2dyYW0KKyhpbmNsdWRpbmcgQ29udHJpYnV0aW9ucykgbWF5IGFsd2F5cyBiZSBkaXN0cmlidXRlZCBzdWJqZWN0IHRvIHRoZSB2ZXJzaW9uIG9mCit0aGUgQWdyZWVtZW50IHVuZGVyIHdoaWNoIGl0IHdhcyByZWNlaXZlZC4gSW4gYWRkaXRpb24sIGFmdGVyIGEgbmV3IHZlcnNpb24gb2YKK3RoZSBBZ3JlZW1lbnQgaXMgcHVibGlzaGVkLCBDb250cmlidXRvciBtYXkgZWxlY3QgdG8gZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbQorKGluY2x1ZGluZyBpdHMgQ29udHJpYnV0aW9ucykgdW5kZXIgdGhlIG5ldyB2ZXJzaW9uLiBFeGNlcHQgYXMgZXhwcmVzc2x5IHN0YXRlZAoraW4gU2VjdGlvbnMgMihhKSBhbmQgMihiKSBhYm92ZSwgUmVjaXBpZW50IHJlY2VpdmVzIG5vIHJpZ2h0cyBvciBsaWNlbnNlcyB0bwordGhlIGludGVsbGVjdHVhbCBwcm9wZXJ0eSBvZiBhbnkgQ29udHJpYnV0b3IgdW5kZXIgdGhpcyBBZ3JlZW1lbnQsIHdoZXRoZXIKK2V4cHJlc3NseSwgYnkgaW1wbGljYXRpb24sIGVzdG9wcGVsIG9yIG90aGVyd2lzZS4gQWxsIHJpZ2h0cyBpbiB0aGUgUHJvZ3JhbSBub3QKK2V4cHJlc3NseSBncmFudGVkIHVuZGVyIHRoaXMgQWdyZWVtZW50IGFyZSByZXNlcnZlZC48L3NwYW4+IDwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPlRoaXMgQWdyZWVtZW50IGlzIGdvdmVybmVkIGJ5IHRoZSBsYXdzIG9mIHRoZQorU3RhdGUgb2YgTmV3IFlvcmsgYW5kIHRoZSBpbnRlbGxlY3R1YWwgcHJvcGVydHkgbGF3cyBvZiB0aGUgVW5pdGVkIFN0YXRlcyBvZgorQW1lcmljYS4gTm8gcGFydHkgdG8gdGhpcyBBZ3JlZW1lbnQgd2lsbCBicmluZyBhIGxlZ2FsIGFjdGlvbiB1bmRlciB0aGlzCitBZ3JlZW1lbnQgbW9yZSB0aGFuIG9uZSB5ZWFyIGFmdGVyIHRoZSBjYXVzZSBvZiBhY3Rpb24gYXJvc2UuIEVhY2ggcGFydHkgd2FpdmVzCitpdHMgcmlnaHRzIHRvIGEganVyeSB0cmlhbCBpbiBhbnkgcmVzdWx0aW5nIGxpdGlnYXRpb24uPC9zcGFuPiA8L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbD48IVtpZiAhc3VwcG9ydEVtcHR5UGFyYXNdPiZuYnNwOzwhW2VuZGlmXT48bzpwPjwvbzpwPjwvcD4KKworPC9kaXY+CisKKzwvYm9keT4KKworPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9ub3RpY2UuaHRtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9ub3RpY2UuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNmFmOTY2Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL25vdGljZS5odG1sCkBAIC0wLDAgKzEsNzkgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAvL0VOIj4KKzxodG1sPgorPGhlYWQ+Cis8bWV0YSBodHRwLWVxdWl2PUNvbnRlbnQtVHlwZSBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9aXNvLTg4NTktMSI+Cis8dGl0bGU+RWNsaXBzZS5vcmcgU29mdHdhcmUgVXNlciBBZ3JlZW1lbnQ8L3RpdGxlPgorPC9oZWFkPgorCis8Ym9keSBsYW5nPSJFTi1VUyIgbGluaz1ibHVlIHZsaW5rPXB1cnBsZT4KKzxoMj5FY2xpcHNlIEZvdW5kYXRpb24gU29mdHdhcmUgVXNlciBBZ3JlZW1lbnQ8L2gyPgorPHA+TWFyY2ggMTcsIDIwMDU8L3A+CisKKzxoMz5Vc2FnZSBPZiBDb250ZW50PC9oMz4KKworPHA+VEhFIEVDTElQU0UgRk9VTkRBVElPTiBNQUtFUyBBVkFJTEFCTEUgU09GVFdBUkUsIERPQ1VNRU5UQVRJT04sIElORk9STUFUSU9OIEFORC9PUiBPVEhFUiBNQVRFUklBTFMgRk9SIE9QRU4gU09VUkNFIFBST0pFQ1RTCisgICAoQ09MTEVDVElWRUxZICZxdW90O0NPTlRFTlQmcXVvdDspLiAgVVNFIE9GIFRIRSBDT05URU5UIElTIEdPVkVSTkVEIEJZIFRIRSBURVJNUyBBTkQgQ09ORElUSU9OUyBPRiBUSElTIEFHUkVFTUVOVCBBTkQvT1IgVEhFIFRFUk1TIEFORAorICAgQ09ORElUSU9OUyBPRiBMSUNFTlNFIEFHUkVFTUVOVFMgT1IgTk9USUNFUyBJTkRJQ0FURUQgT1IgUkVGRVJFTkNFRCBCRUxPVy4gIEJZIFVTSU5HIFRIRSBDT05URU5ULCBZT1UgQUdSRUUgVEhBVCBZT1VSIFVTRQorICAgT0YgVEhFIENPTlRFTlQgSVMgR09WRVJORUQgQlkgVEhJUyBBR1JFRU1FTlQgQU5EL09SIFRIRSBURVJNUyBBTkQgQ09ORElUSU9OUyBPRiBBTlkgQVBQTElDQUJMRSBMSUNFTlNFIEFHUkVFTUVOVFMgT1IKKyAgIE5PVElDRVMgSU5ESUNBVEVEIE9SIFJFRkVSRU5DRUQgQkVMT1cuICBJRiBZT1UgRE8gTk9UIEFHUkVFIFRPIFRIRSBURVJNUyBBTkQgQ09ORElUSU9OUyBPRiBUSElTIEFHUkVFTUVOVCBBTkQgVEhFIFRFUk1TIEFORAorICAgQ09ORElUSU9OUyBPRiBBTlkgQVBQTElDQUJMRSBMSUNFTlNFIEFHUkVFTUVOVFMgT1IgTk9USUNFUyBJTkRJQ0FURUQgT1IgUkVGRVJFTkNFRCBCRUxPVywgVEhFTiBZT1UgTUFZIE5PVCBVU0UgVEhFIENPTlRFTlQuPC9wPgorICAgCis8aDM+QXBwbGljYWJsZSBMaWNlbnNlczwvaDM+ICAgCisgICAKKzxwPlVubGVzcyBvdGhlcndpc2UgaW5kaWNhdGVkLCBhbGwgQ29udGVudCBtYWRlIGF2YWlsYWJsZSBieSB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uIGlzIHByb3ZpZGVkIHRvIHlvdSB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjAKKyAgICgmcXVvdDtFUEwmcXVvdDspLiAgQSBjb3B5IG9mIHRoZSBFUEwgaXMgcHJvdmlkZWQgd2l0aCB0aGlzIENvbnRlbnQgYW5kIGlzIGFsc28gYXZhaWxhYmxlIGF0IDxhIGhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sIj5odHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbDwvYT4uCisgICBGb3IgcHVycG9zZXMgb2YgdGhlIEVQTCwgJnF1b3Q7UHJvZ3JhbSZxdW90OyB3aWxsIG1lYW4gdGhlIENvbnRlbnQuPC9wPgorCis8cD5Db250ZW50IGluY2x1ZGVzLCBidXQgaXMgbm90IGxpbWl0ZWQgdG8sIHNvdXJjZSBjb2RlLCBvYmplY3QgY29kZSwgZG9jdW1lbnRhdGlvbiBhbmQgb3RoZXIgZmlsZXMgbWFpbnRhaW5lZCBpbiB0aGUgRWNsaXBzZS5vcmcgQ1ZTIHJlcG9zaXRvcnkgKCZxdW90O1JlcG9zaXRvcnkmcXVvdDspIGluIENWUworICAgbW9kdWxlcyAoJnF1b3Q7TW9kdWxlcyZxdW90OykgYW5kIG1hZGUgYXZhaWxhYmxlIGFzIGRvd25sb2FkYWJsZSBhcmNoaXZlcyAoJnF1b3Q7RG93bmxvYWRzJnF1b3Q7KS48L3A+CisgICAKKzx1bD4KKwk8bGk+Q29udGVudCBtYXkgYmUgc3RydWN0dXJlZCBhbmQgcGFja2FnZWQgaW50byBtb2R1bGVzIHRvIGZhY2lsaXRhdGUgZGVsaXZlcmluZywgZXh0ZW5kaW5nLCBhbmQgdXBncmFkaW5nIHRoZSBDb250ZW50LiAgVHlwaWNhbCBtb2R1bGVzIG1heSBpbmNsdWRlIHBsdWctaW5zICgmcXVvdDtQbHVnLWlucyZxdW90OyksIHBsdWctaW4gZnJhZ21lbnRzICgmcXVvdDtGcmFnbWVudHMmcXVvdDspLCBhbmQgZmVhdHVyZXMgKCZxdW90O0ZlYXR1cmVzJnF1b3Q7KS48L2xpPgorCTxsaT5FYWNoIFBsdWctaW4gb3IgRnJhZ21lbnQgbWF5IGJlIHBhY2thZ2VkIGFzIGEgc3ViLWRpcmVjdG9yeSBvciBKQVIgKEphdmEmdHJhZGU7IEFSY2hpdmUpIGluIGEgZGlyZWN0b3J5IG5hbWVkICZxdW90O3BsdWdpbnMmcXVvdDsuPC9saT4KKwk8bGk+QSBGZWF0dXJlIGlzIGEgYnVuZGxlIG9mIG9uZSBvciBtb3JlIFBsdWctaW5zIGFuZC9vciBGcmFnbWVudHMgYW5kIGFzc29jaWF0ZWQgbWF0ZXJpYWwuICBFYWNoIEZlYXR1cmUgbWF5IGJlIHBhY2thZ2VkIGFzIGEgc3ViLWRpcmVjdG9yeSBpbiBhIGRpcmVjdG9yeSBuYW1lZCAmcXVvdDtmZWF0dXJlcyZxdW90Oy4gIFdpdGhpbiBhIEZlYXR1cmUsIGZpbGVzIG5hbWVkICZxdW90O2ZlYXR1cmUueG1sJnF1b3Q7IG1heSBjb250YWluIGEgbGlzdCBvZiB0aGUgbmFtZXMgYW5kIHZlcnNpb24gbnVtYmVycyBvZiB0aGUgUGx1Zy1pbnMKKyAgICAgIGFuZC9vciBGcmFnbWVudHMgYXNzb2NpYXRlZCB3aXRoIHRoYXQgRmVhdHVyZS48L2xpPgorCTxsaT5GZWF0dXJlcyBtYXkgYWxzbyBpbmNsdWRlIG90aGVyIEZlYXR1cmVzICgmcXVvdDtJbmNsdWRlZCBGZWF0dXJlcyZxdW90OykuIFdpdGhpbiBhIEZlYXR1cmUsIGZpbGVzIG5hbWVkICZxdW90O2ZlYXR1cmUueG1sJnF1b3Q7IG1heSBjb250YWluIGEgbGlzdCBvZiB0aGUgbmFtZXMgYW5kIHZlcnNpb24gbnVtYmVycyBvZiBJbmNsdWRlZCBGZWF0dXJlcy48L2xpPgorPC91bD4gICAKKyAKKzxwPlRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBnb3Zlcm5pbmcgUGx1Zy1pbnMgYW5kIEZyYWdtZW50cyBzaG91bGQgYmUgY29udGFpbmVkIGluIGZpbGVzIG5hbWVkICZxdW90O2Fib3V0Lmh0bWwmcXVvdDsgKCZxdW90O0Fib3V0cyZxdW90OykuIFRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBnb3Zlcm5pbmcgRmVhdHVyZXMgYW5kCitJbmNsdWRlZCBGZWF0dXJlcyBzaG91bGQgYmUgY29udGFpbmVkIGluIGZpbGVzIG5hbWVkICZxdW90O2xpY2Vuc2UuaHRtbCZxdW90OyAoJnF1b3Q7RmVhdHVyZSBMaWNlbnNlcyZxdW90OykuICBBYm91dHMgYW5kIEZlYXR1cmUgTGljZW5zZXMgbWF5IGJlIGxvY2F0ZWQgaW4gYW55IGRpcmVjdG9yeSBvZiBhIERvd25sb2FkIG9yIE1vZHVsZQoraW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG8gdGhlIGZvbGxvd2luZyBsb2NhdGlvbnM6PC9wPgorCis8dWw+CisJPGxpPlRoZSB0b3AtbGV2ZWwgKHJvb3QpIGRpcmVjdG9yeTwvbGk+CisJPGxpPlBsdWctaW4gYW5kIEZyYWdtZW50IGRpcmVjdG9yaWVzPC9saT4KKwk8bGk+SW5zaWRlIFBsdWctaW5zIGFuZCBGcmFnbWVudHMgcGFja2FnZWQgYXMgSkFSczwvbGk+CisJPGxpPlN1Yi1kaXJlY3RvcmllcyBvZiB0aGUgZGlyZWN0b3J5IG5hbWVkICZxdW90O3NyYyZxdW90OyBvZiBjZXJ0YWluIFBsdWctaW5zPC9saT4KKwk8bGk+RmVhdHVyZSBkaXJlY3RvcmllczwvbGk+Cis8L3VsPgorCQkKKzxwPk5vdGU6IGlmIGEgRmVhdHVyZSBtYWRlIGF2YWlsYWJsZSBieSB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uIGlzIGluc3RhbGxlZCB1c2luZyB0aGUgRWNsaXBzZSBVcGRhdGUgTWFuYWdlciwgeW91IG11c3QgYWdyZWUgdG8gYSBsaWNlbnNlICgmcXVvdDtGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlJnF1b3Q7KSBkdXJpbmcgdGhlCitpbnN0YWxsYXRpb24gcHJvY2Vzcy4gIElmIHRoZSBGZWF0dXJlIGNvbnRhaW5zIEluY2x1ZGVkIEZlYXR1cmVzLCB0aGUgRmVhdHVyZSBVcGRhdGUgTGljZW5zZSBzaG91bGQgZWl0aGVyIHByb3ZpZGUgeW91IHdpdGggdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIGdvdmVybmluZyB0aGUgSW5jbHVkZWQgRmVhdHVyZXMgb3IKK2luZm9ybSB5b3Ugd2hlcmUgeW91IGNhbiBsb2NhdGUgdGhlbS4gIEZlYXR1cmUgVXBkYXRlIExpY2Vuc2VzIG1heSBiZSBmb3VuZCBpbiB0aGUgJnF1b3Q7bGljZW5zZSZxdW90OyBwcm9wZXJ0eSBvZiBmaWxlcyBuYW1lZCAmcXVvdDtmZWF0dXJlLnByb3BlcnRpZXMmcXVvdDsgZm91bmQgd2l0aGluIGEgRmVhdHVyZS4KK1N1Y2ggQWJvdXRzLCBGZWF0dXJlIExpY2Vuc2VzLCBhbmQgRmVhdHVyZSBVcGRhdGUgTGljZW5zZXMgY29udGFpbiB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgKG9yIHJlZmVyZW5jZXMgdG8gc3VjaCB0ZXJtcyBhbmQgY29uZGl0aW9ucykgdGhhdCBnb3Zlcm4geW91ciB1c2Ugb2YgdGhlIGFzc29jaWF0ZWQgQ29udGVudCBpbgordGhhdCBkaXJlY3RvcnkuPC9wPgorCis8cD5USEUgQUJPVVRTLCBGRUFUVVJFIExJQ0VOU0VTLCBBTkQgRkVBVFVSRSBVUERBVEUgTElDRU5TRVMgTUFZIFJFRkVSIFRPIFRIRSBFUEwgT1IgT1RIRVIgTElDRU5TRSBBR1JFRU1FTlRTLCBOT1RJQ0VTIE9SIFRFUk1TIEFORCBDT05ESVRJT05TLiAgU09NRSBPRiBUSEVTRQorT1RIRVIgTElDRU5TRSBBR1JFRU1FTlRTIE1BWSBJTkNMVURFIChCVVQgQVJFIE5PVCBMSU1JVEVEIFRPKTo8L3A+CisKKzx1bD4KKwk8bGk+Q29tbW9uIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4wIChhdmFpbGFibGUgYXQgPGEgaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9jcGwtdjEwLmh0bWwiPmh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvY3BsLXYxMC5odG1sPC9hPik8L2xpPgorCTxsaT5BcGFjaGUgU29mdHdhcmUgTGljZW5zZSAxLjEgKGF2YWlsYWJsZSBhdCA8YSBocmVmPSJodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRSI+aHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0U8L2E+KTwvbGk+CisJPGxpPkFwYWNoZSBTb2Z0d2FyZSBMaWNlbnNlIDIuMCAoYXZhaWxhYmxlIGF0IDxhIGhyZWY9Imh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMCI+aHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wPC9hPik8L2xpPgorCTxsaT5JQk0gUHVibGljIExpY2Vuc2UgMS4wIChhdmFpbGFibGUgYXQgPGEgaHJlZj0iaHR0cDovL29zcy5zb2Z0d2FyZS5pYm0uY29tL2RldmVsb3BlcndvcmtzL29wZW5zb3VyY2UvbGljZW5zZTEwLmh0bWwiPmh0dHA6Ly9vc3Muc29mdHdhcmUuaWJtLmNvbS9kZXZlbG9wZXJ3b3Jrcy9vcGVuc291cmNlL2xpY2Vuc2UxMC5odG1sPC9hPik8L2xpPgkKKwk8bGk+TWV0cm8gTGluayBQdWJsaWMgTGljZW5zZSAxLjAwIChhdmFpbGFibGUgYXQgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuZ3JvdXAub3JnL29wZW5tb3RpZi9zdXBwb3J0ZXJzL21ldHJvbGluay9saWNlbnNlLmh0bWwiPmh0dHA6Ly93d3cub3Blbmdyb3VwLm9yZy9vcGVubW90aWYvc3VwcG9ydGVycy9tZXRyb2xpbmsvbGljZW5zZS5odG1sPC9hPik8L2xpPgorCTxsaT5Nb3ppbGxhIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4xIChhdmFpbGFibGUgYXQgPGEgaHJlZj0iaHR0cDovL3d3dy5tb3ppbGxhLm9yZy9NUEwvTVBMLTEuMS5odG1sIj5odHRwOi8vd3d3Lm1vemlsbGEub3JnL01QTC9NUEwtMS4xLmh0bWw8L2E+KTwvbGk+Cis8L3VsPgorCis8cD5JVCBJUyBZT1VSIE9CTElHQVRJT04gVE8gUkVBRCBBTkQgQUNDRVBUIEFMTCBTVUNIIFRFUk1TIEFORCBDT05ESVRJT05TIFBSSU9SIFRPIFVTRSBPRiBUSEUgQ09OVEVOVC4gIElmIG5vIEFib3V0LCBGZWF0dXJlIExpY2Vuc2UsIG9yIEZlYXR1cmUgVXBkYXRlIExpY2Vuc2UgaXMgcHJvdmlkZWQsIHBsZWFzZQorY29udGFjdCB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uIHRvIGRldGVybWluZSB3aGF0IHRlcm1zIGFuZCBjb25kaXRpb25zIGdvdmVybiB0aGF0IHBhcnRpY3VsYXIgQ29udGVudC48L3A+CisKKzxoMz5DcnlwdG9ncmFwaHk8L2gzPgorCis8cD5Db250ZW50IG1heSBjb250YWluIGVuY3J5cHRpb24gc29mdHdhcmUuIFRoZSBjb3VudHJ5IGluIHdoaWNoIHlvdSBhcmUgY3VycmVudGx5IG1heSBoYXZlIHJlc3RyaWN0aW9ucyBvbiB0aGUgaW1wb3J0LCBwb3NzZXNzaW9uLCBhbmQgdXNlLCBhbmQvb3IgcmUtZXhwb3J0IHRvCisgICBhbm90aGVyIGNvdW50cnksIG9mIGVuY3J5cHRpb24gc29mdHdhcmUuIEJFRk9SRSB1c2luZyBhbnkgZW5jcnlwdGlvbiBzb2Z0d2FyZSwgcGxlYXNlIGNoZWNrIHRoZSBjb3VudHJ5J3MgbGF3cywgcmVndWxhdGlvbnMgYW5kIHBvbGljaWVzIGNvbmNlcm5pbmcgdGhlIGltcG9ydCwKKyAgIHBvc3Nlc3Npb24sIG9yIHVzZSwgYW5kIHJlLWV4cG9ydCBvZiBlbmNyeXB0aW9uIHNvZnR3YXJlLCB0byBzZWUgaWYgdGhpcyBpcyBwZXJtaXR0ZWQuPC9wPgorICAgCis8c21hbGw+SmF2YSBhbmQgYWxsIEphdmEtYmFzZWQgdHJhZGVtYXJrcyBhcmUgdHJhZGVtYXJrcyBvZiBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuIGluIHRoZSBVbml0ZWQgU3RhdGVzLCBvdGhlciBjb3VudHJpZXMsIG9yIGJvdGguPC9zbWFsbD4gICAKKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9wbHVnaW4ucHJvcGVydGllcyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9wbHVnaW4ucHJvcGVydGllcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYjIwY2I1Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3BsdWdpbi5wcm9wZXJ0aWVzCkBAIC0wLDAgKzEsMjYgQEAKKyMvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIyAqIENvcHlyaWdodCAoYykgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyMgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisjICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisjICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyMgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorIyAqCisjICogQ29udHJpYnV0b3JzOgorIyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorIyBUbyBjb2RlIGRldmVsb3BlcjoKKyMgICBEbyBOT1QgY2hhbmdlIHRoZSBwcm9wZXJ0aWVzIGJldHdlZW4gdGhpcyBsaW5lIGFuZCB0aGUKKyMgICAiJSUlIEVORCBPRiBUUkFOU0xBVEVEIFBST1BFUlRJRVMgJSUlIiBsaW5lLgorIyAgIE1ha2UgYSBuZXcgcHJvcGVydHkgbmFtZSwgYXBwZW5kIHRvIHRoZSBlbmQgb2YgdGhlIGZpbGUgYW5kIGNoYW5nZQorIyAgIHRoZSBjb2RlIHRvIHVzZSB0aGUgbmV3IHByb3BlcnR5LgorIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisjICUlJSBFTkQgT0YgVFJBTlNMQVRFRCBQUk9QRVJUSUVTICUlJQorIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitwbHVnaW5OYW1lID0gU1RFTSBDb3JlIFRlc3QgU3VpdGUKK3Byb3ZpZGVyTmFtZSA9IEVjbGlwc2Uub3JnCisKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy8ucHJvamVjdCBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy8ucHJvamVjdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMDQ3ZDUyCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzLy5wcm9qZWN0CkBAIC0wLDAgKzEsMTIgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8cHJvamVjdERlc2NyaXB0aW9uPgorCTxuYW1lPkJhc2ljVGVzdHM8L25hbWU+CisJPGNvbW1lbnQ+PC9jb21tZW50PgorCTxwcm9qZWN0cz4KKwk8L3Byb2plY3RzPgorCTxidWlsZFNwZWM+CisJPC9idWlsZFNwZWM+CisJPG5hdHVyZXM+CisJCTxuYXR1cmU+b3JnLmVjbGlwc2Uuc3RlbS5zdGVtbmF0dXJlPC9uYXR1cmU+CisJPC9uYXR1cmVzPgorPC9wcm9qZWN0RGVzY3JpcHRpb24+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FnaW5nU0VJUkRpc2Vhc2VfRkRfUmVmZXJlbmNlL0FnaW5nU0VJUkRpc2Vhc2UvaHVtYW4wdG8wL0Rpc2Vhc2UgRGVhdGhzXzIuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BZ2luZ1NFSVJEaXNlYXNlX0ZEX1JlZmVyZW5jZS9BZ2luZ1NFSVJEaXNlYXNlL2h1bWFuMHRvMC9EaXNlYXNlIERlYXRoc18yLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YWQxYTViCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BZ2luZ1NFSVJEaXNlYXNlX0ZEX1JlZmVyZW5jZS9BZ2luZ1NFSVJEaXNlYXNlL2h1bWFuMHRvMC9EaXNlYXNlIERlYXRoc18yLmNzdgpAQCAtMCwwICsxLDMzIEBACitpdGVyYXRpb24sdGltZSxFRy1GUkctRzIxMDAwMSxFRy1GUkctRzIxMDAwMixFRy1GUkctRzIxMDAwMyxFRy1GUkctRzIxMDAwNCxFRy1GUkctRzIxMDAwNSxFRy1MT0UtRzI0MDAwMSxFRy1MT0UtRzI0MDAwMixFRy1MT0UtRzI0MDAwMyxFRy1MT0UtRzI0MDAwNCxFRy1MT0UtRzI0MDAwNSxFRy1MT0UtRzI0MDAwNixFRy1MT0UtRzI0MDAwNyxFRy1MT0UtRzI0MDAwOCxFRy1MT0UtRzI0MDAwOSxFRy1VUEUtRzI5MDAwMSxFRy1VUEUtRzI5MDAwMixFRy1VUEUtRzI5MDAwMyxFRy1VUEUtRzI5MDAwNCxFRy1VUEUtRzI5MDAwNSxFRy1VUEUtRzI5MDAwNixFRy1VUEUtRzI5MDAwNyxFRy1VUEUtRzI5MDAwOCxFRy1VUkctRzMwMDAwMSxFRy1VUkctRzMwMDAwMixFRy1VUkctRzMwMDAwMyxFRy1VUkctRzMwMDAwNAorMSxUdWUgMjUgSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzIsV2VkIDI2IEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCiszLFRodSAyNyBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorNCxGcmkgMjggSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzUsU2F0IDI5IEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCis2LFN1biAzMCBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorNyxNb24gMzEgSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzgsVHVlIDEgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzksV2VkIDIgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzEwLFRodSAzIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxMSxGcmkgNCBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTIsU2F0IDUgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzEzLFN1biA2IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxNCxNb24gNyBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTUsVHVlIDggRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzE2LFdlZCA5IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxNyxUaHUgMTAgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzE4LEZyaSAxMSBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTksU2F0IDEyIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyMCxTdW4gMTMgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzIxLE1vbiAxNCBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjIsVHVlIDE1IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyMyxXZWQgMTYgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzI0LFRodSAxNyBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjUsRnJpIDE4IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyNixTYXQgMTkgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzI3LFN1biAyMCBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjgsTW9uIDIxIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyOSxUdWUgMjIgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzMwLFdlZCAyMyBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMzEsVGh1IDI0IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCiszMixGcmkgMjUgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWdpbmdTRUlSRGlzZWFzZV9GRF9SZWZlcmVuY2UvQWdpbmdTRUlSRGlzZWFzZS9odW1hbjB0bzAvRV8yLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWdpbmdTRUlSRGlzZWFzZV9GRF9SZWZlcmVuY2UvQWdpbmdTRUlSRGlzZWFzZS9odW1hbjB0bzAvRV8yLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYjQyNmQ2Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BZ2luZ1NFSVJEaXNlYXNlX0ZEX1JlZmVyZW5jZS9BZ2luZ1NFSVJEaXNlYXNlL2h1bWFuMHRvMC9FXzIuY3N2CkBAIC0wLDAgKzEsMzMgQEAKK2l0ZXJhdGlvbix0aW1lLEVHLUZSRy1HMjEwMDAxLEVHLUZSRy1HMjEwMDAyLEVHLUZSRy1HMjEwMDAzLEVHLUZSRy1HMjEwMDA0LEVHLUZSRy1HMjEwMDA1LEVHLUxPRS1HMjQwMDAxLEVHLUxPRS1HMjQwMDAyLEVHLUxPRS1HMjQwMDAzLEVHLUxPRS1HMjQwMDA0LEVHLUxPRS1HMjQwMDA1LEVHLUxPRS1HMjQwMDA2LEVHLUxPRS1HMjQwMDA3LEVHLUxPRS1HMjQwMDA4LEVHLUxPRS1HMjQwMDA5LEVHLVVQRS1HMjkwMDAxLEVHLVVQRS1HMjkwMDAyLEVHLVVQRS1HMjkwMDAzLEVHLVVQRS1HMjkwMDA0LEVHLVVQRS1HMjkwMDA1LEVHLVVQRS1HMjkwMDA2LEVHLVVQRS1HMjkwMDA3LEVHLVVQRS1HMjkwMDA4LEVHLVVSRy1HMzAwMDAxLEVHLVVSRy1HMzAwMDAyLEVHLVVSRy1HMzAwMDAzLEVHLVVSRy1HMzAwMDA0CisxLFR1ZSAyNSBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMixXZWQgMjYgSmFuIDExLDI1MC4wODMwOTI5MjgyMTM4LDIxNy42MTA1NjUyODQ5MTk3NywwLjAsNDIuMzY1NDAzMDE0MDc2NTgsMC4wLDc2LjcxODg3MTgwNTA4OTg5LDAuMCwwLjAsNzQuNDQ0Njg5MjQzNjE1MzEsNzAuOTYwOTQ5Mzg2NDE0MTYsMC4wLDAuMCwwLjAsMC4wLDMzMDguODUyMDUyLDY1NDguNDY4NTc5Mzc1OTksNTUwMC4wNzc3ODcxNjgwOCwxNTQ0LjkzNTI1NzA5MTE0MDgsNDUwMS40NTg0OTY3NTMwNDQsMjk5Ny45NDA1OTM4NzY4MSw0NDI4LjY4MTEwOTIzMzIyLDQ5MTguMjk2MzMxMTU4NjYsMC4wLDgyLjQ1MTA4OTY0MTk3OTUsNDguNDM3MTU1Mzg1MTI5NCwwLjAKKzMsVGh1IDI3IEphbiAxMSwzNDguMTcwMjcxNzg0MDkyNiwzMDIuOTcxOTY3MzgzODc1NCwwLjAsNTkuMDQ5OTAxOTY4NDIwMywwLjAsMTA2Ljk1MzA3MjU2OTI2MzAxLDAuMCwwLjAsMTAzLjc4MjAyMzM2MTU3NjMyLDk4LjkyNjEwOTUzOTAxOTYsMC4wLDAuMCwwLjAsMC4wLDQ2MDQuMDI5NDUyNTgyNTc0LDkxMTQuMTU5MDU2Mjc3NzMsNzY1Mi45Njk3NTE1MTY5MjksMjE0OS42NzMzNzkwNTkzNjM1LDYyNjMuNDYyOTExOTE0NjU3NSw0MTcxLjQyMzIzNTQ2NzY2Miw2MTYyLjE5ODUwMzU4MjIwOSw2ODQzLjQ2MjcwNzMxMTU1LDAuMCwxMTQuOTQ1MjM4Mjg4NTg2MjgsNjcuNTE3NTYwNzY4NTc5NTQsMC4wCis0LEZyaSAyOCBKYW4gMTEsNDY4LjA1MjYzMjc3MDY0Mjg0LDQwOS45NjgxMzQ2MDkxODc3LDAuMzE0MTk5MzMyMjYxNTI1Niw4MC43MTY3MjgwODcyODAyNywwLjMwNTQxNjExOTU4NzAwNDIsMTU1LjcyMzE0ODEzOTg3MjQyLDEuMzMwMDk4MDIxODM0NDA1LDIuNzM4NDMxMTI1MDg5NDcxNSwxNTEuMDgxNzM2OTU0NTIxNzQsMTQzLjM5MDM2MDk0MjkxNTQ0LDAuODc1ODU2MTAxNjEzNTc4OSwyLjIwODQ3NTc3MzA2NjYyNCwwLjAsMC40MDE1MjUyMDg4NTg1NzkzNCw1OTE2LjE1MDYyNTA1NjM5NSwxMTQ2Ny4yNzAyODIyNjA2NjIsOTgzNi4xMzU4MjIwNjUyNiwyNzYzLjc0NzM4Mjk0MTIyNDcsODA1Mi45NjQ0ODUxNzk1NTY1LDUzNTkuOTQ0NzU2NjUzMjc4LDc5MjIuNzUxOTAzODQzOTUsODc5OC42ODI4Mzg4ODE5OTIsMC41Mjg2MjI2ODg1MzUzODg0LDE2OS40NTAwNDk4NTc1NTgyNyw5My42NzY3MDczMjQyMzcyMSwwLjAKKzUsU2F0IDI5IEphbiAxMSw2MjguNDc3NjM5Mjk3OTQ0LDU1NC4zNDU2NDc3NDkyMDkxLDAuODc4MDUwNzAzMDMxNDYyNiwxMTAuMzY3MTU1MDAwOTMwNSwwLjg1MzUwNzM3MDUzMjk1MzcsMjI2LjUzOTkxMDk4OTYyMzIyLDMuNzE3Mjg4NTMwODczMTc4Nyw3LjY1MzIwNzQ2MjYzNjc5LDIxOS43NTQxMzE4MDc2MjUwMSwyMDcuNzMzOTA2NDk1MDE2MiwyLjQ0Nzc2MDk5MzUyNzgxMTcsNi4xNzIxMzk1NDQyMTYyMTgsMC4wLDEuMTIyMTYxMzYyMDUzMTczNiw3NTQ5Ljc2MTQzNTMzMzAzMSwxNDI2Ni42ODM1NDU0NTY5OTUsMTI1NTUuMzQxMTM0MzM0MTY1LDM1MjkuMDQ0MDEwMTc4NjQ1NywxMDI4My4yOTY3MjYyODMzNTIsNjgzOS41MDkzMzIyODIyNjIsMTAxMTYuOTk2MTU4NjkxMDE4LDExMjM1LjU2MjA4NTk3Mjc3MywxLjQ3NzM0NzkzMTI4MzAzMjIsMjQ5LjMxMTUyNDM1ODQwNTE3LDEzMC4wNjczNTcwMTAxMjc0NCwwLjAKKzYsU3VuIDMwIEphbiAxMSw4MzcuMDg0MTE3Nzc3NTc0Niw3NDIuOTkyMTU2NjQ2MjkzOCwxLjc4MDg4OTE4MDUxNTM2MTUsMTQ5LjMyMDU2NjY1MjQ4MDc1LDEuNzM1Njg3NDE2OTg2NTM5NSwzMjQuMjU1ODg0NTM2MzI1NSw3LjY4NjIzNTg1NTQwNTM1MSwxNS43MTAxNzgzMzYzMDQ1NzMsMzE0LjQ4MzUyNDY3MjQyMTU0LDI5Ni4yNjg1MTU4OTg5MDIxLDQuOTg5MzQyNTgyNTg1MTUyLDEyLjcyNjAzOTAyMzI1MDg5MSwwLjAxMjQ1MzkxMjc0MDA0Nzk3NSwyLjM1NTA2OTMwNjAwOTk1Niw5NjIwLjQ0ODc1MjQ4MDQ0MywxNzcyMS41MTYyOTU5MDMwODYsMTYwMDMuNjQwNDA4NTEzMTA5LDQ1MDAuMTcyMTk1NTE5NDM0LDEzMTEzLjQ4OTk1NTY1NjY5Niw4NzE0LjgwMjMwOTc1NjMxMywxMjkwMS40MDM3MTYzNjM0NywxNDMyNy44NjgzMTk1ODIzMzYsMy4wNDc2OTM3NjUzOTYyMTksMzYwLjQ5MDk2MTYwMDAzMjczLDE3OC40NTE5ODAyMTMwMzU0Myw2LjQxNDgxNzgzNDM1MzIwM0UtNAorNyxNb24gMzEgSmFuIDExLDExMDQuMDI2NDIwODU0MjU5LDk4NS40MTY2OTc5Njk3NDEsMy4xNzgxNjk3NzIxOTMwMjYsMTk5LjU4MTQ2ODQ2NzY3NjMzLDMuMTA4NTExNzk2NDg3MzI1NSw0NTYuOTM4NDU4MTQ4Njk1MiwxNC4wNjkzMTEwOTU3MTMzNTMsMjguNDg3MjA3Mzg1NDEwMzE1LDQ0My4wNjM5NDczNTgxMzU2LDQxNi4xNDUzODk4NjUxNzk2LDguOTYzMzIzNDU3MjU3MDEyLDIzLjIwOTM2MjM5NTI1NDkzNSwwLjA1MjE1MTAwNzQ3NzIzMDM1LDQuMzkyODIwNjIwNjQ0NTE5LDEyMjM4LjU2MjA3MzgwMzY4NSwyMTk5Mi4zODY5NDY4Mzk2MzcsMjAzNjUuODI1NTg4ODYzNDQ1LDU3MjkuNTk4MjcwMjk3MTI5LDE2Njk2LjM1NDc5NjkyMDE1LDExMDg1LjcxNTIzOTY2NzI3NywxNjQyNi4zMjc1NjMxNTEzMjgsMTgyNDIuNTc2NTE3ODAwMjM3LDUuNTYyMTQwNjEyODcwODQyLDUxMi44NzUxNDgyMDcyODA1LDI0MS42NDI5ODQ3MTIyMTE0NCwwLjAwMjY4NjIwMjg2MzI2NDIxMjcKKzgsVHVlIDEgRmViIDExLDE0NDEuNTM5MDkwMjc2ODg5NSwxMjkzLjExNzkwOTgxNzM1Niw1LjI2OTM1NzU4OTU3MzQ3LDI2My42OTY5Njc4NDU0ODc3Myw1LjE3MzU2OTk5Nzk5MTk5NDUsNjM0LjkxNDQxMzM1NzI1MjksMjMuOTU0NDIxMDQ2Njk0MjE1LDQ4LjAyODI4ODUyODk5NzM2NSw2MTUuNDY3MDA0MDc3MDA3Nyw1NzYuNTIxNzE0NTYwNDI3LDE0Ljk2NjgxMTkwMjAyMjU0MiwzOS4zNjU2NTAzNDUzMTI2NDUsMC4xNDA1OTY0ODg4NDE3MTI0NCw3LjYyMjUwMzAzNzMwNTE3MywxNTUyMy4yNzc4MDYxODc0NTYsMjcyNDIuODQxMTgwMDg0NTcsMjU4NDEuNjc0NDU0MzQxMzMzLDcyNzQuMTIzNDU4NTIwNzU2LDIxMTk3LjMyMDgwODgyNjQzMywxNDA2MC4xMTg0NjY2MDUwODMsMjA4NTQuNTQxNzE2NDQxMDgzLDIzMTYwLjQ1NTk0NDU1MzQwNyw5LjQ0MTY1NTg5MzMyNDQzLDcxOS4xNDMxMDI4MDYxMjM1LDMyMy4yMjM5MjYyMjUwODQ0LDAuMDA3MDg1MDk1OTc4NTU5NjE1Cis5LFdlZCAyIEZlYiAxMSwxODYzLjIzMzkyNzI5OTMzNDcsMTY3OC45MDM2MTgxMjY1Nzc0LDguMzA4NjAyMjM5MDY4Njg5LDM0NC42NjA1NjMyODk5NjY3LDguMTg5NTIyODYxNTk0NTE5LDg3MC44Njc4ODQ2MTg3Njc0LDM4Ljc4MTI5NTc5MzEzNTQ4NCw3Ni45OTg1MTg5MjAyODI0Miw4NDMuOTI3NTg0ODQ3MjY5NCw3ODguNjMzOTA4ODA3MDY3OCwyMy43Njk3NTA2MTMxMDYxOTcsNjMuNDg4NDM0MzcxNjI2MDUsMC4zMTA4MjIyMzc5NTM1NjA0NSwxMi41Njc0MTY5NTU5MjYzOCwxOTYwMi4wMzEzNzQ5MTU4OCwzMzY0NS4zNjMzODA3NDk3MSwzMjY0NS4wNzY1OTA0OTUzNyw5MTk0LjY2NzgwMzY4NzUzLDI2NzkzLjc3NzMzOTA4ODA3NiwxNzc1My4zNTUyNzcyMDY2MiwyNjM2MC41OTc1MDg2Nzk2NjgsMjkyNzUuMzUzMjIwNTQ4MTksMTUuMjQxNjY3MjE3NDk4NTQxLDk5NC45OTU0Njc4MTE4ODkyLDQyNy40NTA1MzIwMjMzOTY1MywwLjAxNTEzNDUyMjcwODk1ODUyNworMTAsVGh1IDMgRmViIDExLDIzODMuOTAyMDU5Nzk4NjQ2LDIxNTYuNzAyODkzMjUxODM2NSwxMi42MjY1MjQxMjQwMDg5MTMsNDQ1Ljk4MDM5NTIwNzQ2MDczLDEyLjQ5NTI0NzY2OTc4MzE5MywxMTgwLjU3ODg1MTQ4MzU3NTQsNjAuNDkzMTI0MzczMTg4NDEsMTE4Ljk0NDY3MjYyMTkwODg4LDExNDMuNjQ3MzUwNTI2MjM0LDEwNjYuNDQyMjkxMTA3MjgzOCwzNi4zODU4MTMzMzc0MjMzLDk4LjY1NTc5MDI4MDMyMjU1LDAuNjEzMTc2ODUyNTM2OTkyNiwxOS45NDc2NjAyMTM0ODQxNCwyNDYxMC41MTM2MjI4ODM0LDQxMzg0LjUyMTA1MjA1NTY5LDQxMDA0LjEwMjAyNTU4NjMxLDExNTU2LjMyMDcxNjAyNDkyLDMzNjc1LjE5NDEyMDg4NTMyNCwyMjI4OC4yNDUzNDA5ODk2MiwzMzEzMC45NDY0NDUxMjUxNiwzNjc5NC4zMjY5MzQwNDAwNjYsMjMuNzA5NzI0Njc2NTAxMzAzLDEzNjAuMTU1MzkzMzAwMDIxOCw1NTkuMzg2MTUzNjEzNDY4MiwwLjAyODY1MjkxMzMwNDYzNDczNgorMTEsRnJpIDQgRmViIDExLDMwMTkuMzE5OTI3NDk5NDQ5LDI3NDEuMzY3OTY5OTYwNTgsMTguNjU4NTA4NjYwMDU2MjE0LDU3MS44MTkwNjY2MTU2MjM1LDE4LjU0MDAzMjMyMjYyNTMyLDE1ODMuOTg4NTU0NjU3NTI4NSw5MS43MzYwNTIyNTcwNDcxNSwxNzguNjM1MDM2MTA1NDc1MzYsMTUzMy44MDkyOTA2NjEwNDczLDE0MjcuNTY4MjA1MjI1MDgwOSw1NC4xNjUwMTIyNjAxOTcwNiwxNDkuMDM3NjYwOTU5Mzg1NSwxLjEyMzMyMTk1NTYxNTg5MjcsMzAuNzYwMzk2NjQ4NDQxMDQ1LDMwNjkxLjEzNzM5MDU4MTY4Nyw1MDY1OS4xNzUyMzg5NjAxNiw1MTE1OC40Njc0ODAwMDIxLDE0NDI3LjYzNjQwMTcyNDQ0MSw0MjA0MS4wMzg1MDQ1NDA3OSwyNzc5My43MDg1NjU2MzM2MjgsNDEzNjEuODk1MzI2Mzg1OTksNDU5MzUuMzc0NDE5MzY1MDMsMzUuODYxMzgyNjI4ODkzMjgsMTgzOS43ODU3MzI3NDIwNTU5LDcyNS4xMzkzNTkzMTY2MjIxLDAuMDUwMTk4MTEyNzY4MDQ5MTkKKzEyLFNhdCA1IEZlYiAxMSwzNzg1LjYxNjQ3NzQ1MzksMzQ0OC4wNDI3Nzg3MjA3MzU0LDI2Ljk3OTU3MjI5MzI5NDYwMiw3MjcuMTQ0ODcwOTM0Njk3NywyNi45MjEyMzIyMjgxODM0MiwyMTA2LjQ4MzkxNTI1MTk0NTMsMTM2LjExNjM4OTYyMzU2MDQ1LDI2Mi40OTAzMDM2ODY1MjIyLDIwMzguNzk1Mzk2ODYwNTg4MiwxODk0LjQyNTI2NTY2MjM0MTYsNzguOTA5OTYxMDQ2NDcyMjMsMjIwLjI4OTQyNTY0NjE0Njk1LDEuOTUzMzc4NTUxODA4NzQ5NCw0Ni4zODUwOTUzMTgyNzE2MjQsMzc5ODYuNjk3NDc2MzE2ODA0LDYxNjgwLjg5NDcxOTExMzcwNSw2MzM0OC44ODcwMjQzNjUxNiwxNzg3Ny41OTkyMDQ2MDY0Myw1MjA5MS44OTc5MzQyNDEzMiwzNDM5OS4wNDY1NzA4ODQ5Miw1MTI1MC44NzU1OTAxNDYxNiw1NjkxNy43MzI3NzkwNDM2NCw1My4wNzc4MzU1NDAyNjk2NzUsMjQ2Ni4yMTc5MDE3MTM5ODQyLDkzMi4xMjk2NDE2NTI0MTg5LDAuMDgzMzQ4NjczMjk4NTcyMDQKKzEzLFN1biA2IEZlYiAxMSw0Njk3Ljg0OTAzMTMyOTQ5LDQyOTAuNzU5Mjk0NDUyMzcxLDM4LjM0NzE3MzM5ODE4NDM4LDkxNy44NjI5NjY3NTU5NTM1LDM4LjQzMTE1NjIxMjA5ODIxNiwyNzgwLjM4OTgwODA0NjQ0LDE5OC41MzIyMzY1MTMyOTM2NCwzNzkuMTI5ODY2MTUyNTU0OSwyNjg5LjU5MTgwNjU1MjE2MSwyNDk1LjUzMzk3ODQxMDIyNTcsMTEzLjAyMTcwOTQ1Njk4ODc3LDMyMC4wNTU5NjIwMjczODI1LDMuMjY3MzQ3MzMwNjU4NzM1LDY4LjcyMTQwMzM2MjgzOTkyLDQ2NjI2LjI0NzkwMTU2NDEyLDc0NjY1LjgxNzA1MjgxMTkxLDc3NzkzLjI2ODA2ODIyNDU0LDIxOTY4LjgwNjcwODg2NTczNCw2NDAwOS41NzgyMDY5MzU2LDQyMjIxLjE5MTI5NTk0MTg2LDYyOTc2Ljg2MzcyOTYwNTE5LDY5OTQwLjEzMDYwMjY5NSw3Ny4yMzE1NTgxMDYwOTk4MSwzMjgxLjAwMjM4MzUxNzU3MTYsMTE4OS4zNDYwMjE2Mjg2ODkyLDAuMTMzMDcyODM5MDcxNjA0NzgKKzE0LE1vbiA3IEZlYiAxMSw1NzY3LjQ2NTg2ODkyMjM3Nyw1Mjc5Ljk0OTc4NzEzMTUyMSw1My43NTM5MDEzOTE2MDE5ODUsMTE1MC45MDQxNDU4Njg5OTQsNTQuMTE1Njc0ODM4NTcwMDIsMzY0Ni42OTUzMDQxMDg1MDM1LDI4NS42MDIzNzY2MzMzNTg4Niw1NDAuMDY2ODIwMDY4OTcyMSwzNTI1LjM5OTM1Nzk2NDU3NCwzMjY3LjA0MzU0NjAxMjgzMiwxNTkuNjgzNDQwMDE5Mjg4NTMsNDU4LjYxOTM0NDYwMTU3MTgsNS4zMDIzMjE2OTMxODI3ODMsMTAwLjM3MDAyNzk3MjE1OTksNTY3MDAuMzg5NzUwMjY1MDUsODk4MTcuNDA0MjU0NjI4MDcsOTQ2NDQuOTY3NzI1ODY2NjIsMjY3NDUuNDc4NzY2MjA0NDMsNzc5MjIuMTI5MzEzMjk5NCw1MTM0Mi4zODI5ODg2NzI1MzYsNzY2NjUuOTY2NTk1MjU4MTksODUxNDIuNTYzNzAxNzU2NDEsMTEwLjg0ODU0ODEwMTM1NDc0LDQzMzcuMzM5NDAwNzI1MzgxLDE1MDcuNTc0ODUwMjg0NjA5LDAuMjA2MjEzNzk3NzUyNjc3MTcKKzE1LFR1ZSA4IEZlYiAxMSw2OTk4LjM2NzcyNzYyOTQ3OCw2NDE4LjU5ODY5NDU5MTA3Niw3NC40OTIyNjU4ODQ4OTkzNywxNDM0LjI0NTM0NDA2NzYwMzQsNzUuMzQ3NTk4NzEwODcwNTcsNDc1Ny4wNDY0NTYzMDQ5OTUsNDA2LjIyMTg5MjY5NzY5MTcsNzYwLjU5MzU3OTAyMTQ2ODgsNDU5NS40Njk4Nzk4MDc5MTYsNDI1NC40OTE4MzczMTE2MzcsMjIzLjA5MjMyMzA0MjA0MDYyLDY0OS43MzI0OTk1MDM3MTI1LDguMzk3NTM2NzcwMTQ0NTgsMTQ0Ljg3MDE0ODkxMTMyMTA1LDY4MjIzLjU1Mzg3MDkzMjA0LDEwNzI5Ny40OTgxMzMxNjIzMywxMTM5MjguOTY0MjQ5NDYwMzMsMzIyMTUuMDc2MDIyNzQ1MTEsOTM4NTAuMjcwMTU5MTg0MDUsNjE3NzYuMDkwNzM4NDY5NzksOTIzMzguNjk0OTU4MTU3MjYsMTAyNTQ3LjczNDcyNDUxNjc1LDE1Ny4zMTgyNzM3ODEwMjc4Nyw1NzAyLjk2NDAxMjIxNDg2MSwxODk5LjU2NzkzNDUwODU3MTYsMC4zMTIxMjczNDEzMTUzOTk1NAorMTYsV2VkIDkgRmViIDExLDgzODEuNDExODk0ODM5ODc1LDc2OTYuODk2MTY4OTkxMTEsMTAyLjIzMzg3MzkyODUyMTU4LDE3NzYuODI1Mjg0MTk4ODksMTAzLjkxODM0MTA2MTE2MDUsNjE3Ni4wMjUxMDUwOTQ0NzEsNTcyLjI4MTUzNzk2NjI2MDUsMTA2MC45MDg3Nzk0Mzg1Niw1OTYxLjE3MDAzNzI3NzIzLDU1MTQuODI0ODY5MTQwNTExNSwzMDguNzUxNzE1OTY0NzgyMTQsOTExLjY5MTMwODEyNTAxMTEsMTMuMDMzOTc5MzY3MDI1MzQsMjA3LjAxMDY1MTcwMTUzOTEzLDgxMDgyLjI4MTQzMDMxNzg5LDEyNzE4My4yMTYwNzEwMjkwNiwxMzU0NTQuMTk5MzQxNzY1MTcsMzgzMjMuMDAyOTc5OTAxNTc2LDExMTYzMy43MDk5NDA3NTI4Myw3MzQyMC4yNjUyNzY2Nzk0OSwxMDk4MzcuNDQxNDk2NjYyNjgsMTIxOTgwLjUxMDY4MzQ3Mjc2LDIyMS4xNjUzMTc2MzM1NjYzLDc0NjMuNTU1NjQwMTE3ODg1LDIzODAuMTA2NTcyODExMTEwNywwLjQ2MzUxNzg2ODg5Nzc1OTIKKzE3LFRodSAxMCBGZWIgMTEsOTg4Ny41NDc1NDQ2NDIyOCw5MDg1LjYxMjYxMjcxODA0MywxMzkuMTI1MDQ0OTI1NjQwODUsMjE4OC4zMDM5MjE4NDk4Njk4LDE0Mi4xNTE3NDQ1NDYzNDExNSw3OTgzLjcwMjc2NTcxODA1Miw3OTkuNTk2ODc3ODM0NjMxLDE0NjcuNTQ1MzQyNDYyOTQzMiw3Njk4LjIzNjUwNzM5Mzc5Niw3MTE4LjY3MzMwOTU2NjI2OCw0MjMuODM3NjU3ODA4MjI2NzcsMTI2OC43MDkyMjYwMzg5NzI3LDE5Ljg4ODE3NzM2MDY0OTE1MiwyOTMuMjM3MDkyMjMyODQ2Myw5NDk3MS45OTcyMzc4NTYwMywxNDk0MDguMTczNjY4MDM2MjQsMTU4NzA2LjMwNTcyMDEwNzk4LDQ0OTIxLjYwNTgwOTI5MDI3LDEzMDg0MC45MzI5NzkyMTU3NCw4NjAwMC4xNjAxNDMxNDYzNiwxMjg3MzcuNjY3Nzg2Nzk0MDcsMTQyOTY5LjI5Mzg2NDUyMTIzLDMwOC40MDAxNzUwOTE0OTA0NCw5NzI2LjcyMDM4NTIwMzAwNywyOTY1Ljg5NDI4MzMwNjA4NSwwLjY3NzUzMDg0ODEyNDg4MjcKKzE4LEZyaSAxMSBGZWIgMTEsMTE0NjAuNDUwMDE1MTM3Mjc2LDEwNTI5LjEwNzg2NDU2Nzc2OCwxODcuOTAwMTY0ODU0NjM3MzUsMjY3OC41OTg3OTMwNTIyNzQ3LDE5My4wNDQxMTM2NDEyNDE1OCwxMDI3OC40MDc2MTQwMTEzNzQsMTEwOS4xMDM3MjU4MjQ4NTk2LDIwMTUuMTY4MzQ4MzA0NzMzMiw5ODk5LjEyNDQyMDA3MjI2OSw5MTUyLjg0MzI3OTEyOTY0Miw1NzcuNjU0OTc0ODc2MjU1OSwxNzUyLjY3MTI5NjEyMTgyNTQsMjkuOTA0OTU0MDI3NDQ0NTE4LDQxMi4xODE5MjgzNzE3Nzc5LDEwOTMzMS4zNzE0MTcxNzgwOSwxNzM2ODkuMDU3MjcxODUyMzYsMTgyNzM2LjIzODc5MjU4ODcsNTE3MzcuOTgzMzY1OTk5MDQsMTUwNjc1LjY2MDc0NzA5NDAyLDk5MDA4LjkxMDMyNjkzMjMsMTQ4MjU1LjgwMjE0NzI0ODE4LDE2NDY0My43NTA0NDkyODU1Miw0MjYuOTcwODE1ODQ1NDc1MiwxMjYyNi41NTEyNzk2MzgzNjMsMzY3NS4xODMyNzc5MjUyMzk1LDAuOTc3MTc0NjE2NjM1NTQ5OQorMTksU2F0IDEyIEZlYiAxMSwxMzAxMC41ODg4NjU2ODQwNjUsMTE5MzkuOTYzMjI0MDE5MjA4LDI1Mi4wMTI0Njg0ODMxMTgyNSwzMjU3LjExOTYzODU1Mjk5OTcsMjYwLjQzNDI0MDU1MTg1MDU2LDEzMTc5LjU2Mzg5NTEyMjA4MywxNTI4LjM4ODE4MDIxNjA5OCwyNzQ4LjgxNzkxMDQzOTI0NjYsMTI2NzUuMjU3NDI4NDgzOCwxMTcyMi45MTY4NDAzNTg4NTIsNzgyLjE5ODY2MDc2ODA5NzksMjQwNS4zNTc1MTM1NDcxNDcsNDQuMzk1NDQxNDU3MzU2ODI0LDU3NS4zNTIyMTQ4NDM3NzM2LDEyMzI5My4zNjg0NTg4MzA4MSwxOTk0NDMuNTM1MjY5NDI5MjQsMjA2MDc3LjQ5NjA1MDU4NTQ0LDU4MzUwLjE2NTc0MDk3MzkxLDE2OTkwNy44NjU1MjExNjc1LDExMTY2My4wODg3OTY4ODM0NiwxNjcxODEuMjg4MDU5MjcxMiwxODU2NTkuMzc1ODI3MTA3MzcsNTg3LjM0MTQ0NzczMDY3NjIsMTYzMjguNjk3MzYwMzM1MDIzLDQ1MjcuMDEwOTAyNzA0NTg2LDEuMzkzMTYxNjQzNjc4MjE3CisyMCxTdW4gMTMgRmViIDExLDE0NDEzLjk1NDQ0MDY4ODQ3NiwxMzE5OC40ODYxMDg4MjEzNDYsMzM1Ljc3ODkxNjA4NDc2MTEsMzkzMS42MjI2NTU5NzU5NTUsMzQ5LjIwNjE5NzU2ODQxMDQ2LDE2ODMwLjM0NzMzOTQwODA1LDIwOTMuNjMxODIxNDI3NDExNSwzNzI2LjY3Mjk5NDIzMjA5MTcsMTYxNTguODUyNDAyNDc0MDA3LDE0OTU1Ljc2NjkxNjQyNjc4OCwxMDUyLjgzNDQzNjEyMjU3NDUsMzI4MS4yMzY3MzgwNjg2MzksNjUuMTY4NTc0ODg2ODI3NDYsNzk4LjAxNjUxNjIxMDI0MzcsMTM1NjgzLjU4MzAxODg5ODY3LDIyNTcxMy40MzM5MzI2MTU0NywyMjY3NDQuMzM3MzcyMDg3ODQsNjQxODcuMDAxMzMzNTc3ODQsMTg2ODc0LjAxNjQ1NjM2OTE3LDEyMjkwMC44NjMxNTE0MDMzNSwxODM4NzYuNzc5NzAzMzg2MTYsMjA0MTk3Ljc2MDI2MTA0MzI0LDgwMy4yMzAzMTUyMzM0MzY3LDIxMDM1Ljc1MjkzMTk2NDM0NCw1NTM5Ljg5OTg1ODgyNTY3MiwxLjk2NjI3ODQxNzc0MjY5OQorMjEsTW9uIDE0IEZlYiAxMSwxNTUxOS41ODM3NjUzNzgyNzMsMTQxNjEuMTQyNDAxNzEwODksNDQ0LjUzMDYyNDI3NDI2NDUsNDcwNi42MjkzMzcwMzk1NzIsNDY1LjUyNTM2Njg3MzI0MzEsMjEzOTkuNzM2Nzg2NjA3OTg0LDI4NTIuMDYzNzIzNjM5NDM5Niw1MDIzLjQwMTIwNzI2MjAxMiwyMDUwMy44MDQyMzEwNTgxNSwxOTAwMS42NjM5MzEzNDc5MywxNDA5LjEwNjc3ODYwNTY1MTUsNDQ1MC45Mzc5MDMwMTg1Nyw5NC43MDY3MjA1NTM1MDYxOSwxMTAwLjM0MDgzMTM0ODU4NDMsMTQ1MTAzLjQ3OTI4ODA3MzIzLDI1MTExNy40Nzk4Nzg3ODcxMywyNDIzNzUuMzQ3Nzg1MzA2NDUsNjg1NzAuNTQ3NjkzMDM4NSwxOTk2MDEuMTkwNzgwMjg0OTYsMTMxNDU2Ljc2NjQwMjg1OTA3LDE5NjQwMC4yOTM5MjA0MjA1MiwyMTgxMDIuMzA3Nzk4NjQwMDcsMTA5Mi41NDQwMTQ2NDg3NTIyLDI2OTkyLjU5NDYyMjk5NDkzMyw2NzI5Ljg3MzMyMDY1MzkxNiwyLjc1MDQxMjMzNTAyNTQzMworMjIsVHVlIDE1IEZlYiAxMSwxNjE2OS40MzQ4NDYyOTQ2NzUsMTQ2ODEuMTQ1MDg2NzY5OTY2LDU4NC43NTE4ODIzOTE2ODQ2LDU1ODEuNDE3MjIzMzY5OTI1LDYxNy4xMDM4MjY2NzYxNjY4LDI3MDgzLjMyMDQ5NzMyMDE4MywzODY1LjAxNzg3NDg4NDExMiw2NzM0LjEyNzUwMTc1OTYwNSwyNTg4NC44Njg0MDEyMTY4OCwyNDAzNS40Nzg4MTAzOTc3NCwxODc1LjY3MDUyMzU1MzgxNCw2MDA1LjQ5ODU1MTE0NDEwMSwxMzYuMzk5MTA0NzM2NTA4MTgsMTUwOC44MzA5MzU5OTEwNzM2LDE1MDEyOC4wMTUxOTQ5MzQ4MiwyNzM4NjcuOTM4MDU5MzEwNTUsMjUwNTcyLjMyMjU4MTc2NTYsNzA4MTUuMzg4NDI3OTkwMTUsMjA2MDk2Ljc4NzcxNDU2MjE1LDEzNjAzOS44NTM4MTQ5Nzk2NCwyMDI3OTAuNDQwNDg0MzY3LDIyNTE5NS4wNTYyODQ5MjQxOCwxNDc4LjU1MTEyODY1NjAxMjcsMzQ0OTEuMDIxMDMwOTg0MDksODEwNy42NzI5NDY2MzI2OTgsMy44MTYzNzk5NjkxNTgyOTIKKzIzLFdlZCAxNiBGZWIgMTEsMTYyMzAuNzUwNjEwODUwMDksMTQ2NDAuNzAxODkwNDIxMDY5LDc2NC4xNzc4NjQyNjM1ODYxLDY1NDcuNzA0OTU0Nzg2Mzk0LDgxMy40ODM3MzgwMjk5MTMzLDM0MTAxLjkyNTcxMTE5NTk5LDUyMTEuNjkyMTc5MzEyMjE1LDg5NzguOTg2Njc0OTU3NDc4LDMyNDk0LjA2ODMwNzA0MTgxLDMwMjU2LjI2MDE3OTc1OTA2LDI0ODMuMzE5Mjg2MzA5MjgzNiw4MDYxLjQ2MDgyNzc4NDMyNywxOTQuODUwMzY3MzMyNzk0NDYsMjA1OC4xNDM5OTEyNzc3OTYsMTQ5NjEyLjUyMTExNjUxMzE4LDI5MTg4OS4wNDcwMDMwMjE0LDI0OTQyNC4zMDk2OTg3NjI3LDcwMzgxLjM1Njg3NDMzODEyLDIwNDc5My4yMDI1Nzg3NzE5MiwxMzU2MTAuODg3NjE5MjA3OTYsMjAxNTA0LjI2NTY4MTY4NDI4LDIyMzc2Mi45NDAyNzYyNTIyMiwxOTkxLjM0MTkyMTUzOTE4NDYsNDM4NzIuNjU1MjU1MTgyOTgsOTY3NS4xNjg0Mjk0MTcyNDEsNS4yNTY3MDc2MDE1NDMzNjYKKzI0LFRodSAxNyBGZWIgMTEsMTU2MzQuNTM5MDY1Mzk2NTY4LDEzOTg3LjczNjgwNDg1NDM1OCw5OTEuODAyMzgzNzM5NDQyMyw3NTg3LjMyNDQ3NDM3NDM4MSwxMDY2LjMxNTMyNzM3NTI0MTgsNDI2OTYuNzczODM3NTk4OTIsNjk5My42ODQ2ODM4MDYyNjMsMTE5MDguMDk4MjE5NDgyNTYzLDQwNTMyLjg4ODc4NjM3NjY3LDM3ODg0LjE3MjA1MDQ1NDEzLDMyNzAuMDQ0NTIzMDU4MTQ2MywxMDc2Ni44MTQ0NTgxNTAyMzMsMjc2LjI4NTg0ODQzNzQzOTksMjc5My4zMzIzODAxNDg1NTMsMTQzMDQyLjE4MzQ4MTg0OTEsMzAzMDYzLjMyNTQxMjczODY2LDIzODEwMC40NTI1NDE4ODA1LDY3MDQ0Ljc1NDE0ODQzNjIzLDE5NTA0NS40NTcwNDU2NTQwNywxMjk2OTguNjc4MzI4NDE5ODIsMTkxOTA3LjI0NDYzNTc1NjYsMjEzMTAxLjg4Njk3NjE1NjYyLDI2NjkuNjIxNTg2MDM1NjU3LDU1NTI4LjUxMTAxNjM4MDMyLDExNDIxLjEzMjIxNzc5MTE0LDcuMTkxNTAwNzM4MzY0OTI0CisyNSxGcmkgMTggRmViIDExLDE0NDA2LjU2OTI3OTE4MjYxNywxMjc2My4wNTI5MjMzMTExNzQsMTI3Ny43MjE0NTgwNDkyODU3LDg2NzAuMzc2MDI2MzkwNDc1LDEzODkuNTg3NTU0ODY5ODg0LDUzMTE5LjQxNzkzNjg4NTU4LDkzNDAuMzI5NzYzNjc0MTc0LDE1NzA2LjU4NTE1OTE3MDksNTAxOTguNDI1Mzc3NTk3MTQsNDcxNTMuNDA4ODA0NjcyMTYsNDI4MS45OTQ4MTY2MDYyMjk1LDE0MzA3LjY0NzYxMjYwOTY2LDM4OS4wNzk5NzQ1MDUxODY5LDM3NzIuNTcyMDY4MjAwMjM4LDEzMDc5NC4xNzc4ODY0ODg1NCwzMDU1OTYuODUyNzI2MjY4LDIxNzI4Ny40MTgxNTM4MjYxLDYxMDIxLjgzMTQwMjAyODI3LDE3NzQ4OC45NjkzNzQ5NTk4NSwxMTg2MzguMzQzODYxNzEwNjYsMTc0NjI1LjQ5NDg3Njg2MDIzLDE5MzkwNy44MTA2NDMxMTI0NiwzNTYyLjg3OTA4NTU1MDE1NDcsNjk4OTIuODQzMjM0NDI5NzIsMTMzMTYuODI0MjM0OTYwNDU5LDkuNzc1NDg1NjkzMDYxNTEKKzI2LFNhdCAxOSBGZWIgMTEsMTI2NzQuNzUxMjczODE5OTM4LDExMTAyLjU1Mjk1NzAwMTE2OCwxNjMyLjcwNjM1NzI2NTYwNyw5NzU0LjUzMzcyNDExMDkyLDE3OTkuNzQyMzE4OTY0Mjg2LDY1NjE0LjIwNjk1MDcxNzk0LDEyNDE0Ljc0OTEzMzc5OTI3LDIwNTk4LjkwNjc2NDIwMzU4OCw2MTY2MS4zMDg0NDE1Mzk3NSw1ODI5OS4yNDYwOTMyMzI2MSw1NTc0LjEwNTMyMzgyNzUxNiwxODkxNS4xMTg4MjMxMTI3NCw1NDQuNDM4OTAzNjg1OTUxLDUwNzAuMzk3MjYxOTg2NTM5LDExNDE2OC4yMzYzOTI0Njg0MiwyOTg0MzguMzc3MjE1OTg1MSwxODkyMjYuMDkyNjc3NTEwMjksNTI5NzMuNDYxNDQxNzc3MTQsMTU0MDUxLjE1NjM5OTUwMzEyLDEwMzYwMC44NzU0MDIwNzAxOSwxNTE1NTcuMDEzMzk5MTg1MzIsMTY4Mjg4Ljg5MjM3MTY4MzA2LDQ3MzMuOTU3MDk2MjUzMDgxNSw4NzQyNy44NDcyNjAwMTU4MywxNTMxMi4xNTI4MzIyMTEwMzIsMTMuMjA2MTgyNTcyNDQ4MjgKKzI3LFN1biAyMCBGZWIgMTEsMTA2NDQuMDEwODcxMDY1MDksOTIwNy44NTQ5NzE5OTgyODIsMjA2Ny4zNjQ2MzQ0NjA2MjYsMTA3ODYuMjA5MzYzMjM5ODI4LDIzMTUuNTY0NjM4NjU2OTI2LDgwMzkwLjUwNjYzMzI5NDg2LDE2NDIwLjMzNTE1NjYzMjYxLDI2ODUxLjIzMjk3NzM1NDc5LDc1MDMzLjA2MzQwMzcwMzU2LDcxNTM2Ljg1NDQ3NTkxOTcxLDcyMTAuMDIwMDg4MzQ4OTExLDI0ODcxLjk0NzI3NTM4Mjg0NSw3NTcuMjcyNDY1Nzk1NTg0OCw2NzgxLjM5ODE1NjY4MTE3Niw5NTExOC42MzcxNjI3MjMxNywyODE2MjkuODMzMDUwOTY5OTMsMTU3MjM5LjU0MDMzMzc1MTEyLDQzODYyLjA5MTg3MDU0NjU0NSwxMjc1MzMuNzM5OTY1ODY0NzYsODYzNTIuNTg1MjM5NzM4NDYsMTI1NDYwLjE0MTA2NTM2ODY4LDEzOTMwOC40MDYwMzQ4NzU5Miw2MjYyLjAxMzE0MzUzNzMyNiwxMDg1OTQuNDIxNTg1MDg4NDIsMTczMzMuNDYzMzkxMDUxMTYsMTcuNzMyOTI3NDc5NDk0MDMKKzI4LE1vbiAyMSBGZWIgMTEsODU0NS40NTg5NDc2NzU3NDMsNzI5NC43NjI5Mjc2ODUwNzgsMjU5MC43MTg4NDE4MDE1NzEsMTE3MDQuMDgxODcxODA4ODI3LDI5NTcuNjg5ODM4NzE4OTA2Nyw5NzU4MS41ODMwNDIyNjM0MiwyMTYwNy4wNDY0NjY1NTA4NDQsMzQ3NjkuNzk3MjMzNjQ2MSw5MDMyMC45MTMyODA0MjUyNiw4NzAyOS4wMDA1NjQ4Nzc5Niw5MjYwLjcyNDcwNTUyOTk5NiwzMjUxNi45NTYxNTMwNTUwMTYsMTA0Ny4yOTE1NDEzMjUxODcyLDkwMjQuMjE2NTc4MDA2NzA2LDc1NzY4LjMyNDA1MTgwNzU1LDI1NjQ0NC45Mzc2NjkxNjE2LDEyNDg5OS41MDQxMDAxOTE2MSwzNDcwNy41ODE1ODQwMDk0LDEwMDkwMi4xODcwMzk3OTkxLDY4ODE2LjM2NDc0MzI5MzU3LDk5MjUzLjc3MjkwNjg2Njk2LDExMDIwNy41NjgxMzQ5OTgyNiw4MjQ1Ljc5NTc2MzI3ODQ4MiwxMzM4MDIuNjk4OTgwMzM0NDIsMTkyODQuMTI4MDc3NzI0ODQ3LDIzLjY2NjAzMTYyMTk0ODEwNAorMjksVHVlIDIyIEZlYiAxMSw2NTgwLjg0NjExMDEzODYzLDU1NDEuNjMwNTk5NTA1Mzg0LDMyMDguMDMwMjY0NjI0ODUzLDEyNDQ1LjAxMTY0MzQ3MDQ5OCwzNzQ3LjUwNDk2MTUyMTQ3MDIsMTE3MTg3LjM2OTg3MjMwNjA3LDI4Mjc2LjM0OTUzMzk5NzU3OCw0NDY5Mi4wODY1MzA2NTkwNCwxMDczNjkuNDQ3MTA2NTU3MzksMTA0ODM5LjU5MzA4NjIzMjY4LDExODAxLjA0MzQyNDY4MjgxNCw0MjI0NS4yMDIwMDEyMjg1MSwxNDQwLjM2MjAwNzAwMDI4OTIsMTE5NDUuNDYyMjk2ODMxMjksNTc5MDcuMzMwNzI4Mzc3LDIyNTIyMS41MDA0OTA1NTU4Myw5NTE4MS44MjU4Mzc0MzIzNSwyNjM0NS45MDY4Mjg5NTA5NTYsNzY1ODQuODU0NTQ2OTQxMTksNTI2MTcuMDk0MTQ3OTA0Mjc0LDc1MzI3LjQwOTk4NDc0NzQxLDgzNjM5LjQ2NTA3MTEwNjU2LDEwODA3LjA0NDc2NTcyMTU2NSwxNjMzMzQuODY0NDY4NDE5NTIsMjEwNDguOTQ0NjUxMTA4NTgsMzEuMzg0NjQ3ODQyNzUxNjcKKzMwLFdlZCAyMyBGZWIgMTEsNDg4NC44OTA2MTg3MDQ4NzIsNDA1OC40NjUwNzE0Mjc2OTcsMzkxNy43NTQ3MzMzNDUxMzk0LDEyOTUxLjY2NjI3MDk2NzE1MSw0NzA1LjE1MjQ4ODY4NjI3NywxMzkwMDAuMTM3MTc2ODQ4OTUsMzY3ODIuODAxMTMwNTQ5OTUsNTY5NjYuNDAzMTAzMTA1NDUsMTI1NzkxLjk0MTc3NDU0NzIyLDEyNDg3MC44NDc0Mjg4MDQxNSwxNDkwMi44NjEwMDg2ODkyOTMsNTQ0OTkuODAyNzQ5NzQxNTYsMTk3MC4xMjk0MzY1NjY1MjgsMTU3MjIuODI1OTQzMTk0NjE3LDQyNjc2LjM5NzczMjk3NzEyLDE5MDkwOC4wMjYyMDIwODI3LDY5OTQ5LjAyNDQxODA0NzA1LDE5Mjg3LjI3NTYyNjQ0NDU5Miw1NjA2MS45MDczNzM3MDA2NCwzODc5My40MTU0ODMxOTc0LDU1MTM2Ljc5NTkyMjkxNDMsNjEyMjAuMTk1MDQzMzUxMjYsMTQwOTMuNjM3MjA1NjQwNjA5LDE5NzIzMy4wNDE1NjIzMjQyLDIyNTAyLjgzODIxMTQzODMsNDEuMzQwNzg3NTY4MjMwNTEKKzMxLFRodSAyNCBGZWIgMTEsMzUxNS45OTYyMjM3MjE2NTIzLDI4ODMuOTA1ODMzNjc4NzQsNDcwNy42OTMyMjExMjczNTcsMTMxODAuNTE1OTAwMTcwMTMyLDU4NDYuMjkwNzQ0OTI3NzM5LDE2MjUxNi41OTY5NjIxNDE4LDQ3NTI5LjA1Nzc0MjE0MjA5LDcxOTEzLjk4NzY5MjM2ODMsMTQ0OTAwLjQxODExNzA3MDEzLDE0Njc4NC43MDk2MTEzNjgwNywxODYyMy42OTM1OTE5MzMyMTcsNjk3NDkuNzM4NTY4ODcwNTMsMjY3OS44OTAzNDA0MjM4ODU0LDIwNTY2LjEyOTQxMzY1NDkxNSwzMDUxNS4zOTAwODMyOTg5NjgsMTU2NDY5LjkwNTA1MTYxODE3LDQ5ODg0LjE5OTMxNTgzNDI4LDEzNzA1LjIxNDg0MjY3NTI1NywzOTgzNC44OTA0NjE3MDQ3NDUsMjc3NDkuMDIxNzg5NjAyMTUsMzkxNzQuNDAxOTAyMzkxNCw0MzQ5Ni4yNDY3MDM2NjkwMTQsMTgyODEuODEwNTAyMTE3NDksMjM1MTQ4Ljc3NjgwNzAzOTA0LDIzNTIzLjU0MzAxNTAzNDk2OCw1NC4wNTUyNjc5MzAyMjE5MworMzIsRnJpIDI1IEZlYiAxMSwyNDcwLjM1NDc5NTU4MjgsMjAwMi41MTkxMTQ4NzEzNTcsNTU1MC43NTQ3MDc0MDg4MzksMTMxMDguNTAyMTY3NTIwOTE3LDcxNzcuMjcyNzY2MjM5NDI1LDE4Njg0OC40OTgxODMxMjU0Niw2MDk0OS40OTgxMjgzMDk0NDYsODk3NjcuMTIyMDQ0MTc5MzYsMTYzNjUzLjEyODI4MDQyMTUsMTY5OTE1LjQxMzU0MTYwMDUyLDIyOTg5LjI1MDcyNDk3MDM4LDg4NDQ1Ljg2MjM1OTg2NTc0LDM2MjQuNjEwOTI1ODUzODk3LDI2NzE0LjI4MzM0ODkyMTIwNiwyMTMxNS43MjY1ODkwODY0NCwxMjQzNTguMTQzNTM3Nzk1OTcsMzQ3NjIuNzgwNzM5NjE4MTYsOTUxOS45MjQwNjkzNzc0MjMsMjc2NjkuNzI5MTE4NDEwNzM4LDE5Mzg5LjM4NDI0OTkyOTEyLDI3MjA4Ljk1MzgyNzU0OTgzNCwzMDIxMC41NTg5ODcxNDA0NSwyMzU3Ni4zNzA0NzYxNTQyNTQsMjc2MTYwLjc5ODg3ODI1MDYsMjQwMDYuOTY1NDQ5MzA3NjEyLDcwLjA5OTEwOTI1MTM4MzExCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FnaW5nU0VJUkRpc2Vhc2VfRkRfUmVmZXJlbmNlL0FnaW5nU0VJUkRpc2Vhc2UvaHVtYW4wdG8wL0lfMi5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FnaW5nU0VJUkRpc2Vhc2VfRkRfUmVmZXJlbmNlL0FnaW5nU0VJUkRpc2Vhc2UvaHVtYW4wdG8wL0lfMi5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYThiMjMwYQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWdpbmdTRUlSRGlzZWFzZV9GRF9SZWZlcmVuY2UvQWdpbmdTRUlSRGlzZWFzZS9odW1hbjB0bzAvSV8yLmNzdgpAQCAtMCwwICsxLDMzIEBACitpdGVyYXRpb24sdGltZSxFRy1GUkctRzIxMDAwMSxFRy1GUkctRzIxMDAwMixFRy1GUkctRzIxMDAwMyxFRy1GUkctRzIxMDAwNCxFRy1GUkctRzIxMDAwNSxFRy1MT0UtRzI0MDAwMSxFRy1MT0UtRzI0MDAwMixFRy1MT0UtRzI0MDAwMyxFRy1MT0UtRzI0MDAwNCxFRy1MT0UtRzI0MDAwNSxFRy1MT0UtRzI0MDAwNixFRy1MT0UtRzI0MDAwNyxFRy1MT0UtRzI0MDAwOCxFRy1MT0UtRzI0MDAwOSxFRy1VUEUtRzI5MDAwMSxFRy1VUEUtRzI5MDAwMixFRy1VUEUtRzI5MDAwMyxFRy1VUEUtRzI5MDAwNCxFRy1VUEUtRzI5MDAwNSxFRy1VUEUtRzI5MDAwNixFRy1VUEUtRzI5MDAwNyxFRy1VUEUtRzI5MDAwOCxFRy1VUkctRzMwMDAwMSxFRy1VUkctRzMwMDAwMixFRy1VUkctRzMwMDAwMyxFRy1VUkctRzMwMDAwNAorMSxUdWUgMjUgSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMTExNDAuOTE2MDAwMDAwMDAxLDI1NTc0Ljk0ODAwMDAwMDAwNCwxODUyOC4wNCw1MjEwLjc3MiwxNTE2NS43MTIwMDAwMDAwMDEsMTAwOTkuOTQsMTQ5MjAuNzgsMTY1NjkuMTQ4LDAuMCwwLjAsMC4wLDAuMAorMixXZWQgMjYgSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsOTk5NC4wOTM0MjUwMjgxMTUsMjI5NDIuMzE2MzgxNTQ2NzIsMTY2MjAuODAyMzQxODA1NDU4LDQ2NzQuMzg2MDM2NTI3MDMyLDEzNjA0LjU4NTM0ODczMzQ0Myw5MDYwLjI3MzMxNTY5MzExNCwxMzM4NC44NjYxMzYxNjc4ODYsMTQ4NjMuNTU0NTg0MzAxNDgyLDAuMCwwLjAsMC4wLDAuMAorMyxUaHUgMjcgSmFuIDExLDEyNS4wNDE1NDY0NjQxMDY5LDEwOC44MDUyODI2NDI0NTk4OSwwLjAsMjEuMTgyNzAxNTA3MDM4MjksMC4wLDM4LjM1OTQzNTkwMjU0NDk0NSwwLjAsMC4wLDM3LjIyMjM0NDYyMTgwNzY2LDM1LjQ4MDQ3NDY5MzIwNzA4LDAuMCwwLjAsMC4wLDAuMCwxMDYxOS43NDgzOTE2MTA3MDgsMjM4NTQuOTE2NjQxNDU2MDk3LDE3NjU5LjkzMDYyOTg1ODY3LDQ5NjUuNjgyMTUwMDE3NDE2NSwxNDQ1NC44ODcwNTU4NjgzNTcsOTYyNi41OTgwNDA3NzI1OTUsMTQyMjEuMzk2NTg1NDA5NDkzLDE1NzkyLjY3OTU1MDU2NzIzNiwwLjAsNDEuMjI1NTQ0ODIwOTg5NzUsMjQuMjE4NTc3NjkyNTY0NywwLjAKKzQsRnJpIDI4IEphbiAxMSwyODYuMjU1MTY3Mjc2NTY0MywyNDkuMDkxMDc4MjY5OTE4LDAuMCw0OC41MjcxNDk1MzM3NTcxMSwwLjAsODcuODg3MzMyMTQyMTE4NjIsMC4wLDAuMCw4NS4yODE3NjYwNTQwMzE2Niw4MS4yOTEyNDM2NTg4NDg2NCwwLjAsMC4wLDAuMCwwLjAsMTE4MjguNTg4NDQ1NzI3Nzc1LDI1OTU2LjQyMDk3OTE0NDM0LDE5NjY4LjUzOTIwOTAyMTgzLDU1MjkuMzYxOTEyMjU1NDAxLDE2MDk4LjY2MjY5MjU0MzA3NywxMDcyMS4zNjc4MDQ3NzIxMjQsMTU4MzguNTc1MDM4MjQ4NzI2LDE3NTg4Ljc0NTUyNTU1MTUxMiwwLjAsOTQuNDU0NDkyNjY2OTYsNTUuNDg0MzQ4Mzc4OTQ5NTksMC4wCis1LFNhdCAyOSBKYW4gMTEsNDkwLjgxNDk3NTg3Nzg2NTMsNDI4LjQzNDIzMTMyNzk2MDU2LDAuMTU3MDk5NjY2MTMwNzYyOCw4My44OTAyMzAzNzIyODY1NCwwLjE1MjcwODA1OTc5MzUwMjEsMTU2LjcwMTk2ODE5MDU2NDE3LDAuNjY1MDQ5MDEwOTE3MjAyNSwxLjM2OTIxNTU2MjU0NDczNTgsMTUyLjA0MzkwODAyOTQyOTA4LDE0NC42MTg0NzM2NTE1OTI3OCwwLjQzNzkyODA1MDgwNjc4OTQsMS4xMDQyMzc4ODY1MzMzMTIsMC4wLDAuMjAwNzYyNjA0NDI5Mjg5NjcsMTM1NjkuMDUzNjIxMDI3MzgsMjkwMTguMTU2NDcxNzc1Njk2LDIyNTYxLjk2ODg2MDM2MTQ2LDYzNDIuMDU0NjYxNDk3OTA1LDE4NDY3Ljk4MjI5MjI1MjY3NiwxMjI5Ny43MDUwMjEyMjQzMzIsMTgxNjkuNTYxMjI2MDU3MDYzLDIwMTc3LjUzODI5NDA0MzMyLDAuMjY0MzExMzQ0MjY3Njk0MiwxNjkuNDU2NTY5ODE0OTY1NDMsOTYuNjExMjU5MzQ4MzMyMzMsMC4wCis2LFN1biAzMCBKYW4gMTEsNzU0LjUzMDMyOTE5MTQ4MjMsNjYxLjUwNDkzMjE0NzU0NTksMC41Nzk5NTM1MDY4MjY0NDA4LDEzMC40MzgzMjMxNDE0NjY2NCwwLjU2Mzc0MjI5NzAwNDU5OTUsMjUzLjg0MTM1MTA1ODkwMDA1LDIuNDU1MjM0NTIzMTI1MzcwNSw1LjA1NDg3NTEwOTYzOTAzOCwyNDYuMjY5ODkyMjcwMzc4NDUsMjMzLjU5ODcwMzkwOTU3MDgyLDEuNjE2NzI5MTUwNjA5MjAxNCw0LjA3NjYzOTcyMTc4NDU1NiwwLjAsMC43NDExNzcyMDMxNTQ0MTU3LDE1OTQ3LjE2NDM1OTEzNDAyNywzMzE2NC40Mjk5NTI2NDIxMiwyNjUxNy4xNTc1NzU1MDg5MDMsNzQ1My43Mzg4MzM3Mjc1NzEsMjE3MDguNTc1MjExOTMzODMyLDE0NDUxLjU1OTY3MTcyMTc2LDIxMzU3LjcyMjcwMTg5NzQzLDIzNzE4LjI4NTc3Njg2NTY1OCwwLjk3NTc3NzY1MzMzNzA0MzUsMjc2LjY2ODgyNzM3MjAwNzUsMTUxLjY5OTk3NzAyNDU3OTg4LDAuMAorNyxNb24gMzEgSmFuIDExLDEwOTUuNDAyNjE1MjM0MTQ0Niw5NjQuOTA3MDc3MjkzMDIxMywxLjQxMDY5ODg5Njk0MDkxMywxOTEuNjcxNTU4NDkyNDY3NjgsMS4zNzM1NTU1NTMzNjM0Njg1LDM4OS44MzkzOTU5NDE5OTA0Niw2LjA0NTYxNTc0Nzg1MjIzMSwxMi4zODk2MjYwMTM5MTgwOSwzNzguMTYxMTQ3MzQyMDU1MSwzNTcuNjg2ODAwMjAzNDAzMTUsMy45NDQ5Nzc3MjY5NzExNzgsMTAuMDIwMDE4NDcyOTA0MzQ0LDAuMDA2MjI2OTU2MzcwMDIzOTg4LDEuODQyNDE2NjI2MTU5Mjc0NywxOTExNS44MjEwMTM4NDc0MDIsMzg2MTEuMzExMDk0ODEwMzEsMzE3ODkuMzU3MDc5NjY1MDAyLDg5MzYuNTUyNjU2NzA2MzQ2LDI2MDMwLjY4NDg5Mzc0ODc0NSwxNzMyMS4zNDc1MjEyNzcxLDI1NjA5LjkwNTI4NzExMDQ1LDI4NDQwLjcwOTI0MTQzNzEzNiwyLjM5OTE4MDAyNjcxNDczMyw0MjguNDM0NTk4MTUzNDU2NSwyMjUuMzEwMjg5MDA2MDIyLDMuMjA3NDA4OTE3MTc2NjAxM0UtNAorOCxUdWUgMSBGZWIgMTEsMTUzNC42NTczNzMxMzk2MTgsMTM1OC4yODk5MTEzMDMyMDA0LDIuODU0NTY5MzkxMTk1Njk3NywyNzEuNzMyMDIzNjY1OTE1NywyLjc4NjQyMDUxNzgxMTgxMSw1NzguMTc5MzczNTM2NTA2NSwxMi40NTc5NDgyNjQxNjk4MDYsMjUuMzU3ODY3NTM2MzgzMzY3LDU2MC43NjYwMDQwMDk0NTcyLDUyOC45Mzk5NjQ1NjU3MzA5LDguMDIwNTUxNzA1MjcwMDEyLDIwLjU5MzI1OTk0MDk0NzQ1NSwwLjAzMTY2MTQ3MDI1MzAwMTc1NiwzLjg0OTE3MjQyNTE4NDM0OSwyMzI2Ny4zNTk0NDUyMjE4Miw0NTYzMi45MzcwMTgwNTgyMzQsMzg2OTkuOTM5OTkxODEzOTYsMTA4ODEuNDQxNzY1NjgzMjksMzE2OTkuMzE4MDcxNzc1NzEzLDIxMDgxLjE4MTg4MTA1NDM5NSwzMTE4Ni44MzkwMjAyNjM2OTUsMzQ2MzQuMzcwNDE3NzYyMzksNC45MzMyODM3NjI3MTIxMyw2NDAuNzcwMDExNDQxODI4NywzMjIuOTM4ODExNzg4OTMwNTQsMC4wMDE2MzA4MjU5MjcyNzA4MDYyCis5LFdlZCAyIEZlYiAxMSwyMDk3LjQ1MjUwMDM0Mjk4NywxODY1LjAyOTM0NTY1OTA3MzcsNS4xOTU0MDQ3ODc1MDAwMywzNzUuNjA4OTgxODEwODA5MDQsNS4wODYzNzcyMjA3MTUxNSw4MzYuMTIwMDA1NjM5NTA4NSwyMy4xNTI3NjM2Njc4MzUzOTQsNDYuNzYxNzI1OTkxMDAxNSw4MTAuNzc1NDI3Mjg1MDY0LDc2Mi43NTI4NDg5NzExMDk5LDE0LjY3ODMzODg1MDg0OTc2MiwzOC4xNTYyNTgwMzcyMTc3MSwwLjA5ODcwMDU0OTE5Mzg0MzMsNy4yNjQxOTgxOTA3NTE1NzksMjg2MzMuOTA1MDY1ODgxMTcsNTQ1NTYuOTk4NTgxNzM1MDUsNDc2MzcuMDg2Mzk1NjU2NDksMTMzOTguMzkwNjU0NTY5NzIzLDM5MDM0LjkxNzAyMDkyNTU5LDI1OTQxLjE4ODM3NDY4MjYxNywzODQwMy44MDE5NDQxNTg4Niw0MjY0OS40MDg3ODkzNzg5Myw5LjE0NjI4OTgwNDI2MTY0OSw5MzQuMzgyMDM5MDA2MjMyOCw0NTEuMzA4MTI5NTMwNjQ4NDQsMC4wMDUwMDU1MDAxMDg5MzUxODgKKzEwLFRodSAzIEZlYiAxMSwyODEzLjE2MjA5MzYwMDA3OTUsMjUxMi40OTg5Mzc0MDg1NTUzLDguODE0OTAxODEyMjUyMzk4LDUwOS4yNzQ4NjEwMjIyMDA3NSw4LjY1NzU1NzYyNjI1OTI4OSwxMTg1LjQ4NTUwNDU3NzM1ODgsNDAuMTYwMTE0NTMxNDQyNiw4MC40NDc0MzEyNTA0NzEwNiwxMTQ5LjI3OTY5NDE4NjQ3MTcsMTA3OC41NTM2MjE1NTIyMzQzLDI1LjA1MjI1NjY3ODAzMjA5OCw2NS45NzI3NDk4ODIxNzYwMiwwLjI0Mzk1MTY0MDIxODAxODY2LDEyLjgwMDE0NTMxMTAxMDk4MywzNTQ4Ny40MDY0OTY5NTcxMDUsNjU3NjMuNjk3MDI2NTQ1MjcsNTkwNTUuOTYyNzIyMzE2OTUsMTY2MTYuNTIyMjY1NDIxMTc2LDQ4NDEzLjYzMzAzMjg3NTYsMzIxNDcuNTM0Mzc3MjA4MjIzLDQ3NjMwLjg5MzcwNTk3NTc2Niw1Mjg5Ni44NDQ1MjQ1ODgxNywxNS44MjU2MjM0ODM4NTIyNzIsMTMzNS42OTY0NDE0ODk0NjQyLDYxOC41NzY2ODEyODE2ODA1LDAuMDEyMDU3NTA1NzU4NzcxMjE2CisxMSxGcmkgNCBGZWIgMTEsMzcxNS41MzIxMDU1NjU1MzIsMzMzMi4yMTkwMDIxMDc0MzkzLDE0LjIyMDc3NjMzMTM5NjY3OCw2NzkuODQxMzcwMzUwNTc0OCwxNC4wMTM5OTA1OTk0NzM2MDgsMTY1My43NDM1MzM3MTMwNDYsNjYuMjcyNjc4NTgzNzYxNzcsMTMxLjYzODY3NzM2NTkyMSwxNjAyLjc5ODkyMzE4NTkzOTQsMTUwMC43NTA3MTQ3Mjg2OTQyLDQwLjY2NjMzNjQ3ODk3NDc2LDEwOC41MDk1NDgyMzEyMDY4OSwwLjUyNTQyODE5NTIzNjEyMTksMjEuNDU2MzU1MjUwMjkyMTQsNDQxMzkuNjYzOTU5MTYwODg0LDc5Njg2LjM4MDIyNDg1MTI3LDczNDc4LjkxNjUzNzI5ODc5LDIwNjg0LjIxMjYwMDAwNzU1NSw2MDI2Ny42MzIwMzkyMTY5NCwzOTk4Mi40NTcxNDQwODA0Niw1OTI5My4zNDI0MjI0NjU0OCw2NTg0OC45MTc1Mjk5NjQzMiwyNi4wNTE0MjkyNjM4OTExLDE4NzguMjgwMzQyMDgwODk4Nyw4MzQuNTk0NzY5MjA1NTQxOCwwLjAyNTE0Mjc4ODAwNDc4MTkyNAorMTIsU2F0IDUgRmViIDExLDQ4NDIuNzIyOTcxMDIwNzAyLDQzNTkuODkxMzM3Mzg0MzIxLDIyLjA4NjE3MzcxMDEyMjc5Myw4OTUuNzY5NDU1OTEwNDc1OSwyMS44NDE0MzU4OTk5MjM0NjgsMjI3NS41MDQ5MTI5ODYwNCwxMDUuMzE4NzMzODg4MzY4LDIwNy40MDU1ODU0OTE5MDk1LDIyMDQuNzE0ODAyMDQwNjg0NCwyMDYwLjA1MDY3OTg1NTk0NTQsNjMuNTYyNzM1MDQ3MDQ3NzksMTcxLjg1ODYzMjkyNzczODg1LDEuMDMzMDAyNjk0MzUzODQ5MywzNC42Mjc4ODEyNzM0NTEyOCw1NDk0MS41ODgwMzEzMzEwOSw5NjgxMy4yMTg2NDg1MTU0Miw5MTQ5NC4zODQ0MDExODYxNCwyNTc2OC44NDEyNDgxMjUwNSw3NTA4NC4zMjczOTAyMzI0Niw0OTc2My42MDA5NzIyMzgzLDczODcwLjc1NzUxODM1MjM3LDgyMDM4LjI1NDk5MTY3MDU1LDQxLjMwMDQ0MDk3NTg2MDQsMjYwNC44MjY5NjEzMDA5NDgsMTExMS4yNTMwMTAxMzg0OTQxLDAuMDQ3NjUzNjk4NDE1NzQ1MDQKKzEzLFN1biA2IEZlYiAxMSw2MjM3LjAzMTQ0Mjk4Njg3LDU2MzUuMTE0NjM3Nzc4MTUyLDMzLjMwMjQ1NTM2MTY3MTE4LDExNjcuMTMzMjU4NDQyMzk4NSwzMy4wNTM3NDAzMTY4NTkwNywzMDk0LjUxMTE1NzUyNzc1MzgsMTYyLjUzNTYzODY2NzAyNzM0LDMxNy4zMDA4NDA0NjY5NjEzLDI5OTcuMTYzNzczMjQyOTAwMywyNzk1LjIwNjAwNzQxMzAyNzcsOTYuNDc0NzAwNjYyMDkyMjMsMjY0LjMxMjU3Nzc3OTM2OTI0LDEuOTAzMzU2ODM0OTg4MjE3Nyw1NC4yNTU5MDczMTA4NjA0NjUsNjgyNzkuMzY0NjkwOTMzNjgsMTE3Njg3LjkxNTkxMTU5ODQ3LDExMzc1MC41ODc0ODE5MzI0LDMyMDU1LjA1MDI2NjgzMzgzOCw5MzQwMS4yNTI4NDgxODIyLDYxODQwLjU2MzMyOTQwMDIwNCw5MTg5Mi4wOTQxNDY4NDk4NiwxMDIwNTIuMjc1MTE5MzgxNiw2My41ODc5Nzc3OTQyNDg0OSwzNTY5LjgwMDQ3NjY5NTA2MTcsMTQ2Mi45Mjc3NzE5NjY2NTYzLDAuMDg0NDIyNjYzMDg5ODY1MDcKKzE0LE1vbiA3IEZlYiAxMSw3OTQzLjkyODk5NjA5MDY1MzUsNzIwMC40MjczNzg1NTI2MTUsNDkuMDQ3OTU3MDA4MjYzMzc0LDE1MDUuOTIyNDg3MDE5OTQwNSw0OC44NjY4MzU1NzY1NTc2MzQsNDE2Ni4xNjM1NTk4NDMyODYsMjQ1LjA3MDY3ODQ2ODI5MjIsNDc0LjIwMzQ4OTEzOTk1NzcsNDAzMy40Mzc5MTA4MDAzNTYsMzc1NS4yNDAzNDA2MTQwNjU2LDE0My4wNTQ2NTE2MjcxMTMxLDM5Ny4xMzI3NzUyNDU3ODM2NSwzLjM0MTEwMjkzMTQ3MjEyMiw4My4wMzE2MTk0NTE5NTIwNSw4NDU2My45NTM3NDk5NDM3MywxNDI5MDYuMjc2Njk2MjU1NTIsMTQwOTM3Ljk3NDEyMTk3MDksMzk3MzkuNzczODM4Mzk1NzQsMTE1NzkxLjUxMjQ3MzM3Nzk3LDc2NTg1LjQyMDgyMTI2ODQ2LDExMzkyMS4zNDYxNzE0MDg2OSwxMjY1MTcuMjkyODE2NTUxMDgsOTUuNjU4MTQzNTAzNTQzMjYsNDg0Mi44MzM4NzkwMTcyMDcsMTkwNy4wMTAwNTk4NTk3NzIxLDAuMTQyMjY4NzkwMzg0ODIyNworMTUsVHVlIDggRmViIDExLDEwMDA5LjkzMDUwNjQzMTAxNCw5MDk5LjIwNTM0ODM0OTI5MSw3MC44NzYwMTM2Njc1ODQxNiwxOTI2LjM1ODA1MTA1NDA2NzMsNzAuODk0NDIzMjIwNDUyOTQsNTU2MC42NTUwNTQ4NzY1NjEsMzYyLjY0NDgwNDA3OTI1NTY2LDY5NS40MjMzODQ1MTU4NTIsNTM4MC45NDM5MzMyNzc4MDIsNTAwMi4yMDU1MzI3MTk4MzMsMjA4LjE3MDYyNTIxMzMyOTM0LDU4NS41NjI0MzA4NjYzMzQyLDUuNjQ4MzM3NjM1MjY1NDc0LDEyNC42Njk1MzIzMTc4MDMzNCwxMDQyMDkuMzEyMjE5NDA2MDMsMTczMTA0LjUwNTgwNDk3MzU0LDE3Mzc1Mi41OTc5MTM2MjQ2Niw0OTAyMS43ODQwNzgzODcxNiwxNDI4MzMuMjQxMTg5MDE0NTIsOTQzNzMuMDY5MzkwNDQ5MTUsMTQwNTI3LjUwNDUzMjg2OTMsMTU2MDY1LjE0OTM0NzA3NDE4LDE0MS4yMzU1Njg0NzU1ODQ0LDY1MTIuOTkyMzk1OTgyMDg3LDI0NjQuNDkzODYwODM0NTc4LDAuMjMwNzMwODM3NzQ5MTk3ODQKKzE2LFdlZCA5IEZlYiAxMSwxMjQ3OC43MTMwNzQ4MTU5MjksMTEzNzEuODUxNTQxODI5NDgsMTAwLjgyNjMxODEwNzQyMjI1LDI0NDUuMTg1NDU3MjAyNDAyLDEwMS4yNzA0OTkwMzI0MzU3NCw3MzY2Ljc3NjA5MDE5NjQ0Myw1MjguNDI1ODUzMzE2MDE5NiwxMDA0LjEzNDc0NjM1Mzg0MDksNzEyNC43NzU3NjcwNjkwMzIsNjYxNC41MzQ4ODM1MTI0MzcsMjk4LjI4ODEzODI3ODQ1NDUsODUwLjE1MjEwOTU3Mzg1OTIsOS4yNjU2Nzc5NjYyMDA1ODUsMTg0LjI3MTM4NjA1MTQ2NTQsMTI3NTk0LjAwMDY2NjMyMTUyLDIwODkzNC4yMzkzNTM3NTU2NiwyMTI4MzEuMzUxMjc1MzU1NjQsNjAwODMuMTIyMjM5OTAwNzEsMTc1MDU1LjQyMTM3MjI2MTc0LDExNTU0Ni41NDg1MjA1NzQ0OSwxNzIyMzEuMjQ0ODIxMDUyOCwxOTEyNzMuOTk2ODgxNzM2MzgsMjA1LjM1NjIxMTU1NDkyNjI2LDg2OTQuMDQwNTk2NjE2NzQ1LDMxNjAuNTg3OTg4MjY5MTY1LDAuMzYzMDQzNTU4ODkxMzUwMQorMTcsVGh1IDEwIEZlYiAxMSwxNTM4NC44ODY0MTY0MDc0MjgsMTQwNDkuNzA1MDMwMDI4MDI0LDE0MS41NjQ0MDQ5MTYzNzM3LDMwODEuODk1ODI2MTM5MzI5LDE0Mi44MDUwOTYzNTI5NjE2NCw5Njk2LjQ2ODEzMDc2Nzc4Niw3NjAuMTcxNTcwOTYwMzE5NywxNDMxLjIyNTYwNjk0OTI4MSw5MzcxLjk1MTI4MDQ4NDk3LDg2OTEuMDYwOTQxNDczMTY2LDQyMS45NTg4Mzk2MjcwNDAzLDEyMTguNDg0ODg0ODU1MTg3OCwxNC44Mjg4NzgxNTMwNDU0MzcsMjY4LjgwODIwMTEwNDI3MzcsMTU1MDAwLjg4MjAwODYzMjE4LDI1MTAxOC41OTQwOTIwMTI5LDI1ODY1MC4wMzcxMDQ0NzI1LDczMDU5Ljc5Mjg4MTE1NzA1LDIxMjg1Mi40Mzc2NTk2MzE3LDE0MDM2Mi41NjEyOTQ0OTAyNCwyMDk0MjAuODQxNzA5NTI0NCwyMzI1NzQuOTA3MzIzMTkwMTMsMjk0Ljc5OTkzMTc2NzIwOTQsMTE1MzAuODcyMDc0Mzg5MDk5LDQwMjUuMjk2OTYyMzEwMDk1LDAuNTU3NDMxNTQ5MjQyMzg5MgorMTgsRnJpIDExIEZlYiAxMSwxODc0NC45NzIxODE3NzE2NTYsMTcxNDYuMjY0MTA2NzkzNywxOTYuNTU0NTgzODMzMDY1NzUsMzg1OC44MDM4ODExNjU2NjM0LDE5OS4xODA5MTA5MDAzMDMyNSwxMjY5MC4xODUzNzkwNjczMjUsMTA4MS43MTk1Mzk0MTEwMTEzLDIwMTcuNjcwOTA5NzczNDA4MywxMjI1Ni4zNDA0ODQ5NzI5MTIsMTEzNTUuNzU3OTczNDMzNzM4LDU5MC40NDIxMDg3NDQ3NTYzLDE3MjcuNDExMjE0MTMwODY0NywyMy4yNDY1MTMxNTMzMTE3NiwzODcuNzU2MTkzNjE3NzQ2OCwxODY1MzEuNDE0MjUyMjU5MiwyOTk4ODMuMzUyMjM1MDY2NiwzMTEzNzguMjk2NTAyNTU5MzMsODc5OTkuOTczNjIxNjIwOTYsMjU2MzYyLjMxOTcxOTIxMDUsMTY4OTE0LjAxMzA4Njg5ODksMjUyMjMyLjMzMjQ3NzYyNTc1LDI4MDExOC43ODAwNzc2MTU3NSw0MTguNjUzOTMxMzU2NTU5NywxNTIwNy4yNjg0Mjk5MDM3NSw1MDkzLjg4ODQ1OTY1Njc4MywwLjgzODgxNjEzNjMzNjYwMjUKKzE5LFNhdCAxMiBGZWIgMTEsMjI1NDUuNjI4OTg2Mzk1Nzg2LDIwNjQ1LjgxNzQ5OTI1NjUyLDI3MC4yNzE3NDg3OTE2NjI1LDQ4MDAuODg2MDgyNjg2NDc4LDI3NS4xOTk3MDE2NDA4MzQwNiwxNjUyMy4wODgwNjM4NTg5NSwxNTI0LjkyMTQ1Njk4ODE3OTcsMjgxNy41NjAyNjM0ODI2MjU1LDE1OTQ0LjI2MDY1ODE1MDYwNCwxNDc2My4yNDE2NTQ5NDgxNzksODE4LjQ5MDcyMTMxMDk3MTQsMjQyNS45MzA3NjczMDExMTc2LDM1LjgwNjA0Mjc1ODI1NzMzLDU1My45MzIzNDY4MTA4OTUsMjIxOTk1Ljk0NjU5MDE2Mjc4LDM1NTg1OC41MTYyNTEyOTU0LDM3MDY5My43ODU3NzUzMTQxLDEwNDgxMC40MzIyMDQ5ODk3NiwzMDUzMTAuNzQ5NDcwMjA5OSwyMDEwMzAuODEzMjgyMjE0MSwzMDAzOTUuOTY1MTcxMjM5MSwzMzM2MDUuODE0MzcyOTY3MzUsNTg5LjA0Mzk3OTgzMzA1MTQsMTk5NTUuMTM5Njg2NTQwMTc3LDY0MDcuMTI1ODgyMTUwNzQyLDEuMjQxMDU3NDY3MjMxOTE4NgorMjAsU3VuIDEzIEZlYiAxMSwyNjczMC4xMjM1NTk2NDQ2NTcsMjQ0OTAuNTYxODY5ODMxMzEsMzY4LjQ1Njc3NDg5NDU1NDMsNTkzNS4yNTI3MzY5MjIyMjI1LDM3Ny4wODgzNDA2MjYwNjE1LDIxNDEyLjAxNzkwOTE0Mzg0OCwyMTMyLjE0MzMyMzk5MjM5NTQsMzkwMS45MzU0NjIzNjYwOSwyMDY0MC42MjA1NTE3Njc0MSwxOTEwNS4wMDI4Nzg4MDU1MTcsMTEyNS4zMzYzMjk5NTM5Njc0LDMzNzguODg5Mjg4MzkwMzE5LDU0LjMxNzk2NDM4Nzg2OTAxLDc4NC41ODc4MTc4Mzg5Nzk4LDI2MDc5MC44MzI3MTc3MTE5LDQxODk0OC45NTMwMzkxNTgyLDQzNTU3NC4wOTEzNTkzNDU5NCwxMjMxOTYuNTQ4NTUzNzYxMzksMzU4ODM2LjYzMjY5OTMxNjgzLDIzNjE2OC42NjY1MjEyMzk0LDM1MzA2NC40NzcyNzg0MzI3LDM5MjA5NC44MTc5OTU4NTc3NCw4MjIuMDc5NzQ5MjkwMzQ3MywyNjA2NS4zNDgwNTM3MTcxMTYsODAxMS4wOTUyMDUzODQyMDUsMS44MDk4ODY0MzA5NDIwMzcKKzIxLE1vbiAxNCBGZWIgMTEsMzExODUuNTU3ODA3MjIxODEyLDI4NTY4Ljc5Nzc0NDM5NTM1LDQ5OC40MTgwNjM3MTM2NDkzLDcyOTAuMTAxNTcwNzI1MTU0NSw1MTIuODc0NzU0ODc2NTQ4NCwyNzYyMy4wODMyNzA4ODU3MiwyOTU5LjQ4MDg2MzUzNTM1NzUsNTM2My42MTQ4ODk3ODI5NDgsMjY1OTUuMzQ0NDc0NDY2ODU2LDI0NjE2LjI1NzMyNzY3MDIxNywxNTM1LjkxMzc4MTU1MTk1NjYsNDY3MS42OTE4NjYxMzI3MjgsODEuMzEwODc0MjY1MzMzMywxMTAyLjgzMjI0ODEyNzI4MDMsMzAxNzg3LjM2MTc0NTQ3NzYsNDg4Njc5Ljk0MTY0NDY5NzEsNTA0MTA5LjE3NDc0MjU1MDgsMTQyNjA4LjQ1NDM2NDI1LDQxNTMzNS43NDkwMDY3MjI5NCwyNzMzMDguMzg5ODY5MDM5MSw0MDg2NTkuMTQ4ODA3MTg0LDQ1MzgzMi4yNzgyMjA5NDc2NiwxMTM5LjA3MTczODEzNzY5MzUsMzM5MDAuMTEyMTQ2MTI5NDQsOTk1Ni4zOTk3NjE2NzEyLDIuNjA2NzE5NzE4NzI1NzgzCisyMixUdWUgMTUgRmViIDExLDM1NzM1LjE3MzY0MDk3NDUxLDMyNzA4LjU1NjcwMDI3MjE1LDY2OS4zNzcyNjM1NjY5NjMyLDg4OTIuOTg4NDQxODIyNzUyLDY5Mi44NDMxODQ0OTkwNjczLDM1NDc5LjQ4OTI4NzcyMjY0NSw0MDgwLjg2OTk1OTQ5MDk3NCw3MzIzLjE5NjIwMjc2ODY5NCwzNDEwOS41Nzc0OTQxNjI4NCwzMTU4My4xNDMyODYxNDk2ODMsMjA4Mi4zNjM0MjA4Njc0MTg0LDY0MTYuMjY2NjM0ODQ4Mjg3LDEyMC4yOTQyNjMzMjk4MjgzNywxNTM5LjQ3OTQyMDQyMDIwNTgsMzQzMjczLjc0MjAxNTkyOTQsNTYzOTM0Ljk5MTIwNDA0NjMsNTczNDA0LjkwNTI5MzYzMjgsMTYyMjEzLjkxMjM5OTY4NDI1LDQ3MjM4Mi41NTE2OTY3MTcsMzEwOTAyLjk3OTQ1NTAyMTYsNDY0NzkyLjc3ODMxNzU4MzY3LDUxNjE2Ni44ODcyNzY0OTUsMTU2OC4wOTAwODQ4Mjg3MDk1LDQzOTA2LjgwMjg2NjYzNzQ1LDEyMjk2LjQ0NTQ2OTM5MzQzMywzLjcxMzU5NTYxNDI4Nzg3MjMKKzIzLFdlZCAxNiBGZWIgMTEsNDAxNDEuMzg3MDgzNjU4MzE2LDM2NjgyLjE3ODg3NjMyNDY4LDg5Mi44NDg5MTAyNjU3MDEzLDEwNzY4LjI3MTQzNjQzNTc5OCw5MzAuMDc1MjcwNTUzNzQ0MSw0NTM2OC45NjUxNjgwOTI1OTYsNTU5My4zMDI2ODQ2MTE4MTIsOTkzNi40MjU0NjQwNzEyLDQzNTQwLjg0MzE3OTI2ODcwNCw0MDM0OS43ODAwMjUzNjIzNjUsMjgwNS44NDQ1NTA1MTEzNDUsODc1OC41Mzg4NTIzNTA1MjQsMTc2LjExMDk3NjAwODIxNjc3LDIxMzUuNDI0MDk5MDI2MjA1LDM4MzAwMS44NjkwODYyNTMyLDY0MjgxOC42NzI1NjE3MjEsNjM5NjY1Ljk2NTc3Njc5NDQsMTgwOTIzLjY0NTk4Njg4MDgsNTI2ODA0Ljg3NDM4NDU3LDM0NjkxOS4yMDQzODEwMDEyLDUxODM0My4yMDI3NzY1MDIzLDU3NTYzMS4yNzYzODYwNzU3LDIxNDUuOTQ5NzM3ODU1NDI0LDU2NjMyLjYzODk5MjQ5MjIyNiwxNTA4NC41MTE1ODI2OTUyOTUsNS4yMzk1MTU4Mzg5MzE0ODcKKzI0LFRodSAxNyBGZWIgMTEsNDQxMjQuNjkyMDE5MDg2NDgsNDAyMjYuNTQzMTA0MjM3ODI2LDExODMuMDI5ODQ0MzE4MDA1LDEyOTMzLjY2MDU5MDI4MDk1NywxMjQxLjA3NzEzNzg3NjM2OTgsNTc3NDkuNzQxNzA3MDY0NCw3NjIzLjM4NTkwMjc2MjIyOSwxMzQwMy4wODM5NjEzMzM3MTgsNTUzMDUuODc0MDY3NDEyMTUsNTEzMjQuMzg4MjExOTk0ODcsMzc1OC42NzY0MjgzMDE5NjcsMTE4ODcuNjgzNjA4NTA2NDcyLDI1NS40MDc2NjQ0MDY2NzA1NiwyOTQ0LjY4MDAwNzM3OTA4LDQxODM4Mi43MTg4NjgxODM5LDcyMjU5Mi43ODczMzY3NjQsNjk4NTMyLjI0NDkzNzQ5NjEsMTk3NDkwLjQyMjk4MTQ3NzU4LDU3NDk3My4yODQ1MTM2MDEzLDM3OTAxMy41MTEzOTc1OTY2LDU2NTczOC4xNzEyMjE5NDYxLDYyODI1OC40Njc3MzYwNDU0LDI5MjAuNzIxMTI0MTA4MTk4Niw3MjczOS4zMjEyOTQ5NzU1MSwxODM2OS4zMjc3NDcxNDEyNzcsNy4zMjg1MjQ4NDU2MTE3ODc1CisyNSxGcmkgMTggRmViIDExLDQ3Mzk5Ljg1ODEwODgzODk0LDQzMDc5LjU3NTM1NDE0MjIyLDE1NTcuMTUyNDIwMTA4OTk3NiwxNTM5NS45NTg4NzY2MDgyMzQsMTY0Ni40ODA5MTg1ODAwMzE4LDczMTUzLjQ5MTA4NTQyNjcxLDEwMzM1LjQ5Mjg1NTY3MTMsMTc5NzcuNDQ3NjYwOTA3NTQ2LDY5ODc5LjI0NzUzOTk0NTQ0LDY0OTgzLjI0OTEzNzIyNjg2LDUwMDYuNzg4NDA1MjU1NTcxLDE2MDQ3LjM5NzU2Nzk4MzQyNiwzNjcuMjU5NDU4MjIyNjEwOTMsNDAzOC4yMjcwMDA3NDM2MTUsNDQ2ODM2LjM2OTIwODc2NDksNzk5NzQyLjI2MDkwOTg4MjYsNzQ1Njc3LjAyMzk1MDc2ODMsMjEwNjgzLjU0OTI2Mzc1ODU2LDYxMzMwOS40NjY1NTQ0Mzk3LDQwNDg0Ny45OTI5NzgyNzE0LDYwMzQ1NS44OTAyOTA4NzgxLDY3MDEzNy43OTk1MDc3MzEzLDM5NTQuODc4OTk3NzEzOTY2LDkzMDE1Ljk0MzMxMzMxNTE4LDIyMTg4Ljk5MzcwNDk2NDk3LDEwLjE2OTg5MjIwNTg3NTU5OAorMjYsU2F0IDE5IEZlYiAxMSw0OTcyMy45MDA1NjMxNjY0MjYsNDUwMjYuNTgwNDk0ODk5ODg1LDIwMzUuNzIzMTM4MTQ1OTM0OSwxODE0Ni4zMTkxMDY5NjgyOCwyMTcxLjc4OTM5NjM2MDI1Nyw5MjE4Mi45MzI3OTI2NTIyLDEzOTQxLjc0MzczNTI1MzU5LDIzOTgwLjE3OTQwNTI4ODM5Niw4Nzc4NS4yMzY3NDUwNjgzNCw4MTg3MC43MTM4ODQwODA5Miw2NjMyLjM5NzQ5NDM4ODY0OSwyMTU0OS4zMzU4NTYwMzE3NCw1MjMuOTk0NTI1NTI0MTMwOCw1NTA4LjgyNjM5OTQ0Mzc1NSw0NjYyMzcuMDU3NTM5NDMwODUsODcwMjE2Ljg5MjgwNDkwMzgsNzc3NTYyLjMwMDg5Mjk2MzQsMjE5NTA3LjE0MTM2NjcwNTksNjM4OTIxLjE1ODQxODcyNjYsNDIyNDkyLjk1OTg2MzU1MDUsNjI4NjUwLjE1MTQyMzAzNTMsNjk4MTA5LjEyMjM1NDI1MTQsNTMyOS4yMTE1NzQwNzI1ODcsMTE4Mzg3LjQ5ODQwOTMxOTgzLDI2NTYzLjMxNzI1MjI4MDY5MywxNC4wMTA3Njc2MzQ0Mzc0MjEKKzI3LFN1biAyMCBGZWIgMTEsNTA5NDIuODAxOTQ4ODEyMjY2LDQ1OTQyLjkxNTAxODQxNzU5NiwyNjQyLjUyMzIzNzczMDQ0NzQsMjExNTUuNjQxODYwNjExNTcsMjg0OC4xMDExMDA5NjE4MDQsMTE1NTAwLjkxODEwNjI5NzIsMTg3MTMuOTg0MzgyMjc5NywzMTgxMS4xNjMzMTAyMDcxMDYsMTA5NTc5LjQ2MjQzMDgzMzAyLDEwMjU5Mi43MzY5OTk4MzYyMyw4NzM2LjcyNTAzOTkxNTkzOCwyODc4OC42NTE3Mzc1ODEzOTMsNzQyLjI3NTA3NzYzNjM1MjEsNzQ3Ni45NTc5NzA5MTY2NzcsNDc1MzI3LjcwODg3MjE5NjYsOTI5ODU3Ljc3NTg0MTc0MjgsNzkyMTM0LjcxMTQyNDgzMDUsMjIzMzk4LjI2NjM4NjMzMjI1LDY1MDE3Ny41Mjk4NDAzNDc2LDQzMDgwMi44NTY1NTg5NjE3NCw2Mzk3MTYuNzI3MzA3Mjk1NCw3MTAzOTEuNjc2NjM1NTQzNSw3MTQ3LjYxMjIzNjg2NjU0NywxNDk5MTQuODYwNzM5NDk3ODIsMzE0ODUuMDIxMzg3NzcxNjEsMTkuMTcxNjE5ODI1MDczODg2CisyOCxNb24gMjEgRmViIDExLDUxMDIwLjg2MTk3NTYxNzIzLDQ1ODE3LjU3NDk5MTQ4MTg3LDM0MDQuMTg5NzQzNzAwOTc5MywyNDM3MS4wMjkwNDgxMDcxNiwzNzEyLjcwNTg1NDA2NjMzNCwxNDM4MDYuNzQ4NjU3ODYxMzUsMjQ5OTcuNzczNTc2ODczMzcsNDE5NjIuMjA1MjI4ODcwNDMsMTM1ODE2LjExMzYyMTE1NzQ4LDEyNzgwMC40ODI2MTg4MzcxNCwxMTQ0Mi4zOTQ4OTQ1NDk2MjksMzgyNjEuMTgxODIwMzkyNTk0LDEwNDQuNTAzMDY3NjMyNzE5LDEwMDk3Ljk5NDY0NTA5MjAwMyw0NzM5NTcuNzg3OTY4NzM0OSw5NzQ5NTUuMDc5MTI1MzMxMSw3ODkyMTMuNzkyMzQ0ODk0LDIyMjMzMy4xNjIzNTQ5OTMzNyw2NDcwMTYuNDg1NzMwNzI1Myw0Mjk2MzMuMjA0ODAwMDkyOTYsNjM2NTk1LjY5Njg2NTU5NDgsNzA2OTE5LjY0NzMxODI0NjIsOTU0Mi44NTg1NjUwMDg1NzcsMTg4NzgwLjE0OTU0MTA4MzQzLDM2OTEwLjc1MDg4MDE1OTc1LDI2LjA2NDU5NzE0NjQ1MzM5CisyOSxUdWUgMjIgRmViIDExLDUwMDQxLjYxMDcwNDk0ODc2LDQ0NzQ4LjU5MTE4MjQyNDE2LDQzNDkuMTI4OTk3Mzk0MzI1LDI3NzE0LjM2NzI2MjY0OTYyNiw0ODA5LjM3MjYwMzU0NTE4MiwxNzc3OTQuMzc0NDYxMzY3NzMsMzMyMjguMDc4MzE4Nzc5MzEsNTUwMjcuNjAyMjY2ODIyMjMsMTY2OTk1Ljk0Mzc4OTkzMDA1LDE1ODE1OS40Njg3MDg0MDUwNCwxNDg5NC45MDEwNjU5MzY2Nyw1MDU4MS4xMzM5MjE0MzIwNzYsMTQ2MC42Mjk4Nzg2NzAzOTU4LDEzNTcwLjYzNjUwMDU1MTA0OSw0NjMwNTMuNzI3MzAwMzU3MiwxMDAyODE3LjcxMjcwNzE4ODQsNzcwNDIzLjUyODQ0NDc0ODUsMjE2ODAwLjQ0Mjc2MDA5NjcsNjMwODY1LjA1NjQyMjYxMjMsNDE5ODE1Ljg0NDI5Njk2NDgsNjIwNjkyLjc1NDY4NTk1ODcsNjg5MjU0LjYwMjQ4MTkzNDUsMTI2ODMuNDM0NTU5MjgwOTU5LDIzNjI0OC44NjU1NTY1NjMwMiw0Mjc1My4yOTk0NzgwNTM4OSwzNS4yMTQ1Nzc4ODA2Nzk2NgorMzAsV2VkIDIzIEZlYiAxMSw0ODE4MC44NTUwOTE3Mjk5MzYsNDI5MTMuMDgwMTY1MTg1MzMsNTUwNS40NTM4OTM0OTMwODE1LDMxMDg0LjAxNDEyNDg2NDA5OCw2MTg4LjA1ODMzNDU3MDM1NCwyMTgwODYuMjc4NjE2MTgyNzQsNDM5NDUuODI0MjUwNDAxMzcsNzE3MDkuMjE5MzI4MjIzMjksMjAzNDkwLjQ1NDQxMzk0NjIsMTk0Mjk4LjY2MDU3MjMwNDgzLDE5MjYyLjE3MjgzNzc1MzUzLDY2NDk3LjAxODg2MzA4MTgzLDIwMzAuNDU2Njk5NTc1NzExLDE4MTQ2LjQzNDczMTEwMTY0Niw0NDQzNDEuNjExMTUzMTM5OSwxMDEyMjAwLjUwNjUxNTY0Niw3Mzg3MDguNjU1ODUwODYxMiwyMDc2NTYuNDEyMzYyNzIyMyw2MDQyMTcuNTU1MTk1OTE2MSw0MDI5MDkuNDI3MDM4NDgzMSw1OTQ0NjMuNjQ2NjI4MTg5Nyw2NjAxMjMuOTA4ODU1OTgwNCwxNjc4MS4zNTA3MzUxODY5NDUsMjkzNTk3LjMzNDA0MjAzMjEzLDQ4ODc2LjgzNjYzODQ5NTU0NCw0Ny4yODE5ODY4NTk1NDM2NworMzEsVGh1IDI0IEZlYiAxMSw0NTY2My42NjQwMjEwMzU2MSw0MDUyNC45MzAwNDYyNzYwOTUsNjg5Ny42MTEzNTkzNDkxNzIsMzQzNjAuMTIzOTA1NTQxMDIsNzkwMy42NDg4MDU2MzE2MzYsMjY1MTM3LjAwMjE0MTAwMTQsNTc4MTMuNTMzNjQ2NDY2NjI1LDkyODEwLjgyMzkzMDM2NzQ4LDI0NTQzOS41NDM4MzE3NjA2NSwyMzY3MzMuMzg2ODM2NzczNzcsMjQ3MzAuNzk1NTg2MTMzOTQzLDg2OTAxLjg1NjI5NTIyODksMjgwNi41MTA0NTQ5NzQzODUsMjQxMzkuODkxNjkyMTgwNSw0MTk5NDAuMjE0NTc5NzM4MiwxMDAzNDYwLjcxODAyMzUyMjEsNjk3NjQyLjA0NTE1MjQ5NDksMTk1OTI0LjMzMzcxNDYzNzM4LDU3MDA1MS42MTgzODUzNDI1LDM4MDgzMS40ODE2NTQ5MDYwNiw1NjA4MzkuMjAxMDI1MTM5NCw2MjI3ODIuMjMyODQ3MTIwMywyMjEwMC43MzIyMTY4OTE0MDcsMzYxOTkxLjU1OTc1OTU3Nzg1LDU1MDk2Ljk3NjQ4MDQ0MTQ0LDYzLjA4NTI3MTg3ODA5MTY0NgorMzIsRnJpIDI1IEZlYiAxMSw0MjcyMS4xNDAxMzMxNTY0NiwzNzc5NS4zMzE0ODMzMDY2Myw4NTQxLjQzMjI5MzM2MzA4MSwzNzQxMy40MjI2MTY5MzI4MiwxMDAxMy4yMDkxMTI0NzM2MTgsMzE5MTAyLjY1MjU1NjUzODkzLDc1NjI2Ljg1ODM2ODM3NTczLDExOTIxNC4wNjU4MTUzMDQ3OCwyOTI2MjQuNzE5OTU2MTAzOSwyODU3NTYuOTAyMjg3MjQxLDMxNDk2LjkwNjA0NjMwOTcyLDExMjgzMS4yMzAzNzkyMzk3OSwzODU3LjU1OTMxMzAxMDYyOCwzMTkzOC4wNDY0NzMyOTE4OTUsMzkxOTcwLjE0Mjg3MjM1MzYsOTc4NDAxLjUyNDQ5MTA2NTEsNjUwNzcwLjMzMjg1NTQxMzMsMTgyNjA4LjkwMDI5NTMyMzE3LDUzMTI4OS4xNDMxNDQzNDQyLDM1NTUwMy45OTY5MTI5MTc3LDUyMjY5NC43ODg0NjU4NDU4Niw1ODA0MjIuNDU2NjQwMjA0NCwyODk2Ni42MzQzNTA2MzU2MDIsNDQyMzAzLjI5NDY1NDAzNTA3LDYxMTg3LjE4MDU0NzY4MTU0LDgzLjYxOTAzOTk5NDI4NzI2CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FnaW5nU0VJUkRpc2Vhc2VfRkRfUmVmZXJlbmNlL0FnaW5nU0VJUkRpc2Vhc2UvaHVtYW4wdG8wL0luY2lkZW5jZV8yLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWdpbmdTRUlSRGlzZWFzZV9GRF9SZWZlcmVuY2UvQWdpbmdTRUlSRGlzZWFzZS9odW1hbjB0bzAvSW5jaWRlbmNlXzIuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRkNTM2OTAKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FnaW5nU0VJUkRpc2Vhc2VfRkRfUmVmZXJlbmNlL0FnaW5nU0VJUkRpc2Vhc2UvaHVtYW4wdG8wL0luY2lkZW5jZV8yLmNzdgpAQCAtMCwwICsxLDMzIEBACitpdGVyYXRpb24sdGltZSxFRy1GUkctRzIxMDAwMSxFRy1GUkctRzIxMDAwMixFRy1GUkctRzIxMDAwMyxFRy1GUkctRzIxMDAwNCxFRy1GUkctRzIxMDAwNSxFRy1MT0UtRzI0MDAwMSxFRy1MT0UtRzI0MDAwMixFRy1MT0UtRzI0MDAwMyxFRy1MT0UtRzI0MDAwNCxFRy1MT0UtRzI0MDAwNSxFRy1MT0UtRzI0MDAwNixFRy1MT0UtRzI0MDAwNyxFRy1MT0UtRzI0MDAwOCxFRy1MT0UtRzI0MDAwOSxFRy1VUEUtRzI5MDAwMSxFRy1VUEUtRzI5MDAwMixFRy1VUEUtRzI5MDAwMyxFRy1VUEUtRzI5MDAwNCxFRy1VUEUtRzI5MDAwNSxFRy1VUEUtRzI5MDAwNixFRy1VUEUtRzI5MDAwNyxFRy1VUEUtRzI5MDAwOCxFRy1VUkctRzMwMDAwMSxFRy1VUkctRzMwMDAwMixFRy1VUkctRzMwMDAwMyxFRy1VUkctRzMwMDAwNAorMSxUdWUgMjUgSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzIsV2VkIDI2IEphbiAxMSwyNTAuMDgzMDkyOTI4MjEzOCwyMTcuNjEwNTY1Mjg0OTE5NzcsMC4wLDQyLjM2NTQwMzAxNDA3NjU4LDAuMCw3Ni43MTg4NzE4MDUwODk4OSwwLjAsMC4wLDc0LjQ0NDY4OTI0MzYxNTMxLDcwLjk2MDk0OTM4NjQxNDE2LDAuMCwwLjAsMC4wLDAuMCwzMzA4Ljg1MjA1Miw2NTQ4LjQ2ODU3OTM3NTk5LDU1MDAuMDc3Nzg3MTY4MDgsMTU0NC45MzUyNTcwOTExNDA4LDQ1MDEuNDU4NDk2NzUzMDQ0LDI5OTcuOTQwNTkzODc2ODEsNDQyOC42ODExMDkyMzMyMiw0OTE4LjI5NjMzMTE1ODY2LDAuMCw4Mi40NTEwODk2NDE5Nzk1LDQ4LjQzNzE1NTM4NTEyOTQsMC4wCiszLFRodSAyNyBKYW4gMTEsMjIzLjg2MzQ0NjE4NjM0MjI2LDE5NC44MDYwMDQzNDE4ODI3LDAuMCwzNy45OTE2NjYwNzQ5NTcwMiwwLjAsNjguODE5MDI5NTc2MzI0NzcsMC4wLDAuMCw2Ni43NzgzOTAzMTI1MzU0NSw2My42NTQxMTE1MTQ5MDc2LDAuMCwwLjAsMC4wLDAuMCwyOTU5LjMyNDUyNjE0OTIyNCw1ODU5LjE2MzU1ODE5MTQwNiw0OTE5LjA4OTU3NDg5OTcxOSwxMzgxLjc0NDYyNjYwMTk5Miw0MDI1Ljk1ODUyOTkxMzA1NTQsMjY4MS4yNjA2MDkxNTAzNjEyLDM5NjAuODY5MDAyMTQ1MTM3NSw0Mzk4Ljc2NDAzODg5MzgwNiwwLjAsNzMuOTYxOTI3MTAwMDQ0MzgsNDMuNDQxMjg2OTMzMzExNjgsMC4wCis0LEZyaSAyOCBKYW4gMTEsMjk0Ljk5MDM4ODc1MzE3MTI2LDI1OS4zNzIyNTQzNzc0NzAzNywwLjMxNDE5OTMzMjI2MTUyNTYsNTEuMzY1MjYwMjIyNzE4NTIsMC4zMDU0MTYxMTk1ODcwMDQyLDEwMi41NjA4MzAwMzQ1NTY3NywxLjMzMDA5ODAyMTgzNDQwNSwyLjczODQzMTEyNTA4OTQ3MTUsOTkuNDk1NjI3MjA1NDIyMDgsOTQuMjE3OTQxODgxOTQwNTIsMC44NzU4NTYxMDE2MTM1Nzg5LDIuMjA4NDc1NzczMDY2NjI0LDAuMCwwLjQwMTUyNTIwODg1ODU3OTM0LDM2MjcuNjYyMTA5MDY3OTUxLDY5MzYuOTY3MzA1NzA1MjQyLDYwMzIuMTM0NjU5NjIwNjI5LDE2OTUuMjI2MjMzODU0MzMyMyw0OTM5LjYzNDUwMDY4MTc3NSwzMjg2LjQ4ODM5MjM5Mzg2OCw0ODU5Ljc1NjYxODA5OTQ5Miw1Mzk3LjA1Njk0MjEzNzg0NCwwLjUyODYyMjY4ODUzNTM4ODQsMTEyLjMxNTEyOTEzMjA5OTAyLDYwLjExNjI4NzI1MzU1ODkyLDAuMAorNSxTYXQgMjkgSmFuIDExLDM5NS44MjY0MTgwMTMzMDc1LDM1MC41NjYwMjg2OTIyNDI2NCwwLjcyMTg3NDEyNTMxNDY1MzksNzAuMjQ1OTI5MTk2ODA2NSwwLjcwMTY5NjU5NDg5MTUwOTgsMTQ5LjEzNTgzNzA0NDgzOTE1LDMuMDU2MTQ3MjI0MjI5Mzc5LDYuMjkyMDM3MTU2MDMxMjkxNSwxNDQuNjU3MTI3NDIxMTU5NTIsMTM2LjQ1OTk5MzU2NzAyMDEyLDIuMDEyNDA2MTI2NDgyNjUyNyw1LjA3NDM4OTk1NDA4OTk3NSwwLjAsMC45MjI1Nzg0MDEzNDA5NDczLDQ2MDkuMDY3MjIzMDY5NzE1NSw4NTY2LjczODE3NzgyNTA1LDc2NjYuMTcwODc1NDcwNTM5LDIxNTUuMjg5OTUxNDU4MTI5LDYyODAuNDczMzQ0MzMwNjk4LDQxNzUuMjgzOTczMTEyODE5LDYxNzguODk2NTE0OTUzNTAxNSw2ODYyLjA3MDM3ODMzMTUwNzUsMS4yMTQ1ODk2MzEzMDYxMzI2LDE2NS4wODQzMjc5MTUyNjE1NSw4My41MDQyMTY4MDEwOTI4LDAuMAorNixTdW4gMzAgSmFuIDExLDUyNC42OTE3MDY5NzcwNTM3LDQ2Ny40NDc5NDg3MjQxMTY1NCwxLjM0NDQ0MzQ2MDI5NjEwMjQsOTQuNDYxMjM3NTg3OTY1ODEsMS4zMTE0NDEyNTY5ODg0NzI4LDIxMS42NTE0ODIyMjkxMjc0Miw1LjgzODUxMjYzNzkyMDk0OSwxMS45MDYwNTkwMTY2NzMxNzIsMjA1LjI1MjA3NTk2ODE0MzA2LDE5My4wMTE4NjU1NDY5ODE4LDMuNzcyNjUzMzc5OTQ5NjkzLDkuNjU4MTAyNDIzMDQyMTc3LDAuMDEyNDUzOTEyNzQwMDQ3OTc1LDEuNzk3Mjg1NDMwNjkwODg3Miw1ODY3Ljc0ODUzMTY5NDM5OCwxMDYzMC4wODg3MTI0NjE5MTMsOTc2Mi44NTYyNjU4MDQ0MjcsMjc0Ni4wMTgxOTM0ODk0NTA0LDgwMDIuMDUyOTYxODI5Mzk3LDUzMTUuMTQxNDg1ODc4NjgzLDc4NzIuNjI4NDMwNzMyNjU5LDg3NDMuMDk2MzEyOTY1MjI1LDIuMzEzMzYwMTEwNTY2MDkzNSwyMzYuNTY3NjUzNDkwNDkzNTQsMTEzLjgwMDQyNzUwNTA3NDc0LDYuNDE0ODE3ODM0MzUzMjAzRS00Cis3LE1vbiAzMSBKYW4gMTEsNjg3Ljk0MzYzNzI0NDg0MjEsNjE2LjEwMzQ2MTQ5NTgxODgsMi4yOTI5NTcyNjg3MDQwNzY3LDEyNS4zNTk4NzUwNzc2OTM0NiwyLjI0NTc2NzM3NjE4NTgzNDgsMjk1Ljc2MzE0OTUwOTY5MjMsMTAuMjQ4Nzc0NjE0MDQzNTk2LDIwLjY3ODI3MzI1OTk3ODg4NCwyODYuNzQ2MTA4MzY2NzQ4OCwyNjguODgxNTQxMjU4OTg1ODYsNi40ODMzMTAzOTA0MDQ1NzcsMTYuODgzNzMwODAyNjA4NjE4LDAuMDQ1OTYwNjM5NTQ0NDc2MzgsMy4yMjIyMDQ5NDIyMTE0NzY1LDc0NTYuNjAxNjgxMTgzNDYsMTMxODMuNjkyOTY1NDU2MTgzLDEyNDExLjAyMjU5MTYwMDQ3MSwzNDkyLjczMzI1OTg3ODk0ODUsMTAxNzguMTM2MDMyODcyODQ4LDY3NTMuOTE3MzYzMzk2MTU0NSwxMDAxMy41Mjg4MjkxMDYxMDgsMTExMjAuNzM2MzAyNDcxODY5LDQuMDQ3MjQ3NTcwOTg0MTMxLDMzMy42ODg3NTYzMjI1NDkxLDE1Mi45NDEyNjk5MjU0MjgzNCwwLjAwMjM2NzM0NjU4NTM2MDk0MQorOCxUdWUgMSBGZWIgMTEsODkyLjc2OTQwNjc4Njc5ODUsODAzLjMwNDYyMzQzNTc4NzEsMy42ODk2MDk4NzA2NjA1MjMsMTY0LjQ5MjU4NTQwMjU4NTU4LDMuNjI4NDQ2NjE4Mjc4Mjg0LDQwNy43ODc2MjY5NzIyOTk3LDE2Ljk2MTA5OTgyNjIyNTQ3LDMzLjg2ODM3NzYwMTk0NTQ3NSwzOTUuMjM2NzExMDY1MTI0MTUsMzY5LjY3MTYxNjA3Njg0OTMsMTAuNTExNDgzNTg0MDE3MDQsMjcuODI5MTU2MDk1NjU4OTg0LDAuMTE0Njc0MTk5OTEyNDA4OCw1LjQzODk5ODQyNTM4MjQyNiw5NDM5Ljk1MjUyNjMyODM1LDE2MzExLjI1OTI5Mzk2NDEyOSwxNTcxOC41OTQ1NjEyMjg1NzYsNDQyNi4xNTczNTAxNzAzNTIsMTI4OTguMTk1NzQ3ODAyNSw4NTQ5LjgyOTY0NzA0Mzc5MywxMjY4OS42MzY5NTc0MDQ0NTUsMTQwOTIuNzYyNjc4Njg4NTg1LDYuNjc2OTI2NjM4NjY1MTgyLDQ2NC4yMTIzMDgxODQ1MDAxNiwyMDMuMTEyMzU4NDgyNDI1ODYsMC4wMDU3NDk4ODYzNjEwOTEzNDUKKzksV2VkIDIgRmViIDExLDExNDYuNjk5NDg5OTI4MDQ3MywxMDM2LjE0MzcyMzM2MTc4MDgsNS42ODk0MDQzMjY3Njc5NCwyMTMuNTg2Nzk2NTMxODM1OTcsNS42MTc5MzczMzAwNDk4MTQsNTU1LjI3NTk5NzQzMjA4MjgsMjYuODc0NDYxMTMwNzgwOSw1My4xMjU0NzczMDAyODY2OCw1MzguMDAyMjY3NjIxMDc5Niw1MDIuMDY2ODE4NzAwOTM4MiwxNi4zMzAzMTU3NjMzNzM2NzYsNDMuOTIxMjYxODE4MjE2MTUsMC4yNDA5MzcwNTI5Mzk3OTU0NSw4Ljc3ODU1OTY0MjIxNTAzNCwxMTg4NS45OTg0MTgxNjk0NywyMDEwMy45Nzk3MjQxOTAxMzIsMTk4MDAuMTU5Nzk5MjkyMTQ1LDU1NzguOTc2NzcyNTY5MzIsMTYyNTcuMzkyNjkxNjExMjQ5LDEwNzY0LjYwMzM2NDIwMjcxNiwxNTk5NC41OTUzNTQzMDQ1NywxNzc2My4xNjg1MTM2NDIwMDIsMTAuNTQ4NTc3OTc3NjY1OTU5LDYzNy41MzY2OTE5NTYxMTIsMjY2Ljc4ODE3MDc0MjQ4LDAuMDExNjEyNzkwMDcyNjY2NTM3CisxMCxUaHUgMyBGZWIgMTEsMTQ1Ny43NTkxMDQxMjQ3MzI0LDEzMjIuMTgzNTQ2ODYwODM3LDguNDk2NjMyOTA1MDU1MzA0LDI3NC42NjI2OTQyMzk5NDA1LDguNDI0NTQ2Mjk1NDMxNDMsNzQ3LjcwMzQzODAxODI1NDEsNDEuMjE2NDEyMzE2NTQ0NjM0LDgwLjY3MTYyNzY0ODU4ODMzLDcyNC4xNjI5Mzg4NTE2OTc2LDY3NC40NDIyNjk3NzU2MDM4LDI0LjU3MDc3MTM0NzMwNTM2NCw2Ny4wOTgwOTYyMDk1MjI4NiwwLjQ1ODY3ODkwMDM4NTE5OTEsMTMuNzAwODczNjM3NjE5OTk2LDE0ODY3LjA4Njg4MDM4NTY4NSwyNDY2MC42ODYzMDk4NzkyOSwyNDc3Ny40NzE5Mjg5ODU3NDIsNjk4NS45OTk4OTI5NzYyMywyMDM1Ny4wMjMwNzcwMjczNiwxMzQ2My43MjU0MDg5MjAwNjcsMjAwMjguMDkyNjc0NDIwNDczLDIyMjQyLjY1ODU4ODU3NjA1NCwxNi4xMzM2Njk2NjgzODI4NzYsODY1LjU4MDg2MzUzMjIzNzEsMzQ2LjkxNjY5NzUwNjkzMTksMC4wMjExMzAxMTU3NzAxODU5MjMKKzExLEZyaSA0IEZlYiAxMSwxODM0LjM3MjU4MDEyMDkwNzUsMTY2OS4zNTI3MTU4MzYzMjEzLDEyLjM4MjM0MjE1MTUxMjk2NSwzNTAuMTM5MTE3OTMxNTk0OCwxMi4zMjkxMTgzNjMxODI2NjksOTk3LjE2NzU1OTc3MzY5MjMsNjEuNjY3MjEzMjQzMjg5OSwxMTkuNTEyMTQ4MTc5NDMxNzIsOTY1LjM0NTU0NDk0MTEzMjYsODk3LjQ4MDE2NzkzMTA0NjUsMzYuMDc5MDAzNzI2NzYyNTIsOTkuOTk5NjA3MzU0OTE5OTMsMC44MTg1MzQ5ODU5MDc0OTY4LDIwLjg0NTE3MDkxMjAzOTM2OCwxODQ1OC4xODM5NzkwOTcwMzMsMzAwODguNDk4NTg2NTM2NDU4LDMwNzc2Ljg4MjcwNTA5Njc1Niw4NjgzLjQyNzQzOTEwMjAyOCwyNTMwMi4zNzYwMzIyMzY0OSwxNjcxNS4wNjY2ODY4ODE5MDMsMjQ4OTMuNzU3NzQyOTExODE3LDI3NjQ2LjMwOTI2MjU3MjQsMjQuMDc2MTc3MjU2NDU5MTY4LDExNjMuNzA0MDQ2MTI3MTI0NSw0NDcuMDg5NzA2OTk5NzE4MjYsMC4wMzU5NTU4MzU3MDk5NjMxOAorMTIsU2F0IDUgRmViIDExLDIyODQuODI2OTk0ODE4OTMzLDIwODUuNDEyNjc3ODU2NzUyNSwxNy43MDUxMzQ5MjYyNDkxNjYsNDQyLjkxNTI4ODg1ODcwOTUsMTcuNzA1Njg0OTU3MzkzNzQ2LDEzMTkuMTQzMjQ4OTY3MjE0Nyw5MC41MTc4NzU0ODQwMzcxNiwxNzMuNjk3NTk4NzU0NzA0NzksMTI3Ni4zOTY5NDA1NjM3Mzc2LDExODQuODM1MjI1NjU2MTMzLDUxLjk4NjU4NjY4NDQxMTQ4NSwxNDYuMjA4NDUzOTUyMDk4OTUsMS4zOTUwMTc3ODk0MjQyNTk3LDMxLjA5NTI2ODE3ODMyNTg0NiwyMjczMS4yOTY0ODgwNDMwMzcsMzY1MDAuMTM5MDQ0NTg3MDYsMzc5MTkuOTUyMTAzNDgxNjcsMTA3MDYuMTY4MDU3NTUyNzM5LDMxMTk0Ljg5MTM0Mjc4NjYzMiwyMDU4My44NDc2MTg2OTI0MTMsMzA2OTEuNDQ1MzI4Mjc5NzUsMzQwODQuOTk5NDI2ODc1NTc2LDM1LjI1MjUwMTYzMjQ1NjcsMTU1MS43MzAxNTQ3MDQwNTg2LDU3MS42OTAzNTM5ODUyOTgsMC4wNTgzOTcwOTQzMDA4NDU1NgorMTMsU3VuIDYgRmViIDExLDI4MTYuMTYyNTgxNzA2NDc4NywyNTc2Ljg2NzkzNDA2NzM4NiwyNC45MzY2NTA3MjU1MTc0OTUsNTU2LjQyNjgxNTI4NjM5MjUsMjUuMDQ5NjMyMTc0MzAxOTM0LDE3MzMuMzM2NTA0MjM1NzE4NCwxMzAuODczOTM4OTkzODAzNiwyNDguNjU1ODg2NDA2ODQxNzcsMTY3Ni4xODM4OTkzNjU5MTE3LDE1NTMuODg2OTkwODA1NzU4Miw3My43OTg1NTkwNTk3NTM0NywyMTAuNTU4NDM5MDQ3MzUyLDIuMjk2Mzk2ODk5MjUyNDEzNSw0NS42NjUxMzA3OTkzOTAyMSwyNzc0NC41MDA1NDczODE4Niw0NDAwNi41ODI0MjQ4OTE3NCw0NjMwNC45Mzc2OTM5Mjg1OSwxMzA4Mi41Mjk4MzAxOTg4MywzODExNi42NzAzOTA3ODcwNTQsMjUxMjIuNzI5MjA5ODA5MDgsMzc1MDEuOTk2MjQwMDgyMjMsNDE2NDguNDgzMjE4MDU5OTg0LDUwLjg0ODU3ODA3OTkxOTgxLDIwNTUuMTM4OTUxNDY4NTY3NSw3MjYuMDE5NzEwOTkwNjQzNywwLjA5MTY0MzM3MzA3MjA2Mzg2CisxNCxNb24gNyBGZWIgMTEsMzQzMi4zNDMxOTY3NTY1MSwzMTQ3LjE3NTk5MTYyMTM5NzgsMzQuNjkyOTc1MTIxMjE1ODgsNjk0LjY2OTI1ODUxNTMwMzgsMzUuMDEzMDAzODk0OTIyODk2LDIyNjQuNjY4OTI2NzMyMzk3MywxODYuOTE5NTI3NjIxNzU2OTcsMzUxLjYxNTczNTI3NTkxNzgsMjE4OC41MDUyMjUyNTI0OTgsMjAyNi42MDgyMDM1MjIzMDEyLDEwMy41MDQ2MzI1NjA4MzE1NywyOTkuNTMxNjU4MjM1MzUxMywzLjY3ODI0NzE5MDQwOTE5MTMsNjYuMjExMjIzMzgxOTIxODUsMzM1MjQuMjQ5Mzc5MDI4Nzg0LDUyNzAzLjg1Njk1MzkyNDgzNSw1NTk3Ni44ODMwNzc2NTA2NDQsMTU4MjUuNjE3NzIyNTI1MDEyLDQ2MTA1LjM5NDM5Njk2MDU3NSwzMDM1NS44MjkyNzM2NjIxMTUsNDUzNjIuNTU0ODk4NTA0NzYsNTAzNzcuOTc1OTk4ODY1NTY0LDcyLjQ1OTY2ODE4MjU3ODAzLDI3MDYuNDc3NDg4Nzk3NTkxLDkxNi4zOTYwMjc0NTg2NTI2LDAuMTQwMDY4MzMzODQwNzI5MjgKKzE1LFR1ZSA4IEZlYiAxMSw0MTMxLjU3OTA3MTQ0OTA3OTUsMzc5NC4xMzU4MDI0MDI1MjksNDcuNzczMjM5MTUxNjQyMzcsODYyLjE3NDUyMDQ2NjA1ODcsNDguNDQ4NzQ4MTEwODY3NTYsMjk0NC40MTI0NTU4Njg2OTYzLDI2NC4yNTk3Nzc1OTkxODM3NCw0OTIuMTQ2ODM1MDcxNzg0NCwyODQzLjEyNzQ5NjIzNTc1OSwyNjMwLjU2ODMzNDM2OTk2MzQsMTQzLjcxOTczODEyNjczNjUzLDQyMS43NzAyMDgxODAzNzc0LDUuNzYxOTUzNjUxNTA5NTMxLDk0Ljk4MDAxMjczMTgzMTE4LDQwMDM5LjkzOTQ2NzA4MzIxLDYyNjUyLjY3MTE4NTQ3NDI4LDY2ODg0LjUzODQ5ODYxMTM2LDE4OTIwLjkxMjM2ODYxNDE3Miw1NTExOC4xMzM0NzA3ODMwNywzNjI1NS43MzgzODk5MDkyNiw1NDIzMC45NDkxMzk1NDkxNjQsNjAyMjYuNTkzODA2NTM1MzA0LDEwMi4yMTk2NjI0NTQ0NTQ2NCwzNTQ3LjAzNzAxMTU4Nzk2NiwxMTUwLjIwOTYyNDA1NDIyNTUsMC4yMDk2MjYyNzkzOTY1NTE3NgorMTYsV2VkIDkgRmViIDExLDQ5MDIuNzg4NTg0NDc4NDY5LDQ1MDYuNDU0MDY3NjU1MTcxNSw2NS4yMDY1OTIzMzQ1ODU1OCwxMDYzLjkxNjI5MTU4NDI4Nyw2Ni40NjU5MDU5NDI1MjU2MSwzODExLjQ3NzYzNjk2OTM3MjcsMzcwLjM2NDAzMzc1NDc1MDYsNjgyLjg0NjU0MzExODg0OTQsMzY3Ni45MzYxNjA0NDc0NDM0LDM0MDAuMDc4MjUxNzg0OTc1NywxOTcuODYwOTc4OTM4NjUxNTYsNTg4LjczMzkxMjAyMzkzODgsOC44NTk4ODIxNjM5MTQxMywxMzUuMDAxMTkyMjY4NzUzNzMsNDcxNzAuOTM4OTUwNTMyNDEsNzM4NDkuNjk3MDc0MDM0ODYsNzg4MjQuNDI5OTE3MjY3MzgsMjIzMTAuMTA5ODY1NTAzMTksNjQ5ODQuMjk4MjI1NzEwNDUsNDI3MTMuNzEyMzE2MTMxOCw2MzkzOS4zNzY1MTQ3ODczMzUsNzEwMDcuOTE5MDI3NjkwNTcsMTQyLjk2ODM2NzE5ODk3MjgsNDYyOC44Mjg0MTE4MzU2NjgsMTQzNS45MDMzNTk0NjYyNjk5LDAuMzA4MzcxMTk5MzM3MzMzMjYKKzE3LFRodSAxMCBGZWIgMTEsNTcyMS40NjU0MDU3OTk1Nzk1LDUyNTkuNzc3MjkzMjY1MTg3LDg4LjMwODQ2MTU3NDAzMDM2LDEzMDUuMTExNDI3MTY5NzY4Niw5MC40OTc4NzY0MzYxNzE2NSw0OTEzLjgzNDgwMDQ4NjY3LDUxNS4xMzc0MTg3ODExMzcyLDk0MC4yMDc4MDQwNjA2Njk2LDQ3MzUuMTY0ODUxODY1ODMzLDQzNzcuNDYyOTE3NTE4MDI0LDI3MC4zNjg4ODM2NDk4MDIyLDgxNS41NDIwMzYyNDE3MzI4LDEzLjQwOTQ4MDI5NjIwMzU0OSwxOTAuMzM5OTQ0NDIyMzUyNTIsNTQ2NjkuMDY4NzIzOTM0MzIsODYxOTAuMjE4MDkxODA0NjUsOTEzNzcuMTU3ODg4MDU5MTQsMjU4NzIuNjkzNzM3NjA0Nzg2LDc1MzUyLjA0NzQ2NTM5ODMzLDQ5NTA1LjcyOTQxNTI0MjAxLDc0MTQxLjYzOTIyNTQwNzA4LDgyMzM3LjQwNTkxNzU1MTksMTk4LjQ2NzI3OTQwNjk0MTA2LDYwMTYuODY5Nzk3NDE2MzQ1LDE3ODIuODMzNTI4NjMzNTY2OSwwLjQ0NzEzMzY4NjA2MjIxNTgKKzE4LEZyaSAxMSBGZWIgMTEsNjU0NS43MjQ5Mzc4NDQxNzYsNjAxMi45OTQyNDI5OTYxNjYsMTE4Ljc0NjM3ODgzMzU0NDMxLDE1OTAuODc1ODY1NTExNzUzNSwxMjIuMzg1ODY5OTcxNzY1MzYsNjMxMC4wMTE2MDcyOTk4NDcsNzExLjY1NDQyODE2MjcxNTgsMTI4NS43MDcxODg3OTA0NTQ0LDYwNzIuNjIyODY5MjA3NjMxLDU2MTQuNDIwNjI0NDA5NzM4LDM2Ni45ODEzNDE1ODg5LDExMjIuMDQ0MDMyODAzNTc0LDIwLjAxOTI5NDk2MjM3MTMxMiwyNjYuNDI0ODg1NTU3ODM5MTYsNjIxMjQuMzkxNjkyNjIzMDYsOTk0MjMuOTE3NzU1MzU0OTcsMTAzODQ5LjM1MDI5NzE4ODg4LDI5NDA5LjE1NTk2MDk4NDM1Myw4NTYzOS41OTI3NDg4MzQ3MSw1NjI2MS40OTA3MjY4MzQxMiw4NDI2NS4xODc1NDc2OTI3Miw5MzU3OS4xMzQwMDQ1NzQ0LDI3My42NzY3NzkzMjkzMDgyNiw3NzkxLjc2NzI4NjgyOTI4MywyMjAwLjk0OTY1NzgxMzUyNywwLjY0MDM5OTcxNTE4NjU2ODQKKzE5LFNhdCAxMiBGZWIgMTEsNzMxNC4wMzM1OTQzMDMzNjcsNjcwNi4zNDI4MzEzMTA2NTUsMTU4LjYxNDQxOTI2MzIxOSwxOTI1LjY4OTcxNjEzOTY4MzcsMTY0LjQ3OTMyOTM4MTczNjUzLDgwNzAuNTU3MDkzNjczNjY0LDk3Ny4wOTQ3NjA4OTA0NjEsMTc0Ny4xNTQxMTM0NTk4NjEsNzc1NC43Nzc5MjUyNTg5MzM1LDcxNzMuMzg1NDAzMDI2MTI2LDQ5NS4wNjgyNjk5MTc0NTUxNSwxNTM0LjE3MTA1MDczNTIxMjUsMjkuNTMwODIyNDE3MDU1MDMsMzcwLjQ3MjIwMjgyNTY3NzcsNjg5NDguODg4MTUwMzYzMDUsMTEzMTA5LjI4ODkyODY0NDI3LDExNTI0Ni4yMzg3MjcyNDYwMiwzMjYzMy4xNzU0NDA4NjMyMjYsOTUwMTIuNzA2MjI0Mjg4MjcsNjI0NDkuNTEyNjAyOTY1NjQsOTM0ODguOTQ4NzQyODIzODYsMTAzODIxLjIwODYyNzQ4MDk2LDM3NS4xMTA0NDAzNTE1ODkxNSwxMDA1Mi41MTczNTM3NTc3NjcsMjcwMC4yMTY2MTAzNzcyNzYsMC45MDc0NDUxODM0OTUzOTQ0CisyMCxTdW4gMTMgRmViIDExLDc5NDYuODgzOTA3Nzk2MTYsNzI2My41ODI5OTgyMDcwMTQ1LDIxMC41MTMwNzEwMzU0ODQyLDIzMTIuNjMxOTUxMjQ3MTIsMjE5Ljc1NDIwODg2Nzc4MTU2LDEwMjc5LjI4NTcyNDcxNjU1LDEzMzMuOTI3OTkzNjM0Nzc1NSwyMzYwLjMzOTgxMDM2MDk2OTgsOTg1OC40NjI0MTU2MDkwOTYsOTEyOC43NDkzMzU1NTUzMDUsNjY0LjAzMzEzMjY1MDE5NDYsMjA4NS42MjQ2OTc5NDMzNTEzLDQzLjEwMTI4MzgzNTg1Mjk4LDUxMi4wMzA3NDAwODEwNTA1LDc0Mzk5LjEyMzIzODI4MzEyLDEyNjU3Ny42MTI4NTM5Mjk4NCwxMjQzMTEuMDI1ODYyNTYyODIsMzUxODMuMzQ1ODIyNzg2NzMsMTAyNDE5LjI1NzIwMTI1ODM4LDY3Mzk3LjM3NDUyMTg2NzM2LDEwMDc3Ny4yOTg3NDgyNDQyMywxMTE5MTMuNTIyMzI1MTY1OCw1MTEuMjg1MTQ1OTExODc0MzQsMTI5MTkuMzc2NDQ1ODgwNzQ5LDMyODkuNjk0MzQ0NDQwMzEsMS4yNzM3OTA1NzUyMzIzMTIyCisyMSxNb24gMTQgRmViIDExLDgzNTQuOTUzNDAyNTEzNjI0LDc2MDAuNjc1MjcxODczNjIsMjc3LjYyNzY1MzQ1NTk1NTc0LDI3NTIuMzY4NzUwNzI3NzQyLDI5MS45NDgyMDM0MTcyMTM3LDEzMDM0LjAwOTExMTk2NzA1LDE4MTEuMzk4NzA4NDg0NzI0MiwzMTcxLjAxMzMyODc3ODYzNTcsMTI0NzEuODUxMjM1MjE2NDQ3LDExNTY3LjcxOTEyNTI3MjkxNyw4ODUuNzgyNjkwMTkxNzE3MiwyODE5Ljk1OTUwMjMyNzExOTUsNjIuMzEzODkyMzIxNjY2NjM2LDcwMy42NzcwNzE1NDMxNzQxLDc3NjYwLjMxMzUyNTM2NTY3LDEzODkyMy44ODc5ODczNzE1LDEyOTY2OS4zMzI4NzI1NzM3LDM2NjY1LjYyMjQ2NjAyMjE5LDEwNjcxMy4yMDEwMzA5Njk1Niw3MDM2Ny40MDYxMzE4NzE2MywxMDUwMDIuMTE2OTQ0Nzk0NTcsMTE2NjAzLjM0MTY5NDk3Mzk5LDY5My4yODg2NzI5ODgzMzEsMTY1MzYuNTE5MjQyNTU0NjQsMzk3Ni4xOTkxMDE3NTA1MTk3LDEuNzczMDQ5ODY5MjU4NDExMworMjIsVHVlIDE1IEZlYiAxMSw4NDU1LjIzODA1NzIwNDU0Niw3NjQyLjE3ODAwNTEzODA4NSwzNjMuNzkyNTU5ODgyMDk4MSwzMjQxLjkzMDE5NDA3MDUyMSwzODUuNzA4ODEzNDY4MDg5MDMsMTY0NDYuMzIyNTQwMjY4MjM2LDI0NDcuMzY1MTExMDA5MDAyLDQyMzcuMTg1MTgzNjQwMTg4LDE1NjkzLjIwNDU1NTQyMzkwNSwxNDU5MC40NzE5NjU5NzYwMjcsMTE3NS4yNTY5NTg5MDMwNDE4LDM3OTMuMTA2MDQxMjA0MzUzLDg5LjMyMzk4Mzk5NTkwMzMsOTYxLjg5MzIxOTMzNDY1NTMsNzgwMDIuNTc2MDc2NzE3NzYsMTQ5MDQ2Ljk1NzkxODkyNDE2LDEzMDA5Ni43MjQ5MTcxNDk4OCwzNjczMS41Njg0NzI3MjYyODUsMTA2ODgyLjYwMjA1NzY3NTcxLDcwNjk3LjY3ODM2NjIxNzU2LDEwNTE2Ny4yOTkzMjAxNTk1NCwxMTY3ODQuNjY2Njc5ODM4ODIsOTM1LjQ4ODkxNDAyNzI0MTksMjEwNzQuMDI1NDUxODYwNDcsNDc2Mi41MDgwMjgxNjQ1MTMsMi40NDkyNTQyNTcyNjUyMTAzCisyMyxXZWQgMTYgRmViIDExLDgxOTMuNTM3NDgzMzMzNzA1LDczNDMuMjYxMTg1NzgxOTkyLDQ3My41MTk4Njk3MDk0MTM1NywzNzczLjM5NDAyNzc2NjI5OSw1MDYuNzQ0ODE4MzM2Njk2NSwyMDYzOS44MzM3MzkwODk5NDMsMzI5MC41MzgzMDQ4OTQ0ODQ2LDU2MzEuNzA3MTY0MzI0ODQ4LDE5NjI3LjY4MTQ0MjE5OTE4OCwxODMwOS4xMzQ3NzU3MjMxNSwxNTUwLjk5NDU3MDA3MTE3NjcsNTA3Ni4zNTUxNDgzNzM1OTcsMTI3LjA1MTU0Mjg0NzUzNjU3LDEzMDguMTYxMzI4MjMzMTkyMyw3NDk4OS41NzU2NjQwMTg3OSwxNTU3NTkuNjc2NTAyNDQ3NywxMjQ4NzQuMzA2NTg1NDU0NDQsMzUxODEuNzExNjg0ODgxMTQsMTAyMzUwLjMwMTkxNDM3Mjk1LDY3OTkwLjYzMzE0ODkyMTQ0LDEwMDcwNC44MjQ4OTE3NDk3MywxMTE4MjcuMDE0MjYzMzY4NTYsMTI1Ni40MTAyMDI5MDQ1MzkxLDI2NzI4LjQ3NjE1MTQwOTY3NSw1NjQ1LjE1MTU0NTEwOTIzNSwzLjM1OTcyOTc4NjM0NTQyCisyNCxUaHUgMTcgRmViIDExLDc1NjYuODQ4MTk1NjE1NjUzLDY3MTAuMzk4ODgwMDQwNTUsNjExLjk1ODUzNTA5NTMzMzksNDMzMi43MDg1NDUxMjQ4MzgsNjYxLjk2MzM5NzkxOTA2OTYsMjU3NDUuOTk5MjY3ODYwNTY3LDQ0MDMuMTUwMDYxMDI0MzU1LDc0NDQuOTg0MzA5NzAzNTcsMjQzODEuMzE5MTgzMjExNjQsMjI4NDQuOTMyMDM4Nzk0OTY3LDIwMzUuNjgwNjQwOTg4ODA0Myw2NzU5Ljc2Nzg2NjM1OTUwNSwxNzkuNDMzMTE3MDI2ODkyMzgsMTc3MC4zMDcwMjAxMjQ0NTEsNjg2NzUuNDcwNTk0OTEwMTIsMTU3OTc2LjM0NDc4MjIxMTI0LDExNDEyMS4wODMxMTUwMDIxMywzMjA2MC44NDk1OTE0NzA2NzYsOTMyNTAuNTE5MTM3MjcwMDIsNjIyOTEuNjQ2NjkzMjM0ODQsOTE3NDcuMTEyNTg1MjIyNSwxMDE4NzcuODExNTQzOTc5MDYsMTY3OS44MDEwMDI2MTMzNDYsMzM3MjEuMDc3MTY5MjU2MDMsNjYxMS45NzI3NDgwMjM3ODI1LDQuNTc4NTkwNjU1NTkwOTkzCisyNSxGcmkgMTggRmViIDExLDY2MzUuMjMyNTY4MDYyNiw1ODEwLjI3OTE5MDU5Mjc1Myw3ODQuNzM0MDg5MzMzNzEzOSw0ODk5LjAwNDY0Mjc5ODY1Niw4NTkuNTYyNjI2NDM0MjM0OSwzMTg5Ni40NzAxNjgzMTkyNDcsNTg2NC4wMzQyMTY4NzcyMDEsOTc4Ny41MjA5MzQ0MDUzODIsMzAwNTEuMDYyODQxNjI4MTgzLDI4MzIyLjYyMjk1MzI1NjEyLDI2NTYuNTc5NjQxNzMzMzMxMyw4OTU1Ljg3MjI4Mjk3MjMxNiwyNTEuNzQ4NzUyNDExMzQ1MzgsMjM4NC4xMTI0Mjg4NDYwOTk2LDU5NjkzLjMzMDc3NjAyOTYsMTU0OTU1LjU2MTg4MTUxMDQ4LDk4OTM2LjcwODg2NjMxMzY3LDI3Njk2LjQyNTU3OTU0ODIyNCw4MDUzOS4yNjYyNjM0MTMzMiw1NDE3MC4wNDczNTA5MjgzNiw3OTIzNS42NzgxOTQwOTI3OCw4Nzk4Mi45NDA2Nzc5OTAyOCwyMjM1LjkxMTM5MjQ0NTkxOSw0MjI5MS43MjUzMjY4MDE1OSw3NjM5LjgxMjM1MDIyMTI0NCw2LjIwMDg2MzI4NDE1NDI4MgorMjYsU2F0IDE5IEZlYiAxMSw1NTEzLjc5MTc5NDc5MDYyMyw0NzU4LjUyMzE1NzcyMDM1OCw5OTcuNTk5NDU1MDQxNjAxOSw1NDQ0LjgxODQ2OTIzNDM1MywxMTA5LjAzMTAyMDUxNzU3ODgsMzkyMTAuNTU3ODkxNDQzNiw3NzcyLjAyNTI3MjA0NzQyNSwxMjc5MS43NTg2NzA5MTg3ODIsMzY3MDkuNTc0MDU3NDU3MDgsMzQ4NjEuMDc0MDIwMTQzNSwzNDQ1LjY4ODAxODAxOTc1MiwxMTgwMy4zMjk1NTQ3MTQzOSwzNTEuMDQxOTk3MjA5NDQzNzYsMzE5NS4xOTQ2OTM3MjkyNTUsNDkxNTUuNDA4NTc4NDU5MDM1LDE0NjUzNy43NjU5ODIwNjIyNiw4MTIyMC43NTM4MjQ4NDk3NiwyMjY0MS44MjIyMDU2NzQ3MjUsNjU4MjguMTE3Nzk1NDg2ODYsNDQ2MzAuMjUxODkwNzIwMzcsNjQ3NTcuMjk5NDIyNDgwMjI0LDcxOTA0LjY3MDE2MjA5MTEzLDI5NjIuOTg0OTYwODQxNzI1LDUyNjg2Ljc2NDMxNTM2Nzk0LDg2OTIuODY0MzA1NzExOTY0LDguMzQ3MTU5MTkzNjQ4NjkxCisyNyxTdW4gMjAgRmViIDExLDQzNDMuODcyNDc0NDk2NzgyLDM2ODkuMTk2NzYxNDE3NDY3LDEyNTUuODA4MTk1MjQ0NTkwMyw1OTM3LjYwMDQxMzk3OTUzNywxNDIwLjk4MDk1NDcxMDcxNDUsNDc3NzYuMTcxNTk1MDY0NzcsMTAyNDkuNDMzOTY3OTcwNTEyLDE2NjEyLjI5NzI2NzM4NTgyNCw0NDM4My41NjQzNzE5MDg2MTUsNDI1NTguNTA5MTkxODEwMzA2LDQ0MzkuMzQzNjI5NDE5MjU3LDE1NDY5Ljk1ODcyMzYwMDQ0Myw0ODYuNjUyNTI0ODEyNDIyNCw0MjYxLjA5NTg4MTIzNzA5MiwzODM2OS45MzQ2MjYwMjIzNiwxMzMyODcuNDI4NjM2OTYxNjUsNjMxODIuNDIyNjU1MDMyMTIsMTc1MzAuOTkyMjUyMjE5NDcsNTA5NjAuNzQ5NzM1MDQ3MDE1LDM0ODU2LjUxNzI3NDUzNTc0LDUwMTI2Ljg5NDc3NDU1OTUxLDU1NjU4LjM3Njk2MTk3NzcxLDM5MDguOTQyNTIxMDQ1OTMzNSw2NTEzNy4zNTI4Mzg1MTMyLDk3MjIuMzcyNjU1NzU2NTE5LDExLjE2ODYzNDcyOTMzNzU2NworMjgsTW9uIDIxIEZlYiAxMSwzMjU0LjcyNDYyNjA2NDI5LDI3MTcuODg3MjYzMTU0OTQ2LDE1NjMuMTEwMjQ5NTc4MDk3NCw2MzQyLjY2NjA3MDA1Mzg4MywxODA2LjcxMDQzMjkyNDA5NCw1NzYyMi41MDk1NTY4NDI3NiwxMzQ0NS4xMjAzMDU2NDA1ODgsMjE0MjMuMDY3MTY5OTc1OTU1LDUzMDI0LjgyMTczOTg5Njg4NSw1MTQ3MC43NDE5NTE2MDAyLDU2NzYuODk3MDI5NzU4NTEsMjAxNTQuMDUzOTgzMDc1MjgyLDY3MC44ODAxMDQ0OTY2NjM2LDU2NTMuNDQwNjE2NzAwNzI1LDI4NDg4LjQ1NTE3OTI3ODk2OCwxMTY0NTcuNDIzMzk4Mjk2MjMsNDY3NDEuNjg5MDc3NjkxNSwxMjkwNS4zOTgzOTQ5NjE3ODksMzc1MDkuOTk5MzIyNzQ5ODU2LDI1ODkzLjc2Nzk4NzA1MzQ2NywzNjg5Mi4yOTI1OTkzNjUxNjYsNDA5NjIuNjQwMjU3MTcxODcsNTEzMy4xODY0MDM2ODQ3Miw3OTgyNC41Mjg0OTc4NDk4MSwxMDY2OC4zMjA0ODU0MjYzOCwxNC44NTE2NjU1NzM3NjUxOTIKKzI5LFR1ZSAyMiBGZWIgMTEsMjMzMy4yMjIzOTk4NjA5MjM0LDE5MTUuNjgwNDcwNjQ1NzA1MywxOTIwLjI4MjEzNDcxMzk4MjUsNjYyNy4zNTYyMTE0ODgzLDIyNzcuMzQ5NDU5ODA4MjYsNjg2ODMuMjYzOTY1OTE4NTQsMTc1MzYuMzA1NzkzNTMxNjQsMjc0MDkuMzM4MzQ0MTA4NjksNjI0NzQuMzQ0OTA4NjU2Mjc2LDYxNTgwLjc3NTkxMjczMzUsNzE5Ny44ODgyMTk3NDY0MzQ1LDI2MDgyLjI1NTcxNzQxOTYxNSw5MTkuNzkzMDgxNDc1Njg4LDc0NTkuODY2MzE2Nzc1OTI4LDIwMjQ1Ljc2ODk5MTE5Mjg3Niw5Nzc1Mi40NDMwMzA0NTQxMiwzMzA5OS4wMTY5MTMyNjEyMzUsOTA5NC4wODM2ODM0MjcxMSwyNjQzMC4yMDIyNjc0NzUzODYsMTg0MTEuMDg3ODU1MTQyNjUsMjU5OTIuMTIxODg0MzQ3MDEsMjg4NTkuNDYwNTg4MTg5MDc1LDY3MDguMzcyMjY1MDc4OTI3LDk2ODI2LjYxNDg2MjYzMzA4LDExNDYzLjUzNTU4Njg4Nzk3OCwxOS42MjExNjA2MzE0NjM4NAorMzAsV2VkIDIzIEZlYiAxMSwxNjEzLjgwMTQ3NzQxMTExOTMsMTMwMy45MzA1NjY5Mzk1ODEyLDIzMjMuMTY0NDk1NTY1NjY1Nyw2NzY1LjcyMjczNTkwODA4NCwyODQyLjQwOTgyODk0MDQ5MDYsODA3NTAuNzM3ODMzNTc4MTcsMjI3MjcuNjk5NjQ4NDQ5MjQsMzQ3NTEuNjYxMDMxMTEzNzQsNzI0MjIuNjU5NjcwMjQ3MjIsNzI3NTkuMDU5ODU4ODYwOTQsOTAzNy4wMDk2NjQyOTM4ODIsMzM1MDEuMzE0MjIzMzA2Njc2LDEyNTQuMTgwMDgyNjcyMzU2OCw5Nzg1LjE4OTQ1MTkzODY4OCwxMzg5Mi44NTg3MjA0MDYzMjIsNzg5NTguOTU1Nzc2OTk5NywyMjYzNy43NDY4NTA2MTI4OSw2MTkxLjcyNDAzNTc1MzYyNCwxNzk5NC40NzkyNzk1OTc0NzUsMTI2MzkuNDUyNTM3ODQzNzA3LDE3Njk0LjM5NTg1NDc0MTQyMiwxOTY0Ni4xODc0NzY3MjM3Miw4NzIxLjg2NDkxNTExOTM1MSwxMTYwNDUuNDcxOTY3ODYwNzcsMTIwNDAuMjA1NzI3NDY5NzQ3LDI1Ljc0MDY2ODgyMzA3NTYwNQorMzEsVGh1IDI0IEZlYiAxMSwxMDg3LjkwMjI2ODY1NDczNzMsODY2LjU5NjY5MDg1OTgsMjc2MC4zMjU4NTM0NjQxMjQsNjc0Mi43MzM1NTU1MzM0ODg1LDM1MDcuNTM3ODAwOTYxODg1OCw5MzQyNC44OTc4NDgwOTY2NSwyOTI0NS43MjE2MjUzNTU5LDQzNTk4LjE0ODEzNDU4NzU2LDgyMzc0LjAxMjI1NDYwMTI5LDg0NzE2LjE0NDgzMjI1NTU3LDExMjE2LjA0NjMwNzA5MDg4OCw0MjY1OS45NTI1NDUzNTYzNTUsMTcwMC42MTM2NzkxODAwNjM2LDEyNzUwLjkwODY0MjI3MTEyNiw5MzAyLjU3MDUwMzk0MzM3OCw2MTU3Ni43NjE5NzQ4Njg1OCwxNTExNS4xOTA4MzQ0Njk2ODYsNDExOC4yNDEyNTEzMDAxNjIsMTE5NjguNjQxNDQ0MzAyMTQyLDg0NjYuMjg1NDk0NDQ5NTQ4LDExNzY3Ljk5MDcxODk4NTc5LDEzMDY2LjAwODQyMDgzMzE2MSwxMTI3Ni4zOTc2OTQ1MzM0NywxMzcxMTEuNzA4MzU2OTk2MzYsMTIzMzguMjM1MTU0OTUyNjIxLDMzLjUwNjMyOTUzNDgwMzA2NQorMzIsRnJpIDI1IEZlYiAxMSw3MjIuNjg2MzUzNTk4Mjk5OSw1NjkuMDM4ODQ1MTM0MjAxNywzMjEwLjczODg2MTY1ODAzOTIsNjU1Ni45NjczNDcyMDc2NzcsNDI3MS4zMDMyNTIyMTA0MDk1LDEwNjA2Ny42NTgzNDc5NzU5NCwzNzMyNC42MDUyMDgxMjM4OSw1NDAyMS40MDQ4MDQ5ODk0MDUsOTE2MjguNjIzMTcyODcyNjYsOTY5NTQuMjk4NTYwMDUxNywxMzczMi4xMTg2MDg1NTQ1MDcsNTM3NzUuOTExMzE5ODAwNDUsMjI5Mi41MzkwMjQyMDA4MjQzLDE2NDkxLjY0MDAxNzQxOTM0NCw2MTQ3LjY4MjkyNTIxMTgwMSw0NjU4Mi44ODUwMzk0ODg1Niw5OTY3LjIzNjIxOTQ3NDE3OCwyNzA3LjU4MTI5NDUwMTUzMyw3ODY5LjMxNTA5MDYyMTkwNyw1NTk2LjM5NzQwMDE2MDc2ODUsNzczNi44NDM2MjU0NjM2MTIsODU5MC4yMjM1NjI0NTkyMjEsMTQ0ODkuMTc1NDgzOTI3NTA3LDE1OTI3Ny4yNTU3MDkzOTA0OCwxMjMxNC4zMDM5MjMyMDIzNTUsNDMuMjMwMjg0NjM1Njc1OTcKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWdpbmdTRUlSRGlzZWFzZV9GRF9SZWZlcmVuY2UvQWdpbmdTRUlSRGlzZWFzZS9odW1hbjB0bzAvUG9wdWxhdGlvbiBDb3VudF8yLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWdpbmdTRUlSRGlzZWFzZV9GRF9SZWZlcmVuY2UvQWdpbmdTRUlSRGlzZWFzZS9odW1hbjB0bzAvUG9wdWxhdGlvbiBDb3VudF8yLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYWM1ZDFmCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BZ2luZ1NFSVJEaXNlYXNlX0ZEX1JlZmVyZW5jZS9BZ2luZ1NFSVJEaXNlYXNlL2h1bWFuMHRvMC9Qb3B1bGF0aW9uIENvdW50XzIuY3N2CkBAIC0wLDAgKzEsMzMgQEAKK2l0ZXJhdGlvbix0aW1lLEVHLUZSRy1HMjEwMDAxLEVHLUZSRy1HMjEwMDAyLEVHLUZSRy1HMjEwMDAzLEVHLUZSRy1HMjEwMDA0LEVHLUZSRy1HMjEwMDA1LEVHLUxPRS1HMjQwMDAxLEVHLUxPRS1HMjQwMDAyLEVHLUxPRS1HMjQwMDAzLEVHLUxPRS1HMjQwMDA0LEVHLUxPRS1HMjQwMDA1LEVHLUxPRS1HMjQwMDA2LEVHLUxPRS1HMjQwMDA3LEVHLUxPRS1HMjQwMDA4LEVHLUxPRS1HMjQwMDA5LEVHLVVQRS1HMjkwMDAxLEVHLVVQRS1HMjkwMDAyLEVHLVVQRS1HMjkwMDAzLEVHLVVQRS1HMjkwMDA0LEVHLVVQRS1HMjkwMDA1LEVHLVVQRS1HMjkwMDA2LEVHLVVQRS1HMjkwMDA3LEVHLVVQRS1HMjkwMDA4LEVHLVVSRy1HMzAwMDAxLEVHLVVSRy1HMzAwMDAyLEVHLVVSRy1HMzAwMDAzLEVHLVVSRy1HMzAwMDA0CisxLFR1ZSAyNSBKYW4gMTEsMTE4MDI5LjYsMTA1MzgzLjIwMDAwMDAwMDAxLDYxMzQxLjYwMDAwMDAwMDAwNiwxMjY4MDkuMjAwMDAwMDAwMDEsMTI3ODIyLjQwMDAwMDAwMDAxLDIwNjYyOTkuMjAwMDAwMDAwMiwyMjQ1NDQ1LjIsMTg0MDM1Ni44LDE1OTg1MzUuNiwxOTk4NTcyLjAsNDA1ODUxLjIsMjM3MjUzMS4yLDQ2OTUzNy42MDAwMDAwMDAwMywxMjQ2NDQxLjYsMTExNDA5MS42LDI1NTc0OTQuODAwMDAwMDAwMywxODUyODA0LjAsNTIxMDc3LjIsMTUxNjU3MS4yMDAwMDAwMDAyLDEwMDk5OTQuMCwxNDkyMDc4LjAsMTY1NjkxNC44LDE0NzM5NzYuMCwzMzU5ODk2LjQwMDAwMDAwMDQsMjE0MjY2LjQwMDAwMDAwMDAyLDI2ODIuOAorMixXZWQgMjYgSmFuIDExLDExNzcxMi4zNDc0MTMzMzk4NywxMDUwOTkuOTM5NzYwMjc2MDYsNjExNzYuNzE5NDg0Njg5NjgsMTI2NDY4LjM0ODY2NTE0NTg1LDEyNzQ3OC44MjUyNzc3ODUzNSwyMDYwNzQ1LjE3OTk0MDUwODcsMjIzOTQwOS42NTIxNTUxOTIsMTgzNTQxMC4wOTIwOTY0MSwxNTk0MjM4Ljg4NDk4OTc5NjcsMTk5MzIwMC4wMjQzNTQ2ODMsNDA0NzYwLjMwOTcyMzMzMTEsMjM2NjE1NC4wNTY4MDc2ODMzLDQ2ODI3NS41MjY2MDM3MTQ3NCwxMjQzMDkxLjI4MDkxMjkxNjksMTExMTA5Ny4wMjU0MDI4MTE0LDI1NTA2MjAuNDkxODU0NjcyMywxODQ3ODIzLjgzNTE4MDU0Niw1MTk2NzYuNTkyOTUyNzAzMjQsMTUxMjQ5NC43OTc2NzMzNDQxLDEwMDcyNzkuMjMwMDY5MzExMiwxNDg4MDY3LjQzMzExNjc4ODcsMTY1MjQ2MS4xNjcxMzAxNDgsMTQ3MDAxNC4wODk2MDkwOSwzMzUwODY1LjMxMDk4NjY1MDYsMjEzNjkwLjQ3MTg0NjA5MzI1LDI2NzUuNTg4ODgzMTMxOTI4CiszLFRodSAyNyBKYW4gMTEsMTE3Mzk1Ljk3NzgyMjAxMzE0LDEwNDgxNy40Njc5MDY0NjM5LDYxMDEyLjI5Nzg3NDE1MDIxNiwxMjYxMjguNDQ2MDA2OTk1MDksMTI3MTM2LjIwNjgxMjE1OTc0LDIwNTUyMDYuNjE4MTQzNjEzNywyMjMzMzkwLjkwMjc4ODMzMywxODMwNDc3LjE1MjE0OTg5MywxNTg5OTU0LjEyODgzOTcwMTYsMTk4Nzg0My4wMDAyOTU2NTgxLDQwMzY3Mi40NTU2NzQxNDc5MywyMzU5Nzk0LjY2Mjg0MDc5NzYsNDY3MDE2Ljk2NTg4MTQ1MDYsMTIzOTc1MC4yODY2MjMzMDk0LDExMDgxMTAuNzg1NDc0OTI0NiwyNTQzNzY1LjMxNjY3MjM3NywxODQyODU3LjUzMTQzNzM0NDQsNTE4Mjc5Ljg4NDE1NDExNjQsMTUwODQyOS43NDEwMjAwODE2LDEwMDQ1NzIuMDE2MDM5NzU4OCwxNDg0MDY4LjAyODY3MDA0MywxNjQ4MDE5LjkyOTg2MzA2MjIsMTQ2NjA2My4yMDYyMzExNDU3LDMzNDE4NTkuMzU3ODEwNzY3NCwyMTMxMTYuMTQ2NjQ3OTgxNDgsMjY2OC4zOTc4MzY2NTE5NjU1Cis0LEZyaSAyOCBKYW4gMTEsMTE3MDgwLjQ4ODYzNjY0OTkxLDEwNDUzNS43ODIxMjY2MzQzNyw2MDg0OC4zMzM4MjI2NTA2MjQsMTI1Nzg5LjQ4OTI0MzU2ODI2LDEyNjc5NC41NDE3OTg5MTU4NCwyMDQ5NjgzLjQ2OTI3ODIwNDcsMjIyNzM4OC45MDI2MzgxNTIyLDE4MjU1NTcuOTM5Nzg2MTMzMSwxNTg1NjgxLjI5NjQ4MDU0NjcsMTk4MjUwMC44ODM5Nzc2MzQ2LDQwMjU4Ny42Mjg5NDg3NjE0LDIzNTM0NTIuOTY2MDUwMDE5NSw0NjU3NjEuOTA3NTMyMzQ2NjcsMTIzNjQxOC41ODk3ODYzNTY1LDExMDUxMzIuODU1Nzc1MDUyMiwyNTM2OTI5LjIxODM0NjAwMjUsMTgzNzkwNS4wNDgxMjMwMDgzLDUxNjg4Ny4wNjIxNzI2ODY4LDE1MDQzNzUuOTk2NzY5MjA0NywxMDAxODcyLjMzNTc1Mzc4MTgsMTQ4MDA3OS43NTM5MjYwOTQyLDE2NDM1OTEuMDUxODQ4ODMzLDE0NjIxMjMuMzE3NTI5NjI1NSwzMzMyODc4LjQ2Njc2MTkwNSwyMTI1NDMuNDE5NzA1MDIyMTgsMjY2MS4yMjY4MDE3MDQwMTY1Cis1LFNhdCAyOSBKYW4gMTEsMTE2NzY1Ljg3NzI3NTU5NTY5LDEwNDI1NC44ODAxMTU3NDY4OCw2MDY4NC44MjU5ODg0Njk2OCwxMjU0NTEuNDc1NjAxMTc1MiwxMjY0NTMuODI3NDQyMjAxOCwyMDQ0MTc1LjY4ODE0ODI0MDYsMjIyMTQwMy42MDI1OTAxNTksMTgyMDY1Mi40MTQ3NTExMTM0LDE1ODE0MjAuMzUyOTQ3NjU2NSwxOTc3MTczLjYzMTY4NTk2NTIsNDAxNTA1LjgyMDY3MDAxMiwyMzQ3MTI4LjkxNDU0MTExMyw0NjQ1MTAuMzQxMjg2MjM0NDQsMTIzMzA5Ni4xNjMxMzg3MTQsMTEwMjE2My4yMTE5MzQ3MzU1LDI1MzAxMTIuMTQwOTM1NjE1LDE4MzI5NjYuMzQ0NzExMjY1OCw1MTU0OTguMTE1NjEwOTIzMjcsMTUwMDMzMy41MzE3NDg4NDAxLDk5OTE4MC4xNjcxMTk4NDExLDE0NzYxMDIuNTc2MjQ4ODA4LDE2MzkxNzQuNDk2ODQ1ODYwNSwxNDU4MTk0LjM5MTI2NDMzOTQsMzMyMzkyMi41NjQzNDkyNDY3LDIxMTk3Mi4yODYzMzA1Nzg5NCwyNjU0LjA3NTcxOTYwNzM1NAorNixTdW4gMzAgSmFuIDExLDExNjQ1Mi4xNDExNjQ4ODkwNCwxMDM5NzQuNzU5NTc1NjI5NjQsNjA1MjEuNzczMDMzODg0MzcsMTI1MTE0LjQwMjMxNDM5MTAyLDEyNjExNC4wNjA5NTQ0OTcxMiwyMDM4NjgzLjIyOTY5MjM1OTUsMjIxNTQzNC45NTM2NzYyMTc3LDE4MTU3NjAuNTM2OTEwNzcwNSwxNTc3MTcxLjI2MzM4MDU0NywxOTcxODYxLjE5OTgzNjI2NjUsNDAwNDI3LjAyMTk4NzE5MzEsMjM0MDgyMi40NTY1NzQ0ODI0LDQ2MzI2Mi4yNTY5MDM1NDk2NiwxMjI5NzgyLjk3OTQ5ODI3OTcsMTA5OTIwMS44Mjk2NTgxMjg4LDI1MjMzMTQuMDI4NjY3OTc1NywxODI4MDQxLjM4MDc5NjYwNTcsNTE0MTEzLjAzMzEwNTI5ODMsMTQ5NjMwMi4zMTI4ODU5NjQsOTk2NDk1LjQ4ODExMjIyNzIsMTQ3MjEzNi40NjMwOTkzMDE2LDE2MzQ3NzAuMjI4NzIwNTQwNCwxNDU0Mjc2LjM5NTI5MTE2ODcsMzMxNDk5MS41NzczMDA5NywyMTE0MDIuNzQxODUxOTgxMDYsMjY0Ni45NDQ1MzE4NTYxMTQKKzcsTW9uIDMxIEphbiAxMSwxMTYxMzkuMjc3NzM4MjM5MjgsMTAzNjk1LjQxODIxNDk1OTgyLDYwMzU5LjE3MzYyNTE1ODI2LDEyNDc3OC4yNjY2MjYwMzIyLDEyNTc3NS4yMzk1NTY1ODg0OCwyMDMzMjA2LjA0ODk4MzQ4OTQsMjIwOTQ4Mi45MDcwNzQxMjYsMTgxMDg4Mi4yNjYyNTA2NDYyLDE1NzI5MzMuOTkzMDIyNjIzLDE5NjY1NjMuNTQ0OTc0MDQzMywzOTkzNTEuMjI0MDc1OTc0OTUsMjMzNDUzMy41NDA1NjQ3MjMzLDQ2MjAxNy42NDQxNzUyNDMzLDEyMjY0NzkuMDExNzYzOTU4NywxMDk2MjQ4LjY4NDcyMTc5MzUsMjUxNjUzNC44MjU5MzYwNjA0LDE4MjMxMzAuMTE2MDkzOTM0NSw1MTI3MzEuODAzMzI2MTQ5MSwxNDkyMjgyLjMwNzIwNjExNDgsOTkzODE4LjI3Njc3MDg3MTUsMTQ2ODE4MS4zODIwMzU2NjQsMTYzMDM3OC4yMTE0NDY5NTIsMTQ1MDM2OS4yOTc1NjE3ODk2LDMzMDYwODUuNDMyNTYzNjE0LDIxMDgzNC43ODE2MTA0ODMxLDI2MzkuODMzMTgwMTE4Nzg3Cis4LFR1ZSAxIEZlYiAxMSwxMTU4MjcuMjg0NDM3MDA0MzUsMTAzNDE2Ljg1Mzc0OTI0MzU2LDYwMTk3LjAyNjQzMjUzMDAzLDEyNDQ0My4wNjU3ODcxMzI4LDEyNTQzNy4zNjA0Nzc1NDU4MiwyMDI3NzQ0LjEwMTIyODQ1OSwyMjAzNTQ3LjQxNDEwNzE5MSwxODA2MDE3LjU2Mjg3NTU0MjMsMTU2ODcwOC41MDcyMjA4Nzg1LDE5NjEyODAuNjIzNzc0MzEyNywzOTgyNzguNDE4MTM4MzI3NCwyMzI4MjYyLjExNTA4MDE3NjQsNDYwNzc2LjQ5MjkyMjY5MzY3LDEyMjMxODQuMjMyOTE1NDI4LDEwOTMzMDMuNzUyOTc0NDg1LDI1MDk3NzQuNDc3Mjk4NTczLDE4MTgyMzIuNTEwNDM4MjIzOCw1MTEzNTQuNDE0OTc3NTgwMTMsMTQ4ODI3My40ODE4MzMxMDgsOTkxMTQ4LjUxMTIwMTE1NDMsMTQ2NDIzNy4zMDA3MTI2NzM3LDE2MjU5OTguNDA5MTA2NTQ3NSwxNDQ2NDczLjA2NjEyMzM5NTcsMzI5NzIwNC4wNTczMDE0NDc3LDIxMDI2OC40MDA5NjEyMjQ1NywyNjMyLjc0MTYwNjIzNzcxOAorOSxXZWQgMiBGZWIgMTEsMTE1NTE2LjE1ODcxMDE2ODY3LDEwMzEzOS4wNjM5MDA3OTY0OCw2MDAzNS4zMzAxMzAyMDE5MywxMjQxMDguNzk3MDU2OTIwNjQsMTI1MTAwLjQyMDk1NDY5ODMyLDIwMjIyOTcuMzQxNzY3NjEyMSwyMTk3NjI4LjQyNjI0MzgxLDE4MDExNjYuMzg3MDA5MTc0OCwxNTY0NDk0Ljc3MTQyNTU5NzQsMTk1NjAxMi4zOTMwNDEyMywzOTcyMDguNTk1NDAyNDQ0OCwyMzIyMDA4LjEyODg0MjQ4NCw0NTk1MzguNzkyOTk3NjE4MjYsMTIxOTg5OC42MTYwMTI5MDM0LDEwOTAzNjcuMDEwMzM2OTQ3MiwyNTAzMDMyLjkyNzQ3OTQ3MiwxODEzMzQ4LjUyMzc4NDE2MzYsNTA5OTgwLjg1Njc5NzM2NTEsMTQ4NDI3NS44MDM5ODg3NTMxLDk4ODQ4Ni4xNjk1NzM3MTc4LDE0NjAzMDQuMTg2ODgxNTIsMTYyMTYzMC43ODU4ODc4MzkzLDE0NDI1ODcuNjY5MTE4NDIxMiwzMjg4MzQ3LjM3ODg5NTgzOTcsMjA5NzAzLjU5NTI3MzE4OTgzLDI2MjUuNjY5NzUyMjI4NTk3NgorMTAsVGh1IDMgRmViIDExLDExNTIwNS44OTgwMTQzMjExLDEwMjg2Mi4wNDYzOTg3MjM3LDU5ODc0LjA4MzM5NjMyODM1LDEyMzc3NS40NTc3MDI3OTM1NCwxMjQ3NjQuNDE4MjMzNjEwNDksMjAxNjg2NS43MjYwNzQ0MTg4LDIxOTE3MjUuODk1MDk3MDQ5NCwxNzk2MzI4LjY5ODk5MzgzMDcsMTU2MDI5Mi43NTExOTAwNTM1LDE5NTA3NTguODA5NzA3NzE0MiwzOTYxNDEuNzQ3MTIyNjY5MzYsMjMxNTc3MS41MzA3MjYxNDY0LDQ1ODMwNC41MzQyODE5ODU4LDEyMTY2MjIuMTM0MTk2OTA2NCwxMDg3NDM4LjQzMjgwMTcwMiwyNDk2MzEwLjEyMTM2NzQ5MTMsMTgwODQ3OC4xMTYyMDU4MTY5LDUwODYxMS4xMTc1NTY4NDk4NCwxNDgwMjg5LjI0MDk5MjU2OSw5ODU4MzEuMjMwMTI0Mjc1NCwxNDU2MzgyLjAwODM4OTUyNCwxNjE3Mjc1LjMwNjA4NjA5MzQsMTQzODcxMy4wNzQ3ODQyNjU2LDMyNzk1MTUuMzI0OTQ0NjI4NCwyMDkxNDAuMzU5OTI5MTY4LDI2MTguNjE3NTYwMjc5OTY4CisxMSxGcmkgNCBGZWIgMTEsMTE0ODk2LjQ5OTgxMzYzMjg0LDEwMjU4NS43OTg5Nzg5MDA0Niw1OTcxMy4yODQ5MTMwMDQzNTQsMTIzNDQzLjA0NTAwMDI5NTkxLDEyNDQyOS4zNDk1NjgwNTgzNCwyMDExNDQ5LjIwOTc1NTA5MjIsMjE4NTgzOS43NzI0MjQyMjgsMTc5MTUwNC40NTkyOTAwMjQxLDE1NTYxMDIuNDEyMTcwMjEzNiwxOTQ1NTE5LjgzMDgzNTA3NjMsMzk1MDc3Ljg2NDU3OTQxNjA1LDIzMDk1NTIuMjY5NzU4MDc3LDQ1NzA3My43MDY2ODc5MjkwNSwxMjEzMzU0Ljc2MDY4ODAzMjMsMTA4NDUxNy45OTY0MzI4NDMsMjQ4OTYwNi4wMDQwMTU2NjEzLDE4MDM2MjEuMjQ3ODk2Mjc0Niw1MDcyNDUuMTg2MDYwODU1LDE0NzYzMTMuNzYwMjYxNTAxNCw5ODMxODMuNjcxMTUzNDI0NywxNDUyNDcwLjczMzE3OTg2MDMsMTYxMjkzMS45MzQxMDMwMTY3LDE0MzQ4NDkuMjUxNDUzMDE5LDMyNzA3MDcuODIzMjYxNTAxLDIwODU3OC42OTAzMjU3MTMsMjYxMS41ODQ5NzI3NTI3MTc1CisxMixTYXQgNSBGZWIgMTEsMTE0NTg3Ljk2MTU3OTgzNTY0LDEwMjMxMC4zMTkzODM5NTIyOSw1OTU1Mi45MzMzNjYyNTQyOCwxMjMxMTEuNTU2MjMzMDk0ODUsMTI0MDk1LjIxMjIyMDAwNTY5LDIwMDYwNDcuNzQ4NTQ4MjAzOCwyMTc5OTcwLjAxMDEyNjQ5NTcsMTc4NjY5My42Mjg0NzYxNTUyLDE1NTE5MjMuNzIwMTI0NDM5MywxOTQwMjk1LjQxMzYxMjY0NjUsMzk0MDE2LjkzOTA3OTA5Njk1LDIzMDMzNTAuMjk1MTE3MTY3Myw0NTU4NDYuMzAwMTU3NjU3MjQsMTIxMDA5Ni40Njg3ODY3MTgzLDEwODE2MDUuNjc3MzY1ODI3LDI0ODI5MjAuNTIwNjQwODM0NywxNzk4Nzc3Ljg3OTE2NzMwODYsNTA1ODgzLjA1MTE0NzU3OTMsMTQ3MjM0OS4zMjkzMDk2NDEyLDk4MDU0My40NzEwMjY0NTg3LDE0NDg1NzAuMzI5MjkxMjc5NCwxNjA4NjAwLjYzNDQ0NjQ1MjYsMTQzMDk5Ni4xNjc1NTExODk0LDMyNjE5MjQuODAxODc1MzYxMiwyMDgwMTguNTgxODczMTAzODMsMjYwNC41NzE5MzIxNzk1ODEKKzEzLFN1biA2IEZlYiAxMSwxMTQyODAuMjgwNzkyMTk5ODMsMTAyMDM1LjYwNTM2MzIzNTYsNTkzOTMuMDI3NDQ2MDIwMzY1LDEyMjc4MC45ODg2OTI5NTY5LDEyMzc2Mi4wMDM0NTk1ODAzNCwyMDAwNjYxLjI5ODMyNDMwMDcsMjE3NDExNi41NjAyNDg0MjMsMTc4MTg5Ni4xNjcyNDgxNjc2LDE1NDc3NTYuNjQwOTEzMTkxNywxOTM1MDg1LjUxNTM1NzQwNTIsMzkyOTU4Ljk2MTk1NDA0NTc1LDIyOTcxNjUuNTU2MTMzODQwNyw0NTQ2MjIuMzA0NjYzMzY5MTQsMTIwNjg0Ny4yMzE4NzMwMTE3LDEwNzg3MDEuNDUxODA3MjY4NywyNDc2MjUzLjYxNjYyMzIxMSwxNzkzOTQ3Ljk3MDQ0OTAzMTMsNTA0NTI0LjcwMTY4ODUwMjQsMTQ2ODM5NS45MTU3NDc5NDMzLDk3NzkxMC42MDgxNzMxNzkxLDE0NDQ2ODAuNzY0ODU3ODMxOSwxNjA0MjgxLjM3MTczMDA3MSwxNDI3MTUzLjc5MTU5OTQyNTcsMzI1MzE2Ni4xODkwMjk3MTMsMjA3NDYwLjAyOTk5NTMwNDYsMjU5Ny41NzgzODEyNjQ2NDY0CisxNCxNb24gNyBGZWIgMTEsMTEzOTczLjQ1NDkzNzUxMjQ5LDEwMTc2MS42NTQ2NzI4MTgyNiw1OTIzMy41NjU4NDYxNTE0NSwxMjI0NTEuMzM5Njc5NzI0NDgsMTIzNDI5LjcyMDU2NTA1MDYyLDE5OTUyODkuODE1MDg1NTIyMSwyMTY4Mjc5LjM3NDk3NzU3OSwxNzc3MTEyLjAzNjQxOTIwODksMTU0MzYwMS4xNDA0OTg3MzUyLDE5Mjk4OTAuMDkzNTEzNjEyLDM5MTkwMy45MjQ1NjI0NDMzLDIyOTA5OTguMDAyMjg5NjE0Niw0NTM0MDEuNzEwMjA3MTY2MywxMjAzNjA3LjAyMzQwNjM0MDMsMTA3NTgwNS4yOTYwMzQ3MzM4LDI0Njk2MDUuMjM3NTA1ODY3NiwxNzg5MTMxLjQ4MjI4OTU1Miw1MDMxNzAuMTI2NTg4Mjg5NSwxNDY0NDUzLjQ4NzI4Mzk0NjIsOTc1Mjg1LjA2MTA4NzcxMDMsMTQ0MDgwMi4wMDgxMDg1OTEyLDE1OTk5NzQuMTEwNjczMDY0NCwxNDIzMzIyLjA5MjIxMjI0OTgsMzI0NDQzMS45MTMxODIwMzcsMjA2OTAzLjAzMDEyOTkyNTI2LDI1OTAuNjA0MjYyODgyODU3MworMTUsVHVlIDggRmViIDExLDExMzY2Ny40ODE1MTAwNTU3MiwxMDE0ODguNDY1MDc1NDU5OTEsNTkwNzQuNTQ3MjY0MzkxNTksMTIyMTIyLjYwNjUwMTI5MjUxLDEyMzA5OC4zNjA4MjI4MDE2NCwxOTg5OTMzLjI1NDk2NTIyLDIxNjI0NTguNDA2NjQ0MTIzNiwxNzcyMzQxLjE5NjkxOTI5MTcsMTUzOTQ1Ny4xODQ5NDQ4NDMsMTkyNDcwOS4xMDU2NTI0Mzg1LDM5MDg1MS44MTgyODgyNDIyLDIyODQ4NDcuNTgzMjE2NjY5LDQ1MjE4NC41MDY4MjA5NjYzLDEyMDAzNzUuODE2OTI1MjgyMSwxMDcyOTE3LjE4NjM5NjUzNDMsMjQ2Mjk3NS4zMjg5OTQyODM1LDE3ODQzMjguMzc1MzU0NjMzNCw1MDE4MTkuMzE0Nzg0Njk0NiwxNDYwNTIyLjAxMTcyMTQ5Miw5NzI2NjYuODA4MzI4MzExLDE0MzY5MzQuMDI3MzY3MzgsMTU5NTY3OC44MTYwOTk4Mzk1LDE0MTk1MDEuMDM4MDk3NzgxOCwzMjM1NzIxLjkwMzAwMzE2ODgsMjA2MzQ3LjU3NzcyODE4MTc2LDI1ODMuNjQ5NTIwMDc5NTE3NQorMTYsV2VkIDkgRmViIDExLDExMzM2Mi4zNTgwMTE1ODQ4NSwxMDEyMTYuMDM0MzQwNTkyOTcsNTg5MTUuOTcwNDAyMzY4ODUsMTIxNzk0Ljc4NjQ3MzU4NTE2LDEyMjc2Ny45MjE1MjczMTE4OCwxOTg0NTkxLjU3NDIyNzU3OSwyMTU2NjUzLjYwNzcyMDM5MiwxNzY3NTgzLjYwOTc5NDk1NTIsMTUzNTMyNC43NDA0MTY1MDI2LDE5MTk1NDIuNTA5NDcxNjAwNCwzODk4MDIuNjM0NTQxMDkyNDQsMjI3ODcxNC4yNDg2OTc0MDI0LDQ1MDk3MC42ODQ1NjY0MTY1NCwxMTk3MTUzLjU4NjA0NzMzNjIsMTA3MDAzNy4wOTkzMTE1MjM2LDI0NTYzNjMuODM2OTU1ODcxLDE3Nzk1MzguNjEwNDI3MzU0NSw1MDA0NzIuMjU1MjQ4NDY0NzYsMTQ1NjYwMS40NTY5NjA0NDgsOTcwMDU1LjgyODUxNzE5MTEsMTQzMzA3Ni43OTEwNTI0OTQ3LDE1OTEzOTUuNDUyOTM5NzE2MiwxNDE1NjkwLjU5ODA1NzQ2OTEsMzIyNzAzNi4wODczNzY2ODUzLDIwNTc5My42NjgyNTQ4NTY4NCwyNTc2LjcxNDA5NjA2OTc5ODQKKzE3LFRodSAxMCBGZWIgMTEsMTEzMDU4LjA4MTk1MTMwNzAzLDEwMDk0NC4zNjAyNDQzMDI5NSw1ODc1Ny44MzM5NjU1ODQwMSwxMjE0NjcuODc2OTIwNTMyNTEsMTIyNDM4LjM5OTk4MTEyOTc0LDE5NzkyNjQuNzI5MjY3MjM2MywyMTUwODY0LjkzMDgyMDQ4LDE3NjI4MzkuMjM2MjA4OTI2MiwxNTMxMjAzLjc3MzE3OTYyNCwxOTE0MzkwLjI2Mjc5NDk5MDMsMzg4NzU2LjM2NDc1NjI2NywyMjcyNTk3Ljk0ODY2NDAwMTcsNDQ5NzYwLjIzMzUzNDgwODI3LDExOTM5NDAuMzA0NDY4Njk0NiwxMDY3MTY1LjAxMTI2ODg5MTYsMjQ0OTc3MC43MDc0MTk1MDgsMTc3NDc2Mi4xNDg0MDc3Njc1LDQ5OTEyOC45MzY5ODMyNDQ4LDE0NTI2OTEuNzkwOTk2NDI4Myw5Njc0NTIuMTAwMzQwMzI0NywxNDI5MjMwLjI2NzY3NjQzMjYsMTU4NzEyMy45ODYyMjY2MTk3LDE0MTE4OTAuNzQwOTg1ODE4NCwzMjE4Mzc0LjM5NTM5ODI4NTIsMjA1MjQxLjI5NzE4ODI2MDY1LDI1NjkuNzk3OTM0MjM4MjQ1NQorMTgsRnJpIDExIEZlYiAxMSwxMTI3NTQuNjUwODQ1ODU5MywxMDA2NzMuNDQwNTY5MzA5NDIsNTg2MDAuMTM2NjYzMzk5MzgsMTIxMTQxLjg3NTE3NDA0NzM3LDEyMjEwOS43OTM0OTQ4NTAyMSwxOTczOTUyLjY3NjYwODkwNTQsMjE0NTA5Mi4zMjg2OTk4Mzk4LDE3NTgxMDguMDM3NDM5Nzg1MiwxNTI3MDk0LjI0OTYwMDc0NiwxOTA5MjUyLjMyMzU3MjMxMzYsMzg3NzEzLjAwMDM5NDU4NzUsMjI2NjQ5OC42MzMxOTgwMDcsNDQ4NTUzLjE0Mzg0Njk5MDM3LDExOTA3MzUuOTQ1OTY0MDE0NCwxMDY0MzAwLjg5ODgyNzk2MTQsMjQ0MzE5NS44ODY1NzUwNjkzLDE3Njk5OTguOTUwMzEyNTYxNCw0OTc3ODkuMzQ5MDI1NDgxNiwxNDQ4NzkyLjk4MTkyMDUxNzMsOTY0ODU1LjYwMjU0NzI2NjMsMTQyNTM5NC40MjU4NDU2MTg4LDE1ODI4NjQuMzgxMDk4NzgyLDE0MDgxMDEuNDM1ODcwMTIzOCwzMjA5NzM2Ljc1NjM3NTE3NzgsMjA0NjkwLjQ2MDAyMDE5MTgyLDI1NjIuOTAwOTc4MTM4MjkyCisxOSxTYXQgMTIgRmViIDExLDExMjQ1Mi4wNjIyMTkyODc0NCwxMDA0MDMuMjczMTA0OTQ2NjgsNTg0NDIuODc3MjA5MDI3NTc0LDEyMDgxNi43Nzg1NzQwMDIzNCwxMjE3ODIuMDk5Mzg3MDkxNDUsMTk2ODY1NS4zNzI5MDY5OTg3LDIxMzkzMzUuNzU0MjU0ODY3LDE3NTMzODkuOTc0ODgxNjI4NSwxNTIyOTk2LjEzNjE0Njc0NiwxOTA0MTI4LjY0OTg3ODcyMywzODY2NzIuNTMyOTQyMzUwNTUsMjI2MDQxNi4yNTI1Mjk4Nzc3LDQ0NzM0OS40MDU2NTMyODQzLDExODc1NDAuNDg0Mzg2MTg5MSwxMDYxNDQ0LjczODYxNzk4NjQsMjQzNjYzOS4zMjA3NzI5NiwxNzY1MjQ4Ljk3NzI3NDcyMyw0OTY0NTMuNDgwNDQ0MzI5OCwxNDQ0OTA0Ljk5NzkxODk5MTgsOTYyMjY2LjMxMzk1MDk2NjUsMTQyMTU2OS4yMzQyNjAxMzQyLDE1Nzg2MTYuNjAyNzk4NDM1LDE0MDQzMjIuNjUxNzkwMTk5LDMyMDExMjMuMDk5ODI1NDY2NSwyMDQxNDEuMTUyMjU1ODk3OTMsMjU1Ni4wMjMxNzE0OTE3NjM2CisyMCxTdW4gMTMgRmViIDExLDExMjE1MC4zMTM2MDMwMjQxOSwxMDAxMzMuODU1NjQ3MTQ0NjIsNTgyODYuMDU0MzE5NTIwNDMsMTIwNDkyLjU4NDQ2ODIwNjQyLDEyMTQ1NS4zMTQ5ODQ0NzE3MSwxOTYzMzcyLjc3NDk0NTI1MTQsMjEzMzU5NS4xNjA1MjI0OTAzLDE3NDg2ODUuMDEwMDQzNzM0NywxNTE4OTA5LjM5OTM4NDU0OCwxODk5MDE5LjE5OTkxNDQ1NiwzODU2MzQuOTUzOTExMjUzNCwyMjU0MzUwLjc1NzAzODU2NjMsNDQ2MTQ5LjAwOTEzMzM5ODA3LDExODQzNTMuODkzNjY2MTI0NCwxMDU4NTk2LjUwNzMzNzk0NzQsMjQzMDEwMC45NTY1MjM2NDksMTc2MDUxMi4xOTA1NDMxOTk0LDQ5NTEyMS4zMjAzNDE1NTYxNiwxNDQxMDI3LjgwNzI3MzA0Niw5NTk2ODQuMjEzNDI3NTg3OSwxNDE3NzU0LjY2MTcxMzQ0NDIsMTU3NDM4MC42MTY2NzE1MTMzLDE0MDA1NTQuMzU3OTE4MTA4OCwzMTkyNTMzLjM1NTQ3NzU0MSwyMDM1OTMuMzY5NDE0MDM3LDI1NDkuMTY0NDU4MTg4Mzk3NQorMjEsTW9uIDE0IEZlYiAxMSwxMTE4NDkuNDAyNTM1ODY4MDgsOTk4NjUuMTg1OTk4NDA5NjgsNTgxMjkuNjY2NzE1NzU3NzksMTIwMTY5LjI5MDIxMjM4MjM0LDEyMTEyOS40Mzc2MjE1ODYwMiwxOTU4MTA0LjgzOTYzNjM0NzUsMjEyNzg3MC41MDA2Nzk3NjgsMTc0Mzk5My4xMDQ1NTAyMzEyLDE1MTQ4MzQuMDA1OTgwODMzNywxODkzOTIzLjkzMjAwNDQ3MTMsMzg0NjAwLjI1NDgzODMyMSwyMjQ4MzAyLjA5NzI1MTA3OSw0NDQ5NTEuOTQ0NDk2MzQxNiwxMTgxMTc2LjE0NzgxMjUxMDQsMTA1NTc1Ni4xODE3NTYzNTA0LDI0MjM1ODAuNzQwNDk3MjA5NiwxNzU1Nzg4LjU1MTQ4MjU2NDUsNDkzNzkyLjg1Nzg1MTQ0NTksMTQzNzE2MS4zNzgzNTg1MTgsOTU3MTA5LjI3OTkxNjMyMjMsMTQxMzk1MC42NzcwOTIxMjc1LDE1NzAxNTYuMzg4MTY3MzUyMiwxMzk2Nzk2LjUyMzUxNzkwMzQsMzE4Mzk2Ny40NTMyNjk0NjgsMjAzMDQ3LjEwNzAyNjYzODQzLDI1NDIuMzI0NzgyMjg1MzQ5CisyMixUdWUgMTUgRmViIDExLDExMTU0OS4zMjY1NjM5NjE5Niw5OTU5Ny4yNjE5Njc4MDU3LDU3OTczLjcxMzEyMjQzNjQ4LDExOTg0Ni44OTMxNzAxNDM0NSwxMjA4MDQuNDY0NjQwOTgzMDcsMTk1Mjg1MS41MjQwMjE1NDU0LDIxMjIxNjEuNzI4MDQzNDgwMywxNzM5MzE0LjIyMDEzOTc2MTIsMTUxMDc2OS45MjI3MDE3NTM0LDE4ODg4NDIuODA0NTk4MDg4OCwzODM1NjguNDI3Mjg1ODMxOSwyMjQyMjcwLjIyMzg0MjA1NjUsNDQzNzU4LjIwMTk4MDM0MTcsMTE3ODAwNy4yMjA5MTE1OTU1LDEwNTI5MjMuNzM4NzExMDI1OCwyNDE3MDc4LjYxOTUyMjg1MzgsMTc1MTA3OC4wMjE1NzI2ODE2LDQ5MjQ2OC4wODIxNDA3MDgsMTQzMzMwNS42Nzk2NDU2MTE3LDk1NDU0MS40OTI0MTkyMDg0LDE0MTAxNTcuMjQ5Mzc1NjA3OCwxNTY1OTQzLjg4MjgzODM4NywxMzkzMDQ5LjExNzk0NTM0OTMsMzE3NTQyNS4zMjMzNDgzODE2LDIwMjUwMi4zNjA2MzkwNjQyNSwyNTM1LjUwNDA4ODAwNjcxMjcKKzIzLFdlZCAxNiBGZWIgMTEsMTExMjUwLjA4MzI0MDc3MTc1LDk5MzMwLjA4MTM3MDkzNDkyLDU3ODE4LjE5MjI2ODA1OTIzLDExOTUyNS4zOTA3MTI5NzA5NCwxMjA0ODAuMzkzMzkzMTQyMzEsMTk0NzYxMi43ODUyNzAzMDYzLDIxMTY0NjguNzk2MDY5NzI1NCwxNzM0NjQ4LjMxODY2NTE1MDMsMTUwNjcxNy4xMTY0MTI2Mzc1LDE4ODM3NzUuNzc2MjY4NjI4MiwzODI1MzkuNDYyODQxMjQ1NywyMjM2MjU1LjA4NzYzMzMzODMsNDQyNTY3Ljc3MTg1Mjc1NzE0LDExNzQ4NDcuMDg3MTI2OTY0LDEwNTAwOTkuMTU1MTA4OTI2OCwyNDEwNTk0LjU0MDU4ODQ3MDYsMTc0NjM4MC41NjI0MDgzNjksNDkxMTQ2Ljk4MjQwODM4MTA3LDE0Mjk0NjAuNjc5Njk4NjI3NCw5NTE5ODAuODMwMDAwOTQ5MSwxNDA2Mzc0LjM0NzYzNTg4MzEsMTU2MTc0My4wNjYzMzk4NTU1LDEzODkzMTIuMTEwNjQ3NjY2NSwzMTY2OTA2Ljg5NjA2OTg3ODcsMjAxOTU5LjEyNTgwOTk3MDU0LDI1MjguNzAyMzE5NzQzMDM0CisyNCxUaHUgMTcgRmViIDExLDExMDk1MS42NzAxMjcwNjUyNCw5OTA2My42NDIwMjk5MTkxNCw1NzY2My4xMDI4ODQ5MjM2NSwxMTkyMDQuNzgwMjIwMTkwODgsMTIwMTU3LjIyMTIzNjQ1MDc2LDE5NDIzODguNTgwNjc5OTIxNCwyMTEwNzkxLjY1ODM1MzUxNDUsMTcyOTk5NS4zNjIwOTMwNzksMTUwMjY3NS41NTQwNzc3MDg5LDE4Nzg3MjIuODA1NzEzMDUwMywzODE1MTMuMzUzMTE3MTI5NjUsMjIzMDI1Ni42Mzk1OTM1NDMsNDQxMzgwLjY0NDQwOTk5NDYsMTE3MTY5NS43MjA2OTkzMTA4LDEwNDcyODIuNDA3OTI1OTI5NiwyNDA0MTI4LjQ1MDg0MDE2OCwxNzQxNjk2LjEzNTY5OTA2OTgsNDg5ODI5LjU0Nzg4NTc0MDQsMTQyNTYyNi4zNDcxNzU2ODcsOTQ5NDI3LjI3MTc4ODczMDQsMTQwMjYwMS45NDEwMzcyNTg2LDE1NTc1NTMuOTA0NDI5NTAxLDEzODU1ODUuNDcxMTYzMjYsMzE1ODQxMi4xMDE5OTc0MTUsMjAxNDE3LjM5ODExMTI2ODgsMjUyMS45MTk0MjIwNTA4MjkzCisyNSxGcmkgMTggRmViIDExLDExMDY1NC4wODQ3OTA4OTA4Niw5ODc5Ny45NDE3NzMzODA2OSw1NzUwOC40NDM3MDkxMTEyLDExODg4NS4wNTkwNzg5NTE2OSwxMTk4MzQuOTQ1NTM3MTgwMjYsMTkzNzE3OC44Njc2NzUxNDI0LDIxMDUxMzAuMjY4NjI4MzY4LDE3MjUzNTUuMzEyNTAzNzQ4OCwxNDk4NjQ1LjIwMjc1OTc5NiwxODczNjgzLjg1MTc1MTU5NzQsMzgwNDkwLjA4OTc1MTA4NjE0LDIyMjQyNzQuODMwODM3NjM2LDQ0MDE5Ni44MDk5Nzc0MjQxNiwxMTY4NTUzLjA5NTk0NjIxNzIsMTA0NDQ3My40NzQyMDY2MzM0LDIzOTc2ODAuMjk3NTgxODE0LDE3MzcwMjQuNzAzMjY4NTE2OCw0ODg1MTUuNzY3ODM2MjAzNiwxNDIxODAyLjY1MDgyODQ2MjYsOTQ2ODgwLjc5Njk3MjAzOTUsMTM5ODgzOS45OTg4MzYwNzg3LDE1NTMzNzYuMzYyOTY3MjcyLDEzODE4NjkuMTY5MTIxNDU5MSwzMTQ5OTQwLjg3MTkwMTcwMDMsMjAwODc3LjE3MzEyODA4NzY2LDI1MTUuMTU1MzM5NjUyMTAzNQorMjYsU2F0IDE5IEZlYiAxMSwxMTAzNTcuMzI0ODA3NTU2NjcsOTg1MzIuOTc4NDM2NDIzNjQsNTczNTQuMjEzNDgwNDc2MjI1LDExODU2Ni4yMjQ2ODQyMDEzNywxMTk1MTMuNTYzNjY5NDY0NTUsMTkzMTk4My42MDM4MDc4MTE5LDIwOTk0ODQuNTgwNzY1OTE4LDE3MjA3MjguMTMyMDkwNTU2LDE0OTQ2MjYuMDI5NjIwMDQ4OCwxODY4NjU4Ljg3MzMyNzQzNzgsMzc5NDY5LjY2NDQwNTY3OTgsMjIxODMwOS42MTI2MjY1MTA3LDQzOTAxNi4yNTg5MDkyOTU2NiwxMTY1NDE5LjE4NzI2MTkyODgsMTA0MTY3Mi4zMzEwNjQxNjA5LDIzOTEyNTAuMDI4Mjc0NTc4NSwxNzMyMzY2LjIyNzA1NDQwMTUsNDg3MjA1LjYzMTU1NTIzODIsMTQxNzk4OS41NTk1MDE5MDQzLDk0NDM0MS4zODQ4MDI0ODUxLDEzOTUwODguNDkwMzgwNDU5NywxNTQ5MjEwLjQwNzkxNTAyOTQsMTM3ODE2My4xNzQyNDIyNTA2LDMxNDE0OTMuMTM2NzYwMTAzNSwyMDAzMzguNDQ2NDU4NzM0NTQsMjUwOC40MTAwMTc0MzM4NzIKKzI3LFN1biAyMCBGZWIgMTEsMTEwMDYxLjM4Nzc1OTYwOTE4LDk4MjY4Ljc0OTg2MDYxNTAzLDU3MjAwLjQxMDk0MjYzNTA5LDExODI0OC4yNzQ0Mzg2NjQ4MSwxMTkxOTMuMDczMDE1Mjc2NDMsMTkyNjgwMi43NDY3NTY0OTQsMjA5Mzg1NC41NDg3NzU1MDMsMTcxNjExMy43ODMxNTk3NjIyLDE0OTA2MTguMDAxOTE3NjUwNywxODYzNjQ3LjgyOTUwNjMwNzEsMzc4NDUyLjA2ODc2ODM2NTU0LDIyMTIzNjAuOTM2MzY2NTYyLDQzNzgzOC45ODE1ODg2NTQ1LDExNjIyOTMuOTY5MTE3MTMzNiwxMDM4ODc4Ljk1NTY3OTk1OTksMjM4NDgzNy41OTA1MzY0NzcsMTcyNzcyMC42NjkxMDgwNDQ4LDQ4NTg5OS4xMjgzNzAyNjgxNSwxNDE0MTg3LjA0MjEzMzk3MTQsOTQxODA5LjAxNDU5MzYxNjUsMTM5MTM0Ny4zODUxMTAwMjQxLDE1NDUwNTYuMDA1MzM2MjQ4MywxMzc0NDY3LjQ1NjMzNjAxODQsMzEzMzA2OC44Mjc3NTYwNDYsMTk5ODAxLjIxMzcxNDY1NzM4LDI1MDEuNjgzNDAwNDQ3Njc5NgorMjgsTW9uIDIxIEZlYiAxMSwxMDk3NjYuMjcxMjM2ODEyNDksOTgwMDUuMjUzODkzOTY2MTIsNTcwNDcuMDM0ODQyOTU1MTQ1LDExNzkzMS4yMDU3NTI4MjEzOCwxMTg4NzMuNDcwOTY0NDA1MDcsMTkyMTYzNi4yNTQzMjYxMDc3LDIwODgyNDAuMTI2ODAzNzczMiwxNzExNTEyLjIyODEzMDE2NiwxNDg2NjIxLjA4NzAwOTUzNzMsMTg1ODY1MC42Nzk0NzYxNTU3LDM3NzQzNy4yOTQ1NTE0MTYxLDIyMDY0MjguNzUzNjA5MjY1LDQzNjY2NC45Njg0MjcyNTg2NiwxMTU5MTc3LjQxNjA1ODczODcsMTAzNjA5My4zMjUzMDM2MDU0LDIzNzg0NDIuOTMyMTQxOTE3LDE3MjMwODcuOTkxNTk0MDY3NSw0ODQ1OTYuMjQ3NjQwNTgxNSwxNDEwMzk1LjA2Nzc1NTM2MTgsOTM5MjgzLjY2NTcyMDc0NDksMTM4NzYxNi42NTI1NTU2MzYxLDE1NDA5MTMuMTIxMzk1NzI1NSwxMzcwNzgxLjk4NTMwMzI3OTUsMzEyNDY2Ny44NzYyNzg0MDc0LDE5OTI2NS40NzA1MjA0MDY0NCwyNDk0Ljk3NTQzMzkwOTEyNTUKKzI5LFR1ZSAyMiBGZWIgMTEsMTA5NDcxLjk3MjgzNjEyNzM0LDk3NzQyLjQ4ODM5MDkxMzYxLDU2ODk0LjA4MzkzMjU0Mzk1LDExNzYxNS4wMTYwNDQ4ODIzMiwxMTg1NTQuNzU0OTE0NDMzMzksMTkxNjQ4NC4wODQ0NDc1NTk3LDIwODI2NDEuMjY5MTM0Mjg5LDE3MDY5MjMuNDI5NTMyNzc5OCwxNDgyNjM1LjI1MjM1MDExMDYsMTg1MzY2Ny4zODI1NDY3OTEsMzc2NDI1LjMzMzQ5MTg1MDEsMjIwMDUxMy4wMTYwNTA3NTc0LDQzNTQ5NC4yMDk4NjU0OTQ5LDExNTYwNjkuNTAyNzA5NjUxNCwxMDMzMzE1LjQxNzI1MjYwMTUsMjM3MjA2Ni4wMDEwMjEyNDQsMTcxODQ2OC4xNTY3OTAwNiw0ODMyOTYuOTc4NzU3MjM3OSwxNDA2NjEzLjYwNTQ4OTI0MjEsOTM2NzY1LjMxNzYyMDc2MzEsMTM4Mzg5Ni4yNjIzMzkxMzUyLDE1MzY3ODEuNzIyMzU5Mjg0LDEzNjcxMDYuNzMxMTM0NDI0NSwzMTE2MjkwLjIxMzkyMDkzMywxOTg3MzEuMjEyNTEzNTk2NTgsMjQ4OC4yODYwNjMxOTczODgKKzMwLFdlZCAyMyBGZWIgMTEsMTA5MTc4LjQ5MDE2MTY5MDEsOTc0ODAuNDUxMjEyMzAxMTcsNTY3NDEuNTU2OTY2MjM4MzgsMTE3Mjk5LjcwMjc0MDc2ODM2LDExODIzNi45MjIyNzA3MTUzLDE5MTEzNDYuMTk1MTc3MzgwNywyMDc3MDU3LjkzMDE4NzEyNDUsMTcwMjM0Ny4zNTAwMTA1MDEsMTQ3ODY2MC40NjU0OTA5NTczLDE4NDg2OTcuODk4MTQ5NTI2MiwzNzU0MTYuMTc3MzUxMzYwMiwyMTk0NjEzLjY3NTUzMTQxNSw0MzQzMjYuNjk2MzcyMjk2MjUsMTE1Mjk3MC4yMDM3Njg1NTY1LDEwMzA1NDUuMjA4OTEyMTg0NywyMzY1NzA2Ljc0NTI2MDI4NzUsMTcxMzg2MS4xMjcwODYyNTY2LDQ4MjAwMS4zMTExNDI5NzYwNSwxNDAyODQyLjYyNDU1MDk4Miw5MzQyNTMuOTQ5NzkxOTY3OSwxMzgwMTg2LjE4NDE3MzA3MzksMTUzMjY2MS43NzQ1OTM0ODA5LDEzNjM0NDEuNjYzOTA5NDU0NCwzMTA3OTM1Ljc3MjQ4MTYzMywxOTgxOTguNDM1MzQ0ODY5MDcsMjQ4MS42MTUyMzM4NTQ3NDYzCiszMSxUaHUgMjQgRmViIDExLDEwODg4NS44MjA4MjQ3OTIxMSw5NzIxOS4xNDAyMjUzNjA3MSw1NjU4OS40NTI3MDI1OTM4MiwxMTY5ODUuMjYzMjc0MDg3NDMsMTE3OTE5Ljk3MDQ0NjM1MzM2LDE5MDYyMjIuNTQ0Njk3MzU4NSwyMDcxNDkwLjA2NDUxODQ3MiwxNjk3NzgzLjk1MjMxNzc4OSwxNDc0Njk2LjY5NDA4MDU2NjUsMTg0Mzc0Mi4xODU4MzY4Mjc2LDM3NDQwOS44MTc5MTYyNDE4LDIxODg3MzAuNjg0MDM1NDM2LDQzMzE2Mi40MTg0NDUwNTg3LDExNDk4NzkuNDk0MDA5Njk5LDEwMjc3ODIuNjc3NzM1MTI3MywyMzU5MzY1LjExMzA5OTkxNCwxNzA5MjY2Ljg2NDk4NTIwOCw0ODA3MDkuMjM0MjUyMTIyNzUsMTM5OTA4Mi4wOTQyNDc4ODM3LDkzMTc0OS41NDE3OTM4ODEzLDEzNzY0ODYuMzg3ODYwNDUzMiwxNTI4NTUzLjI0NDU2NTMxNDQsMTM1OTc4Ni43NTM3OTc3MjM3LDMwOTk2MDQuNDgzOTYyMTkzNiwxOTc2NjcuMTM0Njc3ODU0MDIsMjQ3NC45NjI4OTE1ODYxMTIKKzMyLEZyaSAyNSBGZWIgMTEsMTA4NTkzLjk2MjQ0Mzg1ODg1LDk2OTU4LjU1MzMwMzY5Mzg5LDU2NDM3Ljc2OTkwMzg3MzM3LDExNjY3MS42OTUwODYxMTIxNywxMTc2MDMuODk2ODYyMTc2MTYsMTkwMTExMy4wOTEzMTQxNzU2LDIwNjU5MzcuNjI2ODIwMjQ3NCwxNjkzMjMzLjE5OTMyMDM0MiwxNDcwNzQzLjkwNTg2NDA1LDE4Mzg4MDAuMjA1MjgxOTYyNCwzNzM0MDYuMjQ2OTk3MzIxMjYsMjE4Mjg2My45OTM2OTA0MjQsNDMyMDAxLjM2NjYwOTU1OTA1LDExNDY3OTcuMzQ4MjgyNjYyMiwxMDI1MDI3LjgwMTI0MTU0MTMsMjM1MzA0MS4wNTI5MzU1NzIsMTcwNDY4NS4zMzMxMDE0NTQ3LDQ3OTQyMC43Mzc1NzA1MDAyMywxMzk1MzMxLjk4Mzk3ODkxNzEsOTI5MjUyLjA3MzI0NzA3MzYsMTM3Mjc5Ni44NDMyOTQ0NjIsMTUyNDQ1Ni4wOTg4NDE5MzM1LDEzNTYxNDEuOTcxMDU3Njc3OSwzMDkxMjk2LjI4MDU2NzM4ODUsMTk3MTM3LjMwNjE4OTEzMjU2LDI0NjguMzI4OTgyMjU4NTU2CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FnaW5nU0VJUkRpc2Vhc2VfRkRfUmVmZXJlbmNlL0FnaW5nU0VJUkRpc2Vhc2UvaHVtYW4wdG8wL1JfMi5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FnaW5nU0VJUkRpc2Vhc2VfRkRfUmVmZXJlbmNlL0FnaW5nU0VJUkRpc2Vhc2UvaHVtYW4wdG8wL1JfMi5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmM3NTA0NwotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWdpbmdTRUlSRGlzZWFzZV9GRF9SZWZlcmVuY2UvQWdpbmdTRUlSRGlzZWFzZS9odW1hbjB0bzAvUl8yLmNzdgpAQCAtMCwwICsxLDMzIEBACitpdGVyYXRpb24sdGltZSxFRy1GUkctRzIxMDAwMSxFRy1GUkctRzIxMDAwMixFRy1GUkctRzIxMDAwMyxFRy1GUkctRzIxMDAwNCxFRy1GUkctRzIxMDAwNSxFRy1MT0UtRzI0MDAwMSxFRy1MT0UtRzI0MDAwMixFRy1MT0UtRzI0MDAwMyxFRy1MT0UtRzI0MDAwNCxFRy1MT0UtRzI0MDAwNSxFRy1MT0UtRzI0MDAwNixFRy1MT0UtRzI0MDAwNyxFRy1MT0UtRzI0MDAwOCxFRy1MT0UtRzI0MDAwOSxFRy1VUEUtRzI5MDAwMSxFRy1VUEUtRzI5MDAwMixFRy1VUEUtRzI5MDAwMyxFRy1VUEUtRzI5MDAwNCxFRy1VUEUtRzI5MDAwNSxFRy1VUEUtRzI5MDAwNixFRy1VUEUtRzI5MDAwNyxFRy1VUEUtRzI5MDAwOCxFRy1VUkctRzMwMDAwMSxFRy1VUkctRzMwMDAwMixFRy1VUkctRzMwMDAwMyxFRy1VUkctRzMwMDAwNAorMSxUdWUgMjUgSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzIsV2VkIDI2IEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDExMTQuMDkxNjAwMDAwMDAwMiwyNTU3LjQ5NDgwMDAwMDAwMDQsMTg1Mi44MDQsNTIxLjA3NzIwMDAwMDAwMDEsMTUxNi41NzEyMDAwMDAwMDAzLDEwMDkuOTk0MDAwMDAwMDAwMSwxNDkyLjA3ODAwMDAwMDAwMDIsMTY1Ni45MTQ4MDAwMDAwMDAyLDAuMCwwLjAsMC4wLDAuMAorMyxUaHUgMjcgSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMjExMC4yMjc4NDUwMDU2MjMzLDQ4NDQuMjEyNzU2MzA5MzQ0LDM1MDkuNDQwODY4MzYxMDkyLDk4Ni45ODQ5MjczMDU0MDY1LDI4NzIuNTc0MTg5NzQ2Njg4NywxOTEzLjA1NDA2MzEzODYyMywyODI2LjE4MTAyNzIzMzU3NzQsMzEzOC40MDIzOTY4NjAyOTcsMC4wLDAuMCwwLjAsMC4wCis0LEZyaSAyOCBKYW4gMTEsMTIuNTA0MTU0NjQ2NDEwNjksMTAuODgwNTI4MjY0MjQ1OTg5LDAuMCwyLjExODI3MDE1MDcwMzgyOSwwLjAsMy44MzU5NDM1OTAyNTQ0OTQ1LDAuMCwwLjAsMy43MjIyMzQ0NjIxODA3NjYsMy41NDgwNDc0NjkzMjA3MDgsMC4wLDAuMCwwLjAsMC4wLDMxNjYuMDAzMDMxMDM0MDU2LDcyMTUuNDcyNTczOTQ1NjMyLDUyNjUuMTIzNTIwNDk0OTU3LDE0ODAuNjUzNDcyMzkxOTIyMiw0MzA5LjYyMzUzOTU0NzIwNywyODcwLjA5MzQ5MjMxNDg5MSw0MjQwLjAxNzYyODc4NDU2MjUsNDcwOC40NTAwMTc1ODMzNSwwLjAsNC4xMjI1NTQ0ODIwOTg5NzUsMi40MjE4NTc3NjkyNTY0NzAyLDAuMAorNSxTYXQgMjkgSmFuIDExLDQxLjA5MjkzNTMzMDc0OTMsMzUuNzU3NjcwMTExMjE0NDIsMC4wLDYuOTY0NzYxODIzNDAwNzksMC4wLDEyLjYxMzQwNzE1ODk4NjAyMywwLjAsMC4wLDEyLjIzOTQ3NTQ4ODk0NTU5NCwxMS42NjY3NDgwMDE3NTA4MTgsMC4wLDAuMCwwLjAsMC4wLDQzMzkuNTYwNDUzMTc3MTQ0LDk3ODkuOTE2Mjg0NTYxNTU3LDcyMTYuNTA4OTk4MjEyMjg4LDIwMjkuMjM5NjQxNDMzNzQ4MSw1OTA2LjgyODUzNTY4Nzk2MDUsMzkzMy43OTgyMDUwNjQxMDYsNTgxMS40MTgzNTUxODc1MzQsNjQ1My40OTE1ODE5MjgwMjYsMC4wLDEzLjU1NTg5MjA2NzE3MjU4Miw3Ljk2MzE3NzQxNDI4NjU4OCwwLjAKKzYsU3VuIDMwIEphbiAxMSw5MC4wNTM3MDU2OTY2NTk5OSw3OC40OTYwNDA1MzUxMDcyOCwwLjAxNTcwOTk2NjYxMzA3NjI4LDE1LjMzMzMyMzAzODE5Njk5LDAuMDE1MjcwODA1OTc5MzUwMjEsMjguMjQ2NTQ2OTYxMDA0NDM3LDAuMDY2NTA0OTAxMDkxNzIwMjUsMC4xMzY5MjE1NTYyNTQ0NzM1OCwyNy40MDc5MDc4NTEzMTcwMzQsMjYuMDk0MzE5NTQ2NDI1NjIzLDAuMDQzNzkyODA1MDgwNjc4OTUsMC4xMTA0MjM3ODg2NTMzMzEyLDAuMCwwLjAyMDA3NjI2MDQ0MjkyODk3LDU2ODMuNzE2NTkwMjk4NTY4LDEyNjYyLjk3MDA2ODI3MjM0OSw5NDUxLjUwNDQ1MjAzMTgzLDI2NTcuNDgzMzkwMjYwMTQwNCw3NzM2LjI3MzA1MjA3OTg0Nyw1MTUyLjAxMTU3Mzk0OTUyMyw3NjExLjMwMTA3MTE5NTkwMSw4NDUyLjI4NTY1MzMxNTIxMiwwLjAyNjQzMTEzNDQyNjc2OTQyLDMwLjQ2MTcyMzA5ODYzMzA0LDE3LjYwMDkwODI3NDU0NTcyNywwLjAKKzcsTW9uIDMxIEphbiAxMSwxNjUuMjQyMTY5MjA0NTI0MzcsMTQ0LjQxNTkxOTY4MzgyMzk3LDAuMDczNjU5MTYyODc1MDIyNjUsMjguMzMyMTA3NDc1NDM2NjcyLDAuMDcxNjAwMTcxNDcyMjA3MjUsNTMuNTQ3Njk2MzM5MTgzODMsMC4zMTE4MzI5NjgxOTA1ODcxNSwwLjY0MjAwNjgwNDQyMTQxNTYsNTEuOTU0Mzc1MTk0MzQ1MjMsNDkuMzc3NTI3MjUzNjMzNjksMC4yMDUzMzcwNjA5NTM1MTc2LDAuNTE3NzYzMzQ2MDExNDMzNCwwLjAsMC4wOTQxMzQ5OTg1NzI1MTczOCw3MjYxLjczNDc5NTUyMjExLDE1OTQyLjIxMDQzNTI4MTAwNiwxMjA3NS40NTI1Njg2MDM2MzgsMzM5NS4wNDk4MzQ2MDk0OTg3LDk4ODQuNDAyMTIyNjEwNTI5LDY1ODIuMDMxNDEwMzE1MDU4LDk3MjQuNzEyMDQ2Nzc4OTE3LDEwNzk5LjI4MjIwMTkxNDIzMywwLjEyMzkzMTI0NzU0NTkzNDA0LDU4LjAzOTExMjEyNjY2ODIzNiwzMi43MTkxOTYxNDU1ODQ0MSwwLjAKKzgsVHVlIDEgRmViIDExLDI3NC4yOTY5NjQ2MDQyNzk2LDI0MC40ODIzNDY4NzM0NzI3LDAuMjE0NTEyNjQ4Nzk5NzU0OTYsNDcuNDE2MDI2MjI4MTM5NTYsMC4yMDg3NDUzNzIxNjQ0MjYxMiw5Mi4zNzQzMTc3ODIxMDM0LDAuOTE1NDc4NDA2NzE5Mzk3MSwxLjg3OTA4MzI0OTUzNjAxMjEsODkuNjE3ODUyODA2NTk3Miw4NS4wMDExNDA2OTE1OTMxNCwwLjU5OTIzMTU3MjQ2NDMxMzgsMS41MTgyNDQwNTI3NDkzNjIsNi4yMjY5NTYzNzAwMjM5ODhFLTQsMC4yNzgxMDAxMDEzMTgyOTk5Myw5MTUxLjk4MjU5NTUwNDI4MiwxOTc1Ni41MDQ4MTMzMTYxMDQsMTUyMTguOTExNzIwMDgyNTc5LDQyNzguNzMwNzU5NjQ1NTgzLDEyNDU4LjQzMTE1NzkxNDczLDgyOTQuODI4NzY2MzY1NTM0LDEyMjU3LjEzMjI3NjAwOTAzLDEzNjExLjYyNTgzOTQwODg4LDAuMzYzNDg1MTUxNzM5MTc5ODMsMTAwLjcxMjA1ODQyODkwNTI0LDU1LjE1NDA5OTA5MTE4MDY0LDMuMjA3NDA4OTE3MTc2NjAxRS01Cis5LFdlZCAyIEZlYiAxMSw0MjYuOTU2ODQyOTQ5MDc1MiwzNzUuNjA0ODIzMjM2MzYyODUsMC40OTkzMzkzNjk3MDkzNDgzLDc0LjQ0OTkyNDcxOTkyMDUyLDAuNDg2Nzc0MTQ5NDU3OTYwOTQsMTQ5LjkyMDg2Nzk4MjAwNzM3LDIuMTU4NTgzNjQyNzI3Njg2Myw0LjQwOTM0OTQzMTM2NDAzNywxNDUuNDMxMTY0MjkxNTEwNiwxMzcuNjQ1NDExNzAyOTE5MzIsMS4zOTk1MjYyNTYzNjY5OTMyLDMuNTczMTA5NTg3MDMxNjY4NywwLjAwMzc4NzAxMzI0MDQzOTA3MzcsMC42NjIyMDAzMTE2MDU2MzkyLDExNDUxLjgzMDg2NjQwMjgwNiwyNDI2MS43NTU3NDE1Njc1MjYsMTkwNDQuMTkzOTcyMTY4MDE0LDUzNTQuMzA0NDIzMjE0MzE3LDE1NTkxLjc2MTI1MzEzMDg1NSwxMDM3OC41Nzc1MTkwNzE5NDcsMTUzMzkuODA1ODYzNDY1ODMsMTcwMzUuMDczMTkwNTEwMSwwLjg1NTc0NTY0MjQ0Mjk3MzksMTY0LjQ5MzE3NjkxMjgyODk3LDg3LjI4NTk0MjY1NjkyMzE3LDEuOTUwNjI0NTEyMDgxMjcyRS00CisxMCxUaHUgMyBGZWIgMTEsNjM1LjQ0NzczMzQ5MDc5MzQsNTYxLjAwNDI2NTc2NzI2NDMsMS4wMTc0MTI4MzU4MzU1NzQ3LDExMS43OTIwOTU5NDY4OTIyMiwwLjk5Mzk4MTc3NDM1NDA4NDksMjMzLjA5MjQxNDk4MDIyOTY1LDQuNDY3NTE4MjkxNTQyNTM4LDkuMDcyNTY3NzcxOTU2MTU1LDIyNi4wODE0NDM3ODYxMzU5NCwyMTMuNTE2MzA3MTgzMDg4MDMsMi44NjMyNDg0NjM0ODMxNTIsNy4zNzgyMzc5MjcxMjc5MjMsMC4wMTM2NDU5NDIyNjcxNTk3MywxLjM4NjY3NDY0Nzc1NzcxMDgsMTQyODEuNTc2OTU5MDYwMjgzLDI5NjQ2LjE3NjgxODAwMDcxLDIzNzUxLjk1MjU0MTE3NzI3Nyw2Njc4LjQxMzA0MDI4OTEyLDE5NDQ5LjQ0NTgxMDg3ODc0NCwxMjk0Mi4yMDUwNjExMTg4NTIsMTkxMzUuMTE5MTM1MDM3MDcsMjEyNDkuOTY2NjA4ODc2Mjc1LDEuNzY3ODYwNTIxNzY2MDQyNiwyNTcuNDQ4MTE1MTU5NDgwOTUsMTMyLjE2MDMxNzYyOTA4MDQsNi45NTAzOTM4Njc2MzA5NjhFLTQKKzExLEZyaSA0IEZlYiAxMSw5MTQuODk3MDU2NTEzOTEyMyw4MTAuNjA1OTgxMTU1Mjg1MiwxLjg5NTkxMzk1Mjc4MDQ4LDE2Mi4zOTExNDcyNjkxOTksMS44NTY4MTczMTA5Nzg5NDc0LDM1MC45NTYxNjE2MDMwODc1LDguNDcwNDA0NTkxNDc3OTQ4LDE3LjA5MDY1NjUzNjc0NDY3NSwzNDAuMzQ1MjA2OTUxMTcwNTUsMzIwLjc0NDM3ODI4NzMzMzM1LDUuMzYwMDYyMTczNjE2NDA0LDEzLjk1MzgzNjMzODU3ODQ1OSwwLjAzODAwMTAxNTc3OTgxMzY3LDIuNjYyNjE1MjU3NzIwNzM1LDE3Nzg4LjM1OTY2NDAwNDc2NSwzNjEzNS40NDg4MTA2MDY3OSwyOTU4Ny43Njc3ODYwNTM3MDgsODMyMC40NDQ3MTA0ODk3NjQsMjQyMzMuNjY4NDUxNDAwOTcsMTYxMTguOTM1NTA0MTQ3MjcyLDIzODQxLjk5MTMwNTQwNjg2LDI2NDc3LjIyMDYzNTkzNDgzNSwzLjM0NTIyOTA2MDM3MDEyNTYsMzkwLjI2MTQwMDY5MTc4OTA1LDE5My42Mjk3MTEwMzY1MTY4OCwwLjAwMTg5ODc0ODAwMTU2ODczOTUKKzEyLFNhdCA1IEZlYiAxMSwxMjgzLjc2MjM4NDYxNDYwNTcsMTE0MS40NDYzOTYzODkyNzcyLDMuMzEyNDIxNTY3MDY5MTU2NiwyMjkuODk4MTk0MjE3ODY0NjcsMy4yNTI3NjEyMTQzNzI0ODMsNTE1LjI5OTQzODQxNDY0OTcsMTUuMDcyNzg3MTg5MDExNTMzLDMwLjIwNDMxMzUxNDA2MzcyOCw0OTkuNjI1MTk2NzA3ODQ1OTMsNDY5Ljg3NzEzMjYwOTc5MTEsOS40MTA5NDg0NTczOTY1NjgsMjQuNzYzNzk2MDg4NDA3MTcsMC4wOTA0MzIxOTE4NTM2MDU4Miw0LjgwMDQyODI2Njc3NzI3NiwyMjE1MC4wNjU1MTM3NTQ1MDQsNDM5OTcuOTI0MjQ1NTA3NzUsMzY4NDguNzMzMzMwMDM4Mjc0LDEwMzY0LjQyMTI3NzgzMDIzOSwzMDE4OS4yMzUzOTE0Mjg0MDMsMjAwNjkuODI1Mjg1Mjk0NTYyLDI5NzAxLjI3OTk5NDc4MzUsMzI5ODQuMzI0Nzc3Mzk1NTY2LDUuOTQwNTQ0MDE0OTI1NDg0LDU3Ni45NDI4ODMyMDM1NDMsMjc2LjUyMDMyMTg3NTg4NDQsMC4wMDQ0MDc0NDg0NTcwMjQyMDEKKzEzLFN1biA2IEZlYiAxMSwxNzY0LjI2MzEwNzIzNTY2NjcsMTU3NC4wODIwNjY3ODMwNDY1LDUuNTExMzA3MzUxNjExNTE5LDMxOC43OTk3MjAyOTc1MzM5NSw1LjQyNzM0ODQ5NDQ2MjAyMiw3NDEuMzM2MDI3ODkyMDk1LDI1LjU2MDM3ODEzMTAzMzM2LDUwLjg1NjEzNDU5OTUwNjQ3Niw3MTguNjI4ODI0NTU1MDAxNSw2NzQuNTAxNzQ1MjgzODczMywxNS43Mzk1NzM0NzA4NjIzMTgsNDEuODc2OTA1NjUxNTk3MzcsMC4xOTM0NjY3Nzk5MjA1ODE0NSw4LjI0OTExMzE4MjM3MDg1NiwyNzU3OS4xNDk0ODQ2MjQ2LDUzNTQ5Ljk4NDMwMTI1LDQ1ODg5LjkxMzYxODk5ODQ4LDEyOTEwLjg1NTY5Njk0MTQ1OSwzNzYwOC45NzQ5NjQ4MjUzMDYsMjQ5ODcuMjIyMTAyNTU5ODA1LDM3MDAxLjA5NjE0ODU2MjE1LDQxMDkxLjI0NTM5ODI5NjQ2NSwxMC4wNTMxMzUzNDY3MzYwNzcsODM1LjczMDU3NDgwNTI1NCwzODYuODMzMjMxOTAzNzAyLDAuMDA5MTU5ODY5NjI0OTc2NDcxCisxNCxNb24gNyBGZWIgMTEsMjM4Mi43ODMwMTA2MjI0OTc0LDIxMzIuOTY5MDIzODU2NzgzNyw4LjgyNTM2MTE3OTM5NTk1NSw0MzQuNTc2NDQyMjE1NjYwMSw4LjcxNjc3NzQ4MTA3ODM5MiwxMDQ4LjYwOTE2NzM0Nzg4NjEsNDEuNzM4ODQ3OTg0MjAyNjY0LDgyLjQzNjgwODA1Mjk2NzQyLDEwMTYuMjMzOTM3MjMzNjc0OSw5NTIuMDQwNzIyNjM0MTIxLDI1LjM0MDgwMjEzNDE3OTQ0OCw2OC4xODUxMzI5NzU3NzQyNSwwLjM4MzIzNDA3NjAxNDY4MDc0LDEzLjY1MDQ2ODc4NjE5MTU2NSwzNDMyNi4wNjA5Nzc3MTcxNSw2NTE2MS40NTEwMTkzMTA2MjUsNTcxMzAuMTUyMDY5MjgwMzYsMTYwNzguNDI5ODMwNDQ4NTM1LDQ2ODM4LjYwODU3OTI3MzUxLDMxMDk3Ljg2ODMwMTA2NzgwNyw0NjA4MS41OTk3ODQyOTk0NCw1MTE3NS43NTA2NTMyMjMxNSwxNi4zODIzOTc5NDk1NzE5NDYsMTE5MC4yNTUzMjM3Nzg3NDcyLDUzMS45ODk1MjkwNDUwNzExLDAuMDE3NTc1MjI1MDg4OTgwMzE2CisxNSxUdWUgOCBGZWIgMTEsMzE3MC4xNzU1MTUzNzMxNzYsMjg0Ni43NDUyOTcxMTExMzk3LDEzLjcwNDIyODc4OTkzOTUzMSw1ODMuODkxOTQ1NzUxMTQwOCwxMy41Nzc4NTE5NTcyNTc0OSwxNDYyLjE0NDgwNzEzMTUyMjIsNjYuMTIzMjkwOTc3ODU3NjYsMTI5LjYxNDk2NTI5MjQ5NTUzLDE0MTYuNTkyMTI3NTI3ODE2NywxMzI0Ljc2Nzc0OTYwMzQwNCwzOS41NzE4MTgzNzcyMTI5MzUsMTA3LjY5ODA4ODkyMTY4ODQ1LDAuNzE2MjE4NDYzMDkxODM0NiwyMS45MTM1MjY5MjM3NDY5NTcsNDI2ODEuNjA5NTc4Mjg2MDUsNzkyNjAuNjQwNDA2NjIyMTYsNzEwNTYuMTA2NDA4NDczNDQsMjAwMDUuMTcwMjgyOTI5MTc1LDU4MjgwLjE1MjM1MTE0NjQ0LDM4NjY1LjA0NzczODU5MzMyNiw1NzMzOC4zNTA5NDc0MDQzNiw2MzY3Ny4xMzAzMzk0MDUzMSwyNS45MDAwODIzMzg1MDU5NiwxNjcxLjA0MTg1MjI0NjkzODgsNzIxLjEyNzU5OTI3NTk5MiwwLjAzMTc1MDQ2OTc1MDg1MzY0CisxNixXZWQgOSBGZWIgMTEsNDE2MS44NTQ4ODUyMTU2ODksMzc0OC4zMDIzNTkwNDM5MjM0LDIwLjc1MTU2ODQwNzE2NzQzMyw3NzQuODEyMzMwNjI4NzQzNCwyMC42Mjc0MDM4MTMxNTIxNTYsMjAxMy45MTQ2NjcxNzI0NzU3LDEwMi4xOTM1MDczMDcxMzM0MiwxOTguNzc2NTA3MDMxNzY2MzYsMTk1MC41MjQ3MDQ5NDQ2MzU3LDE4MjEuMDk2MjU4NDQ2MDIxNyw2MC4yNzI2MjI1NzY3OTc3NywxNjUuOTM3OTI1MDQwMjU3ODgsMS4yNzg5NDgwNDMzOTA1NTIsMzQuMzE2MTAwMjUxNjQwODU0LDUyOTc3LjE0NjIwMTE3NjkyNSw5NjMzOC4yMzA1OTc3NzU4Nyw4ODIyMi42MDk5NjgyNjA3NSwyNDg0OC41NzUzNjExOTI1OCw3MjM5Mi4yNTQ4MDMxNzkzLDQ3OTg4Ljc2MDM2MzY4NjA4LDcxMjIyLjY0NjY1ODc0ODI5LDc5MDk2LjU2Nzc4Nzg5NywzOS45NDc1NDcxNTMxNjU5LDIzMTcuNDMxNzI2MzA5Nzc2LDk2NS40NTgzNzk1NDYxMTgyLDAuMDU0NzMwMjczNTk4ODEyMjMKKzE3LFRodSAxMCBGZWIgMTEsNTM5Ny40OTkwNTAxNDU5MzIsNDg3NC40NzUzNDk1MzIxNjksMzAuNzczMjM0MDQwMDY5MTM0LDEwMTcuMDU0NTQ5Nzg4MjQ4NywzMC42OTM4NTIzMjI1ODM2NTIsMjc0NC42NzU1ODIyMTc2OTgzLDE1NC43MzU4NTc2MTk0NjQxNiwyOTguNjA1OTk0Nzc4MDQyMjYsMjY1Ny4yNzE4MjE0OTAxMzE1LDI0NzcuMTk5NTM1MzczMzA0Niw4OS45MjQzNjEwNDU1NzQ4MSwyNTAuNDY1NjI1ODA4MDUyNjQsMi4yMDE3NTg0MDk2MTYzMjcsNTIuNjQyNDIxMzQ2MDQ4NjgsNjU1ODAuOTA0MzM5NzY3MTksMTE2OTQ4LjYyMTc3MjI0Mjc3LDEwOTI0Ni41NTUyNzM0NDkwNiwzMDc4My44ODQ3ODE5ODA5OTMsODk2ODUuMTE1MjI5MTI0MTcsNTk0MDIuNDI4NzAxMzEzNjksODgyMzYuNTI1NjI5NTEzMyw5Nzk5MS41ODkxMTY4MjAxMyw2MC4zNjU4MDYxMzA3MTM4NjQsMzE4MC4wMjczODcxMDc5MzcsMTI3OC42ODA3NTE0NTI5MDM1LDAuMDkwODczODM3MDM0NjcyNTYKKzE4LEZyaSAxMSBGZWIgMTEsNjkyMC4xMzAzNDE2MDgxODgsNjI2NS4xMjUwOTczNDE1MzgsNDQuODM5MjY1NjMyMzY5MTksMTMyMi4yNTYxMjA3MzI5MjksNDQuODg0MTg2Mjc0NjQ1MDQsMzcwNi4yNTg3OTM3MjEwMDU1LDIzMC4yOTg0MTUxNTgwNjMzNCw0NDAuODUxMjc4ODM0MTc5MiwzNTg2LjY2MDEzMjA4NDU5NzUsMzMzOS4wMjc4NDc2OTQzNjMsMTMxLjg1NjA1NTU5OTU0OTMsMzcxLjU3ODI2OTU4MTE5NCwzLjY3ODE3NzY2MzUwMjgyNSw3OS4zNjg1ODI5MTg5MjUxOCw4MDg4OC4zMjE5NDM0NzQ5OCwxNDE3MDYuODk3MDA4MjczNCwxMzQ3OTAuNjAyNzY1NzE2NCwzNzk5OS40MjM4Nzk4NzAyODYsMTEwNzA2Ljg3MjQ2ODMxMzg2LDczMjY0LjE2NjAyMDM2MjIyLDEwODkxOS4zNzkwOTUyMDAwNiwxMjA5NjEuMTg5Njc0NjgzMyw4OS42Njg0NTAxODM3NTIxNCw0MzIzLjc3MTk2OTg2MzQ0MiwxNjc3LjQ1MzgwMjU2ODQ4MSwwLjE0NjM1MDAxMzA3ODAzODM4CisxOSxTYXQgMTIgRmViIDExLDg3NzQuMjk2ODYwNDk1MTU1LDc5NjEuMzQ1MTUzMjE1MTc5LDY0LjM2Mjk5MDQyMzgyNjUyLDE3MDQuMjUxODQzMzUyMTQwMiw2NC42NzA0MTE4MDAxNTcyNSw0OTY0LjM4ODY4ODAxNzQwOSwzMzcuNzkzNzczNzc1ODg5MSw2NDEuMzIzMTg5NzU4NjU1LDQ4MDEuNzU2OTA2NzE1MzY2LDQ0NjQuNzkzODkxNzkwMDQsMTkwLjUxMjg4NTY0NjgzNjIsNTQzLjIyNzcyODU5OTM5NjYsNS45OTIwMjI4MzQ5NzIzNzgsMTE3LjkxMTAyNDc2NjI5NTAxLDk5MzAzLjgyMTAwMjM5NTQ5LDE3MTI3OC45MTA1NDg3NzY1LDE2NTUzMi40MzAxNjIxNTY3Niw0NjY4Ny43ODI0NjkwNjYzMDQsMTM2MDE3Ljg1Nzk0NTk2MzE2LDg5OTQwLjMyNDAyMzcxMjcsMTMzODIyLjYxNzMzNzk2MzIsMTQ4NjE3LjY5NDk1Nzk5MjgyLDEzMS4yNzA0MDU3NTI5ODc5LDU4MzEuNzk1OTcyOTY3OTY0LDIxODEuOTE0NDQ1Mjg1MTMsMC4yMjk4MDE2NjM5ODU1NDY0NworMjAsU3VuIDEzIEZlYiAxMSwxMTAwMy4wODE2OTEwNzEzMiwxMDAwMi41MzcyMTE1NzkzNDUsOTEuMjAxMDcyODIzNjQyMDYsMjE3OS4zMzM1MTgyMjA0NjksOTIuMDAwMzg2MzA5NDgwMDksNjYwMi4xMTI1ODIxODQzOTcsNDg5LjI5MzUxMjc4NjE0NDIsOTIxLjE5NTA2ODIyNTk5OTksNjM4Mi4wNzU4NTczNTgzMTksNTkyOC4wMDA5MDgxMDkwOCwyNzEuODAyMjQ4NjM5ODQwMiw3ODQuMjI0ODUyNzg5NDQ2LDkuNTU1MDIzMTA1MDM3NTAzLDE3Mi45NTc4NDc4MjM3MzIxLDEyMTIxMS42NzAyNzE3MjkwOSwyMDYzNjEuNTYwNjY1NjY1MjUsMjAyMTE1LjQ4OTg1NjMzMzA2LDU3MDMxLjY2MTMyNzE4MzYsMTY2MTQ5LjMyNTA3NzU5ODE2LDEwOTc3OS4xNjkwNDU0NTk1NCwxNjM0NjkuMDU1NDUyNDI0MjUsMTgxNTQxLjY1MTQzMDY5NTE0LDE4OS43ODkxNDM0OTM4ODExNyw3ODEwLjE3NjY2NzQ3ODk2MTUsMjgxNi4yMTY3NzE4MDM2NDE3LDAuMzUzMjMyMjc0Nzk0MjA0MTYKKzIxLE1vbiAxNCBGZWIgMTEsMTM2NDMuNzY4MDE2NDQzMzIyLDEyNDIyLjIwNjg3NDU4ODM2NCwxMjcuNzc4ODEwMDQzOTEzMTgsMjc2Ni40NTYxMTI3Mzk3ODgzLDEyOS40Mzg5MzE3OTQyMjYxLDg3MjMuOTE3OTgwNDA2MzgsNzAxLjA3MDM0NjM1NDg2NDgsMTMwOC42ODIyMjkwMzQxMjc5LDg0MjcuMzg3OTY3Mjc0MTk3LDc4MjEuMDg1MjgwNjk1MzU3LDM4My41MzczNTE5MDk1MzYzNywxMTE5LjgwOTgwMTk1MzEwOTksMTQuOTU4NzQ3Nzc0NjcxMjQyLDI1MC45MDg0OTU1Mzc4MzYzNiwxNDY5MzQuNjQ0OTMwMzUxNzMsMjQ3NjUwLjE4NDg5ODM5NTYyLDI0NTA3OS4xMDI0ODIxODU1Miw2OTE4My43NjI0NjYxOTUyMSwyMDE1NDQuODU3MDg0MjkxNjQsMTMzMDczLjUxNDcwOTY4MDc1LDE5ODI5NS4yNDYyOTk4OTE1LDIyMDIxNy43ODA3NDM4ODQ1NiwyNzEuNDM5NTM1NTcxOTUxNiwxMDM5My43NjU5MDAyMzk4MzQsMzYwOS4wNTI1MDk0MDc3NTg0LDAuNTMzMTgzMTU0MzE5ODE1MgorMjIsVHVlIDE1IEZlYiAxMSwxNjcyMi4yMzk2NzU3NjM5NTgsMTUyNDIuNTkxMzYwNjQxNTgyLDE3Ny4yNDUyMTQxNTYzMDAwNSwzNDg3LjMzODY3OTA2NjAwNCwxODAuMzQ2MTI3NzM5NjExMzIsMTE0NjAuNTk2MjQ3ODk1NDEzLDk5NC45NTg3NTMyMzg1OTEsMTg0MS4xOTg5MzEzNDYzNDcsMTEwNjIuMTYzNTMyNzE5MTQ5LDEwMjU5LjczMzM5MjM2MDU0LDUzNi4wMDE5MzI5OTgzMDI4LDE1ODMuNjg5MDkxNTIzNzE2LDIzLjA0NTg4Nzc5MTU4MTkyNiwzNjAuNDU0NTc0NTI4MTEyOTcsMTc2NjgxLjcwMDc4NDc0MjgzLDI5NTc5MC42MDU4NTQwMTE0LDI5NDc3MC4wMDAzNDg1ODQ2LDgzMjQxLjM1MjQ0MzM5NzQ4LDI0MjQ4Ni4zMTE5NDA4OTA1LDE2MDAxMy4zOTYwODc3NjgzNCwyMzg1NzguNTg4MTkwNzY5MDUsMjY0OTU0LjAyOTIwODk5NTQsMzg0LjU0OTI0NTI3NzI3NzMsMTM3NTMuMjQxMTk3MzgwMjQ4LDQ1OTQuMDg5NDI0OTg2NTM1LDAuNzkyMjg4NjgzNjc3MzAxMQorMjMsV2VkIDE2IEZlYiAxMSwyMDI0Ni42Mjg2NTUwNTg4MjMsMTg0NjguNjY1NzE0OTkxMzU1LDI0My42NjIyMTA1NTk2OTMwMiw0MzY2LjM5MjA0NjU3MjY2MywyNDkuMTAwNjA2MDQwNTI4MzYsMTQ5NzQuODc1MDEwODYxNDk1LDE0MDAuMTIyNjUyOTEzNTMwMSwyNTY4LjEwOTI4MDQxNjA1OSwxNDQ0MC42MjE2NzQ1ODc1MTQsMTMzODcuOTA1NTc4NTQ0NTI5LDc0Mi42NjM1NTEyNjAzNzQzLDIyMjAuNjYzMDIzNzU5MzQ0NSwzNS4wMDc2MDc0NDk3NzE0OSw1MTMuMzQzNTM0NTU2NjgxMywyMTA0OTAuMDAwNTgyOTA0NywzNTEzMTUuMDk5Njg2NDE5MzYsMzUxMjQ0LjQ4NDAzMzk5Nzg3LDk5MjE4LjE4ODMzMjMxMTIzLDI4OTAxMi4xNjQ4ODAxNTY1LDE5MDYzMy41ODk1NTg2OTA5MywyODQzNTYuOTQ0MzIxMDM1NCwzMTU3OTIuMzA3NjQyNjY3MjYsNTQwLjIyODQ4Mzg0NTEyMjYsMTgxMDMuNTE1NzQwNjE5MTQ3LDU4MTAuMjM2OTY0NDk5NTczLDEuMTYxMzIwNTc0NjQ1NjAyOAorMjQsVGh1IDE3IEZlYiAxMSwyNDIwMS4yODQ2NTE2MTA0OSwyMjA4Mi42MjQzODA1NTYxMywzMzIuMjMxMjQ0Njc1MDg3ODUsNTQzMC4zOTExMzY1MDkxODYsMzQxLjM3NjI5ODY4NDYzOTQ0LDE5NDY3Ljc3NjczNzcyODIsMTk1NS4zMzk0OTEyNDgzMTIsMzU1NC4yMDY5NjA2MjE2NTk2LDE4NzUyLjI4MDc4OTE4MTk2NSwxNzM4My41NTExNTk3MjM1NTMsMTAyMS4wNjYxMjk4NzQzNDM4LDMwODkuOTkyODA3NTc4MzUsNTIuNTE1ODU1OTU2MDI0NjQsNzI1LjM3Nzc4ODkwMTc1NTgsMjQ4MTcxLjc4NzQ0Nzg2MTEzLDQxNDU2NC44MzU4NTYxNDU2LDQxNDE3OS4xNTY5ODc0NTAyLDExNzAxOS4wNTkxMjIxMzY0OSwzNDA4NDMuNTYxNDU5NzIzNCwyMjQ3NjUuNDQ2MjQxODMxNzYsMzM1MzU1Ljg1MDM0NDgwNzk2LDM3MjQyNy42NjY4NTM4MTY0LDc1My4yMzYzMTY1OTI3MjU2LDIzNzEzLjU5MzE5NDQ2MjE0NCw3MzAxLjYxODE4Njk4NzcyMiwxLjY4MTg2MDMwNjcwNjkwMzgKKzI1LEZyaSAxOCBGZWIgMTEsMjg1NDIuNjUyNzMwMjE2NTksMjYwNDAuNDAxOTk0NDkzNDIsNDQ5LjU1ODE2NDYxMTQ0MzAzLDY3MDcuODAzMjExNDY4NDExLDQ2NC40ODEwODA2NTg3NDg1LDI1MTg1LjU1NjM5MTExMTIxLDI3MTEuOTMzNDc1OTY4Nzk5LDQ4ODQuMDczNDI3Mjg3NzQxLDI0MjI3Ljc3NTczOTE0NzA1LDIyNDY0LjkxODcyNDQ5MDMyLDEzOTMuOTMzOTc1Mzg2MTE5LDQyNjkuNjgzMDU2OTY1OTc2LDc3LjkwMjMzNTY5NjQ4NDY2LDEwMTcuNzE0Njk3MTY0NTI5NCwyODkyODAuOTUzNzA2MDUwNCw0ODU2MDYuMTYxNjYxNDc4Myw0ODI4MTUuNTYxNjQxNDk5NjMsMTM2NDI0LjMxMDMwODczMTEsMzk3MzM5LjUyMzIyOTk3MTY0LDI2MjAwNi40NTc0MDYzNjA4MywzOTA5NDQuNDIzMTcwNzI0NjUsNDM0MTU5LjM1NTc4MjM1NDIsMTA0My4wOTU0OTA3NjUyMjUzLDMwOTE3Ljg1Njk5Mjc5NzIxMyw5MTE3LjA5OTQ4NjYwNDc3OSwyLjQwOTc3MTY0MjExOTc1MTMKKzI2LFNhdCAxOSBGZWIgMTEsMzMxOTguNzgyODgyMTgxMjM2LDMwMjcxLjg1NTI1MDkxMTIyNyw2MDMuOTUyNjQ2NTQ4OTA2OCw4MjI3LjY5MjE5NzE5ODQ2OCw2MjcuNzY0NTcwMzAzOTc1MywzMjQyNi45MTI2Nzc1Mjk1MiwzNzM3LjUxNTM1MzIyNTIxNiw2NjY3LjQ2OTIzOTkyNTM0OSwzMTE0NC41MjE1NDE0ODc4NDgsMjg4OTcuMjQzNzk2NTAxODk4LDE4OTAuNTE3NTY3NTQ0MjMyOSw1ODYxLjg3ODg4MjA3MzY1NCwxMTQuMzk5NDExNzAyMzAyMTksMTQxOC41NDc0NDYxMTgwNDg0LDMzMzExNC43MTAwOTE0NjY4LDU2NDE1My43MjIwMTY1ODUsNTU1OTY0Ljc5NjgyMzk5NSwxNTcwOTEuODYzMzAwNDg0LDQ1NzUwMy4xMjMzMjM0MTExLDMwMTcyMS41MDYxMDIwMDc3LDQ1MDE0MS40NTM4NDY5NjI1NCw0OTk4OTcuNjE1OTI3NzYxMSwxNDM1LjUxODg3MzAwNDg5MjYsNDAxMjguNjE3NTM2MDA3OTM2LDExMzA5LjIxMzY2NjgwNzAyNywzLjQxOTY4MTE3Nzc1OTg0NTMKKzI3LFN1biAyMCBGZWIgMTEsMzgwNzMuNjM4MDAyMjY2OTg0LDM0Njg1LjU3NzQwNTMxMjMyNCw4MDUuNzUwNjAzNjYyNjMzNCwxMDAxOC4xNTE5MTM0OTE5OTMsODQzLjA5OTE5NjAyMTkzMDMsNDE1NDkuOTM4NzAzNDMyMTEsNTEyMC43MDkyNTQyNzU2NSw5MDQ1Ljg5ODc3NTk4MDI4MiwzOTgzMS41NDU1MDg1MTIyOTYsMzY5OTkuNDE3NzcwNDE5MTQsMjU0OC4yMDMxNTIyMTAwMDM3LDc5OTkuNTkwODEyNzQ0OTE4LDE2Ni40NjI3Njk0MjM2MjM2LDE5NjUuMjYyNTI1NjA3MzEyLDM3ODc1OS43NTU4MTA3NDM5LDY0OTUxNy45ODAxMzQ3MTY2LDYzMjA4Ny42NTQwNTE0ODIxLDE3ODU4MS4wNTYxNTQxNjcxNiw1MjAwNTEuMTM3NTQyMTI2NiwzNDMwODQuMzcyMzY3MDgwOSw1MTE2ODMuOTk1MjY2MzA4OSw1NjgyMzkuODc1NDYzOTQzNSwxOTY0LjIyMjYwOTQ4MzM4ODIsNTE4NDkuNDczMjMxMDUyMTQsMTM5MzIuMzE5OTc0MTcxNzkzLDQuODEwNzExMjM1OTczODY2CisyOCxNb24gMjEgRmViIDExLDQzMDU2LjA2MTM4OTk5MzMyLDM5MTc3Ljk2NTkwNjkwMzU5LDEwNjcuNjM1NzA3MTA2MzkyNCwxMjEwNC4yODM3MDEwMzcxNywxMTI1LjQzMjM1OTA5ODMzMTUsNTI5NzcuOTYwNjU4NzgzNzMsNjk3Ny4wNjM1MjUwMDA2OTYsMTIyMDAuNDM5MDk3NzcyMDU0LDUwNjcyLjQ3MDM3NTY5MzQyLDQ3MTQ5Ljk5MDYyMjM3Mzk0LDM0MTQuMzg5MjcyMzUzMjQzNSwxMDg1NC45NTM5MzI3NTExNjgsMjQwLjIwMTIyNTA1MzY4NjAyLDI3MDcuMTg0NTY0MTkxMjU2LDQyNTE3OS43NjU3NjQ1LDc0MDU5NS41MzQzMDYwNjAzLDcwOTQ0NC4xMTA0NTc5NDE5LDIwMDM5Ni4yMjgyNTk5NTYzMiw1ODM1NDEuMDI4NjU0OTMsMzg1MTU2LjcwODA0Nzg0MTEsNTc0MTUyLjM4ODAxMTU3MDgsNjM3NjA5LjYwNzIyNjM3MTEsMjY3My4yMTMxMjk4MzkxNjcsNjY2ODguNjMwMzc1MjU5NDIsMTcwMzkuODkwMjUyNzM0MzIzLDYuNzEzNzM5Nzk2MzIyNjQzCisyOSxUdWUgMjIgRmViIDExLDQ4MDMxLjY1Mjg4MzkxMDk0NSw0MzY0NC42MjIxODYyMjg1NCwxNDA0LjkxODA2NzA3MTY3OTIsMTQ1MDUuODI1MzQ2MTc0ODcsMTQ5My4zOTY1Mjg5MTIzNjk0LDY3MjAyLjk5MTIwMzcyNzI5LDk0NTYuMzQyOTE5MDAwNDgzLDE2MzYwLjgxNTg2NTM3NDA1Nyw2NDEwNS4yMTA3MzI5ODA2Miw1OTc5MS41MTY1OTczMTIzNDQsNDU0OC41OTc2MDM3MDQzNiwxNDY0OS4xODEyNjk3NzQyODYsMzQzLjk0NTg0Mjk1OTI4NjksMzcwOS4wMzA1NzIyNTA4NDEsNDcxMzI2LjQwNTk1NjI3MjI3LDgzNTkxNS4yNDE0MjI4OTAyLDc4NjI4MS4yMDg4ODI1NDU0LDIyMjA0MC43OTkwMTYwMzIxNiw2NDY1MjguMjg3OTYxOTg3Nyw0MjY5ODguNDczOTQzNzA1OTYsNjM2MTI1LjE1MTM4NTA3MTcsNzA2NDI4LjMzNDIzNzM1MTIsMzYxOS42NDUzMzQ4MDQ3OTM1LDg1MzcwLjcyMDMzNjE1MTYsMjA2ODAuOTAzNzI4MDk3ODEsOS4zMDA0NzUxNjc5MDMwODYKKzMwLFdlZCAyMyBGZWIgMTEsNTI4OTQuNzAxNDI1NzQxMDcsNDc5OTEuMjU3NDYzOTUwNTg0LDE4MzUuNzAzNDQ4MjAzOTQ1OCwxNzIzNC42NDUzMDY3ODQ5OTgsMTk2OS45NDYzMjkxNjgzNzA1LDg0Nzg0Ljk5MjUxMjM3NTQ1LDEyNzUxLjM2ODg5NDkzMzQxMiwyMTgxNS41MDk1MzY3OTE5NTcsODA2MTYuNDY5OTY1Mzc4MDgsNzU0MzEuODAxNTUzNzAzNjQsNjAyNC43MjQzNTM2MTEzNzYsMTk2NjQuMjU2NzI5ODkyOTEsNDg4Ljk5ODM0OTkzMDcxNzUsNTA1NS4xOTc0MzU0NjgxMDQsNTE2MjQ3LjA2NTU0NDUwMzE2LDkzMzc0MS4xNzE0NjQyNDk2LDg2MTAxMy41NDA2Njg3MTYsMjQzMDY4LjUwODA3NjkzNjQsNzA3NzE1LjM1MzYyODk0NTMsNDY3NzE1LjYwNTk1MTkwMTgsNjk2MzI1LjU1MDMyNjAxMjksNzczMjc4LjM3Mzc0NTY5MjIsNDg3Ny4zNTQ2MDk0MDg3ODcsMTA4NzQ0Ljc5NTY1NTk0MDU0LDI0ODk1LjQ3NTEwNDMxNzEzLDEyLjc5NDYwOTAyNDk4MTI0MQorMzEsVGh1IDI0IEZlYiAxMSw1NzU1Ny4zODcyMjE5NTQwOCw1MjE0MS41NzE2Mjk3OTA5NiwyMzgwLjg1NTcxMTU2NDQyNDQsMjAyOTIuNDEyOTM0Mzg0NjI1LDI1ODIuOTY0NjQzNTM4NDY4NCwxMDYzNDQuNTI5OTUxOTkzMDYsMTcxMDguNDg4OTg0MTg3Mzk2LDI4OTIyLjMzOTUzMTY5Mzk1LDEwMDcyOC42NzE3MTYyOTM1Miw5NDY0MC4wNTU5OTQwMTMzNSw3OTMzLjI0MTU1NzYwNTk4NSwyNjI1Ni4xODY4NTg5MzU2MzUsNjkwLjYwNzM4ODIxODc4NTMsNjg1NC45ODkyMDg3MDU2MzMsNTU5MTY0LjU0MDc5ODI5MTMsMTAzMjIxNy45Nzc0MDI5NTQ0LDkzMjM1NC44Mjg1NTU2OTUxLDI2MzEyMC4wMzY2NDQ3MDY0LDc2NjA1Ny45MDcyNjU0Miw1MDY2MzIuNDQzNzA4NTExMyw3NTM3MjYuMTc1Mjg4NDMzMyw4MzcwMTguOTQ0NjkzMjAxNiw2NTQxLjE2MDQ2ODczNjMzNSwxMzc3ODUuMDQ2OTY1MDUwNTQsMjk3MTAuMDE4MTc3ODgxOTUzLDE3LjQ4NTIxODMzOTY2OTIxMworMzIsRnJpIDI1IEZlYiAxMSw2MTk1NC42NTUzNzM5MTI5NSw1NjA0MC44Nzc1NDY3NDkxNjUsMzA2My42MjIxMTQ4NjYzMjYsMjM2NjguODA4MTAzMTcwMzgsMzM2NS43NDEwMTQyMjQ5ODIzLDEzMjU0NS43OTk4MjgzODUyNiwyMjgzOS41NzkxOTk0ODkwNDYsMzgxMTguNDUwNzgxMzA0MDUsMTI0OTc2LjY5NDYzMDkxNzM0LDExODAzNS4zNTA5OTU4MTc3MiwxMDM4My4wMTM5OTA0MDc4MjgsMzQ4NjkuMjM0MjUzNjAwOTEsOTY5LjIyOTQ5MzQ0NDI0LDkyNDguODM5MDU3MjIzMDYyLDU5OTUxNS43ODg4NDQyNzMzLDExMjk1MzEuNDg4Nzk2MDk5LDk5OTM3OS44NjEzMDQ2MDQsMjgxOTM5LjQ0NzgyMTc2MzUsODIwODEyLjQ2MjIyNDc5NjQsNTQzMjI3LjE1Mjg3NzE1NzQsODA3NTk1LjcxNzk5MzM0MTksODk2ODM4LjA4NDE3MTAwMzMsODczMi4wMTYzNjkzNzMxMjMsMTczNTc5LjQwMzI4ODY1MzYyLDM1MTMyLjQzMDU1NTkwMDMyLDIzLjc0MjM3NTU4MjMyNzIyCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FnaW5nU0VJUkRpc2Vhc2VfRkRfUmVmZXJlbmNlL0FnaW5nU0VJUkRpc2Vhc2UvaHVtYW4wdG8wL1NfMi5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FnaW5nU0VJUkRpc2Vhc2VfRkRfUmVmZXJlbmNlL0FnaW5nU0VJUkRpc2Vhc2UvaHVtYW4wdG8wL1NfMi5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTRlYjYzNAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWdpbmdTRUlSRGlzZWFzZV9GRF9SZWZlcmVuY2UvQWdpbmdTRUlSRGlzZWFzZS9odW1hbjB0bzAvU18yLmNzdgpAQCAtMCwwICsxLDMzIEBACitpdGVyYXRpb24sdGltZSxFRy1GUkctRzIxMDAwMSxFRy1GUkctRzIxMDAwMixFRy1GUkctRzIxMDAwMyxFRy1GUkctRzIxMDAwNCxFRy1GUkctRzIxMDAwNSxFRy1MT0UtRzI0MDAwMSxFRy1MT0UtRzI0MDAwMixFRy1MT0UtRzI0MDAwMyxFRy1MT0UtRzI0MDAwNCxFRy1MT0UtRzI0MDAwNSxFRy1MT0UtRzI0MDAwNixFRy1MT0UtRzI0MDAwNyxFRy1MT0UtRzI0MDAwOCxFRy1MT0UtRzI0MDAwOSxFRy1VUEUtRzI5MDAwMSxFRy1VUEUtRzI5MDAwMixFRy1VUEUtRzI5MDAwMyxFRy1VUEUtRzI5MDAwNCxFRy1VUEUtRzI5MDAwNSxFRy1VUEUtRzI5MDAwNixFRy1VUEUtRzI5MDAwNyxFRy1VUEUtRzI5MDAwOCxFRy1VUkctRzMwMDAwMSxFRy1VUkctRzMwMDAwMixFRy1VUkctRzMwMDAwMyxFRy1VUkctRzMwMDAwNAorMSxUdWUgMjUgSmFuIDExLDExODAyOS42LDEwNTM4My4yMDAwMDAwMDAwMSw2MTM0MS42MDAwMDAwMDAwMDYsMTI2ODA5LjIwMDAwMDAwMDAxLDEyNzgyMi40MDAwMDAwMDAwMSwyMDY2Mjk5LjIwMDAwMDAwMDIsMjI0NTQ0NS4yLDE4NDAzNTYuOCwxNTk4NTM1LjYsMTk5ODU3Mi4wLDQwNTg1MS4yLDIzNzI1MzEuMiw0Njk1MzcuNjAwMDAwMDAwMDMsMTI0NjQ0MS42LDExMDI5NTAuNjg0MDAwMDAwMSwyNTMxOTE5Ljg1MjAwMDAwMDQsMTgzNDI3NS45Niw1MTU4NjYuNDI4LDE1MDE0MDUuNDg4MDAwMDAwMSw5OTk4OTQuMDYsMTQ3NzE1Ny4yMiwxNjQwMzQ1LjY1MiwxNDczOTc2LjAsMzM1OTg5Ni40MDAwMDAwMDA0LDIxNDI2Ni40MDAwMDAwMDAwMiwyNjgyLjgKKzIsV2VkIDI2IEphbiAxMSwxMTc0NjIuMjY0MzIwNDExNjYsMTA0ODgyLjMyOTE5NDk5MTE0LDYxMTc2LjcxOTQ4NDY4OTY4LDEyNjQyNS45ODMyNjIxMzE3OCwxMjc0NzguODI1Mjc3Nzg1MzUsMjA2MDY2OC40NjEwNjg3MDM2LDIyMzk0MDkuNjUyMTU1MTkyLDE4MzU0MTAuMDkyMDk2NDEsMTU5NDE2NC40NDAzMDA1NTMsMTk5MzEyOS4wNjM0MDUyOTY1LDQwNDc2MC4zMDk3MjMzMzExLDIzNjYxNTQuMDU2ODA3NjgzMyw0NjgyNzUuNTI2NjAzNzE0NzQsMTI0MzA5MS4yODA5MTI5MTY5LDEwOTY2NzkuOTg4MzI1NzgzNSwyNTE4NTcyLjIxMjA5Mzc0OTUsMTgyMzg1MC4xNTEwNTE1NzIzLDUxMjkzNi4xOTQ0NTkwODUwNiwxNDkyODcyLjE4MjYyNzg1NzcsOTk0MjExLjAyMjE1OTc0MTQsMTQ2ODc2MS44MDc4NzEzODc2LDE2MzEwMjIuNDAxNDE0Njg4LDE0NzAwMTQuMDg5NjA5MDksMzM1MDc4Mi44NTk4OTcwMDg2LDIxMzY0Mi4wMzQ2OTA3MDgxMywyNjc1LjU4ODg4MzEzMTkyOAorMyxUaHUgMjcgSmFuIDExLDExNjkyMi43NjYwMDM3NjQ5MywxMDQ0MDUuNjkwNjU2NDM3NTgsNjEwMTIuMjk3ODc0MTUwMjE2LDEyNjA0OC4yMTM0MDM1MTk2MiwxMjcxMzYuMjA2ODEyMTU5NzQsMjA1NTA2MS4zMDU2MzUxNDIsMjIzMzM5MC45MDI3ODgzMzMsMTgzMDQ3Ny4xNTIxNDk4OTMsMTU4OTgxMy4xMjQ0NzE3MTgyLDE5ODc3MDguNTkzNzExNDI1OCw0MDM2NzIuNDU1Njc0MTQ3OTMsMjM1OTc5NC42NjI4NDA3OTc2LDQ2NzAxNi45NjU4ODE0NTA2LDEyMzk3NTAuMjg2NjIzMzA5NCwxMDkwNzc2Ljc3OTc4NTcyNTUsMjUwNTk1Mi4wMjgyMTgzMzM2LDE4MTQwMzUuMTkwMTg3NjA3Nyw1MTAxNzcuNTQzNjk3NzM0MiwxNDg0ODM4LjgxNjg2MjU1Miw5ODg4NjAuOTQwNzAwMzc5OSwxNDYwODU4LjI1MjU1MzgxNzYsMTYyMjI0NS4zODUyMDgzMjMxLDE0NjYwNjMuMjA2MjMxMTQ1NywzMzQxNzAzLjE4NzAyNzY1OCwyMTMwMjQuNDEwNTA5NTIwMzMsMjY2OC4zOTc4MzY2NTE5NjU1Cis0LEZyaSAyOCBKYW4gMTEsMTE2MzEzLjY3NjY4MTk1NjI5LDEwMzg2NS44NDIzODU0OTEwMiw2MDg0OC4wMTk2MjMzMTgzNiwxMjU2NTguMTI3MDk1Nzk2NTIsMTI2Nzk0LjIzNjM4Mjc5NjI1LDIwNDk0MzYuMDIyODU0MzMyNiwyMjI3Mzg3LjU3MjU0MDEzMDUsMTgyNTU1NS4yMDEzNTUwMDgsMTU4NTQ0MS4yMTA3NDMwNzYsMTk4MjI3Mi42NTQzMjU1NjM3LDQwMjU4Ni43NTMwOTI2NTk3NSwyMzUzNDUwLjc1NzU3NDI0NjMsNDY1NzYxLjkwNzUzMjM0NjY3LDEyMzY0MTguMTg4MjYxMTQ3NiwxMDg0MjIyLjExMzY3MzIzNDEsMjQ5MjI5MC4wNTQ1MTA2NTE2LDE4MDMxMzUuMjQ5NTcxNDI2NSw1MDcxMTMuMjk5NDA1MDk4MiwxNDc1OTE0Ljc0NjA1MTkzNDgsOTgyOTIwLjkyOTcwMDA0MTUsMTQ1MjA3OC40MDkzNTUyMTcsMTYxMjQ5NS4xNzM0NjY4MTYsMTQ2MjEyMi43ODg5MDY5MzcsMzMzMjYxMC40Mzk2NjQ4OTg0LDIxMjM5MS44MzY3OTE1NDk3MiwyNjYxLjIyNjgwMTcwNDAxNjUKKzUsU2F0IDI5IEphbiAxMSwxMTU2MDUuNDkxNzI1MDg5MTQsMTAzMjM2LjM0MjU2NjU1ODUsNjA2ODMuNzkwODM4MTAwNTIsMTI1MjUwLjI1MzQ1Mzk3ODU4LDEyNjQ1Mi44MjEyMjY3NzE0OCwyMDQzNzc5LjgzMjg2MTkwMTUsMjIyMTM5OS4yMjAyNTI2MTczLDE4MjA2NDMuMzkyMzI4MDg4MiwxNTgxMDM2LjMxNTQzMjMzMDYsMTk3NjgwOS42MTI1NTc4MTcsNDAxNTAyLjkzNDk4MDk2NzYsMjM0NzEyMS42MzgxNjM2ODI1LDQ2NDUxMC4zNDEyODYyMzQ0NCwxMjMzMDk0Ljg0MDIxNDc0NzUsMTA3NjcwNC44MzY0MjUxOTgsMjQ3NzAzNy4zODQ2MzM4MjA1LDE3OTA2MzIuNTI1NzE4MzU3Niw1MDM1OTcuNzc3Mjk3ODEzLDE0NjU2NzUuNDI0MTk0NjE2Myw5NzYxMDkuMTU0NTYxMjcwNCwxNDQyMDA0LjYwMDUwODg3MjIsMTYwMTMwNy45MDQ4ODM5MTYzLDE0NTgxOTIuNjQ5NjA1MDYzNywzMzIzNDkwLjI0MDM2MzAwNiwyMTE3MzcuNjQ0NTM2ODA2MTgsMjY1NC4wNzU3MTk2MDczNTQKKzYsU3VuIDMwIEphbiAxMSwxMTQ3NzAuNDczMDEyMjIzMzMsMTAyNDkxLjc2NjQ0NjMwMDcsNjA1MTkuMzk2NDgxMjMwNDEsMTI0ODE5LjMxMDEwMTU1ODg4LDEyNjExMS43NDYyNTM5NzcxNSwyMDM4MDc2Ljg4NTkwOTgwMzQsMjIxNTQyNC43NDU3MDA5MzgsMTgxNTczOS42MzQ5MzU3NjgzLDE1NzY1ODMuMTAyMDU1NzUyOSwxOTcxMzA1LjIzODI5NjkxMTYsNDAwNDIwLjM3MjEyMjY1NDg3LDIzNDA4MDUuNTQzNDcxOTQ5LDQ2MzI2Mi4yNDQ0NDk2MzY5LDEyMjk3NzkuODYzMTc1NTEwMiwxMDY3OTUwLjQ5OTk1NjIxNiwyNDU5NzY1LjExMjM1MTE1ODYsMTc3NjA2OS4wNzgzNjA1NTIsNDk5NTAxLjYzODY4NTc5MTIsMTQ1Mzc0My45NzQ2NjYyOTM3LDk2ODE3Ny4xMTQ1NTY3OTk2LDE0MzAyNjYuMDM1NjA5ODQ0OCwxNTg4MjcxLjc4ODk3MDc3NywxNDU0MjcyLjM0NTM4ODYxNTUsMzMxNDMyMy45NTU3ODg4OTksMjExMDU0Ljk4ODk4NjQ2ODksMjY0Ni45NDM4OTAzNzQzMzAzCis3LE1vbiAzMSBKYW4gMTEsMTEzNzc0LjYwNjUzMjk0NjM2LDEwMTYwMC42Nzg1MjAwMTMyMSw2MDM1NC41MTEwOTczMjYyNSwxMjQzNTguNjgxNDkxNTk2NjIsMTI1NzcwLjY4NTg4OTA2NzE2LDIwMzIzMDUuNzIzNDMzMDU5NiwyMjA5NDYyLjQ4MDMxNDMxNCwxODEwODQwLjc0NzQxMDQ0MjQsMTU3MjA2MC44MTM1NTI3Mjg0LDE5NjU3NDAuMzM1MjU2NzIxLDM5OTMzOC4xMTA0Mzc3Mjk3NSwyMzM0NDk5Ljc5MzQyMDUwOTQsNDYyMDE3LjU4NTc5NzI3OTQzLDEyMjY0NzIuNjgyMzkxNzEzNCwxMDU3NjMyLjU2NjgzODYyMDIsMjQzOTk4OC45MTc0NTkxMjk0LDE3NTg4OTkuNDgwODU2ODAyNSw0OTQ2NzAuNjAyNTY0NTM2MTUsMTQzOTY3MC44NjUzOTI4MzUzLDk1ODgyOS4xODI1OTk2MTE5LDE0MTY0MjAuNDM3MTM4NjIzMywxNTcyODk1LjY0MzQ4NTgwMDQsMTQ1MDM2MS4yMTIzMDk5MDI1LDMzMDUwODYuMDgzNzA1MTI3LDIxMDMzNS4xMDkxNDA2MTkzLDI2MzkuODMwMTczMTc1MDMyCis4LFR1ZSAxIEZlYiAxMSwxMTI1NzYuNzkxMDA4OTgzNTYsMTAwNTI0Ljk2MzU4MTI0OTUzLDYwMTg4LjY4Nzk5MjkwMDQ2LDEyMzg2MC4yMjA3NjkzOTMyNiwxMjU0MjkuMTkxNzQxNjU3ODcsMjAyNjQzOC42MzMxMjM3ODM0LDIyMDM1MTAuMDg2MjU5NDczLDE4MDU5NDIuMjk3NjM2MjI3NCwxNTY3NDQyLjY1NjM1OTk4NTUsMTk2MDA5MC4xNjA5NTQ0OTUsMzk4MjU0LjgzMTU0MzE0NzcsMjMyODIwMC42Mzc5MjU4Mzc3LDQ2MDc3Ni4zMjAwNDIwMzg5LDEyMjMxNzIuNDgzMTM5ODY0MiwxMDQ1MzYxLjEzMzEyNzU3MTQsMjQxNzE0Mi4xOTQyODcxMTQsMTczODQ3MS45ODQyNzE5ODYsNDg4OTIwLjExODk5MzczMDUsMTQyMjkxOC40MTE3OTQ1OTEyLDk0NzcxMi4zODIwODcxMjkzLDEzOTk5MzguNzg3Njk5OTYsMTU1NDU5MS45NTY5MDQ4MjI3LDE0NDY0NTguMzI3Njk4NTg4LDMyOTU3NDMuNDMyMTI4NzcxLDIwOTU2Ny4wODQxMjQxMTkzNywyNjMyLjczMjg1ODI0MTcyMjYKKzksV2VkIDIgRmViIDExLDExMTEyOC41MTU0Mzk1NzcyNyw5OTIxOS41MjYxMTM3NzQ0NSw2MDAyMS4zMjY3ODM4MDU2NTYsMTIzMzE0LjA3NzU4NzA5OTkyLDEyNTA4Ni42NTgyODA0NjY1NywyMDIwNDQwLjQzMzAwOTM3MTksMjE5NzU2NC4zMzM2MDA3MDYsMTgwMTAzOC4yMTc0MTQ4MzIyLDE1NjI2OTQuNjM3MjQ5MTczNiwxOTU0MzIzLjM2MDg3MTc0OSwzOTcxNjguNzQ3Nzg2NzI0NSwyMzIxOTAyLjkxMTA0MDQ4OCw0NTk1MzguMzc5Njg3ODE3OCwxMjE5ODc4LjEyMjE5NzQ0NSwxMDMwNjc5LjI0MzAyOTc0NzMsMjM5MDU2OC44MDk3NzU0MiwxNzE0MDIyLjE2NjgyNTg0MzcsNDgyMDMzLjQ5MzkxNTg5MzU0LDE0MDI4NTUuMzQ4Mzc1NjA4Nyw5MzQ0MTMuMDQ4NDAyNzU2NiwxMzgwMTk5Ljk4MTU2NTIxNTYsMTUzMjY3MC45NTA2ODc0MDIyLDE0NDI1NjIuNDI1NDE1NzU2OSwzMjg2MjUzLjUwODIxMjEwODYsMjA4NzM3LjU1MDY2ODk3ODg2LDI2MjUuNjQ5NDE3MTQzMzI4NworMTAsVGh1IDMgRmViIDExLDEwOTM3My4zODYxMjc0MzE1Niw5NzYzMS44NDAzMDIyOTYwNiw1OTg1MS42MjQ1NTc1NTYyNiwxMjI3MDguNDEwMzUwNjE2OTksMTI0NzQyLjI3MTQ0NjU0MDEsMjAxNDI2Ni41NjkzMDMzNzc1LDIxOTE2MjAuNzc0MzM5ODUzMywxNzk2MTIwLjIzNDMyMjE4NjMsMTU1Nzc3My43NDI3MDE1NTQ3LDE5NDg0MDAuMjk3NDg3ODcxNywzOTYwNzcuNDQ1ODA0MTkwNCwyMzE1NTk5LjUyMzk0ODA1Niw0NTgzMDMuNjYzNTA3NTUwOCwxMjE2NTg3Ljk5OTcxNjczNCwxMDEzMDU4LjkzNTcyMjgwMTMsMjM1OTUxNS43MjY0NzA4OSwxNjg0NjY2LjA5ODkxNjczNjQsNDczNzU5Ljg2MTUzNTExNDY0LDEzNzg3NTAuOTY4MDI3OTI5Myw5MTg0NTMuMjQ1MzQ0OTU4NywxMzU2NDg1LjA0OTEwMzM4NiwxNTA2MzM0LjE2ODAxODU4ODgsMTQzODY3MS43NzE1NzU1ODM0LDMyNzY1NjIuMDI0OTk0Njc5NywyMDc4MzAuMjM2Nzc2NjQzNzUsMjYxOC41NzYxNTQ4MjE1MTgyCisxMSxGcmkgNCBGZWIgMTEsMTA3MjQ2Ljc1MDcyNDA1MzkzLDk1NzAxLjYwNjAyNTY3NzE2LDU5Njc4LjUwOTcxNDA2MDEyLDEyMjAyOC45OTM0MTYwNjA1LDEyNDM5NC45Mzg3Mjc4MjUyNywyMDA3ODYwLjUyMTUwNTExODYsMjE4NTY3My4yOTMyODg3OTU3LDE3OTExNzcuMDk0OTIwMDE2MSwxNTUyNjI1LjQ1ODc0OTQxNTQsMTk0MjI3MC43Njc1MzY4MzUzLDM5NDk3Ny42NzMxNjg1MDMzLDIzMDkyODAuNzY4NzEyNTQ4LDQ1NzA3Mi4wMTk5MzY3NjI0LDEyMTMyOTkuODgxMzIwODc1OCw5OTE4OTguODM1NDE5MDk1NiwyMzIzMTI0Ljk5OTc0MTI0MywxNjQ5Mzk2LjA5NjA5MjkxOTgsNDYzODEyLjg5MjM0ODYzMzI2LDEzNDk3NzEuNDIxMjY2MzQyNyw4OTkyODguNTY5OTM5NTYzMywxMzI3OTczLjUwNDEyNTYwMTgsMTQ3NDY3MC40MjE1MTc3NTI2LDE0MzQ3ODMuOTkzNDEyMDY2LDMyNjY1OTkuNDk1Nzg1OTg2LDIwNjgyNS4zMjY0ODYxNTQzLDI2MTEuNTA3NzMzMTAzOTQzCisxMixTYXQgNSBGZWIgMTEsMTA0Njc1Ljg1OTc0Njc0NjQzLDkzMzYwLjkzODg3MTQ1Nzk1LDU5NTAwLjU1NTE5ODY4Mzc5LDEyMTI1OC43NDM3MTIwMzE4LDEyNDA0My4xOTY3OTA2NjMyLDIwMDExNTAuNDYwMjgxNTUxMywyMTc5NzEzLjUwMjIxNTc5NSwxNzg2MTkzLjUyODI3MzQ2MjgsMTU0NzE4MC41ODQ3Mjg4MywxOTM1ODcxLjA2MDUzNDUxODQsMzkzODY1LjA1NTQzNDU0NiwyMzAyOTMzLjM4MzI2MjUwNTMsNDU1ODQzLjIyMzM0NDIxOTIsMTIxMDAxMC42NTUzODE4NTk3LDk2NjUyNy4zMjYzNDQ0MjQ1LDIyODA0MjguNDgzMDI3Njk3NSwxNjA3MDg1Ljg3NDQxMTcxOSw0NTE4NzIuMTg5NDE3MDE3NSwxMzE0OTgzLjg2ODU5MzczOSw4NzYzMTAuOTk4MTk4MDQwOSwxMjkzNzQ3LjQxNjE4Nzk5NzQsMTQzNjY2MC4zMjE4OTgzNDI4LDE0MzA4OTUuODQ4NzMwNjU4MiwzMjU2Mjc2LjgxNDEyOTE0MjYsMjA1Njk4LjY3ODg5OTQzNywyNjA0LjQzNjUyMjM1OTQwOTUKKzEzLFN1biA2IEZlYiAxMSwxMDE1ODEuMTM3MjEwNjQ3ODEsOTA1MzUuNjQ5MzY0MjIyMDQsNTkzMTUuODY2NTA5OTA4OSwxMjAzNzcuMTkyNzQ3NDYxMDEsMTIzNjg1LjA5MTIxNDU1NjkzLDE5OTQwNDUuMDYxMzMwODM0NCwyMTczNzI5LjkzMTk5NTExMTUsMTc4MTE0OC44ODA0MDY5NDg1LDE1NDEzNTEuMjU2NTA4ODQxNiwxOTI5MTIwLjI3MzYyNjI5OCwzOTI3MzMuNzI1OTcwNDU1ODUsMjI5NjUzOS4zMTA2ODgzODIsNDU0NjE2Ljk0MDQ5MjQyMzYsMTIwNjcxNi4wMDU0NDkxNTU2LDkzNjIxNi42ODk3MzAxNDYxLDIyMzAzNDkuODk5MzU3NTUxLDE1NTY1MTQuMjAxMjc5ODc2LDQzNzU4OS45ODkwMTU4NjEzNiwxMjczMzc2LjEwOTcyODAwMDQsODQ4ODYxLjYzMTQ0NTI3NzQsMTI1MjgxMC43MTA4MzI4MTQ3LDEzOTExOTcuNzIwNjA5Njk4LDE0MjcwMDIuOTE4OTI4MTc4NywzMjQ1NDc5LjY1NTU5NDY5NTQsMjA0NDIwLjkyMjk2OTgwNTU3LDI1OTcuMzUxNzI1ODkyODYKKzE0LE1vbiA3IEZlYiAxMSw5Nzg3OS4yNzcwNjE4NzY5Nyw4NzE0OC4zMDg0ODMyNzczMyw1OTEyMS45Mzg2MjY1NzIxODQsMTE5MzU5LjkzNjYwNDYxOTg4LDEyMzMxOC4wMjEyNzcxNTQ0MiwxOTg2NDI4LjM0NzA1NDIyMjQsMjE2NzcwNi45NjMwNzQ0OTMsMTc3NjAxNS4zMjkzMDE5NDcsMTUzNTAyNi4wNjkyOTI3MzY3LDE5MjE5MTUuNzY4OTA0MzUxLDM5MTU3NS44NDU2Njg2NjI3NSwyMjkwMDc0LjA2NTAzNjc5Miw0NTMzOTIuNjgzNTQ4NDY1NjYsMTIwMzQwOS45NzEyOTAxMyw5MDAyMTQuODkxNTU2ODA3NywyMTcxNzIwLjEwNTUzNTY3MzQsMTQ5NjQxOC4zODgzNzI0MzQsNDIwNjA2LjQ0NDE1MzI0MDgsMTIyMzkwMS4yMzY5MTc5OTU0LDgxNjI1OS4zODg5NzY3MDE0LDEyMDQxMzMuMDk1NTU3NjI1LDEzMzcxMzguNTAzNTAxNTMzNSwxNDIzMDk5LjIwMzEyMjY5NTQsMzIzNDA2MS40ODQ1Nzg1MTU0LDIwMjk1Ni40NTU2OTA3MzU4LDI1OTAuMjM4MjA1MDY5NjMxCisxNSxUdWUgOCBGZWIgMTEsOTM0ODkuMDA3NzYwNjIyMDQsODMxMjMuOTE1NzM1NDA4NDIsNTg5MTUuNDc0NzU2MDQ5MTcsMTE4MTc4LjExMTE2MDQxOTcsMTIyOTM4LjU0MDk0ODkxMzA1LDE5NzgxNTMuNDA4NjQ2OTA3LDIxNjE2MjMuNDE2NjU2MzY5LDE3NzA3NTUuNTY0OTkwNDYyLDE1MjgwNjQuMTc5MDA0MjI5NCwxOTE0MTI3LjY0MDUzMjgwMzcsMzkwMzgwLjk4MzUyMTYwOTYsMjI4MzUwNC41OTAxOTczNzc0LDQ1MjE2OS43NDQ3MjgwOTc4LDEyMDAwODQuMzYzNzE3MTI5LDg1NzgwMi43MTA3Mjc5MTAyLDIxMDMzMTIuNjg0NjQ5NTI1LDE0MjU1OTAuNzA2NzgzMDc1MSw0MDA1NzcuMjg0NDAwNjMzMiwxMTY1NTU4LjM0ODAyMjE0Nyw3Nzc4NTIuNjAwNDYwNzk4NywxMTQ2NzI5LjQ3NjkyODk0OTEsMTI3MzM4OC44MDE2ODg4NDM0LDE0MTkxNzYuNTg0MTczMTg2NCwzMjIxODM0LjkwNDc0MjcyNDcsMjAxMjYyLjM4ODMzMzU2MjYyLDI1ODMuMDc0OTExNDMwNzAyMworMTYsV2VkIDkgRmViIDExLDg4MzQwLjM3ODE1NjcxMzM3LDc4Mzk4Ljk4NDI3MDcyODQ2LDU4NjkyLjE1ODY0MTkyNTc0LDExNjc5Ny45NjM0MDE1NTUxMywxMjI1NDIuMTA1MjgzNDA1MTIsMTk2OTAzNC44NTgzNjUxMTU1LDIxNTU0NTAuNzA2ODIxODAyLDE3NjUzMTkuNzg5NzYyMTMxLDE1MjAyODguMjY5OTA3MjExNywxOTA1NTkyLjA1MzQ2MDUwMTQsMzg5MTM1LjMyMjA2NDI3MjQsMjI3Njc4Ni40NjczNTQ2NjMsNDUwOTQ3LjEwNTk2MTAzOTk1LDExOTY3MjcuOTg3OTA5MzMxNSw4MDgzODMuNjcxMDEzNzA3MywyMDIzOTA4LjE1MDkzMzMxMDQsMTM0MzAzMC40NDk4NDE5NzMsMzc3MjE3LjU1NDY2NzQ2OTksMTA5NzUyMC4wNzA4NDQyNTQyLDczMzEwMC4yNTQzNTYyNTEsMTA3OTc4NS40NTgwNzYwMzEsMTE5OTA0NC4zNzc1ODY2MSwxNDE1MjI0LjEyODk4MTEyNzQsMzIwODU2MS4wNTk0MTM2NDA4LDE5OTI4Ny41MTUzMTQyMzA0MywyNTc1LjgzMjgwNDM2ODQxMDUKKzE3LFRodSAxMCBGZWIgMTEsODIzODguMTQ4OTQwMTExMzgsNzI5MzQuNTY3MjUyMDI0NzIsNTg0NDYuMzcxMjgxNzAxOTI2LDExNTE4MC42MjI2MjI3NTUwNSwxMjIxMjIuNzQ5Mjg3OTA3ODUsMTk1ODgzOS44ODI3ODg1MzI2LDIxNDkxNTAuNDI2NTE0MDY1NCwxNzU5NjQxLjg1OTI2NDczNiwxNTExNDc2LjMxMzU3MDI1NTIsMTg5NjEwMy4zMjkwMDg1Nzc2LDM4NzgyMC42NDM4OTc3ODYxNSwyMjY5ODYwLjI4ODkyNzI5OTQsNDQ5NzIzLjMxNDcyMDg4NDk2LDExOTMzMjUuNjE2NzU0MDExNSw3NTE2MTEuMjI3NjgyNjM2MiwxOTMyMzk1LjMxNzg4NzIxNjMsMTI0ODE1OS4yNTAzMDk3MzgsMzUwMzYzLjY1MzUxMDgxNjQ1LDEwMTkzMTMuMzA1MTI4NDU2OSw2ODE2ODYuOTUwMjAxMzc0NCwxMDAyODM1LjIzMjU1MDYwMDksMTExMzU4OC4xOTU5MjIwODgzLDE0MTEyMjcuMTc1MDcyODI5LDMxOTM5MzYuNzc1NTUxNTg1NSwxOTY5NzEuNDI1MTkxMTkxNTgsMjU2OC40NzIwOTgwMDM4NDQKKzE4LEZyaSAxMSBGZWIgMTEsNzU2MjkuMDk4MzA3MzQyMTgsNjY3MzIuOTQzNTAwNjA2NDIsNTgxNzAuODQyNjQ5MDc5MzA2LDExMzI4Mi4yMTYzNzkwOTY1MSwxMjE2NzIuNjg0Mjg0MDM0MDEsMTk0NzI3Ny44MjQ4MjIxMDU3LDIxNDI2NzEuMjA3MDE5NDQ2LDE3NTM2MzQuMzQ2OTAyODczLDE1MDEzNTIuMTI0NTYzNjE2NSwxODg1NDA0LjY5NDQ3MjA1NTksMzg2NDEzLjA0NzI1NTM2NywyMjYyNjQ2Ljk3MjQxODE3MjgsNDQ4NDk2LjMxNDIwMjE0NjE0LDExODk4NTYuNjM5MjU5MTA1OCw2ODc1NDkuNzkxMjE1MDQ5MiwxODI3OTE2LjU4MDA1OTg3NzEsMTE0MTA5My44MTIyNTE2OTcsMzIwMDUxLjk2ODE1Nzk5MTM2LDkzMTA0OC4xMjg5ODU4OTg5LDYyMzY2OC41MTMxMTMwNzMsOTE1OTg2LjkxMjEyNTU0NSwxMDE3MTQwLjY2MDg5NzE5NzIsMTQwNzE2Ni4xNDI2NzI3MzgsMzE3NzU3OS4xNjQ2OTU3NzIzLDE5NDI0My45MzQ0ODAwNDEzLDI1NjAuOTM4NjM3MzcyMjQyCisxOSxTYXQgMTIgRmViIDExLDY4MTIxLjU0NzUwNjcxMjQyLDU5ODU2LjE0NzIyODQ1NTc3LDU3ODU2LjIzMDAwMTMyODk3LDExMTA1NC41MjEwMDk0MTA3LDEyMTE4MS43OTUwMzMwOTg2MiwxOTMzOTg4LjMzMjI2MDAwMDMsMjEzNTk0NC42NTA4NDM4ODY3LDE3NDcxODIuMjczNTE3OTQ3OSwxNDg5NTc0Ljg2MTE1MzM5NjMsMTg3MzE3Ny42OTc0OTE2MjYsMzg0ODgxLjMzMDY3NDYyNDY1LDIyNTUwNDEuNzM2NTIwNDMwNSw0NDcyNjMuMjEyMTQ2MjMzNywxMTg2MjkzLjI4ODc5OTc2ODMsNjE2ODUxLjYwMjU2NjU5NzQsMTcxMDA1OC4zNTg3MDM0NTg0LDEwMjI5NDUuMjY1Mjg2NjY2NiwyODY2MDUuMTAwMDI5Mjk5OCw4MzM2NjguNTI0OTgxNjUxMiw1NTk2MzIuMDg3ODQ4MTU2Miw4MjAxNjkuMzYzNjkxNjYwOCw5MTA3MzMuNzE3NjQwMzY3MywxNDAzMDE0Ljk5NTk1Njg4MjEsMzE1OTAwNy40NjY4MDU2MjM0LDE5MTAyNS4xMDEwMjU3NTc0NywyNTUzLjE1OTE1MDcxNjg2OAorMjAsU3VuIDEzIEZlYiAxMSw2MDAwMy4xNTM5MTE2MTk3Myw1MjQ0Mi4yNzA0NTY5MTI2Miw1NzQ5MC42MTc1NTU3MTc0NywxMDg0NDYuMzc1NTU3MDg3NzcsMTIwNjM3LjAyMDA1OTk2Nzc4LDE5MTg1MjguMjk3MTE0NTE1MiwyMTI4ODgwLjA5MTg2NDI4NCwxNzQwMTM1LjIwNjUxODkxMDYsMTQ3NTcyNy44NTA1NzI5NDgzLDE4NTkwMzAuNDI5MjExMTE0NSwzODMxODQuOTgwODk2NTM3MSwyMjQ2OTA2LjQwNjE1OTMxNzYsNDQ2MDE5Ljk2NzU3MTAxODMsMTE4MjU5OC4zMzE0ODQyNTE3LDU0MDkxMC40MjEzMjk2MDc3LDE1NzkwNzcuMDA4ODg2MjEsODk2MDc4LjI3MTk1NTQzMjcsMjUwNzA2LjEwOTEyNzAzMzM2LDcyOTE2Ny44MzMwMzk3NjIxLDQ5MDgzNS41MTQ3MDk0ODU1LDcxNzM0NC4zNDkyNzkyMDEsNzk2NTQ2LjM4Njk4MzkxNzMsMTM5ODczOS4yNTg3MTAwOTEyLDMxMzc2MjIuMDc3ODI0MzgxLDE4NzIyNi4xNTc1NzgwMjM1LDI1NDUuMDM1MDYxMDY0OTE4NAorMjEsTW9uIDE0IEZlYiAxMSw1MTUwMC40OTI5NDY4MjQ2Nyw0NDcxMy4wMzg5Nzc3MTUwOCw1NzA1OC45MzkyMTc3MjU5NiwxMDU0MDYuMTAzMTkxODc3ODMsMTIwMDIxLjU5ODU2ODA0MiwxOTAwMzU4LjEwMTU5ODQ0NzQsMjEyMTM1Ny44ODU3NDYyMzgzLDE3MzIyOTcuNDA2MjI0MTUyMywxNDU5MzA3LjQ2OTMwODAzNDUsMTg0MjQ4NC45MjU0NjQ3NTc3LDM4MTI3MS42OTY5MjYyNTM4NSwyMjM4MDU5LjY1NzY3OTk3NDYsNDQ0NzYwLjk2ODE1Mzc0ODEsMTE3ODcyMi4wNjYyMzc0OTY0LDQ2MTkzMC42OTU3OTI0NDc4MywxNDM2MTMzLjEzNDA3NTMyOTksNzY0MjI0LjkyNjQ3MjUyMTksMjEzNDMwLjA5MzMyNzk2MjIsNjIwNjc5LjU4MTQ4NzIxODMsNDE5MjcwLjYwODkzNDc0MzMzLDYxMDU5NS45ODgwNjQ2MzE1LDY3ODAwNC4wMjE0MDM4Nzk5LDEzOTQyOTMuNDY4MjI5NTQ1LDMxMTI2ODAuOTgwNjAwMTA0LDE4Mjc1MS43ODE0MzQ5MDU1NywyNTM2LjQzNDQ2NzA3NzI3OAorMjIsVHVlIDE1IEZlYiAxMSw0MjkyMi40Nzg0MDA5Mjg4MSwzNjk2NC45Njg4MjAxMjE5OSw1NjU0Mi4zMzg3NjIzMjE1MywxMDE4ODUuMTQ4ODI1ODg0NzgsMTE5MzE0LjE3MTUwMjA2ODIzLDE4Nzg4MjguMTE3OTg4NjA3MSwyMTEzMjIwLjg4MTQ1NTg2NywxNzIzNDE1LjY5NzUwMzg4NjQsMTQzOTcxMy4zMTMyNzM2NTQ2LDE4MjI5NjQuNDQ5MTA5MTgwOCwzNzkwNzQuMzkxNDA4NDEyMzcsMjIyODI2NC43Njk1NjQ1NCw0NDM0NzguNDYyNzI0NDgzNzUsMTE3NDU5OC40NTU5ODA2NTYsMzgyODQwLjI4MDcxNTQxODcsMTI4MzQ4NS4wODQ0MDU0ODU1LDYzMjMzMC43OTMzNDg2OTg0LDE3NjE5Ny40Mjg4Njk2MzYwNiw1MTIzNDAuMDI4MjkzNDQyLDM0NzU4NS4yNjMwNjE0Mzg4LDUwMzk5NS40NDIzODI4ODgsNTU5NjI3LjkxMDA2Nzk3MjQsMTM4OTYxNy45Mjc0ODY1ODc1LDMwODMyNzQuMjU4MjUzMzgsMTc3NTA0LjE1Mjc5ODA1MTYsMjUyNy4xODE4MjM3Mzk1ODkKKzIzLFdlZCAxNiBGZWIgMTEsMzQ2MzEuMzE2ODkxMjA0NTIsMjk1MzguNTM0ODg5MTk3ODE3LDU1OTE3LjUwMzI4Mjk3MDI1NCw5Nzg0My4wMjIyNzUxNzYwNywxMTg0ODcuNzMzNzc4NTE4MTIsMTg1MzE2Ny4wMTkzODAxNTYyLDIxMDQyNjMuNjc4NTUyODg4MywxNzEzMTY0Ljc5NzI0NTcwNTcsMTQxNjI0MS41ODMyNTE3Mzk0LDE3OTk3ODEuODMwNDg0OTYyMywzNzY1MDcuNjM1NDUzMTY0NywyMjE3MjE0LjQyNDkyOTQ0NDcsNDQyMTYxLjgwMjkwMTk2NjMsMTE3MDE0MC4xNzU1MDIxMDMzLDMwNjk5NC43NjQzMjMyNTU3NSwxMTI0NTcxLjcyMTMzNzMwODksNTA2MDQ1LjgwMjg5ODgxNDIsMTQwNjIzLjc5MTIxNDg1MDkzLDQwODg1MC40Mzc4NTUxMjg5NiwyNzg4MTcuMTQ4NDQyMDQ5MSw0MDIxNjkuOTM0ODU2NjYxMiw0NDY1NTYuNTQyMDM0ODYwNiwxMzg0NjM0LjU5MDUwNDQyNjcsMzA0ODI5OC4wODYwODE1ODQ0LDE3MTM4OS4yMDg4MzMzNTg0MywyNTE3LjA0NDc3NTcyNzkxMzUKKzI0LFRodSAxNyBGZWIgMTEsMjY5OTEuMTU0MzkwOTcxNjk3LDIyNzY2LjczNzc0MDI3MDgyMyw1NTE1Ni4wMzk0MTIxOTExMTYsOTMyNTMuNDA0MDE5MDI2MzUsMTE3NTA4LjQ1MjQ3MjUxNDUsMTgyMjQ3NC4yODgzOTc1Mjk5LDIwOTQyMTkuMjQ4Mjc1Njk3NywxNzAxMTI5Ljk3Mjk1MTY0MSwxMzg4MDg0LjUxMDQzNDczOCwxNzcyMTMwLjY5NDI5MDg3NzYsMzczNDYzLjU2NjAzNTg5NTIsMjIwNDUxMi4xNDg3MTkzMDgsNDQwNzk2LjQzNTA0MTE5NDQzLDExNjUyMzIuMzMwNTIyODgxNCwyMzc2ODUuNzE4MTI4MDM1Niw5NjM5MDcuNTAyMjM0NTE5OSwzOTA4ODQuMjgxMjMyMjQzMiwxMDgyNzUuMzExNjMzNjkwMDcsMzE0NzY0LjA0NDE1NjcwODMsMjE1OTQ5LjYzNTgyMDg4MjIyLDMwOTYwMC42NzQ4MzQ3NDgwMywzNDM3NjUuODgyODYzNDgyNiwxMzc5MjQxLjg5MjEzNjUyMzUsMzAwNjQzMC42NzY0OTE1OTY3LDE2NDMyNS4zMTk5NTkzNDg2NSwyNTA1LjcxNzUzNjE2MDE0NTgKKzI1LEZyaSAxOCBGZWIgMTEsMjAzMDUuMDA0NjcyNjUyNzEsMTY5MTQuOTExNTAxNDMzODcsNTQyMjQuMDExNjY2MzQxNDcsODgxMTAuOTIwOTY0NDg0NTcsMTE2MzM0LjM5NTk4MzA3MTYsMTc4NTcyMC40MDIyNjE3MTksMjA4Mjc0Mi41MTI1MzMwNTM4LDE2ODY3ODcuMjA2MjU2MzgyNiwxMzU0MzM5Ljc1NDEwMzEwNjQsMTczOTA4Mi4yNzUwODUyMDgsMzY5ODA3LjM3MjU1MzgzODIsMjE4OTY1MC4xMDI2MDAwNzcsNDM5MzYyLjU2ODIwODk5OTksMTE1OTcyNC41ODIxODAxMDg5LDE3NzU2MS45NzM0MDUzMjk1Nyw4MDY3MzUuMDIyMjg0MTg1NCwyOTEyNDQuNjk5NTIyNDIyOCw4MDM4Ni4wNzY4NjE2ODU3LDIzMzY2NC42OTE2NjkwOTEzNSwxNjEzODguMDAyNzI1Njk2NjMsMjI5ODE0LjE5MDQ5NzYxNTc1LDI1NTE3MS4zOTcwMzQwNzQwNiwxMzczMzA4LjMxNTU0NzQyOTcsMjk1NjExNC4yMjgzNjExNTg2LDE1NjI1NC4yNTU3MDE1NTc0NywyNDkyLjgwMDE5MDExMTA0NworMjYsU2F0IDE5IEZlYiAxMSwxNDc1OS44OTAwODgzODkwNSwxMjEzMS45ODk3MzM2MTEzNTcsNTMwODEuODMxMzM4NTE1NzgsODI0MzcuNjc5NjU1OTIzNywxMTQ5MTQuMjY3MzgzODM2MDQsMTc0MTc1OS41NTEzODY5MTI0LDIwNjkzOTAuNTcyNTQzNjM5NywxNjY5NDgxLjU3NjY4MTEzODcsMTMxNDAzNC45NjI4OTE5NTI4LDE2OTk1OTEuNjY5NTUzNjIyMSwzNjUzNzIuNjQ0MDE5OTE5NCwyMTcxOTgzLjI3OTA2NTI5MjMsNDM3ODMzLjQyNjA2ODM4MzI3LDExNTM0MjEuNDE2MTU0MzgwNywxMjgxNTIuMzI3MDQwNzk0ODYsNjU4NDQxLjAzNjIzNzEwNDcsMjA5NjEzLjAzNjY1OTkzMjgsNTc2MzMuMTY1NDQ2MjcxMTc0LDE2NzUxNC4xMjEzNjAyNjM1LDExNjUyNi4wNDM0MzQ4NTY2OSwxNjQ3MzkuODcxNzExMjc2NTMsMTgyOTE0Ljc3NzI2MTMzMzc0LDEzNjY2NjQuNDg2Njk4OTIwMSwyODk1NTQ5LjE3MzU1NDc2LDE0NzE1My43NjI3MDc0MzU4MiwyNDc3Ljc3MzM4NjA0OTIyNjcKKzI3LFN1biAyMCBGZWIgMTEsMTA0MDAuOTM2OTM3NDY0ODI5LDg0MzIuNDAyNDY0ODg2ODMzLDUxNjg0Ljc3MjQ2Njc4MTM4LDc2Mjg4LjI3MTMwMTMyMTQyLDExMzE4Ni4zMDgwNzk2MzU3NywxNjg5MzYxLjM4MzMxMzQ2OTgsMjA1MzU5OS41MTk5ODIzMTUxLDE2NDg0MDUuNDg4MDk2MjE5NywxMjY2MTczLjkzMDU3NDYwMiwxNjUyNTE4LjgyMDI2MDEzMjIsMzU5OTU3LjEyMDQ4Nzg5MDczLDIxNTA3MDAuNzQ2NTQwODUyNCw0MzYxNzIuOTcxMjc1Nzk5LDExNDYwNzAuMzUwNDYzOTI4NCw4OTY3Mi44NTM4MzQyOTYyOSw1MjM4MzIuMDAxNTA5MDQ3NywxNDYyNTguNzYzMjk3OTgxMjYsNDAwNTcuNzEzOTU5MjIyMjEsMTE2NDI0LjYzNDc4NTYzMjY2LDgxNTY5LjIwMDQyNzgzNTQzLDExNDQ4Ni41MjE0NzEwNTEzMiwxMjcxMTYuMDQ3MjAxODg1NDgsMTM1OTA5My42MDgzNDYxMzEyLDI4MjI3MTAuMDcyMjAwNDA3MywxMzcwNTAuNDA4OTYxNjYyODIsMjQ1OS45NjgxNDE5MDcxMzgKKzI4LE1vbiAyMSBGZWIgMTEsNzE0My44ODg5MjM1MjYyMTMsNTcxNC45NTAwNjc4OTU1NjUsNDk5ODQuNDkwNTUwMzQ2Miw2OTc1MS44MTExMzE4NjgyMiwxMTEwNzcuNjQyOTEyNTIxNSwxNjI3MjY5Ljk2MTk2NzE5OSwyMDM0NjU4LjI0MzIzNTM0ODUsMTYyMjU3OS43ODY1Njk4NzczLDEyMDk4MTEuNTg5NzMyMjYxMSwxNTk2NjcxLjIwNTY3MDA2NjYsMzUzMzE5Ljc4NTY3ODk4MzI2LDIxMjQ3OTUuNjYxNzAzMDY2NCw0MzQzMzIuOTcyNTkzMjQ3MSwxMTM3MzQ4LjAyMDI3MTQ0OSw2MTE4Ny40NDc1MTg1NjI5Nyw0MDY0NDcuMzgxMDQxMzY0MDUsOTk1MzAuNTg0NjkxMDM5OTYsMjcxNTkuMjc1NDQxNjIyNDM0LDc4OTM1LjM2NjMyOTkwNzQxLDU1Njc3LjM4ODEyOTUxNzIyNSw3NzYxNC43OTQ3NzE2MDM2LDg2MTc2LjI5ODcxNjExMDAzLDEzNTAzMjAuMTE3ODQ1MTUzNCwyNzM1Mzk2LjM5NzM4MTczMDQsMTI2MDMwLjcwMTMwOTc4NzUzLDI0MzguNTMxMDY1MzQ0NDAxNworMjksVHVlIDIyIEZlYiAxMSw0ODE3Ljg2MzEzNzEyOTAwNiwzODA3LjY0NDQyMjc1NTUyNSw0NzkzMi4wMDY2MDM0NTMwOSw2Mjk0OS44MTE3OTI1ODczMTYsMTA4NTA0LjQ4MDgyMDQ1NDM3LDE1NTQyOTkuMzQ4OTEwMTU4NywyMDExNjgwLjQ5ODM2MjUxMTYsMTU5MDg0Mi45MjQ4Njk5MjQzLDExNDQxNjQuNjUwNzIwNjQyNCwxNTMwODc2LjgwNDE1NDg0MSwzNDUxODAuNzkxMzk3NTI2MywyMDkzMDM3LjQ5ODg1ODMyMjYsNDMyMjQ5LjI3MjEzNjg2NDk1LDExMjY4NDQuMzczMzQwMDE4LDQxMDI3Ljk1MzI2NzU5NTA1LDMwODExMS41NDY0MDA2MDkyNSw2NjU4MS41OTM2MjUzMzM4LDE4MTA5LjgzMDE1MjE1ODAzNiw1MjYzNS40MDY1NTc3MDExOCwzNzM0My45MDUyMzIxODgwMSw1MTc1MC45NDYyODMzNTc0NjUsNTc0NTkuMzIwNTY4ODkxODMsMTMzOTk5Ni42MDY0NzQ2MTcsMjYzMTMzNS43NjM1NTk3OTg3LDExNDI0OC4wNjQ2NTYzMzYzLDI0MTIuMzg2MzYyMzA2MDUzMworMzAsV2VkIDIzIEZlYiAxMSwzMjE4LjA0MzAyNTUxNDIyMywyNTE3LjY0ODUxMTczNzU1OCw0NTQ4Mi42NDQ4OTExOTYyMTQsNTYwMjkuMzc3MDM4MTUyMTIsMTA1MzczLjc2NTExODI5MDMsMTQ2OTQ3NC43ODY4NzE5NzM3LDE5ODM1NzcuOTM1OTExMjM5NiwxNTUxODU2LjIxODA0MjM4MDIsMTA2ODc2MS41OTkzMzcwODU2LDE0NTQwOTYuNTg4NTk0NzEzNywzMzUyMjYuNDE5MTUxMzA2MDQsMjA1Mzk1Mi41OTcxODg2OTg2LDQyOTgzNy4xMTE4ODYyMjMyNSwxMTE0MDQ1Ljc0NTY1ODc5MiwyNzI4MC4xMzQ0ODE1NjQ0NzMsMjI4ODU3LjA0MTA3ODMwOTQsNDQxODkuOTA2MTQ4NjMyNTQsMTE5ODkuMTE1MDc2ODcyNzYsMzQ4NDcuODA4MzUyNDE5OTc2LDI0ODM1LjUwMTMxODM4NTUyNiwzNDI2MC4xOTEyOTU5NTY5LDM4MDM5LjI5Njk0ODQ1Njk2LDEzMjc2ODkuMzIxMzU5MjE4LDI1MDgzNjAuNjAxMjIxMzM1NiwxMDE5MjMuMjg1MzkwNjE4MSwyMzgwLjE5Nzg1MDQwMTk5MDgKKzMxLFRodSAyNCBGZWIgMTEsMjE0OC43NzMzNTgwODA3NjcsMTY2OC43MzI3MTU2MTQ5MTA4LDQyNjAzLjI5MjQxMDU1Mjg3LDQ5MTUyLjIxMDUzMzk5MTY0NSwxMDE1ODcuMDY2MjUyMjU1NTIsMTM3MjIyNC40MTU2NDIyMjIyLDE5NDkwMzguOTg0MTQ1Njc1OCwxNTA0MTM2LjgwMTE2MzM1OTMsOTgzNjI4LjA2MDQxNTQ0MjIsMTM2NTU4NC4wMzMzOTQ2NzI0LDMyMzEyMi4wODcxODA1Njg2NiwyMDA1ODIyLjkwMjMxMjQwMSw0MjY5ODUuNDEwMjYxNDQxNiwxMDk4MzE4LjQ4MzY5NTE1NzgsMTgxNjIuNTMyMjczNzk4NjcsMTY3MjE2LjUxMjYyMTgxOTI3LDI5Mzg1Ljc5MTk2MTE4MzU5Nyw3OTU5LjY0OTA1MDEwMzc0OCwyMzEzNy42NzgxMzU0MTY0LDE2NTM2LjU5NDY0MDg2MTgzNywyMjc0Ni42MDk2NDQ0ODkwOSwyNTI1NS44MjAzMjEzMjM1MzIsMTMxMjg2My4wNTA2MDk5Nzg0LDIzNjQ2NzkuMTAwNDMwNTI2Myw4OTMzNi41OTcwMDQ0OTU2NiwyMzQwLjMzNzEzMzQzODEyOTUKKzMyLEZyaSAyNSBGZWIgMTEsMTQ0Ny44MTIxNDEyMDY2Mzc1LDExMTkuODI1MTU4NzY2NzM1NSwzOTI4MS45NjA3ODgyMzUxMyw0MjQ4MC45NjIxOTg0ODgwNjUsOTcwNDcuNjczOTY5MjM4MTIsMTI2MjYxNi4xNDA3NDYxMjYyLDE5MDY1MjEuNjkxMTI0MDczMiwxNDQ2MTMzLjU2MDY3OTU1MzUsODg5NDg5LjM2Mjk5NjYwNzIsMTI2NTA5Mi41Mzg0NTczMDMsMzA4NTM3LjA3NjIzNTYzMzM0LDE5NDY3MTcuNjY2Njk3NzE3NSw0MjM1NDkuOTY2ODc3MjUwMjMsMTA3ODg5Ni4xNzk0MDMyMjYsMTIyMjYuMTQyOTM1ODI3OTc1LDEyMDc0OS44OTYxMTA2MTE3MiwxOTc3Mi4zNTgyMDE4MTkxMSw1MzUyLjQ2NTM4NDAzNjExNSwxNTU2MC42NDk0OTEzNjU4NjYsMTExMzEuNTM5MjA3MDY5MzQsMTUyOTcuMzgzMDA3NzI0MzM1LDE2OTg0Ljk5OTA0MzU4NTM1NCwxMjk0ODY2Ljk0OTg2MTUxNSwyMTk5MjUyLjc4Mzc0NjQ0OTMsNzY4MTAuNzI5NjM2MjQzMSwyMjkwLjg2ODQ1NzQzMDU1ODUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWdpbmdTRUlSRGlzZWFzZV9GRF9SZWZlcmVuY2UvQWdpbmdTRUlSRGlzZWFzZS9odW1hbjF0bzEvRGlzZWFzZSBEZWF0aHNfMi5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FnaW5nU0VJUkRpc2Vhc2VfRkRfUmVmZXJlbmNlL0FnaW5nU0VJUkRpc2Vhc2UvaHVtYW4xdG8xL0Rpc2Vhc2UgRGVhdGhzXzIuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRhZDFhNWIKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FnaW5nU0VJUkRpc2Vhc2VfRkRfUmVmZXJlbmNlL0FnaW5nU0VJUkRpc2Vhc2UvaHVtYW4xdG8xL0Rpc2Vhc2UgRGVhdGhzXzIuY3N2CkBAIC0wLDAgKzEsMzMgQEAKK2l0ZXJhdGlvbix0aW1lLEVHLUZSRy1HMjEwMDAxLEVHLUZSRy1HMjEwMDAyLEVHLUZSRy1HMjEwMDAzLEVHLUZSRy1HMjEwMDA0LEVHLUZSRy1HMjEwMDA1LEVHLUxPRS1HMjQwMDAxLEVHLUxPRS1HMjQwMDAyLEVHLUxPRS1HMjQwMDAzLEVHLUxPRS1HMjQwMDA0LEVHLUxPRS1HMjQwMDA1LEVHLUxPRS1HMjQwMDA2LEVHLUxPRS1HMjQwMDA3LEVHLUxPRS1HMjQwMDA4LEVHLUxPRS1HMjQwMDA5LEVHLVVQRS1HMjkwMDAxLEVHLVVQRS1HMjkwMDAyLEVHLVVQRS1HMjkwMDAzLEVHLVVQRS1HMjkwMDA0LEVHLVVQRS1HMjkwMDA1LEVHLVVQRS1HMjkwMDA2LEVHLVVQRS1HMjkwMDA3LEVHLVVQRS1HMjkwMDA4LEVHLVVSRy1HMzAwMDAxLEVHLVVSRy1HMzAwMDAyLEVHLVVSRy1HMzAwMDAzLEVHLVVSRy1HMzAwMDA0CisxLFR1ZSAyNSBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMixXZWQgMjYgSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzMsVGh1IDI3IEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCis0LEZyaSAyOCBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorNSxTYXQgMjkgSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzYsU3VuIDMwIEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCis3LE1vbiAzMSBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorOCxUdWUgMSBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorOSxXZWQgMiBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTAsVGh1IDMgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzExLEZyaSA0IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxMixTYXQgNSBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTMsU3VuIDYgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzE0LE1vbiA3IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxNSxUdWUgOCBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTYsV2VkIDkgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzE3LFRodSAxMCBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTgsRnJpIDExIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxOSxTYXQgMTIgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzIwLFN1biAxMyBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjEsTW9uIDE0IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyMixUdWUgMTUgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzIzLFdlZCAxNiBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjQsVGh1IDE3IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyNSxGcmkgMTggRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzI2LFNhdCAxOSBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjcsU3VuIDIwIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyOCxNb24gMjEgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzI5LFR1ZSAyMiBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMzAsV2VkIDIzIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCiszMSxUaHUgMjQgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzMyLEZyaSAyNSBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BZ2luZ1NFSVJEaXNlYXNlX0ZEX1JlZmVyZW5jZS9BZ2luZ1NFSVJEaXNlYXNlL2h1bWFuMXRvMS9FXzIuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BZ2luZ1NFSVJEaXNlYXNlX0ZEX1JlZmVyZW5jZS9BZ2luZ1NFSVJEaXNlYXNlL2h1bWFuMXRvMS9FXzIuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBlYmIwNzYKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FnaW5nU0VJUkRpc2Vhc2VfRkRfUmVmZXJlbmNlL0FnaW5nU0VJUkRpc2Vhc2UvaHVtYW4xdG8xL0VfMi5jc3YKQEAgLTAsMCArMSwzMyBAQAoraXRlcmF0aW9uLHRpbWUsRUctRlJHLUcyMTAwMDEsRUctRlJHLUcyMTAwMDIsRUctRlJHLUcyMTAwMDMsRUctRlJHLUcyMTAwMDQsRUctRlJHLUcyMTAwMDUsRUctTE9FLUcyNDAwMDEsRUctTE9FLUcyNDAwMDIsRUctTE9FLUcyNDAwMDMsRUctTE9FLUcyNDAwMDQsRUctTE9FLUcyNDAwMDUsRUctTE9FLUcyNDAwMDYsRUctTE9FLUcyNDAwMDcsRUctTE9FLUcyNDAwMDgsRUctTE9FLUcyNDAwMDksRUctVVBFLUcyOTAwMDEsRUctVVBFLUcyOTAwMDIsRUctVVBFLUcyOTAwMDMsRUctVVBFLUcyOTAwMDQsRUctVVBFLUcyOTAwMDUsRUctVVBFLUcyOTAwMDYsRUctVVBFLUcyOTAwMDcsRUctVVBFLUcyOTAwMDgsRUctVVJHLUczMDAwMDEsRUctVVJHLUczMDAwMDIsRUctVVJHLUczMDAwMDMsRUctVVJHLUczMDAwMDQKKzEsVHVlIDI1IEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyLFdlZCAyNiBKYW4gMTEsMjUwLjA4MzA5MjkyODIxMzgsMjE3LjYxMDU2NTI4NDkxOTc3LDAuMCw0Mi4zNjU0MDMwMTQwNzY1OCwwLjAsNzYuNzE4ODcxODA1MDg5ODksMC4wLDAuMCw3NC40NDQ2ODkyNDM2MTUzMSw3MC45NjA5NDkzODY0MTQxNiwwLjAsMC4wLDAuMCwwLjAsMzM0Mi4yNzQ4MDAwMDAwMDA2LDY2MTQuNjE0NzI2NjQyNDEzLDU1NTUuNjM0MTI4NDUyNjA3LDE1NjAuNTQwNjYzNzI4NDI1Miw0NTQ2LjkyNzc3NDQ5ODAyNDUsMzAyOC4yMjI4MjIwOTc3ODgsNDQ3My40MTUyNjE4NTE3MzcsNDk2Ny45NzYwOTIwNzk0NTUsMC4wLDgyLjQ1MTA4OTY0MTk3OTUsNDguNDM3MTU1Mzg1MTI5NCwwLjAKKzMsVGh1IDI3IEphbiAxMSwzNDcuODUzNTk5NTY1NjkyMjYsMzAyLjY5NjQxNDA4ODE3MTcsMC4wLDU4Ljk5NjI1NjAxNDE5NDQyLDAuMCwxMDYuODU1OTI1OTE2NzUxNTYsMC4wLDAuMCwxMDMuNjg3NzU2NDMzNjczLDk4LjgzNjI1Mzk1OTQyNDU0LDAuMCwwLjAsMC4wLDAuMCw0NjQ2LjI5NDk5MzI2Njg4OSw5MTk3LjgzMDM2OTQ2NzY0LDc3MjMuMjI0OTM1NDA5MTI1NSwyMTY5LjQwNzY0NDIzMzUyNyw2MzIwLjk2MjI1Njk1MzM2ODUsNDIwOS43MTc0MDM2OTU2NTcsNjIxOC43NjgyMjkzMjkzMTEsNjkwNi4yODY1MTk3NTU0MjQsMC4wLDExNC44NDA4MzMxMTIwNDc4Myw2Ny40NTYyMjYzNDg2MTA1MSwwLjAKKzQsRnJpIDI4IEphbiAxMSw0MTkuNjM1MDgzMjM1NDI5OSwzNjYuNDk1MzExOTU3MjIzNCwwLjE1NjM3OTU2ODgxNDE0NTA4LDcxLjg3NzEyMTg0NDE0MjgsMC4xNTIwMDgwOTIyNzEwMjcxNiwxMzQuOTM5MTQyNTE3MjYzOTcsMC42NjIwMDA2Mjc1NTY2NTQxLDEuMzYyOTM5NDkyODU3NjE4LDEzMC45MjU4NDI1ODMwMDE3MiwxMjQuNDkwNTQzNzU5MTUxMjgsMC40MzU5MjA3MjExNzk1MjUyLDEuMDk5MTc2Mzk0MzA2MjE1OCwwLjAsMC4xOTk4NDIzNjk0MTk5NjUyLDU0NjYuMjM3OTMyMjU4MjM2NSwxMDcwMC4xNjk3NTI0NjI3MDUsOTA4Ny4yMjQ3NTQzOTgwNDMsMjU1Mi45Njg5NzcyMjkxODU0LDc0MzguNjcwMjI0Mjg0MjM1LDQ5NTIuNDY1MjgyOTM2MTI1LDczMTguMzk3NjExNDkzNDMsODEyNy40OTkxNDgyOTA1NDQsMC4yNjMwOTk4MjEwNzA2OTE0NiwxNDYuMDYzNTA1NDUyMDA4ODMsODIuODc2MzQyMTEzMjc2MzgsMC4wCis1LFNhdCAyOSBKYW4gMTEsNDk0LjA0MDI4NjYwNTk4Mzc0LDQzMy42MDc4MzMwNzc4Njg3NSwwLjQzNTIzMzY0ODM0NDgyODYsODUuNzQyNjg2NzYzMjc2NTIsMC40MjMwNjc0ODg3OTE4MDI5LDE2OC41MjU1MTYwNTMxNDEyNSwxLjg0MjU4ODU2NTc5NzMzLDMuNzkzNTQ5NDIzMDE1MzM3LDE2My40OTQwNTc0NDkwNzA0NSwxNTQuOTgzMzg5OTQzOTAyODQsMS4yMTMzMDg4OTUwMjE0MDY4LDMuMDU5NDExNTI1MTgzNjY3LDAuMCwwLjU1NjIzMzc4Mjc3NTcyNSw2MjE0LjgyODE1MjU5MjUwMywxMTk2Ny4xOTA5NDA5NjY5MTIsMTAzMzMuNDM1MDQ1MTU4ODYsMjkwMy43NjY3ODA2MzE4NjczLDg0NjEuMDIxMzg2NTU5MzI1LDU2MzAuNDQ3NDE1OTkzNjczLDgzMjQuMjA1NjEzMDExNjEsOTI0NC41Mjg0MzI5Nzg1MiwwLjczMjI5MjkyMTc0OTEzMywxODQuMDE2MDE3Njg1MjgyMyw5OS45NjMxMDU1MTc3NzY4NSwwLjAKKzYsU3VuIDMwIEphbiAxMSw1ODQuNDQxODIzMTMzMDM1NCw1MTUuNzg2OTA0NjQ1MDEzNSwwLjg4MDMwOTE4NDI1MDI0MDEsMTAyLjg0NjMwNzA5MDIwOTYsMC44NTc5ODE2MTM4MjU2Nzg3LDIxMi44OTI2Mjk5Mzg1MDQ5LDMuNzk5OTkyMDgyOTA1MTg4LDcuNzY2NDc4NDUwMTE3NTcyLDIwNi41MDE4NDkzODA4MzgxLDE5NS4xMDk3Njg3NDk3MjIxLDIuNDY2MzgyMjMxNDA3NjAzNiw2LjI5MTQ3MTIzMDY0NTk4OSwwLjAwNjIwODUwMzA5MzMyOTM5MSwxLjE2NDQ2MzkyNTE2MDE4OTQsNzA3OC43MjE5NzU5MzQ5NzU1LDEzMzU3Ljk2MTQwNjQ0Mzk4NywxMTc3Mi41ODMyNDQwNTY4OTYsMzMwOS4yNzI0ODUyMDE5ODUsOTY0Mi44NDE2ODcyOTEzNTEsNjQxMi43NTk3MzMxMTE2OTIsOTQ4Ni45MDQ4NjMyNjgxNTIsMTA1MzUuODAzMTYwODM0ODI1LDEuNTA2NzE1NTAzODUxNzMzNSwyMzQuNzM2NTc5OTQ0MTY5LDEyMS40MTQ2NTEzNDUyNzkwOCwzLjE5NzkwMzkxOTc1ODIzMTRFLTQKKzcsTW9uIDMxIEphbiAxMSw3MDAuNzYyNzEzNzc4MDExOSw2MjIuMDA5MDI1NzI1ODQ2OSwxLjU2ODY2OTYyMDY2NjUwNjMsMTI0Ljk3Njg5NzM2NjQ2MjUyLDEuNTM0MzU4MDgzNTA3NDcwMiwyNzMuNDY4NTk0MTgzODczMiw2Ljk0Njk5MzQyNzc2NDksMTQuMDY0MTUzMTUyMzk5NDQyLDI2NS4yMDAyMDI2OTEwOTg1LDI0OS43MzYxMjY3MzI3MjM3LDQuNDI0NTY3NjAzNjMwNTk4NSwxMS40NTk0NjE2MzU4OTA5OTYsMC4wMjU5NjY2NTUyMTcwOTYyNiwyLjE2OTY0MDgxMTkxMDkyMjcsODE3OC4xNzIyOTQ2NDYyLDE1MDc5LjgyOTUxODc1MjE4NywxMzYwNS4yNTA3MzkyNzU4NCwzODI2LjExMTQxOTEyMDY4OCwxMTE0OS4wOTQ2MjQ5OTg0NTIsNzQwOC4zMDgyODMzODk4ODgsMTA5NjguNzk4MTYxODU2MDQsMTIxODEuNTY5ODE4NDcyOTM1LDIuNzQ2Mjc4NDE4NTYyNzk1MywzMDQuNjYxMzMzMTg4ODQ3MywxNDkuNTMyMzczMTc3MzM5MiwwLjAwMTMzNzQ5NDg1OTUyMDE4NTgKKzgsVHVlIDEgRmViIDExLDg1Mi4yNDA3MzI4NzE1ODg4LDc2MC43ODY4NjY3NjM1MzM2LDIuNjA1NTU1Mjc5MjQ5NTc5LDE1My44ODUxNDMwMzExMzY1MiwyLjU1ODU3Mjg0NTU0MjI4MywzNTYuNDE2NTkxNzE5ODQyMzYsMTEuODU4NDEzNTczMjgwMTI4LDIzLjc2NTg3MjUzNjU1ODMxMiwzNDUuNTQ1Mjk4NjY2MDMwNiwzMjQuMzU0NDk0MTczODMyMSw3LjQwMzA1NDM2Nzk2MywxOS40ODQzNzMxNjU1OTY1OSwwLjA3MDcyNDA1NzU1ODAxMjI4LDMuNzc2NDc5Mzg3NDI5Mjg3LDk2MTIuMzAzMzk0MzY5NjI1LDE3Mjg2LjMxNzg0NjkyMTIyLDE1OTk3LjEzNDY2NTE1MTU1NCw0NTAxLjIwNDUwNjU5MzcyNSwxMzExNi40NjUzMjU5MTE4Miw4NzA2LjgzODgwNjc5NDM0NywxMjkwNC4zNzA5MDk0MTgyMjcsMTQzMzEuMTgyNjA2OTM2NjU0LDQuNjczMzc2NjUzNTkzMDY3LDQwMS4yNDY4NjA5OTczNjM1LDE4Ni42Njg3MTM2ODM0Mjg5NiwwLjAwMzU1NDE0MzkyNDM3NzEyOTYKKzksV2VkIDIgRmViIDExLDEwNDguNjA3ODczNzAxNTI5OCw5NDEuMTgyODI1NDk1MTAxNSw0LjEzMjc3MzMwMjY2Njg4NjUsMTkxLjQ4MzkzNDU0NTA5OTM3LDQuMDc0ODg3NTU2MDYyOTMyLDQ2OS4yMTUxMzUyNDY5MTI3LDE5LjMzNjUzMDM0MDQ4OSwzOC4zNTcyNzIyMTcxMTgyMSw0NTQuNzU2Njc1NDYxNjYxNTMsNDI1LjYwNDMzMTQ1OTM2NjM0LDExLjgzMTI1NjkzNDEwMDg1LDMxLjY0NDQyMDIzNjcwMDY3NSwwLjE1ODg0MzUzOTQxNzYyNDk3LDYuMjc2NDMzNjQyMTk5MzY2LDExNDc4LjI1NzE2MTEyMTgyLDIwMTE2LjI3MzQyOTg2MDU1NywxOTExMC45NTI0MTQwOTYxNzcsNTM4MC43NjIzMDg2OTI1MjQsMTU2NzkuNTUyNzE4ODYyOTU1LDEwMzk2LjI4NDI0MjMzODE5LDE1NDI2LjA2MjY3NTE4OTQ4OSwxNzEzMS43MjMzODg3ODAyMjUsNy41OTc1MzUyNDU2NTkyNzgsNTMzLjY4MDA2NTY4ODQ1MzYsMjM1LjQ3MTE1NjUxMDE0ODUsMC4wMDc2ODczMTYzOTQ5NjQyOTkKKzEwLFRodSAzIEZlYiAxMSwxMzAwLjU4ODU0OTQ3ODA2NzUsMTE3My4yMzgzOTU1Mzk5NTUsNi4zMzg2NzgwMDkwMDkwNTYsMjM5Ljk2NjI3MzU1NjY2MzU3LDYuMjc2MTExMDgxNDMzMzU2LDYyMS4xNDc2MzQ4NjIxMDksMzAuNDgyNjY2NzIxODYzNyw1OS44NTIxNDM0NzU2NDQ2OTUsNjAxLjc4NjU3ODQyMTE5MTUsNTYxLjcwNzc0Nzc3NzMyMDMsMTguMjg1NjY2MDU1OTc5MDg1LDQ5LjY4NTM2NTkwOTczMTUzLDAuMzE4NDc3MzQ3NDUwODY3NjQsMTAuMDc2NjM0ODA3MDEyNTAyLDEzODc5LjI1MTEzNzk0NjE1NiwyMzcxMC44NTIwNzAxOTk2MiwyMzExOS44ODU2NDcwNDUxMTcsNjUxNC4wODE4MDAwMjU0ODMsMTg5ODEuOTE5NTg5NzQzMjk1LDEyNTcwLjA2Nzc2MzIxMTQ4MiwxODY3NS4xNDA5MjA5MDMxMDgsMjA3NDAuMDc2NzM1OTU4NDc1LDExLjk0MjU2ODk3NjE2NjczLDcxMy41MDA4NTQyMTU4NSwyOTkuMDQxODY2NDMzNDEyNywwLjAxNDc1NzA5NjA0MzYwNDQwNAorMTEsRnJpIDQgRmViIDExLDE2MTkuOTQ5OTQxMTQ4NjU2OCwxNDY4LjAwMDM3MzU5OTQxNDQsOS40NjkzNTQxODAwMjk5MjgsMzAxLjg3NTA2NjY4OTY2MDksOS40MTU3MTIwOTM1NDgzMDYsODIzLjc0MzYxNDI4MDc1Myw0Ni43ODE4MDk3NTM0NjY1OSw5MC45MzMyMTY3OTA4OTYyMSw3OTcuNzQwMTY0Njk3NDgwOSw3NDIuODU4OTUwMDU4MTU4NywyNy41Mjc0NzA3NjkzNjExNyw3NS45NDk3MDI5NjI2NzcxNSwwLjU5MTM1NjQzOTY1NTYwOTgsMTUuNzM0ODQ5NDg4OTkxOTUzLDE2OTI2LjM2MDI4MDg0NzQxNywyODIxOS43ODI4NjU1NDEwMjcsMjgyMTAuNTUzODkwODEzMTc1LDc5NTQuMzg2Nzc5MjU2MDYxLDIzMTc4LjUyNjcwNDMzMzAyNCwxNTMyOC43MjM0MjgwODUxNDYsMjI4MDQuMDk4MTU3NzU3NDI4LDI1MzI1LjU5MDk5ODk2ODg4NCwxOC4yNzg2MTU5NzM5NzMxMjUsOTU1LjE4OTE1ODQzMzIzMjQsMzgxLjA0NTQ5MDcxMzUxNTg1LDAuMDI2MTgzNjE3NTk3Mjc5ODUKKzEyLFNhdCA1IEZlYiAxMSwyMDE5LjIyMzY0NjY3MzU4OCwxODM3LjI0MDU0Mjg5Nzk1NzgsMTMuODQyOTcwMDMyMjEwOTI4LDM4MC4xNTE0OTQwNjk1Mjk3NSwxMy44MjM1Mzg3NTQzNDkxMiwxMDkxLjI3MzU5MzgzMjMzMjQsNzAuMjE1NzU1NDA1NTgzMjcsMTM1LjEzNzU5OTY3NDMwMTgsMTA1Ni4zNDM4NDc2Mzk5NDI0LDk4MS42NTkwNzc2NTE1Niw0MC41NTE3MDUwMTI3MDY2LDExMy41NDgzNDQ2MzI0NTM3NiwxLjAzODE4Njg2NTg4MjY4MiwyNC4wMDY4ODUxMjAxNzgwODcsMjA3MzYuMjQ2OTc0MTIxMjA0LDMzODAxLjk2OTUxODA2NTc5LDM0NTc5LjIwNzE4MjQzNzA5LDk3NTcuNzQ1MDg4MDY1OTYyLDI4NDMyLjU1OTg3MTY0MTM5NSwxODc3Ny44NTExOTE0ODY2MDMsMjc5NzMuNTMyNjc4MDEwNzU3LDMxMDY2LjYxMjY1ODQzNTk2NiwyNy4zNjQ4OTc1NDY0ODg4NzYsMTI3Ni44NDY2MjkxOTgxOTgzLDQ4NS43OTk0MzYwODU0ODksMC4wNDM5MTY2MjgyMzY4NzcwOTQKKzEzLFN1biA2IEZlYiAxMSwyNTExLjExMzIxMzc5MTA4NjMsMjI5Mi44NzMwNTQwMzkyNjc2LDE5Ljg2OTEyODY1OTEyNjE3Miw0NzguMTc3NjE2NzEyMDkxNSwxOS45MjcxNzIzNjM3MjAwODYsMTQ0MS4zNzk0MTc3MzgzNzgyLDEwMy40MTk0MTQ0MDY2OTQxLDE5Ny4xMTA3MzUxODE5MTMwNCwxMzk0LjUzODk4MzEzOTE0OSwxMjkzLjY2OTQwNTg5NjQ4NzQsNTguNjU0Mjg2MDY3ODEwMzQsMTY2LjU5Njk3OTU3MzA1MzIsMS43NDYzNTk2MDA1Mjg3MTU2LDM1LjkxMjU0NjA2ODY2NjYzLDI1NDI1LjQ1MzY0MTYxMzU0NSw0MDYyMi41MzQ4OTQwOTM2NCw0MjQyMi4xMzAxNjE1NDE4OSwxMTk4MC4zMzAwMjUzNzQ5MjQsMzQ5MDcuNDI5MDAxMTY0NTgsMjMwMjIuOTY0OTA5MjE1OTI3LDM0MzQ0LjI3ODY0MjIwNTc4LDM4MTQxLjc0NDMxMTEwNDAzLDQwLjIwODc0ODMzMzE2MDg4NCwxNzAxLjA4MDU5NjcyNzcwMDQsNjE4LjM2ODc1MjMyMDQyMDQsMC4wNzA2MTQyNDU1NzE2NTMzNgorMTQsTW9uIDcgRmViIDExLDMxMDcuNTAyODg0ODYwNTc1LDI4NDUuOTgyMTE0MDYxMDg5OCwyOC4wNzQ2MTU5NDY2NTA4OTgsNTk5LjgxNTU1MTg5MDk5MjQsMjguMjgwNTc2ODI5ODQyOTgsMTg5NS44ODc2MzA0MzcyNzExLDE0OS44OTQwOTIzODE4NTMyLDI4Mi45NDk5MzQyNDI1MzA2LDE4MzMuMjQ0MTAyMTc4MzYzNCwxNjk4LjEyNTYzMjk0OTEzNzMsODMuNTIyMzU3NzgzNjA3NDgsMjQwLjUzNzQ1OTkzMzQ4MDY1LDIuODQwODA1NDUzODExMyw1Mi44MjYyMjMxMTg3ODEwMTYsMzExMDAuNjc5NTIxODMyMDYyLDQ4ODQ2LjU3NTE0NDU0NDYsNTE5MTkuMjQzNDkyNzg2MDcsMTQ2NzMuNzIwMTczNjEzMzI1LDQyNzUzLjA1MDAyNTM3MzIsMjgxNjAuNzEyMTQ2ODcwMDAyLDQyMDYzLjkwOTM2NzY2ODk0LDQ2NzE0Ljg1MzI1ODA5NzM4NCw1OC4xNDYxMTg5NTc5Mjk3OCwyMjU2LjE1OTY2MDI3MzU3NjcsNzg0LjY3MDgwOTIwNDE2MjQsMC4xMDk4ODczNzI3MzQ3NTIxOQorMTUsVHVlIDggRmViIDExLDM4MTcuOTE0MjEwNDMzNjUyNCwzNTA1LjMwOTM4MTk3NzAzNSwzOS4xMzY2ODE4MTgyMDg3NjQsNzQ5LjQzNDAzMDQ0NzQ5NzQsMzkuNjAxNTU0MTI3NDU2OTIsMjQ4MS44MjczMjk1NjQwNjcsMjE0LjI5MjU0MTQ4ODUwMDMyLDQwMC42NTg1MTM4NjQ4NTc2NCwyMzk4LjMwMjEwMjI1OTg0NzcsMjIxOC44MzI5NzYxNTUwNTIsMTE3LjM1MzEwMjMxNDI5Mzg5LDM0Mi41NjU0OTMxMDE5NzExLDQuNDk5MDQ2ODA1NTM5OTgyLDc2LjU5ODk1MDg2NzAxMjg5LDM3ODQzLjczMDc1MzI1NTcyNCw1ODYyOC43MjM3NDkyNzQ2OSw2MzIwOC42NTEwMjk5OTIyNSwxNzg3Ny41NzYyNjQyODQ1ODgsNTIwODQuNDg3NDc3MzEwNjYsMzQyNjUuMjgwOTcxNzc2MTU2LDUxMjQ1LjcyMDM5MTc0MzUsNTY5MTEuNzI4MTA4MjQwMTYsODIuOTQ5MDk1NjY2NTAzLDI5NzcuNDgzMDY3NTM2MjQ3Myw5OTEuNTgwMDg2NDM2MDI3MywwLjE2NjYyODE2MDEwMjk2Nzk0CisxNixXZWQgOSBGZWIgMTEsNDY0Ny4yNDA0MjgzNjI2NTY1LDQyNzUuMDM4MzIyODMxNTA4LDUzLjkyNDg5MTk1MjMyNjI5LDkzMS45MDM4NjA5MjI1NTQ4LDU0LjgxOTU4MTk5NTkwNjc5LDMyMzIuNjU2NTU3NjM0ODEwNywzMDIuNzkzNDEyMDc3ODg2NDQsNTYwLjczNDMwMzc0NDk4NDEsMzEyMS42MDk3OTM4MzA1ODY2LDI4ODUuMjQ2OTc2NDA4NjEzNiwxNjMuMDA2NjU0Mjg5NTMwOTMsNDgyLjE4OTUxMjE3NTUyMjgsNi45NzE4MjIzMjkwODQxMjUsMTA5LjcyMDMwNzQ3NzQ3MDUzLDQ1Njg5LjY4NjAyNjc5MDUzLDcwMDk2Ljk4MzE4Njc5MTkxLDc2MzQ5LjYzMTgwMDg5MjYyLDIxNjA4Ljk2MTYxMzM0NjExLDYyOTUwLjgzMDA3NzUwMTk3LDQxMzY4LjY3Mzg5MjkzNDI3LDYxOTM4LjA5NTg4ODczMTUzNiw2ODc4Ni4wNTU3MzQ3MzgwOCwxMTYuOTY3MDM0ODI2MDQyMTEsMzkwOS4zOTA4MDcwMzA2ODM0LDEyNDcuMDExMTM0MzQyODg5LDAuMjQ3NDQ1MDQwNzQxMDc5MDQKKzE3LFRodSAxMCBGZWIgMTEsNTU5Mi42NTQ0Mjc1OTAzMTgsNTE1MS43ODM3NDY3NTU4MDYsNzMuNTUyNTIyNjgzNjQ4NywxMTUyLjUzNTkwMTM4NDQ2OSw3NS4xMzU3OTMzMTkxNzg5Miw0MTg5LjY4NzM0MjAxODY1OSw0MjMuNTg3MDgwOTI4MzMyNDUsNzc2LjkyMDg1NTgwNzEzNzIsNDA0Mi40MTA0MDY2NTcwODE3LDM3MzMuNzMzNjQ5ODY1NzU1LDIyNC4xOTk2NjAzNTU3MzY2NSw2NzEuOTUxMjY5OTYyOTQ5LDEwLjYxMTEwNDgxMTQ1OTgzOSwxNTUuNTMwNzc3OTEyODk2NCw1NDU5Ny41MTYzMjE0ODczOSw4MzMyOS4xNDcxMDQxMDcwOSw5MTI3Mi43NjMzNDA2MDg4MSwyNTg0Ny45MTgyMDAzOTUxNCw3NTI5My4xODQ2NTA0NDQ2MSw0OTQzNC4xNTQ3Njc5NzA3OSw3NDA4My4xNTgyNzIwNDgyMSw4MjI3My40OTc5MTMzMjAxMSwxNjMuMzA5NTU1MzEzMzQ3NCw1MTA3LjMzMTY2MTI3NDI2MiwxNTU5Ljk0NjU4OTYxNDA4MDMsMC4zNjEyMzI4NjE2NjYxMDA3CisxOCxGcmkgMTEgRmViIDExLDY2MzkuNzgwNTc1NTc5MTk1LDYxMjAuODk1MzQxOTU5NjE0LDk5LjQzODI4NTI3NDAxODE4LDE0MTYuOTI4MTg4ODA2NDU1LDEwMi4wOTcwMzg0ODkxODY1LDU0MDMuNjgyOTU5NDQzNTA1LDU4Ny41MDAzNTgwNTg4NTQyLDEwNjcuMTU1MDQ5MTA1NjY4NSw1MjA4LjcwODg1OTkyMzMxOSw0ODA4Ljk4OTkwNDk0OTgyNSwzMDUuNzQ3MDQxNjEyMDI5LDkyOC4zNDU3MzYyNjA3NTczLDE1LjkwNzkxNzYwMTg0MTc3NCwyMTguNDk4MDgzNDAwNDI1MTIsNjQ0MTQuMzQxNjU5NzgyNDcsOTgzMjAuNjUwNTYzMjAxMzYsMTA3NzE5LjE5MTE5NTM5NjksMzA1MTkuODgzNjg1OTcwMDYsODg4OTMuNTE1NDg3Mzc0OSw1ODMyMy45MjY0MjMwMjgwNzUsODc0NjYuMzk3OTE4Mzg2OSw5NzEzNS43NTQxMDY1NzM1MywyMjYuMDgxNzU0MzQ1NjM3MzYsNjY0MC4zOTUxNjc0MzMwMDksMTk0MC4zNjU4OTQyOTQxMjM2LDAuNTE5OTE0MjY0NTkzODU4NgorMTksU2F0IDEyIEZlYiAxMSw3NzU4LjU5MTQyNjg1NzYyMiw3MTUyLjU2MDQzMjIyODM4MjUsMTMzLjM3ODY3NDgzODY2ODI3LDE3MzAuNjgzODI4NTA1MDA0LDEzNy42ODYwMjczNjk5MzQ1LDY5MzYuNTc2ODIxNDI2MjE3LDgwOC43OTM5NzgwNjkwNzQsMTQ1NC43NDk3Njc0ODY3MDg0LDY2NzguNzM5MzQ4NzA3MjU3LDYxNjUuNTg2ODkxMDkyNjI0LDQxMy44NjAyNzEyOTYzMjUzLDEyNzIuOTg1NTY5ODk1MDQyOCwyMy41NDMxMTMzNzIxMjUzMzcsMzA0LjU3NDQ1MDQ1MDM4ODgsNzQ4MzguMDk5MzU0NjMxNzgsMTE0OTQ0LjE0MTk4ODI5NzksMTI1MTc3LjIyMzAwODA5MjQsMzU0NzcuMzQzMDQxNzU5MjUsMTAzMzIxLjMyNzIxNDk1MDIyLDY3NzY1LjMzNjMxOTAyNTEsMTAxNjY0LjE3MDAzNDExNzEyLDExMjkwMi4yNjE0NzUwNDE2NywzMTAuNjg0NTMwNTQwNDE1NDQsODU5NC4xOTQxMzI2MjI4NywyMzk5LjAxOTM4MDg4NzE5NzMsMC43MzkzOTc1ODM2NDgyMzQ1CisyMCxTdW4gMTMgRmViIDExLDg5MDAuMDQ0MDk0MjIyMzI1LDgxOTguNzQzOTk0MzMyMDIyLDE3Ny42MzAyMTUyOTQyOTg1MiwyMDk4Ljk2MDgxODMzNTMwNywxODQuNDI5MzI3ODI3OTI1NzYsODg2My4yMjY0NTA2MTU4MDQsMTEwNi4xNzM3MDM0NzM4ODI0LDE5NjkuODUzNDE5NDA1ODk3LDg1MjIuMzcwNTQ2NjYxNTIzLDc4NjkuNTcyMTIzODUwMTEyLDU1Ni41MTA1MDkzNTE0NDk5LDE3MzQuMDYyODcxNjgyMDQ0MywzNC40NTUyNDk1NzA4MjYyMSw0MjEuNjU1Nzk0NTEzODA1Myw4NTM4OC42MDI2MjM1MDAxMiwxMzI5MDMuODE4OTExMTQzNiwxNDI4MzMuMzY3ODM0MDYyMzQsNDA0ODUuNzM2MDQ4Njg3MjA2LDExNzg5Mi44MzUxMTM1OTUsNzczMjQuNjA3NTE5Njc4NTgsMTE2MDAzLjQ3NjY4NTIwMjcxLDEyODgyNS41NDY4MzI2MTg4Myw0MjQuMTk1NzM3NDEyODk1MSwxMTA3NC4wNTExOTk4MzgxMywyOTQ2Ljk4NDA0ODMzOTAyNTMsMS4wNDA4MDY4ODQyNDkyMTg2CisyMSxNb24gMTQgRmViIDExLDk5OTUuMDk1NTc3MzkzOTY4LDkxOTIuNjA3NTQyNDAxNzQ0LDIzNC45OTkwMTA5ODc0NTE2NCwyNTI1LjgyMzgyNjIxOTcwMiwyNDUuNTI0MzA1NzUxODgwNDYsMTEyNzMuMDY0NzY0MzA5NTUsMTUwNC4wNjI2OTkzNTIxNDM3LDI2NTEuMjI2OTYyNjM1NjYyNCwxMDgyMi4yNzE1MzU3MzE4MTYsMTAwMDAuMDI4NDE4MzA1NzIxLDc0My44NjM1NjEyNzcyMjI3LDIzNDguMTY2NjQwNjI1NDg4LDQ5LjkzMDkyMzUyMzE2NDc2NSw1ODAuMTY4MTg2Njg0NzU0OCw5NTQwMi41ODQ3MjM3ODIzMywxNTE2OTEuNzg2NjQ0MTg4MzQsMTU5NTY0LjU3NzQyMzcyMzksNDUyMjEuNDY3NTA2ODM1OTgsMTMxNjY1LjQ2ODI2NjQxNTE1LDg2NDAyLjE3NDg2MDM4MTc3LDEyOTU1Ni41MzMwODc2NTI2OSwxNDM4NzUuMjE4MDMzMDE4NSw1NzUuODUwOTM1NzQzNzIzMywxNDIwOC4zODk1Njk0NjIwNDQsMzU5NC45MzY1MzU1MzU1NTYyLDEuNDUyMDUwODA2NzU1MjI1NgorMjIsVHVlIDE1IEZlYiAxMSwxMDk1OC4xMTM0MjA0NzYwODIsMTAwNTIuMzY2NDM3MjE1OTU4LDMwOC45MzE5MTUxOTU5ODQsMzAxMy4zOTIxMDk0NzgyNTE4LDMyNC45ODQ2NTI1NjE5NzEzLDE0MjcxLjQ0MDQxNTEyNzMzNywyMDM0LjE4ODQ3NDYyMzk0NTcsMzU0OC4zNzAxNDI4NDAyOCwxMzY3NC41Nzc2OTEyODE3NSwxMjY1MC40MzYyMTUyODkzLDk4OC43ODk4MTk1NzkzNTIyLDMxNjIuNTE1ODc1Nzg2OTMzNSw3MS43MjQ0NjIwNjczMzcyMyw3OTMuODExNDM1MTYwNjk1NSwxMDQwNzEuMjMwOTQ3MjAxNjYsMTcwNTU4Ljk2MTQ4MzQ0ODQ4LDE3NDAwMy4zNTM1NDM5Nzg1Myw0OTI5MS4yNzM1MTY4ODI4NywxNDM0OTQuNTkyNTE1MDQ1NjMsOTQyNjYuMzYxNTQ1MTIwNiwxNDExOTYuNjAzNDA3ODY2MTgsMTU2ODAwLjAwNDYyNzIzOTc0LDc3Ny42NDU1NDgxOTQ0NDUyLDE4MTUyLjE0NTcwMjU1MjUzNCw0MzUyLjA5MjcwMTU4ODYwMiwyLjAwOTgwNzM3OTM1MDMwMworMjMsV2VkIDE2IEZlYiAxMSwxMTY5Ni4zMDE1MTQ1NDQwNzUsMTA2OTEuMDQzNDU0MzE4NzI0LDQwMy41OTg3NzYzMTY3ODMxLDM1NjAuODIyNzc3OTg3ODYyLDQyNy44MDE1Nzk5NzAyNTg4LDE3OTgwLjM0MzQ3MTgxNDE4LDI3MzcuNTQwMTcxMzE5MDI3Niw0NzI0LjAwNjE1MjUyOTgwOCwxNzE4OC42ODU3NTA5NzYxODMsMTU5MjkuNjE2MTk5NzgwNjEyLDEzMDcuNDQ0NTQ0ODQyMDgwNiw0MjM3LjY2MTQ1NjA0MDI5MiwxMDIuMjE1NzMyMjcxNzcxMTIsMTA4MC40OTM0OTkwMjc4NjkzLDExMDUzMy45OTY2OTY3NDE2OCwxODg1MTcuNzc4MDk4ODcxNiwxODQ2OTkuMDY1MjMwOTU5MjQsNTIyNzkuNjU4MzAyODk4MjA2LDE1MjE3MS44NzY4OTI4Nzc0MiwxMDAxMzcuOTM0MTA5MDc5OSwxNDk3MzQuMjQ0MTY2ODg2MzgsMTY2Mjc5LjA5MTIzNjQ2OTUsMTA0NS4wODI4NTE5NjM1NDQ1LDIzMDg5Ljg5Njg0NzkxODY4LDUyMjQuNzk5OTMwNzI0NTcyLDIuNzYyMDA5NTQ1MzcxMDkKKzI0LFRodSAxNyBGZWIgMTEsMTIxMjUuMDkzMDczNzIyMjU3LDExMDMxLjc5MTUzNDg4NTMzOCw1MjMuOTQ4MDM4MzQ1MjU0LDQxNjMuMjM1NDI4MTcwNzQ3LDU2MC4xMTM1NTA0NDU2OTAzLDIyNTM4LjA4MTgyMTA3NDYwNywzNjY2Ljc0ODAxMTI0NzYxODcsNjI1Ni44ODkyMTYwMzQyOTIsMjE0ODUuNjY0NzE0MzE2NTEsMTk5NjEuOTMxNTA0ODM1NjI2LDE3MTkuODk5NzU5MzA5OTc2Niw1NjUwLjY4ODEwMDc0NTYwNywxNDQuNjE3MDYxNDE2MDc1NCwxNDYzLjQ5MTU2OTYzNzE3NzcsMTE0MDI1LjkzMTYxNjIwMzY2LDIwNDM5NS4xMjY0MDkzNTk0NSwxOTAzNjkuOTY3NDQ5ODUwMzcsNTM4MjIuNDk1MzUzMjU3MDEsMTU2NjM5LjU4MDk2MTI1MTUsMTAzMzIzLjE1NDc1MDMwMDEsMTU0MTI4LjMyMTk4MzYzOTM4LDE3MTE1Ni40NzA5ODE4OTExMiwxMzk4LjA5MzgwMDkyMjczOCwyOTIzOC4yMDQ5NzUyODE1MjIsNjIxNC44MzMxODE0MTc0MDYsMy43NzA5MTY1MTczNTM2Mjk0CisyNSxGcmkgMTggRmViIDExLDEyMTg2LjU5OTIzNzM4MTU4MiwxMTAyNS41NjgxNzY2NDA0OSw2NzUuNzA3ODkwNDM3ODU3NSw0ODEwLjc2MzQ2MTkyMjQ4Niw3MjkuMzcwODYzMjk3MjYzNiwyODA5Ny4yODkxNjY4MjI4NzMsNDg4OC45MjA4Njg4MTQ3NTMsODI0NC44MjAwNDc2MzI4MDIsMjY2OTQuNTg0NzQ5NTA1MzQyLDI0ODg2LjI4NDUwNDkxODI1OCwyMjUwLjc4NTQwMzU0OTk2NjgsNzQ5OC45MDAzNzExMTY1MTIsMjAzLjI0Mjc3OTUxNzExMiwxOTcyLjg3MzkzNjI2OTA5MjIsMTE0MDQ4Ljc3ODEwMTE4NTMsMjE2OTQ3LjU4NDU3MDU2Njk1LDE5MDE5My44OTAyNDc3Mjg2Miw1MzY5MS4xMzk2OTAwNzg1NywxNTYyMzUuMDU4NjMyODAyMzMsMTAzMzY4LjYxNTc3NDI3NiwxNTM3MjYuNzgwMzkyMTg1MywxNzA3MDguMzAwNDg1MDYyOSwxODYyLjE1NDAzMDkyMzQ5MDYsMzY4NDYuMzgyNDQxMDU1MDQ0LDczMTcuNTM1ODQ4NDQ5Njk3LDUuMTE2ODQxODk5MjgwNDEKKzI2LFNhdCAxOSBGZWIgMTEsMTE4NjUuMzM5MTA4OTk1NTYyLDEwNjY1LjI3NzMxODE2MzQxNSw4NjUuMjkxODcxMzIxNzE3NSw1NDg3Ljk4NDYzOTY0MjA1LDk0NC40NzE2MjExMzg4MjYsMzQ4MjAuMzgyMDAwNjc5ODksNjQ4OC45NDE2Mjg0NTY3MjEsMTA4MDcuNjIxOTkyODIzMDU3LDMyOTQ1LjgzMTY4OTY1MzE5LDMwODUzLjIyMjgxNzk0MDM5LDI5MjkuODU5ODI5MTEzMjIyLDk5MDMuODg3ODUxMzgzNzk5LDI4My44NTc1Njg4NzM1MzU0NiwyNjQ3LjIwNzc0NjcyNjQ0MDcsMTEwNTEwLjcyNzU5MTc0MjA2LDIyNTAzNC40NzA1NzA3NzgwNywxODQwNDIuNDMxNjA0NDA4MjUsNTE4NTguOTIzNjczMDk3ODgsMTUwODgzLjYyMjE2MzIwMzE0LDEwMDE4OC4xMTg2NzEyODY2MiwxNDg0NTYuNTE0NDU1MjAwNTIsMTY0ODUzLjY5ODIxODYwODU0LDI0NjkuNjE4NzY0MjU4MDU2Nyw0NjE5NC40Mjc5MjgxNDIzMTUsODUyMC4wNDQ1NTY0Njg0MzgsNi45MDI1Njg4NDMwOTIyMDQ1CisyNyxTdW4gMjAgRmViIDExLDExMTk0LjcyMDM3NTQyMjgwMyw5OTkwLjE3ODY4OTE5NDY1OCwxMDk5LjU1MTc0MzMwNDUyNjMsNjE3NC4wMDA1OTUyODkxODI1LDEyMTUuODMxNDAzMzgwNzEyOCw0Mjg3MS4yMjA3Njg2OTk1LDg1NzMuMTQ5OTI5MDk4OTYsMTQwODkuNjIyNjc4Njc1NjcyLDQwMzYwLjIwMDA1MzcxNzQ2LDM4MDE5LjE0MTMxNjc2NDA4LDM3OTIuMzcyNTk4OTc5ODE4NiwxMzAxNS43MTA5NzUxMTkxMjYsMzk0LjEyMjI2MjAxNDQ1ODMzLDM1MzUuNTU1OTE0MjEyNjczNSwxMDM3NzUuNDA4NDQ1MDIzNjQsMjI3ODE5LjY4ODUxNjYzMTk2LDE3MjU1Ny41Njc0ODUwNDkxMyw0ODUyMC43NTc5OTgzNzE0MSwxNDExNTQuNzg0Mjk1OTU5OTUsOTQxMDcuNzcxMDc5NDMxNjEsMTM4ODc4LjY0ODM3Njc4NTEsMTU0MjE2LjA0ODU3ODk1ODUsMzI2MS4yODQ4Mjc1MjU4MjMsNTc1ODYuMjA0Mzc2MTY4ODEsOTc5OS45MTE0MDU2NTU1MDQsOS4yNTgzOTY1MzUzNDk5ODYKKzI4LE1vbiAyMSBGZWIgMTEsMTAyNTAuNjAxNTcwNDM1MDYzLDkwNzcuNjc4MTczODUxMiwxMzg1LjMwMzUyOTU5NjgxMzIsNjg0My4zNjQ4MTI0NjY4NjQsMTU1NS4zMjkwMjcwODMzMTYzLDUyNDAxLjI5MzQxNDI4NDg4LDExMjczLjIxODM2ODUzODE1MywxODI2MC44NzQ4MDA1ODU1NTIsNDkwMzIuMzEyMjY5MTkwOTEsNDY1MzYuMTI4Njk4OTM3NTQ0LDQ4NzguOTk5ODY2MTE1OTE4LDE3MDE2LjY5ODA0NTI2MjI5LDU0NC4xNTcyNTY2MjgzOTI1LDQ2OTkuNzIzMDU3MzMwMjMxLDk0NTkwLjAyMDc2Mzc2MjE2LDIyNDk1MC4zNDU3NzY5NjI0NCwxNTcwMjEuODE4ODI0ODgzMDMsNDQwNTIuNTk5MDA2MzA3MzMsMTI4MTQzLjcwODkxNDY4OTc2LDg1ODAxLjc5MDIyNDg4NDk2LDEyNjA3MS42NTkzMDYzNTMzNywxMzk5OTMuMTQwMTI1MjU5MSw0Mjg4LjE2NjIxNDcxMjYwNCw3MTMzNS4wMTQwNTQwMTYyMSwxMTEyNC40NTI0NjA1MjE3LDEyLjM0NzYwMjc4OTE4MDkKKzI5LFR1ZSAyMiBGZWIgMTEsOTEzMy44MTM5MDUyODM0NTQsODAyNS4yMjM1NDY3MTM4NjYsMTcyOC41Mzk4MzQ3MDk3NDksNzQ2Ny44OTAwNzQxOTM5NTcsMTk3Ni4wNDM4ODgwNDI3NTI1LDYzNTI4LjM2Mjg5NzI1NzM3LDE0NzQ5LjgyMzUzNzQyMzI1OSwyMzUxNS45MTAwMzE3OTkyNTYsNTkwMDYuODkwNTk2OTQyODc0LDU2NTM1LjU0MjIzMTk5MTcwNSw2MjM1LjAxOTg2NzE4NTk2NSwyMjEyMy45NTQ5MDAxNDAxMSw3NDcuMjQzMDAxMDg3NDE1Miw2MjE2LjYzMjY1Mzg4OTE3Niw4MzkxNC43ODYwMTIyNzUzMywyMTY2NTMuMTE0Njg2NDUzLDEzOTA2My40MDg2MzM0NDgsMzg5MjQuMjM0ODA3MDU4MzMsMTEzMjE3LjI4NTMyMjkwMDA4LDc2MTM4LjY4OTYyMzY3MTA3LDExMTM4MS4yMzgwNzUyMDk3NSwxMjM2NzkuMzU5MDE1NDA5MzQsNTYxMy40MjkwNDI3NTkzNjEsODc3MzcuNjc4MjM2NDcxNDUsMTI0NTEuMDg5MzkxMTI4MzEzLDE2LjM3MTgzNDIyNjI1NDk2CiszMCxXZWQgMjMgRmViIDExLDc5NDguMzc4NzMwMDA5OTY5LDY5MjkuMzg0NzgxNjMyODU5LDIxMzMuMjQzMDM0MDQ0MzI4LDgwMTkuMTM4MzU0MDY5MTQ3LDI0OTEuNjY2NTE2MjA3MzkzNyw3NjMwNS41MzE3NzEwNTYwNSwxOTE5NS4zOTE4ODUzNjU4OCwzMDA2OC4yNDUwMjIwMzI3NDUsNzAyNDYuOTkzMjExMzQ4MjYsNjgxMDMuMTQ3MDM2NTc1MTcsNzkwOC4yNTU3MjY5OTk3MzUsMjg1ODkuMTE4MjMxODQ2NTYsMTAyMC42NzE3NzAzMDAyNDY5LDgxODAuNTg3NzA2MDYzNDE3NSw3MjcxOC45NTc3MjcwMzEyOSwyMDM3MDguNjA2NjU3NzAwOSwxMjAzMTAuMDIwODgzOTY5MzgsMzM1OTkuMjk2OTk2Njk2ODIsOTc3MjMuNDk1MTU2MjMxMjUsNjU5OTYuNjYzMzU1OTQ2ODgsOTYxMzQuMTE4MTY2MzMwMTQsMTA2NzQ3LjkyMTA2NzI4OTMyLDczMTQuMzY0MzQ1NTE5ODUxLDEwNzAzMi40MTQyMTQ4MzEwMywxMzcyOC44MzAwMjc1NTc1MjYsMjEuNTc1NDk1Njc1NTczMDYyCiszMSxUaHUgMjQgRmViIDExLDY3ODMuMTY5NDU5MTI2MzQ3LDU4NjkuNDU1NjI1NTc2MTYsMjU5OS43NDcxNDg1MTAzMzksODQ3MS4xOTMwMjMzMjYyNzYsMzExNS40MjY1NDY3OTMxNjQsOTA2NzkuNjMzNTQwNDUzMjQsMjQ4MzQuNzIzOTgwMDUxNzIsMzgxMzguMTkyOTY2ODU2OTY1LDgyNTk1LjA3MTY1OTY1MjE1LDgxMjQ0LjA3ODcwMTM5ODg3LDk5NDUuMTY0NTAwMjU3OTU3LDM2NjkzLjEwNTQwNzQ5NjM4LDEzODYuNzUxNDM2MDQwMzQ1NCwxMDcwNC45NjI3NTI3MjYxMTMsNjE4MTQuNzA1NzI1MDkyNTksMTg3MzA1LjQ1NTM0ODc5MDYyLDEwMjExMi4wNDU3NjI1MTgwNywyODQ1Ny4zMjExMzYxMzA3ODQsODI3NjUuMTY4NjEwMDYxOTcsNTYxMTIuNzcyMDE3NzEyODIsODE0MTUuNDI3MjM1ODY0MTIsOTA0MDMuNjc3NTY1MDQwNTgsOTQ4NC4xNzE2MjE0NzQ2NSwxMjkzMzUuOTY0MDQ0NjM2MjksMTQ5MDAuOTAwNzQ0NTE4MjgxLDI4LjI0NzU0Mzg3MTk0OTU0CiszMixGcmkgMjUgRmViIDExLDU3MDEuNzYyMTE1Mzk2NTA2NSw0ODk5LjQ1NTMyODI5MDEzNCwzMTIyLjY4Njc2ODA0NTU1MTYsODgwMy4yMjM0NzM3NDc0MjYsMzg1OC4zNTIyMzc0NjQyNzEsMTA2NDQwLjQ1OTA5NDE0Nzc1LDMxOTIxLjY0MjU1NzM4OTc0LDQ3OTMwLjkzMzYwMTYwNjY1LDk1NzMxLjE0NzE4MDY2NzAzLDk1ODM3LjU5ODUwMDkwMzE2LDEyMzg0LjM0OTQ2NDE0OTA1LDQ2NzMyLjY2MDM5NjQwOTIxLDE4NzMuOTM0MjI1NjY2NjQ0NCwxMzkyMi41NzI1OTYwOTY2MDMsNTE3NjkuOTc0NzEzNjg1MDM1LDE2ODgxOS40OTI0MDE4MTczMiw4NTQwMi4yMjgzMDAzMDU1LDIzNzU2LjA3MjM0NjQxNDk5Miw2OTA5MC44NTYzNTAxMDA4NSw0NzAwMy40MTEwMjUzODAxOCw2Nzk2MS40MTUyNTM0NjUyLDc1NDY0LjA0ODE3ODAwNzAzLDEyMjMzLjE3MDE1MDU3NDY4LDE1NDU1Ny43MzE2OTYxMTUyNSwxNTkwOC40Mzc4ODA2MzMyOTcsMzYuNzE4MTQ4ODgyOTQ0MjUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWdpbmdTRUlSRGlzZWFzZV9GRF9SZWZlcmVuY2UvQWdpbmdTRUlSRGlzZWFzZS9odW1hbjF0bzEvSV8yLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWdpbmdTRUlSRGlzZWFzZV9GRF9SZWZlcmVuY2UvQWdpbmdTRUlSRGlzZWFzZS9odW1hbjF0bzEvSV8yLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44N2U0ZWYyCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BZ2luZ1NFSVJEaXNlYXNlX0ZEX1JlZmVyZW5jZS9BZ2luZ1NFSVJEaXNlYXNlL2h1bWFuMXRvMS9JXzIuY3N2CkBAIC0wLDAgKzEsMzMgQEAKK2l0ZXJhdGlvbix0aW1lLEVHLUZSRy1HMjEwMDAxLEVHLUZSRy1HMjEwMDAyLEVHLUZSRy1HMjEwMDAzLEVHLUZSRy1HMjEwMDA0LEVHLUZSRy1HMjEwMDA1LEVHLUxPRS1HMjQwMDAxLEVHLUxPRS1HMjQwMDAyLEVHLUxPRS1HMjQwMDAzLEVHLUxPRS1HMjQwMDA0LEVHLUxPRS1HMjQwMDA1LEVHLUxPRS1HMjQwMDA2LEVHLUxPRS1HMjQwMDA3LEVHLUxPRS1HMjQwMDA4LEVHLUxPRS1HMjQwMDA5LEVHLVVQRS1HMjkwMDAxLEVHLVVQRS1HMjkwMDAyLEVHLVVQRS1HMjkwMDAzLEVHLVVQRS1HMjkwMDA0LEVHLVVQRS1HMjkwMDA1LEVHLVVQRS1HMjkwMDA2LEVHLVVQRS1HMjkwMDA3LEVHLVVQRS1HMjkwMDA4LEVHLVVSRy1HMzAwMDAxLEVHLVVSRy1HMzAwMDAyLEVHLVVSRy1HMzAwMDAzLEVHLVVSRy1HMzAwMDA0CisxLFR1ZSAyNSBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMixXZWQgMjYgSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzMsVGh1IDI3IEphbiAxMSwxMjUuMDQxNTQ2NDY0MTA2OSwxMDguODA1MjgyNjQyNDU5ODksMC4wLDIxLjE4MjcwMTUwNzAzODI5LDAuMCwzOC4zNTk0MzU5MDI1NDQ5NDUsMC4wLDAuMCwzNy4yMjIzNDQ2MjE4MDc2NiwzNS40ODA0NzQ2OTMyMDcwOCwwLjAsMC4wLDAuMCwwLjAsMTY3MS4xMzc0MDAwMDAwMDAzLDMzMDcuMzA3MzYzMzIxMjA2NiwyNzc3LjgxNzA2NDIyNjMwMzUsNzgwLjI3MDMzMTg2NDIxMjYsMjI3My40NjM4ODcyNDkwMTIzLDE1MTQuMTExNDExMDQ4ODk0LDIyMzYuNzA3NjMwOTI1ODY4NywyNDgzLjk4ODA0NjAzOTcyNzYsMC4wLDQxLjIyNTU0NDgyMDk4OTc1LDI0LjIxODU3NzY5MjU2NDcsMC4wCis0LEZyaSAyOCBKYW4gMTEsMjg2LjEwOTMzNTMyMjAxMDUsMjQ4Ljk2NDE4MjE1MDMzMDQzLDAuMCw0OC41MDI0NDQ4MjY3OTQ4NywwLjAsODcuODQyNTk0NzU5NDUzMTQsMC4wLDAuMCw4NS4yMzgzNTQ4MjQ1NDIxOCw4MS4yNDk4NjM5MTY1MjA0MywwLjAsMC4wLDAuMCwwLjAsMzgyMi40Mjg2MjQxMjc2NjE0LDc1NjYuMTA1OTgxMDQ0MjUxLDYzNTMuNzY0NjM5MDQ5NTk0LDE3ODQuNzMyNzg2MTY3MDM0Niw1MjAwLjE0Njc0Nzk0NzY0MSwzNDYzLjI2MjA2NDQzNzQzMSw1MTE2LjA3MzQxNDI4MTQ2NSw1NjgxLjY4MzE3NDI3ODg4NSwwLjAsOTQuNDA2NDEyNjMzMTcyODYsNTUuNDU2MTAzMDI2NzM0MzI2LDAuMAorNSxTYXQgMjkgSmFuIDExLDQ2Ni41MDIxMTcwNjg4NjYxNCw0MDYuNjA3MjUxNDgzNDU2OCwwLjA3ODE4OTc4NDQwNzA3MjU0LDc5LjQ1Mjc5ODI2MjI5OTEsMC4wNzYwMDQwNDYxMzU1MTM1OCwxNDYuMjc4MDQyMzMzNjEwODQsMC4zMzEwMDAzMTM3NzgzMjcwNiwwLjY4MTQ2OTc0NjQyODgwOSwxNDEuOTM0OTg0MDYzMzQ4OTYsMTM1LjEzOTAzNzkxNTAwNzc1LDAuMjE3OTYwMzYwNTg5NzYyNiwwLjU0OTU4ODE5NzE1MzEwNzksMC4wLDAuMDk5OTIxMTg0NzA5OTgyNiw2MTYyLjQzMTk3Njc5NzQ5NiwxMjEzOC4wNTg3NzAwOTA5MjQsMTAyNDMuOTI3NTEzNDkxMTczLDI4NzcuNjY3MzkyNDk1OTIxNCw4Mzg0LjY3NTU2ODExNjExOCw1NTgzLjMxNzM4Mzg4MDg0Myw4MjQ5LjExMjQwNDc4MTk4OSw5MTYxLjEwMzEwMTk5MzExNiwwLjEzMTU0OTkxMDUzNTM0NTczLDE1Ny43Mjg5ODk0MTMyNDA3LDkxLjE5MDkyMTQyNjkzODM5LDAuMAorNixTdW4gMzAgSmFuIDExLDY2NS41MDkzNTIxNTc3NTQyLDU4MS41NjE4Mjk3MjAyNDUxLDAuMjg3NjU2Mjc0NTIwOTg0MSwxMTQuMTQ2Mzg0MjU4NDg1MzMsMC4yNzk2MTUyOTMxMDQxNjQ2NiwyMTUuNDgxODkzMTU5NzU1NTQsMS4yMTc3OTE4Mzk2ODM2MDQ1LDIuNTA3MjA5NTI1MDk2MTI2LDIwOS4wNzAyMTgzNzgwNDA3LDE5OC43MTg3NjE4NjcwODU3LDAuODAxODk1MDkxNDAzNTkyNywyLjAyMjAwNjA3NDQzNjQ0OSwwLjAsMC4zNjc2MjI1MDc4NjExMDY4NCw4NjM1LjY5MDk0NjE0Nzc0MywxNjg3Mi42NTE3MTM4NTc5NCwxNDM1Ni40NzYyNjgxOTU3NzUsNDAzMy40MTkyNTA5NjAxNzA4LDExNzUyLjM0NjA1NDQ2MzI1NCw3ODIzLjk4MDgyNDQyODE5NiwxMTU2Mi4zMjUzODI2MzM5OTksMTI4NDAuNjI3NDI3NzUxMTczLDAuNDgzOTgzODkzMTgzMjUyMywyMzMuNDk4NTc4MDE3MDUxLDEzMS43ODYxMDk3Njk5ODU4NCwwLjAKKzcsTW9uIDMxIEphbiAxMSw4ODkuMTU2NTM5NzY3MTk1LDc3OS41Mjg0OTc3NzQ3NzEzLDAuNjk3ODIxNDE5ODk4MDc2NiwxNTMuODA2NjUyMjgwMzQ0OSwwLjY3OTQ1NDk2MTM2ODI5MDIsMjk5LjcxMjE2Mzg3NzU3NTU2LDIuOTkwODI3NjYyNDk3MTgsNi4xMjkwNjA5OTk3MDM5NDIsMjkwLjc2NjE2MjI4MzE4NjY1LDI3NS43ODY1NTMwOTcxNzAzLDEuOTUxNDg1MDc1MjY2Mjg2LDQuOTU2OTM4NTU4Mjc1OTI5NiwwLjAwMzEwNDI1MTU0NjY2NDY5NTQsMC45MTE1MjgxODgwMjI4OTY2LDExMjg1LjUzNjg1NTk4MTgzNiwyMTgxMy45NjQ0NTM4MjE2NiwxODc2My45ODM2OTYzMDAwNjMsNTI3Mi41OTM0ODYxNzc2NjYsMTUzNjMuMjE3MTE4Njc1MzI4LDEwMjI0LjQ1NTc4Nzg2ODIzMiwxNTExNC44MDExMjM4MjAxNTQsMTY3ODUuODgwODUwMjcwODM0LDEuMTg2ODg0MTcwNDQxNTM5MiwzMjYuNzkxMTA3MDc4NzE0MDUsMTc4LjkxMTI0NTcyNDMyMjg0LDEuNTk4OTUxOTU5ODc5MTE1N0UtNAorOCxUdWUgMSBGZWIgMTEsMTE0Ny43OTg1NTI3NDIwNzUxLDEwMTAuMDk4NTE4MTU1Mzk1NiwxLjQwOTQzMzcwNTUyMjQ1NjQsMjAwLjQyMzM3MzMyMTgyNzI4LDEuMzc1ODI2MjY5NzY3OTYxLDQwNS40OTY4ODgyOTI3ODAzNCw2LjE1MjY2MzQ1OTAzMTkwNCwxMi41MjI0MzY1Nzg4NzcxNjYsMzkzLjM0MDU0MTk1ODI0OSwzNzIuMTc3MDY3Mjk4Nzc0LDMuOTYwNDAxNTIyNDM3NTE4NiwxMC4xNzAxMjI4NDYyNTcwMDMsMC4wMTU3NjYxMzI3ODg5OTgzODYsMS45MDEzNjc5NTQzNTIxMTA3LDE0MjEwLjg0NTIyODYxNTAwNCwyNzEwNS4wMTE1Mjc3NjQ3NiwyMzYzMS42Mzk4NjI3MTM4MjYsNjY0MS45Mjk2NTU5Mjc1OTEsMTkzNTMuNDgwNDQwMjEyMTIsMTI4NzQuMjUyODcwNTkxMDc1LDE5MDQwLjUzMzM4MDkyODk3MywyMTE0NS42NzM5NjUwODk3LDIuNDM2MzQyMjkxMTA4NTM1Myw0NDUuMzcxNDk5OTMxMjYwNzYsMjM1LjIxMTk5MTcxMzA0Mjk1LDguMTIwODU0MjA1ODgyOTkxRS00Cis5LFdlZCAyIEZlYiAxMSwxNDU1LjMzODExOTU0NjI0NDgsMTI4Ni4xMjczODczMzY2NjQsMi41NjU0MzA1OTIzMzA5NDcsMjU2LjY1NTgzODEzMTg3NzgsMi41MTE4MzUyNDg4MTcwNjAzLDU0MS43NzAxNTA5MDE3MDQ1LDExLjQ0MTIyOTc4NDUxMzEzNywyMy4xMDE0MDM2OTUwMzgxNjUsNTI1LjQzNTM5Nzg2Njc5MjEsNDk1Ljg2NzE5ODI4NTA5ODIsNy4yNDk1MDQwNjY1NTI1ODksMTguODUzMzI4ODI0Mzc1MjE4LDAuMDQ5NDk1NDQ3ODg3NjIxMzIsMy41OTE2NTQzNTY1NzYyOTUsMTc1NDkuODI5MTU0OTc2MTM0LDMyOTUwLjc4NjE3MDQzMTA0LDI5MTkwLjQwMTIxMzQwNjkzNCw4MjA2Ljc5NDQyNjc4MjY0NiwyMzkxMy41ODY2MzY4Mzc2NTYsMTU4OTguNDk5Mzg3Mzg1MTM2LDIzNTI2LjkwMjI2OTQ3MjM2NCwyNjEyOC4xMDU5MTYxNTE0NDYsNC41MTkzNDM2OTY2NjYyNDcsNTk5LjkyOTM5MDg2MTk2LDMwNC4yMzY1Mjk1MjIzMTk5LDAuMDAyNTA1MDU5MjA4ODQxMzk1NgorMTAsVGh1IDMgRmViIDExLDE4MjkuMTEwMTI0MTU5NDQzMywxNjIzLjY3NTczOTYyNDgxMyw0LjM2NDg2MTAzNDg1MjY2MSwzMjUuODQ1NDQ4NDg5NTI1NSw0LjI4NzkwODgxNzM0ODg1OSw3MjAuMjgyMzI3ODA2MDIxNywxOS45MTkyMTcwMzk2MjU1NDcsMzkuODc2NDkzOTg4ODIwMDYsNjk4LjQwOTc1MTY0NjE3NzUsNjU3LjMyOTU0MTQ1Njk5MDIsMTIuNDEwODA0MDY3MzYzMjY0LDMyLjcxNDA4Mjg4NzU0MzQ4LDAuMTIzNzkxMTU4NjkxNzk2NzMsNi4zNTYyODExNjQzMTIwMjgsMjE0NzUuMDI3MDg0ODEzNjUzLDM5NjA0LjYwMTU4OTUzNjg1LDM1NzI4Ljc3NzcyMzc3NjM0LDEwMDQ4LjkyMjA0MjU0NDU3MywyOTI4MS42NTUwMTE1MDI1MywxOTQ1My4zOTIzMjM4MjAzMiwyODgwOC4xOTMzOTgzMjE0NjIsMzE5OTMuMzY2ODYzNzY2NDIzLDcuODQ3OTMyNjA3MzE5NDI4LDgwNC42NDMzMzA0MTUzOTUyLDM5MC40OTA1OTY5NjY2MTk5MywwLjAwNjA4OTI3NzgyNDAyMDgwMgorMTEsRnJpIDQgRmViIDExLDIyOTAuMDIzNzEwNzQ2NzQ4MywyMDQyLjE2ODEzMDk1NDU0ODgsNy4wODAzNDc0NzQ4MDkwNDUsNDEyLjA4NTM4NDczNDg0NTQsNi45ODAxMzEzOTA0MjY4MTIsOTU2LjIxMTMyOTIxMTE0MTcsMzMuMDg5OTU3NDEzNjM1OTE1LDY1LjY1Njk5ODM2MDYwNDYyLDkyNi45MjUwMjUwODU2MjYyLDg3MC4wNjU2Nzk4MDI4NzU3LDIwLjI2MzI3NTQ5Mjc3OTgzLDU0LjE1NjAxNzg1NjQ4MjkxLDAuMjcwMjA4MjMxMzA4MTczNiwxMC43MzM5OTQ5MTc0MDA2OSwyNjE5Mi44MDE0ODQ2MTI1NTUsNDczNjQuMjcyNDI1ODEzNjE1LDQzNTkyLjEzMDYyMDkwMjEsMTIyNjYuMjY5NzQ1MDE2NTYzLDM1NzQzLjA0MDAxMDIwNDgzLDIzNzI1LjczOTk4MTI4NjEyNiwzNTE2NS4xNzUwMzk0OTI1NiwzOTA1My4yNjc4NDQ4OTUyOTQsMTMuMDAzNDAyNjg1MDM1MTA5LDEwNzcuOTk2NDQ4Mjg2MDk0Niw0OTkuNTY1OTUzOTkwMTAxMywwLjAxMjgzNzEzMjc5NzI3MDU3NworMTIsU2F0IDUgRmViIDExLDI4NjIuNzEyNjk2MjMwODgwNywyNTY0LjU0NjU0OTQ1MDc0MywxMS4wNzkzMjI3NzEyODI1NTQsNTIwLjMxNzU4NjgzNDU3MzcsMTAuOTYyNzMwNTE5NTU3NTcsMTI2OC45MzAyNDU1MjUyNzIsNTMuMDQzNTczNDI2MjU2MTgsMTA0LjMwMjYyMzI1OTkzMjA4LDEyMjkuNjc5MDU4OTU0NjEyNCwxMTUxLjI3ODE0NzY2NzU5OSwzMS45MjE2NzI2NDIxNjE1OCw4Ni41MDUwNjg0MTIzNjE0LDAuNTM3ODk3MzEyOTUyOTgwOSwxNy40ODY2MjIwODIzNDg1MSwzMTk0My43NTY1OTk3ODE5LDU2NTcxLjc4MzQ1MDM2MTM5LDUzMTgzLjQ5MDE1OTgwODcsMTQ5NzMuMjk3MjQ5NTkzMjY4LDQzNjMxLjEyNzIyNDE0MzMyNSwyODkzMy4zMzk5NTgxNDYxNTMsNDI5MjUuODg1NzczNDM2NDE0LDQ3NjcyLjExNDQzNzk1MTYyLDIwLjc5MTkxMTY4NzA3NjAxNiwxNDQzLjgwMDEyMjg2MTI4OTgsNjM4LjMwODk5MzMxNTE5MjcsMC4wMjQ1OTkyMzEyMDAzNzEzMjYKKzEzLFN1biA2IEZlYiAxMSwzNTc1LjUyOTcyNjI1Njc5ODMsMzIxNy4yNjY0OTg2MTEzMTcsMTYuODUwMjM1MDA5NjY2Mzc4LDY1Ni40NDM2Mjk3NTgzMTg0LDE2LjczNjA4NDI5MjUyMTQzMywxNjgyLjk0MjIzNjA1NjY3NSw4Mi42NDQ1MTExOTYxNzAxMywxNjEuMDQxNzA3NTk0NDU5NzIsMTYzMC4yOTc2MDk4NDkyOTczLDE1MjIuNjg5NTkyNzc2NzQyLDQ4Ljg4Mjc2NjMzNDQ4NzM4NiwxMzQuMjk4MDAzNjIxMTQ0NzcsMS4wMDEyNjc2MTcxMjEwNDczLDI3LjY3NDk0OTcwMTA3OTI3LDM5MDAxLjk2MTk3NzI4OTg5LDY3NjEzLjI2ODExNjAxMTI4LDY0OTYyLjM1ODM0Mjk0MjE4NSwxODMwMC42NjgzNDI3MTc2Miw1MzMyNi40Mzg1MDI0ODM0ODUsMzUzMjQuMjgxMDIxMTYzMTQsNTI0NjQuNzU5Mjk4NDEyNTYsNTgyNjUuNzMzMTAxMjY0NzEsMzIuMzE1Njk2Mjc4MDY3NDksMTkzMi40NTE2NTg3NjIzNjIsODE1LjAxNjcxNTkyNDI4MzUsMC4wNDQwMDkyMzUyOTY2MDU4NQorMTQsTW9uIDcgRmViIDExLDQ0NjAuMjQzNTk4OTM3MTk0LDQwMzAuMDAxMDU5MzIxNjc5MywyNS4wMzU3MDI5OTM3MDM4LDgyNy40NDUyMzYzNzE1NDY5LDI0Ljk2MjQ5MzQ5MjA3MzI2LDIyMjkuMDMzMTMwNDQ2MzQ1MiwxMjUuNzc3NzM3MDU5Njc1MDIsMjQyLjg4MzM0MTQ5NDg1MzE0LDIxNTguNDI5NzUzODUzNDQ4MywyMDExLjU1MzE0MzE2MDkwMjQsNzMuMTM2MTMzOTA1OTAyMTEsMjAzLjY1OTE0ODczMDExODA2LDEuNzcwNzA5MDcyMzI4ODkyNyw0Mi43NTk2OTk4MTcxOTI3NzUsNDc2NzEuMzkwNDUwMjk3MSw4MDkxNy40OTQ2OTIxMjA0MSw3OTQzOC44MTcxMzg1NDg1NiwyMjM5My42MDgyNTQyNzY2NjQsNjUyNTEuODEyMjY3MzA0NDg1LDQzMTczLjczMDE4NjUwNzE4LDY0MTk3Ljg4ODE4OTMzNTI1LDcxMjk2LjIwODc1ODA3NTY2LDQ5LjA2NjQwMDU3OTAzNTQ5LDI1ODIuNTAyOTI0MjY5MTQ2NywxMDM5LjY1OTYwOTE4MTkyOTcsMC4wNzQ3NTY4MDQwNTAwMjA4NgorMTUsVHVlIDggRmViIDExLDU1NTEuMjcxMjA0NzQ4MTMxLDUwMzQuODg4NDA0NjA5MTY4LDM2LjQ3NTA5ODUxMzc1Mjk3NSwxMDQxLjUxMTc0MTc3MjIyOTIsMzYuNTEyNTU5Nzc1OTg0NjMsMjk0NS43MTA3MTU3MTY5MTM1LDE4Ny42NzU5OTExODYzMDUyOCwzNTkuMTU4NDE5MzUwNDMzNSwyODUxLjExMDM0ODg2MDIyNSwyNjUxLjkxNDcxODc0MTQwODMsMTA3LjMwODYwNDc2MTQwMSwzMDIuNzk4NjUyMDk4Nzk2MywzLjAwNzYyODU2NjI1Mzk3OTIsNjQuNzM3MzA3ODk1NDIyMjMsNTgyNzcuODUyNTk3NDg5MjgsOTY5NTEuMzczMzA2MDQ0MDksOTcxNjAuMDI5NDAyMzkzNzYsMjc0MDguMDc1ODY2MzQ5MDUyLDc5ODYxLjIwODgwNDgzMDczLDUyNzc2LjY1MjY2OTA4OTIyLDc4NTcyLjAxNDkxNDU4MDksODcyNTkuNjU1MTM1NDEyOTMsNzMuMDQ4OTU3Njk0MDE2OTMsMzQ0Mi42NDM1MzE1Nzg5Nzc3LDEzMjQuMTMzNTY1NTM1MTI5MywwLjEyMTk1NDM4ODk5MjM0NzQKKzE2LFdlZCA5IEZlYiAxMSw2ODg0LjIxNjIyMDQxNzk2OCw2MjY1LjA5OTg5NjQyMTc4OCw1Mi4yNTkzNDMzMjcxMjUzOCwxMzA4LjE2NzQ4OTkzMjI3NDcsNTIuNTI1NDcxNzk4NDQxMTQ2LDM4ODEuMDAzMjE2MTU0ODUsMjc1LjM1NTU2OTYwOTYzMzU2LDUyMi4yMzE1NDUyMDAyODksMzc1NC40NTQzMzc5NzMxNjA0LDM0ODYuMTkxNTY2Njc4MDk0NywxNTQuODUzMTAxOTA2NTI3MTcsNDQyLjY3MjgzMTYxMzYyNjcsNC45NDU0NTA4OTEwMTc1NTEsOTYuMzIyNjI2MjkzNjk0NSw3MTE1NC4yMzExMDAxNjAyNiwxMTYyMTAuNjk5MTI2MjA2MTMsMTE4Njg1LjM5Mzc2OTgwMTY1LDMzNTAzLjY2NTcxNjk4MjI5NCw5NzYxOC45ODE0ODAzNDM4LDY0NDM0LjQ3OTczMjYzNzk5LDk2MDQ0LjE0MDAxNzE1NjY2LDEwNjY2My41NjM4NTIyMDU4MywxMDYuOTQ2MzYxMDg3NjQxMDQsNDU3NC4yMTI0NTQ4ODE1MzYsMTY4Mi41Mzc4OTY2NTA1Mjg2LDAuMTkyNjMwMTYzMzc4OTgzMworMTcsVGh1IDEwIEZlYiAxMSw4NDkzLjQyNTIxNTUwNDY1Niw3NzUyLjQ0NzU4MTY4MjI5LDczLjgwMDkzODI0NjMxMTIyLDE2MzguMzgzNjIyNzAwMzAwNyw3NC40ODY5NDY5MjUxNTUxNyw1MDk0LjY4Mzk2NzcyMjk5MywzOTguMTk0MDcxMzcwNDI5NCw3NDguNDMzMjQyOTE3NTU5LDQ5MjUuNzM5NjM4NTI3OTcyLDQ1NjcuMTI3MDY3MTE2Mjg2NSwyMjAuMjk0MzIzMTAwOTU3ODgsNjM3Ljg1NTM2ODg4NzYxMjMsNy45MTg3NTE4Mzk0MjA2MTMsMTQxLjE5MzYwMzkxMTQ3ODUsODY2MTYuMzE2NzMyODMwNDYsMTM5MjAzLjc1OTUyMDQ1MTgzLDE0NDU0NS43NTEwMjUzMTg0LDQwODMxLjkwMDI1NjMwNzU5LDExODk2NS43MTc3NjYzNjA5LDc4NDMzLjI4NDg1MTEwNjM4LDExNzA0Ny45MTA4NTY5MzgwOSwxMjk5ODkuNDcxNjk1NTU4OTcsMTU0LjMzNzg4OTYzOTQwOSw2MDU0LjM1MzYxMzY0NDA0MjUsMjEzMS40NjU4MTkxNzM1OTI1LDAuMjk2Mzg3Mjc5NjgzOTI3NgorMTgsRnJpIDExIEZlYiAxMSwxMDQwOC4yNDk3NDA1NDMxMTcsOTUyMy43MzMxNzc4OTk2MSwxMDIuOTIyNDE0Njc1MDA2MjgsMjA0NC42NDcxMjM0Njg4NDEsMTA0LjMyOTA2Njc3ODU1NTY4LDY2NjAuOTc3MzY3NTIzNDE5LDU2OC42OTEwNjQ1ODM0MTI1LDEwNTkuMjcwOTU2Njk3MDI0Myw2NDM1LjkxOTc1MDk4NDA2Miw1OTYwLjE3MjQyNDM4MDQyNywzMDkuNTQ1Njg0Nzc2NzE4OTMsOTA3LjY3ODMyOTA1Mjc0NzEsMTIuNDAzMzc1OTQ0MjE2NTk5LDIwNC4zMTY3NDExOTEyODU3MywxMDQ5MjYuNDQ2Nzk0ODk0OSwxNjY0MjQuODM5NzI0NjY0ODQsMTc1MTgxLjg2MDAwOTkxNDE4LDQ5NTE4LjUxNzc2NDEyNDM1LDE0NDI2Ni42MDA2NzgwMzg2NCw5NTAxMC45MzQ0ODc0MjU5NCwxNDE5NDIuODAyMDk4ODI2NzcsMTU3NjM2LjUxNzAyNzI0MjcyLDIxOS45ODYxNjc0NDk5ODM1LDc5NzkuOTI3NTU4NDAwOTc0LDI2OTAuMjc4NjMwMjk0ODY4LDAuNDQ2Mjc5NzM4OTk3NDkyMQorMTksU2F0IDEyIEZlYiAxMSwxMjY0Ny43ODA0Nzg5Nzg3MDIsMTE1OTUuNjI2MDIwMjMzMTQ1LDE0MS45NjY0NjAwMDA0NzYzLDI1NDAuOTQ2MTA2MDMwMDA4LDE0NC41NTY3NzQ3OTc5MzczOCw4NjcxLjc4MjIwNjgyNzQ3Myw4MDMuNDYyMTIwODU4NzM0NiwxNDgyLjk4ODA5NDc1NTE5ODcsODM3Mi41ODI4MDk1NjU0ODksNzc0Ni4zMzEwMjcwMzI3ODc1LDQzMC4zMTQyMzEyNTI3OTgzLDEyNzcuNzE0NjQ1MDA5OTAxLDE5LjA3MTI5NzgzNzgzOTk0LDI5Mi4zNzY5MTc4ODIwNTIsMTI2MjQzLjAyOTQxMTE2NDQzLDE5ODMxNC4zODc2MzI4OTA5NSwyMTA4NTguODY1OTE2NzQyNzQsNTk2MzguNzk5MDM4MjIwMjEsMTczNzM5LjUyNTk2MzQ5MTEyLDExNDMxMS40NzIyMDAwMTU1NSwxNzA5NDMuMzYyNDkxMzkxMTMsMTg5ODQyLjg2MDE3ODM2NjI1LDMxMC4yMTIwMjQwNzkyNjExNCwxMDQ3Mi4yODI2NzkzNjg4OTYsMzM4MS4zMTU1ODM2NDMxNzMzLDAuNjU5OTY4MDA4Njc5MDE5NQorMjAsU3VuIDEzIEZlYiAxMSwxNTIxNC4wNzQ1MzgyNjY5MiwxMzk2OC4xMjIzMzAxNTg3NzQsMTkzLjkzMDc3Njc2MjIyODQsMzE0Mi42MTUzODEwNjY5NzQsMTk4LjQwNjMwNTg3NTM2MDU0LDExMjQwLjQxOTM3NzczODgwOCwxMTI0LjUyODM3NTAxOTg2MDUsMjA1Ni41NTI1MDM0Nzc5MjEsMTA4NDMuMzM2NzY2MTkwOTM0LDEwMDI1LjQ3ODgyMDQ5MTkwNCw1OTIuNjEyNjI5Nzk2ODg3OSwxNzgxLjY4ODg5MDc3MDIzMTksMjguODY1MTc3NDgyOTE4ODgsNDE0LjM0MTIyNDYxNjkzNzg0LDE1MDU1Ni42MjU0NzY4NDU0LDIzNTIwMy4wODE1NjYyOTYzLDI1MTU1Ny45MTY5MDc2MjgzLDcxMTg2LjI3MzIwNTM2NDE4LDIwNzM2My45OTk1NTYwMzkzNCwxMzYzMjcuMzI2MTU0ODM3NDQsMjA0MDI5LjUzMjAwMTE2OTE0LDIyNjU4Ni4wODU2OTMzMTk4NSw0MzMuMzgwNTkwODk1MTM1OSwxMzY4Mi45NzE4NjI5NzYzMjcsNDIyOS45Njg3NjM1NDQ1NywwLjk2MTIzMzU5NTM1ODQ0NDgKKzIxLE1vbiAxNCBGZWIgMTEsMTgwODQuNDAyNjI2OTgzMDg3LDE2NjE3LjE1MjIyNjk4OTc3LDI2Mi42MzAwNTEwNjcxNDQ3LDM4NjUuOTcyNzEzMDQ4OTE5NiwyNzAuMDQxMTU3MjkxNDY1OTQsMTQ1MDUuODY2ODU3MjgxOCwxNTYwLjk3NzcxNTIwOTc2MSwyODI4LjE2ODE3MTIyNTg4NjUsMTM5NzkuNTQ1MDU3OTQ5NjkyLDEyOTIwLjE0MDQ5MTg4OTIwNiw4MDkuMzk5NTUxMzIwMTU4OSwyNDYzLjkyMDQ4NzY0MzI1NjQsNDMuMDk5MTEyMjU3ODExMTcsNTgyLjE5MzgzNTU2NDc5MTcsMTc3NjE4LjE4NDQ2NDQxMDUsMjc3MjM4Ljg1MzUxMjg2MjgsMjk2ODU0LjUzMzQxOTc1NTM1LDg0MDM3LjYyMDY3MTA1MzAxLDI0NDc3OS4wNjIzMjYwMzIwMywxNjA4MzQuMzcxNzY3MDEwNzcsMjQwODQ2LjE0NDk1MTQ2NzgsMjY3NDcxLjYwMzE1NjYxMjgsNjAwLjUyNzQ5MzE2NzcwODYsMTc4MDAuNDY4MjMxMDM1ODQ0LDUyNjQuNTI3NzI3NjI3NDM1NSwxLjM4MTk1MTM1NTk1MjQzOTIKKzIyLFR1ZSAxNSBGZWIgMTEsMjEyMDMuODA4NjcxNTMyNjMsMTk0ODcuNjYzNzU0NTIyNDE1LDM1Mi44ODU4NjA5MDM1OTAxLDQ3MjcuNjY4NDAwNDE5NTgzLDM2NC43OTExNjcyMDA0NzAzLDE4NjM3LjM3OTcwNzg0OTk1LDIxNTEuMDg5NjE5MDYwNzA4NiwzODYwLjQxNDUyMDg3MDc3OSwxNzk0MC4yNTYzODczNTM0NDUsMTY1NzkuNjUyMjc1NjAyNTksMTA5Ny4zNzA5OTk1NDA3OTYsMzM4Mi40MjE4NTc0NzM4NjA3LDYzLjU5NDA5NDQzNDg0NjU1NCw4MTEuODg3NzkxMTIzNjQzOCwyMDY4NzIuMjU1MTY4ODgwMzQsMzI0Mjk5LjY1MTkwMTQ2NSwzNDU4MDUuNzI5OTUwODAzNyw5NzkyMC4yMjYyMjQ2MDI2NCwyODUxODkuMDY3NzMzMzMxLDE4NzMzMS40MDYyMjQ2NTQ5NiwyODA2MTAuMTUzNjkxMTE0NywzMTE2MjkuNjM0MTczNTY5NCw4MjYuMTYwMzc5MTA3Nzk2OSwyMzA1Ny44Nzc5MjUyMTkyNiw2NTE1LjY3NjI5NjgxODA3NCwxLjk2NDY0MTM4NjI5NjAwMDgKKzIzLFdlZCAxNiBGZWIgMTEsMjQ0ODAuMTQ5NjU5NzQ5MDA0LDIyNDg5LjM1NjE5OTk0MzEwNCw0NzAuNzQyNDE4OTQ5MDIwOSw1NzQzLjY3NTkzNTgxNDM3Niw0ODkuNDM5NTA3ODA4NDM1LDIzODM5LjI5OTE2OTYxOTc1NywyOTQ1LjAzMjcyMTUzMzU5NTYsNTIzNC4xMjI2MjM2Mzc0NDcsMjI5MTYuMDU3OTI5NDM4NTg2LDIxMTg0LjU3MjUzNDg5MTY4NiwxNDc3LjkyNDM3NTE3NjkwMzEsNDYxMi43OTEyNDkyODczMjYsOTIuODU5MjQ1NTUwMTYyNzQsMTEyNC41Njk3MDMyMjEwNDczLDIzNzQxNS45MjQzMjMwODA5MiwzNzU5MDAuNzA2NDc2ODU5NzUsMzk2ODgxLjQ1NzI2NzM5NDIsMTEyMzkyLjc5NzkyNzY5MDE4LDMyNzMwNy42NDQxMjA1MTk0LDIxNTAwMi43NzAwNzI0OTQxNywzMjIwNTUuNDQyNTUzMzgzNjUsMzU3NjUzLjk1OTMyMzIxNjYsMTEyOS4yNzgyNjEyNDk1NDU1LDI5NzQxLjU1NjgyMzk4NzA2Niw4MDE1LjUxMDc2MzY3Njk1MywyLjc2NTc0ODIzMjk2MzM1NgorMjQsVGh1IDE3IEZlYiAxMSwyNzc4NC4zNjk3NjcwMDAyMDgsMjU0OTcuNzM5NzQwODMzMDIsNjIzLjcwMDk4NjY2NjIyNzIsNjkyNy44Nzg2MjI4MDUyNjEsNjUyLjU2MDQzNTQ3NTc4MzIsMzAzNTUuNzIzMjEzMjY4NTQ2LDQwMDguMjYwNzMxNTQ0ODA3Niw3MDUzLjA5MDg1NDU0OTc0NiwyOTEzMi40MjM3OTU2NjAyOTIsMjY5NTEuMTAzOTg0MDEwMjg2LDE5NzguMzEyNDYwMzc2NDU1NCw2MjUzLjA1MTk3MDQ2NzM3OSwxMzQuMzMzMTMxMzkyMjgwOCwxNTQ4LjE0NDQyNTMxNzEzMTQsMjY4MDA4Ljk5MzQ3MjYyNjI2LDQzMTExMi43ODgyNzEzMzA3Niw0NDc5ODMuOTM0MjgzMzk0NiwxMjY4NTEuNzQ5NzAxNjM3ODksMzY5Mzc2Ljc1NDc3OTA5Nzc0LDI0MjcyNy4xODY2MDU1MzYyNiwzNjM0NTEuNTg4MTUyMjI0Myw0MDM2MjIuNzk2ODU4NDg0MTYsMTUzNC42NTg5NDE5MTgyODYyLDM4MjAwLjM5MzkxMzA2NDA2LDk3OTUuOTU1NDE0NzkxOTUyLDMuODU5ODIyMTcwMTUxMjAyCisyNSxGcmkgMTggRmViIDExLDMwOTU4LjQ1MzkxMzE2MDI5NCwyODM2Mi43NTc4Njc1ODk4ODQsODIwLjk1NzY2OTEzOTI4NCw4MjkwLjI2NDc3NTM1MDM2Niw4NjQuOTA2NzcxMzU0MjI4MiwzODQ3NC41MjczOTU2MTY2OCw1NDI1Ljc0NTEzMDYyOTcyOCw5NDQ5LjcxNDAyODIxOTY5MiwzNjg1MS45MTgxMTcyMjk5MiwzNDEzNS4xNTUzODk3MzU4NywyNjMyLjk5MzMzNTcwNjA4OTUsODQyOS41ODk1NzU0NjY1MjUsMTkyLjcwMzQ2ODE0MzQyMDQ1LDIxMTkuMjU3NjY2OTk5ODA5MywyOTcxNTYuODc0MTYwMjQ2ODcsNDg4NTE1LjQ3MTE0ODA0NDYsNDk2NTkxLjE3NDkwNzkwNDcsMTQwNTczLjc3ODAwMDcwOTYsNDA5MjkxLjA4NjUxOTEwMDI0LDI2OTE1Mi4zMTE1NTQyMjk5Myw0MDI3MjYuMzQxOTg1MzIwOSw0NDcyMzQuODY5NDUzOTAwMjYsMjA3NC40NzI1NTUxNDM5ODMzLDQ4ODU1LjI5OTEzMDgwMjgyLDExODg2LjQ4OTY4Mjc5Njg0NCw1LjM0NDgwMTY0NTYyNTE1OAorMjYsU2F0IDE5IEZlYiAxMSwzMzgzMS43OTU4OTUxOTc2NywzMDkyNS4zNjc0ODcyNCwxMDczLjYxNjk3MjI1Mzg1NTcsOTgzNC44MzU1NjczNDk1MTIsMTEzOS44MzkzNDIwOTIxNzg5LDQ4NTI5Ljk2ODA4Mzc1NzIsNzMwNy4xODY2MzMxNTIxMjA1LDEyNTkxLjUzNDcxMjAzNjE3LDQ2Mzc0LjMyOTQxNzIwMzk0LDQzMDM1LjQ3NjUwMDYzMzEyLDM0ODUuMTYwNDA3NjI0MDc4MywxMTMwNC4zMTQ3MDE3MTIwMywyNzQuMzI4MzgyNjEzMTgwMywyODg1Ljc4MzQ2ODA2MDEyNjMsMzIzMjcwLjU3OTg4NTY0NzE3LDU0NjIxMi45NTUyMDYzNzg2LDU0MDAzMS4yMjAxMTk3OCwxNTI3OTYuMTUwMjA0NTQ0MzYsNDQ0ODMxLjk5NzA0MjEwNjcsMjkyODM5LjA5OTE2Njc3MTQsNDM3Njk1Ljk5NzgxNjM2MDIsNDg2MDY1LjI2MzU2MzczODY3LDI3OTAuMjg1ODg3NjI4NzA5LDYyMjA4LjA4MzczMTYxOTczNiwxNDMxMS4xODA3NDY3ODI2NTcsNy4zNDg2MTA3MjUzMTkxOTkKKzI3LFN1biAyMCBGZWIgMTEsMzYyNDMuNzUwMTE2ODA1NjcsMzMwMzkuNDg1NjA2MTY2ODU0LDEzOTQuODM1ODA3MDc1NjE5OSwxMTU1Ny40NDUyMTE0ODcyOTMsMTQ5My43Nzk2NjQ4MDYyNTA4LDYwOTAyLjczODE3MjM2NDYyNSw5NzkzLjMzMjM4MjkzOTQ1LDE2Njg4LjYwMDczMjg1NzMyNSw1ODAzMy40NDIyNDIxMTE3MzQsNTM5OTUuMDE1NzU4MjE1MTcsNDU4OC4zOTgzNTMyNzg1MSwxNTA4My4xMTMzOTkzMTM4NiwzODcuNzg4MDcyMzMyMDMsMzkwOS45MDY5Mzk3MDUzMjgsMzQ0ODgwLjE1MjUxNjcwODYsNjAxOTM0LjkxODgyMjgzNTksNTc1ODQ1LjI3NzU3MzE5NzcsMTYyODIxLjk4NjQ0NTIwNDg4LDQ3Mzk3My44NDE1NzM2Mjc0LDMxMjQ1NC43NzA2NDg5MTU2Nyw0NjYzNjcuMDExNjU5ODQyOSw1MTc5MDAuMzgyMjk1Mjc2MiwzNzM1LjUyNTc1NjI1MjI3MTUsNzg4NDguMzc5MjA5NjE1NTQsMTcwODUuMTM1NzMzNDk3MzI1LDEwLjAzNzI3ODE5Mjk5OTI2MworMjgsTW9uIDIxIEZlYiAxMSwzODA2Ny4wOTY5NjEwMTcwOCwzNDU5My44NzUyMjMwOTc2NywxNzk5LjgyODcxNjM3NDEyODYsMTM0NDMuOTA1Mzc3ODM0Mjc3LDE5NDYuNjUwMjQ3MzIyNzIzMyw3NjAxNS44Mzk4ODQxOTQ5NywxMzA2My40NzczNDY0MDYzNTMsMjIwMDEuMjk3MDg3ODMyMzQsNzIxODguNjgyNDI3Mzc1Miw2NzM5OS4yMzE2NTQxNTMwOSw2MDA4LjM0NzgzMTA0MTE3NjUsMjAwMjUuNTEwODg5MjQwOTc3LDU0NC42MDIwMzA1MzIxODY5LDUyNzEuODg0ODY0MjcyODE2LDM2MDg1MC41NTQyNDI0ODg2NCw2NTMyMjguMDEzNzgxNzU5NCw2MDIxNTEuNjgwODg4NjgwNywxNzAxMjQuNDcyMzc3NTA0MTYsNDk1MTg2Ljc5NDEwMTAwNDMsMzI2OTY4LjQxNDc2OTQzOTU1LDQ4NzIzNC4xMTk5NzAzNDI0NCw1NDEwNjguOTY4MjIyMDk4Myw0OTc4LjQ2NzE5NjgyNjY4MSw5OTQ1Ni40MTY0NzM4MzY3MSwyMDIxMC42MzI3NzMzMzQ1MDIsMTMuNjI0NzM1NTAwMjQ5MTczCisyOSxUdWUgMjIgRmViIDExLDM5MjI1Ljg1ODM2MzEwNTQ1LDM1NTI3LjY1NzQwNTQ1NzYwNSwyMzA1LjYzNTIwNTQxMTM3NSwxNTQ2OC43NTEyMjMzMzYyMzYsMjUyMi4yNDE3Mzc2NTM4OTUsOTQzMjMuOTY3NTU0Njk0NDUsMTczNDQuMTIzMDYyMzcwMTIzLDI4ODQ3Ljk3MTM2NTE2MzU0Nyw4OTIwOS4zMjg4NTYzNjMyMiw4MzY2OS40OTQxMjM2NTYwNyw3ODI0LjE2NDAwNTAxODk0MzUsMjY0NTUuMjI3MzI4MzQ3ODEzLDc2MC4xNTM0MjQ4Njk1MDM2LDcwNzQuNTM4MDMzNTA3NjA2LDM3MDUzOS4yNDg0ODQzMDM5NCw2OTc3MTYuOTk0MTgwMjUzMiw2MTc5MDcuMTk5MDgxNTgyNiwxNzQ0MTkuOTk4NzIyNzYyMjUsNTA3NjQ4Ljk5MDYyNTY5MDY3LDMzNTc5NC4yMTU3OTk0Mjc0LDQ5OTQ4OS4xMDQwMTExODM0LDU1NDY3My44NjcyMTM5Mjc0LDY2MDUuNzk4NTUwNzI4MDM1LDEyNDc5OC4yODk2MzgxNzQ3NiwyMzY3My4zMjc4NzkwMjgxMDQsMTguMzg0MzI2NjA1Njc2NjIKKzMwLFdlZCAyMyBGZWIgMTEsMzk3MDIuNTE2MzM4OTQ5NCwzNTgzNS4xNTA1OTUxNTgxNjQsMjkzMC41MTY4ODAzMDkwNDk2LDE3NTk1LjA0MDc2MDYyNTExLDMyNDguNDEwMTc3NTkxMjg3NywxMTYyOTMuMzAyOTYwODc2NzUsMjI5MTguNTcwMTA5NDE5Mzc2LDM3NjExLjEzODk2MzQ3NjMyNSwxMDk0NDguNDg2OTM5ODE1NDMsMTAzMjQ4Ljk0NzAwNDE3OTM0LDEwMTI5LjQwOTg4NDMwMjU2LDM0NzcwLjg4NzgwMzA0NDcsMTA1NC44Njc2MTM4MzY4MjYyLDk0NDguNDY0NTg3Mzg5MDcxLDM3Mzg1Mi4wNTEyNjk4MzA2LDczMzM4Ny4wODgxNDI0OTg2LDYyMjk5My42MjY3NzYyNjk1LDE3NTY5MC4wNDg1MjMyODUsNTExMzA5LjUzMjg2MjQ0NzUsMzM4ODQyLjgyMDQ1NDQxMDQ1LDUwMzA4Mi42NjA4NTk4MjI5LDU1ODY2MC42NjA4MTg3Mjg2LDg3MjYuNzgyOTcyNzMzMjI4LDE1NTcwOC43MzE2MDI5NzE0LDI3NDM5LjAyNzA5Mzc1NjI4MiwyNC42NjE4MTQ3MjkxODg2NAorMzEsVGh1IDI0IEZlYiAxMSwzOTUzMy41Njk0NTQxMTk5MSwzNTU1OS43MjU1MTI4NTY1NDUsMzY5Mi44MjMxMDAxODIxNTE0LDE5Nzc1LjQyMjE2MjA5Njk1LDQxNTYuOTU4NDMzMzY3MDI5LDE0MjM2Ny45MjMyNDk0NDEyMywzMDEzNi44ODM0OTEyNTI2LDQ4NzQwLjI4OTIyNjk0MjA1LDEzMzIwMy44NjU4MjM1OTE3NywxMjY1NzcuMzkyOTkxODY1MjcsMTMwMzEuODI2MTc2MTg1NDA1LDQ1NDU1LjQ5MDI0NTMwODYsMTQ1NS42OTM5OTY1MzQ5NDA5LDEyNTU3Ljg0MDcxNjIzODUwMSwzNzExOTAuOTc2MDA0MjA4NzMsNzU4ODI0LjMyMDk3MzI2NDQsNjE4MTIxLjg5NTUwMzA5MDgsMTc0MTUwLjcwOTA2ODMzMjEzLDUwNjc5OS4zMTczMjgwOTI1LDMzNjQ3NC44NzE1NDA4ODQ5NSw0OTg2MzYuNDUzMTc0NjkwNTQsNTUzNzE5Ljk0MjQ0MDQzNjYsMTE0NzcuOTcyOTcwNTI3NzI4LDE5MzA1NC41ODk2NDQ0ODksMzE0NTEuNTM1NjE0NjcwMjI1LDMyLjg4OTIyODcwOTY0NTAxCiszMixGcmkgMjUgRmViIDExLDM4Nzk2LjM1Mjk5NjYxODY4LDM0NzgwLjA3MTA1NTc3NTA1LDQ2MDkuMTU0NDk0OTEzNDk5LDIxOTU0LjQ3ODk4MzkwMTg3LDUyODIuOTkzMDc2NDcwOTYyNSwxNzI5MTguODcwNjg3MzAxODIsMzk0MjUuMTI5NjIwMjkyMiw2Mjc0OC4yOTQ5NzczNzQ1OSwxNjA2NjMuMTM3NjcyNjU5NzQsMTU0MDUxLjI0ODM5MzM3NDU4LDE2NjUxLjE2NjU3NDg3ODY2NSw1OTA4Mi4yNTU1MTM0NDE5NiwxOTk3LjkzNTYwNjU0MDM3OCwxNjYwNi40NjI2NTI0ODA0NSwzNjMzMjQuMTYxMDY0NTMzMDUsNzczMzU3Ljg3MzI1OTc0NzIsNjA0NjA3LjI5NzEzNjIwMDQsMTcwMTg2LjI0NDY0MDA5NTgzLDQ5NTIzNy42MDg1Mjk4MSwzMjkzODMuNzEwODQxOTIzMTQsNDg3MjUyLjU4MDAwMzYzOTUsNTQxMDc1LjcxMzc4NzYyMDEsMTUwMjguMzI1NDAwOTk3MTM1LDIzNzY3MC42MjIxODgyOTA3NiwzNTYzMi4wNDkwNDU0MjQyLDQzLjU5ODE2MTc2OTY3MjUzCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FnaW5nU0VJUkRpc2Vhc2VfRkRfUmVmZXJlbmNlL0FnaW5nU0VJUkRpc2Vhc2UvaHVtYW4xdG8xL0luY2lkZW5jZV8yLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWdpbmdTRUlSRGlzZWFzZV9GRF9SZWZlcmVuY2UvQWdpbmdTRUlSRGlzZWFzZS9odW1hbjF0bzEvSW5jaWRlbmNlXzIuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFlNzlmYzMKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FnaW5nU0VJUkRpc2Vhc2VfRkRfUmVmZXJlbmNlL0FnaW5nU0VJUkRpc2Vhc2UvaHVtYW4xdG8xL0luY2lkZW5jZV8yLmNzdgpAQCAtMCwwICsxLDMzIEBACitpdGVyYXRpb24sdGltZSxFRy1GUkctRzIxMDAwMSxFRy1GUkctRzIxMDAwMixFRy1GUkctRzIxMDAwMyxFRy1GUkctRzIxMDAwNCxFRy1GUkctRzIxMDAwNSxFRy1MT0UtRzI0MDAwMSxFRy1MT0UtRzI0MDAwMixFRy1MT0UtRzI0MDAwMyxFRy1MT0UtRzI0MDAwNCxFRy1MT0UtRzI0MDAwNSxFRy1MT0UtRzI0MDAwNixFRy1MT0UtRzI0MDAwNyxFRy1MT0UtRzI0MDAwOCxFRy1MT0UtRzI0MDAwOSxFRy1VUEUtRzI5MDAwMSxFRy1VUEUtRzI5MDAwMixFRy1VUEUtRzI5MDAwMyxFRy1VUEUtRzI5MDAwNCxFRy1VUEUtRzI5MDAwNSxFRy1VUEUtRzI5MDAwNixFRy1VUEUtRzI5MDAwNyxFRy1VUEUtRzI5MDAwOCxFRy1VUkctRzMwMDAwMSxFRy1VUkctRzMwMDAwMixFRy1VUkctRzMwMDAwMyxFRy1VUkctRzMwMDAwNAorMSxUdWUgMjUgSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzIsV2VkIDI2IEphbiAxMSwyNTAuMDgzMDkyOTI4MjEzOCwyMTcuNjEwNTY1Mjg0OTE5NzcsMC4wLDQyLjM2NTQwMzAxNDA3NjU4LDAuMCw3Ni43MTg4NzE4MDUwODk4OSwwLjAsMC4wLDc0LjQ0NDY4OTI0MzYxNTMxLDcwLjk2MDk0OTM4NjQxNDE2LDAuMCwwLjAsMC4wLDAuMCwzMzQyLjI3NDgwMDAwMDAwMDYsNjYxNC42MTQ3MjY2NDI0MTMsNTU1NS42MzQxMjg0NTI2MDcsMTU2MC41NDA2NjM3Mjg0MjUyLDQ1NDYuOTI3Nzc0NDk4MDI0NSwzMDI4LjIyMjgyMjA5Nzc4OCw0NDczLjQxNTI2MTg1MTczNyw0OTY3Ljk3NjA5MjA3OTQ1NSwwLjAsODIuNDUxMDg5NjQxOTc5NSw0OC40MzcxNTUzODUxMjk0LDAuMAorMyxUaHUgMjcgSmFuIDExLDIyMy41MjE3NjU2NTg2NDkwNiwxOTQuNTA4Njg5OTg5NjUwNTUsMC4wLDM3LjkzMzc4MzU4MDQyOTczLDAuMCw2OC43MTQyMTEwMzY2MzI3OSwwLjAsMC4wLDY2LjY3NjY3ODkxNTcwNzc3LDYzLjU1NzE1OTg0MDM3Mzg5LDAuMCwwLjAsMC4wLDAuMCwyOTg0LjY0MjY1ODI3ODQ1NCw1OTA5LjI5NDY2NzUwMzc0Miw0OTYxLjE3NDI0NDEwMDEwOCwxMzkzLjU2NTk4MTYyNDM1NDcsNDA2MC40MDIxMjc4MTA2NjQsMjcwNC4xOTk4MDczNTU1NjY1LDM5OTQuNzU1NzM0ODM2Mzg3NSw0NDM2LjM5NzEyNzc4NDg1OSwwLjAsNzMuODQ5Mjc2ODE0NTQxNzQsNDMuMzc1MTA4Nzk3ODA0MTQsMC4wCis0LEZyaSAyOCBKYW4gMTEsMjQ2LjY5NzMzNDI3MDIyMzM3LDIxNi4wMDc3NjA0MjAxMDA0LDAuMTU2Mzc5NTY4ODE0MTQ1MDgsNDIuNTQ2NzM3MzAxMDM1MzcsMC4xNTIwMDgwOTIyNzEwMjcxNiw4MS44MTUwMDE4MzI3NzgzNCwwLjY2MjAwMDYyNzU1NjY1NDEsMS4zNjI5Mzk0OTI4NTc2MTgsNzkuMzc2Nzc4NjIyMTYwNjEsNzUuMzUzNDM2ODA4MDc2MDgsMC40MzU5MjA3MjExNzk1MjUyLDEuMDk5MTc2Mzk0MzA2MjE1OCwwLjAsMC4xOTk4NDIzNjk0MTk5NjUyLDMxNTYuMzAxMjQyNzk3NjczLDYxMjcuNDA2NzM4ODUzOTQyLDUyNDcuNTcxNzI2NDkxMTMsMTQ3NC40MzM0MzAyNDkzMzQyLDQyOTYuMTYxNDgzMTUxOTczLDI4NTkuNTc2MDY3NDkyODk5LDQyMjYuNjk1MzE1OTY4MzUsNDY5My45OTI1Mjc4MDc5NDUsMC4yNjMwOTk4MjEwNzA2OTE0Niw4OC45Njk2MTQ1NjMyODIwMSw0OS4zNDAwMjY1MjY1NjY4LDAuMAorNSxTYXQgMjkgSmFuIDExLDI4NS40ODM1ODAyOTE4MDY0NSwyNTEuNDYyOTg3MTI2MjQxMTYsMC4zNTc3MDY1NzUxNzMzNDcsNTAuMDIwODAzNDQzMjgwMTE2LDAuMzQ3NzA3NjI4MjgzNjg3MywxMDEuNDY4NDk2Mzc2MjEyNSwxLjUxNDM5MzcwMzI1MDExMywzLjExNzg1NTU5Mjk4MTQ2OTMsOTguNDMxNDA0NTYwMTcwNDUsOTMuMTE4MzQ1NDY2MDY0NDgsMC45OTcxOTU4OTU3MDc0MzgsMi41MTQ0ODE0NTkyMTY5MjIsMC4wLDAuNDU3MTU5NDk3NTk3MjIyMzUsMzQ5Ny45NjY0NTc5NDUwMDIzLDY2NDguNzY5NDAyNjc1NDkxLDU4MTYuODUwNTUyOTMyNDM4LDE2MzQuODc2MDQ3MjgwNjYwMyw0NzYzLjgxMjY1NjIwMzg1NCwzMTY4Ljk0MzgxNTU0NDU2OCw0Njg2Ljc3NTQyNjMyNzIzOSw1MjA0Ljk1NDE3NTA2Mzg2OSwwLjYwMTg1Nzk4NTU2MDAzNzksMTExLjQzMjA1MzkxMjExNDcxLDU4Ljc3NTYwNjY3NDA4NjA1NiwwLjAKKzYsU3VuIDMwIEphbiAxMSwzMzkuMDE1MTQ0MDg2MTQ0MSwzMDAuMzg1MzM3NDAyODY2NDcsMC42NjQ1NDQyNjcwMjgxOTA0LDYwLjI1MzEyNjYxODM5MjQxNSwwLjY0ODI0ODAwOTcwNzQ3NiwxMjkuMTg5ODUwMjYyNTY2MTUsMi44ODY1Mzc5NjI0MDM2MzM0LDUuODg1ODQ1MTg0NDcyNjc3LDEyNS4yOTgwNTE5ODc3MTY5MiwxMTguMTMyMjE5OTk3NTE3NSwxLjg2NDg5MDM3OTA2OTIyNCw0Ljc3NDc4MzE3NzgzNDkyOCwwLjAwNjIwODUwMzA5MzMyOTM5MSwwLjg4ODcxMzc5MjgzNTE2NjksMzk5MC45Njc3MDU4MjE1OTg0LDc0MTEuODM1MzQyODIyMTA2LDY2MzguNTU3NDQ5MzUwNTk2LDE4NjYuNTc2OTY3MDE5MzUyMiw1NDM5LjEwMzIwMTA4MjI0OSwzNjE1LjM0NjcxNzY2NDI4MDcsNTM1MS4xNDEzMjc1MDYxMjcsNTk0Mi43OTAzMjg0NTM1MjgsMS4xNDM2ODQ5Mjg3MjU4NDc1LDE0My4zNDI3MTY0ODAyNDEwOCw3MS43NTkzMTU4MDYxODA2LDMuMTk3OTAzOTE5NzU4MjMxNEUtNAorNyxNb24gMzEgSmFuIDExLDQxMC41NDk2NjU4MjkxMDkxLDM2NS44OTMxMDcxNTIyNDkyLDEuMTMyMTk1NTUyNzk3MTYwOCw3My45MDkyODkxNDU4NzY2NywxLjEwODk1MzAxNDE1MzY4NTYsMTY3Ljc3NzQxMjk2NjU0MDksNS4wNjI4Mzg5NzUyMjY4NTksMTAuMjEzMzI2NDM5MTU4NzM2LDE2Mi42ODE3MDYwMzY5OTQ0LDE1Mi44NzIxNTIxNTUyMjg2NiwzLjIwMTY4MDYwMjgwODkyODYsOC4zMzk5NjUzMzc0MzYzNzcsMC4wMjI4ODQ0NDYwOTM1Mjc1MDQsMS41OTIyNTI1OTk2OTc3MzMsNDY2Mi41NzQ1MTA0OTk4NzIsODQ0NS4wOTkzODc3OTI3Niw3NzU4LjQ4NDU2MjYxODc0OCwyMTgyLjU4NzczMjAxMjE1Nyw2MzYwLjA1NTI3NDM4NjAwNiw0MjIzLjQ1NTIyMTEwNjYwMyw2MjU3LjIwMzUzNTAxMjI5Miw2OTQ5LjA0ODQwMzEwOTIwNSwxLjk5OTIwNDA4NzExNzI4MDUsMTg4LjEyOTM2MzEwNjUxOTQzLDg5LjI0NzU1MjY5MDM5Mjg0LDAuMDAxMTc4NzM1MDM0NjU0MTAyNQorOCxUdWUgMSBGZWIgMTEsNTA0LjM4MTMxOTA3NDU1NzMsNDUyLjAyNzIyMDI0Mjk5MDIsMS44Mjc2MDg3NzE2ODg3NjAxLDkxLjg0ODgwMjAxODA0MTMxLDEuNzk3NjM3NDY5MjQyMjI1LDIyMC42OTMwMDE3NTQsOC40MTMwNTA5Njk4ODQ0MzgsMTYuNzkwODcwNjUyNjIyMzM1LDIxMy45MjUzMTM2ODMxODM0LDIwMC40MDgyMDc4OTc4NDMsNS4yMDg3NjMwMDgwMzkxMiwxMy44MDEwODgyMTQ0NTQ4NCwwLjA1NzgzMzEwODU4NjIxNTc2NSwyLjcwMDQwOTk1NjIyNDAxMzQsNTU1Mi4wMTExMTIxNzQ1ODEsOTc5OC43NzcwMjQ4NjU4OTgsOTI0Mi40MTY5MDg3MjQ5NjcsMjYwMS42MjM4NjM0MjYxOTYzLDc1ODEuMTg0NjUxMTQ0OTY1LDUwMjguNzY3MDM1Njg0MDA1LDc0NTguNjAzNDIxODc1NTQsODI4My4zMDA3MDc4NTE2MjYsMy4zMTEzNjY1NjMxMjkwNjQ3LDI1MC4wNDYwNjA0NzMyNjMwNSwxMTIuNDQ2NTc1MzkyODQ0NjgsMC4wMDI4OTAxNTQ3NDkyNDY0NjMKKzksV2VkIDIgRmViIDExLDYyNS42NDY0MTMzMzYzMTA2LDU2My42MTU0NTAzMjYyNjQxLDIuODQwMzI2Njc1NDEwMTY0LDExNS4xMTM3MDk2OTQ1MDEzMSwyLjgwNTczNTUyODM0ODcyODYsMjkyLjM1MTc1NDMyNDQ5NDksMTMuNDU0MDExNzk2MTIwNTI5LDI2LjU2ODE0Njc5NDMxMTk5LDI4My4yODc5MTM1OTMxNTU2LDI2NC42NDk5NzgxMTYzMzU0LDguMTU5MDI3NDExNDY0OTk0LDIxLjk3OTAyMjc1NDQ1MDA3LDAuMTIzNzMzNjQwMTkzMDMyMDUsNC40MDI5ODkyNzAxNTQ5NjUsNjcwNy4wOTk1OTUxODAxMTE1LDExNTM1LjI5NzAwMDM2OTI0NiwxMTE3MC42MjkzNTM4OTU4NzgsMzE0Ni41NTA4MjE5NTA5NDM0LDkxNjkuMDgzNzAzOTcxMzIyLDYwNzQuNTYxNTg5MDk0ODI3LDkwMjAuODY4NDY5MzM0MTc3LDEwMDE4LjMxOTE2ODU1ODQxMyw1LjI3OTI2MTI4ODk2MjY4NiwzMzQuNTczODQwMDg5NjQyODMsMTQyLjgzMzk0OTMzMzU3Mzk0LDAuMDA1OTIyOTE0NjQ0MjQ0NjIyCisxMCxUaHUgMyBGZWIgMTEsNzgwLjIzMzg5NzE2OTQ0NzEsNzA2LjE5NjczMjM1NTM2MDUsNC4yODgzMDEyNTIwMzMyOTcsMTQ0Ljk0NjYxMTM3NDg1NTUsNC4yNTQ0MzU2MDI1MTM1NDcsMzg4LjMyMjkyMzU3NjM1MTQsMjAuODg4NzU1NjY4MzQ3NzAyLDQwLjgyMTM5NzMwOTM3MDIwNSwzNzYuMTM2MjA0NDcyODIxMSwzNTAuNTIyMDc2MDM5NDU1MiwxMi40MTU3Nzc1MzEyMzM0MjcsMzMuOTg0OTYyODgxNTY4ODUsMC4yMzk2MjMwODI2MjU0MzQzLDYuOTYyNDMyODM4MTg0NDI4LDgxODIuNzg1MDE5OTc4MTYxNSwxMzcyNi43OTQ2NDcyNjMwMDYsMTM2MzUuNDQ1NDQ5OTc3NzAyLDM4NDMuNzAyNzI2NTg3MjQ3NSwxMTIwMC40MzA1NzEyNjg0NTUsNzQxMC41NjU3MTIzNjgxMTksMTEwMTkuNDU0NTI2MzAzNTIsMTIyMzcuOTAwNzI0MjE1OTE1LDguMTczMDM5NjMyMzY3MDg2LDQ0OC42OTAyMDkyNzgxNTE2LDE4Mi4xOTY2MjAwMzQ1MDkzOCwwLjAxMDk0MDkwMDkzNzE0NzQKKzExLEZyaSA0IEZlYiAxMSw5NzQuNTg2Nzc2MjgwNTYwMyw4ODUuODMyODEzNTMzNzQ1OSw2LjMyNDEyMjc2NzM2MzQyNCwxODIuODAxNjI2Mzc0NjUxOTYsNi4zMDE1MDA3OTc2MzE1NTksNTE1LjUyNzUxNTM5MTQ1LDMxLjY1NTYwMjIxODAwNzc2LDYxLjIzMzc1ODUwNjE4MDIzLDQ5OS4xMzEyMjMzNjA5MzQxLDQ2NC4xMzcwMjg3MzY5NDUzLDE4LjQ1NDA0NjYwNTY5LDUxLjI5NDg1MDQ4MjI0NDAzLDAuNDMzMjU4NTc4MTU2MjcxNiwxMC43MzQ0MTg3NjEzMzE5NTIsMTAwMzguODk3MjY0ODU1NDE1LDE2NDUyLjkwNjIzNjU4MjczNCwxNjczNy41MDQzOTA1ODkyNDUsNDcyMS44Mjg3ODAyNDU0NTYsMTM3NTguOTExMDM0Njc3MDY3LDkwOTAuOTMxMDM3OTIyNiwxMzUzNi43MTg2ODkwODEwMjYsMTUwMzMuNTA0ODQ1MDA0OTU4LDEyLjM1MjQ2OTI2MTM4NDg3Miw2MDEuMTQ2NDc3Mzk2NDM2OSwyMzIuNjU5MTIxMDk1OTQ5MzMsMC4wMTg4NTc5MTg1NzE1Mzk3NzUKKzEyLFNhdCA1IEZlYiAxMSwxMjE1LjM5NzkwMTg0NjgwODcsMTEwOC44MTQxODM4MjM5OSw5LjE0MzgyNDE0MzAwNDAwOSwyMzAuMzU3OTQyMDEzMTYyMiw5LjE1MDk3ODk5MzIxMjk5Myw2ODIuNTEzODk1OTUwMjY0Niw0Ni45OTkzMjAxNjI3NDk4NzUsOTAuMDEwODUxNjM5MTY2OSw2NjAuNDg3ODUxMzAzMTMzOCw2MTMuMDM2NTQ3NTg3NDc2NSwyNi44OTEwNzgxNTAyODMwMDgsNzUuODU2OTc2MzYxNDc3NTIsMC43NDQ2MzM5MTg4NTg0Mjc3LDE2LjE5NzkyMzMyNDc3Njc3NywxMjMzNi45ODU4MDI5MTQ1NDUsMTk3OTguMjM3NzA1MjAxNjEsMjA1ODAuNDU5NzI5NDE3NTc2LDU4MTAuNTg4MzMwODg0MTc3LDE2OTMwLjgyMjc3NjAwMDAwOCwxMTE3MS4zNzQ3NTIyMzE5MzQsMTY2NTcuNTk1ODEyODI2OTM4LDE4NDk5LjQ1MTA3OTk0ODA0LDE4LjI5MzgwMTM0MDc2OTYzMyw4MDIuODU3ODA3MTc3NDMyOCwyOTYuNzIwMTQxODAzNjg2MDMsMC4wMzA5MTg4NjcwNDc0MjkzMjcKKzEzLFN1biA2IEZlYiAxMSwxNTA5LjE1NTM4MTk5ODIxNTMsMTM4MS4yMTYzNzc3NDY2NjA2LDEyLjk5OTExMjM0NjQyODY2NCwyODkuNTM4MzMwNjAxNzM3NDcsMTMuMDY2NzU4MzM1Njc3MDgzLDg5OS44NDI0Mjc4NDEzMTY0LDY4LjU3MTMwMzA1OTQ1NTk3LDEzMC4wNDI3NDg5Nzc5NjMxMyw4NzAuMzM1OTgyNDA0NjY4MSw4MDYuNTI4ODQyMDg2ODg0MywzOC41Mjg5ODM2NTgzOTc0MywxMTAuMjQzMTYxNjY0NzEyMSwxLjIzMTAxMjEyODExODg1OTUsMjMuOTk3NjU5NDk0MzgyMjc2LDE1MTM1LjczNDkzMzUwNzIyOSwyMzg0OS4wOTkzMDc5MDEyODQsMjUyNjMuMjY2NTc0NDQwMTMsNzEzOC4zNDc4OTMyODAzMjU1LDIwNzk4LjY0Mzk4NDU2MTYxLDEzNzA1LjAzODkyMTg4MDkwOSwyMDQ2My4yNzE1OTkzNTk2ODcsMjI3MjUuODkxMzg5MDg5NTIsMjYuNjI3NTg3OTY3MjQ2ODY0LDEwNjcuNDQ4NzkzMzcxNjY5LDM3Ny4zMDI1MTUzNTYwMDQwNSwwLjA0ODgxNDIyODkwNDEzMTIyCisxNCxNb24gNyBGZWIgMTEsMTg2MS40NDU0ODU0NjUwOTI4LDE3MDguMjE2OTY0NTk5MTIzNSwxOC4yMTM1MTU4NDY5NzgwOTgsMzYyLjUyNzE1MTA4ODM5NTIsMTguMzkwNjIyNzA3NDg1ODc1LDExODAuNTg2MDQ0MzYzNzA1Miw5OC41NjUyOTk0OTU0NzEyMSwxODUuMTIxNTA4OTkzMTA5MjIsMTE0MS4xODgxMzk4MjI0MDUsMTA1Ni4xMjgzNzEyNTcxMzg3LDU0LjQxMTgyNjE0MjEwMzQxLDE1Ny44NTI4ODExMjQ1NDAxNSwxLjk3Mzk1NDk0MjQyMzc3MTUsMzUuMDAxOTQyMzA5NzExNDYsMTg0ODQuMDczNDYxNTUwNzI4LDI4Njg4LjcyMjMxOTkyOTk0NCwzMDg2OC41NDYxNTA5OTcwMiw4NzI4Ljg0MDM4ODQ3NzYzNCwyNTQzMS4yODY4ODI1MTU3NDYsMTY3MzYuMjY3NTIzNTk3NzA0LDI1MDIxLjU5MjQ0OTQ3MTYsMjc3ODguMTU4MTk5OTI0NTcsMzguMTg5ODk3NTA4MDcyMjE0LDE0MTEuOTcwNDA1MTQ5OTk0LDQ3Ny44MTA3ODE4MDA0NzMyNSwwLjA3NDgzNTc5NzY0Mjk4MzU0CisxNSxUdWUgOCBGZWIgMTEsMjI3NS45MDE1NjE5OTE1Njg1LDIwOTMuMDY1ODU4MzEyNDM3NywyNS4yMDI4OTA1ODMwNzkwOCw0NTEuNzc3NDY3MTE4Njk3NCwyNS41NjU0OTE5NjAyMzk1OCwxNTQwLjk0NDQ5NzU1OTYyMDcsMTM5Ljg5NjYzNjM3NjAzMzQzLDI2MC4yMjQ4NTgyNzQyODQ3NywxNDg4LjUwODQ0NTg4NzU2OTIsMTM3Ni4wOTY0OTk5MDI1MjgsNzUuODk5NjA1MDQxMzgxMjUsMjIzLjE4MTQ4NDc4NTIzNDg2LDMuMDg4OTg4MTgzMjcxMzAzLDUwLjM3OTc5NTkxNzUzOTg2NiwyMjQxMC45NTMyMzAwMTg0NTUsMzQzODkuOTIyODY3MzExMjQ1LDM3NDQ1LjI3NjQzMTMzMTk3LDEwNTk2LjE3NjEzOTY2MzIzMiwzMDg2OS41NTI3NTc1OTc1NDcsMjAyOTEuMzczMzgxMDc4NzY3LDMwMzcyLjc1MTA1NDA0OTUsMzM3MzAuODY1ODEyODExMzcsNTQuMDg5ODg5MzI4NTk4NjksMTg1Ny43OTU5NTIyODE4NTQyLDYwMi4xODQwMzg5NDE0NDk3LDAuMTEyMDgzODYzNTE1OTk1OQorMTYsV2VkIDkgRmViIDExLDI3NTIuNzA0ODg1OTY3ODA1MiwyNTM1LjYyMDg1NjE5MzE1OCwzNC41MDA3NTc2NDU1MjI1NSw1NTkuOTkzMzU0MjM4NDc3NSwzNS4xNjQ2NzM5NjE4NTg1OSwyMDAwLjk2NTY5MjUxMjUxNjksMTk2LjQzNTIyMjQzNzgzNzM1LDM2MS44NzkzNDgyNDk1MDA3LDE5MzEuMzcyMTgzMDM3MjMzNSwxNzg0LjA3ODE1MzM4MDM2NjMsMTA0Ljc2MjIxNDU4NzUzNDYxLDMxMi4xNjY4NDAzMDQ3MTY4LDQuNzM4NzU3Mzc0MDM1LDcxLjcwMjI4NTg0MDM3MDY4LDI2OTEwLjk4ODIwMjYwNzY3LDQxMDA0LjExNTM3OTM1MDYzLDQ0OTg0LjQyMzQ4MjUwMjQyLDEyNzM3Ljc5OTg2MzAxMDU5OCwzNzEwNS42MTMyOTg4NDI1MTYsMjQzNjUuNjYyMTcxMjA1MDksMzY1MDkuMDg5NDg0NTk3NjMsNDA1NDUuNDc5MzEyNzM4NjY2LDc1Ljc5NzU5NDk1NDUyMDE1LDI0MzEuNzAyMDYwNDY2MjUxNiw3NTQuOTI2OTMxNTAxMTk2NiwwLjE2NDczOTI2MTIyMzIxNDQKKzE3LFRodSAxMCBGZWIgMTEsMzI4Ni42MTc1NzUyMjA2NzY0LDMwMzAuNDM3MzE3NzMxOTEyNiw0Ni43ODg5MzE2MDU3MjE3OSw2OTAuMDcwMTY1Nzc2NDcxNSw0Ny45MjgxMDY1NzQ3MTQ1OSwyNTg1LjM2MjIyNDEyMTE0MiwyNzMuMzA1NTY2MDk3ODA2OTUsNDk4LjYxOTUzODk1MTQxNzg0LDI0OTMuMTk3ODY1NzA1MjczLDIzMDEuODI1Njk3OTI5OTM2LDE0My4yOTcxMjU0MTM1ODcwNSw0MzIuNjMyNjA1MjM0NDQwNSw3LjE1MDgxMTA0MzAwMzE3OSwxMDEuMDc0NTQ0MTQwMTI1OTEsMzE5MjUuOTE1MDQ3ODAwMTEsNDg1NDUuNzYzMDc4MzA2NDE2LDUzMzg3LjQzOTUxNTYyODk2LDE1MTI1LjM2OTI0ODgwODI0Myw0NDA1Ni40NTgwNDU0Njk3LDI4OTA2LjY3MzQxMTk0MTU4LDQzMzQ4Ljk1ODYzMTYyODA1LDQ4MTQxLjI4MzkzNzk0MzI1NSwxMDUuMjU2ODc2NjQxODE3MzMsMzE2Ny4xMzg1NzQwMDU1Nyw5NDEuMDk2NTU0OTcyNjE0LDAuMjM4NDE3NjI5MTQ2Njc5OAorMTgsRnJpIDExIEZlYiAxMSwzODY0LjY4OTQxMDgyMDE3NSwzNTY0LjU2NjE3OTg0NTY3OSw2Mi45MzM3NDQzMTI5NDg2Niw4NDQuOTcyNTEzODA1ODg4Myw2NC44MDY2NTkwNTc4NTg3NSwzMzI0LjQwMTY0NjA3NDMxNTUsMzc3LjI3MDQxMjEyMDQ5NTcsNjgxLjU2Mjg1NTc0MDY3NTcsMzIwMi41MjEyOTc2NzIyNTUsMjk1NS45OTQxNTk2MDg1NzUsMTk0LjQ3NTEwMzk3ODMwMzU3LDU5NC44NTA1NjQwODA1NzcxLDEwLjY0MTUxNDM5MTMwNTIyNywxNDEuMzA2NzIyOTMxODUwNDYsMzczMjMuNDM0Mzk3MzIwNzY1LDU2OTcxLjkzNDYzNzMwMTEyLDYyNDMwLjI5MTQ2NDI2NzU4LDE3Njk0LjMzMjEyMzM0NjEsNTE1MzMuNTg1ODUyMTcxOTM1LDMzNzk1LjAzOTE3ODIwNzE0Niw1MDcwNi44NzQ1NTA5MzU0Niw1NjMxMi4yNDQ1MzQyMTA3OCwxNDUuMDI5ODQxNDIzMzgwNzYsNDEwNS42ODQ4MzIyMDI3ODgsMTE2Ni4yMTczNjc3NDg0NzkzLDAuMzQwNjI3ODg4OTIyNzMxNTUKKzE5LFNhdCAxMiBGZWIgMTEsNDQ2NC4wNTQ0NjM2MjU0NTM1LDQxMTUuNDkxMjI3MTg5Njc2LDg0LjAyNzc3MDk3NTQ0NjE2LDEwMjcuNTI4MTI0MzcwMjAzNCw4Ny4wMTU1Mjc3NDAxODIxNCw0MjU0LjgzMzAzODc1NjAxMSw1MTcuMjE4MjY1MzcyNzEwOCw5MjUuMTIyMDk0MjkwNzEyMSw0MDkzLjc2MTE3MzYyOTM4MiwzNzc4Ljk3OTk2NjY4NDY4OSwyNjIuMTE4NTM2NjExMTU1NSw4MTIuMjQ4NjY4NTIwNjY0LDE1LjY0ODA2Mzc0ODQ3MzAxNywxOTYuMTM0MTUzMDU0ODMxOTMsNDI4NzcuNjE3MDcyMjU5ODMsNjYxNTcuODM2MTcwNDEzNzQsNzE3MzAuMTkzMjY5NzAzNTQsMjAzMzQuMzAzODQ0OTU2MzUsNTkyMTUuMDc2NzcwNjA3NTYsMzg4MjYuNzMwMTM0NzI3MjcsNTgyNjYuMDEyMTI2MjI2OTI0LDY0NzA2LjQ2NTAxMTI0NjczLDE5OC40ODA0NTQyODcyNDc0Myw1Mjk4LjY3NjA5MDE2NTYxOCwxNDM2LjA5MDc5Nzk1NzM5ODMsMC40ODEzNjIyODI4NDk3NjMyCisyMCxTdW4gMTMgRmViIDExLDUwNTAuNjAyOTg3OTc5ODcxLDQ2NTAuMDAyMzEyNTA2Mjk5LDExMS40MzYxODUzODAyODEzNywxMjQwLjExNzc5OTI5ODQ5NywxMTYuMDk3NTEzOTgxNDA2OTMsNTQyMC43ODg1MjI1OTE2NzEsNzA0Ljc3ODgxNTM4NzUwNjgsMTI0Ny44NzgxNzA3MjcwOTUsNTIwNy44OTY1NTA5ODYwMSw0ODA5Ljc1NzY0MTEyMTkxMywzNTEuMTE2NTgwNTg0NTc1NzMsMTEwMi4yOTUwMzk3NTIwNDg1LDIyLjc3MTE2NjgzNzMzNjIxNywyNzAuNDk5MjY1MDcwOTEzMDUsNDgyNTguNDc5NTQ0NDUxNTUsNzU4NzEuMjEyMzY1NTEwMjYsODA3MjguMDk0OTUwMzg2MTUsMjI4ODQuMDc1Njg0ODIwMDI1LDY2NjMxLjIwNzgwMTcwNzM3LDQzNzAzLjU0ODgyODQ2OTU2LDY1NTY0LjAyODgwMTU4NjcsNzI4MTAuNDU3MjQ2NjUzMzMsMjcwLjAwNjY4NDUxODgyNDMzLDY4MDguOTYwMjkwOTkyMTQsMTc1Ni40NjMzNDIzMDcwMzk1LDAuNjczODUxMTQyODc1NzE2NQorMjEsTW9uIDE0IEZlYiAxMSw1NTc5LjY2MzUxNDgxMTk2NCw1MTI1LjEzMDIzNzcxNjU0OSwxNDYuODQ1NTE5MDA2ODg1NzgsMTQ4NC4yNTA3NjQ1MzE0NDI3LDE1My45OTYzODk3NzMxNTY0Nyw2ODc0LjU2NDk0MzgzNzg4MSw5NTUuMDkzNjc1MTQxNTM5NSwxNjczLjYzMzA3NzYwMDQwNTIsNjU5Mi45MzYyOTY0MzMwMTMsNjA5NC42NDQzNjYyMTM1MDQsNDY3LjY3OTk3NzE3NDAwMzcsMTQ4Ny41OTAyMjI4OTQ2NTY4LDMyLjgzMTcwMDkxODU3OTQ2LDM3MC45MTAyMzg0MDA3NjcwNyw1MzA0MS4zNjQ0NDgyNzExMSw4NTc1MS4zNjE4NTE1NTkwNCw4ODcwNS4xNzY1MjQ0NDIwOCwyNTEzNi42MDU1NjY4NzgzNjcsNzMxNzkuMTgwMTU4ODczMTUsNDgwNDEuNDc4NjM2MDMwNTQ0LDcyMDA3LjU1MjAxNTM0MzE3LDc5OTY1LjI0NzkzNTE5MjQzLDM2NS4zMzIxNTYyNTA5MjczNyw4NzEyLjcwODQ2NzE4MDEwMiwyMTMyLjUyMDI2NjI2MDE5NzMsMC45MzU1MjE0Njc5MjE2Mzg0CisyMixUdWUgMTUgRmViIDExLDU5OTkuODk3MTYxMzE0ODA1LDU0OTIuMjg3Mzg0MTY5NjU4LDE5Mi4zMTA0MjI0MzIzMTE4LDE3NjAuMDM0NDUxNzUzMDk0MSwyMDMuMTM5NDYxNDA5Mjc2NzgsODY3Ny4xNDU5MzUyODkyNzYsMTI4Ny43NzIwOTcyMDg0NTk2LDIyMzIuNjU0NjA5NDI4MzkxNyw4MzA0LjAwNzU5ODcyNzkyNSw3Njg3Ljg4OTY3OTI1MzMzMSw2MTkuNjM1MjM2NTg4NTIxMSwxOTk3LjE5ODY3MzQ2MDM1MjcsNDYuOTQ1NTgzNDEyMzQ2ODYsNTA1Ljg5MzYyOTM0MTE3NzUsNTY3NDYuODgxNzMyMDMxNCw5NTMwMS42Nzk2NTQzNjE5Niw5NDg1MS43MTk3NTI2NTQ2OCwyNjg1OS4zNDY3MTc0NjM2Miw3ODE4Mi40OTY5MzA5Njk0Myw1MTQwNi42Mjk1MTQ1MDQxNjYsNzY5MzAuNjM5NTA1MDk1Miw4NTQzMS4zMjEwNzczNTg1Nyw0OTEuODY5Nzk5MzA4Mjk3NSwxMTEwMS4xNDYyODA5NzIxNiwyNTY4LjE4NjMwOTYxOTY0MDMsMS4yODkyMDM0MTM3ODM3NjcKKzIzLFdlZCAxNiBGZWIgMTEsNjI2MS4wMjI4NTc3NDM4ODQsNTcwNS4wOTkwODU2Mjg4OTQ1LDI1MC4yOTA3MTc3MTEwMjUxLDIwNjUuNTgwNzU4OTg3NDc2LDI2Ni41MjY1OTAzNDI2Mzg3LDEwODk4LjI2NDA2NjQ4ODIyMiwxNzI4LjA2MTAyNTg4MDA3NTIsMjk2My4xMDYzNzQyMDAyNTUsMTA0MDIuODIyMjc2MDA3NzE1LDk2NTEuOTQzMzkxMDE3MTE0LDgxNi43NTE5OTY4MjQzMDkxLDI2NjguMjQyOTAxNTgwMDE1Myw2Ni42MjIyMDE0MTQ0NTMwNCw2ODYuNTU5OTAyMzc2NjE0Niw1ODkxNi4wMjMyNzI2NjA2NiwxMDM5MDYuNzY0ODU5MTAwOTgsOTgzOTUuOTgyMjY5NzQ2NDMsMjc4MzIuMDM1MDE0MjcyNjIsODEwMDEuMDY3MjczNzM2NTIsNTMzODMuMDEwMzI5MTk2NzcsNzk3MDMuMjAyNDYyMzk2NjMsODg1MDkuMDM5NTgyNDUxMTgsNjU5LjE3MTEyNDcwNDA1MjMsMTQwODEuOTkwMDg0MTcwNjgyLDMwNjUuMjQ0NTg5NDYxNjIyLDEuNzY0NjMxMTc2ODUxMDYzMgorMjQsVGh1IDE3IEZlYiAxMSw2MzI0LjUyMjI5OTc1MjE2LDU3MjkuODc1OTc2NTA4NDU4LDMyMy42NjYyNTQxNDM1MTA2LDIzOTYuNDM1Mjk3ODY5MTQ2MywzNDcuODE5OTkzNzcxMTQ0NywxMzYxNS43MTkyODcxNDg4MDYsMjMwOC4yNTM2NDc1MzczNzMsMzkxMi42MjMwOTA5Mjg0NzY0LDEyOTU2LjE5MTYyNDczNjg1NywxMjA1Ny4xOTE4MjE2NTIyOTIsMTA3MS4wODcxNTA0OTc2MjUzLDM1NDcuNzY1MjY1NTU5MTkyLDkzLjg5MzAzOTkxNDU4MjkxLDkyNy4zMDA5ODI1ODczNzUxLDU5MjEwLjgzMTAwMTEwMjg1LDExMDg4My45NDcwMjk4NDE3Niw5ODc3NS45OTQzMzYzMjU4LDI3ODk2LjcwMDc2NjcxOTIxLDgxMTc2LjY4NzMzNTkwNTc4LDUzNjYzLjUzMTQ2MTg5MDE5LDc5ODc0LjI3MjU5MDUxNCw4ODY5Ny43NDQxNTc3MDkyOCw4NzkuNDc1MDAxMzA4MTM2NCwxNzc4MC4yNDE2ODAwNjkwNSwzNjIyLjMzMTU0ODQyMzAxOTMsMi40MDAyODEzNjkwMzc0MworMjUsRnJpIDE4IEZlYiAxMSw2MTc0LjQzOTM3OTAyMDYwMiw1NTU1LjY3NDc0OTc1NzQ5MSw0MTUuNzEwNTY0OTgwMDI4NCwyNzQ1LjE2MjIzNjkxOTE5LDQ1MS40MjQ2OTA1MjI4MDU3LDE2OTEzLjU1MDM0ODAxNjE2LDMwNjkuMzQ2NzQ1NjMxODI2LDUxMzkuOTMzODIzMjg4MDg5LDE2MDMzLjE0Njg1ODkzNjQ5OCwxNDk4MC44NTY2MTI4MTUxNTQsMTM5Ny4zMTI3MDc0ODkwNDgzLDQ2OTQuODI1OTE4NTYxNzU0LDEzMS40Nzg1NzE5MzcyODkyNSwxMjQ2LjYzNjE4MzM2OTk0ODQsNTc1MTIuMjkxNzc3MDkxNTMsMTE1NTcyLjE1MzMzODU2NDQ5LDk1ODA1LjAyNDkxNzM5MzY4LDI3MDA1LjIxMDgyOTEwMjY1Niw3ODU3MS4wNzE2MzEyMTg0NCw1MjEzOC43MjY4MDEwNjUzNCw3NzMwNy45MjEwMzU5MzQyMSw4NTg0Ni42NjU3MTIzNDgyNiwxMTY4LjM2ODQwNDUzODI3MDksMjIzMzcuNzk0Njg3OTEwMTA0LDQyMzMuOTIzNjA0Njg3MjU5LDMuMjQ1NTc3NjQ0NTUyMzE0NgorMjYsU2F0IDE5IEZlYiAxMSw1ODIzLjk0OTIzNTk3NDQ0MSw1MTk5LjY2NDQzMDg4OTk4LDUyOS45OTYwMzg2MDgwNDk2LDMxMDEuMjQ1MjI4ODE2NTY4Nyw1ODIuNTQyOTE0NjE5OTU5OSwyMDg3OC40ODM5Nzk2NzQxNTQsNDA2Mi45Mjg3MzY5MDcwMTk0LDY3MTYuMzQzMTc4OTg3NDg0LDE5NzAwLjA3OTE1NDE4NjE4NCwxODUwNC42MDE2MzQ1NzQ0MSwxODEyLjk2ODUxNTU2ODE5Miw2MTgyLjc0MDExODI5MTIzNCwxODMuMDAyODkzMDgyMDA2NCwxNjY4LjIxNDcxODkwNzU0MDYsNTM5NzUuMTM5Nzc1NzIzMDY2LDExNzQ0Ny42NjEyMTA3MTY1OSw4OTc2MS40NDQ4MDg3Mzk1NCwyNTI0NC4wMDMyMzMxMDQ5NjYsNzM0MzcuMzIzMDQyNzQ0NzQsNDg5NDYuNzUzOTExMDM3NjYsNzIyNTMuNTk0NDQ1NTIwOCw4MDIzMi45ODQ0MDkxMDUzOCwxNTQ1LjU2NzI5MjM4NTcxLDI3OTEwLjk5NTczNTQ5ODUyNCw0ODg5LjQ4NDQ5NTIwODQ0Nyw0LjM2MzQ1NjcxOTUzODU0OAorMjcsU3VuIDIwIEZlYiAxMSw1MzE0LjAzNjU1ODM5NTU5NCw0NzA0LjUyMjk1ODc2MjA5Myw2NzAuMTkzODIyOTUxMTk3NCwzNDUxLjQ0ODc0MzUwNDE0NjUsNzQ3LjE3NjQ4NDQzMjgwNTYsMjU1OTMuODU1Mjc1NDMzNDYzLDUzNTMuMjI4MjU1OTA4NTIyLDg3MjYuNzM4MTQxMzY3OTU0LDI0MDEzLjE1NTA5MDIxOTEyNywyMjcxMC4xNzUxMTM4NDkxLDIzMzguNTQyNTIwMjIzOTIzLDgxMDEuMjQ4NTU4NTg4NzA5LDI1My4yNjY3MTU4OTc0MjU4MywyMjIxLjk2NTYzMjczNzA2OTQsNDkwMDcuNTM3NzQ2NjE5MjQsMTE2MjM5Ljk2MTExMDk5MDMsODEzNDkuMjA1MDIyNzY3NywyMjgyMC43MTY5Nzc2Nzg3NSw2NjM4MC41NDY0MDc4MTIxNCw0NDQ1NS41Njk0NzgwMjYzMyw2NTMwNy4yNDYzNjQ3ODU2Miw3MjUxOC42MTI5MjQ3ODI3MiwyMDM1LjgxNjU3MTU5NzA1NSwzNDY2NC44NTM2OTEzODg1OCw1NTcyLjk2ODA0MDg0NTA5Niw1LjgzMzIyNTE3NDUyMDYzMDUKKzI4LE1vbiAyMSBGZWIgMTEsNDcwMy44NTc3MDI3NzQ2NjUsNDEyOC4wNTYzMzAzOTM3MzIsODM5LjcyMjc0NTc3OTE5MSwzNzgwLjcwNTQ0MTY2ODkxNTcsOTUyLjAzODIxODA1ODg5NzcsMzExMjkuOTM1NDM4NDU1Miw3MDE5LjE2NDQyODM0NjI1NjUsMTEyNjkuNTgwMjcyNzc2Njk5LDI5MDA3LjE1NDI4NTIyMDIzLDI3NjcyLjEzODYxMDMwOTU5LDI5OTcuMjI2ODk0NjEzNzk5LDEwNTU4LjIzOTc4Njc0MDk3OCwzNDguNTg5NjQ5NzgyMTM0NjQsMjk0NS4zNTM0NzM0Nzk4NjEzLDQzMTc1LjA2Mjc2NDE1NTUyLDExMjAxMC4xNDk5NzkzNTQ1LDcxNTMwLjI2NjMxODI1MjI0LDIwMDE0LjAxNTkzMTkyMjMwMiw1ODIxMS42MzI2NzUzODUzMSwzOTE3Ni40OTg0OTM5ODYxNCw1NzI2Ny4yNjk1ODg3MjU3MzYsNjM1OTAuMTc5MTg2NjE1MzQsMjY2OS44OTEwNTI1NDQ2ODIsNDI3NjIuMDA5NjA3NzYxNjQsNjI2Mi44NDk0Mzc5MTI2NTUsNy43NTM1MTk2MTk2OTYyNDYKKzI5LFR1ZSAyMiBGZWIgMTEsNDA1Ni40ODI0MTU3OTEzNjA0LDM1MjkuMTkzNDA5NTY5MzQ5NiwxMDQxLjE5NzE1MjUzMzA1NDYsNDA3My40NjE3MDA4MjI0OTA1LDEyMDQuMzE2NDk5NTkzOTU1LDM3NTI5LjQ0MzMyMDUzMjkzLDkxNTYuMDk2NjIxOTEyMDMsMTQ0NTUuMDU3ODg2NDU1NTA4LDM0Njc5Ljk3NjM4MTI1NzY5LDMzNDQ2LjQ4NzA0NjcyMzE3LDM4MTQuMTI2NjkyNzU0MTYzMywxMzY4MC4zNzkyNjg4NjI1ODcsNDc3LjIzMTIyMjU1MjE3MzczLDM4ODQuNjQxODg0ODAwNDIxNCwzNzA2Ni4wNjE1MTA0MTI1NSwxMDUxNTguNjg5MjY0Nzg4Nyw2MTI5NC42MDEyMjczMTI2NCwxNzEwNi42MTA2NDE0ODc2NjMsNDk3NTIuNTE2MjgwNTI0NzksMzM2NDIuNDk3NjgxOTg2NDMsNDg5NDIuNzA0MzU1NDg5NDMsNTQzNDYuMDQ5NzcwMjQxNjgsMzQ4NS42NTAwMjYxNTAwNTU1LDUyMzQzLjk4NzI4ODkzMjg4LDY5MzIuNzg4Nzg3MzY2NjczLDEwLjI0NDk4ODc0MTcxNDE3CiszMCxXZWQgMjMgRmViIDExLDM0MjUuODEwODk2NTMyMjI0LDI5NTYuMDc0ODA0MDY4MjgyNCwxMjc1LjYzMTM1NjI1MjgxNzYsNDMxNS4yNjkxMDI5NDk2MjMsMTUxMS4yMTY1ODY5MTAzMDQ0LDQ0Nzg3LjIxNTI3MjAyMTQ0LDExODc2Ljc1MTc0MjE2MjE2OSwxODQwMC4yMTU5OTA0Mjk4NTMsNDA5NzIuNjU5NTQwODM0Njg0LDQwMDUzLjk0NzMzMzQxOTUxLDQ4MTQuNjEzMjkwNjgzMjYxLDE3NjExLjYyMjM5NzM5Mzg5LDY0OS44OTUyMjUzODU4OTE0LDUwOTUuOTc1OTg0Njk2OTQxLDMxMTcyLjUzODE1MTgwOTg2Niw5NjM1Mi4xMTA1NzEzMzQ4MSw1MTQ2MC42NzU0OTYyNzEwNywxNDMyOC42NjYxNzMxMDY4NzgsNDE2NzEuODkwMzI5ODA5OTYsMjgzMDAuMDg4NTM2NTgyNjIsNDA5OTEuNTMxMzA5OTg1OTU2LDQ1NTE2Ljc5MjUyMjU2ODA3NCw0NTI5LjA1MDg1MTk3ODMwNSw2MzUwMS45NDk0MjA5MjQ0LDc1NTIuOTQwMjE5NjE5NTYxNSwxMy40NTIwMTE2MDIzNDg1MTcKKzMxLFRodSAyNCBGZWIgMTEsMjg0OS4wNjIyOTg4MzU1NzM1LDI0NDAuMDQ5OTIzMzgxNDA5NCwxNTQxLjM5MDg2OTEzODM1MjYsNDQ5NC4zMTk4NTY2MTM1NTI1LDE4NzkuMTgxNjE5MDc4NjYsNTI4MjMuOTU4MDE5ODI4MSwxNTMxMC40OTAyNDg2MTk5ODgsMjMyMTkuNTAxNjgxMTkzMDIsNDc3NDYuMjA3MTE1NTk0Njc2LDQ3NDU3LjI4Nzc0ODIyNzQwNSw2MDIxLjQzNjI0NjQzMjgyNSwyMjUwOC4wOTM3NDQ2MzI3NzMsODgwLjMxMTA1MTE2MDI5ODgsNjY0NS45NTQ0Mzg3NTczMzUsMjU4MjUuNDE2MTA3MzczMjMyLDg2MzkwLjA2NDY0MTcxNDQ1LDQyNTcwLjc1NjQ1NjQ1MTI2LDExODI5LjU0NzUyMzI4NDQ5MSwzNDQwMy4zNzk5NTA0MDIzMiwyMzQ1MC4yOTM1ODk1MjMwNjIsMzM4NDAuMjIyNjkwNDkyNTcsMzc1NzUuODgyNTk5Njg3NjEsNTg1NC45NTQ4ODQzOTA5MzcsNzYyMzQuNzQ5NDIxNzUzMSw4MDkxLjg0NzMxNjYzNDE0MywxNy41NDIzMTg0MDcwMzgzOQorMzIsRnJpIDI1IEZlYiAxMSwyMzQ1LjcyNzYxOTMwOTExNSwxOTk1LjgxNTYwMTI0Mjc0MDcsMTgzMi45NTQ1OTI5NDYxMTg1LDQ2MDIuNjM1MTI1MTQxMjM4LDIzMTIuNjg0Nzc1MTg4NDk3NSw2MTQ1Ni4xMzE2MjUyNzQxNywxOTU5OS42NTA0MDM4Mjk2MywyOTAwOC44OTIxNjI2ODYwNzYsNTQ3NTkuMDkxMzUyODczMDE2LDU1NTMzLjQ2OTkyNzU4NjUwNiw3NDUwLjE3ODgyMjk3ODM0MiwyODUyNy4yNDc4MTA0NDMyODUsMTE4NS44NjQ3MDIyOTI2MTksODYxMS4xNjExNjkwMzE4OTcsMjExODkuODM1ODg5ODExODEzLDc2MDU3LjE5MTkwNzk1MTAxLDM0ODg3Ljg5NTg2MzU0NDc3LDk2NzguODE2MzYzMzY4MzczLDI4MTQ4LjY2ODU1NzQxNTk0NiwxOTI0My45NTExNjgyNjk4NiwyNzY4Ni45NDA2NDY4OTIzNzcsMzA3NDMuMjg0MTc1ODAzODcsNzUyNy40NTU1NTU2NjY0MzMsOTAzOTQuMjg5MzY2Njc0NDYsODUxOC44MjU3NjAzMzMxOCwyMi43MDI3NjkyMDI3OTQwMQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BZ2luZ1NFSVJEaXNlYXNlX0ZEX1JlZmVyZW5jZS9BZ2luZ1NFSVJEaXNlYXNlL2h1bWFuMXRvMS9Qb3B1bGF0aW9uIENvdW50XzIuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BZ2luZ1NFSVJEaXNlYXNlX0ZEX1JlZmVyZW5jZS9BZ2luZ1NFSVJEaXNlYXNlL2h1bWFuMXRvMS9Qb3B1bGF0aW9uIENvdW50XzIuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY3MGJjNzMKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FnaW5nU0VJUkRpc2Vhc2VfRkRfUmVmZXJlbmNlL0FnaW5nU0VJUkRpc2Vhc2UvaHVtYW4xdG8xL1BvcHVsYXRpb24gQ291bnRfMi5jc3YKQEAgLTAsMCArMSwzMyBAQAoraXRlcmF0aW9uLHRpbWUsRUctRlJHLUcyMTAwMDEsRUctRlJHLUcyMTAwMDIsRUctRlJHLUcyMTAwMDMsRUctRlJHLUcyMTAwMDQsRUctRlJHLUcyMTAwMDUsRUctTE9FLUcyNDAwMDEsRUctTE9FLUcyNDAwMDIsRUctTE9FLUcyNDAwMDMsRUctTE9FLUcyNDAwMDQsRUctTE9FLUcyNDAwMDUsRUctTE9FLUcyNDAwMDYsRUctTE9FLUcyNDAwMDcsRUctTE9FLUcyNDAwMDgsRUctTE9FLUcyNDAwMDksRUctVVBFLUcyOTAwMDEsRUctVVBFLUcyOTAwMDIsRUctVVBFLUcyOTAwMDMsRUctVVBFLUcyOTAwMDQsRUctVVBFLUcyOTAwMDUsRUctVVBFLUcyOTAwMDYsRUctVVBFLUcyOTAwMDcsRUctVVBFLUcyOTAwMDgsRUctVVJHLUczMDAwMDEsRUctVVJHLUczMDAwMDIsRUctVVJHLUczMDAwMDMsRUctVVJHLUczMDAwMDQKKzEsVHVlIDI1IEphbiAxMSwxMTgwMjkuNiwxMDUzODMuMjAwMDAwMDAwMDEsNjEzNDEuNjAwMDAwMDAwMDA2LDEyNjgwOS4yMDAwMDAwMDAwMSwxMjc4MjIuNDAwMDAwMDAwMDEsMjA2NjI5OS4yMDAwMDAwMDAyLDIyNDU0NDUuMiwxODQwMzU2LjgsMTU5ODUzNS42LDE5OTg1NzIuMCw0MDU4NTEuMiwyMzcyNTMxLjIsNDY5NTM3LjYwMDAwMDAwMDAzLDEyNDY0NDEuNiwxMTE0MDkxLjYsMjU1NzQ5NC44MDAwMDAwMDAzLDE4NTI4MDQuMCw1MjEwNzcuMiwxNTE2NTcxLjIwMDAwMDAwMDIsMTAwOTk5NC4wLDE0OTIwNzguMCwxNjU2OTE0LjgsMTQ3Mzk3Ni4wLDMzNTk4OTYuNDAwMDAwMDAwNCwyMTQyNjYuNDAwMDAwMDAwMDIsMjY4Mi44CisyLFdlZCAyNiBKYW4gMTEsMTE3NTMzLjA2NTk0MDAwOTgsMTA0OTM5Ljg2NzU4MDQxNDA4LDYxMDgzLjU0NDQ0NzAzNDUyLDEyNjI3NS43MzEzODc3MTg3NywxMjcyODQuNjY4OTk2Njc4MDIsMjA1NzYwNi41Njc1NTA3NjI4LDIyMzU5OTguOTI1MzIyNzg4LDE4MzI2MTQuNjc1NzA0NjE1LDE1OTE4MTAuNzgzNzU0Njk0NywxOTkwMTY0LjI4NjQzMjAyNDMsNDA0MTQzLjg0MDYyNDk5NjY0LDIzNjI1NTAuMjkyMjUxNTI1LDQ2NzU2Mi4zMjA4MjU1NzIxLDEyNDExOTcuOTk0MDg5Mzc1MywxMTA5NDA0Ljc3MjA3NDIxNzIsMjU0NjczNS43NzYxOTIwMDgsMTg0NTAwOS41MTIwNzA4MTg2LDUxODg4NS4xMDA5MTkwNTQ4LDE1MTAxOTEuMTk2NTUwMDE2MywxMDA1NzQ1LjA5NjE1Mzk2NywxNDg1ODAxLjAzNjAyNTE4MjgsMTY0OTk0NC4zOTA2MDUyMjIyLDE0Njc3NzUuMTg4NjEzNjM0OCwzMzQ1NzYxLjc4NDYwOTk3NTgsMjEzMzY1LjAxMTE0OTEzOTg0LDI2NzEuNTEzODM0Njk3ODkyCiszLFRodSAyNyBKYW4gMTEsMTE3MDM3LjA1NjIzMTcyMDk2LDEwNDQ5Ny4wMDMzMzAzMzk5OCw2MDgyNS43NjE0MDY4MzEyOSwxMjU3NDIuODI2MTMwODk4OTYsMTI2NzQ3LjUwNTg1MDAwMzEzLDIwNDg5MjMuMTE0NzI2ODE0NCwyMjI2NTYyLjYyNjEzNDg2NzMsMTgyNDg4MC43MjcyNzU0NDY1LDE1ODUwOTMuMDY5MDc0MjY0MywxOTgxNzY1LjQ1MTYwODI2NjIsNDAyNDM4LjI4NDI2MTg0MTMsMjM1MjU3OS45MjQ1Nzc0OTkzLDQ2NTU4OS4xMjc1OTI2MzE5LDEyMzU5NTkuOTI1NTUwNTA4LDExMDQ3MjIuODkzNTQ5NDgyLDI1MzU5ODguMTE0MTY3NDEyMywxODM3MjIzLjI1NTMwNTA4ODgsNTE2Njk1LjMxNjc0NjU0MjQsMTUwMzgxNy45MzA1MzQ0NDY4LDEwMDE1MDAuNjc5MjUwODA0NywxNDc5NTMwLjcwMDY3MjY1OTMsMTY0Mjk4MS4zNDIxMjc0ODksMTQ2MTU4MC45MjU0MzA2MywzMzMxNjQyLjA5NTcwNzgyOTYsMjEyNDY0LjU3NDE4NjIwNzY3LDI2NjAuMjM5NTg3ODUzMDU1NgorNCxGcmkgMjggSmFuIDExLDExNjU0MS41NzMxMDkxNTgzLDEwNDA1NC42MDkyNDQ0MzU3Miw2MDU2OC4yNTIwNDA0NDM2MiwxMjUyMTAuNDg2NjI5NzQyNjksMTI2MjEwLjkxMjk3OTM1NDk4LDIwNDAyNDguODgwNjM4Mzc2MywyMjE3MTM2LjM0NDkzNzI3NSwxODE3MTU0Ljk4OTU0NjE1MywxNTc4MzgyLjQ4NjIxNTI1NjIsMTk3MzM3NS41MzMzNTcwMjg0LDQwMDczNC41Mzg1OTIzNDk5LDIzNDI2MjAuMTQxODg0NDAxLDQ2MzYxOC4wMjkxODg0MzAxLDEyMzA3MjcuNDE3OTc1NjI4NSwxMTAwMDQ1Ljk4NTUxMjk0ODgsMjUyNTI1MS44NjIzMzM2MiwxODI5NDQ1LjI2NDc3MjA2NDgsNTE0NTA3Ljg1NzM0NTIzOCwxNDk3NDUxLjQzMDY1ODQ0NDUsOTk3MjYwLjc2ODQwNzM0MiwxNDczMjY3LjAyMjE4Mzk4MzQsMTYzNjAyNS42ODU5MjgzMjk4LDE0NTUzOTMuMjM4MzQ5OTExMywzMzE3NTM3LjM5Njg4ODU1ODMsMjExNTY1LjA5MzE2Njc2NjI1LDI2NDguOTc3MzEwMjQ0NjMzCis1LFNhdCAyOSBKYW4gMTEsMTE2MDQ2LjYxODc5NjA3NjEsMTAzNjEyLjY4NzMwODE4OTE4LDYwMzExLjAxNzUwMzU4NzA3LDEyNDY3OC43MTUyNzM0MTc2MywxMjU2NzQuODkyNzkyOTkwNTUsMjAzMTU4My45MDQyMTU4NjYyLDIyMDc3MjAuMTI0MDM1NjU1NSwxODA5NDM3LjQ5NzE5MDI1MSwxNTcxNjc5LjA2NTI5NTExODgsMTk2NDk5NC41NjkzMzI3MDQ0LDM5OTAzMi42MTEyNjMwMjI0LDIzMzI2NzAuOTg4ODcyMjU3NSw0NjE2NDkuMDM0NDU5MzU5OSwxMjI1NTAwLjQ5NDg0ODUwNTYsMTA5NTM3NC4wNjg5NTQ4MjU2LDI1MTQ1MjcuMDY4ODc1NDkyNiwxODIxNjc1LjU3NTM3OTc3NzIsNTEyMzIyLjczMjUzMjU3NCwxNDkxMDkxLjcyNTQ5NTE5NTIsOTkzMDI1LjM4MjY1MjUyMTYsMTQ2NzAxMC4wMjg2NzA4NzI2LDE2MjkwNzcuNDUzMjI1MDk0OCwxNDQ5MjEyLjE1NTE0MjE0MjcsMzMwMzQ0Ny43NTE0NTQ3OTEsMjEwNjY2LjU3MjEyNzczMzczLDI2MzcuNzI3MDUyNDE4MzE3Cis2LFN1biAzMCBKYW4gMTEsMTE1NTUyLjE5NTUwNTk3MDQyLDEwMzE3MS4yMzk0OTc5MjkxOSw2MDA1NC4wNTg5NDY2NDU4ODQsMTI0MTQ3LjUxNDQ0MDA3MDE3LDEyNTEzOS40NDc2ODgwNTc1NCwyMDIyOTI4LjIyNDIxMDExNTgsMjE5ODMxNC4wMDU1NDA0OTksMTgwMTcyOC4yODQ3MjEzMDgyLDE1NjQ5ODIuODM2MjkyMzY4NCwxOTU2NjIyLjU5NzAxNTk4ODUsMzk3MzMyLjUwOTg4NTA4NTYzLDIzMjI3MzIuNTEwMDM0ODk1LDQ1OTY4Mi4xNTIyMTEwMDU5LDEyMjAyNzkuMTc5NTQ0NTc3LDEwOTA3MDcuMTY0NzY4NDkzNywyNTAzODEzLjc4MTc1NTYxNywxODEzOTE0LjIyMTg3NTIyNDcsNTEwMTM5Ljk1MjA4MDY5NTQsMTQ4NDczOC44NDM0ODYwNzYyLDk4ODc5NC41NDA5Mjc1MDU0LDE0NjA3NTkuNzQ4MTE1MzY1NCwxNjIyMTM2LjY3NTA5MTEyODgsMTQ0MzAzNy43MDM0NDk4ODIzLDMyODkzNzMuMjIyNDE3MTQyMiwyMDk3NjkuMDE1MDg3NDA1NywyNjI2LjQ4ODg2NDY4NjYzNAorNyxNb24gMzEgSmFuIDExLDExNTA1OC4zMDU0NDIwOTE2OSwxMDI3MzAuMjY3NzgwODM2NjQsNTk3OTcuMzc3NTE0Njc5NDYsMTIzNjE2Ljg4NjQ5NjgzODg4LDEyNDYwNC41ODAwNTA2MDc4MiwyMDE0MjgxLjg3OTE5MjU5LDIxODg5MTguMDMxMzY3Mzc0LDE3OTQwMjcuMzg2NDkzMTM3NiwxNTU4MjkzLjgyOTA0Njc1ODYsMTk0ODI1OS42NTM3MTQwODU3LDM5NTYzNC4yNDIwMzQ1MzU3NCwyMzEyODA0Ljc0OTY2MDE4OTcsNDU3NzE3LjM5MTIwODE5NDE0LDEyMTUwNjMuNDk1MzMxMDgxOCwxMDg2MDQ1LjI5Mzc1MDYyNCwyNDkzMTEyLjA0ODcxNDU3LDE4MDYxNjEuMjM4ODQ0NTcxNiw1MDc5NTkuNTI1NzE2NTE0MjcsMTQ3ODM5Mi44MTI5NDA4MTc4LDk4NDU2OC4yNjIwODU3ODE0LDE0NTQ1MTYuMjA4MzY5OTc5LDE2MTUyMDMuMzgyNDU1OTQ1NSwxNDM2ODY5LjkxMDc4NzczODksMzI3NTMxMy44NzI0OTQ1NjM1LDIwODg3Mi40MjYwNDU0NzgzOCwyNjE1LjI2Mjc5NzEyOTIyNQorOCxUdWUgMSBGZWIgMTEsMTE0NTY0Ljk1MDc5NzQ1NywxMDIyODkuNzc0MTE0OTU1NjcsNTk1NDAuOTc0MzQ3NDI4ODUsMTIzMDg2LjgzMzc5OTg2Nzg4LDEyNDA3MC4yOTIyNTU2MTEwNCwyMDA1NjQ0LjkwNzU1NTYwMjcsMjE3OTUzMi4yNDMyMzcxNzEzLDE3ODYzMzQuODM2Njk5OTkyNCwxNTUxNjEyLjA3MzI1OTQ0ODQsMTkzOTkwNS43NzY1NjA5MjM2LDM5MzkzNy44MTUyNTIxODE1LDIzMDI4ODcuNzUxODMwMzE3LDQ1NTc1NC43NjAxNzUwNDEzLDEyMDk4NTMuNDY1MzY3MTkyNCwxMDgxMzg4LjQ3NjYwMTI5NDUsMjQ4MjQyMS45MTcyNzExOTQsMTc5ODQxNi42NjA3MTMzNDI1LDUwNTc4MS40NjMxMjE3NjQ4LDE0NzIwNTMuNjYyMDM3NjYxMyw5ODAzNDYuNTY0ODkzMjcwNywxNDQ4Mjc5LjQzNzE1Nzg2NTYsMTYwODI3Ny42MDYxMDU0MDMzLDE0MzA3MDguODA0NTQyNTI1MiwzMjYxMjY5Ljc2NDExNDcwNSwyMDc5NzYuODA4OTgzMDcwNjYsMjYwNC4wNDg4OTk1OTMxMzMKKzksV2VkIDIgRmViIDExLDExNDA3Mi4xMzM3NTQ4NjI3OSwxMDE4NDkuNzYwNDQ5MjA0NzIsNTkyODQuODUwNTc5MzIzMjQsMTIyNTU3LjM1ODY5NDMyMDMsMTIzNTM2LjU4NjY2Njk2ODA3LDE5OTcwMTcuMzQ3NTEyNTM5LDIxNzAxNTYuNjgyNjc2MzMzNSwxNzc4NjUwLjY2OTM3Njc2MDMsMTU0NDkzNy41OTg0OTMxNzMzLDE5MzE1NjEuMDAyNTE3MzY1LDM5MjI0My4yMzcwNDM2ODY5NywyMjkyOTgxLjU2MDQyMjAwNTYsNDUzNzk0LjI2Nzc5NTAwNDUsMTIwNDY0OS4xMTI3MDQxNDUsMTA3NjczNi43MzM5MjQxMDk1LDI0NzE3NDMuNDM0NzIyODY2NCwxNzkwNjgwLjUyMTc0NjYxOTQsNTAzNjA1Ljc3MzkzMzA1ODk1LDE0NjU3MjEuNDE4ODIzNTIyLDk3NjEyOS40NjgwMjg0MzQxLDE0NDIwNDkuNDYyMDcyOTcyNCwxNjAxMzU5LjM3NjY4MTg4MDgsMTQyNDU1NC40MTE5NzM0MTY2LDMyNDcyNDAuOTU5NDE0MjY2LDIwNzA4Mi4xNjc4NjI3NDc0LDI1OTIuODQ3MjIxNjkzMDgzCisxMCxUaHUgMyBGZWIgMTEsMTEzNTc5Ljg1NjQ4Njg5NzMyLDEwMTQxMC4yMjg3MjMzODgsNTkwMjkuMDA3MzM5NDg2NTI1LDEyMjAyOC40NjM1MTQzOTE4LDEyMzAwMy40NjU2Mzc1MjQ2OSwxOTg4Mzk5LjIzNzA5ODA3MzEsMjE2MDc5MS4zOTEwMTcxMDQ1LDE3NzA5NzQuOTE4Mzk5MTYwNSwxNTM4MjcwLjQzNDE3MjQxMzMsMTkyMzIyNS4zNjgzNzE0MTkxLDM5MDU1MC41MTQ4Nzk2MTU0LDIyODMwODYuMjE5MTA2Nzg1NSw0NTE4MzUuOTIyNzEwOTMxNzQsMTE5OTQ1MC40NjAyODUzNzQ3LDEwNzIwOTAuMDg2MjI2MzE3OCwyNDYxMDc2LjY0ODE0NTc3MTYsMTc4Mjk1Mi44NTYwNDkyMzkyLDUwMTQzMi40Njc3NDE5NDE3NCwxNDU5Mzk2LjExMTIxNDE1MDIsOTcxOTE2Ljk5MDA4MjM4MDUsMTQzNTgyNi4zMTA1ODAxOTk4LDE1OTQ0NDguNzI0Njg0NDUzMywxNDE4NDA2Ljc2MDIxMjEwNjksMzIzMzIyNy41MjAyMzkzNTUsMjA2MTg4LjUwNjYyODU0MTc0LDI1ODEuNjU3ODEyODExNzcxCisxMSxGcmkgNCBGZWIgMTEsMTEzMDg4LjEyMTE1NTk1MzMzLDEwMDk3MS4xODA4NjgyMDY0NCw1ODc3My40NDU3NTE3NDM4MzUsMTIxNTAwLjE1MDU4MzMyNDE1LDEyMjQ3MC45MzE1MDkwODUyNSwxOTc5NzkwLjYxNDE2ODM5MDIsMjE1MTQzNi40MDkzOTc3NTksMTc2MzMwNy42MTc0ODM5NDA3LDE1MzE2MTAuNjA5NTgzNTY2NCwxOTE0ODk4LjkxMDczODQ1OCwzODg4NTkuNjU2MTk1NDcxNiwyMjczMjAxLjc3MTM1MTI0OSw0NDk4NzkuNzMzNTI1MTExOCwxMTk0MjU3LjUzMDk0NjY0NjQsMTA2NzQ0OC41NTM5MTg5MzEyLDI0NTA0MjEuNjA0Mzk1MTc0LDE3NzUyMzMuNjk3NTY1OTkxMiw0OTkyNjEuNTU0MDk0OTQ2NjUsMTQ1MzA3Ny43NjY5OTQyOTI0LDk2NzcwOS4xNDk1NTg5NzQxLDE0Mjk2MTAuMDEwMDE1NTU5NCwxNTg3NTQ1LjY4MDQ2OTA2OTksMTQxMjI2NS44NzYyNjI5NjYsMzIxOTIyOS41MDgxNDU4NDk3LDIwNTI5NS44MjkyMDU5Nzg0NiwyNTcwLjQ4MDcyMjEwMDE0OAorMTIsU2F0IDUgRmViIDExLDExMjU5Ni45Mjk5MTQyNDA2NCwxMDA1MzIuNjE4ODA1MjY5Miw1ODUxOC4xNjY5MzQ2MjgxMSwxMjA5NzIuNDIyMjEzNDE4NywxMjE5MzguOTg2NjEyNDI2MzIsMTk3MTE5MS41MTY0MDE0MDY2LDIxNDIwOTEuNzc4NzYyODUyLDE3NTU2NDguODAwMTg5MDcyNSwxNTI0OTU4LjE1Mzg3NTExNzQsMTkwNjU4MS42NjYwNjE0MjYsMzg3MTcwLjY2ODM5MTc0NjI0LDIyNjMzMjguMjYwNDE3Mjk2LDQ0NzkyNS43MDg3OTkzMjQ0NiwxMTg5MDcwLjM0NzQxNjE5LDEwNjI4MTIuMTU3MzE2ODQ0NCwyNDM5Nzc4LjM1MDEwNTY5MywxNzY3NTIzLjA4MDA4MTgxNTgsNDk3MDkzLjA0MjQ5MzY1MTk3LDE0NDY3NjYuNDEzODE3ODU0OCw5NjM1MDUuOTY0ODc0OTQyNiwxNDIzNDAwLjU4NzU4NjMzNjgsMTU4MDY1MC4yNzQyNDg3MzEsMTQwNjEzMS43ODcwMDMxOTg0LDMyMDUyNDYuOTg0Mzk5NzU2LDIwNDQwNC4xMzk1MDIwOTY0OCwyNTU5LjMxNTk5ODQ3NzcxMDMKKzEzLFN1biA2IEZlYiAxMSwxMTIxMDYuMjg0OTAzNzk4OTIsMTAwMDk0LjU0NDQ0NzEwNDk3LDU4MjYzLjE3MjAwMTM4NjY4LDEyMDQ0NS4yODA3MDYwNTAxMiwxMjE0MDcuNjMzMjY3MzEwNDUsMTk2MjYwMS45ODEyOTY5OTQ1LDIxMzI3NTcuNTM5ODYzNDU0NiwxNzQ3OTk4LjQ5OTkxMzk1MSwxNTE4MzEzLjA5NjA1NzgxMiwxODk4MjczLjY3MDYxMTA1OTgsMzg1NDgzLjU1ODgzMzk1OTE2LDIyNTM0NjUuNzI5MzYyMzk2LDQ0NTk3My44NTcwNTQ4OTEsMTE4Mzg4OC45MzIzMTQ4MzQsMTA1ODE4MC45MTY2Mzg5NTQ1LDI0MjkxNDYuOTMxNjkxNTc3NywxNzU5ODIxLjAzNzIyMjAwMzYsNDk0OTI2Ljk0MjM5NDczNjUsMTQ0MDQ2Mi4wNzkyMDgwNjUsOTU5MzA3LjQ1NDM1OTk4NjQsMTQxNzE5OC4wNzAzNzEyNDk1LDE1NzM3NjIuNTM2MDkzNjY2MiwxNDAwMDA0LjUxOTE4MzAwMDMsMzE5MTI4MC4wMDk5Nzc1NjgsMjAzNTEzLjQ0MTQwNTQ3MjMyLDI1NDguMTYzNjkwNjMyNzg3NgorMTQsTW9uIDcgRmViIDExLDExMTYxNi4xODgyNTY1MTAyNyw5OTY1Ni45NTk2OTcxNzMyLDU4MDA4LjQ2MjA1OTk4NzkwNSwxMTk5MTguNzI4MzUxNjgwMTEsMTIwODc2Ljg3Mzc4MjQ5OTk3LDE5NTQwMjIuMDQ2MTc3MjAxLDIxMjM0MzMuNzMzMjU3Mzk3LDE3NDAzNTYuNzQ5ODk5NTkxOCwxNTExNjc1LjQ2NTAwNDgyNiwxODg5OTc0Ljk2MDQ4NjEsMzgzNzk4LjMzNDg1MjcwMzEsMjI0MzYxNC4yMjEwMzk4NDMzLDQ0NDAyNC4xODY3NzI3MjQ5NiwxMTc4NzEzLjMwODE1NjEzOTIsMTA1MzU1NC44NTIwMDgyODIsMjQxODUyNy4zOTUzNDY5ODE1LDE3NTIxMjcuNjAyNDUyMzk1LDQ5Mjc2My4yNjMyMTAwMzU4LDE0MzQxNjQuNzkwNTU3NjM3Niw5NTUxMTMuNjM2MjU2ODg2NSwxNDExMDAyLjQ4NTMyMDYwODYsMTU2Njg4Mi40OTU5MzE1MTI3LDEzOTM4ODQuMDk5NDI1NzE5OCwzMTc3MzI4LjY0NTU2NjYzMDYsMjAyNjIzLjczODc4NjI0Mjg3LDI1MzcuMDIzODQ3MDIyODI5NgorMTUsVHVlIDggRmViIDExLDExMTEyNi42NDIwOTQxMTIyLDk5MjE5Ljg2NjQ0OTg3NTY3LDU3NzU0LjAzODIxMzEyNzgyLDExOTM5Mi43Njc0Mjk4NzA5MywxMjAzNDYuNzEwNDU1NzcwODIsMTk0NTQ1MS43NDgxODY0NzUsMjExNDEyMC4zOTkzMDk1MTM2LDE3MzI3MjMuNTgzMjI4ODMxMiwxNTA1MDQ1LjI4OTQ1MTk0MTgsMTg4MTY4NS41NzE2MTM1MSwzODIxMTUuMDAzNzQzNjg3NiwyMjMzNzczLjc3ODA5OTAwNzQsNDQyMDc2LjcwNjM5MzM4MjgsMTE3MzU0My40OTczNDY1MzQ5LDEwNDg5MzMuOTgzNDUyMDksMjQwNzkxOS43ODcwNDYyNDE2LDE3NDQ0NDIuODA5MDc5NTgxOSw0OTA2MDIuMDE0MzA2NTk4NjMsMTQyNzg3NC41NzUxMjg5MzY0LDk1MDkyNC41Mjg3MjE2MTUxLDE0MDQ4MTMuODU5MjU2NDgwOCwxNTYwMDEwLjE4MzU0NzQ5NTYsMTM4Nzc3MC41NTQyMjgwMTY0LDMxNjMzOTIuOTUxNTY1NTA3LDIwMTczNS4wMzU0OTYxMjg4LDI1MjUuODk2NTE1ODc0Njk4CisxNixXZWQgOSBGZWIgMTEsMTEwNjM3LjY0ODUyODIxMDI1LDk4NzgzLjI2NjU5MDU2Nzg0LDU3NDk5LjkwMTU1ODIzNjc0LDExODg2Ny40MDAyMDkyOTkzMywxMTk4MTcuMTQ1NTczOTI2MzgsMTkzNjg5MS4xMjQyOTE4ODk0LDIxMDQ4MTcuNTc4MTkxODgzLDE3MjUwOTkuMDMyODI2NTI2LDE0OTg0MjIuNTk3OTk3NzIwMSwxODczNDA1LjUzOTc0ODY5MTUsMzgwNDMzLjU3Mjc2Nzc4MzQsMjIyMzk0NC40NDI5ODU1OTgsNDQwMTMxLjQyNDMxNzExNTE2LDExNjgzNzkuNTIyMTg1NDUxOCwxMDQ0MzE4LjMzMDkwMjAwNTksMjM5NzMyNC4xNTI1NDQxNTM0LDE3MzY3NjYuNjkwMjUxMTA2NCw0ODg0NDMuMjA1MDA2NzQzMjYsMTQyMTU5MS40NjAwNTQxMzk2LDk0Njc0MC4xNDk4MjM0NDM4LDEzOTg2MzIuMjE4ODcyODQ5NCwxNTUzMTQ1LjYyODU4NDYwNzUsMTM4MTY2My45MDk5NjAwMiwzMTQ5NDcyLjk4ODA4NDMzNjMsMjAwODQ3LjMzNTM2ODQ1NzY2LDI1MTQuNzgxNzQ1MTg0OTU4CisxNyxUaHUgMTAgRmViIDExLDExMDE0OS4yMDk2NjAyOTA5Miw5ODM0Ny4xNjE5OTU1NzAzNSw1NzI0Ni4wNTMxODc0ODYwMiwxMTgzNDIuNjI4OTQ3NzcwNDEsMTE5Mjg4LjE4MTQxMjgxMTQzLDE5MjgzNDAuMjExMjgzMzY3NiwyMDk1NTI1LjMwOTg4NDA3ODMsMTcxNzQ4My4xMzE0NTk3NTMsMTQ5MTgwNy40MTkxMDM2NzM0LDE4NjUxMzQuOTAwNDc1NzAxOCwzNzg3NTQuMDQ5MTUxMDY2LDIyMTQxMjYuMjU3OTQxOTIsNDM4MTg4LjM0ODkwMzkxNzQsMTE2MzIyMS40MDQ4NjU0NjEyLDEwMzk3MDcuOTE0MTk0MTQyMywyMzg2NzQwLjUzNzM3NjI1LDE3MjkwOTkuMjc4OTU1NjY1Miw0ODYyODYuODQ0NTg4MTE0NiwxNDE1MzE1LjQ3MjMzNTQwNTksOTQyNTYwLjUxNzU0NTA1NTEsMTM5MjQ1Ny41OTA3MzU3Nzc1LDE1NDYyODguODYwNTQzNzg3MiwxMzc1NTY0LjE5Mjg2NTQ5MjMsMzEzNTU2OC44MTQ5NDUyMDY1LDE5OTk2MC42NDIyMTgxODcyOCwyNTAzLjY3OTU4MjcyMDE2OQorMTgsRnJpIDExIEZlYiAxMSwxMDk2NjEuMzI3NTgxNzM0NTYsOTc5MTEuNTU0NTMyMTgwNDgsNTY5OTIuNDk0MTg3Nzk0NjMsMTE3ODE4LjQ1NTg5MjIzMTIsMTE4NzU5LjgyMDIzNzMyNjEsMTkxOTc5OS4wNDU3NzM5MDc2LDIwODYyNDMuNjM0MTczNDA1NCwxNzA5ODc1LjkxMTczODAxMDgsMTQ4NTE5OS43ODEwOTQ0NDIxLDE4NTY4NzMuNjg5MjA3NDcyOCwzNzcwNzYuNDQwMDg0ODYwNiwyMjA0MzE5LjI2NTAwNzEzMTcsNDM2MjQ3LjQ4ODQ3MzU4MTU2LDExNTgwNjkuMTY3NDcyNDA4MiwxMDM1MTAyLjc1MzA2OTIxOTQsMjM3NjE2OC45ODY4NTkwODIsMTcyMTQ0MC42MDgwMjMzMDk4LDQ4NDEzMi45NDIyODM3NDA1NiwxNDA5MDQ2LjYzODg0NTAzODEsOTM4Mzg1LjY0OTc4MjY1MSwxMzg2MjkwLjAwMTI4MzU3MDIsMTUzOTQzOS45MDg3ODQxMDMzLDEzNjk0NzEuNDI5MDYxOTg3LDMxMjE2ODAuNDkxNjgyNTE2NCwxOTkwNzQuOTU5ODQxOTI5MiwyNDkyLjU5MDA3NjAxNzE4MDgKKzE5LFNhdCAxMiBGZWIgMTEsMTA5MTc0LjAwNDM3MzgyODI0LDk3NDc2LjQ0NjA1ODY4Mzc0LDU2NzM5LjIyNTY0MDgzNjAzLDExNzI5NC44ODMyNzg3ODQ4MSwxMTgyMzIuMDY0MzAxNDM5ODIsMTkxMTI2Ny42NjQxOTk4MDksMjA3Njk3Mi41OTA2NTUxNTQsMTcwMjI3Ny40MDYxMTM0MjA0LDE0Nzg1OTkuNzEyMTU3OTY4NywxODQ4NjIxLjk0MTE4NjAzLDM3NTQwMC43NTI3MjU3ODYxLDIxOTQ1MjMuNTA2MDE3NTA4LDQzNDMwOC44NTEzMDU3NDcyLDExNTI5MjIuODMxOTg1NTQ4NCwxMDMwNTAyLjg2NzE3MjY4NjIsMjM2NTYwOS41NDYwOTA0OTc2LDE3MTM3OTAuNzEwMTI1NjQ5OCw0ODE5ODEuNTA3MjgyMDg5OSwxNDAyNzg0Ljk4NjMyNTY1MDcsOTM0MjE1LjU2NDM0NjA2NDcsMTM4MDEyOS40NzY4MjY5MzksMTUzMjU5OC44MDI1MjI5MzMsMTM2MzM4NS42NDQ1NDEwMTIsMzEwNzgwOC4wNzc1NDMzNDM0LDE5ODE5MC4yOTIwMTc5NzIwNCwyNDgxLjUxMzI3MjM4MzQyMjYKKzIwLFN1biAxMyBGZWIgMTEsMTA4Njg3LjI0MjEwNzc3ODg3LDk3MDQxLjgzODQyNDM2NTQzLDU2NDg2LjI0ODYyMzA0NDc3NiwxMTY3NzEuOTEzMzMyNzA0MjgsMTE3NzA0LjkxNTg0ODIwNTQ4LDE5MDI3NDYuMTAyODIwOTAwNywyMDY3NzEyLjIxODczMjg0MjIsMTY5NDY4Ny42NDY4ODA5MjgyLDE0NzIwMDcuMjQwMzQ1NjcyMiwxODQwMzc5LjY5MTQ4MjcxMSwzNzM3MjYuOTk0MTk1Nzk5ODcsMjE4NDczOS4wMjI2MDY2OTQ2LDQzMjM3Mi40NDU2Mzk5NTMzLDExNDc3ODIuNDIwMjc3Njg2OCwxMDI1OTA4LjI3NjA1NDg0MzEsMjM1NTA2Mi4yNTk5NDk5MjM1LDE3MDYxNDkuNjE3Nzc2MDU4NCw0Nzk4MzIuNTQ4NzI3MTI4NSwxMzk2NTMwLjU0MTM5MDMzNiw5MzAwNTAuMjc4OTU4ODcxMywxMzczOTc2LjA0MzU0OTE2NDIsMTUyNTc2NS41NzA4MzYxNDY0LDEzNTczMDYuODY1MTY4MTkwMywzMDkzOTUxLjYzMTQ4NzgxOTQsMTk3MzA2LjY0MjUwNjMwNTEsMjQ3MC40NDkyMTg4OTcyMDE3CisyMSxNb24gMTQgRmViIDExLDEwODIwMS4wNDI4NDQ3MjU5OSw5NjYwNy43MzM0Njk1MjIzLDU2MjMzLjU2NDIwNTYyMzM1LDExNjI0OS41NDgyNjg0NDY0NSwxMTcxNzguMzc3MTA5NzczMzMsMTg5NDIzNC4zOTc3MjA3NjcsMjA1ODQ2Mi41NTc2MTg0NjQsMTY4NzEwNi42NjYxNzg1MDgsMTQ2NTQyMi4zOTM1NzI2MjcsMTgzMjE0Ni45NzQ5OTgzODc1LDM3MjA1NS4xNzE1ODIyNDI1MywyMTc0OTY1Ljg1NjIwNTk3ODQsNDMwNDM4LjI3OTY3NTY5LDExNDI2NDcuOTU0MTE1MzEzNywxMDIxMzE4Ljk5OTE3MDk2NDksMjM0NDUyNy4xNzMwOTg2NDU2LDE2OTg1MTcuMzYzMzI5ODczNCw0Nzc2ODYuMDc1NzE4Mzc3NywxMzkwMjgzLjMzMDUyMjgzMTMsOTI1ODg5LjgxMTI1ODQ5OTIsMTM2NzgyOS43Mjc1MDYyNjE2LDE1MTg5NDAuMjQyNjU4Mjg3OCwxMzUxMjM1LjExNjY4MzQyMzMsMzA4MDExMS4yMTIxODk0OTEsMTk2NDI0LjAxNTA0ODY0MiwyNDU5LjM5Nzk2MjQwNzk5NjYKKzIyLFR1ZSAxNSBGZWIgMTEsMTA3NzE1LjQwODYzNTc1NDk4LDk2MTc0LjEzMzAyNTQ3NDA2LDU1OTgxLjE3MzQ1NDU0ODkxLDExNTcyNy43OTAyODk2NjYxNSwxMTY2NTIuNDUwMzA3NDA1MywxODg1NzMyLjU4NDgwNjk3NzUsMjA0OTIyMy42NDYzMzI3Mzc1LDE2Nzk1MzQuNDk1OTg3MzY2LDE0NTg4NDUuMTk5NjE3NzM3NywxODIzOTIzLjgyNjQ2MzY4NDIsMzcwMzg1LjI5MTkzNzg4MjYsMjE2NTIwNC4wNDgwNDQ1NDMsNDI4NTA2LjM2MTU3MjQ1MDI2LDExMzc1MTkuNDU1MTU4NzQyLDEwMTY3MzUuMDU1ODgxNDIzNCwyMzM0MDA0LjMyOTk4MDA5MywxNjkwODkzLjk3ODk4NDYwNDYsNDc1NTQyLjA5NzMxMDk3MTIsMTM4NDA0My4zODAwNzc2ODY5LDkyMTczNC4xNzg3OTYzNDE2LDEzNjE2OTAuNTU0NjI3MTQ0NSwxNTEyMTIyLjg0Njc4Mjc1ODQsMTM0NTE3MC40MjQ3MDEwNTQsMzA2NjI4Ni44NzgwMzU2OTcsMTk1NTQyLjQxMzM2ODQ0NDI4LDI0NDguMzU5NTQ5NTM2NzU1NAorMjMsV2VkIDE2IEZlYiAxMSwxMDcyMzAuMzQxNTIxOTEwMDYsOTU3NDEuMDM4OTE0NTc1MjYsNTU3MjkuMDc3NDMwNTgwMDksMTE1MjA2LjY0MTU4OTIzMDEzLDExNjEyNy4xMzc2NTE0ODkwNiwxODc3MjQwLjY5OTgxMTMxNDUsMjAzOTk5NS41MjM3MDUzNTQ3LDE2NzE5NzEuMTY4MTMyMTQyNCwxNDUyMjc1LjY4NjEyMzkxNiwxODE1NzEwLjI4MDQzOTIwMTcsMzY4NzE3LjM2MjI4MDk2MTgsMjE1NTQ1My42MzkxNDk3MzA2LDQyNjU3Ni42OTk0NDk3ODIxLDExMzIzOTYuOTQ0OTYyMjQ2NiwxMDEyMTU2LjQ2NTQ1MTgxMTksMjMyMzQ5My43NzQ4MjAxMjE1LDE2ODMyNzkuNDk2NzgwMTM3OCw0NzM0MDAuNjIyNTE1NzEzMSwxMzc3ODEwLjcxNjI4MDQzMzMsOTE3NTgzLjM5OTAzNzg2ODQsMTM1NTU1OC41NTA3MTM3OTEzLDE1MDUzMTMuNDExODYyMDAxOCwxMzM5MTEyLjgxNDcxMDAyOTIsMzA1MjQ3OC42ODcxMjc5NDIsMTk0NjYxLjg0MTE3MDk0NTE1LDI0MzcuMzM0MDI2Njc2MTkyCisyNCxUaHUgMTcgRmViIDExLDEwNjc0NS44NDM1MzQyMDc0NCw5NTMwOC40NTI5NTAyMjY4MSw1NTQ3Ny4yNzcxODkyNjM4NTYsMTE0Njg2LjEwNDM0OTIzMTIsMTE1NjAyLjQ0MTM0MTU1MjI0LDE4Njg3NTguNzc4MjkwMDA1MiwyMDMwNzc4LjIyODM3NTIzLDE2NjQ0MTYuNzE0MjgxMTE4MiwxNDQ1NzEzLjg4MDU5ODI1OTksMTgwNzUwNi4zNzEzMTU3MzczLDM2NzA1MS4zODk1OTUyMzk4MywyMTQ1NzE0LjY3MDM0NzMxNSw0MjQ2NDkuMzAxMzg3MzQwNzYsMTEyNzI4MC40NDQ5NzQyMDI0LDEwMDc1ODMuMjQ3MDUzMDY3OSwyMzEyOTk1LjU1MTYyNzI5NiwxNjc1NjczLjk0ODU5ODk0MTMsNDcxMjYxLjY2MDI5OTEzNTksMTM3MTU4NS4zNjUyMjc3NTAzLDkxMzQzNy40ODkzNjI3Mzg0LDEzNDk0MzMuNzQxNDQxNDEwNywxNDk4NTExLjk2NjQwNzY4NiwxMzMzMDYyLjMxMjA3NDA2MzMsMzAzODY4Ni42OTcyODIyNjU0LDE5Mzc4Mi4zMDIxNDMxNzM0LDI0MjYuMzIxNDM5OTkxMDg0NAorMjUsRnJpIDE4IEZlYiAxMSwxMDYyNjEuOTE2NjkzNjQ4NDgsOTQ4NzYuMzc2OTM2ODg3ODMsNTUyMjUuNzczNzgwOTQyMywxMTQxNjYuMTgwNzQxMDAyMzMsMTE1MDc4LjM2MzU2NjI3NjcsMTg2MDI4Ni44NTU2MjM5NDkzLDIwMjE1NzEuNzk4NzkwNzUwMywxNjU2ODcxLjE2NTk0NjQxOTEsMTQzOTE1OS44MTA0MTIyMzAyLDE3OTkzMTIuMTMzMzE0NTEwNiwzNjUzODcuMzgwODMwMDM5NzQsMjEzNTk4Ny4xODIyNjE3NTQsNDIyNzI0LjE3NTQyNDk0MTIzLDExMjIxNjkuOTc2NTM3MjIzNywxMDAzMDE1LjQxOTc2MTU5ODEsMjMwMjUwOS43MDQxOTMxNzgsMTY2ODA3Ny4zNjYxNjYyNzE3LDQ2OTEyNS4yMTk1ODM1NTg1LDEzNjUzNjcuMzUyODg3NjM2LDkwOTI5Ni40NjcwNjQ5MTIzLDEzNDMzMTYuMTUyMzU4NjA4NiwxNDkxNzE4LjUzODc5MDg5LDEzMjcwMTguOTQyMDMxODA1MiwzMDI0OTEwLjk2NjAyOTYxODQsMTkyOTAzLjc5OTk1Mzk3NzMsMjQxNS4zMjE4MzU0MTg1NzM4CisyNixTYXQgMTkgRmViIDExLDEwNTc3OC41NjMwMTEyMzI4NSw5NDQ0NC44MTI2NzAwODc0Nyw1NDk3NC41NjgyNTA3NTk0NzYsMTEzNjQ2Ljg3MjkyNTEzMDkzLDExNDU1NC45MDY1MDM1MTI3OSwxODUxODI0Ljk2NzAxODk1MTcsMjAxMjM3Ni4yNzMyMTAwMjgsMTY0OTMzNC41NTQ0ODQyMjE2LDE0MzI2MTMuNTAyODAxODMwNiwxNzkxMTI3LjYwMDQ4NzM4MywzNjM3MjUuMzQyOTAwMjkzNCwyMTI2MjcxLjIxNTMxNjQ2Myw0MjA4MDEuMzI5NTYyNjEwMjUsMTExNzA2NS41NjA4ODgzMDE4LDk5ODQ1My4wMDI1NTk0MDIzLDIyOTIwMzYuMjc2MDkyNjExLDE2NjA0ODkuNzgxMDUwMzgyNiw0NjY5OTEuMzA5MjQ3MTQ0NSwxMzU5MTU2LjcwNTA5OTU3NzUsOTA1MTYwLjM0OTM1Mjc2NDksMTMzNzIwNS44MDg4ODc1NTMsMTQ4NDkzMy4xNTcyNDIyODc2LDEzMjA5ODIuNzI5Njk2OTk5LDMwMTExNTEuNTUwNjE2MjM5LDE5MjAyNi4zMzgyNTQwNDgzNCwyNDA0LjMzNTI1ODY2ODQ2NTUKKzI3LFN1biAyMCBGZWIgMTEsMTA1Mjk1Ljc4NDQ4Nzk3MTg5LDk0MDEzLjc2MTkzNjQzNjYxLDU0NzIzLjY2MTYzODY2ODM5NiwxMTMxMjguMTgzMDUxNDcyOTEsMTE0MDMyLjA3MjMyMDI5MzcxLDE4NDMzNzMuMTQ3NTA1OTU0LDIwMDMxOTEuNjg5NzAxMTUwMiwxNjQxODA2LjkxMTA5NDk1OTQsMTQyNjA3NC45ODQ4Njc3ODYsMTc4Mjk1Mi44MDY3MTcwODUyLDM2MjA2NS4yODI2ODY1ODY4NCwyMTE2NTY2LjgwOTczNDA3NzcsNDE4ODgwLjc3MTc2MDYzOTMsMTExMTk2Ny4yMTkxNTg5NDcsOTkzODk2LjAxNDMzNDE5ODgsMjI4MTU3NS4zMTA2ODQwMDQzLDE2NTI5MTEuMjI0NjYyNzMwNSw0NjQ4NTkuOTM4MTIzOTYwNSwxMzUyOTUzLjQ0NzU3NDcxODIsOTAxMDI5LjE1MzM0OTE5OTMsMTMzMTEwMi43MzYzMjQxNDM2LDE0NzgxNTUuODQ5ODUyMzM0MiwxMzE0OTUzLjcwMDA1ODY1MywyOTk3NDA4LjUwODAwNDAzMTYsMTkxMTQ5LjkyMDY3NTk0NTUsMjM5My4zNjE3NTUyMjM1Mjg3CisyOCxNb24gMjEgRmViIDExLDEwNDgxMy41ODMxMTQ5MDE2Myw5MzU4My4yMjY1MTM2Mzk4Miw1NDQ3My4wNTQ5Nzk0Mzc3OSwxMTI2MTAuMTEzMjU5MTY3MDksMTEzNTA5Ljg2MzE3Mjg0OTksMTgzNDkzMS40MzE5NDEyNjU3LDE5OTQwMTguMDg2MTQyNDMyOSwxNjM0Mjg4LjI2NjgyMzUyOTMsMTQxOTU0NC4yODM1NzU3MjM0LDE3NzQ3ODcuNzg1NzE3NDM5OCwzNjA0MDcuMjA3MDM1MjA2MiwyMTA2ODc0LjAwNTUzNjcyNDMsNDE2OTYyLjUwOTkzOTYzNzU2LDExMDY4NzQuOTcyMzc1MzI3NSw5ODkzNDQuNDczODc5NTUsMjI3MTEyNi44NTExMDk2MjY3LDE2NDUzNDEuNzI4MjU4MTg0Miw0NjI3MzEuMTE1MDA0MDM0NiwxMzQ2NzU3LjYwNTg5NjAzMSw4OTY5MDIuODk2MDkxNzU5NywxMzI1MDA2Ljk1OTgzODE3OCwxNDcxMzg2LjY0NDU3MTQ1MjIsMTMwODkzMS44Nzc5ODEyMDMxLDI5ODM2ODEuODk0ODcwOTM4LDE5MDI3NC41NTA4MzQxMTkyMywyMzgyLjQwMTM3MDMzOTc5NzcKKzI5LFR1ZSAyMiBGZWIgMTEsMTA0MzMxLjk2MDg3MzA5NjQyLDkzMTUzLjIwODE3MDUwNzE5LDU0MjIyLjc0OTMwMjY1OTA4LDExMjA5Mi42NjU2NzY2NDk0MywxMTI5ODguMjgxMjA2NjIzNDMsMTgyNjQ5OS44NTUwMDY3OTg5LDE5ODQ4NTUuNTAwMjIyNjczOSwxNjI2Nzc4LjY1MjU1OTUwMTYsMTQxMzAyMS40MjU3NTYzNTA0LDE3NjY2MzIuNTcxMDMzNTg4MSwzNTg3NTEuMTIyNzU4MTgyOSwyMDk3MTkyLjg0MjU0NjI4MDUsNDE1MDQ2LjU1MTk4MDU4NDUsMTEwMTc4OC44NDE0NTg0MTEsOTg0Nzk4LjM5OTg5NDk4NzIsMjI2MDY5MC45NDAyOTU4ODgsMTYzNzc4MS4zMjI5MzUyMzM4LDQ2MDYwNC44NDg2MzM0MTU5LDEzNDA1NjkuMjA1NTE4NDg4Myw4OTI3ODEuNTk0NTMyNzQ1NCwxMzE4OTE4LjUwNDQ3MzUyMTYsMTQ2NDYyNS41NjkyMTAyMTg3LDEzMDI5MTcuMjg4MjA0NjgwMiwyOTY5OTcxLjc2NzYxMTMyNDMsMTg5NDAwLjIzMjMyNDkzNTY0LDIzNzEuNDU0MTQ5MDQ2ODc1NQorMzAsV2VkIDIzIEZlYiAxMSwxMDM4NTAuOTE5NzMzNjgxOTYsOTI3MjMuNzA4NjY2OTY2MjEsNTM5NzIuNzQ1NjMyNzUzMzYsMTExNTc1Ljg0MjQyMTY2NzMyLDExMjQ2Ny4zMjg1NTYyODI0MiwxODE4MDc4LjQ1MTIxMDMwMSwxOTc1NzAzLjk2OTQ0MTQwNjIsMTYxOTI3OC4wOTkwMzczMjQ4LDE0MDY1MDYuNDM4MTA1NjM3NywxNzU4NDg3LjE5NjA0MjIxNDgsMzU3MDk3LjAzNjYzMzM0MDM1LDIwODc1MjMuMzYwMzg0NjUwNSw0MTMxMzIuOTA1NzI0ODgzMiwxMDk2NzA4Ljg0NzIyNDEwNCw5ODAyNTcuODEwOTg2MTM2NiwyMjUwMjY3LjYyMDk1MzYzNCwxNjMwMjMwLjAzOTYzNjE5OTgsNDU4NDgxLjE0NzcxNDIzMjEsMTMzNDM4OC4yNzE3NjkyMzI2LDg4ODY2NS4yNjU1MzkzMjU1LDEzMTI4MzcuMzk1MTQ4MjczOCwxNDU3ODcyLjY1MTQzOTU1MiwxMjk2OTA5Ljk1NTM0NDg3NiwyOTU2Mjc4LjE4MjMzNjM1NSwxODg1MjYuOTY4NzI2NzAwNywyMzYwLjUyMDEzNjE0ODIzOAorMzEsVGh1IDI0IEZlYiAxMSwxMDMzNzAuNDYxNjU3ODQ4OTUsOTIyOTQuNzI5NzU0MDczNzksNTM3MjMuMDQ0OTg4OTc4MjU0LDExMTA1OS42NDU2MDEyOTQwOSwxMTE5NDcuMDA3MzQ1NzM1NiwxODA5NjY3LjI1NDg4NTU4OCwxOTY2NTYzLjUzMTEwOTE1MzMsMTYxMTc4Ni42MzY4MzY1MzYyLDEzOTk5OTkuMzQ3MTg0OTk5NCwxNzUwMzUxLjY5Mzk1MTc3NTMsMzU1NDQ0Ljk1NTQwNDMzOTEsMjA3Nzg2NS41OTg0NzQwMjk3LDQxMTIyMS41Nzg5NzQ0MTMzLDEwOTE2MzUuMDEwMzgzMzk0NSw5NzU3MjIuNzI1NjY0ODQ2NywyMjM5ODU2LjkzNTU3ODQzMiwxNjIyNjg3LjkwOTE0NzQ0MzcsNDU2MzYwLjAyMDkwNDc0OTksMTMyODIxNC44Mjk4NDc3NTA1LDg4NDU1My45MjU4OTM2NTI4LDEzMDY3NjMuNjU2NjU0OTQwNSwxNDUxMTI3LjkxODc5MDkwMDYsMTI5MDkwOS45MDM4OTM1MTEsMjk0MjYwMS4xOTQ4NzQzNzcsMTg3NjU0Ljc2MzU5OTY4NDU4LDIzNDkuNTk5Mzc2MjIxNTM0NAorMzIsRnJpIDI1IEZlYiAxMSwxMDI4OTAuNTg4NTk2ODY2MzIsOTE4NjYuMjczMTc0MDI4MjUsNTM0NzMuNjQ4Mzg1NDM0OTcsMTEwNTQ0LjA3NzMxMTk0MzMsMTExNDI3LjMxOTY4ODE0Njc2LDE4MDEyNjYuMzAwMTkyNzgyNCwxOTU3NDM0LjIyMjM0NzY4NCwxNjA0MzA0LjI5NjM4MTk3MDQsMTM5MzUwMC4xNzk0MjE0NzQ3LDE3NDIyMjYuMDk3ODAyNzIzLDM1Mzc5NC44ODU3ODA3MjM3NywyMDY4MjE5LjU5NjAzNzE3Nyw0MDkzMTIuNTc5NDkxNTg0OTcsMTA4NjU2Ny4zNTE1NDI0OTI2LDk3MTE5My4xNjIzNDkzMTM1LDIyMjk0NTguOTI2NDUwODY0NCwxNjE1MTU0Ljk2MjA5OTU3NzMsNDU0MjQxLjQ3NjgxOTQzMzUsMTMyMjA0OC45MDQ4MjYwNDMyLDg4MDQ0Ny41OTIyOTI5Nzg5LDEzMDA2OTcuMzEzNjYwNTk5OCwxNDQ0MzkxLjM5ODY1NjQzMSwxMjg0OTE3LjE1ODIxODQwMTUsMjkyODk0MC44NjA3NzEzMDAzLDE4Njc4My42MjA0ODYxNDU4NCwyMzM4LjY5MTkxMzYxODg5NzYKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWdpbmdTRUlSRGlzZWFzZV9GRF9SZWZlcmVuY2UvQWdpbmdTRUlSRGlzZWFzZS9odW1hbjF0bzEvUl8yLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWdpbmdTRUlSRGlzZWFzZV9GRF9SZWZlcmVuY2UvQWdpbmdTRUlSRGlzZWFzZS9odW1hbjF0bzEvUl8yLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hN2Y2ZWQ1Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BZ2luZ1NFSVJEaXNlYXNlX0ZEX1JlZmVyZW5jZS9BZ2luZ1NFSVJEaXNlYXNlL2h1bWFuMXRvMS9SXzIuY3N2CkBAIC0wLDAgKzEsMzMgQEAKK2l0ZXJhdGlvbix0aW1lLEVHLUZSRy1HMjEwMDAxLEVHLUZSRy1HMjEwMDAyLEVHLUZSRy1HMjEwMDAzLEVHLUZSRy1HMjEwMDA0LEVHLUZSRy1HMjEwMDA1LEVHLUxPRS1HMjQwMDAxLEVHLUxPRS1HMjQwMDAyLEVHLUxPRS1HMjQwMDAzLEVHLUxPRS1HMjQwMDA0LEVHLUxPRS1HMjQwMDA1LEVHLUxPRS1HMjQwMDA2LEVHLUxPRS1HMjQwMDA3LEVHLUxPRS1HMjQwMDA4LEVHLUxPRS1HMjQwMDA5LEVHLVVQRS1HMjkwMDAxLEVHLVVQRS1HMjkwMDAyLEVHLVVQRS1HMjkwMDAzLEVHLVVQRS1HMjkwMDA0LEVHLVVQRS1HMjkwMDA1LEVHLVVQRS1HMjkwMDA2LEVHLVVQRS1HMjkwMDA3LEVHLVVQRS1HMjkwMDA4LEVHLVVSRy1HMzAwMDAxLEVHLVVSRy1HMzAwMDAyLEVHLVVSRy1HMzAwMDAzLEVHLVVSRy1HMzAwMDA0CisxLFR1ZSAyNSBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMixXZWQgMjYgSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzMsVGh1IDI3IEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCis0LEZyaSAyOCBKYW4gMTEsMTIuNTA0MTU0NjQ2NDEwNjksMTAuODgwNTI4MjY0MjQ1OTg5LDAuMCwyLjExODI3MDE1MDcwMzgyOSwwLjAsMy44MzU5NDM1OTAyNTQ0OTQ1LDAuMCwwLjAsMy43MjIyMzQ0NjIxODA3NjYsMy41NDgwNDc0NjkzMjA3MDgsMC4wLDAuMCwwLjAsMC4wLDE2Ny4xMTM3NDAwMDAwMDAwNCwzMzAuNzMwNzM2MzMyMTIwNjcsMjc3Ljc4MTcwNjQyMjYzMDM1LDc4LjAyNzAzMzE4NjQyMTI2LDIyNy4zNDYzODg3MjQ5MDEyMywxNTEuNDExMTQxMTA0ODg5NDIsMjIzLjY3MDc2MzA5MjU4Njg3LDI0OC4zOTg4MDQ2MDM5NzI3NiwwLjAsNC4xMjI1NTQ0ODIwOTg5NzUsMi40MjE4NTc3NjkyNTY0NzAyLDAuMAorNSxTYXQgMjkgSmFuIDExLDQxLjA3OTYwMjU1MDc1ODU2LDM1Ljc0NjA2ODU1MjA4MjA5LDAuMCw2Ljk2MjUwMzE3OTcxOTYzNiwwLjAsMTIuNjA5MzE3MDE1MDc4NSwwLjAsMC4wLDEyLjIzNTUwNjU4OTQ0Mjg2MywxMS42NjI5NjQ4MzIyNjQ5MywwLjAsMC4wLDAuMCwwLjAsNTQ4Ljg4MjM0OTE2MjE4NzksMTA4Ni40MDI3NTEzNjg2ODA2LDkxMi4zNjk4NTE2ODE3MjU1LDI1Ni4yNzg4NzgzNDAzNzI3LDc0Ni43MTU4NzU2MTQzNDk5LDQ5Ny4zMDc2NTY4MTMxOTIzNSw3MzQuNjQzMzQ3Njk5MDg2Miw4MTUuODYyMTg5MzI4NDAzMiwwLjAsMTMuNTUxNDk2MzE5MjQyMDgsNy45NjA1OTUwNjQ4NDE5ODcsMC4wCis2LFN1biAzMCBKYW4gMTEsODcuNjEyOTUyOTY4MDEwMTksNzYuMzA1MTA0OTk2OTY1NzcsMC4wMDc4MTg5Nzg0NDA3MDcyNTQsMTQuODg3OTc2NDMzMDA1MTI5LDAuMDA3NjAwNDA0NjEzNTUxMzU4LDI3LjIwMTI1MDkxNTMxNjE2NiwwLjAzMzEwMDAzMTM3NzgzMjcwNSwwLjA2ODE0Njk3NDY0Mjg4MDksMjYuMzk0MTk4MDU5MDEwMzUsMjUuMTQzNjkwNDI0NDM5NTI3LDAuMDIxNzk2MDM2MDU4OTc2MjYsMC4wNTQ5NTg4MTk3MTUzMTA3OTYsMC4wLDAuMDA5OTkyMTE4NDcwOTk4MjYsMTE2My41NjQxMTE2NjYyMiwyMjk3LjExODA4MDgxMTE4ODUsMTkzNC4xNjcxMzUzODU2NDI1LDU0My4zMTY1NjcyNjY3MzQ5LDE1ODMuMDU5MjA5NTY2ODc1OCwxMDU0LjIyNDY3NzMzMTc4MTUsMTU1Ny40NjQ3MDg2ODg0OSwxNzI5LjY1MTU3MjQyNjQ5NCwwLjAxMzE1NDk5MTA1MzUzNDU3NCwyOS4yODU4NDQ2NjQ3ODk3MjgsMTcuMDU3MDQxMzE1NDU0NjgzLDAuMAorNyxNb24gMzEgSmFuIDExLDE1My45MTA3ODA5NDY2NjYyNSwxMzQuMjQwNzU4NTc1ODg2NCwwLjAzNjU1MTQ3MDMzMTAyNjExLDI2LjI1OTU2NDU0NzMzNzI4NCwwLjAzNTUyOTcyNDY0MjU5NzkzLDQ4LjY3MDQ2Njg3Njk5MjM0LDAuMTU0NzM4OTQyNzg0NjM3NjgsMC4zMTg1NzkxMzEzMzI3NDY0Niw0Ny4yMjQ1OTA0MTk1NDAwMSw0NC45NDI1ODg0MTg0NzMyNjQsMC4xMDE4OTMxNzcxMzU1NDU4NCwwLjI1NjkyNjUyMDU5OTYzNzU1LDAuMCwwLjA0NjcxMjAyNDI4MDUzNDk1NCwyMDIzLjc4MDg5Njg5MDQzNzQsMzk3Ny43NzM2NjY1MjQ4NjMsMzM2NC4yNDIyMTkzNTU5MzM3LDk0NS4wOTMxMTA2NTUzMzMsMjc1My43MzI3NTgwMDYxNTIsMTgzMy41ODU0NzU5NTE1MjMyLDI3MDkuMjA5OTMyNTQzNjY3NSwzMDA4LjczMDkwMDgwOTU5MjYsMC4wNjE0OTc2MzE2NTQ1NDcyNzUsNTIuNTUwNjA3NTYwMTMxNDEsMzAuMTg2MjgzNzY2MzAwMDkzLDAuMAorOCxUdWUgMSBGZWIgMTEsMjQyLjM3MTExMDM0ODQzODQ0LDIxMS43OTYwNzI2NzkyMjYyOCwwLjEwNjE3ODEzMDI1Mjk4ODIyLDQxLjU2MjM2NTMyNDYxOTIzLDAuMTAzMzI0MDg0OTk3NTE1NDQsNzguNDk1OTQ0NjMxNjk4NjUsMC40NTMxNjM0ODI5NjM5MjQxLDAuOTMwMTMwMDY0NDI2MDMzMyw3Ni4xNTk4MDA4ODg3MDMxLDcyLjM4Njc2MjQ2NDU0MTk5LDAuMjk2NjA4MjUzMDc0MjYxOCwwLjc1MTUyNzQ2NjQ1MjM2MzYsMy4xMDQyNTE1NDY2NjQ2OTU0RS00LDAuMTM3NjY2MTQwMjExODcwMzcsMzE0Ni4zODg0NjYwNTUxNjMsNjE0Ny41MjE3ODQ5MzA1MjgsNTIzMC43NTU3MDUwMDcxNTcsMTQ2OS41NzU0Mzg5NzA0NTkzLDQyODEuOTYyOTcyNDk4NDI2LDI4NTAuNjQzODA1NzY2Nzk2LDQyMTIuNzI5Mzc0OTE0NzE3LDQ2NzguNDc4MjA2Njk3NzkyLDAuMTc5OTI0NDUxMDQ0NTUzMDQsODUuMDcyMDU1MDExNTYxNDcsNDcuOTg3Njk0MTc5ODU1Mjk2LDEuNTk4OTUxOTU5ODc5MTE1N0UtNQorOSxXZWQgMiBGZWIgMTEsMzU2LjQxMzQxMDQ4NjgwOSwzMTIuMTYwMzQ2NDMyNjA4OCwwLjI0NjY3MjE0NzcxNDM4NDQ1LDYxLjQ3Nzc1NjA5MTUxNDUxLDAuMjQwNDY5NTE1MDQ0MzY3MjMsMTE4LjgwMjEwNzk1MTMzODc0LDEuMDY2NTE0NDk1NzI3MjkyNSwyLjE3ODQ0MDUyMzQ1NjUwOTQsMTE1LjI1NzU4NjA3NTY1Nzg3LDEwOS4zODAxNDMyOTQ4ODkzNiwwLjY5MTM5MzU1NTI1MTkxMTIsMS43NjUzNjI3NDkzMTA1Njg4LDAuMDAxODg1OTM2MzEyNDExNTExLDAuMzI3MjIxNjY0NDM0MzcyNSw0NTU4LjAwNjE2NzU2NTI1MSw4ODM5LjYzMDcyNTY2NjgzMyw3NTc4LjE4MDU1NzUwODkwNCwyMTI5LjM0NjE2MTUyMTM5NzMsNjIwNC40MjU2MTE4MDAyMTk1LDQxMjkuNDkyMjM5NTQzNjYxLDYxMDQuMTA1NjU0ODkxNDYzLDY3NzguOTY2OTg4NTg1Njg5LDAuNDIyNzk4MDk2NzM5NTE1MywxMjkuMzQ0NDc4OTUyMDcxMyw3MS4zNjE3NzU5MDk1MjA3Myw5LjcxNDEyOTMxMDE1Mjk2N0UtNQorMTAsVGh1IDMgRmViIDExLDUwMC44Mjk4NDkxMzYyNDQyNiw0MzkuNzkyMjgwMzA0MjMxNiwwLjUwMjE4MjU5NDkyNjkzNzEsODYuOTQ5NjY1MTA3NTM4MTcsMC40OTA2NDY4Mjc1MTQ1NzA2NywxNzIuNTk3MTY1Nzc2MjcyNDUsMi4yMDYxODY3NjgwNzYwMjQsNC40Nzk0NzkzMzQzNTIzMzYsMTY3LjQzMDU4MjUzNTk0OTIsMTU4LjYxNTY5MDI4MTkxNTQyLDEuNDEzNDUyMDAwODExMTYwNCwzLjY0MzMyNTE4MDQ1OTU3MzQsMC4wMDY4Mjg3Njk3NDA1OTkwNywwLjY4NTAyNDc5NjkwMzQ3NzUsNjI5OC45MTcyMTcxMjIwMiwxMjEwNy42MzQ5MzA2MDM4MzQsMTA0NzMuODIyODAxMjY3MzIzLDI5NDMuNDUwNDQzMjUxOTYwNyw4NTc2LjYyNTQ5Nzk0MjYzLDU3MDYuNTkzNTM2NTQ3NTE2LDg0MzcuOTQ2ODk4MDQwMzM2LDkzNzAuODQ0NjUzMjg2MSwwLjg3Mjk2NzQyMzUwNDUyNjQsMTg4LjkxOTk2NjU4NDQ5ODU1LDEwMS41NTk1MDcyMTczOTc4OCwzLjQ3MzAxNTIzNDg2MjAzNjZFLTQKKzExLEZyaSA0IEZlYiAxMSw2ODIuMTI0MTc1NDk3MjkxLDYwMC43MzY0NjA2NjkwNzA0LDAuOTM2NTk1ODUyODAzMDI2NywxMTkuMjUxOTQ2NjM0Njc2MjQsMC45MTc0MTM4ODEzMjE1MjE3LDI0NC4wNTE3OTcxMzEzMzIyNSw0LjE4OTA0NjkwODIyMTU3NTUsOC40NDg2OTYxMjk1OTIyNDEsMjM2LjcxNTE1NzUzODgxMDIyLDIyMy44MjIzMzc5ODA3Nzg0MywyLjY0ODcwNTY2NDgzMDQyNzcsNi44OTk3NTgzODM5MDkyNDcsMC4wMTkxODM1Mjc3NDY2MDExNiwxLjMxNzg0OTU2NTU2NzU5Nyw4NDI2LjQ1OTA1MzM1ODU2NSwxNjAzMC4xMDY5ODExNzQxODksMTQwMTMuNTA2MzMyNDY3MTIzLDM5MzkuMDEyNzc0Nzk3NzEyNiwxMTQ3Ny42MDUxNTEwNjE5NCw3NjMzLjg0OTQyNjgyNDg0OCwxMTI5Mi4wMTk5OTAzNTkwNTMsMTI1NDAuNDc3OTg2ODgyMDczLDEuNjU0MTczMDQ2NzU5OTgzMSwyNjguNzUzNzQ3ODU2NTczOCwxNDAuMjc2OTY1NjkwOTgxMTcsOS41NDk5MDUwMjEwMDIyNjRFLTQKKzEyLFNhdCA1IEZlYiAxMSw5MDguODYzNzI2NjYwMTQzOCw4MDIuOTU0Njk5NjM1NTgxOCwxLjY0MDgyMzIyNjY4MzE0MzMsMTYwLjA2MjUwNTQ2ODU5NDE3LDEuNjExNzAxMDQ5MzI2NjA2NCwzMzguODM4MDA0MzE4MjY1NCw3LjQ4MTEyMzEzNTQ3NDQxOCwxNC45ODAxOTAyOTY1MjkzNDIsMzI4LjU5Nzg3OTc1NDY3NDg2LDMxMC4wNjQ0MjU5Nzg2ODk3LDQuNjY0Mjg0MjkyMTM1MDA0NSwxMi4yODc0NjYzMDE1Nzg2NzksMC4wNDYxMzU3NjI0MjYyMjU3MDQsMi4zODU5NTA5NzY3NDQwMjksMTEwMTguMzUyOTEzMDcyNzgsMjA3MTUuMDMzNjU3NjQxNDg1LDE4MzI3LjE2OTYyNjk2MDI5OCw1MTUyLjgzNDE5MDA3MjA1OCwxNTAxNC41OTUyMzM5MTc4NzcsOTk4MS42MTM5MjUxMjIyMDcsMTQ3NzEuODI2OTUwMjI2NDM3LDE2NDA1LjAzNTM5ODc4MjQ0MiwyLjk0NzgyNzIwMDMyMzUyNSwzNzUuNjI5OTE2NTczOTEwODYsMTg5Ljc2MjQ4Nzk2Njk0MDgyLDAuMDAyMjM1Mjg5MzYzNjE1MTI2CisxMyxTdW4gNiBGZWIgMTEsMTE5Mi4wNDUxMjMzNDc2MTMsMTA1Ni42NzE0NTM0OTY5Nzk3LDIuNzQyMTg1MjA5NzI4MDU0LDIxMS41NDY4NDA3MzU4NzExLDIuNzAxNTI3NDQ5Mjg1OTMyNSw0NjQuNTQzNDY3MzQyNTM0OCwxMi43NTU3NDgyNjYwNjE4ODYsMjUuMzUwNzUyMzI3MzM2NTg2LDQ1MC40MTQxNzQzOTI3Njk3LDQyNC4xMDcyMDg1NjUzNjE3Niw3LjgzNzgxMjIxNTE2MjA3NiwyMC44ODkwODY3OTk1Mzk1NjYsMC4wOTk3NjAxMjQ2MTA0NTAzNiw0LjEyNTE4MDQ1MjMxNjQ2NCwxNDE3Ni4wNjIzNTA0OTI5MjgsMjYzMDQuMTQyMTA5OTc1MDg4LDIzNTg0LjUyMjY1OTc3NjE3Niw2NjMzLjAxMTI3ODM2NDg3NSwxOTMyNy43MjY2ODAyMDIwNTMsMTI4NDEuNzMyODI5ODg5NzIsMTkwMTUuMjQyNDMzOTk2NjI0LDIxMTE3LjYzNjk1MjM3MDA2Myw1LjAxNTI5Mjk1NzExNTMxOSw1MTguNjg3OTMyODkyNTA3MiwyNTIuOTQwMjg4NDM4ODI1MDQsMC4wMDQ2ODcyMDA4ODQ5MjI3NzU2CisxNCxNb24gNyBGZWIgMTEsMTU0NS40NTc4MjY0NzU5OTQ2LDEzNzQuNzE3Mzg2MzkyMTUzLDQuNDE2MzgwNzEyNjAzNjE1LDI3Ni40NTIzMzk0Mzk0MDY5LDQuMzY0NDgxMTg0Nzg2Nzc5LDYzMS4xNzc3ODE0NTA1NjcyLDIwLjk3MDIzNzIxMjM2MTMwOCw0MS4zNTUzMzQ2MDQyOTQ1Niw2MTEuODM0NTgyMzY5MDI0Niw1NzQuODYyODYyNzAzNjcxMywxMi42OTUyMDgyODUwNTM5OSwzNC4yMzY5NzQ0MTgxNTEwMzYsMC4xOTk1MjgzMDA5MjU5NTE0Miw2Ljg3NjYwNjMwMDI1NzcxOSwxODAyOC4wNTk1NDA5NzgzMTYsMzI5NzcuMjA0NzQ3MzgxMDYsMzAwMDAuNTU5NTg5NjkwMTAzLDg0NDAuNTE4MzU0NjIzNjA2LDI0NTk0LjYzMjk1MTU5ODQ1NCwxNjMzMC41MDAyMjUwODQ0ODgsMjQxOTcuMDQzNjYzNjU3NTE4LDI2ODcyLjM4NDc1MzUxMjM1LDguMjI3MjAxMDQ5OTcwNDQ1LDcxMC4wNzI4NjIwODkxNzI2LDMzMy41NTMxODI1MTAwNTY0LDAuMDA5MDcxMjgwMTA1Nzc5MTAyCisxNSxUdWUgOCBGZWIgMTEsMTk4Ni4wMTU3NTQ2ODI0MjQsMTc3Mi44NDE3NjgyOTQ0MjQxLDYuOTAyNzI1OTAyNDg4ODI5LDM1OC4yMTQyMjU5NzIwNDAyNSw2Ljg0MzcyODk3MDk1MzQ2NCw4NTEuNzkxOTU0Mjk4NTUwMywzMy40NjY4OTE4OTIxODI2MSw2NS40ODMyMTY1NjgzNzY5Nyw4MjUuNDU4NjM2OTE2NDgzNyw3NzMuOTM1NzY4MDA2MjMzNywxOS45NTk0MjAxMTIwNTQzOTIsNTQuNDcwMjk3OTg5NDU1MjU0LDAuMzc1ODc5NzM0MjQ0NDY5NzQsMTEuMTI2MTE5MDQ0NzY0OTk0LDIyNzMyLjcxOTg4MjM4NDI5Miw0MDk1Ni4xNzE5NDI1ODkyNSwzNzg0MC40NTYxNTgzNTA2OSwxMDY1MC42MTc4OTU5MDE2NDIsMzEwMzQuNTQ4NTg0ODE3ODk0LDIwNTkxLjI3OTY1OTc2NTQxNiwzMDUzMi45NDUzMzIzNDIyMDIsMzM5MDguODQzMzM0OTM3NTEsMTMuMTAxOTg3NzUxNDM3NzkzLDk2NS43Mzk5MjIxNjI1MDY0LDQzNi4zMjcwMTA5Njk1MDk5NiwwLjAxNjUxNDI2NTgxODM5NDM5OAorMTYsV2VkIDkgRmViIDExLDI1MzQuMDEwNDI0MDYyMDY2LDIyNjkuOTQ4MDU1OTI4OTgyMywxMC41MjM1OTIyMDY0NjIzNDgsNDYxLjA3MzgwNDY2MjcxMzcsMTAuNDY4NjAxNjM5NDQ2ODE3LDExNDMuMjM5MzU4OTU2NTUzNiw1Mi4xMDYzNDMxNjEzNjI5LDEwMS4xNDc1OTYxNDk2MTc5MywxMTA3LjU0MjYxMzU5MTQzNzQsMTAzNi4yOTE4Mzg2NDI3MDIzLDMwLjYxMzQxNDU5MjA4NDcxNiw4NC41NDEzNjAzNjE5MzI4MiwwLjY3NTI4MjQzMDQ4OTc2MzIsMTcuNTU3NDYyNzgyMzYyNDcsMjg0ODAuMzk0NzQ5NjI3NDMsNTA1MDguODMzOTE0MzExNjYsNDc0MjMuMDkxMzg4NDYxNjcsMTMzNTMuODgwODAyOTk2NzA2LDM4OTExLjI2Njc1ODA4OTczLDI1Nzk2LjM4MzQ3NzE4Mjc0MiwzODI4Mi41MTI0MzkyMTc3Nyw0MjUxNS4yNzM1NjM0MTcxMDQsMjAuMzU2NjcyNjU4NDUxMDQ2LDEzMDYuNDU0MTU4MDk4MTYzNCw1NjcuMTU5NTY5MTMyNjcyNSwwLjAyODY0OTk5MjcwODE5NjI0NAorMTcsVGh1IDEwIEZlYiAxMSwzMjEzLjIxNjQ1MTg5MjcxNCwyODg4LjE4NDg4MDUwMzkxOCwxNS43MDkyNDgyMzU0ODM4MDUsNTkwLjIwODkyOTA4NjUyMDEsMTUuNjgxMTI4MTc1NjgxNzAxLDE1MjcuMTEzNDgzOTEwMDY3OCw3OS40NDM5NTU3NTE5OTU1NSwxNTIuOTg1NDgyMTU2ODUyMTMsMTQ3OC44OTM3ODkyMjUxMjcyLDEzODEuMDgzMDIyMzI0NDA4Niw0NS45ODE4MDc5NTMwODU4ODQsMTI4LjQ4NzE1NDc0OTYwNzczLDEuMTY3Mzc0NTc5NDM2ODQ5NywyNy4xMjMzMzI2MjI4NDIxMTcsMzU0OTMuOTk0MjQ0MDI5OCw2MTk1MS41MzU5MTQ0OTkxMSw1OTEyMi4wNjIwNjI1Nzk1NiwxNjY1Ni40OTAzMzU1MDk5OCw0ODUzNC4wMDUwMTYxOTg0OCwzMjE0Ny42MDY3NTMwNTEwMSw0Nzc1MC4wMTUyNzM0NjkwMyw1MzAyOS41ODA3MjU5NjE4NiwzMC45NzM5MTczMTcyOTY2OSwxNzU5LjAzNzI5NjIxOTI2NDYsNzMzLjMzNjU0MDI0NTIyNjYsMC4wNDc4MDkwNTYwMjQwNjg1NAorMTgsRnJpIDExIEZlYiAxMSw0MDUwLjc1MTU3NzI0MjU0OTUsMzY1Mi43OTY3ODc1OTAyMjA0LDIzLjAyOTYwNzUwMzgxMjQzMiw3NTEuODc1MDc3OTM5OTA4NCwyMy4wNzAyNjA0NTYyNjQ4NzIsMjAzMC45MDQzODcxMzM4NTcyLDExOC45NjMzMjQ5Mzg1MzU0LDIyNy4yNDk2NDMxMTI0OTU5LDE5NjUuOTY5Mzk1NDkzMjQ0NSwxODMyLjY2Mzk2ODE4ODIwNTIsNjcuODM2NzQ2MTc0MzcxMTQsMTkxLjc4Njk4NzkyMTI1NDM3LDEuOTU0OTkyMjA5NzI4NDgxLDQxLjE0MDY2NTY3OTM5NTk1LDQ0MDI3LjE0NDM0NzcwMzkyLDc1NjUwLjIzNTM5NTk4MTk2LDczMzYyLjYwMjI2NTc4MTIxLDIwNjc5LjM3MDc3OTkzNzEyNiw2MDI1NC44NDIwODExNjcwNCwzOTg3NC41NzA1MDcyNDExNDQsNTkyODEuOTEwNDUxNzAxNDg2LDY1ODM2LjUxNTExMDI5NzU1LDQ2LjI5MDY0NjU4OTQ0Njk3LDIzNTcuOTI1MTg3MDMyNTM4LDk0My43NzU1NjA0MjUxMjQ3LDAuMDc3MjczNjcyNDQyNDY5NDIKKzE5LFNhdCAxMiBGZWIgMTEsNTA3Ni41NjI1NTk5NjQ1MzEsNDU5MS42MDk2MjcyMTg1NzYsMzMuMjM0Njk3MDY4NjM1MDg2LDk1My41NTI3MDgzNTg3OTk3LDMzLjQxNTk0Nzk5NTU1NzEzLDI2ODkuNDIxMTA3NjQ0MzA0NCwxNzUuMzg0OTM1MzkyMTY0NSwzMzIuMzIwMTMzMjc0NzUyNiwyNjAyLjIyMjQxODE0NTQwMywyNDIxLjg0Mjc4NDM1ODM0MjcsOTguNTM1MDY3NDU2MjAwMzQsMjgxLjgzMjgxODU0MTYxMzUsMy4xODgxNzAyNzA1NDQ3MTYsNjEuNDE4MTA5NTU5MzEyODIsNTQzNTguNzA2MzY2MDI4MDcsOTIwMTguODk1ODU4NDU0OSw5MDYxMi4zNDc4MzMzMjE3NCwyNTU1NS41NDQxMTIxNTgxMSw3NDQ2MC45ODg1NzQ5NDA4Niw0OTIyOS43Nzg1NDgzMDEwNCw3MzI1OS4yMzc3OTUyMzc0LDgxMzU5LjIyNTc3OTgwNTY0LDY4LjExNTAzMjU3NDMwMDU5LDMxNDcuMTEwMjE1MDAxODgzNywxMjA5LjI5NjY1ODE1OTIxNjgsMC4xMjE2MTkxNDYxNjYzNzkyCisyMCxTdW4gMTMgRmViIDExLDYzMjIuMzg1NDAyMzMxNjYyLDU3MzQuMDA0NzAxNTEzNzI4LDQ3LjMwNTk4MDI3NzU1NTE1LDEyMDQuMDkyNDcwNDA2NzI2NSw0Ny43NDU2OTA0NjQwNzU0LDM1NDYuNTMwNzEyMDA0NzkyLDI1NS4wNzMwMjgwMzA2ODMxLDQ3OS4zNjk3MzU2MzMxNTY5LDM0MjkuNzM3ODk3MTIwNTk3LDMxODcuNDExMjE4OTc3MDM3NiwxNDEuMTk1NDIxNDkyNzMzNjMsNDA4LjU0NjAyMDE0NTEzMjMsNS4wODM1NzYyNTI2NDEyNTMsOTAuNDI1OTgxMzE0Mzc3Niw2Njc4Mi4yNTkzOTY3NzIzMSwxMTE1MTMuODkxNzcyOTU5MzgsMTExMzYzLjU2NTQ5NTU5MjUsMzE0MjUuMDI0NDQ1NTc4MjUsOTE1NTkuODg0NDc2ODE4NDQsNjA0NzkuMTIyMjU5NjY4OTgsOTAwODIuOTU2NjQ5MjI2LDEwMDA0Mi45NzI3OTMzNDAyMiw5OC44ODA1MTEyOTE5OTgzNyw0MTgyLjU1MzEwNDU2NDg4OTUsMTU0Mi45MTI1MTUzNTYyNDU0LDAuMTg3MTY5NTgwNDQyMjQ0MQorMjEsTW9uIDE0IEZlYiAxMSw3ODIwLjAzMTAyODUxNjkzOSw3MTA5LjI0MTU3NjkwNzY4Miw2Ni41MjA5NjQzMzMwNzI4NCwxNTEzLjg0NDI5NzQ2NzEzMDIsNjcuNDA2NzEyNDI4OTYzLDQ2NTcuMjY1MTQ1MDc4MzA5LDM2Ni41Njk4NDY3NzkyNDM0LDY4My4yMjU2NjYzMjY0NTUsNDUwMS4yMDExNzA2MzcyOTYsNDE3OC4wMDA3NDgyMjg0OCwxOTkuOTI1ODk4NDEzMjIwNiw1ODUuMTgyODI5NDUwOTcyMiw3Ljk1MTMyNDg0NTYzMDcyOSwxMzEuNTIxOTUyODgyMTc3ODksODE1ODkuMjE5MTk2NDIyNiwxMzQ2MjIuODI4MjU4NTM0NTQsMTM2MTA0LjU5MTM4MTczNCwzODQyNi41OTY3ODAxMjE1NiwxMTE5NTUuMjI2NDExODA5OTcsNzM4ODYuNjMxNTc2NDQ3NzUsMTEwMTUwLjM1MzM1NDI2MjMyLDEyMjMyOC45MjM0NTk5MjQwNCwxNDEuODQ3ODEyMjA3MjMyOSw1NTM1LjE1NjgwNTY1NzU2MSwxOTYwLjEyNDk0NTQxNDkxMTUsMC4yODI2MDMyODgwMzE3NDQ1CisyMixUdWUgMTUgRmViIDExLDk1OTguOTAwODUzNTIxMjY5LDg3NDQuMDQ2NzAxMjM5NTE1LDkyLjUzMzc1MTA1MzYxMjc1LDE4OTQuNzQ5NDc1OTE4OTk5Nyw5NC4xNTc0NTMxNDg4Njg0NCw2MDkwLjM0MzEyNTQ5NTc1Nyw1MjEuMjkzOTMzMTcyODE5Miw5NjMuNDc5MDk3NTE1NTU0LDU4ODIuMjMxNzU4MDY0MzA1LDU0NTQuMzA4ODM3MjAxMDAyNSwyODAuMTE0ODA4MzcwMzI5Nyw4MjkuMzgwOTg4ODM4OTE3OSwxMi4yMzE3NjQ4NDc4MzEzMSwxODkuMjQ5MzUwOTU1NDc4NzUsOTkwNDQuODMyMTAzNjM1NTYsMTYxODQ2LjA5MDUxNDkxNzgzLDE2NTI3OS4xOTM2MTgxNjQ1LDQ2Njg2LjExMTE2MjM2OTIzLDEzNjAxMi44NjA2ODYzOTU3OCw4OTY5Mi43Nzg3MDQzNTMzOCwxMzM4MjEuNDcxMTM5MjU3MiwxNDg2MTYuODY4NzY3MzM3NjcsMjAxLjM2ODgyMzU3MDg3Mjc2LDcyOTQuNDAwMTIyNjY5OTYzLDI0NzkuMjA0NTAzMzQ5MjAyMiwwLjQxOTc1MzA5MzYwMDg2MworMjMsV2VkIDE2IEZlYiAxMSwxMTY4Mi43NjY0MzI5ODE2NTQsMTA2NTkuNTE4MzUyNzUxNTksMTI3LjQ3NDI2MTE0OTEzOTg5LDIzNjAuMzY3MTMzMzEzODU4NiwxMzAuMjgyNjA1OTAwODEwMyw3OTMxLjE0Mzg4Mjk3NDU4MSw3MzQuNDQ4MTkzMDU0NzU3OSwxMzQ1LjkwNDI4NTMxMzM1MjQsNzY1NC4xMDA3NzIwNjA5OTUsNzA5MS43MzI1MjAxMTc3NzcsMzg4Ljc5OTQ1ODE0NTc5NzIsMTE2NC41MTIxMzQ0ODI4MzUzLDE4LjU0NTY3MDI2NDI0ODI5NCwyNjkuNzI5NDc5NDY0NzI5MzcsMTE5MzU3LjU2OTEzOTI2MTg4LDE5MzY2OS43MjMyMjI4NjkxNiwxOTkyMzQuNzgxMTEzMzkxMzYsNTYzMDEuNTcwNzk3MjYzODM0LDE2NDAxNy4zNjY3MTM2NTI2OCwxMDgwODYuODAwNzU3NjY1MDQsMTYxMzc2LjM3MzIzMDYzMzQ0LDE3OTIxNy43NjE2MjM0NTM3OSwyODMuMjI5NTg1OTc5NTcwNSw5NTcyLjcyODEyODQ5MDc1MSwzMTIxLjQxODQ1Njc1ODQzMTYsMC42MTQ2NTg3MjY1Nzc1MzYxCisyNCxUaHUgMTcgRmViIDExLDE0MDg2LjA2NDI5ODExMzQxNSwxMjg2Ny42MTU3NDk4MTAyOCwxNzQuMDY4NjM5ODY0ODI4MDcsMjkyNS43OTk0NjE3MzYxMDQ2LDE3OC43MzY0MDQ1MTgxMjAzNCwxMDI4NS4xNDk3NDg3NzUxMzksMTAyNi4xOTQxODU0NjM2ODg5LDE4NjQuMjU5NzcxOTgzODAzNCw5OTE2LjgyMjU1ODIyMjg4Niw5MTgzLjQzMjM3NTY0MzQxNSw1MzUuMTI5ODg5MDQyMzE0NywxNjIxLjQxODE5NDk2NTY5OCwyNy43NjIzNjExODk5NDk5LDM4MS4xNzQ4ODg5OTI1Mzg5NywxNDI2NDQuNTIxMzIwMTM0NTgsMjMwNTI5LjEyMjc4NTgzODczLDIzODE2My45MzgzODk4Njg0OCw2NzMyNi4zMzQ0NjMxMzczMiwxOTYxMjMuMTg5MzIwNjc4OTQsMTI5MTc1LjM4MTYwMzM0MzY1LDE5Mjk2Ny4wMzc2MTk2MTg4MiwyMTQzMDAuMjk2NjcxNzgzMjMsMzk1LjA5Mzg4NTExMTc3OCwxMjUxMC43ODY2NTY3MDQ1NCwzOTExLjE1OTM5MTg0MDU5OTcsMC44ODg5NDMwNTAxNTE0ODgyCisyNSxGcmkgMTggRmViIDExLDE2ODEwLjIzMTkzMjk0ODEwNywxNTM2Ny43NjcyMzQyMjM1NTEsMjM1Ljc4MjYyMzc0MDQ0ODksMzYwNy40NzU2MTE4MzY3OTg2LDI0My4zMTkxMTkxMzg3NjE3OCwxMzI4MS44NDE3MTAxNjIxNjcsMTQyMy4xNjE0MTc5MDUxMzQ0LDI1NjIuNTU0MDg1MDI1ODkyLDEyNzkyLjU2ODQwMzMyOTE3NiwxMTg0My44MjYyMTA3NzcyNjgsNzMwLjk0NjE4ODAzNDExNDYsMjI0MC42MjQ5MjAzODU3ODg4LDQxLjA5MTY5MjU4Mzc0NjY4LDUzNC41NTcxMTM4MDczMjUzLDE2ODg5Ny45NDIyNDU2NDM4NSwyNzI3NjQuNjc4NjY5Nzc2OTQsMjgyMDQ4LjExMjgyODU0NzIsNzk3NTMuMDIwMjgwNTkwNzgsMjMyMzA3Ljg2MDY4NjQyNzc3LDE1Mjk1Mi4zMzQ4NzMxMDAzNiwyMjg1NzEuMzA4NjE4NDA0MiwyNTM4MzkuNzc4NzEzNzcyMDQsNTQ3LjA3Mzg1NTQ1NTYxNTksMTYyODMuNTY0MDEwNDg0NTEsNDg3NS45MTQ0ODU3NTU2NjIsMS4yNzE2MDEwNTg4ODQ2NjMKKzI2LFNhdCAxOSBGZWIgMTEsMTk4NDAuODUzODYxMzA4MTk1LDE4MTQ0LjM1NDUzMTI4MTg0MiwzMTYuOTg4MTA5MjEwODYzODUsNDQyMi43NTU2MDkwODQ4NzQsMzI4Ljg5MTU5ODc4MDI3MjksMTcwNzguOTgwODg5MDc1MjcyLDE5NjAuMzczOTk1NDU3ODM4OSwzNDk3Ljg2NTQxMzA3NTA4MiwxNjQyOS4yODYxODg4Mjk4OTQsMTUyMTIuNDc0NDczNzg2MTg0LDk5MS40ODg1MDU1NTY2OTE3LDMwNzUuMTQwNDMzOTk5MTkyNyw2MC4yMDc2NTY1NTEwMTQwMjYsNzQ0LjQ3MDA1OTg5MjMyNDEsMTk3OTYwLjIxNzA3Mjg4OTY3LDMyMDU3Mi44OTk4MzQyMTIzLDMzMDYxNS44ODU1MjE5NzE3NCw5MzUwMS43MzMzNjgxMTQ1NywyNzIzMzcuODUzNjg5Njk3MywxNzkyNzUuODY1ODgxMTQ1OSwyNjc5NTkuMjg2MjI5OTU4OSwyOTc1ODAuODA4MjkzNjMyNzYsNzUyLjQ1OTcwMzA1NDMzODksMjExMDcuNDU2NDQwOTAzNjg3LDYwNDYuMDA3MTI1NTgxMDYyLDEuODAxMzEwMTI4NzAzNTQ5NgorMjcsU3VuIDIwIEZlYiAxMSwyMzE0Ni40NTc4NDk2OTcwOTMsMjExNjUuODY3MTEzNjQzMjEsNDIzLjE1MDM5NjU1MTMyMTI1LDUzODkuMzI2MjA4NDk5Niw0NDEuNjMxODk4OTI0MjUxNCwyMTg2Ny4xMzIyNDM5NjI2NjQsMjY4My42OTA4Mjk4NDUxODE3LDQ3NDMuODA1MjIwOTMxMjkyLDIxMDA0LjMxNzg0Nzk4NDYwMywxOTQ1OC4yNjI4MzM4NjU2NCwxMzM2LjI1NzI0NTUyNjQ3Miw0MTkzLjk1OTAxNTc0MjkxOCw4Ny40MTM2MjkyMTMxMTA4NCwxMDMwLjIzODc1MTEzMTUwMTksMjI5NTE0Ljk1MTEyNDE4OTA0LDM3Mzk1OS4zMDk0NzQ1MDU5NSwzODMzMjguODY3MzU4ODUyLDEwODQxNi4zNzk4MTQyNzIzOCwzMTU3NTcuOTk2OTI2NjkxNDQsMjA3ODYwLjM3OTM3NzIxMDE2LDMxMDY4Mi45MTY1Nzk3NjMyLDM0NTAyNS43MzU2NzEyMDI5LDEwMjguNjQ2OTkwMjk5OTAzMywyNzI0OC4xOTI1MTgzOTU0Nyw3NDU0LjA0MjE5MzIzMTY0ODUsMi41MjkzOTA5NDM3ODM3OTgKKzI4LE1vbiAyMSBGZWIgMTEsMjY2NzkuNTc1MTA4NTM3NzIsMjQzODYuMjU4Njc2MjA3MDUsNTYxLjAyOTA1NDY0MDcyMDksNjUyNC4zODI3MDQyNjEzNjEsNTg5LjMzNjEzOTg3NzExMSwyNzg3NC4xNzQxOTYzOTk4NSwzNjUyLjg2NzkwOTU3MzIzMDUsNjM5NC43MDM3NTkxMDgyOCwyNjcyNy42Nzc3MTQ3MDQyMTIsMjQ3ODMuNzAyNTUwMzA2MDg3LDE3OTAuMDM1Mzg5NDA3NDU3LDU2ODYuMzk1OTk2MDg1MzIxLDEyNS44NjIxMzc3MDAyMDAwMSwxNDE3LjMzMTk3NjkzNzMzNTYsMjYzMDk5LjQ3Njk2ODAyMTEzLDQzMjcwMS42MTkyOTUyNTQ3LDQzOTQwNC4wMzQyNjQwMDc5MywxMjQyNzEuNTQzNjcyMjM0NTMsMzYxOTExLjYyMzMwNjM5OTE1LDIzODI4Ny42NTMxNzM3NjE0LDM1NjA5NS44NDM2NTg3MzAzMywzOTU0NTYuNzIwMzIzODMwOSwxMzk4LjMwNjU5NDc0MzcyMzcsMzUwMjkuNDE2MTQ1Nzg2NzksOTEzMy45OTgwMjM2MTI4NjEsMy41MjM1Njg2NTYzNzUzMjcKKzI5LFR1ZSAyMiBGZWIgMTEsMzAzODAuMTQ4NjkwNjY2NzQsMjc3NDguNDkyNTQ4NTU3MjU3LDczOC44Nzg0NDgxMjQxMDUsNzg0My42MjM5NjcyMTk2NzcsNzgxLjc2MjE2MzE1NzQ3MiwzNTM2OS4zNzUxMTk4MTQyNSw0OTQ1LjM1ODUxNDI5NDU4NCw4NTcwLjU2MTg1NDYzODI1LDMzODQ0LjQ3OTU3NTE4MzQ2LDMxNDI5LjA0Mjg1NjU4NzU5LDIzODQuMDczMTMwMjcwMDI0LDc2NjcuMzcxNjcxMTI0NzMyLDE3OS44NDU0ODc1NDI3MDA2LDE5MzkuMTQ1Mzk5MTg2ODAwNCwyOTgxMzguOTU3ODAzODQ1Niw0OTYzMzIuMjI3OTQwNTUxMjQsNDk3ODcyLjQ2NjE3NDYzNTEsMTQwNzg5Ljc4NTg2MjQxMDgyLDQwOTk5MS4wMDIwOTY5MzkzNywyNzAwMzcuNTc4NzgyMzEwMzYsNDAzNDAzLjA3NDEzMzYwNTg3LDQ0Nzk5MC44OTQwNjQwOTAxLDE4OTAuODQ4ODQwNTAyNDA0OCw0NDg0MS41MTA1OTA5MTcwNiwxMTExOS45MzQyMTY3Mjc4ODMsNC44NzI2OTg5MjcyMzg3MzM1CiszMCxXZWQgMjMgRmViIDExLDM0MTgwLjcxNjY1NTAzMzI4NCwzMTE4OS42MzA2MTEyNjA3MzQsOTY2LjYyNDA5OTE2MjA1MDcsOTM2MC4xMjc2NzYwODQ3MjksMTAzMS4wMDg0NzE5NTc5MjE4LDQ0NjY2LjM4ODI2MjEzNjEsNjY2MC45NjQwNjAxMDE4NzcsMTE0MjIuNzQ0OTgxNTAzNzgzLDQyNjM1Ljc3MTIzMjkwMjI2LDM5Njc1LjcwNDE3Mzc0OTE2LDMxNTcuNDEzNDYxOTYwMDgzLDEwMjgzLjcyOTQ0MzY0MjQzMywyNTUuMTc3NjgzNTEyMDkxLDI2MzkuMjI2NzgwNDgwMjUyMywzMzM5OTYuMTc3MDA2NTg4NSw1NjQxNDYuOTU0MjEwNDg1Miw1NTc2NjQuMDkwODM0NDc0LDE1NzY2Ni4yMTkwNDY4Mjg3NCw0NTkxMDguODc0MzUwNzA5NiwzMDI1MzMuMTYwMjU2MTI3MzYsNDUxNzMxLjQwOTMwMDA3MTk0LDUwMTY1OC41NzkxMjM2NjM4LDI1NDQuMjM4Mjg5OTgzMDU4LDU3MTQ5LjkwOTU0MDI2OTk3LDEzNDQ0LjMyNDM1MzQwNzM0Niw2LjY5MjYyNjA4ODU3MTA2NgorMzEsVGh1IDI0IEZlYiAxMSwzODAxMi4zMDI2NDQ2MjA5MDQsMzQ2NDYuMzkxNDkxMTUzMDMsMTI1NS45Nzc5MDM2MTczNTYzLDExMDgzLjIwOTY5NTMxNjEzOCwxMzUxLjkxMTI4MjQyOTU4NTUsNTYxMjQuMjA5MDg4ODgxMDA1LDg5MjcuNDI1MzY5ODM0OTY0LDE1MTQwLjI3NDE0OTUzMzUzNCw1MzQxNi43NTc0NzI5OTc3Miw0OTg0OC4yNzk2NjY3NDAzNCw0MTU4LjMwMTUwMTkwMzYwMSwxMzcyMS41OTkxMzExNzAwMiwzNTkuNjkyNjkyMDI5NTUwOCwzNTc0LjAxMzYwNjM0MzYyMiwzNzAwMjYuNzcxMjAwMjAwODMsNjM1MjQyLjA0NjYxNDg5NjIsNjE3NzAwLjg0MzcxOTcxMSwxNzQ1OTUuMjAwMDg0Njg1ODQsNTA4Mzc2LjA4MTQ1MzA2NTg1LDMzNTE5MC41MjE5MzcxMDQ3Niw1MDAyMDUuODYwMDUwNjI4MTQsNTU1NDg4LjE0MjgxMTQxMzcsMzQwNy4yMTczODg4Nzg3Nzk3LDcyNTAxLjY0NjIzMTU3Mzk1LDE2MTM2LjA3MTY1Mjk5MTgzMiw5LjEzMzMxODQxOTgyODAyNgorMzIsRnJpIDI1IEZlYiAxMSw0MTgwOS44NDI3ODEwNzcyNTUsMzgwNjAuMDc1NTM2MzU1NTE0LDE2MjAuNDM5MjE3NDUzMzY4NywxMzAxNy4zOTQ2ODIzNzY2NywxNzYyLjQyNzk2NzcwOTU2NDcsNzAxNDQuNzYyMzE3MDU0NDUsMTE5MDYuOTg3NjAxOTE0ODU4LDE5OTU2LjM3MDU3MTc1OTg3NSw2NjUzMS4xMDAxMjE1OTksNjIzMTQuMDExMzI4ODAzMDgsNTQ0NS41NjQ2NDk0NjY5MjYsMTgyMTQuNjc2NDg1NTA1MDg2LDUwMy44ODg5MDk2MDc5NTc0Myw0ODE2LjEzOTY4Mjg1MDY0Nyw0MDU2MjkuMDYzNTQ2NTQ1NDUsNzA4NTc1LjE2NDM4NzE0MjYsNjc2OTc5LjkyNjMyNDg4OSwxOTEyOTMuODgzMzA3Nzk0MjMsNTU2OTcwLjAxMzYxNTczMDMsMzY3NDY0LjEwMjkyODY4NjgsNTQ4MDE3LjAwNzkyMjMxMzUsNjA4NTgwLjc5MjI4MjQzMzIsNDU0MS45OTI1NTMyNTQ3MjcsOTE1MjguMjE0NjIxOTY3NywxOTIxOC4zMTY2NTgwNTQ3MywxMi4zODczNTkwNzc2NzYyNDIKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWdpbmdTRUlSRGlzZWFzZV9GRF9SZWZlcmVuY2UvQWdpbmdTRUlSRGlzZWFzZS9odW1hbjF0bzEvU18yLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWdpbmdTRUlSRGlzZWFzZV9GRF9SZWZlcmVuY2UvQWdpbmdTRUlSRGlzZWFzZS9odW1hbjF0bzEvU18yLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YmJjODZkCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BZ2luZ1NFSVJEaXNlYXNlX0ZEX1JlZmVyZW5jZS9BZ2luZ1NFSVJEaXNlYXNlL2h1bWFuMXRvMS9TXzIuY3N2CkBAIC0wLDAgKzEsMzMgQEAKK2l0ZXJhdGlvbix0aW1lLEVHLUZSRy1HMjEwMDAxLEVHLUZSRy1HMjEwMDAyLEVHLUZSRy1HMjEwMDAzLEVHLUZSRy1HMjEwMDA0LEVHLUZSRy1HMjEwMDA1LEVHLUxPRS1HMjQwMDAxLEVHLUxPRS1HMjQwMDAyLEVHLUxPRS1HMjQwMDAzLEVHLUxPRS1HMjQwMDA0LEVHLUxPRS1HMjQwMDA1LEVHLUxPRS1HMjQwMDA2LEVHLUxPRS1HMjQwMDA3LEVHLUxPRS1HMjQwMDA4LEVHLUxPRS1HMjQwMDA5LEVHLVVQRS1HMjkwMDAxLEVHLVVQRS1HMjkwMDAyLEVHLVVQRS1HMjkwMDAzLEVHLVVQRS1HMjkwMDA0LEVHLVVQRS1HMjkwMDA1LEVHLVVQRS1HMjkwMDA2LEVHLVVQRS1HMjkwMDA3LEVHLVVQRS1HMjkwMDA4LEVHLVVSRy1HMzAwMDAxLEVHLVVSRy1HMzAwMDAyLEVHLVVSRy1HMzAwMDAzLEVHLVVSRy1HMzAwMDA0CisxLFR1ZSAyNSBKYW4gMTEsMTE4MDI5LjYsMTA1MzgzLjIwMDAwMDAwMDAxLDYxMzQxLjYwMDAwMDAwMDAwNiwxMjY4MDkuMjAwMDAwMDAwMDEsMTI3ODIyLjQwMDAwMDAwMDAxLDIwNjYyOTkuMjAwMDAwMDAwMiwyMjQ1NDQ1LjIsMTg0MDM1Ni44LDE1OTg1MzUuNiwxOTk4NTcyLjAsNDA1ODUxLjIsMjM3MjUzMS4yLDQ2OTUzNy42MDAwMDAwMDAwMywxMjQ2NDQxLjYsMTExNDA5MS42LDI1NTc0OTQuODAwMDAwMDAwMywxODUyODA0LjAsNTIxMDc3LjIsMTUxNjU3MS4yMDAwMDAwMDAyLDEwMDk5OTQuMCwxNDkyMDc4LjAsMTY1NjkxNC44LDE0NzM5NzYuMCwzMzU5ODk2LjQwMDAwMDAwMDQsMjE0MjY2LjQwMDAwMDAwMDAyLDI2ODIuOAorMixXZWQgMjYgSmFuIDExLDExNzI4Mi45ODI4NDcwODE1OCwxMDQ3MjIuMjU3MDE1MTI5MTYsNjEwODMuNTQ0NDQ3MDM0NTIsMTI2MjMzLjM2NTk4NDcwNDcsMTI3Mjg0LjY2ODk5NjY3ODAyLDIwNTc1MjkuODQ4Njc4OTU3NywyMjM1OTk4LjkyNTMyMjc4OCwxODMyNjE0LjY3NTcwNDYxNSwxNTkxNzM2LjMzOTA2NTQ1MTIsMTk5MDA5My4zMjU0ODI2Mzc5LDQwNDE0My44NDA2MjQ5OTY2NCwyMzYyNTUwLjI5MjI1MTUyNSw0Njc1NjIuMzIwODI1NTcyMSwxMjQxMTk3Ljk5NDA4OTM3NTMsMTEwNjA2Mi40OTcyNzQyMTcyLDI1NDAxMjEuMTYxNDY1MzY1NCwxODM5NDUzLjg3Nzk0MjM2Niw1MTczMjQuNTYwMjU1MzI2NCwxNTA1NjQ0LjI2ODc3NTUxODMsMTAwMjcxNi44NzMzMzE4NjkxLDE0ODEzMjcuNjIwNzYzMzMxMiwxNjQ0OTc2LjQxNDUxMzE0MjgsMTQ2Nzc3NS4xODg2MTM2MzQ4LDMzNDU2NzkuMzMzNTIwMzMzNywyMTMzMTYuNTczOTkzNzU0NzIsMjY3MS41MTM4MzQ2OTc4OTIKKzMsVGh1IDI3IEphbiAxMSwxMTY1NjQuMTYxMDg1NjkxMTYsMTA0MDg1LjUwMTYzMzYwOTM1LDYwODI1Ljc2MTQwNjgzMTI5LDEyNTY2Mi42NDcxNzMzNzc3MSwxMjY3NDcuNTA1ODUwMDAzMTMsMjA0ODc3Ny44OTkzNjQ5OTUzLDIyMjY1NjIuNjI2MTM0ODY3MywxODI0ODgwLjcyNzI3NTQ0NjUsMTU4NDk1Mi4xNTg5NzMyMDg5LDE5ODE2MzEuMTM0ODc5NjEzNSw0MDI0MzguMjg0MjYxODQxMywyMzUyNTc5LjkyNDU3NzQ5OTMsNDY1NTg5LjEyNzU5MjYzMTksMTIzNTk1OS45MjU1NTA1MDgsMTA5ODQwNS40NjExNTYyMTUzLDI1MjM0ODIuOTc2NDM0NjIzNCwxODI2NzIyLjIxMzMwNTQ1MzMsNTEzNzQ1LjYzODc3MDQ0NDY3LDE0OTUyMjMuNTA0MzkwMjQ0NCw5OTU3NzYuODUwNDM2MDYwMSwxNDcxMDc1LjIyNDgxMjQwNDMsMTYzMzU5MS4wNjc1NjE2OTM3LDE0NjE1ODAuOTI1NDMwNjMsMzMzMTQ4Ni4wMjkzMjk4OTY0LDIxMjM3Mi44OTkzODIxNjY0OCwyNjYwLjIzOTU4Nzg1MzA1NTYKKzQsRnJpIDI4IEphbiAxMSwxMTU4MjMuMzI0NTM1OTU0NDUsMTAzNDI4LjI2OTIyMjA2MzkzLDYwNTY4LjA5NTY2MDg3NDgxLDEyNTA4Ny45ODg3OTI5MjEwNSwxMjYyMTAuNzYwOTcxMjYyNywyMDQwMDIyLjI2Mjk1NzUwOTQsMjIxNzEzNS42ODI5MzY2NDc0LDE4MTcxNTMuNjI2NjA2NjYwMiwxNTc4MTYyLjU5OTc4MzM4NjYsMTk3MzE2Ni4yNDQ5MDE4ODM0LDQwMDczNC4xMDI2NzE2Mjg3NiwyMzQyNjE5LjA0MjcwODAwNjcsNDYzNjE4LjAyOTE4ODQzMDEsMTIzMDcyNy4yMTgxMzMyNTksMTA5MDU5MC4yMDUyMTY1NjI4LDI1MDY2NTQuODU1ODYzNzgwNywxODEzNzI2LjQ5MzY3MjE5NDcsNTEwMDkyLjEyODU0ODY1NTMsMTQ4NDU4NS4yNjcyOTc0ODc3LDk4ODY5My42Mjk5MTg4NjM2LDE0NjA2MDguODgwMzk1MTE1OCwxNjIxOTY4LjEwNDgwMTE1NjMsMTQ1NTM5Mi45NzUyNTAwOTAyLDMzMTcyOTIuODA0NDE1OTkxLDIxMTQyNC4zMzg4NjM4NTcsMjY0OC45NzczMTAyNDQ2MzMKKzUsU2F0IDI5IEphbiAxMSwxMTUwNDQuOTk2Nzg5ODUwNDgsMTAyNzM2LjcyNjE1NTA3NTc4LDYwMzEwLjUwNDA4MDE1NDMyLDEyNDUwNi41NTcyODUyMTIzNCwxMjU2NzQuMzkzNzIxNDU1NjIsMjAzMTI1Ni40OTEzNDA0NjQyLDIyMDc3MTcuOTUwNDQ2Nzc2LDE4MDk0MzMuMDIyMTcxMDgxNSwxNTcxMzYxLjQwMDc0NzAxNywxOTY0NjkyLjc4Mzk0MDAxMzMsMzk5MDMxLjE3OTk5Mzc2NjgsMjMzMjY2Ny4zNzk4NzI1MzUsNDYxNjQ5LjAzNDQ1OTM1OTksMTIyNTQ5OS44Mzg2OTM1MzgsMTA4MjQ0Ny45MjY0NzYyNzM1LDI0ODkzMzUuNDE2NDEzMDY2NCwxODAwMTg1Ljg0Mjk2OTQ0NTUsNTA2Mjg1LjAxOTQ4MTEwNTg1LDE0NzM0OTkuMzEyNjY0OTA1Myw5ODEzMTQuMzEwMTk1ODMzOSwxNDQ5NzAyLjA2NzMwNTM3OTgsMTYwOTg1NS45NTk1MDA3OTQ4LDE0NDkyMTEuMjkxMjk5MzEwMywzMzAzMDkyLjQ1NDk1MTM3MzQsMjEwNDY3LjQ1NzUwNTcyNDE2LDI2MzcuNzI3MDUyNDE4MzE3Cis2LFN1biAzMCBKYW4gMTEsMTE0MjE0LjYzMTM3NzcxMTYzLDEwMTk5Ny41ODU2NTg1NjY5Nyw2MDA1Mi44ODMxNjIyMDg2NywxMjM5MTUuNjMzNzcyMjg4NDgsMTI1MTM4LjMwMjQ5MDc0NTk5LDIwMjI0NzIuNjQ4NDM2MTAyMywyMTk4MzA4Ljk1NDY1NjU0NSwxODAxNzE3Ljk0Mjg4NjM1ODQsMTU2NDU0MC44NzAwMjY1NTA1LDE5NTYyMDMuNjI0Nzk0OTQ3MiwzOTczMjkuMjE5ODExNzI2NzcsMjMyMjcyNC4xNDE1OTg3Nyw0NTk2ODIuMTQ2MDAyNTAyOCwxMjIwMjc3LjYzNzQ2NjAyNTMsMTA3MzgyOS4xODc3MzQ3NDQ3LDI0NzEyODYuMDUwNTU0NTAzNywxNzg1ODUwLjk5NTIyNzU4NjUsNTAyMjUzLjk0Mzc3NzI2NjU0LDE0NjE3NjAuNTk2NTM0NzU0OCw5NzM1MDMuNTc1NjkyNjMzNywxNDM4MTUzLjA1MzE2MDc3NDgsMTU5NzAzMC41OTI5MzAxMTYyLDE0NDMwMzUuNjk5NTk1NDk0NCwzMjg4ODc1LjcwMTQxNDUxNTcsMjA5NDk4Ljc1NzI4NDk3NSwyNjI2LjQ4ODU0NDg5NjI0MgorNyxNb24gMzEgSmFuIDExLDExMzMxNC40NzU0MDc1OTk4MiwxMDExOTQuNDg5NDk4NzYwMTQsNTk3OTUuMDc0NDcyMTY4NTYsMTIzMzExLjg0MzM4MjY0NDc0LDEyNDYwMi4zMzA3MDc4MzgzMSwyMDEzNjYwLjAyNzk2NzY1MTQsMjE4ODkwNy45Mzg4MDczNDEzLDE3OTQwMDYuODc0Njk5ODU0MywxNTU3NjkwLjYzODA5MTM2NDYsMTk0NzY4OS4xODg0NDU4MzcyLDM5NTYyNy43NjQwODg2Nzk3LDIzMTI3ODguMDc2MzMzNDc1LDQ1NzcxNy4zNjIxMzcyODc0LDEyMTUwNjAuMzY3NDUwMDU3NSwxMDY0NTU3LjgwMzcwMzEwNTMsMjQ1MjI0MC40ODEwNzU0NzEzLDE3NzA0MjcuNzYyMTg5NjM5Nyw0OTc5MTUuNzI3NzAwNTYwNiwxNDQ5MTI2Ljc2ODQzOTEzNzgsOTY1MTAxLjkxMjUzODU3MTcsMTQyNTcyMy4zOTkxNTE3NTksMTU4MzIyNy4yMDA4ODYzOTIsMTQzNjg2NS45MTYxMjc1MTgzLDMyNzQ2MjkuODY5NDQ2NzM2LDIwODUxMy43OTYxNDI4MTA0LDI2MTUuMjYxMjk5NzM5MTY5OAorOCxUdWUgMSBGZWIgMTEsMTEyMzIyLjU0MDQwMTQ5NDksMTAwMzA3LjA5MjY1NzM1NzUxLDU5NTM2Ljg1MzE4MDMxMzgyLDEyMjY5MC45NjI5MTgxOTAzLDEyNDA2Ni4yNTQ1MzI0MTA3MywyMDA0ODA0LjQ5ODEzMDk1ODMsMjE3OTUxMy43Nzg5OTY2NTU3LDE3ODYyOTcuNjE4MjYwODEyNSwxNTUwNzk3LjAyNzYxNzkzNTMsMTkzOTEzNi44NTgyMzY5ODY0LDM5MzkyNi4xNTUxODgwMzc5NiwyMzAyODU3LjM0NTgwNjgzOSw0NTU3NTQuNjczMzc0NDI1NzQsMTIwOTg0Ny42NDk4NTM3MTAzLDEwNTQ0MTguOTM5NTEyMjU0NywyNDMxODgzLjA2NjExMTU3NzcsMTc1MzU1Ny4xMzA0ODA0Nyw0OTMxNjguNzUzNTIwMjczMSwxNDM1MzAxLjc1MzI5OTAzODksOTU1OTE0LjgyOTQxMDExODQsMTQxMjEyMS44MDM0OTI2MDM4LDE1NjgxMjIuMjcxMzI2Njc5LDE0MzA3MDEuNTE0ODk5MTI5NSwzMjYwMzM4LjA3MzY5ODc2NDcsMjA3NTA2Ljk0MDU4MzQ5NDM1LDI2MDQuMDQ0NTE3Mzc0MjY4NworOSxXZWQgMiBGZWIgMTEsMTExMjExLjc3NDM1MTEyODIsOTkzMTAuMjg5ODg5OTQwMzcsNTkyNzcuOTA1NzAzMjgwNTIsMTIyMDQ3Ljc0MTE2NTU1MTgxLDEyMzUyOS43NTk0NzQ2NDgxMywxOTk1ODg3LjU2MDExODQzOSwyMTcwMTI0LjgzODQwMTcxMywxNzc4NTg3LjAzMjI2MDMyNDYsMTU0Mzg0Mi4xNDg4MzM3NjksMTkzMDUzMC4xNTA4NDQzMjU1LDM5MjIyMy40NjQ4ODkxMzExLDIyOTI5MjkuMjk3MzEwMTk1LDQ1Mzc5NC4wNTc1NzAwODA4NSwxMjA0NjM4LjkxNzM5NDQ4MTgsMTA0MzE1MC42NDE0NDA0NDY0LDI0MDk4MzYuNzQ0Mzk2OTA4LDE3MzQ4MDAuOTg3NTYxNjA3Myw0ODc4ODguODcxMDM2MDYyNCwxNDE5OTIzLjg1Mzg1NjAyMTMsOTQ1NzA1LjE5MjE1OTE2NzEsMTM5Njk5Mi4zOTE0NzM0MTkzLDE1NTEzMjAuNTgwMzg4MzYzNSwxNDI0NTQxLjg3MjI5NjM3NzYsMzI0NTk3OC4wMDU0Nzg3NjMsMjA2NDcxLjA5ODQwMDgwNTQsMjU5Mi44MzY5MzIxNzYxODYKKzEwLFRodSAzIEZlYiAxMSwxMDk5NDkuMzI3OTY0MTIzNTYsOTgxNzMuNTIyMzA3OTE5LDU5MDE3LjgwMTYxNzg0NzczNCwxMjEzNzUuNzAyMTI3MjM4MDgsMTIyOTkyLjQxMDk3MDc5ODM5LDE5ODY4ODUuMjA5OTY5NjI4NiwyMTYwNzM4Ljc4Mjk0NjU3NDUsMTc3MDg3MC43MTAyODIzNjE4LDE1MzY4MDIuODA3MjU5ODEsMTkyMTg0Ny43MTUzOTE5MDMyLDM5MDUxOC40MDQ5NTc0OTEyLDIyODMwMDAuMTc2MzMyODA4LDQ1MTgzNS40NzM2MTM2NTU5LDExOTk0MzMuMzQyMzQ0NjA2MywxMDMwNDM2Ljg5MDc4NjQzNiwyMzg1NjUzLjU1OTU1NTQzMTQsMTcxMzYzMC4zNjk4NzcxNTAzLDQ4MTkyNi4wMTM0NTYxMTk3LDE0MDI1NTUuOTExMTE0OTYxOCw5MzQxODYuOTM2NDU4ODAxMywxMzc5OTA1LjAyOTM2MjkzNDksMTUzMjM0NC40MzY0MzE0NDI0LDE0MTgzODYuMDk2NzQzMDk5OSwzMjMxNTIwLjQ1NjA4ODEzOSwyMDUzOTcuNDE0NjU3OTI0MzIsMjU4MS42MzY2MTkxMzYzNzk1CisxMSxGcmkgNCBGZWIgMTEsMTA4NDk2LjAyMzMyODU2MDYyLDk2ODYwLjI3NTkwMjk4MzQxLDU4NzU1Ljk1OTQ1NDIzNjE5NiwxMjA2NjYuOTM4MTg1MjY0OTcsMTIyNDUzLjYxODI1MTcxOTk1LDE5Nzc3NjYuNjA3NDI3NzY2OCwyMTUxMzUyLjM0ODU4MzY4NCwxNzYzMTQyLjU3ODU3MjY1OTgsMTUyOTY0OS4yMjkyMzYyNDQ1LDE5MTMwNjIuMTYzNzcwNjE2LDM4ODgwOS4yMTY3NDM1NDQ2LDIyNzMwNjQuNzY1ODcyMDQ1NCw0NDk4NzguODUyNzc2OTEzMTUsMTE5NDIyOS43NDQyNTI2NzQzLDEwMTU5MDIuOTMzMTAwMTEyNiwyMzU4ODA3LjQ0MjEyMjY0NSwxNjg5NDE3LjUwNjcyMTgwODgsNDc1MTAxLjg4NDc5NTg3NjMsMTM4MjY3OC41OTUxMjg2OTI3LDkyMTAyMC44MzY3MjI3NzgsMTM2MDM0OC43MTY4Mjc5NTA0LDE1MTA2MjYuMzQzNjM4MzIzNywxNDEyMjMyLjk0MDA3MTI2MDMsMzIxNjkyNy41Njg3OTEyNzQsMjA0Mjc0Ljk0MDc5NTU4Mzg1LDI1NzAuNDQwNzQ2MzU5MjUxCisxMixTYXQgNSBGZWIgMTEsMTA2ODA2LjEyOTg0NDY3NjAyLDk1MzI3Ljg3NzAxMzI4NDkzLDU4NDkxLjYwMzgxODU5NzkzNCwxMTk5MTEuODkwNjI3MDQ2LDEyMTkxMi41ODg2NDIxMDMwNywxOTY4NDkyLjQ3NDU1NzczMDgsMjE0MTk2MS4wMzgzMTA4ODUsMTc1NTM5NC4zNzk3NzU4NDIsMTUyMjM0My41MzMwODg3Njg0LDE5MDQxMzguNjY0NDEwMTI4MywzODcwOTMuNTMwNzI5Nzk5MjQsMjI2MzExNS45MTk1Mzc5NDk0LDQ0NzkyNC4wODY1NzkzODMyMywxMTg5MDI2LjQ2Nzk1ODAxMDcsOTk5MTEzLjgwMDgyOTg2ODQsMjMyODY4OS41NjM0Nzk2MjQsMTY2MTQzMy4yMTMxMTI2MDk3LDQ2NzIwOS4xNjU5NjU5MjA2NiwxMzU5Njg4LjEzMTQ4ODE1Miw5MDU4MTMuMTU5ODAwMTg3NywxMzM3NzI5LjM0MjE4NDY2MzMsMTQ4NTUwNi41MTE3NTM1NjEsMTQwNjA4MC42ODIzNjY3NjQ0LDMyMDIxNTAuNzA3NzMxMTIyNiwyMDMwOTAuMjY4NTg0NzI4ODgsMjU1OS4yNDUyNDczMjg5MQorMTMsU3VuIDYgRmViIDExLDEwNDgyNy41OTY4NDA0MDM0LDkzNTI3LjczMzQ0MDk1NzQsNTgyMjMuNzEwNDUyNTA4MTYsMTE5MDk5LjExMjYxODg0Mzg1LDEyMTM2OC4yNjg0ODMyMDQ5MSwxOTU5MDEzLjExNjE3NTg1NjcsMjEzMjU1OC43MjAxODk1ODYsMTc0NzYxNC45OTY3MTg4NDcyLDE1MTQ4MzcuODQ1MjkwNDMwNiwxODk1MDMzLjIwNDQwMzgyMTEsMzg1MzY4LjE4Mzk2OTM0MTcsMjI1MzE0My45NDUyOTI0MDI1LDQ0NTk3MS4wMDk2Njc1NDg3NiwxMTgzODIxLjIxOTYzODYxMiw5Nzk1NzcuNDM4NjY5NTU4MywyMjk0NjA2Ljk4NjU3MTQ5NzMsMTYyODg1Mi4wMjYwNTc3NDMyLDQ1ODAxMi45MzI3NDgyNzkwNywxMzMyOTAwLjQ4NTAyNDIxNSw4ODgxMTguNDc1NTk5NzE3NiwxMzExMzczLjc4OTk5NjYzNDUsMTQ1NjIzNy40MjE3Mjg5MjcyLDEzOTk5MjYuOTc5NDQ1NDMxOCwzMTg3MTI3Ljc4OTc4OTE4NSwyMDE4MjcuMTE1NjQ4Nzg4OCwyNTQ4LjA0NDM3OTk1MTAzNQorMTQsTW9uIDcgRmViIDExLDEwMjUwMi45ODM5NDYyMzY1Miw5MTQwNi4yNTkxMzczOTgyNyw1Nzk1MC45MzUzNjAzMzQ5NSwxMTgyMTUuMDE1MjIzOTc4MTYsMTIwODE5LjI2NjIzMDk5MzI2LDE5NDkyNjUuOTQ3NjM0ODY2NywyMTIzMTM3LjA5MTE5MDc0MzMsMTczOTc4OS41NjEyODkyNSwxNTA3MDcxLjk1NjU2NjQyNSwxODg1NjkwLjQxODg0NzI4NjQsMzgzNjI4Ljk4MTE1MjcyODUsMjI0MzEzNS43ODc0NTY3NjEsNDQ0MDE5LjM3NTcyOTg5NzksMTE3ODYxMC44NDU2MjY5MDMsOTU2NzU0LjcyMjQ5NTE3NDYsMjI1NTc4Ni4xMjA3NjI5MzU0LDE1OTA3NjguOTgyMjMxMzcwNCw0NDcyNTUuNDE2NDI3NTIyMiwxMzAxNTY1LjI5NTMxMzM2MTYsODY3NDQ4LjY5MzY5ODQyNDgsMTI4MDU0My42NDQwOTk5NDY4LDE0MjE5OTkuMDQ5MTYxODI3MiwxMzkzNzY4LjY1OTcwNTEzMywzMTcxNzc5LjkxMDExOTk5ODcsMjAwNDY1Ljg1NTE4NTM0Njc0LDI1MzYuODMwMTMxNTY1OTM5CisxNSxUdWUgOCBGZWIgMTEsOTk3NzEuNDQwOTI0MjQ4LDg4OTA2LjgyNjg5NDk5NTA0LDU3NjcxLjUyMzcwNjg5MzM3LDExNzI0My42MDc0MzE2NzkxNSwxMjAyNjMuNzUyNjEyODk2NDIsMTkzOTE3Mi40MTgxODY4OTUzLDIxMTM2ODQuOTYzODg0OTQ2NCwxNzMxODk4LjI4MzA3OTA0NzUsMTQ5ODk3MC40MTgzNjM5MDUzLDE4NzYwNDAuODg4MTUwNjA3NSwzODE4NzAuMzgyNjE2NDk5ODUsMjIzMzA3My45NDM2NTU4MTcsNDQyMDY4LjgyMzgzODI3NjgsMTE3MzM5MS4wMzQ5Njg3Mjc1LDkzMDA3OS42ODAyMTg5NjA3LDIyMTEzODMuNTE4MDQ4MzMzNSwxNTQ2MjMzLjY3MjQ4ODg0NTIsNDM0NjY1Ljc0NDI4MDA2MzMsMTI2NDg5NC4zMzAyNjE5NzcyLDg0MzI5MS4zMTU0MjA5ODQzLDEyNDQ0NjMuMTc4NjE3ODE0LDEzODE5MjkuOTU2OTY4OTA1MiwxMzg3NjAxLjQ1NDE4NjkwNDUsMzE1NjAwNy4wODUwNDQyMjksMTk4OTgyLjk5NDgzMzE4ODEzLDI1MjUuNTkxNDE5MDU5Nzg0CisxNixXZWQgOSBGZWIgMTEsOTY1NzIuMTgxNDU1MzY3NTYsODU5NzMuMTgwMzE1Mzg1NTcsNTczODMuMTkzNzMwNzUwODM0LDExNjE2Ni4yNTUwNTM3ODE4LDExOTY5OS4zMzE5MTg0OTI2LDE5Mjg2MzQuMjI1MTU5MTQzMywyMTA0MTg3LjMyMjg2NzAzNDUsMTcyMzkxNC45MTkzODE0MzEsMTQ5MDQzOC45OTEyNTIzMjQ4LDE4NjU5OTcuODA5MzY2OTYyMiwzODAwODUuMDk5NTk2OTk1MiwyMjIyOTM1LjAzOTI4MTQ0Nyw0NDAxMTguODMxNzYxNDY0NTMsMTE2ODE1NS45MjE3ODg4OTgzLDg5ODk5NC4wMTkwMjU0Mjc2LDIxNjA1MDcuNjM2MzE2ODQzMywxNDk0MzA4LjU3MzI5MTk1MDYsNDE5OTc2LjY5Njg3MzQxODIsMTIyMjExMC4zODE3MzgyMDQzLDgxNTE0MC42MTI3MjA2ODg5LDEyMDIzNjcuNDcwNTI3NzQzNSwxMzM1MTgwLjczNTQzNDI0NjUsMTM4MTQxOS42Mzk4OTE0NDgsMzEzOTY4Mi45MzA2NjQzMjYsMTk3MzUwLjYyNjc2ODMzMTU3LDI1MTQuMzEzMDE5OTg4MTI5MworMTcsVGh1IDEwIEZlYiAxMSw5Mjg0OS45MTM1NjUzMDMyMyw4MjU1NC43NDU3ODY2MjgzNCw1NzA4Mi45OTA0NzgzMjA1NywxMTQ5NjEuNTAwNDk0NTk5MTEsMTE5MTIyLjg3NzU0NDM5MTQyLDE5MTc1MjguNzI2NDg5NzE2LDIwOTQ2MjQuMDg0Nzc2MDI3NiwxNzE1ODA0Ljc5MTg3ODg3MTYsMTQ4MTM2MC4zNzUyNjkyNjMzLDE4NTU0NTIuOTU2NzM2Mzk1NCwzNzgyNjMuNTczMzU5NjU2MiwyMjEyNjg3Ljk2NDE0ODMyLDQzODE2OC42NTE2NzI2ODcxLDExNjI4OTcuNTU3MTUxMDE0LDg2MzAwMC4wODY4OTU3OTQ3LDIxMDIyNTYuMDk0ODM3MTkxNSwxNDM0MTU4LjcwMjUyNzE1ODQsNDAyOTUwLjUzNTc5NTkwMTg0LDExNzI1MjIuNTY0OTAyNDAyLDc4MjU0NS40NzExNzI5MjcsMTE1MzU3Ni41MDYzMzMzMjIzLDEyODA5OTYuMzEwMjA4OTQ2NSwxMzc1MjE1LjU3MTUwMzIyMjIsMzEyMjY0OC4wOTIzNzQwNjksMTk1NTM1Ljg5MzI2OTE1NDQsMjUwMi45NzQxNTM1MjI3OTUKKzE4LEZyaSAxMSBGZWIgMTEsODg1NjIuNTQ1Njg4MzY5NjksNzg2MTQuMTI5MjI0NzMxMDMsNTY3NjcuMTAzODgwMzQxOCwxMTM2MDUuMDA1NTAyMDE1OTksMTE4NTMwLjMyMzg3MTYwMjA5LDE5MDU3MDMuNDgxMDU5ODA3LDIwODQ5NjguNDc5NDI1ODI0NywxNzA3NTIyLjIzNjA4OTA5NTcsMTQ3MTU4OS4xODMwODgwNDE2LDE4NDQyNzEuODYyOTA5OTU0MywzNzYzOTMuMzEwNjEyMjk3NDQsMjIwMjI5MS40NTM5NTM4OTcsNDM2MjE3LjIyMjE4NzgyNTc3LDExNTc2MDUuMjExOTgyMTM2OCw4MjE3MzQuODIwMjY2ODM4MiwyMDM1NzczLjI2MTE3NTIzMzYsMTM2NTE3Ni45NTQ1NTIyMTc0LDM4MzQxNS4xNzAwNTM3MDkwNywxMTE1NjMxLjY4MDU5ODQ1NzYsNzQ1MTc2LjIxODM2NDk1NTcsMTA5NzU5OC44OTA4MTQ2NTUyLDEyMTg4MzEuMTIyNTM5OTg5NCwxMzY4OTc5LjA3MDQ5MzYwMiwzMTA0NzAyLjI0Mzc2OTY0OTQsMTkzNTAwLjUzOTc1NjkxNTEsMjQ5MS41NDY2MDgzNDExNDcKKzE5LFNhdCAxMiBGZWIgMTEsODM2OTEuMDY5OTA4MDI3MzksNzQxMzYuNjQ5OTc5MDAzNjMsNTY0MzAuNjQ1ODA4OTI4MjUsMTEyMDY5LjcwMDYzNTg5MSwxMTc5MTYuNDA1NTUxMjc2NCwxODkyOTY5Ljg4NDA2MzkxMTIsMjA3NTE4NC45NDk2MjA4MzQzLDE2OTkwMDcuMzQ4MTE3OTAzOCwxNDYwOTQ2LjE2NzU4MTU1MDMsMTgzMjI4OC4xODA0ODM1NDYsMzc0NDU4LjA0MzE1NTc4MDc2LDIxOTE2OTAuOTcyOTg0MDYxLDQzNDI2My4wNDg3MjQyNjY3LDExNTIyNjQuNDYyNTA3NjU2NSw3NzUwNjMuMDMyMDQwODYxOSwxOTYwMzMyLjEyMDYxMDg1NCwxMjg3MTQyLjI3MzM2NzQ5MywzNjEzMDkuODIxMDg5OTUyMywxMDUxMjYzLjE0NDU3MjI2ODUsNzAyOTA4Ljk3NzI3ODcyMjksMTAzNDI2Mi43MDY1MDYxOTM0LDExNDg0OTQuNDU1MDg5NzE5NSwxMzYyNjk2LjYzMjk1MzgxOCwzMDg1NTk0LjQ5MDUxNjM1LDE5MTIwMC42NjAzOTUyODI0NywyNDc5Ljk5MjI4NzY0NDkyOQorMjAsU3VuIDEzIEZlYiAxMSw3ODI1MC43MzgwNzI5NTc5Niw2OTE0MC45NjczOTgzNjA5MSw1NjA2Ny4zODE2NTA3MTA3LDExMDMyNi4yNDQ2NjI4OTUyNiwxMTcyNzQuMzM0NTI0MDM4MTIsMTg3OTA5NS45MjYyODA1NDEzLDIwNjUyMjYuNDQzNjI2MzE4LDE2OTAxODEuODcxMjIyNDExLDE0NDkyMTEuNzk1MTM1Njk5MiwxODE5Mjk3LjIyOTMxOTM5MiwzNzI0MzYuNjc1NjM1MTU4OCwyMTgwODE0LjcyNDgyNDA5NzUsNDMyMzA0LjA0MTYzNjY0Njk2LDExNDY4NTUuOTk3Mjc3MjQxNyw3MjMxODAuNzg4NTU3NzI1MywxODc1NDQxLjQ2NzY5OTUyNDIsMTIwMDM5NC43Njc1Mzg3NzUyLDMzNjczNS41MTUwMjc0OTg5LDk3OTcxMy44MjIyNDM4ODMyLDY1NTkxOS4yMjMwMjQ2ODYyLDk2Mzg2MC4wNzgyMTM1NjY2LDEwNzAzMTAuOTY1NTE2ODY3NiwxMzU2MzUwLjQwODMyODU5MDIsMzA2NTAxMi4wNTUzMjA0NCwxODg1ODYuNzc3MTc5MDY1MjgsMjQ2OC4yNjAwMDg4MzcxNTIKKzIxLE1vbiAxNCBGZWIgMTEsNzIzMDEuNTEzNjExODMyLDYzNjg4LjczMjEyMzIyMzEsNTU2NjkuNDE0MTc5MjM1NjgsMTA4MzQzLjkwNzQzMTcxMDcsMTE2NTk1LjQwNDkzNDMwMTAzLDE4NjM3OTguMjAwOTU0MDk3MywyMDU1MDMwLjk0NzM1NzEyMjgsMTY4MDk0NC4wNDUzNzgzMiwxNDM2MTE5LjM3NTgwODMwODQsMTgwNTA0OC44MDUzMzk5NjQsMzcwMzAxLjk4MjU3MTIzMTksMjE2OTU2OC41ODYyNDgyNTksNDMwMzM3LjI5ODMxNTA2MzQsMTE0MTM1NC4wNzAxNDAxODE4LDY2NjcwOS4wMTA3ODYzNDk0LDE3ODA5NzMuNzA0NjgzMDYsMTEwNTk5My42NjExMDQ2NjAyLDMxMDAwMC4zOTA3NjAzNjcxNSw5MDE4ODMuNTczNTE4NTc0Miw2MDQ3NjYuNjMzMDU0NjU4OSw4ODcyNzYuNjk2MTEyODc4Nyw5ODUyNjQuNDk4MDA4NzMyMywxMzQ5OTE2Ljg5MDQ0MjMwNDgsMzA0MjU2Ny4xOTc1ODMzMzUsMTg1NjA0LjQyNTg0MDA2NDEsMjQ1Ni4yODEzNTY5NTcyNTcyCisyMixUdWUgMTUgRmViIDExLDY1OTU0LjU4NTY5MDIyNSw1Nzg5MC4wNTYxMzI0OTYxOCw1NTIyNi44MjE5MjczOTU3MiwxMDYwOTEuOTgwMzAzODQ5MzEsMTE1ODY4LjUxNzAzNDQ5NCwxODQ2NzMzLjQyMTU1ODUwNDIsMjA0NDUxNy4wNzQzMDU4OCwxNjcxMTYyLjIzMjIyNjEzOTIsMTQyMTM0OC4xMzM3ODEwMzgyLDE3ODkyMzkuNDI5MTM1NTkxMywzNjgwMTkuMDE2MzEwMzkyMiwyMTU3ODI5LjcyOTMyMjQ0Myw0MjgzNTguODExMjUxMTAwMiwxMTM1NzI0LjUwNjU4MTUwMiw2MDY3NDYuNzM3NjYxNzA1OSwxNjc3Mjk5LjYyNjA4MDI2MiwxMDA1ODA1LjcwMTg3MTY1OCwyODE2NDQuNDg2NDA3MTE2NCw4MTkzNDYuODU5MTQyOTE0NSw1NTA0NDMuNjMyMzIyMjEyNyw4MDYwNjIuMzI2Mzg4OTA2Myw4OTUwNzYuMzM5MjE0NjExNiwxMzQzMzY1LjI0OTk1MDE4MSwzMDE3NzgyLjQ1NDI4NTI1NSwxODIxOTUuNDM5ODY2Njg4NCwyNDQzLjk2NTM0NzY3NzUwODQKKzIzLFdlZCAxNiBGZWIgMTEsNTkzNzEuMTIzOTE0NjM1MzIsNTE5MDEuMTIwOTA3NTYxODQsNTQ3MjcuMjYxOTc0MTY1MTUsMTAzNTQxLjc3NTc0MjExNDAzLDExNTA3OS42MTM5NTc4MDk1NiwxODI3NDg5LjkxMzI4NjkwNiwyMDMzNTc4LjUwMjYxOTQ0NzQsMTY2MDY2Ny4xMzUwNzA2NjE4LDE0MDQ1MTYuODQxNjcxNDQwMywxNzcxNTA0LjM1OTE4NDQxMTQsMzY1NTQzLjE5MzkwMjc5NzA3LDIxNDU0MzguNjc0MzA5OTIwNSw0MjYzNjMuMDc4ODAxNjk1OSwxMTI5OTIyLjE1MjI4MDUzMyw1NDQ4NDguOTc1MjkyNzI3NSwxNTY1NDA1LjU2NzAyMTUyMSw5MDI0NjQuMTkzMTY4MzkzMSwyNTI0MjYuNTk1NDg3ODYwODUsNzM0MzEzLjgyODU1MzM4MzcsNDk0MzU1Ljg5NDA5ODYyOTMsNzIyMzkyLjQ5MDc2Mjg4NzgsODAyMTYyLjU5OTY3ODg2MTgsMTMzNjY1NS4yMjQwMTA4MzYzLDI5OTAwNzQuNTA1MzI3NTQ1NiwxNzgzMDAuMTEyMDE5Nzg1MTksMjQzMS4xOTE2MTAxNzEyOAorMjQsVGh1IDE3IEZlYiAxMSw1Mjc1MC4zMTYzOTUzNzE1NTYsNDU5MTEuMzA1OTI0Njk4MTYsNTQxNTUuNTU5NTI0Mzg3NTUsMTAwNjY5LjE5MDgzNjUxOTA4LDExNDIxMS4wMzA5NTExMTI2NSwxODA1NTc5LjgyMzUwNjg4NjgsMjAyMjA3Ny4wMjU0NDY5NzM3LDE2NDkyNDIuNDc0NDM4NTUwNCwxMzg1MTc4Ljk2OTUzMDA2MDIsMTc1MTQwOS45MDM0NTEyNDgsMzYyODE4LjA0NzQ4NjUxMTEsMjEzMjE4OS41MTIwODExMzYsNDI0MzQyLjU4ODgzMzM0MjUsMTEyMzg4Ny42MzQwOTAyNTU3LDQ4MjkwMy44MDA2NDQxMDM0NCwxNDQ2OTU4LjUxNDE2MDc2NzIsNzk5MTU2LjEwODQ3NTgyNzgsMjIzMjYxLjA4MDc4MTEwMzcsNjQ5NDQ1Ljg0MDE2NjcyMjEsNDM4MjExLjc2NjQwMzU1ODQzLDYzODg4Ni43OTM2ODU5MjgzLDcwOTQzMi40MDE4OTU1Mjc2LDEzMjk3MzQuNDY1NDQ2MTEwNiwyOTU4NzM3LjMxMTczNzIxNSwxNzM4NjAuMzU0MTU1MTIzNDcsMjQxNy44MDE3NTgyNTM0MjgKKzI1LEZyaSAxOCBGZWIgMTEsNDYzMDYuNjMxNjEwMTU4NDksNDAxMjAuMjgzNjU4NDMzOTEsNTM0OTMuMzI1NTk3NjI0Nyw5NzQ1Ny42NzY4OTE4OTI2OCwxMTMyNDAuNzY2ODEyNDg2NDQsMTc4MDQzMy4xOTczNTEzNDc3LDIwMDk4MzMuOTcxMzczNDAwNywxNjM2NjE0LjA3Nzc4NTU0MDgsMTM2MjgyMC43MzkxNDIxNjU4LDE3Mjg0NDYuODY3MjA5MDc5MiwzNTk3NzIuNjU1OTAyNzQ5NTcsMjExNzgxOC4wNjczOTQ3ODQ3LDQyMjI4Ny4xMzc0ODQ2OTY5LDExMTc1NDMuMjg3ODIwMTQ3NCw0MjI5MTEuODI1MjU0NTIyMDMsMTMyNDI4MS45Njk4MDQ3ODk2LDY5OTI0NC4xODgxODIwOTEzLDE5NTEwNy4yODE2MTIxNzk2LDU2NzUzMy4zNDcwNDkzMDU5LDM4MzgyMy4yMDQ4NjMzMDU5Niw1NTgyOTEuNzIxMzYyNjk4MSw2MTk5MzUuNTkwMTM4MTU0OSwxMzIyNTM1LjI0MTU5MDI4MiwyOTIyOTI1LjcyMDQ0NzI3NiwxNjg4MjMuODU5OTM2OTc1MSwyNDAzLjU4ODU5MDgxNDc4NAorMjYsU2F0IDE5IEZlYiAxMSw0MDI0MC41NzQxNDU3MzE0MzYsMzQ3MDkuODEzMzMzNDAyMjEsNTI3MTguNjcxMjk3OTczMDQ0LDkzOTAxLjI5NzEwOTA1NDQ5LDExMjE0MS43MDM5NDE1MDE1LDE3NTEzOTUuNjM2MDQ1NDM5NCwxOTk2NjE5Ljc3MDk1Mjk2MTIsMTYyMjQzNy41MzIzNjYyODc0LDEzMzY4NjQuMDU1NTA2MTQzNSwxNzAyMDI2LjQyNjY5NTAyMzQsMzU2MzE4LjgzNDE1Nzk5OTQsMjEwMTk4Ny44NzIzMjkzNjczLDQyMDE4Mi45MzU5NTQ1NzI0NiwxMTEwNzg4LjA5OTYxMzYyMjgsMzY2NzExLjQ3ODAwOTEyMzMsMTIwMDIxNS45NTA0ODEyNDE2LDYwNTgwMC4yNDM4MDQyMjI2LDE2ODgzNC41MDIwMDEzODc3LDQ5MTEwMy4yMzIyMDQ1NzA0MywzMzI4NTcuMjY1NjMzNTYwOTUsNDgzMDk0LjAxMDM4NjAzMzIsNTM2NDMzLjM4NzE2NjMwNzgsMTMxNDk3MC4zNjUzNDIwNTgsMjg4MTY0MS41ODI1MTU1NzM2LDE2MzE0OS4xMDU4MjUyMTYyLDIzODguMjgyNzY4OTcxMzUxCisyNyxTdW4gMjAgRmViIDExLDM0NzEwLjg1NjE0NjA0NjMyLDI5ODE4LjIzMDUyNzQzMTg5Myw1MTgwNi4xMjM2OTE3MzY5Myw5MDAwNy40MTEwMzYxOTY4MywxMTA4ODAuODI5MzUzMTgyNDksMTcxNzczMi4wNTYzMjA5MjcsMTk4MjE0MS41MTY1NTkyNjY1LDE2MDYyODQuODgyNDYyNDk1LDEzMDY2NzcuMDI0NzIzOTcyMiwxNjcxNDgwLjM4NjgwODI0MDMsMzUyMzQ4LjI1NDQ4ODgwMjA1LDIwODQyNzQuMDI2MzQzOTAyLDQxODAxMS40NDc3OTcwNzk3LDExMDM0OTEuNTE3NTUzODk3MywzMTU3MjUuNTAyMjQ4Mjc3NTQsMTA3Nzg2MS4zOTM4NzAwMzA1LDUyMTE3OS41MTIyNDU2MzE1NCwxNDUxMDAuODEzODY2MTExOCw0MjIwNjYuODI0Nzc4NDM5NSwyODY2MDYuMjMyMjQzNjQxODYsNDE1MTc0LjE1OTcwNzc1MjIsNDYxMDEzLjY4MzMwNjg5NjYsMTMwNjkyOC4yNDI0ODQ1NzUxLDI4MzM3MjUuNzMxODk5ODUxNSwxNTY4MTAuODMxMzQzNTYxMDMsMjM3MS41MzY2ODk1NTEzOTU3CisyOCxNb24gMjEgRmViIDExLDI5ODE2LjMwOTQ3NDkxMTc4NCwyNTUyNS40MTQ0NDA0ODM5MSw1MDcyNi44OTM2Nzg4MjYxMyw4NTc5OC40NjAzNjQ2MDQ1OSwxMDk0MTguNTQ3NzU4NTY2NzUsMTY3ODY0MC4xMjQ0NDYzODYsMTk2NjAyOC41MjI1MTc5MTUxLDE1ODc2MzEuMzkxMTc2MDAzMywxMjcxNTk1LjYxMTE2NDQ1MywxNjM2MDY4LjcyMjgxNDA0MzMsMzQ3NzI5LjgyMzk0ODY0MTYsMjA2NDE0NS40MDA2MDYxMzU2LDQxNTc0Ny44ODg1MTQ3NzY4LDEwOTU0ODYuMDMyNDc2Nzg3MiwyNzA4MDQuNDIxOTA1Mjc4MSw5NjAyNDYuODcyMjU1NjQ5OSw0NDY3NjQuMTk0MjgwNjEyNSwxMjQyODIuNDk5OTQ3OTg4NjIsMzYxNTE1LjQ3OTU3MzkzNzgzLDI0NTg0NS4wMzc5MjM2NzM3MiwzNTU2MDUuMzM2OTAyNzUxOSwzOTQ4NjcuODE1OTAwMjYzODQsMTI5ODI2Ni45Mzc5NzQ5MjAzLDI3Nzc4NjEuMDQ4MTk3Mjk4MywxNDk4MDUuNDY3NTc2NjUwMTgsMjM1Mi45MDU0NjMzOTM5OTIyCisyOSxUdWUgMjIgRmViIDExLDI1NTkyLjEzOTkxNDA0MDc3NCwyMTg1MS44MzQ2Njk3Nzg0NTUsNDk0NDkuNjk1ODE0NDEzODU1LDgxMzEyLjQwMDQxMTg5OTU1LDEwNzcwOC4yMzM0MTc3NjkzMSwxNjMzMjc4LjE0OTQzNTAzMjksMTk0NzgxNi4xOTUxMDg1ODYsMTU2NTg0NC4yMDkzMDc5MDA2LDEyMzA5NjAuNzI2NzI3ODYwNywxNTk0OTk4LjQ5MTgyMTM1MjksMzQyMzA3Ljg2NTc1NTcwNzk2LDIwNDA5NDYuMjg4NjQ2NjY4LDQxMzM1OS4zMTAwNjcwODQ5LDEwODY1NTguNTI1MzcxODI3NCwyMzIyMDUuNDA3NTk0NTYyMjIsODQ5OTg4LjYwMzQ4ODYzMDYsMzgyOTM4LjI0OTA0NTU2ODIsMTA2NDcwLjgyOTI0MTE4NDQzLDMwOTcxMS45Mjc0NzI5NTgwNSwyMTA4MTEuMTEwMzI3MzM2NTMsMzA0NjQ1LjA4ODI1MzUyMjUsMzM4MjgxLjQ0ODkxNjc5MTY1LDEyODg4MDcuMjExNzcwNjkwNSwyNzEyNTk0LjI4OTE0NTc2MSwxNDIxNTUuODgwODM4MDUxMzUsMjMzMS44MjUyODkyODc3MDUzCiszMCxXZWQgMjMgRmViIDExLDIyMDE5LjMwODAwOTY4OTMyNSwxODc2OS41NDI2Nzg5MTQ0NDgsNDc5NDIuMzYxNjE5MjM3OTMsNzY2MDEuNTM1NjMwODg4MzMsMTA1Njk2LjI0MzM5MDUyNTgyLDE1ODA4MTMuMjI4MjE2MjMxOCwxOTI2OTI5LjA0MzM4NjUxOTIsMTU0MDE3NS45NzAwNzAzMTIsMTE4NDE3NS4xODY3MjE1NzE3LDE1NDc0NTkuMzk3ODI3NzExMiwzMzU5MDEuOTU3NTYwMDc3OTUsMjAxMzg3OS42MjQ5MDYxMTY5LDQxMDgwMi4xODg2NTcyMzQsMTA3NjQ0MC41NjgxNTAxNzEzLDE5OTY5MC42MjQ5ODI2ODYyLDc0OTAyNC45NzE5NDI5NDkxLDMyOTI2Mi4zMDExNDE0ODcxNCw5MTUyNS41ODMxNDc0MjE1NCwyNjYyNDYuMzY5Mzk5ODQ0MjYsMTgxMjkyLjYyMTQ3Mjg0MDgsMjYxODg5LjIwNjgyMjA0OTA1LDI5MDgwNS40OTA0Mjk4NzAzLDEyNzgzMjQuNTY5NzM2NjQsMjYzNjM4Ny4xMjY5NzgyODMsMTMzOTE0Ljc4NzI1MTk3OTU1LDIzMDcuNTkwMTk5NjU0OTA1CiszMSxUaHUgMjQgRmViIDExLDE5MDQxLjQyMDA5OTk4MTc5LDE2MjE5LjE1NzEyNDQ4ODA2NSw0NjE3NC40OTY4MzY2Njg0MDQsNzE3MjkuODIwNzIwNTU0NzIsMTAzMzIyLjcxMTA4MzE0NTgxLDE1MjA0OTUuNDg5MDA2ODEyNywxOTAyNjY0LjQ5ODI2ODAxNCwxNTA5NzY3Ljg4MDQ5MzIwMzYsMTEzMDc4My42NTIyMjg3NTc3LDE0OTI2ODEuOTQyNTkxNzcwOCwzMjgzMDkuNjYzMjI1OTkyMiwxOTgxOTk1LjQwMzY5MDA1NDgsNDA4MDE5LjQ0MDg0OTgwODUsMTA2NDc5OC4xOTMzMDgwODYxLDE3MjY5MC4yNzI3MzUzNDQ1LDY1ODQ4NS4xMTI2NDE0ODA2LDI4NDc1My4xMjQxNjIxMjM4Myw3OTE1Ni43OTA2MTU2MDExNywyMzAyNzQuMjYyNDU2NTMwMTIsMTU2Nzc1Ljc2MDM5Nzk1MDI1LDIyNjUwNS45MTYxOTM3NTc1NiwyNTE1MTYuMTU1OTc0MDA5OTIsMTI2NjU0MC41NDE5MTI2Mjk3LDI1NDc3MDguOTk0OTUzNjc4LDEyNTE2Ni4yNTU1ODc1MDQyLDIyNzkuMzI5Mjg1MjIwMTEyCiszMixGcmkgMjUgRmViIDExLDE2NTgyLjYzMDcwMzc3Mzg4LDE0MTI2LjY3MTI1MzYwNzU0Myw0NDEyMS4zNjc5MDUwMjI1NSw2Njc2OC45ODAxNzE5MTczMywxMDA1MjMuNTQ2NDA2NTAxOTYsMTQ1MTc2Mi4yMDgwOTQyNzg2LDE4NzQxODAuNDYyNTY4MDg3LDE0NzM2NjguNjk3MjMxMjI5NCwxMDcwNTc0Ljc5NDQ0NjU0OSwxNDMwMDIzLjIzOTU3OTY0MjIsMzE5MzEzLjgwNTA5MjIyOTEsMTk0NDE5MC4wMDM2NDE4MjA1LDQwNDkzNi44MjA3NDk3NzAwNCwxMDUxMjIyLjE3NjYxMTA2NSwxNTA0NjkuOTYzMDI0NTUwMDYsNTc4NzA2LjM5NjQwMjE1NywyNDgxNjUuNTEwMzM4MTgyMzMsNjkwMDUuMjc2NTI1MTI4NSwyMDA3NTAuNDI2MzMwNDAyLDEzNjU5Ni4zNjc0OTY5ODg4LDE5NzQ2Ni4zMTA0ODExODE0LDIxOTI3MC44NDQ0MDgzNzA1OCwxMjUzMTEzLjY3MDExMzU3NDcsMjQ0NTE4NC4yOTIyNjQ5MjY3LDExNjAyNC44MTY5MDIwMzM2LDIyNDUuOTg4MjQzODg4NjA0OApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BZ2luZ1NFSVJEaXNlYXNlX0ZEX1JlZmVyZW5jZS9BZ2luZ1NFSVJEaXNlYXNlL2h1bWFuMnRvLS9EaXNlYXNlIERlYXRoc18yLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWdpbmdTRUlSRGlzZWFzZV9GRF9SZWZlcmVuY2UvQWdpbmdTRUlSRGlzZWFzZS9odW1hbjJ0by0vRGlzZWFzZSBEZWF0aHNfMi5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGFkMWE1YgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWdpbmdTRUlSRGlzZWFzZV9GRF9SZWZlcmVuY2UvQWdpbmdTRUlSRGlzZWFzZS9odW1hbjJ0by0vRGlzZWFzZSBEZWF0aHNfMi5jc3YKQEAgLTAsMCArMSwzMyBAQAoraXRlcmF0aW9uLHRpbWUsRUctRlJHLUcyMTAwMDEsRUctRlJHLUcyMTAwMDIsRUctRlJHLUcyMTAwMDMsRUctRlJHLUcyMTAwMDQsRUctRlJHLUcyMTAwMDUsRUctTE9FLUcyNDAwMDEsRUctTE9FLUcyNDAwMDIsRUctTE9FLUcyNDAwMDMsRUctTE9FLUcyNDAwMDQsRUctTE9FLUcyNDAwMDUsRUctTE9FLUcyNDAwMDYsRUctTE9FLUcyNDAwMDcsRUctTE9FLUcyNDAwMDgsRUctTE9FLUcyNDAwMDksRUctVVBFLUcyOTAwMDEsRUctVVBFLUcyOTAwMDIsRUctVVBFLUcyOTAwMDMsRUctVVBFLUcyOTAwMDQsRUctVVBFLUcyOTAwMDUsRUctVVBFLUcyOTAwMDYsRUctVVBFLUcyOTAwMDcsRUctVVBFLUcyOTAwMDgsRUctVVJHLUczMDAwMDEsRUctVVJHLUczMDAwMDIsRUctVVJHLUczMDAwMDMsRUctVVJHLUczMDAwMDQKKzEsVHVlIDI1IEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyLFdlZCAyNiBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMyxUaHUgMjcgSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzQsRnJpIDI4IEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCis1LFNhdCAyOSBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorNixTdW4gMzAgSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzcsTW9uIDMxIEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCis4LFR1ZSAxIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCis5LFdlZCAyIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxMCxUaHUgMyBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTEsRnJpIDQgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzEyLFNhdCA1IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxMyxTdW4gNiBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTQsTW9uIDcgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzE1LFR1ZSA4IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxNixXZWQgOSBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTcsVGh1IDEwIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxOCxGcmkgMTEgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzE5LFNhdCAxMiBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjAsU3VuIDEzIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyMSxNb24gMTQgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzIyLFR1ZSAxNSBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjMsV2VkIDE2IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyNCxUaHUgMTcgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzI1LEZyaSAxOCBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjYsU2F0IDE5IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyNyxTdW4gMjAgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzI4LE1vbiAyMSBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjksVHVlIDIyIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCiszMCxXZWQgMjMgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzMxLFRodSAyNCBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMzIsRnJpIDI1IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FnaW5nU0VJUkRpc2Vhc2VfRkRfUmVmZXJlbmNlL0FnaW5nU0VJUkRpc2Vhc2UvaHVtYW4ydG8tL0VfMi5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FnaW5nU0VJUkRpc2Vhc2VfRkRfUmVmZXJlbmNlL0FnaW5nU0VJUkRpc2Vhc2UvaHVtYW4ydG8tL0VfMi5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDcyYzA2ZAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWdpbmdTRUlSRGlzZWFzZV9GRF9SZWZlcmVuY2UvQWdpbmdTRUlSRGlzZWFzZS9odW1hbjJ0by0vRV8yLmNzdgpAQCAtMCwwICsxLDMzIEBACitpdGVyYXRpb24sdGltZSxFRy1GUkctRzIxMDAwMSxFRy1GUkctRzIxMDAwMixFRy1GUkctRzIxMDAwMyxFRy1GUkctRzIxMDAwNCxFRy1GUkctRzIxMDAwNSxFRy1MT0UtRzI0MDAwMSxFRy1MT0UtRzI0MDAwMixFRy1MT0UtRzI0MDAwMyxFRy1MT0UtRzI0MDAwNCxFRy1MT0UtRzI0MDAwNSxFRy1MT0UtRzI0MDAwNixFRy1MT0UtRzI0MDAwNyxFRy1MT0UtRzI0MDAwOCxFRy1MT0UtRzI0MDAwOSxFRy1VUEUtRzI5MDAwMSxFRy1VUEUtRzI5MDAwMixFRy1VUEUtRzI5MDAwMyxFRy1VUEUtRzI5MDAwNCxFRy1VUEUtRzI5MDAwNSxFRy1VUEUtRzI5MDAwNixFRy1VUEUtRzI5MDAwNyxFRy1VUEUtRzI5MDAwOCxFRy1VUkctRzMwMDAwMSxFRy1VUkctRzMwMDAwMixFRy1VUkctRzMwMDAwMyxFRy1VUkctRzMwMDAwNAorMSxUdWUgMjUgSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzIsV2VkIDI2IEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCiszLFRodSAyNyBKYW4gMTEsMC42ODQ3MDQyNDc3NzA4NzMyLDAuNTk1Nzk3NDg3NDEwMjE2NywwLjAsMC4xMTU5OTI1MzI5NzIxOTAzOCwwLjAsMC4yMTAwNDkxMzUyNDU2NzExOCwwLjAsMC4wLDAuMjAzODIyNjM0OTE4MDU3ODMsMC4xOTQyODQ0NzkyMTc3ODgwOCwwLjAsMC4wLDAuMCwwLjAsOS4xNTA4Mzc1MzE1NjU3NiwxOC4xMTAxOTk4ODQ2NDM1MjQsMTUuMjEwODA5NTA0NDQwNDMsNC4yNzI2MTUxODg2Njc0OTQsMTIuNDQ5MDY1MzI4ODU3ODQ1LDguMjkwOTkyNDI2NTk0MTMyLDEyLjI0Nzc5NDkwNjc1OTg5NSwxMy42MDE4NTY0NTk5NTQxNzYsMC4wLDAuMjI1NzQzNDE0NTE5NDUyMDQsMC4xMzI2MTY0MjYyMTk4MDgzLDAuMAorNCxGcmkgMjggSmFuIDExLDI1LjU0ODcwMTQ3NTIyMzM0NiwyMi45MTE4MTU1OTExNzY1NSwwLjA3OTk1OTA5NDgwMjYxODUsNC42Mzc0ODk3ODc5NDI2NiwwLjA3NzcyMzg5Njc1MjIwMDQ2LDEwLjgxMzY3ODU4NDUzNjUyNCwwLjMzODQ5MDMyNDE0OTA5MzQsMC42OTY4OTAzMjIzNDg2NjYyLDEwLjQ4NzIyMjIxNTkxNzc3OSw5LjgzNzc0MDE5NjQzMzU2MSwwLjIyMjg5MjQ1NjcwMzUwNDEzLDAuNTYyMDI0NTAzNDc5NjQ2NCwwLjAsMC4xMDIxODIyNDIxMTI1OTk2MiwyNzEuOTU4MzQ1MzQ1NzM1OCw0NzMuODExMzU2NDY0NzM3Myw0NTIuNjAzNTE5MjY4OTY3LDEyNy4zNDc5MjA3Mzc1OTY1OCwzNzEuMTMyOTc3OTQyMTA3MzUsMjQ2LjMyMTQzNjkwNDg4MTY0LDM2NS4xMjgzMDUwMTUxNDcxMyw0MDUuNTAzMDM3NzExMTIzNSwwLjEzNDUyNjY3NTY3MTcxNjY3LDEyLjE1MzE5MjI0ODQ1MDQ4Niw1LjY1MjgwNzk5MTY5NDA2NiwwLjAKKzUsU2F0IDI5IEphbiAxMSw2OS45MTYxMzQ4NzQ5MDU4Miw2Mi43NTI1MzI0NTQxOTEwMDUsMC4yMjUyNjQ4OTc5MTQwOTQ5MywxMi43MjI1NDMxNzQwMDQ4NywwLjIxODk2ODAyODI1MjYzNjQyLDI5Ljg0NzEwOTk1NTYzNTY3MywwLjk1MzY3MjgwMjI0NDcxOTIsMS45NjM0MzYxMDk0MTAzNDQzLDI4Ljk0NTYxNTYwNDM0MTAxNSwyNy4xNDQwMDk4ODg0MzA0OCwwLjYyNzk3NTA4NzQwMDM2MTYsMS41ODM0NjY2NTk4MDA4MjM4LDAuMCwwLjI4Nzg5MTE5ODI3MDkzODksNzM4Ljc3NjcxNzU5OTcxMzcsMTI4MS4xMzYzMTE2MjgxNjQ1LDEyMjkuNTUyNDg2NzQwNzQyOCwzNDUuOTc2NzI1NDIxNDU5ODMsMTAwOC4yOTQwNTg4NDY3Njg3LDY2OS4xMjY2MzE1NzQ5ODE0LDk5MS45ODAxNzg1Mjk2NCwxMTAxLjY3MDgzMDI3MzE1MDIsMC4zNzkwMTQ1MzY2NzI3NjY3NCwzMy41NzQ5MzAyNTQ4MDMxNiwxNS41MzQyMTA3MTUxOTYzNzcsMC4wCis2LFN1biAzMCBKYW4gMTEsMTI3LjU2OTAwOTgzODY4ODAzLDExNC42MDUyNDAxMDM4MTA5LDAuNDMxODIyMDcyNDk3ODkzNiwyMy4yNTc1NzI3MzE4MTcyNCwwLjQyMDM0NTAxMDM3ODQ2NzA1LDU1LjEzODU2NzY0Mjc2OTA5LDEuODQ3MjM3NjM0MDM4NDgyOCwzLjc4ODI4MzY3NjE1NTk0Niw1My40Njk2NzQyODAxMTA0OTYsNTAuMTEzNjE2NjIxOTcyOTEsMS4yMDcwMzU3MTIzNTc3NDUsMy4wNjI0NTEyNTY1ODE2NTU3LDAuMDAxNjE1NTY1NzU4NzM2ODk2NywwLjU2MjE0ODQwODUyMzgyNiwxMzQyLjA2NTA0MjIyMzk2MTQsMjMxNi4zMzg4MTg1NTM1Mzc3LDIyMzMuODA0NTU5MzA5NDcxLDYyOC42MzYzOTU2Mzk5MDAzLDE4MzIuMDU4Mjk5OTQzODYzOSwxMjE1LjUyMjg4ODk0MTA2MDUsMTgwMi40MTczOTUxODM0MjU1LDIwMDEuNzI0NTUxMDAzNzkxLDAuNzMzMjI1MDYyNTMzNTk1Nyw2Mi4xNDk0MTE4OTIzNDk4MDQsMjguNDY3NjIwODg2NzcwNjUzLDguMzIxNTI5MzUyMjg5MjM3RS01Cis3LE1vbiAzMSBKYW4gMTEsMTk0Ljc2MzI1OTU3MzQ1OTMyLDE3NS4xOTMxNjE2Mjk2OTM0NiwwLjcwNzMxNTU4ODg4MDIyNDIsMzUuNTg3MzUxOTk4NTg4OCwwLjY5MDA1MjYzMjk1MTA2NDEsODUuNjk2MzcwNDc1ODc2ODYsMy4wNzUwNDU3NjU1OTAyOTE0LDYuMjY4MjY3NjMwMTM0ODI4LDgzLjA5MzcxMTc5Mzk1NDgyLDc3LjgxNDYxOTcxMjkyNzc1LDEuOTg1NDMyODg0NDc0NTE1Nyw1LjA4NTk5NDc0MTc3MTk1MiwwLjAwNjgyNTUzNjYzNDI5Mzk5NywwLjk0NzM0MjYwMTE5NTAyNzQsMjAzOS44Njk0NDk4OTU2MjM4LDM0OTguNTc4OTQ2OTkzNjc1MywzMzk1LjcyNDIxNjExODA2OTMsOTU1LjgwOTcwMDU4ODcxNTYsMjc4NS41MzgwODI5ODg3MDI2LDE4NDcuNDk5MTE0MzkxMTgyMywyNzQwLjQ3NDU1Mjc2MDIxMiwzMDQzLjUxMDI2OTUzMzc4NTUsMS4yMTgyNDMwMjg3MDY5NDU1LDk2Ljg4NjI1MTA1MDk0NjgxLDQzLjcxNTYzMDg3NzgwODUxLDMuNTE1NzA5NzE5MDYzMTI1RS00Cis4LFR1ZSAxIEZlYiAxMSwyNzAuMzk4NTcxNzA3MTE2NDUsMjQzLjYyMjUzNzIyODg3NjMsMS4wNzI2MDM1NzgzNjE5OTgzLDQ5LjUzOTY0NTcwNjI3ODI1LDEuMDQ5NDg5MDExNDg0MDU5NiwxMjEuNzg1NjU2OTE0MjcwMzksNC43NjA5OTcyMDY0MDQ3Mzc0LDkuNjI5ODA0NzQ5NjgzOTAzLDExOC4wNjkwMzg4ODg1NjA0NywxMTAuNDUxNDcyNDE5NDM5MzEsMy4wMjczMDU3Njg5NjczMzksNy44NTA2MTc5NjE3MDE5MzEsMC4wMTg3ODEyMjg2NzMxMzc5NzMsMS40ODk0Njc4NDY0OTIyOTIxLDI4MTcuOTU4NDk5MDE5NTg0LDQ3OTQuMDAyMDYzMTc0OTM5LDQ2OTEuODY1NzgzNzY2NTkwNSwxMzIwLjk5Njk2ODEyNTI1NjIsMzg0OS43Nzk5NTk2NTU0MTY0LDI1NTIuMTUwNzgxMDM0NTE0LDM3ODcuNTA3OTQ1MTI5ODMyNSw0MjA2LjMyMjU3NjI4MTg3NSwxLjg4MTY0MjM4NTI2MjI3NzUsMTM4LjI0NTYxMjY3MzY5NTgzLDYxLjE0MjAzOTgxNjg5NjQ0LDkuNDM3NDMzNzc2MDUyMTU1RS00Cis5LFdlZCAyIEZlYiAxMSwzNTUuNTM5MDc5MTYyNjcxOSwzMjAuOTYwNTkxMDc3OTE2MywxLjU2Mzc3NDEzMDk2MTMzOTUsNjUuMzM4Nzc3MjIxNjg5MjcsMS41MzU1MzMyNTg4MDg1NTYyLDE2NC44MjIwNDQxMTEzMDM5LDcuMTE0NTAxMDUxNDgzNywxNC4yNTc0NDk3ODgxMjk4NSwxNTkuNzU5NDk0MDU2MDg4MSwxNDkuMjYzMTAwMjc4NzgwMzcsNC40NDI3ODYyNjg0NjUyODUsMTEuNjg4OTE3NDgxOTQxMzIsMC4wNDI2MzE3MjMxODQ0NTE4OSwyLjI2NTU2OTA2NTYyNjA3NSwzNjg0LjY1MjcwMjE0MDc1MzcsNjIwNS45MDA3NTY0ODQwNTgsNjEzNi40MDQ0MzAzNzEyMzEsMTcyOC4zMTk0NjgyNjQxMzY1LDUwMzYuNzc3NjQ4ODk4MjQ0LDMzMzYuOTk1MjUyODcxMzE3NSw0OTU1LjMyMjQzNjU1OTgyMyw1NTAzLjI3MTM2MjU2NjY0MiwyLjgwNDAzMjY3NzQ1MzYwNzMsMTg4LjA0NjM4NzU2MjU3MTQ4LDgxLjExNTQ3MTI0NjE3NDk1LDAuMDAyMDYyNTk4MjI5Njg0NTE1CisxMCxUaHUgMyBGZWIgMTEsNDUyLjk1OTMzODIzMjE1ODEsNDA5LjgzNzI0NzA0MzY1OTI2LDIuMjM0OTIzNzAxMzA0MjU5LDgzLjUyODk1MDk5NTgxNTYzLDIuMjAzNTkwMzA3NzgwOTUzMywyMTcuMzA0NDMzODU5OTY1NDYsMTAuNDUyODIxMzI4NjQ0NTc4LDIwLjczMDY2NjU3MDc4NzQwMiwyMTAuNTc0NTUyMDg5NjY0NjUsMTk2LjQ1NTk4ODgyMTAzMzQzLDYuMzk3NTMxMDAwMzI5NjkzNSwxNy4xMDM1ODU4Nzk1NjEzNTgsMC4wODY1NjM2MTg1NTM2NDYxMSwzLjM5MzE0Nzk1OTEwODYyNiw0NjY1LjgwMTAwNzgwNTM0MSw3NzY1LjEzMzUyOTE2NDIyOCw3NzcyLjgxMjcxNTk2MzY4OSwyMTkwLjE5MjI3NjY0MTM0Nyw2MzgyLjY4Njg2MTM4Nzk2LDQyMjUuNDIwNDkyNjkwNzY3LDYyNzkuNDk3MDQ3NTYxODgxLDY5NzMuODY5MjMzNTAwNjIzNSw0LjEwNzQ3MTcyNTAzODU2OCwyNDkuNDIzMDEzMTg1MDk2NDQsMTA0LjQyNjcwMTc5Njk4NjU1LDAuMDA0MDA2NjExNjYzODc5MDg5CisxMSxGcmkgNCBGZWIgMTEsNTY2Ljg0MTIwMjI4MDYxNDksNTE0LjE4MDgwMDQ0MTE3MjIsMy4xNjIyODk0NTgxNTMwMjM0LDEwNC45Mjk3NjE0NDE2ODY4OCwzLjEzMjA4OTc3NzA1MjE3MjUsMjgyLjg0NDM0MTM2NzUxMDY1LDE1LjIzMzI0NTQxNTgxMDE0NywyOS44NzY5NjQxNDQzMzczNDcsMjczLjk5NTI5MTY0MDg5ODEsMjU1LjIyNDI4NzE0NDMyNjE1LDkuMTI2NzIzNjk3NzMxMjY4LDI0LjgxNjQwODI0OTM3MzI4MiwwLjE2MzI4NDY2NzAxOTQ2NDA0LDUuMDQzNjAwNzYxNDkyMzMyLDU4MDEuMzQxMzc0NDg4NTYyLDk1MjMuNTE1OTYyMTE1NTc2LDk2NjguMTc1MTY4Njk3OTkxLDI3MjUuNzQwMDA4NzcyNTg1LDc5NDMuMjAzOTUzNTg1NDU1LDUyNTMuNTY5MDYyODQ5MDQzLDc4MTQuODM5NjgwMTQwOTQ3LDg2NzguOTgzNDA2MzEwNDUyLDUuOTY3NjEyOTcyMDI4MjAzLDMyNi44OTkwNTUzMjc5NTc4LDEzMi4yNDY3OTEyNzk4OTIyOCwwLjAwNzIxMDIyOTUzNjYzMzI3MworMTIsU2F0IDUgRmViIDExLDcwMi41ODg3NDkxNjA4NDc2LDYzOS4wNTY1NDUwNTM5NjQ0LDQuNDQ5OTgzODk5MjgwOTg5LDEzMC42MjAzNDA0MDM0NDE0NSw0LjQyODcyMzA5MDQxNzg5MjUsMzY2LjI5MjIzMTc2MDExMTA2LDIyLjA5NzM4MDU0MDE1NjY2NCw0Mi44NDUwMjU0OTM0NTkxNCwzNTQuNjkzMzg1MjkzMzA3NTMsMzI5Ljg1NzAyNzEwNDUzNywxMi45NTQ0Njg1MjM0NzA1MSwzNS44MzU2ODMwODU4MzE0NSwwLjI5MjA3ODEzNjAwNzM2MDMsNy40NjA2OTEyNjY2Mjk1MDUsNzE0My4xMzQ4MjUzNzIxMjIsMTE1NDkuODE3OTY4Mzk4MzY1LDExOTA5LjYxOTQ4MTQ1OTYyNywzMzU5LjgwNjk2MzA5MjIzMDUsOTc5MC42NzU0OTc0NzcwODMsNjQ2OC4zNzY1MjM5OTk1NDMsOTYzMi41NDUwMDU5MzcwNTIsMTA2OTcuNjc4OTgwNTU3MTg2LDguNjMwNDUxNDU1MDU4MzIsNDI2LjU4MTA2MjE2MTA2NjgsMTY2LjEyMjMyMTA3NDU3MDQ2LDAuMDEyMjk2MzA2OTU1MzQ0NzAzCisxMyxTdW4gNiBGZWIgMTEsODY2LjY4NDU3Nzg3MTQ2MTQsNzkwLjUzNzExNjAyODM1NjksNi4yMzc0MjU0ODI4NDEzNDksMTYxLjk0MjY2NDY5MjYyMjE1LDYuMjM4NTYwMjgzMTc1OTA1NSw0NzMuOTQ2NzMzMzUzNjE5OCwzMS45MjkzNjczODcyMDUwODMsNjEuMjAwMTgyOTk0ODM1NTMsNDU4LjcyODk4Mjg5NTM0NjQsNDI1LjkxOTQzOTEwOTUyNjUsMTguMzE5MDk3MTQwMjA1MzcsNTEuNTQ0NTcyNDE5ODg4ODksMC41MDE1ODEyMzI4MTM1NTczLDEwLjk4NDk0NTc3NzQ4NTUxNCw4NzUzLjI4Nzg0MzM3NDAzNywxMzkyNy4yOTgwOTI4NjA1MjcsMTQ2MDEuNTQ3NjQ2MzE1ODc0LDQxMjIuMTg3MjM5OTkxNzgzLDEyMDExLjg0NzQzMDEwMjA3OCw3OTI2LjA1Mzg4ODE1NDEyNiwxMTgxNy45ODE2NDc3OTg5ODgsMTMxMjQuNzYwOTI0NjcyNjI4LDEyLjQzNDMyNjI4ODUxNTQ3LDU1Ni40NTk2MzY0MjI4OTg4LDIwNy45OTY3NDkxMzc1NSwwLjAyMDE0MzUwMTMzNzcyOTQwOAorMTQsTW9uIDcgRmViIDExLDEwNjYuNTA0Mzk0NzAzNTQwOCw5NzUuNTI2NTA1Mjc4ODcxLDguNzA4NjkyMjY0MDk4NjE0LDIwMC41MTUxNjQ1Njk2MTQ4NSw4Ljc1NDM1MTg0MjQ1NzcxLDYxMy44Mzc2NzQ1NjM3NDQ1LDQ1LjkzMTI4NTAwNDE2ODI1LDg3LjA0Njc2MDkwMzE4NzUsNTkzLjgxODAwNTkyMzg2OCw1NTAuNDk5OTM1ODQyOTYxMywyNS44MDU0NTUxNzYyNzA0MDMsNzMuODE1MDM5MTQ4ODM0NjEsMC44MzM1NDI5MjA2MTEzMDI2LDE2LjA4NTUzNjI3MDk0NzI2NiwxMDcwMi4xMTczNjU2NTg3NzMsMTY3NTEuNzIwNzY3MzY4ODU0LDE3ODYyLjI0NDQxMTQ5MDgzMiw1MDQ2LjY2ODU3NTc4NDAyMiwxNDcwNS4wNjk4NjE4OTU1OTgsOTY5MC4yNDkxNzc4NzM2MywxNDQ2Ny45NDM1NjUyNjU4MSwxNjA2Ny43MjA4MTQ2ODk0MiwxNy44MzgzOTQwNTA2MzU4ODgsNzI2LjgxMTk4NjEwNTcyNzIsMjYwLjI0NzgyMzQ4MjM4MDk3LDAuMDMxOTczMTk2MjMxODc0MzQKKzE1LFR1ZSA4IEZlYiAxMSwxMzEwLjAwNzAzMDU3MDM5ODIsMTIwMS40NTg3Njg3NjEyNDgyLDEyLjEwNDI2MDUyMjQxNDczNSwyNDguMjQ5NjU1Nzk1NzY5MDYsMTIuMjI5NTk4MjM2OTcwMjA4LDc5Ni4wODQyMTU3NTMxMiw2NS43MjEyOTg3NzA4MzE3NywxMjMuMTg1MjgwNTc5MjYwMDIsNzY5LjY2ODk2NTk5NTc2ODIsNzEyLjUyMzYzNTM0MTI3NCwzNi4xODYxMzI4NDcyOTY1ODQsMTA1LjE1NTM4ODYyNjYyNzc0LDEuMzQ3OTUzNTE1ODgyNjIyOCwyMy40MDIyMTg4MjAzMDA5MSwxMzA2NC45MzA0ODYxMzI3MDQsMjAxMjguOTUzNDY0MjYxODUzLDIxODE4LjQ2MzY2MDk1Njg1LDYxNjkuNDg3NTkyNTA0NTA2LDE3OTc1Ljc4NTU5Njc4NjU1OCwxMTgyOS4xMzk1NDg1MDMzMDgsMTc2ODYuMjEyMTA1ODcwMzE2LDE5NjQxLjgwNzIwNTIyNDE2MiwyNS40NTk2NDYyODAxMzQ4ODQsOTUwLjcxNDI1MzY2NjI3NjIsMzI1LjczMzYwNzI1NzIwMjA0LDAuMDQ5NDYzMDgwNDQ5OTM3MzE2CisxNixXZWQgOSBGZWIgMTEsMTYwNS4yMTM2Njk3MjMyNjI3LDE0NzUuNzg4MzU4NzAzMTEzMywxNi43MzU4MDI0NjU0OTA3MiwzMDcuMzY1NTgxNjY2Nzc3MSwxNi45OTUyMzcxODI5MTUwMTYsMTAzMy4zMzc2MTc1NzIwMTU3LDkzLjQ2MjUxMzI5MzgxNDcyLDE3My4zMTYwNDc0OTk0NjgyLDk5OC4zOTY4NTA4NTA3NTUxLDkyMy4xNDA4MjMzMjM5NTU4LDUwLjQ3NDQ5NzQ0MjY4NjkzLDE0OC45MDI5MzAxMzU5OTQxLDIuMTMwMDk4OTQxMjM2MTM3MywzMy44MDA5Nzk3MzM0MDE4NywxNTkxNi43Nzg5OTUzMTg5MTMsMjQxNzEuMzI4NDc3NzE0NDIsMjY1OTYuNTY1MjM4MDA0OTU0LDc1MjYuNzgzMDUxMTgxMzk2LDIxOTI5LjA5ODkyMTQ3NzgxLDE0NDEwLjY5NDY5MTk1MzU3NSwyMTU3Ni4yNDM4Mzc5OTQ0NjUsMjM5NjEuOTAzNzQ5ODg2MzEsMzYuMTIxNDUyMDM5MDkwODA1LDEyNDQuNjgzOTAyNzgxMTIyNyw0MDcuODQxMDcwNjQxMTk2ODQsMC4wNzQ4OTcyOTk4OTgxODI2MQorMTcsVGh1IDEwIEZlYiAxMSwxOTU5LjM4NTc1NTcwNjc3MywxODA1LjE4NDgzMjE4MDQ1NzgsMjMuMDA0ODU4NDE4NDgyMTEsMzgwLjM5NDk1NDAyNTkyODYsMjMuNDgxMDE1MTAwMDY1NTM0LDEzNDEuMzIxOTE4MzE3MDcxOCwxMzIuMDMyODk2MDI2NDg3OSwyNDIuMzAzODUzMDU3MjY0NTIsMTI5NS4wMjQzOTI4MjExNzgsMTE5Ni4yMDIzNTAzNjI0OTA1LDY5Ljk5MzE1OTc2NzI5NDc2LDIwOS40NzY2NTQ2MDAwMDM4OCwzLjMwMDI4MjU2NDI2NjM3Miw0OC40NDgxNzg0NTAyNTc0MywxOTMyNC4zMzI1NjQ3NDUxMzUsMjg5OTEuOTQ4MDgzODg3NTc1LDMyMzA4Ljc0MDQ0Nzk5NDkzMyw5MTUwLjYyMTI1NTA1OTk1NiwyNjY1OC4xODY1MDczMDk1MSwxNzQ5NS4zMzcxNjY2Mzk1NzYsMjYyMjkuNzY0NjczOTU4NjE2LDI5MTI5Ljg2MDg2MjI1NzkxNiw1MC45MTc1MDk4ODc2NzQxMTUsMTYyOS40Nzk0NTc1NjY3NDk3LDUxMC41MzA0NjcwNDUwNDAzLDAuMTExMzY2MDU0Njk5ODIwODYKKzE4LEZyaSAxMSBGZWIgMTEsMjM3Ny44MTgxMjUxMjM2NDk3LDIxOTQuMzUyOTQ5NzU0ODc0MywzMS40MjYyNTcxNjU2ODkwMjMsNDcwLjE2OTMxNzMyNjE5MiwzMi4yNDI3NzM4NDU4Mjc5MSwxNzM5LjQ4NDczNzQ2NzU0MjEsMTg1LjI0OTE1NjkzMTY5NDU5LDMzNi41MjE1MDY4OTk3NzYxNywxNjc4LjA3ODc3NzAyODg3NTcsMTU0OC44MzM0ODAyODUxMzQ2LDk2LjQ2MjE3MTk5OTAyMzYxLDI5Mi43MDgyMjgyMTc3MTg5NSw1LjAyNzE5Mjk2MDQ5OTUwOCw2OC45MDkyMzE2MzczODQyNCwyMzMzNC4xMTUyMzk3ODAzNzgsMzQ2OTYuMDY2MzAyNDE2MDEsMzkwMzMuMDMzMDA4OTQ5ODYsMTEwNjMuMjE1NDg1MTE0OTkzLDMyMjI3LjQ1MzYzOTU2OTE5LDIxMTI1LjMxNTQ2NDE0NzQxOCwzMTcxMC4xODk0OTM4MDM3MjIsMzUyMTYuMDgwOTM5ODgyNzI2LDcxLjI5NjA0MTA2OTE5MTYzLDIxMzEuMDg2Nzg3Nzk0Mjk3LDYzOC4zNjU4MzY5NjU1NjExLDAuMTYzMDMwODAyNTc3NjY0NAorMTksU2F0IDEyIEZlYiAxMSwyODYyLjIwMzI3ODE3OTc4LDI2NDQuNDQwODM5MzE4NDk3LDQyLjY1NzEyMTgxMjUxOTc5LDU3OS43NzY5OTQzMDM1Nzc5LDQzLjk5NzAwMTk4Mjk2ODc4LDIyNTEuNzY0ODk5MDIzODI0LDI1OC4xNjAyOTEzMzkzNzgyLDQ2NC4yOTI4MTE1MTgzMjkyNCwyMTcwLjI4NDY4NTc5Njk5ODUsMjAwMi4xMTM1NTQ5MDEwNTkyLDEzMi4xMTE4MzgyNjU4NzEwOSw0MDYuMjczMjUwOTAxNDI3OSw3LjU0NjE5NzQwNDYxNjUwMTUsOTcuMjc5MzUzMTk1ODQ3LDI3OTU2Ljc2ODk2NjI3MDY5OCw0MTM2OC43MDQzNDA1NjY3OTQsNDY3ODYuNTgwMDMyMDAxNTEsMTMyNjkuMTcxNDYwNDIzNDQ0LDM4NjQ5Ljk1Mzk2MjM4NjgyLDI1MzEwLjQ4MjQ1OTg1NzE5NCwzODAzMC4zOTE1NzEwODI1Myw0MjIzNC44Mjk0NjAxMDQzNCw5OS4xNzAxMjQwOTE1NTc0MywyNzgxLjkxODQxODI2Nzk0LDc5Ni41MTczOTYzMjE2OTk0LDAuMjM1NDc1MDg1MDM4NzE0NQorMjAsU3VuIDEzIEZlYiAxMSwzNDA4LjYyMDk3ODkxMDE4MiwzMTUxLjEwMDMyNjQ0NDUwMTcsNTcuNTMyMTM2MDI2NDU0MTYsNzEyLjQ3NTU5Mjk4MTgwODQsNTkuNjY0MDYzNzAyNDAyODgsMjkwNy40NzM2OTcxNjA5MzM2LDM1Ny40Mjk3NjE5NDMxNjM1LDYzNi40NTgzOTMzNjkxNTM2LDI3OTkuMzQyMzkzMzExNjU2NSwyNTgxLjg2MTMwNDQxMzY0OSwxNzkuODI1NTA1Nzk1ODc2NTUsNTYwLjI0ODc1MDI5MjI2NjgsMTEuMTg0MjMyMTIzNDI1NTE3LDEzNi4zNTU2MzUzOTI3NDEyMiwzMzE0Ny45OTM4OTY5NDg3ODUsNDkwNTcuOTA3MDMxMjUwNjIsNTU0OTMuMTk0NDk4NjM3NjksMTU3NDYuMDkwNDY3NjgwMzUzLDQ1ODYwLjA0ODk5NDA1ODc5NCwzMDAxMS4wNjAxOTkzMTAzOTYsNDUxMjUuNzgxNzI4OTM5NzksNTAxMTQuMzM4OTY0NDM3NTQsMTM3LjA2MTMyNzM4Mzc0OTE2LDM2MjIuMjQ1MTY0NDQ1NTEyMyw5OTAuNzE2MDAzNDEzOTYwNCwwLjMzNjE2NTYwNTYwNDkyODM2CisyMSxNb24gMTQgRmViIDExLDQwMDUuMzg3MzI1MjM4OTg3NiwzNzAyLjQ0NjA3MDQwMjUwOCw3Ny4xMDUzOTMwNzgzODk0Myw4NzEuNTQyNDk4NDkzNTEyOCw4MC40MjE0OTc1NTczNDE1OCwzNzQyLjI3MjEzOTY2MTYwOSw0OTEuODI5MDU4MTQ5NTIzNyw4NjcuMDkwMjIzMDkyNjUzMSwzNTk4Ljc2MTg3NzAxMTIyNzYsMzMxOS41MTQ3MzMzMDE5NzEsMjQzLjMxNzk5ODY3MTIzNDA4LDc2Ny44MjcyMDM4NDAxMDAzLDE2LjM5MzQ2NzcwNjc1MjQxLDE4OS44NjE4ODEyNjEzNTgyNiwzODc4OC41NjU2MDU4Mzc3OSw1Nzc1My43MTkyODU5MjQwMSw2NDk0OS40Mjc0MTA2OTAzOSwxODQzNC43NTE2NDAxNzIyMDYsNTM2ODQuODc1ODA0MDQ1NzEsMzUxMTkuNTUwODY1MzMyOTQsNTI4MjYuMjEwMzMyNzUxMjcsNTg2NjUuNjA4NjY1OTkwMzYsMTg4LjI4NTI4MjU4NjQyMjc3LDQ3MDEuODY3MjEyNzkxODM3LDEyMjcuMTM0NTU4MTYxNjQ4LDAuNDc1MDUzNjM5NDY4ODQ5MQorMjIsVHVlIDE1IEZlYiAxMSw0NjMxLjI1NTQ5NDkwNTQ3Nyw0Mjc3LjQxNjY1NzI1MzA5NiwxMDIuNjk4NTAzNzg4OTY2MzYsMTA2MC4wNDY2Nzk5NTU1OTksMTA3Ljc2ODYxMjMyMDY2MjQsNDc5OS4yMDY3NjkxMzI0MTU1LDY3Mi44Njk1Mjg5NDI2NDMsMTE3NC4zODE5OTI5MzQ5OTU3LDQ2MDguNjk5Njg3NDM4NDIxLDQyNTMuMDgwMDMyMDc0NzI5LDMyNy4zNTUyNTIzMzYzOTg0LDEwNDYuMjIxNjM2MTQxNjg4NCwyMy43OTY1ODA1NjM1MzAzNywyNjIuNzQwMDgzMjA0NzQ2MSw0NDY2OC4yNzI2ODU3MDQyMTQsNjczNjQuMjQzNTc4NDA1NzYsNzQ3OTcuNDU2MTA1ODQyNTksMjEyMzEuMzM0OTE4Mjk0NTAyLDYxODIxLjc5NzUzODgzNjE4LDQwNDQ2LjE2MDg2OTE3OTQyNCw2MDgzMy43NTgyNzk2NTQ2LDY3NTU3Ljc0ODEyODk0Mzg3LDI1Ny4xODk1NjMxMDQ4ODEzNiw2MDgyLjAxMzE3OTY5MjE5NCwxNTEyLjE2Nzk2NTQ0OTYzMywwLjY2NTM1MzA0Mzc4NTk1ODMKKzIzLFdlZCAxNiBGZWIgMTEsNTI1NC43MzIwMTIwNDgzNSw0ODQ1LjMwMDQwOTY3MzEwOSwxMzUuOTUzNTQ3OTA2NTE4MSwxMjgwLjUzMTAyNjczNDcyMDksMTQzLjYwMzIwNDUyNDU2MDk0LDYxMjkuNzQwNTg3ODEzNTc0LDkxNS42MDM2MjYxMzkxNjMsMTU4MS43NDE0OTI2MzgzMTc2LDU4NzYuNzEzMzMxMDI0NTQ3LDU0MjguMTA1MzUxMDE5MjQ4LDQzOC4wMTk4NDYyODQ4NTI3LDE0MTcuNzk5NzI0NTU4MzIyOSwzNC4yNDcyODk1ODAxODA5NSwzNjEuNTI1MjE0OTY2MjY1LDUwNDgxLjA5MDkyMDQwMDI0LDc3NjkyLjEwMjM4MTYxMDg2LDg0NTE3LjM4MzE3MTMyMzA1LDIzOTg1LjM4NjQ4Mzk2NTI2Myw2OTgzMi42MDkwMjAxNDcyNyw0NTcxNC4zNDQ0NTAxMDkxMTQsNjg3MTcuMDI4NDU0MjQzOTIsNzYzMTEuNjQ5NzEyNzkwNzQsMzQ5LjQ1NjE1MTEzNzIwNzEsNzgzNy40MjgwODUxNTM1MTEsMTg1Mi4wODQ4Nzg3Mjc3MDE0LDAuOTI0NTM3NjgxNDQ1NzA4MQorMjQsVGh1IDE3IEZlYiAxMSw1ODM1LjQwMzU0MDYwNTQ2Miw1MzY3LjI5MDUzNzI1OTc1MiwxNzguODg3NzExNDUzMDEzNTcsMTUzNC42MDgwNzI4MDI3MjQ4LDE5MC4zMTA0NDIxMDEwMTUxMyw3Nzk0LjY4MTA5MDUwMzAyNCwxMjM5LjYzMDM2MzY5OTUzMjQsMjExOS4xMDU2MDM4Mjc2NjE1LDc0NTguMzA2MTU3NjM5NDUyLDY4OTguNjExMDQ4MjQ4Mjg3LDU4My4wMjQ5MzY1MjYwOTY4LDE5MTEuNDg1ODg3MjA5NjMzMSw0OC45MTA4NTAzNjAxODc3NCw0OTQuODIyODYwMTQyNjQ5Nyw1NTgzOS45MTU4NTE0NzA2MzYsODg0MTcuMDMzOTI5NjkzNDMsOTM0NTMuMTg2OTQ1MzU1NTgsMjY1MDcuNjg2NDQ2NjcwNDU0LDc3MTY2LjU3OTYxODExNzE1LDUwNTczLjk5NjcxMzU1MzIzNSw3NTkzMy44NDA4NTYwMzY2Nyw4NDMyNS4yMDY4NjAwMTI1Miw0NzIuNDgyNzgxMTMwNTI5OCwxMDA1OC41Njk2OTk3MTc0NzEsMjI1Mi41MzM5NDUyMzQzNjMzLDEuMjc1NjA3MTA2ODE5ODI5OAorMjUsRnJpIDE4IEZlYiAxMSw2MzI3LjkzOTc3NDkwNDQ4OSw1ODAwLjY1ODcyODM5NTI1NSwyMzMuOTQzNzk4NTczOTE1NzMsMTgyMi40OTQ2NjgyOTI0ODg4LDI1MC44NjI1OTc4NjY4NTQ4Myw5ODY0Ljg1OTk5ODYyOTkwNSwxNjcwLjM0MTY4MDIzMzI5OCwyODI0LjQ4NTEyMDkzMTkyNzcsOTQxNy4wODA1NjA5Mjg5OTUsODcyNy44NzQ0MjY1ODg0NSw3NzIuMDc0NjU4OTQzOTc5MSwyNTY0LjQ2NjQ4MDU4NTYxNSw2OS4zNzA0NTgzNjA5MjIyNiw2NzMuOTExNzExNzE3OTc0MSw2MDMxNi42NjE5Mjc1MTAwMjQsOTkwOTIuNDMwODQyMjk2OSwxMDA4ODIuMDgyMjM0NzIwNCwyODU5MC43OTc1ODY5NDYyMyw4MzIyMC4zNjk1MDc1NzI2Nyw1NDYzNy41NzkxNjUzMTcyLDgxODkwLjI0NzkyMjczNDM2LDkwOTM4Ljg2NTA1MjIwMjYxLDYzNS44NTkzMTEyNjE4MzA0LDEyODUzLjc2ODE1NzA4MTE2NCwyNzE3LjkwNzEwMDQ3MDA3MSwxLjc0ODY3MzI0Njg4ODc3ODcKKzI2LFNhdCAxOSBGZWIgMTEsNjY4OC42ODkxMjQxNDU3MDE1LDYxMDUuMzQzODU4Njc0NDE4LDMwNC4wMjY5MzEwMTEzNjA1NSwyMTQyLjU0MTAzNjI0NzMxNDQsMzI4LjkyNjA3ODAzNjcwOTIsMTI0MjEuMzUwMjUyODMyMzQsMjI0MC40NDQzNTA1NjQ3NTM3LDM3NDUuNzIwMDU4NDQzMjEzLDExODI0LjI0MjE5NzIzMzk5NiwxMDk4OC45MTU4MTc1NzUwMDcsMTAxNy4yNjEwNDI0ODMxNzAyLDM0MjQuMjIwMjczOTAwODgxNyw5Ny43NjY5OTU5MjQ1NTExNyw5MTMuNDk0MzM1MTE1MDY2MSw2MzUwNi4xNDk4MDg1Nzc2NTUsMTA5MTY0LjAzODIyMzYxODUzLDEwNjEyNC4xNDQ2MDU5MDQxLDMwMDQxLjIwMDkyOTkwODE3LDg3NDMxLjU3MDQ0MTI0NzkyLDU3NTM3LjgxMDAxMjM2MjY0LDg2MDMyLjY2NTM4NTc5OTQ4LDk1NTM3LjkzOTc2MTMyMTM1LDg1MS45NTY1NzE1MjU0NDEsMTYzNTEuMDk5NDUyMTI2NjU4LDMyNTAuNTkyMzIyOTAzMTAxLDIuMzgyOTE5NjQ5MjMzODYwNworMjcsU3VuIDIwIEZlYiAxMSw2ODgzLjYzMjI1ODg3NTgyODUsNjI1MS42MDE0MjMwNjM3NCwzOTIuNTEyMzMyNTkxNzQ2NiwyNDkwLjgzOTY5NjU2MTk0MTMsNDI4Ljk2ODYzNzI4MTQyMDM0LDE1NTU0LjkwMDc2NDk0MzM1NywyOTkxLjc4MjUxNzY4NjcwODYsNDk0Mi4zNzg1ODUzNDYxODYsMTQ3NTcuMDkzMzg2Mjc2MDYsMTM3NjQuNDQ5NjYzODQ5NCwxMzMzLjQ3MzgxODc4NzQ0Niw0NTUwLjg2NzQ5MDU0MDUwNSwxMzYuOTgxMjE5OTU2MDEzMjYsMTIzMi42MTgzNTkyNjY5Myw2NTEwMS4yODYwNjg0NDMsMTE4MDE2LjE5ODUwMjM4Mjk2LDEwODY3MC4yMDMzODE2MDE0LDMwNzE2LjM1NjMxMjY3NTIwNSw4OTM4Ni40NDA0MjYxNDE5LDU4OTk1LjY4ODQyNzUxMzg5LDg3OTUzLjk2ODE0MTIxNDI0LDk3NjcwLjQyODU1MDM2OTg5LDExMzYuNjQ1MTEwODk3OTUzNiwyMDY5OS41NTI3MDQ3NzUzNDYsMzg1MC4xODMwNzgzOTk2Mjg0LDMuMjI4OTczODExMjUxODQ2CisyOCxNb24gMjEgRmViIDExLDY4OTUuNDI4NTA2NTE0NDk5NSw2MjI2LjQxNDM4NDI3NzgxNyw1MDMuMjAxOTIwMzQ5MzgxOCwyODYxLjAxNzU4NDI5MjAzNiw1NTYuMzU0MTcyODgyMzc1NSwxOTM2NC4xMTA1Njc2NDM4ODIsMzk3Ny40NjI5MzY2Mzk2NTksNjQ4Ny42NTMwOTMwOTg0NzQsMTgyOTYuMDExMzI3ODQxODcyLDE3MTQ1LjkyOTE5MzcyMzYxLDE3MzguNzc3NDA1ODM1MjE0LDYwMTkuNzc1MzcwMzExODIxNSwxOTAuODY5MTkzMTEyMTM2NjYsMTY1NS43ODQwMzA4NjQwMjkzLDY0OTU3LjcyMTI5NTAwOTc4LDEyNTA0NC4xNzA2MDA4MDMxNSwxMDgyOTAuMjcwODYzMTcwNzUsMzA1NTUuNTE1MzUyMjY4NzQsODg5MDkuMzM0Mzg3NjkxNTksNTg4NzkuMTYyNTc0MzE5NzIsODc0ODEuNTI5MzI4Mzg2MDUsOTcxNDQuNzU2MTcxNDk2OCwxNTEwLjE1ODYzNDc2NzU5OSwyNjA2OC43OTgxMzEyODMzODcsNDUxMi43NDEwMDAzNjc3NjMsNC4zNTE3MDQzNzAyNjI3MzgKKzI5LFR1ZSAyMiBGZWIgMTEsNjcyNy4xMTEyMzIwMDE0MTksNjAzNi4zNDc0MjgwOTgwOTEsNjQwLjE5ODYyNDE2Nzc4MjIsMzI0NC4zMDYxNzQ5NTY0MDEzLDcxNy40MDQxOTczNTA4MDAxLDIzOTUxLjY0MDc0NTA4OTgwNCw1MjY0LjIzOTUzNjgwNzYxNCw4NDY5Ljk4MDUyOTY1ODQ4NywyMjUxOS4yMzEzMTE1OTYyNzUsMjEyMzEuMTA5Mjc2MjIwNjU0LDIyNTQuNjc1MTQwNTU1MDExLDc5MjQuMjYwOTM3OTAzNTQ0LDI2NC41NjMyMjIxMDkzNjI2LDIyMTQuMjM4OTYxNDcyNjQ3Niw2MzEyNS4yNTM3MTI1OTgzNjUsMTI5NzQxLjM5Mzc2OTI4Njc1LDEwNTA4My44ODc0Njk1NzI1NywyOTU5My4xMjQzNTIyMjUyMDgsODYxMDEuNDMxMDY4NDI0ODMsNTcyMzEuODQ2NzI5OTIzMjcsODQ3MTUuMjkxMDQ2MzY3Myw5NDA3Mi4wMjE3NDQwMDIyNCwxOTk4LjEwOTYzMzc5NDg0NjYsMzI2NDYuNDUzODQ2OTY5MzUsNTIzMC4yMTkzMjIwMTE5ODUsNS44MzMzOTY1MzYyNDM5MDQKKzMwLFdlZCAyMyBGZWIgMTEsNjQwMS4wMzc0NTE3MDkyMzEsNTcwNS43MjMwOTE2NDQ2NSw4MDcuNjU3OTQ2NjQ0MzEwMSwzNjI5Ljk0MTI2MTYxNTY5Niw5MTkuMzkzMDE4NTYwNzAzNCwyOTQxNy40OTQyMzY4NDYwOSw2OTM1LjAzMjY5NDM0MTExNiwxMDk5My45MjQ0ODY1Njc3NywyNzQ5NC41ODk0ODA4OTAwNCwyNjExOS4yODMyNzk2Mjg5NjYsMjkwNi4xMzA2NzQ0MDk2MTU1LDEwMzc4LjA3MTU1NzQ0MTg3NywzNjQuODUxMjI1NjcwNDk3NDYsMjk0Ny40MzEwNDA3NzQ1MTMzLDU5ODMzLjg4MzM5NjI1MjY4LDEzMTc4MS44ODQ4MjAzMjY2Nyw5OTQ1Mi43ODkzMjU0NzA1NywyNzk0OS41MjcxNjkyNjYzOTYsODEzMTMuNDczOTc1NDMyNDMsNTQyNjAuNzM5NDE5NzIzNyw4MDAwMC44Mzc0OTM4ODUzOCw4ODgzNi4wNzAwOTIxNzY4OSwyNjMyLjY0OTY5MDU4NzI3MzcsNDA2MzEuMjAwNjcyODA2NzcsNTk5MC4xMzg5MjMzOTc1OTUsNy43NzcxNTM1MDIzNDc1OTUKKzMxLFRodSAyNCBGZWIgMTEsNTk1My41MzY2MDEyMTQ0NTMsNTI3MC44NTcxNDIxODY3MTU1LDEwMDkuMzY5MDQyNTQzMjUzOCw0MDA1Ljg3MjA4NTYyMTg4MTUsMTE3MC40MjcwMzI3ODI1OTk2LDM1ODQ4LjE2Mjg2OTY5ODYxNSw5MDkxLjMyNDA4MDE3NzUzNywxNDE3OS41OTA1OTA0NTUzMzgsMzMyNjcuMzM1NzI5NTI3MzksMzE5MDMuMDcwMTM5Nzg5MTEzLDM3MjEuMTQ4MDAzNzI3NTIyMywxMzUxNy4wNzYyNTAwOTE4NzIsNTAwLjY0NjMxODc4NjE3ODQsMzkwNC41Mzc1NjgwNTM5MzU1LDU1NDQwLjAzMjgzMTk1NjgzNiwxMzEwNzUuMjA1MDM3MjkwMiw5MjAwNi43NjE4NTM0MTAxNSwyNTgwMi42ODYwNjc0Nzg5MjgsNzUwNjMuNDE5OTIxMTk0NzMsNTAyODcuODAxNzc2MzMwMDk2LDczODQ4LjIzNjAxNTAzOTU0LDgyMDAzLjM1MjU0NDcxOTYyLDM0NTMuNzQwMDA5MTg4MTY0LDUwMjE5LjQ3Njg3NTM4MTkxNSw2Nzc1LjU3MDQyMDk3Nzc5MSwxMC4zMTAxOTQ1MzU2OTY0MzIKKzMyLEZyaSAyNSBGZWIgMTEsNTQyNy4yODc2NDM4NjY3NzcsNDc3Mi41MjkyOTg1Mzk5NTgsMTI0OC4xMTgzMzU1MDM4OTk1LDQzNTkuNjgxMTIxNDc5NDM4LDE0NzkuMTM3NTg3NTE0NzgyLDQzMzAwLjQyNjEwNzkyMTk2NSwxMTg1NC45NTk2ODY4NTA1NywxODE1OS41MDcyOTY0OTEyLDM5ODQzLjQwNzQ3NjU1MTA5LDM4NjU1LjQ3MTMzMzA0Njc1LDQ3MjkuNjI3OTYxMTk1MjEyLDE3NDk5LjI0MzY4MzA0NzI5NCw2ODMuNTUzNzk2MDU0NTI2NCw1MTQ1LjkwMTkyNDE5NjU1MjUsNTAzNTMuMDExNjAxNzYwMjUsMTI3Nzc3LjYyODQ0Nzc5NTM5LDgzNDM3LjkyNDI4NDI5Njg4LDIzMzUxLjU0MDU2NjM0NzM5LDY3OTI5Ljg5NjI4MDAyMzEyLDQ1NjgzLjQ3OTc3Mzk4Nzg5LDY2ODI3LjEwNzE4ODYzNDEsNzQyMDYuNDA2ODk3MDk0ODksNDUxMC40NTM2NDkzMTQwMTUsNjE1ODMuMDA4MzQyNTUwNjUsNzU2NS40MzIxMjM2ODM4MTcsMTMuNTg2NDQyMjUyOTk3MjczCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FnaW5nU0VJUkRpc2Vhc2VfRkRfUmVmZXJlbmNlL0FnaW5nU0VJUkRpc2Vhc2UvaHVtYW4ydG8tL0lfMi5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FnaW5nU0VJUkRpc2Vhc2VfRkRfUmVmZXJlbmNlL0FnaW5nU0VJUkRpc2Vhc2UvaHVtYW4ydG8tL0lfMi5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDMyYzVhYgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWdpbmdTRUlSRGlzZWFzZV9GRF9SZWZlcmVuY2UvQWdpbmdTRUlSRGlzZWFzZS9odW1hbjJ0by0vSV8yLmNzdgpAQCAtMCwwICsxLDMzIEBACitpdGVyYXRpb24sdGltZSxFRy1GUkctRzIxMDAwMSxFRy1GUkctRzIxMDAwMixFRy1GUkctRzIxMDAwMyxFRy1GUkctRzIxMDAwNCxFRy1GUkctRzIxMDAwNSxFRy1MT0UtRzI0MDAwMSxFRy1MT0UtRzI0MDAwMixFRy1MT0UtRzI0MDAwMyxFRy1MT0UtRzI0MDAwNCxFRy1MT0UtRzI0MDAwNSxFRy1MT0UtRzI0MDAwNixFRy1MT0UtRzI0MDAwNyxFRy1MT0UtRzI0MDAwOCxFRy1MT0UtRzI0MDAwOSxFRy1VUEUtRzI5MDAwMSxFRy1VUEUtRzI5MDAwMixFRy1VUEUtRzI5MDAwMyxFRy1VUEUtRzI5MDAwNCxFRy1VUEUtRzI5MDAwNSxFRy1VUEUtRzI5MDAwNixFRy1VUEUtRzI5MDAwNyxFRy1VUEUtRzI5MDAwOCxFRy1VUkctRzMwMDAwMSxFRy1VUkctRzMwMDAwMixFRy1VUkctRzMwMDAwMyxFRy1VUkctRzMwMDAwNAorMSxUdWUgMjUgSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzIsV2VkIDI2IEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCiszLFRodSAyNyBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorNCxGcmkgMjggSmFuIDExLDAuNjg0NzA0MjQ3NzcwODczNCwwLjU5NTc5NzQ4NzQxMDIxNjUsMC4wLDAuMTE1OTkyNTMyOTcyMTkwMzgsMC4wLDAuMjEwMDQ5MTM1MjQ1NjcxMiwwLjAsMC4wLDAuMjAzODIyNjM0OTE4MDU3ODMsMC4xOTQyODQ0NzkyMTc3ODgwOCwwLjAsMC4wLDAuMCwwLjAsOS4xNTA4Mzc1MzE1NjU3NiwxOC4xMTAxOTk4ODQ2NDM1MjQsMTUuMjEwODA5NTA0NDQwNDMsNC4yNzI2MTUxODg2Njc0OTQsMTIuNDQ5MDY1MzI4ODU3ODQ1LDguMjkwOTkyNDI2NTk0MTMyLDEyLjI0Nzc5NDkwNjc1OTg5NSwxMy42MDE4NTY0NTk5NTQxNzgsMC4wLDAuMjI1NzQzNDE0NTE5NDUyMDQsMC4xMzI2MTY0MjYyMTk4MDgzLDAuMAorNSxTYXQgMjkgSmFuIDExLDE0LjE3MzkyNTMwOTE4NjYzLDEyLjY3Mzc2NjMwODM5MDM0OCwwLjAzOTk3OTU0NzQwMTMwOTI1LDIuNTU1OTMzMzU2Mjg0NzA0LDAuMDM4ODYxOTQ4Mzc2MTAwMjMsNS44MzYzODgzNjgwNDcxMjYsMC4xNjkyNDUxNjIwNzQ1NDY3LDAuMzQ4NDQ1MTYxMTc0MzMzMSw1LjY2MDQyNjE2NjcyNjAzMiw1LjMxNjE4MDY5OTcyNDA0MywwLjExMTQ0NjIyODM1MTc1MjA3LDAuMjgxMDEyMjUxNzM5ODIzMiwwLjAsMC4wNTEwOTExMjEwNTYyOTk4MSwxNTQuNjgwMzgwNDkzMzU2MDQsMjczLjkyMDE1MjU2Nzg3NTE2LDI1Ny4zODc1MDQ3OTU0MTc5LDcyLjQwNTc0NjQwNjAwMTM4LDIxMS4wMDgxNjU4ODgxNDc1NywxNDAuMTA0NzAxMDQ0NzMzNTYsMjA3LjU5NDUwMTA3NzAwOTQsMjMwLjU0OTEwOTczNzM5MDcyLDAuMDY3MjYzMzM3ODM1ODU4MzMsNi41MzgyNDExNzQxNzY1NTQsMy4wOTc1OTI0MzE0NjI3NjcsMC4wCis2LFN1biAzMCBKYW4gMTEsNDguOTkxODM5NjIyMDc2MjksNDMuODk1OTA4NzM5OTU1NzYsMC4xNDg4MjgxMTc5NzUzNjM1Miw4Ljg3OTE0NTk3OTI1Njg5LDAuMTQ0NjY3ODU5NjczODU3OTgsMjAuNTc2ODAwMTgzMzkyNzAyLDAuNjMwMDYzMjk1MDYxNjU3NiwxLjI5NzE4NDUwMDU0MzA5OSwxOS45NTU3OTYxMzY5Njc4NzMsMTguNzI2NTY1NjkwMjU5NTEzLDAuNDE0ODg1OTA0NDExMTc3NDUsMS4wNDYxNDkwNzc4MzE4OTcsMC4wLDAuMTkwMjAxMTgyOTk2MDMwNzgsNTI1LjQ3Mjg2NjgxNzc1NTIsOTIwLjMyOTE2OTA1NTU2ODksODc0LjQ3MTkxODQxMjU0MjcsMjQ2LjAzMjMyMDEzOTg5OTY0LDcxNy4wMTA4NDA1NTQ4NTYsNDc1Ljk0NDE1MDQxMDY4NTgsNzA1LjQxMDQ0MjczNDAyNTgsNzgzLjQxMTg2MjEwMzIzNTYsMC4yNTA0MDQ0NDM4MDgwMTQsMjMuMTAzNzI5NDg2NTI0MzEyLDEwLjgwNDYxMDgwNjk1NDI4MywwLjAKKzcsTW9uIDMxIEphbiAxMSwxMDkuNjk5MjYzMjg1MjI5OSw5OC40MDEyMDAxMTU1NTUwOCwwLjM1MDY0MzkxODU1MDk5ODQsMTkuOTMyNTM5OTMwMzg0Mzg3LDAuMzQxMTM5MTM5NTYwNzE2Nyw0Ni42NzgzNzMzNjc1NjEwMiwxLjQ5NDAwOTk4MzM2MjgzNDQsMy4wNjg0NzIzOTUwNDY1MjUsNDUuMjY3NDY4NDc1MjU4MTQsNDIuNDU0NzkwOTE5MDMxOTM2LDAuOTc5MTEwNjg0MzIzNTI4MSwyLjQ3ODI5NTg2MjkwMTAxNSw4LjA3NzgyODc5MzY4NDQ4M0UtNCwwLjQ1MzI2MTc4NTE5MTY1MDksMTE2Ny42MDE4MTk4Mzc3Njk3LDIwMzIuNjYxNDEyNDY0NDMsMTk0My4yMzM3MDI5MjczMzYzLDU0Ni43OTA0MTI2OTk1OTg0LDE1OTMuNTE1NzM2ODYyMTI4LDEwNTcuNTMyNTExNjE1MjY5LDE1NjcuNzM0NjY3NTE3ODQ4NywxNzQxLjA4OTM5NDk2MjczODcsMC41OTMzMDE2MzM1NzczNTY0LDUyLjUwNzM1OTg3MjU0NTY4LDI0LjMxODc3ODI4MDUzNzQ2NSw0LjE2MDc2NDY3NjE0NDYxOUUtNQorOCxUdWUgMSBGZWIgMTEsMTk4LjU0NTM5NDY0NzMxMTc1LDE3OC4yOTE5Mzc0NDA0NDI0NCwwLjY3MTE0Nzg5MTI3ODA5ODgsMzYuMTU0MDcwMjQ0NzU3NzYsMC42NTM5MTE4MjY1NjcxMDcyLDg1LjY3OTMwNTI5NjY4Njc1LDIuODkwMzIwNDc1Nzc5NDk0LDUuOTEyNTM5NzY5NTUxNzc2LDgzLjA4MzY2ODIzMjM3MDk3LDc3Ljg3MTY5OTYxNDU4MjI0LDEuODc5MjU5MDQyNzUzNDY2OCw0Ljc4NzAzNTI4NDIxNTkwOSwwLjAwNDE0ODI3MjA2MDU4MTQ5NSwwLjg4NDEwMjU4NjY2NTk3MjYsMjEwMS42NzUxMTMwMjU5Mjk1LDM2MzguNDA5MzUwNDM0MzQsMzQ5OC4xNDY0ODI3ODMxMTIsOTg0LjQ1MjA5MjI3NTk5MzksMjg2OC45OTYyNjQxODE0NjIsMTkwMy41MjI0MjY2MDE5NzIsMjgyMi41ODEzOTY3NjkwNTgzLDMxMzQuNjkzNzcwNzE3MjE1LDEuMTQ2MzQyNTYzMDM3NTg2NSw5Ni41OTQ0NzMwNjY1MzI2OSw0NC4yMzQ1NTgyNDEzMzI3OCwyLjEzNjcwMTQ2MjEyOTQwNDJFLTQKKzksV2VkIDIgRmViIDExLDMxNy4wMzI3MDY3MTQ3OTI1LDI4NS4wMzk1NjgxMDI1MTMxLDEuMTQ0MTkzNzg5NzIzMTEwNSw1Ny44NTcyMjY2Mjc4NDcyMSwxLjExNzAzMjAzNDAxMTAzOTMsMTM5LjExNDQxNTk4ODMyMjk1LDQuOTk4NjMyNDUxNjg0NzM2NSwxMC4xNzA0NzM0MzQwNTc3NTEsMTM0Ljg4Njc1MDY3MjAwMjksMTI2LjMyOTI1MjA1NjI2NjcsMy4yMTU4MjkyMzM5NjYzNCw4LjI2MTQ4NTU4NzA1NzM5MywwLjAxMzE2NzIyNTM5NjIzMjk3OCwxLjU0NTYzMjAxOTg1NDk3MzEsMzMzOS4zOTQ4MjM2OTM0NjY2LDU3NDUuNzgwNDQ3NDU2NzksNTU1OC45NjU5NTgzMTE5ODUsMTU2NC42OTAzNTI3MzE0Mzk0LDQ1NTkuOTc0NjQ2OTM1MjA1LDMwMjQuNDk0MDgxMzYxODk3LDQ0ODYuMjA4NDM5MDYwNjg3LDQ5ODIuMjgwNTcwMzA2NjY4LDEuOTc5MTk5OTc3OTQ5NTU3MywxNTcuMjc3MjE3ODM4NzU1Nyw3MS4wMjYxMTA4ODE0Nzg2Myw2LjY2Mzk4MjM0NzQyMzM3MkUtNAorMTAsVGh1IDMgRmViIDExLDQ2Ny4wODM1NTYwMzI0MTg3Niw0MjAuNTM3MjAzOTkyNzg2NCwxLjgxODY4NTM4NjU3ODA3NzksODUuNDQzNTkyMzg4NzAzMDgsMS43Nzk5NzI2MzEyOTUyNzc3LDIwOS4wOTczMTI3MjczMjA2Myw4LjA4NzM0NDc1NTIzOTI4NCwxNi4zNDU0MDA0NzkzMzE4OSwyMDIuNzE2NDE1ODgwNTM5MSwxODkuNjg1NTE1MjU3NDU4LDUuMTM1NDg3OTEyNjQ3NDk2LDEzLjMzMTQxNDQzMDA2MjMxMiwwLjAzMzMwMTg3ODM4MTQ5MzYyLDIuNTMzNjg2OTY2MjQ0NzU1Niw0ODk1LjgzMTQ5MjI4MDQ2NzUsODM2NC4zNjg5Njg2Nzc0MzQsODE1MS4xOTIxODExMzgzNTYsMjI5NC44NTA0OTE0MDI1NjgsNjY4Ny44MzkxODI2NTc4ODIsNDQzNC4wNzA5MTIyMzY3NDcsNjU3OS42NjMyODM1Njk5NDksNzMwNy4yMjQ1MTgzMzY4NDEsMy4xOTU2Njk4NjE1NzA4MDMsMjM3LjIxNTI0MDcwNzg2MjI4LDEwNS4zMTQyMDY3MzY2Nzc3OCwwLjAwMTYzNzkxNjE0NTIyNDIyMzQKKzExLEZyaSA0IEZlYiAxMSw2NTEuODYyODAyOTM2NDY3Niw1ODcuODQ3NTgwMjY5NTA1MiwyLjc2NjIyOTI4MjEwMjQ1NSwxMTkuNTU1ODQzMTc4MjQ4OTIsMi43MTU1MTA0MTc1NzIyMTcsMjk4LjgxMTg2NDQwMzM4MzEsMTIuNTU5NTU3OTA3NTcwODY2LDI1LjE4NTM3MTg0ODM1MTIyNywyODkuNjQ0MjMxMjc3MDEwMjUsMjcwLjc0NDY2NTI4NzM2Niw3Ljg1NDY4NDI0ODczMzQwNiwyMC42Mzk2MzQwNDI5ODg2OTYsMC4wNzM1OTI0Mjg0OTg2MzI5MywzLjk5NDI5NTE1NTc5MzYzMzMsNjc5Ny45NDU0NzM2ODM0MjEsMTE1MTguOTMyNTUxODUwNTgzLDExMzIwLjMwMTM5MTIxNzg1OCwzMTg3Ljk3NDU5NDQ2NzYyODMsOTI5MC41NjkxNDI5Njk1MzgsNjE1Ni42MzU2NDYxNDY5NzcsOTE0MC4zMTk2MzMwMTc5NjMsMTAxNTEuMDMxNTQ1OTY3MzYyLDQuOTUxMzI1NjQ3NDYxODg3LDM0MC40MDgyNjE4MjcwMTU4NSwxNDguMDY1MjYzODk1NzgzMzcsMC4wMDM0OTQxMDIyMzg5NDkxMTY0CisxMixTYXQgNSBGZWIgMTEsODc2LjM2Njk5NTcwNDAzNTgsNzkxLjc0NDQ4ODg2MDA1ODksNC4wOTAxMzY0MTU3OTkyMjU1LDE2MS4xOTMzOTEwMzU4ODc5NCw0LjAyOTExNTIxNDg1MzgyMSw0MTIuOTcwODY2MzI3Mjg5MzQsMTkuMDEwODIyMDUwMzYyNDgsMzcuNzg1MDc5NDkwMzIzNjc1LDQwMC4yMTUyODg0NzM1MjIzLDM3My42NjQ1MDEyMzU3NTk2NCwxMS42ODgwNTY2MzYzMDIxNzksMzEuMTMyMTQ4OTAzMTIxNDI2LDAuMTQ4NjE1MzI0MTYzMjgyNSw2LjE0NjA1NDcwMDY1NjYwOCw5MDkwLjUzNTA2Nzc4NTg3NywxNTI1OC40NzYyNTAxOTEyMzcsMTUxNDEuNzEwMDM1NTA0NjYyLDQyNjUuNjMxMDQ1MDYxNzc2LDEyNDMwLjk3NTMyNDQ5MDQ4Niw4MjMyLjcxNTQ4MjI1MjkyMywxMjIyOS45ODY0ODgyNzAyMzksMTM1ODIuMzQ0MzA5NDcyMzE5LDcuNDc1NjAxNjc1ODEyMTYzLDQ3Mi43Njg0MTczMTczNjI0LDIwMC43NDk4OTgyNjI2NzE1NCwwLjAwNjc4NDk1MzY1ODk2NTU1NworMTMsU3VuIDYgRmViIDExLDExNDcuODYyNTExODEwNDEzMywxMDM5LjExOTgwMjQyMDQ2NCw1LjkzNjQ0ODg3OTEwMDM0ODUsMjExLjgwODgwMzI5MTEyMjY3LDUuODcwNTgwMTc1MDc3MTY0LDU1OC4yOTQxMDg1NjE0MzkxLDI4LjMwMzY1ODQ4NTc2OTk2NSw1NS43MTQ2NTUxNjkxMzY4Niw1NDAuOTA3MTk5MTYxNjM4MSw1MDQuMzc4NjU3MTUwMzY4NywxNy4wODM4ODM4MDUwMTA3Niw0Ni4xNzM2MTgzODcwNTAxLDAuMjgxMjY1NTcyNTYyNzI4MjcsOS4zMDk2NzE2MDg3MDU4MTYsMTE4NDAuNTA4MDA4MTE4NzkyLDE5NjYyLjQyNTg5MDYxNzcwMiwxOTcyNy45NjAyMjIwNTE5NzcsNTU1OS45NjY5MTcyNzg0OTI1LDE2MjAyLjY3MzUwODkxMjEwNywxMDcyMi44NDg5ODk2OTIxNzEsMTU5NDAuNzg3NDI1MDQ3NTc0LDE3NzAzLjQ3MTE4NDA2NzkxNiwxMS4xMDAxOTM1NTYwNjcxOTEsNjQyLjczNTA5NzExMjE3NSwyNjUuNDgzNjk5NjI3MTQ4OTUsMC4wMTIzMjE5NjIxNzc3NTAzODMKKzE0LE1vbiA3IEZlYiAxMSwxNDc2LjIwODAxNzM4OTMxMDMsMTMzOS4yODQ5NTY2MjIyMDA4LDguNTA3NjUxMTA4Nzk3NTc4LDI3My4zOTY1MzY5MDk2Mjc4LDguNDQ4NjI0MTQxMjk3ODA2LDc0NC4wNDU4MDM2OTEwMjI3LDQxLjY2NDI0OTMxNTUzOTg2LDgxLjE4NDE5ODM2NjI2MzIzLDcyMC42NDQ1NzM5MTIwNzgyLDY3MS4wNjk0OTM0NjcwOTEzLDI0LjY2ODg4MDQ2MjE2NDQ2Myw2Ny42OTYyMzgyMDA5MTE2NCwwLjUwNjY3MTAwOTMxOTI1NjMsMTMuOTQ2OTQ4Nzc0NzYzOTkyLDE1MTM5Ljg4NDg3MzI0Njk0MSwyNDg0NC45NTExODcyNTkzMiwyNTIzMy43OTg5MTc4ODQ5NCw3MTE1LjE2OTM3MzI5MTY3NCwyMDczNC4zMzI3MDE3MDYyNywxMzcxMC4zMDU2MzA2NjI3MDIsMjAzOTkuMzQzMTM3NTYyMTk1LDIyNjU1LjAzMDY4NTgzMDc5NiwxNi4yOTU4MTQ3MTUzODgwMzMsODYxLjk4MjI3ODUxMzM4NDEsMzQ1LjE2NTE0NDE5NTI3NzIsMC4wMjEyODIwMDk4MjE3MDYwODMKKzE1LFR1ZSA4IEZlYiAxMSwxODc0LjA1MTE0NTEyMDk2OSwxNzA0LjE1MzQ4MTY2MjM4MDUsMTIuMDc5Nzc3NTU2MTQ5Mjk1LDM0OC41Nzk5MzM1OTg1MjY3NCwxMi4wNDkyODI2MzM3NzI5MjcsOTgyLjY2Mjk0NTk4ODY3ODQsNjAuODA3ODM0NjMxMzMxNzMsMTE3LjI1NDE1MDk3OTIzODQ5LDk1MS4zOTg2OTkzODk1MjI0LDg4NC43MTk5NTc0NDk3NTU2LDM1LjMwNDk1OTkzNjE5NzY0LDk4LjM5MTczMzc2MTc2NjY0LDAuODc3NjIzNDA1NDM2MjY1NywyMC43MTIwOTQxMTM3MDYxMSwxOTEwNy40NzQ5MDE4MDUwMSwzMDk1Ny44NjEwMjY0MDY5MDcsMzE4NTkuMDM3MzI0NDIzNjYsODk4OC4yOTgzNDAzODU5OTQsMjYxOTIuMDg3NzU1Mjg1OTUzLDE3MzAyLjYwNTMxNDExOTYyNCwyNTc2OS4xNDg0NTMxNDMyMzYsMjg2MTguNTkwNDEyNzg2NzYsMjMuNzE5NzY5NTEwMjAwNywxMTQ2LjI2MDY5NjUxODQzNzMsNDQzLjYxOTAzMjgyNjMxODUsMC4wMzUzNDUwODQxMzE3MDAyOTUKKzE2LFdlZCA5IEZlYiAxMSwyMzU2Ljg0ODQxMDExOTIxMiwyMTQ4LjI1MjU3NDAyNDc5NTYsMTcuMDIzNzk1NDg4ODU5NTc3LDQ0MC42OTgzMzA0MTI2OTkzLDE3LjA1OTEyMTQ4MTQ1MDIzNCwxMjkwLjUwMzg0MTIyMDI4OTQsODguMTAxNTM5OTYxNDA5ODMsMTY4LjEwNDcxODUxNzE3MjQsMTI0OC44OTkzODczOTY4NjU0LDExNTkuNzcwNDc1MjE2MDk3Myw1MC4xNjEzMzEzNDUxMDE1NywxNDEuOTU5Mjg5MjQ0NTE3MjcsMS40NzIwNzI0MzAxMDM1NTIyLDMwLjUxOTIzODg0MDE3MzIwNSwyMzg4OC43NTE5OTQ1Nzc2MjIsMzgxOTEuOTk1NDk4MzkyMDIsMzk4NDguMzgwNTQ1OTM4OTMsMTEyNDkuMjUzMDY1MDQ4NTYsMzI3NzkuNDI0MzM5ODI3MzI1LDIxNjMxLjQxMjEyMzExODM2LDMyMjUwLjQ2MjUyOTQ3OTQ0LDM1ODE2LjU0Mzc5MzcwNzU0LDM0LjI3NzYxNjk1MTAwMjc2LDE1MTYuNDE3MzkxNDgyODg5MSw1NjUuNzQ5Mjg3NzE0NzQwMywwLjA1Njg3NjAxNTcxNzM2ODYwNAorMTcsVGh1IDEwIEZlYiAxMSwyOTQyLjYxODc0NzY2NzQxNiwyNjg4LjQ3NDc1Njc2MjM1OSwyMy44MzIzOTgzOTQwMTU1NzcsNTUzLjg5MjkyOTExNzMwMjUsMjMuOTk0NjM3NzgxMDYwNzAzLDE2ODguNzQ4MDkxNzExMTkyMywxMjYuNzc2NTQwNTUwNDYzNDgsMjM5LjM4MjA5MTgxMjI3Njc3LDE2MzMuNDg3MjIwODUxNTUxNywxNTE0LjkwODcwNzYwOTI0NTMsNzAuODA2NDIwMzIxNzk2NjcsMjAzLjQyNjgyMjQyNzI0NTE2LDIuNDAzNDU0ODQyMjY1ODIwNiw0NC42MzE1MjcyMTQ1MTI3NDQsMjk2NTMuMDc5OTU5MzUxODcsNDY3NzYuNjM0MjcyNjU2ODcsNDk0ODYuNzc0Njc5MzUyODQsMTM5NzkuNDQ5MjA0NjMyODYsNDA3MzMuMzAzMDU4MTY0MiwyNjg1MC4wMzM4NjkxMjc0MzcsNDAwNzYuNDk4MTE3NjYxOTg0LDQ0NTA3Ljg3NjIwNjE0MjM1LDQ5LjIwMzM5MDQ2NDgzNzQ1NCwxOTk5LjY0MTM3MTk3MTExMzYsNzE3LjcwMTUyNjUyOTA5NjYsMC4wODkxNjQ0Njc1NjUxODU3NgorMTgsRnJpIDExIEZlYiAxMSwzNjUxLjMwMzk1OTAwNTc1NCwzMzQzLjQ0NTE3NzU4NjI2NzYsMzMuMTUzNjQ3ODY4NDE4OTIsNjkzLjE4Njg1NTE4ODU1OTEsMzMuNTM5NjE5ODg1NTA3MDUsMjIwNC40ODMwMTI1MzY3NTM0LDE4MS4yMDU1NTI4MzkzNDUxNiwzMzguNjQ0OTQ5NzY1NzAyNTYsMjEzMS4xMzY5MTIxNTU2MDIsMTk3NC4wMjMzODExNDI4NDExLDk5LjMyNTUwMzUzOTk1Mzg5LDI4OS41Njg4NTYxNTY0OTE1NiwzLjgzNDkzMTQ0NjE3MTc3Nyw2NC43NzkwMzg2NzMwMzUzNiwzNjU4Ny4wODU2NjQ2NjgzOCw1Njk3Ni4wNzE4MzMzMTY0Myw2MTA4OC4yMjAyNTcyNjg4MjYsMTcyNjguNjA4ODU2NzU0NzUsNTAzMTQuNzgzMDc2MDM3MDEsMzMxMjcuNDQyMTA0MjM5NTg0LDQ5NTA0LjE5NjkzNTk3MDE1NCw1NDk3Ny45MTgwOTk2MTEwMyw3MC4xNjQzNjkxNDg3ODU5OCwyNjMwLjk5MzIyMDYyNTQ5OSw5MDcuMDMyMzYyNTYwMjM0NiwwLjEzNjc0MjUyODk2Mjg1MjEKKzE5LFNhdCAxMiBGZWIgMTEsNDUwMy41Nzk0NDUzNjcwNjksNDEzMi4zNTIyMzAzMjcwNiw0NS44MzMyMDM2NjI4MDc2Miw4NjQuNTUwODgxOTgwNjQ2MSw0Ni41OTI2ODgxMDA4ODA3MiwyODcyLjAxNDIxNjQ5OTk1NDMsMjU3LjI2NjU5OTI2MTEzNTEsNDc1Ljk0MTM5MzU5MzgwOTUsMjc3NC42ODM1NTkxMTY1MDM2LDI1NjcuMzU2MTgwOTAyOTk5MywxMzguNDcxNTQ2NDc5MDAyNTQsNDA5LjQ1MTIyMzQ4OTg5Njg1LDUuOTk4OTk0MDcxNDc5ODkzLDkzLjMxNTE1MDg1Nzk0NzY2LDQ0ODgyLjcxMzU3MDAyMzUyLDY5MDgyLjE1MzUzMjg5MzAzLDc0OTc1LjU0NjM3NDc1MjMzLDIxMjA4LjkzMjgwOTQ3MDg1OCw2MTc5Mi4wMjAxMjIzODUxMiw0MDYzNy40ODY3MjczODI0NSw2MDc5Ny40OTgxNzkwNzI5MSw2NzUxOS43NjA4ODExNjMyOCw5OS4zOTgyNTQ0MzM2ODI0NCwzNDU1LjI4NTU5MTg4Nzk1NzcsMTE0Mi44Nzc3Nzc0NDkyMTA3LDAuMjA1ODA1NTQ5NzcxNTEzODgKKzIwLFN1biAxMyBGZWIgMTEsNTUxOC45NTE1ODY0Nzk0NzcsNTA3My4wODUxNzI0Njc1MTEsNjIuOTY3MTM1MTY1NzE4OTE1LDEwNzQuOTQxMTY1MDM0ODMyLDY0LjMyNzcwMzI4NjE5NDkzLDM3MzQuNDM3Nzc3NDY2NTEsMzYyLjgxOTg4OTU2MDIwMjU3LDY2NC41NTM5NDM0NjE3MTIzLDM2MDUuMjgwODk5MDg3MzQ4LDMzMzIuODg2MDc0MTE1NDI2LDE5MS44NTg0NzEzMDQ5Mjc1LDU3NS4xNDA5OTA0NDcxODA3LDkuMjI0NDA4ODA2MjY1MzM4LDEzMy40MjM4MTMxNzY3NDgxMyw1NDcxOC40NjgzNjg1OTg5NjYsODM0MDEuMjU2Njk3NjU3MzcsOTE0NDguNTkzNzE1ODA1MzksMjU4ODUuOTEwNzQzMzkyOTY4LDc1NDEzLjQ3Nzc1MzYxMDM4LDQ5NTQxLjk1MzQ2MzE0NjE2LDc0MjAwLjk3MTE3MzQ2NjcsODI0MDQuOTcxNjE2NjUwNSwxMzkuODkyODIyNzA0NjU4MTMsNDUyOS4zODgzNzc3NjM4ODcsMTQzNi4xMDY0MjU0MzEwNjg0LDAuMzA0NzY5NDY4MzM2NzAyMjYKKzIxLE1vbiAxNCBGZWIgMTEsNjcxMy4wMjE2MzgyODQ2NjksNjE3OS41NzAyMzgxODM0NTgsODUuOTY3NDU0MDkxMzA3OCwxMzMyLjI4OTAzMzYzNTQ1MjYsODguMjcwMTgyODIwMTQ1NTQsNDg0NS41MDYwNzEwNjU0NzcsNTA4LjMzMTYzNTY3MjIxNDMsOTIxLjk1ODM5NTI3MTA4OTMsNDY3NC4xMTIwNTMzNDI1MjQsNDMxNy45NzY5NDc0MzM4NjYsMjY0LjIwNzg5NTMzMjgxODA1LDgwMi42MjkzNjUwMTM1MTk5LDEzLjk3MzExNDE1ODQ5OTA2OSwxODkuMzkzNjc3Mjg5ODQxOTUsNjYyMzIuODI4NTE3MjMzNTcsMTAwMjM0LjA0ODcwNDE5NDgsMTEwNzM5LjA3Mzc3MjE5NDI0LDMxMzY1LjI2NjI5Nzc3MDE2LDkxMzY5Ljg5NzgxODc3NDMsNTk5NjYuNTM5NzU1NDU1MjU1LDg5OTAyLjM3ODgwMjA2NDk0LDk5ODQyLjAxNTU2NDY2Mzc2LDE5NS42MjA3NTk4NzQ0NDk4Miw1OTI1LjAzNDgyNjQ5MzksMTc5OS40MzUwNDU2MzI3MjIsMC40NDUwMDcwOTI0ODM1NjcKKzIyLFR1ZSAxNSBGZWIgMTEsODA5My45MjY1NDk0MDY0MDcsNzQ1OC4zMzI0NjY3NzM0MjUsMTE2LjY0MjQ2MTg3MzUxMjQ1LDE2NDUuNDE2MDUzMjI2MDk3MSwxMjAuMzkzMjYwODg4NDY0Nyw2MjcxLjgwNzI0ODAyODg4Myw3MDcuNjg2ODEyOTc0NzI3MiwxMjcxLjA1MDkyODY5MDI0NzUsNjA0NC4zNTY0ODA2MjA1NzYsNTU4MS4zMTA3NjIyODMzNTcsMzYxLjY2MjE2NTgyMjk5NzcsMTExMy4wMjYwMTU1NTM4MjQ0LDIwLjg5MDUzNzk1NjY2MzMyMywyNjYuOTc5MjQyNzYyNDQ0NzYsNzk0OTAuMTMwNTM2OTE0MTgsMTE5ODQ2LjU1NzY3MTE4NDEsMTMyOTUyLjY0MDIwMTg2MzEsMzc2NzYuMjAyNjc2OTkwMjcsMTA5NzQ1LjUyODI0NDIzOTAyLDcxOTcwLjAxMDc2Mjk4NzYsMTA3OTg0LjY2MDQzMTU4OTMzLDExOTkyMi45MzA3MTI2MzMsMjcxLjg0NTUxMzYwMDM5NTI0LDc3MzIuMjAwOTc2NjA0MjcxLDIyNDcuNDcyNjA3NDA1NTcxLDAuNjQxODE2ODU3MjQ0NTE2MQorMjMsV2VkIDE2IEZlYiAxMSw5NjU4LjIxNTY5Nzg1Nzc3MSw4OTA0LjU2Mjk1OTUwMDc2NywxNTcuMjkzNjM2MjQ1MjY2MywyMDIzLjg0MTcwNDIzMjkxNTgsMTYzLjIzNzAwNTI0NTg3ODgsODA5NS4yNTczMTk5MzY5NTksOTc5LjI0MjM3OTQ0ODk1MDUsMTc0MS43MDYyODgxODI5NDc0LDc3OTMuMzg5NDI5NjExNjI4LDcxOTUuMTEzMjQ3OTIwNDgyNSw0OTIuMTc4MDc1MTM3MjQwNzQsMTUzNC4wOTQ5ODg1MTAwNjcyLDMwLjg3Mzg4OTE1ODMyNjY1NSwzNzMuODc0MjMzMzQ1NTY0MSw5NDQ0MS42NTA4MTkxNzY0LDE0MjQzMS45MjU5NzY0OTYwNCwxNTgwMDIuODg4MTU5MjA2NjYsNDQ3OTIuMzQ2MzQwMTA5NjgsMTMwNDYyLjY5NTMzMDc1MjI2LDg1NTA4Ljk4NjA4NzQ5OTM5LDEyODM3MS4zNTgwMjkwMjIsMTQyNTYyLjcyNDY1ODk5MDY2LDM3NS41MTc2OTQwNjgxNjkzNiwxMDA2My4xMTc3OTM4OTU1NzIsMjc5Ni42NDg2NDUwNTYwNTE1LDAuOTE1NjkwNjk4NzkzOTg1CisyNCxUaHUgMTcgRmViIDExLDExMzg2Ljc4NDUwNjkyMjk1NywxMDQ5OC4zMzA2MzM4ODgyNzIsMjEwLjgyOTg5NTUzMjUwNDEsMjQ3Ny40NDg2OTc2NTk4ODM3LDIyMC4wNTQ5NDY4MzIzMjQ4NCwxMDQxNS44NzE2NjU2NDE0OSwxMzQ3LjE4MzE4MDI0MjU0MzQsMjM3Mi43MzY5NDY1OTI0MTYsMTAwMTUuMTQ5MTg3MzEwODQ4LDkyNDcuNjU1OTg3ODI0Mzg4LDY2Ni4wMTY2MTAyNDA4NDIyLDIxMDIuMjE0NzQ1MzM0OTc1OCw0NS4xNjQzODUwMDk4OTk3LDUyMC4zMjgzODQ3NDMzNjEzLDExMDg4OC4wNTM5MTU3ODQ0MywxNjgwNjMuOTY1NzQwODAyMywxODU1NDcuOTE1NDQ0MzA2MDQsNTI2MTMuNTI1OTc0OTU2MzM0LDE1MzIyOC44NjgxOTM4OTUzLDEwMDQwMy45MTcyOTA0NzgyLDE1MDc3NC40OTQzMDAwMTIsMTY3NDQxLjUwMDMyNDA5MjYzLDUxNS43ODU4NTkwNzMxMDc5LDEzMDU2Ljk0OTY3MzM1MjU0NSwzNDY0Ljk3MTk0Mjg0ODU0NjQsMS4yOTM5NjI4MzEwNTIyMDYKKzI1LEZyaSAxOCBGZWIgMTEsMTMyNDEuODc4ODQ2NjgyNTM0LDEyMjAxLjk1MzI3ODk1MDI4MSwyODAuODk4Mzk2OTk1NzMxMiwzMDE1Ljk3NTc1MTU5MDM3MSwyOTQuOTkxMzIyOTc2MTQzMzUsMTMzNTQuNzM2MTkxMDQ3Nzg4LDE4NDMuMjU0Mjg5MTM1NjcyNSwzMjE0LjMyNjc2MDU4NjQyNiwxMjgyMi41NDkyMTQwOTQyMzUsMTE4NDUuOTg1NTI5MTA0OTE3LDg5Ni4zNDM4NTI5OTAwMDk1LDI4NjQuODU2NDg5MDk0MTE2LDY1LjQ3MTE2MzMwODE5NTc4LDcxOS45NDU2NTE3ODEyNDMyLDEyODQ1Mi45OTAxNDYwODMzNiwxOTY2NDYuNDMyODQ3MywyMTQ5NDYuMjU1NzE2ODUwNjMsNjA5NTMuMzI0ODkyNzc1NTUsMTc3NTAwLjU5MDM4MTc3MDQ1LDExNjMxNS4wODgzNzg2NTIxMiwxNzQ2NTkuMDYxOTQxMTIxLDE5Mzk2NS4wMzUzOTc4MjQ3NCw3MDQuNjUwNDE3MTcyNzE3NywxNjg4NS4xMjg2ODEzMjQ0MzcsNDI3MS41NjIxMzU5Njc2LDEuODEyOTM3OTM1NDQ5OTUyNAorMjYsU2F0IDE5IEZlYiAxMSwxNTE2Ni40MjIyMTY3ODA3MjYsMTM5NTkuNzQxOTA4MjI0NTQ1LDM3Mi4wMjgxNjIzMjI1MDgzNiwzNjQ4LjMyMzQ4NDQ0MDQzOCwzOTMuMjkxNTIzOTA1NDMwMywxNzA1Ny4wMzIyNDg2ODM5NjUsMjUwOC45NTQ4ODU4NDgzNTg2LDQzMzEuMDA5MDgzMDY4NTU3LDE2MzQ5LjczMTY5NzI5MjgyMiwxNTExOC43ODMwNjk5NzUxNDcsMTE5OS45NTU2ODgwMTY4Mzg2LDM4ODMuNjgzNTEyNjg0MjQ1Nyw5NC4xMzY4ODAzMjk5MjY4Nyw5OTAuNzA5MjcyODM4NDgzMiwxNDY1NzkuNjA5OTc3NTk5MzUsMjI3ODY1LjUxNDkwNjA0MjAyLDI0NTI1Mi4yOTE3MTA2MDg1LDY5NTM4LjI2OTEyNjEyMzY5LDIwMjQ4MS4zMTcwMjMzODgwOCwxMzI3MzkuMjgzMTE4MTUzLDE5OTI0MC45MDY5NzQ0NDkzMiwyMjEyNjIuNDUxODU4NjA5NjgsOTU3Ljc5NDc0Mzk5MjAxODgsMjE3NTcuMjYxMTU2NjM1NzU1LDUyMzUuOTAzNTc1Nzc0MTQ0LDIuNTIwNjE0MzM1MTI1NzAzOAorMjcsU3VuIDIwIEZlYiAxMSwxNzA4Ni43NTI4Njc1ODE5NTIsMTU3MDEuMTEwNDI2NDk2NzU2LDQ4OS43NzgyNzUwMDY5NzM0NCw0MzgxLjY4ODUxOTE0ODE2OSw1MjEuNTQ2MTg0NjMzNDM2MywyMTY5NC44NzQ2ODg5ODc3MiwzMzk4LjI4Nzk2OTg5MzI0LDU4MDUuMjQyNjU0ODY0MTYxLDIwNzUzLjg0ODIyNjc2NzIyMywxOTIxOS4xODk4MDM2MTg4MDcsMTU5OC4xMzI2ODU0OTE5Mzk2LDUyMzguMzc1NDYwNTg1NDM2LDEzNC4zNTc3NzU4NTUwNDEyLDEzNTYuMjg2NTE5ODM1OTQxLDE2NDU1OS44MDg2NjM4OTIxOCwyNjExNTYuNDYyNzk0Mzc4MywyNzUyNjcuNjkwMDkzOTM3OCw3ODAyMy4zODQzMjU4ODc4NSwyMjcxNjYuODc5MTc0OTcxMiwxNDkwMzYuMDI2MDI4NTYsMjIzNTMxLjUxOTkwMTA1MzgsMjQ4MjM1Ljk3ODAzNTI2NTIzLDEyOTUuNjMzMDk4NTg2NDg2MywyNzkyNy40MDQ3MTQyMDk4NCw2Mzc2Ljc5MjA2MTQyNDk3OSwzLjQ4MDEzMjUzODg4ODgzMDcKKzI4LE1vbiAyMSBGZWIgMTEsMTg5MTkuMTI1NzI2OTg2NzkzLDE3MzQ3LjI1OTEzMzkwODIsNjQwLjg3NTU0NDUwNTgwMDUsNTIyMC41ODI3MjU1MjUxNDksNjg3Ljk2NTcxNDU5Mzk3ODksMjc0NjkuNTgzNjM1MDA2MTksNDU4MS4xNjM2NjQ5MTY3NTgsNzc0MS41OTk1MTg2MjE0MTEsMjYyMTUuOTAwMjY0Mjk1MzA2LDI0MzI3LjMyODk4NjE1NjYxNSwyMTE3LjYxODkzNDI1Mjc3NjQsNzAzMS4yNjc4MjEzNzc2NjUsMTkwLjQ3NDMzNTkyMDc0MDg4LDE4NDcuNjcyMDA5MDE5NDMxLDE4MTU5OC43MjA2MTE0MDgwNiwyOTU2OTYuOTU3NTg2ODQ3NiwzMDM2NTIuNjMzNTg0OTYyMSw4NjAyNS4wMTU1MDQxNjU0NCwyNTA0NDEuMTA3NzYzNjM2MjgsMTY0NDg1LjczOTczOTUzMjEsMjQ2NDMyLjIyMTQ4MTg2NzQzLDI3MzY2NS41NTc1ODI4MjYzLDE3NDQuNjE5ODY2MjQ5NjM4NiwzNTcwMC4zMjAxMjM2MjY1NzQsNzcxMC45ODE5MDcwMDIyMDYsNC43NzQwODczMjQ3MzM0NzQKKzI5LFR1ZSAyMiBGZWIgMTEsMjA1NzkuMTUxNTc4MzM3MjUyLDE4ODIwLjQ1NTIyNTM4MDE5Miw4MzMuMzE2NzEzODUwMTIxOCw2MTY1Ljg0MTQwNzYwMTk3Miw5MDIuNjc1OTc2ODkxNTg4NiwzNDYxMi44MDQ4NTQ1NjQwMDUsNjE0Ny41NDUzNTI2NjI0NTksMTAyNzEuNTAzNjE4MzU1ODA4LDMyOTM5Ljk2MTc5OTg3NzA1LDMwNjUyLjA5MzUxMTc1MTIyLDI3OTEuNjk2MDQxMjU5NTM5LDkzOTIuODU2NzEwNjAyNzAyLDI2OC4zNTI1Njg1ODk5NDMzNiwyNTA1LjIzMDc1Mzk2MDYzNSwxOTY5MDUuNjg0NDUxOTQ1ODgsMzMwNDM3LjgyNDY3MjQxNjk2LDMyOTA4MS4xNDA5NTMxNDE4LDkzMTY2LjA1NjYxMTY3NzY2LDI3MTIwNy40Mzk1NjUxNzU4LDE3ODM3MS45NTYxNjA0NzI0MSwyNjY4NjMuNzY1Njk5ODUzNSwyOTYzNTIuNzc2NDE5NTExNiwyMzM4Ljg2Nzc3NzEzNzQzMDUsNDU0MzYuOTg5NTk0NTk1NDUsOTI1MS41ODkwNDkxOTI4OTcsNi41MDk4MzQwMzU5MzA2NgorMzAsV2VkIDIzIEZlYiAxMSwyMTk5Mi4xODg3ODgyMzY2MTcsMjAwNTMuODU0ODM4Mzc3NzEsMTA3Ni4zOTY5NjkyOTAyNDc2LDcyMTMuNzYyMzU2MzkzODIsMTE3OC4wMTYxNDExNTc0MDM2LDQzMzg1LjU5NDk5MTU3OTgsODIxMi4zOTcxODE1Mzc1MTksMTM1NTguMzI2NTgzNzQ2OTM1LDQxMTQ5LjgyODEyMDU4MDI1LDM4NDMxLjUxODA5MTM1MDc3LDM2NjEuMjg1ODQwNzE3NjMyLDEyNDg4LjEzMzQ2MDI3MjE4MiwzNzUuODgwMTUyMTU5NzIxMywzMzgxLjE5NjU4NjQyMTQ2MywyMDk3OTIuMjQ0ODYwODk1ODgsMzY0MTc1LjAyMzMyNDAwNDI2LDM1MDQwNi43NDMwMzEwNjgyNCw5OTEyMy41NTg4NjAwMTU4LDI4ODUyNy4zMDY4NjE4ODE4NywxOTAwNzAuMDU3MjM5NDM3MzYsMjgzOTAyLjU4OTM2MTQ3NzgsMzE1MjcyLjE1NTEwNjgwNTIsMzEyMi4xMjE4NzgzMzYxMDg3LDU3NTU4LjIwMzY2Nzk0MjM1NSwxMTAwNi4zNTUxNzUxMTQ2OCw4LjgyNTg4MzQ3Njc0NzQ2NAorMzEsVGh1IDI0IEZlYiAxMSwyMzEwMi4xOTA0MzIyMDMwMTcsMjA5OTkuNDQ0MjA5NjAxNjcyLDEzODAuNjA5NzI4MzI5MTU1NCw4MzU1LjUzMDMzNjYxOTMxMywxNTI4LjgwNDg4MTI0NzkzODUsNTQwNzQuMTgyODU3NzA3OTEsMTA5MjEuNDIyNzIzODE3NTYsMTc4MDIuNDMxOTY4ODYwMiw1MTA4MS43OTk4MjYyMTI5NTUsNDc5MzAuNjkzOTM1NTYyMTksNDc3NS45NTU5NzU5NTk3MzksMTY1MjMuNTU1MzQ5NjY5NDUyLDUyMy42MDU4NzkxOTA1OTg0LDQ1NDIuNjYxNDY1Mzg4NjAxLDIxOTc1My41MzQyMTY2NzUyLDM5NTY1Ni40MDkwMzU0ODM1LDM2Njc5OC4xNjE5OTUwODE1LDEwMzY2Ni45ODk1NzAyNjQ5NywzMDE3MzEuMjMxMTA2NTkxOSwxOTkxMjEuMTQxMzUxMzk1MzIsMjk2ODkwLjE0MjcwNTEwNzM0LDMyOTY5Mi41MzU1Njk1MjgwNiw0MTUwLjEyNzY1NTg4MjEwNiw3MjU0NC4yOTk2NjE5Mzg1NCwxMjk3NS45MTQ2MjMzMzI3MzYsMTEuODk5MzkzNjM1MTM2NDQxCiszMixGcmkgMjUgRmViIDExLDIzODc2Ljk3ODkyNTY2ODc3LDIxNjMyLjI4NzU4MDcxNjcsMTc1Ny4zNDM4ODI5NDAyMTk4LDk1NzcuMDU2NjEyMzAxNDg1LDE5NzIuNTE5Mjc1MDU5MDE3Miw2Njk4MC42MzYxMzg3NTM0NCwxNDQ1Ny40NTQ0NzU0MzkyOTUsMjMyNDUuNDMwNDQ1Njg1NTMsNjI5NzEuOTg3NTAzNDU1NDM1LDU5NDM1LjcxNjc0MDcyNzE5LDYxOTQuNjE0MzA4MTg0OTQsMjE3NTQuMTkwODQ0MTQ1MzIsNzI1LjU1NDAwNTQzMDQ5MTgsNjA3NS4wNDYzMDI3MzEwMDUsMjI2NTE0LjQ4MzU3ODE2MjY4LDQyMzcwNS45NjEwNjE4MjU2LDM3NzgxNC4wODY5Nzk1NjU1NiwxMDY2NzguNDQyMDkwMzQ0NSwzMTA0NzcuMzg3MzQ5MDgyMDQsMjA1Mjc0LjE2NTAwNjU4MjUsMzA1NDkwLjQ2NjY3MTg1ODYsMzM5MjQwLjk5MTk4NDg3NTEsNTQ5My40MTA1MTcyOTQ5MDksOTA5MjguMTczNjQzNTM2NjgsMTUxNTIuMjE5NzUwNjM4ODk4LDE1Ljk1NDU5OTE4ODU5MzI0MgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BZ2luZ1NFSVJEaXNlYXNlX0ZEX1JlZmVyZW5jZS9BZ2luZ1NFSVJEaXNlYXNlL2h1bWFuMnRvLS9JbmNpZGVuY2VfMi5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FnaW5nU0VJUkRpc2Vhc2VfRkRfUmVmZXJlbmNlL0FnaW5nU0VJUkRpc2Vhc2UvaHVtYW4ydG8tL0luY2lkZW5jZV8yLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMTNkODU5Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BZ2luZ1NFSVJEaXNlYXNlX0ZEX1JlZmVyZW5jZS9BZ2luZ1NFSVJEaXNlYXNlL2h1bWFuMnRvLS9JbmNpZGVuY2VfMi5jc3YKQEAgLTAsMCArMSwzMyBAQAoraXRlcmF0aW9uLHRpbWUsRUctRlJHLUcyMTAwMDEsRUctRlJHLUcyMTAwMDIsRUctRlJHLUcyMTAwMDMsRUctRlJHLUcyMTAwMDQsRUctRlJHLUcyMTAwMDUsRUctTE9FLUcyNDAwMDEsRUctTE9FLUcyNDAwMDIsRUctTE9FLUcyNDAwMDMsRUctTE9FLUcyNDAwMDQsRUctTE9FLUcyNDAwMDUsRUctTE9FLUcyNDAwMDYsRUctTE9FLUcyNDAwMDcsRUctTE9FLUcyNDAwMDgsRUctTE9FLUcyNDAwMDksRUctVVBFLUcyOTAwMDEsRUctVVBFLUcyOTAwMDIsRUctVVBFLUcyOTAwMDMsRUctVVBFLUcyOTAwMDQsRUctVVBFLUcyOTAwMDUsRUctVVBFLUcyOTAwMDYsRUctVVBFLUcyOTAwMDcsRUctVVBFLUcyOTAwMDgsRUctVVJHLUczMDAwMDEsRUctVVJHLUczMDAwMDIsRUctVVJHLUczMDAwMDMsRUctVVJHLUczMDAwMDQKKzEsVHVlIDI1IEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyLFdlZCAyNiBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMyxUaHUgMjcgSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzQsRnJpIDI4IEphbiAxMSwyNC4yNTM5NTg1NTAxOTk3MiwyMS43ODUxNjIyMjAwMjE3NzUsMC4wNzk5NTkwOTQ4MDI2MTg1LDQuNDE3OTY3MjU5ODM0ODI0LDAuMDc3NzIzODk2NzUyMjAwNDYsMTAuNDE2MDkyNDMwNjEwNDg3LDAuMzM4NDkwMzI0MTQ5MDkzNCwwLjY5Njg5MDMyMjM0ODY2NjIsMTAuMTAxNDIzNDY1NTIzMjIyLDkuNDY5OTkzNDg2NDE2ODg4LDAuMjIyODkyNDU2NzAzNTA0MTMsMC41NjIwMjQ1MDM0Nzk2NDY0LDAuMCwwLjEwMjE4MjI0MjExMjU5OTYyLDI1NC42NjE4MDMwNDg0MjUsNDM5LjU3MzQ1MjQ3NzEyODgsNDIzLjg1MjY0Mjk5NDI3NzYzLDExOS4yNzE5NzY3OTM3NTY4NiwzNDcuNjAyMjM4NTQxOTEyODcsMjMwLjY1MDEyNTk5MzQ1NjMsMzQxLjk3Nzk5ODU2ODM5MDcsMzc5Ljc5MzMzOTM1NTg2Mzk2LDAuMTM0NTI2Njc1NjcxNzE2NjcsMTEuNzI1ODk3MDIxNjc3MDQ0LDUuNDAxODEwOTA1MDYzNDUsMC4wCis1LFNhdCAyOSBKYW4gMTEsNTUuOTkyODYyMzEwMzg5NzU0LDUwLjI5MzE5NDU4MjgzNDg2LDAuMTg0ODU3MTk3Nzk4NTEwMTgsMTAuMjA3MDA1NDA1ODQxMjk1LDAuMTc5Njg5ODk1ODU4NDM3MSwyNC4wNzA4MTk4NDIwODExODIsMC43ODI2MTUxNDQwMjU3NjA1LDEuNjExMjU5MzQ2NjczOTU2OSwyMy4zNDM1NDE3MTcwMzE4NDQsMjEuODg0Mjk2MjYwNDg0NzAzLDAuNTE1MzM1MzQ4NjU5NzY5OSwxLjI5OTQ0NDk2NTMyOTcxMjIsMC4wLDAuMjM2MjUyOTI3Mzk0ODU2MSw1ODcuODMxNDkzODkyNjg4NywxMDE0LjkzNDU2Mzg1NTA4NjUsOTc4LjM3MDc1MDk0NzQxMSwyNzUuMzEyOTczNDQ5MTI0OTcsODAyLjM2MTE4MjY4NTM3MzcsNTMyLjQwNjUyMzgxNTMzMzMsNzg5LjM3ODkzNDA1ODc3OTksODc2LjY2Njk3NDcwMjUwMjYsMC4zMTEwMzA4NTU5OTgxOTIxNCwyNy4wOTg0MjU4MzgyNzI4MywxMi40ODA4OTkwMDMxMTY5NTYsMC4wCis2LFN1biAzMCBKYW4gMTEsOTEuMjU4MzA2MDQ4MDYwNDYsODIuMDQxNzk1OTYwMzcyMzUsMC4zMTc5OTc5OTQyOTM1MjIxLDE2LjY2MTU0NTY0MzUzNDQ2LDAuMzA5NzAyNjc2ODE4MDg1MTcsMzkuNzUzNjA1NDc2ODUxMjMsMS4zNjUzNTYzOTY4MDUzNjA2LDIuNzk2MTc5MjM1OTc1MjM1MywzOC41NDkyMzQ5NTU1MTMxMzYsMzYuMTE3MjgxNTcxMzY3ODcsMC44ODk3MjYyNDE3NTQ5ODE2LDIuMjYyMzQxNTQyNDg2NTE2MywwLjAwMTYxNTU2NTc1ODczNjg5NjcsMC40MTY2Nzk4OTMwMjczOTUxLDk1NS42NjEwNjE5OTQzNjAxLDE2NDMuMDA1NjA3MDMyNDgyLDE1OTAuNzM2MzMxOTE2MzUwOCw0NDcuNjk3Nzg5NTY4MjM1NSwxMzA0Ljc0NTc4MDkzODUwMTQsODY1LjU0MzkzMTgyNjM1NjgsMTI4My42MzY0MDUxOTkxMjYsMTQyNS41Nzg0NzY4Njc1MDUzLDAuNTQxNzEyODQ0Mjg5MzEwNyw0NC44NTgxMjgwMjQxNzgwOSwyMC40MjY4MjU4NDQwMDgzNTIsOC4zMjE1MjkzNTIyODkyMzdFLTUKKzcsTW9uIDMxIEphbiAxMSwxMjkuMzc4NjA3MzAyMzM0ODcsMTE2LjQ3ODM2NTAwNzExMzU0LDAuNDg4OTk0MzQ3OTYzODk5NTcsMjMuNjc2OTgyMDA5NzgyMzc4LDAuNDc3NTMxMDUzOTA1NTQ4ODQsNTcuNTQ0MjA2NDM1MjM3MTUsMi4xNDEwMjI5MjM2OTE5NzYsNC4zNTI4NjE4OTY0MzQxOTksNTUuNzkzNDkxNzk3MzkzNjEsNTIuMjIzNjE5MDAyNjA1OTUsMS4zNzUxNjIzMDMxNDg1ODExLDMuNTM3NTQzNjUwNDMyMzc2MywwLjAwNjAwMDc1NTQ1MDkxOTc2MjQsMC42NjMwODAyMDMwMTQ4NTU1LDEzNDkuNDU2MDQ2NDE3ODY0OSwyMzAzLjgzNjY4MTgzMzQ1NCwyMjQ2LjU4OTY5ODUyOTY5Nyw2MzIuNDMxMDIyNTA1NTEzNSwxODQzLjEwNzcyOTM3NDU2NSwxMjIyLjE4MDEzMDIzMzQwOSwxODEzLjI5MTU5MjA0NjUxMiwyMDEzLjgwMTk0NDkzMTAzMzQsMC44NDc1MDUyNTA1MzI4NSw2NS4xNjg4NTgxODIxNDUzLDI5LjE0OTM5ODQxMjAyOTIyNSwzLjA5MDg3NzY4Nzk1OTAxMDZFLTQKKzgsVHVlIDEgRmViIDExLDE3MS4wOTgzMTg3ODkyMzAyLDE1NC4zMjI5NTM1NTU3NDEzNSwwLjcxNDY1MDkxMjQwNTIxMDgsMzEuNDAzNzk0NTg2MzE0NjM1LDAuNzAwMjYxNzY1Mjg5MjE3NCw3OC4xODg3NDAxMDEyNDk1MiwzLjIwNDQ1NDEwMTc1NjQsNi40NTcxNjQ1OTE0MTY3NDIsNzUuNzk2MDg5NTAzMzUwMjcsNzAuODYwNDA4Mjc2Mzc1ODksMi4wMjI0NzUyNzIxNjgxMjQsNS4yNzYyNDU2NTA3MjE0ODgsMC4wMTUyOTczNjYwNjkyMTA2NTYsMS4wMDk4NTYyNzExNTM4NTksMTc3NS42MzI2OTg5OTUxNjI2LDMwMDMuNDI1NDE5MDU3MTE4NywyOTU2Ljc1Mzc2NDYzMTYyMzcsODMyLjYxNjU4MDYzODY3MTcsMjQyNi40ODU3MzQwNzQ2NDE2LDE2MDguMTE3OTY0ODE4NzMyOCwyMzg3LjIzOTExOTYwOTY5NzQsMjY1MS4yMTU0MzYzODExNTI0LDEuMjY1MDAxODE2MDM0OTQ2NSw4OC45NjgzNTI3NTUwMzU2OCwzOC44NzQ4MTg2NDg1MDA2MTQsNy42NDI5NTk1NTEyOTQzMjhFLTQKKzksV2VkIDIgRmViIDExLDIxOC4wMDY0Mzc0NTA5MTQ4LDE5Ny4wNjYzNTg3ODQzOTg4NiwxLjAyMDMzODU3Mzc3MzAxNjIsNDAuMTQ3NjMxMTYwMDU3NjMsMS4wMDM3ODM2MTg1OTI3NzQyLDEwMi45NTMzODAxNzY5NzEzOCw0LjcwMTUzNTIxNDg4OTUxLDkuMzc3NDc4NjY0Nzg4MjQyLDk5Ljc3ODkwMzcyMzgzMzg1LDkzLjE0OTMxMTYzMjc5MjQ4LDIuOTA4ODY0NTA5NjkzMTg4NCw3LjcxMDI2MjA5OTYzODYzMywwLjAzMzA0NzQ3Mjk1NjQ1NzU1LDEuNTEwNDk1NDkzMDc0MTExLDIyNDkuMzU1ODU5OTk0MzU2LDM3NjEuNTcxMzk0NDYyNDIzLDM3NDYuNjcyODcxNjk2MjcsMTA1NS40OTcxMDQ5MjczNzEzLDMwNzUuOTc2MDA2OTkzNjA2NSwyMDM3LjA4MTM0NzUzOTM4NzcsMzAyNi4yMzc0OTY3MDMwNjM3LDMzNjAuODcyNjI5NDE2MzEyNSwxLjg1MDQxNjIxNDIyMzg4MDMsMTE3LjgyNTAwNDY0MDk4NjI1LDUwLjAzMzM2OTc2MjA0NTU3LDAuMDAxNTgwOTk1NjI1Mzk0MTE1MgorMTAsVGh1IDMgRmViIDExLDI3Mi4zMTg4MDc4MjU0ODI3LDI0Ni43ODAwODA0Njk1NTg5LDEuNDQxNzIxNDg2OTE3MzcyLDUwLjMzNTI5NzE4MjQ0MjcxNiwxLjQyNDY2NzAxNTI2MDYwNSwxMzMuNjA4NzQ0NDA2NTI5MTgsNi44NDI2MjkxODEzNTUwMzIsMTMuNDk2OTIzMDMzMDY5MDkzLDEyOS40NDk3MjM1ODE5MjE2LDEyMC42NTkxNzM2MDgzMTE5NSw0LjE0Mzc0NDk4NTA1NzQxNywxMS4xNzI0ODc2NTkyODU1NzQsMC4wNjQ4MTI4NTgxMjQ4MTA1NywyLjI0MzE3OTEzNDc2NTMzNTQsMjc5Mi4wNDgyNTYyNDA2MTksNDYwNy4xMDY2NjUzMjEwNzMsNDY1Mi4yODY0OTA2MTE0NDEsMTMxMS4zMDA1MTU3ODIyMDcsMzgyMS4zNjg4Nzk5NzcyNTcsMjUyOC40NTg4MDY5NzYxOTYsMzc1OS42MDA3MDQ0ODI0MTQ2LDQxNzUuMzI4NDg3MDMwNDI2LDIuNjg0NjU0MDQxNDY5MjEyLDE1My45Mzg2NTMwMjI0NzM1NSw2My4yMjQyNjgwNDg5NTkwNywwLjAwMjk1NDI2NTM5MTc1ODE4NDIKKzExLEZyaSA0IEZlYiAxMSwzMzYuODAwNjQyNjg2MDg0MjUsMzA2LjA0OTk1OTMxNzMxMjY0LDIuMDI3NDcyODk2NjgzNzczLDYyLjUwODI4MDYwNjQ2NDQsMi4wMTMxMTEyMTQ3NzI4MTc2LDE3Mi40OTE0Nzk5ODczMDUxLDkuOTIzMzc2MDQ1MjQ5NjI3LDE5LjM0Nzc2MTI1NzA2MDA0NiwxNjcuMDYwMzc5OTE3NTcyNCwxNTUuNDU4Mzg5MTY1ODE2NzgsNS44Nzc4OTM3NDQ2ODY5ODM0LDE2LjEyODU4MTM5OTA1NDY4LDAuMTE5MTMwODk2Mzg3NDU2NSwzLjMxOTQzNzg5MzA4MTg3NSwzNDMwLjQ0MDc3MTkwMzY1NzYsNTU3Ni4wMzEwODk5NTMxNDUsNTcxOC40Njg3MTQyMzU2MDQsMTYxMi44MDg5MjAzNjk2MDE4LDQ2OTkuODg5NzkyNTk2MzUyLDMxMDYuNDQzMTQwMTMyMDEsNDYyMy45NjAzNTc1MjYxNDYsNTEzNS4yNjQzODg1Mjc5NTYsMy44ODExNzk0NjY0NTE0MzU2LDIwMC4yMzQwNDk3NjA1MzA5OCw3OS4yMTQ2OTE1NjU1MTIyLDAuMDA1MTY2NTIwMTQ4MzA5Njk0CisxMixTYXQgNSBGZWIgMTEsNDE0LjczMjg3NTc1NjA1Njk2LDM3Ny45NDY4OTYzNTE3NDk2LDIuODQyOTEyOTU5MjIwNzc2Miw3Ny4zMjg5NTM4Mjc5MzA0OSwyLjgzNjg5ODg1Nzk1MTU0NzcsMjIyLjYxNDcyNzY3ODI5MTY0LDE0LjM1MjY3MzU4ODQwNDY3NywyNy42NTc1NzY3MzE1NzQ3ODUsMjE1LjUxMTYwMTEwMTEyNjk4LDIwMC4yMTEwMDQ4MjE3MjcsOC4zMTU3MzkwMjAwMTY2NDUsMjMuMjE5NTM1NzM4NjQ3OTIsMC4yMDg4MTY3MjM1Njg5NDk2Nyw0Ljg5NTgxMDMzMTUwODM5NCw0MTk2LjEyMTMzODAyOTMwMiw2NzEwLjc5Njg0NjYyNjE2NTUsNjk5OC4yOTQwMjQ0NzA2MjMsMTk3NS4xNTg1ODc1NTU3ODQsNTc1NS42MTI4NzA0NDMyNjUsMzc5OS42MjMzNzM1ODAzNDQsNTY2Mi42ODk2NjYxNTk3NTc1LDYyODguODQ4MTY0ODI0MzY4LDUuNTk2NTk5ODE4NjMzNTczLDI2MC41MTYzMTU0MjUxMTQ2Nyw5OC45NTU2NTgzMjI3NTkzMywwLjAwODYxOTUwMzg3NzQzMDg1NgorMTMsU3VuIDYgRmViIDExLDUwOS44NjE3NTY3NTc5NzQxNSw0NjUuOTc4NjQ5Nzc5ODgxNSwzLjk3NDUzMjc2ODgxMTU1NCw5NS41OTE2NzUwNTg2OTU0NywzLjk4NjM1MTE3NDYwOTEwNzYsMjg3LjgxMjgxMTg3NDkyLDIwLjY4ODQzMjkwOTcxNjY4LDM5LjQwNzY3NjA2OTU4MjYxLDI3OC40OTAxMTkwNDYyNDYyNiwyNTguMzAzMjM0MzA4NDc4NSwxMS43MzA4MzYwODE5MzA0NDUsMzMuMzE1ODQ2MDcwNjk5OTU1LDAuMzUyNjk5NzA1NzM0NjY5NDcsNy4xODg4NzE1MjU2MzQxNTUsNTEyNC45NDY1MTUxODc0ODksODA1OS44NDI0NjAxMDEyNzksODU1Mi4wNjMyNTI1OTMxODMsMjQxNS41Njc5NTk5Nzk1MDc2LDcwMzguNjYzOTc2OTk3MTg1LDQ2NDAuNDUzNjE2MTUyODk5NSw2OTI1LjEyMDIxNDIyNTM0OSw3NjkwLjg2MzkzODQ5NTMwMyw4LjA0NDE3ODAxNjc2MTA4MiwzMzkuNjczMjE4MDMzMzYyNTYsMTIzLjYwNTUxNDkyOTMxOTMxLDAuMDEzODc1MTA4MjE2NzA3MDE2CisxNCxNb24gNyBGZWIgMTEsNjI2LjI4NjkxMTM1MTQ4OTIsNTczLjk4MDI3NDEwNjg3MjYsNS41MzU1Nzk2OTY0NzE3MTYsMTE4LjIzNDYyNjM4NDg4MzksNS41ODA1MTI5NTYzOTkxMDMsMzcyLjkxNzk0NTEwNjM5MTY0LDI5LjY4MzQ0ODU3MzE0MTA5LDU1LjkwNjk5ODU0NjQ1NjQ0LDM2MC42MzUzOTY0NDg4NzM3LDMzMy45OTgyNjk3ODEzMTEzLDE2LjQ4NTMxNjYyNjQ1MTk1NCw0Ny41ODY2MjU5MDQyOTYwOCwwLjU3Nzk3MDkzNDA1MDI0MjEsMTAuNDk0NzM4MTcxMzU3MzIxLDYyNTUuODYwOTE2NzY3LDk2NzYuODUwOTk4NzcxNjk3LDEwNDQ1LjMyMjc0MTcwNzIzOCwyOTUyLjc3MzkyNjQ5MDEzOCw4NjAzLjU3Mjg1MzA0MDQ5NCw1NjY0LjE4NzQ5NzI4MTQzMiw4NDY0LjkyMTMwMDg2NTQ3OSw5NDAwLjkxMTgwNDA1OTc2LDExLjUxMTE0MzA5MzMyODA3OCw0NDMuOTI0NzY3NDQwOTIzNywxNTQuNTU2NDEyNzg1MzEzNTcsMC4wMjE3MDgxMTAzMjY1ODkxMzcKKzE1LFR1ZSA4IEZlYiAxMSw3NjguMjQ2Nzc5MzU0MTY2Nyw3MDUuOTAzNDgxODAzMjk1NCw3LjY3MzA0ODcwMzE3MjcxLDE0Ni4zNDk4MzQzMTk3NzkzNSw3Ljc3NDk5MjcyNjgwNzIzNiw0ODMuOTc0NjE0NDc4OTQwMyw0Mi4zNDUyNjAxODU3MTgyNSw3OC44ODcyMDk1MjUzNzkyOSw0NjcuNzQwNzExMTk1MzE1Myw0MzIuNjI0MzU3MzgyNDE4NTcsMjMuMDU0NzI4ODEyMTEwNjc4LDY3LjU4OTI5OTg1OTcyMzEsMC45MjM0MDQxOTQ0NzI3Mjc5LDE1LjIxNDgxNzM5OTM4NzYxMSw3NjI4LjcyMTAzNTUwMTIyNywxMTYxOS4zNTU3MDExMzcxODksMTI3NDUuMTkxMzk1NjI3OTc5LDM2MDUuOTc4MDIzNjA1NTYxLDEwNTA2LjE5Njc5MTQwNTM2Niw2OTA2LjkxMzU0ODk4NTUzMywxMDMzNy4wNzMyNTE4MjY2MzIsMTE0ODAuMDQ1ODc0Njg5MTIsMTYuMzgxMjUwNTg5MzgyNTE0LDU4MS4xMzExMDUzMTI5NDYsMTkzLjQ2MTMzOTgyNDAxNzEzLDAuMDMzMTc1NjIwOTI4MjY5NDM2CisxNixXZWQgOSBGZWIgMTEsOTM5Ljc1NzA2MDQ0MDc4NTQsODY1LjQ2MTc2MzI2OTYwMjQsMTAuNTc2NTE5NjA5NjM2NDM1LDE4MS4xODg4NzMwOTk2OTkzMiwxMC43NzIwMTI2OTI2Mzg4NTgsNjI4LjUwMDQ5NzMwNjIxNyw2MC4wMTUxNTA4NjE1MjgwMTQsMTEwLjYyNjQ0MTQ2NDgyNjQ2LDYwNi45OTYwMzk3NjcxNjM0LDU2MC44MDQwNDczNDIxNDg1LDMyLjA2MDEyOTE0MDExOTczNCw5NS4zODczMjMzNjUxODM2OCwxLjQ0MzgwNDIxMTYwNTQ4MjMsMjEuODkwMTQ5NTIwMzgwMTM4LDkyODAuNzAxMTM3MzYxODQsMTM5NDYuMzMxNzUzMTE4Mjg0LDE1NTE0LjI3NDAwMDE1Mzc3MSw0MzkzLjA5MjExMzk0MjIxOSwxMjc5OC42MDM2NDA4NDEwNzYsODQwMi4zMDk3NjU0NzUwMDcsMTI1OTIuODMxNzY5MDgwOTQyLDEzOTg1LjE4MTEyOTE3MzQsMjMuMTY0NTIxOTkwMzI5MTgsNzYxLjE3NDcwNDI0OTk4NjUsMjQyLjI1OTQxMjk2NDUzNDg3LDAuMDQ5NzA5NTQ3MjY5MjI5MQorMTcsVGh1IDEwIEZlYiAxMSwxMTQ0LjA1NTIwODgwMDI1OCwxMDU1LjU4NTk5NTUyOTc5MiwxNC40ODkzMTU4NDcyMTk5NDksMjI0LjE2MDY5NzA5OTM0NDczLDE0LjgzMzMwNTU5MTk2ODU4Nyw4MTUuODAyMzk2NTUxMzA5NCw4NC40NzI2MTkxODA2NTY5OCwxNTQuMTEwNTkwOTM4NzU2NTYsNzg3LjI3OTI5MDEyNjY4NzksNzI2LjczMjQwMDg0MDk4MTUsNDQuMzA5NjEzOTg4MDQxMDMsMTMzLjcwNDk5OTQ5Njk2MTQ4LDIuMjE2MTQ0ODkyNTcyNjc5LDMxLjI0NzI4NDU4Njk2MTE5LDExMjQwLjg0ODk1NjQyMjA2NCwxNjcxNC4zNjQ4MjQ5MDgxMywxODgwMS40MTk2Mzg1MzQ2Miw1MzI4LjA2NjQwMjQ1OTI5MSwxNTUyMS4yODM1Mjg5ODUzOTIsMTAxNzYuNzI2MjM5MzE2NzY0LDE1MjcyLjA2MjAwOTM4ODg0MSwxNjk2MC41NzkxNjQ2MjQ1OTMsMzIuNTM2NTM5MDA2MDgzODMsOTk2LjQzMzk1Nzc2NTgyNTgsMzAzLjE5NTczMTIyNTMwMTI0LDAuMDczMjM5OTIzMjQ0NDc3MgorMTgsRnJpIDExIEZlYiAxMSwxMzgyLjgxMzA3OTYzMDEwNjYsMTI3Ny42NTU0Mjg5NDI0NTk2LDE5LjcyMjQ0Nzk5MDU4OTEyLDI3Ni44MTYzMDQyMTQ2MjAzLDIwLjI5NjU1MTQ4MjE5ODk5NiwxMDU3LjM1MjgwNDA1NjcxODUsMTE4LjA3Mjk2Njg4OTQ0NTMzLDIxMy4yNDI0NDMzMzA3MTM4LDEwMTkuNDk4ODM2OTE2NTMzMiw5NDAuNTA5Njg5NjUxNjY0NCw2MC44NTE3NTQyOTg1MjUzOSwxODYuMTMwMTYwODM5OTIzMiwzLjM0Nzk5OTQ2MDM0OTk5Miw0NC4yNTkzMTM2MDg1MjAxMjQsMTM1MjIuNDY2MDM1OTMwMjE4LDE5OTcxLjk0NDgwNjI5MTEyNSwyMjYyOC43NjY0NDgzNjU0MjMsNjQxNy4xMzU2NjE3MTI0ODcsMTg2OTIuMjE0NjQ5NDkyNTIyLDEyMjQyLjMwMDc2MzAzMDI2MiwxODM5Mi40NzQzNjAwNzk4OCwyMDQyNS44OTMzMjM4NjkyNyw0NS4zOTAxNTk3NTI2MTQ0NiwxMzAyLjM2MzY1OTk2NDIxODIsMzc4LjgyOTYxNDc3NDA0MjYsMC4xMDYzNTg3NTMyNTE0MTM0NgorMTksU2F0IDEyIEZlYiAxMSwxNjU1LjExNTExMzk3OTY0MjcsMTUzMC41MDU5MjIzMDk5NzMxLDI2LjY3MTc0MDQ1MzUyNDEyNiwzNDAuODEyOTE4MDUwNTAyODQsMjcuNTk2MDgyODY0ODk1ODQ1LDEzNjcuMjI3NzQ4OTUzMTE1LDE2My45MjcxOTE1Mzc2MDMyNSwyOTMuMTEwMjg2ODAxOTUwNCwxMzE2Ljk4NDMzNjg5NTIyNjUsMTIxNC41MzAyNDc2OTEzMTQ4LDgzLjA0MzY0NTMwNDQ5MzUsMjU3LjM3NzQxMjUxMzc0OTczLDQuOTg5MDQ2NTI1NTk2MTg5LDYyLjIyNjUwOTk0NzY5NDAyLDE2MTEzLjM1MDg3MDIwNjc4NSwyMzc1MS40NzgzOTMwOTI2OTMsMjY5NzUuMTM4NDAxMTg0MjYsNzY1NC4wMDMxMTUwNDE2MDksMjIyOTIuODQ0OTY1MzM5MzksMTQ1ODguMTM5MjQyMDQ3ODAyLDIxOTM1LjgyMTk2MjA4MzAyNCwyNDM2MC44NDAzMzAxODU4Myw2Mi45MDMxMTI3NDE4MjMyOSwxNjk4LjE5NDI0MDAzNzE0NzQsNDcyLjAyMTkzNjQ5NzE3MjUsMC4xNTI1MzYyMDY4NTE1NjA4OAorMjAsU3VuIDEzIEZlYiAxMSwxOTU2LjI3NzAzODEzMzczNjQsMTgwOS4yOTY4NjE1OTM5ODc0LDM1LjgzODM5NjcxNDI3MDE5Niw0MTcuODQ4NjQ0NDgxNTA3NTYsMzcuMjg4NTkxMTc0Mzk4MjEsMTc2Mi41OTk1NDU0OTUxMTgzLDIyNi4xMzUyMTM1ODg4NjYwNCw0MDAuMzI5MDE4MDU1NDM0NjMsMTY5NS45MTQyODMyNzc2NDM2LDE1NjMuOTIzNzIzNTI3MzQ1NiwxMTIuNjM2NDc1NzM0MDAwNTMsMzUzLjYyNjgwODc1Mzc5ODEsNy4zNDY2NzQ1NjY0OTA2MDYsODYuODgyMDYyMjc4NDg3NzUsMTg5NjQuNzA5NjU4NjAzMTgsMjgwNTguODQ4NDkxMzU5Mjc3LDMxNzU3LjE4MDg4ODk5MzU4Miw5MDE0LjM3MTA3MjAzMDEyLDI2MjUyLjE4NzgyOTA0ODQ5NiwxNzE3MC4yODM3ODE1MTI5NTMsMjU4MzIuMjM4OTAxODA3NjcsMjg2ODcuODA4MzQzNzAzODM3LDg2LjYyNTYzOTk5MDY2MzI1LDIyMDcuNzU1ODUxMTM3NDcyNyw1ODUuODg5MDEzMzI1MjM2OSwwLjIxNjQwMzY2MTI3NDIwNjgyCisyMSxNb24gMTQgRmViIDExLDIyNzYuNzA5MzQyODYyNjA4LDIxMDQuNDQ4NTA4NzAzMzE4LDQ3Ljg1Mjk5MDA1NzM4NDA1NSw1MDkuNTU3OTQyNTEwMDI5MjUsNTAuMDg0NTE1MzYwNjQyMTQsMjI2NC4yNjg2MDE0NDM1NzUsMzEwLjA4NTU3NjQ2NDk4NDQsNTQzLjQ2Nzc1MDk2NTI2MDQsMjE3NS43NTcyMjI0NzkyNTQzLDIwMDcuMDM3OTI0NTgyNzM0LDE1MS44ODE1NzE3NjA3MDg5NCw0ODIuOTU1MTI1ODM5NTI3LDEwLjcwNzAxNjM3NjQ1Nzg1NSwxMjAuNTI5NjA5MjE4NTUyOTgsMjE5ODAuNzgyNjA1NTIzNzc1LDMyODYwLjg4NzQ3NTczNzAxLDM2ODExLjc2NTY4NTQyMzY1LDEwNDUwLjg2MDIyNjY3OTk1NywzMDQzMi4wNzE2ODk4OTQ0MTIsMTk5MDIuMzEzMTgyMzg2MDY0LDI5OTQ1LjcxMjczODgwMzg3LDMzMjU1LjcyNjgxODgzMzY3LDExOC41OTMyMTA0MjA3MDAzNCwyODYwLjQyNDkwODQwMDgyNiw3MjMuNzA3OTg4MjM0NDY0NywwLjMwNDEyMTIwNDIyNDU4MjE2CisyMixUdWUgMTUgRmViIDExLDI2MDEuMTk2MTkwMjU2NDI3NiwyNDAxLjAyNTExNzYyMTI3NzMsNjMuNTAyNDAxODE1MzU3NjksNjE3LjM1OTk2MDAwMzk1MjEsNjYuODg1NjQwODI5NDg4NzUsMjg5Ny4yMDYwOTY1MDQ0MzM0LDQyMi44MzcwMTYwOTI1NjE1LDczMy41NzgwNjg1NjAyMzY5LDI3NzkuNjg4Mzc2MDY2NDA4LDI1NjUuOTQzNTE3NzM0NTg0NSwyMDMuNjU5NjIzNzU4MDU3Myw2NTUuODc4OTcyMzY2Njk4NSwxNS40NjMxNDA0ODU3MTA0MDYsMTY2LjIyMDY5NjA0MTM4MzUyLDI1MDEyLjc4NjQ3OTM3MzEzNSwzODA3Mi4wNjU5MzI3MzA3OSw0MTg4NS44Njk0Mjg4OTIxMiwxMTg5MC4xNDY5MjYzMDI1OTQsMzQ2MTguODcxODMxMTM1NzQsMjI2NDkuODI0MzE4MTYyODgsMzQwNjUuOTM5Mzc1OTY1MDgsMzc4MzEuMDI2ODMxMDYwMzY0LDE2MS40NzAyOTU1MTA1MDc5OCwzNjkyLjE3ODMyNDIwMjI5MjUsODg4Ljc1ODA4NDUwNTg1NzUsMC40MjM4NTA2NDQwMDA0MjcyNworMjMsV2VkIDE2IEZlYiAxMSwyOTA5LjEwMTk2OTI4MzY3NDQsMjY3OS4wNjk2MzY3Mjk2NzY0LDgzLjc1ODQ2OTE2MjUyNjk0LDc0Mi4yNTcyOTk0NDIwNDg5LDg4LjgyOTEyMDYxMjkwNjkyLDM2OTEuMDYzMzI2ODAyNDIxNyw1NzMuNTk5NDQyODI3NzU0Nyw5ODQuODM1Mzg4NzU5ODQ2MSwzNTM0LjkyMzc2NTQ4MzAzNCwzMjY2LjkyOTYxNzI2MzY1NDYsMjcxLjYzNTAwNTU1OTcxODU0LDg4Ni4wMzAyMzIxNzA3MTU3LDIyLjE1MjYyNDM5MjQ5MzI2LDIyNy45ODE3OTE0ODgyMTQxOCwyNzg2Mi4wMTcyMjcwNjIyLDQzNTQzLjAwNjAxOTg1NDEsNDY2NDIuMjUwMTIwNzU1MDgsMTMyMzQuNzY0MTAyNTk2NDg2LDM4NTI4LjgzNTQwMzEwNjQxLDI1MjMzLjE3MTQ4NTQ4ODI4NSwzNzkxMy41NjYxNDcyMjkzMTQsNDIxMDMuNDcxODE5ODkyNTMsMjE4LjczMjI0ODQwMzk4NDc2LDQ3NDYuNzIyNjA4NzM2Njk2LDEwODQuMDg1MjcwOTgxNzAxNiwwLjU4NjM1ODQ5Mzg4Mzc3MworMjQsVGh1IDE3IEZlYiAxMSwzMTc2LjAxNDE0ODkyNzk1OSwyOTE1LjM2OTI0OTgzNzk1MzIsMTA5LjgwNTkyMTU4OTYyODM3LDg4NC41OTMzNTc4Njc1OTgxLDExNy4zMzc1NTg5MDMzNTA0Nyw0NjgwLjU4MjI4ODU1MzY1NDUsNzc0LjMzMzQyMDI2NDI4NjQsMTMxNS4zMDA5NjgwNTA5NjQsNDQ3Mi44ODg0NjkyOTA3Nzk1LDQxNDAuOTQ0NTY1MjI1MTcyNSwzNjAuNDM1MzUxODI3NjAwNCwxMTkwLjk4MzcwMjAxNjE0OSwzMS41MDczNDg0MDI0MDE0NzYsMzExLjEwMTk2MTk1Nzc3MjA2LDMwMjk2LjczODU4OTI3NTUwNSw0OTA1NC44Mzg1OTY4MjIwOCw1MDY4OC44MDY0OTgyNzUzMiwxNDM3MS44NTYzNjI4NzcwOTIsNDE4MzMuNjQyNjYyODgzNjYsMjc0NDIuNjU2MTM4OTEyNjksNDExNjUuMzY4MTk1NDMwMTMsNDU3MTQuMTI1MzE3NzIxMjcsMjk0Ljg5MzM2NTkxODIzNjk1LDYwNzYuNjM3NjY3MjAyODcsMTMxMi4xODY0ODk2Mjc5ODMsMC44MDU3NzYxNDA4NjEwOTYKKzI1LEZyaSAxOCBGZWIgMTEsMzM3Ny4wNDA2Mjc1NDIwNTQ2LDMwODYuODA5NDQwNjI5MTE5MywxNDMuMDY1NDIxODUxNzQ0NTYsMTA0My43OTIwODA1MTg2MTU0LDE1NC4xNzM4MzgwMTIzNjk1Miw1OTA1LjgxMjI4MTY1ODc2MywxMDQwLjQ4NzI4MzM3OTM5MTgsMTc0Ny44MDE1MzgzMDg4MjIsNTYyOS4xMDE3MzA1NDA3ODUsNTIyMy45MTQ5OTA2OTgyODcsNDc1Ljg1MzI2NTExMDgyOTUsMTU5My4yNTI0Nzg1NDEzNTYxLDQ0LjUxOTA4NTExNzc1NzQsNDIyLjQ5MzM3Nzg1MDg5NzMsMzIwODQuNTExNjA2NzYxMTk2LDU0MzI0LjI5OTAzMjQ5MDE0LDUzNjM0LjI3MzQ5NzgwOTA3NCwxNTE4OS41OTMzNzc0NTgzNjgsNDQyMDguMjE1MDk1MTY0MDIsMjkwNjcuNjkxNjIxMTAxODg3LDQzNTAxLjMzODQ4NDg3MDA2LDQ4MzA3LjY1MTEyNDIxMTE0LDM5NS43OTAwNjk5MDg3OTI2NSw3NzQ0LjQzMTgyMTQ5Njc3MjUsMTU3NC42MjQ0OTI2NTQ2OSwxLjEwMDU0NTI3NDc5MzkwMDkKKzI2LFNhdCAxOSBGZWIgMTEsMzQ5MS4zNTM0NjE0Nzg0NTAzLDMxNzQuODI3NTE0MzE2NTU5MiwxODUuMjA1MDA2MzY5MTU4NDQsMTIxOC4xMjIyNzkxOTk4NjM3LDIwMS40OTc4Mjk1MTk2MzU2Miw3NDExLjk5MjQ4OTE1NjcxNSwxMzkxLjg4ODA5OTgzNjM4NDUsMjMxMC45MDM5NDc1NTE5ODY3LDcwNDIuNjE0NjI2NjM1NDQ1LDY1NTYuODQyMjcyMDIzMjM0LDYyNS4wNjEyNzE5MjU3NTQyLDIxMjEuNDU1NzQxODc3ODE3Nyw2Mi41MjUzMDY5MTc3MzkxNjUsNTcxLjEzNjkzMzkxOTAzNTIsMzMwMzUuNTYzODk4MjU4MjQ2LDU5MDIzLjg0MDQ5NDU5MDc2LDU1MTYyLjM3MDMwNzMxMjU0LDE1NTk4LjgwMDc4OTg3MDU3OCw0NTM5My42Mjg2Mjg2MjE0NzQsMjk5MzYuMDA2Nzc0MjEwMTE2LDQ0NjY2LjY1MTc5ODExNTY1LDQ5NjAxLjEyMzc4NjM3MDAxNSw1MjguOTI4NTExMzYwMDY1OCw5ODIzLjMzMzQwNTYwOTA0OCwxODcxLjYwNDA0MDEzMTgzODcsMS40OTQ1NzM1ODg1OTU2NzA2CisyNyxTdW4gMjAgRmViIDExLDM1MDYuODAxNTAxOTM4NTI1LDMxNjkuNzI4OTU2NDI1NTI3LDIzOC4xMjk3Nzg0MjQ3MDAyOCwxNDA0LjU0MzU4Njk0MjAwOTQsMjYxLjkxOTcyMjgxMTM0NzcsOTI0OC44OTA2NzEzMTQwNTUsMTg1My43OTQyMjM3NzM0NDU4LDMwMzkuOTI4MjkyMzQ0MDg0LDg3NTQuNzY5NjY0ODQyMzEyLDgxODUuNTE4NTAwNjk4Njc5LDgxNi44MjE2MTM4NDUxNDQsMjgxMS42NDE0Mjk4MzA5MzQsODcuMzIwNTQ2MzcyMjUxNjgsNzY4LjYyMzM4MzEyMDI4OTksMzMwNDUuNjQzMDcwODA0MzUsNjI4MTguMDU1OTQxMDAxMjQsNTUxMDQuMjQwMDE5MDI1NDUsMTU1NTMuNzcwOTM4MTkzNTE4LDQ1MjU3LjU0OTg4MTk4NTEsMjk5NTIuNDc3NjcxMDgzMDEyLDQ0NTMxLjE3NTMxOTkzNjY0LDQ5NDUwLjEwNDU3NzMxNzkzLDcwMy45MDUyMzg2NjIyNjIzLDEyMzk3LjUyNjkzMTY2OTQyOCwyMjAxLjU1OTgyNzQxNjczNzMsMi4wMTg2MTUzOTUxNjI1NDk0CisyOCxNb24gMjEgRmViIDExLDM0MjIuOTYyMjczOTI5MjMxMywzMDczLjI2MTQ5MjY5ODk1MjcsMzAzLjkzNTI4MzY1MTU3NDYsMTU5OC42OTM4OTY2MzU3NzUsMzM4LjU0MTAyMDk0NTgxNzY1LDExNDY5LjI4Mjc3MDIzNDg1MSwyNDU4LjA5OTE5MDY5NDEyNTQsMzk3Ny44ODc3MjQwMzE2NTUsMTA4MDYuOTYyMTYwOTI5Njc0LDEwMTU5LjYxMTQ4OTEwMDU0NSwxMDYxLjY1NzMzMzAwMDcwMzQsMzcwOC43MDU4MTkwMDU3NzIsMTIxLjI5OTUxMzAzODczNjQ2LDEwMjkuNzk0ODI3OTg1Njk5NCwzMjEyMi45NTA4NDQ3OTgzNDMsNjU0MTIuMzIyMjMyMzYxNDYsNTM0ODIuNzIyNjAyNDc3NjI1LDE1MDY0LjQ5MTg3MzUzMjI5OSw0MzgyOS42NDU1MDQyNzIwNywyOTEyMy42NjAwMzY0NzU5NDMsNDMxMjQuMzA4NDM1ODY5NjcsNDc4ODcuMzEyNjk5MjA3NTA1LDkzMi45MDY5ODQ3OTg2NzE2LDE1NTYxLjM1NjEwNzUwNzUxNCwyNTYwLjgxODIxNTI0NjE5MjMsMi43MTE4Njg4MzYwNjI3MDc1CisyOSxUdWUgMjIgRmViIDExLDMyNTEuMzMxNzg1MDcwNzI3LDI4OTguMjg2Mzk3NDQ5OTI4LDM4NC44MDQ4MzE3Nzg1NjMzLDE3OTUuMDYwODg2NDY3MTk4NSw0MzQuOTY4NzY0Njk3MzM1NywxNDEyNi4xMTU1OTM4MzU2NDgsMzI0NC42NDMwNDUxMzY1MTYzLDUxNzYuMTU3NDA2MzgxMjAyLDEzMjM2Ljk3OTczNzI2MzU1MywxMjUzMC43MzMwODczODgwMTEsMTM3MS45MjgxODk4MDgzMDMyLDQ4NjcuNzgzMTE2MjUyNjAxLDE2Ny42Mzg3NzM1OTc2NjU0MiwxMzczLjQ3OTU0MTQzOTEzNzQsMzAzODcuNDE0Mzg2MjI1ODI4LDY2NjAzLjQxNTM0NTE3MzU5LDUwNTA4Ljg0MDkwMjkxOTEsMTQxOTQuNzU0NzU3NDIwOTc1LDQxMjk1LjkxODMxODQ0MTQ2NSwyNzU1Ny4zNDgxMjE3MDI0OTMsNDA2MjkuMzUzOTA1MTM5Mzc1LDQ1MTE2LjM1NTQ2MTU5ODA5LDEyMzEuMjg5NzE2MTY1MDE1OCwxOTQxNi43NDYxNDc4NDIzODMsMjk0My4zOTExMDU2OTYwMDcsMy42MjM3Mzc3NjMxNDc5MjQKKzMwLFdlZCAyMyBGZWIgMTEsMzAxMi40NzQzMDI3ODc4ODgsMjY2NS41NzcwNjE5NjQ4MDI0LDQ4Mi44MjYwNTMyNjc1MDE4LDE5ODcuMzQxNzg1NzE1ODkwNCw1NTUuMjgwNjk1NTE1MTQ1OSwxNzI2Ny43MzkxMTU1NzI4MjIsNDI2Mi41MjkyODA5OTg3NzEsNjY5NC41NDk4NDczMjc0NDgsMTYwNzMuNDE4NDQ2OTcxNzQsMTUzNDguOTM5NTg1MzU3MjcxLDE3NjEuNzIyMTk5NjY1ODc1NSw2MzU1LjM2Nzc1Nzc2MTMyNCwyMzAuNTIzNzMyNzgxMjE5NCwxODIzLjI5MDk5ODA1MTczNDUsMjgwNDEuNTA1NjYwOTEzMTM1LDY2MzE4LjAxMTg1ODk1NzUzLDQ2NTMwLjEwMjkxMjM3NzE2NiwxMzA0Ni4zOTQwNTg2NjMzMzMsMzc5NTIuNzgwMDQ0NTQzOTYsMjU0MzYuMzU1NDA0MzY1MzU3LDM3MzM4LjI0MDUwMDYxNTg3LDQxNDYxLjQzNjYzODgyNTQyLDE2MTguMjI1ODI3MDg1NjQ0MSwyNDA2Ny43NTYxNDY5NDU3OTQsMzM0MC45MzkzMzc3MzYzMjk0LDQuODE1NjMwNjc0ODg3MTM5CiszMSxUaHUgMjQgRmViIDExLDI3MzEuMjU1OTUzNjg5NywyMzk5LjAyMzU4NTM0NjQ5OCw1OTkuNjk5NDQ4MjEwNTU3MSwyMTY4Ljk0NTc5OTg3NDY5ODQsNzAzLjkwODU3MjMzNTEzOTgsMjA5MzAuNDk4MzAyNTk3NjAzLDU1NzEuMjUyNTM1NDIxODczLDg2MDAuMzA0Mjg5MDAxMjcxLDE5MzI3LjcxMTI1NTQ2NTU5OCwxODY1Ni45Njg0MTc3ODE1LDIyNDYuNDMwNTk3OTAyOTA4LDgyNDkuNzY2MTI0Nzc2MTA2LDMxNS40MjYyMDE1NzgzMTcwMywyNDA4LjQyNDM1OTQxODI3MSwyNTMyMy45OTMzOTEyOTE1MzcsNjQ2MjYuNTI3NDA5MzkyNDUsNDE5NTAuOTY5NTQzNzQwMzY0LDExNzM1LjkzMDczMjc5ODI0OCwzNDEzOS4xMjUwOTMxNzQyNCwyMjk3Ni43MzkzNDA2NjQ5MzUsMzM1ODQuNjEwOTk0MTYwMTc1LDM3MjkzLjA1MTYxOTU2MDA4LDIxMTcuMzg5MTE0NjM4MzM1MywyOTYxMC44MzE3NDQxMzA2NywzNzQyLjkxMjY5OTYwNjA3MjcsNi4zNjI1NDYwODQxMzc1NjUKKzMyLEZyaSAyNSBGZWIgMTEsMjQzMS45NDc2NTYxOTQ5MzcsMjEyMS4wMzA3MDM4NzIxMjM1LDczNi4zMTU5NDgzNDY2ODc4LDIzMzMuNTUxNzQwMDkxMTMzLDg4NS4zOTQzMjMwMDk2NDM0LDI1MTI4LjA3MjI3MDcxMDQ3LDcyNDEuMzAyNDgyNDI1NjA0LDEwOTY1LjI5MzE3NjIyMDQxNywyMjk4My42MDE5ODc4OTU1NzQsMjI0ODEuNDk3NTMyMzIxODUsMjg0MS44MjUwMjM5NDY5MTcsMTA2NDAuMjQzMjQ4Mjg1NjQ2LDQyOS40MzM4NDAyMTM3MzkxLDMxNjQuMzIzOTQ3ODM5OTU5NiwyMjQ2My43NTIyNzEwMDA1OTgsNjE3MjcuMjAxMDE0MDEzODIsMzcxNTQuOTcwMDczOTE0MjksMTAzNzIuMjg0MDM0MjAyNDkyLDMwMTcxLjU4Mjk4NTkwNDczLDIwMzg1Ljk0NzMzNTE4NTU3LDI5NjgwLjA4MTMxMzkzNDAzNSwzMjk1Ny4yMTM3NjQxNjY0MTYsMjc1Ny42MTY4NjQ5NTk3NTMsMzYxMTkuMTYwMDY1MDcwMDcsNDEzNi44NDk2MzI5MTUzMTIsOC4zNTQwMDU4MzczODEyCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FnaW5nU0VJUkRpc2Vhc2VfRkRfUmVmZXJlbmNlL0FnaW5nU0VJUkRpc2Vhc2UvaHVtYW4ydG8tL1BvcHVsYXRpb24gQ291bnRfMi5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FnaW5nU0VJUkRpc2Vhc2VfRkRfUmVmZXJlbmNlL0FnaW5nU0VJUkRpc2Vhc2UvaHVtYW4ydG8tL1BvcHVsYXRpb24gQ291bnRfMi5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWNkNjU1ZAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWdpbmdTRUlSRGlzZWFzZV9GRF9SZWZlcmVuY2UvQWdpbmdTRUlSRGlzZWFzZS9odW1hbjJ0by0vUG9wdWxhdGlvbiBDb3VudF8yLmNzdgpAQCAtMCwwICsxLDMzIEBACitpdGVyYXRpb24sdGltZSxFRy1GUkctRzIxMDAwMSxFRy1GUkctRzIxMDAwMixFRy1GUkctRzIxMDAwMyxFRy1GUkctRzIxMDAwNCxFRy1GUkctRzIxMDAwNSxFRy1MT0UtRzI0MDAwMSxFRy1MT0UtRzI0MDAwMixFRy1MT0UtRzI0MDAwMyxFRy1MT0UtRzI0MDAwNCxFRy1MT0UtRzI0MDAwNSxFRy1MT0UtRzI0MDAwNixFRy1MT0UtRzI0MDAwNyxFRy1MT0UtRzI0MDAwOCxFRy1MT0UtRzI0MDAwOSxFRy1VUEUtRzI5MDAwMSxFRy1VUEUtRzI5MDAwMixFRy1VUEUtRzI5MDAwMyxFRy1VUEUtRzI5MDAwNCxFRy1VUEUtRzI5MDAwNSxFRy1VUEUtRzI5MDAwNixFRy1VUEUtRzI5MDAwNyxFRy1VUEUtRzI5MDAwOCxFRy1VUkctRzMwMDAwMSxFRy1VUkctRzMwMDAwMixFRy1VUkctRzMwMDAwMyxFRy1VUkctRzMwMDAwNAorMSxUdWUgMjUgSmFuIDExLDU5MDE0LjgsNTI2OTEuNjAwMDAwMDAwMDA2LDMwNjcwLjgwMDAwMDAwMDAwMyw2MzQwNC42MDAwMDAwMDAwMDYsNjM5MTEuMjAwMDAwMDAwMDA0LDEwMzMxNDkuNjAwMDAwMDAwMSwxMTIyNzIyLjYsOTIwMTc4LjQsNzk5MjY3LjgsOTk5Mjg2LjAsMjAyOTI1LjYsMTE4NjI2NS42LDIzNDc2OC44MDAwMDAwMDAwMiw2MjMyMjAuOCw1NTcwNDUuOCwxMjc4NzQ3LjQwMDAwMDAwMDEsOTI2NDAyLjAsMjYwNTM4LjYsNzU4Mjg1LjYwMDAwMDAwMDEsNTA0OTk3LjAsNzQ2MDM5LjAsODI4NDU3LjQsNzM2OTg4LjAsMTY3OTk0OC4yMDAwMDAwMDAyLDEwNzEzMy4yMDAwMDAwMDAwMSwxMzQxLjQKKzIsV2VkIDI2IEphbiAxMSw1OTMzNy45NTQwNjY2NjAxNCw1Mjk4MC4xMjkzOTk3MjM5NiwzMDgzOC43NDc1OTUzMTAzMjgsNjM3NTEuNzkxNzk0ODU0MTY1LDY0MjYxLjE2NTg0MjIxNDY2LDEwMzg4MDYuOTM1MDE5NDkxNywxMTI4ODcwLjQyMDEwNDgwODQsOTI1MjE3LjEyNTc0MzU5MDEsODAzNjQ0LjQ0MTc5MDIwMzYsMTAwNDc1Ny45MDQyNDUzMTcxLDIwNDAzNi43ODI4MzY2Njg5MiwxMTkyNzYxLjM2OTc1MjMxNywyMzYwNTQuMzUwMjc2Mjg1Myw2MjY2MzMuNDQxMTY3MDgzMyw1NjAwOTYuMDc5MTc3MTg4NywxMjg1NzQ5LjU4Mjg4NTMyODQsOTMxNDc0LjgwNTAxOTQ1NDIsMjYxOTY1LjI2MDkwNzI5NjgsNzYyNDM3LjgzMDg4NjY1Niw1MDc3NjIuMjY5NjMwNjg4Nyw3NTAxMjQuMTcwNzgzMjExNCw4MzI5OTMuODc4NjA5ODUxOCw3NDEwMjMuNjA5MTkwOTEwMSwxNjg5MTQ3LjI4MzgzMzM1LDEwNzcxOS44NDE0NzM5MDY4LDEzNDguNzQ1MjU2ODY4MDcyNAorMyxUaHUgMjcgSmFuIDExLDU5NjU5Ljc0ODY2OTI0NzUyLDUzMjY3LjQ0NDk5NjUxODIxNCwzMTAwNS45ODg2NTg1MTg4MzIsNjQwOTcuNTIzMDAyMjY2NzQ2LDY0NjA5LjY1OTQyNjk1NzUxNCwxMDQ0NDQwLjQ3MDQxOTg1NDMsMTEzNDk5Mi4zNzcxODgxNjUsOTMwMjM0LjY1NDI3MDk2NzksODA4MDAyLjY3MTY1OTAxNDMsMTAxMDIwNi43ODg5NTI5MDEzLDIwNTE0My4yOTEwODIxNzM1NiwxMTk5MjI5LjgxMjcwNzU2MDEsMjM3MzM0LjQ5MjQyMTkxNTE0LDYzMDAzMS43MjU4Mjg5MDAyLDU2MzEzMy41MjYyNTU0NDY1LDEyOTI3MjIuMzA4NTY0MTg2Myw5MzY1MjYuMjY5NDU1OTM3MywyNjMzODUuOTIwMDUxMjAwOTYsNzY2NTcyLjU5MzkxNzI4MSw1MTA1MTUuOTA2MTU3ODQ0OTMsNzU0MTkyLjE1NTgyMjg5MSw4Mzc1MTEuMjcyODg3MTEwNyw3NDUwNDIuMjQxMTM2OTkyNywxNjk4MzA3LjY2ODQwNDQ0NzQsMTA4MzA0LjAxNTAyODk3OTY3LDEzNTYuMDU5NjEzMjY1MjkzNAorNCxGcmkgMjggSmFuIDExLDU5OTgwLjE4NTI0MzM4ODM0LDUzNTUzLjU0ODA3MjE4NzM1LDMxMTcyLjUyMzkzNTc0MDExLDY0NDQxLjc5NTE2NDY1MjYxLDY0OTU2LjY4MjMwODk2NzI2LDEwNTAwNTAuMjMxMzM0MDQ3OSwxMTQxMDg4LjQ5ODU2MjAzMTcsOTM1MjMxLjAwNzk2Njg5NDgsODEyMzQyLjUwOTA0OTg1NjYsMTAxNTYzMi42Nzg0MzE5MjgzLDIwNjI0NS4xMjk2NzI5OTI2OCwxMjA1NjcwLjk1NzcyMzQ3MzIsMjM4NjA5LjIzMjE0ODAwMzQsNjMzNDE1LjY2OTE0NjI1OTcsNTY2MTU4LjE1NDc4NTc3MzMsMTI5OTY2NS42MDgxNDQwNzk2LDk0MTU1Ni40MTU4NDU2MDkyLDI2NDgwMC41ODM3Njk3MTY0LDc3MDY4OS45MDc1MzgzNDQyLDUxMzI1Ny45MjE4NjYzMDEwNCw3NTgyNDIuOTczMjY3NTkwNCw4NDIwMDkuNjAyOTg1MjgyOSw3NDkwNDMuOTEzNzY2NjE5NSwxNzA3NDI5LjM5NDU4MDYyNzYsMTA4ODg1LjcyMzI3MTM5OTI2LDEzNjMuMzQzMTAxODIzMjkwNworNSxTYXQgMjkgSmFuIDExLDYwMjk5LjI2NTIzMDgyNTM0NSw1MzgzOC40Mzk5MTM5OTcxMiwzMTMzOC4zNTQxNzYyNjc2Miw2NDc4NC42MDk4MzA5OTgxNCw2NTMwMi4yMzYwNDk2MDY2MjUsMTA1NTYzNi4yNDMwMDIxMTM0LDExNDcxNTguODExNjU0NzM0NCw5NDAyMDYuMjA5MzExNTAzMSw4MTY2NjMuOTczNDg4OTkzNywxMDIxMDM1LjU5NzA5NTE0NDQsMjA3MzQyLjMwMzU2NjYzNzA3LDEyMTIwODQuODMzNzgwNzQ5NSwyMzk4NzguNTc1MTg5OTk2MjIsNjM2Nzg1LjI4NjM0NDU2MzgsNTY5MTY5Ljk3ODM3NjkwMzcsMTMwNjU3OS41MTI4NjUwNDkzLDk0NjU2NS4yNjY4MjA2NDYxLDI2NjIwOS4yNTg0Mjc4NTA1LDc3NDc4OS43OTAyNzQ5MDYyLDUxNTk4OC4zMjkwOTMyMjkyNiw3NjIyNzYuNjQxMzQzMTgzNSw4NDY0ODguODg5MTQzNzM5Niw3NTMwMjguNjQ1MDg0NTQ2OCwxNzE2NTEyLjUwMzQwMzM0MzMsMTA5NDY0Ljk2ODgxODQ0OTkyLDEzNzAuNTk1NzU1MzEyNzIwMworNixTdW4gMzAgSmFuIDExLDYwNjE2Ljk5MDA3OTM4OTY5Niw1NDEyMi4xMjE4MTQ2NDkzOCwzMTUwMy40ODAxMzI1NTkwNDUsNjUxMjUuOTY4NTU2ODMxMDMsNjU2NDYuMzIyMjE2ODMxODksMTA2MTE5OC41MzA3NzA2NzgzLDExNTMyMDMuMzQ0MDEwNDI3OCw5NDUxNjAuMjgwODc5ODU4NSw4MjA5NjcuMDg0NTg1MTQ4NywxMDI2NDE1LjU2OTQ1ODM5MDIsMjA4NDM0LjgxNzc0MTU1MywxMjE4NDcxLjQ2OTk4MjQ2NjcsMjQxMTQyLjUyNzMwNzU2MDUyLDY0MDE0MC41OTI3MTM1MTExLDU3MjE2OS4wMTA2OTUwNDA4LDEzMTM0NjQuMDU0MDk5MDYzMiw5NTE1NTIuODQ1MTA4Nzk5NSwyNjc2MTEuOTUwNDE3NDg5ODYsNzc4ODcyLjI2MDczMDI1ODUsNTE4NzA3LjE0MDIyNzkwMTQ2LDc2NjI5My4xNzgzNTI1MTE2LDg1MDk0OS4xNTE2ODczMjIxLDc1Njk5Ni40NTMxNzE1NjQ3LDE3MjU1NTcuMDM2MDg3MzY0MiwxMTAwNDEuNzU0Mjk4NDY4NzUsMTM3Ny44MTc2MDY2NDI2Mjc0Cis3LE1vbiAzMSBKYW4gMTEsNjA5MzMuMzYxMjQyOTcyOTEsNTQ0MDQuNTk1MDcyMjU2OTgsMzE2NjcuOTAyNTYwMjIxNzM3LDY1NDY1Ljg3MjkwNDE5MDE0Niw2NTk4OC45NDIzODUxNjI1NSwxMDY2NzM3LjEyMDA5MjQ2NzYsMTE1OTIyMi4xMjMyODg1NjEsOTUwMDkzLjI0NTM0MTUyMTUsODI1MjUxLjg2MjAyOTEyMjEsMTAzMTc3Mi42MjAxNDAxMjQ2LDIwOTUyMi42NzcxOTcwMjU2LDEyMjQ4MzAuODk1NTUzNTIyNSwyNDI0MDEuMDk0Mjg0NDcxOTcsNjQzNDgxLjYwMzYwNjgsNTc1MTU1LjI2NTQ2MzU5MjgsMTMyMDMxOS4yNjMzNDk0MDM2LDk1NjUxOS4xNzM1MzI5NTQ0LDI2OTAwOC42NjYxNTcyNzYyLDc4MjkzNy4zMzc1ODU1NjI1LDUyMTQxNC4zNjc3MTE0NDg0Niw3NzAyOTIuNjAyNjc1MDI4NCw4NTUzOTAuNDExMDI1OTQ3OCw3NjA5NDcuMzU2MTg0MTQ1OSwxNzM0NTYzLjAzNDAxOTk3NjYsMTEwNjE2LjA4MjM1MDc5NDQ5LDEzODUuMDA4Njg4ODU5ODA5MQorOCxUdWUgMSBGZWIgMTEsNjEyNDguMzgwMTgxNDk4ODEsNTQ2ODUuODYwOTkwMzE4NzQsMzE4MzEuNjIyMjE3OTk4MDk0LDY1ODA0LjMyNDQ0MTU5NTMxLDY2MzMwLjA5ODEzNTY1MDgxLDEwNzIyNTIuMDM2NTI1ODEwNiwxMTY1MjE1LjE3NzI2MzM0NCw5NTUwMDUuMTI1NDYwMTA5Nyw4Mjk1MTguMzI1NTkzNDEzMSwxMDM3MTA2Ljc3Mzg2MDk1MDQsMjEwNjA1Ljg4Njk1MzA4MjIzLDEyMzExNjMuMTM5ODQwMDcwNiwyNDM2NTQuMjgxOTI4NTAzNjIsNjQ2ODA4LjMzNDQ0MTgzMjIsNTc4MTI4Ljc1NjQ2MjkwNjcsMTMyNzE0NS4xNzIyNTAwNjUsOTYxNDY0LjI3NTAxMDY5LDI3MDM5OS40MTIwOTI0ODI3Myw3ODY5ODUuMDM5NTk5NDg5LDUyNDExMC4wMjQwMzY2MjA1LDc3NDI3NC45MzI3NjY0NDQ3LDg1OTgxMi42ODc2NTQyMTU4LDc2NDg4MS4zNzIzNTQwOTUyLDE3NDM1MzAuNTM4NzYwMTg1NSwxMTExODcuOTU1NjI1NzE2NzcsMTM5Mi4xNjkwMzUxNDgxNzQ4Cis5LFdlZCAyIEZlYiAxMSw2MTU2Mi4wNDgzNjA4OTU0NzUsNTQ5NjUuOTIwODc3Njk0NCwzMTk5NC42Mzk4Njc3NTEwMjYsNjYxNDEuMzI0NzQ0MDE3MzMsNjY2NjkuNzkxMDU1ODUxNDcsMTA3Nzc0My4zMDU3MzQxNTE1LDExNzExODIuNTMzODIzMjE1NCw5NTk4OTUuOTQ0MDkyODYxNiw4MzM3NjYuNDk1MTMxODQwNSwxMDQyNDE4LjA1NTQ0MzEzOTYsMjExNjg0LjQ1MjA1MDM5NjMzLDEyMzc0NjguMjMyMzA4OTU4LDI0NDkwMi4wOTYwNzEzMTQyNCw2NTAxMjAuODAwNjk5NDE3Miw1ODEwODkuNDk3NTMwMDA0NCwxMzMzOTQxLjgxMjU2NTE0MjMsOTY2Mzg4LjE3MjU1MzgzODksMjcxNzg0LjE5NDY5NDg5MDEsNzkxMDE1LjM4NTYwNzg1ODIsNTI2Nzk0LjEyMTc0NzU0Nyw3NzgyNDAuMTg3MTU4Mzc1NCw4NjQyMTYuMDAyMTUxMDE1LDc2ODc5OC41MTk5ODgyMDAzLDE3NTI0NTkuNTkyMDM3OTE3OCwxMTE3NTcuMzc2Nzg0NDI1MDUsMTM5OS4yOTg2Nzg4MjgxMTA3CisxMCxUaHUgMyBGZWIgMTEsNjE4NzQuMzY3MjUzMDY3Mjg1LDU1MjQ0Ljc3NjA0ODU3OTY5LDMyMTU2Ljk1NjI3NDQ0OTQwMyw2NjQ3Ni44NzUzOTI4NDc3NCw2NzAwOC4wMjI3Mzk3OTEyOCwxMDgzMjEwLjk1MzQ4NTU1ODUsMTE3NzEyNC4yMjA5NzAzMDgyLDk2NDc2NS43MjQxOTAyMDA3LDgzNzk5Ni4zOTA1NzkxNjIzLDEwNDc3MDYuNDg5ODEwMTU5NCwyMTI3NTguMzc3NTUwMTkxMzMsMTI0Mzc0Ni4yMDI1NDcxNjE2LDI0NjE0NC41NDI1NjgzMzcxLDY1MzQxOS4wMTc5MjM0NzcsNTg0MDM3LjUwMjU1ODMxODgsMTM0MDcwOS4yMTYxODgyMjY2LDk3MTI5MC44ODkyNjgwNDg4LDI3MzE2My4wMjA0NjI2NjM1LDc5NTAyOC4zOTQ1MjMyODAyLDUyOTQ2Ni42NzM0Mzk0OTY4LDc4MjE4OC4zODQ0NTc5ODQ1LDg2ODYwMC4zNzUxNzkxMjkxLDc3MjY5OC44MTc0Njc4ODIyLDE3NjEzNTAuMjM1NzUzMjI0LDExMjMyNC4zNDg0OTg5NTgwNSwxNDA2LjM5NzY1MzM1NTg0NAorMTEsRnJpIDQgRmViIDExLDYyMTg1LjMzODMzNTg2Njk5LDU1NTIyLjQyNzgyMjQ4MTI5NSwzMjMxOC41NzIyMDYxNTM1MzgsNjY4MTAuOTc3OTc1ODY4OTgsNjczNDQuNzk0Nzg3OTM5MDEsMTA4ODY1NS4wMDU2NTIyMzY4LDExODMwNDAuMjY2ODE5OTIwNCw5Njk2MTQuNDg4Nzk1Mjk3OSw4NDIyMDguMDMxOTUwNjk4NSwxMDUyOTcyLjEwMTk4NjE5OTksMjEzODI3LjY2ODUzNDE0NDE4LDEyNDk5OTcuMDgwMjYxMjI3MiwyNDczODEuNjI3Mjk4NjY4OTMsNjU2NzAzLjAwMTcyMDc0OTcsNTg2OTcyLjc4NTQ5NzQyOTIsMTM0NzQ0Ny40MTUxNDE3OTkzLDk3NjE3Mi40NDgzNTIzNDMsMjc0NTM1Ljg5NTkyMDIyODc0LDc5OTAyNC4wODUzMzQ3OTU4LDUzMjEyNy42OTE3NTg2NDA2LDc4NjExOS41NDMzNDc2MzI1LDg3Mjk2NS44Mjc0ODQ4NDYsNzc2NTgyLjI4MzI0ODg0NTMsMTc3MDIwMi41MTE5NzU0ODMzLDExMjg4OC44NzM0NTIxNTI4LDE0MTMuNDY1OTkyMzIyODA2OQorMTIsU2F0IDUgRmViIDExLDYyNDk0Ljk2MzA5MzA2NzcyLDU1Nzk4Ljg3NzUyNDE5MjAzLDMyNDc5LjQ4ODQzNDAwMDY2LDY3MTQzLjYzNDA4NzIyNDI3LDY3NjgwLjEwODgwNzE3NSwxMDk0MDc1LjQ4ODIxMDAzNjQsMTE4ODkzMC42OTk1OTk5ODIsOTc0NDQyLjI2MTA0MzYzODIsODQ2NDAxLjQzOTM0MTk1MjMsMTA1ODIxNC45MTcwOTU2OTk2LDIxNDg5Mi4zMzAxMDQyODk1MiwxMjU2MjIwLjg5NTI3NjcwNzgsMjQ4NjEzLjM1NjE2NDk1ODYsNjU5OTcyLjc2Nzc2MDQ5NjUsNTg5ODk1LjM2MDM1Mjc5OTMsMTM1NDE1Ni40NDE1NzY2MjcsOTgxMDMyLjg3MzA5ODY4MjYsMjc1OTAyLjgyNzYxODE0OSw4MDMwMDIuNDc3MTA3NTE3Myw1MzQ3NzcuMTg5NDAxODA5Nyw3OTAwMzMuNjgyNTg0NTIzNyw4NzczMTIuMzc5ODk3NTY1NSw3ODA0NDguOTM1ODYwNzMsMTc3OTAxNi40NjI5NDI2MTEsMTEzNDUwLjk1NDMzNzU5NDA2LDE0MjAuNTAzNzI5NDU1MDAyCisxMyxTdW4gNiBGZWIgMTEsNjI4MDMuMjQzMDE0MzM1MjIsNTYwNzQuMTI2NDgzNzY1ODYsMzI2MzkuNzA1NzMyMTkwNDU0LDY3NDc0Ljg0NTMyNzM4NzY4LDY4MDEzLjk2NjQxMDc2MTA0LDEwOTk0NzIuNDI3MjM3OTY3NSwxMTk0Nzk1LjU0NzY1MDUyNTgsOTc5MjQ5LjA2NDE2MjU4NTUsODUwNTc2LjYzMjkyODIzMywxMDYzNDM0Ljk2MDM2Mjg3NSwyMTU5NTIuMzY3MzgyOTIzOTYsMTI2MjQxNy42Nzc1Mzc2MDM4LDI0OTgzOS43MzUwOTMyOTYyNyw2NjMyMjguMzMxNzc0MjA2MSw1OTI4MDUuMjQxMTg1NTEyMywxMzYwODM2LjMyNzc3MTE1ODIsOTg1ODcyLjE4Njg5MTUyODUsMjc3MjYzLjgyMjEzMzAwMTksODA2OTYzLjU4ODk4MjI3Miw1Mzc0MTUuMTc5MTE2MjU5Nyw3OTM5MzAuODIxMDAwMzUzLDg4MTY0MC4wNTMzMjk0MDc0LDc4NDI5OC43OTM5MDY3NjQsMTc4Nzc5Mi4xMzEwNjAyNiwxMTQwMTAuNTkzODU5NTYzNywxNDI3LjUxMDg5ODYxMjM2OTgKKzE0LE1vbiA3IEZlYiAxMSw2MzExMC4xNzk1OTUxOTk4NjUsNTYzNDguMTc2MDM2NDkzMTEsMzI3OTkuMjI0ODc3OTcwNTU1LDY3ODA0LjYxMzMwMzEzNDMsNjgzNDYuMzY5MjE4MzEwMywxMTA0ODQ1Ljg0ODkxNzcxMDQsMTIwMDYzNC44Mzk0MjMxNTY4LDk4NDAzNC45MjE0NzA5NDcyLDg1NDczMy42MzI5NjQyNzgzLDEwNjg2MzIuMjU3MTExMjQ4MywyMTcwMDcuNzg1NTEyNTEwMjUsMTI2ODU4Ny40NTcxMDU4MDI4LDI1MTA2MC43NzAwMzMxMDI5LDY2NjQ2OS43MDk1NTUzMDA1LDU5NTcwMi40NDIxMTIwMDg4LDEzNjc0ODcuMTA2MTMwOTE4LDk5MDY5MC40MTMyMDc0MDQ4LDI3ODYxOC44ODYwNjcyNTY3NCw4MTA5MDcuNDQwMTc1MjQyMyw1NDAwNDEuNjczNjk5NDMwNCw3OTc4MTAuOTc3NTAwOTU0Miw4ODU5NDguODY4Nzc0ODIxNCw3ODgxMzEuODc2MDYzNDE0MywxNzk2NTI5LjU1ODkwMTAzNDUsMTE0NTY3Ljc5NDczMjk5MDE3LDE0MzQuNDg3NTMzNzg4MTUzMworMTUsVHVlIDggRmViIDExLDYzNDE1Ljc3NDMzNzAyODk5LDU2NjIxLjAyNzUyMjg3NTU3LDMyOTU4LjA0NjY1MTYyMjEzLDY4MTMyLjkzOTYyNzUxMDE5LDY4Njc3LjMxODg1NTc1NywxMTEwMTk1Ljc3OTUzMzEyOTcsMTIwNjQ0OC42MDM0ODA1MjQyLDk4ODc5OS44NTYzNzg1NDIxLDg1ODg3Mi40NTk3ODM4Nzg0LDEwNzM4MDYuODMyNzYzMTc3MywyMTgwNTguNTg5NjU1NTgxNDgsMTI3NDczMC4yNjQxNjA1MjEsMjUyMjc2LjQ2Njk1NzAxOTEsNjY5Njk2LjkxNjk1ODg0MjMsNTk4NTg2Ljk3NzMwMzgyNTIsMTM3NDEwOC44MDkxODc5MDg0LDk5NTQ4Ny41NzU2MTQ0NjE3LDI3OTk2OC4wMjYwNDkxNTE1LDgxNDgzNC4wNDk5Nzc2MDkzLDU0MjY1Ni42ODU5OTg3MDkzLDgwMTY3NC4xNzEwNjU5NDksODkwMjM4Ljg0NzMxMDE5NjEsNzkxOTQ4LjIwMTA4MDA0LDE4MDUyMjguNzg5MjAzNjkyNSwxMTUxMjIuNTU5NjgzMzk4MDEsMTQ0MS40MzM2NjkxMDgyNjk0CisxNixXZWQgOSBGZWIgMTEsNjM3MjAuMDI4NzQ2OTk5MDE0LDU2ODkyLjY4MjI4ODYwMTcyNSwzMzExNi4xNzE4MzY0NDU0LDY4NDU5LjgyNTkxOTgwMjc0LDY5MDA2LjgxNjk1NTMyNjUzLDExMTU1MjIuMjQ1NDY5Nzg5LDEyMTIyMzYuODY4NDk1NzkxNyw5OTM1NDMuODkyMzg1NzY2Niw4NjI5OTMuMTMzNzk5NDk4OSwxMDc4OTU4LjcxMjgzOTM4MzksMjE5MTA0Ljc4NDk5NDY0NTgsMTI4MDg0Ni4xMjg5OTc3NDM4LDI1MzQ4Ni44MzE4NjA3OTUzLDY3MjkwOS45Njk5MDEyNDA1LDYwMTQ1OC44NjA5ODczMjk2LDEzODA3MDEuNDY5NjAwMDAzMiwxMDAwMjYzLjY5Nzc3MjAzOTksMjgxMzExLjI0ODczMjU3MDIsODE4NzQzLjQzNzc1NTE5NjgsNTQ1MjYwLjIyODkxMTE5MjksODA1NTIwLjQyMDc0ODM5NTEsODk0NTEwLjAxMDA5MzQ2OSw3OTU3NDcuNzg3Nzc4NTQ1OSwxODEzODg5Ljg2NDg3MjM1ODcsMTE1Njc0Ljg5MTQ0Njg1NzM2LDE0NDguMzQ5MzM4ODMwNjc0MgorMTcsVGh1IDEwIEZlYiAxMSw2NDAyMi45NDQzMzgwNjc3NCw1NzE2My4xNDE2ODQ1MjIwMywzMzI3My42MDEyMTg3NDUyOSw2ODc4NS4yNzM4MDU1MTA2Nyw2OTMzNC44NjUxNTU1MDUzNCwxMTIwODI1LjI3MzIxNDQ2MzgsMTIxNzk5OS42NjMyNTIxMTEsOTk4MjY3LjA1MzA4MzE2MjYsODY3MDk1LjY3NTUwMTkwNTcsMTA4NDA4Ny45MjI5NTg0ODQ0LDIyMDE0Ni4zNzY3MzIwOTA5NSwxMjg2OTM1LjA4MjAyOTY2OTgsMjU0NjkxLjg3MDc2MzE4MDc1LDY3NjEwOC44ODQzNTk5NTgyLDYwNDMxOC4xMDc0NDM0NjE5LDEzODcyNjUuMTIwMTUwMzUsMTAwNTAxOC44MDM0MzAyMzUxLDI4MjY0OC41NjA3OTY5MjA1LDgyMjYzNS42MjI5NDgxMTMsNTQ3ODUyLjMxNTM4MzQ0OTUsODA5MzQ5Ljc0NTY3NDQzNjMsODk4NzYyLjM3ODM2MzczOCw3OTk1MzAuNjU1MDUzMDM1NywxODIyNTEyLjgyODk3NTczMzYsMTE2MjI0Ljc5Mjc2OTkzMzY3LDE0NTUuMjM0NTc3MzQ0NzM1NQorMTgsRnJpIDExIEZlYiAxMSw2NDMyNC41MjI2Mjg5NDY2Nyw1NzQzMi40MDcwNjY2MjQwOCwzMzQzMC4zMzU1ODc4MTY5Myw2OTEwOS4yODQ5MTYzMTQ0MSw2OTY2MS40NjUxMDEwMTA4OCwxMTI2MTA0Ljg4OTM1NDY1NjUsMTIyMzczNy4wMTY2NDIwOTM3LDEwMDI5NjkuMzYyMTUwOTg0Niw4NzExODAuMTA1NDU5NzkwMSwxMDg5MTk0LjQ4ODgzNjUyMjcsMjIxMTgzLjM3MDA5MDA4ODkyLDEyOTI5OTcuMTUzNzg0MTUyNCwyNTU4OTEuNTg5NzA1ODEzNjgsNjc5MjkzLjY3NjM3MzIxOTIsNjA3MTY0LjczMTAwNzQ3MSwxMzkzNzk5Ljc5Mzc0Njc2NzMsMTAwOTc1Mi45MTY0Mjk0NjI3LDI4Mzk3OS45Njg5NDcwMTE0NSw4MjY1MTAuNjI1MDcwMzk2LDU1MDQzMi45NTg0MTEyODMsODEzMTYyLjE2NTA0Mjk1MSw5MDI5OTUuOTczNDQwODcxMSw4MDMyOTYuODIxODY5NDY2LDE4MzEwOTcuNzI0NzQ2MzA0OCwxMTY3NzIuMjY2NDA5NjM3NDQsMTQ2Mi4wODk0MTkxNzA1OTkKKzE5LFNhdCAxMiBGZWIgMTEsNjQ2MjQuNzY1MTQ0MDczMjY2LDU3NzAwLjQ3OTc5NjAwNzk3NCwzMzU4Ni4zNzU3MzU5MzEzOCw2OTQzMS44NjA4OTAwNDYzNyw2OTk4Ni42MTg0NDI3NjE3NiwxMTMxMzYxLjEyMDU3ODExMjgsMTIyOTQ0OC45NTc2NjcyODUsMTAwNzY1MC44NDMzNTg3NjkyLDg3NTI0Ni40NDQzMTkzOTM0LDEwOTQyNzguNDM2Mjg2NDk3NiwyMjIyMTUuNzcwMzEwNTAxMDIsMTI5OTAzMi4zNzQ5MDQxNDU3LDI1NzA4NS45OTQ3NTMxMTExOCw2ODI0NjQuMzYyMDM5NzE2Niw2MDk5OTguNzQ2MDY4NjU0MSwxNDAwMzA1LjUyMzQyMTE0NzYsMTAxNDQ2Ni4wNjA3MDAwMjM4LDI4NTMwNS40Nzk5MTI5MzEyLDgzMDM2OC40NjM3MDk2NTczLDU1MzAwMi4xNzEwMzk0OTQ4LDgxNjk1Ny42OTgxMjUyMDM3LDkwNzIxMC44MTY3MjUxMTkyLDgwNzA0Ni4zMDcyNjUzMDA5LDE4Mzk2NDQuNTk1NTc5NTYwNiwxMTczMTcuMzE1MTMzMzczODYsMTQ2OC45MTM4OTg5NTg1NjQ1CisyMCxTdW4gMTMgRmViIDExLDY0OTIzLjY3MzQxMzU4MzQxLDU3OTY3LjM2MTIzODg2MTY0LDMzNzQxLjcyMjQ1ODMyMTIyLDY5NzUzLjAwMzM3MDY2MTExLDcwMzEwLjMyNjgzNzg0NzY4LDExMzY1OTMuOTkzNjcyMzM4NSwxMjM1MTM1LjUxNTQzNzYzOTgsMTAxMjMxMS41MjA1NjQ5MDQxLDg3OTI5NC43MTI4MDQxMzI0LDEwOTkzMzkuNzkxMjE3OSwyMjMyNDMuNTgyNjU0NzgyNTcsMTMwNTA0MC43NzYxNDcxNDYsMjU4Mjc1LjA5MTk5MjE1OTI2LDY4NTYyMC45NTc1MTgzMjA2LDYxMjgyMC4xNjcwNzAwOTYsMTQwNjc4Mi4zNDIzMjg4NTUzLDEwMTkxNTguMjYwMjYxNjcxNiwyODY2MjUuMTAwNDQ5OTI1MjMsODM0MjA5LjE1ODUyNjcyNzksNTU1NTU5Ljk2NjM2MTY0OCw4MjA3MzYuMzY0MjY0NDk1Nyw5MTE0MDYuOTI5Njk2NzI3NSw4MTA3NzkuMTMwMzQ5MTY2OSwxODQ4MTUzLjQ4NTAzMzIwMDQsMTE3ODU5Ljk0MTcxODg5MjgyLDE0NzUuNzA4MDUxNDg4NDUzNworMjEsTW9uIDE0IEZlYiAxMSw2NTIyMS4yNDg5NzMyODM3Miw1ODIzMy4wNTI3NjY0MzYxNiwzMzg5Ni4zNzY1NTMxNjYxODUsNzAwNzIuNzE0MDA4MjA1ODMsNzA2MzIuNTkxOTQ5NDk5NjMsMTE0MTgwMy41MzU1MjQxMTQsMTI0MDc5Ni43MTkxNzA5OTQ2LDEwMTY5NTEuNDE3NzE2MTk3NCw4ODMzMjQuOTMxNzE0MjI2NywxMTA0Mzc4LjU3OTYzNjI0MDQsMjI0MjY2LjgxMjQwMzg4ODI0LDEzMTEwMjIuMzg4Mzg0NjM5MywyNTk0NTguODg3NTMyNjAyODIsNjg4NzYzLjQ3OTAyNzc4NzUsNjE1NjI5LjAwODUwODQwODIsMTQxMzIzMC4yODM3NDgxMzIsMTAyMzgyOS41MzkyMjMxNzc1LDI4NzkzOC44MzczMzgyNzQxNyw4MzgwMzIuNzI5MjU1MzAyNiw1NTgxMDYuMzU3NTE5ODMxNiw4MjQ0OTguMTgyODc1ODE0NCw5MTU1ODQuMzMzOTE1NTQ4NSw4MTQ0OTUuMzEwMzAwNTA4MywxODU2NjI0LjQzNjgyNjM1MjcsMTE4NDAwLjE0ODk1NDIzODYzLDE0ODIuNDcxOTExNjY4OTg0NgorMjIsVHVlIDE1IEZlYiAxMSw2NTUxNy40OTMzNjQ2MjQwMyw1ODQ5Ny41NTU3NTUwMjExOCwzNDA1MC4zMzg4MjE1Nzg4Niw3MDM5MC45OTQ0NTg3OTA3MSw3MDk1My40MTU0NDcwNjAwOCwxMTQ2OTg5Ljc3MzExOTAxMzgsMTI0NjQzMi41OTgxOTI1NDU2LDEwMjE1NzAuNTU4ODQ3NDQ3NSw4ODczMzcuMTIxOTI2MzI0NiwxMTA5Mzk0LjgyNzY0MjU4NjUsMjI1Mjg1LjQ2NDg1ODE3NzEyLDEzMTY5NzcuMjQyNjAxNTQ3LDI2MDYzNy4zODc1MDY1MzY0LDY5MTg5MS45NDI4NDY0NjcxLDYxODQyNS4yODQ5MzM0Njg5LDE0MTk2NDkuMzgxMDc5NDk2NiwxMDI4NDc5LjkyMTc4MTg5OTMsMjg5MjQ2LjY5NzM4MzE3MjQsODQxODM5LjE5NTcwMTU4Niw1NjA2NDEuMzU3NzA0NDI0MSw4MjgyNDMuMTczNDQ1NDg3NCw5MTk3NDMuMDUxMDIwNjUzOCw4MTgxOTQuODY2MzY5MjQyMSwxODY1MDU3LjQ5NDgzODc4OCwxMTg5MzcuOTM5NjM3NzAwMDcsMTQ4OS4yMDU1MTQ1MzcxNDQ4CisyMyxXZWQgMTYgRmViIDExLDY1ODEyLjQwODEzNDY2OTg4LDU4NzYwLjg3MTU4NTkyMDMzLDM0MjAzLjYxMDA2NzU5MDM5NCw3MDcwNy44NDYzODQ1NTkyOSw3MTI3Mi43OTkwMDU5NTI5OCwxMTUyMTUyLjczMzU0MDkyMzgsMTI1MjA0My4xODE5MzQzMjM0LDEwMjYxNjguOTY4MDgxMDE1Myw4OTEzMzEuMzA0MzkzMTMwMiwxMTE0Mzg4LjU2MTQzMzA5MzYsMjI2Mjk5LjU0NTMzNzMxODE4LDEzMjI5MDUuMzY5ODk1NjcxMywyNjE4MTAuNTk4MDY4Mzk0NCw2OTUwMDYuMzY1MzEyMDE0Niw2MjEyMDkuMDEwOTQ4MTYzNiwxNDI2MDM5LjY2Nzg0NTE1MDIsMTAzMzEwOS40MzIyMjMzNDgsMjkwNTQ4LjY4NzQxNDYwNjMsODQ1NjI4LjU3Nzc0MzkzOTQsNTYzMTY0Ljk4MDE1Mzg1NzcsODMxOTcxLjM1NTUzMDgzMjUsOTIzODgzLjEwMjcyOTk1LDgyMTg3Ny44MTc4NzU0MTU5LDE4NzM0NTIuNzAzMTEwMTM1NCwxMTk0NzMuMzE2NTc3NzYwNDQsMTQ5NS45MDg4OTUyNTc1NjU1CisyNCxUaHUgMTcgRmViIDExLDY2MTA1Ljk5NDgzNjA3NDk1LDU5MDIzLjAwMTY0NTQyNjY4LDM0MzU2LjE5MTA5ODEzNjIsNzEwMjMuMjcxNDUzNjU5MDYsNzE1OTAuNzQ0MzA3NjU0MjcsMTE1NzI5Mi40NDM5NzE1NjEsMTI1NzYyOC40OTk5MzQ2NzEyLDEwMzA3NDYuNjY5NjI2MzkzNiw4OTUzMDcuNTAwMTQzMDMxOSwxMTE5MzU5LjgwNzI5ODU0MjUsMjI3MzA5LjA1OTE4MDE5NTY1LDEzMjg4MDYuODAxNDc3MTQ0NSwyNjI5NzguNTI1Mzk0ODQxOCw2OTgxMDYuNzYyODIxMDk3NSw2MjM5ODAuMjAxMjA4MTI0OCwxNDMyNDAxLjE3NzY4ODM4MTQsMTAzNzcxOC4wOTQ5MjA3NTcxLDI5MTg0NC44MTQyODcyMzMwNSw4NDk0MDAuODk1MzMyNTI2OSw1NjU2NzcuMjM4MTU0Mzg0MSw4MzU2ODIuNzQ4NzU5ODExNCw5MjgwMDQuNTEwODM5NzkwNyw4MjU1NDQuMTg0MjA4ODYzMywxODgxODEwLjEwNTgzOTEwMTYsMTIwMDA2LjI4MjU5MzA0NzYyLDE1MDIuNTgyMDg5MTIxODk3NQorMjUsRnJpIDE4IEZlYiAxMSw2NjM5OC4yNTUwMjcwNTM3LDU5MjgzLjk0NzMyNDc5ODIyNCwzNDUwOC4wODI3MjMwNDE2NzYsNzEzMzcuMjcxMzQwMjExOCw3MTkwNy4yNTMwMzk2NjE4NSwxMTYyNDA4LjkzMTY4OTk5MTQsMTI2MzE4OC41ODE4Mzc3MjE5LDEwMzUzMDMuNjg3Nzc5NzgxLDg5OTI2NS43MzAyNzk3MjkyLDExMjQzMDguNTkxNjIzODcxLDIyODMxNC4wMTE3NDQ4MTQ3LDEzMzQ2ODEuNTY4NjY3ODc1LDI2NDE0MS4xNzU2ODQ2NjQ4Niw3MDExOTMuMTUxODI5MTA4LDYyNjczOC44NzA0MjE0NzMsMTQzODczMy45NDQzNzI5Njg3LDEwNDIzMDUuOTM0MzM0NjUxNiwyOTMxMzUuMDg0ODgwMjU5NSw4NTMxNTYuMTY4NDg4OTYyOCw1NjgxNzguMTQ1MDM5ODM4Miw4MzkzNzcuMzcyODMwNjgxNiw5MzIxMDcuMjk3MjI0NTkxOCw4MjkxOTMuOTg0ODI4ODYxLDE4OTAxMjkuNzQ3MzgyNjg3NiwxMjA1MzYuODQwNTEyMjg0MjQsMTUwOS4yMjUxMzE1NDgxODU4CisyNixTYXQgMTkgRmViIDExLDY2Njg5LjE5MDI3MTM1Mzg3LDU5NTQzLjcxMDAyMDIzMzQwNCwzNDY1OS4yODU3NTUwMDc5Myw3MTY0OS44NDc3MjQyODQxOSw3MjIyMi4zMjY4OTU0NjYxLDExNjc1MDIuMjI0MDcyMTUwNCwxMjY4NzIzLjQ1NzM5Mjg3NjcsMTAzOTg0MC4wNDY5MjM2NTI1LDkwMzIwNi4wMTU5ODE4NjI2LDExMjkyMzQuOTQwODg3NzEyNiwyMjkzMTQuNDA4NDA4MjA2OTIsMTM0MDUyOS43MDI5MDA5OTc4LDI2NTI5OC41NTUxNTg2NjIyLDcwNDI2NS41NDg4NDk4NzE0LDYyOTQ4NS4wMzMzNDg1NTg5LDE0NDUwMzguMDAxNzgyNTg4NywxMDQ2ODcyLjk3NTAxMjQxNjgsMjk0NDE5LjUwNjA5NzMyMDgsODU2ODk0LjQxNzMwNTk1OTYsNTcwNjY3LjcxNDE5MTQwNDYsODQzMDU1LjI0NzUxMTY1MDksOTM2MTkxLjQ4MzgzNjQ0NjksODMyODI3LjIzOTI2Mzc4NzYsMTg5ODQxMS42NzIyNTU0MDg3LDEyMTA2NC45OTMxNzQyMzc4NywxNTE1LjgzODA1ODA4MDI0NjYKKzI3LFN1biAyMCBGZWIgMTEsNjY5NzguODAyMTM4MjI5MTksNTk4MDIuMjkxMTMyODQ2NjMsMzQ4MDkuODAxMDA5NTk3NjEsNzE5NjEuMDAyMjkxODU4NDQsNzI1MzUuOTY3NTc0NTIwMiwxMTcyNTcyLjM0ODU5MDM2NCwxMjc0MjMzLjE1NjQ1NDI4MzMsMTA0NDM1NS43NzE1MjYzMzQxLDkwNzEyOC4zNzg1MDI2NDI2LDExMzQxMzguODgxNjYxOTMwOCwyMzAzMTAuMjU0NTY2MzM2NTcsMTM0NjM1MS4yMzU3MjAzMjM5LDI2NjQ1MC42NzAwNTk1MzU4LDcwNzMyMy45NzA0NTUzNTg5LDYzMjIxOC43MDQ4MDE3MDM3LDE0NTEzMTMuMzgzOTIwMjIwNywxMDUxNDE5LjI0MTU4Nzg2OTQsMjk1Njk4LjA4NDg2NjM1OTgsODYwNjE1LjY2MTk0Njk3NjEsNTczMTQ1Ljk1OTAzNzM4MjcsODQ2NzE2LjM5MjY0MDUzMDEsOTQwMjU3LjA5MjcwNDc0MTksODM2NDQzLjk2NzExMDc4MDEsMTkwNjY1NS45MjUxMjg1MTUsMTIxNTkwLjc0MzQyNzY3MTMyLDE1MjIuNDIwOTA0Mzg3MDQ2NAorMjgsTW9uIDIxIEZlYiAxMSw2NzI2Ny4wOTIyMDI0MTE4OCw2MDA1OS42OTIwNjg2NDM5LDM0OTU5LjYyOTMwNTIyMDY1LDcyMjcwLjczNjczNDgwMjksNzI4NDguMTc2NzgyMjEwMzYsMTE3NzYxOS4zMzI4MTI4Njk1LDEyNzk3MTcuNzA4OTgwMzE2NSwxMDQ4ODUwLjg4NjE0MTU3NTIsOTExMDMyLjgzOTE2OTQ3NzksMTEzOTAyMC40NDA2MTExNTg1LDIzMTMwMS41NTU2MzQwMDYyNSwxMzUyMTQ2LjE5ODc3OTc4OSwyNjc1OTcuNTI2NjUxNzgyMSw3MTAzNjguNDMzMjc1Mzk2OSw2MzQ5MzkuODk5NjQ0OTQxNCwxNDU3NTYwLjEyNDkwNzU1NywxMDU1OTQ0Ljc1ODc4MDgyNzMsMjk2OTcwLjgyODEzOTUwNTkzLDg2NDMxOS45MjI2NDU4NjU1LDU3NTYxMi44OTMwNTI5NTI4LDg1MDM2MC44MjgxMjQzODg0LDk0NDMwNC4xNDU5MzU3NzI2LDg0MDA0NC4xODgwMzUzOTM2LDE5MTQ4NjIuNTUwODI5MjE0LDEyMjExNC4wOTQxMzEyOTMwOCwxNTI4Ljk3MzcwNjI2MjA3ODYKKzI5LFR1ZSAyMiBGZWIgMTEsNjc1NTQuMDYyMDQ0MDg1NSw2MDMxNS45MTQyMzg0OTg0LDM1MTA4Ljc3MTQ2MzEyMDA5LDcyNTc5LjA1Mjc1MDg0MjU5LDczMTU4Ljk1NjIyOTgyNjM5LDExODI2NDMuMjA0NDAzMzM3OCwxMjg1MTc3LjE0NTAzMzA1OTQsMTA1MzMyNS40MTU0MDgxMjMsOTE0OTE5LjQxOTM4MzYwNzYsMTE0Mzg3OS42NDQ0OTIzMzE3LDIzMjI4OC4zMTcwNDQ3NjI5NSwxMzU3OTE0LjYyMzg0MjkwNjQsMjY4NzM5LjEzMTIyMTU4MzMsNzEzMzk4Ljk1Mzk5NzM4MDMsNjM3NjQ4LjYzMjc5Mzc2MDksMTQ2Mzc3OC4yNTg5ODQ0MDgsMTA2MDQ0OS41NTEzOTY2ODE3LDI5ODIzNy43NDI4OTI5NTUzLDg2ODAwNy4yMTk3MDY1MjQ2LDU3ODA2OC41Mjk3NTk5NDI2LDg1Mzk4OC41NzM5MzkyMDY4LDk0ODMzMi42NjU3MTIzNTk4LDg0MzYyNy45MjE3NzEyNTksMTkyMzAzMS41OTQzMzk4OTA2LDEyMjYzNS4wNDgxNTM3MDc2LDE1MzUuNDk2NDk5NjIyNzQ0MworMzAsV2VkIDIzIEZlYiAxMSw2NzgzOS43MTMyNDg4NTc1Nyw2MDU3MC45NTkwNTgxMjYxNywzNTI1Ny4yMjgzMDczNTc4Niw3Mjg4NS45NTIwNDM1MzAwNSw3MzQ2OC4zMDc2MzQ1MzIxNiwxMTg3NjQzLjk5MTEyMDM5NTMsMTI5MDYxMS40OTQ3Nzc3ODIsMTA1Nzc3OS4zODQwNDkyOTg3LDkxODc4OC4xNDA2MTk3MzA1LDExNDg3MTYuNTIwMTU0MjMxNSwyMzMyNzAuNTQ0MjUwODA0NDcsMTM2MzY1Ni41NDI3ODIyMTgsMjY5ODc1LjQ5MDA3NjY5OTI0LDcxNjQxNS41NDkzNjU5ODMyLDY0MDM0NC45MTkyMTQ4NDksMTQ2OTk2Ny44MjA1MDgxMTM0LDEwNjQ5MzMuNjQ0MzI1OTY4MywyOTk0OTguODM2MTI2ODQ5NzUsODcxNjc3LjU3MzUwMjU0NDEsNTgwNTEyLjg4MjcyNjU5MzEsODU3NTk5LjY1MDEyOTUzNDcsOTUyMzQyLjY3NDI5MzQ2NzQsODQ3MTk1LjE4ODExOTc0NDEsMTkzMTE2My4xMDA3OTczMzM1LDEyMzE1My42MDgzNzMzNjU4NSwxNTQxLjk4OTMyMDUwOTcyOTYKKzMxLFRodSAyNCBGZWIgMTEsNjgxMjQuMDQ3NDA3NzMyNDMsNjA4MjQuODI3OTQ4MDYxNzQsMzU0MDUuMDAwNjY0ODAwNzIsNzMxOTEuNDM2MzIyMjE2MDIsNzM3NzYuMjMyNzE5MzM2LDExOTI2MjEuNzIwODE3MTQ3NSwxMjk2MDIwLjc4ODQ4MjQyNTMsMTA2MjIxMi44MTY4NzI1NzA0LDkyMjYzOS4wMjQ0MjU2MzU4LDExNTM1MzEuMDk0NTM3MDIwMiwyMzQyNDguMjQyNzIyODg1NjIsMTM2OTM3MS45ODc1Nzg3NDY0LDI3MTAwNi42MDk1NDYzNTg2NCw3MTk0MTguMjM2MTgyODcxNiw2NDMwMjguNzczOTI1ODMyOCwxNDc2MTI4Ljg0Mzk1Mjk1MSwxMDY5Mzk3LjA2MjU0Mzk0MDUsMzAwNzU0LjExNDg2NTE1NjUzLDg3NTMzMS4wMDQ0NzY4NTc0LDU4Mjk0NS45NjU1NjczMjY2LDg2MTE5NC4wNzY4MDgxNDQ3LDk1NjMzNC4xOTQwMTM4MTk2LDg1MDc0Ni4wMDY5NDk2MTE1LDE5MzkyNTcuMTE1NDkxOTU3OSwxMjM2NjkuNzc3Njc4NTE1OTQsMTU0OC40NTIyMDUwODYzOTA0CiszMixGcmkgMjUgRmViIDExLDY4NDA3LjA2NjExNzA4Mzg5LDYxMDc3LjUyMjMzMzYzMzksMzU1NTIuMDg5MzY1MTA2MDIsNzM0OTUuNTA3MzAyMDIwMTcsNzQwODIuNzMzMjEzMDYxMzYsMTE5NzU3Ni40MjE0NDA3MDI2LDEzMDE0MDUuMDU2NTE3MDgzMiwxMDY2NjI1LjczODc2OTEzLDkyNjQ3Mi4wOTI0MjE4MzY2LDExNTgzMjMuMzk0NjcxNzgyNiwyMzUyMjEuNDE3OTUwMjI0NzQsMTM3NTA2MC45OTAzMjE0NDksMjcyMTMyLjQ5NTk4MTE1MTA2LDcyMjQwNy4wMzEzMDY0MTY3LDY0NTcwMC4yMTE5OTUwMjMxLDE0ODIyNjEuMzYzOTA5NTQ3MiwxMDczODM5LjgzMTExMDE0MSwzMDIwMDMuNTg2MTU1NTQ4NzUsODc4OTY3LjUzMzE0MTM5MjQsNTg1MzY3Ljc5MTk0MjUxMzIsODY0NzcxLjg3NDE1NTY4OSw5NjAzMDcuMjQ3MjgzNTE5NCw4NTQyODAuMzk4MTk2NjgwMSwxOTQ3MzEzLjY4Mzg2NzAzMTcsMTI0MTgzLjU1ODk2NzE1MzU3LDE1NTQuODg1MTg5NjM4MTMxMQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BZ2luZ1NFSVJEaXNlYXNlX0ZEX1JlZmVyZW5jZS9BZ2luZ1NFSVJEaXNlYXNlL2h1bWFuMnRvLS9SXzIuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BZ2luZ1NFSVJEaXNlYXNlX0ZEX1JlZmVyZW5jZS9BZ2luZ1NFSVJEaXNlYXNlL2h1bWFuMnRvLS9SXzIuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEzMDJlZjMKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FnaW5nU0VJUkRpc2Vhc2VfRkRfUmVmZXJlbmNlL0FnaW5nU0VJUkRpc2Vhc2UvaHVtYW4ydG8tL1JfMi5jc3YKQEAgLTAsMCArMSwzMyBAQAoraXRlcmF0aW9uLHRpbWUsRUctRlJHLUcyMTAwMDEsRUctRlJHLUcyMTAwMDIsRUctRlJHLUcyMTAwMDMsRUctRlJHLUcyMTAwMDQsRUctRlJHLUcyMTAwMDUsRUctTE9FLUcyNDAwMDEsRUctTE9FLUcyNDAwMDIsRUctTE9FLUcyNDAwMDMsRUctTE9FLUcyNDAwMDQsRUctTE9FLUcyNDAwMDUsRUctTE9FLUcyNDAwMDYsRUctTE9FLUcyNDAwMDcsRUctTE9FLUcyNDAwMDgsRUctTE9FLUcyNDAwMDksRUctVVBFLUcyOTAwMDEsRUctVVBFLUcyOTAwMDIsRUctVVBFLUcyOTAwMDMsRUctVVBFLUcyOTAwMDQsRUctVVBFLUcyOTAwMDUsRUctVVBFLUcyOTAwMDYsRUctVVBFLUcyOTAwMDcsRUctVVBFLUcyOTAwMDgsRUctVVJHLUczMDAwMDEsRUctVVJHLUczMDAwMDIsRUctVVJHLUczMDAwMDMsRUctVVJHLUczMDAwMDQKKzEsVHVlIDI1IEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyLFdlZCAyNiBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMyxUaHUgMjcgSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzQsRnJpIDI4IEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCis1LFNhdCAyOSBKYW4gMTEsMC4xMDI3MDU2MzcxNjU2MzEwMSwwLjA4OTM2OTYyMzExMTUzMjQ5LDAuMCwwLjAxNzM5ODg3OTk0NTgyODU1NywwLjAsMC4wMzE1MDczNzAyODY4NTA2OCwwLjAsMC4wLDAuMDMwNTczMzk1MjM3NzA4Njc1LDAuMDI5MTQyNjcxODgyNjY4MjEsMC4wLDAuMCwwLjAsMC4wLDEuMzcyNjI1NjI5NzM0ODY0LDIuNzE2NTI5OTgyNjk2NTI5LDIuMjgxNjIxNDI1NjY2MDY0NSwwLjY0MDg5MjI3ODMwMDEyNDIsMS44NjczNTk3OTkzMjg2NzcsMS4yNDM2NDg4NjM5ODkxMiwxLjgzNzE2OTIzNjAxMzk4NDIsMi4wNDAyNzg0Njg5OTMxMjcsMC4wLDAuMDMzODYxNTEyMTc3OTE3ODEsMC4wMTk4OTI0NjM5MzI5NzEyNDgsMC4wCis2LFN1biAzMCBKYW4gMTEsMS42MzI1NzAyOTg5ODI0NzM1LDEuNDU0NjE1NjY0ODQxNzExLDAuMDAzOTk3OTU0NzQwMTMwOTI1LDAuMjkyMDU0OTAxNjg1NzUzNSwwLjAwMzg4NjE5NDgzNzYxMDAyMywwLjY0OTY2OTM0NDI2NDE4MzMsMC4wMTY5MjQ1MTYyMDc0NTQ2NzIsMC4wMzQ4NDQ1MTYxMTc0MzMzMSwwLjYzMDExNTY5MDkwNjMwNCwwLjU5MjY5Mjg1NDc3MzAyMzQsMC4wMTExNDQ2MjI4MzUxNzUyMDcsMC4wMjgxMDEyMjUxNzM5ODIzMjIsMC4wLDAuMDA1MTA5MTEyMTA1NjI5OTgxLDE4LjM0MzQ1MjQ5ODU2NzY5MywzMy4wODMwMTQ5MjQ1MDg0LDMwLjUxODM1NTY5Nzk5NDIsOC41ODMxMzQ2NTA4NDg3NzIsMjUuMDEyNjE1MDAyMjIzODE4LDE2LjYxNTcwMTA3NzM2MDYzNywyNC42MDgwMDQ0OTkyNTAyODUsMjcuMzI4OTQ0MjMyMzQxODg2LDAuMDA2NzI2MzMzNzgzNTg1ODMzNSwwLjcyNDc4ODM2NjA2OTI0NTUsMC4zNTE0NDcwNzU5Mzc4OTI3NiwwLjAKKzcsTW9uIDMxIEphbiAxMSw2Ljc3MTYzMDM3NzM4MjI3NzUsNi4wNTMxMjI4MTkwNDc0ODk1LDAuMDE4OTAyMTc0MTczMzgxMDUzLDEuMjIwNzMxMzk0MzI4MjQxNCwwLjAxODM3Mzc5MDAwNTkwMDc3NywyLjc4MTgyMzg1NzU3MzU4OTYsMC4wODAwMjE0NzA1MjA4NDEwNSwwLjE2NDc0OTU0NjI0OTg0NTkyLDIuNjk3OTYwMTYzOTE4MDYyNCwyLjUzNDE5MDUwOTUyMjM5NjQsMC4wNTI2OTI4ODg3OTU3MzQ5MywwLjEzMjg2NjYwNTA5MzczNjQzLDAuMCwwLjAyNDE1NjU4Nzg5NjIyMjIxNSw3NC4wNzY0Njk0OTI5NDg5MywxMzEuNDA1MjI3NDc2MzQ5NDcsMTIzLjI2MTExNzI1NTY2MDc2LDM0LjY3MzkxNjg5MTE4OTMzNiwxMDEuMDQ3OTY3OTMwMzkzMjEsNjcuMDk2NDg1MjI5Njc5NTcsOTkuNDEzMjQyMjgyNTIwOTgsMTEwLjQwNTc1NTU3MDA0NjQsMC4wMzE4MDI3OTUzMDYzMjMwNSwzLjExNTM0MzIzMzQ4NjE1NSwxLjQ3ODYwODc0OTI0OTc0MjQsMC4wCis4LFR1ZSAxIEZlYiAxMSwxOC4xNjI5NTAxMDg2MjU4OCwxNi4yNjA3ODE1NDE2MTU2NTMsMC4wNTQwNjY2NDA1NTQ1MzA5NiwzLjI4NTg4MTYzMjY0OTE4OSwwLjA1MjU4NDk4MTA0MzM2MTk0LDcuNTgyOTE2NDA1NzEzNTEsMC4yMjk4NDYxMjk2ODk5Mjg3LDAuNDcyNDY5MDI1Nzg0NDg0NDYsNy4zNTQwMDM1NDc1NzA2OTIsNi45MDI3MTgyMjgzMjY0ODksMC4xNTA4ODI5MzEyNjk4MjE5NCwwLjM4MTM5OTYzMjMwMDA1Mzk3LDguMDc3ODI4NzkzNjg0NDg0RS01LDAuMDY5NjEwNjU5NTkzMTAwMiwxOTYuMzc3NTc1MzM3MDA1NCwzNDUuNTYyMTQzMDQyMDQwNSwzMjYuNzk1NDY5ODMwOTI4NTQsOTEuOTQwNTM1MTkzMzU3NjIsMjY3LjkzOTAwNTc3ODUxOSwxNzcuODY5OTIyODc5MzY0NDgsMjYzLjYwNDI3Mzg0MTI0ODUsMjkyLjc1MjMyMDQyNTQwNTA2LDAuMDkxMzAxMzMzNDU5NTI2NCw4LjUwOTk1Nzg5NjQxNjI5NCwzLjk5MzEzMzgxNDU3NjQ4NCw0LjE2MDc2NDY3NjE0NDYxOUUtNgorOSxXZWQgMiBGZWIgMTEsMzguNjgxMDc5MTMwMTI5NTEsMzQuNjY5ODUzMjMzMTMxODcsMC4xMjE0NzIxMzU1MjcxNTk2Myw3LjAxNTA4MjU0NzU5NTM2NCwwLjExODI1OTA1NTQzNDQ0MTcsMTYuMzY1NzYxNTMwNzM4NDUzLDAuNTIwMTE4ODk2NzM0NzAzOSwxLjA2NjI2OTYxMjM0MzAzMzcsMTUuODcwODg4ODIxODg0NTYsMTQuODg4MDc2NDEyNTkzMDQ0LDAuMzM5NjIwOTIxMzU0MDMyNzcsMC44NjIxNjA3NzMwMjM5MDUzLDQuOTY0NTU0MDkxOTUyODM3RS00LDAuMTU4Mzk3ODM1MzQ3MDI4Nyw0MTUuMTU5NjA1NjA4NTU0Miw3MjYuMjM0NDIwOTQwODQzNiw2OTAuOTMxNDQwNzA3Nzk3OCwxOTQuNDA5MzA1Mjg1MDcyMSw1NjYuNTYyMjQ4NTQyNDg4NSwzNzYuMDI2OTYzMTM2Mzc2OTMsNTU3LjM5NjQ3NDcxMzMzMTcsNjE5LjAzMDkzNTY3MzYxMTIsMC4yMDY0MjgyMDYxNzUxNTY2NywxOC40MDIzMjQ1NzY5OTAzNTMsOC41NDc5NzU0ODE5NTQ3MDUsMi41NTcxNTU3MTE0ODg2OTI0RS01CisxMCxUaHUgMyBGZWIgMTEsNzEuMzYwMTc2NTY4ODg1OTYsNjQuMDI4NDc2MDM3MzM0OTgsMC4yMzY1NjY4Nzk4OTY1MDQxLDEyLjk2OTEyNTU4ODQwNDg1OSwwLjIzMDYyMDY0MjAwMTI0NjI3LDMwLjYwMjQ3MjI1MTE0OTMzMywxLjAyMjkwMjE1OTM5NDA5NzIsMi4wODkyODEzMjMyODE0NjM1LDI5LjY3NTEyODQzOTQ1MDAwNiwyNy44MjA0NzQyNzY5MjIzNzYsMC42NjMwOTY4MTU5OTcyMjA4LDEuNjkzMTQyNzMwNzM3Nzc1LDAuMDAxODE4MzQxNDY3MDI3NzI0LDAuMzEzODU2OTM5ODE0Mjg3MSw3NjEuNTc4NDg0OTE2NTU2MSwxMzI1LjAxNDU1MjQyMzg1OTIsMTI2Ny41NzYzOTAwNDU2MDYzLDM1Ni43MDgyOTIyOTQyNDQ4NywxMDM5LjU0Njg1MzQ3NjYyMjgsNjg5Ljc4MjUzNjkzMzEyOTgsMTAyMi43Mjk3OTIxNDg5MzMsMTEzNS44MTkxNzM3OTU0MzA1LDAuNDA1NTA1Nzg1ODMzNzkzNTQsMzQuNDg0MTc5NTEzNjgwMTIsMTUuODQ1OTY4NDc1MDU5MDQ1LDkuMjQ3NzM0NDQxNDM1MDhFLTUKKzExLEZyaSA0IEZlYiAxMSwxMTkuNDM5NzU3NzE2MDAxMjQsMTA3LjI4NjMwNjc5NDIzNjE3LDAuNDE5ODEwMzQ3NzkwMzM5LDIxLjc1MTU0NDkyMjk5ODkzNSwwLjQwOTk2MTI1MDUwODU4OCw1MS45ODQ3NTg1MTAyMTIwOCwxLjgzNzY3Njk2OTA4NzcyMTcsMy43MzYwODU3Njg5ODc4ODk1LDUwLjQwNTE3OTM4OTQ3NTU1LDQ3LjIyMzMwMDgwOTUzNjg0LDEuMTgwNTE1NTA3MzcyNTQ0NiwzLjAzNjI1OTI1OTIxNjA0NywwLjAwNTE2NzIyNTg0MTU3MTAxLDAuNTY5MTAxMTcwNjE3MzI4LDEyNjguNDA3NDgzNjExNzU4LDIxOTQuNjAxMDI3NTc5MjYwNSwyMTExLjM3MTk2MDgwMDcwNSw1OTQuMjUyMjM0OTcyNjQzNSwxNzMxLjgxMjc3NDYyODgxNTUsMTE0OC44MTM3NTA0Nzk2MDk4LDE3MDMuNzk4NDM0Mjg0NTM5NiwxODkyLjE5ODEyNjY5MTEzNDgsMC43Mjc0NjI4NzU2MDAyLDU4LjcyMjk0ODg4MTE5NzY2LDI2LjY1NTQ0OTYzMzI2MDM4LDIuNTcyMTk4MzgyMDQ5NTUyNUUtNAorMTIsU2F0IDUgRmViIDExLDE4Ni40OTM2MzA1NTY1OTUwNiwxNjcuNzE1ODI1Mzc0OTQ4MDMsMC42OTg5OTc1ODgzMzExMzgxLDM0LjAzMzYyOTk3ODg3NzExLDAuNjg0MDI0MDg2MTQyNTk1OCw4Mi41MzQxMzYwNzE0MTA3OSwzLjEwNTEwMTk4MDY0ODkyNzcsNi4yNzc3NTQ2OTc5OTc4MDksODAuMDE3NzA2NjAxMjI2MzUsNzQuOTEwNTcyMDgxNTU3MDYsMS45NzMyMzU4NDE5OTU0MzcsNS4xMTkxMTM1NjAyMTE0NDYsMC4wMTI1Nzg5OTE0MDYxMTA5NzYsMC45NzIxMzg4MzU3MzE3MTg3LDE5NzEuMjcyODkyMTA4NDc3NywzMzkwLjM4MzIyNDY5MDQ0MTIsMzI4MS43Njk3NzY4NDAwMTI2LDkyMy44MzQzNDUwMjIzMjM4LDI2OTIuMjk0MzA0Mjc3MjE1LDE3ODUuMzc4MDg0Nzg3MjQ1NiwyNjQ4Ljc0Njg5ODAyOTM3OCwyOTQxLjYzNTk0MzYwNDEyNzUsMS4yMjcxMjQ0MTIyOTA4ODQ2LDkzLjQ5OTU5NzgyODI3MzY0LDQxLjg0NjA0MTMwNzQ5NDMsNi4wOTI0NDczNzI2OTI3NzdFLTQKKzEzLFN1biA2IEZlYiAxMSwyNzYuNjE4NzE0NDc1NTg2NywyNDkuMDg4Njg5NTQ0MzMyOSwxLjExMjUwMzY1MTI4OTg3NjUsNTAuNTkxMjA1MzM0NzQ0ODg1LDEuMDkxMzQ4Mjk1MTkzODk2MiwxMjQuNzU4OTI5NjQ0MDQ2NzYsNS4wMjY2NjY4MDQ5OTc3MzY1LDEwLjA5NzI3NzAxNDcyODMzLDEyMC45Mzg5MDU4Nzk4ODI0NCwxMTMuMTI1OTQ5NzYzODI3MjQsMy4xNTQ4MTE4ODIxODQyNjc0LDguMjY1OTcwMzkwMzc4NTQ1LDAuMDI3NTY2ODM5MjQ4Nzk0MTQ4LDEuNTkzMjc2ODE3NjUwMjI0MywyOTEwLjQ5MzYyNDMyNjc1Miw0OTcyLjk0NjY4NTEyMjYxOCw0ODQ2LjExODg2NjE4Njk0NCwxMzY0LjUwNTQzMDI2Njc4MzYsMzk3Ni41MDA0MDE5NDI5MjUyLDI2MzUuOTc4MzYzNTMyMTI1NSwzOTEyLjE4OTQzNTA5MjYxOTUsNDM0NC43ODU4MzU2MTIxNDQsMS45ODI3NTU0NTY1NjQwMTQ5LDE0MS44MDQ4NzkzMzM1OTI2OCw2Mi40NDA1ODMxNzU2NzM1MSwwLjAwMTI5Mzg2MDExNzUzNTIzMjIKKzE0LE1vbiA3IEZlYiAxMSwzOTQuNjY4Njc0MzMwMTQ4NjMsMzU1Ljg5MzczNzk0MzE5MTA3LDEuNzEzNjU2Mzg3MjQ4Njk2NSw3Mi4zNTEyODEyMzc0NDk3MSwxLjY4NTgwMjg0MzU4Mzk1NjcsMTgxLjg2MDIxNzMwNTc3Mjg0LDcuODkxOTU2NzA1ODkyNzE5LDE1LjczODE1MDUzMzU5NjM4LDE3Ni4yNjI4MTc5MTE3MjIyNywxNjQuNzI0OTgxNTY4OTYxNjUsNC44ODQ2NTk0NjM1MjE4MTMsMTIuOTQwNTI0NjA1ODEwMTM2LDAuMDU1OTY2NTMwNDQ3Mzg2NDM0LDIuNTM1NTM4MzM4OTA4OTg4LDQxMzMuMzU3MTY1MzEzODg4LDcwMTEuMjA3NTY4Njg3MTYyLDY4ODMuNDg3MTE3Nzk2ODQsMTkzOC42NjI2ODk5MjY3OTcsNTY0OS42ODUyNzA3Nzg4MTIsMzc0My40MjI3MzI1NTc1MTQsNTU1OC4zMzAxNDI3NDA2NDk1LDYxNzIuOTUxMDc5ODA2MTE3LDMuMTA2NTA2MjE3ODA2MTMyLDIwNy40OTg1MDgzNjA5OTY1Nyw4OS42ODE0ODAxMjE3MTQ1NywwLjAwMjUzODg4OTQ1NTM2ODQyMzQKKzE1LFR1ZSA4IEZlYiAxMSw1NDYuNTIwNzk1ODUyMjMxMSw0OTMuNTg2MDgxOTQ0NDgwNSwyLjU3NjUxMzEzNzc0NDI1NjMsMTAwLjQ0NzgzNTcyMDQ4MTIxLDIuNTQyNjE0ODAxMjQ5NjQzLDI1Ny45OTI5MDM3MzM1MzU2LDEyLjExNTc5NjE5NjQ1NTY1MSwyMy45Njk3OTc0Mjk4MzcxNDMsMjUwLjAwMjQyMTQ4MTY1MDE1LDIzMy40MDU4NTE5NjQ3NTE1LDcuMzg2MzA1ODA5MjE5MTc1LDE5LjgwMzg4NjA3NzQxNzIzLDAuMTA3MTc5OTIxMzA4NzcwNTIsMy45NDkwNjA3MjQ4MzAyOTQyLDU2OTYuNzA0ODAyODQwMzgxLDk1ODUuOTkxMjA2NzQzODQsOTQ4OS4wMDU3NTEzMzczMDMsMjY3My4yODg5ODE0NDM1MjUyLDc3OTAuNDU2MzU4MzgxMDE5NSw1MTU5LjE2NDY4NjMxMTYzMSw3NjY0LjUxMzcxMTQzODU0Myw4NTEyLjAyODIzODM5NjczMSw0Ljc1ODYxMzAwMDU5MzM3MiwyOTUuNjQwODQ5NjYzNjE0MywxMjUuMTExMjMyMTMwNTg5LDAuMDA0NjkxOTI2NzU4NzMzMDAxCisxNixXZWQgOSBGZWIgMTEsNzM5LjM2MzQzNjc3Nzg0NDEsNjY4Ljg1NTMwNTk3NzE5MDEsMy44MDMzODk5MTQ4NDU1NzIsMTM2LjI4NjU4NjMxMjkxMjY1LDMuNzY2MjgwNTU4MDAyMTg2LDM1OC41OTEzMjU0NzY2MTEsMTguMjg4MjA4ODk2Nzc1Mzc3LDM1Ljg3NDQ5OTQ4NDAxNjUyNSwzNDcuNDAyMzIwMzkxMTI1ODQsMzIzLjk5NjgxMTg1NzQwNjU2LDEwLjk3MTQ0ODgzODY0NTExNSwyOS43OTIxOTQwNjMxMTExODIsMC4xOTU5NzEzODU2MDM1MjU5LDYuMDUwNzMyNDE1Mjg1NjQ5LDc2NjkuNjkyMzY1NjQ4NzUsMTI3OTMuOTExNDk4NzU4MDQsMTI3NzguNTEzMTMzMTM0MTE2LDM2MDEuMjc5MjE2NjQ4NDc1LDEwNDk0LjYzNDg0MTM1NzExNiw2OTQ1LjgwMjIyNjIwMTAzOCwxMDMyNS4wMjQ5MjExNTAwODcsMTE0NjYuNzI2NTM4ODA1NTQ2LDcuMTY2NDYxOTc1NDM4MDQ1LDQxMi45MTEwMjUzOTcxNzcsMTcwLjY2Nzc1ODE4NTcxNTcsMC4wMDgyNzE2NDk2OTU2OTMKKzE3LFRodSAxMCBGZWIgMTEsOTgxLjk4NjE2MjYzODA5ODQsODg5Ljg5NTQ3MDAyNDk1ODEsNS41MzQ1ODIwODAzNzUwNzcsMTgxLjYxODc5NjU0NjA2NjgsNS41MDA4NTQ3NjM3MzMwMzcsNDkwLjc3MTc5MjYyODc2NzQ2LDI3LjI0MTAyNTIxMzk4OTkxNCw1Mi45NjE5MDQwNDYwNzYzMDYsNDc1LjMyNDYwNzc5MjM0Nyw0NDIuODExMTMwMDQ1OTAwNywxNi4wNzEzOTg2NTQ5MDEwOCw0NC4yMTk1ODkzNjg4OTM4NSwwLjM0NTAyNzQ4OTA5OTM2MDI2LDkuMTUwNzI2OTk5MzUwNzA4LDEwMTM2LjU0NDIzNjkxOTU4NCwxNjc1MS4zOTk1Mzc5Mzk1MDIsMTY4OTMuMTkxMjAxMDQ0ODEsNDc2Mi43NjYyMDY3MjQwODksMTM4NzkuMTEyNzA0NTE4NDExLDkxNzkuNTcxNTM3MTA2NTgyLDEzNjU0Ljg4NTEzMjQzMzA2MywxNTE2NC43ODM3ODI3NzI4NjIsMTAuNjQ5OTU4MzQ2ODY3Mzc2LDU2OC4xMjk3MTQ1MTQ3NDg4LDIyOC43OTU1MTcxMDQ5Njk5MiwwLjAxNDAzNzY5MjI4MjY3ODg5MgorMTgsRnJpIDExIEZlYiAxMSwxMjg1LjA0NTUyNTE4MzIzMTEsMTE2Ni42NTA1MjcyNjg4NzgyLDcuOTYwODMyMzgwMzAwNjksMjM4LjYyNDAyNjYwOTI2OTUsNy45NDMyNTIwMTIyNTQ5MjIsNjYzLjgyNzY5NjQ3OTMzMjEsNDAuMTM2MTg5NDMwNjYzNzM0LDc3LjMxODk3MzI0ODAwMTc0LDY0Mi43MjI0MDM1MTc4OTg2LDU5OC4wODMyNzc2NjQ5OTgxLDIzLjI3NzkzNDYwMDQwNzc5LDY0LjkxNDA1NzQ5MDUwNzQ1LDAuNTg4NTY5MTM2MzQ0ODg1NywxMy42ODgxNDA4ODI3MzQ2NDIsMTMxOTkuMDMxNDg3NzM2MzQyLDIxNTk4LjY4MDUwODMxODIwNCwyMjAwMy43MzkzNzU4NjA4NzQsNjIwNi4zMTUwNDg0NzY2NTYsMTgwODUuMzI0NjAxODM2MzUzLDExOTUyLjU5MjA4MTIwMzk1OSwxNzc5My4yNzAwNDQ3MDU0NSwxOTc2MC43NjE0NjMwNDA1NzcsMTUuNjU1MTAxMDk4MDI3NTY4LDc3Mi45MDk5MzIyMTc3NjgxLDMwMi41NzM0NzY5OTYxNTQ3LDAuMDIzMDg1MDM1Nzg3Nzg3MzEKKzE5LFNhdCAxMiBGZWIgMTEsMTY2MS4yNjY1MDIxMzQ3OTYyLDE1MTAuOTk2MDYyODc4ODk4OCwxMS4zMzkyNTAwOTA0NjM4ODMsMzEwLjAwMTI3NjE1ODMwNjcsMTEuMzYwMzc4MjI4MTI5NTQxLDg4OS44MzY0MjUwNDcwMDUyLDU4LjU4MjQ1NTIzMzI5MjcwNiwxMTEuODA1NjU2NjEwNTI2Niw4NjEuMjE4NzM2MDgwMDYxNyw4MDAuNTAzMjc5MjY0ODk1NCwzMy4zOTYyMTU2NTU4MTQwMDQsOTQuMzk2MDM4MDQwNjQxMjcsMC45Nzc0MTQ4Njc3OTUwNDk4LDIwLjI3ODY4NDA2NjEwMjk3NiwxNjk3OC4yODIyODAzODUzNywyNzUwMy40MTA5OTk4MDMxMjcsMjgzMTMuNDIxMzgzMDA3MzEsNzk4OS43OTQxMjc5MjMwOTUsMjMyODEuNzc1MDYyNjQ5ODc1LDE1Mzc0LjUwOTE1Njg3MzA4NiwyMjkwNS45OTgwOTUyMDQ4OCwyNTQzOC44MDc1Mjc4MDQwNywyMi43OTgyNzc0OTc2OTM5MzgsMTA0Mi40NjUwMzQxMjc2NjA2LDM5NS44NjA2ODI5NTQ0MDM5NiwwLjAzNjk3MDg1NjgxMTg2MDM2CisyMCxTdW4gMTMgRmViIDExLDIxMjUuNTIzNjAyNzgwNzA5LDE5MzYuODAyNjg1OTk3Mjc0MiwxNi4wMTM1NjM5NjYxMDExNzQsMzk5LjA2NzEwMjk4MDI0OTg0LDE2LjExMTEzNjc5NTc1MzU4OCwxMTg0LjQwMTIzMTU0MTk2Miw4NC43ODkzMDI3OTk2NDk4NywxNjAuMzA5NjU3NTg1MTM2MDUsMTE0NS44MTE3MzQ5MzUzMjgzLDEwNjMuODY5Njc3NjM4OTI4NCw0Ny41MTMxNTAxNTM0OTAwOTUsMTM2LjExMjc5MjQzMzAzMzcyLDEuNTg2MDQzMTg4NjA2NDg4NSwyOS43NzgzNTYyMjMyNjUxNzgsMjE2MTUuMzgyNzE5NDE5NDAyLDM0NjYzLjU2NTUzMTExNDE3NSwzNjA1OS4wNjQyMDA4MzY5NywxMDE4MC42NTYxMTE2ODMzNDQsMjk2NjQuODQ0MzM1ODU5NTgzLDE5NTczLjA0NDM4NDMyODYzNCwyOTE4Ni4zMjQ4OTIyMjU0ODYsMzI0MTMuNTM3NjA4NzQxMzksMzIuOTI0NTk1NTY0NzUyMTEsMTM5Ni42MTAwODgzNjY4OTczLDUxMy40NTk0MDI0NzA1NjQzLDAuMDU3ODg0MzkzNjk5MjA1NDUKKzIxLE1vbiAxNCBGZWIgMTEsMjY5NC43Mjg4NjQ2MDQwOTksMjQ1OS44MTAzNzQ3ODY5NDc3LDIyLjQzOTc5Njg1NjY2MDkxMiw1MDkuODU3OTEyNjcyOTU2NiwyMi42NzQ2MzAzODM5NTM0MDYsMTU2Ny41NTUwODA1MDkwNDc3LDEyMS43Njk2NTc5ODE2Mjg5NywyMjguMDc3NTIxNjgwNDUxOTgsMTUxNS43MzAxMjgyMDA0NDkxLDE0MDUuODg1MTIwNTAxMzI4OSw2Ny4wODU1NzcyMTUxOTY0NSwxOTQuNzQ1NDUyNDgxMzI4MTMsMi41MjI0MDI0MjgxODA0MjE0LDQzLjM2ODMxNTQ2NzA5OTgyNiwyNzI3MC4wNzMxNzA5NzI3MjIsNDMzMDkuMDA1ODY0NDUxODQsNDU1MDguODI2NjU2NjI0MTIsMTI4NTUuMjg1OTgwMDU4MDU5LDM3NDU2Ljg3NDU1ODc3MjksMjQ2OTIuODI1OTQyMTIxMTEsMzY4NTMuMDYwNzY2MTA0MTMsNDA5MjcuOTQzMTI0NzQyNDUsNDcuMTg0NjAzNDc4MDg1ODQsMTg2MS4wMDAzNjc1MTY5OTMzLDY2MS4yOTQzOTU5NzE3MjA2LDAuMDg4ODczNzkzNDM1MTU1OTcKKzIyLFR1ZSAxNSBGZWIgMTEsMzM4Ny40NDE1NDYwMzM4NTk2LDMwOTcuMjMxODQwNzk5ODUzNywzMS4yMTg2NzA0Nzg5MDQyMjIsNjQ3LjIzMTU4MDkxNzY1NjksMzEuNjg2MjAxOTc0OTgyMDU1LDIwNjQuODU2ODQ2NDAyNDMsMTczLjYwNjQ1NTY5NDAyODM0LDMyMi4xNDM5Njk1MzM5NDY2MywxOTk1LjQ2NTIwMzY3NTMwMDIsMTg0OS4xMjE3OTI2OTAxOTYzLDk0LjA1Mzc0NTI2Mjg3NTYxLDI3Ni42MTA1NjUxNDA4MzY4LDMuOTQxNDgzODMxODkxMDEyLDYyLjY2Nzc3ODA2OTk4ODE4LDM0MTE2LjczOTcxNjA5OTY4LDUzNzAwLjk5NTUxNzEzODEsNTY5NTUuMzc1NzQ1NzIwMjYsMTYwOTcuMDIxMDU3NjkzOTY0LDQ2OTAwLjM4NzMzNzQxNDEzLDMwODkxLjc3NDY0MjU5NzkxMyw0NjE0NC44ODAwNjg1MTcyNiw1MTI0Ny4wNjk4OTU2MTQ2Myw2Ny4xMzUwNDU1ODE4NDA3MywyNDY4LjY1ODU5NDY2NTY0MjMsODQ2LjYwNDU0MDMyMDg4MzksMC4xMzQxNDgyNDQyMDA3MTY3CisyMyxXZWQgMTYgRmViIDExLDQyMjMuMTE1MDk4NzAwODU4LDM4NjcuMDA1NDc0MDQ2MDg4Miw0My4xMzYyNjU0Njk5MTM5Nyw4MTYuOTYwODM0MDcxMzY0Nyw0My45ODMzMjI0MTI4MDA0NiwyNzA4LjcxMjM2NDIwOTQ0MjUsMjQ1LjgwMjM5MTI5NDA2NjMsNDUxLjg4Njk3ODU1NzA5MDMsMjYxNi4wMDU4NTUxNzQyNTcyLDI0MjIuMTg2MjU5MTk5OTY4NCwxMzAuOTg2ODkwMTM2NTI0MywzOTAuMTgzOTM0NzAxNDgxNSw2LjA2NDAyNzA2MjAxMjgzLDg5Ljg4Mzg0OTQ2NjczNTEsNDIzMzYuOTI4MzA3NzU3NTEsNjYxMjguNzcwODI2NDk3OTYsNzA3MDMuMTU4ODI1MTI1NzYsMTk5OTIuNDYzNTU1Mzk4NTcsNTgyNDcuMzMwNzIzNjAyOTQsMzgzMzQuMzQ2MjA0NTA2NzIsNTczMDkuNzM2ODUyNjg2MDIsNjM2NDYuMjYyMTMwNDQ3NTgsOTQuODcwOTI2MDUxMTUwMjYsMzI2MS44NTAwODEzOTcwMDYsMTA3OC4xMzk2MzIzOTY0NTcsMC4xOTk0NzkxNzQ4NTM0NzY4OAorMjQsVGh1IDE3IEZlYiAxMSw1MjIwLjkyMjk5NjM0NTU2Niw0Nzg2LjY0NjUzOTc4NTUyNCw1OS4yMTQ2NDE3NjQ4NjI2MDYsMTAyNS44MDc0NzAxNjM3ODc3LDYwLjY2MzcyNDU5NDUzMTM1LDM1MzkuOTUyODMwNDY1MTM2MiwzNDUuNzM3NDgwMDc5MjMyMiw2MjkuNzQyNTY4MTIzNjU3NiwzNDE2LjMwMTAxNDEyODAwMTUsMzE2MS4xMTQwODgwMTc2MzQsMTgxLjI2OTE5NDQwMzczMjg1LDU0Ni43ODE3NTk0NjMzODg3LDkuMjAyMTkyMjk4MDYzNzI3LDEyOC4wMDk3NjcwMjgwNTQ1NCw1MjEwNy44ODMzMTIzMjE4NSw4MDkwMi4yMTMxMTI3NzE1NCw4NzA0OC45MzM5NDA1NTg4OCwyNDYyNS44NDY2NTM1NDQ3Miw3MTc0Mi42NjQ1NTExOTc1NCw0NzE4MS4xNzY0MjAzODg0Niw3MDU4OC43MDYxNTU1OTQ1Myw3ODM5My4yMTYxNTgzMTM3LDEzMy4xOTgxNTE3MjA2OTkzLDQyOTQuMzcxMTAwMDI2MTU3LDEzNjYuMzUwNjUwMzA4MDY4LDAuMjkyNzMxMTIzMTU1NzU5NworMjUsRnJpIDE4IEZlYiAxMSw2Mzk4LjE2Nzc4MDkxNjU3OSw1ODcxLjcwOTkzODI1Nzg0OSw4MC43NzQyMTUwNjM2MzM3OSwxMjgxLjU2MjkwNjcyMjI3Niw4My4xNTg1ODI5Mjg3NDgzNiw0NjA5LjY5OTc4MDQwMTYzNTUsNDgzLjI2NTQyMjMzNTE2NzMsODcyLjEyMDQzMjY0MDUyMzYsNDQ0NC45NjcyNzA2NDI0NjIsNDExMS4wMjMwNzA0Nzc0NTEsMjQ5LjMzNTk5MTI5MDY0NjUyLDc2MS40NDI1MjYyMDM3NTU1LDEzLjc5NDY0MTU2MTc2NTkzMiwxODEuMDg2MjI2ODk0NzA4MDYsNjM1ODcuMjM2MTM1NjU4MDEsOTgzMzkuNzc2OTgzMTIxODUsMTA2MjU1Ljc5NjE5NjI1NTgyLDMwMDcxLjUzMjQ5MjY2MDExLDg3NjAyLjUxODQyMTE4NTY3LDU3NTc1LjIzODMyOTQzNzcsODYxOTQuNDgxMzg2Mzk2MDMsOTU3MjQuMTAwNDcwNTY0MywxODUuODU4NDY3OTM3MDcxNzQsNTYzNC4zMTk0Mzc1NzcyODU1LDE3MjMuNTU2MjM1MjIzOTk1NiwwLjQyNDU2MTI0OTY1MDE0NDc1CisyNixTYXQgMTkgRmViIDExLDc3NjguMzgwNTE3MDY4MTI0LDcxMzMuOTgwNzgzNDU3MjI5LDEwOS41MDk2MDU2NTY0NTMzNywxNTkzLjAzNzQxNDU2ODg5NiwxMTMuMzIzOTAwMzQzMDI3MSw1OTgxLjUzNzg0Njc0MTQ3NCw2NzEuNDg3MzM0ODQwMjIyMiwxMjAwLjU2OTE0MzQzNjMyMjUsNTc2Mi4yNDcwNTQ0ODEwMDMsNTMyOC4wNDg5MTc5MzgwMjY1LDM0MC45NzE2MzkyNjU4OTk0NiwxMDU0LjA2Mjc5Nzc0MDczNDQsMjAuNDU0MjYzMTI0ODY5NDk1LDI1NC41NDQzNTk3MzAzNDMyMiw3Njg5NC45NjIwMDY2NDE0NCwxMTg3NTEuMjI0NTg3NzI5MSwxMjg1MjIuNjQzMjY3MDc2MzgsMzYzODUuMjIxMzMzNDk3NzksMTA1OTg4LjYxNDc3NDU2MTA3LDY5NjI1LjUxNjQzMzgyMDg2LDEwNDI4Ni4xOTQ1NjM2ODc0OSwxMTU4MTUuNTkzNzE0MzgyNTksMjU3LjgyMTM0Njk4NjI4MzMsNzM2Ny40MTUxODk0MDc2MjEsMjE2NC4wNjIyNDkxNjU0MDY3LDAuNjA5MzM2NTY4NjIwNTI0MQorMjcsU3VuIDIwIEZlYiAxMSw5MzM5LjM0NTE1MTE4NTg4NCw4NTc5LjYzMjUyOTM0ODEzMywxNDcuNTgwMzA1ODQ4MTA0MjIsMTk2OS45Nzg4NTY1MDIzNjczLDE1My41NTM1MjczNDAyNDY3Nyw3NzM0LjAwMTczMjczODIyNyw5MjcuNzUwMTQ1MDg2ODAyLDE2NDMuMjQ2ODgxOTAxNTg4LDc0NDIuMjAyMDgxNjc4NjEyLDY4ODEuNTc3NTY1MTA1ODY3NSw0NjMuNjgxODExMzc1NzE0NzQsMTQ1MC44NTA1OTc0OTMyNDk4LDMwLjAzMjc5NDEyMTQ3OTI1LDM1NS42NTM1NzY3OTM3MTIyNiw5MjA5NC45MTk2NjYxMjAzNiwxNDI0MTUuNDc0ODYxMDMyNCwxNTM5NTMuMDY3OTgxNTMzNyw0MzU5NS4wNDcyOTUzMTIwNCwxMjY5ODIuMzgyMTg5NjgxNCw4MzM5MC4yODUzOTE2NTYzOSwxMjQ5NDMuOTMyODYzNDY3NDIsMTM4NzU2LjU4NzQ3NDgzOTI0LDM1NS42NjA5ODYwNjQ4NTI4LDk2MDAuOTMxNTU3NTY0ODksMjcwNC4yMDYwMTE5MDI5NDgsMC44NjYzMjk4MjE3MjI0NzQyCisyOCxNb24gMjEgRmViIDExLDExMTExLjM5MzI4NjY0Mzk1NywxMDIwNy42OTM3NDc0ODA1ODUsMTk3LjcxNjY3OTc3NjU5OTQsMjQyMi45MDMxODIzMDUzODQyLDIwNi45MTcyOTI4NjU4ODg0LDk5NjMuMzU5Mzc1ODIwNjkyLDEyNzQuOTI2NjM3OTUzNDU2NywyMjM2Ljc1OTI0NDg1MzI4LDk1NzUuMDk0NzcyOTc0NzE3LDg4NTYuNzcxNDU5MjU5NzU5LDYyNy4xNTM2Mjc5NzU1MzI5LDE5ODYuMTcwODEzMjQ5NDIyMyw0My43MDc5MDIwOTMyNzQwOCw0OTQuMTAyOTI2NjUzNTkzNCwxMDkxNzkuMjkxMTIxMDk5OTMsMTY5NTU0Ljk4Njk0NzIwMDkzLDE4MjUyOS4zNTU3NzU2NjY1NCw1MTY5NC4yMTk2OTE4MzQ4OSwxNTA1NjMuNTg2MTMzNTU5MzUsOTg4NjIuOTkwMzc5Nzg5MTcsMTQ4MTQ3LjcwNTc4MjAwNTg1LDE2NDUyNC44MzM2NTExODU0LDQ4OC4wNDA2MzU3MDY2ODQsMTI0NjguMjc1MDQ1Njk5MTIyLDMzNjIuMjkzNjkyMjU2OTkxNiwxLjIyMTI2ODMxMjc1MjM1NDUKKzI5LFR1ZSAyMiBGZWIgMTEsMTMwNzYuMzUyMDU0NDc1Nzk0LDEyMDA5LjE4Njk2ODkxODIyLDI2My4zNDAyNzk1OTY0OTA1LDI5NjIuODI0NjA3ODU3OTAyLDI3Ny4zMjc0MTE4NjEwODMxLDEyNzg2LjYzNDYzNTY0NTI4MSwxNzQzLjA0NDIxNzAyMTkwMDUsMzAyOC40MjczMDA4MjUyNjA4LDEyMjY5Ljg2MjY5NDk5ODk4MSwxMTM1Ny4zNTk4MzAyODI1NjcsODQzLjgxNjQ3MTgwMjY4MDgsMjcwNC44NjY0MTg3MjI4MTczLDYzLjA5OTkzNDUxMTcxMzQsNjgyLjc1MDY1MDY3OTg2MDksMTI4MDU5LjUwNTA3ODgzNTkyLDIwMDMwOS4zNzk0OTMxODA0NiwyMTQwOTcuNjY2NTEwMjM4Niw2MDYzNi45NjUxNzAxMTIwMywxNzY1OTguNTc3MjcyNTAxOCwxMTU5NjMuOTczNzg0NTgwMDgsMTczNzY1Ljg4NTIyOTAzMTk2LDE5Mjk3NC4xMTMxMjc1OTIzNyw2NjYuMzMxMDU1NzI5MTEwMiwxNjEzNC4yMTQzNDEzMjE1ODIsNDE1OC4zOTk5MTk5NzY3MDcsMS43MDgzMjQyNDg0NzM1NjQxCiszMCxXZWQgMjMgRmViIDExLDE1MjE3LjQ0NTIzMzcxMzcxNSwxMzk2Ny4yMDUyODMxMTgyODYsMzQ4LjY5NDkzMTQ0ODA4NzcsMzYwMC44ODM4NjE0OTExNDA2LDM2OS43MzU0MDE2Mzk4OTg4LDE2MzQ0Ljc1MzE4MDQxMjE5MiwyMzcxLjMzODY4MzkyMzgyNjUsNDA3OS4wNDMwNjM4NTU4Njg3LDE1NjU2LjUyMTkxMjEyOTIwMywxNDUwOC42MTg5Nzc1Mjg2OTEsMTEyOS41MTM0NDY0MTI0OTU4LDM2NjUuMTQ0NjQwMjYyOTU2Myw5MC40Mjc1OTE1ODc4NTU4LDkzOC41ODI5MjU4MTU1ODczLDE0ODU2Ni4zNTAyNjAwNzA3LDIzNDcxMi4wNzM0MzU3OTMzNywyNDgzNjguOTA5MTA5OTQ4NjcsNzAzMzkuMDQwMTY5ODY2NDUsMjA0ODQxLjgzODQ1ODc3OTQ3LDEzNDU0MC41MDcxNzQ2NjUwMiwyMDE1NTYuNzQxODk0NzY4NSwyMjM4MzUuOTQ4MTY5MDczMTUsOTA1LjM5NDgwMTY5Njk4NTcsMjA4MDAuNjg1MTg1OTkxNjAyLDUxMTQuMDA0MTcwNDk2ODM1LDIuMzcyNjQ4NjQ4NTExMTQ2NAorMzEsVGh1IDI0IEZlYiAxMSwxNzUxMC4yNDc3MzU1MzA1MjQsMTYwNTcuOTg1MDc0NTY3NTA3LDQ1OC45ODExNTUyNTMyMTczLDQzNDcuODg3MjU2MTA1NzcxLDQ5MC4zNTk4MjEwNTU5NTU4LDIwODA1LjYwNTA5NjEzMjg4LDMyMTAuODE1NTAyMTI2MjAxNCw1NDY2LjE1MDEzNTU0MDM5OCwxOTg4OC4yMzc1MDAxOTUxNCwxODQ2MC4zOTkxNzQzODQ3NDQsMTUwNC4yODY3MzQ4NjY1NDg0LDQ5NDIuMTEzODgwOTk5MTc3LDEyOC43MTQyNTk1NjY3NjA2NiwxMjgzLjkyODU0MTkwMzU4MjMsMTcwNDYwLjAyNTIxMzIzNDgsMjcyNjc0LjE1NzY1NjUyNTYsMjg0OTM2LjQxNTgyNDQ0NjI1LDgwNjgzLjA3MTQ5ODgwNzAxLDIzNDk1MS41NjY1NDA0MTkyLDE1NDM3NS44MjA1NTIyNTA4LDIzMTE4My43OTk0MTMyNTAxNSwyNTY3MzYuNjU4MjA5MjUxLDEyMjQuNTcyODc3MzI0NTA5OCwyNjcxMi45NzY2ODk0OTM4OTUsNjI1MS40NDg5OTc2MDc3NzMsMy4yNzM1NjA3ODM5MjM1MjM3CiszMixGcmkgMjUgRmViIDExLDE5OTI0LjU0MDkyNzgwMDk0LDE4MjUyLjc4ODA5MjkwODg4Niw2MDAuNDgwODc4NzY1NTMyMSw1MjEzLjc4NTA4NzA0NDcyNyw2NDYuOTQxNzE2NTI4NDA1MiwyNjM2Ni42ODYyNDYxNzgwMiw0MzI3LjQwMDIzNDgxNTA5MjUsNzI4Ny44NDU5OTQ4MjQ0MTksMjUxNDIuNjY3NTk2MzkxMzE1LDIzMzg5Ljk0ODUyMTE5MjY4LDE5OTMuMjY3Mzc1MjAzODI3LDY2MzIuMDM3ODc4MTE3MjkzLDE4Mi4wNTk2NTI2MjA5NSwxNzQ3Ljk4MDAwNTI3MTM0NDcsMTkzNDQ4LjQ3NzUxNzYxMDI0LDMxMzk3OS4wMzIxOTg3Mjk5LDMyMzMwNy40Mzk0ODA2MjEzNyw5MTUyNy43OTU4NzQyNTk5NiwyNjY1MTYuNTc2MDc3MTQ3LDE3NTIwNS42NTUxNTk3OTY1LDI2MjI0Mi4zMzA4MDM1NTYyLDI5MTIyNi43ODY2MzQyOTYyLDE2NDguOTE0Mjg3MjEyMjEyNSwzNDE2NS45MDk0MTk1NjQ2NzYsNzU5My4yMTk1MjMyODI2NDYsNC40ODg1MDYzMjM3NjQ3MQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BZ2luZ1NFSVJEaXNlYXNlX0ZEX1JlZmVyZW5jZS9BZ2luZ1NFSVJEaXNlYXNlL2h1bWFuMnRvLS9TXzIuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BZ2luZ1NFSVJEaXNlYXNlX0ZEX1JlZmVyZW5jZS9BZ2luZ1NFSVJEaXNlYXNlL2h1bWFuMnRvLS9TXzIuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZmOWY3MGEKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FnaW5nU0VJUkRpc2Vhc2VfRkRfUmVmZXJlbmNlL0FnaW5nU0VJUkRpc2Vhc2UvaHVtYW4ydG8tL1NfMi5jc3YKQEAgLTAsMCArMSwzMyBAQAoraXRlcmF0aW9uLHRpbWUsRUctRlJHLUcyMTAwMDEsRUctRlJHLUcyMTAwMDIsRUctRlJHLUcyMTAwMDMsRUctRlJHLUcyMTAwMDQsRUctRlJHLUcyMTAwMDUsRUctTE9FLUcyNDAwMDEsRUctTE9FLUcyNDAwMDIsRUctTE9FLUcyNDAwMDMsRUctTE9FLUcyNDAwMDQsRUctTE9FLUcyNDAwMDUsRUctTE9FLUcyNDAwMDYsRUctTE9FLUcyNDAwMDcsRUctTE9FLUcyNDAwMDgsRUctTE9FLUcyNDAwMDksRUctVVBFLUcyOTAwMDEsRUctVVBFLUcyOTAwMDIsRUctVVBFLUcyOTAwMDMsRUctVVBFLUcyOTAwMDQsRUctVVBFLUcyOTAwMDUsRUctVVBFLUcyOTAwMDYsRUctVVBFLUcyOTAwMDcsRUctVVBFLUcyOTAwMDgsRUctVVJHLUczMDAwMDEsRUctVVJHLUczMDAwMDIsRUctVVJHLUczMDAwMDMsRUctVVJHLUczMDAwMDQKKzEsVHVlIDI1IEphbiAxMSw1OTAxNC44LDUyNjkxLjYwMDAwMDAwMDAwNiwzMDY3MC44MDAwMDAwMDAwMDMsNjM0MDQuNjAwMDAwMDAwMDA2LDYzOTExLjIwMDAwMDAwMDAwNCwxMDMzMTQ5LjYwMDAwMDAwMDEsMTEyMjcyMi42LDkyMDE3OC40LDc5OTI2Ny44LDk5OTI4Ni4wLDIwMjkyNS42LDExODYyNjUuNiwyMzQ3NjguODAwMDAwMDAwMDIsNjIzMjIwLjgsNTU3MDQ1LjgsMTI3ODc0Ny40MDAwMDAwMDAxLDkyNjQwMi4wLDI2MDUzOC42LDc1ODI4NS42MDAwMDAwMDAxLDUwNDk5Ny4wLDc0NjAzOS4wLDgyODQ1Ny40LDczNjk4OC4wLDE2Nzk5NDguMjAwMDAwMDAwMiwxMDcxMzMuMjAwMDAwMDAwMDEsMTM0MS40CisyLFdlZCAyNiBKYW4gMTEsNTkzMzcuOTU0MDY2NjYwMTQsNTI5ODAuMTI5Mzk5NzIzOTYsMzA4MzguNzQ3NTk1MzEwMzI4LDYzNzUxLjc5MTc5NDg1NDE2NSw2NDI2MS4xNjU4NDIyMTQ2NiwxMDM4ODA2LjkzNTAxOTQ5MTcsMTEyODg3MC40MjAxMDQ4MDg0LDkyNTIxNy4xMjU3NDM1OTAxLDgwMzY0NC40NDE3OTAyMDM2LDEwMDQ3NTcuOTA0MjQ1MzE3MSwyMDQwMzYuNzgyODM2NjY4OTIsMTE5Mjc2MS4zNjk3NTIzMTcsMjM2MDU0LjM1MDI3NjI4NTMsNjI2NjMzLjQ0MTE2NzA4MzMsNTYwMDk2LjA3OTE3NzE4ODcsMTI4NTc0OS41ODI4ODUzMjg0LDkzMTQ3NC44MDUwMTk0NTQyLDI2MTk2NS4yNjA5MDcyOTY4LDc2MjQzNy44MzA4ODY2NTYsNTA3NzYyLjI2OTYzMDY4ODcsNzUwMTI0LjE3MDc4MzIxMTQsODMyOTkzLjg3ODYwOTg1MTgsNzQxMDIzLjYwOTE5MDkxMDEsMTY4OTE0Ny4yODM4MzMzNSwxMDc3MTkuODQxNDczOTA2OCwxMzQ4Ljc0NTI1Njg2ODA3MjQKKzMsVGh1IDI3IEphbiAxMSw1OTY1OS4wNjM5NjQ5OTk3NTQsNTMyNjYuODQ5MTk5MDMwOCwzMTAwNS45ODg2NTg1MTg4MzIsNjQwOTcuNDA3MDA5NzMzNzc1LDY0NjA5LjY1OTQyNjk1NzUxNCwxMDQ0NDQwLjI2MDM3MDcxOSwxMTM0OTkyLjM3NzE4ODE2NSw5MzAyMzQuNjU0MjcwOTY3OSw4MDgwMDIuNDY3ODM2Mzc5NCwxMDEwMjA2LjU5NDY2ODQyMiwyMDUxNDMuMjkxMDgyMTczNTYsMTE5OTIyOS44MTI3MDc1NjAxLDIzNzMzNC40OTI0MjE5MTUxNCw2MzAwMzEuNzI1ODI4OTAwMiw1NjMxMjQuMzc1NDE3OTE0OSwxMjkyNzA0LjE5ODM2NDMwMTYsOTM2NTExLjA1ODY0NjQzMjgsMjYzMzgxLjY0NzQzNjAxMjMsNzY2NTYwLjE0NDg1MTk1MjIsNTEwNTA3LjYxNTE2NTQxODM2LDc1NDE3OS45MDgwMjc5ODQzLDgzNzQ5Ny42NzEwMzA2NTA3LDc0NTA0Mi4yNDExMzY5OTI3LDE2OTgzMDcuNDQyNjYxMDMyOCwxMDgzMDMuODgyNDEyNTUzNDYsMTM1Ni4wNTk2MTMyNjUyOTM0Cis0LEZyaSAyOCBKYW4gMTEsNTk5NTMuOTUxODM3NjY1MzUsNTM1MzAuMDQwNDU5MTA4NzYsMzExNzIuNDQzOTc2NjQ1MzEsNjQ0MzcuMDQxNjgyMzMxNyw2NDk1Ni42MDQ1ODUwNzA1MSwxMDUwMDM5LjIwNzYwNjMyODIsMTE0MTA4OC4xNjAwNzE3MDc2LDkzNTIzMC4zMTEwNzY1NzI0LDgxMjMzMS44MTgwMDUwMDU3LDEwMTU2MjIuNjQ2NDA3MjUyNiwyMDYyNDQuOTA2NzgwNTM1OTcsMTIwNTY3MC4zOTU2OTg5Njk3LDIzODYwOS4yMzIxNDgwMDM0LDYzMzQxNS41NjY5NjQwMTc2LDU2NTg3Ny4wNDU2MDI4OTYsMTI5OTE3My42ODY1ODc3MzAyLDk0MTA4OC42MDE1MTY4MzU3LDI2NDY2OC45NjMyMzM3OTAxLDc3MDMwNi4zMjU0OTUwNzMyLDUxMzAwMy4zMDk0MzY5Njk2LDc1Nzg2NS41OTcxNjc2Njg1LDg0MTU5MC40OTgwOTExMTE4LDc0OTA0My43NzkyMzk5NDM4LDE3MDc0MTcuMDE1NjQ0OTY0NSwxMDg4NzkuOTM3ODQ2OTgxMzUsMTM2My4zNDMxMDE4MjMyOTA3Cis1LFNhdCAyOSBKYW4gMTEsNjAyMTUuMDcyNDY1MDA0MDksNTM3NjIuOTI0MjQ1NjExNDIsMzEzMzguMDg4OTMxODIyMzA1LDY0NzY5LjMxMzk1NTU4NzksNjUzMDEuOTc4MjE5NjI5OTksMTA1NTYwMC41Mjc5OTY0MTkyLDExNDcxNTcuNjg4NzM2NzcsOTQwMjAzLjg5NzQzMDIzMjYsODE2NjI5LjMzNjg3MzgyNzUsMTAyMTAwMy4xMDc3NjE4ODQ1LDIwNzM0MS41NjQxNDUzMjEzMiwxMjEyMDgyLjk2OTMwMTgzOCwyMzk4NzguNTc1MTg5OTk2MjIsNjM2Nzg0Ljk0NzM2MjI0NDUsNTY4Mjc1LjE0ODY1MzE4MDgsMTMwNTAyMS43Mzk4NzA4NzA3LDk0NTA3Ni4wNDUyMDc2ODQzLDI2NTc5MC4yMzUwNjM3NDQ3Nyw3NzM1NjguNjIwNjkwMzcyLDUxNTE3Ny44NTQxMTE3NDU1NSw3NjEwNzUuMjI5NDk0MzQwOCw4NDUxNTQuNjI4OTI1MjYsNzUzMDI4LjE5ODgwNjY3MjQsMTcxNjQ3Mi4zNTYzNzA0MDIzLDEwOTQ0Ni4zMTcxMjI4MzkzMywxMzcwLjU5NTc1NTMxMjcyMDMKKzYsU3VuIDMwIEphbiAxMSw2MDQzOC43OTY2NTk2Mjk5NDUsNTM5NjIuMTY2MDUwMTQwNzcsMzE1MDIuODk1NDg0NDEzODM1LDY1MDkzLjUzOTc4MzIxODI3LDY1NjQ1Ljc1MzMxNzc2NywxMDYxMTIyLjE2NTczMzUwNzgsMTE1MzIwMC44NDk3ODQ5ODI0LDk0NTE1NS4xNjA1NjcxNjU4LDgyMDg5My4wMjg5OTkwNDA3LDEwMjYzNDYuMTM2NTgzMjIzMiwyMDg0MzMuMTg0Njc1MzEzNDIsMTIxODQ2Ny4zMzMyODA5MDcsMjQxMTQyLjUyNTY5MTk5NDc2LDY0MDEzOS44MzUyNTQ4MDc1LDU3MDI4My4xMjkzMzM1MDA1LDEzMTAxOTQuMzAzMDk2NTI5Myw5NDg0MTQuMDUwMjc1Mzc5NCwyNjY3MjguNjk4NTY3MDU5MjQsNzc2Mjk4LjE3ODk3NDc1NzYsNTE2OTk5LjA1NzQ4NzQ3MjMsNzYzNzYwLjc0MjUxMDA5NDksODQ4MTM2LjY4NjMyOTk4MjcsNzU2OTk1LjQ2MjgxNTcyNDcsMTcyNTQ3MS4wNTgxNTc2MTkzLDExMDAwMi4xMzA2MTk2OTkwOCwxMzc3LjgxNzUyMzQyNzMzNAorNyxNb24gMzEgSmFuIDExLDYwNjIyLjEyNzA4OTczNjg0LDU0MTI0Ljk0NzU4NzY5MjY5LDMxNjY2LjgyNTY5ODU0MDEzNSw2NTQwOS4xMzIyODA4NjY4NCw2NTk4Ny44OTI4MTk2MDAwMiwxMDY2NjAxLjk2MzUyNDc2NjUsMTE1OTIxNy40NzQyMTEzNDE1LDk1MDA4My43NDM4NTE5NSw4MjUxMjAuODAyODg4Njg4OSwxMDMxNjQ5LjgxNjUzODk4MzEsMjA5NTE5LjY1OTk2MDU2Nzk4LDEyMjQ4MjMuMTk4Mzk2MzEyNSwyNDI0MDEuMDg2NjUxMTUyNDcsNjQzNDgwLjE3ODg0NTgyNTcsNTcxODczLjcxNzcyNDM2NjUsMTMxNDY1Ni42MTc3NjI0NjkyLDk1MTA1Ni45NTQ0OTY2NTMzLDI2NzQ3MS4zOTIxMjcwOTY3LDc3ODQ1Ny4yMzU3OTc3ODEzLDUxODQ0Mi4yMzk2MDAyMTI0LDc2NTg4NC45ODAyMTI0Njc3LDg1MDQ5NS40MDU2MDU4ODExLDc2MDk0NS41MTI4MzY2ODgyLDE3MzQ0MTAuNTI1MDY1ODE5NSwxMTA1NDYuNTY5MzMyODg2OSwxMzg1LjAwODI5NTY4MTE5MDUKKzgsVHVlIDEgRmViIDExLDYwNzYxLjI3MzI2NTAzNTc1LDU0MjQ3LjY4NTczNDEwNzgxLDMxODI5LjgyNDM5OTg4NzksNjU3MTUuMzQ0ODQ0MDExNjMsNjYzMjguMzQyMTQ5ODMxNzMsMTA3MjAzNi45ODg2NDcxOTM5LDExNjUyMDcuMjk2MDk5NTMyMiw5NTQ5ODkuMTEwNjQ2NTY0Niw4MjkzMDkuODE4ODgyNzQ0NiwxMDM2OTExLjU0Nzk3MDY4ODEsMjEwNjAwLjgyOTUwNTMzOTIsMTIzMTE1MC4xMjA3ODcxOTI0LDI0MzY1NC4yNTg5MTgyMjQ2LDY0NjgwNS44OTEyNjA3Mzk0LDU3MzAxMi43NDUyNzU1MjQyLDEzMTgzNjcuMTk4NjkzNDEzOCw5NTI5NDcuNDY3Mjc0MzA5MywyNjgwMDIuMDIyNDk2ODg4MDYsNzc5OTk4LjMyNDM2OTg3MzYsNTE5NDc2LjQ4MDkwNjEwNDY3LDc2NzQwMS4yMzkxNTA3MDQ2LDg1MjE3OC45MTg5ODY3OTE0LDc2NDg3OC4yNTMwNjc4MTMzLDE3NDMyODcuMTg4NzE2NTQ5LDExMTA3OC41ODU4OTM4NDM5NSwxMzkyLjE2Nzg3MzU3Mzg4NjMKKzksV2VkIDIgRmViIDExLDYwODUwLjc5NTQ5NTg4Nzg3Niw1NDMyNS4yNTA4NjUyODA4NSwzMTk5MS44MTA0Mjc2OTQ4MTQsNjYwMTEuMTEzNjU3NjIwMTgsNjY2NjcuMDIwMjMxNTAzMjEsMTA3NzQyMy4wMDM1MTI1MjEsMTE3MTE2OS45MDA1NzA4MTU0LDk1OTg3MC40NDk5MDAwMjcxLDgzMzQ1NS45Nzc5OTgyOTA0LDEwNDIxMjcuNTc1MDE0MzkxOSwyMTE2NzYuNDUzODEzOTcyNTYsMTIzNzQ0Ny40MTk3NDUxMTU4LDI0NDkwMi4wMzk3NzU5MTAyMyw2NTAxMTYuODMxMTAwNDk2NSw1NzM2NTAuMjkwMzk4NTYxNiwxMzIxMjYzLjg5Njk0MDI2MDcsOTU0MDAxLjg3MDcyNDQ0NzksMjY4Mjk2Ljc3NTU2ODYwOTUsNzgwODUyLjA3MTA2MzQ4MjMsNTIwMDU2LjYwNTQ1MDE3NzMsNzY4MjQxLjI1OTgwODA0MTUsODUzMTExLjQxOTI4MjQ2OCw3Njg3OTMuNTMwMzI3MzM4NywxNzUyMDk1Ljg2NjEwNzkzOTUsMTExNTk2LjY4NzIyNjgxNTQ1LDEzOTkuMjk1OTI0MjYwMDg5MQorMTAsVGh1IDMgRmViIDExLDYwODgyLjk2NDE4MjIzMzgyLDU0MzUwLjM3MzEyMTUwNTkxLDMyMTUyLjY2NjA5ODQ4MTYyNiw2NjI5NC45MzM3MjM4NzQ4MSw2NzAwMy44MDg1NTYyMTAyLDEwODI3NTMuOTQ5MjY2NzIwMywxMTc3MTA0LjY1NzkwMjA2NSw5NjQ3MjYuNTU4ODQxODI3Miw4Mzc1NTMuNDI0NDgyNzUyNiwxMDQ3MjkyLjUyNzgzMTgwNDEsMjEyNzQ2LjE4MTQzNDQ2MjM3LDEyNDM3MTQuMDc0NDA0MTIxMSwyNDYxNDQuNDIwODg0NDk4NzIsNjUzNDEyLjc3NzIzMTYxMTgsNTczNzE0LjI5MTU3MzMxNjMsMTMyMzI1NC42OTkxMzc5NjEsOTU0MDk5LjMwNzk4MDkwMTIsMjY4MzIxLjI2OTQwMjMyNTQsNzgwOTE4LjMyMTYyNTc1NzcsNTIwMTE3LjM5OTQ5NzYzNjI0LDc2ODMwNi40OTQzMzQ3MDM3LDg1MzE4My40NjIyNTM0OTYyLDc3MjY5MS4xMDg4MjA1MDk2LDE3NjA4MjkuMTEzMzE5ODE3MiwxMTIwOTguNzYxNjIxOTQ5MzQsMTQwNi4zOTE5MTYzNTA2OTA1CisxMSxGcmkgNCBGZWIgMTEsNjA4NDcuMTk0NTcyOTMzOTA2LDU0MzEzLjExMzEzNDk3NjM4LDMyMzEyLjIyMzg3NzA2NTQ5LDY2NTY0Ljc0MDgyNjMyNjA0LDY3MzM4LjUzNzIyNjQ5Mzg4LDEwODgwMjEuMzY0Njg3OTU1NywxMTgzMDEwLjYzNjMzOTYyOCw5Njk1NTUuNjkwMzczNTM2Miw4NDE1OTMuOTg3MjQ4MzkxLDEwNTIzOTguOTA5NzMyOTU4NSwyMTM4MDkuNTA2NjEwNjkwMzMsMTI0OTk0OC41ODc5NTk2NzU2LDI0NzM4MS4zODUyNTQzNDc1OCw2NTY2OTMuMzk0NzIzNjYxOCw1NzMxMDUuMDkxMTY1NjQ1NSwxMzI0MjEwLjM2NTYwMDI1NCw5NTMwNzIuNTk5ODMxNjI2NSwyNjgwMjcuOTI5MDgyMDE1OSw3ODAwNTguNDk5NDYzNjExOSw1MTk1NjguNjczMjk5MTY0OSw3Njc0NjAuNTg1NjAwMTg5LDg1MjI0My42MTQ0MDU4NzcxLDc3NjU3MC42MzY4NDczNTAyLDE3Njk0NzYuNDgxNzA5NDQ3MiwxMTI1ODEuOTA1OTQ3MzQzODcsMTQxMy40NTUwMzA3NzExOTMyCisxMixTYXQgNSBGZWIgMTEsNjA3MjkuNTEzNzE3NjQ2MjUsNTQyMDAuMzYwNjY0OTAzMDU1LDMyNDcwLjI0OTMxNjA5NzI1LDY2ODE3Ljc4NjcyNTgwNjA2LDY3NjcwLjk2Njk0NDc4MzU4LDEwOTMyMTMuNjkwOTc1ODc3NywxMTg4ODg2LjQ4NjI5NTQxMSw5NzQzNTUuMzUzMTgzOTU2Niw4NDU1NjYuNTEyOTYxNTg0MywxMDU3NDM2LjQ4NDk5NTI3NzYsMjE0ODY1LjcxNDM0MzI4Nzc1LDEyNTYxNDguODA4MzMxMTU4NywyNDg2MTIuOTAyODkyNTA3LDY1OTk1OC4xODg4NzU2OTM2LDU3MTY5MC40MTc1Njc1MzI5LDEzMjM5NTcuNzY0MTMzMzQ3Miw5NTA2OTkuNzczODA0ODc4NCwyNjczNTMuNTU1MjY0OTcyNiw3NzgwODguNTMxOTgxMjcyNiw1MTgyOTAuNzE5MzEwNzcwMDQsNzY1NTIyLjQwNDE5MjI4Nyw4NTAwOTAuNzIwNjYzOTMxOCw3ODA0MzEuNjAyNjgzMTg2OSwxNzc4MDIzLjYxMzg2NTMwNCwxMTMwNDIuMjM2MDc2OTQ5MzIsMTQyMC40ODQwMzg5NDk2NTA1CisxMyxTdW4gNiBGZWIgMTEsNjA1MTIuMDc3MjEwMTc3NzU1LDUzOTk1LjM4MDg3NTc3MjcxLDMyNjI2LjQxOTM1NDE3NzIyMiw2NzA1MC41MDI2NTQwNjkyLDY4MDAwLjc2NTkyMjAwNzYsMTA5ODMxNS40Mjc0NjY0MDgzLDExOTQ3MzAuMjg3OTU3ODQ3OCw5NzkxMjIuMDUyMDQ3NDA2OCw4NDk0NTYuMDU3ODQwMjk2MiwxMDYyMzkxLjUzNjMxNjg1MTIsMjE1OTEzLjgwOTU5MDA5NjYsMTI2MjMxMS42OTMzNzY0MDY2LDI0OTgzOC45MjQ2Nzk2NTE2NSw2NjMyMDYuNDQzODgwMDAyMiw1NjkzMDAuOTUxNzA5NjkyNiwxMzIyMjczLjY1NzEwMjU1NzQsOTQ2Njk2LjU2MDE1Njk3MzgsMjY2MjE3LjE2MjU0NTQ2NDgsNzc0NzcyLjU2NzY0MTMxNDksNTE2MTMwLjI5Nzg3NDg4MTI1LDc2MjI1OS44NjI0OTI0MTM3LDg0NjQ2Ny4wMzUzODUwNTQ4LDc4NDI3My4yNzY2MzE0NjI5LDE3ODY0NTEuMTMxNDQ3MzkxNiwxMTM0NzQuNjcyODI3NjIzMzMsMTQyNy40NzcxMzkyODg3MzY3CisxNCxNb24gNyBGZWIgMTEsNjAxNzIuNzk4NTA4Nzc2ODcsNTM2NzcuNDcwODM2NjQ4ODUsMzI3ODAuMjk0ODc4MjEwNDE0LDY3MjU4LjM1MDMyMDQxNzYxLDY4MzI3LjQ4MDQzOTQ4Mjk2LDExMDMzMDYuMTA1MjIyMTQ5OCwxMjAwNTM5LjM1MTkzMjEzMTIsOTgzODUwLjk1MjM2MTE0NDEsODUzMjQyLjkwNzU2NjUzMDcsMTA2NzI0NS45NjI3MDAzNjkzLDIxNjk1Mi40MjY1MTc0MDgzLDEyNjg0MzMuMDA1MzAzODQ3NCwyNTEwNTkuMzczODUyNjQyNSw2NjY0MzcuMTQxNTMxOTE1OSw1NjU3MjcuMDgyNzA3Nzg5MywxMzE4ODc5LjIyNjYwNzYwMjgsOTQwNzEwLjg4Mjc2MDIzMjIsMjY0NTE4LjM4NTQyODI1NDI2LDc2OTgxOC4zNTIzNDA4NjE2LDUxMjg5Ny42OTYxNTgzMzY2LDc1NzM4NS4zNjA2NTUzODU1LDg0MTA1My4xNjYxOTQ0OTUyLDc4ODA5NC42MzUzNDg0MzA0LDE3OTQ3MzMuMjY2MTI4MDU0NCwxMTM4NzIuNzAwMjg1MTkwOCwxNDM0LjQzMTczOTY5MjY0NDQKKzE1LFR1ZSA4IEZlYiAxMSw1OTY4NS4xOTUzNjU0ODUzOSw1MzIyMS44MjkxOTA1MDc0NiwzMjkzMS4yODYxMDA0MDU4Miw2NzQzNS42NjIyMDIzOTU0Myw2ODY1MC40OTczNjAwODUsMTEwODE1OS4wMzk0Njc2NTQ0LDEyMDYzMDkuOTU4NTUwOTI1Niw5ODg1MzUuNDQ3MTQ5NTUzOCw4NTY5MDEuMzg5Njk3MDExNCwxMDcxOTc2LjE4MzMxODQyMTUsMjE3OTc5LjcxMjI1Njk4ODc3LDEyNzQ1MDYuOTEzMTUyMDU1LDI1MjI3NC4xMzQyMDAxNzY1LDY2OTY0OC44NTM1ODUxODM1LDU2MDcxNy44NjcxMTMwNDcsMTMxMzQzNi4wMDM0OTA0OTU3LDkzMjMyMS4wNjg4Nzc3NDM5LDI2MjEzNi45NTExMzQ4MTc0Nyw3NjI4NzUuNzIwMjY3MTU1OSw1MDgzNjUuNzc2NDQ5Nzc0NzQsNzUwNTU0LjI5Njc5NTQ5Nyw4MzM0NjYuNDIxNDUzNzg4NCw3OTE4OTQuMjYzMDUxMjQ5LDE4MDI4MzYuMTczNDAzODQ0LDExNDIyOC4wOTU4MTExODM5LDE0NDEuMzQ0MTY5MDE2OTI5CisxNixXZWQgOSBGZWIgMTEsNTkwMTguNjAzMjMwMzc4NjksNTI1OTkuNzg2MDQ5ODk2NjMsMzMwNzguNjA4ODQ4NTc2MjEsNjc1NzUuNDc1NDIxNDEwMzUsNjg5NjguOTk2MzE2MTA0MTcsMTExMjgzOS44MTI2ODU1MjAyLDEyMTIwMzcuMDE2MjMzNjM5OCw5OTMxNjYuNTk3MTIwMjY2MSw4NjAzOTguNDM1MjQwODYwMSwxMDc2NTUxLjgwNDcyODk4NjIsMjE4OTkzLjE3NzcxNzAxOTM3LDEyODA1MjUuNDc0NTg0MywyNTM0ODMuMDMzNzE4MDM4MzUsNjcyODM5LjU5ODk1MDI1MTcsNTUzOTgzLjYzNzYzMTc4NDMsMTMwNTU0NC4yMzQxMjUxMzg3LDkyMTA0MC4yMzg4NTQ5NjE5LDI1ODkzMy45MzMzOTk2OTE3NCw3NTM1NDAuMjc5NjUyNTM0Niw1MDIyNzIuMzE5ODY5OTE5ODUsNzQxMzY4LjY4OTQ1OTc3MTMsODIzMjY0LjgzNjAxMTA2OTcsNzk1NjcwLjIyMjI0NzU4MDMsMTgxMDcxNS44NTI1NTI2OTczLDExNDUzMC42MzMzMzAzMTU3LDE0NDguMjA5MjkzODY1MzYzMgorMTcsVGh1IDEwIEZlYiAxMSw1ODEzOC45NTM2NzIwNTU0NSw1MTc3OS41ODY2MjU1NTQyNiwzMzIyMS4yMjkzNzk4NTI0MSw2NzY2OS4zNjcxMjU4MjEzNyw2OTI4MS44ODg2NDc4NjA0OCwxMTE3MzA0LjQzMTQxMTgwNjcsMTIxNzcxMy42MTI3OTAzMiw5OTc3MzIuNDA1MjM0MjQ3LDg2MzY5MS44MzkyODA0NDA3LDEwODA5MzQuMDAwNzcwNDY2OSwyMTk5ODkuNTA1NzUzMzQ2OTUsMTI4NjQ3Ny45NTg5NjMyNzM2LDI1NDY4NS44MjE5OTgyODUxLDY3NjAwNi42NTM5MjcyOTQxLDU0NTIwNC4xNTA2ODI0NDUzLDEyOTQ3NDUuMTM4MjU1ODY2LDkwNjMzMC4wOTcxMDE4NDI1LDI1NDc1NS43MjQxMzA1MDM1Nyw3NDEzNjUuMDIwNjc4MTIwOSw0OTQzMjcuMzcyODEwNTc1OTQsNzI5Mzg4LjU5Nzc1MDM4MjYsODA5OTU5Ljg1NzUxMjU2NDksNzk5NDE5Ljg4NDE5NDMzNjIsMTgxODMxNS41Nzg0MzE2ODA4LDExNDc2Ny43NjUyNTkyNTQ1NiwxNDU1LjAyMDAwOTEzMDE4NzYKKzE4LEZyaSAxMSBGZWIgMTEsNTcwMTAuMzU1MDE5NjM0MDMsNTA3MjcuOTU4NDEyMDE0MDYsMzMzNTcuNzk0ODUwNDAyNTIsNjc3MDcuMzA0NzE3MTkwNCw2OTU4Ny43Mzk0NTUyNjczLDExMjE0OTcuMDkzOTA4MTcyOCwxMjIzMzMwLjQyNTc0Mjg5MTgsMTAwMjIxNi44NzY3MjEwNzExLDg2NjcyOC4xNjczNjcwODc4LDEwODUwNzMuNTQ4Njk3NDI5NSwyMjA5NjQuMzA0NDc5OTQ5NTUsMTI5MjM0OS45NjI2NDIyODc4LDI1NTg4Mi4xMzkwMTIyNzA2Nyw2NzkxNDYuMjk5OTYyMDI2MSw1MzQwNDQuNDk4NjE1Mjg1OCwxMjgwNTI4Ljk3NTEwMjcxNjgsODg3NjI3LjkyMzc4NzM4MzEsMjQ5NDQxLjgyOTU1NjY2NTAzLDcyNTg4My4wNjM3NTI5NTMzLDQ4NDIyNy42MDg3NjE2OTIsNzE0MTU0LjUwODU2ODQ3MTYsNzkzMDQxLjIxMjkzODMzNjgsODAzMTM5LjcwNjM1ODE1LDE4MjU1NjIuNzM0ODA1NjY3MywxMTQ5MjQuMjk0NzMzMTE1NDksMTQ2MS43NjY1NjA4MDMyNzA3CisxOSxTYXQgMTIgRmViIDExLDU1NTk3LjcxNTkxODM5MTYyLDQ5NDEyLjY5MDY2MzQ4MzUyLDMzNDg2LjU0NjE2MDM2NTU5LDY3Njc3LjUzMTczNzYwMzg0LDY5ODg0LjY2ODM3NDQ0OTc5LDExMjUzNDcuNTA1MDM3NTQyMiwxMjI4ODc0Ljk0ODMyMTQ1MTQsMTAwNjU5OC44MDM0OTcwNDY2LDg2OTQ0MC4yNTczMzgzOTk4LDEwODg5MDguNDYzMjcxNDI4OCwyMjE5MTEuNzkwNzEwMTAwMzIsMTI5ODEyMi4yNTQzOTE3MTM4LDI1NzA3MS40NzIxNDY3NjczLDY4MjI1My40ODg4NTE1OTY3LDUyMDE4MC45ODEyNTE5NzQ1LDEyNjIzNTEuMjU0NTQ3ODg0Nyw4NjQzOTAuNTEyOTEwMjYyNywyNDI4MzcuNTgxNTE1MTEzODIsNzA2NjQ0LjcxNDU2MjIzNTUsNDcxNjc5LjY5MjY5NTM4Miw2OTUyMjMuODEwMjc5ODQzNSw3NzIwMTcuNDE4ODU2MDQ3Niw4MDY4MjQuOTQwNjA5Mjc4LDE4MzIzNjQuOTI2NTM1Mjc3LDExNDk4Mi4wNTkyNzY2NDg1NiwxNDY4LjQzNTY0NzQ2Njk0MjYKKzIwLFN1biAxMyBGZWIgMTEsNTM4NzAuNTc3MjQ1NDEzMDQsNDc4MDYuMzczMDUzOTUyMzUsMzM2MDUuMjA5NjIzMTYyOTUsNjc1NjYuNTE5NTA5NjY0MjMsNzAxNzAuMjIzOTM0MDYzMzQsMTEyODc2Ny42ODA5NjYxNjksMTIzNDMzMC40NzY0ODMzMzY5LDEwMTA4NTAuMTk4NTcwNDg4MSw4NzE3NDQuMjc3Nzc2Nzk4LDEwOTIzNjEuMTc0MTYxNzMyLDIyMjgyNC4zODU1Mjc1MjgyNywxMzAzNzY5LjI3MzYxMzk3MzUsMjU4MjUzLjA5NzMwODA0MDk1LDY4NTMyMS4zOTk3MTM1MjgsNTAzMzM4LjMyMjA4NTEyODgsMTIzOTY1OS42MTMwNjg4MzMyLDgzNjE1Ny40MDc4NDYzOTE2LDIzNDgxMi40NDMxMjcxNjg1OCw2ODMyNzAuNzg3NDQzMTk5Miw0NTY0MzMuOTA4MzE0ODYyOCw2NzIyMjMuMjg2NDY5ODYzNiw3NDY0NzQuMDgxNTA2ODk4Miw4MTA0NjkuMjUxNjAzNTEzOCwxODM4NjA1LjI0MTQwMjYyNDIsMTE0OTE5LjY1OTg4NzU3NzIzLDE0NzUuMDA5MjMyMDIwODEzCisyMSxNb24gMTQgRmViIDExLDUxODA4LjExMTE0NTE1NTk2LDQ1ODkxLjIyNjA4MzA2MzI0NCwzMzcxMC44NjM5MDkxMzk4Miw2NzM1OS4wMjQ1NjM0MDM5Miw3MDQ0MS4yMjU2Mzg3MzgyMSwxMTMxNjQ4LjIwMjIzMjg3NzcsMTIzOTY3NC43ODg4MTkxOTEzLDEwMTQ5MzQuMjkxNTc2MTUzMSw4NzM1MzYuMzI3NjU1NjcyNCwxMDk1MzM1LjIwMjgzNTAwMzQsMjIzNjkyLjIwMDkzMjY2OSwxMzA5MjU3LjE4NjM2MzMwNDUsMjU5NDI1Ljk5ODU0ODMwOTQsNjg4MzQwLjg1NTE1Mzc2OTEsNDgzMzM3LjU0MTIxNDM2NDA2LDEyMTE5MzMuNTA5ODkzNTYxMiw4MDI2MzIuMjExMzgzNjY4OCwyMjUyODMuNTMzNDIwMjczNzQsNjU1NTIxLjA4MTA3MzcwOTYsNDM4MzI3LjQ0MDk1NjkyMjM2LDY0NDkxNi41MzI5NzQ4OTQsNzE2MTQ4Ljc2NjU2MDE1MTgsODE0MDY0LjIxOTY1NDU2OTMsMTg0NDEzNi41MzQ0MTk1NSwxMTQ3MTIuMjg0OTU0NDcyNTMsMTQ4MS40NjI5NzcxNDM1OTcKKzIyLFR1ZSAxNSBGZWIgMTEsNDk0MDQuODY5Nzc0Mjc4MjksNDM2NjQuNTc0NzkwMTk0ODA1LDMzNzk5Ljc3OTE4NTQzNzQ3NCw2NzAzOC4zMDAxNDQ2OTEzNSw3MDY5My41NjczNzE4NzU5NiwxMTMzODUzLjkwMjI1NTQ1LDEyNDQ4NzguNDM1Mzk0OTM0MSwxMDE4ODAyLjk4MTk1NjI4ODMsODc0Njg4LjYwMDU1NDU5MDIsMTA5NzcxMS4zMTUwNTU1MzgyLDIyNDUwMi4zOTM2OTQ3NTQ4NiwxMzE0NTQxLjM4NDM4NDcxMDYsMjYwNTg4Ljc1ODkwNDE4NDMzLDY5MTI5OS41NTU3NDI0Myw0NjAxNTAuMTQxOTk0NzUwOSwxMTc4NzM3LjU4NDMxMjc2ODQsNzYzNzc0LjQ0OTcyODQ3MzMsMjE0MjQyLjEzODczMDE5MzYzLDYyMzM3MS40ODI1ODEwOTY3LDQxNzMzMy40MTE0Mjk2NTkyLDYxMzI3OS44NzQ2NjU3MjYyLDY4MTAxNS4zMDIyODM0NjI0LDgxNzU5OC42OTYyNDY5NTUsMTg0ODc3NC42MjIwODc4MjU4LDExNDMzMS42OTQ1MjQ1MjM5OCwxNDg3Ljc2NDE5NjM5MTkxMzYKKzIzLFdlZCAxNiBGZWIgMTEsNDY2NzYuMzQ1MzI2MDYyODk2LDQxMTQ0LjAwMjc0MjcwMDM2NiwzMzg2Ny4yMjY2MTc5Njg3LDY2NTg2LjUxMjgxOTUyMDMsNzA5MjEuOTc1NDczNzY5NzUsMTEzNTIxOS4wMjMyNjg5NjQsMTI0OTkwMi41MzM1Mzc0NDEyLDEwMjIzOTMuNjMzMzIxNjM2OCw4NzUwNDUuMTk1Nzc3MzE5OCwxMDk5MzQzLjE1NjU3NDk1NCwyMjUyMzguMzYwNTI1NzU5NTgsMTMxOTU2My4yOTEyNDc5MDE1LDI2MTczOS40MTI4NjI1OTM5LDY5NDE4MS4wODIwMTQyMzYsNDMzOTQ5LjM0MDkwMDgyOTQ3LDExMzk3ODYuODY4NjYwNTQ1NCw3MTk4ODYuMDAyMDY3NjkyNSwyMDE3NzguNDkxMDM1MTMyNzYsNTg3MDg1Ljk0MjY2OTQzNjksMzkzNjA3LjMwMzQxMTc0MjU2LDU3NzU3My4yMzIxOTQ4ODA2LDY0MTM2Mi40NjYyMjc3MjExLDgyMTA1Ny45NzMxMDQxNTkzLDE4NTIyOTAuMzA3MTQ5Njg5NCwxMTM3NDYuNDQzNDIxNTgwMjMsMTQ5My44NjkxODc3MDI0NzI2CisyNCxUaHUgMTcgRmViIDExLDQzNjYyLjg4Mzc5MjIwMDk2LDM4MzcwLjczMzkzNDQ5MzE0LDMzOTA3LjI1ODg0OTM4NTgzLDY1OTg1LjQwNzIxMzAzMjY3LDcxMTE5LjcxNTE5NDEyNjM5LDExMzU1NDEuOTM4Mzg0OTUxNiwxMjU0Njk1Ljk0ODkxMDY0OTksMTAyNTYyNS4wODQ1MDc4NDk5LDg3NDQxNy43NDM3ODM5NTM2LDExMDAwNTIuNDI2MTc0NDUyLDIyNTg3OC43NDg0MzkwMjUsMTMyNDI0Ni4zMTkwODUxMzYzLDI2Mjg3NS4yNDc5NjcxNzM2NCw2OTY5NjMuNjAxODA5MTgzNSw0MDUxNDQuMzQ4MTI4NTQ3OCwxMDk1MDE3Ljk2NDkwNTExNDEsNjcxNjY4LjA1ODU5MDUzNjYsMTg4MDk3Ljc1NTIxMjA2MTU3LDU0NzI2Mi43ODI5NjkzMTY4LDM2NzUxOC4xNDc3Mjk5NjQxNyw1MzgzODUuNzA3NDQ4MTY4Miw1OTc4NDQuNTg3NDk3MzcxOCw4MjQ0MjIuNzE3NDE2OTM4OSwxODU0NDAwLjIxNTM2NjAwNTQsMTEyOTIyLjQyNjA1NDY1NjY1LDE0OTkuNzE5Nzg4MDYwODY5OQorMjUsRnJpIDE4IEZlYiAxMSw0MDQzMC4yNjg2MjQ1NTAwOTUsMzU0MDkuNjI1Mzc5MTk0ODUsMzM5MTIuNDY2MzEyNDA4Mzk2LDY1MjE3LjIzODAxMzYwNjY1LDcxMjc4LjI0MDUzNTg5MDEsMTEzNDU3OS42MzU3MTk5MTIxLDEyNTkxOTEuNzIwNDQ2MDE3OCwxMDI4MzkyLjc1NTQ2NTYyMjEsODcyNTgxLjEzMzIzNDA2MzUsMTA5OTYyMy43MDg1OTc3LDIyNjM5Ni4yNTcyNDE1OTAwNCwxMzI4NDkwLjgwMzE3MTk5MTQsMjYzOTkyLjUzOTQyMTQzNCw2OTk2MTguMjA4MjM4NzE0LDM3NDM4MS45ODIyMTIyMjE2NiwxMDQ0NjU1LjMwMzcwMDI1LDYyMDIyMS44MDAxODY4MjQ4LDE3MzUxOS40Mjk5MDc4Nzc2NCw1MDQ4MzIuNjkwMTc4NDMzOTYsMzM5NjUwLjIzOTE2NjQzMTIsNDk2NjMzLjU4MTU4MDQzMDMsNTUxNDc5LjI5NjMwNDAwMDIsODI3NjY3LjYxNjYzMjQ4OTQsMTg1NDc1Ni41MzExMDY3MDQ2LDExMTgyMy44MTUwNDA2MjI1OCwxNTA1LjIzODk1OTExNjE5NjgKKzI2LFNhdCAxOSBGZWIgMTEsMzcwNjUuNjk4NDEzMzU5MzMsMzIzNDQuNjQzNDY5ODc3MjE0LDMzODczLjcyMTA1NjAxNzYxLDY0MjY1Ljk0NTc4OTAyNzUzLDcxMzg2Ljc4NTM5MzE4MDk1LDExMzIwNDIuMzAzNzIzODkyNywxMjYzMzAyLjU3MDgyMTYyMzMsMTAzMDU2Mi43NDg2Mzg3MDQ0LDg2OTI2OS43OTUwMzI4NTQ5LDEwOTc3OTkuMTkzMDgyMjI0MywyMjY3NTYuMjIwMDM4NDQxLDEzMzIxNjcuNzM2MzE2NjcyLDI2NTA4Ni4xOTcwMTkyODI5LDcwMjEwNi44MDA4ODIxODc2LDM0MjUwNC4zMTE1NTU3NDA1NCw5ODkyNTcuMjI0MDY1MTk4OCw1NjY5NzMuODk1NDI4ODI3OCwxNTg0NTQuODE0NzA3NzkxMTQsNDYwOTkyLjkxNTA2Njc2MjY1LDMxMDc2NS4xMDQ2MjcwNjgxNSw0NTM0OTUuNDgwNTg3NzE0Nyw1MDM1NzUuNDk4NTAyMTMzMiw4MzA3NTkuNjY2NjAxMjgzOCwxODUyOTM1Ljg5NjQ1NzIzODYsMTEwNDE0LjQzNTAyNjM5NTIxLDE1MTAuMzI1MTg3NTI3MjY2NQorMjcsU3VuIDIwIEZlYiAxMSwzMzY2OS4wNzE4NjA1ODU1MiwyOTI2OS45NDY3NTM5MzgsMzM3NzkuOTMwMDk2MTUwNzksNjMxMTguNDk1MjE5NjQ1OTcsNzE0MzEuODk5MjI1MjY1MSwxMTI3NTg4LjU3MTQwMzY5NDgsMTI2NjkxNS4zMzU4MjE2MTY1LDEwMzE5NjQuOTAzNDA0MjIyMSw4NjQxNzUuMjM0ODA3OTIwNiwxMDk0MjczLjY2NDYyOTM1NywyMjY5MTQuOTY2MjUwNjgxNSwxMzM1MTExLjE0MjE3MTcwNDcsMjY2MTQ5LjI5ODI2OTYwMzMsNzA0Mzc5LjQxMTk5OTQ2MjMsMzEwNDYyLjY5MDQwMzI0ODIsOTI5NzI1LjI0Nzc2MjQyNzEsNTEzNTI4LjI4MDEzMDc5NjQsMTQzMzYzLjI5NjkzMjQ4NDYzLDQxNzA3OS45NjAxNTYxODE3LDI4MTcyMy45NTkxODk2NTI0Nyw0MTAyODYuOTcxNzM0Nzk0OCw0NTU1OTQuMDk4NjQ0MjY3NTMsODMzNjU2LjAyNzkxNTIzMDgsMTg0ODQyOC4wMzYxNTE5NjUxLDEwODY1OS41NjIyNzU5NDM3NywxNTE0Ljg0NTQ2ODIxNTE4MzIKKzI4LE1vbiAyMSBGZWIgMTEsMzAzNDEuMTQ0NjgyMjY2NjI2LDI2Mjc4LjMyNDgwMjk3NzI5NSwzMzYxNy44MzUxNjA1ODg4NzUsNjE3NjYuMjMzMjQyNjgwMzI2LDcxMzk2LjkzOTYwMTg2ODEsMTEyMDgyMi4yNzkyMzQzOTg5LDEyNjk4ODQuMTU1NzQwODA2OCwxMDMyMzg0Ljg3NDI4NTAwMTksODU2OTQ1LjgzMjgwNDM2NiwxMDg4NjkwLjQxMDk3MjAxODUsMjI2ODE4LjAwNTY2NTk0Mjc0LDEzMzcxMDguOTg0Nzc0ODUsMjY3MTcyLjQ3NTIyMDY1NTksNzA2MzcwLjg3NDMwODg1OTksMjc5MjA0LjE2NjYxNzQyMzYsODY3MjY0LjAwOTc3MjcwNTMsNDYxNDcyLjQ5ODU1NzAyNzksMTI4Njk2LjA3NzU5MTIzNjg2LDM3NDQwNS44OTQzNjA5NzgzLDI1MzM4NS4wMDAzNTkzMTE4NywzNjgyOTkuMzcxNTMyMTI5LDQwODk2OC45OTg1MzAyNjQsODM2MzAxLjM2ODg5ODY2OTYsMTg0MDYyNS4xNTc1Mjg2MDQ4LDEwNjUyOC4wNzc1MzE2NjYxMiwxNTE4LjYyNjY0NjI1NDMzMDEKKzI5LFR1ZSAyMiBGZWIgMTEsMjcxNzEuNDQ3MTc5MjcxMDMsMjM0NDkuOTI0NjE2MTAxOSwzMzM3MS45MTU4NDU1MDU2OSw2MDIwNi4wODA1NjA0MjYzMTUsNzEyNjEuNTQ4NjQzNzIyOTEsMTExMTI5Mi4xMjQxNjgwMzg4LDEyNzIwMjIuMzE1OTI2NTY3NCwxMDMxNTU1LjUwMzk1OTI4MzYsODQ3MTkwLjM2MzU3NzEzNTQsMTA4MDYzOS4wODE4NzQwNzcyLDIyNjM5OC4xMjkzOTExNDU3MiwxMzM3ODkyLjYzOTc3NTY3NzQsMjY4MTQzLjExNTQ5NjM3MjMsNzA3OTk2LjczMzYzMTI2NzIsMjQ5NTU4LjE4OTU1MDM4MDcyLDgwMzI4OS42NjEwNDk1MjM5LDQxMjE4Ni44NTY0NjM3Mjg3NiwxMTQ4NDEuNTk2NzU4OTQwNDMsMzM0MDk5Ljc3MTgwMDQyMjE3LDIyNjUwMC43NTMwODQ5NjY3NCwzMjg2NDMuNjMxOTYzOTU0LDM2NDkzMy43NTQ0MjEyNTM2LDgzODYyNC42MTMzMDQ1OTc3LDE4Mjg4MTMuOTM2NTU3MDA0MiwxMDM5OTQuODM5ODYyNTI2LDE1MjEuNDQ0OTQ0ODAyMDk2CiszMCxXZWQgMjMgRmViIDExLDI0MjI5LjA0MTc3NTE5ODAxNywyMDg0NC4xNzU4NDQ5ODU1MjYsMzMwMjQuNDc4NDU5OTc1MjIsNTg0NDEuMzY0NTY0MDI5NCw3MTAwMS4xNjMwNzMxNzQxNSwxMDk4NDk2LjE0ODcxMTU1NzMsMTI3MzA5Mi43MjYyMTc5NzkzLDEwMjkxNDguMDg5OTE1MTI4Miw4MzQ0ODcuMjAxMTA2MTMwOCwxMDY5NjU3LjA5OTgwNTcyMywyMjU1NzMuNjE0Mjg5MjY0NzIsMTMzNzEyNS4xOTMxMjQyNDEsMjY5MDQ0LjMzMTEwNzI4MTE1LDcwOTE0OC4zMzg4MTI5NzE2LDIyMjE1Mi40NDA2OTc2Mjk3Niw3MzkyOTguODM4OTI3OTg5MSwzNjY3MDUuMjAyODU5NDgxLDEwMjA4Ni43MDk5Mjc3MDExMSwyOTY5OTQuOTU0MjA2NDUwMjYsMjAxNjQxLjU3ODg5Mjc2Njk2LDI5MjEzOS40ODEzNzk0MDI5LDMyNDM5OC41MDA5MjU0MTIxNyw4NDA1MzUuMDIxNzQ5MTIzNywxODEyMTczLjAxMTI3MDU5MjcsMTAxMDQzLjExMDEwNDM1Njc1LDE1MjMuMDEzNjM0ODgyMTIzNAorMzEsVGh1IDI0IEZlYiAxMSwyMTU1OC4wNzI2Mzg3ODQ0MzMsMTg0OTYuNTQxNTIxNzA1ODUsMzI1NTYuMDQwNzM4Njc1MDkyLDU2NDgyLjE0NjY0Mzg2OTA1LDcwNTg2LjY0MDk4NDI0OTUsMTA4MTg5My43Njk5OTM2MDgxLDEyNzI3OTcuMjI2MTc2MzAzOCwxMDI0NzY0LjY0NDE3NzcxNDQsODE4NDAxLjY1MTM2OTcwMDMsMTA1NTIzNi45MzEyODcyODQyLDIyNDI0Ni44NTIwMDgzMzE4LDEzMzQzODkuMjQyMDk3OTg2LDI2OTg1My42NDMwODg4MTUxLDcwOTY4Ny4xMDg2MDc1MjU1LDE5NzM3NS4xODE2NjM5NjU5OCw2NzY3MjMuMDcyMjIzNjUxNywzMjU2NTUuNzIyODcxMDAyNTcsOTA2MDEuMzY3NzI4NjA1NjgsMjYzNTg0Ljc4NjkwODY1MTYsMTc5MTYxLjIwMTg4NzM1MDM1LDI1OTI3MS44OTg2NzQ3NDc2MiwyODc5MDEuNjQ3NjkwMzIwOTcsODQxOTE3LjU2NjQwNzIxNjYsMTc4OTc4MC4zNjIyNjUxNDMzLDk3NjY2Ljg0MzYzNjU5NzY0LDE1MjIuOTY5MDU2MTMxNjM0CiszMixGcmkgMjUgRmViIDExLDE5MTc4LjI1ODYxOTc0NzQwNSwxNjQxOS45MTczNjE0NjgzNTcsMzE5NDYuMTQ2MjY3ODk2MzYsNTQzNDQuOTg0NDgxMTk0NTEsNjk5ODQuMTM0NjMzOTU5MTUsMTA2MDkyOC42NzI5NDc4NDkxLDEyNzA3NjUuMjQyMTE5OTc4LDEwMTc5MzIuOTU1MDMyMTI5LDc5ODUxNC4wMjk4NDU0Mzg3LDEwMzY4NDIuMjU4MDc2ODE2MiwyMjIzMDMuOTA4MzA1NjQwNzQsMTMyOTE3NS41MTc5MTYxMzksMjcwNTQxLjMyODUyNzA0NTE1LDcwOTQzOC4xMDMwNzQyMTc4LDE3NTM4NC4yMzkyOTc0ODk5Niw2MTY3OTguNzQyMjAxMTk2NCwyODkyODAuMzgwMzY1NjU3MjcsODA0NDUuODA3NjI0NTk2OTQsMjM0MDQzLjY3MzQzNTE0MDI4LDE1OTIwNC40OTIwMDIxNDYyNiwyMzAyMTEuOTY5NDkxNjQwMDIsMjU1NjMzLjA2MTc2NzI1MzEyLDg0MjYyNy42MTk3NDI4NTksMTc2MDYzNi41OTI0NjEzNzk3LDkzODcyLjY4NzU2OTU0ODIyLDE1MjAuODU1NjQxODcyNzc1OApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BZ2luZ1NFSVJEaXNlYXNlX0ZEX1JlZmVyZW5jZS9BZ2luZ1NFSVJEaXNlYXNlL3J1bnBhcmFtZXRlcnMuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BZ2luZ1NFSVJEaXNlYXNlX0ZEX1JlZmVyZW5jZS9BZ2luZ1NFSVJEaXNlYXNlL3J1bnBhcmFtZXRlcnMuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFiNTFhNmMKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FnaW5nU0VJUkRpc2Vhc2VfRkRfUmVmZXJlbmNlL0FnaW5nU0VJUkRpc2Vhc2UvcnVucGFyYW1ldGVycy5jc3YKQEAgLTAsMCArMSwyIEBACitkaXNlYXNlTmFtZSxwb3B1bGF0aW9uSWRlbnRpZmllcix0aW1lUGVyaW9kLGZyZXF1ZW5jeURlcGVuZGVudCxyZWZlcmVuY2VQb3B1bGF0aW9uRGVuc2l0eSxyb2FkTmV0d29ya0luZmVjdGlvdXNQcm9wb3J0aW9uLGNoYXJhY3RlcmlzdGljTWl4aW5nRGlzdGFuY2UscG9wdWxhdGlvbkdyb3Vwcyx0cmFuc21pc3Npb25SYXRlLHJlY292ZXJ5UmF0ZSxpbmZlY3Rpb3VzTW9ydGFsaXR5UmF0ZSxpbW11bml0eUxvc3NSYXRlLGluY3ViYXRpb25SYXRlCitBZ2luZ1NFSVJEaXNlYXNlLGh1bWFuLDg2NDAwMDAwLHRydWUsMTAwLjAsMC4wMSwyLjI1LG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uaW1wbC5TdHJpbmdWYWx1ZUxpc3RJbXBsQDUwNjY1MDY2LG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uaW1wbC5Eb3VibGVWYWx1ZU1hdHJpeEltcGxANTBhZTUwYWUsb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5pbXBsLkRvdWJsZVZhbHVlTGlzdEltcGxANTFkZDUxZGQgKGlkZW50aWZpZXI6IG51bGwpLG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uaW1wbC5Eb3VibGVWYWx1ZUxpc3RJbXBsQDUyMzE1MjMxIChpZGVudGlmaWVyOiBudWxsKSxvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLmltcGwuRG91YmxlVmFsdWVMaXN0SW1wbEA1MjllNTI5ZSAoaWRlbnRpZmllcjogbnVsbCksb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5pbXBsLkRvdWJsZVZhbHVlTGlzdEltcGxANTJlOTUyZTkgKGlkZW50aWZpZXI6IG51bGwpClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BZ2luZ19GRF9SZWZlcmVuY2UvTm9EaXNlYXNlL2h1bWFuMHRvMC9EaXNlYXNlIERlYXRoc18yLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWdpbmdfRkRfUmVmZXJlbmNlL05vRGlzZWFzZS9odW1hbjB0bzAvRGlzZWFzZSBEZWF0aHNfMi5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGFkMWE1YgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWdpbmdfRkRfUmVmZXJlbmNlL05vRGlzZWFzZS9odW1hbjB0bzAvRGlzZWFzZSBEZWF0aHNfMi5jc3YKQEAgLTAsMCArMSwzMyBAQAoraXRlcmF0aW9uLHRpbWUsRUctRlJHLUcyMTAwMDEsRUctRlJHLUcyMTAwMDIsRUctRlJHLUcyMTAwMDMsRUctRlJHLUcyMTAwMDQsRUctRlJHLUcyMTAwMDUsRUctTE9FLUcyNDAwMDEsRUctTE9FLUcyNDAwMDIsRUctTE9FLUcyNDAwMDMsRUctTE9FLUcyNDAwMDQsRUctTE9FLUcyNDAwMDUsRUctTE9FLUcyNDAwMDYsRUctTE9FLUcyNDAwMDcsRUctTE9FLUcyNDAwMDgsRUctTE9FLUcyNDAwMDksRUctVVBFLUcyOTAwMDEsRUctVVBFLUcyOTAwMDIsRUctVVBFLUcyOTAwMDMsRUctVVBFLUcyOTAwMDQsRUctVVBFLUcyOTAwMDUsRUctVVBFLUcyOTAwMDYsRUctVVBFLUcyOTAwMDcsRUctVVBFLUcyOTAwMDgsRUctVVJHLUczMDAwMDEsRUctVVJHLUczMDAwMDIsRUctVVJHLUczMDAwMDMsRUctVVJHLUczMDAwMDQKKzEsVHVlIDI1IEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyLFdlZCAyNiBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMyxUaHUgMjcgSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzQsRnJpIDI4IEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCis1LFNhdCAyOSBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorNixTdW4gMzAgSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzcsTW9uIDMxIEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCis4LFR1ZSAxIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCis5LFdlZCAyIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxMCxUaHUgMyBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTEsRnJpIDQgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzEyLFNhdCA1IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxMyxTdW4gNiBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTQsTW9uIDcgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzE1LFR1ZSA4IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxNixXZWQgOSBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTcsVGh1IDEwIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxOCxGcmkgMTEgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzE5LFNhdCAxMiBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjAsU3VuIDEzIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyMSxNb24gMTQgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzIyLFR1ZSAxNSBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjMsV2VkIDE2IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyNCxUaHUgMTcgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzI1LEZyaSAxOCBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjYsU2F0IDE5IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyNyxTdW4gMjAgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzI4LE1vbiAyMSBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjksVHVlIDIyIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCiszMCxXZWQgMjMgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzMxLFRodSAyNCBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMzIsRnJpIDI1IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FnaW5nX0ZEX1JlZmVyZW5jZS9Ob0Rpc2Vhc2UvaHVtYW4wdG8wL0lfMi5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FnaW5nX0ZEX1JlZmVyZW5jZS9Ob0Rpc2Vhc2UvaHVtYW4wdG8wL0lfMi5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGFkMWE1YgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWdpbmdfRkRfUmVmZXJlbmNlL05vRGlzZWFzZS9odW1hbjB0bzAvSV8yLmNzdgpAQCAtMCwwICsxLDMzIEBACitpdGVyYXRpb24sdGltZSxFRy1GUkctRzIxMDAwMSxFRy1GUkctRzIxMDAwMixFRy1GUkctRzIxMDAwMyxFRy1GUkctRzIxMDAwNCxFRy1GUkctRzIxMDAwNSxFRy1MT0UtRzI0MDAwMSxFRy1MT0UtRzI0MDAwMixFRy1MT0UtRzI0MDAwMyxFRy1MT0UtRzI0MDAwNCxFRy1MT0UtRzI0MDAwNSxFRy1MT0UtRzI0MDAwNixFRy1MT0UtRzI0MDAwNyxFRy1MT0UtRzI0MDAwOCxFRy1MT0UtRzI0MDAwOSxFRy1VUEUtRzI5MDAwMSxFRy1VUEUtRzI5MDAwMixFRy1VUEUtRzI5MDAwMyxFRy1VUEUtRzI5MDAwNCxFRy1VUEUtRzI5MDAwNSxFRy1VUEUtRzI5MDAwNixFRy1VUEUtRzI5MDAwNyxFRy1VUEUtRzI5MDAwOCxFRy1VUkctRzMwMDAwMSxFRy1VUkctRzMwMDAwMixFRy1VUkctRzMwMDAwMyxFRy1VUkctRzMwMDAwNAorMSxUdWUgMjUgSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzIsV2VkIDI2IEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCiszLFRodSAyNyBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorNCxGcmkgMjggSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzUsU2F0IDI5IEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCis2LFN1biAzMCBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorNyxNb24gMzEgSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzgsVHVlIDEgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzksV2VkIDIgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzEwLFRodSAzIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxMSxGcmkgNCBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTIsU2F0IDUgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzEzLFN1biA2IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxNCxNb24gNyBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTUsVHVlIDggRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzE2LFdlZCA5IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxNyxUaHUgMTAgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzE4LEZyaSAxMSBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTksU2F0IDEyIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyMCxTdW4gMTMgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzIxLE1vbiAxNCBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjIsVHVlIDE1IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyMyxXZWQgMTYgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzI0LFRodSAxNyBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjUsRnJpIDE4IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyNixTYXQgMTkgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzI3LFN1biAyMCBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjgsTW9uIDIxIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyOSxUdWUgMjIgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzMwLFdlZCAyMyBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMzEsVGh1IDI0IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCiszMixGcmkgMjUgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWdpbmdfRkRfUmVmZXJlbmNlL05vRGlzZWFzZS9odW1hbjB0bzAvSW5jaWRlbmNlXzIuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BZ2luZ19GRF9SZWZlcmVuY2UvTm9EaXNlYXNlL2h1bWFuMHRvMC9JbmNpZGVuY2VfMi5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGFkMWE1YgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWdpbmdfRkRfUmVmZXJlbmNlL05vRGlzZWFzZS9odW1hbjB0bzAvSW5jaWRlbmNlXzIuY3N2CkBAIC0wLDAgKzEsMzMgQEAKK2l0ZXJhdGlvbix0aW1lLEVHLUZSRy1HMjEwMDAxLEVHLUZSRy1HMjEwMDAyLEVHLUZSRy1HMjEwMDAzLEVHLUZSRy1HMjEwMDA0LEVHLUZSRy1HMjEwMDA1LEVHLUxPRS1HMjQwMDAxLEVHLUxPRS1HMjQwMDAyLEVHLUxPRS1HMjQwMDAzLEVHLUxPRS1HMjQwMDA0LEVHLUxPRS1HMjQwMDA1LEVHLUxPRS1HMjQwMDA2LEVHLUxPRS1HMjQwMDA3LEVHLUxPRS1HMjQwMDA4LEVHLUxPRS1HMjQwMDA5LEVHLVVQRS1HMjkwMDAxLEVHLVVQRS1HMjkwMDAyLEVHLVVQRS1HMjkwMDAzLEVHLVVQRS1HMjkwMDA0LEVHLVVQRS1HMjkwMDA1LEVHLVVQRS1HMjkwMDA2LEVHLVVQRS1HMjkwMDA3LEVHLVVQRS1HMjkwMDA4LEVHLVVSRy1HMzAwMDAxLEVHLVVSRy1HMzAwMDAyLEVHLVVSRy1HMzAwMDAzLEVHLVVSRy1HMzAwMDA0CisxLFR1ZSAyNSBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMixXZWQgMjYgSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzMsVGh1IDI3IEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCis0LEZyaSAyOCBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorNSxTYXQgMjkgSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzYsU3VuIDMwIEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCis3LE1vbiAzMSBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorOCxUdWUgMSBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorOSxXZWQgMiBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTAsVGh1IDMgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzExLEZyaSA0IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxMixTYXQgNSBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTMsU3VuIDYgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzE0LE1vbiA3IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxNSxUdWUgOCBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTYsV2VkIDkgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzE3LFRodSAxMCBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTgsRnJpIDExIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxOSxTYXQgMTIgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzIwLFN1biAxMyBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjEsTW9uIDE0IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyMixUdWUgMTUgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzIzLFdlZCAxNiBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjQsVGh1IDE3IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyNSxGcmkgMTggRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzI2LFNhdCAxOSBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjcsU3VuIDIwIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyOCxNb24gMjEgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzI5LFR1ZSAyMiBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMzAsV2VkIDIzIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCiszMSxUaHUgMjQgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzMyLEZyaSAyNSBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BZ2luZ19GRF9SZWZlcmVuY2UvTm9EaXNlYXNlL2h1bWFuMHRvMC9Qb3B1bGF0aW9uIENvdW50XzIuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BZ2luZ19GRF9SZWZlcmVuY2UvTm9EaXNlYXNlL2h1bWFuMHRvMC9Qb3B1bGF0aW9uIENvdW50XzIuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgyMDIxYmUKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FnaW5nX0ZEX1JlZmVyZW5jZS9Ob0Rpc2Vhc2UvaHVtYW4wdG8wL1BvcHVsYXRpb24gQ291bnRfMi5jc3YKQEAgLTAsMCArMSwzMyBAQAoraXRlcmF0aW9uLHRpbWUsRUctRlJHLUcyMTAwMDEsRUctRlJHLUcyMTAwMDIsRUctRlJHLUcyMTAwMDMsRUctRlJHLUcyMTAwMDQsRUctRlJHLUcyMTAwMDUsRUctTE9FLUcyNDAwMDEsRUctTE9FLUcyNDAwMDIsRUctTE9FLUcyNDAwMDMsRUctTE9FLUcyNDAwMDQsRUctTE9FLUcyNDAwMDUsRUctTE9FLUcyNDAwMDYsRUctTE9FLUcyNDAwMDcsRUctTE9FLUcyNDAwMDgsRUctTE9FLUcyNDAwMDksRUctVVBFLUcyOTAwMDEsRUctVVBFLUcyOTAwMDIsRUctVVBFLUcyOTAwMDMsRUctVVBFLUcyOTAwMDQsRUctVVBFLUcyOTAwMDUsRUctVVBFLUcyOTAwMDYsRUctVVBFLUcyOTAwMDcsRUctVVBFLUcyOTAwMDgsRUctVVJHLUczMDAwMDEsRUctVVJHLUczMDAwMDIsRUctVVJHLUczMDAwMDMsRUctVVJHLUczMDAwMDQKKzEsVHVlIDI1IEphbiAxMSwxMTgwMjkuNiwxMDUzODMuMjAwMDAwMDAwMDEsNjEzNDEuNjAwMDAwMDAwMDA2LDEyNjgwOS4yMDAwMDAwMDAwMSwxMjc4MjIuNDAwMDAwMDAwMDEsMjA2NjI5OS4yMDAwMDAwMDAyLDIyNDU0NDUuMiwxODQwMzU2LjgsMTU5ODUzNS42LDE5OTg1NzIuMCw0MDU4NTEuMiwyMzcyNTMxLjIsNDY5NTM3LjYwMDAwMDAwMDAzLDEyNDY0NDEuNiwxMTE0MDkxLjYsMjU1NzQ5NC44MDAwMDAwMDAzLDE4NTI4MDQuMCw1MjEwNzcuMiwxNTE2NTcxLjIwMDAwMDAwMDIsMTAwOTk5NC4wLDE0OTIwNzguMCwxNjU2OTE0LjgsMTQ3Mzk3Ni4wLDMzNTk4OTYuNDAwMDAwMDAwNCwyMTQyNjYuNDAwMDAwMDAwMDIsMjY4Mi44CisyLFdlZCAyNiBKYW4gMTEsMTE3NzEyLjM0NzQxMzMzOTg3LDEwNTA5OS45Mzk3NjAyNzYwNiw2MTE3Ni43MTk0ODQ2ODk2OCwxMjY0NjguMzQ4NjY1MTQ1ODUsMTI3NDc4LjgyNTI3Nzc4NTM1LDIwNjA3NDUuMTc5OTQwNTA4NywyMjM5NDA5LjY1MjE1NTE5MiwxODM1NDEwLjA5MjA5NjQxLDE1OTQyMzguODg0OTg5Nzk2NywxOTkzMjAwLjAyNDM1NDY4MjgsNDA0NzYwLjMwOTcyMzMzMTEsMjM2NjE1NC4wNTY4MDc2ODMzLDQ2ODI3NS41MjY2MDM3MTQ3NCwxMjQzMDkxLjI4MDkxMjkxNjksMTExMTA5Ny4wMjU0MDI4MTE2LDI1NTA2MjAuNDkxODU0NjcyLDE4NDc4MjMuODM1MTgwNTQ2LDUxOTY3Ni41OTI5NTI3MDMyNCwxNTEyNDk0Ljc5NzY3MzM0NDQsMTAwNzI3OS4yMzAwNjkzMTEzLDE0ODgwNjcuNDMzMTE2Nzg4NywxNjUyNDYxLjE2NzEzMDE0ODMsMTQ3MDAxNC4wODk2MDkwOSwzMzUwODY1LjMxMDk4NjY1MDYsMjEzNjkwLjQ3MTg0NjA5MzI1LDI2NzUuNTg4ODgzMTMxOTI4CiszLFRodSAyNyBKYW4gMTEsMTE3Mzk1Ljk3NzgyMjAxMzEzLDEwNDgxNy40Njc5MDY0NjM5Miw2MTAxMi4yOTc4NzQxNTAyMTYsMTI2MTI4LjQ0NjAwNjk5NTA5LDEyNzEzNi4yMDY4MTIxNTk3NCwyMDU1MjA2LjYxODE0MzYxNCwyMjMzMzkwLjkwMjc4ODMzMywxODMwNDc3LjE1MjE0OTg5MywxNTg5OTU0LjEyODgzOTcwMTYsMTk4Nzg0My4wMDAyOTU2NTgsNDAzNjcyLjQ1NTY3NDE0NzkzLDIzNTk3OTQuNjYyODQwNzk3Niw0NjcwMTYuOTY1ODgxNDUwNiwxMjM5NzUwLjI4NjYyMzMwOTQsMTEwODExMC43ODU0NzQ5MjQ0LDI1NDM3NjUuMzE2NjcyMzc2NCwxODQyODU3LjUzMTQzNzM0NDYsNTE4Mjc5Ljg4NDE1NDExNjQsMTUwODQyOS43NDEwMjAwODE4LDEwMDQ1NzIuMDE2MDM5NzU4OSwxNDg0MDY4LjAyODY3MDA0MywxNjQ4MDE5LjkyOTg2MzA2MjUsMTQ2NjA2My4yMDYyMzExNDU3LDMzNDE4NTkuMzU3ODEwNzY3NCwyMTMxMTYuMTQ2NjQ3OTgxNDgsMjY2OC4zOTc4MzY2NTE5NjU1Cis0LEZyaSAyOCBKYW4gMTEsMTE3MDgwLjQ4ODYzNjY0OTkxLDEwNDUzNS43ODIxMjY2MzQzNyw2MDg0OC4zMzM4MjI2NTA2MjQsMTI1Nzg5LjQ4OTI0MzU2ODI3LDEyNjc5NC41NDE3OTg5MTU4NCwyMDQ5NjgzLjQ2OTI3ODIwNSwyMjI3Mzg4LjkwMjYzODE1MjcsMTgyNTU1Ny45Mzk3ODYxMzMsMTU4NTY4MS4yOTY0ODA1NDY3LDE5ODI1MDAuODgzOTc3NjM0OCw0MDI1ODcuNjI4OTQ4NzYxNCwyMzUzNDUyLjk2NjA1MDAxOTUsNDY1NzYxLjkwNzUzMjM0NjY3LDEyMzY0MTguNTg5Nzg2MzU2MywxMTA1MTMyLjg1NTc3NTA1MjQsMjUzNjkyOS4yMTgzNDYwMDE2LDE4Mzc5MDUuMDQ4MTIzMDA4OCw1MTY4ODcuMDYyMTcyNjg2NzQsMTUwNDM3NS45OTY3NjkyMDQ3LDEwMDE4NzIuMzM1NzUzNzgyLDE0ODAwNzkuNzUzOTI2MDk0MiwxNjQzNTkxLjA1MTg0ODgzMzIsMTQ2MjEyMy4zMTc1Mjk2MjU1LDMzMzI4NzguNDY2NzYxOTA1LDIxMjU0My40MTk3MDUwMjIxOCwyNjYxLjIyNjgwMTcwNDAxNjUKKzUsU2F0IDI5IEphbiAxMSwxMTY3NjUuODc3Mjc1NTk1NywxMDQyNTQuODgwMTE1NzQ2ODcsNjA2ODQuODI1OTg4NDY5NjgsMTI1NDUxLjQ3NTYwMTE3NTIyLDEyNjQ1My44Mjc0NDIyMDE4MSwyMDQ0MTc1LjY4ODE0ODI0MDgsMjIyMTQwMy42MDI1OTAxNTk1LDE4MjA2NTIuNDE0NzUxMTEzMiwxNTgxNDIwLjM1Mjk0NzY1NjgsMTk3NzE3My42MzE2ODU5NjU1LDQwMTUwNS44MjA2NzAwMTIsMjM0NzEyOC45MTQ1NDExMTM3LDQ2NDUxMC4zNDEyODYyMzQ0NCwxMjMzMDk2LjE2MzEzODcxNCwxMTAyMTYzLjIxMTkzNDczNTUsMjUzMDExMi4xNDA5MzU2MTQyLDE4MzI5NjYuMzQ0NzExMjY1OCw1MTU0OTguMTE1NjEwOTIzMywxNTAwMzMzLjUzMTc0ODg0MDQsOTk5MTgwLjE2NzExOTg0MTEsMTQ3NjEwMi41NzYyNDg4MDc4LDE2MzkxNzQuNDk2ODQ1ODYwNSwxNDU4MTk0LjM5MTI2NDMzOTIsMzMyMzkyMi41NjQzNDkyNDYsMjExOTcyLjI4NjMzMDU3ODk3LDI2NTQuMDc1NzE5NjA3MzU0Cis2LFN1biAzMCBKYW4gMTEsMTE2NDUyLjE0MTE2NDg4OTA1LDEwMzk3NC43NTk1NzU2Mjk2NCw2MDUyMS43NzMwMzM4ODQzNywxMjUxMTQuNDAyMzE0MzkxMDUsMTI2MTE0LjA2MDk1NDQ5NzEyLDIwMzg2ODMuMjI5NjkyMzU5NywyMjE1NDM0Ljk1MzY3NjIxOCwxODE1NzYwLjUzNjkxMDc3MDIsMTU3NzE3MS4yNjMzODA1NDcsMTk3MTg2MS4xOTk4MzYyNjY3LDQwMDQyNy4wMjE5ODcxOTMyLDIzNDA4MjIuNDU2NTc0NDgzMyw0NjMyNjIuMjU2OTAzNTQ5NjYsMTIyOTc4Mi45Nzk0OTgyOCwxMDk5MjAxLjgyOTY1ODEyOSwyNTIzMzE0LjAyODY2Nzk3NTcsMTgyODA0MS4zODA3OTY2MDYsNTE0MTEzLjAzMzEwNTI5ODM1LDE0OTYzMDIuMzEyODg1OTY0Myw5OTY0OTUuNDg4MTEyMjI3MywxNDcyMTM2LjQ2MzA5OTMwMTYsMTYzNDc3MC4yMjg3MjA1NDA0LDE0NTQyNzYuMzk1MjkxMTY4NSwzMzE0OTkxLjU3NzMwMDk2OTUsMjExNDAyLjc0MTg1MTk4MTEsMjY0Ni45NDQ1MzE4NTYxMTQKKzcsTW9uIDMxIEphbiAxMSwxMTYxMzkuMjc3NzM4MjM5MjgsMTAzNjk1LjQxODIxNDk1OTc5LDYwMzU5LjE3MzYyNTE1ODI2LDEyNDc3OC4yNjY2MjYwMzIyMywxMjU3NzUuMjM5NTU2NTg4NSwyMDMzMjA2LjA0ODk4MzQ4OTQsMjIwOTQ4Mi45MDcwNzQxMjY0LDE4MTA4ODIuMjY2MjUwNjQ2LDE1NzI5MzMuOTkzMDIyNjIzLDE5NjY1NjMuNTQ0OTc0MDQzMywzOTkzNTEuMjI0MDc1OTc1LDIzMzQ1MzMuNTQwNTY0NzI0Miw0NjIwMTcuNjQ0MTc1MjQzMzMsMTIyNjQ3OS4wMTE3NjM5NTksMTA5NjI0OC42ODQ3MjE3OTMzLDI1MTY1MzQuODI1OTM2MDU5NSwxODIzMTMwLjExNjA5MzkzNDcsNTEyNzMxLjgwMzMyNjE0OTIsMTQ5MjI4Mi4zMDcyMDYxMTUsOTkzODE4LjI3Njc3MDg3MTQsMTQ2ODE4MS4zODIwMzU2NjM4LDE2MzAzNzguMjExNDQ2OTUyLDE0NTAzNjkuMjk3NTYxNzg5NCwzMzA2MDg1LjQzMjU2MzYxMzYsMjEwODM0Ljc4MTYxMDQ4MzEzLDI2MzkuODMzMTgwMTE4Nzg3Cis4LFR1ZSAxIEZlYiAxMSwxMTU4MjcuMjg0NDM3MDA0MzUsMTAzNDE2Ljg1Mzc0OTI0MzU0LDYwMTk3LjAyNjQzMjUzMDAzLDEyNDQ0My4wNjU3ODcxMzI4MSwxMjU0MzcuMzYwNDc3NTQ1ODQsMjAyNzc0NC4xMDEyMjg0NTkzLDIyMDM1NDcuNDE0MTA3MTkxNCwxODA2MDE3LjU2Mjg3NTU0MiwxNTY4NzA4LjUwNzIyMDg3ODUsMTk2MTI4MC42MjM3NzQzMTI3LDM5ODI3OC40MTgxMzgzMjc1LDIzMjgyNjIuMTE1MDgwMTc3Myw0NjA3NzYuNDkyOTIyNjkzNywxMjIzMTg0LjIzMjkxNTQyOCwxMDkzMzAzLjc1Mjk3NDQ4NDgsMjUwOTc3NC40NzcyOTg1NzIsMTgxODIzMi41MTA0MzgyMjM4LDUxMTM1NC40MTQ5Nzc1ODAyLDE0ODgyNzMuNDgxODMzMTA4Miw5OTExNDguNTExMjAxMTU0MywxNDY0MjM3LjMwMDcxMjY3MzUsMTYyNTk5OC40MDkxMDY1NDc1LDE0NDY0NzMuMDY2MTIzMzk1NSwzMjk3MjA0LjA1NzMwMTQ0NzMsMjEwMjY4LjQwMDk2MTIyNDYsMjYzMi43NDE2MDYyMzc3MTc0Cis5LFdlZCAyIEZlYiAxMSwxMTU1MTYuMTU4NzEwMTY4NjYsMTAzMTM5LjA2MzkwMDc5NjQ1LDYwMDM1LjMzMDEzMDIwMTk0LDEyNDEwOC43OTcwNTY5MjA2NCwxMjUxMDAuNDIwOTU0Njk4MzMsMjAyMjI5Ny4zNDE3Njc2MTIxLDIxOTc2MjguNDI2MjQzODEwNCwxODAxMTY2LjM4NzAwOTE3NDYsMTU2NDQ5NC43NzE0MjU1OTc0LDE5NTYwMTIuMzkzMDQxMjMsMzk3MjA4LjU5NTQwMjQ0NDgzLDIzMjIwMDguMTI4ODQyNDg0Nyw0NTk1MzguNzkyOTk3NjE4MjYsMTIxOTg5OC42MTYwMTI5MDMyLDEwOTAzNjcuMDEwMzM2OTQ3LDI1MDMwMzIuOTI3NDc5NDcyLDE4MTMzNDguNTIzNzg0MTYzNiw1MDk5ODAuODU2Nzk3MzY1MiwxNDg0Mjc1LjgwMzk4ODc1MzQsOTg4NDg2LjE2OTU3MzcxNzgsMTQ2MDMwNC4xODY4ODE1MTk5LDE2MjE2MzAuNzg1ODg3ODM5NSwxNDQyNTg3LjY2OTExODQyMDcsMzI4ODM0Ny4zNzg4OTU4Mzg3LDIwOTcwMy41OTUyNzMxODk4NiwyNjI1LjY2OTc1MjIyODU5NzYKKzEwLFRodSAzIEZlYiAxMSwxMTUyMDUuODk4MDE0MzIxMDYsMTAyODYyLjA0NjM5ODcyMzY5LDU5ODc0LjA4MzM5NjMyODM2LDEyMzc3NS40NTc3MDI3OTM1NiwxMjQ3NjQuNDE4MjMzNjEwNDksMjAxNjg2NS43MjYwNzQ0MTg4LDIxOTE3MjUuODk1MDk3MDUwNCwxNzk2MzI4LjY5ODk5MzgzMDUsMTU2MDI5Mi43NTExOTAwNTM1LDE5NTA3NTguODA5NzA3NzE0MiwzOTYxNDEuNzQ3MTIyNjY5NCwyMzE1NzcxLjUzMDcyNjE0NjQsNDU4MzA0LjUzNDI4MTk4NTgzLDEyMTY2MjIuMTM0MTk2OTA2MSwxMDg3NDM4LjQzMjgwMTcwMTgsMjQ5NjMxMC4xMjEzNjc0OTEzLDE4MDg0NzguMTE2MjA1ODE3LDUwODYxMS4xMTc1NTY4NDk5NiwxNDgwMjg5LjI0MDk5MjU2OTEsOTg1ODMxLjIzMDEyNDI3NTQsMTQ1NjM4Mi4wMDgzODk1MjQsMTYxNzI3NS4zMDYwODYwOTM0LDE0Mzg3MTMuMDc0Nzg0MjY1MSwzMjc5NTE1LjMyNDk0NDYyOCwyMDkxNDAuMzU5OTI5MTY4MDEsMjYxOC42MTc1NjAyNzk5Njg1CisxMSxGcmkgNCBGZWIgMTEsMTE0ODk2LjQ5OTgxMzYzMjgsMTAyNTg1Ljc5ODk3ODkwMDQ0LDU5NzEzLjI4NDkxMzAwNDM2LDEyMzQ0My4wNDUwMDAyOTU5MSwxMjQ0MjkuMzQ5NTY4MDU4MzQsMjAxMTQ0OS4yMDk3NTUwOTI0LDIxODU4MzkuNzcyNDI0MjI4NSwxNzkxNTA0LjQ1OTI5MDAyNDEsMTU1NjEwMi40MTIxNzAyMTM0LDE5NDU1MTkuODMwODM1MDc2MywzOTUwNzcuODY0NTc5NDE2MSwyMzA5NTUyLjI2OTc1ODA3OCw0NTcwNzMuNzA2Njg3OTI5MSwxMjEzMzU0Ljc2MDY4ODAzMjMsMTA4NDUxNy45OTY0MzI4NDI3LDI0ODk2MDYuMDA0MDE1NjYxMywxODAzNjIxLjI0Nzg5NjI3NDYsNTA3MjQ1LjE4NjA2MDg1NTEsMTQ3NjMxMy43NjAyNjE1MDE0LDk4MzE4My42NzExNTM0MjQ3LDE0NTI0NzAuNzMzMTc5ODYwMywxNjEyOTMxLjkzNDEwMzAxNjcsMTQzNDg0OS4yNTE0NTMwMTg3LDMyNzA3MDcuODIzMjYxNSwyMDg1NzguNjkwMzI1NzEzMDUsMjYxMS41ODQ5NzI3NTI3MTc1CisxMixTYXQgNSBGZWIgMTEsMTE0NTg3Ljk2MTU3OTgzNTYyLDEwMjMxMC4zMTkzODM5NTIyNiw1OTU1Mi45MzMzNjYyNTQyODUsMTIzMTExLjU1NjIzMzA5NDg2LDEyNDA5NS4yMTIyMjAwMDU2OCwyMDA2MDQ3Ljc0ODU0ODIwNDMsMjE3OTk3MC4wMTAxMjY0OTY3LDE3ODY2OTMuNjI4NDc2MTU1MiwxNTUxOTIzLjcyMDEyNDQzOSwxOTQwMjk1LjQxMzYxMjY0NjUsMzk0MDE2LjkzOTA3OTA5NywyMzAzMzUwLjI5NTExNzE2OCw0NTU4NDYuMzAwMTU3NjU3MywxMjEwMDk2LjQ2ODc4NjcxODMsMTA4MTYwNS42NzczNjU4MjY3LDI0ODI5MjAuNTIwNjQwODM0MiwxNzk4Nzc3Ljg3OTE2NzMwODYsNTA1ODgzLjA1MTE0NzU3OTMsMTQ3MjM0OS4zMjkzMDk2NDE0LDk4MDU0My40NzEwMjY0NTg3LDE0NDg1NzAuMzI5MjkxMjc5NCwxNjA4NjAwLjYzNDQ0NjQ1MjYsMTQzMDk5Ni4xNjc1NTExODg3LDMyNjE5MjQuODAxODc1MzYwMywyMDgwMTguNTgxODczMTAzODYsMjYwNC41NzE5MzIxNzk1ODEKKzEzLFN1biA2IEZlYiAxMSwxMTQyODAuMjgwNzkyMTk5ODMsMTAyMDM1LjYwNTM2MzIzNTU4LDU5MzkzLjAyNzQ0NjAyMDM4LDEyMjc4MC45ODg2OTI5NTY5MiwxMjM3NjIuMDAzNDU5NTgwMzQsMjAwMDY2MS4yOTgzMjQzMDEsMjE3NDExNi41NjAyNDg0MjM0LDE3ODE4OTYuMTY3MjQ4MTY3NiwxNTQ3NzU2LjY0MDkxMzE5MTUsMTkzNTA4NS41MTUzNTc0MDUsMzkyOTU4Ljk2MTk1NDA0NTg3LDIyOTcxNjUuNTU2MTMzODQxLDQ1NDYyMi4zMDQ2NjMzNjkyNiwxMjA2ODQ3LjIzMTg3MzAxMTcsMTA3ODcwMS40NTE4MDcyNjgyLDI0NzYyNTMuNjE2NjIzMjExLDE3OTM5NDcuOTcwNDQ5MDMxNiw1MDQ1MjQuNzAxNjg4NTAyNDUsMTQ2ODM5NS45MTU3NDc5NDM2LDk3NzkxMC42MDgxNzMxNzkyLDE0NDQ2ODAuNzY0ODU3ODMxOSwxNjA0MjgxLjM3MTczMDA3MTMsMTQyNzE1My43OTE1OTk0MjUzLDMyNTMxNjYuMTg5MDI5NzEyLDIwNzQ2MC4wMjk5OTUzMDQ2OCwyNTk3LjU3ODM4MTI2NDY0NworMTQsTW9uIDcgRmViIDExLDExMzk3My40NTQ5Mzc1MTI0OSwxMDE3NjEuNjU0NjcyODE4Miw1OTIzMy41NjU4NDYxNTE0NiwxMjI0NTEuMzM5Njc5NzI0NSwxMjM0MjkuNzIwNTY1MDUwNjEsMTk5NTI4OS44MTUwODU1MjIxLDIxNjgyNzkuMzc0OTc3NTgsMTc3NzExMi4wMzY0MTkyMDksMTU0MzYwMS4xNDA0OTg3MzUsMTkyOTg5MC4wOTM1MTM2MTE3LDM5MTkwMy45MjQ1NjI0NDM0LDIyOTA5OTguMDAyMjg5NjE2LDQ1MzQwMS43MTAyMDcxNjY0LDEyMDM2MDcuMDIzNDA2MzQwMywxMDc1ODA1LjI5NjAzNDczMzMsMjQ2OTYwNS4yMzc1MDU4Njc2LDE3ODkxMzEuNDgyMjg5NTUyLDUwMzE3MC4xMjY1ODgyODk2LDE0NjQ0NTMuNDg3MjgzOTQ2NSw5NzUyODUuMDYxMDg3NzEwMiwxNDQwODAyLjAwODEwODU5MTIsMTU5OTk3NC4xMTA2NzMwNjQ0LDE0MjMzMjIuMDkyMjEyMjQ5MywzMjQ0NDMxLjkxMzE4MjAzNiwyMDY5MDMuMDMwMTI5OTI1MzIsMjU5MC42MDQyNjI4ODI4NTgKKzE1LFR1ZSA4IEZlYiAxMSwxMTM2NjcuNDgxNTEwMDU1NywxMDE0ODguNDY1MDc1NDU5ODgsNTkwNzQuNTQ3MjY0MzkxNjEsMTIyMTIyLjYwNjUwMTI5MjU0LDEyMzA5OC4zNjA4MjI4MDE2MSwxOTg5OTMzLjI1NDk2NTIyLDIxNjI0NTguNDA2NjQ0MTI0NSwxNzcyMzQxLjE5NjkxOTI5MjIsMTUzOTQ1Ny4xODQ5NDQ4NDI3LDE5MjQ3MDkuMTA1NjUyNDM4MiwzOTA4NTEuODE4Mjg4MjQyMjcsMjI4NDg0Ny41ODMyMTY2NzA0LDQ1MjE4NC41MDY4MjA5NjY0LDEyMDAzNzUuODE2OTI1MjgyLDEwNzI5MTcuMTg2Mzk2NTMzOSwyNDYyOTc1LjMyODk5NDI4MywxNzg0MzI4LjM3NTM1NDYzMzcsNTAxODE5LjMxNDc4NDY5NDc1LDE0NjA1MjIuMDExNzIxNDkyMyw5NzI2NjYuODA4MzI4MzExLDE0MzY5MzQuMDI3MzY3MzgsMTU5NTY3OC44MTYwOTk4Mzk4LDE0MTk1MDEuMDM4MDk3NzgxMSwzMjM1NzIxLjkwMzAwMzE2ODMsMjA2MzQ3LjU3NzcyODE4MTgyLDI1ODMuNjQ5NTIwMDc5NTE4NAorMTYsV2VkIDkgRmViIDExLDExMzM2Mi4zNTgwMTE1ODQ4NiwxMDEyMTYuMDM0MzQwNTkyOTMsNTg5MTUuOTcwNDAyMzY4ODcsMTIxNzk0Ljc4NjQ3MzU4NTE4LDEyMjc2Ny45MjE1MjczMTE4MywxOTg0NTkxLjU3NDIyNzU3OSwyMTU2NjUzLjYwNzcyMDM5MjMsMTc2NzU4My42MDk3OTQ5NTU1LDE1MzUzMjQuNzQwNDE2NTAyNiwxOTE5NTQyLjUwOTQ3MTYsMzg5ODAyLjYzNDU0MTA5MjUsMjI3ODcxNC4yNDg2OTc0MDQsNDUwOTcwLjY4NDU2NjQxNjY2LDExOTcxNTMuNTg2MDQ3MzM2LDEwNzAwMzcuMDk5MzExNTIzMSwyNDU2MzYzLjgzNjk1NTg3MDUsMTc3OTUzOC42MTA0MjczNTQ3LDUwMDQ3Mi4yNTUyNDg0NjQ5MywxNDU2NjAxLjQ1Njk2MDQ0ODMsOTcwMDU1LjgyODUxNzE5MSwxNDMzMDc2Ljc5MTA1MjQ5NDcsMTU5MTM5NS40NTI5Mzk3MTYyLDE0MTU2OTAuNTk4MDU3NDY4NywzMjI3MDM2LjA4NzM3NjY4NSwyMDU3OTMuNjY4MjU0ODU2ODYsMjU3Ni43MTQwOTYwNjk3OTkKKzE3LFRodSAxMCBGZWIgMTEsMTEzMDU4LjA4MTk1MTMwNzAyLDEwMDk0NC4zNjAyNDQzMDI5MSw1ODc1Ny44MzM5NjU1ODQwMywxMjE0NjcuODc2OTIwNTMyNTEsMTIyNDM4LjM5OTk4MTEyOTcsMTk3OTI2NC43MjkyNjcyMzYzLDIxNTA4NjQuOTMwODIwNDgxLDE3NjI4MzkuMjM2MjA4OTI2NywxNTMxMjAzLjc3MzE3OTYyNCwxOTE0MzkwLjI2Mjc5NDk4OTksMzg4NzU2LjM2NDc1NjI2NzA1LDIyNzI1OTcuOTQ4NjY0MDAzLDQ0OTc2MC4yMzM1MzQ4MDgzLDExOTM5NDAuMzA0NDY4Njk0NiwxMDY3MTY1LjAxMTI2ODg5MTIsMjQ0OTc3MC43MDc0MTk1MDc3LDE3NzQ3NjIuMTQ4NDA3NzY3OCw0OTkxMjguOTM2OTgzMjQ0OSwxNDUyNjkxLjc5MDk5NjQyODgsOTY3NDUyLjEwMDM0MDMyNDcsMTQyOTIzMC4yNjc2NzY0MzI2LDE1ODcxMjMuOTg2MjI2NjIsMTQxMTg5MC43NDA5ODU4MTgsMzIxODM3NC4zOTUzOTgyODUyLDIwNTI0MS4yOTcxODgyNjA3LDI1NjkuNzk3OTM0MjM4MjQ2NAorMTgsRnJpIDExIEZlYiAxMSwxMTI3NTQuNjUwODQ1ODU5MywxMDA2NzMuNDQwNTY5MzA5MzcsNTg2MDAuMTM2NjYzMzk5NCwxMjExNDEuODc1MTc0MDQ3MzgsMTIyMTA5Ljc5MzQ5NDg1MDE1LDE5NzM5NTIuNjc2NjA4OTA1NCwyMTQ1MDkyLjMyODY5OTg0MSwxNzU4MTA4LjAzNzQzOTc4NTcsMTUyNzA5NC4yNDk2MDA3NDYyLDE5MDkyNTIuMzIzNTcyMzEzMiwzODc3MTMuMDAwMzk0NTg3NiwyMjY2NDk4LjYzMzE5ODAwODQsNDQ4NTUzLjE0Mzg0Njk5MDUsMTE5MDczNS45NDU5NjQwMTQ0LDEwNjQzMDAuODk4ODI3OTYxLDI0NDMxOTUuODg2NTc1MDY5LDE3Njk5OTguOTUwMzEyNTYxNiw0OTc3ODkuMzQ5MDI1NDgxOCwxNDQ4NzkyLjk4MTkyMDUxNzcsOTY0ODU1LjYwMjU0NzI2NjQsMTQyNTM5NC40MjU4NDU2MTg4LDE1ODI4NjQuMzgxMDk4NzgyLDE0MDgxMDEuNDM1ODcwMTIzMywzMjA5NzM2Ljc1NjM3NTE3NzgsMjA0NjkwLjQ2MDAyMDE5MTgyLDI1NjIuOTAwOTc4MTM4MjkyNAorMTksU2F0IDEyIEZlYiAxMSwxMTI0NTIuMDYyMjE5Mjg3NDMsMTAwNDAzLjI3MzEwNDk0NjYyLDU4NDQyLjg3NzIwOTAyNzU5NiwxMjA4MTYuNzc4NTc0MDAyMzIsMTIxNzgyLjA5OTM4NzA5MTQxLDE5Njg2NTUuMzcyOTA2OTk4NywyMTM5MzM1Ljc1NDI1NDg2OCwxNzUzMzg5Ljk3NDg4MTYyOSwxNTIyOTk2LjEzNjE0Njc0NiwxOTA0MTI4LjY0OTg3ODcyMjYsMzg2NjcyLjUzMjk0MjM1MDYsMjI2MDQxNi4yNTI1Mjk4OCw0NDczNDkuNDA1NjUzMjg0MzQsMTE4NzU0MC40ODQzODYxODk0LDEwNjE0NDQuNzM4NjE3OTg2LDI0MzY2MzkuMzIwNzcyOTU5LDE3NjUyNDguOTc3Mjc0NzIzLDQ5NjQ1My40ODA0NDQzMjk5NywxNDQ0OTA0Ljk5NzkxODk5Miw5NjIyNjYuMzEzOTUwOTY2NSwxNDIxNTY5LjIzNDI2MDEzNDIsMTU3ODYxNi42MDI3OTg0MzUxLDE0MDQzMjIuNjUxNzkwMTk4NCwzMjAxMTIzLjA5OTgyNTQ2NjUsMjA0MTQxLjE1MjI1NTg5NzkzLDI1NTYuMDIzMTcxNDkxNzY0NQorMjAsU3VuIDEzIEZlYiAxMSwxMTIxNTAuMzEzNjAzMDI0MTksMTAwMTMzLjg1NTY0NzE0NDU4LDU4Mjg2LjA1NDMxOTUyMDQ0NSwxMjA0OTIuNTg0NDY4MjA2NDIsMTIxNDU1LjMxNDk4NDQ3MTY3LDE5NjMzNzIuNzc0OTQ1MjUxNCwyMTMzNTk1LjE2MDUyMjQ5MDcsMTc0ODY4NS4wMTAwNDM3MzU0LDE1MTg5MDkuMzk5Mzg0NTQ4LDE4OTkwMTkuMTk5OTE0NDU1NCwzODU2MzQuOTUzOTExMjUzNTQsMjI1NDM1MC43NTcwMzg1Njc3LDQ0NjE0OS4wMDkxMzMzOTgxLDExODQzNTMuODkzNjY2MTI0NywxMDU4NTk2LjUwNzMzNzk0NywyNDMwMTAwLjk1NjUyMzY0OCwxNzYwNTEyLjE5MDU0MzE5OTcsNDk1MTIxLjMyMDM0MTU1NjQsMTQ0MTAyNy44MDcyNzMwNDY2LDk1OTY4NC4yMTM0Mjc1ODc4LDE0MTc3NTQuNjYxNzEzNDQ0LDE1NzQzODAuNjE2NjcxNTEzOCwxNDAwNTU0LjM1NzkxODEwODMsMzE5MjUzMy4zNTU0Nzc1NDE3LDIwMzU5My4zNjk0MTQwMzcwNCwyNTQ5LjE2NDQ1ODE4ODM5OAorMjEsTW9uIDE0IEZlYiAxMSwxMTE4NDkuNDAyNTM1ODY4MDgsOTk4NjUuMTg1OTk4NDA5NjQsNTgxMjkuNjY2NzE1NzU3ODA1LDEyMDE2OS4yOTAyMTIzODIzNCwxMjExMjkuNDM3NjIxNTg1OTUsMTk1ODEwNC44Mzk2MzYzNDc1LDIxMjc4NzAuNTAwNjc5NzY4NiwxNzQzOTkzLjEwNDU1MDIzMiwxNTE0ODM0LjAwNTk4MDgzMzcsMTg5MzkyMy45MzIwMDQ0NzA4LDM4NDYwMC4yNTQ4MzgzMjEwNywyMjQ4MzAyLjA5NzI1MTA4MSw0NDQ5NTEuOTQ0NDk2MzQxNywxMTgxMTc2LjE0NzgxMjUxMDEsMTA1NTc1Ni4xODE3NTYzNSwyNDIzNTgwLjc0MDQ5NzIwODcsMTc1NTc4OC41NTE0ODI1NjQ4LDQ5Mzc5Mi44NTc4NTE0NDYxNCwxNDM3MTYxLjM3ODM1ODUxODIsOTU3MTA5LjI3OTkxNjMyMjIsMTQxMzk1MC42NzcwOTIxMjczLDE1NzAxNTYuMzg4MTY3MzUyNCwxMzk2Nzk2LjUyMzUxNzkwMywzMTgzOTY3LjQ1MzI2OTQ2ODYsMjAzMDQ3LjEwNzAyNjYzODQ2LDI1NDIuMzI0NzgyMjg1MzQ5NgorMjIsVHVlIDE1IEZlYiAxMSwxMTE1NDkuMzI2NTYzOTYxOTYsOTk1OTcuMjYxOTY3ODA1NjQsNTc5NzMuNzEzMTIyNDM2NSwxMTk4NDYuODkzMTcwMTQzNDYsMTIwODA0LjQ2NDY0MDk4MzAyLDE5NTI4NTEuNTI0MDIxNTQ1NCwyMTIyMTYxLjcyODA0MzQ4MTIsMTczOTMxNC4yMjAxMzk3NjE3LDE1MTA3NjkuOTIyNzAxNzUzNCwxODg4ODQyLjgwNDU5ODA4ODQsMzgzNTY4LjQyNzI4NTgzMiwyMjQyMjcwLjIyMzg0MjA1ODMsNDQzNzU4LjIwMTk4MDM0MTc1LDExNzgwMDcuMjIwOTExNTk1MywxMDUyOTIzLjczODcxMTAyNTMsMjQxNzA3OC42MTk1MjI4NTMsMTc1MTA3OC4wMjE1NzI2ODE2LDQ5MjQ2OC4wODIxNDA3MDgxNywxNDMzMzA1LjY3OTY0NTYxMjEsOTU0NTQxLjQ5MjQxOTIwODMsMTQxMDE1Ny4yNDkzNzU2MDc2LDE1NjU5NDMuODgyODM4Mzg3MywxMzkzMDQ5LjExNzk0NTM0OSwzMTc1NDI1LjMyMzM0ODM4MiwyMDI1MDIuMzYwNjM5MDY0MjgsMjUzNS41MDQwODgwMDY3MTMKKzIzLFdlZCAxNiBGZWIgMTEsMTExMjUwLjA4MzI0MDc3MTc1LDk5MzMwLjA4MTM3MDkzNDg3LDU3ODE4LjE5MjI2ODA1OTI1NCwxMTk1MjUuMzkwNzEyOTcwOTMsMTIwNDgwLjM5MzM5MzE0MjI0LDE5NDc2MTIuNzg1MjcwMzA2MywyMTE2NDY4Ljc5NjA2OTcyNjMsMTczNDY0OC4zMTg2NjUxNTEsMTUwNjcxNy4xMTY0MTI2MzczLDE4ODM3NzUuNzc2MjY4NjI3NywzODI1MzkuNDYyODQxMjQ1OCwyMjM2MjU1LjA4NzYzMzM0MDYsNDQyNTY3Ljc3MTg1Mjc1NzIsMTE3NDg0Ny4wODcxMjY5NjQsMTA1MDA5OS4xNTUxMDg5MjY0LDI0MTA1OTQuNTQwNTg4NDY5NywxNzQ2MzgwLjU2MjQwODM2OTMsNDkxMTQ2Ljk4MjQwODM4MTMsMTQyOTQ2MC42Nzk2OTg2MjgsOTUxOTgwLjgzMDAwMDk0OTEsMTQwNjM3NC4zNDc2MzU4ODMsMTU2MTc0My4wNjYzMzk4NTYsMTM4OTMxMi4xMTA2NDc2NjYsMzE2NjkwNi44OTYwNjk4Nzg3LDIwMTk1OS4xMjU4MDk5NzA1NCwyNTI4LjcwMjMxOTc0MzAzNDQKKzI0LFRodSAxNyBGZWIgMTEsMTEwOTUxLjY3MDEyNzA2NTI0LDk5MDYzLjY0MjAyOTkxOTEsNTc2NjMuMTAyODg0OTIzNjcsMTE5MjA0Ljc4MDIyMDE5MDg4LDEyMDE1Ny4yMjEyMzY0NTA3LDE5NDIzODguNTgwNjc5OTIxNCwyMTEwNzkxLjY1ODM1MzUxNSwxNzI5OTk1LjM2MjA5MzA3OTYsMTUwMjY3NS41NTQwNzc3MDg0LDE4Nzg3MjIuODA1NzEzMDQ5NiwzODE1MTMuMzUzMTE3MTI5NzcsMjIzMDI1Ni42Mzk1OTM1NDUsNDQxMzgwLjY0NDQwOTk5NDY1LDExNzE2OTUuNzIwNjk5MzEwOCwxMDQ3MjgyLjQwNzkyNTkyOTIsMjQwNDEyOC40NTA4NDAxNjcyLDE3NDE2OTYuMTM1Njk5MDcsNDg5ODI5LjU0Nzg4NTc0MDYsMTQyNTYyNi4zNDcxNzU2ODc2LDk0OTQyNy4yNzE3ODg3MzAzLDE0MDI2MDEuOTQxMDM3MjU4NiwxNTU3NTUzLjkwNDQyOTUwMTIsMTM4NTU4NS40NzExNjMyNTk4LDMxNTg0MTIuMTAxOTk3NDE0NiwyMDE0MTcuMzk4MTExMjY4ODIsMjUyMS45MTk0MjIwNTA4MworMjUsRnJpIDE4IEZlYiAxMSwxMTA2NTQuMDg0NzkwODkwODYsOTg3OTcuOTQxNzczMzgwNjMsNTc1MDguNDQzNzA5MTExMjEsMTE4ODg1LjA1OTA3ODk1MTcsMTE5ODM0Ljk0NTUzNzE4MDIyLDE5MzcxNzguODY3Njc1MTQyNiwyMTA1MTMwLjI2ODYyODM2ODYsMTcyNTM1NS4zMTI1MDM3NDk1LDE0OTg2NDUuMjAyNzU5Nzk1NiwxODczNjgzLjg1MTc1MTU5NjcsMzgwNDkwLjA4OTc1MTA4NjIsMjIyNDI3NC44MzA4Mzc2MzgsNDQwMTk2LjgwOTk3NzQyNDMsMTE2ODU1My4wOTU5NDYyMTcyLDEwNDQ0NzMuNDc0MjA2NjMyOSwyMzk3NjgwLjI5NzU4MTgxMzMsMTczNzAyNC43MDMyNjg1MTY4LDQ4ODUxNS43Njc4MzYyMDM4NiwxNDIxODAyLjY1MDgyODQ2Myw5NDY4ODAuNzk2OTcyMDM5NCwxMzk4ODM5Ljk5ODgzNjA3ODcsMTU1MzM3Ni4zNjI5NjcyNzIzLDEzODE4NjkuMTY5MTIxNDU4NywzMTQ5OTQwLjg3MTkwMTcwMDcsMjAwODc3LjE3MzEyODA4NzcsMjUxNS4xNTUzMzk2NTIxMDQ0CisyNixTYXQgMTkgRmViIDExLDExMDM1Ny4zMjQ4MDc1NTY2NSw5ODUzMi45Nzg0MzY0MjM1OCw1NzM1NC4yMTM0ODA0NzYyNDYsMTE4NTY2LjIyNDY4NDIwMTM3LDExOTUxMy41NjM2Njk0NjQ1LDE5MzE5ODMuNjAzODA3ODEyLDIwOTk0ODQuNTgwNzY1OTE4NCwxNzIwNzI4LjEzMjA5MDU1NjcsMTQ5NDYyNi4wMjk2MjAwNDgxLDE4Njg2NTguODczMzI3NDM2OSwzNzk0NjkuNjY0NDA1Njc5OSwyMjE4MzA5LjYxMjYyNjUxMjUsNDM5MDE2LjI1ODkwOTI5NTcsMTE2NTQxOS4xODcyNjE5MjksMTA0MTY3Mi4zMzEwNjQxNjA0LDIzOTEyNTAuMDI4Mjc0NTc3NiwxNzMyMzY2LjIyNzA1NDQwMTUsNDg3MjA1LjYzMTU1NTIzODQ1LDE0MTc5ODkuNTU5NTAxOTA0OCw5NDQzNDEuMzg0ODAyNDg0OSwxMzk1MDg4LjQ5MDM4MDQ1OTcsMTU0OTIxMC40MDc5MTUwMjk0LDEzNzgxNjMuMTc0MjQyMjUwMiwzMTQxNDkzLjEzNjc2MDEwMzUsMjAwMzM4LjQ0NjQ1ODczNDYsMjUwOC40MTAwMTc0MzM4NzMKKzI3LFN1biAyMCBGZWIgMTEsMTEwMDYxLjM4Nzc1OTYwOTE4LDk4MjY4Ljc0OTg2MDYxNDk3LDU3MjAwLjQxMDk0MjYzNTEsMTE4MjQ4LjI3NDQzODY2NDgxLDExOTE5My4wNzMwMTUyNzYzOSwxOTI2ODAyLjc0Njc1NjQ5NCwyMDkzODU0LjU0ODc3NTUwMzksMTcxNjExMy43ODMxNTk3NjI0LDE0OTA2MTguMDAxOTE3NjUwMiwxODYzNjQ3LjgyOTUwNjMwNjQsMzc4NDUyLjA2ODc2ODM2NTcsMjIxMjM2MC45MzYzNjY1NjMsNDM3ODM4Ljk4MTU4ODY1NDU3LDExNjIyOTMuOTY5MTE3MTMzNiwxMDM4ODc4Ljk1NTY3OTk1OTUsMjM4NDgzNy41OTA1MzY0NzYsMTcyNzcyMC42NjkxMDgwNDUsNDg1ODk5LjEyODM3MDI2ODQ0LDE0MTQxODcuMDQyMTMzOTcxOCw5NDE4MDkuMDE0NTkzNjE2NCwxMzkxMzQ3LjM4NTExMDAyNDQsMTU0NTA1Ni4wMDUzMzYyNDg1LDEzNzQ0NjcuNDU2MzM2MDE4LDMxMzMwNjguODI3NzU2MDQ1NCwxOTk4MDEuMjEzNzE0NjU3NCwyNTAxLjY4MzQwMDQ0NzY4MDUKKzI4LE1vbiAyMSBGZWIgMTEsMTA5NzY2LjI3MTIzNjgxMjUsOTgwMDUuMjUzODkzOTY2MDYsNTcwNDcuMDM0ODQyOTU1MTUsMTE3OTMxLjIwNTc1MjgyMTM4LDExODg3My40NzA5NjQ0MDUwNSwxOTIxNjM2LjI1NDMyNjEwNzcsMjA4ODI0MC4xMjY4MDM3NzQyLDE3MTE1MTIuMjI4MTMwMTY2NCwxNDg2NjIxLjA4NzAwOTUzNjYsMTg1ODY1MC42Nzk0NzYxNTUsMzc3NDM3LjI5NDU1MTQxNjMsMjIwNjQyOC43NTM2MDkyNjY2LDQzNjY2NC45Njg0MjcyNTg2NiwxMTU5MTc3LjQxNjA1ODczOSwxMDM2MDkzLjMyNTMwMzYwNSwyMzc4NDQyLjkzMjE0MTkxNjQsMTcyMzA4Ny45OTE1OTQwNjc1LDQ4NDU5Ni4yNDc2NDA1ODE4LDE0MTAzOTUuMDY3NzU1MzYyLDkzOTI4My42NjU3MjA3NDQ2LDEzODc2MTYuNjUyNTU1NjM2NCwxNTQwOTEzLjEyMTM5NTcyNTgsMTM3MDc4MS45ODUzMDMyNzkyLDMxMjQ2NjcuODc2Mjc4NDA3NCwxOTkyNjUuNDcwNTIwNDA2NDcsMjQ5NC45NzU0MzM5MDkxMjY0CisyOSxUdWUgMjIgRmViIDExLDEwOTQ3MS45NzI4MzYxMjczNCw5Nzc0Mi40ODgzOTA5MTM1Nyw1Njg5NC4wODM5MzI1NDM5NiwxMTc2MTUuMDE2MDQ0ODgyMzIsMTE4NTU0Ljc1NDkxNDQzMzM1LDE5MTY0ODQuMDg0NDQ3NTYsMjA4MjY0MS4yNjkxMzQyODk4LDE3MDY5MjMuNDI5NTMyNzgsMTQ4MjYzNS4yNTIzNTAxMDk2LDE4NTM2NjcuMzgyNTQ2NzkwMiwzNzY0MjUuMzMzNDkxODUwMywyMjAwNTEzLjAxNjA1MDc1OSw0MzU0OTQuMjA5ODY1NDk0OSwxMTU2MDY5LjUwMjcwOTY1MTQsMTAzMzMxNS40MTcyNTI2MDEsMjM3MjA2Ni4wMDEwMjEyNDMsMTcxODQ2OC4xNTY3OTAwNjAyLDQ4MzI5Ni45Nzg3NTcyMzgxMywxNDA2NjEzLjYwNTQ4OTI0MjYsOTM2NzY1LjMxNzYyMDc2MjksMTM4Mzg5Ni4yNjIzMzkxMzU0LDE1MzY3ODEuNzIyMzU5Mjg0MywxMzY3MTA2LjczMTEzNDQyNCwzMTE2MjkwLjIxMzkyMDkzMjMsMTk4NzMxLjIxMjUxMzU5NjU4LDI0ODguMjg2MDYzMTk3Mzg4NgorMzAsV2VkIDIzIEZlYiAxMSwxMDkxNzguNDkwMTYxNjkwMSw5NzQ4MC40NTEyMTIzMDExMiw1Njc0MS41NTY5NjYyMzgzOSwxMTcyOTkuNzAyNzQwNzY4MzgsMTE4MjM2LjkyMjI3MDcxNTI3LDE5MTEzNDYuMTk1MTc3MzgwNywyMDc3MDU3LjkzMDE4NzEyNTIsMTcwMjM0Ny4zNTAwMTA1MDEyLDE0Nzg2NjAuNDY1NDkwOTU2LDE4NDg2OTcuODk4MTQ5NTI1NSwzNzU0MTYuMTc3MzUxMzYwNDQsMjE5NDYxMy42NzU1MzE0MTYsNDM0MzI2LjY5NjM3MjI5NjI1LDExNTI5NzAuMjAzNzY4NTU2NywxMDMwNTQ1LjIwODkxMjE4NDEsMjM2NTcwNi43NDUyNjAyODcsMTcxMzg2MS4xMjcwODYyNTY5LDQ4MjAwMS4zMTExNDI5NzY0LDE0MDI4NDIuNjI0NTUwOTgyMSw5MzQyNTMuOTQ5NzkxOTY3NiwxMzgwMTg2LjE4NDE3MzA3MzksMTUzMjY2MS43NzQ1OTM0ODEsMTM2MzQ0MS42NjM5MDk0NTQxLDMxMDc5MzUuNzcyNDgxNjMyLDE5ODE5OC40MzUzNDQ4NjkwNywyNDgxLjYxNTIzMzg1NDc0NworMzEsVGh1IDI0IEZlYiAxMSwxMDg4ODUuODIwODI0NzkyMTEsOTcyMTkuMTQwMjI1MzYwNjYsNTY1ODkuNDUyNzAyNTkzODQsMTE2OTg1LjI2MzI3NDA4NzQ0LDExNzkxOS45NzA0NDYzNTMzMywxOTA2MjIyLjU0NDY5NzM1ODMsMjA3MTQ5MC4wNjQ1MTg0NzI5LDE2OTc3ODMuOTUyMzE3Nzg5NCwxNDc0Njk2LjY5NDA4MDU2NTYsMTg0Mzc0Mi4xODU4MzY4MjcsMzc0NDA5LjgxNzkxNjI0MiwyMTg4NzMwLjY4NDAzNTQzNyw0MzMxNjIuNDE4NDQ1MDU4NzUsMTE0OTg3OS40OTQwMDk2OTksMTAyNzc4Mi42Nzc3MzUxMjY3LDIzNTkzNjUuMTEzMDk5OTEzLDE3MDkyNjYuODY0OTg1MjA4LDQ4MDcwOS4yMzQyNTIxMjMwNSwxMzk5MDgyLjA5NDI0Nzg4MzcsOTMxNzQ5LjU0MTc5Mzg4MTEsMTM3NjQ4Ni4zODc4NjA0NTMyLDE1Mjg1NTMuMjQ0NTY1MzE0NiwxMzU5Nzg2Ljc1Mzc5NzcyMzIsMzA5OTYwNC40ODM5NjIxOTMsMTk3NjY3LjEzNDY3Nzg1NDAyLDI0NzQuOTYyODkxNTg2MTEzNQorMzIsRnJpIDI1IEZlYiAxMSwxMDg1OTMuOTYyNDQzODU4ODUsOTY5NTguNTUzMzAzNjkzODQsNTY0MzcuNzY5OTAzODczMzg0LDExNjY3MS42OTUwODYxMTIyLDExNzYwMy44OTY4NjIxNzYxMiwxOTAxMTEzLjA5MTMxNDE3NTYsMjA2NTkzNy42MjY4MjAyNDgzLDE2OTMyMzMuMTk5MzIwMzQyMiwxNDcwNzQzLjkwNTg2NDA0OSwxODM4ODAwLjIwNTI4MTk2MTUsMzczNDA2LjI0Njk5NzMyMTUsMjE4Mjg2My45OTM2OTA0MjUsNDMyMDAxLjM2NjYwOTU1OTEsMTE0Njc5Ny4zNDgyODI2NjIyLDEwMjUwMjcuODAxMjQxNTQwOCwyMzUzMDQxLjA1MjkzNTU3MSwxNzA0Njg1LjMzMzEwMTQ1NDcsNDc5NDIwLjczNzU3MDUwMDUsMTM5NTMzMS45ODM5Nzg5MTcxLDkyOTI1Mi4wNzMyNDcwNzMzLDEzNzI3OTYuODQzMjk0NDYyLDE1MjQ0NTYuMDk4ODQxOTMzOCwxMzU2MTQxLjk3MTA1NzY3NzYsMzA5MTI5Ni4yODA1NjczODgsMTk3MTM3LjMwNjE4OTEzMjU2LDI0NjguMzI4OTgyMjU4NTU3CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FnaW5nX0ZEX1JlZmVyZW5jZS9Ob0Rpc2Vhc2UvaHVtYW4wdG8wL1NfMi5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FnaW5nX0ZEX1JlZmVyZW5jZS9Ob0Rpc2Vhc2UvaHVtYW4wdG8wL1NfMi5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODIwMjFiZQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWdpbmdfRkRfUmVmZXJlbmNlL05vRGlzZWFzZS9odW1hbjB0bzAvU18yLmNzdgpAQCAtMCwwICsxLDMzIEBACitpdGVyYXRpb24sdGltZSxFRy1GUkctRzIxMDAwMSxFRy1GUkctRzIxMDAwMixFRy1GUkctRzIxMDAwMyxFRy1GUkctRzIxMDAwNCxFRy1GUkctRzIxMDAwNSxFRy1MT0UtRzI0MDAwMSxFRy1MT0UtRzI0MDAwMixFRy1MT0UtRzI0MDAwMyxFRy1MT0UtRzI0MDAwNCxFRy1MT0UtRzI0MDAwNSxFRy1MT0UtRzI0MDAwNixFRy1MT0UtRzI0MDAwNyxFRy1MT0UtRzI0MDAwOCxFRy1MT0UtRzI0MDAwOSxFRy1VUEUtRzI5MDAwMSxFRy1VUEUtRzI5MDAwMixFRy1VUEUtRzI5MDAwMyxFRy1VUEUtRzI5MDAwNCxFRy1VUEUtRzI5MDAwNSxFRy1VUEUtRzI5MDAwNixFRy1VUEUtRzI5MDAwNyxFRy1VUEUtRzI5MDAwOCxFRy1VUkctRzMwMDAwMSxFRy1VUkctRzMwMDAwMixFRy1VUkctRzMwMDAwMyxFRy1VUkctRzMwMDAwNAorMSxUdWUgMjUgSmFuIDExLDExODAyOS42LDEwNTM4My4yMDAwMDAwMDAwMSw2MTM0MS42MDAwMDAwMDAwMDYsMTI2ODA5LjIwMDAwMDAwMDAxLDEyNzgyMi40MDAwMDAwMDAwMSwyMDY2Mjk5LjIwMDAwMDAwMDIsMjI0NTQ0NS4yLDE4NDAzNTYuOCwxNTk4NTM1LjYsMTk5ODU3Mi4wLDQwNTg1MS4yLDIzNzI1MzEuMiw0Njk1MzcuNjAwMDAwMDAwMDMsMTI0NjQ0MS42LDExMTQwOTEuNiwyNTU3NDk0LjgwMDAwMDAwMDMsMTg1MjgwNC4wLDUyMTA3Ny4yLDE1MTY1NzEuMjAwMDAwMDAwMiwxMDA5OTk0LjAsMTQ5MjA3OC4wLDE2NTY5MTQuOCwxNDczOTc2LjAsMzM1OTg5Ni40MDAwMDAwMDA0LDIxNDI2Ni40MDAwMDAwMDAwMiwyNjgyLjgKKzIsV2VkIDI2IEphbiAxMSwxMTc3MTIuMzQ3NDEzMzM5ODcsMTA1MDk5LjkzOTc2MDI3NjA2LDYxMTc2LjcxOTQ4NDY4OTY4LDEyNjQ2OC4zNDg2NjUxNDU4NSwxMjc0NzguODI1Mjc3Nzg1MzUsMjA2MDc0NS4xNzk5NDA1MDg3LDIyMzk0MDkuNjUyMTU1MTkyLDE4MzU0MTAuMDkyMDk2NDEsMTU5NDIzOC44ODQ5ODk3OTY3LDE5OTMyMDAuMDI0MzU0NjgyOCw0MDQ3NjAuMzA5NzIzMzMxMSwyMzY2MTU0LjA1NjgwNzY4MzMsNDY4Mjc1LjUyNjYwMzcxNDc0LDEyNDMwOTEuMjgwOTEyOTE2OSwxMTExMDk3LjAyNTQwMjgxMTYsMjU1MDYyMC40OTE4NTQ2NzIsMTg0NzgyMy44MzUxODA1NDYsNTE5Njc2LjU5Mjk1MjcwMzI0LDE1MTI0OTQuNzk3NjczMzQ0NCwxMDA3Mjc5LjIzMDA2OTMxMTMsMTQ4ODA2Ny40MzMxMTY3ODg3LDE2NTI0NjEuMTY3MTMwMTQ4MywxNDcwMDE0LjA4OTYwOTA5LDMzNTA4NjUuMzEwOTg2NjUwNiwyMTM2OTAuNDcxODQ2MDkzMjUsMjY3NS41ODg4ODMxMzE5MjgKKzMsVGh1IDI3IEphbiAxMSwxMTczOTUuOTc3ODIyMDEzMTMsMTA0ODE3LjQ2NzkwNjQ2MzkyLDYxMDEyLjI5Nzg3NDE1MDIxNiwxMjYxMjguNDQ2MDA2OTk1MDksMTI3MTM2LjIwNjgxMjE1OTc0LDIwNTUyMDYuNjE4MTQzNjE0LDIyMzMzOTAuOTAyNzg4MzMzLDE4MzA0NzcuMTUyMTQ5ODkzLDE1ODk5NTQuMTI4ODM5NzAxNiwxOTg3ODQzLjAwMDI5NTY1OCw0MDM2NzIuNDU1Njc0MTQ3OTMsMjM1OTc5NC42NjI4NDA3OTc2LDQ2NzAxNi45NjU4ODE0NTA2LDEyMzk3NTAuMjg2NjIzMzA5NCwxMTA4MTEwLjc4NTQ3NDkyNDQsMjU0Mzc2NS4zMTY2NzIzNzY0LDE4NDI4NTcuNTMxNDM3MzQ0Niw1MTgyNzkuODg0MTU0MTE2NCwxNTA4NDI5Ljc0MTAyMDA4MTgsMTAwNDU3Mi4wMTYwMzk3NTg5LDE0ODQwNjguMDI4NjcwMDQzLDE2NDgwMTkuOTI5ODYzMDYyNSwxNDY2MDYzLjIwNjIzMTE0NTcsMzM0MTg1OS4zNTc4MTA3Njc0LDIxMzExNi4xNDY2NDc5ODE0OCwyNjY4LjM5NzgzNjY1MTk2NTUKKzQsRnJpIDI4IEphbiAxMSwxMTcwODAuNDg4NjM2NjQ5OTEsMTA0NTM1Ljc4MjEyNjYzNDM3LDYwODQ4LjMzMzgyMjY1MDYyNCwxMjU3ODkuNDg5MjQzNTY4MjcsMTI2Nzk0LjU0MTc5ODkxNTg0LDIwNDk2ODMuNDY5Mjc4MjA1LDIyMjczODguOTAyNjM4MTUyNywxODI1NTU3LjkzOTc4NjEzMywxNTg1NjgxLjI5NjQ4MDU0NjcsMTk4MjUwMC44ODM5Nzc2MzQ4LDQwMjU4Ny42Mjg5NDg3NjE0LDIzNTM0NTIuOTY2MDUwMDE5NSw0NjU3NjEuOTA3NTMyMzQ2NjcsMTIzNjQxOC41ODk3ODYzNTYzLDExMDUxMzIuODU1Nzc1MDUyNCwyNTM2OTI5LjIxODM0NjAwMTYsMTgzNzkwNS4wNDgxMjMwMDg4LDUxNjg4Ny4wNjIxNzI2ODY3NCwxNTA0Mzc1Ljk5Njc2OTIwNDcsMTAwMTg3Mi4zMzU3NTM3ODIsMTQ4MDA3OS43NTM5MjYwOTQyLDE2NDM1OTEuMDUxODQ4ODMzMiwxNDYyMTIzLjMxNzUyOTYyNTUsMzMzMjg3OC40NjY3NjE5MDUsMjEyNTQzLjQxOTcwNTAyMjE4LDI2NjEuMjI2ODAxNzA0MDE2NQorNSxTYXQgMjkgSmFuIDExLDExNjc2NS44NzcyNzU1OTU3LDEwNDI1NC44ODAxMTU3NDY4Nyw2MDY4NC44MjU5ODg0Njk2OCwxMjU0NTEuNDc1NjAxMTc1MjIsMTI2NDUzLjgyNzQ0MjIwMTgxLDIwNDQxNzUuNjg4MTQ4MjQwOCwyMjIxNDAzLjYwMjU5MDE1OTUsMTgyMDY1Mi40MTQ3NTExMTMyLDE1ODE0MjAuMzUyOTQ3NjU2OCwxOTc3MTczLjYzMTY4NTk2NTUsNDAxNTA1LjgyMDY3MDAxMiwyMzQ3MTI4LjkxNDU0MTExMzcsNDY0NTEwLjM0MTI4NjIzNDQ0LDEyMzMwOTYuMTYzMTM4NzE0LDExMDIxNjMuMjExOTM0NzM1NSwyNTMwMTEyLjE0MDkzNTYxNDIsMTgzMjk2Ni4zNDQ3MTEyNjU4LDUxNTQ5OC4xMTU2MTA5MjMzLDE1MDAzMzMuNTMxNzQ4ODQwNCw5OTkxODAuMTY3MTE5ODQxMSwxNDc2MTAyLjU3NjI0ODgwNzgsMTYzOTE3NC40OTY4NDU4NjA1LDE0NTgxOTQuMzkxMjY0MzM5MiwzMzIzOTIyLjU2NDM0OTI0NiwyMTE5NzIuMjg2MzMwNTc4OTcsMjY1NC4wNzU3MTk2MDczNTQKKzYsU3VuIDMwIEphbiAxMSwxMTY0NTIuMTQxMTY0ODg5MDUsMTAzOTc0Ljc1OTU3NTYyOTY0LDYwNTIxLjc3MzAzMzg4NDM3LDEyNTExNC40MDIzMTQzOTEwNSwxMjYxMTQuMDYwOTU0NDk3MTIsMjAzODY4My4yMjk2OTIzNTk3LDIyMTU0MzQuOTUzNjc2MjE4LDE4MTU3NjAuNTM2OTEwNzcwMiwxNTc3MTcxLjI2MzM4MDU0NywxOTcxODYxLjE5OTgzNjI2NjcsNDAwNDI3LjAyMTk4NzE5MzIsMjM0MDgyMi40NTY1NzQ0ODMzLDQ2MzI2Mi4yNTY5MDM1NDk2NiwxMjI5NzgyLjk3OTQ5ODI4LDEwOTkyMDEuODI5NjU4MTI5LDI1MjMzMTQuMDI4NjY3OTc1NywxODI4MDQxLjM4MDc5NjYwNiw1MTQxMTMuMDMzMTA1Mjk4MzUsMTQ5NjMwMi4zMTI4ODU5NjQzLDk5NjQ5NS40ODgxMTIyMjczLDE0NzIxMzYuNDYzMDk5MzAxNiwxNjM0NzcwLjIyODcyMDU0MDQsMTQ1NDI3Ni4zOTUyOTExNjg1LDMzMTQ5OTEuNTc3MzAwOTY5NSwyMTE0MDIuNzQxODUxOTgxMSwyNjQ2Ljk0NDUzMTg1NjExNAorNyxNb24gMzEgSmFuIDExLDExNjEzOS4yNzc3MzgyMzkyOCwxMDM2OTUuNDE4MjE0OTU5NzksNjAzNTkuMTczNjI1MTU4MjYsMTI0Nzc4LjI2NjYyNjAzMjIzLDEyNTc3NS4yMzk1NTY1ODg1LDIwMzMyMDYuMDQ4OTgzNDg5NCwyMjA5NDgyLjkwNzA3NDEyNjQsMTgxMDg4Mi4yNjYyNTA2NDYsMTU3MjkzMy45OTMwMjI2MjMsMTk2NjU2My41NDQ5NzQwNDMzLDM5OTM1MS4yMjQwNzU5NzUsMjMzNDUzMy41NDA1NjQ3MjQyLDQ2MjAxNy42NDQxNzUyNDMzMywxMjI2NDc5LjAxMTc2Mzk1OSwxMDk2MjQ4LjY4NDcyMTc5MzMsMjUxNjUzNC44MjU5MzYwNTk1LDE4MjMxMzAuMTE2MDkzOTM0Nyw1MTI3MzEuODAzMzI2MTQ5MiwxNDkyMjgyLjMwNzIwNjExNSw5OTM4MTguMjc2NzcwODcxNCwxNDY4MTgxLjM4MjAzNTY2MzgsMTYzMDM3OC4yMTE0NDY5NTIsMTQ1MDM2OS4yOTc1NjE3ODk0LDMzMDYwODUuNDMyNTYzNjEzNiwyMTA4MzQuNzgxNjEwNDgzMTMsMjYzOS44MzMxODAxMTg3ODcKKzgsVHVlIDEgRmViIDExLDExNTgyNy4yODQ0MzcwMDQzNSwxMDM0MTYuODUzNzQ5MjQzNTQsNjAxOTcuMDI2NDMyNTMwMDMsMTI0NDQzLjA2NTc4NzEzMjgxLDEyNTQzNy4zNjA0Nzc1NDU4NCwyMDI3NzQ0LjEwMTIyODQ1OTMsMjIwMzU0Ny40MTQxMDcxOTE0LDE4MDYwMTcuNTYyODc1NTQyLDE1Njg3MDguNTA3MjIwODc4NSwxOTYxMjgwLjYyMzc3NDMxMjcsMzk4Mjc4LjQxODEzODMyNzUsMjMyODI2Mi4xMTUwODAxNzczLDQ2MDc3Ni40OTI5MjI2OTM3LDEyMjMxODQuMjMyOTE1NDI4LDEwOTMzMDMuNzUyOTc0NDg0OCwyNTA5Nzc0LjQ3NzI5ODU3MiwxODE4MjMyLjUxMDQzODIyMzgsNTExMzU0LjQxNDk3NzU4MDIsMTQ4ODI3My40ODE4MzMxMDgyLDk5MTE0OC41MTEyMDExNTQzLDE0NjQyMzcuMzAwNzEyNjczNSwxNjI1OTk4LjQwOTEwNjU0NzUsMTQ0NjQ3My4wNjYxMjMzOTU1LDMyOTcyMDQuMDU3MzAxNDQ3MywyMTAyNjguNDAwOTYxMjI0NiwyNjMyLjc0MTYwNjIzNzcxNzQKKzksV2VkIDIgRmViIDExLDExNTUxNi4xNTg3MTAxNjg2NiwxMDMxMzkuMDYzOTAwNzk2NDUsNjAwMzUuMzMwMTMwMjAxOTQsMTI0MTA4Ljc5NzA1NjkyMDY0LDEyNTEwMC40MjA5NTQ2OTgzMywyMDIyMjk3LjM0MTc2NzYxMjEsMjE5NzYyOC40MjYyNDM4MTA0LDE4MDExNjYuMzg3MDA5MTc0NiwxNTY0NDk0Ljc3MTQyNTU5NzQsMTk1NjAxMi4zOTMwNDEyMywzOTcyMDguNTk1NDAyNDQ0ODMsMjMyMjAwOC4xMjg4NDI0ODQ3LDQ1OTUzOC43OTI5OTc2MTgyNiwxMjE5ODk4LjYxNjAxMjkwMzIsMTA5MDM2Ny4wMTAzMzY5NDcsMjUwMzAzMi45Mjc0Nzk0NzIsMTgxMzM0OC41MjM3ODQxNjM2LDUwOTk4MC44NTY3OTczNjUyLDE0ODQyNzUuODAzOTg4NzUzNCw5ODg0ODYuMTY5NTczNzE3OCwxNDYwMzA0LjE4Njg4MTUxOTksMTYyMTYzMC43ODU4ODc4Mzk1LDE0NDI1ODcuNjY5MTE4NDIwNywzMjg4MzQ3LjM3ODg5NTgzODcsMjA5NzAzLjU5NTI3MzE4OTg2LDI2MjUuNjY5NzUyMjI4NTk3NgorMTAsVGh1IDMgRmViIDExLDExNTIwNS44OTgwMTQzMjEwNiwxMDI4NjIuMDQ2Mzk4NzIzNjksNTk4NzQuMDgzMzk2MzI4MzYsMTIzNzc1LjQ1NzcwMjc5MzU2LDEyNDc2NC40MTgyMzM2MTA0OSwyMDE2ODY1LjcyNjA3NDQxODgsMjE5MTcyNS44OTUwOTcwNTA0LDE3OTYzMjguNjk4OTkzODMwNSwxNTYwMjkyLjc1MTE5MDA1MzUsMTk1MDc1OC44MDk3MDc3MTQyLDM5NjE0MS43NDcxMjI2Njk0LDIzMTU3NzEuNTMwNzI2MTQ2NCw0NTgzMDQuNTM0MjgxOTg1ODMsMTIxNjYyMi4xMzQxOTY5MDYxLDEwODc0MzguNDMyODAxNzAxOCwyNDk2MzEwLjEyMTM2NzQ5MTMsMTgwODQ3OC4xMTYyMDU4MTcsNTA4NjExLjExNzU1Njg0OTk2LDE0ODAyODkuMjQwOTkyNTY5MSw5ODU4MzEuMjMwMTI0Mjc1NCwxNDU2MzgyLjAwODM4OTUyNCwxNjE3Mjc1LjMwNjA4NjA5MzQsMTQzODcxMy4wNzQ3ODQyNjUxLDMyNzk1MTUuMzI0OTQ0NjI4LDIwOTE0MC4zNTk5MjkxNjgwMSwyNjE4LjYxNzU2MDI3OTk2ODUKKzExLEZyaSA0IEZlYiAxMSwxMTQ4OTYuNDk5ODEzNjMyOCwxMDI1ODUuNzk4OTc4OTAwNDQsNTk3MTMuMjg0OTEzMDA0MzYsMTIzNDQzLjA0NTAwMDI5NTkxLDEyNDQyOS4zNDk1NjgwNTgzNCwyMDExNDQ5LjIwOTc1NTA5MjQsMjE4NTgzOS43NzI0MjQyMjg1LDE3OTE1MDQuNDU5MjkwMDI0MSwxNTU2MTAyLjQxMjE3MDIxMzQsMTk0NTUxOS44MzA4MzUwNzYzLDM5NTA3Ny44NjQ1Nzk0MTYxLDIzMDk1NTIuMjY5NzU4MDc4LDQ1NzA3My43MDY2ODc5MjkxLDEyMTMzNTQuNzYwNjg4MDMyMywxMDg0NTE3Ljk5NjQzMjg0MjcsMjQ4OTYwNi4wMDQwMTU2NjEzLDE4MDM2MjEuMjQ3ODk2Mjc0Niw1MDcyNDUuMTg2MDYwODU1MSwxNDc2MzEzLjc2MDI2MTUwMTQsOTgzMTgzLjY3MTE1MzQyNDcsMTQ1MjQ3MC43MzMxNzk4NjAzLDE2MTI5MzEuOTM0MTAzMDE2NywxNDM0ODQ5LjI1MTQ1MzAxODcsMzI3MDcwNy44MjMyNjE1LDIwODU3OC42OTAzMjU3MTMwNSwyNjExLjU4NDk3Mjc1MjcxNzUKKzEyLFNhdCA1IEZlYiAxMSwxMTQ1ODcuOTYxNTc5ODM1NjIsMTAyMzEwLjMxOTM4Mzk1MjI2LDU5NTUyLjkzMzM2NjI1NDI4NSwxMjMxMTEuNTU2MjMzMDk0ODYsMTI0MDk1LjIxMjIyMDAwNTY4LDIwMDYwNDcuNzQ4NTQ4MjA0MywyMTc5OTcwLjAxMDEyNjQ5NjcsMTc4NjY5My42Mjg0NzYxNTUyLDE1NTE5MjMuNzIwMTI0NDM5LDE5NDAyOTUuNDEzNjEyNjQ2NSwzOTQwMTYuOTM5MDc5MDk3LDIzMDMzNTAuMjk1MTE3MTY4LDQ1NTg0Ni4zMDAxNTc2NTczLDEyMTAwOTYuNDY4Nzg2NzE4MywxMDgxNjA1LjY3NzM2NTgyNjcsMjQ4MjkyMC41MjA2NDA4MzQyLDE3OTg3NzcuODc5MTY3MzA4Niw1MDU4ODMuMDUxMTQ3NTc5MywxNDcyMzQ5LjMyOTMwOTY0MTQsOTgwNTQzLjQ3MTAyNjQ1ODcsMTQ0ODU3MC4zMjkyOTEyNzk0LDE2MDg2MDAuNjM0NDQ2NDUyNiwxNDMwOTk2LjE2NzU1MTE4ODcsMzI2MTkyNC44MDE4NzUzNjAzLDIwODAxOC41ODE4NzMxMDM4NiwyNjA0LjU3MTkzMjE3OTU4MQorMTMsU3VuIDYgRmViIDExLDExNDI4MC4yODA3OTIxOTk4MywxMDIwMzUuNjA1MzYzMjM1NTgsNTkzOTMuMDI3NDQ2MDIwMzgsMTIyNzgwLjk4ODY5Mjk1NjkyLDEyMzc2Mi4wMDM0NTk1ODAzNCwyMDAwNjYxLjI5ODMyNDMwMSwyMTc0MTE2LjU2MDI0ODQyMzQsMTc4MTg5Ni4xNjcyNDgxNjc2LDE1NDc3NTYuNjQwOTEzMTkxNSwxOTM1MDg1LjUxNTM1NzQwNSwzOTI5NTguOTYxOTU0MDQ1ODcsMjI5NzE2NS41NTYxMzM4NDEsNDU0NjIyLjMwNDY2MzM2OTI2LDEyMDY4NDcuMjMxODczMDExNywxMDc4NzAxLjQ1MTgwNzI2ODIsMjQ3NjI1My42MTY2MjMyMTEsMTc5Mzk0Ny45NzA0NDkwMzE2LDUwNDUyNC43MDE2ODg1MDI0NSwxNDY4Mzk1LjkxNTc0Nzk0MzYsOTc3OTEwLjYwODE3MzE3OTIsMTQ0NDY4MC43NjQ4NTc4MzE5LDE2MDQyODEuMzcxNzMwMDcxMywxNDI3MTUzLjc5MTU5OTQyNTMsMzI1MzE2Ni4xODkwMjk3MTIsMjA3NDYwLjAyOTk5NTMwNDY4LDI1OTcuNTc4MzgxMjY0NjQ3CisxNCxNb24gNyBGZWIgMTEsMTEzOTczLjQ1NDkzNzUxMjQ5LDEwMTc2MS42NTQ2NzI4MTgyLDU5MjMzLjU2NTg0NjE1MTQ2LDEyMjQ1MS4zMzk2Nzk3MjQ1LDEyMzQyOS43MjA1NjUwNTA2MSwxOTk1Mjg5LjgxNTA4NTUyMjEsMjE2ODI3OS4zNzQ5Nzc1OCwxNzc3MTEyLjAzNjQxOTIwOSwxNTQzNjAxLjE0MDQ5ODczNSwxOTI5ODkwLjA5MzUxMzYxMTcsMzkxOTAzLjkyNDU2MjQ0MzQsMjI5MDk5OC4wMDIyODk2MTYsNDUzNDAxLjcxMDIwNzE2NjQsMTIwMzYwNy4wMjM0MDYzNDAzLDEwNzU4MDUuMjk2MDM0NzMzMywyNDY5NjA1LjIzNzUwNTg2NzYsMTc4OTEzMS40ODIyODk1NTIsNTAzMTcwLjEyNjU4ODI4OTYsMTQ2NDQ1My40ODcyODM5NDY1LDk3NTI4NS4wNjEwODc3MTAyLDE0NDA4MDIuMDA4MTA4NTkxMiwxNTk5OTc0LjExMDY3MzA2NDQsMTQyMzMyMi4wOTIyMTIyNDkzLDMyNDQ0MzEuOTEzMTgyMDM2LDIwNjkwMy4wMzAxMjk5MjUzMiwyNTkwLjYwNDI2Mjg4Mjg1OAorMTUsVHVlIDggRmViIDExLDExMzY2Ny40ODE1MTAwNTU3LDEwMTQ4OC40NjUwNzU0NTk4OCw1OTA3NC41NDcyNjQzOTE2MSwxMjIxMjIuNjA2NTAxMjkyNTQsMTIzMDk4LjM2MDgyMjgwMTYxLDE5ODk5MzMuMjU0OTY1MjIsMjE2MjQ1OC40MDY2NDQxMjQ1LDE3NzIzNDEuMTk2OTE5MjkyMiwxNTM5NDU3LjE4NDk0NDg0MjcsMTkyNDcwOS4xMDU2NTI0MzgyLDM5MDg1MS44MTgyODgyNDIyNywyMjg0ODQ3LjU4MzIxNjY3MDQsNDUyMTg0LjUwNjgyMDk2NjQsMTIwMDM3NS44MTY5MjUyODIsMTA3MjkxNy4xODYzOTY1MzM5LDI0NjI5NzUuMzI4OTk0MjgzLDE3ODQzMjguMzc1MzU0NjMzNyw1MDE4MTkuMzE0Nzg0Njk0NzUsMTQ2MDUyMi4wMTE3MjE0OTIzLDk3MjY2Ni44MDgzMjgzMTEsMTQzNjkzNC4wMjczNjczOCwxNTk1Njc4LjgxNjA5OTgzOTgsMTQxOTUwMS4wMzgwOTc3ODExLDMyMzU3MjEuOTAzMDAzMTY4MywyMDYzNDcuNTc3NzI4MTgxODIsMjU4My42NDk1MjAwNzk1MTg0CisxNixXZWQgOSBGZWIgMTEsMTEzMzYyLjM1ODAxMTU4NDg2LDEwMTIxNi4wMzQzNDA1OTI5Myw1ODkxNS45NzA0MDIzNjg4NywxMjE3OTQuNzg2NDczNTg1MTgsMTIyNzY3LjkyMTUyNzMxMTgzLDE5ODQ1OTEuNTc0MjI3NTc5LDIxNTY2NTMuNjA3NzIwMzkyMywxNzY3NTgzLjYwOTc5NDk1NTUsMTUzNTMyNC43NDA0MTY1MDI2LDE5MTk1NDIuNTA5NDcxNiwzODk4MDIuNjM0NTQxMDkyNSwyMjc4NzE0LjI0ODY5NzQwNCw0NTA5NzAuNjg0NTY2NDE2NjYsMTE5NzE1My41ODYwNDczMzYsMTA3MDAzNy4wOTkzMTE1MjMxLDI0NTYzNjMuODM2OTU1ODcwNSwxNzc5NTM4LjYxMDQyNzM1NDcsNTAwNDcyLjI1NTI0ODQ2NDkzLDE0NTY2MDEuNDU2OTYwNDQ4Myw5NzAwNTUuODI4NTE3MTkxLDE0MzMwNzYuNzkxMDUyNDk0NywxNTkxMzk1LjQ1MjkzOTcxNjIsMTQxNTY5MC41OTgwNTc0Njg3LDMyMjcwMzYuMDg3Mzc2Njg1LDIwNTc5My42NjgyNTQ4NTY4NiwyNTc2LjcxNDA5NjA2OTc5OQorMTcsVGh1IDEwIEZlYiAxMSwxMTMwNTguMDgxOTUxMzA3MDIsMTAwOTQ0LjM2MDI0NDMwMjkxLDU4NzU3LjgzMzk2NTU4NDAzLDEyMTQ2Ny44NzY5MjA1MzI1MSwxMjI0MzguMzk5OTgxMTI5NywxOTc5MjY0LjcyOTI2NzIzNjMsMjE1MDg2NC45MzA4MjA0ODEsMTc2MjgzOS4yMzYyMDg5MjY3LDE1MzEyMDMuNzczMTc5NjI0LDE5MTQzOTAuMjYyNzk0OTg5OSwzODg3NTYuMzY0NzU2MjY3MDUsMjI3MjU5Ny45NDg2NjQwMDMsNDQ5NzYwLjIzMzUzNDgwODMsMTE5Mzk0MC4zMDQ0Njg2OTQ2LDEwNjcxNjUuMDExMjY4ODkxMiwyNDQ5NzcwLjcwNzQxOTUwNzcsMTc3NDc2Mi4xNDg0MDc3Njc4LDQ5OTEyOC45MzY5ODMyNDQ5LDE0NTI2OTEuNzkwOTk2NDI4OCw5Njc0NTIuMTAwMzQwMzI0NywxNDI5MjMwLjI2NzY3NjQzMjYsMTU4NzEyMy45ODYyMjY2MiwxNDExODkwLjc0MDk4NTgxOCwzMjE4Mzc0LjM5NTM5ODI4NTIsMjA1MjQxLjI5NzE4ODI2MDcsMjU2OS43OTc5MzQyMzgyNDY0CisxOCxGcmkgMTEgRmViIDExLDExMjc1NC42NTA4NDU4NTkzLDEwMDY3My40NDA1NjkzMDkzNyw1ODYwMC4xMzY2NjMzOTk0LDEyMTE0MS44NzUxNzQwNDczOCwxMjIxMDkuNzkzNDk0ODUwMTUsMTk3Mzk1Mi42NzY2MDg5MDU0LDIxNDUwOTIuMzI4Njk5ODQxLDE3NTgxMDguMDM3NDM5Nzg1NywxNTI3MDk0LjI0OTYwMDc0NjIsMTkwOTI1Mi4zMjM1NzIzMTMyLDM4NzcxMy4wMDAzOTQ1ODc2LDIyNjY0OTguNjMzMTk4MDA4NCw0NDg1NTMuMTQzODQ2OTkwNSwxMTkwNzM1Ljk0NTk2NDAxNDQsMTA2NDMwMC44OTg4Mjc5NjEsMjQ0MzE5NS44ODY1NzUwNjksMTc2OTk5OC45NTAzMTI1NjE2LDQ5Nzc4OS4zNDkwMjU0ODE4LDE0NDg3OTIuOTgxOTIwNTE3Nyw5NjQ4NTUuNjAyNTQ3MjY2NCwxNDI1Mzk0LjQyNTg0NTYxODgsMTU4Mjg2NC4zODEwOTg3ODIsMTQwODEwMS40MzU4NzAxMjMzLDMyMDk3MzYuNzU2Mzc1MTc3OCwyMDQ2OTAuNDYwMDIwMTkxODIsMjU2Mi45MDA5NzgxMzgyOTI0CisxOSxTYXQgMTIgRmViIDExLDExMjQ1Mi4wNjIyMTkyODc0MywxMDA0MDMuMjczMTA0OTQ2NjIsNTg0NDIuODc3MjA5MDI3NTk2LDEyMDgxNi43Nzg1NzQwMDIzMiwxMjE3ODIuMDk5Mzg3MDkxNDEsMTk2ODY1NS4zNzI5MDY5OTg3LDIxMzkzMzUuNzU0MjU0ODY4LDE3NTMzODkuOTc0ODgxNjI5LDE1MjI5OTYuMTM2MTQ2NzQ2LDE5MDQxMjguNjQ5ODc4NzIyNiwzODY2NzIuNTMyOTQyMzUwNiwyMjYwNDE2LjI1MjUyOTg4LDQ0NzM0OS40MDU2NTMyODQzNCwxMTg3NTQwLjQ4NDM4NjE4OTQsMTA2MTQ0NC43Mzg2MTc5ODYsMjQzNjYzOS4zMjA3NzI5NTksMTc2NTI0OC45NzcyNzQ3MjMsNDk2NDUzLjQ4MDQ0NDMyOTk3LDE0NDQ5MDQuOTk3OTE4OTkyLDk2MjI2Ni4zMTM5NTA5NjY1LDE0MjE1NjkuMjM0MjYwMTM0MiwxNTc4NjE2LjYwMjc5ODQzNTEsMTQwNDMyMi42NTE3OTAxOTg0LDMyMDExMjMuMDk5ODI1NDY2NSwyMDQxNDEuMTUyMjU1ODk3OTMsMjU1Ni4wMjMxNzE0OTE3NjQ1CisyMCxTdW4gMTMgRmViIDExLDExMjE1MC4zMTM2MDMwMjQxOSwxMDAxMzMuODU1NjQ3MTQ0NTgsNTgyODYuMDU0MzE5NTIwNDQ1LDEyMDQ5Mi41ODQ0NjgyMDY0MiwxMjE0NTUuMzE0OTg0NDcxNjcsMTk2MzM3Mi43NzQ5NDUyNTE0LDIxMzM1OTUuMTYwNTIyNDkwNywxNzQ4Njg1LjAxMDA0MzczNTQsMTUxODkwOS4zOTkzODQ1NDgsMTg5OTAxOS4xOTk5MTQ0NTU0LDM4NTYzNC45NTM5MTEyNTM1NCwyMjU0MzUwLjc1NzAzODU2NzcsNDQ2MTQ5LjAwOTEzMzM5ODEsMTE4NDM1My44OTM2NjYxMjQ3LDEwNTg1OTYuNTA3MzM3OTQ3LDI0MzAxMDAuOTU2NTIzNjQ4LDE3NjA1MTIuMTkwNTQzMTk5Nyw0OTUxMjEuMzIwMzQxNTU2NCwxNDQxMDI3LjgwNzI3MzA0NjYsOTU5Njg0LjIxMzQyNzU4NzgsMTQxNzc1NC42NjE3MTM0NDQsMTU3NDM4MC42MTY2NzE1MTM4LDE0MDA1NTQuMzU3OTE4MTA4MywzMTkyNTMzLjM1NTQ3NzU0MTcsMjAzNTkzLjM2OTQxNDAzNzA0LDI1NDkuMTY0NDU4MTg4Mzk4CisyMSxNb24gMTQgRmViIDExLDExMTg0OS40MDI1MzU4NjgwOCw5OTg2NS4xODU5OTg0MDk2NCw1ODEyOS42NjY3MTU3NTc4MDUsMTIwMTY5LjI5MDIxMjM4MjM0LDEyMTEyOS40Mzc2MjE1ODU5NSwxOTU4MTA0LjgzOTYzNjM0NzUsMjEyNzg3MC41MDA2Nzk3Njg2LDE3NDM5OTMuMTA0NTUwMjMyLDE1MTQ4MzQuMDA1OTgwODMzNywxODkzOTIzLjkzMjAwNDQ3MDgsMzg0NjAwLjI1NDgzODMyMTA3LDIyNDgzMDIuMDk3MjUxMDgxLDQ0NDk1MS45NDQ0OTYzNDE3LDExODExNzYuMTQ3ODEyNTEwMSwxMDU1NzU2LjE4MTc1NjM1LDI0MjM1ODAuNzQwNDk3MjA4NywxNzU1Nzg4LjU1MTQ4MjU2NDgsNDkzNzkyLjg1Nzg1MTQ0NjE0LDE0MzcxNjEuMzc4MzU4NTE4Miw5NTcxMDkuMjc5OTE2MzIyMiwxNDEzOTUwLjY3NzA5MjEyNzMsMTU3MDE1Ni4zODgxNjczNTI0LDEzOTY3OTYuNTIzNTE3OTAzLDMxODM5NjcuNDUzMjY5NDY4NiwyMDMwNDcuMTA3MDI2NjM4NDYsMjU0Mi4zMjQ3ODIyODUzNDk2CisyMixUdWUgMTUgRmViIDExLDExMTU0OS4zMjY1NjM5NjE5Niw5OTU5Ny4yNjE5Njc4MDU2NCw1Nzk3My43MTMxMjI0MzY1LDExOTg0Ni44OTMxNzAxNDM0NiwxMjA4MDQuNDY0NjQwOTgzMDIsMTk1Mjg1MS41MjQwMjE1NDU0LDIxMjIxNjEuNzI4MDQzNDgxMiwxNzM5MzE0LjIyMDEzOTc2MTcsMTUxMDc2OS45MjI3MDE3NTM0LDE4ODg4NDIuODA0NTk4MDg4NCwzODM1NjguNDI3Mjg1ODMyLDIyNDIyNzAuMjIzODQyMDU4Myw0NDM3NTguMjAxOTgwMzQxNzUsMTE3ODAwNy4yMjA5MTE1OTUzLDEwNTI5MjMuNzM4NzExMDI1MywyNDE3MDc4LjYxOTUyMjg1MywxNzUxMDc4LjAyMTU3MjY4MTYsNDkyNDY4LjA4MjE0MDcwODE3LDE0MzMzMDUuNjc5NjQ1NjEyMSw5NTQ1NDEuNDkyNDE5MjA4MywxNDEwMTU3LjI0OTM3NTYwNzYsMTU2NTk0My44ODI4MzgzODczLDEzOTMwNDkuMTE3OTQ1MzQ5LDMxNzU0MjUuMzIzMzQ4MzgyLDIwMjUwMi4zNjA2MzkwNjQyOCwyNTM1LjUwNDA4ODAwNjcxMworMjMsV2VkIDE2IEZlYiAxMSwxMTEyNTAuMDgzMjQwNzcxNzUsOTkzMzAuMDgxMzcwOTM0ODcsNTc4MTguMTkyMjY4MDU5MjU0LDExOTUyNS4zOTA3MTI5NzA5MywxMjA0ODAuMzkzMzkzMTQyMjQsMTk0NzYxMi43ODUyNzAzMDYzLDIxMTY0NjguNzk2MDY5NzI2MywxNzM0NjQ4LjMxODY2NTE1MSwxNTA2NzE3LjExNjQxMjYzNzMsMTg4Mzc3NS43NzYyNjg2Mjc3LDM4MjUzOS40NjI4NDEyNDU4LDIyMzYyNTUuMDg3NjMzMzQwNiw0NDI1NjcuNzcxODUyNzU3MiwxMTc0ODQ3LjA4NzEyNjk2NCwxMDUwMDk5LjE1NTEwODkyNjQsMjQxMDU5NC41NDA1ODg0Njk3LDE3NDYzODAuNTYyNDA4MzY5Myw0OTExNDYuOTgyNDA4MzgxMywxNDI5NDYwLjY3OTY5ODYyOCw5NTE5ODAuODMwMDAwOTQ5MSwxNDA2Mzc0LjM0NzYzNTg4MywxNTYxNzQzLjA2NjMzOTg1NiwxMzg5MzEyLjExMDY0NzY2NiwzMTY2OTA2Ljg5NjA2OTg3ODcsMjAxOTU5LjEyNTgwOTk3MDU0LDI1MjguNzAyMzE5NzQzMDM0NAorMjQsVGh1IDE3IEZlYiAxMSwxMTA5NTEuNjcwMTI3MDY1MjQsOTkwNjMuNjQyMDI5OTE5MSw1NzY2My4xMDI4ODQ5MjM2NywxMTkyMDQuNzgwMjIwMTkwODgsMTIwMTU3LjIyMTIzNjQ1MDcsMTk0MjM4OC41ODA2Nzk5MjE0LDIxMTA3OTEuNjU4MzUzNTE1LDE3Mjk5OTUuMzYyMDkzMDc5NiwxNTAyNjc1LjU1NDA3NzcwODQsMTg3ODcyMi44MDU3MTMwNDk2LDM4MTUxMy4zNTMxMTcxMjk3NywyMjMwMjU2LjYzOTU5MzU0NSw0NDEzODAuNjQ0NDA5OTk0NjUsMTE3MTY5NS43MjA2OTkzMTA4LDEwNDcyODIuNDA3OTI1OTI5MiwyNDA0MTI4LjQ1MDg0MDE2NzIsMTc0MTY5Ni4xMzU2OTkwNyw0ODk4MjkuNTQ3ODg1NzQwNiwxNDI1NjI2LjM0NzE3NTY4NzYsOTQ5NDI3LjI3MTc4ODczMDMsMTQwMjYwMS45NDEwMzcyNTg2LDE1NTc1NTMuOTA0NDI5NTAxMiwxMzg1NTg1LjQ3MTE2MzI1OTgsMzE1ODQxMi4xMDE5OTc0MTQ2LDIwMTQxNy4zOTgxMTEyNjg4MiwyNTIxLjkxOTQyMjA1MDgzCisyNSxGcmkgMTggRmViIDExLDExMDY1NC4wODQ3OTA4OTA4Niw5ODc5Ny45NDE3NzMzODA2Myw1NzUwOC40NDM3MDkxMTEyMSwxMTg4ODUuMDU5MDc4OTUxNywxMTk4MzQuOTQ1NTM3MTgwMjIsMTkzNzE3OC44Njc2NzUxNDI2LDIxMDUxMzAuMjY4NjI4MzY4NiwxNzI1MzU1LjMxMjUwMzc0OTUsMTQ5ODY0NS4yMDI3NTk3OTU2LDE4NzM2ODMuODUxNzUxNTk2NywzODA0OTAuMDg5NzUxMDg2MiwyMjI0Mjc0LjgzMDgzNzYzOCw0NDAxOTYuODA5OTc3NDI0MywxMTY4NTUzLjA5NTk0NjIxNzIsMTA0NDQ3My40NzQyMDY2MzI5LDIzOTc2ODAuMjk3NTgxODEzMywxNzM3MDI0LjcwMzI2ODUxNjgsNDg4NTE1Ljc2NzgzNjIwMzg2LDE0MjE4MDIuNjUwODI4NDYzLDk0Njg4MC43OTY5NzIwMzk0LDEzOTg4MzkuOTk4ODM2MDc4NywxNTUzMzc2LjM2Mjk2NzI3MjMsMTM4MTg2OS4xNjkxMjE0NTg3LDMxNDk5NDAuODcxOTAxNzAwNywyMDA4NzcuMTczMTI4MDg3NywyNTE1LjE1NTMzOTY1MjEwNDQKKzI2LFNhdCAxOSBGZWIgMTEsMTEwMzU3LjMyNDgwNzU1NjY1LDk4NTMyLjk3ODQzNjQyMzU4LDU3MzU0LjIxMzQ4MDQ3NjI0NiwxMTg1NjYuMjI0Njg0MjAxMzcsMTE5NTEzLjU2MzY2OTQ2NDUsMTkzMTk4My42MDM4MDc4MTIsMjA5OTQ4NC41ODA3NjU5MTg0LDE3MjA3MjguMTMyMDkwNTU2NywxNDk0NjI2LjAyOTYyMDA0ODEsMTg2ODY1OC44NzMzMjc0MzY5LDM3OTQ2OS42NjQ0MDU2Nzk5LDIyMTgzMDkuNjEyNjI2NTEyNSw0MzkwMTYuMjU4OTA5Mjk1NywxMTY1NDE5LjE4NzI2MTkyOSwxMDQxNjcyLjMzMTA2NDE2MDQsMjM5MTI1MC4wMjgyNzQ1Nzc2LDE3MzIzNjYuMjI3MDU0NDAxNSw0ODcyMDUuNjMxNTU1MjM4NDUsMTQxNzk4OS41NTk1MDE5MDQ4LDk0NDM0MS4zODQ4MDI0ODQ5LDEzOTUwODguNDkwMzgwNDU5NywxNTQ5MjEwLjQwNzkxNTAyOTQsMTM3ODE2My4xNzQyNDIyNTAyLDMxNDE0OTMuMTM2NzYwMTAzNSwyMDAzMzguNDQ2NDU4NzM0NiwyNTA4LjQxMDAxNzQzMzg3MworMjcsU3VuIDIwIEZlYiAxMSwxMTAwNjEuMzg3NzU5NjA5MTgsOTgyNjguNzQ5ODYwNjE0OTcsNTcyMDAuNDEwOTQyNjM1MSwxMTgyNDguMjc0NDM4NjY0ODEsMTE5MTkzLjA3MzAxNTI3NjM5LDE5MjY4MDIuNzQ2NzU2NDk0LDIwOTM4NTQuNTQ4Nzc1NTAzOSwxNzE2MTEzLjc4MzE1OTc2MjQsMTQ5MDYxOC4wMDE5MTc2NTAyLDE4NjM2NDcuODI5NTA2MzA2NCwzNzg0NTIuMDY4NzY4MzY1NywyMjEyMzYwLjkzNjM2NjU2Myw0Mzc4MzguOTgxNTg4NjU0NTcsMTE2MjI5My45NjkxMTcxMzM2LDEwMzg4NzguOTU1Njc5OTU5NSwyMzg0ODM3LjU5MDUzNjQ3NiwxNzI3NzIwLjY2OTEwODA0NSw0ODU4OTkuMTI4MzcwMjY4NDQsMTQxNDE4Ny4wNDIxMzM5NzE4LDk0MTgwOS4wMTQ1OTM2MTY0LDEzOTEzNDcuMzg1MTEwMDI0NCwxNTQ1MDU2LjAwNTMzNjI0ODUsMTM3NDQ2Ny40NTYzMzYwMTgsMzEzMzA2OC44Mjc3NTYwNDU0LDE5OTgwMS4yMTM3MTQ2NTc0LDI1MDEuNjgzNDAwNDQ3NjgwNQorMjgsTW9uIDIxIEZlYiAxMSwxMDk3NjYuMjcxMjM2ODEyNSw5ODAwNS4yNTM4OTM5NjYwNiw1NzA0Ny4wMzQ4NDI5NTUxNSwxMTc5MzEuMjA1NzUyODIxMzgsMTE4ODczLjQ3MDk2NDQwNTA1LDE5MjE2MzYuMjU0MzI2MTA3NywyMDg4MjQwLjEyNjgwMzc3NDIsMTcxMTUxMi4yMjgxMzAxNjY0LDE0ODY2MjEuMDg3MDA5NTM2NiwxODU4NjUwLjY3OTQ3NjE1NSwzNzc0MzcuMjk0NTUxNDE2MywyMjA2NDI4Ljc1MzYwOTI2NjYsNDM2NjY0Ljk2ODQyNzI1ODY2LDExNTkxNzcuNDE2MDU4NzM5LDEwMzYwOTMuMzI1MzAzNjA1LDIzNzg0NDIuOTMyMTQxOTE2NCwxNzIzMDg3Ljk5MTU5NDA2NzUsNDg0NTk2LjI0NzY0MDU4MTgsMTQxMDM5NS4wNjc3NTUzNjIsOTM5MjgzLjY2NTcyMDc0NDYsMTM4NzYxNi42NTI1NTU2MzY0LDE1NDA5MTMuMTIxMzk1NzI1OCwxMzcwNzgxLjk4NTMwMzI3OTIsMzEyNDY2Ny44NzYyNzg0MDc0LDE5OTI2NS40NzA1MjA0MDY0NywyNDk0Ljk3NTQzMzkwOTEyNjQKKzI5LFR1ZSAyMiBGZWIgMTEsMTA5NDcxLjk3MjgzNjEyNzM0LDk3NzQyLjQ4ODM5MDkxMzU3LDU2ODk0LjA4MzkzMjU0Mzk2LDExNzYxNS4wMTYwNDQ4ODIzMiwxMTg1NTQuNzU0OTE0NDMzMzUsMTkxNjQ4NC4wODQ0NDc1NiwyMDgyNjQxLjI2OTEzNDI4OTgsMTcwNjkyMy40Mjk1MzI3OCwxNDgyNjM1LjI1MjM1MDEwOTYsMTg1MzY2Ny4zODI1NDY3OTAyLDM3NjQyNS4zMzM0OTE4NTAzLDIyMDA1MTMuMDE2MDUwNzU5LDQzNTQ5NC4yMDk4NjU0OTQ5LDExNTYwNjkuNTAyNzA5NjUxNCwxMDMzMzE1LjQxNzI1MjYwMSwyMzcyMDY2LjAwMTAyMTI0MywxNzE4NDY4LjE1Njc5MDA2MDIsNDgzMjk2Ljk3ODc1NzIzODEzLDE0MDY2MTMuNjA1NDg5MjQyNiw5MzY3NjUuMzE3NjIwNzYyOSwxMzgzODk2LjI2MjMzOTEzNTQsMTUzNjc4MS43MjIzNTkyODQzLDEzNjcxMDYuNzMxMTM0NDI0LDMxMTYyOTAuMjEzOTIwOTMyMywxOTg3MzEuMjEyNTEzNTk2NTgsMjQ4OC4yODYwNjMxOTczODg2CiszMCxXZWQgMjMgRmViIDExLDEwOTE3OC40OTAxNjE2OTAxLDk3NDgwLjQ1MTIxMjMwMTEyLDU2NzQxLjU1Njk2NjIzODM5LDExNzI5OS43MDI3NDA3NjgzOCwxMTgyMzYuOTIyMjcwNzE1MjcsMTkxMTM0Ni4xOTUxNzczODA3LDIwNzcwNTcuOTMwMTg3MTI1MiwxNzAyMzQ3LjM1MDAxMDUwMTIsMTQ3ODY2MC40NjU0OTA5NTYsMTg0ODY5Ny44OTgxNDk1MjU1LDM3NTQxNi4xNzczNTEzNjA0NCwyMTk0NjEzLjY3NTUzMTQxNiw0MzQzMjYuNjk2MzcyMjk2MjUsMTE1Mjk3MC4yMDM3Njg1NTY3LDEwMzA1NDUuMjA4OTEyMTg0MSwyMzY1NzA2Ljc0NTI2MDI4NywxNzEzODYxLjEyNzA4NjI1NjksNDgyMDAxLjMxMTE0Mjk3NjQsMTQwMjg0Mi42MjQ1NTA5ODIxLDkzNDI1My45NDk3OTE5Njc2LDEzODAxODYuMTg0MTczMDczOSwxNTMyNjYxLjc3NDU5MzQ4MSwxMzYzNDQxLjY2MzkwOTQ1NDEsMzEwNzkzNS43NzI0ODE2MzIsMTk4MTk4LjQzNTM0NDg2OTA3LDI0ODEuNjE1MjMzODU0NzQ3CiszMSxUaHUgMjQgRmViIDExLDEwODg4NS44MjA4MjQ3OTIxMSw5NzIxOS4xNDAyMjUzNjA2Niw1NjU4OS40NTI3MDI1OTM4NCwxMTY5ODUuMjYzMjc0MDg3NDQsMTE3OTE5Ljk3MDQ0NjM1MzMzLDE5MDYyMjIuNTQ0Njk3MzU4MywyMDcxNDkwLjA2NDUxODQ3MjksMTY5Nzc4My45NTIzMTc3ODk0LDE0NzQ2OTYuNjk0MDgwNTY1NiwxODQzNzQyLjE4NTgzNjgyNywzNzQ0MDkuODE3OTE2MjQyLDIxODg3MzAuNjg0MDM1NDM3LDQzMzE2Mi40MTg0NDUwNTg3NSwxMTQ5ODc5LjQ5NDAwOTY5OSwxMDI3NzgyLjY3NzczNTEyNjcsMjM1OTM2NS4xMTMwOTk5MTMsMTcwOTI2Ni44NjQ5ODUyMDgsNDgwNzA5LjIzNDI1MjEyMzA1LDEzOTkwODIuMDk0MjQ3ODgzNyw5MzE3NDkuNTQxNzkzODgxMSwxMzc2NDg2LjM4Nzg2MDQ1MzIsMTUyODU1My4yNDQ1NjUzMTQ2LDEzNTk3ODYuNzUzNzk3NzIzMiwzMDk5NjA0LjQ4Mzk2MjE5MywxOTc2NjcuMTM0Njc3ODU0MDIsMjQ3NC45NjI4OTE1ODYxMTM1CiszMixGcmkgMjUgRmViIDExLDEwODU5My45NjI0NDM4NTg4NSw5Njk1OC41NTMzMDM2OTM4NCw1NjQzNy43Njk5MDM4NzMzODQsMTE2NjcxLjY5NTA4NjExMjIsMTE3NjAzLjg5Njg2MjE3NjEyLDE5MDExMTMuMDkxMzE0MTc1NiwyMDY1OTM3LjYyNjgyMDI0ODMsMTY5MzIzMy4xOTkzMjAzNDIyLDE0NzA3NDMuOTA1ODY0MDQ5LDE4Mzg4MDAuMjA1MjgxOTYxNSwzNzM0MDYuMjQ2OTk3MzIxNSwyMTgyODYzLjk5MzY5MDQyNSw0MzIwMDEuMzY2NjA5NTU5MSwxMTQ2Nzk3LjM0ODI4MjY2MjIsMTAyNTAyNy44MDEyNDE1NDA4LDIzNTMwNDEuMDUyOTM1NTcxLDE3MDQ2ODUuMzMzMTAxNDU0Nyw0Nzk0MjAuNzM3NTcwNTAwNSwxMzk1MzMxLjk4Mzk3ODkxNzEsOTI5MjUyLjA3MzI0NzA3MzMsMTM3Mjc5Ni44NDMyOTQ0NjIsMTUyNDQ1Ni4wOTg4NDE5MzM4LDEzNTYxNDEuOTcxMDU3Njc3NiwzMDkxMjk2LjI4MDU2NzM4OCwxOTcxMzcuMzA2MTg5MTMyNTYsMjQ2OC4zMjg5ODIyNTg1NTcKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWdpbmdfRkRfUmVmZXJlbmNlL05vRGlzZWFzZS9odW1hbjF0bzEvRGlzZWFzZSBEZWF0aHNfMi5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FnaW5nX0ZEX1JlZmVyZW5jZS9Ob0Rpc2Vhc2UvaHVtYW4xdG8xL0Rpc2Vhc2UgRGVhdGhzXzIuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRhZDFhNWIKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FnaW5nX0ZEX1JlZmVyZW5jZS9Ob0Rpc2Vhc2UvaHVtYW4xdG8xL0Rpc2Vhc2UgRGVhdGhzXzIuY3N2CkBAIC0wLDAgKzEsMzMgQEAKK2l0ZXJhdGlvbix0aW1lLEVHLUZSRy1HMjEwMDAxLEVHLUZSRy1HMjEwMDAyLEVHLUZSRy1HMjEwMDAzLEVHLUZSRy1HMjEwMDA0LEVHLUZSRy1HMjEwMDA1LEVHLUxPRS1HMjQwMDAxLEVHLUxPRS1HMjQwMDAyLEVHLUxPRS1HMjQwMDAzLEVHLUxPRS1HMjQwMDA0LEVHLUxPRS1HMjQwMDA1LEVHLUxPRS1HMjQwMDA2LEVHLUxPRS1HMjQwMDA3LEVHLUxPRS1HMjQwMDA4LEVHLUxPRS1HMjQwMDA5LEVHLVVQRS1HMjkwMDAxLEVHLVVQRS1HMjkwMDAyLEVHLVVQRS1HMjkwMDAzLEVHLVVQRS1HMjkwMDA0LEVHLVVQRS1HMjkwMDA1LEVHLVVQRS1HMjkwMDA2LEVHLVVQRS1HMjkwMDA3LEVHLVVQRS1HMjkwMDA4LEVHLVVSRy1HMzAwMDAxLEVHLVVSRy1HMzAwMDAyLEVHLVVSRy1HMzAwMDAzLEVHLVVSRy1HMzAwMDA0CisxLFR1ZSAyNSBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMixXZWQgMjYgSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzMsVGh1IDI3IEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCis0LEZyaSAyOCBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorNSxTYXQgMjkgSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzYsU3VuIDMwIEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCis3LE1vbiAzMSBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorOCxUdWUgMSBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorOSxXZWQgMiBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTAsVGh1IDMgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzExLEZyaSA0IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxMixTYXQgNSBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTMsU3VuIDYgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzE0LE1vbiA3IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxNSxUdWUgOCBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTYsV2VkIDkgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzE3LFRodSAxMCBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTgsRnJpIDExIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxOSxTYXQgMTIgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzIwLFN1biAxMyBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjEsTW9uIDE0IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyMixUdWUgMTUgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzIzLFdlZCAxNiBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjQsVGh1IDE3IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyNSxGcmkgMTggRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzI2LFNhdCAxOSBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjcsU3VuIDIwIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyOCxNb24gMjEgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzI5LFR1ZSAyMiBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMzAsV2VkIDIzIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCiszMSxUaHUgMjQgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzMyLEZyaSAyNSBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BZ2luZ19GRF9SZWZlcmVuY2UvTm9EaXNlYXNlL2h1bWFuMXRvMS9JXzIuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BZ2luZ19GRF9SZWZlcmVuY2UvTm9EaXNlYXNlL2h1bWFuMXRvMS9JXzIuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRhZDFhNWIKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FnaW5nX0ZEX1JlZmVyZW5jZS9Ob0Rpc2Vhc2UvaHVtYW4xdG8xL0lfMi5jc3YKQEAgLTAsMCArMSwzMyBAQAoraXRlcmF0aW9uLHRpbWUsRUctRlJHLUcyMTAwMDEsRUctRlJHLUcyMTAwMDIsRUctRlJHLUcyMTAwMDMsRUctRlJHLUcyMTAwMDQsRUctRlJHLUcyMTAwMDUsRUctTE9FLUcyNDAwMDEsRUctTE9FLUcyNDAwMDIsRUctTE9FLUcyNDAwMDMsRUctTE9FLUcyNDAwMDQsRUctTE9FLUcyNDAwMDUsRUctTE9FLUcyNDAwMDYsRUctTE9FLUcyNDAwMDcsRUctTE9FLUcyNDAwMDgsRUctTE9FLUcyNDAwMDksRUctVVBFLUcyOTAwMDEsRUctVVBFLUcyOTAwMDIsRUctVVBFLUcyOTAwMDMsRUctVVBFLUcyOTAwMDQsRUctVVBFLUcyOTAwMDUsRUctVVBFLUcyOTAwMDYsRUctVVBFLUcyOTAwMDcsRUctVVBFLUcyOTAwMDgsRUctVVJHLUczMDAwMDEsRUctVVJHLUczMDAwMDIsRUctVVJHLUczMDAwMDMsRUctVVJHLUczMDAwMDQKKzEsVHVlIDI1IEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyLFdlZCAyNiBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMyxUaHUgMjcgSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzQsRnJpIDI4IEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCis1LFNhdCAyOSBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorNixTdW4gMzAgSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzcsTW9uIDMxIEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCis4LFR1ZSAxIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCis5LFdlZCAyIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxMCxUaHUgMyBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTEsRnJpIDQgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzEyLFNhdCA1IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxMyxTdW4gNiBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTQsTW9uIDcgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzE1LFR1ZSA4IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxNixXZWQgOSBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTcsVGh1IDEwIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxOCxGcmkgMTEgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzE5LFNhdCAxMiBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjAsU3VuIDEzIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyMSxNb24gMTQgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzIyLFR1ZSAxNSBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjMsV2VkIDE2IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyNCxUaHUgMTcgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzI1LEZyaSAxOCBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjYsU2F0IDE5IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyNyxTdW4gMjAgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzI4LE1vbiAyMSBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjksVHVlIDIyIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCiszMCxXZWQgMjMgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzMxLFRodSAyNCBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMzIsRnJpIDI1IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FnaW5nX0ZEX1JlZmVyZW5jZS9Ob0Rpc2Vhc2UvaHVtYW4xdG8xL0luY2lkZW5jZV8yLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWdpbmdfRkRfUmVmZXJlbmNlL05vRGlzZWFzZS9odW1hbjF0bzEvSW5jaWRlbmNlXzIuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRhZDFhNWIKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FnaW5nX0ZEX1JlZmVyZW5jZS9Ob0Rpc2Vhc2UvaHVtYW4xdG8xL0luY2lkZW5jZV8yLmNzdgpAQCAtMCwwICsxLDMzIEBACitpdGVyYXRpb24sdGltZSxFRy1GUkctRzIxMDAwMSxFRy1GUkctRzIxMDAwMixFRy1GUkctRzIxMDAwMyxFRy1GUkctRzIxMDAwNCxFRy1GUkctRzIxMDAwNSxFRy1MT0UtRzI0MDAwMSxFRy1MT0UtRzI0MDAwMixFRy1MT0UtRzI0MDAwMyxFRy1MT0UtRzI0MDAwNCxFRy1MT0UtRzI0MDAwNSxFRy1MT0UtRzI0MDAwNixFRy1MT0UtRzI0MDAwNyxFRy1MT0UtRzI0MDAwOCxFRy1MT0UtRzI0MDAwOSxFRy1VUEUtRzI5MDAwMSxFRy1VUEUtRzI5MDAwMixFRy1VUEUtRzI5MDAwMyxFRy1VUEUtRzI5MDAwNCxFRy1VUEUtRzI5MDAwNSxFRy1VUEUtRzI5MDAwNixFRy1VUEUtRzI5MDAwNyxFRy1VUEUtRzI5MDAwOCxFRy1VUkctRzMwMDAwMSxFRy1VUkctRzMwMDAwMixFRy1VUkctRzMwMDAwMyxFRy1VUkctRzMwMDAwNAorMSxUdWUgMjUgSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzIsV2VkIDI2IEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCiszLFRodSAyNyBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorNCxGcmkgMjggSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzUsU2F0IDI5IEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCis2LFN1biAzMCBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorNyxNb24gMzEgSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzgsVHVlIDEgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzksV2VkIDIgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzEwLFRodSAzIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxMSxGcmkgNCBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTIsU2F0IDUgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzEzLFN1biA2IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxNCxNb24gNyBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTUsVHVlIDggRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzE2LFdlZCA5IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxNyxUaHUgMTAgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzE4LEZyaSAxMSBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTksU2F0IDEyIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyMCxTdW4gMTMgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzIxLE1vbiAxNCBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjIsVHVlIDE1IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyMyxXZWQgMTYgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzI0LFRodSAxNyBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjUsRnJpIDE4IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyNixTYXQgMTkgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzI3LFN1biAyMCBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjgsTW9uIDIxIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyOSxUdWUgMjIgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzMwLFdlZCAyMyBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMzEsVGh1IDI0IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCiszMixGcmkgMjUgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWdpbmdfRkRfUmVmZXJlbmNlL05vRGlzZWFzZS9odW1hbjF0bzEvUG9wdWxhdGlvbiBDb3VudF8yLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWdpbmdfRkRfUmVmZXJlbmNlL05vRGlzZWFzZS9odW1hbjF0bzEvUG9wdWxhdGlvbiBDb3VudF8yLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMGQ0M2E4Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BZ2luZ19GRF9SZWZlcmVuY2UvTm9EaXNlYXNlL2h1bWFuMXRvMS9Qb3B1bGF0aW9uIENvdW50XzIuY3N2CkBAIC0wLDAgKzEsMzMgQEAKK2l0ZXJhdGlvbix0aW1lLEVHLUZSRy1HMjEwMDAxLEVHLUZSRy1HMjEwMDAyLEVHLUZSRy1HMjEwMDAzLEVHLUZSRy1HMjEwMDA0LEVHLUZSRy1HMjEwMDA1LEVHLUxPRS1HMjQwMDAxLEVHLUxPRS1HMjQwMDAyLEVHLUxPRS1HMjQwMDAzLEVHLUxPRS1HMjQwMDA0LEVHLUxPRS1HMjQwMDA1LEVHLUxPRS1HMjQwMDA2LEVHLUxPRS1HMjQwMDA3LEVHLUxPRS1HMjQwMDA4LEVHLUxPRS1HMjQwMDA5LEVHLVVQRS1HMjkwMDAxLEVHLVVQRS1HMjkwMDAyLEVHLVVQRS1HMjkwMDAzLEVHLVVQRS1HMjkwMDA0LEVHLVVQRS1HMjkwMDA1LEVHLVVQRS1HMjkwMDA2LEVHLVVQRS1HMjkwMDA3LEVHLVVQRS1HMjkwMDA4LEVHLVVSRy1HMzAwMDAxLEVHLVVSRy1HMzAwMDAyLEVHLVVSRy1HMzAwMDAzLEVHLVVSRy1HMzAwMDA0CisxLFR1ZSAyNSBKYW4gMTEsMTE4MDI5LjYsMTA1MzgzLjIwMDAwMDAwMDAxLDYxMzQxLjYwMDAwMDAwMDAwNiwxMjY4MDkuMjAwMDAwMDAwMDEsMTI3ODIyLjQwMDAwMDAwMDAxLDIwNjYyOTkuMjAwMDAwMDAwMiwyMjQ1NDQ1LjIsMTg0MDM1Ni44LDE1OTg1MzUuNiwxOTk4NTcyLjAsNDA1ODUxLjIsMjM3MjUzMS4yLDQ2OTUzNy42MDAwMDAwMDAwMywxMjQ2NDQxLjYsMTExNDA5MS42LDI1NTc0OTQuODAwMDAwMDAwMywxODUyODA0LjAsNTIxMDc3LjIsMTUxNjU3MS4yMDAwMDAwMDAyLDEwMDk5OTQuMCwxNDkyMDc4LjAsMTY1NjkxNC44LDE0NzM5NzYuMCwzMzU5ODk2LjQwMDAwMDAwMDQsMjE0MjY2LjQwMDAwMDAwMDAyLDI2ODIuOAorMixXZWQgMjYgSmFuIDExLDExNzUzMy4wNjU5NDAwMDk4MSwxMDQ5MzkuODY3NTgwNDE0MDgsNjEwODMuNTQ0NDQ3MDM0NTIsMTI2Mjc1LjczMTM4NzcxODc3LDEyNzI4NC42Njg5OTY2NzgwMiwyMDU3NjA2LjU2NzU1MDc2MjgsMjIzNTk5OC45MjUzMjI3ODgsMTgzMjYxNC42NzU3MDQ2MTUsMTU5MTgxMC43ODM3NTQ2OTUsMTk5MDE2NC4yODY0MzIwMjQzLDQwNDE0My44NDA2MjQ5OTY2NCwyMzYyNTUwLjI5MjI1MTUyNSw0Njc1NjIuMzIwODI1NTcyMSwxMjQxMTk3Ljk5NDA4OTM3NTMsMTEwOTQwNC43NzIwNzQyMTcyLDI1NDY3MzUuNzc2MTkyMDA3NiwxODQ1MDA5LjUxMjA3MDgxODgsNTE4ODg1LjEwMDkxOTA1NDgsMTUxMDE5MS4xOTY1NTAwMTYzLDEwMDU3NDUuMDk2MTUzOTY3LDE0ODU4MDEuMDM2MDI1MTgzLDE2NDk5NDQuMzkwNjA1MjIyMiwxNDY3Nzc1LjE4ODYxMzYzNDgsMzM0NTc2MS43ODQ2MDk5NzU4LDIxMzM2NS4wMTExNDkxMzk4NCwyNjcxLjUxMzgzNDY5Nzg5MgorMyxUaHUgMjcgSmFuIDExLDExNzAzNy4wNTYyMzE3MjA5NywxMDQ0OTcuMDAzMzMwMzM5OTgsNjA4MjUuNzYxNDA2ODMxMjksMTI1NzQyLjgyNjEzMDg5ODk1LDEyNjc0Ny41MDU4NTAwMDMxMywyMDQ4OTIzLjExNDcyNjgxNDcsMjIyNjU2Mi42MjYxMzQ4NjczLDE4MjQ4ODAuNzI3Mjc1NDQ2NSwxNTg1MDkzLjA2OTA3NDI2NDUsMTk4MTc2NS40NTE2MDgyNjYyLDQwMjQzOC4yODQyNjE4NDEzLDIzNTI1NzkuOTI0NTc3NDk5Myw0NjU1ODkuMTI3NTkyNjMxOSwxMjM1OTU5LjkyNTU1MDUwOCwxMTA0NzIyLjg5MzU0OTQ4MjMsMjUzNTk4OC4xMTQxNjc0MTIsMTgzNzIyMy4yNTUzMDUwODg4LDUxNjY5NS4zMTY3NDY1NDI0NiwxNTAzODE3LjkzMDUzNDQ0NjgsMTAwMTUwMC42NzkyNTA4MDQ3LDE0Nzk1MzAuNzAwNjcyNjU5NiwxNjQyOTgxLjM0MjEyNzQ4OSwxNDYxNTgwLjkyNTQzMDYzLDMzMzE2NDIuMDk1NzA3ODI5NiwyMTI0NjQuNTc0MTg2MjA3NjcsMjY2MC4yMzk1ODc4NTMwNTU2Cis0LEZyaSAyOCBKYW4gMTEsMTE2NTQxLjU3MzEwOTE1ODMxLDEwNDA1NC42MDkyNDQ0MzU3Miw2MDU2OC4yNTIwNDA0NDM2MywxMjUyMTAuNDg2NjI5NzQyNjksMTI2MjEwLjkxMjk3OTM1NDk4LDIwNDAyNDguODgwNjM4Mzc2NiwyMjE3MTM2LjM0NDkzNzI3NSwxODE3MTU0Ljk4OTU0NjE1MywxNTc4MzgyLjQ4NjIxNTI1NjQsMTk3MzM3NS41MzMzNTcwMjg0LDQwMDczNC41Mzg1OTIzNDk5LDIzNDI2MjAuMTQxODg0NDAxLDQ2MzYxOC4wMjkxODg0MzAxLDEyMzA3MjcuNDE3OTc1NjI4NSwxMTAwMDQ1Ljk4NTUxMjk0ODgsMjUyNTI1MS44NjIzMzM2MTk1LDE4Mjk0NDUuMjY0NzcyMDY1LDUxNDUwNy44NTczNDUyMzgsMTQ5NzQ1MS40MzA2NTg0NDQ1LDk5NzI2MC43Njg0MDczNDIxLDE0NzMyNjcuMDIyMTgzOTgzNCwxNjM2MDI1LjY4NTkyODMyOTgsMTQ1NTM5My4yMzgzNDk5MTEzLDMzMTc1MzcuMzk2ODg4NTU4OCwyMTE1NjUuMDkzMTY2NzY2MjgsMjY0OC45NzczMTAyNDQ2MzMKKzUsU2F0IDI5IEphbiAxMSwxMTYwNDYuNjE4Nzk2MDc2MSwxMDM2MTIuNjg3MzA4MTg5MTgsNjAzMTEuMDE3NTAzNTg3MDgsMTI0Njc4LjcxNTI3MzQxNzYzLDEyNTY3NC44OTI3OTI5OTA1NSwyMDMxNTgzLjkwNDIxNTg2NjIsMjIwNzcyMC4xMjQwMzU2NTYsMTgwOTQzNy40OTcxOTAyNTEsMTU3MTY3OS4wNjUyOTUxMTg4LDE5NjQ5OTQuNTY5MzMyNzA0NCwzOTkwMzIuNjExMjYzMDIyNDcsMjMzMjY3MC45ODg4NzIyNTc1LDQ2MTY0OS4wMzQ0NTkzNTk5LDEyMjU1MDAuNDk0ODQ4NTA1NCwxMDk1Mzc0LjA2ODk1NDgyNTYsMjUxNDUyNy4wNjg4NzU0OTI2LDE4MjE2NzUuNTc1Mzc5Nzc3Miw1MTIzMjIuNzMyNTMyNTc0MDQsMTQ5MTA5MS43MjU0OTUxOTUyLDk5MzAyNS4zODI2NTI1MjE3LDE0NjcwMTAuMDI4NjcwODcyNiwxNjI5MDc3LjQ1MzIyNTA5NDgsMTQ0OTIxMi4xNTUxNDIxNDI3LDMzMDM0NDcuNzUxNDU0NzkxNSwyMTA2NjYuNTcyMTI3NzMzNzMsMjYzNy43MjcwNTI0MTgzMTcKKzYsU3VuIDMwIEphbiAxMSwxMTU1NTIuMTk1NTA1OTcwNDMsMTAzMTcxLjIzOTQ5NzkyOTE5LDYwMDU0LjA1ODk0NjY0NTg5LDEyNDE0Ny41MTQ0NDAwNzAxOCwxMjUxMzkuNDQ3Njg4MDU3NTIsMjAyMjkyOC4yMjQyMTAxMTYsMjE5ODMxNC4wMDU1NDA0OTksMTgwMTcyOC4yODQ3MjEzMDgyLDE1NjQ5ODIuODM2MjkyMzY4NCwxOTU2NjIyLjU5NzAxNTk4ODUsMzk3MzMyLjUwOTg4NTA4NTYzLDIzMjI3MzIuNTEwMDM0ODk1LDQ1OTY4Mi4xNTIyMTEwMDU5LDEyMjAyNzkuMTc5NTQ0NTc3LDEwOTA3MDcuMTY0NzY4NDkzNywyNTAzODEzLjc4MTc1NTYxNjQsMTgxMzkxNC4yMjE4NzUyMjQ3LDUxMDEzOS45NTIwODA2OTU1LDE0ODQ3MzguODQzNDg2MDc2NSw5ODg3OTQuNTQwOTI3NTA1NSwxNDYwNzU5Ljc0ODExNTM2NTQsMTYyMjEzNi42NzUwOTExMjg4LDE0NDMwMzcuNzAzNDQ5ODgyNiwzMjg5MzczLjIyMjQxNzE0MiwyMDk3NjkuMDE1MDg3NDA1NzQsMjYyNi40ODg4NjQ2ODY2MzQKKzcsTW9uIDMxIEphbiAxMSwxMTUwNTguMzA1NDQyMDkxNjksMTAyNzMwLjI2Nzc4MDgzNjY0LDU5Nzk3LjM3NzUxNDY3OTQ2NSwxMjM2MTYuODg2NDk2ODM4OSwxMjQ2MDQuNTgwMDUwNjA3ODEsMjAxNDI4MS44NzkxOTI1OSwyMTg4OTE4LjAzMTM2NzM3NDYsMTc5NDAyNy4zODY0OTMxMzc2LDE1NTgyOTMuODI5MDQ2NzU4NCwxOTQ4MjU5LjY1MzcxNDA4NTcsMzk1NjM0LjI0MjAzNDUzNTc0LDIzMTI4MDQuNzQ5NjYwMTg5Nyw0NTc3MTcuMzkxMjA4MTk0MTQsMTIxNTA2My40OTUzMzEwODIsMTA4NjA0NS4yOTM3NTA2MjQsMjQ5MzExMi4wNDg3MTQ1NjkzLDE4MDYxNjEuMjM4ODQ0NTcxNCw1MDc5NTkuNTI1NzE2NTE0MywxNDc4MzkyLjgxMjk0MDgxNzgsOTg0NTY4LjI2MjA4NTc4MTQsMTQ1NDUxNi4yMDgzNjk5NzksMTYxNTIwMy4zODI0NTU5NDU1LDE0MzY4NjkuOTEwNzg3NzM5LDMyNzUzMTMuODcyNDk0NTYzNSwyMDg4NzIuNDI2MDQ1NDc4MzgsMjYxNS4yNjI3OTcxMjkyMjU0Cis4LFR1ZSAxIEZlYiAxMSwxMTQ1NjQuOTUwNzk3NDU3LDEwMjI4OS43NzQxMTQ5NTU2NSw1OTU0MC45NzQzNDc0Mjg4NSwxMjMwODYuODMzNzk5ODY3ODksMTI0MDcwLjI5MjI1NTYxMTAxLDIwMDU2NDQuOTA3NTU1NjAyNywyMTc5NTMyLjI0MzIzNzE3MSwxNzg2MzM0LjgzNjY5OTk5MjIsMTU1MTYxMi4wNzMyNTk0NDgyLDE5Mzk5MDUuNzc2NTYwOTIzOCwzOTM5MzcuODE1MjUyMTgxNDMsMjMwMjg4Ny43NTE4MzAzMTcsNDU1NzU0Ljc2MDE3NTA0MTIsMTIwOTg1My40NjUzNjcxOTI0LDEwODEzODguNDc2NjAxMjk0NSwyNDgyNDIxLjkxNzI3MTE5MzYsMTc5ODQxNi42NjA3MTMzNDIzLDUwNTc4MS40NjMxMjE3NjQ5LDE0NzIwNTMuNjYyMDM3NjYxMyw5ODAzNDYuNTY0ODkzMjcwNiwxNDQ4Mjc5LjQzNzE1Nzg2NTYsMTYwODI3Ny42MDYxMDU0MDMzLDE0MzA3MDguODA0NTQyNTI1NCwzMjYxMjY5Ljc2NDExNDcwNSwyMDc5NzYuODA4OTgzMDcwNywyNjA0LjA0ODg5OTU5MzEzMzIKKzksV2VkIDIgRmViIDExLDExNDA3Mi4xMzM3NTQ4NjI3OCwxMDE4NDkuNzYwNDQ5MjA0NzIsNTkyODQuODUwNTc5MzIzMjQsMTIyNTU3LjM1ODY5NDMyMDMxLDEyMzUzNi41ODY2NjY5NjgwNCwxOTk3MDE3LjM0NzUxMjUzOSwyMTcwMTU2LjY4MjY3NjMzNCwxNzc4NjUwLjY2OTM3Njc2LDE1NDQ5MzcuNTk4NDkzMTcyOCwxOTMxNTYxLjAwMjUxNzM2NTIsMzkyMjQzLjIzNzA0MzY4NywyMjkyOTgxLjU2MDQyMjAwNSw0NTM3OTQuMjY3Nzk1MDA0NSwxMjA0NjQ5LjExMjcwNDE0NSwxMDc2NzM2LjczMzkyNDEwOTUsMjQ3MTc0My40MzQ3MjI4NjYsMTc5MDY4MC41MjE3NDY2MTkxLDUwMzYwNS43NzM5MzMwNTksMTQ2NTcyMS40MTg4MjM1MjIsOTc2MTI5LjQ2ODAyODQzNDEsMTQ0MjA0OS40NjIwNzI5NzI0LDE2MDEzNTkuMzc2NjgxODgwOCwxNDI0NTU0LjQxMTk3MzQxNjgsMzI0NzI0MC45NTk0MTQyNjU2LDIwNzA4Mi4xNjc4NjI3NDc0LDI1OTIuODQ3MjIxNjkzMDgzCisxMCxUaHUgMyBGZWIgMTEsMTEzNTc5Ljg1NjQ4Njg5NzMsMTAxNDEwLjIyODcyMzM4Nzk5LDU5MDI5LjAwNzMzOTQ4NjUzLDEyMjAyOC40NjM1MTQzOTE4MywxMjMwMDMuNDY1NjM3NTI0NjcsMTk4ODM5OS4yMzcwOTgwNzMxLDIxNjA3OTEuMzkxMDE3MTA0NSwxNzcwOTc0LjkxODM5OTE2MDUsMTUzODI3MC40MzQxNzI0MTMsMTkyMzIyNS4zNjgzNzE0MTk2LDM5MDU1MC41MTQ4Nzk2MTU0LDIyODMwODYuMjE5MTA2Nzg1NSw0NTE4MzUuOTIyNzEwOTMxOCwxMTk5NDUwLjQ2MDI4NTM3NDQsMTA3MjA5MC4wODYyMjYzMTc4LDI0NjEwNzYuNjQ4MTQ1NzcwNywxNzgyOTUyLjg1NjA0OTIzOSw1MDE0MzIuNDY3NzQxOTQxNzQsMTQ1OTM5Ni4xMTEyMTQxNTAyLDk3MTkxNi45OTAwODIzODA2LDE0MzU4MjYuMzEwNTgwMTk5NiwxNTk0NDQ4LjcyNDY4NDQ1MzMsMTQxODQwNi43NjAyMTIxMDcsMzIzMzIyNy41MjAyMzkzNTUsMjA2MTg4LjUwNjYyODU0MTc0LDI1ODEuNjU3ODEyODExNzcxCisxMSxGcmkgNCBGZWIgMTEsMTEzMDg4LjEyMTE1NTk1MzMxLDEwMDk3MS4xODA4NjgyMDY0Myw1ODc3My40NDU3NTE3NDM4NCwxMjE1MDAuMTUwNTgzMzI0MTcsMTIyNDcwLjkzMTUwOTA4NTIzLDE5Nzk3OTAuNjE0MTY4MzkwMiwyMTUxNDM2LjQwOTM5Nzc2LDE3NjMzMDcuNjE3NDgzOTQwNywxNTMxNjEwLjYwOTU4MzU2NjIsMTkxNDg5OC45MTA3Mzg0NTgsMzg4ODU5LjY1NjE5NTQ3MTYsMjI3MzIwMS43NzEzNTEyNDgsNDQ5ODc5LjczMzUyNTExMTg2LDExOTQyNTcuNTMwOTQ2NjQ2MSwxMDY3NDQ4LjU1MzkxODkzMTIsMjQ1MDQyMS42MDQzOTUxNzMsMTc3NTIzMy42OTc1NjU5OTEsNDk5MjYxLjU1NDA5NDk0NjY1LDE0NTMwNzcuNzY2OTk0MjkyNCw5Njc3MDkuMTQ5NTU4OTc0MiwxNDI5NjEwLjAxMDAxNTU1OTQsMTU4NzU0NS42ODA0NjkwNywxNDEyMjY1Ljg3NjI2Mjk2NjMsMzIxOTIyOS41MDgxNDU4NSwyMDUyOTUuODI5MjA1OTc4NDMsMjU3MC40ODA3MjIxMDAxNDgKKzEyLFNhdCA1IEZlYiAxMSwxMTI1OTYuOTI5OTE0MjQwNjIsMTAwNTMyLjYxODgwNTI2OTIsNTg1MTguMTY2OTM0NjI4MTEsMTIwOTcyLjQyMjIxMzQxODcxLDEyMTkzOC45ODY2MTI0MjYzLDE5NzExOTEuNTE2NDAxNDA2OCwyMTQyMDkxLjc3ODc2Mjg1MzIsMTc1NTY0OC44MDAxODkwNzI1LDE1MjQ5NTguMTUzODc1MTE3NCwxOTA2NTgxLjY2NjA2MTQyNiwzODcxNzAuNjY4MzkxNzQ2MjQsMjI2MzMyOC4yNjA0MTcyOTUsNDQ3OTI1LjcwODc5OTMyNDUsMTE4OTA3MC4zNDc0MTYxODk3LDEwNjI4MTIuMTU3MzE2ODQ0MiwyNDM5Nzc4LjM1MDEwNTY5MiwxNzY3NTIzLjA4MDA4MTgxNTYsNDk3MDkzLjA0MjQ5MzY1MTk3LDE0NDY3NjYuNDEzODE3ODU0Niw5NjM1MDUuOTY0ODc0OTQyOCwxNDIzNDAwLjU4NzU4NjMzNjgsMTU4MDY1MC4yNzQyNDg3MzEsMTQwNjEzMS43ODcwMDMxOTg0LDMyMDUyNDYuOTg0Mzk5NzU2LDIwNDQwNC4xMzk1MDIwOTY0NiwyNTU5LjMxNTk5ODQ3NzcxMDgKKzEzLFN1biA2IEZlYiAxMSwxMTIxMDYuMjg0OTAzNzk4ODksMTAwMDk0LjU0NDQ0NzEwNDk2LDU4MjYzLjE3MjAwMTM4NjY4LDEyMDQ0NS4yODA3MDYwNTAxNSwxMjE0MDcuNjMzMjY3MzEwNDMsMTk2MjYwMS45ODEyOTY5OTQ1LDIxMzI3NTcuNTM5ODYzNDU1NiwxNzQ3OTk4LjQ5OTkxMzk1MDcsMTUxODMxMy4wOTYwNTc4MTE1LDE4OTgyNzMuNjcwNjExMDU5OCwzODU0ODMuNTU4ODMzOTU5MSwyMjUzNDY1LjcyOTM2MjM5Niw0NDU5NzMuODU3MDU0ODkxLDExODM4ODguOTMyMzE0ODMzNiwxMDU4MTgwLjkxNjYzODk1NDUsMjQyOTE0Ni45MzE2OTE1NzY3LDE3NTk4MjEuMDM3MjIyMDAzMyw0OTQ5MjYuOTQyMzk0NzM2NSwxNDQwNDYyLjA3OTIwODA2NDgsOTU5MzA3LjQ1NDM1OTk4NjUsMTQxNzE5OC4wNzAzNzEyNDk1LDE1NzM3NjIuNTM2MDkzNjY2LDE0MDAwMDQuNTE5MTgzLDMxOTEyODAuMDA5OTc3NTY3NSwyMDM1MTMuNDQxNDA1NDcyMywyNTQ4LjE2MzY5MDYzMjc4OAorMTQsTW9uIDcgRmViIDExLDExMTYxNi4xODgyNTY1MTAyNyw5OTY1Ni45NTk2OTcxNzMxOCw1ODAwOC40NjIwNTk5ODc5MSwxMTk5MTguNzI4MzUxNjgwMTMsMTIwODc2Ljg3Mzc4MjQ5OTk3LDE5NTQwMjIuMDQ2MTc3MjAxLDIxMjM0MzMuNzMzMjU3Mzk4LDE3NDAzNTYuNzQ5ODk5NTkxMywxNTExNjc1LjQ2NTAwNDgyNTUsMTg4OTk3NC45NjA0ODYxMDAzLDM4Mzc5OC4zMzQ4NTI3MDMsMjI0MzYxNC4yMjEwMzk4NDIzLDQ0NDAyNC4xODY3NzI3MjQ5LDExNzg3MTMuMzA4MTU2MTM5LDEwNTM1NTQuODUyMDA4MjgyLDI0MTg1MjcuMzk1MzQ2OTgxLDE3NTIxMjcuNjAyNDUyMzk1LDQ5Mjc2My4yNjMyMTAwMzU4NiwxNDM0MTY0Ljc5MDU1NzYzNzMsOTU1MTEzLjYzNjI1Njg4NjYsMTQxMTAwMi40ODUzMjA2MDg2LDE1NjY4ODIuNDk1OTMxNTEyNCwxMzkzODg0LjA5OTQyNTcxOTYsMzE3NzMyOC42NDU1NjY2MzA2LDIwMjYyMy43Mzg3ODYyNDI4NCwyNTM3LjAyMzg0NzAyMjgyOTYKKzE1LFR1ZSA4IEZlYiAxMSwxMTExMjYuNjQyMDk0MTEyMiw5OTIxOS44NjY0NDk4NzU2Niw1Nzc1NC4wMzgyMTMxMjc4MjQsMTE5MzkyLjc2NzQyOTg3MDk1LDEyMDM0Ni43MTA0NTU3NzA4MiwxOTQ1NDUxLjc0ODE4NjQ3NSwyMTE0MTIwLjM5OTMwOTUxNCwxNzMyNzIzLjU4MzIyODgzMSwxNTA1MDQ1LjI4OTQ1MTk0MTQsMTg4MTY4NS41NzE2MTM1MTA0LDM4MjExNS4wMDM3NDM2ODc1LDIyMzM3NzMuNzc4MDk5MDA2NSw0NDIwNzYuNzA2MzkzMzgyOCwxMTczNTQzLjQ5NzM0NjUzNDQsMTA0ODkzMy45ODM0NTIwODk4LDI0MDc5MTkuNzg3MDQ2MjQxLDE3NDQ0NDIuODA5MDc5NTgxOSw0OTA2MDIuMDE0MzA2NTk4NywxNDI3ODc0LjU3NTEyODkzNjIsOTUwOTI0LjUyODcyMTYxNTIsMTQwNDgxMy44NTkyNTY0ODA4LDE1NjAwMTAuMTgzNTQ3NDk1NiwxMzg3NzcwLjU1NDIyODAxNjIsMzE2MzM5Mi45NTE1NjU1MDY0LDIwMTczNS4wMzU0OTYxMjg3NSwyNTI1Ljg5NjUxNTg3NDY5OAorMTYsV2VkIDkgRmViIDExLDExMDYzNy42NDg1MjgyMTAyNSw5ODc4My4yNjY1OTA1Njc4Myw1NzQ5OS45MDE1NTgyMzY3NSwxMTg4NjcuNDAwMjA5Mjk5MzgsMTE5ODE3LjE0NTU3MzkyNjM5LDE5MzY4OTEuMTI0MjkxODg5NiwyMTA0ODE3LjU3ODE5MTg4NCwxNzI1MDk5LjAzMjgyNjUyNTksMTQ5ODQyMi41OTc5OTc3MTk3LDE4NzM0MDUuNTM5NzQ4NjkxNywzODA0MzMuNTcyNzY3NzgzMywyMjIzOTQ0LjQ0Mjk4NTU5Nyw0NDAxMzEuNDI0MzE3MTE1MSwxMTY4Mzc5LjUyMjE4NTQ1MTYsMTA0NDMxOC4zMzA5MDIwMDU3LDIzOTczMjQuMTUyNTQ0MTUyNSwxNzM2NzY2LjY5MDI1MTEwNjYsNDg4NDQzLjIwNTAwNjc0MzQsMTQyMTU5MS40NjAwNTQxMzk2LDk0Njc0MC4xNDk4MjM0NDQxLDEzOTg2MzIuMjE4ODcyODQ5NCwxNTUzMTQ1LjYyODU4NDYwNzMsMTM4MTY2My45MDk5NjAwMTk5LDMxNDk0NzIuOTg4MDg0MzM2MywyMDA4NDcuMzM1MzY4NDU3NiwyNTE0Ljc4MTc0NTE4NDk1NzMKKzE3LFRodSAxMCBGZWIgMTEsMTEwMTQ5LjIwOTY2MDI5MDkyLDk4MzQ3LjE2MTk5NTU3MDM0LDU3MjQ2LjA1MzE4NzQ4NjAyLDExODM0Mi42Mjg5NDc3NzA0MywxMTkyODguMTgxNDEyODExNDUsMTkyODM0MC4yMTEyODMzNjc4LDIwOTU1MjUuMzA5ODg0MDc4OCwxNzE3NDgzLjEzMTQ1OTc1MywxNDkxODA3LjQxOTEwMzY3MzIsMTg2NTEzNC45MDA0NzU3MDE4LDM3ODc1NC4wNDkxNTEwNjU5MywyMjE0MTI2LjI1Nzk0MTkxOSw0MzgxODguMzQ4OTAzOTE3MzYsMTE2MzIyMS40MDQ4NjU0NjEsMTAzOTcwNy45MTQxOTQxNDIyLDIzODY3NDAuNTM3Mzc2MjQ4NywxNzI5MDk5LjI3ODk1NTY2NTQsNDg2Mjg2Ljg0NDU4ODExNDcsMTQxNTMxNS40NzIzMzU0MDU2LDk0MjU2MC41MTc1NDUwNTUyLDEzOTI0NTcuNTkwNzM1Nzc3NSwxNTQ2Mjg4Ljg2MDU0Mzc4NywxMzc1NTY0LjE5Mjg2NTQ5MiwzMTM1NTY4LjgxNDk0NTIwNjUsMTk5OTYwLjY0MjIxODE4NzIyLDI1MDMuNjc5NTgyNzIwMTY5CisxOCxGcmkgMTEgRmViIDExLDEwOTY2MS4zMjc1ODE3MzQ1NCw5NzkxMS41NTQ1MzIxODA0NSw1Njk5Mi40OTQxODc3OTQ2NCwxMTc4MTguNDU1ODkyMjMxMjEsMTE4NzU5LjgyMDIzNzMyNjEyLDE5MTk3OTkuMDQ1NzczOTA3OCwyMDg2MjQzLjYzNDE3MzQwNiwxNzA5ODc1LjkxMTczODAxMDgsMTQ4NTE5OS43ODEwOTQ0NDIsMTg1Njg3My42ODkyMDc0NzI4LDM3NzA3Ni40NDAwODQ4NjA1NCwyMjA0MzE5LjI2NTAwNzEzMSw0MzYyNDcuNDg4NDczNTgxNSwxMTU4MDY5LjE2NzQ3MjQwNzcsMTAzNTEwMi43NTMwNjkyMTk0LDIzNzYxNjguOTg2ODU5MDgxLDE3MjE0NDAuNjA4MDIzMzA5OCw0ODQxMzIuOTQyMjgzNzQwOCwxNDA5MDQ2LjYzODg0NTAzNzcsOTM4Mzg1LjY0OTc4MjY1MSwxMzg2MjkwLjAwMTI4MzU3MDQsMTUzOTQzOS45MDg3ODQxMDI5LDEzNjk0NzEuNDI5MDYxOTg2NywzMTIxNjgwLjQ5MTY4MjUxNiwxOTkwNzQuOTU5ODQxOTI5MTQsMjQ5Mi41OTAwNzYwMTcxODA4CisxOSxTYXQgMTIgRmViIDExLDEwOTE3NC4wMDQzNzM4MjgyNCw5NzQ3Ni40NDYwNTg2ODM3MSw1NjczOS4yMjU2NDA4MzYwNCwxMTcyOTQuODgzMjc4Nzg0ODQsMTE4MjMyLjA2NDMwMTQzOTg1LDE5MTEyNjcuNjY0MTk5ODA5MywyMDc2OTcyLjU5MDY1NTE1NDgsMTcwMjI3Ny40MDYxMTM0MjA0LDE0Nzg1OTkuNzEyMTU3OTY4MiwxODQ4NjIxLjk0MTE4NjAzLDM3NTQwMC43NTI3MjU3ODYwNiwyMTk0NTIzLjUwNjAxNzUwNjYsNDM0MzA4Ljg1MTMwNTc0NzEsMTE1MjkyMi44MzE5ODU1NDgsMTAzMDUwMi44NjcxNzI2ODYyLDIzNjU2MDkuNTQ2MDkwNDk2NywxNzEzNzkwLjcxMDEyNTY1LDQ4MTk4MS41MDcyODIwOTAxLDE0MDI3ODQuOTg2MzI1NjUwMiw5MzQyMTUuNTY0MzQ2MDY0NiwxMzgwMTI5LjQ3NjgyNjkzOSwxNTMyNTk4LjgwMjUyMjkzMjYsMTM2MzM4NS42NDQ1NDEwMTE3LDMxMDc4MDguMDc3NTQzMzQ0LDE5ODE5MC4yOTIwMTc5NzE5OCwyNDgxLjUxMzI3MjM4MzQyMjYKKzIwLFN1biAxMyBGZWIgMTEsMTA4Njg3LjI0MjEwNzc3ODg2LDk3MDQxLjgzODQyNDM2NTQxLDU2NDg2LjI0ODYyMzA0NDc5LDExNjc3MS45MTMzMzI3MDQyOCwxMTc3MDQuOTE1ODQ4MjA1NDksMTkwMjc0Ni4xMDI4MjA5MDA3LDIwNjc3MTIuMjE4NzMyODQzLDE2OTQ2ODcuNjQ2ODgwOTI4LDE0NzIwMDcuMjQwMzQ1NjcyLDE4NDAzNzkuNjkxNDgyNzExMSwzNzM3MjYuOTk0MTk1Nzk5ODcsMjE4NDczOS4wMjI2MDY2OTQsNDMyMzcyLjQ0NTYzOTk1MzI1LDExNDc3ODIuNDIwMjc3Njg2MywxMDI1OTA4LjI3NjA1NDg0MywyMzU1MDYyLjI1OTk0OTkyMjYsMTcwNjE0OS42MTc3NzYwNTg0LDQ3OTgzMi41NDg3MjcxMjg3LDEzOTY1MzAuNTQxMzkwMzM1NCw5MzAwNTAuMjc4OTU4ODcxMywxMzczOTc2LjA0MzU0OTE2NDQsMTUyNTc2NS41NzA4MzYxNDYsMTM1NzMwNi44NjUxNjgxODk5LDMwOTM5NTEuNjMxNDg3ODE5NCwxOTczMDYuNjQyNTA2MzA1MDQsMjQ3MC40NDkyMTg4OTcyMDE3CisyMSxNb24gMTQgRmViIDExLDEwODIwMS4wNDI4NDQ3MjU5OCw5NjYwNy43MzM0Njk1MjIyNyw1NjIzMy41NjQyMDU2MjMzNiwxMTYyNDkuNTQ4MjY4NDQ2NDUsMTE3MTc4LjM3NzEwOTc3MzM2LDE4OTQyMzQuMzk3NzIwNzY3LDIwNTg0NjIuNTU3NjE4NDY0NiwxNjg3MTA2LjY2NjE3ODUwOCwxNDY1NDIyLjM5MzU3MjYyNywxODMyMTQ2Ljk3NDk5ODM4NzUsMzcyMDU1LjE3MTU4MjI0MjUzLDIxNzQ5NjUuODU2MjA1OTc4LDQzMDQzOC4yNzk2NzU2ODk5LDExNDI2NDcuOTU0MTE1MzEzLDEwMjEzMTguOTk5MTcwOTY0NywyMzQ0NTI3LjE3MzA5ODY0NDcsMTY5ODUxNy4zNjMzMjk4NzM0LDQ3NzY4Ni4wNzU3MTgzNzc5LDEzOTAyODMuMzMwNTIyODMwOCw5MjU4ODkuODExMjU4NDk5MywxMzY3ODI5LjcyNzUwNjI2MTYsMTUxODk0MC4yNDI2NTgyODcsMTM1MTIzNS4xMTY2ODM0MjMsMzA4MDExMS4yMTIxODk0OTA0LDE5NjQyNC4wMTUwNDg2NDE5NCwyNDU5LjM5Nzk2MjQwNzk5NjYKKzIyLFR1ZSAxNSBGZWIgMTEsMTA3NzE1LjQwODYzNTc1NDk3LDk2MTc0LjEzMzAyNTQ3NDA1LDU1OTgxLjE3MzQ1NDU0ODkxNiwxMTU3MjcuNzkwMjg5NjY2MTUsMTE2NjUyLjQ1MDMwNzQwNTM0LDE4ODU3MzIuNTg0ODA2OTc3LDIwNDkyMjMuNjQ2MzMyNzM4MiwxNjc5NTM0LjQ5NTk4NzM2NiwxNDU4ODQ1LjE5OTYxNzczNzcsMTgyMzkyMy44MjY0NjM2ODQyLDM3MDM4NS4yOTE5Mzc4ODI2NiwyMTY1MjA0LjA0ODA0NDU0Miw0Mjg1MDYuMzYxNTcyNDUwMSwxMTM3NTE5LjQ1NTE1ODc0MTQsMTAxNjczNS4wNTU4ODE0MjMzLDIzMzQwMDQuMzI5OTgwMDkyNiwxNjkwODkzLjk3ODk4NDYwNDYsNDc1NTQyLjA5NzMxMDk3MTM1LDEzODQwNDMuMzgwMDc3Njg2NCw5MjE3MzQuMTc4Nzk2MzQxOCwxMzYxNjkwLjU1NDYyNzE0NDIsMTUxMjEyMi44NDY3ODI3NTgsMTM0NTE3MC40MjQ3MDEwNTM2LDMwNjYyODYuODc4MDM1Njk3LDE5NTU0Mi40MTMzNjg0NDQyLDI0NDguMzU5NTQ5NTM2NzU1NAorMjMsV2VkIDE2IEZlYiAxMSwxMDcyMzAuMzQxNTIxOTEwMDQsOTU3NDEuMDM4OTE0NTc1MjQsNTU3MjkuMDc3NDMwNTgwMSwxMTUyMDYuNjQxNTg5MjMwMTMsMTE2MTI3LjEzNzY1MTQ4OTEsMTg3NzI0MC42OTk4MTEzMTQyLDIwMzk5OTUuNTIzNzA1MzU1NCwxNjcxOTcxLjE2ODEzMjE0MjYsMTQ1MjI3NS42ODYxMjM5MTYyLDE4MTU3MTAuMjgwNDM5MjAxNSwzNjg3MTcuMzYyMjgwOTYxOSwyMTU1NDUzLjYzOTE0OTczMDYsNDI2NTc2LjY5OTQ0OTc4MTksMTEzMjM5Ni45NDQ5NjIyNDYzLDEwMTIxNTYuNDY1NDUxODExOCwyMzIzNDkzLjc3NDgyMDEyMSwxNjgzMjc5LjQ5Njc4MDEzNzgsNDczNDAwLjYyMjUxNTcxMzMsMTM3NzgxMC43MTYyODA0MzI3LDkxNzU4My4zOTkwMzc4Njg2LDEzNTU1NTguNTUwNzEzNzkxLDE1MDUzMTMuNDExODYyMDAxMywxMzM5MTEyLjgxNDcxMDAyODcsMzA1MjQ3OC42ODcxMjc5NDIsMTk0NjYxLjg0MTE3MDk0NTA2LDI0MzcuMzM0MDI2Njc2MTkyCisyNCxUaHUgMTcgRmViIDExLDEwNjc0NS44NDM1MzQyMDc0Miw5NTMwOC40NTI5NTAyMjY3OCw1NTQ3Ny4yNzcxODkyNjM4NiwxMTQ2ODYuMTA0MzQ5MjMxMTksMTE1NjAyLjQ0MTM0MTU1MjI3LDE4Njg3NTguNzc4MjkwMDA1LDIwMzA3NzguMjI4Mzc1MjMwNSwxNjY0NDE2LjcxNDI4MTExODUsMTQ0NTcxMy44ODA1OTgyNTk5LDE4MDc1MDYuMzcxMzE1NzM3NSwzNjcwNTEuMzg5NTk1MjM5OSwyMTQ1NzE0LjY3MDM0NzMxNDMsNDI0NjQ5LjMwMTM4NzM0MDY1LDExMjcyODAuNDQ0OTc0MjAyNCwxMDA3NTgzLjI0NzA1MzA2NzgsMjMxMjk5NS41NTE2MjcyOTU2LDE2NzU2NzMuOTQ4NTk4OTQxLDQ3MTI2MS42NjAyOTkxMzYxLDEzNzE1ODUuMzY1MjI3NzQ5OCw5MTM0MzcuNDg5MzYyNzM4NywxMzQ5NDMzLjc0MTQ0MTQxMDcsMTQ5ODUxMS45NjY0MDc2ODU4LDEzMzMwNjIuMzEyMDc0MDYzLDMwMzg2ODYuNjk3MjgyMjY1NCwxOTM3ODIuMzAyMTQzMTczMzUsMjQyNi4zMjE0Mzk5OTEwODQ0CisyNSxGcmkgMTggRmViIDExLDEwNjI2MS45MTY2OTM2NDg0Nyw5NDg3Ni4zNzY5MzY4ODc4MSw1NTIyNS43NzM3ODA5NDIyOSwxMTQxNjYuMTgwNzQxMDAyMzMsMTE1MDc4LjM2MzU2NjI3NjcyLDE4NjAyODYuODU1NjIzOTQ5LDIwMjE1NzEuNzk4NzkwNzUxLDE2NTY4NzEuMTY1OTQ2NDE5NCwxNDM5MTU5LjgxMDQxMjIzLDE3OTkzMTIuMTMzMzE0NTEwNiwzNjUzODcuMzgwODMwMDM5OCwyMTM1OTg3LjE4MjI2MTc1Myw0MjI3MjQuMTc1NDI0OTQxMDYsMTEyMjE2OS45NzY1MzcyMjM0LDEwMDMwMTUuNDE5NzYxNTk3OSwyMzAyNTA5LjcwNDE5MzE3NzYsMTY2ODA3Ny4zNjYxNjYyNzE3LDQ2OTEyNS4yMTk1ODM1NTg4LDEzNjUzNjcuMzUyODg3NjM1OCw5MDkyOTYuNDY3MDY0OTEyNCwxMzQzMzE2LjE1MjM1ODYwODMsMTQ5MTcxOC41Mzg3OTA4ODk4LDEzMjcwMTguOTQyMDMxODA0NywzMDI0OTEwLjk2NjAyOTYxODQsMTkyOTAzLjc5OTk1Mzk3NzIzLDI0MTUuMzIxODM1NDE4NTczOAorMjYsU2F0IDE5IEZlYiAxMSwxMDU3NzguNTYzMDExMjMyODcsOTQ0NDQuODEyNjcwMDg3NDYsNTQ5NzQuNTY4MjUwNzU5NDgsMTEzNjQ2Ljg3MjkyNTEzMDkxLDExNDU1NC45MDY1MDM1MTI4LDE4NTE4MjQuOTY3MDE4OTUxNywyMDEyMzc2LjI3MzIxMDAyODQsMTY0OTMzNC41NTQ0ODQyMjE5LDE0MzI2MTMuNTAyODAxODMwMiwxNzkxMTI3LjYwMDQ4NzM4MywzNjM3MjUuMzQyOTAwMjkzNCwyMTI2MjcxLjIxNTMxNjQ2Miw0MjA4MDEuMzI5NTYyNjEsMTExNzA2NS41NjA4ODgzMDE2LDk5ODQ1My4wMDI1NTk0MDIsMjI5MjAzNi4yNzYwOTI2MSwxNjYwNDg5Ljc4MTA1MDM4MjQsNDY2OTkxLjMwOTI0NzE0NDgsMTM1OTE1Ni43MDUwOTk1NzcsOTA1MTYwLjM0OTM1Mjc2NTEsMTMzNzIwNS44MDg4ODc1NTI3LDE0ODQ5MzMuMTU3MjQyMjg3NCwxMzIwOTgyLjcyOTY5Njk5ODYsMzAxMTE1MS41NTA2MTYyMzk3LDE5MjAyNi4zMzgyNTQwNDgyOSwyNDA0LjMzNTI1ODY2ODQ2NTUKKzI3LFN1biAyMCBGZWIgMTEsMTA1Mjk1Ljc4NDQ4Nzk3MTg5LDk0MDEzLjc2MTkzNjQzNjYxLDU0NzIzLjY2MTYzODY2ODQsMTEzMTI4LjE4MzA1MTQ3MjksMTE0MDMyLjA3MjMyMDI5MzcyLDE4NDMzNzMuMTQ3NTA1OTUzNywyMDAzMTkxLjY4OTcwMTE1MDYsMTY0MTgwNi45MTEwOTQ5NTk0LDE0MjYwNzQuOTg0ODY3Nzg1NiwxNzgyOTUyLjgwNjcxNzA4NTIsMzYyMDY1LjI4MjY4NjU4NjksMjExNjU2Ni44MDk3MzQwNzc3LDQxODg4MC43NzE3NjA2MzkxLDExMTE5NjcuMjE5MTU4OTQ2OCw5OTM4OTYuMDE0MzM0MTk4NywyMjgxNTc1LjMxMDY4NDAwMzQsMTY1MjkxMS4yMjQ2NjI3MzAyLDQ2NDg1OS45MzgxMjM5NjA3NSwxMzUyOTUzLjQ0NzU3NDcxNzcsOTAxMDI5LjE1MzM0OTE5OTQsMTMzMTEwMi43MzYzMjQxNDMxLDE0NzgxNTUuODQ5ODUyMzMzOCwxMzE0OTUzLjcwMDA1ODY1MjYsMjk5NzQwOC41MDgwMDQwMzE2LDE5MTE0OS45MjA2NzU5NDU0NCwyMzkzLjM2MTc1NTIyMzUyODIKKzI4LE1vbiAyMSBGZWIgMTEsMTA0ODEzLjU4MzExNDkwMTY2LDkzNTgzLjIyNjUxMzYzOTgyLDU0NDczLjA1NDk3OTQzNzc5NSwxMTI2MTAuMTEzMjU5MTY3MDgsMTEzNTA5Ljg2MzE3Mjg0OTkyLDE4MzQ5MzEuNDMxOTQxMjY1NSwxOTk0MDE4LjA4NjE0MjQzMzMsMTYzNDI4OC4yNjY4MjM1Mjk1LDE0MTk1NDQuMjgzNTc1NzIyNywxNzc0Nzg3Ljc4NTcxNzQzOTgsMzYwNDA3LjIwNzAzNTIwNjIsMjEwNjg3NC4wMDU1MzY3MjQsNDE2OTYyLjUwOTkzOTYzNzQsMTEwNjg3NC45NzIzNzUzMjc1LDk4OTM0NC40NzM4Nzk1NDk5LDIyNzExMjYuODUxMTA5NjI1MywxNjQ1MzQxLjcyODI1ODE4NCw0NjI3MzEuMTE1MDA0MDM0OTUsMTM0Njc1Ny42MDU4OTYwMzA2LDg5NjkwMi44OTYwOTE3NTk4LDEzMjUwMDYuOTU5ODM4MTc3OCwxNDcxMzg2LjY0NDU3MTQ1MTcsMTMwODkzMS44Nzc5ODEyMDI3LDI5ODM2ODEuODk0ODcwOTM4MywxOTAyNzQuNTUwODM0MTE5MTcsMjM4Mi40MDEzNzAzMzk3OTczCisyOSxUdWUgMjIgRmViIDExLDEwNDMzMS45NjA4NzMwOTY0NCw5MzE1My4yMDgxNzA1MDcxOCw1NDIyMi43NDkzMDI2NTkwOSwxMTIwOTIuNjY1Njc2NjQ5NDEsMTEyOTg4LjI4MTIwNjYyMzQ1LDE4MjY0OTkuODU1MDA2Nzk4NiwxOTg0ODU1LjUwMDIyMjY3NDMsMTYyNjc3OC42NTI1NTk1MDE4LDE0MTMwMjEuNDI1NzU2MzQ5NywxNzY2NjMyLjU3MTAzMzU4OCwzNTg3NTEuMTIyNzU4MTgzLDIwOTcxOTIuODQyNTQ2MjgwNSw0MTUwNDYuNTUxOTgwNTg0MzQsMTEwMTc4OC44NDE0NTg0MTEsOTg0Nzk4LjM5OTg5NDk4NjksMjI2MDY5MC45NDAyOTU4ODcsMTYzNzc4MS4zMjI5MzUyMzM2LDQ2MDYwNC44NDg2MzM0MTYxLDEzNDA1NjkuMjA1NTE4NDg3Niw4OTI3ODEuNTk0NTMyNzQ1NSwxMzE4OTE4LjUwNDQ3MzUyMTQsMTQ2NDYyNS41NjkyMTAyMTgsMTMwMjkxNy4yODgyMDQ2Nzk3LDI5Njk5NzEuNzY3NjExMzI0MywxODk0MDAuMjMyMzI0OTM1NTgsMjM3MS40NTQxNDkwNDY4NzU1CiszMCxXZWQgMjMgRmViIDExLDEwMzg1MC45MTk3MzM2ODE5OSw5MjcyMy43MDg2NjY5NjYyLDUzOTcyLjc0NTYzMjc1MzM2LDExMTU3NS44NDI0MjE2NjczMiwxMTI0NjcuMzI4NTU2MjgyNDMsMTgxODA3OC40NTEyMTAzMDA0LDE5NzU3MDMuOTY5NDQxNDA2NywxNjE5Mjc4LjA5OTAzNzMyNSwxNDA2NTA2LjQzODEwNTYzNywxNzU4NDg3LjE5NjA0MjIxNDUsMzU3MDk3LjAzNjYzMzM0MDQsMjA4NzUyMy4zNjAzODQ2NTA1LDQxMzEzMi45MDU3MjQ4ODMsMTA5NjcwOC44NDcyMjQxMDQsOTgwMjU3LjgxMDk4NjEzNjMsMjI1MDI2Ny42MjA5NTM2MzMsMTYzMDIzMC4wMzk2MzYxOTk4LDQ1ODQ4MS4xNDc3MTQyMzI0LDEzMzQzODguMjcxNzY5MjMyMSw4ODg2NjUuMjY1NTM5MzI1NywxMzEyODM3LjM5NTE0ODI3MzgsMTQ1Nzg3Mi42NTE0Mzk1NTE1LDEyOTY5MDkuOTU1MzQ0ODc1NiwyOTU2Mjc4LjE4MjMzNjM1NSwxODg1MjYuOTY4NzI2NzAwNjQsMjM2MC41MjAxMzYxNDgyMzc3CiszMSxUaHUgMjQgRmViIDExLDEwMzM3MC40NjE2NTc4NDg5OCw5MjI5NC43Mjk3NTQwNzM3OSw1MzcyMy4wNDQ5ODg5NzgyNSwxMTEwNTkuNjQ1NjAxMjk0MDksMTExOTQ3LjAwNzM0NTczNTYsMTgwOTY2Ny4yNTQ4ODU1ODc4LDE5NjY1NjMuNTMxMTA5MTUzOCwxNjExNzg2LjYzNjgzNjUzNjUsMTM5OTk5OS4zNDcxODQ5OTg3LDE3NTAzNTEuNjkzOTUxNzc1LDM1NTQ0NC45NTU0MDQzMzkyLDIwNzc4NjUuNTk4NDc0MDMsNDExMjIxLjU3ODk3NDQxMzIsMTA5MTYzNS4wMTAzODMzOTQzLDk3NTcyMi43MjU2NjQ4NDY0LDIyMzk4NTYuOTM1NTc4NDMxLDE2MjI2ODcuOTA5MTQ3NDQzNSw0NTYzNjAuMDIwOTA0NzUwMiwxMzI4MjE0LjgyOTg0Nzc1LDg4NDU1My45MjU4OTM2NTMsMTMwNjc2My42NTY2NTQ5NDAyLDE0NTExMjcuOTE4NzkwOTAwNCwxMjkwOTA5LjkwMzg5MzUxMDMsMjk0MjYwMS4xOTQ4NzQzNzcsMTg3NjU0Ljc2MzU5OTY4NDQ2LDIzNDkuNTk5Mzc2MjIxNTM0NAorMzIsRnJpIDI1IEZlYiAxMSwxMDI4OTAuNTg4NTk2ODY2MzUsOTE4NjYuMjczMTc0MDI4MjMsNTM0NzMuNjQ4Mzg1NDM0OTY0LDExMDU0NC4wNzczMTE5NDMzLDExMTQyNy4zMTk2ODgxNDY3NywxODAxMjY2LjMwMDE5Mjc4MjQsMTk1NzQzNC4yMjIzNDc2ODQyLDE2MDQzMDQuMjk2MzgxOTcwOSwxMzkzNTAwLjE3OTQyMTQ3NCwxNzQyMjI2LjA5NzgwMjcyMjgsMzUzNzk0Ljg4NTc4MDcyMzgsMjA2ODIxOS41OTYwMzcxNzcsNDA5MzEyLjU3OTQ5MTU4NDg1LDEwODY1NjcuMzUxNTQyNDkyNiw5NzExOTMuMTYyMzQ5MzEzNCwyMjI5NDU4LjkyNjQ1MDg2MzUsMTYxNTE1NC45NjIwOTk1NzcsNDU0MjQxLjQ3NjgxOTQzMzg1LDEzMjIwNDguOTA0ODI2MDQyNyw4ODA0NDcuNTkyMjkyOTc5MSwxMzAwNjk3LjMxMzY2MDU5OTUsMTQ0NDM5MS4zOTg2NTY0MzA3LDEyODQ5MTcuMTU4MjE4NDAwNiwyOTI4OTQwLjg2MDc3MTMwMDMsMTg2NzgzLjYyMDQ4NjE0NTc1LDIzMzguNjkxOTEzNjE4ODk3NgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BZ2luZ19GRF9SZWZlcmVuY2UvTm9EaXNlYXNlL2h1bWFuMXRvMS9TXzIuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BZ2luZ19GRF9SZWZlcmVuY2UvTm9EaXNlYXNlL2h1bWFuMXRvMS9TXzIuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIwZDQzYTgKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FnaW5nX0ZEX1JlZmVyZW5jZS9Ob0Rpc2Vhc2UvaHVtYW4xdG8xL1NfMi5jc3YKQEAgLTAsMCArMSwzMyBAQAoraXRlcmF0aW9uLHRpbWUsRUctRlJHLUcyMTAwMDEsRUctRlJHLUcyMTAwMDIsRUctRlJHLUcyMTAwMDMsRUctRlJHLUcyMTAwMDQsRUctRlJHLUcyMTAwMDUsRUctTE9FLUcyNDAwMDEsRUctTE9FLUcyNDAwMDIsRUctTE9FLUcyNDAwMDMsRUctTE9FLUcyNDAwMDQsRUctTE9FLUcyNDAwMDUsRUctTE9FLUcyNDAwMDYsRUctTE9FLUcyNDAwMDcsRUctTE9FLUcyNDAwMDgsRUctTE9FLUcyNDAwMDksRUctVVBFLUcyOTAwMDEsRUctVVBFLUcyOTAwMDIsRUctVVBFLUcyOTAwMDMsRUctVVBFLUcyOTAwMDQsRUctVVBFLUcyOTAwMDUsRUctVVBFLUcyOTAwMDYsRUctVVBFLUcyOTAwMDcsRUctVVBFLUcyOTAwMDgsRUctVVJHLUczMDAwMDEsRUctVVJHLUczMDAwMDIsRUctVVJHLUczMDAwMDMsRUctVVJHLUczMDAwMDQKKzEsVHVlIDI1IEphbiAxMSwxMTgwMjkuNiwxMDUzODMuMjAwMDAwMDAwMDEsNjEzNDEuNjAwMDAwMDAwMDA2LDEyNjgwOS4yMDAwMDAwMDAwMSwxMjc4MjIuNDAwMDAwMDAwMDEsMjA2NjI5OS4yMDAwMDAwMDAyLDIyNDU0NDUuMiwxODQwMzU2LjgsMTU5ODUzNS42LDE5OTg1NzIuMCw0MDU4NTEuMiwyMzcyNTMxLjIsNDY5NTM3LjYwMDAwMDAwMDAzLDEyNDY0NDEuNiwxMTE0MDkxLjYsMjU1NzQ5NC44MDAwMDAwMDAzLDE4NTI4MDQuMCw1MjEwNzcuMiwxNTE2NTcxLjIwMDAwMDAwMDIsMTAwOTk5NC4wLDE0OTIwNzguMCwxNjU2OTE0LjgsMTQ3Mzk3Ni4wLDMzNTk4OTYuNDAwMDAwMDAwNCwyMTQyNjYuNDAwMDAwMDAwMDIsMjY4Mi44CisyLFdlZCAyNiBKYW4gMTEsMTE3NTMzLjA2NTk0MDAwOTgxLDEwNDkzOS44Njc1ODA0MTQwOCw2MTA4My41NDQ0NDcwMzQ1MiwxMjYyNzUuNzMxMzg3NzE4NzcsMTI3Mjg0LjY2ODk5NjY3ODAyLDIwNTc2MDYuNTY3NTUwNzYyOCwyMjM1OTk4LjkyNTMyMjc4OCwxODMyNjE0LjY3NTcwNDYxNSwxNTkxODEwLjc4Mzc1NDY5NSwxOTkwMTY0LjI4NjQzMjAyNDMsNDA0MTQzLjg0MDYyNDk5NjY0LDIzNjI1NTAuMjkyMjUxNTI1LDQ2NzU2Mi4zMjA4MjU1NzIxLDEyNDExOTcuOTk0MDg5Mzc1MywxMTA5NDA0Ljc3MjA3NDIxNzIsMjU0NjczNS43NzYxOTIwMDc2LDE4NDUwMDkuNTEyMDcwODE4OCw1MTg4ODUuMTAwOTE5MDU0OCwxNTEwMTkxLjE5NjU1MDAxNjMsMTAwNTc0NS4wOTYxNTM5NjcsMTQ4NTgwMS4wMzYwMjUxODMsMTY0OTk0NC4zOTA2MDUyMjIyLDE0Njc3NzUuMTg4NjEzNjM0OCwzMzQ1NzYxLjc4NDYwOTk3NTgsMjEzMzY1LjAxMTE0OTEzOTg0LDI2NzEuNTEzODM0Njk3ODkyCiszLFRodSAyNyBKYW4gMTEsMTE3MDM3LjA1NjIzMTcyMDk3LDEwNDQ5Ny4wMDMzMzAzMzk5OCw2MDgyNS43NjE0MDY4MzEyOSwxMjU3NDIuODI2MTMwODk4OTUsMTI2NzQ3LjUwNTg1MDAwMzEzLDIwNDg5MjMuMTE0NzI2ODE0NywyMjI2NTYyLjYyNjEzNDg2NzMsMTgyNDg4MC43MjcyNzU0NDY1LDE1ODUwOTMuMDY5MDc0MjY0NSwxOTgxNzY1LjQ1MTYwODI2NjIsNDAyNDM4LjI4NDI2MTg0MTMsMjM1MjU3OS45MjQ1Nzc0OTkzLDQ2NTU4OS4xMjc1OTI2MzE5LDEyMzU5NTkuOTI1NTUwNTA4LDExMDQ3MjIuODkzNTQ5NDgyMywyNTM1OTg4LjExNDE2NzQxMiwxODM3MjIzLjI1NTMwNTA4ODgsNTE2Njk1LjMxNjc0NjU0MjQ2LDE1MDM4MTcuOTMwNTM0NDQ2OCwxMDAxNTAwLjY3OTI1MDgwNDcsMTQ3OTUzMC43MDA2NzI2NTk2LDE2NDI5ODEuMzQyMTI3NDg5LDE0NjE1ODAuOTI1NDMwNjMsMzMzMTY0Mi4wOTU3MDc4Mjk2LDIxMjQ2NC41NzQxODYyMDc2NywyNjYwLjIzOTU4Nzg1MzA1NTYKKzQsRnJpIDI4IEphbiAxMSwxMTY1NDEuNTczMTA5MTU4MzEsMTA0MDU0LjYwOTI0NDQzNTcyLDYwNTY4LjI1MjA0MDQ0MzYzLDEyNTIxMC40ODY2Mjk3NDI2OSwxMjYyMTAuOTEyOTc5MzU0OTgsMjA0MDI0OC44ODA2MzgzNzY2LDIyMTcxMzYuMzQ0OTM3Mjc1LDE4MTcxNTQuOTg5NTQ2MTUzLDE1NzgzODIuNDg2MjE1MjU2NCwxOTczMzc1LjUzMzM1NzAyODQsNDAwNzM0LjUzODU5MjM0OTksMjM0MjYyMC4xNDE4ODQ0MDEsNDYzNjE4LjAyOTE4ODQzMDEsMTIzMDcyNy40MTc5NzU2Mjg1LDExMDAwNDUuOTg1NTEyOTQ4OCwyNTI1MjUxLjg2MjMzMzYxOTUsMTgyOTQ0NS4yNjQ3NzIwNjUsNTE0NTA3Ljg1NzM0NTIzOCwxNDk3NDUxLjQzMDY1ODQ0NDUsOTk3MjYwLjc2ODQwNzM0MjEsMTQ3MzI2Ny4wMjIxODM5ODM0LDE2MzYwMjUuNjg1OTI4MzI5OCwxNDU1MzkzLjIzODM0OTkxMTMsMzMxNzUzNy4zOTY4ODg1NTg4LDIxMTU2NS4wOTMxNjY3NjYyOCwyNjQ4Ljk3NzMxMDI0NDYzMworNSxTYXQgMjkgSmFuIDExLDExNjA0Ni42MTg3OTYwNzYxLDEwMzYxMi42ODczMDgxODkxOCw2MDMxMS4wMTc1MDM1ODcwOCwxMjQ2NzguNzE1MjczNDE3NjMsMTI1Njc0Ljg5Mjc5Mjk5MDU1LDIwMzE1ODMuOTA0MjE1ODY2MiwyMjA3NzIwLjEyNDAzNTY1NiwxODA5NDM3LjQ5NzE5MDI1MSwxNTcxNjc5LjA2NTI5NTExODgsMTk2NDk5NC41NjkzMzI3MDQ0LDM5OTAzMi42MTEyNjMwMjI0NywyMzMyNjcwLjk4ODg3MjI1NzUsNDYxNjQ5LjAzNDQ1OTM1OTksMTIyNTUwMC40OTQ4NDg1MDU0LDEwOTUzNzQuMDY4OTU0ODI1NiwyNTE0NTI3LjA2ODg3NTQ5MjYsMTgyMTY3NS41NzUzNzk3NzcyLDUxMjMyMi43MzI1MzI1NzQwNCwxNDkxMDkxLjcyNTQ5NTE5NTIsOTkzMDI1LjM4MjY1MjUyMTcsMTQ2NzAxMC4wMjg2NzA4NzI2LDE2MjkwNzcuNDUzMjI1MDk0OCwxNDQ5MjEyLjE1NTE0MjE0MjcsMzMwMzQ0Ny43NTE0NTQ3OTE1LDIxMDY2Ni41NzIxMjc3MzM3MywyNjM3LjcyNzA1MjQxODMxNworNixTdW4gMzAgSmFuIDExLDExNTU1Mi4xOTU1MDU5NzA0MywxMDMxNzEuMjM5NDk3OTI5MTksNjAwNTQuMDU4OTQ2NjQ1ODksMTI0MTQ3LjUxNDQ0MDA3MDE4LDEyNTEzOS40NDc2ODgwNTc1MiwyMDIyOTI4LjIyNDIxMDExNiwyMTk4MzE0LjAwNTU0MDQ5OSwxODAxNzI4LjI4NDcyMTMwODIsMTU2NDk4Mi44MzYyOTIzNjg0LDE5NTY2MjIuNTk3MDE1OTg4NSwzOTczMzIuNTA5ODg1MDg1NjMsMjMyMjczMi41MTAwMzQ4OTUsNDU5NjgyLjE1MjIxMTAwNTksMTIyMDI3OS4xNzk1NDQ1NzcsMTA5MDcwNy4xNjQ3Njg0OTM3LDI1MDM4MTMuNzgxNzU1NjE2NCwxODEzOTE0LjIyMTg3NTIyNDcsNTEwMTM5Ljk1MjA4MDY5NTUsMTQ4NDczOC44NDM0ODYwNzY1LDk4ODc5NC41NDA5Mjc1MDU1LDE0NjA3NTkuNzQ4MTE1MzY1NCwxNjIyMTM2LjY3NTA5MTEyODgsMTQ0MzAzNy43MDM0NDk4ODI2LDMyODkzNzMuMjIyNDE3MTQyLDIwOTc2OS4wMTUwODc0MDU3NCwyNjI2LjQ4ODg2NDY4NjYzNAorNyxNb24gMzEgSmFuIDExLDExNTA1OC4zMDU0NDIwOTE2OSwxMDI3MzAuMjY3NzgwODM2NjQsNTk3OTcuMzc3NTE0Njc5NDY1LDEyMzYxNi44ODY0OTY4Mzg5LDEyNDYwNC41ODAwNTA2MDc4MSwyMDE0MjgxLjg3OTE5MjU5LDIxODg5MTguMDMxMzY3Mzc0NiwxNzk0MDI3LjM4NjQ5MzEzNzYsMTU1ODI5My44MjkwNDY3NTg0LDE5NDgyNTkuNjUzNzE0MDg1NywzOTU2MzQuMjQyMDM0NTM1NzQsMjMxMjgwNC43NDk2NjAxODk3LDQ1NzcxNy4zOTEyMDgxOTQxNCwxMjE1MDYzLjQ5NTMzMTA4MiwxMDg2MDQ1LjI5Mzc1MDYyNCwyNDkzMTEyLjA0ODcxNDU2OTMsMTgwNjE2MS4yMzg4NDQ1NzE0LDUwNzk1OS41MjU3MTY1MTQzLDE0NzgzOTIuODEyOTQwODE3OCw5ODQ1NjguMjYyMDg1NzgxNCwxNDU0NTE2LjIwODM2OTk3OSwxNjE1MjAzLjM4MjQ1NTk0NTUsMTQzNjg2OS45MTA3ODc3MzksMzI3NTMxMy44NzI0OTQ1NjM1LDIwODg3Mi40MjYwNDU0NzgzOCwyNjE1LjI2Mjc5NzEyOTIyNTQKKzgsVHVlIDEgRmViIDExLDExNDU2NC45NTA3OTc0NTcsMTAyMjg5Ljc3NDExNDk1NTY1LDU5NTQwLjk3NDM0NzQyODg1LDEyMzA4Ni44MzM3OTk4Njc4OSwxMjQwNzAuMjkyMjU1NjExMDEsMjAwNTY0NC45MDc1NTU2MDI3LDIxNzk1MzIuMjQzMjM3MTcxLDE3ODYzMzQuODM2Njk5OTkyMiwxNTUxNjEyLjA3MzI1OTQ0ODIsMTkzOTkwNS43NzY1NjA5MjM4LDM5MzkzNy44MTUyNTIxODE0MywyMzAyODg3Ljc1MTgzMDMxNyw0NTU3NTQuNzYwMTc1MDQxMiwxMjA5ODUzLjQ2NTM2NzE5MjQsMTA4MTM4OC40NzY2MDEyOTQ1LDI0ODI0MjEuOTE3MjcxMTkzNiwxNzk4NDE2LjY2MDcxMzM0MjMsNTA1NzgxLjQ2MzEyMTc2NDksMTQ3MjA1My42NjIwMzc2NjEzLDk4MDM0Ni41NjQ4OTMyNzA2LDE0NDgyNzkuNDM3MTU3ODY1NiwxNjA4Mjc3LjYwNjEwNTQwMzMsMTQzMDcwOC44MDQ1NDI1MjU0LDMyNjEyNjkuNzY0MTE0NzA1LDIwNzk3Ni44MDg5ODMwNzA3LDI2MDQuMDQ4ODk5NTkzMTMzMgorOSxXZWQgMiBGZWIgMTEsMTE0MDcyLjEzMzc1NDg2Mjc4LDEwMTg0OS43NjA0NDkyMDQ3Miw1OTI4NC44NTA1NzkzMjMyNCwxMjI1NTcuMzU4Njk0MzIwMzEsMTIzNTM2LjU4NjY2Njk2ODA0LDE5OTcwMTcuMzQ3NTEyNTM5LDIxNzAxNTYuNjgyNjc2MzM0LDE3Nzg2NTAuNjY5Mzc2NzYsMTU0NDkzNy41OTg0OTMxNzI4LDE5MzE1NjEuMDAyNTE3MzY1MiwzOTIyNDMuMjM3MDQzNjg3LDIyOTI5ODEuNTYwNDIyMDA1LDQ1Mzc5NC4yNjc3OTUwMDQ1LDEyMDQ2NDkuMTEyNzA0MTQ1LDEwNzY3MzYuNzMzOTI0MTA5NSwyNDcxNzQzLjQzNDcyMjg2NiwxNzkwNjgwLjUyMTc0NjYxOTEsNTAzNjA1Ljc3MzkzMzA1OSwxNDY1NzIxLjQxODgyMzUyMiw5NzYxMjkuNDY4MDI4NDM0MSwxNDQyMDQ5LjQ2MjA3Mjk3MjQsMTYwMTM1OS4zNzY2ODE4ODA4LDE0MjQ1NTQuNDExOTczNDE2OCwzMjQ3MjQwLjk1OTQxNDI2NTYsMjA3MDgyLjE2Nzg2Mjc0NzQsMjU5Mi44NDcyMjE2OTMwODMKKzEwLFRodSAzIEZlYiAxMSwxMTM1NzkuODU2NDg2ODk3MywxMDE0MTAuMjI4NzIzMzg3OTksNTkwMjkuMDA3MzM5NDg2NTMsMTIyMDI4LjQ2MzUxNDM5MTgzLDEyMzAwMy40NjU2Mzc1MjQ2NywxOTg4Mzk5LjIzNzA5ODA3MzEsMjE2MDc5MS4zOTEwMTcxMDQ1LDE3NzA5NzQuOTE4Mzk5MTYwNSwxNTM4MjcwLjQzNDE3MjQxMywxOTIzMjI1LjM2ODM3MTQxOTYsMzkwNTUwLjUxNDg3OTYxNTQsMjI4MzA4Ni4yMTkxMDY3ODU1LDQ1MTgzNS45MjI3MTA5MzE4LDExOTk0NTAuNDYwMjg1Mzc0NCwxMDcyMDkwLjA4NjIyNjMxNzgsMjQ2MTA3Ni42NDgxNDU3NzA3LDE3ODI5NTIuODU2MDQ5MjM5LDUwMTQzMi40Njc3NDE5NDE3NCwxNDU5Mzk2LjExMTIxNDE1MDIsOTcxOTE2Ljk5MDA4MjM4MDYsMTQzNTgyNi4zMTA1ODAxOTk2LDE1OTQ0NDguNzI0Njg0NDUzMywxNDE4NDA2Ljc2MDIxMjEwNywzMjMzMjI3LjUyMDIzOTM1NSwyMDYxODguNTA2NjI4NTQxNzQsMjU4MS42NTc4MTI4MTE3NzEKKzExLEZyaSA0IEZlYiAxMSwxMTMwODguMTIxMTU1OTUzMzEsMTAwOTcxLjE4MDg2ODIwNjQzLDU4NzczLjQ0NTc1MTc0Mzg0LDEyMTUwMC4xNTA1ODMzMjQxNywxMjI0NzAuOTMxNTA5MDg1MjMsMTk3OTc5MC42MTQxNjgzOTAyLDIxNTE0MzYuNDA5Mzk3NzYsMTc2MzMwNy42MTc0ODM5NDA3LDE1MzE2MTAuNjA5NTgzNTY2MiwxOTE0ODk4LjkxMDczODQ1OCwzODg4NTkuNjU2MTk1NDcxNiwyMjczMjAxLjc3MTM1MTI0OCw0NDk4NzkuNzMzNTI1MTExODYsMTE5NDI1Ny41MzA5NDY2NDYxLDEwNjc0NDguNTUzOTE4OTMxMiwyNDUwNDIxLjYwNDM5NTE3MywxNzc1MjMzLjY5NzU2NTk5MSw0OTkyNjEuNTU0MDk0OTQ2NjUsMTQ1MzA3Ny43NjY5OTQyOTI0LDk2NzcwOS4xNDk1NTg5NzQyLDE0Mjk2MTAuMDEwMDE1NTU5NCwxNTg3NTQ1LjY4MDQ2OTA3LDE0MTIyNjUuODc2MjYyOTY2MywzMjE5MjI5LjUwODE0NTg1LDIwNTI5NS44MjkyMDU5Nzg0MywyNTcwLjQ4MDcyMjEwMDE0OAorMTIsU2F0IDUgRmViIDExLDExMjU5Ni45Mjk5MTQyNDA2MiwxMDA1MzIuNjE4ODA1MjY5Miw1ODUxOC4xNjY5MzQ2MjgxMSwxMjA5NzIuNDIyMjEzNDE4NzEsMTIxOTM4Ljk4NjYxMjQyNjMsMTk3MTE5MS41MTY0MDE0MDY4LDIxNDIwOTEuNzc4NzYyODUzMiwxNzU1NjQ4LjgwMDE4OTA3MjUsMTUyNDk1OC4xNTM4NzUxMTc0LDE5MDY1ODEuNjY2MDYxNDI2LDM4NzE3MC42NjgzOTE3NDYyNCwyMjYzMzI4LjI2MDQxNzI5NSw0NDc5MjUuNzA4Nzk5MzI0NSwxMTg5MDcwLjM0NzQxNjE4OTcsMTA2MjgxMi4xNTczMTY4NDQyLDI0Mzk3NzguMzUwMTA1NjkyLDE3Njc1MjMuMDgwMDgxODE1Niw0OTcwOTMuMDQyNDkzNjUxOTcsMTQ0Njc2Ni40MTM4MTc4NTQ2LDk2MzUwNS45NjQ4NzQ5NDI4LDE0MjM0MDAuNTg3NTg2MzM2OCwxNTgwNjUwLjI3NDI0ODczMSwxNDA2MTMxLjc4NzAwMzE5ODQsMzIwNTI0Ni45ODQzOTk3NTYsMjA0NDA0LjEzOTUwMjA5NjQ2LDI1NTkuMzE1OTk4NDc3NzEwOAorMTMsU3VuIDYgRmViIDExLDExMjEwNi4yODQ5MDM3OTg4OSwxMDAwOTQuNTQ0NDQ3MTA0OTYsNTgyNjMuMTcyMDAxMzg2NjgsMTIwNDQ1LjI4MDcwNjA1MDE1LDEyMTQwNy42MzMyNjczMTA0MywxOTYyNjAxLjk4MTI5Njk5NDUsMjEzMjc1Ny41Mzk4NjM0NTU2LDE3NDc5OTguNDk5OTEzOTUwNywxNTE4MzEzLjA5NjA1NzgxMTUsMTg5ODI3My42NzA2MTEwNTk4LDM4NTQ4My41NTg4MzM5NTkxLDIyNTM0NjUuNzI5MzYyMzk2LDQ0NTk3My44NTcwNTQ4OTEsMTE4Mzg4OC45MzIzMTQ4MzM2LDEwNTgxODAuOTE2NjM4OTU0NSwyNDI5MTQ2LjkzMTY5MTU3NjcsMTc1OTgyMS4wMzcyMjIwMDMzLDQ5NDkyNi45NDIzOTQ3MzY1LDE0NDA0NjIuMDc5MjA4MDY0OCw5NTkzMDcuNDU0MzU5OTg2NSwxNDE3MTk4LjA3MDM3MTI0OTUsMTU3Mzc2Mi41MzYwOTM2NjYsMTQwMDAwNC41MTkxODMsMzE5MTI4MC4wMDk5Nzc1Njc1LDIwMzUxMy40NDE0MDU0NzIzLDI1NDguMTYzNjkwNjMyNzg4CisxNCxNb24gNyBGZWIgMTEsMTExNjE2LjE4ODI1NjUxMDI3LDk5NjU2Ljk1OTY5NzE3MzE4LDU4MDA4LjQ2MjA1OTk4NzkxLDExOTkxOC43MjgzNTE2ODAxMywxMjA4NzYuODczNzgyNDk5OTcsMTk1NDAyMi4wNDYxNzcyMDEsMjEyMzQzMy43MzMyNTczOTgsMTc0MDM1Ni43NDk4OTk1OTEzLDE1MTE2NzUuNDY1MDA0ODI1NSwxODg5OTc0Ljk2MDQ4NjEwMDMsMzgzNzk4LjMzNDg1MjcwMywyMjQzNjE0LjIyMTAzOTg0MjMsNDQ0MDI0LjE4Njc3MjcyNDksMTE3ODcxMy4zMDgxNTYxMzksMTA1MzU1NC44NTIwMDgyODIsMjQxODUyNy4zOTUzNDY5ODEsMTc1MjEyNy42MDI0NTIzOTUsNDkyNzYzLjI2MzIxMDAzNTg2LDE0MzQxNjQuNzkwNTU3NjM3Myw5NTUxMTMuNjM2MjU2ODg2NiwxNDExMDAyLjQ4NTMyMDYwODYsMTU2Njg4Mi40OTU5MzE1MTI0LDEzOTM4ODQuMDk5NDI1NzE5NiwzMTc3MzI4LjY0NTU2NjYzMDYsMjAyNjIzLjczODc4NjI0Mjg0LDI1MzcuMDIzODQ3MDIyODI5NgorMTUsVHVlIDggRmViIDExLDExMTEyNi42NDIwOTQxMTIyLDk5MjE5Ljg2NjQ0OTg3NTY2LDU3NzU0LjAzODIxMzEyNzgyNCwxMTkzOTIuNzY3NDI5ODcwOTUsMTIwMzQ2LjcxMDQ1NTc3MDgyLDE5NDU0NTEuNzQ4MTg2NDc1LDIxMTQxMjAuMzk5MzA5NTE0LDE3MzI3MjMuNTgzMjI4ODMxLDE1MDUwNDUuMjg5NDUxOTQxNCwxODgxNjg1LjU3MTYxMzUxMDQsMzgyMTE1LjAwMzc0MzY4NzUsMjIzMzc3My43NzgwOTkwMDY1LDQ0MjA3Ni43MDYzOTMzODI4LDExNzM1NDMuNDk3MzQ2NTM0NCwxMDQ4OTMzLjk4MzQ1MjA4OTgsMjQwNzkxOS43ODcwNDYyNDEsMTc0NDQ0Mi44MDkwNzk1ODE5LDQ5MDYwMi4wMTQzMDY1OTg3LDE0Mjc4NzQuNTc1MTI4OTM2Miw5NTA5MjQuNTI4NzIxNjE1MiwxNDA0ODEzLjg1OTI1NjQ4MDgsMTU2MDAxMC4xODM1NDc0OTU2LDEzODc3NzAuNTU0MjI4MDE2MiwzMTYzMzkyLjk1MTU2NTUwNjQsMjAxNzM1LjAzNTQ5NjEyODc1LDI1MjUuODk2NTE1ODc0Njk4CisxNixXZWQgOSBGZWIgMTEsMTEwNjM3LjY0ODUyODIxMDI1LDk4NzgzLjI2NjU5MDU2NzgzLDU3NDk5LjkwMTU1ODIzNjc1LDExODg2Ny40MDAyMDkyOTkzOCwxMTk4MTcuMTQ1NTczOTI2MzksMTkzNjg5MS4xMjQyOTE4ODk2LDIxMDQ4MTcuNTc4MTkxODg0LDE3MjUwOTkuMDMyODI2NTI1OSwxNDk4NDIyLjU5Nzk5NzcxOTcsMTg3MzQwNS41Mzk3NDg2OTE3LDM4MDQzMy41NzI3Njc3ODMzLDIyMjM5NDQuNDQyOTg1NTk3LDQ0MDEzMS40MjQzMTcxMTUxLDExNjgzNzkuNTIyMTg1NDUxNiwxMDQ0MzE4LjMzMDkwMjAwNTcsMjM5NzMyNC4xNTI1NDQxNTI1LDE3MzY3NjYuNjkwMjUxMTA2Niw0ODg0NDMuMjA1MDA2NzQzNCwxNDIxNTkxLjQ2MDA1NDEzOTYsOTQ2NzQwLjE0OTgyMzQ0NDEsMTM5ODYzMi4yMTg4NzI4NDk0LDE1NTMxNDUuNjI4NTg0NjA3MywxMzgxNjYzLjkwOTk2MDAxOTksMzE0OTQ3Mi45ODgwODQzMzYzLDIwMDg0Ny4zMzUzNjg0NTc2LDI1MTQuNzgxNzQ1MTg0OTU3MworMTcsVGh1IDEwIEZlYiAxMSwxMTAxNDkuMjA5NjYwMjkwOTIsOTgzNDcuMTYxOTk1NTcwMzQsNTcyNDYuMDUzMTg3NDg2MDIsMTE4MzQyLjYyODk0Nzc3MDQzLDExOTI4OC4xODE0MTI4MTE0NSwxOTI4MzQwLjIxMTI4MzM2NzgsMjA5NTUyNS4zMDk4ODQwNzg4LDE3MTc0ODMuMTMxNDU5NzUzLDE0OTE4MDcuNDE5MTAzNjczMiwxODY1MTM0LjkwMDQ3NTcwMTgsMzc4NzU0LjA0OTE1MTA2NTkzLDIyMTQxMjYuMjU3OTQxOTE5LDQzODE4OC4zNDg5MDM5MTczNiwxMTYzMjIxLjQwNDg2NTQ2MSwxMDM5NzA3LjkxNDE5NDE0MjIsMjM4Njc0MC41MzczNzYyNDg3LDE3MjkwOTkuMjc4OTU1NjY1NCw0ODYyODYuODQ0NTg4MTE0NywxNDE1MzE1LjQ3MjMzNTQwNTYsOTQyNTYwLjUxNzU0NTA1NTIsMTM5MjQ1Ny41OTA3MzU3Nzc1LDE1NDYyODguODYwNTQzNzg3LDEzNzU1NjQuMTkyODY1NDkyLDMxMzU1NjguODE0OTQ1MjA2NSwxOTk5NjAuNjQyMjE4MTg3MjIsMjUwMy42Nzk1ODI3MjAxNjkKKzE4LEZyaSAxMSBGZWIgMTEsMTA5NjYxLjMyNzU4MTczNDU0LDk3OTExLjU1NDUzMjE4MDQ1LDU2OTkyLjQ5NDE4Nzc5NDY0LDExNzgxOC40NTU4OTIyMzEyMSwxMTg3NTkuODIwMjM3MzI2MTIsMTkxOTc5OS4wNDU3NzM5MDc4LDIwODYyNDMuNjM0MTczNDA2LDE3MDk4NzUuOTExNzM4MDEwOCwxNDg1MTk5Ljc4MTA5NDQ0MiwxODU2ODczLjY4OTIwNzQ3MjgsMzc3MDc2LjQ0MDA4NDg2MDU0LDIyMDQzMTkuMjY1MDA3MTMxLDQzNjI0Ny40ODg0NzM1ODE1LDExNTgwNjkuMTY3NDcyNDA3NywxMDM1MTAyLjc1MzA2OTIxOTQsMjM3NjE2OC45ODY4NTkwODEsMTcyMTQ0MC42MDgwMjMzMDk4LDQ4NDEzMi45NDIyODM3NDA4LDE0MDkwNDYuNjM4ODQ1MDM3Nyw5MzgzODUuNjQ5NzgyNjUxLDEzODYyOTAuMDAxMjgzNTcwNCwxNTM5NDM5LjkwODc4NDEwMjksMTM2OTQ3MS40MjkwNjE5ODY3LDMxMjE2ODAuNDkxNjgyNTE2LDE5OTA3NC45NTk4NDE5MjkxNCwyNDkyLjU5MDA3NjAxNzE4MDgKKzE5LFNhdCAxMiBGZWIgMTEsMTA5MTc0LjAwNDM3MzgyODI0LDk3NDc2LjQ0NjA1ODY4MzcxLDU2NzM5LjIyNTY0MDgzNjA0LDExNzI5NC44ODMyNzg3ODQ4NCwxMTgyMzIuMDY0MzAxNDM5ODUsMTkxMTI2Ny42NjQxOTk4MDkzLDIwNzY5NzIuNTkwNjU1MTU0OCwxNzAyMjc3LjQwNjExMzQyMDQsMTQ3ODU5OS43MTIxNTc5NjgyLDE4NDg2MjEuOTQxMTg2MDMsMzc1NDAwLjc1MjcyNTc4NjA2LDIxOTQ1MjMuNTA2MDE3NTA2Niw0MzQzMDguODUxMzA1NzQ3MSwxMTUyOTIyLjgzMTk4NTU0OCwxMDMwNTAyLjg2NzE3MjY4NjIsMjM2NTYwOS41NDYwOTA0OTY3LDE3MTM3OTAuNzEwMTI1NjUsNDgxOTgxLjUwNzI4MjA5MDEsMTQwMjc4NC45ODYzMjU2NTAyLDkzNDIxNS41NjQzNDYwNjQ2LDEzODAxMjkuNDc2ODI2OTM5LDE1MzI1OTguODAyNTIyOTMyNiwxMzYzMzg1LjY0NDU0MTAxMTcsMzEwNzgwOC4wNzc1NDMzNDQsMTk4MTkwLjI5MjAxNzk3MTk4LDI0ODEuNTEzMjcyMzgzNDIyNgorMjAsU3VuIDEzIEZlYiAxMSwxMDg2ODcuMjQyMTA3Nzc4ODYsOTcwNDEuODM4NDI0MzY1NDEsNTY0ODYuMjQ4NjIzMDQ0NzksMTE2NzcxLjkxMzMzMjcwNDI4LDExNzcwNC45MTU4NDgyMDU0OSwxOTAyNzQ2LjEwMjgyMDkwMDcsMjA2NzcxMi4yMTg3MzI4NDMsMTY5NDY4Ny42NDY4ODA5MjgsMTQ3MjAwNy4yNDAzNDU2NzIsMTg0MDM3OS42OTE0ODI3MTExLDM3MzcyNi45OTQxOTU3OTk4NywyMTg0NzM5LjAyMjYwNjY5NCw0MzIzNzIuNDQ1NjM5OTUzMjUsMTE0Nzc4Mi40MjAyNzc2ODYzLDEwMjU5MDguMjc2MDU0ODQzLDIzNTUwNjIuMjU5OTQ5OTIyNiwxNzA2MTQ5LjYxNzc3NjA1ODQsNDc5ODMyLjU0ODcyNzEyODcsMTM5NjUzMC41NDEzOTAzMzU0LDkzMDA1MC4yNzg5NTg4NzEzLDEzNzM5NzYuMDQzNTQ5MTY0NCwxNTI1NzY1LjU3MDgzNjE0NiwxMzU3MzA2Ljg2NTE2ODE4OTksMzA5Mzk1MS42MzE0ODc4MTk0LDE5NzMwNi42NDI1MDYzMDUwNCwyNDcwLjQ0OTIxODg5NzIwMTcKKzIxLE1vbiAxNCBGZWIgMTEsMTA4MjAxLjA0Mjg0NDcyNTk4LDk2NjA3LjczMzQ2OTUyMjI3LDU2MjMzLjU2NDIwNTYyMzM2LDExNjI0OS41NDgyNjg0NDY0NSwxMTcxNzguMzc3MTA5NzczMzYsMTg5NDIzNC4zOTc3MjA3NjcsMjA1ODQ2Mi41NTc2MTg0NjQ2LDE2ODcxMDYuNjY2MTc4NTA4LDE0NjU0MjIuMzkzNTcyNjI3LDE4MzIxNDYuOTc0OTk4Mzg3NSwzNzIwNTUuMTcxNTgyMjQyNTMsMjE3NDk2NS44NTYyMDU5NzgsNDMwNDM4LjI3OTY3NTY4OTksMTE0MjY0Ny45NTQxMTUzMTMsMTAyMTMxOC45OTkxNzA5NjQ3LDIzNDQ1MjcuMTczMDk4NjQ0NywxNjk4NTE3LjM2MzMyOTg3MzQsNDc3Njg2LjA3NTcxODM3NzksMTM5MDI4My4zMzA1MjI4MzA4LDkyNTg4OS44MTEyNTg0OTkzLDEzNjc4MjkuNzI3NTA2MjYxNiwxNTE4OTQwLjI0MjY1ODI4NywxMzUxMjM1LjExNjY4MzQyMywzMDgwMTExLjIxMjE4OTQ5MDQsMTk2NDI0LjAxNTA0ODY0MTk0LDI0NTkuMzk3OTYyNDA3OTk2NgorMjIsVHVlIDE1IEZlYiAxMSwxMDc3MTUuNDA4NjM1NzU0OTcsOTYxNzQuMTMzMDI1NDc0MDUsNTU5ODEuMTczNDU0NTQ4OTE2LDExNTcyNy43OTAyODk2NjYxNSwxMTY2NTIuNDUwMzA3NDA1MzQsMTg4NTczMi41ODQ4MDY5NzcsMjA0OTIyMy42NDYzMzI3MzgyLDE2Nzk1MzQuNDk1OTg3MzY2LDE0NTg4NDUuMTk5NjE3NzM3NywxODIzOTIzLjgyNjQ2MzY4NDIsMzcwMzg1LjI5MTkzNzg4MjY2LDIxNjUyMDQuMDQ4MDQ0NTQyLDQyODUwNi4zNjE1NzI0NTAxLDExMzc1MTkuNDU1MTU4NzQxNCwxMDE2NzM1LjA1NTg4MTQyMzMsMjMzNDAwNC4zMjk5ODAwOTI2LDE2OTA4OTMuOTc4OTg0NjA0Niw0NzU1NDIuMDk3MzEwOTcxMzUsMTM4NDA0My4zODAwNzc2ODY0LDkyMTczNC4xNzg3OTYzNDE4LDEzNjE2OTAuNTU0NjI3MTQ0MiwxNTEyMTIyLjg0Njc4Mjc1OCwxMzQ1MTcwLjQyNDcwMTA1MzYsMzA2NjI4Ni44NzgwMzU2OTcsMTk1NTQyLjQxMzM2ODQ0NDIsMjQ0OC4zNTk1NDk1MzY3NTU0CisyMyxXZWQgMTYgRmViIDExLDEwNzIzMC4zNDE1MjE5MTAwNCw5NTc0MS4wMzg5MTQ1NzUyNCw1NTcyOS4wNzc0MzA1ODAxLDExNTIwNi42NDE1ODkyMzAxMywxMTYxMjcuMTM3NjUxNDg5MSwxODc3MjQwLjY5OTgxMTMxNDIsMjAzOTk5NS41MjM3MDUzNTU0LDE2NzE5NzEuMTY4MTMyMTQyNiwxNDUyMjc1LjY4NjEyMzkxNjIsMTgxNTcxMC4yODA0MzkyMDE1LDM2ODcxNy4zNjIyODA5NjE5LDIxNTU0NTMuNjM5MTQ5NzMwNiw0MjY1NzYuNjk5NDQ5NzgxOSwxMTMyMzk2Ljk0NDk2MjI0NjMsMTAxMjE1Ni40NjU0NTE4MTE4LDIzMjM0OTMuNzc0ODIwMTIxLDE2ODMyNzkuNDk2NzgwMTM3OCw0NzM0MDAuNjIyNTE1NzEzMywxMzc3ODEwLjcxNjI4MDQzMjcsOTE3NTgzLjM5OTAzNzg2ODYsMTM1NTU1OC41NTA3MTM3OTEsMTUwNTMxMy40MTE4NjIwMDEzLDEzMzkxMTIuODE0NzEwMDI4NywzMDUyNDc4LjY4NzEyNzk0MiwxOTQ2NjEuODQxMTcwOTQ1MDYsMjQzNy4zMzQwMjY2NzYxOTIKKzI0LFRodSAxNyBGZWIgMTEsMTA2NzQ1Ljg0MzUzNDIwNzQyLDk1MzA4LjQ1Mjk1MDIyNjc4LDU1NDc3LjI3NzE4OTI2Mzg2LDExNDY4Ni4xMDQzNDkyMzExOSwxMTU2MDIuNDQxMzQxNTUyMjcsMTg2ODc1OC43NzgyOTAwMDUsMjAzMDc3OC4yMjgzNzUyMzA1LDE2NjQ0MTYuNzE0MjgxMTE4NSwxNDQ1NzEzLjg4MDU5ODI1OTksMTgwNzUwNi4zNzEzMTU3Mzc1LDM2NzA1MS4zODk1OTUyMzk5LDIxNDU3MTQuNjcwMzQ3MzE0Myw0MjQ2NDkuMzAxMzg3MzQwNjUsMTEyNzI4MC40NDQ5NzQyMDI0LDEwMDc1ODMuMjQ3MDUzMDY3OCwyMzEyOTk1LjU1MTYyNzI5NTYsMTY3NTY3My45NDg1OTg5NDEsNDcxMjYxLjY2MDI5OTEzNjEsMTM3MTU4NS4zNjUyMjc3NDk4LDkxMzQzNy40ODkzNjI3Mzg3LDEzNDk0MzMuNzQxNDQxNDEwNywxNDk4NTExLjk2NjQwNzY4NTgsMTMzMzA2Mi4zMTIwNzQwNjMsMzAzODY4Ni42OTcyODIyNjU0LDE5Mzc4Mi4zMDIxNDMxNzMzNSwyNDI2LjMyMTQzOTk5MTA4NDQKKzI1LEZyaSAxOCBGZWIgMTEsMTA2MjYxLjkxNjY5MzY0ODQ3LDk0ODc2LjM3NjkzNjg4NzgxLDU1MjI1Ljc3Mzc4MDk0MjI5LDExNDE2Ni4xODA3NDEwMDIzMywxMTUwNzguMzYzNTY2Mjc2NzIsMTg2MDI4Ni44NTU2MjM5NDksMjAyMTU3MS43OTg3OTA3NTEsMTY1Njg3MS4xNjU5NDY0MTk0LDE0MzkxNTkuODEwNDEyMjMsMTc5OTMxMi4xMzMzMTQ1MTA2LDM2NTM4Ny4zODA4MzAwMzk4LDIxMzU5ODcuMTgyMjYxNzUzLDQyMjcyNC4xNzU0MjQ5NDEwNiwxMTIyMTY5Ljk3NjUzNzIyMzQsMTAwMzAxNS40MTk3NjE1OTc5LDIzMDI1MDkuNzA0MTkzMTc3NiwxNjY4MDc3LjM2NjE2NjI3MTcsNDY5MTI1LjIxOTU4MzU1ODgsMTM2NTM2Ny4zNTI4ODc2MzU4LDkwOTI5Ni40NjcwNjQ5MTI0LDEzNDMzMTYuMTUyMzU4NjA4MywxNDkxNzE4LjUzODc5MDg4OTgsMTMyNzAxOC45NDIwMzE4MDQ3LDMwMjQ5MTAuOTY2MDI5NjE4NCwxOTI5MDMuNzk5OTUzOTc3MjMsMjQxNS4zMjE4MzU0MTg1NzM4CisyNixTYXQgMTkgRmViIDExLDEwNTc3OC41NjMwMTEyMzI4Nyw5NDQ0NC44MTI2NzAwODc0Niw1NDk3NC41NjgyNTA3NTk0OCwxMTM2NDYuODcyOTI1MTMwOTEsMTE0NTU0LjkwNjUwMzUxMjgsMTg1MTgyNC45NjcwMTg5NTE3LDIwMTIzNzYuMjczMjEwMDI4NCwxNjQ5MzM0LjU1NDQ4NDIyMTksMTQzMjYxMy41MDI4MDE4MzAyLDE3OTExMjcuNjAwNDg3MzgzLDM2MzcyNS4zNDI5MDAyOTM0LDIxMjYyNzEuMjE1MzE2NDYyLDQyMDgwMS4zMjk1NjI2MSwxMTE3MDY1LjU2MDg4ODMwMTYsOTk4NDUzLjAwMjU1OTQwMiwyMjkyMDM2LjI3NjA5MjYxLDE2NjA0ODkuNzgxMDUwMzgyNCw0NjY5OTEuMzA5MjQ3MTQ0OCwxMzU5MTU2LjcwNTA5OTU3Nyw5MDUxNjAuMzQ5MzUyNzY1MSwxMzM3MjA1LjgwODg4NzU1MjcsMTQ4NDkzMy4xNTcyNDIyODc0LDEzMjA5ODIuNzI5Njk2OTk4NiwzMDExMTUxLjU1MDYxNjIzOTcsMTkyMDI2LjMzODI1NDA0ODI5LDI0MDQuMzM1MjU4NjY4NDY1NQorMjcsU3VuIDIwIEZlYiAxMSwxMDUyOTUuNzg0NDg3OTcxODksOTQwMTMuNzYxOTM2NDM2NjEsNTQ3MjMuNjYxNjM4NjY4NCwxMTMxMjguMTgzMDUxNDcyOSwxMTQwMzIuMDcyMzIwMjkzNzIsMTg0MzM3My4xNDc1MDU5NTM3LDIwMDMxOTEuNjg5NzAxMTUwNiwxNjQxODA2LjkxMTA5NDk1OTQsMTQyNjA3NC45ODQ4Njc3ODU2LDE3ODI5NTIuODA2NzE3MDg1MiwzNjIwNjUuMjgyNjg2NTg2OSwyMTE2NTY2LjgwOTczNDA3NzcsNDE4ODgwLjc3MTc2MDYzOTEsMTExMTk2Ny4yMTkxNTg5NDY4LDk5Mzg5Ni4wMTQzMzQxOTg3LDIyODE1NzUuMzEwNjg0MDAzNCwxNjUyOTExLjIyNDY2MjczMDIsNDY0ODU5LjkzODEyMzk2MDc1LDEzNTI5NTMuNDQ3NTc0NzE3Nyw5MDEwMjkuMTUzMzQ5MTk5NCwxMzMxMTAyLjczNjMyNDE0MzEsMTQ3ODE1NS44NDk4NTIzMzM4LDEzMTQ5NTMuNzAwMDU4NjUyNiwyOTk3NDA4LjUwODAwNDAzMTYsMTkxMTQ5LjkyMDY3NTk0NTQ0LDIzOTMuMzYxNzU1MjIzNTI4MgorMjgsTW9uIDIxIEZlYiAxMSwxMDQ4MTMuNTgzMTE0OTAxNjYsOTM1ODMuMjI2NTEzNjM5ODIsNTQ0NzMuMDU0OTc5NDM3Nzk1LDExMjYxMC4xMTMyNTkxNjcwOCwxMTM1MDkuODYzMTcyODQ5OTIsMTgzNDkzMS40MzE5NDEyNjU1LDE5OTQwMTguMDg2MTQyNDMzMywxNjM0Mjg4LjI2NjgyMzUyOTUsMTQxOTU0NC4yODM1NzU3MjI3LDE3NzQ3ODcuNzg1NzE3NDM5OCwzNjA0MDcuMjA3MDM1MjA2MiwyMTA2ODc0LjAwNTUzNjcyNCw0MTY5NjIuNTA5OTM5NjM3NCwxMTA2ODc0Ljk3MjM3NTMyNzUsOTg5MzQ0LjQ3Mzg3OTU0OTksMjI3MTEyNi44NTExMDk2MjUzLDE2NDUzNDEuNzI4MjU4MTg0LDQ2MjczMS4xMTUwMDQwMzQ5NSwxMzQ2NzU3LjYwNTg5NjAzMDYsODk2OTAyLjg5NjA5MTc1OTgsMTMyNTAwNi45NTk4MzgxNzc4LDE0NzEzODYuNjQ0NTcxNDUxNywxMzA4OTMxLjg3Nzk4MTIwMjcsMjk4MzY4MS44OTQ4NzA5MzgzLDE5MDI3NC41NTA4MzQxMTkxNywyMzgyLjQwMTM3MDMzOTc5NzMKKzI5LFR1ZSAyMiBGZWIgMTEsMTA0MzMxLjk2MDg3MzA5NjQ0LDkzMTUzLjIwODE3MDUwNzE4LDU0MjIyLjc0OTMwMjY1OTA5LDExMjA5Mi42NjU2NzY2NDk0MSwxMTI5ODguMjgxMjA2NjIzNDUsMTgyNjQ5OS44NTUwMDY3OTg2LDE5ODQ4NTUuNTAwMjIyNjc0MywxNjI2Nzc4LjY1MjU1OTUwMTgsMTQxMzAyMS40MjU3NTYzNDk3LDE3NjY2MzIuNTcxMDMzNTg4LDM1ODc1MS4xMjI3NTgxODMsMjA5NzE5Mi44NDI1NDYyODA1LDQxNTA0Ni41NTE5ODA1ODQzNCwxMTAxNzg4Ljg0MTQ1ODQxMSw5ODQ3OTguMzk5ODk0OTg2OSwyMjYwNjkwLjk0MDI5NTg4NywxNjM3NzgxLjMyMjkzNTIzMzYsNDYwNjA0Ljg0ODYzMzQxNjEsMTM0MDU2OS4yMDU1MTg0ODc2LDg5Mjc4MS41OTQ1MzI3NDU1LDEzMTg5MTguNTA0NDczNTIxNCwxNDY0NjI1LjU2OTIxMDIxOCwxMzAyOTE3LjI4ODIwNDY3OTcsMjk2OTk3MS43Njc2MTEzMjQzLDE4OTQwMC4yMzIzMjQ5MzU1OCwyMzcxLjQ1NDE0OTA0Njg3NTUKKzMwLFdlZCAyMyBGZWIgMTEsMTAzODUwLjkxOTczMzY4MTk5LDkyNzIzLjcwODY2Njk2NjIsNTM5NzIuNzQ1NjMyNzUzMzYsMTExNTc1Ljg0MjQyMTY2NzMyLDExMjQ2Ny4zMjg1NTYyODI0MywxODE4MDc4LjQ1MTIxMDMwMDQsMTk3NTcwMy45Njk0NDE0MDY3LDE2MTkyNzguMDk5MDM3MzI1LDE0MDY1MDYuNDM4MTA1NjM3LDE3NTg0ODcuMTk2MDQyMjE0NSwzNTcwOTcuMDM2NjMzMzQwNCwyMDg3NTIzLjM2MDM4NDY1MDUsNDEzMTMyLjkwNTcyNDg4MywxMDk2NzA4Ljg0NzIyNDEwNCw5ODAyNTcuODEwOTg2MTM2MywyMjUwMjY3LjYyMDk1MzYzMywxNjMwMjMwLjAzOTYzNjE5OTgsNDU4NDgxLjE0NzcxNDIzMjQsMTMzNDM4OC4yNzE3NjkyMzIxLDg4ODY2NS4yNjU1MzkzMjU3LDEzMTI4MzcuMzk1MTQ4MjczOCwxNDU3ODcyLjY1MTQzOTU1MTUsMTI5NjkwOS45NTUzNDQ4NzU2LDI5NTYyNzguMTgyMzM2MzU1LDE4ODUyNi45Njg3MjY3MDA2NCwyMzYwLjUyMDEzNjE0ODIzNzcKKzMxLFRodSAyNCBGZWIgMTEsMTAzMzcwLjQ2MTY1Nzg0ODk4LDkyMjk0LjcyOTc1NDA3Mzc5LDUzNzIzLjA0NDk4ODk3ODI1LDExMTA1OS42NDU2MDEyOTQwOSwxMTE5NDcuMDA3MzQ1NzM1NiwxODA5NjY3LjI1NDg4NTU4NzgsMTk2NjU2My41MzExMDkxNTM4LDE2MTE3ODYuNjM2ODM2NTM2NSwxMzk5OTk5LjM0NzE4NDk5ODcsMTc1MDM1MS42OTM5NTE3NzUsMzU1NDQ0Ljk1NTQwNDMzOTIsMjA3Nzg2NS41OTg0NzQwMyw0MTEyMjEuNTc4OTc0NDEzMiwxMDkxNjM1LjAxMDM4MzM5NDMsOTc1NzIyLjcyNTY2NDg0NjQsMjIzOTg1Ni45MzU1Nzg0MzEsMTYyMjY4Ny45MDkxNDc0NDM1LDQ1NjM2MC4wMjA5MDQ3NTAyLDEzMjgyMTQuODI5ODQ3NzUsODg0NTUzLjkyNTg5MzY1MywxMzA2NzYzLjY1NjY1NDk0MDIsMTQ1MTEyNy45MTg3OTA5MDA0LDEyOTA5MDkuOTAzODkzNTEwMywyOTQyNjAxLjE5NDg3NDM3NywxODc2NTQuNzYzNTk5Njg0NDYsMjM0OS41OTkzNzYyMjE1MzQ0CiszMixGcmkgMjUgRmViIDExLDEwMjg5MC41ODg1OTY4NjYzNSw5MTg2Ni4yNzMxNzQwMjgyMyw1MzQ3My42NDgzODU0MzQ5NjQsMTEwNTQ0LjA3NzMxMTk0MzMsMTExNDI3LjMxOTY4ODE0Njc3LDE4MDEyNjYuMzAwMTkyNzgyNCwxOTU3NDM0LjIyMjM0NzY4NDIsMTYwNDMwNC4yOTYzODE5NzA5LDEzOTM1MDAuMTc5NDIxNDc0LDE3NDIyMjYuMDk3ODAyNzIyOCwzNTM3OTQuODg1NzgwNzIzOCwyMDY4MjE5LjU5NjAzNzE3Nyw0MDkzMTIuNTc5NDkxNTg0ODUsMTA4NjU2Ny4zNTE1NDI0OTI2LDk3MTE5My4xNjIzNDkzMTM0LDIyMjk0NTguOTI2NDUwODYzNSwxNjE1MTU0Ljk2MjA5OTU3Nyw0NTQyNDEuNDc2ODE5NDMzODUsMTMyMjA0OC45MDQ4MjYwNDI3LDg4MDQ0Ny41OTIyOTI5NzkxLDEzMDA2OTcuMzEzNjYwNTk5NSwxNDQ0MzkxLjM5ODY1NjQzMDcsMTI4NDkxNy4xNTgyMTg0MDA2LDI5Mjg5NDAuODYwNzcxMzAwMywxODY3ODMuNjIwNDg2MTQ1NzUsMjMzOC42OTE5MTM2MTg4OTc2CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FnaW5nX0ZEX1JlZmVyZW5jZS9Ob0Rpc2Vhc2UvaHVtYW4ydG8tL0Rpc2Vhc2UgRGVhdGhzXzIuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BZ2luZ19GRF9SZWZlcmVuY2UvTm9EaXNlYXNlL2h1bWFuMnRvLS9EaXNlYXNlIERlYXRoc18yLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YWQxYTViCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BZ2luZ19GRF9SZWZlcmVuY2UvTm9EaXNlYXNlL2h1bWFuMnRvLS9EaXNlYXNlIERlYXRoc18yLmNzdgpAQCAtMCwwICsxLDMzIEBACitpdGVyYXRpb24sdGltZSxFRy1GUkctRzIxMDAwMSxFRy1GUkctRzIxMDAwMixFRy1GUkctRzIxMDAwMyxFRy1GUkctRzIxMDAwNCxFRy1GUkctRzIxMDAwNSxFRy1MT0UtRzI0MDAwMSxFRy1MT0UtRzI0MDAwMixFRy1MT0UtRzI0MDAwMyxFRy1MT0UtRzI0MDAwNCxFRy1MT0UtRzI0MDAwNSxFRy1MT0UtRzI0MDAwNixFRy1MT0UtRzI0MDAwNyxFRy1MT0UtRzI0MDAwOCxFRy1MT0UtRzI0MDAwOSxFRy1VUEUtRzI5MDAwMSxFRy1VUEUtRzI5MDAwMixFRy1VUEUtRzI5MDAwMyxFRy1VUEUtRzI5MDAwNCxFRy1VUEUtRzI5MDAwNSxFRy1VUEUtRzI5MDAwNixFRy1VUEUtRzI5MDAwNyxFRy1VUEUtRzI5MDAwOCxFRy1VUkctRzMwMDAwMSxFRy1VUkctRzMwMDAwMixFRy1VUkctRzMwMDAwMyxFRy1VUkctRzMwMDAwNAorMSxUdWUgMjUgSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzIsV2VkIDI2IEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCiszLFRodSAyNyBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorNCxGcmkgMjggSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzUsU2F0IDI5IEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCis2LFN1biAzMCBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorNyxNb24gMzEgSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzgsVHVlIDEgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzksV2VkIDIgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzEwLFRodSAzIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxMSxGcmkgNCBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTIsU2F0IDUgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzEzLFN1biA2IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxNCxNb24gNyBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTUsVHVlIDggRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzE2LFdlZCA5IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxNyxUaHUgMTAgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzE4LEZyaSAxMSBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTksU2F0IDEyIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyMCxTdW4gMTMgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzIxLE1vbiAxNCBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjIsVHVlIDE1IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyMyxXZWQgMTYgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzI0LFRodSAxNyBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjUsRnJpIDE4IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyNixTYXQgMTkgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzI3LFN1biAyMCBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjgsTW9uIDIxIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyOSxUdWUgMjIgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzMwLFdlZCAyMyBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMzEsVGh1IDI0IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCiszMixGcmkgMjUgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWdpbmdfRkRfUmVmZXJlbmNlL05vRGlzZWFzZS9odW1hbjJ0by0vSV8yLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWdpbmdfRkRfUmVmZXJlbmNlL05vRGlzZWFzZS9odW1hbjJ0by0vSV8yLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YWQxYTViCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BZ2luZ19GRF9SZWZlcmVuY2UvTm9EaXNlYXNlL2h1bWFuMnRvLS9JXzIuY3N2CkBAIC0wLDAgKzEsMzMgQEAKK2l0ZXJhdGlvbix0aW1lLEVHLUZSRy1HMjEwMDAxLEVHLUZSRy1HMjEwMDAyLEVHLUZSRy1HMjEwMDAzLEVHLUZSRy1HMjEwMDA0LEVHLUZSRy1HMjEwMDA1LEVHLUxPRS1HMjQwMDAxLEVHLUxPRS1HMjQwMDAyLEVHLUxPRS1HMjQwMDAzLEVHLUxPRS1HMjQwMDA0LEVHLUxPRS1HMjQwMDA1LEVHLUxPRS1HMjQwMDA2LEVHLUxPRS1HMjQwMDA3LEVHLUxPRS1HMjQwMDA4LEVHLUxPRS1HMjQwMDA5LEVHLVVQRS1HMjkwMDAxLEVHLVVQRS1HMjkwMDAyLEVHLVVQRS1HMjkwMDAzLEVHLVVQRS1HMjkwMDA0LEVHLVVQRS1HMjkwMDA1LEVHLVVQRS1HMjkwMDA2LEVHLVVQRS1HMjkwMDA3LEVHLVVQRS1HMjkwMDA4LEVHLVVSRy1HMzAwMDAxLEVHLVVSRy1HMzAwMDAyLEVHLVVSRy1HMzAwMDAzLEVHLVVSRy1HMzAwMDA0CisxLFR1ZSAyNSBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMixXZWQgMjYgSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzMsVGh1IDI3IEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCis0LEZyaSAyOCBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorNSxTYXQgMjkgSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzYsU3VuIDMwIEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCis3LE1vbiAzMSBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorOCxUdWUgMSBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorOSxXZWQgMiBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTAsVGh1IDMgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzExLEZyaSA0IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxMixTYXQgNSBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTMsU3VuIDYgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzE0LE1vbiA3IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxNSxUdWUgOCBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTYsV2VkIDkgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzE3LFRodSAxMCBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTgsRnJpIDExIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxOSxTYXQgMTIgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzIwLFN1biAxMyBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjEsTW9uIDE0IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyMixUdWUgMTUgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzIzLFdlZCAxNiBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjQsVGh1IDE3IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyNSxGcmkgMTggRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzI2LFNhdCAxOSBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjcsU3VuIDIwIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyOCxNb24gMjEgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzI5LFR1ZSAyMiBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMzAsV2VkIDIzIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCiszMSxUaHUgMjQgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzMyLEZyaSAyNSBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BZ2luZ19GRF9SZWZlcmVuY2UvTm9EaXNlYXNlL2h1bWFuMnRvLS9JbmNpZGVuY2VfMi5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FnaW5nX0ZEX1JlZmVyZW5jZS9Ob0Rpc2Vhc2UvaHVtYW4ydG8tL0luY2lkZW5jZV8yLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YWQxYTViCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BZ2luZ19GRF9SZWZlcmVuY2UvTm9EaXNlYXNlL2h1bWFuMnRvLS9JbmNpZGVuY2VfMi5jc3YKQEAgLTAsMCArMSwzMyBAQAoraXRlcmF0aW9uLHRpbWUsRUctRlJHLUcyMTAwMDEsRUctRlJHLUcyMTAwMDIsRUctRlJHLUcyMTAwMDMsRUctRlJHLUcyMTAwMDQsRUctRlJHLUcyMTAwMDUsRUctTE9FLUcyNDAwMDEsRUctTE9FLUcyNDAwMDIsRUctTE9FLUcyNDAwMDMsRUctTE9FLUcyNDAwMDQsRUctTE9FLUcyNDAwMDUsRUctTE9FLUcyNDAwMDYsRUctTE9FLUcyNDAwMDcsRUctTE9FLUcyNDAwMDgsRUctTE9FLUcyNDAwMDksRUctVVBFLUcyOTAwMDEsRUctVVBFLUcyOTAwMDIsRUctVVBFLUcyOTAwMDMsRUctVVBFLUcyOTAwMDQsRUctVVBFLUcyOTAwMDUsRUctVVBFLUcyOTAwMDYsRUctVVBFLUcyOTAwMDcsRUctVVBFLUcyOTAwMDgsRUctVVJHLUczMDAwMDEsRUctVVJHLUczMDAwMDIsRUctVVJHLUczMDAwMDMsRUctVVJHLUczMDAwMDQKKzEsVHVlIDI1IEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyLFdlZCAyNiBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMyxUaHUgMjcgSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzQsRnJpIDI4IEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCis1LFNhdCAyOSBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorNixTdW4gMzAgSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzcsTW9uIDMxIEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCis4LFR1ZSAxIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCis5LFdlZCAyIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxMCxUaHUgMyBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTEsRnJpIDQgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzEyLFNhdCA1IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxMyxTdW4gNiBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTQsTW9uIDcgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzE1LFR1ZSA4IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxNixXZWQgOSBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTcsVGh1IDEwIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxOCxGcmkgMTEgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzE5LFNhdCAxMiBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjAsU3VuIDEzIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyMSxNb24gMTQgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzIyLFR1ZSAxNSBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjMsV2VkIDE2IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyNCxUaHUgMTcgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzI1LEZyaSAxOCBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjYsU2F0IDE5IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyNyxTdW4gMjAgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzI4LE1vbiAyMSBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjksVHVlIDIyIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCiszMCxXZWQgMjMgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzMxLFRodSAyNCBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMzIsRnJpIDI1IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FnaW5nX0ZEX1JlZmVyZW5jZS9Ob0Rpc2Vhc2UvaHVtYW4ydG8tL1BvcHVsYXRpb24gQ291bnRfMi5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FnaW5nX0ZEX1JlZmVyZW5jZS9Ob0Rpc2Vhc2UvaHVtYW4ydG8tL1BvcHVsYXRpb24gQ291bnRfMi5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzFmZDZiMwotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWdpbmdfRkRfUmVmZXJlbmNlL05vRGlzZWFzZS9odW1hbjJ0by0vUG9wdWxhdGlvbiBDb3VudF8yLmNzdgpAQCAtMCwwICsxLDMzIEBACitpdGVyYXRpb24sdGltZSxFRy1GUkctRzIxMDAwMSxFRy1GUkctRzIxMDAwMixFRy1GUkctRzIxMDAwMyxFRy1GUkctRzIxMDAwNCxFRy1GUkctRzIxMDAwNSxFRy1MT0UtRzI0MDAwMSxFRy1MT0UtRzI0MDAwMixFRy1MT0UtRzI0MDAwMyxFRy1MT0UtRzI0MDAwNCxFRy1MT0UtRzI0MDAwNSxFRy1MT0UtRzI0MDAwNixFRy1MT0UtRzI0MDAwNyxFRy1MT0UtRzI0MDAwOCxFRy1MT0UtRzI0MDAwOSxFRy1VUEUtRzI5MDAwMSxFRy1VUEUtRzI5MDAwMixFRy1VUEUtRzI5MDAwMyxFRy1VUEUtRzI5MDAwNCxFRy1VUEUtRzI5MDAwNSxFRy1VUEUtRzI5MDAwNixFRy1VUEUtRzI5MDAwNyxFRy1VUEUtRzI5MDAwOCxFRy1VUkctRzMwMDAwMSxFRy1VUkctRzMwMDAwMixFRy1VUkctRzMwMDAwMyxFRy1VUkctRzMwMDAwNAorMSxUdWUgMjUgSmFuIDExLDU5MDE0LjgsNTI2OTEuNjAwMDAwMDAwMDA2LDMwNjcwLjgwMDAwMDAwMDAwMyw2MzQwNC42MDAwMDAwMDAwMDYsNjM5MTEuMjAwMDAwMDAwMDA0LDEwMzMxNDkuNjAwMDAwMDAwMSwxMTIyNzIyLjYsOTIwMTc4LjQsNzk5MjY3LjgsOTk5Mjg2LjAsMjAyOTI1LjYsMTE4NjI2NS42LDIzNDc2OC44MDAwMDAwMDAwMiw2MjMyMjAuOCw1NTcwNDUuOCwxMjc4NzQ3LjQwMDAwMDAwMDEsOTI2NDAyLjAsMjYwNTM4LjYsNzU4Mjg1LjYwMDAwMDAwMDEsNTA0OTk3LjAsNzQ2MDM5LjAsODI4NDU3LjQsNzM2OTg4LjAsMTY3OTk0OC4yMDAwMDAwMDAyLDEwNzEzMy4yMDAwMDAwMDAwMSwxMzQxLjQKKzIsV2VkIDI2IEphbiAxMSw1OTMzNy45NTQwNjY2NjAxNCw1Mjk4MC4xMjkzOTk3MjM5NiwzMDgzOC43NDc1OTUzMTAzMjgsNjM3NTEuNzkxNzk0ODU0MTY1LDY0MjYxLjE2NTg0MjIxNDY2LDEwMzg4MDYuOTM1MDE5NDkxNywxMTI4ODcwLjQyMDEwNDgwODQsOTI1MjE3LjEyNTc0MzU5MDEsODAzNjQ0LjQ0MTc5MDIwMzYsMTAwNDc1Ny45MDQyNDUzMTcxLDIwNDAzNi43ODI4MzY2Njg5MiwxMTkyNzYxLjM2OTc1MjMxNywyMzYwNTQuMzUwMjc2Mjg1Myw2MjY2MzMuNDQxMTY3MDgzMyw1NjAwOTYuMDc5MTc3MTg4NywxMjg1NzQ5LjU4Mjg4NTMyODQsOTMxNDc0LjgwNTAxOTQ1NDIsMjYxOTY1LjI2MDkwNzI5NjgsNzYyNDM3LjgzMDg4NjY1Niw1MDc3NjIuMjY5NjMwNjg4Nyw3NTAxMjQuMTcwNzgzMjExNCw4MzI5OTMuODc4NjA5ODUxOCw3NDEwMjMuNjA5MTkwOTEwMSwxNjg5MTQ3LjI4MzgzMzM1LDEwNzcxOS44NDE0NzM5MDY4LDEzNDguNzQ1MjU2ODY4MDcyNAorMyxUaHUgMjcgSmFuIDExLDU5NjU5Ljc0ODY2OTI0NzUyLDUzMjY3LjQ0NDk5NjUxODIxNCwzMTAwNS45ODg2NTg1MTg4MzIsNjQwOTcuNTIzMDAyMjY2NzUsNjQ2MDkuNjU5NDI2OTU3NTE0LDEwNDQ0NDAuNDcwNDE5ODU0MywxMTM0OTkyLjM3NzE4ODE2NSw5MzAyMzQuNjU0MjcwOTY3OSw4MDgwMDIuNjcxNjU5MDE0MywxMDEwMjA2Ljc4ODk1MjkwMTMsMjA1MTQzLjI5MTA4MjE3MzU2LDExOTkyMjkuODEyNzA3NTYwMSwyMzczMzQuNDkyNDIxOTE1MTQsNjMwMDMxLjcyNTgyODkwMDIsNTYzMTMzLjUyNjI1NTQ0NjYsMTI5MjcyMi4zMDg1NjQxODYsOTM2NTI2LjI2OTQ1NTkzNzIsMjYzMzg1LjkyMDA1MTIwMDk2LDc2NjU3Mi41OTM5MTcyODExLDUxMDUxNS45MDYxNTc4NDUsNzU0MTkyLjE1NTgyMjg5MSw4Mzc1MTEuMjcyODg3MTEwNyw3NDUwNDIuMjQxMTM2OTkyNywxNjk4MzA3LjY2ODQwNDQ0NzQsMTA4MzA0LjAxNTAyODk3OTY3LDEzNTYuMDU5NjEzMjY1MjkzNAorNCxGcmkgMjggSmFuIDExLDU5OTgwLjE4NTI0MzM4ODM1LDUzNTUzLjU0ODA3MjE4NzM1LDMxMTcyLjUyMzkzNTc0MDExLDY0NDQxLjc5NTE2NDY1MjYxLDY0OTU2LjY4MjMwODk2NzI2LDEwNTAwNTAuMjMxMzM0MDQ4LDExNDEwODguNDk4NTYyMDMyLDkzNTIzMS4wMDc5NjY4OTQ4LDgxMjM0Mi41MDkwNDk4NTY1LDEwMTU2MzIuNjc4NDMxOTI4MywyMDYyNDUuMTI5NjcyOTkyNjUsMTIwNTY3MC45NTc3MjM0NzMyLDIzODYwOS4yMzIxNDgwMDM0LDYzMzQxNS42NjkxNDYyNTk3LDU2NjE1OC4xNTQ3ODU3NzM1LDEyOTk2NjUuNjA4MTQ0MDc5Myw5NDE1NTYuNDE1ODQ1NjA5LDI2NDgwMC41ODM3Njk3MTY0NCw3NzA2ODkuOTA3NTM4MzQ0Myw1MTMyNTcuOTIxODY2MzAxMDQsNzU4MjQyLjk3MzI2NzU5MDQsODQyMDA5LjYwMjk4NTI4MjksNzQ5MDQzLjkxMzc2NjYxOTQsMTcwNzQyOS4zOTQ1ODA2Mjc2LDEwODg4NS43MjMyNzEzOTkyNiwxMzYzLjM0MzEwMTgyMzI5MDcKKzUsU2F0IDI5IEphbiAxMSw2MDI5OS4yNjUyMzA4MjUzNDUsNTM4MzguNDM5OTEzOTk3MTIsMzEzMzguMzU0MTc2MjY3NjE4LDY0Nzg0LjYwOTgzMDk5ODE0LDY1MzAyLjIzNjA0OTYwNjYyLDEwNTU2MzYuMjQzMDAyMTEzNCwxMTQ3MTU4LjgxMTY1NDczNDcsOTQwMjA2LjIwOTMxMTUwMzIsODE2NjYzLjk3MzQ4ODk5MzcsMTAyMTAzNS41OTcwOTUxNDQ0LDIwNzM0Mi4zMDM1NjY2MzcwNCwxMjEyMDg0LjgzMzc4MDc0OTUsMjM5ODc4LjU3NTE4OTk5NjIyLDYzNjc4NS4yODYzNDQ1NjM4LDU2OTE2OS45NzgzNzY5MDM3LDEzMDY1NzkuNTEyODY1MDQ5Myw5NDY1NjUuMjY2ODIwNjQ2LDI2NjIwOS4yNTg0Mjc4NTA1NSw3NzQ3ODkuNzkwMjc0OTA2Miw1MTU5ODguMzI5MDkzMjI5MjYsNzYyMjc2LjY0MTM0MzE4MzUsODQ2NDg4Ljg4OTE0MzczOTYsNzUzMDI4LjY0NTA4NDU0NjgsMTcxNjUxMi41MDM0MDMzNDM1LDEwOTQ2NC45Njg4MTg0NDk5MiwxMzcwLjU5NTc1NTMxMjcyMDMKKzYsU3VuIDMwIEphbiAxMSw2MDYxNi45OTAwNzkzODk2OTYsNTQxMjIuMTIxODE0NjQ5Mzg1LDMxNTAzLjQ4MDEzMjU1OTA0NSw2NTEyNS45Njg1NTY4MzEwMyw2NTY0Ni4zMjIyMTY4MzE4OSwxMDYxMTk4LjUzMDc3MDY3ODUsMTE1MzIwMy4zNDQwMTA0MjgsOTQ1MTYwLjI4MDg3OTg1ODYsODIwOTY3LjA4NDU4NTE0ODYsMTAyNjQxNS41Njk0NTgzOTAxLDIwODQzNC44MTc3NDE1NTI5OCwxMjE4NDcxLjQ2OTk4MjQ2NjcsMjQxMTQyLjUyNzMwNzU2MDUyLDY0MDE0MC41OTI3MTM1MTExLDU3MjE2OS4wMTA2OTUwNDA5LDEzMTM0NjQuMDU0MDk5MDYyNyw5NTE1NTIuODQ1MTA4Nzk5MywyNjc2MTEuOTUwNDE3NDg5ODYsNzc4ODcyLjI2MDczMDI1ODUsNTE4NzA3LjE0MDIyNzkwMTQsNzY2MjkzLjE3ODM1MjUxMTYsODUwOTQ5LjE1MTY4NzMyMjEsNzU2OTk2LjQ1MzE3MTU2NDYsMTcyNTU1Ny4wMzYwODczNjQyLDExMDA0MS43NTQyOTg0Njg3MywxMzc3LjgxNzYwNjY0MjYyNzcKKzcsTW9uIDMxIEphbiAxMSw2MDkzMy4zNjEyNDI5NzI5MSw1NDQwNC41OTUwNzIyNTY5OSwzMTY2Ny45MDI1NjAyMjE3MzMsNjU0NjUuODcyOTA0MTkwMTQsNjU5ODguOTQyMzg1MTYyNTMsMTA2NjczNy4xMjAwOTI0Njc5LDExNTkyMjIuMTIzMjg4NTYxMSw5NTAwOTMuMjQ1MzQxNTIxNSw4MjUyNTEuODYyMDI5MTIyLDEwMzE3NzIuNjIwMTQwMTI0NSwyMDk1MjIuNjc3MTk3MDI1NTQsMTIyNDgzMC44OTU1NTM1MjI1LDI0MjQwMS4wOTQyODQ0NzIsNjQzNDgxLjYwMzYwNjgsNTc1MTU1LjI2NTQ2MzU5MywxMzIwMzE5LjI2MzM0OTQwMzQsOTU2NTE5LjE3MzUzMjk1NDIsMjY5MDA4LjY2NjE1NzI3NjIsNzgyOTM3LjMzNzU4NTU2MjYsNTIxNDE0LjM2NzcxMTQ0ODQ2LDc3MDI5Mi42MDI2NzUwMjgzLDg1NTM5MC40MTEwMjU5NDc4LDc2MDk0Ny4zNTYxODQxNDU3LDE3MzQ1NjMuMDM0MDE5OTc2NCwxMTA2MTYuMDgyMzUwNzk0NDcsMTM4NS4wMDg2ODg4NTk4MDkxCis4LFR1ZSAxIEZlYiAxMSw2MTI0OC4zODAxODE0OTg4MDQsNTQ2ODUuODYwOTkwMzE4NzQ2LDMxODMxLjYyMjIxNzk5ODA4Nyw2NTgwNC4zMjQ0NDE1OTUzMSw2NjMzMC4wOTgxMzU2NTA4MywxMDcyMjUyLjAzNjUyNTgxMDgsMTE2NTIxNS4xNzcyNjMzNDQyLDk1NTAwNS4xMjU0NjAxMDk3LDgyOTUxOC4zMjU1OTM0MTMxLDEwMzcxMDYuNzczODYwOTUwMywyMTA2MDUuODg2OTUzMDgyMTcsMTIzMTE2My4xMzk4NDAwNzA2LDI0MzY1NC4yODE5Mjg1MDM2Miw2NDY4MDguMzM0NDQxODMyMiw1NzgxMjguNzU2NDYyOTA2OCwxMzI3MTQ1LjE3MjI1MDA2NDgsOTYxNDY0LjI3NTAxMDY4OTcsMjcwMzk5LjQxMjA5MjQ4MjcsNzg2OTg1LjAzOTU5OTQ4OTIsNTI0MTEwLjAyNDAzNjYyMDQ1LDc3NDI3NC45MzI3NjY0NDQ2LDg1OTgxMi42ODc2NTQyMTYsNzY0ODgxLjM3MjM1NDA5NSwxNzQzNTMwLjUzODc2MDE4NTUsMTExMTg3Ljk1NTYyNTcxNjc0LDEzOTIuMTY5MDM1MTQ4MTc0OAorOSxXZWQgMiBGZWIgMTEsNjE1NjIuMDQ4MzYwODk1NDcsNTQ5NjUuOTIwODc3Njk0NDEsMzE5OTQuNjM5ODY3NzUxMDIsNjYxNDEuMzI0NzQ0MDE3MzEsNjY2NjkuNzkxMDU1ODUxNDYsMTA3Nzc0My4zMDU3MzQxNTE3LDExNzExODIuNTMzODIzMjE1NCw5NTk4OTUuOTQ0MDkyODYxNyw4MzM3NjYuNDk1MTMxODQwMywxMDQyNDE4LjA1NTQ0MzEzOTQsMjExNjg0LjQ1MjA1MDM5NjMzLDEyMzc0NjguMjMyMzA4OTU4LDI0NDkwMi4wOTYwNzEzMTQyNCw2NTAxMjAuODAwNjk5NDE3Miw1ODEwODkuNDk3NTMwMDA0NiwxMzMzOTQxLjgxMjU2NTE0Miw5NjYzODguMTcyNTUzODM4NywyNzE3ODQuMTk0Njk0ODkwMSw3OTEwMTUuMzg1NjA3ODU4NCw1MjY3OTQuMTIxNzQ3NTQ2OCw3NzgyNDAuMTg3MTU4Mzc1Myw4NjQyMTYuMDAyMTUxMDE1LDc2ODc5OC41MTk5ODgyMDAyLDE3NTI0NTkuNTkyMDM3OTE3NiwxMTE3NTcuMzc2Nzg0NDI1MDQsMTM5OS4yOTg2Nzg4MjgxMTA3CisxMCxUaHUgMyBGZWIgMTEsNjE4NzQuMzY3MjUzMDY3Mjg1LDU1MjQ0Ljc3NjA0ODU3OTY5LDMyMTU2Ljk1NjI3NDQ0OTM5Niw2NjQ3Ni44NzUzOTI4NDc3NCw2NzAwOC4wMjI3Mzk3OTEyNywxMDgzMjEwLjk1MzQ4NTU1OTIsMTE3NzEyNC4yMjA5NzAzMDg0LDk2NDc2NS43MjQxOTAyMDA3LDgzNzk5Ni4zOTA1NzkxNjIyLDEwNDc3MDYuNDg5ODEwMTU5MywyMTI3NTguMzc3NTUwMTkxMzMsMTI0Mzc0Ni4yMDI1NDcxNjE2LDI0NjE0NC41NDI1NjgzMzcxNCw2NTM0MTkuMDE3OTIzNDc2OSw1ODQwMzcuNTAyNTU4MzE4OSwxMzQwNzA5LjIxNjE4ODIyNjQsOTcxMjkwLjg4OTI2ODA0ODcsMjczMTYzLjAyMDQ2MjY2MzU1LDc5NTAyOC4zOTQ1MjMyODAzLDUyOTQ2Ni42NzM0Mzk0OTY5LDc4MjE4OC4zODQ0NTc5ODQ0LDg2ODYwMC4zNzUxNzkxMjkxLDc3MjY5OC44MTc0Njc4ODIsMTc2MTM1MC4yMzU3NTMyMjM1LDExMjMyNC4zNDg0OTg5NTgwMywxNDA2LjM5NzY1MzM1NTg0NAorMTEsRnJpIDQgRmViIDExLDYyMTg1LjMzODMzNTg2Njk4LDU1NTIyLjQyNzgyMjQ4MTMsMzIzMTguNTcyMjA2MTUzNTI3LDY2ODEwLjk3Nzk3NTg2ODk4LDY3MzQ0Ljc5NDc4NzkzODk4LDEwODg2NTUuMDA1NjUyMjM3NSwxMTgzMDQwLjI2NjgxOTkyMDYsOTY5NjE0LjQ4ODc5NTI5NzksODQyMjA4LjAzMTk1MDY5ODQsMTA1Mjk3Mi4xMDE5ODYxOTk2LDIxMzgyNy42Njg1MzQxNDQxNSwxMjQ5OTk3LjA4MDI2MTIyNzIsMjQ3MzgxLjYyNzI5ODY2ODk2LDY1NjcwMy4wMDE3MjA3NDk3LDU4Njk3Mi43ODU0OTc0Mjk1LDEzNDc0NDcuNDE1MTQxNzk5LDk3NjE3Mi40NDgzNTIzNDI5LDI3NDUzNS44OTU5MjAyMjg3NCw3OTkwMjQuMDg1MzM0Nzk1OCw1MzIxMjcuNjkxNzU4NjQwNiw3ODYxMTkuNTQzMzQ3NjMyNSw4NzI5NjUuODI3NDg0ODQ2LDc3NjU4Mi4yODMyNDg4NDUxLDE3NzAyMDIuNTExOTc1NDgzMywxMTI4ODguODczNDUyMTUyNzcsMTQxMy40NjU5OTIzMjI4MDY5CisxMixTYXQgNSBGZWIgMTEsNjI0OTQuOTYzMDkzMDY3NzIsNTU3OTguODc3NTI0MTkyMDQsMzI0NzkuNDg4NDM0MDAwNjUsNjcxNDMuNjM0MDg3MjI0MjcsNjc2ODAuMTA4ODA3MTc0OTcsMTA5NDA3NS40ODgyMTAwMzcxLDExODg5MzAuNjk5NTk5OTgyMiw5NzQ0NDIuMjYxMDQzNjM4NSw4NDY0MDEuNDM5MzQxOTUyMiwxMDU4MjE0LjkxNzA5NTY5OTMsMjE0ODkyLjMzMDEwNDI4OTUyLDEyNTYyMjAuODk1Mjc2NzA3OCwyNDg2MTMuMzU2MTY0OTU4Niw2NTk5NzIuNzY3NzYwNDk2NSw1ODk4OTUuMzYwMzUyNzk5NiwxMzU0MTU2LjQ0MTU3NjYyNjksOTgxMDMyLjg3MzA5ODY4MjUsMjc1OTAyLjgyNzYxODE0ODkzLDgwMzAwMi40NzcxMDc1MTc1LDUzNDc3Ny4xODk0MDE4MDk4LDc5MDAzMy42ODI1ODQ1MjM3LDg3NzMxMi4zNzk4OTc1NjU1LDc4MDQ0OC45MzU4NjA3Mjk5LDE3NzkwMTYuNDYyOTQyNjEwNSwxMTM0NTAuOTU0MzM3NTk0MDEsMTQyMC41MDM3Mjk0NTUwMDIKKzEzLFN1biA2IEZlYiAxMSw2MjgwMy4yNDMwMTQzMzUyMSw1NjA3NC4xMjY0ODM3NjU4NzUsMzI2MzkuNzA1NzMyMTkwNDQzLDY3NDc0Ljg0NTMyNzM4NzcsNjgwMTMuOTY2NDEwNzYxMDMsMTA5OTQ3Mi40MjcyMzc5NjgsMTE5NDc5NS41NDc2NTA1MjYsOTc5MjQ5LjA2NDE2MjU4NTcsODUwNTc2LjYzMjkyODIzMjksMTA2MzQzNC45NjAzNjI4NzQ3LDIxNTk1Mi4zNjczODI5MjM5OSwxMjYyNDE3LjY3NzUzNzYwNCwyNDk4MzkuNzM1MDkzMjk2MjcsNjYzMjI4LjMzMTc3NDIwNTksNTkyODA1LjI0MTE4NTUxMjUsMTM2MDgzNi4zMjc3NzExNTc3LDk4NTg3Mi4xODY4OTE1Mjg0LDI3NzI2My44MjIxMzMwMDE5LDgwNjk2My41ODg5ODIyNzIyLDUzNzQxNS4xNzkxMTYyNTk3LDc5MzkzMC44MjEwMDAzNTI5LDg4MTY0MC4wNTMzMjk0MDc1LDc4NDI5OC43OTM5MDY3NjM5LDE3ODc3OTIuMTMxMDYwMjU5OSwxMTQwMTAuNTkzODU5NTYzNjUsMTQyNy41MTA4OTg2MTIzNjk2CisxNCxNb24gNyBGZWIgMTEsNjMxMTAuMTc5NTk1MTk5ODY1LDU2MzQ4LjE3NjAzNjQ5MzEyLDMyNzk5LjIyNDg3Nzk3MDU1LDY3ODA0LjYxMzMwMzEzNDMsNjgzNDYuMzY5MjE4MzEwMjcsMTEwNDg0NS44NDg5MTc3MTA2LDEyMDA2MzQuODM5NDIzMTU3Myw5ODQwMzQuOTIxNDcwOTQ3Myw4NTQ3MzMuNjMyOTY0Mjc4MywxMDY4NjMyLjI1NzExMTI0OCwyMTcwMDcuNzg1NTEyNTEwMjUsMTI2ODU4Ny40NTcxMDU4MDMsMjUxMDYwLjc3MDAzMzEwMjg2LDY2NjQ2OS43MDk1NTUzMDAzLDU5NTcwMi40NDIxMTIwMDkyLDEzNjc0ODcuMTA2MTMwOTE3OCw5OTA2OTAuNDEzMjA3NDA0NywyNzg2MTguODg2MDY3MjU2NzQsODEwOTA3LjQ0MDE3NTI0MjUsNTQwMDQxLjY3MzY5OTQzMDQsNzk3ODEwLjk3NzUwMDk1NDEsODg1OTQ4Ljg2ODc3NDgyMTUsNzg4MTMxLjg3NjA2MzQxNCwxNzk2NTI5LjU1ODkwMTAzNCwxMTQ1NjcuNzk0NzMyOTkwMTQsMTQzNC40ODc1MzM3ODgxNTMzCisxNSxUdWUgOCBGZWIgMTEsNjM0MTUuNzc0MzM3MDI4OTksNTY2MjEuMDI3NTIyODc1NTgsMzI5NTguMDQ2NjUxNjIyMTIsNjgxMzIuOTM5NjI3NTEwMiw2ODY3Ny4zMTg4NTU3NTY5NywxMTEwMTk1Ljc3OTUzMzEzMDEsMTIwNjQ0OC42MDM0ODA1MjQ2LDk4ODc5OS44NTYzNzg1NDIzLDg1ODg3Mi40NTk3ODM4Nzg0LDEwNzM4MDYuODMyNzYzMTc3LDIxODA1OC41ODk2NTU1ODE0OCwxMjc0NzMwLjI2NDE2MDUyMSwyNTIyNzYuNDY2OTU3MDE5MTIsNjY5Njk2LjkxNjk1ODg0MjEsNTk4NTg2Ljk3NzMwMzgyNTQsMTM3NDEwOC44MDkxODc5MDgsOTk1NDg3LjU3NTYxNDQ2MTYsMjc5OTY4LjAyNjA0OTE1MTUsODE0ODM0LjA0OTk3NzYwOTgsNTQyNjU2LjY4NTk5ODcwOTMsODAxNjc0LjE3MTA2NTk0ODksODkwMjM4Ljg0NzMxMDE5NjEsNzkxOTQ4LjIwMTA4MDAzOTcsMTgwNTIyOC43ODkyMDM2OTIsMTE1MTIyLjU1OTY4MzM5Nzk3LDE0NDEuNDMzNjY5MTA4MjY5NAorMTYsV2VkIDkgRmViIDExLDYzNzIwLjAyODc0Njk5OTAxNCw1Njg5Mi42ODIyODg2MDE3NCwzMzExNi4xNzE4MzY0NDUzOSw2ODQ1OS44MjU5MTk4MDI3NCw2OTAwNi44MTY5NTUzMjY1LDExMTU1MjIuMjQ1NDY5Nzg5NSwxMjEyMjM2Ljg2ODQ5NTc5MjIsOTkzNTQzLjg5MjM4NTc2NjgsODYyOTkzLjEzMzc5OTQ5ODksMTA3ODk1OC43MTI4MzkzODM0LDIxOTEwNC43ODQ5OTQ2NDU4LDEyODA4NDYuMTI4OTk3NzQzOCwyNTM0ODYuODMxODYwNzk1Myw2NzI5MDkuOTY5OTAxMjQwMyw2MDE0NTguODYwOTg3MzI5OSwxMzgwNzAxLjQ2OTYwMDAwMywxMDAwMjYzLjY5Nzc3MjAzOTgsMjgxMzExLjI0ODczMjU3MDE1LDgxODc0My40Mzc3NTUxOTcyLDU0NTI2MC4yMjg5MTExOTI5LDgwNTUyMC40MjA3NDgzOTUxLDg5NDUxMC4wMTAwOTM0NjkyLDc5NTc0Ny43ODc3Nzg1NDU2LDE4MTM4ODkuODY0ODcyMzU4MywxMTU2NzQuODkxNDQ2ODU3MywxNDQ4LjM0OTMzODgzMDY3NDUKKzE3LFRodSAxMCBGZWIgMTEsNjQwMjIuOTQ0MzM4MDY3NzUsNTcxNjMuMTQxNjg0NTIyMDQsMzMyNzMuNjAxMjE4NzQ1MjcsNjg3ODUuMjczODA1NTEwNjcsNjkzMzQuODY1MTU1NTA1MzEsMTEyMDgyNS4yNzMyMTQ0NjQsMTIxNzk5OS42NjMyNTIxMTEzLDk5ODI2Ny4wNTMwODMxNjI4LDg2NzA5NS42NzU1MDE5MDU4LDEwODQwODcuOTIyOTU4NDg0MiwyMjAxNDYuMzc2NzMyMDkwOTIsMTI4NjkzNS4wODIwMjk2Njk4LDI1NDY5MS44NzA3NjMxODA3NSw2NzYxMDguODg0MzU5OTU3OSw2MDQzMTguMTA3NDQzNDYyMSwxMzg3MjY1LjEyMDE1MDM0OTgsMTAwNTAxOC44MDM0MzAyMzQ5LDI4MjY0OC41NjA3OTY5MjA0NCw4MjI2MzUuNjIyOTQ4MTEzNCw1NDc4NTIuMzE1MzgzNDQ5NSw4MDkzNDkuNzQ1Njc0NDM2Miw4OTg3NjIuMzc4MzYzNzM4MSw3OTk1MzAuNjU1MDUzMDM1NSwxODIyNTEyLjgyODk3NTczMzEsMTE2MjI0Ljc5Mjc2OTkzMzYzLDE0NTUuMjM0NTc3MzQ0NzM1MworMTgsRnJpIDExIEZlYiAxMSw2NDMyNC41MjI2Mjg5NDY2NzQsNTc0MzIuNDA3MDY2NjI0MDksMzM0MzAuMzM1NTg3ODE2OTIsNjkxMDkuMjg0OTE2MzE0NDQsNjk2NjEuNDY1MTAxMDEwODYsMTEyNjEwNC44ODkzNTQ2NTY3LDEyMjM3MzcuMDE2NjQyMDk0LDEwMDI5NjkuMzYyMTUwOTg0OCw4NzExODAuMTA1NDU5NzkwMiwxMDg5MTk0LjQ4ODgzNjUyMjIsMjIxMTgzLjM3MDA5MDA4ODkyLDEyOTI5OTcuMTUzNzg0MTUyOCwyNTU4OTEuNTg5NzA1ODEzNyw2NzkyOTMuNjc2MzczMjE4OSw2MDcxNjQuNzMxMDA3NDcxMiwxMzkzNzk5Ljc5Mzc0Njc2NzMsMTAwOTc1Mi45MTY0Mjk0NjI1LDI4Mzk3OS45Njg5NDcwMTE0LDgyNjUxMC42MjUwNzAzOTYyLDU1MDQzMi45NTg0MTEyODMsODEzMTYyLjE2NTA0Mjk1MDksOTAyOTk1Ljk3MzQ0MDg3MTIsODAzMjk2LjgyMTg2OTQ2NTksMTgzMTA5Ny43MjQ3NDYzMDQ2LDExNjc3Mi4yNjY0MDk2MzczOSwxNDYyLjA4OTQxOTE3MDU5OQorMTksU2F0IDEyIEZlYiAxMSw2NDYyNC43NjUxNDQwNzMyNyw1NzcwMC40Nzk3OTYwMDc5OSwzMzU4Ni4zNzU3MzU5MzEzNzUsNjk0MzEuODYwODkwMDQ2MzksNjk5ODYuNjE4NDQyNzYxNzQsMTEzMTM2MS4xMjA1NzgxMTMyLDEyMjk0NDguOTU3NjY3Mjg1NiwxMDA3NjUwLjg0MzM1ODc2OTUsODc1MjQ2LjQ0NDMxOTM5MzQsMTA5NDI3OC40MzYyODY0OTc2LDIyMjIxNS43NzAzMTA1MDEwMiwxMjk5MDMyLjM3NDkwNDE0NiwyNTcwODUuOTk0NzUzMTExMjQsNjgyNDY0LjM2MjAzOTcxNjMsNjA5OTk4Ljc0NjA2ODY1NDMsMTQwMDMwNS41MjM0MjExNDc0LDEwMTQ0NjYuMDYwNzAwMDIzNywyODUzMDUuNDc5OTEyOTMxMiw4MzAzNjguNDYzNzA5NjU3Nyw1NTMwMDIuMTcxMDM5NDk0Nyw4MTY5NTcuNjk4MTI1MjAzNyw5MDcyMTAuODE2NzI1MTE5NCw4MDcwNDYuMzA3MjY1MzAwOSwxODM5NjQ0LjU5NTU3OTU2MDEsMTE3MzE3LjMxNTEzMzM3Mzg0LDE0NjguOTEzODk4OTU4NTY0NQorMjAsU3VuIDEzIEZlYiAxMSw2NDkyMy42NzM0MTM1ODM0MSw1Nzk2Ny4zNjEyMzg4NjE2NSwzMzc0MS43MjI0NTgzMjEyMSw2OTc1My4wMDMzNzA2NjExMyw3MDMxMC4zMjY4Mzc4NDc2NiwxMTM2NTkzLjk5MzY3MjMzODUsMTIzNTEzNS41MTU0Mzc2NDAyLDEwMTIzMTEuNTIwNTY0OTA0NCw4NzkyOTQuNzEyODA0MTMyNCwxMDk5MzM5Ljc5MTIxNzg5OTYsMjIzMjQzLjU4MjY1NDc4MjU3LDEzMDUwNDAuNzc2MTQ3MTQ2MiwyNTgyNzUuMDkxOTkyMTU5Myw2ODU2MjAuOTU3NTE4MzIwNCw2MTI4MjAuMTY3MDcwMDk2MiwxNDA2NzgyLjM0MjMyODg1NSwxMDE5MTU4LjI2MDI2MTY3MTUsMjg2NjI1LjEwMDQ0OTkyNTIzLDgzNDIwOS4xNTg1MjY3MjgzLDU1NTU1OS45NjYzNjE2NDc5LDgyMDczNi4zNjQyNjQ0OTU0LDkxMTQwNi45Mjk2OTY3Mjc3LDgxMDc3OS4xMzAzNDkxNjY5LDE4NDgxNTMuNDg1MDMzMjAwMSwxMTc4NTkuOTQxNzE4ODkyNzksMTQ3NS43MDgwNTE0ODg0NTM1CisyMSxNb24gMTQgRmViIDExLDY1MjIxLjI0ODk3MzI4MzcyLDU4MjMzLjA1Mjc2NjQzNjE3LDMzODk2LjM3NjU1MzE2NjE2LDcwMDcyLjcxNDAwODIwNTg1LDcwNjMyLjU5MTk0OTQ5OTYzLDExNDE4MDMuNTM1NTI0MTEzOCwxMjQwNzk2LjcxOTE3MDk5NSwxMDE2OTUxLjQxNzcxNjE5NzYsODgzMzI0LjkzMTcxNDIyNjcsMTEwNDM3OC41Nzk2MzYyNDAxLDIyNDI2Ni44MTI0MDM4ODgyNCwxMzExMDIyLjM4ODM4NDYzOTUsMjU5NDU4Ljg4NzUzMjYwMjg4LDY4ODc2My40NzkwMjc3ODcxLDYxNTYyOS4wMDg1MDg0MDg0LDE0MTMyMzAuMjgzNzQ4MTMxNSwxMDIzODI5LjUzOTIyMzE3NzUsMjg3OTM4LjgzNzMzODI3NDE3LDgzODAzMi43MjkyNTUzMDI5LDU1ODEwNi4zNTc1MTk4MzE2LDgyNDQ5OC4xODI4NzU4MTQzLDkxNTU4NC4zMzM5MTU1NDg0LDgxNDQ5NS4zMTAzMDA1MDgyLDE4NTY2MjQuNDM2ODI2MzUyNSwxMTg0MDAuMTQ4OTU0MjM4NTgsMTQ4Mi40NzE5MTE2Njg5ODQ0CisyMixUdWUgMTUgRmViIDExLDY1NTE3LjQ5MzM2NDYyNDA0LDU4NDk3LjU1NTc1NTAyMTE5NiwzNDA1MC4zMzg4MjE1Nzg4NCw3MDM5MC45OTQ0NTg3OTA3Miw3MDk1My40MTU0NDcwNjAwNiwxMTQ2OTg5Ljc3MzExOTAxMzUsMTI0NjQzMi41OTgxOTI1NDU4LDEwMjE1NzAuNTU4ODQ3NDQ3Nyw4ODczMzcuMTIxOTI2MzI0NiwxMTA5Mzk0LjgyNzY0MjU4NiwyMjUyODUuNDY0ODU4MTc3MTIsMTMxNjk3Ny4yNDI2MDE1NDcsMjYwNjM3LjM4NzUwNjUzNjQ3LDY5MTg5MS45NDI4NDY0NjY5LDYxODQyNS4yODQ5MzM0NjkzLDE0MTk2NDkuMzgxMDc5NDk2LDEwMjg0NzkuOTIxNzgxODk5MiwyODkyNDYuNjk3MzgzMTcyMzQsODQxODM5LjE5NTcwMTU4NjMsNTYwNjQxLjM1NzcwNDQyNDEsODI4MjQzLjE3MzQ0NTQ4NzMsOTE5NzQzLjA1MTAyMDY1MzksODE4MTk0Ljg2NjM2OTI0MjEsMTg2NTA1Ny40OTQ4Mzg3ODc3LDExODkzNy45Mzk2Mzc3MDAwMiwxNDg5LjIwNTUxNDUzNzE0NDYKKzIzLFdlZCAxNiBGZWIgMTEsNjU4MTIuNDA4MTM0NjY5ODgsNTg3NjAuODcxNTg1OTIwMzUsMzQyMDMuNjEwMDY3NTkwMzksNzA3MDcuODQ2Mzg0NTU5MzIsNzEyNzIuNzk5MDA1OTUyOTgsMTE1MjE1Mi43MzM1NDA5MjM4LDEyNTIwNDMuMTgxOTM0MzIzNiwxMDI2MTY4Ljk2ODA4MTAxNTQsODkxMzMxLjMwNDM5MzEzMDIsMTExNDM4OC41NjE0MzMwOTM0LDIyNjI5OS41NDUzMzczMTgxOCwxMzIyOTA1LjM2OTg5NTY3MTMsMjYxODEwLjU5ODA2ODM5NDQ3LDY5NTAwNi4zNjUzMTIwMTQyLDYyMTIwOS4wMTA5NDgxNjM5LDE0MjYwMzkuNjY3ODQ1MTQ5OCwxMDMzMTA5LjQzMjIyMzM0NzgsMjkwNTQ4LjY4NzQxNDYwNjIsODQ1NjI4LjU3Nzc0MzkzOTYsNTYzMTY0Ljk4MDE1Mzg1NzcsODMxOTcxLjM1NTUzMDgzMjQsOTIzODgzLjEwMjcyOTk1MDEsODIxODc3LjgxNzg3NTQxNTksMTg3MzQ1Mi43MDMxMTAxMzU0LDExOTQ3My4zMTY1Nzc3NjA0LDE0OTUuOTA4ODk1MjU3NTY1NQorMjQsVGh1IDE3IEZlYiAxMSw2NjEwNS45OTQ4MzYwNzQ5NSw1OTAyMy4wMDE2NDU0MjY3MSwzNDM1Ni4xOTEwOTgxMzYxOTQsNzEwMjMuMjcxNDUzNjU5MDgsNzE1OTAuNzQ0MzA3NjU0MjUsMTE1NzI5Mi40NDM5NzE1NjEsMTI1NzYyOC40OTk5MzQ2NzE0LDEwMzA3NDYuNjY5NjI2MzkzOCw4OTUzMDcuNTAwMTQzMDMxOCwxMTE5MzU5LjgwNzI5ODU0MiwyMjczMDkuMDU5MTgwMTk1NjUsMTMyODgwNi44MDE0NzcxNDQyLDI2Mjk3OC41MjUzOTQ4NDE4NSw2OTgxMDYuNzYyODIxMDk3Myw2MjM5ODAuMjAxMjA4MTI1LDE0MzI0MDEuMTc3Njg4MzgxLDEwMzc3MTguMDk0OTIwNzU3LDI5MTg0NC44MTQyODcyMzMwNSw4NDk0MDAuODk1MzMyNTI3LDU2NTY3Ny4yMzgxNTQzODQxLDgzNTY4Mi43NDg3NTk4MTEzLDkyODAwNC41MTA4Mzk3OTA4LDgyNTU0NC4xODQyMDg4NjMyLDE4ODE4MTAuMTA1ODM5MTAxNiwxMjAwMDYuMjgyNTkzMDQ3NTgsMTUwMi41ODIwODkxMjE4OTczCisyNSxGcmkgMTggRmViIDExLDY2Mzk4LjI1NTAyNzA1MzcsNTkyODMuOTQ3MzI0Nzk4MjYsMzQ1MDguMDgyNzIzMDQxNjYsNzEzMzcuMjcxMzQwMjExOCw3MTkwNy4yNTMwMzk2NjE4NCwxMTYyNDA4LjkzMTY4OTk5MTQsMTI2MzE4OC41ODE4Mzc3MjIzLDEwMzUzMDMuNjg3Nzc5NzgxMiw4OTkyNjUuNzMwMjc5NzI5MiwxMTI0MzA4LjU5MTYyMzg3MDQsMjI4MzE0LjAxMTc0NDgxNDY2LDEzMzQ2ODEuNTY4NjY3ODc0NywyNjQxNDEuMTc1Njg0NjY1LDcwMTE5My4xNTE4MjkxMDc3LDYyNjczOC44NzA0MjE0NzM0LDE0Mzg3MzMuOTQ0MzcyOTY4MywxMDQyMzA1LjkzNDMzNDY1MTUsMjkzMTM1LjA4NDg4MDI1OTQ3LDg1MzE1Ni4xNjg0ODg5NjI5LDU2ODE3OC4xNDUwMzk4MzgyLDgzOTM3Ny4zNzI4MzA2ODE2LDkzMjEwNy4yOTcyMjQ1OTIsODI5MTkzLjk4NDgyODg2MTEsMTg5MDEyOS43NDczODI2ODc0LDEyMDUzNi44NDA1MTIyODQyLDE1MDkuMjI1MTMxNTQ4MTg1MworMjYsU2F0IDE5IEZlYiAxMSw2NjY4OS4xOTAyNzEzNTM4OSw1OTU0My43MTAwMjAyMzM0MywzNDY1OS4yODU3NTUwMDc5MSw3MTY0OS44NDc3MjQyODQxOSw3MjIyMi4zMjY4OTU0NjYxMiwxMTY3NTAyLjIyNDA3MjE1MDQsMTI2ODcyMy40NTczOTI4NzcsMTAzOTg0MC4wNDY5MjM2NTI4LDkwMzIwNi4wMTU5ODE4NjI4LDExMjkyMzQuOTQwODg3NzEyLDIyOTMxNC40MDg0MDgyMDY5MiwxMzQwNTI5LjcwMjkwMDk5NzYsMjY1Mjk4LjU1NTE1ODY2MjQsNzA0MjY1LjU0ODg0OTg3MTMsNjI5NDg1LjAzMzM0ODU1OTQsMTQ0NTAzOC4wMDE3ODI1ODgsMTA0Njg3Mi45NzUwMTI0MTY3LDI5NDQxOS41MDYwOTczMjA3Niw4NTY4OTQuNDE3MzA1OTU5OSw1NzA2NjcuNzE0MTkxNDA0NSw4NDMwNTUuMjQ3NTExNjUwOSw5MzYxOTEuNDgzODM2NDQ2OSw4MzI4MjcuMjM5MjYzNzg3NiwxODk4NDExLjY3MjI1NTQwODUsMTIxMDY0Ljk5MzE3NDIzNzgxLDE1MTUuODM4MDU4MDgwMjQ2NAorMjcsU3VuIDIwIEZlYiAxMSw2Njk3OC44MDIxMzgyMjkxOSw1OTgwMi4yOTExMzI4NDY2NiwzNDgwOS44MDEwMDk1OTc1OSw3MTk2MS4wMDIyOTE4NTg0Niw3MjUzNS45Njc1NzQ1MjAyLDExNzI1NzIuMzQ4NTkwMzY0LDEyNzQyMzMuMTU2NDU0MjgzNSwxMDQ0MzU1Ljc3MTUyNjMzNDMsOTA3MTI4LjM3ODUwMjY0MjYsMTEzNDEzOC44ODE2NjE5MzA2LDIzMDMxMC4yNTQ1NjYzMzY2LDEzNDYzNTEuMjM1NzIwMzIzNCwyNjY0NTAuNjcwMDU5NTM1OTQsNzA3MzIzLjk3MDQ1NTM1ODcsNjMyMjE4LjcwNDgwMTcwNDIsMTQ1MTMxMy4zODM5MjAyMjAyLDEwNTE0MTkuMjQxNTg3ODY5MSwyOTU2OTguMDg0ODY2MzU5NjYsODYwNjE1LjY2MTk0Njk3NjMsNTczMTQ1Ljk1OTAzNzM4MjYsODQ2NzE2LjM5MjY0MDUzMDEsOTQwMjU3LjA5MjcwNDc0Miw4MzY0NDMuOTY3MTEwNzgwMiwxOTA2NjU1LjkyNTEyODUxNSwxMjE1OTAuNzQzNDI3NjcxMjcsMTUyMi40MjA5MDQzODcwNDYyCisyOCxNb24gMjEgRmViIDExLDY3MjY3LjA5MjIwMjQxMTg4LDYwMDU5LjY5MjA2ODY0MzkyNiwzNDk1OS42MjkzMDUyMjA2Myw3MjI3MC43MzY3MzQ4MDI5MSw3Mjg0OC4xNzY3ODIyMTAzNCwxMTc3NjE5LjMzMjgxMjg2OTUsMTI3OTcxNy43MDg5ODAzMTcsMTA0ODg1MC44ODYxNDE1NzU0LDkxMTAzMi44MzkxNjk0NzgsMTEzOTAyMC40NDA2MTExNTgsMjMxMzAxLjU1NTYzNDAwNjI1LDEzNTIxNDYuMTk4Nzc5Nzg4NiwyNjc1OTcuNTI2NjUxNzgyMTYsNzEwMzY4LjQzMzI3NTM5NjksNjM0OTM5Ljg5OTY0NDk0MTgsMTQ1NzU2MC4xMjQ5MDc1NTY1LDEwNTU5NDQuNzU4NzgwODI3LDI5Njk3MC44MjgxMzk1MDU5LDg2NDMxOS45MjI2NDU4NjU2LDU3NTYxMi44OTMwNTI5NTI3LDg1MDM2MC44MjgxMjQzODgyLDk0NDMwNC4xNDU5MzU3NzI2LDg0MDA0NC4xODgwMzUzOTM2LDE5MTQ4NjIuNTUwODI5MjEzOCwxMjIxMTQuMDk0MTMxMjkzMDIsMTUyOC45NzM3MDYyNjIwNzg2CisyOSxUdWUgMjIgRmViIDExLDY3NTU0LjA2MjA0NDA4NTUsNjAzMTUuOTE0MjM4NDk4NDMsMzUxMDguNzcxNDYzMTIwMDYsNzI1NzkuMDUyNzUwODQyNiw3MzE1OC45NTYyMjk4MjYzOCwxMTgyNjQzLjIwNDQwMzMzNzYsMTI4NTE3Ny4xNDUwMzMwNTk2LDEwNTMzMjUuNDE1NDA4MTIzNSw5MTQ5MTkuNDE5MzgzNjA3OCwxMTQzODc5LjY0NDQ5MjMzMTIsMjMyMjg4LjMxNzA0NDc2Mjk1LDEzNTc5MTQuNjIzODQyOTA2LDI2ODczOS4xMzEyMjE1ODM0LDcxMzM5OC45NTM5OTczODAzLDYzNzY0OC42MzI3OTM3NjEzLDE0NjM3NzguMjU4OTg0NDA3NiwxMDYwNDQ5LjU1MTM5NjY4MTUsMjk4MjM3Ljc0Mjg5Mjk1NTMsODY4MDA3LjIxOTcwNjUyNDcsNTc4MDY4LjUyOTc1OTk0MjMsODUzOTg4LjU3MzkzOTIwNjcsOTQ4MzMyLjY2NTcxMjM1OTgsODQzNjI3LjkyMTc3MTI1OTIsMTkyMzAzMS41OTQzMzk4OTA0LDEyMjYzNS4wNDgxNTM3MDc1NCwxNTM1LjQ5NjQ5OTYyMjc0NAorMzAsV2VkIDIzIEZlYiAxMSw2NzgzOS43MTMyNDg4NTc1OSw2MDU3MC45NTkwNTgxMjYxOTUsMzUyNTcuMjI4MzA3MzU3ODQsNzI4ODUuOTUyMDQzNTMwMDcsNzM0NjguMzA3NjM0NTMyMTUsMTE4NzY0My45OTExMjAzOTUsMTI5MDYxMS40OTQ3Nzc3ODIxLDEwNTc3NzkuMzg0MDQ5Mjk5Miw5MTg3ODguMTQwNjE5NzMwNSwxMTQ4NzE2LjUyMDE1NDIzMSwyMzMyNzAuNTQ0MjUwODA0NDcsMTM2MzY1Ni41NDI3ODIyMTc1LDI2OTg3NS40OTAwNzY2OTkzNSw3MTY0MTUuNTQ5MzY1OTgzMiw2NDAzNDQuOTE5MjE0ODQ5NSwxNDY5OTY3LjgyMDUwODExMzEsMTA2NDkzMy42NDQzMjU5NjgsMjk5NDk4LjgzNjEyNjg0OTc1LDg3MTY3Ny41NzM1MDI1NDQxLDU4MDUxMi44ODI3MjY1OTI4LDg1NzU5OS42NTAxMjk1MzQ1LDk1MjM0Mi42NzQyOTM0Njc0LDg0NzE5NS4xODgxMTk3NDQxLDE5MzExNjMuMTAwNzk3MzMzMywxMjMxNTMuNjA4MzczMzY1OCwxNTQxLjk4OTMyMDUwOTcyOTYKKzMxLFRodSAyNCBGZWIgMTEsNjgxMjQuMDQ3NDA3NzMyNDMsNjA4MjQuODI3OTQ4MDYxNzcsMzU0MDUuMDAwNjY0ODAwNjksNzMxOTEuNDM2MzIyMjE2MDMsNzM3NzYuMjMyNzE5MzM2LDExOTI2MjEuNzIwODE3MTQ3LDEyOTYwMjAuNzg4NDgyNDI1NSwxMDYyMjEyLjgxNjg3MjU3MDcsOTIyNjM5LjAyNDQyNTYzNTksMTE1MzUzMS4wOTQ1MzcwMiwyMzQyNDguMjQyNzIyODg1NiwxMzY5MzcxLjk4NzU3ODc0NiwyNzEwMDYuNjA5NTQ2MzU4NzYsNzE5NDE4LjIzNjE4Mjg3MTcsNjQzMDI4Ljc3MzkyNTgzMzMsMTQ3NjEyOC44NDM5NTI5NTA2LDEwNjkzOTcuMDYyNTQzOTQwMywzMDA3NTQuMTE0ODY1MTU2Niw4NzUzMzEuMDA0NDc2ODU3NSw1ODI5NDUuOTY1NTY3MzI2NCw4NjExOTQuMDc2ODA4MTQ0Niw5NTYzMzQuMTk0MDEzODE5Nyw4NTA3NDYuMDA2OTQ5NjExNSwxOTM5MjU3LjExNTQ5MTk1NzYsMTIzNjY5Ljc3NzY3ODUxNTg4LDE1NDguNDUyMjA1MDg2MzkwNAorMzIsRnJpIDI1IEZlYiAxMSw2ODQwNy4wNjYxMTcwODM5LDYxMDc3LjUyMjMzMzYzMzkyNiwzNTU1Mi4wODkzNjUxMDU5OCw3MzQ5NS41MDczMDIwMjAxOCw3NDA4Mi43MzMyMTMwNjEzNSwxMTk3NTc2LjQyMTQ0MDcwMjIsMTMwMTQwNS4wNTY1MTcwODMyLDEwNjY2MjUuNzM4NzY5MTMwNSw5MjY0NzIuMDkyNDIxODM2NiwxMTU4MzIzLjM5NDY3MTc4MjYsMjM1MjIxLjQxNzk1MDIyNDY4LDEzNzUwNjAuOTkwMzIxNDQ4NSwyNzIxMzIuNDk1OTgxMTUxMjQsNzIyNDA3LjAzMTMwNjQxNjgsNjQ1NzAwLjIxMTk5NTAyMzcsMTQ4MjI2MS4zNjM5MDk1NDcsMTA3MzgzOS44MzExMTAxNDA4LDMwMjAwMy41ODYxNTU1NDg4LDg3ODk2Ny41MzMxNDEzOTI1LDU4NTM2Ny43OTE5NDI1MTMsODY0NzcxLjg3NDE1NTY4ODksOTYwMzA3LjI0NzI4MzUxOTQsODU0MjgwLjM5ODE5NjY4MDIsMTk0NzMxMy42ODM4NjcwMzE3LDEyNDE4My41NTg5NjcxNTM1MSwxNTU0Ljg4NTE4OTYzODEzMQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BZ2luZ19GRF9SZWZlcmVuY2UvTm9EaXNlYXNlL2h1bWFuMnRvLS9TXzIuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BZ2luZ19GRF9SZWZlcmVuY2UvTm9EaXNlYXNlL2h1bWFuMnRvLS9TXzIuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMxZmQ2YjMKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FnaW5nX0ZEX1JlZmVyZW5jZS9Ob0Rpc2Vhc2UvaHVtYW4ydG8tL1NfMi5jc3YKQEAgLTAsMCArMSwzMyBAQAoraXRlcmF0aW9uLHRpbWUsRUctRlJHLUcyMTAwMDEsRUctRlJHLUcyMTAwMDIsRUctRlJHLUcyMTAwMDMsRUctRlJHLUcyMTAwMDQsRUctRlJHLUcyMTAwMDUsRUctTE9FLUcyNDAwMDEsRUctTE9FLUcyNDAwMDIsRUctTE9FLUcyNDAwMDMsRUctTE9FLUcyNDAwMDQsRUctTE9FLUcyNDAwMDUsRUctTE9FLUcyNDAwMDYsRUctTE9FLUcyNDAwMDcsRUctTE9FLUcyNDAwMDgsRUctTE9FLUcyNDAwMDksRUctVVBFLUcyOTAwMDEsRUctVVBFLUcyOTAwMDIsRUctVVBFLUcyOTAwMDMsRUctVVBFLUcyOTAwMDQsRUctVVBFLUcyOTAwMDUsRUctVVBFLUcyOTAwMDYsRUctVVBFLUcyOTAwMDcsRUctVVBFLUcyOTAwMDgsRUctVVJHLUczMDAwMDEsRUctVVJHLUczMDAwMDIsRUctVVJHLUczMDAwMDMsRUctVVJHLUczMDAwMDQKKzEsVHVlIDI1IEphbiAxMSw1OTAxNC44LDUyNjkxLjYwMDAwMDAwMDAwNiwzMDY3MC44MDAwMDAwMDAwMDMsNjM0MDQuNjAwMDAwMDAwMDA2LDYzOTExLjIwMDAwMDAwMDAwNCwxMDMzMTQ5LjYwMDAwMDAwMDEsMTEyMjcyMi42LDkyMDE3OC40LDc5OTI2Ny44LDk5OTI4Ni4wLDIwMjkyNS42LDExODYyNjUuNiwyMzQ3NjguODAwMDAwMDAwMDIsNjIzMjIwLjgsNTU3MDQ1LjgsMTI3ODc0Ny40MDAwMDAwMDAxLDkyNjQwMi4wLDI2MDUzOC42LDc1ODI4NS42MDAwMDAwMDAxLDUwNDk5Ny4wLDc0NjAzOS4wLDgyODQ1Ny40LDczNjk4OC4wLDE2Nzk5NDguMjAwMDAwMDAwMiwxMDcxMzMuMjAwMDAwMDAwMDEsMTM0MS40CisyLFdlZCAyNiBKYW4gMTEsNTkzMzcuOTU0MDY2NjYwMTQsNTI5ODAuMTI5Mzk5NzIzOTYsMzA4MzguNzQ3NTk1MzEwMzI4LDYzNzUxLjc5MTc5NDg1NDE2NSw2NDI2MS4xNjU4NDIyMTQ2NiwxMDM4ODA2LjkzNTAxOTQ5MTcsMTEyODg3MC40MjAxMDQ4MDg0LDkyNTIxNy4xMjU3NDM1OTAxLDgwMzY0NC40NDE3OTAyMDM2LDEwMDQ3NTcuOTA0MjQ1MzE3MSwyMDQwMzYuNzgyODM2NjY4OTIsMTE5Mjc2MS4zNjk3NTIzMTcsMjM2MDU0LjM1MDI3NjI4NTMsNjI2NjMzLjQ0MTE2NzA4MzMsNTYwMDk2LjA3OTE3NzE4ODcsMTI4NTc0OS41ODI4ODUzMjg0LDkzMTQ3NC44MDUwMTk0NTQyLDI2MTk2NS4yNjA5MDcyOTY4LDc2MjQzNy44MzA4ODY2NTYsNTA3NzYyLjI2OTYzMDY4ODcsNzUwMTI0LjE3MDc4MzIxMTQsODMyOTkzLjg3ODYwOTg1MTgsNzQxMDIzLjYwOTE5MDkxMDEsMTY4OTE0Ny4yODM4MzMzNSwxMDc3MTkuODQxNDczOTA2OCwxMzQ4Ljc0NTI1Njg2ODA3MjQKKzMsVGh1IDI3IEphbiAxMSw1OTY1OS43NDg2NjkyNDc1Miw1MzI2Ny40NDQ5OTY1MTgyMTQsMzEwMDUuOTg4NjU4NTE4ODMyLDY0MDk3LjUyMzAwMjI2Njc1LDY0NjA5LjY1OTQyNjk1NzUxNCwxMDQ0NDQwLjQ3MDQxOTg1NDMsMTEzNDk5Mi4zNzcxODgxNjUsOTMwMjM0LjY1NDI3MDk2NzksODA4MDAyLjY3MTY1OTAxNDMsMTAxMDIwNi43ODg5NTI5MDEzLDIwNTE0My4yOTEwODIxNzM1NiwxMTk5MjI5LjgxMjcwNzU2MDEsMjM3MzM0LjQ5MjQyMTkxNTE0LDYzMDAzMS43MjU4Mjg5MDAyLDU2MzEzMy41MjYyNTU0NDY2LDEyOTI3MjIuMzA4NTY0MTg2LDkzNjUyNi4yNjk0NTU5MzcyLDI2MzM4NS45MjAwNTEyMDA5Niw3NjY1NzIuNTkzOTE3MjgxMSw1MTA1MTUuOTA2MTU3ODQ1LDc1NDE5Mi4xNTU4MjI4OTEsODM3NTExLjI3Mjg4NzExMDcsNzQ1MDQyLjI0MTEzNjk5MjcsMTY5ODMwNy42Njg0MDQ0NDc0LDEwODMwNC4wMTUwMjg5Nzk2NywxMzU2LjA1OTYxMzI2NTI5MzQKKzQsRnJpIDI4IEphbiAxMSw1OTk4MC4xODUyNDMzODgzNSw1MzU1My41NDgwNzIxODczNSwzMTE3Mi41MjM5MzU3NDAxMSw2NDQ0MS43OTUxNjQ2NTI2MSw2NDk1Ni42ODIzMDg5NjcyNiwxMDUwMDUwLjIzMTMzNDA0OCwxMTQxMDg4LjQ5ODU2MjAzMiw5MzUyMzEuMDA3OTY2ODk0OCw4MTIzNDIuNTA5MDQ5ODU2NSwxMDE1NjMyLjY3ODQzMTkyODMsMjA2MjQ1LjEyOTY3Mjk5MjY1LDEyMDU2NzAuOTU3NzIzNDczMiwyMzg2MDkuMjMyMTQ4MDAzNCw2MzM0MTUuNjY5MTQ2MjU5Nyw1NjYxNTguMTU0Nzg1NzczNSwxMjk5NjY1LjYwODE0NDA3OTMsOTQxNTU2LjQxNTg0NTYwOSwyNjQ4MDAuNTgzNzY5NzE2NDQsNzcwNjg5LjkwNzUzODM0NDMsNTEzMjU3LjkyMTg2NjMwMTA0LDc1ODI0Mi45NzMyNjc1OTA0LDg0MjAwOS42MDI5ODUyODI5LDc0OTA0My45MTM3NjY2MTk0LDE3MDc0MjkuMzk0NTgwNjI3NiwxMDg4ODUuNzIzMjcxMzk5MjYsMTM2My4zNDMxMDE4MjMyOTA3Cis1LFNhdCAyOSBKYW4gMTEsNjAyOTkuMjY1MjMwODI1MzQ1LDUzODM4LjQzOTkxMzk5NzEyLDMxMzM4LjM1NDE3NjI2NzYxOCw2NDc4NC42MDk4MzA5OTgxNCw2NTMwMi4yMzYwNDk2MDY2MiwxMDU1NjM2LjI0MzAwMjExMzQsMTE0NzE1OC44MTE2NTQ3MzQ3LDk0MDIwNi4yMDkzMTE1MDMyLDgxNjY2My45NzM0ODg5OTM3LDEwMjEwMzUuNTk3MDk1MTQ0NCwyMDczNDIuMzAzNTY2NjM3MDQsMTIxMjA4NC44MzM3ODA3NDk1LDIzOTg3OC41NzUxODk5OTYyMiw2MzY3ODUuMjg2MzQ0NTYzOCw1NjkxNjkuOTc4Mzc2OTAzNywxMzA2NTc5LjUxMjg2NTA0OTMsOTQ2NTY1LjI2NjgyMDY0NiwyNjYyMDkuMjU4NDI3ODUwNTUsNzc0Nzg5Ljc5MDI3NDkwNjIsNTE1OTg4LjMyOTA5MzIyOTI2LDc2MjI3Ni42NDEzNDMxODM1LDg0NjQ4OC44ODkxNDM3Mzk2LDc1MzAyOC42NDUwODQ1NDY4LDE3MTY1MTIuNTAzNDAzMzQzNSwxMDk0NjQuOTY4ODE4NDQ5OTIsMTM3MC41OTU3NTUzMTI3MjAzCis2LFN1biAzMCBKYW4gMTEsNjA2MTYuOTkwMDc5Mzg5Njk2LDU0MTIyLjEyMTgxNDY0OTM4NSwzMTUwMy40ODAxMzI1NTkwNDUsNjUxMjUuOTY4NTU2ODMxMDMsNjU2NDYuMzIyMjE2ODMxODksMTA2MTE5OC41MzA3NzA2Nzg1LDExNTMyMDMuMzQ0MDEwNDI4LDk0NTE2MC4yODA4Nzk4NTg2LDgyMDk2Ny4wODQ1ODUxNDg2LDEwMjY0MTUuNTY5NDU4MzkwMSwyMDg0MzQuODE3NzQxNTUyOTgsMTIxODQ3MS40Njk5ODI0NjY3LDI0MTE0Mi41MjczMDc1NjA1Miw2NDAxNDAuNTkyNzEzNTExMSw1NzIxNjkuMDEwNjk1MDQwOSwxMzEzNDY0LjA1NDA5OTA2MjcsOTUxNTUyLjg0NTEwODc5OTMsMjY3NjExLjk1MDQxNzQ4OTg2LDc3ODg3Mi4yNjA3MzAyNTg1LDUxODcwNy4xNDAyMjc5MDE0LDc2NjI5My4xNzgzNTI1MTE2LDg1MDk0OS4xNTE2ODczMjIxLDc1Njk5Ni40NTMxNzE1NjQ2LDE3MjU1NTcuMDM2MDg3MzY0MiwxMTAwNDEuNzU0Mjk4NDY4NzMsMTM3Ny44MTc2MDY2NDI2Mjc3Cis3LE1vbiAzMSBKYW4gMTEsNjA5MzMuMzYxMjQyOTcyOTEsNTQ0MDQuNTk1MDcyMjU2OTksMzE2NjcuOTAyNTYwMjIxNzMzLDY1NDY1Ljg3MjkwNDE5MDE0LDY1OTg4Ljk0MjM4NTE2MjUzLDEwNjY3MzcuMTIwMDkyNDY3OSwxMTU5MjIyLjEyMzI4ODU2MTEsOTUwMDkzLjI0NTM0MTUyMTUsODI1MjUxLjg2MjAyOTEyMiwxMDMxNzcyLjYyMDE0MDEyNDUsMjA5NTIyLjY3NzE5NzAyNTU0LDEyMjQ4MzAuODk1NTUzNTIyNSwyNDI0MDEuMDk0Mjg0NDcyLDY0MzQ4MS42MDM2MDY4LDU3NTE1NS4yNjU0NjM1OTMsMTMyMDMxOS4yNjMzNDk0MDM0LDk1NjUxOS4xNzM1MzI5NTQyLDI2OTAwOC42NjYxNTcyNzYyLDc4MjkzNy4zMzc1ODU1NjI2LDUyMTQxNC4zNjc3MTE0NDg0Niw3NzAyOTIuNjAyNjc1MDI4Myw4NTUzOTAuNDExMDI1OTQ3OCw3NjA5NDcuMzU2MTg0MTQ1NywxNzM0NTYzLjAzNDAxOTk3NjQsMTEwNjE2LjA4MjM1MDc5NDQ3LDEzODUuMDA4Njg4ODU5ODA5MQorOCxUdWUgMSBGZWIgMTEsNjEyNDguMzgwMTgxNDk4ODA0LDU0Njg1Ljg2MDk5MDMxODc0NiwzMTgzMS42MjIyMTc5OTgwODcsNjU4MDQuMzI0NDQxNTk1MzEsNjYzMzAuMDk4MTM1NjUwODMsMTA3MjI1Mi4wMzY1MjU4MTA4LDExNjUyMTUuMTc3MjYzMzQ0Miw5NTUwMDUuMTI1NDYwMTA5Nyw4Mjk1MTguMzI1NTkzNDEzMSwxMDM3MTA2Ljc3Mzg2MDk1MDMsMjEwNjA1Ljg4Njk1MzA4MjE3LDEyMzExNjMuMTM5ODQwMDcwNiwyNDM2NTQuMjgxOTI4NTAzNjIsNjQ2ODA4LjMzNDQ0MTgzMjIsNTc4MTI4Ljc1NjQ2MjkwNjgsMTMyNzE0NS4xNzIyNTAwNjQ4LDk2MTQ2NC4yNzUwMTA2ODk3LDI3MDM5OS40MTIwOTI0ODI3LDc4Njk4NS4wMzk1OTk0ODkyLDUyNDExMC4wMjQwMzY2MjA0NSw3NzQyNzQuOTMyNzY2NDQ0Niw4NTk4MTIuNjg3NjU0MjE2LDc2NDg4MS4zNzIzNTQwOTUsMTc0MzUzMC41Mzg3NjAxODU1LDExMTE4Ny45NTU2MjU3MTY3NCwxMzkyLjE2OTAzNTE0ODE3NDgKKzksV2VkIDIgRmViIDExLDYxNTYyLjA0ODM2MDg5NTQ3LDU0OTY1LjkyMDg3NzY5NDQxLDMxOTk0LjYzOTg2Nzc1MTAyLDY2MTQxLjMyNDc0NDAxNzMxLDY2NjY5Ljc5MTA1NTg1MTQ2LDEwNzc3NDMuMzA1NzM0MTUxNywxMTcxMTgyLjUzMzgyMzIxNTQsOTU5ODk1Ljk0NDA5Mjg2MTcsODMzNzY2LjQ5NTEzMTg0MDMsMTA0MjQxOC4wNTU0NDMxMzk0LDIxMTY4NC40NTIwNTAzOTYzMywxMjM3NDY4LjIzMjMwODk1OCwyNDQ5MDIuMDk2MDcxMzE0MjQsNjUwMTIwLjgwMDY5OTQxNzIsNTgxMDg5LjQ5NzUzMDAwNDYsMTMzMzk0MS44MTI1NjUxNDIsOTY2Mzg4LjE3MjU1MzgzODcsMjcxNzg0LjE5NDY5NDg5MDEsNzkxMDE1LjM4NTYwNzg1ODQsNTI2Nzk0LjEyMTc0NzU0NjgsNzc4MjQwLjE4NzE1ODM3NTMsODY0MjE2LjAwMjE1MTAxNSw3Njg3OTguNTE5OTg4MjAwMiwxNzUyNDU5LjU5MjAzNzkxNzYsMTExNzU3LjM3Njc4NDQyNTA0LDEzOTkuMjk4Njc4ODI4MTEwNworMTAsVGh1IDMgRmViIDExLDYxODc0LjM2NzI1MzA2NzI4NSw1NTI0NC43NzYwNDg1Nzk2OSwzMjE1Ni45NTYyNzQ0NDkzOTYsNjY0NzYuODc1MzkyODQ3NzQsNjcwMDguMDIyNzM5NzkxMjcsMTA4MzIxMC45NTM0ODU1NTkyLDExNzcxMjQuMjIwOTcwMzA4NCw5NjQ3NjUuNzI0MTkwMjAwNyw4Mzc5OTYuMzkwNTc5MTYyMiwxMDQ3NzA2LjQ4OTgxMDE1OTMsMjEyNzU4LjM3NzU1MDE5MTMzLDEyNDM3NDYuMjAyNTQ3MTYxNiwyNDYxNDQuNTQyNTY4MzM3MTQsNjUzNDE5LjAxNzkyMzQ3NjksNTg0MDM3LjUwMjU1ODMxODksMTM0MDcwOS4yMTYxODgyMjY0LDk3MTI5MC44ODkyNjgwNDg3LDI3MzE2My4wMjA0NjI2NjM1NSw3OTUwMjguMzk0NTIzMjgwMyw1Mjk0NjYuNjczNDM5NDk2OSw3ODIxODguMzg0NDU3OTg0NCw4Njg2MDAuMzc1MTc5MTI5MSw3NzI2OTguODE3NDY3ODgyLDE3NjEzNTAuMjM1NzUzMjIzNSwxMTIzMjQuMzQ4NDk4OTU4MDMsMTQwNi4zOTc2NTMzNTU4NDQKKzExLEZyaSA0IEZlYiAxMSw2MjE4NS4zMzgzMzU4NjY5OCw1NTUyMi40Mjc4MjI0ODEzLDMyMzE4LjU3MjIwNjE1MzUyNyw2NjgxMC45Nzc5NzU4Njg5OCw2NzM0NC43OTQ3ODc5Mzg5OCwxMDg4NjU1LjAwNTY1MjIzNzUsMTE4MzA0MC4yNjY4MTk5MjA2LDk2OTYxNC40ODg3OTUyOTc5LDg0MjIwOC4wMzE5NTA2OTg0LDEwNTI5NzIuMTAxOTg2MTk5NiwyMTM4MjcuNjY4NTM0MTQ0MTUsMTI0OTk5Ny4wODAyNjEyMjcyLDI0NzM4MS42MjcyOTg2Njg5Niw2NTY3MDMuMDAxNzIwNzQ5Nyw1ODY5NzIuNzg1NDk3NDI5NSwxMzQ3NDQ3LjQxNTE0MTc5OSw5NzYxNzIuNDQ4MzUyMzQyOSwyNzQ1MzUuODk1OTIwMjI4NzQsNzk5MDI0LjA4NTMzNDc5NTgsNTMyMTI3LjY5MTc1ODY0MDYsNzg2MTE5LjU0MzM0NzYzMjUsODcyOTY1LjgyNzQ4NDg0Niw3NzY1ODIuMjgzMjQ4ODQ1MSwxNzcwMjAyLjUxMTk3NTQ4MzMsMTEyODg4Ljg3MzQ1MjE1Mjc3LDE0MTMuNDY1OTkyMzIyODA2OQorMTIsU2F0IDUgRmViIDExLDYyNDk0Ljk2MzA5MzA2NzcyLDU1Nzk4Ljg3NzUyNDE5MjA0LDMyNDc5LjQ4ODQzNDAwMDY1LDY3MTQzLjYzNDA4NzIyNDI3LDY3NjgwLjEwODgwNzE3NDk3LDEwOTQwNzUuNDg4MjEwMDM3MSwxMTg4OTMwLjY5OTU5OTk4MjIsOTc0NDQyLjI2MTA0MzYzODUsODQ2NDAxLjQzOTM0MTk1MjIsMTA1ODIxNC45MTcwOTU2OTkzLDIxNDg5Mi4zMzAxMDQyODk1MiwxMjU2MjIwLjg5NTI3NjcwNzgsMjQ4NjEzLjM1NjE2NDk1ODYsNjU5OTcyLjc2Nzc2MDQ5NjUsNTg5ODk1LjM2MDM1Mjc5OTYsMTM1NDE1Ni40NDE1NzY2MjY5LDk4MTAzMi44NzMwOTg2ODI1LDI3NTkwMi44Mjc2MTgxNDg5Myw4MDMwMDIuNDc3MTA3NTE3NSw1MzQ3NzcuMTg5NDAxODA5OCw3OTAwMzMuNjgyNTg0NTIzNyw4NzczMTIuMzc5ODk3NTY1NSw3ODA0NDguOTM1ODYwNzI5OSwxNzc5MDE2LjQ2Mjk0MjYxMDUsMTEzNDUwLjk1NDMzNzU5NDAxLDE0MjAuNTAzNzI5NDU1MDAyCisxMyxTdW4gNiBGZWIgMTEsNjI4MDMuMjQzMDE0MzM1MjEsNTYwNzQuMTI2NDgzNzY1ODc1LDMyNjM5LjcwNTczMjE5MDQ0Myw2NzQ3NC44NDUzMjczODc3LDY4MDEzLjk2NjQxMDc2MTAzLDEwOTk0NzIuNDI3MjM3OTY4LDExOTQ3OTUuNTQ3NjUwNTI2LDk3OTI0OS4wNjQxNjI1ODU3LDg1MDU3Ni42MzI5MjgyMzI5LDEwNjM0MzQuOTYwMzYyODc0NywyMTU5NTIuMzY3MzgyOTIzOTksMTI2MjQxNy42Nzc1Mzc2MDQsMjQ5ODM5LjczNTA5MzI5NjI3LDY2MzIyOC4zMzE3NzQyMDU5LDU5MjgwNS4yNDExODU1MTI1LDEzNjA4MzYuMzI3NzcxMTU3Nyw5ODU4NzIuMTg2ODkxNTI4NCwyNzcyNjMuODIyMTMzMDAxOSw4MDY5NjMuNTg4OTgyMjcyMiw1Mzc0MTUuMTc5MTE2MjU5Nyw3OTM5MzAuODIxMDAwMzUyOSw4ODE2NDAuMDUzMzI5NDA3NSw3ODQyOTguNzkzOTA2NzYzOSwxNzg3NzkyLjEzMTA2MDI1OTksMTE0MDEwLjU5Mzg1OTU2MzY1LDE0MjcuNTEwODk4NjEyMzY5NgorMTQsTW9uIDcgRmViIDExLDYzMTEwLjE3OTU5NTE5OTg2NSw1NjM0OC4xNzYwMzY0OTMxMiwzMjc5OS4yMjQ4Nzc5NzA1NSw2NzgwNC42MTMzMDMxMzQzLDY4MzQ2LjM2OTIxODMxMDI3LDExMDQ4NDUuODQ4OTE3NzEwNiwxMjAwNjM0LjgzOTQyMzE1NzMsOTg0MDM0LjkyMTQ3MDk0NzMsODU0NzMzLjYzMjk2NDI3ODMsMTA2ODYzMi4yNTcxMTEyNDgsMjE3MDA3Ljc4NTUxMjUxMDI1LDEyNjg1ODcuNDU3MTA1ODAzLDI1MTA2MC43NzAwMzMxMDI4Niw2NjY0NjkuNzA5NTU1MzAwMyw1OTU3MDIuNDQyMTEyMDA5MiwxMzY3NDg3LjEwNjEzMDkxNzgsOTkwNjkwLjQxMzIwNzQwNDcsMjc4NjE4Ljg4NjA2NzI1Njc0LDgxMDkwNy40NDAxNzUyNDI1LDU0MDA0MS42NzM2OTk0MzA0LDc5NzgxMC45Nzc1MDA5NTQxLDg4NTk0OC44Njg3NzQ4MjE1LDc4ODEzMS44NzYwNjM0MTQsMTc5NjUyOS41NTg5MDEwMzQsMTE0NTY3Ljc5NDczMjk5MDE0LDE0MzQuNDg3NTMzNzg4MTUzMworMTUsVHVlIDggRmViIDExLDYzNDE1Ljc3NDMzNzAyODk5LDU2NjIxLjAyNzUyMjg3NTU4LDMyOTU4LjA0NjY1MTYyMjEyLDY4MTMyLjkzOTYyNzUxMDIsNjg2NzcuMzE4ODU1NzU2OTcsMTExMDE5NS43Nzk1MzMxMzAxLDEyMDY0NDguNjAzNDgwNTI0Niw5ODg3OTkuODU2Mzc4NTQyMyw4NTg4NzIuNDU5NzgzODc4NCwxMDczODA2LjgzMjc2MzE3NywyMTgwNTguNTg5NjU1NTgxNDgsMTI3NDczMC4yNjQxNjA1MjEsMjUyMjc2LjQ2Njk1NzAxOTEyLDY2OTY5Ni45MTY5NTg4NDIxLDU5ODU4Ni45NzczMDM4MjU0LDEzNzQxMDguODA5MTg3OTA4LDk5NTQ4Ny41NzU2MTQ0NjE2LDI3OTk2OC4wMjYwNDkxNTE1LDgxNDgzNC4wNDk5Nzc2MDk4LDU0MjY1Ni42ODU5OTg3MDkzLDgwMTY3NC4xNzEwNjU5NDg5LDg5MDIzOC44NDczMTAxOTYxLDc5MTk0OC4yMDEwODAwMzk3LDE4MDUyMjguNzg5MjAzNjkyLDExNTEyMi41NTk2ODMzOTc5NywxNDQxLjQzMzY2OTEwODI2OTQKKzE2LFdlZCA5IEZlYiAxMSw2MzcyMC4wMjg3NDY5OTkwMTQsNTY4OTIuNjgyMjg4NjAxNzQsMzMxMTYuMTcxODM2NDQ1MzksNjg0NTkuODI1OTE5ODAyNzQsNjkwMDYuODE2OTU1MzI2NSwxMTE1NTIyLjI0NTQ2OTc4OTUsMTIxMjIzNi44Njg0OTU3OTIyLDk5MzU0My44OTIzODU3NjY4LDg2Mjk5My4xMzM3OTk0OTg5LDEwNzg5NTguNzEyODM5MzgzNCwyMTkxMDQuNzg0OTk0NjQ1OCwxMjgwODQ2LjEyODk5Nzc0MzgsMjUzNDg2LjgzMTg2MDc5NTMsNjcyOTA5Ljk2OTkwMTI0MDMsNjAxNDU4Ljg2MDk4NzMyOTksMTM4MDcwMS40Njk2MDAwMDMsMTAwMDI2My42OTc3NzIwMzk4LDI4MTMxMS4yNDg3MzI1NzAxNSw4MTg3NDMuNDM3NzU1MTk3Miw1NDUyNjAuMjI4OTExMTkyOSw4MDU1MjAuNDIwNzQ4Mzk1MSw4OTQ1MTAuMDEwMDkzNDY5Miw3OTU3NDcuNzg3Nzc4NTQ1NiwxODEzODg5Ljg2NDg3MjM1ODMsMTE1Njc0Ljg5MTQ0Njg1NzMsMTQ0OC4zNDkzMzg4MzA2NzQ1CisxNyxUaHUgMTAgRmViIDExLDY0MDIyLjk0NDMzODA2Nzc1LDU3MTYzLjE0MTY4NDUyMjA0LDMzMjczLjYwMTIxODc0NTI3LDY4Nzg1LjI3MzgwNTUxMDY3LDY5MzM0Ljg2NTE1NTUwNTMxLDExMjA4MjUuMjczMjE0NDY0LDEyMTc5OTkuNjYzMjUyMTExMyw5OTgyNjcuMDUzMDgzMTYyOCw4NjcwOTUuNjc1NTAxOTA1OCwxMDg0MDg3LjkyMjk1ODQ4NDIsMjIwMTQ2LjM3NjczMjA5MDkyLDEyODY5MzUuMDgyMDI5NjY5OCwyNTQ2OTEuODcwNzYzMTgwNzUsNjc2MTA4Ljg4NDM1OTk1NzksNjA0MzE4LjEwNzQ0MzQ2MjEsMTM4NzI2NS4xMjAxNTAzNDk4LDEwMDUwMTguODAzNDMwMjM0OSwyODI2NDguNTYwNzk2OTIwNDQsODIyNjM1LjYyMjk0ODExMzQsNTQ3ODUyLjMxNTM4MzQ0OTUsODA5MzQ5Ljc0NTY3NDQzNjIsODk4NzYyLjM3ODM2MzczODEsNzk5NTMwLjY1NTA1MzAzNTUsMTgyMjUxMi44Mjg5NzU3MzMxLDExNjIyNC43OTI3Njk5MzM2MywxNDU1LjIzNDU3NzM0NDczNTMKKzE4LEZyaSAxMSBGZWIgMTEsNjQzMjQuNTIyNjI4OTQ2Njc0LDU3NDMyLjQwNzA2NjYyNDA5LDMzNDMwLjMzNTU4NzgxNjkyLDY5MTA5LjI4NDkxNjMxNDQ0LDY5NjYxLjQ2NTEwMTAxMDg2LDExMjYxMDQuODg5MzU0NjU2NywxMjIzNzM3LjAxNjY0MjA5NCwxMDAyOTY5LjM2MjE1MDk4NDgsODcxMTgwLjEwNTQ1OTc5MDIsMTA4OTE5NC40ODg4MzY1MjIyLDIyMTE4My4zNzAwOTAwODg5MiwxMjkyOTk3LjE1Mzc4NDE1MjgsMjU1ODkxLjU4OTcwNTgxMzcsNjc5MjkzLjY3NjM3MzIxODksNjA3MTY0LjczMTAwNzQ3MTIsMTM5Mzc5OS43OTM3NDY3NjczLDEwMDk3NTIuOTE2NDI5NDYyNSwyODM5NzkuOTY4OTQ3MDExNCw4MjY1MTAuNjI1MDcwMzk2Miw1NTA0MzIuOTU4NDExMjgzLDgxMzE2Mi4xNjUwNDI5NTA5LDkwMjk5NS45NzM0NDA4NzEyLDgwMzI5Ni44MjE4Njk0NjU5LDE4MzEwOTcuNzI0NzQ2MzA0NiwxMTY3NzIuMjY2NDA5NjM3MzksMTQ2Mi4wODk0MTkxNzA1OTkKKzE5LFNhdCAxMiBGZWIgMTEsNjQ2MjQuNzY1MTQ0MDczMjcsNTc3MDAuNDc5Nzk2MDA3OTksMzM1ODYuMzc1NzM1OTMxMzc1LDY5NDMxLjg2MDg5MDA0NjM5LDY5OTg2LjYxODQ0Mjc2MTc0LDExMzEzNjEuMTIwNTc4MTEzMiwxMjI5NDQ4Ljk1NzY2NzI4NTYsMTAwNzY1MC44NDMzNTg3Njk1LDg3NTI0Ni40NDQzMTkzOTM0LDEwOTQyNzguNDM2Mjg2NDk3NiwyMjIyMTUuNzcwMzEwNTAxMDIsMTI5OTAzMi4zNzQ5MDQxNDYsMjU3MDg1Ljk5NDc1MzExMTI0LDY4MjQ2NC4zNjIwMzk3MTYzLDYwOTk5OC43NDYwNjg2NTQzLDE0MDAzMDUuNTIzNDIxMTQ3NCwxMDE0NDY2LjA2MDcwMDAyMzcsMjg1MzA1LjQ3OTkxMjkzMTIsODMwMzY4LjQ2MzcwOTY1NzcsNTUzMDAyLjE3MTAzOTQ5NDcsODE2OTU3LjY5ODEyNTIwMzcsOTA3MjEwLjgxNjcyNTExOTQsODA3MDQ2LjMwNzI2NTMwMDksMTgzOTY0NC41OTU1Nzk1NjAxLDExNzMxNy4zMTUxMzMzNzM4NCwxNDY4LjkxMzg5ODk1ODU2NDUKKzIwLFN1biAxMyBGZWIgMTEsNjQ5MjMuNjczNDEzNTgzNDEsNTc5NjcuMzYxMjM4ODYxNjUsMzM3NDEuNzIyNDU4MzIxMjEsNjk3NTMuMDAzMzcwNjYxMTMsNzAzMTAuMzI2ODM3ODQ3NjYsMTEzNjU5My45OTM2NzIzMzg1LDEyMzUxMzUuNTE1NDM3NjQwMiwxMDEyMzExLjUyMDU2NDkwNDQsODc5Mjk0LjcxMjgwNDEzMjQsMTA5OTMzOS43OTEyMTc4OTk2LDIyMzI0My41ODI2NTQ3ODI1NywxMzA1MDQwLjc3NjE0NzE0NjIsMjU4Mjc1LjA5MTk5MjE1OTMsNjg1NjIwLjk1NzUxODMyMDQsNjEyODIwLjE2NzA3MDA5NjIsMTQwNjc4Mi4zNDIzMjg4NTUsMTAxOTE1OC4yNjAyNjE2NzE1LDI4NjYyNS4xMDA0NDk5MjUyMyw4MzQyMDkuMTU4NTI2NzI4Myw1NTU1NTkuOTY2MzYxNjQ3OSw4MjA3MzYuMzY0MjY0NDk1NCw5MTE0MDYuOTI5Njk2NzI3Nyw4MTA3NzkuMTMwMzQ5MTY2OSwxODQ4MTUzLjQ4NTAzMzIwMDEsMTE3ODU5Ljk0MTcxODg5Mjc5LDE0NzUuNzA4MDUxNDg4NDUzNQorMjEsTW9uIDE0IEZlYiAxMSw2NTIyMS4yNDg5NzMyODM3Miw1ODIzMy4wNTI3NjY0MzYxNywzMzg5Ni4zNzY1NTMxNjYxNiw3MDA3Mi43MTQwMDgyMDU4NSw3MDYzMi41OTE5NDk0OTk2MywxMTQxODAzLjUzNTUyNDExMzgsMTI0MDc5Ni43MTkxNzA5OTUsMTAxNjk1MS40MTc3MTYxOTc2LDg4MzMyNC45MzE3MTQyMjY3LDExMDQzNzguNTc5NjM2MjQwMSwyMjQyNjYuODEyNDAzODg4MjQsMTMxMTAyMi4zODgzODQ2Mzk1LDI1OTQ1OC44ODc1MzI2MDI4OCw2ODg3NjMuNDc5MDI3Nzg3MSw2MTU2MjkuMDA4NTA4NDA4NCwxNDEzMjMwLjI4Mzc0ODEzMTUsMTAyMzgyOS41MzkyMjMxNzc1LDI4NzkzOC44MzczMzgyNzQxNyw4MzgwMzIuNzI5MjU1MzAyOSw1NTgxMDYuMzU3NTE5ODMxNiw4MjQ0OTguMTgyODc1ODE0Myw5MTU1ODQuMzMzOTE1NTQ4NCw4MTQ0OTUuMzEwMzAwNTA4MiwxODU2NjI0LjQzNjgyNjM1MjUsMTE4NDAwLjE0ODk1NDIzODU4LDE0ODIuNDcxOTExNjY4OTg0NAorMjIsVHVlIDE1IEZlYiAxMSw2NTUxNy40OTMzNjQ2MjQwNCw1ODQ5Ny41NTU3NTUwMjExOTYsMzQwNTAuMzM4ODIxNTc4ODQsNzAzOTAuOTk0NDU4NzkwNzIsNzA5NTMuNDE1NDQ3MDYwMDYsMTE0Njk4OS43NzMxMTkwMTM1LDEyNDY0MzIuNTk4MTkyNTQ1OCwxMDIxNTcwLjU1ODg0NzQ0NzcsODg3MzM3LjEyMTkyNjMyNDYsMTEwOTM5NC44Mjc2NDI1ODYsMjI1Mjg1LjQ2NDg1ODE3NzEyLDEzMTY5NzcuMjQyNjAxNTQ3LDI2MDYzNy4zODc1MDY1MzY0Nyw2OTE4OTEuOTQyODQ2NDY2OSw2MTg0MjUuMjg0OTMzNDY5MywxNDE5NjQ5LjM4MTA3OTQ5NiwxMDI4NDc5LjkyMTc4MTg5OTIsMjg5MjQ2LjY5NzM4MzE3MjM0LDg0MTgzOS4xOTU3MDE1ODYzLDU2MDY0MS4zNTc3MDQ0MjQxLDgyODI0My4xNzM0NDU0ODczLDkxOTc0My4wNTEwMjA2NTM5LDgxODE5NC44NjYzNjkyNDIxLDE4NjUwNTcuNDk0ODM4Nzg3NywxMTg5MzcuOTM5NjM3NzAwMDIsMTQ4OS4yMDU1MTQ1MzcxNDQ2CisyMyxXZWQgMTYgRmViIDExLDY1ODEyLjQwODEzNDY2OTg4LDU4NzYwLjg3MTU4NTkyMDM1LDM0MjAzLjYxMDA2NzU5MDM5LDcwNzA3Ljg0NjM4NDU1OTMyLDcxMjcyLjc5OTAwNTk1Mjk4LDExNTIxNTIuNzMzNTQwOTIzOCwxMjUyMDQzLjE4MTkzNDMyMzYsMTAyNjE2OC45NjgwODEwMTU0LDg5MTMzMS4zMDQzOTMxMzAyLDExMTQzODguNTYxNDMzMDkzNCwyMjYyOTkuNTQ1MzM3MzE4MTgsMTMyMjkwNS4zNjk4OTU2NzEzLDI2MTgxMC41OTgwNjgzOTQ0Nyw2OTUwMDYuMzY1MzEyMDE0Miw2MjEyMDkuMDEwOTQ4MTYzOSwxNDI2MDM5LjY2Nzg0NTE0OTgsMTAzMzEwOS40MzIyMjMzNDc4LDI5MDU0OC42ODc0MTQ2MDYyLDg0NTYyOC41Nzc3NDM5Mzk2LDU2MzE2NC45ODAxNTM4NTc3LDgzMTk3MS4zNTU1MzA4MzI0LDkyMzg4My4xMDI3Mjk5NTAxLDgyMTg3Ny44MTc4NzU0MTU5LDE4NzM0NTIuNzAzMTEwMTM1NCwxMTk0NzMuMzE2NTc3NzYwNCwxNDk1LjkwODg5NTI1NzU2NTUKKzI0LFRodSAxNyBGZWIgMTEsNjYxMDUuOTk0ODM2MDc0OTUsNTkwMjMuMDAxNjQ1NDI2NzEsMzQzNTYuMTkxMDk4MTM2MTk0LDcxMDIzLjI3MTQ1MzY1OTA4LDcxNTkwLjc0NDMwNzY1NDI1LDExNTcyOTIuNDQzOTcxNTYxLDEyNTc2MjguNDk5OTM0NjcxNCwxMDMwNzQ2LjY2OTYyNjM5MzgsODk1MzA3LjUwMDE0MzAzMTgsMTExOTM1OS44MDcyOTg1NDIsMjI3MzA5LjA1OTE4MDE5NTY1LDEzMjg4MDYuODAxNDc3MTQ0MiwyNjI5NzguNTI1Mzk0ODQxODUsNjk4MTA2Ljc2MjgyMTA5NzMsNjIzOTgwLjIwMTIwODEyNSwxNDMyNDAxLjE3NzY4ODM4MSwxMDM3NzE4LjA5NDkyMDc1NywyOTE4NDQuODE0Mjg3MjMzMDUsODQ5NDAwLjg5NTMzMjUyNyw1NjU2NzcuMjM4MTU0Mzg0MSw4MzU2ODIuNzQ4NzU5ODExMyw5MjgwMDQuNTEwODM5NzkwOCw4MjU1NDQuMTg0MjA4ODYzMiwxODgxODEwLjEwNTgzOTEwMTYsMTIwMDA2LjI4MjU5MzA0NzU4LDE1MDIuNTgyMDg5MTIxODk3MworMjUsRnJpIDE4IEZlYiAxMSw2NjM5OC4yNTUwMjcwNTM3LDU5MjgzLjk0NzMyNDc5ODI2LDM0NTA4LjA4MjcyMzA0MTY2LDcxMzM3LjI3MTM0MDIxMTgsNzE5MDcuMjUzMDM5NjYxODQsMTE2MjQwOC45MzE2ODk5OTE0LDEyNjMxODguNTgxODM3NzIyMywxMDM1MzAzLjY4Nzc3OTc4MTIsODk5MjY1LjczMDI3OTcyOTIsMTEyNDMwOC41OTE2MjM4NzA0LDIyODMxNC4wMTE3NDQ4MTQ2NiwxMzM0NjgxLjU2ODY2Nzg3NDcsMjY0MTQxLjE3NTY4NDY2NSw3MDExOTMuMTUxODI5MTA3Nyw2MjY3MzguODcwNDIxNDczNCwxNDM4NzMzLjk0NDM3Mjk2ODMsMTA0MjMwNS45MzQzMzQ2NTE1LDI5MzEzNS4wODQ4ODAyNTk0Nyw4NTMxNTYuMTY4NDg4OTYyOSw1NjgxNzguMTQ1MDM5ODM4Miw4MzkzNzcuMzcyODMwNjgxNiw5MzIxMDcuMjk3MjI0NTkyLDgyOTE5My45ODQ4Mjg4NjExLDE4OTAxMjkuNzQ3MzgyNjg3NCwxMjA1MzYuODQwNTEyMjg0MiwxNTA5LjIyNTEzMTU0ODE4NTMKKzI2LFNhdCAxOSBGZWIgMTEsNjY2ODkuMTkwMjcxMzUzODksNTk1NDMuNzEwMDIwMjMzNDMsMzQ2NTkuMjg1NzU1MDA3OTEsNzE2NDkuODQ3NzI0Mjg0MTksNzIyMjIuMzI2ODk1NDY2MTIsMTE2NzUwMi4yMjQwNzIxNTA0LDEyNjg3MjMuNDU3MzkyODc3LDEwMzk4NDAuMDQ2OTIzNjUyOCw5MDMyMDYuMDE1OTgxODYyOCwxMTI5MjM0Ljk0MDg4NzcxMiwyMjkzMTQuNDA4NDA4MjA2OTIsMTM0MDUyOS43MDI5MDA5OTc2LDI2NTI5OC41NTUxNTg2NjI0LDcwNDI2NS41NDg4NDk4NzEzLDYyOTQ4NS4wMzMzNDg1NTk0LDE0NDUwMzguMDAxNzgyNTg4LDEwNDY4NzIuOTc1MDEyNDE2NywyOTQ0MTkuNTA2MDk3MzIwNzYsODU2ODk0LjQxNzMwNTk1OTksNTcwNjY3LjcxNDE5MTQwNDUsODQzMDU1LjI0NzUxMTY1MDksOTM2MTkxLjQ4MzgzNjQ0NjksODMyODI3LjIzOTI2Mzc4NzYsMTg5ODQxMS42NzIyNTU0MDg1LDEyMTA2NC45OTMxNzQyMzc4MSwxNTE1LjgzODA1ODA4MDI0NjQKKzI3LFN1biAyMCBGZWIgMTEsNjY5NzguODAyMTM4MjI5MTksNTk4MDIuMjkxMTMyODQ2NjYsMzQ4MDkuODAxMDA5NTk3NTksNzE5NjEuMDAyMjkxODU4NDYsNzI1MzUuOTY3NTc0NTIwMiwxMTcyNTcyLjM0ODU5MDM2NCwxMjc0MjMzLjE1NjQ1NDI4MzUsMTA0NDM1NS43NzE1MjYzMzQzLDkwNzEyOC4zNzg1MDI2NDI2LDExMzQxMzguODgxNjYxOTMwNiwyMzAzMTAuMjU0NTY2MzM2NiwxMzQ2MzUxLjIzNTcyMDMyMzQsMjY2NDUwLjY3MDA1OTUzNTk0LDcwNzMyMy45NzA0NTUzNTg3LDYzMjIxOC43MDQ4MDE3MDQyLDE0NTEzMTMuMzgzOTIwMjIwMiwxMDUxNDE5LjI0MTU4Nzg2OTEsMjk1Njk4LjA4NDg2NjM1OTY2LDg2MDYxNS42NjE5NDY5NzYzLDU3MzE0NS45NTkwMzczODI2LDg0NjcxNi4zOTI2NDA1MzAxLDk0MDI1Ny4wOTI3MDQ3NDIsODM2NDQzLjk2NzExMDc4MDIsMTkwNjY1NS45MjUxMjg1MTUsMTIxNTkwLjc0MzQyNzY3MTI3LDE1MjIuNDIwOTA0Mzg3MDQ2MgorMjgsTW9uIDIxIEZlYiAxMSw2NzI2Ny4wOTIyMDI0MTE4OCw2MDA1OS42OTIwNjg2NDM5MjYsMzQ5NTkuNjI5MzA1MjIwNjMsNzIyNzAuNzM2NzM0ODAyOTEsNzI4NDguMTc2NzgyMjEwMzQsMTE3NzYxOS4zMzI4MTI4Njk1LDEyNzk3MTcuNzA4OTgwMzE3LDEwNDg4NTAuODg2MTQxNTc1NCw5MTEwMzIuODM5MTY5NDc4LDExMzkwMjAuNDQwNjExMTU4LDIzMTMwMS41NTU2MzQwMDYyNSwxMzUyMTQ2LjE5ODc3OTc4ODYsMjY3NTk3LjUyNjY1MTc4MjE2LDcxMDM2OC40MzMyNzUzOTY5LDYzNDkzOS44OTk2NDQ5NDE4LDE0NTc1NjAuMTI0OTA3NTU2NSwxMDU1OTQ0Ljc1ODc4MDgyNywyOTY5NzAuODI4MTM5NTA1OSw4NjQzMTkuOTIyNjQ1ODY1Niw1NzU2MTIuODkzMDUyOTUyNyw4NTAzNjAuODI4MTI0Mzg4Miw5NDQzMDQuMTQ1OTM1NzcyNiw4NDAwNDQuMTg4MDM1MzkzNiwxOTE0ODYyLjU1MDgyOTIxMzgsMTIyMTE0LjA5NDEzMTI5MzAyLDE1MjguOTczNzA2MjYyMDc4NgorMjksVHVlIDIyIEZlYiAxMSw2NzU1NC4wNjIwNDQwODU1LDYwMzE1LjkxNDIzODQ5ODQzLDM1MTA4Ljc3MTQ2MzEyMDA2LDcyNTc5LjA1Mjc1MDg0MjYsNzMxNTguOTU2MjI5ODI2MzgsMTE4MjY0My4yMDQ0MDMzMzc2LDEyODUxNzcuMTQ1MDMzMDU5NiwxMDUzMzI1LjQxNTQwODEyMzUsOTE0OTE5LjQxOTM4MzYwNzgsMTE0Mzg3OS42NDQ0OTIzMzEyLDIzMjI4OC4zMTcwNDQ3NjI5NSwxMzU3OTE0LjYyMzg0MjkwNiwyNjg3MzkuMTMxMjIxNTgzNCw3MTMzOTguOTUzOTk3MzgwMyw2Mzc2NDguNjMyNzkzNzYxMywxNDYzNzc4LjI1ODk4NDQwNzYsMTA2MDQ0OS41NTEzOTY2ODE1LDI5ODIzNy43NDI4OTI5NTUzLDg2ODAwNy4yMTk3MDY1MjQ3LDU3ODA2OC41Mjk3NTk5NDIzLDg1Mzk4OC41NzM5MzkyMDY3LDk0ODMzMi42NjU3MTIzNTk4LDg0MzYyNy45MjE3NzEyNTkyLDE5MjMwMzEuNTk0MzM5ODkwNCwxMjI2MzUuMDQ4MTUzNzA3NTQsMTUzNS40OTY0OTk2MjI3NDQKKzMwLFdlZCAyMyBGZWIgMTEsNjc4MzkuNzEzMjQ4ODU3NTksNjA1NzAuOTU5MDU4MTI2MTk1LDM1MjU3LjIyODMwNzM1Nzg0LDcyODg1Ljk1MjA0MzUzMDA3LDczNDY4LjMwNzYzNDUzMjE1LDExODc2NDMuOTkxMTIwMzk1LDEyOTA2MTEuNDk0Nzc3NzgyMSwxMDU3Nzc5LjM4NDA0OTI5OTIsOTE4Nzg4LjE0MDYxOTczMDUsMTE0ODcxNi41MjAxNTQyMzEsMjMzMjcwLjU0NDI1MDgwNDQ3LDEzNjM2NTYuNTQyNzgyMjE3NSwyNjk4NzUuNDkwMDc2Njk5MzUsNzE2NDE1LjU0OTM2NTk4MzIsNjQwMzQ0LjkxOTIxNDg0OTUsMTQ2OTk2Ny44MjA1MDgxMTMxLDEwNjQ5MzMuNjQ0MzI1OTY4LDI5OTQ5OC44MzYxMjY4NDk3NSw4NzE2NzcuNTczNTAyNTQ0MSw1ODA1MTIuODgyNzI2NTkyOCw4NTc1OTkuNjUwMTI5NTM0NSw5NTIzNDIuNjc0MjkzNDY3NCw4NDcxOTUuMTg4MTE5NzQ0MSwxOTMxMTYzLjEwMDc5NzMzMzMsMTIzMTUzLjYwODM3MzM2NTgsMTU0MS45ODkzMjA1MDk3Mjk2CiszMSxUaHUgMjQgRmViIDExLDY4MTI0LjA0NzQwNzczMjQzLDYwODI0LjgyNzk0ODA2MTc3LDM1NDA1LjAwMDY2NDgwMDY5LDczMTkxLjQzNjMyMjIxNjAzLDczNzc2LjIzMjcxOTMzNiwxMTkyNjIxLjcyMDgxNzE0NywxMjk2MDIwLjc4ODQ4MjQyNTUsMTA2MjIxMi44MTY4NzI1NzA3LDkyMjYzOS4wMjQ0MjU2MzU5LDExNTM1MzEuMDk0NTM3MDIsMjM0MjQ4LjI0MjcyMjg4NTYsMTM2OTM3MS45ODc1Nzg3NDYsMjcxMDA2LjYwOTU0NjM1ODc2LDcxOTQxOC4yMzYxODI4NzE3LDY0MzAyOC43NzM5MjU4MzMzLDE0NzYxMjguODQzOTUyOTUwNiwxMDY5Mzk3LjA2MjU0Mzk0MDMsMzAwNzU0LjExNDg2NTE1NjYsODc1MzMxLjAwNDQ3Njg1NzUsNTgyOTQ1Ljk2NTU2NzMyNjQsODYxMTk0LjA3NjgwODE0NDYsOTU2MzM0LjE5NDAxMzgxOTcsODUwNzQ2LjAwNjk0OTYxMTUsMTkzOTI1Ny4xMTU0OTE5NTc2LDEyMzY2OS43Nzc2Nzg1MTU4OCwxNTQ4LjQ1MjIwNTA4NjM5MDQKKzMyLEZyaSAyNSBGZWIgMTEsNjg0MDcuMDY2MTE3MDgzOSw2MTA3Ny41MjIzMzM2MzM5MjYsMzU1NTIuMDg5MzY1MTA1OTgsNzM0OTUuNTA3MzAyMDIwMTgsNzQwODIuNzMzMjEzMDYxMzUsMTE5NzU3Ni40MjE0NDA3MDIyLDEzMDE0MDUuMDU2NTE3MDgzMiwxMDY2NjI1LjczODc2OTEzMDUsOTI2NDcyLjA5MjQyMTgzNjYsMTE1ODMyMy4zOTQ2NzE3ODI2LDIzNTIyMS40MTc5NTAyMjQ2OCwxMzc1MDYwLjk5MDMyMTQ0ODUsMjcyMTMyLjQ5NTk4MTE1MTI0LDcyMjQwNy4wMzEzMDY0MTY4LDY0NTcwMC4yMTE5OTUwMjM3LDE0ODIyNjEuMzYzOTA5NTQ3LDEwNzM4MzkuODMxMTEwMTQwOCwzMDIwMDMuNTg2MTU1NTQ4OCw4Nzg5NjcuNTMzMTQxMzkyNSw1ODUzNjcuNzkxOTQyNTEzLDg2NDc3MS44NzQxNTU2ODg5LDk2MDMwNy4yNDcyODM1MTk0LDg1NDI4MC4zOTgxOTY2ODAyLDE5NDczMTMuNjgzODY3MDMxNywxMjQxODMuNTU4OTY3MTUzNTEsMTU1NC44ODUxODk2MzgxMzEKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWdpbmdfRkRfUmVmZXJlbmNlL05vRGlzZWFzZS9ydW5wYXJhbWV0ZXJzLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWdpbmdfRkRfUmVmZXJlbmNlL05vRGlzZWFzZS9ydW5wYXJhbWV0ZXJzLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zOGRiMjc5Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BZ2luZ19GRF9SZWZlcmVuY2UvTm9EaXNlYXNlL3J1bnBhcmFtZXRlcnMuY3N2CkBAIC0wLDAgKzEsMiBAQAorZGlzZWFzZU5hbWUscG9wdWxhdGlvbklkZW50aWZpZXIsdGltZVBlcmlvZCxmcmVxdWVuY3lEZXBlbmRlbnQscmVmZXJlbmNlUG9wdWxhdGlvbkRlbnNpdHkscm9hZE5ldHdvcmtJbmZlY3Rpb3VzUHJvcG9ydGlvbixjaGFyYWN0ZXJpc3RpY01peGluZ0Rpc3RhbmNlLHBvcHVsYXRpb25Hcm91cHMsdHJhbnNtaXNzaW9uUmF0ZSxyZWNvdmVyeVJhdGUsaW5mZWN0aW91c01vcnRhbGl0eVJhdGUKK05vRGlzZWFzZSxodW1hbiw4NjQwMDAwMCx0cnVlLDEwMC4wLDAuMDEsMi4yNSxvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLmltcGwuU3RyaW5nVmFsdWVMaXN0SW1wbEA0NDNmNDQzZixvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLmltcGwuRG91YmxlVmFsdWVNYXRyaXhJbXBsQDQ0ODc0NDg3LG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uaW1wbC5Eb3VibGVWYWx1ZUxpc3RJbXBsQDQ1YTc0NWE3IChpZGVudGlmaWVyOiBudWxsKSxvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLmltcGwuRG91YmxlVmFsdWVMaXN0SW1wbEA0NWYyNDVmMiAoaWRlbnRpZmllcjogbnVsbCkKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNFSVJTaW5nbGVSZWdpb25fRkRfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL0Rpc2Vhc2UgRGVhdGhzXzAuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTRUlSU2luZ2xlUmVnaW9uX0ZEX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9EaXNlYXNlIERlYXRoc18wLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMjNiMjdkCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTRUlSU2luZ2xlUmVnaW9uX0ZEX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9EaXNlYXNlIERlYXRoc18wLmNzdgpAQCAtMCwwICsxLDMzIEBACitpdGVyYXRpb24sdGltZSxLRU4KKzEsVHVlIDI1IEphbiAxMSwwLjAKKzIsV2VkIDI2IEphbiAxMSwwLjAKKzMsVGh1IDI3IEphbiAxMSwwLjAKKzQsRnJpIDI4IEphbiAxMSwwLjAKKzUsU2F0IDI5IEphbiAxMSwwLjAKKzYsU3VuIDMwIEphbiAxMSwwLjAKKzcsTW9uIDMxIEphbiAxMSwwLjAKKzgsVHVlIDEgRmViIDExLDAuMAorOSxXZWQgMiBGZWIgMTEsMC4wCisxMCxUaHUgMyBGZWIgMTEsMC4wCisxMSxGcmkgNCBGZWIgMTEsMC4wCisxMixTYXQgNSBGZWIgMTEsMC4wCisxMyxTdW4gNiBGZWIgMTEsMC4wCisxNCxNb24gNyBGZWIgMTEsMC4wCisxNSxUdWUgOCBGZWIgMTEsMC4wCisxNixXZWQgOSBGZWIgMTEsMC4wCisxNyxUaHUgMTAgRmViIDExLDAuMAorMTgsRnJpIDExIEZlYiAxMSwwLjAKKzE5LFNhdCAxMiBGZWIgMTEsMC4wCisyMCxTdW4gMTMgRmViIDExLDAuMAorMjEsTW9uIDE0IEZlYiAxMSwwLjAKKzIyLFR1ZSAxNSBGZWIgMTEsMC4wCisyMyxXZWQgMTYgRmViIDExLDAuMAorMjQsVGh1IDE3IEZlYiAxMSwwLjAKKzI1LEZyaSAxOCBGZWIgMTEsMC4wCisyNixTYXQgMTkgRmViIDExLDAuMAorMjcsU3VuIDIwIEZlYiAxMSwwLjAKKzI4LE1vbiAyMSBGZWIgMTEsMC4wCisyOSxUdWUgMjIgRmViIDExLDAuMAorMzAsV2VkIDIzIEZlYiAxMSwwLjAKKzMxLFRodSAyNCBGZWIgMTEsMC4wCiszMixGcmkgMjUgRmViIDExLDAuMApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTRUlSU2luZ2xlUmVnaW9uX0ZEX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9FXzAuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTRUlSU2luZ2xlUmVnaW9uX0ZEX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9FXzAuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIxZDE3MWUKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNFSVJTaW5nbGVSZWdpb25fRkRfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL0VfMC5jc3YKQEAgLTAsMCArMSwzMyBAQAoraXRlcmF0aW9uLHRpbWUsS0VOCisxLFR1ZSAyNSBKYW4gMTEsMC4wCisyLFdlZCAyNiBKYW4gMTEsNDQuOTk5OTk4NzAzNDYyMTA0CiszLFRodSAyNyBKYW4gMTEsNTMuOTg5MjA4NjczODIyOTg2Cis0LEZyaSAyOCBKYW4gMTEsODU4LjU5NDk5Mjc2ODAxNDMKKzUsU2F0IDI5IEphbiAxMSwxOTgyLjQ0NzA0NjQzODM4NAorNixTdW4gMzAgSmFuIDExLDE3NTIzLjc5MzYwMzkyMDE2MworNyxNb24gMzEgSmFuIDExLDU1OTcxLjI1MjgzNTA2OTY5NgorOCxUdWUgMSBGZWIgMTEsMzc1Njc1LjM5Njc0NzcwMTM0Cis5LFdlZCAyIEZlYiAxMSwxNDI0MjQ5LjE2NjEyMzc2ODgKKzEwLFRodSAzIEZlYiAxMSw3OTk4MzY3LjYzMzU5NTE0NgorMTEsRnJpIDQgRmViIDExLDIuODcyNzYwNjEwOTkwNDJFNworMTIsU2F0IDUgRmViIDExLDEuODExMTAzNTc1ODU5NzMyNkU3CisxMyxTdW4gNiBGZWIgMTEsMS4wODY2NjIzNzI2NzIxMDM3RTcKKzE0LE1vbiA3IEZlYiAxMSw2NTE5OTczLjMyOTM5MTU0OQorMTUsVHVlIDggRmViIDExLDM5MTE5ODQuMzYwNDAwMzE5CisxNixXZWQgOSBGZWIgMTEsMjM0NzE5MC40NzEwOTEyNDI1CisxNyxUaHUgMTAgRmViIDExLDE0MDgzMTQuMzQwNzMxNTU3NworMTgsRnJpIDExIEZlYiAxMSw4NDQ5ODguNTgxMjAxMzE0NworMTksU2F0IDEyIEZlYiAxMSw1MDY5OTMuMTU4MDE4NTk1NTQKKzIwLFN1biAxMyBGZWIgMTEsMzA0MTk1Ljg5MTA5MDkzMDcKKzIxLE1vbiAxNCBGZWIgMTEsMTgyNTE3LjUzNjE0MzA5MDcKKzIyLFR1ZSAxNSBGZWIgMTEsMTA5NTEwLjUyMTA5MDI2NDc3CisyMyxXZWQgMTYgRmViIDExLDY1NzA2LjMxMjg5MjQ2NTQyCisyNCxUaHUgMTcgRmViIDExLDM5NDIzLjc4NzY0MDEyODMzCisyNSxGcmkgMTggRmViIDExLDIzNjU0LjI3MjYyMjIyODY4NworMjYsU2F0IDE5IEZlYiAxMSwxNDE5Mi41NjM1NTgwNzIwMDgKKzI3LFN1biAyMCBGZWIgMTEsODUxNS41MzgxNDA5NTExCisyOCxNb24gMjEgRmViIDExLDUxMDkuMzIyODgyMTI2Nzc3CisyOSxUdWUgMjIgRmViIDExLDMwNjUuNTkzNzMwMjUzOTA5CiszMCxXZWQgMjMgRmViIDExLDE4MzkuMzU2MjM3NzYxMDkyCiszMSxUaHUgMjQgRmViIDExLDExMDMuNjEzNzQyODEzMjAzCiszMixGcmkgMjUgRmViIDExLDY2Mi4xNjgyNDU2MjUyODQyCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNFSVJTaW5nbGVSZWdpb25fRkRfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL0lfMC5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNFSVJTaW5nbGVSZWdpb25fRkRfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL0lfMC5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDY1ZTFmOQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0VJUlNpbmdsZVJlZ2lvbl9GRF9SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vSV8wLmNzdgpAQCAtMCwwICsxLDMzIEBACitpdGVyYXRpb24sdGltZSxLRU4KKzEsVHVlIDI1IEphbiAxMSwxLjAKKzIsV2VkIDI2IEphbiAxMSwwLjU5OTg4MDUwMjU0MjM5ODEKKzMsVGh1IDI3IEphbiAxMSwxOC4zNTk5NzU1OTYxNzI5NjYKKzQsRnJpIDI4IEphbiAxMSwzMi42MDk0OTg3NDIwMzk0OAorNSxTYXQgMjkgSmFuIDExLDM2My4wMDYyODU5MjQ5MDY1Cis2LFN1biAzMCBKYW4gMTEsMTAxMC43NDE4MDM4MjI5Nzc3Cis3LE1vbiAzMSBKYW4gMTEsNzYxNi4wNDEzNjE5MjIyMjEKKzgsVHVlIDEgRmViIDExLDI2OTU3LjMzNTI4NjgxMzc3NAorOSxXZWQgMiBGZWIgMTEsMTY2NDQ2LjU5OTg4MDQ0OTgyCisxMCxUaHUgMyBGZWIgMTEsNjY5NTUxLjkxMjk3MzkzMjkKKzExLEZyaSA0IEZlYiAxMSw1MzA0NTI1LjI1NjAyMzYwNQorMTIsU2F0IDUgRmViIDExLDEuMzEwNTkxNDY3MjA5ODA2M0U3CisxMyxTdW4gNiBGZWIgMTEsMS41MTA3OTUwNTY1MjU5ODc0RTcKKzE0LE1vbiA3IEZlYiAxMSwxLjM0MTE0MjU3NTQyODAzMTJFNworMTUsVHVlIDggRmViIDExLDEuMDY1NDg0MjA1MTE5MDMxOUU3CisxNixXZWQgOSBGZWIgMTEsNzk1NzcwMC4yMTM1NTg0OAorMTcsVGh1IDEwIEZlYiAxMSw1NzEzNDk1Ljc2Mjg5MTI4CisxOCxGcmkgMTEgRmViIDExLDM5OTE0MjMuNDM4Nzk1OTcyNgorMTksU2F0IDEyIEZlYiAxMSwyNzMyODQ5LjM4ODUyNjU2OQorMjAsU3VuIDEzIEZlYiAxMSwxODQyNTA2Ljk0Mjk0Nzg0OTIKKzIxLE1vbiAxNCBGZWIgMTEsMTIyNzE4Mi41MDIwNjE2Njc5CisyMixUdWUgMTUgRmViIDExLDgwOTMxNi41MjQzNDk0MDY4CisyMyxXZWQgMTYgRmViIDExLDUyOTM5NC4xMTkzNDQ0MTg2CisyNCxUaHUgMTcgRmViIDExLDM0MzkxOC45OTgzMzk5MzE5NQorMjUsRnJpIDE4IEZlYiAxMSwyMjIxMjAuOTEzMzkxMTY1MTQKKzI2LFNhdCAxOSBGZWIgMTEsMTQyNzM0LjI1NzM2NjQ2ODc4CisyNyxTdW4gMjAgRmViIDExLDkxMzE3LjU3OTcyMzgxOTEyCisyOCxNb24gMjEgRmViIDExLDU4MTk2Ljc2MzE0MDg0NTYxCisyOSxUdWUgMjIgRmViIDExLDM2OTYxLjc4NzAxNjMwNTA4CiszMCxXZWQgMjMgRmViIDExLDIzNDAzLjMwOTcxMDY5OTQ0NgorMzEsVGh1IDI0IEZlYiAxMSwxNDc3Ny43MjgzMTc4NDA2MjMKKzMyLEZyaSAyNSBGZWIgMTEsOTMwOC4wODI0ODkzNjYxMDUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0VJUlNpbmdsZVJlZ2lvbl9GRF9SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vSW5jaWRlbmNlXzAuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTRUlSU2luZ2xlUmVnaW9uX0ZEX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9JbmNpZGVuY2VfMC5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGI5NTEyYgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0VJUlNpbmdsZVJlZ2lvbl9GRF9SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vSW5jaWRlbmNlXzAuY3N2CkBAIC0wLDAgKzEsMzMgQEAKK2l0ZXJhdGlvbix0aW1lLEtFTgorMSxUdWUgMjUgSmFuIDExLDAuMAorMixXZWQgMjYgSmFuIDExLDQ0Ljk5OTk5ODcwMzQ2MjEwNAorMyxUaHUgMjcgSmFuIDExLDI2Ljk5NDU4NjgzNzE4Mjg4Cis0LEZyaSAyOCBKYW4gMTEsODI2LjE5NzE2NDM2NjAyMDYKKzUsU2F0IDI5IEphbiAxMSwxNDY3LjM4OTQyNjE5OTc3OTYKKzYsU3VuIDMwIEphbiAxMSwxNjMzNC4xNjkwNzkzOTgxODIKKzcsTW9uIDMxIEphbiAxMSw0NTQ1OC44NzQ0NzIwMjM0NgorOCxUdWUgMSBGZWIgMTEsMzQyMDg4LjMzNTkyNDAzMDM0Cis5LFdlZCAyIEZlYiAxMSwxMTk4ODgxLjE3MDk2NjAzODUKKzEwLFRodSAzIEZlYiAxMSw3MTQzNzEwLjQ3ODc5MDQxNDUKKzExLEZyaSA0IEZlYiAxMSwyLjU5NTk0MDc2MTM4NjAxMDRFNworMTIsU2F0IDUgRmViIDExLDIwMC41MjA4NzI4NDk4MTYKKzEzLFN1biA2IEZlYiAxMSwwLjAwNTYzMzY5MTk3MzcyOTg0MgorMTQsTW9uIDcgRmViIDExLDAuMAorMTUsVHVlIDggRmViIDExLDYuODg5MDQ1MzAxNjM4NzQ3RS03CisxNixXZWQgOSBGZWIgMTEsMC4wCisxNyxUaHUgMTAgRmViIDExLDQuODg0NjExMTIzNzI2MTMzNUUtMTEKKzE4LEZyaSAxMSBGZWIgMTEsMC4wCisxOSxTYXQgMTIgRmViIDExLDIuOTI3NzEzMzQ1MDUzMDU2MkUtMTUKKzIwLFN1biAxMyBGZWIgMTEsMC4wCisyMSxNb24gMTQgRmViIDExLDEuNjE0OTgzOTUxODk2NzIyOEUtMTkKKzIyLFR1ZSAxNSBGZWIgMTEsMC4wCisyMyxXZWQgMTYgRmViIDExLDguNDc2ODc1Njk3ODcwMDMyRS0yNAorMjQsVGh1IDE3IEZlYiAxMSwwLjAKKzI1LEZyaSAxOCBGZWIgMTEsNC4zMDQ1OTEwOTk0MDE1MzJFLTI4CisyNixTYXQgMTkgRmViIDExLDEuNTQwMTI2OTQ3Njg2NDY0NEUtMjgKKzI3LFN1biAyMCBGZWIgMTEsNy4wNDc1OTg3Nzg1NzUxMTFFLTI5CisyOCxNb24gMjEgRmViIDExLDMuNjc0Mjc4MTkzMDk0NjdFLTI5CisyOSxUdWUgMjIgRmViIDExLDIuMDY0NDAwODg0MzQ3NzY4NEUtMjkKKzMwLFdlZCAyMyBGZWIgMTEsMS4yMTIyMDQ3NjQ3NzI1OTEzRS0yOQorMzEsVGh1IDI0IEZlYiAxMSw3LjMwNzU2NTUxNDk5MDUxMkUtMzAKKzMyLEZyaSAyNSBGZWIgMTEsNC40NzQyNTkwNTgyNDU2MzdFLTMwCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNFSVJTaW5nbGVSZWdpb25fRkRfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL1BvcHVsYXRpb24gQ291bnRfMC5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNFSVJTaW5nbGVSZWdpb25fRkRfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL1BvcHVsYXRpb24gQ291bnRfMC5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjQyMTliNwotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0VJUlNpbmdsZVJlZ2lvbl9GRF9SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vUG9wdWxhdGlvbiBDb3VudF8wLmNzdgpAQCAtMCwwICsxLDMzIEBACitpdGVyYXRpb24sdGltZSxLRU4KKzEsVHVlIDI1IEphbiAxMSwzLjQ3MDc4MTdFNworMixXZWQgMjYgSmFuIDExLDMuNDcwNzgxN0U3CiszLFRodSAyNyBKYW4gMTEsMy40NzA3ODE3MDAwMDAwMDFFNworNCxGcmkgMjggSmFuIDExLDMuNDcwNzgxN0U3Cis1LFNhdCAyOSBKYW4gMTEsMy40NzA3ODE3MDAwMDAwMDFFNworNixTdW4gMzAgSmFuIDExLDMuNDcwNzgxNzAwMDAwMDAxRTcKKzcsTW9uIDMxIEphbiAxMSwzLjQ3MDc4MTcwMDAwMDAwMUU3Cis4LFR1ZSAxIEZlYiAxMSwzLjQ3MDc4MTdFNworOSxXZWQgMiBGZWIgMTEsMy40NzA3ODE3RTcKKzEwLFRodSAzIEZlYiAxMSwzLjQ3MDc4MTdFNworMTEsRnJpIDQgRmViIDExLDMuNDcwNzgxN0U3CisxMixTYXQgNSBGZWIgMTEsMy40NzA3ODE3RTcKKzEzLFN1biA2IEZlYiAxMSwzLjQ3MDc4MTcwMDUzMDIxOUU3CisxNCxNb24gNyBGZWIgMTEsMy40NzA3ODE3MDA1MzAyMTlFNworMTUsVHVlIDggRmViIDExLDMuNDcwNzgxNzAwNTMwMjg0RTcKKzE2LFdlZCA5IEZlYiAxMSwzLjQ3MDc4MTcwMDUzMDI4NEU3CisxNyxUaHUgMTAgRmViIDExLDMuNDcwNzgxNzAwNTMwMjg1RTcKKzE4LEZyaSAxMSBGZWIgMTEsMy40NzA3ODE3MDA1MzAyODVFNworMTksU2F0IDEyIEZlYiAxMSwzLjQ3MDc4MTcwMDUzMDI4NEU3CisyMCxTdW4gMTMgRmViIDExLDMuNDcwNzgxNzAwNTMwMjg0RTcKKzIxLE1vbiAxNCBGZWIgMTEsMy40NzA3ODE3MDA1MzAyODRFNworMjIsVHVlIDE1IEZlYiAxMSwzLjQ3MDc4MTcwMDUzMDI4M0U3CisyMyxXZWQgMTYgRmViIDExLDMuNDcwNzgxNzAwNTMwMjg0RTcKKzI0LFRodSAxNyBGZWIgMTEsMy40NzA3ODE3MDA1MzAyODRFNworMjUsRnJpIDE4IEZlYiAxMSwzLjQ3MDc4MTcwMDUzMDI4NEU3CisyNixTYXQgMTkgRmViIDExLDMuNDcwNzgxNzAwNTMwMjg0RTcKKzI3LFN1biAyMCBGZWIgMTEsMy40NzA3ODE3MDA1MzAyODRFNworMjgsTW9uIDIxIEZlYiAxMSwzLjQ3MDc4MTcwMDUzMDI4M0U3CisyOSxUdWUgMjIgRmViIDExLDMuNDcwNzgxNzAwNTMwMjg0RTcKKzMwLFdlZCAyMyBGZWIgMTEsMy40NzA3ODE3MDA1MzAyODRFNworMzEsVGh1IDI0IEZlYiAxMSwzLjQ3MDc4MTcwMDUzMDI4NUU3CiszMixGcmkgMjUgRmViIDExLDMuNDcwNzgxNzAwNTMwMjg1RTcKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0VJUlNpbmdsZVJlZ2lvbl9GRF9SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vUl8wLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0VJUlNpbmdsZVJlZ2lvbl9GRF9SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vUl8wLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZjRiNDIxCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTRUlSU2luZ2xlUmVnaW9uX0ZEX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9SXzAuY3N2CkBAIC0wLDAgKzEsMzMgQEAKK2l0ZXJhdGlvbix0aW1lLEtFTgorMSxUdWUgMjUgSmFuIDExLDAuMAorMixXZWQgMjYgSmFuIDExLDAuNAorMyxUaHUgMjcgSmFuIDExLDAuNjM5OTA0NDAyMDMzOTE4NQorNCxGcmkgMjggSmFuIDExLDcuOTgzOTEzNzcxNTIwMDM2Cis1LFNhdCAyOSBKYW4gMTEsMjEuMDI2ODQ1MjMxOTcyMzIKKzYsU3VuIDMwIEphbiAxMSwxNjYuMjMwMzk1NTM0NjUzODQKKzcsTW9uIDMxIEphbiAxMSw1NzAuNTEwODAyNDE3MTI1NworOCxUdWUgMSBGZWIgMTEsMzYxNi45NTg4ODQzNTk3MjAzCis5LFdlZCAyIEZlYiAxMSwxNDM5OS41NzY3Mjk1Njk2NDIKKzEwLFRodSAzIEZlYiAxMSw4MDk3OS4wMzI3MjMyNTUzOAorMTEsRnJpIDQgRmViIDExLDY3NTY1OC44ODQ3MTIwOTIzCisxMixTYXQgNSBGZWIgMTEsMzQ5MDg2Ni41Njg5NzMwNzEKKzEzLFN1biA2IEZlYiAxMSw4NzMzMjQyLjcxMzMyMTI4CisxNCxNb24gNyBGZWIgMTEsMS40Nzc2NDE3OTIxNjMwMjkxRTcKKzE1LFR1ZSA4IEZlYiAxMSwyLjAxNDA5OTA1OTM3MTIyMDNFNworMTYsV2VkIDkgRmViIDExLDIuNDQwMjkyNjMyMDY1MzEyRTcKKzE3LFRodSAxMCBGZWIgMTEsMi43NTg2MDA2OTAxNjgwMDA0RTcKKzE4LEZyaSAxMSBGZWIgMTEsMi45ODcxNDA0OTg1MzA1NTU1RTcKKzE5LFNhdCAxMiBGZWIgMTEsMy4xNDY3OTc0NDU4NzU3Njc2RTcKKzIwLFN1biAxMyBGZWIgMTEsMy4yNTYxMTE0MTcxMjY0MDZFNworMjEsTW9uIDE0IEZlYiAxMSwzLjMyOTgxMTY5NjcwOTgwOEU3CisyMixUdWUgMTUgRmViIDExLDMuMzc4ODk4OTk1OTg2MzE2RTcKKzIzLFdlZCAxNiBGZWIgMTEsMy40MTEyNzE2NTczMDY1OTVFNworMjQsVGh1IDE3IEZlYiAxMSwzLjQzMjQ0NzQyMTkzMjI3OEU3CisyNSxGcmkgMTggRmViIDExLDMuNDQ2MjA0MTgxOTI4OTQ0NkU3CisyNixTYXQgMTkgRmViIDExLDMuNDU1MDg5MDE4NDM3ODI5NkU3CisyNyxTdW4gMjAgRmViIDExLDMuNDYwNzk4Mzg4NzQzODA3RTcKKzI4LE1vbiAyMSBGZWIgMTEsMy40NjQ0NTEwOTE5Mjc5ODY2RTcKKzI5LFR1ZSAyMiBGZWIgMTEsMy40NjY3Nzg5NjI0NTU2MjhFNworMzAsV2VkIDIzIEZlYiAxMSwzLjQ2ODI1NzQzMzkzNTQzOEU3CiszMSxUaHUgMjQgRmViIDExLDMuNDY5MTkzNTY2MzI0MjE5RTcKKzMyLEZyaSAyNSBGZWIgMTEsMy40Njk3ODQ2NzU0NTY3ODU0RTcKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0VJUlNpbmdsZVJlZ2lvbl9GRF9SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vU18wLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0VJUlNpbmdsZVJlZ2lvbl9GRF9SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vU18wLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ODFhNmQ3Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTRUlSU2luZ2xlUmVnaW9uX0ZEX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9TXzAuY3N2CkBAIC0wLDAgKzEsMzMgQEAKK2l0ZXJhdGlvbix0aW1lLEtFTgorMSxUdWUgMjUgSmFuIDExLDMuNDcwNzgxNkU3CisyLFdlZCAyNiBKYW4gMTEsMy40NzA3NzcxMDAwMTIwNzk2RTcKKzMsVGh1IDI3IEphbiAxMSwzLjQ3MDc3NDQwMTA5MTEzM0U3Cis0LEZyaSAyOCBKYW4gMTEsMy40NzA2OTE3ODExNTk0NzI1RTcKKzUsU2F0IDI5IEphbiAxMSwzLjQ3MDU0NTA1MTk4MjI0MUU3Cis2LFN1biAzMCBKYW4gMTEsMy40Njg5MTE2MjM0MTk2NzNFNworNyxNb24gMzEgSmFuIDExLDMuNDY0MzY1OTE5NTAwMDZFNworOCxUdWUgMSBGZWIgMTEsMy40MzAxNTY3MzA5MDgxMTNFNworOSxXZWQgMiBGZWIgMTEsMy4zMTAyNzIxNjU3MjY2MjE0RTcKKzEwLFRodSAzIEZlYiAxMSwyLjU5NTg5MTg0MjA3MDc2N0U3CisxMSxGcmkgNCBGZWIgMTEsMjYuNzQ5MzYwMTA2MzkxNjYzCisxMixTYXQgNSBGZWIgMTEsMy4zMTU0MzUyMjIyODQ1NTJFLTQKKzEzLFN1biA2IEZlYiAxMSwwLjAKKzE0LE1vbiA3IEZlYiAxMSwzLjk2MTg1NzczMTU0NzQzOEUtOAorMTUsVHVlIDggRmViIDExLDAuMAorMTYsV2VkIDkgRmViIDExLDQuNzM0MzE1NTk1Nzg1MzE4RS0xMgorMTcsVGh1IDEwIEZlYiAxMSwwLjAKKzE4LEZyaSAxMSBGZWIgMTEsNS42NTczODIzODk1ODQ0MTFFLTE2CisxOSxTYXQgMTIgRmViIDExLDAuMAorMjAsU3VuIDEzIEZlYiAxMSw2Ljc2MDQyMjg4NTcyMjQ2MUUtMjAKKzIxLE1vbiAxNCBGZWIgMTEsMC4wCisyMixUdWUgMTUgRmViIDExLDguMDc4NTI3MjEzOTE4MzM2RS0yNAorMjMsV2VkIDE2IEZlYiAxMSwwLjAKKzI0LFRodSAxNyBGZWIgMTEsOS42NTM2MjcxNTQ1NzQ3ODVFLTI4CisyNSxGcmkgMTggRmViIDExLDUuMzQ3ODgyNDcxMjcxODIxRS0yOAorMjYsU2F0IDE5IEZlYiAxMSwzLjgwODI3MDA0ODIzNDYyMjRFLTI4CisyNyxTdW4gMjAgRmViIDExLDMuMTAzMzYxOTI4NzMyNTQzNEUtMjgKKzI4LE1vbiAyMSBGZWIgMTEsMi43MzU5NjE1NjEwNzQwMzRFLTI4CisyOSxUdWUgMjIgRmViIDExLDIuNTI5NTE4MjE4OTc4MzM2RS0yOAorMzAsV2VkIDIzIEZlYiAxMSwyLjQwODI5Nzk4ODQ2NDAzNDdFLTI4CiszMSxUaHUgMjQgRmViIDExLDIuMzM1MjIyMzIxNDY4ODcwNUUtMjgKKzMyLEZyaSAyNSBGZWIgMTEsMi4yOTA0Nzk3MzEyNTg3NDU1RS0yOApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTRUlSU2luZ2xlUmVnaW9uX0ZEX1JlZmVyZW5jZS9UZXN0U0VJUi9ydW5wYXJhbWV0ZXJzLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0VJUlNpbmdsZVJlZ2lvbl9GRF9SZWZlcmVuY2UvVGVzdFNFSVIvcnVucGFyYW1ldGVycy5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTgxMzIxMgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0VJUlNpbmdsZVJlZ2lvbl9GRF9SZWZlcmVuY2UvVGVzdFNFSVIvcnVucGFyYW1ldGVycy5jc3YKQEAgLTAsMCArMSwyIEBACitkaXNlYXNlTmFtZSxwb3B1bGF0aW9uSWRlbnRpZmllcix0aW1lUGVyaW9kLGZyZXF1ZW5jeURlcGVuZGVudCxyZWZlcmVuY2VQb3B1bGF0aW9uRGVuc2l0eSxyb2FkTmV0d29ya0luZmVjdGlvdXNQcm9wb3J0aW9uLGNoYXJhY3RlcmlzdGljTWl4aW5nRGlzdGFuY2UsdHJhbnNtaXNzaW9uUmF0ZSxub25MaW5lYXJpdHlDb2VmZmljaWVudCxyZWNvdmVyeVJhdGUsaW5mZWN0aW91c01vcnRhbGl0eVJhdGUsaW1tdW5pdHlMb3NzUmF0ZSxpbmN1YmF0aW9uUmF0ZQorVGVzdFNFSVIsaHVtYW4sODY0MDAwMDAsdHJ1ZSwxMDAuMCwwLjAxLDIuMjUsNDUuMCwxLjAsMC40LDAuMCwwLjAsMC40ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTRUlSU2luZ2xlUmVnaW9uX0ZEX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL2h1bWFuL0JpcnRoc18wLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0VJUlNpbmdsZVJlZ2lvbl9GRF9SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9odW1hbi9CaXJ0aHNfMC5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTIzYjI3ZAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0VJUlNpbmdsZVJlZ2lvbl9GRF9SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9odW1hbi9CaXJ0aHNfMC5jc3YKQEAgLTAsMCArMSwzMyBAQAoraXRlcmF0aW9uLHRpbWUsS0VOCisxLFR1ZSAyNSBKYW4gMTEsMC4wCisyLFdlZCAyNiBKYW4gMTEsMC4wCiszLFRodSAyNyBKYW4gMTEsMC4wCis0LEZyaSAyOCBKYW4gMTEsMC4wCis1LFNhdCAyOSBKYW4gMTEsMC4wCis2LFN1biAzMCBKYW4gMTEsMC4wCis3LE1vbiAzMSBKYW4gMTEsMC4wCis4LFR1ZSAxIEZlYiAxMSwwLjAKKzksV2VkIDIgRmViIDExLDAuMAorMTAsVGh1IDMgRmViIDExLDAuMAorMTEsRnJpIDQgRmViIDExLDAuMAorMTIsU2F0IDUgRmViIDExLDAuMAorMTMsU3VuIDYgRmViIDExLDAuMAorMTQsTW9uIDcgRmViIDExLDAuMAorMTUsVHVlIDggRmViIDExLDAuMAorMTYsV2VkIDkgRmViIDExLDAuMAorMTcsVGh1IDEwIEZlYiAxMSwwLjAKKzE4LEZyaSAxMSBGZWIgMTEsMC4wCisxOSxTYXQgMTIgRmViIDExLDAuMAorMjAsU3VuIDEzIEZlYiAxMSwwLjAKKzIxLE1vbiAxNCBGZWIgMTEsMC4wCisyMixUdWUgMTUgRmViIDExLDAuMAorMjMsV2VkIDE2IEZlYiAxMSwwLjAKKzI0LFRodSAxNyBGZWIgMTEsMC4wCisyNSxGcmkgMTggRmViIDExLDAuMAorMjYsU2F0IDE5IEZlYiAxMSwwLjAKKzI3LFN1biAyMCBGZWIgMTEsMC4wCisyOCxNb24gMjEgRmViIDExLDAuMAorMjksVHVlIDIyIEZlYiAxMSwwLjAKKzMwLFdlZCAyMyBGZWIgMTEsMC4wCiszMSxUaHUgMjQgRmViIDExLDAuMAorMzIsRnJpIDI1IEZlYiAxMSwwLjAKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0VJUlNpbmdsZVJlZ2lvbl9GRF9SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9odW1hbi9Db3VudF8wLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0VJUlNpbmdsZVJlZ2lvbl9GRF9SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9odW1hbi9Db3VudF8wLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYWJmNTQ3Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTRUlSU2luZ2xlUmVnaW9uX0ZEX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL2h1bWFuL0NvdW50XzAuY3N2CkBAIC0wLDAgKzEsMzMgQEAKK2l0ZXJhdGlvbix0aW1lLEtFTgorMSxUdWUgMjUgSmFuIDExLDMuNDcwNzgxN0U3CisyLFdlZCAyNiBKYW4gMTEsMy40NzA3ODE3RTcKKzMsVGh1IDI3IEphbiAxMSwzLjQ3MDc4MTdFNworNCxGcmkgMjggSmFuIDExLDMuNDcwNzgxN0U3Cis1LFNhdCAyOSBKYW4gMTEsMy40NzA3ODE3RTcKKzYsU3VuIDMwIEphbiAxMSwzLjQ3MDc4MTdFNworNyxNb24gMzEgSmFuIDExLDMuNDcwNzgxN0U3Cis4LFR1ZSAxIEZlYiAxMSwzLjQ3MDc4MTdFNworOSxXZWQgMiBGZWIgMTEsMy40NzA3ODE3RTcKKzEwLFRodSAzIEZlYiAxMSwzLjQ3MDc4MTdFNworMTEsRnJpIDQgRmViIDExLDMuNDcwNzgxN0U3CisxMixTYXQgNSBGZWIgMTEsMy40NzA3ODE3RTcKKzEzLFN1biA2IEZlYiAxMSwzLjQ3MDc4MTdFNworMTQsTW9uIDcgRmViIDExLDMuNDcwNzgxN0U3CisxNSxUdWUgOCBGZWIgMTEsMy40NzA3ODE3RTcKKzE2LFdlZCA5IEZlYiAxMSwzLjQ3MDc4MTdFNworMTcsVGh1IDEwIEZlYiAxMSwzLjQ3MDc4MTdFNworMTgsRnJpIDExIEZlYiAxMSwzLjQ3MDc4MTdFNworMTksU2F0IDEyIEZlYiAxMSwzLjQ3MDc4MTdFNworMjAsU3VuIDEzIEZlYiAxMSwzLjQ3MDc4MTdFNworMjEsTW9uIDE0IEZlYiAxMSwzLjQ3MDc4MTdFNworMjIsVHVlIDE1IEZlYiAxMSwzLjQ3MDc4MTdFNworMjMsV2VkIDE2IEZlYiAxMSwzLjQ3MDc4MTdFNworMjQsVGh1IDE3IEZlYiAxMSwzLjQ3MDc4MTdFNworMjUsRnJpIDE4IEZlYiAxMSwzLjQ3MDc4MTdFNworMjYsU2F0IDE5IEZlYiAxMSwzLjQ3MDc4MTdFNworMjcsU3VuIDIwIEZlYiAxMSwzLjQ3MDc4MTdFNworMjgsTW9uIDIxIEZlYiAxMSwzLjQ3MDc4MTdFNworMjksVHVlIDIyIEZlYiAxMSwzLjQ3MDc4MTdFNworMzAsV2VkIDIzIEZlYiAxMSwzLjQ3MDc4MTdFNworMzEsVGh1IDI0IEZlYiAxMSwzLjQ3MDc4MTdFNworMzIsRnJpIDI1IEZlYiAxMSwzLjQ3MDc4MTdFNwpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTRUlSU2luZ2xlUmVnaW9uX0ZEX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL2h1bWFuL0RlYXRoc18wLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0VJUlNpbmdsZVJlZ2lvbl9GRF9SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9odW1hbi9EZWF0aHNfMC5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTIzYjI3ZAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0VJUlNpbmdsZVJlZ2lvbl9GRF9SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9odW1hbi9EZWF0aHNfMC5jc3YKQEAgLTAsMCArMSwzMyBAQAoraXRlcmF0aW9uLHRpbWUsS0VOCisxLFR1ZSAyNSBKYW4gMTEsMC4wCisyLFdlZCAyNiBKYW4gMTEsMC4wCiszLFRodSAyNyBKYW4gMTEsMC4wCis0LEZyaSAyOCBKYW4gMTEsMC4wCis1LFNhdCAyOSBKYW4gMTEsMC4wCis2LFN1biAzMCBKYW4gMTEsMC4wCis3LE1vbiAzMSBKYW4gMTEsMC4wCis4LFR1ZSAxIEZlYiAxMSwwLjAKKzksV2VkIDIgRmViIDExLDAuMAorMTAsVGh1IDMgRmViIDExLDAuMAorMTEsRnJpIDQgRmViIDExLDAuMAorMTIsU2F0IDUgRmViIDExLDAuMAorMTMsU3VuIDYgRmViIDExLDAuMAorMTQsTW9uIDcgRmViIDExLDAuMAorMTUsVHVlIDggRmViIDExLDAuMAorMTYsV2VkIDkgRmViIDExLDAuMAorMTcsVGh1IDEwIEZlYiAxMSwwLjAKKzE4LEZyaSAxMSBGZWIgMTEsMC4wCisxOSxTYXQgMTIgRmViIDExLDAuMAorMjAsU3VuIDEzIEZlYiAxMSwwLjAKKzIxLE1vbiAxNCBGZWIgMTEsMC4wCisyMixUdWUgMTUgRmViIDExLDAuMAorMjMsV2VkIDE2IEZlYiAxMSwwLjAKKzI0LFRodSAxNyBGZWIgMTEsMC4wCisyNSxGcmkgMTggRmViIDExLDAuMAorMjYsU2F0IDE5IEZlYiAxMSwwLjAKKzI3LFN1biAyMCBGZWIgMTEsMC4wCisyOCxNb24gMjEgRmViIDExLDAuMAorMjksVHVlIDIyIEZlYiAxMSwwLjAKKzMwLFdlZCAyMyBGZWIgMTEsMC4wCiszMSxUaHUgMjQgRmViIDExLDAuMAorMzIsRnJpIDI1IEZlYiAxMSwwLjAKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0VJUlNpbmdsZVJlZ2lvbl9GRF9SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9odW1hbi9EZW5zaXR5XzAuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTRUlSU2luZ2xlUmVnaW9uX0ZEX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL2h1bWFuL0RlbnNpdHlfMC5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGViNjQ1ZgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0VJUlNpbmdsZVJlZ2lvbl9GRF9SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9odW1hbi9EZW5zaXR5XzAuY3N2CkBAIC0wLDAgKzEsMzMgQEAKK2l0ZXJhdGlvbix0aW1lLEtFTgorMSxUdWUgMjUgSmFuIDExLDYwLjk3MTEzMjE5MTQ4MDAyCisyLFdlZCAyNiBKYW4gMTEsNjAuOTcxMTMyMTkxNDgwMDIKKzMsVGh1IDI3IEphbiAxMSw2MC45NzExMzIxOTE0ODAwMgorNCxGcmkgMjggSmFuIDExLDYwLjk3MTEzMjE5MTQ4MDAyCis1LFNhdCAyOSBKYW4gMTEsNjAuOTcxMTMyMTkxNDgwMDIKKzYsU3VuIDMwIEphbiAxMSw2MC45NzExMzIxOTE0ODAwMgorNyxNb24gMzEgSmFuIDExLDYwLjk3MTEzMjE5MTQ4MDAyCis4LFR1ZSAxIEZlYiAxMSw2MC45NzExMzIxOTE0ODAwMgorOSxXZWQgMiBGZWIgMTEsNjAuOTcxMTMyMTkxNDgwMDIKKzEwLFRodSAzIEZlYiAxMSw2MC45NzExMzIxOTE0ODAwMgorMTEsRnJpIDQgRmViIDExLDYwLjk3MTEzMjE5MTQ4MDAyCisxMixTYXQgNSBGZWIgMTEsNjAuOTcxMTMyMTkxNDgwMDIKKzEzLFN1biA2IEZlYiAxMSw2MC45NzExMzIxOTE0ODAwMgorMTQsTW9uIDcgRmViIDExLDYwLjk3MTEzMjE5MTQ4MDAyCisxNSxUdWUgOCBGZWIgMTEsNjAuOTcxMTMyMTkxNDgwMDIKKzE2LFdlZCA5IEZlYiAxMSw2MC45NzExMzIxOTE0ODAwMgorMTcsVGh1IDEwIEZlYiAxMSw2MC45NzExMzIxOTE0ODAwMgorMTgsRnJpIDExIEZlYiAxMSw2MC45NzExMzIxOTE0ODAwMgorMTksU2F0IDEyIEZlYiAxMSw2MC45NzExMzIxOTE0ODAwMgorMjAsU3VuIDEzIEZlYiAxMSw2MC45NzExMzIxOTE0ODAwMgorMjEsTW9uIDE0IEZlYiAxMSw2MC45NzExMzIxOTE0ODAwMgorMjIsVHVlIDE1IEZlYiAxMSw2MC45NzExMzIxOTE0ODAwMgorMjMsV2VkIDE2IEZlYiAxMSw2MC45NzExMzIxOTE0ODAwMgorMjQsVGh1IDE3IEZlYiAxMSw2MC45NzExMzIxOTE0ODAwMgorMjUsRnJpIDE4IEZlYiAxMSw2MC45NzExMzIxOTE0ODAwMgorMjYsU2F0IDE5IEZlYiAxMSw2MC45NzExMzIxOTE0ODAwMgorMjcsU3VuIDIwIEZlYiAxMSw2MC45NzExMzIxOTE0ODAwMgorMjgsTW9uIDIxIEZlYiAxMSw2MC45NzExMzIxOTE0ODAwMgorMjksVHVlIDIyIEZlYiAxMSw2MC45NzExMzIxOTE0ODAwMgorMzAsV2VkIDIzIEZlYiAxMSw2MC45NzExMzIxOTE0ODAwMgorMzEsVGh1IDI0IEZlYiAxMSw2MC45NzExMzIxOTE0ODAwMgorMzIsRnJpIDI1IEZlYiAxMSw2MC45NzExMzIxOTE0ODAwMgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTRUlSU2luZ2xlUmVnaW9uX0ZEX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL2h1bWFuL0luY2lkZW5jZV8wLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0VJUlNpbmdsZVJlZ2lvbl9GRF9SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9odW1hbi9JbmNpZGVuY2VfMC5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDkxMGI0MAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0VJUlNpbmdsZVJlZ2lvbl9GRF9SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9odW1hbi9JbmNpZGVuY2VfMC5jc3YKQEAgLTAsMCArMSwzMyBAQAoraXRlcmF0aW9uLHRpbWUsS0VOLHN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL25vZGUvdHJhbnNwb3J0L3BpcGUvWlpaCisxLFR1ZSAyNSBKYW4gMTEsMC4wLDAuMAorMixXZWQgMjYgSmFuIDExLDAuMCwwLjAKKzMsVGh1IDI3IEphbiAxMSwwLjAsMC4wCis0LEZyaSAyOCBKYW4gMTEsMC4wLDAuMAorNSxTYXQgMjkgSmFuIDExLDAuMCwwLjAKKzYsU3VuIDMwIEphbiAxMSwwLjAsMC4wCis3LE1vbiAzMSBKYW4gMTEsMC4wLDAuMAorOCxUdWUgMSBGZWIgMTEsMC4wLDAuMAorOSxXZWQgMiBGZWIgMTEsMC4wLDAuMAorMTAsVGh1IDMgRmViIDExLDAuMCwwLjAKKzExLEZyaSA0IEZlYiAxMSwwLjAsMC4wCisxMixTYXQgNSBGZWIgMTEsMC4wLDAuMAorMTMsU3VuIDYgRmViIDExLDAuMCwwLjAKKzE0LE1vbiA3IEZlYiAxMSwwLjAsMC4wCisxNSxUdWUgOCBGZWIgMTEsMC4wLDAuMAorMTYsV2VkIDkgRmViIDExLDAuMCwwLjAKKzE3LFRodSAxMCBGZWIgMTEsMC4wLDAuMAorMTgsRnJpIDExIEZlYiAxMSwwLjAsMC4wCisxOSxTYXQgMTIgRmViIDExLDAuMCwwLjAKKzIwLFN1biAxMyBGZWIgMTEsMC4wLDAuMAorMjEsTW9uIDE0IEZlYiAxMSwwLjAsMC4wCisyMixUdWUgMTUgRmViIDExLDAuMCwwLjAKKzIzLFdlZCAxNiBGZWIgMTEsMC4wLDAuMAorMjQsVGh1IDE3IEZlYiAxMSwwLjAsMC4wCisyNSxGcmkgMTggRmViIDExLDAuMCwwLjAKKzI2LFNhdCAxOSBGZWIgMTEsMC4wLDAuMAorMjcsU3VuIDIwIEZlYiAxMSwwLjAsMC4wCisyOCxNb24gMjEgRmViIDExLDAuMCwwLjAKKzI5LFR1ZSAyMiBGZWIgMTEsMC4wLDAuMAorMzAsV2VkIDIzIEZlYiAxMSwwLjAsMC4wCiszMSxUaHUgMjQgRmViIDExLDAuMCwwLjAKKzMyLEZyaSAyNSBGZWIgMTEsMC4wLDAuMApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTRUlSU2luZ2xlUmVnaW9uX0ZEX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL3J1bnBhcmFtZXRlcnMuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTRUlSU2luZ2xlUmVnaW9uX0ZEX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL3J1bnBhcmFtZXRlcnMuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA2ODU1YjUKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNFSVJTaW5nbGVSZWdpb25fRkRfUmVmZXJlbmNlL2F1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwvcnVucGFyYW1ldGVycy5jc3YKQEAgLTAsMCArMSwyIEBACitwb3B1bGF0aW9uSWRlbnRpZmllcixuYW1lLHRhcmdldElTT0tleSxiaXJ0aFJhdGUsZGVhdGhSYXRlLHRpbWVQZXJpb2QKK2h1bWFuLGF1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwsLDAuMCwwLjAsODY0MDAwMDAKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNFSVJTaW5nbGVSZWdpb25fUktfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL0Rpc2Vhc2UgRGVhdGhzXzAuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTRUlSU2luZ2xlUmVnaW9uX1JLX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9EaXNlYXNlIERlYXRoc18wLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMjNiMjdkCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTRUlSU2luZ2xlUmVnaW9uX1JLX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9EaXNlYXNlIERlYXRoc18wLmNzdgpAQCAtMCwwICsxLDMzIEBACitpdGVyYXRpb24sdGltZSxLRU4KKzEsVHVlIDI1IEphbiAxMSwwLjAKKzIsV2VkIDI2IEphbiAxMSwwLjAKKzMsVGh1IDI3IEphbiAxMSwwLjAKKzQsRnJpIDI4IEphbiAxMSwwLjAKKzUsU2F0IDI5IEphbiAxMSwwLjAKKzYsU3VuIDMwIEphbiAxMSwwLjAKKzcsTW9uIDMxIEphbiAxMSwwLjAKKzgsVHVlIDEgRmViIDExLDAuMAorOSxXZWQgMiBGZWIgMTEsMC4wCisxMCxUaHUgMyBGZWIgMTEsMC4wCisxMSxGcmkgNCBGZWIgMTEsMC4wCisxMixTYXQgNSBGZWIgMTEsMC4wCisxMyxTdW4gNiBGZWIgMTEsMC4wCisxNCxNb24gNyBGZWIgMTEsMC4wCisxNSxUdWUgOCBGZWIgMTEsMC4wCisxNixXZWQgOSBGZWIgMTEsMC4wCisxNyxUaHUgMTAgRmViIDExLDAuMAorMTgsRnJpIDExIEZlYiAxMSwwLjAKKzE5LFNhdCAxMiBGZWIgMTEsMC4wCisyMCxTdW4gMTMgRmViIDExLDAuMAorMjEsTW9uIDE0IEZlYiAxMSwwLjAKKzIyLFR1ZSAxNSBGZWIgMTEsMC4wCisyMyxXZWQgMTYgRmViIDExLDAuMAorMjQsVGh1IDE3IEZlYiAxMSwwLjAKKzI1LEZyaSAxOCBGZWIgMTEsMC4wCisyNixTYXQgMTkgRmViIDExLDAuMAorMjcsU3VuIDIwIEZlYiAxMSwwLjAKKzI4LE1vbiAyMSBGZWIgMTEsMC4wCisyOSxUdWUgMjIgRmViIDExLDAuMAorMzAsV2VkIDIzIEZlYiAxMSwwLjAKKzMxLFRodSAyNCBGZWIgMTEsMC4wCiszMixGcmkgMjUgRmViIDExLDAuMApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTRUlSU2luZ2xlUmVnaW9uX1JLX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9FXzAuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTRUlSU2luZ2xlUmVnaW9uX1JLX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9FXzAuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE0ODRhZTUKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNFSVJTaW5nbGVSZWdpb25fUktfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL0VfMC5jc3YKQEAgLTAsMCArMSwzMyBAQAoraXRlcmF0aW9uLHRpbWUsS0VOCisxLFR1ZSAyNSBKYW4gMTEsMC4wCisyLFdlZCAyNiBKYW4gMTEsMjQ3LjI2NDUwNjc4Mzk4MzI1CiszLFRodSAyNyBKYW4gMTEsMTE1MjguMDExNzk1MTkzMzcyCis0LEZyaSAyOCBKYW4gMTEsNTMwNzkxLjYyMzY1NDc5NworNSxTYXQgMjkgSmFuIDExLDEuNTM5Mjc3MTIzODk1OTQ5NUU3Cis2LFN1biAzMCBKYW4gMTEsMi4zMTIzNTM0MDY2MTU2MzU0RTcKKzcsTW9uIDMxIEphbiAxMSwxLjU1MDkyOTYyNjA1MzQ2ODlFNworOCxUdWUgMSBGZWIgMTEsMS4wMzk2MTkyNzc4NjcyNzQyRTcKKzksV2VkIDIgRmViIDExLDY5Njg3NzYuNTYyNzY5MDk4CisxMCxUaHUgMyBGZWIgMTEsNDY3MTMxMC42NTk5NDA4NzIKKzExLEZyaSA0IEZlYiAxMSwzMTMxMjczLjE4NDU4MTc2CisxMixTYXQgNSBGZWIgMTEsMjA5ODk1NS4xODcxMTQxMzgKKzEzLFN1biA2IEZlYiAxMSwxNDA2OTcxLjczNzk3NDQ4MTcKKzE0LE1vbiA3IEZlYiAxMSw5NDMxMjEuMzUzNjg0Njg3OAorMTUsVHVlIDggRmViIDExLDYzMjE5My4xMjM5NTI4NDMxCisxNixXZWQgOSBGZWIgMTEsNDIzNzcxLjU1OTk4MzE0OTMKKzE3LFRodSAxMCBGZWIgMTEsMjg0MDYyLjQ2MTY4Mjg1MTU0CisxOCxGcmkgMTEgRmViIDExLDE5MDQxMi42ODg3MTUzMjcwNworMTksU2F0IDEyIEZlYiAxMSwxMjc2MzcuMzkyODc4MjczNjkKKzIwLFN1biAxMyBGZWIgMTEsODU1NTcuODY5OTY0ODU1NgorMjEsTW9uIDE0IEZlYiAxMSw1NzM1MS4xMzMxNDI0OTYxNgorMjIsVHVlIDE1IEZlYiAxMSwzODQ0My41OTkzMzMxNjk2NgorMjMsV2VkIDE2IEZlYiAxMSwyNTc2OS41MDUzMDM3MDkwOQorMjQsVGh1IDE3IEZlYiAxMSwxNzI3My44MDkyOTc2ODc4MTQKKzI1LEZyaSAxOCBGZWIgMTEsMTE1NzguOTc2MTYzMzQ2Nzc5CisyNixTYXQgMTkgRmViIDExLDc3NjEuNjE2ODMxNjMzMDMxCisyNyxTdW4gMjAgRmViIDExLDUyMDIuNzY1MzM4NzY4NjYyCisyOCxNb24gMjEgRmViIDExLDM0ODcuNTE2NTUxOTYwMTM3MworMjksVHVlIDIyIEZlYiAxMSwyMzM3Ljc1MTM1MTEwNjM4OAorMzAsV2VkIDIzIEZlYiAxMSwxNTY3LjA0MDk4Njk1MzM0NTcKKzMxLFRodSAyNCBGZWIgMTEsMTA1MC40MTg1ODAwNzI0ODk1CiszMixGcmkgMjUgRmViIDExLDcwNC4xMTYzNTg1MDQ4OTQKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0VJUlNpbmdsZVJlZ2lvbl9SS19SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vSV8wLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0VJUlNpbmdsZVJlZ2lvbl9SS19SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vSV8wLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lY2EzNDdlCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTRUlSU2luZ2xlUmVnaW9uX1JLX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9JXzAuY3N2CkBAIC0wLDAgKzEsMzMgQEAKK2l0ZXJhdGlvbix0aW1lLEtFTgorMSxUdWUgMjUgSmFuIDExLDEuMAorMixXZWQgMjYgSmFuIDExLDIzLjMyMjAyNDgzMTYxMjUwMgorMyxUaHUgMjcgSmFuIDExLDEwODcuMDA4NTgyODQ4ODgyNworNCxGcmkgMjggSmFuIDExLDUwMzM3LjAzNzg3NDY4MjcyCis1LFNhdCAyOSBKYW4gMTEsMTgyMTg5Ni4xNzQ3NTQxMjgzCis2LFN1biAzMCBKYW4gMTEsOTE0MTAxNS45NDQ1ODMwNzcKKzcsTW9uIDMxIEphbiAxMSwxLjIzMzA4MTkxNDU1NzM5NDRFNworOCxUdWUgMSBGZWIgMTEsMS4yNDI0MDcyMjYxMjk0MTA4RTcKKzksV2VkIDIgRmViIDExLDEuMTExNTYxNTM0NzMyMTk1NUU3CisxMCxUaHUgMyBGZWIgMTEsOTMxOTU0NC4wNzY3MjE5OTIKKzExLEZyaSA0IEZlYiAxMSw3NDk5NTg2LjQ5Njc0MDM5MQorMTIsU2F0IDUgRmViIDExLDU4NjY3MDUuMjQzMzY1MzAzCisxMyxTdW4gNiBGZWIgMTEsNDQ5NTM1OC44MjUyMzM5NQorMTQsTW9uIDcgRmViIDExLDMzOTA1NzcuNjkzOTYyMTIKKzE1LFR1ZSA4IEZlYiAxMSwyNTI1NjQ5LjQ5OTAzNTY2MjUKKzE2LFdlZCA5IEZlYiAxMSwxODYyNTAyLjMyMDU0NjQyOTEKKzE3LFRodSAxMCBGZWIgMTEsMTM2MjA5Ny43MjE0MzYxNTYyCisxOCxGcmkgMTEgRmViIDExLDk4OTIwNi41MTczNzg0NTk5CisxOSxTYXQgMTIgRmViIDExLDcxNDEzOS45MTg4MjY0OTE4CisyMCxTdW4gMTMgRmViIDExLDUxMjkyNS40NDAyOTE0NTQ5NgorMjEsTW9uIDE0IEZlYiAxMSwzNjY3NjQuNjQxNzg0MDg0NDQKKzIyLFR1ZSAxNSBGZWIgMTEsMjYxMjI3LjExNDQ3NDI2NTUKKzIzLFdlZCAxNiBGZWIgMTEsMTg1NDEzLjU1ODI1NTc0OTgKKzI0LFRodSAxNyBGZWIgMTEsMTMxMTk1LjkzNTcxODE0MTUKKzI1LEZyaSAxOCBGZWIgMTEsOTI1NzQuODQ1NjkxOTY0NjYKKzI2LFNhdCAxOSBGZWIgMTEsNjUxNTkuNDEzMzU2NzUyNjY2CisyNyxTdW4gMjAgRmViIDExLDQ1NzU4Ljc2MDc5MzMyNTI0NAorMjgsTW9uIDIxIEZlYiAxMSwzMjA2OC4wMTY0OTc0MDU4MDYKKzI5LFR1ZSAyMiBGZWIgMTEsMjI0MzAuOTMxMjc5NDI5MzYyCiszMCxXZWQgMjMgRmViIDExLDE1NjYyLjcxNjY1NjU1MjkzMworMzEsVGh1IDI0IEZlYiAxMSwxMDkxOS4xOTg0NTk0MDMyOTgKKzMyLEZyaSAyNSBGZWIgMTEsNzYwMS4wMDI3NTk0NTE2NzMKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0VJUlNpbmdsZVJlZ2lvbl9SS19SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vSW5jaWRlbmNlXzAuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTRUlSU2luZ2xlUmVnaW9uX1JLX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9JbmNpZGVuY2VfMC5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTdkZDMwNQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0VJUlNpbmdsZVJlZ2lvbl9SS19SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vSW5jaWRlbmNlXzAuY3N2CkBAIC0wLDAgKzEsMzMgQEAKK2l0ZXJhdGlvbix0aW1lLEtFTgorMSxUdWUgMjUgSmFuIDExLDAuMAorMixXZWQgMjYgSmFuIDExLDI3Mi4wMDQ0Mzg2ODg0NDUxCiszLFRodSAyNyBKYW4gMTEsMTI0NTUuMTc3NTc3MjU0MTY4Cis0LEZyaSAyOCBKYW4gMTEsNTczNjU3LjU2NDA5OTA0NTUKKzUsU2F0IDI5IEphbiAxMSwxLjY4NDM0ODM4MzIwODMxNDNFNworNixTdW4gMzAgSmFuIDExLDEuNzI2NDgyNTg5MzU1MDA3MkU3Cis3LE1vbiAzMSBKYW4gMTEsMTMxNzMuOTEyMDU4MDg5MTIxCis4LFR1ZSAxIEZlYiAxMSwwLjAwNzQ2MzQ0NTU5Mjc0ODUzOAorOSxXZWQgMiBGZWIgMTEsNi40MDQ5NTAwNzk3NTc3ODVFLTEwCisxMCxUaHUgMyBGZWIgMTEsMS4zNzk4NjA3NTE4MzAyMjc3RS0xNgorMTEsRnJpIDQgRmViIDExLDIuMzg0Mjk0OTc4NjEzODE1RS0yMgorMTIsU2F0IDUgRmViIDExLDQuNDQwNDMwODE3NTk0MDg3RS0yNworMTMsU3VuIDYgRmViIDExLDcuODU1MTUwNzk0NTk5MjUzRS0zMQorMTQsTW9uIDcgRmViIDExLDkuNzMwMTE4NjAwNjQ5MTczRS0zNAorMTUsVHVlIDggRmViIDExLDguOTY3MjM5MzQ5MTc5ODQ2RS0zNgorMTYsV2VkIDkgRmViIDExLDMuNjMyNjgzNDA2ODU5NDQ4NEUtMzcKKzE3LFRodSAxMCBGZWIgMTEsNy4wNDI1MTY2NjIzNzAxMTRFLTM4CisxOCxGcmkgMTEgRmViIDExLDguODA4MzkzNzU5ODk5MjE4RS0zOQorMTksU2F0IDEyIEZlYiAxMSwxLjY2ODE5OTAxMTU5NTgwNDhFLTM5CisyMCxTdW4gMTMgRmViIDExLDQuNTc2NDI3OTMxMjM2MDc2RS00MAorMjEsTW9uIDE0IEZlYiAxMSwxLjY0NjIwMjkzMTM2MzM1OEUtNDAKKzIyLFR1ZSAxNSBGZWIgMTEsNy4xOTIxNjA3OTc3NjAyNTZFLTQxCisyMyxXZWQgMTYgRmViIDExLDMuNjA5NDYwODk1MTIxNDM4RS00MQorMjQsVGh1IDE3IEZlYiAxMSwxLjk5ODc0NzQ3MTc0MzA3NDhFLTQxCisyNSxGcmkgMTggRmViIDExLDEuMTg2NDU2NjU4OTAzMTg1MkUtNDEKKzI2LFNhdCAxOSBGZWIgMTEsNy4zOTUwMzY4ODkzNzkyODVFLTQyCisyNyxTdW4gMjAgRmViIDExLDQuNzY4OTA5MTc2MDEwNjg3RS00MgorMjgsTW9uIDIxIEZlYiAxMSwzLjE0ODc2MzUxOTE1Mjk5NUUtNDIKKzI5LFR1ZSAyMiBGZWIgMTEsMi4xMTI5MzUzODAzNjA0NTJFLTQyCiszMCxXZWQgMjMgRmViIDExLDEuNDMzNDc4MjEyNzM1OTU1N0UtNDIKKzMxLFRodSAyNCBGZWIgMTEsOS43OTYzNjMyMDE0MTYzOTNFLTQzCiszMixGcmkgMjUgRmViIDExLDYuNzI2NjMyNTIwMDM3MTY3RS00MwpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTRUlSU2luZ2xlUmVnaW9uX1JLX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9Qb3B1bGF0aW9uIENvdW50XzAuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTRUlSU2luZ2xlUmVnaW9uX1JLX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9Qb3B1bGF0aW9uIENvdW50XzAuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMwMTc0NjgKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNFSVJTaW5nbGVSZWdpb25fUktfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL1BvcHVsYXRpb24gQ291bnRfMC5jc3YKQEAgLTAsMCArMSwzMyBAQAoraXRlcmF0aW9uLHRpbWUsS0VOCisxLFR1ZSAyNSBKYW4gMTEsMy40NzA3ODE3RTcKKzIsV2VkIDI2IEphbiAxMSwzLjQ3MDc4MTY5OTk5OTk5ODVFNworMyxUaHUgMjcgSmFuIDExLDMuNDcwNzgxNjk5OTk5OTk4RTcKKzQsRnJpIDI4IEphbiAxMSwzLjQ3MDc4MTY5OTk5OTk5OEU3Cis1LFNhdCAyOSBKYW4gMTEsMy40NzA3ODE2OTk5OTk5OTg1RTcKKzYsU3VuIDMwIEphbiAxMSwzLjQ3MDc4MTY5OTk5OTk5ODVFNworNyxNb24gMzEgSmFuIDExLDMuNDcwNzgxNjk5OTk5OTk4RTcKKzgsVHVlIDEgRmViIDExLDMuNDcwNzgxNjk5OTk5OTk3RTcKKzksV2VkIDIgRmViIDExLDMuNDcwNzgxNjk5OTk5OTk4RTcKKzEwLFRodSAzIEZlYiAxMSwzLjQ3MDc4MTY5OTk5OTk5N0U3CisxMSxGcmkgNCBGZWIgMTEsMy40NzA3ODE2OTk5OTk5OTdFNworMTIsU2F0IDUgRmViIDExLDMuNDcwNzgxNjk5OTk5OTk3RTcKKzEzLFN1biA2IEZlYiAxMSwzLjQ3MDc4MTY5OTk5OTk5OEU3CisxNCxNb24gNyBGZWIgMTEsMy40NzA3ODE2OTk5OTk5OThFNworMTUsVHVlIDggRmViIDExLDMuNDcwNzgxNjk5OTk5OTk4RTcKKzE2LFdlZCA5IEZlYiAxMSwzLjQ3MDc4MTY5OTk5OTk5OEU3CisxNyxUaHUgMTAgRmViIDExLDMuNDcwNzgxNjk5OTk5OTk4RTcKKzE4LEZyaSAxMSBGZWIgMTEsMy40NzA3ODE2OTk5OTk5OThFNworMTksU2F0IDEyIEZlYiAxMSwzLjQ3MDc4MTY5OTk5OTk5OEU3CisyMCxTdW4gMTMgRmViIDExLDMuNDcwNzgxNjk5OTk5OTk4RTcKKzIxLE1vbiAxNCBGZWIgMTEsMy40NzA3ODE2OTk5OTk5OThFNworMjIsVHVlIDE1IEZlYiAxMSwzLjQ3MDc4MTY5OTk5OTk5OEU3CisyMyxXZWQgMTYgRmViIDExLDMuNDcwNzgxNjk5OTk5OTk4RTcKKzI0LFRodSAxNyBGZWIgMTEsMy40NzA3ODE2OTk5OTk5OThFNworMjUsRnJpIDE4IEZlYiAxMSwzLjQ3MDc4MTY5OTk5OTk5OEU3CisyNixTYXQgMTkgRmViIDExLDMuNDcwNzgxNjk5OTk5OTk3RTcKKzI3LFN1biAyMCBGZWIgMTEsMy40NzA3ODE2OTk5OTk5OThFNworMjgsTW9uIDIxIEZlYiAxMSwzLjQ3MDc4MTY5OTk5OTk5NkU3CisyOSxUdWUgMjIgRmViIDExLDMuNDcwNzgxNjk5OTk5OTk2RTcKKzMwLFdlZCAyMyBGZWIgMTEsMy40NzA3ODE2OTk5OTk5OTdFNworMzEsVGh1IDI0IEZlYiAxMSwzLjQ3MDc4MTY5OTk5OTk5N0U3CiszMixGcmkgMjUgRmViIDExLDMuNDcwNzgxNjk5OTk5OTk3RTcKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0VJUlNpbmdsZVJlZ2lvbl9SS19SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vUl8wLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0VJUlNpbmdsZVJlZ2lvbl9SS19SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vUl8wLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNGNkM2M0Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTRUlSU2luZ2xlUmVnaW9uX1JLX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9SXzAuY3N2CkBAIC0wLDAgKzEsMzMgQEAKK2l0ZXJhdGlvbix0aW1lLEtFTgorMSxUdWUgMjUgSmFuIDExLDAuMAorMixXZWQgMjYgSmFuIDExLDIuNDE3ODI2Nzc2MjYxNzAxCiszLFRodSAyNyBKYW4gMTEsMTEzLjE1MTE2NDQ3MjE1OTE3Cis0LEZyaSAyOCBKYW4gMTEsNTI1Ni44MzM3NjE5OTM3ODgKKzUsU2F0IDI5IEphbiAxMSwyMTUxOTYuNDAwNzE3MTA4Cis2LFN1biAzMCBKYW4gMTEsMjQzMDA5My4xMjAxNzY0MjgKKzcsTW9uIDMxIEphbiAxMSw2ODY3NzAxLjU4NjQyNzkxCis4LFR1ZSAxIEZlYiAxMSwxLjE4ODc1NTE5NjAwMzMxMjRFNworOSxXZWQgMiBGZWIgMTEsMS42NjIzNDI1MDg5OTA4OTIyRTcKKzEwLFRodSAzIEZlYiAxMSwyLjA3MTY5NjIyNjMzMzcxMUU3CisxMSxGcmkgNCBGZWIgMTEsMi40MDc2OTU3MzE4Njc3ODI0RTcKKzEyLFNhdCA1IEZlYiAxMSwyLjY3NDIxNTY1Njk1MjA1MzNFNworMTMsU3VuIDYgRmViIDExLDIuODgwNTQ4NjQzNjc5MTU0M0U3CisxNCxNb24gNyBGZWIgMTEsMy4wMzc0MTE3OTUyMzUzMTdFNworMTUsVHVlIDggRmViIDExLDMuMTU0OTk3NDM3NzAxMTQ3RTcKKzE2LFdlZCA5IEZlYiAxMSwzLjI0MjE1NDMxMTk0NzA0RTcKKzE3LFRodSAxMCBGZWIgMTEsMy4zMDYxNjU2ODE2ODgwOTdFNworMTgsRnJpIDExIEZlYiAxMSwzLjM1MjgxOTc3OTM5MDYxOTNFNworMTksU2F0IDEyIEZlYiAxMSwzLjM4NjYwMzk2ODgyOTUyMTVFNworMjAsU3VuIDEzIEZlYiAxMSwzLjQxMDkzMzM2ODk3NDM2N0U3CisyMSxNb24gMTQgRmViIDExLDMuNDI4MzcwMTIyNTA3MzRFNworMjIsVHVlIDE1IEZlYiAxMSwzLjQ0MDgxNDYyODYxOTI1NDRFNworMjMsV2VkIDE2IEZlYiAxMSwzLjQ0OTY2MzM5MzY0NDA1MkU3CisyNCxUaHUgMTcgRmViIDExLDMuNDU1OTM0NzI1NDk4NDE1RTcKKzI1LEZyaSAxOCBGZWIgMTEsMy40NjAzNjYzMTc4MTQ0NjZFNworMjYsU2F0IDE5IEZlYiAxMSwzLjQ2MzQ4OTU5Njk4MTE1OUU3CisyNyxTdW4gMjAgRmViIDExLDMuNDY1Njg1NTQ3Mzg2Nzg4RTcKKzI4LE1vbiAyMSBGZWIgMTEsMy40NjcyMjYxNDY2OTUwNkU3CisyOSxUdWUgMjIgRmViIDExLDMuNDY4MzA0ODMxNzM2OTQzRTcKKzMwLFdlZCAyMyBGZWIgMTEsMy40NjkwNTg3MjQyMzU2NDY0RTcKKzMxLFRodSAyNCBGZWIgMTEsMy40Njk1ODQ3MzgyOTYwNUU3CiszMixGcmkgMjUgRmViIDExLDMuNDY5OTUxMTg4MDg4MjAyRTcKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0VJUlNpbmdsZVJlZ2lvbl9SS19SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vU18wLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0VJUlNpbmdsZVJlZ2lvbl9SS19SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vU18wLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MTJhN2JkCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTRUlSU2luZ2xlUmVnaW9uX1JLX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9TXzAuY3N2CkBAIC0wLDAgKzEsMzMgQEAKK2l0ZXJhdGlvbix0aW1lLEtFTgorMSxUdWUgMjUgSmFuIDExLDMuNDcwNzgxNkU3CisyLFdlZCAyNiBKYW4gMTEsMy40NzA3NTQzOTk1NjQxNTlFNworMyxUaHUgMjcgSmFuIDExLDMuNDY5NTA4ODgyODQ1NzQ3RTcKKzQsRnJpIDI4IEphbiAxMSwzLjQxMjE0MzE1MDQ3MDg1MDZFNworNSxTYXQgMjkgSmFuIDExLDEuNzI3Nzk1MzE4NTU2OTI1RTcKKzYsU3VuIDMwIEphbiAxMSwxMzE3My44NjkwODQxMjQ3MzcKKzcsTW9uIDMxIEphbiAxMSwwLjAwNzQ2MzQzNzIwMjQzMTQyNgorOCxUdWUgMSBGZWIgMTEsNi40MDQ5NDk4OTE5NTQwMkUtMTAKKzksV2VkIDIgRmViIDExLDEuMzc5ODYzMTA0MDQ0NzQxNUUtMTYKKzEwLFRodSAzIEZlYiAxMSwyLjM4NDMzOTQwOTg4MTM0M0UtMjIKKzExLEZyaSA0IEZlYiAxMSw0LjQ0MTIxNzM0MjczOTM4NjRFLTI3CisxMixTYXQgNSBGZWIgMTEsNy44NjQ5NzUwNTY5NDg2MzRFLTMxCisxMyxTdW4gNiBGZWIgMTEsOS44MjQyNDEwOTE2ODU5MkUtMzQKKzE0LE1vbiA3IEZlYiAxMSw5LjQxMjI0ODM4ODY5NjgzMkUtMzYKKzE1LFR1ZSA4IEZlYiAxMSw0LjQ1MDA5MDM4NjYzNTA2NUUtMzcKKzE2LFdlZCA5IEZlYiAxMSw4LjE3NDA2OTc5ODk2ODU5M0UtMzgKKzE3LFRodSAxMCBGZWIgMTEsMS4xMzE1NTMxMzY0OTExODIyRS0zOAorMTgsRnJpIDExIEZlYiAxMSwyLjUwNzEzNzYwNTM0MTQ1MkUtMzkKKzE5LFNhdCAxMiBGZWIgMTEsOC4zODkzODU5MzY0MjE3OThFLTQwCisyMCxTdW4gMTMgRmViIDExLDMuODEyOTU4MDA1NDg2OTMyRS00MAorMjEsTW9uIDE0IEZlYiAxMSwyLjE2Njc1NTA3NDA0NzU2NTZFLTQwCisyMixUdWUgMTUgRmViIDExLDEuNDQ3NTM4OTk0Mjg3MzMzN0UtNDAKKzIzLFdlZCAxNiBGZWIgMTEsMS4wODY1OTI5MDQ3NzI1OTQ2RS00MAorMjQsVGh1IDE3IEZlYiAxMSw4Ljg2NzE4MTU3NTk4NjE0RS00MQorMjUsRnJpIDE4IEZlYiAxMSw3LjY4MDcyNDkxNzA4MjY0OEUtNDEKKzI2LFNhdCAxOSBGZWIgMTEsNi45NDEyMjEyMjgxNDQ3NEUtNDEKKzI3LFN1biAyMCBGZWIgMTEsNi40NjQzMzAzMTA1NDM2N0UtNDEKKzI4LE1vbiAyMSBGZWIgMTEsNi4xNDk0NTM5NTg2MjgzNzFFLTQxCisyOSxUdWUgMjIgRmViIDExLDUuOTM4MTYwNDIwNTkyMzI3RS00MQorMzAsV2VkIDIzIEZlYiAxMSw1Ljc5NDgxMjU5OTMxODczMUUtNDEKKzMxLFRodSAyNCBGZWIgMTEsNS42OTY4NDg5NjczMDQ1NjhFLTQxCiszMixGcmkgMjUgRmViIDExLDUuNjI5NTgyNjQyMTA0MTk2RS00MQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTRUlSU2luZ2xlUmVnaW9uX1JLX1JlZmVyZW5jZS9UZXN0U0VJUi9ydW5wYXJhbWV0ZXJzLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0VJUlNpbmdsZVJlZ2lvbl9SS19SZWZlcmVuY2UvVGVzdFNFSVIvcnVucGFyYW1ldGVycy5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTgxMzIxMgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0VJUlNpbmdsZVJlZ2lvbl9SS19SZWZlcmVuY2UvVGVzdFNFSVIvcnVucGFyYW1ldGVycy5jc3YKQEAgLTAsMCArMSwyIEBACitkaXNlYXNlTmFtZSxwb3B1bGF0aW9uSWRlbnRpZmllcix0aW1lUGVyaW9kLGZyZXF1ZW5jeURlcGVuZGVudCxyZWZlcmVuY2VQb3B1bGF0aW9uRGVuc2l0eSxyb2FkTmV0d29ya0luZmVjdGlvdXNQcm9wb3J0aW9uLGNoYXJhY3RlcmlzdGljTWl4aW5nRGlzdGFuY2UsdHJhbnNtaXNzaW9uUmF0ZSxub25MaW5lYXJpdHlDb2VmZmljaWVudCxyZWNvdmVyeVJhdGUsaW5mZWN0aW91c01vcnRhbGl0eVJhdGUsaW1tdW5pdHlMb3NzUmF0ZSxpbmN1YmF0aW9uUmF0ZQorVGVzdFNFSVIsaHVtYW4sODY0MDAwMDAsdHJ1ZSwxMDAuMCwwLjAxLDIuMjUsNDUuMCwxLjAsMC40LDAuMCwwLjAsMC40ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTRUlSU2luZ2xlUmVnaW9uX1JLX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL2h1bWFuL0JpcnRoc18wLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0VJUlNpbmdsZVJlZ2lvbl9SS19SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9odW1hbi9CaXJ0aHNfMC5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTIzYjI3ZAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0VJUlNpbmdsZVJlZ2lvbl9SS19SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9odW1hbi9CaXJ0aHNfMC5jc3YKQEAgLTAsMCArMSwzMyBAQAoraXRlcmF0aW9uLHRpbWUsS0VOCisxLFR1ZSAyNSBKYW4gMTEsMC4wCisyLFdlZCAyNiBKYW4gMTEsMC4wCiszLFRodSAyNyBKYW4gMTEsMC4wCis0LEZyaSAyOCBKYW4gMTEsMC4wCis1LFNhdCAyOSBKYW4gMTEsMC4wCis2LFN1biAzMCBKYW4gMTEsMC4wCis3LE1vbiAzMSBKYW4gMTEsMC4wCis4LFR1ZSAxIEZlYiAxMSwwLjAKKzksV2VkIDIgRmViIDExLDAuMAorMTAsVGh1IDMgRmViIDExLDAuMAorMTEsRnJpIDQgRmViIDExLDAuMAorMTIsU2F0IDUgRmViIDExLDAuMAorMTMsU3VuIDYgRmViIDExLDAuMAorMTQsTW9uIDcgRmViIDExLDAuMAorMTUsVHVlIDggRmViIDExLDAuMAorMTYsV2VkIDkgRmViIDExLDAuMAorMTcsVGh1IDEwIEZlYiAxMSwwLjAKKzE4LEZyaSAxMSBGZWIgMTEsMC4wCisxOSxTYXQgMTIgRmViIDExLDAuMAorMjAsU3VuIDEzIEZlYiAxMSwwLjAKKzIxLE1vbiAxNCBGZWIgMTEsMC4wCisyMixUdWUgMTUgRmViIDExLDAuMAorMjMsV2VkIDE2IEZlYiAxMSwwLjAKKzI0LFRodSAxNyBGZWIgMTEsMC4wCisyNSxGcmkgMTggRmViIDExLDAuMAorMjYsU2F0IDE5IEZlYiAxMSwwLjAKKzI3LFN1biAyMCBGZWIgMTEsMC4wCisyOCxNb24gMjEgRmViIDExLDAuMAorMjksVHVlIDIyIEZlYiAxMSwwLjAKKzMwLFdlZCAyMyBGZWIgMTEsMC4wCiszMSxUaHUgMjQgRmViIDExLDAuMAorMzIsRnJpIDI1IEZlYiAxMSwwLjAKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0VJUlNpbmdsZVJlZ2lvbl9SS19SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9odW1hbi9Db3VudF8wLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0VJUlNpbmdsZVJlZ2lvbl9SS19SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9odW1hbi9Db3VudF8wLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYWJmNTQ3Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTRUlSU2luZ2xlUmVnaW9uX1JLX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL2h1bWFuL0NvdW50XzAuY3N2CkBAIC0wLDAgKzEsMzMgQEAKK2l0ZXJhdGlvbix0aW1lLEtFTgorMSxUdWUgMjUgSmFuIDExLDMuNDcwNzgxN0U3CisyLFdlZCAyNiBKYW4gMTEsMy40NzA3ODE3RTcKKzMsVGh1IDI3IEphbiAxMSwzLjQ3MDc4MTdFNworNCxGcmkgMjggSmFuIDExLDMuNDcwNzgxN0U3Cis1LFNhdCAyOSBKYW4gMTEsMy40NzA3ODE3RTcKKzYsU3VuIDMwIEphbiAxMSwzLjQ3MDc4MTdFNworNyxNb24gMzEgSmFuIDExLDMuNDcwNzgxN0U3Cis4LFR1ZSAxIEZlYiAxMSwzLjQ3MDc4MTdFNworOSxXZWQgMiBGZWIgMTEsMy40NzA3ODE3RTcKKzEwLFRodSAzIEZlYiAxMSwzLjQ3MDc4MTdFNworMTEsRnJpIDQgRmViIDExLDMuNDcwNzgxN0U3CisxMixTYXQgNSBGZWIgMTEsMy40NzA3ODE3RTcKKzEzLFN1biA2IEZlYiAxMSwzLjQ3MDc4MTdFNworMTQsTW9uIDcgRmViIDExLDMuNDcwNzgxN0U3CisxNSxUdWUgOCBGZWIgMTEsMy40NzA3ODE3RTcKKzE2LFdlZCA5IEZlYiAxMSwzLjQ3MDc4MTdFNworMTcsVGh1IDEwIEZlYiAxMSwzLjQ3MDc4MTdFNworMTgsRnJpIDExIEZlYiAxMSwzLjQ3MDc4MTdFNworMTksU2F0IDEyIEZlYiAxMSwzLjQ3MDc4MTdFNworMjAsU3VuIDEzIEZlYiAxMSwzLjQ3MDc4MTdFNworMjEsTW9uIDE0IEZlYiAxMSwzLjQ3MDc4MTdFNworMjIsVHVlIDE1IEZlYiAxMSwzLjQ3MDc4MTdFNworMjMsV2VkIDE2IEZlYiAxMSwzLjQ3MDc4MTdFNworMjQsVGh1IDE3IEZlYiAxMSwzLjQ3MDc4MTdFNworMjUsRnJpIDE4IEZlYiAxMSwzLjQ3MDc4MTdFNworMjYsU2F0IDE5IEZlYiAxMSwzLjQ3MDc4MTdFNworMjcsU3VuIDIwIEZlYiAxMSwzLjQ3MDc4MTdFNworMjgsTW9uIDIxIEZlYiAxMSwzLjQ3MDc4MTdFNworMjksVHVlIDIyIEZlYiAxMSwzLjQ3MDc4MTdFNworMzAsV2VkIDIzIEZlYiAxMSwzLjQ3MDc4MTdFNworMzEsVGh1IDI0IEZlYiAxMSwzLjQ3MDc4MTdFNworMzIsRnJpIDI1IEZlYiAxMSwzLjQ3MDc4MTdFNwpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTRUlSU2luZ2xlUmVnaW9uX1JLX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL2h1bWFuL0RlYXRoc18wLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0VJUlNpbmdsZVJlZ2lvbl9SS19SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9odW1hbi9EZWF0aHNfMC5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTIzYjI3ZAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0VJUlNpbmdsZVJlZ2lvbl9SS19SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9odW1hbi9EZWF0aHNfMC5jc3YKQEAgLTAsMCArMSwzMyBAQAoraXRlcmF0aW9uLHRpbWUsS0VOCisxLFR1ZSAyNSBKYW4gMTEsMC4wCisyLFdlZCAyNiBKYW4gMTEsMC4wCiszLFRodSAyNyBKYW4gMTEsMC4wCis0LEZyaSAyOCBKYW4gMTEsMC4wCis1LFNhdCAyOSBKYW4gMTEsMC4wCis2LFN1biAzMCBKYW4gMTEsMC4wCis3LE1vbiAzMSBKYW4gMTEsMC4wCis4LFR1ZSAxIEZlYiAxMSwwLjAKKzksV2VkIDIgRmViIDExLDAuMAorMTAsVGh1IDMgRmViIDExLDAuMAorMTEsRnJpIDQgRmViIDExLDAuMAorMTIsU2F0IDUgRmViIDExLDAuMAorMTMsU3VuIDYgRmViIDExLDAuMAorMTQsTW9uIDcgRmViIDExLDAuMAorMTUsVHVlIDggRmViIDExLDAuMAorMTYsV2VkIDkgRmViIDExLDAuMAorMTcsVGh1IDEwIEZlYiAxMSwwLjAKKzE4LEZyaSAxMSBGZWIgMTEsMC4wCisxOSxTYXQgMTIgRmViIDExLDAuMAorMjAsU3VuIDEzIEZlYiAxMSwwLjAKKzIxLE1vbiAxNCBGZWIgMTEsMC4wCisyMixUdWUgMTUgRmViIDExLDAuMAorMjMsV2VkIDE2IEZlYiAxMSwwLjAKKzI0LFRodSAxNyBGZWIgMTEsMC4wCisyNSxGcmkgMTggRmViIDExLDAuMAorMjYsU2F0IDE5IEZlYiAxMSwwLjAKKzI3LFN1biAyMCBGZWIgMTEsMC4wCisyOCxNb24gMjEgRmViIDExLDAuMAorMjksVHVlIDIyIEZlYiAxMSwwLjAKKzMwLFdlZCAyMyBGZWIgMTEsMC4wCiszMSxUaHUgMjQgRmViIDExLDAuMAorMzIsRnJpIDI1IEZlYiAxMSwwLjAKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0VJUlNpbmdsZVJlZ2lvbl9SS19SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9odW1hbi9EZW5zaXR5XzAuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTRUlSU2luZ2xlUmVnaW9uX1JLX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL2h1bWFuL0RlbnNpdHlfMC5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGViNjQ1ZgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0VJUlNpbmdsZVJlZ2lvbl9SS19SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9odW1hbi9EZW5zaXR5XzAuY3N2CkBAIC0wLDAgKzEsMzMgQEAKK2l0ZXJhdGlvbix0aW1lLEtFTgorMSxUdWUgMjUgSmFuIDExLDYwLjk3MTEzMjE5MTQ4MDAyCisyLFdlZCAyNiBKYW4gMTEsNjAuOTcxMTMyMTkxNDgwMDIKKzMsVGh1IDI3IEphbiAxMSw2MC45NzExMzIxOTE0ODAwMgorNCxGcmkgMjggSmFuIDExLDYwLjk3MTEzMjE5MTQ4MDAyCis1LFNhdCAyOSBKYW4gMTEsNjAuOTcxMTMyMTkxNDgwMDIKKzYsU3VuIDMwIEphbiAxMSw2MC45NzExMzIxOTE0ODAwMgorNyxNb24gMzEgSmFuIDExLDYwLjk3MTEzMjE5MTQ4MDAyCis4LFR1ZSAxIEZlYiAxMSw2MC45NzExMzIxOTE0ODAwMgorOSxXZWQgMiBGZWIgMTEsNjAuOTcxMTMyMTkxNDgwMDIKKzEwLFRodSAzIEZlYiAxMSw2MC45NzExMzIxOTE0ODAwMgorMTEsRnJpIDQgRmViIDExLDYwLjk3MTEzMjE5MTQ4MDAyCisxMixTYXQgNSBGZWIgMTEsNjAuOTcxMTMyMTkxNDgwMDIKKzEzLFN1biA2IEZlYiAxMSw2MC45NzExMzIxOTE0ODAwMgorMTQsTW9uIDcgRmViIDExLDYwLjk3MTEzMjE5MTQ4MDAyCisxNSxUdWUgOCBGZWIgMTEsNjAuOTcxMTMyMTkxNDgwMDIKKzE2LFdlZCA5IEZlYiAxMSw2MC45NzExMzIxOTE0ODAwMgorMTcsVGh1IDEwIEZlYiAxMSw2MC45NzExMzIxOTE0ODAwMgorMTgsRnJpIDExIEZlYiAxMSw2MC45NzExMzIxOTE0ODAwMgorMTksU2F0IDEyIEZlYiAxMSw2MC45NzExMzIxOTE0ODAwMgorMjAsU3VuIDEzIEZlYiAxMSw2MC45NzExMzIxOTE0ODAwMgorMjEsTW9uIDE0IEZlYiAxMSw2MC45NzExMzIxOTE0ODAwMgorMjIsVHVlIDE1IEZlYiAxMSw2MC45NzExMzIxOTE0ODAwMgorMjMsV2VkIDE2IEZlYiAxMSw2MC45NzExMzIxOTE0ODAwMgorMjQsVGh1IDE3IEZlYiAxMSw2MC45NzExMzIxOTE0ODAwMgorMjUsRnJpIDE4IEZlYiAxMSw2MC45NzExMzIxOTE0ODAwMgorMjYsU2F0IDE5IEZlYiAxMSw2MC45NzExMzIxOTE0ODAwMgorMjcsU3VuIDIwIEZlYiAxMSw2MC45NzExMzIxOTE0ODAwMgorMjgsTW9uIDIxIEZlYiAxMSw2MC45NzExMzIxOTE0ODAwMgorMjksVHVlIDIyIEZlYiAxMSw2MC45NzExMzIxOTE0ODAwMgorMzAsV2VkIDIzIEZlYiAxMSw2MC45NzExMzIxOTE0ODAwMgorMzEsVGh1IDI0IEZlYiAxMSw2MC45NzExMzIxOTE0ODAwMgorMzIsRnJpIDI1IEZlYiAxMSw2MC45NzExMzIxOTE0ODAwMgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTRUlSU2luZ2xlUmVnaW9uX1JLX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL2h1bWFuL0luY2lkZW5jZV8wLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0VJUlNpbmdsZVJlZ2lvbl9SS19SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9odW1hbi9JbmNpZGVuY2VfMC5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDkxMGI0MAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0VJUlNpbmdsZVJlZ2lvbl9SS19SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9odW1hbi9JbmNpZGVuY2VfMC5jc3YKQEAgLTAsMCArMSwzMyBAQAoraXRlcmF0aW9uLHRpbWUsS0VOLHN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL25vZGUvdHJhbnNwb3J0L3BpcGUvWlpaCisxLFR1ZSAyNSBKYW4gMTEsMC4wLDAuMAorMixXZWQgMjYgSmFuIDExLDAuMCwwLjAKKzMsVGh1IDI3IEphbiAxMSwwLjAsMC4wCis0LEZyaSAyOCBKYW4gMTEsMC4wLDAuMAorNSxTYXQgMjkgSmFuIDExLDAuMCwwLjAKKzYsU3VuIDMwIEphbiAxMSwwLjAsMC4wCis3LE1vbiAzMSBKYW4gMTEsMC4wLDAuMAorOCxUdWUgMSBGZWIgMTEsMC4wLDAuMAorOSxXZWQgMiBGZWIgMTEsMC4wLDAuMAorMTAsVGh1IDMgRmViIDExLDAuMCwwLjAKKzExLEZyaSA0IEZlYiAxMSwwLjAsMC4wCisxMixTYXQgNSBGZWIgMTEsMC4wLDAuMAorMTMsU3VuIDYgRmViIDExLDAuMCwwLjAKKzE0LE1vbiA3IEZlYiAxMSwwLjAsMC4wCisxNSxUdWUgOCBGZWIgMTEsMC4wLDAuMAorMTYsV2VkIDkgRmViIDExLDAuMCwwLjAKKzE3LFRodSAxMCBGZWIgMTEsMC4wLDAuMAorMTgsRnJpIDExIEZlYiAxMSwwLjAsMC4wCisxOSxTYXQgMTIgRmViIDExLDAuMCwwLjAKKzIwLFN1biAxMyBGZWIgMTEsMC4wLDAuMAorMjEsTW9uIDE0IEZlYiAxMSwwLjAsMC4wCisyMixUdWUgMTUgRmViIDExLDAuMCwwLjAKKzIzLFdlZCAxNiBGZWIgMTEsMC4wLDAuMAorMjQsVGh1IDE3IEZlYiAxMSwwLjAsMC4wCisyNSxGcmkgMTggRmViIDExLDAuMCwwLjAKKzI2LFNhdCAxOSBGZWIgMTEsMC4wLDAuMAorMjcsU3VuIDIwIEZlYiAxMSwwLjAsMC4wCisyOCxNb24gMjEgRmViIDExLDAuMCwwLjAKKzI5LFR1ZSAyMiBGZWIgMTEsMC4wLDAuMAorMzAsV2VkIDIzIEZlYiAxMSwwLjAsMC4wCiszMSxUaHUgMjQgRmViIDExLDAuMCwwLjAKKzMyLEZyaSAyNSBGZWIgMTEsMC4wLDAuMApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTRUlSU2luZ2xlUmVnaW9uX1JLX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL3J1bnBhcmFtZXRlcnMuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTRUlSU2luZ2xlUmVnaW9uX1JLX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL3J1bnBhcmFtZXRlcnMuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA2ODU1YjUKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNFSVJTaW5nbGVSZWdpb25fUktfUmVmZXJlbmNlL2F1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwvcnVucGFyYW1ldGVycy5jc3YKQEAgLTAsMCArMSwyIEBACitwb3B1bGF0aW9uSWRlbnRpZmllcixuYW1lLHRhcmdldElTT0tleSxiaXJ0aFJhdGUsZGVhdGhSYXRlLHRpbWVQZXJpb2QKK2h1bWFuLGF1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwsLDAuMCwwLjAsODY0MDAwMDAKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNFSVJTdGF0ZXNPbmx5X0ZEX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9EaXNlYXNlIERlYXRoc18wLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0VJUlN0YXRlc09ubHlfRkRfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL0Rpc2Vhc2UgRGVhdGhzXzAuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjExMmU4YjgKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNFSVJTdGF0ZXNPbmx5X0ZEX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9EaXNlYXNlIERlYXRoc18wLmNzdgpAQCAtMCwwICsxLDMzIEBACitpdGVyYXRpb24sdGltZSxzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9ub2RlL3RyYW5zcG9ydC9waXBlL1VTQQorMSxUdWUgMjUgSmFuIDExLDAuMAorMixXZWQgMjYgSmFuIDExLDAuMAorMyxUaHUgMjcgSmFuIDExLDAuMAorNCxGcmkgMjggSmFuIDExLDAuMAorNSxTYXQgMjkgSmFuIDExLDAuMAorNixTdW4gMzAgSmFuIDExLDAuMAorNyxNb24gMzEgSmFuIDExLDAuMAorOCxUdWUgMSBGZWIgMTEsMC4wCis5LFdlZCAyIEZlYiAxMSwwLjAKKzEwLFRodSAzIEZlYiAxMSwwLjAKKzExLEZyaSA0IEZlYiAxMSwwLjAKKzEyLFNhdCA1IEZlYiAxMSwwLjAKKzEzLFN1biA2IEZlYiAxMSwwLjAKKzE0LE1vbiA3IEZlYiAxMSwwLjAKKzE1LFR1ZSA4IEZlYiAxMSwwLjAKKzE2LFdlZCA5IEZlYiAxMSwwLjAKKzE3LFRodSAxMCBGZWIgMTEsMC4wCisxOCxGcmkgMTEgRmViIDExLDAuMAorMTksU2F0IDEyIEZlYiAxMSwwLjAKKzIwLFN1biAxMyBGZWIgMTEsMC4wCisyMSxNb24gMTQgRmViIDExLDAuMAorMjIsVHVlIDE1IEZlYiAxMSwwLjAKKzIzLFdlZCAxNiBGZWIgMTEsMC4wCisyNCxUaHUgMTcgRmViIDExLDAuMAorMjUsRnJpIDE4IEZlYiAxMSwwLjAKKzI2LFNhdCAxOSBGZWIgMTEsMC4wCisyNyxTdW4gMjAgRmViIDExLDAuMAorMjgsTW9uIDIxIEZlYiAxMSwwLjAKKzI5LFR1ZSAyMiBGZWIgMTEsMC4wCiszMCxXZWQgMjMgRmViIDExLDAuMAorMzEsVGh1IDI0IEZlYiAxMSwwLjAKKzMyLEZyaSAyNSBGZWIgMTEsMC4wCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNFSVJTdGF0ZXNPbmx5X0ZEX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9EaXNlYXNlIERlYXRoc18xLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0VJUlN0YXRlc09ubHlfRkRfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL0Rpc2Vhc2UgRGVhdGhzXzEuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ3YTg0M2YKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNFSVJTdGF0ZXNPbmx5X0ZEX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9EaXNlYXNlIERlYXRoc18xLmNzdgpAQCAtMCwwICsxLDMzIEBACitpdGVyYXRpb24sdGltZSxVUy1BSyxVUy1BTCxVUy1BUixVUy1BWixVUy1DQSxVUy1DTyxVUy1DVCxVUy1EQyxVUy1ERSxVUy1GTCxVUy1HQSxVUy1ISSxVUy1JQSxVUy1JRCxVUy1JTCxVUy1JTixVUy1LUyxVUy1LWSxVUy1MQSxVUy1NQSxVUy1NRCxVUy1NRSxVUy1NSSxVUy1NTixVUy1NTyxVUy1NUyxVUy1NVCxVUy1OQyxVUy1ORCxVUy1ORSxVUy1OSCxVUy1OSixVUy1OTSxVUy1OVixVUy1OWSxVUy1PSCxVUy1PSyxVUy1PUixVUy1QQSxVUy1SSSxVUy1TQyxVUy1TRCxVUy1UTixVUy1UWCxVUy1VVCxVUy1WQSxVUy1WVCxVUy1XQSxVUy1XSSxVUy1XVixVUy1XWQorMSxUdWUgMjUgSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyLFdlZCAyNiBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzMsVGh1IDI3IEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorNCxGcmkgMjggSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCis1LFNhdCAyOSBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzYsU3VuIDMwIEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorNyxNb24gMzEgSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCis4LFR1ZSAxIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorOSxXZWQgMiBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzEwLFRodSAzIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTEsRnJpIDQgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxMixTYXQgNSBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzEzLFN1biA2IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTQsTW9uIDcgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxNSxUdWUgOCBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzE2LFdlZCA5IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTcsVGh1IDEwIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTgsRnJpIDExIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTksU2F0IDEyIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjAsU3VuIDEzIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjEsTW9uIDE0IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjIsVHVlIDE1IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjMsV2VkIDE2IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjQsVGh1IDE3IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjUsRnJpIDE4IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjYsU2F0IDE5IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjcsU3VuIDIwIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjgsTW9uIDIxIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjksVHVlIDIyIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMzAsV2VkIDIzIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMzEsVGh1IDI0IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMzIsRnJpIDI1IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTRUlSU3RhdGVzT25seV9GRF9SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vRV8wLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0VJUlN0YXRlc09ubHlfRkRfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL0VfMC5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTUwODVlZgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0VJUlN0YXRlc09ubHlfRkRfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL0VfMC5jc3YKQEAgLTAsMCArMSwzMyBAQAoraXRlcmF0aW9uLHRpbWUsc3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vbm9kZS90cmFuc3BvcnQvcGlwZS9VU0EKKzEsVHVlIDI1IEphbiAxMSwwLjAKKzIsV2VkIDI2IEphbiAxMSwwLjAKKzMsVGh1IDI3IEphbiAxMSwwLjI4NTA3OTEyNjk4MDk2NjQKKzQsRnJpIDI4IEphbiAxMSwwLjA4NDE2OTExMjkwODYwNzMyCis1LFNhdCAyOSBKYW4gMTEsMTAuNDIzNzY2Njg1NjQxMjAzCis2LFN1biAzMCBKYW4gMTEsNS4xMjM3MzAwNzk2OTY0NzEKKzcsTW9uIDMxIEphbiAxMSwyOTEuNjQ5ODIxNzE2NDAyOQorOCxUdWUgMSBGZWIgMTEsMjAwLjA5OTIwMDM5NjE0MTE5Cis5LFdlZCAyIEZlYiAxMSw3Mzg4LjU0MzE2MTk5MjQyNzUKKzEwLFRodSAzIEZlYiAxMSw2NDExLjg4MDYyMDkzMzg0OQorMTEsRnJpIDQgRmViIDExLDE3NTkzNi4wNTgxNDE2MTY0NAorMTIsU2F0IDUgRmViIDExLDEzNTU0Mi41NDY1NjUxMzcyOAorMTMsU3VuIDYgRmViIDExLDg2MjY5MC43MTYyMTcyMjk4CisxNCxNb24gNyBGZWIgMTEsMC4wCisxNSxUdWUgOCBGZWIgMTEsNjM4NjQxLjMxOTE2MDI2MTIKKzE2LFdlZCA5IEZlYiAxMSw3NjIwNC42NDI3ODAzMTE0CisxNyxUaHUgMTAgRmViIDExLDU3MjE0Mi4yNjAwNTA4MTI5CisxOCxGcmkgMTEgRmViIDExLDIzNDE3NC44NjAzMDc4NTc4CisxOSxTYXQgMTIgRmViIDExLDI0MTEyNC4wMDA3NTM2MTM2CisyMCxTdW4gMTMgRmViIDExLDE2NjM4My41NzEyNjIzNDcxNgorMjEsTW9uIDE0IEZlYiAxMSwxNjc5NzcuNDMwODkwNzE3NDMKKzIyLFR1ZSAxNSBGZWIgMTEsODY5ODkuNDczNTYyNjQ4NDkKKzIzLFdlZCAxNiBGZWIgMTEsODg5MjMuNjUzNjYyMTA5MDYKKzI0LFRodSAxNyBGZWIgMTEsNTQ0OTEuNTg0OTUwODQwNzcKKzI1LEZyaSAxOCBGZWIgMTEsNTU2MDcuNDE3MzEyNjYxMTA2CisyNixTYXQgMTkgRmViIDExLDI5OTkwLjA5NjAyNTc4NzgzNgorMjcsU3VuIDIwIEZlYiAxMSwzMTA0Ny4zNzQ0MTY4ODkwOTUKKzI4LE1vbiAyMSBGZWIgMTEsMTc0OTAuMTE4MzQxNTY2MDkzCisyOSxUdWUgMjIgRmViIDExLDE4MTc0LjI2MzgwNTg1ODMyNQorMzAsV2VkIDIzIEZlYiAxMSw5NTA0Ljg0NjcxMDQ3Mzk4NworMzEsVGh1IDI0IEZlYiAxMSwxMDAwNC45NDEyNzk3MTkyNworMzIsRnJpIDI1IEZlYiAxMSw1MDc1LjU0NTI1MDMwMDM0NApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTRUlSU3RhdGVzT25seV9GRF9SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vRV8xLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0VJUlN0YXRlc09ubHlfRkRfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL0VfMS5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGIyMDEwYwotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0VJUlN0YXRlc09ubHlfRkRfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL0VfMS5jc3YKQEAgLTAsMCArMSwzMyBAQAoraXRlcmF0aW9uLHRpbWUsVVMtQUssVVMtQUwsVVMtQVIsVVMtQVosVVMtQ0EsVVMtQ08sVVMtQ1QsVVMtREMsVVMtREUsVVMtRkwsVVMtR0EsVVMtSEksVVMtSUEsVVMtSUQsVVMtSUwsVVMtSU4sVVMtS1MsVVMtS1ksVVMtTEEsVVMtTUEsVVMtTUQsVVMtTUUsVVMtTUksVVMtTU4sVVMtTU8sVVMtTVMsVVMtTVQsVVMtTkMsVVMtTkQsVVMtTkUsVVMtTkgsVVMtTkosVVMtTk0sVVMtTlYsVVMtTlksVVMtT0gsVVMtT0ssVVMtT1IsVVMtUEEsVVMtUkksVVMtU0MsVVMtU0QsVVMtVE4sVVMtVFgsVVMtVVQsVVMtVkEsVVMtVlQsVVMtV0EsVVMtV0ksVVMtV1YsVVMtV1kKKzEsVHVlIDI1IEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMixXZWQgMjYgSmFuIDExLDAuMCwwLjAsMC4wLDAuMCw0NC45OTk5OTg2NzE0NTUyNSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzMsVGh1IDI3IEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsNTMuNzE0ODgzNjAzNjY5NTgsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCis0LEZyaSAyOCBKYW4gMTEsMC4wMDE2NDY2MjEwNTU0MDkzMDIyLDAuMDAxNjUyNTE0Nzk4MTgyOTA4MSwwLjAwMTIwNTk1MDQ0MjU2OTQ1NzgsMC4wMTQyOTkxMjY2NzYwOTgyNDIsODU4LjEzNTAzNDIzMjI3MTEsMC4wMTQ5NjczODY0MzI1OTAzNTUsMC4wMDIxMzcxNjE3OTkzNDk2MDQsMC4wMDU1NzMyMTM4MzA4ODk1NjUsNS40NDAzNzc5MzY0MDk1MzQ1RS02LDAuMDM5NTI1MjUyNDM3NDMwNjY1LDAuMDI1OTgzNjk4Mzg4OTE2Nzg0LDAuMDA2MTA1MDEwNzc0MjMxNzEyLDkuOTMzMjIzMzgyMjE5NTg3RS00LDAuMDAxMjI2ODA1MjI0NjU3NDk5MywwLjAyODk4OTUwNzE5ODgxOTY2LDAuMDAzMDM3NTQ0MzQ3ODI0OTYyLDQuNjkyMzI1OTcwMTUxMjgyRS00LDAuMDAxNDc0MzQyNDIwNzY1NjgxNCwwLjAwMjc3NzMxMjkzNjUzMjg1MzUsMC4wMDg3MTQ1Nzg3MjQ0NDI2MjEsMC4wMDY0MzgyMzM5MjI4OTM0MzcsNy4yNTM4MzcyNDg1MzU5OEUtNCwwLjAxMTkxMzk3NDMxNTg3Mzc4NiwwLjAxMDcxNzU0NDUzNDY2OTMxNSwwLjAwNzkyMjU1MDM2OTg2ODgyMyw3Ljc4NDI3NDA5NzM0MDg0OUUtNCw4LjU5MTI2MzQ5MTIyNjY3RS00LDAuMDEyNzEwNTM2MzE4NzE1NDcyLDQuMDk4NDE4MDQ1NDIyMTI4M0UtNCwwLjAwMTQyNTM3OTAxOTMzNjM5MSwwLjAwMTIyMzYzMTY3MDg2MTE0MDcsMC4wMTEzNTcyNDIzMDcwNDUyODIsMC4wMDE5NjQ0Mjk3OTk4NjY2NzE4LDAuMDE1MDQ2MjcxOTEyNTE3MTU2LDAuMDI1NTU1MjY4NjI2NTQzMTg0LDAuMDExNTM1ODY4MDQ5Mjk5NjQsMC4wMDIxNDE2OTU0NDc2Mjk5NzQ2LDAuMDA0Njk1OTUyODg4NzYxNjYzLDAuMDEzMDk5NTIzMzQxMTgzODE2LDAuMDAxNjE4MDU5MDcxMjQ3NjYzOCwwLjAwMTk0Njc0ODU3MTU3NjI0NiwzLjk2MjQwODU5NzAxMzIxMUUtNCwwLjAwNzA4OTI2NTgxNTk0Nzk2NywwLjAzNjMzNzE5MDk2Njc3OTYyLDAuMDA2NDI5NjE5OTkxMTM0NDA0LDAuMDA5Njg4NDA2Mzc1MDU2NzM4LDQuMjM0NDI3NDkzODMxNTU2RS00LDAuMDA5ODg3NDMzNTM0NTU1NTEyLDAuMDAzMzM4NTc4NTkzNjM4MjQzNiwyLjIxNjk1NDAwOTA4NjI1MjJFLTQsMi45NTU5Mzg2Nzg3NzgxOTU1RS00Cis1LFNhdCAyOSBKYW4gMTEsMC4wMDE3MzY3MjE4NDcyNjk2NjQsMC4wMDE3NTM4OTY4MDk3MDE4MTYsMC4wMDEyNzk2NTM3MTQwMDI1MDQ0LDAuMDE1MDc0ODAzNzMxNTM5OTE3LDE5NzIuMDE1NTk5ODQxOTMyNywwLjAxNTc0ODgyMDAwNDk4OTU3NSwwLjAwMjI2NjY2ODIwMjIyOTI2MjMsMC4wMDU3NjE1Mzc4OTAyODQ4MDY1LDUuNzc5OTgwMjkyMTU0MjYxNEUtNiwwLjA0MTcwNTg1MzAxMTczNTYzNCwwLjAyNzM2MzY1MDQxNzMzODM2LDAuMDA2Mzk1NzUxMTc1OTExOTM1LDAuMDAxMDU0MzU2NzIyMTk1MjM1NywwLjAwMTI5OTk4OTgzNjk5OTc2NywwLjAzMDYwMDY4ODE4ODk5Njc4OCwwLjAwMzIyMjc1NDk4MjQ1NDg0MDYsNC45ODI5MjAxODAzMjEzMjFFLTQsMC4wMDE1NjQ4MjMwOTIwMjY0MDc5LDAuMDAyOTQ1NjYwNTE5OTM2ODUyNCwwLjAwOTIyMzU2NDk4NTM3OTYwNCwwLjAwNjgxNzI0MDExMTA1NjkzMiw3LjY5NDY1MDYyODk4NDk0OUUtNCwwLjAxMjYxNTkxNDkwMjg2MjU4NCwwLjAxMTMxODExMDc0MTgyMzc4NCwwLjAwODM4NDI2NjM4MjI5ODk4Nyw4LjI2NDA4Mjc1NzI1ODUxNkUtNCw5LjEwMzY2NzEzNDYyMDA4OUUtNCwwLjAxMzQ0NTE5MTkwNjIyMDY1Myw0LjM0NjY0MzI1ODAyMzMzMjdFLTQsMC4wMDE1MTA4OTIyNTY4OTM3OTM0LDAuMDAxMjk2NDc1NjEyNTA2MzgwNywwLjAxMjAyMTMzOTA3NTM3MjE3NCwwLjAwMjA4MDg1NTU4NTAzNjk0MzMsMC4wMTU2NTI2MTE4NjAzNzI0LDAuMDI3MDQ5ODAyNzk1NTQ4MDcsMC4wMTIyMjE3MjkzNzMxNDU2MDIsMC4wMDIyNzE1MTk5NTE2OTEwMDk1LDAuMDA0OTcwMjI2NzMxMDE4MzcsMC4wMTM4NzY0MDM4MzM4MTM0OTEsMC4wMDE3MTE3NTA2MDQzODIyMzA4LDAuMDAyMDY1NTMxMjYwNjQ4ODY3Nyw0LjIwMzcxNjAyNTQ2MzUzNzRFLTQsMC4wMDc1MDU5NjA5MzA0NTEwMTUsMC4wMzg0MTk5NjM2MzU5NzI4NjYsMC4wMDY3NzY2NjE5MTkwODQ5MDcsMC4wMTAyNTQzODAzOTc2MzA2NTgsNC40OTAxNzY0MjEyMDcxNzRFLTQsMC4wMTA0NTYwNTQ3MTA2NDk1MDYsMC4wMDM1NDA5Mzc4NTM1NzI3NTM0LDIuMzU0NTg3OTExMzQyNDI1NkUtNCwzLjEzNTMxMjIwMzk1Njg5MkUtNAorNixTdW4gMzAgSmFuIDExLDAuMTAwODYxNzg5MjUxODI1OCwwLjEwMTI0MTg0NzQwMjYwMzcsMC4wNzM4ODI0NDc3MjIwMzI0NCwwLjg3NTg2NDA5Mjk3MDM5MzcsMTc0OTUuNjI5Mzg5MTE4NTcsMC45MTY3NDQyNzUyNjU2NjAzLDAuMTMwOTMxMDk2Mjg0NDk5MzcsMC4zNDExODA4MjY0MDA5Mzg4MywzLjMzMzE2Njc0Njc4OTU1OEUtNCwyLjQyMTEwMjYxNTQ3NTUzOTMsMS41OTE1Mjc3NTk5OTMyMDEsMC4zNzM4ODAzNjE4ODQ1MDA0NywwLjA2MDg1NjM3NDQxNDEwNzk1LDAuMDc1MTU2OTg5OTQxMTQwNDgsMS43NzU3NjA1MDY5ODk0Nzc3LDAuMTg2MDk0MTMyMzA2ODU1MTIsMC4wMjg3NDgxNTk0NzM0NDE2MTUsMC4wOTAzMjYxMTEyOTM0NDg2OCwwLjE3MDE0OTQwNjg5NTgzNzcsMC41MzM4NTY3ODA3NjM3Mjk4LDAuMzk0NDEyNjI2NzQzMjU3MzMsMC4wNDQ0NDAxMzE3MDYwNDMzOCwwLjcyOTg2Mjk2Mzg5OTE4NDUsMC42NTY1MTQ3NDI3OTM0MTY5LDAuNDg1MzM1MjEzMTc4MDY0MzMsMC4wNDc2OTA5OTUyNDUxNDAwNzUsMC4wNTI2MzIwOTQwNDA1OTM4NywwLjc3ODYzNjUwMDY5Mjk3MzUsMC4wMjUxMDg1MjkwMDkyNjg0MzgsMC4wODczMjI5MzA5MDAzMzYzOCwwLjA3NDk2MjMwNzA2NDg4NjMsMC42OTU3NDgxODkwNzczMjI1LDAuMTIwMzQ0MjkwNzM3ODQ0ODgsMC45MjEyNjg0OTIyMTgwMDUyLDEuNTY1NTI0MDg4OTI5MjM2MywwLjcwNjcxMDU0ODU2NTUzNTgsMC4xMzEyMDg5MjEzMzA3MzAyMywwLjI4NzY3NDk4NDcxNTE4Njc3LDAuODAyNDk5ODM2OTg5NzMzNywwLjA5OTEyMTE5ODU5OTQzMzIsMC4xMTkyNjcwMzkxMzIxNzk1NSwwLjAyNDI3NTUxMTM4MzU2NzA2NywwLjQzNDI5NDM4MzEwNDcyMiwyLjIyNTk1NDY0MzgwNDIyOTIsMC4zOTM4MzAzNTc2MjQ5Mjg0LDAuNTkzNTEzODQyNjgzMzgwMSwwLjAyNTk0MTY1MjI3MzU1ODgsMC42MDU2OTA2ODU1MTk5NjcsMC4yMDQ1MzQ3OTEwNDY4MDM2NywwLjAxMzU4MjUyMjg1NjgzNTU0MSwwLjAxODEwOTMwODcxNzQ5MzIxCis3LE1vbiAzMSBKYW4gMTEsMC4xNTgxMTcxODY2NTkwMDc3OSwwLjE1OTY5NTQ4OTc5NTgyODQ1LDAuMTE2NTE0NDE2NDI4NDMxMywxLjM3MjQ1MzU2MDg4MTEwMjQsNTU2NTMuNzE5MDExODQ5NjEsMS40MzM3Nzc4NTY0MzYzMDA4LDAuMjA2MzgyMTAwMTQzMTA0MSwwLjUyNDQwMTc3NDk0OTMwMzUsNS4yNjI4NTU0NjMxNzAyMDJFLTQsMy43OTcwNjkyMjY0NjYyMjM2LDIuNDkxMjI2NjMyMDI2NjksMC41ODIyMzQ4Njg0NDYxMTE3LDAuMDk2MDAxMjIwNDQ0MDYwMDQsMC4xMTgzNjM2NTIxMzQ1NTc5OSwyLjc4NjAyNTg0NzMzNzkyMiwwLjI5MzQzNjE2MDk2MDA0MDA1LDAuMDQ1MzcwNzU4NDc4MjM4MTk2LDAuMTQyNDgwMDI0MDkxOTM5OCwwLjI2ODIwNTAwNDQ3NDAzNjMsMC44Mzk3ODgwODUwNzIwMDQ2LDAuNjIwNzAwNzM2ODc3NDU2NiwwLjA3MDA2MDYyNjkyMDg3MDM3LDEuMTQ4NjYzMjI3Mjg3MzIwNSwxLjAzMDQ1ODc4MjM0MDgyMiwwLjc2MzM3MDE5MzcwMzA5ODEsMC4wNzUyNDYyNzU0MTcxMDI2NSwwLjA4Mjg4ODU3OTMzODUyMzgxLDEuMjI0MTQ4OTI3MzY4NjgzLDAuMDM5NTc2NTQ1NjE1MTcwODgsMC4xMzc1NjY4OTQ1MTg2OTQ0MiwwLjExODA0MzQ4MDg5NDUzODEsMS4wOTQ1MjExMjE1MjIzMTE4LDAuMTg5NDYwMjA3NTQ2NzAwOSwxLjQyNDc4ODUxODEzNjAzNSwyLjQ2MjgzNTc5NTI4ODcwNjYsMS4xMTI3ODE0MDUzMzU4NiwwLjIwNjgyMzkxNDIzMDY1OTQzLDAuNDUyNTI5NzEwOTI3NTYxLDEuMjYzNDM1OTU5MDcwODIzNywwLjE1NTg1MDU2MDczMDc1MjY1LDAuMTg4MDY5NDk5OTE2OTYyMSwwLjAzODI3NTM1ODI0MDY3MjkzNSwwLjY4MzQwNzAxMjQxNDY4NzgsMy40OTgwMTIxNjQ5MjE1NiwwLjYxNjk2NDUyNjg5ODU5MDcsMC45MzM2NDIwMTg1MTU2MDU4LDAuMDQwODgzMzMxMzI0MTQzMzc0LDAuOTUxOTkyMTM3NjIxNDI2NiwwLjMyMjQwNTUyMTEyODg0MTgsMC4wMjE0MzkxNjg2ODI1NzI1ODMsMC4wMjg1NDczMjI0NTQxNzIxODYKKzgsVHVlIDEgRmViIDExLDMuOTk2MjQxMzk1NzExNzk4NCw0LjAxMjk3NDI2NzgwOTkzMDUsMi45Mjg0NzI2ODY1MDQ3NjAzLDM0LjcwMTU1Mjc3NDg5MzAxLDM3NDU1MS42MzA4ODk0OTE0NywzNi4zMTY1ODIwMTM1MjMzOCw1LjE4OTUzNTQzODcxMzkwMywxMy41MDAzNjI1ODgzMzIzNTMsMC4wMTMyMTI3MzY2Njk5MjM5MDcsOTUuOTI5MTM3MjgzNDkxOTQsNjMuMDUxNTAwOTc0MjU5NTYsMTQuODA2OTMxNjY5Nzc0NzE0LDIuNDEyMjA5MjY5MTI5NDY2LDIuOTc4NzE2OTI3NzA2Nzk4NCw3MC4zNjExMzk2NTExNzk3LDcuMzc2MTMxOTEwMDU3NTgsMS4xMzk1NDcwMzc2Mzg4NDIsMy41ODAzMDYyNTIyMzI2NzQ1LDYuNzQzOTg1MTg4MDYzMzg4LDIxLjE1NjgyMzQ5MTAwNzY5LDE1LjYzMTA4NTQ5MDM1MTQ3MiwxLjc2MTQzMTQxMzMxNzUzNjQsMjguOTI1NTA4NzE1NDAwNDgzLDI2LjAxMzg5ODM3NTQ1MTAxNywxOS4yMzM3NTIwNjUwODA1NiwxLjg5MDM4NjQ2OTU4MDcyOTUsMi4wODU5ODAxNDM1Mjc2OTUyLDMwLjg1NjMwMDUxNjk1MzM0MywwLjk5NTE5MDIwMDU4Mjc0NjEsMy40NjA5NjY4MDM3NTQwNTkzLDIuOTcwOTc3ODQ0NTgzNjg4NywyNy41NzI3MjA1NzA1NjkyMSw0Ljc2OTUyMDY3MjI3MDA5MiwzNi40Njg3Nzc3MDU5NTMyLDYyLjA0MjI0OTUxMDI4NTcsMjguMDA4ODkzNzAwOTIxNTE1LDUuMjAwNTUzODUyOTkzNjYzLDExLjQwMDYwMjQ1NTczODM2NCwzMS44MDQ5OTAxNDY2NTMwOTMsMy45MjgwNjM1MzQwMTg5NTcsNC43MjczNDgxNTQyNjEyNDMsMC45NjIxOTMzMTg0OTY5MTY4LDE3LjIxMTU1NDExMDA4Mzg5LDg4LjIwODg3MTUwNTAwMzA1LDE1LjYwMzIxMTU5NDA3NjU1NywyMy41MjEwNTg1NDIwNjM1NjQsMS4wMjgyMDA1NTgxMTYxNDIyLDI0LjAwMjI1NzA2NDc1MDcwNSw4LjEwNjg3MTM0NDkzNjM0NCwwLjUzODQwMjIyNzExNTk0NzgsMC43MTc3Nzc1NjY3MTI1OTU2Cis5LFdlZCAyIEZlYiAxMSw4LjE4MzAyMTQwMDE0NDg1OCw4LjI2NjQ1NTU3MjcwOTYxNCw2LjAzMTE5MTA5MDAwMTY4Miw3MS4wMjczNzE2Nzg5ODMwNywxNDE1MDE4LjM2NjQ3MTI1Niw3NC4xOTYyMzMyMTY3NDk5NSwxMC42ODI4NzY3NDcyNzA0NTYsMjcuMTIxNTA4MDc1NTc3ODcsMC4wMjcyNDM1MTI0MjE5NjkzODQsMTk2LjUxMjEyOTIxNDk3MTAzLDEyOC45MjE1Nzk4MTU0NTQzNSwzMC4xMjU1Njg3MTg2MjE2OCw0Ljk2OTQwOTE4NjM3NTU3Miw2LjEyNjYyNjY5NjA4NDU4NSwxNDQuMTg4ODM1NjcxNTcyMjYsMTUuMTg5MjA1ODk1MDA3Nzg4LDIuMzQ4NjA5NDk0NjY4NjIsNy4zNzUzMjEzMDE1Mjc4MjMsMTMuODgyOTk5NzgwMjU0ODQ1LDQzLjQ2NjU3NDI3OTI5Njc1LDMyLjEyNzMxMTM4MjI3MzU4LDMuNjI2NTQxMTU4NDIxMjc1Miw1OS40NTQ2MDg4MjI2MDYzLDUzLjMzMTQ1NzY3MDIyMzM0NCwzOS41MTExMDA5NzAyNjg3LDMuODk1MDczOTkzNDMzMTc3NSw0LjI5MDM5ODA2NTAzNTgyNyw2My4zNTk0Njg4Mjk2Mzc5NzYsMi4wNDg1ODMzNTI2Mzc5ODUsNy4xMjA2ODM5NDk2NDk1ODIsNi4xMTAwMzAwODE5MjAzNDMsNTYuNjUxNDE3OTI5NjM5MDI0LDkuODA2NTM3MTM2MjY2NzgxLDczLjcwMzQ0MTA1NTQ1MTkyLDEyNy40NzQxNzc4OTIyODY4Myw1Ny41OTgzNjI4OTg2MDQ3MDUsMTAuNzA1NzUzMTU1NjA4NTc1LDIzLjQyMjQ3NjEzMTM1OTMsNjUuMzk2MDM5MTM3NzkyNzgsOC4wNjY1MzYzMjc0MjgwMTgsOS43MzUwOTk0ODk1MTU4NzEsMS45ODEyNTE3Mzk0MTExOTY2LDM1LjM3Mjg3MDU5MDAwNDg2NSwxODEuMDQ3MjQxNjg4MTIxODYsMzEuOTI4OTQyNzk3MDA1MDMsNDguMzI0Mzc1NjYyMTUyNjUsMi4xMTYyMTQ0ODI1MTQxMjA1LDQ5LjI3MjcyODkzMTc2ODcxLDE2LjY4ODU2MDIxMTY3NTU2LDEuMTA5ODAwMzIzMDA4OTc0MSwxLjQ3NzY4ODAzMjM2NjUwNzQKKzEwLFRodSAzIEZlYiAxMSwxMzIuNDE5MzM2MDU2ODc5NDQsMTMzLjA1NjQ4OTkyOTg2OTU3LDk3LjA5NTk5NTMzMzUzOTY1LDExNDkuODE4ODk1MDk0NTUyMyw3OTU2MjgwLjE4NzY5MTExNCwxMjAzLjEwMzMwNjY0NjQwMzgsMTcyLjA1NTA1NTY0NTAyNzk1LDQ0Ni40ODIwNDAwMzc3Nzc1NSwwLjQzODEzMzMyMjk3MjM4ODMsMzE3OC44MzkxMTY5OTcxMTksMjA4OC45NTg1MDY2NzAxMzU2LDQ5MC4zMTc4NzI2NDEyNzcyLDc5Ljk4MTMxMzMwMzU0OTQsOTguNzQ4MzIzODI3NTkyMjksMjMzMS42NzE5OTI3MTczMDE3LDI0NC41NTg2MzE3MjEzMDMxMywzNy43ODU1Mzg2NjAxNjc5MywxMTguNzEwOTIzNDA5OTgxNDIsMjIzLjU5MjAxNzM4MDYzODI4LDcwMS4yOTM5NDcwMjk4NDIsNTE4LjE1MjQ3MzU5OTA4NjgsNTguMzk5ODQ5MjM3MDY1MzI1LDk1OC44NTE3Mjc3MzUwMTM2LDg2Mi4xMDE5NTA1MTIzOTc2LDYzNy41NDE0NzgyMjczMjk4LDYyLjY4MDQ0MjQ1MTQ1NTI5LDY5LjE1Mjg2MzkxMjY2ODY2LDEwMjIuNzQ4MjcxMTg1ODExNywzMi45OTQ2Njg2MjY4MjA4NSwxMTQuNzM5MTgwOTg5MjAyLDk4LjQ5MDYxOTQ2OTA2NjMsOTEzLjk3MDA4NDgwMDQ2NzgsMTU4LjExMDAzMzMyNDMyNTAzLDEyMDYuODExNzY0MTIxNDg5LDIwNTYuNTU0Njk1OTE0MjA0LDkyOC41MTM2NzAzMTE0NTg3LDE3Mi40MjA2OTA4Mjk1MjM4NiwzNzcuOTAwNDcyNTY2MjUyMiwxMDU0LjM0MjEwODY2NTY4NDcsMTMwLjE5OTAwNDc2MTE0NzQsMTU2LjczNzc1NzU5MjU1MTMzLDMxLjkwMTY4NDE5NDE3NTAxNSw1NzAuNTM4Mzg1MDIzODI2MywyOTIzLjU5NzU0OTc0NzEyMiw1MTYuOTkxNjYxNzk4NjUxOSw3NzkuNjYzMDUxNDQ5NDgzOCwzNC4wODg1NTg0NTk4Njk2OSw3OTUuNTQ1ODIzNjY4Njc2NiwyNjguNzc3NDYyOTY2NDA1MywxNy44NTI4MDQ1OTAzNDI2OTMsMjMuNzk3NTUzMjk0Njk3MDIKKzExLEZyaSA0IEZlYiAxMSwzMjguNDM2NTY0NjQ2NjE0MzMsMzMxLjkzNjAyNTQ5MDQwNjUsMjQyLjE3NjAzNTA3NjE3NDEyLDI4NTAuNjg3MjIxMDcxMDA5NCwyLjY5ODYwODU2Mjg3NjUxOTJFNywyOTc3LjQ1NjMwMTA0NjkyMyw0MjguOTQ0MjEyMDc4NDczNCwxMDg3LjAyMjA5MjQ3ODY4NTQsMS4wOTQwMzIzOTE1MTkxNzQzLDc4ODcuNTIxNDExNjI3MjMzLDUxNzMuODcyODQ0OTc1OTEyLDEyMDguNTQ3MDk4Njc3NDcyLDE5OS41NDU4MTk3OTg3NDAzMywyNDUuOTgzNDYyNzY0NzE1OCw1Nzg3LjU1MjM2MjU4ODE5OCw2MDkuOTAwMzYzNTEyNTMxMiw5NC4zMTExNzc4OTEyODUwNywyOTYuMTUzMzE0MDA5MzE0Nyw1NTcuNDM3ODM4MjM0MTU4NywxNzQ1LjAyOTM1NTY3OTA5NCwxMjg5LjgzODgzNDE3MzQ5MDMsMTQ1LjYxNjQxODE4ODk3NTczLDIzODYuOTc2MDUyNzIyODUyMywyMTQwLjcyMjMwNTA4NDE3MTIsMTU4Ni4yMTcyMTU1NzcwNjQ1LDE1Ni40MDgxNDQ5NDgwNTgsMTcyLjI1ODkxODM0MzY4NDIzLDI1NDMuNTUyOTY3MTEzMjc0NSw4Mi4yNTU1NjcwNzU4MTgyNSwyODUuOTAxNDA4NjQ3MDcyMywyNDUuMzE1MDI4Nzg5ODkwMzYsMjI3NC4zNjQ2OTUxNjUwMTU3LDM5My43MjEwMzc5NTc5NDQxLDI5NTUuMjk5NTMwMjExODgzNCw1MTE3LjY2NDQ3MDYxNzA0NSwyMzEyLjUzNjkxOTM5ODQ4Niw0MjkuODYzMzU0OTE0OTQ3NTQsOTQwLjMyOTY1NTI2MTQ2ODYsMjYyNS41ODE3OTMyMzI5NjU1LDMyMy44MzE3NzkxMDg5NTM0NywzOTAuODk5ODIzNTM2NTIxMzUsNzkuNTUzODYwMTM0NDA4MjQsMTQyMC4xMzE5NTcwMjkyMDMsNzI2Ny44NjUzMjkyNjA3ODA1LDEyODEuNDQ2MDgzMTQ3MTg0MywxOTQwLjA1NDQyNTIwMjgwNDQsODQuOTcwMTM2NjMzNjkzMSwxOTc4LjAwNDQ2Nzc1MTUzNTcsNjcwLjA4ODExMDU1Njc4OTcsNDQuNTY1ODA2MDk5Nzg4NDQ2LDU5LjMzMzIxNTczODE1NzI5CisxMixTYXQgNSBGZWIgMTEsNDU3Ni4yNjczMzIzNDkwNTM1LDQ2MTguMjk4OTA2OTc5MjM2LDMzNjkuNjE4OTg4MjI5OTEwNCwzOTcyNC4xOTk3MTY5NTQ3MjUsMS44ODg1MDg3ODg2MDU4MTM3RTcsNDE1MDkuNjY3Njg4Nzk0MjMsNTk2OC45Njg5NTE1ODM0NTI1LDE1MjE5Ljk1NDM0NjExNzU1MywxNS4yMTc5ODk0MzAyNDUyNzMsMTA5ODg5LjY2NDE3NzAyODU1LDcyMTE2LjA0MjAyNDA1MDE2LDE2ODY2LjMwNzg2MjQzODQ1LDI3NzYuMjY4MDcyODQxOTQ5NiwzNDIzLjY4MjU0NzE4NDA2OCw4MDYyNS4zOTU2MDUxNjgxNiw4NDg2LjM2OTQ5NzMyODQxNSwxMzEyLjAwNzgxNTMzMzAwNzMsNDEyMC40MjgyOTgzMjg4NDUsNzc1Ni45OTA2MDM3NDQ4NDcsMjQyOTQuNTQ3NjY1ODYyMTI2LDE3OTU1LjUwNDkwODc1Nzk3LDIwMjYuMjQ4MDYwODg2Mjk0MywzMzIyOC4xMDI3ODI4MzAyMiwyOTgxOS4wMDg3MTIwNjQ4ODYsMjIwODQuMTYwMDkxOTkzMjAzLDIxNzYuMDA1MzQ5NDE1MDcyNSwyMzk3LjU2NTMzNjYzNDI1ODUsMzU0MTYuNDI3NTUyNTUxMjM1LDExNDQuNjM0MzA0NjA2MDExNSwzOTc4Ljk4MDY4NTAxODM5MywzNDE0LjQ3MTE0MzM2MDQxNDMsMzE2NjMuNTY0MDQ2OTI0MTIsNTQ4MC40MDg1MDY1NTExNjcsNDEzMTQuMTc0MzA1MTE3ODA1LDcxMjQ3LjY2NjI4MTE1NTUxLDMyMTg4LjA4ODgyNjI0NzI3Myw1OTgxLjczMjk3NTI1MDg3LDEzMDkxLjQwMzIzOTQ3ODgxMiwzNjU0Ni41MzA5NzA1NDgzMSw0NTA4LjkyOTQ2MzEwMjgyOSw1NDM5LjA2ODgxNDQ5OTU2NiwxMTA2Ljk1ODQ3MTI5ODM1NDcsMTk3NjkuNjY5MDE3Nzc3MjIsMTAxMjA4LjQ1MzY5NzU5NTc3LDE3ODU3Ljk3NDQyNjgxMTk3MiwyNzAwOS42NDcyNDE0NzU4ODYsMTE4Mi40NTI0MjUxOTMyNjkyLDI3NTQzLjQ4NDE0MTcyODY0NCw5MzI0LjU3NDA4NDYwOTM4Nyw2MTkuOTU1NzY2NTEzMTU3NCw4MjUuNjM1NTM2NzAxMzc3NAorMTMsU3VuIDYgRmViIDExLDQ0NDA0Ljc0Nzg0OTQ2MjI4NSw0NTk4My45MTE4Njk2MTc0NTYsMzM1MjAuMzM4MDQzNzUwMTgsMzg0NzQ5LjUyMjQ5MDk3NjcsMS4xOTczOTE2NTk3NDcwMjMzRTcsMzk4ODgyLjgwMDU0NDIyMjYsNTkyNTguMDg2NzkxMTc5OCwxMzYyODEuNTAwMzM2ODg3NywxNTIuMTU5ODIwNjY2NTQ5ODgsMTA2ODE1Ni45MzIyMDExNTQ4LDY5NTQwOC4wNTU1NTI1Mjk0LDE1OTIzMC44ODg1MDk0MzA5MiwyNzY1My4yMTA1ODM0Mjc0OSwzMzg2NC41NzA1NDg4NjMzMiw3ODQ5NDMuMTQ2OTI5NjQxNSw4NDM3My44NzQyNzQ0OTAwMiwxMzA5My4xMTQxNzQ5Mzg2ODQsNDEwMjkuODc3ODQ4MDgzNDEsNzcwMTQuMzkwNzE4MTA2MTgsMjM5MTM4LjQ4NzUxODU4NjY1LDE3NzA1OS4zOTQxMzY5MTU5NywyMDEyOS40OTE3Mzc2Mjg5NDUsMzI3NzI1LjYzMDIzMzM5OTUsMjkwODI0Ljc0NjQ5MDIyMDgsMjE3MjczLjA2NTIyMDgxMzAzLDIxNjkwLjYzMjA2MjkyNDc5MywyMzcxMy44MzgwNTI2NTU1NywzNDc3OTEuNTcyNjg3MjEyMTQsMTEzNjIuMTkxMDM4MTkyNDQzLDM5NDA5LjE2NDM0OTc3Nzk3LDMzNzU3LjE4MzY0NTE1NzksMzExNzU1LjM1NTc1NTcwOTQ2LDU0MTI2LjM4Nzk0ODU1NzUyLDM3OTIyNC40NTM5MDQ1NzQ3LDcwMTUxOS45MTIxODkwNTU2LDMxODEzMy4xMzcxODg2MDM1LDU5Mzg5LjQ5NTIwOTA2OTA4LDEyODg2Mi42NTg3MDY2MTEwNCwzNjEwMDAuOTQ2MzE4OTQ5LDQ0Mjk2LjAxNDE1NDUyMDg3LDU0MDg1LjY0Mzk3MjA4NjA0LDExMDAyLjQ4ODcxNDMyMjY4LDE5NDg4MC43ODkzODY4Mjg3Miw5OTIwMTUuOTUxOTY3NjYzNCwxNzI3ODIuMTg5MjkyMjcyMDYsMjY1ODc1Ljc4MzAwNjA3ODE2LDExNzI5Ljg3NzQxMDM3MjQ5NCwyNzAxNzQuNDE4ODQ2Mzc5OTcsOTI1NzYuOTI1NTk1ODAwNjUsNjE5MC41MDg4NzEzMTMyOTgsODE5OS4zNzUwMDE4MjU2OQorMTQsTW9uIDcgRmViIDExLDM3NTIxNi41ODA4MTA2Njc2LDU4MTE0OC41MTQyNzQyMDQ2LDQxNzMyOS43MTY4NTgyNjQsMzE2NTAxOC43NjcyNDgzNzc3LDc4MzkxNzAuOTYwMDA3ODY4LDI5MzA3NzMuNzIwNzY1ODg0LDcxMzc2Ny40NjE0MjU0Nzg3LDQ0Mjk3NC4wMTM3ODM4MTIsMjA2MS4zODI3OTA3OTAwNTIsOTI2MjQ0Mi45MjgwMzUwMTksNTM2NzY2My4yOTk2NDY2MzUsOTIyNzQyLjA5NjYyNDk0NTIsMzUxNjE0LjM4MjgwNTY5OTU0LDM4NDM5Ni41Nzc1NDk4Mzc3Niw2OTY5MTY3LjAzMjc2MDc2OSwxMDQwOTMxLjc3NDI1NDM1NDgsMTcxNzc4LjA5NTQ0OTEwMjE0LDUxOTIwNy40MDAyNzE5MDg5Niw5Mjg2OTcuMzIxMTY1NjA5OSwyNTEyOTUzLjQ3NTE2NjIxNCwxOTE0MDgxLjQ0NzU3MjA4MzIsMjQ1MTMwLjE0NTMwMjUxMTUsMzU1MzY0My4xODI1MDY0NTE0LDI2NTE5MzQuNTgyODY3Nzk1NiwyMjY1NDY3Ljk3NjgzNjExMDUsMjc5MjU5LjkwMzQ3MjU5MjYsMjY4OTcwLjI4NjU5MzE1NjgsMzUyMjIzNC45NTYzMjc3MTk2LDEzNjU4Ny4wNzY2NDU4MDkzNyw0NTY5MjQuNTYwNTY1MjI1NywzODAyMzEuOTk4MTUyMjc1MiwzMjg5NTEzLjQ4MTQ5NzA1LDU5OTczOS4zODk4NzUyMDA1LDE1NzgxOTIuNDk0Njc2Nzg0MSw3NDA2MjMwLjk1NzE2NTg5LDM1NjYzODcuOTYwNTUxMTkyLDcxNjI3MC4yNjQwMjc2ODA3LDEzNTQxNDYuMzkzMTM2MTQ4OCw0MDA5NzIzLjYzNDA4MDY0MjQsNDUxNDU2LjgwNjc5Mjk2NjMsNjY5MDU5Ljc5NDE1NTk3MDIsMTM1MDk0LjM3ODI5MjkxMzM0LDIwOTUxMzIuNDExNjU5NjMxOSw5NzU5Nzk1LjQ4ODkwOTMxLDEzOTk3NzAuMzQzNjUyMDcyMSwyNzk1ODYwLjA0Njc3MDIzNjUsMTM5NTA5LjY5OTczNDgzNTk0LDI2ODg4MjAuMDk1NzcxNzI4LDExMTYxNTguNDM4MTU5MzIwNSw4MjAyNy4yMzA5MzY2OTQ0MSw5OTI5Ni43NTU2MjU1MDM0NgorMTUsVHVlIDggRmViIDExLDM5MjUyNS43MjA5NjI0LDM0ODEzNTUuNTYxMjE4NTc1NiwyMDgwODg3LjcwNjcwMTI5NSwzMTg1NjQxLjUzOTkzNzkwMjIsNTI0Mzk5Ny44NzcxMTE1OTgsMjU4Nzc1MS44NTE5ODg3Njk2LDI1NzcxMzEuNjEzNjQ2OTIsMjkzOTk3LjE2OTIwNzU5MTc0LDQ4MzI2Ljk1MzUxMzY0MjAzLDEuMDA5MTMyODY5MTYxOTkyOUU3LDQ5OTAzMjIuODg4MDI5MzA4LDY5MDQ4MC43ODA3NDI0NTI0LDIyODgxNzguMzMzNjMwNDQ5LDkzMDc2OS4wOTU3NTA2OTQ1LDc5MDUwMTMuMTYzNzU4MDY0LDQ3MDEyMTguMDYxNjA0NDgsMTg4NzQ5NC41MDY3NTY5MDU1LDMxNjM5ODMuNTExOTMyMjIyLDMzODU0MzMuNDM0NzM3MjAzLDQzNDY2NjEuOTc1ODIyODY3LDM2ODU5NDkuNzYzMDc1MzU0NSw5NzQ2MDguNTAzNDMyNzkyNyw2OTI5MzM4Ljc2NTQxMTgwMywzMTYxNDU5Ljc4OTIwNDQ3MTMsMzgxNDQzMC41OTE2NjUzMzgsMjE5MjA3MS4zMjQ5Nzc1NDM3LDY0ODU5Ni40NTExNzI5OTcxLDU0MDY3MzEuNzgyNzk2MjI3LDQ4NTA4My40NTkwNjc1MTk4NywxMjUxNzc3Ljk2NTIzMzk5NjcsODgzODY0LjI4OTAzOTk1OTgsNTc3MzY0MC41MTM5MjA5NDksMTI4NjEzMi42ODA2NTg3ODcsMTA3MDY1My42MzcxNDk3MzU0LDEuMzAyNTAwMTIwMzM4MDE2N0U3LDgwOTIzMzIuNzQ0NDIxNDQ5LDI2MTQzNzYuNDQyMTQyNDI0NiwyMzQyMzM4LjEwMTQ0NDM2MDMsODY5NzQ3OS4xNTMzMzE1NjMsNzA2MzQ3Ljc4MzYzMzQzNjksMzEwODU2Ni43NzA3MzE1MTgsNTgxMjkzLjkwOTY5MjU4OTEsMzk0NjEyMy43MTExNjU2MjY1LDEuMzgxODg1NjI0NjM0MTUzNEU3LDEzODAyNDMuMTgzODEyNzEzNyw0ODQ3ODc5LjY1MjYyOTM0Niw0NTUzNjkuMTQ4NzA3OTY1NTYsMzkyNjU0Ni40ODQyODM3NzM3LDQwNjI1MTUuMzQ1MDM1NzgyNSwxMTA4NDkwLjQ4NjMxODk3MTcsMzc1NTQ1LjI1NzUyNTYxNjg1CisxNixXZWQgOSBGZWIgMTEsMjYxMTc3LjA0MDkxNzYyMTcsMjQwNzMyNy4zOTQ0MjQxNzE3LDE0MTEzNTQuNzQzMTQxODI2NywyMTE5Njc1Ljk1ODEzMzE4MzQsMzUyMTU3Mi42NDgwOTcxMjIsMTcyMjAwOC45NDQ1MTk3MywxNzIyMDY5LjQwNDE4ODk0MDgsMTk2MTY4LjEyMjcyMjc4OTM4LDU2MTMwMy4xMDEzMjEzMTEyLDY3MTQ0NjEuMzU5MTE5NTg0LDMzMjA2MzEuNDQ3MjQ0Njc3LDQ1OTY1Ny4xNzIwMTI0OTk2NSwxNjAyNjQ3Ljg0OTc4NzU1MTcsNjE5NTI0LjQ3MDE0ODIyOTYsNTI1OTcyNC4zMTU0MjcwNTMsMzE2Nzc1MS4wMjk4NjQwNDE2LDE2MDI0MjkuNjU3MjE0MjEwMSwyMTkzMTM3LjEzODExNzUwOSwyMjYyNjg5LjU0NTUxNzQ3MSwyODkyMjYxLjg0ODE0MDkwMTQsMjQ1MjcxOS40MDEzMzQzMjQsNjUzMDE1LjcyNzkyNzY0ODcsNDYxMDk3Ni45MjM3OTA5MTEsMjEwMzUyMC41MzE5ODU4MzQ3LDI1MzgwOTguMjA1MTU0Nzc1NiwxNjAxNTE1LjA5OTU4NDExOTYsNDMxNzA0Ljc0NDg3MzY5MTcsMzU5NzUzNC4yNDEzMzkxNjgsMzI0MDIxLjEwNzExNTE0NzQsODMzNTczLjM2MDMwMTYwNzksNTg4MjU0LjA4NDAyMTk2NjksMzg0MTc4Ni44NjkzMDUwMjE2LDg1NTg4OC40MDU2OTcxMzk4LDcxMzQ4Mi43NTgzMTEzNDE1LDg2NjY4NTUuNDE5OTI0NjY1LDUzODU2MTkuNjI4ODA3MzM4LDE3NDczOTguMzYyODY5MjMzOCwxNTU4NTg3Ljk5NjM1MjQ2MzMsNTc4ODAxOS4zNTM2MjYwMzQsNDY5OTkxLjgwMzE2MzUyNTUzLDIwOTgwNjcuMDgyNjAxOTM3LDM5MDcyMC40MzU3NDI1OTg3LDI2MjU4MTkuMzkxMDI0MzY2LDkxOTQ2NzYuNDY1MzMyNjc0LDkxODQwMC40NTkwODY3NzkyLDMyMjU3NzMuNDUxMjY0NDcsMzAzNzI1LjMzNjY3ODIyNDI3LDI2MTI2MjUuMTk0MTIzMzk1NywyNzE1MTI1LjA4NTU2NTcyMzUsMTEyNjc5Mi45ODcyODI1MTE1LDI1MTIzNy40Mjc3MjU3MDIyMworMTcsVGh1IDEwIEZlYiAxMSwxNjUwNDYuNDA3NzQ3MjI2NywxNTIxNTQyLjQ1ODIzNDA0NjYsODkyMDA1LjI1MzM1MDM1OTYsMTMzOTUzOS41MTI4NjA3NDksMjI1MjI3OC44Mjg0MDc4ODI3LDEwODg0NDUuNTc4NDA0MDY0MywxMDg4MzAxLjkyMjM1NjAyNjcsMTI0NTEzLjUxMzUzMzUzNDcsNDQwNjA5LjA1NDMzMTI3NCw0MjQyOTY4LjI1MTc0MDY1NywyMDk4NzAwLjIzMjM2MDcwNjcsMjkwNzM3LjQ3Nzg5MjEyNTgsMTAxMjk2NS44OTA1MTY0NjYsMzkxNDg2LjMwMjQ2MTE3Njc2LDMzMjM2MjQuMjEwMDY1MTk3NywyMDAyMDM4Ljc1MjcyODMxMDQsMTAxMjkzOC41NDYyOTA1NzQxLDEzODYxNjkuNDY0NzExMTk0NiwxNDI5OTYyLjY2ODM5ODg4NDEsMTgyNzU0Ny45MTUzMjIwOTM4LDE1NDk4MzYuNzc1Mjc1OTMwMyw0MTI2OTcuODgyNjI0NTA3MywyOTEzNjEzLjc5MTY5NzE3NywxMzI5MTg5LjA3MTAzNDM3MDUsMTYwMzc1NS43ODQ4NTIwNzE3LDEwMTIyOTAuMjE3NTc2NTU3MSwyNzI4MDAuMTAzMDE1ODY5NiwyMjczMTY4Ljk3MzQ1NjA3MTcsMjA0NzcxLjg5NDg2OTc0MjQ1LDUyNjc2MS43MDQ2NTY3MjE4LDM3MTcyMi43NjYyNjk1OTc5LDI0Mjc1MzMuNTI4MzA3MjUyNiw1NDA4MzQuMDIzMjE3NTc2MSw0NTIwMTguNzEzNjMzMDEyOTYsNTQ3NjM4MC43MzYxMzg2MjMsMzQwMzIwMS4yMzk4NzM2MzY1LDExMDQzMTEuOTgxMzU4NTcyMSw5ODQ4MzIuNzcyMTU0ODA0OSwzNjU3NDQ1LjMyNDU4MTAyNCwyOTY5NzMuMzM4NzM5MTMxMywxMzI2MDAwLjMxODA5NTcwNTIsMjQ2OTM1LjAzODEyMTA0NzIsMTY1OTIwOS45MzUwMzAzMzY1LDU4MDk4MjcuNDc0NTM4NDE0LDU4MDQwMC4yNTY3MzcxNzk0LDIwMzgyODYuMTczMTI1MTAxNywxOTE5NDEuNzE0NjEyMDk0MTYsMTY1MDgzNC41MzM5NTE3NjAzLDE3MTU4ODkuODgwNzc5NDAwNyw3MTIzMDYuMDQ1NjMyNjMwNywxNTg3NzcuMDkwNzE4MTE0CisxOCxGcmkgMTEgRmViIDExLDk4OTkxLjE5NTgyMDkzNDg1LDkxMjYwMS4xNjk0NTgzMjcxLDUzNDk4OS4wNDk3OTU2MzExLDgwMzQ3NC4wMTQyNzY2OTYzLDEzNzEzOTUuNzAxNzYyNjE4NSw2NTMwNzEuMjE4MTMwMzgyMiw2NTI2NjguMTYzNTEyMDQ3Nyw3NTE0NC42NDk4NjU5MDA2NSwyNjQzNjEuNzIzMTc5MTUxMjUsMjU0NDcwNy45MTY2NDYwNjMzLDEyNTkwMzcuMTU4NjY2MzE3OCwxNzQ2MjAuMTgxOTgwMzAwMDUsNjA3NTc1LjgwMDg2MjI0NiwyMzQ3NTguMTU3Mjc1MzUxLDE5OTMyNTAuNjgzODQ4NjYwNywxMjAwNzEzLjQ3MjA5MDgwNDcsNjA3NjM1LjE5MjcyODQyNzIsODMxNDA5LjY3Nzk4OTQ2MTgsODU3NTY4LjM1MDMxMTM3NTIsMTA5NTg2Mi4yNDg4NjAyNTkzLDkyOTM0MS44OTA4NTAxMDQ5LDI0NzUwNS44NzQ3OTQ2MjQwMiwxNzQ3MTE3LjIxODM5MjU2MTIsNzk3MTExLjExMTg5MzQ1OTYsOTYxNjY4Ljc1NDY4NDkwNzYsNjA3MTk3LjgxNzU5MDAxNjQsMTYzNTg2LjgyMDUyNDk5MzM1LDEzNjMwODEuNzM5OTk1Njc2NiwxMjI4MDMuNzUzMDkwNDI3MSwzMTU4ODUuMjAxNjIyMTk3NzUsMjIyOTA1LjEwOTgyMTYyMjM4LDE0NTU2MzUuMDgyNDgwMjUwNiwzMjQzMDkuMTIyOTMyODg5MjcsMjcyMTA2LjA5MDQ4NTUyOTEsMzI4MzgzMS45ODY4NTU0OSwyMDQwNzM1LjI5NTM1MjAzNjEsNjYyMjcxLjM0Mjk0MzI1Nyw1OTA1NDAuNDk4MzM1MDU1MywyMTkzMTc3LjMwNjQ4MDY5MjcsMTc4MDc2LjUyMTU1MjM3NjgsNzk1MjY4LjEwMzAzMTk0ODQsMTQ4MDk2LjM3ODM4NjA4MzU1LDk5NDkyNC40Mzg5ODE0NDQzLDM0ODM4NTYuMzAyMjkzMDY0LDM0ODE0NC43MTA0NTIwODI1NywxMjIyMjI4LjM3MDY4NzQxOSwxMTUxMDcuMDMyMTY2MzczNTIsOTg5OTEzLjgwNDc5NDcxMzcsMTAyOTA0Mi40NTkyMTA5MzU1LDQyNzMxNC44MTA1NTA1MTE2LDk1MjIxLjY2ODY1NjY2OTc5CisxOSxTYXQgMTIgRmViIDExLDU5MzcxLjk0MTA2NjYxOTQ3NCw1NDczNjUuMzgxMTczODA5NSwzMjA4NjQuNDQ5NjAzOTY3ODMsNDgxOTI3LjQ0ODM0ODExMDMsODM0NzYxLjQ5OTEzNTE1NjUsMzkxODM1LjkzOTA4ODk5NTQ1LDM5MTQxMi4yNDAyMTg5NDA0LDQ1MzM1Ljk1MTMzODU3OTI0LDE1ODYxNC44MDUwMTAzOTE3MiwxNTI2MTYyLjc5MjA0ODcwMTYsNzU1Mjk4LjAxNjUwNzYwMzYsMTA0ODczLjA0NTczODUyNzkyLDM2NDQyMi43OTAwNzMwNjgyLDE0MDc3NC4yNTQ2NTYyMzQ1MiwxMTk1MzgzLjI2NTg1MjIyNDUsNzIwMTIwLjkzMzU1MjQwMTYsMzY0NTA0LjExOTA1MzIzMTEsNDk4NjY5Ljk0NjM1NTUyMDIsNTE0Mjk0LjMzNTAwMzMzODgsNjU3MTE0LjE3NzQ4NDE5OCw1NTcyNjYuNjI0MDYyNTc0OSwxNDg0MzUuNTEzMzU0MDE4MTYsMTA0NzYzNS4yNDQ4MzQxNjgzLDQ3ODAyMC42OTY4NDQzNzYyLDU3NjY0Ny40NDA1Mjc1MTYsMzY0MjEyLjUzNjcxOTk3NjgsOTgwOTUuODIxOTI4ODQ3MjUsODE3MzUyLjM5NzUwMjU4NzQsNzM2NDYuNDU2Mzg2NzIzNSwxODk0MjcuNDc4Nzg2OTM5MywxMzM2NjUuNDczOTgwNzk4MTgsODcyODQ1Ljc3MDIwMjYyNjIsMTk0NDY5Ljk2MjQ3MzAyNDksMTYzNzc2LjU3Njc2NjI5NDk1LDE5NjkwOTEuNzM4MjgyMTkwOSwxMjIzNzI1LjU2MzAyNDQ1NDgsMzk3MTcyLjQzMDY5OTUyLDM1NDEwNy4wMzcwNzM1NzA1NCwxMzE1MTI3LjUzNDY5MDIwMTcsMTA2NzgwLjgwNzcyNzM1MDcxLDQ3Njk2MC43ODI5MzgwOTAxLDg4ODE4Ljg3NDY4MzAyMjI0LDU5NjU5MS4xMDA0OTA4NjQ3LDIwODkwNzUuNDU4NDI0NTkyLDIwODgyNi4yNjM2NjY5NjkzNSw3MzI4ODcuMzg2MDYyNjg5OCw2OTAyOS4yNTMyOTUzOTg2OCw1OTM1OTIuMzAzODM0NDc0MSw2MTcxMjkuMjQyMzE4NTA5NiwyNTYzNDcuNDgwMjc5NzU4NTcsNTcxMDYuMTI5MTg1MzQ4NTE2CisyMCxTdW4gMTMgRmViIDExLDM1NjEwLjEzNDAwMjIwMzI4LDMyODMwMi43MDE1NjM3ODQ4NSwxOTI0NDEuNzc4NTE0NDQyNDQsMjg5MDY3LjYyODEwNzM4NzQsNTA3OTg4LjQ0Mjg4MTM4LDIzNTEwMi4xMTUwODc3MDAyMiwyMzQ3MzUuMDYzNzMzOTc4NTIsMjczNDcuNDE2NzkxMzIxMTY0LDk1MTY3LjU0NzM2NDg4NjE0LDkxNTMxNi4xOTE3MjQzNDM2LDQ1MzExMy4wNTQzMjI3NTQ5Niw2Mjk4NS4xMzMzOTY1MjE4LDIxODU4MC40NTUyMzM2MTgzLDg0NDE2LjcxMjU2Mzc1NTMxLDcxNjkwMS40NTMxMzIzNjQsNDMxODg5LjUzNzEzODE0NDk1LDIxODY1Ni40NDY1Mzg3MDYzLDI5OTA5Ny4wNDM2NjAwODY3LDMwODQyOS43ODI4NzgxNDAyLDM5NDAzMC40ODc0OTMzMjc0NywzMzQxNTkuNzQzNTQ1NzU2OSw4OTAyMC44MDgxNTUzNjIwMyw2MjgyMDUuNDE1ODAzNzM0LDI4NjY2OS4yOTM1ODU2MzgsMzQ1Nzc5LjcwMzM5NDk4NCwyMTg0NjQuMTMxNzIwNDI3MSw1ODgyNC4xMTE2OTgwNTY4Miw0OTAxMTkuMDY1MjQxNzg1NTUsNDQxNjYuNTcyMjAxOTcwNDEsMTEzNTk0LjkyODAyMzU0NDg1LDgwMTUzLjI3MjY5MDk5MzQ3LDUyMzM5MS4zNTkzNTczNDU2LDExNjYxMy41NDYyNjI5NTY4Miw5ODU2OS43NzkzNzMzNTY2NywxMTgwNzQxLjk2NzkzMjYwMSw3MzM4MTEuMDk4OTM5NzMxMSwyMzgxOTAuMTQ4NTg2MzgyMDcsMjEyMzM1Ljk1ODA4NDA5NDM0LDc4ODYxNS4wNDc0MDc3NjIsNjQwMzAuMTM3NzAyMjM0NzYsMjg2MDU3LjIzMTU3MzAwNjE0LDUzMjY4LjExOTYwNzQzNTg3NCwzNTc3MzkuNjg4NTQ2Mjg4NCwxMjUyNzE4LjE0NzEwNDE1MzIsMTI1MjYxLjc3MDM3MzMzNzk1LDQzOTQ2Ni45Njg0MDY4ODM0LDQxMzk2Ljc1NTQzNTM1NTM3LDM1NTk0Ni4xMzQwMDI2MzI0LDM3MDEwMS4yMzI1Njc1NTk5LDE1Mzc4My43MjM0OTI0NDUyLDM0MjQ3LjY4MDEzMjYxNTI4CisyMSxNb24gMTQgRmViIDExLDIxMzU4LjE5MTgwMDY1NzQxNiwxOTY5MTEuNjUzOTMzOTAxNDMsMTE1NDE4LjkwMjE1MjA3NDUyLDE3MzM4Ni41NTMxNDQwNDg3OCwzMDkwNDUuMDk4MDI2MTAzMTcsMTQxMDYwLjI3MTM0NjEyMTMsMTQwNzczLjYzNjMwNTE1ODk2LDE2NDkyLjMzMDQwNzQ5NDMxNSw1NzA5OS43MjY1NzMxNjEyMDYsNTQ4OTU5LjQwODMxODkwMjEsMjcxODI2LjU0MDMxODEwMjYsMzc4MjYuNjQxOTc4MTg0MjcsMTMxMTA0LjMwODc3NjEyNjk0LDUwNjIxLjMxNDg4NzgxNjUyLDQyOTk0Mi44OTQxNjY5MzEwNCwyNTkwMjMuODQxMzY3MjcxOTYsMTMxMTY2LjIyOTE4NDExOTA2LDE3OTM5NS4yMjU2NjI0MjAwNCwxODQ5NjkuNzM0MzQ2MDg5NTQsMjM2Mjc1LjQzMDU1NzU5Mjc0LDIwMDM3NS42NzQ3MzkxODIyLDUzMzg4LjE3MTYxNjczMzQxLDM3NjY5Ny43NTAwNjQ2NjA1NiwxNzE5MTUuNDQwODE5ODMwNzgsMjA3MzQyLjUxNjQyNjg5MTQ3LDEzMTA0MC40MTQyMjQ0NDk1NSwzNTI3NC40MzIyMzUzMzUzOSwyOTM4OTUuOTA4Nzg4MDUzOCwyNjQ4Ny4xNTYwNjIwMjA1OTYsNjgxMjAuMDA4MjMzMjk1MTEsNDgwNjQuMzQ4ODA4OTk3NjEsMzEzODQ1LjA5MDA1NTM1MzYsNjk5MjcuMDU4MTk4Njk0MzEsNTkzMTcuNzg5OTcwODE0NzYsNzA4MDE3LjE5MjUwMTExNTEsNDQwMDMyLjA0NjA1NTMzNjYsMTQyODQ2LjA2ODg1NzcyODQsMTI3MzI0LjU4OTEyMjA0MTcxLDQ3Mjg5Mi4wNzA5NTU3OTQ4LDM4Mzk1LjA2MTgzMjAzNzM0LDE3MTU2Mi43NTEzODI0OTgwNywzMTk0Ni45NDA0NDgyMzQ1NDUsMjE0NTE0Ljc5MzYwNDk2NDE2LDc1MTE5NC4xOTA5NjcyODUyLDc1MTM2LjMxNjQxOTE5MjI3LDI2MzUyMC44NDcyMTc3MTQ3NiwyNDgyNS41Njk3Njk4NjgxLDIxMzQ0Mi4wMzA3MzY0MTMyNiwyMjE5NTQuODk4NDg0ODM0Miw5MjI1NS4zNjIzNjkyNTE1OCwyMDUzOS4wMDQ2MTg3OTg4ODUKKzIyLFR1ZSAxNSBGZWIgMTEsMTI4MTAuMzIwNjk3MjIyNDU2LDExODEwNS4xNjI5MTQ1NTIyNiw2OTIyMy43NTY0MTc5Mzc3NSwxMDQwMDAuNjU4MDI1OTk0NTgsMTg3OTY3LjU1OTE3Nzc0NTk4LDg0NjM2LjQxNzg4MjI1OCw4NDQyMy45NTQ3MjQ0Mjg4Nyw5OTQ0LjIzODk2NTQyNTI5OCwzNDI1OS4zNTUxNTYyMzQ1NDYsMzI5MjQwLjk1MTQ0NzEyNDksMTYzMDcyLjkwNjY1NTM3OTIyLDIyNzE3LjI3MjE3NjQzMzM1NSw3ODYzNi4yOTU3MTI0NDEsMzAzNTUuNjkwNzM0MTM0NDIzLDI1Nzg0OS42MDc4NDY3MTQ1OSwxNTUzNDguNjY5MDQ2MjYzNyw3ODY4My4xOTE0MzExNjE2MywxMDc1OTkuNDY5MTA1NDk0MDMsMTEwOTI5LjIzNzE4MzA0MTg5LDE0MTY4MC40NjYyODUzNjg0LDEyMDE1My45ODgxNDA1Nzk4MSwzMjAxOC4zODY1MTk1MjkxMSwyMjU4ODQuNjIwMDkzMTg2LDEwMzA5OC42MDMwMjIzMTYyNCwxMjQzMzEuMTY1NjcyMzg2Niw3ODYwMS40NzY2MjY1MTI3MSwyMTE1Mi43MjkxMTU0NjA5NSwxNzYyMzMuNTU2OTA2OTgyODUsMTU4ODQuNjYyNDQ4NDAxOTI4LDQwODQ5Ljk4NDI0NTI5MDY5LDI4ODIyLjE2OTg4MDI3MjA5NywxODgxOTQuNDI1NTE5MjAyNiw0MTkzMS44MDIwNTI3ODU0MjQsMzU2OTQuMTU2MDg4NTExNTc2LDQyNDU1Ni4yMzgzNzY1OTA1LDI2Mzg2Ny42ODIzNjcxMjI1LDg1NjY3LjA0MzMxOTY4MDc3LDc2MzQ5LjA2MDU0NTY1MTk3LDI4MzU3MC40NjAxNDQ4MTk1LDIzMDIzLjM5NDQ2MTY1MDUzMiwxMDI4OTQuODg0OTUzMDI3NzcsMTkxNTkuODQ0MDA3NDA3MjYsMTI4NjMyLjIxOTc4NDY2MjU1LDQ1MDQ1OC4yMjg3NTc1MDczNCw0NTA2OS44Mzc1NTU0Nzk0MDQsMTU4MDE3LjkzNjcwNTc5NjM0LDE0ODg3Ljg5NDg1MzM2NzI0MSwxMjc5OTAuODUyNDU1NzY5MjEsMTMzMTA5Ljc2ODQ4NjAxNTUsNTUzNDQuMzEwOTM4Nzk5OTksMTIzMTcuNjcwMDg0MDUwMDYyCisyMyxXZWQgMTYgRmViIDExLDc2ODMuNDQ0Nzc1MDU3NDcsNzA4MzguMDE2NjczMDY5MjYsNDE1MTcuNzE3NDYxNTY1OTc1LDYyMzgxLjY2OTY1NDY3MjcsMTE0Mjk2LjI2Nzc3OTQxNTgxLDUwNzgxLjg0MTU2NDA5ODc4LDUwNjMwLjI2OTM5OTg3NTMsNTk5NC43Mzg2MDA0NDA2NjEsMjA1NTUuMzI0NTcwMjU3MzU1LDE5NzQ2NC4wNjYyOTE4OTQwNCw5NzgyOS44MTY0MTU0OTg0NywxMzY0Mi44MzM1MzM5MTIzMTksNDcxNjYuMDEyNzQzNzk4OTcsMTgyMDMuMTc4MTQzMTIxNzI0LDE1NDY0MC4zNzUwNDE4ODg5NCw5MzE2OS44NTk3NjQxNjkzOCw0NzE5OS45ODg1NTcxMzkzMiw2NDUzNy4wOTYyMDg5MjI1NSw2NjUyNi4wMjI2MjY5NjA3NCw4NDk1Ny41Njc5NDYxOTU1NCw3MjA0OS42NjU0MTMyNjY1NCwxOTIwMi4zMzI0OTI3MjQ0OTQsMTM1NDUwLjU4MDkyNzMyMzM4LDYxODI4Ljg5MzYyOTQzNTIzLDc0NTU0LjI0MDI2MDU5MDY4LDQ3MTQ3LjIyODI0MTQxNzY1LDEyNjg0LjQ5NTE5NDAxMTM0OCwxMDU2NzcuOTY3MjMwNjQ0MjQsOTUyNi4yMjUxMDk4MDU1MzcsMjQ0OTYuODAzMzI2NDYzMDk4LDE3MjgzLjQ2MTA4ODE5NTYwMywxMTI4NDkuMjkxOTE4NzU0OTMsMjUxNDQuNDU4Njc4NjU5MjIzLDIxNDc2LjcwMzE0MDAxNDUyLDI1NDU4MS43Nzc4NTI1MzcxNCwxNTgyMjkuODk4Mzk2Njg4ODYsNTEzNzUuODk5ODQzNTE1NzIsNDU3ODIuMTA4NjIzOTM2NSwxNzAwNDMuNjU0MDY0NzYzMiwxMzgwNS44ODAyMTY2MTE1NSw2MTcxMS4yOTYzNzQyODE4NTQsMTE0OTAuOTE5NjM4NzI2MzQ3LDc3MTMzLjQ3MjgzMDg3ODU3LDI3MDEyMC41Njk1MDM0ODQyLDI3MDM0LjczODIxOTcyMjMzNCw5NDc1NC4yMDA4MjgzNDgyMyw4OTI4LjI3NTU5NzYyNjEwNyw3Njc1MC4wNjExODMwODUwNCw3OTgyOC4wMDk3MTI3MjUwNiwzMzIwMS4yNDI3MDg0MjAyMiw3Mzg3LjE2Njg0Mjc5OTMxMQorMjQsVGh1IDE3IEZlYiAxMSw0NjA4LjQ1MzEyMTQ1MDg0NCw0MjQ4Ny44MDA5MDc5OTc1NSwyNDkwMC43Mzg5NTY4MTU3MiwzNzQxOC4wNDYxNDU4MzkxLDY5NDgyLjk1NzkxMjcyNjAxLDMwNDY5LjI3MTUyODYxNjAzNSwzMDM2My43NTc1MDUzNzgxMTUsMzYxMy4yMTg0NTcxNzM4NzcsMTIzMzMuMDIxNjk1MDA4NjQzLDExODQzMS4wMzA0MzI4NzU5NCw1ODY4OS45Mjk0Mzc1NzE3Miw4MTkzLjExMzgxNzM5NTY1MywyODI5MC4xNzIwNTU2MDE4NjYsMTA5MTUuODAwNjEzODUyMzI3LDkyNzQzLjI4MTY2NDg5Mjk0LDU1ODc4LjM4OTEyMDYyMDA4NiwyODMxNC4wNDY1Njc2NzYzMDUsMzg3MDguNzQxNjg5MjgyMjE1LDM5ODk2Ljc3Njg5MjU2MjM2LDUwOTQ0LjM2NzM1OTU3MDg1LDQzMjA0LjM1MTMyMDgwNjk4NSwxMTUxNi4xOTkwOTg1OTI3NTEsODEyMjIuNTgyODQ1MDgyNTgsMzcwNzkuNDQzODkzNDk2OTgsNDQ3MDYuMDk4NTc4OTY5OTg0LDI4MjgwLjE1OTQ5NDE5NzcxLDc2MDYuNDM2NjI2OTg2ODc1LDYzMzY5Ljg0MjgwMDY2MTYsNTcxMy4wMDI3OTY5NTMyMjgsMTQ2OTAuMjEwMjczMjk5OTQzLDEwMzY0LjIwNzcwNDc3NjYxNCw2NzY2OS40ODgxOTYxMzA1NCwxNTA3Ny45NTkwODM2MDMyNTgsMTI5MjEuMzIwNTE0MDI2MDE0LDE1MjY1OC42MzI3MTIxMjA2Niw5NDg4My44NDgzMDg5NDU3OSwzMDgxMS4wMDIxMzQzNDg5OTcsMjc0NTMuMDA1MjU0ODM4MzQ2LDEwMTk2Ny40MDE4MDgzMDA5LDgyNzguNjgwNjE4NjE1MzgzLDM3MDExLjQ0Njg3NjIyMTM5NSw2ODkxLjU3MDA1MTcyMTQ3OCw0NjI1Mi43NzU3OTQ1NTIwNCwxNjE5ODAuNzMyMDI4OTY5MSwxNjIxNi42NjM3MzY2MDU2Myw1NjgxOC44NjU4ODU5MzMwMjQsNTM1NC4zMDAyODA2MjM4NDksNDYwMjMuNjQ0NjQyODQ3ODMsNDc4NzQuMTg1MzM3OTYyNzksMTk5MTcuNTQzMzA1MTEyMjM4LDQ0MzAuMjQ2OTE0MjU3MDQKKzI1LEZyaSAxOCBGZWIgMTEsMjc2NC4xMTIyNDg5OTQzNDIsMjU0ODMuNjg2NjYwMDYyMjQsMTQ5MzQuNTE3NzcxNzk5MjM3LDIyNDQ0LjMxNTMzODExNDkyNCw0MjIzMC4wMDQzNzY1NDgzNywxODI4MS42NTQ5ODc4NzM3ODIsMTgyMDkuNjMxMDE3Njk2MjcyLDIxNzcuNDAxOTAzNjgxMjEzLDczOTkuNzA5MTg4OTY3MDUyLDcxMDMwLjQxMzgyNTI1NTUzLDM1MjA5LjIyNTY4MDAzMzg1LDQ5MjAuMjMxNDEyODYyODE5LDE2OTY4LjQ0ODUwNTI1MDAxLDY1NDUuODI4ODMzNTc5NDM0LDU1NjIxLjYwMDk5NDgwODA0LDMzNTEyLjk0MjAxMzAyNzUyNSwxNjk4NC44NjIwODI5MTgyMDQsMjMyMTcuMTQ1NjE2MzEzNTQ0LDIzOTI2Ljc4ODcyMDgzMDE1OCwzMDU0OC42MDM4NzU4MzU1MiwyNTkwNy40MDc0MjY0MzY4OSw2OTA2LjYwNTQyNzIxOTA1Niw0ODcwNS4wMTEzMjM4ODk1NSwyMjIzNy4wMTIyMTU1NTg3NjcsMjY4MDcuODcwODk5OTI2NywxNjk2My4xOTM4MTg0MzI5Nyw0NTYxLjMxNDI1MjMwMDY3OSwzNzk5OS44NjYyMDM0NzI3OSwzNDI2LjE2NTk4MjA2OTYyNyw4ODA5LjQxNjk2MzY4ODIyOSw2MjE1LjAxNTUzMjAxMTY2Nyw0MDU3Ny43NTUwNzg4NDk0MSw5MDQxLjU2NTY3MTExMzc2NCw3NzczLjM3ODU5MDQ4NzAzOSw5MTU0MS4xNzY1Nzc0NTM4Nyw1Njg5Ny45NzA2ODcyMDYyNCwxODQ3Ny44OTc1NzQ5MTU0NCwxNjQ2Mi4wOTQzNTQ1Mjk5MTYsNjExNDUuMjk5MjQ0NjA4NzcsNDk2NC4zMTU2NTM2OTE1NzIsMjIxOTcuNjg1MTA2MTcwMjI1LDQxMzMuMTU2MjY5Njg2MDcyLDI3NzM1LjM1MjY2MTgyODY1Miw5NzEzMy44MDk1MDcwNjg5Miw5NzI3LjUxNDQyODA1OTc0NSwzNDA3MS4yMjQwOTI3NDAxNywzMjEwLjk4NTAyMzIzNzg1NTMsMjc1OTguNDQ0ODM2NDQxNzc3LDI4NzEwLjk2ODQ5MjMwMDAzLDExOTQ4LjYwNTM1OTIyNDA5NywyNjU2LjkxODgxNDMzODk0OAorMjYsU2F0IDE5IEZlYiAxMSwxNjU3LjkwMTUwNzg4ODQwNiwxNTI4NC44Mjc0MjU5OTA5MDksODk1Ny4xNjQ0MDA2MTg4OTQsMTM0NjIuNzU5ODA1NzY3NDI0LDI1NjYwLjU1ODM5MzMwNDYxNSwxMDk2OS4wODcyODE5NDIyNTgsMTA5MjAuNjIyMTMyMjg2NzgyLDEzMTEuOTM0OTIzMjc1MzQyLDQ0MzkuNzYzMjMyNTk3MDQ2LDQyNjAxLjU4NDQ2NTY4OTExLDIxMTIyLjc5ODM1OTc5MjEzNCwyOTU0LjcyNDQ0MDg1NzkyNjMsMTAxNzcuNjgzMTM4MzY3MjYzLDM5MjUuMzE3Mjc0MDQxOTMwNCwzMzM1OC41NDIyNTM4NTM4NCwyMDA5OS4zMzM5MjcxMjY0MDUsMTAxODguNzgwMzU0MjI0MTcsMTM5MjUuNDM4MTY0MDU4MTgxLDE0MzQ5LjMyOTYxOTEzMjg1OSwxODMxOC40MzAwOTI5MTkxMiwxNTUzNS4zODAyOTk2Njc3OTksNDE0Mi4xMDA2NzE4MzQyMzUsMjkyMDUuOTkwODY4NTU0MDMyLDEzMzM1Ljg5NDUyMDA1MjAxNywxNjA3NS4zMTk5NDM3ODc3ODMsMTAxNzQuOTgwMTkwNDI5MDQ3LDI3MzUuMjY3NTUwMjEzNzA0NSwyMjc4Ni44MDY1NTkzNjA1LDIwNTQuNzIxNTYyNjI4ODA4LDUyODIuODM3MDk1NzgyODI2LDM3MjYuOTE0Nzc4NjQ1ODA3NSwyNDMzMi4zOTE3NzYwNzk1OCw1NDIxLjgzMTE2MjU2NDQyMyw0Njc2LjA3Njk3OTc5NjIzMSw1NDg5Mi41MzI0MDMxNDc2NywzNDExOS40ODI1NTAzMzg0NiwxMTA4MS41MzM5MjU0MDExMzgsOTg3MS40NzMxOTg3NTI5NTYsMzY2NjYuMjExOTE0MjEyNzg1LDI5NzYuODY3OTA3NTU0OTU2LDEzMzEzLjExNjI1MDk5ODI2OCwyNDc4LjgyNTQyNTA3NDgzNCwxNjYzMS40ODc1NzMwODA0Nyw1ODI0Ny44MTQzNzQ5NjE5Nyw1ODM1LjA1MTIxOTM1NjQ2OCwyMDQzMC43NjM1OTI4NDAzODMsMTkyNS42Mzc0OTg2MzU3OTk2LDE2NTQ5LjcwNjI0MDYxNTE1MywxNzIxOC40ODI5Mjk2OTkxNTIsNzE2OC4wMTE5NDk0MTQ5MDUsMTU5My40MTYwOTY0MTE4NzY0CisyNyxTdW4gMjAgRmViIDExLDk5NC40MDUzMDgxNTQ4Mzg1LDkxNjcuNjcwNzU5NDQ3Nzc0LDUzNzIuMTc0ODcyOTU4MDU5LDgwNzUuMzg3MjU4OTY5NTMyLDE1NTg4Ljg2NTQwMzY3MzgwNiw2NTgxLjUxMzk0NzczMTM0NCw2NTQ5LjI4NzM0Nzk5MTkxMzUsNzkwLjM0MTI5OTY1MTI0NTQsMjY2My44MjA1NzQxMjQzNzczLDI1NTUxLjA1ODQwOTIwNDQsMTI2NzIuMDY1ODk0MTE1MzkyLDE3NzQuMzU5NjE4NzEzODAwNSw2MTA0LjU4MTIxOTQ4NjAyOSwyMzUzLjg4NzM3NzMzNDIxMiwyMDAwNi41NTk2Nzc2NTg5MSwxMjA1NC41NTIwNDA3ODU3MTEsNjExMS45ODcwNzc0ODg3NzQsODM1Mi4zNTc4NDA5NjE0MzcsODYwNS41NjE5MTA1MDkwNjYsMTA5ODQuNjU0NTQzNzEyMjk5LDkzMTUuODE2NDUzMjI5NzcsMjQ4NC4xNDU0Njc1NDM4NjcsMTc1MTMuNDM0NTE4ODMxNDg0LDc5OTcuNzgzNDY0MDc2NTg5LDk2MzkuNTgyODA3MTY2NjI2LDYxMDMuMjI4NTI0MDE0NTQ4LDE2NDAuMjUxNDUzMDE4MzIyMywxMzY2NC4yNjY1NzY0NjI1OTYsMTIzMi4yNDc2NTUyMDU5MjU5LDMxNjguMDIwMTIxODc5NTE5LDIyMzQuODk3MTg1NzQ0MDczMywxNDU5MC45MjUxMDgxOTAyNSwzMjUxLjI0MTkwOTI0MjI3MiwyODEyLjY4MTcxMjkwMTMzNDMsMzI5MTYuMzIwNjY1OTkxMDM2LDIwNDYwLjE1NzI4Mzc4MTM3Niw2NjQ1LjgwNTUyODQ0OTE3Nyw1OTE5LjQzMzE3NzA0NDk4MSwyMTk4Ny4yMDA5MTM5OTAyNDcsMTc4NS4wOTQzMzM4Mzc4NjQ3LDc5ODQuNTc5NDg5MTEyNDkxLDE0ODYuNjU1NjQxNjQyNTg4OCw5OTczLjA4NzU2OTMzMzg5NywzNDkyOS4zNDQ1NDgzNTkzLDM1MDAuMTY3OTg1NjgwMzA1NywxMjI1MS4zMTU0ODYyMTI2MDUsMTE1NC44MTIwMTQ4NTQ4OTU2LDk5MjQuMjQ1NzY3NjYwOTg4LDEwMzI2LjI0MzI1NDUzNjU3Nyw0MzAwLjExNjgwNjE0ODI5NSw5NTUuNjA5NjI2NDMzMzcwMQorMjgsTW9uIDIxIEZlYiAxMSw1OTYuNDQ0OTI5MDEwNTI0LDU0OTguNjcwODQzODc0ODgzLDMyMjIuMDMzNjI0NDM4MjIyLDQ4NDMuODk1MTgxNTM1MTM5LDk0NjguMjYxODE3MzI2MDcsMzk0OC45NTUzNjc3NjQxMjEsMzkyNy43MjY2MjQzMTgxMjUyLDQ3Ni4wNDg1NjM1NDAyNDUxNCwxNTk4LjI2OTkyOTYxMjA0MjIsMTUzMjQuNzgxNDM3NTcxMTU5LDc2MDIuMzAxMjI3NzgzMTc1LDEwNjUuNTE4MDg3MDQwNTkxMSwzNjYxLjUzMzc1MDk0ODk5MzcsMTQxMS41NTQyMjE2OTIxMTEyLDExOTk4Ljg2MDg4ODMxNjM4LDcyMjkuNzA5OTMzNzU2NTYwNSwzNjY2LjQyNDM4ODYzMzkyLDUwMDkuNjc1MDQ0MjExMTEsNTE2MC45MjMxMTQ5NDEwMDIsNjU4Ni45NzYxMzM1ODI1ODgsNTU4Ni4yNjE4NzMxNTcwMDU1LDE0ODkuODIwMjI4NDgwMjAxNCwxMDUwMS45OTk5NTIzMTUwMDQsNDc5Ni40NDM3MDE3NDQ4NTYsNTc4MC40MDcyNzgzMDQyOTc1LDM2NjAuODgyOTY5Njk3MDAyLDk4My42MDc5MzkxMTI5MjE4LDgxOTMuOTA1Njk2MTU5NTYsNzM4Ljk5ODUzNTc2ODc0NTEsMTg5OS44MDY4ODQ1NDQzMTE3LDEzNDAuMTkwODk2NzE4NTE3Nyw4NzQ5LjQ4MjQxMjE1OTY2NSwxOTQ5LjYzNjg3Njc5OTc5NTMsMTY5MS43MjQwNzM1MTU3OTU3LDE5NzM4LjM0ODEzMjE1MTY0NSwxMjI2OS4yMDg5ODA1MTg3MDQsMzk4NS42MjAxOTEyMTkyNzcsMzU0OS42MDMyMDk3OTM0MDk0LDEzMTg0Ljg0MzQ4OTcxNTk1MSwxMDcwLjQ0NTM4NjA3MDU2OTQsNDc4OC43Nzg0MjY5OTI3MDksODkxLjYxMDYzNjE0ODc4MjEsNTk4MC4zOTA0OTY4MzM4MTQsMjA5NDYuMTAwMTg4ODQ0NDQ0LDIwOTkuNTkzMTQzOTM2ODk5Nyw3MzQ2LjUzMjA2NjMxNDkxOCw2OTIuNTQ2MDkxMjQ4MTEyMSw1OTUxLjIyODI2NjM1MDg2Miw2MTkyLjg0NzA1MjI5NzQyMywyNTc5LjY1NjIwODE2MTY2NDQsNTczLjEwMjU0NTg5MTMyMDIKKzI5LFR1ZSAyMiBGZWIgMTEsMzU3Ljc0OTUxNTYyMzMwMDM0LDMyOTguMDQ1NDg2OTU4MDIzNSwxOTMyLjQ1ODkyNTk4MjQyOTUsMjkwNS41NDYxNzg2NzU5NjYsNTc0OS41NjkyNzgzNTYxMDgsMjM2OS40MDQzNjA3MjQ5MzYsMjM1NS41MzE1MzAyMzg2Mzc1LDI4Ni42OTcwMTY1MDA3NjU0Nyw5NTguOTQ4NTEwMzkyOTA4OSw5MTkxLjM5NzM0NjUzMTMsNDU2MC44MzAwNTE2OTM5NjM1LDYzOS44NDM1NTkyMTY4MTMsMjE5Ni4xOTIzOTA5MDA2NDE0LDg0Ni40Njc1MDgyMTc1MzUyLDcxOTYuMzA0MTA1MzMwMTg3LDQzMzYuMDE3MTg0OTI4LDIxOTkuMzk0MzE3NTc2MTE5NiwzMDA0Ljc2Mjk1NTIyNzgzOTUsMzA5NS4xMDkzNzE4NDc5ODk3LDM5NDkuOTA5MjAxNTIxMjY0LDMzNDkuODMwMzk5NjQzMzA3NCw4OTMuNDkyOTAyOTkyNTA4Miw2Mjk3LjU4MjE2OTU1ODk2LDI4NzYuNTQzNDU3NTc3MjEwNiwzNDY2LjI1MTEwOTg3MjM0ODUsMjE5NS44OTgxMDI5NTYwNjM3LDU4OS44NDAzMzM3Mzg1MjY5LDQ5MTMuNTY5ODgyMjk3MjEsNDQzLjE4OTY3MDIwODU3MzMsMTEzOS4yODMxNzg3NDIwMTMyLDgwMy42Njc5OTE0Njg1ODg1LDUyNDYuNjYzNDYyODY5MDk3LDExNjkuMTIwMjM4MDM5MTg4MywxMDE3LjQzODQ0NTY3MTY0NjMsMTE4MzYuMTgxOTQ5NzU3MDgzLDczNTcuNDEyMTMwNjUwMDkzLDIzOTAuMjU3MjYyMjYwMTQ1NiwyMTI4LjUzNTE3MDI3MDYxNiw3OTA2LjQ0MDMzOTQ1ODY0NCw2NDEuOTAyOTQwODczMDkzNSwyODcyLjA4ODAzMzM3OTc4Myw1MzQuNzM3MjYyOTUzMDQ0NiwzNTg2LjE2ODE1MDM0MDQ2LDEyNTYwLjgwODQzMjc0NzMwMywxMjU5LjQ1NTkzOTkyMzUwMDksNDQwNS4zNzk4OTQwMzUyODksNDE1LjMyMzYwMDg1NTc0NTU1LDM1NjguNzU5OTA1NTU4ODQyLDM3MTMuOTczNjA3NTIyMjE3NywxNTQ3LjU0NTU2MDM5Njk1MiwzNDMuNzA0MDAyMzI2NDkxNAorMzAsV2VkIDIzIEZlYiAxMSwyMTQuNTgwMjY3NTM5NTMxNCwxOTc4LjEzNDM3Mjk3NjU5MjksMTE1OS4wMTk2MTQ5MTgyMjgsMTc0Mi44NjA5ODg1OTIyMDk0LDM0OTAuNzAxNjc1NzEyMDgzNywxNDIxLjY2NDE3Nzk4MzYzOSwxNDEyLjY1ODIyNTMxMDg1ODgsMTcyLjYzNzE0OTcwMjI2OTgyLDU3NS4zNjEwMzkxNDk4ODc5LDU1MTIuNzgyNjY1MDA3MDI0LDI3MzYuMTc2ODg1NzAwMTc3NSwzODQuMjIxMTA5OTgwNjg2MTUsMTMxNy4yNzk0NzA1MzMzMiw1MDcuNjAyNzE3OTg4ODk0MjYsNDMxNS45OTY1NTI4NTY3MTUsMjYwMC41Mjc2NzEzMDUxNDI2LDEzMTkuMzYwNjc2MTAxNjQ0NSwxODAyLjIzMzY3NTc5NDkyMjQsMTg1Ni4yMDE0ODMyMjY1Nzg4LDIzNjguNTg4MzQwMzcwODg3LDIwMDguNzQ4NzExNzY1NTM3OCw1MzUuODU2ODUzNDA4MDY0NCwzNzc2LjM5MDY2NzQ4MTgyMywxNzI1LjE0MTAwNDQ3MTA1NDksMjA3OC41NjI1ODY2NTEyNzIsMTMxNy4xNjAzOTc4MTQ2Mzk1LDM1My43MTA0MDI3MzY0NTg2LDI5NDYuNDkwMTE1MDQ1NDEwNywyNjUuNzg4NTExNTQ3NTQ0OTQsNjgzLjIxMDczNjk0MDgzMjksNDgxLjkzNDA5NzAwMjYzODgsMzE0Ni4xOTM4NjA3NjgwMzYsNzAxLjA3Njk5NTY2MzQ2NDIsNjExLjg2ODY3NDQ4OTc3MDcsNzA5Ny42Mzg2MTIxMDQ3NjMsNDQxMS45OTA5NDQ1NTg4OTEsMTQzMy40ODc0MTgwNjk1ODk3LDEyNzYuMzg5NzQwNDk0Njc1NCw0NzQxLjE5Nzk4NTM1OTM0MiwzODQuOTI0NzY3MjAzMTY2OTQsMTcyMi41NDcwNzM1ODM1NDg4LDMyMC43MDUyMzQzMjIwMDczLDIxNTAuNDY4MzU2NDkwNTQ2Nyw3NTMyLjQwNzk1Mzg4OTI5Nyw3NTUuNDk2ODM5NzE2NzA0NSwyNjQxLjcxNDAxMjU2Nzc4NTYsMjQ5LjA3MjEyOTM4NTc2MDA0LDIxNDAuMDc5MDg0OTA3MjM3MywyMjI3LjM0NjQ2Njg5NDQ3Niw5MjguMzc4NTUwODA2NjkzNiwyMDYuMTI4MTU1ODE5Mjc2MzQKKzMxLFRodSAyNCBGZWIgMTEsMTI4LjcwNzA0NzQ4MjM2MDUsMTE4Ni40NjU1OTA1MDY1ODI0LDY5NS4xMzg4ODc2ODc0MzEzLDEwNDUuNDQwNzMxNjE0NzEzNywyMTE4Ljg3MTc1MTYzNTY0ODMsODUzLjAxMjYzOTUzMDIzMzEsODQ3LjE5OTYyODM5OTI5NywxMDMuOTQwODYwMTcwNTY0MTksMzQ1LjIxMTc4Mzg1Njc2NzE3LDMzMDYuNDUwOTYxOTcxMjk2MiwxNjQxLjUxODA1NTgwODY2MSwyMzAuNzE4NzA1MDM3ODQ2NTIsNzkwLjEwNjUyMDY3NTE5MDUsMzA0LjM5NTY1MTEzNDQyNjksMjU4OC41MzgyMTcyMzE0OTEsMTU1OS42Njg0ODgyMDYyNjk2LDc5MS40NTEwMDU4OTQ3OTU2LDEwODAuOTY2MzgzMzEyOTkxMiwxMTEzLjIwMzg0MzE1NjEwODksMTQyMC4zNDM1OTczODc5NjQsMTIwNC41NjMxNzc5NDE0MTg5LDMyMS4zNzExNDQ3ODY2NTY0LDIyNjQuNTQ2MDExMzM5NjQ0LDEwMzQuNjE4MzA3OTc4Njk0LDEyNDYuNDI5MTM1NjExNjI3Myw3OTAuMDY5NDU5NTQ4NTY2MywyMTIuMTEwNDQ4MzM1Mjc3MjgsMTc2Ni45MDk4ODk3ODc4MTU3LDE1OS4zOTgxNDYyMjQzMzY4Nyw0MDkuNzExNzI5NTAzOTc3NiwyODkuMDAxMTMzMjQzMDI1MDQsMTg4Ni42NDAxOTA3MTcxNjUzLDQyMC40MTAyMjkwMTcyODM5NCwzNjcuOTQyNTkyNDM2Mzg3Niw0MjU2LjE1NTI0ODE1Njc5NiwyNjQ1LjcyNzMyMDg0OTU4NDQsODU5LjY5MzM5NTExMDUyMTEsNzY1LjM5NzY2ODUzNjEzOSwyODQzLjEyNjUyNDUzNzA5NCwyMzAuODI1NTQ3ODYxMTkzNDMsMTAzMy4xMDU3Mjg2OTM1NDk3LDE5Mi4zNDEwNjEzMzEwNjY4LDEyODkuNTQ1NTI2MDY0OTM1NSw0NTE3LjAxNzQ4NTMzMTc3LDQ1My4xOTM3NzYzNzg0Mzg1LDE1ODQuMTI1NTA0OTMwNDM0NSwxNDkuMzcwMjg0Njc1MjA5ODYsMTI4My4zNDY1ODk2ODk4OTAyLDEzMzUuNzg2OTg5OTA5NTk5LDU1Ni45Mzc5MTk2MjIxNzU3LDEyMy42MjA0OTc0NzQwODgyNAorMzIsRnJpIDI1IEZlYiAxMSw3Ny4xOTk5MDgyMjQwNjE0LDcxMS42MzA3ODQyODMzNTYyLDQxNi45MTk5NTU0NzUxNjIsNjI3LjEwMTU2NzcxNzA2OTcsMTI4NS45MTkyODA5NDA4NzgzLDUxMS44MTY5NDkxMjE2MDg4LDUwOC4wODMyODIxMTc0ODkzLDYyLjU3MjMyMzE4ODczNzY2LDIwNy4xMjQxNjY5Njk2NjExNiwxOTgzLjE0ODY2ODAxNzY5ODQsOTg0LjgwMTAzMDgzOTAxMzQsMTM4LjU0MTE4NDE5OTk5NTk0LDQ3My45MDc0NzY5Mzg1NTMzLDE4Mi41MzgyMzE0ODU1NzA4NiwxNTUyLjQ5NDQ4MzQ2MDYwMjYsOTM1LjQxMzE0MDA5OTk4MzQsNDc0Ljc3MTQ1ODUyMzEzMTA2LDY0OC4zNTU5MzU0MDE3NjUsNjY3LjYxMjk3MTA3Mjg3OCw4NTEuNzIzNTQzNzA1ODc4LDcyMi4zMjg1NDQ0MDc2ODQxLDE5Mi43MzcxMzQxMjI2NjU0MiwxMzU3Ljk1ODc3MTQ0ODUwOTcsNjIwLjQ5NDE2MDYyMjUxOTUsNzQ3LjQzNTE3MDMzOTE1MzgsNDczLjkwNTc5NjgzNDQzMjksMTI3LjE5NzA5MzMwMjIwNTYzLDEwNTkuNTU5Njk4NTc0MDkzLDk1LjU5NDA0NDA1NTgwMjA0LDI0NS42OTg2OTkyNjc4OTI2NCwxNzMuMzA1NTE0MjIzODA1MzUsMTEzMS4zNDIzOTcyMjM5NDY0LDI1Mi4xMDUyNDg5NTMzODc1LDIyMS4yNDU3NDU1ODQ0NTc5OCwyNTUyLjI0NTMwNjkxNjIwODQsMTU4Ni41NjAwOTk3MDM3OTY0LDUxNS41NzcyOTIyMDY5Njk3LDQ1OC45Nzg1MjgwODc2OTYxMywxNzA0LjkyNTE3MTA0NjQsMTM4LjQxODI4ODk2NjY1MDUyLDYxOS42MTA1MDk0NzA2Mjk1LDExNS4zNTU1MTA1OTgyMjgzNCw3NzMuMjg4NTE1MzQ2OTQ3MiwyNzA4Ljc2NTg2MjczNzQ0NjIsMjcxLjg1NDc1ODk5ODI0MTEsOTQ5LjkzNjkzMDgxODk2MDgsODkuNTc4NTE1MTM3NjAwMjUsNzY5LjU5MDY4NzEyNzAxNzMsODAxLjEwMDczNDAyNDg2MjYsMzM0LjEwOTI2NDEwNjQ4NzEsNzQuMTM4NTU0OTc1NzY1NzEKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0VJUlN0YXRlc09ubHlfRkRfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL0lfMC5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNFSVJTdGF0ZXNPbmx5X0ZEX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9JXzAuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY0ZjlmMWQKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNFSVJTdGF0ZXNPbmx5X0ZEX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9JXzAuY3N2CkBAIC0wLDAgKzEsMzMgQEAKK2l0ZXJhdGlvbix0aW1lLHN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL25vZGUvdHJhbnNwb3J0L3BpcGUvVVNBCisxLFR1ZSAyNSBKYW4gMTEsMC4wCisyLFdlZCAyNiBKYW4gMTEsMC4wMDMxNjc1NDU5MDc0MjA4NjE1CiszLFRodSAyNyBKYW4gMTEsNi4yMzQ3NTgzNDQwODU1NEUtNAorNCxGcmkgMjggSmFuIDExLDAuMTcxOTQxNTA4NDMyODg0MjUKKzUsU2F0IDI5IEphbiAxMSwwLjA2NzY2MzAyNDIyMzY3MzExCis2LFN1biAzMCBKYW4gMTEsNS4yOTI2MjY5NzU4MzY2MTQ1Cis3LE1vbiAzMSBKYW4gMTEsMy4xMTg1OTkyMTMwODczMzcKKzgsVHVlIDEgRmViIDExLDEzOS41NTI4Mzk1Nzc1MTQ1MworOSxXZWQgMiBGZWIgMTEsMTA5LjIyNzQxNjM5MzAzNTQxCisxMCxUaHUgMyBGZWIgMTEsMzQzOS41MjI0MDA0MTIwOTg3CisxMSxGcmkgNCBGZWIgMTEsMzMwMS4wNTM3MTQ3MDcxMworMTIsU2F0IDUgRmViIDExLDgwNDcyLjM3Mjc0Mzg1MTk2CisxMyxTdW4gNiBGZWIgMTEsNjk0NjguOTk2NTE1OTU4NTcKKzE0LE1vbiA3IEZlYiAxMSwyOTI3MjIuNzUzMDAwMzE4MgorMTUsVHVlIDggRmViIDExLDI2Njg0OS43NTM1NTM4NTcwNAorMTYsV2VkIDkgRmViIDExLDI0NTEzNS4wMDAwMzcyMTQ3MgorMTcsVGh1IDEwIEZlYiAxMSwyMzIwMTYuNDYzOTc3MzA4NjgKKzE4LEZyaSAxMSBGZWIgMTEsNTExOTc2LjY0ODQwNTU5CisxOSxTYXQgMTIgRmViIDExLDUwMjg0Ni41MzQ1NTE3NzE5CisyMCxTdW4gMTMgRmViIDExLDMwNjI1OS40NTM0NDExMjg3CisyMSxNb24gMTQgRmViIDExLDMwOTE4Mi4yNzE2NTgyODM2NgorMjIsVHVlIDE1IEZlYiAxMSwyOTA3OTUuOTg3NjkxOTE2CisyMyxXZWQgMTYgRmViIDExLDI4ODc5My4wMjA0NjIwOTEyNgorMjQsVGh1IDE3IEZlYiAxMSwxODU1NzcuMzA1MDkzNTcwODUKKzI1LEZyaSAxOCBGZWIgMTEsMTg3ODAyLjk4MjEwNDU5NTI2CisyNixTYXQgMTkgRmViIDExLDEzNzY3OS45MjUyNDkyNTk4NgorMjcsU3VuIDIwIEZlYiAxMSwxMzgxNjYuMzU3MjYyNzU3MgorMjgsTW9uIDIxIEZlYiAxMSw4NzYxNS41NDM0NDIxMTc3OAorMjksVHVlIDIyIEZlYiAxMSw4OTIyMi4xMTk4NTQ5NzU5MworMzAsV2VkIDIzIEZlYiAxMSw1NzAzMy43NzMwMjQyMzcwOAorMzEsVGh1IDI0IEZlYiAxMSw1Nzc1MC4yNzM0NzQyMDA5MgorMzIsRnJpIDI1IEZlYiAxMSwzNDEwOC4wNzY0NDI3MzY0MzQKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0VJUlN0YXRlc09ubHlfRkRfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL0lfMS5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNFSVJTdGF0ZXNPbmx5X0ZEX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9JXzEuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZmMWRjZDkKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNFSVJTdGF0ZXNPbmx5X0ZEX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9JXzEuY3N2CkBAIC0wLDAgKzEsMzMgQEAKK2l0ZXJhdGlvbix0aW1lLFVTLUFLLFVTLUFMLFVTLUFSLFVTLUFaLFVTLUNBLFVTLUNPLFVTLUNULFVTLURDLFVTLURFLFVTLUZMLFVTLUdBLFVTLUhJLFVTLUlBLFVTLUlELFVTLUlMLFVTLUlOLFVTLUtTLFVTLUtZLFVTLUxBLFVTLU1BLFVTLU1ELFVTLU1FLFVTLU1JLFVTLU1OLFVTLU1PLFVTLU1TLFVTLU1ULFVTLU5DLFVTLU5ELFVTLU5FLFVTLU5ILFVTLU5KLFVTLU5NLFVTLU5WLFVTLU5ZLFVTLU9ILFVTLU9LLFVTLU9SLFVTLVBBLFVTLVJJLFVTLVNDLFVTLVNELFVTLVROLFVTLVRYLFVTLVVULFVTLVZBLFVTLVZULFVTLVdBLFVTLVdJLFVTLVdWLFVTLVdZCisxLFR1ZSAyNSBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDEuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzIsV2VkIDI2IEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC41OTY4MzI0NTQwOTI1NzkxLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMyxUaHUgMjcgSmFuIDExLDEuMjE5NzE5MzEzNjc5ODIwM0UtNSwxLjIyNDA4NTA0OTEwODc0MDJFLTUsOC45MzI5NjYzMzkxNzQ4OTVFLTYsMS4wNTkxOTQ1ODAyMTY0NTE5RS00LDE4LjM1NjU2ODc1NDM0MzQ3OCwxLjEwODY5NTMwMzQ2NDM2MDlFLTQsMS41ODMwODI4MzE2ODY4NTlFLTUsNC4xMjgzMDY1ODY3NDcyNTQ2RS01LDQuMDI5OTA5NjI2Njk1NDQxRS04LDIuOTI3Nzk2NTA4OTU0NjgzRS00LDEuOTI0NzE4NDIwMjg5OTY1MkUtNCw0LjUyMjIzMDI1Mjc1NjczNEUtNSw3LjM1Nzk0MzMyNjc0MTQyN0UtNiw5LjA4NzQ0NjIwODE5ODIyRS02LDIuMTQ3MzcwOTI3MTY0ODg4NEUtNCwyLjI1MDAzMjg3NDkwNDk1NDdFLTUsMy40NzU3OTcwNTMwMjQ4MThFLTYsMS4wOTIxMDU1MDg4MzQ0NjQ3RS01LDIuMDU3MjY4ODY0NDI4MDIyN0UtNSw2LjQ1NTI0MzU3MDM2MTY0OEUtNSw0Ljc2OTA2MjIxNzM5MTgzRS01LDUuMzczMjEyODM1NTkzOTIxNEUtNiw4LjgyNTE2NjI1NjY2MDc5MUUtNSw3LjkzODkyMTk2NDU5MDAxOUUtNSw1Ljg2ODU1NTg5Mzg3NTIzN0UtNSw1Ljc2NjEyOTAyNDE5NjcyN0UtNiw2LjM2Mzg5ODk1MjE1NjU1RS02LDkuNDE1MjEyMTkxMTY5NDVFLTUsMy4wMzU4NjUyNTIxMTA1NjU1RS02LDEuMDU1ODM2MzIyMTk0MjA1NkUtNSw5LjA2MzkzODQwMjA0MjQ5NkUtNiw4LjQxMjc3MjE3MTUyODk1N0UtNSwxLjQ1NTEzMzIwMTAzOTI3ODhFLTUsMS4xMTQ1Mzg2NzI0MjMwNjlFLTQsMS44OTI5ODI4ODE5Nzk3Mzg2RS00LDguNTQ1MDg3NTM3NjA1NDU4RS01LDEuNTg2NDQxMDg5NzA5MTA1NEUtNSwzLjQ3ODQ4MzY1OTQ0MjYxNDVFLTUsOS43MDMzNTA3Mjk0NzgxNzNFLTUsMS4xOTg1NjIyODgxMzk2NjkyRS01LDEuNDQyMDM1OTk0NzUyNTE4NkUtNSwyLjkzNTExNzUxMTQ0MzE4RS02LDUuMjUxMzA4MDY5Mzg2Mzg0RS01LDIuNjkxNjQzODA0ODMwMzNFLTQsNC43NjI2ODE1MjcxNDk1NjJFLTUsNy4xNzY1OTczOTM1NDAxMzFFLTUsMy4xMzY2MTI5OTI3Nzc5NTE4RS02LDcuMzI0MDI0OTIwNzE2NzM5RS01LDIuNDczMDIxMjA3NTgyMTAyNUUtNSwxLjY0MjE4ODE3Mjg3ODM5MjJFLTYsMi4xODk1ODQyMzA1MDQ1MjMzRS02Cis0LEZyaSAyOCBKYW4gMTEsOS42NDg0NTc0NDE1NDA3NjJFLTYsOS43NDM4NzM5MDQyMjE2MDZFLTYsNy4xMDkxODkyOTkxMzA2OTFFLTYsOC4zNzQ4OTMzMzY4ODMwOTFFLTUsMzIuNDQxODIwMzQwMDUxODksOC43NDkzNDY5MzQ1MTc2MTlFLTUsMS4yNTkyNjA0NjY2ODA3MDNFLTUsMy4yMDA4NTUzMTQyNDg2OTdFLTUsMy4yMTExMDEwNjM4MzQyMTI2RS04LDIuMzE2OTkyNDkwMjg1NzUyNUUtNCwxLjUyMDIwMzIzMjY1NzIzMzhFLTQsMy41NTMxOTYxMTM1Mzk0OTFFLTUsNS44NTc1Mzg5OTIwMTgyOTFFLTYsNy4yMjIxNjc3OTU2MzAzNzZFLTYsMS43MDAwMzg3MTQwMjY0MjMyRS00LDEuNzkwNDE5OTM4MjU0MTk1NEUtNSwyLjc2ODI4OTc2Njc0MTYxMUUtNiw4LjY5MzQ2NDA2NjIyNzg0M0UtNiwxLjYzNjQ3ODUyNzA5NDM1ODVFLTUsNS4xMjQyMDQyMTUzNzUzNDNFLTUsMy43ODczNTY2ODUxOTgyMDU1RS01LDQuMjc0ODA3MTA3NTg0NzgyRS02LDcuMDA4ODQzNTg4OTA4OTU1RS01LDYuMjg3ODQxMDgwMTkwNDU1RS01LDQuNjU3OTI3MDgyMzE1NzE1RS01LDQuNTkxMTU4Mzc3NTg0MTdFLTYsNS4wNTc1OTQyNzczMzc0NjA0RS02LDcuNDY5NTUzMTY4MDA0NDQ1RS01LDIuNDE0ODAyNDg5NTE2ODUwNEUtNiw4LjM5Mzg0ODIzNTI0MTQ5N0UtNiw3LjIwMjY0NDMyMTAyOTg0NEUtNiw2LjY3ODUyMzU5MjYzNDA2N0UtNSwxLjE1NjAzMTIwNjM5MDI5MDNFLTUsOC42OTU4OTc5ODY0NzAwNDJFLTUsMS41MDI3NjcyNDU5MTk0MTQ2RS00LDYuNzg5ODUxNTY0OTUwMzg4RS01LDEuMjYxOTU1ODgzNzk3OTgyNkUtNSwyLjc2MTIzNzg1MTgzMTEyNUUtNSw3LjcwOTExNTQxMzYyOTk1N0UtNSw5LjUwOTcyODI2NDU4NDAyNkUtNiwxLjE0NzUxNzY4OTc1MDgwMkUtNSwyLjMzNTM5ODQ0ODgxNjg0NkUtNiw0LjE2OTk3OTQ3MDY1ODk0NUUtNSwyLjEzNDQ0MzAyNzIyNTQzNzVFLTQsMy43NjQ4MTMyNDUyMzMzNUUtNSw1LjY5Njg3OTYwNTk1MzQyNUUtNSwyLjQ5NDU0MzE1ODMxMzE1MzdFLTYsNS44MDg5MjA5MjQzOTY1NUUtNSwxLjk2NzE4ODI0OTk0NzE5OEUtNSwxLjMwODEwNDc2MjU5NzM0NjhFLTYsMS43NDE4NDA2MDMzNzgwNzQ0RS02Cis1LFNhdCAyOSBKYW4gMTEsMC4wMDEzMjY0NzI2NDc0MDE2MTE3LDAuMDAxMzMxMzA1MTIzNTcxNjM4LDkuNzE1NDAwOTk3ODYxNDQyRS00LDAuMDExNTE4OTMxMzQ1NDYwNDksMzYyLjYzNTkwMzI0MjQ3NTE0LDAuMDEyMDU3MDI2MzA0ODMwMjUsMC4wMDE3MjE3MzU3ODAyMTg4OTYzLDAuMDA0NDg4NzQwMzk3NzI4ODMyLDQuMzgyOTQyNzc1MjIxMDgxRS02LDAuMDMxODQwNTkzODc1NjQyMzcsMC4wMjA5MzE0MzEyNzY5MDM4MTMsMC4wMDQ5MTc2OTY3MzgzNzcxNTQsOC4wMDI0NDc2ODAxMTE5N0UtNCw5Ljg4MzI3Mjg0MTYzNTAxNUUtNCwwLjAyMzM1MzM0MTc1MjQxMzU1OCwwLjAwMjQ0NzEwODkyNjczNzk2NzUsMy43ODAyNzAyMDA4NTkyNTU2RS00LDAuMDAxMTg3NzY1NDU4NzEyMDgxNywwLjAwMjIzNzQ1MzM3MzgwNjEzMjcsMC4wMDcwMjA0NzI4MTk5MzE2OTgsMC4wMDUxODY2NzAyODExMzQwOCw1Ljg0MzgzMDc0MjIwODcyOUUtNCwwLjAwOTU5Nzk1NTk4MjI4MjEzOCwwLjAwODYzMzg2NzkxMjcxNjM4LDAuMDA2MzgyNDA2MjIyNzcxNjY1LDYuMjcxMjEzMjYwNDU3ODY2RS00LDYuOTIxMjEyMDYwNzkwODM5RS00LDAuMDEwMjM5NTYwMzkwMjA5Mjg3LDMuMzAxNzU3OTA3MDA0MzI5NkUtNCwwLjAwMTE0ODMwNDE3MjUwMzM1NzIsOS44NTc2OTQ2NDY3MzExMTJFLTQsMC4wMDkxNDk0MTA5Nzg4MzcwMSwwLjAwMTU4MjU1OTU2NDU1OTM4ODMsMC4wMTIxMTkyMDYyMTYxMTQ2MjUsMC4wMjA1ODczNjM0ODM3NTg1MDYsMC4wMDkyOTMzOTk2NTIyMjI1MDQsMC4wMDE3MjUzODg1MDQzMDg3MzUsMC4wMDM3ODMwNjQwNzA0NjAwMzk4LDAuMDEwNTUzMDc5NDM3MDY2MTMsMC4wMDEzMDM1MDM2Mjc5MDY5MTYsMC4wMDE1NjgzNDE3ODk0NjI4NDM0LDMuMTkyMTk2NTE3OTUyMDkzRS00LDAuMDA1NzExMTM5NTkzMzUwNjM4LDAuMDI5MjcyOTY5ODQyMTU1MDY0LDAuMDA1MTc5NDg4MzIzOTY3MTk3LDAuMDA3ODA0OTkwMTQyMjA0NDU3LDMuNDExMzIzOTkxMDQzMTMxRS00LDAuMDA3OTY1MjU3Mjc4OTMxMzYyLDAuMDAyNjg5NjE5MDMxOTA5NTMsMS43ODYwNDMzMzA0NzYwMDlFLTQsMi4zODEzNTkwMjk1Nzc3MjczRS00Cis2LFN1biAzMCBKYW4gMTEsMC4wMDE3NDM0MzYwNzA1NTgzMDg0LDAuMDAxNzYwNzMxNTc5MjU3OTAxNCwwLjAwMTI4NDYzOTAwMzc5MTA3MTQsMC4wMTUxMzMwNTA0NTM1MjQ2ODcsMTAwNS4yNDY4MTI2NjIwNDAzLDAuMDE1ODA5NTIyNzA0MDg1MDIsMC4wMDIyNzU0OTMyMTU2MDY3NTAzLDAuMDA1NzgzMjYyMjU3NzQ5OTk3LDUuODAyNTMzMzQ3ODY4Njg1RS02LDAuMDQxODY3MTc2NDA3MzM2OTQsMC4wMjc0NjkyMzUzMDE3NzkxNiwwLjAwNjQyMDI2ODIzMDQxNzA5LDAuMDAxMDU4NDY1OTE2NzY2Njk2OCwwLjAwMTMwNTA0NTQ3NTY3NDUxNiwwLjAzMDcxOTExMzM2NzY1MjE2NSwwLjAwMzIzNTMwODA4MDgxNjY5NCw1LjAwMjM1MTY2MjgyNTgyOEUtNCwwLjAwMTU3MDkyMTIwNjAwNjA1NTQsMC4wMDI5NTcxMjkzNTg1NjM3OTU2LDAuMDA5MjU5MzgxNTkzNDYzNTg0LDAuMDA2ODQzNzI3MjM0MjUzMjQ0LDcuNzI0NjE1MDY3MzI0NDI2RS00LDAuMDEyNjY0OTM0NjA2MzI4MzY1LDAuMDExMzYxOTM2MDU5ODY5Mjc0LDAuMDA4NDE2ODE4ODc0NzEyMTg0LDguMjk2Mjk4MjQzMTIxMjM5RS00LDkuMTM5MDcwNjI0MjA0NTE4RS00LDAuMDEzNDk3MzYzNzYwODg4MDYsNC4zNjM1NjU3ODExMzQzMzk2RS00LDAuMDAxNTE2NzcwNDgwMTg3NjE3NywwLjAwMTMwMTUxNjgzNjE0OTcwNjcsMC4wMTIwNjgwMjM2NTU0OTI1OTEsMC4wMDIwODg5NDQyMzQxODQwNDQsMC4wMTU3MTIwOTA4NzA4NzIwNiwwLjAyNzE1NDg1MTE4NzI2MTg1MywwLjAxMjI2OTI0ODA3MTU0NzEzNiwwLjAwMjI4MDM2NDA2OTc3NDY0NTMsMC4wMDQ5ODk1MjY5MzU2MzkwMTgsMC4wMTM5MzAzNDYzNjY4MjQ5OSwwLjAwMTcxODM5MzYwNTExNDgwMjQsMC4wMDIwNzM1NzcyMTE1ODM2MDQ0LDQuMjIwMDg4NjQyNzg2OTE1NkUtNCwwLjAwNzUzNTEyMDgxMjA0MjExMSwwLjAzODU2ODk2MDAwODUwNDQ5NSwwLjAwNjgwMjgzNzM5ODgxMjY2NCwwLjAxMDI5NDIwMDM3Mjk3MDcxNyw0LjUwNzY1NDIxNjYzNTYxODdFLTQsMC4wMTA0OTY2MTM2Mjc5MTA0MSwwLjAwMzU1NDcyNDMzODYzMjY4OSwyLjM2Mzc3MTU4Nzc1Mjk3MkUtNCwzLjE0NzUyMDQyOTQ5NTczMkUtNAorNyxNb24gMzEgSmFuIDExLDAuMDYxNzYwODY5MDAyOTA0MjU2LDAuMDYyMDA0ODczMzY2NjcyMjUsMC4wNDUyNDg1MDU4ODcyODUzMTYsMC41MzYzMTI0MDkwMzkzNDQ5LDc1OTguODE3NzEyNzI1OTIzLDAuNTYxMzEzMDg1MzI3NDIxNywwLjA4MDE4NjE4ODM3OTk1MTc0LDAuMjA4Nzk3NTUzODEwNDM2NCwyLjA0MTQzNTM2NzkyNzgyMkUtNCwxLjQ4MjUzNjEzNDk0ODA5NCwwLjk3NDQ5OTk4Njc5NTI4NTUsMC4yMjg4OTQ1MjcxNTgzMjc3LDAuMDM3MjcxMTY1MTM0ODUwMTIsMC4wNDYwMjcyMzQ4MzExNTE3NiwxLjA4NzM3OTk4ODY0NDM0NywwLjExMzk3MDg5MTEzNzMzMDg1LDAuMDE3NjA2ODkzNjQxNTY2NzcsMC4wNTUzMTk2MzYzNzQ4NzIwMywwLjEwNDIwNDcyNjc1MDA0Nzg4LDAuMzI2OTMwNDUzODU5MzU0NCwwLjI0MTUzODgxNDUwNjU5MDE1LDAuMDI3MjE2NjE4MjY3Mzk4NzMzLDAuNDQ2OTY5NjUxMDU1Njg5LDAuNDAyMDE5MjY4NzI1NDkxNzYsMC4yOTcyMTUxMTc0NzQ4LDAuMDI5MjA4MjUzODQwMTc5NjIsMC4wMzIyMzI2NDk4MTg5NjcwMTQsMC40NzY4MjQwMjk5MTc0NTgzLDAuMDE1Mzc3MjE0MTM2NTMxNDAzLDAuMDUzNDc4MzMyMTQ5ODc5OTQsMC4wNDU5MDc4NTIxMzE1OTk0NywwLjQyNjA3MjQ5NDY1NTY2MTMsMC4wNzM2OTk4MTA1MzMyODU5OCwwLjU2MzkwMTA2Nzc1MjkwMjIsMC45NTg3MTg4NzIwMDU2MzU5LDAuNDMyNzk3NDUwMzI4NTExMjUsMC4wODAzNTYzODE2Njg1NjQ1NywwLjE3NjE3MDMwODMxNDkyNTQ0LDAuNDkxNDU3ODc1MDQzNTEwMzUsMC4wNjA3MDAzNDYxOTEwMzU4OSwwLjA3MzA0MzYwNjA5MzA4ODQxLDAuMDE0ODY3MTg1NDg1NTk5MDc4LDAuMjY1OTYxNzk5NTM5NDA4ODUsMS4zNjMxMTk1ODA2NzAzMDYsMC4yNDExNDk5MDU3ODc1MTM1OCwwLjM2MzQ2NDE2NzcwMTU3ODUsMC4wMTU4ODczNzAwNjE4OTQ1ODgsMC4zNzA5MTE5NDY4MDQwNDcyNywwLjEyNTI2MzM4MzAyMDEwMTIsMC4wMDgzMTg2OTA1MjYyMjAwNzgsMC4wMTEwOTA3MTc3ODQ1ODg0NjUKKzgsVHVlIDEgRmViIDExLDAuMTExOTU0MzEyNjA0NDUwMSwwLjExMzA4MTk5NjU2NzMzMjg1LDAuMDgyNTA0Nzc3NTM2NTMzNzQsMC45NzE3NTQ2NzkwMDUxNTM4LDI2Nzk3LjA2MzM2ODI1Nzk4LDEuMDE1MTQ2OTkwMzMwMDA5NywwLjE0NjEzOTc2MDQ1MTQyMzQzLDAuMzcxMTk3NTE5NjE4MTY0OCwzLjcyNjczNTg2NDEwODQ0MjdFLTQsMi42ODg1MTc3NjYyNTM1MjQ3LDEuNzYzODY1ODcyMzAyOTAzNywwLjQxMjIxMDA0NzMzNTI0MDk3LDAuMDY3OTc5NTI1ODIwNzk4NDcsMC4wODM4MTI1Njg0NTUzMjY5MywxLjk3MjY1ODYxMjMyOTA1MiwwLjIwNzc4NDA1NzIyMjIyMjYsMC4wMzIxMjc3NDgyNzk0OTc4OSwwLjEwMDg5MTU3ODIwODA3NTEyLDAuMTg5OTE2NzgzNjE3Mjc1OTYsMC41OTQ2Mzg2NTQwODU3MDM0LDAuNDM5NTA5NjQ2NzI2MTQwNTcsMC4wNDk2MTAyNDg0MTgzMDI2MjQsMC44MTMzNTMxNjMzMjc3NzU1LDAuNzI5NjI1NjY4OTc2NTkzNCwwLjU0MDUyNzYwMDU0MjQyMjcsMC4wNTMyODI4NjAzMDE1Mzg0NSwwLjA1ODY5Mjg3OTUzMDI2ODQsMC44NjY3OTA0MjY5ODIyMDMzLDAuMDI4MDI0MjU0MTgxODc2OTMsMC4wOTc0MTA3MTQwNjk0NDU2OCwwLjA4MzU4NTcxNjYyMzEyNTU2LDAuNzc1MDExMTg1NjU4Njg0NCwwLjEzNDE1NDg5MTc1MDI3NjYyLDEuMDA4NjIyMTMxMTU0MDgzLDEuNzQzODkwOTkwOTc1MDg3MywwLjc4Nzk1MTQ3NDE5MDQ5NTgsMC4xNDY0NTI2NTA2NjM3ODY2MywwLjMyMDQyODA1MDI1ODAxMzQ2LDAuODk0NjI2OTMyMzAxNDM2NiwwLjExMDM1NDE5MjExNjUyMjc1LDAuMTMzMTczMzE0NTQzNjU3MTYsMC4wMjcxMDMwMDI5NzE1Mjk0NTUsMC40ODM5MTA1MDc1NjI4NjgsMi40NzY4NDIxNzE3Mjg0MTczLDAuNDM2ODM1MTYyNjg0MDA0MiwwLjY2MTA5NTAxNzYzOTk2ODQsMC4wMjg5NDk1MjYwODI3MTgxMDYsMC42NzQwODAxMDE0MjE2MDcxLDAuMjI4Mjk2MzI2MjI3ODIzOTgsMC4wMTUxODE0NDQ0NjY0NTEwODEsMC4wMjAyMTQ0NjQ3ODY1MTQ0ODcKKzksV2VkIDIgRmViIDExLDIuMjAyMzkzMzM3NzY1OTI3LDIuMjEyMjQyNDEwNzYxNzM3LDEuNjE0MzcwMzA4MDIxNzEwMiwxOS4xMjQyMDI3MzY1ODUwNzYsMTY1ODI5Ljg4MzU0NjY3NjYsMjAuMDEyNTE3NjQ5MTE4OTcsMi44NjA3NTU4OTQ2MTQwMzIsNy40MzM2OTg0MTM3MzU4MzksMC4wMDcyODQxNTM4MjYwOTkxODcsNTIuODY5MTE4MDE2NDc4MSwzNC43NDYzMTk0ODczMDQ5OSw4LjE1Nzg3OTg5MTcwMTA3LDEuMzI5NzkwMDYwNzAyODM5MiwxLjY0MTk2NTQyODY0MzMzNjcsMzguNzc4NTg0ODAwNzYwNDM0LDQuMDY2MTkzMTQyMzYyMTM0LDAuNjI4MjE2NTgxODU4NTE1MywxLjk3MzcyNjEyMzk2Mzg5MDYsMy43MTc2NTY1MDQ3MjMwMjYsMTEuNjYxNzA0NDYyODU2MDkzLDguNjE2MDcxMzY1MDE3MTQ5LDAuOTcxMDA0NTQ5NzM3NjM5OSwxNS45NDQxNzU3NDIwOTAxNDUsMTQuMzM3NDg2MjIzMjg5NDk5LDEwLjYwMTY0Mzg3MDg0Mzk5NCwxLjA0MjEzMDk4MDIxODEwOTYsMS4xNDk4NTkzNDIzMzI5NzQsMTcuMDA3NjQzNDUyNDY0NDkyLDAuNTQ4NjAyNTU3ODI5NDE5NywxLjkwNzgyNDg5MDAzNjY1NywxLjYzNzY5MDcxOTExOTk5NTksMTUuMTk4MjA5Nzg5MjQ3MTgsMi42MjkwNzA5MTcyMDQ5OTcsMjAuMDg2MjY1MTk5MzIyOSwzNC4xOTc5ODUxMDUzNzMyMSwxNS40MzkyNzg4NzE5MjcwMSwyLjg2NjgzMjMzNjQzMTM5NTcsNi4yODQwNDYyNDkwMzE2MiwxNy41MzE2ODA4OTA0MzAwMTcsMi4xNjUxMTM4MzU0MTY1Mzg1LDIuNjA2MDE5NzQyMTc3NzI0NSwwLjUzMDQyMDQ2OTc4ODU5NjQsOS40ODcyMTExODQ2NTUzNjcsNDguNjE4NzMxNDYwNzEwMDksOC41OTg5MTAyMTU3Mjg0NDUsMTIuOTY0ODg0MjA1NjgzODc3LDAuNTY2Nzk1NTUzMDI0NDE2LDEzLjIyOTYwODU5NTg1NDQ4NSw0LjQ2ODk1Mzk1NDUwMDQ0OCwwLjI5NjgxNTY3NjMzNDM0MjQsMC4zOTU2Nzk3MTI3MTg1ODkwNAorMTAsVGh1IDMgRmViIDExLDUuMDAyNDg0ODUwOTEwNDU4LDUuMDU0MjE5Mjg4NDIyODE4LDMuNjg3NTMwNDQ1NzQ3NzcsNDMuNDIwMzU4MTYzNjIwODUsNjY0OTkyLjQyNzUzNzA3MSw0NS4zNTU1NDU5MjM2ODI0ODQsNi41MzE1NDM0NjgzMDc4NzQsMTYuNTcyNjU1MzExODg1MTY4LDAuMDE2NjU3NDMxMjk0OTE2NTc4LDEyMC4xMzM5MzQzOTI0Njk1Niw3OC44MTAyMjkyNDQ2NDE3LDE4LjQxMzY5NjEwOTI5MzUzMiwzLjAzODM2ODE5MTM5NjExNCwzLjc0NTc2MTIyNzIyMTgxODYsODguMTQ3ODY4NzkxNjUzNjQsOS4yODY4MDMyMTE1NjE2NSwxLjQzNTk4ODgyNDM5NzU0NSw0LjUwOTM3MDA5MDU4NjUxNzUsOC40ODgxMTE3Nzk4OTYwODQsMjYuNTc0MzI2OTkwMDg3NDI1LDE5LjY0MTk5NTYwMDUyMzc2NCwyLjIxNzI4NjY4MTM3NTQ3MjYsMzYuMzQ5Mzk3Nzc0OTc5ODYsMzIuNjAzNzc5NDI1MDk1MDEsMjQuMTU1OTg2OTYxNTU1MDMsMi4zODE1MTQyODk5NDY0Mjk3LDIuNjIzMTA3ODI2ODY1NjkyLDM4LjczNTgxMDc1NzEwNjAxLDEuMjUyNTA5MjYyODk1NDIzNSw0LjM1MzU1MDUyNDQ0ODMsMy43MzU2MDQxNDE4MjMyNjczLDM0LjYzNTI0NjI1MjYzMDMxLDUuOTk1NTcyNzY5MDQ2MTk5LDQ1LjA0MjgyOTc4MDUxNjc1LDc3LjkzNDUwODQyODkwMzYsMzUuMjE0OTM3MTUyNDQxMDk1LDYuNTQ1NTMzMDY4MzUyNywxNC4zMTk4ODk1MTkwMDExMDksMzkuOTgyMjExODMxNjc0ODc0LDQuOTMxNjE1NDYyNDg1MDM2LDUuOTUyMTIzOTY0NzIyMTU5LDEuMjExMzUxMzQ3MjgzMzM2OCwyMS42MjYyMjMzMzEzMjA3MTYsMTEwLjY4NDkyOTgzMTI2NjQ3LDE5LjUxODY0NDMzNDE2MTc3LDI5LjU0NDI2NzA0NTMwOTUxLDEuMjkzODU0MzUyNzY2NDQ1NCwzMC4xMjM0NzA1MjY4NDc3NiwxMC4yMDM0NDAwMjU2NjI4MjIsMC42Nzg1NTczMjk1MDc2OTgxLDAuOTAzNDY0NjUzMzYxNjgwNQorMTEsRnJpIDQgRmViIDExLDY5LjE4NDczMDk4MTIyMzgyLDY5LjU0Mjg3NzM1NzI1MjU1LDUwLjc0NzIyOTIwODIyODU0Niw2MDAuNzI2OTIxNTg3NDU2NCwzNTc5NzkyLjM4MjMxMzIxNCw2MjguNDk1NzAwNDc2MzEzMSw4OS45MjIwMjU1NjMxNDkwNiwyMzMuMDA4MDUxOTk4MDEyNzUsMC4yMjkwMDY4NDk1MTI1NDQzLDE2NjAuODc5NDE5NDgzOTczOCwxMDkxLjMxNTkzNjExMTM0MzUsMjU2LjA3NTk0ODUyOTI2ODE1LDQxLjgwMjk5MzI0MjQ4NTQzLDUxLjYwNjY3ODc4NTc3MzQ5LDEyMTguMjc4ODM4MjYwMzE1OCwxMjcuODE3NTg2NzQxNTc5NzksMTkuNzQ5NDk2OTg0ODUyNDQ2LDYyLjA0NTEzNzk5NjExMDM4LDExNi44NTcxNjk3OTczMTc3LDM2Ni40NzY4NTI4MDkyOTM0LDI3MC43NzkwMjcwODMxMjA3NSwzMC41MjIxMDQ2MDk4NjAxMDQsNTAxLjA4MzQ3MjM2MjIwOTIsNDUwLjQ1MjIyNzg2MDkwNDksMzMzLjE1OTI0NDE4Mjk0MzYsMzIuNzYwODc2OTkxMTgwNDIsMzYuMTM5ODI2MDE4MzgyNzA2LDUzNC40NDIyMjcwMzUyMDEsMTcuMjQ0MTQ1MDg2NTA3MTc0LDU5Ljk2NDc0NTE1NDMyMzU2Niw1MS40NzE2NTEyMTU4NjYzNjYsNDc3LjYxNzI4NjU0MTkxMTU0LDgyLjYyNzgzNTM0NTc4NTg3LDYzMC4wMjU5OTQyMTcxMjEzLDEwNzQuNzAzMTgyMDgwMjQ5Nyw0ODUuMjQzNDg5OTU2MTY5Niw5MC4xMTMyMTk1NTA2MjM4OCwxOTcuNDgwMzUzOTQ0NzczMTksNTUwLjk5NzI0NDQ3MzIyNTUsNjguMDM2NTMxNTk2NjExMjUsODEuOTE4NTQ5MDc4MDg3NjEsMTYuNjczMjE4ODExNzYwNDc4LDI5OC4xNTM2ODQ1MDAyNzA2MywxNTI3LjcwMDI5NzMwMzU2NjIsMjcwLjEwMDExNDk0MDM1NjcsNDA3LjQzMDYzNjU0Mjc5ODU0LDE3LjgxNTY4NDU3NTExNzUxMiw0MTUuNzA5ODYyNDc2NjgzOSwxNDAuNDcyNjc0NDc1MDYxNDQsOS4zMzEyNjQ4OTU5OTI2ODUsMTIuNDM3NDk2NjkzNzIwOTUyCisxMixTYXQgNSBGZWIgMTEsNDcwLjY3ODE1NTU4MTEwNzE1LDQ3NC4yMTE0NjY0NjA5NjgsMzQ2LjAxNjA4MjUxNjE3NzEsNDA4Ni4xOTY2OTA4NjM5MDUsMS4yNTE4NjEwNDA5NjIyNjM4RTcsNDI3Mi4wNDEwNzkzNzA3NDIsNjEzLjAxNTM1NjA0ODU5NDQsMTU3My42NDg5ODg3NjkzMTY1LDEuNTYyMTc3NzI5MzY3ODE3LDExMzAxLjA4OTg2MjExMDQ3NSw3NDIwLjI3NTUyNDA4OTgwMiwxNzM3LjgyNTA5MzgwMjg5NCwyODUuMDYzMTY5MzgwMDUzMjQsMzUxLjY5NjY2Mjk0NjkyNTI0LDgyOTAuNjkzMjY0MjI1OTE2LDg3MS40NzEwMzE0MDg0MywxMzQuNjk4NjY0NTgyODI3LDQyMy4wODc0OTUzMDY5ODg2LDc5Ni42NDIyNzU0NDc2NjExLDI0OTYuNDMxMjA4MzIzMjkyLDE4NDQuODM3MzkyNDY1MzI1NiwyMDguMDg3NDQyMTQxMjc3MDIsMzQxMy45NzczNDYxODg5ODE4LDMwNjUuOTMwNTE3MDc0MDc3NywyMjY5LjM3MTM4OTkwMDI1NiwyMjMuNDE4MjE4NTg4MDU1MTQsMjQ2LjI4OTg2NTQ1MTk1MjcyLDM2MzkuODM1MTk5OTI1OTcyLDExNy41NTUyOTU5NTM2OTU1Niw0MDguNzA0NzQ4MTkyNzYxMjYsMzUwLjc2MTMxMDAzMzI1NzYsMzI1My41OTMzMjg4MjI4OTcsNTYzLjAyNzkyMTU4NDQ2ODMsNDI2NC42NTM4NjYwNDE0MTQsNzMyMS4wNDU5NTgwNTU1NzUsMzMwNi42NzY3MTc3MzMzMDU0LDYxNC4zMjMxMDQ2MTcyODE1LDEzNDUuMjMxMzIzNDA1NzI3LDM3NTQuNTU4NzU5NDg2OTU4LDQ2My4zODE4Mjk0MDI3MDE2LDU1OC41MzU3NTYxODk4MjI3LDExMy42NzY0NDM0ODIzMzkzMiwyMDMxLjI3OTMxMjg1MDE1MiwxMDQwMi43MDI0MjA0MDAxNDYsMTgzNy4wNzA1NjgxODIwMTczLDI3NzUuNDE4Mzc2NjkxNTEyLDEyMS40NDQzOTgxNTk5Mjk1MywyODMwLjkxODYzOTk5MjQ0NTYsOTU3LjYzMzY1NjE0MzIyMDMsNjMuNjQ1OTcyNTk5MjEyMTg2LDg0Ljc5MTI3MDg3MzA1NzI0CisxMyxTdW4gNiBGZWIgMTEsNDM1Ny42MjUzMDkxMzcwMDksNDQyNC4yMjkzODM2ODkxMjIsMzIyNy4zMzE5NTU1MzQ1NDksMzc4MTAuMTUxNjc2NzM3MzcsMS40MzI0NzQ1ODkwMzM4NDM0RTcsMzk0MzcuMDg3NDY2MTA4OTksNTcxNC4yMTI3MjQ4OTcyODIsMTQyMjUuODU0NzMwNjM2MjEyLDE0LjU5MjgwNTYwMDczOTE1MSwxMDQ2ODIuMTE5MjY1ODc1MjQsNjg1NzAuODAxMzE4NTk4MTgsMTU5NTguNDIwNzc0MjQ3Nzc3LDI2NTkuODMzOTA4ODQ1NDk4LDMyNzQuNzQzMTI5MDA0NTAxNSw3NjgzMy4wMjUwOTk0MzYzNyw4MTI2Ljk2MjM4OTI2ODIzNzUsMTI1Ny41NDA4MjExNjQ2MTksMzk0Ny4zNTI1MzY0NjcxODIzLDc0MjYuMDQyNjkwNzcxNTYxLDIzMjExLjI4MTE2NTQzNjU0MywxNzE2Mi4wOTU3NDc5MDc2MzUsMTk0MC4wNzI2NDQyMjc2NTI1LDMxNzYxLjI2MjYyNjkxMDQ2LDI4NDI4LjE5MjgyNjM1OTE2LDIxMDk3LjAwNDk3MTU4ODU1NCwyMDg1LjExNDQwNTQ4MTM2LDIyOTMuMjM5MjQ0OTU4NjM3OCwzMzgxOC41NzcyODk2MzMxNywxMDk1Ljc0OTkxOTIyNjcyMDUsMzgwNy4wNTkzMTAzMTU5NTEsMzI2NS41NjQ0MzU5NDE3MDEsMzAyNTMuNTY3ODU0MjU3NTksNTI0MC4xNDUzMjYwODczMzcsMzg4MzYuOTA4MjU4NDg0ODcsNjgwNzUuNTI1NzQ1MDQ1MDQsMzA3ODIuMjEyNjU2MzI1MzQsNTcyNi41Mzc4MTE2ODg5MTEsMTI1MDcuNjczODQ4MTk1ODY3LDM0OTQ1LjU1OTgzODI4OTgsNDMwNS45MTM4MTcwNDc0Niw1MjA4LjkxODY1MzE2MTcxOSwxMDYwLjAwNTMzMDYyMzg3NzQsMTg4OTQuNTUzOTU2MzQxMTMsOTY2MDAuMTI1ODM3ODgwNCwxNjk5My4zNTgyODE5NjM3LDI1ODA1LjU4NDE0ODA0NTE5MywxMTMxLjc3ODgzMzgyODg5OTIsMjYyOTMuOTE3NDA5Mjg5MTUsODkyNi43MjI2Mzc0NTcxMzEsNTk0LjMwMTgxMzk5ODgzNjgsNzkwLjQ1ODY3MjM5NDcwMzIKKzE0LE1vbiA3IEZlYiAxMSw0OTExNi4xNTc5OTkwNzkwMiw1NzY0MS4wNTUwMzEzMjEzMiw0MTgyMS4zMjEzMTM3MzQ4NjUsNDIyMDUyLjIyMDY3MDIxMDU1LDEuMjkxMDE0OTYzODk4ODEwN0U3LDQyMjUxOC40NjA0NTcxOTYsNzMxNzIuNjk0NDE0ODI3ODksMTExMjgzLjU5MjkyNjcyODgyLDE5NC45MzMzMzI3OTQxNjk3LDExOTA5OTAuNzIzOTE2MTk3Miw3NDc5NDQuMTg0NDIzNjI0NywxNTY2NjkuMjI4NDkyMjQ4NDUsMzQ3MjkuNDQyOTEzMzQzMDI0LDQxMDQ5LjUzOTM4MDYyOTg3NCw4ODE2MjcuOTU0MjYxMjgyMywxMDQ5NjguODA4MzM3Nzg0OSwxNjYwNS42OTA0NjE3MDkwNTUsNTE0NTEuODg3MTE1MDE2MjE2LDk1MTMyLjE1MDM0NzAwNTI2LDI4MzAwMy4wNjA4ODA4NzMzLDIxMTM5MC42ODYzMTAzNTYsMjQ5NDEuMzEzOTQ5ODI0NjAyLDM5MTY0MS4yMjMxMjEwNDAwNCwzMjkzNTcuMTQyODgzNTI5MjUsMjU2NTA1LjQ2MDI0MTgyNjgzLDI3MzQ3LjY1OTI2NzAxMjI4LDI4NzM4LjMxNTM2NTA0MjcxLDQwNjg5My45MDA5NzEzMTM1LDE0MDIxLjQ5OTk3NzMxNTQ2NSw0ODA4Ny4zODU0MTc1NTkwNDYsNDA4MjEuMTMyNzQyMjIxNzksMzY5NDEwLjczMjMxNTQ0NTIsNjUxMTkuMTExNDUyOTM5NjUsMzM1OTU1LjAyNjY3Njc5NjY3LDgzMTM5OS45NzkzMDg2OTk0LDM4NDEzNi4zNjIwNTAyOTIzLDczMzY0LjM5NzQ3MTEzNDQyLDE1MjUwMC4wMDE1NjI3MjYxNiw0MzQ2NDUuNjgzOTM3MDg3NTQsNTE5MjUuNTQ2MjQxNDcxNTIsNjczNDQuMTEwMDA0NzM1MzQsMTM2NjcuNzQ0NTQ2NzM4NjkzLDIzMjI2OC4zMDY4NDk1MTk4NCwxMTUwMjEzLjkwNjA1OTM5NTUsMTg4NjM5LjIyNjUzNzgzMTIsMzE0NzEyLjYyNTU1MTc3NjQ0LDE0NDI3LjA4MTQ0NTQ1MTc0MiwzMTQzNzkuMTQ1NTE1MjY1OTMsMTE0MzQ5LjI4MzE1MjY0NDkzLDc4NzUuNzMyNjIxOTIzNTQyLDEwMTQxLjc4OTAxNjk5OTY2NAorMTUsVHVlIDggRmViIDExLDE4MjkzNS41MTY5NzIzNDk3Miw3MjU1MzQuMjY0MjIzMzY1Miw0NzcyMDkuNTg1OTI5Nzg4NywxNTExODc0LjY1OTAwNzEwMjMsMS4wNzUyNzcwMzE5NTQ2MTU0RTcsMTMxMTc3Ni40MTM4MDYxNDM3LDY5Mzk3Mi4wNjU1NjQyMDU0LDE5Njg3My4yOTkzOTQyNjc4MSw0NjU3LjU2MjU0ODUyMDI1Miw0NjE1OTM3LjE2OTk0MDk5MywyNDYyNDcyLjU5NDExODg0MjQsMzg4Mzk1LjA1NDc0NDI4NjgsNDU2Mjk2LjY4ODY1OTIyNjY0LDMwMTQwMy4wNzczMTA1OTE0LDM1NTA2NTAuNzYxMDc3NDAxNywxMTMzNzc4LjYzNzQ2MTQzOTIsMjgxNzc3LjA4NjY5NDg3OTksNjUzNDM5LjExMzMxNzg2MzksOTA3NDM0LjY1NjQ3NzI5MzMsMTYyODEzOC4wNTI1NTA0MjQsMTMxODgwMS4zMDY2NzEzOCwyNTA0MjkuOTM0ODE0NTc1NDUsMjQ2NTk5MC4zOTQyNTA0MjksMTM4ODk3OC43MjI5NzMwODA4LDE0NDUyMzguNjU0NzE5MTE2NCwzOTQ4NTIuOTIwNjk5ODQ2MDYsMjEwNDE0LjA1OTE1MDM3OTI3LDIxMzA1ODAuNzc3OTQzNDA4LDEzMTY2NC4zMTcxMjM0NzY1NiwzODM1MTAuMjQyNjgyMjk0NywyOTE0MjIuODY4NzQ0OTg1OCwyMTQ5MjM1LjQwMjM1NTg0Nyw0MzkyNzkuNDE2NjMzNzY0Nyw2NzA1MDUuNTQ4MjQ5MjI4NSw0ODQ0NDUzLjUyODg0MjI5MywyNjk2NjM0Ljc0MTc4NzYzMTUsNzAwMzMxLjA1NDc3NjU5OTcsODc3MzYzLjU4MzIxMzE2NjMsMjk1NTkxNi4yMDU1NDIwODEsMjc2MDk3LjYwMzE0NjgxODc2LDczOTAyOC4xNjcwMzg1NjA4LDE0MzYzNC4zMTc0MzA1NjA3NCwxNDI1MzY3LjgxOTA1MTc0ODEsNTYzNTk3NC45NjQ2ODYyOTIsNjYxNTM2LjQwOTA2ODgzMjIsMTgxMzk4Ni42MjIwMTk0MzUzLDEyODY1Ny4yMzM5NTA3NDUwNCwxNTgwNDc1LjQwOTg0MzIxMywxMDg5NzMxLjc1MzcyNTA2MywxNDcwNTcuNDAzNTA4NTM1ODgsOTg4ODMuMzcwNTMxMTA0CisxNixXZWQgOSBGZWIgMTEsMjI5ODY2LjY4ODg0MTg0NDMzLDE0NzQ2NzAuOTEzMDc2Nzk3LDkwMDYzOS4zMTYyODgxMTM1LDE4ODM2MDMuMDczMzgzMzA0LDg2MTI4MjMuNjYyNzE3NTMsMTU4NTU3MS43NjMwMDg1MjQ3LDExNzQ2MjUuMDcyMzcxNzgwMiwyMTE3NjQuMzg4MzcxODU5NzQsODYyNTMuODg5MzA1MzY3MTYsNTg1MTc1OC41NzY2NjA0NzgsMzAxMzExMS4xMjgyNjM5MTE3LDQ0ODQ5NC4yNzA1NDY4MDY0NSw5NjI3MTYuODQwMzg1NDU1NCw0NTcxMzguNTk4MzQ1NTkzNTUsNDU0MDY0OS4xMDkyMTc4NDcsMjA2NDMxOC4xNDE4ODM0NDQsODI0Mzc5LjE2MjI5MzI2OTUsMTMzODEyOC45MDM1MDk0OTUsMTU0MDQyOC4zMDYwNzk2MSwyMjgxMjg4LjEwODc4NzE3NjcsMTg5MzQwNS43OTk1NTk3Mzg1LDQzNjg2MS40NTg2NTUwMTY4NSwzNTUwNjU4LjI3NzE3MDA1ODMsMTc5NTMzNS43MTc4OTYzOTUxLDIwMTI4OTUuNzUzMjMzNDA5Myw5MTY5OTEuNzU1MzE2ODAyOCwzMTg4MDYuNTQwOTcxMzA0NywyOTA3Njk3LjMxMTUyOTQzOCwyMjE3NDUuMDk1ODA3Mzc3OTIsNjAwNDAwLjY0NDQzNDgwMTUsNDM3NTUwLjExOTAwNzg1MDIsMzAyMTMwNC43MzY5MTg1MzE0LDY0Njc4Ni44OTU0OTE1NDY4LDc0MDU1MC4wOTUzMzcxNDkxLDY4MTMxNjUuNTExMjY1Njk1LDQwMjQ5MTkuNTMzMDU2NDYzNiwxMTg5MzE4LjM3OTA0MjM5NTIsMTIyOTMzOC4wMzY2NTA3OTUsNDM2NDEzMy4yOTUyNDg1MDc1LDM3ODM3NS4wNzI5NzA5MzY5LDEzNTkxMzYuMjY1MjQ1Njc0NCwyNTcxOTMuMzY4MDQ0NDE3NzMsMjAzNjAxMS4xODExMTk4MzYsNzU1ODI4NC43MTI0OTM3NDUsODIwNDEyLjkyMDgwMDA3ODEsMjU0MzA4Ni43NTA5MTYyMDM1LDIxMTM2NS42Mzc1MDU5Nzg0NiwyMTMzNzE2Ljc4MTQyOTQ2OCwxODQ5MDE1LjgzNTM3ODE4NjUsNTI4NzU3Ljk0NzgyOTY0NDQsMTY5NzgyLjIyMjk2NDM4OTI4CisxNyxUaHUgMTAgRmViIDExLDIzMzAzOC40OTgzNjUxMjM0NCwxNzQxMzg5LjAzOTUzNzYyNTIsMTA0MzczMC4yMjQ1ODUyNTI4LDE5MDI2NzUuNDY0NTYxOTYyLDY2NDIxNTguMTMwNTc5OTY1LDE1ODA1OTIuMDMyMjIyNTQxMywxMzIxMzQyLjg2NzY2NjcyMTMsMTk5Njc5Ljk2NjQyMzM3NTIsMjgxMjI4LjM2MTA1NDE2MDA1LDU5NTQ2NTQuNzAyMzg1Nzg3LDMwMTk5NDQuMzQzNDMxMjc0LDQzNzgxNS45ODE4NjkxMTk2LDExNDcyODMuMjgzOTg3NDIxLDQ5NzE4OC4wOTE3NzA5NTc4LDQ2MzcyNTAuMTU2MzA1MDIyLDIzNjk3MDUuNDYzNTAxODgyLDEwNTk3NjguODkyNDcxODM4NSwxNTgzMDc5LjEzNTYzNjAwNDYsMTczNDI5NC4xNTIwMTg0NSwyNDE0MDA1LjI0MDY2ODA1MzcsMjAyMTE0OC4wNzYzNzQ2MTUsNDk1NjUwLjE2NzA4OTAyNjksMzc5NDA2Ni45NzY5MTQxMzYsMTg0MTU4My42OTU4ODEyNTQzLDIxMjUzMTguOTY0ODM1MjI1NiwxMTE4MDAyLjg2NTY4NjU3NDUsMzQ2NjE5LjQwMTA5Mjc3OTc2LDMwNDY5MDAuOTE3ODM0MzMwNCwyNDkwODIuMzYyMzkwNzA5MDUsNjU5Njk4LjE0NzM4NTYyNTUsNDc0MjkzLjM0MjMyMDg0NTc1LDMyMDA4ODYuMDU1MjYwNTQ0LDY5NjQ5OC42NDE3NTM4NDMzLDcwNzU0Ny4xMTk3NzE0ODQ2LDcyMTkyOTcuNDE1ODMwMzM1LDQzNTQyOTYuNzAxMjg4OTUyNSwxMzM5MTQ1LjY2NDgyOTEwMjgsMTMwMDg1OS41NjUxNDc1NDgsNDcwMzkzMy41MjE2NTA0MjIsMzk3MTEyLjYyNzgyNzgyOTEsMTU2NDM4NC4yODMwMTEzNzc2LDI5MzkxMy4xODM0MDA2MTk2NiwyMTY5NDU3LjE4NjAzMTg5MjQsNzg2NzI4OC4yNTA3MjUyOTYsODI3MDg3LjUwMjEzMjQwMDgsMjY5MTU3Mi43ODg0MTI3ODMzLDIzNTY5Ny43NDAyNDk4NjUsMjIyNjY2My41MDE2MzMzMjg0LDIwODE0MzUuNTgzNzEzNjk1Niw3MTMwMTAuOTYyMzcxOTM4MiwxOTE3NzEuNzUzODIwMDI5NDcKKzE4LEZyaSAxMSBGZWIgMTEsMjA1NzczLjQ2ODQ5MDE1NiwxNjUzMzA5LjU1NzcxMDY1MzksOTgyOTQwLjU0OTIzODcwODMsMTY3Njg1Ni4yMjAyODkzOTM4LDQ5MDMwMzMuNjU2MTMzOTcsMTM4MzI1My41OTIyNjQ3MTUzLDEyMjc5NjEuMjI0MTYyNjg1LDE2OTY2MS4xMDU4ODg0NjM1NiwzNDQ5ODAuNTY2ODkzMzQzNjQsNTI2ODI2Ny45MTI2MjA5MjcsMjY1MDUzMi4wNjYyNDM2MywzNzg4NzAuOTg2ODA0ODM5LDEwOTM0NzAuNjE2MDg5MTgxMyw0NTQ4MjIuNjcwMzkxNDQ2MTUsNDExMDQ5MS44ODQzNjk0NzQsMjIyMjM5Mi4zMTA4NTQ4MzY0LDEwNDA5OTQuMDQ4Njc4NTAyMiwxNTA0MTg5LjI3NTA3OTAwNTIsMTYxMjM0Ni4zMDY5MjUwMywyMTc4ODk4LjAxOTA4NzA3MjUsMTgzMjIxNi40ODUzNzk4MjksNDYyNDExLjkyMjIyMDQxOTA0LDM0NDExMjguMzQ1NzgwNzY3NSwxNjM2MTE5Ljc0OTI1NDQyNjIsMTkxNjIyMy40NTI4NDE1Nzc0LDEwNzU2NDguOTg2MzQ0ODY2MiwzMTcwMzIuNDQ2MjkxMTY3MSwyNzM2NjkwLjYyNzg2MTQ3ODQsMjMxMzI2LjYwNjY2MzkxNDIyLDYwNjQyMS4xODAwMzA1Mzg0LDQzMzE4MS44MTQ5NjQ3Njk2NCwyODkwODU2Ljg2Mjk2ODg2NjIsNjM0MTAyLjk5NzIyOTk5NTksNjA1Mjk3Ljc0NTA1ODg4MSw2NTIwNTgwLjc1NzAyNDM1OCwzOTczMDgwLjAxMTkzNjA1MywxMjQ1MDQ2LjE1MzE2MDY3MTcsMTE3NDE2Ni4zMjMzMzQxMDE2LDQyODQ0NjguOTE0MjU2MzYxLDM1Njk2NC41NzQzOTMxMTE0NiwxNDY4ODcxLjg2OTA5MzA0NzUsMjc1MDkwLjA4MzE0NzI2MzMsMTk2NDkxNC40MDI4MzQ5ODcsNzA0MjM1MS42MjU4MjU1MzUsNzI4MTY1LjQzNzgyNjEwNSwyNDI5Njc0LjU1ODE5MzE5ODQsMjE4MTYzLjM4OTYyNTc5MjE2LDE5OTU3OTAuMTczNjU4MzA4LDE5MzQ5NTguNjQ0MzU4OTYyOCw3MTI3MDguNzc0MjIwNzA4MiwxNzg1NTAuNzgzOTU2OTQwNAorMTksU2F0IDEyIEZlYiAxMSwxNjMwMTMuNzIwMDc2MzczNDMsMTM1NjgyMC40NTcyMzA1NDU4LDgwMzYyMC43MDQ2NDAwNjY1LDEzMjcxNDAuNDQ5OTQzMTgzMiwzNTA4Njc5LjI4NjU4NzIyMDYsMTA5MDk3My43Nzk0NjM5MzMsOTk3NjMwLjY5OTcwNTYxMywxMzIwODQuOTc5MzM1MjUwNTcsMzEyNzMxLjUzMDMxNzI2NjY1LDQxNzc1OTYuOTM3OTI1NjkxLDIwOTM0NTAuMTYwMzAzMjcwNCwyOTcyMDUuNzc1NjQwMDY3Nyw4OTg5ODQuODY2MzY0Mjk3NSwzNjY2OTguOTgzODQ2MTI0MTUsMzI2MjU5NC43MTc0MzE1OTI4LDE4MTMzODQuNjQxNDEwNzI0LDg2NzU3Ni4xMDI1MjIyNjI4LDEyMzQ4OTIuNjEwNTUyNDEwMSwxMzEwMTU2LjYzNzExMTYxMjgsMTc0NTE0OC4yNjg3ODEwNTIyLDE0NzA2MzIuMDQxMTQyNTMxNywzNzYzNzMuNzA5MjE3MzQ0MDYsMjc2MjcxMS40MTMyMDgyNTMsMTMwMDEwOC40Mjc5MTIxMiwxNTMzOTI3LjE0NTA0NTIyMTMsODg4MTYwLjY4NjQyNDI1MjgsMjU1NTg1LjgzNDYyOTA3Mjk4LDIxODY1NTUuNTk0NjkwOTI5NiwxODc4NzYuODkxMDQ2NTA4ODYsNDkwMDg0LjAzNDcwNDk0Mzc3LDM0ODk3Ni4xMTUyNTAyMDkyMywyMzE2MDYwLjgwOTMzODM0OSw1MTAwNDEuMzEzMjQ2NzIzOCw0NzI0MzMuMDcyMDkyOTc1MjYsNTIyNDI4Ni43MzQ0MjAwNjMsMzE5OTI2MS4wMjUxMTA1ODUsMTAxMTcyMS4zNDQyNjI0ODQ5LDk0MDQyNy40NTYyMTE3MTkyLDM0NDY5ODMuMTIyMzEwNzk2OCwyODUzMTkuNDY4ODc0MDgzOCwxMTk5MjEyLjI2MjQxMTgzMjMsMjI0MjQ5LjY4MjI3MTAxNzE0LDE1NzY0NDguNjEwOTQwMzQ4OCw1NjE3MTU3LjYxMjU0ODUzOSw1NzYwMDQuODA5OTY0OTIwOSwxOTQ2MDk5LjQzOTg5NTY2MTUsMTc2OTAwLjY3NzgxNTg0NjcyLDE1OTI5MzEuOTA2NjY5NjAyLDE1NzIyNTcuNjU1MDYzNjAzLDU5ODUxMi42NTc2NTkyNzM2LDE0NTE4OC45Njg2NTI4MTg0CisyMCxTdW4gMTMgRmViIDExLDEyMTUxNi4yNjE3NTU0NDQ4MSwxMDMyODMzLjIwMjYyNzYxNSw2MTAzODAuNDE2Mjc5NDkzNyw5ODg3NDMuOTMwNTYyMTkyNSwyNDU0NjkxLjk1Mzc0NDA5LDgxMTE1OC44MjAwMDY2Njk1LDc1NDkzNS4yMzA3ODc1MTcsOTc2MDUuNDc5MTQ2Nzk1MjksMjUxMDgzLjAzNjYzNjQ2NTUyLDMxMTU5MjUuODA0NjMxNDIxMywxNTU3NzkyLjU4ODE1MjM1MDQsMjIwMzE5LjYzMTE5ODk0Nyw2ODUwMzIuMDY2NDk5NTkxMiwyNzYyMzUuNDc4MTM1MjI5OCwyNDM0ODIxLjA0OTk0NDA5MDcsMTM3NTc0Ny45NzEzMTEzMDI0LDY2NjI3MC44MTI4OTU4ODczLDk0MDIxOS4wNDgwODU3MzU4LDk5MTUzOS45MTk3MTIzODE5LDEzMDk0MzMuNTg3NTM0MTg4MywxMTA0ODc1Ljk5ODQ1MjE4MjIsMjg1MTI0LjE2OTIzOTI5MjQsMjA3NTkxNC4wNDgwMzY2NDQyLDk3MDkwNy40Mjg2NjY1MDYxLDExNTA1NzIuMjYwODk3MTUyOCw2Nzg0NzIuNTMyMzgyOTMxMSwxOTI1MjQuNDYzNDg0MjIyNzcsMTYzODIzMy44MTU5NzE4OTM3LDE0MjE0NS4xNjQ4MTM1NDMxOCwzNjk3MDMuMjM1ODE3MDIwNzYsMjYyNzYxLjE5MjE2ODUyNzYzLDE3MzgxMTIuMTQ2MzkwODA4MywzODM2NzUuODkzMTI0ODA3NzQsMzQ5MzgxLjIzNTA2MzM2MjcsMzkyMDcxNC43NDYzMzUyOSwyNDA4MjA3LjI1OTk4OTc4Niw3NjU2OTIuMDQ0NTMwMjE2NCw3MDU2MjkuMjg2ODE3MDE0LDI1OTMzMTkuODc2OTUwMzUyLDIxMzgyMC41OTk4MDM5NTQ3Nyw5MTAwOTYuNTE1MTIxNzU0LDE3MDAzNS4xNjEyNDMxMzUxNCwxMTg0MDYzLjIxMTk5NDYxMjgsNDIwNDI3NC44NTExMTA1ODcsNDI5MDAzLjg3ODQ5MzY5NDksMTQ2MDI1Ni4xOTc3MjIzNTUsMTMzNzEzLjEwMzcyOTMyNiwxMTkyNzI4LjA3OTcxNjg1MzYsMTE4OTg3OS44MzQyOTEwMTc2LDQ2MTYwNi40MDM5MDc0NjQ3NiwxMDk5MjYuMzM5NTMwNTMzMzcKKzIxLE1vbiAxNCBGZWIgMTEsODcxMjYuMTUwNDkzNjUyOTUsNzUwODUzLjE5NTQyODA0MTUsNDQzMDkyLjk2MTkyNzg1MjYsNzA4NjY4LjMxNDc5MTYzMDUsMTY4ODIxMy43OTcyNjE2MTI1LDU4MDY1Ny43MjYzNjM1MDgsNTQ2Njg3Ljk3ODM2MTU5MzMsNjk2OTMuODk5OTU3NTg2MiwxODg3MTUuMjMwMzkyNDk4OTUsMjIzNDkxOS4yMTIxMTA2MjkzLDExMTU2ODcuMDU3OTg5OTgzNiwxNTc0NDQuNTQxNjEyNDQwMDIsNDk4MzQ2LjUxMjg0NTExMjcsMTk5NDM0LjE3NzQ3MzMxOTIzLDE3NDcwMjMuOTkxMzgwMjgzNiw5OTc5MzYuMjk1NDAwMTM0LDQ4NzE2MS4yOTA4MDMyMjE2NCw2ODM2MTkuMzA2NTI3OTIwMiw3MTgwNzcuNDA3Nzc2MjE3OSw5NDI4ODcuMzY2MTU0NDQxMyw3OTYyNzEuNDc1MDI2MzAzNywyMDY2MjIuOTM4MjAyMDgyNywxNDk2MjM0Ljk1NTU2OTg2Nyw2OTY5NDguNjIxMDM3NzgyOSw4MjgzMTUuODAzMzQxNTU2MSw0OTQzNzkuMzc5MTczODY1MTMsMTM4OTkyLjgwODI0ODIzNjg2LDExNzg1MDIuNTE0NDcyMzEzLDEwMjkyMS45NzA0NDU3ODgxOSwyNjcxNjYuMTI3MjUxMjg1MiwxODk2NDYuNzI4NjgxMDIxOTUsMTI1MTcxMy45NDIyMTcxODk0LDI3Njc0My44ODQ1OTgyNTEyLDI0OTQzMy45NDAxMTM3NzU4NCwyODIzNTc1LjgyNjk2NjkxMjUsMTczNzc4OS41OTIyMTA4MzY1LDU1NDUyMi43MDMyMTc3NDM5LDUwODEwNC40OTY5MTgyMDgzLDE4NzA3MTYuOTUwMzI1Nzc0LDE1Mzg0MS4wNTA4NDE1OTY5Nyw2NjAzMDYuMzI5MDA1MzU2MSwxMjMyOTQuMjE3MDc0NDEzMzYsODUzMTkxLjE4Nzg5MDQ3OTYsMzAyMjQxNi42NDkyODI3OSwzMDc0MjMuNDQzMDQ2ODU2MiwxMDUxNTExLjMzMzYyNTg2MzMsOTY3NTUuMzU2NzA5MzgyODksODU3NjYzLjEzNDg4ODE1NTQsODYxNzA2LjAxOTk3NTg0ODEsMzM4NDQzLjU2NDU2NTE5NjEsNzk2MzEuMTM2NDM5NjI1MzkKKzIyLFR1ZSAxNSBGZWIgMTEsNjA3OTguNjM5OTczMzc2OTUsNTI5MTQ3LjMwNzEyMTIwMTksMzExOTM3LjI0NTA3NzczMzk0LDQ5NDQwNS44MTUzNzUzMzA4NiwxMTQ1NTA4LjY5MDY1ODMwOTUsNDA0NzY1LjIxMjMyMzE0OTksMzg0MTk0LjI0NTg4NjA2OSw0ODU1NS4yMDMxOTI3NDY1OSwxMzYwNjcuNzM5Mzk5MDI2NywxNTU5OTcyLjAxOTM1Njg1NDMsNzc3OTc2LjEzMDEzMTE3MDcsMTA5NjQzLjQ1MTg0NDcxMzEsMzUxMzY4LjczNDY5MDQwNzIsMTM5ODUyLjg3Njg3NjY2MTUsMTIxOTcyNS4xMTU5NTA3MDE4LDcwMjE2NS4zMTg0NjYxNDc2LDM0NDcxMy43NjAyMTgyNjcyLDQ4MTgxMy4zNzI3Njk5NTU1NSw1MDQ2NjcuMDY4NDE3NzQyMDMsNjU5OTUxLjcyOTk3NjU4MjEsNTU3NjcyLjI0OTQwMzIzNDMsMTQ1MjgzLjEyNTMzMjYyNTU1LDEwNDc5NjguNzQxMzgyNDQxOCw0ODY3MzkuMjQwMjgwNDYxOCw1Nzk2NzAuMjI1NzM2OTg2MSwzNDg5NzQuMzk3ODgyMzQ1LDk3NDY2LjI1OTU0MTIzOTM2LDgyNDI5NC40MzA2MjQ5NjM4LDcyMzIzLjczNjk3MTExNDg4LDE4NzQ3Ni4xNjQzNTU0NDg5NywxMzI5NTkuNTYyMzU2MzE3Niw4NzYxODEuMDIwODUzOTU3NiwxOTM5MzUuODYxNjMzMzQ5MSwxNzM2NzEuMjMyMTg4MDkyMDIsMTk3NjQ4My4yODk3NzM5Mzc4LDEyMTgxODUuNTI5MzMzMDE1LDM4OTcyMi45NjU0MjY4MDEsMzU1NjM1Ljc5NDI2MzI5OTgsMTMxMTAzOS40NjE4MjE0NTc0LDEwNzYxNC45MjExODQzNjU0Miw0NjQ2NzQuODk2MTk1MTM1Niw4NjcyOS4xMTk4NTM1NTYzMyw1OTc0NjEuMjI3NTU0Njg5OSwyMTEzMDAwLjE4NzY1MTY2NDUsMjE0NDQ3Ljc5NjcwNzc3OTc1LDczNTk5MC44Njg3NjU4MTY2LDY3OTU5LjU4MjU4Njg3OTQyLDU5OTcxMC4wMTg1NTM2MTAxLDYwNTYwNC42NzkyNDc1MjEsMjM5OTQxLjk4NDc2MjgyNjQsNTU5NzYuMDk3OTk1Mzk4MTY2CisyMyxXZWQgMTYgRmViIDExLDQxNTg5Ljc2NjE3Njg5MDUsMzY0NjM2LjYzMjA0Nzc4MTYsMjE0Nzg5LjUxNjYzOTMwOTc2LDMzODE0NS41MDEwODYxMTkxLDc2ODg2OC40MDcxMjc2MTM4LDI3NjY4NS40NTI2NTMyNjM0NiwyNjQxOTMuODk4Nzc2MjY3NjYsMzMyMTMuNzE1MjI1MjAxMTE1LDk1MzQzLjQyMDk1MDA1NDU0LDEwNjcyOTkuNzA5MjIwNzU1LDUzMTkxMi42MDkxNTQwOSw3NDkwOS45OTcwNjc5Nzc5NCwyNDIyMTYuOTg5MjEyNjY1MDcsOTYwMTMuODYzMDA0MDY4NTUsODM0NjU3LjUxNzIwNjUyOTIsNDgzMjg5LjcxNjk2ODAyNjIsMjM4MjY1LjMzNTI0MzkwNjk0LDMzMjA0My4zODg5MjM1MDYxLDM0NzA1MS4zODYxNDYxODg4Myw0NTI0MzcuNjI5OTk2NTUxMSwzODI0OTMuOTI4MDM2OTU5MjYsOTk5NDQuMTAwMTUxMzA0NjUsNzE4ODE0LjU1MzE1ODg5NywzMzMxNDguNDA3MDg4Mjk5MDUsMzk3MzUzLjY4NzU1MTcxNjQ2LDI0MDc3NC43MDAyOTMxNzIzMyw2NjkxMi44MzE3NTAwMjEyNCw1NjQ4MTMuMzUwODA1MTMzNyw0OTczMC41OTYzOTYzNTU2NiwxMjg3NzQuNDI2NjUyMTY3NzgsOTEyNjUuODk0NDM2MTQyNTIsNjAwNzEzLjgwMzI3NzExMzcsMTMzMDc2LjMyNDQyMjA5ODQ2LDExODY5MC43MTUzMjczNjIzMywxMzU1MDk3LjcxNDI1NDY1NTYsODM2MTAwLjg2MTgxNDk5NzksMjY4MDA3LjU2NTA5Mjg3NDEsMjQzODEwLjMwOTk3MDEwMjUzLDg5OTY2MS42NTg4ODMwODY5LDczNzQ0LjczOTIzMTA0NTk3LDMxOTg2NS45NjUzMDc0NTI3LDU5NjgyLjQ4ODg1Njc1OTEwNCw0MDk3NDUuNjI2ODM3OTczNSwxNDQ3MzM1LjMzNTc5OTcxLDE0NjY1Ny4xODYwNzU3MDg4LDUwNDU3Mi40NjE4NzQxMDY4LDQ2NzEzLjc0NDg2NzM3Njk5LDQxMDgzNy4wMDI3NzM4NTMsNDE2NDYxLjkzNzY5MDU4MTU0LDE2NjA4My42MzAyMzA2NzY1NiwzODQ5OS42MTI3ODM3MzQzOAorMjQsVGh1IDE3IEZlYiAxMSwyODAxNy45NjExMTE5NTU4MTgsMjQ3MDUwLjgxMTE5ODM5MDQ0LDE0NTQzNi43NTA3MDQ4ODU5NiwyMjc3NzMuMDE3NzI3NjEyMDIsNTExNDQ3LjU1OTc1NDU1MDA1LDE4NjMwNi4xMTAyMjUxNTI0NiwxNzg3MDMuNDI4NDQ2MDIxNTcsMjIzOTYuNDk1OTcxMTc2OTc3LDY1NDI3LjQ4NzcyODU5ODA5LDcxOTEwNC4zMTM2MzcwOTE0LDM1ODIxMS4yNzM2NjU0NjAyLDUwNDI5LjQ0Mjk4MjAzODQ3LDE2NDE1NC45OTc0NDIxOTc4LDY0ODYxLjM5OTI2NTUyMzcxLDU2MjQzMS44NDMwNjAxNDE0LDMyNzEzNi41OTk4NzUxNTY3NywxNjE4MTMuNDg0OTU1MTM4OTMsMjI0OTgxLjEzNzM4MjQxMTE3LDIzNDc1Ni4yNTE4OTM4ODE5LDMwNTMwMS45MDczMTk4NzAyNSwyNTgxOTYuNDc4ODc2NTk0NzIsNjc2MjQuMDIwNTk2MjQ4MjQsNDg1MjQ0LjQ4MzQ1NTYzMTksMjI0NTI3LjU1OTI2MjM0NzE3LDI2ODEwNy41MjQzNDg0NTg4LDE2MzI4Ny45MDA3ODU4MzU5Myw0NTIwMS44MjI3NjM5OTM3NywzODA5ODAuMTk2NDU5NjMxMywzMzYzNi41MDUyMDEyMDM4OCw4NzAyNy4zMjYxODg0MDQ4Nyw2MTY0NS43NDc0MjgzMDA2MTYsNDA1Mzc3LjQzMjQ5OTE4ODQ2LDg5ODYyLjk2NTk5NzgxMjM4LDc5OTUwLjcxNzMwMzA4MjkzLDkxNDQ2MS41MzU5NzI4Nyw1NjQ3MDEuNTc3NDU5ODMzNCwxODEyODkuMzEwMTYyNzc0MDgsMTY0NTIxLjU5MzQ2MTk3NzI2LDYwNzU0MC43ODQzNzQ0NTUyLDQ5NzQ1Ljc3ODUyOTE1NjcyLDIxNjUzNS42NDAxNDc5OTQyLDQwMzkyLjUwNTEwODQ5MjcyNSwyNzY1NzEuOTc2NTE4MDcyMyw5NzU5OTguNTAxNTc2NjEzNCw5ODc4MS40MzQ1NDM2NjkxNCwzNDA0ODQuOTI5ODY3MDc3NTYsMzE1ODcuNDY4NDAxMDMxOTU0LDI3NzA3My4xNTIwMDI2MTk0LDI4MTcwNi4yOTgyOTE3MzY5LDExMjkxNi45NTQ2MjMxNjMyNCwyNjA0NS4zODYxODUzNDQ0OTgKKzI1LEZyaSAxOCBGZWIgMTEsMTg2NDguMDgxMjYyODM3MTUzLDE2NTE3OS45MTQzMjI3MjE0NSw5NzE5Mi4wNjQ3OTE4NDcwMywxNTE1ODcuNTkxMzgyOTEwNzMsMzM3NjU3LjAzMzI4NjQ5NDgsMTIzOTYxLjU3NjI4MjU1NzY1LDExOTMyMi45ODI0MDQ4NzI4NiwxNDkzMC43MTk4ODIyOTEwNTgsNDQxODkuMjE1NTcyODU5MDQsNDc4NjYyLjcyMjQ5NTkzODc3LDIzODM2MC4zNzY2MzYwMzczNCwzMzU1My42NzE0ODIzNTg3OCwxMDk3ODAuNDEyMzU1NzE2LDQzMjYzLjkyMjcyNDYwNDU5LDM3NDQxMS4zMDM1NDk1MzgsMjE4NTYxLjA2NTY3MzM5MTk3LDEwODM5NS45MzY5ODc1NTc0OSwxNTA0MzEuMDUyNjEwMTAxMTIsMTU2NzU0LjE4NzA0NDQxNDgsMjAzNDYxLjQ2NzAyMDA5NTI3LDE3MjExOC4yNDAwMDUxODUyNyw0NTE2NC44NTMzNjA2MTI1MSwzMjM0ODMuMTA4MTE1NDk1MSwxNDk0ODYuMzA1MDkwMzYxODMsMTc4NjYxLjMyOTcxMTgyNCwxMDkyNjAuMTA2Nzg2NTY3MDIsMzAxNTAuMjQzMDg0NjU5MDksMjUzODE1LjEyODE5MjEwMjI1LDIyNDU4LjY0MzI2MDA5Njk4Miw1ODA2Ny44MzY4MDkzNDc2Miw0MTExNC41OTkzMDMyNTc0MDQsMjcwMTY1LjAwNjMyNDAzNjEsNTk5MjEuMzAyODg1NTAyOTUsNTMyMzguNzY0MDQzNzUxODcsNjA5NDQ4Ljg1MjcyNDQ4MTgsMzc2NjAzLjQzOTk0NDY5NDUsMTIxMDUzLjAxMzY5NzM2NjU2LDEwOTY0MS42NTgwNzc5MTE1Myw0MDUxMjQuOTk5ODU1NzkzMSwzMzE0My4xMDk0MjY2MjM1NCwxNDQ2NzguOTI0OTQ3NzQyMTQsMjY5ODIuOTU5NzE0MDA0MTIyLDE4NDM1Ni44MDI1NjkyNjg1Niw2NTAwODcuNzE0MTQ1MTA5NCw2NTczOC4yNzc0MzUzNzcxOCwyMjY5MDkuODY2MjI0NDA4NjQsMjEwODUuOTIxMjQzMjI2NzM4LDE4NDU2Ni4zMTE3NTQxMzYxNCwxODgxMDMuNDY4MzY0NjAwMTIsNzU3MDcuNjkxNDI1MzM4NTgsMTczOTIuOTg3MDIwNDE5MDU2CisyNixTYXQgMTkgRmViIDExLDEyMjkwLjQ4MTM1Mzg5NTcxMywxMDkyNzAuNDI5NzcwMjk0NTYsNjQyNjguNTI0MjA1OTA3NzYsOTk5MDEuNzI3MDE3MTIyMDYsMjIxNDg5LjQ5MjQ4NDg0MTUyLDgxNjgzLjY4MDE0Mjk0MDgxLDc4ODQ3LjQ4NDYzMjc0MTI3LDk4NjAuNjIwNzAwMDUyMTk0LDI5NDczLjA3OTk5MTc3NjA1MiwzMTU0OTUuNjY2MjQzMzkzNiwxNTcwNzIuNjI1NjQ1MDIzNDIsMjIxMTMuMDIyNzg5NDMzNDI4LDcyNjM2LjE4Mjc2Mjc3NDkzLDI4NTYzLjcwOTM3NDExMDUzNSwyNDY3OTkuMDQyNDg4NzIzOTQsMTQ0NDkyLjg3NjcwODA5ODk4LDcxODE5LjQxODkyMzA0ODYsOTk1MTcuNTkxNDI5MzMyMTMsMTAzNTgzLjgwMTkyNTI5NDMyLDEzNDIzMC44NjIwMTU2NTIzLDExMzU3OS4xNDIwNjI2NjgzMSwyOTg1MC42OTc3MzgzMjE2NSwyMTM0NjkuMTYwNzA5MTA1NzIsOTg1NDUuMzA0NDY1OTMyOTUsMTE3ODYyLjQzODcxNTQzMDY1LDcyMzI0LjU2ODkxNDE3MTc2LDE5OTA1LjYxNjMwOTAwNTQxOCwxNjc0MDcuOTM2MzQ5MDUwNTIsMTQ4MzkuOTI4OTk1OTY3MzI0LDM4MzQ3LjgyOTM2NTk2Mzc3LDI3MTQyLjI3MDE2NDI0NDA4LDE3ODI0My4yNDQ1NjYyMjMwNiwzOTU1MC43NzI2OTIwMjMzOSwzNTExOC45MDg2MDczNjcyMSw0MDIwODkuODU5NjQ5MDk3NywyNDg2MDUuOTQ4OTk5MDYyNCw3OTk5Mi41NDA0MDU0MDQ0OSw3MjMzNC41NTc1NjcxOTE5NSwyNjc0MDcuNTAyMDYzMjk2NSwyMTg2MC45NzM0MDA5NjY2NTQsOTU2NTQuNTYyNTI2NDgyOTMsMTc4MzYuODI3NTc2NjgzMDc0LDEyMTY0OS4zNjU3MDMyNTYzNCw0Mjg3MDIuODcwMDcxNzcyOTUsNDMzMjIuNjY5OTk1MjU0ODQsMTQ5NzAxLjQxMjQwMDc4MDEzLDEzOTMwLjM0ODkxMDYzNTQ1MiwxMjE3MjAuODYxNzk1NDkyMTIsMTI0Mjk5LjEyMDc1MDY2NjcsNTAxOTcuNTg5NzM3MDc4NjUsMTE0OTQuMjY3MTM1MTMxOTAyCisyNyxTdW4gMjAgRmViIDExLDgwMzQuODU4NTM0NjQyNDExNSw3MTY1NS40ODM5Nzg5NzM0Nyw0MjEzMC4yODM0ODA3Mjc2Nyw2NTMwNy44MjE2ODQ0MDIsMTQ0NDgzLjEzNjk1MTk0NTgsNTMzOTQuNTQ3NzM3MDA1MDUsNTE2NTYuNjQ5ODg0OTk3NzUsNjQ2MS40NzU5NjM2NTYwMjksMTk0NTkuNTI4NjI5MTExMTYyLDIwNjI2My45ODEyMjY4ODYyMiwxMDI2NzUuNzI1NzkwMTI4NzIsMTQ0NTguMzA1MjcwNjAzMjE4LDQ3NjM5Ljc4ODQ3MzI4MjU2LDE4Njk5LjczNjc4MDkzODAyLDE2MTM2MC4wODgyMTQyNTE1Niw5NDcwMi44MTM0NTI2MDg4LDQ3MTU5LjA2NjExMjkwOTQzLDY1MjYyLjA5MTQwMTM1MjcxNCw2Nzg2My43NDcxNzU1MDI1LDg3ODIyLjYyMjM4MTg1NzA0LDc0MzI1LjM3NjE5NDA1MzMsMTk1NjAuMDIyMjY0NjAxODMsMTM5Njk1Ljg3NDUzNDUwNzcsNjQ0MzQuNTcxMTkxNjQyMDQsNzcxMDkuNTk5NTY0NDY1MjQsNDc0NTMuNTE0NzU5NzI2MTUsMTMwMzEuNDY0NTAyMTc3NTIxLDEwOTUwNi4wMjA2MTI0Mjk1NCw5NzIyLjAzMzczMzUzNjM1MSwyNTExMC43NzEwNTMzNjc5MTMsMTc3NjcuODM0NjY2NTE0MTczLDExNjYyMS40NzU5MjgzMzQ5OCwyNTg4Ni44MzkzNjQxOTY1NjcsMjI5ODUuNDUzMDQ5OTc2MzU3LDI2MzA4MS4zOTE4MjA3NzEwNCwxNjI3MzQuODU2MjE3MDQ5NjIsNTI0MDcuODY2OTk4OTI4NzQ1LDQ3MzI2LjAwODExMTMyODU2LDE3NTAyNy42Nzk4Mzg4MzYyNSwxNDMwMC4zMjY5MDQwNTQ4MDQsNjI2OTYuNzIzNDcxMjg1NjksMTE2ODkuNDg0ODMxNjY4NDkxLDc5NjAzLjI1NjgyNDA4MDQxLDI4MDM4Ny4xMDM2ODUyNjI3MywyODMyMC40MDY0NTA2MTg1Miw5Nzk0NC45MDIwMTA5MTc2OSw5MTI0LjczNzg1OTE5MzU0OSw3OTYxNC4wMDY3NzUxNjc5Nyw4MTQzNS4zMjI0ODg2MzQ0NSwzMjk4MS40MjIxNDUyOTA5Nyw3NTMxLjA2NjI2NjQwNDc1OAorMjgsTW9uIDIxIEZlYiAxMSw1MjE3LjAwMzA1NjE1MDQxOSw0NjY0Ni42NjIwMzg5NDc5MzYsMjc0MTcuOTg1NzYxNjg4MjUsNDI0MDMuMDU4MjY3ODk1MjIsOTM3OTMuMzYwOTM2MTc2MzUsMzQ2NjcuNDAzMDc1MzMxMzEsMzM2MDAuNDQzODk4NzA2MTE1LDQyMDYuMDUzNjYwODA0MjU1LDEyNzQxLjA5NTY2NzU2NTA0NSwxMzM5MzAuODE3NDIxODQ3MzQsNjY2NjMuNTQ3MjI0MzA2NjgsOTM5MC40MDA4ODAyNDc5OTUsMzEwMTcuMTA2OTEyMDMyNDA2LDEyMTU1LjcyNDA2OTg3NTU4NSwxMDQ3NzcuOTEzNTQzOTM4OCw2MTYyMS45MzcwNTQwMjM4NywzMDczNC44NjY2MDk4NTI1LDQyNDg1Ljg2NzMzMjMyMjE3LDQ0MTQzLjEzNDUwNzQwNTIxNSw1NzA1OS4wNDI0MzU4NDE5ODQsNDgyOTcuNzI2NDQ5NzIxNzU1LDEyNzI0Ljg5MjQ3NTQ3MTU5Miw5MDc3OC4yMDAzMjE3ODg5OSw0MTg0Mi4zMDAwMTk4MzI2NCw1MDA5Ni42NzA3OTcwMzU5NCwzMDkwNS45NzE3OTgzMTMwNTQsODQ3MS4wMjA2NzM1MTY4MzgsNzExMzQuMjk2NjU1MDU3MjMsNjMyMy42MDMwNzUwNjI2NjIsMTYzMjYuMzgwOTMzNjI4MDU3LDExNTQ5LjIwMDc4ODU4NzY4OCw3NTc3MS41NjMxMDY4NTAxNywxNjgyNC40NzI1NTc2MTc3OCwxNDk0NC42MzU2Mzc4MzE2MjUsMTcwOTMwLjMzOTc4ODI1NzMyLDEwNTc3NC42Mjg0NzU3OTE0NSwzNDA4OS42NjExODI0ODc5OCwzMDc0OC4wNzc3NzQzMTU5MSwxMTM3NTYuNjg2NjQ4Mzk5MzQsOTI4OS42NDQxNTUwNjg4MSw0MDc5Ny44MTU2OTI3MzQwMyw3NjA1LjYxNjg3MTc4NTMzMiw1MTcyNS41OTc3Nzc4MDgyOTYsMTgyMTE2LjUyMDUxOTUyNzMsMTgzODcuNjgwNDkxMDQzMzY0LDYzNjM1LjgwMjk0OTQzNDkzLDU5MzQuMzA5MDQxODMzNDk3LDUxNzEyLjk3NDk3NTc5MjE4LDUyOTcwLjg2ODc0NzQ4MDc3LDIxNTA2LjAyMzA5Mjg4MTc2Miw0ODk4Ljk5NTAyNTYzMDQ5MQorMjksVHVlIDIyIEZlYiAxMSwzMzY3LjcxMTE1NTkzMDkwNTUsMzAxNzguNDkxNjM3MzY2Njc1LDE3NzMzLjY3NjgzNDA1OTkyNiwyNzM3MS45MDQzMjM2OTI0Miw2MDYyNy40NzAxNTA5MTY2LDIyMzc4Ljk0ODYxNzQzMjI2NiwyMTcyMi42ODc1NDMzOTkyOSwyNzIyLjM0NjUzOTkzMjk3LDgyODMuODY2NTgzMDYyNzUsODY0NTcuNjU3ODA0NjQxNjcsNDMwMzIuNDA2MDE0MzYyMTksNjA2NC4xNzAyMTU3NzExOTIsMjAwNjkuMjQyMTk1MjIxMzEsNzg1NC4zNTcwMTU1MDIyNDYsNjc2NDAuMTEwNjgxMjE0NDQsMzk4NTAuOTI4NDQzNDUyOTI1LDE5OTAzLjk2NTQ2OTI2MzU2LDI3NDg3LjMxMDk4MTkzNjg4NCwyODUzOC45MTQxODg1MjIwNiwzNjg1MS43Njg0ODI5NDg5OSwzMTE5Ny42MzkxNjc0MTcyMTYsODIyNy43Mzc3MTk1MjMzMTcsNTg2MzguNjM0NjkwMDU4NTgsMjcwMTIuNjUzMjM4NzE4MzQzLDMyMzUzLjk3OTMyNzUxNzg2NywyMDAwMy4wNjQ1OTY3NjAxOCw1NDczLjQ3NDQwODMxMDUxNCw0NTkzNS40MjkzNDc4MDI3MjUsNDA4OC4xMTY0MDI3NjAwNzg1LDEwNTUwLjk5MzUxNTQ0NjI1NSw3NDYyLjAzODUxOTM0ODUyOCw0ODkzOC4yMzYxOTQyNjE4NiwxMDg2OS4yNDQxNjU0Mjg5NjUsOTY2MS42NzE3ODQyMzAzMjgsMTEwMzk4LjI4ODY3MzcxMjM4LDY4MzM5LjY0ODc2MTEzMzQsMjIwMzkuMjk2MjI4MDg2MDUyLDE5ODU4Ljc0Njk2Mjc2NzY2Niw3MzQ5Mi4yNTAwMTIwNjk2NSw1OTk4Ljk4NzMyNjc3Nzc4OSwyNjM4NS4wMDQ0NjkyMjU1MjUsNDkxOC4yMjM5OTEzODUwNCwzMzQxMC44NjkxMTQ1OTgwMSwxMTc1OTEuNzE4OTU0MzcyMTksMTE4NjkuNTE0OTAxOTQ1Niw0MTA5OS41MjA3OTQ3MDUyNTUsMzgzNS45OTc1MDQxMDY5ODEsMzMzOTEuOTk3OTc2NjY2MjcsMzQyNDYuMDQ2OTUxOTg2NjYsMTM5MzMuNTg2MTUyNzAxMTE1LDMxNjcuNDAzMDY1OTUzNzYwMgorMzAsV2VkIDIzIEZlYiAxMSwyMTYzLjA0NTYzMTUwOTgyMTgsMTk0MjAuNDc0NDgxNjY3NiwxMTQwOS4zMzUwMzY4NDg0ODYsMTc1ODAuNjA3MTE3MjI3OTMzLDM5MDQwLjQ4OTcyOTA3OTkxLDE0Mzc0LjUxNjQ2MjQ5Njc5MSwxMzk3MC4xOTUxMzAxODI3NDEsMTc1My4zMTYzMjk4MDExNzE0LDUzNTMuODM0NzA2NjIyODkyLDU1NTMxLjUxMjE2NTYxMzU1LDI3NjM5LjYzMzY0MzU3MTU2NCwzODk2Ljg0ODgzNzczMDA4OCwxMjkxNi4zNTQ3NDUzOTgwODEsNTA0OC44MDQyOTQyMzM1NjksNDM0NDUuODI4MjkxMTYwNzUsMjU2MzUuNzg3MzcwNzU5OTAzLDEyODE5Ljg0MDAwMzMzNzk5NywxNzY4OS4wMzQ3NzM1NTk1NzUsMTgzNTQuMDMwNDExOTU0NzEsMjM2NzkuMTA3NDI4NTI2NDYyLDIwMDQ4LjQ4OTk5MDc0NjE2LDUyOTIuMDA4OTk1NTQzODM0LDM3NjgzLjQwMDE4Nzc2OTc0NSwxNzM1MC45NTkxOTUzNDU5OSwyMDc4OC40MzQ5NzkyMDY1MjYsMTI4NzcuMDI1Nzg5NDUxNTc2LDM1MTguMzQ4MzAyODk3NTM1NiwyOTUxMi4wMzcyNDE0NDU0MTQsMjYyOS4wNzc2MDYyMjc4NjMsNjc4My4yMjQwMjAzNTAyNzMsNDc5Ni4zODUyOTYyMTI4MDgsMzE0NDUuNzgwNDg3NTAyMzMyLDY5ODUuNzY3Mjk4NzI4NjMzLDYyMTUuNTY4MzQxMzcyODM3NSw3MDkzNy43NDM4NTA4NDYxMiw0MzkyNS41MDI5NTA2NTQ3OSwxNDE3My45OTg5ODI4MjI3OTQsMTI3NjAuMjQwMjA0NzEyNDc0LDQ3MjM0LjgxMzAxNTQ0NDU3LDM4NTQuMjMyNjg3ODA4OTgyLDE2OTczLjg1OTY0NjkzNjM1NSwzMTYzLjY2NTc2MDIzMzg1LDIxNDcwLjIyNTMzNjMyODI2LDc1NTQyLjg3NjEzMDUxMjU0LDc2MjMuNjM1ODgyNTI2MTA3LDI2NDA4LjU3MzA0MTAyNjMwNiwyNDY2LjY4NTI1NTc0NjYzOCwyMTQ1Mi4yMTE4MTY1NTM0NjMsMjIwMjQuMzc2ODI4NzQwODQsODk3Ny45MzcxOTgzODI1ODQsMjAzNy4xMjEyNzkxNTc5NjM1CiszMSxUaHUgMjQgRmViIDExLDEzODMuMjI4ODg2MzM5OTE3NiwxMjQzOS43NjQ1OTg3MzAyOTcsNzMwNi43MTg5MTEwNzc4OTksMTEyNDIuNTE0MDYyMjk1MjY0LDI1MDU0LjM2NDc1NDQxMzAyLDkxOTMuMDM2MTU4NTA0NDAxLDg5NDMuNTQ4MTU1NTA1ODU2LDExMjQuMzIzNTQ5NjU3MDM3MywzNDQyLjQwMzIzMTE2MDIzNzcsMzU1MTEuNTYyNDMxMjI2ODA1LDE3Njc1LjY5Mzk2MTUzMTA0LDI0OTMuMzQ5MDMwMzAxNzY3NSw4Mjc0LjM1MzUzNjg0MjExOCwzMjMwLjc4MDcxNzA5NTcxMiwyNzc4My4yNDI1NDA1ODE5MzgsMTY0MTUuNzU3ODQwMDgzMjAzLDgyMTguMTYxMDg3NTYzMzAxLDExMzMwLjkxNjI5Njg1NTgyOCwxMTc1MC4xNDkxMjM5MzI5NywxNTE0Ny4yNTE4NzY5NzYyMjUsMTI4MjYuMTUyMDAzOTExODEzLDMzODguMjM3NDI2MDU4MTQxLDI0MTA4LjUwNzI2NDE1ODUwMywxMTA5Ni4wMTQwNjYzNTUwMjUsMTMyOTcuNzgwMDM4MzYxMjU4LDgyNTEuMDI3NjY1MDc3NDMsMjI1MS40MTY1NjYzNzc2OTU3LDE4ODc2LjQzMzIzMDQwMzgsMTY4My4wNzI5MzAwMjk3NDEyLDQzNDEuMjMxMDA5MjAwMTQyLDMwNjkuMTIxNDY3NTg5ODMyMywyMDExNS43ODczOTU2NTY4Myw0NDY5LjY4Njk5NzIwMTkzNCwzOTgxLjQyODE4NjkzODQ3OTUsNDUzNzguNzg1NTE5MDQ3NzA2LDI4MTA2LjQyNDgzNDIyNDM4LDkwNzQuMTI4NjQ1MDQ3ODIyLDgxNjIuNTc4NjkzMTM4MTk5LDMwMjIyLjUwMDk2OTU1Mzg0MywyNDY1LjI3ODQ1Mjc2NTU0MywxMDg2OS40NzM4NDE5ODE1MTEsMjAyNS43MzAzNDU4MzE3NDA0LDEzNzM1LjQwODYyODY3NjkyNyw0ODMxNS4zNDk3NjM4ODQxMzYsNDg3NS4yMTQ5NDU2ODE3MjgsMTY4OTMuMjk5NDY4OTEyNTYzLDE1NzguOTY3NjMxMDY4MjI1NywxMzcyMC42NDI3Njk0ODg4ODQsMTQwOTkuODYwODI3MTQ4MDUzLDU3NTcuMzE1MTY0MTkxNTU1LDEzMDQuMjA2NDA4Nzg0NzgxCiszMixGcmkgMjUgRmViIDExLDg4MS4xNDg1MjE1NjMxOTY3LDc5MzYuMDE4NDU1MjA1MzUyLDQ2NjAuNDg2NzUxMzQ4MzU2LDcxNjEuODAxOTQ3MzA4NjIxLDE2MDI5LjUwMTU3OTU1MDkxNyw1ODU2LjgzNzU2NjI4NTg1OSw1NzAyLjY3NzIwNjA5ODg1MTUsNzE4LjIxMzA4MjMxNDIxNzIsMjIwMy40OTk1MTQxOTUyOTg2LDIyNjIxLjYzOTkzNDg1MTcyMywxMTI2MC40NDI4MzE0MDIzOTksMTU4OS4yODczNjkyMDQ5NjExLDUyNzkuMTI5NzkyNzQxMjMyLDIwNTkuMjM4MjY1MDU3MDYwMywxNzY5OC42MTE5MzMzMjQ5MjMsMTA0NjkuNTE1MjQ4ODY4OTM4LDUyNDYuNTE5MzUwNzA4MDg5LDcyMjguNzUxMzIzOTQ3MjExLDc0OTIuMzIyMDIyNjkyNjAyLDk2NTEuNjAyODExNzEzMjQxLDgxNzMuMzk3MTAyOTM1OTc5LDIxNjAuNjQ5MjQ0MDQ1NTg2MywxNTM2My4xOTA4MzIxNzUwMDMsNzA2OC41MjUxNTc1MzcwODYsODQ3Mi45NTY5NDE4Mzg5MzYsNTI2NS4zMjQwNTExMjUyODksMTQzNS4wMDQ0NzI2Mjg0Mzc1LDEyMDI2LjYzNzA3MjgyMjgyNywxMDczLjE2MDc0ODY5ODM2NzYsMjc2Ny4zNDkwMzUwODYyNjc2LDE5NTYuMTIzMzQwMzU5MTgyMywxMjgxNy42Mzc5NDAyMDY3MDcsMjg0OC41NjU0NTc0MDAxMywyNTQwLjY1MDY1NDI1ODQ3ODQsMjg5MTUuMDkxMTQzMjc1LDE3OTEzLjM5MDM1OTEwNzU0Myw1Nzg2LjAwMTQwMDAwOTY5OCw1MjAxLjA3MzQzNjk2MzYwNCwxOTI2MS4yMzUwNTkwODIzNzcsMTU3MC43MTE3ODYyMzEzMTAzLDY5MzIuNDQ2MDYyNTQzMjM1LDEyOTEuODkyMTExNTk5MDMwOCw4NzUyLjY0Mjc3ODUyNzYwOCwzMDc4MS4xNDcyMjE5MTgwMDcsMzEwNS42NzU2MTUzMjkxMDAzLDEwNzY0LjE4MDUwNTQ1NjcwMSwxMDA2LjY5NzI3NzQ5NzMzNDMsODc0MS40NDMzMjAzNTc5Myw4OTkwLjU2OTgzNDEzODA1NiwzNjc2LjY0OTc0NDU3NDYyOSw4MzEuNjM5NzE4OTg0MTAxNApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTRUlSU3RhdGVzT25seV9GRF9SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vSW5jaWRlbmNlXzAuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTRUlSU3RhdGVzT25seV9GRF9SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vSW5jaWRlbmNlXzAuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM3MjIwZTUKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNFSVJTdGF0ZXNPbmx5X0ZEX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9JbmNpZGVuY2VfMC5jc3YKQEAgLTAsMCArMSwzMyBAQAoraXRlcmF0aW9uLHRpbWUsc3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vbm9kZS90cmFuc3BvcnQvcGlwZS9VU0EKKzEsVHVlIDI1IEphbiAxMSwwLjAKKzIsV2VkIDI2IEphbiAxMSwwLjAKKzMsVGh1IDI3IEphbiAxMSwwLjE0MjUzOTU2NTM1NTI1NDEKKzQsRnJpIDI4IEphbiAxMSwwLjAyODA1NjQwMzk3NDYwMjMyCis1LFNhdCAyOSBKYW4gMTEsNy43MzczNjU3NTk5MzgxMDMKKzYsU3VuIDMwIEphbiAxMSwzLjA0NDgwMTkxODM5MzI3MQorNyxNb24gMzEgSmFuIDExLDIzOC4xNjU1NjAxMTc4MzU3NQorOCxUdWUgMSBGZWIgMTEsMTQwLjI5MjcxMzcxMjgxMzYyCis5LFdlZCAyIEZlYiAxMSw2Mjc3LjU5NjA5NjMyMzYzNworMTAsVGh1IDMgRmViIDExLDQ4NzUuODEwOTQ0OTM4OTY2CisxMSxGcmkgNCBGZWIgMTEsMTUzMTQ3LjI5MTEyNDYxMworMTIsU2F0IDUgRmViIDExLDEyMDA2Mi4wNDAxOTIxMDE0NworMTMsU3VuIDYgRmViIDExLDc1MzU3MC42MTE4NTc4NTgzCisxNCxNb24gNyBGZWIgMTEsMC4wCisxNSxUdWUgOCBGZWIgMTEsNjI2Nzg4Ljc1ODEzOTE5MTIKKzE2LFdlZCA5IEZlYiAxMSwwLjAKKzE3LFRodSAxMCBGZWIgMTEsNDQ2MjI3LjYwMDkzNTcxMzUKKzE4LEZyaSAxMSBGZWIgMTEsMC4wCisxOSxTYXQgMTIgRmViIDExLDI1NTYuMjg0MjQ5OTIzOTgzNworMjAsU3VuIDEzIEZlYiAxMSwwLjAKKzIxLE1vbiAxNCBGZWIgMTEsMTQuMDEzMTQyMjEyNjk3NjU3CisyMixUdWUgMTUgRmViIDExLDAuMAorMjMsV2VkIDE2IEZlYiAxMSwwLjA2NjY0MTUyMTY4MzA3NTgzCisyNCxUaHUgMTcgRmViIDExLDAuMAorMjUsRnJpIDE4IEZlYiAxMSwzLjA2MzI1ODU2MzI4MzEzMUUtNAorMjYsU2F0IDE5IEZlYiAxMSwwLjAKKzI3LFN1biAyMCBGZWIgMTEsMS40MTE4OTE4ODQwMzExOTgzRS02CisyOCxNb24gMjEgRmViIDExLDAuMAorMjksVHVlIDIyIEZlYiAxMSw2LjI2NDM4MzM4NDM2MTg4OUUtOQorMzAsV2VkIDIzIEZlYiAxMSwwLjAKKzMxLFRodSAyNCBGZWIgMTEsMi43MDg4NjM2NDM0NzYxNTE0RS0xMQorMzIsRnJpIDI1IEZlYiAxMSwwLjAKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0VJUlN0YXRlc09ubHlfRkRfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL0luY2lkZW5jZV8xLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0VJUlN0YXRlc09ubHlfRkRfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL0luY2lkZW5jZV8xLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMGI5ZWZjCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTRUlSU3RhdGVzT25seV9GRF9SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vSW5jaWRlbmNlXzEuY3N2CkBAIC0wLDAgKzEsMzMgQEAKK2l0ZXJhdGlvbix0aW1lLFVTLUFLLFVTLUFMLFVTLUFSLFVTLUFaLFVTLUNBLFVTLUNPLFVTLUNULFVTLURDLFVTLURFLFVTLUZMLFVTLUdBLFVTLUhJLFVTLUlBLFVTLUlELFVTLUlMLFVTLUlOLFVTLUtTLFVTLUtZLFVTLUxBLFVTLU1BLFVTLU1ELFVTLU1FLFVTLU1JLFVTLU1OLFVTLU1PLFVTLU1TLFVTLU1ULFVTLU5DLFVTLU5ELFVTLU5FLFVTLU5ILFVTLU5KLFVTLU5NLFVTLU5WLFVTLU5ZLFVTLU9ILFVTLU9LLFVTLU9SLFVTLVBBLFVTLVJJLFVTLVNDLFVTLVNELFVTLVROLFVTLVRYLFVTLVVULFVTLVZBLFVTLVZULFVTLVdBLFVTLVdJLFVTLVdWLFVTLVdZCisxLFR1ZSAyNSBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzIsV2VkIDI2IEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsNDQuOTk5OTk4NjcxNDU1MjUsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCiszLFRodSAyNyBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDI2Ljg1NzQyMzk2MjQyMjE0LDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorNCxGcmkgMjggSmFuIDExLDUuNDg4NzM2OTExNDUyNDA2RS00LDUuNTA4MzgyNzIwOTc0MTY5RS00LDQuMDE5ODM0ODUyNjE1MjcxRS00LDAuMDA0NzY2Mzc1NjEwODc1NjM0LDgyNi4wNDM4MjA3NTUwNDAyLDAuMDA0OTg5MTI4ODY1NDYxMDI0LDcuMTIzODcyNzQyNTU3NzUxRS00LDAuMDAxODU3NzM3OTYzOTAyMTk5NSwxLjgxMzQ1OTMzMjAxMjg1NTRFLTYsMC4wMTMxNzUwODQyOTAwNTQ3MTgsMC4wMDg2NjEyMzI4OTExMDEyMDgsMC4wMDIwMzUwMDM2MTM2NjQ1NzEsMy4zMTEwNzQ0OTcwMjUzMTdFLTQsNC4wODkzNTA3OTM2NjA0Nzk0RS00LDAuMDA5NjYzMTY5MTcyMDc0OTE4LDAuMDAxMDEyNTE0NzkzNzAzNDgyNywxLjU2NDEwODY3Mzg1OTE0NkUtNCw0LjkxNDQ3NDc4OTc0MTgxM0UtNCw5LjI1NzcwOTg4OTg4MzQ4NEUtNCwwLjAwMjkwNDg1OTYwNjYzMzIwNzMsMC4wMDIxNDYwNzc5OTc4MDcsMi40MTc5NDU3NzYwMDcwNzQzRS00LDAuMDAzOTcxMzI0ODE1NDYyMDkxLDAuMDAzNTcyNTE0ODg0MDA3ODU2LDAuMDAyNjQwODUwMTUyMjE2MTU4MiwyLjU5NDc1ODA2MDg4MzI2N0UtNCwyLjg2Mzc1NDUyODQ1MDI0N0UtNCwwLjAwNDIzNjg0NTQ4NTk3NjY5NSwxLjM2NjEzOTM2MzQ0MzI5NjZFLTQsNC43NTEyNjM0NDk4NDQ2MUUtNCw0LjA3ODc3MjI4MDg4OTIwNzVFLTQsMC4wMDM3ODU3NDc0NzcxNTAxOCw2LjU0ODA5OTQwNDYyNDM3M0UtNCwwLjAwNTAxNTQyNDAyNTYyNDA3MiwwLjAwODUxODQyMjk2ODgyMzg0OSwwLjAwMzg0NTI4OTM5MTg5MzUxNCw3LjEzODk4NDkwMzY1ODE1MUUtNCwwLjAwMTU2NTMxNzY0NjczMzI2MjMsMC4wMDQzNjY1MDc4MjgyMzA2NzgsNS4zOTM1MzAyOTY1NjY4NDZFLTQsNi40ODkxNjE5NzYzNjMwMUUtNCwxLjMyMDgwMjg4MDE0NDI5NTVFLTQsMC4wMDIzNjMwODg2MzEyMDIwNjEzLDAuMDEyMTEyMzk3MTIxNTgwMTM0LDAuMDAyMTQzMjA2Njg3MTcxNTk0NywwLjAwMzIyOTQ2ODgyNzA2MDMxNywxLjQxMTQ3NTg0Njc0MjgwNjRFLTQsMC4wMDMyOTU4MTEyMTQyODE1NzksMC4wMDExMTI4NTk1NDM0MDY4MTQ5LDcuMzg5ODQ2Nzc3OTQ2MDU0RS01LDkuODUzMTI5MDM3MjI2NjYzRS01Cis1LFNhdCAyOSBKYW4gMTEsNC4zNDE4MDU4MzcxMjE1MTNFLTQsNC4zODQ3NDMyNTUyNDYyOUUtNCwzLjE5OTEzNTE4MzE0NDM3MDZFLTQsMC4wMDM3Njg3MDE5OTA5MzkwOTY2LDE0NTkuODQzMTg3MjA0MDk0NiwwLjAwMzkzNzIwNjEwNjYzMDQ5Nyw1LjY2NjY3MjA5NjQ1NDQ4MUUtNCwwLjAwMTQ0MDM4NDg3NzE3MzgxMjgsMS40NDQ5OTU0Nzg3MTUyMTUyRS02LDAuMDEwNDI2NDY2MTgwMTIwMzM2LDAuMDA2ODQwOTE0NTI0OTI0NTM3LDAuMDAxNTk4OTM4MjQyOTE3MTA4LDIuNjM1ODkyNTQ1NTAwMjY0NkUtNCwzLjI0OTk3NTUwNDkwNjgxNzNFLTQsMC4wMDc2NTAxNzQxOTQ5OTgxNzQsOC4wNTY4ODk3MTgwNTk1MTJFLTQsMS4yNDU3MzAzOTQ4MTMwODE3RS00LDMuOTEyMDU4ODI4MzU0NDA0RS00LDcuMzY0MTUzMzY3MjgwMzk5RS00LDAuMDAyMzA1ODkxODkzNzA3MTYzLDAuMDAxNzA0MzEwNTA2MjM2ODg2NywxLjkyMzY2MzE5NzMwMjQ4MDhFLTQsMC4wMDMxNTM5Nzk2MTExNzIyNjIsMC4wMDI4Mjk1Mjg0Nzk4MzAzNTMsMC4wMDIwOTYwNjcxODQwMzAzMDk3LDIuMDY2MDIxMjY5MzM5MTZFLTQsMi4yNzU5MTc0MjI2MDI1NjM1RS00LDAuMDAzMzYxMjk4OTIwMjE1ODU2NiwxLjA4NjY2MTExOTU3ODg0MjRFLTQsMy43NzcyMzE3MDI2NjU5NzRFLTQsMy4yNDExODk5NDEyMDY3RS00LDAuMDAzMDA1MzM1NjEyNTY4OTc3LDUuMjAyMTQwNDIzMDU1Mzk4RS00LDAuMDAzOTEzMTU0MDY0MDE0NDQ5LDAuMDA2NzYyNDUyNTk3Mzk1OTg0LDAuMDAzMDU1NDMzMjAxMDc3MTk1LDUuNjc4ODAxNDczNTE0MTk5RS00LDAuMDAxMjQyNTU3MDMxNTkzMzc5LDAuMDAzNDY5MTAxOTMyMzc4NTEzNCw0LjI3OTM3NzcxMjM2MDE0NjVFLTQsNS4xNjM4Mjk2MDEzMzU5MjFFLTQsMS4wNTA5MjkzMDE0MDc3NjA1RS00LDAuMDAxODc2NDkwNzU5NDIzNzQxLDAuMDA5NjA0OTkzNjA1NTI5MzMyLDAuMDAxNjk0MTY1OTU1NDA1MzM2NywwLjAwMjU2MzU5NTgxOTExODQxMSwxLjEyMjU0NDQyMDQ0ODY0MzVFLTQsMC4wMDI2MTQwMTQ0MTE1Mjg2NzgsOC44NTIzNDcxMTkxNzA4NjhFLTQsNS44ODY0NzE0MzA5NTU3MzE1RS01LDcuODM4MjgyNzEwNDM5NzI3RS01Cis2LFN1biAzMCBKYW4gMTEsMC4wNTk2OTEyNjg4Mzg4MzU4MywwLjA1OTkwODczMDUxODc5MzM1LDAuMDQzNzE5MzA0NDUzMjM1NDY0LDAuNTE4MzUxOTA3ODM1MTI0MywxNjMxNy40ODA3Nzg0NzIyMjUsMC41NDI1NjYxODAxNzg4MTQ1LDAuMDc3NDc4MTEwMDE4MzA4MjYsMC4yMDE5OTMzMTQyNDYzNTk2LDEuOTcyMzI0MjQ4ODIzNjc5NkUtNCwxLjQzMjgyNjcxNzc1MjAwNDQsMC45NDE5MTQ0MDE4NTQ3MDU1LDAuMjIxMjk2MzUxMTQyMTcxNCwwLjAzNjAxMTAxNDUzNzQ3OTEsMC4wNDQ0NzQ3Mjc3MDgwMDgzMjQsMS4wNTA5MDAzNzQyNTI2NDczLDAuMTEwMTE5OTAxNTk5NjE1MTQsMC4wMTcwMTEyMTU4OTgyNzI1MjIsMC4wNTM0NDk0NDU2MDUzMjAxMSwwLjEwMDY4NTQwMTcwMzQ2NjI3LDAuMzE1OTIxMjc2MDgxNDg1MDcsMC4yMzM0MDAxNjIxMTczNjk2LDAuMDI2Mjk3MjM4MzExNzY2NjE3LDAuNDMxOTA4MDE4MjI4NzYzNDYsMC4zODg1MjQwNTQ0ODI1MzE3NCwwLjI4NzIwODI3OTI2MDAxODEzLDAuMDI4MjIwNDU5NjU3NTEyODU2LDAuMDMxMTQ1NDU0MjE3NzQ3NjQsMC40NjA3ODAyMTYxOTE1NzY2LDAuMDE0ODU3OTEwNTYzNjY3MzYsMC4wNTE2NzM2ODc2ODE2NDE3NywwLjA0NDM1OTYyNTgyNzY0MDc5NiwwLjQxMTcyMzQ5MzAwMjU3NjcsMC4wNzEyMTUxODAyNjA0Nzk2OCwwLjU0NTM2NDI3MjA3ODUsMC45MjY0MzEzNTQ0MjI4NzQzLDAuNDE4MjAyOTgzNTUwNDYwMywwLjA3NzY0MjQ4MjYwMzE2MjQyLDAuMTcwMjM3ODgyNzMxMzA2MjIsMC40NzQ4ODg1NzM3MTQ5NTU1LDAuMDU4NjU3NjYzMDg1NjAwNDM1LDAuMDcwNTc1MzgwNDYxMzM3OTIsMC4wMTQzNjQ4ODQzMTY1ODUwNjcsMC4yNTcwMDEyODEwOTg0MzMwNywxLjMxNzI4MzYzODU4MjY3NjMsMC4yMzMwNzY5NzMzMTk1OTU0NSwwLjM1MTIyNDU1NTQ5NTE4MjUsMC4wMTUzNTA5NTc5Mzk1OTQ2OTYsMC4zNTg0MzY1NzY0MjE3MzYzLDAuMTIxMDMyODU2Mjk0MDg4NjEsMC4wMDgwMzcxOTQ5ODUyODU0MjUsMC4wMTA3MTYxMTU2MjEwMjEzMjYKKzcsTW9uIDMxIEphbiAxMSwwLjA3ODQ1NDYxMDIxOTk0NDgsMC4wNzkyMzI5MTkyMTQ5ODIsMC4wNTc4MDg3NTM1MzA2MzgzNjQsMC42ODA5ODcxNTEwODY2NzgxLDQ1MjExLjE3Njc2NDcxNiwwLjcxMTQyODM2NjA1NjcyOTUsMC4xMDIzOTcxOTA2NjExOTYxMSwwLjI2MDI0NjY0MjMzOTM4MzA1LDIuNjExMTQwMDA1NDAwNzUzN0UtNCwxLjg4NDAyMjY0NTM4OTQ2NDgsMS4yMzYxMTUzNDE5Mjc3NDc1LDAuMjg4OTExOTc4ODY2NDkxOSwwLjA0NzYzMDk2NTIzNzY5NjYxLDAuMDU4NzI3MDQyOTAzOTU2MzMsMS4zODIzNTk4OTg2NjcxNTc3LDAuMTQ1NTg4ODU5MDYyODgwMjQsMC4wMjI1MTA1ODIyMzU2MTkwNDMsMC4wNzA2OTE0NTI2NDg1NjQxOCwwLjEzMzA3MDgxNTkzNDY0MzE4LDAuNDE2NjcyMTM1NzQzMjYwNTYsMC4zMDc5Njc3MDIwMDA5MjYsMC4wMzQ3NjA3NjY1NTkxODgyODQsMC41Njk5MjIwMTQzMjI2NTkyLDAuNTExMjg3MDUyNjU4Njc3OCwwLjM3ODc1NjgxNTYzODg1MDE2LDAuMDM3MzMzMzQxNDUxNTUxNjcsMC4wNDExMjU4MTUzNDYxODkxOSwwLjYwNzM4MTMwODkzMTY2NTksMC4wMTk2MzYwNDUyMjcwMzY4MywwLjA2ODI1NDY2ODAzMzI1NzYyLDAuMDU4NTY4MjUzOTc5OTI0MjYsMC41NDMwNjEwMTg0MDUyODU2LDAuMDk0MDAyNDg0MTU0NjA2MDIsMC43MDcwNDM3NTQ2ODUwMTUxLDEuMjIxOTY4MTk5OTQ4NTgsMC41NTIxMTYxMjc5NDEzNzUyLDAuMTAyNjE2Mzc5MTM0NTM2MjEsMC4yMjQ1Mjg2OTI3MjU1MjgwMywwLjYyNjg2NTU0NDQ2MDI1NDksMC4wNzczMjc3MDQ3MjUyMDIwMiwwLjA5MzMxMDk3MTY3MzgzNTY5LDAuMDE4OTkwMzk4MjY1NjI5ODgsMC4zMzkwODA0MDk5NzI4NjI1LDEuNzM1NjAzMDEwMjA1MTkwNywwLjMwNjEyNzYyNzUzNDU3NTEsMC40NjMyMzg5NzY5MTQ0NzE2LDAuMDIwMjg0NDQzMDg3NjU0ODI0LDAuNDcyMzQ3NTYzNDMyODEwMiwwLjE1OTk2MjU4ODk3NjkxODcsMC4wMTA2MzY5NzIwNjI4NzQ3LDAuMDE0MTYzODQxMzk5NTEwMDkzCis4LFR1ZSAxIEZlYiAxMSwyLjc3OTIzODEyMTY1NDIyNzUsMi43OTAyMTkxNjExNTI4MjYsMi4wMzYxODI2NDA2MTcxNzE1LDI0LjEzNDA0OTM0NzU5MjY0NCwzNDEzMDIuNTEwMTAyNzM5MSwyNS4yNTkwNzcwMTg1NDQxMywzLjYwODM3ODE3MDc0MDk0NDYsOS4zOTU4Nzc3NzA5MjM5MzMsMC4wMDkxODY0NTkxNDcwMzUzMDcsNjYuNzE0MTAzODM2Nzc2NDcsNDMuODUyNDgwNjc0NDIwMDY1LDEwLjMwMDI0Njc2NDIyNzcyOCwxLjY3NzIwMjM1Mzk5OTIzMzEsMi4wNzEyMjUzMDE5MDI2MTU0LDQ4LjkzMjA4NDA5MDkxNTA0LDUuMTI4Njg5NzU0NDY0Mjg3LDAuNzkyMzEwMTk1MTQzNzkyOSwyLjQ4OTM4MzUxMzk0OTI1OTcsNC42ODkyMTIzMDk0ODU5NjUsMTQuNzExODY3Njk1OTU4MTk4LDEwLjg2OTI0NDg2NzQ3NjE4MiwxLjIyNDc0NzcyNzc0NjIxMDQsMjAuMTEzNjMxMDM5Mjc2MDE1LDE4LjA5MDg2MTc3NzYyNzcsMTMuMzc0Njc3NzI4NDMzMDYyLDEuMzE0MzcxMzc0MTEyMjM1NiwxLjQ1MDQ2OTA1NTExMjMyMiwyMS40NTcwNzY3NzEzNDA5MzcsMC42OTE5NzQ1NzYzOTk5NjkyLDIuNDA2NTI0Njc1NjcxNTA5LDIuMDY1ODUzMDY5Mzg4NDYxLDE5LjE3MzI1ODc2MzU1NDc5LDMuMzE2NDkwOTg5OTAxNjIxLDI1LjM3NTUyMjU2ODM5NDUxLDQzLjE0MjM0MTM5MTcxNTkxLDE5LjQ3NTg4MjU4OTYyNzc4LDMuNjE2MDM2ODcxNDQyNzk1NSw3LjkyNzY2MjQwNDM2MDM0LDIyLjExNTYwMTE4ODQyNzEwMywyLjczMTUxNTAwOTI4OTIwMzUsMy4yODY5NjIwNTgzNDYwNzcsMC42NjkwMjMyOTkzMjkwNTA1LDExLjk2ODI3ODk2NDIyMzQ5OSw2MS4zNDAzNjY3MDE4MTkzNCwxMC44NTE3NDE1NTMxNzM0MTUsMTYuMzU1ODg0NTIyNTU1Mzg1LDAuNzE0OTMxNTg1NTIyOTkxOSwxNi42OTEwMzM4MjYzNzgzNyw1LjYzNjg1MTc2MTIxNzEyODUsMC4zNzQzNDEwNjc0NjQ1NjU5NywwLjQ5OTA4MjI1OTg4Mzc0NjIKKzksV2VkIDIgRmViIDExLDUuMDM3OTEwNzU4MTk2NzUsNS4wODg2ODUwODE4NTgwNzEsMy43MTI3MTA3NzAxMTIzNzA3LDQzLjcyODY1Mzc4MDcxNzM2NiwxMTkxNDUxLjAzNjE5MjM1OTksNDUuNjgxMjE0NTI2NzQxMTksNi41NzYyNzg4MjQ0OTQ2NTIsMTYuNzAzNDc5NzA2MzAxOTk0LDAuMDE2NzcwMzExMDk1MTMwNTc3LDEyMC45ODI1NDYyNzEwMDUyLDc5LjM3MzMzMDE4MjYyNTU0LDE4LjU0OTIxNzAyNDkxNTY1NiwzLjA1OTA3NjA0NTk3OTAxNiwzLjc3MTU1NjU3Mzg4NjAzMDYsODguNzY5MTE1ODk2MTA2MTQsOS4zNTAyNzA4MDgyMTk5MjcsMS40NDU3NDgwMzY4MzU3MDA1LDQuNTQwMTE2ODQ3MTg2NTM2LDguNTQ2MjQxODgzNzkzMDYsMjYuNzU4NjQ2OTM4NTM3NTEzLDE5Ljc3Nzg3MzU1NDI3NjgsMi4yMzI0NTc5NzkxNDc1NjUsMzYuNjAwNzgxODQ2NDUzNDcsMzIuODMyOTc1MDEzODgyMzIsMjQuMzIzNjU1Mjg5ODQ0MzY0LDIuMzk3NzI3MDYwNTgwMTg0LDIuNjQxMTczMjQ0MDEzODQ4LDM5LjAwNTQxNDExMDk0NDE0NSwxLjI2MTA4OTQxMDg3MjYzODcsNC4zODM0NzI5MzY0MjMwOSwzLjc2MTM0Nzg2NzQ5NTIzMjMsMzQuODc1Mzg0ODA2MjAyNSw2LjAzNjk1MzcwODcwNDUyMSw0NS4zODcxMzcwMTM1NDUyMzUsNzguNDc0ODI4NDQ3NDQzODUsMzUuNDU3NzI1NTk0NDQ3Nzk0LDYuNTkwMzU4OTc2MDg4NDY5LDE0LjQxOTIxMjQyMTA3MjMxOCw0MC4yNTgxMDM4MDA0MjgxMjQsNC45NjU5MTkzNDM0OTEwMDIsNS45OTI3OTE4MjkxMjEzOTE1LDEuMjE5NjMzNTIwOTMyOTAzNywyMS43NzU5MDQ1MDI3NDY3NTUsMTExLjQ1NzQwODY0Mzg3ODk5LDE5LjY1NzQzOTg2MTE2OTA1LDI5Ljc0OTE3MzI1MDYyMjMyNCwxLjMwMjcyNjM5MTQxMzkyMSwzMC4zMzM0NzY0MzAyOTc4NDMsMTAuMjczMzE4NTcyMjc3NjAzLDAuNjgzMTY0Nzg5OTc5MTMwNywwLjkwOTY0OTU0MzY2MjY2OTcKKzEwLFRodSAzIEZlYiAxMSw5OS4xMDYwNDM3MTAxNzQ1NSw5OS41NTA2NzE4MDg2ODY3Myw3Mi42NDY0NTQyMzc5NzkxOSw4NjAuNTczODY1OTAwOTMzNCw3MTEwOTEwLjg1ODYyNzQ2Niw5MDAuNTQzMzkyNjMxODk2MiwxMjguNzMzNDk4NzAxOTcyNSwzMzQuNDk2MDQwOTI5NzEzNywwLjMyNzc4NjkwNzYwMTY4OTMsMjM3OS4wNzI4NTUzMTAzNjQ1LDE1NjMuNTUyODM2NTUxMTI1LDM2Ny4wOTI4OTA5MTg1MjgsNTkuODQwNDIyNzYzNjU0MDksNzMuODg3OTk2NzAxMjMzNDIsMTc0NS4wMTAzNzY2NzgzMzczLDE4Mi45NzgxMDY3NjA3NjM5OCwyOC4yNjk3MTQ2MDA0MTQyODIsODguODE3NDY4MjkwODg1MDYsMTY3LjI5Mzg3NzkyODczMTk0LDUyNC43NzIxMDM0MDE1ODQ4LDM4Ny43MjAyMDIxMDIyNzM3LDQzLjY5NTA0NTc1NDA5MzA2LDcxNy40ODI0MTYyOTUwNjYzLDY0NS4xNzc5MjU3MDY4MDM5LDQ3Ny4wNjk2NjMwMTY3ODc5LDQ2Ljg5NTgxMTk4NzAxNzkzNiw1MS43NDMzNTU1OTA5NTA1LDc2NS4zMzYyNDUzNjcxMzgzLDI0LjY4NzAxNDM2NzIwNjc2NCw4NS44NTE2NjMwMzkxMTc1NCw3My42OTU2MTYxODExNzkxNiw2ODMuOTEzNTQ4MTkwNzcxNiwxMTguMzA3Mzc1MjI1NzExNjgsOTAzLjgzOTEyOTA3ODc4ODUsMTUzOC44OTYxMDEyMzA1MzUxLDY5NC43NjMwMzk1MzIxMzQsMTI5LjAwNjk0MzE1ODQ2OTE3LDI4Mi43Nzk2MDM5MTEwMTkyLDc4OC45MjAyNjUwNzU0NjgsOTcuNDI5MTYzMTQxNjQ3OSwxMTcuMjcwNTI0NDMyMzgyODksMjMuODY4ODQxMDA2NTcyMjQzLDQyNi45MjExMDY4MTEwMDM1LDIxODcuODE4NjAyMjc4NTkxLDM4Ni45NDM4NzQyODUwODczNiw1ODMuNDE0NjkyNDE0MTg4MiwyNS41MDU2ODY0Nzc3MTU3NDUsNTk1LjMyNjAxNzE3ODQ4MzUsMjAxLjEwMjEyNzU2ODUyNDU3LDEzLjM1NjY5NDk1MjM4MTQwOCwxNy44MDU1MTg5MTM1NDIzOTcKKzExLEZyaSA0IEZlYiAxMSwyMjUuMDYyMDMxNzczNjIwNjIsMjI3LjQzMjc0MTE2ODY0NDk1LDE2NS45MzI1NTgyNzgyMTE5OSwxOTUzLjQ1NzYxNTg0NzkyNzYsMi4yMjM2NzkwMDQ5MTg0Njg3RTcsMjA0MC40MDE4NDQxMzI1NzQsMjkzLjkwMzkwNDc5MjM2ODQ1LDc0NS4xNjA0MDg5NDk1MTkxLDAuNzQ5NTgzOTY5MzIwNDAzNiw1NDA0LjkwMTE2MzMzNzg5NiwzNTQ1LjUxMjc5MTQzNzU1ODUsODI4LjI2NTI2Mjk5NjMzOTUsMTM2LjcyMjY1NDg5MzEzNzEsMTY4LjU0NTc4Mzg3NjY4Nzk1LDM5NjUuODc0Mjg1ODQxMDI2NCw0MTcuODg4NTQxNDY1MzMxOCw2NC42MTg1NDU5MDMxNzUzNSwyMDIuOTE1NDEyMTY5Mzk5OSwzODEuOTQ1MDE2MTk2ODIyMDUsMTE5NS43MDYzOTE3NTAwMTEsODgzLjc5OTI0ODYxNzQwOTgsOTkuNzczMTE0MDk2Nzc2OTEsMTYzNS41NTc2MzUwNzQyODc2LDE0NjYuOTAwODQ2NDIzNTQ4NywxMDg2Ljg4OTcwNzc0NjQzNTUsMTA3LjE2NTY2OTk1MTk0Mjc5LDExOC4wMzAzNzcwNzIzMDU1NCwxNzQyLjg3OTU1MzQ5NDAwNDgsNTYuMzU5ODg0MTUzNjc2ODMsMTk1Ljg5NjAxNzI2NDc1NzYsMTY4LjA4ODE1NTk2NTM1MzMsMTU1OC40MDg3OTU1NjkzNDIxLDI2OS43NzYyMTYxNDkzMDc2MywyMDI1LjY0NjEzNDAwMzU0NiwzNTA2LjY1NDg2NDQxNjM4MTMsMTU4NC41MzY0NDc5NTM3MzE2LDI5NC41MzM1NzQ0MzA5NzY2LDY0NC4zMjA0OTM5NTQ4Mzk5LDE3OTkuMDM3NzczNjMwODAyLDIyMS44OTM4MzI4OTU5NzU0LDI2Ny44MzQ2MTk2NjQxODk4LDU0LjUwODM5NzkzMTg4MTgxLDk3My4wNzc4NDg2NDQwMjk3LDQ5ODAuMDkwNTQ5NzMwMDI2LDg3OC4xMjYwODQ2NTU4MTE1LDEzMjkuMzM4NjY3ODQ5MjU0LDU4LjIyMDAzMTgyNjY1ODg0LDEzNTUuMzY0NTc5MzIyMjA2Nyw0NTkuMTMwNzA0OTEzNDcxLDMwLjUzNDc2NDEwNjgyOTU4OCw0MC42NTM4NTczODIwMjcyMjYKKzEyLFNhdCA1IEZlYiAxMSw0MDUwLjk2MDkzNDQwNTczMTcsNDA4OC4xMjA4OTI0NDEzNDgsMjk4Mi43ODk5MDc3NzQyMjMsMzUxNjQuMzE2Mjg5MzE3NjU2LDI5NzA2MDYuNzcxNTE4MTYzLDM2NzQ0Ljk2MTUzNjQzMzIsNTI4My43NDE3MDEzMDE0NTEsMTM0NzMuMzQ0MDExMDgzNzkzLDEzLjQ3MDk0ODA2OTQ5OTgxNCw5NzI3NS40MzQwMTg5NTk2NCw2MzgzOC4wNzA3MTM3NzkxNiwxNDkzMC40MTgwMzA3NjA1ODIsMjQ1Ny41NTM3MTgxMTMzNTQsMzAzMC42NTQ2OTY1MjM0NzkzLDcxMzcwLjM1OTQ4Mzk1MDczLDc1MTIuMTQ0MTQyNzk5MTQsMTE2MS4zODg5MTc0MTkxNDU5LDM2NDcuNDA1NDExNzU3MDM2Nyw2ODY2LjUwMTM2NTgxMDc3MSwyMTUwNS42NTc0MjQ0ODg2ODMsMTU4OTQuMjkxNzc0OTE4NDYyLDE3OTMuNjM3NzczMzA3NjQ2NywyOTQxMy42NTk5NTE3MTkzMDYsMjYzOTYuMDQ2NTE0MTUwMjcyLDE5NTQ5LjAxNTM4OTAyMjM1LDE5MjYuMjAwMjQ0OTIwNTk1NywyMTIyLjMzMjUxODA3MDc0LDMxMzUwLjgzNTA5MzQ1MDM0NywxMDEzLjIzMjMzMjg5MzU3NDUsMzUyMi4yMDQzMTEyODYzOTUsMzAyMi41MDEzNzk2OTk3MjEsMjgwMjguNzQ1MDMyODc3NzksNDg1MS4yNzgzMjIzNzE4MzEsMzY1NzIuNjQ3OTYxNTU2MDYsNjMwNjguNzg5MDQ0NDUxOTk0LDI4NDkzLjAwODYyMjUxODE4NCw1Mjk1LjA0MDI1MTQxNDc4NSwxMTU4OC41NzY4NzI1MTQyMDgsMzIzNTEuMTI1MTUxMDEyNzIyLDM5OTEuMzMwODEwMTIyMDk3Myw0ODE0LjY2OTY4NDc1MTgyNSw5NzkuODgxMDUyMTkxOTg0NCwxNzUwMC4yMDA1MjQ0OTAwNyw4OTU5MC40MDc1Mjk4NDQ2NCwxNTgwOC4wOTA3MzczMzc0NjMsMjM5MDkuMDc2OTM4MTUwNTIzLDEwNDYuNzA5MzA2NjE1Nzc5NSwyNDM4MS42NzAzMzI0MTU1NCw4MjU0LjEyODk4ODU3NDgwOCw1NDguNzg0NTA5NjY1NTUwMyw3MzAuODUzOTA1ODgxNTUyOQorMTMsU3VuIDYgRmViIDExLDQxOTQ0LjkwMjM2MTI2Nzg3LDQzNTEzLjc4ODY5NDU2NDUzLDMxNzE3Ljc1NjczNDA0MzI0MywzNjMzODkuNDY2NDM1NTY5NiwxMDgxNTQuOTEzOTMxNzkyMjIsMzc2NTI5LjQ0NTcxNzY0MzIsNTYwNjMuNzE4MDk2NDk5MywxMjc5ODAuNDk5MjIzODc2NzQsMTQ0LjAyNzA3NjQzNjQ1ODQ2LDEwMDkxMDguNDM5OTIzMzEyNiw2NTY1OTguMjkyNDk5ODQwNSwxNTAxMTguMjk5NjkwODgzODQsMjYxNjguNDE1MjE4NjYyNDc4LDMyMDMxLjAzMzA2NjQ2ODk0Niw3NDE2MzIuNjg3MzczNzQzLDc5ODMzLjU4ODQxMzE2NDE1LDEyMzkxLjY5MDQwODU4NzY0NSwzODgyNi4wNzczMTcwODkxMyw3Mjg2My4xOTYyODE0NDY1NCwyMjYxMTUuNDAxNDc1MDQ3NTgsMTY3NDM3LjY5MzU5NTkzODcsMTkwNDUuMjYxNzk4NjkyNDQsMzA5OTIwLjU2MzY4OTE2MTczLDI3NDgxMS45NjEzMjY5MzE5NSwyMDU0MzMuNzIyMjQ3NTU1MywyMDUyNy4wMzk1NTkyNjcyMDcsMjI0MjkuODIxMDYxNjExNzQzLDMyODc5Ny45NTM3NjYxNTQ1LDEwNzQ5LjYxMTA0NjE0NDc4OCwzNzI3OC43ODYwMTczNTYyMTUsMzE5MjguNDA4MjA1MDM5OTgsMjk0NzgyLjk2NjYwMTM2NDIsNTExOTAuNTIwMjI0MTQzODUsMzU2Nzg5LjMyNjA2OTI5OTUsNjYzMzI5LjgwNDMwMTc2OCwzMDA4OTIuMzQ3MjE5NTYxOCw1NjE4OC4zNDQ5OTU3NjQxMSwxMjE4NDUuMDE2MDY1ODU3NDIsMzQxNDIzLjQ2MTAxOTAxNjQsNDE4NzguMDkxODQ1NDczMzQsNTExNzUuNzg1NDk3NDE4NDMsMTA0MTAuMjIyMDU4MTczMzgyLDE4NDI4Ni4yMjg1NDk5NjAyNCw5Mzc3MTguOTMwNzQyNzQ3NywxNjMxNzcuODg3NjEzMDIzOCwyNTEzOTcuMzkyMTY4NjA5NDMsMTEwOTYuOTc3MDA1NTUwMTY3LDI1NTM5OS44MTI0NTEzNDQ5Nyw4NzU4Ni44MTk2ODMwMDAxOCw1ODU5LjEwNzc5ODI5NTU5Miw3NzU3LjU1NDM2MDQ4NTgwMworMTQsTW9uIDcgRmViIDExLDM3ODg3NC4yNjA4Nzc2MDIwNCw1OTE3NTUuNzg0ODg0MzUyOSw0MjQ4NjQuMTE1MzUwNjc4MiwzMTkzMTcxLjc2OTA3MDcwNCwzMjk3MC41NDAzODcxODY5NjQsMjk0NDg0My41NDQ3MTQyOTQ0LDcyNjMyMS45OTI2ODkzMDM4LDQxNDYxNi4zMTE1NDIwOTc1LDIxMDAuNzA5NzMwNTY4ODUyLDkzNTk5ODIuNzM0NTEzNzEzLDU0MDM1ODEuNDk3ODU0MDIxLDkxNjMwNi4zOTA2NjE1MzU4LDM1ODA1OS42ODQ0NzI5NjA1NCwzOTA3OTkuNDIyNDY1OTc2NzQsNzA0NzMwMC45ODEzNTc3OCwxMDU5NTk1LjIxMDAxMzc4NDUsMTc0OTkyLjk5Nzc1ODY3MDY4LDUyODY5Mi43Nzg0NTQyODU5LDk0NTA0Ny42ODIzODU0Mzg1LDI1NTEyNTIuMTk0ODc0NDE1LDE5NDQzMDMuMjA1MDkwMjQ2MiwyNDk0ODAuNTA2NzA3OTk5NDUsMzYwOTk1NC41OTA0NzAwNzYsMjY4MzYwOS40NTcxOTk1OTc3LDIyOTk2MzkuNjExMjQwODM2LDI4NDQyMi43MzM3ODUzMzYyLDI3MzQ0Ny4wMzQ1OTM0Njg2LDM1NzMyMTMuOTA5MDc0Njc4LDEzODk4NS41NDc4NjM1ODUyNiw0NjQ2OTQuNjA0NTUwMDQ5MSwzODY1MTUuNjg1MjA1OTgzMDYsMzMzOTkxNS43NzI4MTU3ODcyLDYwOTQ3OC45NDYxMDEwNjMyLDE1MjU1ODUuNDM0NjAzNzM0Niw3NTE5NzkwLjgyMjc0MjQ0MSwzNjI1MDM0LjI5ODI0NjkyMiw3Mjg4ODIuMjYyNDYwNzcwNiwxMzc0Nzg0LjUxMDk5ODI3NSw0MDc1MDEyLjMwNzc5ODUzOTMsNDU4MDUyLjMzNTgxOTkzMTQsNjgxMDgwLjQ4OTIyNDk3MzYsMTM3NTA3LjYzMjU0NjgxMTEsMjEyNzk5NC4yODUwNzA1NTg1LDk4OTQ3NjAuMjUxOTA3NTksMTQxMTUxMy41NTMxNzM2ODY0LDI4Mzg1MDkuMTUzMzIyNDM4LDE0MTkzNy4zMTczMTg0NzY3NywyNzI2NzA0LjAyNDA1MjE4MDMsMTEzNTgwNi4yMTE5NDI2MDczLDgzNTcxLjg3MjUwOTgwOTQxLDEwMTA1MS4wODkyMjU5NjkwMworMTUsVHVlIDggRmViIDExLDE5NjAwNy40MzAzOTU1NDEwNCwzNjcwODk0LjQ1NDgwODYwMywyMTcwMDc2LjE4NTAyNDg4NjQsMTQ4NzIxOC42OTM2MDI1NTY0LDE2ODIzLjgxMjkzNzQyOTc1Myw4OTI1MjEuMTk2MzA3OTAyOSwyNTk3NTgwLjU2NzI1OTE5OSwyMDA1LjUyNjI0NTc3ODY0ODQsNTExODguOTM3MTIxODM0NjksNTM2ODIwNC4zNzI1NzQ0NiwxOTcyMDU5LjE5NDA4MjMyMTEsMTExNzY3Ljc0MDA5MzY5MTM5LDI0MjEzMzYuOTUwMjc0MTMyNyw4NjIyNjAuMjYyNjE1OTkwNyw0NDQ4ODUyLjQwNDM2NzI2OCw0ODYyODU3Ljk3NzAyNTU2NywyMDE0ODQxLjk4NDMzNDEwNTIsMzMzODkxMC44MjQzMDM0ODksMzQxNjkyOC45MTQ3MjgzNTUsMzUxMjcyMy45MDQ2MDI3MDgzLDMxNDA0NTUuNjE1NDQ3MDE2LDk5NDc2OC43MzAzODQ0OTg0LDU5MzY0NTUuNzYzNTU3NTg2LDE4OTMxODkuNjM4MTk3MTI3LDMwMzY3MTEuNzI3MDY5OTgxLDIzMzIzMTkuNTAyNzc2NDQ1LDYwMDEyMC42OTM4MjM2OTU4LDQwNjI4MzAuNTY2NTUyMTg3Myw0ODc3NjEuMzA1Njk5MTQyODYsMTE5ODMxNi43NDczMDQ0ODk2LDgwODYxMy40NjE1MzUxMzY5LDQ3MDI1ODUuNDcwMDIyODAxLDExNDQ2MTkuNDI4NTg5MTc2NiwzODg5NC4zMDEyMzU4MDYxNiwxLjA2MTk4NzczODgwODE4NTZFNyw3MzQ1NDM5LjA2Njk1NjkxOSwyNjM5MTY4LjAwNTg2ODU4MiwxODkyOTczLjUzMTIzNzY5ODksNzc3MjY3Ni4xMTM2OTE2NSw1Mzc2MDEuNzk0NjgzMDEzMSwzMjIzNTUxLjEyMzM0ODMyOTcsNTk4NDgzLjkyNjI4OTc4NDcsMzMyODM5NS4zOTA2ODg3NDksOTc4MTE5OS4yNDc5MTA4MDUsNjE5NjQ3LjYyNzUxMzU4NjUsMzkyMjk4Ni4yOTk2ODExOTIzLDQ1MTc0OC41MzY4ODMzMDg1NSwyODQ2ODYyLjE4NTU1Njg1NzQsNDA5OTQxOS42NzQ1NzEzOTQ1LDExODI0MzMuNDI2OTk3MTY2NiwzODA5MzQuMzY2MTc1MDQxOQorMTYsV2VkIDkgRmViIDExLDEuNzMxOTAzMjY1NjEzNTQ3MSwxMjg0MTIuMTEwNTY5MjQ0NDUsMzc3MjUuNDUxNDQ1NTU4NzUsMTUuMDIxODY3OTcyNDU3MDQzLDUwLjAyNDQ5NDg0NzAxMjQ5LDE1LjY1OTMyMDk4OTEyNDM5Miw5OTg3LjMyMDYzMTIxNjE1Niw1LjY2ODYxNTg5MDM0NjA0Nyw2MDU0NTQuOTI3NjM4MTAyLDQxLjYxNzc2Mzc4NzcwMzMsMjcuMjI4NjA0NzA0OTExNDcsNi4zNDY5Njk1NjU1MTU2MjIsMTEzMTgwLjk2MjU5NTE1ODA1LDIwOC45NDkzMDAwMjY4MTQ4NSwzMC41NTczODk4MTIwNTk5Myw1NTY0Ni40MTgwNzY1MjE4MjYsNDgyMzk0LjQ4Mjc1MDI3NTg3LDEyNDE1MC44NjUyNDUwNTYwOCwxMzgzMy45OTA5NTIyNjQyODgsMjAuNjc5NjIyMDE0ODMyNjcsNjUuNzI0NTg1OTAxMjcxNzgsNjI5MS44MzEzODEyOTIxMDUsMTQ0Ljk1NTM1NTE3MTc0MDU2LDExLjMxODExMTUwODY2NTg1NiwxNC4xNDU3NjUyNjUwNTkyNjQsMjAxMzQ4LjU5MjYzNzkyMTk1LDE0MC4xNDcxNTY0Mjg4NzA2LDE0LjExODc4NTcwNDQ4MTQzNCwxNzEzLjUwNjY3NDY4OTg2OSw3OTYuOTU1NDAwNDE5NTgxLDEzNC41MjMxMzU0MTI5Nzc3MiwzMi4xNjg5NzI4NjMwMjk4Niw4NC4wODU4NzMxNzAzMDA4OSwxNS40NzE2OTMyMzY2NjgzODYsNzQuMjE5ODc1NzMyMTQ0NTQsOTY2Ljk1MzY5MjAzNzA1ODgsMTA3NTguMDUyMTI4NTczODkyLDExLjE0NzIwMTQ1MzkzNzcyNCw2NDUuMTY1NjE3MjMxNjcyLDEuODc0NTA0OTEzMzg3NzI2Nyw0MTcyMi4yMjc1NzQ3Mzk0NzQsNTUxMC40NzYwNDczNDgzNTMsNTIuODU1NzkzMjQwMjE4OTQ0LDM4LjU1MjczNzc3NjEwMDQsNi43NTAwODA1MDg4MDIzNDksMjMuNjYwNjA4NTg5NDY3MTI0LDk3NS4yNjgxNDU4MDc5Mjg4LDEwLjUzMjA3MzUzNDYwOTAxNCwxNjQ2MC4wNTUyNDI4MDQxNjYsNTM0NjE3Ljg1MTgyNTc3NzMsMTg3Mi4yNDY2MzUwNzM0MTU3CisxNyxUaHUgMTAgRmViIDExLDAuMDAyMDEzNzE1Njg2Mzg1MDM3LDAuMDAyMDMzNjA0MTgyNTAwMTkwNCwwLjAwMTQ4MjYxNTcxNjA3ODg3NzIsMC4wMTc0ODUwOTk3MDQzMDc5NywwLjA2MTQ5ODU1MjE1NjA1ODUzLDAuMDE4Mjk1NDI3MTg4NDMzMzM4LDAuMDAyNjIzNzU3NjE1NzgyNjU5LDAuMDA2ODAxMTI5Nzc2NDQzMjIzNSwxMjQ2NTUuNTQ4MDg2NjA2NiwwLjA0ODM0MjI2NTMxNjg5OTA3LDAuMDMxNzY2MDMzODQ3NzQ2MDA0LDAuMDA3NDU4MjEyMjg0MTg1NjIyLDAuMDAxMjIyNzE5MTE4ODE5MTc4OCwwLjAwMTUwMzk1ODAxODcxMTUyMjIsMC4wMzU0NjAxMzg4MDQxMDcxNSwwLjAwMzczMjY3NzE3OTE3NjY1NzIsNS44MDczNDgyNjgyNDc3MTRFLTQsMC4wMDE4MTQ0NjkzODcwNTEzMTY4LDAuMDAzNDA5NzkwNDUzMDMzMTY0LDAuMDEwNjcyMjA0OTM5NjM2MTY1LDAuMDA3ODg3MDE5NDIxMjA0MDY3LDguOTA4OTE2MDA0MjY2OTU4RS00LDAuMDE0NTk1NTA5NzYyMTg3NzUsMC4wMTMxMTE1MjMxMzk4MDQ2NDcsMC4wMDk3MDE0OTc2MjA1NjkxNjIsOS41OTQ0NjMzNjI5MTgzODRFLTQsMC4wMDEwNTMyMDA5MTk5MTk1NzAyLDAuMDE1NTYwNDgxNTI2MTQ0MDYzLDUuMDMxMjMwMzkxMjc5NjQ5RS00LDAuMDAxNzQ4MTIyNjU5NjAwMDYxMiwwLjAwMTQ5OTg2NzIzODA4NTIwMDYsMC4wMTM5MDkxMDU2NzY2MjQxNjYsMC4wMDI0MDcyODA4NzAxMTI2Mjc3LDAuMDE4MzY5ODMxMDg5NzQyMjQsMC4wMzEyOTc0NzQ0NzQ0NDcwMywwLjAxNDEzODk5Mzc5Njk5MTEyLDAuMDAyNjI5NDM3MTA4MjY2OTU2MywwLjAwNTc1MDg0MzIwNDY1NTAxLDAuMDE2MDUzMTkwNzQ2ODM5MjYyLDAuMDAxOTgwOTY1NjA4MTgwNzE4LDAuMDAyMzkyNTY0Nzc5NDg4NTUsNC44NjgxNDUyNjUxNjg5MjhFLTQsMC4wMDg2ODM5NzIwNjQ5NzE5ODgsMC4wNDQ0NzQ2NjA5MTQ5MTE3NjQsMC4wMDc4NjE3NTA0NTI1MzUwMDMsMC4wMTE4NjQ4NzYyNjY3NTIxNTMsNS4xOTY1MDY2NTY0NjAyMjlFLTQsMC4wMTIxMDI2OTQ1MTIxOTE5NDIsMC4wMDQwOTg4NDc4ODAxOTA2MDEsMi43NjA0Mzk2NjUyNTUzMTQ0RS00LDMuNjI5NjMzNDI2NzI0NzY2RS00CisxOCxGcmkgMTEgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxOSxTYXQgMTIgRmViIDExLDIuMjA3NzY1NzI1MjE1MTM1OEUtNywyLjUwOTY0OTIwMzEyOTIwNUUtNywxLjgxMTI2OTgyMDY1NDY5NzZFLTcsMS45MDkwODMyMDIwODU0MzlFLTYsMi44NzYyNDU4MDkyOTg3MDI1RS02LDEuOTY2MjY2NDI3NTI0MTgxN0UtNiwzLjE0NzkxNjkzNjMyODQ1NkUtNyw2Ljc1MjA3OTY4NjY5NjI4NEUtNyw5Ljc4NDA3MjM4MTc2OTc4NkUtMTAsNS4zMjIyMDM2NTUwNjI4MDVFLTYsMy40MzY1OTcyNTExNTg2MTkzRS02LDcuNzk4ODY2NDU5OTk2NjdFLTcsMS41MTYyMzA3MjIyNDU3MDRFLTcsMS43NjE1MjgyMDI5MDE5MTdFLTcsMy45MTk0NzcxNDc0NDM5ODlFLTYsNC41MzUxOTAyODU2NTQyNjlFLTcsNy40MjIxNTQ4MTE1MjIyMDNFLTgsMi4yNDE0MDE5MzY2NDMwNDhFLTcsNC4wOTMyMjM5MjU1NjAxODRFLTcsMS4yMjE2OTE5NzU5NjYwOTEyRS02LDkuMDk4MDAzMzM3NTg0NDk5RS03LDEuMDc0NzM5NjEyMTc1MTM1NEUtNywxLjY4NTExNDg5NjA1NDEwNjZFLTYsMS40NTYwNjc5OTA5NzU4OTlFLTYsMS4xMDgzNzA3OTQyNzM0MjU0RS02LDEuMjAyNDAwMTI3MDQyODUxMkUtNywxLjIzMzI0ODg0MzU5NjUyODRFLTcsMS43NjUzMTA2NzUxNTg3NTAyRS02LDYuMDMwNjE5NDM3MDM2ODJFLTgsMi4wNjMzNzU4NTc3OTI3NjA0RS03LDEuNzUyMTM2OTA0MDA4OTQ4M0UtNywxLjU5MzkzMDE2NDI4NzUyMDVFLTYsMi43OTczMjU2MDEzNDk3MDdFLTcsMS44NjE4MTcwNDEwMDc3MjkyRS02LDMuNTg3MDg3NTc2MjEwMjQ2RS02LDEuNjQ5MTE4OTQwNjU2NjU0MUUtNiwzLjE1NjY5MTQzNTcwMjE4NjRFLTcsNi41ODMyNDQ4Njg4MTMxOTdFLTcsMS44NjY4NDA1Njk4NDM2Nzc0RS02LDIuMjUwNjkzODA2MzY5NjIxRS03LDIuOTExNTM0NDc1ODg2OTE1N0UtNyw1Ljg5ODg1MDE4NzE4MDM4M0UtOCwxLjAwMDE3OTAyMjY5Mjk3MDVFLTYsNS4wMTMyMDUwODc1MjA1MzlFLTYsOC41NjQxNDc4OTU3NjI3MjZFLTcsMS4zNTg0NjU1MTA3NDUwNjc0RS02LDYuMTk4MzA2NTUxNDk5NDQzRS04LDEuMzY3NjMzNjk0NDEyMzkxNEUtNiw0LjkxOTk1NjAwMTcyODA1MUUtNywzLjU2OTI1OTQ4MDQ0NDc0NzZFLTgsNC4zNjYyODczMDY1ODg2MDk1RS04CisyMCxTdW4gMTMgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyMSxNb24gMTQgRmViIDExLDYuMjIxMzQzNTI5NTQ3NzE0RS0xMCw3LjQ4MTI2NzkyMjM4MDEzN0UtMTAsNS4zNjcxMzY3ODkwNjgzMzlFLTEwLDUuMzcxNTQyNzIwMzA4NzM0RS05LDYuODcxMzg1MjI3OTA5MzJFLTksNS41MDIxNTI1MjcxODI5NzNFLTksOS4yMzQ5NDg0OTQzNjI4MjJFLTEwLDEuODUzNTk4MzYwODUzMTcwOUUtOSwzLjM5ODA0MDY2MDA0MzI3MzVFLTEyLDEuNTAyMDkzMzI5OTczODA0RS04LDkuNjM4MDk4OTgzOTIwOTQ2RS05LDIuMTY0MTEwODU4NjY5NDQwN0UtOSw0LjUzMjY4MTk4NTA3MTQ4NDVFLTEwLDUuMTA1MjA0MzAzNDI2ODU0RS0xMCwxLjEwNzg2NjgzNzc5NjE5OTJFLTgsMS4zMzk2NzYyMDExOTI4MTM2RS05LDIuMjY2ODI4ODEyMTM2NDM1NUUtMTAsNi42ODU0NzgxNTA4MDk1NThFLTEwLDEuMjAxMTY3NDQ3MjMxOTMzRS05LDMuNTAzNDM4MjUxMDU2MzgyM0UtOSwyLjYxNzk5NjIzODE2Mzc1N0UtOSwzLjE2MjIzNzE3Mjg1Mzk2NkUtMTAsNC44NTA5MjA4NDI0OTY0NzFFLTksNC4xMjMxNjM1ODEyNzU3NTFFLTksMy4xNzU2OTY1MzQ0ODY5MDJFLTksMy42MTkwNjkxNzgzNjU1NzFFLTEwLDMuNTczNzA4Mjk1NDY4NjQzRS0xMCw1LjA0MjYzNDYzMjkwMDEyNTZFLTksMS43NjgyOTQ1MTg1NTIwNjIxRS0xMCw2LjAwMjY1NTM1Mzc5MTU4NUUtMTAsNS4wNzE2MDI2MTgxNjEyMTFFLTEwLDQuNTczMDU3NTcwMjMzNzg1RS05LDguMDc2Njk5MDQwMjc5Nzc4RS0xMCw1LjEyODA2NzAzOTY5MjkzNkUtOSwxLjAyOTIxNzQwMzU2ODM0MjhFLTgsNC43Njk4NDk3OTY0NjYxOTI2RS05LDkuMjYzNzUzNDgwMTg3NDQzRS0xMCwxLjg4Nzg3NDY3MzUzODUxNUUtOSw1LjM5MjAzMjQzOTE2OTM5N0UtOSw2LjQzMzE5OTQyMzM5ODgyNkUtMTAsOC42MDgxODYxMTU4ODI0NDRFLTEwLDEuNzM5ODcyMTc1OTYxNzQ3NkUtMTAsMi44NzYwNDE2MjMyODA2MTU0RS05LDEuNDI4MTUzOTk1OTg1MDIyNUUtOCwyLjQwNzY5NTEwMDk0ODQ5MzZFLTksMy44OTU5NzEyNDA1MzIyNDdFLTksMS44MTI4MDU5NjYzNjk0Njk2RS0xMCwzLjkwMDE2MDk0NDUwNzI3NEUtOSwxLjQ0MzcwNjE1OTMxMDYwNUUtOSwxLjEwMzEyMzE5MDkyNjAyMzVFLTEwLDEuMjgyNzM5NTU3NjI4MTEyRS0xMAorMjIsVHVlIDE1IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjMsV2VkIDE2IEZlYiAxMSwxLjQ4NTM1MzQ4NjU5MjU3MjlFLTEyLDEuODI4OTc1MDQ5ODI1MTAyN0UtMTIsMS4zMDg4NjY4ODA5Nzg2ODE4RS0xMiwxLjI4MTY5NTc1OTAyNDIwODdFLTExLDEuNTMwMTQyNDM1NjYxOTMxN0UtMTEsMS4zMTAxMzUxMDU2NTg4MkUtMTEsMi4yNDI2NTE2MTgxNDc5NTQ2RS0xMiw0LjQwMDEwODUyNjE4NjY2OEUtMTIsOC43ODcyNDEwODM5MjUyODRFLTE1LDMuNTg4NDk4Njg4MjQ5MjI2RS0xMSwyLjI5Njg1ODI1NDk4NjUzMTVFLTExLDUuMTM5MTk2MDAxMjQwMDE2RS0xMiwxLjEwOTQxMzk4NTkwOTE2MDdFLTEyLDEuMjMzMzYzOTQ0NzA0MDY1NEUtMTIsMi42NDgzMDg5OTExMzE4ODNFLTExLDMuMjYyNzcwMzY4NzQ0NzA5NkUtMTIsNS41OTY0NTEyOTU0NjE5MjZFLTEzLDEuNjM0ODE0Mzg4Nzc3MDMxNEUtMTIsMi45MTczMjI4MjM2NDU0NTZFLTEyLDguNDI1NzY0ODc1ODE1NUUtMTIsNi4zMDU1MTY3ODQ2MDAzMDdFLTEyLDcuNjg4ODU2NDcwNDg5OTU3RS0xMywxLjE2ODU1NTQ0MTY5OTUxNjJFLTExLDkuODYzNTk1OTcwMjg2MzMzRS0xMiw3LjYzNDcwNTAzNDgxMjI5M0UtMTIsOC44ODI2ODY5MDYyOTIyMzRFLTEzLDguNjMzMjM2NzYwOTE1MTU1RS0xMywxLjIxMDczNzk0ODU2MzAwODZFLTExLDQuMjkzMjgzMjM2ODQxODFFLTEzLDEuNDUyNTIwODk5NjQzMjA2N0UtMTIsMS4yMjQ1ODcyODAwNzE3MTVFLTEyLDEuMTAwMDQxMDQzMDE4MDk2NkUtMTEsMS45NDgxMTA5MzgzNjAzNDFFLTEyLDEuMjE2Mzc2OTM3NTk5MjQ0M0UtMTEsMi40NzU4MzIxMzQ3MTkxMjdFLTExLDEuMTUxMzU4MTgxOTUyMTU3MUUtMTEsMi4yNDk5NjExODczMzEwODI0RS0xMiw0LjU0MDMzODE3ODI3Mzg4OEUtMTIsMS4zMDA3NjM1MDg5MDk3Mzg1RS0xMSwxLjU0NTAyNzIyMzcxODk3N0UtMTIsMi4wOTcyOTUyODY0MDU0OTIzRS0xMiw0LjIzNDc2ODkyNzczNDI1NTRFLTEzLDYuOTI0OTQyNjE5NjkyNzY4RS0xMiwzLjQyNTA3MTU1MDUxODk1N0UtMTEsNS43NDMxMjE4NzM5MTE5MzdFLTEyLDkuMzcwMTIyODI0OTUzOTU3RS0xMiw0LjM5NjU3MjM5MDQwNTM1NkUtMTMsOS4zNTc2ODgwMzc0NTE1MjNFLTEyLDMuNTA2MzE2Mzc5NjgzNzQxM0UtMTIsMi43MzYxNzk2NTg5MDgxMzI0RS0xMywzLjExNjkxODk5NzQxNTIzODdFLTEzCisyNCxUaHUgMTcgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyNSxGcmkgMTggRmViIDExLDMuMjY2MzE5NDUwMjU3ODU5MkUtMTUsNC4wNzQ3NzUxNDQ0MzUyODhFLTE1LDIuOTExOTgxMzA3NjIyMTY0NEUtMTUsMi44MTc2NjgwNDAyMDY5MTc0RS0xNCwzLjI2MDAyMzY4NTc4ODAyMTdFLTE0LDIuODc3NTcxODQ3NzkwMzgxRS0xNCw0Ljk3NzcxNDg2Njc3OTYwMjVFLTE1LDkuNjg0ODcxNDg0NTU4OTUzRS0xNSwyLjAxNjI0NzI1OTk3OTA0M0UtMTcsNy44OTM1ODA2NDgwOTk4MjdFLTE0LDUuMDQ2NTM1NjUxNTQwMzk3RS0xNCwxLjEyNzkzMTc2MTU0NjQyNzRFLTE0LDIuNDczMjY1ODY2NzU1OTc4NEUtMTUsMi43Mjk1NTgwMjM3Mzg1MDJFLTE1LDUuODI3MjM4MDg3NTcyNjI5RS0xNCw3LjI1Mzc0NzY2MTIzNTU2OUUtMTUsMS4yNTM1ODg0ODI3MjQ5NDI5RS0xNSwzLjY0MjY4NzIyOTE2NzExN0UtMTUsNi40NzU2NDI0ODgwNDU3NDVFLTE1LDEuODU5OTk5NjE3OTk5Njc2N0UtMTQsMS4zOTMwODY2ODM2OTY2ODJFLTE0LDEuNzA3Nzg3MTUxMDE2MDIyM0UtMTUsMi41ODE5NDk2NzczMTA0MzU1RS0xNCwyLjE3MTE3NDU2ODQ4ODY4MzNFLTE0LDEuNjg1MDI1MzczMzQ3NDgzN0UtMTQsMS45ODMzMTE2NjkxMjgzMzVFLTE1LDEuOTEwNTYzNDg1NTU0MjM4RS0xNSwyLjY3MDI3NzMwMTc5NzM5NDhFLTE0LDkuNTI4MDg3MTkyNDI5ODc0RS0xNiwzLjIxNzQ5Njk1MzM0MDM4NDJFLTE1LDIuNzA5MzE0NzYwNTk3NDM1RS0xNSwyLjQyODYyNjgzMDc2NTk1NjhFLTE0LDQuMzA3NDcyMTk2OTI5MDQ3NUUtMTUsMi42NzIwNzYxNDM2MjQxMjMzRS0xNCw1LjQ2NjEyNjMzMjg2NTY4M0UtMTQsMi41NDY4NDMwOTI5NjkyNjE3RS0xNCw0Ljk5NDMzMTg3MjMyMjU4MUUtMTUsMS4wMDIyODYzNTE3MzY5MzU0RS0xNCwyLjg3NjM2NjI5OTk0NzgwM0UtMTQsMy40MDgwNTA3MjEyNTQ4MTQzRS0xNSw0LjY2MzY0OTgwNjIwODc5OEUtMTUsOS40MTEzNDYwMTA5NjMxMzdFLTE2LDEuNTI5NjgwNzQxNzg5NzYzRS0xNCw3LjU0OTI3ODMyNDM3NjQ2MkUtMTQsMS4yNjIzNzM3MjM4NjUyODIxRS0xNCwyLjA2ODUwNjY2ODY1NTc5NUUtMTQsOS43NTEzNDQ5NDM0MjE2MTdFLTE2LDIuMDYzMDQxMDg3MDkyNDQ0N0UtMTQsNy43ODI5NTY1OTk0MDIyMzJFLTE1LDYuMTQ0NDU5NjAwMjUwNDM0RS0xNiw2LjkyMDUzODE4NzI1MjczRS0xNgorMjYsU2F0IDE5IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsNi44MzAyNDAyNjA2NTAwMDRFLTE1LDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjcsU3VuIDIwIEZlYiAxMSw2LjgzNzE4Mjg0ODcxNzU4NEUtMTgsOC42MDAxNTMyMjAwNDI5OThFLTE4LDYuMTQwNDMxOTE3Mzg5NjAxRS0xOCw1Ljg5NzIxMTcxNTE5NTcxMkUtMTcsMi41MjM2ODM1Mjc4MDY2MTlFLTE1LDYuMDIwMzMzNDU3NDE1NDA5RS0xNywxLjA0ODAyMzgwNTc1MjIxMTVFLTE3LDIuMDM0NzE3OTMyMjg0NzcyN0UtMTcsNC4zMzQwNjMyMTczMzc3MDhFLTIwLDEuNjUyNTc3MDkwNjcyNzcwOUUtMTYsMS4wNTU5NDM3MjI1MzIwNDI4RS0xNiwyLjM2MDExMzc4Njc3MzQwNTJFLTE3LDUuMjIyMjI4NjI4ODg1NjE3NUUtMTgsNS43MzU5NjkwMDk0ODU5OTE0RS0xOCwxLjIyMDE3NjA3NTg3NzYwODVFLTE2LDEuNTI4ODUzNjY1OTY5MTE1NEUtMTcsMi42NTUwMjMzMzUyMTc2OTdFLTE4LDcuNjg4ODU3Mzc1MTg4MjQzRS0xOCwxLjM2MzQ2NDEzMTcyMDM1MThFLTE3LDMuOTAyMzExMTA3NTk2ODA2RS0xNywyLjkyNDIzNzEwMDM0MjY0NUUtMTcsMy41OTcyNzMxMzAxMTgyMjJFLTE4LDUuNDIwMTE0NzY5Njg5NjQwNEUtMTcsNC41NDcyMzI4ODQ3MTczNjhFLTE3LDMuNTM0NzUyNzMxNDA5NTU0N0UtMTcsNC4xOTE4ODE0MTYyMDAzNzdFLTE4LDQuMDE0ODMxNTM5MTA4NjFFLTE4LDUuNTk5MDczNjMzNDMwNTU4RS0xNywyLjAwNTkxNjUwNzc0NjA4MjRFLTE4LDYuNzY1MzM3NDQ0NzkzMDc1RS0xOCw1LjY5MjMxMTgyNjc3ODI2OEUtMTgsNS4wOTU2NjAzNjAyOTUyOTFFLTE3LDkuMDQ2NTQ3NzU2OTAyMTJFLTE4LDUuNjAwODQ2MjI5OTg4NTg2RS0xNywxLjE0Njg5NDYyMTQxNDg0MzhFLTE2LDUuMzUwMzMzODEyMjEyNTgzRS0xNywxLjA1MTU3NjQ4MDMzNTY2NzRFLTE3LDIuMTAyODE0MjUzODIzMjM5NUUtMTcsNi4wNDEyNzM3NDA0MzAxNDNFLTE3LDcuMTQ2Njk4OTI4NjYzNzgyRS0xOCw5LjgzMDc4OTcyMjE4MTA2RS0xOCwxLjk4MzE0NjIzNDI3MzU2OTVFLTE4LDMuMjEwNjE4MDg2NDAwMzU0NkUtMTcsMS41ODIzMzY1MTYyNDM5MDQyRS0xNiwyLjY0MTg4NTU4NTAwODc1NkUtMTcsNC4zMzk4MTM4NTYzMTk3NTU1RS0xNywyLjA1MjA5NjkxMDY2MDcyMzZFLTE4LDQuMzI0Nzg2MDE1MTQ5NzIyRS0xNywxLjYzODcxMDY3MDkyOTMyNzRFLTE3LDEuMzAzNDQ3NTkzNDE4NTgyNUUtMTgsMS40NTczOTI0OTE2MzkwNzAyRS0xOAorMjgsTW9uIDIxIEZlYiAxMSw1LjAwNzAxMDQzODYyMDI1NEUtMTksMC4wLDAuMCw0LjUzNDc3MzYwNTc2ODIwOUUtMTgsMS4xNTY2MjA0MDA4MjY4OTU4RS0xNSw1LjQyMDc3MTI3ODYyNjM2RS0xOCwwLjAsMi43MDQ1MjcyNDc1NDYxOTAzRS0xOCwwLjAsMS4xNDc3ODM5Mjg1NzExNjEyRS0xNyw4Ljk0NDg5NDA3NTg1NTYyN0UtMTgsMi41ODU0MTAwMjM3MzgzMzJFLTE4LDAuMCwxLjcwNjQ0NDk1NTE2NDc1OTNFLTIwLDguMDI1NTk3NjU2NjQzNjg3RS0xOCwwLjAsMC4wLDAuMCwwLjAsMS4xNjQxMDQxMjg0MzgxMjc5RS0xOCw2LjE4NjI0MjMzNjc1ODY3OEUtMTksMC4wLDEuMDkyMjgyMTU0MzkxNjM3OUUtMTgsMi43ODgwMTMyMjQwMDYwNDQ2RS0xOCwxLjEzMjE2Mzc4NzIxMDMxNEUtMTgsMC4wLDEuMzI0NzUyOTAwMDg2OTA5RS0yMCwyLjIyMDA3NTg3NjM3MTAxOEUtMTgsMC4wLDAuMCwzLjUyMzM1NjcyMTcyMTA1MkUtMjAsMS40NTk1MTgzNTE2NzM3NTE4RS0xOCwxLjEzNjk0NTk1MDkyODAzMzFFLTE5LDcuMDU3NTk5MzA0NTI2NjAzRS0xOCwzLjI2NjQ3NDQ3MjgyNjU1OUUtMTgsNC4zMzE5NzA0NDA2ODk5MzJFLTE5LDAuMCw2LjI3MjQ0MTI0OTM4ODg3NUUtMTksNy4wNDU1OTcyNTg0NzY5OThFLTE5LDIuNzIwNTg1OTU3OTIwMTExNkUtMTksMC4wLDAuMCw3LjM2NDI4Njk5MTczMzQ5NjVFLTE5LDcuMzQ1NjQ5OTQ3MDg0MjQ4RS0xOCwyLjA4MzkyNDcyOTM1NjAxM0UtMTgsMS4yODU5NTEzOTkyMjkyMDI1RS0xOCwwLjAsMS44OTUwODA3NTA2NDY0NjRFLTE4LDAuMCwwLjAsMC4wCisyOSxUdWUgMjIgRmViIDExLDEuODc2OTk0OTI4Njc5ODQ3M0UtMTksNi41NzQ5NjE4MzgzMjA2MThFLTIwLDQuNjkxNDMwMjgzMDg5MTM2RS0yMCwxLjY4Nzk3NjQ1OTg0MDk0MjJFLTE4LDYuMDQ4NDQ4Njg5Nzk0MDE0RS0xNiwxLjk4NDA0MTEzNjg4NjQ1OEUtMTgsNy45OTgyOTU1MjY2MDA5OEUtMjAsOS44MzI3MDk3NDM4OTIxMzhFLTE5LDMuMzU1NDEwMjE4NTYzODhFLTIyLDQuMzQwMjM1MDU1NzgxMzk1NUUtMTgsMy4yOTE3NDMxNTY3MjUyNDUzRS0xOCw5LjM4MjQ0NDczNjYyMjIzM0UtMTksMy45OTM2ODAxNzg2NDAwODU1RS0yMCw0Ljc1NzE4MzU0NDkxNzM2ODZFLTIwLDMuMDY1MzE3NjAxNzU2MjUzRS0xOCwxLjE2NzY4MDMwMzgxMDc2MzdFLTE5LDIuMDM0ODI0Mjk5NzM5MzU2NEUtMjAsNS44Nzg2MjIzODk1MzkzMzJFLTIwLDEuMDQwNjAwODI0Njk5NjUyM0UtMTksNS44MDMzMTkyOTQ4MjI2MTRFLTE5LDMuNjk3NTczMzY5MDc4NTY0N0UtMTksMi43NDYyNjMzMTM0NzYyOTlFLTIwLDYuNzE3NDAxNDY3ODM1MjczRS0xOSwxLjA4MDQ1MDU3Njk4NTg2MjJFLTE4LDUuNDYxNTkzNzUwMjc0MDY1RS0xOSwzLjIwODAwMjI2MjI5MDU1N0UtMjAsMy4zNTk0Mjc5NDM1MTY2NjdFLTIwLDkuODAzMjEyMzQ1Nzk2NTc4RS0xOSwxLjUzMDc4Njk3NjE4NzYyNzNFLTIwLDUuMTU4MzEzNDYwNDE3ODIyRS0yMCw1LjE0MTE4MjI2OTE3NTEyMkUtMjAsNy40MTk2MDY5ODExOTczOTdFLTE5LDkuNTMxNTE0NjQ5Mzk2MDgzRS0yMCwyLjU2NDEwODMwOTc5MTgxNzhFLTE4LDEuNjY1MTI5MDc3NDQ5MTUwMUUtMTgsNS4wNjk5OTU3NjA0MjhFLTE5LDguMDI1NzA0ODk1OTA0NDM5RS0yMCwzLjEyNzA2OTA0NzU2NjYyMTZFLTE5LDYuMjM0MjA0MzY4ODgwODg2RS0xOSwxLjIyMDMwODg0OTEyODk5NjZFLTE5LDcuNTA5MTE1MDA2MzI2ODU1RS0yMCwxLjUxNDQwMDMzNDk2MzYzMzZFLTIwLDQuMjA0MDE3OTU5OTY4NTExNkUtMTksMy4wNjk2MDMzMzA5MDM4MzFFLTE4LDcuNzMxMTEzOTM3Mjk3NjYyRS0xOSw2LjQzMTIzODIyMTk5MzMwM0UtMTksMS41NjU1Nzk2MTg4NTg2MTVFLTIwLDguMDcyMzc0ODI1NTA1ODYzRS0xOSwxLjI1MDY2MzQyMTIyMDA5NjZFLTE5LDEuMDAwMDkxOTgwNTU5MTkxNEUtMjAsMS4xMTI0MjY2MDU1OTQ5NDkzRS0yMAorMzAsV2VkIDIzIEZlYiAxMSw3LjUxMjI1MDcwNzc4ODg4NEUtMjAsMi4yNDY0NDU5MDU4Njk3NzMyRS0yMCwxLjYzMzgyMTcxOTE4NDYzMDhFLTIwLDYuNzc5NTI4Mjg5NjEyNTU4RS0xOSwzLjQxMDEyMDA1MzM4Mzk4MjNFLTE2LDguMDY2OTAyMDc3OTY1MDcxRS0xOSwyLjg3MjgzNDU1NjEyNjkyMDdFLTIwLDQuMTIyNzAyODQ1MjAwMzg0RS0xOSw1Ljg3MzgxMDc4MDA0MDA1MkUtMjMsMS43MzA3MzM3NjIwMzY5NDUxRS0xOCwxLjMzMTg0NTMyMjM4MzQ3MTdFLTE4LDMuODc5NDc0NTU5NTg1ODMzRS0xOSwxLjM1MjA1MjgzMDYzMTE0NDFFLTIwLDEuNzcwNjQwMTI0MTg3MTkxRS0yMCwxLjIxNzk0Njc1NTY4OTcxMzRFLTE4LDQuMTA2NDMwODE5MDkzOTQzNEUtMjAsNi40MDU3MDkwMTgyNzQ4NDlFLTIxLDIuMDA0NzkxNDIyMjA4ODE3RS0yMCwzLjczNDM0MjQ3NjgyNDc0NzRFLTIwLDIuMjIyNzg0NTg5OTEzNTQ0RS0xOSwxLjQwMzMwMDQ3MTA0ODQ3MjVFLTE5LDkuNzc2MTA1NDU1NzUyNTIzRS0yMSwyLjU0NjY2NDg3NTUwMTM2NkUtMTksNC4yNzQwNzQ4MTQyOTk1MzI2RS0xOSwyLjA5NjczNDM5NTQwNzcwNzhFLTE5LDEuMDYxODk0OTU2NTkwNDAwNkUtMjAsMS4yNTA4MjY1MDc4NjMyNDQ2RS0yMCwzLjc5MzU0MDYxNTI2ODkwMTZFLTE5LDUuNTA2NjQzOTY0OTI4NTY1RS0yMSwxLjg5OTQyNTA3MjI1NzQ1NTRFLTIwLDEuOTIwMTgyMzMzNTMzODY3RS0yMCwyLjgzODI5ODc0MzgwMzQ0OUUtMTksMy41ODQzNzQ4NjA1ODg1MzFFLTIwLDEuMDcyNTI3OTUwNDUxNDY5NEUtMTgsNi4zNjg3MDY2NzYxMjU0NDc1RS0xOSwxLjg5NzQ3NjA5NDUwMDYwNUUtMTksMi44Nzk4MDAxNTUzNDUyMDVFLTIwLDEuMTk3NzI1NTMxMDM3MDY1NkUtMTksMi4zNDIxMzA5OTcyMTAzMzNFLTE5LDQuNzE0NDY0NjI0NjU4NTE5NUUtMjAsMi42MzM0NzIzMzY2NzE2MTIzRS0yMCw1LjM1MDY4NzM3MzQwNjIxM0UtMjEsMS41OTg1MzAxNDQ5MzI5MTFFLTE5LDEuMTk2MTYyNTc5MDcyMDkzNEUtMTgsMy4xMTA5NTY4NTUzNTUyNjQzRS0xOSwyLjQ2Mjc3MjI1MDA0MjE3NUUtMTksNS42NzUyNTQ2ODQ0MTQ3Mjk0RS0yMSwzLjEzNzI0MTEyNDM1MTIzMUUtMTksNC40ODg4MjA4MzM4MjQ2MzczRS0yMCwzLjAxNjI1ODQxMjMxOTE5N0UtMjEsMy45Nzg1MjQ2NjAzNjkyNjlFLTIxCiszMSxUaHUgMjQgRmViIDExLDQuNTg0MzIyOTAwMzYxMzYxRS0yMCwyLjIxNDI3Nzk3MDk1MTIxNzZFLTIwLDEuNjAwMjAwMjY2NDI3MDc4RS0yMCw0LjEwNDY2Njk0MDA2ODY4N0UtMTksMi4wMTMwMjczMTQ3MzgxNjRFLTE2LDQuNzY4MjEyNjI0MzY3NzI5RS0xOSwyLjc4NjIyMjUxMjA4MTk2N0UtMjAsMi4zMTYyNTQxMjI4NDcwODlFLTE5LDguMjI5Mjg2ODUyMzE4MTM5RS0yMywxLjA2NTQ4NDc1MzAxNzAwOTNFLTE4LDcuOTQzNTM2MDgyNDY0NDY3RS0xOSwyLjIzMzMzMDQ0MDU3OTAyNTdFLTE5LDEuMzM2ODgwODU4NDY0MzQ1RS0yMCwxLjYyODM1OTkzOTM5Nzk2MDRFLTIwLDcuNTY3NTk0NjU2MjY4NDY5RS0xOSw0LjAwOTIwMjc1MjkzMzA1MUUtMjAsNi41MDUzODc5MjM0MTk1NjY0RS0yMSwxLjk3NzMzNTgwMjA4MzA5MDNFLTIwLDMuNjIyNzQzNDQ2OTI4MTMwNkUtMjAsMS41OTY0MTA0OTc1MzE2NDQyRS0xOSwxLjA2OTQwMzg0ODcwMzIzNzlFLTE5LDkuNTA3ODIzNDM4MzQxOTUyRS0yMSwxLjk1NTk3MTQzMzM5ODMzNjJFLTE5LDIuNjg4Mjg1MzY5MTQ2MDU5N0UtMTksMS40ODY1MjE3MDcyNjc4NTY1RS0xOSwxLjA1ODMzMDU4NjQ1NjQ3NDZFLTIwLDEuMTQ1MTk2MTYwNzc0NDIxNEUtMjAsMi41ODUwNjAzMzg1MTEwNzFFLTE5LDUuMzM4MTMxNjIwMzE2NDc5RS0yMSwxLjgyODQzODIxNDkxMjU2NTNFLTIwLDEuNjkzMzIzMzc3NjIxMjg5N0UtMjAsMi4wNTM0NDMwMDExMzgzMkUtMTksMi45NDUwNTkxNzIzMTkzMDI1RS0yMCw2LjA2OTUzMTIxMTMxNTA5OEUtMTksNC42MTIyNzE0MzEzODczNjZFLTE5LDEuNjM1NjY2MTkzMzUzNzY3RS0xOSwyLjc5MzgzOTY5MjQwNjIyNUUtMjAsOC42MDIyMjI5NDI2NjQwNTlFLTIwLDEuOTQyMDkxMzU4MzAyOTkyNkUtMTksMy4yMzcxNzI5MDYwMjI3ODNFLTIwLDIuNTczNDExMzQ2OTkzODg0N0UtMjAsNS4yMTYxOTc1OTc3MzA1MjRFLTIxLDEuMjAyMDAyNTM3MDMyMDUxMkUtMTksNy45MTQzNjU1NjA0MDUyOTRFLTE5LDEuODc1OTQ4ODQ1NTUzOTkxRS0xOSwxLjc3MDkxNjU4OTY1NjYxODFFLTE5LDUuNDg4NzAwNjIyMjkxODk5RS0yMSwyLjA5ODIyMjAzOTExMzcxNzRFLTE5LDQuMzU0NDgzMDcyNjc2NzE4RS0yMCwzLjExNjUzOTIyNzQ3OTkyNDVFLTIxLDMuODYzNzA1MTE2NTgzNTIyRS0yMQorMzIsRnJpIDI1IEZlYiAxMSwyLjg0Mzk2NDQ2MTYyMjk4NUUtMjAsMS42Mjc3MDU4ODcwMTE1MTQ3RS0yMCwxLjE3NTgwODk4OTU0OTgzNEUtMjAsMi41MzU2MDk0NDM5ODMxNjNFLTE5LDEuMjIxMTUwNDQ0NzgxNDc0MUUtMTYsMi45MDYwMTkxNTY0MTg5MzhFLTE5LDIuMDQ1OTg5ODE4MzUzNzk1NEUtMjAsMS4zNjQ0NjczNTcxMTAxMzJFLTE5LDYuMTkzODc4OTAwMjQ2MzI2RS0yMyw2LjY0MDYwMDc1OTk4MjQ5NUUtMTksNC44NjYzNDUwMDk4NTg5MjlFLTE5LDEuMzM5MjMzMDQzMzk2NDUxN0UtMTksOS44Mjk0MDAzNDYyNDI5NDhFLTIxLDEuMTgxMDYzMDEwNjg0MDI1NkUtMjAsNC43MzkwNTg4MDQxMTQwOEUtMTksMi45NDUzMTE5NjUzMjI3MDhFLTIwLDQuNzkxOTI5NjM3NTk3NzcyRS0yMSwxLjQ1MzU5MTY4MjcxNzM5MzZFLTIwLDIuNjYwMzEzNTY1OTM1NDQ4OEUtMjAsMS4wNjY3NzE0MTk1MjE2MTU4RS0xOSw3LjMwODAwMjU4NDc3MTExOEUtMjAsNi45ODMwNjk2MjE4NDU3NTlFLTIxLDEuMzQwNDE5MDM5Mjg1MTA2RS0xOSwxLjY5MzkwMjMxNzMxODA0MkUtMTksOS44ODIxODU0MjE4MDAzNzVFLTIwLDcuNzg1NTI0MzQ5NTcyMTA4RS0yMSw4LjI5NTg5MzIxODA5NzYxM0UtMjEsMS42OTAzNzAwNDA0MDMzMDY2RS0xOSwzLjkxOTgwMDM0MzM1OTQxODZFLTIxLDEuMzQyMDIwMTA2MjA5NDE3OEUtMjAsMS4yMTM1NTI4NDU3Njg3MzE3RS0yMCwxLjM3NjEyNzg5OTQ5NzkzMTRFLTE5LDIuMDY1MDczNzczNzY1NDAwN0UtMjAsMy41OTY0MDgwNjc4NTI4MTk3RS0xOSwzLjA5MjE2NDA2MDE1NjUzOEUtMTksMS4xNjQzMDI3MjI3MDM4OTI3RS0xOSwyLjA1MTYyMzg0ODEwODAzNEUtMjAsNS43NDgzMDY3ODUzOTc5MTNFLTIwLDEuMzY1ODE0NTg3MTkzODUyRS0xOSwyLjEyMzY5NTM4Nzc0NzcyNTdFLTIwLDEuODkwNjM0MTYwMDQwOTA0NEUtMjAsMy44MzE2NDY3NjAwMTM4NjJFLTIxLDguMTc0MTY2NTkzMzIxOTA4RS0yMCw1LjEwODI3NTA0NTI1NTg3M0UtMTksMS4xNTYyOTQyMDg4MTkzOTYyRS0xOSwxLjE4Mzk0ODk1MTgxODk2NEUtMTksNC4wMjk3NTc3MzE0OTU3NDRFLTIxLDEuMzYwODQ1NjQyMTI3NDA3NkUtMTksMy4xOTc2NDc4MzU0ODU0NjkzRS0yMCwyLjI5ODU0MzYzMjc0MDM2NUUtMjEsMi44Mzc0NTI1Njg0NDgyMjFFLTIxCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNFSVJTdGF0ZXNPbmx5X0ZEX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9Qb3B1bGF0aW9uIENvdW50XzAuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTRUlSU3RhdGVzT25seV9GRF9SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vUG9wdWxhdGlvbiBDb3VudF8wLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYjc1NjU2Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTRUlSU3RhdGVzT25seV9GRF9SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vUG9wdWxhdGlvbiBDb3VudF8wLmNzdgpAQCAtMCwwICsxLDMzIEBACitpdGVyYXRpb24sdGltZSxzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9ub2RlL3RyYW5zcG9ydC9waXBlL1VTQQorMSxUdWUgMjUgSmFuIDExLDk0MzIxMS4wCisyLFdlZCAyNiBKYW4gMTEsOTQzMjExLjAKKzMsVGh1IDI3IEphbiAxMSw5NDMyMTEuMAorNCxGcmkgMjggSmFuIDExLDk0MzIxMC45OTk5OTk5OTk3Cis1LFNhdCAyOSBKYW4gMTEsOTQzMjExLjAKKzYsU3VuIDMwIEphbiAxMSw5NDMyMTEuMDAwMDAwMDAwNQorNyxNb24gMzEgSmFuIDExLDk0MzIxMS4wMDAwMDAwMDAxCis4LFR1ZSAxIEZlYiAxMSw5NDMyMTEuMDAwMDAwMDAwMgorOSxXZWQgMiBGZWIgMTEsOTQzMjExLjAwMDAwMDAwMDMKKzEwLFRodSAzIEZlYiAxMSw5NDMyMTEuMDAwMDAwMDAwMQorMTEsRnJpIDQgRmViIDExLDk0MzIxMS4wMDAwMDAwMDAyCisxMixTYXQgNSBGZWIgMTEsOTQzMjExLjAwMDAwMDAwMDIKKzEzLFN1biA2IEZlYiAxMSw5NDMyMTAuOTk5OTk5OTk5NQorMTQsTW9uIDcgRmViIDExLDk0MzIxMC45OTk5OTk5OTk0CisxNSxUdWUgOCBGZWIgMTEsOTQzMjEwLjk5OTk5OTk5OTkKKzE2LFdlZCA5IEZlYiAxMSw5NDMyMTEuMAorMTcsVGh1IDEwIEZlYiAxMSw5NDMyMTAuOTk5OTk5OTk5OQorMTgsRnJpIDExIEZlYiAxMSw5NDMyMTEuMAorMTksU2F0IDEyIEZlYiAxMSw5NDMyMTEuMAorMjAsU3VuIDEzIEZlYiAxMSw5NDMyMTAuOTk5OTk5OTk5OQorMjEsTW9uIDE0IEZlYiAxMSw5NDMyMTAuOTk5OTk5OTk5OQorMjIsVHVlIDE1IEZlYiAxMSw5NDMyMTEuMDAwMDAwMDAwMworMjMsV2VkIDE2IEZlYiAxMSw5NDMyMTEuMDAwMDAwMDAwMgorMjQsVGh1IDE3IEZlYiAxMSw5NDMyMTEuMDAwMDAwMDAwNworMjUsRnJpIDE4IEZlYiAxMSw5NDMyMTEuMDAwMDAwMDAwNgorMjYsU2F0IDE5IEZlYiAxMSw5NDMyMTEuMDAwMDAwMDAwMworMjcsU3VuIDIwIEZlYiAxMSw5NDMyMTEuMDAwMDAwMDAwMworMjgsTW9uIDIxIEZlYiAxMSw5NDMyMTEuMDAwMDAwMDAwNworMjksVHVlIDIyIEZlYiAxMSw5NDMyMTEuMDAwMDAwMDAwOAorMzAsV2VkIDIzIEZlYiAxMSw5NDMyMTEuMDAwMDAwMDAxMgorMzEsVGh1IDI0IEZlYiAxMSw5NDMyMTEuMDAwMDAwMDAxMworMzIsRnJpIDI1IEZlYiAxMSw5NDMyMTEuMDAwMDAwMDAxNgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTRUlSU3RhdGVzT25seV9GRF9SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vUG9wdWxhdGlvbiBDb3VudF8xLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0VJUlN0YXRlc09ubHlfRkRfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL1BvcHVsYXRpb24gQ291bnRfMS5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmQ1N2M5MgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0VJUlN0YXRlc09ubHlfRkRfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL1BvcHVsYXRpb24gQ291bnRfMS5jc3YKQEAgLTAsMCArMSwzMyBAQAoraXRlcmF0aW9uLHRpbWUsVVMtQUssVVMtQUwsVVMtQVIsVVMtQVosVVMtQ0EsVVMtQ08sVVMtQ1QsVVMtREMsVVMtREUsVVMtRkwsVVMtR0EsVVMtSEksVVMtSUEsVVMtSUQsVVMtSUwsVVMtSU4sVVMtS1MsVVMtS1ksVVMtTEEsVVMtTUEsVVMtTUQsVVMtTUUsVVMtTUksVVMtTU4sVVMtTU8sVVMtTVMsVVMtTVQsVVMtTkMsVVMtTkQsVVMtTkUsVVMtTkgsVVMtTkosVVMtTk0sVVMtTlYsVVMtTlksVVMtT0gsVVMtT0ssVVMtT1IsVVMtUEEsVVMtUkksVVMtU0MsVVMtU0QsVVMtVE4sVVMtVFgsVVMtVVQsVVMtVkEsVVMtVlQsVVMtV0EsVVMtV0ksVVMtV1YsVVMtV1kKKzEsVHVlIDI1IEphbiAxMSw2MjY5MzIuMCw0NDQ3MTAwLjAsMjY3MzQwMC4wLDUxMzA2MzIuMCwzLjM4NzE2NDhFNyw0MzAxMjYxLjAsMzQwNTU2NS4wLDU3MjA1OS4wLDc4MzYwMC4wLDEuNTk4MjM3OEU3LDgxODY0NTMuMCwxMjExNTM3LjAsMjkyNjMyNC4wLDEyOTM5NTMuMCwxLjI0MTkyOTNFNyw2MDgwNDg1LjAsMjY4ODQxOC4wLDQwNDE3NjkuMCw0NDY4OTc2LjAsNjM0OTA5Ny4wLDUyOTY0ODYuMCwxMjc0OTIzLjAsOTkzODQ0NC4wLDQ5MTk0NzkuMCw1NTk1MjExLjAsMjg0NDY1OC4wLDkwMjE5NS4wLDgwNDkzMTMuMCw2NDIyMDAuMCwxNzExMjYzLjAsMTIzNTc4Ni4wLDg0MTQzNTAuMCwxODE5MDQ2LjAsMTk5ODI1Ny4wLDEuODk3NjQ1N0U3LDEuMTM1MzE0RTcsMzQ1MDY1NC4wLDM0MjEzOTkuMCwxLjIyODEwNTRFNywxMDQ4MzE5LjAsNDAxMjAxMi4wLDc1NDg0NC4wLDU2ODkyODMuMCwyLjA4NTE4MkU3LDIyMzMxNjkuMCw3MDc4NTE2LjAsNjA4ODI3LjAsNTg5NDEyMS4wLDUzNjM2NzUuMCwxODA4MzQ0LjAsNDkzNzgyLjAKKzIsV2VkIDI2IEphbiAxMSw2MjY5MzIuMCw0NDQ3MTAwLjAsMjY3MzQwMC4wLDUxMzA2MzIuMCwzLjM4NzE2NDhFNyw0MzAxMjYxLjAsMzQwNTU2NS4wLDU3MjA1OS4wLDc4MzYwMC4wLDEuNTk4MjM3OEU3LDgxODY0NTMuMCwxMjExNTM3LjAsMjkyNjMyNC4wLDEyOTM5NTMuMCwxLjI0MTkyOTNFNyw2MDgwNDg1LjAsMjY4ODQxOC4wLDQwNDE3NjkuMCw0NDY4OTc2LjAsNjM0OTA5Ny4wLDUyOTY0ODYuMCwxMjc0OTIzLjAsOTkzODQ0NC4wLDQ5MTk0NzkuMCw1NTk1MjExLjAsMjg0NDY1OC4wLDkwMjE5NS4wLDgwNDkzMTMuMCw2NDIyMDAuMCwxNzExMjYzLjAsMTIzNTc4Ni4wLDg0MTQzNTAuMCwxODE5MDQ2LjAsMTk5ODI1Ny4wLDEuODk3NjQ1N0U3LDEuMTM1MzE0RTcsMzQ1MDY1NC4wLDM0MjEzOTkuMCwxLjIyODEwNTRFNywxMDQ4MzE5LjAsNDAxMjAxMi4wLDc1NDg0NC4wLDU2ODkyODMuMCwyLjA4NTE4MkU3LDIyMzMxNjkuMCw3MDc4NTE2LjAsNjA4ODI3LjAsNTg5NDEyMS4wLDUzNjM2NzUuMCwxODA4MzQ0LjAsNDkzNzgyLjAKKzMsVGh1IDI3IEphbiAxMSw2MjY5MzIuMCw0NDQ3MTAwLjAsMjY3MzQwMC4wLDUxMzA2MzIuMCwzLjM4NzE2NDc5OTk5OTk5OUU3LDQzMDEyNjEuMCwzNDA1NTY1LjAsNTcyMDU5LjAsNzgzNjAwLjAsMS41OTgyMzc4RTcsODE4NjQ1My4wLDEyMTE1MzcuMCwyOTI2MzI0LjAsMTI5Mzk1My4wLDEuMjQxOTI5M0U3LDYwODA0ODUuMCwyNjg4NDE4LjAsNDA0MTc2OS4wLDQ0Njg5NzYuMCw2MzQ5MDk3LjAsNTI5NjQ4Ni4wLDEyNzQ5MjMuMCw5OTM4NDQ0LjAsNDkxOTQ3OS4wLDU1OTUyMTEuMCwyODQ0NjU4LjAsOTAyMTk1LjAsODA0OTMxMy4wLDY0MjIwMC4wLDE3MTEyNjMuMCwxMjM1Nzg2LjAsODQxNDM1MC4wLDE4MTkwNDYuMCwxOTk4MjU3LjAsMS44OTc2NDU3RTcsMS4xMzUzMTRFNywzNDUwNjU0LjAsMzQyMTM5OS4wLDEuMjI4MTA1NEU3LDEwNDgzMTkuMCw0MDEyMDEyLjAsNzU0ODQ0LjAsNTY4OTI4My4wLDIuMDg1MTgyRTcsMjIzMzE2OS4wLDcwNzg1MTYuMCw2MDg4MjcuMCw1ODk0MTIxLjAsNTM2MzY3NS4wLDE4MDgzNDQuMCw0OTM3ODIuMAorNCxGcmkgMjggSmFuIDExLDYyNjkzMi4wMDAwMDAwMDAxLDQ0NDcwOTkuOTk5OTk5OTk5LDI2NzM0MDAuMDAwMDAwMDAwNSw1MTMwNjMyLjAsMy4zODcxNjQ3OTk5OTk5OTlFNyw0MzAxMjYxLjAsMzQwNTU2NS4wLDU3MjA1OS4wLDc4MzU5OS45OTk5OTk5OTk5LDEuNTk4MjM3OEU3LDgxODY0NTMuMDAwMDAwMDAxLDEyMTE1MzcuMDAwMDAwMDAwMiwyOTI2MzIzLjk5OTk5OTk5OTUsMTI5Mzk1My4wLDEuMjQxOTI5Mjk5OTk5OTk5OEU3LDYwODA0ODQuOTk5OTk5OTk4LDI2ODg0MTguMCw0MDQxNzY4Ljk5OTk5OTk5OTUsNDQ2ODk3Ni4wLDYzNDkwOTcuMCw1Mjk2NDg2LjAsMTI3NDkyMi45OTk5OTk5OTk4LDk5Mzg0NDMuOTk5OTk5OTk4LDQ5MTk0NzguOTk5OTk5OTk5LDU1OTUyMTEuMDAwMDAwMDAxLDI4NDQ2NTcuOTk5OTk5OTk5NSw5MDIxOTUuMCw4MDQ5MzEzLjAsNjQyMTk5Ljk5OTk5OTk5OTksMTcxMTI2Mi45OTk5OTk5OTk4LDEyMzU3ODYuMCw4NDE0MzUwLjAsMTgxOTA0Ni4wMDAwMDAwMDAyLDE5OTgyNTcuMCwxLjg5NzY0NTdFNywxLjEzNTMxNEU3LDM0NTA2NTMuOTk5OTk5OTk5NSwzNDIxMzk5LjAsMS4yMjgxMDU0RTcsMTA0ODMxOS4wLDQwMTIwMTIuMDAwMDAwMDAwNSw3NTQ4NDQuMDAwMDAwMDAwMSw1Njg5MjgzLjAwMDAwMDAwMSwyLjA4NTE4MkU3LDIyMzMxNjkuMCw3MDc4NTE2LjAsNjA4ODI3LjAwMDAwMDAwMDEsNTg5NDEyMS4wLDUzNjM2NzUuMCwxODA4MzQ0LjAsNDkzNzgyLjAKKzUsU2F0IDI5IEphbiAxMSw2MjY5MzIuMDAwMDAwMDAwMSw0NDQ3MTAwLjAsMjY3MzQwMC4wLDUxMzA2MzIuMCwzLjM4NzE2NDc5OTk5OTk5ODVFNyw0MzAxMjYxLjAsMzQwNTU2NC45OTk5OTk5OTk1LDU3MjA1OS4wLDc4MzYwMC4wLDEuNTk4MjM3OEU3LDgxODY0NTMuMCwxMjExNTM3LjAsMjkyNjMyNC4wLDEyOTM5NTMuMCwxLjI0MTkyOTI5OTk5OTk5OThFNyw2MDgwNDg0Ljk5OTk5OTk5OSwyNjg4NDE4LjAsNDA0MTc2OS4wLDQ0Njg5NzYuMCw2MzQ5MDk2Ljk5OTk5OTk5OCw1Mjk2NDg2LjAsMTI3NDkyMi45OTk5OTk5OTk4LDk5Mzg0NDMuOTk5OTk5OTk4LDQ5MTk0NzguOTk5OTk5OTk5LDU1OTUyMTAuOTk5OTk5OTk5LDI4NDQ2NTcuOTk5OTk5OTk5NSw5MDIxOTUuMDAwMDAwMDAwMSw4MDQ5MzEzLjAsNjQyMjAwLjAsMTcxMTI2My4wLDEyMzU3ODYuMCw4NDE0MzUwLjAsMTgxOTA0Ni4wMDAwMDAwMDAyLDE5OTgyNTcuMCwxLjg5NzY0NTY5OTk5OTk5OTZFNywxLjEzNTMxNEU3LDM0NTA2NTQuMCwzNDIxMzk5LjAsMS4yMjgxMDU0RTcsMTA0ODMxOS4wLDQwMTIwMTIuMCw3NTQ4NDQuMDAwMDAwMDAwMSw1Njg5MjgzLjAsMi4wODUxODJFNywyMjMzMTY5LjAsNzA3ODUxNS45OTk5OTk5OTksNjA4ODI3LjAsNTg5NDEyMS4wLDUzNjM2NzQuOTk5OTk5OTk5LDE4MDgzNDQuMDAwMDAwMDAwMiw0OTM3ODEuOTk5OTk5OTk5OTQKKzYsU3VuIDMwIEphbiAxMSw2MjY5MzIuMDAwMDAwMDAwMiw0NDQ3MTAwLjAsMjY3MzQwMC4wLDUxMzA2MzIuMCwzLjM4NzE2NDhFNyw0MzAxMjYxLjAsMzQwNTU2NC45OTk5OTk5OTk1LDU3MjA1OS4wMDAwMDAwMDAxLDc4MzU5OS45OTk5OTk5OTk4LDEuNTk4MjM3OEU3LDgxODY0NTMuMDAwMDAwMDAxLDEyMTE1MzcuMCwyOTI2MzIzLjk5OTk5OTk5OTUsMTI5Mzk1My4wMDAwMDAwMDA1LDEuMjQxOTI5Mjk5OTk5OTk5OEU3LDYwODA0ODQuOTk5OTk5OTk5LDI2ODg0MTguMCw0MDQxNzY5LjAwMDAwMDAwMDUsNDQ2ODk3Ni4wLDYzNDkwOTYuOTk5OTk5OTk5LDUyOTY0ODYuMCwxMjc0OTIyLjk5OTk5OTk5OTgsOTkzODQ0My45OTk5OTk5OTgsNDkxOTQ3OC45OTk5OTk5OTksNTU5NTIxMS4wLDI4NDQ2NTcuOTk5OTk5OTk5LDkwMjE5NS4wLDgwNDkzMTMuMCw2NDIxOTkuOTk5OTk5OTk5OSwxNzExMjYzLjAsMTIzNTc4NS45OTk5OTk5OTk4LDg0MTQzNTAuMDAwMDAwMDAyLDE4MTkwNDYuMCwxOTk4MjU2Ljk5OTk5OTk5OTgsMS44OTc2NDU3RTcsMS4xMzUzMTRFNywzNDUwNjU0LjAwMDAwMDAwMDUsMzQyMTM5OS4wMDAwMDAwMDA1LDEuMjI4MTA1NDAwMDAwMDAwMkU3LDEwNDgzMTkuMCw0MDEyMDEyLjAsNzU0ODQ0LjAwMDAwMDAwMDEsNTY4OTI4My4wLDIuMDg1MTgyRTcsMjIzMzE2OS4wLDcwNzg1MTUuOTk5OTk5OTk5LDYwODgyNy4wLDU4OTQxMjEuMCw1MzYzNjc0Ljk5OTk5OTk5OSwxODA4MzQ0LjAsNDkzNzgyLjAKKzcsTW9uIDMxIEphbiAxMSw2MjY5MzIuMDAwMDAwMDAwMSw0NDQ3MDk5Ljk5OTk5OTk5OSwyNjczNDAwLjAsNTEzMDYzMS45OTk5OTk5OTksMy4zODcxNjQ3OTk5OTk5OTlFNyw0MzAxMjYxLjAsMzQwNTU2NS4wLDU3MjA1OS4wLDc4MzU5OS45OTk5OTk5OTk5LDEuNTk4MjM3ODAwMDAwMDAwMkU3LDgxODY0NTMuMDAwMDAwMDAxLDEyMTE1MzcuMCwyOTI2MzIzLjk5OTk5OTk5OTUsMTI5Mzk1My4wLDEuMjQxOTI5M0U3LDYwODA0ODUuMCwyNjg4NDE4LjAsNDA0MTc2OS4wMDAwMDAwMDA1LDQ0Njg5NzYuMCw2MzQ5MDk2Ljk5OTk5OTk5OSw1Mjk2NDg2LjAsMTI3NDkyMi45OTk5OTk5OTk4LDk5Mzg0NDMuOTk5OTk5OTk4LDQ5MTk0NzkuMCw1NTk1MjExLjAsMjg0NDY1OC4wLDkwMjE5NS4wMDAwMDAwMDAxLDgwNDkzMTMuMDAwMDAwMDAxLDY0MjE5OS45OTk5OTk5OTk5LDE3MTEyNjMuMDAwMDAwMDAwMiwxMjM1Nzg2LjAwMDAwMDAwMDIsODQxNDM1MC4wMDAwMDAwMDIsMTgxOTA0Ni4wLDE5OTgyNTYuOTk5OTk5OTk5OCwxLjg5NzY0NTdFNywxLjEzNTMxNDAwMDAwMDAwMDJFNywzNDUwNjU0LjAwMDAwMDAwMDUsMzQyMTM5OS4wLDEuMjI4MTA1NDAwMDAwMDAwNEU3LDEwNDgzMTguOTk5OTk5OTk5OSw0MDEyMDEyLjAwMDAwMDAwMDUsNzU0ODQ0LjAwMDAwMDAwMDEsNTY4OTI4My4wLDIuMDg1MTgyRTcsMjIzMzE2OS4wLDcwNzg1MTYuMCw2MDg4MjcuMDAwMDAwMDAwMSw1ODk0MTIxLjAsNTM2MzY3NC45OTk5OTk5OTgsMTgwODM0NC4wMDAwMDAwMDAyLDQ5Mzc4MS45OTk5OTk5OTk5NAorOCxUdWUgMSBGZWIgMTEsNjI2OTMyLjAwMDAwMDAwMDEsNDQ0NzA5OS45OTk5OTk5OTksMjY3MzQwMC4wMDAwMDAwMDA1LDUxMzA2MzIuMCwzLjM4NzE2NDc5OTk5OTk5OUU3LDQzMDEyNjEuMCwzNDA1NTY1LjAsNTcyMDU5LjAsNzgzNjAwLjAsMS41OTgyMzc4RTcsODE4NjQ1My4wMDAwMDAwMDEsMTIxMTUzNy4wLDI5MjYzMjMuOTk5OTk5OTk5NSwxMjkzOTUzLjAwMDAwMDAwMDUsMS4yNDE5MjkzRTcsNjA4MDQ4NC45OTk5OTk5OTksMjY4ODQxOC4wLDQwNDE3NjkuMDAwMDAwMDAwNSw0NDY4OTc2LjAsNjM0OTA5Ni45OTk5OTk5OTksNTI5NjQ4Ni4wMDAwMDAwMDEsMTI3NDkyMy4wLDk5Mzg0NDQuMCw0OTE5NDc4Ljk5OTk5OTk5OSw1NTk1MjExLjAsMjg0NDY1OC4wLDkwMjE5NS4wMDAwMDAwMDAxLDgwNDkzMTMuMDAwMDAwMDAxLDY0MjE5OS45OTk5OTk5OTk5LDE3MTEyNjMuMDAwMDAwMDAwMiwxMjM1Nzg2LjAsODQxNDM0OS45OTk5OTk5OTgsMTgxOTA0Ni4wLDE5OTgyNTYuOTk5OTk5OTk5OCwxLjg5NzY0NTY5OTk5OTk5OTZFNywxLjEzNTMxNDAwMDAwMDAwMDJFNywzNDUwNjU0LjAwMDAwMDAwMDUsMzQyMTM5OS4wLDEuMjI4MTA1NDAwMDAwMDAwMkU3LDEwNDgzMTguOTk5OTk5OTk5OSw0MDEyMDEyLjAsNzU0ODQ0LjAwMDAwMDAwMDEsNTY4OTI4My4wLDIuMDg1MTgyRTcsMjIzMzE2OS4wLDcwNzg1MTUuOTk5OTk5OTk5LDYwODgyNy4wMDAwMDAwMDAyLDU4OTQxMjEuMDAwMDAwMDAxLDUzNjM2NzQuOTk5OTk5OTk5LDE4MDgzNDQuMDAwMDAwMDAwMiw0OTM3ODEuOTk5OTk5OTk5OTQKKzksV2VkIDIgRmViIDExLDYyNjkzMi4wLDQ0NDcxMDAuMCwyNjczNDAwLjAwMDAwMDAwMDUsNTEzMDYzMi4wLDMuMzg3MTY0Nzk5OTk5OTk5RTcsNDMwMTI2MC45OTk5OTk5OTksMzQwNTU2NS4wMDAwMDAwMDA1LDU3MjA1OS4wLDc4MzYwMC4wLDEuNTk4MjM3OEU3LDgxODY0NTMuMDAwMDAwMDAxLDEyMTE1MzcuMDAwMDAwMDAwMiwyOTI2MzIzLjk5OTk5OTk5OTUsMTI5Mzk1My4wLDEuMjQxOTI5M0U3LDYwODA0ODQuOTk5OTk5OTk5LDI2ODg0MTguMDAwMDAwMDAwNSw0MDQxNzY5LjAwMDAwMDAwMSw0NDY4OTc2LjAsNjM0OTA5Ni45OTk5OTk5OTksNTI5NjQ4Ni4wLDEyNzQ5MjMuMCw5OTM4NDQzLjk5OTk5OTk5OCw0OTE5NDc4Ljk5OTk5OTk5OCw1NTk1MjEwLjk5OTk5OTk5OSwyODQ0NjU4LjAsOTAyMTk1LjAwMDAwMDAwMDEsODA0OTMxMy4wMDAwMDAwMDIsNjQyMTk5Ljk5OTk5OTk5OTksMTcxMTI2My4wMDAwMDAwMDAyLDEyMzU3ODYuMDAwMDAwMDAwMiw4NDE0MzQ5Ljk5OTk5OTk5OCwxODE5MDQ1Ljk5OTk5OTk5OTgsMTk5ODI1Ni45OTk5OTk5OTk4LDEuODk3NjQ1Njk5OTk5OTk5NkU3LDEuMTM1MzE0MDAwMDAwMDAwMkU3LDM0NTA2NTQuMCwzNDIxMzk5LjAsMS4yMjgxMDU0MDAwMDAwMDA0RTcsMTA0ODMxOS4wLDQwMTIwMTIuMCw3NTQ4NDQuMDAwMDAwMDAwMSw1Njg5MjgyLjk5OTk5OTk5OSwyLjA4NTE4MkU3LDIyMzMxNjguOTk5OTk5OTk5NSw3MDc4NTE2LjAsNjA4ODI3LjAwMDAwMDAwMDEsNTg5NDEyMS4wMDAwMDAwMDEsNTM2MzY3NC45OTk5OTk5OTksMTgwODM0NC4wLDQ5Mzc4MS45OTk5OTk5OTk5NAorMTAsVGh1IDMgRmViIDExLDYyNjkzMi4wMDAwMDAwMDAxLDQ0NDcxMDAuMCwyNjczNDAwLjAwMDAwMDAwMDUsNTEzMDYzMS45OTk5OTk5OTksMy4zODcxNjQ3OTk5OTk5OTlFNyw0MzAxMjYxLjAsMzQwNTU2NC45OTk5OTk5OTk1LDU3MjA1OC45OTk5OTk5OTk5LDc4MzU5OS45OTk5OTk5OTk5LDEuNTk4MjM3OEU3LDgxODY0NTMuMDAwMDAwMDAxLDEyMTE1MzcuMDAwMDAwMDAwMiwyOTI2MzIzLjk5OTk5OTk5OTUsMTI5Mzk1My4wMDAwMDAwMDAyLDEuMjQxOTI5M0U3LDYwODA0ODQuOTk5OTk5OTk5LDI2ODg0MTguMDAwMDAwMDAwNSw0MDQxNzY5LjAwMDAwMDAwMDUsNDQ2ODk3Ni4wLDYzNDkwOTYuOTk5OTk5OTk5LDUyOTY0ODYuMCwxMjc0OTIzLjAsOTkzODQ0NC4wLDQ5MTk0NzguOTk5OTk5OTk5LDU1OTUyMTEuMCwyODQ0NjU4LjAsOTAyMTk1LjAwMDAwMDAwMDEsODA0OTMxMy4wMDAwMDAwMDEsNjQyMTk5Ljk5OTk5OTk5OTksMTcxMTI2My4wMDAwMDAwMDAyLDEyMzU3ODYuMCw4NDE0MzUwLjAsMTgxOTA0NS45OTk5OTk5OTk4LDE5OTgyNTYuOTk5OTk5OTk5OCwxLjg5NzY0NTY5OTk5OTk5OTZFNywxLjEzNTMxNDAwMDAwMDAwMDJFNywzNDUwNjU0LjAsMzQyMTM5OS4wLDEuMjI4MTA1NDAwMDAwMDAwNEU3LDEwNDgzMTkuMCw0MDEyMDEyLjAsNzU0ODQ0LjAwMDAwMDAwMDEsNTY4OTI4Mi45OTk5OTk5OTksMi4wODUxODJFNywyMjMzMTY5LjAsNzA3ODUxNi4wLDYwODgyNy4wLDU4OTQxMjEuMCw1MzYzNjc0Ljk5OTk5OTk5OSwxODA4MzQ0LjAwMDAwMDAwMDIsNDkzNzgxLjk5OTk5OTk5OTk0CisxMSxGcmkgNCBGZWIgMTEsNjI2OTMyLjAwMDAwMDAwMDEsNDQ0NzA5OS45OTk5OTk5OTksMjY3MzQwMC4wMDAwMDAwMDA1LDUxMzA2MzEuOTk5OTk5OTk5LDMuMzg3MTY0Nzk5OTk5OTk5RTcsNDMwMTI2MC45OTk5OTk5OTksMzQwNTU2NS4wMDAwMDAwMDA1LDU3MjA1OS4wLDc4MzU5OS45OTk5OTk5OTk5LDEuNTk4MjM3OEU3LDgxODY0NTMuMDAwMDAwMDAxLDEyMTE1MzYuOTk5OTk5OTk5OCwyOTI2MzIzLjk5OTk5OTk5OTUsMTI5Mzk1My4wLDEuMjQxOTI5Mjk5OTk5OTk5OEU3LDYwODA0ODQuOTk5OTk5OTk5LDI2ODg0MTguMDAwMDAwMDAwNSw0MDQxNzY5LjAwMDAwMDAwMDUsNDQ2ODk3Ni4wLDYzNDkwOTYuOTk5OTk5OTk4LDUyOTY0ODUuOTk5OTk5OTk5LDEyNzQ5MjMuMCw5OTM4NDQzLjk5OTk5OTk5OCw0OTE5NDc4Ljk5OTk5OTk5OSw1NTk1MjEwLjk5OTk5OTk5OSwyODQ0NjU4LjAsOTAyMTk1LjAwMDAwMDAwMDEsODA0OTMxMy4wMDAwMDAwMDIsNjQyMTk5Ljk5OTk5OTk5OTksMTcxMTI2My4wMDAwMDAwMDA1LDEyMzU3ODYuMCw4NDE0MzQ5Ljk5OTk5OTk5OCwxODE5MDQ2LjAsMTk5ODI1Ni45OTk5OTk5OTk1LDEuODk3NjQ1Njk5OTk5OTk5M0U3LDEuMTM1MzE0MDAwMDAwMDAwMkU3LDM0NTA2NTMuOTk5OTk5OTk5NSwzNDIxMzk5LjAsMS4yMjgxMDU0MDAwMDAwMDA2RTcsMTA0ODMxOC45OTk5OTk5OTk5LDQwMTIwMTIuMDAwMDAwMDAwNSw3NTQ4NDQuMDAwMDAwMDAwMSw1Njg5MjgzLjAsMi4wODUxODJFNywyMjMzMTY4Ljk5OTk5OTk5OTUsNzA3ODUxNi4wLDYwODgyNy4wMDAwMDAwMDAxLDU4OTQxMjEuMDAwMDAwMDAxLDUzNjM2NzQuOTk5OTk5OTk5LDE4MDgzNDQuMDAwMDAwMDAwMiw0OTM3ODIuMAorMTIsU2F0IDUgRmViIDExLDYyNjkzMi4wLDQ0NDcxMDAuMCwyNjczNDAwLjAwMDAwMDAwMDUsNTEzMDYzMS45OTk5OTk5OTksMy4zODcxNjQ4RTcsNDMwMTI2MC45OTk5OTk5OTksMzQwNTU2NS4wLDU3MjA1OS4wLDc4MzU5OS45OTk5OTk5OTk5LDEuNTk4MjM3OEU3LDgxODY0NTMuMDAwMDAwMDAxLDEyMTE1MzcuMDAwMDAwMDAwMiwyOTI2MzI0LjAsMTI5Mzk1My4wMDAwMDAwMDAyLDEuMjQxOTI5Mjk5OTk5OTk5OEU3LDYwODA0ODQuOTk5OTk5OTk5LDI2ODg0MTguMDAwMDAwMDAxLDQwNDE3NjkuMCw0NDY4OTc2LjAwMDAwMDAwMSw2MzQ5MDk2Ljk5OTk5OTk5OSw1Mjk2NDg2LjAwMDAwMDAwMSwxMjc0OTIzLjAsOTkzODQ0NC4wLDQ5MTk0NzguOTk5OTk5OTk5LDU1OTUyMTEuMCwyODQ0NjU3Ljk5OTk5OTk5OTUsOTAyMTk1LjAwMDAwMDAwMDIsODA0OTMxMy4wMDAwMDAwMDEsNjQyMTk5Ljk5OTk5OTk5OTksMTcxMTI2My4wMDAwMDAwMDA1LDEyMzU3ODYuMCw4NDE0MzUwLjAsMTgxOTA0NS45OTk5OTk5OTk4LDE5OTgyNTYuOTk5OTk5OTk5NSwxLjg5NzY0NTY5OTk5OTk5OTZFNywxLjEzNTMxNDAwMDAwMDAwMDJFNywzNDUwNjUzLjk5OTk5OTk5OTUsMzQyMTM5OC45OTk5OTk5OTk1LDEuMjI4MTA1NDAwMDAwMDAwNEU3LDEwNDgzMTkuMCw0MDEyMDEyLjAwMDAwMDAwMDUsNzU0ODQ0LjAsNTY4OTI4Mi45OTk5OTk5OTgsMi4wODUxODE5OTk5OTk5OTk2RTcsMjIzMzE2OC45OTk5OTk5OTk1LDcwNzg1MTYuMCw2MDg4MjcuMDAwMDAwMDAwMiw1ODk0MTIxLjAsNTM2MzY3NC45OTk5OTk5OTksMTgwODM0NC4wMDAwMDAwMDAyLDQ5Mzc4MS45OTk5OTk5OTk5NAorMTMsU3VuIDYgRmViIDExLDYyNjkzMi4wLDQ0NDcwOTkuOTk5OTk5OTk5LDI2NzM0MDAuMDAwMDAwMDAwNSw1MTMwNjMxLjk5OTk5OTk5OSwzLjM4NzE2NDc5OTk5OTk5OUU3LDQzMDEyNjAuOTk5OTk5OTk5LDM0MDU1NjQuOTk5OTk5OTk5NSw1NzIwNTkuMCw3ODM1OTkuOTk5OTk5OTk5OCwxLjU5ODIzNzhFNyw4MTg2NDUzLjAwMDAwMDAwMSwxMjExNTM3LjAsMjkyNjMyMy45OTk5OTk5OTk1LDEyOTM5NTMuMDAwMDAwMDAwMiwxLjI0MTkyOTNFNyw2MDgwNDg0Ljk5OTk5OTk5OCwyNjg4NDE4LjAwMDAwMDAwMTQsNDA0MTc2OS4wLDQ0Njg5NzYuMDAwMDAwMDAxLDYzNDkwOTYuOTk5OTk5OTk3LDUyOTY0ODYuMDAwMDAwMDAxLDEyNzQ5MjMuMDAwMDAwMDAwNSw5OTM4NDQzLjk5OTk5OTk5OCw0OTE5NDc4Ljk5OTk5OTk5OCw1NTk1MjExLjAwMDAwMDAwMiwyODQ0NjU3Ljk5OTk5OTk5OSw5MDIxOTUuMCw4MDQ5MzEzLjAwMDAwMDAwMiw2NDIyMDAuMCwxNzExMjYzLjAsMTIzNTc4NS45OTk5OTk5OTk4LDg0MTQzNDkuOTk5OTk5OTk4LDE4MTkwNDUuOTk5OTk5OTk5OCwxOTk4MjU3LjAsMS44OTc2NDU2OTk5OTk5OTkzRTcsMS4xMzUzMTQwMDAwMDAwMDAyRTcsMzQ1MDY1NC4wLDM0MjEzOTguOTk5OTk5OTk5LDEuMjI4MTA1NDAwMDAwMDAwNkU3LDEwNDgzMTguOTk5OTk5OTk5OSw0MDEyMDEyLjAwMDAwMDAwMDUsNzU0ODQzLjk5OTk5OTk5OTksNTY4OTI4Mi45OTk5OTk5OTcsMi4wODUxODJFNywyMjMzMTY4Ljk5OTk5OTk5OTUsNzA3ODUxNS45OTk5OTk5OTksNjA4ODI3LjAwMDAwMDAwMDEsNTg5NDEyMC45OTk5OTk5OTksNTM2MzY3NC45OTk5OTk5OTcsMTgwODM0My45OTk5OTk5OTk4LDQ5Mzc4MS45OTk5OTk5OTk5NAorMTQsTW9uIDcgRmViIDExLDYyNjkzMi4wLDQ0NDcxMDAuMCwyNjczNDAwLjAwMDAwMDAwMDUsNTEzMDYzMS45OTk5OTk5OTksMy4zODcxNjQ3OTk5OTk5OTlFNyw0MzAxMjYwLjk5OTk5OTk5OCwzNDA1NTY0Ljk5OTk5OTk5OTUsNTcyMDU5LjAsNzgzNTk5Ljk5OTk5OTk5OTcsMS41OTgyMzc4RTcsODE4NjQ1My4wLDEyMTE1MzcuMCwyOTI2MzIzLjk5OTk5OTk5OTUsMTI5Mzk1My4wLDEuMjQxOTI5Mjk5OTk5OTk5OEU3LDYwODA0ODQuOTk5OTk5OTk5LDI2ODg0MTguMDAwMDAwMDAxNCw0MDQxNzY4Ljk5OTk5OTk5OTUsNDQ2ODk3Ni4wMDAwMDAwMDEsNjM0OTA5Ni45OTk5OTk5OTYsNTI5NjQ4Ni4wLDEyNzQ5MjMuMDAwMDAwMDAwMiw5OTM4NDQzLjk5OTk5OTk5Niw0OTE5NDc4Ljk5OTk5OTk5OSw1NTk1MjExLjAsMjg0NDY1OC4wLDkwMjE5NS4wLDgwNDkzMTMuMDAwMDAwMDAyLDY0MjIwMC4wLDE3MTEyNjMuMCwxMjM1Nzg2LjAsODQxNDM0OS45OTk5OTk5OTgsMTgxOTA0Ni4wLDE5OTgyNTcuMCwxLjg5NzY0NTY5OTk5OTk5OTNFNywxLjEzNTMxNEU3LDM0NTA2NTMuOTk5OTk5OTk5NSwzNDIxMzk4Ljk5OTk5OTk5OTUsMS4yMjgxMDU0MDAwMDAwMDA3RTcsMTA0ODMxOC45OTk5OTk5OTk5LDQwMTIwMTIuMDAwMDAwMDAwNSw3NTQ4NDMuOTk5OTk5OTk5OCw1Njg5MjgyLjk5OTk5OTk5OCwyLjA4NTE4MkU3LDIyMzMxNjguOTk5OTk5OTk5NSw3MDc4NTE1Ljk5OTk5OTk5OSw2MDg4MjcuMCw1ODk0MTIwLjk5OTk5OTk5OSw1MzYzNjc0Ljk5OTk5OTk5NywxODA4MzQ0LjAwMDAwMDAwMDIsNDkzNzgxLjk5OTk5OTk5OTkKKzE1LFR1ZSA4IEZlYiAxMSw2MjY5MzIuMCw0NDQ3MTAwLjAsMjY3MzQwMC4wMDAwMDAwMDEsNTEzMDYzMS45OTk5OTk5OTksMy4zODcxNjQ3OTk5OTk5OTlFNyw0MzAxMjYwLjk5OTk5OTk5OSwzNDA1NTY0Ljk5OTk5OTk5OSw1NzIwNTkuMCw3ODM1OTkuOTk5OTk5OTk5OSwxLjU5ODIzNzhFNyw4MTg2NDUzLjAsMTIxMTUzNy4wMDAwMDAwMDAyLDI5MjYzMjMuOTk5OTk5OTk5LDEyOTM5NTMuMDAwMDAwMDAwMiwxLjI0MTkyOTNFNyw2MDgwNDg0Ljk5OTk5OTk5OCwyNjg4NDE4LjAwMDAwMDAwMTQsNDA0MTc2OS4wLDQ0Njg5NzYuMDAwMDAwMDAyLDYzNDkwOTYuOTk5OTk5OTk3LDUyOTY0ODYuMDAwMDAwMDAyLDEyNzQ5MjMuMDAwMDAwMDAwNSw5OTM4NDQzLjk5OTk5OTk5Niw0OTE5NDc4Ljk5OTk5OTk5OSw1NTk1MjExLjAsMjg0NDY1Ny45OTk5OTk5OTk1LDkwMjE5NS4wLDgwNDkzMTMuMDAwMDAwMDAyLDY0MjIwMC4wLDE3MTEyNjMuMCwxMjM1Nzg2LjAsODQxNDM0OS45OTk5OTk5OTgsMTgxOTA0Ni4wLDE5OTgyNTcuMCwxLjg5NzY0NTY5OTk5OTk5OUU3LDEuMTM1MzE0RTcsMzQ1MDY1My45OTk5OTk5OTksMzQyMTM5OC45OTk5OTk5OTksMS4yMjgxMDU0MDAwMDAwMDA2RTcsMTA0ODMxOC45OTk5OTk5OTk4LDQwMTIwMTIuMDAwMDAwMDAxNCw3NTQ4NDQuMCw1Njg5MjgyLjk5OTk5OTk5OCwyLjA4NTE4MkU3LDIyMzMxNjguOTk5OTk5OTk5NSw3MDc4NTE2LjAwMDAwMDAwMSw2MDg4MjcuMCw1ODk0MTIxLjAsNTM2MzY3NC45OTk5OTk5OTYsMTgwODM0NC4wMDAwMDAwMDA1LDQ5Mzc4MS45OTk5OTk5OTk5NAorMTYsV2VkIDkgRmViIDExLDYyNjkzMi4wMDAwMDAwMDAxLDQ0NDcxMDAuMCwyNjczNDAwLjAwMDAwMDAwMSw1MTMwNjMxLjk5OTk5OTk5OCwzLjM4NzE2NDc5OTk5OTk5OUU3LDQzMDEyNjAuOTk5OTk5OTk5LDM0MDU1NjQuOTk5OTk5OTk5LDU3MjA1OS4wLDc4MzU5OS45OTk5OTk5OTk5LDEuNTk4MjM3OEU3LDgxODY0NTMuMCwxMjExNTM3LjAwMDAwMDAwMDIsMjkyNjMyNC4wMDAwNjcxMjIzLDEyOTM5NTMuMDAwMDAwMDAwNSwxLjI0MTkyOTNFNyw2MDgwNDg0Ljk5OTk5OTk5OSwyNjg4NDE4LjAwMDAwMDAwMTQsNDA0MTc2OS4wLDQ0Njg5NzYuMCw2MzQ5MDk2Ljk5OTk5OTk5OCw1Mjk2NDg2LjAwMDAwMDAwMSwxMjc0OTIzLjAwMDAwMDAwMDIsOTkzODQ0My45OTk5OTk5OTYsNDkxOTQ3OC45OTk5OTk5OTgsNTU5NTIxMS4wLDI4NDQ2NTguMCw5MDIxOTQuOTk5OTk5OTk5OSw4MDQ5MzEzLjAsNjQyMjAwLjAsMTcxMTI2Mi45OTk5OTk5OTk4LDEyMzU3ODYuMCw4NDE0MzQ5Ljk5OTk5OTk5OCwxODE5MDQ2LjAwMDAwMDAwMDIsMTk5ODI1Ny4wLDEuODk3NjQ1Njk5OTk5OTk5RTcsMS4xMzUzMTM5OTk5OTk5OTk4RTcsMzQ1MDY1My45OTk5OTk5OTgsMzQyMTM5OC45OTk5OTk5OTksMS4yMjgxMDU0MDAwMDAwMDA3RTcsMTA0ODMxOC45OTk5OTk5OTk4LDQwMTIwMTIuMDAwMDAwMDAxNCw3NTQ4NDQuMCw1Njg5MjgyLjk5OTk5OTk5OCwyLjA4NTE4MkU3LDIyMzMxNjguOTk5OTk5OTk5NSw3MDc4NTE2LjAsNjA4ODI3LjAwMDAwMDAwMDIsNTg5NDEyMC45OTk5OTk5OTksNTM2MzY3NC45OTk5OTk5OTYsMTgwODM0NC4wMDAwMDAwMDA1LDQ5Mzc4MS45OTk5OTk5OTk5CisxNyxUaHUgMTAgRmViIDExLDYyNjkzMi4wMDAwNDA2NjkyLDQ0NDcxMDAuMDAwMDQ0ODQzLDI2NzM0MDAuMDAwMDMyMTg4NCw1MTMwNjMyLjAwMDM1Mjg1MiwzLjM4NzE2NDgwMDI0MDQ0NjZFNyw0MzAxMjYxLjAwMDM2ODQ5LDM0MDU1NjUuMDAwMDU1ODIzLDU3MjA1OS4wMDAxMzg4Mjk2LDc4MzYwMC4wMDAwMDAwNTU2LDEuNTk4MjM3ODAwMDk3NzIxOEU3LDgxODY0NTMuMDAwNjQwMTk0LDEyMTE1MzcuMDAwMTUwMjY5MSwyOTI2MzI0LjAwMDA5MzUwNjYsMTI5Mzk1My4wMDAwMzEzMjQzLDEuMjQxOTI5MzAwMDcxNzUxN0U3LDYwODA0ODUuMDAwMDgwNTAyLDI2ODg0MTguMDAwMDE0NDQzNCw0MDQxNzY5LjAwMDAzOTkxLDQ0Njg5NzYuMDAwMDcyNTg5LDYzNDkwOTcuMDAwMjE4OTkxLDUyOTY0ODYuMDAwMTYyNTYyLDEyNzQ5MjMuMDAwMDE5MDY2LDk5Mzg0NDQuMDAwMzAwOTg5LDQ5MTk0NzkuMDAwMjY1NjU0LDU1OTUyMTEuMDAwMTk4ODYzLDI4NDQ2NTguMDAwMDIxMjY2LDkwMjE5NS4wMDAwMjE5MzEyLDgwNDkzMTMuMDAwMzE3ODUxLDY0MjIwMC4wMDAwMTA2OTQxLDE3MTEyNjMuMDAwMDM2NjM1MiwxMjM1Nzg2LjAwMDAzMTE3OCw4NDE0MzUwLjAwMDI4NTU4LDE4MTkwNDYuMDAwMDQ5ODUzMiwxOTk4MjU3LjAwMDM3MjI0NDMsMS44OTc2NDU3MDAwNjQyNjQyRTcsMS4xMzUzMTQwMDAwMjkzNTcyRTcsMzQ1MDY1NC4wMDAwNTU5NzksMzQyMTM5OS4wMDAxMTgwMDY1LDEuMjI4MTA1NDAwMDMzMjYzMUU3LDEwNDgzMTkuMDAwMDQwNDkzLDQwMTIwMTIuMDAwMDUxNjkxLDc1NDg0NC4wMDAwMTA0Njg2LDU2ODkyODMuMDAwMTc4ODE4LDIuMDg1MTgyMDAwMDkwNTlFNywyMjMzMTY5LjAwMDE1ODU5MDMsNzA3ODUxNi4wMDAyNDM0OTEsNjA4ODI3LjAwMDAxMDk5Myw1ODk0MTIxLjAwMDI0Njc4LDUzNjM2NzUuMDAwMDg3MjQ1LDE4MDgzNDQuMDAwMDA1OTk1NCw0OTM3ODIuMDAwMDA3NzQzOQorMTgsRnJpIDExIEZlYiAxMSw2MjY5MzIuMDAwMDQwNjY5Miw0NDQ3MTAwLjAwMDA0NDg0MywyNjczNDAwLjAwMDAzMjE4ODQsNTEzMDYzMi4wMDAzNTI4NTIsMy4zODcxNjQ4MDAyNDA0NDY2RTcsNDMwMTI2MS4wMDAzNjg0OTEsMzQwNTU2NS4wMDAwNTU4MjMsNTcyMDU5LjAwMDEzODgyOTYsNzgzNjAwLjAwMDAwMDA1NTYsMS41OTgyMzc4MDAwOTc3MjE4RTcsODE4NjQ1My4wMDA2NDAxOTUsMTIxMTUzNy4wMDAxNTAyNjkxLDI5MjYzMjQuMDAwMDkzNTA2NiwxMjkzOTUzLjAwMDAzMTMyNDMsMS4yNDE5MjkzMDAwNzE3NTE3RTcsNjA4MDQ4NS4wMDAwODA1MDIsMjY4ODQxOC4wMDAwMTQ0NDM0LDQwNDE3NjkuMDAwMDM5OTEsNDQ2ODk3Ni4wMDAwNzI1ODksNjM0OTA5Ny4wMDAyMTg5OTIsNTI5NjQ4Ni4wMDAxNjI1NjIsMTI3NDkyMy4wMDAwMTkwNjYsOTkzODQ0NC4wMDAzMDA5ODksNDkxOTQ3OS4wMDAyNjU2NTMsNTU5NTIxMS4wMDAxOTg4NjMsMjg0NDY1OC4wMDAwMjEyNjYzLDkwMjE5NS4wMDAwMjE5MzEyLDgwNDkzMTMuMDAwMzE3ODUxLDY0MjIwMC4wMDAwMTA2OTQzLDE3MTEyNjMuMDAwMDM2NjM1LDEyMzU3ODYuMDAwMDMxMTc4LDg0MTQzNTAuMDAwMjg1NTgsMTgxOTA0Ni4wMDAwNDk4NTM1LDE5OTgyNTcuMDAwMzcyMjQ0LDEuODk3NjQ1NzAwMDY0MjY0MkU3LDEuMTM1MzE0MDAwMDI5MzU3M0U3LDM0NTA2NTQuMDAwMDU1OTc5LDM0MjEzOTkuMDAwMTE4MDA2LDEuMjI4MTA1NDAwMDMzMjYzM0U3LDEwNDgzMTkuMDAwMDQwNDkyOSw0MDEyMDEyLjAwMDA1MTY5MSw3NTQ4NDQuMDAwMDEwNDY4NSw1Njg5MjgzLjAwMDE3ODgxOCwyLjA4NTE4MjAwMDA5MDU5RTcsMjIzMzE2OS4wMDAxNTg1OTAzLDcwNzg1MTYuMDAwMjQzNDkyLDYwODgyNy4wMDAwMTA5OTMsNTg5NDEyMS4wMDAyNDY3OCw1MzYzNjc1LjAwMDA4NzI0NiwxODA4MzQ0LjAwMDAwNTk5NTYsNDkzNzgyLjAwMDAwNzc0MzgzCisxOSxTYXQgMTIgRmViIDExLDYyNjkzMi4wMDAwNDA4NzUyLDQ0NDcxMDAuMDAwMDQ1MDgsMjY3MzQwMC4wMDAwMzIzNTgzLDUxMzA2MzIuMDAwMzU0NjMyLDMuMzg3MTY0ODAwMjQwNjlFNyw0MzAxMjYxLjAwMDM3MDMyMiwzNDA1NTY1LjAwMDA1NjExOCw1NzIwNTkuMDAwMTM5NDU1Myw3ODM2MDAuMDAwMDAwMDU2NywxLjU5ODIzNzgwMDA5ODIxODZFNyw4MTg2NDUzLjAwMDY0MzM5NywxMjExNTM3LjAwMDE1MDk5NDQsMjkyNjMyNC4wMDAwOTM2NDk2LDEyOTM5NTMuMDAwMDMxNDg5MiwxLjI0MTkyOTMwMDA3MjExNzVFNyw2MDgwNDg1LjAwMDA4MDkyOCwyNjg4NDE4LjAwMDAxNDUxMzMsNDA0MTc2OS4wMDAwNDAxMjEsNDQ2ODk3Ni4wMDAwNzI5NzQsNjM0OTA5Ny4wMDAyMjAxMzUsNTI5NjQ4Ni4wMDAxNjM0MTQsMTI3NDkyMy4wMDAwMTkxNjY5LDk5Mzg0NDQuMDAwMzAyNTY2LDQ5MTk0NzkuMDAwMjY3MDEzLDU1OTUyMTEuMDAwMTk5OTAxLDI4NDQ2NTguMDAwMDIxMzc5NCw5MDIxOTUuMDAwMDIyMDQ2OSw4MDQ5MzEzLjAwMDMxOTUsNjQyMjAwLjAwMDAxMDc1MSwxNzExMjYzLjAwMDAzNjgyODIsMTIzNTc4Ni4wMDAwMzEzNDIsODQxNDM1MC4wMDAyODcwNywxODE5MDQ2LjAwMDA1MDExNTIsMTk5ODI1Ny4wMDAzNzM5NzE0LDEuODk3NjQ1NzAwMDY0NkU3LDEuMTM1MzE0MDAwMDI5NTExN0U3LDM0NTA2NTQuMDAwMDU2Mjc1LDM0MjEzOTkuMDAwMTE4NjIyNiwxLjIyODEwNTQwMDAzMzQzNzhFNywxMDQ4MzE5LjAwMDA0MDcwMzMsNDAxMjAxMi4wMDAwNTE5NjUsNzU0ODQ0LjAwMDAxMDUyNCw1Njg5MjgzLjAwMDE3OTc1MywyLjA4NTE4MjAwMDA5MTA1ODRFNywyMjMzMTY5LjAwMDE1OTM4OSw3MDc4NTE2LjAwMDI0NDc2Myw2MDg4MjcuMDAwMDExMDUxMSw1ODk0MTIxLjAwMDI0ODA1OCw1MzYzNjc1LjAwMDA4NzcwNiwxODA4MzQ0LjAwMDAwNjAyOTQsNDkzNzgyLjAwMDAwNzc4NDg3CisyMCxTdW4gMTMgRmViIDExLDYyNjkzMi4wMDAwNDA4NzUyLDQ0NDcxMDAuMDAwMDQ1MDgsMjY3MzQwMC4wMDAwMzIzNTksNTEzMDYzMi4wMDAzNTQ2MzMsMy4zODcxNjQ4MDAyNDA2OUU3LDQzMDEyNjEuMDAwMzcwMzIxLDM0MDU1NjUuMDAwMDU2MTE4Miw1NzIwNTkuMDAwMTM5NDU1Myw3ODM2MDAuMDAwMDAwMDU2NiwxLjU5ODIzNzgwMDA5ODIxODZFNyw4MTg2NDUzLjAwMDY0MzM5OCwxMjExNTM3LjAwMDE1MDk5NDQsMjkyNjMyNC4wMDAwOTM2NDksMTI5Mzk1My4wMDAwMzE0ODkyLDEuMjQxOTI5MzAwMDcyMTE3NUU3LDYwODA0ODUuMDAwMDgwOTI4LDI2ODg0MTguMDAwMDE0NTEzNyw0MDQxNzY5LjAwMDA0MDEyMDQsNDQ2ODk3Ni4wMDAwNzI5NzQsNjM0OTA5Ny4wMDAyMjAxMzYsNTI5NjQ4Ni4wMDAxNjM0MTQ1LDEyNzQ5MjMuMDAwMDE5MTY2OSw5OTM4NDQ0LjAwMDMwMjU2Niw0OTE5NDc5LjAwMDI2NzAxMyw1NTk1MjExLjAwMDE5OTksMjg0NDY1OC4wMDAwMjEzNzksOTAyMTk1LjAwMDAyMjA0NjcsODA0OTMxMy4wMDAzMTk1MDEsNjQyMjAwLjAwMDAxMDc1MDgsMTcxMTI2My4wMDAwMzY4MjgyLDEyMzU3ODYuMDAwMDMxMzQyLDg0MTQzNTAuMDAwMjg3MDcsMTgxOTA0Ni4wMDAwNTAxMTU0LDE5OTgyNTcuMDAwMzczOTcxNCwxLjg5NzY0NTcwMDA2NDZFNywxLjEzNTMxNDAwMDAyOTUxMTdFNywzNDUwNjU0LjAwMDA1NjI3NTYsMzQyMTM5OS4wMDAxMTg2MjIsMS4yMjgxMDU0MDAwMzM0Mzc4RTcsMTA0ODMxOS4wMDAwNDA3MDMzLDQwMTIwMTIuMDAwMDUxOTY1LDc1NDg0NC4wMDAwMTA1MjQxLDU2ODkyODMuMDAwMTc5NzU0LDIuMDg1MTgyMDAwMDkxMDU4NEU3LDIyMzMxNjkuMDAwMTU5Mzg5LDcwNzg1MTYuMDAwMjQ0NzYyLDYwODgyNy4wMDAwMTEwNTExLDU4OTQxMjEuMDAwMjQ4MDU4LDUzNjM2NzUuMDAwMDg3NzA3LDE4MDgzNDQuMDAwMDA2MDI5NCw0OTM3ODIuMDAwMDA3Nzg0OAorMjEsTW9uIDE0IEZlYiAxMSw2MjY5MzIuMDAwMDQwODc1Nyw0NDQ3MTAwLjAwMDA0NTA4MSwyNjczNDAwLjAwMDAzMjM1OTMsNTEzMDYzMi4wMDAzNTQ2MzYsMy4zODcxNjQ4MDAyNDA2OTFFNyw0MzAxMjYxLjAwMDM3MDMyNTUsMzQwNTU2NS4wMDAwNTYxMTg3LDU3MjA1OS4wMDAxMzk0NTY5LDc4MzYwMC4wMDAwMDAwNTY3LDEuNTk4MjM3ODAwMDk4MjE5OUU3LDgxODY0NTMuMDAwNjQzNDA2LDEyMTE1MzcuMDAwMTUwOTk2MywyOTI2MzI0LjAwMDA5MzY1LDEyOTM5NTMuMDAwMDMxNDg5OSwxLjI0MTkyOTMwMDA3MjExODVFNyw2MDgwNDg1LjAwMDA4MDkyOCwyNjg4NDE4LjAwMDAxNDUxMzcsNDA0MTc2OS4wMDAwNDAxMjE0LDQ0Njg5NzYuMDAwMDcyOTc2LDYzNDkwOTcuMDAwMjIwMTM5LDUyOTY0ODYuMDAwMTYzNDE2LDEyNzQ5MjMuMDAwMDE5MTY2OSw5OTM4NDQ0LjAwMDMwMjU3LDQ5MTk0NzkuMDAwMjY3MDE3LDU1OTUyMTEuMDAwMTk5OTAzLDI4NDQ2NTguMDAwMDIxMzc5NCw5MDIxOTUuMDAwMDIyMDQ3MSw4MDQ5MzEzLjAwMDMxOTUwNSw2NDIyMDAuMDAwMDEwNzUxLDE3MTEyNjMuMDAwMDM2ODI4NywxMjM1Nzg2LjAwMDAzMTM0MjMsODQxNDM1MC4wMDAyODcwNzYsMTgxOTA0Ni4wMDAwNTAxMTYsMTk5ODI1Ny4wMDAzNzM5NzU4LDEuODk3NjQ1NzAwMDY0NjAxRTcsMS4xMzUzMTQwMDAwMjk1MTIzRTcsMzQ1MDY1NC4wMDAwNTYyNzY2LDM0MjEzOTkuMDAwMTE4NjIzNSwxLjIyODEwNTQwMDAzMzQzODRFNywxMDQ4MzE5LjAwMDA0MDcwMzksNDAxMjAxMi4wMDAwNTE5NjU1LDc1NDg0NC4wMDAwMTA1MjQxLDU2ODkyODMuMDAwMTc5NzU1NSwyLjA4NTE4MjAwMDA5MTA2RTcsMjIzMzE2OS4wMDAxNTkzOTA3LDcwNzg1MTYuMDAwMjQ0NzY2LDYwODgyNy4wMDAwMTEwNTEyLDU4OTQxMjEuMDAwMjQ4MDYxNSw1MzYzNjc1LjAwMDA4NzcwOSwxODA4MzQ0LjAwMDAwNjAyOTYsNDkzNzgyLjAwMDAwNzc4NQorMjIsVHVlIDE1IEZlYiAxMSw2MjY5MzIuMDAwMDQwODc1Nyw0NDQ3MTAwLjAwMDA0NTA4LDI2NzM0MDAuMDAwMDMyMzU5Myw1MTMwNjMyLjAwMDM1NDYzNywzLjM4NzE2NDgwMDI0MDY5MUU3LDQzMDEyNjEuMDAwMzcwMzI1NSwzNDA1NTY1LjAwMDA1NjExOSw1NzIwNTkuMDAwMTM5NDU2OSw3ODM2MDAuMDAwMDAwMDU2NywxLjU5ODIzNzgwMDA5ODIyRTcsODE4NjQ1My4wMDA2NDM0MDYsMTIxMTUzNy4wMDAxNTA5OTY1LDI5MjYzMjQuMDAwMDkzNjUsMTI5Mzk1My4wMDAwMzE0ODk5LDEuMjQxOTI5MzAwMDcyMTE4NUU3LDYwODA0ODUuMDAwMDgwOTI4LDI2ODg0MTguMDAwMDE0NTEzNyw0MDQxNzY5LjAwMDA0MDEyMiw0NDY4OTc2LjAwMDA3Mjk3Niw2MzQ5MDk3LjAwMDIyMDEzOSw1Mjk2NDg2LjAwMDE2MzQxNywxMjc0OTIzLjAwMDAxOTE2Nyw5OTM4NDQ0LjAwMDMwMjU3LDQ5MTk0NzkuMDAwMjY3MDE3LDU1OTUyMTEuMDAwMTk5OTAzLDI4NDQ2NTguMDAwMDIxMzc5NCw5MDIxOTUuMDAwMDIyMDQ3Miw4MDQ5MzEzLjAwMDMxOTUwNSw2NDIyMDAuMDAwMDEwNzUxLDE3MTEyNjMuMDAwMDM2ODI4NywxMjM1Nzg2LjAwMDAzMTM0MjMsODQxNDM1MC4wMDAyODcwNzUsMTgxOTA0Ni4wMDAwNTAxMTYsMTk5ODI1Ny4wMDAzNzM5NzU4LDEuODk3NjQ1NzAwMDY0NjAxRTcsMS4xMzUzMTQwMDAwMjk1MTIzRTcsMzQ1MDY1NC4wMDAwNTYyNzYsMzQyMTM5OS4wMDAxMTg2MjM1LDEuMjI4MTA1NDAwMDMzNDM4NEU3LDEwNDgzMTkuMDAwMDQwNzAzOSw0MDEyMDEyLjAwMDA1MTk2NTUsNzU0ODQ0LjAwMDAxMDUyNDIsNTY4OTI4My4wMDAxNzk3NTU1LDIuMDg1MTgyMDAwMDkxMDZFNywyMjMzMTY5LjAwMDE1OTM5MDcsNzA3ODUxNi4wMDAyNDQ3NjY1LDYwODgyNy4wMDAwMTEwNTEyLDU4OTQxMjEuMDAwMjQ4MDYyLDUzNjM2NzUuMDAwMDg3NzA4LDE4MDgzNDQuMDAwMDA2MDI5Niw0OTM3ODIuMDAwMDA3Nzg0OQorMjMsV2VkIDE2IEZlYiAxMSw2MjY5MzIuMDAwMDQwODc1Niw0NDQ3MTAwLjAwMDA0NTA4MSwyNjczNDAwLjAwMDAzMjM1OTcsNTEzMDYzMi4wMDAzNTQ2MzYsMy4zODcxNjQ4MDAyNDA2OTFFNyw0MzAxMjYxLjAwMDM3MDMyNTUsMzQwNTU2NS4wMDAwNTYxMTksNTcyMDU5LjAwMDEzOTQ1NjksNzgzNjAwLjAwMDAwMDA1NjYsMS41OTgyMzc4MDAwOTgyMjAzRTcsODE4NjQ1My4wMDA2NDM0MDUsMTIxMTUzNy4wMDAxNTA5OTY1LDI5MjYzMjQuMDAwMDkzNjUsMTI5Mzk1My4wMDAwMzE0ODk5LDEuMjQxOTI5MzAwMDcyMTE4NUU3LDYwODA0ODUuMDAwMDgwOTI3LDI2ODg0MTguMDAwMDE0NTEzNyw0MDQxNzY5LjAwMDA0MDEyMiw0NDY4OTc2LjAwMDA3Mjk3Niw2MzQ5MDk3LjAwMDIyMDEzOSw1Mjk2NDg2LjAwMDE2MzQxNiwxMjc0OTIzLjAwMDAxOTE2Nyw5OTM4NDQ0LjAwMDMwMjU3Miw0OTE5NDc5LjAwMDI2NzAxOCw1NTk1MjExLjAwMDE5OTkwMywyODQ0NjU4LjAwMDAyMTM3OSw5MDIxOTUuMDAwMDIyMDQ3MSw4MDQ5MzEzLjAwMDMxOTUwNCw2NDIyMDAuMDAwMDEwNzUxMSwxNzExMjYzLjAwMDAzNjgyODcsMTIzNTc4Ni4wMDAwMzEzNDIsODQxNDM1MC4wMDAyODcwNzYsMTgxOTA0Ni4wMDAwNTAxMTYsMTk5ODI1Ny4wMDAzNzM5NzU4LDEuODk3NjQ1NzAwMDY0NjAxRTcsMS4xMzUzMTQwMDAwMjk1MTIzRTcsMzQ1MDY1NC4wMDAwNTYyNzY2LDM0MjEzOTkuMDAwMTE4NjIzNSwxLjIyODEwNTQwMDAzMzQzODRFNywxMDQ4MzE5LjAwMDA0MDcwMzksNDAxMjAxMi4wMDAwNTE5NjYsNzU0ODQ0LjAwMDAxMDUyNDIsNTY4OTI4My4wMDAxNzk3NTU1LDIuMDg1MTgyMDAwMDkxMDU5NUU3LDIyMzMxNjkuMDAwMTU5MzkwNyw3MDc4NTE2LjAwMDI0NDc2NjUsNjA4ODI3LjAwMDAxMTA1MTIsNTg5NDEyMS4wMDAyNDgwNjE1LDUzNjM2NzUuMDAwMDg3NzA4LDE4MDgzNDQuMDAwMDA2MDI5Niw0OTM3ODIuMDAwMDA3Nzg0OQorMjQsVGh1IDE3IEZlYiAxMSw2MjY5MzIuMDAwMDQwODc1Niw0NDQ3MTAwLjAwMDA0NTA4MSwyNjczNDAwLjAwMDAzMjM1OTMsNTEzMDYzMi4wMDAzNTQ2MzU1LDMuMzg3MTY0ODAwMjQwNjkxRTcsNDMwMTI2MS4wMDAzNzAzMjU1LDM0MDU1NjUuMDAwMDU2MTE5LDU3MjA1OS4wMDAxMzk0NTY5LDc4MzYwMC4wMDAwMDAwNTY2LDEuNTk4MjM3ODAwMDk4MjJFNyw4MTg2NDUzLjAwMDY0MzQwNSwxMjExNTM3LjAwMDE1MDk5NjUsMjkyNjMyNC4wMDAwOTM2NSwxMjkzOTUzLjAwMDAzMTQ4OTYsMS4yNDE5MjkzMDAwNzIxMTg1RTcsNjA4MDQ4NS4wMDAwODA5MjcsMjY4ODQxOC4wMDAwMTQ1MTM3LDQwNDE3NjkuMDAwMDQwMTIyLDQ0Njg5NzYuMDAwMDcyOTc2LDYzNDkwOTcuMDAwMjIwMTM5LDUyOTY0ODYuMDAwMTYzNDE2LDEyNzQ5MjMuMDAwMDE5MTY3Myw5OTM4NDQ0LjAwMDMwMjU3LDQ5MTk0NzkuMDAwMjY3MDE4LDU1OTUyMTEuMDAwMTk5OTAzLDI4NDQ2NTguMDAwMDIxMzc5NCw5MDIxOTUuMDAwMDIyMDQ3MSw4MDQ5MzEzLjAwMDMxOTUwNSw2NDIyMDAuMDAwMDEwNzUxLDE3MTEyNjMuMDAwMDM2ODI4NywxMjM1Nzg2LjAwMDAzMTM0Miw4NDE0MzUwLjAwMDI4NzA3NiwxODE5MDQ2LjAwMDA1MDExNTksMTk5ODI1Ny4wMDAzNzM5NzU4LDEuODk3NjQ1NzAwMDY0NjAxRTcsMS4xMzUzMTQwMDAwMjk1MTIxRTcsMzQ1MDY1NC4wMDAwNTYyNzY2LDM0MjEzOTkuMDAwMTE4NjIzNSwxLjIyODEwNTQwMDAzMzQzODRFNywxMDQ4MzE5LjAwMDA0MDcwMzksNDAxMjAxMi4wMDAwNTE5NjYsNzU0ODQ0LjAwMDAxMDUyNDEsNTY4OTI4My4wMDAxNzk3NTU1LDIuMDg1MTgyMDAwMDkxMDZFNywyMjMzMTY5LjAwMDE1OTM5MSw3MDc4NTE2LjAwMDI0NDc2NjUsNjA4ODI3LjAwMDAxMTA1MTIsNTg5NDEyMS4wMDAyNDgwNjE1LDUzNjM2NzUuMDAwMDg3NzA5LDE4MDgzNDQuMDAwMDA2MDI5Niw0OTM3ODIuMDAwMDA3Nzg0OQorMjUsRnJpIDE4IEZlYiAxMSw2MjY5MzIuMDAwMDQwODc1Niw0NDQ3MTAwLjAwMDA0NTA4MiwyNjczNDAwLjAwMDAzMjM1OTMsNTEzMDYzMi4wMDAzNTQ2MzYsMy4zODcxNjQ4MDAyNDA2OUU3LDQzMDEyNjEuMDAwMzcwMzI1NSwzNDA1NTY1LjAwMDA1NjExOSw1NzIwNTkuMDAwMTM5NDU2OSw3ODM2MDAuMDAwMDAwMDU2NiwxLjU5ODIzNzgwMDA5ODIyRTcsODE4NjQ1My4wMDA2NDM0MDUsMTIxMTUzNy4wMDAxNTA5OTY3LDI5MjYzMjQuMDAwMDkzNjQ5LDEyOTM5NTMuMDAwMDMxNDg5NiwxLjI0MTkyOTMwMDA3MjExODVFNyw2MDgwNDg1LjAwMDA4MDkyNywyNjg4NDE4LjAwMDAxNDUxMzcsNDA0MTc2OS4wMDAwNDAxMjIsNDQ2ODk3Ni4wMDAwNzI5NzYsNjM0OTA5Ny4wMDAyMjAxMzksNTI5NjQ4Ni4wMDAxNjM0MTUsMTI3NDkyMy4wMDAwMTkxNjcsOTkzODQ0NC4wMDAzMDI1Nyw0OTE5NDc5LjAwMDI2NzAxOCw1NTk1MjExLjAwMDE5OTkwMiwyODQ0NjU4LjAwMDAyMTM3OSw5MDIxOTUuMDAwMDIyMDQ3MSw4MDQ5MzEzLjAwMDMxOTUwNSw2NDIyMDAuMDAwMDEwNzUxMSwxNzExMjYzLjAwMDAzNjgyOSwxMjM1Nzg2LjAwMDAzMTM0Miw4NDE0MzUwLjAwMDI4NzA3NiwxODE5MDQ2LjAwMDA1MDExNiwxOTk4MjU3LjAwMDM3Mzk3NTgsMS44OTc2NDU3MDAwNjQ2MDA2RTcsMS4xMzUzMTQwMDAwMjk1MTIzRTcsMzQ1MDY1NC4wMDAwNTYyNzY2LDM0MjEzOTkuMDAwMTE4NjIzNSwxLjIyODEwNTQwMDAzMzQzODZFNywxMDQ4MzE5LjAwMDA0MDcwMzksNDAxMjAxMi4wMDAwNTE5NjYsNzU0ODQ0LjAwMDAxMDUyNCw1Njg5MjgzLjAwMDE3OTc1NTUsMi4wODUxODIwMDAwOTEwNkU3LDIyMzMxNjkuMDAwMTU5MzkxLDcwNzg1MTYuMDAwMjQ0NzY3LDYwODgyNy4wMDAwMTEwNTEzLDU4OTQxMjEuMDAwMjQ4MDYxNSw1MzYzNjc1LjAwMDA4NzcwOSwxODA4MzQ0LjAwMDAwNjAyOTYsNDkzNzgyLjAwMDAwNzc4NDkKKzI2LFNhdCAxOSBGZWIgMTEsNjI2OTMyLjAwMDA0MDg3NTcsNDQ0NzEwMC4wMDAwNDUwODIsMjY3MzQwMC4wMDAwMzIzNTkzLDUxMzA2MzIuMDAwMzU0NjM3LDMuMzg3MTY0ODAwMjQwNjkxRTcsNDMwMTI2MS4wMDAzNzAzMjYsMzQwNTU2NS4wMDAwNTYxMTk2LDU3MjA1OS4wMDAxMzk0NTcsNzgzNjAwLjAwMDAwMDA1NjYsMS41OTgyMzc4MDAwOTgyMkU3LDgxODY0NTMuMDAwNjQzNDA1LDEyMTE1MzcuMDAwMTUwOTk2NywyOTI2MzI0LjAwMDA5MzY0OTYsMTI5Mzk1My4wMDAwMzE0ODk2LDEuMjQxOTI5MzAwMDcyMTE4NUU3LDYwODA0ODUuMDAwMDgwOTI3LDI2ODg0MTguMDAwMDE0NTEzNyw0MDQxNzY5LjAwMDA0MDEyMiw0NDY4OTc2LjAwMDA3Mjk3Niw2MzQ5MDk3LjAwMDIyMDEzOSw1Mjk2NDg2LjAwMDE2MzQxNiwxMjc0OTIzLjAwMDAxOTE2NzMsOTkzODQ0NC4wMDAzMDI1Nyw0OTE5NDc5LjAwMDI2NzAxOCw1NTk1MjExLjAwMDE5OTkwMiwyODQ0NjU4LjAwMDAyMTM3OTQsOTAyMTk1LjAwMDAyMjA0NzEsODA0OTMxMy4wMDAzMTk1MDQsNjQyMjAwLjAwMDAxMDc1MSwxNzExMjYzLjAwMDAzNjgyOSwxMjM1Nzg2LjAwMDAzMTM0Miw4NDE0MzUwLjAwMDI4NzA3NSwxODE5MDQ2LjAwMDA1MDExNTksMTk5ODI1Ny4wMDAzNzM5NzU4LDEuODk3NjQ1NzAwMDY0NjAxRTcsMS4xMzUzMTQwMDAwMjk1MTIzRTcsMzQ1MDY1NC4wMDAwNTYyNzYsMzQyMTM5OS4wMDAxMTg2MjM1LDEuMjI4MTA1NDAwMDMzNDM4NkU3LDEwNDgzMTkuMDAwMDQwNzAzOSw0MDEyMDEyLjAwMDA1MTk2NjQsNzU0ODQ0LjAwMDAxMDUyNCw1Njg5MjgzLjAwMDE3OTc1NTUsMi4wODUxODIwMDAwOTEwNkU3LDIyMzMxNjkuMDAwMTU5MzkxLDcwNzg1MTYuMDAwMjQ0NzY2NSw2MDg4MjcuMDAwMDExMDUxMyw1ODk0MTIxLjAwMDI0ODA2MTUsNTM2MzY3NS4wMDAwODc3MDksMTgwODM0NC4wMDAwMDYwMjk0LDQ5Mzc4Mi4wMDAwMDc3ODQ5CisyNyxTdW4gMjAgRmViIDExLDYyNjkzMi4wMDAwNDA4NzU2LDQ0NDcxMDAuMDAwMDQ1MDgyLDI2NzM0MDAuMDAwMDMyMzU5Myw1MTMwNjMyLjAwMDM1NDYzNiwzLjM4NzE2NDgwMDI0MDY5RTcsNDMwMTI2MS4wMDAzNzAzMjU1LDM0MDU1NjUuMDAwMDU2MTE5Niw1NzIwNTkuMDAwMTM5NDU2OCw3ODM2MDAuMDAwMDAwMDU2NiwxLjU5ODIzNzgwMDA5ODIyRTcsODE4NjQ1My4wMDA2NDM0MDYsMTIxMTUzNy4wMDAxNTA5OTY3LDI5MjYzMjQuMDAwMDkzNjQ5LDEyOTM5NTMuMDAwMDMxNDg5OSwxLjI0MTkyOTMwMDA3MjExODVFNyw2MDgwNDg1LjAwMDA4MDkyNywyNjg4NDE4LjAwMDAxNDUxMzMsNDA0MTc2OS4wMDAwNDAxMjE0LDQ0Njg5NzYuMDAwMDcyOTc2LDYzNDkwOTcuMDAwMjIwMTM5LDUyOTY0ODYuMDAwMTYzNDE1LDEyNzQ5MjMuMDAwMDE5MTY3Myw5OTM4NDQ0LjAwMDMwMjU3LDQ5MTk0NzkuMDAwMjY3MDE5LDU1OTUyMTEuMDAwMTk5OTAyLDI4NDQ2NTguMDAwMDIxMzc5NCw5MDIxOTUuMDAwMDIyMDQ3MSw4MDQ5MzEzLjAwMDMxOTUwNCw2NDIyMDAuMDAwMDEwNzUxLDE3MTEyNjMuMDAwMDM2ODI5LDEyMzU3ODYuMDAwMDMxMzQxOCw4NDE0MzUwLjAwMDI4NzA3NiwxODE5MDQ2LjAwMDA1MDExNTksMTk5ODI1Ny4wMDAzNzM5NzU4LDEuODk3NjQ1NzAwMDY0NjAwNkU3LDEuMTM1MzE0MDAwMDI5NTEyM0U3LDM0NTA2NTQuMDAwMDU2Mjc2NiwzNDIxMzk5LjAwMDExODYyMzUsMS4yMjgxMDU0MDAwMzM0Mzg0RTcsMTA0ODMxOS4wMDAwNDA3MDQsNDAxMjAxMi4wMDAwNTE5NjYsNzU0ODQ0LjAwMDAxMDUyNDEsNTY4OTI4My4wMDAxNzk3NTU1LDIuMDg1MTgyMDAwMDkxMDYwM0U3LDIyMzMxNjkuMDAwMTU5MzkxNyw3MDc4NTE2LjAwMDI0NDc2NjUsNjA4ODI3LjAwMDAxMTA1MTMsNTg5NDEyMS4wMDAyNDgwNjE1LDUzNjM2NzUuMDAwMDg3NzEsMTgwODM0NC4wMDAwMDYwMjk0LDQ5Mzc4Mi4wMDAwMDc3ODQ4NworMjgsTW9uIDIxIEZlYiAxMSw2MjY5MzIuMDAwMDQwODc1NSw0NDQ3MTAwLjAwMDA0NTA4MiwyNjczNDAwLjAwMDAzMjM1OSw1MTMwNjMyLjAwMDM1NDYzNTUsMy4zODcxNjQ4MDAyNDA2OTFFNyw0MzAxMjYxLjAwMDM3MDMyNTUsMzQwNTU2NS4wMDAwNTYxMTk2LDU3MjA1OS4wMDAxMzk0NTY5LDc4MzYwMC4wMDAwMDAwNTY2LDEuNTk4MjM3ODAwMDk4MjJFNyw4MTg2NDUzLjAwMDY0MzQwNSwxMjExNTM3LjAwMDE1MDk5NjcsMjkyNjMyNC4wMDAwOTM2NDksMTI5Mzk1My4wMDAwMzE0ODk5LDEuMjQxOTI5MzAwMDcyMTE4NkU3LDYwODA0ODUuMDAwMDgwOTI4LDI2ODg0MTguMDAwMDE0NTEzMyw0MDQxNzY5LjAwMDA0MDEyMTQsNDQ2ODk3Ni4wMDAwNzI5NzcsNjM0OTA5Ny4wMDAyMjAxMzgsNTI5NjQ4Ni4wMDAxNjM0MTUsMTI3NDkyMy4wMDAwMTkxNjczLDk5Mzg0NDQuMDAwMzAyNTcsNDkxOTQ3OS4wMDAyNjcwMTgsNTU5NTIxMS4wMDAxOTk5MDEsMjg0NDY1OC4wMDAwMjEzNzk0LDkwMjE5NS4wMDAwMjIwNDcxLDgwNDkzMTMuMDAwMzE5NTAzLDY0MjIwMC4wMDAwMTA3NTA4LDE3MTEyNjMuMDAwMDM2ODI4NywxMjM1Nzg2LjAwMDAzMTM0Miw4NDE0MzUwLjAwMDI4NzA3NSwxODE5MDQ2LjAwMDA1MDExNTksMTk5ODI1Ny4wMDAzNzM5NzU4LDEuODk3NjQ1NzAwMDY0NjAwNkU3LDEuMTM1MzE0MDAwMDI5NTEyM0U3LDM0NTA2NTQuMDAwMDU2Mjc2NiwzNDIxMzk5LjAwMDExODYyNCwxLjIyODEwNTQwMDAzMzQzODRFNywxMDQ4MzE5LjAwMDA0MDcwMzksNDAxMjAxMi4wMDAwNTE5NjYsNzU0ODQ0LjAwMDAxMDUyNDIsNTY4OTI4My4wMDAxNzk3NTU1LDIuMDg1MTgyMDAwMDkxMDYwM0U3LDIyMzMxNjkuMDAwMTU5MzkxLDcwNzg1MTYuMDAwMjQ0NzY2NSw2MDg4MjcuMDAwMDExMDUxMyw1ODk0MTIxLjAwMDI0ODA2MSw1MzYzNjc1LjAwMDA4NzcxLDE4MDgzNDQuMDAwMDA2MDI5NCw0OTM3ODIuMDAwMDA3Nzg0OQorMjksVHVlIDIyIEZlYiAxMSw2MjY5MzIuMDAwMDQwODc1Niw0NDQ3MTAwLjAwMDA0NTA4MSwyNjczNDAwLjAwMDAzMjM1OTMsNTEzMDYzMi4wMDAzNTQ2MzYsMy4zODcxNjQ4MDAyNDA2OTFFNyw0MzAxMjYxLjAwMDM3MDMyNTUsMzQwNTU2NS4wMDAwNTYxMTk2LDU3MjA1OS4wMDAxMzk0NTY5LDc4MzYwMC4wMDAwMDAwNTY3LDEuNTk4MjM3ODAwMDk4MjIwM0U3LDgxODY0NTMuMDAwNjQzNDA2LDEyMTE1MzcuMDAwMTUwOTk2NywyOTI2MzI0LjAwMDA5MzY0OSwxMjkzOTUzLjAwMDAzMTQ4OTksMS4yNDE5MjkzMDAwNzIxMTg2RTcsNjA4MDQ4NS4wMDAwODA5MjgsMjY4ODQxOC4wMDAwMTQ1MTMzLDQwNDE3NjkuMDAwMDQwMTIxNCw0NDY4OTc2LjAwMDA3Mjk3Niw2MzQ5MDk3LjAwMDIyMDEzOSw1Mjk2NDg2LjAwMDE2MzQxNSwxMjc0OTIzLjAwMDAxOTE2Nyw5OTM4NDQ0LjAwMDMwMjU3LDQ5MTk0NzkuMDAwMjY3MDE4LDU1OTUyMTEuMDAwMTk5OTAxLDI4NDQ2NTguMDAwMDIxMzc5NCw5MDIxOTUuMDAwMDIyMDQ3MSw4MDQ5MzEzLjAwMDMxOTUwNCw2NDIyMDAuMDAwMDEwNzUxLDE3MTEyNjMuMDAwMDM2ODI5LDEyMzU3ODYuMDAwMDMxMzQyLDg0MTQzNTAuMDAwMjg3MDc2LDE4MTkwNDYuMDAwMDUwMTE1NiwxOTk4MjU3LjAwMDM3Mzk3NTgsMS44OTc2NDU3MDAwNjQ2MDA2RTcsMS4xMzUzMTQwMDAwMjk1MTIzRTcsMzQ1MDY1NC4wMDAwNTYyNzcsMzQyMTM5OS4wMDAxMTg2MjM1LDEuMjI4MTA1NDAwMDMzNDM4NkU3LDEwNDgzMTkuMDAwMDQwNzAzOSw0MDEyMDEyLjAwMDA1MTk2NjQsNzU0ODQ0LjAwMDAxMDUyNDIsNTY4OTI4My4wMDAxNzk3NTU1LDIuMDg1MTgyMDAwMDkxMDYwM0U3LDIyMzMxNjkuMDAwMTU5MzkxLDcwNzg1MTYuMDAwMjQ0NzY2NSw2MDg4MjcuMDAwMDExMDUxMiw1ODk0MTIxLjAwMDI0ODA2MTUsNTM2MzY3NS4wMDAwODc3MSwxODA4MzQ0LjAwMDAwNjAyOTQsNDkzNzgyLjAwMDAwNzc4NDg3CiszMCxXZWQgMjMgRmViIDExLDYyNjkzMi4wMDAwNDA4NzU2LDQ0NDcxMDAuMDAwMDQ1MDgxLDI2NzM0MDAuMDAwMDMyMzU5Myw1MTMwNjMyLjAwMDM1NDYzNiwzLjM4NzE2NDgwMDI0MDY5RTcsNDMwMTI2MS4wMDAzNzAzMjU1LDM0MDU1NjUuMDAwMDU2MTIsNTcyMDU5LjAwMDEzOTQ1NjksNzgzNjAwLjAwMDAwMDA1NjcsMS41OTgyMzc4MDAwOTgyMkU3LDgxODY0NTMuMDAwNjQzNDA1LDEyMTE1MzcuMDAwMTUwOTk2NywyOTI2MzI0LjAwMDA5MzY0OTYsMTI5Mzk1My4wMDAwMzE0OSwxLjI0MTkyOTMwMDA3MjExODZFNyw2MDgwNDg1LjAwMDA4MDkyOCwyNjg4NDE4LjAwMDAxNDUxMzcsNDA0MTc2OS4wMDAwNDAxMjIsNDQ2ODk3Ni4wMDAwNzI5NzYsNjM0OTA5Ny4wMDAyMjAxMzksNTI5NjQ4Ni4wMDAxNjM0MTYsMTI3NDkyMy4wMDAwMTkxNjczLDk5Mzg0NDQuMDAwMzAyNTY4LDQ5MTk0NzkuMDAwMjY3MDE4LDU1OTUyMTEuMDAwMTk5OTAyLDI4NDQ2NTguMDAwMDIxMzgsOTAyMTk1LjAwMDAyMjA0NzEsODA0OTMxMy4wMDAzMTk1MDUsNjQyMjAwLjAwMDAxMDc1MDgsMTcxMTI2My4wMDAwMzY4MjksMTIzNTc4Ni4wMDAwMzEzNDIsODQxNDM1MC4wMDAyODcwNzUsMTgxOTA0Ni4wMDAwNTAxMTU5LDE5OTgyNTcuMDAwMzczOTc1NiwxLjg5NzY0NTcwMDA2NDYwMDZFNywxLjEzNTMxNDAwMDAyOTUxMjVFNywzNDUwNjU0LjAwMDA1NjI3NywzNDIxMzk5LjAwMDExODYyMzUsMS4yMjgxMDU0MDAwMzM0Mzg0RTcsMTA0ODMxOS4wMDAwNDA3MDQsNDAxMjAxMi4wMDAwNTE5NjYsNzU0ODQ0LjAwMDAxMDUyNDIsNTY4OTI4My4wMDAxNzk3NTUsMi4wODUxODIwMDAwOTEwNjAzRTcsMjIzMzE2OS4wMDAxNTkzOTE3LDcwNzg1MTYuMDAwMjQ0NzY2NSw2MDg4MjcuMDAwMDExMDUxMiw1ODk0MTIxLjAwMDI0ODA2MTUsNTM2MzY3NS4wMDAwODc3MSwxODA4MzQ0LjAwMDAwNjAyOTQsNDkzNzgyLjAwMDAwNzc4NDkKKzMxLFRodSAyNCBGZWIgMTEsNjI2OTMyLjAwMDA0MDg3NTYsNDQ0NzEwMC4wMDAwNDUwODEsMjY3MzQwMC4wMDAwMzIzNTkzLDUxMzA2MzIuMDAwMzU0NjM3LDMuMzg3MTY0ODAwMjQwNjkxRTcsNDMwMTI2MS4wMDAzNzAzMjUsMzQwNTU2NS4wMDAwNTYxMTk2LDU3MjA1OS4wMDAxMzk0NTY4LDc4MzYwMC4wMDAwMDAwNTY3LDEuNTk4MjM3ODAwMDk4MjIwM0U3LDgxODY0NTMuMDAwNjQzNDA2LDEyMTE1MzcuMDAwMTUwOTk2NywyOTI2MzI0LjAwMDA5MzY0OSwxMjkzOTUzLjAwMDAzMTQ5LDEuMjQxOTI5MzAwMDcyMTE4NkU3LDYwODA0ODUuMDAwMDgwOTI3LDI2ODg0MTguMDAwMDE0NTEzMyw0MDQxNzY5LjAwMDA0MDEyMTQsNDQ2ODk3Ni4wMDAwNzI5NzYsNjM0OTA5Ny4wMDAyMjAxMzksNTI5NjQ4Ni4wMDAxNjM0MTYsMTI3NDkyMy4wMDAwMTkxNjczLDk5Mzg0NDQuMDAwMzAyNTY4LDQ5MTk0NzkuMDAwMjY3MDE5LDU1OTUyMTEuMDAwMTk5OTAyLDI4NDQ2NTguMDAwMDIxMzgsOTAyMTk1LjAwMDAyMjA0NzIsODA0OTMxMy4wMDAzMTk1MDQsNjQyMjAwLjAwMDAxMDc1MDgsMTcxMTI2My4wMDAwMzY4MjksMTIzNTc4Ni4wMDAwMzEzNDIsODQxNDM1MC4wMDAyODcwNzUsMTgxOTA0Ni4wMDAwNTAxMTU2LDE5OTgyNTcuMDAwMzczOTc1OCwxLjg5NzY0NTcwMDA2NDYwMDZFNywxLjEzNTMxNDAwMDAyOTUxMjNFNywzNDUwNjU0LjAwMDA1NjI3NywzNDIxMzk5LjAwMDExODYyMzUsMS4yMjgxMDU0MDAwMzM0Mzg2RTcsMTA0ODMxOS4wMDAwNDA3MDM5LDQwMTIwMTIuMDAwMDUxOTY2LDc1NDg0NC4wMDAwMTA1MjQyLDU2ODkyODMuMDAwMTc5NzU1NSwyLjA4NTE4MjAwMDA5MTA2MDNFNywyMjMzMTY5LjAwMDE1OTM5MTcsNzA3ODUxNi4wMDAyNDQ3NjYsNjA4ODI3LjAwMDAxMTA1MTIsNTg5NDEyMS4wMDAyNDgwNjE1LDUzNjM2NzUuMDAwMDg3NzEsMTgwODM0NC4wMDAwMDYwMjk2LDQ5Mzc4Mi4wMDAwMDc3ODQ5CiszMixGcmkgMjUgRmViIDExLDYyNjkzMi4wMDAwNDA4NzU1LDQ0NDcxMDAuMDAwMDQ1MDgxLDI2NzM0MDAuMDAwMDMyMzU5Myw1MTMwNjMyLjAwMDM1NDYzNywzLjM4NzE2NDgwMDI0MDY5RTcsNDMwMTI2MS4wMDAzNzAzMjUsMzQwNTU2NS4wMDAwNTYxMTk2LDU3MjA1OS4wMDAxMzk0NTY5LDc4MzYwMC4wMDAwMDAwNTY3LDEuNTk4MjM3ODAwMDk4MjJFNyw4MTg2NDUzLjAwMDY0MzQwNiwxMjExNTM3LjAwMDE1MDk5NjcsMjkyNjMyNC4wMDAwOTM2NDksMTI5Mzk1My4wMDAwMzE0ODk5LDEuMjQxOTI5MzAwMDcyMTE4NkU3LDYwODA0ODUuMDAwMDgwOTI3LDI2ODg0MTguMDAwMDE0NTEzNyw0MDQxNzY5LjAwMDA0MDEyMTQsNDQ2ODk3Ni4wMDAwNzI5NzYsNjM0OTA5Ny4wMDAyMjAxMzksNTI5NjQ4Ni4wMDAxNjM0MTYsMTI3NDkyMy4wMDAwMTkxNjczLDk5Mzg0NDQuMDAwMzAyNTY4LDQ5MTk0NzkuMDAwMjY3MDE5LDU1OTUyMTEuMDAwMTk5OTAzLDI4NDQ2NTguMDAwMDIxMzgsOTAyMTk1LjAwMDAyMjA0NzEsODA0OTMxMy4wMDAzMTk1MDUsNjQyMjAwLjAwMDAxMDc1MSwxNzExMjYzLjAwMDAzNjgyOSwxMjM1Nzg2LjAwMDAzMTM0Miw4NDE0MzUwLjAwMDI4NzA3NiwxODE5MDQ2LjAwMDA1MDExNTYsMTk5ODI1Ny4wMDAzNzM5NzU2LDEuODk3NjQ1NzAwMDY0NjAwNkU3LDEuMTM1MzE0MDAwMDI5NTEyM0U3LDM0NTA2NTQuMDAwMDU2Mjc3NSwzNDIxMzk5LjAwMDExODYyMywxLjIyODEwNTQwMDAzMzQzODZFNywxMDQ4MzE5LjAwMDA0MDcwMzksNDAxMjAxMi4wMDAwNTE5NjYsNzU0ODQ0LjAwMDAxMDUyNDIsNTY4OTI4My4wMDAxNzk3NTU1LDIuMDg1MTgyMDAwMDkxMDYwM0U3LDIyMzMxNjkuMDAwMTU5MzkyLDcwNzg1MTYuMDAwMjQ0NzY2LDYwODgyNy4wMDAwMTEwNTEzLDU4OTQxMjEuMDAwMjQ4MDYxNSw1MzYzNjc1LjAwMDA4NzcxMSwxODA4MzQ0LjAwMDAwNjAyOTQsNDkzNzgyLjAwMDAwNzc4NDg3CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNFSVJTdGF0ZXNPbmx5X0ZEX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9SXzAuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTRUlSU3RhdGVzT25seV9GRF9SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vUl8wLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YjU0YWU5Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTRUlSU3RhdGVzT25seV9GRF9SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vUl8wLmNzdgpAQCAtMCwwICsxLDMzIEBACitpdGVyYXRpb24sdGltZSxzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9ub2RlL3RyYW5zcG9ydC9waXBlL1VTQQorMSxUdWUgMjUgSmFuIDExLDAuMAorMixXZWQgMjYgSmFuIDExLDAuMAorMyxUaHUgMjcgSmFuIDExLDAuMDAyNTM0MDM2NzI1OTM2Njg5Cis0LEZyaSAyOCBKYW4gMTEsMC4wMDIyNjg1OTMwMzY4NTIyNzkKKzUsU2F0IDI5IEphbiAxMSwwLjA5NDA2NTIwMTM3NDg1NDkxCis2LFN1biAzMCBKYW4gMTEsMC4wOTMzOTMyNDczMDA1MjM0MgorNyxNb24gMzEgSmFuIDExLDIuNjQzNjkxNjU5Nzk5ODM1NworOCxUdWUgMSBGZWIgMTEsMy4wNDczMTY0NzIzODg5OTc2Cis5LFdlZCAyIEZlYiAxMSw2Ny4yODQwNTY3OTUzMDczMgorMTAsVGh1IDMgRmViIDExLDg5LjEzNTQ3NzQzMzQ3NworMTEsRnJpIDQgRmViIDExLDE2MzIuNTQ4NTU0NjUxNjA2MworMTIsU2F0IDUgRmViIDExLDI0MjEuNjEwOTc3NjAzNTM4MgorMTMsU3VuIDYgRmViIDExLDExMDUxLjI4NzI2NjgxMTExNgorMTQsTW9uIDcgRmViIDExLDMwNjUzLjk4ODA0NjIxNTg1NAorMTUsVHVlIDggRmViIDExLDM3NzE5LjkyNzI4NTg4MTYyNgorMTYsV2VkIDkgRmViIDExLDEzODg3NC45MTczMTc4NDU4NgorMTcsVGh1IDEwIEZlYiAxMSwxMzkwNTIuMjc1OTcxODc4MzUKKzE4LEZyaSAxMSBGZWIgMTEsMTk0Mzk4LjkyMTE2MTIxNDUKKzE5LFNhdCAxMiBGZWIgMTEsMTk5MjQwLjQ2NDY5NDYxNDUKKzIwLFN1biAxMyBGZWIgMTEsNDcwNTUzLjAwMzEwMTgzODMKKzIxLE1vbiAxNCBGZWIgMTEsNDY2MDUxLjI5NzQ1MDk5ODgKKzIyLFR1ZSAxNSBGZWIgMTEsNTY1NDI1LjQ2NzMwMDQ2ODkKKzIzLFdlZCAxNiBGZWIgMTEsNTY1NDk0LjMyNTg3NTgKKzI0LFRodSAxNyBGZWIgMTEsNzAzMTQyLjEwOTYxNDY2NDgKKzI1LEZyaSAxOCBGZWIgMTEsNjk5ODAwLjYwMDU4Mjc0NDIKKzI2LFNhdCAxOSBGZWIgMTEsNzc1NTQwLjk3ODcyMzMyNTgKKzI3LFN1biAyMCBGZWIgMTEsNzczOTk3LjI2ODMyMDM1NAorMjgsTW9uIDIxIEZlYiAxMSw4MzgxMDUuMzM4MjE2MzA5MQorMjksVHVlIDIyIEZlYiAxMSw4MzU4MTQuNjE2MzM5MTY2NQorMzAsV2VkIDIzIEZlYiAxMSw4NzY2NzIuMzgwMjY1MjkKKzMxLFRodSAyNCBGZWIgMTEsODc1NDU1Ljc4NTI0NjA4MTEKKzMyLEZyaSAyNSBGZWIgMTEsOTA0MDI3LjM3ODMwNjk2NDkKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0VJUlN0YXRlc09ubHlfRkRfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL1JfMS5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNFSVJTdGF0ZXNPbmx5X0ZEX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9SXzEuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVlNjI2MTEKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNFSVJTdGF0ZXNPbmx5X0ZEX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9SXzEuY3N2CkBAIC0wLDAgKzEsMzMgQEAKK2l0ZXJhdGlvbix0aW1lLFVTLUFLLFVTLUFMLFVTLUFSLFVTLUFaLFVTLUNBLFVTLUNPLFVTLUNULFVTLURDLFVTLURFLFVTLUZMLFVTLUdBLFVTLUhJLFVTLUlBLFVTLUlELFVTLUlMLFVTLUlOLFVTLUtTLFVTLUtZLFVTLUxBLFVTLU1BLFVTLU1ELFVTLU1FLFVTLU1JLFVTLU1OLFVTLU1PLFVTLU1TLFVTLU1ULFVTLU5DLFVTLU5ELFVTLU5FLFVTLU5ILFVTLU5KLFVTLU5NLFVTLU5WLFVTLU5ZLFVTLU9ILFVTLU9LLFVTLU9SLFVTLVBBLFVTLVJJLFVTLVNDLFVTLVNELFVTLVROLFVTLVRYLFVTLVVULFVTLVZBLFVTLVZULFVTLVdBLFVTLVdJLFVTLVdWLFVTLVdZCisxLFR1ZSAyNSBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzIsV2VkIDI2IEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC40LDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMyxUaHUgMjcgSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjYzNzQ2NTk2MzI3NDA2MzQsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCis0LEZyaSAyOCBKYW4gMTEsMS40NjM2NjMxNzY0MTU3ODQ0RS01LDEuNDY4OTAyMDU4OTMwNDg4M0UtNSwxLjA3MTk1NTk2MDcwMDk4NzRFLTUsMS4yNzEwMzM0OTYyNTk3NDIxRS00LDcuOTc4MzYyNTA4MzEwOTMyLDEuMzMwNDM0MzY0MTU3MjMzRS00LDEuODk5Njk5Mzk4MDI0MjMwN0UtNSw0Ljk1Mzk2NzkwNDA5NjcwNkUtNSw0LjgzNTg5MTU1MjAzNDUyOTZFLTgsMy41MTMzNTU4MTA3NDU2MkUtNCwyLjMwOTY2MjEwNDM0Nzk1ODJFLTQsNS40MjY2NzYzMDMzMDgwODFFLTUsOC44Mjk1MzE5OTIwODk3MTNFLTYsMS4wOTA0OTM1NDQ5ODM3ODY0RS01LDIuNTc2ODQ1MTEyNTk3ODY2RS00LDIuNzAwMDM5NDQ5ODg1OTQ1NUUtNSw0LjE3MDk1NjQ2MzYyOTc4MUUtNiwxLjMxMDUyNjYxMDYwMTM1NzhFLTUsMi40Njg3MjI2MzczMTM2Mjc2RS01LDcuNzQ2MjkyMjg0NDMzOTc4RS01LDUuNzIyODc0NjYwODcwMTk2RS01LDYuNDQ3ODU1NDAyNzEyNzA2RS02LDEuMDU5MDE5OTUwNzk5Mjk1RS00LDkuNTI2NzA2MzU3NTA4MDI0RS01LDcuMDQyMjY3MDcyNjUwMjg1RS01LDYuOTE5MzU0ODI5MDM2MDcyRS02LDcuNjM2Njc4NzQyNTg3ODZFLTYsMS4xMjk4MjU0NjI5NDAzMzRFLTQsMy42NDMwMzgzMDI1MzI2Nzg2RS02LDEuMjY3MDAzNTg2NjMzMDQ2N0UtNSwxLjA4NzY3MjYwODI0NTA5OTVFLTUsMS4wMDk1MzI2NjA1ODM0NzVFLTQsMS43NDYxNTk4NDEyNDcxMzQ0RS01LDEuMzM3NDQ2NDA2OTA3NjgzRS00LDIuMjcxNTc5NDU4Mzc1Njg2M0UtNCwxLjAyNTQxMDUwNDUxMjY1NUUtNCwxLjkwMzcyOTMwNzY1MDkyNjNFLTUsNC4xNzQxODAzOTEzMzExMzc0RS01LDEuMTY0NDAyMDg3NTM3MzgwOEUtNCwxLjQzODI3NDc0NTc2NzYwM0UtNSwxLjczMDQ0MzE5MzcwMzAyMjNFLTUsMy41MjIxNDEwMTM3MzE4MTYzRS02LDYuMzAxNTY5NjgzMjYzNjZFLTUsMy4yMjk5NzI1NjU3OTYzOTZFLTQsNS43MTUyMTc4MzI1Nzk0NzVFLTUsOC42MTE5MTY4NzIyNDgxNThFLTUsMy43NjM5MzU1OTEzMzM1NDI2RS02LDguNzg4ODI5OTA0ODYwMDg3RS01LDIuOTY3NjI1NDQ5MDk4NTIzRS01LDEuOTcwNjI1ODA3NDU0MDcxRS02LDIuNjI3NTAxMDc2NjA1NDI3N0UtNgorNSxTYXQgMjkgSmFuIDExLDIuNzE0NjgzNzMxNzc5MTVFLTUsMi43MzQxNDE0NzE4MTk4NDg0RS01LDEuOTk1MDM1MDU2NDIxNzAxRS01LDIuMzU2ODA5NzMwOTA5MDg5RS00LDIwLjkzMDA3Njg2NjY3NDIwNiwyLjQ2NDI0MzAwMDg0ODYwNkUtNCwzLjUzNDU3NjI2NTEwODUxMUUtNSw5LjA4NDU0MjgyNjA3NTI4M0UtNSw5LjAwNjQ3NDk0Mzc2MjM2N0UtOCw2LjUxNzg3MjYzMzA1MzcwMkUtNCw0LjI4MDA1NDg1NTcyOTk0MkUtNCwxLjAwMjY0NTQ4MjQzMDk2NTRFLTQsMS42NDM1Njg3OTgwOTAxMDQzRS01LDIuMDI3OTQxNjgzMjg3ODg5NkUtNSw0Ljc4MTUzODAzMjUyMDU3MTRFLTQsNS4wMjQ3MDM0NjExMTU0NzAzRS01LDcuNzY2MDI4Nzk3NjkwNDA1RS02LDIuNDM5Mzc1NTM5MDc3NTQxOEUtNSw0LjU5MzM0Mzc1MzIwMTg3N0UtNSwxLjQzOTU3NjA1NzIxNDc3MzJFLTQsMS4wNjM4MDcwNDI1MDEzMjlFLTQsMS4xOTk3OTc1Njk0MzA1ODJFLTUsMS45Njg2MzA5MzQ4NjQ4NjkyRS00LDEuNzY4MTkxMDgxNDMxMTE1M0UtNCwxLjMwODY0OTY5ODk4MjUzNzRFLTQsMS4yODgxMzM3MjY3MzYzNTMzRS01LDEuNDIwMTQ5MzgzNzgxMDIzRS01LDIuMDk4OTg4ODc3MjMyOTc5RS00LDYuNzc4MTE0NjI1MjUzMTA2RS02LDIuMzU2NjE4NTg2OTQ1MDc3NkUtNSwyLjAyMjU2MTE3Nzk2MDg1NTRFLTUsMS44NzYxODk5MDMyODgyMzEyRS00LDMuMjQ2NTc3ODAzMjIyMTcyNkUtNSwyLjQ2MTMwMDgwMzM2MTM1MzdFLTQsNC4yMjE2OTExNjAxNzE2MTRFLTQsMS45MDY3MDQ2NTQwMDIxODY4RS00LDMuNTQyMTEyODYwMTk3NTE0NEUtNSw3Ljc1NzMyNDg3NTk5NDcxM0UtNSwyLjE2NDk4MDEzNjIxMDY5ODVFLTQsMi42NzIxNzYzMTg5NDc1MjdFLTUsMy4yMjAzODI4NTg1NjM3MDE2RS01LDYuNTU0MzUwMzI5MDkyNDA4RS02LDEuMTcxMzIyMjg5OTY2NTI0NEUtNCw1Ljk5OTA4Njg5NjE5NzgxOEUtNCwxLjA1OTU4NzU0NTg0MzY5NDRFLTQsMS42MDA0NTQwODY3MzI0MDFFLTQsNy4wMDI0MTc1MjYzNjc4ODJFLTYsMS42MzI1MzM3NDAyOTIyNTU0RS00LDUuNTIxNjAxNTU5MTk0MzM2RS01LDMuNjY5NDY4MjY2MTE5MDEzRS02LDQuODg4OTQ1ODI2Njg5MjYyRS02Cis2LFN1biAzMCBKYW4gMTEsOS4xOTc5MzI0NDAyNDA4NzJFLTQsOS4yMzM1MjE0NDQ3ODU3NTlFLTQsNi43MzgyNDg2NjY2OTMwMTZFLTQsMC4wMDc5ODcyNDc3MDI5NTM1MzMsMTY1LjkyODg0MTA3NTk0Mjc4LDAuMDA4MzU5Nzg2NTIxMTAwMzUsMC4wMDExOTQxMTIyMTMzNjYwMTU0LDAuMDAzMTEwMzU0MjQzNzc2ODEsMy4wMzk5ODQ4MTA1NTAyMzZFLTYsMC4wMjIwNzkwMTY0MDcxODM0MSwwLjAxNDUxMzMzMjE5ODY4MTk1NSwwLjAwMzQwOTE3NTQxODQzNjYzNzcsNS41NTAyNjg1ODQxMDM5NjdFLTQsNi44NTQzMzc2NzMxNzg5M0UtNCwwLjAxNjE5Mzk4MDUzNDUwMjQ5NSwwLjAwMTY5NzIxNzQ4OTg4MDQ1NTQsMi42MjE5MzA0NTUxNDk5MkUtNCw4LjIzNzk4MDI1MjA3NDY0RS00LDAuMDAxNTUxNzg5ODAyODQ0MjQ2MiwwLjAwNDg2ODY5NTg1OTI3OTI5NSwwLjAwMzU5NzAxMDc3MzY5OTg0NSw0LjA1MzAyMDU4ODkyNzU1N0UtNCwwLjAwNjY1NjI5NTMwMDIzMjI2NCwwLjAwNTk4NzEwMjkxOTYzMzQzOCwwLjAwNDQyNjE3NzY3MTYyMzA2Niw0LjM0OTU2MjYwNTk0MzYxNkUtNCw0LjgwMDA2MDIyNDczOTdFLTQsMC4wMDcxMDA5ODU2Mjk5MzY1MDQsMi4yODk5MzYyOTE2MzcwMTc1RS00LDcuOTYzOTE1NzI2NzM2ODMyRS00LDYuODM2NTY5Njk4MTkzNjA3RS00LDAuMDA2MzQ1MTI4MzI1MjYwNzI5LDAuMDAxMDk3NTM2NzAxNzE1NTgzNywwLjAwODM5OTUyMDYyNDQyMTgyNiwwLjAxNDI3NzM2NzUyNTA0NDI3MSwwLjAwNjQ0NTE5OTYxMzUzMTA4OCwwLjAwMTE5NjY0NjM4OTU4ODc4OTIsMC4wMDI2MjM1NTM4NDQ4MTcyMDMsMC4wMDczMTg3ODEzMTcwNTEyNjIsOS4wMzk2Mzk0OTcyMjQ3MjFFLTQsMC4wMDEwODc3NDEwODk5MTQzNzA4LDIuMjEzOTc1MDA3ODAzMzI5N0UtNCwwLjAwMzk2MDcyMzcxOTMyNDYyOSwwLjAyMDMwMDA0NTU0MzIxNTk1NCwwLjAwMzU5MTQzMzUyMTc0MTk3MjMsMC4wMDU0MTI3NjA0ODQxODg2MjgsMi4zNjU5MTIzNTE0OTMwNDdFLTQsMC4wMDU1MjM3MzUzMTg4NTIzNzMsMC4wMDE4NjUzODk5MjQxMjkwMTY2LDEuMjM4Nzc1NDA2NzExODIxNEUtNCwxLjY1MTU5OTYwMTU1NjA1NTNFLTQKKzcsTW9uIDMxIEphbiAxMSwwLjAwMTk3MTQ2NjE4MTQ1MDYyOSwwLjAwMTk4NzgwMjMxNTcxODIxNSwwLjAwMTQ1MDM5MzMzMzUyOTE1OTcsMC4wMTcxMTQzNDA3MTY5MjY3NzcsNTY3LjUxMjYwMjM3NjI4ODIsMC4wMTc4ODgzNTQyNjcxNjIzNDMsMC4wMDI1Njk0MTkzNjE1ODg4MjczLDAuMDA2NTc0MDI3NzgwMDk1NjQsNi41NDkxNDY5OTE1MTI1NDZFLTYsMC4wNDczMzc4ODYxMDU4MTUxMTYsMC4wMzEwNzQzMzkzNDE3MDQ3LDAuMDA3MjcyNzQzNjUwNDE0OTk5NiwwLjAwMTE5NDk0MjM0MDkzOTgxNSwwLjAwMTQ3Mzk1NjU5NDk5NTU0MzUsMC4wMzQ3Mjk2NDYzOTY0NDIyNiwwLjAwMzY1Mjg3OTY3ODQ0NzcwNDYsNS42NDY2ODAyNDU5NzY4MDFFLTQsMC4wMDE3NzM1MDQ2MzM1MTU4NzY0LDAuMDAzMzM5MDg4MTI3NTQ0MjYzLDAuMDEwNDYwOTk5NDI4MjM1MDQ4LDAuMDA3NzMwOTg3NTU1MDA3MjExLDguNzIyMDQwNjkzMTIwMzg3RS00LDAuMDE0MzA2NzE3NjI0MDQxNzQ1LDAuMDEyODQzODUxOTI3NTg1ODk3LDAuMDA5NTA5MzkwODk5NDc4MDg5LDkuMzY1NTY2MTQwNjIyNTk5RS00LDAuMDAxMDMyMTk2NDgzMzA4OTY4MSwwLjAxNTI1MTIxODY5NzE5MzAwOSw0LjkyNzI0NjM0Nzk4MzExOEUtNCwwLjAwMTcxMjk0Mzc5NjQyMTk3MDksMC4wMDE0NzAwMTU1MjEyNjU4NTg3LDAuMDEzNjMzOTA0MTI5NjcyODgyLDAuMDAyMzU5NTM3NTk3NjE5NzYyLDAuMDE3ODMxMDA2MTUwNTI3MzQ0LDAuMDMwNjc4MjQ4MDk3NDYyODE0LDAuMDEzODU3OTIyOTg3MDg1MjIsMC4wMDI1NzQ5MDY3MTA1MDIwMTQsMC4wMDU2MzcwMzI2ODc5NzgwMjQsMC4wMTU3MzQ2NzcyMzA3NzYzNDUsMC4wMDE5NDE2MzI5NjIyNjc5MTg2LDAuMDAyMzQxMTgzNjk5NzQ1MjU0NSw0Ljc2NDg0OTMxNTk3MjE5N0UtNCwwLjAwODUxMjIwMzYwODI1MDAyLDAuMDQzNTg1NzU1NTMzMzk1OSwwLjAwNzY5NDAwOTU4OTU2NTI4NCwwLjAxMTYzMDA3NzUwNzUyNzMzLDUuMDkwMTU2NTgxMDE5MTI4RS00LDAuMDExODYxMzg4MzYwMTYxMzMsMC4wMDQwMTM4NzQ1MDA0OTQyNTI2LDIuNjY4MTM4Njg0NDk5NTg0NUUtNCwzLjU1NDAxMzEzMjA5NjcwODVFLTQKKzgsVHVlIDEgRmViIDExLDAuMDM2ODQ0MzkyNjM5OTE5MDcsMC4wMzcwMDQ1NTk3NTA3ODM2MiwwLjAyNzAwMzk2OTQwNDc2MTc3MiwwLjMxOTkzNjQwOTc0OTI1Nzc0LDM2MDUuNTQyNzg0NDY3NjczOCwwLjMzNDgxMDAyMjQxOTkxNDUsMC4wNDc4NTMwMzY1MjUwNzkxMSwwLjEyNDQwNzM4MDQyNDc3ODgsMS4yMTg0MDgyMzA5ODYzNjQxRS00LDAuODg0NDUzMzYwODE2NTQ1MiwwLjU4MTI5NzI5ODIyOTQ4MTMsMC4xMzY0OTMwNzg5MDY4MDg4NCwwLjAyMjI0MzU4NzU4NzIxMjQ4LDAuMDI3NDY2MzE2NjUxNjEzOTAzLDAuNjQ4NzI2MzI5MDE0Mzk2NSwwLjA2ODAxNjM5NjM1MDMxNTQ0LDAuMDEwNTA4MTcxNzg3ODEwMDU1LDAuMDMzMDE0ODQ0MjQxMDEwNjMsMC4wNjIxODY3NDMyOTg4NjY1MDQsMC4xOTUwNzgxNTE4MDY0NzM2NCwwLjE0NDEyOTI0OTEzMjMyMjMsMC4wMTYyNDIzMzgzMzczMzMyNjQsMC4yNjY3MTMxOTc3ODI2Nzk1LDAuMjM5ODQ5NTMyMjU1Nzg4MSwwLjE3NzM0NTc3NzI5ODA0OCwwLjAxNzQzMTgwOTQ0MDQ0NzMzNCwwLjAxOTIzNDUxNDYzMzk4ODA5LDAuMjg0NTA4NzkwNTU1Mjg3NjYsMC4wMDkxNzY3MDUyODAyMTM5NzIsMC4wMzE5MTMzMzIzMjkzNTM3NywwLjAyNzM5NDg3NDMyMzY2MjE5LDAuMjU0MjM2ODQ0MzM4NDA0NTQsMC4wNDM5Nzg2NDg3ODE0MzE3OTYsMC4zMzYxMTY3MjA0MDY0NjYzNCwwLjU3MjA2NjQ3Nzk3NDY0NjQsMC4yNTgyNjQ3MDU0MDkwNzQ4LDAuMDQ3OTU0NjYxMzM5MTM5OTIsMC4xMDUxMjAxNTAyMjczOTYzOSwwLjI5MzI2Njc0NTAxMjYzNDQsMC4wMzYyMTg1ODA4OTAzMTg2MywwLjA0MzU5MTYxNjE1NjY1MjA2NiwwLjAwODg3MjUxMDEwMTI0MTM2NiwwLjE1ODcwMTkwMzc2MDYyNDM1LDAuODEzMzE1NTYwNzU1NDIzNSwwLjE0Mzg1NTMxOTk4MjU5NzksMC4yMTY4Nzc4MjU4ODA0NDE2MywwLjAwOTQ4MTA1NzI4NzUzNzgxNCwwLjIyMTMwOTkyNzkyNjcwMjYyLDAuMDc0NzU0MDAzNTIyMjQ0MiwwLjAwNDk2NDgxODE2NzU1MDQ1NTUsMC4wMDY2MTg2ODYxMzI1NjQyOTMKKzksV2VkIDIgRmViIDExLDAuMDkzMTQ2ODk1ODk2NjE5MzcsMC4wOTM5ODMyNTY5MzQ2MDI2OSwwLjA2ODU3MjkxMjY1NTE5MTI5LDAuODA4NTcwNjE3MzA5NDEwMiwxNDMxMy4yOTQwNDA5MTY4OTMsMC44NDQ5NjAzMDQwNzgxNzYzLDAuMTIxNDcyNjQ1MzgzNTYwMzMsMC4zMDk5MjkwOTE3NTk5ODk1LDMuMDk2Nzc4NjkzMjg0NTE3NEUtNCwyLjIzNjcwMjU5MzY0OTgzOSwxLjQ2Nzk0MDI2NTYxMTAzMzQsMC4zNDMzNjU4MTg5Njk5NTk3NywwLjA1NjQ5NzQwNDExNDgwNTUzLDAuMDY5Njc2NDIxODQwMzM2MzMsMS42NDEwMzYwNzk2NjUxMjUzLDAuMTcyNzAxMzY0NTU4NTgxNTQsMC4wMjY2OTkwOTMwNTAyNDM3NzUsMC4wODM4NTE0NDAyNTA1ODg4OCwwLjE1Nzg2MDAzMDQ0MjE5MDY5LDAuNDk0NDQ1MjUyNDEyNTIzLDAuMzY1NDI3MTEyNjY0NjA5MjUsMC4wNDEyMzUzMTc2MDE4MDc4MjYsMC42NzYyNTExNTEzNDI0MjcsMC42MDY5MjMxMDA3NzM0NjgxLDAuNDQ5NDYwOTgxNjYwNjE0NDMsMC4wNDQyODE2OTgwMTUxNDU3MjYsMC4wNDg3OTM2MTIyOTk2NTczOTYsMC43MjA4MTI0MzEzMTI1Nzg4LDAuMDIzMjk0MTIzMjM1MDk3OTEsMC4wODA5NzY1ODg2MzQzMzYzLDAuMDY5NDg5MjMxMjU5ODM4NzMsMC42NDQ0MTg5MjU5MjY1NjA1LDAuMTExNTM0ODU5NzMzNTQ1MDQsMC44NDEyMDY2Mzg2NDM2NDQzLDEuNDUwMDM2NzU3MTk0MzgsMC42NTUwNzM5MTA3NDE1NTUxLDAuMTIxNzMyMzIxOTAwMzIwNDIsMC4yNjY0Mzc2NDg1MzI5OTMyMywwLjc0Mzc3Nzk4MDg3MTgyMDgsMC4wOTE3Njc2NDA0MjMzOTkzLDAuMTEwNjg3Mjk3ODU2MDU1ODQsMC4wMjI1MjcxNDg0ODg0NDY0MywwLjQwMjM0OTc3NDQ1Mzc4MTYsMi4wNTk4NzQwMTc4ODc0NDYsMC4zNjM0OTQ4NzU5Mzk0OTQwMywwLjU0OTcwMzA1Nzg5NzQzNjUsMC4wMjQwNjM4ODA1MjE2MDY1OTcsMC41NjA1ODMzODgxMzIzMzU3LDAuMTg5NzYxNDM3MzQ5OTExOCwwLjAxMjYxNTkwOTYxMTI2OTkxNSwwLjAxNjgwMjIwNzU0MjMzNDgzMworMTAsVGh1IDMgRmViIDExLDEuMjMyNjUzNzA5MzQ5MzUxMywxLjIzODgxOTY1MTExOTQ3MTgsMC45MDQwMDQxODg5ODg2OTA1LDEwLjcwMzE5MDM1OTk0NzQ1LDgwNjA3LjU2Mjk4NzE2NDA0LDExLjE5ODUzOTEyOTUzNjEwNywxLjYwMTg4MDU1MDUyMzA4OTgsNC4xNTM2NzA4Mzc2Njk2MzcsMC4wMDQwNzkzNTU5MzEwMzQzMzIsMjkuNTkxMjg2MDcyODc2Njc3LDE5LjQ0NDYyMDAxMjkwMzI5Nyw0LjU2MzI5OTg3MDA3Mjk3NiwwLjc0NDY2NjM0NTE1NTM0OTIsMC45MTkzNDk2Nzg1Njk4NjIzLDIxLjcwNTQwMTUxNzUzMjgzNSwyLjI3NjkzMzUzNTQ0NzQ0NDMsMC4zNTE4MDcyODE5MDE4OTQyNSwxLjEwNTI1NjE4ODI3OTU1NCwyLjA4MTcwNTEwMDU1NTUzOCw2LjUyODgzMzUwNjI1NzkwNiw0LjgyMzkwNTcxMzQ5OTkwNywwLjU0MzcyMTU1NzkxMTExNzIsOC45MjY3NDg1NzQ5NzUxODYsOC4wMjUzNjI5OTg4NjEwMzgsNS45MzUyOTU3NTAyNDUxNDk1LDAuNTgzNTg5NzM5NDYxNjk1NywwLjY0MzgxNDg4NzY1ODU4MzksOS41MjEzMTAyMzY1MzM5NzYsMC4zMDcxODkyOTIwODI3NjAzNiwxLjA2ODIzNTM0NDk1Nzg5OTYsMC45MTY5NDcyMDM0NTM1MjU5LDguNTA4ODAwMDM2OTg5NDI0LDEuNDcxOTkyNTYzNDg2MjY5NiwxMS4yMjkyMTEwNjIwNDYzNzUsMTkuMTQ1OTQwODQ3NTU0OTgyLDguNjQ0NDM5MDYzNzY5MjM0LDEuNjA1Mjg1NjQ0MzkwMjA2NCwzLjUxODEzODU1OTc3MDUzLDkuODE1ODU2OTg1MjcyNDY2LDEuMjEyMDk1NzQ1NjQyMDU5NiwxLjQ1OTI4OTY3MzQyNTAzMzYsMC4yOTcwMTYxMzU5OTM3ODI3NCw1LjMxMTU5NTQ0NDIzNTc2NywyNy4yMTY5NTc2Mzc2NjEwMiw0LjgxMjQyNTAyMDkwMzM1NjYsNy4yNTg0Mjg0MDc4OTQzMjcsMC4zMTczNzIxNzQ1MjQyNTIzLDcuNDA2MDk5OTI2MTQ2MTI0NCwyLjUwMjM5NDIwOTgyMDcwMiwwLjE2NjIyMTYzNTUzODQ5NzEsMC4yMjE1NjIzOTU4NDgwNjY3NQorMTEsRnJpIDQgRmViIDExLDMuNTY5NzM4Mzc0NTM3NTUxNywzLjYwMzk1MjM2MTcyMTc5MjYsMi42Mjk0OTI2NDE1NjQyODQzLDMwLjk4NjEzNTA3NzczOTUzMywzNDYzNTkuMzQ0OTgyNTU5NywzMi4zNzQ2OTgyOTkxNDIzNCw0LjY1Nzc2Mzc5MjA1MzUxLDExLjg1NTE4OTYxNTExOTM1NCwwLjAxMTg3NjI5MTkwNTYxMTA2Niw4NS43MjIzMzAxOTg2ODM4OSw1Ni4yNDg3ODMxMDc0NzgzNiwxMy4xNTA2MjQyMTEyNzUwMjgsMi4xNjY1MTAzMDgzOTA1NjcsMi42NzE0NTQ0MTEzNDc3NDEsNjIuODk1NTQ2NDY0NTg0NDU2LDYuNjIyMzEwMzc1NjE3MTA5LDEuMDIzODc3MTA3NDY5Mzc3NSwzLjIxNTQzNTk2Mzc3MjM1Myw2LjA1MzAxNjQ4MDg4MjgyMywxOC45NTUzMTg2Nzg2NDAzMSwxNC4wMDk3OTUyMjQ2NDEyOTQsMS41ODExNTczMjkwMTY5OTEsMjUuOTI2MzI2MDY1NTIwOTkzLDIzLjI2MjM0MDg3MTk2MTc5LDE3LjIzMDU3ODYzNjk5OTk4LDEuNjk4MTAzNDE3Nzc4NjQwMywxLjg3MDc4NzMyMjg3NzE1MywyNy42MzE5MzQxMDQxMjI4MTMsMC44OTMxOTA1MzIwMTcxMDc5LDMuMTA0ODA3NzQzNTg1MTA1NiwyLjY2NDI0NzU0Njg1NjA3OCwyNC43MDQ5Mzk5Njk3MDI5ODQsNC4yNzYxOTMyMjA2MDMyNjIsMzIuMTk2MTgwNjE4MTk1ODEsNTUuNTg5NzcwNTcxOTI5OTgsMjUuMTE1NjQ3MjI0MzU1NzgzLDQuNjY3NzI5NDE3MDgyNzM1LDEwLjIxNDI5Njg3NjI2OTM3MywyOC41MTYxOTMwODk0MjY1OTQsMy41MTc4OTM1NjQzMjUyMjksNC4yNDQzNjk2Nzk4Njc3OTYsMC44NjM4MDc2NjE2NDMzMzY2LDE1LjQyNTIxNjEzNzIxNzAxNCw3OC45NjA2NjE0OTc4MDg0OSwxMy45Mjk1NTA1MzA3MTQxNzcsMjEuMDczNzMzMjQ0MjEyNjQ3LDAuOTIyNjkyMDUzNzkyMDY0NiwyMS40ODkwODIyNDMxMzY1Myw3LjI3NjI0ODQ5NTczMDk1LDAuNDgzODExMTc1Mzc1MTQ3NiwwLjY0NDI3MTExMDM0MDQ2NzcKKzEyLFNhdCA1IEZlYiAxMSw0NS43MTk5NjQ1MDgzNDk1NCw0Ni4wNzczNTcyMjU1NzIsMzMuNjIwNzI5NTk2NDgyMjIsMzk2LjkwOTQ4Njc5MjM0Mjc2LDI0MDAyODAuMTA0OTI4MTM3Nyw0MTQuOTIxNDY0NjM4NTk0NDQsNTkuNTYyMzUyMzA2Mjg5NzEsMTUyLjcwMzIzNjQ2MzIxMTksMC4xNTE3OTg0MzM5MjAyOTcxOCwxMDk3Ljc3MDAwMjQ1NTU3NCw3MjAuNzIzOTcyMjkzMjc2MSwxNjguNzQ5MTQ3MDE0ODYyNiwyNy42OTg2NDM3NjczNTQxNDUsMzQuMTcwMzg0NDg0MDE3OCw4MDUuMzYwMjMyNzcyMDgxOSw4NC42NzYxMjIwNDEyOTM3MiwxMy4wODg1MTM5OTIxNjE4ODYsNDEuMTA5ODY5NzAyNDI2NTgsNzcuNDA0MTQwODE1OTA3NDMsMjQyLjUzNTk2MjE2MTgwNTg2LDE3OS4yMzU0NTQyMDY4NzY5LDIwLjIxODU0MDQ1NTU1NjM1OCwzMzEuNjg2MjQwMjg5NzQwMTcsMjk3LjgzMTcxMTMyMjcwMTEsMjIwLjQ3NTA5ODk1NzM3NDEyLDIxLjcwOTAwMDgxMDg4ODI3MywyMy45MjkxODUzOTAzNTE0NywzNTMuNjExMjA3NDYwMjU3NDUsMTEuNDIxOTk3NTE5NjU0OTYsMzkuNzA5ODM1NDM2ODc2MTEsMzQuMDc5MzEyMjA1MTU5NzQ1LDMxNi4wOTc1NzE5Mjk3Mjc2LDU0LjcwMjA3MTY1Mzk3MTQyLDQxMy45NjU5ODA5MDM4MDg5LDcxMS4yNjQ2MTg0ODY5NjM2LDMyMS4yNjkzODc3NTcyMjExLDU5LjY4OTQ3MjU3NjY0ODk1LDEzMC42OTMzNTcwOTgyNDEzNiwzNjQuNzgyMTA5NTQ5MDE3Niw0NS4wMTc5MTg2NzIwMzg1NzYsNTQuMjcwMDAwNjI5NTc5NTMsMTEuMDQ1Mjg2NjkyOTk3OTA1LDE5Ny4zNDg0Mjc0MTI0MTE5OCwxMDEwLjYwMzQyMjg3Nzc2NzksMTc4LjQ0MDEyNDM3NjQ0MDY1LDI2OS42NDA1NjQ3ODcxNzUsMTEuNzk5NzgxODcyODMzMDgsMjc1LjAyMDk5MzQ5NjE4MDUsOTMuMDQ2NTMxNDg5NjU4NjYsNi4xODQ0NDkwNjgwNjk5MDI1LDguMjM4NTk4MzYzMTMwMTg3CisxMyxTdW4gNiBGZWIgMTEsNDc4LjI5Mzk2NjM5Njk4MDA3LDQ4Mi45NTg0ODA2ODUyNzUwNSwzNTIuMzcwNzc0NTI3Mjk3ODQsNDE1MS42NTY2MTA2NTM3NTc1LDc1NzI0NDcuNTQxNzAzNDk0LDQzMzcuNTE4MjU0MzQ2MDQ1LDYyNC4xNjQ2NDc1NDkyMDQxLDE1ODcuOTk5ODE1MjkxMDgyOCwxLjU5MTU2Njg0Nzk0NTU2OTEsMTE0ODUuNjgzOTYzOTk3MDQyLDc1MzYuMjczNTYwOTI4ODU1LDE3NjEuNzU4MzE1MzM5NDE3LDI5MC4zMzA1MDMwNzAwMTUyNSwzNTcuOTc5NzM5MDg1MjQ3NCw4NDI3LjI2ODI3MzIwNTY0Nyw4ODcuNDMzMzI5Mzg1MTYwMywxMzcuMjA5OTgwMjg2NTkyOTIsNDMwLjg5NDQxMzc3ODI0NzIsODExLjEzNjE4MzkwMTc1NDcsMjUzOS45NjQ3NzQ5NjkzNjA0LDE4NzcuMjk5MzQyMDM3MzY2NCwyMTEuODg0MzMyMDk0Nzg0NSwzNDc0LjEwNzY2NDk3NzY1MDUsMzExNi45MTQ4MjY3NTY3OTYsMjMwOC44NDY1MDA4NTA4MDI0LDIyNy41NjEzMDI2MjA0OTMyNSwyNTAuNjg4ODE1MDEwNTA2NSwzNzAyLjU1Mjc1ODc4NjQyNTMsMTE5LjY5MjA4ODcyMTEyNzIzLDQxNi4wNTM2Mjk1Mzc1OTQxLDM1Ny4wMTI4Mzc2NzE2OTM0MywzMzEwLjQwNTE0MzU3OTM5NjMsNTczLjAxMTc5OTYwNjMzNzMsNDMxMi44NDk2MDMyNjAxOSw3NDQ4LjkwMzEzMDQ3ODgzLDMzNjUuNTI0NTIyMjM4NzI1Nyw2MjUuNTAwNDM5ODI4Njg1MywxMzY4LjY4OTk1OTUzMzk1NCwzODIxLjE4NjUwNjA5MTkxOCw0NzEuMzgyODc0MDIyNzYzMjUsNTY4Ljc3NDIzNDA2OTI0MDMsMTE1Ljc1NTY5MzEyNDc0MzU0LDIwNjYuOTU5NjI3ODY1MzQzNSwxMDU4MC4yNDE4ODkyOTY5NywxODY2LjMzMDU5MzcyNTI2NDIsMjgyMy44Mjc3ODYwNDkxMzEsMTIzLjY0NDg3NTI2NjU4NTk2LDI4NzkuNDE4MDg0Mjc1OTg0Myw5NzUuMDU1NjU5MDIzMzUwMSw2NC44MzU5MTc1NzU2MDY0Niw4Ni4zMzU4OTA5OTczNzcxOQorMTQsTW9uIDcgRmViIDExLDYwMjAuNjY0NTM2NDA0NTQzLDYzNTIuODg1Mzc5MjM0MTMxNSw0NjI3LjcwMTkxNDEyMDkzMyw1MjEwMi40MDQ0NjM4Mzg0NiwxLjMxMjIyMDEwOTI1ODkzNTZFNyw1MzczNy44MDk4Njk0MjU5NSw4MTY4LjE5ODg1MTQ0ODg1NSwxNzY5NS44NTQ2NTI5MjEyNDQsMjEuMDkxMDcyNjg4MDY2NiwxNDQ5OTkuNjk5MjAxMDQ3MjIsOTM4OTcuMTQ1MjkzMzAzMTUsMjEyMjEuNzQ3NDI1NjU1MDM0LDM4MjEuNTE2MzMwMzk0MDQ0NCw0NjU0LjkxMzE1NzA5Nzc1LDEwNjY3MC4wODA2NjY2MzQ4NywxMTY0My4zNDg5NjIyOTYzNiwxODEyLjA4NTE2NDQwNjQ1MjMsNTY2OC44MDkwMDgxMTg2MjUsMTA2MTYuMzE1NjMxMTQyOTYsMzI3NTIuNzY5NTA4NDg5OTI0LDI0MjgyLjQzNjg1OTY4NTA5NSwyNzc2LjEwNDcxNDgxNjg3OSw0NDk1MS42MzczNTA2Mzc5LDM5NTcwLjQxNDI0MDQzMTgyLDI5NzQ3LjIzOTI3NjQ2Mjg1LDI5OTkuMjk0NDYwMTU5OTczNCwzMjU5LjUwOTg4OTAwMzc1Myw0NzU1Mi4xOTA5Mjc4NzYzOCwxNTY2LjAzMDE5MDc1OTQ4NjUsNTQyMi40NTU4NDM3NTY2NzksNDYzOC40NzIzMDg1OTQ4NDgsNDI3MDYuNjY0OTEyNTUxMzY1LDc0MzEuNjIyNTk5NTYwMjkxLDQ5NzkyLjY5NjA2OTM5NzIzNiw5NjEwMi4xMDc5OTA4MTUzNiw0MzcwMy45NzQ1NDUyNTM3Nyw4MTg2LjgwODU5NjQxMjcwNiwxNzY0OS4yMzE2OTI1MDEyMiw0OTU3MS41MjE4NDcxMDk2Myw2MDU4LjIwODM1NjE4MDE0MSw3NDY0LjYxMDcyNDkxMTY4MSwxNTE3Ljk2OTg0MjkwNDc2MjYsMjY3MTkuNjE0NDY1MDY2NTYzLDEzNTQ1Mi4wNTI2ODkwMTE2NywyMzM4MS41ODczNTU0MDc5NiwzNjQxNS45MzAxMTg0MzAyNDYsMTYxNS44OTQzODM5MDc5NjAyLDM2OTA5LjkyNjk4ODk0MDk1NSwxMjc2MS40NzczOTg5NzY0NDUsODU3LjE2OTU0OTA2NzUyNzQsMTEzMC40OTg2Nzg3NzMxNDI3CisxNSxUdWUgOCBGZWIgMTEsNTE0NzAuNjg5NjE4MzI5ODIsMTExNjk0LjQzNjIwMzAzMzc1LDc3NTQwLjkxODIxNzM1MjIxLDQzMzExNS4xODc4Nzg2ODY2LDEuNzg3NDg3ODg1MjgyNjgzN0U3LDQwMTczMi4xNDg0MDkxNTQyNywxMjQ0NjIuMzI1OTM2MzkwNDQsODExODguNDQ4NTc4MzA3OTQsNDkxLjkyMzczNzgzNzQzMzQ2LDEyNzUxMTAuMzU5MDcxMTQ5Nyw3MzM2NTYuNDYzNzU2NDU0OCwxMzI2NjAuOTU4MDUzMDA3NDYsNjg1ODQuMjQzNjY2MjQ3NDUsNjE1NzIuNjgxMDM2NjIyNDksOTYzNjI3Ljc0MDMwNjEzODgsMTg5NzgzLjYwMDYwMzA4NDE0LDM2NTY2LjY0NDYwNTg3MjA1NCwxMDAwOTcuMDY0MzY5MDAzNywxNjIyNTcuNzQ4MTQ0MTYzNzIsMzc0Mjg1LjA0OTExOTQwNTU2LDI5MTY3NS41NDM3MDQzMjEyNiw0MzU4NS41NjIxODU4NDk4MSw1NDI5ODEuNTU1OTg1ODc3NSwzNjkwMzkuOTc0NzY4Mjc0NjQsMzM1NTM1LjU4MjMyODI5NzYsNTYyNjQuMzc3MDIyNDc4OTg0LDQzMDQ0LjkxNjc5MDcwNjUzNSw1MTE5OTkuMTM5MDc3MTQyMiwyMzczNi43MTc2MDk1NzUxNDYsNzUxNzcuODEyNDk4NTQ5MDMsNjAzNjUuMjYyNjU1NTg5NDc1LDQ5MTQ1My4zMTI4NDk2MTQzNiw5MzU1MS42MDM1OTc0NDU2MiwyNTcwOTcuNDQ3NDA5ODcxNzYsMTEwNjk1My42OTAwMTk0NDksNTYzMjE1LjA1OTQ4OTU0ODQsMTI1MTc1Ljg3NzI5MTU5Njg3LDIwMTY5MC44ODcwMDQzODA2LDYyNzAyNS4yMDc1NTQ5NTM2LDY1ODczLjM3MDMyNTE5NzE1LDEyMjY1Mi4xMjE3Nzg5MzMzOCwyNDM5OS4zMTMwMjg5MTA0MjMsMzE3NzQ1LjY0MjA3NDE1OTQ2LDEzOTY5ODYuODgzMzkyNjQyNSwxOTEzODkuMTM1NDM2NTgzNCw0MTY2MzUuNzk4NTUzODk5NywyMzgyNC4yNzk5MzMzNjk3NjYsMzg3MDk4LjU0NTk5NDUwMjUsMTk0OTQ4LjYwNTc2ODY0NjA2LDE4MDMzLjg5MzQzMzY4NjU1NywxNzQ3OC45NTAyMTU2NTI0NAorMTYsV2VkIDkgRmViIDExLDEzNTg4OC4yNzAxOTI0Njc1Miw1NjUxMDEuNjkyNDQzMjg5MSwzNjE0MDUuOTQwNTMwMjU1MywxMTI3MzUyLjk2ODA2NjkzMTUsMi4xNzM3MjUxNjg2OTcwOTY4RTcsOTkzNjgwLjI5MjAzODQ4MTcsNTA4ODcwLjUyMzM3MTEwNTksMTY0MTI2LjQ4ODc0NjIxMzIsMTEzODUuNTUyMzAyODQ5Mzc1LDM0MTYxNTguMDYzMDYzNjk1LDE4NTI3MTAuNDIzNzM3NDAxMSwzMDMzODUuNTU3MjY1Mjc1MywzNjA5NTkuMzA5ODU5NzIyNDUsMjE3Mjg5LjkzMTQ2ODM3MTc0LDI2MTg5MTkuNTc0NTA1MjI1Myw4NDg0MTUuODI4MTUzMzY2MSwyNjE2MDkuMTgwNDc1MTM5NzMsNTEwNTAyLjk1ODMyMzA0MTg1LDY2NTg1OC4xNDgzMTQyNDY0LDExNzU1NDcuMDQyODA5ODM2Myw5NTAzNjAuNzk4OTEwODg0LDE4NTA0NS44MTMzOTM5NzcyNCwxNzc2ODA4Ljc5ODY3Nzc1ODgsMTAyMDYyMi43NDk4MDI3MDcxLDEwNDQyMTcuMDQxMzczOTc3NCwzMjYxNTEuMTQ1MDcxNDgxNCwxNTE2ODMuNzE0MTI4NTM3MDcsMTU0NDA4MS40NDY3NTIwOTI4LDk2NDMzLjc5NzA2NDQyMTc2LDI3NzI4OC45OTUyMTkyMjcxNiwyMDk5ODEuNzk2OTMyNTk0NCwxNTUxMjU4LjM5MzQzNDU1MDEsMzE2MzcwLjY5ODc1MTMzNDcsNTQ0MjI0LjE0NTkyMTA1NSwzNDk2NDM2LjA2ODA0MDIxODcsMTk0MjYwMC44Mzc3ODI0ODMsNTEzOTM3LjI1ODAxOTk4MTczLDYzMzQ3Mi45NjY4NTU1MTM3LDIxMjg5MDEuMzUwNzI1MTY1NiwxOTk5NTIuMTIzODE3MTkzNDcsNTU0ODA4LjY1MjA4ODY0MjQsMTA2OTMwLjE5NjIwMDExOTAxLDEwMjc0NTIuNDI3NjQxMzUwNCw0MDk4ODU4LjgyMTA5NDYzOTYsNDk0MzU1LjYxOTkyNjAyMDk3LDEzMDk2NTUuNzk3NTI3OTA4Myw5MzczNi4wMjU4MDI0MTY0NSwxMTQ3Nzc5LjAyNDE1Mjk5Nyw3OTk1MzQuMDc4OTQ5NTA4NiwxNTI3OTMuMDY0ODc3MTM4OTQsNzI3NjIuMzQ5MzAwNDM3MTcKKzE3LFRodSAxMCBGZWIgMTEsMjI4ODQ3LjA5MzkyODMxOTEsMTE4NDE2OC41MDIyNzMxNzIsNzM3NjY0LjUyMjA5NjU3NTksMTg4ODQxNy4wMjI5MzAxNDA2LDIuNDk3NzIxMTA0MzQxNjYxNkU3LDE2MzIyMjMuMzg5NzQxODg0Myw5OTU5MjAuMjEwMDMzMDc0NywyNDc4NjUuNTIwMTgxOTE5Nyw2MTc2Mi41ODQ2MTQ2MjE2MDYsNTc4NDc1NS4wNDY4NTA3NzUsMzA2NzgwOC40MjQ4NDgyMTQsNDgyOTgzLjU0MDM4OTAyMzg0LDc2NjA3NC44MjU1ODk2MTk2LDQwNTI3OC42MDU3OTkxODk3Nyw0NDU4NDE4LjYzNDM0NzI5OCwxNzA4NzQwLjc4Mzg1MDMwOTQsNjE1NzEwLjU2MTI1MjAzMDgsMTA3MjUyMC4zOTk2OTI3MTEsMTMwNDcxOS4xNzk2NTUyNTU1LDIxMDc1NDMuODQ0MjI4ODQ0NiwxNzI1NTAxLjE0ODUxMjAxNywzNjY1NzQuOTUwMzA1NTMxNzMsMzIzMDc2My4yMzE2ODk2NzY2LDE3NDg3MDYuMjMzMzUwMDI5MiwxODY2MTM2LjI1MDUxMTU2NjIsNzE0MzY0LjkxNjc1ODEzNDUsMjgyNzc1LjQ5NTkxMzI4MTksMjcyOTI0My4xMDkwMjc0NDg2LDE4ODM0NS43NDI3NTAyNDI3LDUyNDgwMy4xNDc5OTQyODc4LDM4OTc2OS44OTE0NDA3MzQxNSwyNzg1OTMwLjQxNjcxNzc4MzUsNTgxNzEzLjMzNTA3ODQzNCw4Mzg2OTEuMTY2OTY3NzQ2Nyw2MjgwNzc4Ljg0ODY3MzY4NCwzNTk1NjQyLjA1OTEzMDk4MywxMDA3MTk2LjM1Mzg2ODMwNCwxMTM1NzA2LjY2MjgxNTY1MzcsMzkxOTY3NS4xNTQxMDExODU1LDM1NDIzMy4wMzM0NzM1MzI1LDExMjE2MjcuMzk4OTQ0NjA4NCwyMTM5OTUuNzc4NDg4ODAxOCwxODYwNjE1Ljg3OTExNjU4ODUsNzE3NDcwNC4yNzU2NDIxOSw4MjU2ODEuMjQxMjg5MDEwNSwyMzQ4NjU3LjAzODcwNTYwNjUsMTgxMTg3LjU0NTE0OTAzMzgzLDIwMTY2MjIuOTY0NjYxNjkxMywxNTY2MzQ5LjUzNTU5NDE0OTMsMzgzMDI2Ljk5MjAwMTQyNjc2LDE0MzIzMy4xNTU0Njk2MDA0CisxOCxGcmkgMTEgRmViIDExLDMyMjE2Ny4zMzU3Mjk1NjM0MywxODgxMTg5LjI3Mjg3NTg0NzgsMTE1NTQ3MC40MDA5OTc4MzgsMjY1MDMwMS43NjU3ODY2MzIsMi43NTk3MjE4NjQ0NTA3NDM0RTcsMjI2NDkzNi4xODk5NzMyNTY2LDE1MjQ5MzUuNjEyMzgxMDcwNiwzMjcyNTMuMjQ0Mzg0NDE0OCwxNzQyNTcuNzA5OTI3NTYwNzYsODE2OTQwMi4xNzE3MDk4Nyw0Mjc2ODgzLjc3NTczMDAxMSw2NTgwNDUuODMxMzY1MDc0NywxMjI1Mjc3LjU4MzE0MjA3MDMsNjA0MzcyLjE3MjM2NDUxNjEsNjMxNTU1MC40MzI0OTkxMiwyNjU3Mzc5LjIxNzEzNDgzMywxMDM5Nzg4Ljc1ODYwNzUwOTgsMTcwNjE3MC4wNDY5NzE0Mjk2LDE5OTkwNjEuMzQyODM2MTU5MywzMDc0MzM2LjczMjI3MTU4MSwyNTM0OTI3LjYyMzkzMjU3LDU2NTAwNS4yMDMwMDQwMTYzLDQ3NTAxOTguNDM2MTI3NTUzLDI0ODYyNDguMTM5MTE3NjcwNywyNzE3MzE4Ljc5MjY3MjMwNjgsMTE2MTgxMS4xOTYwODYzNzY0LDQyMTU3NS43MzMyMDU3NjMwNCwzOTQ5NTQwLjYzMjQ2MDU4LDI4ODA2OS42NDAyNTYzNDkyLDc4ODk1Ni42MTgzODM4ODYsNTc5Njk5LjA3NTI0NDc3NDcsNDA2Nzg1OC4wNTQ4MzYzNjA3LDg2MDYzMy44Nzk4ODY5NTA0LDExMjA4NTMuMTY0ODI3Njk3NCw5MTcyMDQ0LjI1Njc2MjU2Miw1MzM5MzI0LjY5MzAwNTM3OCwxNTQzMzM2LjUwMzk1MjAzMSwxNjU2NjkyLjE3ODQ0ODgwNyw1ODAzNDA3Ljc3OTU5NTQ1OSw1MTMyNzcuOTA0MDk0OTg5OTQsMTc0Nzg3Mi4wMjc5MjY2Nzc2LDMzMTY1Ny41Mzg0NzcxMTgxLDI3Mjk0NDQuMTU4MzYyMzIxNiwxLjAzMjU2MTIwNzI3ODY5NzJFNywxMTU2ODU4Ljg1MTg4MDM0NDYsMzQyNjYxMy4wNzEzNjI3ODYsMjc1NTU2LjU3ODIxODgyMzQsMjkwODQxNy4wMjE3OTM2NjgsMjM5OTY3My44OTY1MTczMTcsNjY4MzIwLjQxNTIzNDc3MzksMjIwMDA5LjU0NzM5NDEzMQorMTksU2F0IDEyIEZlYiAxMSw0MDQ1NDYuMzM4ODk3ODgyMjYsMjU0MjkxNC4xNjE2NDA3MjQsMTU0ODkxNC44NDU3ODgzMjQzLDMzMjE1NjQuMTAyMDYzMzM4MywyLjk1MjgyMDcyMTY2ODQ1MjRFNywyODE4NDUxLjI4MTgxNzM5MywyMDE2NTIyLjA2MDEzMTU2NDcsMzk0NjM4LjA2OTQ2NTYyNTUsMzEyMjUzLjY2NDY3MjM5ODI0LDEuMDI3ODYxODI3MTAwNzc5M0U3LDUzMzc3MDQuODIzODMyNTIzLDgwOTQ1OC4xNzg3NzIzOTg3LDE2NjI5MTYuMzQzNjU2MjgzNiw3ODY0NzkuNzYxNTI5MTMwNiw3OTYxMzE1LjAxNzQzNzM1NywzNTQ2OTc5LjQyNTExNzgwMiwxNDU2MzM3Ljc3ODQzOTAxOTYsMjMwODIwNi40NDMxMzIxOTA1LDI2NDQ1MjUuMDI3OTU4MDIyNCwzOTQ2ODM0LjU1Mzk1NDg4NDQsMzI2ODU4Ny4zMzQ5NTgzMDc0LDc1MDExMy43Nzc0NDc4MDQ2LDYxMjgwOTcuMzQyMjYwMTQ2LDMxNDEzNDkuODc1NTEwNTE2NiwzNDg0NjM2LjQxNDYyNzE2MywxNTkyMjg0Ljc3Njg3NzE0OTcsNTQ4NTEzLjM0MzQ2NDEyNjYsNTA0NTQwNS4wMDgxMjU5ODQsMzgwNjc2LjY1MjU3NzUxODUsMTAzMTc1MS40ODY1NDQ5NDUzLDc1MzE0NC40MTA4MDAzMzQ1LDUyMjU0NDMuNDIwNzQ2MDk2LDExMTQ1MzQuNzI0MzMwMzY2NiwxMzYyMDQ3LjM1MTUxNDcwMTMsMS4xNzgzMDc4NTI3OTQzNzQ1RTcsNjkzMDE1My40MTIxNjAwNzcsMjA0MTc2MC4yMjUwOTQyNzA0LDIxMjY4NjQuNTA2ODMzMzMyNiw3NTE4OTQzLjM0MzMzMzM4MSw2NTYyMTguNzIzNDM5MjY4OCwyMzM1ODM4Ljk1NDcwMjA0MjUsNDQxNzc1LjQ0MzA1NjQ4NDU3LDM1MTYyNDMuMjg4NzQ4NTQsMS4zMTQ1NTg2OTI5OTM3NDU0RTcsMTQ0ODMzNy45MjY1Mjc0OTg4LDQzOTk1MjkuMTc0Mjg2NDExLDM2Mjg5Ny4wNjg4OTk4MDU2NiwzNzA3NTk2Ljc4OTc0Mzk4MiwzMTc0Mjg4LjEwMjcwNTU5NDYsOTUzNDgzLjg2MjA2Njk5NzIsMjkxNDg2LjkwMjE2OTYxNzk0CisyMCxTdW4gMTMgRmViIDExLDQ2OTgwNS42MDQyODMyMjcsMzA4NTk2NC4wOTU4NTM2OCwxODcwNTc3LjgwNTIzODQyMjUsMzg1MjgyMC40NDE2ODUwNTE3LDMuMDkwODk2NzYwNTc4MTQzRTcsMzI1NTAwMC4wNjUyNzU5NTEsMjQxNTg5NC43MDU1MzQ2MjI1LDQ0NzEwNi4xMDQyMDEzMzg2LDQzNzM0OS40MTU5OTg3MDQ5NiwxLjE5NTExMzYwMDQ2MjY0MkU3LDYxNzU1NDcuMzU4MTY4MjkxLDkyODIzMi4yMzU1NTU1MjUzLDIwMjI3MTEuNDc4MzYwNDM5Nyw5MzMzMDAuODA5MzMyNTA0Miw5MjY3NTcwLjQ5NzY0NDcxOSw0MjcyODQ3LjQ5MTYzMTQ4LDE4MDM0OTAuNzQwNTc5OTIsMjgwMjQ1Mi45MDgyOTQyOTgsMzE2OTAwNi4yOTc0ODI0NTIsNDY0NTYzMi45MjUxOTI2MTksMzg1NzQ1MC4yNTgxNjU0NzUsOTAwNzc4LjAyMjYyNDUxMjMsNzIzNDMyNC41MzY0NjIxODgsMzY2MTkwMi4yNzgwMTQ4Njg1LDQwOTg4NTkuMDM1OTA3NzYzLDE5NDc3MjEuMzM1OTE4MDIxLDY1MDg0Ni40MjQ4Mzk3NjcyLDU5MjA5NjAuMTE5MTA1ODIxNSw0NTU4ODguMjYyOTk1MjM3MjUsMTIyNzk2NC44MzYxOTYyNjI2LDg5Mjg3MS41MzUxNzE4MjA4LDYxNTI4NDYuNDk0NTM4OTE3LDEzMTg3NTYuNTYwNjYyMzUwNiwxNTUwMzA1Ljk4NTkzNzI1MTUsMS4zODc1MDAwMjg2Mzc4MTA2RTcsODIxMTEyMS42NDEzNjU2LDI0NDY3NzEuODA2OTM5Njc3LDI1MDM0MzMuNzU1MjE3NTEzNSw4ODk5MTE5LjA3NTk3NjI2Niw3NzA0NjguMjYyNTM0NTEzNywyODE1ODU4LjI1MzM1NzIwNDYsNTMxNTQwLjcxOTE1OTk1Myw0MTQ3NDgwLjA5OTYzODg1MiwxLjUzOTQ4MjcwMDI2OTU4NDRFNywxNjc4OTAzLjM1MTI5MjM1Niw1MTc4NzkyLjgzNDExNTUyNCw0MzM3MTcuMTQwODQ2MzY5Nyw0MzQ1NDQ2Ljc4NjUyODU3MTUsMzgwMzY5My45MzMyMjkxMjk4LDExOTI5NTMuODcyNjA2MTE5NCwzNDk2MDcuOTgwMzQ0NjM2MgorMjEsTW9uIDE0IEZlYiAxMSw1MTg0NDcuNjU3NzQ2NTY1MzUsMzQ5OTMzNS4xNTA2ODMxMzc2LDIxMTQ4ODguMTM1OTUyNDMyLDQyNDg1NzcuMTMyNDE4OTU4LDMuMTg3NDM4OTEwNzExOTE5RTcsMzU3OTU0My4wMDI2NjA2OTY0LDI3MTgxMDMuMzg1Mzg5MzY2Nyw0ODU4NzIuNzY5Nzc0Mzc2NCw1Mzc3ODUuMDQzMDM0Mzk2NSwxLjMxOTg0OTkzODA1NTI2NjhFNyw2Nzk4OTM5LjQwMjMzNTMyLDEwMTYyNjUuODE2NTYwMzcyLDIyOTY4NzMuMTc4NDcyNDEsMTA0Mzg5Ny41MDc2NzAzNTQsMS4wMjQyMzI2MTE1MTczOTdFNyw0ODIzNTI0Ljg2MzMxMzUyMiwyMDcwMDkwLjQ4MDAyNzE3MzIsMzE3ODc1NC40Njc4NDk3ODEzLDM1NjU5MjguODU3OTUwNjY4LDUxNjk5MzQuMjAzNTA4MTA0LDQyOTk4MzguODUwMzk3OTMwNSwxMDE0OTExLjg5MDIwMDM1MDksODA2NTUxMS4yOTQ2NjgwNDMsNDA1MDYxNC45Mzg0MDk0MDMsNDU1OTU1Mi42ODA0MzE0NTUsMjIxOTIzOC4yMDY2MjMwNjUsNzI3OTI3Ljc1OTUzODQ3NDgsNjU3NjkxNC41NzcwNTkxMzksNTEyNzkwLjg3MzUwMjk0MjIsMTM3NTk3Ni44NjQ1NTIyNDg1LDk5ODA3NC45MjI1NDEzMjI4LDY4NDg3OTAuOTY4MDE0NTMzLDE0NzIzNzUuMDU3MjUzMTcwNSwxNjg5NTA1LjI3MDI4OTM4NTIsMS41NDQ0ODYzOTgxMTc3OThFNyw5MTc1MzE4LjM2MjAyODk0OSwyNzUzMjg1LjIyNzk4MDgwNCwyNzg1OTY5LjkxNDA3ODM3MzUsOTkzNzQ0NC45NzkwNTI4MTYsODU2MDgyLjg4NzM2NzA2OTYsMzE4MDE0Mi45MTk2NjQxMTE1LDU5OTYwMi44NDI0ODc4NzYyLDQ2MjE1NzcuMDE4Njg0MzEyLDEuNzA3ODIwOTE2MDY2MDUyNEU3LDE4NTA2MDkuMjQwNjkzMzQyNiw1NzYzNDgzLjgxOTQwMTE4OCw0ODcyNDYuMDczNTMxODAwMjQsNDgyMzAxNS44MzQ2MjM0OTMsNDI4MDAxNC4wODE2MjcwMjYsMTM3NzY0NS4wNzMwNzE1ODE4LDM5MzYxMS44NTg5NDkzNjA2NworMjIsVHVlIDE1IEZlYiAxMSw1NTMzMjMuMDM5MzcwMjc2MywzNzk5ODQ3LjUzMDAwOTMyNjUsMjI5MjIzOC45OTg1MzY2ODgsNDUzMjIyNS41MjY5NTMzMTIsMy4yNTM4MTcxNzUyNTcwODUzRTcsMzgxMTg1OS4zNzAxNjQ5MTgsMjkzNjk0Ni43OTk0NDU2MjEsNTEzNTU5LjU1Nzk4MTI4NTAzLDYxMzI3Mi45MDU0NDQ3OTU0LDEuNDA5MzE2NTAzMDE3ODIyMUU3LDcyNDU0MDMuOTYzODU2ODU1LDEwNzkxNzYuMjc2MTI5ODUsMjQ5NjMxOC45Njk2OTA4MDE2LDExMjM3NDQuNDMyNDIwNjkzOCwxLjA5NDE3MTgyNzY5MjM3NjhFNyw1MjIyOTcxLjAxMjU2ODUxNywyMjY1MDIxLjA0ODM2NTA4NSwzNDUyMzU2LjE1ODE2NDY3MiwzODUzMzc5LjY5NDQ3MjE5MTQsNTU0NzQ2NC44MDM5NTgxODgsNDYxODY1OS43NjI2MTk2MDI1LDEwOTc2MjEuNDg4MTY3MDEyMyw4NjY0NTkwLjYzODgyNjk0Miw0MzI5NjQxLjE1Njk2NDIzOSw0ODkxMjA5LjYwODc5MDUzLDI0MTcwODIuMTI1NTEyNTIxNyw3ODM1NzYuMDExMzY1MzQ2OCw3MDQ4Nzg1LjAxMjc4NzU1OCw1NTM5OTEuNjAwNTkxMjM0MiwxNDgyOTM2Ljg1MTQzNjA4OSwxMDc0MDA0LjI2Nzc5NDc1MjUsNzM0OTk3NC41NTM5MTM5MTU1LDE1ODMxNzguMzM2MzYzOTgxNSwxNzg4ODkxLjYxMjA5NzM3MjMsMS42NTc1NDE3NDcyNDk1NDhFNyw5ODcxMDg2Ljc4ODU5NDk4NSwyOTc1MjYzLjk5MTMwOTc5NDYsMjk4OTQxNC4xNDUzMDk2NzE4LDEuMDY4NjQ0NDA3ODM2ODEwN0U3LDkxNzY4MC42ODQzOTQ2ODgsMzQ0NDQ0Mi4yMTg5MDM4MDIzLDY0ODk1NS4wMzYxNDk1NjA1LDQ5NjMxODkuNTUyODQwNDAzLDEuODI4ODM2MTU4NDUwMTQyN0U3LDE5NzM2NTEuMzY1ODk2MTMxOCw2MTg0NTA3LjE5NDc3MzE1Myw1MjU5NzkuNTIyNTcwODA0Niw1MTY2NDIwLjEyOTIzODY4Myw0NjI0OTYwLjU1MjM1NDE3MiwxNTEzMDU3LjcwNDMwNDQwMzIsNDI1NDg4LjIzMTkyODMzNjcKKzIzLFdlZCAxNiBGZWIgMTEsNTc3NjU4Ljc4OTA4ODkyNzcsNDAxMTYyNS4zNTEzMjQyMywyNDE3MDkyLjc2NTkzMTQ4NCw0NzMwMTA0LjgyOTYxMzg0NSwzLjI5ODg0ODMzMjc0OTk4NzhFNywzOTczNzkzLjcwNjE1Mjk2MzUsMzA5MDc0MC44MzE4Nzk5NzYsNTMyODUwLjU0NjMxMzgxNTIsNjY3NzAxLjI1NDQ3OTc0NDcsMS40NzE3NjE0MjI1NDY5NTUyRTcsNzU1NjcxMC41NzUwNzM4MTcsMTEyMjk4NC4xNjk1NDkxMDYyLDI2MzY5NDAuOTk4MTM3MTg2LDExNzk3MzUuOTU4ODg0Mjk5NSwxLjE0Mjk5OTUxMDg0NzI3NjZFNyw1NTA0MDI1LjQyMzM0ODczMiwyNDAyOTUyLjY3NjIxMzQ2NzUsMzY0NTE4OC41MTQ5MDc2OTMsNDA1NTM5OC41OTEyOTk4MjYsNTgxMTcwMS44MDIyNzczOTIsNDg0MTk0Mi40MDY3MTMxOTA1LDExNTU3NzYuNTY3Mzc1MTM4LDkwODQxNzguODY2MjE2MzUsNDUyNDUwMS42OTk1NDkyODMsNTEyMzMwMy4wNzIzODc1OTYsMjU1NjczNi4wNzE0ODY3ODkzLDgyMjU5Ny42NzMwNzgwMTQ1LDczNzg4MjEuNjgyMjgzNzI2NSw1ODI5NDMuMTc4NTA0NTg5OCwxNTU3OTkxLjc3MDA1ODE5OCwxMTI3MjM2LjY0NDUwNzAwNCw3NzAwNzg2LjkwNTA5MTIwNzUsMTY2MDgyNS4yMTY5NDkzNTgzLDE4NTgwODkuNTgxOTA2NTk5LDEuNzM2Njc3NzUwODUzODgxNkU3LDEuMDM1ODgwOTI0MDA4MzQzNkU3LDMxMzEyNzAuNTM1MTE5ODg2NSwzMTMxODA2LjU4MTUyNDU4NDQsMS4xMjExMzQ4Njg3Mzg2NTMzRTcsOTYwNzY4LjM4MDU5MzA0NjQsMzYzMDQzNC43MzgzNzAyMzE0LDY4MzY3MC41OTE1MTUwMzg2LDUyMDI0MDMuOTAwNTEwOTAzLDEuOTEzNDM2NDA5NTYwNzQwNEU3LDIwNTk0NzcuMDc1ODYzOTYsNjQ3OTE4OS4zMzc1NDIzMTEsNTUzMTg0Ljk3OTU0NjA0ODEsNTQwNjUzMy45MzYyOTExMjQsNDg2NzM4NS4wNTI2ODQ0MDIsMTYwOTA1OS4xMjcwNjY5MzI5LDQ0Nzg5NS4yMjAzODEyNTEyNQorMjQsVGh1IDE3IEZlYiAxMSw1OTQzMDUuNTg1ODA3NDY5LDQxNTc1NjEuMzg3OTM4NjkyNywyNTAzMDYyLjUxMDM3MDY1OCw0ODY1NDQwLjkzNjQ4MTE4NSwzLjMyOTA3MTc0ODQ3Mzk2M0U3LDQwODQ0ODUuNjE4NjE2NTU3LDMxOTY0OTcuODE0MTA0NzE5Niw1NDYwNDkuMjg1NzExMTA2LDcwNTgzOS40OTA1NzY0NDk5LDEuNTE0NDg0MjY1NjkxMjIzNEU3LDc3Njk1NTEuNzk3NTQwMzczLDExNTI5MTQuNDQzMzUxNTYyNCwyNzMzODc4LjgzMDU5NTg1LDEyMTgxNzUuODAwMTUyMTEzNywxLjE3NjQxMTc4NzU5OTYxNUU3LDU2OTc0NzAuMDExMDg1MTUxLDI0OTgyOTAuNDY4NDkxNjk4NiwzNzc4MDc5LjEyMDk2ODQyODQsNDE5NDMyMi45NzEyODY1MzIsNTk5Mjg1MC43MjU1NDA2OTgsNDk5NTA4NS4xNjk5NjYwMTUsMTE5NTc4Mi43ODAzMjQzMjYxLDkzNzE5NzYuOTM0MDAxODU2LDQ2NTc4NzEuOTk3MTExMTczLDUyODIzOTcuMzc3MjcyNDc0LDI2NTMwODkuOTM5NzQxMzQ1Niw4NDkzODYuNzQwNjMxMDY2NSw3NjA0OTYyLjk2MTA1OTIxMiw2MDI4NTAuNDkyMDEyNTkzOSwxNjA5NTQ1LjQ2MzU3NTEyNCwxMTYzNzc2LjA0NDg5ODI2NDgsNzk0MTMwMy4wNzk1OTE3NTcsMTcxNDEwNS4wNzQ5Njg3MDAzLDE5MDUzODQuOTYyNTU2ODY3LDEuNzkwOTMzNjgzMTk2MTAxN0U3LDEuMDY5MzU1NDU3NDUyNjM0M0U3LDMyMzg1NTMuNjg3NzU5MTUzLDMyMjk0MjQuNDAxNDAxODA4LDEuMTU3MTU0NTgxNDE1MTYyOEU3LDk5MDI5NC41NDA4OTI5MzE5LDM3NTg0NjQuOTEzMDI3NzUwMyw3MDc1NTkuOTI0ODUwMzA5OCw1MzY2NDU4LjI0Nzg2NzEzMiwxLjk3MTM4NDA3NjczMDUwMTdFNywyMTE4MTcwLjkwMTg3OTExNjQsNjY4MTIxMi4yMDQ0OTE3NTYsNTcxODg1LjIzMTMyOTM5NTQsNTU3MTAyNC4yMDM2MDI1OTQsNTAzNDA5NC41MTY0NTgwMDksMTY3NTUwOS41MDIwNzc3NTQxLDQ2MzMwNi4zNjY5MDgxODM0CisyNSxGcmkgMTggRmViIDExLDYwNTUxOS44MDY1MjkwNDQyLDQyNTY0MzYuMzk5MDYyMjk3LDI1NjEyNzMuNDE3NDY4NzEzLDQ5NTY2MDAuMDkzNjMzNjExLDMuMzQ5MTc2MDk2NDc0Mzg2NEU3LDQxNTkwMTcuNzY5MDk5ODk0NCwzMjY4MDMyLjM4NjYzMzU1MDMsNTU0OTUwLjg3ODM1MzQ4NDcsNzMyMDExLjA3NTIzODIzMDUsMS41NDMyNjg0ODY0NjYxMDA2RTcsNzkxMjg4My4zOTgzMjczMzQsMTE3MzA2My4wOTcyNTU3NzUsMjc5OTU3NS4xMzkyMzI2ODM1LDEyNDQxNDMuMjQ4NDczMzA1NywxLjE5ODkyNjAwOTYxNzY4MzlFNyw1ODI4NDEwLjk5MjM5NDUwOCwyNTYzMDM3LjIwMDk0NDAzOCwzODY4MTIwLjgwMTgxMzcwNyw0Mjg4Mjk1LjAyNDMwNzczMSw2MTE1MDg2LjkyOTMyNDIwOCw1MDk4NDYwLjM1MjczMTc5NCwxMjIyODUxLjU0MTIzMTMzNTYsOTU2NjI1NS44ODA4NjMxODYsNDc0Nzc1NS42ODI5NjEwOTcsNTM4OTc0MS43OTk1ODgxNTEsMjcxODQzNC42OTk0MTYzNzk0LDg2NzQ4My40NDI2ODUwODczLDc3NTc0OTguMDA1OTIzOTMsNjE2MzE1LjE5MDc2ODU4NDQsMTY0NDM4NS43NDYyNjM3OTMsMTE4ODQ1Ni4zODUxOTYwNzMsODEwMzYwNy4yMzg4ODQxOSwxNzUwMDgzLjEzMTQ5MzQ5OTMsMTkzNzI0NC44NTc3Mzk3MzcsMS44Mjc1NDY2OTcxMzQ0MDcyRTcsMS4wOTE5NjM4NTg5NjYzMjIyRTcsMzMxMTEyMy4wODg3ODM5OTQzLDMyOTUyOTUuMjQ3Njg2MTgyLDEuMTgxNDc4MzcwMTIzMzk4M0U3LDEwMTAyMTEuNTc0OTYwMzg4OCwzODQ1MTM1LjM4OTk5ODA1MzcsNzIzNzI3Ljg4NDAyNjgzMzgsNTQ3NzE5MC44NDQ5NDg2NTksMi4wMTA0NTk4NDc3MjU4NDJFNywyMTU3NzAzLjIwODI5NTk1NDQsNjgxNzUzNC45MDk5Mjc2MTgsNTg0NTMwLjA5Mzc0NDU4NjcsNTY4MTk1Ni4yNDM2NTc0ODQsNTE0Njg2MC41NjMyMzA4MDksMTcyMDY4Ny43MDMyMjE0NjY5LDQ3MzczMi4wOTQxNzMwMjY5CisyNixTYXQgMTkgRmViIDExLDYxMjk4My42MTcxNzkwOTE2LDQzMjI1NDQuNzQyODQ4Nzk2LDI2MDAxNzQuMzExNDI1ODMyNiw1MDE3MjY3LjUxMzUzMTc0NywzLjM2MjQ0OTc5NTE1Mjg3NkU3LDQyMDg2MDguMjMyOTQ1NDQzLDMzMTU3OTYuODkzMjkxMDkxNSw1NjA4ODYuNDQ0NTE2MTI5NCw3NDk2ODcuMTU2Nzc1NjgzNSwxLjU2MjQyODA3NTAyNzMxMThFNyw4MDA4MjU3LjU3NjYzODU5LDExODY0NjkuMjUyOTIwNzA1NCwyODQzNTEwLjEzNDE5MjUwNzIsMTI2MTQ2My45NzMzODMzMzczLDEuMjEzOTEzNTQxNTk3ODYwN0U3LDU5MTU4OTIuNzg5NDQ1NzAyLDI2MDY0MDkuODAwNzM3MjQxLDM5MjgzMjUuOTcwNDQ2NzMxNCw0MzUxMDQyLjg2ODUyODU0OSw2MTk2NTQ3LjcwODExMTU2Nyw1MTY3MzcxLjQ3NzgwMTA4LDEyNDA5MzAuMjAxNjA5MDExMyw5Njk1NzY4Ljg0ODcyNDkxMSw0ODA3NTk3LjgwMTI4MTAzMyw1NDYxMjczLjI0MTU0MDY4MywyNzYyMTU4LjQ1MDkxNjc3ODgsODc5NTU0LjExNjE2MjgyNzksNzg1OTExOC4yNTc0MTEwOTMsNjI1MzA1LjM0OTQ1MjE1NDgsMTY2NzYzMi4zMzM1NzUwODIyLDEyMDQ5MTYuODE1MDg4NDUyLDgyMTE3NzQuMzYzOTQ0NzczLDE3NzQwNzMuMzk2MTk1NTI4LDE5NTg0NjIuMDE0Nzg2ODEyNSwxLjg1MTk0NzQ2MDg1OTM3NjJFNywxLjEwNzA0MTQ1Njg3NDU3MjNFNywzMzU5NTc5LjkyNTcyNTQ3MDgsMzMzOTE5Mi45NjkzNTI2NzksMS4xOTc2OTgwMjg2MzU2ODc2RTcsMTAyMzQ4MS4xNTg3MzIxODIzLDM5MDMwNDQuMzIxMjc0NDg1LDczNDUyOC4zNDcwMDg3NjYxLDU1NTEwMDIuMTQ2OTAzNDE5LDIuMDM2NDg2OTMxNjQ2Mzg2NUU3LDIxODQwMTEuMjc4OTQ0NzgsNjkwODM4My44MjQyNTExNDYsNTkyOTcxLjAxMzYwMTc4LDU3NTU4NTAuNDMyMjExOTU0LDUyMjIxNTcuMzk2NDA3MzQzLDE3NTA5NzguMzk4MzE5NTM2LDQ4MDY5NC4zMTY3NzYyNDExCisyNyxTdW4gMjAgRmViIDExLDYxNzkwMi43MzYxOTgwNzg0LDQzNjYyNzYuODQ1MzA2NjYsMjYyNTg5Ny41NDE2Nzg2NzM2LDUwNTcyNDguNzkxNDExMjY1LDMuMzcxMTU3NjAwMDA1MTI4RTcsNDI0MTI4NC45Mzg2ODU1ODk1LDMzNDczNTkuMDYyODIzMTMsNTY0ODA3LjE4Mjg3NjE0OTcsNzYxNDc2LjY1MDc5NjgyMTEsMS41NzUwNTYyOTYxMzQ2MTFFNyw4MDcxMTA1LjIwODk1OTE2MSwxMTk1MzA0LjMzNTI2MTY3OTcsMjg3MjU3OS42MzA0MDA4ODA3LDEyNzI4OTkuMzc1ODczMjE3NiwxLjIyMzc5MjYzNTI4MjkyNzRFNyw1OTczNzI3LjYzNDU4NzUzMywyNjM1MTQ2Ljk0NjgyNDExNTIsMzk2ODE1NC41NTA3OTc4MDc1LDQzOTI1MDYuNjkwOTg2OTY0LDYyNTAyODkuNzIzMjk0NTY5LDUyMTI4NDQuODA3NTE2MTMyNSwxMjUyODc4LjgzMjI4NzAyMTQsOTc4MTIzNC42OTEyNDkyMyw0ODQ3MDQ2LjY0NTYxMTI5OSw1NTA4NDYxLjgxNzgyODI3LDI3OTExMDEuMjU2NzM3NjM4Nyw4ODc1MjMuMjg0MDY2ODUxMyw3OTI2MTQyLjcxMzEzMDYxMiw2MzEyNDUuNzE4NjIyMDA4NywxNjgyOTg0LjIwODg2MTU4MTUsMTIxNTc4My4yNjgxNzkwODM3LDgyODMxMzcuNTk5MjUwNTUsMTc4OTkwNy45MTg3NzY2NzcsMTk3MjQ1OC44NjU2MTEwOTgyLDEuODY4MDQ1OTI4ODE1OTI0NEU3LDEuMTE2OTk0NDk4Njc5NDI5M0U3LDMzOTE2MDAuMzI3NTI4ODk4NiwzMzY4MTUzLjU1ODgzMDI1LDEuMjA4NDAzOTExOTU4MTU1OEU3LDEwMzIyMzMuNTc4ODAyODExMywzOTQxMzMwLjY5NzA5MTU2OCw3NDE2NjcuODU5NTM3MjEzLDU1OTk3MDYuNjU1Nzg2MzQxLDIuMDUzNjUwMzU1MjY3Njk4RTcsMjIwMTM0OC40MjU3MjMwOTI2LDY5NjgzMTkuNzgyNzQ3NjM3LDU5ODU0Ny40NTAxMzcwMDI5LDU4MDQ1ODIuNzQ3NzA1MjMyLDUyNzE5MTMuNDM0MzQ0NTM4NSwxNzcxMDYyLjQ2MTA1NDU5LDQ4NTI5NS4zMjQxMTQ5NDY3NgorMjgsTW9uIDIxIEZlYiAxMSw2MjExMTguNTUyMDU1NzE0Nyw0Mzk0OTU0LjY2NzE2MjI1OCwyNjQyNzU5Ljk4MDY0NjIzMjYsNTA4MzM4NS4wNDY5MDUyMDYsMy4zNzY4Mzg2Mzc5NjUzNEU3LDQyNjI2NDQuNjQxOTI3MjMsMzM2ODAzNi44Mjk1MzMwOTU1LDU2NzM3Ni44OTc5MTUxMTI0LDc2OTI2MC42MzQ0MDI4Nzk1LDEuNTgzMzEyMjQwMjEyMjc4M0U3LDgxMTIxODcuMTUyMTkxMzE2LDEyMDEwODEuMDgxMTgzNzA4LDI4OTE2NDUuMzU5NDMwNjY4LDEyODAzODUuNzIxNzM5OTIyMiwxLjIzMDI1MTYyMjYyODg5M0U3LDYwMTE2MzMuMzUzMDkzMTQ3LDI2NTQwMTYuNzA5MDE2MDI3LDM5OTQyNzMuNDU3NjYzNTg4LDQ0MTk2NzEuOTQyNDUwNjMsNjI4NTQ1MC45ODE2NTA3MTQsNTI0MjYwMi4wMTE4NDA1MzcsMTI2MDcwOC4yODczMTUyMTU0LDk4MzcxNjMuODAwMDI4NDY2LDQ4NzI4NDAuMjU2NTQ1NDQsNTUzOTMzMy45MjIxMjQ1NjEsMjgxMDA5MS4xNDUyNTMzNjk2LDg5Mjc0MC4zNzE0MDk0MTc0LDc5Njk5ODQuNzk3OTY4Mjg3LDYzNTEzNy4zOTgzOTk5MTk1LDE2OTMwMzYuODEyMjE4NjU2NSwxMjIyODk2LjYwODM0NjAzNTcsODMyOTgyOC45NTQ3NjgwNjUsMTgwMDI3MS44OTA2MTU2OTgyLDE5ODE2MjAuNjQwNjYyNjI4NSwxLjg3ODU3ODgzMTI3MjU1OTZFNywxLjEyMzUwOTYxNjI4Mzg4MTNFNywzNDEyNTc4LjcxODY4MjU2OTUsMzM4NzEwMS4zMTkxMzQ1MTQzLDEuMjE1NDExMjQ3MDE5NjI3RTcsMTAzNzk1OC45MTA0OTk1NjQ2LDM5NjY0MjUuNDA1OTMyMjM5Myw3NDYzNDYuNzcyNTAyNTksNTYzMTU3Ny4wMTE5MDUxMTMsMi4wNjQ4NzU3MzgwMjAyMjNFNywyMjEyNjgxLjcyNjUyNDQxMTIsNzAwNzUzMy42NjUyMjkwMTcsNjAyMjAwLjE0NDg3Nzk2OTYsNTgzNjQ1Ni43OTcwMDU5MTgsNTMwNDUxMS4yODQyODc5MzEsMTc4NDI1OC4zMjA3MDQ5ODU5LDQ4ODMwOS45MDI0MzYyNjMxCisyOSxUdWUgMjIgRmViIDExLDYyMzIwNi41MzkzNjkzMjE0LDQ0MTM2MjMuNDYyOTIwNzU2LDI2NTM3MzMuODY0MjcyMzE3LDUxMDAzNTQuNTQ5ODUyMjY4LDMuMzgwNTI3MDk2Mjk3NzYzRTcsNDI3NjUxMi42NDczOTIxNjksMzM4MTQ4Ni43ODA5ODI0ODIsNTY5MDQ5Ljk1NjU4MzAyMzIsNzc0MzU3LjE4NDkwNjYwMSwxLjU4ODY3Mjg5NDU4MzEwMjlFNyw4MTM4ODU5Ljc2NDU3NzM1LDEyMDQ4MzIuOTg2Mzc2MDA4NywyOTA0MDU4LjU2NTUwNzUyNzQsMTI4NTI1Mi4xNzU1MDc3NzAyLDEuMjM0NDQ1NjU4NTkzNDY0RTcsNjAzNjI5OC4wNTQ0NTI1NDcsMjY2NjMxNC42NDAyMjc2NzM2LDQwMTEyNzYuOTI2MTAyOTU2OCw0NDM3MzQxLjk3NjUxMjYwNSw2MzA4Mjk1LjMyMjUzNTY2ODUsNTI2MTkzOC41MzA1OTYzNTUsMTI2NTgwMS43NjkzOTY2NTEzLDk4NzM1MDcuNzgzNDQyOTUyLDQ4ODk1ODkuODAzNTcwNzIyLDU1NTkzOTAuNzY5NzYyNTExLDI4MjI0NTkuMDM3MzIxNjYzNSw4OTYxMzEuNjg1Mjc5OTk4MSw3OTk4NDY0LjAwMTA4OTQwNCw2Mzc2NjguNjkzOTM3NzgyMywxNjk5NTcyLjcyMzM0MjY0MDYsMTIyNzUyMC4yOTM1MjA1MjQ5LDgzNjAxNjUuMTAwNjI5OTQ0LDE4MDcwMDcuNjM1NjQ2NjQ3NSwxOTg3NTc3Ljg5MDE0NDA3MzksMS44ODU0MjIyNTMwMDIyNTM1RTcsMS4xMjc3NDQyOTM5NDAzMzRFNywzNDI2MjI0LjQ0NjU2NTkzMDcsMzM5OTQxMS43MTc5ODU1ODUzLDEuMjE5OTY1NTMwOTk4Mjg1N0U3LDEwNDE2NzguMTA5NzczMDUzMSwzOTgyNzU0LjkwNzU0OTM2MDgsNzQ5MzkxLjAzODc1NjE4Niw1NjUyMjg1Ljk2MjkxNDgxNywyLjA3MjE2Njc0NzM1MjM0ODNFNywyMjIwMDQwLjAyOTMxNzUyMjQsNzAzMzAxMS4wOTk1NTYwMjYsNjA0NTc1LjY3ODkwNjA4ODUsNTg1NzE2MC4yNDIzNjU4MzYsNTMyNTcxNC45Nzk1MjgyMDEsMTc5Mjg2Mi44NjgyOTI5MzEyLDQ5MDI3MC44OTI5Mzk1MDQ2NAorMzAsV2VkIDIzIEZlYiAxMSw2MjQ1NTQuMzc0MTQxODI2Myw0NDI1NzAxLjM5MTE5MDQzNywyNjYwODMxLjY0NTM4MDU5MjQsNTExMTMwOC41MzIyNDg4MTYsMy4zODI5MTE2ODExMDAyMTFFNyw0Mjg1NDY0LjgxOTcyOTg0NSwzMzkwMTgyLjE0NjcwMDYyNjIsNTcwMTMzLjA0NjY1OTk1MzQsNzc3NjcwLjgwNDI1NDI4MzksMS41OTIxMzMzNzA2MTUxNThFNyw4MTU2MDc3LjE5MDExNDEzNCwxMjA3MjU1LjkzMDIwMzI4NiwyOTEyMDkwLjM2NTg3NzcxOCwxMjg4Mzk2LjU5MzAxOTI2NzUsMS4yMzcxNTMxMTc1ODc3MTY5RTcsNjA1MjI0OC42ODUwMzg4NjMsMjY3NDI3OC43OTkzMzUwNzM3LDQwMjIyNzcuNzMxNTkwNzY3LDQ0NDg3NjUuNzY4MTc3Nzk0LDYzMjMwNDkuMzA0NDUxMjQxLDUyNzQ0MjguNzYxNDYwOTA0LDEyNjkwOTUuMTM0MTcwMjE1Myw5ODk2OTg0LjIwOTQ0NzMxNyw0OTAwNDAyLjkwMDA2NzIwMSw1NTcyMzQ0LjAwMjYzNDA0NCwyODMwNDYzLjgxMzgzNDExMzUsODk4MzIyLjk0MTMxNjQxMzEsODAxNjg1NC40NzI5NjMwMTQsNjM5MzA1LjEzMzg5Mjk3NTUsMTcwMzc5Ni41NjUyNzk1Mzc4LDEyMzA1MDcuNjgwNjM4MTI2Niw4Mzc5NzU4LjAyNTkzODgwNSwxODExMzU5LjE1NTc1NTcyMzYsMTk5MTQyOS41NjMzNTgxMTMyLDEuODg5ODQyMTYxODE4MzA1NEU3LDEuMTMwNDgwMjUwNjM5OTkxRTcsMzQzNTA0Ni41MTM2NTUzODQ1LDM0MDczNjIuMzcwMTczNDE2NiwxLjIyMjkwNzc5ODkzMzM1ODFFNywxMDQ0MDc5Ljg0MjU4NTY5MTgsMzk5MzMxNS41OTMzMzE0NDYsNzUxMzU5LjYyOTAxNTk2ODMsNTY2NTY2Mi4zMDY0ODY5MzYsMi4wNzY4NzQ0NzE2ODI2MkU3LDIyMjQ3ODkuODY3NDM3MTQ5LDcwNDk0NjUuNzEzMTkxMTcyLDYwNjExMS4yNDI2MjU5MTg4LDU4NzA1MjguNzA5MzQ2NjAxLDUzMzk0MjMuMjc2NzkyMDc1LDE3OTg0MzcuNjg0MjU2ODQsNDkxNTM4Ljc1MDU3MjgwNzcKKzMxLFRodSAyNCBGZWIgMTEsNjI1NDIwLjA2NDEwNzA1MzMsNDQzMzQ3My43Njk4NTU4NDQsMjY2NTM5OC4xNDIyMzM1OTQsNTExODM0NC4wNDU1NjA3MjcsMy4zODQ0NDc0NzY1OTAwODZFNyw0MjkxMjE0Ljk1MTU3MjI5MSwzMzk1Nzc0LjI1MjI3MjIxNDcsNTcwODMwLjczNTcyOTYyOTMsNzc5ODEyLjM4NDk4NTAzOTcsMS41OTQzNTU5OTg3NTg5MDA0RTcsODE2NzEzNS43ODg2MjYwNjYsMTIwODgxMi45MzI0MTU2NTcyLDI5MTcyNTkuNTQwMDM2MTMyLDEyOTA0MTcuODIzNjYzMjU5OSwxLjIzODg5MjEyMTk5NjMzNzRFNyw2MDYyNTA5LjU3Mzc1MjYzOCwyNjc5NDA4LjM4NzkyMTA1NTMsNDAyOTM1Ny4xMTczNTk5NTI1LDQ0NTYxMTIuNjQ3MTA1ODg3LDYzMzI1MjkuNDA0NzQ1Nzc0LDUyODI0NTUuMjg0OTgxNTYzLDEyNzEyMTMuMzkxNDQ4MzIyNSw5OTEyMDcwLjk0NzAyNzA3LDQ5MDczNDguMzY3ODkyNjg0LDU1ODA2NjYuNzkxMDI1OTI5LDI4MzU2MTYuOTAyODk2NzU0LDg5OTczMS40NzMwMDczMzQyLDgwMjg2NjkuNjU3MTk5MzEzLDY0MDM1Ny41Mjg5MzQ0OTY4LDE3MDY1MTIuMDU3Mjk4MTI0OCwxMjMyNDI3Ljg3NzQzMDUwOSw4MzkyMzQ3LjU3MjcwMDcwMiwxODE0MTU1LjkwMjgyMzg5NjQsMTk5MzkwNy42Mjk1OTQ2MDEsMS44OTI2ODIyMDU5ODc4OEU3LDEuMTMyMjM4Nzg0ODE0MDA1RTcsMzQ0MDcyMC4xNzgwMTYxMTg3LDM0MTI0NzEuMDIzNzU2OTQ5LDEuMjI0Nzk4ODM3Mjg0MDI5NUU3LDEwNDU2MjIuODk2MDQwMDc3Miw0MDAwMTA5LjQyMDQ4MTI5MDcsNzUyNjI1LjkyODYwMzM2MTQsNTY3NDI1OC4wNDYwMjUwMTQsMi4wNzk4OTg3NjMzNjYxMzg2RTcsMjIyNzg0MC41OTE0MzczMzE0LDcwNjAwMzguNTc1MjcwOTIzLDYwNzA5OC42NjIwOTUzMDc4LDU4NzkxMTcuMDEwODg4ODgzLDUzNDgyMzkuMzUyMjcwNjUzLDE4MDIwMjkuNzQ2OTIyMjE1Nyw0OTIzNTQuMTczMTAxNTI2MDQKKzMyLEZyaSAyNSBGZWIgMTEsNjI1OTczLjY1MTYxMTA4ODMsNDQzODQ1Mi4zNTA4MDU1OTIsMjY2ODMyMi41OTMzMjU1MzU4LDUxMjI4NDMuMDk2ODM5NjExLDMuMzg1NDMzMjU4MTU0NjQxRTcsNDI5NDg5Mi4zNDU4NTQ5MTgsMzM5OTM1NC4yMzk1Njc5MDMzLDU3MTI3OC4yMTQ3MzM5NTM5LDc4MTE4OS4zNzYzMTg4OTE4LDEuNTk1Nzc3MzIxMjM3OTMzM0U3LDgxNzQyMDcuNzU2NzgxMTY1LDEyMDk4MDkuMTcxNTk3NTkxOCwyOTIwNTcwLjk2MjgyMzk3LDEyOTE3MTEuMjIzNTM0OTQ3MywxLjI0MDAwNDE4OTQzMDQ0MDJFNyw2MDY5MDgwLjA3MTY5MTk1OCwyNjgyNjk2LjcwOTIwNTI4MjQsNDAzMzg5MS44OTI3ODA3NzI0LDQ0NjA4MTYuMDY1MDc5MjEsNjMzODU5My42NzM4NjQ3MTksNTI4NzU5MC4yNzQ1MTYwNzIsMTI3MjU2OS42MTM2NDA5OTksOTkyMTcyMi44NTA2OTg5NDQsNDkxMTc4OS45ODA5NDg4NTksNTU4NTk5MC42MDgwODc3MjQsMjgzODkxOC43NzAxNzM0Miw5MDA2MzIuNzk4NDU2MTE2NSw4MDM2MjI2LjgwMzU0ODEwOCw2NDEwMzEuMjQ1MjE3OTk2OCwxNzA4MjQ5Ljk1MjMwMjQ3NDgsMTIzMzY1Ni41NzExNzY3NTksODQwMDQwMS4wMTk5NDk2NDUsMTgxNTk0NS4zMjkzNDM3NjIsMTk5NTQ5NS4xMDM5NzQxMzI4LDEuODk0NDk4OTY2NDE5NTgxM0U3LDEuMTMzMzY0MDA0OTgzNjMxMUU3LDM0NDQzNTIuNDIxMzY0MDYwNiwzNDE1NzM4Ljk0ODE1MzU3MiwxLjIyNjAwODc4NDAxMDQyNThFNywxMDQ2NjA5Ljg2OTk2NTUwNiw0MDA0NDU5Ljk0MzQ3OTk1Miw3NTM0MzYuNzUyMzg4MzI2OSw1Njc5NzU3LjA2ODg4NTg4MDUsMi4wODE4MzMwMDg3ODI1OTQ3RTcsMjIyOTc5MS40Njk3ODUwNjQ1LDcwNjY4MDEuODgyODA4NDksNjA3NzMwLjcyNDIxODQxNjQsNTg4NDYwOS45NjYyNDA1NzY1LDUzNTM4ODMuMzI5NTE5NTQ3NSwxODA0MzMzLjI0MDk5NzM0ODIsNDkyODc2LjIyMTczMzgyNTA1CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNFSVJTdGF0ZXNPbmx5X0ZEX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9TXzAuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTRUlSU3RhdGVzT25seV9GRF9SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vU18wLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZTVjOTkyCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTRUlSU3RhdGVzT25seV9GRF9SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vU18wLmNzdgpAQCAtMCwwICsxLDMzIEBACitpdGVyYXRpb24sdGltZSxzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9ub2RlL3RyYW5zcG9ydC9waXBlL1VTQQorMSxUdWUgMjUgSmFuIDExLDk0MzIxMS4wCisyLFdlZCAyNiBKYW4gMTEsOTQzMjEwLjk5NjgzMjQ1NDEKKzMsVGh1IDI3IEphbiAxMSw5NDMyMTAuNzExNzYzMzYwNAorNCxGcmkgMjggSmFuIDExLDk0MzIxMC43NDE2MjA3ODUyCis1LFNhdCAyOSBKYW4gMTEsOTQzMjAwLjQxNDUwNTA4ODgKKzYsU3VuIDMwIEphbiAxMSw5NDMyMDAuNDkwMjQ5Njk3NgorNyxNb24gMzEgSmFuIDExLDk0MjkxMy41ODc4ODc0MTA5Cis4LFR1ZSAxIEZlYiAxMSw5NDI4NjguMzAwNjQzNTU0MgorOSxXZWQgMiBGZWIgMTEsOTM1NjQ1Ljk0NTM2NDgxOTYKKzEwLFRodSAzIEZlYiAxMSw5MzMyNzAuNDYxNTAxMjIwNworMTEsRnJpIDQgRmViIDExLDc2MjM0MS4zMzk1ODkwMjUxCisxMixTYXQgNSBGZWIgMTEsNzI0Nzc0LjQ2OTcxMzQwNzUKKzEzLFN1biA2IEZlYiAxMSwwLjAKKzE0LE1vbiA3IEZlYiAxMSw2MTk4MzQuMjU4OTUzNDY1NAorMTUsVHVlIDggRmViIDExLDAuMAorMTYsV2VkIDkgRmViIDExLDQ4Mjk5Ni40Mzk4NjQ2MjgKKzE3LFRodSAxMCBGZWIgMTEsMC4wCisxOCxGcmkgMTEgRmViIDExLDI2NjAuNTcwMTI1MzM3NzE3CisxOSxTYXQgMTIgRmViIDExLDAuMAorMjAsU3VuIDEzIEZlYiAxMSwxNC45NzIxOTQ2ODU3MzIxNDcKKzIxLE1vbiAxNCBGZWIgMTEsMC4wCisyMixUdWUgMTUgRmViIDExLDAuMDcxNDQ0OTY2ODYwMjcyOTkKKzIzLFdlZCAxNiBGZWIgMTEsMC4wCisyNCxUaHUgMTcgRmViIDExLDMuNDA5MjQxODYyNTM3MTk4NUUtNAorMjUsRnJpIDE4IEZlYiAxMSwwLjAKKzI2LFNhdCAxOSBGZWIgMTEsMS42MjY4MzY3OTMxMzcxODQ4RS02CisyNyxTdW4gMjAgRmViIDExLDAuMAorMjgsTW9uIDIxIEZlYiAxMSw3Ljc2MzAxMDI0NzQ5MDE4MkUtOQorMjksVHVlIDIyIEZlYiAxMSwwLjAKKzMwLFdlZCAyMyBGZWIgMTEsMy43MDQzODY4NDE4MDYzNzZFLTExCiszMSxUaHUgMjQgRmViIDExLDAuMAorMzIsRnJpIDI1IEZlYiAxMSwxLjc2NzY3NTM1MjI0OTQzOTlFLTEzCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNFSVJTdGF0ZXNPbmx5X0ZEX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9TXzEuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTRUlSU3RhdGVzT25seV9GRF9SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vU18xLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNTVhMmM3Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTRUlSU3RhdGVzT25seV9GRF9SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vU18xLmNzdgpAQCAtMCwwICsxLDMzIEBACitpdGVyYXRpb24sdGltZSxVUy1BSyxVUy1BTCxVUy1BUixVUy1BWixVUy1DQSxVUy1DTyxVUy1DVCxVUy1EQyxVUy1ERSxVUy1GTCxVUy1HQSxVUy1ISSxVUy1JQSxVUy1JRCxVUy1JTCxVUy1JTixVUy1LUyxVUy1LWSxVUy1MQSxVUy1NQSxVUy1NRCxVUy1NRSxVUy1NSSxVUy1NTixVUy1NTyxVUy1NUyxVUy1NVCxVUy1OQyxVUy1ORCxVUy1ORSxVUy1OSCxVUy1OSixVUy1OTSxVUy1OVixVUy1OWSxVUy1PSCxVUy1PSyxVUy1PUixVUy1QQSxVUy1SSSxVUy1TQyxVUy1TRCxVUy1UTixVUy1UWCxVUy1VVCxVUy1WQSxVUy1WVCxVUy1XQSxVUy1XSSxVUy1XVixVUy1XWQorMSxUdWUgMjUgSmFuIDExLDYyNjkzMi4wLDQ0NDcxMDAuMCwyNjczNDAwLjAsNTEzMDYzMi4wLDMuMzg3MTY0N0U3LDQzMDEyNjEuMCwzNDA1NTY1LjAsNTcyMDU5LjAsNzgzNjAwLjAsMS41OTgyMzc4RTcsODE4NjQ1My4wLDEyMTE1MzcuMCwyOTI2MzI0LjAsMTI5Mzk1My4wLDEuMjQxOTI5M0U3LDYwODA0ODUuMCwyNjg4NDE4LjAsNDA0MTc2OS4wLDQ0Njg5NzYuMCw2MzQ5MDk3LjAsNTI5NjQ4Ni4wLDEyNzQ5MjMuMCw5OTM4NDQ0LjAsNDkxOTQ3OS4wLDU1OTUyMTEuMCwyODQ0NjU4LjAsOTAyMTk1LjAsODA0OTMxMy4wLDY0MjIwMC4wLDE3MTEyNjMuMCwxMjM1Nzg2LjAsODQxNDM1MC4wLDE4MTkwNDYuMCwxOTk4MjU3LjAsMS44OTc2NDU3RTcsMS4xMzUzMTRFNywzNDUwNjU0LjAsMzQyMTM5OS4wLDEuMjI4MTA1NEU3LDEwNDgzMTkuMCw0MDEyMDEyLjAsNzU0ODQ0LjAsNTY4OTI4My4wLDIuMDg1MTgyRTcsMjIzMzE2OS4wLDcwNzg1MTYuMCw2MDg4MjcuMCw1ODk0MTIxLjAsNTM2MzY3NS4wLDE4MDgzNDQuMCw0OTM3ODIuMAorMixXZWQgMjYgSmFuIDExLDYyNjkzMi4wLDQ0NDcxMDAuMCwyNjczNDAwLjAsNTEzMDYzMi4wLDMuMzg3MTYwMjAwMzE2ODg3RTcsNDMwMTI2MS4wLDM0MDU1NjUuMCw1NzIwNTkuMCw3ODM2MDAuMCwxLjU5ODIzNzhFNyw4MTg2NDUzLjAsMTIxMTUzNy4wLDI5MjYzMjQuMCwxMjkzOTUzLjAsMS4yNDE5MjkzRTcsNjA4MDQ4NS4wLDI2ODg0MTguMCw0MDQxNzY5LjAsNDQ2ODk3Ni4wLDYzNDkwOTcuMCw1Mjk2NDg2LjAsMTI3NDkyMy4wLDk5Mzg0NDQuMCw0OTE5NDc5LjAsNTU5NTIxMS4wLDI4NDQ2NTguMCw5MDIxOTUuMCw4MDQ5MzEzLjAsNjQyMjAwLjAsMTcxMTI2My4wLDEyMzU3ODYuMCw4NDE0MzUwLjAsMTgxOTA0Ni4wLDE5OTgyNTcuMCwxLjg5NzY0NTdFNywxLjEzNTMxNEU3LDM0NTA2NTQuMCwzNDIxMzk5LjAsMS4yMjgxMDU0RTcsMTA0ODMxOS4wLDQwMTIwMTIuMCw3NTQ4NDQuMCw1Njg5MjgzLjAsMi4wODUxODJFNywyMjMzMTY5LjAsNzA3ODUxNi4wLDYwODgyNy4wLDU4OTQxMjEuMCw1MzYzNjc1LjAsMTgwODM0NC4wLDQ5Mzc4Mi4wCiszLFRodSAyNyBKYW4gMTEsNjI2OTMxLjk5OTk4NzgwMjgsNDQ0NzA5OS45OTk5ODc3NTksMjY3MzM5OS45OTk5OTEwNjcsNTEzMDYzMS45OTk4OTQwODEsMy4zODcxNTc1MjkxMDgxNjc0RTcsNDMwMTI2MC45OTk4ODkxMzEsMzQwNTU2NC45OTk5ODQxNjk0LDU3MjA1OC45OTk5NTg3MTY5LDc4MzU5OS45OTk5OTk5NTk3LDEuNTk4MjM3Nzk5OTcwNzIyRTcsODE4NjQ1Mi45OTk4MDc1MjgsMTIxMTUzNi45OTk5NTQ3Nzc4LDI5MjYzMjMuOTk5OTkyNjQyLDEyOTM5NTIuOTk5OTkwOTEyNiwxLjI0MTkyOTI5OTk3ODUyNjNFNyw2MDgwNDg0Ljk5OTk3NzQ5OSwyNjg4NDE3Ljk5OTk5NjUyNDMsNDA0MTc2OC45OTk5ODkwNzksNDQ2ODk3NS45OTk5Nzk0MjcsNjM0OTA5Ni45OTk5MzU0NDcsNTI5NjQ4NS45OTk5NTIzMSwxMjc0OTIyLjk5OTk5NDYyNjcsOTkzODQ0My45OTk5MTE3NDgsNDkxOTQ3OC45OTk5MjA2MSw1NTk1MjEwLjk5OTk0MTMxNSwyODQ0NjU3Ljk5OTk5NDIzMzcsOTAyMTk0Ljk5OTk5MzYzNjIsODA0OTMxMi45OTk5MDU4NDgsNjQyMTk5Ljk5OTk5Njk2NDEsMTcxMTI2Mi45OTk5ODk0NDE2LDEyMzU3ODUuOTk5OTkwOTM2MSw4NDE0MzQ5Ljk5OTkxNTg3MiwxODE5MDQ1Ljk5OTk4NTQ0ODgsMTk5ODI1Ni45OTk4ODg1NDYsMS44OTc2NDU2OTk5ODEwNzAzRTcsMS4xMzUzMTM5OTk5OTE0NTVFNywzNDUwNjUzLjk5OTk4NDEzNTQsMzQyMTM5OC45OTk5NjUyMTUsMS4yMjgxMDUzOTk5OTAyOTY3RTcsMTA0ODMxOC45OTk5ODgwMTQzLDQwMTIwMTEuOTk5OTg1NTgsNzU0ODQzLjk5OTk5NzA2NDksNTY4OTI4Mi45OTk5NDc0ODcsMi4wODUxODE5OTk5NzMwODM3RTcsMjIzMzE2OC45OTk5NTIzNzMsNzA3ODUxNS45OTk5MjgyMzQsNjA4ODI2Ljk5OTk5Njg2MzQsNTg5NDEyMC45OTk5MjY3Niw1MzYzNjc0Ljk5OTk3NTI3LDE4MDgzNDMuOTk5OTk4MzU3OCw0OTM3ODEuOTk5OTk3ODEwNAorNCxGcmkgMjggSmFuIDExLDYyNjkzMS45OTgzMjkwOTM5LDQ0NDcwOTkuOTk4MzIzMDUyLDI2NzMzOTkuOTk4Nzc2MjIxLDUxMzA2MzEuOTg1NDkwMDIxLDMuMzg3MDc0OTQ0NDc4MjkxRTcsNDMwMTI2MC45ODQ4MTIwNzcsMzQwNTU2NC45OTc4MzEyNDg3LDU3MjA1OC45OTQzNDUyMzgsNzgzNTk5Ljk5OTk5NDQ3OTEsMS41OTgyMzc3OTU5ODkxNzEyRTcsODE4NjQ1Mi45NzM2MzMzMTUsMTIxMTUzNi45OTM4MDUxOTA1LDI5MjYzMjMuOTk4OTkxOTkwNSwxMjkzOTUyLjk5ODc1NTA2NzgsMS4yNDE5MjkyOTcwNTgyODA0RTcsNjA4MDQ4NC45OTY5MTc1NSwyNjg4NDE3Ljk5OTUyMzgyODMsNDA0MTc2OC45OTg1MDM4NTg3LDQ0Njg5NzUuOTk3MTgxNjM0LDYzNDkwOTYuOTkxMTU2NzE2LDUyOTY0ODUuOTkzNDY2NjY0LDEyNzQ5MjIuOTk5MjYzODkzNiw5OTM4NDQzLjk4NzkxMDAzNCw0OTE5NDc4Ljk4OTEyNDMwOSw1NTk1MjEwLjk5MTk2MDQ0OCwyODQ0NjU3Ljk5OTIxMDA2Miw5MDIxOTQuOTk5MTI4MTc5NCw4MDQ5MzEyLjk4NzEwMTc4Niw2NDIxOTkuOTk5NTg0MTAwMywxNzExMjYyLjk5ODU1MzU1NywxMjM1Nzg1Ljk5ODc1ODI4OSw4NDE0MzQ5Ljk4ODQ3NTAyLDE4MTkwNDUuOTk4MDA2NTQ4NSwxOTk4MjU2Ljk4NDczMzAyNDQsMS44OTc2NDU2OTc0MDY3Mjk3RTcsMS4xMzUzMTM5OTg4MjkzNjkyRTcsMzQ1MDY1My45OTc4MjY2NDc1LDM0MjEzOTguOTk1MjM0NjkzLDEuMjI4MTA1Mzk4NjcwNjk0NkU3LDEwNDgzMTguOTk4MzU4MDQ4NCw0MDEyMDExLjk5ODAyNDQ3Miw3NTQ4NDMuOTk5NTk3OTAxNyw1Njg5MjgyLjk5MjgwNjAxOSwyLjA4NTE4MTk5NjMxMjYzN0U3LDIyMzMxNjguOTkzNDc1NTc5Nyw3MDc4NTE1Ljk5MDE2ODUwNSw2MDg4MjYuOTk5NTcwMjk4OCw1ODk0MTIwLjk4OTk2NjU4OSw1MzYzNjc0Ljk5NjYxMjA3MywxODA4MzQzLjk5OTc3NTAyNiw0OTM3ODEuOTk5NzAwMDM2OAorNSxTYXQgMjkgSmFuIDExLDYyNjkzMS45OTY5MDk2NTg4LDQ0NDcwOTkuOTk2ODg3NDU3LDI2NzMzOTkuOTk3NzI4ODU2Myw1MTMwNjMxLjk3MzE3MDU4NCwzLjM4NjkyOTI0MTg0MjAwNEU3LDQzMDEyNjAuOTcxOTQ3NzMsMzQwNTU2NC45OTU5NzYyNSw1NzIwNTguOTg5NjU4ODc2Myw3ODM1OTkuOTk5OTg5NzQ3LDEuNTk4MjM3NzkyNTgwMTc2NUU3LDgxODY0NTIuOTUxMjc2OTEzLDEyMTE1MzYuOTg4NTg2Mjg3NSwyOTI2MzIzLjk5ODEyODk2MjcsMTI5Mzk1Mi45OTc2OTE0MDM2LDEuMjQxOTI5Mjk0NTU2NzgxNUU3LDYwODA0ODQuOTk0Mjc5ODg4LDI2ODg0MTcuOTk5MTE1OTE1LDQwNDE3NjguOTk3MjIzMDE3Nyw0NDY4OTc1Ljk5NDc3MDk1MjUsNjM0OTA5Ni45ODM2MTIwMDQsNTI5NjQ4NS45ODc4ODk3MDksMTI3NDkyMi45OTg2MzQxNTM3LDk5Mzg0NDMuOTc3NTg5MjY1LDQ5MTk0NzguOTc5ODcxMjAxLDU1OTUyMTAuOTg1MTAyNDYzLDI4NDQ2NTcuOTk4NTMzNTg5LDkwMjE5NC45OTgzODMzMTA2LDgwNDkzMTIuOTc2MTA1MzQ5LDY0MjE5OS45OTkyMjgzODE4LDE3MTEyNjIuOTk3MzE3MjM3MywxMjM1Nzg1Ljk5NzY5NzUyOTQsODQxNDM0OS45Nzg2NDE2MzEsMTgxOTA0NS45OTYzMDQxMTkyLDE5OTgyNTYuOTcxOTgyMDUxOSwxLjg5NzY0NTY5NTE5NDA2NjNFNywxLjEzNTMxMzk5NzgyOTQyMDFFNywzNDUwNjUzLjk5NTk2NzY3MDMsMzQyMTM5OC45OTExNjkxMzYsMS4yMjgxMDUzOTc1MzU0MDJFNywxMDQ4MzE4Ljk5Njk1ODAyNCw0MDEyMDExLjk5NjMzMzkyMyw3NTQ4NDMuOTk5MjUzODU0NSw1Njg5MjgyLjk4NjY2NTc2OCwyLjA4NTE4MTk5MzE3MDcxNkU3LDIyMzMxNjguOTg3OTM3ODkxLDcwNzg1MTUuOTgxNzgwNTg0LDYwODgyNi45OTkyMDI4NDc2LDU4OTQxMjAuOTgxNDE1NDM1LDUzNjM2NzQuOTkzNzE0MjI2LDE4MDgzNDMuOTk5NTgyMjY3Niw0OTM3ODEuOTk5NDQzNDQzOQorNixTdW4gMzAgSmFuIDExLDYyNjkzMS44OTY0NzQ5ODE2LDQ0NDcwOTkuODk2MDc0MDY5LDI2NzMzOTkuOTI0MTU5MDg4Niw1MTMwNjMxLjEwMTAxNTYwOSwzLjM4NTI5ODExOTQ5NTcxNEU3LDQzMDEyNjAuMDU5MDg2NDE2LDM0MDU1NjQuODY1NTk5Mjk4NCw1NzIwNTguNjQ5OTI1NTU3MSw3ODM1OTkuOTk5NjU3ODQwNywxLjU5ODIzNzU1MTQ5NTExOTJFNyw4MTg2NDUxLjM2NjQ4OTY3MywxMjExNTM2LjYxNjI5MDE5NDQsMjkyNjMyMy45Mzc1MzAxMzI1LDEyOTM5NTIuOTIyODUyNTMxLDEuMjQxOTI5MTE3NzMyNjM5OEU3LDYwODA0ODQuODA4OTczMzQxLDI2ODg0MTcuOTcwNDg5NDEyNSw0MDQxNzY4LjkwNzI3OTE2OTcsNDQ2ODk3NS44MjUzNDE2NzQsNjM0OTA5Ni40NTIwMTUxNDEsNTI5NjQ4NS41OTUxNDY2MzYsMTI3NDkyMi45NTQzODIxMDQ2LDk5Mzg0NDMuMjUwODE1ODA1LDQ5MTk0NzguMzI2MTM2MjE3LDU1OTUyMTAuNTAxODIxNzkxLDI4NDQ2NTcuOTUxMDQ0NDE4NCw5MDIxOTQuOTQ1OTczOTkyOSw4MDQ5MzEyLjIwMDc2NTE1MSw2NDIxOTkuOTc0MjI2MTIwNywxNzExMjYyLjkxMDM2MzkwNywxMjM1Nzg1LjkyMzA1MjUxOSw4NDE0MzQ5LjI4NTgzODY2LDE4MTkwNDUuODc2NDY5MjI4NCwxOTk4MjU2LjA1NDYxOTg5NjIsMS44OTc2NDU1MzkzMDQzNjlFNywxLjEzNTMxMzkyNzQ1NzUwMDRFNywzNDUwNjUzLjg2NTMxNDA2ODMsMzQyMTM5OC43MDQ3MTE5MzQ2LDEuMjI4MTA1MzE3NjI1MTAzN0U3LDEwNDgzMTguODk4MjU2NDQzOCw0MDEyMDExLjg3NzU3MTY0Myw3NTQ4NDMuOTc1MDgxMDgyMyw1Njg5MjgyLjU1NDIwOTc3MjUsMi4wODUxODE3NzE1MTc2MzVFNywyMjMzMTY4LjU5NTc3NTM3MTQsNzA3ODUxNS4zOTA3NzkxOTYsNjA4ODI2Ljk3MzM3MDk5MTIsNTg5NDEyMC4zNzgyODg5NjYsNTM2MzY3NC43OTAwNDUwOTQsMTgwODM0My45ODYwNTcyMjI2LDQ5Mzc4MS45ODE0MTA3NzkyMworNyxNb24gMzEgSmFuIDExLDYyNjkzMS43NzgxNTA0NzgzLDQ0NDcwOTkuNzc2MzExODM0LDI2NzMzOTkuODM2Nzg2Njg0Niw1MTMwNjMwLjA3NDExOTY4OSwzLjM4MDc4Mjc5NTA2NzMwNDRFNyw0MzAxMjU4Ljk4NzAyMDcwNCwzNDA1NTY0LjcxMDg2MjI5MjQsNTcyMDU4LjI2MDIyNjY0MzQsNzgzNTk5Ljk5OTI2MzAyMTYsMS41OTgyMzcyNjczMDU2NzUzRTcsODE4NjQ0OS41MDMxOTkwNDMsMTIxMTUzNi4xODE1OTc4NjA4LDI5MjYzMjMuODY1NTMyNjcxNiwxMjkzOTUyLjgzNDEzNTE1NjYsMS4yNDE5Mjg5MDkxODY0NTE3RTcsNjA4MDQ4NC41ODg5NDAwNjcsMjY4ODQxNy45MzY0NTc2OCw0MDQxNzY4LjgwMDQyNjgzNSw0NDY4OTc1LjYyNDI1MTE4LDYzNDkwOTUuODIyODIwNDYsNTI5NjQ4NS4xMzAwMjk0NjEsMTI3NDkyMi45MDE4NTA1NTA3LDk5Mzg0NDIuMzkwMDYwNDAyLDQ5MTk0NzcuNTU0Njc4MDk2LDU1OTUyMDkuOTI5OTA1Mjk4LDI4NDQ2NTcuODk0NjA4OTE0LDkwMjE5NC44ODM4NDY1NzQ1LDgwNDkzMTEuMjgzNzc1ODI1LDY0MjE5OS45NDQ1NTM1MTU1LDE3MTEyNjIuODA3MjQxODI5NiwxMjM1Nzg1LjgzNDU3ODY1MTUsODQxNDM0OC40NjU3NzI0OCwxODE5MDQ1LjczNDQ4MDQ0NDMsMTk5ODI1NC45OTM0Nzk0MDc5LDEuODk3NjQ1MzU0Nzc2NzA4RTcsMS4xMzUzMTM4NDQwNTYzMjIyRTcsMzQ1MDY1My43MTAyNDQ3OTc2LDM0MjEzOTguMzY1NjYyOTQ4LDEuMjI4MTA1MjIyOTM3MTQ5RTcsMTA0ODMxOC43ODE1MDc0Niw0MDEyMDExLjczNjU0NTcxMDQsNzU0ODQzLjk0NjM4MDk3MTUsNTY4OTI4Mi4wNDIxMTg5ODQsMi4wODUxODE1MDk1MjgyNUU3LDIyMzMxNjguMTM0MTkxNTU3OCw3MDc4NTE0LjY5MTI2MzczNiw2MDg4MjYuOTQyNzIwMjgzLDU4OTQxMTkuNjY1MjM0NTI4LDUzNjM2NzQuNTQ4MzE3MjIsMTgwODM0My45Njk5NzUzMjcxLDQ5Mzc4MS45NjAwMDY1NTg0Cis4LFR1ZSAxIEZlYiAxMSw2MjY5MjcuODU0OTU5ODk5MSw0NDQ3MDk1LjgzNjkzOTE3NiwyNjczMzk2Ljk2MjAxODU2NjcsNTEzMDU5Ni4wMDY3NTYxMzYsMy4zNDY2NjkzNzYyOTU3Nzc4RTcsNDMwMTIyMy4zMzM0NjA5NzQsMzQwNTU1OS42MTY0NzE3NjQ2LDU3MjA0NS4wMDQwMzI1MTE2LDc4MzU5OS45ODYyOTI3NDg4LDEuNTk4MjI3ODQ5Nzg5MTU5RTcsODE4NjM4Ny42MDMzMzU4NTYsMTIxMTUyMS42NDQzNjUyMDQsMjkyNjMyMS40OTc1Njc2MTcsMTI5Mzk0OS45MTAwMDQxODc0LDEuMjQxOTIyMDAxNzQ3NTQwOEU3LDYwODA0NzcuMzQ4MDY3NjM2LDI2ODg0MTYuODE3ODE3MDQyNiw0MDQxNzY1LjI4NTc4NzMyNiw0NDY4OTY5LjAwMzkxMTI4NSw2MzQ5MDc1LjA1MzQ1OTcwMiw1Mjk2NDY5Ljc4NTI3NTYxNCwxMjc0OTIxLjE3MjcxNiw5OTM4NDEzLjk5NDQyNDkyMiw0OTE5NDUyLjAxNjYyNjQyMiw1NTk1MTkxLjA0ODM3NDU1NywyODQ0NjU2LjAzODg5ODg2MDYsOTAyMTkyLjgzNjA5MjQ2MjQsODA0OTI4MC45OTI0MDAyNjYsNjQyMTk4Ljk2NzYwODgzOTksMTcxMTI1OS40MDk3MDkxNSwxMjM1NzgyLjkxODA0MTU2NDUsODQxNDMyMS4zOTgwMzEzOTksMTgxOTA0MS4wNTIzNDU3ODcyLDE5OTgyMTkuMTg2NDgzNDQyMywxLjg5NzYzOTI2NDE3OTMwMTZFNywxLjEzNTMxMTA5NDQ4OTAxMjFFNywzNDUwNjQ4LjYwNTAzODgzNSwzNDIxMzg3LjE3Mzg0OTM0NCwxLjIyODEwMjEwMDcxMTYxNzhFNywxMDQ4MzE0LjkyNTM2MzY5MjksNDAxMjAwNy4wOTU4ODY5MTUsNzU0ODQzLjAwMTgzMTE2ODUsNTY4OTI2NS4xNDU4MzM0NzgsMi4wODUxNzI4NTAwOTcwNzYyRTcsMjIzMzE1Mi44MTYwOTc5MjMsNzA3ODQ5MS42MDA5Njg2MTQsNjA4ODI1LjkzMzM2ODg1ODYsNTg5NDA5Ni4xMDIzNTI5MDYsNTM2MzY2Ni41OTAwNzgzMjQsMTgwODM0My40NDE0NTE1MTA0LDQ5Mzc4MS4yNTUzODkyODIzCis5LFdlZCAyIEZlYiAxMSw2MjY5MjEuNTIxNDM4MzY2Myw0NDQ3MDg5LjQyNzMxODc1OSwyNjczMzkyLjI4NTg2NTY4OTYsNTEzMDU0MS4wMzk4NTQ5NjcsMy4yMjc2NDg2NDU1OTQxMTQ0RTcsNDMwMTE2NS45NDYyODg4MywzNDA1NTUxLjMzNDg5NDcxMyw1NzIwMjQuMTM0ODY0NDE4OSw3ODM1OTkuOTY1MTYyNjU1OCwxLjU5ODIxMjYzODIwNTAxNzVFNyw4MTg2Mjg3Ljg2NDE2MDQzMjUsMTIxMTQ5OC4zNzMxODU1NzA4LDI5MjYzMTcuNjQ0MzAzMzQ4NCwxMjkzOTQ1LjE2MTczMTQ1MzYsMS4yNDE5MTA4MzkxNTQzNDQ4RTcsNjA4MDQ2NS41NzE4OTk1OTc1LDI2ODg0MTQuOTk2NDc0ODMxLDQwNDE3NTkuNTY3MTAxMTM1LDQ0Njg5NTguMjQxNDgzNjg1LDYzNDkwNDEuMzc3Mjc2MDA0LDUyOTY0NDQuODkxMTkwMTQwNSwxMjc0OTE4LjM2MTIxODk3NDIsOTkzODM2Ny45MjQ5NjQyODMsNDkxOTQxMC43MjQxMzMwMDQsNTU5NTE2MC40Mzc3OTQxNzcsMjg0NDY1My4wMTg1MTMzMjg0LDkwMjE4OS41MTA5NDg5ODA1LDgwNDkyMzEuOTEyMDc1Mjg4LDY0MjE5Ny4zNzk1MTk5NjYyLDE3MTEyNTMuODkwNTE0NTcyLDEyMzU3NzguMTgyNzg5OTY3OSw4NDE0Mjc3LjUwNTk1MzM1NSwxODE5MDMzLjQ1Mjg1NzA4NjcsMTk5ODE2Mi4zNjkwODcxMDYzLDEuODk3NjI5Mzg3NzgwMDI0RTcsMS4xMzUzMDY2MzA3Mjg0MzJFNywzNDUwNjQwLjMwNTY4MjE4NiwzNDIxMzY5LjAyNzAzOTk3MSwxLjIyODA5NzAzMjg1MDE5OTRFNywxMDQ4MzA4LjY3NjU4MjE5NjcsNDAxMTk5OS41NDgxOTM0NzA2LDc1NDg0MS40NjU4MDA2NDI0LDU2ODkyMzcuNzM3NTY4NDUsMi4wODUxNTg4Mjc0MTUyODM0RTcsMjIzMzEyOC4xMDg2NTIxMTEsNzA3ODQ1NC4xNjEwMzcwNzQsNjA4ODI0LjI5MjkyNjA4NCw1ODk0MDU3LjkzNzA3OTA4NCw1MzYzNjUzLjY1MjcyNDM5NTUsMTgwODM0Mi41ODA3NjgwOTExLDQ5Mzc4MC4xMDk4MzAwNDczCisxMCxUaHUgMyBGZWIgMTEsNjI2NzkzLjM0NTUyNTM4MjksNDQ0Njk2MC42NTA0NzExMywyNjczMjk4LjMxMjQ3MDAzMiw1MTI5NDI4LjA1NzU1NjM4MSwyLjUxNjk3Njc4MjE3ODQ2NDVFNyw0MzAwMDAxLjM0MjYwODMsMzQwNTM4NC44MTE1MjAzMzYsNTcxNTkxLjc5MTYzMzgxMjYsNzgzNTk5LjU0MTEyOTg4OTcsMS41OTc5MDQ5NDM1NjYyNTM4RTcsODE4NDI2NS43ODY2NDQwNzMsMTIxMTAyMy43MDUxMzEzNzk0LDI5MjYyNDAuMjM1NjUyMTU5NCwxMjkzODQ5LjU4NjU2NTI2NjgsMS4yNDE2ODUxNDc0NzM2OTc0RTcsNjA4MDIyOC44Nzc2MzE1MzEsMjY4ODM3OC40MjY2NjUyMzQsNDA0MTY0NC42NzQ0NTAzMTIsNDQ2ODc0MS44MzgxNjU3MzksNjM0ODM2Mi42MDI4OTI0NzIsNTI5NTk0My4zODE2MjUwODcsMTI3NDg2MS44MzkxNDI1MjM3LDk5Mzc0MzkuODcyMTI1OTE0LDQ5MTg1NzYuMjY4OTA3MDYzLDU1OTQ1NDMuMzY3MjM5MDYxLDI4NDQ1OTIuMzU0NDUzNTE5LDkwMjEyMi41ODAyMTMzNzMsODA0ODI0MS45OTQ2MDc4MjIsNjQyMTY1LjQ0NTYzMjgxODIsMTcxMTE0Mi44MzkwMzMxNDE3LDEyMzU2ODIuODU2ODI5MTg1Nyw4NDEzMzkyLjg4NTg2ODkwOSwxODE4ODgwLjQyMjQwMTM0MywxOTk2OTkzLjkxNjE5NTAzNTcsMS44OTc0MzAzMzY0ODU0ODA1RTcsMS4xMzUyMTY3NjI2OTUzNDczRTcsMzQ1MDQ3My40Mjg0OTA0NTc2LDM0MjEwMDMuMjYxNDk5MzU1LDEuMjI3OTk0OTg1OTgyMjUyMUU3LDEwNDgxODIuNjU3Mjg0MDMwNyw0MDExODQ3Ljg1MDgyODc2OTYsNzU0ODEwLjU4OTk0ODMyMjYsNTY4ODY4NS41MjM3OTYyLDIuMDg0ODc1ODUwMDU2Mjc4M0U3LDIyMzI2MjcuNjc3MjY4ODQ2LDcwNzc2OTkuNTM0MjUzMDk3LDYwODc5MS4zMDAyMTUwMTI5LDU4OTMyODcuOTI0NjA1ODc4LDUzNjMzOTMuNTE2NzAyNzk3LDE4MDgzMjUuMzAyNDE2NDQ0OCw0OTM3NTcuMDc3NDE5NjU2MDQKKzExLEZyaSA0IEZlYiAxMSw2MjY1MzAuODA4OTY1OTk3Nyw0NDQ2Njk0LjkxNzE0NDc5LDI2NzMxMDQuNDQ3MjQzMDc0NCw1MTI3MTQ5LjU5OTcyMjI2MywyOTU5NDEwLjY0MzkzOTAyOTQsNDI5NzYyMi42NzMzMDAxNzcsMzQwNTA0MS40NzU5OTg1NjY1LDU3MDcyNy4xMTQ2NjU5MDgyLDc4MzU5OC42NjUwODQ0NjY5LDEuNTk3Mjc0Mzg3NjgzODY5RTcsODE4MDEzMS41NjI0MzU4MDYsMTIxMDA1OS4yMjYzMjg1ODIsMjkyNjA4MC40ODQ2NzY2NSwxMjkzNjUyLjczODQwNDAzODQsMS4yNDEyMjI0MjczMjUyNjg2RTcsNjA3OTc0MC42NTk3MzkzNjk1LDI2ODgzMDIuOTE1NDQ4MDE3LDQwNDE0MDcuNTg2MTEyMDMxMiw0NDY4Mjk1LjY1MTk3NTQ4Nyw2MzQ2OTY2LjUzODQ3MjgzMSw1Mjk0OTExLjM3MjM0MzUxOSwxMjc0NzQ1LjI4MDMxOTg3MjMsOTkzNTUzMC4wMTQxNDg4NDgsNDkxNjg2NC41NjMxMjYxODIsNTU5MzI3NC4zOTI5NjE2MDMsMjg0NDQ2Ny4xMzI4NzQ2NDMsOTAxOTg0LjczMDQ2ODMxNTIsODA0NjIwNy4zNzI4NzE3NDksNjQyMDk5LjYwNzA5NzMwNTYsMTcxMDkxNC4wMjkwMzg0NTUzLDEyMzU0ODYuNTQ5MDcyNDQ3NSw4NDExNTczLjMxMzA3ODMyMiwxODE4NTY1LjM3NDkzMzQ3NTYsMTk5NDYzOS40NzgyOTQ5NTI1LDEuODk3MDIwOTA0MjU3NjcyN0U3LDEuMTM1MDMxNzEwMzk0MzQyMkU3LDM0NTAxMjkuMzU1Njk2MTE3LDM0MjAyNTAuOTc1NjkzOTE3NCwxLjIyNzc4NDg5MDQ3NjkyMDhFNywxMDQ3OTIzLjYxMzc5NTczLDQwMTE1MzQuOTM3MjU3NzA1Nyw3NTQ3NDYuOTA5MTEzMzkyMiw1Njg3NTQ5LjI4OTE0MjMzMywyLjA4NDI5NDU0NzM3MTE5MzhFNywyMjMxNjAzLjUyNDI1MTM4MTQsNzA3NjE0Ny40NDEyMDUwMSw2MDg3MjMuMjkxNDg2NzM3NCw1ODkxNzA1Ljc5NjU4NzUyOSw1MzYyODU3LjE2Mjk2NjQ3MSwxODA4Mjg5LjYxOTExNzgyOSw0OTM3MDkuNTg1MDE2NDU3NworMTIsU2F0IDUgRmViIDExLDYyMTgzOS4zMzQ1NDc1NjE1LDQ0NDE5NjEuNDEyMjY5MzM0LDI2Njk2NTAuNzQ0MTk5NjU4LDUwODY0MjQuNjk0MTA1Mzg5LDY3NjY5LjU5OTM5MTA4NDk0LDQyNTUwNjQuMzY5NzY3MTk2LDMzOTg5MjMuNDUzMzQwMDYyLDU1NTExMi42OTM0Mjg2NDk5LDc4MzU4My4wNjgwMzQ0MDYzLDEuNTg2MDA4OTQ3NTk1ODQwNUU3LDgxMDYxOTUuOTU4NDc5NTY3LDExOTI3NjQuMTE3ODk2NzQzOCwyOTIzMjM0Ljk3MDExNDAxMDQsMTI5MDE0My40NTA0MDUzODUsMS4yMzI5NTcxNTUwODk3ODMzRTcsNjA3MTA0Mi40ODMzNDkyMjEsMjY4Njk1OC4yMDUwMDYwOTMsNDAzNzE4NC4zNzQzMzY2NjIsNDQ2MDM0NC45NjI5Nzk5OTIsNjMyMjA2My40ODUxNjM2NTEsNTI3NjUwNi40MjIyNDQ1NywxMjcyNjY4LjQ0NTk1NjUxNyw5OTAxNDcwLjIzMzYzMDY5LDQ4ODYyOTYuMjI5MDU5NTM4LDU1NzA2MzYuOTkzNDE5MTQ5LDI4NDIyMzYuODY3NDMxMTg1Nyw4OTk1MjcuMjE1NjEyNTIzNiw4MDA5OTAzLjEyNjA0MDA2NCw2NDA5MjYuMzg4NDAxOTIwNiwxNzA2ODM1LjYwNDczMTM1MjMsMTIzMTk4Ni42ODgyMzQ0MDEyLDgzNzkxMTYuNzQ1MDUyMzIyLDE4MTI5NDcuODYxNTAwMjEwNCwxOTUyMjY0LjIwNTg0NzkzNjcsMS44ODk3MTc3MDIzMTQyMjk3RTcsMS4xMzE3MzIzOTY1MDY4MjY0RTcsMzQ0Mzk5OC4yNTQ0NDc1NTQ3LDM0MDY4MzEuNjcyMDgwMDE2NywxLjIyNDAzODgxMjgxNjA0MTlFNywxMDQzMzAxLjY3MDc4ODgyMjMsNDAwNTk2MC4xMjU0Mjg2ODEzLDc1MzYxMi4zMTk3OTg1MjY0LDU2NjcyODQuNzAzMjQxOTU5LDIuMDczOTE5ODI0MDQ1OTEyNUU3LDIyMTMyOTUuNTE0ODgwNjI5Myw3MDQ4NDYxLjI5MzgxNzA0NSw2MDc1MTEuMzAzMzk0Nzc0MSw1ODYzNDcxLjU3NjIyNDc4MjUsNTM1MzI5OS43NDU3Mjc3NTYsMTgwNzY1NC4yMTM4MTE4MTk3LDQ5Mjg2My4zMzQ1OTQwNjI0CisxMyxTdW4gNiBGZWIgMTEsNTc3NjkxLjMzMjg3NTAwMzcsNDM5NjIwOC45MDAyNjYwMDc1LDI2MzYyOTkuOTU5MjI2MTg4Nyw0NzAzOTIwLjY2OTIyMTYzMSw1MzcuOTcwNDg3ODMzMjgzMSwzODU4NjAzLjU5MzczNTMyMTQsMzMzOTk2OC41MzU4MzYzNzM1LDQxOTk2My42NDUxMTcxODQ5Niw3ODM0MzEuNjU1ODA2ODg0NSwxLjQ3OTgwNTMyNjQ1Njg5NzNFNyw3NDE0OTM3Ljg2OTU2Nzk0NSwxMDM0NTg1LjkzMjQwMDk4MTksMjg5NTcyMC42MjUwMDQ2NTY2LDEyNTY0NTUuNzA2NTgzMDQ3LDEuMTU0OTA4OTU1OTY5NzcxNkU3LDU5ODcwOTYuNzMwMDA2ODU1LDI2NzM5MzAuMTM1MDIzNjExLDM5OTYzNjAuODc1MjAxNjcxLDQzODM3MjQuNDMwNDA3MjIxLDYwODQyMDcuMjY2NTQxMDA1LDUxMDAzODcuMjEwNzczMTQsMTI1MjY0MS41NTEyODYwNDksOTU3NTQ4Mi45OTk0NzQ3MSw0NTk3MTA5LjE0NTg1NjY2Miw1MzU0NTMyLjA4MzMwNjc0OCwyODIwNjU0LjY5MjIyODk3Myw4NzU5MzcuMjMzODg3Mzc1Myw3NjY0MDAwLjI5NzI2NDM2OSw2Mjk2MjIuMzY2OTUzODU5NywxNjY3NjMwLjcyMjcxMDM2ODcsMTE5ODQwNi4yMzkwODEyMjg2LDgwNjkwMzAuNjcxMjQ2NDUyLDE3NTkxMDYuNDU0OTI1NzQ4OCwxNTc1ODgyLjc4ODIzMzY4MDIsMS44MTk5NDEyNjU4OTM1NDEzRTcsMS4xMDAwODU5MTI1NjMyODM0RTcsMzM4NDkxMi40NjY1Mzk0MTMsMzI3ODY1OS45Nzc0ODU2NTgsMS4xODgxMjg2MzA3MzM2Njc1RTcsOTk5MjQ1LjY4OTE1NDQwODgsMzk1MjE0OC42NjMxNDA2ODM0LDc0MjY2NS43NTAyNjE5Mjg3LDU0NzM0NDAuNjk3MDI4OTYzLDEuOTc1MjYyMzY4MDMwNTE1N0U3LDIwNDE1MjcuMTIxODMyMDM4NSw2Nzg0MDEwLjgwNTA1OTgyNiw1OTU4NDEuNjk4ODgwNTMyMiw1NTk0NzczLjI0NTY2MDA1NDUsNTI2MTE5Ni4yOTYxMDc3MTcsMTgwMTQ5NC4zNTMzOTcxMTIzLDQ4NDcwNS44MzA0MzQ3ODIyCisxNCxNb24gNyBGZWIgMTEsMTk2NTc4LjU5NjY1Mzg0ODgzLDM4MDE5NTcuNTQ1MzE1MjM5NiwyMjA5NjIxLjI1OTkxMzg4MSwxNDkxNDU4LjYwNzYxNzU3MjYsMTI2LjMwODQxNDY2MzE3ODMxLDg5NDIzMS4wMDg5MDc0OTI2LDI2MTA0NTYuNjQ1MzA4MjQ0LDEwNS41Mzg2MzY1Mzc5MDE2NSw3ODEzMjIuNTkyODAzNzI3NCw1MzgzOTQ0LjY0ODg0NzczNywxOTc2OTQ4LjM3MDYzNjQzOCwxMTA5MDMuOTI3NDU3MTUxMzgsMjUzNjE1OC42NTc5NTA1NjMsODYzODUxLjk2OTkxMjQzNDcsNDQ2MTgyNy45MzIzMTEzMTEsNDkyMjk0MS4wNjg0NDU1NjIsMjQ5ODIyMi4xMjg5MjQ3ODQsMzQ2NTQ0MC45MDM2MDQ5NTYsMzQzNDUzMC4yMTI4NTYyNDMsMzUyMDM4Ny42OTQ0NDQ0MTk0LDMxNDY3MzEuNDI5MjU3ODc2MiwxMDAyMDc1LjQzNjAzMjg0NzMsNTk0ODIwNy45NTcwMjE4NjgsMTg5ODYxNi44NjAwMDgyNDIsMzA0MzQ5MC4zMjM2NDU1OTk3LDI1MzUwNTEuMTQyODAwMjM0Nyw2MDEyMjYuODg4MTUyNzk2OCw0MDcyNjMxLjk1MTc3MzA5Miw0OTAwMjUuMzkzMTg2MTE1NjYsMTIwMDgyOC41OTgxNzM0NTg2LDgxMDA5NC4zOTY3OTY5MDgxLDQ3MTI3MTkuMTIxMjc0OTUyLDExNDY3NTUuODc2MDcyMjk5NCwzNDMxNi43ODI1NzcwMjE4OSwxLjA2NDI3MjM5NTU1MzQ1ODdFNyw3MzU4OTExLjcwMjg1MzI2MywyNjUyODMyLjUyOTkwNDc3MTYsMTg5NzEwMy4zNzM2MDg2MjM0LDc3ODcxMTMuMTYwMTM1MTY4LDUzODg3OC40Mzg2MDkzODE5LDMyNjgxNDMuNDg1MTE0MzgzNSw2MDQ1NjMuOTA3MzE3NDQzLDMzMzUxNjIuNjY3MDI1Nzc5NCw5ODA2MzU4LjU1MjM0MjI4Myw2MjEzNzcuODQyNDU0Njg4MywzOTMxNTI3LjM5NzU1OTU1Niw0NTMyNzQuMzI0NDM1ODA0NCwyODU0MDExLjgzMTcyNDA2NCw0MTIwNDA1LjgwMTI4OTA1NSwxNzE3NTgzLjg2Njg5MjMxNDcsMzgzMjEyLjk1NjY3ODcyMzYKKzE1LFR1ZSA4IEZlYiAxMSwwLjA3MjQ0NjkyMDQzMzA2OTA0LDEyODUxNS43MzgzNTUwMjUxMywzNzc2MS43ODkxNTE1NjUxNiwwLjYxMzE3NjMwNzg3NTQyNjEsMC45NTA1MTU0MDIyNjU3Njc2LDAuNTg1Nzk1OTMxMjc0OTg1Miw5OTk4Ljk5NDg1MjQ4MzU0NSwwLjA4MjgxOTgzMjQ1ODk0NzQyLDczMDEyMy41NjAyMDAwMDAxLDEuNzc5MzY3OTI5MTkxOTAxOCwxLjA1NDA5NTM5NTA2NDEwODMsMC4yMDY0NjAyNTM1NjUyOTgzLDExMzI2NC43MzQwNDQwNzU4OSwyMDguMTQ1OTAyMDkxODUwMywxLjMzNDg1ODM5NjAyNjUwNjYsNTU3MDQuNzAwMzMwOTk0NTE0LDQ4MjU3OS43NjE5NDIzNDM4LDEyNDI0OS4zMTAzODA5MSwxMzg1MC4xNjA2NDEzNDExNSwxMS45MjI1MDczMDA2NzY2MTQsNTkuMzg2NTQ4OTQ1Mzk1MjUsNjI5OC45OTk1NjY3ODI0NDIsMTMzLjI4NDM1MTg4ODc0ODQ2LDAuNTEzMDU0MTcyMjU1NTUsNi4xNzEyODcyNDc5ODkzNjksMjAxNDY5LjM3NzMwMDEzMDkzLDEzOS41NzI4ODU5MTcxMTM5MiwxLjMwMDE4MzIyNDQ3ODIzMiwxNzE1LjUwNjE5OTQyODQyNDIsNzk2Ljk3OTU4NTE1OTUwOTUsMTMzLjU3OTU1OTQ2NDg2ODM0LDIwLjc3MDg3MzU4ODQ4MjExOCw4Mi4yOTkxMTAwMDI1OTY3NiwwLjM2NzE5MTE2NDQ0NjQyNjMsNDguNTc3NzU4MDgwNTgyNSw5NTcuNDU0MzAxMzcyMDg1OSwxMDc3MC42MjU3ODkzNzc4MTcsNi40MjgzMzgwOTE5MzExMjQsNjMzLjQzMzU3MTQwODcyNjUsMC4yNDI4OTQ1NDcwMDgzNjk4OCw0MTc2NC45NDA0NTA5ODkyOSw1NTE2LjQ1OTg0NzkzOTY4Myw0NS44Mjc3MDg0NjQyNDE0OCwxLjkwNTU3OTUzMTg5ODk0MDQsMC4yNzE2ODE4NzAyNjQ2OTQ3LDEzLjkyNjc5NzMyMDQ0ODA2LDk3Ni4zMzc0MDc5MTk2MzQyLDAuNTU5ODc4NTEwNTI5NDQyOCwxNjQ3OS4yOTU0NzA1MDQ0MzIsNTM0NzYyLjIxNjczODgwNjIsMTg3NC40MjE3Mjc2MjY2NTcyCisxNixXZWQgOSBGZWIgMTEsNC44MDY2NTcxMjE1MjQ5MkUtNSw1LjU3NDIyMTEzNjQ4NTU5MUUtNSwzLjk4MDUzNDUyMTc1MjMzRS01LDQuMTY1Nzk3MzMxNTk3MzQ3RS00LDAuMDAyMjE0MzcxOTIxMTIzOTExMiw0LjMzMjYyMjE0OTU1MTI0NEUtNCw2LjgxNzIyNTY0Mzc1OTY5MkUtNSwxLjU5MTM3NjYzMDc4Mjg0NkUtNCwxMjQ2NTcuNDU3MDcwNDcyMTQsMC4wMDExNTYyNDQxNzgzODY3MzgsNy41NDAwOTczMzA4NTc2NTZFLTQsMS43NTQxODg2MTk3MzU3NjVFLTQsMy40MzkyNjU1NDg2MDA3NzJFLTUsMy43ODA1NDMxMjA5Njc4Njc2RS01LDguNDk4NzM1MDQwODUxMDZFLTQsOS45MTQ3MTI4ODI0Mzk3OUUtNSwxLjczODE5MTk0NzM1MjM0NUUtNSw0Ljk5NTM3NjE1MjEwMTgwNUUtNSw4Ljg2NzMxMDI3Njg5MzYzM0UtNSwyLjYyMDgzNjg3MDM3OTYxOUUtNCwxLjk1MDU0ODk5NTUzNzA2NjVFLTQsMi4zMzU3MzgxMTEwMTEyNDU2RS01LDMuNjEyNjgwODk2MTIwOTEyRS00LDMuMTUwNjE3MjkxNzc4NjMzRS00LDIuMzc4Mzc4ODA5NDY5NDk0MUUtNCwyLjc1OTYwMDgzNTUzMzI5OThFLTUsMi42NDY2NDM3NDgwMDE3MjAyRS01LDMuNzkzMDE2NDM5NTI1NDE4NkUtNCwxLjMwNTI4ODAyMTY0MzAyOTFFLTUsNC40MzYzMjU1NDg5NDM4NzQzRS01LDMuNzU4ODQ1OTE0ODAwMzYxNEUtNSwzLjQxODk0Njk0NzUyNjIwNTRFLTQsNS45OTc4OTExOTg4NTAwOThFLTUsNC4zMDQ1NDUzNzI0MDQ0NzhFLTQsNy42OTQxMDMzNTE5NjkxOTRFLTQsMy41MzcxMzkxMzU5MDQ2MDk1RS00LDYuODM4NzYyMTc5NzEzNjI1RS01LDEuNDEyMjcxMzk0Njc2NDM0N0UtNCw0LjAwMjk5ODY4MDA3OTYyOEUtNCw0LjgzNDM4NjY3NTE5NDM1NEUtNSw2LjM3NDc2NDk3NDQ4MTA4OUUtNSwxLjI4NjQ0NzcxMTYwMjY0MDZFLTUsMi4xNDQ0NTk2MjE0NjQxMjlFLTQsMC4wMDEwNzg5NDE5NTMyOTQ4NzgsMS44NzEyMTMyMTA4MjA1MTRFLTQsMi45MTQxODU1NTk2NjAxMDg1RS00LDEuMzM4MDk3MDM0MDAyNzI4OEUtNSwyLjk0MTM4MjQ4MDMxNTAzM0UtNCwxLjA2NTc3MjY2ODY0Nzg3NDZFLTQsMS4wNzA1NjIwODE0ODU5OTUyRS01LDkuNDcxMTkyODg3NjUwODhFLTYKKzE3LFRodSAxMCBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzE4LEZyaSAxMSBGZWIgMTEsMS40OTQ3NjAyMjQ0MjAyNTk4RS04LDEuNTAwMTEwNDEyNDQ4MTk1N0UtOCwxLjA5NDczMDc4MTEwMDc0MDdFLTgsMS4yOTgwMzc5MjYxNjIzMDdFLTcsNC40MTU1NTEzMzQ3NDgwNjNFLTcsMS4zNTg3MDA4MjczNDA1OTZFLTcsMS45NDAwNjA0ODk1MTQ2MjFFLTgsNS4wNTkyMjAxMDk4MDEyODFFLTgsNC45Mzg2MzUxMDI3MTAxMDlFLTExLDMuNTg4MDAwNzEyNzAzOTM5NEUtNywyLjM1ODczMzI4MDM0Njg3MDdFLTcsNS41NDE5NzE2OTEwOTExOTRFLTgsOS4wMTcxMjQ1OTE2OTgyMDhFLTksMS4xMTM2NjIyMTU2NjExMjk2RS04LDIuNjMxNTkyODY5NzcxNjA0M0UtNywyLjc1NzQwNDU5OTAxMzE0NEUtOCw0LjI1OTU3Mjc3NjA4NzQ2OUUtOSwxLjMzODM3MDExMjgzNDQzOTdFLTgsMi41MjExNzMyMTk5MzM1MTA3RS04LDcuOTEwODcwMzI4NjkxMTQzRS04LDUuODQ0NDYzMDkxMTMyMTg4RS04LDYuNTg0ODQ2ODAzNjEzNDc5RS05LDEuMDgxNTE5OTMyMjAwOTkxMkUtNyw5LjcyOTExMTE1MjMzODkxNUUtOCw3LjE5MTg4NzM2ODMyMTU5N0UtOCw3LjA2NjM2MzcyNjEyNzcxNEUtOSw3Ljc5ODkyNzkzMzAyOTcxM0UtOSwxLjE1MzgyOTc4MTE2MzE3MkUtNywzLjcyMDQzODQ0NDA0MTYxNTdFLTksMS4yOTM5MjIzOTY5MTAwNDg2RS04LDEuMTEwNzgxMzQ1MTg0NTQ4OEUtOCwxLjAzMDk4MTIzMjk4MzI1NzdFLTcsMS43ODMyNTg4MjUwMDM1NzVFLTgsMS4zNjU4NjE4NDgyMzk1MjU4RS03LDIuMzE5ODQxNTI4OTEzMDI4NUUtNywxLjA0NzE5NjQxODIzNzE1NkUtNywxLjk0NDE3NjAxODc2Njg3OThFLTgsNC4yNjI4NjUxOTk0ODkyNzZFLTgsMS4xODkxNDEwMjIxNDc1NDkyRS03LDEuNDY4ODMyMzkwMTMxMDMxN0UtOCwxLjc2NzIwODI2MDkxOTc2NzRFLTgsMy41OTY5NzI1NjY0NzM4NjM0RS05LDYuNDM1NDUzMDkxNzU2NDk4RS04LDMuMjk4NTk2Njk1Njg1MTI2N0UtNyw1LjgzNjY0MzU4NTU1Mjg5N0UtOCw4Ljc5NDg4NjAxMjA3NjI1MkUtOCwzLjg0MzkwNDMyMTYwOTM2ODVFLTksOC45NzU1NTc3NDYyNTAzOTdFLTgsMy4wMzA2NzU3NDEzNjMxMDM3RS04LDIuMDEyNDkzODA0MzU0MzY5NkUtOSwyLjY4MzMyNTA3MjQ3MjQ5MjdFLTkKKzE5LFNhdCAxMiBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzIwLFN1biAxMyBGZWIgMTEsNy4xMzI3NjE1NTcyMjQxNDdFLTExLDcuMTU4MjkxODE2MTAxODc2RS0xMSw1LjIyMzg4MzczOTU5Njk3OTVFLTExLDYuMTk0MDMzNTc2OTUwNzA1RS0xMCwyLjEwNzAzMTkwMzgzOTY5OUUtOSw2LjQ4MzUwNzQzNTMwMjgwOEUtMTAsOS4yNTc2NjQ2NDIyNzgyNTdFLTExLDIuNDE0MTgwNTU2Nzk5NDYxM0UtMTAsMi4zNTY2MzkyODEwMjExOTM3RS0xMywxLjcxMjEzNzcxNDk4MzI0NzZFLTksMS4xMjU1NTA1NTkyNzYzOTc0RS05LDIuNjQ0NTQyMDQ2NTE5MjgzRS0xMCw0LjMwMjgzMDU1MzkzMTE5NjVFLTExLDUuMzE0MjIxNTc4NzAyNzkyRS0xMSwxLjI1NTc1NDg3OTU1MjgxODVFLTksMS4zMTU3OTAyNjUyMzY4MzMzRS0xMCwyLjAzMjYwMTM3OTg4MDc3OTZFLTExLDYuMzg2NDkyNDUxNTY3NDM2RS0xMSwxLjIwMzA2NDM1Mjk2MTMxOTRFLTEwLDMuNzc0OTQzMzU0OTgyNDQ5RS0xMCwyLjc4ODg4NjIwMjQ4MTgzMUUtMTAsMy4xNDIxODU3MDgwMjgyNThFLTExLDUuMTYwODQzNjM4ODI5NjYyRS0xMCw0LjY0MjU3OTM4MzYxMTc1MkUtMTAsMy40MzE4NTU5NTI5ODcxMTM2RS0xMCwzLjM3MTk1ODAzNzkyNzgyNUUtMTEsMy43MjE1MjYxOTc5NDU5NjhFLTExLDUuNTA1ODk0OTA2ODkyNTE2RS0xMCwxLjc3NTMzNDkyNTAzNTk2NkUtMTEsNi4xNzQzOTQ5MTYyNzU1MjhFLTExLDUuMzAwNDc0NTE2MjMwMTY4RS0xMSw0LjkxOTY4MDg4NTczODQ5M0UtMTAsOC41MDk0MzE2NzA1NTQwMjhFLTExLDYuNTE3Njc4NzA0ODc3NjE2RS0xMCwxLjEwNjk5MjAyNDkzODM1NTNFLTksNC45OTcwNTcyMDg3OTg2OUUtMTAsOS4yNzczMDMzMDI5NTM0MzJFLTExLDIuMDM0MTcyNDcyNzM0NzkzOEUtMTAsNS42NzQzOTQ2MTU0ODU1MzJFLTEwLDcuMDA5MDM3OTk0OTcwNTM0RS0xMSw4LjQzMjg0MDg5MzkyMDgzOUUtMTEsMS43MTY0MTg5NDMwMTA0MzYzRS0xMSwzLjA3MDg5NzM2OTc3NzM2N0UtMTAsMS41NzQwMzg2NTMxMTU0MDU2RS05LDIuNzg1MTU0ODU2OTUzNTQ3M0UtMTAsNC4xOTY3ODE3ODYyODUyNDI2RS0xMCwxLjgzNDI1MDkwNzA2MTQ5NkUtMTEsNC4yODI5OTU1MDY2NDkyNjgzRS0xMCwxLjQ0NjE5MDk3MjEyMDAwNkUtMTAsOS42MDMzMDUwNzAxNjEzNjVFLTEyLDEuMjgwNDQwNjc2MDIxNTE1MkUtMTEKKzIxLE1vbiAxNCBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzIyLFR1ZSAxNSBGZWIgMTEsMy40MDM2NDIwNDI0NDk3MDI3RS0xMywzLjQxNTgyNDY4MTkxODgyM0UtMTMsMi40OTI3NTU0NjA2MDQ2ODNFLTEzLDIuOTU1Njk1NzYwNDMxMjY3M0UtMTIsMS4wMDU0NDI2MDY2NDc2NTU3RS0xMSwzLjA5MzgyODE0OTQ4ODgzNDhFLTEyLDQuNDE3NjEyNDk2NzI1NzQyNUUtMTMsMS4xNTIwMDkxMzA3MjIzMDcyRS0xMiwxLjEyNDU1MTMzNTYxMTEzNTFFLTE1LDguMTcwMDUyODc4NDM3NUUtMTIsNS4zNzA5NTA4OTE0OTAwODI1RS0xMiwxLjI2MTkzNDAyMzc3ODI5NTZFLTEyLDIuMDUzMjQzMzEzNjAzMzMxMkUtMTMsMi41MzU4NjMyNjE4MDMxMUUtMTMsNS45OTIyNjU1MDQ0MTUyMzVFLTEyLDYuMjc4NzQ0OTU3MTYyMTcxRS0xMyw5LjY5OTI1NTI2OTY0NjA0MkUtMTQsMy4wNDc1MzQxMTk1MDYxNzY3RS0xMyw1Ljc0MDgzNDU2ODI5NDg0NUUtMTMsMS44MDEzNDM4MTQ0MjY0MzY5RS0xMiwxLjMzMDgxMjc5MzA4NDQ3NzVFLTEyLDEuNDk5NDAxNzgwODE0ODQ2OEUtMTMsMi40NjI2NzM3MTIzNzcwODQ3RS0xMiwyLjIxNTM2NjEzMTE1MzkzNjVFLTEyLDEuNjM3NjI3ODgyNDgzNzE1OEUtMTIsMS42MDkwNDU1MzYwMzY5MzI1RS0xMywxLjc3NTg1Mzk4NDE1MjU4NEUtMTMsMi42MjczMjY3NzA0MzI4MTZFLTEyLDguNDcxNjIwMDYxNjAzODg2RS0xNCwyLjk0NjMyNDQ5OTMwMTE3NEUtMTMsMi41MjkzMDMzNzkwMTIwNDVFLTEzLDIuMzQ3NTk0NjI1Njk5NTQ1RS0xMiw0LjA2MDU2NzQ0NzY2OTIwOEUtMTMsMy4xMTAxMzQxNDM4NTUxOTZFLTEyLDUuMjgyMzkyNDczODEwNzA2RS0xMiwyLjM4NDUxNzM5NDU1MjExMTVFLTEyLDQuNDI2OTgzNzU3ODU1ODM2RS0xMyw5LjcwNjc1MjI3ODU1MDExNkUtMTMsMi43MDc3MzIxOTA5MjkwMTJFLTEyLDMuMzQ0NjAzMDk3MzMwMTE4RS0xMyw0LjAyNDAxOTUyOTI2MTg0NTNFLTEzLDguMTkwNDgyMjI3NzAxMTAyRS0xNCwxLjQ2NTM4NDEwMjkxMjYxMDNFLTEyLDcuNTExMDY1Nzk1NzY5MzczRS0xMiwxLjMyOTAzMjI1MzQ2OTc2RS0xMiwyLjAwMjYzODUwMzUwMDgzRS0xMiw4Ljc1Mjc1Nzg5NTUwNjY2OUUtMTQsMi4wNDM3NzgzMzk4NjE5MzczRS0xMiw2LjkwMDk5NjY5NjIwMDMzM0UtMTMsNC41ODI1NDY2OTI2MTUzNzZFLTE0LDYuMTEwMDYyMjU2ODIwNTAxRS0xNAorMjMsV2VkIDE2IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjQsVGh1IDE3IEZlYiAxMSwxLjYyNDE2NDY0NjQ5NjI3MzhFLTE1LDEuNjI5OTc4MDExMTQ1MDc2NkUtMTUsMS4xODk1MDM4NDM1MjQyNTM0RS0xNSwxLjQxMDQxMTcwMDE3ODc1NzhFLTE0LDQuNzk3ODE0NTYyODQ2NTA5RS0xNCwxLjQ3NjMyNjMxMTY1ODI1OTZFLTE0LDIuMTA4MDE1NDU4MDM1MDg2NkUtMTUsNS40OTcyMDcwNDgyODcwODVFLTE1LDUuMzY2MTgyNzUyNzQwOTkzRS0xOCwzLjg5ODYyMTIwNjI0NTU0NEUtMTQsMi41NjI5MzM2MDA4OTg3MDQ0RS0xNCw2LjAyMTc1MTQxMjM2NzUxN0UtMTUsOS43OTc3NTUzNDI3MTI5MjhFLTE2LDEuMjEwMDc0MjEwNzQzMDk0RS0xNSwyLjg1OTQxNTE5Nzk4NzY0NEUtMTQsMi45OTYxMTg3MDM2MTM3MjA2RS0xNSw0LjYyODMzMjYyNDIzOTEwNkUtMTYsMS40NTQyMzU1MjU5OTI4MDkyRS0xNSwyLjczOTQzNjI5NTI3NDI3NjhFLTE1LDguNTk1NzMwNDA2MDk4OTQ3RS0xNSw2LjM1MDQzMDEwNTk3MjkwM0UtMTUsNy4xNTQ5MTAzMzY5ODc5OUUtMTYsMS4xNzUxNDkzMDQ2NjA2NzFFLTE0LDEuMDU3MTM4MDAyMjg5OTc1NUUtMTQsNy44MTQ1MDM2MzM2NzkwN0UtMTUsNy42NzgxMTMxNTUzODAyMzdFLTE2LDguNDc0MDk2OTMwMzcwMTQ5RS0xNiwxLjI1MzcxOTE2Mzc5ODcyMDdFLTE0LDQuMDQyNTI0MzQwMzk4MjE0RS0xNiwxLjQwNTkzOTg4MTIxODE0RS0xNSwxLjIwNjk0MzkzNzQ3MDY2MTZFLTE1LDEuMTIwMjM1MzY3ODI0Mjg4M0UtMTQsMS45Mzc2MzkxNTU2MzU1NkUtMTUsMS40ODQxMDcyNzY2NDk3MzM4RS0xNCwyLjUyMDY3NDkxMTcyMDg2OUUtMTQsMS4xMzc4NTQzMzQ1MjkxMjEzRS0xNCwyLjExMjQ4NzI3Njk5NTcwNEUtMTUsNC42MzE5MTAwNzk0MDc2RS0xNSwxLjI5MjA4NzM3MDQ4MDgxODhFLTE0LDEuNTk1OTkyMTg3MDQ0MzgzNkUtMTUsMS45MjAxOTkwNjE2ODkxNTJFLTE1LDMuOTA4MzY5NzcxNTc5NjlFLTE2LDYuOTkyNTgzMzA4NzE3NTc1NkUtMTUsMy41ODQxNjI4OTY5MzQ5MjFFLTE0LDYuMzQxOTMzNjQ5OTQ3NzI5NUUtMTUsOS41NTYyNzcxMTg4Mzk1ODRFLTE1LDQuMTc2Njc4OTA5MjE2NzM5NUUtMTYsOS43NTI1ODk5NzEyMTA2OTNFLTE1LDMuMjkzMDQ3NDgyNTk4NzIyRS0xNSwyLjE4NjcxOTQ3MTc0MTk1NDVFLTE2LDIuOTE1NjI1OTYyMzIyNjA2RS0xNgorMjUsRnJpIDE4IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMS41MjI1OTM1NzkxNzY0NTg0RS0xNCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzI2LFNhdCAxOSBGZWIgMTEsNy43NTAyNTkxODEyNzkxODJFLTE4LDcuNzc3OTk5NjQ2NDEwNDEyRS0xOCw1LjY3NjEyNTk0MjIzNjQwNEUtMTgsNi43MzAyNjM2MTcyMjMxNjdFLTE3LDguNTc2NDEwODczMTI0MTNFLTE1LDcuMDQ0Nzk3ODE0MTcyNjU2RS0xNywxLjAwNTkxMTk0MzI5NzA4MzJFLTE3LDIuNjIzMTgxMDYwNDQ3ODI0M0UtMTcsMi41NjA2NTgzMTk4MDU4OTdFLTIwLDEuODYwMzYwOTQ2OTc3NjQ3NkUtMTYsMS4yMjI5OTE3NTIzNTg2MjgxRS0xNiwyLjg3MzQ4NTQxMTIwODg1MDdFLTE3LDQuNjc1MzM1MzE1NTc4OTM0RS0xOCw1Ljc3NDI4NDUxMTE2MjI5OEUtMTgsMS4zNjQ0NjgxMjQ1Mjc5MDM4RS0xNiwxLjQyOTcwMDg5NTIyNDk1OUUtMTcsMi4yMDg1Njc4MDA4MzI1ODZFLTE4LDYuOTM5Mzg0MDQ2NjczOTgyRS0xOCwxLjMwNzIxNjA3MjI2MDkxMDNFLTE3LDQuMTAxNzQ3ODUxOTQyNDEyNkUtMTcsMy4wMzAzMjU3MzMyOTY5NjJFLTE3LDMuNDE0MjExMDkzMDc0NTI5MkUtMTgsNS42MDc2MjgzMzIxODE1OTdFLTE3LDUuMDQ0NDk2ODkwMDE3NjE3RS0xNywzLjcyODk1ODY3ODIxNzMzNzRFLTE3LDMuNjYzODc1Mjc5MjU1NjA0RS0xOCw0LjA0MzcwNjI2MzM2MDE0NUUtMTgsNS45ODI1NTEzODc4Mzk4NDVFLTE3LDEuOTI5MDI5MjY3NTg3MTA5RS0xOCw2LjcwODkyNDc5Nzg5MTQ0OUUtMTgsNS43NTkzNDczMzc2MzAwOTdFLTE4LDUuMzQ1NTg3NjMwNzg4MTI2NEUtMTcsOS4yNDYxMTA0MTY0MzI0NkUtMTgsNy4wODE5MjczNTk4MDk4NDJFLTE3LDEuMjAyODI2NTY4MDkwMTU2N0UtMTYsNS40Mjk2NjI1Nzg5NTUwODc1RS0xNywxLjAwODA0NTgyNTIzMDI1NDdFLTE3LDIuMjEwMjc0OTA2Mzc5MTIzMkUtMTcsNi4xNjU2Mzg0NTc3MDU5NjdFLTE3LDcuNjE1ODI0NjE5NDg5MzcyRS0xOCw5LjE2Mjg4OTAyMTAzODc2OEUtMTgsMS44NjUwMTI4MDk1OTE5NjJFLTE4LDMuMzM2NzUxMTc4OTAwNDAxRS0xNywxLjcxMDMwNjM2OTQzNzAyMkUtMTYsMy4wMjYyNzEzNTc2MjM5MzZFLTE3LDQuNTYwMTA1NjkxMTg3NjY4RS0xNywxLjk5MzA0NTcyNTU4MjI1NjhFLTE4LDQuNjUzNzgzMTA4MDUzOTAwNUUtMTcsMS41NzEzOTA2NTU1ODc1NTIyRS0xNywxLjA0MzQ2ODI2NTMyMDkwM0UtMTgsMS4zOTEyOTEwMjA0Mjc4NzA4RS0xOAorMjcsU3VuIDIwIEZlYiAxMSw4LjY4MTc2ODE5Nzg0MTgxN0UtMTksMC4wLDAuMCw3LjkxNjc4MzQxMzI5MTczM0UtMTgsNi4wMjU1NjExNzAxNTc5MTdFLTE1LDkuNzAzOTI1NDk2NzE1ODgxRS0xOCwwLjAsNS4zMjA5MzQ3OTYzMzRFLTE4LDAuMCwxLjk3NjM1ODA1MjQwNzk2MTVFLTE3LDEuNTg0ODU5MTc5Njk2NjUwNEUtMTcsNC44MTQzMzM4ODUwNjYwODFFLTE4LDAuMCwyLjYyMzk5MzY0MjI1MjYxMjVFLTIwLDEuMzcyNjY4MzUxMTUwNjI1NUUtMTcsMC4wLDAuMCwwLjAsMC4wLDEuODcwMTg2MzI0MTQ1MjMxRS0xOCw5Ljc5NjM2ODgyNzY0MjYxOEUtMTksMC4wLDEuNzI2ODYwMDM0NzU5ODY1M0UtMTgsNC43MzAyMzI0NTk2OTExOThFLTE4LDEuODI1NTk2Mzg0MDIzNDA3NkUtMTgsMC4wLDIuMDM4MTE5MDg0ODEzNTM1OEUtMjAsMy42MjY0MDM0NzQ1MjU5MTdFLTE4LDAuMCwwLjAsNS40NDU2ODk0MTE0MDg1MTRFLTIwLDIuMzQwMTI1MTU4NDkzNjMxOEUtMTgsMS43NzUzODI1OTY4OTI2OThFLTE5LDEuMzYzNDYxMTIxMzk3MjIyNEUtMTcsNS4yMzU5MDQ5NTg1NjI5NzFFLTE4LDYuNzE1OTY0MzEwNjQwNzIyRS0xOSwwLjAsMS4wMDc2OTIyOTY5NjU1NTg5RS0xOCwxLjA5ODU4NjM2ODA0ODcyNEUtMTgsNC40MzE5NzYzMDY5NzAzODZFLTE5LDAuMCwwLjAsMS4xNjk2MjAyODU1NzA0NzMyRS0xOCwxLjIxMzk1Nzk2MDg0MjIzMDNFLTE3LDMuNjUxNjcwODM2NjIwNTU5RS0xOCwyLjA2NTI0OTAxNDI5MTM2NzNFLTE4LDAuMCwzLjExNzc3NTAxNDE2NDQ0M0UtMTgsMC4wLDAuMCwwLjAKKzI4LE1vbiAyMSBGZWIgMTEsNS4wMTI0NDg1OTkwNTg1MzZFLTE5LDEuMzkyOTU0ODcwNzY3NjQwMkUtMTksMS4wMTY1MzIyMjM5MzQ2ODM5RS0xOSw0LjUzODY1OTAyNTc0NTIzNTZFLTE4LDQuODUzOTU0NjY4Mzk2MTIzRS0xNSw1LjQ3MDMxODkwMjM0NTc3NkUtMTgsMS44MDE0Nzg1MzUxOTg1MzRFLTE5LDIuOTcxODQ4ODYyNzA1MzM1NUUtMTgsNC41ODU4NTk2NTY4NDgxOThFLTIyLDEuMTUwOTYzNjY5MzE4NjM4NkUtMTcsOC45ODI5ODcyMDk1NjkyMzlFLTE4LDIuNjkwMDIzMzUzNTc2MzE0RS0xOCw4LjM3MzAxNTQyMzQ2MjAwMkUtMjAsMS4xMjUzMTc0NzQ0NDE5MDI0RS0xOSw4LjA3NDAyNTA0OTUwMjk4MkUtMTgsMi41NjA0MzgzMDg0MDY5MTA2RS0xOSwzLjk1NTMwMzk1NDAzMTU3MUUtMjAsMS4yNDI3Njc5NjcwMDU4NjJFLTE5LDIuMzQxMDgxMzU0ODIxMDA1RS0xOSwxLjQzNDk5ODQ2MDU4NjExMjRFLTE4LDkuMDEwODQzMTAxNTA0MjY1RS0xOSw2LjExNDQ3OTU0MjQ2NDI2NEUtMjAsMS42MzQyNzY4MDcwMTA2ODAzRS0xOCwyLjgyMjkwMjk5MDkzMzQwNjJFLTE4LDEuMzU1NTQ2Njk0NjQxMzY4M0UtMTgsNi41NjE2MDA4NTkwMDY5NjNFLTIwLDcuOTUwOTIxOTYwNTg5MDEzRS0yMCwyLjQ2NTEwNjQwMzI4NTM5NjVFLTE4LDMuNDU0NjgwOTQxNDkyMzA5NUUtMjAsMS4yMDE0OTUyMzAwOTQyMjhFLTE5LDEuMjIyNDgwMTc5MTA2NDM0NEUtMTksMS44MzA5NzYyNjE0Njg5N0UtMTgsMi4yOTAwODUxNDQwNjI5NzFFLTE5LDcuNjE4ODU3NzM4ODQ1NzkxRS0xOCw0LjEwODAwODgwNDgxOTAzM0UtMTgsMS4yMDkyODc1MDk1NDI4OThFLTE4LDEuODA1MzAwMDg0OTEyNTc0MUUtMTksNy43MzIzMzU4NzA1NzE3OTJFLTE5LDEuNDk1NjQwNTM5ODQzODQ2N0UtMTgsMy4wNjAyMTI3ODcyNjAxOTM3RS0xOSwxLjY0MDk3MzQ0NzIwODg0NzFFLTE5LDMuMzQwMDM0NDUwMDcxMTA1RS0yMCwxLjAyNzU1MjYxMjY2MDIxNDNFLTE4LDcuODEwMjM5NzcyNDUyNDk4RS0xOCwyLjA4NjUyNzkyNjQ3ODEwMjJFLTE4LDEuNTg5NzI3ODEzNzkxOTUyNEUtMTgsMy41NjkzMjc0MzI5MTM1MTVFLTIwLDIuMDQ0NTk5ODc1MTYxODE2OEUtMTgsMi44MTQxODkyMDk0MTkxNzhFLTE5LDEuODY4NzM3ODEwMTY1NjQwN0UtMjAsMi40OTE2NTA0MTM1NTQxODc2RS0yMAorMjksVHVlIDIyIEZlYiAxMSwzLjEwNzcyOTE1MjI1MTgyMDRFLTE5LDcuMzU2MzU3MzQ1MjI0MTM4RS0yMCw1LjQ3MzQwMTQ3NzI0MTU2RS0yMCwyLjgyMzkyMjc3MzY0NzIzNjdFLTE4LDQuMjMzNzM4NTU2OTI5ODJFLTE1LDMuNDQ1NDg1MTk4ODAyNjQ0M0UtMTgsMS4wMDA4NjA4OTQxNjg5NDAyRS0xOSwxLjkyNTE2MDQ2MzkyMTM1NzVFLTE4LDEuMjM0NzIwODE1NzQ2ODMwOEUtMjIsNy4xMDk3NzIxNjU3NjE0MDFFLTE4LDUuNjMwNDI4MTM4MzY2Mjk2RS0xOCwxLjcyMjM2Njk4OTgwMTg0NjlFLTE4LDQuMzgwOTkzMjQwMTczODg4RS0yMCw2LjQ4MjI0ODEzNjM0ODk1N0UtMjAsNC45Njk0NTAzMTQ0MzM0NDVFLTE4LDEuMzkyMzYwNzU2ODE5NjE4N0UtMTksMS45MjI3MDE1NTY4MTk0ODA1RS0yMCw2LjU1MDgyMzc0MTYyODUyOUUtMjAsMS4yOTk0ODc4MDMwMzkwM0UtMTksOC41MTAxNzUwMTQzMTE3RS0xOSw1LjI5NDI0NzY4MjYxNDE5NkUtMTksMy4zNjYzMzE0OTk4OTYxNDRFLTIwLDkuNTkxNjYxMTkyMzEyNzgzRS0xOSwxLjcyOTc0MjU2OTA1MTQ2OEUtMTgsOC4wNTc4NTkxMzQ0MzY2ODNFLTE5LDMuMzU1ODUwMjA5NjY4NDc3RS0yMCw0LjU4MTY0OTc1NzQ2MzE4NkUtMjAsMS40NzcyMTM0NzIzOTI3NjJFLTE4LDEuOTIyMzAxNjIwODkwMzMzNUUtMjAsNi44NDU5Mzk1MDA1NzQ1MjZFLTIwLDcuMDY2Njg1MTE4OTg0NjMxRS0yMCwxLjA4NDQ3MDc3MTE4NjE4ODhFLTE4LDEuMzMzMDQ2MzM2Njk4NjU4NkUtMTksNC45Mjk0MTI1Njk0NjczODZFLTE4LDIuNDMyNzE2NjIyNzE2OTg0RS0xOCw3LjAwNDk4MjQzMDAzMDQzN0UtMTksMS4wMDE5NjcyNTYwNzg5MTc1RS0xOSw0LjU4NTYwNTM1MDA1ODYzNUUtMTksOC42OTc0NjY1MTIyNjU4NzhFLTE5LDEuODMwNzc2NzE1MzMzMDU2RS0xOSw4Ljg5ODU5MjA2Nzc5MDgyRS0yMCwxLjgyNDkyODk3NDczMzExNTdFLTIwLDYuMDQ4OTIzMzQ1OTcxMjZFLTE5LDQuNzEzNTE1MzU2ODExMTIyRS0xOCwxLjMwMDY3ODg5OTMzMDU3NzNFLTE4LDkuNDI1Nzc3Nzk3NTY3MjI3RS0xOSwyLjAwMTY1MTMzMzU0NzI3MTZFLTIwLDEuMjMwNTg2MTYyNjQyMzcyN0UtMTgsMS41NjIzMjYzNzU2MjI4Mzc1RS0xOSw4LjY5OTA5NzAyMzcyNTE4NUUtMjEsMS4zNzgyOTI3MTk3NzQxMTlFLTIwCiszMCxXZWQgMjMgRmViIDExLDIuOTUyNjg3MjA3ODM2Njg3N0UtMTksMS4xMjY3NzM2NTU5ODY2Njg1RS0xOSw4LjMzMjMxMDI5ODczODIxM0UtMjAsMi42NjE5NjU0MDIyNTQ5NjI0RS0xOCwzLjg4MTEzMDMxMTI0NjEzNkUtMTUsMy4xNzA2MzA2MzI4MzI1MDRFLTE4LDEuNTA5MzUwMDg5MTc4OTMzRS0xOSwxLjY3OTQwMDMzOTI0ODEwOEUtMTgsMi42NzY1NzMzODkxMjE5NTA1RS0yMiw2LjgxNDU0MTIzNDg5OTc2RS0xOCw1LjIyODM1MjM2NzQ0MTMzOUUtMTgsMS41NDI5OTE3MTUxNTYxNDI4RS0xOCw2LjczMDczNzIzMzcxMDcxN0UtMjAsOS4yNzQwMTY0Mjg5ODM4NTdFLTIwLDQuODA3MjIxNTcyNDIzODE4RS0xOCwyLjExMzE4Mjc5ODI3ODEzNjhFLTE5LDMuMDMxNjIwNzc3MDA0NzQxRS0yMCwxLjAwNDAwMzU5NzU2MjYyNzVFLTE5LDEuOTYwMjA1NjcwMjg0OTc5MkUtMTksOS41MTIxNTAxMTU3MjkyOThFLTE5LDYuMjc4MjAzNTEzMTI5MDQ1RS0xOSw1LjA5MDE2NjM2MjkzNjQ2RS0yMCwxLjE0NjM1MjgyNzMzNzM2OEUtMTgsMS42OTM3ODU3NTk2MDMwOTE1RS0xOCw4Ljg5MTA1NzQyMDMxODg0NEUtMTksNS4xOTU0NTE5MDgxODY0MDdFLTIwLDYuNTI1NzI3ODAyNzI1ODM5RS0yMCwxLjU2NjgxNTI3MTUwMzcyNTFFLTE4LDIuODk3NjM0ODcwMTE4OTU5RS0yMCwxLjAyNTA1Nzg1MDQ0Nzk2MzdFLTE5LDkuNjk1MTk2MTEyODkzNDQxRS0yMCwxLjIyMTAzNTYxODg2NTM1NzNFLTE4LDEuNzA0MTYyNzg4OTc0Njk3NkUtMTksNC4zMzYyMzgyMTM0MjIwNDU0RS0xOCwyLjc0MTgyNzM0MDE2Nzc2MjZFLTE4LDkuMzk0NjY3NTA2MjA3NDQ1RS0xOSwxLjUxMTQ2NDYyMjU0MjAzMzZFLTE5LDUuMTI1NTgwNDQ5MzE1MjQ4RS0xOSwxLjEyMjA5NzQ2ODI4OTk5NzhFLTE4LDEuOTU2NjMwOTA5MjU5NjQxNUUtMTksMS4zNTE2OTM3NzY5NzU1ODA3RS0xOSwyLjc2NTcxOTUxNTA3NjUzODZFLTIwLDcuMDc4MDUyOTE5MDA3MjZFLTE5LDQuODU0NjA2NjI0MDA5OTQ5RS0xOCwxLjIyMTE0NjkzMjU1MTM5MzZFLTE4LDEuMDU0ODMwOTc3NzYyNzZFLTE4LDMuMDEwNDkwMDQ1Nzg0Mzg3M0UtMjAsMS4yODExMDg0NjY2NDcyMzk4RS0xOCwyLjM1NjU4Mzk2NzIyNDE1NTJFLTE5LDEuMzk0OTY5MDQ0MjQwNzk4RS0yMCwyLjA4MTE4MDg4NDkyNjEzNUUtMjAKKzMxLFRodSAyNCBGZWIgMTEsMi44NjQ0Mjg4NTA0NjExMjEzRS0xOSwxLjI5MzA4ODIxNTAzNjc1MDhFLTE5LDkuNTYwMTc0MTk5MzQ3MDhFLTIwLDIuNTcxNDQ1MTk2ODQ5NTk3NEUtMTgsMy42Njg2Nzc5NTMyODM4MTI1RS0xNSwzLjAyMTUwMTMxMTM4Mzc5MkUtMTgsMS43MzEyOTE4MjU1NDcyMjUzRS0xOSwxLjU0Mjc2NjMyOTI3ODAxOTVFLTE4LDMuMTMzMTYyMjMyMTI4ODkxRS0yMiw2LjY0MTUwNDU0NjI4MTU5MUUtMTgsNS4wMDg1MjMxMDMzMjM5OTU2RS0xOCwxLjQ0NjA5NjQwNzQ4Nzc3MTFFLTE4LDcuNzI1MDc3NTIzOTU5NTkxRS0yMCwxLjA1MTE2NjY1MDk4MTg1NzZFLTE5LDQuNzA3NTM0NjY2NzAyNzU3RS0xOCwyLjQyNDM1NDIwODk0Nzg2NzZFLTE5LDMuNDgzNTM0MDc3ODI3NDExN0UtMjAsMS4xNTIyMjI1NTYwMTk2MDA4RS0xOSwyLjI0ODQ1ODkzMDM1Nzc1MUUtMTksOS45MzY1ODA5MDUzMzEzMjNFLTE5LDYuNzA2MjE3MzQ3MTEyMDYxRS0xOSw1LjgzOTA3Mzk5NjM4MDI1NUUtMjAsMS4yMjc5MzcxNzcwNTg4NzY1RS0xOCwxLjY2ODg5MDk1NDYzOTExODhFLTE4LDkuMjQwMTI0MTk0MjU4MDRFLTE5LDUuOTY0ODIwMzkwMTU0MzE3RS0yMCw3LjM4NzQ2MDk0NzI4NTg5NEUtMjAsMS42MDE3OTk0OTQzNDQzOTQ3RS0xOCwzLjMyMzY3NjkwMjkwMTc0OUUtMjAsMS4xNzU1NzUwODM2NTQ0NDI1RS0xOSwxLjA4NTg2Mzg0NTEzOTgwMThFLTE5LDEuMjc5MTc0NTg0MzczNzQ0MkUtMTgsMS44Njc2MjQ3ODAxNTMyMjdFLTE5LDQuMDExMTUwMDI1MzIzNzUyRS0xOCwyLjg3MzUwNzExMjU0ODI2RS0xOCwxLjA0NTExNDI5MDYxNzE0OUUtMTgsMS43MzM3MzA5NzA1MjA5NTQ1RS0xOSw1LjM1NDMxMzE0NzkyNDA0MUUtMTksMS4yMzMzNDQ3MDU0MTAwNDM2RS0xOCwyLjAwNjgxNDMwMTQ5MDQzODZFLTE5LDEuNTUwNzc0NjMyODE2MjgyMUUtMTksMy4xNzI4NDI1NzI3Mjk0NzY2RS0yMCw3LjUyMzk2NzcyNDE0MDk1OEUtMTksNC44OTkxNDg0NDMxMzI4NzNFLTE4LDEuMTc3MDE5NTAyODI5NjU1M0UtMTgsMS4xMDI0MjI4MzU5MjkxNTExRS0xOCwzLjQ1MjkyNDY0NDAxNTA0OUUtMjAsMS4yOTkwOTUwOTUzOTE3MjI3RS0xOCwyLjcwMzEyMjYyMzMwMjc3MUUtMTksMS42MDQzNTc5OTkyNDAyNjU3RS0yMCwyLjM4NzI4OTEzMzEzNDk0ODJFLTIwCiszMixGcmkgMjUgRmViIDExLDIuOTkyMTc1Mjc1MzgxMzg4M0UtMTksMS41NTk1Mjk2ODYzMTAwMjE1RS0xOSwxLjE1MTQ4MzQ1OTc4NDkzNjRFLTE5LDIuNjc0Mzg4NjgzMDI2NTc3M0UtMTgsMy41MzYyMDg3MDE1ODA4ODlFLTE1LDMuMDk3NDE5OTUwNDUwMDIyM0UtMTgsMi4wODA3NTc3ODk0OTAwMTk3RS0xOSwxLjUxODI3OTAzMTYwMjk4OTRFLTE4LDMuOTMwMjU5NDMzMjU2ODc3RS0yMiw2Ljk3MDM1MDcyNjczMDI4N0UtMTgsNS4xNjMzNzIxNTA1MTAyNzFFLTE4LDEuNDU1MDU4NjQwMTc3MDk2NkUtMTgsOS4zMjI3MDY4NjMxNjUzNzNFLTIwLDEuMjUwMjkwMjg4NTQ3MDU4RS0xOSw0Ljk2NDIwMjYzNTU4NDEzMkUtMTgsMi45MTgwNDkyODI5NDY5MTU0RS0xOSw0LjIyNDc1OTc4MTI1MzMzNzZFLTIwLDEuMzg5ODE2Nzc0MTM2NTYyNEUtMTksMi43MDI0ODU1NTU5OTU3ODM4RS0xOSwxLjExMDg3NzYyMDk2MDc4NzVFLTE4LDcuNjMzNzg1MTQ3MDM4NjI2RS0xOSw3LjAyMjE0OTg4OTE3MDQyOEUtMjAsMS40MDA4NTczMjg4ODEyMTU3RS0xOCwxLjc3MDUzODA3MTM3OTgzOTNFLTE4LDEuMDI4NTg3MzEyMTQ3MjE2NkUtMTgsNy4yMDk0OTA0MDE2NjEzNTFFLTIwLDguNzc5Mjk2NTY5NzkzNjgyRS0yMCwxLjc1ODEzMjcxNzc3ODkzNTJFLTE4LDMuOTk0MTM5ODM4NzIwOTcyRS0yMCwxLjQxMDM0NDkyNDk1NTYxNDRFLTE5LDEuMjgwNzM4ODkyNjMzMjE5NEUtMTksMS40MzM0NjY1NDk5NDgyODU2RS0xOCwyLjE2ODE1NTE3MDc0MjQ2MjNFLTE5LDMuOTc2NjU1OTY2NTAxNDdFLTE4LDMuMjIxMTQ3OTkyNDkzNzIxNEUtMTgsMS4yMjY3MDU3MTAxNzQ4ODY5RS0xOCwyLjA4MzgzNjkzMzI5NjQ4MDVFLTE5LDUuOTg1OTc2ODYzMjMxMDUxRS0xOSwxLjQzNDkzOTA3NDkyMjEyODZFLTE4LDIuMjA4OTEzMTExODc5MTc4RS0xOSwxLjg2NjkzNDE5NTU0MTM2NDVFLTE5LDMuODE3NzEyNDU4OTE5NjkzNUUtMjAsOC41MzE3MzIwNjk1MTEyNTVFLTE5LDUuMzE1NjE1NjkyNjU5NzczRS0xOCwxLjIyMTMyNTg4MjY2ODU3MDNFLTE4LDEuMjMyOTYwNjYzNjc4Njk5NkUtMTgsNC4xNDcxODY2NTU1NDA3MTg2RS0yMCwxLjQxNTY0Njc5NDk0NTAxMTRFLTE4LDMuMjQ4OTI1NzQ1MjExMzM2RS0xOSwxLjk1MTMwNzAyMzM4NDA0MzdFLTIwLDIuODcwMDQxMjg2MDcwNjA1N0UtMjAKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0VJUlN0YXRlc09ubHlfRkRfUmVmZXJlbmNlL1Rlc3RTRUlSL3J1bnBhcmFtZXRlcnMuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTRUlSU3RhdGVzT25seV9GRF9SZWZlcmVuY2UvVGVzdFNFSVIvcnVucGFyYW1ldGVycy5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTgxMzIxMgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0VJUlN0YXRlc09ubHlfRkRfUmVmZXJlbmNlL1Rlc3RTRUlSL3J1bnBhcmFtZXRlcnMuY3N2CkBAIC0wLDAgKzEsMiBAQAorZGlzZWFzZU5hbWUscG9wdWxhdGlvbklkZW50aWZpZXIsdGltZVBlcmlvZCxmcmVxdWVuY3lEZXBlbmRlbnQscmVmZXJlbmNlUG9wdWxhdGlvbkRlbnNpdHkscm9hZE5ldHdvcmtJbmZlY3Rpb3VzUHJvcG9ydGlvbixjaGFyYWN0ZXJpc3RpY01peGluZ0Rpc3RhbmNlLHRyYW5zbWlzc2lvblJhdGUsbm9uTGluZWFyaXR5Q29lZmZpY2llbnQscmVjb3ZlcnlSYXRlLGluZmVjdGlvdXNNb3J0YWxpdHlSYXRlLGltbXVuaXR5TG9zc1JhdGUsaW5jdWJhdGlvblJhdGUKK1Rlc3RTRUlSLGh1bWFuLDg2NDAwMDAwLHRydWUsMTAwLjAsMC4wMSwyLjI1LDQ1LjAsMS4wLDAuNCwwLjAsMC4wLDAuNApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0VJUlN0YXRlc09ubHlfRkRfUmVmZXJlbmNlL2F1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwvaHVtYW4vQmlydGhzXzAuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTRUlSU3RhdGVzT25seV9GRF9SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9odW1hbi9CaXJ0aHNfMC5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTEyZThiOAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0VJUlN0YXRlc09ubHlfRkRfUmVmZXJlbmNlL2F1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwvaHVtYW4vQmlydGhzXzAuY3N2CkBAIC0wLDAgKzEsMzMgQEAKK2l0ZXJhdGlvbix0aW1lLHN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL25vZGUvdHJhbnNwb3J0L3BpcGUvVVNBCisxLFR1ZSAyNSBKYW4gMTEsMC4wCisyLFdlZCAyNiBKYW4gMTEsMC4wCiszLFRodSAyNyBKYW4gMTEsMC4wCis0LEZyaSAyOCBKYW4gMTEsMC4wCis1LFNhdCAyOSBKYW4gMTEsMC4wCis2LFN1biAzMCBKYW4gMTEsMC4wCis3LE1vbiAzMSBKYW4gMTEsMC4wCis4LFR1ZSAxIEZlYiAxMSwwLjAKKzksV2VkIDIgRmViIDExLDAuMAorMTAsVGh1IDMgRmViIDExLDAuMAorMTEsRnJpIDQgRmViIDExLDAuMAorMTIsU2F0IDUgRmViIDExLDAuMAorMTMsU3VuIDYgRmViIDExLDAuMAorMTQsTW9uIDcgRmViIDExLDAuMAorMTUsVHVlIDggRmViIDExLDAuMAorMTYsV2VkIDkgRmViIDExLDAuMAorMTcsVGh1IDEwIEZlYiAxMSwwLjAKKzE4LEZyaSAxMSBGZWIgMTEsMC4wCisxOSxTYXQgMTIgRmViIDExLDAuMAorMjAsU3VuIDEzIEZlYiAxMSwwLjAKKzIxLE1vbiAxNCBGZWIgMTEsMC4wCisyMixUdWUgMTUgRmViIDExLDAuMAorMjMsV2VkIDE2IEZlYiAxMSwwLjAKKzI0LFRodSAxNyBGZWIgMTEsMC4wCisyNSxGcmkgMTggRmViIDExLDAuMAorMjYsU2F0IDE5IEZlYiAxMSwwLjAKKzI3LFN1biAyMCBGZWIgMTEsMC4wCisyOCxNb24gMjEgRmViIDExLDAuMAorMjksVHVlIDIyIEZlYiAxMSwwLjAKKzMwLFdlZCAyMyBGZWIgMTEsMC4wCiszMSxUaHUgMjQgRmViIDExLDAuMAorMzIsRnJpIDI1IEZlYiAxMSwwLjAKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0VJUlN0YXRlc09ubHlfRkRfUmVmZXJlbmNlL2F1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwvaHVtYW4vQmlydGhzXzEuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTRUlSU3RhdGVzT25seV9GRF9SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9odW1hbi9CaXJ0aHNfMS5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDdhODQzZgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0VJUlN0YXRlc09ubHlfRkRfUmVmZXJlbmNlL2F1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwvaHVtYW4vQmlydGhzXzEuY3N2CkBAIC0wLDAgKzEsMzMgQEAKK2l0ZXJhdGlvbix0aW1lLFVTLUFLLFVTLUFMLFVTLUFSLFVTLUFaLFVTLUNBLFVTLUNPLFVTLUNULFVTLURDLFVTLURFLFVTLUZMLFVTLUdBLFVTLUhJLFVTLUlBLFVTLUlELFVTLUlMLFVTLUlOLFVTLUtTLFVTLUtZLFVTLUxBLFVTLU1BLFVTLU1ELFVTLU1FLFVTLU1JLFVTLU1OLFVTLU1PLFVTLU1TLFVTLU1ULFVTLU5DLFVTLU5ELFVTLU5FLFVTLU5ILFVTLU5KLFVTLU5NLFVTLU5WLFVTLU5ZLFVTLU9ILFVTLU9LLFVTLU9SLFVTLVBBLFVTLVJJLFVTLVNDLFVTLVNELFVTLVROLFVTLVRYLFVTLVVULFVTLVZBLFVTLVZULFVTLVdBLFVTLVdJLFVTLVdWLFVTLVdZCisxLFR1ZSAyNSBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzIsV2VkIDI2IEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMyxUaHUgMjcgSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCis0LEZyaSAyOCBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzUsU2F0IDI5IEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorNixTdW4gMzAgSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCis3LE1vbiAzMSBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzgsVHVlIDEgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCis5LFdlZCAyIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTAsVGh1IDMgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxMSxGcmkgNCBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzEyLFNhdCA1IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTMsU3VuIDYgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxNCxNb24gNyBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzE1LFR1ZSA4IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTYsV2VkIDkgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxNyxUaHUgMTAgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxOCxGcmkgMTEgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxOSxTYXQgMTIgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyMCxTdW4gMTMgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyMSxNb24gMTQgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyMixUdWUgMTUgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyMyxXZWQgMTYgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyNCxUaHUgMTcgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyNSxGcmkgMTggRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyNixTYXQgMTkgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyNyxTdW4gMjAgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyOCxNb24gMjEgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyOSxUdWUgMjIgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCiszMCxXZWQgMjMgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCiszMSxUaHUgMjQgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCiszMixGcmkgMjUgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNFSVJTdGF0ZXNPbmx5X0ZEX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL2h1bWFuL0NvdW50XzAuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTRUlSU3RhdGVzT25seV9GRF9SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9odW1hbi9Db3VudF8wLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMjUwMDJiCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTRUlSU3RhdGVzT25seV9GRF9SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9odW1hbi9Db3VudF8wLmNzdgpAQCAtMCwwICsxLDMzIEBACitpdGVyYXRpb24sdGltZSxzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9ub2RlL3RyYW5zcG9ydC9waXBlL1VTQQorMSxUdWUgMjUgSmFuIDExLDk0MzIxMS4wCisyLFdlZCAyNiBKYW4gMTEsOTQzMjExLjAKKzMsVGh1IDI3IEphbiAxMSw5NDMyMTEuMAorNCxGcmkgMjggSmFuIDExLDk0MzIxMS4wCis1LFNhdCAyOSBKYW4gMTEsOTQzMjExLjAKKzYsU3VuIDMwIEphbiAxMSw5NDMyMTEuMAorNyxNb24gMzEgSmFuIDExLDk0MzIxMS4wCis4LFR1ZSAxIEZlYiAxMSw5NDMyMTEuMAorOSxXZWQgMiBGZWIgMTEsOTQzMjExLjAKKzEwLFRodSAzIEZlYiAxMSw5NDMyMTEuMAorMTEsRnJpIDQgRmViIDExLDk0MzIxMS4wCisxMixTYXQgNSBGZWIgMTEsOTQzMjExLjAKKzEzLFN1biA2IEZlYiAxMSw5NDMyMTEuMAorMTQsTW9uIDcgRmViIDExLDk0MzIxMS4wCisxNSxUdWUgOCBGZWIgMTEsOTQzMjExLjAKKzE2LFdlZCA5IEZlYiAxMSw5NDMyMTEuMAorMTcsVGh1IDEwIEZlYiAxMSw5NDMyMTEuMAorMTgsRnJpIDExIEZlYiAxMSw5NDMyMTEuMAorMTksU2F0IDEyIEZlYiAxMSw5NDMyMTEuMAorMjAsU3VuIDEzIEZlYiAxMSw5NDMyMTEuMAorMjEsTW9uIDE0IEZlYiAxMSw5NDMyMTEuMAorMjIsVHVlIDE1IEZlYiAxMSw5NDMyMTEuMAorMjMsV2VkIDE2IEZlYiAxMSw5NDMyMTEuMAorMjQsVGh1IDE3IEZlYiAxMSw5NDMyMTEuMAorMjUsRnJpIDE4IEZlYiAxMSw5NDMyMTEuMAorMjYsU2F0IDE5IEZlYiAxMSw5NDMyMTEuMAorMjcsU3VuIDIwIEZlYiAxMSw5NDMyMTEuMAorMjgsTW9uIDIxIEZlYiAxMSw5NDMyMTEuMAorMjksVHVlIDIyIEZlYiAxMSw5NDMyMTEuMAorMzAsV2VkIDIzIEZlYiAxMSw5NDMyMTEuMAorMzEsVGh1IDI0IEZlYiAxMSw5NDMyMTEuMAorMzIsRnJpIDI1IEZlYiAxMSw5NDMyMTEuMApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTRUlSU3RhdGVzT25seV9GRF9SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9odW1hbi9Db3VudF8xLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0VJUlN0YXRlc09ubHlfRkRfUmVmZXJlbmNlL2F1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwvaHVtYW4vQ291bnRfMS5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDU5MGU2YQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0VJUlN0YXRlc09ubHlfRkRfUmVmZXJlbmNlL2F1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwvaHVtYW4vQ291bnRfMS5jc3YKQEAgLTAsMCArMSwzMyBAQAoraXRlcmF0aW9uLHRpbWUsVVMtQUssVVMtQUwsVVMtQVIsVVMtQVosVVMtQ0EsVVMtQ08sVVMtQ1QsVVMtREMsVVMtREUsVVMtRkwsVVMtR0EsVVMtSEksVVMtSUEsVVMtSUQsVVMtSUwsVVMtSU4sVVMtS1MsVVMtS1ksVVMtTEEsVVMtTUEsVVMtTUQsVVMtTUUsVVMtTUksVVMtTU4sVVMtTU8sVVMtTVMsVVMtTVQsVVMtTkMsVVMtTkQsVVMtTkUsVVMtTkgsVVMtTkosVVMtTk0sVVMtTlYsVVMtTlksVVMtT0gsVVMtT0ssVVMtT1IsVVMtUEEsVVMtUkksVVMtU0MsVVMtU0QsVVMtVE4sVVMtVFgsVVMtVVQsVVMtVkEsVVMtVlQsVVMtV0EsVVMtV0ksVVMtV1YsVVMtV1kKKzEsVHVlIDI1IEphbiAxMSw2MjY5MzIuMCw0NDQ3MTAwLjAsMjY3MzQwMC4wLDUxMzA2MzIuMCwzLjM4NzE2NDhFNyw0MzAxMjYxLjAsMzQwNTU2NS4wLDU3MjA1OS4wLDc4MzYwMC4wLDEuNTk4MjM3OEU3LDgxODY0NTMuMCwxMjExNTM3LjAsMjkyNjMyNC4wLDEyOTM5NTMuMCwxLjI0MTkyOTNFNyw2MDgwNDg1LjAsMjY4ODQxOC4wLDQwNDE3NjkuMCw0NDY4OTc2LjAsNjM0OTA5Ny4wLDUyOTY0ODYuMCwxMjc0OTIzLjAsOTkzODQ0NC4wLDQ5MTk0NzkuMCw1NTk1MjExLjAsMjg0NDY1OC4wLDkwMjE5NS4wLDgwNDkzMTMuMCw2NDIyMDAuMCwxNzExMjYzLjAsMTIzNTc4Ni4wLDg0MTQzNTAuMCwxODE5MDQ2LjAsMTk5ODI1Ny4wLDEuODk3NjQ1N0U3LDEuMTM1MzE0RTcsMzQ1MDY1NC4wLDM0MjEzOTkuMCwxLjIyODEwNTRFNywxMDQ4MzE5LjAsNDAxMjAxMi4wLDc1NDg0NC4wLDU2ODkyODMuMCwyLjA4NTE4MkU3LDIyMzMxNjkuMCw3MDc4NTE2LjAsNjA4ODI3LjAsNTg5NDEyMS4wLDUzNjM2NzUuMCwxODA4MzQ0LjAsNDkzNzgyLjAKKzIsV2VkIDI2IEphbiAxMSw2MjY5MzIuMCw0NDQ3MTAwLjAsMjY3MzQwMC4wLDUxMzA2MzIuMCwzLjM4NzE2NDhFNyw0MzAxMjYxLjAsMzQwNTU2NS4wLDU3MjA1OS4wLDc4MzYwMC4wLDEuNTk4MjM3OEU3LDgxODY0NTMuMCwxMjExNTM3LjAsMjkyNjMyNC4wLDEyOTM5NTMuMCwxLjI0MTkyOTNFNyw2MDgwNDg1LjAsMjY4ODQxOC4wLDQwNDE3NjkuMCw0NDY4OTc2LjAsNjM0OTA5Ny4wLDUyOTY0ODYuMCwxMjc0OTIzLjAsOTkzODQ0NC4wLDQ5MTk0NzkuMCw1NTk1MjExLjAsMjg0NDY1OC4wLDkwMjE5NS4wLDgwNDkzMTMuMCw2NDIyMDAuMCwxNzExMjYzLjAsMTIzNTc4Ni4wLDg0MTQzNTAuMCwxODE5MDQ2LjAsMTk5ODI1Ny4wLDEuODk3NjQ1N0U3LDEuMTM1MzE0RTcsMzQ1MDY1NC4wLDM0MjEzOTkuMCwxLjIyODEwNTRFNywxMDQ4MzE5LjAsNDAxMjAxMi4wLDc1NDg0NC4wLDU2ODkyODMuMCwyLjA4NTE4MkU3LDIyMzMxNjkuMCw3MDc4NTE2LjAsNjA4ODI3LjAsNTg5NDEyMS4wLDUzNjM2NzUuMCwxODA4MzQ0LjAsNDkzNzgyLjAKKzMsVGh1IDI3IEphbiAxMSw2MjY5MzIuMCw0NDQ3MTAwLjAsMjY3MzQwMC4wLDUxMzA2MzIuMCwzLjM4NzE2NDhFNyw0MzAxMjYxLjAsMzQwNTU2NS4wLDU3MjA1OS4wLDc4MzYwMC4wLDEuNTk4MjM3OEU3LDgxODY0NTMuMCwxMjExNTM3LjAsMjkyNjMyNC4wLDEyOTM5NTMuMCwxLjI0MTkyOTNFNyw2MDgwNDg1LjAsMjY4ODQxOC4wLDQwNDE3NjkuMCw0NDY4OTc2LjAsNjM0OTA5Ny4wLDUyOTY0ODYuMCwxMjc0OTIzLjAsOTkzODQ0NC4wLDQ5MTk0NzkuMCw1NTk1MjExLjAsMjg0NDY1OC4wLDkwMjE5NS4wLDgwNDkzMTMuMCw2NDIyMDAuMCwxNzExMjYzLjAsMTIzNTc4Ni4wLDg0MTQzNTAuMCwxODE5MDQ2LjAsMTk5ODI1Ny4wLDEuODk3NjQ1N0U3LDEuMTM1MzE0RTcsMzQ1MDY1NC4wLDM0MjEzOTkuMCwxLjIyODEwNTRFNywxMDQ4MzE5LjAsNDAxMjAxMi4wLDc1NDg0NC4wLDU2ODkyODMuMCwyLjA4NTE4MkU3LDIyMzMxNjkuMCw3MDc4NTE2LjAsNjA4ODI3LjAsNTg5NDEyMS4wLDUzNjM2NzUuMCwxODA4MzQ0LjAsNDkzNzgyLjAKKzQsRnJpIDI4IEphbiAxMSw2MjY5MzIuMCw0NDQ3MTAwLjAsMjY3MzQwMC4wLDUxMzA2MzIuMCwzLjM4NzE2NDhFNyw0MzAxMjYxLjAsMzQwNTU2NS4wLDU3MjA1OS4wLDc4MzYwMC4wLDEuNTk4MjM3OEU3LDgxODY0NTMuMCwxMjExNTM3LjAsMjkyNjMyNC4wLDEyOTM5NTMuMCwxLjI0MTkyOTNFNyw2MDgwNDg1LjAsMjY4ODQxOC4wLDQwNDE3NjkuMCw0NDY4OTc2LjAsNjM0OTA5Ny4wLDUyOTY0ODYuMCwxMjc0OTIzLjAsOTkzODQ0NC4wLDQ5MTk0NzkuMCw1NTk1MjExLjAsMjg0NDY1OC4wLDkwMjE5NS4wLDgwNDkzMTMuMCw2NDIyMDAuMCwxNzExMjYzLjAsMTIzNTc4Ni4wLDg0MTQzNTAuMCwxODE5MDQ2LjAsMTk5ODI1Ny4wLDEuODk3NjQ1N0U3LDEuMTM1MzE0RTcsMzQ1MDY1NC4wLDM0MjEzOTkuMCwxLjIyODEwNTRFNywxMDQ4MzE5LjAsNDAxMjAxMi4wLDc1NDg0NC4wLDU2ODkyODMuMCwyLjA4NTE4MkU3LDIyMzMxNjkuMCw3MDc4NTE2LjAsNjA4ODI3LjAsNTg5NDEyMS4wLDUzNjM2NzUuMCwxODA4MzQ0LjAsNDkzNzgyLjAKKzUsU2F0IDI5IEphbiAxMSw2MjY5MzIuMCw0NDQ3MTAwLjAsMjY3MzQwMC4wLDUxMzA2MzIuMCwzLjM4NzE2NDhFNyw0MzAxMjYxLjAsMzQwNTU2NS4wLDU3MjA1OS4wLDc4MzYwMC4wLDEuNTk4MjM3OEU3LDgxODY0NTMuMCwxMjExNTM3LjAsMjkyNjMyNC4wLDEyOTM5NTMuMCwxLjI0MTkyOTNFNyw2MDgwNDg1LjAsMjY4ODQxOC4wLDQwNDE3NjkuMCw0NDY4OTc2LjAsNjM0OTA5Ny4wLDUyOTY0ODYuMCwxMjc0OTIzLjAsOTkzODQ0NC4wLDQ5MTk0NzkuMCw1NTk1MjExLjAsMjg0NDY1OC4wLDkwMjE5NS4wLDgwNDkzMTMuMCw2NDIyMDAuMCwxNzExMjYzLjAsMTIzNTc4Ni4wLDg0MTQzNTAuMCwxODE5MDQ2LjAsMTk5ODI1Ny4wLDEuODk3NjQ1N0U3LDEuMTM1MzE0RTcsMzQ1MDY1NC4wLDM0MjEzOTkuMCwxLjIyODEwNTRFNywxMDQ4MzE5LjAsNDAxMjAxMi4wLDc1NDg0NC4wLDU2ODkyODMuMCwyLjA4NTE4MkU3LDIyMzMxNjkuMCw3MDc4NTE2LjAsNjA4ODI3LjAsNTg5NDEyMS4wLDUzNjM2NzUuMCwxODA4MzQ0LjAsNDkzNzgyLjAKKzYsU3VuIDMwIEphbiAxMSw2MjY5MzIuMCw0NDQ3MTAwLjAsMjY3MzQwMC4wLDUxMzA2MzIuMCwzLjM4NzE2NDhFNyw0MzAxMjYxLjAsMzQwNTU2NS4wLDU3MjA1OS4wLDc4MzYwMC4wLDEuNTk4MjM3OEU3LDgxODY0NTMuMCwxMjExNTM3LjAsMjkyNjMyNC4wLDEyOTM5NTMuMCwxLjI0MTkyOTNFNyw2MDgwNDg1LjAsMjY4ODQxOC4wLDQwNDE3NjkuMCw0NDY4OTc2LjAsNjM0OTA5Ny4wLDUyOTY0ODYuMCwxMjc0OTIzLjAsOTkzODQ0NC4wLDQ5MTk0NzkuMCw1NTk1MjExLjAsMjg0NDY1OC4wLDkwMjE5NS4wLDgwNDkzMTMuMCw2NDIyMDAuMCwxNzExMjYzLjAsMTIzNTc4Ni4wLDg0MTQzNTAuMCwxODE5MDQ2LjAsMTk5ODI1Ny4wLDEuODk3NjQ1N0U3LDEuMTM1MzE0RTcsMzQ1MDY1NC4wLDM0MjEzOTkuMCwxLjIyODEwNTRFNywxMDQ4MzE5LjAsNDAxMjAxMi4wLDc1NDg0NC4wLDU2ODkyODMuMCwyLjA4NTE4MkU3LDIyMzMxNjkuMCw3MDc4NTE2LjAsNjA4ODI3LjAsNTg5NDEyMS4wLDUzNjM2NzUuMCwxODA4MzQ0LjAsNDkzNzgyLjAKKzcsTW9uIDMxIEphbiAxMSw2MjY5MzIuMCw0NDQ3MTAwLjAsMjY3MzQwMC4wLDUxMzA2MzIuMCwzLjM4NzE2NDhFNyw0MzAxMjYxLjAsMzQwNTU2NS4wLDU3MjA1OS4wLDc4MzYwMC4wLDEuNTk4MjM3OEU3LDgxODY0NTMuMCwxMjExNTM3LjAsMjkyNjMyNC4wLDEyOTM5NTMuMCwxLjI0MTkyOTNFNyw2MDgwNDg1LjAsMjY4ODQxOC4wLDQwNDE3NjkuMCw0NDY4OTc2LjAsNjM0OTA5Ny4wLDUyOTY0ODYuMCwxMjc0OTIzLjAsOTkzODQ0NC4wLDQ5MTk0NzkuMCw1NTk1MjExLjAsMjg0NDY1OC4wLDkwMjE5NS4wLDgwNDkzMTMuMCw2NDIyMDAuMCwxNzExMjYzLjAsMTIzNTc4Ni4wLDg0MTQzNTAuMCwxODE5MDQ2LjAsMTk5ODI1Ny4wLDEuODk3NjQ1N0U3LDEuMTM1MzE0RTcsMzQ1MDY1NC4wLDM0MjEzOTkuMCwxLjIyODEwNTRFNywxMDQ4MzE5LjAsNDAxMjAxMi4wLDc1NDg0NC4wLDU2ODkyODMuMCwyLjA4NTE4MkU3LDIyMzMxNjkuMCw3MDc4NTE2LjAsNjA4ODI3LjAsNTg5NDEyMS4wLDUzNjM2NzUuMCwxODA4MzQ0LjAsNDkzNzgyLjAKKzgsVHVlIDEgRmViIDExLDYyNjkzMi4wLDQ0NDcxMDAuMCwyNjczNDAwLjAsNTEzMDYzMi4wLDMuMzg3MTY0OEU3LDQzMDEyNjEuMCwzNDA1NTY1LjAsNTcyMDU5LjAsNzgzNjAwLjAsMS41OTgyMzc4RTcsODE4NjQ1My4wLDEyMTE1MzcuMCwyOTI2MzI0LjAsMTI5Mzk1My4wLDEuMjQxOTI5M0U3LDYwODA0ODUuMCwyNjg4NDE4LjAsNDA0MTc2OS4wLDQ0Njg5NzYuMCw2MzQ5MDk3LjAsNTI5NjQ4Ni4wLDEyNzQ5MjMuMCw5OTM4NDQ0LjAsNDkxOTQ3OS4wLDU1OTUyMTEuMCwyODQ0NjU4LjAsOTAyMTk1LjAsODA0OTMxMy4wLDY0MjIwMC4wLDE3MTEyNjMuMCwxMjM1Nzg2LjAsODQxNDM1MC4wLDE4MTkwNDYuMCwxOTk4MjU3LjAsMS44OTc2NDU3RTcsMS4xMzUzMTRFNywzNDUwNjU0LjAsMzQyMTM5OS4wLDEuMjI4MTA1NEU3LDEwNDgzMTkuMCw0MDEyMDEyLjAsNzU0ODQ0LjAsNTY4OTI4My4wLDIuMDg1MTgyRTcsMjIzMzE2OS4wLDcwNzg1MTYuMCw2MDg4MjcuMCw1ODk0MTIxLjAsNTM2MzY3NS4wLDE4MDgzNDQuMCw0OTM3ODIuMAorOSxXZWQgMiBGZWIgMTEsNjI2OTMyLjAsNDQ0NzEwMC4wLDI2NzM0MDAuMCw1MTMwNjMyLjAsMy4zODcxNjQ4RTcsNDMwMTI2MS4wLDM0MDU1NjUuMCw1NzIwNTkuMCw3ODM2MDAuMCwxLjU5ODIzNzhFNyw4MTg2NDUzLjAsMTIxMTUzNy4wLDI5MjYzMjQuMCwxMjkzOTUzLjAsMS4yNDE5MjkzRTcsNjA4MDQ4NS4wLDI2ODg0MTguMCw0MDQxNzY5LjAsNDQ2ODk3Ni4wLDYzNDkwOTcuMCw1Mjk2NDg2LjAsMTI3NDkyMy4wLDk5Mzg0NDQuMCw0OTE5NDc5LjAsNTU5NTIxMS4wLDI4NDQ2NTguMCw5MDIxOTUuMCw4MDQ5MzEzLjAsNjQyMjAwLjAsMTcxMTI2My4wLDEyMzU3ODYuMCw4NDE0MzUwLjAsMTgxOTA0Ni4wLDE5OTgyNTcuMCwxLjg5NzY0NTdFNywxLjEzNTMxNEU3LDM0NTA2NTQuMCwzNDIxMzk5LjAsMS4yMjgxMDU0RTcsMTA0ODMxOS4wLDQwMTIwMTIuMCw3NTQ4NDQuMCw1Njg5MjgzLjAsMi4wODUxODJFNywyMjMzMTY5LjAsNzA3ODUxNi4wLDYwODgyNy4wLDU4OTQxMjEuMCw1MzYzNjc1LjAsMTgwODM0NC4wLDQ5Mzc4Mi4wCisxMCxUaHUgMyBGZWIgMTEsNjI2OTMyLjAsNDQ0NzEwMC4wLDI2NzM0MDAuMCw1MTMwNjMyLjAsMy4zODcxNjQ4RTcsNDMwMTI2MS4wLDM0MDU1NjUuMCw1NzIwNTkuMCw3ODM2MDAuMCwxLjU5ODIzNzhFNyw4MTg2NDUzLjAsMTIxMTUzNy4wLDI5MjYzMjQuMCwxMjkzOTUzLjAsMS4yNDE5MjkzRTcsNjA4MDQ4NS4wLDI2ODg0MTguMCw0MDQxNzY5LjAsNDQ2ODk3Ni4wLDYzNDkwOTcuMCw1Mjk2NDg2LjAsMTI3NDkyMy4wLDk5Mzg0NDQuMCw0OTE5NDc5LjAsNTU5NTIxMS4wLDI4NDQ2NTguMCw5MDIxOTUuMCw4MDQ5MzEzLjAsNjQyMjAwLjAsMTcxMTI2My4wLDEyMzU3ODYuMCw4NDE0MzUwLjAsMTgxOTA0Ni4wLDE5OTgyNTcuMCwxLjg5NzY0NTdFNywxLjEzNTMxNEU3LDM0NTA2NTQuMCwzNDIxMzk5LjAsMS4yMjgxMDU0RTcsMTA0ODMxOS4wLDQwMTIwMTIuMCw3NTQ4NDQuMCw1Njg5MjgzLjAsMi4wODUxODJFNywyMjMzMTY5LjAsNzA3ODUxNi4wLDYwODgyNy4wLDU4OTQxMjEuMCw1MzYzNjc1LjAsMTgwODM0NC4wLDQ5Mzc4Mi4wCisxMSxGcmkgNCBGZWIgMTEsNjI2OTMyLjAsNDQ0NzEwMC4wLDI2NzM0MDAuMCw1MTMwNjMyLjAsMy4zODcxNjQ4RTcsNDMwMTI2MS4wLDM0MDU1NjUuMCw1NzIwNTkuMCw3ODM2MDAuMCwxLjU5ODIzNzhFNyw4MTg2NDUzLjAsMTIxMTUzNy4wLDI5MjYzMjQuMCwxMjkzOTUzLjAsMS4yNDE5MjkzRTcsNjA4MDQ4NS4wLDI2ODg0MTguMCw0MDQxNzY5LjAsNDQ2ODk3Ni4wLDYzNDkwOTcuMCw1Mjk2NDg2LjAsMTI3NDkyMy4wLDk5Mzg0NDQuMCw0OTE5NDc5LjAsNTU5NTIxMS4wLDI4NDQ2NTguMCw5MDIxOTUuMCw4MDQ5MzEzLjAsNjQyMjAwLjAsMTcxMTI2My4wLDEyMzU3ODYuMCw4NDE0MzUwLjAsMTgxOTA0Ni4wLDE5OTgyNTcuMCwxLjg5NzY0NTdFNywxLjEzNTMxNEU3LDM0NTA2NTQuMCwzNDIxMzk5LjAsMS4yMjgxMDU0RTcsMTA0ODMxOS4wLDQwMTIwMTIuMCw3NTQ4NDQuMCw1Njg5MjgzLjAsMi4wODUxODJFNywyMjMzMTY5LjAsNzA3ODUxNi4wLDYwODgyNy4wLDU4OTQxMjEuMCw1MzYzNjc1LjAsMTgwODM0NC4wLDQ5Mzc4Mi4wCisxMixTYXQgNSBGZWIgMTEsNjI2OTMyLjAsNDQ0NzEwMC4wLDI2NzM0MDAuMCw1MTMwNjMyLjAsMy4zODcxNjQ4RTcsNDMwMTI2MS4wLDM0MDU1NjUuMCw1NzIwNTkuMCw3ODM2MDAuMCwxLjU5ODIzNzhFNyw4MTg2NDUzLjAsMTIxMTUzNy4wLDI5MjYzMjQuMCwxMjkzOTUzLjAsMS4yNDE5MjkzRTcsNjA4MDQ4NS4wLDI2ODg0MTguMCw0MDQxNzY5LjAsNDQ2ODk3Ni4wLDYzNDkwOTcuMCw1Mjk2NDg2LjAsMTI3NDkyMy4wLDk5Mzg0NDQuMCw0OTE5NDc5LjAsNTU5NTIxMS4wLDI4NDQ2NTguMCw5MDIxOTUuMCw4MDQ5MzEzLjAsNjQyMjAwLjAsMTcxMTI2My4wLDEyMzU3ODYuMCw4NDE0MzUwLjAsMTgxOTA0Ni4wLDE5OTgyNTcuMCwxLjg5NzY0NTdFNywxLjEzNTMxNEU3LDM0NTA2NTQuMCwzNDIxMzk5LjAsMS4yMjgxMDU0RTcsMTA0ODMxOS4wLDQwMTIwMTIuMCw3NTQ4NDQuMCw1Njg5MjgzLjAsMi4wODUxODJFNywyMjMzMTY5LjAsNzA3ODUxNi4wLDYwODgyNy4wLDU4OTQxMjEuMCw1MzYzNjc1LjAsMTgwODM0NC4wLDQ5Mzc4Mi4wCisxMyxTdW4gNiBGZWIgMTEsNjI2OTMyLjAsNDQ0NzEwMC4wLDI2NzM0MDAuMCw1MTMwNjMyLjAsMy4zODcxNjQ4RTcsNDMwMTI2MS4wLDM0MDU1NjUuMCw1NzIwNTkuMCw3ODM2MDAuMCwxLjU5ODIzNzhFNyw4MTg2NDUzLjAsMTIxMTUzNy4wLDI5MjYzMjQuMCwxMjkzOTUzLjAsMS4yNDE5MjkzRTcsNjA4MDQ4NS4wLDI2ODg0MTguMCw0MDQxNzY5LjAsNDQ2ODk3Ni4wLDYzNDkwOTcuMCw1Mjk2NDg2LjAsMTI3NDkyMy4wLDk5Mzg0NDQuMCw0OTE5NDc5LjAsNTU5NTIxMS4wLDI4NDQ2NTguMCw5MDIxOTUuMCw4MDQ5MzEzLjAsNjQyMjAwLjAsMTcxMTI2My4wLDEyMzU3ODYuMCw4NDE0MzUwLjAsMTgxOTA0Ni4wLDE5OTgyNTcuMCwxLjg5NzY0NTdFNywxLjEzNTMxNEU3LDM0NTA2NTQuMCwzNDIxMzk5LjAsMS4yMjgxMDU0RTcsMTA0ODMxOS4wLDQwMTIwMTIuMCw3NTQ4NDQuMCw1Njg5MjgzLjAsMi4wODUxODJFNywyMjMzMTY5LjAsNzA3ODUxNi4wLDYwODgyNy4wLDU4OTQxMjEuMCw1MzYzNjc1LjAsMTgwODM0NC4wLDQ5Mzc4Mi4wCisxNCxNb24gNyBGZWIgMTEsNjI2OTMyLjAsNDQ0NzEwMC4wLDI2NzM0MDAuMCw1MTMwNjMyLjAsMy4zODcxNjQ4RTcsNDMwMTI2MS4wLDM0MDU1NjUuMCw1NzIwNTkuMCw3ODM2MDAuMCwxLjU5ODIzNzhFNyw4MTg2NDUzLjAsMTIxMTUzNy4wLDI5MjYzMjQuMCwxMjkzOTUzLjAsMS4yNDE5MjkzRTcsNjA4MDQ4NS4wLDI2ODg0MTguMCw0MDQxNzY5LjAsNDQ2ODk3Ni4wLDYzNDkwOTcuMCw1Mjk2NDg2LjAsMTI3NDkyMy4wLDk5Mzg0NDQuMCw0OTE5NDc5LjAsNTU5NTIxMS4wLDI4NDQ2NTguMCw5MDIxOTUuMCw4MDQ5MzEzLjAsNjQyMjAwLjAsMTcxMTI2My4wLDEyMzU3ODYuMCw4NDE0MzUwLjAsMTgxOTA0Ni4wLDE5OTgyNTcuMCwxLjg5NzY0NTdFNywxLjEzNTMxNEU3LDM0NTA2NTQuMCwzNDIxMzk5LjAsMS4yMjgxMDU0RTcsMTA0ODMxOS4wLDQwMTIwMTIuMCw3NTQ4NDQuMCw1Njg5MjgzLjAsMi4wODUxODJFNywyMjMzMTY5LjAsNzA3ODUxNi4wLDYwODgyNy4wLDU4OTQxMjEuMCw1MzYzNjc1LjAsMTgwODM0NC4wLDQ5Mzc4Mi4wCisxNSxUdWUgOCBGZWIgMTEsNjI2OTMyLjAsNDQ0NzEwMC4wLDI2NzM0MDAuMCw1MTMwNjMyLjAsMy4zODcxNjQ4RTcsNDMwMTI2MS4wLDM0MDU1NjUuMCw1NzIwNTkuMCw3ODM2MDAuMCwxLjU5ODIzNzhFNyw4MTg2NDUzLjAsMTIxMTUzNy4wLDI5MjYzMjQuMCwxMjkzOTUzLjAsMS4yNDE5MjkzRTcsNjA4MDQ4NS4wLDI2ODg0MTguMCw0MDQxNzY5LjAsNDQ2ODk3Ni4wLDYzNDkwOTcuMCw1Mjk2NDg2LjAsMTI3NDkyMy4wLDk5Mzg0NDQuMCw0OTE5NDc5LjAsNTU5NTIxMS4wLDI4NDQ2NTguMCw5MDIxOTUuMCw4MDQ5MzEzLjAsNjQyMjAwLjAsMTcxMTI2My4wLDEyMzU3ODYuMCw4NDE0MzUwLjAsMTgxOTA0Ni4wLDE5OTgyNTcuMCwxLjg5NzY0NTdFNywxLjEzNTMxNEU3LDM0NTA2NTQuMCwzNDIxMzk5LjAsMS4yMjgxMDU0RTcsMTA0ODMxOS4wLDQwMTIwMTIuMCw3NTQ4NDQuMCw1Njg5MjgzLjAsMi4wODUxODJFNywyMjMzMTY5LjAsNzA3ODUxNi4wLDYwODgyNy4wLDU4OTQxMjEuMCw1MzYzNjc1LjAsMTgwODM0NC4wLDQ5Mzc4Mi4wCisxNixXZWQgOSBGZWIgMTEsNjI2OTMyLjAsNDQ0NzEwMC4wLDI2NzM0MDAuMCw1MTMwNjMyLjAsMy4zODcxNjQ4RTcsNDMwMTI2MS4wLDM0MDU1NjUuMCw1NzIwNTkuMCw3ODM2MDAuMCwxLjU5ODIzNzhFNyw4MTg2NDUzLjAsMTIxMTUzNy4wLDI5MjYzMjQuMCwxMjkzOTUzLjAsMS4yNDE5MjkzRTcsNjA4MDQ4NS4wLDI2ODg0MTguMCw0MDQxNzY5LjAsNDQ2ODk3Ni4wLDYzNDkwOTcuMCw1Mjk2NDg2LjAsMTI3NDkyMy4wLDk5Mzg0NDQuMCw0OTE5NDc5LjAsNTU5NTIxMS4wLDI4NDQ2NTguMCw5MDIxOTUuMCw4MDQ5MzEzLjAsNjQyMjAwLjAsMTcxMTI2My4wLDEyMzU3ODYuMCw4NDE0MzUwLjAsMTgxOTA0Ni4wLDE5OTgyNTcuMCwxLjg5NzY0NTdFNywxLjEzNTMxNEU3LDM0NTA2NTQuMCwzNDIxMzk5LjAsMS4yMjgxMDU0RTcsMTA0ODMxOS4wLDQwMTIwMTIuMCw3NTQ4NDQuMCw1Njg5MjgzLjAsMi4wODUxODJFNywyMjMzMTY5LjAsNzA3ODUxNi4wLDYwODgyNy4wLDU4OTQxMjEuMCw1MzYzNjc1LjAsMTgwODM0NC4wLDQ5Mzc4Mi4wCisxNyxUaHUgMTAgRmViIDExLDYyNjkzMi4wLDQ0NDcxMDAuMCwyNjczNDAwLjAsNTEzMDYzMi4wLDMuMzg3MTY0OEU3LDQzMDEyNjEuMCwzNDA1NTY1LjAsNTcyMDU5LjAsNzgzNjAwLjAsMS41OTgyMzc4RTcsODE4NjQ1My4wLDEyMTE1MzcuMCwyOTI2MzI0LjAsMTI5Mzk1My4wLDEuMjQxOTI5M0U3LDYwODA0ODUuMCwyNjg4NDE4LjAsNDA0MTc2OS4wLDQ0Njg5NzYuMCw2MzQ5MDk3LjAsNTI5NjQ4Ni4wLDEyNzQ5MjMuMCw5OTM4NDQ0LjAsNDkxOTQ3OS4wLDU1OTUyMTEuMCwyODQ0NjU4LjAsOTAyMTk1LjAsODA0OTMxMy4wLDY0MjIwMC4wLDE3MTEyNjMuMCwxMjM1Nzg2LjAsODQxNDM1MC4wLDE4MTkwNDYuMCwxOTk4MjU3LjAsMS44OTc2NDU3RTcsMS4xMzUzMTRFNywzNDUwNjU0LjAsMzQyMTM5OS4wLDEuMjI4MTA1NEU3LDEwNDgzMTkuMCw0MDEyMDEyLjAsNzU0ODQ0LjAsNTY4OTI4My4wLDIuMDg1MTgyRTcsMjIzMzE2OS4wLDcwNzg1MTYuMCw2MDg4MjcuMCw1ODk0MTIxLjAsNTM2MzY3NS4wLDE4MDgzNDQuMCw0OTM3ODIuMAorMTgsRnJpIDExIEZlYiAxMSw2MjY5MzIuMCw0NDQ3MTAwLjAsMjY3MzQwMC4wLDUxMzA2MzIuMCwzLjM4NzE2NDhFNyw0MzAxMjYxLjAsMzQwNTU2NS4wLDU3MjA1OS4wLDc4MzYwMC4wLDEuNTk4MjM3OEU3LDgxODY0NTMuMCwxMjExNTM3LjAsMjkyNjMyNC4wLDEyOTM5NTMuMCwxLjI0MTkyOTNFNyw2MDgwNDg1LjAsMjY4ODQxOC4wLDQwNDE3NjkuMCw0NDY4OTc2LjAsNjM0OTA5Ny4wLDUyOTY0ODYuMCwxMjc0OTIzLjAsOTkzODQ0NC4wLDQ5MTk0NzkuMCw1NTk1MjExLjAsMjg0NDY1OC4wLDkwMjE5NS4wLDgwNDkzMTMuMCw2NDIyMDAuMCwxNzExMjYzLjAsMTIzNTc4Ni4wLDg0MTQzNTAuMCwxODE5MDQ2LjAsMTk5ODI1Ny4wLDEuODk3NjQ1N0U3LDEuMTM1MzE0RTcsMzQ1MDY1NC4wLDM0MjEzOTkuMCwxLjIyODEwNTRFNywxMDQ4MzE5LjAsNDAxMjAxMi4wLDc1NDg0NC4wLDU2ODkyODMuMCwyLjA4NTE4MkU3LDIyMzMxNjkuMCw3MDc4NTE2LjAsNjA4ODI3LjAsNTg5NDEyMS4wLDUzNjM2NzUuMCwxODA4MzQ0LjAsNDkzNzgyLjAKKzE5LFNhdCAxMiBGZWIgMTEsNjI2OTMyLjAsNDQ0NzEwMC4wLDI2NzM0MDAuMCw1MTMwNjMyLjAsMy4zODcxNjQ4RTcsNDMwMTI2MS4wLDM0MDU1NjUuMCw1NzIwNTkuMCw3ODM2MDAuMCwxLjU5ODIzNzhFNyw4MTg2NDUzLjAsMTIxMTUzNy4wLDI5MjYzMjQuMCwxMjkzOTUzLjAsMS4yNDE5MjkzRTcsNjA4MDQ4NS4wLDI2ODg0MTguMCw0MDQxNzY5LjAsNDQ2ODk3Ni4wLDYzNDkwOTcuMCw1Mjk2NDg2LjAsMTI3NDkyMy4wLDk5Mzg0NDQuMCw0OTE5NDc5LjAsNTU5NTIxMS4wLDI4NDQ2NTguMCw5MDIxOTUuMCw4MDQ5MzEzLjAsNjQyMjAwLjAsMTcxMTI2My4wLDEyMzU3ODYuMCw4NDE0MzUwLjAsMTgxOTA0Ni4wLDE5OTgyNTcuMCwxLjg5NzY0NTdFNywxLjEzNTMxNEU3LDM0NTA2NTQuMCwzNDIxMzk5LjAsMS4yMjgxMDU0RTcsMTA0ODMxOS4wLDQwMTIwMTIuMCw3NTQ4NDQuMCw1Njg5MjgzLjAsMi4wODUxODJFNywyMjMzMTY5LjAsNzA3ODUxNi4wLDYwODgyNy4wLDU4OTQxMjEuMCw1MzYzNjc1LjAsMTgwODM0NC4wLDQ5Mzc4Mi4wCisyMCxTdW4gMTMgRmViIDExLDYyNjkzMi4wLDQ0NDcxMDAuMCwyNjczNDAwLjAsNTEzMDYzMi4wLDMuMzg3MTY0OEU3LDQzMDEyNjEuMCwzNDA1NTY1LjAsNTcyMDU5LjAsNzgzNjAwLjAsMS41OTgyMzc4RTcsODE4NjQ1My4wLDEyMTE1MzcuMCwyOTI2MzI0LjAsMTI5Mzk1My4wLDEuMjQxOTI5M0U3LDYwODA0ODUuMCwyNjg4NDE4LjAsNDA0MTc2OS4wLDQ0Njg5NzYuMCw2MzQ5MDk3LjAsNTI5NjQ4Ni4wLDEyNzQ5MjMuMCw5OTM4NDQ0LjAsNDkxOTQ3OS4wLDU1OTUyMTEuMCwyODQ0NjU4LjAsOTAyMTk1LjAsODA0OTMxMy4wLDY0MjIwMC4wLDE3MTEyNjMuMCwxMjM1Nzg2LjAsODQxNDM1MC4wLDE4MTkwNDYuMCwxOTk4MjU3LjAsMS44OTc2NDU3RTcsMS4xMzUzMTRFNywzNDUwNjU0LjAsMzQyMTM5OS4wLDEuMjI4MTA1NEU3LDEwNDgzMTkuMCw0MDEyMDEyLjAsNzU0ODQ0LjAsNTY4OTI4My4wLDIuMDg1MTgyRTcsMjIzMzE2OS4wLDcwNzg1MTYuMCw2MDg4MjcuMCw1ODk0MTIxLjAsNTM2MzY3NS4wLDE4MDgzNDQuMCw0OTM3ODIuMAorMjEsTW9uIDE0IEZlYiAxMSw2MjY5MzIuMCw0NDQ3MTAwLjAsMjY3MzQwMC4wLDUxMzA2MzIuMCwzLjM4NzE2NDhFNyw0MzAxMjYxLjAsMzQwNTU2NS4wLDU3MjA1OS4wLDc4MzYwMC4wLDEuNTk4MjM3OEU3LDgxODY0NTMuMCwxMjExNTM3LjAsMjkyNjMyNC4wLDEyOTM5NTMuMCwxLjI0MTkyOTNFNyw2MDgwNDg1LjAsMjY4ODQxOC4wLDQwNDE3NjkuMCw0NDY4OTc2LjAsNjM0OTA5Ny4wLDUyOTY0ODYuMCwxMjc0OTIzLjAsOTkzODQ0NC4wLDQ5MTk0NzkuMCw1NTk1MjExLjAsMjg0NDY1OC4wLDkwMjE5NS4wLDgwNDkzMTMuMCw2NDIyMDAuMCwxNzExMjYzLjAsMTIzNTc4Ni4wLDg0MTQzNTAuMCwxODE5MDQ2LjAsMTk5ODI1Ny4wLDEuODk3NjQ1N0U3LDEuMTM1MzE0RTcsMzQ1MDY1NC4wLDM0MjEzOTkuMCwxLjIyODEwNTRFNywxMDQ4MzE5LjAsNDAxMjAxMi4wLDc1NDg0NC4wLDU2ODkyODMuMCwyLjA4NTE4MkU3LDIyMzMxNjkuMCw3MDc4NTE2LjAsNjA4ODI3LjAsNTg5NDEyMS4wLDUzNjM2NzUuMCwxODA4MzQ0LjAsNDkzNzgyLjAKKzIyLFR1ZSAxNSBGZWIgMTEsNjI2OTMyLjAsNDQ0NzEwMC4wLDI2NzM0MDAuMCw1MTMwNjMyLjAsMy4zODcxNjQ4RTcsNDMwMTI2MS4wLDM0MDU1NjUuMCw1NzIwNTkuMCw3ODM2MDAuMCwxLjU5ODIzNzhFNyw4MTg2NDUzLjAsMTIxMTUzNy4wLDI5MjYzMjQuMCwxMjkzOTUzLjAsMS4yNDE5MjkzRTcsNjA4MDQ4NS4wLDI2ODg0MTguMCw0MDQxNzY5LjAsNDQ2ODk3Ni4wLDYzNDkwOTcuMCw1Mjk2NDg2LjAsMTI3NDkyMy4wLDk5Mzg0NDQuMCw0OTE5NDc5LjAsNTU5NTIxMS4wLDI4NDQ2NTguMCw5MDIxOTUuMCw4MDQ5MzEzLjAsNjQyMjAwLjAsMTcxMTI2My4wLDEyMzU3ODYuMCw4NDE0MzUwLjAsMTgxOTA0Ni4wLDE5OTgyNTcuMCwxLjg5NzY0NTdFNywxLjEzNTMxNEU3LDM0NTA2NTQuMCwzNDIxMzk5LjAsMS4yMjgxMDU0RTcsMTA0ODMxOS4wLDQwMTIwMTIuMCw3NTQ4NDQuMCw1Njg5MjgzLjAsMi4wODUxODJFNywyMjMzMTY5LjAsNzA3ODUxNi4wLDYwODgyNy4wLDU4OTQxMjEuMCw1MzYzNjc1LjAsMTgwODM0NC4wLDQ5Mzc4Mi4wCisyMyxXZWQgMTYgRmViIDExLDYyNjkzMi4wLDQ0NDcxMDAuMCwyNjczNDAwLjAsNTEzMDYzMi4wLDMuMzg3MTY0OEU3LDQzMDEyNjEuMCwzNDA1NTY1LjAsNTcyMDU5LjAsNzgzNjAwLjAsMS41OTgyMzc4RTcsODE4NjQ1My4wLDEyMTE1MzcuMCwyOTI2MzI0LjAsMTI5Mzk1My4wLDEuMjQxOTI5M0U3LDYwODA0ODUuMCwyNjg4NDE4LjAsNDA0MTc2OS4wLDQ0Njg5NzYuMCw2MzQ5MDk3LjAsNTI5NjQ4Ni4wLDEyNzQ5MjMuMCw5OTM4NDQ0LjAsNDkxOTQ3OS4wLDU1OTUyMTEuMCwyODQ0NjU4LjAsOTAyMTk1LjAsODA0OTMxMy4wLDY0MjIwMC4wLDE3MTEyNjMuMCwxMjM1Nzg2LjAsODQxNDM1MC4wLDE4MTkwNDYuMCwxOTk4MjU3LjAsMS44OTc2NDU3RTcsMS4xMzUzMTRFNywzNDUwNjU0LjAsMzQyMTM5OS4wLDEuMjI4MTA1NEU3LDEwNDgzMTkuMCw0MDEyMDEyLjAsNzU0ODQ0LjAsNTY4OTI4My4wLDIuMDg1MTgyRTcsMjIzMzE2OS4wLDcwNzg1MTYuMCw2MDg4MjcuMCw1ODk0MTIxLjAsNTM2MzY3NS4wLDE4MDgzNDQuMCw0OTM3ODIuMAorMjQsVGh1IDE3IEZlYiAxMSw2MjY5MzIuMCw0NDQ3MTAwLjAsMjY3MzQwMC4wLDUxMzA2MzIuMCwzLjM4NzE2NDhFNyw0MzAxMjYxLjAsMzQwNTU2NS4wLDU3MjA1OS4wLDc4MzYwMC4wLDEuNTk4MjM3OEU3LDgxODY0NTMuMCwxMjExNTM3LjAsMjkyNjMyNC4wLDEyOTM5NTMuMCwxLjI0MTkyOTNFNyw2MDgwNDg1LjAsMjY4ODQxOC4wLDQwNDE3NjkuMCw0NDY4OTc2LjAsNjM0OTA5Ny4wLDUyOTY0ODYuMCwxMjc0OTIzLjAsOTkzODQ0NC4wLDQ5MTk0NzkuMCw1NTk1MjExLjAsMjg0NDY1OC4wLDkwMjE5NS4wLDgwNDkzMTMuMCw2NDIyMDAuMCwxNzExMjYzLjAsMTIzNTc4Ni4wLDg0MTQzNTAuMCwxODE5MDQ2LjAsMTk5ODI1Ny4wLDEuODk3NjQ1N0U3LDEuMTM1MzE0RTcsMzQ1MDY1NC4wLDM0MjEzOTkuMCwxLjIyODEwNTRFNywxMDQ4MzE5LjAsNDAxMjAxMi4wLDc1NDg0NC4wLDU2ODkyODMuMCwyLjA4NTE4MkU3LDIyMzMxNjkuMCw3MDc4NTE2LjAsNjA4ODI3LjAsNTg5NDEyMS4wLDUzNjM2NzUuMCwxODA4MzQ0LjAsNDkzNzgyLjAKKzI1LEZyaSAxOCBGZWIgMTEsNjI2OTMyLjAsNDQ0NzEwMC4wLDI2NzM0MDAuMCw1MTMwNjMyLjAsMy4zODcxNjQ4RTcsNDMwMTI2MS4wLDM0MDU1NjUuMCw1NzIwNTkuMCw3ODM2MDAuMCwxLjU5ODIzNzhFNyw4MTg2NDUzLjAsMTIxMTUzNy4wLDI5MjYzMjQuMCwxMjkzOTUzLjAsMS4yNDE5MjkzRTcsNjA4MDQ4NS4wLDI2ODg0MTguMCw0MDQxNzY5LjAsNDQ2ODk3Ni4wLDYzNDkwOTcuMCw1Mjk2NDg2LjAsMTI3NDkyMy4wLDk5Mzg0NDQuMCw0OTE5NDc5LjAsNTU5NTIxMS4wLDI4NDQ2NTguMCw5MDIxOTUuMCw4MDQ5MzEzLjAsNjQyMjAwLjAsMTcxMTI2My4wLDEyMzU3ODYuMCw4NDE0MzUwLjAsMTgxOTA0Ni4wLDE5OTgyNTcuMCwxLjg5NzY0NTdFNywxLjEzNTMxNEU3LDM0NTA2NTQuMCwzNDIxMzk5LjAsMS4yMjgxMDU0RTcsMTA0ODMxOS4wLDQwMTIwMTIuMCw3NTQ4NDQuMCw1Njg5MjgzLjAsMi4wODUxODJFNywyMjMzMTY5LjAsNzA3ODUxNi4wLDYwODgyNy4wLDU4OTQxMjEuMCw1MzYzNjc1LjAsMTgwODM0NC4wLDQ5Mzc4Mi4wCisyNixTYXQgMTkgRmViIDExLDYyNjkzMi4wLDQ0NDcxMDAuMCwyNjczNDAwLjAsNTEzMDYzMi4wLDMuMzg3MTY0OEU3LDQzMDEyNjEuMCwzNDA1NTY1LjAsNTcyMDU5LjAsNzgzNjAwLjAsMS41OTgyMzc4RTcsODE4NjQ1My4wLDEyMTE1MzcuMCwyOTI2MzI0LjAsMTI5Mzk1My4wLDEuMjQxOTI5M0U3LDYwODA0ODUuMCwyNjg4NDE4LjAsNDA0MTc2OS4wLDQ0Njg5NzYuMCw2MzQ5MDk3LjAsNTI5NjQ4Ni4wLDEyNzQ5MjMuMCw5OTM4NDQ0LjAsNDkxOTQ3OS4wLDU1OTUyMTEuMCwyODQ0NjU4LjAsOTAyMTk1LjAsODA0OTMxMy4wLDY0MjIwMC4wLDE3MTEyNjMuMCwxMjM1Nzg2LjAsODQxNDM1MC4wLDE4MTkwNDYuMCwxOTk4MjU3LjAsMS44OTc2NDU3RTcsMS4xMzUzMTRFNywzNDUwNjU0LjAsMzQyMTM5OS4wLDEuMjI4MTA1NEU3LDEwNDgzMTkuMCw0MDEyMDEyLjAsNzU0ODQ0LjAsNTY4OTI4My4wLDIuMDg1MTgyRTcsMjIzMzE2OS4wLDcwNzg1MTYuMCw2MDg4MjcuMCw1ODk0MTIxLjAsNTM2MzY3NS4wLDE4MDgzNDQuMCw0OTM3ODIuMAorMjcsU3VuIDIwIEZlYiAxMSw2MjY5MzIuMCw0NDQ3MTAwLjAsMjY3MzQwMC4wLDUxMzA2MzIuMCwzLjM4NzE2NDhFNyw0MzAxMjYxLjAsMzQwNTU2NS4wLDU3MjA1OS4wLDc4MzYwMC4wLDEuNTk4MjM3OEU3LDgxODY0NTMuMCwxMjExNTM3LjAsMjkyNjMyNC4wLDEyOTM5NTMuMCwxLjI0MTkyOTNFNyw2MDgwNDg1LjAsMjY4ODQxOC4wLDQwNDE3NjkuMCw0NDY4OTc2LjAsNjM0OTA5Ny4wLDUyOTY0ODYuMCwxMjc0OTIzLjAsOTkzODQ0NC4wLDQ5MTk0NzkuMCw1NTk1MjExLjAsMjg0NDY1OC4wLDkwMjE5NS4wLDgwNDkzMTMuMCw2NDIyMDAuMCwxNzExMjYzLjAsMTIzNTc4Ni4wLDg0MTQzNTAuMCwxODE5MDQ2LjAsMTk5ODI1Ny4wLDEuODk3NjQ1N0U3LDEuMTM1MzE0RTcsMzQ1MDY1NC4wLDM0MjEzOTkuMCwxLjIyODEwNTRFNywxMDQ4MzE5LjAsNDAxMjAxMi4wLDc1NDg0NC4wLDU2ODkyODMuMCwyLjA4NTE4MkU3LDIyMzMxNjkuMCw3MDc4NTE2LjAsNjA4ODI3LjAsNTg5NDEyMS4wLDUzNjM2NzUuMCwxODA4MzQ0LjAsNDkzNzgyLjAKKzI4LE1vbiAyMSBGZWIgMTEsNjI2OTMyLjAsNDQ0NzEwMC4wLDI2NzM0MDAuMCw1MTMwNjMyLjAsMy4zODcxNjQ4RTcsNDMwMTI2MS4wLDM0MDU1NjUuMCw1NzIwNTkuMCw3ODM2MDAuMCwxLjU5ODIzNzhFNyw4MTg2NDUzLjAsMTIxMTUzNy4wLDI5MjYzMjQuMCwxMjkzOTUzLjAsMS4yNDE5MjkzRTcsNjA4MDQ4NS4wLDI2ODg0MTguMCw0MDQxNzY5LjAsNDQ2ODk3Ni4wLDYzNDkwOTcuMCw1Mjk2NDg2LjAsMTI3NDkyMy4wLDk5Mzg0NDQuMCw0OTE5NDc5LjAsNTU5NTIxMS4wLDI4NDQ2NTguMCw5MDIxOTUuMCw4MDQ5MzEzLjAsNjQyMjAwLjAsMTcxMTI2My4wLDEyMzU3ODYuMCw4NDE0MzUwLjAsMTgxOTA0Ni4wLDE5OTgyNTcuMCwxLjg5NzY0NTdFNywxLjEzNTMxNEU3LDM0NTA2NTQuMCwzNDIxMzk5LjAsMS4yMjgxMDU0RTcsMTA0ODMxOS4wLDQwMTIwMTIuMCw3NTQ4NDQuMCw1Njg5MjgzLjAsMi4wODUxODJFNywyMjMzMTY5LjAsNzA3ODUxNi4wLDYwODgyNy4wLDU4OTQxMjEuMCw1MzYzNjc1LjAsMTgwODM0NC4wLDQ5Mzc4Mi4wCisyOSxUdWUgMjIgRmViIDExLDYyNjkzMi4wLDQ0NDcxMDAuMCwyNjczNDAwLjAsNTEzMDYzMi4wLDMuMzg3MTY0OEU3LDQzMDEyNjEuMCwzNDA1NTY1LjAsNTcyMDU5LjAsNzgzNjAwLjAsMS41OTgyMzc4RTcsODE4NjQ1My4wLDEyMTE1MzcuMCwyOTI2MzI0LjAsMTI5Mzk1My4wLDEuMjQxOTI5M0U3LDYwODA0ODUuMCwyNjg4NDE4LjAsNDA0MTc2OS4wLDQ0Njg5NzYuMCw2MzQ5MDk3LjAsNTI5NjQ4Ni4wLDEyNzQ5MjMuMCw5OTM4NDQ0LjAsNDkxOTQ3OS4wLDU1OTUyMTEuMCwyODQ0NjU4LjAsOTAyMTk1LjAsODA0OTMxMy4wLDY0MjIwMC4wLDE3MTEyNjMuMCwxMjM1Nzg2LjAsODQxNDM1MC4wLDE4MTkwNDYuMCwxOTk4MjU3LjAsMS44OTc2NDU3RTcsMS4xMzUzMTRFNywzNDUwNjU0LjAsMzQyMTM5OS4wLDEuMjI4MTA1NEU3LDEwNDgzMTkuMCw0MDEyMDEyLjAsNzU0ODQ0LjAsNTY4OTI4My4wLDIuMDg1MTgyRTcsMjIzMzE2OS4wLDcwNzg1MTYuMCw2MDg4MjcuMCw1ODk0MTIxLjAsNTM2MzY3NS4wLDE4MDgzNDQuMCw0OTM3ODIuMAorMzAsV2VkIDIzIEZlYiAxMSw2MjY5MzIuMCw0NDQ3MTAwLjAsMjY3MzQwMC4wLDUxMzA2MzIuMCwzLjM4NzE2NDhFNyw0MzAxMjYxLjAsMzQwNTU2NS4wLDU3MjA1OS4wLDc4MzYwMC4wLDEuNTk4MjM3OEU3LDgxODY0NTMuMCwxMjExNTM3LjAsMjkyNjMyNC4wLDEyOTM5NTMuMCwxLjI0MTkyOTNFNyw2MDgwNDg1LjAsMjY4ODQxOC4wLDQwNDE3NjkuMCw0NDY4OTc2LjAsNjM0OTA5Ny4wLDUyOTY0ODYuMCwxMjc0OTIzLjAsOTkzODQ0NC4wLDQ5MTk0NzkuMCw1NTk1MjExLjAsMjg0NDY1OC4wLDkwMjE5NS4wLDgwNDkzMTMuMCw2NDIyMDAuMCwxNzExMjYzLjAsMTIzNTc4Ni4wLDg0MTQzNTAuMCwxODE5MDQ2LjAsMTk5ODI1Ny4wLDEuODk3NjQ1N0U3LDEuMTM1MzE0RTcsMzQ1MDY1NC4wLDM0MjEzOTkuMCwxLjIyODEwNTRFNywxMDQ4MzE5LjAsNDAxMjAxMi4wLDc1NDg0NC4wLDU2ODkyODMuMCwyLjA4NTE4MkU3LDIyMzMxNjkuMCw3MDc4NTE2LjAsNjA4ODI3LjAsNTg5NDEyMS4wLDUzNjM2NzUuMCwxODA4MzQ0LjAsNDkzNzgyLjAKKzMxLFRodSAyNCBGZWIgMTEsNjI2OTMyLjAsNDQ0NzEwMC4wLDI2NzM0MDAuMCw1MTMwNjMyLjAsMy4zODcxNjQ4RTcsNDMwMTI2MS4wLDM0MDU1NjUuMCw1NzIwNTkuMCw3ODM2MDAuMCwxLjU5ODIzNzhFNyw4MTg2NDUzLjAsMTIxMTUzNy4wLDI5MjYzMjQuMCwxMjkzOTUzLjAsMS4yNDE5MjkzRTcsNjA4MDQ4NS4wLDI2ODg0MTguMCw0MDQxNzY5LjAsNDQ2ODk3Ni4wLDYzNDkwOTcuMCw1Mjk2NDg2LjAsMTI3NDkyMy4wLDk5Mzg0NDQuMCw0OTE5NDc5LjAsNTU5NTIxMS4wLDI4NDQ2NTguMCw5MDIxOTUuMCw4MDQ5MzEzLjAsNjQyMjAwLjAsMTcxMTI2My4wLDEyMzU3ODYuMCw4NDE0MzUwLjAsMTgxOTA0Ni4wLDE5OTgyNTcuMCwxLjg5NzY0NTdFNywxLjEzNTMxNEU3LDM0NTA2NTQuMCwzNDIxMzk5LjAsMS4yMjgxMDU0RTcsMTA0ODMxOS4wLDQwMTIwMTIuMCw3NTQ4NDQuMCw1Njg5MjgzLjAsMi4wODUxODJFNywyMjMzMTY5LjAsNzA3ODUxNi4wLDYwODgyNy4wLDU4OTQxMjEuMCw1MzYzNjc1LjAsMTgwODM0NC4wLDQ5Mzc4Mi4wCiszMixGcmkgMjUgRmViIDExLDYyNjkzMi4wLDQ0NDcxMDAuMCwyNjczNDAwLjAsNTEzMDYzMi4wLDMuMzg3MTY0OEU3LDQzMDEyNjEuMCwzNDA1NTY1LjAsNTcyMDU5LjAsNzgzNjAwLjAsMS41OTgyMzc4RTcsODE4NjQ1My4wLDEyMTE1MzcuMCwyOTI2MzI0LjAsMTI5Mzk1My4wLDEuMjQxOTI5M0U3LDYwODA0ODUuMCwyNjg4NDE4LjAsNDA0MTc2OS4wLDQ0Njg5NzYuMCw2MzQ5MDk3LjAsNTI5NjQ4Ni4wLDEyNzQ5MjMuMCw5OTM4NDQ0LjAsNDkxOTQ3OS4wLDU1OTUyMTEuMCwyODQ0NjU4LjAsOTAyMTk1LjAsODA0OTMxMy4wLDY0MjIwMC4wLDE3MTEyNjMuMCwxMjM1Nzg2LjAsODQxNDM1MC4wLDE4MTkwNDYuMCwxOTk4MjU3LjAsMS44OTc2NDU3RTcsMS4xMzUzMTRFNywzNDUwNjU0LjAsMzQyMTM5OS4wLDEuMjI4MTA1NEU3LDEwNDgzMTkuMCw0MDEyMDEyLjAsNzU0ODQ0LjAsNTY4OTI4My4wLDIuMDg1MTgyRTcsMjIzMzE2OS4wLDcwNzg1MTYuMCw2MDg4MjcuMCw1ODk0MTIxLjAsNTM2MzY3NS4wLDE4MDgzNDQuMCw0OTM3ODIuMApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTRUlSU3RhdGVzT25seV9GRF9SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9odW1hbi9EZWF0aHNfMC5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNFSVJTdGF0ZXNPbmx5X0ZEX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL2h1bWFuL0RlYXRoc18wLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMTJlOGI4Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTRUlSU3RhdGVzT25seV9GRF9SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9odW1hbi9EZWF0aHNfMC5jc3YKQEAgLTAsMCArMSwzMyBAQAoraXRlcmF0aW9uLHRpbWUsc3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vbm9kZS90cmFuc3BvcnQvcGlwZS9VU0EKKzEsVHVlIDI1IEphbiAxMSwwLjAKKzIsV2VkIDI2IEphbiAxMSwwLjAKKzMsVGh1IDI3IEphbiAxMSwwLjAKKzQsRnJpIDI4IEphbiAxMSwwLjAKKzUsU2F0IDI5IEphbiAxMSwwLjAKKzYsU3VuIDMwIEphbiAxMSwwLjAKKzcsTW9uIDMxIEphbiAxMSwwLjAKKzgsVHVlIDEgRmViIDExLDAuMAorOSxXZWQgMiBGZWIgMTEsMC4wCisxMCxUaHUgMyBGZWIgMTEsMC4wCisxMSxGcmkgNCBGZWIgMTEsMC4wCisxMixTYXQgNSBGZWIgMTEsMC4wCisxMyxTdW4gNiBGZWIgMTEsMC4wCisxNCxNb24gNyBGZWIgMTEsMC4wCisxNSxUdWUgOCBGZWIgMTEsMC4wCisxNixXZWQgOSBGZWIgMTEsMC4wCisxNyxUaHUgMTAgRmViIDExLDAuMAorMTgsRnJpIDExIEZlYiAxMSwwLjAKKzE5LFNhdCAxMiBGZWIgMTEsMC4wCisyMCxTdW4gMTMgRmViIDExLDAuMAorMjEsTW9uIDE0IEZlYiAxMSwwLjAKKzIyLFR1ZSAxNSBGZWIgMTEsMC4wCisyMyxXZWQgMTYgRmViIDExLDAuMAorMjQsVGh1IDE3IEZlYiAxMSwwLjAKKzI1LEZyaSAxOCBGZWIgMTEsMC4wCisyNixTYXQgMTkgRmViIDExLDAuMAorMjcsU3VuIDIwIEZlYiAxMSwwLjAKKzI4LE1vbiAyMSBGZWIgMTEsMC4wCisyOSxUdWUgMjIgRmViIDExLDAuMAorMzAsV2VkIDIzIEZlYiAxMSwwLjAKKzMxLFRodSAyNCBGZWIgMTEsMC4wCiszMixGcmkgMjUgRmViIDExLDAuMApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTRUlSU3RhdGVzT25seV9GRF9SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9odW1hbi9EZWF0aHNfMS5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNFSVJTdGF0ZXNPbmx5X0ZEX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL2h1bWFuL0RlYXRoc18xLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40N2E4NDNmCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTRUlSU3RhdGVzT25seV9GRF9SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9odW1hbi9EZWF0aHNfMS5jc3YKQEAgLTAsMCArMSwzMyBAQAoraXRlcmF0aW9uLHRpbWUsVVMtQUssVVMtQUwsVVMtQVIsVVMtQVosVVMtQ0EsVVMtQ08sVVMtQ1QsVVMtREMsVVMtREUsVVMtRkwsVVMtR0EsVVMtSEksVVMtSUEsVVMtSUQsVVMtSUwsVVMtSU4sVVMtS1MsVVMtS1ksVVMtTEEsVVMtTUEsVVMtTUQsVVMtTUUsVVMtTUksVVMtTU4sVVMtTU8sVVMtTVMsVVMtTVQsVVMtTkMsVVMtTkQsVVMtTkUsVVMtTkgsVVMtTkosVVMtTk0sVVMtTlYsVVMtTlksVVMtT0gsVVMtT0ssVVMtT1IsVVMtUEEsVVMtUkksVVMtU0MsVVMtU0QsVVMtVE4sVVMtVFgsVVMtVVQsVVMtVkEsVVMtVlQsVVMtV0EsVVMtV0ksVVMtV1YsVVMtV1kKKzEsVHVlIDI1IEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMixXZWQgMjYgSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCiszLFRodSAyNyBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzQsRnJpIDI4IEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorNSxTYXQgMjkgSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCis2LFN1biAzMCBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzcsTW9uIDMxIEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorOCxUdWUgMSBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzksV2VkIDIgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxMCxUaHUgMyBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzExLEZyaSA0IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTIsU2F0IDUgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxMyxTdW4gNiBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzE0LE1vbiA3IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTUsVHVlIDggRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxNixXZWQgOSBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzE3LFRodSAxMCBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzE4LEZyaSAxMSBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzE5LFNhdCAxMiBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzIwLFN1biAxMyBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzIxLE1vbiAxNCBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzIyLFR1ZSAxNSBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzIzLFdlZCAxNiBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzI0LFRodSAxNyBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzI1LEZyaSAxOCBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzI2LFNhdCAxOSBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzI3LFN1biAyMCBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzI4LE1vbiAyMSBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzI5LFR1ZSAyMiBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzMwLFdlZCAyMyBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzMxLFRodSAyNCBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzMyLEZyaSAyNSBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0VJUlN0YXRlc09ubHlfRkRfUmVmZXJlbmNlL2F1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwvaHVtYW4vRGVuc2l0eV8wLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0VJUlN0YXRlc09ubHlfRkRfUmVmZXJlbmNlL2F1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwvaHVtYW4vRGVuc2l0eV8wLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMTJlOGI4Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTRUlSU3RhdGVzT25seV9GRF9SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9odW1hbi9EZW5zaXR5XzAuY3N2CkBAIC0wLDAgKzEsMzMgQEAKK2l0ZXJhdGlvbix0aW1lLHN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL25vZGUvdHJhbnNwb3J0L3BpcGUvVVNBCisxLFR1ZSAyNSBKYW4gMTEsMC4wCisyLFdlZCAyNiBKYW4gMTEsMC4wCiszLFRodSAyNyBKYW4gMTEsMC4wCis0LEZyaSAyOCBKYW4gMTEsMC4wCis1LFNhdCAyOSBKYW4gMTEsMC4wCis2LFN1biAzMCBKYW4gMTEsMC4wCis3LE1vbiAzMSBKYW4gMTEsMC4wCis4LFR1ZSAxIEZlYiAxMSwwLjAKKzksV2VkIDIgRmViIDExLDAuMAorMTAsVGh1IDMgRmViIDExLDAuMAorMTEsRnJpIDQgRmViIDExLDAuMAorMTIsU2F0IDUgRmViIDExLDAuMAorMTMsU3VuIDYgRmViIDExLDAuMAorMTQsTW9uIDcgRmViIDExLDAuMAorMTUsVHVlIDggRmViIDExLDAuMAorMTYsV2VkIDkgRmViIDExLDAuMAorMTcsVGh1IDEwIEZlYiAxMSwwLjAKKzE4LEZyaSAxMSBGZWIgMTEsMC4wCisxOSxTYXQgMTIgRmViIDExLDAuMAorMjAsU3VuIDEzIEZlYiAxMSwwLjAKKzIxLE1vbiAxNCBGZWIgMTEsMC4wCisyMixUdWUgMTUgRmViIDExLDAuMAorMjMsV2VkIDE2IEZlYiAxMSwwLjAKKzI0LFRodSAxNyBGZWIgMTEsMC4wCisyNSxGcmkgMTggRmViIDExLDAuMAorMjYsU2F0IDE5IEZlYiAxMSwwLjAKKzI3LFN1biAyMCBGZWIgMTEsMC4wCisyOCxNb24gMjEgRmViIDExLDAuMAorMjksVHVlIDIyIEZlYiAxMSwwLjAKKzMwLFdlZCAyMyBGZWIgMTEsMC4wCiszMSxUaHUgMjQgRmViIDExLDAuMAorMzIsRnJpIDI1IEZlYiAxMSwwLjAKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0VJUlN0YXRlc09ubHlfRkRfUmVmZXJlbmNlL2F1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwvaHVtYW4vRGVuc2l0eV8xLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0VJUlN0YXRlc09ubHlfRkRfUmVmZXJlbmNlL2F1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwvaHVtYW4vRGVuc2l0eV8xLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NDE4YjcyCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTRUlSU3RhdGVzT25seV9GRF9SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9odW1hbi9EZW5zaXR5XzEuY3N2CkBAIC0wLDAgKzEsMzMgQEAKK2l0ZXJhdGlvbix0aW1lLFVTLUFLLFVTLUFMLFVTLUFSLFVTLUFaLFVTLUNBLFVTLUNPLFVTLUNULFVTLURDLFVTLURFLFVTLUZMLFVTLUdBLFVTLUhJLFVTLUlBLFVTLUlELFVTLUlMLFVTLUlOLFVTLUtTLFVTLUtZLFVTLUxBLFVTLU1BLFVTLU1ELFVTLU1FLFVTLU1JLFVTLU1OLFVTLU1PLFVTLU1TLFVTLU1ULFVTLU5DLFVTLU5ELFVTLU5FLFVTLU5ILFVTLU5KLFVTLU5NLFVTLU5WLFVTLU5ZLFVTLU9ILFVTLU9LLFVTLU9SLFVTLVBBLFVTLVJJLFVTLVNDLFVTLVNELFVTLVROLFVTLVRYLFVTLVVULFVTLVZBLFVTLVZULFVTLVdBLFVTLVdJLFVTLVdWLFVTLVdZCisxLFR1ZSAyNSBKYW4gMTEsMC45NDUyMTc3NjkzODAwMjMzLDg0LjgzNzUyNjUzMTQwMDI0LDUwLjI3MjA4MzAyODg1NjMzLDQ1LjAwNjIxNTAwNDk2MDYsMjA2LjkxODUzNzg2ODgwMTIsNDEuMzIxMTAxNzc0MTA1NzM1LDYxNC4zNTM2NDY2MzQ3ODQ1LDgzNzAuNzc4NDYwNjM3OTg2LDMxNC43OTEwODMzMjk2NTA4NiwyNDMuMDYxMDI0MzMzMDU0MTgsMTM3Ljc2MTYyNzAxMTc2NjMsMTEwLjgzNTE2NzU2OTYwNDkyLDUyLjAwMzYxNDYxNTIwMDc1LDE1LjQ4MzQ0ODE0MzE2MzIsMjE0LjQ0MjMwMjU4NTI5OTIyLDE2Ni45NjQ5NjQ1OTI3OTU4NywzMi42NzUyNzA0NjQ5MzI3OCwxMDAuMDIxNDU1NjA1NzAzODgsODYuMjA3NTk3NjUxOTkyNTksNjAxLjU0OTU2NTczMzEzNzUsNDI2LjkwNTk4OTM1NDEyMjE0LDM2LjAzMDM5NzM2MTU2NzgsMTAyLjc1ODkzMDIzNDA2MzM5LDU2LjU4NTQ5NTA3MjU3MjI2LDgwLjI3MDY2MDQ1MTI2OTA4LDU4LjczNzI4NzYyOTg4NTQxLDYuMTM1NjExMjI1MDYxNjE1NSwxNDkuNTY0MDI1NDYyNjE1LDkuMDgzNDc4MTgyODkxMzUsMjIuMTIyNTY2MDM1Mjc3MTYzLDEzMi4xNzA0NzM4MjEyMjIzNyw5NjQuODA0NTU4OTUzMzY3MiwxNC45NjA1NTQxNTMyMDQ3MDIsMTguMDczODQzNzczMjUzNjI1LDM0Ny44MzQ0NjM2NzAzNTcxLDI1My4yNzc1MzEwMTUxMjc3NSw0OS4zNjY4NTc3MTExOTM5NSwzNC43NzcxNTczNzU2Nzg3OSwyNjYuNjU5MjExODUwODEyMiw2NzguNTAxNjY2NjEyNzMxLDEyNS4yOTYyODE3MjIxNjI4OSw5Ljc4ODM2MDQ0MDE2MDA3NSwxMzQuOTk4NjEzMDY0NDM0NzIsNzcuNjM3MDQwNTAwNTA5MywyNi4zMDM4ODQyODIwMzMwOTYsMTY1LjQ4NTY0MzIxNDgzNTE0LDYzLjMyNTQxNDU0MDQ4NDY1LDgyLjY2NjkxMTA4MTE3Nzk3LDgxLjg5MDg5MzQ2NzkwNDczLDc0LjYzMzE3ODM3MjM4MTc0LDUuMDQ4MTk1NzcxNjI5MjEKKzIsV2VkIDI2IEphbiAxMSwwLjk0NTIxNzc2OTM4MDAyMzMsODQuODM3NTI2NTMxNDAwMjQsNTAuMjcyMDgzMDI4ODU2MzMsNDUuMDA2MjE1MDA0OTYwNiwyMDYuOTE4NTM3ODY4ODAxMiw0MS4zMjExMDE3NzQxMDU3MzUsNjE0LjM1MzY0NjYzNDc4NDUsODM3MC43Nzg0NjA2Mzc5ODYsMzE0Ljc5MTA4MzMyOTY1MDg2LDI0My4wNjEwMjQzMzMwNTQxOCwxMzcuNzYxNjI3MDExNzY2MywxMTAuODM1MTY3NTY5NjA0OTIsNTIuMDAzNjE0NjE1MjAwNzUsMTUuNDgzNDQ4MTQzMTYzMiwyMTQuNDQyMzAyNTg1Mjk5MjIsMTY2Ljk2NDk2NDU5Mjc5NTg3LDMyLjY3NTI3MDQ2NDkzMjc4LDEwMC4wMjE0NTU2MDU3MDM4OCw4Ni4yMDc1OTc2NTE5OTI1OSw2MDEuNTQ5NTY1NzMzMTM3NSw0MjYuOTA1OTg5MzU0MTIyMTQsMzYuMDMwMzk3MzYxNTY3OCwxMDIuNzU4OTMwMjM0MDYzMzksNTYuNTg1NDk1MDcyNTcyMjYsODAuMjcwNjYwNDUxMjY5MDgsNTguNzM3Mjg3NjI5ODg1NDEsNi4xMzU2MTEyMjUwNjE2MTU1LDE0OS41NjQwMjU0NjI2MTUsOS4wODM0NzgxODI4OTEzNSwyMi4xMjI1NjYwMzUyNzcxNjMsMTMyLjE3MDQ3MzgyMTIyMjM3LDk2NC44MDQ1NTg5NTMzNjcyLDE0Ljk2MDU1NDE1MzIwNDcwMiwxOC4wNzM4NDM3NzMyNTM2MjUsMzQ3LjgzNDQ2MzY3MDM1NzEsMjUzLjI3NzUzMTAxNTEyNzc1LDQ5LjM2Njg1NzcxMTE5Mzk1LDM0Ljc3NzE1NzM3NTY3ODc5LDI2Ni42NTkyMTE4NTA4MTIyLDY3OC41MDE2NjY2MTI3MzEsMTI1LjI5NjI4MTcyMjE2Mjg5LDkuNzg4MzYwNDQwMTYwMDc1LDEzNC45OTg2MTMwNjQ0MzQ3Miw3Ny42MzcwNDA1MDA1MDkzLDI2LjMwMzg4NDI4MjAzMzA5NiwxNjUuNDg1NjQzMjE0ODM1MTQsNjMuMzI1NDE0NTQwNDg0NjUsODIuNjY2OTExMDgxMTc3OTcsODEuODkwODkzNDY3OTA0NzMsNzQuNjMzMTc4MzcyMzgxNzQsNS4wNDgxOTU3NzE2MjkyMQorMyxUaHUgMjcgSmFuIDExLDAuOTQ1MjE3NzY5MzgwMDIzMyw4NC44Mzc1MjY1MzE0MDAyNCw1MC4yNzIwODMwMjg4NTYzMyw0NS4wMDYyMTUwMDQ5NjA2LDIwNi45MTg1Mzc4Njg4MDEyLDQxLjMyMTEwMTc3NDEwNTczNSw2MTQuMzUzNjQ2NjM0Nzg0NSw4MzcwLjc3ODQ2MDYzNzk4NiwzMTQuNzkxMDgzMzI5NjUwODYsMjQzLjA2MTAyNDMzMzA1NDE4LDEzNy43NjE2MjcwMTE3NjYzLDExMC44MzUxNjc1Njk2MDQ5Miw1Mi4wMDM2MTQ2MTUyMDA3NSwxNS40ODM0NDgxNDMxNjMyLDIxNC40NDIzMDI1ODUyOTkyMiwxNjYuOTY0OTY0NTkyNzk1ODcsMzIuNjc1MjcwNDY0OTMyNzgsMTAwLjAyMTQ1NTYwNTcwMzg4LDg2LjIwNzU5NzY1MTk5MjU5LDYwMS41NDk1NjU3MzMxMzc1LDQyNi45MDU5ODkzNTQxMjIxNCwzNi4wMzAzOTczNjE1Njc4LDEwMi43NTg5MzAyMzQwNjMzOSw1Ni41ODU0OTUwNzI1NzIyNiw4MC4yNzA2NjA0NTEyNjkwOCw1OC43MzcyODc2Mjk4ODU0MSw2LjEzNTYxMTIyNTA2MTYxNTUsMTQ5LjU2NDAyNTQ2MjYxNSw5LjA4MzQ3ODE4Mjg5MTM1LDIyLjEyMjU2NjAzNTI3NzE2MywxMzIuMTcwNDczODIxMjIyMzcsOTY0LjgwNDU1ODk1MzM2NzIsMTQuOTYwNTU0MTUzMjA0NzAyLDE4LjA3Mzg0Mzc3MzI1MzYyNSwzNDcuODM0NDYzNjcwMzU3MSwyNTMuMjc3NTMxMDE1MTI3NzUsNDkuMzY2ODU3NzExMTkzOTUsMzQuNzc3MTU3Mzc1Njc4NzksMjY2LjY1OTIxMTg1MDgxMjIsNjc4LjUwMTY2NjYxMjczMSwxMjUuMjk2MjgxNzIyMTYyODksOS43ODgzNjA0NDAxNjAwNzUsMTM0Ljk5ODYxMzA2NDQzNDcyLDc3LjYzNzA0MDUwMDUwOTMsMjYuMzAzODg0MjgyMDMzMDk2LDE2NS40ODU2NDMyMTQ4MzUxNCw2My4zMjU0MTQ1NDA0ODQ2NSw4Mi42NjY5MTEwODExNzc5Nyw4MS44OTA4OTM0Njc5MDQ3Myw3NC42MzMxNzgzNzIzODE3NCw1LjA0ODE5NTc3MTYyOTIxCis0LEZyaSAyOCBKYW4gMTEsMC45NDUyMTc3NjkzODAwMjMzLDg0LjgzNzUyNjUzMTQwMDI0LDUwLjI3MjA4MzAyODg1NjMzLDQ1LjAwNjIxNTAwNDk2MDYsMjA2LjkxODUzNzg2ODgwMTIsNDEuMzIxMTAxNzc0MTA1NzM1LDYxNC4zNTM2NDY2MzQ3ODQ1LDgzNzAuNzc4NDYwNjM3OTg2LDMxNC43OTEwODMzMjk2NTA4NiwyNDMuMDYxMDI0MzMzMDU0MTgsMTM3Ljc2MTYyNzAxMTc2NjMsMTEwLjgzNTE2NzU2OTYwNDkyLDUyLjAwMzYxNDYxNTIwMDc1LDE1LjQ4MzQ0ODE0MzE2MzIsMjE0LjQ0MjMwMjU4NTI5OTIyLDE2Ni45NjQ5NjQ1OTI3OTU4NywzMi42NzUyNzA0NjQ5MzI3OCwxMDAuMDIxNDU1NjA1NzAzODgsODYuMjA3NTk3NjUxOTkyNTksNjAxLjU0OTU2NTczMzEzNzUsNDI2LjkwNTk4OTM1NDEyMjE0LDM2LjAzMDM5NzM2MTU2NzgsMTAyLjc1ODkzMDIzNDA2MzM5LDU2LjU4NTQ5NTA3MjU3MjI2LDgwLjI3MDY2MDQ1MTI2OTA4LDU4LjczNzI4NzYyOTg4NTQxLDYuMTM1NjExMjI1MDYxNjE1NSwxNDkuNTY0MDI1NDYyNjE1LDkuMDgzNDc4MTgyODkxMzUsMjIuMTIyNTY2MDM1Mjc3MTYzLDEzMi4xNzA0NzM4MjEyMjIzNyw5NjQuODA0NTU4OTUzMzY3MiwxNC45NjA1NTQxNTMyMDQ3MDIsMTguMDczODQzNzczMjUzNjI1LDM0Ny44MzQ0NjM2NzAzNTcxLDI1My4yNzc1MzEwMTUxMjc3NSw0OS4zNjY4NTc3MTExOTM5NSwzNC43NzcxNTczNzU2Nzg3OSwyNjYuNjU5MjExODUwODEyMiw2NzguNTAxNjY2NjEyNzMxLDEyNS4yOTYyODE3MjIxNjI4OSw5Ljc4ODM2MDQ0MDE2MDA3NSwxMzQuOTk4NjEzMDY0NDM0NzIsNzcuNjM3MDQwNTAwNTA5MywyNi4zMDM4ODQyODIwMzMwOTYsMTY1LjQ4NTY0MzIxNDgzNTE0LDYzLjMyNTQxNDU0MDQ4NDY1LDgyLjY2NjkxMTA4MTE3Nzk3LDgxLjg5MDg5MzQ2NzkwNDczLDc0LjYzMzE3ODM3MjM4MTc0LDUuMDQ4MTk1NzcxNjI5MjEKKzUsU2F0IDI5IEphbiAxMSwwLjk0NTIxNzc2OTM4MDAyMzMsODQuODM3NTI2NTMxNDAwMjQsNTAuMjcyMDgzMDI4ODU2MzMsNDUuMDA2MjE1MDA0OTYwNiwyMDYuOTE4NTM3ODY4ODAxMiw0MS4zMjExMDE3NzQxMDU3MzUsNjE0LjM1MzY0NjYzNDc4NDUsODM3MC43Nzg0NjA2Mzc5ODYsMzE0Ljc5MTA4MzMyOTY1MDg2LDI0My4wNjEwMjQzMzMwNTQxOCwxMzcuNzYxNjI3MDExNzY2MywxMTAuODM1MTY3NTY5NjA0OTIsNTIuMDAzNjE0NjE1MjAwNzUsMTUuNDgzNDQ4MTQzMTYzMiwyMTQuNDQyMzAyNTg1Mjk5MjIsMTY2Ljk2NDk2NDU5Mjc5NTg3LDMyLjY3NTI3MDQ2NDkzMjc4LDEwMC4wMjE0NTU2MDU3MDM4OCw4Ni4yMDc1OTc2NTE5OTI1OSw2MDEuNTQ5NTY1NzMzMTM3NSw0MjYuOTA1OTg5MzU0MTIyMTQsMzYuMDMwMzk3MzYxNTY3OCwxMDIuNzU4OTMwMjM0MDYzMzksNTYuNTg1NDk1MDcyNTcyMjYsODAuMjcwNjYwNDUxMjY5MDgsNTguNzM3Mjg3NjI5ODg1NDEsNi4xMzU2MTEyMjUwNjE2MTU1LDE0OS41NjQwMjU0NjI2MTUsOS4wODM0NzgxODI4OTEzNSwyMi4xMjI1NjYwMzUyNzcxNjMsMTMyLjE3MDQ3MzgyMTIyMjM3LDk2NC44MDQ1NTg5NTMzNjcyLDE0Ljk2MDU1NDE1MzIwNDcwMiwxOC4wNzM4NDM3NzMyNTM2MjUsMzQ3LjgzNDQ2MzY3MDM1NzEsMjUzLjI3NzUzMTAxNTEyNzc1LDQ5LjM2Njg1NzcxMTE5Mzk1LDM0Ljc3NzE1NzM3NTY3ODc5LDI2Ni42NTkyMTE4NTA4MTIyLDY3OC41MDE2NjY2MTI3MzEsMTI1LjI5NjI4MTcyMjE2Mjg5LDkuNzg4MzYwNDQwMTYwMDc1LDEzNC45OTg2MTMwNjQ0MzQ3Miw3Ny42MzcwNDA1MDA1MDkzLDI2LjMwMzg4NDI4MjAzMzA5NiwxNjUuNDg1NjQzMjE0ODM1MTQsNjMuMzI1NDE0NTQwNDg0NjUsODIuNjY2OTExMDgxMTc3OTcsODEuODkwODkzNDY3OTA0NzMsNzQuNjMzMTc4MzcyMzgxNzQsNS4wNDgxOTU3NzE2MjkyMQorNixTdW4gMzAgSmFuIDExLDAuOTQ1MjE3NzY5MzgwMDIzMyw4NC44Mzc1MjY1MzE0MDAyNCw1MC4yNzIwODMwMjg4NTYzMyw0NS4wMDYyMTUwMDQ5NjA2LDIwNi45MTg1Mzc4Njg4MDEyLDQxLjMyMTEwMTc3NDEwNTczNSw2MTQuMzUzNjQ2NjM0Nzg0NSw4MzcwLjc3ODQ2MDYzNzk4NiwzMTQuNzkxMDgzMzI5NjUwODYsMjQzLjA2MTAyNDMzMzA1NDE4LDEzNy43NjE2MjcwMTE3NjYzLDExMC44MzUxNjc1Njk2MDQ5Miw1Mi4wMDM2MTQ2MTUyMDA3NSwxNS40ODM0NDgxNDMxNjMyLDIxNC40NDIzMDI1ODUyOTkyMiwxNjYuOTY0OTY0NTkyNzk1ODcsMzIuNjc1MjcwNDY0OTMyNzgsMTAwLjAyMTQ1NTYwNTcwMzg4LDg2LjIwNzU5NzY1MTk5MjU5LDYwMS41NDk1NjU3MzMxMzc1LDQyNi45MDU5ODkzNTQxMjIxNCwzNi4wMzAzOTczNjE1Njc4LDEwMi43NTg5MzAyMzQwNjMzOSw1Ni41ODU0OTUwNzI1NzIyNiw4MC4yNzA2NjA0NTEyNjkwOCw1OC43MzcyODc2Mjk4ODU0MSw2LjEzNTYxMTIyNTA2MTYxNTUsMTQ5LjU2NDAyNTQ2MjYxNSw5LjA4MzQ3ODE4Mjg5MTM1LDIyLjEyMjU2NjAzNTI3NzE2MywxMzIuMTcwNDczODIxMjIyMzcsOTY0LjgwNDU1ODk1MzM2NzIsMTQuOTYwNTU0MTUzMjA0NzAyLDE4LjA3Mzg0Mzc3MzI1MzYyNSwzNDcuODM0NDYzNjcwMzU3MSwyNTMuMjc3NTMxMDE1MTI3NzUsNDkuMzY2ODU3NzExMTkzOTUsMzQuNzc3MTU3Mzc1Njc4NzksMjY2LjY1OTIxMTg1MDgxMjIsNjc4LjUwMTY2NjYxMjczMSwxMjUuMjk2MjgxNzIyMTYyODksOS43ODgzNjA0NDAxNjAwNzUsMTM0Ljk5ODYxMzA2NDQzNDcyLDc3LjYzNzA0MDUwMDUwOTMsMjYuMzAzODg0MjgyMDMzMDk2LDE2NS40ODU2NDMyMTQ4MzUxNCw2My4zMjU0MTQ1NDA0ODQ2NSw4Mi42NjY5MTEwODExNzc5Nyw4MS44OTA4OTM0Njc5MDQ3Myw3NC42MzMxNzgzNzIzODE3NCw1LjA0ODE5NTc3MTYyOTIxCis3LE1vbiAzMSBKYW4gMTEsMC45NDUyMTc3NjkzODAwMjMzLDg0LjgzNzUyNjUzMTQwMDI0LDUwLjI3MjA4MzAyODg1NjMzLDQ1LjAwNjIxNTAwNDk2MDYsMjA2LjkxODUzNzg2ODgwMTIsNDEuMzIxMTAxNzc0MTA1NzM1LDYxNC4zNTM2NDY2MzQ3ODQ1LDgzNzAuNzc4NDYwNjM3OTg2LDMxNC43OTEwODMzMjk2NTA4NiwyNDMuMDYxMDI0MzMzMDU0MTgsMTM3Ljc2MTYyNzAxMTc2NjMsMTEwLjgzNTE2NzU2OTYwNDkyLDUyLjAwMzYxNDYxNTIwMDc1LDE1LjQ4MzQ0ODE0MzE2MzIsMjE0LjQ0MjMwMjU4NTI5OTIyLDE2Ni45NjQ5NjQ1OTI3OTU4NywzMi42NzUyNzA0NjQ5MzI3OCwxMDAuMDIxNDU1NjA1NzAzODgsODYuMjA3NTk3NjUxOTkyNTksNjAxLjU0OTU2NTczMzEzNzUsNDI2LjkwNTk4OTM1NDEyMjE0LDM2LjAzMDM5NzM2MTU2NzgsMTAyLjc1ODkzMDIzNDA2MzM5LDU2LjU4NTQ5NTA3MjU3MjI2LDgwLjI3MDY2MDQ1MTI2OTA4LDU4LjczNzI4NzYyOTg4NTQxLDYuMTM1NjExMjI1MDYxNjE1NSwxNDkuNTY0MDI1NDYyNjE1LDkuMDgzNDc4MTgyODkxMzUsMjIuMTIyNTY2MDM1Mjc3MTYzLDEzMi4xNzA0NzM4MjEyMjIzNyw5NjQuODA0NTU4OTUzMzY3MiwxNC45NjA1NTQxNTMyMDQ3MDIsMTguMDczODQzNzczMjUzNjI1LDM0Ny44MzQ0NjM2NzAzNTcxLDI1My4yNzc1MzEwMTUxMjc3NSw0OS4zNjY4NTc3MTExOTM5NSwzNC43NzcxNTczNzU2Nzg3OSwyNjYuNjU5MjExODUwODEyMiw2NzguNTAxNjY2NjEyNzMxLDEyNS4yOTYyODE3MjIxNjI4OSw5Ljc4ODM2MDQ0MDE2MDA3NSwxMzQuOTk4NjEzMDY0NDM0NzIsNzcuNjM3MDQwNTAwNTA5MywyNi4zMDM4ODQyODIwMzMwOTYsMTY1LjQ4NTY0MzIxNDgzNTE0LDYzLjMyNTQxNDU0MDQ4NDY1LDgyLjY2NjkxMTA4MTE3Nzk3LDgxLjg5MDg5MzQ2NzkwNDczLDc0LjYzMzE3ODM3MjM4MTc0LDUuMDQ4MTk1NzcxNjI5MjEKKzgsVHVlIDEgRmViIDExLDAuOTQ1MjE3NzY5MzgwMDIzMyw4NC44Mzc1MjY1MzE0MDAyNCw1MC4yNzIwODMwMjg4NTYzMyw0NS4wMDYyMTUwMDQ5NjA2LDIwNi45MTg1Mzc4Njg4MDEyLDQxLjMyMTEwMTc3NDEwNTczNSw2MTQuMzUzNjQ2NjM0Nzg0NSw4MzcwLjc3ODQ2MDYzNzk4NiwzMTQuNzkxMDgzMzI5NjUwODYsMjQzLjA2MTAyNDMzMzA1NDE4LDEzNy43NjE2MjcwMTE3NjYzLDExMC44MzUxNjc1Njk2MDQ5Miw1Mi4wMDM2MTQ2MTUyMDA3NSwxNS40ODM0NDgxNDMxNjMyLDIxNC40NDIzMDI1ODUyOTkyMiwxNjYuOTY0OTY0NTkyNzk1ODcsMzIuNjc1MjcwNDY0OTMyNzgsMTAwLjAyMTQ1NTYwNTcwMzg4LDg2LjIwNzU5NzY1MTk5MjU5LDYwMS41NDk1NjU3MzMxMzc1LDQyNi45MDU5ODkzNTQxMjIxNCwzNi4wMzAzOTczNjE1Njc4LDEwMi43NTg5MzAyMzQwNjMzOSw1Ni41ODU0OTUwNzI1NzIyNiw4MC4yNzA2NjA0NTEyNjkwOCw1OC43MzcyODc2Mjk4ODU0MSw2LjEzNTYxMTIyNTA2MTYxNTUsMTQ5LjU2NDAyNTQ2MjYxNSw5LjA4MzQ3ODE4Mjg5MTM1LDIyLjEyMjU2NjAzNTI3NzE2MywxMzIuMTcwNDczODIxMjIyMzcsOTY0LjgwNDU1ODk1MzM2NzIsMTQuOTYwNTU0MTUzMjA0NzAyLDE4LjA3Mzg0Mzc3MzI1MzYyNSwzNDcuODM0NDYzNjcwMzU3MSwyNTMuMjc3NTMxMDE1MTI3NzUsNDkuMzY2ODU3NzExMTkzOTUsMzQuNzc3MTU3Mzc1Njc4NzksMjY2LjY1OTIxMTg1MDgxMjIsNjc4LjUwMTY2NjYxMjczMSwxMjUuMjk2MjgxNzIyMTYyODksOS43ODgzNjA0NDAxNjAwNzUsMTM0Ljk5ODYxMzA2NDQzNDcyLDc3LjYzNzA0MDUwMDUwOTMsMjYuMzAzODg0MjgyMDMzMDk2LDE2NS40ODU2NDMyMTQ4MzUxNCw2My4zMjU0MTQ1NDA0ODQ2NSw4Mi42NjY5MTEwODExNzc5Nyw4MS44OTA4OTM0Njc5MDQ3Myw3NC42MzMxNzgzNzIzODE3NCw1LjA0ODE5NTc3MTYyOTIxCis5LFdlZCAyIEZlYiAxMSwwLjk0NTIxNzc2OTM4MDAyMzMsODQuODM3NTI2NTMxNDAwMjQsNTAuMjcyMDgzMDI4ODU2MzMsNDUuMDA2MjE1MDA0OTYwNiwyMDYuOTE4NTM3ODY4ODAxMiw0MS4zMjExMDE3NzQxMDU3MzUsNjE0LjM1MzY0NjYzNDc4NDUsODM3MC43Nzg0NjA2Mzc5ODYsMzE0Ljc5MTA4MzMyOTY1MDg2LDI0My4wNjEwMjQzMzMwNTQxOCwxMzcuNzYxNjI3MDExNzY2MywxMTAuODM1MTY3NTY5NjA0OTIsNTIuMDAzNjE0NjE1MjAwNzUsMTUuNDgzNDQ4MTQzMTYzMiwyMTQuNDQyMzAyNTg1Mjk5MjIsMTY2Ljk2NDk2NDU5Mjc5NTg3LDMyLjY3NTI3MDQ2NDkzMjc4LDEwMC4wMjE0NTU2MDU3MDM4OCw4Ni4yMDc1OTc2NTE5OTI1OSw2MDEuNTQ5NTY1NzMzMTM3NSw0MjYuOTA1OTg5MzU0MTIyMTQsMzYuMDMwMzk3MzYxNTY3OCwxMDIuNzU4OTMwMjM0MDYzMzksNTYuNTg1NDk1MDcyNTcyMjYsODAuMjcwNjYwNDUxMjY5MDgsNTguNzM3Mjg3NjI5ODg1NDEsNi4xMzU2MTEyMjUwNjE2MTU1LDE0OS41NjQwMjU0NjI2MTUsOS4wODM0NzgxODI4OTEzNSwyMi4xMjI1NjYwMzUyNzcxNjMsMTMyLjE3MDQ3MzgyMTIyMjM3LDk2NC44MDQ1NTg5NTMzNjcyLDE0Ljk2MDU1NDE1MzIwNDcwMiwxOC4wNzM4NDM3NzMyNTM2MjUsMzQ3LjgzNDQ2MzY3MDM1NzEsMjUzLjI3NzUzMTAxNTEyNzc1LDQ5LjM2Njg1NzcxMTE5Mzk1LDM0Ljc3NzE1NzM3NTY3ODc5LDI2Ni42NTkyMTE4NTA4MTIyLDY3OC41MDE2NjY2MTI3MzEsMTI1LjI5NjI4MTcyMjE2Mjg5LDkuNzg4MzYwNDQwMTYwMDc1LDEzNC45OTg2MTMwNjQ0MzQ3Miw3Ny42MzcwNDA1MDA1MDkzLDI2LjMwMzg4NDI4MjAzMzA5NiwxNjUuNDg1NjQzMjE0ODM1MTQsNjMuMzI1NDE0NTQwNDg0NjUsODIuNjY2OTExMDgxMTc3OTcsODEuODkwODkzNDY3OTA0NzMsNzQuNjMzMTc4MzcyMzgxNzQsNS4wNDgxOTU3NzE2MjkyMQorMTAsVGh1IDMgRmViIDExLDAuOTQ1MjE3NzY5MzgwMDIzMyw4NC44Mzc1MjY1MzE0MDAyNCw1MC4yNzIwODMwMjg4NTYzMyw0NS4wMDYyMTUwMDQ5NjA2LDIwNi45MTg1Mzc4Njg4MDEyLDQxLjMyMTEwMTc3NDEwNTczNSw2MTQuMzUzNjQ2NjM0Nzg0NSw4MzcwLjc3ODQ2MDYzNzk4NiwzMTQuNzkxMDgzMzI5NjUwODYsMjQzLjA2MTAyNDMzMzA1NDE4LDEzNy43NjE2MjcwMTE3NjYzLDExMC44MzUxNjc1Njk2MDQ5Miw1Mi4wMDM2MTQ2MTUyMDA3NSwxNS40ODM0NDgxNDMxNjMyLDIxNC40NDIzMDI1ODUyOTkyMiwxNjYuOTY0OTY0NTkyNzk1ODcsMzIuNjc1MjcwNDY0OTMyNzgsMTAwLjAyMTQ1NTYwNTcwMzg4LDg2LjIwNzU5NzY1MTk5MjU5LDYwMS41NDk1NjU3MzMxMzc1LDQyNi45MDU5ODkzNTQxMjIxNCwzNi4wMzAzOTczNjE1Njc4LDEwMi43NTg5MzAyMzQwNjMzOSw1Ni41ODU0OTUwNzI1NzIyNiw4MC4yNzA2NjA0NTEyNjkwOCw1OC43MzcyODc2Mjk4ODU0MSw2LjEzNTYxMTIyNTA2MTYxNTUsMTQ5LjU2NDAyNTQ2MjYxNSw5LjA4MzQ3ODE4Mjg5MTM1LDIyLjEyMjU2NjAzNTI3NzE2MywxMzIuMTcwNDczODIxMjIyMzcsOTY0LjgwNDU1ODk1MzM2NzIsMTQuOTYwNTU0MTUzMjA0NzAyLDE4LjA3Mzg0Mzc3MzI1MzYyNSwzNDcuODM0NDYzNjcwMzU3MSwyNTMuMjc3NTMxMDE1MTI3NzUsNDkuMzY2ODU3NzExMTkzOTUsMzQuNzc3MTU3Mzc1Njc4NzksMjY2LjY1OTIxMTg1MDgxMjIsNjc4LjUwMTY2NjYxMjczMSwxMjUuMjk2MjgxNzIyMTYyODksOS43ODgzNjA0NDAxNjAwNzUsMTM0Ljk5ODYxMzA2NDQzNDcyLDc3LjYzNzA0MDUwMDUwOTMsMjYuMzAzODg0MjgyMDMzMDk2LDE2NS40ODU2NDMyMTQ4MzUxNCw2My4zMjU0MTQ1NDA0ODQ2NSw4Mi42NjY5MTEwODExNzc5Nyw4MS44OTA4OTM0Njc5MDQ3Myw3NC42MzMxNzgzNzIzODE3NCw1LjA0ODE5NTc3MTYyOTIxCisxMSxGcmkgNCBGZWIgMTEsMC45NDUyMTc3NjkzODAwMjMzLDg0LjgzNzUyNjUzMTQwMDI0LDUwLjI3MjA4MzAyODg1NjMzLDQ1LjAwNjIxNTAwNDk2MDYsMjA2LjkxODUzNzg2ODgwMTIsNDEuMzIxMTAxNzc0MTA1NzM1LDYxNC4zNTM2NDY2MzQ3ODQ1LDgzNzAuNzc4NDYwNjM3OTg2LDMxNC43OTEwODMzMjk2NTA4NiwyNDMuMDYxMDI0MzMzMDU0MTgsMTM3Ljc2MTYyNzAxMTc2NjMsMTEwLjgzNTE2NzU2OTYwNDkyLDUyLjAwMzYxNDYxNTIwMDc1LDE1LjQ4MzQ0ODE0MzE2MzIsMjE0LjQ0MjMwMjU4NTI5OTIyLDE2Ni45NjQ5NjQ1OTI3OTU4NywzMi42NzUyNzA0NjQ5MzI3OCwxMDAuMDIxNDU1NjA1NzAzODgsODYuMjA3NTk3NjUxOTkyNTksNjAxLjU0OTU2NTczMzEzNzUsNDI2LjkwNTk4OTM1NDEyMjE0LDM2LjAzMDM5NzM2MTU2NzgsMTAyLjc1ODkzMDIzNDA2MzM5LDU2LjU4NTQ5NTA3MjU3MjI2LDgwLjI3MDY2MDQ1MTI2OTA4LDU4LjczNzI4NzYyOTg4NTQxLDYuMTM1NjExMjI1MDYxNjE1NSwxNDkuNTY0MDI1NDYyNjE1LDkuMDgzNDc4MTgyODkxMzUsMjIuMTIyNTY2MDM1Mjc3MTYzLDEzMi4xNzA0NzM4MjEyMjIzNyw5NjQuODA0NTU4OTUzMzY3MiwxNC45NjA1NTQxNTMyMDQ3MDIsMTguMDczODQzNzczMjUzNjI1LDM0Ny44MzQ0NjM2NzAzNTcxLDI1My4yNzc1MzEwMTUxMjc3NSw0OS4zNjY4NTc3MTExOTM5NSwzNC43NzcxNTczNzU2Nzg3OSwyNjYuNjU5MjExODUwODEyMiw2NzguNTAxNjY2NjEyNzMxLDEyNS4yOTYyODE3MjIxNjI4OSw5Ljc4ODM2MDQ0MDE2MDA3NSwxMzQuOTk4NjEzMDY0NDM0NzIsNzcuNjM3MDQwNTAwNTA5MywyNi4zMDM4ODQyODIwMzMwOTYsMTY1LjQ4NTY0MzIxNDgzNTE0LDYzLjMyNTQxNDU0MDQ4NDY1LDgyLjY2NjkxMTA4MTE3Nzk3LDgxLjg5MDg5MzQ2NzkwNDczLDc0LjYzMzE3ODM3MjM4MTc0LDUuMDQ4MTk1NzcxNjI5MjEKKzEyLFNhdCA1IEZlYiAxMSwwLjk0NTIxNzc2OTM4MDAyMzMsODQuODM3NTI2NTMxNDAwMjQsNTAuMjcyMDgzMDI4ODU2MzMsNDUuMDA2MjE1MDA0OTYwNiwyMDYuOTE4NTM3ODY4ODAxMiw0MS4zMjExMDE3NzQxMDU3MzUsNjE0LjM1MzY0NjYzNDc4NDUsODM3MC43Nzg0NjA2Mzc5ODYsMzE0Ljc5MTA4MzMyOTY1MDg2LDI0My4wNjEwMjQzMzMwNTQxOCwxMzcuNzYxNjI3MDExNzY2MywxMTAuODM1MTY3NTY5NjA0OTIsNTIuMDAzNjE0NjE1MjAwNzUsMTUuNDgzNDQ4MTQzMTYzMiwyMTQuNDQyMzAyNTg1Mjk5MjIsMTY2Ljk2NDk2NDU5Mjc5NTg3LDMyLjY3NTI3MDQ2NDkzMjc4LDEwMC4wMjE0NTU2MDU3MDM4OCw4Ni4yMDc1OTc2NTE5OTI1OSw2MDEuNTQ5NTY1NzMzMTM3NSw0MjYuOTA1OTg5MzU0MTIyMTQsMzYuMDMwMzk3MzYxNTY3OCwxMDIuNzU4OTMwMjM0MDYzMzksNTYuNTg1NDk1MDcyNTcyMjYsODAuMjcwNjYwNDUxMjY5MDgsNTguNzM3Mjg3NjI5ODg1NDEsNi4xMzU2MTEyMjUwNjE2MTU1LDE0OS41NjQwMjU0NjI2MTUsOS4wODM0NzgxODI4OTEzNSwyMi4xMjI1NjYwMzUyNzcxNjMsMTMyLjE3MDQ3MzgyMTIyMjM3LDk2NC44MDQ1NTg5NTMzNjcyLDE0Ljk2MDU1NDE1MzIwNDcwMiwxOC4wNzM4NDM3NzMyNTM2MjUsMzQ3LjgzNDQ2MzY3MDM1NzEsMjUzLjI3NzUzMTAxNTEyNzc1LDQ5LjM2Njg1NzcxMTE5Mzk1LDM0Ljc3NzE1NzM3NTY3ODc5LDI2Ni42NTkyMTE4NTA4MTIyLDY3OC41MDE2NjY2MTI3MzEsMTI1LjI5NjI4MTcyMjE2Mjg5LDkuNzg4MzYwNDQwMTYwMDc1LDEzNC45OTg2MTMwNjQ0MzQ3Miw3Ny42MzcwNDA1MDA1MDkzLDI2LjMwMzg4NDI4MjAzMzA5NiwxNjUuNDg1NjQzMjE0ODM1MTQsNjMuMzI1NDE0NTQwNDg0NjUsODIuNjY2OTExMDgxMTc3OTcsODEuODkwODkzNDY3OTA0NzMsNzQuNjMzMTc4MzcyMzgxNzQsNS4wNDgxOTU3NzE2MjkyMQorMTMsU3VuIDYgRmViIDExLDAuOTQ1MjE3NzY5MzgwMDIzMyw4NC44Mzc1MjY1MzE0MDAyNCw1MC4yNzIwODMwMjg4NTYzMyw0NS4wMDYyMTUwMDQ5NjA2LDIwNi45MTg1Mzc4Njg4MDEyLDQxLjMyMTEwMTc3NDEwNTczNSw2MTQuMzUzNjQ2NjM0Nzg0NSw4MzcwLjc3ODQ2MDYzNzk4NiwzMTQuNzkxMDgzMzI5NjUwODYsMjQzLjA2MTAyNDMzMzA1NDE4LDEzNy43NjE2MjcwMTE3NjYzLDExMC44MzUxNjc1Njk2MDQ5Miw1Mi4wMDM2MTQ2MTUyMDA3NSwxNS40ODM0NDgxNDMxNjMyLDIxNC40NDIzMDI1ODUyOTkyMiwxNjYuOTY0OTY0NTkyNzk1ODcsMzIuNjc1MjcwNDY0OTMyNzgsMTAwLjAyMTQ1NTYwNTcwMzg4LDg2LjIwNzU5NzY1MTk5MjU5LDYwMS41NDk1NjU3MzMxMzc1LDQyNi45MDU5ODkzNTQxMjIxNCwzNi4wMzAzOTczNjE1Njc4LDEwMi43NTg5MzAyMzQwNjMzOSw1Ni41ODU0OTUwNzI1NzIyNiw4MC4yNzA2NjA0NTEyNjkwOCw1OC43MzcyODc2Mjk4ODU0MSw2LjEzNTYxMTIyNTA2MTYxNTUsMTQ5LjU2NDAyNTQ2MjYxNSw5LjA4MzQ3ODE4Mjg5MTM1LDIyLjEyMjU2NjAzNTI3NzE2MywxMzIuMTcwNDczODIxMjIyMzcsOTY0LjgwNDU1ODk1MzM2NzIsMTQuOTYwNTU0MTUzMjA0NzAyLDE4LjA3Mzg0Mzc3MzI1MzYyNSwzNDcuODM0NDYzNjcwMzU3MSwyNTMuMjc3NTMxMDE1MTI3NzUsNDkuMzY2ODU3NzExMTkzOTUsMzQuNzc3MTU3Mzc1Njc4NzksMjY2LjY1OTIxMTg1MDgxMjIsNjc4LjUwMTY2NjYxMjczMSwxMjUuMjk2MjgxNzIyMTYyODksOS43ODgzNjA0NDAxNjAwNzUsMTM0Ljk5ODYxMzA2NDQzNDcyLDc3LjYzNzA0MDUwMDUwOTMsMjYuMzAzODg0MjgyMDMzMDk2LDE2NS40ODU2NDMyMTQ4MzUxNCw2My4zMjU0MTQ1NDA0ODQ2NSw4Mi42NjY5MTEwODExNzc5Nyw4MS44OTA4OTM0Njc5MDQ3Myw3NC42MzMxNzgzNzIzODE3NCw1LjA0ODE5NTc3MTYyOTIxCisxNCxNb24gNyBGZWIgMTEsMC45NDUyMTc3NjkzODAwMjMzLDg0LjgzNzUyNjUzMTQwMDI0LDUwLjI3MjA4MzAyODg1NjMzLDQ1LjAwNjIxNTAwNDk2MDYsMjA2LjkxODUzNzg2ODgwMTIsNDEuMzIxMTAxNzc0MTA1NzM1LDYxNC4zNTM2NDY2MzQ3ODQ1LDgzNzAuNzc4NDYwNjM3OTg2LDMxNC43OTEwODMzMjk2NTA4NiwyNDMuMDYxMDI0MzMzMDU0MTgsMTM3Ljc2MTYyNzAxMTc2NjMsMTEwLjgzNTE2NzU2OTYwNDkyLDUyLjAwMzYxNDYxNTIwMDc1LDE1LjQ4MzQ0ODE0MzE2MzIsMjE0LjQ0MjMwMjU4NTI5OTIyLDE2Ni45NjQ5NjQ1OTI3OTU4NywzMi42NzUyNzA0NjQ5MzI3OCwxMDAuMDIxNDU1NjA1NzAzODgsODYuMjA3NTk3NjUxOTkyNTksNjAxLjU0OTU2NTczMzEzNzUsNDI2LjkwNTk4OTM1NDEyMjE0LDM2LjAzMDM5NzM2MTU2NzgsMTAyLjc1ODkzMDIzNDA2MzM5LDU2LjU4NTQ5NTA3MjU3MjI2LDgwLjI3MDY2MDQ1MTI2OTA4LDU4LjczNzI4NzYyOTg4NTQxLDYuMTM1NjExMjI1MDYxNjE1NSwxNDkuNTY0MDI1NDYyNjE1LDkuMDgzNDc4MTgyODkxMzUsMjIuMTIyNTY2MDM1Mjc3MTYzLDEzMi4xNzA0NzM4MjEyMjIzNyw5NjQuODA0NTU4OTUzMzY3MiwxNC45NjA1NTQxNTMyMDQ3MDIsMTguMDczODQzNzczMjUzNjI1LDM0Ny44MzQ0NjM2NzAzNTcxLDI1My4yNzc1MzEwMTUxMjc3NSw0OS4zNjY4NTc3MTExOTM5NSwzNC43NzcxNTczNzU2Nzg3OSwyNjYuNjU5MjExODUwODEyMiw2NzguNTAxNjY2NjEyNzMxLDEyNS4yOTYyODE3MjIxNjI4OSw5Ljc4ODM2MDQ0MDE2MDA3NSwxMzQuOTk4NjEzMDY0NDM0NzIsNzcuNjM3MDQwNTAwNTA5MywyNi4zMDM4ODQyODIwMzMwOTYsMTY1LjQ4NTY0MzIxNDgzNTE0LDYzLjMyNTQxNDU0MDQ4NDY1LDgyLjY2NjkxMTA4MTE3Nzk3LDgxLjg5MDg5MzQ2NzkwNDczLDc0LjYzMzE3ODM3MjM4MTc0LDUuMDQ4MTk1NzcxNjI5MjEKKzE1LFR1ZSA4IEZlYiAxMSwwLjk0NTIxNzc2OTM4MDAyMzMsODQuODM3NTI2NTMxNDAwMjQsNTAuMjcyMDgzMDI4ODU2MzMsNDUuMDA2MjE1MDA0OTYwNiwyMDYuOTE4NTM3ODY4ODAxMiw0MS4zMjExMDE3NzQxMDU3MzUsNjE0LjM1MzY0NjYzNDc4NDUsODM3MC43Nzg0NjA2Mzc5ODYsMzE0Ljc5MTA4MzMyOTY1MDg2LDI0My4wNjEwMjQzMzMwNTQxOCwxMzcuNzYxNjI3MDExNzY2MywxMTAuODM1MTY3NTY5NjA0OTIsNTIuMDAzNjE0NjE1MjAwNzUsMTUuNDgzNDQ4MTQzMTYzMiwyMTQuNDQyMzAyNTg1Mjk5MjIsMTY2Ljk2NDk2NDU5Mjc5NTg3LDMyLjY3NTI3MDQ2NDkzMjc4LDEwMC4wMjE0NTU2MDU3MDM4OCw4Ni4yMDc1OTc2NTE5OTI1OSw2MDEuNTQ5NTY1NzMzMTM3NSw0MjYuOTA1OTg5MzU0MTIyMTQsMzYuMDMwMzk3MzYxNTY3OCwxMDIuNzU4OTMwMjM0MDYzMzksNTYuNTg1NDk1MDcyNTcyMjYsODAuMjcwNjYwNDUxMjY5MDgsNTguNzM3Mjg3NjI5ODg1NDEsNi4xMzU2MTEyMjUwNjE2MTU1LDE0OS41NjQwMjU0NjI2MTUsOS4wODM0NzgxODI4OTEzNSwyMi4xMjI1NjYwMzUyNzcxNjMsMTMyLjE3MDQ3MzgyMTIyMjM3LDk2NC44MDQ1NTg5NTMzNjcyLDE0Ljk2MDU1NDE1MzIwNDcwMiwxOC4wNzM4NDM3NzMyNTM2MjUsMzQ3LjgzNDQ2MzY3MDM1NzEsMjUzLjI3NzUzMTAxNTEyNzc1LDQ5LjM2Njg1NzcxMTE5Mzk1LDM0Ljc3NzE1NzM3NTY3ODc5LDI2Ni42NTkyMTE4NTA4MTIyLDY3OC41MDE2NjY2MTI3MzEsMTI1LjI5NjI4MTcyMjE2Mjg5LDkuNzg4MzYwNDQwMTYwMDc1LDEzNC45OTg2MTMwNjQ0MzQ3Miw3Ny42MzcwNDA1MDA1MDkzLDI2LjMwMzg4NDI4MjAzMzA5NiwxNjUuNDg1NjQzMjE0ODM1MTQsNjMuMzI1NDE0NTQwNDg0NjUsODIuNjY2OTExMDgxMTc3OTcsODEuODkwODkzNDY3OTA0NzMsNzQuNjMzMTc4MzcyMzgxNzQsNS4wNDgxOTU3NzE2MjkyMQorMTYsV2VkIDkgRmViIDExLDAuOTQ1MjE3NzY5MzgwMDIzMyw4NC44Mzc1MjY1MzE0MDAyNCw1MC4yNzIwODMwMjg4NTYzMyw0NS4wMDYyMTUwMDQ5NjA2LDIwNi45MTg1Mzc4Njg4MDEyLDQxLjMyMTEwMTc3NDEwNTczNSw2MTQuMzUzNjQ2NjM0Nzg0NSw4MzcwLjc3ODQ2MDYzNzk4NiwzMTQuNzkxMDgzMzI5NjUwODYsMjQzLjA2MTAyNDMzMzA1NDE4LDEzNy43NjE2MjcwMTE3NjYzLDExMC44MzUxNjc1Njk2MDQ5Miw1Mi4wMDM2MTQ2MTUyMDA3NSwxNS40ODM0NDgxNDMxNjMyLDIxNC40NDIzMDI1ODUyOTkyMiwxNjYuOTY0OTY0NTkyNzk1ODcsMzIuNjc1MjcwNDY0OTMyNzgsMTAwLjAyMTQ1NTYwNTcwMzg4LDg2LjIwNzU5NzY1MTk5MjU5LDYwMS41NDk1NjU3MzMxMzc1LDQyNi45MDU5ODkzNTQxMjIxNCwzNi4wMzAzOTczNjE1Njc4LDEwMi43NTg5MzAyMzQwNjMzOSw1Ni41ODU0OTUwNzI1NzIyNiw4MC4yNzA2NjA0NTEyNjkwOCw1OC43MzcyODc2Mjk4ODU0MSw2LjEzNTYxMTIyNTA2MTYxNTUsMTQ5LjU2NDAyNTQ2MjYxNSw5LjA4MzQ3ODE4Mjg5MTM1LDIyLjEyMjU2NjAzNTI3NzE2MywxMzIuMTcwNDczODIxMjIyMzcsOTY0LjgwNDU1ODk1MzM2NzIsMTQuOTYwNTU0MTUzMjA0NzAyLDE4LjA3Mzg0Mzc3MzI1MzYyNSwzNDcuODM0NDYzNjcwMzU3MSwyNTMuMjc3NTMxMDE1MTI3NzUsNDkuMzY2ODU3NzExMTkzOTUsMzQuNzc3MTU3Mzc1Njc4NzksMjY2LjY1OTIxMTg1MDgxMjIsNjc4LjUwMTY2NjYxMjczMSwxMjUuMjk2MjgxNzIyMTYyODksOS43ODgzNjA0NDAxNjAwNzUsMTM0Ljk5ODYxMzA2NDQzNDcyLDc3LjYzNzA0MDUwMDUwOTMsMjYuMzAzODg0MjgyMDMzMDk2LDE2NS40ODU2NDMyMTQ4MzUxNCw2My4zMjU0MTQ1NDA0ODQ2NSw4Mi42NjY5MTEwODExNzc5Nyw4MS44OTA4OTM0Njc5MDQ3Myw3NC42MzMxNzgzNzIzODE3NCw1LjA0ODE5NTc3MTYyOTIxCisxNyxUaHUgMTAgRmViIDExLDAuOTQ1MjE3NzY5MzgwMDIzMyw4NC44Mzc1MjY1MzE0MDAyNCw1MC4yNzIwODMwMjg4NTYzMyw0NS4wMDYyMTUwMDQ5NjA2LDIwNi45MTg1Mzc4Njg4MDEyLDQxLjMyMTEwMTc3NDEwNTczNSw2MTQuMzUzNjQ2NjM0Nzg0NSw4MzcwLjc3ODQ2MDYzNzk4NiwzMTQuNzkxMDgzMzI5NjUwODYsMjQzLjA2MTAyNDMzMzA1NDE4LDEzNy43NjE2MjcwMTE3NjYzLDExMC44MzUxNjc1Njk2MDQ5Miw1Mi4wMDM2MTQ2MTUyMDA3NSwxNS40ODM0NDgxNDMxNjMyLDIxNC40NDIzMDI1ODUyOTkyMiwxNjYuOTY0OTY0NTkyNzk1ODcsMzIuNjc1MjcwNDY0OTMyNzgsMTAwLjAyMTQ1NTYwNTcwMzg4LDg2LjIwNzU5NzY1MTk5MjU5LDYwMS41NDk1NjU3MzMxMzc1LDQyNi45MDU5ODkzNTQxMjIxNCwzNi4wMzAzOTczNjE1Njc4LDEwMi43NTg5MzAyMzQwNjMzOSw1Ni41ODU0OTUwNzI1NzIyNiw4MC4yNzA2NjA0NTEyNjkwOCw1OC43MzcyODc2Mjk4ODU0MSw2LjEzNTYxMTIyNTA2MTYxNTUsMTQ5LjU2NDAyNTQ2MjYxNSw5LjA4MzQ3ODE4Mjg5MTM1LDIyLjEyMjU2NjAzNTI3NzE2MywxMzIuMTcwNDczODIxMjIyMzcsOTY0LjgwNDU1ODk1MzM2NzIsMTQuOTYwNTU0MTUzMjA0NzAyLDE4LjA3Mzg0Mzc3MzI1MzYyNSwzNDcuODM0NDYzNjcwMzU3MSwyNTMuMjc3NTMxMDE1MTI3NzUsNDkuMzY2ODU3NzExMTkzOTUsMzQuNzc3MTU3Mzc1Njc4NzksMjY2LjY1OTIxMTg1MDgxMjIsNjc4LjUwMTY2NjYxMjczMSwxMjUuMjk2MjgxNzIyMTYyODksOS43ODgzNjA0NDAxNjAwNzUsMTM0Ljk5ODYxMzA2NDQzNDcyLDc3LjYzNzA0MDUwMDUwOTMsMjYuMzAzODg0MjgyMDMzMDk2LDE2NS40ODU2NDMyMTQ4MzUxNCw2My4zMjU0MTQ1NDA0ODQ2NSw4Mi42NjY5MTEwODExNzc5Nyw4MS44OTA4OTM0Njc5MDQ3Myw3NC42MzMxNzgzNzIzODE3NCw1LjA0ODE5NTc3MTYyOTIxCisxOCxGcmkgMTEgRmViIDExLDAuOTQ1MjE3NzY5MzgwMDIzMyw4NC44Mzc1MjY1MzE0MDAyNCw1MC4yNzIwODMwMjg4NTYzMyw0NS4wMDYyMTUwMDQ5NjA2LDIwNi45MTg1Mzc4Njg4MDEyLDQxLjMyMTEwMTc3NDEwNTczNSw2MTQuMzUzNjQ2NjM0Nzg0NSw4MzcwLjc3ODQ2MDYzNzk4NiwzMTQuNzkxMDgzMzI5NjUwODYsMjQzLjA2MTAyNDMzMzA1NDE4LDEzNy43NjE2MjcwMTE3NjYzLDExMC44MzUxNjc1Njk2MDQ5Miw1Mi4wMDM2MTQ2MTUyMDA3NSwxNS40ODM0NDgxNDMxNjMyLDIxNC40NDIzMDI1ODUyOTkyMiwxNjYuOTY0OTY0NTkyNzk1ODcsMzIuNjc1MjcwNDY0OTMyNzgsMTAwLjAyMTQ1NTYwNTcwMzg4LDg2LjIwNzU5NzY1MTk5MjU5LDYwMS41NDk1NjU3MzMxMzc1LDQyNi45MDU5ODkzNTQxMjIxNCwzNi4wMzAzOTczNjE1Njc4LDEwMi43NTg5MzAyMzQwNjMzOSw1Ni41ODU0OTUwNzI1NzIyNiw4MC4yNzA2NjA0NTEyNjkwOCw1OC43MzcyODc2Mjk4ODU0MSw2LjEzNTYxMTIyNTA2MTYxNTUsMTQ5LjU2NDAyNTQ2MjYxNSw5LjA4MzQ3ODE4Mjg5MTM1LDIyLjEyMjU2NjAzNTI3NzE2MywxMzIuMTcwNDczODIxMjIyMzcsOTY0LjgwNDU1ODk1MzM2NzIsMTQuOTYwNTU0MTUzMjA0NzAyLDE4LjA3Mzg0Mzc3MzI1MzYyNSwzNDcuODM0NDYzNjcwMzU3MSwyNTMuMjc3NTMxMDE1MTI3NzUsNDkuMzY2ODU3NzExMTkzOTUsMzQuNzc3MTU3Mzc1Njc4NzksMjY2LjY1OTIxMTg1MDgxMjIsNjc4LjUwMTY2NjYxMjczMSwxMjUuMjk2MjgxNzIyMTYyODksOS43ODgzNjA0NDAxNjAwNzUsMTM0Ljk5ODYxMzA2NDQzNDcyLDc3LjYzNzA0MDUwMDUwOTMsMjYuMzAzODg0MjgyMDMzMDk2LDE2NS40ODU2NDMyMTQ4MzUxNCw2My4zMjU0MTQ1NDA0ODQ2NSw4Mi42NjY5MTEwODExNzc5Nyw4MS44OTA4OTM0Njc5MDQ3Myw3NC42MzMxNzgzNzIzODE3NCw1LjA0ODE5NTc3MTYyOTIxCisxOSxTYXQgMTIgRmViIDExLDAuOTQ1MjE3NzY5MzgwMDIzMyw4NC44Mzc1MjY1MzE0MDAyNCw1MC4yNzIwODMwMjg4NTYzMyw0NS4wMDYyMTUwMDQ5NjA2LDIwNi45MTg1Mzc4Njg4MDEyLDQxLjMyMTEwMTc3NDEwNTczNSw2MTQuMzUzNjQ2NjM0Nzg0NSw4MzcwLjc3ODQ2MDYzNzk4NiwzMTQuNzkxMDgzMzI5NjUwODYsMjQzLjA2MTAyNDMzMzA1NDE4LDEzNy43NjE2MjcwMTE3NjYzLDExMC44MzUxNjc1Njk2MDQ5Miw1Mi4wMDM2MTQ2MTUyMDA3NSwxNS40ODM0NDgxNDMxNjMyLDIxNC40NDIzMDI1ODUyOTkyMiwxNjYuOTY0OTY0NTkyNzk1ODcsMzIuNjc1MjcwNDY0OTMyNzgsMTAwLjAyMTQ1NTYwNTcwMzg4LDg2LjIwNzU5NzY1MTk5MjU5LDYwMS41NDk1NjU3MzMxMzc1LDQyNi45MDU5ODkzNTQxMjIxNCwzNi4wMzAzOTczNjE1Njc4LDEwMi43NTg5MzAyMzQwNjMzOSw1Ni41ODU0OTUwNzI1NzIyNiw4MC4yNzA2NjA0NTEyNjkwOCw1OC43MzcyODc2Mjk4ODU0MSw2LjEzNTYxMTIyNTA2MTYxNTUsMTQ5LjU2NDAyNTQ2MjYxNSw5LjA4MzQ3ODE4Mjg5MTM1LDIyLjEyMjU2NjAzNTI3NzE2MywxMzIuMTcwNDczODIxMjIyMzcsOTY0LjgwNDU1ODk1MzM2NzIsMTQuOTYwNTU0MTUzMjA0NzAyLDE4LjA3Mzg0Mzc3MzI1MzYyNSwzNDcuODM0NDYzNjcwMzU3MSwyNTMuMjc3NTMxMDE1MTI3NzUsNDkuMzY2ODU3NzExMTkzOTUsMzQuNzc3MTU3Mzc1Njc4NzksMjY2LjY1OTIxMTg1MDgxMjIsNjc4LjUwMTY2NjYxMjczMSwxMjUuMjk2MjgxNzIyMTYyODksOS43ODgzNjA0NDAxNjAwNzUsMTM0Ljk5ODYxMzA2NDQzNDcyLDc3LjYzNzA0MDUwMDUwOTMsMjYuMzAzODg0MjgyMDMzMDk2LDE2NS40ODU2NDMyMTQ4MzUxNCw2My4zMjU0MTQ1NDA0ODQ2NSw4Mi42NjY5MTEwODExNzc5Nyw4MS44OTA4OTM0Njc5MDQ3Myw3NC42MzMxNzgzNzIzODE3NCw1LjA0ODE5NTc3MTYyOTIxCisyMCxTdW4gMTMgRmViIDExLDAuOTQ1MjE3NzY5MzgwMDIzMyw4NC44Mzc1MjY1MzE0MDAyNCw1MC4yNzIwODMwMjg4NTYzMyw0NS4wMDYyMTUwMDQ5NjA2LDIwNi45MTg1Mzc4Njg4MDEyLDQxLjMyMTEwMTc3NDEwNTczNSw2MTQuMzUzNjQ2NjM0Nzg0NSw4MzcwLjc3ODQ2MDYzNzk4NiwzMTQuNzkxMDgzMzI5NjUwODYsMjQzLjA2MTAyNDMzMzA1NDE4LDEzNy43NjE2MjcwMTE3NjYzLDExMC44MzUxNjc1Njk2MDQ5Miw1Mi4wMDM2MTQ2MTUyMDA3NSwxNS40ODM0NDgxNDMxNjMyLDIxNC40NDIzMDI1ODUyOTkyMiwxNjYuOTY0OTY0NTkyNzk1ODcsMzIuNjc1MjcwNDY0OTMyNzgsMTAwLjAyMTQ1NTYwNTcwMzg4LDg2LjIwNzU5NzY1MTk5MjU5LDYwMS41NDk1NjU3MzMxMzc1LDQyNi45MDU5ODkzNTQxMjIxNCwzNi4wMzAzOTczNjE1Njc4LDEwMi43NTg5MzAyMzQwNjMzOSw1Ni41ODU0OTUwNzI1NzIyNiw4MC4yNzA2NjA0NTEyNjkwOCw1OC43MzcyODc2Mjk4ODU0MSw2LjEzNTYxMTIyNTA2MTYxNTUsMTQ5LjU2NDAyNTQ2MjYxNSw5LjA4MzQ3ODE4Mjg5MTM1LDIyLjEyMjU2NjAzNTI3NzE2MywxMzIuMTcwNDczODIxMjIyMzcsOTY0LjgwNDU1ODk1MzM2NzIsMTQuOTYwNTU0MTUzMjA0NzAyLDE4LjA3Mzg0Mzc3MzI1MzYyNSwzNDcuODM0NDYzNjcwMzU3MSwyNTMuMjc3NTMxMDE1MTI3NzUsNDkuMzY2ODU3NzExMTkzOTUsMzQuNzc3MTU3Mzc1Njc4NzksMjY2LjY1OTIxMTg1MDgxMjIsNjc4LjUwMTY2NjYxMjczMSwxMjUuMjk2MjgxNzIyMTYyODksOS43ODgzNjA0NDAxNjAwNzUsMTM0Ljk5ODYxMzA2NDQzNDcyLDc3LjYzNzA0MDUwMDUwOTMsMjYuMzAzODg0MjgyMDMzMDk2LDE2NS40ODU2NDMyMTQ4MzUxNCw2My4zMjU0MTQ1NDA0ODQ2NSw4Mi42NjY5MTEwODExNzc5Nyw4MS44OTA4OTM0Njc5MDQ3Myw3NC42MzMxNzgzNzIzODE3NCw1LjA0ODE5NTc3MTYyOTIxCisyMSxNb24gMTQgRmViIDExLDAuOTQ1MjE3NzY5MzgwMDIzMyw4NC44Mzc1MjY1MzE0MDAyNCw1MC4yNzIwODMwMjg4NTYzMyw0NS4wMDYyMTUwMDQ5NjA2LDIwNi45MTg1Mzc4Njg4MDEyLDQxLjMyMTEwMTc3NDEwNTczNSw2MTQuMzUzNjQ2NjM0Nzg0NSw4MzcwLjc3ODQ2MDYzNzk4NiwzMTQuNzkxMDgzMzI5NjUwODYsMjQzLjA2MTAyNDMzMzA1NDE4LDEzNy43NjE2MjcwMTE3NjYzLDExMC44MzUxNjc1Njk2MDQ5Miw1Mi4wMDM2MTQ2MTUyMDA3NSwxNS40ODM0NDgxNDMxNjMyLDIxNC40NDIzMDI1ODUyOTkyMiwxNjYuOTY0OTY0NTkyNzk1ODcsMzIuNjc1MjcwNDY0OTMyNzgsMTAwLjAyMTQ1NTYwNTcwMzg4LDg2LjIwNzU5NzY1MTk5MjU5LDYwMS41NDk1NjU3MzMxMzc1LDQyNi45MDU5ODkzNTQxMjIxNCwzNi4wMzAzOTczNjE1Njc4LDEwMi43NTg5MzAyMzQwNjMzOSw1Ni41ODU0OTUwNzI1NzIyNiw4MC4yNzA2NjA0NTEyNjkwOCw1OC43MzcyODc2Mjk4ODU0MSw2LjEzNTYxMTIyNTA2MTYxNTUsMTQ5LjU2NDAyNTQ2MjYxNSw5LjA4MzQ3ODE4Mjg5MTM1LDIyLjEyMjU2NjAzNTI3NzE2MywxMzIuMTcwNDczODIxMjIyMzcsOTY0LjgwNDU1ODk1MzM2NzIsMTQuOTYwNTU0MTUzMjA0NzAyLDE4LjA3Mzg0Mzc3MzI1MzYyNSwzNDcuODM0NDYzNjcwMzU3MSwyNTMuMjc3NTMxMDE1MTI3NzUsNDkuMzY2ODU3NzExMTkzOTUsMzQuNzc3MTU3Mzc1Njc4NzksMjY2LjY1OTIxMTg1MDgxMjIsNjc4LjUwMTY2NjYxMjczMSwxMjUuMjk2MjgxNzIyMTYyODksOS43ODgzNjA0NDAxNjAwNzUsMTM0Ljk5ODYxMzA2NDQzNDcyLDc3LjYzNzA0MDUwMDUwOTMsMjYuMzAzODg0MjgyMDMzMDk2LDE2NS40ODU2NDMyMTQ4MzUxNCw2My4zMjU0MTQ1NDA0ODQ2NSw4Mi42NjY5MTEwODExNzc5Nyw4MS44OTA4OTM0Njc5MDQ3Myw3NC42MzMxNzgzNzIzODE3NCw1LjA0ODE5NTc3MTYyOTIxCisyMixUdWUgMTUgRmViIDExLDAuOTQ1MjE3NzY5MzgwMDIzMyw4NC44Mzc1MjY1MzE0MDAyNCw1MC4yNzIwODMwMjg4NTYzMyw0NS4wMDYyMTUwMDQ5NjA2LDIwNi45MTg1Mzc4Njg4MDEyLDQxLjMyMTEwMTc3NDEwNTczNSw2MTQuMzUzNjQ2NjM0Nzg0NSw4MzcwLjc3ODQ2MDYzNzk4NiwzMTQuNzkxMDgzMzI5NjUwODYsMjQzLjA2MTAyNDMzMzA1NDE4LDEzNy43NjE2MjcwMTE3NjYzLDExMC44MzUxNjc1Njk2MDQ5Miw1Mi4wMDM2MTQ2MTUyMDA3NSwxNS40ODM0NDgxNDMxNjMyLDIxNC40NDIzMDI1ODUyOTkyMiwxNjYuOTY0OTY0NTkyNzk1ODcsMzIuNjc1MjcwNDY0OTMyNzgsMTAwLjAyMTQ1NTYwNTcwMzg4LDg2LjIwNzU5NzY1MTk5MjU5LDYwMS41NDk1NjU3MzMxMzc1LDQyNi45MDU5ODkzNTQxMjIxNCwzNi4wMzAzOTczNjE1Njc4LDEwMi43NTg5MzAyMzQwNjMzOSw1Ni41ODU0OTUwNzI1NzIyNiw4MC4yNzA2NjA0NTEyNjkwOCw1OC43MzcyODc2Mjk4ODU0MSw2LjEzNTYxMTIyNTA2MTYxNTUsMTQ5LjU2NDAyNTQ2MjYxNSw5LjA4MzQ3ODE4Mjg5MTM1LDIyLjEyMjU2NjAzNTI3NzE2MywxMzIuMTcwNDczODIxMjIyMzcsOTY0LjgwNDU1ODk1MzM2NzIsMTQuOTYwNTU0MTUzMjA0NzAyLDE4LjA3Mzg0Mzc3MzI1MzYyNSwzNDcuODM0NDYzNjcwMzU3MSwyNTMuMjc3NTMxMDE1MTI3NzUsNDkuMzY2ODU3NzExMTkzOTUsMzQuNzc3MTU3Mzc1Njc4NzksMjY2LjY1OTIxMTg1MDgxMjIsNjc4LjUwMTY2NjYxMjczMSwxMjUuMjk2MjgxNzIyMTYyODksOS43ODgzNjA0NDAxNjAwNzUsMTM0Ljk5ODYxMzA2NDQzNDcyLDc3LjYzNzA0MDUwMDUwOTMsMjYuMzAzODg0MjgyMDMzMDk2LDE2NS40ODU2NDMyMTQ4MzUxNCw2My4zMjU0MTQ1NDA0ODQ2NSw4Mi42NjY5MTEwODExNzc5Nyw4MS44OTA4OTM0Njc5MDQ3Myw3NC42MzMxNzgzNzIzODE3NCw1LjA0ODE5NTc3MTYyOTIxCisyMyxXZWQgMTYgRmViIDExLDAuOTQ1MjE3NzY5MzgwMDIzMyw4NC44Mzc1MjY1MzE0MDAyNCw1MC4yNzIwODMwMjg4NTYzMyw0NS4wMDYyMTUwMDQ5NjA2LDIwNi45MTg1Mzc4Njg4MDEyLDQxLjMyMTEwMTc3NDEwNTczNSw2MTQuMzUzNjQ2NjM0Nzg0NSw4MzcwLjc3ODQ2MDYzNzk4NiwzMTQuNzkxMDgzMzI5NjUwODYsMjQzLjA2MTAyNDMzMzA1NDE4LDEzNy43NjE2MjcwMTE3NjYzLDExMC44MzUxNjc1Njk2MDQ5Miw1Mi4wMDM2MTQ2MTUyMDA3NSwxNS40ODM0NDgxNDMxNjMyLDIxNC40NDIzMDI1ODUyOTkyMiwxNjYuOTY0OTY0NTkyNzk1ODcsMzIuNjc1MjcwNDY0OTMyNzgsMTAwLjAyMTQ1NTYwNTcwMzg4LDg2LjIwNzU5NzY1MTk5MjU5LDYwMS41NDk1NjU3MzMxMzc1LDQyNi45MDU5ODkzNTQxMjIxNCwzNi4wMzAzOTczNjE1Njc4LDEwMi43NTg5MzAyMzQwNjMzOSw1Ni41ODU0OTUwNzI1NzIyNiw4MC4yNzA2NjA0NTEyNjkwOCw1OC43MzcyODc2Mjk4ODU0MSw2LjEzNTYxMTIyNTA2MTYxNTUsMTQ5LjU2NDAyNTQ2MjYxNSw5LjA4MzQ3ODE4Mjg5MTM1LDIyLjEyMjU2NjAzNTI3NzE2MywxMzIuMTcwNDczODIxMjIyMzcsOTY0LjgwNDU1ODk1MzM2NzIsMTQuOTYwNTU0MTUzMjA0NzAyLDE4LjA3Mzg0Mzc3MzI1MzYyNSwzNDcuODM0NDYzNjcwMzU3MSwyNTMuMjc3NTMxMDE1MTI3NzUsNDkuMzY2ODU3NzExMTkzOTUsMzQuNzc3MTU3Mzc1Njc4NzksMjY2LjY1OTIxMTg1MDgxMjIsNjc4LjUwMTY2NjYxMjczMSwxMjUuMjk2MjgxNzIyMTYyODksOS43ODgzNjA0NDAxNjAwNzUsMTM0Ljk5ODYxMzA2NDQzNDcyLDc3LjYzNzA0MDUwMDUwOTMsMjYuMzAzODg0MjgyMDMzMDk2LDE2NS40ODU2NDMyMTQ4MzUxNCw2My4zMjU0MTQ1NDA0ODQ2NSw4Mi42NjY5MTEwODExNzc5Nyw4MS44OTA4OTM0Njc5MDQ3Myw3NC42MzMxNzgzNzIzODE3NCw1LjA0ODE5NTc3MTYyOTIxCisyNCxUaHUgMTcgRmViIDExLDAuOTQ1MjE3NzY5MzgwMDIzMyw4NC44Mzc1MjY1MzE0MDAyNCw1MC4yNzIwODMwMjg4NTYzMyw0NS4wMDYyMTUwMDQ5NjA2LDIwNi45MTg1Mzc4Njg4MDEyLDQxLjMyMTEwMTc3NDEwNTczNSw2MTQuMzUzNjQ2NjM0Nzg0NSw4MzcwLjc3ODQ2MDYzNzk4NiwzMTQuNzkxMDgzMzI5NjUwODYsMjQzLjA2MTAyNDMzMzA1NDE4LDEzNy43NjE2MjcwMTE3NjYzLDExMC44MzUxNjc1Njk2MDQ5Miw1Mi4wMDM2MTQ2MTUyMDA3NSwxNS40ODM0NDgxNDMxNjMyLDIxNC40NDIzMDI1ODUyOTkyMiwxNjYuOTY0OTY0NTkyNzk1ODcsMzIuNjc1MjcwNDY0OTMyNzgsMTAwLjAyMTQ1NTYwNTcwMzg4LDg2LjIwNzU5NzY1MTk5MjU5LDYwMS41NDk1NjU3MzMxMzc1LDQyNi45MDU5ODkzNTQxMjIxNCwzNi4wMzAzOTczNjE1Njc4LDEwMi43NTg5MzAyMzQwNjMzOSw1Ni41ODU0OTUwNzI1NzIyNiw4MC4yNzA2NjA0NTEyNjkwOCw1OC43MzcyODc2Mjk4ODU0MSw2LjEzNTYxMTIyNTA2MTYxNTUsMTQ5LjU2NDAyNTQ2MjYxNSw5LjA4MzQ3ODE4Mjg5MTM1LDIyLjEyMjU2NjAzNTI3NzE2MywxMzIuMTcwNDczODIxMjIyMzcsOTY0LjgwNDU1ODk1MzM2NzIsMTQuOTYwNTU0MTUzMjA0NzAyLDE4LjA3Mzg0Mzc3MzI1MzYyNSwzNDcuODM0NDYzNjcwMzU3MSwyNTMuMjc3NTMxMDE1MTI3NzUsNDkuMzY2ODU3NzExMTkzOTUsMzQuNzc3MTU3Mzc1Njc4NzksMjY2LjY1OTIxMTg1MDgxMjIsNjc4LjUwMTY2NjYxMjczMSwxMjUuMjk2MjgxNzIyMTYyODksOS43ODgzNjA0NDAxNjAwNzUsMTM0Ljk5ODYxMzA2NDQzNDcyLDc3LjYzNzA0MDUwMDUwOTMsMjYuMzAzODg0MjgyMDMzMDk2LDE2NS40ODU2NDMyMTQ4MzUxNCw2My4zMjU0MTQ1NDA0ODQ2NSw4Mi42NjY5MTEwODExNzc5Nyw4MS44OTA4OTM0Njc5MDQ3Myw3NC42MzMxNzgzNzIzODE3NCw1LjA0ODE5NTc3MTYyOTIxCisyNSxGcmkgMTggRmViIDExLDAuOTQ1MjE3NzY5MzgwMDIzMyw4NC44Mzc1MjY1MzE0MDAyNCw1MC4yNzIwODMwMjg4NTYzMyw0NS4wMDYyMTUwMDQ5NjA2LDIwNi45MTg1Mzc4Njg4MDEyLDQxLjMyMTEwMTc3NDEwNTczNSw2MTQuMzUzNjQ2NjM0Nzg0NSw4MzcwLjc3ODQ2MDYzNzk4NiwzMTQuNzkxMDgzMzI5NjUwODYsMjQzLjA2MTAyNDMzMzA1NDE4LDEzNy43NjE2MjcwMTE3NjYzLDExMC44MzUxNjc1Njk2MDQ5Miw1Mi4wMDM2MTQ2MTUyMDA3NSwxNS40ODM0NDgxNDMxNjMyLDIxNC40NDIzMDI1ODUyOTkyMiwxNjYuOTY0OTY0NTkyNzk1ODcsMzIuNjc1MjcwNDY0OTMyNzgsMTAwLjAyMTQ1NTYwNTcwMzg4LDg2LjIwNzU5NzY1MTk5MjU5LDYwMS41NDk1NjU3MzMxMzc1LDQyNi45MDU5ODkzNTQxMjIxNCwzNi4wMzAzOTczNjE1Njc4LDEwMi43NTg5MzAyMzQwNjMzOSw1Ni41ODU0OTUwNzI1NzIyNiw4MC4yNzA2NjA0NTEyNjkwOCw1OC43MzcyODc2Mjk4ODU0MSw2LjEzNTYxMTIyNTA2MTYxNTUsMTQ5LjU2NDAyNTQ2MjYxNSw5LjA4MzQ3ODE4Mjg5MTM1LDIyLjEyMjU2NjAzNTI3NzE2MywxMzIuMTcwNDczODIxMjIyMzcsOTY0LjgwNDU1ODk1MzM2NzIsMTQuOTYwNTU0MTUzMjA0NzAyLDE4LjA3Mzg0Mzc3MzI1MzYyNSwzNDcuODM0NDYzNjcwMzU3MSwyNTMuMjc3NTMxMDE1MTI3NzUsNDkuMzY2ODU3NzExMTkzOTUsMzQuNzc3MTU3Mzc1Njc4NzksMjY2LjY1OTIxMTg1MDgxMjIsNjc4LjUwMTY2NjYxMjczMSwxMjUuMjk2MjgxNzIyMTYyODksOS43ODgzNjA0NDAxNjAwNzUsMTM0Ljk5ODYxMzA2NDQzNDcyLDc3LjYzNzA0MDUwMDUwOTMsMjYuMzAzODg0MjgyMDMzMDk2LDE2NS40ODU2NDMyMTQ4MzUxNCw2My4zMjU0MTQ1NDA0ODQ2NSw4Mi42NjY5MTEwODExNzc5Nyw4MS44OTA4OTM0Njc5MDQ3Myw3NC42MzMxNzgzNzIzODE3NCw1LjA0ODE5NTc3MTYyOTIxCisyNixTYXQgMTkgRmViIDExLDAuOTQ1MjE3NzY5MzgwMDIzMyw4NC44Mzc1MjY1MzE0MDAyNCw1MC4yNzIwODMwMjg4NTYzMyw0NS4wMDYyMTUwMDQ5NjA2LDIwNi45MTg1Mzc4Njg4MDEyLDQxLjMyMTEwMTc3NDEwNTczNSw2MTQuMzUzNjQ2NjM0Nzg0NSw4MzcwLjc3ODQ2MDYzNzk4NiwzMTQuNzkxMDgzMzI5NjUwODYsMjQzLjA2MTAyNDMzMzA1NDE4LDEzNy43NjE2MjcwMTE3NjYzLDExMC44MzUxNjc1Njk2MDQ5Miw1Mi4wMDM2MTQ2MTUyMDA3NSwxNS40ODM0NDgxNDMxNjMyLDIxNC40NDIzMDI1ODUyOTkyMiwxNjYuOTY0OTY0NTkyNzk1ODcsMzIuNjc1MjcwNDY0OTMyNzgsMTAwLjAyMTQ1NTYwNTcwMzg4LDg2LjIwNzU5NzY1MTk5MjU5LDYwMS41NDk1NjU3MzMxMzc1LDQyNi45MDU5ODkzNTQxMjIxNCwzNi4wMzAzOTczNjE1Njc4LDEwMi43NTg5MzAyMzQwNjMzOSw1Ni41ODU0OTUwNzI1NzIyNiw4MC4yNzA2NjA0NTEyNjkwOCw1OC43MzcyODc2Mjk4ODU0MSw2LjEzNTYxMTIyNTA2MTYxNTUsMTQ5LjU2NDAyNTQ2MjYxNSw5LjA4MzQ3ODE4Mjg5MTM1LDIyLjEyMjU2NjAzNTI3NzE2MywxMzIuMTcwNDczODIxMjIyMzcsOTY0LjgwNDU1ODk1MzM2NzIsMTQuOTYwNTU0MTUzMjA0NzAyLDE4LjA3Mzg0Mzc3MzI1MzYyNSwzNDcuODM0NDYzNjcwMzU3MSwyNTMuMjc3NTMxMDE1MTI3NzUsNDkuMzY2ODU3NzExMTkzOTUsMzQuNzc3MTU3Mzc1Njc4NzksMjY2LjY1OTIxMTg1MDgxMjIsNjc4LjUwMTY2NjYxMjczMSwxMjUuMjk2MjgxNzIyMTYyODksOS43ODgzNjA0NDAxNjAwNzUsMTM0Ljk5ODYxMzA2NDQzNDcyLDc3LjYzNzA0MDUwMDUwOTMsMjYuMzAzODg0MjgyMDMzMDk2LDE2NS40ODU2NDMyMTQ4MzUxNCw2My4zMjU0MTQ1NDA0ODQ2NSw4Mi42NjY5MTEwODExNzc5Nyw4MS44OTA4OTM0Njc5MDQ3Myw3NC42MzMxNzgzNzIzODE3NCw1LjA0ODE5NTc3MTYyOTIxCisyNyxTdW4gMjAgRmViIDExLDAuOTQ1MjE3NzY5MzgwMDIzMyw4NC44Mzc1MjY1MzE0MDAyNCw1MC4yNzIwODMwMjg4NTYzMyw0NS4wMDYyMTUwMDQ5NjA2LDIwNi45MTg1Mzc4Njg4MDEyLDQxLjMyMTEwMTc3NDEwNTczNSw2MTQuMzUzNjQ2NjM0Nzg0NSw4MzcwLjc3ODQ2MDYzNzk4NiwzMTQuNzkxMDgzMzI5NjUwODYsMjQzLjA2MTAyNDMzMzA1NDE4LDEzNy43NjE2MjcwMTE3NjYzLDExMC44MzUxNjc1Njk2MDQ5Miw1Mi4wMDM2MTQ2MTUyMDA3NSwxNS40ODM0NDgxNDMxNjMyLDIxNC40NDIzMDI1ODUyOTkyMiwxNjYuOTY0OTY0NTkyNzk1ODcsMzIuNjc1MjcwNDY0OTMyNzgsMTAwLjAyMTQ1NTYwNTcwMzg4LDg2LjIwNzU5NzY1MTk5MjU5LDYwMS41NDk1NjU3MzMxMzc1LDQyNi45MDU5ODkzNTQxMjIxNCwzNi4wMzAzOTczNjE1Njc4LDEwMi43NTg5MzAyMzQwNjMzOSw1Ni41ODU0OTUwNzI1NzIyNiw4MC4yNzA2NjA0NTEyNjkwOCw1OC43MzcyODc2Mjk4ODU0MSw2LjEzNTYxMTIyNTA2MTYxNTUsMTQ5LjU2NDAyNTQ2MjYxNSw5LjA4MzQ3ODE4Mjg5MTM1LDIyLjEyMjU2NjAzNTI3NzE2MywxMzIuMTcwNDczODIxMjIyMzcsOTY0LjgwNDU1ODk1MzM2NzIsMTQuOTYwNTU0MTUzMjA0NzAyLDE4LjA3Mzg0Mzc3MzI1MzYyNSwzNDcuODM0NDYzNjcwMzU3MSwyNTMuMjc3NTMxMDE1MTI3NzUsNDkuMzY2ODU3NzExMTkzOTUsMzQuNzc3MTU3Mzc1Njc4NzksMjY2LjY1OTIxMTg1MDgxMjIsNjc4LjUwMTY2NjYxMjczMSwxMjUuMjk2MjgxNzIyMTYyODksOS43ODgzNjA0NDAxNjAwNzUsMTM0Ljk5ODYxMzA2NDQzNDcyLDc3LjYzNzA0MDUwMDUwOTMsMjYuMzAzODg0MjgyMDMzMDk2LDE2NS40ODU2NDMyMTQ4MzUxNCw2My4zMjU0MTQ1NDA0ODQ2NSw4Mi42NjY5MTEwODExNzc5Nyw4MS44OTA4OTM0Njc5MDQ3Myw3NC42MzMxNzgzNzIzODE3NCw1LjA0ODE5NTc3MTYyOTIxCisyOCxNb24gMjEgRmViIDExLDAuOTQ1MjE3NzY5MzgwMDIzMyw4NC44Mzc1MjY1MzE0MDAyNCw1MC4yNzIwODMwMjg4NTYzMyw0NS4wMDYyMTUwMDQ5NjA2LDIwNi45MTg1Mzc4Njg4MDEyLDQxLjMyMTEwMTc3NDEwNTczNSw2MTQuMzUzNjQ2NjM0Nzg0NSw4MzcwLjc3ODQ2MDYzNzk4NiwzMTQuNzkxMDgzMzI5NjUwODYsMjQzLjA2MTAyNDMzMzA1NDE4LDEzNy43NjE2MjcwMTE3NjYzLDExMC44MzUxNjc1Njk2MDQ5Miw1Mi4wMDM2MTQ2MTUyMDA3NSwxNS40ODM0NDgxNDMxNjMyLDIxNC40NDIzMDI1ODUyOTkyMiwxNjYuOTY0OTY0NTkyNzk1ODcsMzIuNjc1MjcwNDY0OTMyNzgsMTAwLjAyMTQ1NTYwNTcwMzg4LDg2LjIwNzU5NzY1MTk5MjU5LDYwMS41NDk1NjU3MzMxMzc1LDQyNi45MDU5ODkzNTQxMjIxNCwzNi4wMzAzOTczNjE1Njc4LDEwMi43NTg5MzAyMzQwNjMzOSw1Ni41ODU0OTUwNzI1NzIyNiw4MC4yNzA2NjA0NTEyNjkwOCw1OC43MzcyODc2Mjk4ODU0MSw2LjEzNTYxMTIyNTA2MTYxNTUsMTQ5LjU2NDAyNTQ2MjYxNSw5LjA4MzQ3ODE4Mjg5MTM1LDIyLjEyMjU2NjAzNTI3NzE2MywxMzIuMTcwNDczODIxMjIyMzcsOTY0LjgwNDU1ODk1MzM2NzIsMTQuOTYwNTU0MTUzMjA0NzAyLDE4LjA3Mzg0Mzc3MzI1MzYyNSwzNDcuODM0NDYzNjcwMzU3MSwyNTMuMjc3NTMxMDE1MTI3NzUsNDkuMzY2ODU3NzExMTkzOTUsMzQuNzc3MTU3Mzc1Njc4NzksMjY2LjY1OTIxMTg1MDgxMjIsNjc4LjUwMTY2NjYxMjczMSwxMjUuMjk2MjgxNzIyMTYyODksOS43ODgzNjA0NDAxNjAwNzUsMTM0Ljk5ODYxMzA2NDQzNDcyLDc3LjYzNzA0MDUwMDUwOTMsMjYuMzAzODg0MjgyMDMzMDk2LDE2NS40ODU2NDMyMTQ4MzUxNCw2My4zMjU0MTQ1NDA0ODQ2NSw4Mi42NjY5MTEwODExNzc5Nyw4MS44OTA4OTM0Njc5MDQ3Myw3NC42MzMxNzgzNzIzODE3NCw1LjA0ODE5NTc3MTYyOTIxCisyOSxUdWUgMjIgRmViIDExLDAuOTQ1MjE3NzY5MzgwMDIzMyw4NC44Mzc1MjY1MzE0MDAyNCw1MC4yNzIwODMwMjg4NTYzMyw0NS4wMDYyMTUwMDQ5NjA2LDIwNi45MTg1Mzc4Njg4MDEyLDQxLjMyMTEwMTc3NDEwNTczNSw2MTQuMzUzNjQ2NjM0Nzg0NSw4MzcwLjc3ODQ2MDYzNzk4NiwzMTQuNzkxMDgzMzI5NjUwODYsMjQzLjA2MTAyNDMzMzA1NDE4LDEzNy43NjE2MjcwMTE3NjYzLDExMC44MzUxNjc1Njk2MDQ5Miw1Mi4wMDM2MTQ2MTUyMDA3NSwxNS40ODM0NDgxNDMxNjMyLDIxNC40NDIzMDI1ODUyOTkyMiwxNjYuOTY0OTY0NTkyNzk1ODcsMzIuNjc1MjcwNDY0OTMyNzgsMTAwLjAyMTQ1NTYwNTcwMzg4LDg2LjIwNzU5NzY1MTk5MjU5LDYwMS41NDk1NjU3MzMxMzc1LDQyNi45MDU5ODkzNTQxMjIxNCwzNi4wMzAzOTczNjE1Njc4LDEwMi43NTg5MzAyMzQwNjMzOSw1Ni41ODU0OTUwNzI1NzIyNiw4MC4yNzA2NjA0NTEyNjkwOCw1OC43MzcyODc2Mjk4ODU0MSw2LjEzNTYxMTIyNTA2MTYxNTUsMTQ5LjU2NDAyNTQ2MjYxNSw5LjA4MzQ3ODE4Mjg5MTM1LDIyLjEyMjU2NjAzNTI3NzE2MywxMzIuMTcwNDczODIxMjIyMzcsOTY0LjgwNDU1ODk1MzM2NzIsMTQuOTYwNTU0MTUzMjA0NzAyLDE4LjA3Mzg0Mzc3MzI1MzYyNSwzNDcuODM0NDYzNjcwMzU3MSwyNTMuMjc3NTMxMDE1MTI3NzUsNDkuMzY2ODU3NzExMTkzOTUsMzQuNzc3MTU3Mzc1Njc4NzksMjY2LjY1OTIxMTg1MDgxMjIsNjc4LjUwMTY2NjYxMjczMSwxMjUuMjk2MjgxNzIyMTYyODksOS43ODgzNjA0NDAxNjAwNzUsMTM0Ljk5ODYxMzA2NDQzNDcyLDc3LjYzNzA0MDUwMDUwOTMsMjYuMzAzODg0MjgyMDMzMDk2LDE2NS40ODU2NDMyMTQ4MzUxNCw2My4zMjU0MTQ1NDA0ODQ2NSw4Mi42NjY5MTEwODExNzc5Nyw4MS44OTA4OTM0Njc5MDQ3Myw3NC42MzMxNzgzNzIzODE3NCw1LjA0ODE5NTc3MTYyOTIxCiszMCxXZWQgMjMgRmViIDExLDAuOTQ1MjE3NzY5MzgwMDIzMyw4NC44Mzc1MjY1MzE0MDAyNCw1MC4yNzIwODMwMjg4NTYzMyw0NS4wMDYyMTUwMDQ5NjA2LDIwNi45MTg1Mzc4Njg4MDEyLDQxLjMyMTEwMTc3NDEwNTczNSw2MTQuMzUzNjQ2NjM0Nzg0NSw4MzcwLjc3ODQ2MDYzNzk4NiwzMTQuNzkxMDgzMzI5NjUwODYsMjQzLjA2MTAyNDMzMzA1NDE4LDEzNy43NjE2MjcwMTE3NjYzLDExMC44MzUxNjc1Njk2MDQ5Miw1Mi4wMDM2MTQ2MTUyMDA3NSwxNS40ODM0NDgxNDMxNjMyLDIxNC40NDIzMDI1ODUyOTkyMiwxNjYuOTY0OTY0NTkyNzk1ODcsMzIuNjc1MjcwNDY0OTMyNzgsMTAwLjAyMTQ1NTYwNTcwMzg4LDg2LjIwNzU5NzY1MTk5MjU5LDYwMS41NDk1NjU3MzMxMzc1LDQyNi45MDU5ODkzNTQxMjIxNCwzNi4wMzAzOTczNjE1Njc4LDEwMi43NTg5MzAyMzQwNjMzOSw1Ni41ODU0OTUwNzI1NzIyNiw4MC4yNzA2NjA0NTEyNjkwOCw1OC43MzcyODc2Mjk4ODU0MSw2LjEzNTYxMTIyNTA2MTYxNTUsMTQ5LjU2NDAyNTQ2MjYxNSw5LjA4MzQ3ODE4Mjg5MTM1LDIyLjEyMjU2NjAzNTI3NzE2MywxMzIuMTcwNDczODIxMjIyMzcsOTY0LjgwNDU1ODk1MzM2NzIsMTQuOTYwNTU0MTUzMjA0NzAyLDE4LjA3Mzg0Mzc3MzI1MzYyNSwzNDcuODM0NDYzNjcwMzU3MSwyNTMuMjc3NTMxMDE1MTI3NzUsNDkuMzY2ODU3NzExMTkzOTUsMzQuNzc3MTU3Mzc1Njc4NzksMjY2LjY1OTIxMTg1MDgxMjIsNjc4LjUwMTY2NjYxMjczMSwxMjUuMjk2MjgxNzIyMTYyODksOS43ODgzNjA0NDAxNjAwNzUsMTM0Ljk5ODYxMzA2NDQzNDcyLDc3LjYzNzA0MDUwMDUwOTMsMjYuMzAzODg0MjgyMDMzMDk2LDE2NS40ODU2NDMyMTQ4MzUxNCw2My4zMjU0MTQ1NDA0ODQ2NSw4Mi42NjY5MTEwODExNzc5Nyw4MS44OTA4OTM0Njc5MDQ3Myw3NC42MzMxNzgzNzIzODE3NCw1LjA0ODE5NTc3MTYyOTIxCiszMSxUaHUgMjQgRmViIDExLDAuOTQ1MjE3NzY5MzgwMDIzMyw4NC44Mzc1MjY1MzE0MDAyNCw1MC4yNzIwODMwMjg4NTYzMyw0NS4wMDYyMTUwMDQ5NjA2LDIwNi45MTg1Mzc4Njg4MDEyLDQxLjMyMTEwMTc3NDEwNTczNSw2MTQuMzUzNjQ2NjM0Nzg0NSw4MzcwLjc3ODQ2MDYzNzk4NiwzMTQuNzkxMDgzMzI5NjUwODYsMjQzLjA2MTAyNDMzMzA1NDE4LDEzNy43NjE2MjcwMTE3NjYzLDExMC44MzUxNjc1Njk2MDQ5Miw1Mi4wMDM2MTQ2MTUyMDA3NSwxNS40ODM0NDgxNDMxNjMyLDIxNC40NDIzMDI1ODUyOTkyMiwxNjYuOTY0OTY0NTkyNzk1ODcsMzIuNjc1MjcwNDY0OTMyNzgsMTAwLjAyMTQ1NTYwNTcwMzg4LDg2LjIwNzU5NzY1MTk5MjU5LDYwMS41NDk1NjU3MzMxMzc1LDQyNi45MDU5ODkzNTQxMjIxNCwzNi4wMzAzOTczNjE1Njc4LDEwMi43NTg5MzAyMzQwNjMzOSw1Ni41ODU0OTUwNzI1NzIyNiw4MC4yNzA2NjA0NTEyNjkwOCw1OC43MzcyODc2Mjk4ODU0MSw2LjEzNTYxMTIyNTA2MTYxNTUsMTQ5LjU2NDAyNTQ2MjYxNSw5LjA4MzQ3ODE4Mjg5MTM1LDIyLjEyMjU2NjAzNTI3NzE2MywxMzIuMTcwNDczODIxMjIyMzcsOTY0LjgwNDU1ODk1MzM2NzIsMTQuOTYwNTU0MTUzMjA0NzAyLDE4LjA3Mzg0Mzc3MzI1MzYyNSwzNDcuODM0NDYzNjcwMzU3MSwyNTMuMjc3NTMxMDE1MTI3NzUsNDkuMzY2ODU3NzExMTkzOTUsMzQuNzc3MTU3Mzc1Njc4NzksMjY2LjY1OTIxMTg1MDgxMjIsNjc4LjUwMTY2NjYxMjczMSwxMjUuMjk2MjgxNzIyMTYyODksOS43ODgzNjA0NDAxNjAwNzUsMTM0Ljk5ODYxMzA2NDQzNDcyLDc3LjYzNzA0MDUwMDUwOTMsMjYuMzAzODg0MjgyMDMzMDk2LDE2NS40ODU2NDMyMTQ4MzUxNCw2My4zMjU0MTQ1NDA0ODQ2NSw4Mi42NjY5MTEwODExNzc5Nyw4MS44OTA4OTM0Njc5MDQ3Myw3NC42MzMxNzgzNzIzODE3NCw1LjA0ODE5NTc3MTYyOTIxCiszMixGcmkgMjUgRmViIDExLDAuOTQ1MjE3NzY5MzgwMDIzMyw4NC44Mzc1MjY1MzE0MDAyNCw1MC4yNzIwODMwMjg4NTYzMyw0NS4wMDYyMTUwMDQ5NjA2LDIwNi45MTg1Mzc4Njg4MDEyLDQxLjMyMTEwMTc3NDEwNTczNSw2MTQuMzUzNjQ2NjM0Nzg0NSw4MzcwLjc3ODQ2MDYzNzk4NiwzMTQuNzkxMDgzMzI5NjUwODYsMjQzLjA2MTAyNDMzMzA1NDE4LDEzNy43NjE2MjcwMTE3NjYzLDExMC44MzUxNjc1Njk2MDQ5Miw1Mi4wMDM2MTQ2MTUyMDA3NSwxNS40ODM0NDgxNDMxNjMyLDIxNC40NDIzMDI1ODUyOTkyMiwxNjYuOTY0OTY0NTkyNzk1ODcsMzIuNjc1MjcwNDY0OTMyNzgsMTAwLjAyMTQ1NTYwNTcwMzg4LDg2LjIwNzU5NzY1MTk5MjU5LDYwMS41NDk1NjU3MzMxMzc1LDQyNi45MDU5ODkzNTQxMjIxNCwzNi4wMzAzOTczNjE1Njc4LDEwMi43NTg5MzAyMzQwNjMzOSw1Ni41ODU0OTUwNzI1NzIyNiw4MC4yNzA2NjA0NTEyNjkwOCw1OC43MzcyODc2Mjk4ODU0MSw2LjEzNTYxMTIyNTA2MTYxNTUsMTQ5LjU2NDAyNTQ2MjYxNSw5LjA4MzQ3ODE4Mjg5MTM1LDIyLjEyMjU2NjAzNTI3NzE2MywxMzIuMTcwNDczODIxMjIyMzcsOTY0LjgwNDU1ODk1MzM2NzIsMTQuOTYwNTU0MTUzMjA0NzAyLDE4LjA3Mzg0Mzc3MzI1MzYyNSwzNDcuODM0NDYzNjcwMzU3MSwyNTMuMjc3NTMxMDE1MTI3NzUsNDkuMzY2ODU3NzExMTkzOTUsMzQuNzc3MTU3Mzc1Njc4NzksMjY2LjY1OTIxMTg1MDgxMjIsNjc4LjUwMTY2NjYxMjczMSwxMjUuMjk2MjgxNzIyMTYyODksOS43ODgzNjA0NDAxNjAwNzUsMTM0Ljk5ODYxMzA2NDQzNDcyLDc3LjYzNzA0MDUwMDUwOTMsMjYuMzAzODg0MjgyMDMzMDk2LDE2NS40ODU2NDMyMTQ4MzUxNCw2My4zMjU0MTQ1NDA0ODQ2NSw4Mi42NjY5MTEwODExNzc5Nyw4MS44OTA4OTM0Njc5MDQ3Myw3NC42MzMxNzgzNzIzODE3NCw1LjA0ODE5NTc3MTYyOTIxCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNFSVJTdGF0ZXNPbmx5X0ZEX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL2h1bWFuL0luY2lkZW5jZV8wLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0VJUlN0YXRlc09ubHlfRkRfUmVmZXJlbmNlL2F1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwvaHVtYW4vSW5jaWRlbmNlXzAuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjExMmU4YjgKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNFSVJTdGF0ZXNPbmx5X0ZEX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL2h1bWFuL0luY2lkZW5jZV8wLmNzdgpAQCAtMCwwICsxLDMzIEBACitpdGVyYXRpb24sdGltZSxzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9ub2RlL3RyYW5zcG9ydC9waXBlL1VTQQorMSxUdWUgMjUgSmFuIDExLDAuMAorMixXZWQgMjYgSmFuIDExLDAuMAorMyxUaHUgMjcgSmFuIDExLDAuMAorNCxGcmkgMjggSmFuIDExLDAuMAorNSxTYXQgMjkgSmFuIDExLDAuMAorNixTdW4gMzAgSmFuIDExLDAuMAorNyxNb24gMzEgSmFuIDExLDAuMAorOCxUdWUgMSBGZWIgMTEsMC4wCis5LFdlZCAyIEZlYiAxMSwwLjAKKzEwLFRodSAzIEZlYiAxMSwwLjAKKzExLEZyaSA0IEZlYiAxMSwwLjAKKzEyLFNhdCA1IEZlYiAxMSwwLjAKKzEzLFN1biA2IEZlYiAxMSwwLjAKKzE0LE1vbiA3IEZlYiAxMSwwLjAKKzE1LFR1ZSA4IEZlYiAxMSwwLjAKKzE2LFdlZCA5IEZlYiAxMSwwLjAKKzE3LFRodSAxMCBGZWIgMTEsMC4wCisxOCxGcmkgMTEgRmViIDExLDAuMAorMTksU2F0IDEyIEZlYiAxMSwwLjAKKzIwLFN1biAxMyBGZWIgMTEsMC4wCisyMSxNb24gMTQgRmViIDExLDAuMAorMjIsVHVlIDE1IEZlYiAxMSwwLjAKKzIzLFdlZCAxNiBGZWIgMTEsMC4wCisyNCxUaHUgMTcgRmViIDExLDAuMAorMjUsRnJpIDE4IEZlYiAxMSwwLjAKKzI2LFNhdCAxOSBGZWIgMTEsMC4wCisyNyxTdW4gMjAgRmViIDExLDAuMAorMjgsTW9uIDIxIEZlYiAxMSwwLjAKKzI5LFR1ZSAyMiBGZWIgMTEsMC4wCiszMCxXZWQgMjMgRmViIDExLDAuMAorMzEsVGh1IDI0IEZlYiAxMSwwLjAKKzMyLEZyaSAyNSBGZWIgMTEsMC4wCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNFSVJTdGF0ZXNPbmx5X0ZEX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL2h1bWFuL0luY2lkZW5jZV8xLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0VJUlN0YXRlc09ubHlfRkRfUmVmZXJlbmNlL2F1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwvaHVtYW4vSW5jaWRlbmNlXzEuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ3YTg0M2YKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNFSVJTdGF0ZXNPbmx5X0ZEX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL2h1bWFuL0luY2lkZW5jZV8xLmNzdgpAQCAtMCwwICsxLDMzIEBACitpdGVyYXRpb24sdGltZSxVUy1BSyxVUy1BTCxVUy1BUixVUy1BWixVUy1DQSxVUy1DTyxVUy1DVCxVUy1EQyxVUy1ERSxVUy1GTCxVUy1HQSxVUy1ISSxVUy1JQSxVUy1JRCxVUy1JTCxVUy1JTixVUy1LUyxVUy1LWSxVUy1MQSxVUy1NQSxVUy1NRCxVUy1NRSxVUy1NSSxVUy1NTixVUy1NTyxVUy1NUyxVUy1NVCxVUy1OQyxVUy1ORCxVUy1ORSxVUy1OSCxVUy1OSixVUy1OTSxVUy1OVixVUy1OWSxVUy1PSCxVUy1PSyxVUy1PUixVUy1QQSxVUy1SSSxVUy1TQyxVUy1TRCxVUy1UTixVUy1UWCxVUy1VVCxVUy1WQSxVUy1WVCxVUy1XQSxVUy1XSSxVUy1XVixVUy1XWQorMSxUdWUgMjUgSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyLFdlZCAyNiBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzMsVGh1IDI3IEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorNCxGcmkgMjggSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCis1LFNhdCAyOSBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzYsU3VuIDMwIEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorNyxNb24gMzEgSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCis4LFR1ZSAxIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorOSxXZWQgMiBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzEwLFRodSAzIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTEsRnJpIDQgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxMixTYXQgNSBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzEzLFN1biA2IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTQsTW9uIDcgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxNSxUdWUgOCBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzE2LFdlZCA5IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTcsVGh1IDEwIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTgsRnJpIDExIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTksU2F0IDEyIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjAsU3VuIDEzIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjEsTW9uIDE0IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjIsVHVlIDE1IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjMsV2VkIDE2IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjQsVGh1IDE3IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjUsRnJpIDE4IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjYsU2F0IDE5IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjcsU3VuIDIwIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjgsTW9uIDIxIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjksVHVlIDIyIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMzAsV2VkIDIzIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMzEsVGh1IDI0IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMzIsRnJpIDI1IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTRUlSU3RhdGVzT25seV9GRF9SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9ydW5wYXJhbWV0ZXJzLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0VJUlN0YXRlc09ubHlfRkRfUmVmZXJlbmNlL2F1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwvcnVucGFyYW1ldGVycy5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDY4NTViNQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0VJUlN0YXRlc09ubHlfRkRfUmVmZXJlbmNlL2F1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwvcnVucGFyYW1ldGVycy5jc3YKQEAgLTAsMCArMSwyIEBACitwb3B1bGF0aW9uSWRlbnRpZmllcixuYW1lLHRhcmdldElTT0tleSxiaXJ0aFJhdGUsZGVhdGhSYXRlLHRpbWVQZXJpb2QKK2h1bWFuLGF1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwsLDAuMCwwLjAsODY0MDAwMDAKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNFSVJTdGF0ZXNPbmx5X1JLX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9EaXNlYXNlIERlYXRoc18wLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0VJUlN0YXRlc09ubHlfUktfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL0Rpc2Vhc2UgRGVhdGhzXzAuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjExMmU4YjgKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNFSVJTdGF0ZXNPbmx5X1JLX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9EaXNlYXNlIERlYXRoc18wLmNzdgpAQCAtMCwwICsxLDMzIEBACitpdGVyYXRpb24sdGltZSxzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9ub2RlL3RyYW5zcG9ydC9waXBlL1VTQQorMSxUdWUgMjUgSmFuIDExLDAuMAorMixXZWQgMjYgSmFuIDExLDAuMAorMyxUaHUgMjcgSmFuIDExLDAuMAorNCxGcmkgMjggSmFuIDExLDAuMAorNSxTYXQgMjkgSmFuIDExLDAuMAorNixTdW4gMzAgSmFuIDExLDAuMAorNyxNb24gMzEgSmFuIDExLDAuMAorOCxUdWUgMSBGZWIgMTEsMC4wCis5LFdlZCAyIEZlYiAxMSwwLjAKKzEwLFRodSAzIEZlYiAxMSwwLjAKKzExLEZyaSA0IEZlYiAxMSwwLjAKKzEyLFNhdCA1IEZlYiAxMSwwLjAKKzEzLFN1biA2IEZlYiAxMSwwLjAKKzE0LE1vbiA3IEZlYiAxMSwwLjAKKzE1LFR1ZSA4IEZlYiAxMSwwLjAKKzE2LFdlZCA5IEZlYiAxMSwwLjAKKzE3LFRodSAxMCBGZWIgMTEsMC4wCisxOCxGcmkgMTEgRmViIDExLDAuMAorMTksU2F0IDEyIEZlYiAxMSwwLjAKKzIwLFN1biAxMyBGZWIgMTEsMC4wCisyMSxNb24gMTQgRmViIDExLDAuMAorMjIsVHVlIDE1IEZlYiAxMSwwLjAKKzIzLFdlZCAxNiBGZWIgMTEsMC4wCisyNCxUaHUgMTcgRmViIDExLDAuMAorMjUsRnJpIDE4IEZlYiAxMSwwLjAKKzI2LFNhdCAxOSBGZWIgMTEsMC4wCisyNyxTdW4gMjAgRmViIDExLDAuMAorMjgsTW9uIDIxIEZlYiAxMSwwLjAKKzI5LFR1ZSAyMiBGZWIgMTEsMC4wCiszMCxXZWQgMjMgRmViIDExLDAuMAorMzEsVGh1IDI0IEZlYiAxMSwwLjAKKzMyLEZyaSAyNSBGZWIgMTEsMC4wCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNFSVJTdGF0ZXNPbmx5X1JLX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9EaXNlYXNlIERlYXRoc18xLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0VJUlN0YXRlc09ubHlfUktfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL0Rpc2Vhc2UgRGVhdGhzXzEuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ3YTg0M2YKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNFSVJTdGF0ZXNPbmx5X1JLX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9EaXNlYXNlIERlYXRoc18xLmNzdgpAQCAtMCwwICsxLDMzIEBACitpdGVyYXRpb24sdGltZSxVUy1BSyxVUy1BTCxVUy1BUixVUy1BWixVUy1DQSxVUy1DTyxVUy1DVCxVUy1EQyxVUy1ERSxVUy1GTCxVUy1HQSxVUy1ISSxVUy1JQSxVUy1JRCxVUy1JTCxVUy1JTixVUy1LUyxVUy1LWSxVUy1MQSxVUy1NQSxVUy1NRCxVUy1NRSxVUy1NSSxVUy1NTixVUy1NTyxVUy1NUyxVUy1NVCxVUy1OQyxVUy1ORCxVUy1ORSxVUy1OSCxVUy1OSixVUy1OTSxVUy1OVixVUy1OWSxVUy1PSCxVUy1PSyxVUy1PUixVUy1QQSxVUy1SSSxVUy1TQyxVUy1TRCxVUy1UTixVUy1UWCxVUy1VVCxVUy1WQSxVUy1WVCxVUy1XQSxVUy1XSSxVUy1XVixVUy1XWQorMSxUdWUgMjUgSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyLFdlZCAyNiBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzMsVGh1IDI3IEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorNCxGcmkgMjggSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCis1LFNhdCAyOSBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzYsU3VuIDMwIEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorNyxNb24gMzEgSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCis4LFR1ZSAxIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorOSxXZWQgMiBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzEwLFRodSAzIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTEsRnJpIDQgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxMixTYXQgNSBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzEzLFN1biA2IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTQsTW9uIDcgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxNSxUdWUgOCBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzE2LFdlZCA5IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTcsVGh1IDEwIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTgsRnJpIDExIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTksU2F0IDEyIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjAsU3VuIDEzIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjEsTW9uIDE0IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjIsVHVlIDE1IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjMsV2VkIDE2IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjQsVGh1IDE3IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjUsRnJpIDE4IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjYsU2F0IDE5IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjcsU3VuIDIwIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjgsTW9uIDIxIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjksVHVlIDIyIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMzAsV2VkIDIzIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMzEsVGh1IDI0IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMzIsRnJpIDI1IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTRUlSU3RhdGVzT25seV9SS19SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vRV8wLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0VJUlN0YXRlc09ubHlfUktfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL0VfMC5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjRiMjEyOAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0VJUlN0YXRlc09ubHlfUktfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL0VfMC5jc3YKQEAgLTAsMCArMSwzMyBAQAoraXRlcmF0aW9uLHRpbWUsc3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vbm9kZS90cmFuc3BvcnQvcGlwZS9VU0EKKzEsVHVlIDI1IEphbiAxMSwwLjAKKzIsV2VkIDI2IEphbiAxMSwwLjQyNjAyNDYwNTQxNjAwOTk1CiszLFRodSAyNyBKYW4gMTEsMjguMjEzMDQ2ODQyMTQwMDYKKzQsRnJpIDI4IEphbiAxMSwxNDk4LjYxNTA3OTgxMzc3MDgKKzUsU2F0IDI5IEphbiAxMSw2NzcwNi45NDE3OTMzNjE4MQorNixTdW4gMzAgSmFuIDExLDU5OTE4MC44NzM2NjIwNjc4Cis3LE1vbiAzMSBKYW4gMTEsNjQ4NzA4Ljg2MjYwNjcxNjEKKzgsVHVlIDEgRmViIDExLDUxMjM4OC4xNDAzNjY2MTMzNAorOSxXZWQgMiBGZWIgMTEsMzU2ODU3LjgyMTk3NTc1MjU0CisxMCxUaHUgMyBGZWIgMTEsMjQyMzgxLjc3MDEyMTAxODE3CisxMSxGcmkgNCBGZWIgMTEsMTYzMjM0LjY3MzE0MDQwMDM4CisxMixTYXQgNSBGZWIgMTEsMTA5NjA2LjI4MDY0NDQ2NjE1CisxMyxTdW4gNiBGZWIgMTEsNzM1MTkuNzczMTMwNDgzMjcKKzE0LE1vbiA3IEZlYiAxMSw0OTI5Ni4wMTAxMzU2ODk2OAorMTUsVHVlIDggRmViIDExLDMzMDQ5LjI5OTcyMzc3OTQ2CisxNixXZWQgOSBGZWIgMTEsMjIxNTYuMDc3OTAxMzQ0MQorMTcsVGh1IDEwIEZlYiAxMSwxNDg1My4wNzE4MTY0MDg3NTIKKzE4LEZyaSAxMSBGZWIgMTEsOTk1Ny4yMDI0ODM4MjIwMTMKKzE5LFNhdCAxMiBGZWIgMTEsNjY3NS4xMDA3Njc0MzQ2OTkKKzIwLFN1biAxMyBGZWIgMTEsNDQ3NC44NTIzOTM1MDU3MTMKKzIxLE1vbiAxNCBGZWIgMTEsMjk5OS44NTI4MDU1MTk1NzgKKzIyLFR1ZSAxNSBGZWIgMTEsMjAxMS4wNTQ1NDA4ODk4NDUKKzIzLFdlZCAxNiBGZWIgMTEsMTM0OC4xNzc4MDg0MDAzNjIyCisyNCxUaHUgMTcgRmViIDExLDkwMy43OTUwMDY4MzM3NjczCisyNSxGcmkgMTggRmViIDExLDYwNS44ODc3MjA2OTkzODk0CisyNixTYXQgMTkgRmViIDExLDQwNi4xNzU1OTU3NzI0MTA5MworMjcsU3VuIDIwIEZlYiAxMSwyNzIuMjkyMDU4NTA0ODI5NjQKKzI4LE1vbiAyMSBGZWIgMTEsMTgyLjUzODk3NTgwOTA0NDg0CisyOSxUdWUgMjIgRmViIDExLDEyMi4zNzAyMTk4NDMzMTgwNworMzAsV2VkIDIzIEZlYiAxMSw4Mi4wMzQyODE0ODQ4NjA4NgorMzEsVGh1IDI0IEZlYiAxMSw1NC45OTM5MDE5NjcwODc1NQorMzIsRnJpIDI1IEZlYiAxMSwzNi44NjY2MTEzMzcyODQzNgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTRUlSU3RhdGVzT25seV9SS19SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vRV8xLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0VJUlN0YXRlc09ubHlfUktfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL0VfMS5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzllNjUwMwotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0VJUlN0YXRlc09ubHlfUktfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL0VfMS5jc3YKQEAgLTAsMCArMSwzMyBAQAoraXRlcmF0aW9uLHRpbWUsVVMtQUssVVMtQUwsVVMtQVIsVVMtQVosVVMtQ0EsVVMtQ08sVVMtQ1QsVVMtREMsVVMtREUsVVMtRkwsVVMtR0EsVVMtSEksVVMtSUEsVVMtSUQsVVMtSUwsVVMtSU4sVVMtS1MsVVMtS1ksVVMtTEEsVVMtTUEsVVMtTUQsVVMtTUUsVVMtTUksVVMtTU4sVVMtTU8sVVMtTVMsVVMtTVQsVVMtTkMsVVMtTkQsVVMtTkUsVVMtTkgsVVMtTkosVVMtTk0sVVMtTlYsVVMtTlksVVMtT0gsVVMtT0ssVVMtT1IsVVMtUEEsVVMtUkksVVMtU0MsVVMtU0QsVVMtVE4sVVMtVFgsVVMtVVQsVVMtVkEsVVMtVlQsVVMtV0EsVVMtV0ksVVMtV1YsVVMtV1kKKzEsVHVlIDI1IEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMixXZWQgMjYgSmFuIDExLDUuODQwNjIwNDcwMjY2NTY1RS00LDUuODY2Nzk0OTI2MDc4MDI1RS00LDQuMjgxMjU2NTQ1NjEwMTgzNUUtNCwwLjAwNTA3MTYyNDA3ODAyMDU5NTUsMjQ2Ljc0MjM1NTEwOTU2MzM2LDAuMDA1MzA3MTc3Nzg0MzE2NDY2LDcuNTg2NjI1NjUwNDY2MTQxRS00LDAuMDAxOTcxMjQxNzQ1OTgxMzY2NCwxLjkzMTczNTgxNjY2NDYwNkUtNiwwLjAxNDAyMDU5NzU2MTYzNzM4MywwLjAwOTIxNDQ5NTEwMzg1MTI5OSwwLjAwMjE2MzM4NzM3ODE2NDk3NDMsMy41MjY1NjAzMjE4OTY5OTdFLTQsNC4zNTQ0MzA3ODI1NDAwNDFFLTQsMC4wMTAyODM4NzM1Mjk2NzM3ODYsMC4wMDEwNzgzNDA3ODQ2Njg2ODk1LDEuNjY2MDEwODY1NzU3NzAyRS00LDUuMjM0MjU3NTk0NTczMjE4RS00LDkuODU5MDk2NjExNzQwNTJFLTQsMC4wMDMwOTI2MzUzMzIyODE4ODI0LDAuMDAyMjg0OTQ3NTY3OTg2NDY5OCwyLjU3NTA3MDk0NzU5ODUwM0UtNCwwLjAwNDIyODMzMTczMDEzMDI0MiwwLjAwMzgwMjIyNzcyODM3NDkyNSwwLjAwMjgxMTUxMTE5NDAwMDYzMiwyLjc2MzY5ODI0MjAzNDQ3MTNFLTQsMy4wNDkzODM4Mzg2MTU4NDVFLTQsMC4wMDQ1MTAzNTIxNjMzOTExNzYsMS40NTQ4NzQ5NTIwNzQyMTZFLTQsNS4wNTk0ODIxNDkwMDg1M0UtNCw0LjM0MzA5Mzc1ODA4MTY5RS00LDAuMDA0MDMwNTAyMTQ5MDE0NjYxLDYuOTcyMTk0MjAzNzc1ODk3RS00LDAuMDA1MzI2NTQ4MTEyMTg1MjY3NSwwLjAwOTA2OTE2MzgwNzA1NDMyNiwwLjAwNDA5NDQzNzg5NDQxNzg2Nyw3LjYwMjc0MDMzMTQ1NjMzN0UtNCwwLjAwMTY2NjUwMjgyNzY4OTI2NSwwLjAwNDY0OTMzNDA3MDY3Mzc0NCw1Ljc0MTc4NzQzNTY5MjgxOUUtNCw2LjkxMTA3NzI2MTEwNzk5NEUtNCwxLjQwNjY1NzE4NzU1MDU1NDdFLTQsMC4wMDI1MTU5NzAwNTY0MjYxNTczLDAuMDEyODkzNDY0MzM0MTc2ODc0LDAuMDAyMjgwMzc4MzE5ODE4MTQ5LDAuMDAzNDM4MjMzMjEyNTAwODY2NSwxLjUwMzEyMTg2NDM2OTYzNTJFLTQsMC4wMDM1MDg0MzI0NjAyNDA0Nzg3LDAuMDAxMTg1MTUxMTQ1NTQ1MzA4Niw3Ljg3MTQ2MDY1MTAxNzI0NUUtNSwxLjA0OTMyOTAwNDM1NDI0MjFFLTQKKzMsVGh1IDI3IEphbiAxMSwwLjA4NDg4NzcyODcyNDY2MDksMC4wODUzNjY3NDAxNjE3MjI2MywwLjA2MjI5MzMwMDQ4OTIwNjIsMC43MzcwNTA1Mzk5MDgzNDI1LDExNDgyLjEwMjAzMTMwMzYxNSwwLjc3MTAwOTU1NDc0MDk0OTUsMC4xMTAzNzcyMjExNTE5NDI4NiwwLjI4NTQ1OTczMDI1MzUxODgsMi44MTEzNjE2ODQxNjkxNjFFLTQsMi4wMzc5MTc0MzM0NjA0OTEsMS4zMzg4NjE1NzMzODg1NDQ1LDAuMzE0MDM5MTAzNDYxODgwNiwwLjA1MTMxNTIyODMwMjk0ODE2LDAuMDYzMzQxODYyMzI1MTE2MzUsMS40OTQ4ODQ2MjE1MDAyMjg1LDAuMTU2ODk3MjQ5MjU2OTExMywwLjAyNDI0NDI5MTUzOTQ3NjA3LDAuMDc2MTYzMDYyNjk3NTI0NjIsMC4xNDM0Mzk2NzAyNDM1NjE5LDAuNDQ5NzczMjk1MjAyMjAwMiwwLjMzMjMzNTA0MzI1MjU0MzA0LDAuMDM3NDY1NjMwMzcxMzgwMDgsMC42MTQ5OTY1NjMyMDMzNTU4LDAuNTUyNzQzNTczMzY4MTU2MiwwLjQwODg3OTI5MDE3OTAyNDQ3LDAuMDQwMjE2MTI0OTkxMjE5MTMzLDAuMDQ0MzU3ODYyMDE3NTIzNywwLjY1NTg4NzYzMjMyNjkzODgsMC4wMjExNjY3NDYwOTg4NDQyMiwwLjA3MzYwMjI1ODc5NjkxNjA2LDAuMDYzMTc1NTg1OTc0NzQ1OTgsMC41ODYxNzc1NjEzNzg2ODYyLDAuMTAxNDE0Mzg2NjkwNTY1ODgsMC43NzIyMjE2MjQ2ODQ3NTc1LDEuMzE4OTc5MjQyNzIzMTkwMSwwLjU5NTU3NzkyMTI0NzkxMDQsMC4xMTA2MTIwNjI4NjQxMzQ2NSwwLjI0MjM2NTYyMTk1NTU2NDI0LDAuNjc2Mjc1NzI5ODIwNDg5MywwLjA4MzQ5NzYwNjAzMjE2MzcyLDAuMTAwNTU2MDU3MTU3MDE1MjQsMC4wMjA0NjY0MjE2OTk0NzksMC4zNjU5MzA0NzI4NDg4Mzg5NSwxLjg3NDc4ODIwNTY5ODY5MzMsMC4zMzEzODc4ODAyMzAxOTA1NiwwLjUwMDAzNTg1MjIzMDUyNzUsMC4wMjE4NjgwNDAyMDAwMDgzMjQsMC41MTAxNjQ0NjQ4MTYyOTg4LDAuMTcyNDI3MTYxNDcxNDQzNzcsMC4wMTE0NTUwOTE1Mjg3NDczNDcsMC4wMTUyNjY4MzE2NTA2Njk4NjMKKzQsRnJpIDI4IEphbiAxMSw3LjE5ODQ3NTc2NTc0NDgzNyw3LjI0NzkyNTQxMjczMTM2NCw1LjI4ODY4NDc0NzQ0MTU1Nyw2Mi40OTY0MzUzNjcxOTEyNCw1Mjc1NzIuOTI5OTc3ODc5Niw2NS4zNTE0NjA4NzUxMzI1OSw5LjM3MDEwMjM5MzQxNzc3LDI0LjExNDM2NDU3MzkzNjE1NywwLjAyMzg3NDEyMzQyMTA3NTQzLDE3Mi44Mjk2MzMyODc2MzU5MSwxMTMuNTAxODQxMTAzNDk2MDksMjYuNTk1ODU1MDY5NTcxMzUzLDQuMzU2OTEyNDk2NjU3ODIyLDUuMzc2MjYxODE1MTA0NTM5LDEyNi43ODYxNjUzODA0NjI1MywxMy4zMjAxODU3NDUxNDE2MTEsMi4wNTg2NDE5NjY2NjU3Nzk2LDYuNDY2NTI1ODcwOTMyMzg1LDEyLjE3Njg2NzcyMDY5MTc5MiwzOC4xNjY2MDg0OTUzNDc5LDI4LjIwMzQ5MzU2OTA1NzU3LDMuMTgwNjE5MjkyMTQzMjU0LDUyLjE5MTkzNTMzMTU3ODQ4LDQ2Ljg4Mzk3MzY0NzczNDA0LDM0LjY5NTYzNDM0NDA2ODk2NCwzLjQxNDY2NjIwMjAxNjQzMDcsMy43NjQ5NDk5ODc1Mzc3MjE1LDU1LjY1MDcyOTQyMTQwOTU1LDEuNzk2ODY5Mjc1MjA3NTQ0LDYuMjQ3NTIxNzI3OTQwMDg3LDUuMzYyMDI2ODMwMDAwMjA0LDQ5Ljc0MjEzODUxMjU3MDAzLDguNjA3MTI2NjI1MzIyMjU5LDY1LjMxMTQ4ODg0MjEwMzQzLDExMS45MjY3NjI4MDAwNjA1NCw1MC41NDg5NTc1MTg1NDk4MDUsOS4zOTAwNzM0NjgwMDM1NSwyMC41NjY1MjU2OTc3Nzk0ODMsNTcuMzk2NTE3NjQ4NTEzNiw3LjA4NDczODEyMDMyODA1OSw4LjUzNzAyNTAwNjQ5MjA5NywxLjczNzUyNDM4MzU1MDM2NywzMS4wNTQwNDUzNTAyOTI4NDYsMTU5LjA1Nzg5Nzg0MDQ3NTg1LDI4LjA5Nzg0MzU3OTU3NDIzLDQyLjQzMTg0ODgzNzY3MjI0LDEuODU2MzQ1MzcyODcyNTYxLDQzLjI4NDExMjY4OTIzNjgyLDE0LjYzNzY2MzUwODU4MjU4LDAuOTcyNzA3MTIwMzg1NDA2NywxLjI5NjA0NjUyMTcwNDE2MjgKKzUsU2F0IDI5IEphbiAxMSw1MTAuOTI5MTAxNTQ1MTM3MzcsNTE1LjQwNjUzMTA0OTU4MSwzNzYuMDU4MTg4NjAyMzE1Myw0NDM1LjI0MjQ5ODQ4ODk0NywxLjUxNjY1NDcxMjI1MjgyNTdFNyw0NjM1LjE4OTIyOTM4MDQzLDY2Ni4xNzQwNzE0MDI4ODYsMTcwMS41NDM5NTk3MzA3MTE1LDEuNjk4MjI3Nzg2MTIxNzMyMywxMjI2OC41NjM2MjIwNTU5NTksODA1Mi40MDA0MjU5ODIxNSwxODgzLjkyOTc4MDgzODIxMjUsMzA5LjgzMjMwNzIxMjA0NTgsMzgyLjEyNjkxMDYwODgwMDgsOTAwMS4xNDAzODM0MDUwMTYsOTQ3LjEwOTI0NTcyOTM3ODIsMTQ2LjQxNTk5MDQ5NTI0MDQ0LDQ1OS44NDMxMjEwNjMwNzI3LDg2NS43Mjc0MzkwNDg0MjA3LDI3MTEuNzk2MjY4NjE0NDkyNCwyMDA0LjE2MzkzNDExMzcwNiwyMjYuMTM5NDQyODkxMTk4OTQsMzcwOC44NTQ2NzI5NDU1MzQ3LDMzMjguOTQyNzgzNTc5MzIyNiwyNDY1LjA4OTA3MjQ0NzMzOTMsMjQyLjgzOTg2NzY2MTUwNjU2LDI2Ny41OTkyNjY3MTU3NTI1LDM5NTMuMzg5NDg4MTkzNjYxLDEyNy43NDg1NjA3NzY3Mzg0Miw0NDQuMDk1ODU0MDA3Nzc1MjQsMzgxLjEwMTc2MzU5OTkyNDIsMzUzNC4zMjI3Mjk5NTQ0OTI0LDYxMS42OTg4MzQ4MDg2NzI3LDQ2MTYuODYzNDM0MDQ3NjI5LDc5NTIuNzQwMzU0MzQ3MDY2LDM1OTIuNjQ4OTcxOTc5NDE2LDY2Ny41OTc3NjY2NTIwMDAxLDE0NjEuMjgzMzU2NDI2Njk2Niw0MDc5LjE1MTMwMzU5NjYwNTQsNTAzLjMwOTg0ODIxNTk5ODMzLDYwNy4wMTc5NjQxNTc4NTI0LDEyMy41NDExMTA5MDgyNzkwNCwyMjA2LjY3MDQwNjg0MDIzNjQsMTEyOTcuODIzOTUxNTY3NDc4LDE5OTMuODkzMDEwNzQ1ODMxNCwzMDE0Ljg1Nzg2OTIyNDc3NDcsMTMxLjk3MDcwNDE2NTE5Nzg0LDMwNzQuNjIxNDEwODk4NzIwNiwxMDQwLjY3OTQ5OTU2NjY2MTQsNjkuMTg0NDcxOTcyNDI1MTQsOTIuMTQ1NTcwNDU1MDE3OQorNixTdW4gMzAgSmFuIDExLDI5NTIyLjU2NjkwNDQwNjI4LDMwNzg1LjE2MTM5NDAwNjA4NSwyMjQzNS4yNjQxNzMyMjk2ODcsMjU1NjgzLjYwMTg0ODY1Mzk4LDIuMjUzOTk4NjYyNzYxMzM1NEU3LDI2NDU2Mi44MDM5MjYyMzQ2LDM5NjM4LjkzNDE2NTI0NjYsODkxMjQuNTQ1OTE5NjcyMzUsMTAxLjk5MDI5Njc0NjYwMDk4LDcxMDQ4MS4yMDM0MDgxMzQyLDQ2MTYyNi4wMTk0MTQ2Njc3NCwxMDUxODIuMDM4MTE0NDk0OTIsMTg1MTUuMTMxNzYwNzI5NTYsMjI2MjkuNDg2NDIxMjM4MSw1MjIzMTQuMDI3MDM0NzYwMSw1NjQ2Mi43ODcwODM4NzkxOCw4NzcxLjIxOTk0Mjc0NjUsMjc0NjkuMTYzNDY4ODM3NDA3LDUxNTE3LjQ5NjkzNzIwNzA4LDE1OTU4OC4zMzQ1NTkyMzU0MywxMTgyMTcuNzM2MDEyNTQ5NDcsMTM0NjcuNTc0MTk3NTAwMzU3LDIxODgyNC45NTgxMDM1NDE4NywxOTM2MDguMjI2OTEyODcxMywxNDQ5NzcuMDY1NzU0ODQ4OCwxNDUyNi4wNDE2NzU4ODE0MzQsMTU4NDYuMjA0NDMyNjc3MjE2LDIzMTk1MC4xNzIzMzEwNDg1Miw3NjAwLjEzODk2NjY2OTk3NCwyNjM0NC4yMjMyMjE3NjYzMzMsMjI1NTQuNzIzMTk0OTU2MjUyLDIwODA2My42ODY1OTU2MzQxOCwzNjE1NC4wODUwMDQzODkzNywyNDkwNzMuNTU1ODAzODgxNjQsNDY4MTk0LjcwMDU2NTA1NzM0LDIxMjU0MS45MjgzODA2NTk3OCwzOTcyNy43MTg3MzE3MTAyMTQsODU5OTYuMTExMzE2MTc5NzcsMjQxMTQzLjA4OTc2NDE0OTIsMjk1NDUuMjQ4ODMzNDc3NzcsMzYxOTUuNjY0MDY2MTMxNDYsNzM2Mi4yMzE1MzAzNTEyMDYsMTMwMTA0LjIxMTU2MTE2NjE3LDY2MTI2OC43MDkzMjIzMjU5LDExNDc5MS41MzU4Nzc4MzIzLDE3NzQzMy41MDg5NjcxNjQ4NSw3ODQ0LjYzNTU4MDQwMTAxMSwxODAxMzEuNDEwMTQ1MjY5NjUsNjE5MjcuNjAwNzM1Njc1MjQsNDE0Ny44MDI4ODMxNTQ3OTYsNTQ4NS4yNDAxMjAwMzgyMQorNyxNb24gMzEgSmFuIDExLDQ0NDAzNS4wNDE5MTkwMywxMTY2MTAzLjU1NTMyOTExNzcsODExMTUxLjIxNzUxMjE3MDgsMzY3NTEyNi40NDYyNDMzNTY0LDEuNTE0MTgwNTAxNjcxNDI4NEU3LDMxODQ5NDYuODA2MDk1MTAzMywxMjk5MzIwLjU3NDYzNjIwMDcsNDI5OTUwLjgzNjQ3OTI5ODMsNDg5MS44NjEzOTk2Mjc3MjIsMS4xMTc4NTA3MzU0NjI2MjYzRTcsNTk4OTE2MS44MzY2NDM3OTcsOTIxODg3Ljk5OTY5MTQyNzMsNzE0OTg4LjgyNDE3ODc3ODYsNjMxMDU0LjMzMjQ5MDYyNzksODU3MzE1OS43OTYyMjYzNDcsMTk4NTc4MC42Mzg3NTg2MzM1LDM3NTU5NS4wMTg0ODg0MDcxLDEwNDQ3MzguNjUxNDgyOTE1NCwxNjk0MjA5Ljg5NzE0MjEyMzQsMzY5MDE3OS4yMzk4MTcwOTgsMjkyMDQ5Ny43NTQ4MjI1NzksNDU1NzAzLjYwMDc1ODU3OTI3LDU0NDU0NDIuODc2NjQzNzUzLDMzMzg0OTEuMTk0Nzk2MDk3LDMyOTM1NTAuNTQyODgxOTg0Myw1ODQwMjkuNDA3NzQ5MzQxNyw0NDEwMjIuODkyMjQ2ODk1NjQsNDk0MDg3OS45MDE2MjIzNzU1LDI0NzcxMS4xOTg5NzA5OTkxNiw3NzY4MzQuMjE2MDM2NjY1NCw2MTY2MjguNzcyODkzOTMyOCw0ODU2NTQxLjc0NTU0OTk4Nyw5NDg0MjUuMTYxMzU5NDg0NSwxNTE5NDgwLjY3NzM1MTQ3MiwxLjA5NDIyODQzMzU1NjU4OTlFNyw1NzQxMDI0LjQzMDg0MzM3NiwxMzA3MDUyLjg2Mjk4MzcwMywxOTg4NTM1LjEwNTcwMDIxNiw2MzY0MTI3LjkwMDM0MjA3Miw2MzgwODMuMTk3MTk3MjUxNCwxMjgzMzU4Ljk3NzcwODc2MiwyNTUyNjQuMjYxMDk0MTg0NjgsMzE3MjIzOC43MjM3MTg1NzQ3LDEuMzI0NzU4MTgyODc1ODk3NEU3LDE2MDg4NTYuMTIwMTIyMDkyLDQxMDkzMzMuMDU4NTQwOTU1NywyNDgwNjAuODIzMDc4Mzg1OTMsMzY5NjYwOC41ODE3NzIzMTgsMjAzNTQ4OC44ODA3ODg1MTIzLDE4Mzc5Mi42NTY4OTg2MzAwMywxODI2MjUuMDQ4Nzk4MjEzNworOCxUdWUgMSBGZWIgMTEsMzY5MDAzLjQ1MTI5NjkwODUsMzE5MzY4NS4zMTM0MDU3MDQsMTg4NTIyMi4yMjI3MjQ3ODQsMzAwMTIzOS44MjYxOTU4NDEsMS4wMTczNjAwMTY1MTY2MjU3RTcsMjQ1ODcxMy4zNzk4MjQyMjA3LDIzMjQ0MTIuNzg5Mjg4ODcxNSwyOTQyODEuNTc3MzA2MzU2NDYsMTg0NzIzLjY5NzMwNDczNTI4LDk0NjYxMDYuNTgxNTQwMjcsNDcyNDUwMC4zMDE1NjEyODYsNjY2NTEyLjI3NDU0MjMzMzQsMjExODcyNy42MDQxNDU0NTUsODQ2Njc0Ljc3MDY3MDk3MzIsNzQwMDExMC4zNDA0ODEwMTgsNDI0NTUwMS40OTM2NDk2ODQsMjAzODcxMC4wNzI2MzY3NywyOTA3NTAxLjQ4ODk2MzU4MjYsMzA1MzIyNC42MDYxMjUzNjk3LDM5OTgxMDguOTY5MTIzNTkyLDMzNzc2MTguOTMwMTk4NDMwNSw4Nzg3ODEuMjgwMzIwODcwOCw2MzQ2OTk0Ljk3MzczNDAwOSwyOTUyNDMzLjUwODEzNDQ4MzQsMzUxMTk5Ny4xMDQzMTIxNjk0LDIwOTcyMDAuNTQxNzYxNzg1Nyw1OTAwNjguNDg5OTI2MTU4NSw0OTk1NDAxLjc1NjM4MDI4Miw0Mzc1ODAuMjE0NTEzNTI0NjcsMTEzNDc3MC44OTUwMTQ1OTA2LDgwNDk5Ni43NTA3NTY5MzkyLDUzMDc4NjguMzc4NDgwMzAyLDExNzQzNDMuMDQ5NTU2MzQwOCwxMDU1MDA3LjM4ODY5NTgzODQsMS4xOTczMzk0MjMzNjAyOTkxRTcsNzM3NTc0Ni43MzU3OTc3OTMsMjM1NzgwOS4wNTE3NjA4NTIzLDIxNTQ1MDYuODk1NzkyNTU1NSw3OTM4NTkwLjQ5Mjg0NDYyLDY1MjEzMi4xMjYxOTcwNzU0LDI4MDkyNDMuNDA0ODcyMzUyMyw1MjQ0ODAuNzEwNDIzNDEwOCwzNjE4Nzg1LjIwMTgwMDc1NywxLjI4MDg1NzE3OTk1NzA0MjRFNywxMzAxOTE0Ljc3MjE2NTAyMDcsNDQ1ODczOS45ODIwNjI1NzcsNDExMjM4LjkyNDAzNTMzMjcsMzYzNDk0NC40MTMwMDg4ODczLDM2NjM5MDYuNzQ3MTczNjc1LDEzODA1NDAuODI3MjY3NzAzMSwzMzg2MjYuODY0NDAxOTQ0ODUKKzksV2VkIDIgRmViIDExLDI0NzI3MS40MjkyNDM1NzY5NywyMTUxMDA3LjgzMTk3MTA4NiwxMjY3MTg5Ljg2NzgwMzM1OTYsMjAxMTE3Ni4yOTQ1MjUzNzE2LDY4MzgwNDcuNjg5MzU5Njk4LDE2NDc3NjUuMjgzNjI2NTgwNCwxNTU5NTQzLjcwNTk1ODk2MjIsMTk3NTk4LjQ3NjMxODM3NzksNTY5NzUzLjYzNDU5Mjg2MjgsNjM0MzIzMC4xNzkzODY3MSwzMTY2MDk3LjU4NTc4Njk5NCw0NDY4MjIuNTA4NDk1MDkwOTQsMTQyODg1NS43MjIxNzE5MzM5LDU2NzU1OS4yODY0MDkzMTY4LDQ5NTg3NzUuNDU5Mzc1NzQyLDI4NTE2MDYuODYwMTg1NDQ5LDE0MDY5ODkuNDUyNDE0MzY0OCwxOTU4NzM1LjIzMjUxNzk2NywyMDQ4NjA1LjA4NzcwNjY5NDQsMjY3OTMzNC40MDUwMzg0OTE0LDIyNjM2NTUuNjQxOTc0ODEsNTg5ODQzLjM5NDMwNDA5OTcsNDI1Mzc0Ni45ODUxNDE5NzUsMTk3ODQwMi44MzEwMTM1ODcsMjM1MzUzNi4xNTA0MDAxNzA2LDE0MjA1NTcuMDIzODUxNjgsMzk1NTQzLjk2NjcyNzc4Mjc0LDMzNDc1MDcuNTkyMjY5NTU3NSwyOTM1NzMuMzU1MjY2MTg1NTQsNzYwODIyLjkxNDg4MjY3NDcsNTM5NTk0LjIzNTg3ODAwMzUsMzU1NzA5Ni42NzI3MzczMjQ2LDc4NzEwMy44OTg1NDE2Mzk5LDcwNzc5OC45OTI4NzUwNTE4LDgwMjQwNDMuMTYwNDM1MDYzLDQ5NDM4NzUuNTM3ODg5MDMzLDE1ODIwMTMuNDI5NTcwNzc3MywxNDQzODQzLjcyMTkzODAzNTUsNTMyMDkwMC4zODg0Mjc2ODIsNDM3MDA4LjE0MTA5MDQ4NzMsMTg4NzI2NC43NTU0Njc3NTg1LDM1MjE3OC4wMjc0MjgyMjk4NiwyNDI1MjQ3Ljc5NzQ3ODgyMTYsODU4MzA2NS42NTM0MTI3NSw4NzI0NDAuNzUwMTg2Mjc4OCwyOTg4MDMwLjEyODcwNDE5OTYsMjc1ODI4LjY2NzMwMjg4NzgsMjQzNTgwNS43ODE4Nzg5OTg1LDI0NTgzMzcuMDU4MjE5MDMzOCw5ODE4OTYuNzg2NzQyNTI2MywyMjcyMzkuMDQ4ODAwNDgyNDQKKzEwLFRodSAzIEZlYiAxMSwxNjU3MTguNTAyNTQ1NzI2MjUsMTQ0MTYxMC44NjIwNjM3MTk3LDg0OTI1NS43MjE2NzQxODUxLDEzNDc5MDEuMTk2MjU4MzE2Nyw0NTk2Njc3Ljc2NzEyMTUyOCwxMTA0NDg3LjE1MjUzNjk1OSwxMDQ1MTQ4LjYxNzY2MDYxOTcsMTMyNzQ4LjU3NzY5Njc0NzE4LDM4NDYwNC43NjkyNzU4MDM2LDQyNTEwNjguNjYzNjU2Mjc4LDIxMjIwODIuNjIwNDgxMTIyOCwyOTk2MjYuMDc1Mzg1MzUyNiw5NTc2MzEuODcwMDk3OTU2OSwzODAzNDEuMjMyODk0OTQwNTMsMzMyMzE4NC4zNDE2Njg4MjQsMTkxMTA5MS4yNTg0NjUzNDMyLDk0MzAzMy44MzkyODkyMjM1LDEzMTI3NTEuODgzMzUwOTg1NiwxMzcyOTAxLjAwOTI0ODI5OTgsMTc5NTQ4MC45OTg2NDQxODk3LDE1MTY5MzAuMDE5NTA5NTYxNCwzOTUyOTUuNjYzMjI0ODMyMDQsMjg1MDUzOS42OTQ3NzU0NzIsMTMyNTgyNy45MDM0OTg4MzA3LDE1NzcxNTYuMjk5NjU2MzMxLDk1MjA5MC41NTE0Njc2Njg4LDI2NTA2Ny42ODE5OTkzNDI2MywyMjQzMjQzLjgzNjIzODQwMTUsMTk2NzQxLjY1Mjk2Mjc5NzY3LDUwOTg1OS45ODczMzE1ODIzNSwzNjE1OTkuNTk1NDIzNzg5MywyMzgzNjg5LjIxODc0NTQ2MjYsNTI3NDYwLjU0NjkxNjc3NjcsNDc1MDUyLjQ2MTY0NTMwNTg2LDUzNzcwODkuMDkzMzIzNzM5LDMzMTMwNDQuNzMwODEyMjUyNSwxMDYwMjA4LjMxNjE1MjM3NjQsOTY3NTUxLjQ3OTc2MjY1OTksMzU2NTY4OC40OTk3MzA1NSwyOTI4NDkuMjExMzMzNDg4MywxMjY0ODEyLjE4NDkzMjM3MjMsMjM2MDIxLjUwNzA2MzU4ODcsMTYyNTIxNS4zMDA4NTk0Njg1LDU3NTE3NTEuNTgzMTM3NjY2LDU4NDcyMy40ODAyMjI1NTEsMjAwMjM0NC44NDU1MDE0NzgzLDE4NDg0OC4wNzYwNjc5ODM1LDE2MzIyOTYuNDczODI3NDYyOSwxNjQ3NDg4LjI1OTI4MjM2NjQsNjU4MTMyLjA0Mzg4NzkzMDIsMTUyMjg4LjAzNDA2MjExMzkKKzExLEZyaSA0IEZlYiAxMSwxMTEwNjguMDUzMTMzOTQ0MDMsOTY2MTc2LjYzNTc1MDI1MTYsNTY5MTY1LjE0MDkxMTcyNjcsOTAzNDE3LjM1Nzg1MzcxMzYsMzA5MDA4NS43MDUyNjg1MjYsNzQwMzc5LjE4NzU4MzkzMTMsNzAwNDI3LjA3MTE5ODY2NDMsODkxOTQuNzk2MTk2MTAzNTksMjU3ODA2LjM5Nzc2Njc3OTQsMjg0OTA4Ni4wMzg0OTY1NTUsMTQyMjQxMy44NTY3NTc2OTc5LDIwMDkzOS4wODU1ODc4NTU0Myw2NDE4MTYuNjc4NDQ1NTc4NiwyNTQ4ODMuOTY0OTc1MDY1MDMsMjIyNzE2OC4zMDQzNTM2NzIsMTI4MDc4Ni4wNTExODU4NDkxLDYzMjA2OS4yNjg1Nzk4Mzg3LDg3OTgxNi4xODIyOTEwOTQyLDkyMDA3Ny43NDYyMjQ2MTYzLDEyMDMyMjAuMjk1MzA2NzY2MiwxMDE2NTUyLjYxNDc5NDg2MDIsMjY0OTE3Ljg5NjUzNzYyMTU2LDE5MTAyNTUuNzgxNTA2NzEzNSw4ODg1MzkuNzc0NjI4OTcwOCwxMDU2OTEzLjM5OTUzNjc1MDMsNjM4MTE1Ljg4MzAzNDg0NjMsMTc3NjMzLjg2MjA2MDA1NjA0LDE1MDMyOTIuODA4NTg4NjQxNywxMzE4NTAuMDk2MDU4Mjk1MSwzNDE2ODMuNzEwNjg3NzI4NiwyNDIzMjMuNjcyMDEwNzI1ODYsMTU5NzQwMC42MTUyNzg4NDYxLDM1MzQ3Mi43MjMwODIyMzIsMzE4ODgwLjk3MjA2NjI0Njk2LDM2MDMzOTEuMzcyMzc1MzgwNywyMjIwMjEyLjU1MTkzMTc2MSw3MTA1MjAuNDIzMjM4MjcxNiw2NDgzOTMuMTQ3NzYyMTA5MywyMzg5NTEzLjk1MDA3NzAxNywxOTYyNTAuMzY0OTY2NTczMjgsODQ3NjYxLjY0MjgzNjE0NDQsMTU4MTc3LjQxODI0MDM0MDk1LDEwODkxMTguMzM3OTM5NjU2NiwzODU0NTI5LjU0NjkxMDU2NywzOTE5MTEuODEzODc5OTMzOCwxMzQxODQ3LjU3NzQ1NzE4NywxMjM4NzguMzM4NzkyMjA1MSwxMDkzODc2Ljg4ODcxNDY3NTMsMTEwNDA5Ny44NDI1MTk2MTE4LDQ0MTEyMy45MzA4NjMyNjYyLDEwMjA1OS4zMzc2NzkwMjYzNworMTIsU2F0IDUgRmViIDExLDc0NDQxLjQ5NjI0NjcxNDI2LDY0NzUzOC45NTQ4NzY1MTU3LDM4MTQ1MS4zOTcyNDEzMDgxLDYwNTUxNy45NjU2NDA1MDk5LDIwNzcyOTMuMDgxODU1OTAzMSw0OTYzMTUuNDI2NjEyNTYyOTcsNDY5NDA2LjgzNjg1ODQ1ODYsNTk5MzEuNjI3NjQ0NjY2OTgsMTcyODExLjUzMDk1MDYwNjg2LDE5MDk1MDIuOTcyMDgyNjk2NCw5NTM0NTIuMjIxMDg3OTgyLDEzNDc2MC4zNDk1Mjc3ODA5Myw0MzAxNTQuMjM0NTEzMzUyNywxNzA4MTAuMzYwMTkzMjA4MzUsMTQ5MjY1MS45NzM5NTgxNDg5LDg1ODM2Ni45NjQxNzIzNzA1LDQyMzY0NS4zNTA4MDE3NzI0NCw1ODk2NjAuNTk0OTA5OTM5NCw2MTY2MTEuMjI0NTA5MTk1NCw4MDYzMzEuMDk4MDM3OTUwMSw2ODEyMzYuMDI0ODk4NDg5OCwxNzc1NDIuMzYwNDAwMDUwOTQsMTI4MDE0NS40ODIzMDQxNjYzLDU5NTQ4OC4wMzUwMDUwMDQzLDcwODI4NS4xNDkyNDU0NjY4LDQyNzY4Mi40OTU0NDg1MTUzNCwxMTkwNDEuMjExNjcyODE3MzEsMTAwNzQzMC44NzUyMDc2NDkzLDg4MzYyLjE0MTMzNjUwODkxLDIyODk4MS4yMTM4NTE4MTcyLDE2MjM5Mi42ODY4MTgyNjY4NCwxMDcwNDg4LjI3NzI1OTgxMzYsMjM2ODc4LjA1NjgwNTU1NTI3LDIxNDA1Ni41MDg3NjM5MDg2LDI0MTQ3OTAuNjE4MDkyMzI0LDE0ODc4NjguNzA0NzA0NDc1MSw0NzYxNzEuNjMzNDkwMzU2MjcsNDM0NTE2LjkwNDYxNDQ2MzMzLDE2MDEzMjIuMTA4OTA1OTc1LDEzMTUxNi44MzY3NzIzNTY4OCw1NjgwOTQuMDI3ODI2ODkyLDEwNjAwOC4wMTQ4MjE3MzYwNSw3Mjk4NjUuMzc5MDQyODgxOSwyNTgzMTM4Ljc0NjUyNjE0LDI2MjY4NC42MzAyNDM4MzM5LDg5OTIzMS4yOTM1NDU4Mzc1LDgzMDE5LjAyNDk5MDIyNDgyLDczMzA2NS40MzQzOTM1NDY0LDczOTkzNi40MDMzOTY5MzQsMjk1NjcwLjgwODM2MjIxNTc2LDY4Mzk3LjY1OTUxMjg2MTIyCisxMyxTdW4gNiBGZWIgMTEsNDk4OTMuNTA5MTM2ODEyODYsNDMzOTg1LjgyNDgyMDcxNTA2LDI1NTY0Ni44NzM4NjcxNTkyMSw0MDU4NTMuMDQxNjk3ODE1MSwxMzk2NDM5LjE5MDUzMTM0NCwzMzI3MDkuMzMzNjEwMTM3MzQsMzE0NTgzLjg3NzE5Njc1MDE0LDQwMjY4LjA3ODU0ODYyMjA0LDExNTgzOC4xODUwOTY4NTUwMywxMjc5Nzg3Ljg0NzY1Mzg5NTYsNjM5MTA5LjYzMTM1MjkzMDgsOTAzNzguMTExNjUxOTU1MzUsMjg4Mjk1LjM1Nzk3OTc5OSwxMTQ0NjguNzMxMDQ0MzkwMzQsMTAwMDM4NC4xNTMxOTM1ODA1LDU3NTI2Ny40NjYzMjExODk1LDI4Mzk0OC45Nzc1NjQ2MDY2LDM5NTE5NS45OTU3OTQzODM0Niw0MTMyMzYuNjk2MTQ2ODQ5NSw1NDAzNjAuMDA4Mzk5OTMyNiw0NTY1MjcuMjEyNzQ2NTE3ODUsMTE4OTg1LjI2MjcwOTYxMTU2LDg1Nzg4My43Mjc5NDAyNjU0LDM5OTA5MC44MzM3MzA4ODA0Niw0NzQ2NTUuNDMxNDQ0MzA1OSwyODY2NDQuNDc1NzExNTI4LDc5Nzc1LjU2NTMzMjIwNzQsNjc1MTMyLjA2NjMwNjU5MjIsNTkyMTcuODQzNTQxNjYwODUsMTUzNDUzLjMwNTgwMDAyNDcsMTA4ODI3LjM2NTA4MDMzNDM1LDcxNzM4My42NjQwNDQzODM3LDE1ODc0My4xMTQ2MDM4Mjk0LDE0MzY5MC4wNDY3NTc1Mzc4NywxNjE4MjYyLjY4NTA0OTU4MjMsOTk3MDkzLjExOTc0Njg2MTksMzE5MTE3Ljc5OTI0NzI2MjcsMjkxMTkwLjAwNjg1NTkzODYsMTA3MzEyMS42MzU5NzEyNTQyLDg4MTM2LjEzMzAyMjE0OTU5LDM4MDczMS4wNjQ2NjkwMDQ2LDcxMDQ0Ljk3NDUxNDA2NzkzLDQ4OTExNS45NDA1MTc3ODM2LDE3MzExMTUuNzMwNDA3NDkzNCwxNzYwNjkuNTM1NTU3NzY0LDYwMjYxNi42OTgzNDYxMjI4LDU1NjM2LjU5MzIwMTU2ODYwNSw0OTEyNjguNTU2MjI2MzMzNjYsNDk1ODg1LjkyNzA0MzIwNjY0LDE5ODE3OC40MDgwNzI4ODcwMiw0NTgzOC40ODU5MTQwMjUzMQorMTQsTW9uIDcgRmViIDExLDMzNDQwLjYyMDM5ODEzNDg0NCwyOTA4NjAuODE2NjA0MDA4NjcsMTcxMzMzLjMxNzg5MjY1NjA1LDI3MjAyNi45NTU1MDk3NjA3LDkzODczMy44ODk4Mjk3NzExLDIyMzAzNS4yODgxNTU2OTI1NCwyMTA4MjUuNzUzMzI2NDcwMDYsMjcwNTUuMDQxNDE1NzUzODY1LDc3NjQ4LjA4ODA4MTUwNTg4LDg1Nzc0Mi40MjM5OTQ2MDEsNDI4NDAzLjY4OTY1ODI1NDMsNjA2MTIuODMzMTkyNjg0MTcsMTkzMjE5LjU3MTgwMzk5OTIsNzY3MTEuMzkzOTE5MzIyNjQsNjcwNDY1LjIyMTY5NjE3MzQsMzg1NTM3LjU4MDA3MTUwMzMsMTkwMzE3LjI0OTQ5Nzg2ODk2LDI2NDg2NC4wMzU5NTc4Mjg3LDI3Njk0MC41MDYzODE2MTUzLDM2MjEyMC45MjgyNDAyNTI4LDMwNTkzOS45OTkxOTQzMTUxNyw3OTc0MS41MTM5OTk5MjQ4Myw1NzQ5MDcuNTk3OTM3MjY5NywyNjc0NjcuODU3OTIzNzU1NTQsMzE4MDg5LjU3Njk3MDQ5OTA3LDE5MjExNi45NDY3MTcyODc4Miw1MzQ2MS43MDMyNjMxOTU4MSw0NTI0NDIuMDc5NzM4NzY1NTUsMzk2ODYuMTYxOTcwMTAyMTIsMTAyODM3LjgzMjg1NjU2NzgxLDcyOTMwLjY1ODUwMDU2MzAzLDQ4MDc1Mi42MzA3NTMyMzQxLDEwNjM4MS4zMjUzNTA4NzA5LDk2NDUzLjY0MjIzNDk5NzcxLDEwODQ0NzQuMDgyNjU0MzM1LDY2ODIwMS4xNTM2MjAwNDc3LDIxMzg2NC40OTExODIyMTU5OCwxOTUxNDAuMjY1NDAyMTk0NzUsNzE5MTUwLjIzNjM3NDU2MTYsNTkwNjQuNjE1MzkwNTAzNzcsMjU1MTYyLjI4MzgxMzY0OTcsNDc2MTMuMjgyMjIyNzg4NTMsMzI3Nzc5LjIyMDcxNTI3NzgsMTE2MDEyNi41MTYyOTczMDUyLDExODAxNC40NDIwNTczMTUzOCw0MDM4NDIuMDU1NTMxMjY2NiwzNzI4NS44MTMwNjMwODM5NiwzMjkyMjcuNDQ2MzczOTgxOTUsMzMyMzI5LjgyNTgwODAwNDk0LDEzMjgzMi40NTQzNzM1MzQyNywzMDcxOS44NzM0MDUwNDg0CisxNSxUdWUgOCBGZWIgMTEsMjI0MTMuMjcwOTk3Nzk2OTUzLDE5NDkzNy4yMDQ1NDEyNzQ1LDExNDgyNi43MzIzMzA1NDAyMiwxODIzMjguOTk2ODc0MTk0NjIsNjMxMDQ1LjQ3NTgyNDU0OTQsMTQ5NTE0LjMyNDIyNTE4OTQzLDE0MTI4OS43NzM5MDUyNjA2NiwxODE3Ni44MDc3OTY1NjM3OCw1MjA0OC42ODY5MTc5MjgwNTUsNTc0ODc4Ljk0ODA1MzU1LDI4NzE2NS4xMzk3Nzg0NDgwNCw0MDY1MC40NDA4ODAxMzkxMjYsMTI5NDk4LjQwNTk3MDE5MjYzLDUxNDA4LjI1MzcyMTEzODQyNiw0NDkzNTEuNTc5NDgxOTI2OSwyNTgzODIuNzIwOTc2OTU5OCwxMjc1NjAuMzk5NDUxMzQ1MTIsMTc3NTE0LjI3NzcyOTI1OTQzLDE4NTU5OC4yODE3MDc0NjQ1NCwyNDI2NzQuNTM2ODczMjU1MDcsMjA1MDI0LjU4MzU0ODEwNTQ0LDUzNDQxLjEzMDYxNzY2NTk0LDM4NTI3Mi4yNjM3NDU0NTgzMywxNzkyNTUuMjgxMjY2NzIwNjUsMjEzMTY3LjMwODcxNjgwNjUyLDEyODc2MS45NzM0OTMyMDczMiwzNTgyNy40MzA2OTI2ODU3NDYsMzAzMjA1Ljc5Nzc3OTA2NDksMjY1OTYuNTYwOTc0ODc5NTE4LDY4OTE3LjQ5OTUzOTExMjksNDg4NzQuNDc5MzE4MzY4MTUsMzIyMTc1LjEyNDE3NDI0MTE1LDcxMjkxLjE5OTUxMDYwMTg3LDY0NzQ0LjU5OTk4MTE3Nzg0LDcyNjc1Ny40MzI2NzQ5NDk4LDQ0Nzc5NC40NjUzMTAxMDcsMTQzMzI2LjQwNDExNzgzNjMzLDEzMDc3Mi44MTU4NzUxMDgwMyw0ODE5MzcuMDYwMDcyODE3MTQsMzk1ODIuMjk4NDYxMTE2OTEsMTcxMDA3LjIzODI0MzU2NjksMzE5MDkuNzAwNTQ2MTU0ODU4LDIxOTY2MC4wNzExODE3MjQ1OCw3Nzc0NzIuMzIyMDI5MTg3MSw3OTEwMS44NzM3OTUwOTQ3LDI3MDYzMy44Mjk3OTAzMDQ0LDI0OTg3LjcxNzgxODc4NjA0NSwyMjA2MzQuNDg5NTcyNDIwOCwyMjI3MTguNzIxMjk0MjIzODgsODkwMzMuMTk0NTI1NjY4NDYsMjA1ODcuNzI4OTcwMDAwMzU3CisxNixXZWQgOSBGZWIgMTEsMTUwMjIuMjg5NTUzMTMyMDg1LDEzMDY0OC4xOTU2NDU4NzI5LDc2OTU2LjE0MDA4NjU2Mzg3LDEyMjIwOC4wMDExMjY5OTQxNiw0MjQyMTYuMjMxNTI1NTc2NywxMDAyMjguODE1ODEwNTg1MzgsOTQ2ODguMzk5NzA4ODc3OTQsMTIyMTEuNzM5ODE4NTQ3NzU4LDM0ODg5LjAxODIzNzE4MDU2LDM4NTI5Ny4xMjM2MjE5ODM1LDE5MjQ5MS4wODIyNDA1MjExOCwyNzI2Mi41NzE5MjI0NDY3OCw4Njc5MS40NDgxNzQ1MjQ1NCwzNDQ1MS4yMzIwMTY5Njk1NDUsMzAxMTU5LjEyNDI0NzE5NzY0LDE3MzE2NC42NjE2NTI4NzYzLDg1NDk3LjQyOTEyNjgxNTM2LDExODk3MS40NTIwMzgyMTEyNywxMjQzODIuODIwMzk5MDA5MjQsMTYyNjI3LjQ1MDc0ODY5MDUsMTM3Mzk2LjE2Mzk5NTQ1MDksMzU4MTUuMDcwMDE3NDU4MjksMjU4MTg4LjIyMjE4NTM1MzM0LDEyMDEzNS42NTc4NzAyOTUyNCwxNDI4NTMuNDg3NzcxOTA2OSw4NjI5OS42MTY3NjAxNDQ3MSwyNDAwOS43NDA1NDA0OTc3NjUsMjAzMTk0LjE0NDUwNTMzODMsMTc4MjQuMjMyNjE1NjI4MzMsNDYxODUuNDM0NjgwMjExMDUsMzI3NTMuMTUwODc2MDI4ODM0LDIxNTkwNC4zNDgyMjA3NzgyMiw0Nzc3NS41MTcyNDcyNDYxNiw0MzQ1OS42NTgwNjM4NjQ2MDUsNDg3MDMzLjQ5OTc0MjkzMDY0LDMwMDA4OC4zNjYxOTk3NzQsOTYwNTMuMzkyMzY5NjIxMDUsODc2MzYuOTIyNzY3NTU4OTIsMzIyOTY4LjM1MjI1NzM5Nzk2LDI2NTI2LjEyMzc5NjIyMjAzNywxMTQ2MDcuMTExNjQ0NjYwMjQsMjEzODUuMzUwMzY1NTM4MTk3LDE0NzIwNC4wNzI1NjIwMzgzMiw1MjEwMzEuMjg4NTE0Mzg0NTMsNTMwMTkuODU3MDM1NDgzMTEsMTgxMzY0LjI0ODc4MzI0MjIsMTY3NDUuOTAxMDM4NTg3MzQ4LDE0Nzg1OS43NjQ0NzYxODAyOCwxNDkyNTkuODg3MDM3ODQ5NDYsNTk2NzUuOTQ0MDI5ODAzMzQsMTM3OTcuMzc0NTM2NzY3NzEzCisxNyxUaHUgMTAgRmViIDExLDEwMDY4LjU1MDY4Mjc2ODQ3Myw4NzU2MS4xMTk4NTY2NTYwOSw1MTU3NS40MDkxNTUyMTY0NzUsODE5MTEuMjU3ODY5NDMzODYsMjg1MTgxLjQ1NzQxMjU2MzksNjcxODkuNzIzNzU3NjQ1NTcsNjM0NTcuMzM4NDYzNTg2MTcsODIwNC4wMjA4NTQ0NzQ4NTgsMjMzODYuNjMyMDAyOTQ1MjEsMjU4MjM0LjkxNjgxODY2NDQsMTI5MDI5LjczNjY1NDQ2Mjk5LDE4MjgzLjkwMzc3NTIyNzk4LDU4MTY4LjYxMDc1NDg1Mjk0LDIzMDg3LjQzMzAxMTk2NTU5MywyMDE4MzkuMTk4ODA5MDY5NzMsMTE2MDUyLjQxMTMzMzgxMTY5LDU3MzA0LjYzMjg3MTUwNjU3Niw3OTczNS40NTAyMDAwMjMyMiw4MzM1Ny43MzAzOTEzMzQxLDEwODk4My45NjY1NDU3MjQ0OCw5MjA3NS4xMjYzMzUwNTg2NywyNDAwMi40MTk4NTA0Mjk3NSwxNzMwMjMuMTI0NDAyMDI5OCw4MDUxNC4wMjIzNzM5NzAxNiw5NTczMi42ODIwMTUyMjk1NCw1Nzg0MC4xNTM3NjA2NjA3MiwxNjA5MC4wODE5MDQ0MTcxNTUsMTM2MTcwLjgzMzQzMDA3MDIsMTE5NDUuMjQ5NDQ4Njk0OTc4LDMwOTUxLjM0NjE0NDQxODc1MiwyMTk0OS40MTg0MzI1MDEzNCwxNDQ2ODcuMTIwNjE5NjkyMjMsMzIwMTYuNTAxOTMxOTcwODM3LDI5MTcxLjk5MTAxMjMyOTQ4LDMyNjM4Mi44MTY2ODg4OTExLDIwMTEwMy4wMTkwNjE4MTEzLDY0MzcyLjE4Mzc5NzMxNTk1Niw1ODcyOS40NDIwNjExOTMxNiwyMTY0MzUuNTU5NDc3MTM2NTMsMTc3NzYuNDgwMjQ0MTA2NTg0LDc2ODA4LjIyODgzMTM0NTU0LDE0MzMyLjA3NTY5NDk5NzA5NSw5ODY0Ny44NDE4MjY1MzYwOCwzNDkxNzQuMDc0NDcwMDM1NCwzNTUzNy43OTI4MzI3MjcxNDQsMTIxNTQwLjMyMzcxMjg1NzI4LDExMjIyLjQ5NTg2ODk2NzA2LDk5MDg5LjEwMjkxNzExMzMsMTAwMDI5LjU5ODE5Nzg2MDg4LDM5OTk4LjczMzczNjQyMjI1NSw5MjQ2LjYzMDU3NzI5MTQ2NAorMTgsRnJpIDExIEZlYiAxMSw2NzQ4LjM0OTA3NDQ0NzcwNiw1ODY4My43ODg1MDg0ODE0OSwzNDU2NS4zNDc1NzU1MTgwNCw1NDkwMS45MDk2Njk1NjYwMywxOTE3MTkuNzUxODAxMDU2NDQsNDUwNDEuNTgxNTM1Mzk2MTksNDI1MjcuMDg0ODUxMjcwMTU2LDU1MTEuNDgyMTUyNDEzNDg4LDE1Njc2LjQwODI1ODQzMDE3LDE3MzA3NC43NjkxNDU1NTMyNiw4NjQ5MC42NzEyMTQ4Njk2NSwxMjI2Mi4zMDg2MjU1NTIwMjcsMzg5ODUuMTcwODk5NzEzMjYsMTU0NzEuOTUyNzA5MTQ4ODM0LDEzNTI3NC4wNDIzNTE1NDk3NSw3Nzc3Ni40MDM1Nzc4NDk4MSwzODQwOC4zNTgzMTk5MzczOSw1MzQzOS4wOTQ5MjM5MTEyMyw1NTg2My43NDU1ODYxOTcyMyw3MzAzNC44Mzg1OTE2ODY5Myw2MTcwMy4zNDA4MTYxNDM1MiwxNjA4NS44MTE2MTc4MzUzMDgsMTE1OTQ5LjkzNDMzMTU5NTkzLDUzOTU5LjgxMzIwMTMzOTA4Niw2NDE1NC42Nzg3Mjk3MDAyLDM4NzY1LjgzMjk4NzY5MTgzLDEwNzgyLjcwMjc0MjYzODExNCw5MTI1NC44MjQwOTcyNjE2NSw4MDA1LjMxMjM4MTI3NTI0NywyMDc0Mi4wOTY0ODgzOTcwODUsMTQ3MDkuMjg0MjY1NDQwMzk0LDk2OTYwLjk5MzEyODMxMTE0LDIxNDU1LjYxNDg2MjM5NTcyNywxOTU4MS40NDUwNTYzNjk2NzcsMjE4NzIyLjk4OTA5NjQwODYsMTM0NzY3Ljk0Nzg3MzE5MTk0LDQzMTQwLjIzMTA0MTc4NzA0LDM5MzU3LjEyMjQ0MjAyNTE4LDE0NTA0Mi42OTU2Nzk4MTU0NiwxMTkxMi44NzQ0MTA4NzkyMDksNTE0NzUuNzU2MzkyNjM5OTgsOTYwNS4wNzEwMzAyMjc0NjcsNjYxMDcuOTk3NTM2NjM2OTIsMjM0MDAxLjc2MDUxNzcwNjU0LDIzODIwLjAzMTkxMDY2NTk3NCw4MTQ0OS4zODM1Mzg4MDIyNiw3NTIwLjg4NjUwMzY2NDUzOCw2NjQwNC45ODQ4NDIxMTM3Niw2NzAzNi43MDAxMTYyNzk2LDI2ODA5Ljc0Mzg5ODQ1NjQsNjE5Ni44MjU0Njg0ODQ1MjE1CisxOSxTYXQgMTIgRmViIDExLDQ1MjMuMDExNTczNTMzMzA1LDM5MzI5Ljk3NTMxMjU5MjM3NCwyMzE2NS4yODk3OTA3Nzk3MTIsMzY3OTguNTgxOTI1MjExMDYsMTI4ODkyLjU3OTkwOTk0MTk3LDMwMTk0LjMwMjg2NTE0MzE0NSwyODUwMC4xODg2MzM1MDE4NywzNzAyLjU4NjkyOTYyMjYxNSwxMDUwOC4xMjg3NzcxNjA1OTcsMTE1OTk4LjM4Nzg1NDI4MzE4LDU3OTc2LjA5NjIxMDcyMzMzNSw4MjIzLjg5MjM0MDM4NjI4MywyNjEyOC4xNjczOTE0MjA4OCwxMDM2OC40MjU5NzI3MDE4OTQsOTA2NjEuNDQ4NjcyODQzNDksNTIxMjQuMjc2NzEzNzM2MzIsMjU3NDMuMTA1MjE1NTg2MDEyLDM1ODE1LjA0MDM0NjcxMzI2NCwzNzQzNy45OTUzNjE4NjE3NCw0ODk0My41OTU3NTk4MTI1Nyw0MTM0OS43ODg5MDQxNDI5MywxMDc4MC4yNjI2OTEyNjY3NzMsNzc3MDIuNTIzMDIxNDMyODIsMzYxNjMuMzI5MTkzNzc0OTYsNDI5OTIuNzA4MjM3ODg5NzgsMjU5ODEuNzA4MzY0NDE4MTA0LDcyMjUuOTU0NjQ2OTgzMTcxLDYxMTU0LjE2NTE3OTEyNTc1LDUzNjQuODc2MDc3NzU1ODEyLDEzOTAwLjI5NDQ4OTg0OTA2LDk4NTcuMzA3MDI5MjUzOTgsNjQ5NzcuNDM0MzY4MjkzMzEsMTQzNzguMjU4MTQ3OTc5Mzk5LDEzMTQzLjg5MzA4NzQxMDU4OCwxNDY1NzQuOTk5MDQwODcyMSw5MDMxMy41Mzg5NTExMDA1OSwyODkxMS4xMjkzNDMwMjkyMTMsMjYzNzQuNzk3NjM2NjU5MTk0LDk3MTk4Ljg5NjcxMDIyNzU1LDc5ODMuMzYxNTU3NDQwNTI4LDM0NDk4LjE4NDI5MjkzNTgyNCw2NDM3LjEwNDEwMzg3NzI5NCw0NDMwMS41MjY0NDEyMjQ3NywxNTY4MTcuNjIzNDk2Mzc2NSwxNTk2NS45MjYxMjQ1Mjk3NCw1NDU4Mi41MTU2MjY4MjQ1MzQsNTA0MC4xOTAxODY5OTQ5NzgsNDQ1MDEuNDM1NDAzOTc0MzksNDQ5MjUuNzI1MTcxOTMyNzc2LDE3OTY5LjYwMTQ3ODI3MzczNyw0MTUyLjkxODQ5NzgyMjQyNgorMjAsU3VuIDEzIEZlYiAxMSwzMDMxLjQ5NTA4NzU1MDAzNCwyNjM1OC44ODU0OTYyMTM4MDMsMTU1MjUuMDE5NjIwMDIwMjIzLDI0NjY0LjU5OTUzODQ4ODI2Myw4NjY1OS45MjcwMjQ0NDI1MSwyMDI0MS4yNDg1MTA2NDUzOTMsMTkwOTkuNzI0NDYzOTcyMzUsMjQ4Ny40MTA3NTAyMDQ4MjgsNzA0My43NTI3NTg0Nzc0MTEsNzc3NDQuMzUwNDc0OTY5MjIsMzg4NjIuMzM0NTYzNTU0NDU0LDU1MTUuNTI0ODQzNzI2MTI3LDE3NTExLjIxOTkxNzQ5NDQ3LDY5NDguMjgyNzc0Mjg5OTcsNjA3NjEuNjA4MTg4ODI3NTYsMzQ5MzIuNTA0MTQyNjAxNzgsMTcyNTQuMTk3NjU5NDMyNDMsMjQwMDMuMjI4MzI5NTEzODYsMjUwODkuNTIxNDQ2MzMzMTQsMzI3OTguODU3ODU1NjExODE1LDI3NzA5Ljg5NDc2NjE5NzQxLDcyMjQuNTg3NTQxNzgzNTM1LDUyMDcxLjA5MjUzMzIzNDExNCwyNDIzNi4xOTg0NjUxNzE3MDMsMjg4MTEuMDAxNDc0OTg5OTc1LDE3NDEzLjQzNjE0MTI3NTMzNSw0ODQyLjM5MDE3ODQ1NTM5OCw0MDk4Mi4wMzIwODgwNDc0OSwzNTk1LjMyNjUwMjcwNDU4OCw5MzE1LjIwMzg4NTY5NDkxMSw2NjA1Ljc0NzQ1OTk5NDAyNSw0MzU0My42NzY2NzMyMDk4OSw5NjM1LjM3Mjc2MjU4NjYyLDg4MjIuODc4MDQ1NjE5MTMzLDk4MjI1LjA4MTcwOTY2MDExLDYwNTIyLjM4NTk2NjAyMjI5NSwxOTM3NS4xNDI0NjUwNDY0MTgsMTc2NzQuNjk3MjQ5MDk2MDc2LDY1MTM2LjM5ODE3OTk2OTMyLDUzNDkuOTgwOTE5NjM3MTk0LDIzMTE5Ljk2OTk1NDY2ODA2NCw0MzEzLjk3Nzk1OTIwMDY5OSwyOTY4Ny45NTk3ODQ5NjE1ODIsMTA1MDkxLjYxMDQwODgzMzUzLDEwNzAxLjUxOTQ5NDQwMjcxOSwzNjU3Ny42OTU1MDUyMDExLDMzNzcuNzA2OTE5NjU5MjM3LDI5ODIyLjU0NTQ1NjcwMzk0LDMwMTA3LjUwODYwMTgxODM1NywxMjA0NC4zNDQ2NDUwMzE2MzksMjc4My4xMzg2NzUyNjEwNzI0CisyMSxNb24gMTQgRmViIDExLDIwMzEuODIwNDUzODE4MDgyMywxNzY2NS42MDk0MDI4NTg5NiwxMDQwNC41ODEyNDg0MTk4OTQsMTY1MzEuNjY1NzI4MzY1ODkzLDU4MjY4LjEzNDgzMTEwNTk4NSwxMzU2OS4wNzc5NzM5NzQxNDgsMTI3OTkuODMwMjk3MjE4ODk0LDE2NzEuMDQ4NzA2MzAxMjU3Miw0NzIxLjUyOTU4NzU2NTEwMyw1MjEwNS42NDMxOTA0MTQxNywyNjA1MC4wNzgyMDgwMTQxNTQsMzY5OS4xMjY5NDY2MTU1MjA0LDExNzM2LjA1NTM4OTE1NTAwOCw0NjU2LjI4NjE5NDc0NDU4OCw0MDcyMi41MjMxMDcyMDUzMiwyMzQxMC44NTgwMjcwMDYwMSwxMTU2NC41MTYzNjg5NzIxMTYsMTYwODYuODkwMTM5MzQxODQsMTY4MTMuOTU2NDc0OTkwMDAyLDIxOTc5LjU3MTE5MDMyNjU5LDE4NTY5LjIzNTIxNjI2OTc5Myw0ODQxLjY2MzM5NTQ5Njg4MSwzNDg5NC40MDYzMzQ2NjA1MywxNjI0Mi43MzUzOTc4NjY0NDEsMTkzMDcuMjEyNzk5MTI4Mjk0LDExNjcwLjc3NjMzNTAyMTAyLDMyNDUuMDUzNDYwNjEyNiwyNzQ2My42ODE0NTc0MzMzMzcsMjQwOS40MzIxODE5NDE2MTIzLDYyNDIuNDk2MzM4MDAxNzE2LDQ0MjYuNzMxNDAyNjUyMDQ0LDI5MTc5Ljk5ODUxNzIwNjc3NSw2NDU2Ljk2Mjg3ODgzODI3Miw1OTIyLjQyODk5MDgzNDQ5Niw2NTgyMy43MzU4NTIyODY1LDQwNTU4LjAxOTc0MjM5NjUyLDEyOTg0LjQxODQ0NzA5MTQwOCwxMTg0NC4zODM5NTgyNjI3MDQsNDM2NDkuOTQxNjY1NDExMSwzNTg1LjIyNTI5MTM3ODgxOCwxNTQ5NC40NTMxNjY2NDY3NTcsMjg5MS4xMDA1ODI5NTQyMjksMTk4OTQuODAwNTc2NzM5MzIsNzA0MjcuMDA0NTAxNDczNTgsNzE3Mi45Mjg0Mjk1NTYwNjcsMjQ1MTEuODg4NzQ2NjM0NDM1LDIyNjMuNTczODYyNDg5MTAwNSwxOTk4NS40MjE3MTU3MjU4OTQsMjAxNzYuODAwMDY0MTI4MjU2LDgwNzIuODUyNDgwODg4NDc1LDE4NjUuMTUxMjg1ODA0NjgyOQorMjIsVHVlIDE1IEZlYiAxMSwxMzYxLjc4ODU2ODAwMDY2NywxMTgzOS4yMjg0MzA5NzAyNDYsNjk3Mi44MzY5Nzg5ODIyMDEsMTEwODAuNDE5MTIwNzg1MDM0LDM5MTg3LjQwNzQ2OTY4NjI1LDkwOTYuMzIzMzEyMjI2OTA1LDg1NzcuNzMzNjgyNjgwNTcsMTEyMi43NjQ3Nzk3MDgwNTE1LDMxNjQuOTA2NTY4MDE3NTI5LDM0OTIxLjcxNDk1NDAxMzE0LDE3NDYxLjgwNTk5MTI4NTI2LDI0ODEuMDA5OTI4MjA3NDY4LDc4NjUuNDExMjMzOTk5MjE3LDMxMjAuMjY4NDQ0ODIyMTAzNCwyNzI5MS45MjE2NDIxNDE0NCwxNTY4OS4wNjMyMDkwNzQ2Niw3NzUwLjk2Nzc2MTI1NTg3OCwxMDc4MS4yMTczNTEwMjIyOTgsMTEyNjcuNzg5NjQ4NTQ0OTI3LDE0NzI4Ljg4MzcyOTYzMjI4MiwxMjQ0My41MTYxNTQzNzY4OCwzMjQ0LjY0ODkzMzc1Mjg5NDcsMjMzODMuMjUwODE4MTE0NjUsMTA4ODUuNDY0NDc1ODkwMDc2LDEyOTM4LjExNTExMzEyNjI5Niw3ODIxLjg0NzIwNTk5NTE2OSwyMTc0LjU3MzIyNTE4MTA0NCwxODQwNC4xMDA2Nzg1Mzk2ODYsMTYxNC42NjQzNDk1ODg3NDMzLDQxODMuMjU3NTk0NjY2OTE4NSwyOTY2LjQzMjE3MjgyNjgsMTk1NTMuOTk2MDc2NDM0MDY1LDQzMjYuOTExNTYyNzQxNjA5NSwzOTc1Ljg0ODA2MTk3NjQwMyw0NDEwOS41NjE1MTM4MDQyMiwyNzE3OC42MjM1MjIzMzYwNzUsODcwMS40NDQ5NDYxMTgxNDEsNzkzNy4xMjI3MTk2NTMwNiwyOTI1MC41MTgxNzE4NzM4MSwyNDAyLjU0MjkyNTI1MzgxOSwxMDM4My44MjY0NjU3MjgxNjMsMTkzNy40OTM5ODkyNDAwNTcsMTMzMzEuODAwNDIxMTQzNjI1LDQ3MTk1LjU5ODg0NzM2MzEsNDgwNy43ODczNDI0NzUxNzEsMTY0MjUuODMwMjc4NjMzNjAzLDE1MTYuOTA0NjExODMxNjc0MiwxMzM5Mi44NDQwMjI1MDA3ODcsMTM1MjEuMzgwMjgxNzY2ODk4LDU0MTAuODc1MzU1NjA0NDg1LDEyNDkuOTI3MDk5ODczMjIxOAorMjMsV2VkIDE2IEZlYiAxMSw5MTIuNzE0MDUwNDEyMjIwMiw3OTM0LjQ3NjU0NjEwNTE5NCw0NjcyLjk4NjgyNTUyNTMyOCw3NDI2LjcwODcwNjM5MDAxMSwyNjM1NC4zMjk4OTc3OTA0OTIsNjA5Ny45MTcxMjQ1NzI0NTY1LDU3NDguMzIyNTQ3NjM4MDY5LDc1NC4zMjg0MzMyNjU3ODE5LDIxMjEuNDgwNjM2NTE3MzA5LDIzNDA0LjkxNjk5ODEzOTc4NiwxMTcwNC45NTI2ODczNDU3NTYsMTY2NC4wMDU4NDUyMTk4ODc1LDUyNzEuMzM3MzI2OTc4MjAwNSwyMDkwLjk1NDc4ODQ2MTQxNTMsMTgyOTAuODY4MDgyODU2NDU0LDEwNTE0LjIxNTA1NDE1MDM2OSw1MTk0Ljk4NjQ1MTc4NDYzMyw3MjI1LjQyODUxMzMxMDMxNCw3NTUxLjA1NzI2NDg4MjExNiw5ODcwLjA4ODQ2NjM0NTI0Miw4MzM4LjU5MjI0NDkzNzExNiwyMTc0LjQwNzk2MDQyNjY5OCwxNTY2OS40NzYxMzc0MTU1NjgsNzI5NS4xNzE5ODg3NjA2NDMsODY3MC4wNzg4ODkyNTQzNzEsNTI0Mi4yNjUwNTgxMjkyMzksMTQ1Ny4yMjQ5ODYwMDcyMjcyLDEyMzMzLjA2Nzc5MzYwOTkzOCwxMDgyLjA1Njc0MzEzNzU2MTYsMjgwMy4zMTA4MDEwOTM3MTUsMTk4Ny44NjEzMzE3MDAzNzQyLDEzMTAzLjQ3MTQwMTU4MTc1NCwyODk5LjUzMzk5NzIwOTg1OCwyNjY4Ljk4NjkxNzc0NzcwNzYsMjk1NTguNTc3OTAzNjAwNTcsMTgyMTIuODc4ODQxNzA1NjIsNTgzMS4yMzQwMjMyODk2NjgsNTMxOC44MDc5MDg4NTE2MTksMTk2MDEuMjU2NDYyNjQ5NTgsMTYxMC4wMDIzODQwMjcxNDksNjk1OC44NzAzMzQ1MDgzNjk1LDEyOTguNDI3NDg0ODY4MjkyNiw4OTMzLjg0Nzg5ODU1ODI3MywzMTYyNy40NzM4MjM1Njk5NDgsMzIyMi41MTIyOTU4NjU5NTEzLDExMDA3LjI0MTAzNjQyNzY0LDEwMTYuNTM0NTIxMTg5MTI0NSw4OTc0Ljk3MDAyOTA2MzQyNSw5MDYxLjI4OTA3NTMxOTY5MiwzNjI2LjY3MDE5MDYzMDA2OSw4MzcuNjM2MzQ2NzIwNDg3OAorMjQsVGh1IDE3IEZlYiAxMSw2MTEuNzMwOTgwNjYzOTYzLDUzMTcuNTcwNjA1MzE2ODY2LDMxMzEuNjk3MDI1Njg3OTkyLDQ5NzcuNzk3MzU1OTI1OTE5LDE3NzIzLjQyMDg5MjM3OTkxNiw0MDg3Ljg3MTM1NzU0NzA3MywzODUyLjIwOTcyMTc0NTE0MSw1MDYuNzYzMTcwNTY1OTYzNSwxNDIyLjA1NzgwNzcyNDc2NzgsMTU2ODYuMjU4OTIxMzkwMzg4LDc4NDYuMDQwMzA3ODg1MDQ1LDExMTYuMDM2MjYzMzcxNDk4LDM1MzIuODA5OTQyMzYyMjYwMiwxNDAxLjE5MjIwOTAyNzgzMTcsMTIyNTguNDQxOTgwNTY4MjI2LDcwNDYuMjMwNzE3MzgxNTE0LDM0ODEuODczMTE5NDY0ODMxNyw0ODQyLjM4NzIzOTQ5NzU3OSw1MDYwLjMwODc2MzM2NzczMiw2NjE0LjEzMTgxNTg5NTgwNiw1NTg3LjgyNjA2MjM1NTU4LDE0NTcuMTg0NDg2NTI1MTc0NCwxMDUwMC4zNjk0MjU0MjEwNCw0ODg5LjA1NDQzNzA3NjEzMSw1ODA5Ljk5NDEzODkxNjcyLDM1MTMuNDA4ODM1MTE2NzMyLDk3Ni41MTY0NjkzMzUzMjg4LDgyNjQuNzIzMDI0NzA3NTc1LDcyNS4xMzM2MjM4NjI2MjMsMTg3OC41NzM2MjcxODgzOTczLDEzMzIuMTA0MDgwMzU3MzM4NSw4NzgwLjg3NDgyNzA4MjU4NywxOTQzLjAyNzA0ODg5NzA5NzUsMTc5MS42Mzc1NDE2NTMxMDczLDE5ODA3LjczOTIwODk0NDk3LDEyMjA0Ljc4NTgwNzkzOTI1NCwzOTA3Ljc3NzExNTA3OTcxOSwzNTY0LjIzMzE1NDI4ODAzOTMsMTMxMzUuMTQwMDA0OTU1NjIsMTA3OC45MDMzMzgzNDA1MjU2LDQ2NjMuNTg4NDgyMDIzODU0LDg3MC4xNTIxNzI0OTkyMTM1LDU5ODYuNzE4NTE0MzI2MjA5LDIxMTk0Ljc0NjMyNDg5ODcyNiwyMTU5Ljk1MzkzMzM1MTYzMyw3Mzc2LjE1Nzk4MzYxNzAyLDY4MS4yMTgyMTA3MjQ0OTQ4LDYwMTQuNDIyMDM4NTA2NzU3LDYwNzIuMzgzMTIwODI3OTAyNSwyNDMwLjc5NjU3MTk3Mjc3Miw1NjEuMzQwNzI2NTY5MDU4CisyNSxGcmkgMTggRmViIDExLDQxMC4wMDI4NjcxMTIzMDk0LDM1NjMuNzU5MjA5MjUzOTgzNSwyMDk4Ljc3MTAyOTM3ODI5OTMsMzMzNi40MDQxMDUyOTg2ODYsMTE5MTguODIyNDIzOTg5MDQsMjc0MC4zOTM4ODg0OTI4ODEsMjU4MS41NDA0NzYwMzk1MjcsMzQwLjQyNjQ0OTY1ODI5ODU3LDk1My4yMjUwMTQ1MzI2MjEzLDEwNTEzLjEzODI4MTkyOTQzMiw1MjU5LjM0NjMwMDU2MjkzMSw3NDguNTEyMjUxMzA4Mzc3LDIzNjcuNjYyNjgyOTAxMDksOTM4Ljk2ODgyMDkwOTM4MDMsODIxNS41NTY0MjYwNDE5OTQsNDcyMi4xMjAwMzk1NzU3MTUsMjMzMy42ODEwMzE0OTY3MjgsMzI0NS4zMDUwNDM2NjQ1OTE3LDMzOTEuMTQ2MDA2ODc1MDMwMyw0NDMyLjI2MDAzNDg3MDA2LDM3NDQuNDk3NDM0NDI1MzE3LDk3Ni41MzU5NjMxMzE5OTE4LDcwMzYuNDc1NjUyOTk1ODcsMzI3Ni41MzYyMDI3MDk0NTEsMzg5My4zOTkyNjI3ODcxMDI1LDIzNTQuNzE1NjM0NTU0NjM4Nyw2NTQuMzg0Mzc4OTA0ODA3Niw1NTM4LjQyMzM1OTg5OTIsNDg1Ljk0NDA2MDcxNzgyNDgsMTI1OC44ODM0MzQ1ODQ4MDYzLDg5Mi42NjkzODE3MzI0ODQyLDU4ODQuMjMxOTQzMTcwMTU5LDEzMDIuMDU2ODI5ODM5OTc5LDEyMDIuNjU1MzY2NzA5NjkxLDEzMjczLjU0Mjg5NjM0NzAzOSw4MTc4LjY1OTg0NjE0NTA0NywyNjE4Ljc4MTgyMzEyNDk3MSwyMzg4LjQ2Mjg1MTEzOTczODYsODgwMi4wOTI4ODQwMDIxNzIsNzIzLjAwMTUxMDQ2NjI2NjUsMzEyNS4zNzI5NjQzMzM4Nzc1LDU4My4xNDAwNzY2MjAwMDc4LDQwMTEuODAzNTEyMjc0ODI3LDE0MjAzLjQxMDg0ODA3OTU3MywxNDQ3Ljc1NDYxNTE1ODg5NSw0OTQyLjkwNzk5Njk3MDA3MSw0NTYuNTEwMzQ0NTE4MDMxMTYsNDAzMC40NjgwNjIzODY1MTQyLDQwNjkuMzgyOTY0NDYzOTYzNiwxNjI5LjI1NTQ2ODE5MzMyMzQsMzc2LjE4MTgxNTg4ODc4ODE1CisyNixTYXQgMTkgRmViIDExLDI3NC43OTgyNjIyOTQ3MzIzNSwyMzg4LjM4MDY0MzY0MTgzNTQsMTQwNi41MzQ5MTk0MzU2MywyMjM2LjI1MTcwMjc0NzU5MDYsODAxNS4xMDk2NjE3MjUxMDgsMTgzNy4wODMxODI3NDA5NDQ3LDE3MzAuMDA4MjU1NDI4NzAwNSwyMjguNjczNTk0MzgwNjMwNSw2MzguOTU5OTEwMjg2OTc4LDcwNDYuMDU1OTg3MzY4MDQyLDM1MjUuNDQwMjA3ODAwODczNCw1MDIuMDE1MDA4OTY3NzA0NywxNTg2Ljc5MDA3MDQzMDA1NzgsNjI5LjIyMzYxNDYwODg0NjIsNTUwNi4wNDA4NjgxNjgzMDQsMzE2NC41ODkyMzAyNTU5ODY0LDE1NjQuMTIwMDUzMDA4NjQ3MSwyMTc0Ljk2MTc5NjMxODUwMSwyMjcyLjU2NDI5Mzc4MTY5NzQsMjk3MC4xNDg3NDgxNDU1NDMsMjUwOS4yNTQ0ODg2NzEyMDUzLDY1NC40MjgzOTgxNTAwNjk0LDQ3MTUuMjY3MTc5OTk1ODkyLDIxOTUuODY1OTM2NDAxNjc3NiwyNjA5LjA1MjMyNzExNzA0NCwxNTc4LjE1MDExMTkyMjU2NDUsNDM4LjUxNzIyOTAxMTM1OTIzLDM3MTEuNDU4ODg4ODI0MTU2LDMyNS42NTI3NDIzNDAyNjkzNiw4NDMuNjEyNzYzNDk3Njc1OCw1OTguMTk2MDI3MzQ0NTk4LDM5NDMuMTQxNDE1NzY2MjA0LDg3Mi41MzIyNDAzNzg1MzU2LDgwNy4yNzE5MTYxMjk2Mjg0LDg4OTQuODY1MzI4NjM5NjE1LDU0ODAuNjgxMjk3MTAwNDU0LDE3NTQuOTY3NDU4NjMwMDU3MywxNjAwLjU1ODE1MjY3MjMwNTgsNTg5OC40NDYzMjAxODI4NjIsNDg0LjUwMzA1Mjc4OTc2NjU3LDIwOTQuNTE1NzY1MTIxMjQwMywzOTAuNzk2NTY4MzMwMjkxNDUsMjY4OC4zODIxMTQzNzU0Nzk0LDk1MTguMjY0NzMwODQ4MDg4LDk3MC4zODkyNjI2MDk3NTcxLDMzMTIuMzQzOTI3ODE2OTYxMiwzMDUuOTI1MTk5NTU2ODI2MiwyNzAwLjk1NzUyODE2OTQ5OCwyNzI3LjA4MTg5MDQxOTE0NjUsMTA5Mi4wMTc5NTM5MjM3MTgzLDI1Mi4wOTc5MTM1MzcyOTA5CisyNyxTdW4gMjAgRmViIDExLDE4NC4xNzk2ODc3OTI0MjY4OCwxNjAwLjY1OTA1MzEzNTYzOSw5NDIuNjE4ODM0MjA3OTkxOCwxNDk4Ljg2Nzc1MzUzNzEzNiw1Mzg5Ljg0MTYyMjIxMTY5LDEyMzEuNTI5MTg1MTE5MDY2NiwxMTU5LjM1ODE4NDU1MTA2MDMsMTUzLjU5NzQzODcwODMxNjYyLDQyOC4zMDM2NjUwNjk3OTI5NCw0NzIyLjM3NTQyMjU2ODQ1OCwyMzYzLjE3MTczNzI4NzUzOTYsMzM2LjY5MTE1MzYyNjkwMzEsMTA2My40NTUyMjIzNDg4NTM2LDQyMS42NTY5MjQ5MjA0MzYyNywzNjkwLjEzODAzMjAxOTg5NCwyMTIwLjc5MDc4MTgwMzIyMjcsMTA0OC4zMzE2NjYxMjUyMjM4LDE0NTcuNjMxODIwMzI0Nzc4OCwxNTIyLjk1MTU0NDY0MDAxNDIsMTk5MC4zNjA1MDcwNTcwMzQzLDE2ODEuNDk4MTQ2OTE1MDQzNyw0MzguNTY3Mjc1NzAyMDk4NjQsMzE1OS43ODc4NjAzODM3MDUzLDE0NzEuNjI1ODg1NTQxNDk0NCwxNzQ4LjM4NTY0MzUzNjY3NjgsMTA1Ny42ODk1NjA3NTk3MTc2LDI5My44NjAyMDg5MjI3MTg4LDI0ODcuMTYwNDk1MDY3OTA2NiwyMTguMjM0NTA5MjAwNDExNiw1NjUuMzI4NzcxMjk3NDc5NSw0MDAuODYzNzc2MzczMjMzMjQsMjY0Mi4zODEzMjM5NTM5ODI3LDU4NC43MDA1MTE3ODcwOTQsNTQxLjg1OTExMDA2NDY4NDcsNTk2MC42MzQxMTU5NjYyNjgsMzY3Mi43MTYxNjk3MzU1Mjg2LDExNzYuMDg1ODc2Nzk1MzEyNywxMDcyLjU2ODQxMzI4Nzc4NDYsMzk1Mi42NjI3MTA1NjkwNjIzLDMyNC42NzkyMDM3MjAzNjE2LDE0MDMuNjcxNzc3NTY1NjI2MSwyNjEuODk1OTM4NjIxODQ5ODQsMTgwMS41MzU2Njg4NDgxMzgsNjM3OC41NzQxMzc3NDEyNDEsNjUwLjQyNTQ5MDk5MDA2NzEsMjIxOS42NzI0ODIyNTkwMzc3LDIwNS4wMTI0MDIzNzM3NzgxNywxODEwLjAwODg4ODU0Mzk4NjQsMTgyNy41NDQ3MjI0NjAwNjY5LDczMS45MzE0MTc2MDg0MDMsMTY4Ljk0MzI3NTM4NDI2MzUzCisyOCxNb24gMjEgRmViIDExLDEyMy40NDQwNDI4MzIxOTA5LDEwNzIuNzM5Mzk0MTE0NDQ0Miw2MzEuNzE1OTUxMTIxNzYxOCwxMDA0LjYzMDkwNjk3MzY4NjMsMzYyNC4zNzQzNTA0NTgxMTcsODI1LjU4MjgxNjc3MTE5MzcsNzc2LjkzOTY5MDAzMjg4NzksMTAzLjE2MzkzNDYxODg2MzQ1LDI4Ny4wOTc4NzA2NzkxMTYsMzE2NS4wMTM5NTc2ODg2NDEsMTU4NC4wODE2MTAyMjU5MTE0LDIyNS44MTA0MDk1OTczMTc5Nyw3MTIuNzIwMTQwMDE2MDA2OCwyODIuNTYyMDU1NjY2NzE4NSwyNDczLjEyNzU2NTM0NzE0OSwxNDIxLjI3NjE0MjU1NTgwODMsNzAyLjYzMTA4MTM4MjY1MjMsOTc2Ljg4NjU4Nzc1NzA1NzksMTAyMC42MDE1MTQ3ODU3NzYzLDEzMzMuNzg1MTE0OTU1MDE2MywxMTI2LjgwNDUzMDQzNTA0OTksMjkzLjkwNzM4NTc1OTI2MjQsMjExNy40MzQ4MDIzNDM5MzQ3LDk4Ni4yNTYyMTY3MzkzNDYyLDExNzEuNjM0ODA3ODI1NTQ4NSw3MDguODcyNTk5Mzg3MzI3MSwxOTYuOTIyNDc1Nzk2MTY3NjUsMTY2Ni43MjM3MTg4MDA2ODksMTQ2LjI0ODgwODYyMjA1MDcsMzc4Ljg0MzA3ODk0ODgyNDYsMjY4LjYyNzUyMDYwMjI3NDE2LDE3NzAuNzE3MTU1NTkzODE5NiwzOTEuODE5Mzc2OTUxMjA0MiwzNjMuNjk4MTI4MTM1NDYyNDcsMzk5NC4zNDk5ODgyMzgzMjQsMjQ2MS4xNjQyNTg3MzM4MjU2LDc4OC4xNTA2MTE3NzE0MTQ4LDcxOC43NTIwOTM2Mjk4Mzg2LDI2NDguNzU4MjM4MTE0OTc1NSwyMTcuNTc3MDM5NjAyNzY3MTIsOTQwLjY5MjQzOTY1ODExNTEsMTc1LjUxMjA1NjY2NDYyNDMsMTIwNy4yNDQ1NTMwNjc5MTcsNDI3NC41NDczMTM3OTEzNDMsNDM1Ljk2MzAzMDcwMzQ3MjEsMTQ4Ny40NTE5NDg1NzY4NzMzLDEzNy4zODY4ODI5NTczNzkwNCwxMjEyLjk1NDAxNjA2ODI3ODQsMTIyNC43MjM1MzY0ODc2MDg3LDQ5MC41ODEzMzMxMzQxMDk4NSwxMTMuMjE3Mjk0NjQ4MDQ2MTMKKzI5LFR1ZSAyMiBGZWIgMTEsODIuNzM2ODg4OTA4ODA2MzgsNzE4LjkzNTE2MjIxNTAzNiw0MjMuMzU3OTM5MjE1MjU0Nyw2NzMuMzY0Njc4NzA1Njk0NCwyNDM3LjE0MTIxNDUyMDEzNjYsNTUzLjQ0Nzc1MDc1NDI4NDUsNTIwLjY2MzU4MTc1NzQxMDYsNjkuMjg2NDgwMzkyODUwNCwxOTIuNDQ1NjczODMwOTM5MjgsMjEyMS4yNDc5NzU2NDgyNDYsMTA2MS44NDI2MTQ1OTgxMTA1LDE1MS40NDQ0OTU1ODY1MDE2Niw0NzcuNjYwMDc1MDg1MDUzOTYsMTg5LjM1MTUzMjM2Njk4NTI1LDE2NTcuNDkwODYyMzg5OTIzMiw5NTIuNDg3NDUwMDY2MDM0Miw0NzAuOTI5NjU4MTY5MTA1Myw2NTQuNjk3MzAzMTU1ODQzOSw2ODMuOTUzNDUyOTQ4NzU2Miw4OTMuODAwNDI3NTYxOTkwNCw3NTUuMDk0NDU0OTg1NjU5NCwxOTYuOTYzMTQzMTc3NDI5LDE0MTguOTM1NTM1NzA4NjMwMSw2NjAuOTcxNjMyNTkzMTY3LDc4NS4xNDE0MTY1NDU3ODYsNDc1LjA5MjU1NTEzODI4MDIsMTMxLjk2MjM4OTgyODIwMDk3LDExMTYuOTI1MTM1NDkyMzczLDk4LjAwNzk4NzM0MDg5MzQxLDI1My44NzM4MzcxODMyNzI4MywxODAuMDEzMjk5Nzg4ODM5NjIsMTE4Ni41OTc1ODY5MTEyNCwyNjIuNTY2MTgxMzg0MTQ5NiwyNDQuMTA5MjA5MjkzNTI1OCwyNjc2LjcwMzg3NDEzOTEwOSwxNjQ5LjI3OTQzNjAyMTkzODIsNTI4LjE3NzE1NjE0MjU5MDMsNDgxLjY1MjQ5NDE0NjU3MjUsMTc3NC45ODc1ODg0MzY3NTY2LDE0NS44MDQ5NTYzMTI4ODk4LDYzMC40MTk4NjUxMjI1MDE2LDExNy42MjExMjE0NjQ0MDc2OCw4MDguOTk5MzMxMjQ1NzE2NywyODY0LjU1NjEzMzY3MDAzMSwyOTIuMjE0ODYzODIyOTY4MjUsOTk2Ljc3NTk3NDIzNzQ5NjMsOTIuMDY4NDEzMDUyMTA5NTksODEyLjg0NjY4Mjg0MDE5Miw4MjAuNzQ1MTU5NjUzNzQ1MSwzMjguODE1MDM1MzIzOTQwMjYsNzUuODcyNTc3OTE2NjI4MzYKKzMwLFdlZCAyMyBGZWIgMTEsNTUuNDUzNDg4NzQ0MDg5MzA2LDQ4MS44MjA1NTIzOTAxNDI5NSwyODMuNzIyNDU0NTYxNDgyNiw0NTEuMzMwNTE2MzY3MTgzODYsMTYzOC43NzM4NzY2MDY5NjgzLDM3MS4wMTYwMDc2NDU4OTQsMzQ4LjkyMTE2Mzc2NzMyNjMsNDYuNTMxNDM3NjE2MjE4NDA1LDEyOC45OTg5OTcxODU5NDY3MywxNDIxLjY5OTkxMDU5NzMxOCw3MTEuNzc1NTYxMjA4ODc1NywxMDEuNTY4ODA0Nzc3NjY1NCwzMjAuMTI0NTIxMTYzNDYzNTYsMTI2Ljg4OTA2MDkxNzc1MDczLDExMTAuODUyNzA5MDA4NTU0LDYzOC4zMjI1OTA1MjMyMjQxLDMxNS42MzQ3MTI0MjgwNzUyLDQzOC43NzAxMzA0MjY4MDg2Myw0NTguMzQ5ODU1MDM0OTc5NCw1OTguOTU3MjM3OTI3MjUzMyw1MDYuMDA0NjE3NTY1MjQ0MywxMzEuOTk1NjUwNzE0MjM4OSw5NTAuODU4MjQ5MjQ1MDYxOSw0NDIuOTcyMzQ0MjkwMTc0MSw1MjYuMTQzMzU4ODQxNDg1NSwzMTguNDExMTkxNDIxMTc3MzYsODguNDMxMTgzMDc2NzUxNjEsNzQ4LjQ4ODUzNTM2MDU4NzksNjUuNjc5NjQ5NTQ3MjE5MjQsMTcwLjEyODQxNTA0MjU0ODg4LDEyMC42MzEwNDIwNTc5NTAyOCw3OTUuMTY2ODg0NzgxNjMxNiwxNzUuOTUxMTQ4ODI2MTkxNywxNjMuODM4NDg2NjM4NTA4NjQsMTc5My43MjE4NDM4Nzc1OTAzLDExMDUuMjE4ODg3NzcxMTcxNSwzNTMuOTU2NzcwODgxMTYwNjUsMzIyLjc2Njk2MDA4NjkwNjksMTE4OS40NTcwMjI3MzUwODY5LDk3LjcwODQ1MzQ0MjcwNjQ2LDQyMi40ODU5NTQ3MTQ4NjM4NSw3OC44MjQ5NzU1MDkyNzkwMyw1NDIuMTI3Njg1MjI0Mzc1NywxOTE5LjY2NDAzNDEwODkzMzcsMTk1Ljg2NDM4MTUxNjc5Mjc4LDY2Ny45NjM1MTkwMjY1MTM2LDYxLjY5ODczOTk5MzI0MTE4LDU0NC43MjAzNTY5MzI3NTU3LDU1MC4wMjA0MTY2NTQxMDEsMjIwLjM5MDIyODU4NTczMjUsNTAuODQ2MDM3MTU1NTEyMDMKKzMxLFRodSAyNCBGZWIgMTEsMzcuMTY3MTQ0MTMwMjgyMiwzMjIuOTA5NjQ1NDc1MjQ5NSwxOTAuMTQyNzgxMzI1OTQ3MDYsMzAyLjUwOTkyNTU3ODQ5NjQ1LDExMDEuOTE1MTQ2MjgwNTYyLDI0OC43MTg4NTEzMjk2MzQ5LDIzMy44Mjg2MDUxODA2NzIyLDMxLjI0ODAxNzcwNjY4ODc2Nyw4Ni40Njk4MTIyODI3MTI0MSw5NTIuODUxMjQ5MzgxNDgyOCw0NzcuMTE4NTU5MTYzOTgyMzUsNjguMTE4NDE1NDg1OTczNzEsMjE0LjU0NTMxMTczNzk2MzU3LDg1LjAzMTUxNTAzNTkzNjI0LDc0NC40OTYyNTU0MDMzNjU2LDQyNy43ODA4MzM4NjIyMTE2LDIxMS41NTAyMzMxOTM2NzEwMywyOTQuMDU4NDQ0NTU1NjYsMzA3LjE2MjI2NjM2Njg2MzIsNDAxLjM3NjIyMjA5NTAyODU0LDMzOS4wODQ2ODc3OTczOTc0LDg4LjQ1NzQ1OTk0MjI0MTQ2LDYzNy4xOTA2MzQ4OTM4NjE0LDI5Ni44NzMyODg3MzIxMzcxNSwzNTIuNTgyNjAyNjU3NzM2OTcsMjEzLjQwMjAwMDI0NzMwMTMyLDU5LjI1OTkyMTk2Njc1MzU5NSw1MDEuNTg3Njk3NDIxMjM3Miw0NC4wMTQ5NjkzODE4NjA5MSwxMTQuMDA4MTk4MzE0MDk2MjgsODAuODM3NzAyMzYyNzk4ODYsNTMyLjg2MDY2ODI4MjMzNjIsMTE3LjkwODcwMzM4NDg3OTgsMTA5Ljk2MDQ3NDQ4MzAyMjM4LDEyMDIuMDE2NDc2MDgxOTg5LDc0MC42MzI0OTA3NDM2OTQ1LDIzNy4yMDM0NzUzMTE0NDM0LDIxNi4yOTQyMTAyOTcyNTYyNiw3OTcuMDgxMzAwNjQ0MjY0Niw2NS40Nzc1NzkzNDYxMzgxNiwyODMuMTM1ODE2NDk3OTAyNDUsNTIuODI1MzY5MTIyODkxNzE1LDM2My4yOTE3MzkyMjY2ODE1NiwxMjg2LjQ1MjYyMzU1ODkxMDMsMTMxLjI4MzE5NjU5MzgwNjIsNDQ3LjYxODk3NTk2MTg2MjcsNDEuMzQ2ODI2NTE3MzMzNTI1LDM2NS4wMzg5NzQ3Njc0NzM2LDM2OC41OTUwNTUzMDEyOTAzNiwxNDcuNzE3ODY0ODU5NDU1ODMsMzQuMDc0NTA3MTM0MTY4MTMKKzMyLEZyaSAyNSBGZWIgMTEsMjQuOTEwOTQwOTI5NjQ5ODgyLDIxNi40MDk3NDU1MjA2MzM5MiwxMjcuNDI4MzY0NjQyNjI3NDEsMjAyLjc2MTMyMTYwNDA2MTk4LDc0MC45MTQ1ODQzOTY3NTk5LDE2Ni43MzQyMzc3MDEwNDI1LDE1Ni42OTk3MDU3MjM3MTE4MiwyMC45ODM0NjIyNjg1NzY2MTYsNTcuOTYxOTExMzgxNzQzMDMsNjM4LjYyMDYzNjYxNzY1MjUsMzE5LjgyMzEyMTI2MzczOTk1LDQ1LjY4NDIwOTEzMDcxMDE3LDE0My43ODY4NjEwMDM3NjU3LDU2Ljk4MTc4MTYwMzU1NDU0NSw0OTguOTY0MDQ2OTU0NjY1NDMsMjg2LjY4MzQyNTk4OTQ4OTE0LDE0MS43ODg5MTgyMzMwMzU2MiwxOTcuMDc0NDYzNzQ1ODI0MzUsMjA1Ljg0NDI5NzYyMzc5MjYsMjY4Ljk3MjU5MDE5MzYyNSwyMjcuMjI4Mjc2MjY0MTYwNTcsNTkuMjgwMTc3NDA2OTQ5ODIsNDI2Ljk5NTY3ODAyMzU0MDE3LDE5OC45NjAyNjI2NjE2NjE4MywyMzYuMjc1MjU2MDk5NTcxNTUsMTQzLjAyMzkzMTA5NjcxODE3LDM5LjcxMTU3MzAwODEwMTUxLDMzNi4xMzE1MTI3ODQzNjM4NSwyOS40OTY0ODA2NTM5MjQ1NDMsNzYuNDAwMzk4NzQxOTY0NTcsNTQuMTcxMjk3Mjc4NTgyMjMsMzU3LjA4MzM0NzA5ODY2NDEsNzkuMDEzMjczNzI0MzkzOTEsNzMuNzk4MzEzNjc1ODYxNDQsODA1LjUwMTM5MTU3NzIyNDIsNDk2LjMxNTI1OTE4MTk4NTQsMTU4Ljk2MTU0Nzc2MDI3NDc1LDE0NC45NDQzNDU2MjQwMTk0Niw1MzQuMTQyMjMxNDEzODE4OCw0My44Nzg2OTU5MzM5ODU3NiwxODkuNzQ4MTI1NjEyMzAwMzgsMzUuNDAxNDc4NzI1NTkxMjYsMjQzLjQ1MDEwNjU2NDkyNDg1LDg2Mi4xMTA3MDYxMTU1OTgzLDg3Ljk5NjA4MDIzOTkyMDM2LDI5OS45NjEwMDA4NDYwODExNiwyNy43MDgyMDAyMDYwNzIyODQsMjQ0LjYyNzYzOTA4MDEwNDEsMjQ3LjAxMzM0MjA1ODY0MzcsOTkuMDA4NzgzOTg0MzM2OTksMjIuODM1MDY1MjE1OTgwODcKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0VJUlN0YXRlc09ubHlfUktfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL0lfMC5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNFSVJTdGF0ZXNPbmx5X1JLX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9JXzAuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE5ODUyOGMKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNFSVJTdGF0ZXNPbmx5X1JLX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9JXzAuY3N2CkBAIC0wLDAgKzEsMzMgQEAKK2l0ZXJhdGlvbix0aW1lLHN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL25vZGUvdHJhbnNwb3J0L3BpcGUvVVNBCisxLFR1ZSAyNSBKYW4gMTEsMC4wCisyLFdlZCAyNiBKYW4gMTEsMC4wNDAxOTE3NDE0NjkwMTcwNQorMyxUaHUgMjcgSmFuIDExLDIuNjU5OTkxNTA3ODA1NAorNCxGcmkgMjggSmFuIDExLDE0MS40MDk0MTQ5MjY2NTM0NQorNSxTYXQgMjkgSmFuIDExLDY2MDYuMzMxMjc5MzU1NjE5Cis2LFN1biAzMCBKYW4gMTEsOTY3NjEuODAzNDY0NDcwMjQKKzcsTW9uIDMxIEphbiAxMSwyMDI2NzQuOTMzNDkyMTQ4NDcKKzgsVHVlIDEgRmViIDExLDI5NTYyMi4wNjA4ODI1Njg2NQorOSxXZWQgMiBGZWIgMTEsMzM1NTAxLjU4NjgyMzUwNDUzCisxMCxUaHUgMyBGZWIgMTEsMzIxODYxLjgxNDkwMTY2OTkKKzExLEZyaSA0IEZlYiAxMSwyODEzNTYuMzE5ODA0NzA2MQorMTIsU2F0IDUgRmViIDExLDIzMjU5MS43MzYyNTQwMDgwNQorMTMsU3VuIDYgRmViIDExLDE4NTM3NS45NDE5MzI1NzA2CisxNCxNb24gNyBGZWIgMTEsMTQ0MDAxLjEwMjAwMjA2NTEKKzE1LFR1ZSA4IEZlYiAxMSwxMDk3NTUuODkxMjM1MDQ0MzQKKzE2LFdlZCA5IEZlYiAxMSw4MjQzOS4xNDk2OTAyMzI4MgorMTcsVGh1IDEwIEZlYiAxMSw2MTIwNS4yMzIzMzUzMzI5NQorMTgsRnJpIDExIEZlYiAxMSw0NTAxMi40MzM2NzU3Njg0MzYKKzE5LFNhdCAxMiBGZWIgMTEsMzI4NDQuNjE4MzAxMjI5NjcKKzIwLFN1biAxMyBGZWIgMTEsMjM4MDcuNzQwNjUzMTgyNDYKKzIxLE1vbiAxNCBGZWIgMTEsMTcxNTkuNzkwODgxNjM1NDU3CisyMixUdWUgMTUgRmViIDExLDEyMzA3Ljc4NDgzOTI2MTYxNgorMjMsV2VkIDE2IEZlYiAxMSw4NzkwLjAxMzU5ODczMzc5MworMjQsVGh1IDE3IEZlYiAxMSw2MjU0LjA2Mjc3Mjg3OTEzNworMjUsRnJpIDE4IEZlYiAxMSw0NDM0Ljg4MDUyOTg2MjM3NAorMjYsU2F0IDE5IEZlYiAxMSwzMTM1LjQ3Mzk5MzY3NTcxNDYKKzI3LFN1biAyMCBGZWIgMTEsMjIxMC44Mzk1NDQyNTA0NAorMjgsTW9uIDIxIEZlYiAxMSwxNTU1LjA5MjQ2NTI1MDMwNDUKKzI5LFR1ZSAyMiBGZWIgMTEsMTA5MS40MzI2OTk5OTA0NTUxCiszMCxXZWQgMjMgRmViIDExLDc2NC40NzUzNjk5MDc0MjQyCiszMSxUaHUgMjQgRmViIDExLDUzNC40NzczMDc4NzA3MjQ5CiszMixGcmkgMjUgRmViIDExLDM3My4wNDI5NTMyNDE4MjcyNgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTRUlSU3RhdGVzT25seV9SS19SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vSV8xLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0VJUlN0YXRlc09ubHlfUktfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL0lfMS5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjhjNGQxMgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0VJUlN0YXRlc09ubHlfUktfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL0lfMS5jc3YKQEAgLTAsMCArMSwzMyBAQAoraXRlcmF0aW9uLHRpbWUsVVMtQUssVVMtQUwsVVMtQVIsVVMtQVosVVMtQ0EsVVMtQ08sVVMtQ1QsVVMtREMsVVMtREUsVVMtRkwsVVMtR0EsVVMtSEksVVMtSUEsVVMtSUQsVVMtSUwsVVMtSU4sVVMtS1MsVVMtS1ksVVMtTEEsVVMtTUEsVVMtTUQsVVMtTUUsVVMtTUksVVMtTU4sVVMtTU8sVVMtTVMsVVMtTVQsVVMtTkMsVVMtTkQsVVMtTkUsVVMtTkgsVVMtTkosVVMtTk0sVVMtTlYsVVMtTlksVVMtT0gsVVMtT0ssVVMtT1IsVVMtUEEsVVMtUkksVVMtU0MsVVMtU0QsVVMtVE4sVVMtVFgsVVMtVVQsVVMtVkEsVVMtVlQsVVMtV0EsVVMtV0ksVVMtV1YsVVMtV1kKKzEsVHVlIDI1IEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMS4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMixXZWQgMjYgSmFuIDExLDUuNTE0ODY5NDg0NzI2MzAzRS01LDUuNTM5NTkyMTAyODg0MzQ0RS01LDQuMDQyNDgyMTQ1OTE2NzEwNUUtNSw0Ljc4ODc2MjEwNzQ0MTE0ODVFLTQsMjMuMjcyNzQ4MzA3NjIxNTczLDUuMDExMTc1OTQ5Mzk2MjExRS00LDcuMTYzNTAzMjcxOTM0MzY2RS01LDEuODYxMjkwNTIwOTYxNjU1NEUtNCwxLjgyMzk5OTQ5Mzc5MzE5MTZFLTcsMC4wMDEzMjM4NjIzMTI4NzMyMTU1LDguNzAwNTY4NzY5NjA5NTNFLTQsMi4wNDI3MjQ4NTgxMzQ5MjQzRS00LDMuMzI5ODc3MTA2MzQ0NzAwNEUtNSw0LjExMTU3Mzk5NzM5NzkyMzVFLTUsOS43MTAzMDkyNDA1OTYzMjFFLTQsMS4wMTgxOTk0OTA2MDIxNjIyRS00LDEuNTczMDk0MzI0Mzk1NTc3NUUtNSw0Ljk0MjMzMjY1ODE4MzA3MUUtNSw5LjMwOTIzMzY5MTcyNzAxNkUtNSwyLjkyMDE1MTAzNTQ4NjA1NkUtNCwyLjE1NzUxMDMzMDQyNjI2MzRFLTQsMi40MzE0NTM4MTEwNzAwMzQ1RS01LDMuOTkyNTA3MTQyODk3ODg3NUUtNCwzLjU5MDE2NTc2OTUzMDkzMjRFLTQsMi42NTQ3MDU4NDYwNTc4NzhFLTQsMi42MDk1NjE0NTczMzc1NDRFLTUsMi44NzkzMTI1NjQ5OTMxOTc3RS01LDQuMjU4Nzk3NTU3MTkwMzU1RS00LDEuMzczNzMzNDQ3MzMyMTcyN0UtNSw0Ljc3NzMwMzM1MzIzNzA0OUUtNSw0LjEwMDg2OTE1NDgxNjA4NEUtNSwzLjgwNTcxMDY0MjAzOTQ4NUUtNCw2LjU4MzMzODA3NjU4Mzc3NkUtNSw1LjAyOTQ1Mjg5ODY0MTY5NkUtNCw4LjU2MzM1MzE1MjE4MDk1N0UtNCwzLjg2NjA4MTM1MjEyMTU2NTZFLTQsNy4xNzg3MTkyMzQyODY0NzNFLTUsMS41NzM1NTc2NDEwMzkwMDc5RS00LDQuMzkwMDI5NTA2MzQ2NTUzM0UtNCw1LjQyMTU1MjQ1OTA0MTg1ODVFLTUsNi41MjU2MzIyNTk2ODEwNTFFLTUsMS4zMjgyMDQ5ODc2MDExNzZFLTUsMi4zNzU2NDgwNzA3NzkxNTI3RS00LDAuMDAxMjE3NDM1OTQ4ODk3NzM1MywyLjE1MzE5MzYyNzI1NDkxOUUtNCwzLjI0NjQ3NDAzMzI1MjY5NzNFLTQsMS40MTkyODk0NzM0NTM1NTUzRS01LDMuMzEyNzU3NDMxODM4NDY0RS00LDEuMTE5MDUyNzI4ODEyMjYwOUUtNCw3LjQzMjQ1NDgxODU2MzI1NUUtNiw5LjkwODA1Njk0MzM3NzYyMUUtNgorMyxUaHUgMjcgSmFuIDExLDAuMDA4MDAzMjk4MjM4MTI3MDM4LDAuMDA4MDQ4NDU5NTg5OTM4NjgyLDAuMDA1ODczMDczMTgzNDk0ODA5LDAuMDY5NDg5ODQ3MjY2ODIxMzYsMTA4Mi42ODI0MTIxODUyMDc4LDAuMDcyNjkxNTM3MzQxNDU2MTYsMC4wMTA0MDY0NzIxOTcxNTYyNDMsMC4wMjY5MTM0MjYzNzEwMDYyOCwyLjY1MDU3OTIyMTAxMzM3RS01LDAuMTkyMTM2ODUxODg5Mzc4MDcsMC4xMjYyMjkxODIxNzA3MjE4LDAuMDI5NjA3OTE1NjExNTYxNTc4LDAuMDA0ODM4MDQ5ODExMDk1MTk5LDAuMDA1OTcxOTMyNjY4NzU3Mjc0NSwwLjE0MDkzOTE4NjEwNDUxMzksMC4wMTQ3OTI0MjU4NDIyMTQ0OTcsMC4wMDIyODU3NzU0NjM2Mjg2ODEsMC4wMDcxODA3Mjc4OTM5NDE0MSwwLjAxMzUyMzYzMjE4MjYzODI2LDAuMDQyNDA1MDY2MDQwMTc2NzUsMC4wMzEzMzI4NzI3MzQ3Nzc5MywwLjAwMzUzMjI5NjIxNDIxNTA1NjYsMC4wNTc5ODI0NzcxMTk5MzU3NywwLjA1MjExMzIwNTI3NjA3NTM1LDAuMDM4NTQ5NTM5MjkxMzQyNzksMC4wMDM3OTE2MTU1MTMxMzQ3MzIsMC4wMDQxODIxMDI1NzE1NjkyMjgsMC4wNjE4Mzc3Mjc0OTYwNTI0NywwLjAwMTk5NTYyMTQ5MjU4NTc3OSwwLjAwNjkzOTI5Mjg1OTIxMDk1NCwwLjAwNTk1NjI1NTk3NjM0NTgzOSwwLjA1NTI2NTM5MzYwMzQyMzQ5LDAuMDA5NTYxNDQ3NDg2OTkwNTI4LDAuMDcyODA1ODE3NTgwOTc2OTgsMC4xMjQzNTQ2NTI1ODc3MDUzNSwwLjA1NjE1MTY2ODM5NjU5NjA1NiwwLjAxMDQyODYxMzMwMTg2MDY5LDAuMDIyODUwNDY3ODEyMzgwMjA0LDAuMDYzNzU5OTM2NzAwNDkwOTksMC4wMDc4NzIyMzU5NjA0MDgwMDUsMC4wMDk0ODA1MjMyNDE1MTAxNDEsMC4wMDE5Mjk1OTQyMjA1MDI5MjIzLDAuMDM0NTAwMjgyNjk0OTE0NTgsMC4xNzY3NTY4NjYyNTY3Njk0OCwwLjAzMTI0MzU3NDE4MjgxMzE2NywwLjA0NzE0Mzg2OTA1ODE1MDc2LDAuMDAyMDYxNzQwMTg3MzUxODU3NCwwLjA0ODA5ODgwNDgxNDQ0Mzk4LDAuMDE2MjU2NjAxMTYyODE5MjE1LDAuMDAxMDc5OTk3MjA2MDkxNzg4MiwwLjAwMTQzOTM3MTc5NTg1ODAyNzUKKzQsRnJpIDI4IEphbiAxMSwwLjY3ODY5NjEzMjkwODMyODUsMC42ODMzNTYwMTkxODQ3MTgxLDAuNDk4NjMzMDI5MDMzOTg2OCw1Ljg5MjM3MjM0NTQwMzQwNSw1MDAzNy4xMDYxOTEwMjM4ODYsNi4xNjE1NjAyNjI0NjU4NDI1LDAuODgzNDQxNTQ0MzkzNzg5NSwyLjI3MzYwNjkxNjU4NjgzNzYsMC4wMDIyNTA5MjIyNjQxNzc3MjE2LDE2LjI5NDk0NjI4NDE2NjI2NSwxMC43MDEzMzg0OTI5ODc3MTYsMi41MDc1NTQ2MTExNDcyMDU2LDAuNDEwNzgyNjgwNzE5NTE4NzMsMC41MDY4OTA0NDg3ODg1OTkxLDExLjk1MzgxNDExOTcwMzcxNSwxLjI1NTg2NzA3OTExNjA3OTgsMC4xOTQwOTQ4NDMzNzU4NTI5OCwwLjYwOTY4MzMzNDAwMjg1NDEsMS4xNDgwNzE4NDI5MzExMTU2LDMuNTk4NDY3MjQ4MTEzNjMwNCwyLjY1OTExMjk1NjYxMTIxOCwwLjI5OTg3ODM2MjY0NzQwOTIsNC45MjA4MTc2MTEyNDQ1NzUsNC40MjAzNzMyMjgyNTQyMSwzLjI3MTIxMzE2Njg0NDU2NSwwLjMyMTk0NDg2MjAyMzI4NjgsMC4zNTQ5NzEwMzEzMjMxOTAxLDUuMjQ2OTI2NTQ2Njc5MTY4LDAuMTY5NDE0MjYzMjc3MTE3MiwwLjU4OTAzNTM5OTQ0ODMxODgsMC41MDU1NDgzNjM3NzU4ODMsNC42ODk4NDQyNjQ1NTE4NjYsMC44MTE1MDY0NTU4Mjc5ODcsNi4xNTc4Mjk4MTU4NDI3MjQsMTAuNTUyODA0OTIwOTA1NjI3LDQuNzY1OTExMjEyOTc3NTM5LDAuODg1MzI0NDY4MTIzNTk1LDEuOTM5MDc2MzgyMjk3MTMyNiw1LjQxMTUyMDY3MTI4NzMyMiwwLjY2Nzk3MTQ1MDc1NTA0NSwwLjgwNDg5NjMxNDkyMDIwMjEsMC4xNjM4MTkwMTg3Njg4MzEzNywyLjkyNzg3MTk2OTI4MjU2ODUsMTQuOTk2NDg0ODA3MTM5MjM4LDIuNjQ5MTU4NzczMjE1NTc5LDQuMDAwNjA3NDI2ODM5OTA2LDAuMTc1MDIxODY1MDI5Nzg4MjUsNC4wODA5NjM0ODMxNTIwNDUsMS4zODAwODMwOTk0ODg5OTAzLDAuMDkxNzA5NjkyMTAyNjE1OTUsMC4xMjIxOTUxNzM2NjgzMzg3OAorNSxTYXQgMjkgSmFuIDExLDQ4LjIxMDE0OTUxMzQ0NDUwNiw0OC42MjAyMDg3MjAzMjAwMywzNS40NzUyODM5NDA3NTYzOSw0MTguNTA3MzI4MDMxMDc1MjUsMTgwMDg0Ni4xMzY1Mzg1MzE0LDQzNy40MDgyOTY4ODgyMTE1Nyw2Mi44NDQ0OTk1MDQ4NjY4OTYsMTYwLjY4MDkzMjU0ODYzNzUsMC4xNjAxOTM0Njg3MDU2NzcyNCwxMTU3LjYxNDcyNTU2MzUyOTIsNzU5Ljg1MzY5Nzk1ODk4OCwxNzcuODExNjAyNzAzNzc2NiwyOS4yMjc1MjMxNTA1ODk2MzYsMzYuMDQ5ODEwNjE0OTU3NDUsODQ5LjI5OTg2MzUwNjI4MDMsODkuMzQ1NjI3MDUxMDY3OSwxMy44MTE2NTMyNTQ0OTk0NzcsNDMuMzc4NjcyNjE5OTIyODc0LDgxLjY2OTYwMDA1MDk0NTY4LDI1NS44NDI4ODAyMDg3NzI4NCwxODkuMDc4MzQzMzIyNDM5NiwyMS4zMzMwNTA5ODUzNTA5NzYsMzQ5LjkwMjg5NDU1MDcwNjUsMzE0LjA5NTg2MzQ3NTc1MTQsMjMyLjU2ODU3MzIyODc2MTg0LDIyLjkwNzcyOTUwNTc4ODQ0NiwyNS4yNDUyOTcyMzAwMzQ3OSwzNzIuOTg5MDE0NjYwNDQwMTUsMTIuMDUxMzYwNzcxMzgyMjQsNDEuODk1NDA1OTIyNDg5OTEsMzUuOTUzMjcwMDM3MTQ2NzE2LDMzMy40NDI4MDk4NzY1NjA1NSw1Ny43MDg0NjQxMTA3NzgzNyw0MzUuODc1NTcwNTg0OTc0MSw3NTAuMjk0NTc0NTM4MTM0LDMzOC45MzI3MjM5Nzc3NDcxLDYyLjk3ODc1NjU1Njk2NzE3LDEzNy44NjM5NDgzNzQwMTgxOCwzODQuODMxODYyNDk0NDg2Nyw0Ny40ODU0MDE1NjMzMjIyNyw1Ny4yNjI5OTUyNjEzMzU3MSwxMS42NTQyOTQyOTU4NjA0MiwyMDguMTg0MDgxNzU4MzMxOTMsMTA2NS45MzE0NjQ5MDE2MTYyLDE4OC4xNDQ3Mjg5MzU2ODk4NywyODQuNDM0OTMwMzgzMDE0NywxMi40NDk3NDQ0MTIyMzQyMzMsMjkwLjA4MzQzMTg5MzA0NjgsOTguMTczOTU2NTEzODMwNjMsNi41MjYyNDI2NTgzMTg3ODI1LDguNjkyNjU3NzY3OTEwODUyCis2LFN1biAzMCBKYW4gMTEsMjg1MS4zMjg3MTQ5MTkzMTcsMjkyNy4xNzI2MDkwMTc4Nzc3LDIxMzQuNDI3NDk1ODMyNjgzNywyNDcyMS4yMzk3MTE5MTcxMzYsODkzMzYzNS43MTI4OTQ3NTYsMjU2OTkuNzYyOTgwMjg4NDYsMzc3NS44MTkyMjcxMjc1MTg0LDkwMTIuNDU5NDgwOTE2NjEsOS42NzI2NTY5MzM1NzQzMDgsNjg1NDcuNDc4NTcwNDYzNjcsNDQ3NTAuMjk3NzAzNzE2OTU1LDEwMzIzLjgxMTA5MDMwNTk4NiwxNzYwLjA5MTM4NTMzMDUzMjgsMjE2MC40MjU1Nzc2NDcxMjc3LDUwMzQ1LjI2Mjg4MjE2NTk0NSw1MzczLjU0Mjg0NzM5ODg2Nyw4MzIuODQxNzExMjcyNTIxMSwyNjExLjc0OTA4OTM4MTc4MzUsNDkwNy4xMDU3NTM4Njg3NzgsMTUyODAuOTMyMzEzMjU2MTMzLDExMzA3LjI1OTY0MDU3NjE2OSwxMjgyLjMzMDAxMjIwNDg5MTgsMjA5MjcuNjY3MzIzNjU2NTcsMTg2NDEuNzk4MzM4MzAxNDU4LDEzODg2LjA1MTc4MjUxOTA0NCwxMzgwLjIzNzk5MDkzNDY3MjYsMTUxMi44NzMwMjk3MDU1NzMxLDIyMjQxLjU1MzAxMDUzMjU5Niw3MjQuMDA3NzE1NjA3OTQxOCwyNTEzLjA0NDI4NTQyMTE2NTYsMjE1My45MjA3ODg4NTEwODI4LDE5OTE5LjM5NjE3MDIxMjI2NSwzNDU0Ljc5MDExOTEzMzI3OTQsMjQ4NDIuNDg4OTI5OTc1MTc0LDQ0ODIyLjYwODkyMTQ4MDg5LDIwMzAwLjkwODc2MjY1NzA5OCwzNzg0LjA5MzM4ODI5NTA5ODUsODIzNC4zMTMyNjQ5Njg0ODEsMjMwNDAuODcwOTQ1NDkwNTEsMjgzMi4zNzY3NDE5MDY2MTE2LDM0NDQuMzgwODA1MjgzNzAxNiw3MDAuNzg2MDAwMjg0NDA5LDEyNDQ2LjgxNjAyMDQ1MzAyLDYzNDgwLjM1NTM1MDg2MzAxLDExMTA1Ljc3NDgwMzI1OTAzLDE2OTg5LjE5MTAzMjEwODY5OCw3NDcuNTk5ODA4NzAwNjY1OSwxNzI4NC40NDU4NzM4OTk4LDU4OTguNzIxNTk3Nzg2MDQxNSwzOTMuNjk1OTQzODY3NzMxMDUsNTIyLjM5MjE0NjYyNTY1Cis3LE1vbiAzMSBKYW4gMTEsNzIxNzcuMDA4MTUzNzQ3MywxMjM1OTguMDM1NzYxMjk0NCw4NzkxNC43MDM5MzgwNTI2MSw2MDk0OTIuNzA1MjAyNzI2OSwxLjIwMjU4ODUzOTc3MTM2MThFNyw1NzA3NTMuMzYzMjI3NzI4LDE0NzU1OS45MjEyNTI0MDI0NSwxMTE4ODkuOTUwMjA0NDYxNTcsNDYyLjYzMjE5NTg4Njg5Mzk1LDE3ODEwMDEuNDg3Nzk5OTk0MiwxMDM4OTQwLjYzNTU4MTA4OTQsMTg5MDE3LjIyMTc3MjQzNjU1LDc1MDg1LjEzMjMzMzE1MzY3LDc3MzUyLjY3MzMyNzI1NjM5LDEzNDAzMzAuMDQyOTY5MDY2OSwyMTgwODQuMzYyODY0NzY2NywzNzUyNy44ODQ1NDAzMTM5MiwxMTA1MTguNDU0NjM2MTY5NTUsMTkyMTA4LjA1OTAyNzc0MTksNDkzNTg2LjA3MTE2NDkxNTg2LDM3ODgzNi4wMTg2NjkyNjQ0NSw1MDk3Ni43OTQ5NjU5NDY2OCw3MDM5NzQuMzUyNDU5MTg5Niw1MTA1MTUuMDg0NjE5MTU4Myw0NDQxNDkuMjE3NzY5MTk4MzUsNjAxNTQuNjMwNDA1MDI1ODUsNTQxMDkuMjY0OTA1OTAxMzYsNjg2MzQwLjIzMjE2MTk0MjQsMjgyMDcuOTEzMzA3ODc0NTMsOTI3NTIuOTEyNTk2NzQxODcsNzYyOTAuMzMyNDk2MjE4NDYsNjQ2Nzc0LjgzOTM3NzMyNTcsMTE5NjMxLjM3NDkzNjIwMjUzLDM2MDg4Ny4yNDM1OTg0ODQ3LDE0NTYzOTQuODY3OTg4MDkzNSw3MTQzMTYuOTk3Nzk3NzIxNCwxNDgxNzcuNjI4MTA1NzEzMDUsMjY1OTc3LjUyMjk4NzIxNjk0LDgwMDQ5Mi4zODk4MDQzNzEsODgwNzcuNTkxMTgyMjE2MywxNDAzOTcuNTc1OTAwMzMwNCwyODIyNS4xMDY4NjE0NDY3NDQsNDE0MDA4LjMxODQ5NjE3ODksMTg5MjY2MC42NDA0NDc3Nzg5LDI2OTgwMi4yMjMyMjQ4NDkxNSw1NDkyNDcuMzY3MzYwNDUwOSwyODY1Ni4wMTU2OTUxMzQ4NSw1MjIzNDkuNTUzNTgwNjk4OTYsMjMwODYzLjU3OTYwMDk5ODE0LDE4MDYyLjYyMzM5NjY3NjQ4LDIwNTg3LjA3MDk4MjgyMDU0Cis4LFR1ZSAxIEZlYiAxMSwxOTE2MTQuMjEwOTQ3OTUxNzQsMTAxMzUwMi4xMjY2MDQzNjY1LDYzNTEyNS44NTA2MTExNjU5LDE1NzY5NTUuNzQwNTAxNzg5NCwxLjIxMTczMTYwMTQ1NzU3NTFFNywxMzQ4NDg1LjQ3OTk4NTgxLDg2MTU4OS41NjUxMTg4MjU5LDE5MjI5MC45NzA4OTUxMzk5NywxOTI5OS44MzQxMDc3MzIxODYsNDg1NjMyNS43NTU4OTkwMTIsMjU0NjEzOS44NDE3NTkxNTgsMzkxMDEzLjY3OTg4MTY3MjQzLDY1MzI0Ny45NTg0MTgyOTUxLDM0OTk2Ny44NTM3NzQ3NDc4NywzNzUxOTk3LjY1OTAxMDI3OTUsMTQ3NDM5MS43NzM5ODIxMDc5LDQ5OTk2OS40MTE0OTYxOTMsOTE3Mjk2Ljc4NDc3NTUxNzgsMTEyODY3Ni4yNTk0ODE4ODksMTgwNjMwMi44NTcyODI0ODE0LDE0ODMzMDUuMzczMzIwNDM1OSwzMTY4ODUuNjU4MTUwMzU3OTUsMjc3ODE1MC4yMDk3MzI3NTY1LDE0NzU3NjIuMDE1ODg3MDUwMiwxNTk4MDUwLjEwMzM2MzY3Myw2MDIyNTUuNTMzMjUyMTk4LDI0NDE2OS4wMTE4ODA1Njc3LDIzMjk3MDQuMDA4MDMxMjk2LDE2Mjk1NC44NTI4Njg1OTA1LDQ1MzgxNC4xMjQ5NDA3ODI5NiwzMzYzNjYuODQ0Nzc1ODkzMiwyMzg4NzgxLjE2NTIzMDcwOCw1MDEyODAuMjkxOTk2NjIxOSw2NjIxNDAuMDE5MjgzNDg0Myw1Mzg1NzM5LjUwNzgzODc1NCwzMTAxNzQxLjg2MjQ0Njc4LDg3MTI5MC45NjM0MTUxOTM4LDk3MzM3NS43MTk5NDQ1ODIzLDMzNzg0NjUuNDQ5NTk0MTU3LDMwMjU4Ny40NTY4OTE4Mzk5LDk2NzI2OC4wNDE5MjI3NTk0LDE4NDc5OC4xNTczMTMyNzkzNywxNTk4NTQxLjI0MTI3MjcyNjMsNjEwNDg2MC40Mzg3NDc5ODI1LDY4ODQ2Ni4wNTgwODE1NjY0LDIwMTMxMDMuNjM4NjAxMzYwOCwxNTY3OTIuNTM3MzA4MzkyOTYsMTcxODA5My42MjY4Nzc2MzEzLDEzNTUwMTcuNjk2MTQ1MTIyMiwyOTcyNzMuMjgxNTQzMDk3MTcsMTIzODc1LjQ5ODE3MTkxNDQ5Cis5LFdlZCAyIEZlYiAxMSwyMjczNTkuNDU1MzYwNTk4MjIsMTUzOTU3Ni42NjA5Nzk4NjY1LDkzMjYwNy4zMzU3MjI2OTUsMTg2MTU2OC4wNjQwMzQ1MTA2LDEuMDg1Mzk1MDM0NTY5ODQ1M0U3LDE1NjI5MTcuNDE3ODk5MDU3LDEyMDE0NzUuOTQzMzMyMjMzLDIwNzcwNS43MTkyOTY2MTU2LDE3Mjk3Ny4yOTQxMTk3MzQ3LDU3OTI4ODQuMDA3NDY1OCwyOTczMDgyLjU5Mzk4MzQxMTMsNDQwNzA0LjcwMDA0MjM5NDIsMTAwOTIxNS44ODI2ODA1ODU4LDQ2MTY3OS40MDYwNTc4MjM3LDQ0OTg4NDUuMzQ1MzA4MjYzLDIxMjkwMzQuMTM0NDU3NDcsODk2MjE3Ljk3NjAxNDYyNjQsMTM5ODE3Ni4xNjUxNzM5MjkyLDE1NzYxNjcuNzYwNTY4NzQ0MywyMjgyODQ4LjkxOTIyODgwMDYsMTkwMDAyMi4zODY0MTgwMjczLDQ0ODM4Ni4yOTY1MDgyMjc2NSwzNTY0MjU3Ljc1MTU4MTU2OTcsMTc4MDczNy43MDAyNzg5MDg1LDIwMTI4OTIuNzMzOTMwMjc4OCw5NzE0NDEuMjA5NDc5OTE2MSwzMjE5MzQuNTAxODQ0NTE0MiwyOTAxMDE5LjM3NjQ3MjUxNDYsMjI2Njg0LjE3MTc1MjgxNiw2MDg2MTEuNTMxNjkwMDQyLDQ0MTM3NC4wNzg1ODQyMDM1LDMwMjQ1MDUuNDg3OTc2NTczNCw2NTA5NTMuNDIxMDU4ODc0OCw3MjY0NTIuMTA0MTUwOTI3Niw2ODIwNzMxLjkzNzc0NTEwMSw0MDU3MjkwLjg3MTg0MDE4OTcsMTIxNjk2NS43NTcwNjQ3NSwxMjMwMTgwLjAzMzQ4ODgzMSw0MzkzNjQ0Ljk4OTUzMzIxMiwzNzc2ODIuNTE2MjY2OTIzMzQsMTQwMzMyMC4zNDAyMjAyMzI1LDI2NDc1OS4xNzU2MDQ1MTY5LDIwNDE5MjIuOTQyMDA1Njg3Miw3NTI2MzE0LjA0Mzg4NzM4NSw4MTA0NzQuNDU0MjAzODg5MSwyNTQ0OTg2LjM4NzY3MjE3NTcsMjE1NDU3LjQ0MDYwMDU1NTI0LDIxMjYyNTIuMjY1MTA5ODY2NCwxODkxODEyLjY2MDI4NTE1NDQsNTg5MzA0LjQxNjE0OTA2OTksMTczOTQ3LjE5MjUwMjMzNDA0CisxMCxUaHUgMyBGZWIgMTEsMjE4Njc0LjI5NzE1NDE3NDgzLDE2MDg2NzkuMzIzMjQxNTc5LDk2NDg2MS42MzI2MDQ1NjI0LDE3ODY4NTcuNTExMDA3MDc3Myw5MTE2NzI0LjM0NTczMTIwMywxNDg5Mjc5Ljg1NTM2NDQyNjUsMTIyMzQ0NC40OTA5NDM3NDg1LDE5MjI2NS4yNDk5NTIyMzI1OCwyNjk2ODguOTYzMDMwNzk3Niw1NTgzMTI1Ljg0MzI0MzMzNywyODQxNDYzLjY1MjI1NzcxMzUsNDE1MTg5LjY0MTQ2OTEwOTYsMTA1OTU2Ny45Njc4OTk3NDA3LDQ2MTYwOC40NzQxNjA0MTYzLDQzNDQ2NjUuMzc3MDU1NjEwNSwyMTkxNTk5LjgxNDQxNDA1NzQsOTc3OTgzLjAxMDY4NTY3NDYsMTQ2MjM0OS45NTk5MDk2OTMzLDE2MDU3MTIuODI5NjU5NTUxMSwyMjQ4Mzg2Ljk1MzEyMzIyMjYsMTg4MDM3MC4zNTYzODIyNDU0LDQ1ODY4NS43Nzc2MTE2ODk5LDM1MjkzNjUuMzc1MjE1MDI2NSwxNzIzODk4LjU1MTM5MDM1NzUsMTk4MDEwMS42MTY2MzAyNzQ4LDEwMzIwMzAuNTY0MTYzMTkzMSwzMjE4MjUuNDg2ODcwMTc0NzYsMjg0MTgyNi4zNjIzNzc2NDcsMjMwNjQ5LjcyMDIyMzM1ODg2LDYxMTkwOS45MjY3MTU3NTE5LDQ0MDUwMC4wNTY3OTc1NjY1MywyOTgwODA1Ljg2OTA1MTI2Miw2NDczMjYuNTE2MzcxMTg1Myw2NzY3OTYuMjE2MjY3Nzc5Niw2NzIyNzgyLjUwNjgxOTc4Niw0MDQ0ODgxLjY4OTY2NTc2ODgsMTIzOTg1MS45MzA0NTM2ODU2LDEyMTE2MTAuNzY4MTc4OTU1LDQzNzEzOTMuNDkxNzQ1NTksMzcwMjk3LjY2ODc2NDQ1ODk3LDE0NDY2MTguMzQxMDQ4MzIyNCwyNzE4ODUuNDA0MDk1OTkwOSwyMDE4Nzk4LjgwMTA2NzE0MDQsNzM0NTQ3Mi4zOTYzODAwNDEsNzc3MDk4LjUxNTU1MzU2MzgsMjUwNjg0My43NjA3MDUzMjI1LDIxODM2Ni4yNTc4MzIzNTg0NywyMDc4MTE4LjUzNzk5NjczMjIsMTkyNzEzMy44OTIzODkwMzYsNjU4Mjg1Ljc1MDk4NDcwMjcsMTc3NTE3LjM1Mjg4MTk1MzQ3CisxMSxGcmkgNCBGZWIgMTEsMTkwOTkxLjI4ODU3Mjc4NTEsMTQ2NDc1Mi4zNjE2MzUzNTA2LDg3NDM5OC4yODQ3NTM4MzYzLDE1NTg5OTAuNjA4MTU5ODE3LDczNTIzMTkuMDMzMTMzNTEyLDEyOTQzNDAuNDM1NzY3Njk5NSwxMTAwMjE1LjE2NTEwNTI1NjMsMTY0NTk5LjgzNTQ2NjkzNzc3LDI4MzkwMC40NzM2ODQ4MTc4LDQ4ODE2NjAuNDc4OTg5ODgwNSwyNDczNDQwLjU5NTk1MTcwMiwzNTg2NzMuOTg5MDMzNTMzOSw5NjY5NDYuODI0NTA5MzIzOSw0MTEzNTEuNzc4MjEyMjcyNSwzODAyODI4Ljc2NzU2OTU3NCwxOTgxMzA0LjQ0MjI4OTk4MzIsOTA4Mzc0LjM1ODk3ODc2MjQsMTMzMjEyNS43MzQzNDkxMDg1LDE0NDQzMDAuODcxOTIxMTczOCwxOTg4MjY2LjI3ODYzNDMyMjYsMTY2Njk0My45OTYyOTk0OTY0LDQxMzQxNC4yMTM1MjEwNzUxLDMxMjk2NjkuOTU2ODM2MDUzLDE1MTA4MzkuMzEzOTYyMzI2NCwxNzQ5OTIzLjc2MTM4NDcxLDk0NzAxMy4yNjQ5MzkxMzc0LDI4Njc2MC41OTI0ODY0NDg4LDI1MDYwMzUuNjA2NDUyMjQ2LDIwNzMzOC42NzAxMTQ5NzUwNCw1NDY4MTUuNjQ5MjQwNzg4NCwzOTIxNzguODQyMzY5NjY3MiwyNjM2ODQyLjcwOTM0ODkxMzMsNTc1MjYzLjkyMDQxMjc1NTYsNTgxMjgxLjE3MDMyOTQ1MTIsNTk0NzI5NS45ODI5NjM5MjgsMzU5OTIwMS45ODczNzcwMTMsMTExNTI1MC40NDE0NDQwOTI0LDEwNzE0MzcuNjU2MTA1MTEsMzg4NTc2Mi41MjkzOTcxODE3LDMyNjY5MC4zNTA3OTM5MDAxNCwxMzA4NzA4LjE4Mzg5MTgxOTYsMjQ1NTEwLjQ3NzQwOTM4MTk0LDE3ODg3NTAuNjM1ODk1MjAwNSw2NDY1MDU2LjQwNzY0NzA1NSw2Nzc2MDcuOTc1NDI5MDg0NywyMjE2OTQ3LjcxOTY2MDQwOTMsMTk1OTE2LjA2MDI5MDExOTEyLDE4MzAzOTUuMDYxOTM2NTk3NiwxNzMzMzQ5LjQzNzg2ODA4ODUsNjE3NzA0LjU5NTE0NjI4MzcsMTU5ODA5LjQ1NjcxMDIzNzkKKzEyLFNhdCA1IEZlYiAxMSwxNTc3ODYuNzQzMjU0NTg0MywxMjQwNzkzLjIwMTMwNDYxNTcsNzM4NjU2LjQwNjQ1OTQ1MTQsMTI4NzExNC44MzUxNDk1NjYyLDU3NjUxNjYuMDcyMzIwMTMsMTA2NjA5Mi43NzYyODYyNTI4LDkyNTE4MS40NzM1OTYxMDM2LDEzNDM5My45MzI2MTczNTA5NSwyNTk0MjguMjg0NjA2NDI2NDYsNDAzNTY2Ni4yNzE0Mjk0OTczLDIwMzkyMzQuNDY3OTIyNTM2MiwyOTQzNTEuNDMwNjkzMjUwOTYsODIwMTc4Ljc2MDQzODM0OTIsMzQ0MDI2LjI3NzcxMzY1MTUsMzE0NTg0MC4wNDExOTI1MzI1LDE2NzEzMzIuMjU1MjA5NTMxOSw3NzgzMzIuNDcxMjc0MDc3NCwxMTI4NzQ3LjIxNDQwMjkyMzYsMTIxNDY4Ny4wNjAxOTQ4MDk3LDE2NTUxMTcuODkzNjMwOTM1MywxMzg5NzI1LjY4Mjk4NjQ1MTUsMzQ4MTA5LjE3OTk2MDIwMzI0LDI2MDk2NDkuMjg2NjA0NjYyLDEyNTA4MDMuNTg5NzM0MTA4LDE0NTYxNTUuNjUyODU3NTc4OCw4MDU4MzUuNDkzNjE3NzkxMiwyMzk4MTMuMjcxNDE3NTA3NjcsMjA4MjU3Ni4yMzYxNjA5NTkxLDE3NDMxMy4zNzgwMTg3NTUxMiw0NTgwODkuNjQwODQ1NTQ2MiwzMjc4MDguMjg4MTY2NjYxNiwyMTk1NDczLjUxOTAzNTUzMTcsNDgwMzEwLjU3MDgxMDAzODMsNDc1NDMxLjk4ODc3MjQ2NjgsNDk1MTk0My42MTAwMDg3MTYsMzAwNzQ0OC41Nzg3MjI4OTEsOTM3OTY1LjI0Nzc4Mjk3NSw4OTE5MTAuODk3MjM1NjU1LDMyNDQ4ODYuMjk3MDMyODE4LDI3MTU2Mi4zMDkyMzM4MjgxLDExMDQ0MTEuMzU0OTE5NTk3MywyMDY5NTguMTU0Mjg3Nzg2NjYsMTQ5MDgxNC41NDMyMzA5OTc5LDUzNjYyODkuMzY2MjM2NTQsNTU5MjQwLjQxODI1NDcxNTIsMTg0NTU0Ni4wNTI5MjcxNjYsMTY0NTE5LjQ5OTYwMzkyNDUyLDE1MTk5OTkuODk2Mjc1MjgxNywxNDU3NzUxLjgxMTY3Njc3MzUsNTMyMzE0LjA0Mjc2NjEzNjgsMTM0NDcxLjU2OTY4OTEyNjU3CisxMyxTdW4gNiBGZWIgMTEsMTI1NzEyLjcyNjE2NDU3NTU1LDEwMDUyNDMuNzU4NTI3MjQyLDU5NzM0Mi4wMzcyMzI0Nzk4LDEwMjUwMzAuNDg2NTI1MjUzNCw0NDI4NTg4LjIyOTgxNzYzMzUsODQ3Njc5Ljg4ODQ1NzgwNDcsNzQ1OTIyLjEwNzA4OTUyNDQsMTA2Mjg5Ljc1NTE3NTk1NjM2LDIyMDIzNC41NzY0NzAyMjkwMiwzMjE2NzU5Ljc0ODIyNjYxNDcsMTYyMjQ4OC42OTc5ODY2MTMsMjMzNDkzLjg5MTEwMzMzNjU2LDY2NTA1MC45ODg3Njg3Mjk2LDI3NjM2MC4yOTM0ODE3ODY2LDI1MDg1ODcuMzU5ODg3MzQ1NywxMzUwMzA3LjY1NjQ1OTQ1NSw2MzUyODEuNzAzOTQwOTI5OCw5MTQ2MjkuMTIzMzU1MTQ0OCw5Nzk0MjAuMzY4NDE1NDExLDEzMjU0MjEuNTk0NzI5NDkwOCwxMTE0MDIxLjg2NjkxMzQwNzgsMjgwOTEwLjMzMjU1NTczMTksMjA5MjE3Mi43MDY1ODkyMTE1LDk5Nzk1NC4yNDQ5MTYzNzI1LDExNjU3OTIuOTQ2NDY1NTc5OCw2NTQ3ODMuMjkzMzg4OTEzNSwxOTI2MzcuNTAwNTExODczMDgsMTY2NTgxOC4wODkxMzk1Mzk3LDE0MDUxNy44NTY5NDczMDYxNCwzNjg0MDMuNTk3Mjk1ODQxMjYsMjYzMjMzLjY5NjgxNDU2MzY1LDE3NTgzODMuNDAxODYzNjQ4LDM4NTQwOC40NjAyNzEwNzQsMzc2MzYwLjAxNzQ1NTQ3OTEzLDM5NjYxNTAuOTY3NTM3OTMyLDI0MTQ0NzguNjQ5MTQzMDE2NCw3NTYzMDQuMjM3NTQyNjk1NSw3MTQyNDQuMTU5MjcwNTU2NCwyNjA0MDIwLjI3NDAyMTEyODcsMjE3MjU4LjQxMTAyODc5NTY0LDg5MjUxOS4wMjgyMTQyNTQ2LDE2NzEzMC4wNDk3NzkwNDUyNSwxMTk0ODA3LjcyMTMwNjUwMDMsNDI4OTAwMS41NDYxNDM4NjksNDQ1MjYxLjgwNDA1ODg5OCwxNDc3OTUxLjI3OTM0ODMxLDEzMjUyMC41ODEyOTM3MTE5MywxMjE1MjI5LjMxMTAzNDI1OTIsMTE3NTM5MC40NDk4MDQ1ODM2LDQzNjA3Ni40OTY0NDQ4OTcsMTA4NDYzLjE0ODg0NjI4MDY5CisxNCxNb24gNyBGZWIgMTEsOTc2MzQuMzA1ODU3MjY4MzUsNzkwMTA3LjAzMDIzNDIzMjcsNDY4ODk1LjU0MTYxOTYxMjEsNzk1ODQwLjU2NzcwMjk3OTMsMzM0ODgxOC4zMDQ1MjEzMTUsNjU3NDE5LjA5ODY1NDU4ODksNTg0MjY1LjUzNjg5MTg3NTIsODIxNTguMjI5NTE1Nzc4ODUsMTc4Njg2LjIwNTQ3Nzc5NTgsMjQ5OTA3OC43MzgyNzk2Mzk3LDEyNTg4ODQuNzI3NzE3ODExMiwxODA3OTUuMjEyNzIxNjI5NTYsNTIzMDM5LjU1Njk5OTQyMjk2LDIxNTkwMy4zOTk4OTU3Nzk3LDE5NDk1MDguNDQ2OTQ5NTU0NiwxMDU5MjM4LjI2MDU3MDQ1OTUsNTAxOTQxLjI4MDMxMDAxNzQ2LDcxODk3NC43NjUyOTMzNjc4LDc2NzIwOC4xMTA4ODIwODMsMTAzMzE0Ny4xODEwMDg5NzU2LDg2ODk5NS41MTYzOTE4NDgyLDIyMDE3MC44MjU1ODE0Mjg2NSwxNjMyMTQxLjQ4NTI4MDY0NjIsNzc1ODM1LjU3OTE1NjA0OSw5MDg1NTEuNDMyMTQxNzg1OSw1MTU3MjIuMjk0NzAyODAyMiwxNTA0OTEuODIxOTMzNDk0NywxMjk3NDExLjkyNTU2NDc0NjEsMTEwMDUyLjg2Mjc5MDI3NTI2LDI4ODA0My44MjQzOTIzNjQyNCwyMDU1OTMuMTk5MDQ2ODU1MjQsMTM3MDc3MS4zMTU0NTE5MjUyLDMwMDg1NC44NzQ5OTU4MjQ3NiwyOTEwNDQuOTkyMTQxNjI5LDMwOTE5MDcuODg1MDg0MTY5NSwxODg1NDc3LjkyNjk0NzI2NDIsNTkyNDM5Ljc2NDQ5NTQxNjksNTU2NzQzLjIxOTA0MzY2OTMsMjAzMjg4Ni4wNTI1NzExMTc0LDE2OTIzMi44Mzg3NDc5OTQ4Niw3MDAyNjMuNDQyMDExODIsMTMxMDYxLjMxNTQ5MjYyMDU5LDkzMTg3My42NTY5ODg1MDQxLDMzMzg1NjEuNTgyMjg4NzEyMywzNDU2NDYuNjE4NzgwMzA4MTcsMTE1MjA2MS4xNzMxNTYzMzgsMTAzNzMyLjI1NzM0OTg1MzU4LDk0NjE0Mi4zMjU0ODQyODA5LDkyMDcwNy43ODE4MjIxNjY5LDM0NTQyOS4xMjkwMzcxMTA1LDg0OTgyLjgzNDUyODk2NzgxCisxNSxUdWUgOCBGZWIgMTEsNzQ0MDQuMDQxNjM5OTQwMDcsNjA3NTM3Ljk0MTUxMzQzMTYsMzYwMTk5Ljk2NDY4Mjc3NTk2LDYwNjM0Ny41MDc0NjI2NzI5LDI1MDEwOTguMDQ2MTI3MjI1Myw1MDA0ODMuMDc4MDUwMDU5MjcsNDQ4MTAwLjY4Nzg0OTYxNTM1LDYyNDE3LjUxNDA5OTUyMDI0LDE0MDU5NS44MTAyNzk2MDY1NSwxOTA0OTE3LjAyNzg4NzUwNjQsOTU4Njc5LjAwMzMxMDI3ODUsMTM3NDgyLjAwMTUyNTA0MjA4LDQwMjM2NC43MDE3NjQwMzgzNiwxNjUyNjEuNzY4ODM3NTkyODgsMTQ4NjM0OS42NzY2MDY5ODEsODEzMjg0LjMyMjg5NjAyNzgsMzg3NDYxLjY3ODI4NTM4MTksNTUyODkzLjU0MTU2NTU3MjQsNTg4NDM1LjY5MjEzNzQ1MjEsNzg5NDc4LjY4Nzk1NDU4ODYsNjY0NDA1LjY5NzAzNjY3NjIsMTY4OTM5Ljc0MDYyNjkyMDA0LDEyNDc5NjEuMTQyOTM3NjUyOCw1OTE2NzkuOTY3NzY0NjgxMiw2OTQxNzIuNjcxMzA4NDIzNywzOTcxNzAuNTk2NjM5NjkzMywxMTUxOTAuNTc2MDg4MTk3Nyw5OTA4MDIuNTI4Nzg0MDQxMSw4NDM5Ny44NTI3OTU0NDI5MywyMjA2MTUuMzMwODY4OTY4OTEsMTU3MzM4LjA4Mzk5ODY4ODUzLDEwNDc1NTIuNDcyMTM4MzcxNCwyMzAxNDguMzMxMTg4ODUwOTIsMjIxMTQ3LjQzODc5Mzk2OTksMjM2Mjg4MC40MjQ5NzEwNTE1LDE0NDI3NjEuMjE1NzM2NTI5OCw0NTQzOTQuMTU1MzQ0NzY0NjQsNDI1NDM1LjAwMDM1MTU3ODgsMTU1NTIwOC4zMTExOTI4MDU2LDEyOTI1MS45ODUwMTE1MjY4Niw1Mzc3NDAuMTA4OTE3NzE5LDEwMDYwNC41NDA5NTM3NzkxOSw3MTI0MDAuMjM0MTg5ODQwNCwyNTQ4NDkxLjUwOTgyNDMwMTYsMjYzMzE0LjQ1NzU1Njg4MDI1LDg4MDM1Ny44MTc0MDg4NTk4LDc5NTE3LjczMTY2NzY0ODQ2LDcyMjM1Ni40MzE1MTE4MzMzLDcwNjE2MS45ODA5NTE1MTY0LDI2NzE0OC42ODY4NzY4OTIyLDY1MTkyLjIzMzgxOTY2MjM4CisxNixXZWQgOSBGZWIgMTEsNTU4NzcuNzA2OTYxOTczNyw0NTk0NTMuODY0NjMzNzIxOTQsMjcyMTk4LjQyOTIwMjc3OTY2LDQ1NTI5MS4wMTUxOTAyNzU4NSwxODQ5MzMyLjMwNTg0MTcwMzcsMzc1NTc1LjQxNjMwOTMwMTg2LDMzODE5Ny4zODE3NzEzOTMsNDY3ODQuNjEzOTcxMTc4MDM0LDEwODE5OS4yODI2NTMzNjQ1MywxNDMwODU1LjE5NzAzOTIxODksNzE5NTg5LjEyODQ0Mzg0NTcsMTAzMDg4LjMwNDIwODI1MzUyLDMwNDM5OC4xNjU5OTc4MzQ2LDEyNDUzNy44NDMyNDM1Mjc1MiwxMTE2NjQ5LjIwMzg1ODAxMSw2MTQzNDcuMjkzNjg4Mzk4MSwyOTM5MDIuNzM2MTE2MjAwNzQsNDE4MTU4Ljk1MTI3MDk2NjU2LDQ0NDEyOS40OTg2NTYzODI5Niw1OTQxNDkuODk5NDA3NTkxMiw1MDAyMzUuMTIxNDQ4NDkyNzUsMTI3NTUyLjEyNzIyNjgwMTgxLDkzOTY0My45MjA4ODU3NTI4LDQ0NDYwNi4yODEyMzY1MzAzNCw1MjIzNjcuNjAzMTc5OTI2LDMwMDcyNC4wNjM2NDkzNTY5NSw4NjgwMy44NDYxOTg0NjQwNyw3NDUzMDQuMDE2NzY1NjA5OCw2MzY5My45OTUyOTc4OTE5MywxNjYzMzAuMTY2Nzk4MjQ0MDMsMTE4NTQ3Ljk5NjE5MjAwMTE0LDc4ODQxOC40MzM0NDEzMzAyLDE3MzM1My4yNzI2MzE3NjMsMTY1NzUxLjI1MTM1NzQyMDE0LDE3NzgzODYuNTc0OTUzNTg3NSwxMDg2OTYxLjQwMjE2MTkzMiwzNDI5NjEuNTc2MjQyNjQyOSwzMjAxNzYuMDgwNDEwMzQzNTQsMTE3MTQ3Mi41MzgyMzM5MjYsOTcyMzMuODAyNDk0NDAyMiw0MDYyNDkuMTQzNTQ0OTg1Myw3NTk4MS4zMTE0Mjk1NTY4LDUzNjMyMy41MDE1NjE2NTkzLDE5MTYzOTcuOTA0NDU5OTg2MSwxOTc2OTcuOTQ3ODcxNDcwMyw2NjI1NTAuNjc3MzU4NTQwMSw1OTk5MS42Mjg1MTk4NDkwOSw1NDMyNjEuOTU1MzU4ODM1OCw1MzI5ODEuNzgzOTMwMzI4MiwyMDI5MzUuMDUzMDI2MTQyMjQsNDkyMTEuNjU1NTIyMTk1ODg0CisxNyxUaHUgMTAgRmViIDExLDQxNDc5LjA1MzQ1MTUyNzY5NiwzNDI5NjUuNzA5MzU3MTIzOSwyMDMwNjMuODY3MTAzOTk4NTIsMzM3OTI2LjE2MTM1MTE1NSwxMzU2MTM4LjUxMDU1NTA2MjQsMjc4NjMzLjQ0ODAwMjAzNTMsMjUyMDQ0LjgzODcwNDAyNjcsMzQ2ODkuMzY5OTE0OTA0MzQsODE4ODIuMzgzNDk3NjQxMTMsMTA2MjI5Ny40OTMzOTc3OTc3LDUzMzk0Ny4xODQzNjE1ODQ3LDc2NDM3LjAyMDYzMjI4NTU4LDIyNzI4Ni42MDY2ODcwMTQ2LDkyNjk4LjczNDQxNzE0OTA3LDgyOTEzNy42NjA0OTgzNjE4LDQ1ODE2Ny40NzM1NjM0MDEsMjE5OTE1LjE1NTM5NDY2NTk2LDMxMjE1OC42MTA2NDI1NzIzLDMzMTAwMS41NTE3OTg2MDgxNSw0NDE3ODIuNTQyNjUyNjIxMTcsMzcyMDc4LjkxMjQ0OTYwMDIsOTUwODcuODA3MTQzNjczOTYsNjk4OTQyLjM0ODM4NjE2ODgsMzMwMTg1Ljc2OTg4ODgzMDE0LDM4ODM3NC45ODQzOTE4NzE0MywyMjQ2OTUuODE1MDM0MzYwMjgsNjQ2MTAuOTExNjEwODgzOTUsNTUzOTYwLjUzNDk3NTU1ODksNDc0NjYuMTQxNDczOTczMDc1LDEyMzg1My44MTI2Mzk4OTQ0NCw4ODIyOS4wNDQ1MDM2MDIyNiw1ODYyNTkuMDkyMDgwMjY2OCwxMjg5ODUuMjUyNjQ2OTM5NTUsMTIyODc2LjE0MzUwNDkxMDI3LDEzMjIzOTYuNjc0ODQyOTY5NSw4MDg5MDcuMzYyMzk3NTgwNCwyNTU2MDMuOTYwMzc4NzcwMTYsMjM4MDY4LjIzMTgwNjI0NDksODcxNjc3LjExNzY4ODIxNTEsNzIyNzUuMjM0MDg4NjMxOSwzMDI5OTkuMzMzNTU5NTg5NjQsNTY2NTYuNjYxNTY2Mjc0OTYsMzk4ODkzLjcxODAzMzc3MjEsMTQyNDAyMS40NTE0NjMwMjM0LDE0NjcyNS4wMjAzNzgwMjc3Miw0OTI2NDYuMDgyMTU1OTkwNTMsNDQ2OTUuNDQwMzEwMjAzOTM2LDQwMzcyMy41NDI0MDc0NTg1LDM5NzIxOS42MzIwNzYyMTc4LDE1MjAyMi41ODY1ODYwNjM0LDM2NjgwLjcxNTg4NTcxMDMxCisxOCxGcmkgMTEgRmViIDExLDMwNTAwLjM2MTczODkzNTg3NywyNTMzMzkuMjgzODI3MTgzNDIsMTQ5OTIzLjQzNDk2MTMxNzE0LDI0ODQ1OC4wMTM4MDc0NzI0OCw5ODc1OTEuNzk1Mjk3NTMxOSwyMDQ3OTIuNjY5OTYwMDEwOTQsMTg1OTMxLjYyNTgzMzQyMjMsMjU0OTMuNjUyNTExMzYzODQsNjExNTcuNjM2MjM5MzE2OTcsNzgxMjEzLjQ3MDcyMTY4MzksMzkyNDk4LjM2MTIyNDQxMTIsNTYxNTguOTYwMjQxNDg0MiwxNjc5MjkuMzU0MjA3OTcwNzgsNjgzMTMuODkwMjUxNjAzODcsNjA5ODEzLjg2MzE5NjcxMDEsMzM4MTgwLjYzMzk2MDMzNzksMTYyNzY0LjcwNDA1NTY3OCwyMzA1OTMuODgyMDUxNzQwOTUsMjQ0MTgzLjM1NDYwODQ0MjA4LDMyNTI4Ni44NjcyNDE5NzY3LDI3NDA0MC4zMTg3Nzk2OTQyLDcwMTYyLjc5NTU4NzAyMDgxLDUxNDc5NS42MDkzNjkzOTE4LDI0Mjg3Ny4zOTk1MzMzMjIyMywyODU5NDIuNDE2NjcyOTYyNSwxNjYxMDcuNTk5NDEwODU1MzMsNDc2MTQuMjAxNjQ3NzYzOTMsNDA3NzU2LjA4Njc4NTY4MTcsMzUwMTMuOTU1NzE3NjU0MTgsOTEzMDIuMTU0MjIwOTQ1NTcsNjUwMTMuMTkyOTE4ODI0MDUsNDMxNjgyLjIyNDA1NTY4MjEsOTUwMjUuNDk5NzI4ODg5MDcsOTAyNzYuOTE1NTE4NTYxLDk3MzczMC4wNTgxNTk5NjUyLDU5NjAyMS4zODg4OTY5NDM1LDE4ODU2Mi4zNTk4OTg0NzYwOCwxNzUyOTAuOTM1NDQ5OTYzLDY0MjE5Ny4zMjM3NjI2Nzg1LDUzMjAyLjYxOTE0MjQ3NDE0LDIyMzY2NS4wNTgxOTkxMTk1Miw0MTgxMy45NDA3MTMxMjIyNzYsMjkzNzcyLjgxNzExNTc0MjEzLDEwNDc5NjEuMDQwMjYyODkwNSwxMDc4NzIuNjk0MDY3NzAyMDksMzYyNzQwLjI5MjU1OTI0NzA2LDMyOTYzLjA2NTAzNDgzMjA4LDI5NzEzMS4yNDcxNzkyMDUzNSwyOTMwMzEuOTg0NDYxMDEwNTUsMTEyNjIxLjE2MTcyMTUyMTI4LDI3MDYyLjI4NjYyNzc5OTI1OAorMTksU2F0IDEyIEZlYiAxMSwyMjI1MS44MjM2MTc4NzY1MjIsMTg1NTI2LjU5MDczNjA5MTI4LDEwOTc0Ny4wOTgxNjc4ODA2NiwxODEyNTAuMDkwMzI1Njg3OSw3MTQ5NjcuOTU1NjMzNjg3OCwxNDkzNTYuODQ1NDQzNjU1NzQsMTM2MDEwLjg4MjI5MTkwNDA3LDE4NTk3LjE2NzgyNjg3ODAyLDQ1MTk4LjE4NDU2NTY3OTEzNCw1Njk5OTEuMDM4ODIyNTQ0NywyODYyODAuODQyNjY5OTEzOSw0MDk0Ni45ODc5NTE4MDQ4MiwxMjMwMDIuNzI2MjQ5MTU3OTYsNDk5MjkuODQ0Mjg5MTQ2Nyw0NDQ5NzIuNjUzMzM5ODM3OCwyNDc1MDEuNjA2NTU0MjA2NiwxMTkzOTIuMzE2NjQ3MzIwNTIsMTY4ODc2LjI4Nzk5NDIwMDksMTc4NjI2LjI2MzMyNDMxNjYyLDIzNzU3Ni4wNjM4Mjc2ODY2MiwyMDAxOTQuMzI3ODg4NTE5OSw1MTMzNS4zNzEzMjE4NTAxNywzNzYwODMuMTU0MzAzNjcyMiwxNzcyNDMuMzc4OTMwMjA5NiwyMDg4MjguMjU3MDc4MTMwNzMsMTIxNzI0Ljk5ODUyMjU2MTgzLDM0ODAwLjM3MDY0MTk0NDQ4NiwyOTc3MzAuNjA5MzgzNjQ5OSwyNTYxMi4xNjQ5NzgwNjY3MjUsNjY3NDkuMjc1MzE0NzczMjEsNDc1MTMuMjUyNjUyNzIyNDYsMzE1MjkyLjg1MDA0NTQ4NDQsNjk0MzQuOTc0NjMzMDMwOTQsNjU4MzEuMjkyMzg0MjgyOTksNzExMTk3LjgwNjIzMzgxNjksNDM1NTY0LjY1MTM4MDcyMTQsMTM3OTM4LjQ4MDM5MTA1NDEsMTI4MDI1LjI1MTgwMTU3MzgyLDQ2OTI2NC4wMzAwMzkzMjU2LDM4ODQ4LjQ5MTI0NjkzMjIsMTYzNzAyLjEwMTk0Mzc3NjQ4LDMwNTk4LjgyODIzMzE1MDkzNiwyMTQ1OTkuMTgzMTk1NjM3OTUsNzY1MDUyLjc2NjkyMDU3OTQsNzg2ODkuNzQzODU3ODc5MDgsMjY0OTMxLjkwODg5NTcwMTQsMjQxMDcuNjQ0MDAxODI3NzU3LDIxNjkzMi4xNjc3MzE1NTAyNiwyMTQzNTkuNTU4MzM1MTE2MjUsODI2NzUuMDM3NjIzNTMxOTYsMTk3OTguMjk4MjI3NzA4NTkKKzIwLFN1biAxMyBGZWIgMTEsMTYxMjYuNjczMzI5MDMzMjI1LDEzNDg4Ny41NzQyNDY3NTAyNCw3OTc2My43MDc1NTI0MzY4NywxMzEzNDkuODQwMjQ4NjU3ODYsNTE0OTg2LjU0OTg2MTEwNjIsMTA4MjE1LjY1NzExMjQ0NzU0LDk4NzkzLjI3MjcxNjY5ODY0LDEzNDgxLjQ1NzAwODY5MzcyLDMzMTE0LjU1MjU0Njc5NzA4LDQxMzEyMC45NzYzOTQzMzc1NCwyMDc0MzguNDc3NjIwNjc1MDgsMjk2NjMuNzIyNjQyMzg0ODIsODk0NDQuMjU5NTczOTUzMTEsMzYyNDAuOTIwMjY4MjEzNTgsMzIyNTMyLjA4MjUxOTk3NjEsMTc5ODQ5Ljc5NTEzMDk5MTE3LDg2OTI1LjU3MDg5NjE2MzQ0LDEyMjc4Ni4wODgyMzA1MDk0MSwxMjk3NDkuNzY4NzU5ODAyNywxNzIzMzUuNDMxMjI4MTk2MjgsMTQ1MjQ3LjY2Mzk0NTg0NzQsMzcyOTQuNjY2MDAwMjY0ODM1LDI3Mjg2Ny4xMjM5NDczNjgzNSwxMjg0ODMuNjEwMTY4MzE2MTgsMTUxNDc0LjU1NDUzMzkwMzIsODg1NTAuMTkxMTc1NjI3MjksMjUyNTkuMjAxMzQ0NzM2NDM3LDIxNTkyMy42NjYyMzU0NzkyNiwxODYwMy4xNzA2NzUxMTAwMDYsNDg0NTkuOTQ2MTc1Mjk3MzY2LDM0NDg0LjMwNzA2MTkxNjgzLDIyODcxNi41ODcwNzg4NjY1OCw1MDM4Ny4zMDg2Mzc0MjQ0NzQsNDc3MDIuMDIxODE0ODY1MzgsNTE1OTExLjg4MjI5NjE0MjIsMzE2MTExLjQ2NzI2MDkwODg2LDEwMDE5NS4zODUwOTI3NTQyNyw5Mjg2OC4zMTI1Mzc2NDYwMSwzNDA1NDAuODM0MzIzMzMwOSwyODE3NS4xNDE0NTE0NTEyOTQsMTE4OTYyLjIxOTk2NjQzNDE1LDIyMjMyLjk4Nzg5ODYxNjg4OCwxNTU2OTIuNTQwNDc1MDAwNyw1NTQ3NTguNTExMTA3Mzk5NCw1NzAyMy42NDMyNjgwNzMwMSwxOTIxNzkuOTY3NTU1OTUzNCwxNzUwNy42OTQ4OTc1MDUyMzMsMTU3MzExLjcwODg5MTAzOTA3LDE1NTcwNS4xMjY4MTQ5NzYxLDYwMjMyLjYyMjg3NjU1NDIyLDE0MzgxLjk2NTYzMTA5MzQzNworMjEsTW9uIDE0IEZlYiAxMSwxMTYyMS40NjQyOTMyMzQ1ODEsOTc0NzAuNDA3MDEzNzcwODUsNTc2MjAuMDMxMTM1MDYyMyw5NDY1MC42Nzc3NjQ3MDY2OSwzNjkzMDguNDExNDI4OTk0NDQsNzc5NjguNjk2NTQ3MzIwODMsNzEzMjkuOTQxMTc3MTc1NzEsOTcyMC40MjE2OTAxMjExNiwyNDA4NS44MTAyNjM5OTc5MTUsMjk3NzI2LjM1NjY2MTM3OTA1LDE0OTQ2NS45NjIwNjE2OTU3LDIxMzcxLjMyMDIxOTA5OTg5Myw2NDY0Mi4xMDA5NzA0MzU0NCwyNjE1MC4wMDYxNDI0MDYzNDYsMjMyNDU0LjI2MTc2NzY0MTczLDEyOTg5OS44MzU4Nzg4MjU5Niw2Mjg4OC4zNDg4NTg3NjcxLDg4NzI4LjQxMTUwNTA0MzYyLDkzNjgyLjMxODI4Mjg5ODgyLDEyNDI4NC43Mzc1NDkyNTgyMiwxMDQ3NjcuMjQ1OTY5NTk5NTUsMjY5MzEuMjkzOTA1OTkzMDM2LDE5NjgyMy4xMjA1NDA0MzA0NSw5MjYwNi45Mjc2MzcwNzM0LDEwOTIzNS42OTkxODkxMzYwNSw2NDAxNy44MjYwNzAzMTE1OSwxODIyNS45MTY3MzI2ODM4NTgsMTU1NjkwLjY1MjcxMjExNTc5LDEzNDMxLjM2NjE2MzIzNjI0NywzNDk3My41MzQ5NTI3NTUxMSwyNDg4MC45MTA3MDUyMzcxMywxNjQ5NDkuNDM0NTI5ODM1MywzNjM1MC41NDczNjMxNDU3MzUsMzQzNzcuOTcxMzExMzcxNywzNzIwNzQuNjI0MDM1NjI3MywyMjgwNzAuMjA0NDIwNTAyNjUsNzIzNDMuNTE3NzMwOTY5OTIsNjY5NzQuNzAzMjg4OTYwNDIsMjQ1Njc4LjI4NTYwNDYwNzU4LDIwMzE2LjE0Mzg2NzAyNjU3OCw4NTkyNi41NzU1MTUyMjc1MiwxNjA1Ni45NDIzMTI5NTAxNCwxMTIyOTcuMjMyMjQwMTY4OCwzOTk5NTUuODUzNDIxNzA5OTcsNDEwOTAuMTY5MTc4MzQ5NTksMTM4NTk2LjczNzg1NTIzMjE4LDEyNjM4Ljc2NjUzOTE2MTE0OCwxMTM0MjAuMDM4Nzk2MDU2NDUsMTEyNDIyLjQxMDc0NzgyMjgxLDQzNjAxLjM2ODU5ODk4MTU5LDEwMzg0LjcxMjEwMzk4MzYyNgorMjIsVHVlIDE1IEZlYiAxMSw4MzMzLjgyNDIxNTQ3MjA1Niw3MDA2MS4zNzUzMjAxOTQyOSw0MTQwNS45NjE5ODA4ODc3OSw2Nzg3Mi4wMDk0Mjk3MzM4OCwyNjM4NDYuODU5ODMwNTAzNiw1NTkwNC4xNTQzNTQwMTY4NjQsNTEyMzQuNzY4MDE3MDQ3MzIsNjk3Ni41MDY2NzIzODM1NDQsMTc0MTEuMDQ2MjAzODYzNDcyLDIxMzUxMC41NTY0ODg1MTUwNSwxMDcxNzEuNzA2NjQwMTg5NSwxNTMyMy44NjU0NDczNzUxNSw0NjQ3MC4zNDI0Mjk4NjkzMywxODc3Mi42ODE4OTIxMTM4MjIsMTY2NzA4Ljk5NDM1NTg4NDI2LDkzMzMzLjM2ODY2MDI3ODUyLDQ1MjUxLjQ3NjE2ODMwMDEwNSw2Mzc3OS4yOTgyNjcyNjI2Niw2NzI5MC44OTE5MjE4OTk4OSw4OTE4MS4xNTQ2ODYwOTMzLDc1MTg3LjIyMDcyMDY4MjA2LDE5MzQ2Ljc1MzkxMjIxMjEyMywxNDEyNTQuNDA4Njg1MjYyNCw2NjQxOC42NjE5MDc3NTM4Niw3ODM3OS43OTU0ODIwNDA2OSw0NjAzNS4zNDcxMDA4Nzg2NDQsMTMwODQuMDI3NTg4MzY3MDIsMTExNjk4Ljc4OTg3MTA3MzgsOTY0Ny4yNDI0ODU1Mjk1NjEsMjUxMTEuMjA2NzQyMjU0ODI4LDE3ODYwLjYxOTA3ODU2MTUyLDExODM2Mi42NTMyNzM4NDk1NCwyNjA5MS4xNTE5OTc5OTIzMzYsMjQ2NjAuMzY5NDI1NzA0MjMzLDI2Njk5MC4wNTA4MjQwMDIxLDE2MzcxMy40NzA4NTY3NzQzLDUxOTYzLjU3NzEwNDM4NzkxLDQ4MDU4LjA0NTc3OTU4ODg5LDE3NjM0Mi4wMzY3MTkwNDE2NCwxNDU3NS45OTQ1NTM3NTM1OSw2MTc0MC45Mzg1NTkyNjkwNSwxMTUzNi4xNjk1OTc1NzAwMTMsODA1ODguNzU2NDA0MzM0MTgsMjg2OTE0LjE3MzI4NzQ0OTMsMjk0NjQuMzM3MzQyNjQ1MjIsOTk0NTEuMTMzNDA5MzExNSw5MDc2Ljg5Mjk2MjE1NzY1Miw4MTM2Ni43OTQyODc0MDQ3Nyw4MDc1MS41MDQ0NjI0ODQ0MywzMTM4OC45NDYzNjE2OTc3NTIsNzQ1OS41OTQ3MDc5NjcxOTkKKzIzLFdlZCAxNiBGZWIgMTEsNTk1MC43MDkyNDUyNTM4ODksNTAxMjkuNTQ0NDg5NzA5ODIsMjk2MTkuMzE0NjAxODUwMDYzLDQ4NDYyLjEyMzc5NzMxNjYsMTg3ODUwLjIyNTczOTI3NTQ1LDM5OTE0LjE0NTE0OTY0MTk1NCwzNjYzNS41ODYzNzgzNjk3ODYsNDk4Ni41MDM1MTI5NTM2MzgsMTI1MTkuNDc4Njc1NTQ4NDgyLDE1MjQ2MC44NzgxODYxMTE1LDc2NTE5LjMyMDA2NjQyMzA0LDEwOTQxLjc0MTY3ODU4MjIwMiwzMzI1My42MzY5MTM1NjkwMiwxMzQxNi45NjQ3MzYyNzkwMzUsMTE5MDQ1LjcxNjUwNjQ1Njg0LDY2NzU2LjczMzQyMDAzMTg0LDMyNDA3Ljg3NDQxMTEyNTgzLDQ1NjM1LjY5NzI1ODIzMDY4LDQ4MTE3LjEzMjYwOTA0NzQ5LDYzNzEyLjc3OTg0MTMyMjU4LDUzNzIyLjA1NDU3MTMxNDYzLDEzODM1LjU5MjA1ODUxODQwMSwxMDA5MjkuMjUzMTc5OTk2NzQsNDc0MzEuMzQ4MzU5Njk3OTIsNTU5OTQuMzEwMjQ4MTYxMTMsMzI5NTEuMDcxNjc5MjcyMSw5MzUxLjE5Nzg2MDgzMDQ3NCw3OTc4OC43ODg5MjEwMjc5NCw2ODk4LjE1Mjg0OTA4MTA1NiwxNzk0OS44Mjk5Mjg3OTQyODYsMTI3NjQuNDc4OTc4NjU3NTQyLDg0NTYyLjA3MDYxNzEzNjA0LDE4NjQ0Ljc5OTc0MDgxNTg0OCwxNzYxNi40NjUzNTI3Mzk1ODIsMTkwNzQ2LjY4OTQwNzkwOCwxMTY5OTcuOTgwMTY4Mzg3NzQsMzcxNTcuMjE2MDE0MDUzNzQsMzQzMzMuNjE5MDgwMDQyMDksMTI2MDE2LjE2ODcyOTUxODYxLDEwNDEyLjE2NTkxNjAxNTcyOSw0NDE2MS43OTcwNzU5ODk2MDUsODI1MC43NTM4NjkwMTkyMTIsNTc1NzkuOTkwMzMyODE5Mjc0LDIwNDkzMC4xOTE3NDczMzQ1NSwyMTAzNy44OTUwMTIwOTkyLDcxMDUwLjA2MDA2OTA3MDQ5LDY0ODkuNjY0MDA0NDUxNzM5LDU4MTE4LjcyNzkyNDU3MjQ1LDU3NzQyLjE5MDcyNjE0ODEyLDIyNDg5LjY0NDU0MzUyNjUzNCw1MzM0LjMwOTg3Nzc4MDkyMQorMjQsVGh1IDE3IEZlYiAxMSw0MjMzLjA3MjE3OTg1NzU5NiwzNTcyNC4yMjQyOTc3NDI4MjUsMjExMDMuMzg4MTk4NjM2NTIzLDM0NDczLjA2NDUzNzMwNzEsMTMzMzMwLjUxMDQwMTAzMDMsMjgzOTEuNDA4MjM0NTAyODEsMjYwOTMuMDc2MTg5MDYwMTM1LDM1NTEuMTIzMjMwNjI1Nzg2LDg5NjAuODE3MTQ0MDQwMjExLDEwODQ1Ni44MDMzNzM3Mzc3MSw1NDQyOS41MzY2NTEyNDEyLDc3ODMuOTQ2MzQ2NTMyNjc1LDIzNzAwLjE1MzQ4MTY1OTgxLDk1NTEuODg0MjQ3MzM0MDY2LDg0Njg4LjU1NDYxMDYwOTg2LDQ3NTU4LjA1NDUyMTkwNDI3NiwyMzExNC4xNTM5MTY2OTQ3ODQsMzI1MjIuMzk1NTI1ODIzMzQ0LDM0MjcwLjk3MDgwODc4MTIyNSw0NTM0Mi42ODc3OTA5NjIzLDM4MjM2LjgxODgyOTQzNjg3NCw5ODU1LjIwNDE1NDIzMzUyNSw3MTgzNy42MTM4OTIzMjU2NywzMzc0My43NDYwNDU5ODAzOSwzOTg0OC41NTkzODg3OTczMSwyMzQ5MC4wNDY1OTA0NzY5OSw2NjU3LjMzMDIxNTk2NzEyLDU2Nzc2LjcwODQzNjc1MDk0NSw0OTEzLjAwNDI0NDI3OTUzOCwxMjc4MC42NDMwOTEzNTUzODEsOTA4Ni45NjU5MTUwMjA0ODYsNjAxODEuNDc3NjcyOTY2MDUsMTMyNzEuOTk1MjMxOTk2MTg1LDEyNTM4LjU0NTEzNzE0MzgxLDEzNTc1MS42NTYxOTM3MjY2NCw4MzI4OC4xMDIzMTUwMTUwMSwyNjQ2NC45MTA4ODY1Njk0MjUsMjQ0MzQuMzIyNjA3ODU0OTk2LDg5NzAzLjYzMjk5MDMyODE2LDc0MDkuMzA3OTU3ODA0OTkzLDMxNDYyLjIyNzA5MjkyOTM0NSw1ODc3LjU5MDI4ODc3MTI3NSw0MDk4MS43NjM2Njg5MTQ4OSwxNDU4MTQuMzMyNDcwNDUwMzIsMTQ5NjQuOTUyMDkwNDIwNzgsNTA1NjQuNTYyMDYzMTI1MDgsNDYyMS42NDY3NTAwNTYwMDEsNDEzNTQuNTQzOTgzOTk0MTI1LDQxMTI2LjI1NzgxNzc0NzU0LDE2MDQ2LjM3MDQ0NTkxOTU4LDM3OTkuNDY0MTgwMDAzMTg5NQorMjUsRnJpIDE4IEZlYiAxMSwzMDAxLjE2MTcwODAwMjQ0NjYsMjUzNjguMTA0MDI5NTgyMTQ0LDE0OTgyLjg2MTU5ODYxMDk0OSwyNDQ0MC4zMTI3MTY2NDUxNzQsOTQzNzEuNjc3ODczNTg1NDUsMjAxMjguMjUzNzg5NDQ2NCwxODUxOS40NjMyMDM3ODY3MzgsMjUyMC42ODg3Nzc5MzkzMDU1LDYzODcuODU5MjY4OTY4MTM0LDc2ODk1LjIwNzA4MTY4MjU3LDM4NTg4LjA5MDU3MzEwMjEwNSw1NTE5LjMzNTYyMDIxNzQ0NywxNjgzMS4xOTYwODIzOTA0OTYsNjc3Ni43OTAwNzI3MDgzMzYsNjAwNDUuMDQyODI5NjczNzUsMzM3NjEuNjIzMDQxNzQwODY2LDE2NDI1LjczNTE5MDQ3MzU0LDIzMDk0Ljg3NTc4NDc1OTY1MywyNDMyMy45MjE1ODM2MTk1NDQsMzIxNTkuMjAwNjYxODI2NzMsMjcxMjIuMDU0NDAzMTY1NTU1LDY5OTUuMzU2ODQ2MDgxNTExLDUwOTU2LjI4ODM1MTc1MzIsMjM5MjUuNDE1NjU2OTI0OTc1LDI4MjYxLjgxNTY4NjI4MTc1NiwxNjY4NS41MTUyMDY4MDEwMyw0NzIzLjE2NzY4MDM5MzE0LDQwMjY0LjQ5NTE4NTg1MTQ1NCwzNDg2LjkzMDAwODYwMTYyNiw5MDY4LjU3OTY5NTcxOTI5NCw2NDQ2LjY5MjA0NjcxNDc1Miw0MjY4NC4xNDU3MDA4OTIyMSw5NDE1LjAxMzM5OTgwNjQsODg5NS4yNzQyNjY0NzA1LDk2MjgzLjAxMjExOTQ0MTI1LDU5MDg2Ljg3MDA0NDUzODM2NiwxODc4My41NzExMjQ3NTAwOCwxNzMyOS45ODk1MjI1NjQzMTIsNjM2MzUuNDk4ODQ2NDY4MjcsNTI1NC41NjYzMDQ5ODAyNjE1LDIyMzM1Ljc3NTc3MDUwNTY1LDQxNzIuMzE5NTM0MDQ0ODgxLDI5MDY4LjQ5NDA1MTI3NjA2NiwxMDM0MDAuNTE0MzUyNDQzODYsMTA2MDkuNjA1Mzk1MzI1MDQ4LDM1ODYyLjg4MzA4Mzc2NzU1LDMyNzkuODczMzUyNTgwMTUyLDI5MzI2LjI3MTM2MzYwMTMzLDI5MTg5LjQzNzM2MzAwNzQ1NSwxMTQwNy4wMzQzMzUzNjA0MDgsMjY5Ni43NzgyMDc1NDc4OTgKKzI2LFNhdCAxOSBGZWIgMTEsMjEyMS40MTA0MTgwNjc0NzksMTc5NTcuMTg5MzE0Nzg3NDgzLDEwNjA0LjAxMzQ3Nzg1MjkzMiwxNzI3NS43NzAyMDc0ODU0Nyw2NjYyOS4xOTAwNzgyNjEyNCwxNDIyNy43Nzk1NDM4NDc0NzcsMTMxMDMuMjA1MzM5NjMwNDg0LDE3ODQuMDI5ODAwNDUyNTk0LDQ1MzcuNDYwODE2ODQwNTgzLDU0MzU1LjE5NDQyNDA5OTYxLDI3Mjc1Ljk4OTM5MjI3NjA4MiwzOTAyLjA5MTk2MDg2MTk0LDExOTE1LjE3MTU3NTMzMjE3Nyw0NzkzLjE1Mjc3NjAzNDYxMSw0MjQ0NS4wMTc4MjA2NTg5OSwyMzg5Mi4zODcyOTgwMTg4NSwxMTYzNC45ODY1NTk1NjcwODksMTYzNDguMzIwMjgyMDU0MTQ4LDE3MjEwLjIyMDYyNzE3ODkzNiwyMjczOS40NDcyNjU4ODUxLDE5MTc5LjQxNTMxMzIyMjY2Nyw0OTQ5Ljg5ODM4MzUwNjQ1LDM2MDM0LjIxNjU2NTM3Mjk0LDE2OTEyLjk4MTg4Nzk1ODE0MywxOTk4My4yMTU2NTQzMDI1NjMsMTE4MTQuMzAzNDU0ODE1NzA1LDMzNDAuNjM1MjM0ODY0MTEyLDI4NDY3Ljk2NDMyNTUxMzUxMiwyNDY3LjA5NTg2NTQzNzQyNjMsNjQxNC43OTg2MTgzNTM2OTksNDU1OS41MTc2ODgwMDIwNTQsMzAxODEuODg1MTY4NTMwNTQsNjY1OC40NDc5NTUxNDU3NDQsNjI5Mi4yMDExNTQ1MjIzNTk1LDY4MDgxLjY1OTU3MTYwNTQ0LDQxNzg5LjE5MTMzNzI3Njk4LDEzMjkwLjE5OTM2ODk3OTc5LDEyMjUzLjg2MTUzNTY1NDczNiw0NTAwNC40NzgzOTYyOTc2NiwzNzE1LjE1ODM2NjkxNDMzMDYsMTU4MDYuOTYzNjY4NzU1MDAxLDI5NTIuNTMzMTE1ODA2NzUxNSwyMDU1NS40NjY0Nzg5MjI2LDczMTAyLjMxMDAzOTE5MjYxLDc0OTkuNDI3ODcyODQxOTMxLDI1MzU4LjMzMzgwMTUyNTY4LDIzMjAuNDI0ODAzMjI0MzA2NywyMDczMy42MDkxMzk5MDc1ODUsMjA2NTIuNzUzOTgyMDczMzg3LDgwODIuNTQ1MTQ0ODE3NDUyLDE5MDguMTQ4OTg0NDUyMDU2CisyNyxTdW4gMjAgRmViIDExLDE0OTUuNTIyMzAyOTQ4NDA1NywxMjY3NS4yNTAyOTExNzAyOTIsNzQ4My43NjYxNDM2MTAxNCwxMjE3OC43NTM4NzY5OTk3Myw0NjkzNS4xNjMzMzUyMTQ5MTUsMTAwMzAuMjAzMTcyMjA5ODc2LDkyNDUuMTE0MjY4ODY2OTk5LDEyNTkuMzI2NTU4NDYyNjcwNCwzMjEyLjg0ODUyNDQ1MDQxOSwzODMxOC45NjgzNTI2ODQzMSwxOTIyOC41NTA1MTY0MjM0NDYsMjc1MS40MzY1NDE2MjI3NjEsODQxMS4wNTI3MjczODE3MTIsMzM4MC43ODc3MDQzNTcyMiwyOTkyMy4wMTc5MzQwMjI0OCwxNjg2MC42MjQ5MzUxODA5OSw4MjE3LjY2NzkyODc5OTMwMywxMTUzOS43ODgzMjM3NDk5ODEsMTIxNDIuOTU5MjQyNjYwMTM0LDE2MDM0Ljg5OTQ2MDg4NTY1NiwxMzUyNS41NzY4NDAxMzY1NzksMzQ5Mi43Mjk3MDg4MTIwODUsMjU0MTIuMDQyNDU1MjAwNTI0LDExOTIzLjYwOTY2Mzc5MDQ3MiwxNDA5MS4wNTE0MjEyNzgxNjcsODM0MS4zMDM4MDU4NTkxNzQsMjM1Ni4yNjU4MzIzNTMxODA1LDIwMDcyLjc1MDI2MDcwNTA5MiwxNzQwLjY2NDA4ODIzMzE3OCw0NTI1LjAzNDAyNjA4MTcwOCwzMjE1Ljg5Mzk1NjU3NDAzNDcsMjEyODMuMjE2MDk4MjkxNSw0Njk2LjAwNzY3NjEzMzk4Niw0NDM5LjE3NDMzMjA3OTI0NSw0ODAwOC44ODgwNDM0NDA5LDI5NDczLjk3MDQ5NTY0Mjk0NSw5Mzc3LjEzMjI1MDY2Mjg3LDg2NDAuOTA2NjgwNTQ1MDA2LDMxNzQwLjYxMzkxNTM4Mjk5NywyNjE5LjU5MDEzNzcwNzc4MjYsMTExNTUuMDgyMjMzMjExMzY4LDIwODMuNDkwNjczMzAwMzA0NSwxNDQ5NS43NDc0ODk3MzM1NTQsNTE1NDEuNzM4ODQxOTMxNiw1Mjg2Ljc5OTM3MjYzODI1NywxNzg4MS42NTkyMDg2NzcwMywxNjM3LjA2ODkwMzk4NTc4NiwxNDYxOC43ODQ4MzYzNTEzOTEsMTQ1NzEuODc4MDcxODY4NjE4LDU3MTAuMjE3MjgyMzE4MzkzLDEzNDYuMzY2NTk2MzQ0MzE4MgorMjgsTW9uIDIxIEZlYiAxMSwxMDUxLjczNTA0NjgyMzQ1NjMsODkyNC4wOTM3MDI5MjcwMjQsNTI2OC4yMzU2ODM0NDYxNzI1LDg1NjQuNzU5MDM0MjE2NjQyLDMyOTkzLjYyMDY0MzY0NzQ3NSw3MDUzLjk5MjAxNDI1OTIxOSw2NTA2LjU2Mjg2NzI3NDUzLDg4Ni44MTgwNDI4OTQyNDcsMjI2OC40NTg4NDU0NTc3ODI0LDI2OTQ4LjIyNTQzMjkzMjU5NSwxMzUyMi42ODMyNjcwNTUxNDEsMTkzNS40NTA3NzQ0OTMxNzA1LDU5MjIuMjU1NjkxNTk4OTc3LDIzNzguNjUyNDU3MTA3OTg2LDIxMDQzLjg5Mjc1ODkyNzY4LDExODY4LjIyNTg4NjU1MDY2NSw1Nzg4LjkyOTY5NzgxNTQxLDgxMjQuNzc2MDg2ODE2Mzk2LDg1NDYuMDgwMjQzNTg4NzM0LDExMjc5LjIzNDA2NzIxNjgwNyw5NTE0LjgwMjg4MTQ2Njc2OSwyNDU4LjMwMzI0MzIxNjgwNjUsMTc4NzYuNjk0OTc4ODI3Mjc2LDgzODUuNjI0NTIwOTM4NjYyLDk5MTEuNzI3MjE3NDQ5ODgxLDU4NzQuMDg0MDAzMDY3Mzg4LDE2NTcuODE1MTQ0OTgwMjY2MywxNDExOC40OTM4MDU3Nzg3MzcsMTIyNS4wMzY0NDI3NjA3NDYsMzE4NC4wMDI2NzU1OTY4MjQ3LDIyNjIuNTcxMTI0NDM5NjY5MywxNDk3MS4xMzQwNzkxNDAyNTQsMzMwMy43MzE3MjkwNTI1MjksMzEyNC4zOTI5NzEzOTk2ODk1LDMzNzcwLjY2NzgxOTMzNjU0LDIwNzM2LjMyMzg2ODU5NTA3LDY1OTkuNTI4MDQyNTYyNTAxLDYwNzguMTY3ODc2Mzg1MDk3LDIyMzMwLjMwOTY5NDEwOTY5LDE4NDIuNTUxOTExMDg5ODQyMiw3ODUyLjI1MjY5OTIwOTMyNSwxNDY2LjUxOTMzOTA0MDA2MjUsMTAxOTcuMTM0OTY3MDA1MTA0LDM2MjUxLjA3MTE4NjM1NTE1NSwzNzE3Ljk2NDY2MTMxNTUzODMsMTI1NzguMjk3NTM2NTU5Nzk2LDExNTIuMDU3MDY0OTY4NzA3LDEwMjgyLjA2NTcwNDA5NzQ0NywxMDI1NS41MTQ2NzY1NDM0MjcsNDAyMy41ODcxNjk5OTA5MzA4LDk0Ny41ODM3OTUwNTM0NDM5CisyOSxUdWUgMjIgRmViIDExLDczOC4wMDk0NzE3MTE2MTIyLDYyNjguNTI3MTY5ODE3NzY0LDM3MDAuMDYwOTUyMjc1ODIsNjAwOS45NTE0MTM0NjY1ODQsMjMxNDkuMTYzODcxOTE4ODA1LDQ5NTAuMDM5MjI0MDk5MjY2LDQ1NjguNzU1NjYyNTQwMDgyLDYyMy4xMzU5MDIwNjgyNjcxLDE1OTcuNTU5NTUwMTIzMDQxMiwxODkwOS44MTM4ODY3ODkzNzIsOTQ4OS4xMTM5Mzc2Mzc4OSwxMzU4LjUwMDQ0NjU5NTkzNjksNDE2MC4yMTIxNDI3NTg1NzIsMTY2OS43ODc4NDcwNzE2NTU1LDE0NzY2Ljc5MDM5NTI5MjI3Miw4MzM0Ljg3Njk4NjU5NDY0MSw0MDY4LjM4ODg2NzU5OTc4NSw1NzA3LjEzNzA4ODQ0NzU2MSw2MDAwLjg5NjEwMjQxMDczNCw3OTE2LjI0NzE1NjI5NzU4Nyw2Njc4LjMxOTAwNTE4NDkzOCwxNzI2LjI3NjgyMTI2Mjg1NTUsMTI1NDcuNTIwMzY2Mzc4MTIzLDU4ODQuMzgwNjYwNTQwMzQ0LDY5NTYuMzY1OTE5MDIyNTQ0LDQxMjYuOTgwNDk4MjU1MjI4LDExNjMuNzY0ODYxMTczMzA5Myw5OTA4LjMxMjEwNDMxMzE3OCw4NjAuMTgyMTQwOTQ5NDE4LDIyMzUuMzE2MzYzNTA5NDU2LDE1ODguMjU3OTg4NDc5MTI0NCwxMDUwNy40Njg1NDc4MDU5NiwyMzE5LjAwMjM0Mzk5ODQ1NDMsMjE5NC4yNDg4ODc2NjIwOTcsMjM3MDEuOTIxMTA2ODkzNTYyLDE0NTU2LjA1OTM2Mjg2MDQ2NCw0NjM0LjA2NzkzNDQyMTU2OCw0MjY1LjkxNzMyMDE0OTI2OCwxNTY3NC41MjE4MTk4MzU2MiwxMjkzLjEwOTczMjMyMzM1Miw1NTE0LjYyODc5OTU3MDIwNCwxMDI5Ljg3OTc2MTEzMjczNzMsNzE1Ny4xNDMwNjQzMDM1MjIsMjU0MzkuODY4ODcwODYwMjQyLDI2MDguOTI3MTM1MDY3NTU1NCw4ODI3Ljk5NzcwNjUwOTcyNSw4MDguODkyMDAwMjQ5NzM5OCw3MjE1LjczODUxMTgyOTk4OSw3MjAxLjIyMTA3MzQ0MDA5NiwyODI4LjM5MTE5NzQyOTA5OTUsNjY1LjM5MjE5MjI4NjA0MzQKKzMwLFdlZCAyMyBGZWIgMTEsNTE2LjgyNTMyNTA0Njc3MjMsNDM5My45MDkxMDEzMjM4MzUsMjU5My4yMjk2MDE2NjA0MzUsNDIwOC43NjA2NDUwNTc0ODUsMTYyMTMuNjU0ODAyNDgxMTc4LDM0NjYuNjgxOTM4NDQwMDc0LDMyMDEuMzk5MTk2NDMzMjQwNCw0MzYuOTgxOTEzNDQ0MjA0ODUsMTEyMi40NjcxNjM1MDEwNjksMTMyNDIuNDgxMzE3NTU5NDY2LDY2NDUuMzU4NzU0OTA0MzgyLDk1MS42NDQwNTE2NDkxNjg5LDI5MTYuMjU4MjI2NzcyODQ0LDExNjkuNzU4Mjk1MTM4NDg0MywxMDM0MS4xNzcxNDg3NzEzNyw1ODQxLjIxNTM5NTMwODcwMiwyODUzLjA4MDUzNDA2NDIyNzMsNDAwMC40NTExMDUyNDA0MzYsNDIwNC45NDgwNDQ5NjUxMTcsNTU0NC42MTc2Njg1ODQ1NzMsNDY3Ny44Mjk5MzAyNjM1MTUsMTIwOS43MDMzNzQzOTc3NDQ1LDg3ODguOTc0MjM1OTc0MTc2LDQxMjAuODY2MDg0MjM0MjA2LDQ4NzIuMjQwMTk3NjgxMTE3LDI4OTMuMzU3NTIyOTY3OSw4MTUuMjY1Mzg5NzQxNTkwOCw2OTM5LjQ3MzYyMTg1Mzk2LDYwMi43MzY5MjIyNzAwMDk5LDE1NjYuMDUyNDUwNjMxODU0MywxMTEyLjYxNjA3MTcyOTU0MzYsNzM1OS41OTA2NjM5NTM3MzEsMTYyNC40NDQ3NjQyMzg2NDgzLDE1MzcuOTU1NTg5Nzg1MTk1MSwxNjYwMS4yMDMwMjIxMjk1LDEwMTk2Ljc1MzAxOTA1MDgwNCwzMjQ3LjE4Njc4NTg3NzQ5NSwyOTg3Ljg5MDY1NDgxNDc1MjUsMTA5NzkuOTY0NDkzNzA0OTQzLDkwNS42NjE4NjA0ODA4NDkyLDM4NjQuODExMzc3NTI4NTU1LDcyMS43MzM2NzI2NjQwNjU4LDUwMTMuMTYxMTczODkyODc0LDE3ODE2LjY3MDQ1Njk4MDU0NCwxODI3LjAzNDQ3MjIxMjQ1MjgsNjE4My4yMjQ2MDc1NTExMTksNTY2Ljc2NzQ3MDk0MjkyOTcsNTA1My41NjcxMDU0NjE4MjE1LDUwNDYuMDM0ODU4ODUzNDk4LDE5ODMuOTIzNTk1MzE4OTgzMiw0NjYuMjY0NDk3MzQ1ODEwNQorMzEsVGh1IDI0IEZlYiAxMSwzNjEuMjY0NjAxODEzMDE0MDUsMzA3My45NjkwNjYyNDA4OTEsMTgxNC4wMDk4Njc3NzAyMjMsMjk0MS45NzA0Mzk4OTY4NzE1LDExMzM3LjcxNjY4NjEyNzg1MywyNDIzLjM5Mjc2NzgwMjg3NiwyMjM5LjAwMjY1MjAwODYzNjcsMzA1Ljg3NzE0Mzg0NDI2NTksNzg2Ljk5NDA2MzEzMTQxMTgsOTI1Ni41NzIwMTA2MTQ0NzYsNDY0NS4zMDQ2NDE3ODMyMzUsNjY1LjQyMzU4MDAwMTIzNjQsMjA0MC4zMTY4MDQwNDExMTgzLDgxNy45MjE2MTc5NjExODQsNzIyOC41NTUyMTE3NzE2MjUsNDA4NS43ODc1NDAxNDkxNDgzLDE5OTYuODg4NDk4MzE4NzYwNiwyNzk4LjczNzM0MDIxMDY4MywyOTQwLjg4MzcxNjY4NzUzOSwzODc2LjI0ODM2NzE0MDk4MzYsMzI3MC40NDcwODI3MjU5MTc0LDg0Ni4wOTM0OTYzMjM3MTgsNjE0NC43NDE4MTYxMTkzNCwyODgwLjUzMTU2ODU3NTEwNCwzNDA2LjE0NjE4OTgwODAxOSwyMDI0LjU1MTE3MjU1MDcxODUsNTcwLjA1MDgxMzkyNzQwNSw0ODUxLjEzOTQ5NDkzODU0Niw0MjEuNTM5NTg5MDM5MzgzNywxMDk1LjA5NTE3ODcwMzUwMDYsNzc3Ljk0OTAzOTU1MzIxMjUsNTE0NS4xMzMzNTQ2NjIyMzcsMTEzNS43NzM5MjkxMTEyODksMTA3NS45OTQ5MjAyODc0ODczLDExNjA2LjAxMDExODQzMzEsNzEyOS41NDgyNDMwOTg0MTcsMjI3MS4wNDAxNTU0NDM0MTQsMjA4OC44Mzc3MDE4MDQzNjksNzY3Ni45ODE5ODk5NDI5NDksNjMzLjEyMTAxNTU3NTI2NjMsMjcwMy4zODc0NzgzMjk3NjU2LDUwNC44MjAzOTEyNjczOTE4NywzNTA0Ljg1MDgxMzEzMzczMiwxMjQ1NC42MTk1MjA4MjkwNDgsMTI3Ny4xMjM1MTk4NjkyNDIzLDQzMjIuNzA0MTQ0NzE2OTkzLDM5Ni4zNjM5Mjg5NDg4ODQ3MywzNTMyLjcwMDQxNzc0MTg4ODUsMzUyOS4xMjUyNDE5MzkzODYsMTM4OC44MzgxODIzNzQxNzMsMzI2LjEwNjEzOTk3MTA5ODMKKzMyLEZyaSAyNSBGZWIgMTEsMjUyLjA5OTE3MDg2MDE0ODksMjE0Ni43NDE1NTIyNDE3NTk2LDEyNjYuNjk5MDE3OTMzOTQxMSwyMDUyLjk5Mzk2NDE5OTY2OCw3OTE2LjI4NjM3NzQ4NDI3NSwxNjkxLjIyNzYwNDY1MTI4NTcsMTU2My4xODM3OTIyOTYyNTcsMjEzLjc0NDgxMDQ5MjkzNzM1LDU1MC43MTgzNTYxMzgzNjA2LDY0NTkuNDMzNjk0NjcyNDkyNSwzMjQxLjczMjM5NjA0NTQ0MjMsNDY0LjUwODc2MTUwNTUxODM1LDE0MjQuOTQ5NzU1MTIwNDE3NCw1NzAuOTE5NDE3ODkwMzAyNyw1MDQ0LjIzNzg0OTU5MzkyOSwyODUyLjg5MDkzMDg3NDAxMDMsMTM5NS4xMjMyMDA5MjIyODEsMTk1NC41NTAyOTI5ODQ3MDY0LDIwNTMuMjIwMzgzMDI3OTI5NSwyNzA1LjIzNzI2MTYzODg3NCwyMjgyLjU1NjYzOTg1Mjk4NjMsNTkwLjc0MDYyMjY5Njc1MjIsNDI4OC42NDk4OTIyNzgwOTc1LDIwMTAuMTAyNDY2OTUzMTIxMiwyMzc3LjEyNTgyNDQ0MTg2MTQsMTQxNC4xMDYzNTcyNTQ2OTksMzk3LjkwMTY4ODMxODEyNTkzLDMzODUuNDU1NTEyMzY5MDA0NywyOTQuMjk5NzQxMjYxMTczODQsNzY0LjQzODk5ODAwOTk4MjksNTQzLjAwNjgwMjY0MjgxOTEsMzU5MC44MTU2MDA1MzY2MzgsNzkyLjczNjAzMTE4Mzc1NDcsNzUxLjUzMjE1MjM2MjM3ODUsODA5OS45MDIzNDYwMzUyMzUsNDk3Ni4zNDkzMjE3OTQzMjgsMTU4NS41NjA1NDI0NDU1MjI3LDE0NTcuODAxNzUwMTA2ODY2Miw1MzU4LjMzMjQ2MDMzMTg0NSw0NDEuODM4MDUwNzU1NjEyODcsMTg4Ny42NjM3NDEyOTMyMjM0LDM1Mi40Nzk5OTQ0NjQ4MDU1NCwyNDQ2LjEzMDE0MzMxNDExLDg2OTEuNDQ3OTk5Nzk2MDc3LDg5MS4yMTk4MzM3NjUwNSwzMDE2LjgyMjI4NzE3NjQwMDYsMjc2LjcxMDU0ODc5MDcxODgsMjQ2NS4zMTY2MjA4OTQzMTUsMjQ2My45MDc2MDIxMTI1NjM0LDk3MC40OTAyODQ3OTI4NDYzLDIyNy42ODAzMDg1MTE1MzkxCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNFSVJTdGF0ZXNPbmx5X1JLX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9JbmNpZGVuY2VfMC5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNFSVJTdGF0ZXNPbmx5X1JLX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9JbmNpZGVuY2VfMC5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjAxYThmOAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0VJUlN0YXRlc09ubHlfUktfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL0luY2lkZW5jZV8wLmNzdgpAQCAtMCwwICsxLDMzIEBACitpdGVyYXRpb24sdGltZSxzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9ub2RlL3RyYW5zcG9ydC9waXBlL1VTQQorMSxUdWUgMjUgSmFuIDExLDAuMAorMixXZWQgMjYgSmFuIDExLDAuNDY4MjY5MjA4MzgxODExNDYKKzMsVGh1IDI3IEphbiAxMSwzMC40MTAzOTA3ODIwMTQxODMKKzQsRnJpIDI4IEphbiAxMSwxNjE3LjI3MDMyNTkyOTkzMQorNSxTYXQgMjkgSmFuIDExLDczMjI2LjI3NDA3NDU2ODU5Cis2LFN1biAzMCBKYW4gMTEsNjQ5MDk3LjMyOTc3MTIzMjEKKzcsTW9uIDMxIEphbiAxMSw1NjQyODEuOTE1NzAzOTQ1MQorOCxUdWUgMSBGZWIgMTEsMTUzNDM5LjA2MzQzNTE4NjMKKzksV2VkIDIgRmViIDExLDEzMC4yNjI3NDAwMjYzMjMyMworMTAsVGh1IDMgRmViIDExLDAuMDQxNTI0Nzc5MjU1NDgyOTEKKzExLEZyaSA0IEZlYiAxMSw4LjcyOTQyMzM1NTQ0NzcyNkUtOAorMTIsU2F0IDUgRmViIDExLDEuNzQ3MzQwNDY1MTI4NDg1N0UtMTQKKzEzLFN1biA2IEZlYiAxMSwxLjA2NjIyMzk5NDQ2ODU2NzZFLTE5CisxNCxNb24gNyBGZWIgMTEsMS4wNjc0OTA4NzI0MjI5OUUtMjIKKzE1LFR1ZSA4IEZlYiAxMSw2LjI5NjI0MTY4ODI2MDM3M0UtMjUKKzE2LFdlZCA5IEZlYiAxMSwxLjMzMzQ0MjAxOTgzMTI1MDRFLTI2CisxNyxUaHUgMTAgRmViIDExLDcuNDgzOTQ5NDY1ODU4MTMxRS0yOAorMTgsRnJpIDExIEZlYiAxMSw4LjY0NDg2NDE3NTMxNDYyRS0yOQorMTksU2F0IDEyIEZlYiAxMSwxLjcwMTcxMzM5ODI3MzQ5NUUtMjkKKzIwLFN1biAxMyBGZWIgMTEsNC45MjM2MDY0NTA4NTA2MjVFLTMwCisyMSxNb24gMTQgRmViIDExLDEuODkwNzIzMDMyNDM4NzM5N0UtMzAKKzIyLFR1ZSAxNSBGZWIgMTEsOS4xMDk2MTgyNjM2MjgzMjlFLTMxCisyMyxXZWQgMTYgRmViIDExLDQuODY2MDE4ODQ0MjIwNTk4RS0zMQorMjQsVGh1IDE3IEZlYiAxMSwyLjc3MjU4MDczNzc5MjM3M0UtMzEKKzI1LEZyaSAxOCBGZWIgMTEsMS43MDA4Mzc2ODQxMDI2NTg0RS0zMQorMjYsU2F0IDE5IEZlYiAxMSwxLjA4NzQyODg1MzQ2MDE5OUUtMzEKKzI3LFN1biAyMCBGZWIgMTEsNy4xNjE1NTkxNjAxNTA4NjRFLTMyCisyOCxNb24gMjEgRmViIDExLDQuODA4ODQ3MDA2NzQ1MjQ2RS0zMgorMjksVHVlIDIyIEZlYiAxMSwzLjI3MDY3MzI0MjMyMzk4N0UtMzIKKzMwLFdlZCAyMyBGZWIgMTEsMi4yNDMwNTI3ODk3MDA2MTYyRS0zMgorMzEsVGh1IDI0IEZlYiAxMSwxLjU0NjQxODEyODgzMjk4NTNFLTMyCiszMixGcmkgMjUgRmViIDExLDEuMDY5NTY1MDI0NTkwODA2M0UtMzIKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0VJUlN0YXRlc09ubHlfUktfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL0luY2lkZW5jZV8xLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0VJUlN0YXRlc09ubHlfUktfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL0luY2lkZW5jZV8xLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZTU2YmYyCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTRUlSU3RhdGVzT25seV9SS19SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vSW5jaWRlbmNlXzEuY3N2CkBAIC0wLDAgKzEsMzMgQEAKK2l0ZXJhdGlvbix0aW1lLFVTLUFLLFVTLUFMLFVTLUFSLFVTLUFaLFVTLUNBLFVTLUNPLFVTLUNULFVTLURDLFVTLURFLFVTLUZMLFVTLUdBLFVTLUhJLFVTLUlBLFVTLUlELFVTLUlMLFVTLUlOLFVTLUtTLFVTLUtZLFVTLUxBLFVTLU1BLFVTLU1ELFVTLU1FLFVTLU1JLFVTLU1OLFVTLU1PLFVTLU1TLFVTLU1ULFVTLU5DLFVTLU5ELFVTLU5FLFVTLU5ILFVTLU5KLFVTLU5NLFVTLU5WLFVTLU5ZLFVTLU9ILFVTLU9LLFVTLU9SLFVTLVBBLFVTLVJJLFVTLVNDLFVTLVNELFVTLVROLFVTLVRYLFVTLVVULFVTLVZBLFVTLVZULFVTLVdBLFVTLVdJLFVTLVdWLFVTLVdZCisxLFR1ZSAyNSBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzIsV2VkIDI2IEphbiAxMSw2LjQwODUwMTM0NjE3MDkxN0UtNCw2LjQzNzIwODc0Mjc0NjI5RS00LDQuNjk3NTEyNzM0NDE1MDkyNkUtNCwwLjAwNTU2NDczNjUyMTY3MjM4MSwyNzEuNDMwODc1NTIwODQzMiwwLjAwNTgyMzE5NjM3MzI1MzE4OCw4LjMyNDI1NjA3Mjk3MzM1OUUtNCwwLjAwMjE2MjkxNzM4NzQ2NTc3NDYsMi4xMTk1NTMwMjY0NzQ2MTRFLTYsMC4wMTUzODM4MTE5NDYxNTU2NDgsMC4wMTAxMTA0MjA4NDk0MTUwNzEsMC4wMDIzNzM3MzcyNzg3OTU1ODMsMy44Njk0Mzg4NzA2MjM2OThFLTQsNC43Nzc4MDM0ODY2Nzk0OTZFLTQsMC4wMTEyODM3NjcxNTkzNzAzMTYsMC4wMDExODMxODUyOTA3ODQ2OTQzLDEuODI3OTkyNjQzMjg1NDIzOEUtNCw1Ljc0MzE3MTM1NDA5NDAwNUUtNCwwLjAwMTA4MTc2NzQxODI1NTUzMTcsMC4wMDMzOTMzMjczNDY5MDE1MDc4LDAuMDAyNTA3MTA5MDYwNzM1Mjk1NywyLjgyNTQzOTEyNDU3ODg4NTVFLTQsMC4wMDQ2Mzk0NDUwMzMxNzk3NjksMC4wMDQxNzE5MTUwNjA1MzI3NDIsMC4wMDMwODQ4NzAwNjYzMjAzODg0LDMuMDMyNDA1NDczNTg1NTE4NUUtNCwzLjM0NTg2OTQxNzYwNTgxRS00LDAuMDA0OTQ4ODg3Mzc0ODY0MTQsMS41OTYzMjkxNjEyODg1NzRFLTQsNS41NTE0MDUwNzY3MzQ1MzRFLTQsNC43NjUzNjQzNTEyOTQyODhFLTQsMC4wMDQ0MjIzODEzNzkyMDQ4MDQsNy42NTAwODc3MDc4MDU4MzNFLTQsMC4wMDU4NDQ0Njk2MjA2MjQ5MjQsMC4wMDk5NTA5NDM5NjcwMTE0NCwwLjAwNDQ5MjUzMjI1NTkwNDA1OSw4LjM0MTkzNzUwMDQyNjQ4OUUtNCwwLjAwMTgyODUzNDI0NzAzNjg3MDMsMC4wMDUxMDEzODAxMzg1NzE0NTksNi4zMDAwNTMxODUzNDMwMjFFLTQsNy41ODMwMjQ3NTI3NDM5MTdFLTQsMS41NDM0MjMxNDc4OTUwMDk0RS00LDAuMDAyNzYwNTkzNTM0OTg0NjYyLDAuMDE0MTQ3MDc5Njg5MTkzODEzLDAuMDAyNTAyMDk4OTkwMzQ0NzQxNSwwLjAwMzc3MjUyNzE0NzMxMDg4MSwxLjY0OTI2NzA5MDExODMzRS00LDAuMDAzODQ5NTUyNzM3OTI4ODUzNCwwLjAwMTMwMDM4MDcwMDY2OTMxNDUsOC42MzY3ODEzMzIwOTY4MjhFLTUsMS4xNTEzNTI4NTg0MTE3NDgxRS00CiszLFRodSAyNyBKYW4gMTEsMC4wOTA3OTgyMTcxMjc3NDE3MiwwLjA5MTMwOTAxNTEwMTY2NjM4LDAuMDY2NjI5NTAxNjY2MjEzNzksMC43ODgzNzAyMTA4NTQ1NzI5LDEyNDA1Ljg1MTk5NDI2ODY3MywwLjgyNDY5ODA3ODY1MjM3ODMsMC4xMTgwNjA2NzUxNzQ0MDExOSwwLjMwNTM1MTk0NjEwOTc0NjAzLDMuMDA3MDQ4ODA2NDE2NDIyNEUtNCwyLjE3OTgwOTIyMTU0OTU2NjQsMS40MzIwODg2MTEzMzY5MDkzLDAuMzM1OTEwODk2ODg3NDM3NzUsMC4wNTQ4ODcyMDU0OTU4OTEwMSwwLjA2Nzc1MTMwOTQ3NjE2NDgxLDEuNTk4OTY1NTg2OTU4Njc5OSwwLjE2NzgxODgzOTMyMzk0ODAzLDAuMDI1OTMxODY4Mjk1ODE5MjM0LDAuMDgxNDY0Njc2NjE4ODE4OTcsMC4xNTM0MjQ2MjI4OTgxOTg5NywwLjQ4MTA4NTEzMDM3MDk0NSwwLjM1NTQ3MDc2MzYzMjQ4ODIsMC4wNDAwNzM2Mjc1MDgyMDM0MSwwLjY1NzgwOTg2NTI5OTQ0NTMsMC41OTEyMjc1MDYxMTU3MjM5LDAuNDM3MzQ0MzU0NjIyNTUzMywwLjA0MzAxNTQ4ODQ3MDI2OTE0LDAuMDQ3NDQ1NzY4NDM3MTYwMTYsMC43MDE1NDk2MTYxOTk4MjQ0LDAuMDIyNjQwMTgzNDcwNjI0NTk2LDAuMDc4NzI1ODk4ODMxOTI5OTksMC4wNjc1NzM0Nzk2Njk0MjM5OCwwLjYyNjk4NTMzMzcyMDM2MzQsMC4xMDg0NzQzMDMzMjc3NjE3NiwwLjgyNjAxOTkyNjg2Mzg4MjUsMS40MTA4MDIyNDgxMzQ1ODQ1LDAuNjM3MDM4NDk5NDQ0NjY4NSwwLjExODMxMTg1ODIyMzEzOTMzLDAuMjU5MjM4MzcxOTUxNTMzNzYsMC43MjMzNTQyODU2NjYwNTE1LDAuMDg5MzEwNTY4OTQ0NjAyODMsMC4xMDc1NTU3MzQ5NzYzMTM0NywwLjAyMTg5MTA4OTk1OTI0MzgsMC4zOTE0MDUwNTE3NDI0MTUxMywyLjAwNTMxMDg0NDM4NzA2MywwLjM1NDQ2MjE0NTc1NTAyNTk0LDAuNTM0ODQ2Nzk2NTAzNjI4NSwwLjAyMzM5MDMwNTUyMzI1Nzc3NCwwLjU0NTY4MTgxMzAxMjczMDEsMC4xODQ0Mjk5NTg0NDgyMTk0NywwLjAxMjI1MjQ0MzI5OTEwMTUzMiwwLjAxNjMyOTU2NTQ0MDEyNTgxNQorNCxGcmkgMjggSmFuIDExLDcuNzI0MjA1MDA0MzM4OTM0LDcuNzc3MTE4Mjg0NjQwMTA3LDUuNjc0ODMxMzYyNjk4NzgsNjcuMDYwODUzODY1ODM4NjQsNTcwMTk0LjY1NTkyNTM2MSw3MC4xMjQ4MDQ2NjIzODQ1MiwxMC4wNTQyNjM1MTcyOTU2MzgsMjUuODc3MDY0MTE0MTExNzE4LDAuMDI1NjE3MTY2MjUwMzU0NDg0LDE4NS40NTE3MzEyOTA1NjY3MywxMjEuNzkxODI5MTA0ODQ0MTcsMjguNTM4ODIwMjE2OTgwNzksNC42NzUwMjI1MzY1OTIzMDcsNS43Njg4MjY5NDk2NTc0NjgsMTM2LjA0NTQ1NjYzMjEyNzkyLDE0LjI5Mjc0ODA3NDA5MDI4MiwyLjIwODk0NTk0NTE0NDU4NjUsNi45Mzg2NjYwMDg3NjE0MzMsMTMuMDY1OTY1MDcyMDAxMTkzLDQwLjk1MzYxMzM4MjExMjEyLDMwLjI2MjkzMTA4MTkzMjkzMywzLjQxMjg1MTU3NDA3MjA4NTcsNTYuMDAzMDE2NTkzMDQxNTgsNTAuMzA3ODgwMzcxMzY0NjMsMzcuMjI5MTk1MTE5MDE2NjY2LDMuNjYzOTc4MjQwNTY3OTExNSw0LjAzOTg2MDEyMjI0NTcxNzYsNTkuNzE0NTY1MDM2MDUyNTUsMS45MjgwNjg0NTIzNTcyNTg5LDYuNzAzNjk4MjA4Njg0NTYwNSw1Ljc1MzU1NDU5MjIwOTc0Nyw1My4zNzQ0MDIzMzA3MTIzNCw5LjIzNTYxNDA2NTYwNDI3NCw3MC4wODQyOTY1MjkyODc1OCwxMjAuMDk5ODYwODczODA2NzgsNTQuMjM5OTg0MTUwMDU0OTQsMTAuMDc1NjkyMjAxMDU3NTQyLDIyLjA2ODMzNjAzODI2NjgsNjEuNTg3NTcxNDg4NDIxMTA1LDcuNjAyMDkxMzQxMzA5NzQsOS4xNjAzNDc3MDg1OTE4MzcsMS44NjQzODg2ODY0MjIzMzIyLDMzLjMyMTY0MDU4NzMyMjM2NCwxNzAuNjczMTY3Nzc4NDMwMTMsMzAuMTQ5OTg5MDgxMjA2NTEsNDUuNTMwMzA4OTM0NDI4NDQsMS45OTE4ODgxODYwNDczNDIsNDYuNDQ0OTI3NzM5NjY1ODQsMTUuNzA2NDM2NjcxNzkwMzY2LDEuMDQzNzI1MjA0MzAyNjExMywxLjM5MDY3NzQ0NzYxNTIxCis1LFNhdCAyOSBKYW4gMTEsNTQ5LjY1ODY0NTcxNDMwNzEsNTU0LjQ1ODM4NzU0ODQzOTksNDA0LjU1MjE5NjA2Mzc1NTU2LDQ3NzEuNDU0MDI1NjI3Nzc4LDEuNjU5OTMwNjExMTczOTI0NkU3LDQ5ODYuNjA0NjU0MjQ0MjQ0LDcxNi42NTE5NTIwNjYyMTE1LDE4MzAuNzAwNzY4OTgwODk0LDEuODI2ODkxNzM3MjUzNjUxNywxMzE5OC41MTk5OTE5ODgxMTgsODY2Mi44NTQ2MDY4OTY2MzMsMjAyNi44MDIyMzcyMDUwMTcsMzMzLjMwNzg1NTkwMDIwMjg3LDQxMS4wODM1NDM5Njk0NjgzLDk2ODMuNDA3OTQwNTcyMzk1LDEwMTguODcyNTg3NDg1OTEwOCwxNTcuNTA5MzYzNjY5MTkyMTcsNDk0LjY4NDk0NTI4NDA1MzYsOTMxLjMyNTk2MTMxMzg5NzEsMjkxNy4zMDY0Mjc4NTk0NzIsMjE1Ni4wNDI0MTUwNTU4NjA2LDI0My4yNzQ0Njg0OTg1MTU0LDM5ODkuOTE2MjAwODg5ODczLDM1ODEuMjYyMDU4OTA5NTk2NCwyNjUxLjkwNDQwMTYxNzE5NDcsMjYxLjIzOTI1OTg5MDUxODksMjg3Ljg3NzI5NDQ5ODc2NCw0MjUzLjAwNDI3MzAzNjUyOCwxMzcuNDI4NDQ4MDg0NjE1MzgsNDc3Ljc0NzU4Nzc5NTc5MTU2LDQwOS45ODA5NDk4MDE5MDQ1NiwzODAyLjE2NTg2MzQ1MzU4MSw2NTguMDUzMDQ4MzI5ODAwOCw0OTY3LjE2MTgwMjQ4MTAxMSw4NTU1LjQyNjAxNTA4ODg5MywzODY0Ljg5NDYzMjA5MzUwOTcsNzE4LjE4MzQ1Njk3NDExNzgsMTU3Mi4wMjQ5MjUwNjg2OTM0LDQzODguMjY2NDMwNDMzMzI4LDU0MS40NTM4MzM1MDUyODMxLDY1My4wMTIxNDc0MzY1MjA5LDEzMi45MDE5ODExMDk3OTEzLDIzNzMuODk2MTE1NTAzMDExLDEyMTU0LjA3NzE2NDk4NDA5NSwyMTQ1LjA0MTg1MDAxNzY3NjYsMzI0My4zMzUwMDk0MTAzNTMsMTQxLjk3MDYyNzIzNzQ2NzMsMzMwNy42NDE2MTI2OTU4MzY2LDExMTkuNTM0NjMwMTk0NTY1OCw3NC40MjYyNTg3NjI4NTU5Nyw5OS4xMjc2NTk5MDU5MTk0MgorNixTdW4gMzAgSmFuIDExLDMxODU2LjI4MzY1NjA2MzI2NCwzMzE5MC45NTgwMjgyMjUzMywyNDE4OS4yNTcxMzU3NTgwMjcsMjc1OTExLjEzOTIwNjMzNzMsMS42NzIyMTk0MzQ3MjE5NTE2RTcsMjg1NTY0LjMwMjYzNzQ2ODczLDQyNzQwLjc0NTMxNDgwNDgxLDk2NDA2LjczNDEyNTM2OTUyLDEwOS45NDU0OTI3OTc3NjI3Miw3NjY2MDAuODM5NzE3Mjk4NSw0OTgyMTUuODQ1MjA5NTk5OCwxMTM1OTQuNTY0NjQ5MDgxNTYsMTk5NjEuODA5MzE2OTI2MiwyNDQwMy4yMDc0Mjg5MjI3NTcsNTYzNTQyLjA4NzM0MDAxOTksNjA4NzguMTY2ODg0Nzc0NjMsOTQ1NS45NzAxMDE3MTgzNDIsMjk2MTUuNzQ1NzE4MjY4NDIzLDU1NTQ4LjY5ODE5NTI0NjA0LDE3MjEyNC4yMDg3OTkwODk2MywxMjc0OTYuNDYwMzMyMzg5OTgsMTQ1MjEuMTE0NTkyNzc4MDM0LDIzNTk5OC43MTE1ODUwMDI5MiwyMDg4NzguNDkxMDQ1MjU0NiwxNTYzNjcuNzIxMzE5OTc1NTYsMTU2NjAuNjQzODY2NTY1OTA2LDE3MDg4LjI3MTc1NDQxNjE0NiwyNTAxODkuMzAyNDIxOTk0MDQsODE5NC44OTQ4OTkzODY5NTQsMjg0MDcuODg2NTM5NTc0MzA1LDI0MzIyLjk2NTk0Mjg2Njk1NSwyMjQ0MDUuNDYzMzUwNDc2MjYsMzg5ODkuNzkzNzczMjU3MjksMjY5MjI2LjA0Mjk4NjY5MzcsNTA0OTY3LjE2MTU4MjIyMjEsMjI5MjA2Ljk4NDMyNTAxNTU3LDQyODM2LjM2Njc3ODk0MTk4LDkyNzUxLjIxNzc1Mzk4NTM0LDI2MDA1NS42MTUzMDY3OTQyNCwzMTg2OC4wODUxMDA1MjY4MTYsMzkwMjUuOTQ4MzgyNjgwMzUsNzkzOC4wMzIzODQ4NDQ3MzMsMTQwMzE3LjQ3Nzk4OTU0ODM1LDcxMzMwOS44OTY4ODQ1NzI5LDEyMzg3Ny4wMjE4MTI4MTc4LDE5MTM3MC44NzA4NzM4ODI5LDg0NTguNzA2NTY3NzA0MzU3LDE5NDMwMi45MDA2MzMwMDkyLDY2NzczLjQwODQyNjQxMTUyLDQ0NzEuNTI1MTUyMTc4Njg5LDU5MTQuNDA0OTMyNjczOTMxCis3LE1vbiAzMSBKYW4gMTEsNDkyMDY1LjQ3OTA1NDg2NywxMjY3NTU3Ljg2NDcwMDQ0MzYsODgyODEwLjgwODE0NjM0NCw0MDc0MzM1LjQ4MjYxMTE3Myw2NDQ1MC41MzY1NTg5NDc0MiwzNTMzNTA1LjM4Njc4ODk3NDUsMTQxNzcyNy4zMjMxOTg2Mjk1LDQ1OTgzMC4wNzAzNjQ4MjU4Myw1MjgzLjg3OTg0NTk1NjI4MSwxLjIzODE2MjgxMzU1MTU5OTdFNyw2NjQzNzY4LjkyMTE2MTgyLDEwMTk0MjguMTUwMjQ0OTU5Miw3NzY3OTYuMzM3NTg1MzY5Nyw2OTEzNjEuNjg1NDU5NDkzMiw5NDkwODk3Ljc4NTkyODI5NCwyMTYyNzgxLjA4NDA4ODQzMyw0MDY5MzUuODE2NTQ3MDIyMywxMTM1NTExLjE2ODM0MzY2MjcsMTg0ODQ0Ny4xNDI1NzM4NzYzLDQwNjAzMzkuMTk0MjY3MDUwNCwzMjA4NzM5LjYzMDcxMzcxNDMsNDk2ODIyLjk3MzYzODM2NDg3LDU5ODE4OTUuNTI1NzkzMTU2LDM2OTMzMzYuNDU2NTY0OTc4NywzNjI1MzAxLjQwMDkxOTQ1Myw2MzM4MzMuMzkyMDY0NjM4MSw0ODMxOTIuODQwNzI4OTEwNDcsNTQ0NTgxMy42MzEzMTQxNTMsMjcwMzI0LjY1ODYzNTM3ODkzLDg0OTkwNC40NDI0NTQ1NTk0LDY3NTg4MS40OTAyMDU4MjM3LDUzNDI2MDcuODk3ODk4NTA3LDEwNDA1ODQuMjQ3NDM0Nzk2LDE2NTU4NjYuNzkyMzQ4NjY4NywxLjIwMzcxMDgyMjI1NTE5OThFNyw2Mjk0NTEwLjg4NzgzMDQwMywxNDI2MDI4LjMxMTM2NzU0MiwyMTg4MDAzLjEzODgwMTAyNDMsNjk4MTU0MC44ODQ1NjU4ODksNzAzMDk2LjU2MzAzMDk0MTMsMTM5NzQ1Mi40MDM1NDc0MDc4LDI3ODEyMC42ODE1MzU2MTU4LDM0ODYzNjAuODAwMTM4MDM3NywxLjQ2MTg4MTE0NTQzOTgwMUU3LDE3ODM5NjEuMzQ0MzA4NzU0Nyw0NTIxMzgyLjc3OTAzMzA0MjUsMjcwOTE2LjE0NzgwODcyMzczLDQwNzczNzIuNzg3NTgwODcyNCwyMjIwODI1LjUxMTMxNDMyMywxOTg5NDUuNzA2NzQ1NjQwNiwxOTkxODcuMzk0MTIxMDMyNTMKKzgsVHVlIDEgRmViIDExLDEwMDIxOC42MDQxOTcwNzgzNywzMTI2MTExLjI2NTU2MDQzNDcsMTc1NzQ5My42Mzk1Mzc5NjU2LDc1NjY0Ni4yNzE4OTY5OTY0LDExNjUyLjYxNzUzNjMyOTU3NSw0NTkxNjguNjA5Mzk3MTY5NTUsMTkzNjY3OS4wODE3NzA1ODYzLDk3NTAuOTc4NDAwNTQ0OTEsMjAwNzM3LjYxNzQ4NDU2MTgsMjc2NTY4MC40NTUyNjYxMzEsMTAwMzIzMy4yODUxNDI1NDIzLDcwMTkzLjUxOTc1NDQxNzUyLDIxMTM3NjkuMzY4ODg2NTAxNSw1NzQ5NTkuMzYzNjAwNjE3OSwyMzEzNTc0LjM1MDM2NDI0NzMsMzgzODk3MS4wMTczMTYxNDI2LDIyMTI1NDkuMzc1OTk3MTA1NiwyODU3NjEzLjU2MTAzNjIzMDUsMjU1Mzg4Ni4zMzAzNzk0NjM3LDIwOTc2NzcuNTgzODQ1OTIzNywxOTQ1NDU4LjkyNjk3MDU5OSw3NjAyNDguMzQ5NjE4OTI3NiwzNjkyOTk3LjQ0ODY3NDkxNTQsOTk3ODIwLjU4OTI3NTYwMDksMTc5NjUzNS45NzA4MDA1MTQ4LDIxNzEyMjQuNzYxMTI4NzExLDM5OTY1OS4xODIwMTkxMzIyNSwyMzI3MjI0LjAwMzU3MjUyMiwzNjIxMDMuNzk3Mzc1NTAxMiw4Mjg4MjkuNzY2MTk4MzA3NCw1MzI0NDcuNDA4NTA3MjEzLDI4MjI0NTIuMjk1OTczNTg2NCw3MzQ2ODIuNzQ5OTYxMDc0OCw1NTE3NS4wNTgwMzkxOTY5MSw2Mzc4MzMzLjE1NzQzMDU4MSw0ODAwMzI0LjU5NDg5MDkyMiwxOTczMjE4LjM1MzE5MzY4MTcsMTEzMDQyOS44Mjc0NjczMjU0LDUwMDczMDYuOTY2NDc4NTA4LDMxMDAwMi44NzQ4NTcwMDEzNiwyNTYzMzU3LjY2OTMyNzE4OSw0NjY2NzcuODM2NTMyMzgwOSwyMDQ2NTA1LjU1NjYwMDk0NCw1NDQ3OTY5LjU5ODI2MjA5NCwzMTQ3NzcuMjU0OTkzMjEwNCwyMzQ0NjYyLjQzNzY3Mzk2NiwzMjc5OTEuODU2NTM3NTU4NDMsMTYwMjYzNC44NzI5OTA3OTA1LDMwNjI3NzAuNjc1OTQzMDg1LDE1MjM3MjUuOTkwODMxMDYxNSwyODc0MzEuMDE5MzcxNDc0MzQKKzksV2VkIDIgRmViIDExLDQuODAxNjUxMzI2NzY1MzE4LDE1MjY0Ljg3ODI4NDc2ODU3LDU0MDguOTA0NjIwNzgzNDM3LDMyLjU3NzY2MTMxNDY0NTkxLDExLjE1MTI4Njc4MDI4MDk3LDE0LjQ4MTIyMTM1NzcyMzQ5NywyNjY3LjYzODIzOTk5ODM0NSwxLjMyMDc1MTI4OTUxNDQwMzgsNTczNTc2LjMxNzg5ODExNzEsMTQ4LjcyNTcyODU0MzEyNTM0LDM1LjI3MTA5NjQ2MTIzMTA0NiwyLjIxNTk3MDU0MjQ1ODUwNiwxMjc1Ny45NzM3MzUyMjE5MDksMjg2LjA0MzkxNjQ3NzYzMDksMTM5Ljc1Njg2MjExMTI4OTIyLDkyMzMuNzMyMjY0NjMyNjI4LDU3ODk3LjgyNDUxNDUzOTM2LDE0NTc1LjA2Njc1MTY4NzM5MywzNjAzLjA2NzQxMDcwOTgyNCw0MjMuMTQ3OTgxMzM0MzgwMyw1MjYuMzg4NzAwNDAwMzgzMSwxMzMxLjgwMDIyNzc4Njg0NTcsMTAzMy42MTUzNjM1OTIwNyw2OS42NTU4NzA3MzcxOTUzMSwzMzYuMzUxNjg4MDg0NTk1OSwyMTQ3NC4zNTE0MTMyMzU0MzIsMTk2LjY5OTM5NTYwNDI2MzI2LDMzNi4zNDMwMzE3OTEzNzg4LDQ3OC41NzkwNDQ2NjU3NjU5Myw1NjcuNjg3Njc2Mjk0MTI3OSwyMzguMDMyMjE2OTgzNzExNTUsNTkyLjc3MTUyNDIzNzY4MTUsMjY1LjM4Mjc2OTQwMDgzNDY2LDMuNzg2ODA1NzI5NzcxMzUwNywxMzQ2LjkyNDk3ODEzNzU3NTQsMjAxMy43NjQ1NjQzNDk4NTA2LDI3OTIuNjk0NTU4NjUyNzU1NCwyMjguMDUwOTAzNjk1ODcxMzcsMTg2NC40NjExNjM4MTQxMjg0LDQ3LjI3ODMyODMwNjI0NTg2LDY2MTUuOTA3MzcxNTAyODMzLDk5NS4xNDg5OTQ4NjU0MzI0LDUyMS4zNzc0MjU4ODY0MDYsNjI1Ljc3MDQxMDIxNjM5ODksMTIuODI1NjAzNzM0NDQ1MzQ4LDQ3Ni4xODQwNjMyNjU0ODgxLDM1MC43MDg2MzY0NzM3MzYzNiwyMDEuMDYzNTkyOTM3MTM3NSw0MzA0LjM1NjY5MzczMDYxNCw4MDQyMS41OTgxODg3OTk1LDQ0NC41NTM4MjgyMTYwNDYyNworMTAsVGh1IDMgRmViIDExLDEuMTA5Mzk4OTQ5MzY2OTE5OEUtNCwwLjAyMjE2NTcwOTIwMTY4MDc5NiwwLjAwNjEwMTIzNDE1ODMwNDIzNCw5LjYxMTE0NDk1MDU1MjI4N0UtNCwwLjAwMzI4NzM4MjYzOTU0MzE4MDMsMC4wMDEwMDEwNzA0MTU1NTI5NzU3LDAuMDAyMTE2ODM4MTE1MzcxMTE1NywzLjY5Nzk5OTE1Mzk3MjMwNTRFLTQsMzg2My40NTkyNzI0Nzc2NzYsMC4wMDI2NzE0OTEyOTk3NDcwNDYsMC4wMDE3NDA1MjQ0MDAzNDg1NDQ1LDQuMDY5ODA1NjA2OTQwOTM1RS00LDAuMDIxMDAxMjM1MzI4MjIwMTU2LDIuMTcwNzgwMzMzMjI5OTM0MkUtNCwwLjAwMTk2NzM3OTAwODE4MjczMSwwLjAwOTIxOTQyMTQxMzkwNjY0NywwLjI3MDg0MTE1NTk1NzY3NjEsMC4wMjE3MDY0Nzk1NjY4NTAxNiwwLjAwMjg4MjQzMzUzNTk2MjQzNDQsNy4yMzc2NDM3MzU0NzUwNTNFLTQsNi4yNjE0NDY3OTA1NTk0MTZFLTQsMC4wMDExNTU4MzA3NTQzNjE4OTgsMC4wMDExODU3NTM0MTI4MjEzNDM2LDcuMzIxOTkzNzk2Nzk2NTA2RS00LDYuMzg4NzI2OTkyNjEyMDQ4RS00LDAuMDQ4NDU1ODI4MDI3MjM0MywxLjQ5OTAyOTYxMTQyOTQ1M0UtNCw5LjQ5MzM3ODIxODMxMjE5NEUtNCwzLjc0NjU3Nzc1Mzg4NjI2MUUtNCw0LjAxNzMwMzk3ODcwNDkwODNFLTQsMS44OTQyMDM5ODIwMjEyMDZFLTQsOS41OTk0NDcxMDUyMTgwNThFLTQsMi40MTU3MjM4NDQzNTU0MjMzRS00LDAuMDAxMDAwMzk1ODMyNzQ0ODI4MiwwLjAwMjE2NTM0OTcyODAzMDM1MTMsMC4wMDE2NTg3MTQxODkxODA2OTAxLDAuMDAyMjM2NTc2MDE4NDg0MTQxNCwzLjkwMDIyMDEzMjg3Nzg1MUUtNCwwLjAwMTY1OTUzNjgwOTE0OTg4NDEsMS4yMjQ0MTQ4NjM2NDM1NzYzRS00LDAuMDA2ODMzMTUzNjEzNjYwODIzLDkuMzk3NjEyMzQxMjE5NjM1RS00LDYuNjM0ODAyMDEzMjMyMTMxRS00LDAuMDAyNjAwMDk5NTUzOTAwNzA2NCw0LjMxNzEzNjQ4Mzg1NzQ4NDNFLTQsOC4wNjk1MjQxNjk4MDU4MDhFLTQsMi41ODg5NTUwOTA1OTY4MjM1RS00LDcuMTc2NDI3NDIwNDc5MDQxRS00LDAuMDAzNDM4OTEwNzIwNjM2MjU1NCwwLjcxMjgzNDQzODAyODEwODUsMy42NzUzNTE5Njg1NDQxMTU3RS00CisxMSxGcmkgNCBGZWIgMTEsMy44OTc4MTU0MDUzNTI4MjQ0RS0xMCwyLjQzNDM2OTMxMTU1OTAzNDZFLTksOC4yMjI3MTg4NDE0NTk2NTNFLTEwLDMuMzg4MjkzOTkwMDg0OTY0RS05LDEuODA0NzkxODI0NDI5MDg4NEUtOCwzLjU2MTExNTUxMzgwMzU4RS05LDYuNjgwMjcyNzI2NzQwMzE2RS0xMCwxLjM1Mjc0OTQ0NzA4NDEzMUUtOSwwLjAwNjc5MzU4ODkwNTQxMDM4MSw5LjM0NjkyNTU3MzAxMTgxRS05LDYuMTcxNTA1ODQ3MTIzMTI0RS05LDEuNDYzMTUxMDM1Mzk3MTYwOUUtOSwyLjIxMTU0MDA5MjQwMjkwMjRFLTksMi45NzU2ODM3NjQ0NzEwMjczRS0xMCw2Ljg0OTE3NTc5NDc4MTI4NUUtOSwxLjUwNjQxMzAxODQ4NzI3MUUtOSwzLjA5MzUwMjI5MjEwNzM0NkUtOCwyLjM1ODM0MTY1MTIwMDEwNTVFLTksOC43OTY5MzU5MzY0OTUzMDZFLTEwLDIuMDUzMjI2NDQxNzg5NzY3RS05LDEuNTIyMjU2NDkzODc3MDQ5RS05LDIuNjU0NzI1ODU2MDAyODczNUUtMTAsMi44MTg3NTE4NTIzMDIzNDZFLTksMi41Mjk1ODg0NzA2MDIwMjk3RS05LDEuODY1NzkwMzY1NDYyNjY2NEUtOSw0Ljk4OTg1NzUwMzgzOTE0M0UtOSwyLjA4MjE0MjgwMzM0NTM0MTZFLTEwLDIuOTkxNjA0NTM0NTk0NjM0M0UtOSwxLjI1MzYwMDczMTQ3ODY2NThFLTEwLDMuNTgxMjg2NjUzMzEwMzY5RS0xMCwyLjk0NjE3Nzg3OTA1MzQzOUUtMTAsMi42NzY2NzIxNjAzNTAwOTczRS05LDQuNjgxMDQwMTM2MjU4MjE0RS0xMCwzLjYzNDg4Nzk3Njk2MzY4NkUtOSw2LjAyMzEzMDE3NTczMjQ0RS05LDIuNzY3NDYwNjkzMDg5MDE0RS05LDYuNzk1ODI3OTEzNDk0MTY2RS0xMCwxLjEwNjQwNTc0NzM2NjU3NDZFLTksMy4xMjUxODYyNTkzMTgxOThFLTksMy44MDg0MTUwMTkxMTU1NkUtMTAsMS4wNDk3NjcyMzU5OTk3NTY3RS05LDEuNzI2ODQ0MzQ2MDY1MTQyRS0xMCwxLjY3NDUwNDc4NzAxOTk1NjFFLTksOC41NTU0NzQxOTU3OTk0NThFLTksMS41MjQ0MjU4NjE5MjA3Nzc3RS05LDIuMjgyNzc3MTI4MzEwNTk4RS05LDEuMTgzNDAzMzIzNjI3MTQwNkUtMTAsMi4zMjc0NzMzNjgwNjkwNjg0RS05LDEuMDU1MTc5MjI3NjY3ODg1RS05LDkuMzU0MzQ4NzQxODgzMzg5RS04LDkuODk4OTQxMjU4NjkyMTg4RS0xMQorMTIsU2F0IDUgRmViIDExLDIuOTQ4Njc2NjM2OTgxMjM2RS0xNiw1LjM1MjA0MjA0ODAwNzczMUUtMTYsMi41MDUyNjg4ODIzNTYzNTVFLTE2LDIuNTk1MDkwNzkxODg0NDY3MkUtMTUsMi4yOTg5MTg4ODQ4MTY0NDhFLTEzLDIuODYwNTQ2NTUyNzcxNTc5N0UtMTUsMy4yNjk4OTc0MjUxMDM1OTA0RS0xNiwxLjM4NDY4NDg3NjYwNjM4MDVFLTE1LDYuNDkyMDQ1NDk0MDIzODU5RS0xMCw2Ljk4Mzk1NzIyNzA2NzU3N0UtMTUsNC44NTkxOTY1Mzk0MTU1MDhFLTE1LDEuMjc4NDIyODg0MTQzOTY5MkUtMTUsNC4yNzk0NTk2NDA4MjI4MDNFLTE2LDEuODI1MzkyMjkwMjc0NDUzRS0xNiw1LjA1ODAwOTM3MjgxMTk3MkUtMTUsNS40NjA3NjUwODU4NzAzMjZFLTE2LDMuODA4MTk4MTI2NzA1ODQ0RS0xNSw1LjA0MjY3MDk4Njc3MzAxNUUtMTYsNC4yNjQ2MjYzMTgzNzUyNzdFLTE2LDEuMzY4MDQ3MjQ5ODExMjg0N0UtMTUsOS45MDE3ODU4MTkxMDQ4N0UtMTYsMS4xNjM4NTgwOTk5MjI5MzZFLTE2LDEuODI4Mjc4NTkxMTIwNzgzM0UtMTUsMS44NDI0MzEzODExNTkzOTNFLTE1LDEuMjUwNjI5OTI3MDAxMDU1RS0xNSw3Ljc0NzE2Mjk0NDg4NTY0NEUtMTYsMS4yNzg4NTY4ODM5NDcwNzI4RS0xNiwyLjA0NzM5NDA5NDU5NTAyM0UtMTUsNi4yMzUxMDM2ODkxNzc2ODdFLTE3LDIuMTAzMTg2NTc1NzE3MjM4RS0xNiwxLjgyODkzOTU0NDAxODEyNTJFLTE2LDEuNzc3NjYxMTkzMjUwMjQ5M0UtMTUsMi45NjgyODk3MDkxNDg4NTRFLTE2LDMuNDk1OTQ3NDc0NDQwNDUzRS0xNSwzLjk5ODM4MjYxNzQ1NjE5N0UtMTUsMS43Mjk0NDA2NDU0MjY1Njk5RS0xNSwzLjI5MDI0MTEyODQwMjk3N0UtMTYsNy4zNzE4Mzk3MTY3MzA3NzZFLTE2LDEuOTc2MDQ3NTczNjQ4NTMxRS0xNSwyLjU5NTEyMTA4MDA2MDQ5MjZFLTE2LDMuNjI2NzM5MTMyMjA2NDMyRS0xNiw2Ljc2NTk2MTM3MDc3MzM3MUUtMTcsMS4wOTQ2OTYyNDI2NzA1NDkzRS0xNSw1Ljk2NjI1NDE5ODM4ODE2NUUtMTUsMS4xNzU1NzA3NDA2MzgzNTAxRS0xNSwxLjUyMDE2NjI4OTM2MTc4NDhFLTE1LDYuMzExODY0Njc4ODQwMTE3RS0xNywxLjYxMTMyMDE1Mzg2NjExNEUtMTUsNS4xMjM0MTc1NzA5OTExNDJFLTE2LDEuMDMyMDQ5MTY5MjEyMzgxNEUtMTQsNC42MTE5OTc3MzI2NzE1NThFLTE3CisxMyxTdW4gNiBGZWIgMTEsMS41MjgzMjI2ODcxNzYwNDE0RS0yMSwxLjA4Mzg4MjE0MTE0MDA4ODZFLTIxLDYuNzE0OTE2NjQ2MzM4Njc4RS0yMiwxLjM3MTIwNzM5NTc1NjY2M0UtMjAsMy44MzE0MjYyNDEwNzgwMjA1RS0xNywxLjYyOTkyMjQ2MjYxNzY0OTNFLTIwLDEuMTM1MDE1NTkxODc2NTI2RS0yMSwxLjE2ODE0MTYxODgxMzE3MzdFLTIwLDkuNzA4NzkwNTkyODM3MTI2RS0xNywzLjU1MTI2NTM5NDMzNDk3MkUtMjAsMi42ODE4Mzg5MTA3MzE2NzZFLTIwLDguMzQ2MTk5MTQ0MDQ1MDQ3RS0yMSw3LjQzMzk3MjUyMzgwNDQ3RS0yMiw3LjIwNDczMTE2MTYxMjk4MUUtMjIsMi41MjYxNTQzODI3NDEyOTkyRS0yMCwxLjYyOTY2MzUwMzM2NjIyOUUtMjEsMi44MzY5NTE2MTA3NDA5NjM3RS0yMSw5LjkwMjg1NTMzMjE3NzA1NEUtMjIsMS40NzM1MzYzNjI1NjQ4MTMyRS0yMSw1Ljg5ODEyMTIwMzMzMDQzN0UtMjEsNC4xNDQ1NjExNzczMTQ0NDdFLTIxLDMuODMzMTAxMzM0NjQ1NzU2RS0yMiw3LjYyNzE5OTA3ODgxNTM4MUUtMjEsOS4wMTEwNTQ1MjI5MDQ1OTNFLTIxLDUuNDMzOTg3MzI5NzE4MzI5NUUtMjEsOS40MzU4MDcxNTEyODkyNzRFLTIyLDUuMDUyODc0OTAwMjMzNTc2RS0yMiw5LjE0ODU0NDg3ODQwODU1NUUtMjEsMi4xODA3OTcxMDUwMDQ0OTU3RS0yMiw4LjAzNzI4MDk0ODczOTAxNEUtMjIsNy4yOTM2OTIwNDQ4MzI5NjhFLTIyLDcuNjMyMzM3NTY1NzQ0NTg2RS0yMSwxLjIwODE0NTcwMjUyOTAzNTlFLTIxLDIuNjY4NDAxMDI1Nzg3NzkyRS0yMCwxLjcxNTczMTE2OTU3NjU2OEUtMjAsNi45MzkwOTU2MjU0OTA5NTNFLTIxLDEuMTM2MTYxNzU2MjgxMzI2RS0yMSwzLjE3ODIyNjg2NTAzNjM1N0UtMjEsOC4wMTk1MzE5OTA4MjE5MzZFLTIxLDEuMTUyNzEyMTA4MTMzNzczOUUtMjEsMS4wNTI3NjM3MzA4MTA2NDk2RS0yMSwyLjEwNjA2NDAxOTI2MjMyODVFLTIyLDQuNjA5MzcxODU1MDQyNjk5RS0yMSwyLjczNzI3MjIxNTk1NTE2N0UtMjAsNi4yNzg1MDk0NDczNTQ0NjdFLTIxLDYuNTQ5MzcxNjQ3Nzk1OTQ2RS0yMSwyLjI4NDIzMTQ5Mzg3MDI3NEUtMjIsNy4zMTY2MjgzNjczMzQ4NDNFLTIxLDEuNzcxNTkyNzI3MjQwMzY2RS0yMSw2LjA2MTc4NDAwNjkzMjQzNEUtMjEsMS41NjM4NDYyNTkzNDM4ODZFLTIyCisxNCxNb24gNyBGZWIgMTEsNC4wMTk0OTg0NDQyOTI3MDdFLTI1LDMuNTIxMTczNDUzNTgwNzI1RS0yNSwyLjU3MDQ3NTIzMDg2NzIwODdFLTI1LDMuNTI2MzE1NTI4MjcxMTU0RS0yNCw0LjQ4MjA4MjU2MDUxNzQ4M0UtMjAsMy44NTcyODc5Njk2NjQyNzVFLTI0LDQuNTk1OTMyNTU2MzE1NTQyRS0yNSwyLjA0OTg2NDQ4MjcxODIyNEUtMjQsOS43OTkwNDcyNzE4MDA5NDZFLTIzLDkuNTU0NzI5MDQ3MDg5MTI1RS0yNCw2LjU2NzUyMjg2MTk1ODU2MzRFLTI0LDEuNzM0NjUzMzM1MzE2MTQ3RS0yNCwyLjEyMDY5NjcxMDMxODAwMzRFLTI1LDIuNjkyMjQ0ODE5MjMyMzk5RS0yNSw2Ljk0NjM0MTQ2ODc2MjkxN0UtMjQsNi40ODY2MTgyNDM4NjYzMjdFLTI1LDEuMTYzMzA4MTI4MzE4MjcxRS0yNSwzLjE0MjM1NzA5Njg2MDk0M0UtMjUsNS45NzAzODM2MDMyNzE5NjFFLTI1LDEuOTY0NzkyMTk5ODIyNzUyNkUtMjQsMS40MzcxODEyMjI4MDIxNDcyRS0yNCwxLjU1NDU5NTUwMjgxNzQ0NjZFLTI1LDIuNjU2NjcyNjc0NjQxMTAzRS0yNCwyLjU0Mjg2MDA5ODM1Mjc5MzNFLTI0LDEuNzkxMTM1ODg0NzEyMDkxRS0yNCwxLjY4NTE5NzI4Mzk4Mjg4OTJFLTI1LDEuODg1ODY4NTcxOTkyMDIwOEUtMjUsMi45MDM0MjQyODI5MTc2NTcyRS0yNCw4LjgxOTI1NTcxNjY2NTQ3OUUtMjYsMy4xMDUwNTU4MjE4MDUxNDE1RS0yNSwyLjY5MjUxMTcyMDkzNTc2OEUtMjUsMi41NTY5MDc3OTEzNzgxNzdFLTI0LDQuMzQ3NDI0MDU5MDU3NTk4RS0yNSw0Ljk0MjgyNzU4NzU2MDkxMjRFLTI0LDUuNzUyMjU3MTQ5NjM3MDc1RS0yNCwyLjU0MjU5MjE5ODEzNDc4NzZFLTI0LDQuNjAzNzc2OTI1NTk3OTMyRS0yNSwxLjA1ODc0ODI0NzUyMjQ0MTVFLTI0LDIuODk2NTY0NjIxOTAzNTM1RS0yNCwzLjY4Nzc2MjM1NTU2OTkzMkUtMjUsNC4xNTQ2NDA3MTk2MTQ0NzlFLTI1LDguNDcxOTgxMzg3MzI1NDg3RS0yNiwxLjU4NTU3NzcwMTkzNzMyODZFLTI0LDguMzg2Njg2NDI3MDI5MjIyRS0yNCwxLjU5NDkzMTczOTU1MTYyNEUtMjQsMi4xODM4MTcwODUzMzk0MTNFLTI0LDkuMTQ0MjM2NTk5NjkwOTE5RS0yNiwyLjI3MjY1NTY4MDQ0Mjg1OTdFLTI0LDcuMTc3MzU1NzkwMTY2MjY3RS0yNSw4LjA0NTY0Mzc2NzMwMDE0OUUtMjYsNi4zNDU3Nzg1MTM1ODUwNzZFLTI2CisxNSxUdWUgOCBGZWIgMTEsMi4yMTk2NjUyNTk2NjU0OTYyRS0yNywyLjExMjE0NzExOTc5NDU4OEUtMjcsMS41NDczOTMxODQ5NDQ3NTdFLTI3LDEuOTMyMTk1OTk0NzkzMTczNkUtMjYsMi41Nzg5NjI4MjUwMDg3NzhFLTIyLDIuMDQyNTk2MzQzNzA3ODE0M0UtMjYsMi43NjIwMTg4NDMxNDI1NDFFLTI3LDguMjA3NjAwNTYzNTYxNjUzRS0yNywxLjA1MjQxMjAzNDM3NTA1NkUtMjcsNS4zMTU0ODA3MjQ0Njc5NzZFLTI2LDMuNTMwODYwNDQ4ODcxNzg3N0UtMjYsOC41MDQwNjE1MTgzNDY2NzFFLTI3LDEuMjY3NDA4NDIxMjUzNTQ3NEUtMjcsMS42MDE0MDk5NjY0NDAxMDI2RS0yNywzLjg5MDA2MzUwODMxMzY4MzVFLTI2LDMuOTA1OTQ1NTEzNDc5MjE5RS0yNyw1LjkyNzAyMzM5NTE1MjI0NUUtMjgsMS44ODM3NDA5MjA0NDYwMTc2RS0yNywzLjU4ODUzOTg2MjY4MzM2OUUtMjcsMS4xNDkxNTAwNzA4Njc5ODQ5RS0yNiw4LjQ2MDM0NDE4MDY3OTY2N0UtMjcsOS4zNTQwNjg5OTM4NzIzODFFLTI4LDEuNTY0OTgyMDgyOTAxOTE2NkUtMjYsMS40MzQ1NDAzNDU2OTIwMTdFLTI2LDEuMDQ1NjY2NDI1NDYxMTI0NkUtMjYsOS44OTM4NDMxOTM3NjI4MTZFLTI4LDEuMTIxNTg2NzY2MzU3MDU0NEUtMjcsMS42ODMxNjAyOTU0NDExNzE3RS0yNiw1LjI5ODczNDQ4MjUzOTExOEUtMjgsMS44NTQ1NDg4MzU3MzYzNTc3RS0yNywxLjU5OTA2NTI2NzYyNDI5NzhFLTI3LDEuNDk2ODkzMzE0Mjk4MDc3N0UtMjYsMi41NzMwNTgwNzI4MTg0MzZFLTI3LDIuMTYwNjgxODY1MDM3MzE0NkUtMjYsMy4zNjc5ODE3MTAxNTAxNzAzRS0yNiwxLjUwODU1MDk5MTcxODE1OUUtMjYsMi43NjcxODMzNjY0NzIyNzNFLTI3LDYuMTkyMzIzODI4NzM5Nzc0RS0yNywxLjcxNTIzODc2NzI2NjA5NkUtMjYsMi4xNDExNjg3NTcxMTg3MDQ3RS0yNywyLjUwMTc1NDY4ODc1NTgwODRFLTI3LDUuMTAwNjUwNTc3Njk1NjcxRS0yOCw5LjMyMjM0MTg4OTMyNzk4NEUtMjcsNC44MjY4NzQ1ODA1NDY4NTFFLTI2LDguNjk5OTcyMzMyOTg5NjYxRS0yNywxLjI3NzQ1ODc3NDIzNzE0OTZFLTI2LDUuNDg1NTAxMTE4NTk0MTc2RS0yOCwxLjMxMTgwMjM5MDY0OTA5NUUtMjYsNC4zMTM4OTk5NjE3MTcwMzVFLTI3LDIuNzk4NTAwMzE4MjcyNzc5NkUtMjgsMy44MTYxMTA2MTA4MDc0ODU3RS0yOAorMTYsV2VkIDkgRmViIDExLDUuMDM1Njc2OTk3NTYwMDk0RS0yOSw0Ljc3NjcyNzg1ODk4NzMwMTRFLTI5LDMuNTAyNDA3NTk4MDkxODk5NUUtMjksNC4zODE3ODUzMzQwMDA3NDVFLTI4LDUuMjA1NjU4MjU3MjY0OTA2RS0yNCw0LjYyMjA2NjE0MTAxMDY5MkUtMjgsNi4yNTk2MjU2MTk2NDMwOTVFLTI5LDEuNzg3NDUwNjIwMzk4NDg3M0UtMjgsMi41ODU5NDEwMjEzMjgxMzNFLTMxLDEuMjA2MzAzMjUzNjU4NzgxNUUtMjcsNy45OTgxODUzMDY2NTIwOTY1RS0yOCwxLjkxMDYxMDMxOTc5NDI2RS0yOCwyLjg2NTEyMjcwMTQwNzIwOUUtMjksMy42MzQyMjMyNzU0OTE1MDk0RS0yOSw4LjgzMDQ1ODYzNDExOTY2OEUtMjgsOC44NDQ0NTA5NzMxNTE3MDhFLTI5LDEuMzMzNzM1OTc4Nzc0NzUyNkUtMjksNC4yNTk4MjIwNzA1MjA3MjZFLTI5LDguMTMyNDk5MjMxMTgzMTE3RS0yOSwyLjYwOTkxOTQ1ODUwMDkxOUUtMjgsMS45MjExMjExMzQ3OTUwNTI4RS0yOCwyLjExOTE2MTUzNDg0MDgwOTJFLTI5LDMuNTUzNTY2NjgxODYxODc1RS0yOCwzLjI1NzIwMjcyMTUwNzk3MzZFLTI4LDIuMzc0OTc1OTY3NjQzNDcxRS0yOCwyLjIzNDE2Nzg5MTY1Njc2NUUtMjksMi41NDUzNDg2NjAxNzUxMzNFLTI5LDMuODIzMTgwNTc1NTU3Mjc2NkUtMjgsMS4yMDA5Mzc1MTY3OTQ5NTYyRS0yOSw0LjIwNzA2OTE2MTAwMzlFLTI5LDMuNjI5MzM0NzIwMjY1ODA4RS0yOSwzLjM5OTYzMDQ3NDI3OTg3ODNFLTI4LDUuODQxMjUyNTQwOTIzMjM1RS0yOSw0Ljc3OTgyNjQ1OTUwOTQzMkUtMjgsNy42NDkwODA4MDUyMTI0OTdFLTI4LDMuNDI0MTMxNjA1NTQ0NzExNkUtMjgsNi4yNzEwNzcxMTU3OTEwMjZFLTI5LDEuNDA2Mzg0MjY1MTk3NTEwNUUtMjgsMy44OTM3NDk4NjI3MDA0NjMzRS0yOCw0Ljg2MzQ3MDQyMDEzMzQ0MUUtMjksNS42NjQyMDcwOTA1OTE0MTZFLTI5LDEuMTU1MTkzNTY4OTMyMjc0OEUtMjksMi4xMTY5NTQyNTk2NjA2NEUtMjgsMS4wOTYzODEzMDAwMzM0NjI2RS0yNywxLjk3MjQ3MzA1MzA5NTM1MDdFLTI4LDIuOTAxMzIwNDg0OTg5MTE1N0UtMjgsMS4yNDM2NDc4OTQyMjAyNTdFLTI5LDIuOTc5NjgwMzY1Mjc5NTk0NUUtMjgsOS43NzYzOTY4ODE0MDgxNjVFLTI5LDYuMjU3Mzk2MzUzNTM1ODEyRS0zMCw4LjY0NzAzNTUwMjgwNjgyNkUtMzAKKzE3LFRodSAxMCBGZWIgMTEsMy4yMzMxODkzNTk3OTEyMzZFLTMwLDMuMDM3MTAyMTU2MDIxMjY2NkUtMzAsMi4yMjkxMDg1NjIwNzk1NkUtMzAsMi44MTM5NTgwMTcyMzA2MzFFLTI5LDIuNzQwMDYxNDcwMzM4MzI2M0UtMjUsMi45NzAyMTU4OTg3NjE3MTNFLTI5LDMuOTkwODMxMDE5MDM0ODU0RS0zMCwxLjE0NDQwMjUyMTgxNDY5NTJFLTI5LDkuMjY5NzQyNTYxNjY2MzQ3RS0zMyw3Ljc0MzM1NzY1NTkwODYwOUUtMjksNS4xMzg1MjgyOTYwMzcwN0UtMjksMS4yMjgxODgzNjMwODkzNzAxRS0yOSwxLjgyMDgzMzcwMTMzOTY4NDhFLTMwLDIuMzIyMDQ1MTk5NTU0MzMzRS0zMCw1LjY2NzAxOTcwODY5NjE1N0UtMjksNS42MzIwNDgwNzA1OTMzMDRFLTMwLDguNDQ3NzAyODE1NTYwMTk3RS0zMSwyLjcwODE4OTA2NjY3ODY0MDRFLTMwLDUuMTg0NjE3ODAwODk3NjJFLTMwLDEuNjcwNzc0MTk4MjQ3MjMzMkUtMjksMS4yMjkwNjc5NjUzMjQzMTEzRS0yOSwxLjM1MDM3Nzk4NjI1NDAyMzRFLTMwLDIuMjczMjg4MTE1NjIwNzE5NUUtMjksMi4wODk3MjcxODAyNjUzNTlFLTI5LDEuNTIwNjEwODU2NzAyODg1RS0yOSwxLjQxODI5MzUwMjkzODI1NzZFLTMwLDEuNjI2MzU4NjIwMDEwNjI1N0UtMzAsMi40NDkxNzIzNjY3MTM0NTFFLTI5LDcuNjU3MjY3MTg1NDE0MDkxRS0zMSwyLjY4NjIyNzQzMDk4MjU4MUUtMzAsMi4zMTk0NDk2OTQxOTkzNTRFLTMwLDIuMTc2MTMzMTE2MTAzMzM3RS0yOSwzLjczNDc0NDAzMjU4MjIzNEUtMzAsMy4wNjc5NjM2NzM2NjkzOUUtMjksNC44OTYxODY4NDQ5OTAwMDlFLTI5LDIuMTg4NjAzODY0NjkyODIwMkUtMjksMy45OTc4OTk4Mjk5NTMxNzdFLTMwLDkuMDAzMTUxOTU2ODM0MzQyRS0zMCwyLjQ4OTQwMTI0MzcxMTQ0MzZFLTI5LDMuMTE1MjQzNTY4MjE3MjYzMkUtMzAsMy42MDYzNTYzODk3NTIzMTg1RS0zMCw3LjM1ODA0OTg0MDM5NDMxM0UtMzEsMS4zNTQ1Mjc5OTE1NTQ2OTdFLTI5LDcuMDI2ODk4MDM5MzM0NTJFLTI5LDEuMjY2ODUyNDI4Njc2ODc5M0UtMjksMS44NTcyOTE4ODI3ODg2MThFLTI5LDcuOTMzMTg1NzQ2NTc4ODA5RS0zMSwxLjkwOTM3OTM3MTkwMTgyNzdFLTI5LDYuMjMyNjg0MzAwNzQ0MDFFLTMwLDMuOTU2MjgzMTY3MDI0NTE1RS0zMSw1LjUxMTU1OTE1MTgyODU1M0UtMzEKKzE4LEZyaSAxMSBGZWIgMTEsNC4zMDI3NjAyMzc1OTA5MjZFLTMxLDQuMDExMzAxMjM5Mjc1ODg4RS0zMSwyLjk0NjMyMDkxNDAxMTA4MTNFLTMxLDMuNzQ1NTcyNDU4ODM5Mzk3RS0zMCwyLjk1MDM4NDUwODA3NTY4RS0yNiwzLjk1NjE3MDI5MjQ1NjQzMkUtMzAsNS4yODE2OTU3MDgwOTQ0NjE2RS0zMSwxLjUyNDE2MjUxODc2MDIyNjFFLTMwLDEuMTk3OTM4NzkyMTQ1NjIzNUUtMzMsMS4wMzAyODM0NDk4MDk0NTMzRS0yOSw2Ljg0MjQ3OTczNzQzNzg5MkUtMzAsMS42MzcwOTA2MzU1NDYxNzYyRS0zMCwyLjQwNDA3MTAxMTczMTUzNDNFLTMxLDMuMDc4MTkzMDI2NTU4Mzg0RS0zMSw3LjUzODY3MDA1NDA2OTA5N0UtMzAsNy40NDcxMDA5ODAyNzg2NDdFLTMxLDEuMTEyNjU1NzgyOTc1MzM3RS0zMSwzLjU3NjYzMjMyMzkzMDg1MkUtMzEsNi44NjEzNTc0ODQ0MjAwNjJFLTMxLDIuMjE4MTE3NjM2MDYyNjI0RS0zMCwxLjYzMDkyMTgxMDExNTUxOEUtMzAsMS43ODY0NzcxNjYzNjc0Nzg2RS0zMSwzLjAxNjM5MDkyNDEyODA3MjVFLTMwLDIuNzc5MjE3NjYwMjQ2ODk5RS0zMCwyLjAxOTAwOTA1Mjg3NTgyNTNFLTMwLDEuODcxMDg1ODMxNjMzNjE4N0UtMzEsMi4xNTYwMDE3NzQ0NjkxNjI1RS0zMSwzLjI1MzMwNzUxNDc3MzE5N0UtMzAsMS4wMTM0NzQyNjY5Njk4MTI0RS0zMSwzLjU1OTExOTQ2NDY5NjgyNThFLTMxLDMuMDc1Mjg3NTU3NzA4NzczN0UtMzEsMi44ODg4Mzk3Nzk1OTkwOTMyRS0zMCw0Ljk1MzUwNTYzNTI4NDM0N0UtMzEsNC4wODkxNDg0NjM3MzA3NDc2RS0zMCw2LjQ5OTY4MTQzNjQ4MzU2M0UtMzAsMi45MDIxMDM4NTcwNzY0NTVFLTMwLDUuMjkwODIwMDczNDM1OTdFLTMxLDEuMTk1MjU3MTE2OTEwNzExN0UtMzAsMy4zMDE2MDU2NDg4NTM4NDQ0RS0zMCw0LjEzNzcwMTU5MDA1MDU4NkUtMzEsNC43NjgwNDQ4Nzc1NTY5NzNFLTMxLDkuNzMxMjI3NjQxNzQ1NTEzRS0zMiwxLjc5NzU3OTU3NDY4MDczOTdFLTMwLDkuMzM3NTg4NDA1MzY0MDAzRS0zMCwxLjY4NjQ0MzE3NTYyNjg3OEUtMzAsMi40NjU3MTA3Nzg4ODY2NDdFLTMwLDEuMDUwMzUxODcxMzkyMTAyRS0zMSwyLjUzNjg3ODg2MTc2NDM2NjNFLTMwLDguMjQ4NDI2ODcwNjIwMDgzRS0zMSw1LjIwNDQ4NzI1OTQwODcxOEUtMzIsNy4yOTI5NTU0MzM0Nzg4NjVFLTMyCisxOSxTYXQgMTIgRmViIDExLDkuODU1MTE4Njc3MjE1MDc1RS0zMiw5LjE3MjYyMTU3MzYyOTQyNkUtMzIsNi43Mzg4MjI5MDg4NkUtMzIsOC41Nzg5MjA1NDEwNTE5MDZFLTMxLDUuMzc2NTU3NDI5MzU5Nzk5RS0yNyw5LjA2MDcwMTk2NDgzMDM2NUUtMzEsMS4yMDg0NzAyODMzODU4NjlFLTMxLDMuNDgxODIyOTIwNzk3MTM2NkUtMzEsMi43MjY0MjM1OTgwMDU1MTJFLTM0LDIuMzU5NzY2NzgxMzY0MjEyRS0zMCwxLjU2NzE3NDQwNDU1MDc0NkUtMzAsMy43NDc5MTA1MjQ0MjYwMzc2RS0zMSw1LjQ5NjgwNTIzNTkzNDIwNUUtMzIsNy4wNDU5OTMzMDU2NzAxOTlFLTMyLDEuNzI2NjQyOTUwOTc5NTg0M0UtMzAsMS43MDM0OTU1MTEwMDI0NThFLTMxLDIuNTQyMDc2NTY1NDA4NTUwM0UtMzIsOC4xNzg0OTI4NDAwMDY5NThFLTMyLDEuNTY5ODg1ODU5NzkyMjk1NEUtMzEsNS4wNzg5MTM2MTQ3MTc4MjM0RS0zMSwzLjczNDAyMzIxODE3MzQxNUUtMzEsNC4wODcwODU4NjE3NTU2ODg2RS0zMiw2LjkwNTk5NzIyNDU4Nzc0OUUtMzEsNi4zNjUzNDg4NjQ0MzExODJFLTMxLDQuNjIzMTE1MDExMzc1OTE0RS0zMSw0LjI3NzA5MTgyNjE1Mzk0NUUtMzIsNC45MzUxMTUzNzkwNzM5MzhFLTMyLDcuNDQ5OTczOTk3OTU4NzgyRS0zMSwyLjMxODkwNjIwOTEyOTA0MUUtMzIsOC4xNDU3OTgyMTI1NDEwMzNFLTMyLDcuMDM5NjMzMDg1Mzk5MDExRS0zMiw2LjYxNDYwNzg0MDk0MDU0OEUtMzEsMS4xMzM5OTY1MDA4MjgyNzlFLTMxLDkuMzUxOTI4NzM2Mzk0ODE4RS0zMSwxLjQ4ODIzNjQ5NzUxMzYxOUUtMzAsNi42NDMzNTk0NDc5NTc4MDRFLTMxLDEuMjEwNTQzNTQ4MzU1NTc3MkUtMzEsMi43MzY4Mjg0NjcyMzkzNDNFLTMxLDcuNTU4MjE3NTM3OTA4MTI3RS0zMSw5LjQ3NTA2NDk3MzY2NzkzNEUtMzIsMS4wOTA2MzYzMTQ5NjIzNzk2RS0zMSwyLjIyNjEwMzM4NzQ1MzE1NDNFLTMyLDQuMTE1NjczOTg2MDY1ODY1RS0zMSwyLjEzODQwODU2MTM2MDE4NUUtMzAsMy44NjI2NDU0MDAxNjY4MjE0RS0zMSw1LjY0NTgyNTQ2NTY0NjcyMkUtMzEsMi40MDM1MDUyOTAwODc0MjI4RS0zMiw1LjgwOTU5NjQ1MzgxMDY3M0UtMzEsMS44ODcyNTIwMDgwNDg0NjcyRS0zMSwxLjE4ODU3ODQ0OTE4NDY3MzdFLTMyLDEuNjY4NTY4MjExMTY4NDg5MkUtMzIKKzIwLFN1biAxMyBGZWIgMTEsMy4zMDAzOTU4OTM2MTE4MTdFLTMyLDMuMDc5MDM3NjMzOTI4OTU4RS0zMiwyLjI2MTc3NTU0Mzk2MjI4RS0zMiwyLjg3MjYyNzkwOTc0MDg3MkUtMzEsMS40MzY5MTAwNTM5MTk5MTc0RS0yNywzLjAzMjI3MTg2MTg4ODk1MzRFLTMxLDQuMDU1MDA2MjA0NDMyMzY1RS0zMiwxLjE2MDA5ODY1Mzg5NTcwMjVFLTMxLDkuMTYyMzk1NzkyNzk3MzcxRS0zNSw3LjkwMzY3MjE1NjYxMzY3M0UtMzEsNS4yNDYwMDE1MzE3MzQ3NUUtMzEsMS4yNTI4MDcyODE5ODY4MTE3RS0zMSwxLjg0NTI1NDEyNjgxNzY1MDZFLTMyLDIuMzYzMzQ4NzY0NzI2MDQ3NEUtMzIsNS43ODM4MDIyNTg3Nzg5NDFFLTMxLDUuNzE3MDgzODk4MDA1NzJFLTMyLDguNTM2NTc1NDk2MzYzNzMxRS0zMywyLjc0NTM2MzU2MDgzMzgzMkUtMzIsNS4yNjc3NzQzNjUzNzQ3MzVFLTMyLDEuNzAyNzk0NjU0OTIxMTgyMkUtMzEsMS4yNTIwOTU0MjkxNjYwNzY1RS0zMSwxLjM3MTUyNTk5NDcwNjkyNDZFLTMyLDIuMzE1NzY0MzQ5MjM5OTEzRS0zMSwyLjEzMjUxMDg0NDYxNjQzMjdFLTMxLDEuNTQ5OTEzODU0ODU5ODYxNkUtMzEsMS40MzU5Nzg5Mzk2MzI0NTIzRS0zMiwxLjY1NTMxNTgxMDk1NjU0NTRFLTMyLDIuNDk3MjM0MTM5MzE3ODM0N0UtMzEsNy43ODA5NDkyMjAwODI3NjdFLTMzLDIuNzMyNjA2Nzg3MTY3MjExNEUtMzIsMi4zNjExMDQxNzIwNzk1NTQ3RS0zMiwyLjIxNzcxMzM0MjU2MjA5OUUtMzEsMy44MDMwNjkwNjEyODU0OTFFLTMyLDMuMTIwNTQ5OTg2NDQ3NTYyNkUtMzEsNC45ODk3MDE3Mzg1ODcwN0UtMzEsMi4yMjgxMjk0NTg2OTA5NTk1RS0zMSw0LjA2MjAwMDQ5MTcwMzc1NEUtMzIsOS4xNzU2OTY3MTMzMjA1NzFFLTMyLDIuNTM0ODI1NzMxMDMwMjYyNEUtMzEsMy4xNzYxNTMwOTU1NTkwNjQ3RS0zMiwzLjY2MDM1MTUzOTE0NDc5OUUtMzIsNy40NzA3MjU0Njc4MzM0NzVFLTMzLDEuMzgwMDI3NTU1MzI1MDQwMkUtMzEsNy4xNjY4NTc2NDMwMzE4MzY1RS0zMSwxLjI5MzI5ODk2NjM4NjAzNzJFLTMxLDEuODkyODY5MDI4MzE0NTg5NkUtMzEsOC4wNjQyMTQyODAxNzIxN0UtMzMsMS45NDcxOTg3MjcwNTk3NDc4RS0zMSw2LjMzMjY5MjY5MzcyNzMwNkUtMzIsMy45OTE5NTEyNjcxNTc1MjRFLTMzLDUuNTk5MDc3Mzg3MTUzNDY3RS0zMworMjEsTW9uIDE0IEZlYiAxMSwxLjQ3NDU3NTQwNDIzMzg0MUUtMzIsMS4zODg2OTg3ODcyNTMyMTVFLTMyLDEuMDE5Mjg3Mjg2NzIzODE3OEUtMzIsMS4yODMwMDA5MTExOTcwMTA2RS0zMSw1LjA2Mzk3OTA3OTMwODI3OEUtMjgsMS4zNTI0NDQxNDE0MDg5ODUzRS0zMSwxLjgyNDg0NzMyODg0NTE0ODVFLTMyLDUuMTM0NDMwNTYyMjMyNDE5RS0zMiw0LjE4Nzc4MzMwMTI3NjU2NTNFLTM1LDMuNTMyNTA2OTA3NDI2OTYxMkUtMzEsMi4zNDExNjA0NDU3MDA1NTY3RS0zMSw1LjU3MzgwMTI1NDM1NTc3MkUtMzIsOC4zMjU0NDgzNjUzNDk2OTlFLTMzLDEuMDYxNTczNzkyNzIyNTMwMkUtMzIsMi41ODU5MDM0NzEwNzgxMDIzRS0zMSwyLjU3NTM0Njc0Njg5MTAzNjNFLTMyLDMuODYxNDE2MjgyNzcyMDM1RS0zMywxLjIzODI5ODkwMjIyMTU3N0UtMzIsMi4zNzA3MjIzMzU4ODAxNThFLTMyLDcuNjM0ODYzMTk5MDg3MTAzRS0zMiw1LjYxNzQ2MDgxMjgwNTk0NUUtMzIsNi4xNzQ4MTU1OTYwOTE5MDZFLTMzLDEuMDM5MDI2ODEwNjI2MjA0NkUtMzEsOS41MzgwNjUwNjMxMjQxNTZFLTMyLDYuOTQ4Mjg5NzAzOTU3Mzk3RS0zMiw2LjQ4NDM5MjYxNjM3NDc0MUUtMzMsNy40MzUyMjgxNTkzNTAxMzhFLTMzLDEuMTE4ODg1MDI3NDIyMjczNkUtMzEsMy41MDEzNTA1NzAyMTcwMzU1RS0zMywxLjIyODE3Njc2ODEzMzIxOTRFLTMyLDEuMDYwMzQ4MjQyODU2MDM2MkUtMzIsOS45NDQ0NTk0NTcxODc2NjdFLTMyLDEuNzA3MjExOTU1ODQyNzgwMkUtMzIsMS4zODQxMTc2MzI4NDI4MDExRS0zMSwyLjIzNzQ2MDI4MjkwNjE1OUUtMzEsMS4wMDA1MDc3MTAxNzQyODhFLTMxLDEuODI4MDgzMTYyODkyNTU2NkUtMzIsNC4xMTQxMzA4OTI5NTY1MDVFLTMyLDEuMTM3OTYwNTQ5NTEwMjk4OUUtMzEsMS40MjMyNDMzODczMTA2MDRFLTMyLDEuNjQ5MDYzMDAxNzAwNTQwNkUtMzIsMy4zNjQ1OTM2Njg3NDkzNzFFLTMzLDYuMTkwNjYyMzg4ODExOTgxRS0zMiwzLjIwOTQzOTA5MjAxODk1MkUtMzEsNS43NzUxMjUyMjg0MzQzNEUtMzIsOC40ODcyMjU1MDE5MTA0NDJFLTMyLDMuNjI3NDM3MjY3ODY5MzUyRS0zMyw4LjcyMTY0NzM0Njg0ODcyM0UtMzIsMi44NDk5NjEyNjE5MDUzNTQzRS0zMiwxLjgwODAzMTA3NzkzNjA2ODVFLTMzLDIuNTIwMjMzOTUwNzQ4MDE5RS0zMworMjIsVHVlIDE1IEZlYiAxMSw3LjQ3ODA0ODYzMTQ1NTE3MUUtMzMsNy4wOTI1OTc4MjQ1NTI5MTNFLTMzLDUuMjAyNzcyNTE2NDc1ODU2RS0zMyw2LjUwNDc3ODM0OTU0MzIxRS0zMiwyLjE3ODA4NDMyMTgxNzA4RS0yOCw2Ljg0OTc0MjYxOTk2MjMxOUUtMzIsOS4zMDQ3NzU1Mzc1MTkxMzJFLTMzLDIuNTg1MTU4NjE2NTYxNjAxRS0zMiwyLjE1OTg3OTM5NjI3MDQ4MTZFLTM1LDEuNzkxOTI1MjM1NTk3ODAyNUUtMzEsMS4xODYyNTAxMDI2NDkwMjU3RS0zMSwyLjgxNzYzNjgxOTk5NTI5RS0zMiw0LjI1MzI3NDYzNTQ4NjQ2RS0zMyw1LjQwNTI5NTQwOTgyNDE4NzVFLTMzLDEuMzEyMDc0MTQ3MTgzOTQ4RS0zMSwxLjMxNDExODcyMjU2MTAxNkUtMzIsMS45NzY0Nzk1MDE2MTk4MzVFLTMzLDYuMzI0ODA0OTUzMjYzMDk2RS0zMywxLjIwODg1NDI1ODA1NTEyRS0zMiwzLjg4MjIzMTk0NzgyMTYzOTRFLTMyLDIuODU3NzEyODc1MDg0NTU4M0UtMzIsMy4xNDk1MDMyNzk0NTgxNEUtMzMsNS4yODYwMDYzNjQxMDAxMjdFLTMyLDQuODQwOTk1MzA1NDM4NTUwNUUtMzIsMy41MzI2OTc4OTc4NDg1Nzk0RS0zMiwzLjMxNDgzMjM3MDkxNDk1MDVFLTMzLDMuNzg1NzkyNzE3MjQ3ODIxNEUtMzMsNS42ODYzMDY2MDIwNTE1NDNFLTMyLDEuNzg1MjE2NzYzMzA1NTg5NUUtMzMsNi4yNTY0MjgwNjMwNjQ1NDJFLTMzLDUuMzk4MjIzODUxMTQ1Mzg4RS0zMyw1LjA1Njk1NDkxNjYwMTA4OUUtMzIsOC42ODg2OTIyODYxNDQyODVFLTMzLDYuOTgwNjQ3MDUxOTQ4OTQ3RS0zMiwxLjEzNzgwMjc1MDczMzQ1NzVFLTMxLDUuMDkzMTA1OTY4MDg5MzU2RS0zMiw5LjMyMTYxMjM4MjEzNjE1MkUtMzMsMi4wOTE5ODQwOTkwMzc3MzA0RS0zMiw1Ljc5MTgwMDkwODg2MDYwNUUtMzIsNy4yMzM3MzgyNjMwMTk0NjRFLTMzLDguNDE1NDI1NjYwOTM2MzcyRS0zMywxLjcxNjU3NjE3OTgxNTU1MDVFLTMzLDMuMTQ5MDIxMzQwNTM5ODU1RS0zMiwxLjYzMDQzNjUxNTg4MDAyODRFLTMxLDIuOTI3NTM4OTE4Nzc2OTM5NkUtMzIsNC4zMTU2OTM3Nzg0OTg4NDc2RS0zMiwxLjg0ODk3NjI3NDY1Nzk2ODNFLTMzLDQuNDMxMzg0NzkzNjkwMTc0RS0zMiwxLjQ1MzIxNTMzNDQyOTg0OEUtMzIsOS4yNjMzMTYzMzEwNzQ5MDhFLTM0LDEuMjg1MjQ4OTY1ODM1MzgwM0UtMzMKKzIzLFdlZCAxNiBGZWIgMTEsNC44NzA3NDYyMzU4MDA5MTJFLTMzLDQuNzE3NDgyMDc5MDEwMTA5RS0zMywzLjQ1MzkzMDI1OTg0ODI2NzZFLTMzLDQuMjMzODYwMjQwMDQyNjkyNUUtMzIsMS4wNzkzNjI1NDUzODIwNjQ2RS0yOCw0LjQ0NjY0OTYzMzU0NzA3N0UtMzIsNi4xNTY2MjUyMjY1ODI3MzRFLTMzLDEuNjU3NzMxODAwMjczOTc0OUUtMzIsMS40ODU4NzI1MTc2NDEzNzUzRS0zNSwxLjE2Nzk3NDM2MjM0MjAxMTJFLTMxLDcuNzA5MjM2NDA0MDg5NDU1RS0zMiwxLjgyMDk5NDQzOTgxMzUxMTZFLTMyLDIuODMxNDUxMjM5MjQ4MDQ1NEUtMzMsMy41NjExMjM1MzAwMjM3MzQ2RS0zMyw4LjU1Nzg0MjgzMzM4NjY0OEUtMzIsOC43MTUxMDE5MTgxNDk1NkUtMzMsMS4zMjQwMDI5OTI2NDYwMzI5RS0zMyw0LjIwNzU1OTAxMjg2ODM0MUUtMzMsNy45OTkzMzY2NDIwNTczMzhFLTMzLDIuNTQ3NDQ2ODE3NTY0MTQ2RS0zMiwxLjg3NzY4MjM2OTgwMjk4NTdFLTMyLDIuMDg1OTg3NDgxMzI0NjY5N0UtMzMsMy40NzM3Mzg4MDgwMDY2MzU1RS0zMiwzLjE2MDAwNzQzOTYyMjI3OEUtMzIsMi4zMTcyOTAzMDgwNjg1NzUzRS0zMiwyLjIxMTI3MDI2NDk4NTQ1N0UtMzMsMi40OTQwNDQ1MjgzMTU5NDhFLTMzLDMuNzI1NDI1ODM3OTAxNzcyRS0zMiwxLjE4MTAwODg0MTcyMjI2NTRFLTMzLDQuMTI3NTE5MDg2ODcxNzQ1RS0zMywzLjU1NDgxNzQzNDE1NDcxOEUtMzMsMy4zMTg4OTI2MTUyNzI3NjQ3RS0zMiw1LjcxNjMxMTg0OTUzOTQyOTRFLTMzLDQuNDg5ODA0NTI5NjA4NzczRS0zMiw3LjQ2NzYxNjI5NTY4NjcyOEUtMzIsMy4zNTI5NjM4NTgyNzY5MTA2RS0zMiw2LjE2ODQ2MDUyODAzNTYxN0UtMzMsMS4zNzI3MjA3MDk0NDMzMTM0RS0zMiwzLjgxMDk0ODQzMzkyMDk4OUUtMzIsNC43NDA0NDgxODQxODE0NTc3RS0zMyw1LjU4MjY0NTk5MTExODEyRS0zMywxLjEzNzg1MDkzNDMwODEwNkUtMzMsMi4wNjg1Mjc5NjI2ODQ5NzVFLTMyLDEuMDY3MDA2NjQyMzY5Njk4MkUtMzEsMS45MDQ3NTg0NzQ1ODE5MjMzRS0zMiwyLjgzMTk2NDUxNjE0NDI3NEUtMzIsMS4yMjIxMDgwNzMxMjg4OEUtMzMsMi45MDEyODAzNDc1MTgyODVFLTMyLDkuNjE2MTg5OTk4MzM3MTA1RS0zMyw2LjIyNTEwMjExNjc3Njg3OUUtMzQsOC41MDgxMDY3MDY1NTE5NjNFLTM0CisyNCxUaHUgMTcgRmViIDExLDMuMzYyODIxMTY2Njg3ODJFLTMzLDMuMzA5ODcwNjEyOTM1NzE5RS0zMywyLjQxOTk0NDEyOTEyNzcyNjdFLTMzLDIuOTIxNDY1ODQ1NzIzNDc2RS0zMiw1LjkxOTc2NjU3MTYxODUyN0UtMjksMy4wNjE3NDQxMDY2MDk3NDFFLTMyLDQuMzAyODc5NDkxNzk1MDc1RS0zMywxLjEyOTY2MjgwNTA2NjA5MzZFLTMyLDEuMDY2NDczODUxNTU2NzQ0NUUtMzUsOC4wNjgzOTY0Njg1NTI0NzVFLTMyLDUuMzEyOTM4NzI2NjQ3NTAyRS0zMiwxLjI0OTI1MjgzMTQwMDYxN0UtMzIsMS45ODc4NzMzOTQ5MDI2NTI0RS0zMywyLjQ4MDc2NzAxMzA4NTYwN0UtMzMsNS45MTQ5NjUyODg1NzIxM0UtMzIsNi4xMDE1MDc1OTM4NTU2NzNFLTMzLDkuMzM3MzEzMDc3NjM1NTdFLTM0LDIuOTUyNDg5MTQ3MDcyMjc3NEUtMzMsNS41OTExNzI1NTkzNDM0NjVFLTMzLDEuNzY5MTIxMjI2ODYxMjc1M0UtMzIsMS4zMDUzNDM3MDYzNzYzNzZFLTMyLDEuNDU4OTkwOTY1MDQwNTYwOEUtMzMsMi40MTUxODgwNjMwMDgzMjk2RS0zMiwyLjE4NTUxMTU3NTAxNDczMTdFLTMyLDEuNjA4ODUyNTkxOTYyMDk5M0UtMzIsMS41NTQ3OTIxMjA0MjQyNjUyRS0zMywxLjczNzM1MTMzODQ0MzUyRS0zMywyLjU4NDAzNjczOTI5NzY3NTNFLTMyLDguMjUzMDMyMDY3NDg2MTE3RS0zNCwyLjg3ODM0MDQwOTU2ODA0MTZFLTMzLDIuNDc1NDk1MTY1MDQzNzcyRS0zMywyLjMwNTE5ODM4NzYxNDgzMjNFLTMyLDMuOTc3ODYwMTI5MjM5NzQ1RS0zMywzLjA2NzYxMTQwMTg3NDczNjNFLTMyLDUuMTg2ODcyNTc3MDUwOTc3RS0zMiwyLjMzNDQzMjc0Nzg2MzI3RS0zMiw0LjMxMTUxNjA1NzczNjE0NDVFLTMzLDkuNTMzMTEzNzk3NDU1ODQ4RS0zMywyLjY1MjIzMDU5MjM1OTQ3MTdFLTMyLDMuMjg4NzM2NjUzODk2MzhFLTMzLDMuOTA5Mjk1NTg5MzEwODMzRS0zMyw3Ljk2MzIzNTcwNTE5MjQ5OEUtMzQsMS40Mzc3MTU0MDE4NzM3MDg3RS0zMiw3LjM5NDUzNDY0ODM5MjgwNkUtMzIsMS4zMTM5MjIzNDc3NjI1Mzc0RS0zMiwxLjk2Njc1NzUwODQzNjgwMTJFLTMyLDguNTM0NTUzMzk4NTg2MzE3RS0zNCwyLjAxMTMxNzE2NzU4ODc0MDZFLTMyLDYuNzIxMTk4NTc5MDM3NzQ2RS0zMyw0LjQwMDAxMjkzNDc0Mzc1OUUtMzQsNS45NDg0ODE2Mjg4MjI2NEUtMzQKKzI1LEZyaSAxOCBGZWIgMTEsMi40MTc0Nzk0MDM2NzkxMDA3RS0zMywyLjQxNTYxNjA4NDAxNDcyMDVFLTMzLDEuNzYzNzgyODg3NDgwMjQ3NUUtMzMsMi4wOTkwOTY1NDA5MjY5NjIzRS0zMiwzLjQ4ODU1MjMyNDA3OTUxOEUtMjksMi4xOTU1MDg0NzMwMDg4NTZFLTMyLDMuMTI4ODQ0NTA3MDcxMTlFLTMzLDguMDIxOTc4MzA3NTgyODg4RS0zMyw3Ljk2MTg0OTA5Nzk4Mjk3OEUtMzYsNS44MDMzMDI3Njk3OTYwOTdFLTMyLDMuODEyOTYwMTI1MDk1MjU1M0UtMzIsOC45Mjc0Njc3OTE3OTUyODRFLTMzLDEuNDUxNjc4NzgyODcxNzk4M0UtMzMsMS43OTgzNjk5NzY1NDcwMTNFLTMzLDQuMjU2NTU1NzA0MTY1MDY2RS0zMiw0LjQ0MzkzNDkyNjQwNDk2M0UtMzMsNi44NDgxMzk5NjIwNTYyNTFFLTM0LDIuMTU1MDYxMzQzNTExMDg3RS0zMyw0LjA2NTkxNDY5MTE4MDMwOUUtMzMsMS4yNzg3NjQyMjA3NTU4NzM3RS0zMiw5LjQ0NDQ5NTcyNzAyMjgwNkUtMzMsMS4wNjE2NTQzNTc3ODEwMTA1RS0zMywxLjc0NzY0MjQ5NDk4NTQxOTdFLTMyLDEuNTczNjg0MjgyODQxNzI2NEUtMzIsMS4xNjI2MjYyNDE3NTI5OTIzRS0zMiwxLjEzNzAzNTc3MDM1MTczMjVFLTMzLDEuMjU5NDA3Mjc3MDYwNzAxRS0zMywxLjg2NTY3ODE3NjcyMzcxNzVFLTMyLDYuMDAwNDczNDUyMDQ1MDc1RS0zNCwyLjA4ODYyODUxNTMwNDA3ODhFLTMzLDEuNzkzOTUxMzY0OTE5MDcxNEUtMzMsMS42NjY0Nzg1NzgyNDg4ODI0RS0zMiwyLjg4MDc1Njg5ODQzODg0MzZFLTMzLDIuMTgzODE4ODUwNTczMjc0RS0zMiwzLjc0OTc3MjYwMzQ2OTg5MkUtMzIsMS42OTEzODg5Mjg3MzUyNDcyRS0zMiwzLjEzNTM3NDQ4OTE0NDY3NjVFLTMzLDYuODkwNzcwMzUwNDczMTg1RS0zMywxLjkyMDkyMzg4NDM5MzUyMDlFLTMyLDIuMzc0OTE2NDA1NDAyNDY1N0UtMzMsMi44NDc4NTMzMjkyNDMwNjY3RS0zMyw1Ljc5Nzg3MDkyMDE5ODA2MUUtMzQsMS4wNDAwMTk1Mzc2OTIyMTg3RS0zMiw1LjMzNDUxNjQwMDkxMTg0MUUtMzIsOS40Mzc5MTE5NDgyODA3ODNFLTMzLDEuNDIxNjUyODI1MjY0Mjk4NkUtMzIsNi4yMDEyNjk4NjM3MDA4OUUtMzQsMS40NTE0NTAwNzk5MzI4NDQ3RS0zMiw0Ljg4NzYxNjk5NTU2MjM0NkUtMzMsMy4yMzQwNTY5OTg3MjAwNDRFLTM0LDQuMzI2OTE3MDkwMDQzNjYyRS0zNAorMjYsU2F0IDE5IEZlYiAxMSwxLjc5NTE2NDcyNzE1MjU2MTNFLTMzLDEuODIyMjA0MjE0OTYxMTI2NUUtMzMsMS4zMjg2MTIzMzk5NTE1NTM0RS0zMywxLjU1NzkxNDg3MTI0ODg3OTRFLTMyLDIuMTYyNjA5NjQ3NjQ5NTM4NkUtMjksMS42MjYyMDE5NDQ0OTQ5MzY2RS0zMiwyLjM1MTA0Njc0MTY3MDk5NzRFLTMzLDUuODg0OTkwMTMzNzI5NzM4NEUtMzMsNi4xNjEzMjU1NTIwNDg0MThFLTM2LDQuMzExNzA0NzEzODExMzIzRS0zMiwyLjgyNjYwMjk0MTk0NjYzMTNFLTMyLDYuNTg5OTY5MjUyMjE2MTAzRS0zMywxLjA5NTc4MDI4MDMxMTQ2MzlFLTMzLDEuMzQ2OTcxOTYxMzg1NTE4M0UtMzMsMy4xNjQxMjU4OTYxMjYxODI3RS0zMiwzLjM0NDk2ODY0Njc0ODg4MUUtMzMsNS4xOTMzNTI0NjExODEyNjNFLTM0LDEuNjI1ODc0NTQzNzgwNTE5NUUtMzMsMy4wNTUzOTgxNTMwNDcxNjVFLTMzLDkuNTQ5MDczNjAwNDYxNDI2RS0zMyw3LjA1OTY4NDUwNTE2NTQ5OUUtMzMsNy45ODMzMTk5NDc2NDkwNjdFLTM0LDEuMzA2NDk3NjM2Mjc3NDM0NEUtMzIsMS4xNzA1MTI2NzM2OTE2Mzk5RS0zMiw4LjY3OTU3MTY2MTQ2NDYwNUUtMzMsOC41OTU5NTIyMjc2NTY0MDRFLTM0LDkuNDMyNTgxMjQ5NTcwMTQ4RS0zNCwxLjM5MTU0NDkwMDY5MTA3NzJFLTMyLDQuNTA4MjQwNDk4OTU0OTE2RS0zNCwxLjU2NTk3OTc4OTY0MTE1ODVFLTMzLDEuMzQzMTk2MTc3MTE1NDc1RS0zMywxLjI0NDYwMzQ2Njg4NDkxNzhFLTMyLDIuMTU1NDE5Njk2OTA0NTU0RS0zMywxLjYwNTk2NzQ5MDQwMTc0MkUtMzIsMi44MDA1NTY4NjExNDM1NThFLTMyLDEuMjY2MTQxMjE0MzQ4NTM1M0UtMzIsMi4zNTYxNTE2NTk4MDkzNDlFLTMzLDUuMTQ1NjMxMjU1MDI4NTgxRS0zMywxLjQzNzQwNDAxMTA3OTI4OTRFLTMyLDEuNzcxNzA5MDEwNzY4Njg2RS0zMywyLjE0NDA1NTY4Nzk1NDg4OEUtMzMsNC4zNjI0NjYyNjMxMTI3OTVFLTM0LDcuNzcyNDc5NTMxMjE5OTc5RS0zMywzLjk3NTUwMTQ5MzQ1MTUyODNFLTMyLDcuMDAyNjE5MDEwMzU4MjM3RS0zMywxLjA2MTYzMzIxNDQ2Nzc3MTZFLTMyLDQuNjU2MDI2MTI2MDc4MjI5RS0zNCwxLjA4MjAzMTY5MDIzNzIzMjlFLTMyLDMuNjcyODM1ODE0OTE3MDkyNkUtMzMsMi40NTg0MjY1OTM0OTgzMzRFLTM0LDMuMjUyNDU4NjY3MjIyOTYyN0UtMzQKKzI3LFN1biAyMCBGZWIgMTEsMS4zNTk5NTA3MjA1MzU3NjUyRS0zMywxLjQwMjM5MTE3OTAyNzM2MDVFLTMzLDEuMDIxMDQ1NTgyMDA5Mjk5N0UtMzMsMS4xNzk1OTk4MTAyNzkzMTA4RS0zMiwxLjM4OTA0MDkyOTE5NTEwNjhFLTI5LDEuMjI4ODY1NjgwMzM4Mjc4MUUtMzIsMS44MDIyNjc0OTI5NjQ0MzE3RS0zMyw0LjQwNTQ3NjgzNjg3ODg1MjVFLTMzLDQuODY5MTA0MTA5ODg0ODU3RS0zNiwzLjI2ODEyMDI0NzUwNzEyODVFLTMyLDIuMTM3NzMwNTczMTk3NDYxNUUtMzIsNC45NjMxMjc5NzA2NDUzMjNFLTMzLDguNDM4ODY3NDczODM5MDFFLTM0LDEuMDI5MjE5NjE4ODk4MTI0OEUtMzMsMi4zOTk1MTAzNzA4NTQ3MzNFLTMyLDIuNTY4NjU0NTIxNjM2MDI0NUUtMzMsNC4wMTg1ODQxMDg1MDM3MzZFLTM0LDEuMjUxNDY0MDE1NDY1MjM3OEUtMzMsMi4zNDIzODU2MjQ2NDY4NjM2RS0zMyw3LjI3NDQyMDIyNTUyMzk3M0UtMzMsNS4zODM0MjUyNjI4ODc4ODlFLTMzLDYuMTI0NDY0MTA4ODA1MTc1RS0zNCw5Ljk2Mzk1MjI2NzY5MTM1NUUtMzMsOC44ODE5MDY5MzQyMDYxMTdFLTMzLDYuNjEwMzI1MzMzNTQxOTIzRS0zMyw2LjYzMDMxMDkzNDM5MjgxM0UtMzQsNy4yMDcxNzA5MjU1ODMyNTI0RS0zNCwxLjA1ODgyNTYwNTIzODYzNDJFLTMyLDMuNDU1NDgzMTIzNDQ3NTExRS0zNCwxLjE5Nzc5ODQ0OTY2NTI2OTVFLTMzLDEuMDI1OTc2NjYwOTE3NjYzMUUtMzMsOS40ODI2MjczNTE5MTQwNzRFLTMzLDEuNjQ1MjI0MjU3ODgwNjgxN0UtMzMsMS4yMDUwNzEyNzY3NTEwOTQ5RS0zMiwyLjEzMzc4MzA5MDA5MDI0OThFLTMyLDkuNjY5MTgwMzIwODExNjEzRS0zMywxLjgwNjMzNDM0NDI5NDIwMUUtMzMsMy45MTk5MDg0NjMwMDcwOTFFLTMzLDEuMDk3Mjc1NjA2MTU0MjIxN0UtMzIsMS4zNDgzNTEyODg2NjI3MjEyRS0zMywxLjY0NjgxNTc0MzQ4NjcxNUUtMzMsMy4zNDg3NTEyNjAxODQ1MjlFLTM0LDUuOTI1NzY0NTg3NjY1ODg4NkUtMzMsMy4wMjI0MzA3ODkwNDY2OTM0RS0zMiw1LjMwMDYxMzE5MzE2NjQzRS0zMyw4LjA4NzY0MDI3ODI5NTMyMkUtMzMsMy41NjYzODAwMjQwOTQ2NzRFLTM0LDguMjI4OTYxNjc0NzYwOTQ2RS0zMywyLjgxNTcwMjk5MzY3NTg4MjNFLTMzLDEuOTA2OTcyODMyNjc3Mjk4MkUtMzQsMi40OTQxNzczMzk0ODkwODlFLTM0CisyOCxNb24gMjEgRmViIDExLDEuMDQxNzAyNzYyODY3OTIwOEUtMzMsMS4wOTA5MDcyNTA1NDkwOTEzRS0zMyw3LjkzMTM5ODk3MzYwMjQwMUUtMzQsOS4wMzA5NjAxNzQ4MjU3OTVFLTMzLDkuMTQ0NTU0NTY5NzQzNTI4RS0zMCw5LjM5MDA1MTQ3MjkzODA1RS0zMywxLjM5NjU0ODYwMTQ0MjQzNzNFLTMzLDMuMzM1Nzg4ODA5OTMzOTg1RS0zMywzLjg4ODUwODQ3MzMzNzI1NDZFLTM2LDIuNTA0NjIzMDYxMzkxMzM4NkUtMzIsMS42MzQ3OTc3NjUzNzYyMzk3RS0zMiwzLjc4MDEzMDc0Mjg3OTg5NUUtMzMsNi41Njg4MDUwNDE0MTI1MjlFLTM0LDcuOTQ5OTgwMDQxOTg4NDQ4RS0zNCwxLjgzOTg0MzAxNjg2MzUwOThFLTMyLDEuOTkzODA4MzI4MjI5MDk5M0UtMzMsMy4xNDI3MzUwNDE0ODIyMzUzRS0zNCw5LjczNjMyNzk3NzE5OTgxRS0zNCwxLjgxNTIxMTExNDAyMTA1NzNFLTMzLDUuNjAyNDAxNzUwMTM0MDYxRS0zMyw0LjE1MDExODE2MTQ2NDkwM0UtMzMsNC43NDkyNDk2MDcxOTYxMDc2RS0zNCw3LjY4MjEzMzg0Njk3NjUyRS0zMyw2LjgxNDI1NjU2NjY1NDM1MkUtMzMsNS4wODk2NjA0NjMwMzE2ODNFLTMzLDUuMTY4OTcwMDg0MTM5Mzc5RS0zNCw1LjU2NjgyOTMzNDYxMjUyOUUtMzQsOC4xNDUyMjAyNDIzMTQ0NDhFLTMzLDIuNjc3MjU5MjQyMzcxODc0MkUtMzQsOS4yNjE0NzMyOTg1NjM3MjVFLTM0LDcuOTIyMjI4MzU0NTQzMzYzRS0zNCw3LjMwNDA0ODE1NDQyNzUyNUUtMzMsMS4yNjk1MTI3Mzc0MTYxMjQ4RS0zMyw5LjE0NTczNzA5MzU2NTE1RS0zMywxLjY0MzU4ODk1MTk1MTY1MzhFLTMyLDcuNDY0Njc3MjkwMzc5OTZFLTMzLDEuMzk5ODE2NTI1ODI0MTY5NkUtMzMsMy4wMTg5MjIwOTY0MDE5MTNFLTMzLDguNDY3Nzk0NDUzNzc0NTM1RS0zMywxLjAzNzQzOTYyNTE1NjYzNTJFLTMzLDEuMjc4NTQ1NTk0ODI4MjY1NUUtMzMsMi41OTgzNjkyODI1NDMwNTRFLTM0LDQuNTY3MzAxMjMzNzU4NDg4NkUtMzMsMi4zMjMxNzA3MDM2MzgxOEUtMzIsNC4wNTY5ODY4MjEwMjU3MDZFLTMzLDYuMjI4ODQ2NTExMTc2OTNFLTMzLDIuNzYxMzc2NzgwOTMxMzE0RS0zNCw2LjMyNzEzMTMyMTU1MDU5NUUtMzMsMi4xODE5NzgzNzAyOTg0Mzk1RS0zMywxLjQ5NDk1MjY5NDI2MDY1MjRFLTM0LDEuOTMzMzg1OTAyNTEzNzkwN0UtMzQKKzI5LFR1ZSAyMiBGZWIgMTEsOC4wMTYxMDE2NTM5MjAyNzhFLTM0LDguNTE5NTMxMjY1OTM1NTlFLTM0LDYuMTg1NzE1OTc3NjA1NjM3RS0zNCw2Ljk0NjEwNzYxNzM2NTc3NEUtMzMsNi4xMjMzNTU3OTcyOTM1MTdFLTMwLDcuMjA5MDE1MjY4NzIzMTAzRS0zMywxLjA4NjYxMTU4NjkzNzc3MTVFLTMzLDIuNTM4NTk5ODc0MDI4Nzk5M0UtMzMsMy4xMTQ1MzMzODYyODU4NzMzRS0zNiwxLjkyODMwNTIyOTYxOTE5MDJFLTMyLDEuMjU2MDQzMTM1NzE1NTlFLTMyLDIuODkzMDkwOTQwMTQ4ODM4N0UtMzMsNS4xMzMxNzA1NDA1OTQyMzhFLTM0LDYuMTY2ODc0MTQ0NTQ3MTYwNEUtMzQsMS40MTcxNTkzNTk1OTk1OTcyRS0zMiwxLjU1Mzg1NTY1NzQxMzkxM0UtMzMsMi40NjY5MTM4MDU4ODQwMTU3RS0zNCw3LjYwNDY0MTY2NTc1NzQ5N0UtMzQsMS40MTI0NTk0MzcyMTQ0Mzk1RS0zMyw0LjMzMzU3ODkyMTAyMzY2N0UtMzMsMy4yMTMyMTkzNzQ2MTE2MDZFLTMzLDMuNjk3ODUyMzczODA0OTY0RS0zNCw1Ljk0ODUwOTI2OTI5NTI0RS0zMyw1LjI1MTY5NTA2OTc4NzY4MUUtMzMsMy45MzYwMDk1OTc0NTk1NDNFLTMzLDQuMDQ1MjI2ODY0MDk1Nzk0RS0zNCw0LjMxODEwMDA1OTY1NzYwN0UtMzQsNi4yOTM2MDM3MjI0OTY2MjNFLTMzLDIuMDgyODQwMDk0MzUxNTYyM0UtMzQsNy4xOTExNTI3MDc5OTA3NTg1RS0zNCw2LjE0MzM0MjE5NDM1NDY1OEUtMzQsNS42NTA1NzQ1NDI0OTk4Njc1RS0zMyw5LjgzODA1ODM3MDQ2MTEzNkUtMzQsNi45NzU2ODM4NDA3NDI4M0UtMzMsMS4yNzE1Mzk0NzYwMzUxNzE1RS0zMiw1Ljc4NzQwMjk1MDIwMDk1NUUtMzMsMS4wODkyNDEwNjQyMzMyNTg1RS0zMywyLjMzNTIwMjEzNjYzNzM2MDNFLTMzLDYuNTYyNzEzMDk5Mzg2NjEzRS0zMyw4LjAxNzQ2ODE5MzU2MTdFLTM0LDkuOTY2Mjc3MzU0OTY1MTA4RS0zNCwyLjAyNDMwMTkxNjg3ODMzN0UtMzQsMy41MzU1NDg1NjcwMDQ1ODc0RS0zMywxLjc5MzY1Njk0NjU1NjI1NkUtMzIsMy4xMTk1Njk3MzQ2OTczOTc2RS0zMyw0LjgxODI1Mjk4MzI4MzU2MjRFLTMzLDIuMTQ2OTM5NTM2MTg2MTc4RS0zNCw0Ljg4NjQ4MTAxOTEyODE0MTVFLTMzLDEuNjk3ODMwNjAwNDkyMzg4RS0zMywxLjE3NjE5MzUzMDg1MzI3MDlFLTM0LDEuNTA0ODIwMDg1Mjc4NTgzNUUtMzQKKzMwLFdlZCAyMyBGZWIgMTEsNi4xNzAwOTQ3NjI3NjUxMTNFLTM0LDYuNjQ5NDYxOTYxOTMwNjg4RS0zNCw0LjgyMTc4NzU1MDkwODI1M0UtMzQsNS4zNDQwMzg1NjgwMTI2MzFFLTMzLDQuMTQ4MDIwNDQ5NDIzMDhFLTMwLDUuNTM2NjM4MjkxODI2Mjg0RS0zMyw4LjQ1MTQ0NDAxNzk2MzY1OUUtMzQsMS45MzMzMjQ1OTkyNDgxOTE0RS0zMywyLjQ4OTQ5MzE3MjY2OTg5OTdFLTM2LDEuNDg0OTMzMjM1NjU2NjM5RS0zMiw5LjY1MzYxODMzMTgyMjM3N0UtMzMsMi4yMTUzNjc1NjIzNDk4NzM3RS0zMyw0LjAwODc3NTUzNjg0OTc0OEUtMzQsNC43ODI3Njc2NjM0MDU1NDhFLTM0LDEuMDkxODAwNTc2OTk1NzQyRS0zMiwxLjIxMDQxNTMzNjM0ODYyMTZFLTMzLDEuOTM0Njg0OTgwMzUxODIwNEUtMzQsNS45MzYxMDk3Nzc2NDMxNDFFLTM0LDEuMDk4NjU1MDEwMjgxOTE5M0UtMzMsMy4zNTIwMDI1NDMyNDg5NDRFLTMzLDIuNDg3NjEwNDQxNjUwMjY3RS0zMywyLjg3ODAyNDA1ODUwMDM0RS0zNCw0LjYwNTY4MTAyNjExMjEwNkUtMzMsNC4wNDgxMjYwODQ2MzA3MTZFLTMzLDMuMDQzNzg5Mjc2NjYwNjE2N0UtMzMsMy4xNjM1MTcyMzIzOTQ1MTJFLTM0LDMuMzQ4ODMyODQzMDk1ODg4NUUtMzQsNC44NjMwNDAyMjkyNzkwOThFLTMzLDEuNjE5ODA1Mzk4NTM5MTE1RS0zNCw1LjU4MjIzMTI3MDY5MTUxNkUtMzQsNC43NjMwNTI1NTM0NTc3MDE1RS0zNCw0LjM3MTIyOTA2NDI3NjM5OUUtMzMsNy42MjI5MjA3OTU2MjE0MDhFLTM0LDUuMzI0MDY4ODE3Mzk2MDUzNEUtMzMsOS44MzY2NjgyNzMxMjcwMjJFLTMzLDQuNDg2MjYxNTYyOTA3OTg2RS0zMyw4LjQ3MjUzMTA3ODU0NTgyOUUtMzQsMS44MDYyNjgxMDk5MzIyMjk3RS0zMyw1LjA4NTUwMjUxNjk3NTg1NjRFLTMzLDYuMTk2MTExMjgyMzc4MDMyNUUtMzQsNy43NjQ5ODk4NjI0NTkyMzVFLTM0LDEuNTc2MzU5MzMxMDY4Mjc0M0UtMzQsMi43MzY2NTkzNTQ0MjgyNTg4RS0zMywxLjM4NDkzMTgzNzU5MDM1NzhFLTMyLDIuMzk5NDU0MTc4NzIzNzYzM0UtMzMsMy43MjY5NzI2MDE0MzY3NDlFLTMzLDEuNjY4NjczMTUxMTgxNTU5M0UtMzQsMy43NzQwNjIxNjY4NTE2ODFFLTMzLDEuMzIwNjExNTAxMDEyNTIyMkUtMzMsOS4yNDQ0MjgxODc5MTY3OTRFLTM1LDEuMTcwNzkzMzAzOTI1NTI0RS0zNAorMzEsVGh1IDI0IEZlYiAxMSw0LjczNzEwNzcxNDA4NjA2NUUtMzQsNS4xNzE4ODg3ODE2MDc5MjhFLTM0LDMuNzQ1OTA4NjkzMDc0OTQyRS0zNCw0LjEwMTExODk4MjAzMTUyRS0zMywyLjgzMTc3NTg3MjU2NzU2MTZFLTMwLDQuMjQxOTQyMDMxNTA4MTUzRS0zMyw2LjU1MjE3OTA5MjIyODkwMkUtMzQsMS40NjkzMDk3NjQyNTg2NzU3RS0zMywxLjk3OTYxOTEyODcxMzY5MUUtMzYsMS4xNDA1NjE1NjkxOTEyMzNFLTMyLDcuNDAxMjY4NjYxMTA5MDI0RS0zMywxLjY5MjU2NTY2NDAwMjc3NDZFLTMzLDMuMTE5NjkwMTc1NDEyMzY5RS0zNCwzLjY5ODA4MjQ3NTE1ODA1NTVFLTM0LDguMzg5NTE1NTgwNjAwMTFFLTMzLDkuMzk3NDQ3MTM0MTgyOTE0RS0zNCwxLjUxMTUwMDg0NjM5ODY0ODlFLTM0LDQuNjE3NTY3MjkxNTY5NTRFLTM0LDguNTE4MTA0MzU1MDM3MzI3RS0zNCwyLjU4NTM2MzUyNzQxMzY1MjZFLTMzLDEuOTIwMjU0ODI3Mjc3OTQ1OEUtMzMsMi4yMzI2MzM4MDU3MzEyMjQ4RS0zNCwzLjU1NTU4NjAzODA5NzI0NDVFLTMzLDMuMTEyMTcwODI5NTY2MjU0RS0zMywyLjM0NzE0MDYwNDc2OTYzMjhFLTMzLDIuNDY1MDYzNjUwNzAyMDU2N0UtMzQsMi41ODkyNzU0MzcxMDczNTRFLTM0LDMuNzQ3MTgzNjQwNTI3MzIxNkUtMzMsMS4yNTU2NTgyMjk3MzY1NDA2RS0zNCw0LjMxOTg5ODQzMzIxNDI2N0UtMzQsMy42ODE3ODIzNzkyMDM1MzkzRS0zNCwzLjM3MTg2OTA0ODgzOTAyN0UtMzMsNS44ODkwMjU0OTU4NTA5NkUtMzQsNC4wNTQ4NTU0ODk1Njg1MTFFLTMzLDcuNTg3OTA1NDU0NjYzNTc1RS0zMywzLjQ2NzIzMTgwMzE2OTQ2OEUtMzMsNi41Njg5ODU5MjExODU3NkUtMzQsMS4zOTMxNTU0OTI4NzA4MTM1RS0zMywzLjkyOTA4ODI1ODY5MjgyMzZFLTMzLDQuNzc1MTI4OTUzODc4MDU3RS0zNCw2LjAyOTY4NTEzNzE5NTY3RS0zNCwxLjIyMzQ4MDI1NjA5ODk4ODdFLTM0LDIuMTEyMTQ3ODE1MjM5NTQ1NEUtMzMsMS4wNjY0MTU0MTYyMDMwMjI3RS0zMiwxLjg0MDk0NzU3ODA5OTMyODJFLTMzLDIuODc0NjI5NDIzOTEyMDg2OEUtMzMsMS4yOTI4MzE5MTIwNjAzNDk0RS0zNCwyLjkwNjg1MjY3OTA1MDE1N0UtMzMsMS4wMjM4ODc4MTUzOTg0ODJFLTMzLDcuMjM2OTMyODUzMTYyMDk2RS0zNSw5LjA3OTU1MzM5MDExOTk1N0UtMzUKKzMyLEZyaSAyNSBGZWIgMTEsMy42MjE1MDg1MTgzNDgxMjI0RS0zNCw0LjAwMTgzOTQ4Nzg3Nzg1MkUtMzQsMi44OTUzMDUzNzg3ODkxNjk1RS0zNCwzLjEzNDAyMDIwODA2MDI2NkUtMzMsMS45NDMwMzk4NjIwMTgwNTM1RS0zMCwzLjIzNjYyOTc3MDI4OTIyMkUtMzMsNS4wNTQ3MjU3NTY2Mjc5MjJFLTM0LDEuMTEyNDI5NzEzNzAzNDY5MkUtMzMsMS41NjMyMjgyOTQ2ODU3NTIzRS0zNiw4LjcyMzE0ODc5MjgzMTMwMUUtMzMsNS42NTA4NTcxMTUzMjg5MDlFLTMzLDEuMjg4MDE0MjExMjUxNTY0M0UtMzMsMi40MTUxMjg3MDQ5MTg0NDRFLTM0LDIuODQ1ODg1OTE1MTA2NDk0NkUtMzQsNi40MTg5MTMyNTA4NzcyNzlFLTMzLDcuMjU5Mjk5MjA3NjMwMDIyRS0zNCwxLjE3NDM1NDc2NjU2MDgzMkUtMzQsMy41NzMyOTIxMzk3NTM0MzQ0RS0zNCw2LjU3MTcyNzI0NjY5NDUyMjVFLTM0LDEuOTg0OTk4MjM1Nzk3Mzg1NEUtMzMsMS40NzU0NzI1NDM0MjQ0OTUyRS0zMywxLjcyMzM2NDIwMDk3MDU1NDhFLTM0LDIuNzMyMjU1OTU2OTE1Nzg4RS0zMywyLjM4MjI2MzY4NjQ5OTMyOTZFLTMzLDEuODAxNzM2ODg3ODkzNDM2RS0zMywxLjkxMDYwNDIzNTk2NzM0MzVFLTM0LDEuOTkyNTQyMjQwMzcyNzA3RS0zNCwyLjg3NDQzNTcwNjkyNzA1MUUtMzMsOS42ODU5MTMxMTc2MzAzRS0zNSwzLjMyNzAyMTY0OTc4Mjg5OUUtMzQsMi44MzI1ODg5Nzk5NTk4MjgzRS0zNCwyLjU4OTE0MDExMjk2MDY3OTVFLTMzLDQuNTI4MzEyNTU4MDY3NjkxRS0zNCwzLjA3NjM2MzA1MTU1ODI5NDNFLTMzLDUuODI2NTcwOTQ4MDY0NjQ3RS0zMywyLjY2NzEwMDAwNjE3MTE0OTNFLTMzLDUuMDY4MDE4MzYwNTQ3MDc3RS0zNCwxLjA2OTY0MTM2ODIyMDE4ODNFLTMzLDMuMDIxNDY4MjE4ODE4NzIyNkUtMzMsMy42NjM1MDQ2ODgxMzkwNTdFLTM0LDQuNjU4NTU5NDUwODEwMzg4RS0zNCw5LjQ0ODQwMjMyOTc3NzMyN0UtMzUsMS42MjI2NjQ5MTQ0MTQ1MjE4RS0zMyw4LjE3NTE0NDQwOTY2ODI4RS0zMywxLjQwNjUxMjAyNTk3OTIyNDFFLTMzLDIuMjA3MTMxMzEyMDcxODE5RS0zMyw5Ljk2NzYxODA1OTc5NDYyNUUtMzUsMi4yMjg5NDg3NjgxMTM5NDkzRS0zMyw3Ljg5OTIzMzY3Nzg2MDE1NkUtMzQsNS42MzMxMzkwNzIxOTI4MjFFLTM1LDcuMDA2NDE1MTcxMTQ5NDA5RS0zNQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTRUlSU3RhdGVzT25seV9SS19SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vUG9wdWxhdGlvbiBDb3VudF8wLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0VJUlN0YXRlc09ubHlfUktfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL1BvcHVsYXRpb24gQ291bnRfMC5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjQ2ZTFmOAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0VJUlN0YXRlc09ubHlfUktfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL1BvcHVsYXRpb24gQ291bnRfMC5jc3YKQEAgLTAsMCArMSwzMyBAQAoraXRlcmF0aW9uLHRpbWUsc3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vbm9kZS90cmFuc3BvcnQvcGlwZS9VU0EKKzEsVHVlIDI1IEphbiAxMSw5NDMyMTEuMAorMixXZWQgMjYgSmFuIDExLDk0MzIxMC45OTk5OTk5OTk5CiszLFRodSAyNyBKYW4gMTEsOTQzMjEwLjk5OTk5OTk5OTgKKzQsRnJpIDI4IEphbiAxMSw5NDMyMTAuOTk5OTk5OTk5OQorNSxTYXQgMjkgSmFuIDExLDk0MzIxMS4wCis2LFN1biAzMCBKYW4gMTEsOTQzMjExLjAKKzcsTW9uIDMxIEphbiAxMSw5NDMyMTAuOTk5OTk5OTk5OQorOCxUdWUgMSBGZWIgMTEsOTQzMjExLjAKKzksV2VkIDIgRmViIDExLDk0MzIxMS4wCisxMCxUaHUgMyBGZWIgMTEsOTQzMjExLjAKKzExLEZyaSA0IEZlYiAxMSw5NDMyMTEuMAorMTIsU2F0IDUgRmViIDExLDk0MzIxMS4wMDAwMDAwMDAzCisxMyxTdW4gNiBGZWIgMTEsOTQzMjExLjAwMDAwMDAwMDIKKzE0LE1vbiA3IEZlYiAxMSw5NDMyMTEuMDAwMDAwMDAwNgorMTUsVHVlIDggRmViIDExLDk0MzIxMS4wMDAwMDAwMDA1CisxNixXZWQgOSBGZWIgMTEsOTQzMjExLjAwMDAwMDAwMDUKKzE3LFRodSAxMCBGZWIgMTEsOTQzMjExLjAwMDAwMDAwMDUKKzE4LEZyaSAxMSBGZWIgMTEsOTQzMjExLjAwMDAwMDAwMDYKKzE5LFNhdCAxMiBGZWIgMTEsOTQzMjExLjAwMDAwMDAwMDUKKzIwLFN1biAxMyBGZWIgMTEsOTQzMjExLjAwMDAwMDAwMDYKKzIxLE1vbiAxNCBGZWIgMTEsOTQzMjExLjAwMDAwMDAwMDYKKzIyLFR1ZSAxNSBGZWIgMTEsOTQzMjExLjAwMDAwMDAwMDcKKzIzLFdlZCAxNiBGZWIgMTEsOTQzMjExLjAwMDAwMDAwMDMKKzI0LFRodSAxNyBGZWIgMTEsOTQzMjExLjAwMDAwMDAwMDUKKzI1LEZyaSAxOCBGZWIgMTEsOTQzMjExLjAwMDAwMDAwMDYKKzI2LFNhdCAxOSBGZWIgMTEsOTQzMjExLjAwMDAwMDAwMDgKKzI3LFN1biAyMCBGZWIgMTEsOTQzMjExLjAwMDAwMDAwMQorMjgsTW9uIDIxIEZlYiAxMSw5NDMyMTEuMDAwMDAwMDAwOQorMjksVHVlIDIyIEZlYiAxMSw5NDMyMTEuMDAwMDAwMDAxMworMzAsV2VkIDIzIEZlYiAxMSw5NDMyMTEuMDAwMDAwMDAxNAorMzEsVGh1IDI0IEZlYiAxMSw5NDMyMTEuMDAwMDAwMDAxMgorMzIsRnJpIDI1IEZlYiAxMSw5NDMyMTEuMDAwMDAwMDAxMwpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTRUlSU3RhdGVzT25seV9SS19SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vUG9wdWxhdGlvbiBDb3VudF8xLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0VJUlN0YXRlc09ubHlfUktfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL1BvcHVsYXRpb24gQ291bnRfMS5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGRmOGM1OAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0VJUlN0YXRlc09ubHlfUktfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL1BvcHVsYXRpb24gQ291bnRfMS5jc3YKQEAgLTAsMCArMSwzMyBAQAoraXRlcmF0aW9uLHRpbWUsVVMtQUssVVMtQUwsVVMtQVIsVVMtQVosVVMtQ0EsVVMtQ08sVVMtQ1QsVVMtREMsVVMtREUsVVMtRkwsVVMtR0EsVVMtSEksVVMtSUEsVVMtSUQsVVMtSUwsVVMtSU4sVVMtS1MsVVMtS1ksVVMtTEEsVVMtTUEsVVMtTUQsVVMtTUUsVVMtTUksVVMtTU4sVVMtTU8sVVMtTVMsVVMtTVQsVVMtTkMsVVMtTkQsVVMtTkUsVVMtTkgsVVMtTkosVVMtTk0sVVMtTlYsVVMtTlksVVMtT0gsVVMtT0ssVVMtT1IsVVMtUEEsVVMtUkksVVMtU0MsVVMtU0QsVVMtVE4sVVMtVFgsVVMtVVQsVVMtVkEsVVMtVlQsVVMtV0EsVVMtV0ksVVMtV1YsVVMtV1kKKzEsVHVlIDI1IEphbiAxMSw2MjY5MzIuMCw0NDQ3MTAwLjAsMjY3MzQwMC4wLDUxMzA2MzIuMCwzLjM4NzE2NDhFNyw0MzAxMjYxLjAsMzQwNTU2NS4wLDU3MjA1OS4wLDc4MzYwMC4wLDEuNTk4MjM3OEU3LDgxODY0NTMuMCwxMjExNTM3LjAsMjkyNjMyNC4wLDEyOTM5NTMuMCwxLjI0MTkyOTNFNyw2MDgwNDg1LjAsMjY4ODQxOC4wLDQwNDE3NjkuMCw0NDY4OTc2LjAsNjM0OTA5Ny4wLDUyOTY0ODYuMCwxMjc0OTIzLjAsOTkzODQ0NC4wLDQ5MTk0NzkuMCw1NTk1MjExLjAsMjg0NDY1OC4wLDkwMjE5NS4wLDgwNDkzMTMuMCw2NDIyMDAuMCwxNzExMjYzLjAsMTIzNTc4Ni4wLDg0MTQzNTAuMCwxODE5MDQ2LjAsMTk5ODI1Ny4wLDEuODk3NjQ1N0U3LDEuMTM1MzE0RTcsMzQ1MDY1NC4wLDM0MjEzOTkuMCwxLjIyODEwNTRFNywxMDQ4MzE5LjAsNDAxMjAxMi4wLDc1NDg0NC4wLDU2ODkyODMuMCwyLjA4NTE4MkU3LDIyMzMxNjkuMCw3MDc4NTE2LjAsNjA4ODI3LjAsNTg5NDEyMS4wLDUzNjM2NzUuMCwxODA4MzQ0LjAsNDkzNzgyLjAKKzIsV2VkIDI2IEphbiAxMSw2MjY5MzIuMDAwMDAwMDAwMSw0NDQ3MTAwLjAwMDAwMDAwMSwyNjczNDAwLjAsNTEzMDYzMS45OTk5OTk5OTksMy4zODcxNjQ4RTcsNDMwMTI2MS4wLDM0MDU1NjUuMCw1NzIwNTkuMCw3ODM2MDAuMCwxLjU5ODIzNzhFNyw4MTg2NDUzLjAwMDAwMDAwMSwxMjExNTM3LjAsMjkyNjMyNC4wMDAwMDAwMDA1LDEyOTM5NTMuMCwxLjI0MTkyOTMwMDAwMDAwMDRFNyw2MDgwNDg1LjAwMDAwMDAwMSwyNjg4NDE4LjAsNDA0MTc2OS4wMDAwMDAwMDA1LDQ0Njg5NzYuMDAwMDAwMDAxLDYzNDkwOTcuMDAwMDAwMDAxLDUyOTY0ODYuMDAwMDAwMDAxLDEyNzQ5MjMuMCw5OTM4NDQ0LjAsNDkxOTQ3OC45OTk5OTk5OTgsNTU5NTIxMS4wLDI4NDQ2NTguMCw5MDIxOTUuMCw4MDQ5MzEzLjAwMDAwMDAwMSw2NDIyMDAuMCwxNzExMjYzLjAwMDAwMDAwMDIsMTIzNTc4Ni4wMDAwMDAwMDAyLDg0MTQzNDkuOTk5OTk5OTk4LDE4MTkwNDYuMDAwMDAwMDAwMiwxOTk4MjU3LjAsMS44OTc2NDU3RTcsMS4xMzUzMTRFNywzNDUwNjU0LjAsMzQyMTM5OS4wLDEuMjI4MTA1NDAwMDAwMDAwMkU3LDEwNDgzMTguOTk5OTk5OTk5OSw0MDEyMDEyLjAwMDAwMDAwMSw3NTQ4NDQuMCw1Njg5MjgzLjAsMi4wODUxODIwMDAwMDAwMDA0RTcsMjIzMzE2OS4wMDAwMDAwMDA1LDcwNzg1MTYuMCw2MDg4MjcuMCw1ODk0MTIxLjAwMDAwMDAwMiw1MzYzNjc0Ljk5OTk5OTk5OCwxODA4MzQ0LjAwMDAwMDAwMDIsNDkzNzgxLjk5OTk5OTk5OTk0CiszLFRodSAyNyBKYW4gMTEsNjI2OTMyLjAsNDQ0NzEwMC4wMDAwMDAwMDIsMjY3MzM5OS45OTk5OTk5OTk1LDUxMzA2MzEuOTk5OTk5OTk5LDMuMzg3MTY0Nzk5OTk5OTk5RTcsNDMwMTI2MS4wLDM0MDU1NjUuMDAwMDAwMDAwNSw1NzIwNTkuMDAwMDAwMDAwMSw3ODM2MDAuMCwxLjU5ODIzNzgwMDAwMDAwMDJFNyw4MTg2NDUzLjAsMTIxMTUzNy4wMDAwMDAwMDAyLDI5MjYzMjQuMDAwMDAwMDAwNSwxMjkzOTUzLjAwMDAwMDAwMDIsMS4yNDE5MjkzMDAwMDAwMDAyRTcsNjA4MDQ4NS4wMDAwMDAwMDEsMjY4ODQxNy45OTk5OTk5OTk1LDQwNDE3NjkuMDAwMDAwMDAxLDQ0Njg5NzYuMDAwMDAwMDAxLDYzNDkwOTcuMCw1Mjk2NDg2LjAwMDAwMDAwMiwxMjc0OTIzLjAsOTkzODQ0NC4wLDQ5MTk0NzguOTk5OTk5OTk5LDU1OTUyMTEuMDAwMDAwMDAxLDI4NDQ2NTguMCw5MDIxOTUuMCw4MDQ5MzEzLjAsNjQyMjAwLjAwMDAwMDAwMDEsMTcxMTI2My4wLDEyMzU3ODYuMCw4NDE0MzQ5Ljk5OTk5OTk5OCwxODE5MDQ2LjAwMDAwMDAwMDIsMTk5ODI1Ni45OTk5OTk5OTk4LDEuODk3NjQ1Njk5OTk5OTk5NkU3LDEuMTM1MzEzOTk5OTk5OTk5NkU3LDM0NTA2NTQuMDAwMDAwMDAwNSwzNDIxMzk4Ljk5OTk5OTk5OTUsMS4yMjgxMDU0MDAwMDAwMDAyRTcsMTA0ODMxOC45OTk5OTk5OTk5LDQwMTIwMTIuMDAwMDAwMDAwNSw3NTQ4NDQuMCw1Njg5MjgyLjk5OTk5OTk5OSwyLjA4NTE4MjAwMDAwMDAwMDRFNywyMjMzMTY5LjAsNzA3ODUxNi4wMDAwMDAwMDEsNjA4ODI3LjAsNTg5NDEyMS4wMDAwMDAwMDIsNTM2MzY3NS4wLDE4MDgzNDQuMDAwMDAwMDAwMiw0OTM3ODEuOTk5OTk5OTk5OTQKKzQsRnJpIDI4IEphbiAxMSw2MjY5MzIuMDAwMDAwMDAwMiw0NDQ3MTAwLjAwMDAwMDAwMSwyNjczNDAwLjAsNTEzMDYzMi4wLDMuMzg3MTY0OEU3LDQzMDEyNjEuMCwzNDA1NTY1LjAsNTcyMDU5LjAsNzgzNjAwLjAwMDAwMDAwMDEsMS41OTgyMzc4MDAwMDAwMDAyRTcsODE4NjQ1My4wLDEyMTE1MzcuMDAwMDAwMDAwMiwyOTI2MzI0LjAwMDAwMDAwMDUsMTI5Mzk1My4wMDAwMDAwMDAyLDEuMjQxOTI5MzAwMDAwMDAwMkU3LDYwODA0ODUuMCwyNjg4NDE4LjAwMDAwMDAwMDUsNDA0MTc2OS4wMDAwMDAwMDA1LDQ0Njg5NzYuMDAwMDAwMDAyLDYzNDkwOTcuMDAwMDAwMDAxLDUyOTY0ODYuMDAwMDAwMDAyLDEyNzQ5MjMuMCw5OTM4NDQ0LjAsNDkxOTQ3OC45OTk5OTk5OTgsNTU5NTIxMS4wLDI4NDQ2NTcuOTk5OTk5OTk5NSw5MDIxOTUuMCw4MDQ5MzEzLjAwMDAwMDAwMSw2NDIyMDAuMDAwMDAwMDAwMSwxNzExMjYzLjAwMDAwMDAwMDIsMTIzNTc4NS45OTk5OTk5OTk4LDg0MTQzNDkuOTk5OTk5OTk2LDE4MTkwNDYuMCwxOTk4MjU3LjAwMDAwMDAwMDIsMS44OTc2NDU3RTcsMS4xMzUzMTM5OTk5OTk5OTk2RTcsMzQ1MDY1My45OTk5OTk5OTk1LDM0MjEzOTguOTk5OTk5OTk5NSwxLjIyODEwNTQwMDAwMDAwMDZFNywxMDQ4MzE4Ljk5OTk5OTk5OTksNDAxMjAxMi4wMDAwMDAwMDA1LDc1NDg0NC4wLDU2ODkyODMuMDAwMDAwMDAxLDIuMDg1MTgyMDAwMDAwMDAwNEU3LDIyMzMxNjguOTk5OTk5OTk5NSw3MDc4NTE2LjAsNjA4ODI3LjAsNTg5NDEyMS4wMDAwMDAwMDIsNTM2MzY3NS4wLDE4MDgzNDQuMDAwMDAwMDAwMiw0OTM3ODEuOTk5OTk5OTk5OTQKKzUsU2F0IDI5IEphbiAxMSw2MjY5MzIuMDAwMDAwMDAwMiw0NDQ3MTAwLjAwMDAwMDAwMSwyNjczMzk5Ljk5OTk5OTk5OTUsNTEzMDYzMi4wMDAwMDAwMDEsMy4zODcxNjQ3OTk5OTk5OTlFNyw0MzAxMjYwLjk5OTk5OTk5OSwzNDA1NTY0Ljk5OTk5OTk5OTUsNTcyMDU5LjAwMDAwMDAwMDEsNzgzNjAwLjAsMS41OTgyMzc4RTcsODE4NjQ1My4wLDEyMTE1MzcuMDAwMDAwMDAwMiwyOTI2MzI0LjAwMDAwMDAwMSwxMjkzOTUyLjk5OTk5OTk5OTgsMS4yNDE5MjkzMDAwMDAwMDA0RTcsNjA4MDQ4NS4wLDI2ODg0MTguMDAwMDAwMDAwNSw0MDQxNzY5LjAwMDAwMDAwMDUsNDQ2ODk3Ni4wMDAwMDAwMDIsNjM0OTA5Ny4wMDAwMDAwMDEsNTI5NjQ4Ni4wMDAwMDAwMDIsMTI3NDkyMy4wMDAwMDAwMDAyLDk5Mzg0NDQuMCw0OTE5NDc4Ljk5OTk5OTk5Nyw1NTk1MjExLjAwMDAwMDAwMSwyODQ0NjU3Ljk5OTk5OTk5OTUsOTAyMTk1LjAwMDAwMDAwMDEsODA0OTMxMi45OTk5OTk5OTksNjQyMjAwLjAsMTcxMTI2My4wLDEyMzU3ODYuMCw4NDE0MzQ5Ljk5OTk5OTk5NiwxODE5MDQ2LjAsMTk5ODI1Ny4wMDAwMDAwMDA1LDEuODk3NjQ1N0U3LDEuMTM1MzEzOTk5OTk5OTk5NEU3LDM0NTA2NTMuOTk5OTk5OTk5LDM0MjEzOTkuMCwxLjIyODEwNTQwMDAwMDAwMDRFNywxMDQ4MzE5LjAwMDAwMDAwMDEsNDAxMjAxMi4wLDc1NDg0NC4wLDU2ODkyODMuMDAwMDAwMDAxLDIuMDg1MTgyMDAwMDAwMDAwNEU3LDIyMzMxNjguOTk5OTk5OTk5NSw3MDc4NTE2LjAsNjA4ODI2Ljk5OTk5OTk5OTgsNTg5NDEyMS4wMDAwMDAwMDIsNTM2MzY3NC45OTk5OTk5OTksMTgwODM0NC4wMDAwMDAwMDAyLDQ5Mzc4MS45OTk5OTk5OTk5Cis2LFN1biAzMCBKYW4gMTEsNjI2OTMyLjAwMDAwMDAwMDEsNDQ0NzEwMC4wMDAwMDAwMDEsMjY3MzM5OS45OTk5OTk5OTg2LDUxMzA2MzIuMDAwMDAwMDAyLDMuMzg3MTY0Nzk5OTk5OTk4NUU3LDQzMDEyNjAuOTk5OTk5OTk5LDM0MDU1NjUuMCw1NzIwNTkuMDAwMDAwMDAwMiw3ODM2MDAuMDAwMDAwMDAwMiwxLjU5ODIzNzhFNyw4MTg2NDUzLjAsMTIxMTUzNy4wLDI5MjYzMjQuMDAwMDAwMDAxLDEyOTM5NTIuOTk5OTk5OTk5OCwxLjI0MTkyOTMwMDAwMDAwMDRFNyw2MDgwNDg0Ljk5OTk5OTk5OSwyNjg4NDE4LjAwMDAwMDAwMSw0MDQxNzY5LjAwMDAwMDAwMDUsNDQ2ODk3Ni4wMDAwMDAwMDMsNjM0OTA5Ny4wLDUyOTY0ODYuMDAwMDAwMDAyLDEyNzQ5MjMuMCw5OTM4NDQ0LjAsNDkxOTQ3OC45OTk5OTk5OTYsNTU5NTIxMS4wMDAwMDAwMDEsMjg0NDY1Ny45OTk5OTk5OTksOTAyMTk1LjAwMDAwMDAwMDEsODA0OTMxMy4wMDAwMDAwMDEsNjQyMjAwLjAwMDAwMDAwMDEsMTcxMTI2My4wLDEyMzU3ODYuMDAwMDAwMDAwMiw4NDE0MzQ5Ljk5OTk5OTk5NiwxODE5MDQ1Ljk5OTk5OTk5OTgsMTk5ODI1Ny4wMDAwMDAwMDA1LDEuODk3NjQ1N0U3LDEuMTM1MzEzOTk5OTk5OTk5NkU3LDM0NTA2NTQuMDAwMDAwMDAwNSwzNDIxMzk4Ljk5OTk5OTk5OSwxLjIyODEwNTQwMDAwMDAwMDZFNywxMDQ4MzE5LjAsNDAxMjAxMi4wMDAwMDAwMDEsNzU0ODQ0LjAsNTY4OTI4My4wMDAwMDAwMDIsMi4wODUxODE5OTk5OTk5OTk2RTcsMjIzMzE2OS4wLDcwNzg1MTYuMDAwMDAwMDAxLDYwODgyNi45OTk5OTk5OTk5LDU4OTQxMjEuMDAwMDAwMDAyLDUzNjM2NzQuOTk5OTk5OTk4LDE4MDgzNDQuMDAwMDAwMDAwMiw0OTM3ODIuMAorNyxNb24gMzEgSmFuIDExLDYyNjkzMi4wMDAwMDAwMDAyLDQ0NDcxMDAuMDAwMDAwMDAyLDI2NzMzOTkuOTk5OTk5OTk4Niw1MTMwNjMyLjAwMDAwMDAwMiwzLjM4NzE2NDc5OTk5OTk5ODVFNyw0MzAxMjYxLjAsMzQwNTU2NC45OTk5OTk5OTksNTcyMDU5LjAwMDAwMDAwMDMsNzgzNjAwLjAwMDAwMDAwMDMsMS41OTgyMzc4RTcsODE4NjQ1My4wLDEyMTE1MzcuMCwyOTI2MzI0LjAwMDAwMDAwMSwxMjkzOTUyLjk5OTk5OTk5OTUsMS4yNDE5MjkzMDAwMDAwMDAyRTcsNjA4MDQ4NS4wMDAwMDAwMDEsMjY4ODQxOC4wMDAwMDAwMDA1LDQwNDE3NjkuMDAwMDAwMDAxLDQ0Njg5NzYuMDAwMDAwMDA0LDYzNDkwOTcuMCw1Mjk2NDg2LjAwMDAwMDAwMiwxMjc0OTIzLjAsOTkzODQ0NC4wMDAwMDAwMDIsNDkxOTQ3OC45OTk5OTk5OTcsNTU5NTIxMS4wMDAwMDAwMDMsMjg0NDY1OC4wLDkwMjE5NS4wMDAwMDAwMDAxLDgwNDkzMTMuMDAwMDAwMDAyLDY0MjIwMC4wMDAwMDAwMDAxLDE3MTEyNjIuOTk5OTk5OTk5OCwxMjM1Nzg2LjAsODQxNDM0OS45OTk5OTk5OTYsMTgxOTA0NS45OTk5OTk5OTk1LDE5OTgyNTcuMCwxLjg5NzY0NTcwMDAwMDAwMDRFNywxLjEzNTMxMzk5OTk5OTk5OTRFNywzNDUwNjUzLjk5OTk5OTk5OSwzNDIxMzk4Ljk5OTk5OTk5ODYsMS4yMjgxMDU0MDAwMDAwMDA0RTcsMTA0ODMxOC45OTk5OTk5OTk4LDQwMTIwMTIuMDAwMDAwMDAwNSw3NTQ4NDQuMDAwMDAwMDAwMiw1Njg5MjgzLjAwMDAwMDAwMiwyLjA4NTE4MTk5OTk5OTk5OTZFNywyMjMzMTY5LjAsNzA3ODUxNi4wLDYwODgyNi45OTk5OTk5OTk4LDU4OTQxMjEuMDAwMDAwMDAzLDUzNjM2NzQuOTk5OTk5OTk3LDE4MDgzNDQuMDAwMDAwMDAwNSw0OTM3ODEuOTk5OTk5OTk5OQorOCxUdWUgMSBGZWIgMTEsNjI2OTMyLjAsNDQ0NzEwMC4wMDAwMDAwMDIsMjY3MzM5OS45OTk5OTk5OTgsNTEzMDYzMi4wMDAwMDAwMDMsMy4zODcxNjQ3OTk5OTk5OTg1RTcsNDMwMTI2MS4wMDAwMDAwMDEsMzQwNTU2NC45OTk5OTk5OTksNTcyMDU5LjAwMDAwMDAwMDUsNzgzNjAwLjAwMDAwMDAwMDEsMS41OTgyMzc4RTcsODE4NjQ1My4wLDEyMTE1MzcuMCwyOTI2MzI0LjAsMTI5Mzk1Mi45OTk5OTk5OTk4LDEuMjQxOTI5MzAwMDAwMDAwNEU3LDYwODA0ODUuMCwyNjg4NDE4LjAwMDAwMDAwMDUsNDA0MTc2OS4wMDAwMDAwMDEsNDQ2ODk3Ni4wMDAwMDAwMDIsNjM0OTA5Ny4wLDUyOTY0ODYuMDAwMDAwMDAyLDEyNzQ5MjMuMCw5OTM4NDQ0LjAwMDAwMDAwMiw0OTE5NDc4Ljk5OTk5OTk5Nyw1NTk1MjExLjAwMDAwMDAwMiwyODQ0NjU3Ljk5OTk5OTk5ODYsOTAyMTk1LjAsODA0OTMxMy4wLDY0MjIwMC4wMDAwMDAwMDAzLDE3MTEyNjMuMCwxMjM1Nzg1Ljk5OTk5OTk5OTgsODQxNDM0OS45OTk5OTk5OTgsMTgxOTA0NS45OTk5OTk5OTksMTk5ODI1Ny4wLDEuODk3NjQ1N0U3LDEuMTM1MzEzOTk5OTk5OTk5NEU3LDM0NTA2NTMuOTk5OTk5OTk4NiwzNDIxMzk4Ljk5OTk5OTk5OSwxLjIyODEwNTRFNywxMDQ4MzE5LjAsNDAxMjAxMi4wMDAwMDAwMDA1LDc1NDg0NC4wMDAwMDAwMDAzLDU2ODkyODMuMDAwMDAwMDAzLDIuMDg1MTgyRTcsMjIzMzE2OS4wLDcwNzg1MTYuMCw2MDg4MjYuOTk5OTk5OTk5OCw1ODk0MTIxLjAwMDAwMDAwNCw1MzYzNjc0Ljk5OTk5OTk5NiwxODA4MzQ0LjAwMDAwMDAwMDUsNDkzNzgxLjk5OTk5OTk5OTkKKzksV2VkIDIgRmViIDExLDYyNjkzMS45OTk5OTk5OTk5LDQ0NDcxMDAuMDAwMDAwMDA0LDI2NzMzOTkuOTk5OTk5OTk4LDUxMzA2MzIuMDAwMDAwMDAzLDMuMzg3MTY0OEU3LDQzMDEyNjEuMDAwMDAwMDAxLDM0MDU1NjQuOTk5OTk5OTk5LDU3MjA1OS4wMDAwMDAwMDA1LDc4MzYwMC4wMDAwMDAwMDAyLDEuNTk4MjM3OEU3LDgxODY0NTMuMDAwMDAwMDAyLDEyMTE1MzcuMDAwMDAwMDAwMiwyOTI2MzI0LjAsMTI5Mzk1Mi45OTk5OTk5OTk1LDEuMjQxOTI5MzAwMDAwMDAwNEU3LDYwODA0ODUuMCwyNjg4NDE4LjAwMDAwMDAwMSw0MDQxNzY5LjAwMDAwMDAwMSw0NDY4OTc2LjAwMDAwMDAwMiw2MzQ5MDk3LjAsNTI5NjQ4Ni4wMDAwMDAwMDIsMTI3NDkyMy4wLDk5Mzg0NDQuMDAwMDAwMDA0LDQ5MTk0NzguOTk5OTk5OTk4LDU1OTUyMTEuMDAwMDAwMDAyLDI4NDQ2NTcuOTk5OTk5OTk4LDkwMjE5NC45OTk5OTk5OTk5LDgwNDkzMTMuMCw2NDIyMDAuMDAwMDAwMDAwMiwxNzExMjYzLjAsMTIzNTc4NS45OTk5OTk5OTk4LDg0MTQzNDkuOTk5OTk5OTk4LDE4MTkwNDUuOTk5OTk5OTk5LDE5OTgyNTcuMCwxLjg5NzY0NTdFNywxLjEzNTMxMzk5OTk5OTk5OTRFNywzNDUwNjU0LjAsMzQyMTM5OC45OTk5OTk5OTksMS4yMjgxMDU0RTcsMTA0ODMxOS4wLDQwMTIwMTEuOTk5OTk5OTk5LDc1NDg0NC4wMDAwMDAwMDAyLDU2ODkyODMuMDAwMDAwMDA0LDIuMDg1MTgyRTcsMjIzMzE2OC45OTk5OTk5OTk1LDcwNzg1MTYuMCw2MDg4MjYuOTk5OTk5OTk5OCw1ODk0MTIxLjAwMDAwMDAwMyw1MzYzNjc0Ljk5OTk5OTk5NiwxODA4MzQ0LjAwMDAwMDAwMDIsNDkzNzgyLjAKKzEwLFRodSAzIEZlYiAxMSw2MjY5MzIuMCw0NDQ3MTAwLjAwMDAwMDAwNCwyNjczMzk5Ljk5OTk5OTk5NzcsNTEzMDYzMi4wMDAwMDAwMDMsMy4zODcxNjQ4MDAwMDAwMDFFNyw0MzAxMjYxLjAwMDAwMDAwMiwzNDA1NTY0Ljk5OTk5OTk5OTUsNTcyMDU5LjAwMDAwMDAwMDMsNzgzNTk5Ljk5OTk5OTk5OTksMS41OTgyMzc4MDAwMDAwMDAyRTcsODE4NjQ1My4wMDAwMDAwMDQsMTIxMTUzNy4wMDAwMDAwMDAyLDI5MjYzMjQuMCwxMjkzOTUyLjk5OTk5OTk5OTUsMS4yNDE5MjkzMDAwMDAwMDA0RTcsNjA4MDQ4NS4wLDI2ODg0MTguMDAwMDAwMDAxLDQwNDE3NjkuMDAwMDAwMDAxNCw0NDY4OTc2LjAwMDAwMDAwMiw2MzQ5MDk3LjAsNTI5NjQ4Ni4wMDAwMDAwMDIsMTI3NDkyMi45OTk5OTk5OTk1LDk5Mzg0NDQuMDAwMDAwMDA0LDQ5MTk0NzguOTk5OTk5OTk4LDU1OTUyMTEuMDAwMDAwMDAyLDI4NDQ2NTcuOTk5OTk5OTk4Niw5MDIxOTQuOTk5OTk5OTk5OSw4MDQ5MzEzLjAsNjQyMjAwLjAwMDAwMDAwMDMsMTcxMTI2My4wLDEyMzU3ODUuOTk5OTk5OTk5OCw4NDE0MzQ5Ljk5OTk5OTk5OCwxODE5MDQ1Ljk5OTk5OTk5OTUsMTk5ODI1Ny4wMDAwMDAwMDAyLDEuODk3NjQ1N0U3LDEuMTM1MzEzOTk5OTk5OTk5M0U3LDM0NTA2NTQuMCwzNDIxMzk4Ljk5OTk5OTk5ODYsMS4yMjgxMDU0RTcsMTA0ODMxOS4wLDQwMTIwMTEuOTk5OTk5OTk5LDc1NDg0NC4wMDAwMDAwMDAyLDU2ODkyODMuMDAwMDAwMDAzLDIuMDg1MTgyRTcsMjIzMzE2OC45OTk5OTk5OTk1LDcwNzg1MTYuMCw2MDg4MjYuOTk5OTk5OTk5OCw1ODk0MTIxLjAwMDAwMDAwMiw1MzYzNjc0Ljk5OTk5OTk5NSwxODA4MzQ0LjAwMDAwMDAwMDIsNDkzNzgyLjAwMDAwMDAwMDA2CisxMSxGcmkgNCBGZWIgMTEsNjI2OTMxLjk5OTk5OTk5OTksNDQ0NzEwMC4wMDAwMDAwMDQsMjY3MzM5OS45OTk5OTk5OTcsNTEzMDYzMi4wMDAwMDAwMDQsMy4zODcxNjQ4MDAwMDAwMDFFNyw0MzAxMjYxLjAsMzQwNTU2NC45OTk5OTk5OTksNTcyMDU5LjAwMDAwMDAwMDMsNzgzNjAwLjAsMS41OTgyMzc4MDAwMDAwMDA0RTcsODE4NjQ1My4wMDAwMDAwMDEsMTIxMTUzNy4wMDAwMDAwMDA3LDI5MjYzMjQuMCwxMjkzOTUyLjk5OTk5OTk5OTUsMS4yNDE5MjkzMDAwMDAwMDA0RTcsNjA4MDQ4NC45OTk5OTk5OTksMjY4ODQxOC4wMDAwMDAwMDEsNDA0MTc2OS4wMDAwMDAwMDIsNDQ2ODk3Ni4wMDAwMDAwMDIsNjM0OTA5Ny4wLDUyOTY0ODYuMDAwMDAwMDAzLDEyNzQ5MjIuOTk5OTk5OTk5Myw5OTM4NDQ0LjAwMDAwMDAwNCw0OTE5NDc4Ljk5OTk5OTk5OSw1NTk1MjExLjAwMDAwMDAwMiwyODQ0NjU3Ljk5OTk5OTk5ODYsOTAyMTk0Ljk5OTk5OTk5OTksODA0OTMxMi45OTk5OTk5OTksNjQyMjAwLjAwMDAwMDAwMDIsMTcxMTI2Mi45OTk5OTk5OTk4LDEyMzU3ODUuOTk5OTk5OTk5NSw4NDE0MzQ5Ljk5OTk5OTk5OCwxODE5MDQ1Ljk5OTk5OTk5OTMsMTk5ODI1Ny4wLDEuODk3NjQ1Njk5OTk5OTk5NkU3LDEuMTM1MzEzOTk5OTk5OTk5M0U3LDM0NTA2NTQuMCwzNDIxMzk4Ljk5OTk5OTk5OCwxLjIyODEwNTRFNywxMDQ4MzE5LjAwMDAwMDAwMDEsNDAxMjAxMS45OTk5OTk5OTksNzU0ODQ0LjAsNTY4OTI4My4wMDAwMDAwMDEsMi4wODUxODIwMDAwMDAwMDA3RTcsMjIzMzE2OC45OTk5OTk5OTk1LDcwNzg1MTYuMCw2MDg4MjYuOTk5OTk5OTk5Nyw1ODk0MTIxLjAwMDAwMDAwMiw1MzYzNjc0Ljk5OTk5OTk5NSwxODA4MzQ0LjAsNDkzNzgyLjAwMDAwMDAwMDA2CisxMixTYXQgNSBGZWIgMTEsNjI2OTMyLjAsNDQ0NzEwMC4wMDAwMDAwMDYsMjY3MzM5OS45OTk5OTk5OTcsNTEzMDYzMi4wMDAwMDAwMDMsMy4zODcxNjQ4MDAwMDAwMDFFNyw0MzAxMjYxLjAwMDAwMDAwMSwzNDA1NTY0Ljk5OTk5OTk5OSw1NzIwNTkuMDAwMDAwMDAwMyw3ODM2MDAuMCwxLjU5ODIzNzhFNyw4MTg2NDUzLjAwMDAwMDAwMSwxMjExNTM3LjAwMDAwMDAwMDcsMjkyNjMyNC4wLDEyOTM5NTMuMCwxLjI0MTkyOTMwMDAwMDAwMDRFNyw2MDgwNDg0Ljk5OTk5OTk5OSwyNjg4NDE4LjAwMDAwMDAwMTQsNDA0MTc2OS4wMDAwMDAwMDIzLDQ0Njg5NzYuMDAwMDAwMDAxLDYzNDkwOTYuOTk5OTk5OTk5LDUyOTY0ODYuMDAwMDAwMDAyLDEyNzQ5MjIuOTk5OTk5OTk5LDk5Mzg0NDQuMDAwMDAwMDAyLDQ5MTk0NzguOTk5OTk5OTk4LDU1OTUyMTEuMDAwMDAwMDAyLDI4NDQ2NTcuOTk5OTk5OTk3Nyw5MDIxOTQuOTk5OTk5OTk5OCw4MDQ5MzEyLjk5OTk5OTk5Nyw2NDIyMDAuMDAwMDAwMDAwMywxNzExMjYyLjk5OTk5OTk5OTUsMTIzNTc4NS45OTk5OTk5OTk4LDg0MTQzNDkuOTk5OTk5OTk2LDE4MTkwNDUuOTk5OTk5OTk5NSwxOTk4MjU2Ljk5OTk5OTk5OTgsMS44OTc2NDU2OTk5OTk5OTk2RTcsMS4xMzUzMTM5OTk5OTk5OTlFNywzNDUwNjUzLjk5OTk5OTk5OTUsMzQyMTM5OC45OTk5OTk5OTksMS4yMjgxMDU0RTcsMTA0ODMxOS4wLDQwMTIwMTIuMCw3NTQ4NDQuMCw1Njg5MjgzLjAwMDAwMDAwMSwyLjA4NTE4MjAwMDAwMDAwMDdFNywyMjMzMTY5LjAsNzA3ODUxNi4wLDYwODgyNi45OTk5OTk5OTk3LDU4OTQxMjEuMDAwMDAwMDAyLDUzNjM2NzQuOTk5OTk5OTk1LDE4MDgzNDMuOTk5OTk5OTk5NSw0OTM3ODIuMAorMTMsU3VuIDYgRmViIDExLDYyNjkzMi4wLDQ0NDcxMDAuMDAwMDAwMDA2LDI2NzMzOTkuOTk5OTk5OTk3LDUxMzA2MzIuMDAwMDAwMDAyLDMuMzg3MTY0ODAwMDAwMDAxNUU3LDQzMDEyNjAuOTk5OTk5OTk5LDM0MDU1NjQuOTk5OTk5OTk4Niw1NzIwNTkuMDAwMDAwMDAwNSw3ODM2MDAuMDAwMDAwMDAwMSwxLjU5ODIzNzc5OTk5OTk5OTZFNyw4MTg2NDUzLjAsMTIxMTUzNy4wMDAwMDAwMDA3LDI5MjYzMjQuMDAwMDAwMDAwNSwxMjkzOTUzLjAsMS4yNDE5MjkzMDAwMDAwMDAyRTcsNjA4MDQ4NC45OTk5OTk5OTksMjY4ODQxOC4wMDAwMDAwMDEsNDA0MTc2OS4wMDAwMDAwMDMsNDQ2ODk3Ni4wMDAwMDAwMDIsNjM0OTA5Ny4wLDUyOTY0ODYuMDAwMDAwMDAzLDEyNzQ5MjIuOTk5OTk5OTk5LDk5Mzg0NDQuMCw0OTE5NDc4Ljk5OTk5OTk5Nyw1NTk1MjExLjAwMDAwMDAwMSwyODQ0NjU3Ljk5OTk5OTk5OCw5MDIxOTQuOTk5OTk5OTk5NSw4MDQ5MzEyLjk5OTk5OTk5OCw2NDIyMDAuMDAwMDAwMDAwMywxNzExMjYyLjk5OTk5OTk5OTgsMTIzNTc4Ni4wLDg0MTQzNDkuOTk5OTk5OTk4LDE4MTkwNDUuOTk5OTk5OTk5LDE5OTgyNTcuMCwxLjg5NzY0NTY5OTk5OTk5OTZFNywxLjEzNTMxMzk5OTk5OTk5OTNFNywzNDUwNjU0LjAwMDAwMDAwMDUsMzQyMTM5OS4wLDEuMjI4MTA1NDAwMDAwMDAwMkU3LDEwNDgzMTkuMDAwMDAwMDAwMSw0MDEyMDEyLjAsNzU0ODQ0LjAsNTY4OTI4My4wMDAwMDAwMDIsMi4wODUxODIwMDAwMDAwMDA3RTcsMjIzMzE2OS4wLDcwNzg1MTYuMCw2MDg4MjYuOTk5OTk5OTk5Nyw1ODk0MTIxLjAwMDAwMDAwMiw1MzYzNjc0Ljk5OTk5OTk5NCwxODA4MzQzLjk5OTk5OTk5OTgsNDkzNzgyLjAKKzE0LE1vbiA3IEZlYiAxMSw2MjY5MzEuOTk5OTk5OTk5OSw0NDQ3MTAwLjAwMDAwMDAwNSwyNjczMzk5Ljk5OTk5OTk5Nyw1MTMwNjMyLjAwMDAwMDAwMiwzLjM4NzE2NDgwMDAwMDAwMUU3LDQzMDEyNjEuMDAwMDAwMDAxLDM0MDU1NjQuOTk5OTk5OTk5LDU3MjA1OS4wMDAwMDAwMDA1LDc4MzYwMC4wLDEuNTk4MjM3Nzk5OTk5OTk5M0U3LDgxODY0NTMuMDAwMDAwMDAxLDEyMTE1MzcuMDAwMDAwMDAwNywyOTI2MzI0LjAwMDAwMDAwMSwxMjkzOTUzLjAsMS4yNDE5MjkzMDAwMDAwMDA3RTcsNjA4MDQ4NC45OTk5OTk5OTgsMjY4ODQxOC4wMDAwMDAwMDEsNDA0MTc2OS4wMDAwMDAwMDMsNDQ2ODk3Ni4wMDAwMDAwMDIsNjM0OTA5Ni45OTk5OTk5OTksNTI5NjQ4Ni4wMDAwMDAwMDIsMTI3NDkyMi45OTk5OTk5OTg2LDk5Mzg0NDMuOTk5OTk5OTk4LDQ5MTk0NzguOTk5OTk5OTk2LDU1OTUyMTEuMDAwMDAwMDAxLDI4NDQ2NTcuOTk5OTk5OTk3Nyw5MDIxOTQuOTk5OTk5OTk5Nyw4MDQ5MzEyLjk5OTk5OTk5OSw2NDIyMDAuMDAwMDAwMDAwMywxNzExMjYyLjk5OTk5OTk5OTgsMTIzNTc4Ni4wMDAwMDAwMDAyLDg0MTQzNTAuMCwxODE5MDQ1Ljk5OTk5OTk5OSwxOTk4MjU3LjAsMS44OTc2NDU2OTk5OTk5OTk2RTcsMS4xMzUzMTM5OTk5OTk5OTlFNywzNDUwNjU0LjAsMzQyMTM5OC45OTk5OTk5OTksMS4yMjgxMDU0MDAwMDAwMDAyRTcsMTA0ODMxOS4wMDAwMDAwMDAyLDQwMTIwMTIuMCw3NTQ4NDMuOTk5OTk5OTk5OSw1Njg5MjgzLjAwMDAwMDAwMSwyLjA4NTE4MjAwMDAwMDAwMUU3LDIyMzMxNjkuMCw3MDc4NTE2LjAsNjA4ODI2Ljk5OTk5OTk5OTUsNTg5NDEyMS4wMDAwMDAwMDIsNTM2MzY3NC45OTk5OTk5OTQsMTgwODM0NC4wLDQ5Mzc4Mi4wCisxNSxUdWUgOCBGZWIgMTEsNjI2OTMyLjAsNDQ0NzEwMC4wMDAwMDAwMDQsMjY3MzM5OS45OTk5OTk5OTc3LDUxMzA2MzIuMDAwMDAwMDAzLDMuMzg3MTY0OEU3LDQzMDEyNjEuMDAwMDAwMDAxLDM0MDU1NjQuOTk5OTk5OTk4Niw1NzIwNTkuMDAwMDAwMDAwNSw3ODM2MDAuMCwxLjU5ODIzNzc5OTk5OTk5OTRFNyw4MTg2NDUzLjAwMDAwMDAwMiwxMjExNTM3LjAwMDAwMDAwMDcsMjkyNjMyNC4wMDAwMDAwMDA1LDEyOTM5NTMuMDAwMDAwMDAwMiwxLjI0MTkyOTMwMDAwMDAwMUU3LDYwODA0ODQuOTk5OTk5OTk4LDI2ODg0MTguMDAwMDAwMDAwNSw0MDQxNzY5LjAwMDAwMDAwMzcsNDQ2ODk3Ni4wMDAwMDAwMDEsNjM0OTA5Ni45OTk5OTk5OTksNTI5NjQ4Ni4wMDAwMDAwMDIsMTI3NDkyMi45OTk5OTk5OTg2LDk5Mzg0NDMuOTk5OTk5OTk4LDQ5MTk0NzguOTk5OTk5OTk3LDU1OTUyMTEuMDAwMDAwMDAxLDI4NDQ2NTcuOTk5OTk5OTk3Nyw5MDIxOTQuOTk5OTk5OTk5NSw4MDQ5MzEyLjk5OTk5OTk5OCw2NDIyMDAuMDAwMDAwMDAwNSwxNzExMjYzLjAsMTIzNTc4Ni4wMDAwMDAwMDA1LDg0MTQzNTAuMCwxODE5MDQ1Ljk5OTk5OTk5ODYsMTk5ODI1Ny4wLDEuODk3NjQ1Njk5OTk5OTk5NkU3LDEuMTM1MzEzOTk5OTk5OTk5M0U3LDM0NTA2NTQuMCwzNDIxMzk4Ljk5OTk5OTk5ODYsMS4yMjgxMDU0MDAwMDAwMDAyRTcsMTA0ODMxOS4wMDAwMDAwMDAyLDQwMTIwMTEuOTk5OTk5OTk5LDc1NDg0My45OTk5OTk5OTk5LDU2ODkyODIuOTk5OTk5OTk5LDIuMDg1MTgyMDAwMDAwMDAxRTcsMjIzMzE2OS4wLDcwNzg1MTYuMDAwMDAwMDAxLDYwODgyNi45OTk5OTk5OTk3LDU4OTQxMjEuMDAwMDAwMDAxLDUzNjM2NzQuOTk5OTk5OTk2LDE4MDgzNDQuMCw0OTM3ODEuOTk5OTk5OTk5OTQKKzE2LFdlZCA5IEZlYiAxMSw2MjY5MzIuMCw0NDQ3MTAwLjAwMDAwMDAwMywyNjczMzk5Ljk5OTk5OTk5NzcsNTEzMDYzMi4wMDAwMDAwMDMsMy4zODcxNjQ4RTcsNDMwMTI2MS4wMDAwMDAwMDIsMzQwNTU2NC45OTk5OTk5OTg2LDU3MjA1OS4wMDAwMDAwMDAzLDc4MzYwMC4wLDEuNTk4MjM3Nzk5OTk5OTk5M0U3LDgxODY0NTMuMDAwMDAwMDAxLDEyMTE1MzcuMDAwMDAwMDAwNSwyOTI2MzI0LjAwMDAwMDAwMDUsMTI5Mzk1Mi45OTk5OTk5OTk4LDEuMjQxOTI5MzAwMDAwMDAxRTcsNjA4MDQ4NC45OTk5OTk5OTcsMjY4ODQxOC4wLDQwNDE3NjkuMDAwMDAwMDA0LDQ0Njg5NzYuMDAwMDAwMDAyLDYzNDkwOTYuOTk5OTk5OTk5LDUyOTY0ODYuMDAwMDAwMDAzLDEyNzQ5MjIuOTk5OTk5OTk4Niw5OTM4NDQzLjk5OTk5OTk5OCw0OTE5NDc4Ljk5OTk5OTk5Nyw1NTk1MjExLjAwMDAwMDAwMywyODQ0NjU3Ljk5OTk5OTk5Nyw5MDIxOTQuOTk5OTk5OTk5Nyw4MDQ5MzEyLjk5OTk5OTk5OCw2NDIyMDAuMDAwMDAwMDAwNSwxNzExMjYzLjAsMTIzNTc4Ni4wMDAwMDAwMDAyLDg0MTQzNTAuMCwxODE5MDQ1Ljk5OTk5OTk5ODgsMTk5ODI1Ni45OTk5OTk5OTk4LDEuODk3NjQ1Njk5OTk5OTk5M0U3LDEuMTM1MzEzOTk5OTk5OTk5RTcsMzQ1MDY1NC4wLDM0MjEzOTguOTk5OTk5OTk4LDEuMjI4MTA1NDAwMDAwMDAwNEU3LDEwNDgzMTkuMDAwMDAwMDAwMSw0MDEyMDExLjk5OTk5OTk5OTUsNzU0ODQ0LjAsNTY4OTI4Mi45OTk5OTk5OTgsMi4wODUxODIwMDAwMDAwMDA3RTcsMjIzMzE2OS4wLDcwNzg1MTYuMDAwMDAwMDAyLDYwODgyNi45OTk5OTk5OTk1LDU4OTQxMjEuMDAwMDAwMDAxLDUzNjM2NzQuOTk5OTk5OTk2LDE4MDgzNDQuMDAwMDAwMDAwMiw0OTM3ODIuMAorMTcsVGh1IDEwIEZlYiAxMSw2MjY5MzIuMDAwMDAwMDAwMSw0NDQ3MTAwLjAwMDAwMDAwNCwyNjczMzk5Ljk5OTk5OTk5OCw1MTMwNjMyLjAwMDAwMDAwMiwzLjM4NzE2NDhFNyw0MzAxMjYxLjAwMDAwMDAwMSwzNDA1NTY0Ljk5OTk5OTk5OCw1NzIwNTkuMDAwMDAwMDAwMyw3ODM1OTkuOTk5OTk5OTk5OSwxLjU5ODIzNzc5OTk5OTk5OTNFNyw4MTg2NDUzLjAwMDAwMDAwMSwxMjExNTM3LjAwMDAwMDAwMDUsMjkyNjMyNC4wMDAwMDAwMDA1LDEyOTM5NTIuOTk5OTk5OTk5OCwxLjI0MTkyOTMwMDAwMDAwMTFFNyw2MDgwNDg0Ljk5OTk5OTk5OCwyNjg4NDE4LjAsNDA0MTc2OS4wMDAwMDAwMDM3LDQ0Njg5NzYuMDAwMDAwMDAxLDYzNDkwOTYuOTk5OTk5OTk5LDUyOTY0ODYuMDAwMDAwMDAzLDEyNzQ5MjIuOTk5OTk5OTk4Niw5OTM4NDQzLjk5OTk5OTk5OCw0OTE5NDc4Ljk5OTk5OTk5OCw1NTk1MjExLjAwMDAwMDAwNCwyODQ0NjU3Ljk5OTk5OTk5NjcsOTAyMTk0Ljk5OTk5OTk5OTgsODA0OTMxMi45OTk5OTk5OTcsNjQyMjAwLjAwMDAwMDAwMDUsMTcxMTI2Mi45OTk5OTk5OTk4LDEyMzU3ODYuMDAwMDAwMDAwNSw4NDE0MzUwLjAsMTgxOTA0NS45OTk5OTk5OTksMTk5ODI1Ni45OTk5OTk5OTk4LDEuODk3NjQ1Njk5OTk5OTk5M0U3LDEuMTM1MzEzOTk5OTk5OTk4OUU3LDM0NTA2NTQuMDAwMDAwMDAwNSwzNDIxMzk4Ljk5OTk5OTk5OCwxLjIyODEwNTQwMDAwMDAwMDdFNywxMDQ4MzE5LjAwMDAwMDAwMDIsNDAxMjAxMS45OTk5OTk5OTk1LDc1NDg0NC4wMDAwMDAwMDAxLDU2ODkyODIuOTk5OTk5OTk4LDIuMDg1MTgyMDAwMDAwMDAwN0U3LDIyMzMxNjkuMCw3MDc4NTE2LjAwMDAwMDAwMyw2MDg4MjYuOTk5OTk5OTk5Nyw1ODk0MTIxLjAwMDAwMDAwMiw1MzYzNjc0Ljk5OTk5OTk5NiwxODA4MzQ0LjAsNDkzNzgyLjAwMDAwMDAwMDA2CisxOCxGcmkgMTEgRmViIDExLDYyNjkzMi4wMDAwMDAwMDAyLDQ0NDcxMDAuMDAwMDAwMDA0LDI2NzMzOTkuOTk5OTk5OTk3Nyw1MTMwNjMyLjAwMDAwMDAwMywzLjM4NzE2NDhFNyw0MzAxMjYxLjAwMDAwMDAwMiwzNDA1NTY0Ljk5OTk5OTk5NzcsNTcyMDU5LjAwMDAwMDAwMDIsNzgzNjAwLjAsMS41OTgyMzc3OTk5OTk5OTkzRTcsODE4NjQ1My4wMDAwMDAwMDEsMTIxMTUzNy4wMDAwMDAwMDA3LDI5MjYzMjQuMDAwMDAwMDAxLDEyOTM5NTMuMCwxLjI0MTkyOTMwMDAwMDAwMUU3LDYwODA0ODUuMCwyNjg4NDE4LjAsNDA0MTc2OS4wMDAwMDAwMDMsNDQ2ODk3Ni4wLDYzNDkwOTcuMCw1Mjk2NDg2LjAwMDAwMDAwNCwxMjc0OTIyLjk5OTk5OTk5OSw5OTM4NDQzLjk5OTk5OTk5OCw0OTE5NDc4Ljk5OTk5OTk5Nyw1NTk1MjExLjAwMDAwMDAwMywyODQ0NjU3Ljk5OTk5OTk5NjcsOTAyMTk0Ljk5OTk5OTk5OTgsODA0OTMxMi45OTk5OTk5OTgsNjQyMjAwLjAwMDAwMDAwMDUsMTcxMTI2My4wLDEyMzU3ODYuMDAwMDAwMDAwMiw4NDE0MzUwLjAwMDAwMDAwMiwxODE5MDQ1Ljk5OTk5OTk5ODYsMTk5ODI1Ni45OTk5OTk5OTk4LDEuODk3NjQ1Njk5OTk5OTk5M0U3LDEuMTM1MzEzOTk5OTk5OTk5RTcsMzQ1MDY1NC4wLDM0MjEzOTguOTk5OTk5OTk3NywxLjIyODEwNTQwMDAwMDAwMUU3LDEwNDgzMTkuMDAwMDAwMDAwMiw0MDEyMDEyLjAsNzU0ODQ0LjAsNTY4OTI4Mi45OTk5OTk5OTgsMi4wODUxODIwMDAwMDAwMDA0RTcsMjIzMzE2OC45OTk5OTk5OTk1LDcwNzg1MTYuMDAwMDAwMDA0LDYwODgyNi45OTk5OTk5OTk4LDU4OTQxMjEuMDAwMDAwMDAyLDUzNjM2NzQuOTk5OTk5OTk2LDE4MDgzNDQuMCw0OTM3ODIuMDAwMDAwMDAwMDYKKzE5LFNhdCAxMiBGZWIgMTEsNjI2OTMyLjAwMDAwMDAwMDEsNDQ0NzEwMC4wMDAwMDAwMDQsMjY3MzM5OS45OTk5OTk5OTgsNTEzMDYzMi4wMDAwMDAwMDQsMy4zODcxNjQ4RTcsNDMwMTI2MS4wMDAwMDAwMDEsMzQwNTU2NC45OTk5OTk5OTc3LDU3MjA1OS4wMDAwMDAwMDAyLDc4MzU5OS45OTk5OTk5OTk5LDEuNTk4MjM3Nzk5OTk5OTk5RTcsODE4NjQ1My4wMDAwMDAwMDIsMTIxMTUzNy4wMDAwMDAwMDA3LDI5MjYzMjQuMDAwMDAwMDAxLDEyOTM5NTIuOTk5OTk5OTk5OCwxLjI0MTkyOTMwMDAwMDAwMTFFNyw2MDgwNDg1LjAsMjY4ODQxOC4wLDQwNDE3NjkuMDAwMDAwMDAzMyw0NDY4OTc2LjAwMDAwMDAwMSw2MzQ5MDk3LjAsNTI5NjQ4Ni4wMDAwMDAwMDMsMTI3NDkyMi45OTk5OTk5OTksOTkzODQ0My45OTk5OTk5OTgsNDkxOTQ3OC45OTk5OTk5OTYsNTU5NTIxMS4wMDAwMDAwMDMsMjg0NDY1Ny45OTk5OTk5OTcsOTAyMTk0Ljk5OTk5OTk5OTgsODA0OTMxMi45OTk5OTk5OTgsNjQyMjAwLjAwMDAwMDAwMDUsMTcxMTI2My4wLDEyMzU3ODYuMDAwMDAwMDAwMiw4NDE0MzUwLjAwMDAwMDAwMiwxODE5MDQ1Ljk5OTk5OTk5ODgsMTk5ODI1Ni45OTk5OTk5OTk4LDEuODk3NjQ1Njk5OTk5OTk5RTcsMS4xMzUzMTM5OTk5OTk5OTg5RTcsMzQ1MDY1My45OTk5OTk5OTk1LDM0MjEzOTguOTk5OTk5OTk3NywxLjIyODEwNTQwMDAwMDAwMUU3LDEwNDgzMTkuMDAwMDAwMDAwMiw0MDEyMDExLjk5OTk5OTk5OTUsNzU0ODQ0LjAsNTY4OTI4Mi45OTk5OTk5OTgsMi4wODUxODIwMDAwMDAwMDA0RTcsMjIzMzE2OC45OTk5OTk5OTk1LDcwNzg1MTYuMDAwMDAwMDA0LDYwODgyNi45OTk5OTk5OTk4LDU4OTQxMjEuMDAwMDAwMDAyLDUzNjM2NzQuOTk5OTk5OTk2LDE4MDgzNDMuOTk5OTk5OTk5OCw0OTM3ODIuMAorMjAsU3VuIDEzIEZlYiAxMSw2MjY5MzIuMDAwMDAwMDAwMSw0NDQ3MTAwLjAwMDAwMDAwNSwyNjczMzk5Ljk5OTk5OTk5ODYsNTEzMDYzMi4wMDAwMDAwMDQsMy4zODcxNjQ4RTcsNDMwMTI2MS4wMDAwMDAwMDIsMzQwNTU2NC45OTk5OTk5OTcsNTcyMDU5LjAwMDAwMDAwMDIsNzgzNTk5Ljk5OTk5OTk5OTksMS41OTgyMzc3OTk5OTk5OTg5RTcsODE4NjQ1My4wMDAwMDAwMDIsMTIxMTUzNy4wMDAwMDAwMDA3LDI5MjYzMjQuMDAwMDAwMDAxLDEyOTM5NTMuMCwxLjI0MTkyOTMwMDAwMDAwMTFFNyw2MDgwNDg1LjAsMjY4ODQxOC4wLDQwNDE3NjkuMDAwMDAwMDAzMyw0NDY4OTc2LjAwMDAwMDAwMSw2MzQ5MDk2Ljk5OTk5OTk5OSw1Mjk2NDg2LjAwMDAwMDAwMywxMjc0OTIyLjk5OTk5OTk5ODgsOTkzODQ0My45OTk5OTk5OTgsNDkxOTQ3OC45OTk5OTk5OTYsNTU5NTIxMS4wMDAwMDAwMDIsMjg0NDY1Ny45OTk5OTk5OTY3LDkwMjE5NC45OTk5OTk5OTk4LDgwNDkzMTIuOTk5OTk5OTk4LDY0MjIwMC4wMDAwMDAwMDA1LDE3MTEyNjMuMCwxMjM1Nzg2LjAwMDAwMDAwMDIsODQxNDM1MC4wMDAwMDAwMDIsMTgxOTA0NS45OTk5OTk5OTg4LDE5OTgyNTYuOTk5OTk5OTk5OCwxLjg5NzY0NTY5OTk5OTk5OUU3LDEuMTM1MzEzOTk5OTk5OTk4N0U3LDM0NTA2NTQuMDAwMDAwMDAwNSwzNDIxMzk4Ljk5OTk5OTk5NzcsMS4yMjgxMDU0MDAwMDAwMDFFNywxMDQ4MzE5LjAwMDAwMDAwMDMsNDAxMjAxMS45OTk5OTk5OTk1LDc1NDg0NC4wMDAwMDAwMDAxLDU2ODkyODIuOTk5OTk5OTk3LDIuMDg1MTgyMDAwMDAwMDAwN0U3LDIyMzMxNjguOTk5OTk5OTk5NSw3MDc4NTE2LjAwMDAwMDAwNCw2MDg4MjYuOTk5OTk5OTk5OCw1ODk0MTIxLjAsNTM2MzY3NC45OTk5OTk5OTYsMTgwODM0NC4wLDQ5Mzc4MS45OTk5OTk5OTk5NAorMjEsTW9uIDE0IEZlYiAxMSw2MjY5MzIuMDAwMDAwMDAwMiw0NDQ3MTAwLjAwMDAwMDAwNSwyNjczMzk5Ljk5OTk5OTk5ODYsNTEzMDYzMi4wMDAwMDAwMDMsMy4zODcxNjQ4RTcsNDMwMTI2MS4wMDAwMDAwMDEsMzQwNTU2NC45OTk5OTk5OTcsNTcyMDU5LjAwMDAwMDAwMDIsNzgzNTk5Ljk5OTk5OTk5OTgsMS41OTgyMzc3OTk5OTk5OTlFNyw4MTg2NDUzLjAwMDAwMDAwMiwxMjExNTM3LjAwMDAwMDAwMSwyOTI2MzI0LjAwMDAwMDAwMSwxMjkzOTUyLjk5OTk5OTk5OTUsMS4yNDE5MjkzMDAwMDAwMDExRTcsNjA4MDQ4NC45OTk5OTk5OTgsMjY4ODQxOC4wLDQwNDE3NjkuMDAwMDAwMDAzMyw0NDY4OTc2LjAsNjM0OTA5Ni45OTk5OTk5OTksNTI5NjQ4Ni4wMDAwMDAwMDMsMTI3NDkyMi45OTk5OTk5OTg2LDk5Mzg0NDMuOTk5OTk5OTk4LDQ5MTk0NzguOTk5OTk5OTk2LDU1OTUyMTEuMDAwMDAwMDAyLDI4NDQ2NTcuOTk5OTk5OTk2Nyw5MDIxOTQuOTk5OTk5OTk5OCw4MDQ5MzEyLjk5OTk5OTk5Nyw2NDIyMDAuMDAwMDAwMDAwNSwxNzExMjYzLjAsMTIzNTc4Ni4wMDAwMDAwMDA1LDg0MTQzNTAuMDAwMDAwMDAyLDE4MTkwNDUuOTk5OTk5OTk4OCwxOTk4MjU2Ljk5OTk5OTk5OTgsMS44OTc2NDU2OTk5OTk5OTlFNywxLjEzNTMxMzk5OTk5OTk5ODlFNywzNDUwNjU0LjAsMzQyMTM5OC45OTk5OTk5OTgsMS4yMjgxMDU0MDAwMDAwMDA3RTcsMTA0ODMxOS4wMDAwMDAwMDAxLDQwMTIwMTEuOTk5OTk5OTk5NSw3NTQ4NDQuMCw1Njg5MjgyLjk5OTk5OTk5NywyLjA4NTE4MjAwMDAwMDAwMDdFNywyMjMzMTY4Ljk5OTk5OTk5OTUsNzA3ODUxNi4wMDAwMDAwMDQsNjA4ODI2Ljk5OTk5OTk5OTcsNTg5NDEyMS4wMDAwMDAwMDEsNTM2MzY3NC45OTk5OTk5OTUsMTgwODM0My45OTk5OTk5OTk1LDQ5Mzc4MS45OTk5OTk5OTk5NAorMjIsVHVlIDE1IEZlYiAxMSw2MjY5MzIuMDAwMDAwMDAwMiw0NDQ3MTAwLjAwMDAwMDAwNSwyNjczMzk5Ljk5OTk5OTk5ODYsNTEzMDYzMi4wMDAwMDAwMDMsMy4zODcxNjQ4MDAwMDAwMDFFNyw0MzAxMjYxLjAwMDAwMDAwMSwzNDA1NTY0Ljk5OTk5OTk5NjcsNTcyMDU5LjAwMDAwMDAwMDEsNzgzNTk5Ljk5OTk5OTk5OTgsMS41OTgyMzc3OTk5OTk5OTlFNyw4MTg2NDUzLjAwMDAwMDAwMiwxMjExNTM3LjAwMDAwMDAwMSwyOTI2MzI0LjAwMDAwMDAwMSwxMjkzOTUyLjk5OTk5OTk5OTgsMS4yNDE5MjkzMDAwMDAwMDFFNyw2MDgwNDg0Ljk5OTk5OTk5OSwyNjg4NDE3Ljk5OTk5OTk5OTUsNDA0MTc2OS4wMDAwMDAwMDMzLDQ0Njg5NzYuMDAwMDAwMDAxLDYzNDkwOTYuOTk5OTk5OTk5LDUyOTY0ODYuMDAwMDAwMDAzLDEyNzQ5MjIuOTk5OTk5OTk4OCw5OTM4NDQzLjk5OTk5OTk5OCw0OTE5NDc4Ljk5OTk5OTk5Niw1NTk1MjExLjAwMDAwMDAwMiwyODQ0NjU3Ljk5OTk5OTk5NjcsOTAyMTk0Ljk5OTk5OTk5OTgsODA0OTMxMi45OTk5OTk5OTcsNjQyMjAwLjAwMDAwMDAwMDYsMTcxMTI2My4wLDEyMzU3ODYuMDAwMDAwMDAwMiw4NDE0MzUwLjAwMDAwMDAwMiwxODE5MDQ1Ljk5OTk5OTk5ODgsMTk5ODI1Ni45OTk5OTk5OTk4LDEuODk3NjQ1Njk5OTk5OTk5RTcsMS4xMzUzMTM5OTk5OTk5OTg5RTcsMzQ1MDY1NC4wLDM0MjEzOTguOTk5OTk5OTk4LDEuMjI4MTA1NDAwMDAwMDAwNkU3LDEwNDgzMTkuMDAwMDAwMDAwMiw0MDEyMDExLjk5OTk5OTk5OTUsNzU0ODQzLjk5OTk5OTk5OTksNTY4OTI4Mi45OTk5OTk5OTgsMi4wODUxODIwMDAwMDAwMDA3RTcsMjIzMzE2OC45OTk5OTk5OTk1LDcwNzg1MTYuMDAwMDAwMDAzLDYwODgyNi45OTk5OTk5OTk3LDU4OTQxMjEuMDAwMDAwMDAxLDUzNjM2NzQuOTk5OTk5OTk2LDE4MDgzNDMuOTk5OTk5OTk5OCw0OTM3ODEuOTk5OTk5OTk5OQorMjMsV2VkIDE2IEZlYiAxMSw2MjY5MzIuMDAwMDAwMDAwMiw0NDQ3MTAwLjAwMDAwMDAwNCwyNjczMzk5Ljk5OTk5OTk5OSw1MTMwNjMyLjAwMDAwMDAwMywzLjM4NzE2NDgwMDAwMDAwMUU3LDQzMDEyNjEuMCwzNDA1NTY0Ljk5OTk5OTk5NjcsNTcyMDU5LjAwMDAwMDAwMDIsNzgzNTk5Ljk5OTk5OTk5OTcsMS41OTgyMzc3OTk5OTk5OTlFNyw4MTg2NDUzLjAwMDAwMDAwMiwxMjExNTM3LjAwMDAwMDAwMSwyOTI2MzI0LjAwMDAwMDAwMSwxMjkzOTUyLjk5OTk5OTk5OTgsMS4yNDE5MjkzMDAwMDAwMDExRTcsNjA4MDQ4NS4wLDI2ODg0MTcuOTk5OTk5OTk5NSw0MDQxNzY5LjAwMDAwMDAwMzcsNDQ2ODk3Ni4wMDAwMDAwMDEsNjM0OTA5Ni45OTk5OTk5OTksNTI5NjQ4Ni4wMDAwMDAwMDMsMTI3NDkyMi45OTk5OTk5OTg4LDk5Mzg0NDMuOTk5OTk5OTk4LDQ5MTk0NzguOTk5OTk5OTk2LDU1OTUyMTEuMDAwMDAwMDAyLDI4NDQ2NTcuOTk5OTk5OTk2Nyw5MDIxOTQuOTk5OTk5OTk5OCw4MDQ5MzEyLjk5OTk5OTk5Nyw2NDIyMDAuMDAwMDAwMDAwNiwxNzExMjYzLjAsMTIzNTc4Ni4wMDAwMDAwMDA1LDg0MTQzNTAuMDAwMDAwMDAyLDE4MTkwNDUuOTk5OTk5OTk4OCwxOTk4MjU2Ljk5OTk5OTk5OTgsMS44OTc2NDU2OTk5OTk5OTkzRTcsMS4xMzUzMTM5OTk5OTk5OTg5RTcsMzQ1MDY1NC4wLDM0MjEzOTguOTk5OTk5OTk4LDEuMjI4MTA1NDAwMDAwMDAxRTcsMTA0ODMxOS4wMDAwMDAwMDAxLDQwMTIwMTEuOTk5OTk5OTk5NSw3NTQ4NDQuMCw1Njg5MjgyLjk5OTk5OTk5OSwyLjA4NTE4MjAwMDAwMDAwMDdFNywyMjMzMTY4Ljk5OTk5OTk5OTUsNzA3ODUxNi4wMDAwMDAwMDMsNjA4ODI2Ljk5OTk5OTk5OTgsNTg5NDEyMS4wMDAwMDAwMDEsNTM2MzY3NC45OTk5OTk5OTYsMTgwODM0My45OTk5OTk5OTk1LDQ5Mzc4MS45OTk5OTk5OTk5NAorMjQsVGh1IDE3IEZlYiAxMSw2MjY5MzIuMDAwMDAwMDAwMiw0NDQ3MTAwLjAwMDAwMDAwNCwyNjczMzk5Ljk5OTk5OTk5ODYsNTEzMDYzMi4wMDAwMDAwMDIsMy4zODcxNjQ4MDAwMDAwMDFFNyw0MzAxMjYxLjAwMDAwMDAwMSwzNDA1NTY0Ljk5OTk5OTk5NjcsNTcyMDU5LjAwMDAwMDAwMDEsNzgzNTk5Ljk5OTk5OTk5OTgsMS41OTgyMzc3OTk5OTk5OTg5RTcsODE4NjQ1My4wMDAwMDAwMDMsMTIxMTUzNy4wMDAwMDAwMDEyLDI5MjYzMjQuMDAwMDAwMDAxLDEyOTM5NTIuOTk5OTk5OTk5OCwxLjI0MTkyOTMwMDAwMDAwMTFFNyw2MDgwNDg0Ljk5OTk5OTk5OSwyNjg4NDE3Ljk5OTk5OTk5OTUsNDA0MTc2OS4wMDAwMDAwMDM3LDQ0Njg5NzYuMDAwMDAwMDAxLDYzNDkwOTYuOTk5OTk5OTk4LDUyOTY0ODYuMDAwMDAwMDAyLDEyNzQ5MjIuOTk5OTk5OTk4Niw5OTM4NDQzLjk5OTk5OTk5OCw0OTE5NDc4Ljk5OTk5OTk5Niw1NTk1MjExLjAwMDAwMDAwMywyODQ0NjU3Ljk5OTk5OTk5NjcsOTAyMTk0Ljk5OTk5OTk5OTgsODA0OTMxMi45OTk5OTk5OTYsNjQyMjAwLjAwMDAwMDAwMDYsMTcxMTI2My4wMDAwMDAwMDAyLDEyMzU3ODYuMDAwMDAwMDAwNSw4NDE0MzUwLjAwMDAwMDAwMiwxODE5MDQ1Ljk5OTk5OTk5OSwxOTk4MjU2Ljk5OTk5OTk5OTUsMS44OTc2NDU2OTk5OTk5OTlFNywxLjEzNTMxMzk5OTk5OTk5ODlFNywzNDUwNjU0LjAsMzQyMTM5OC45OTk5OTk5OTgsMS4yMjgxMDU0MDAwMDAwMDA3RTcsMTA0ODMxOS4wMDAwMDAwMDAyLDQwMTIwMTEuOTk5OTk5OTk5LDc1NDg0NC4wLDU2ODkyODIuOTk5OTk5OTk4LDIuMDg1MTgyMDAwMDAwMDAxRTcsMjIzMzE2OC45OTk5OTk5OTk1LDcwNzg1MTYuMDAwMDAwMDA0LDYwODgyNi45OTk5OTk5OTk4LDU4OTQxMjEuMDAwMDAwMDAxLDUzNjM2NzQuOTk5OTk5OTk3LDE4MDgzNDMuOTk5OTk5OTk5OCw0OTM3ODEuOTk5OTk5OTk5OTQKKzI1LEZyaSAxOCBGZWIgMTEsNjI2OTMyLjAwMDAwMDAwMDIsNDQ0NzEwMC4wMDAwMDAwMDQsMjY3MzM5OS45OTk5OTk5OTg2LDUxMzA2MzIuMDAwMDAwMDAyLDMuMzg3MTY0ODAwMDAwMDAxRTcsNDMwMTI2MS4wMDAwMDAwMDEsMzQwNTU2NC45OTk5OTk5OTY3LDU3MjA1OS4wMDAwMDAwMDAyLDc4MzU5OS45OTk5OTk5OTk3LDEuNTk4MjM3Nzk5OTk5OTk5RTcsODE4NjQ1My4wMDAwMDAwMDMsMTIxMTUzNy4wMDAwMDAwMDEyLDI5MjYzMjQuMDAwMDAwMDAwNSwxMjkzOTUyLjk5OTk5OTk5OTgsMS4yNDE5MjkzMDAwMDAwMDExRTcsNjA4MDQ4NC45OTk5OTk5OTksMjY4ODQxOC4wLDQwNDE3NjkuMDAwMDAwMDA0LDQ0Njg5NzYuMCw2MzQ5MDk2Ljk5OTk5OTk5OSw1Mjk2NDg2LjAwMDAwMDAwMiwxMjc0OTIyLjk5OTk5OTk5ODgsOTkzODQ0My45OTk5OTk5OTgsNDkxOTQ3OC45OTk5OTk5OTYsNTU5NTIxMS4wMDAwMDAwMDIsMjg0NDY1Ny45OTk5OTk5OTcsOTAyMTk0Ljk5OTk5OTk5OTgsODA0OTMxMi45OTk5OTk5OTYsNjQyMjAwLjAwMDAwMDAwMDYsMTcxMTI2My4wMDAwMDAwMDAyLDEyMzU3ODYuMDAwMDAwMDAwNSw4NDE0MzUwLjAsMTgxOTA0NS45OTk5OTk5OTksMTk5ODI1Ni45OTk5OTk5OTk1LDEuODk3NjQ1Njk5OTk5OTk5RTcsMS4xMzUzMTM5OTk5OTk5OTlFNywzNDUwNjU0LjAwMDAwMDAwMDUsMzQyMTM5OC45OTk5OTk5OTgsMS4yMjgxMDU0MDAwMDAwMDA3RTcsMTA0ODMxOS4wMDAwMDAwMDAyLDQwMTIwMTEuOTk5OTk5OTk5LDc1NDg0My45OTk5OTk5OTk5LDU2ODkyODIuOTk5OTk5OTk4LDIuMDg1MTgyMDAwMDAwMDAxRTcsMjIzMzE2OC45OTk5OTk5OTk1LDcwNzg1MTYuMDAwMDAwMDA0LDYwODgyNi45OTk5OTk5OTk4LDU4OTQxMjEuMDAwMDAwMDAxLDUzNjM2NzQuOTk5OTk5OTk2LDE4MDgzNDMuOTk5OTk5OTk5NSw0OTM3ODEuOTk5OTk5OTk5OTQKKzI2LFNhdCAxOSBGZWIgMTEsNjI2OTMyLjAwMDAwMDAwMDIsNDQ0NzEwMC4wMDAwMDAwMDQsMjY3MzM5OS45OTk5OTk5OTg2LDUxMzA2MzIuMDAwMDAwMDAyLDMuMzg3MTY0ODAwMDAwMDAxRTcsNDMwMTI2MS4wMDAwMDAwMDEsMzQwNTU2NC45OTk5OTk5OTY3LDU3MjA1OS4wMDAwMDAwMDAyLDc4MzU5OS45OTk5OTk5OTk3LDEuNTk4MjM3Nzk5OTk5OTk4OUU3LDgxODY0NTMuMDAwMDAwMDAzLDEyMTE1MzcuMDAwMDAwMDAxMiwyOTI2MzI0LjAwMDAwMDAwMDUsMTI5Mzk1Mi45OTk5OTk5OTk4LDEuMjQxOTI5MzAwMDAwMDAxRTcsNjA4MDQ4NC45OTk5OTk5OTksMjY4ODQxOC4wLDQwNDE3NjkuMDAwMDAwMDAzNyw0NDY4OTc2LjAsNjM0OTA5Ni45OTk5OTk5OTgsNTI5NjQ4Ni4wMDAwMDAwMDIsMTI3NDkyMi45OTk5OTk5OTg2LDk5Mzg0NDMuOTk5OTk5OTk2LDQ5MTk0NzguOTk5OTk5OTk2LDU1OTUyMTEuMDAwMDAwMDAyLDI4NDQ2NTcuOTk5OTk5OTk3LDkwMjE5NC45OTk5OTk5OTk4LDgwNDkzMTIuOTk5OTk5OTk3LDY0MjIwMC4wMDAwMDAwMDA1LDE3MTEyNjMuMDAwMDAwMDAwMiwxMjM1Nzg2LjAwMDAwMDAwMDIsODQxNDM1MC4wLDE4MTkwNDUuOTk5OTk5OTk5LDE5OTgyNTYuOTk5OTk5OTk5NSwxLjg5NzY0NTY5OTk5OTk5OTNFNywxLjEzNTMxMzk5OTk5OTk5ODlFNywzNDUwNjU0LjAsMzQyMTM5OC45OTk5OTk5OTg2LDEuMjI4MTA1NDAwMDAwMDAxRTcsMTA0ODMxOS4wMDAwMDAwMDAyLDQwMTIwMTEuOTk5OTk5OTk5LDc1NDg0My45OTk5OTk5OTk5LDU2ODkyODIuOTk5OTk5OTk4LDIuMDg1MTgyMDAwMDAwMDAwN0U3LDIyMzMxNjguOTk5OTk5OTk5NSw3MDc4NTE2LjAwMDAwMDAwNSw2MDg4MjYuOTk5OTk5OTk5OSw1ODk0MTIxLjAsNTM2MzY3NC45OTk5OTk5OTcsMTgwODM0My45OTk5OTk5OTk4LDQ5Mzc4MS45OTk5OTk5OTk5NAorMjcsU3VuIDIwIEZlYiAxMSw2MjY5MzIuMDAwMDAwMDAwMiw0NDQ3MTAwLjAwMDAwMDAwNSwyNjczMzk5Ljk5OTk5OTk5ODYsNTEzMDYzMi4wMDAwMDAwMDMsMy4zODcxNjQ4RTcsNDMwMTI2MS4wLDM0MDU1NjQuOTk5OTk5OTk2Myw1NzIwNTkuMDAwMDAwMDAwMiw3ODM1OTkuOTk5OTk5OTk5OCwxLjU5ODIzNzc5OTk5OTk5OUU3LDgxODY0NTMuMDAwMDAwMDAzLDEyMTE1MzcuMDAwMDAwMDAxMiwyOTI2MzI0LjAwMDAwMDAwMDUsMTI5Mzk1Mi45OTk5OTk5OTk4LDEuMjQxOTI5MzAwMDAwMDAxRTcsNjA4MDQ4NC45OTk5OTk5OTksMjY4ODQxOC4wMDAwMDAwMDA1LDQwNDE3NjkuMDAwMDAwMDAzMyw0NDY4OTc2LjAsNjM0OTA5Ni45OTk5OTk5OTgsNTI5NjQ4Ni4wMDAwMDAwMDIsMTI3NDkyMi45OTk5OTk5OTg4LDk5Mzg0NDMuOTk5OTk5OTk2LDQ5MTk0NzguOTk5OTk5OTk2LDU1OTUyMTEuMDAwMDAwMDAyLDI4NDQ2NTcuOTk5OTk5OTk3LDkwMjE5NC45OTk5OTk5OTk4LDgwNDkzMTIuOTk5OTk5OTk3LDY0MjIwMC4wMDAwMDAwMDA1LDE3MTEyNjMuMDAwMDAwMDAwMiwxMjM1Nzg2LjAwMDAwMDAwMDUsODQxNDM1MC4wMDAwMDAwMDIsMTgxOTA0NS45OTk5OTk5OTksMTk5ODI1Ni45OTk5OTk5OTk1LDEuODk3NjQ1Njk5OTk5OTk5M0U3LDEuMTM1MzEzOTk5OTk5OTk4OUU3LDM0NTA2NTQuMDAwMDAwMDAwNSwzNDIxMzk4Ljk5OTk5OTk5OCwxLjIyODEwNTQwMDAwMDAwMUU3LDEwNDgzMTkuMDAwMDAwMDAwMiw0MDEyMDExLjk5OTk5OTk5OTUsNzU0ODQzLjk5OTk5OTk5OTksNTY4OTI4Mi45OTk5OTk5OTgsMi4wODUxODIwMDAwMDAwMDA3RTcsMjIzMzE2OS4wLDcwNzg1MTYuMDAwMDAwMDA0LDYwODgyNi45OTk5OTk5OTk5LDU4OTQxMjEuMCw1MzYzNjc0Ljk5OTk5OTk5NywxODA4MzQzLjk5OTk5OTk5OTUsNDkzNzgxLjk5OTk5OTk5OTk0CisyOCxNb24gMjEgRmViIDExLDYyNjkzMi4wMDAwMDAwMDAzLDQ0NDcxMDAuMDAwMDAwMDA1LDI2NzMzOTkuOTk5OTk5OTk5LDUxMzA2MzIuMDAwMDAwMDAzLDMuMzg3MTY0OEU3LDQzMDEyNjEuMCwzNDA1NTY0Ljk5OTk5OTk5NjcsNTcyMDU5LjAwMDAwMDAwMDIsNzgzNTk5Ljk5OTk5OTk5OTgsMS41OTgyMzc3OTk5OTk5OTg5RTcsODE4NjQ1My4wMDAwMDAwMDMsMTIxMTUzNy4wMDAwMDAwMDEyLDI5MjYzMjQuMDAwMDAwMDAxLDEyOTM5NTIuOTk5OTk5OTk5OCwxLjI0MTkyOTMwMDAwMDAwMUU3LDYwODA0ODQuOTk5OTk5OTk5LDI2ODg0MTguMCw0MDQxNzY5LjAwMDAwMDAwMzcsNDQ2ODk3NS45OTk5OTk5OTksNjM0OTA5Ni45OTk5OTk5OTgsNTI5NjQ4Ni4wMDAwMDAwMDMsMTI3NDkyMi45OTk5OTk5OTg4LDk5Mzg0NDMuOTk5OTk5OTk2LDQ5MTk0NzguOTk5OTk5OTk2LDU1OTUyMTEuMDAwMDAwMDAyLDI4NDQ2NTcuOTk5OTk5OTk3LDkwMjE5NC45OTk5OTk5OTk4LDgwNDkzMTIuOTk5OTk5OTk3LDY0MjIwMC4wMDAwMDAwMDA1LDE3MTEyNjMuMDAwMDAwMDAwMiwxMjM1Nzg2LjAwMDAwMDAwMDIsODQxNDM1MC4wMDAwMDAwMDIsMTgxOTA0NS45OTk5OTk5OTkzLDE5OTgyNTYuOTk5OTk5OTk5NSwxLjg5NzY0NTY5OTk5OTk5OUU3LDEuMTM1MzEzOTk5OTk5OTk4OUU3LDM0NTA2NTQuMCwzNDIxMzk4Ljk5OTk5OTk5OCwxLjIyODEwNTQwMDAwMDAwMDdFNywxMDQ4MzE5LjAwMDAwMDAwMDIsNDAxMjAxMS45OTk5OTk5OTk1LDc1NDg0My45OTk5OTk5OTk5LDU2ODkyODIuOTk5OTk5OTk4LDIuMDg1MTgyMDAwMDAwMDAwN0U3LDIyMzMxNjkuMCw3MDc4NTE2LjAwMDAwMDAwNCw2MDg4MjYuOTk5OTk5OTk5OSw1ODk0MTIxLjAsNTM2MzY3NC45OTk5OTk5OTcsMTgwODM0My45OTk5OTk5OTk1LDQ5Mzc4MS45OTk5OTk5OTk5NAorMjksVHVlIDIyIEZlYiAxMSw2MjY5MzIuMDAwMDAwMDAwMiw0NDQ3MTAwLjAwMDAwMDAwNiwyNjczMzk5Ljk5OTk5OTk5OSw1MTMwNjMyLjAwMDAwMDAwMywzLjM4NzE2NDgwMDAwMDAwMUU3LDQzMDEyNjEuMDAwMDAwMDAxLDM0MDU1NjQuOTk5OTk5OTk2Myw1NzIwNTkuMDAwMDAwMDAwMiw3ODM1OTkuOTk5OTk5OTk5OCwxLjU5ODIzNzc5OTk5OTk5ODlFNyw4MTg2NDUzLjAwMDAwMDAwMywxMjExNTM3LjAwMDAwMDAwMTIsMjkyNjMyNC4wMDAwMDAwMDEsMTI5Mzk1Mi45OTk5OTk5OTk4LDEuMjQxOTI5MzAwMDAwMDAxRTcsNjA4MDQ4NC45OTk5OTk5OTksMjY4ODQxOC4wLDQwNDE3NjkuMDAwMDAwMDAzMyw0NDY4OTc1Ljk5OTk5OTk5OSw2MzQ5MDk2Ljk5OTk5OTk5OCw1Mjk2NDg2LjAwMDAwMDAwMywxMjc0OTIyLjk5OTk5OTk5ODgsOTkzODQ0My45OTk5OTk5OTYsNDkxOTQ3OC45OTk5OTk5OTYsNTU5NTIxMS4wMDAwMDAwMDMsMjg0NDY1Ny45OTk5OTk5OTY3LDkwMjE5NC45OTk5OTk5OTk4LDgwNDkzMTIuOTk5OTk5OTk3LDY0MjIwMC4wMDAwMDAwMDA2LDE3MTEyNjMuMDAwMDAwMDAwMiwxMjM1Nzg2LjAwMDAwMDAwMDUsODQxNDM1MC4wMDAwMDAwMDIsMTgxOTA0NS45OTk5OTk5OTkzLDE5OTgyNTYuOTk5OTk5OTk5NSwxLjg5NzY0NTY5OTk5OTk5OUU3LDEuMTM1MzEzOTk5OTk5OTk4OUU3LDM0NTA2NTQuMCwzNDIxMzk4Ljk5OTk5OTk5OCwxLjIyODEwNTQwMDAwMDAwMUU3LDEwNDgzMTkuMDAwMDAwMDAwMiw0MDEyMDExLjk5OTk5OTk5OTUsNzU0ODQzLjk5OTk5OTk5OTksNTY4OTI4Mi45OTk5OTk5OTksMi4wODUxODIwMDAwMDAwMDA3RTcsMjIzMzE2OS4wLDcwNzg1MTYuMDAwMDAwMDA1LDYwODgyNi45OTk5OTk5OTk4LDU4OTQxMjEuMCw1MzYzNjc0Ljk5OTk5OTk5NywxODA4MzQzLjk5OTk5OTk5OTUsNDkzNzgyLjAKKzMwLFdlZCAyMyBGZWIgMTEsNjI2OTMyLjAwMDAwMDAwMDMsNDQ0NzEwMC4wMDAwMDAwMDUsMjY3MzM5OS45OTk5OTk5OTg2LDUxMzA2MzIuMDAwMDAwMDAyLDMuMzg3MTY0OEU3LDQzMDEyNjEuMDAwMDAwMDAxLDM0MDU1NjQuOTk5OTk5OTk2Myw1NzIwNTkuMDAwMDAwMDAwMyw3ODM1OTkuOTk5OTk5OTk5OCwxLjU5ODIzNzc5OTk5OTk5ODlFNyw4MTg2NDUzLjAwMDAwMDAwMiwxMjExNTM3LjAwMDAwMDAwMTIsMjkyNjMyNC4wMDAwMDAwMDA1LDEyOTM5NTIuOTk5OTk5OTk5OCwxLjI0MTkyOTMwMDAwMDAwMUU3LDYwODA0ODQuOTk5OTk5OTk5LDI2ODg0MTguMCw0MDQxNzY5LjAwMDAwMDAwMzMsNDQ2ODk3NS45OTk5OTk5OTksNjM0OTA5Ni45OTk5OTk5OTksNTI5NjQ4Ni4wMDAwMDAwMDMsMTI3NDkyMi45OTk5OTk5OTg4LDk5Mzg0NDMuOTk5OTk5OTk2LDQ5MTk0NzguOTk5OTk5OTk2LDU1OTUyMTEuMDAwMDAwMDAyLDI4NDQ2NTcuOTk5OTk5OTk2Myw5MDIxOTQuOTk5OTk5OTk5OCw4MDQ5MzEyLjk5OTk5OTk5Niw2NDIyMDAuMDAwMDAwMDAwNiwxNzExMjYzLjAsMTIzNTc4Ni4wMDAwMDAwMDAyLDg0MTQzNTAuMDAwMDAwMDAyLDE4MTkwNDUuOTk5OTk5OTk5LDE5OTgyNTYuOTk5OTk5OTk5OCwxLjg5NzY0NTY5OTk5OTk5OUU3LDEuMTM1MzEzOTk5OTk5OTk4OUU3LDM0NTA2NTQuMDAwMDAwMDAwNSwzNDIxMzk4Ljk5OTk5OTk5OCwxLjIyODEwNTQwMDAwMDAwMUU3LDEwNDgzMTkuMDAwMDAwMDAwMyw0MDEyMDExLjk5OTk5OTk5OTUsNzU0ODQzLjk5OTk5OTk5OTksNTY4OTI4Mi45OTk5OTk5OTksMi4wODUxODIwMDAwMDAwMDA3RTcsMjIzMzE2OS4wMDAwMDAwMDA1LDcwNzg1MTYuMDAwMDAwMDA1LDYwODgyNi45OTk5OTk5OTk4LDU4OTQxMjEuMDAwMDAwMDAxLDUzNjM2NzQuOTk5OTk5OTk2LDE4MDgzNDMuOTk5OTk5OTk5OCw0OTM3ODIuMDAwMDAwMDAwMDYKKzMxLFRodSAyNCBGZWIgMTEsNjI2OTMyLjAwMDAwMDAwMDUsNDQ0NzEwMC4wMDAwMDAwMDUsMjY3MzM5OS45OTk5OTk5OTksNTEzMDYzMi4wMDAwMDAwMDMsMy4zODcxNjQ4MDAwMDAwMDFFNyw0MzAxMjYxLjAsMzQwNTU2NC45OTk5OTk5OTYzLDU3MjA1OS4wMDAwMDAwMDAzLDc4MzU5OS45OTk5OTk5OTk4LDEuNTk4MjM3Nzk5OTk5OTk4OUU3LDgxODY0NTMuMDAwMDAwMDAyLDEyMTE1MzcuMDAwMDAwMDAxNCwyOTI2MzI0LjAwMDAwMDAwMDUsMTI5Mzk1Mi45OTk5OTk5OTk4LDEuMjQxOTI5MzAwMDAwMDAxRTcsNjA4MDQ4NC45OTk5OTk5OTgsMjY4ODQxOC4wMDAwMDAwMDA1LDQwNDE3NjkuMDAwMDAwMDAzNyw0NDY4OTc2LjAsNjM0OTA5Ni45OTk5OTk5OTksNTI5NjQ4Ni4wMDAwMDAwMDMsMTI3NDkyMi45OTk5OTk5OTg4LDk5Mzg0NDMuOTk5OTk5OTk2LDQ5MTk0NzguOTk5OTk5OTk2LDU1OTUyMTEuMDAwMDAwMDAyLDI4NDQ2NTcuOTk5OTk5OTk2Nyw5MDIxOTQuOTk5OTk5OTk5OCw4MDQ5MzEyLjk5OTk5OTk5Nyw2NDIyMDAuMDAwMDAwMDAwNiwxNzExMjYzLjAwMDAwMDAwMDIsMTIzNTc4Ni4wMDAwMDAwMDA1LDg0MTQzNTAuMDAwMDAwMDAyLDE4MTkwNDUuOTk5OTk5OTk5LDE5OTgyNTYuOTk5OTk5OTk5NSwxLjg5NzY0NTY5OTk5OTk5OTNFNywxLjEzNTMxMzk5OTk5OTk5ODdFNywzNDUwNjU0LjAwMDAwMDAwMDUsMzQyMTM5OC45OTk5OTk5OTgsMS4yMjgxMDU0MDAwMDAwMDA3RTcsMTA0ODMxOS4wMDAwMDAwMDAzLDQwMTIwMTEuOTk5OTk5OTk5LDc1NDg0My45OTk5OTk5OTk5LDU2ODkyODIuOTk5OTk5OTk4LDIuMDg1MTgyMDAwMDAwMDAwNEU3LDIyMzMxNjkuMCw3MDc4NTE2LjAwMDAwMDAwNSw2MDg4MjYuOTk5OTk5OTk5OCw1ODk0MTIxLjAwMDAwMDAwMSw1MzYzNjc0Ljk5OTk5OTk5NiwxODA4MzQzLjk5OTk5OTk5OTUsNDkzNzgyLjAKKzMyLEZyaSAyNSBGZWIgMTEsNjI2OTMyLjAwMDAwMDAwMDMsNDQ0NzEwMC4wMDAwMDAwMDYsMjY3MzM5OS45OTk5OTk5OTksNTEzMDYzMi4wMDAwMDAwMDMsMy4zODcxNjQ4RTcsNDMwMTI2MC45OTk5OTk5OTksMzQwNTU2NC45OTk5OTk5OTYzLDU3MjA1OS4wMDAwMDAwMDA1LDc4MzU5OS45OTk5OTk5OTk3LDEuNTk4MjM3Nzk5OTk5OTk4OUU3LDgxODY0NTMuMDAwMDAwMDAyLDEyMTE1MzcuMDAwMDAwMDAxMiwyOTI2MzI0LjAwMDAwMDAwMSwxMjkzOTUyLjk5OTk5OTk5OTUsMS4yNDE5MjkzMDAwMDAwMDFFNyw2MDgwNDg0Ljk5OTk5OTk5OSwyNjg4NDE4LjAwMDAwMDAwMDUsNDA0MTc2OS4wMDAwMDAwMDM3LDQ0Njg5NzYuMCw2MzQ5MDk2Ljk5OTk5OTk5OSw1Mjk2NDg2LjAwMDAwMDAwMiwxMjc0OTIyLjk5OTk5OTk5ODgsOTkzODQ0My45OTk5OTk5OTYsNDkxOTQ3OC45OTk5OTk5OTcsNTU5NTIxMS4wMDAwMDAwMDIsMjg0NDY1Ny45OTk5OTk5OTYzLDkwMjE5NC45OTk5OTk5OTk4LDgwNDkzMTIuOTk5OTk5OTk3LDY0MjIwMC4wMDAwMDAwMDA2LDE3MTEyNjMuMDAwMDAwMDAwMiwxMjM1Nzg2LjAwMDAwMDAwMDIsODQxNDM1MC4wMDAwMDAwMDIsMTgxOTA0NS45OTk5OTk5OTksMTk5ODI1Ni45OTk5OTk5OTk1LDEuODk3NjQ1Njk5OTk5OTk5M0U3LDEuMTM1MzEzOTk5OTk5OTk4OUU3LDM0NTA2NTQuMDAwMDAwMDAwNSwzNDIxMzk4Ljk5OTk5OTk5OCwxLjIyODEwNTQwMDAwMDAwMUU3LDEwNDgzMTkuMDAwMDAwMDAwMiw0MDEyMDExLjk5OTk5OTk5OTUsNzU0ODQzLjk5OTk5OTk5OTksNTY4OTI4Mi45OTk5OTk5OTgsMi4wODUxODIwMDAwMDAwMDFFNywyMjMzMTY5LjAwMDAwMDAwMDUsNzA3ODUxNi4wMDAwMDAwMDUsNjA4ODI2Ljk5OTk5OTk5OTgsNTg5NDEyMS4wMDAwMDAwMDEsNTM2MzY3NC45OTk5OTk5OTYsMTgwODM0My45OTk5OTk5OTk1LDQ5Mzc4Mi4wCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNFSVJTdGF0ZXNPbmx5X1JLX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9SXzAuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTRUlSU3RhdGVzT25seV9SS19SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vUl8wLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMDVkMDU2Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTRUlSU3RhdGVzT25seV9SS19SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vUl8wLmNzdgpAQCAtMCwwICsxLDMzIEBACitpdGVyYXRpb24sdGltZSxzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9ub2RlL3RyYW5zcG9ydC9waXBlL1VTQQorMSxUdWUgMjUgSmFuIDExLDAuMAorMixXZWQgMjYgSmFuIDExLDAuMDA0MTYyMzk1Njg4Mzc4MTc2CiszLFRodSAyNyBKYW4gMTEsMC4yNzY4NzAwMzEyMTk2OTg2NgorNCxGcmkgMjggSmFuIDExLDE0LjcyODkxMDI1ODUyOTgxNQorNSxTYXQgMjkgSmFuIDExLDcwNS4zODAzMTA0NjY1NDE2Cis2LFN1biAzMCBKYW4gMTEsMTUxNTIuNDA5Mzg4ODUzNTU0Cis3LE1vbiAzMSBKYW4gMTEsNTk0NjIuMTcwMzk4NTk0MTgKKzgsVHVlIDEgRmViIDExLDEzNTE1OS44NzUyMDk3NTI2MgorOSxXZWQgMiBGZWIgMTEsMjUwODUxLjU4MjA3MTQ5ODU2CisxMCxUaHUgMyBGZWIgMTEsMzc4OTY3LjQxNDk3NzI1NTMKKzExLEZyaSA0IEZlYiAxMSw0OTg2MjAuMDA3MDU0ODkzNjUKKzEyLFNhdCA1IEZlYiAxMSw2MDEwMTIuOTgzMTAxNTI2MgorMTMsU3VuIDYgRmViIDExLDY4NDMxNS4yODQ5MzY5NDY0CisxNCxNb24gNyBGZWIgMTEsNzQ5OTEzLjg4Nzg2MjI0NTgKKzE1LFR1ZSA4IEZlYiAxMSw4MDA0MDUuODA5MDQxMTc2NworMTYsV2VkIDkgRmViIDExLDgzODYxNS43NzI0MDg0MjM2CisxNyxUaHUgMTAgRmViIDExLDg2NzE1Mi42OTU4NDgyNTg4CisxOCxGcmkgMTEgRmViIDExLDg4ODI0MS4zNjM4NDA0MTAxCisxOSxTYXQgMTIgRmViIDExLDkwMzY5MS4yODA5MzEzMzYxCisyMCxTdW4gMTMgRmViIDExLDkxNDkyOC40MDY5NTMzMTIzCisyMSxNb24gMTQgRmViIDExLDkyMzA1MS4zNTYzMTI4NDU1CisyMixUdWUgMTUgRmViIDExLDkyODg5Mi4xNjA2MTk4NDkyCisyMyxXZWQgMTYgRmViIDExLDkzMzA3Mi44MDg1OTI4NjYyCisyNCxUaHUgMTcgRmViIDExLDkzNjA1My4xNDIyMjAyODc2CisyNSxGcmkgMTggRmViIDExLDkzODE3MC4yMzE3NDk0Mzg4CisyNixTYXQgMTkgRmViIDExLDkzOTY2OS4zNTA0MTA1NTI3CisyNyxTdW4gMjAgRmViIDExLDk0MDcyNy44NjgzOTcyNDU4CisyOCxNb24gMjEgRmViIDExLDk0MTQ3My4zNjg1NTg5NDE2CisyOSxUdWUgMjIgRmViIDExLDk0MTk5Ny4xOTcwODAxNjc1CiszMCxXZWQgMjMgRmViIDExLDk0MjM2NC40OTAzNDg2MDkKKzMxLFRodSAyNCBGZWIgMTEsOTQyNjIxLjUyODc5MDE2MzMKKzMyLEZyaSAyNSBGZWIgMTEsOTQyODAxLjA5MDQzNTQyMjEKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0VJUlN0YXRlc09ubHlfUktfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL1JfMS5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNFSVJTdGF0ZXNPbmx5X1JLX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9SXzEuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE3MDlmOGEKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNFSVJTdGF0ZXNPbmx5X1JLX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9SXzEuY3N2CkBAIC0wLDAgKzEsMzMgQEAKK2l0ZXJhdGlvbix0aW1lLFVTLUFLLFVTLUFMLFVTLUFSLFVTLUFaLFVTLUNBLFVTLUNPLFVTLUNULFVTLURDLFVTLURFLFVTLUZMLFVTLUdBLFVTLUhJLFVTLUlBLFVTLUlELFVTLUlMLFVTLUlOLFVTLUtTLFVTLUtZLFVTLUxBLFVTLU1BLFVTLU1ELFVTLU1FLFVTLU1JLFVTLU1OLFVTLU1PLFVTLU1TLFVTLU1ULFVTLU5DLFVTLU5ELFVTLU5FLFVTLU5ILFVTLU5KLFVTLU5NLFVTLU5WLFVTLU5ZLFVTLU9ILFVTLU9LLFVTLU9SLFVTLVBBLFVTLVJJLFVTLVNDLFVTLVNELFVTLVROLFVTLVRYLFVTLVVULFVTLVZBLFVTLVZULFVTLVdBLFVTLVdJLFVTLVdWLFVTLVdZCisxLFR1ZSAyNSBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzIsV2VkIDI2IEphbiAxMSw1LjY5NjQ0NjEyNTUxODY3MzZFLTYsNS43MjE5NjM4MTE1MTk4MjNFLTYsNC4xNzU1NjcyMjg3NDYyNzdFLTYsNC45NDY0MzI4ODQ1MjI1MTY1RS01LDIuNDEyNzI4NjM0ODk0NzExNSw1LjE3NjE3NDk5NDkyMDg0OEUtNSw3LjM5OTMzOTM1ODUzMDg4MkUtNiwxLjkyMjU5MzM5ODk0NzM0OTZFLTUsMS44ODQwNDcyOTQxMTAyODY1RS04LDEuMzY3NDUwMDY3MDM3MTIwN0UtNCw4Ljk4NzA0MTUyMDE0MzE4NkUtNSwyLjEwOTk4ODg3MjUwODk1NUUtNSwzLjQzOTUwMTUwOTYzMTAwMkUtNiw0LjI0NjkzNjc5MjY4OTk0NUUtNiwxLjAwMzAwMTYxMDUzNjA2M0UtNCwxLjA1MTcyMDM0NzU3NDA1N0UtNSwxLjYyNDg4MjQ4NzE2MDAwM0UtNiw1LjEwNTA0MTYzNjAxNjMzODVFLTYsOS42MTU3MTExOTkyOTI1NDFFLTYsMy4wMTYyOTEyMzA5NjYzNzgyRS01LDIuMjI4NTQxNTc2MzY1MTU3NkUtNSwyLjUxMTUwMTY1Njg2NDY2MDJFLTYsNC4xMjM5NTE0OTA0MjRFLTUsMy43MDgzNjkyNTc4MzAyODlFLTUsMi43NDIxMDY5NTgzMTQwMTY3RS01LDIuNjk1NDcxNzYwMzMzNjUwNEUtNiwyLjk3NDEwNjQwMTE1MTA3NUUtNiw0LjM5OTAxMTM3MzI5MjQ3RS01LDEuNDE4OTU5Mzc0NzE5Njc3NEUtNiw0LjkzNDU4MjcwODczMTQ5MDZFLTYsNC4yMzU4Nzk3ODI1NDg5NzE1RS02LDMuOTMxMDA2MDAzOTQ5ODE1NUUtNSw2LjgwMDA3ODUzOTE5Mzc1NUUtNiw1LjE5NTA4NDU1MzAyNzE5RS01LDguODQ1Mjg0Mjc2NzQ5ODI0RS01LDMuOTkzMzYyMzQzODc2NTJFLTUsNy40MTUwNTYxODQyNTc0ODhFLTYsMS42MjUzNjM5MTMwNjE2NjE0RS01LDQuNTM0NTYwNTA3NzMxMzE3RS01LDUuNjAwMDQ3NzUxMTkzNDEzRS02LDYuNzQwNDY3MDE3OTAxNjk5RS02LDEuMzcxOTMxODAzMjQ5NDA1M0UtNiwyLjQ1Mzg2MTEyODE1NjU3MzhFLTUsMS4yNTc1MTgzMDEzNzI0NDgyRS00LDIuMjI0MDg4MTgwNjYxOTkwOEUtNSwzLjM1MzM1Nzc0ODgxODM5OTRFLTUsMS40NjYwMTUzMTU0NTc4MjYyRS02LDMuNDIxODI0OTQ2NDUzMzg4RS01LDEuMTU1ODk0MDU0MDk2NzU5OEUtNSw3LjY3NzEzOTYxMTc5NzM3RS03LDEuMDIzNDI0ODQ5NzUwMTU5RS02CiszLFRodSAyNyBKYW4gMTEsOC4zMjk4NDE2NzU2ODQ1NDlFLTQsOC4zNzY4NDQyNTQxMDY3MTZFLTQsNi4xMTI3MDAwODc4NzQ2NzJFLTQsMC4wMDcyMzI1MTEwOTA5MTYyMTYsMTEyLjcwMTAyMjU4MzAyNDQ4LDAuMDA3NTY1NzQzNzQyMzQ2MTE3LDAuMDAxMDgzMTA2NjE4MzQ1MjY2NCwwLjAwMjgwMTE1Mzg3NjczMTE4OCwyLjc1ODcyNTI1MjQyNTY3MUUtNiwwLjAxOTk5NzYyNDYwOTQ2Nzg1LDAuMDEzMTM3OTQ3ODA0MjUxNSwwLjAwMzA4MTU5NTY5MDQyMDU2NCw1LjAzNTQ0Njc0NzQzNDc0MUUtNCw2LjIxNTU5MzM2MzI1NTkzNUUtNCwwLjAxNDY2ODk2NTc5MDA0NTYyMiwwLjAwMTUzOTU5NzA3NzE1NDcyOTQsMi4zNzkwMzcyMDEyNjcxNzdFLTQsNy40NzM3MDgyOTExMjMzMkUtNCwwLjAwMTQwNzU0MDkyNjE1OTY0MTcsMC4wMDQ0MTM1MjM1NjA5ODM5NDIsMC4wMDMyNjExMjg1MjQxMjcyOTUsMy42NzY0MTcyNTEwOTQzMTYzRS00LDAuMDA2MDM0ODIyMDAzMDU5MTA1LDAuMDA1NDIzOTQ3OTk5NzAxNjkwNSwwLjAwNDAxMjIzOTk2MDEwMDk3MzUsMy45NDYzMTY5MzY1NjY0MjVFLTQsNC4zNTI3MzY0NDg2Nzc5MzVFLTQsMC4wMDY0MzYwNzcwMjkxMDI0MDIsMi4wNzcwNDQ3NTM1ODY2MzQ3RS00LDcuMjIyNDIyNzMzNzUyNzY3RS00LDYuMTk5Mjc3MDY1ODg1NTczRS00LDAuMDA1NzUyMDI3NzQ0MjgwOCw5Ljk1MTU2Mzk5NDk4OTIzMkUtNCwwLjAwNzU3NzY0MDMxOTMxODkzNiwwLjAxMjk0Mjg0NDc4OTcxNTU3NiwwLjAwNTg0NDI3MTE2ODk1NDczOSwwLjAwMTA4NTQxMTA2NjA3NjU3MywwLjAwMjM3ODI3OTAwMDI4NjIyMSwwLjAwNjYzNjE0MDUwNzI1MTI0NzUsOC4xOTM0MzEyNTEzOTM3MTFFLTQsOS44NjczMzc1MjMwMjEyMjZFLTQsMi4wMDgzMjM0ODg4NTA1ODgzRS00LDAuMDAzNTkwNzkyODc3MzM1NTYxNiwwLjAxODM5Njg3MzAxODYxNzI0LDAuMDAzMjUxODM0NzI0NTQyMzQsMC4wMDQ5MDY3Mzg2NTY4MTcwMDk1LDIuMTQ1ODYxMTYzMzUzMDYyRS00LDAuMDA1MDA2MTI4NTgxOTcxNzI4LDAuMDAxNjkxOTg4NTk4MTQ5MzEwNiwxLjEyNDA2MjA3OTM2Mzg0ODlFLTQsMS40OTgwOTk1MzQwNzU3OTMzRS00Cis0LEZyaSAyOCBKYW4gMTEsMC4wNzA2NTEwMzQ3ODUwNzgyMywwLjA3MTEzNTk5MjQyMjI0ODgzLDAuMDUxOTA2NzAyNTYzMTI0NTUsMC42MTMzODUzMzc3NzM5MTY5LDUyMjUuODUwMzU2Nzg1ODI0LDAuNjQxNDA3NjY3ODU1MjgzNiwwLjA5MTk2NDUxMzU0NjEwMjAxLDAuMjM2Njc5Njc4OTQ5Njg2MSwyLjM0MzE2NDI5Mjk0ODU0ODZFLTQsMS42OTYyNzQxMDYwMzA1Nzg4LDEuMTEzOTkwMzg2NDcwMzAwNywwLjI2MTAzMjM4MDUxODA3NDIsMC4wNDI3NjE2NTI5MTYxOTQ5NiwwLjA1Mjc2NjMwNDQ1MTA4MTQ2NCwxLjI0NDM3MDA0OTcwNTI0NDgsMC4xMzA3MzMyNjAwNjg2MDI0MiwwLjAyMDIwNDg4MTExNzM0MzY1NywwLjA2MzQ2NjgxMzE1OTI1NDYsMC4xMTk1MTIwMDI0NzE1NTg5NiwwLjM3NDU5MzUzMDQ3MDQyMDksMC4yNzY4MDg1MTc4MzEyMzM2LDAuMDMxMjE2NzQxNjQ2MjM2MTMsMC41MTIyNDc1OTI4Nzc0NTIxLDAuNDYwMTUyNjYwNjEwNTg5MiwwLjM0MDUyNzAyMDgyNjU1MDMsMC4wMzM1MTM4MTI0NTc3OTY1MDYsMC4wMzY5NTE3OTAzMDcxODEzNSwwLjU0NjE5NTA2ODAwOTI0MjMsMC4wMTc2MzU2ODkxMzEzMjQyOTUsMC4wNjEzMTc0Mjc1MjY0MzkxNSwwLjA1MjYyNjU5Nzc5NTM1NjU1NiwwLjQ4ODIwMzc3MzIzNTM0MjUzLDAuMDg0NDc2MjQzOTgyNDkyMjksMC42NDEwMjEzODU5NDk5NTQ1LDEuMDk4NTI2NzA1MjMzMTk4NiwwLjQ5NjEyMjA2NDA4Nzk1ODgsMC4wOTIxNjA1MjE2NjYwNjc1NiwwLjIwMTg1NDEyNzgyMzY3NjYyLDAuNTYzMzI4NzcyNTY3ODA5MywwLjA2OTUzNDU1NDgyMTUwNzE3LDAuMDgzNzg4MTAxMzEyNTAwOTYsMC4wMTcwNTMyMzM3MTg3NjUxNSwwLjMwNDc4NTgxODg3NzkzODcsMS41NjExMDU3MzIxNTk4MTYzLDAuMjc1NzcyNjcyMzI3MTAxMzQsMC40MTY0NTU1NDk1Njk2ODM2NywwLjAxODIxOTQzMDE5ODUzMjQ4NCwwLjQyNDgyMDU2NTQyNzQ1NTgsMC4xNDM2NjM5MTQzNjM1NDksMC4wMDk1NDY3OTMyOTM5MzU3MzUsMC4wMTI3MjAyNzUwNTk5MTkyNworNSxTYXQgMjkgSmFuIDExLDUuMDI0MjI3NTI1NDY4MTg0LDUuMDY2Mjg4MTg1NjI0ODc1LDMuNjk2NTg3NTQ4MDMzOTE5LDQzLjYxNTIxMTA4OTk2OTMsMjEzMTAwLjAyMjUyMTQ0NTgyLDQ1LjU4Njg0NzAxMzI2MTA4LDYuNTQ4NTc2Nzg3NTI5MjUyLDE2Ljc1MjI4NDk3MTI5ODk4NywwLjAxNjY5MjAwNDM0MDgzNjMxNywxMjAuNjM5ODk0ODIzMDk2OTcsNzkuMTkwODAyODE5MjI1MzgsMTguNTMzMjczNDg0MjYwMzgsMy4wNDU1Mzk2NDUyNjc4NzIsMy43NTY1NjQ2OTc0MTU1MDE0LDg4LjUwODM4NTU1NjA0OTAzLDkuMzA5OTk5NjI0Nzc2MjYyLDEuNDM5MTc1MjAwMTQyNzUyNSw0LjUyMDExMTU2NzU1MjQyNiw4LjUxMDIwMzEwMTA1ODA4OSwyNi42NjA3MzQyNzMzOTk0NCwxOS43MDMxODk1MjkzNjgyNTIsMi4yMjI5NTcyODY3NDc3MTIzLDM2LjQ2MjExNDU1NDg4MTU1LDMyLjczMjY4MzIzMzkwNzAyNSwyNC4yMzU0NDAxMDc1MTg2OTUsMi4zODcwMDA5Nzk5OTQyMzksMi42MzA2ODI3Njk4OTE5MjMsMzguODY4NzA3NjcxMTAyNzYsMS4yNTU3ODcwODg1ODUxODc0LDQuMzY1Njc0MjkyMDQ2Njk4LDMuNzQ2NTE0MDEzNzIzMjU3NSwzNC43NDcxNzgzMTEzODY4Myw2LjAxMzU0ODAyNDY0OTM4OCw0NS40Mzc3ODUwNTgwMzIzNSw3OC4xODYxNjUzMDkwMjAyOCwzNS4zMTg1NzE2OTg5ODY1NSw2LjU2MjU2NDA4MjU0MzM0MywxNC4zNjY0NTA1MzYzMzUyNSw0MC4xMDE2MjI5OTQ4OTI1OSw0Ljk0ODM4MjUxMzMzODg2OSw1Ljk2NjkxNzc5NzcyMzU2MTUsMS4yMTQ0MDM0NTg3NTIwNTYsMjEuNjk0MTcwNDQyNDIwOTksMTExLjA4MDQyMzg4OTY3NDQ0LDE5LjYwNzgyMDE0NTY3NjQ5NSwyOS42NDAyMzIxNjkyNDg0NzgsMS4yOTczMDQyMzA1MzM5OTYzLDMwLjIyOTM5ODQwMTUyNzU0NywxMC4yMzAwMDQyNzI4MTg1MTksMC42ODAwMzI4MzA3MTM4MzQ1LDAuOTA1Nzk4Mjc4NTI4OTMzOAorNixTdW4gMzAgSmFuIDExLDMwNS4wNDQ5MDg2NDg5MzY3LDMxMC41MzkyNDYwNzAyMDU3NiwyMjYuNTA2MzM3MzIwNzk3NDgsMjY0Ni4zMTYxMTI5NDgzODUsMjM4MjQ2Mi44MTMyNDc4MTI0LDI3NTcuOTk3MjQ3NDczMTk5NCw0MDAuOTU4OTE0MjgxNjY3MSw5ODguMzE3NDE4NDQ5NTgyNiwxLjAyNDczNTkzMjkwNzE1OTcsNzMyOS4zMjA0Nzc5MzkxNTM1LDQ3OTcuMTA4MDYwNTIyNDY5LDExMTQuMTAwMDA3OTY1MTYyNCwxODYuNzAyNjMyMjM0MDgxNywyMjkuNjk1NDAzMjY1MzAzNCw1MzgwLjMzNTE3NTkxMjUwMyw1NzAuMzQ3MjA3MTgwMDIyMiw4OC4yODg4MjY2MzE3Njg1LDI3Ny4wNjkyODkxOTU5MTksNTIxLjA3OTY1ODU3NTc3ODEsMTYyNy4yNDU3NDE4ODkyMjYsMTIwMy4zODg0ODA4OTAzMDYsMTM2LjE0MjA3OTEyMzk1OTc3LDIyMjcuMTExODE1Mzc1NDIyMywxOTkxLjA4NDE4NDIzMDUxNzQsMTQ3OC45NDYxODMwNzU1MiwxNDYuMzcyOTMzMDQ1NTEwMiwxNjAuODUwNDQwNjMyMjU5OTMsMjM3MC4yOTYyMzQ2NjI4MzgzLDc2Ljg4NjM2MTUzMjg3OTg1LDI2Ny4wNjk5NzMyODI3MTkwNSwyMjkuMDM5OTkyOTE1MTg4NSwyMTIxLjAwODc0MzI4MjcwNjMsMzY3LjQ5MzM3Njc4NTkxMTUsMjcwNC4xNDA4MjU1OTI4NzQ1LDQ3NzIuNjM3NTMyMDA0MjE0LDIxNTguOTMzODk1OTcxMTU3LDQwMS44MjcxMDk5MDI1NTcsODc2Ljg2MDY5NDI3MDQ0MTksMjQ1MC43ODQ0NDg3MjM3OTI2LDMwMS44MDgxNjk0NzM5NjE4NywzNjUuNTY2MzU5NDYxNDQzOSw3NC4zODg0ODI3NDIwMTAzNCwxMzI0LjgxODI4NjYzODAxMTIsNjc2OS4yNTQxNTA3MjM5Nzg1LDExODkuMjMxNDgzOTQ4Mjk0LDE4MDkuMTI5ODAyMTkwNTA2OCw3OS40MDg5MDg5ODgyNDYxNSwxODQyLjY4ODM5MDI2MDA2Miw2MjYuMzgwNDYzNjgwMzkwNyw0MS43MjcxMjAzNDU3Mzg0Miw1NS40Njc0MTA3MDI1OTczNgorNyxNb24gMzEgSmFuIDExLDEwMzAwLjQyMzU4ODA5NzIzNCwxMzgyMC4yOTc5MTk3MjU5MDUsOTk1My4yMjE1OTkxNzIzMzUsODgwMjIuNTA0Mjc1MTU4MzcsNjcwMzY0OS40OTMzODgyMzIsODYzNTQuNTE0MTE5MTk2MTMsMTcxNDcuNjY5OTc3NTI5MzQsMjE1NzQuNDQ1MjI2MzA4ODIsNDguNTU3MzU5OTYxMjczNDU1LDI1MTE3OS4zMTcyNTczNDkxOCwxNTQxMzIuNDc3MTI3Mjk1LDMxMDg4LjMwMTYyOTYxMjk3NSw4MzUyLjYxMzA4MTU2MTYxOCw5MzgyLjgxNDE0NzMwMTQ3OCwxODY5NDEuNzIwNDI0MjQ1NTgsMjQ4NzIuODI2NTc4MjcxOTY1LDQwNjAuNzY3OTIwMjIwNDM4NiwxMjM0NC4zNjk1OTUyODUyMTQsMjIzMDUuMTU3MjYzNTY5OTUyLDYyOTA4LjQyMzY3NDU1LDQ3NDQ4LjAwNjkxNzI1NzkzLDU4NzQuMDczODk4NzY5MjEzLDg4MDAxLjIyMTQ1OTY5NTcyLDcwMjg3LjU2MjMyODI2NTM4LDU2ODcyLjE2NjE3NTE5OTA5LDY2MTkuOTQ4MTgyMTI5NjE4NSw2NTY2LjgzNDEyNTkyNzIsODkzODcuMTEzMzMwNDUwMTQsMzI4Mi45NTAwNDc4NjkzNzUzLDExMDg1LjY2MzYzNTU0MjMwNSw5MzAyLjYwODAyNjg0MDE1LDgyMjI4LjQyODk3MDcyNzY2LDE0NzQ3LjcxNTUwODA5NDIxLDY1MzM5Ljc2NTA0NjMwMzQxNSwxODUwOTguNDU3MjQ5NDI1NjQsODczODAuMTUxMjE1ODkzMTYsMTcyMDIuNTQxMzk1OTc5OTYsMzM4OTkuMTQxNTg4MTM5NzA0LDk4NTI0LjYwNDM5NDc2OTY5LDExNDI5LjQ3MTE3MDkzMDUxNywxNTk3Ny45NzQzNjQ2ODAzOTMsMzIzMS4zNTI3MjE0MzgxNTgsNTIwMzMuMTcwMzUyMTcyNzgsMjUwNTA4LjQ3NDE5ODg0MDk0LDM5MjIzLjYzNDc1MTUyMzE0LDY5OTczLjI2MjU1ODkwMDkzLDMzNjIuMDE1Njg3ODQ1MjI2Nyw2ODcwMC40OTg2MzA0NjUxOCwyNjgwOC42OTkxMDMwOTkxNywxOTM2LjY0NzI4NDY4NTQ4OTUsMjM4Mi40OTAwMTIyMjcxNTMKKzgsVHVlIDEgRmViIDExLDY2MzA5Ljg1OTE4NTUzMzMyLDIyNDYzNS40OTM3NzMyNTkwNSwxNDc2MzcuODg3NzEwMTYxMjUsNTUyNDA2LjcwMzMwMDMwMTgsMS4xNTgwNzMwOTg1MTc5NTI3RTcsNDk0MDUwLjc0MTM4ODk3ODQsMjE2ODkxLjc2NDQ1NjUyMzQsODU0ODYuMzAxNzA2NzUyOTcsMjEyNy43ODM2NjYxMjA4NjksMTY1OTgwNC41NDY0NDY5MTY2LDkxNTc4Mi44ODAzNDk2NzQ1LDE1NDAxMC4xMTAzNjE2OTcyLDE0MTU4MS4wOTc5MDAwMDg1NSw5NzAyMy45OTM1NjIzMjU0LDEyNjcwNTAuNjk4OTI4MzYzOSwzNTEzNDguNDU2MjgzMzc2LDkxODE4LjIyNTczNzg4MTksMjAyMzg0LjIxOTE1MDIzODk2LDI4MzQ2Ny43MTIxMDI3ODc5LDU0NDI2Mi41OTY3NzYxNDgsNDM1MDM1LjI2Mzk4MTEyNzMsNzc5MjIuNzQxOTAyMzkxMzIsODEyMjY0Ljk5ODU4MDYyNTQsNDkxMjE1Ljc2NzY0NDE3OTUsNDg0ODI4LjA3NDI5NDkwNjcsMTIzNzE0LjcyNDc1NDg0NzA1LDY3NzYwLjU2NzgxMTEwMTIyLDcyMzg3Mi40MjQzMjQ5NjM2LDQxMTg1Ljc2NjE3NjgwNTYzLDEyMjEwOS41NTExNzIxODIwMiw5NDE4NC4xMTE5MjU5MDIxNSw3MTcxMDguMzMzNzIzODI1MiwxNDMxNTcuMDYwNDg4OTc5ODksMjgxMTA4Ljk3MDEzMzMxMiwxNjE1OTc3Ljc2MzgyNzc5NTksODczNjM1LjU3MTI5NDMyMDksMjE4NzU3LjkxNzQ1OTkwNDkxLDI5MzI4OC42NDEwNjEyNTkyNiw5NjIxMzEuOTkwMDAzNzQ4Nyw5MzU1Mi4zMjE3MTc1OCwyMjg4NzcuOTY3OTkxNzk1NjUsNDQ1NjguOTEzNjM2ODY1ODgsNDcxNDM1LjI1MjU0ODk3MTQsMTkzNzc2Ny4zMTcxNzI3NywyNDI3NzYuNjMzMzkyMjAxODIsNjA2MTk2LjgxNjg4Mjc2MDYsNDA0NDQuMzgxMzU5MDY3OTMsNTQwODgzLjI1NTkyNjg0MSwzNDA0NDAuOTkyNjA0NTg0OTYsNTAwODUuODc2NzQ2NDExMDg2LDMwODM0LjU1ODY4MDEyMjA0NQorOSxXZWQgMiBGZWIgMTEsMTUyMzAxLjExNTM4OTU3Mzk0LDc1NjUxNS40ODQ5NzA1NDcxLDQ3MzYwMi43OTA0NDM1NDg4LDEyNTc4ODcuNjQxMzg3OTkwNywxLjYxNzk2NDk5NjQ3NTA1MTNFNywxMDkwNTc4LjI5ODQyNDE2Miw2NDQ1NDUuMzQ4NzI1MzcxNiwxNjY3NTQuODA0MzY3MTk5NjMsMzcwMDUuNTQ2MDU2MjMyNzcsMzg0NjI2My44MTI5ODkyNjcsMjA0NzI3Mi44MjAxNDAyNjIxLDMyNDAwOS43OTE0NDI4MTkyMyw0ODgyNTIuMzc0MTkzODU1NCwyNjQ3MTQuMzA3MzkzNjIzODcsMjk2MTY3Mi4xOTUxOTIxNjQ3LDEwOTk4NDMuOTk2MzIxMjM3LDM4NTIxMC4zMDA2NTU0NDc0LDY4NDg1Ny41ODA2NzgxNzA4LDg0NDIwMy4xNDkwMTUzNTAyLDEzODY5MTMuNjc1NTYzMjU2MywxMTMyODA3Ljk3MTM5MDM5MDgsMjM2NjkzLjMwODA3NjY2MTU1LDIxMjA0MzkuMjYyODQ4MjAyNiwxMTYwMzM4LjQ2ODY1Njk1MDYsMTIyODc4Mi4xMTU1MzQ2NCw0NTI2NTkuNzE4MjMyOTQ3NDYsMTg0NzE2LjUzMTMzMjMxNjI2LDE4MDA3ODYuMDMxMTE3MTk0OCwxMjE5NDIuNDcyNjMxOTU5MDEsMzQxODI4LjU1MzExNTc3MDE2LDI1NDgxNy42ODU0MjYwNTc0MywxODMyNzQ3LjgzOTA0ODUzNiwzODA5ODguNjgwMjgyNzMyNSw1NjQwMDUuOTAyOTI1ODkxMyw0MTMxNjgxLjkwMTI3OTkzMiwyMzUxOTczLjU4OTM0NDY0OCw2NTE2NzQuODExMjYxNDU4MSw3NDczNzUuMjQ0NDgxODA4NywyNTY2NTA4LjYyMTIxMTgzNiwyMzM2MjguMzQyNjIzMDgyOSw3MjE0MjYuODk3NTk1NzAyOSwxMzc5MDYuNzk2MDUxNjc3NjcsMTIyMjExMi4yNjAzMDI4MjU4LDQ3NDI0NDAuMzAyNDExNDA0LDU1MDI1My43OTU1ODY4MTA4LDE1NDU0OTkuNDgzNDMyOTI0NiwxMTc1NDAuODkxODY0Mjc5MywxMzMyMDYyLjk1MjkyMjUwNDksMTAxMzUyNS4yNzgyNjUxNTE0LDIzNzE0Mi4wODQwOTUyMTgyOCw5MjU5NS43NTgzNDgwMTkwNworMTAsVGh1IDMgRmViIDExLDI0MjUzOS4yMDAzMDAwOTg3NSwxMzk2ODA5LjgxNDY5NDcwMyw4NTkyODIuNjQ1NzIxMjQ5MywxOTk1ODczLjI5MjczNDYwNzYsMi4wMTU4MjQ1ODg3MTQ3MjY2RTcsMTcwNzQ5My45OTIwOTg2MTQ4LDExMzY5NzEuODkxMzk1NjMxLDI0NzA0NS4xNzIzNTEwMjAyNCwxMjkzMDYuMjYwODk5NzA1MTMsNjE0ODE4My40OTMxMDAzODQsMzIyMjkwNi43MjcyNjExNjU2LDQ5NjcyMS4yODMxNDU1Mzc2Niw5MDkxMjQuMTYyMDAyMzAwMyw0NTIwMDMuMjkyOTQ0NjQyNyw0NzUxNDQzLjI4MTI3NTU2OCwxOTc3NzkzLjkyNzEyMDU5OCw3Njc0MDEuMTUwMDI1MDcyLDEyNjY2NjcuMTU2NzM5MzIwNCwxNDkwMzYyLjE2MTA5MjE1MDUsMjMwNTIyOS4wNDgyMzI1ODY2LDE4OTkxODUuNjI0MTA4MTk1LDQyMDk0MS41NTkxNjM0Nzc1LDM1NTg1MzguOTMwMDA5NTA0LDE4Njk3NTIuNTQ1MTEwODA5NiwyMDM3OTUzLjA4MzcxMzM5NTUsODYwNTM2Ljg4NDM2OTEzMTksMzE1MzAxLjgzMTEzMDQ4MjQsMjk2NDI0Mi44MDEzODM5NTA3LDIxNDgwOC42MjY4MTM4NDM3Myw1ODk0OTMuMDg1OTUyNjY1NSw0MzM2ODYuMzQ3Nzc4NjQ0LDMwNDk4NTQuOTEyMjAzMjczLDY0NDI1OC45MzY3MTIwMzcyLDg0NjQwOC4zMjIwODY5MTM2LDY4NzY1ODUuMzk5ODU2NDcyLDM5OTUyMTMuNTc5NTIxOTcwNCwxMTUwNTkzLjc1MzM5MzkzNzgsMTI0MjIzNi43NTIwNTgzODM4LDQzNDM5NzIuMDA4NTIzODYsMzg1MTcyLjExOTkwMjA1MjYsMTMwMDU4MS40NzQwMTkzMDM1LDI0NjkzNy4wODg4NDA0MjA1LDIwNDUyNjguODk4MDczMzkzNCw3NzU0NTk2LjAyMDQ4MjI5MTUsODcxMzQ3LjAwNDIyMzg4NCwyNTY5MzI3LjM5Mzc5MzE5OSwyMDU2MTIuNjY2MDk5NjU3NzcsMjE4MzcwNS45ODgxNzU4MDY2LDE3ODkwNTIuODQ4MzI4NTkyMyw0OTE5MjYuMjA1MTI3MjczOCwxNjM5NzYuNjEzMDU1OTMyNgorMTEsRnJpIDQgRmViIDExLDMyNDg3Mi42NTgyOTMyNzA3NCwyMDE2MTcxLjAwMjYxNDQwMTUsMTIyOTgzNi41NzQzMzQ0MzQyLDI2NjgyMjQuMDMzOTg2NDczLDIuMzQyOTI0MzI2MTU5Nzk3RTcsMjI2NjU0MS4zNzY2NDgzNjk3LDE2MDQ5MjIuNzYzNjk2MDc4NywzMTgyNjQuMzY4MzM2OTU5MDQsMjQxODkzLjEyODU0ODQwMjE0LDgyNTE2MzEuNDgyNTEzNTY4LDQyOTA1OTguNTQ3MjkwNjAyLDY1MTkyMy45MjUzNzg2MTEzLDEzMTc1NjAuNDk3MDQ1MDk3NCw2Mjc3MTcuMjU2ODEyNjYyLDYzODkyOTUuOTI4MDc2NzU3LDI4MTgzOTQuNTA2NTI0MTY3LDExNDc5NzQuMzcyNDQxMzk5OCwxODI5ODI3LjA4MzM1OTc5OSwyMTA0NTk3LjM4MTg1NDIxMiwzMTU3NjEwLjQyNjA1ODkxMSwyNjEyOTg5LjM4ODkwNTY0NTMsNTk2NTkwLjg4OTk0MTMwMjcsNDg5ODUxOC4yNjE2NTcyMzYsMjUyMDA5OS45MTE0MDg3MDIsMjc4ODM3My44MzkwNzg1NDE0LDEyNTk1MjguODUyMDI2MDE0OCw0Mzc4MDAuNTQ1NDUzNDk1LDQwMzk5ODQuNTg0OTU5MTExLDMwMzAxMS4yMzM4MjY3MzAxLDgyMjc2My42NDAwNzE0ODI3LDYwMTI4My40ODU2MTk2MDY2LDQxODAxMDYuNjc1MzcyMjM4Nyw4OTAzMDkuMzU2NTA1MDExOCwxMDk4MDk0Ljg1NzYwNDMwMiw5NDI1NzY5LjY0NDY2MDY4OSw1NTMzNzI1LjQ2MDY5MTIxNywxNjI0ODgzLjEzNTMxNzYzNiwxNzAxNTY4LjE5NjEzMjc3OTEsNjAwNTc3Ny41MjA1MjU4MDIsNTI1Mzc4LjI4NDIzOTUyNjYsMTg1NTY0Mi4xNzMyNzIwMzUzLDM1MTE1Ni4xMDQzNTAyNzcxNiwyODExNDE0LjAyNjE2NTE0NDUsMS4wNTMyMjM0MDQ1NDQyMzgyRTcsMTE2MzY0OS4yMTA2OTA5ODEyLDM1MTk3MjAuNzAyODgyNDA0LDI4OTAzMi42MDA5MTc2NzU1LDI5Njk4NDkuMDQ5MzQ4NzI4NywyNTI2MjI3LjcxOTYxMjI5NSw3NDk1MTUuNDczOTkwNDUwMSwyMzE5MTMuMjA1NjEwNzM1NzgKKzEyLFNhdCA1IEZlYiAxMSwzOTQ3MDMuNzYwNDk4NzAxNCwyNTU4NzY3Ljg0MzgxODg3MzYsMTU1MzI5Mi4xOTYyOTkyMzc3LDMyMzc5OTkuMTk5MjA5OTI3LDIuNjAyOTE4ODg0NTgyMzk3M0U3LDI3Mzg4NTIuNzk3MTAxMTg1LDIwMTA5NzYuNjg5NTQ1NDM2OCwzNzc3MzMuNDM5NzM3OTgyNDcsMzUxMzYwLjE4NDQ0Mjk2NjcsMS4wMDM3MjA4NzU2NDg3ODA1RTcsNTE5Mzc2Ni4zMTA5ODk0ODMsNzgyNDI1LjIxOTc3ODk2ODgsMTY3NTk5MS4wMDUwNDgyOTgsNzc5MTE2LjM2MjA5MzE0MDEsNzc4MDgwMC45ODQ4NDkzMjIsMzU1MDc4NS43ODA2MTgwOTY3LDE0ODY0NDAuMTc3OTI0MTUxNSwyMzIzMzYxLjE5MDY4NzEzOTUsMjYzNzY3Ny43MTUyOTU5OTU2LDM4ODc2NDguMDA4MzMxMTEzNSwzMjI1NTI0LjI5MjExNTA2MDYsNzQ5MjcxLjQ1OTYzOTc0NTEsNjA0ODY0OS4yMzEwOTExNzIsMzA3MzE4Ny4zNzUyNjA4ODYsMzQzMDc3MC4xOTc4OTY5NTU1LDE2MTExNDAuMDEwOTMzNjkxMiw1NDMzNDAuNTE2OTA5Njc0Nyw0OTU5MzA1Ljg4ODYzMTM4OSwzNzk1MjQuNDgwNjQ0NzM2MjYsMTAyNDE5Mi4xNDUzMDI2MzYxLDc0NTU4NS4wMjUwMTUwNzE1LDUxNDgzODguMjAzNzA0NjUxLDExMDE4NTcuMzcyMzg0NDA2LDEzMDg3NjguNTAyNDYzNjI0MywxLjE2MDk3MjI3NzE4OTg5NTVFNyw2ODU3ODIyLjcxNjU3MjYyNiwyMDM2NTE3LjExODcyNjY2ODYsMjA5NDk3MS4xOTgxNDk4ODA0LDc0MzQ4NDUuNTk0MDYxMjA4LDY0NTIzOS44NTM5OTM4MTUsMjMzOTUwNi42MTcyNTM1MTAzLDQ0MTg3Ny44MzA4OTA0NzczLDM0Njg2MDMuMDc3NzI2MTIxNSwxLjI5MDIzOTE4ODcyMzczMjdFNywxNDExMjQzLjk1MTUwMTQ1MSw0MzMzNzM4LjY1MzUyNjk5NiwzNjEyODguNDc1NDA1ODUwMywzNjQxMDU1LjY2OTMzMTE3NCwzMTY1OTg2Ljc4NDkyNjI4NzQsOTgwMzU5LjE0ODg3MTY0NywyOTA5MTIuNzcwNzk4MDEyMgorMTMsU3VuIDYgRmViIDExLDQ1MTMyNS43NjQ2OTg2MTE2LDMwMDc4NzAuNDE2NjUyMDQ4LDE4MjA0MTEuMDg4OTAwMzU4MiwzNjk5NzQ4LjQ3MTc3NjkzNCwyLjgwNDY2MjA1Nzk2NTEwMzVFNywzMTIwODcxLjc3NzkzMjA1NzYsMjM0NTA1OS4wMTU3MTM3MjQsNDI1NTAxLjE2NjI3NTQyMiw0NDc1MjcuMjM4NDMyOTE2MDYsMS4xNDg1ODMwNDA0MTE5NDg2RTcsNTkyNDg1NC42NzA2NjA0NTcsODg3NjY0Ljk5NzI0NDcwODcsMTk3Mjk3Ny42NTMyNTE0NzE3LDkwMzEyMy45NzU0NzM4MjMsODkxMDMyMS40ODY5MTkwNzcsNDE1NDkwOS44NzcyMTkzNTQsMTc2OTE4Ny4zMTg0OTQ0NjQ3LDI3MzE5NDMuODgwODUwNDc1LDMwNzYzMTguOTM1NDM3NzQxLDQ0ODMzMTUuMzk2ODcwNTc3LDM3MjU5MzYuOTIwMzQwMDc3LDg3NTAyNy40MDQ3MzQ2NTU3LDY5ODgzODcuNTY1NDcwNTIzLDM1MjI0MzMuOTIxMzUyNzQ0NiwzOTU0NzYyLjYyMjA5MDExNSwxOTAzMjMwLjIzMDg5OTU1NjMsNjI5NzgxLjkzNDE1NTkxOTEsNTcwODM2Mi44NDQ1NTM4NjYsNDQyNDY0LjI5OTUxMTAzMzQsMTE4OTQwNi4wOTY5MDQxMzQsODYzNzI0LjkzODEwNTEwMiw1OTM4NTgyLjkzNDA5MTk2NywxMjc0ODk0LjQyNTEyNTA5NTgsMTQ3ODIwNi45MzU3ODY5ODMsMS4zMzkyMDQzMzQ3NDEyNDgyRTcsNzk0MTU2OC4yMzExMTAxMTUsMjM3NTIzMS45NjMyMTAwNDI2LDI0MTU5NjQuODMzODczNTA1LDg2MDM5MTIuMDkwMDA3NjIsNzQyOTI0LjQ1NTk0OTA1NDksMjczODc2MS45MDcxMTY3NDA1LDUxNjY2OC45NzU3MDY4ODY3Myw0MDA1MzU5LjMzODE3NTcxOCwxLjQ4MzE3MDI3MjM0NDg2NDNFNywxNjExODM3LjY2MDM4MzMzNzksNDk5Nzk0OC4wMjIzMDU1NjcsNDIwNjY5LjgyNTUwNDcxOTEsNDE4NzYyMy4xMzI3Mzk0MDksMzY5MjM5OC42MjMxNTIyMDQzLDExNzQwODkuMDk1NDgyMjE1OCwzMzk0ODAuMzY1MjM5NjkzOTYKKzE0LE1vbiA3IEZlYiAxMSw0OTU4NTcuMDczNzQ0NTk2NzQsMzM2NjEzMi4xNTMxNjE3NjMsMjAzMzE3MS4xNDA0ODc3MjksNDA2Mjc2NC40NzY3ODcyNjIsMi45NTg0MDk1ODA1NjQ4OTIzRTcsMzQyMDgwNi42MTMxODk3MTksMjYxMDQ3My43MDk3ODE2NTM3LDQ2Mjg0NS43MjkwNjg0Njc3LDUyNzI2NS43MDY0NDA2OTg0LDEuMjYyNTU1NjgzNzcyNTc1M0U3LDY0OTkxNjQuNTgyNjIzOTM1LDk3MDEyOC45NTQwODU2ODcsMjIxMDA2NC44NzExOTY1Nzg3LDEwMDEzMzguMjA2MTg0ODk3Nyw5Nzk5MzE5LjMzMTM1NDI4LDQ2MzU3MDkuMTU5MzU4MDM2LDE5OTYxNTkuNDcwMTkyMTE0NCwzMDU3OTMwLjE5ODc0ODgwNjUsMzQyNDgyNy4zODI3MzYzMDM0LDQ5NTM4MjguODkwNzUwNzcsNDEyMTU1MC40ODQ0MTM4Mzk0LDk3NTAxMC42NjA0MTg2NDUyLDc3MzEzOTQuOTE2NzgyMDgzLDM4NzYxNzUuNTYyOTIwMTkyMyw0MzY4NTY5Ljk5MDg4NzcxNiwyMTM2ODE4Ljc1ODU3OTkwNzUsNjk4MjQxLjQ3NDgwMzMwOTIsNjI5OTQ1OC45OTQ2OTY0ODcsNDkyNDYwLjk3NTIzOTYyMywxMzIwMzgxLjM0Mjc1MTA2NzgsOTU3MjYyLjE0MjQ1MjU4MTksNjU2MjgyNi4wNTM3OTQ4NDEsMTQxMTgwOS43OTk2NTMzMDMzLDE2MTA3NTguMzY1NjIzMzczMywxLjQ4MDAwNzUwMzIyNjE0OUU3LDg3OTk0NjAuOTE5NDMyNjgsMjY0NDM0OS43NDQzMjIzNjcsMjY2OTUxNS41MTU1NTQxMzUsOTUyOTAxNy43MTEwNTQzMjMsODIwMDIxLjU0NTg2MTUwMTYsMzA1NjU4Ni4yNzQxNzQ1Myw1NzYxNjkuNDAyMjg0NTkwOCw0NDI5NjMwLjEyMjI5NjIxOSwxLjYzNTMxMzE5MDE0MTM5OUU3LDE3Njk1MDcuOTM5MTYyMzc2Niw1NTIyNjEyLjc3MTMxMjM5NSw0Njc4MDguOTI5NTg3MDYyMSw0NjE4NzUxLjIyODE0MTczOCw0MTEwNjM3LjM5MjM2OTgyMywxMzMwMDgyLjQxNjU4OTM1NSwzNzgwNzkuMjkyMDY1OTgzOAorMTUsVHVlIDggRmViIDExLDUzMDExNC42ODczNjIyNjMsMzY0NDYyNC44NTM5NDUyOTc3LDIxOTgzNzMuMzAyOTg2NjgxNSw0MzQxOTU1LjQ5NTY2MzEzNSwzLjA3Mzk1MDQ0NzgwNDgyMjRFNywzNjUxMjYzLjU5NzcyNDc1MiwyODE2MTc0LjUzODI0NTEyMyw0OTE0NjQuNjc4MTAzOTE2NCw1OTA5NTUuNTAyODAyNDY1MywxLjM1MDI1ODIwMjQwNTg5MzhFNyw2OTQwNjA4Ljg1NjkxMTI3NSwxMDMzNDA0LjU1NzU5NDgxOTUsMjM5NDQ2MC44OTIyNjU3Njk3LDEwNzcyODIuOTc3NDQxMjY5LDEuMDQ4MzU5MTc0MzkxMTFFNyw1MDA4ODE3Ljk1NjEyNzAxLDIxNzMzOTUuOTIyMjYzMjczNSwzMzExMzYxLjE4MDcwNTE3MiwzNjk0OTQyLjAyNjE1NTA4NDQsNTMxNjk0My43NzUxNzIxNTUsNDQyNzA1NS43MTk0MTUyMiwxMDUyNTQyLjEyODc1NTQxMjgsODMwNTIxMC41OTMzMTY4ODYsNDE0ODU0My43NTA5Njg1OTUsNDY4Nzg3MS4wMTk5NzQ3NzEsMjMxODcyNS40Mjk4NjcwOTcsNzUxMTc2Ljk5MzIxOTExNjEsNjc1NTMwNC42NzM0MzY4OTIsNTMxMjA1LjU4NjIyOTY3OCwxNDIxNzMwLjE2OTU5MTkxODEsMTAyOTU3My40MzY2ODI5NDM2LDcwNDQ2MjIuNDAzNjg3Mzg4LDE1MTc2MDYuNDY5MzAwNTQ2LDE3MTIzNjQuOTYxMjI0ODUyNCwxLjU4ODY4MTkxNDIzNTM5OTVFNyw5NDYyNTg0LjMxODk1MzM1NCwyODUyOTMzLjQ0MDUzNzM5OSwyODY1MTkxLjE4Mzc3MzMxMiwxLjAyNDM5MDg2Mjg3MzQzOEU3LDg3OTQ4NC43MTY1MjczNTY0LDMzMDMyNjQuNjUyODM4NzEzNSw2MjIzMjkuNzU4NTAwMDY1OSw0NzU3MjIyLjY5NDYyODQzNCwxLjc1MjU4NTYxNjgxNDY1MkU3LDE4OTA3NTIuNjY4NjQ4MDI1LDU5Mjc1MjQuMzUyODAwODM3LDUwNDMyMS41NTA1MTM1NjUxMyw0OTUxMTMwLjA3ODkxNTc0Nyw0NDM0Nzk0LjI5Nzc1NDI1NSwxNDUyMTYyLjExODU5NzQzOTMsNDA4MDAyLjAzNzIxMDMzNzI0CisxNixXZWQgOSBGZWIgMTEsNTU2MDMyLjAwMzQ4NDg5NDIsMzg1Njk5Ny45Mzk3MjA0MDg1LDIzMjQyNDUuNDMwNzEwNjU0Miw0NTUzMTMyLjk4MzY4MjczMywzLjE1OTgwOTk0NjI2MzI3MjNFNywzODI1NDU2Ljc2Nzg4MDExNDMsMjk3MjY3OS4yMTg1MTk3Mjc3LDUxMzA2Mi42NDYyMTAyNzQ2LDY0MDUxMS42OTkxMDk0NTQ5LDEuNDE2NjIyNTY3OTMzODc5RTcsNzI3NDM3Mi43ODkzMTU2MzQsMTA4MTE4Ni4xMjM4NjkzMDAxLDI1MzUxMzQuMzg1ODI3NjQxNSwxMTM0OTYzLjkyNDczOTUwMjgsMS4xMDAxNDg0NjcxODk0ODAyRTcsNTI5Mjk3My4wNDQ2NTg3MjMsMjMwOTAxNy44MzQ3NTY5ODQsMzUwNDYzOC41OTY2OTA4MjYsMzkwMDQ2My42ODA5NDQ2MDksNTU5MjMxOS42NDk4NDM3MTgsNDY1ODg1NC43MTQ1NTYwNTksMTExMTU1NS44MDI3NTU3Mzg2LDg3NDA2MTEuODU2OTI4ODkyLDQzNTQ3MzcuMDYwODkzMTcxNSw0OTI5OTg5LjkwOTA0ODE3LDI0NTc2MzQuMzE5NTkwNDk1NCw3OTEzODEuNDEzMjYxMDM3OCw3MTAwODE0LjgzODcyOTA1LDU2MDY4MS43NzIwODY0ODAzLDE0OTg3NDcuMzk4NTIxNTQ0OSwxMDg0NDg0Ljg1MjkzMTk3MDMsNzQxMDAyNy4yMTgzMzc4OTEsMTU5NzkxNy4yMTAxMjA5ODk3LDE3ODkwNDYuMDkwNTc4NzE1LDEuNjcxMTAzNjkyNTMwMzQ3NkU3LDk5NjYwOTAuMjMxNjM4Mjg0LDMwMTE2MzkuMDMxMzg3NzM2LDMwMTM1ODUuOTk2ODIyMDk1NSwxLjA3ODY2MTMxMDk1MDg2OEU3LDkyNDU1OS4wNzM3MDkzNzU5LDM0OTExNTUuNzQ0ODEwMzU0LDY1NzQ3Ny4zMzgyMDQ5MDUsNTAwNTc1NS40MjU4NzYzMDEsMS44NDE0MzkwODA3MDI1NjM3RTcsMTk4MjQ1MS4xOTUwOTMwNDY0LDYyMzQ2MDEuMDczODU4MjIsNTMyMDg5LjQ3MDQ0MTU2MzIsNTIwMjk5OS4yODAxNjQ5ODUsNDY4MTQzMy4zMjkwMzE4MTksMTU0NTczMy4wMDI5NDQwNTQ1LDQzMDc3Mi45Njk5NDEwMzY0CisxNyxUaHUgMTAgRmViIDExLDU3NTM4NC4zOTU4NjU3MDM5LDQwMTY1NzMuMTcwNzg2MjIzNCwyNDE4NzYwLjcyMzc0MDc4Myw0NzEwNzk0LjU4MDc3OTQxNCwzLjIyMzAzMjgwMzIwMzIzNzRFNywzOTU1NDM3LjgyODI0MDMyMDYsMzA5MDA2Mi44MjI4MzIzODUsNTI5MTY1LjYwOTIzMDYyMTEsNjc4MzMwLjk4NDQ5OTQxMzYsMS40NjYxODQ1NTg5NzgzNTNFNyw3NTIzNDc2LjA3ODk4Mzk1MywxMTE2ODE2LjA3NTU5MjQ4NywyNjQwODY4Ljc4MjU1ODEzMywxMTc4MTY2LjgzMjU3MDg4NSwxLjEzODgzMTYxNDA2OTI1NzlFNyw1NTA2MjY1LjExNTEwMjc4NiwyNDExMTk4LjIxMTczMzgyNzQsMzY0OTg3NC45MzkxNTc0MDgsNDA1NDYxNi43MTc4MTAwNTksNTc5ODMzMC40OTA4MDE2NTQsNDgzMjMzMS45NjEyMTUzNDQsMTE1NTgzMi43NzMwMDU4OTQ5LDkwNjY0NzguNTI3MjExOCw0NTA4Nzc5LjIwNzczNzE5Nyw1MTExMTAzLjMzMzU5MjkwMiwyNTYyMTIyLjAzMTIwNDk3NTcsODIxNDk0LjAwNjQ4NDY5ODYsNzM1OTE4MS42MzE1OTQzNjgsNTgyNzg4LjYwOTA3NzMzMjQsMTU1NjQ1Ny44NDEyMTU2ODY2LDExMjU2MDcuNTM3MDYzODk3LDc2ODM0MDMuNzg3MzAwMDQxLDE2NTgwNDQuMjQ1NDIxMDg4NSwxODQ2MjA4Ljg2NTQ4Mjc2MDEsMS43MzI3Njc3NTA4NDY4MTMyRTcsMS4wMzQzMTI5NjE4NTQwNTk4RTcsMzEzMDY3Ny44NTU4MjM5MTQsMzEyNDYwMS4zMjYxMzI1NiwxLjExOTI5NDEzMjI4MzQ2NTZFNyw5NTgyNjcuMjg1NjY3MjYxNywzNjMyMjA0LjQzNzYwOTA2NDQsNjgzODU1LjI2MjczODcyODEsNTE5MTc0MS40NDAxMzk2OSwxLjkwNzg2MjQ0NzQwNjY5NDdFNywyMDUwOTA2LjE4Njc4OTI0NSw2NDY0MzI5LjU5NDEzMTE1NSw1NTI5MDkuMDYzODIwODI4Nyw1MzkxMzA4LjM1NDY3NTQzLDQ4NjY0MjUuNzY5NzI1OTE4LDE2MTYzMjIuNjc5Njc3NTE0NCw0NDc4NTQuNjUzNTM2OTk4MjYKKzE4LEZyaSAxMSBGZWIgMTEsNTg5NjgzLjI4OTE4NjYxNjUsNDEzNTA3Ni45Mjc2NjQzMzg2LDI0ODg5MTEuMjE3NDYzMTYyNyw0ODI3MjcyLjA3NjUyMjk2NCwzLjI2OTIzMzY0NTI5MDE0MUU3LDQwNTE0MjYuNzQ4NTA0NTk0NCwzMTc3MTA2LjI4OTMxNTMwNSw1NDEwNTMuODY1MzM2MjIyOSw3MDY3NjUuOTU1NTAyMjUyOCwxLjUwMjgwODk3NjAxMzI3NTRFNyw3NzA3NDYzLjk2NzU2MDcyMSwxMTQzMTE1LjczMTEzMjk2NDQsMjcxOTQwOS40NzQ4OTIzMTcsMTIxMDE2Ny4xNTcwMzkyNDcyLDEuMTY3NDIwNTA5NDQ1MTc1RTcsNTY2NDUyNy45NjI0NjE4MTE1LDI0ODcyNDQuOTM3NjI0Mzg0NiwzNzU3NzM2LjAyMzAyNDM1MSw0MTY4OTI4Ljg5OTgwNTM2MTQsNTk1MDc3NS4yOTQxNjYzMzYsNDk2MDc0Mi4zNDA0MDQxNjYsMTE4ODY3NC4zOTI3OTUxNDI3LDkzMDc2OTguNDU2Mjk5MDEsNDYyMjY0MS43ODcyNjUzMzYsNTI0NTExMy45MDQ1OTczNCwyNjM5Nzg0LjU2NzYwMTQ1LDg0Mzc5OC4wOTU2MDk1OTc3LDc1NTAzMDIuMDg5MTE3MDU1LDU5OTE4MC43MzE5MDEwNzEsMTU5OTIxOC43NDkyOTA2NTcyLDExNTYwNjMuNTIyODE1NzM1OCw3ODg1NzA2Ljc4MjgxNjAwOCwxNzAyNTY0Ljg4NTQwODcxNCwxODg4Mzk4LjYzOTQyNTA2OSwxLjc3ODQwMDM5NTI3NDM2MkU3LDEuMDYyMjM1MDY2MzIyOTg1NUU3LDMyMTg5NTEuNDA5MDU5NzM3LDMyMDY3NTAuOTQyMTA4MDA5NSwxLjE0OTM4MTM5ODA1NTc1MTRFNyw5ODMyMDMuNTA2NDQ2NjQ2OSwzNzM2ODcxLjE4NTQwODI0LDcwMzQyNC45ODgyNTY2NTAzLDUzMjk0MDIuMTg1MzQ3NjE5NSwxLjk1Njk4NTcxOTkyMTk0MUU3LDIxMDE0NzYuMjc0MDIxNjMxNiw2NjM0MzI2LjMyMzkwMTk1NCw1NjgzNDMuMDQ4NDYxNTAzMSw1NTMwNTg0Ljc2Nzk3ODY4Miw1MDAzNjA2LjMxNTQyMjcwNiwxNjY4OTEzLjA5NDM4MDAyMjMsNDYwNTIyLjg4NzkwMzcxNjI0CisxOSxTYXQgMTIgRmViIDExLDYwMDE1Ny4xNjQ4MDg1OTAzLDQyMjIyNDMuNDMzOTUxMzIsMjU0MDQ4Ny42MTIwNDEzMzgsNDkxMjU4My4zMjc3NDkxMDQsMy4zMDI3Nzg3NDY0NDU2MzcyRTcsNDEyMTcwOS44NTE2OTEyMDI3LDMyNDEwNTMuOTI5MDc0NTkxNSw1NDk3NTkuMjQ1MjQzNDk5Niw3Mjc4OTMuNjg2NjU3MTYwMiwxLjUyOTYzODg1NzMzMjMxNjJFNyw3ODQyMTk2LjA2MTExOTM2NSwxMTYyMzY2LjExOTcwNzgwOTUsMjc3NzE5My4xMDYzNTk0MjIsMTIzMzY1NC43Mjk3MzgxNTEyLDEuMTg4MzY1ODg5Nzk4NzMyOEU3LDU3ODA4NTkuMTE2NzMyMDU3LDI1NDMyODIuNTc4MTM3MDkzNywzODM3MDc3LjY3MTY1OTA4OSw0MjUyOTExLjc0MTMxMzgyMyw2MDYyNTc3LjM0MDQxMjUsNTA1NDk0MS44ODMyMDczNDEsMTIxMjgwNy4zNjU5ODY4ODIsOTQ4NDY1OC4zMjI2NzQ4OTMsNDcwNjA3Mi4yOTE4NzYwMTIsNTM0MzM5MC4wMzQ2ODM5ODIsMjY5Njk1MS4yOTMxMTMwMTcsODYwMTY4LjY3NDcxMTA3MjEsNzY5MDQyOC4yMjU0MzcyMjIsNjExMjIyLjk1ODk0NDE3OCwxNjMwNjEzLjQzMDE5NTM3NzcsMTE3ODQxNS40NDAzMTgwMjM4LDgwMzQwNzkuNzE1NTg2MjI0LDE3MzUyMzIuNzY3MjE4OTg4NiwxOTE5MjgxLjgxNDUyODMwNjIsMS44MTE4Njg0MTk0NzI1M0U3LDEuMDgyNzI2MTgwOTY2ODE2N0U3LDMyODM4MDQuMzkwMjY1OTE2NSwzMjY2OTk4Ljk1MDU2MTc2NDcsMS4xNzE0NTkxMDczMjUwNDU2RTcsMTAwMTQ4Ny4xNDcxOTU2Mjc2LDM4MTM4MTEuNzEzNzYzMjg3Myw3MTc4MDguMDY3NjYyOTcxOCw1NDMwMzgyLjI5MDM2MzEzNiwxLjk5Mjk5NDk2MDk1ODMwNUU3LDIxMzg1MTMuMzMwMDE3NTkwNCw2NzU5MDAxLjU3NTQ3NzQ3OCw1Nzk2NzkuMTY1ODExMTc3LDU2MzI2ODcuMzk2ODY0NDc3LDUxMDQzODkuNzE2NDkyOTQ3LDE3MDc2OTkuMzYwODk4MTk0MSw0Njk4MzAuNzgzMjc0NDY4OTcKKzIwLFN1biAxMyBGZWIgMTEsNjA3NzczLjgzMTU4MzQxNjksNDI4NTg1My41NDAyNTcwNCwyNTc4MTExLjI3MjgyNzU0MTUsNDk3NDYxNy41NjAyMTI4NTcsMy4zMjcwMDAxNTIzMTE0NDU0RTcsNDE3MjgwNC4wOTQzNzY5MDg2LDMyODc2NzIuMDAyODE5MzI2Miw1NTYwOTAuMTMyMjQxMTAxNyw3NDM0NDEuNjk0Njk0NzI1MywxLjU0OTE1MTI2NzMxMzA2ODRFNyw3OTQwMTUyLjE4NzgxNTc3MiwxMTc2MzU3Ljc1MjUxMzg4OTcsMjgxOTM2OC41MjA1MDg1NTM0LDEyNTA3NjMuNzk2OTU3NDk2MywxLjIwMzU5OTkzMDkyOTEyMDZFNyw1ODY1NzAyLjcwMDcyNjQwNywyNTg0MjM4LjIzMTQ0NDQwNCwzODk0OTc5LjY4MzQzOTk4MDMsNDMxNDEzNi43MDk3OTM4NjUsNjE0Mzk2Mi43MTA5MTYxOTEsNTEyMzUyOC40NDEyODc5NTgsMTIzMDQwMy43NDY0NTc5NTA0LDk2MTM1MDUuNzgzNTE5Mzk1LDQ3NjY3NTkuMTkxMzY2NTA5LDU0MTQ5MjUuNDQzOTkxMTA5LDI3Mzg2OTQuMzcyNjgzMDk0LDg3MjA5My40MDg0NzY4MDgsNzc5MjQwNy4zMDE2NzY0NzEsNjIwMDAxLjUwMjgyMjE4NTksMTY1MzQ4Ny44NDk5MzkwMDc4LDExOTQ2OTUuOTQ1NDc4MDg5NCw4MTQyMDg5LjczNjI0NzkyNSwxNzU5MDIzLjMxODU5OTk4NzgsMTk0MTczMi4xMDAxMzk1MTUyLDEuODM2MjMyMDAzNTk5NDE4N0U3LDEuMDk3NjUwNjE0Njc3MzA1N0U3LDMzMzEwODMuNDcyNDQyMTk5NSwzMzEwODU1Ljk5MDIxMzI1NiwxLjE4NzUzNzY3Njc0OTY3MDlFNywxMDE0NzkzLjg3NzYyODkxMTgsMzg2OTkyOS44MTAwNzg4OTc1LDcyODI5Ny4wMzQxNDIxODI0LDU1MDM5MDIuNDk5NzQwMDM1LDIuMDE5MTk2OTg3ODQ4Mzc3MkU3LDIxNjU0NDMuODM3MjM3NTI0LDY4NDk3NTguMzM2OTM4ODUsNTg3OTQxLjU5ODE4MjgzNTMsNTcwNjk4Ni43NDU2NTIyNTcsNTE3Nzg2Mi4zNjQ1ODMyMDIsMTczNjA2Ny4wMzI0Nzg0MTQsNDc2NjE2Ljg5NTY5MzY0NTQ2CisyMSxNb24gMTQgRmViIDExLDYxMzI3OC43MTUyNTI5NDc1LDQzMzE5NjMuOTgzNTgzMzc1LDI2MDUzNzUuMzg3NjE2NTE2Niw1MDE5NDQ5LjY1NjUwNjkzMDUsMy4zNDQ0MDcxNDUzNzM5OUU3LDQyMDk3MjMuMjI1NDc4NzA2LDMzMjE0MzUuMjI4NTI1NjAyMyw1NjA2NjcuNTI5NjAzNTc3OCw3NTQ3OTIuNjYwMTQ4NDM2OCwxLjU2MzI1NDYwMDAxNDgxOThFNyw4MDEwOTM2Ljk1OTczMDI5MiwxMTg2NDY2LjU1MjgzNDI4NTQsMjg0OTk0NS44NDM2NDA0MTAzLDEyNjMxNDYuNzA3NjYyODQ4OCwxLjIxNDYxMTYyMTUxMjUxNjRFNyw1OTI3MTc0LjMwNjA5NDE2NywyNjEzOTY1LjEzNDc3MjI2MDcsMzkzNjk1My42OTgzNTU2MTgsNDM1ODQ3OS43MjUyNDIxMTIsNjIwMjgzMi42OTEyNjA0MTQsNTE3MzE0OS41MTg4MTQxMzM1LDEyNDMxNTAuMDQyNjk4NTA4OCw5NzA2NzI2LjQ3MzEyNDkwNiw0ODEwNjI5LjMzNjk2NTA1Nyw1NDY2NjY4LjA4ODAxMTczOCwyNzY4OTY5LjM5NzU5NDY2NDIsODgwNzI0LjAyOTgwNjcwMzMsNzg2NjE1OC42NjU4MzA0NDgsNjI2MzU5LjIwMTY1NDgyMjcsMTY3MDA0Ni45Njg3MDkyNDMyLDEyMDY0NzguMzU3ODkyMTExMiw4MjIwMjIwLjU2Njk1Mjk2LDE3NzYyMzguNDg5NzU4MDE1LDE5NTc5NTYuNTk5Njk3NzkzNiwxLjg1Mzg1NTg2NDAxMTIwNzZFNywxLjEwODQ1MTE3NzU4MzcwOUU3LDMzNjUzMjYuMDYzODIxOTM5LDMzNDI1NzkuOTEyNzUyNzc1LDEuMTk5MTcyNTc3MjcyOTk5RTcsMTAyNDQxNy42MzA4NDE1OTQ4LDM5MTA1OTAuOTcxMzE4MTI1Myw3MzU4OTUuOTU3MTA0MDk1Niw1NTU3MDkwLjk2NzE4MzA5LDIuMDM4MTQzNzE0MjA3NjgyNEU3LDIxODQ5MDUuOTAyMzkyMDk0LDY5MTU0MDcuMzczMzk4MTM3LDU5MzkyNC42NTk1OTgzNDk1LDU3NjA3MTUuNTM5NDg4MjE5LDUyMzEwNzUuNzg5MTg4MDQ1LDE3NTY2NjkuNzc4OTIwMTI5Niw0ODE1MzIuMTM2NjEwMjExNjMKKzIyLFR1ZSAxNSBGZWIgMTEsNjE3MjM2LjM4NzIxNjUyNzUsNDM2NTE5OS4zOTYyNDg4NCwyNjI1MDIxLjIwMTA0MDEyODcsNTA1MTY3OS41NzE0NDk0ODQsMy4zNTY4NjEzNzMyNjk5ODFFNyw0MjM2MjYwLjUyMjMzMzc1NywzMzQ1NzUyLjQ5ODMwMDI2OSw1NjM5NTkuNzI4NTQ3OTA4Niw3NjMwMjQuMDQ3MjI4MTE4OCwxLjU3MzM5NDU3Mjg1NTc0NjJFNyw4MDYxODE5LjQ4NzM2ODUyNywxMTkzNzMyLjEyNDYyNDQxODMsMjg3MTk4OC4yNDYzMzYxMzIzLDEyNzIwNjAuMDQ5NjYzMDYzOCwxLjIyMjUyOTIwODQwMDE5ODRFNyw1OTcxNDYyLjU2ODEzMDY0NiwyNjM1NDE1LjU1NjA3MDQ0MzcsMzk2NzIwOC40ODQzODE3MTg2LDQzOTA0MTcuMzE4NDI5NTU2LDYyNDUxODYuOTYxNTg0Mjc0LDUyMDg4NTUuMjYzMTI0OTQ0LDEyNTIzMzEuNTk3MTU0MDMzOCw5NzczODA2LjM0MDQ5NjYyLDQ4NDIxNzQuODczNjE2MzUzLDU1MDM4OTMuMDg5NDA0ODM1LDI3OTA4MDAuODA1NjkzMTIzLDg4NjkzNi4zOTkxODY0NTE3LDc5MTkyMTAuMTA5NDUwMzg0LDYzMDkzOC4wOTMxNjQ4ODIzLDE2ODE5NjguNTM1NjYzMDc4MywxMjE0OTU4Ljk0ODc0ODYxMiw4Mjc2NDMzLjM1MDY0OTcxOCwxNzg4NjI3LjkzNjQzOTI2NSwxOTY5NjIwLjc4MjUxMjMxOSwxLjg2NjUzNTczODc2NjIxODNFNywxLjExNjIyNDc5MDU2MjA4NzlFNywzMzg5OTg4Ljk3Nzk0OTQ5NCwzMzY1NDAzLjgzMTUwMDc1NiwxLjIwNzU0NjE0NDUxMDkwOTJFNywxMDMxMzQwLjQ2MjUyMDk5MjcsMzkzOTg4Ny4yMzQ5NzUwMDIyLDc0MTM3MC4zMzY0MTMxODk5LDU1OTUzNjIuNDQzMTc0NTIwNSwyLjA1MTc3MTAyMjc4NjUxOTdFNywyMTk4ODk2Ljg3NTMxNDg3OSw2OTYyNjM5LjAzNjMxMjA1OSw1OTgyMzMuMjAyNDI2MDEwNCw1Nzk5MzYxLjM2MTY5MDA5Niw1MjY5NDAyLjExNTI1NTc0NSwxNzcxNTQ0LjE3ODI4MjY5NzUsNDg1MDcyLjQ3ODE5MjE1OTUKKzIzLFdlZCAxNiBGZWIgMTEsNjIwMDY4LjU3NjcwNDMzNDEsNDM4OTAzNS45Nzg5NjQxODksMjYzOTEwNy42OTg1NzI2MjM1LDUwNzQ3NDMuMTY3NDk2Mjk2LDMuMzY1NzQ0MzQ0NDM2Mjk0RTcsNDI1NTI0OC45Mzc3MjU3ODYsMzM2MzE4MS4wOTEwNzM5ODksNTY2MzE4LjE2ODA1Mzc4MDgsNzY4OTU5LjA0MDY4NzkzMzksMS41ODA2NTEyMjA0ODE1NzM4RTcsODA5ODIyOC43MjcyNDYyMzMsMTE5ODkzMS4yNTI0NzYxOTg4LDI4ODc3OTkuMDI1NzU5NDUzNCwxMjc4NDQ1LjA4MDQ3NTI1OTMsMS4yMjgxOTU2NDE1NDEwNjk3RTcsNjAwMzIxNC4wNTE1MjU4MTcsMjY1MDgxNS4xMzkxMzcwODkzLDM5ODg5MDcuODc0MjI4NDYyNiw0NDEzMzA3LjgxMDEyNjA3MSw2Mjc1NTE0LjEzMTY5MjMzMSw1MjM0NDI1LjM1MzE4Mzc1MSwxMjU4OTEyLjk5OTk4MTA1MzYsOTgyMTg0NS4yNzA2ODI1ODQsNDg2NDc1Mi40Nzk2NTE1MzgsNTUzMDU0Ni42MTA4NjI1ODcsMjgwNjQ2NC42NjMyNjI1OTU0LDg5MTM4Ni41NzcxNTMxNjIxLDc5NTcxOTEuMTQzMjg1MzU5LDYzNDIxOS43OTA0MDc3ODIsMTY5MDUwOS44NTkyNzAxMTIxLDEyMjEwMzMuNjU5Njg5NjQyNSw4MzE2Njg0LjQ1Nzk4MTI4NCwxNzk3NTAxLjY2NjI2MTk3MzMsMTk3Nzk3MS41NDc3Mjk1MTI0LDEuODc1NjE1MTczMjY4ODQ4M0U3LDEuMTIxNzkyOTE0MDk4OTg5NkU3LDM0MDc2NjUuNTQ5OTYyNjU2NiwzMzgxNzQ2LjU3MzAxMTEwNDUsMS4yMTM1NDM2NTc0ODA3ODRFNywxMDM2Mjk2LjgzMTY5OTk1NzMsMzk2MDg5MS4zMzI1ODk1MDE1LDc0NTI5NC44MTg2NDYxMTI1LDU2MjI3NjkuMTYxNzY4NjIxLDIuMDYxNTI2MjMzNDQyOTEwNEU3LDIyMDg5MDguNTkyNjkyMDM0Myw2OTk2NDU4LjY5ODg5NDUwNSw2MDEzMjAuODAxNDc0MzU4OSw1ODI3MDI3LjMwMjA0NjM2NSw1Mjk2ODcxLjUyMDE5ODUyOSwxNzgyMjI3LjY4NTI2NTg0Myw0ODc2MTAuMDUzNzc1NDk4NQorMjQsVGh1IDE3IEZlYiAxMSw2MjIwODcuMTk2ODM5NDc4Nyw0NDA2MDU4LjIwNTA5Njk0NCwyNjQ5MTY0LjkxNDc3NTY3NCw1MDkxMTgxLjEzODEwNjc2OSwzLjM3MjA1OTQwNjg3MDY1OTRFNyw0MjY4NzgxLjcyMDQwNzk1MSwzMzc1NjE5LjcxNDA4OTE5MTUsNTY4MDAxLjExMzU5ODgwODQsNzczMjE3LjEyNTA0ODIzNDcsMS41ODU4MjM0OTM3NzA0ODYxRTcsODEyNDE3Ny40MjMwNDA4NzYsMTIwMjYzNy4wMTczOTAwOTY4LDI4OTkwOTEuMDM2NTc1OTc4NiwxMjgyOTk5LjkyMzU0MzYzNzksMS4yMzIyMzQ2MDAzNDA4ODMyRTcsNjAyNTg4MC43MTQ3NjA3MTMsMjY2MTgyMS45NzI5NjM4NDAyLDQwMDQ0MDQuMjE3MjM0NjgyOCw0NDI5NjQ0LjcyMDQyNzg1MSw2Mjk3MTQwLjE4MDM5MzE0MSw1MjUyNjYxLjM1NTEwODIxLDEyNjM2MTAuNjExMzU5MjQsOTg1NjEwNi4wMTY2ODIyNSw0ODgwODQ2LjE5OTUxNjk0LDU1NDk1NTIuNDQ2NDcyMjg4LDI4MTc2NTQuNTQ0NTc0NDAzLDg5NDU2MS4xNTMzMTQ2OTczLDc5ODQyNzEuNTY4NTM4NTM4LDYzNjU2MS44NjIxMzE4NTg0LDE2OTY2MDMuNzgzMjgxNDU2NCwxMjI1MzY2LjkzMDAwNDYyMjYsODM0NTM4Ny42NDc0OTk5NTIsMTgwMzgzMC45Nzc3MTkxMDU4LDE5ODM5MjYuODE3MzIxMjAyNywxLjg4MjA4OTc2MDQ1OTczMkU3LDEuMTI1NzY0NzExMTg3NzAzNUU3LDM0MjAyODEuMzExOTk4MzUxLDMzOTM0MDAuNDQ0MjM3ODU1MywxLjIxNzgyMTUyMjcwMDQ3MjRFNywxMDM5ODMwLjc4ODcwMzg1NDcsMzk3NTg4Ni4xODQ0MjUwNDYsNzQ4MDk2LjI1NzUzODcyOTUsNTY0MjMxNC41MTc4MTY3NTcsMi4wNjg0ODEwOTIxMjA0NjZFNywyMjE2MDQ0LjA5Mzk3NjIyNyw3MDIwNTc1LjI3OTk1MzI2Miw2MDM1MjQuMTM1MDM5MjE5Myw1ODQ2NzUyLjAzMzk3NzUsNTMxNjQ3Ni4zNTkwNjE0MjEsMTc4OTg2Ni44MzI5ODIxMDczLDQ4OTQyMS4xOTUwOTM0Mjc2NworMjUsRnJpIDE4IEZlYiAxMSw2MjM1MjAuODM1NDI0ODg1NSw0NDE4MTY4LjEzNjc2MTE2OCwyNjU2MzE4LjM2NzM3MjAwOTQsNTEwMjg1NS4yODMxNzgwNTgsMy4zNzY1MzU3NDk5NzAyNDNFNyw0Mjc4MzkyLjM1MjMyMjA2MiwzMzg0NDYzLjk5NjMyMDE3MDQsNTY5MTk3Ljg4NDc3MjQwMjYsNzc2MjU4LjkxNTcxNjQ5OSwxLjU4OTQ5Njk2NTQ2MzYzNzdFNyw4MTQyNjA1LjU2MzEyNjMzOCwxMjA1MjY5LjE1MjEyODQ3NTMsMjkwNzEyNS4xNDEyMzQ3MDksMTI4NjIzNy4yNDExMDYzODIsMS4yMzUxMDMyNDAwNzQ0Mjk1RTcsNjA0MjAwMS4yNTY5MTg2ODMsMjY2OTY1OC41ODM3NzgwMyw0MDE1NDI4LjgxOTE3MTU3OTYsNDQ0MTI2MC45MzI0MDk1MDUsNjMxMjUwNS41MzkzMDMzMDIsNTI2NTYxOS40NDgxNjI0MTEsMTI2Njk1MS4xMDcxOTA3ODUyLDk4ODA0NTEuMjM1OTk1MjQ4LDQ4OTIyNzcuMDQ4MTQwMzYyLDU1NjMwNTUuNzg1MDUwOTMzLDI4MjU2MTcuNzY5MTU4NjQxMyw4OTY4MTcuNDQ3OTQwNzAxOSw4MDAzNTEwLjA4MTQ1NDI0Niw2MzgyMjcuMTI1OTMwNjgxMSwxNzAwOTM1LjUzNjg2OTY5NiwxMjI4NDQ2LjYzODU3MTU1MzIsODM2NTc4MS42MjIzNTU5MzksMTgwODMyOC45Mjk3NzAzNTI4LDE5ODgxNTkuMDcwMzY2ODE5NCwxLjg4NjY5MDA0NDQ5ODQyRTcsMS4xMjg1ODc0NDcwMTA5MzA2RTcsMzQyOTI1MS42NDcwNTIxMjUsMzQwMTY4MC41NDc2MjYyOTQsMS4yMjA4NjE2NDA4MjY5NTM4RTcsMTA0MjM0MS40MzIxODQ1NTM3LDM5ODY1NTAuODUxMjY1MTYsNzUwMDg4LjU0MDM4OTMzNSw1NjU2MjAyLjcwMjQzNjQ0NywyLjA3MzQyMTYwNzQ3OTk0ODZFNywyMjIxMTExLjYzOTk4OTUxNTgsNzAzNzcxMC4yMDg5MTkyNjYsNjA1MDkwLjYxNjMwMjkwMTYsNTg2MDc2NC4yNjA1NzQwMTMsNTMzMDQxNi4xNzk2NzI1MjUsMTc5NTMwNy43MTAxOTY0NDYsNDkwNzA5LjAzOTk3NjU2MzI1CisyNixTYXQgMTkgRmViIDExLDYyNDUzNS43OTEzMTk2MzgsNDQyNjc1NC40MzAwNDE1NzUsMjY2MTM4OS40NTE2MDI3MSw1MTExMTE5Ljk3ODA4OTc2OSwzLjM3OTcwMDM3MDAyNjAwMkU3LDQyODUxOTYuMTM3MjczNDEyLDMzOTA3MzEuNzg2NDA0OTM3NSw1NzAwNDYuMjk2NjA1MTY3LDc3ODQyMy41NzkyNzI4NzIyLDEuNTkyMDk3Njc0OTU4ODUyMUU3LDgxNTU2NTEuNTcwMzk5OTI2LDEyMDcxMzIuODkzMDMwMTcxNSwyOTEyODIyLjAzODM1NDIzODUsMTI4ODUzMC42MjM2MDkzNTYzLDEuMjM3MTM0MTk0MTMxMTE4MkU3LDYwNTM0MjguMDIzNDcxNzI0LDI2NzUyMTguODkzMzg3NDI0Myw0MDIzMjQ1LjcxNzkyMTYzMSw0NDQ5NDkzLjIxNTA3OTAzOSw2MzIzMzg3LjQwMzk4NTk2OCw1Mjc0Nzk3LjMzMDE5ODEwOCwxMjY5MzE4LjY3MzIxODM0MjIsOTg5NzY5NC41MTYyNTQ2MjgsNDkwMDM3MC4xNTIxNzU2MzcsNTU3MjYxOC43MzIwMTg1ODI1LDI4MzEyNjUuNTQ2NDMzMjU5LDg5ODQxNS44NDc1MzYxMjQzLDgwMTcxMzMuNTc2Nzg1NjU5LDYzOTQwNy4yNTEzOTIyMjI4LDE3MDQwMDQuNTg4NjE4MTQ4OCwxMjMwNjI4LjI4NjI4NDY1MzcsODM4MDIyNC45NzM0MTU3MDQsMTgxMTUxNS4wMTk4MDQ0NzUsMTk5MTE1Ny41MjY5MjkzNDc1LDEuODg5OTQ4MDQ3NTA5OTc0NkU3LDEuMTMwNTg3MDEyNzM2NTYxMUU3LDM0MzU2MDguODMzMTcyMzkwMiwzNDA3NTQ0LjU4MDMxMTY3MTQsMS4yMjMwMTUxMDc1MjgzNTI3RTcsMTA0NDExOS4zMzg1ODAyOTYxLDM5OTQxMTAuNTIwNTY2MTIzLDc1MTUwMC42NzAzMTU4NjI5LDU2NjYwMzkuMTUxNDA2NywyLjA3NjkxOTk0MjUyMjk5NjdFNywyMjI0Njk5LjE4Mjg2NDU0OCw3MDQ5ODQ1LjMyMjI3MDY2Miw2MDYyMDAuNjQ5OTk3MjE4Nyw1ODcwNjg2LjQzMzMzMTkyNCw1MzQwMjk1LjE2NDEyNzUwNCwxNzk5MTY5LjQzNjkwMTI1ODUsNDkxNjIxLjc1MzEwMjAxMDYKKzI3LFN1biAyMCBGZWIgMTEsNjI1MjUyLjI5ODAwOTI1OTQsNDQzMjgyNC4wOTA2NTU2OTgsMjY2NDk3My42MTUwMjIxODA2LDUxMTY5NTQuMzc4MzY5NDY1NSwzLjM4MTkzMjI5OTUwNDI1OEU3LDQyODk5OTkuMjY3NjQyNjcxLDMzOTUxNjAuNTI3NTQ2NTc4Niw1NzA2NDYuMDc2MDAyODI5Miw3Nzk5NTguODQ3ODEwNDc5NiwxLjU5MzkzMzY2NTYyMjQ3MzdFNyw4MTY0ODYxLjI3Nzc0NjI5MiwxMjA4NDQ4Ljg3MjMwNDc1MTUsMjkxNjg0OS40OTIwNTAyNywxMjkwMTUwLjU1NTM3MDcyMjIsMS4yMzg1Njc5ODQ0MDMzOTY4RTcsNjA2MTUwMy41ODQyODMwMTUsMjY3OTE1Mi4wMDA0MDUwNzU1LDQwMjg3NzEuNTc5ODU1OTI4Nyw0NDU1MzEwLjA4OTIxMjcsNjMzMTA3MS43NDAwMzIwNTUsNTI4MTI3OC45MjUwMTI5NTEsMTI3MDk5MS43MDMwMTU0ODQ2LDk5MDk4NzIuMTY5Njg0NDEyLDQ5MDYwODMuNzY0NDUwNjY1LDU1NzkzNzEuNTYyOTM1MTg3NSwyODM1MjU5LjAwNjYzMzM3OCw4OTk1NDQuODczOTU4NzIzOSw4MDI2NzUzLjA4OTI0NDIyNCw2NDAyNDEuMTAxNDAyNTY2OSwxNzA2MTcyLjYzNzIwMjYyMSwxMjMyMTY5LjI0MjI2NzA1Myw4MzkwNDI0LjQwMjU3Nzc1NiwxODEzNzY1LjI5MTgxMjA3OCwxOTkzMjc1Ljk2NjU1Nzg1NTcsMS44OTIyNDg3NDc3ODQwNTg0RTcsMS4xMzE5OTkzMzEzMzM0NjFFNywzNDQwMTAwLjc4MTg3MjU0MiwzNDExNjg1LjUyNDkwNjE2NTQsMS4yMjQ1MzYwNzIzMzc0MDU2RTcsMTA0NTM3NC43MzA2NTg1NzIsMzk5OTQ1My4yNDU5ODkyMjI1LDc1MjQ5OC42MTMzODgwNzc3LDU2NzI5ODUuNzE2ODQxNDE2LDIuMDc5Mzg5OTY4NzAyMDMzNUU3LDIyMjcyMzEuNzc1MTM2MzcxNiw3MDU4NDE0LjY2ODMwOTA2OCw2MDY5ODQuOTE4NjkzNjQwMyw1ODc3NjkyLjIwNjI3NTEwNTUsNTM0NzI3NS41NzcyMDU2NjgsMTgwMTkwMS44NTEzMDAwNzI5LDQ5MjI2Ni42OTAxMjgyNzEzNQorMjgsTW9uIDIxIEZlYiAxMSw2MjU3NTYuODIwOTEwMzQ0Niw0NDM3MTAzLjE2NjkwMjk2MywyNjY3NTAwLjA0ODM2NTQzMSw1MTIxMDYyLjYxMDA1ODgxMiwzLjM4MzUwMzAwMDUwMDU4OTZFNyw0MjkzMzgxLjQyNTE2ODk3LDMzOTgyODEuNDk3NDQyNjg5Myw1NzEwNjkuMDE4MDIyNDg3Miw3ODEwNDQuNDQzMjgzODYyOSwxLjU5NTIyNjQ3NjA2MDkzNjhFNyw4MTcxMzQ2LjIzNTEyMjcyMiwxMjA5Mzc1LjczODgxNTkxMDYsMjkxOTY4OS4wMjQxNjgzODU3LDEyOTEyOTEuNzg1NDg3MjI1LDEuMjM5NTc3NTk3OTY3NTczNEU3LDYwNjcxOTUuNDk3OTcwODkyLDI2ODE5MjYuNDM5MjIwODAyLDQwMzI2NjcuMzM3MzI1NDMsNDQ1OTQwOS4zMTgyNDE2MjUsNjMzNjQ4My45ODA4MTc4MjYsNTI4NTg0NC4zOTI1ODgxLDEyNzIxNzAuNzg5MzcxMDIyNyw5OTE4NDQ5Ljg3MDIxODgyNSw0OTEwMTA3LjExOTI2MjMxOCw1NTg0MTI3LjYzNzk3NDcyNywyODM4MDc1LjA0MzM5NzU0Miw5MDAzNDAuMjYyMzc5MjIzNCw4MDMzNTI3Ljc4MjQ3NTQxNzUsNjQwODI4LjcxNDc0ODYxNzcsMTcwNzcwMC4xNTQyNDU0NTQ2LDEyMzMyNTQuODAxMzU0OTU4NCw4Mzk3NjA4LjE0ODc2NTI2OCwxODE1MzUwLjQ0ODg5Mzk5NTUsMTk5NDc2OC45MDg5MDA0NjQ0LDEuODkzODY5MTk4MjE5MjQxNkU3LDEuMTMyOTk0MjUxMTg3MjY2RTcsMzQ0MzI2Ni4zMjEzNDU2NjY0LDM0MTQ2MDIuMDgwMDI5OTgzLDEuMjI1NjA3NDkzMjA2Nzc4NEU3LDEwNDYyNTguODcxMDQ5MzA3Niw0MDAzMjE5LjA1NDg2MTEzMiw3NTMyMDEuOTY4NjA0Mjk1Miw1Njc3ODc4LjYyMDQ3OTkyNiwyLjA4MTEyOTQzODE0OTk4NkU3LDIyMjkwMTUuMDcyMzA3OTgxLDcwNjQ0NTAuMjUwNTE0ODY4LDYwNzUzNy41NTYwNTIwNzM3LDU4ODI2MjUuOTgwMjc5ODM1LDUzNTIxOTQuNzYxNzg2OTY2LDE4MDM4MjkuODMxNDk2ODc0Niw0OTI3MjEuMTk4OTEwMjk4NDcKKzI5LFR1ZSAyMiBGZWIgMTEsNjI2MTExLjI1MzYzOTM3OTksNDQ0MDExMi41Mzc2Njc5NzIsMjY2OTI3Ni41ODExMDg1MDc3LDUxMjM5NDguNjgzOTA3ODMsMy4zODQ2MDYxNjk0OTEzNTY2RTcsNDI5NTc1Ny41MTMwMjUxNDcsMzQwMDQ3NS41ODA3NTU2OTksNTcxMzY2LjU3NzYxNzUzOTIsNzgxODA5Ljk5NDc3NjA0NTgsMS41OTYxMzQ2OTM4MTM3NTUyRTcsODE3NTkwMi4wNDM0NDc3NjYsMTIxMDAyNy4wNTUwNTc4MTg4LDI5MjE2ODYuMTI3NzgyMTU3LDEyOTIwOTMuODYwNjIwNTYxLDEuMjQwMjg2ODcxODc0MjMyOEU3LDYwNzExOTcuNjM1NTYzMzM4LDI2ODM4NzguNjgxNDc0MjMxLDQwMzU0MDcuMTY1NjA4NCw0NDYyMjkxLjE1MDQ0NDY0LDYzNDAyODYuOTUyNDE2MTM5LDUyODkwNTIuNTg2NTM5ODMyLDEyNzI5OTkuNzYwMDM1NTU4Niw5OTI0NDc3LjU0NDA5NzkxLDQ5MTI5MzMuNjQ3NzA2ODYzLDU1ODc0NjkuNDkyNjY0NDM0LDI4NDAwNTUuOTI2OTQ2NjAzLDkwMDg5OS4yNzI3NDg5OTgyLDgwMzgyODcuNzYyNzYwMTkxLDY0MTI0MS44MDk4NzE3MTAzLDE3MDg3NzMuODA5Nzk5MzA3NSwxMjM0MDE3LjcyODcxMTczMjQsODQwMjY1NS45MzM4NjUyODUsMTgxNjQ2NC40MzE0NzQ2MTY1LDE5OTU4MTguNjQxOTAzMDQ0LDEuODk1MDA3ODM3NTAxODk1OEU3LDEuMTMzNjkzNDY2MTIwMTEwNkU3LDM0NDU0OTEuNzU0OTA5NDM2LDM0MTY2NTEuNDMwMTg1NzAyLDEuMjI2MzYwNDQ5MDU5MTczN0U3LDEwNDY4ODAuMDg1MzExMzY0LDQwMDU4NjYuOTUxMzM1MzA2Nyw3NTM2OTYuNDk5MTE3NDAyNyw1NjgxMzE2Ljg1NzYwNDQ1LDIuMDgyMzUxNTU3NDk5NTQ3N0U3LDIyMzAyNjcuODU4MDAxMTA5Nyw3MDY4NjkxLjIyNjMxOTI1Nyw2MDc5MjYuMDM5NTg2Njk3OSw1ODg2MDkyLjQxNDgwNTMzLDUzNTU2NTMuMDMzNzY2OTAzLDE4MDUxODYuNzkzNzY3MjQ2Nyw0OTMwNDAuNzM1MjI5Nzk3MworMzAsV2VkIDIzIEZlYiAxMSw2MjYzNTkuNzIxMTg2MjA5NSw0NDQyMjI0LjI3MDM0NjI5LDI2NzA1MjMuMDQ3OTQzNzc3LDUxMjU5NzEuOTA4ODM4NTc4LDMuMzg1Mzc5NTU3MTMyMDkxNEU3LDQyOTc0MjMuMzAyMDUzOTE0LDM0MDIwMTQuNjc5NjM5Nzk2LDU3MTU3NS40ODY2NDg5Mzk5LDc4MjM0OC41MzM4MzkzMTI3LDEuNTk2NzcxMzgxODc3MTgzMkU3LDgxNzkwOTUuODY1NjgzODg5LDEyMTA0ODMuNzg3MTQzNTc0MywyOTIzMDg3LjYxNzI1MjA2NDQsMTI5MjY1Ni4zNTI2NDM5NDM0LDEuMjQwNzg0MDk3MDE0MjIzRTcsNjA3NDAwNS40NjIwMTQxNjcsMjY4NTI0OS4yODQ3NTM1MDgsNDAzNzMyOS43Nzg3NjQzMzY0LDQ0NjQzMTIuNzAyMDk5OTk5LDYzNDI5NTMuNDI1MDkzNDg3LDUyOTEzMDIuMTY1NDUyMTc0LDEyNzM1ODEuMzAwOTc0ODg2OSw5OTI4NzA0LjE2NzUxNDc3Nyw0OTE0OTE1LjE2MTU3MTQ3Miw1NTg5ODEyLjYxNjQ0MzQ3OSwyODQxNDQ2LjIzMTI4NTYwNzQsOTAxMjkxLjMwMzQyNzE4MTQsODA0MTYyNS4wMzc4NDI3ODIsNjQxNTMxLjU4MzQyODE4MzMsMTcwOTUyNi44MTkxMzQzMjU3LDEyMzQ1NTIuNzUyODg2MjEzLDg0MDYxOTUuMjQyNDUxMjY1LDE4MTcyNDUuNjA0MDg2OTM0NCwxOTk2NTU1LjIwNTkyMzU3NiwxLjg5NTgwNjIwNzUxMzM5ODNFNywxLjEzNDE4MzgwMjgwOTMxNjdFNywzNDQ3MDUyLjg1NjQ0MzI0MTcsMzQxODA4OC4zNDIzODUwOTY1LDEuMjI2ODg4NDU3ODQ4MzU2OUU3LDEwNDczMTUuNjI5Njg2MDc2OCw0MDA3NzI0LjcwMjY2Nzc1Niw3NTQwNDMuNDQxMzUxODI2NSw1NjgzNzI3LjcxMTE0MDg4MSwyLjA4MzIwODM2NjU1MDg5MkU3LDIyMzExNDYuMTAxMTQ2MjcxLDcwNzE2NjQuODExODczNDI3LDYwODE5OC41MzM3ODkwNjM2LDU4ODg1MjIuNzEyNTM3NjA2LDUzNTgwNzguOTQ0NzI0NDg5LDE4MDYxMzkuNjg2MTc2MDk1LDQ5MzI2NC44ODk0NjU0OTg3CiszMSxUaHUgMjQgRmViIDExLDYyNjUzMy41NjgyNTQwNTcxLDQ0NDM3MDMuMTIxMjg4Mjg4LDI2NzEzOTUuODQ3MzUwOTAzLDUxMjczODcuNTE5NjM0NTI3LDMuMzg1OTIwODM2ODE2NzU5NEU3LDQyOTg1ODguODg4MzgwODY3LDM0MDMwOTIuMTY4NzQyODA3LDU3MTcyMS44NzQ4Mzg0NDk0LDc4MjcyNi41MzYxMjQ1ODU3LDEuNTk3MjE2ODU3NjczOTk5M0U3LDgxODEzMzAuNTc2Nzk5MDU1LDEyMTA4MDMuNDU4MDA0NTE0LDI5MjQwNjkuMTM3ODg0MjIxNSwxMjkzMDUwLjA0Njg2NzAwMjUsMS4yNDExMzE5OTQ4NTMyODM1RTcsNjA3NTk3MS40MzE2MjU5ODcsMjY4NjIwOS41NjEyNjg0ODgsNDAzODY3Ni4yMDQyMTUyMzc0LDQ0NjU3MjcuOTU0MDE2OTQ1LDYzNDQ4MTkuMzc1NDEwNzYzLDUyOTI4NzYuNDY4MjI5NDc5LDEyNzM5ODguNDQ5MDQzNzMyOCw5OTMxNjYyLjA2NzU0ODk4Myw0OTE2MzAxLjU5NTE0MjY4OTUsNTU5MTQ1Mi4yNzEyMDc1MzcsMjg0MjQyMC4wNDY4MjcxOTg1LDkwMTU2NS42ODkyNjQxMDU2LDgwNDM5NjAuMjcyODA3NjM3LDY0MTczNC40NDU0NDE1NzkzLDE3MTAwNTMuODk2NjIyOTgyNiwxMjM0OTI3LjIxMzI1ODA4NDQsODQwODY3Mi4wMDU5NzcwNTcsMTgxNzc5Mi4zMTczNjc1MDMsMTk5NzA3MS4wNDQ2MDUyMjksMS44OTYzNjQ4OTczNDA1NDc3RTcsMS4xMzQ1MjY5ODE5MjY2MTQ2RTcsMzQ0ODE0NS43NTYzNjkyNDU3LDM0MTkwOTMuODY4MDg3ODk2NiwxLjIyNzI1Nzk5MzY3MDk0MkU3LDEwNDc2MjAuNDAxNDA1MDc4OSw0MDA5MDI1LjQ3NjcwNTE3MTYsNzU0Mjg2LjM1NDIzOTYwOTYsNTY4NTQxNC44NTc0NDc2MzgsMi4wODM4MDc4OTI3ODU1NjJFNywyMjMxNzYwLjU5MzI4MzUzNzMsNzA3Mzc0NS42NzY4NzkzMjYsNjA4Mzg5LjI4OTI0NDUzMzUsNTg5MDIyMy4yNjA2MDc0OTEsNTM1OTc3Ny4yNzk3MDI3NTYsMTgwNjgwNy40NDM5NTI3NjYsNDkzNDIxLjgxOTM1Mjg5NDczCiszMixGcmkgMjUgRmViIDExLDYyNjY1NC45ODk4ODgyMTA1LDQ0NDQ3MzYuODQ4NzAyMjQzLDI2NzIwMDUuODcyNjE3NDIyNiw1MTI4Mzc2LjI0NDcxNDE5OSwzLjM4NjI5OTA3OTkwMzgxMkU3LDQyOTk0MDMuMDM4MTU3NjQ3NSwzNDAzODQ1LjExNjUwMTk3NjMsNTcxODI0LjI3MTcyNzIzODksNzgyOTkxLjMxOTczMjQ3OTYsMS41OTc1Mjc5OTQ1NjY4N0U3LDgxODI4OTEuNDQ0NDgyNjkyNSwxMjExMDI2LjgwNzAyOTM2NDksMjkyNDc1NS4yNjMzODM4NzY1LDEyOTMzMjUuMDk4ODAwNTA1NywxLjI0MTM3NDk3OTgxMDM0NjFFNyw2MDc3MzQ1LjQyNTY0MzEzNSwyNjg2ODgxLjA4Nzg4MDg0NSw0MDM5NjE3LjM3NTI0MzI3Myw0NDY2NzE2LjkzNTMxOTM0OCw2MzQ2MTIyLjc5MDE0ODE2Niw1MjkzOTc2LjIxNTA4Mzg4NSwxMjc0MjcyLjk3OTE5OTg5NTIsOTkzMzcyOC4zNTQ0Mjk2OTQsNDkxNzI2OS45MzcyNzAzODIsNTU5MjU5Ny41OTg5MTk0NjEsMjg0MzEwMC44Njk3MTE2NDUsOTAxNzU3LjM4NjczODY3MzYsODA0NTU5MS40MTI5NzQ4NDQsNjQxODc2LjIwMzc3ODA4NTUsMTcxMDQyMi4xNjA2MDMyNDgzLDEyMzUxODguODIxOTAwMDc5LDg0MTA0MDIuMTAxMDUyMzY2LDE4MTgxNzQuMjUwNjk1MDkxLDE5OTc0MzEuNjY5NTMzOTYxMiwxLjg5Njc1NTE1OTYyNjIzOEU3LDEuMTM0NzY2NzMzNTQxOTAxMkU3LDM0NDg5MDkuNDc3OTA5Nzk0NSwzNDE5Nzk2LjI1MzkwNDI2NywxLjIyNzUxNjE1MjUzMDgyNjNFNywxMDQ3ODMzLjI4MzI1MzMxMDcsNDAwOTkzNC41ODgxMzMwOTQsNzU0NDU2LjExODUyNjgwOTUsNTY4NjU5My40MTk3NTAxMiwyLjA4NDIyNjY0NDEyOTQwOTZFNywyMjMyMTg5Ljc4NDA4NTk5NTUsNzA3NTE5OS4yMTY3MTE5ODIsNjA4NTIyLjU4MTI1MTAwMyw1ODkxNDExLjA1NTc0MDAyNiw1MzYwOTY0LjA3OTA1NTgyNSwxODA3Mjc0LjUwMDkzMTIyMjUsNDkzNTMxLjQ4NDYyNjI3MjQ2CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNFSVJTdGF0ZXNPbmx5X1JLX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9TXzAuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTRUlSU3RhdGVzT25seV9SS19SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vU18wLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZjg2NzA5Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTRUlSU3RhdGVzT25seV9SS19SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vU18wLmNzdgpAQCAtMCwwICsxLDMzIEBACitpdGVyYXRpb24sdGltZSxzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9ub2RlL3RyYW5zcG9ydC9waXBlL1VTQQorMSxUdWUgMjUgSmFuIDExLDk0MzIxMS4wCisyLFdlZCAyNiBKYW4gMTEsOTQzMjEwLjUyOTYyMTI1NzMKKzMsVGh1IDI3IEphbiAxMSw5NDMxNzkuODUwMDkxNjE4NgorNCxGcmkgMjggSmFuIDExLDk0MTU1Ni4yNDY1OTUwMDEKKzUsU2F0IDI5IEphbiAxMSw4NjgxOTIuMzQ2NjE2ODE2MQorNixTdW4gMzAgSmFuIDExLDIzMjExNS45MTM0ODQ2MDgzOAorNyxNb24gMzEgSmFuIDExLDMyMzY1LjAzMzUwMjU0MTEwNAorOCxUdWUgMSBGZWIgMTEsNDAuOTIzNTQxMDY1NDIxNjYKKzksV2VkIDIgRmViIDExLDAuMDA5MTI5MjQ0NDAzMzU1ODgyCisxMCxUaHUgMyBGZWIgMTEsNS42Njk3NDk4ODM1MjkzNzhFLTgKKzExLEZyaSA0IEZlYiAxMSwyLjkwNzcxNTY3MTk0MTQ4NzVFLTE0CisxMixTYXQgNSBGZWIgMTEsNy4zNzM4MTgyNzQ0MDA1MDJFLTIwCisxMyxTdW4gNiBGZWIgMTEsNC4xMTgzOTY2MDY4MzU5Mjg2RS0yMworMTQsTW9uIDcgRmViIDExLDIuNjU2NDM5ODg2ODE1ODUyNEUtMjUKKzE1LFR1ZSA4IEZlYiAxMSw2LjQxMzMyMDI2NTQ5OTU0OUUtMjcKKzE2LFdlZCA5IEZlYiAxMSw0LjMxNjg5NDkwNTc4NTQ4OEUtMjgKKzE3LFRodSAxMCBGZWIgMTEsNS45OTE1MTgxODExODc2MTFFLTI5CisxOCxGcmkgMTEgRmViIDExLDEuNDUxNDk4NjM1MzkyMDgyM0UtMjkKKzE5LFNhdCAxMiBGZWIgMTEsNS4yNTkxNDU2NzU0Mjc3ODRFLTMwCisyMCxTdW4gMTMgRmViIDExLDIuNTg2MDQ5NDQ5MjY3MzczNEUtMzAKKzIxLE1vbiAxNCBGZWIgMTEsMS41NjE0MzEzMDU4MjcxNjE3RS0zMAorMjIsVHVlIDE1IEZlYiAxMSwxLjEyOTU0Njk2MDYxOTY3NzVFLTMwCisyMyxXZWQgMTYgRmViIDExLDguNTYzNTEzOTMxODk1NjYzRS0zMQorMjQsVGh1IDE3IEZlYiAxMSw3LjE5MzEyMDk0MzMwMzg4MTVFLTMxCisyNSxGcmkgMTggRmViIDExLDYuMzYwMDk3ODQxMzMzNDUyNUUtMzEKKzI2LFNhdCAxOSBGZWIgMTEsNS44NDkxNjYwNzM3NzIxNjZFLTMxCisyNyxTdW4gMjAgRmViIDExLDUuNTIyNzkwMzc4NjgxMDQ1RS0zMQorMjgsTW9uIDIxIEZlYiAxMSw1LjMxMDE2MzY3OTE3NDQ5MkUtMzEKKzI5LFR1ZSAyMiBGZWIgMTEsNS4xNjk4Njc1MzAyOTE2MjM1RS0zMQorMzAsV2VkIDIzIEZlYiAxMSw1LjA3NjgyMjk0MjIxNzQ0OTVFLTMxCiszMSxUaHUgMjQgRmViIDExLDUuMDE1MjUwMTEwNzM3MDNFLTMxCiszMixGcmkgMjUgRmViIDExLDQuOTc0OTM1NDg1NzAxMzM0RS0zMQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTRUlSU3RhdGVzT25seV9SS19SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vU18xLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0VJUlN0YXRlc09ubHlfUktfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL1NfMS5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTZhOTJhZQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0VJUlN0YXRlc09ubHlfUktfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL1NfMS5jc3YKQEAgLTAsMCArMSwzMyBAQAoraXRlcmF0aW9uLHRpbWUsVVMtQUssVVMtQUwsVVMtQVIsVVMtQVosVVMtQ0EsVVMtQ08sVVMtQ1QsVVMtREMsVVMtREUsVVMtRkwsVVMtR0EsVVMtSEksVVMtSUEsVVMtSUQsVVMtSUwsVVMtSU4sVVMtS1MsVVMtS1ksVVMtTEEsVVMtTUEsVVMtTUQsVVMtTUUsVVMtTUksVVMtTU4sVVMtTU8sVVMtTVMsVVMtTVQsVVMtTkMsVVMtTkQsVVMtTkUsVVMtTkgsVVMtTkosVVMtTk0sVVMtTlYsVVMtTlksVVMtT0gsVVMtT0ssVVMtT1IsVVMtUEEsVVMtUkksVVMtU0MsVVMtU0QsVVMtVE4sVVMtVFgsVVMtVVQsVVMtVkEsVVMtVlQsVVMtV0EsVVMtV0ksVVMtV1YsVVMtV1kKKzEsVHVlIDI1IEphbiAxMSw2MjY5MzIuMCw0NDQ3MTAwLjAsMjY3MzQwMC4wLDUxMzA2MzIuMCwzLjM4NzE2NDdFNyw0MzAxMjYxLjAsMzQwNTU2NS4wLDU3MjA1OS4wLDc4MzYwMC4wLDEuNTk4MjM3OEU3LDgxODY0NTMuMCwxMjExNTM3LjAsMjkyNjMyNC4wLDEyOTM5NTMuMCwxLjI0MTkyOTNFNyw2MDgwNDg1LjAsMjY4ODQxOC4wLDQwNDE3NjkuMCw0NDY4OTc2LjAsNjM0OTA5Ny4wLDUyOTY0ODYuMCwxMjc0OTIzLjAsOTkzODQ0NC4wLDQ5MTk0NzkuMCw1NTk1MjExLjAsMjg0NDY1OC4wLDkwMjE5NS4wLDgwNDkzMTMuMCw2NDIyMDAuMCwxNzExMjYzLjAsMTIzNTc4Ni4wLDg0MTQzNTAuMCwxODE5MDQ2LjAsMTk5ODI1Ny4wLDEuODk3NjQ1N0U3LDEuMTM1MzE0RTcsMzQ1MDY1NC4wLDM0MjEzOTkuMCwxLjIyODEwNTRFNywxMDQ4MzE5LjAsNDAxMjAxMi4wLDc1NDg0NC4wLDU2ODkyODMuMCwyLjA4NTE4MkU3LDIyMzMxNjkuMCw3MDc4NTE2LjAsNjA4ODI3LjAsNTg5NDEyMS4wLDUzNjM2NzUuMCwxODA4MzQ0LjAsNDkzNzgyLjAKKzIsV2VkIDI2IEphbiAxMSw2MjY5MzEuOTk5MzU1MDkyOSw0NDQ3MDk5Ljk5OTM1MjIwNCwyNjczMzk5Ljk5OTUyNzI3MzcsNTEzMDYzMS45OTQ0MDAwMzUsMy4zODcxMzc1NTcyMTY3OTVFNyw0MzAxMjYwLjk5NDEzOTk0MiwzNDA1NTY0Ljk5OTE2MjMwMzMsNTcyMDU4Ljk5NzgyMzQwMzIsNzgzNTk5Ljk5OTk5Nzg2NywxLjU5ODIzNzc5ODQ1MTg3OTZFNyw4MTg2NDUyLjk4OTgyNTU3OCwxMjExNTM2Ljk5NzYxMTI0MDMsMjkyNjMyMy45OTk2MTA2MDYsMTI5Mzk1Mi45OTk1MTkxOTQyLDEuMjQxOTI5Mjk4ODY0NDhFNyw2MDgwNDg0Ljk5ODgwOTMyMywyNjg4NDE3Ljk5OTgxNjA0MzMsNDA0MTc2OC45OTk0MjIwNDY0LDQ0Njg5NzUuOTk4OTExMzg0LDYzNDkwOTYuOTk2NTg1MTg3NSw1Mjk2NDg1Ljk5NzQ3NzAxNiwxMjc0OTIyLjk5OTcxNTY2NjgsOTkzODQ0My45OTUzMzExOCw0OTE5NDc4Ljk5NTgwMTY3MDUsNTU5NTIxMC45OTY4OTU1OTcsMjg0NDY1Ny45OTk2OTQ4MzksOTAyMTk0Ljk5OTY2MzI5NDQsODA0OTMxMi45OTUwMTk3NzksNjQyMTk5Ljk5OTgzOTM1NjIsMTcxMTI2Mi45OTk0NDEzNDQzLDEyMzU3ODUuOTk5NTIwNDQ2Miw4NDE0MzQ5Ljk5NTU0OTYxNSwxODE5MDQ1Ljk5OTIzMDE0NzMsMTk5ODI1Ni45OTQxMTg1NTU3LDEuODk3NjQ1Njk4OTk4NjA0N0U3LDEuMTM1MzEzOTk5NTQ3OTAyRTcsMzQ1MDY1My45OTkxNjA1MjM1LDM0MjEzOTguOTk4MTU5ODg3NywxLjIyODEwNTM5OTQ4NjYzMTlFNywxMDQ4MzE4Ljk5OTM2NjAwNTUsNDAxMjAxMS45OTkyMzY4OTYsNzU0ODQzLjk5OTg0NDY4MDMsNTY4OTI4Mi45OTcyMjE5MjcsMi4wODUxODE5OTg1NzYzMzUyRTcsMjIzMzE2OC45OTc0ODIwNjIsNzA3ODUxNS45OTYyMDM1ODYsNjA4ODI2Ljk5OTgzNDAyODksNTg5NDEyMC45OTYxMjYwNzQsNTM2MzY3NC45OTg2OTEzODQsMTgwODM0My45OTk5MTMwODU1LDQ5Mzc4MS45OTk4ODQxMzU1NgorMyxUaHUgMjcgSmFuIDExLDYyNjkzMS45MDYyNzU5ODg5LDQ0NDcwOTkuOTA1NzQ3MTE3NSwyNjczMzk5LjkzMTIyMjM1Niw1MTMwNjMxLjE4NjIyNzEwMSwzLjM4NTg5NzA1MTQ1MzM5MkU3LDQzMDEyNjAuMTQ4NzMzMTY0LDM0MDU1NjQuODc4MTMzMiw1NzIwNTguNjg0ODI1Njg5NSw3ODM1OTkuOTk5Njg5NTk5NCwxLjU5ODIzNzU3NDk5NDgwOTJFNyw4MTg2NDUxLjUyMTc3MTI5NywxMjExNTM2LjY1MzI3MTM4NTUsMjkyNjMyMy45NDMzNDMxNzc0LDEyOTM5NTIuOTMwMDY0NjQ1OCwxLjI0MTkyOTEzNDk1MDcyM0U3LDYwODA0ODQuODI2NzcwNzI4LDI2ODg0MTcuOTczMjMyMDI5LDQwNDE3NjguOTE1OTA4ODM5LDQ0Njg5NzUuODQxNjI5MTU4LDYzNDkwOTYuNTAzNDA4MTE1LDUyOTY0ODUuNjMzMDcwOTU3LDEyNzQ5MjIuOTU4NjM0NDMxNyw5OTM4NDQzLjMyMDk4NjEzOSw0OTE5NDc4LjM4OTcxOTI3Miw1NTk1MjEwLjU0ODU1ODkzMSwyODQ0NjU3Ljk1NTU5NzYyOCw5MDIxOTQuOTUxMDI0NzYxOCw4MDQ5MzEyLjI3NTgzODU2Myw2NDIxOTkuOTc2NjI5OTI4LDE3MTEyNjIuOTE4NzM2MjA2MSwxMjM1Nzg1LjkzMDI0ODIzMDIsODQxNDM0OS4zNTI4MDUwMTcsMTgxOTA0NS44ODgwMjkwMDk4LDE5OTgyNTYuMTQ3Mzk0OTE3NCwxLjg5NzY0NTU1NDM3MjMyNkU3LDEuMTM1MzEzOTM0MjQyNjEzNkU3LDM0NTA2NTMuODc3ODczOTEzLDM0MjEzOTguNzMyNDA1NjMxLDEuMjI4MTA1MzI1MzMyODE5NUU3LDEwNDgzMTguOTA3ODEwODE0OCw0MDEyMDExLjg4ODk3NjY4Niw3NTQ4NDMuOTc3NDAzMTUxNyw1Njg5MjgyLjU5NTk3ODQ1MiwyLjA4NTE4MTc5MzAwNTgwNkU3LDIyMzMxNjguNjM0MTE2NzEwNiw3MDc4NTE1LjQ0NzkxMzU0MDUsNjA4ODI2Ljk3NTg1NTYzMzUsNTg5NDEyMC40MzY3MzA2MDQsNTM2MzY3NC44MDk2MjQyNDgsMTgwODM0My45ODczNTI1MDUzLDQ5Mzc4MS45ODMxNDM5ODY1NQorNCxGcmkgMjggSmFuIDExLDYyNjkyNC4wNTIxNzcwNjY3LDQ0NDcwOTEuOTk3NTgyNTc3LDI2NzMzOTQuMTYwNzc1NTIxLDUxMzA1NjIuOTk3ODA2OTUsMy4zMjg4ODEyMTEzNDc0MzA2RTcsNDMwMTE4OC44NDU1NzExOTUsMzQwNTU1NC42NTQ0OTE1NDg0LDU3MjAzMi4zNzUzNDg4MzA2LDc4MzU5OS45NzM2NDA2Mzc5LDEuNTk4MjE4NzE3OTE0NjMyM0U3LDgxODYzMjcuNjgyODMwMDE3LDEyMTE1MDcuNjM1NTU3OTM4OCwyOTI2MzE5LjE4OTU0MzE3MDQsMTI5Mzk0Ny4wNjQwODE0MzE4LDEuMjQxOTE1MzAxNTY1MDQ1M0U3LDYwODA0NzAuMjkzMjEzOTE2LDI2ODg0MTUuNzI3MDU4MzA5LDQwNDE3NjEuODYwMzIzOTgzLDQ0Njg5NjIuNTU1NTQ4NDM1LDYzNDkwNTQuODYwMzMwNzI2LDUyOTY0NTQuODYwNTg0OTU4LDEyNzQ5MTkuNDg4Mjg1NjAzNyw5OTM4Mzg2LjM3NDk5OTQ2NCw0OTE5NDI3LjIzNTUwMDQ2MSw1NTk1MTcyLjY5MjYyNTQ2OTUsMjg0NDY1NC4yMjk4NzUxMjMsOTAyMTkwLjg0MzEyNzE5MDgsODA0OTI1MS41NTYxNDg5NjQsNjQyMTk4LjAxNjA4MDc3MjUsMTcxMTI1Ni4xMDIxMjU0NDUxLDEyMzU3ODAuMDc5Nzk4MjA4Myw4NDE0Mjk1LjA3OTgxMzQ0NywxODE5MDM2LjQ5Njg5MDY3NSwxOTk4MTg0Ljg4OTY1OTk1NjMsMS44OTc2MzMzNDIxOTA1NTczRTcsMS4xMzUzMDg0MTg5MDA5MkU3LDM0NTA2NDMuNjMyNDQxNTQyLDM0MjEzNzYuMjkyNTQzNzkxNywxLjIyODA5OTA2Mjg2MzI5MTJFNywxMDQ4MzExLjE3Nzc1NTg3NCw0MDEyMDAyLjU3NDI5MDU3OCw3NTQ4NDIuMDgxNjAzMzY0LDU2ODkyNDguNzEzMjk2ODYyLDIuMDg1MTY0NDM4NDUxMTYyNEU3LDIyMzMxMzcuOTc3MjI0OTc1LDcwNzg0NjkuMTUxMDg4MTg2LDYwODgyNC45NTA0MTMzMzE5LDU4OTQwNzMuMjEwMTAzMjY0LDUzNjM2NTguODM4NTg5NDc3LDE4MDgzNDIuOTI2MDM2Mzk0NCw0OTM3ODAuNTY5MDM4MDI5NDcKKzUsU2F0IDI5IEphbiAxMSw2MjYzNjcuODM2NTIxNDE2Miw0NDQ2NTMwLjkwNjk3MjA0NSwyNjcyOTg0Ljc2OTkzOTkwODMsNTEyNTczNC42MzQ5NjIzOTEsMS42NjkxMTU0NzE4NDExNzZFNyw0Mjk2MTQyLjgxNTYyNjcxOCwzNDA0ODI5LjQzMjg1MjMwNDUsNTcwMTgwLjAyMjgyMjc0OTYsNzgzNTk4LjEyNDg4Njc0MDksMS41OTY4ODMxMTgxNzU3NTU4RTcsODE3NzU2MS41NTUwNzMyNCwxMjA5NDU2LjcyNTM0Mjk3MzgsMjkyNTk4MS44OTQ2Mjk5OTMsMTI5MzUzMS4wNjY3MTQwNzg3LDEuMjQwOTM1NDA1MTM2NzUzNkU3LDYwNzk0MzkuMjM1MTI3NTk0LDI2ODgyNTYuMzMzMTgxMDUwNiw0MDQxMjYxLjI1ODA5NDc1MDMsNDQ2ODAyMC4wOTI3NTc4MDE1LDYzNDYxMDIuNzAwMTE2OTAzNSw1Mjk0MjczLjA1NDUzMzAzNiwxMjc0NjczLjMwNDU0ODgzNyw5OTM0MzQ4Ljc4MDMxNzk0Nyw0OTE1ODAzLjIyODY2OTcwOSw1NTkyNDg5LjEwNjkxNDIxOCwyODQ0Mzg5Ljg2NTQwMTg1MjQsOTAxODk5LjUyNDc1MzI4NDQsODA0NDk0Ny43NTI3ODk0NzUsNjQyMDU4Ljk0NDI5MTM2MzQsMTcxMDc3Mi42NDMwNjU3Nzc2LDEyMzUzNjUuMTk4NDUyMzQ5LDg0MTA0NDcuNDg3MjgxODU1LDE4MTgzNzAuNTc5MTUzMDU1OCwxOTkzMTU4LjgyMzIxMDMwOTcsMS44OTY3Njc1Nzc4OTA1ODA1RTcsMS4xMzQ5MTczMDk5NzMyMzM4RTcsMzQ0OTkxNi44NjA5MTI3MDgsMzQxOTc4NS40ODYyNDQ2NjI3LDEuMjI3NjU0OTkxNTIxMDkxOEU3LDEwNDc3NjMuMjU2MzY3NzA3NCw0MDExMzQxLjc1MjEyMjc4Myw3NTQ3MDcuNTkwMTkxMzM3Miw1Njg2ODQ2LjQ1MTM0MDk2LDIuMDgzOTM0NTE2NDE1OTY0NEU3LDIyMzA5NjcuMzU0NDQwMTcyLDcwNzUxODcuMDY2OTY4MjIzLDYwODY4MS4yODIyNDcxOTE5LDU4OTA3MjYuMDY1NzU4ODA4NSw1MzYyNTI1LjkxNjUzOTY0NywxODA4MjY3LjYwOTI1MjUzODgsNDkzNjgwLjI1NTk3MzQ5ODQ1Cis2LFN1biAzMCBKYW4gMTEsNTk0MjUzLjA1OTQ3MjAyNTYsNDQxMzA3Ny4xMjY3NTA5MDcsMjY0ODYwMy44MDE5OTM2MTU1LDQ4NDc1ODAuODQyMzI2NDgyLDE1NTYyLjg0NjI0NDA2MzczLDQwMDgyNDAuNDM1ODQ2MDAzLDMzNjE3NDkuMjg3NjkzMzQ0LDQ3MjkzMy42NzcxODA5NjE3LDc4MzQ4Ny4zMTIzMTAzODcxLDEuNTE5NjAxOTk5NzU0MzQ2M0U3LDc2NzUyNzkuNTc0ODIxMDkzLDEwOTQ5MTcuMDUwNzg3MjM0LDI5MDU4NjIuMDc0MjIxNzA3LDEyNjg5MzMuMzkyNTk3ODQ5MiwxLjE4NDEyNTMzNzQ5MDcxNjZFNyw2MDE4MDc4LjMyMjg2MTU0MSwyNjc4NzI1LjY0OTUxOTM1LDQwMTE0MTEuMDE4MTUyNTg1Nyw0NDEyMDMwLjMxNzY1MDM1Miw2MTcyNjAwLjQ4NzM4NTYxOSw1MTY1NzU3LjYxNTg2NTk4NiwxMjYwMDM2Ljk1MzcxMTE3MSw5Njk2NDY0LjI2Mjc1NzQyNiw0NzA1MjM3Ljg5MDU2NDU5MzUsNTQzNDg2OC45MzYyNzk1NTksMjgyODYwNS4zNDc0MDAxMzcsODg0Njc1LjA3MjA5Njk4NTEsNzc5Mjc1MC45Nzg0MjM3NTc1LDYzMzc5OC45NjY5NTYxODkzLDE2ODIxMzguNjYyNTE5NTI5NywxMjEwODQ4LjMxNjAyMzI3NzYsODE4NDI0NS45MDg0OTA4NjcsMTc3OTA2OS42MzE0OTk2OTE0LDE3MjE2MzYuODE0NDQwNTUwNywxLjg0NTg2NjcwNTI5ODE0NkU3LDEuMTExODEzODIyODk2MDcwOEU3LDM0MDY3NDAuMzYwNzcwMDkyMywzMzI2MjkxLjcxNDcyNDU4MDMsMS4yMDE0NDE5MjU0ODQxNjRFNywxMDE1NjM5LjU2NjI1NTE0MTYsMzk3MjAwNi4zODg3NjkxMjQsNzQ2NzA2LjU5Mzk4NjYyMjQsNTU0NTQwNy4xNTQxMzE3NDUsMi4wMTIwMzAxNjgxMTc2MDg1RTcsMjEwNjA4Mi40NTc4MzQ5NjA0LDY4ODIyODQuMTcwMTk4NTM2NSw2MDAxNTUuMzU1NzAxOTEsNTY5NDg2Mi40NTU1OTA1NzMsNTI5NTIyMi4yOTcyMDI4NTYsMTgwMzc2MC43NzQwNTI2MzIsNDg3NzE4LjkwMDMyMjYzMzUKKzcsTW9uIDMxIEphbiAxMSwxMDA0MTkuNTI2MzM5MTI1NjcsMzE0MzU3OC4xMTA5ODk4NjM1LDE3NjQzODAuODU2OTUwNjAzLDc1Nzk5MC4zNDQyNzg3NjAxLDMwOC4wOTIxODM4NDc5MTg3LDQ1OTIwNi4zMTY1NTc5NzI1LDE5NDE1MzYuODM0MTMzODY3LDg2NDMuNzY4MDg5OTMxNjcsNzc4MTk2Ljk0OTA0NDUyNDMsMjc3MTY4OS44NDAzMTYzOTUsMTAwNDIxOC4wNTA2NDc4MTg0LDY5NTQzLjQ3NjkwNjUyMzExLDIxMjc4OTcuNDMwNDA2NTA3LDU3NjE2My4xODAwMzQ4MTM5LDIzMTg4NjEuNDQwMzgwMzQzLDM4NTE3NDcuMTcxNzk4MzI4NCwyMjcxMjM0LjMyOTA1MTA1OSwyODc0MTY3LjUyNDI4NTYzMSwyNTYwMzUyLjg4NjU2NjU2OCwyMTAyNDIzLjI2NTM0MzQzNiwxOTQ5NzA0LjIxOTU5MDkwMSw3NjIzNjguNTMwMzc2NzA0OSwzNzAxMDI1LjU0OTQzNzM2MzYsMTAwMDE4NS4xNTgyNTY0NzcsMTgwMDYzOS4wNzMxNzM2MjEsMjE5Mzg1NC4wMTM2NjM1MDI0LDQwMDQ5Ni4wMDg3MjEyNzU5NSwyMzMyNzA1Ljc1Mjg4NTIzNCwzNjI5OTcuOTM3NjczMjU3MSw4MzA1OTAuMjA3NzMxMDUwMyw1MzM1NjQuMjg2NTgzMDA4NSwyODI4ODA0Ljk4NjEwMTk1Niw3MzYyNDEuNzQ4MTk2MjE4Myw1MjU0OS4zMTQwMDM3Mzk5NCw2MzkyNjc5LjMzOTE5NjU4Niw0ODEwNDE4LjQyMDE0MzAwNDUsMTk3ODIyMC45Njc1MTQ2MDM0LDExMzI5ODcuMjI5NzI0NDI1OCw1MDE3OTA5LjEwNTQ1ODc5LDMxMDcyOC43NDA0NDk2MDE1NSwyNTcyMjc3LjQ3MjAyNjIyOCw0NjgxMjMuMjc5MzIyOTMwNiwyMDUxMDAyLjc4NzQzMzA3NTUsNTQ2MTA2OS4wNTY1OTQ0MDMsMzE1Mjg3LjAyMTkwMTUzNTQsMjM0OTk2Mi4zMTE1Mzk2OTIzLDMyODc0OC4xNDU1Mzg2MzM3NSwxNjA2NDYyLjM2NjAxNjUyMDcsMzA3MDUxMy44NDA1MDczODc2LDE2MDQ1NTIuMDcyNDIwMDA4NSwyODgxODcuMzkwMjA2NzM4NQorOCxUdWUgMSBGZWIgMTEsNC40Nzg1Njk2MDY1MzM1NDIsMTUyNzcuMDY2MjE2NjcyMjc2LDU0MTQuMDM4OTUzODg3MzE5LDI5LjczMDAwMjA3MDY1ODA2NywwLjgzNTA3ODQ1MDc0NDY2MzYsMTEuMzk4ODAwOTkxOTI0MTA3LDI2NzAuODgxMTM1Nzc4NTI4LDAuMTUwMDkxNzUxMDI2NjQzLDU3NzQ0OC42ODQ5MjE0MTE4LDE0MS4xMTYxMTM4MDE5NjU3NSwyOS45NzYzMjk4ODIyMDAzMzIsMC45MzUyMTQyOTcwODU4OTEyLDEyNzY3LjMzOTUzNjI0MDg3NywyODYuMzgxOTkxOTUzMjkwMzcsMTM0LjMwMTU4MDM0MTMxNTQ5LDkyNDMuMjc2MDg0ODMyMTA1LDU3OTIwLjI5MDEyOTE1NTQ3LDE0NTg2LjUwNzExMDY2MTc1NCwzNjA3LjQyMjI4OTk1NTYyMjUsNDIyLjU3NjgxNzc3ODQ0NjY0LDUyNi40MzI1MDAwMDgxMzA4LDEzMzMuMzE5NjI2Mzc5ODI4MiwxMDMzLjgxNzk1MjYxMTY3ODMsNjcuNzA4MzM0Mjg0MzU1NSwzMzUuNzE4MDI5MjUzMjU3OSwyMTQ4Ny4yMDAyMzExNjc3NCwxOTYuOTMwMzgyMTcyNjE2NTMsMzM0LjgxMTI2MzQ1Nzg4NjIsNDc5LjE2NjQ0MTA3OTUzMDYsNTY4LjQyODg3MjQ0NDMyNjgsMjM4LjI5MjU0MTI2NTI2Mjg2LDU5Mi4xMjI1NjUxNjIzMTEyLDI2NS41OTc5NTgwNTY2NjU4LDAuNjIxODg3MzY1MTg1MjQxNywxMzQ1LjQ5NDczMDQ1OTgwOTUsMjAxNS44MzA0NjExMDEwMzk2LDI3OTYuMDY3MzY0MDQ3NTA3LDIyNy43NDMyMDE2MDE5NDcwOCwxODY2LjA2NzU1NzQ3NTMzMjcsNDcuMDk1MTkzNTA0NzMwMzEsNjYyMi41ODUyMTMwOTMyLDk5Ni4yMTg2MjY0NDQzNjk5LDUyMS4zMDQzNzc1NDgxNjAzLDYyMC40NDQ1MDg4MjE5NTM0LDExLjUzNjM2MTIxMTIxNzc0NSw0NzUuNTYyNDUzMzAxNDQ5MDcsMzUxLjE1NzI5NzIwNjE4MSwxOTkuNzA0MTg2NjQ0MzQ0MTMsNDMwOS41NjQwNzY2MTQ4NDMsODA0NDQuMDE0NDQyNzg5Miw0NDUuMDc4NzQ2MDE4NTIxNjYKKzksV2VkIDIgRmViIDExLDYuMjUwODA4OTk2NDUwNjIzRS02LDAuMDIyMDc4NTAzNDkwMzUwNDgyLDAuMDA2MDMwMzk0ODI5ODYwMzM2LDUuMjEyOTg4MDI1NTU4Nzc4RS01LDEuOTEzMzIxNTEyMDg5MTYzMkUtNCw1LjAyMDE1OTgzNzAyMDA3OEUtNSwwLjAwMTk4MzQzMjUzMjYyNTg0NzMsMS43ODA3Mjg2MDIyMTAyNjZFLTUsMzg2My41MjUyMzExNjk5ODMzLDEuNTgyMjM1MTYzNjg0NjE1OUUtNCw4LjkzMzM4MDU2NDY1NjI3MUUtNSwxLjk2OTU4MTc2MDYyMTk3MTRFLTUsMC4wMjA5NTM2MjQ2Nzk1NjM0MzcsMS4zOTIzNTIzMzg0MDk0MTE0RS00LDEuMjM4MzMyNTIyOTAwNDIzMkUtNCwwLjAwOTAzNTg0Mzk0OTg1ODMzNiwwLjI3MDkxNTU2MTk5NjQ0MDg1LDAuMDIxNjI5OTMzNzgxNDEyMjQ0LDAuMDAyNzA5MjEzNDkwMDc4ODUzLDEuNjk0NTE2MDI4MzEzNDEzRS00LDIuMTY3NzMxMzA0NDAyMjQxOEUtNCwwLjAwMTExMTAxMDk3NDE1NzU1OSw0LjI4MjU2MTUxNTQ5OTI1ODNFLTQsNS4wNTUxNzY5OTIzMzU5OTk1RS01LDEuMzQ5MTIwNzI2MzMxNjE3NEUtNCwwLjA0ODQzNTQ1NDYxNzcxMTk5LDkuNTM4NjYyMjAyOTg3MzQ1RS01LDEuNDA3MzMwMjkzMTAxMDI5NEUtNCwzLjQ5MDM5NzcxMDg2MzE2MkUtNCwzLjExNTEyOTQ2NDA3ODA4NDdFLTQsMS4xMTczNTMzMDQwNjg5MDY1RS00LDIuMzc1NjM1OTIwODg1NDUzRS00LDEuMTY3NTE3ODg4MDY3NDc0M0UtNCw0LjgxMjkyNDU3ODU1MDA2NzZFLTUsNS4zOTkwNjY0MzM2MTQ4MTJFLTQsOS4yNjEyNDEwMzkzODQwNTNFLTQsMC4wMDIxMDMwMTQzNjIxNjc5NTA0LDkuMTMyNDA5ODg5MjM4MTQ1RS01LDguMjcyNzA4MjMxMTA4MzE4RS00LDEuOTUwNjU2MTEyNjU3MDE1RS01LDAuMDA2NzE2MzA1MjQzMjU1MjMxLDkuMTU1NzU4NzUzOTc5MzU5RS00LDIuMTI2NjkxNzAwNzk4MTc4MkUtNCwyLjg4NDYyMzI5OTcxMDEzMTVFLTQsMi4zMDIwOTQxMzM4MDkwNzFFLTUsMS45MDcwMDI3MzkwOTc4MjM2RS00LDIuMzIyNzc0MDQwNTQyNTZFLTQsOC44NjMzMTA3OTU4OTc2OTFFLTUsMC4wMDMyMzA2NTYxNTQ0MjM3MTE0LDAuNzEzMDEzMTg1Njc1MjgyOCwzLjQ5MTY0NTEwMTgxMzMwODRFLTQKKzEwLFRodSAzIEZlYiAxMSwxLjA2OTQ3NzM0ODcwMDE5NzhFLTEwLDIuMTUxMDQwNjk1NDIyOTAwNkUtOSw2LjE0ODQ5Mzc4ODU4NzAxNUUtMTAsOS4zMjkyNDg1NjMyOTQxNTdFLTEwLDkuNjk1ODgxNTk4ODE3MzYyRS05LDkuOTQzNTA3OTEwMTE5MjA4RS0xMCwyLjk5ODMxNDgzNzE2NzAyODNFLTEwLDQuMDg2NzQwODA3Mzc1OTYwNUUtMTAsMC4wMDY3OTM2OTM1OTExMTQxMTQsMi41NTU4ODI3MDE5NTMxNDg1RS05LDEuNzEyOTY5OTIwOTcyNjMwNkUtOSw0LjE5MzI1MzE4NDI3MDY5MjVFLTEwLDIuMDQxNjk1NDk0MzY3OTk4RS05LDguNjIxOTI0NDQ4MDk2OTQzRS0xMSwxLjg2NzA1MDk1MTM0NTY5NEUtOSw5LjgzNTI1NDUwNzYxMzgzRS0xMCwzLjA4NjU5NDAwMTk2NTM0M0UtOCwyLjEwNTY4MDc3NjkyOTI0OUUtOSw0LjAxMjE4NzA0NjE5Njg0NjRFLTEwLDUuNTI5MjYyNTI1MTc1MTMxRS0xMCw0LjEzNTU0MjQxMjUzNTIxNDRFLTEwLDEuNDA1Mjk5NDQxNDg2MTk5RS0xMCw3LjY3MDM3MjYwNDg1MDkyNkUtMTAsNi44NzE0NTM1MjAwMjI5MjZFLTEwLDUuMDE5NDg5ODg4Mjc5NTk1RS0xMCw0Ljg1ODQ4MzAwMjI1NjZFLTksNi4wMjA4MTk4MjQ1NjQwOTFFLTExLDguMDQxNTk2MDQxMTQ5MDA5RS0xMCw1LjQ3NDk2NzM1NzgwODcxNEUtMTEsMS4xMjUzOTc2OTQyNzg4MjcyRS0xMCw4LjM4MjcyNTEyNTg4ODY1NUUtMTEsNy4yMTMzNDA0MjU4MTgzNTdFLTEwLDEuMjk3NDM1ODM1ODkwOTAwOEUtMTAsMS4wNzQ4MzEyMzk1NDY3MzNFLTksMS42MjMzNDIzOTE0MTQ4OTYyRS05LDcuODAyOTE5ODQwOTU3MzI1RS0xMCwzLjEwNjEyNzgwNjU5OTgyNkUtMTAsMi45Nzk1MTM0MTI5NDc0NDFFLTEwLDguNjg4MzE1MTc3NzY0NTEzRS0xMCwxLjAyMzYwNzEyNTUyMjc0MzNFLTEwLDcuMTQ3MTY2MzAyMDU3ODdFLTEwLDEuMDQ0NTYxODkxMzA4NDAwM0UtMTAsNC41Mzc1MzM3MTczOTIxMjY3RS0xMCwyLjMwMzc5NTE0MDM4NjA3NEUtOSw0LjIwNTU2NzkyMjg3ODg3N0UtMTAsNi4xNDgxMTc0ODUyMzExOTRFLTEwLDQuNTM4MDczNTk2MjU5MTcyRS0xMSw2LjI2MTc2NzgyMzc4NDM2NkUtMTAsNC44MDAwODA0OTIwNDc2NjZFLTEwLDkuMzUzMDUzMDI0OTg3NDI5RS04LDQuODA2ODM2MzYyNDkyOTFFLTExCisxMSxGcmkgNCBGZWIgMTEsMi4wOTM4ODA4Mjc4NzkyMjc1RS0xNiw0LjQ4MzQ2OTg1NjAzOTM0OEUtMTYsMS44NzA2NTAwNzI2NDM2MTg0RS0xNiwxLjg1Mzc4OTEwODA2ODYzMzdFLTE1LDIuMjgwODc0MDk1ODYwNDgwNEUtMTMsMi4wODkzMTAxODkwNTg3NTRFLTE1LDIuMTQ1MTM1NzYzMzAyMDk5NUUtMTYsMS4xMTc0MjI2MjIwOTQ4Mzc3RS0xNSw2LjQ5MjE0NTg4MTYyNjcwNkUtMTAsNC45Mjk1MzQ0MzA3MzQ0MDg0RS0xNSwzLjUxNjYzNDg4MTY4NDE1RS0xNSw5LjY4NjEwMzEzOTkxMzkwMkUtMTYsMy43NTc5NDk0MDE5OTg0NjNFLTE2LDEuMTgwNzQxMjc2NzAxNDA2NEUtMTYsMy41NDk1MjQ1MDQzNTI3MDlFLTE1LDMuODYxOTQ0NTg3MTE1NjM2RS0xNiwzLjc4NDg4NDQ2NTM1MzAzNUUtMTUsNC4yNjc4OTY3OTYzNzkyMjFFLTE2LDIuODAyOTM0NDA3NTMxMTUyRS0xNiw5LjExMzQ3NzQxODc5MzU1M0UtMTYsNi41MjQyNDUwNTYxMzM3MDNFLTE2LDcuODIwNDU3MTQ0ODE5NTc1RS0xNywxLjIwMzE5NTkxOTk2NzIxOEUtMTUsMS4yODQwNTM2Nzg4NTE1MjRFLTE1LDguMzU1NTk1NDUzOTg5MDk5RS0xNiw3LjM0MDY3NDAwODM4MjQyRS0xNiw4LjI3NDIxNDc2Nzg5MDY0OUUtMTcsMS4zODIyMjc1MjMxMTQ5Mzc0RS0xNSw0LjA3ODIzMDA1ODM2MzI3NDNFLTE3LDEuMzUzNzEwMjM1OTg2OTY3NkUtMTYsMS4xODYxMTQ3MDA5NzY5ODQ1RS0xNiwxLjE4MjM3ODEwODY0NjcxOUUtMTUsMS45MzY4NTMyMTcwNzg5NTUyRS0xNiwyLjc1MzYyMDI2NjM3NjI3ODZFLTE1LDIuNjU4ODkwOTk3MzM4MjE0RS0xNSwxLjEyMzUwNzA2MTM5MzE2NDhFLTE1LDIuMTYzMDcwMjU1NzA1MDkwMkUtMTYsNC45MTA4NjAxMzM3NDEwODRFLTE2LDEuMjg4MTkyNDkzNDA2MzY4NUUtMTUsMS43NDgxNDg1MjMwOTgwOTE1RS0xNiwyLjYwMjEwMzIxMzU1MzE4NTRFLTE2LDQuNjgwMjY0MTgyOTczODMxRS0xNyw3LjIyODYyMTQ5MTgwODI3OEUtMTYsNC4wNjY4ODIxNjQ0MjI1NTRFLTE1LDguNDI1MDQzMDE3NTQ2NTQ5RS0xNiwxLjAxMjQxODgwNzkwODIyMjNFLTE1LDQuMDgzODkzMzMwNjYwODEzM0UtMTcsMS4wOTQyNTM2NzQ5ODY3NjkzRS0xNSwzLjM2NjMzODE5MjE1MTI4MzNFLTE2LDEuMDMxMTU4MDU3NjA2NjkyN0UtMTQsMy4wNTYyMDExMDgxMTMwNDFFLTE3CisxMixTYXQgNSBGZWIgMTEsMS4xODE3MjA3NDUxODY0MDFFLTIxLDcuMjg5NTE4MDk5NDM5MDg1RS0yMiw0LjEyNDY5ODc4NzEzOTg3NTVFLTIyLDEuMDcwOTA4MTA5NjMzNjIwN0UtMjAsMy44NDcwNzAxNzAyNjE3OTYzRS0xNywxLjMxOTAzOTM2NDA3NzZFLTIwLDYuNzYyNzQwNDk2ODQwMDc4NUUtMjIsMS4wNzIyMjUxODUwNTU0ODEzRS0yMCw5LjcwODk0ODk1NjA4MDExRS0xNywyLjcxNzU0ODEzNTYyODMwNjdFLTIwLDIuMTM5Mzc1OTg0OTA1ODU4NkUtMjAsNy4xMTc4NTM0NDkzMjEyMzRFLTIxLDUuMzAwODA5OTkzNDc4ODEyRS0yMiw0LjU3NjQ2NjEzMDgxNTk5N0UtMjIsMS45MTM1NjM5MjA3OTAyNjE1RS0yMCw5Ljc3MzE1NDQwNjcwMTczOEUtMjIsMi43MzcwNDk3ODk1MDU0OTc2RS0yMSw2LjczNjMwMzI4NjY3OTA0NEUtMjIsOC43NzM2ODg4NjI0MTAzNTlFLTIyLDQuMDM3MzgyOTQ5OTExMTI3RS0yMSwyLjc2ODAzNjY4NDM3ODgzNEUtMjEsMi4yNzU2NTAzODczOTc4NjNFLTIyLDUuMDc5NTg4OTU4NzE3ODQ4RS0yMSw2Ljc0MTg5NDMzODk3MjM4NkUtMjEsMy43NDMwMTY2NzY5NjI1MjlFLTIxLDcuNzY1NjI0NTQ3MDM0MzQ2RS0yMiwzLjIxMjM2NTM4NzA1NzU1MUUtMjIsNi40Mzk3NjgxMzE2NTQwNEUtMjEsMS4zMDExMTgxODQxMjMyNzkyRS0yMiw0Ljk4MTI2NTcxOTQxNzg1NkUtMjIsNC42NzMwMDAyNjExMjk2RS0yMiw1LjIwNjg1MjA0OTU0NDczN0UtMjEsNy44NzY5NDI4MTkyNTQxODVFLTIyLDIuMzg2NDQ1MzUxNDI0OTk3M0UtMjAsMS4xNjk5NTA4OTEwMzYzNzU2RS0yMCw0LjQ2ODg4MTU3MDI3MTg5OUUtMjEsNi43NjQzMTc1MTI4MDMxMzQ1RS0yMiwyLjE3NTU0NTg0NDQ5MjA1ODdFLTIxLDUuMjE1NTMxMjgyNjEwMTg4RS0yMSw4LjA3NzY1MjE1MzkwNjQzMUUtMjIsNi4zNDY1OTc2ODI1NjEzODk1RS0yMiwxLjI1NTE2MTE4MzU1MDE3NzVFLTIyLDMuMDk0MDMzMjYwNjI1Mjc1N0UtMjEsMS45NjQxNDgxNTA3NDk1NDdFLTIwLDQuOTMwMDQyNDk3MTE0MjUxRS0yMSw0LjQ4MDYzMTE1MjcxMzk1NUUtMjEsMS4zNzU2MzE2Njc4MDA0MTQ4RS0yMiw1LjIxMTUzOTI5NDQ1MDQyRS0yMSwxLjA1NDk0OTQ2MzcwNzI0MDZFLTIxLDYuMDE1NzM1ODY3OTUzODU2NUUtMjEsOS4yOTI2NzY3NDIyNjg0MUUtMjMKKzEzLFN1biA2IEZlYiAxMSwxLjA1Mjk0MDgzNjk4MzU1NTNFLTI1LDUuMzEyMDMzNTU2NjU1NjZFLTI2LDMuODg3NzgyMTM1MzIxMjk4RS0yNiw5LjUxMTQwOTkyNjQ5NDgzN0UtMjUsNC41MjE5MjU4MDQwNDYzNzRFLTIwLDEuMTY2NDM4NTc3NzA5OTk2OUUtMjQsNy4zMDcwMjA0MjYxMDM4NzFFLTI2LDEuMDczNTgwNDgzMTkwNTY1N0UtMjQsOS43OTkyMDM0MTE0MDE0NjRFLTIzLDIuNDMxMzc5MjY5MDM0MDAwNEUtMjQsMS44OTI0NTEzMDU3NjI5MzdFLTI0LDYuNDIyNDIyMTQ0NzgzNDU1RS0yNSwzLjIzMzQwMjk1Njc4MjcxMzRFLTI2LDQuNzQ2NzAxOTIzODUxNzMyRS0yNiwxLjcyMDE3Njg4NDIyMDc2NDVFLTI0LDkuOTE4MDU3NDEzOTExMTdFLTI2LDMuMTQwODEyNDA0NTU0NjIzNUUtMjYsNC43NDczMjg5OTUzNjk1MjRFLTI2LDkuNDczMzY4OTc0NTk5Mjc5RS0yNiwzLjkwNzI5NDU1MjQ0MjU2MUUtMjUsMi43Mzk1MDY4OTA0MTE1MzVFLTI1LDIuNDI1NTIzMzgzMDA0MDc0NEUtMjYsNS4wNDA0NjAwMDU1MjE1NDNFLTI1LDYuMTAwODA0NjE2NzY2MzQ4RS0yNSwzLjYwMjQ2NzE2NTkwMjUxNUUtMjUsMi43NjUzNjE3NTY1MTkxOTVFLTI2LDMuMzI5MjE4MzgzMDk4MjQ2RS0yNiw2LjA4NDc5NDA2MjEzMzk4N0UtMjUsMS40MDcwNjU1NTc5MTc0Nzc3RS0yNiw1LjI4MDMxOTIwMTQxNzM0OUUtMjYsNC44MDgzNDEwMTM1NzgxNDczRS0yNiw1LjA1NDMwNzIzMzEyODk4MjVFLTI1LDcuOTczMzA2OTA0NjI0OTAzRS0yNiwyLjI3NzEzMjY2NjkzNzQ1MDNFLTI0LDEuMTM2MTQxNzc3NzUyMjk5NEUtMjQsNC41NzYxMjI3MjcxMTMxMTRFLTI1LDcuMzAzMDI1MDE5NTEyNzFFLTI2LDIuMTA1NDYwMTcyMTYzOTgzNEUtMjUsNS4yOTE3OTg3MTIwNTI2NTVFLTI1LDcuNjYwODY2MzIzNDg0NTg0RS0yNiw2LjMyOTU2NjM3OTc4NDgzN0UtMjYsMS4zMDQ0MjIzODA5NTcxMTI1RS0yNiwzLjA0NzkxNzIwMTQwMjAzM0UtMjUsMS44Mjc5MDc2ODIzMjQyODA0RS0yNCw0LjM3MjU0NzcwMjYwNTIyM0UtMjUsNC4zMzg0NTIzMDUwNzEzOTFFLTI1LDEuNDg2ODAwMjkwNzk5NDc4RS0yNiw0Ljg3NzcxMTEzNzAzMTM1NUUtMjUsMS4xMzkyMTQxNDMyNjQ3NjcyRS0yNSw0LjAzMzY2NzQxMzExMDc0NzNFLTI2LDkuOTk0NjYyMDM1MTM0NjRFLTI3CisxNCxNb24gNyBGZWIgMTEsNC40MTUwODk3NTI1Mjk4NTRFLTI4LDMuMTg2NjIyMzU3MjcxMjMyRS0yOCwyLjM4ODg4NTk5NzQzNjg0MjhFLTI4LDMuODg1NDY0NDc3NjA3MDExRS0yNywyLjY0MjEzNDk3Njk2MTgyN0UtMjIsNC4yODk5MzMxNDc2NTE4MThFLTI3LDQuNDQyNTA2MDQxMjcyODI5RS0yOCwyLjI3NjY5NzE1MzY3Mjg4OUUtMjcsMS4wNDY2MjEyMjU1MzMwMDUzRS0yNywxLjA0NTkyNzkxMjkxMzY5NUUtMjYsNy4yNzkzNzg3MzI3ODM5MzFFLTI3LDEuOTQyNTI1MjMyOTkwNjE0NEUtMjcsMS44OTIzNTUzODkxNjAwMjMxRS0yOCwyLjcxOTc3NjI0MDUyMDUzMjhFLTI4LDcuNTc3Mjk2MzAyODE5MjMyRS0yNyw2LjEwNTUyODMxMzE5OTAyNDVFLTI4LDguMzA2MTMxMTA2NzI2NTQ3RS0yOSwyLjgzNTkyMzk5OTEyOTU0NzVFLTI4LDUuNzY0NzQ1Nzc1Nzk1OTc1RS0yOCwyLjA1NjgwNTQ2ODA0NjAwMjZFLTI3LDEuNDg3NzI3ODUxNzc4NDY0RS0yNywxLjQ4NTk5NTA5Nzg0MDI1M0UtMjgsMi43NDY0OTQ1MzE5NDA2MDUzRS0yNywyLjc2MTQzOTQzNzUxMjc3NUUtMjcsMS44ODAyMzg4MDY0NDM1NjRFLTI3LDEuNDQyNjczODcyNzgxMzkyNkUtMjgsMS45MDYwMDA4MTI3MzU1NTA2RS0yOCwzLjA3Njc0NzM1ODUxMDY2MTNFLTI3LDguNTQwOTI4MzQ2MTQxODkzRS0yOSwzLjA5NTEwNjIzOTMzODZFLTI4LDIuNzMyMDA4Mzk2MTk1NzAxRS0yOCwyLjY3MjYwMDU5NzQ5OTg0OTdFLTI3LDQuNDQ5MzcyMDA0ODA3NTQ0RS0yOCw1LjUxNzY1ODg5ODAzNTIxOUUtMjcsNi4wMTEyOTE2OTQxMTI1NjdFLTI3LDIuNTg2NTc4MzU3NDA3NjI4RS0yNyw0LjQ0NDU2MjIwMTE0NDI1MkUtMjgsMS4xMDgzMjcyMTkwNDM4Nzg1RS0yNywyLjk2MDg4ODgxMjYzMDkwODdFLTI3LDMuOTAwMzY5MDE3MTE5NzM0N0UtMjgsMy44OTY2NTQ1MDQ1NzkxMTc2RS0yOCw4LjAyMTkyOTQ2NDkyMDcxMUUtMjksMS42NDUxNjkwMjMwOTI4MjQyRS0yNyw4Ljk1OTMzODcyODg3NzAzNkUtMjcsMS43NjAxODczNTE1MDQxNThFLTI3LDIuMjg1NTA3MzMxMzQ5NDg5RS0yNyw4Ljk0MDM4NjQwMDk0MDUwN0UtMjksMi40MjA0MDgwMjc0NTcyMTY0RS0yNyw2LjkzMTM3Mzc2MjQxNDgwM0UtMjgsMy44OTk5MDY2ODU5OTI4MDVFLTI5LDYuMTAxMjY5MjAzMDc5MDA5RS0yOQorMTUsVHVlIDggRmViIDExLDEuMjM1MTgwMzQ5OTE0OTkwOEUtMjksOS4yMjgxMzQxNzI2MTg4NTJFLTMwLDYuOTE4Mzk4NTQ4MDAyMzQ1RS0zMCwxLjA4MzE3NzQ3Njk2NDMzNTNFLTI4LDUuNTM0NTQxMTI1NjMxNDMwNkUtMjQsMS4xNzY2NTIxNTAzNDg0NTY4RS0yOCwxLjI4NTA4NDcyNDg3NDYyMzVFLTI5LDUuMjQ3NjQ2NDYwNzczMTkxRS0yOSwxLjMwNzQ1MTYxODE5NTA5NzVFLTMxLDIuOTM1NzQ3MTgyNDI3MzA4M0UtMjgsMi4wMTEzNjA1ODA2NzMxOTVFLTI4LDUuMTEzOTE0MDMyNzMyMjc4RS0yOSw1LjQ3ODUyNzk0NDk0NDk3MkUtMzAsNy44MzkyNjEyNDA2MjUxMzlFLTMwLDIuMTMyOTc1OTk0MDc0ODg2NkUtMjgsMS43Njc4NDYwMTkwNDQ2ODE0RS0yOSwyLjM2OTUwNzU1NTA2NjA2RS0zMCw4LjIxMjE5ODMyMTU0MjEzNUUtMzAsMS42Njc2NjA4NzYyNTU0OTMyRS0yOSw1Ljg5MjM2Njg5MzI2NzIzM0UtMjksNC4yNzIyNzY2NjE5MTc5NDhFLTI5LDQuMzAwNjczNTY5MTQ5NjQ3NkUtMzAsNy44ODg5OTY2Mzc1NTMwNUUtMjksNy43OTc3OTYwNDI3NDE1MzhFLTI5LDUuMzgyODMzNTI4MTM2MzE1RS0yOSw0LjE2OTg3MTAwMjUzMDUzOUUtMzAsNS40OTM0MDc5OTc1OTMxMjFFLTMwLDguNzg0NjU4MzM2Nzc2MTZFLTI5LDIuNDcwMzk1MDQ3NDU5ODg3N0UtMzAsOC45MzM3NjIyNDI2MTMxMTZFLTMwLDcuODcwMjE0MjIxNDYwMDRFLTMwLDcuNjU5MjQxODIwMzQ0NjU3RS0yOSwxLjI4MDE5NzE5NzYzODA4NzRFLTI5LDEuMzUzMDE3NzAyMTg4NTMwNEUtMjgsMS43MjI4MjEzNjc1OTMyOTQ4RS0yOCw3LjQ0ODcwNTE0OTE5MzgzMUUtMjksMS4yODU3NTkzMzc0Njk4NTc3RS0yOSwzLjE3NTE1NDU3NjE4Njk1OEUtMjksOC41MjA3ODc2MTY4NTQyNzJFLTI5LDEuMTE0MjkwNjg4NDM1NzQzOEUtMjksMS4xMjgzNTI4MDY0NzY3MTA4RS0yOSwyLjMyMjM4NjE3MjQ4NjQ2NDNFLTMwLDQuNzIyMjU3NzEzMzUwMTU1RS0yOSwyLjU1MDgwNzUzNTIxMTY3MDNFLTI4LDQuODk2ODQ3Mzc2NzY2ODUzNkUtMjksNi41NDc5NTI4NjQ1MDMwNDRFLTI5LDIuNTg0NDg5MjYyMTgxMTk4N0UtMzAsNi44OTkwMjk1NjU0OTUyNDNFLTI5LDIuMDA1MTMyNTYyNTYxOTk5RS0yOSwxLjA3MDg0NjY2Njk3NzQ1NjRFLTMwLDEuNzY1MzY0Mzc5OTE4ODU2RS0zMAorMTYsV2VkIDkgRmViIDExLDEuMDY1ODIyODg5NjA5NTA0RS0zMCw4LjA2ODIzNzQ5MjQ1MjA4M0UtMzEsNi4wNDUwNTc2MTk3NjM2MDdFLTMxLDkuMzM4NzQyMDg1NzcyMzk2RS0zMCwzLjEyNTMzMDA5NjQ4NDcwODRFLTI1LDEuMDEwNzM5MDU5NjU1NjAwMUUtMjksMS4xMjE0MTQ1MzY1MDMyMTc2RS0zMCw0LjM0MDk3ODQxMjAxODAxNzRFLTMwLDEuNzQ1OTg1NjQ4MTE2MDIyRS0zMywyLjUzNTI1ODc3ODc2NjQyMDVFLTI5LDEuNzMwNTc2NDI2NjQ0NTI0NUUtMjksNC4zNTQ4MjUyMjYyMjE5MzJFLTMwLDQuNzkxMTU1NjgzMzMzNjQ0RS0zMSw2LjgyNjU1MDMwNzU0NTkzM0UtMzEsMS44NDMzMzg5MjE2NzExNDc3RS0yOSwxLjU0NDExNjUyNjE4ODQxMzhFLTMwLDIuMDc0NjQ4NzUzMjg2NDgzRS0zMSw3LjE4MDM4NTg4NTQ2ODQ5N0UtMzEsMS40NTUzMjcxODA0NjIwNDkyRS0zMCw1LjExODQ4Mzg5MTcwMTQ4MkUtMzAsMy43MTQ0Njk5OTYxNDc3NTNFLTMwLDMuNzU0NDkyMjg1MDc5MjRFLTMxLDYuODU5NjM4MjA1NDgyMzI4RS0zMCw2Ljc0NDQzMDY5NTA2Mjc2MkUtMzAsNC42NzQ3NDIwMDg2MjEyMDFFLTMwLDMuNjQ4NjEwOTcxODc4Njk2RS0zMSw0Ljc4MzYyMjc4MjEzOTgwOUUtMzEsNy42MjIyNDIwNjU4MTEwNjdFLTMwLDIuMTU1NjAyNDE4NTQ5NTRFLTMxLDcuNzg1Mjc0MjQ5Njk5OTAyNUUtMzEsNi44NTE3NDQyOTA3NDYzMTZFLTMxLDYuNjU0MTUzMTMyMzkzNTk5RS0zMCwxLjExMzkyOTcwNTg3OTUyRS0zMCwxLjEzNDk3OTc3ODg2MjkzOTVFLTI5LDEuNDk2NzY4NzkwMTEzNjY4N0UtMjksNi40ODM3NjUxNjQzNTMwNUUtMzAsMS4xMjIwNTcyNzQ4NTY3Njk4RS0zMCwyLjc1ODE0MTUwNDg1MTQzMUUtMzAsNy40MTQ3MjE5NjU1MzUxMjdFLTMwLDkuNjcwMzEzODEyODI1Mjc1RS0zMSw5Ljg1NjYwMTIwOTUyMjI0N0UtMzEsMi4wMjgwOTUyOTI2Mzk3OTUyRS0zMSw0LjEwNDk4MjQ4MTI5OTk2MUUtMzAsMi4yMTEzMjQ4MzIyMDg0NTVFLTI5LDQuMjE5ODI4MzgzODEyOTQ5NkUtMzAsNS42ODgwOTAyNDQzMTI1MDk2RS0zMCwyLjI1NDI3MjMzMTI4Mjg2NzJFLTMxLDUuOTgyOTQwNzA2MTU2NjU5RS0zMCwxLjc0OTgxODU1ODk3MTI4MjhFLTMwLDkuMzc0NDYyMTc3MTk2OTM2RS0zMiwxLjU0MDgzODQ1Nzg2NTU4NzJFLTMxCisxNyxUaHUgMTAgRmViIDExLDEuODczNjQ3MTg5OTE1NzY1MkUtMzEsMS40MjQ2MzE0MzQyMTMxNjU0RS0zMSwxLjA2NzIxODUwMzc0MTUzMjdFLTMxLDEuNjQxMTg5NDg0NTIzMjY4NEUtMzAsMy43NjA3OTUwNjUyNTM0MDFFLTI2LDEuNzczOTIxMzkxOTY3NjQyRS0zMCwxLjk3OTA2MDIyOTI2NTY2MzVFLTMxLDcuNTIxNjU4OTcyODgzODI1RS0zMSwyLjkyMDUxNzQ1NjczMTY5N0UtMzQsNC40NTgxMTcyMjMyODM5MzNFLTMwLDMuMDM5MDcwNTg3NTYyMzk1NkUtMzAsNy42MTk3MDQwOTQ3MzM3OTJFLTMxLDguNDYwNDIyMjIxMDkxNzcyRS0zMiwxLjIwMzk0OTk2NzAwNTU3NzJFLTMxLDMuMjQyMjY2NTU2NzUyNDM4RS0zMCwyLjcyNTc2OTIzNjg1MDU2MThFLTMxLDMuNjY0NDc0MTY2MDMwMTAxRS0zMiwxLjI2Nzg3ODQwMzUyMzQ5NjlFLTMxLDIuNTY4Mzc4MjMwNjYwNTI4RS0zMSw5LjAxOTUyNDQ4MTIzMjAyN0UtMzEsNi41NDc0NTY2ODY5NzcxNDFFLTMxLDYuNjI2Njk4MDMwMzI5NTE5RS0zMiwxLjIwOTE4MTExNDc0ODQzMkUtMzAsMS4xODY2MzQ3MTE5OTk4MjFFLTMwLDguMjM2ODkwODI2NDE3MjI3RS0zMSw2LjQ0MzY3MTQxNTY2ODY2RS0zMiw4LjQzNjQ2MzQ0Nzg3ODU1M0UtMzIsMS4zNDI2MTQ3MTAzNjA0ODZFLTMwLDMuODA0MDk5NTA4ODQ0OTM2RS0zMiwxLjM3MzM1NDI3NDk3MzExMTRFLTMxLDEuMjA4MjkwOTQzNDY2NjE4NkUtMzEsMS4xNzI2MTIxOTU1MDM0NTU2RS0zMCwxLjk2NDAzOTM5NjkzNzYzOTNFLTMxLDEuOTc1NzY3MDM2OTU4ODQzRS0zMCwyLjYzNzY2MDcwNjM4NzczOUUtMzAsMS4xNDMzMzkxMDU0Mjc5OTMyRS0zMCwxLjk4MDIyMjk1OTAzNTI3OEUtMzEsNC44NjAyNTMwNjczMDc1M0UtMzEsMS4zMDczNzA3NzIzOTc4ODI2RS0zMCwxLjcwMzQ4NzgzNzA5Nzg0OUUtMzEsMS43Mzk5OTk3OTUxNjUyNDY1RS0zMSwzLjU3OTkyODI4NjM1ODQ0OUUtMzIsNy4yMzUzNzQ4MjE3MzUwNjI1RS0zMSwzLjg5MzkwMDQ4MjI0MTMyMUUtMzAsNy40MTQ2MjIxODM1ODk3NTJFLTMxLDEuMDAyMzMzMDQxNDU5OTYyNEUtMzAsMy45Nzc3NTM0NTY3NzE2Nzk3RS0zMiwxLjA1MzY2MTcyNDY5Mzc2NDRFLTMwLDMuMDg4MDkzNzI2NTYwODc4NEUtMzEsMS42NTU4Mjc3MzE2MTUzNjE3RS0zMiwyLjcxOTQxOTEwNDY1NTMzNkUtMzIKKzE4LEZyaSAxMSBGZWIgMTEsNS42ODYzNTc0Njc2NzQ1NDRFLTMyLDQuMzYyNTM4OTM1MDQyOTg2RS0zMiwzLjI2NTk1MjY3NzQyOTE2M0UtMzIsNC45Nzg4NjA4NjI4Nzc0NjVFLTMxLDcuOTk0MDExNTA0MTEwMTM2RS0yNyw1LjM3Mjc2NDY5MTY2Njk1M0UtMzEsNi4wNDkyMTc0MjU2MzE2MDNFLTMyLDIuMjUyMjgwNTM4MDQ3ODI3N0UtMzEsOC45OTQ2NjU3OTEzNjAxNThFLTM1LDEuMzUzNTM2NjEyOTM5ODYxNUUtMzAsOS4yMTEwMzAxOTE2MDA4NThFLTMxLDIuMzAwMzQwNDAyNTM2NzM1M0UtMzEsMi41OTE1MTgzNjQ1MjIxNTM2RS0zMiwzLjY3Mzg1OTM1NDk2MTM3MjVFLTMyLDkuODQ3NTM3MTE1NTc2NjA4RS0zMSw4LjMzODU2ODY2ODQwMzY0NEUtMzIsMS4xMjQ2MDg0NDE2OTkxMjA5RS0zMiwzLjg4Mjc1ODE0MjE1OTczNTRFLTMyLDcuODUwODIyNTg5Mjg1NzY0RS0zMiwyLjc0NzU4NzMzMDIxNDE1N0UtMzEsMS45OTU3MDc5NTEwMTI0MDlFLTMxLDIuMDI2MjY0NDMwMzQyNDE2RS0zMiwzLjY4NTkwNjU1MjEzOTUzMzhFLTMxLDMuNjA1NjMzODQxOTg1NzU3NkUtMzEsMi41MDg3ODUxODQ3MjY2MTdFLTMxLDEuOTc1MDY1MTI2MTc5ODcyRS0zMiwyLjU3NDM0MjE1NzA3MzA3RS0zMiw0LjA4NzAyNjY2NTMwMTg2M0UtMzEsMS4xNjI2OTEwODQ3NzQ3OTE1RS0zMiw0LjE5MzEwMTEwNzA4NzgxMzNFLTMyLDMuNjg2NDA2MjcxNzMzNjE3RS0zMiwzLjU3MjM4NjE5NTY3NjY1M0UtMzEsNS45ODk4MTI4NzIwODc5ODRFLTMyLDUuOTM3NzMwODIxMTE5ODcxRS0zMSw4LjAzNTc3NTY3MTMzMzY1M0UtMzEsMy40ODc4NDM5Njc3MTgxOTU1RS0zMSw2LjA1MzAyMzkyMzQxNTkzNEUtMzIsMS40ODA1NjI3NDg3MDc2ODg0RS0zMSwzLjk4NzM2Njg1ODY0MjcwM0UtMzEsNS4xODYxNzM4MzYwNTY2NzZFLTMyLDUuMzIzNDg1MTM3NjYyMTA0RS0zMiwxLjA5NDk2NDkxMDI3MDAyODVFLTMyLDIuMjA1MTI5MTE4NjYyMjQ4RS0zMSwxLjE4NDcwNTY5ODAxNDg0MTdFLTMwLDIuMjQ4ODU3NTE1NjAyMjE4N0UtMzEsMy4wNTM0MTYxNzUwNzE1NjY2RS0zMSwxLjIxNTM2MzQ0ODIyMjAyNjhFLTMyLDMuMjA2Mzk1MjQxMTg1MzUyM0UtMzEsOS40MzkzOTMyNTEwODczNTlFLTMyLDUuMDg2MDY3Njg3MDEwMDU2NkUtMzMsOC4zMTM2ODA4MTgyOTA0MzhFLTMzCisxOSxTYXQgMTIgRmViIDExLDIuNTczNjg0NjE0MTEyMzAwM0UtMzIsMS45OTUzODk0MDUwNjA4NDc0RS0zMiwxLjQ5MjY1MzgzNTI0NkUtMzIsMi4yNTI0NTExMjg0MDE1ODAzRS0zMSwyLjU5NDE2MDk3OTMzMzM5MkUtMjcsMi40MjYyOTA3MTkwNTI2MzIzRS0zMSwyLjc2MDc0ODA1MzY0NjJFLTMyLDEuMDA1NTMxNDQzNDU4NDE1RS0zMSw0LjE1MTk1MDMyMTIzMTg0MUUtMzUsNi4xMjg5MzEyOTAwODkzNEUtMzEsNC4xNjI4MDU1ODE1NDcwMDJFLTMxLDEuMDM1MjMzMDkzOTc5NTA1RS0zMSwxLjE4NTc1NDczMzE2ODgwOTZFLTMyLDEuNjczMzM3MTQxODIwODQ3RS0zMiw0LjQ2MDkxMTI4NzgyMzI0MUUtMzEsMy44MDkzODM5NjY0MTIzMTQ3RS0zMiw1LjE1NzY3MDY4ODEyMDA4M0UtMzMsMS43NzYwNzAyNTI2MDU1NzU3RS0zMiwzLjU4MzEyNDg2NDE0OTk5M0UtMzIsMS4yNDg5MTQ0ODA2MTczMTg0RS0zMSw5LjA3Nzc2OTM0MzUzMzUwNUUtMzIsOS4yNTE1NDc0NTI5NjEwMUUtMzMsMS42NzY3MTg0NTY4MDYxMDJFLTMxLDEuNjM0MTM2ODMwNTY1MTVFLTMxLDEuMTQwMTU5MjI5NTU2MDU5NkUtMzEsOS4wNDQxOTIxODg0NjY1NzFFLTMzLDEuMTcyNTEyMjkyNzcyNjEyMUUtMzIsMS44NTYyMDExNTA3OTA0NzY0RS0zMSw1LjMwNTg5NTM4MDc0MzkzMkUtMzMsMS45MTEwODUzMzc3OTU1MTkzRS0zMiwxLjY3ODY3NDAzODMzMTU2M0UtMzIsMS42MjM5ODQ1NzE4MDc4MTlFLTMxLDIuNzI2MzIwMjcwMzQ0NDE0N0UtMzIsMi42NjAwNTI4MTI1NjgyOTc2RS0zMSwzLjY1MzA2MTc2NDI5MDQzNzVFLTMxLDEuNTg4MDM5NzE4ODQwMTg2NUUtMzEsMi43NjI2MjM1NDM4MjQzMDlFLTMyLDYuNzI5ODkyMDU0MzA3MjA2RS0zMiwxLjgxNTAwODI3ODg4Njk1ODVFLTMxLDIuMzU1NzI3NTQ2NDc2MTk1RS0zMiwyLjQzMjI3NjAwNzY0MzQ0NkUtMzIsNS4wMDExNjUyNzMwODM0M0UtMzMsMS4wMDI4OTU3Mzc3NTk1NzJFLTMxLDUuMzc3MjU5MjYxMjY4Mjk5RS0zMSwxLjAxNzEzMzE3MDkxODUyOUUtMzEsMS4zODc5NTE2MTY2Mzc3OTU1RS0zMSw1LjU0NDA1ODEzNzQ2NTQ0NEUtMzMsMS40NTU3MDAxOTA4ODQ5MzQ3RS0zMSw0LjMwODExOTc0NzYyMzQ5NEUtMzIsMi4zMzUwODE4NzM5MTcwNjhFLTMzLDMuNzk1MDE0MDExMDkzMjMxNEUtMzMKKzIwLFN1biAxMyBGZWIgMTEsMS41NjQzNjcxNjk1Nzg3MzdFLTMyLDEuMjMxNDMwNjE4NzAxMTQ3OUUtMzIsOS4xOTk5MDMxODUxMDQxMDFFLTMzLDEuMzY4MzI3NjA5MTgyMjcxM0UtMzEsMS4xNDk3MjE3OTU0MzgzNTU4RS0yNywxLjQ3MDY0NTE4Mzc2NzA5MUUtMzEsMS42OTc3MTIwNjQ0MDU4MjA4RS0zMiw2LjAxNzcyMTcxMzAxNTkzMkUtMzIsMi42MTc4NjAyMzEyNjA2MzNFLTM1LDMuNzI3NDg3NDkxNzA2MDM0N0UtMzEsMi41MjU1Nzc3OTkzMjk0Njk2RS0zMSw2LjI0OTI1NzIxNTg1NjkyRS0zMiw3LjMyMjA1MDg5NjE5NzEzMkUtMzMsMS4wMjU5MTU1NjQzNjc3NjFFLTMyLDIuNzE0NDk2NjYyNjY4MDM0RS0zMSwyLjM0NjI3NTQzNTE3NjkzNkUtMzIsMy4xOTgwNTIxMTYxNTYxMDA2RS0zMywxLjA5NjIxMzA1OTkyNzM3MzdFLTMyLDIuMjAzNTgxMTEzMDUzNDQ5M0UtMzIsNy42MzQ4MjkzNTA2MDY1NTZFLTMyLDUuNTU0ODI0OTUwMDYxODVFLTMyLDUuNjkzMTEyMDg3OTM1MTMxNUUtMzMsMS4wMjYxMjI3NTEwMTkxODkyRS0zMSw5Ljk1MDE0MTkwNjY0NTczOEUtMzIsNi45NjgyMTU4ODE2NzMwMjNFLTMyLDUuNTkyNDgwNjk2NTkxMDY2NEUtMzMsNy4xODgzODI1Nzk3OTkxMTNFLTMzLDEuMTMzNDExNzY0NDI0OTdFLTMxLDMuMjYyNDUzODI2NzU4MTcwNEUtMzMsMS4xNzI4MTQwNjQyOTg4OTczRS0zMiwxLjAyODg0ODAxODIwODIxNjJFLTMyLDkuOTI5MDUyMTU4Njg2Njk3RS0zMiwxLjY2OTgyNzY3NjI1MjE0MjVFLTMyLDEuNTk3Njg0MTMyMTA5MTAwMkUtMzEsMi4yMzM1MjU1NDQyNDQ3NUUtMzEsOS43MzEwNjMzNDUyMDQwMzdFLTMyLDEuNjk4OTk3NTY0NjY4Nzk0N0UtMzIsNC4xMTQxMDAwNTIxNzY2Mzk3RS0zMiwxLjExMTc3MDI0MjI5MTg3RS0zMSwxLjQzODcwMTg5MDAzNDkwODRFLTMyLDEuNDk4MzgzNzgxMDE4MDE4OEUtMzIsMy4wNzkyNzMyNTc0MzI1ODM3RS0zMyw2LjEzNTY1OTUyMjUzNDk1RS0zMiwzLjI4MDY0NzQ0NDg3MTA1ODNFLTMxLDYuMTc2OTU0Njc3MjkwNzYxRS0zMiw4LjQ4NDk4MjI1NDI1MTQwNEUtMzIsMy40MDY4MDUzMjIwNTQ1MDRFLTMzLDguODg0MDc1NDUxNzQ3ODI2RS0zMiwyLjY0OTQxNTQwMDU1MjE0RS0zMiwxLjQ1MDg4ODE1MzgxODgwMzdFLTMzLDIuMzM0NTA0MzkwMTAyMzY5RS0zMworMjEsTW9uIDE0IEZlYiAxMSwxLjE1NTQzMTkyMzI4NjE2MDhFLTMyLDkuMjEyMjM5MzYwMzMyNDA3RS0zMyw2Ljg3NTQ3MjczNjc3MTk3NEUtMzMsMS4wMTAxMjA1NDM2NTI2OTY1RS0zMSw2LjQwMDAxOTM4OTE1NDQ1MUUtMjgsMS4wODM0NzAwNzc0MDEwNTU4RS0zMSwxLjI2NjQ2OTkzMTk2NjM0NDdFLTMyLDQuMzgxNzIyMDMzNTgyOTRFLTMyLDEuOTg0NDYyNTM4NjYzOTM3N0UtMzUsMi43NTQ1MDI2MTYxNDM0NDM1RS0zMSwxLjg2MjI1OTExODI4NTEwMDNFLTMxLDQuNTg2ODc0NTMxNDUwNzEyNUUtMzIsNS40ODAwNTc1NzE4MjMyOTg2RS0zMyw3LjYzNDIyMTQ3MzExMjY1M0UtMzMsMi4wMDY4OTQ5NjgzMjA1MDM3RS0zMSwxLjc1MjUxMjAzNDY5MDUyNjRFLTMyLDIuNDAwODkzOTAzODUxMDYyRS0zMyw4LjIwMTQ1NDc1MDI1MTEwM0UtMzMsMS42NDM5MzI3MzQ5ODYxNTIyRS0zMiw1LjY2NzM5MDg5NzMzNDU4NkUtMzIsNC4xMjY4MzYzMjI3NTIwMzc3RS0zMiw0LjI0OTMzNTQ4MTU5Mjg4MkUtMzMsNy42MjQwNzE3Nzg4NTMyOTJFLTMyLDcuMzYwNTE4MDk4NjYzNjYzRS0zMiw1LjE3MTQyNzI1OTM2NjU1M0UtMzIsNC4xODk5Njc4MjU2Njg5NEUtMzMsNS4zNDg5OTYxNTE3NjY5OTJFLTMzLDguNDA0OTgyMzA5MjQwNTc1RS0zMiwyLjQzMzUxMTY3MjI1MTA2NzNFLTMzLDguNzM0Mzg5NjE2OTUwNjI1RS0zMyw3LjY1MzkyNzI3MTAxNTUwNEUtMzMsNy4zNzEyNzI2NTg0NTI3MzNFLTMyLDEuMjQxNTM5ODIxODI2NzM0RS0zMiwxLjE2NzIzMDc2Njc4OTc5NzNFLTMxLDEuNjU4MTgzMDg2MDY1MDIwMkUtMzEsNy4yMzgwNDQ4MTY2MTczMDdFLTMyLDEuMjY3NTA4NzEzNjk4NDQ5NEUtMzIsMy4wNTM5Mjc5MzE3ODczNDdFLTMyLDguMjY2ODMzNTI3Njc0ODk2RS0zMiwxLjA2NzA2NzM4OTA4NDkzMDJFLTMyLDEuMTE5MzY5MDc2NTk3OTM3MUUtMzIsMi4yOTkzOTE5Nzc2NDk2M0UtMzMsNC41NTc1ODc3MTEwNDI3ODk3RS0zMiwyLjQzMTAzOTg0NDEyNTE2MzNFLTMxLDQuNTU4NjIyMzExODI3OTM0NEUtMzIsNi4yOTg1ODk5ODQ1NjM1ODVFLTMyLDIuNTM5OTE4NjU5NjYxNTZFLTMzLDYuNTg1MTg4NTAzNTk4Njc0RS0zMiwxLjk3NjUxOTc5MTM1MzI4MjRFLTMyLDEuMDkwODI3MDQ5NDAwNDFFLTMzLDEuNzQxOTc1MjIwMjk3MDczN0UtMzMKKzIyLFR1ZSAxNSBGZWIgMTEsMS4wMDIxODk5MTc4OTc0MjM1RS0zMiw4LjE0NjE3NzcyODQ0MzQyNkUtMzMsNi4wNjkzMzU0OTgyMzc0NDRFLTMzLDguNzU1NTk1NzcxNTM4NzZFLTMyLDQuMjAzNDM4ODM2MDY0OTJFLTI4LDkuMzY3MDc0MTYwODE3NTIxRS0zMiwxLjExNDYxNDc4Mzc3ODQxNEUtMzIsMy43Mzc0Mzk1MjA1NzM1NTlFLTMyLDEuODExMDgzNDA4OTAzMDEwNkUtMzUsMi4zOTA3OTk1MjIxNTM4MzA3RS0zMSwxLjYxMTc1NTAxNjgwMTA0ODhFLTMxLDMuOTQ3NDczOTcxMDAzNzA0NEUtMzIsNC44NDk3NTM3OTI4MDQyNzc1RS0zMyw2LjY5MjU4NzUwNTI1NTgwMkUtMzMsMS43NDMwMjczNzAyODAxNzhFLTMxLDEuNTQ1NjA4NTI3MjA2NTAyNUUtMzIsMi4xMzY4NzI3ODU4MTEzNzlFLTMzLDcuMjUzNTQ5MDAwMzQwNTY1RS0zMywxLjQ0Njk0ODkwMDY0NzMzNDdFLTMyLDQuOTUwMDkxODQ5NjAwMjg4RS0zMiwzLjYwODk1MjAxMzY5MjU5NTNFLTMyLDMuNzQzMjA2OTIyNTY3OTE0RS0zMyw2LjY2ODI0MjYxNjc2MDg4N0UtMzIsNi4zOTc2MTgwNDkwNzgxNzNFLTMyLDQuNTE1NDYzMTk0MTQyMDI3RS0zMiwzLjcxNTAwMDcyMzQ4OTI1NTZFLTMzLDQuNjg5MDMxMjIyMzQwNDg0NEUtMzMsNy4zMzA1OTg2OTA1ODc3OUUtMzIsMi4xNDEzODkxMTAyNTYyMjI4RS0zMyw3LjY2NjYyNDcwODAzOTY2OEUtMzMsNi43MDcwMjU1MDg4MzY5OTVFLTMzLDYuNDM5NDIwNDU2MTEyOTQ1RS0zMiwxLjA4NzAxNjMzNDQyMDUzMDJFLTMyLDkuOTkxODgzMDEzMDI3MTQyRS0zMiwxLjQ0ODU5NDUwNjI5MDA4MTRFLTMxLDYuMzQwOTg5NDM2ODA2Njk5RS0zMiwxLjExNTY0MzEzNzcyNTA2MzVFLTMyLDIuNjY3NDA1MzY1Njk5MzM5N0UtMzIsNy4yMzg4MTc3MjY2NDg0NTNFLTMyLDkuMzA4ODgwNTk5OTg2NDQ1RS0zMyw5Ljg3NDc1MzUyMDkyODUyN0UtMzMsMi4wMjcwMDk5Mjk4MDQ3MjFFLTMzLDMuOTg0NjU0ODI1Njk3Njg2RS0zMiwyLjExODA5NTg1Nzg4OTA5RS0zMSwzLjk0OTg4MTQ3ODI0NDIyMTRFLTMyLDUuNTAxNTYwODA4OTk4NzQ4RS0zMiwyLjIzMzIyODkyOTY0NTIyMTVFLTMzLDUuNzM5NzkxNTk1ODAwOTA0RS0zMiwxLjczOTY1ODQ2MTQ2Nzc2ODNFLTMyLDkuNzM3MTE2ODQ4MTI1NzRFLTM0LDEuNTMzNzc0NDM3NTYzNTgxNEUtMzMKKzIzLFdlZCAxNiBGZWIgMTEsOS40NDI2MTI1NzYzNDY5NEUtMzMsNy43ODcxMDYzODc5MjAzOTdFLTMzLDUuNzk0ODYyMzc0OTQ1MDc0NUUtMzMsOC4yNDQ5OTk2MzY2MzkwMDdFLTMyLDMuMTEyMDQ2NTYxODU5NDMzRS0yOCw4LjgwMjEzNjAzMjg5MTcxNUUtMzIsMS4wNjE5MzY3ODg1NzI5NzY4RS0zMiwzLjQ3MTU0Nzk3MDg0NDg5MzZFLTMyLDEuNzYyMjQ5MDQzODcxMzYzNkUtMzUsMi4yNTM4MzU5NDY3NjEwMDkzRS0zMSwxLjUxNTkwMjE5MzI3ODEyODhFLTMxLDMuNjk1MjMxNTU2MzAzMTM5N0UtMzIsNC42Mzg1MTQyNDA4ODY1ODM1RS0zMyw2LjM1ODA1MTU3MDIzMDQ2M0UtMzMsMS42NDQwMjEzMjU1OTk1NzAzRS0zMSwxLjQ3NDc1NzAzODQ2ODQyNEUtMzIsMi4wNTE1MTY0NTc1Nzk0NTk2RS0zMyw2LjkzNDYwMjM1MDAzNTE2N0UtMzMsMS4zNzg2NTM5MTc4MjgxMjZFLTMyLDQuNjg5NTk4NTg0NzgyODJFLTMyLDMuNDIyMjQxMDAxOTYwMjUzM0UtMzIsMy41Njg2MDk2NDk3MzUyMTY2RS0zMyw2LjMyMzkyNjMzNjM0Nzc3N0UtMzIsNi4wMzc4ODczNzc2NDE4NzFFLTMyLDQuMjc2Nzk3MzYwMTIzODEyNUUtMzIsMy41NTc2ODk5MDQ0NDE3MzZFLTMzLDQuNDU0NTA0MjQ2MTEzNTkzRS0zMyw2LjkzNzEwNTA5MTI5MzE4M0UtMzIsMi4wMzk5NTU1NTM0MzgwMTJFLTMzLDcuMjkwMTMyODIwMzc4NjI0RS0zMyw2LjM2OTc2MDM4NzM1Mzk0N0UtMzMsNi4xMDEzNTEzNDg5NjM4MTlFLTMyLDEuMDMxNjk2Mzk4MDMwNzIzOEUtMzIsOS4zMTA1NzM3NzM5ODgyNTlFLTMyLDEuMzcyNTY3Njk1NzY2MDk0MUUtMzEsNi4wMjA5OTI0MjA0MjkzNUUtMzIsMS4wNjI5OTQ2ODk0NzE5MTYyRS0zMiwyLjUyNzAzNjY4MDkwMTI3MDdFLTMyLDYuODcxMDUzNDU3NDk2ODU5RS0zMiw4LjgxMDgxMzgxMDA1OTA5NkUtMzMsOS40MjM4Mzk0ODcyMDg5OTZFLTMzLDEuOTMzNDc0OTk5NjUyMzQ2RS0zMywzLjc3Nzc5MTY0MjA1NDgwNzZFLTMyLDIuMDAyNzg3OTU4ODk3NzEzN0UtMzEsMy43MTg0MTExODg5NDg5MjJFLTMyLDUuMjEyMTYxOTQ2MjMwNDY3RS0zMiwyLjEyNjIxMTE0Nzg5ODg1NDVFLTMzLDUuNDI5MDIwNzgxNjc5NjJFLTMyLDEuNjU3NTMwNDQ5MTQ0Nzg0M0UtMzIsOS4zNjU0MjUxNzgxNTA3MzVFLTM0LDEuNDYxNzQ0MzM4MTQ1NDIwMUUtMzMKKzI0LFRodSAxNyBGZWIgMTEsOS4zMjI2MTkzOTI5MzI4ODhFLTMzLDcuNzgwMTg3ODIwNTgyMzMyRS0zMyw1Ljc4NDE5NDk4Njk3ODE2MjRFLTMzLDguMTM2Mzk5MDE3MTk1NTY0RS0zMiwyLjUxMTE4NjQ1MTc3NTQ4NjRFLTI4LDguNjcwMjA4MzA3Nzc5MTQ0RS0zMiwxLjA1ODE2ODAyMjE1MTAyMjRFLTMyLDMuMzgzMzc5NTkyNjE4NjQ1RS0zMiwxLjc4NTI0MTA4ODUxNTkxNkUtMzUsMi4yMjYyMzY2MjY2NDE5MTM2RS0zMSwxLjQ5NDM0NjQzNTY1NzhFLTMxLDMuNjI3NDk5NTM2MTc5MTE3NUUtMzIsNC42MzY0MDAzMTU4NTA5NzNFLTMzLDYuMzIwNzk0NjMxMTk3NTc5RS0zMywxLjYyNDYwNTYxNDM1ODg1NzVFLTMxLDEuNDcxMjgxNDU4MzY1OTI4OEUtMzIsMi4wNTY2ODI5NTg5NDcxNDVFLTMzLDYuOTI5MDU5MzQ3ODkxMjY2RS0zMywxLjM3MzgzMjk0MjI2NTc5OEUtMzIsNC42NTE0NjU1MzQ1MTA2MDQ1RS0zMiwzLjM5NzA0NTU3OTI3NzAzMjdFLTMyLDMuNTU3Nzk3MzM2NTM5ODQ4RS0zMyw2LjI3NzkxNTMxOTA0Njg0MkUtMzIsNS45Njk2NjIzOTc0OTE1NzZFLTMyLDQuMjQxMTYxNDU3NDc3MzQzNEUtMzIsMy41NTk2MzMxNDA1NDQzMDJFLTMzLDQuNDI4Mjg3MzY1MzY3OTc5RS0zMyw2Ljg3NDMyNDc0NTA3MjIxMkUtMzIsMi4wMzI1MzIwODU4MDAyNzRFLTMzLDcuMjUyODcwMDQ0NjQ1OTk2RS0zMyw2LjMzMDgwNDUxODQ0MjE1OEUtMzMsNi4wNTIzOTUzNDk4NzA3NjdFLTMyLDEuMDI0ODUwNTg3NzkyNTYyN0UtMzIsOS4xMDE1MDIwOTc1NTk3ODRFLTMyLDEuMzYxNTc0NDYyNjA5MDIxMkUtMzEsNS45ODMyNDQxMTAzMzA5MDRFLTMyLDEuMDU5Mjg0ODU4ODAwMjc1NUUtMzIsMi41MDY0ODg4NDg3NzYyNjdFLTMyLDYuODI1OTc0NDE0Mzk5MjM3RS0zMiw4LjczMjQxNDE3NDM0ODM2RS0zMyw5LjQwMzAyNjM5NTM1MTY5RS0zMywxLjkyODQyNjcyODQyMjI2OTZFLTMzLDMuNzQ5MzkyOTkzOTI4Nzk0N0UtMzIsMS45ODMzMjY2NTQyNjU1NjFFLTMxLDMuNjY4NDczNjQzMzI2ODg4NkUtMzIsNS4xNjk4NzQxOTI5NjUzMjZFLTMyLDIuMTE3NDgyNjIwMTU5NjM4OEUtMzMsNS4zNzc2NzgwNjgzNDk1NjdFLTMyLDEuNjUxNzIwMzY4NTgwMDg4NkUtMzIsOS40MDI1NjMyMDgxODY1NzZFLTM0LDEuNDU2OTIzODU3NTU5ODQ4M0UtMzMKKzI1LEZyaSAxOCBGZWIgMTEsOS42MjA5NjkxODMxNTcxOTJFLTMzLDguMTM3OTQ2NzM1NTk0MTQ0RS0zMyw2LjA0MzIyNzU2NzYyNDQ1NkUtMzMsOC4zOTI1OTAwNzU2MTA1NkUtMzIsMi4xNTUxOTUxMzY1OTA2NTlFLTI4LDguOTI1ODY3ODA3MDY0NzkzRS0zMiwxLjEwMzMxODE3ODY0OTcwMUUtMzIsMy40NDU5NjU2MjA2NTk3MjJFLTMyLDEuOTA0MTczNTAzMTQxODk1OEUtMzUsMi4yOTg2MzAzNDAwNTcwNzYzRS0zMSwxLjUzOTY2OTI4NjQ5MDM4N0UtMzEsMy43MjEzNzg2MzYwOTU4OTJFLTMyLDQuODUyMTUxNzk0NDkwMTA0RS0zMyw2LjU3Mjg1NzQwNzUwMDk4OEUtMzMsMS42NzgyMjc5MjUxMzk1MzY5RS0zMSwxLjUzNjIyMjU1MjA0NzA4OUUtMzIsMi4xNjAzODk0NDMzNzU4MzY4RS0zMyw3LjI0ODQ2NDkzMzg2OTc1NEUtMzMsMS40MzI1Mzk1OTU4ODkzMDUyRS0zMiw0LjgyNDUyODE0ODkxOTA3OEUtMzIsMy41MjY0ODUyNTU1NTc4OTU2RS0zMiwzLjcxMTg3MDkwNjkxMjA5NzVFLTMzLDYuNTE3NzYzNDU4OTQxOTQ1RS0zMiw2LjE3MDEyNjU2NDE3NDY2NEUtMzIsNC4zOTc5Njg2MDg0MjAyNDhFLTMyLDMuNzI5ODY4MzA5NDgzMzE0NEUtMzMsNC42MDQ3NDQ3MTU4OTM1OTc0RS0zMyw3LjEyMjc4NjA3MDAyMzE2NEUtMzIsMi4xMTkwMzI2MDM5NDI3MzU0RS0zMyw3LjU0ODU5NTI4ODI2NDA0RS0zMyw2LjU4MTMzOTMyNjU0Njk1MkUtMzMsNi4yNzgzMzg0NzMxNjczMTRFLTMyLDEuMDY0Nzc3MTcxMTU0MzM2M0UtMzIsOS4yOTc1MDYyNzQ0Mzc1MDJFLTMyLDEuNDEyNDI2NzEwOTExOTk4NEUtMzEsNi4yMTg5MzMzNTEyMDI3MTNFLTMyLDEuMTA0NTU5MTgxMzI0NzE3NEUtMzIsMi41OTk3NDU5OTY1Nzc4MjIzRS0zMiw3LjA5MjUwNjY4MzEyMDUwMkUtMzIsOS4wNDk1NjEwMzUxNzkxMzJFLTMzLDkuODE5ODAxNzkzNDM5MjczRS0zMywyLjAxMjkzNzE2MDg1OTM0NTVFLTMzLDMuODkxNTc4MDA0NDM3ODA1N0UtMzIsMi4wNTM0OTE4OTc4MDY3NzFFLTMxLDMuNzgyOTMzODQ3MjE5NjA4RS0zMiw1LjM2MjMzMzY2ODE1MTUxNkUtMzIsMi4yMDYzOTQ4MDUzMzg4OTE3RS0zMyw1LjU2OTUyOTA1NzAyMDg0MUUtMzIsMS43MjIyODQ3MzI0NDEzOTM2RS0zMiw5Ljg5NTE3ODEzNjQ0NTIxRS0zNCwxLjUxOTUzNjk5NjU1NjIxOTRFLTMzCisyNixTYXQgMTkgRmViIDExLDEuMDIxOTEzNTAxMjQyNDk3MUUtMzIsOC43NjY5MDU5NDY0Nzk5MzRFLTMzLDYuNTAyMjQ3NjQyNTEwNDI3RS0zMyw4LjkwOTgzMzU5MDI1MDA3MkUtMzIsMS45MzI4MzA5NTE3MjYzN0UtMjgsOS40NTcyOTkxOTA5MDg2MjlFLTMyLDEuMTg0NTUyNjA4ODI0NTAyN0UtMzIsMy42MTIzMzY0OTQxMTc5MDI1RS0zMiwyLjA5NzE3NTEwNDA4OTY4NTRFLTM1LDIuNDQyNzkxNzQ0OTI5NjczN0UtMzEsMS42MzI2OTI5Nzc4NTc3MzM4RS0zMSwzLjkyOTAzNTQwNzA1NDMwOTVFLTMyLDUuMjMwMTM1OTYyMDc0MDM5NkUtMzMsNy4wMzY4MDMxMzEyNjY4NzVFLTMzLDEuNzg0MzQ0MDg4NTU2NzEwOEUtMzEsMS42NTE4MTU3OTczMTI5MzMyRS0zMiwyLjMzODEyNTg0MDczMTUwMTZFLTMzLDcuODA5NTkwODc2MTk0Mjg4RS0zMywxLjUzODExMzk1MTU3ODAxMkUtMzIsNS4xNTExNTkyMTk3NTIyNzNFLTMyLDMuNzY4NjM4OTA2NTIxMjczNUUtMzIsMy45ODc3NjUwMTg3OTk3OTM1RS0zMyw2Ljk2NjAzMTkzODY5MzgxN0UtMzIsNi41NjQwMTU3Nzg2MzY4MDRFLTMyLDQuNjk0NjE5NzU3MzQ1MzMxRS0zMiw0LjAyNTc5OTYzMDI2MzgzRS0zMyw0LjkyOTYxODM3MTMyMTAwMDRFLTMzLDcuNTk2OTA3NTE5MTI5ODI2RS0zMiwyLjI3NDc5NTM3MjYwNjM3NUUtMzMsOC4wODg3NTQ4MTA0MzgwMjNFLTMzLDcuMDQzNzEyNDMyNzk2MTRFLTMzLDYuNzA0MjM5MTQxODczODA4RS0zMiwxLjEzODg3NDI3MDgwODk1NDhFLTMyLDkuNzc0OTk3NDAyNjExOTE1RS0zMiwxLjUwODI2NjUwOTY2NjA0OTZFLTMxLDYuNjU0NjE3NDU4MTk2NjU3RS0zMiwxLjE4NTk3MjQ4MTkzNTgyNTNFLTMyLDIuNzc1NzU1MTU5NzE1NzkzRS0zMiw3LjU4Njc0NjMyNjg4ODM5NEUtMzIsOS42NTM2MjkzNzUzODk3MTlFLTMzLDEuMDU2MDY5MjE3NzQ3MzI2OEUtMzIsMi4xNjM3MDA0NjA0NzI5NDkzRS0zMyw0LjE1ODA0MTI3NzAyMTI5MjZFLTMyLDIuMTg4NTAyMjIzNzA3ODU5NkUtMzEsNC4wMTQ5NDQxNjM1MDQ4OTFFLTMyLDUuNzI1NDk2NjA0NzAzNzkyRS0zMiwyLjM2NzIwNjE0OTI3NDg2MTZFLTMzLDUuOTM3NDc2Mjk1OTQyOTk2RS0zMiwxLjg0OTE5MzExMzg3MDkyMzZFLTMyLDEuMDczMTQxNjI3MTU1NjAyMkUtMzMsMS42MzE5MzAxMDM2Mzc5NzYzRS0zMworMjcsU3VuIDIwIEZlYiAxMSwxLjEwNTIzMDYyMjc0OTg5ODFFLTMyLDkuNjE3NzE1MjAyMjc4NDg1RS0zMyw3LjEyNDI4NzE0NDA5Nzg3OUUtMzMsOS42MzEzNjIxNzA4MjU4ODVFLTMyLDEuNzg4NDY5ODY5MTE4Nzg4NUUtMjgsMS4wMjAzMTUzMDEwOTQyMTI1RS0zMSwxLjI5NTAxNzA2MjIwMjE5NEUtMzIsMy44NTY0OTMwOTk0NTIzNUUtMzIsMi4zNTQzOTI2MTAwNjEyMzQyRS0zNSwyLjY0MzI5OTI0Mzk0NjY2NjZFLTMxLDEuNzYyOTA2NTQxMzY3NEUtMzEsNC4yMjQxMjM3MjMxNzA0MTMzRS0zMiw1Ljc0MTA0NTQ5NTk5Nzc4M0UtMzMsNy42NzA5NDg1NTkxMDIwMzdFLTMzLDEuOTMxNzM3OTA0Njg5MDA5NkUtMzEsMS44MDg2MTk1ODQ1MzgwMzFFLTMyLDIuNTc3MjA1MzE1NDYxNDQ2RS0zMyw4LjU2ODUxNjk2NzQyMTg1NUUtMzMsMS42ODE2NjA2NjQyMjExNzJFLTMyLDUuNjAwMTQyMzIwNTAxMTk4RS0zMiw0LjEwMDg0MzI0NzM0NjAxNEUtMzIsNC4zNjI1Mjc0Mjg4MjgzMzhFLTMzLDcuNTgwODY1NzUyODgwNzUzRS0zMiw3LjExMDI3NzcxNDY0NDQyNEUtMzIsNS4xMDI2MDgwMDQ1MjEyM0UtMzIsNC40MjUxMDc1OTUwMDU0OTVFLTMzLDUuMzczNjk5NjY1MjAzNTM1NUUtMzMsOC4yNTAyMjc1NDYxNzg0NzJFLTMyLDIuNDg2NjQ1NDc3MzI0NTk1NUUtMzMsOC44MjU3OTQ2NjcxOTUwMTJFLTMzLDcuNjc2MDkxOTk3NTAxMkUtMzMsNy4yODk1MTI3ODk2NTg0NzFFLTMyLDEuMjQwMzQyODExNDQxNTI1NEUtMzIsMS4wNDY1Njc2OTMwNjk2MjkyRS0zMSwxLjYzOTk2NDc5MjIzNjg4MDVFLTMxLDcuMjUwNzE0MjMzMjAwNzU3RS0zMiwxLjI5NjY2NjQzMjAzMTIyMjJFLTMyLDMuMDE3Njk1MDgxMzkxNDE2RS0zMiw4LjI2MzQzNDQ5MDMzNTk3MkUtMzIsMS4wNDg1NjY4Mjg4OTcxODk0RS0zMiwxLjE1NjU0MjYxMjUwMTU2OTJFLTMyLDIuMzY4MzE2NjQwMTEyNzIxRS0zMyw0LjUyMzczODk3Mzk0NjY0N0UtMzIsMi4zNzQ4ODM4OTIzMzAwNTJFLTMxLDQuMzM4ODU4NjA1NjQ2ODc0NkUtMzIsNi4yMjQ2NzIzMjY4NTgyOThFLTMyLDIuNTg2MTQxMTgwNzM3NTc4NUUtMzMsNi40NDUwNTk1NTQ5MTU0NzZFLTMyLDIuMDIxNzUwMTkxNTY4OTM5RS0zMiwxLjE4NTM5OTM2NTcxMTYwMDZFLTMzLDEuNzg0Njg0NDg2NTU3Nzc5NUUtMzMKKzI4LE1vbiAyMSBGZWIgMTEsMS4yMDczMjIxODg5MzIyOTk3RS0zMiwxLjA2NTMxODQ0OTIyODU1NTlFLTMyLDcuODgxNTcwNDQ2MDA1NDcyRS0zMywxLjA1MTU4MjIzNzAyNTcyOTJFLTMxLDEuNjkxOTg3NDc4OTQxMzA5NEUtMjgsMS4xMTE4OTA1NTM4NDM1ODM0RS0zMSwxLjQyOTU4ODgyNTM3MDAyRS0zMiw0LjE1OTgzNDgxODExODgzN0UtMzIsMi42NjgxNDI1OTk2MDYwOTI1RS0zNSwyLjg4ODg5NTQ2MjYxNDE2MDdFLTMxLDEuOTIyNjY5OTY3OTg1OTE1N0UtMzEsNC41ODc2MzYwMjc1NjA5NzQzRS0zMiw2LjM2Mjc2NDQwOTQzODc4MkUtMzMsOC40NDQzNTQ3NTE3MTE0NTFFLTMzLDIuMTEyMjEzNjIwNDcyNjg3M0UtMzEsMS45OTk1NTE0NTc0NzU3MzM2RS0zMiwyLjg2Nzk2Mzk0NTc2MzU0NUUtMzMsOS40OTIxMzU5MzM1NDIxNDRFLTMzLDEuODU2NTMwNDkyODk5Nzk1NEUtMzIsNi4xNDg0NTQ4MTMyODYxOUUtMzIsNC41MDYzNDg0MTA5Njg2NjZFLTMyLDQuODE4OTc2NzgyNDM4OTI0RS0zMyw4LjMzMTMyMzQ2MTM0MTExOEUtMzIsNy43Nzg4NzkwOTk1NDMzMTNFLTMyLDUuNjAwOTIwNDMyOTc0MzlFLTMyLDQuOTEwODk1OTMzMTMxNDM3RS0zMyw1LjkxNTMxMDM5NDk4MTIwMzVFLTMzLDkuMDQ4NTYzNzIyMjg3MTQ0RS0zMiwyLjc0NDczODk5MDcxMzE1OUUtMzMsOS43MjQzNDA4OTU0MTI2NjJFLTMzLDguNDQ3NDUxNzgzNzE1ODU3RS0zMyw4LjAwNDIxODg3NzM1MTU1N0UtMzIsMS4zNjQxNDc0OTAwNjAxODg4RS0zMiwxLjEzMjA1NDM3MjU4NDM1MkUtMzEsMS44MDA3ODY0ODYyNzMxNjhFLTMxLDcuOTc3ODc4OTYwNzkwNjk3RS0zMiwxLjQzMTUxNDM0NTY2Nzg0MkUtMzIsMy4zMTMxNTk3OTU1MzUzNjA0RS0zMiw5LjA4OTA0NTk0NzA3NjgwNUUtMzIsMS4xNTAyMjg5NDQ5MTMxMzc5RS0zMiwxLjI3ODg3NzEyMjg4MTU0N0UtMzIsMi42MTc0OTE0MTM4Nzc0MTk0RS0zMyw0Ljk3MDE2OTc3MjcwMzE5MUUtMzIsMi42MDI3NDExNTk2ODAzNzVFLTMxLDQuNzM2MDA1MTk2MzY3MjA2RS0zMiw2LjgzNDI3NDYyMzMwNTg1OUUtMzIsMi44NTI5MjE4MjQwMjU3MjlFLTMzLDcuMDY1NDgyODc3NzMzNzIzRS0zMiwyLjIzMTk2MTQ1MzY0ODI1NjNFLTMyLDEuMzIxOTA4MDgyMTU0NzQwOUUtMzMsMS45NzA3NTU0MDY0NzAzMjQzRS0zMworMjksVHVlIDIyIEZlYiAxMSwxLjMyNDY0NDAwMzI1NTI1MTVFLTMyLDEuMTg0NDU5MDQ4ODIwNjE3NUUtMzIsOC43NTI3MDQ1NjI0NTA5OEUtMzMsMS4xNTMyMjMwNTM0NDQxMDc4RS0zMSwxLjYyNTk5ODUwMjY1ODA0NTVFLTI4LDEuMjE3MTMwOTkxMjMzMTQ1MkUtMzEsMS41ODQzNDEzMTI2NjY0ODQ2RS0zMiw0LjUwODY2NDk3NDIzNjU4MzVFLTMyLDMuMDMyMjMzODY1NjU0NDI5RS0zNSwzLjE3MTEzMDQ1Mjk0OTUwNjZFLTMxLDIuMTA2MjcwMzczNjE1ODE0RS0zMSw1LjAwNTQ1NTczMjkyMjUyOEUtMzIsNy4wNzgxODk4ODEwNDM1NTJFLTMzLDkuMzMzNDUzMTY3MDI5MTk4RS0zMywyLjMxOTYxMzkxMTIyNTEyOTRFLTMxLDIuMjE5MTY0NDk4NzE1NzdFLTMyLDMuMjAyODYwOTA1Nzk5OTY4RS0zMywxLjA1NTQ4NzEwMjAyNjE1NjJFLTMyLDIuMDU3NjI2MDI2ODExNTE2NEUtMzIsNi43Nzg2NTc2ODUzMDA1OTlFLTMyLDQuOTcyNDQzMDk3OTk4NTIxRS0zMiw1LjM0MzkyNDQ1NTY2NTc3OUUtMzMsOS4xOTM5MTg5MTMwOTgzMTJFLTMyLDguNTQ3MjMyNDMzNjk5MjI4RS0zMiw2LjE3MzY0Nzk3NDA4MTkzN0UtMzIsNS40NzAwNTkyOTMzNzg4NThFLTMzLDYuNTM3OTM3NzIyNzcyNzk3RS0zMyw5Ljk2NjA3OTc2OTcxNjg2OEUtMzIsMy4wNDE1MzIzNjg2NzIzNjA2RS0zMywxLjA3NTczOTM1OTgxMjI0NjdFLTMyLDkuMzM0MTcyMzQwMTg1MjA3RS0zMyw4LjgyNTY3MjQxMTQwMzU1OEUtMzIsMS41MDY0NjAxMzQxNjc2MzFFLTMyLDEuMjMwMzQwMjU4MTg5MTcyNEUtMzEsMS45ODU2Mjg0NjMxMzY3OTk0RS0zMSw4LjgxMzc4MTA4MTIzMzk1NUUtMzIsMS41ODY1ODU5NTEyNTg1OTQyRS0zMiwzLjY1Mjc1MjEyMDQyMjAwOUUtMzIsMS4wMDM4MDg3NzY5OTU1NDUzRS0zMSwxLjI2NzA2ODY4NzY1MDQ1OTRFLTMyLDEuNDE5NTkyNTgzODMxODUzN0UtMzIsMi45MDQwODE5NTk1ODg0MTZFLTMzLDUuNDgzMjk4NTU4MzgwNjM3RS0zMiwyLjg2NDYwNTg2ODE4NzE2NUUtMzEsNS4xOTI0MDEwOTEzMzA0MjhFLTMyLDcuNTM0OTIxODAyOTEyNDgzRS0zMiwzLjE1OTY4MTg5NjU1OTAyOEUtMzMsNy43Nzg1MTE4NzAxOTg3MThFLTMyLDIuNDczNjk4MzI2MDk4NDI1RS0zMiwxLjQ3OTIzMjM0NDQ5ODY5MjhFLTMzLDIuMTg0NzM5MjczOTUyMDI2NkUtMzMKKzMwLFdlZCAyMyBGZWIgMTEsMS40NTQzNDM4NTY3OTUxM0UtMzIsMS4zMTY3ODEwMDI4MTcwODcyRS0zMiw5LjcxOTc5OTA4MzQxMDc0NEUtMzMsMS4yNjU1NjgzNzY0NjYyMTY0RS0zMSwxLjU3OTk1NTk0NDMxNTY4M0UtMjgsMS4zMzMzNzY4MjgwMjg0NDY4RS0zMSwxLjc1NjAxNDU1ODU0MjAwNzZFLTMyLDQuODkyMjQxNjM5ODg5NTY5NEUtMzIsMy40NDA5NzQ0MDI3NDkyODFFLTM1LDMuNDgzMTk1MzYxMDAwODI2NEUtMzEsMi4zMDkxMjg2MTY1MjI0NTEyRS0zMSw1LjQ2NjM3NDA0MTgzOTQxOEUtMzIsNy44NzI5Mjk1ODA5NjU4MUUtMzMsMS4wMzE4ODUzMDAwMjkxNjA5RS0zMiwyLjU0ODk3MTE2MDQ3OTkxRS0zMSwyLjQ2MjkxMzc5NDM5NjgyOTZFLTMyLDMuNTc1NDU2OTA1MDI3NDczNEUtMzMsMS4xNzM1MjMyOTU3NzgzMzc1RS0zMiwyLjI4MDcxNDM0MTI1NTgwNzNFLTMyLDcuNDc2NTE4ODQyMTc2Mjc3RS0zMiw1LjQ4ODcyNTk2OTA1NThFLTMyLDUuOTI2Mzk3MjYzMjQ1OTc2RS0zMywxLjAxNDk0MjgxMjk1MTY0NjdFLTMxLDkuMzk3MDg3NTU3MjY0ODFFLTMyLDYuODA3ODE1OTQwMjQ4NjAzRS0zMiw2LjA5MTUxNjkxODcyOTQ0MkUtMzMsNy4yMjc5OTcxNjM3MTE3MjZFLTMzLDEuMDk4MTc1NDgwODcwMTQ4OEUtMzEsMy4zNzA3NjUwNTM0NjgyNDVFLTMzLDEuMTkwMjY3NTY0MTc0ODdFLTMyLDEuMDMxNjgzOTQ2MzI4NjM4NEUtMzIsOS43MzUzNTMyNDIxMTQzNDVFLTMyLDEuNjY0MTQwMTIzMjkwMTk3OEUtMzIsMS4zMzg1NzM0Mjg2ODk1MDMzRS0zMSwyLjE5MDMyNDI5NDcyNjMxMUUtMzEsOS43NDAwNzYyMDM5NDM4ODVFLTMyLDEuNzU4NjE3NDMxOTE2OTMzNUUtMzIsNC4wMjg4MDI5NDc5NjkzMTY3RS0zMiwxLjEwODk2Mzk5NzQ1NDc2OTNFLTMxLDEuMzk2NDE1NTc2Nzk2NzExRS0zMiwxLjU3NTc4MzI4NDI2ODYyNUUtMzIsMy4yMjIxMzQ3ODQ2Nzk2NzFFLTMzLDYuMDUxNjQ2OTY4MzQzMDI0RS0zMiwzLjE1NDQxNDc3MzYyNzA3RS0zMSw1LjY5NjgxNTM5NzAwMTQ0OUUtMzIsOC4zMTA3OTUzNjU2Mjg0MDZFLTMyLDMuNDk5OTA1NDAwMTIzMDczNkUtMzMsOC41Njc3MDUwNjIxMjU1MThFLTMyLDIuNzQxODcxNzc0OTQ2MDg3NkUtMzIsMS42NTQ0MTU1OTY4MzE0NDI0RS0zMywyLjQyMjE0NTIxOTI3MjY4MUUtMzMKKzMxLFRodSAyNCBGZWIgMTEsMS41OTQwMzkzNDYwNjU3NzZFLTMyLDEuNDYwMTc0NTYzMTUzMzUyNEUtMzIsMS4wNzY3Mjc5MjM5MDI3MzU0RS0zMiwxLjM4NjU0MDk0OTk4MDEwOTlFLTMxLDEuNTQ3MjExMDg5ODYyMDEyRS0yOCwxLjQ1ODQyMDY3MTQ5NTk5NTNFLTMxLDEuOTQxNzkyNjIwNDk5MjI1RS0zMiw1LjMwMTg1MDQ2MzQ1MzYyMkUtMzIsMy44ODg4NTg0ODkwMTY4NjVFLTM1LDMuODE5Mzk0OTQ3NTM3NDM0N0UtMzEsMi41Mjc0MzY0MjAwMzYxNDM0RS0zMSw1Ljk2MTE2NTc2NzEwMDk3M0UtMzIsOC43MzQzNjkzMDE3OTk4OTJFLTMzLDEuMTM4Mzk2Njg0MDYyNDYzRS0zMiwyLjc5NjEyNDY2MjM0MTg3NDdFLTMxLDIuNzI2ODUyMjQ0MTY2NjM3N0UtMzIsMy45ODAwMTc5NDc0ODg2NDRFLTMzLDEuMzAxNDQxOTU0MjIzMTY3MkUtMzIsMi41MjIxMzgyMTQ2NzE1MjM2RS0zMiw4LjIyOTk2OTI1ODQ4NzIwN0UtMzIsNi4wNDYzNTEzMjk3Mzk1OTVFLTMyLDYuNTU2ODk0NjQ0NjI2NTM3RS0zMywxLjExODE0OTY5NjEzOTkxNThFLTMxLDEuMDMxMzEzNDI1OTkyOTc1RS0zMSw3LjQ5MjQyOTYzNzEzOTQ3OEUtMzIsNi43NjU1MDcxNzE1NDQ4NDdFLTMzLDcuOTczODY5Mzg1MDQ3NDA2RS0zMywxLjIwNzc4MjEzMTAxMTQ4NTVFLTMxLDMuNzI3MDMxMzUxNTc5NzM0NUUtMzMsMS4zMTQxMDcyMzEwNzExOTk1RS0zMiwxLjEzNzg4NjI2OTg0NDU0MDhFLTMyLDEuMDcxNzU0OTgyNjgzNDk3M0UtMzEsMS44MzQ1MDkxMTAzMTY1NDNFLTMyLDEuNDU0NDI3MjYwMjI4MjIzRS0zMSwyLjQxMTMzOTIwOTA4NzUxNzJFLTMxLDEuMDc0MTA5NzYyNjYyMzE3MkUtMzEsMS45NDQ3ODg3ODM0NDc1MDEzRS0zMiw0LjQzNDgwODc1NjYxMzk2MTVFLTMyLDEuMjIyNTg1NjYyOTE2MjA0OEUtMzEsMS41MzYwMTEyMjk3MTE4NDRFLTMyLDEuNzQ0OTIzOTc2ODg2MTk5NUUtMzIsMy41NjY0ODU1NDI1NjY1NzdFLTMzLDYuNjY1NDU5MDUyMjYzMzUyRS0zMiwzLjQ2NzA1NDgyOTM0NjI4MjdFLTMxLDYuMjM5ODg2OTU1NjAwNjU5RS0zMiw5LjE0ODQ4MDEwMjk5Mjc1NkUtMzIsMy44Njc5Nzc0OTYxNjYwMjVFLTMzLDkuNDE5MTg1MjQzMzk5MTU5RS0zMiwzLjAzMjA4NTA2ODU0NDE2OEUtMzIsMS44NDQ4MDI2MTAzNjkyNzczRS0zMywyLjY3OTA4OTcyNDk2NDkwOUUtMzMKKzMyLEZyaSAyNSBGZWIgMTEsMS43NDE3MTA1NjAyOTQ1Njc2RS0zMiwxLjYxMjc3MTYyOTMzNTI0MUUtMzIsMS4xODgxNDEzMDExMzQwNDM1RS0zMiwxLjUxNDM4MTkxMzc2NTMzMDlFLTMxLDEuNTIzNDUwMzEyNDUwMzcwNEUtMjgsMS41OTA0MDI3MTg1ODUwMDI0RS0zMSwyLjEzOTIxMDc2MDgyNjA1OTFFLTMyLDUuNzMwMzIwMzE4MTA0NTA4RS0zMiw0LjM3MDU0MTE5NzYwNTM4NkUtMzUsNC4xNzQ4OTQwMzExMzA0Njg1RS0zMSwyLjc1Nzk3ODU4MTkxMDEwNzZFLTMxLDYuNDgyMTIyNTE1NzkyNjk3RS0zMiw5LjY1MTMxNzMzOTcwMDM1M0UtMzMsMS4yNTE0NDA4MTI3NTM5OTZFLTMyLDMuMDU3NTM3NDcyMzAyNTY2NEUtMzEsMy4wMDc1MDc1ODE5Mzk0OTEzRS0zMiw0LjQxMTM4MTM2NjE4MjE0MTRFLTMzLDEuNDM3NTc3NTM0ODY1ODY0N0UtMzIsMi43Nzg2OTU4NjUzMDA3MDlFLTMyLDkuMDI4NjI2OTk0NzYzMDg4RS0zMiw2LjYzNzY4OTM5MTc3MjA3OEUtMzIsNy4yMjcwODI5MjMzNDU0RS0zMywxLjIyNzYwMTQ4OTMyMDc3OTJFLTMxLDEuMTI4MjMzNzUyMTcwNDU3OUUtMzEsOC4yMTgwMzc4MzI0NjgyNDNFLTMyLDcuNDgzMzI3OTc0NTc2OTc2RS0zMyw4Ljc2NTQ3NzcwODA1NzUzNUUtMzMsMS4zMjM5MDQzMDY2MjI3MDQ2RS0zMSw0LjEwNTYwMTUyNTU4ODcxRS0zMywxLjQ0NTU5NTczODg5MjU5RS0zMiwxLjI1MDU4NjY3MDA1MjcxNDNFLTMyLDEuMTc1ODc0MTgzNTcyNDkwNkUtMzEsMi4wMTUyNTA4MjE1NTcxMTRFLTMyLDEuNTc1OTc1MzQ3NTEyODIxNUUtMzEsMi42NDU2MzEyNTc4NjQ5OTZFLTMxLDEuMTgwMzI3ODIwODg4NTM1NEUtMzEsMi4xNDI2MzExMTA5ODI5MjZFLTMyLDQuODY1MTc1MTI0NzAzMTk5M0UtMzIsMS4zNDMxMzAwMDY4NjEwMTA0RS0zMSwxLjY4MzkxODAyODI5NjY1NkUtMzIsMS45MjQ3OTE3NzM0NzE3Mzk3RS0zMiwzLjkzMjU5NjEyMDg2MDY4MjZFLTMzLDcuMzE2MzI0NTI2NjU2NTg3RS0zMiwzLjc5ODE1MTA2NjY0ODU4MzVFLTMxLDYuODEzNjk1MjE3OTcwMjE1RS0zMiwxLjAwMzY0MzUzNDYwODcxNkUtMzEsNC4yNTg5OTQ3OTA1OTg3MzlFLTMzLDEuMDMyMTA2ODMxMTE5MzE0RS0zMSwzLjM0MDQ4OTE0MTExOTYzNDNFLTMyLDIuMDQ3OTgzODg1NjYyMzYzRS0zMywyLjk1MjE3MDA4MDc4NjQ3NzZFLTMzCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNFSVJTdGF0ZXNPbmx5X1JLX1JlZmVyZW5jZS9UZXN0U0VJUi9ydW5wYXJhbWV0ZXJzLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0VJUlN0YXRlc09ubHlfUktfUmVmZXJlbmNlL1Rlc3RTRUlSL3J1bnBhcmFtZXRlcnMuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU4MTMyMTIKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNFSVJTdGF0ZXNPbmx5X1JLX1JlZmVyZW5jZS9UZXN0U0VJUi9ydW5wYXJhbWV0ZXJzLmNzdgpAQCAtMCwwICsxLDIgQEAKK2Rpc2Vhc2VOYW1lLHBvcHVsYXRpb25JZGVudGlmaWVyLHRpbWVQZXJpb2QsZnJlcXVlbmN5RGVwZW5kZW50LHJlZmVyZW5jZVBvcHVsYXRpb25EZW5zaXR5LHJvYWROZXR3b3JrSW5mZWN0aW91c1Byb3BvcnRpb24sY2hhcmFjdGVyaXN0aWNNaXhpbmdEaXN0YW5jZSx0cmFuc21pc3Npb25SYXRlLG5vbkxpbmVhcml0eUNvZWZmaWNpZW50LHJlY292ZXJ5UmF0ZSxpbmZlY3Rpb3VzTW9ydGFsaXR5UmF0ZSxpbW11bml0eUxvc3NSYXRlLGluY3ViYXRpb25SYXRlCitUZXN0U0VJUixodW1hbiw4NjQwMDAwMCx0cnVlLDEwMC4wLDAuMDEsMi4yNSw0NS4wLDEuMCwwLjQsMC4wLDAuMCwwLjQKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNFSVJTdGF0ZXNPbmx5X1JLX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL2h1bWFuL0JpcnRoc18wLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0VJUlN0YXRlc09ubHlfUktfUmVmZXJlbmNlL2F1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwvaHVtYW4vQmlydGhzXzAuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjExMmU4YjgKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNFSVJTdGF0ZXNPbmx5X1JLX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL2h1bWFuL0JpcnRoc18wLmNzdgpAQCAtMCwwICsxLDMzIEBACitpdGVyYXRpb24sdGltZSxzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9ub2RlL3RyYW5zcG9ydC9waXBlL1VTQQorMSxUdWUgMjUgSmFuIDExLDAuMAorMixXZWQgMjYgSmFuIDExLDAuMAorMyxUaHUgMjcgSmFuIDExLDAuMAorNCxGcmkgMjggSmFuIDExLDAuMAorNSxTYXQgMjkgSmFuIDExLDAuMAorNixTdW4gMzAgSmFuIDExLDAuMAorNyxNb24gMzEgSmFuIDExLDAuMAorOCxUdWUgMSBGZWIgMTEsMC4wCis5LFdlZCAyIEZlYiAxMSwwLjAKKzEwLFRodSAzIEZlYiAxMSwwLjAKKzExLEZyaSA0IEZlYiAxMSwwLjAKKzEyLFNhdCA1IEZlYiAxMSwwLjAKKzEzLFN1biA2IEZlYiAxMSwwLjAKKzE0LE1vbiA3IEZlYiAxMSwwLjAKKzE1LFR1ZSA4IEZlYiAxMSwwLjAKKzE2LFdlZCA5IEZlYiAxMSwwLjAKKzE3LFRodSAxMCBGZWIgMTEsMC4wCisxOCxGcmkgMTEgRmViIDExLDAuMAorMTksU2F0IDEyIEZlYiAxMSwwLjAKKzIwLFN1biAxMyBGZWIgMTEsMC4wCisyMSxNb24gMTQgRmViIDExLDAuMAorMjIsVHVlIDE1IEZlYiAxMSwwLjAKKzIzLFdlZCAxNiBGZWIgMTEsMC4wCisyNCxUaHUgMTcgRmViIDExLDAuMAorMjUsRnJpIDE4IEZlYiAxMSwwLjAKKzI2LFNhdCAxOSBGZWIgMTEsMC4wCisyNyxTdW4gMjAgRmViIDExLDAuMAorMjgsTW9uIDIxIEZlYiAxMSwwLjAKKzI5LFR1ZSAyMiBGZWIgMTEsMC4wCiszMCxXZWQgMjMgRmViIDExLDAuMAorMzEsVGh1IDI0IEZlYiAxMSwwLjAKKzMyLEZyaSAyNSBGZWIgMTEsMC4wCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNFSVJTdGF0ZXNPbmx5X1JLX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL2h1bWFuL0JpcnRoc18xLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0VJUlN0YXRlc09ubHlfUktfUmVmZXJlbmNlL2F1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwvaHVtYW4vQmlydGhzXzEuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ3YTg0M2YKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNFSVJTdGF0ZXNPbmx5X1JLX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL2h1bWFuL0JpcnRoc18xLmNzdgpAQCAtMCwwICsxLDMzIEBACitpdGVyYXRpb24sdGltZSxVUy1BSyxVUy1BTCxVUy1BUixVUy1BWixVUy1DQSxVUy1DTyxVUy1DVCxVUy1EQyxVUy1ERSxVUy1GTCxVUy1HQSxVUy1ISSxVUy1JQSxVUy1JRCxVUy1JTCxVUy1JTixVUy1LUyxVUy1LWSxVUy1MQSxVUy1NQSxVUy1NRCxVUy1NRSxVUy1NSSxVUy1NTixVUy1NTyxVUy1NUyxVUy1NVCxVUy1OQyxVUy1ORCxVUy1ORSxVUy1OSCxVUy1OSixVUy1OTSxVUy1OVixVUy1OWSxVUy1PSCxVUy1PSyxVUy1PUixVUy1QQSxVUy1SSSxVUy1TQyxVUy1TRCxVUy1UTixVUy1UWCxVUy1VVCxVUy1WQSxVUy1WVCxVUy1XQSxVUy1XSSxVUy1XVixVUy1XWQorMSxUdWUgMjUgSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyLFdlZCAyNiBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzMsVGh1IDI3IEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorNCxGcmkgMjggSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCis1LFNhdCAyOSBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzYsU3VuIDMwIEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorNyxNb24gMzEgSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCis4LFR1ZSAxIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorOSxXZWQgMiBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzEwLFRodSAzIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTEsRnJpIDQgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxMixTYXQgNSBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzEzLFN1biA2IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTQsTW9uIDcgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxNSxUdWUgOCBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzE2LFdlZCA5IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTcsVGh1IDEwIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTgsRnJpIDExIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTksU2F0IDEyIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjAsU3VuIDEzIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjEsTW9uIDE0IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjIsVHVlIDE1IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjMsV2VkIDE2IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjQsVGh1IDE3IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjUsRnJpIDE4IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjYsU2F0IDE5IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjcsU3VuIDIwIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjgsTW9uIDIxIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjksVHVlIDIyIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMzAsV2VkIDIzIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMzEsVGh1IDI0IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMzIsRnJpIDI1IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTRUlSU3RhdGVzT25seV9SS19SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9odW1hbi9Db3VudF8wLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0VJUlN0YXRlc09ubHlfUktfUmVmZXJlbmNlL2F1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwvaHVtYW4vQ291bnRfMC5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDI1MDAyYgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0VJUlN0YXRlc09ubHlfUktfUmVmZXJlbmNlL2F1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwvaHVtYW4vQ291bnRfMC5jc3YKQEAgLTAsMCArMSwzMyBAQAoraXRlcmF0aW9uLHRpbWUsc3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vbm9kZS90cmFuc3BvcnQvcGlwZS9VU0EKKzEsVHVlIDI1IEphbiAxMSw5NDMyMTEuMAorMixXZWQgMjYgSmFuIDExLDk0MzIxMS4wCiszLFRodSAyNyBKYW4gMTEsOTQzMjExLjAKKzQsRnJpIDI4IEphbiAxMSw5NDMyMTEuMAorNSxTYXQgMjkgSmFuIDExLDk0MzIxMS4wCis2LFN1biAzMCBKYW4gMTEsOTQzMjExLjAKKzcsTW9uIDMxIEphbiAxMSw5NDMyMTEuMAorOCxUdWUgMSBGZWIgMTEsOTQzMjExLjAKKzksV2VkIDIgRmViIDExLDk0MzIxMS4wCisxMCxUaHUgMyBGZWIgMTEsOTQzMjExLjAKKzExLEZyaSA0IEZlYiAxMSw5NDMyMTEuMAorMTIsU2F0IDUgRmViIDExLDk0MzIxMS4wCisxMyxTdW4gNiBGZWIgMTEsOTQzMjExLjAKKzE0LE1vbiA3IEZlYiAxMSw5NDMyMTEuMAorMTUsVHVlIDggRmViIDExLDk0MzIxMS4wCisxNixXZWQgOSBGZWIgMTEsOTQzMjExLjAKKzE3LFRodSAxMCBGZWIgMTEsOTQzMjExLjAKKzE4LEZyaSAxMSBGZWIgMTEsOTQzMjExLjAKKzE5LFNhdCAxMiBGZWIgMTEsOTQzMjExLjAKKzIwLFN1biAxMyBGZWIgMTEsOTQzMjExLjAKKzIxLE1vbiAxNCBGZWIgMTEsOTQzMjExLjAKKzIyLFR1ZSAxNSBGZWIgMTEsOTQzMjExLjAKKzIzLFdlZCAxNiBGZWIgMTEsOTQzMjExLjAKKzI0LFRodSAxNyBGZWIgMTEsOTQzMjExLjAKKzI1LEZyaSAxOCBGZWIgMTEsOTQzMjExLjAKKzI2LFNhdCAxOSBGZWIgMTEsOTQzMjExLjAKKzI3LFN1biAyMCBGZWIgMTEsOTQzMjExLjAKKzI4LE1vbiAyMSBGZWIgMTEsOTQzMjExLjAKKzI5LFR1ZSAyMiBGZWIgMTEsOTQzMjExLjAKKzMwLFdlZCAyMyBGZWIgMTEsOTQzMjExLjAKKzMxLFRodSAyNCBGZWIgMTEsOTQzMjExLjAKKzMyLEZyaSAyNSBGZWIgMTEsOTQzMjExLjAKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0VJUlN0YXRlc09ubHlfUktfUmVmZXJlbmNlL2F1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwvaHVtYW4vQ291bnRfMS5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNFSVJTdGF0ZXNPbmx5X1JLX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL2h1bWFuL0NvdW50XzEuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ1OTBlNmEKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNFSVJTdGF0ZXNPbmx5X1JLX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL2h1bWFuL0NvdW50XzEuY3N2CkBAIC0wLDAgKzEsMzMgQEAKK2l0ZXJhdGlvbix0aW1lLFVTLUFLLFVTLUFMLFVTLUFSLFVTLUFaLFVTLUNBLFVTLUNPLFVTLUNULFVTLURDLFVTLURFLFVTLUZMLFVTLUdBLFVTLUhJLFVTLUlBLFVTLUlELFVTLUlMLFVTLUlOLFVTLUtTLFVTLUtZLFVTLUxBLFVTLU1BLFVTLU1ELFVTLU1FLFVTLU1JLFVTLU1OLFVTLU1PLFVTLU1TLFVTLU1ULFVTLU5DLFVTLU5ELFVTLU5FLFVTLU5ILFVTLU5KLFVTLU5NLFVTLU5WLFVTLU5ZLFVTLU9ILFVTLU9LLFVTLU9SLFVTLVBBLFVTLVJJLFVTLVNDLFVTLVNELFVTLVROLFVTLVRYLFVTLVVULFVTLVZBLFVTLVZULFVTLVdBLFVTLVdJLFVTLVdWLFVTLVdZCisxLFR1ZSAyNSBKYW4gMTEsNjI2OTMyLjAsNDQ0NzEwMC4wLDI2NzM0MDAuMCw1MTMwNjMyLjAsMy4zODcxNjQ4RTcsNDMwMTI2MS4wLDM0MDU1NjUuMCw1NzIwNTkuMCw3ODM2MDAuMCwxLjU5ODIzNzhFNyw4MTg2NDUzLjAsMTIxMTUzNy4wLDI5MjYzMjQuMCwxMjkzOTUzLjAsMS4yNDE5MjkzRTcsNjA4MDQ4NS4wLDI2ODg0MTguMCw0MDQxNzY5LjAsNDQ2ODk3Ni4wLDYzNDkwOTcuMCw1Mjk2NDg2LjAsMTI3NDkyMy4wLDk5Mzg0NDQuMCw0OTE5NDc5LjAsNTU5NTIxMS4wLDI4NDQ2NTguMCw5MDIxOTUuMCw4MDQ5MzEzLjAsNjQyMjAwLjAsMTcxMTI2My4wLDEyMzU3ODYuMCw4NDE0MzUwLjAsMTgxOTA0Ni4wLDE5OTgyNTcuMCwxLjg5NzY0NTdFNywxLjEzNTMxNEU3LDM0NTA2NTQuMCwzNDIxMzk5LjAsMS4yMjgxMDU0RTcsMTA0ODMxOS4wLDQwMTIwMTIuMCw3NTQ4NDQuMCw1Njg5MjgzLjAsMi4wODUxODJFNywyMjMzMTY5LjAsNzA3ODUxNi4wLDYwODgyNy4wLDU4OTQxMjEuMCw1MzYzNjc1LjAsMTgwODM0NC4wLDQ5Mzc4Mi4wCisyLFdlZCAyNiBKYW4gMTEsNjI2OTMyLjAsNDQ0NzEwMC4wLDI2NzM0MDAuMCw1MTMwNjMyLjAsMy4zODcxNjQ4RTcsNDMwMTI2MS4wLDM0MDU1NjUuMCw1NzIwNTkuMCw3ODM2MDAuMCwxLjU5ODIzNzhFNyw4MTg2NDUzLjAsMTIxMTUzNy4wLDI5MjYzMjQuMCwxMjkzOTUzLjAsMS4yNDE5MjkzRTcsNjA4MDQ4NS4wLDI2ODg0MTguMCw0MDQxNzY5LjAsNDQ2ODk3Ni4wLDYzNDkwOTcuMCw1Mjk2NDg2LjAsMTI3NDkyMy4wLDk5Mzg0NDQuMCw0OTE5NDc5LjAsNTU5NTIxMS4wLDI4NDQ2NTguMCw5MDIxOTUuMCw4MDQ5MzEzLjAsNjQyMjAwLjAsMTcxMTI2My4wLDEyMzU3ODYuMCw4NDE0MzUwLjAsMTgxOTA0Ni4wLDE5OTgyNTcuMCwxLjg5NzY0NTdFNywxLjEzNTMxNEU3LDM0NTA2NTQuMCwzNDIxMzk5LjAsMS4yMjgxMDU0RTcsMTA0ODMxOS4wLDQwMTIwMTIuMCw3NTQ4NDQuMCw1Njg5MjgzLjAsMi4wODUxODJFNywyMjMzMTY5LjAsNzA3ODUxNi4wLDYwODgyNy4wLDU4OTQxMjEuMCw1MzYzNjc1LjAsMTgwODM0NC4wLDQ5Mzc4Mi4wCiszLFRodSAyNyBKYW4gMTEsNjI2OTMyLjAsNDQ0NzEwMC4wLDI2NzM0MDAuMCw1MTMwNjMyLjAsMy4zODcxNjQ4RTcsNDMwMTI2MS4wLDM0MDU1NjUuMCw1NzIwNTkuMCw3ODM2MDAuMCwxLjU5ODIzNzhFNyw4MTg2NDUzLjAsMTIxMTUzNy4wLDI5MjYzMjQuMCwxMjkzOTUzLjAsMS4yNDE5MjkzRTcsNjA4MDQ4NS4wLDI2ODg0MTguMCw0MDQxNzY5LjAsNDQ2ODk3Ni4wLDYzNDkwOTcuMCw1Mjk2NDg2LjAsMTI3NDkyMy4wLDk5Mzg0NDQuMCw0OTE5NDc5LjAsNTU5NTIxMS4wLDI4NDQ2NTguMCw5MDIxOTUuMCw4MDQ5MzEzLjAsNjQyMjAwLjAsMTcxMTI2My4wLDEyMzU3ODYuMCw4NDE0MzUwLjAsMTgxOTA0Ni4wLDE5OTgyNTcuMCwxLjg5NzY0NTdFNywxLjEzNTMxNEU3LDM0NTA2NTQuMCwzNDIxMzk5LjAsMS4yMjgxMDU0RTcsMTA0ODMxOS4wLDQwMTIwMTIuMCw3NTQ4NDQuMCw1Njg5MjgzLjAsMi4wODUxODJFNywyMjMzMTY5LjAsNzA3ODUxNi4wLDYwODgyNy4wLDU4OTQxMjEuMCw1MzYzNjc1LjAsMTgwODM0NC4wLDQ5Mzc4Mi4wCis0LEZyaSAyOCBKYW4gMTEsNjI2OTMyLjAsNDQ0NzEwMC4wLDI2NzM0MDAuMCw1MTMwNjMyLjAsMy4zODcxNjQ4RTcsNDMwMTI2MS4wLDM0MDU1NjUuMCw1NzIwNTkuMCw3ODM2MDAuMCwxLjU5ODIzNzhFNyw4MTg2NDUzLjAsMTIxMTUzNy4wLDI5MjYzMjQuMCwxMjkzOTUzLjAsMS4yNDE5MjkzRTcsNjA4MDQ4NS4wLDI2ODg0MTguMCw0MDQxNzY5LjAsNDQ2ODk3Ni4wLDYzNDkwOTcuMCw1Mjk2NDg2LjAsMTI3NDkyMy4wLDk5Mzg0NDQuMCw0OTE5NDc5LjAsNTU5NTIxMS4wLDI4NDQ2NTguMCw5MDIxOTUuMCw4MDQ5MzEzLjAsNjQyMjAwLjAsMTcxMTI2My4wLDEyMzU3ODYuMCw4NDE0MzUwLjAsMTgxOTA0Ni4wLDE5OTgyNTcuMCwxLjg5NzY0NTdFNywxLjEzNTMxNEU3LDM0NTA2NTQuMCwzNDIxMzk5LjAsMS4yMjgxMDU0RTcsMTA0ODMxOS4wLDQwMTIwMTIuMCw3NTQ4NDQuMCw1Njg5MjgzLjAsMi4wODUxODJFNywyMjMzMTY5LjAsNzA3ODUxNi4wLDYwODgyNy4wLDU4OTQxMjEuMCw1MzYzNjc1LjAsMTgwODM0NC4wLDQ5Mzc4Mi4wCis1LFNhdCAyOSBKYW4gMTEsNjI2OTMyLjAsNDQ0NzEwMC4wLDI2NzM0MDAuMCw1MTMwNjMyLjAsMy4zODcxNjQ4RTcsNDMwMTI2MS4wLDM0MDU1NjUuMCw1NzIwNTkuMCw3ODM2MDAuMCwxLjU5ODIzNzhFNyw4MTg2NDUzLjAsMTIxMTUzNy4wLDI5MjYzMjQuMCwxMjkzOTUzLjAsMS4yNDE5MjkzRTcsNjA4MDQ4NS4wLDI2ODg0MTguMCw0MDQxNzY5LjAsNDQ2ODk3Ni4wLDYzNDkwOTcuMCw1Mjk2NDg2LjAsMTI3NDkyMy4wLDk5Mzg0NDQuMCw0OTE5NDc5LjAsNTU5NTIxMS4wLDI4NDQ2NTguMCw5MDIxOTUuMCw4MDQ5MzEzLjAsNjQyMjAwLjAsMTcxMTI2My4wLDEyMzU3ODYuMCw4NDE0MzUwLjAsMTgxOTA0Ni4wLDE5OTgyNTcuMCwxLjg5NzY0NTdFNywxLjEzNTMxNEU3LDM0NTA2NTQuMCwzNDIxMzk5LjAsMS4yMjgxMDU0RTcsMTA0ODMxOS4wLDQwMTIwMTIuMCw3NTQ4NDQuMCw1Njg5MjgzLjAsMi4wODUxODJFNywyMjMzMTY5LjAsNzA3ODUxNi4wLDYwODgyNy4wLDU4OTQxMjEuMCw1MzYzNjc1LjAsMTgwODM0NC4wLDQ5Mzc4Mi4wCis2LFN1biAzMCBKYW4gMTEsNjI2OTMyLjAsNDQ0NzEwMC4wLDI2NzM0MDAuMCw1MTMwNjMyLjAsMy4zODcxNjQ4RTcsNDMwMTI2MS4wLDM0MDU1NjUuMCw1NzIwNTkuMCw3ODM2MDAuMCwxLjU5ODIzNzhFNyw4MTg2NDUzLjAsMTIxMTUzNy4wLDI5MjYzMjQuMCwxMjkzOTUzLjAsMS4yNDE5MjkzRTcsNjA4MDQ4NS4wLDI2ODg0MTguMCw0MDQxNzY5LjAsNDQ2ODk3Ni4wLDYzNDkwOTcuMCw1Mjk2NDg2LjAsMTI3NDkyMy4wLDk5Mzg0NDQuMCw0OTE5NDc5LjAsNTU5NTIxMS4wLDI4NDQ2NTguMCw5MDIxOTUuMCw4MDQ5MzEzLjAsNjQyMjAwLjAsMTcxMTI2My4wLDEyMzU3ODYuMCw4NDE0MzUwLjAsMTgxOTA0Ni4wLDE5OTgyNTcuMCwxLjg5NzY0NTdFNywxLjEzNTMxNEU3LDM0NTA2NTQuMCwzNDIxMzk5LjAsMS4yMjgxMDU0RTcsMTA0ODMxOS4wLDQwMTIwMTIuMCw3NTQ4NDQuMCw1Njg5MjgzLjAsMi4wODUxODJFNywyMjMzMTY5LjAsNzA3ODUxNi4wLDYwODgyNy4wLDU4OTQxMjEuMCw1MzYzNjc1LjAsMTgwODM0NC4wLDQ5Mzc4Mi4wCis3LE1vbiAzMSBKYW4gMTEsNjI2OTMyLjAsNDQ0NzEwMC4wLDI2NzM0MDAuMCw1MTMwNjMyLjAsMy4zODcxNjQ4RTcsNDMwMTI2MS4wLDM0MDU1NjUuMCw1NzIwNTkuMCw3ODM2MDAuMCwxLjU5ODIzNzhFNyw4MTg2NDUzLjAsMTIxMTUzNy4wLDI5MjYzMjQuMCwxMjkzOTUzLjAsMS4yNDE5MjkzRTcsNjA4MDQ4NS4wLDI2ODg0MTguMCw0MDQxNzY5LjAsNDQ2ODk3Ni4wLDYzNDkwOTcuMCw1Mjk2NDg2LjAsMTI3NDkyMy4wLDk5Mzg0NDQuMCw0OTE5NDc5LjAsNTU5NTIxMS4wLDI4NDQ2NTguMCw5MDIxOTUuMCw4MDQ5MzEzLjAsNjQyMjAwLjAsMTcxMTI2My4wLDEyMzU3ODYuMCw4NDE0MzUwLjAsMTgxOTA0Ni4wLDE5OTgyNTcuMCwxLjg5NzY0NTdFNywxLjEzNTMxNEU3LDM0NTA2NTQuMCwzNDIxMzk5LjAsMS4yMjgxMDU0RTcsMTA0ODMxOS4wLDQwMTIwMTIuMCw3NTQ4NDQuMCw1Njg5MjgzLjAsMi4wODUxODJFNywyMjMzMTY5LjAsNzA3ODUxNi4wLDYwODgyNy4wLDU4OTQxMjEuMCw1MzYzNjc1LjAsMTgwODM0NC4wLDQ5Mzc4Mi4wCis4LFR1ZSAxIEZlYiAxMSw2MjY5MzIuMCw0NDQ3MTAwLjAsMjY3MzQwMC4wLDUxMzA2MzIuMCwzLjM4NzE2NDhFNyw0MzAxMjYxLjAsMzQwNTU2NS4wLDU3MjA1OS4wLDc4MzYwMC4wLDEuNTk4MjM3OEU3LDgxODY0NTMuMCwxMjExNTM3LjAsMjkyNjMyNC4wLDEyOTM5NTMuMCwxLjI0MTkyOTNFNyw2MDgwNDg1LjAsMjY4ODQxOC4wLDQwNDE3NjkuMCw0NDY4OTc2LjAsNjM0OTA5Ny4wLDUyOTY0ODYuMCwxMjc0OTIzLjAsOTkzODQ0NC4wLDQ5MTk0NzkuMCw1NTk1MjExLjAsMjg0NDY1OC4wLDkwMjE5NS4wLDgwNDkzMTMuMCw2NDIyMDAuMCwxNzExMjYzLjAsMTIzNTc4Ni4wLDg0MTQzNTAuMCwxODE5MDQ2LjAsMTk5ODI1Ny4wLDEuODk3NjQ1N0U3LDEuMTM1MzE0RTcsMzQ1MDY1NC4wLDM0MjEzOTkuMCwxLjIyODEwNTRFNywxMDQ4MzE5LjAsNDAxMjAxMi4wLDc1NDg0NC4wLDU2ODkyODMuMCwyLjA4NTE4MkU3LDIyMzMxNjkuMCw3MDc4NTE2LjAsNjA4ODI3LjAsNTg5NDEyMS4wLDUzNjM2NzUuMCwxODA4MzQ0LjAsNDkzNzgyLjAKKzksV2VkIDIgRmViIDExLDYyNjkzMi4wLDQ0NDcxMDAuMCwyNjczNDAwLjAsNTEzMDYzMi4wLDMuMzg3MTY0OEU3LDQzMDEyNjEuMCwzNDA1NTY1LjAsNTcyMDU5LjAsNzgzNjAwLjAsMS41OTgyMzc4RTcsODE4NjQ1My4wLDEyMTE1MzcuMCwyOTI2MzI0LjAsMTI5Mzk1My4wLDEuMjQxOTI5M0U3LDYwODA0ODUuMCwyNjg4NDE4LjAsNDA0MTc2OS4wLDQ0Njg5NzYuMCw2MzQ5MDk3LjAsNTI5NjQ4Ni4wLDEyNzQ5MjMuMCw5OTM4NDQ0LjAsNDkxOTQ3OS4wLDU1OTUyMTEuMCwyODQ0NjU4LjAsOTAyMTk1LjAsODA0OTMxMy4wLDY0MjIwMC4wLDE3MTEyNjMuMCwxMjM1Nzg2LjAsODQxNDM1MC4wLDE4MTkwNDYuMCwxOTk4MjU3LjAsMS44OTc2NDU3RTcsMS4xMzUzMTRFNywzNDUwNjU0LjAsMzQyMTM5OS4wLDEuMjI4MTA1NEU3LDEwNDgzMTkuMCw0MDEyMDEyLjAsNzU0ODQ0LjAsNTY4OTI4My4wLDIuMDg1MTgyRTcsMjIzMzE2OS4wLDcwNzg1MTYuMCw2MDg4MjcuMCw1ODk0MTIxLjAsNTM2MzY3NS4wLDE4MDgzNDQuMCw0OTM3ODIuMAorMTAsVGh1IDMgRmViIDExLDYyNjkzMi4wLDQ0NDcxMDAuMCwyNjczNDAwLjAsNTEzMDYzMi4wLDMuMzg3MTY0OEU3LDQzMDEyNjEuMCwzNDA1NTY1LjAsNTcyMDU5LjAsNzgzNjAwLjAsMS41OTgyMzc4RTcsODE4NjQ1My4wLDEyMTE1MzcuMCwyOTI2MzI0LjAsMTI5Mzk1My4wLDEuMjQxOTI5M0U3LDYwODA0ODUuMCwyNjg4NDE4LjAsNDA0MTc2OS4wLDQ0Njg5NzYuMCw2MzQ5MDk3LjAsNTI5NjQ4Ni4wLDEyNzQ5MjMuMCw5OTM4NDQ0LjAsNDkxOTQ3OS4wLDU1OTUyMTEuMCwyODQ0NjU4LjAsOTAyMTk1LjAsODA0OTMxMy4wLDY0MjIwMC4wLDE3MTEyNjMuMCwxMjM1Nzg2LjAsODQxNDM1MC4wLDE4MTkwNDYuMCwxOTk4MjU3LjAsMS44OTc2NDU3RTcsMS4xMzUzMTRFNywzNDUwNjU0LjAsMzQyMTM5OS4wLDEuMjI4MTA1NEU3LDEwNDgzMTkuMCw0MDEyMDEyLjAsNzU0ODQ0LjAsNTY4OTI4My4wLDIuMDg1MTgyRTcsMjIzMzE2OS4wLDcwNzg1MTYuMCw2MDg4MjcuMCw1ODk0MTIxLjAsNTM2MzY3NS4wLDE4MDgzNDQuMCw0OTM3ODIuMAorMTEsRnJpIDQgRmViIDExLDYyNjkzMi4wLDQ0NDcxMDAuMCwyNjczNDAwLjAsNTEzMDYzMi4wLDMuMzg3MTY0OEU3LDQzMDEyNjEuMCwzNDA1NTY1LjAsNTcyMDU5LjAsNzgzNjAwLjAsMS41OTgyMzc4RTcsODE4NjQ1My4wLDEyMTE1MzcuMCwyOTI2MzI0LjAsMTI5Mzk1My4wLDEuMjQxOTI5M0U3LDYwODA0ODUuMCwyNjg4NDE4LjAsNDA0MTc2OS4wLDQ0Njg5NzYuMCw2MzQ5MDk3LjAsNTI5NjQ4Ni4wLDEyNzQ5MjMuMCw5OTM4NDQ0LjAsNDkxOTQ3OS4wLDU1OTUyMTEuMCwyODQ0NjU4LjAsOTAyMTk1LjAsODA0OTMxMy4wLDY0MjIwMC4wLDE3MTEyNjMuMCwxMjM1Nzg2LjAsODQxNDM1MC4wLDE4MTkwNDYuMCwxOTk4MjU3LjAsMS44OTc2NDU3RTcsMS4xMzUzMTRFNywzNDUwNjU0LjAsMzQyMTM5OS4wLDEuMjI4MTA1NEU3LDEwNDgzMTkuMCw0MDEyMDEyLjAsNzU0ODQ0LjAsNTY4OTI4My4wLDIuMDg1MTgyRTcsMjIzMzE2OS4wLDcwNzg1MTYuMCw2MDg4MjcuMCw1ODk0MTIxLjAsNTM2MzY3NS4wLDE4MDgzNDQuMCw0OTM3ODIuMAorMTIsU2F0IDUgRmViIDExLDYyNjkzMi4wLDQ0NDcxMDAuMCwyNjczNDAwLjAsNTEzMDYzMi4wLDMuMzg3MTY0OEU3LDQzMDEyNjEuMCwzNDA1NTY1LjAsNTcyMDU5LjAsNzgzNjAwLjAsMS41OTgyMzc4RTcsODE4NjQ1My4wLDEyMTE1MzcuMCwyOTI2MzI0LjAsMTI5Mzk1My4wLDEuMjQxOTI5M0U3LDYwODA0ODUuMCwyNjg4NDE4LjAsNDA0MTc2OS4wLDQ0Njg5NzYuMCw2MzQ5MDk3LjAsNTI5NjQ4Ni4wLDEyNzQ5MjMuMCw5OTM4NDQ0LjAsNDkxOTQ3OS4wLDU1OTUyMTEuMCwyODQ0NjU4LjAsOTAyMTk1LjAsODA0OTMxMy4wLDY0MjIwMC4wLDE3MTEyNjMuMCwxMjM1Nzg2LjAsODQxNDM1MC4wLDE4MTkwNDYuMCwxOTk4MjU3LjAsMS44OTc2NDU3RTcsMS4xMzUzMTRFNywzNDUwNjU0LjAsMzQyMTM5OS4wLDEuMjI4MTA1NEU3LDEwNDgzMTkuMCw0MDEyMDEyLjAsNzU0ODQ0LjAsNTY4OTI4My4wLDIuMDg1MTgyRTcsMjIzMzE2OS4wLDcwNzg1MTYuMCw2MDg4MjcuMCw1ODk0MTIxLjAsNTM2MzY3NS4wLDE4MDgzNDQuMCw0OTM3ODIuMAorMTMsU3VuIDYgRmViIDExLDYyNjkzMi4wLDQ0NDcxMDAuMCwyNjczNDAwLjAsNTEzMDYzMi4wLDMuMzg3MTY0OEU3LDQzMDEyNjEuMCwzNDA1NTY1LjAsNTcyMDU5LjAsNzgzNjAwLjAsMS41OTgyMzc4RTcsODE4NjQ1My4wLDEyMTE1MzcuMCwyOTI2MzI0LjAsMTI5Mzk1My4wLDEuMjQxOTI5M0U3LDYwODA0ODUuMCwyNjg4NDE4LjAsNDA0MTc2OS4wLDQ0Njg5NzYuMCw2MzQ5MDk3LjAsNTI5NjQ4Ni4wLDEyNzQ5MjMuMCw5OTM4NDQ0LjAsNDkxOTQ3OS4wLDU1OTUyMTEuMCwyODQ0NjU4LjAsOTAyMTk1LjAsODA0OTMxMy4wLDY0MjIwMC4wLDE3MTEyNjMuMCwxMjM1Nzg2LjAsODQxNDM1MC4wLDE4MTkwNDYuMCwxOTk4MjU3LjAsMS44OTc2NDU3RTcsMS4xMzUzMTRFNywzNDUwNjU0LjAsMzQyMTM5OS4wLDEuMjI4MTA1NEU3LDEwNDgzMTkuMCw0MDEyMDEyLjAsNzU0ODQ0LjAsNTY4OTI4My4wLDIuMDg1MTgyRTcsMjIzMzE2OS4wLDcwNzg1MTYuMCw2MDg4MjcuMCw1ODk0MTIxLjAsNTM2MzY3NS4wLDE4MDgzNDQuMCw0OTM3ODIuMAorMTQsTW9uIDcgRmViIDExLDYyNjkzMi4wLDQ0NDcxMDAuMCwyNjczNDAwLjAsNTEzMDYzMi4wLDMuMzg3MTY0OEU3LDQzMDEyNjEuMCwzNDA1NTY1LjAsNTcyMDU5LjAsNzgzNjAwLjAsMS41OTgyMzc4RTcsODE4NjQ1My4wLDEyMTE1MzcuMCwyOTI2MzI0LjAsMTI5Mzk1My4wLDEuMjQxOTI5M0U3LDYwODA0ODUuMCwyNjg4NDE4LjAsNDA0MTc2OS4wLDQ0Njg5NzYuMCw2MzQ5MDk3LjAsNTI5NjQ4Ni4wLDEyNzQ5MjMuMCw5OTM4NDQ0LjAsNDkxOTQ3OS4wLDU1OTUyMTEuMCwyODQ0NjU4LjAsOTAyMTk1LjAsODA0OTMxMy4wLDY0MjIwMC4wLDE3MTEyNjMuMCwxMjM1Nzg2LjAsODQxNDM1MC4wLDE4MTkwNDYuMCwxOTk4MjU3LjAsMS44OTc2NDU3RTcsMS4xMzUzMTRFNywzNDUwNjU0LjAsMzQyMTM5OS4wLDEuMjI4MTA1NEU3LDEwNDgzMTkuMCw0MDEyMDEyLjAsNzU0ODQ0LjAsNTY4OTI4My4wLDIuMDg1MTgyRTcsMjIzMzE2OS4wLDcwNzg1MTYuMCw2MDg4MjcuMCw1ODk0MTIxLjAsNTM2MzY3NS4wLDE4MDgzNDQuMCw0OTM3ODIuMAorMTUsVHVlIDggRmViIDExLDYyNjkzMi4wLDQ0NDcxMDAuMCwyNjczNDAwLjAsNTEzMDYzMi4wLDMuMzg3MTY0OEU3LDQzMDEyNjEuMCwzNDA1NTY1LjAsNTcyMDU5LjAsNzgzNjAwLjAsMS41OTgyMzc4RTcsODE4NjQ1My4wLDEyMTE1MzcuMCwyOTI2MzI0LjAsMTI5Mzk1My4wLDEuMjQxOTI5M0U3LDYwODA0ODUuMCwyNjg4NDE4LjAsNDA0MTc2OS4wLDQ0Njg5NzYuMCw2MzQ5MDk3LjAsNTI5NjQ4Ni4wLDEyNzQ5MjMuMCw5OTM4NDQ0LjAsNDkxOTQ3OS4wLDU1OTUyMTEuMCwyODQ0NjU4LjAsOTAyMTk1LjAsODA0OTMxMy4wLDY0MjIwMC4wLDE3MTEyNjMuMCwxMjM1Nzg2LjAsODQxNDM1MC4wLDE4MTkwNDYuMCwxOTk4MjU3LjAsMS44OTc2NDU3RTcsMS4xMzUzMTRFNywzNDUwNjU0LjAsMzQyMTM5OS4wLDEuMjI4MTA1NEU3LDEwNDgzMTkuMCw0MDEyMDEyLjAsNzU0ODQ0LjAsNTY4OTI4My4wLDIuMDg1MTgyRTcsMjIzMzE2OS4wLDcwNzg1MTYuMCw2MDg4MjcuMCw1ODk0MTIxLjAsNTM2MzY3NS4wLDE4MDgzNDQuMCw0OTM3ODIuMAorMTYsV2VkIDkgRmViIDExLDYyNjkzMi4wLDQ0NDcxMDAuMCwyNjczNDAwLjAsNTEzMDYzMi4wLDMuMzg3MTY0OEU3LDQzMDEyNjEuMCwzNDA1NTY1LjAsNTcyMDU5LjAsNzgzNjAwLjAsMS41OTgyMzc4RTcsODE4NjQ1My4wLDEyMTE1MzcuMCwyOTI2MzI0LjAsMTI5Mzk1My4wLDEuMjQxOTI5M0U3LDYwODA0ODUuMCwyNjg4NDE4LjAsNDA0MTc2OS4wLDQ0Njg5NzYuMCw2MzQ5MDk3LjAsNTI5NjQ4Ni4wLDEyNzQ5MjMuMCw5OTM4NDQ0LjAsNDkxOTQ3OS4wLDU1OTUyMTEuMCwyODQ0NjU4LjAsOTAyMTk1LjAsODA0OTMxMy4wLDY0MjIwMC4wLDE3MTEyNjMuMCwxMjM1Nzg2LjAsODQxNDM1MC4wLDE4MTkwNDYuMCwxOTk4MjU3LjAsMS44OTc2NDU3RTcsMS4xMzUzMTRFNywzNDUwNjU0LjAsMzQyMTM5OS4wLDEuMjI4MTA1NEU3LDEwNDgzMTkuMCw0MDEyMDEyLjAsNzU0ODQ0LjAsNTY4OTI4My4wLDIuMDg1MTgyRTcsMjIzMzE2OS4wLDcwNzg1MTYuMCw2MDg4MjcuMCw1ODk0MTIxLjAsNTM2MzY3NS4wLDE4MDgzNDQuMCw0OTM3ODIuMAorMTcsVGh1IDEwIEZlYiAxMSw2MjY5MzIuMCw0NDQ3MTAwLjAsMjY3MzQwMC4wLDUxMzA2MzIuMCwzLjM4NzE2NDhFNyw0MzAxMjYxLjAsMzQwNTU2NS4wLDU3MjA1OS4wLDc4MzYwMC4wLDEuNTk4MjM3OEU3LDgxODY0NTMuMCwxMjExNTM3LjAsMjkyNjMyNC4wLDEyOTM5NTMuMCwxLjI0MTkyOTNFNyw2MDgwNDg1LjAsMjY4ODQxOC4wLDQwNDE3NjkuMCw0NDY4OTc2LjAsNjM0OTA5Ny4wLDUyOTY0ODYuMCwxMjc0OTIzLjAsOTkzODQ0NC4wLDQ5MTk0NzkuMCw1NTk1MjExLjAsMjg0NDY1OC4wLDkwMjE5NS4wLDgwNDkzMTMuMCw2NDIyMDAuMCwxNzExMjYzLjAsMTIzNTc4Ni4wLDg0MTQzNTAuMCwxODE5MDQ2LjAsMTk5ODI1Ny4wLDEuODk3NjQ1N0U3LDEuMTM1MzE0RTcsMzQ1MDY1NC4wLDM0MjEzOTkuMCwxLjIyODEwNTRFNywxMDQ4MzE5LjAsNDAxMjAxMi4wLDc1NDg0NC4wLDU2ODkyODMuMCwyLjA4NTE4MkU3LDIyMzMxNjkuMCw3MDc4NTE2LjAsNjA4ODI3LjAsNTg5NDEyMS4wLDUzNjM2NzUuMCwxODA4MzQ0LjAsNDkzNzgyLjAKKzE4LEZyaSAxMSBGZWIgMTEsNjI2OTMyLjAsNDQ0NzEwMC4wLDI2NzM0MDAuMCw1MTMwNjMyLjAsMy4zODcxNjQ4RTcsNDMwMTI2MS4wLDM0MDU1NjUuMCw1NzIwNTkuMCw3ODM2MDAuMCwxLjU5ODIzNzhFNyw4MTg2NDUzLjAsMTIxMTUzNy4wLDI5MjYzMjQuMCwxMjkzOTUzLjAsMS4yNDE5MjkzRTcsNjA4MDQ4NS4wLDI2ODg0MTguMCw0MDQxNzY5LjAsNDQ2ODk3Ni4wLDYzNDkwOTcuMCw1Mjk2NDg2LjAsMTI3NDkyMy4wLDk5Mzg0NDQuMCw0OTE5NDc5LjAsNTU5NTIxMS4wLDI4NDQ2NTguMCw5MDIxOTUuMCw4MDQ5MzEzLjAsNjQyMjAwLjAsMTcxMTI2My4wLDEyMzU3ODYuMCw4NDE0MzUwLjAsMTgxOTA0Ni4wLDE5OTgyNTcuMCwxLjg5NzY0NTdFNywxLjEzNTMxNEU3LDM0NTA2NTQuMCwzNDIxMzk5LjAsMS4yMjgxMDU0RTcsMTA0ODMxOS4wLDQwMTIwMTIuMCw3NTQ4NDQuMCw1Njg5MjgzLjAsMi4wODUxODJFNywyMjMzMTY5LjAsNzA3ODUxNi4wLDYwODgyNy4wLDU4OTQxMjEuMCw1MzYzNjc1LjAsMTgwODM0NC4wLDQ5Mzc4Mi4wCisxOSxTYXQgMTIgRmViIDExLDYyNjkzMi4wLDQ0NDcxMDAuMCwyNjczNDAwLjAsNTEzMDYzMi4wLDMuMzg3MTY0OEU3LDQzMDEyNjEuMCwzNDA1NTY1LjAsNTcyMDU5LjAsNzgzNjAwLjAsMS41OTgyMzc4RTcsODE4NjQ1My4wLDEyMTE1MzcuMCwyOTI2MzI0LjAsMTI5Mzk1My4wLDEuMjQxOTI5M0U3LDYwODA0ODUuMCwyNjg4NDE4LjAsNDA0MTc2OS4wLDQ0Njg5NzYuMCw2MzQ5MDk3LjAsNTI5NjQ4Ni4wLDEyNzQ5MjMuMCw5OTM4NDQ0LjAsNDkxOTQ3OS4wLDU1OTUyMTEuMCwyODQ0NjU4LjAsOTAyMTk1LjAsODA0OTMxMy4wLDY0MjIwMC4wLDE3MTEyNjMuMCwxMjM1Nzg2LjAsODQxNDM1MC4wLDE4MTkwNDYuMCwxOTk4MjU3LjAsMS44OTc2NDU3RTcsMS4xMzUzMTRFNywzNDUwNjU0LjAsMzQyMTM5OS4wLDEuMjI4MTA1NEU3LDEwNDgzMTkuMCw0MDEyMDEyLjAsNzU0ODQ0LjAsNTY4OTI4My4wLDIuMDg1MTgyRTcsMjIzMzE2OS4wLDcwNzg1MTYuMCw2MDg4MjcuMCw1ODk0MTIxLjAsNTM2MzY3NS4wLDE4MDgzNDQuMCw0OTM3ODIuMAorMjAsU3VuIDEzIEZlYiAxMSw2MjY5MzIuMCw0NDQ3MTAwLjAsMjY3MzQwMC4wLDUxMzA2MzIuMCwzLjM4NzE2NDhFNyw0MzAxMjYxLjAsMzQwNTU2NS4wLDU3MjA1OS4wLDc4MzYwMC4wLDEuNTk4MjM3OEU3LDgxODY0NTMuMCwxMjExNTM3LjAsMjkyNjMyNC4wLDEyOTM5NTMuMCwxLjI0MTkyOTNFNyw2MDgwNDg1LjAsMjY4ODQxOC4wLDQwNDE3NjkuMCw0NDY4OTc2LjAsNjM0OTA5Ny4wLDUyOTY0ODYuMCwxMjc0OTIzLjAsOTkzODQ0NC4wLDQ5MTk0NzkuMCw1NTk1MjExLjAsMjg0NDY1OC4wLDkwMjE5NS4wLDgwNDkzMTMuMCw2NDIyMDAuMCwxNzExMjYzLjAsMTIzNTc4Ni4wLDg0MTQzNTAuMCwxODE5MDQ2LjAsMTk5ODI1Ny4wLDEuODk3NjQ1N0U3LDEuMTM1MzE0RTcsMzQ1MDY1NC4wLDM0MjEzOTkuMCwxLjIyODEwNTRFNywxMDQ4MzE5LjAsNDAxMjAxMi4wLDc1NDg0NC4wLDU2ODkyODMuMCwyLjA4NTE4MkU3LDIyMzMxNjkuMCw3MDc4NTE2LjAsNjA4ODI3LjAsNTg5NDEyMS4wLDUzNjM2NzUuMCwxODA4MzQ0LjAsNDkzNzgyLjAKKzIxLE1vbiAxNCBGZWIgMTEsNjI2OTMyLjAsNDQ0NzEwMC4wLDI2NzM0MDAuMCw1MTMwNjMyLjAsMy4zODcxNjQ4RTcsNDMwMTI2MS4wLDM0MDU1NjUuMCw1NzIwNTkuMCw3ODM2MDAuMCwxLjU5ODIzNzhFNyw4MTg2NDUzLjAsMTIxMTUzNy4wLDI5MjYzMjQuMCwxMjkzOTUzLjAsMS4yNDE5MjkzRTcsNjA4MDQ4NS4wLDI2ODg0MTguMCw0MDQxNzY5LjAsNDQ2ODk3Ni4wLDYzNDkwOTcuMCw1Mjk2NDg2LjAsMTI3NDkyMy4wLDk5Mzg0NDQuMCw0OTE5NDc5LjAsNTU5NTIxMS4wLDI4NDQ2NTguMCw5MDIxOTUuMCw4MDQ5MzEzLjAsNjQyMjAwLjAsMTcxMTI2My4wLDEyMzU3ODYuMCw4NDE0MzUwLjAsMTgxOTA0Ni4wLDE5OTgyNTcuMCwxLjg5NzY0NTdFNywxLjEzNTMxNEU3LDM0NTA2NTQuMCwzNDIxMzk5LjAsMS4yMjgxMDU0RTcsMTA0ODMxOS4wLDQwMTIwMTIuMCw3NTQ4NDQuMCw1Njg5MjgzLjAsMi4wODUxODJFNywyMjMzMTY5LjAsNzA3ODUxNi4wLDYwODgyNy4wLDU4OTQxMjEuMCw1MzYzNjc1LjAsMTgwODM0NC4wLDQ5Mzc4Mi4wCisyMixUdWUgMTUgRmViIDExLDYyNjkzMi4wLDQ0NDcxMDAuMCwyNjczNDAwLjAsNTEzMDYzMi4wLDMuMzg3MTY0OEU3LDQzMDEyNjEuMCwzNDA1NTY1LjAsNTcyMDU5LjAsNzgzNjAwLjAsMS41OTgyMzc4RTcsODE4NjQ1My4wLDEyMTE1MzcuMCwyOTI2MzI0LjAsMTI5Mzk1My4wLDEuMjQxOTI5M0U3LDYwODA0ODUuMCwyNjg4NDE4LjAsNDA0MTc2OS4wLDQ0Njg5NzYuMCw2MzQ5MDk3LjAsNTI5NjQ4Ni4wLDEyNzQ5MjMuMCw5OTM4NDQ0LjAsNDkxOTQ3OS4wLDU1OTUyMTEuMCwyODQ0NjU4LjAsOTAyMTk1LjAsODA0OTMxMy4wLDY0MjIwMC4wLDE3MTEyNjMuMCwxMjM1Nzg2LjAsODQxNDM1MC4wLDE4MTkwNDYuMCwxOTk4MjU3LjAsMS44OTc2NDU3RTcsMS4xMzUzMTRFNywzNDUwNjU0LjAsMzQyMTM5OS4wLDEuMjI4MTA1NEU3LDEwNDgzMTkuMCw0MDEyMDEyLjAsNzU0ODQ0LjAsNTY4OTI4My4wLDIuMDg1MTgyRTcsMjIzMzE2OS4wLDcwNzg1MTYuMCw2MDg4MjcuMCw1ODk0MTIxLjAsNTM2MzY3NS4wLDE4MDgzNDQuMCw0OTM3ODIuMAorMjMsV2VkIDE2IEZlYiAxMSw2MjY5MzIuMCw0NDQ3MTAwLjAsMjY3MzQwMC4wLDUxMzA2MzIuMCwzLjM4NzE2NDhFNyw0MzAxMjYxLjAsMzQwNTU2NS4wLDU3MjA1OS4wLDc4MzYwMC4wLDEuNTk4MjM3OEU3LDgxODY0NTMuMCwxMjExNTM3LjAsMjkyNjMyNC4wLDEyOTM5NTMuMCwxLjI0MTkyOTNFNyw2MDgwNDg1LjAsMjY4ODQxOC4wLDQwNDE3NjkuMCw0NDY4OTc2LjAsNjM0OTA5Ny4wLDUyOTY0ODYuMCwxMjc0OTIzLjAsOTkzODQ0NC4wLDQ5MTk0NzkuMCw1NTk1MjExLjAsMjg0NDY1OC4wLDkwMjE5NS4wLDgwNDkzMTMuMCw2NDIyMDAuMCwxNzExMjYzLjAsMTIzNTc4Ni4wLDg0MTQzNTAuMCwxODE5MDQ2LjAsMTk5ODI1Ny4wLDEuODk3NjQ1N0U3LDEuMTM1MzE0RTcsMzQ1MDY1NC4wLDM0MjEzOTkuMCwxLjIyODEwNTRFNywxMDQ4MzE5LjAsNDAxMjAxMi4wLDc1NDg0NC4wLDU2ODkyODMuMCwyLjA4NTE4MkU3LDIyMzMxNjkuMCw3MDc4NTE2LjAsNjA4ODI3LjAsNTg5NDEyMS4wLDUzNjM2NzUuMCwxODA4MzQ0LjAsNDkzNzgyLjAKKzI0LFRodSAxNyBGZWIgMTEsNjI2OTMyLjAsNDQ0NzEwMC4wLDI2NzM0MDAuMCw1MTMwNjMyLjAsMy4zODcxNjQ4RTcsNDMwMTI2MS4wLDM0MDU1NjUuMCw1NzIwNTkuMCw3ODM2MDAuMCwxLjU5ODIzNzhFNyw4MTg2NDUzLjAsMTIxMTUzNy4wLDI5MjYzMjQuMCwxMjkzOTUzLjAsMS4yNDE5MjkzRTcsNjA4MDQ4NS4wLDI2ODg0MTguMCw0MDQxNzY5LjAsNDQ2ODk3Ni4wLDYzNDkwOTcuMCw1Mjk2NDg2LjAsMTI3NDkyMy4wLDk5Mzg0NDQuMCw0OTE5NDc5LjAsNTU5NTIxMS4wLDI4NDQ2NTguMCw5MDIxOTUuMCw4MDQ5MzEzLjAsNjQyMjAwLjAsMTcxMTI2My4wLDEyMzU3ODYuMCw4NDE0MzUwLjAsMTgxOTA0Ni4wLDE5OTgyNTcuMCwxLjg5NzY0NTdFNywxLjEzNTMxNEU3LDM0NTA2NTQuMCwzNDIxMzk5LjAsMS4yMjgxMDU0RTcsMTA0ODMxOS4wLDQwMTIwMTIuMCw3NTQ4NDQuMCw1Njg5MjgzLjAsMi4wODUxODJFNywyMjMzMTY5LjAsNzA3ODUxNi4wLDYwODgyNy4wLDU4OTQxMjEuMCw1MzYzNjc1LjAsMTgwODM0NC4wLDQ5Mzc4Mi4wCisyNSxGcmkgMTggRmViIDExLDYyNjkzMi4wLDQ0NDcxMDAuMCwyNjczNDAwLjAsNTEzMDYzMi4wLDMuMzg3MTY0OEU3LDQzMDEyNjEuMCwzNDA1NTY1LjAsNTcyMDU5LjAsNzgzNjAwLjAsMS41OTgyMzc4RTcsODE4NjQ1My4wLDEyMTE1MzcuMCwyOTI2MzI0LjAsMTI5Mzk1My4wLDEuMjQxOTI5M0U3LDYwODA0ODUuMCwyNjg4NDE4LjAsNDA0MTc2OS4wLDQ0Njg5NzYuMCw2MzQ5MDk3LjAsNTI5NjQ4Ni4wLDEyNzQ5MjMuMCw5OTM4NDQ0LjAsNDkxOTQ3OS4wLDU1OTUyMTEuMCwyODQ0NjU4LjAsOTAyMTk1LjAsODA0OTMxMy4wLDY0MjIwMC4wLDE3MTEyNjMuMCwxMjM1Nzg2LjAsODQxNDM1MC4wLDE4MTkwNDYuMCwxOTk4MjU3LjAsMS44OTc2NDU3RTcsMS4xMzUzMTRFNywzNDUwNjU0LjAsMzQyMTM5OS4wLDEuMjI4MTA1NEU3LDEwNDgzMTkuMCw0MDEyMDEyLjAsNzU0ODQ0LjAsNTY4OTI4My4wLDIuMDg1MTgyRTcsMjIzMzE2OS4wLDcwNzg1MTYuMCw2MDg4MjcuMCw1ODk0MTIxLjAsNTM2MzY3NS4wLDE4MDgzNDQuMCw0OTM3ODIuMAorMjYsU2F0IDE5IEZlYiAxMSw2MjY5MzIuMCw0NDQ3MTAwLjAsMjY3MzQwMC4wLDUxMzA2MzIuMCwzLjM4NzE2NDhFNyw0MzAxMjYxLjAsMzQwNTU2NS4wLDU3MjA1OS4wLDc4MzYwMC4wLDEuNTk4MjM3OEU3LDgxODY0NTMuMCwxMjExNTM3LjAsMjkyNjMyNC4wLDEyOTM5NTMuMCwxLjI0MTkyOTNFNyw2MDgwNDg1LjAsMjY4ODQxOC4wLDQwNDE3NjkuMCw0NDY4OTc2LjAsNjM0OTA5Ny4wLDUyOTY0ODYuMCwxMjc0OTIzLjAsOTkzODQ0NC4wLDQ5MTk0NzkuMCw1NTk1MjExLjAsMjg0NDY1OC4wLDkwMjE5NS4wLDgwNDkzMTMuMCw2NDIyMDAuMCwxNzExMjYzLjAsMTIzNTc4Ni4wLDg0MTQzNTAuMCwxODE5MDQ2LjAsMTk5ODI1Ny4wLDEuODk3NjQ1N0U3LDEuMTM1MzE0RTcsMzQ1MDY1NC4wLDM0MjEzOTkuMCwxLjIyODEwNTRFNywxMDQ4MzE5LjAsNDAxMjAxMi4wLDc1NDg0NC4wLDU2ODkyODMuMCwyLjA4NTE4MkU3LDIyMzMxNjkuMCw3MDc4NTE2LjAsNjA4ODI3LjAsNTg5NDEyMS4wLDUzNjM2NzUuMCwxODA4MzQ0LjAsNDkzNzgyLjAKKzI3LFN1biAyMCBGZWIgMTEsNjI2OTMyLjAsNDQ0NzEwMC4wLDI2NzM0MDAuMCw1MTMwNjMyLjAsMy4zODcxNjQ4RTcsNDMwMTI2MS4wLDM0MDU1NjUuMCw1NzIwNTkuMCw3ODM2MDAuMCwxLjU5ODIzNzhFNyw4MTg2NDUzLjAsMTIxMTUzNy4wLDI5MjYzMjQuMCwxMjkzOTUzLjAsMS4yNDE5MjkzRTcsNjA4MDQ4NS4wLDI2ODg0MTguMCw0MDQxNzY5LjAsNDQ2ODk3Ni4wLDYzNDkwOTcuMCw1Mjk2NDg2LjAsMTI3NDkyMy4wLDk5Mzg0NDQuMCw0OTE5NDc5LjAsNTU5NTIxMS4wLDI4NDQ2NTguMCw5MDIxOTUuMCw4MDQ5MzEzLjAsNjQyMjAwLjAsMTcxMTI2My4wLDEyMzU3ODYuMCw4NDE0MzUwLjAsMTgxOTA0Ni4wLDE5OTgyNTcuMCwxLjg5NzY0NTdFNywxLjEzNTMxNEU3LDM0NTA2NTQuMCwzNDIxMzk5LjAsMS4yMjgxMDU0RTcsMTA0ODMxOS4wLDQwMTIwMTIuMCw3NTQ4NDQuMCw1Njg5MjgzLjAsMi4wODUxODJFNywyMjMzMTY5LjAsNzA3ODUxNi4wLDYwODgyNy4wLDU4OTQxMjEuMCw1MzYzNjc1LjAsMTgwODM0NC4wLDQ5Mzc4Mi4wCisyOCxNb24gMjEgRmViIDExLDYyNjkzMi4wLDQ0NDcxMDAuMCwyNjczNDAwLjAsNTEzMDYzMi4wLDMuMzg3MTY0OEU3LDQzMDEyNjEuMCwzNDA1NTY1LjAsNTcyMDU5LjAsNzgzNjAwLjAsMS41OTgyMzc4RTcsODE4NjQ1My4wLDEyMTE1MzcuMCwyOTI2MzI0LjAsMTI5Mzk1My4wLDEuMjQxOTI5M0U3LDYwODA0ODUuMCwyNjg4NDE4LjAsNDA0MTc2OS4wLDQ0Njg5NzYuMCw2MzQ5MDk3LjAsNTI5NjQ4Ni4wLDEyNzQ5MjMuMCw5OTM4NDQ0LjAsNDkxOTQ3OS4wLDU1OTUyMTEuMCwyODQ0NjU4LjAsOTAyMTk1LjAsODA0OTMxMy4wLDY0MjIwMC4wLDE3MTEyNjMuMCwxMjM1Nzg2LjAsODQxNDM1MC4wLDE4MTkwNDYuMCwxOTk4MjU3LjAsMS44OTc2NDU3RTcsMS4xMzUzMTRFNywzNDUwNjU0LjAsMzQyMTM5OS4wLDEuMjI4MTA1NEU3LDEwNDgzMTkuMCw0MDEyMDEyLjAsNzU0ODQ0LjAsNTY4OTI4My4wLDIuMDg1MTgyRTcsMjIzMzE2OS4wLDcwNzg1MTYuMCw2MDg4MjcuMCw1ODk0MTIxLjAsNTM2MzY3NS4wLDE4MDgzNDQuMCw0OTM3ODIuMAorMjksVHVlIDIyIEZlYiAxMSw2MjY5MzIuMCw0NDQ3MTAwLjAsMjY3MzQwMC4wLDUxMzA2MzIuMCwzLjM4NzE2NDhFNyw0MzAxMjYxLjAsMzQwNTU2NS4wLDU3MjA1OS4wLDc4MzYwMC4wLDEuNTk4MjM3OEU3LDgxODY0NTMuMCwxMjExNTM3LjAsMjkyNjMyNC4wLDEyOTM5NTMuMCwxLjI0MTkyOTNFNyw2MDgwNDg1LjAsMjY4ODQxOC4wLDQwNDE3NjkuMCw0NDY4OTc2LjAsNjM0OTA5Ny4wLDUyOTY0ODYuMCwxMjc0OTIzLjAsOTkzODQ0NC4wLDQ5MTk0NzkuMCw1NTk1MjExLjAsMjg0NDY1OC4wLDkwMjE5NS4wLDgwNDkzMTMuMCw2NDIyMDAuMCwxNzExMjYzLjAsMTIzNTc4Ni4wLDg0MTQzNTAuMCwxODE5MDQ2LjAsMTk5ODI1Ny4wLDEuODk3NjQ1N0U3LDEuMTM1MzE0RTcsMzQ1MDY1NC4wLDM0MjEzOTkuMCwxLjIyODEwNTRFNywxMDQ4MzE5LjAsNDAxMjAxMi4wLDc1NDg0NC4wLDU2ODkyODMuMCwyLjA4NTE4MkU3LDIyMzMxNjkuMCw3MDc4NTE2LjAsNjA4ODI3LjAsNTg5NDEyMS4wLDUzNjM2NzUuMCwxODA4MzQ0LjAsNDkzNzgyLjAKKzMwLFdlZCAyMyBGZWIgMTEsNjI2OTMyLjAsNDQ0NzEwMC4wLDI2NzM0MDAuMCw1MTMwNjMyLjAsMy4zODcxNjQ4RTcsNDMwMTI2MS4wLDM0MDU1NjUuMCw1NzIwNTkuMCw3ODM2MDAuMCwxLjU5ODIzNzhFNyw4MTg2NDUzLjAsMTIxMTUzNy4wLDI5MjYzMjQuMCwxMjkzOTUzLjAsMS4yNDE5MjkzRTcsNjA4MDQ4NS4wLDI2ODg0MTguMCw0MDQxNzY5LjAsNDQ2ODk3Ni4wLDYzNDkwOTcuMCw1Mjk2NDg2LjAsMTI3NDkyMy4wLDk5Mzg0NDQuMCw0OTE5NDc5LjAsNTU5NTIxMS4wLDI4NDQ2NTguMCw5MDIxOTUuMCw4MDQ5MzEzLjAsNjQyMjAwLjAsMTcxMTI2My4wLDEyMzU3ODYuMCw4NDE0MzUwLjAsMTgxOTA0Ni4wLDE5OTgyNTcuMCwxLjg5NzY0NTdFNywxLjEzNTMxNEU3LDM0NTA2NTQuMCwzNDIxMzk5LjAsMS4yMjgxMDU0RTcsMTA0ODMxOS4wLDQwMTIwMTIuMCw3NTQ4NDQuMCw1Njg5MjgzLjAsMi4wODUxODJFNywyMjMzMTY5LjAsNzA3ODUxNi4wLDYwODgyNy4wLDU4OTQxMjEuMCw1MzYzNjc1LjAsMTgwODM0NC4wLDQ5Mzc4Mi4wCiszMSxUaHUgMjQgRmViIDExLDYyNjkzMi4wLDQ0NDcxMDAuMCwyNjczNDAwLjAsNTEzMDYzMi4wLDMuMzg3MTY0OEU3LDQzMDEyNjEuMCwzNDA1NTY1LjAsNTcyMDU5LjAsNzgzNjAwLjAsMS41OTgyMzc4RTcsODE4NjQ1My4wLDEyMTE1MzcuMCwyOTI2MzI0LjAsMTI5Mzk1My4wLDEuMjQxOTI5M0U3LDYwODA0ODUuMCwyNjg4NDE4LjAsNDA0MTc2OS4wLDQ0Njg5NzYuMCw2MzQ5MDk3LjAsNTI5NjQ4Ni4wLDEyNzQ5MjMuMCw5OTM4NDQ0LjAsNDkxOTQ3OS4wLDU1OTUyMTEuMCwyODQ0NjU4LjAsOTAyMTk1LjAsODA0OTMxMy4wLDY0MjIwMC4wLDE3MTEyNjMuMCwxMjM1Nzg2LjAsODQxNDM1MC4wLDE4MTkwNDYuMCwxOTk4MjU3LjAsMS44OTc2NDU3RTcsMS4xMzUzMTRFNywzNDUwNjU0LjAsMzQyMTM5OS4wLDEuMjI4MTA1NEU3LDEwNDgzMTkuMCw0MDEyMDEyLjAsNzU0ODQ0LjAsNTY4OTI4My4wLDIuMDg1MTgyRTcsMjIzMzE2OS4wLDcwNzg1MTYuMCw2MDg4MjcuMCw1ODk0MTIxLjAsNTM2MzY3NS4wLDE4MDgzNDQuMCw0OTM3ODIuMAorMzIsRnJpIDI1IEZlYiAxMSw2MjY5MzIuMCw0NDQ3MTAwLjAsMjY3MzQwMC4wLDUxMzA2MzIuMCwzLjM4NzE2NDhFNyw0MzAxMjYxLjAsMzQwNTU2NS4wLDU3MjA1OS4wLDc4MzYwMC4wLDEuNTk4MjM3OEU3LDgxODY0NTMuMCwxMjExNTM3LjAsMjkyNjMyNC4wLDEyOTM5NTMuMCwxLjI0MTkyOTNFNyw2MDgwNDg1LjAsMjY4ODQxOC4wLDQwNDE3NjkuMCw0NDY4OTc2LjAsNjM0OTA5Ny4wLDUyOTY0ODYuMCwxMjc0OTIzLjAsOTkzODQ0NC4wLDQ5MTk0NzkuMCw1NTk1MjExLjAsMjg0NDY1OC4wLDkwMjE5NS4wLDgwNDkzMTMuMCw2NDIyMDAuMCwxNzExMjYzLjAsMTIzNTc4Ni4wLDg0MTQzNTAuMCwxODE5MDQ2LjAsMTk5ODI1Ny4wLDEuODk3NjQ1N0U3LDEuMTM1MzE0RTcsMzQ1MDY1NC4wLDM0MjEzOTkuMCwxLjIyODEwNTRFNywxMDQ4MzE5LjAsNDAxMjAxMi4wLDc1NDg0NC4wLDU2ODkyODMuMCwyLjA4NTE4MkU3LDIyMzMxNjkuMCw3MDc4NTE2LjAsNjA4ODI3LjAsNTg5NDEyMS4wLDUzNjM2NzUuMCwxODA4MzQ0LjAsNDkzNzgyLjAKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0VJUlN0YXRlc09ubHlfUktfUmVmZXJlbmNlL2F1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwvaHVtYW4vRGVhdGhzXzAuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTRUlSU3RhdGVzT25seV9SS19SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9odW1hbi9EZWF0aHNfMC5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTEyZThiOAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0VJUlN0YXRlc09ubHlfUktfUmVmZXJlbmNlL2F1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwvaHVtYW4vRGVhdGhzXzAuY3N2CkBAIC0wLDAgKzEsMzMgQEAKK2l0ZXJhdGlvbix0aW1lLHN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL25vZGUvdHJhbnNwb3J0L3BpcGUvVVNBCisxLFR1ZSAyNSBKYW4gMTEsMC4wCisyLFdlZCAyNiBKYW4gMTEsMC4wCiszLFRodSAyNyBKYW4gMTEsMC4wCis0LEZyaSAyOCBKYW4gMTEsMC4wCis1LFNhdCAyOSBKYW4gMTEsMC4wCis2LFN1biAzMCBKYW4gMTEsMC4wCis3LE1vbiAzMSBKYW4gMTEsMC4wCis4LFR1ZSAxIEZlYiAxMSwwLjAKKzksV2VkIDIgRmViIDExLDAuMAorMTAsVGh1IDMgRmViIDExLDAuMAorMTEsRnJpIDQgRmViIDExLDAuMAorMTIsU2F0IDUgRmViIDExLDAuMAorMTMsU3VuIDYgRmViIDExLDAuMAorMTQsTW9uIDcgRmViIDExLDAuMAorMTUsVHVlIDggRmViIDExLDAuMAorMTYsV2VkIDkgRmViIDExLDAuMAorMTcsVGh1IDEwIEZlYiAxMSwwLjAKKzE4LEZyaSAxMSBGZWIgMTEsMC4wCisxOSxTYXQgMTIgRmViIDExLDAuMAorMjAsU3VuIDEzIEZlYiAxMSwwLjAKKzIxLE1vbiAxNCBGZWIgMTEsMC4wCisyMixUdWUgMTUgRmViIDExLDAuMAorMjMsV2VkIDE2IEZlYiAxMSwwLjAKKzI0LFRodSAxNyBGZWIgMTEsMC4wCisyNSxGcmkgMTggRmViIDExLDAuMAorMjYsU2F0IDE5IEZlYiAxMSwwLjAKKzI3LFN1biAyMCBGZWIgMTEsMC4wCisyOCxNb24gMjEgRmViIDExLDAuMAorMjksVHVlIDIyIEZlYiAxMSwwLjAKKzMwLFdlZCAyMyBGZWIgMTEsMC4wCiszMSxUaHUgMjQgRmViIDExLDAuMAorMzIsRnJpIDI1IEZlYiAxMSwwLjAKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0VJUlN0YXRlc09ubHlfUktfUmVmZXJlbmNlL2F1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwvaHVtYW4vRGVhdGhzXzEuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTRUlSU3RhdGVzT25seV9SS19SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9odW1hbi9EZWF0aHNfMS5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDdhODQzZgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0VJUlN0YXRlc09ubHlfUktfUmVmZXJlbmNlL2F1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwvaHVtYW4vRGVhdGhzXzEuY3N2CkBAIC0wLDAgKzEsMzMgQEAKK2l0ZXJhdGlvbix0aW1lLFVTLUFLLFVTLUFMLFVTLUFSLFVTLUFaLFVTLUNBLFVTLUNPLFVTLUNULFVTLURDLFVTLURFLFVTLUZMLFVTLUdBLFVTLUhJLFVTLUlBLFVTLUlELFVTLUlMLFVTLUlOLFVTLUtTLFVTLUtZLFVTLUxBLFVTLU1BLFVTLU1ELFVTLU1FLFVTLU1JLFVTLU1OLFVTLU1PLFVTLU1TLFVTLU1ULFVTLU5DLFVTLU5ELFVTLU5FLFVTLU5ILFVTLU5KLFVTLU5NLFVTLU5WLFVTLU5ZLFVTLU9ILFVTLU9LLFVTLU9SLFVTLVBBLFVTLVJJLFVTLVNDLFVTLVNELFVTLVROLFVTLVRYLFVTLVVULFVTLVZBLFVTLVZULFVTLVdBLFVTLVdJLFVTLVdWLFVTLVdZCisxLFR1ZSAyNSBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzIsV2VkIDI2IEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMyxUaHUgMjcgSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCis0LEZyaSAyOCBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzUsU2F0IDI5IEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorNixTdW4gMzAgSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCis3LE1vbiAzMSBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzgsVHVlIDEgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCis5LFdlZCAyIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTAsVGh1IDMgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxMSxGcmkgNCBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzEyLFNhdCA1IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTMsU3VuIDYgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxNCxNb24gNyBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzE1LFR1ZSA4IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTYsV2VkIDkgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxNyxUaHUgMTAgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxOCxGcmkgMTEgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxOSxTYXQgMTIgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyMCxTdW4gMTMgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyMSxNb24gMTQgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyMixUdWUgMTUgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyMyxXZWQgMTYgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyNCxUaHUgMTcgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyNSxGcmkgMTggRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyNixTYXQgMTkgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyNyxTdW4gMjAgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyOCxNb24gMjEgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyOSxUdWUgMjIgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCiszMCxXZWQgMjMgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCiszMSxUaHUgMjQgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCiszMixGcmkgMjUgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNFSVJTdGF0ZXNPbmx5X1JLX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL2h1bWFuL0RlbnNpdHlfMC5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNFSVJTdGF0ZXNPbmx5X1JLX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL2h1bWFuL0RlbnNpdHlfMC5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTEyZThiOAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0VJUlN0YXRlc09ubHlfUktfUmVmZXJlbmNlL2F1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwvaHVtYW4vRGVuc2l0eV8wLmNzdgpAQCAtMCwwICsxLDMzIEBACitpdGVyYXRpb24sdGltZSxzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9ub2RlL3RyYW5zcG9ydC9waXBlL1VTQQorMSxUdWUgMjUgSmFuIDExLDAuMAorMixXZWQgMjYgSmFuIDExLDAuMAorMyxUaHUgMjcgSmFuIDExLDAuMAorNCxGcmkgMjggSmFuIDExLDAuMAorNSxTYXQgMjkgSmFuIDExLDAuMAorNixTdW4gMzAgSmFuIDExLDAuMAorNyxNb24gMzEgSmFuIDExLDAuMAorOCxUdWUgMSBGZWIgMTEsMC4wCis5LFdlZCAyIEZlYiAxMSwwLjAKKzEwLFRodSAzIEZlYiAxMSwwLjAKKzExLEZyaSA0IEZlYiAxMSwwLjAKKzEyLFNhdCA1IEZlYiAxMSwwLjAKKzEzLFN1biA2IEZlYiAxMSwwLjAKKzE0LE1vbiA3IEZlYiAxMSwwLjAKKzE1LFR1ZSA4IEZlYiAxMSwwLjAKKzE2LFdlZCA5IEZlYiAxMSwwLjAKKzE3LFRodSAxMCBGZWIgMTEsMC4wCisxOCxGcmkgMTEgRmViIDExLDAuMAorMTksU2F0IDEyIEZlYiAxMSwwLjAKKzIwLFN1biAxMyBGZWIgMTEsMC4wCisyMSxNb24gMTQgRmViIDExLDAuMAorMjIsVHVlIDE1IEZlYiAxMSwwLjAKKzIzLFdlZCAxNiBGZWIgMTEsMC4wCisyNCxUaHUgMTcgRmViIDExLDAuMAorMjUsRnJpIDE4IEZlYiAxMSwwLjAKKzI2LFNhdCAxOSBGZWIgMTEsMC4wCisyNyxTdW4gMjAgRmViIDExLDAuMAorMjgsTW9uIDIxIEZlYiAxMSwwLjAKKzI5LFR1ZSAyMiBGZWIgMTEsMC4wCiszMCxXZWQgMjMgRmViIDExLDAuMAorMzEsVGh1IDI0IEZlYiAxMSwwLjAKKzMyLEZyaSAyNSBGZWIgMTEsMC4wCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNFSVJTdGF0ZXNPbmx5X1JLX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL2h1bWFuL0RlbnNpdHlfMS5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNFSVJTdGF0ZXNPbmx5X1JLX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL2h1bWFuL0RlbnNpdHlfMS5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjQxOGI3MgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0VJUlN0YXRlc09ubHlfUktfUmVmZXJlbmNlL2F1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwvaHVtYW4vRGVuc2l0eV8xLmNzdgpAQCAtMCwwICsxLDMzIEBACitpdGVyYXRpb24sdGltZSxVUy1BSyxVUy1BTCxVUy1BUixVUy1BWixVUy1DQSxVUy1DTyxVUy1DVCxVUy1EQyxVUy1ERSxVUy1GTCxVUy1HQSxVUy1ISSxVUy1JQSxVUy1JRCxVUy1JTCxVUy1JTixVUy1LUyxVUy1LWSxVUy1MQSxVUy1NQSxVUy1NRCxVUy1NRSxVUy1NSSxVUy1NTixVUy1NTyxVUy1NUyxVUy1NVCxVUy1OQyxVUy1ORCxVUy1ORSxVUy1OSCxVUy1OSixVUy1OTSxVUy1OVixVUy1OWSxVUy1PSCxVUy1PSyxVUy1PUixVUy1QQSxVUy1SSSxVUy1TQyxVUy1TRCxVUy1UTixVUy1UWCxVUy1VVCxVUy1WQSxVUy1WVCxVUy1XQSxVUy1XSSxVUy1XVixVUy1XWQorMSxUdWUgMjUgSmFuIDExLDAuOTQ1MjE3NzY5MzgwMDIzMyw4NC44Mzc1MjY1MzE0MDAyNCw1MC4yNzIwODMwMjg4NTYzMyw0NS4wMDYyMTUwMDQ5NjA2LDIwNi45MTg1Mzc4Njg4MDEyLDQxLjMyMTEwMTc3NDEwNTczNSw2MTQuMzUzNjQ2NjM0Nzg0NSw4MzcwLjc3ODQ2MDYzNzk4NiwzMTQuNzkxMDgzMzI5NjUwODYsMjQzLjA2MTAyNDMzMzA1NDE4LDEzNy43NjE2MjcwMTE3NjYzLDExMC44MzUxNjc1Njk2MDQ5Miw1Mi4wMDM2MTQ2MTUyMDA3NSwxNS40ODM0NDgxNDMxNjMyLDIxNC40NDIzMDI1ODUyOTkyMiwxNjYuOTY0OTY0NTkyNzk1ODcsMzIuNjc1MjcwNDY0OTMyNzgsMTAwLjAyMTQ1NTYwNTcwMzg4LDg2LjIwNzU5NzY1MTk5MjU5LDYwMS41NDk1NjU3MzMxMzc1LDQyNi45MDU5ODkzNTQxMjIxNCwzNi4wMzAzOTczNjE1Njc4LDEwMi43NTg5MzAyMzQwNjMzOSw1Ni41ODU0OTUwNzI1NzIyNiw4MC4yNzA2NjA0NTEyNjkwOCw1OC43MzcyODc2Mjk4ODU0MSw2LjEzNTYxMTIyNTA2MTYxNTUsMTQ5LjU2NDAyNTQ2MjYxNSw5LjA4MzQ3ODE4Mjg5MTM1LDIyLjEyMjU2NjAzNTI3NzE2MywxMzIuMTcwNDczODIxMjIyMzcsOTY0LjgwNDU1ODk1MzM2NzIsMTQuOTYwNTU0MTUzMjA0NzAyLDE4LjA3Mzg0Mzc3MzI1MzYyNSwzNDcuODM0NDYzNjcwMzU3MSwyNTMuMjc3NTMxMDE1MTI3NzUsNDkuMzY2ODU3NzExMTkzOTUsMzQuNzc3MTU3Mzc1Njc4NzksMjY2LjY1OTIxMTg1MDgxMjIsNjc4LjUwMTY2NjYxMjczMSwxMjUuMjk2MjgxNzIyMTYyODksOS43ODgzNjA0NDAxNjAwNzUsMTM0Ljk5ODYxMzA2NDQzNDcyLDc3LjYzNzA0MDUwMDUwOTMsMjYuMzAzODg0MjgyMDMzMDk2LDE2NS40ODU2NDMyMTQ4MzUxNCw2My4zMjU0MTQ1NDA0ODQ2NSw4Mi42NjY5MTEwODExNzc5Nyw4MS44OTA4OTM0Njc5MDQ3Myw3NC42MzMxNzgzNzIzODE3NCw1LjA0ODE5NTc3MTYyOTIxCisyLFdlZCAyNiBKYW4gMTEsMC45NDUyMTc3NjkzODAwMjMzLDg0LjgzNzUyNjUzMTQwMDI0LDUwLjI3MjA4MzAyODg1NjMzLDQ1LjAwNjIxNTAwNDk2MDYsMjA2LjkxODUzNzg2ODgwMTIsNDEuMzIxMTAxNzc0MTA1NzM1LDYxNC4zNTM2NDY2MzQ3ODQ1LDgzNzAuNzc4NDYwNjM3OTg2LDMxNC43OTEwODMzMjk2NTA4NiwyNDMuMDYxMDI0MzMzMDU0MTgsMTM3Ljc2MTYyNzAxMTc2NjMsMTEwLjgzNTE2NzU2OTYwNDkyLDUyLjAwMzYxNDYxNTIwMDc1LDE1LjQ4MzQ0ODE0MzE2MzIsMjE0LjQ0MjMwMjU4NTI5OTIyLDE2Ni45NjQ5NjQ1OTI3OTU4NywzMi42NzUyNzA0NjQ5MzI3OCwxMDAuMDIxNDU1NjA1NzAzODgsODYuMjA3NTk3NjUxOTkyNTksNjAxLjU0OTU2NTczMzEzNzUsNDI2LjkwNTk4OTM1NDEyMjE0LDM2LjAzMDM5NzM2MTU2NzgsMTAyLjc1ODkzMDIzNDA2MzM5LDU2LjU4NTQ5NTA3MjU3MjI2LDgwLjI3MDY2MDQ1MTI2OTA4LDU4LjczNzI4NzYyOTg4NTQxLDYuMTM1NjExMjI1MDYxNjE1NSwxNDkuNTY0MDI1NDYyNjE1LDkuMDgzNDc4MTgyODkxMzUsMjIuMTIyNTY2MDM1Mjc3MTYzLDEzMi4xNzA0NzM4MjEyMjIzNyw5NjQuODA0NTU4OTUzMzY3MiwxNC45NjA1NTQxNTMyMDQ3MDIsMTguMDczODQzNzczMjUzNjI1LDM0Ny44MzQ0NjM2NzAzNTcxLDI1My4yNzc1MzEwMTUxMjc3NSw0OS4zNjY4NTc3MTExOTM5NSwzNC43NzcxNTczNzU2Nzg3OSwyNjYuNjU5MjExODUwODEyMiw2NzguNTAxNjY2NjEyNzMxLDEyNS4yOTYyODE3MjIxNjI4OSw5Ljc4ODM2MDQ0MDE2MDA3NSwxMzQuOTk4NjEzMDY0NDM0NzIsNzcuNjM3MDQwNTAwNTA5MywyNi4zMDM4ODQyODIwMzMwOTYsMTY1LjQ4NTY0MzIxNDgzNTE0LDYzLjMyNTQxNDU0MDQ4NDY1LDgyLjY2NjkxMTA4MTE3Nzk3LDgxLjg5MDg5MzQ2NzkwNDczLDc0LjYzMzE3ODM3MjM4MTc0LDUuMDQ4MTk1NzcxNjI5MjEKKzMsVGh1IDI3IEphbiAxMSwwLjk0NTIxNzc2OTM4MDAyMzMsODQuODM3NTI2NTMxNDAwMjQsNTAuMjcyMDgzMDI4ODU2MzMsNDUuMDA2MjE1MDA0OTYwNiwyMDYuOTE4NTM3ODY4ODAxMiw0MS4zMjExMDE3NzQxMDU3MzUsNjE0LjM1MzY0NjYzNDc4NDUsODM3MC43Nzg0NjA2Mzc5ODYsMzE0Ljc5MTA4MzMyOTY1MDg2LDI0My4wNjEwMjQzMzMwNTQxOCwxMzcuNzYxNjI3MDExNzY2MywxMTAuODM1MTY3NTY5NjA0OTIsNTIuMDAzNjE0NjE1MjAwNzUsMTUuNDgzNDQ4MTQzMTYzMiwyMTQuNDQyMzAyNTg1Mjk5MjIsMTY2Ljk2NDk2NDU5Mjc5NTg3LDMyLjY3NTI3MDQ2NDkzMjc4LDEwMC4wMjE0NTU2MDU3MDM4OCw4Ni4yMDc1OTc2NTE5OTI1OSw2MDEuNTQ5NTY1NzMzMTM3NSw0MjYuOTA1OTg5MzU0MTIyMTQsMzYuMDMwMzk3MzYxNTY3OCwxMDIuNzU4OTMwMjM0MDYzMzksNTYuNTg1NDk1MDcyNTcyMjYsODAuMjcwNjYwNDUxMjY5MDgsNTguNzM3Mjg3NjI5ODg1NDEsNi4xMzU2MTEyMjUwNjE2MTU1LDE0OS41NjQwMjU0NjI2MTUsOS4wODM0NzgxODI4OTEzNSwyMi4xMjI1NjYwMzUyNzcxNjMsMTMyLjE3MDQ3MzgyMTIyMjM3LDk2NC44MDQ1NTg5NTMzNjcyLDE0Ljk2MDU1NDE1MzIwNDcwMiwxOC4wNzM4NDM3NzMyNTM2MjUsMzQ3LjgzNDQ2MzY3MDM1NzEsMjUzLjI3NzUzMTAxNTEyNzc1LDQ5LjM2Njg1NzcxMTE5Mzk1LDM0Ljc3NzE1NzM3NTY3ODc5LDI2Ni42NTkyMTE4NTA4MTIyLDY3OC41MDE2NjY2MTI3MzEsMTI1LjI5NjI4MTcyMjE2Mjg5LDkuNzg4MzYwNDQwMTYwMDc1LDEzNC45OTg2MTMwNjQ0MzQ3Miw3Ny42MzcwNDA1MDA1MDkzLDI2LjMwMzg4NDI4MjAzMzA5NiwxNjUuNDg1NjQzMjE0ODM1MTQsNjMuMzI1NDE0NTQwNDg0NjUsODIuNjY2OTExMDgxMTc3OTcsODEuODkwODkzNDY3OTA0NzMsNzQuNjMzMTc4MzcyMzgxNzQsNS4wNDgxOTU3NzE2MjkyMQorNCxGcmkgMjggSmFuIDExLDAuOTQ1MjE3NzY5MzgwMDIzMyw4NC44Mzc1MjY1MzE0MDAyNCw1MC4yNzIwODMwMjg4NTYzMyw0NS4wMDYyMTUwMDQ5NjA2LDIwNi45MTg1Mzc4Njg4MDEyLDQxLjMyMTEwMTc3NDEwNTczNSw2MTQuMzUzNjQ2NjM0Nzg0NSw4MzcwLjc3ODQ2MDYzNzk4NiwzMTQuNzkxMDgzMzI5NjUwODYsMjQzLjA2MTAyNDMzMzA1NDE4LDEzNy43NjE2MjcwMTE3NjYzLDExMC44MzUxNjc1Njk2MDQ5Miw1Mi4wMDM2MTQ2MTUyMDA3NSwxNS40ODM0NDgxNDMxNjMyLDIxNC40NDIzMDI1ODUyOTkyMiwxNjYuOTY0OTY0NTkyNzk1ODcsMzIuNjc1MjcwNDY0OTMyNzgsMTAwLjAyMTQ1NTYwNTcwMzg4LDg2LjIwNzU5NzY1MTk5MjU5LDYwMS41NDk1NjU3MzMxMzc1LDQyNi45MDU5ODkzNTQxMjIxNCwzNi4wMzAzOTczNjE1Njc4LDEwMi43NTg5MzAyMzQwNjMzOSw1Ni41ODU0OTUwNzI1NzIyNiw4MC4yNzA2NjA0NTEyNjkwOCw1OC43MzcyODc2Mjk4ODU0MSw2LjEzNTYxMTIyNTA2MTYxNTUsMTQ5LjU2NDAyNTQ2MjYxNSw5LjA4MzQ3ODE4Mjg5MTM1LDIyLjEyMjU2NjAzNTI3NzE2MywxMzIuMTcwNDczODIxMjIyMzcsOTY0LjgwNDU1ODk1MzM2NzIsMTQuOTYwNTU0MTUzMjA0NzAyLDE4LjA3Mzg0Mzc3MzI1MzYyNSwzNDcuODM0NDYzNjcwMzU3MSwyNTMuMjc3NTMxMDE1MTI3NzUsNDkuMzY2ODU3NzExMTkzOTUsMzQuNzc3MTU3Mzc1Njc4NzksMjY2LjY1OTIxMTg1MDgxMjIsNjc4LjUwMTY2NjYxMjczMSwxMjUuMjk2MjgxNzIyMTYyODksOS43ODgzNjA0NDAxNjAwNzUsMTM0Ljk5ODYxMzA2NDQzNDcyLDc3LjYzNzA0MDUwMDUwOTMsMjYuMzAzODg0MjgyMDMzMDk2LDE2NS40ODU2NDMyMTQ4MzUxNCw2My4zMjU0MTQ1NDA0ODQ2NSw4Mi42NjY5MTEwODExNzc5Nyw4MS44OTA4OTM0Njc5MDQ3Myw3NC42MzMxNzgzNzIzODE3NCw1LjA0ODE5NTc3MTYyOTIxCis1LFNhdCAyOSBKYW4gMTEsMC45NDUyMTc3NjkzODAwMjMzLDg0LjgzNzUyNjUzMTQwMDI0LDUwLjI3MjA4MzAyODg1NjMzLDQ1LjAwNjIxNTAwNDk2MDYsMjA2LjkxODUzNzg2ODgwMTIsNDEuMzIxMTAxNzc0MTA1NzM1LDYxNC4zNTM2NDY2MzQ3ODQ1LDgzNzAuNzc4NDYwNjM3OTg2LDMxNC43OTEwODMzMjk2NTA4NiwyNDMuMDYxMDI0MzMzMDU0MTgsMTM3Ljc2MTYyNzAxMTc2NjMsMTEwLjgzNTE2NzU2OTYwNDkyLDUyLjAwMzYxNDYxNTIwMDc1LDE1LjQ4MzQ0ODE0MzE2MzIsMjE0LjQ0MjMwMjU4NTI5OTIyLDE2Ni45NjQ5NjQ1OTI3OTU4NywzMi42NzUyNzA0NjQ5MzI3OCwxMDAuMDIxNDU1NjA1NzAzODgsODYuMjA3NTk3NjUxOTkyNTksNjAxLjU0OTU2NTczMzEzNzUsNDI2LjkwNTk4OTM1NDEyMjE0LDM2LjAzMDM5NzM2MTU2NzgsMTAyLjc1ODkzMDIzNDA2MzM5LDU2LjU4NTQ5NTA3MjU3MjI2LDgwLjI3MDY2MDQ1MTI2OTA4LDU4LjczNzI4NzYyOTg4NTQxLDYuMTM1NjExMjI1MDYxNjE1NSwxNDkuNTY0MDI1NDYyNjE1LDkuMDgzNDc4MTgyODkxMzUsMjIuMTIyNTY2MDM1Mjc3MTYzLDEzMi4xNzA0NzM4MjEyMjIzNyw5NjQuODA0NTU4OTUzMzY3MiwxNC45NjA1NTQxNTMyMDQ3MDIsMTguMDczODQzNzczMjUzNjI1LDM0Ny44MzQ0NjM2NzAzNTcxLDI1My4yNzc1MzEwMTUxMjc3NSw0OS4zNjY4NTc3MTExOTM5NSwzNC43NzcxNTczNzU2Nzg3OSwyNjYuNjU5MjExODUwODEyMiw2NzguNTAxNjY2NjEyNzMxLDEyNS4yOTYyODE3MjIxNjI4OSw5Ljc4ODM2MDQ0MDE2MDA3NSwxMzQuOTk4NjEzMDY0NDM0NzIsNzcuNjM3MDQwNTAwNTA5MywyNi4zMDM4ODQyODIwMzMwOTYsMTY1LjQ4NTY0MzIxNDgzNTE0LDYzLjMyNTQxNDU0MDQ4NDY1LDgyLjY2NjkxMTA4MTE3Nzk3LDgxLjg5MDg5MzQ2NzkwNDczLDc0LjYzMzE3ODM3MjM4MTc0LDUuMDQ4MTk1NzcxNjI5MjEKKzYsU3VuIDMwIEphbiAxMSwwLjk0NTIxNzc2OTM4MDAyMzMsODQuODM3NTI2NTMxNDAwMjQsNTAuMjcyMDgzMDI4ODU2MzMsNDUuMDA2MjE1MDA0OTYwNiwyMDYuOTE4NTM3ODY4ODAxMiw0MS4zMjExMDE3NzQxMDU3MzUsNjE0LjM1MzY0NjYzNDc4NDUsODM3MC43Nzg0NjA2Mzc5ODYsMzE0Ljc5MTA4MzMyOTY1MDg2LDI0My4wNjEwMjQzMzMwNTQxOCwxMzcuNzYxNjI3MDExNzY2MywxMTAuODM1MTY3NTY5NjA0OTIsNTIuMDAzNjE0NjE1MjAwNzUsMTUuNDgzNDQ4MTQzMTYzMiwyMTQuNDQyMzAyNTg1Mjk5MjIsMTY2Ljk2NDk2NDU5Mjc5NTg3LDMyLjY3NTI3MDQ2NDkzMjc4LDEwMC4wMjE0NTU2MDU3MDM4OCw4Ni4yMDc1OTc2NTE5OTI1OSw2MDEuNTQ5NTY1NzMzMTM3NSw0MjYuOTA1OTg5MzU0MTIyMTQsMzYuMDMwMzk3MzYxNTY3OCwxMDIuNzU4OTMwMjM0MDYzMzksNTYuNTg1NDk1MDcyNTcyMjYsODAuMjcwNjYwNDUxMjY5MDgsNTguNzM3Mjg3NjI5ODg1NDEsNi4xMzU2MTEyMjUwNjE2MTU1LDE0OS41NjQwMjU0NjI2MTUsOS4wODM0NzgxODI4OTEzNSwyMi4xMjI1NjYwMzUyNzcxNjMsMTMyLjE3MDQ3MzgyMTIyMjM3LDk2NC44MDQ1NTg5NTMzNjcyLDE0Ljk2MDU1NDE1MzIwNDcwMiwxOC4wNzM4NDM3NzMyNTM2MjUsMzQ3LjgzNDQ2MzY3MDM1NzEsMjUzLjI3NzUzMTAxNTEyNzc1LDQ5LjM2Njg1NzcxMTE5Mzk1LDM0Ljc3NzE1NzM3NTY3ODc5LDI2Ni42NTkyMTE4NTA4MTIyLDY3OC41MDE2NjY2MTI3MzEsMTI1LjI5NjI4MTcyMjE2Mjg5LDkuNzg4MzYwNDQwMTYwMDc1LDEzNC45OTg2MTMwNjQ0MzQ3Miw3Ny42MzcwNDA1MDA1MDkzLDI2LjMwMzg4NDI4MjAzMzA5NiwxNjUuNDg1NjQzMjE0ODM1MTQsNjMuMzI1NDE0NTQwNDg0NjUsODIuNjY2OTExMDgxMTc3OTcsODEuODkwODkzNDY3OTA0NzMsNzQuNjMzMTc4MzcyMzgxNzQsNS4wNDgxOTU3NzE2MjkyMQorNyxNb24gMzEgSmFuIDExLDAuOTQ1MjE3NzY5MzgwMDIzMyw4NC44Mzc1MjY1MzE0MDAyNCw1MC4yNzIwODMwMjg4NTYzMyw0NS4wMDYyMTUwMDQ5NjA2LDIwNi45MTg1Mzc4Njg4MDEyLDQxLjMyMTEwMTc3NDEwNTczNSw2MTQuMzUzNjQ2NjM0Nzg0NSw4MzcwLjc3ODQ2MDYzNzk4NiwzMTQuNzkxMDgzMzI5NjUwODYsMjQzLjA2MTAyNDMzMzA1NDE4LDEzNy43NjE2MjcwMTE3NjYzLDExMC44MzUxNjc1Njk2MDQ5Miw1Mi4wMDM2MTQ2MTUyMDA3NSwxNS40ODM0NDgxNDMxNjMyLDIxNC40NDIzMDI1ODUyOTkyMiwxNjYuOTY0OTY0NTkyNzk1ODcsMzIuNjc1MjcwNDY0OTMyNzgsMTAwLjAyMTQ1NTYwNTcwMzg4LDg2LjIwNzU5NzY1MTk5MjU5LDYwMS41NDk1NjU3MzMxMzc1LDQyNi45MDU5ODkzNTQxMjIxNCwzNi4wMzAzOTczNjE1Njc4LDEwMi43NTg5MzAyMzQwNjMzOSw1Ni41ODU0OTUwNzI1NzIyNiw4MC4yNzA2NjA0NTEyNjkwOCw1OC43MzcyODc2Mjk4ODU0MSw2LjEzNTYxMTIyNTA2MTYxNTUsMTQ5LjU2NDAyNTQ2MjYxNSw5LjA4MzQ3ODE4Mjg5MTM1LDIyLjEyMjU2NjAzNTI3NzE2MywxMzIuMTcwNDczODIxMjIyMzcsOTY0LjgwNDU1ODk1MzM2NzIsMTQuOTYwNTU0MTUzMjA0NzAyLDE4LjA3Mzg0Mzc3MzI1MzYyNSwzNDcuODM0NDYzNjcwMzU3MSwyNTMuMjc3NTMxMDE1MTI3NzUsNDkuMzY2ODU3NzExMTkzOTUsMzQuNzc3MTU3Mzc1Njc4NzksMjY2LjY1OTIxMTg1MDgxMjIsNjc4LjUwMTY2NjYxMjczMSwxMjUuMjk2MjgxNzIyMTYyODksOS43ODgzNjA0NDAxNjAwNzUsMTM0Ljk5ODYxMzA2NDQzNDcyLDc3LjYzNzA0MDUwMDUwOTMsMjYuMzAzODg0MjgyMDMzMDk2LDE2NS40ODU2NDMyMTQ4MzUxNCw2My4zMjU0MTQ1NDA0ODQ2NSw4Mi42NjY5MTEwODExNzc5Nyw4MS44OTA4OTM0Njc5MDQ3Myw3NC42MzMxNzgzNzIzODE3NCw1LjA0ODE5NTc3MTYyOTIxCis4LFR1ZSAxIEZlYiAxMSwwLjk0NTIxNzc2OTM4MDAyMzMsODQuODM3NTI2NTMxNDAwMjQsNTAuMjcyMDgzMDI4ODU2MzMsNDUuMDA2MjE1MDA0OTYwNiwyMDYuOTE4NTM3ODY4ODAxMiw0MS4zMjExMDE3NzQxMDU3MzUsNjE0LjM1MzY0NjYzNDc4NDUsODM3MC43Nzg0NjA2Mzc5ODYsMzE0Ljc5MTA4MzMyOTY1MDg2LDI0My4wNjEwMjQzMzMwNTQxOCwxMzcuNzYxNjI3MDExNzY2MywxMTAuODM1MTY3NTY5NjA0OTIsNTIuMDAzNjE0NjE1MjAwNzUsMTUuNDgzNDQ4MTQzMTYzMiwyMTQuNDQyMzAyNTg1Mjk5MjIsMTY2Ljk2NDk2NDU5Mjc5NTg3LDMyLjY3NTI3MDQ2NDkzMjc4LDEwMC4wMjE0NTU2MDU3MDM4OCw4Ni4yMDc1OTc2NTE5OTI1OSw2MDEuNTQ5NTY1NzMzMTM3NSw0MjYuOTA1OTg5MzU0MTIyMTQsMzYuMDMwMzk3MzYxNTY3OCwxMDIuNzU4OTMwMjM0MDYzMzksNTYuNTg1NDk1MDcyNTcyMjYsODAuMjcwNjYwNDUxMjY5MDgsNTguNzM3Mjg3NjI5ODg1NDEsNi4xMzU2MTEyMjUwNjE2MTU1LDE0OS41NjQwMjU0NjI2MTUsOS4wODM0NzgxODI4OTEzNSwyMi4xMjI1NjYwMzUyNzcxNjMsMTMyLjE3MDQ3MzgyMTIyMjM3LDk2NC44MDQ1NTg5NTMzNjcyLDE0Ljk2MDU1NDE1MzIwNDcwMiwxOC4wNzM4NDM3NzMyNTM2MjUsMzQ3LjgzNDQ2MzY3MDM1NzEsMjUzLjI3NzUzMTAxNTEyNzc1LDQ5LjM2Njg1NzcxMTE5Mzk1LDM0Ljc3NzE1NzM3NTY3ODc5LDI2Ni42NTkyMTE4NTA4MTIyLDY3OC41MDE2NjY2MTI3MzEsMTI1LjI5NjI4MTcyMjE2Mjg5LDkuNzg4MzYwNDQwMTYwMDc1LDEzNC45OTg2MTMwNjQ0MzQ3Miw3Ny42MzcwNDA1MDA1MDkzLDI2LjMwMzg4NDI4MjAzMzA5NiwxNjUuNDg1NjQzMjE0ODM1MTQsNjMuMzI1NDE0NTQwNDg0NjUsODIuNjY2OTExMDgxMTc3OTcsODEuODkwODkzNDY3OTA0NzMsNzQuNjMzMTc4MzcyMzgxNzQsNS4wNDgxOTU3NzE2MjkyMQorOSxXZWQgMiBGZWIgMTEsMC45NDUyMTc3NjkzODAwMjMzLDg0LjgzNzUyNjUzMTQwMDI0LDUwLjI3MjA4MzAyODg1NjMzLDQ1LjAwNjIxNTAwNDk2MDYsMjA2LjkxODUzNzg2ODgwMTIsNDEuMzIxMTAxNzc0MTA1NzM1LDYxNC4zNTM2NDY2MzQ3ODQ1LDgzNzAuNzc4NDYwNjM3OTg2LDMxNC43OTEwODMzMjk2NTA4NiwyNDMuMDYxMDI0MzMzMDU0MTgsMTM3Ljc2MTYyNzAxMTc2NjMsMTEwLjgzNTE2NzU2OTYwNDkyLDUyLjAwMzYxNDYxNTIwMDc1LDE1LjQ4MzQ0ODE0MzE2MzIsMjE0LjQ0MjMwMjU4NTI5OTIyLDE2Ni45NjQ5NjQ1OTI3OTU4NywzMi42NzUyNzA0NjQ5MzI3OCwxMDAuMDIxNDU1NjA1NzAzODgsODYuMjA3NTk3NjUxOTkyNTksNjAxLjU0OTU2NTczMzEzNzUsNDI2LjkwNTk4OTM1NDEyMjE0LDM2LjAzMDM5NzM2MTU2NzgsMTAyLjc1ODkzMDIzNDA2MzM5LDU2LjU4NTQ5NTA3MjU3MjI2LDgwLjI3MDY2MDQ1MTI2OTA4LDU4LjczNzI4NzYyOTg4NTQxLDYuMTM1NjExMjI1MDYxNjE1NSwxNDkuNTY0MDI1NDYyNjE1LDkuMDgzNDc4MTgyODkxMzUsMjIuMTIyNTY2MDM1Mjc3MTYzLDEzMi4xNzA0NzM4MjEyMjIzNyw5NjQuODA0NTU4OTUzMzY3MiwxNC45NjA1NTQxNTMyMDQ3MDIsMTguMDczODQzNzczMjUzNjI1LDM0Ny44MzQ0NjM2NzAzNTcxLDI1My4yNzc1MzEwMTUxMjc3NSw0OS4zNjY4NTc3MTExOTM5NSwzNC43NzcxNTczNzU2Nzg3OSwyNjYuNjU5MjExODUwODEyMiw2NzguNTAxNjY2NjEyNzMxLDEyNS4yOTYyODE3MjIxNjI4OSw5Ljc4ODM2MDQ0MDE2MDA3NSwxMzQuOTk4NjEzMDY0NDM0NzIsNzcuNjM3MDQwNTAwNTA5MywyNi4zMDM4ODQyODIwMzMwOTYsMTY1LjQ4NTY0MzIxNDgzNTE0LDYzLjMyNTQxNDU0MDQ4NDY1LDgyLjY2NjkxMTA4MTE3Nzk3LDgxLjg5MDg5MzQ2NzkwNDczLDc0LjYzMzE3ODM3MjM4MTc0LDUuMDQ4MTk1NzcxNjI5MjEKKzEwLFRodSAzIEZlYiAxMSwwLjk0NTIxNzc2OTM4MDAyMzMsODQuODM3NTI2NTMxNDAwMjQsNTAuMjcyMDgzMDI4ODU2MzMsNDUuMDA2MjE1MDA0OTYwNiwyMDYuOTE4NTM3ODY4ODAxMiw0MS4zMjExMDE3NzQxMDU3MzUsNjE0LjM1MzY0NjYzNDc4NDUsODM3MC43Nzg0NjA2Mzc5ODYsMzE0Ljc5MTA4MzMyOTY1MDg2LDI0My4wNjEwMjQzMzMwNTQxOCwxMzcuNzYxNjI3MDExNzY2MywxMTAuODM1MTY3NTY5NjA0OTIsNTIuMDAzNjE0NjE1MjAwNzUsMTUuNDgzNDQ4MTQzMTYzMiwyMTQuNDQyMzAyNTg1Mjk5MjIsMTY2Ljk2NDk2NDU5Mjc5NTg3LDMyLjY3NTI3MDQ2NDkzMjc4LDEwMC4wMjE0NTU2MDU3MDM4OCw4Ni4yMDc1OTc2NTE5OTI1OSw2MDEuNTQ5NTY1NzMzMTM3NSw0MjYuOTA1OTg5MzU0MTIyMTQsMzYuMDMwMzk3MzYxNTY3OCwxMDIuNzU4OTMwMjM0MDYzMzksNTYuNTg1NDk1MDcyNTcyMjYsODAuMjcwNjYwNDUxMjY5MDgsNTguNzM3Mjg3NjI5ODg1NDEsNi4xMzU2MTEyMjUwNjE2MTU1LDE0OS41NjQwMjU0NjI2MTUsOS4wODM0NzgxODI4OTEzNSwyMi4xMjI1NjYwMzUyNzcxNjMsMTMyLjE3MDQ3MzgyMTIyMjM3LDk2NC44MDQ1NTg5NTMzNjcyLDE0Ljk2MDU1NDE1MzIwNDcwMiwxOC4wNzM4NDM3NzMyNTM2MjUsMzQ3LjgzNDQ2MzY3MDM1NzEsMjUzLjI3NzUzMTAxNTEyNzc1LDQ5LjM2Njg1NzcxMTE5Mzk1LDM0Ljc3NzE1NzM3NTY3ODc5LDI2Ni42NTkyMTE4NTA4MTIyLDY3OC41MDE2NjY2MTI3MzEsMTI1LjI5NjI4MTcyMjE2Mjg5LDkuNzg4MzYwNDQwMTYwMDc1LDEzNC45OTg2MTMwNjQ0MzQ3Miw3Ny42MzcwNDA1MDA1MDkzLDI2LjMwMzg4NDI4MjAzMzA5NiwxNjUuNDg1NjQzMjE0ODM1MTQsNjMuMzI1NDE0NTQwNDg0NjUsODIuNjY2OTExMDgxMTc3OTcsODEuODkwODkzNDY3OTA0NzMsNzQuNjMzMTc4MzcyMzgxNzQsNS4wNDgxOTU3NzE2MjkyMQorMTEsRnJpIDQgRmViIDExLDAuOTQ1MjE3NzY5MzgwMDIzMyw4NC44Mzc1MjY1MzE0MDAyNCw1MC4yNzIwODMwMjg4NTYzMyw0NS4wMDYyMTUwMDQ5NjA2LDIwNi45MTg1Mzc4Njg4MDEyLDQxLjMyMTEwMTc3NDEwNTczNSw2MTQuMzUzNjQ2NjM0Nzg0NSw4MzcwLjc3ODQ2MDYzNzk4NiwzMTQuNzkxMDgzMzI5NjUwODYsMjQzLjA2MTAyNDMzMzA1NDE4LDEzNy43NjE2MjcwMTE3NjYzLDExMC44MzUxNjc1Njk2MDQ5Miw1Mi4wMDM2MTQ2MTUyMDA3NSwxNS40ODM0NDgxNDMxNjMyLDIxNC40NDIzMDI1ODUyOTkyMiwxNjYuOTY0OTY0NTkyNzk1ODcsMzIuNjc1MjcwNDY0OTMyNzgsMTAwLjAyMTQ1NTYwNTcwMzg4LDg2LjIwNzU5NzY1MTk5MjU5LDYwMS41NDk1NjU3MzMxMzc1LDQyNi45MDU5ODkzNTQxMjIxNCwzNi4wMzAzOTczNjE1Njc4LDEwMi43NTg5MzAyMzQwNjMzOSw1Ni41ODU0OTUwNzI1NzIyNiw4MC4yNzA2NjA0NTEyNjkwOCw1OC43MzcyODc2Mjk4ODU0MSw2LjEzNTYxMTIyNTA2MTYxNTUsMTQ5LjU2NDAyNTQ2MjYxNSw5LjA4MzQ3ODE4Mjg5MTM1LDIyLjEyMjU2NjAzNTI3NzE2MywxMzIuMTcwNDczODIxMjIyMzcsOTY0LjgwNDU1ODk1MzM2NzIsMTQuOTYwNTU0MTUzMjA0NzAyLDE4LjA3Mzg0Mzc3MzI1MzYyNSwzNDcuODM0NDYzNjcwMzU3MSwyNTMuMjc3NTMxMDE1MTI3NzUsNDkuMzY2ODU3NzExMTkzOTUsMzQuNzc3MTU3Mzc1Njc4NzksMjY2LjY1OTIxMTg1MDgxMjIsNjc4LjUwMTY2NjYxMjczMSwxMjUuMjk2MjgxNzIyMTYyODksOS43ODgzNjA0NDAxNjAwNzUsMTM0Ljk5ODYxMzA2NDQzNDcyLDc3LjYzNzA0MDUwMDUwOTMsMjYuMzAzODg0MjgyMDMzMDk2LDE2NS40ODU2NDMyMTQ4MzUxNCw2My4zMjU0MTQ1NDA0ODQ2NSw4Mi42NjY5MTEwODExNzc5Nyw4MS44OTA4OTM0Njc5MDQ3Myw3NC42MzMxNzgzNzIzODE3NCw1LjA0ODE5NTc3MTYyOTIxCisxMixTYXQgNSBGZWIgMTEsMC45NDUyMTc3NjkzODAwMjMzLDg0LjgzNzUyNjUzMTQwMDI0LDUwLjI3MjA4MzAyODg1NjMzLDQ1LjAwNjIxNTAwNDk2MDYsMjA2LjkxODUzNzg2ODgwMTIsNDEuMzIxMTAxNzc0MTA1NzM1LDYxNC4zNTM2NDY2MzQ3ODQ1LDgzNzAuNzc4NDYwNjM3OTg2LDMxNC43OTEwODMzMjk2NTA4NiwyNDMuMDYxMDI0MzMzMDU0MTgsMTM3Ljc2MTYyNzAxMTc2NjMsMTEwLjgzNTE2NzU2OTYwNDkyLDUyLjAwMzYxNDYxNTIwMDc1LDE1LjQ4MzQ0ODE0MzE2MzIsMjE0LjQ0MjMwMjU4NTI5OTIyLDE2Ni45NjQ5NjQ1OTI3OTU4NywzMi42NzUyNzA0NjQ5MzI3OCwxMDAuMDIxNDU1NjA1NzAzODgsODYuMjA3NTk3NjUxOTkyNTksNjAxLjU0OTU2NTczMzEzNzUsNDI2LjkwNTk4OTM1NDEyMjE0LDM2LjAzMDM5NzM2MTU2NzgsMTAyLjc1ODkzMDIzNDA2MzM5LDU2LjU4NTQ5NTA3MjU3MjI2LDgwLjI3MDY2MDQ1MTI2OTA4LDU4LjczNzI4NzYyOTg4NTQxLDYuMTM1NjExMjI1MDYxNjE1NSwxNDkuNTY0MDI1NDYyNjE1LDkuMDgzNDc4MTgyODkxMzUsMjIuMTIyNTY2MDM1Mjc3MTYzLDEzMi4xNzA0NzM4MjEyMjIzNyw5NjQuODA0NTU4OTUzMzY3MiwxNC45NjA1NTQxNTMyMDQ3MDIsMTguMDczODQzNzczMjUzNjI1LDM0Ny44MzQ0NjM2NzAzNTcxLDI1My4yNzc1MzEwMTUxMjc3NSw0OS4zNjY4NTc3MTExOTM5NSwzNC43NzcxNTczNzU2Nzg3OSwyNjYuNjU5MjExODUwODEyMiw2NzguNTAxNjY2NjEyNzMxLDEyNS4yOTYyODE3MjIxNjI4OSw5Ljc4ODM2MDQ0MDE2MDA3NSwxMzQuOTk4NjEzMDY0NDM0NzIsNzcuNjM3MDQwNTAwNTA5MywyNi4zMDM4ODQyODIwMzMwOTYsMTY1LjQ4NTY0MzIxNDgzNTE0LDYzLjMyNTQxNDU0MDQ4NDY1LDgyLjY2NjkxMTA4MTE3Nzk3LDgxLjg5MDg5MzQ2NzkwNDczLDc0LjYzMzE3ODM3MjM4MTc0LDUuMDQ4MTk1NzcxNjI5MjEKKzEzLFN1biA2IEZlYiAxMSwwLjk0NTIxNzc2OTM4MDAyMzMsODQuODM3NTI2NTMxNDAwMjQsNTAuMjcyMDgzMDI4ODU2MzMsNDUuMDA2MjE1MDA0OTYwNiwyMDYuOTE4NTM3ODY4ODAxMiw0MS4zMjExMDE3NzQxMDU3MzUsNjE0LjM1MzY0NjYzNDc4NDUsODM3MC43Nzg0NjA2Mzc5ODYsMzE0Ljc5MTA4MzMyOTY1MDg2LDI0My4wNjEwMjQzMzMwNTQxOCwxMzcuNzYxNjI3MDExNzY2MywxMTAuODM1MTY3NTY5NjA0OTIsNTIuMDAzNjE0NjE1MjAwNzUsMTUuNDgzNDQ4MTQzMTYzMiwyMTQuNDQyMzAyNTg1Mjk5MjIsMTY2Ljk2NDk2NDU5Mjc5NTg3LDMyLjY3NTI3MDQ2NDkzMjc4LDEwMC4wMjE0NTU2MDU3MDM4OCw4Ni4yMDc1OTc2NTE5OTI1OSw2MDEuNTQ5NTY1NzMzMTM3NSw0MjYuOTA1OTg5MzU0MTIyMTQsMzYuMDMwMzk3MzYxNTY3OCwxMDIuNzU4OTMwMjM0MDYzMzksNTYuNTg1NDk1MDcyNTcyMjYsODAuMjcwNjYwNDUxMjY5MDgsNTguNzM3Mjg3NjI5ODg1NDEsNi4xMzU2MTEyMjUwNjE2MTU1LDE0OS41NjQwMjU0NjI2MTUsOS4wODM0NzgxODI4OTEzNSwyMi4xMjI1NjYwMzUyNzcxNjMsMTMyLjE3MDQ3MzgyMTIyMjM3LDk2NC44MDQ1NTg5NTMzNjcyLDE0Ljk2MDU1NDE1MzIwNDcwMiwxOC4wNzM4NDM3NzMyNTM2MjUsMzQ3LjgzNDQ2MzY3MDM1NzEsMjUzLjI3NzUzMTAxNTEyNzc1LDQ5LjM2Njg1NzcxMTE5Mzk1LDM0Ljc3NzE1NzM3NTY3ODc5LDI2Ni42NTkyMTE4NTA4MTIyLDY3OC41MDE2NjY2MTI3MzEsMTI1LjI5NjI4MTcyMjE2Mjg5LDkuNzg4MzYwNDQwMTYwMDc1LDEzNC45OTg2MTMwNjQ0MzQ3Miw3Ny42MzcwNDA1MDA1MDkzLDI2LjMwMzg4NDI4MjAzMzA5NiwxNjUuNDg1NjQzMjE0ODM1MTQsNjMuMzI1NDE0NTQwNDg0NjUsODIuNjY2OTExMDgxMTc3OTcsODEuODkwODkzNDY3OTA0NzMsNzQuNjMzMTc4MzcyMzgxNzQsNS4wNDgxOTU3NzE2MjkyMQorMTQsTW9uIDcgRmViIDExLDAuOTQ1MjE3NzY5MzgwMDIzMyw4NC44Mzc1MjY1MzE0MDAyNCw1MC4yNzIwODMwMjg4NTYzMyw0NS4wMDYyMTUwMDQ5NjA2LDIwNi45MTg1Mzc4Njg4MDEyLDQxLjMyMTEwMTc3NDEwNTczNSw2MTQuMzUzNjQ2NjM0Nzg0NSw4MzcwLjc3ODQ2MDYzNzk4NiwzMTQuNzkxMDgzMzI5NjUwODYsMjQzLjA2MTAyNDMzMzA1NDE4LDEzNy43NjE2MjcwMTE3NjYzLDExMC44MzUxNjc1Njk2MDQ5Miw1Mi4wMDM2MTQ2MTUyMDA3NSwxNS40ODM0NDgxNDMxNjMyLDIxNC40NDIzMDI1ODUyOTkyMiwxNjYuOTY0OTY0NTkyNzk1ODcsMzIuNjc1MjcwNDY0OTMyNzgsMTAwLjAyMTQ1NTYwNTcwMzg4LDg2LjIwNzU5NzY1MTk5MjU5LDYwMS41NDk1NjU3MzMxMzc1LDQyNi45MDU5ODkzNTQxMjIxNCwzNi4wMzAzOTczNjE1Njc4LDEwMi43NTg5MzAyMzQwNjMzOSw1Ni41ODU0OTUwNzI1NzIyNiw4MC4yNzA2NjA0NTEyNjkwOCw1OC43MzcyODc2Mjk4ODU0MSw2LjEzNTYxMTIyNTA2MTYxNTUsMTQ5LjU2NDAyNTQ2MjYxNSw5LjA4MzQ3ODE4Mjg5MTM1LDIyLjEyMjU2NjAzNTI3NzE2MywxMzIuMTcwNDczODIxMjIyMzcsOTY0LjgwNDU1ODk1MzM2NzIsMTQuOTYwNTU0MTUzMjA0NzAyLDE4LjA3Mzg0Mzc3MzI1MzYyNSwzNDcuODM0NDYzNjcwMzU3MSwyNTMuMjc3NTMxMDE1MTI3NzUsNDkuMzY2ODU3NzExMTkzOTUsMzQuNzc3MTU3Mzc1Njc4NzksMjY2LjY1OTIxMTg1MDgxMjIsNjc4LjUwMTY2NjYxMjczMSwxMjUuMjk2MjgxNzIyMTYyODksOS43ODgzNjA0NDAxNjAwNzUsMTM0Ljk5ODYxMzA2NDQzNDcyLDc3LjYzNzA0MDUwMDUwOTMsMjYuMzAzODg0MjgyMDMzMDk2LDE2NS40ODU2NDMyMTQ4MzUxNCw2My4zMjU0MTQ1NDA0ODQ2NSw4Mi42NjY5MTEwODExNzc5Nyw4MS44OTA4OTM0Njc5MDQ3Myw3NC42MzMxNzgzNzIzODE3NCw1LjA0ODE5NTc3MTYyOTIxCisxNSxUdWUgOCBGZWIgMTEsMC45NDUyMTc3NjkzODAwMjMzLDg0LjgzNzUyNjUzMTQwMDI0LDUwLjI3MjA4MzAyODg1NjMzLDQ1LjAwNjIxNTAwNDk2MDYsMjA2LjkxODUzNzg2ODgwMTIsNDEuMzIxMTAxNzc0MTA1NzM1LDYxNC4zNTM2NDY2MzQ3ODQ1LDgzNzAuNzc4NDYwNjM3OTg2LDMxNC43OTEwODMzMjk2NTA4NiwyNDMuMDYxMDI0MzMzMDU0MTgsMTM3Ljc2MTYyNzAxMTc2NjMsMTEwLjgzNTE2NzU2OTYwNDkyLDUyLjAwMzYxNDYxNTIwMDc1LDE1LjQ4MzQ0ODE0MzE2MzIsMjE0LjQ0MjMwMjU4NTI5OTIyLDE2Ni45NjQ5NjQ1OTI3OTU4NywzMi42NzUyNzA0NjQ5MzI3OCwxMDAuMDIxNDU1NjA1NzAzODgsODYuMjA3NTk3NjUxOTkyNTksNjAxLjU0OTU2NTczMzEzNzUsNDI2LjkwNTk4OTM1NDEyMjE0LDM2LjAzMDM5NzM2MTU2NzgsMTAyLjc1ODkzMDIzNDA2MzM5LDU2LjU4NTQ5NTA3MjU3MjI2LDgwLjI3MDY2MDQ1MTI2OTA4LDU4LjczNzI4NzYyOTg4NTQxLDYuMTM1NjExMjI1MDYxNjE1NSwxNDkuNTY0MDI1NDYyNjE1LDkuMDgzNDc4MTgyODkxMzUsMjIuMTIyNTY2MDM1Mjc3MTYzLDEzMi4xNzA0NzM4MjEyMjIzNyw5NjQuODA0NTU4OTUzMzY3MiwxNC45NjA1NTQxNTMyMDQ3MDIsMTguMDczODQzNzczMjUzNjI1LDM0Ny44MzQ0NjM2NzAzNTcxLDI1My4yNzc1MzEwMTUxMjc3NSw0OS4zNjY4NTc3MTExOTM5NSwzNC43NzcxNTczNzU2Nzg3OSwyNjYuNjU5MjExODUwODEyMiw2NzguNTAxNjY2NjEyNzMxLDEyNS4yOTYyODE3MjIxNjI4OSw5Ljc4ODM2MDQ0MDE2MDA3NSwxMzQuOTk4NjEzMDY0NDM0NzIsNzcuNjM3MDQwNTAwNTA5MywyNi4zMDM4ODQyODIwMzMwOTYsMTY1LjQ4NTY0MzIxNDgzNTE0LDYzLjMyNTQxNDU0MDQ4NDY1LDgyLjY2NjkxMTA4MTE3Nzk3LDgxLjg5MDg5MzQ2NzkwNDczLDc0LjYzMzE3ODM3MjM4MTc0LDUuMDQ4MTk1NzcxNjI5MjEKKzE2LFdlZCA5IEZlYiAxMSwwLjk0NTIxNzc2OTM4MDAyMzMsODQuODM3NTI2NTMxNDAwMjQsNTAuMjcyMDgzMDI4ODU2MzMsNDUuMDA2MjE1MDA0OTYwNiwyMDYuOTE4NTM3ODY4ODAxMiw0MS4zMjExMDE3NzQxMDU3MzUsNjE0LjM1MzY0NjYzNDc4NDUsODM3MC43Nzg0NjA2Mzc5ODYsMzE0Ljc5MTA4MzMyOTY1MDg2LDI0My4wNjEwMjQzMzMwNTQxOCwxMzcuNzYxNjI3MDExNzY2MywxMTAuODM1MTY3NTY5NjA0OTIsNTIuMDAzNjE0NjE1MjAwNzUsMTUuNDgzNDQ4MTQzMTYzMiwyMTQuNDQyMzAyNTg1Mjk5MjIsMTY2Ljk2NDk2NDU5Mjc5NTg3LDMyLjY3NTI3MDQ2NDkzMjc4LDEwMC4wMjE0NTU2MDU3MDM4OCw4Ni4yMDc1OTc2NTE5OTI1OSw2MDEuNTQ5NTY1NzMzMTM3NSw0MjYuOTA1OTg5MzU0MTIyMTQsMzYuMDMwMzk3MzYxNTY3OCwxMDIuNzU4OTMwMjM0MDYzMzksNTYuNTg1NDk1MDcyNTcyMjYsODAuMjcwNjYwNDUxMjY5MDgsNTguNzM3Mjg3NjI5ODg1NDEsNi4xMzU2MTEyMjUwNjE2MTU1LDE0OS41NjQwMjU0NjI2MTUsOS4wODM0NzgxODI4OTEzNSwyMi4xMjI1NjYwMzUyNzcxNjMsMTMyLjE3MDQ3MzgyMTIyMjM3LDk2NC44MDQ1NTg5NTMzNjcyLDE0Ljk2MDU1NDE1MzIwNDcwMiwxOC4wNzM4NDM3NzMyNTM2MjUsMzQ3LjgzNDQ2MzY3MDM1NzEsMjUzLjI3NzUzMTAxNTEyNzc1LDQ5LjM2Njg1NzcxMTE5Mzk1LDM0Ljc3NzE1NzM3NTY3ODc5LDI2Ni42NTkyMTE4NTA4MTIyLDY3OC41MDE2NjY2MTI3MzEsMTI1LjI5NjI4MTcyMjE2Mjg5LDkuNzg4MzYwNDQwMTYwMDc1LDEzNC45OTg2MTMwNjQ0MzQ3Miw3Ny42MzcwNDA1MDA1MDkzLDI2LjMwMzg4NDI4MjAzMzA5NiwxNjUuNDg1NjQzMjE0ODM1MTQsNjMuMzI1NDE0NTQwNDg0NjUsODIuNjY2OTExMDgxMTc3OTcsODEuODkwODkzNDY3OTA0NzMsNzQuNjMzMTc4MzcyMzgxNzQsNS4wNDgxOTU3NzE2MjkyMQorMTcsVGh1IDEwIEZlYiAxMSwwLjk0NTIxNzc2OTM4MDAyMzMsODQuODM3NTI2NTMxNDAwMjQsNTAuMjcyMDgzMDI4ODU2MzMsNDUuMDA2MjE1MDA0OTYwNiwyMDYuOTE4NTM3ODY4ODAxMiw0MS4zMjExMDE3NzQxMDU3MzUsNjE0LjM1MzY0NjYzNDc4NDUsODM3MC43Nzg0NjA2Mzc5ODYsMzE0Ljc5MTA4MzMyOTY1MDg2LDI0My4wNjEwMjQzMzMwNTQxOCwxMzcuNzYxNjI3MDExNzY2MywxMTAuODM1MTY3NTY5NjA0OTIsNTIuMDAzNjE0NjE1MjAwNzUsMTUuNDgzNDQ4MTQzMTYzMiwyMTQuNDQyMzAyNTg1Mjk5MjIsMTY2Ljk2NDk2NDU5Mjc5NTg3LDMyLjY3NTI3MDQ2NDkzMjc4LDEwMC4wMjE0NTU2MDU3MDM4OCw4Ni4yMDc1OTc2NTE5OTI1OSw2MDEuNTQ5NTY1NzMzMTM3NSw0MjYuOTA1OTg5MzU0MTIyMTQsMzYuMDMwMzk3MzYxNTY3OCwxMDIuNzU4OTMwMjM0MDYzMzksNTYuNTg1NDk1MDcyNTcyMjYsODAuMjcwNjYwNDUxMjY5MDgsNTguNzM3Mjg3NjI5ODg1NDEsNi4xMzU2MTEyMjUwNjE2MTU1LDE0OS41NjQwMjU0NjI2MTUsOS4wODM0NzgxODI4OTEzNSwyMi4xMjI1NjYwMzUyNzcxNjMsMTMyLjE3MDQ3MzgyMTIyMjM3LDk2NC44MDQ1NTg5NTMzNjcyLDE0Ljk2MDU1NDE1MzIwNDcwMiwxOC4wNzM4NDM3NzMyNTM2MjUsMzQ3LjgzNDQ2MzY3MDM1NzEsMjUzLjI3NzUzMTAxNTEyNzc1LDQ5LjM2Njg1NzcxMTE5Mzk1LDM0Ljc3NzE1NzM3NTY3ODc5LDI2Ni42NTkyMTE4NTA4MTIyLDY3OC41MDE2NjY2MTI3MzEsMTI1LjI5NjI4MTcyMjE2Mjg5LDkuNzg4MzYwNDQwMTYwMDc1LDEzNC45OTg2MTMwNjQ0MzQ3Miw3Ny42MzcwNDA1MDA1MDkzLDI2LjMwMzg4NDI4MjAzMzA5NiwxNjUuNDg1NjQzMjE0ODM1MTQsNjMuMzI1NDE0NTQwNDg0NjUsODIuNjY2OTExMDgxMTc3OTcsODEuODkwODkzNDY3OTA0NzMsNzQuNjMzMTc4MzcyMzgxNzQsNS4wNDgxOTU3NzE2MjkyMQorMTgsRnJpIDExIEZlYiAxMSwwLjk0NTIxNzc2OTM4MDAyMzMsODQuODM3NTI2NTMxNDAwMjQsNTAuMjcyMDgzMDI4ODU2MzMsNDUuMDA2MjE1MDA0OTYwNiwyMDYuOTE4NTM3ODY4ODAxMiw0MS4zMjExMDE3NzQxMDU3MzUsNjE0LjM1MzY0NjYzNDc4NDUsODM3MC43Nzg0NjA2Mzc5ODYsMzE0Ljc5MTA4MzMyOTY1MDg2LDI0My4wNjEwMjQzMzMwNTQxOCwxMzcuNzYxNjI3MDExNzY2MywxMTAuODM1MTY3NTY5NjA0OTIsNTIuMDAzNjE0NjE1MjAwNzUsMTUuNDgzNDQ4MTQzMTYzMiwyMTQuNDQyMzAyNTg1Mjk5MjIsMTY2Ljk2NDk2NDU5Mjc5NTg3LDMyLjY3NTI3MDQ2NDkzMjc4LDEwMC4wMjE0NTU2MDU3MDM4OCw4Ni4yMDc1OTc2NTE5OTI1OSw2MDEuNTQ5NTY1NzMzMTM3NSw0MjYuOTA1OTg5MzU0MTIyMTQsMzYuMDMwMzk3MzYxNTY3OCwxMDIuNzU4OTMwMjM0MDYzMzksNTYuNTg1NDk1MDcyNTcyMjYsODAuMjcwNjYwNDUxMjY5MDgsNTguNzM3Mjg3NjI5ODg1NDEsNi4xMzU2MTEyMjUwNjE2MTU1LDE0OS41NjQwMjU0NjI2MTUsOS4wODM0NzgxODI4OTEzNSwyMi4xMjI1NjYwMzUyNzcxNjMsMTMyLjE3MDQ3MzgyMTIyMjM3LDk2NC44MDQ1NTg5NTMzNjcyLDE0Ljk2MDU1NDE1MzIwNDcwMiwxOC4wNzM4NDM3NzMyNTM2MjUsMzQ3LjgzNDQ2MzY3MDM1NzEsMjUzLjI3NzUzMTAxNTEyNzc1LDQ5LjM2Njg1NzcxMTE5Mzk1LDM0Ljc3NzE1NzM3NTY3ODc5LDI2Ni42NTkyMTE4NTA4MTIyLDY3OC41MDE2NjY2MTI3MzEsMTI1LjI5NjI4MTcyMjE2Mjg5LDkuNzg4MzYwNDQwMTYwMDc1LDEzNC45OTg2MTMwNjQ0MzQ3Miw3Ny42MzcwNDA1MDA1MDkzLDI2LjMwMzg4NDI4MjAzMzA5NiwxNjUuNDg1NjQzMjE0ODM1MTQsNjMuMzI1NDE0NTQwNDg0NjUsODIuNjY2OTExMDgxMTc3OTcsODEuODkwODkzNDY3OTA0NzMsNzQuNjMzMTc4MzcyMzgxNzQsNS4wNDgxOTU3NzE2MjkyMQorMTksU2F0IDEyIEZlYiAxMSwwLjk0NTIxNzc2OTM4MDAyMzMsODQuODM3NTI2NTMxNDAwMjQsNTAuMjcyMDgzMDI4ODU2MzMsNDUuMDA2MjE1MDA0OTYwNiwyMDYuOTE4NTM3ODY4ODAxMiw0MS4zMjExMDE3NzQxMDU3MzUsNjE0LjM1MzY0NjYzNDc4NDUsODM3MC43Nzg0NjA2Mzc5ODYsMzE0Ljc5MTA4MzMyOTY1MDg2LDI0My4wNjEwMjQzMzMwNTQxOCwxMzcuNzYxNjI3MDExNzY2MywxMTAuODM1MTY3NTY5NjA0OTIsNTIuMDAzNjE0NjE1MjAwNzUsMTUuNDgzNDQ4MTQzMTYzMiwyMTQuNDQyMzAyNTg1Mjk5MjIsMTY2Ljk2NDk2NDU5Mjc5NTg3LDMyLjY3NTI3MDQ2NDkzMjc4LDEwMC4wMjE0NTU2MDU3MDM4OCw4Ni4yMDc1OTc2NTE5OTI1OSw2MDEuNTQ5NTY1NzMzMTM3NSw0MjYuOTA1OTg5MzU0MTIyMTQsMzYuMDMwMzk3MzYxNTY3OCwxMDIuNzU4OTMwMjM0MDYzMzksNTYuNTg1NDk1MDcyNTcyMjYsODAuMjcwNjYwNDUxMjY5MDgsNTguNzM3Mjg3NjI5ODg1NDEsNi4xMzU2MTEyMjUwNjE2MTU1LDE0OS41NjQwMjU0NjI2MTUsOS4wODM0NzgxODI4OTEzNSwyMi4xMjI1NjYwMzUyNzcxNjMsMTMyLjE3MDQ3MzgyMTIyMjM3LDk2NC44MDQ1NTg5NTMzNjcyLDE0Ljk2MDU1NDE1MzIwNDcwMiwxOC4wNzM4NDM3NzMyNTM2MjUsMzQ3LjgzNDQ2MzY3MDM1NzEsMjUzLjI3NzUzMTAxNTEyNzc1LDQ5LjM2Njg1NzcxMTE5Mzk1LDM0Ljc3NzE1NzM3NTY3ODc5LDI2Ni42NTkyMTE4NTA4MTIyLDY3OC41MDE2NjY2MTI3MzEsMTI1LjI5NjI4MTcyMjE2Mjg5LDkuNzg4MzYwNDQwMTYwMDc1LDEzNC45OTg2MTMwNjQ0MzQ3Miw3Ny42MzcwNDA1MDA1MDkzLDI2LjMwMzg4NDI4MjAzMzA5NiwxNjUuNDg1NjQzMjE0ODM1MTQsNjMuMzI1NDE0NTQwNDg0NjUsODIuNjY2OTExMDgxMTc3OTcsODEuODkwODkzNDY3OTA0NzMsNzQuNjMzMTc4MzcyMzgxNzQsNS4wNDgxOTU3NzE2MjkyMQorMjAsU3VuIDEzIEZlYiAxMSwwLjk0NTIxNzc2OTM4MDAyMzMsODQuODM3NTI2NTMxNDAwMjQsNTAuMjcyMDgzMDI4ODU2MzMsNDUuMDA2MjE1MDA0OTYwNiwyMDYuOTE4NTM3ODY4ODAxMiw0MS4zMjExMDE3NzQxMDU3MzUsNjE0LjM1MzY0NjYzNDc4NDUsODM3MC43Nzg0NjA2Mzc5ODYsMzE0Ljc5MTA4MzMyOTY1MDg2LDI0My4wNjEwMjQzMzMwNTQxOCwxMzcuNzYxNjI3MDExNzY2MywxMTAuODM1MTY3NTY5NjA0OTIsNTIuMDAzNjE0NjE1MjAwNzUsMTUuNDgzNDQ4MTQzMTYzMiwyMTQuNDQyMzAyNTg1Mjk5MjIsMTY2Ljk2NDk2NDU5Mjc5NTg3LDMyLjY3NTI3MDQ2NDkzMjc4LDEwMC4wMjE0NTU2MDU3MDM4OCw4Ni4yMDc1OTc2NTE5OTI1OSw2MDEuNTQ5NTY1NzMzMTM3NSw0MjYuOTA1OTg5MzU0MTIyMTQsMzYuMDMwMzk3MzYxNTY3OCwxMDIuNzU4OTMwMjM0MDYzMzksNTYuNTg1NDk1MDcyNTcyMjYsODAuMjcwNjYwNDUxMjY5MDgsNTguNzM3Mjg3NjI5ODg1NDEsNi4xMzU2MTEyMjUwNjE2MTU1LDE0OS41NjQwMjU0NjI2MTUsOS4wODM0NzgxODI4OTEzNSwyMi4xMjI1NjYwMzUyNzcxNjMsMTMyLjE3MDQ3MzgyMTIyMjM3LDk2NC44MDQ1NTg5NTMzNjcyLDE0Ljk2MDU1NDE1MzIwNDcwMiwxOC4wNzM4NDM3NzMyNTM2MjUsMzQ3LjgzNDQ2MzY3MDM1NzEsMjUzLjI3NzUzMTAxNTEyNzc1LDQ5LjM2Njg1NzcxMTE5Mzk1LDM0Ljc3NzE1NzM3NTY3ODc5LDI2Ni42NTkyMTE4NTA4MTIyLDY3OC41MDE2NjY2MTI3MzEsMTI1LjI5NjI4MTcyMjE2Mjg5LDkuNzg4MzYwNDQwMTYwMDc1LDEzNC45OTg2MTMwNjQ0MzQ3Miw3Ny42MzcwNDA1MDA1MDkzLDI2LjMwMzg4NDI4MjAzMzA5NiwxNjUuNDg1NjQzMjE0ODM1MTQsNjMuMzI1NDE0NTQwNDg0NjUsODIuNjY2OTExMDgxMTc3OTcsODEuODkwODkzNDY3OTA0NzMsNzQuNjMzMTc4MzcyMzgxNzQsNS4wNDgxOTU3NzE2MjkyMQorMjEsTW9uIDE0IEZlYiAxMSwwLjk0NTIxNzc2OTM4MDAyMzMsODQuODM3NTI2NTMxNDAwMjQsNTAuMjcyMDgzMDI4ODU2MzMsNDUuMDA2MjE1MDA0OTYwNiwyMDYuOTE4NTM3ODY4ODAxMiw0MS4zMjExMDE3NzQxMDU3MzUsNjE0LjM1MzY0NjYzNDc4NDUsODM3MC43Nzg0NjA2Mzc5ODYsMzE0Ljc5MTA4MzMyOTY1MDg2LDI0My4wNjEwMjQzMzMwNTQxOCwxMzcuNzYxNjI3MDExNzY2MywxMTAuODM1MTY3NTY5NjA0OTIsNTIuMDAzNjE0NjE1MjAwNzUsMTUuNDgzNDQ4MTQzMTYzMiwyMTQuNDQyMzAyNTg1Mjk5MjIsMTY2Ljk2NDk2NDU5Mjc5NTg3LDMyLjY3NTI3MDQ2NDkzMjc4LDEwMC4wMjE0NTU2MDU3MDM4OCw4Ni4yMDc1OTc2NTE5OTI1OSw2MDEuNTQ5NTY1NzMzMTM3NSw0MjYuOTA1OTg5MzU0MTIyMTQsMzYuMDMwMzk3MzYxNTY3OCwxMDIuNzU4OTMwMjM0MDYzMzksNTYuNTg1NDk1MDcyNTcyMjYsODAuMjcwNjYwNDUxMjY5MDgsNTguNzM3Mjg3NjI5ODg1NDEsNi4xMzU2MTEyMjUwNjE2MTU1LDE0OS41NjQwMjU0NjI2MTUsOS4wODM0NzgxODI4OTEzNSwyMi4xMjI1NjYwMzUyNzcxNjMsMTMyLjE3MDQ3MzgyMTIyMjM3LDk2NC44MDQ1NTg5NTMzNjcyLDE0Ljk2MDU1NDE1MzIwNDcwMiwxOC4wNzM4NDM3NzMyNTM2MjUsMzQ3LjgzNDQ2MzY3MDM1NzEsMjUzLjI3NzUzMTAxNTEyNzc1LDQ5LjM2Njg1NzcxMTE5Mzk1LDM0Ljc3NzE1NzM3NTY3ODc5LDI2Ni42NTkyMTE4NTA4MTIyLDY3OC41MDE2NjY2MTI3MzEsMTI1LjI5NjI4MTcyMjE2Mjg5LDkuNzg4MzYwNDQwMTYwMDc1LDEzNC45OTg2MTMwNjQ0MzQ3Miw3Ny42MzcwNDA1MDA1MDkzLDI2LjMwMzg4NDI4MjAzMzA5NiwxNjUuNDg1NjQzMjE0ODM1MTQsNjMuMzI1NDE0NTQwNDg0NjUsODIuNjY2OTExMDgxMTc3OTcsODEuODkwODkzNDY3OTA0NzMsNzQuNjMzMTc4MzcyMzgxNzQsNS4wNDgxOTU3NzE2MjkyMQorMjIsVHVlIDE1IEZlYiAxMSwwLjk0NTIxNzc2OTM4MDAyMzMsODQuODM3NTI2NTMxNDAwMjQsNTAuMjcyMDgzMDI4ODU2MzMsNDUuMDA2MjE1MDA0OTYwNiwyMDYuOTE4NTM3ODY4ODAxMiw0MS4zMjExMDE3NzQxMDU3MzUsNjE0LjM1MzY0NjYzNDc4NDUsODM3MC43Nzg0NjA2Mzc5ODYsMzE0Ljc5MTA4MzMyOTY1MDg2LDI0My4wNjEwMjQzMzMwNTQxOCwxMzcuNzYxNjI3MDExNzY2MywxMTAuODM1MTY3NTY5NjA0OTIsNTIuMDAzNjE0NjE1MjAwNzUsMTUuNDgzNDQ4MTQzMTYzMiwyMTQuNDQyMzAyNTg1Mjk5MjIsMTY2Ljk2NDk2NDU5Mjc5NTg3LDMyLjY3NTI3MDQ2NDkzMjc4LDEwMC4wMjE0NTU2MDU3MDM4OCw4Ni4yMDc1OTc2NTE5OTI1OSw2MDEuNTQ5NTY1NzMzMTM3NSw0MjYuOTA1OTg5MzU0MTIyMTQsMzYuMDMwMzk3MzYxNTY3OCwxMDIuNzU4OTMwMjM0MDYzMzksNTYuNTg1NDk1MDcyNTcyMjYsODAuMjcwNjYwNDUxMjY5MDgsNTguNzM3Mjg3NjI5ODg1NDEsNi4xMzU2MTEyMjUwNjE2MTU1LDE0OS41NjQwMjU0NjI2MTUsOS4wODM0NzgxODI4OTEzNSwyMi4xMjI1NjYwMzUyNzcxNjMsMTMyLjE3MDQ3MzgyMTIyMjM3LDk2NC44MDQ1NTg5NTMzNjcyLDE0Ljk2MDU1NDE1MzIwNDcwMiwxOC4wNzM4NDM3NzMyNTM2MjUsMzQ3LjgzNDQ2MzY3MDM1NzEsMjUzLjI3NzUzMTAxNTEyNzc1LDQ5LjM2Njg1NzcxMTE5Mzk1LDM0Ljc3NzE1NzM3NTY3ODc5LDI2Ni42NTkyMTE4NTA4MTIyLDY3OC41MDE2NjY2MTI3MzEsMTI1LjI5NjI4MTcyMjE2Mjg5LDkuNzg4MzYwNDQwMTYwMDc1LDEzNC45OTg2MTMwNjQ0MzQ3Miw3Ny42MzcwNDA1MDA1MDkzLDI2LjMwMzg4NDI4MjAzMzA5NiwxNjUuNDg1NjQzMjE0ODM1MTQsNjMuMzI1NDE0NTQwNDg0NjUsODIuNjY2OTExMDgxMTc3OTcsODEuODkwODkzNDY3OTA0NzMsNzQuNjMzMTc4MzcyMzgxNzQsNS4wNDgxOTU3NzE2MjkyMQorMjMsV2VkIDE2IEZlYiAxMSwwLjk0NTIxNzc2OTM4MDAyMzMsODQuODM3NTI2NTMxNDAwMjQsNTAuMjcyMDgzMDI4ODU2MzMsNDUuMDA2MjE1MDA0OTYwNiwyMDYuOTE4NTM3ODY4ODAxMiw0MS4zMjExMDE3NzQxMDU3MzUsNjE0LjM1MzY0NjYzNDc4NDUsODM3MC43Nzg0NjA2Mzc5ODYsMzE0Ljc5MTA4MzMyOTY1MDg2LDI0My4wNjEwMjQzMzMwNTQxOCwxMzcuNzYxNjI3MDExNzY2MywxMTAuODM1MTY3NTY5NjA0OTIsNTIuMDAzNjE0NjE1MjAwNzUsMTUuNDgzNDQ4MTQzMTYzMiwyMTQuNDQyMzAyNTg1Mjk5MjIsMTY2Ljk2NDk2NDU5Mjc5NTg3LDMyLjY3NTI3MDQ2NDkzMjc4LDEwMC4wMjE0NTU2MDU3MDM4OCw4Ni4yMDc1OTc2NTE5OTI1OSw2MDEuNTQ5NTY1NzMzMTM3NSw0MjYuOTA1OTg5MzU0MTIyMTQsMzYuMDMwMzk3MzYxNTY3OCwxMDIuNzU4OTMwMjM0MDYzMzksNTYuNTg1NDk1MDcyNTcyMjYsODAuMjcwNjYwNDUxMjY5MDgsNTguNzM3Mjg3NjI5ODg1NDEsNi4xMzU2MTEyMjUwNjE2MTU1LDE0OS41NjQwMjU0NjI2MTUsOS4wODM0NzgxODI4OTEzNSwyMi4xMjI1NjYwMzUyNzcxNjMsMTMyLjE3MDQ3MzgyMTIyMjM3LDk2NC44MDQ1NTg5NTMzNjcyLDE0Ljk2MDU1NDE1MzIwNDcwMiwxOC4wNzM4NDM3NzMyNTM2MjUsMzQ3LjgzNDQ2MzY3MDM1NzEsMjUzLjI3NzUzMTAxNTEyNzc1LDQ5LjM2Njg1NzcxMTE5Mzk1LDM0Ljc3NzE1NzM3NTY3ODc5LDI2Ni42NTkyMTE4NTA4MTIyLDY3OC41MDE2NjY2MTI3MzEsMTI1LjI5NjI4MTcyMjE2Mjg5LDkuNzg4MzYwNDQwMTYwMDc1LDEzNC45OTg2MTMwNjQ0MzQ3Miw3Ny42MzcwNDA1MDA1MDkzLDI2LjMwMzg4NDI4MjAzMzA5NiwxNjUuNDg1NjQzMjE0ODM1MTQsNjMuMzI1NDE0NTQwNDg0NjUsODIuNjY2OTExMDgxMTc3OTcsODEuODkwODkzNDY3OTA0NzMsNzQuNjMzMTc4MzcyMzgxNzQsNS4wNDgxOTU3NzE2MjkyMQorMjQsVGh1IDE3IEZlYiAxMSwwLjk0NTIxNzc2OTM4MDAyMzMsODQuODM3NTI2NTMxNDAwMjQsNTAuMjcyMDgzMDI4ODU2MzMsNDUuMDA2MjE1MDA0OTYwNiwyMDYuOTE4NTM3ODY4ODAxMiw0MS4zMjExMDE3NzQxMDU3MzUsNjE0LjM1MzY0NjYzNDc4NDUsODM3MC43Nzg0NjA2Mzc5ODYsMzE0Ljc5MTA4MzMyOTY1MDg2LDI0My4wNjEwMjQzMzMwNTQxOCwxMzcuNzYxNjI3MDExNzY2MywxMTAuODM1MTY3NTY5NjA0OTIsNTIuMDAzNjE0NjE1MjAwNzUsMTUuNDgzNDQ4MTQzMTYzMiwyMTQuNDQyMzAyNTg1Mjk5MjIsMTY2Ljk2NDk2NDU5Mjc5NTg3LDMyLjY3NTI3MDQ2NDkzMjc4LDEwMC4wMjE0NTU2MDU3MDM4OCw4Ni4yMDc1OTc2NTE5OTI1OSw2MDEuNTQ5NTY1NzMzMTM3NSw0MjYuOTA1OTg5MzU0MTIyMTQsMzYuMDMwMzk3MzYxNTY3OCwxMDIuNzU4OTMwMjM0MDYzMzksNTYuNTg1NDk1MDcyNTcyMjYsODAuMjcwNjYwNDUxMjY5MDgsNTguNzM3Mjg3NjI5ODg1NDEsNi4xMzU2MTEyMjUwNjE2MTU1LDE0OS41NjQwMjU0NjI2MTUsOS4wODM0NzgxODI4OTEzNSwyMi4xMjI1NjYwMzUyNzcxNjMsMTMyLjE3MDQ3MzgyMTIyMjM3LDk2NC44MDQ1NTg5NTMzNjcyLDE0Ljk2MDU1NDE1MzIwNDcwMiwxOC4wNzM4NDM3NzMyNTM2MjUsMzQ3LjgzNDQ2MzY3MDM1NzEsMjUzLjI3NzUzMTAxNTEyNzc1LDQ5LjM2Njg1NzcxMTE5Mzk1LDM0Ljc3NzE1NzM3NTY3ODc5LDI2Ni42NTkyMTE4NTA4MTIyLDY3OC41MDE2NjY2MTI3MzEsMTI1LjI5NjI4MTcyMjE2Mjg5LDkuNzg4MzYwNDQwMTYwMDc1LDEzNC45OTg2MTMwNjQ0MzQ3Miw3Ny42MzcwNDA1MDA1MDkzLDI2LjMwMzg4NDI4MjAzMzA5NiwxNjUuNDg1NjQzMjE0ODM1MTQsNjMuMzI1NDE0NTQwNDg0NjUsODIuNjY2OTExMDgxMTc3OTcsODEuODkwODkzNDY3OTA0NzMsNzQuNjMzMTc4MzcyMzgxNzQsNS4wNDgxOTU3NzE2MjkyMQorMjUsRnJpIDE4IEZlYiAxMSwwLjk0NTIxNzc2OTM4MDAyMzMsODQuODM3NTI2NTMxNDAwMjQsNTAuMjcyMDgzMDI4ODU2MzMsNDUuMDA2MjE1MDA0OTYwNiwyMDYuOTE4NTM3ODY4ODAxMiw0MS4zMjExMDE3NzQxMDU3MzUsNjE0LjM1MzY0NjYzNDc4NDUsODM3MC43Nzg0NjA2Mzc5ODYsMzE0Ljc5MTA4MzMyOTY1MDg2LDI0My4wNjEwMjQzMzMwNTQxOCwxMzcuNzYxNjI3MDExNzY2MywxMTAuODM1MTY3NTY5NjA0OTIsNTIuMDAzNjE0NjE1MjAwNzUsMTUuNDgzNDQ4MTQzMTYzMiwyMTQuNDQyMzAyNTg1Mjk5MjIsMTY2Ljk2NDk2NDU5Mjc5NTg3LDMyLjY3NTI3MDQ2NDkzMjc4LDEwMC4wMjE0NTU2MDU3MDM4OCw4Ni4yMDc1OTc2NTE5OTI1OSw2MDEuNTQ5NTY1NzMzMTM3NSw0MjYuOTA1OTg5MzU0MTIyMTQsMzYuMDMwMzk3MzYxNTY3OCwxMDIuNzU4OTMwMjM0MDYzMzksNTYuNTg1NDk1MDcyNTcyMjYsODAuMjcwNjYwNDUxMjY5MDgsNTguNzM3Mjg3NjI5ODg1NDEsNi4xMzU2MTEyMjUwNjE2MTU1LDE0OS41NjQwMjU0NjI2MTUsOS4wODM0NzgxODI4OTEzNSwyMi4xMjI1NjYwMzUyNzcxNjMsMTMyLjE3MDQ3MzgyMTIyMjM3LDk2NC44MDQ1NTg5NTMzNjcyLDE0Ljk2MDU1NDE1MzIwNDcwMiwxOC4wNzM4NDM3NzMyNTM2MjUsMzQ3LjgzNDQ2MzY3MDM1NzEsMjUzLjI3NzUzMTAxNTEyNzc1LDQ5LjM2Njg1NzcxMTE5Mzk1LDM0Ljc3NzE1NzM3NTY3ODc5LDI2Ni42NTkyMTE4NTA4MTIyLDY3OC41MDE2NjY2MTI3MzEsMTI1LjI5NjI4MTcyMjE2Mjg5LDkuNzg4MzYwNDQwMTYwMDc1LDEzNC45OTg2MTMwNjQ0MzQ3Miw3Ny42MzcwNDA1MDA1MDkzLDI2LjMwMzg4NDI4MjAzMzA5NiwxNjUuNDg1NjQzMjE0ODM1MTQsNjMuMzI1NDE0NTQwNDg0NjUsODIuNjY2OTExMDgxMTc3OTcsODEuODkwODkzNDY3OTA0NzMsNzQuNjMzMTc4MzcyMzgxNzQsNS4wNDgxOTU3NzE2MjkyMQorMjYsU2F0IDE5IEZlYiAxMSwwLjk0NTIxNzc2OTM4MDAyMzMsODQuODM3NTI2NTMxNDAwMjQsNTAuMjcyMDgzMDI4ODU2MzMsNDUuMDA2MjE1MDA0OTYwNiwyMDYuOTE4NTM3ODY4ODAxMiw0MS4zMjExMDE3NzQxMDU3MzUsNjE0LjM1MzY0NjYzNDc4NDUsODM3MC43Nzg0NjA2Mzc5ODYsMzE0Ljc5MTA4MzMyOTY1MDg2LDI0My4wNjEwMjQzMzMwNTQxOCwxMzcuNzYxNjI3MDExNzY2MywxMTAuODM1MTY3NTY5NjA0OTIsNTIuMDAzNjE0NjE1MjAwNzUsMTUuNDgzNDQ4MTQzMTYzMiwyMTQuNDQyMzAyNTg1Mjk5MjIsMTY2Ljk2NDk2NDU5Mjc5NTg3LDMyLjY3NTI3MDQ2NDkzMjc4LDEwMC4wMjE0NTU2MDU3MDM4OCw4Ni4yMDc1OTc2NTE5OTI1OSw2MDEuNTQ5NTY1NzMzMTM3NSw0MjYuOTA1OTg5MzU0MTIyMTQsMzYuMDMwMzk3MzYxNTY3OCwxMDIuNzU4OTMwMjM0MDYzMzksNTYuNTg1NDk1MDcyNTcyMjYsODAuMjcwNjYwNDUxMjY5MDgsNTguNzM3Mjg3NjI5ODg1NDEsNi4xMzU2MTEyMjUwNjE2MTU1LDE0OS41NjQwMjU0NjI2MTUsOS4wODM0NzgxODI4OTEzNSwyMi4xMjI1NjYwMzUyNzcxNjMsMTMyLjE3MDQ3MzgyMTIyMjM3LDk2NC44MDQ1NTg5NTMzNjcyLDE0Ljk2MDU1NDE1MzIwNDcwMiwxOC4wNzM4NDM3NzMyNTM2MjUsMzQ3LjgzNDQ2MzY3MDM1NzEsMjUzLjI3NzUzMTAxNTEyNzc1LDQ5LjM2Njg1NzcxMTE5Mzk1LDM0Ljc3NzE1NzM3NTY3ODc5LDI2Ni42NTkyMTE4NTA4MTIyLDY3OC41MDE2NjY2MTI3MzEsMTI1LjI5NjI4MTcyMjE2Mjg5LDkuNzg4MzYwNDQwMTYwMDc1LDEzNC45OTg2MTMwNjQ0MzQ3Miw3Ny42MzcwNDA1MDA1MDkzLDI2LjMwMzg4NDI4MjAzMzA5NiwxNjUuNDg1NjQzMjE0ODM1MTQsNjMuMzI1NDE0NTQwNDg0NjUsODIuNjY2OTExMDgxMTc3OTcsODEuODkwODkzNDY3OTA0NzMsNzQuNjMzMTc4MzcyMzgxNzQsNS4wNDgxOTU3NzE2MjkyMQorMjcsU3VuIDIwIEZlYiAxMSwwLjk0NTIxNzc2OTM4MDAyMzMsODQuODM3NTI2NTMxNDAwMjQsNTAuMjcyMDgzMDI4ODU2MzMsNDUuMDA2MjE1MDA0OTYwNiwyMDYuOTE4NTM3ODY4ODAxMiw0MS4zMjExMDE3NzQxMDU3MzUsNjE0LjM1MzY0NjYzNDc4NDUsODM3MC43Nzg0NjA2Mzc5ODYsMzE0Ljc5MTA4MzMyOTY1MDg2LDI0My4wNjEwMjQzMzMwNTQxOCwxMzcuNzYxNjI3MDExNzY2MywxMTAuODM1MTY3NTY5NjA0OTIsNTIuMDAzNjE0NjE1MjAwNzUsMTUuNDgzNDQ4MTQzMTYzMiwyMTQuNDQyMzAyNTg1Mjk5MjIsMTY2Ljk2NDk2NDU5Mjc5NTg3LDMyLjY3NTI3MDQ2NDkzMjc4LDEwMC4wMjE0NTU2MDU3MDM4OCw4Ni4yMDc1OTc2NTE5OTI1OSw2MDEuNTQ5NTY1NzMzMTM3NSw0MjYuOTA1OTg5MzU0MTIyMTQsMzYuMDMwMzk3MzYxNTY3OCwxMDIuNzU4OTMwMjM0MDYzMzksNTYuNTg1NDk1MDcyNTcyMjYsODAuMjcwNjYwNDUxMjY5MDgsNTguNzM3Mjg3NjI5ODg1NDEsNi4xMzU2MTEyMjUwNjE2MTU1LDE0OS41NjQwMjU0NjI2MTUsOS4wODM0NzgxODI4OTEzNSwyMi4xMjI1NjYwMzUyNzcxNjMsMTMyLjE3MDQ3MzgyMTIyMjM3LDk2NC44MDQ1NTg5NTMzNjcyLDE0Ljk2MDU1NDE1MzIwNDcwMiwxOC4wNzM4NDM3NzMyNTM2MjUsMzQ3LjgzNDQ2MzY3MDM1NzEsMjUzLjI3NzUzMTAxNTEyNzc1LDQ5LjM2Njg1NzcxMTE5Mzk1LDM0Ljc3NzE1NzM3NTY3ODc5LDI2Ni42NTkyMTE4NTA4MTIyLDY3OC41MDE2NjY2MTI3MzEsMTI1LjI5NjI4MTcyMjE2Mjg5LDkuNzg4MzYwNDQwMTYwMDc1LDEzNC45OTg2MTMwNjQ0MzQ3Miw3Ny42MzcwNDA1MDA1MDkzLDI2LjMwMzg4NDI4MjAzMzA5NiwxNjUuNDg1NjQzMjE0ODM1MTQsNjMuMzI1NDE0NTQwNDg0NjUsODIuNjY2OTExMDgxMTc3OTcsODEuODkwODkzNDY3OTA0NzMsNzQuNjMzMTc4MzcyMzgxNzQsNS4wNDgxOTU3NzE2MjkyMQorMjgsTW9uIDIxIEZlYiAxMSwwLjk0NTIxNzc2OTM4MDAyMzMsODQuODM3NTI2NTMxNDAwMjQsNTAuMjcyMDgzMDI4ODU2MzMsNDUuMDA2MjE1MDA0OTYwNiwyMDYuOTE4NTM3ODY4ODAxMiw0MS4zMjExMDE3NzQxMDU3MzUsNjE0LjM1MzY0NjYzNDc4NDUsODM3MC43Nzg0NjA2Mzc5ODYsMzE0Ljc5MTA4MzMyOTY1MDg2LDI0My4wNjEwMjQzMzMwNTQxOCwxMzcuNzYxNjI3MDExNzY2MywxMTAuODM1MTY3NTY5NjA0OTIsNTIuMDAzNjE0NjE1MjAwNzUsMTUuNDgzNDQ4MTQzMTYzMiwyMTQuNDQyMzAyNTg1Mjk5MjIsMTY2Ljk2NDk2NDU5Mjc5NTg3LDMyLjY3NTI3MDQ2NDkzMjc4LDEwMC4wMjE0NTU2MDU3MDM4OCw4Ni4yMDc1OTc2NTE5OTI1OSw2MDEuNTQ5NTY1NzMzMTM3NSw0MjYuOTA1OTg5MzU0MTIyMTQsMzYuMDMwMzk3MzYxNTY3OCwxMDIuNzU4OTMwMjM0MDYzMzksNTYuNTg1NDk1MDcyNTcyMjYsODAuMjcwNjYwNDUxMjY5MDgsNTguNzM3Mjg3NjI5ODg1NDEsNi4xMzU2MTEyMjUwNjE2MTU1LDE0OS41NjQwMjU0NjI2MTUsOS4wODM0NzgxODI4OTEzNSwyMi4xMjI1NjYwMzUyNzcxNjMsMTMyLjE3MDQ3MzgyMTIyMjM3LDk2NC44MDQ1NTg5NTMzNjcyLDE0Ljk2MDU1NDE1MzIwNDcwMiwxOC4wNzM4NDM3NzMyNTM2MjUsMzQ3LjgzNDQ2MzY3MDM1NzEsMjUzLjI3NzUzMTAxNTEyNzc1LDQ5LjM2Njg1NzcxMTE5Mzk1LDM0Ljc3NzE1NzM3NTY3ODc5LDI2Ni42NTkyMTE4NTA4MTIyLDY3OC41MDE2NjY2MTI3MzEsMTI1LjI5NjI4MTcyMjE2Mjg5LDkuNzg4MzYwNDQwMTYwMDc1LDEzNC45OTg2MTMwNjQ0MzQ3Miw3Ny42MzcwNDA1MDA1MDkzLDI2LjMwMzg4NDI4MjAzMzA5NiwxNjUuNDg1NjQzMjE0ODM1MTQsNjMuMzI1NDE0NTQwNDg0NjUsODIuNjY2OTExMDgxMTc3OTcsODEuODkwODkzNDY3OTA0NzMsNzQuNjMzMTc4MzcyMzgxNzQsNS4wNDgxOTU3NzE2MjkyMQorMjksVHVlIDIyIEZlYiAxMSwwLjk0NTIxNzc2OTM4MDAyMzMsODQuODM3NTI2NTMxNDAwMjQsNTAuMjcyMDgzMDI4ODU2MzMsNDUuMDA2MjE1MDA0OTYwNiwyMDYuOTE4NTM3ODY4ODAxMiw0MS4zMjExMDE3NzQxMDU3MzUsNjE0LjM1MzY0NjYzNDc4NDUsODM3MC43Nzg0NjA2Mzc5ODYsMzE0Ljc5MTA4MzMyOTY1MDg2LDI0My4wNjEwMjQzMzMwNTQxOCwxMzcuNzYxNjI3MDExNzY2MywxMTAuODM1MTY3NTY5NjA0OTIsNTIuMDAzNjE0NjE1MjAwNzUsMTUuNDgzNDQ4MTQzMTYzMiwyMTQuNDQyMzAyNTg1Mjk5MjIsMTY2Ljk2NDk2NDU5Mjc5NTg3LDMyLjY3NTI3MDQ2NDkzMjc4LDEwMC4wMjE0NTU2MDU3MDM4OCw4Ni4yMDc1OTc2NTE5OTI1OSw2MDEuNTQ5NTY1NzMzMTM3NSw0MjYuOTA1OTg5MzU0MTIyMTQsMzYuMDMwMzk3MzYxNTY3OCwxMDIuNzU4OTMwMjM0MDYzMzksNTYuNTg1NDk1MDcyNTcyMjYsODAuMjcwNjYwNDUxMjY5MDgsNTguNzM3Mjg3NjI5ODg1NDEsNi4xMzU2MTEyMjUwNjE2MTU1LDE0OS41NjQwMjU0NjI2MTUsOS4wODM0NzgxODI4OTEzNSwyMi4xMjI1NjYwMzUyNzcxNjMsMTMyLjE3MDQ3MzgyMTIyMjM3LDk2NC44MDQ1NTg5NTMzNjcyLDE0Ljk2MDU1NDE1MzIwNDcwMiwxOC4wNzM4NDM3NzMyNTM2MjUsMzQ3LjgzNDQ2MzY3MDM1NzEsMjUzLjI3NzUzMTAxNTEyNzc1LDQ5LjM2Njg1NzcxMTE5Mzk1LDM0Ljc3NzE1NzM3NTY3ODc5LDI2Ni42NTkyMTE4NTA4MTIyLDY3OC41MDE2NjY2MTI3MzEsMTI1LjI5NjI4MTcyMjE2Mjg5LDkuNzg4MzYwNDQwMTYwMDc1LDEzNC45OTg2MTMwNjQ0MzQ3Miw3Ny42MzcwNDA1MDA1MDkzLDI2LjMwMzg4NDI4MjAzMzA5NiwxNjUuNDg1NjQzMjE0ODM1MTQsNjMuMzI1NDE0NTQwNDg0NjUsODIuNjY2OTExMDgxMTc3OTcsODEuODkwODkzNDY3OTA0NzMsNzQuNjMzMTc4MzcyMzgxNzQsNS4wNDgxOTU3NzE2MjkyMQorMzAsV2VkIDIzIEZlYiAxMSwwLjk0NTIxNzc2OTM4MDAyMzMsODQuODM3NTI2NTMxNDAwMjQsNTAuMjcyMDgzMDI4ODU2MzMsNDUuMDA2MjE1MDA0OTYwNiwyMDYuOTE4NTM3ODY4ODAxMiw0MS4zMjExMDE3NzQxMDU3MzUsNjE0LjM1MzY0NjYzNDc4NDUsODM3MC43Nzg0NjA2Mzc5ODYsMzE0Ljc5MTA4MzMyOTY1MDg2LDI0My4wNjEwMjQzMzMwNTQxOCwxMzcuNzYxNjI3MDExNzY2MywxMTAuODM1MTY3NTY5NjA0OTIsNTIuMDAzNjE0NjE1MjAwNzUsMTUuNDgzNDQ4MTQzMTYzMiwyMTQuNDQyMzAyNTg1Mjk5MjIsMTY2Ljk2NDk2NDU5Mjc5NTg3LDMyLjY3NTI3MDQ2NDkzMjc4LDEwMC4wMjE0NTU2MDU3MDM4OCw4Ni4yMDc1OTc2NTE5OTI1OSw2MDEuNTQ5NTY1NzMzMTM3NSw0MjYuOTA1OTg5MzU0MTIyMTQsMzYuMDMwMzk3MzYxNTY3OCwxMDIuNzU4OTMwMjM0MDYzMzksNTYuNTg1NDk1MDcyNTcyMjYsODAuMjcwNjYwNDUxMjY5MDgsNTguNzM3Mjg3NjI5ODg1NDEsNi4xMzU2MTEyMjUwNjE2MTU1LDE0OS41NjQwMjU0NjI2MTUsOS4wODM0NzgxODI4OTEzNSwyMi4xMjI1NjYwMzUyNzcxNjMsMTMyLjE3MDQ3MzgyMTIyMjM3LDk2NC44MDQ1NTg5NTMzNjcyLDE0Ljk2MDU1NDE1MzIwNDcwMiwxOC4wNzM4NDM3NzMyNTM2MjUsMzQ3LjgzNDQ2MzY3MDM1NzEsMjUzLjI3NzUzMTAxNTEyNzc1LDQ5LjM2Njg1NzcxMTE5Mzk1LDM0Ljc3NzE1NzM3NTY3ODc5LDI2Ni42NTkyMTE4NTA4MTIyLDY3OC41MDE2NjY2MTI3MzEsMTI1LjI5NjI4MTcyMjE2Mjg5LDkuNzg4MzYwNDQwMTYwMDc1LDEzNC45OTg2MTMwNjQ0MzQ3Miw3Ny42MzcwNDA1MDA1MDkzLDI2LjMwMzg4NDI4MjAzMzA5NiwxNjUuNDg1NjQzMjE0ODM1MTQsNjMuMzI1NDE0NTQwNDg0NjUsODIuNjY2OTExMDgxMTc3OTcsODEuODkwODkzNDY3OTA0NzMsNzQuNjMzMTc4MzcyMzgxNzQsNS4wNDgxOTU3NzE2MjkyMQorMzEsVGh1IDI0IEZlYiAxMSwwLjk0NTIxNzc2OTM4MDAyMzMsODQuODM3NTI2NTMxNDAwMjQsNTAuMjcyMDgzMDI4ODU2MzMsNDUuMDA2MjE1MDA0OTYwNiwyMDYuOTE4NTM3ODY4ODAxMiw0MS4zMjExMDE3NzQxMDU3MzUsNjE0LjM1MzY0NjYzNDc4NDUsODM3MC43Nzg0NjA2Mzc5ODYsMzE0Ljc5MTA4MzMyOTY1MDg2LDI0My4wNjEwMjQzMzMwNTQxOCwxMzcuNzYxNjI3MDExNzY2MywxMTAuODM1MTY3NTY5NjA0OTIsNTIuMDAzNjE0NjE1MjAwNzUsMTUuNDgzNDQ4MTQzMTYzMiwyMTQuNDQyMzAyNTg1Mjk5MjIsMTY2Ljk2NDk2NDU5Mjc5NTg3LDMyLjY3NTI3MDQ2NDkzMjc4LDEwMC4wMjE0NTU2MDU3MDM4OCw4Ni4yMDc1OTc2NTE5OTI1OSw2MDEuNTQ5NTY1NzMzMTM3NSw0MjYuOTA1OTg5MzU0MTIyMTQsMzYuMDMwMzk3MzYxNTY3OCwxMDIuNzU4OTMwMjM0MDYzMzksNTYuNTg1NDk1MDcyNTcyMjYsODAuMjcwNjYwNDUxMjY5MDgsNTguNzM3Mjg3NjI5ODg1NDEsNi4xMzU2MTEyMjUwNjE2MTU1LDE0OS41NjQwMjU0NjI2MTUsOS4wODM0NzgxODI4OTEzNSwyMi4xMjI1NjYwMzUyNzcxNjMsMTMyLjE3MDQ3MzgyMTIyMjM3LDk2NC44MDQ1NTg5NTMzNjcyLDE0Ljk2MDU1NDE1MzIwNDcwMiwxOC4wNzM4NDM3NzMyNTM2MjUsMzQ3LjgzNDQ2MzY3MDM1NzEsMjUzLjI3NzUzMTAxNTEyNzc1LDQ5LjM2Njg1NzcxMTE5Mzk1LDM0Ljc3NzE1NzM3NTY3ODc5LDI2Ni42NTkyMTE4NTA4MTIyLDY3OC41MDE2NjY2MTI3MzEsMTI1LjI5NjI4MTcyMjE2Mjg5LDkuNzg4MzYwNDQwMTYwMDc1LDEzNC45OTg2MTMwNjQ0MzQ3Miw3Ny42MzcwNDA1MDA1MDkzLDI2LjMwMzg4NDI4MjAzMzA5NiwxNjUuNDg1NjQzMjE0ODM1MTQsNjMuMzI1NDE0NTQwNDg0NjUsODIuNjY2OTExMDgxMTc3OTcsODEuODkwODkzNDY3OTA0NzMsNzQuNjMzMTc4MzcyMzgxNzQsNS4wNDgxOTU3NzE2MjkyMQorMzIsRnJpIDI1IEZlYiAxMSwwLjk0NTIxNzc2OTM4MDAyMzMsODQuODM3NTI2NTMxNDAwMjQsNTAuMjcyMDgzMDI4ODU2MzMsNDUuMDA2MjE1MDA0OTYwNiwyMDYuOTE4NTM3ODY4ODAxMiw0MS4zMjExMDE3NzQxMDU3MzUsNjE0LjM1MzY0NjYzNDc4NDUsODM3MC43Nzg0NjA2Mzc5ODYsMzE0Ljc5MTA4MzMyOTY1MDg2LDI0My4wNjEwMjQzMzMwNTQxOCwxMzcuNzYxNjI3MDExNzY2MywxMTAuODM1MTY3NTY5NjA0OTIsNTIuMDAzNjE0NjE1MjAwNzUsMTUuNDgzNDQ4MTQzMTYzMiwyMTQuNDQyMzAyNTg1Mjk5MjIsMTY2Ljk2NDk2NDU5Mjc5NTg3LDMyLjY3NTI3MDQ2NDkzMjc4LDEwMC4wMjE0NTU2MDU3MDM4OCw4Ni4yMDc1OTc2NTE5OTI1OSw2MDEuNTQ5NTY1NzMzMTM3NSw0MjYuOTA1OTg5MzU0MTIyMTQsMzYuMDMwMzk3MzYxNTY3OCwxMDIuNzU4OTMwMjM0MDYzMzksNTYuNTg1NDk1MDcyNTcyMjYsODAuMjcwNjYwNDUxMjY5MDgsNTguNzM3Mjg3NjI5ODg1NDEsNi4xMzU2MTEyMjUwNjE2MTU1LDE0OS41NjQwMjU0NjI2MTUsOS4wODM0NzgxODI4OTEzNSwyMi4xMjI1NjYwMzUyNzcxNjMsMTMyLjE3MDQ3MzgyMTIyMjM3LDk2NC44MDQ1NTg5NTMzNjcyLDE0Ljk2MDU1NDE1MzIwNDcwMiwxOC4wNzM4NDM3NzMyNTM2MjUsMzQ3LjgzNDQ2MzY3MDM1NzEsMjUzLjI3NzUzMTAxNTEyNzc1LDQ5LjM2Njg1NzcxMTE5Mzk1LDM0Ljc3NzE1NzM3NTY3ODc5LDI2Ni42NTkyMTE4NTA4MTIyLDY3OC41MDE2NjY2MTI3MzEsMTI1LjI5NjI4MTcyMjE2Mjg5LDkuNzg4MzYwNDQwMTYwMDc1LDEzNC45OTg2MTMwNjQ0MzQ3Miw3Ny42MzcwNDA1MDA1MDkzLDI2LjMwMzg4NDI4MjAzMzA5NiwxNjUuNDg1NjQzMjE0ODM1MTQsNjMuMzI1NDE0NTQwNDg0NjUsODIuNjY2OTExMDgxMTc3OTcsODEuODkwODkzNDY3OTA0NzMsNzQuNjMzMTc4MzcyMzgxNzQsNS4wNDgxOTU3NzE2MjkyMQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTRUlSU3RhdGVzT25seV9SS19SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9odW1hbi9JbmNpZGVuY2VfMC5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNFSVJTdGF0ZXNPbmx5X1JLX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL2h1bWFuL0luY2lkZW5jZV8wLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMTJlOGI4Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTRUlSU3RhdGVzT25seV9SS19SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9odW1hbi9JbmNpZGVuY2VfMC5jc3YKQEAgLTAsMCArMSwzMyBAQAoraXRlcmF0aW9uLHRpbWUsc3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vbm9kZS90cmFuc3BvcnQvcGlwZS9VU0EKKzEsVHVlIDI1IEphbiAxMSwwLjAKKzIsV2VkIDI2IEphbiAxMSwwLjAKKzMsVGh1IDI3IEphbiAxMSwwLjAKKzQsRnJpIDI4IEphbiAxMSwwLjAKKzUsU2F0IDI5IEphbiAxMSwwLjAKKzYsU3VuIDMwIEphbiAxMSwwLjAKKzcsTW9uIDMxIEphbiAxMSwwLjAKKzgsVHVlIDEgRmViIDExLDAuMAorOSxXZWQgMiBGZWIgMTEsMC4wCisxMCxUaHUgMyBGZWIgMTEsMC4wCisxMSxGcmkgNCBGZWIgMTEsMC4wCisxMixTYXQgNSBGZWIgMTEsMC4wCisxMyxTdW4gNiBGZWIgMTEsMC4wCisxNCxNb24gNyBGZWIgMTEsMC4wCisxNSxUdWUgOCBGZWIgMTEsMC4wCisxNixXZWQgOSBGZWIgMTEsMC4wCisxNyxUaHUgMTAgRmViIDExLDAuMAorMTgsRnJpIDExIEZlYiAxMSwwLjAKKzE5LFNhdCAxMiBGZWIgMTEsMC4wCisyMCxTdW4gMTMgRmViIDExLDAuMAorMjEsTW9uIDE0IEZlYiAxMSwwLjAKKzIyLFR1ZSAxNSBGZWIgMTEsMC4wCisyMyxXZWQgMTYgRmViIDExLDAuMAorMjQsVGh1IDE3IEZlYiAxMSwwLjAKKzI1LEZyaSAxOCBGZWIgMTEsMC4wCisyNixTYXQgMTkgRmViIDExLDAuMAorMjcsU3VuIDIwIEZlYiAxMSwwLjAKKzI4LE1vbiAyMSBGZWIgMTEsMC4wCisyOSxUdWUgMjIgRmViIDExLDAuMAorMzAsV2VkIDIzIEZlYiAxMSwwLjAKKzMxLFRodSAyNCBGZWIgMTEsMC4wCiszMixGcmkgMjUgRmViIDExLDAuMApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTRUlSU3RhdGVzT25seV9SS19SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9odW1hbi9JbmNpZGVuY2VfMS5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNFSVJTdGF0ZXNPbmx5X1JLX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL2h1bWFuL0luY2lkZW5jZV8xLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40N2E4NDNmCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTRUlSU3RhdGVzT25seV9SS19SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9odW1hbi9JbmNpZGVuY2VfMS5jc3YKQEAgLTAsMCArMSwzMyBAQAoraXRlcmF0aW9uLHRpbWUsVVMtQUssVVMtQUwsVVMtQVIsVVMtQVosVVMtQ0EsVVMtQ08sVVMtQ1QsVVMtREMsVVMtREUsVVMtRkwsVVMtR0EsVVMtSEksVVMtSUEsVVMtSUQsVVMtSUwsVVMtSU4sVVMtS1MsVVMtS1ksVVMtTEEsVVMtTUEsVVMtTUQsVVMtTUUsVVMtTUksVVMtTU4sVVMtTU8sVVMtTVMsVVMtTVQsVVMtTkMsVVMtTkQsVVMtTkUsVVMtTkgsVVMtTkosVVMtTk0sVVMtTlYsVVMtTlksVVMtT0gsVVMtT0ssVVMtT1IsVVMtUEEsVVMtUkksVVMtU0MsVVMtU0QsVVMtVE4sVVMtVFgsVVMtVVQsVVMtVkEsVVMtVlQsVVMtV0EsVVMtV0ksVVMtV1YsVVMtV1kKKzEsVHVlIDI1IEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMixXZWQgMjYgSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCiszLFRodSAyNyBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzQsRnJpIDI4IEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorNSxTYXQgMjkgSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCis2LFN1biAzMCBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzcsTW9uIDMxIEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorOCxUdWUgMSBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzksV2VkIDIgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxMCxUaHUgMyBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzExLEZyaSA0IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTIsU2F0IDUgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxMyxTdW4gNiBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzE0LE1vbiA3IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTUsVHVlIDggRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxNixXZWQgOSBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzE3LFRodSAxMCBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzE4LEZyaSAxMSBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzE5LFNhdCAxMiBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzIwLFN1biAxMyBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzIxLE1vbiAxNCBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzIyLFR1ZSAxNSBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzIzLFdlZCAxNiBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzI0LFRodSAxNyBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzI1LEZyaSAxOCBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzI2LFNhdCAxOSBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzI3LFN1biAyMCBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzI4LE1vbiAyMSBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzI5LFR1ZSAyMiBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzMwLFdlZCAyMyBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzMxLFRodSAyNCBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzMyLEZyaSAyNSBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0VJUlN0YXRlc09ubHlfUktfUmVmZXJlbmNlL2F1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwvcnVucGFyYW1ldGVycy5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNFSVJTdGF0ZXNPbmx5X1JLX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL3J1bnBhcmFtZXRlcnMuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA2ODU1YjUKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNFSVJTdGF0ZXNPbmx5X1JLX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL3J1bnBhcmFtZXRlcnMuY3N2CkBAIC0wLDAgKzEsMiBAQAorcG9wdWxhdGlvbklkZW50aWZpZXIsbmFtZSx0YXJnZXRJU09LZXksYmlydGhSYXRlLGRlYXRoUmF0ZSx0aW1lUGVyaW9kCitodW1hbixhdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsLCwwLjAsMC4wLDg2NDAwMDAwClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTRUlSX0ZEX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9EaXNlYXNlIERlYXRoc18wLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0VJUl9GRF9SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vRGlzZWFzZSBEZWF0aHNfMC5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmIxMzkwYwotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0VJUl9GRF9SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vRGlzZWFzZSBEZWF0aHNfMC5jc3YKQEAgLTAsMCArMSwzMyBAQAoraXRlcmF0aW9uLHRpbWUsc3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vbm9kZS90cmFuc3BvcnQvcGlwZS9QSEwKKzEsVHVlIDI1IEphbiAxMSwwLjAKKzIsV2VkIDI2IEphbiAxMSwwLjAKKzMsVGh1IDI3IEphbiAxMSwwLjAKKzQsRnJpIDI4IEphbiAxMSwwLjAKKzUsU2F0IDI5IEphbiAxMSwwLjAKKzYsU3VuIDMwIEphbiAxMSwwLjAKKzcsTW9uIDMxIEphbiAxMSwwLjAKKzgsVHVlIDEgRmViIDExLDAuMAorOSxXZWQgMiBGZWIgMTEsMC4wCisxMCxUaHUgMyBGZWIgMTEsMC4wCisxMSxGcmkgNCBGZWIgMTEsMC4wCisxMixTYXQgNSBGZWIgMTEsMC4wCisxMyxTdW4gNiBGZWIgMTEsMC4wCisxNCxNb24gNyBGZWIgMTEsMC4wCisxNSxUdWUgOCBGZWIgMTEsMC4wCisxNixXZWQgOSBGZWIgMTEsMC4wCisxNyxUaHUgMTAgRmViIDExLDAuMAorMTgsRnJpIDExIEZlYiAxMSwwLjAKKzE5LFNhdCAxMiBGZWIgMTEsMC4wCisyMCxTdW4gMTMgRmViIDExLDAuMAorMjEsTW9uIDE0IEZlYiAxMSwwLjAKKzIyLFR1ZSAxNSBGZWIgMTEsMC4wCisyMyxXZWQgMTYgRmViIDExLDAuMAorMjQsVGh1IDE3IEZlYiAxMSwwLjAKKzI1LEZyaSAxOCBGZWIgMTEsMC4wCisyNixTYXQgMTkgRmViIDExLDAuMAorMjcsU3VuIDIwIEZlYiAxMSwwLjAKKzI4LE1vbiAyMSBGZWIgMTEsMC4wCisyOSxUdWUgMjIgRmViIDExLDAuMAorMzAsV2VkIDIzIEZlYiAxMSwwLjAKKzMxLFRodSAyNCBGZWIgMTEsMC4wCiszMixGcmkgMjUgRmViIDExLDAuMApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTRUlSX0ZEX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9EaXNlYXNlIERlYXRoc18xLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0VJUl9GRF9SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vRGlzZWFzZSBEZWF0aHNfMS5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTRjMDIzMgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0VJUl9GRF9SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vRGlzZWFzZSBEZWF0aHNfMS5jc3YKQEAgLTAsMCArMSwzMyBAQAoraXRlcmF0aW9uLHRpbWUsc3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vbm9kZS90cmFuc3BvcnQvcGlwZS9QSC0xMSxzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9ub2RlL3RyYW5zcG9ydC9waXBlL1BILTMsc3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vbm9kZS90cmFuc3BvcnQvcGlwZS9QSC03LHN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL25vZGUvdHJhbnNwb3J0L3BpcGUvUEgtTkNSCisxLFR1ZSAyNSBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wCisyLFdlZCAyNiBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wCiszLFRodSAyNyBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wCis0LEZyaSAyOCBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wCis1LFNhdCAyOSBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wCis2LFN1biAzMCBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wCis3LE1vbiAzMSBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wCis4LFR1ZSAxIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAKKzksV2VkIDIgRmViIDExLDAuMCwwLjAsMC4wLDAuMAorMTAsVGh1IDMgRmViIDExLDAuMCwwLjAsMC4wLDAuMAorMTEsRnJpIDQgRmViIDExLDAuMCwwLjAsMC4wLDAuMAorMTIsU2F0IDUgRmViIDExLDAuMCwwLjAsMC4wLDAuMAorMTMsU3VuIDYgRmViIDExLDAuMCwwLjAsMC4wLDAuMAorMTQsTW9uIDcgRmViIDExLDAuMCwwLjAsMC4wLDAuMAorMTUsVHVlIDggRmViIDExLDAuMCwwLjAsMC4wLDAuMAorMTYsV2VkIDkgRmViIDExLDAuMCwwLjAsMC4wLDAuMAorMTcsVGh1IDEwIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAKKzE4LEZyaSAxMSBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wCisxOSxTYXQgMTIgRmViIDExLDAuMCwwLjAsMC4wLDAuMAorMjAsU3VuIDEzIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAKKzIxLE1vbiAxNCBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wCisyMixUdWUgMTUgRmViIDExLDAuMCwwLjAsMC4wLDAuMAorMjMsV2VkIDE2IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAKKzI0LFRodSAxNyBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wCisyNSxGcmkgMTggRmViIDExLDAuMCwwLjAsMC4wLDAuMAorMjYsU2F0IDE5IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAKKzI3LFN1biAyMCBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wCisyOCxNb24gMjEgRmViIDExLDAuMCwwLjAsMC4wLDAuMAorMjksVHVlIDIyIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAKKzMwLFdlZCAyMyBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wCiszMSxUaHUgMjQgRmViIDExLDAuMCwwLjAsMC4wLDAuMAorMzIsRnJpIDI1IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0VJUl9GRF9SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vRGlzZWFzZSBEZWF0aHNfMi5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNFSVJfRkRfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL0Rpc2Vhc2UgRGVhdGhzXzIuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEzMGQ2ZTEKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNFSVJfRkRfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL0Rpc2Vhc2UgRGVhdGhzXzIuY3N2CkBAIC0wLDAgKzEsMzMgQEAKK2l0ZXJhdGlvbix0aW1lLFBILTEtRzY0MDAwMSxQSC0xLUc2NDAwMDIsUEgtMS1HNjQwMDAzLFBILTEtRzY0MDAwNCxQSC0xMC1HNjUwMDAxLFBILTEwLUc2NTAwMDIsUEgtMTAtRzY1MDAwMyxQSC0xMC1HNjUwMDA0LFBILTEwLUc2NTAwMDUsUEgtMTAtRzY1MDAwNixQSC0xMC1HNjUwMDA3LFBILTExLUc2NjAwMDEsUEgtMTEtRzY2MDAwMixQSC0xMS1HNjYwMDAzLFBILTExLUc2NjAwMDQsUEgtMTEtRzY2MDAwNSxQSC0xMi1HNjcwMDAxLFBILTEyLUc2NzAwMDIsUEgtMTItRzY3MDAwMyxQSC0xMi1HNjcwMDA0LFBILTEyLUc2NzAwMDUsUEgtMi1HNjgwMDAxLFBILTItRzY4MDAwMixQSC0yLUc2ODAwMDMsUEgtMi1HNjgwMDA0LFBILTItRzY4MDAwNSxQSC0zLUc2OTAwMDEsUEgtMy1HNjkwMDAyLFBILTMtRzY5MDAwMyxQSC0zLUc2OTAwMDQsUEgtMy1HNjkwMDA1LFBILTMtRzY5MDAwNixQSC00LUc3MDAwMDEsUEgtNC1HNzAwMDAyLFBILTQtRzcwMDAwMyxQSC00LUc3MDAwMDQsUEgtNC1HNzAwMDA1LFBILTQtRzcwMDAwNixQSC00LUc3MDAwMDcsUEgtNC1HNzAwMDA4LFBILTQtRzcwMDAwOSxQSC00LUc3MDAwMTAsUEgtNC1HNzAwMDExLFBILTUtRzcxMDAwMSxQSC01LUc3MTAwMDIsUEgtNS1HNzEwMDAzLFBILTUtRzcxMDAwNCxQSC01LUc3MTAwMDUsUEgtNS1HNzEwMDA2LFBILTYtRzcyMDAwMSxQSC02LUc3MjAwMDIsUEgtNi1HNzIwMDAzLFBILTYtRzcyMDAwNCxQSC02LUc3MjAwMDUsUEgtNy1HNzMwMDAxLFBILTctRzczMDAwMixQSC03LUc3MzAwMDMsUEgtNy1HNzMwMDA0LFBILTgtRzc0MDAwMSxQSC04LUc3NDAwMDIsUEgtOC1HNzQwMDAzLFBILTgtRzc0MDAwNCxQSC04LUc3NDAwMDUsUEgtOS1HNzUwMDAxLFBILTktRzc1MDAwMixQSC05LUc3NTAwMDMsUEgtOS1HNzUwMDA0LFBILTktRzc1MDAwNSxQSC1DQVItRzIzMDAwMSxQSC1DQVItRzIzMDAwMixQSC1DQVItRzIzMDAwMyxQSC1DQVItRzIzMDAwNCxQSC1DQVItRzIzMDAwNSxQSC1OQ1ItRzUyMDAwMQorMSxUdWUgMjUgSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzIsV2VkIDI2IEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCiszLFRodSAyNyBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorNCxGcmkgMjggSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzUsU2F0IDI5IEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCis2LFN1biAzMCBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorNyxNb24gMzEgSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzgsVHVlIDEgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzksV2VkIDIgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzEwLFRodSAzIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxMSxGcmkgNCBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTIsU2F0IDUgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzEzLFN1biA2IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxNCxNb24gNyBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTUsVHVlIDggRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzE2LFdlZCA5IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxNyxUaHUgMTAgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzE4LEZyaSAxMSBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTksU2F0IDEyIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyMCxTdW4gMTMgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzIxLE1vbiAxNCBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjIsVHVlIDE1IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyMyxXZWQgMTYgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzI0LFRodSAxNyBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjUsRnJpIDE4IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyNixTYXQgMTkgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzI3LFN1biAyMCBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjgsTW9uIDIxIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyOSxUdWUgMjIgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzMwLFdlZCAyMyBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMzEsVGh1IDI0IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCiszMixGcmkgMjUgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0VJUl9GRF9SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vRV8wLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0VJUl9GRF9SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vRV8wLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNzM0ZTJkCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTRUlSX0ZEX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9FXzAuY3N2CkBAIC0wLDAgKzEsMzMgQEAKK2l0ZXJhdGlvbix0aW1lLHN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL25vZGUvdHJhbnNwb3J0L3BpcGUvUEhMCisxLFR1ZSAyNSBKYW4gMTEsMC4wCisyLFdlZCAyNiBKYW4gMTEsMC4wCiszLFRodSAyNyBKYW4gMTEsMC4wCis0LEZyaSAyOCBKYW4gMTEsMC4xMzAwODM0ODkxODc3NjYzNQorNSxTYXQgMjkgSmFuIDExLDAuMDUwNTI2MTQzNDQ3NjYxOTg2Cis2LFN1biAzMCBKYW4gMTEsNy43ODMyOTc1NzMzNzM5NzEKKzcsTW9uIDMxIEphbiAxMSw0LjQzNDA5MTI4MTk3ODM4Cis4LFR1ZSAxIEZlYiAxMSwzMDAuMTYyMTkxMzA2MDI2NTYKKzksV2VkIDIgRmViIDExLDIyMC4xNjU2MDUxMjE5OTg1NworMTAsVGh1IDMgRmViIDExLDk1NzcuMDY2NTQwNDA0NTkyCisxMSxGcmkgNCBGZWIgMTEsNzEzNy41NDY5MjY0OTQ0Mzk1CisxMixTYXQgNSBGZWIgMTEsNDI1OTAuNzU4OTEyNjQ3OTkKKzEzLFN1biA2IEZlYiAxMSw2ODc0LjQ5MjczNDIyNDAyNgorMTQsTW9uIDcgRmViIDExLDE3NTc3Ljc3MzM5ODE2NjU4CisxNSxUdWUgOCBGZWIgMTEsMjMxMS40MDUwMDgxNjA4MjkzCisxNixXZWQgOSBGZWIgMTEsNjIxNS4wMzQxMzE2MDk5MjIKKzE3LFRodSAxMCBGZWIgMTEsMTg1NS41MzcxOTI1NzA2MjY4CisxOCxGcmkgMTEgRmViIDExLDQxNjcuMDcwMzU0NjM1MTUyCisxOSxTYXQgMTIgRmViIDExLDIwNjkuNTM0MTMwMjY3MjMxNAorMjAsU3VuIDEzIEZlYiAxMSwyNjI3LjczMjY5NDExMjk4MworMjEsTW9uIDE0IEZlYiAxMSwxMDY5LjYwNTg3ODYyNzE2OQorMjIsVHVlIDE1IEZlYiAxMSwxMjAxLjAwOTIwNjAyOTg0MDUKKzIzLFdlZCAxNiBGZWIgMTEsNjc5LjI5NzUzNjQ4MTc2NzcKKzI0LFRodSAxNyBGZWIgMTEsNzEwLjU2NzYxMTY2NDg4NjIKKzI1LEZyaSAxOCBGZWIgMTEsMzg3LjU1Njk1MzU3OTc0MzY2CisyNixTYXQgMTkgRmViIDExLDM5MS44NDY4Mjc4ODM0NDk4NgorMjcsU3VuIDIwIEZlYiAxMSwyMjAuNTM2NzkxMjEyNzkxMQorMjgsTW9uIDIxIEZlYiAxMSwyMjEuMjkyNTE5NDkyMTUxNDYKKzI5LFR1ZSAyMiBGZWIgMTEsMTE4LjI5MTkwNjE5ODY0MTI5CiszMCxXZWQgMjMgRmViIDExLDExNy4wNzE1NjI2NTg5MjE0NQorMzEsVGh1IDI0IEZlYiAxMSw2MC4yODgyMDY4ODQ0MDA0OQorMzIsRnJpIDI1IEZlYiAxMSw1OS4wNTcxNDYyNDkwNTkxMgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTRUlSX0ZEX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9FXzEuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTRUlSX0ZEX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9FXzEuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg2YzQ4ZWUKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNFSVJfRkRfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL0VfMS5jc3YKQEAgLTAsMCArMSwzMyBAQAoraXRlcmF0aW9uLHRpbWUsc3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vbm9kZS90cmFuc3BvcnQvcGlwZS9QSC0xMSxzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9ub2RlL3RyYW5zcG9ydC9waXBlL1BILTMsc3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vbm9kZS90cmFuc3BvcnQvcGlwZS9QSC03LHN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL25vZGUvdHJhbnNwb3J0L3BpcGUvUEgtTkNSCisxLFR1ZSAyNSBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wCisyLFdlZCAyNiBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wCiszLFRodSAyNyBKYW4gMTEsMC4wLDAuMCwwLjAsMC4xNzgwNzMxNTIxNTk4NTg1OAorNCxGcmkgMjggSmFuIDExLDAuMCwwLjAsMC4wLDAuMDUwNDg1MDY0NTE3Mzg3MTYKKzUsU2F0IDI5IEphbiAxMSw0LjYxNTU0MTU0NjkzNzYwNkUtNSwwLjAwMjg4MTc2NTMwNzk0NjQyOTcsMC4wMTE3MTI5MTI1NTMzNjI4MDQsNi40MzQxNTYxMTY5NTU3MzUKKzYsU3VuIDMwIEphbiAxMSwwLjAsMC4wMDEyMzc0NTE5NTg0OTgzMzY2LDAuMCwyLjkxNDc3NTk2Nzc2NDY5Cis3LE1vbiAzMSBKYW4gMTEsMC4wMDM5OTYyOTE5MzkyNjY4NzgsMC4yNzYzMjI0NDYwMDg3MDE2NSwxLjAxNDE1MjkwNDA0NTc5MSwxODEuMDE0NTAyNzIzODc1NTIKKzgsVHVlIDEgRmViIDExLDAuMCwwLjExMjk0NTgxMDk1MjYyOTczLDAuMCwxMDcuOTI3OTYxOTc3MTYxNDIKKzksV2VkIDIgRmViIDExLDAuMTk3MzY3MzMzNjI2ODUyMjQsMTQuMTM1NzM4ODU2NzA2NDg3LDUwLjA4Nzc0NjIyODA3ODEyNCw0NjU3LjY0MTAxNjIwMjc2NworMTAsVGh1IDMgRmViIDExLDAuMCw1LjkxNjI0NTYwMDQ5NzYwNSwwLjAsMjk4MS44OTMzMTU5MjkxMzkKKzExLEZyaSA0IEZlYiAxMSw3LjUzMjUxOTk5MTQ3ODMsNTUzLjAzMjkyMzQ2Mzg4MTcsMTkxMS42Njk3Mjk5MTMxMTI0LDM4NDgyLjkxNjE0MjcwODUwNgorMTIsU2F0IDUgRmViIDExLDAuMCwxNTAuMTI4MDIyNDEyMTM3MDYsMC4wLDUyNjguNTIyNTI2NTgwMTI3CisxMyxTdW4gNiBGZWIgMTEsMjUuMzY2MTIxMzE4OTY0MjEsMTExMC40MTc3Mjg1NTEwNzEsNjQzNi45NDg5ODE1OTY4NzgsMjAyNDIuNzM2MTkxNzI5MjIyCisxNCxNb24gNyBGZWIgMTEsMC4wLDQ4LjMwMTA1NTUwNDA0MDczLDkuMDk0OTQ3MDE3NzI5MjgyRS0xMywxMDk4LjcxMTA5NzU0MjQyOTMKKzE1LFR1ZSA4IEZlYiAxMSwxNC4wMTE2ODExNzMwMjE3NSwyMTIuMDkzMzgwNzcyMTk2NDcsMzU1Mi44MTk1NzMyMDc1NDQ2LDU3OTQuMzYyODA4MTkwNjI5CisxNixXZWQgOSBGZWIgMTEsMC4wLDE3OS42MDk0MzA0NTEzODYxMiwwLjAsMjM3Ny4wNzU5NjU4NTk1ODEKKzE3LFRodSAxMCBGZWIgMTEsMTIuMzA5MzY4NDYwNTEwMTY4LDIzNS41MjM3ODk4ODIzMjk2OCwzMDY2Ljg4OTc2MTE4NDkwMyw0MDcyLjI4NTM5MjA0MjQ4NworMTgsRnJpIDExIEZlYiAxMSwwLjAsNjguMzQxNDE0MTUyNDE5MSwyMDI5LjA4Njg1ODc4OTUzNCwxMzI2LjkxODIwNjIxNjU0MjgKKzE5LFNhdCAxMiBGZWIgMTEsMTIuMDUyMDY1NTA1MTMzODg3LDEwNC45MTQxNDY0MTQzNDM2LDIxMjkuMDk1Mzc1MDEwOTIwNiwyMzU4LjQwNDA5MzgxNjA3NTYKKzIwLFN1biAxMyBGZWIgMTEsMC4wLDY3LjIzNjMyMDkzODk2MjA3LDQyMi42MDI4OTY1MDM0NTM0LDExODEuNzY1OTE4ODA5NTY0CisyMSxNb24gMTQgRmViIDExLDExLjEwMTA2ODI1MDE0NjY1OSw3Ni42MjExOTEwMDk4MDIwOCw1MDUuNzc5NTA3OTU5MzAwNiwxNDY3LjU0NDM5MTMwMTQyNgorMjIsVHVlIDE1IEZlYiAxMSw3Ljk0NzU2MDk0NjU5NDQ0MiwzMC45MzE1MDAyMjU1MDcxMzYsNTM1LjQ3NjQ4NDIzODE5ODMsNTg0LjE5NDY1MTExOTI2NDEKKzIzLFdlZCAxNiBGZWIgMTEsOC4wNDE1NzY2OTIwNjMyMjIsMzUuMjMwNDAxODY2NjEyODcsNTQyLjMwNDE3NjI0MTMwNzgsNjk5LjA4NDkwNjkyMDg5NTMKKzI0LFRodSAxNyBGZWIgMTEsMy44NDIzODgzMDE2OTc4OTU3LDIyLjE2NzQ4ODQ4MDc3NDEzMiwyMTkuMDU5MzY5ODMwNjYxNTgsNDEwLjY1OTU4OTg0MjE4MTczCisyNSxGcmkgMTggRmViIDExLDMuOTY2MDUyNDYyNDk4NjQ1LDIzLjQ1MDYwMjA0NjcwMjc1MiwyMzYuNTI2OTQyNjg3MjYyNSw0NDYuMDkwNzMxNjc0NzIwNQorMjYsU2F0IDE5IEZlYiAxMSwyLjU1Nzg3NTczNTAyMjU2NDcsMTEuMDYxMzI4NTMyMTM4NjA4LDE1OC4yODE3NTUyOTIzNjcyLDIwMy44MjY0OTE5ODcyODIxCisyNyxTdW4gMjAgRmViIDExLDIuNjA5MTc2NzI2ODMzMTU2NSwxMi4yMDYwMjk0ODYzNjU5NiwxNjMuMzExMzUyMDU5NzczOSwyMzAuNTA2NzQwNTg0MTM5NjQKKzI4LE1vbiAyMSBGZWIgMTEsMS4zODk3NjgxMDYwMDg3OTU0LDYuMzI3MjQ3MzU1MjI3NjI5LDc5Ljc3NTU0Njc1NTMxNDc0LDExMS43MzgzNjY3OTA2NTE5CisyOSxUdWUgMjIgRmViIDExLDEuNDQyMjM5NTM4NDY5OTA4LDYuODA0Mzg1NTAxNjIxNzksODYuNTU2NTExMDY1Mjg0NjEsMTIxLjYxMjQ1Nzk4Mjc0NDA4CiszMCxXZWQgMjMgRmViIDExLDAuODQzNDU3NjcxNDkyODMwNiwzLjAzNTQ5NDYwMTY1MjM0MDgsNDYuNjI3MjQzMDUyMDU4MjI2LDUwLjE0NDYwNTg5MzQ3NzY0NgorMzEsVGh1IDI0IEZlYiAxMSwwLjg3NjM4NjAzNTI4ODAxNjIsMy4yNDY4NzE1MTk5NTYyMjU3LDUwLjA0NTQ4NDkzMDQzNTc3LDU1LjU4NTE2NTAxNDIxMzczCiszMixGcmkgMjUgRmViIDExLDAuNDcwNjc5MDMwNzk5NzU2NSwxLjMzMjI5MzY5MzYwMDQ5NywyMy44ODU2MDEwMTc1MTgwNTIsMjAuNjIwNjcxNTc4MzkxOTYzCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNFSVJfRkRfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL0VfMi5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNFSVJfRkRfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL0VfMi5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTJkYjAwZAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0VJUl9GRF9SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vRV8yLmNzdgpAQCAtMCwwICsxLDMzIEBACitpdGVyYXRpb24sdGltZSxQSC0xLUc2NDAwMDEsUEgtMS1HNjQwMDAyLFBILTEtRzY0MDAwMyxQSC0xLUc2NDAwMDQsUEgtMTAtRzY1MDAwMSxQSC0xMC1HNjUwMDAyLFBILTEwLUc2NTAwMDMsUEgtMTAtRzY1MDAwNCxQSC0xMC1HNjUwMDA1LFBILTEwLUc2NTAwMDYsUEgtMTAtRzY1MDAwNyxQSC0xMS1HNjYwMDAxLFBILTExLUc2NjAwMDIsUEgtMTEtRzY2MDAwMyxQSC0xMS1HNjYwMDA0LFBILTExLUc2NjAwMDUsUEgtMTItRzY3MDAwMSxQSC0xMi1HNjcwMDAyLFBILTEyLUc2NzAwMDMsUEgtMTItRzY3MDAwNCxQSC0xMi1HNjcwMDA1LFBILTItRzY4MDAwMSxQSC0yLUc2ODAwMDIsUEgtMi1HNjgwMDAzLFBILTItRzY4MDAwNCxQSC0yLUc2ODAwMDUsUEgtMy1HNjkwMDAxLFBILTMtRzY5MDAwMixQSC0zLUc2OTAwMDMsUEgtMy1HNjkwMDA0LFBILTMtRzY5MDAwNSxQSC0zLUc2OTAwMDYsUEgtNC1HNzAwMDAxLFBILTQtRzcwMDAwMixQSC00LUc3MDAwMDMsUEgtNC1HNzAwMDA0LFBILTQtRzcwMDAwNSxQSC00LUc3MDAwMDYsUEgtNC1HNzAwMDA3LFBILTQtRzcwMDAwOCxQSC00LUc3MDAwMDksUEgtNC1HNzAwMDEwLFBILTQtRzcwMDAxMSxQSC01LUc3MTAwMDEsUEgtNS1HNzEwMDAyLFBILTUtRzcxMDAwMyxQSC01LUc3MTAwMDQsUEgtNS1HNzEwMDA1LFBILTUtRzcxMDAwNixQSC02LUc3MjAwMDEsUEgtNi1HNzIwMDAyLFBILTYtRzcyMDAwMyxQSC02LUc3MjAwMDQsUEgtNi1HNzIwMDA1LFBILTctRzczMDAwMSxQSC03LUc3MzAwMDIsUEgtNy1HNzMwMDAzLFBILTctRzczMDAwNCxQSC04LUc3NDAwMDEsUEgtOC1HNzQwMDAyLFBILTgtRzc0MDAwMyxQSC04LUc3NDAwMDQsUEgtOC1HNzQwMDA1LFBILTktRzc1MDAwMSxQSC05LUc3NTAwMDIsUEgtOS1HNzUwMDAzLFBILTktRzc1MDAwNCxQSC05LUc3NTAwMDUsUEgtQ0FSLUcyMzAwMDEsUEgtQ0FSLUcyMzAwMDIsUEgtQ0FSLUcyMzAwMDMsUEgtQ0FSLUcyMzAwMDQsUEgtQ0FSLUcyMzAwMDUsUEgtTkNSLUc1MjAwMDEKKzEsVHVlIDI1IEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyLFdlZCAyNiBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMy4xMjk2NTU0NDkzNTQ3MDMzLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDEuNDk2MjIxMTI1NjM3NTg0NiwxLjIzMjI5MTgxNzkyNjgxODUsMC4wLDAuMCwwLjAsMC4wLDAuMCwzLjM4NzU1Mzk5MjI4NTQ4ODUsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDQzLjgyOTEyOTM1NzU0MTU4CiszLFRodSAyNyBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMy43NDkyMjU4MzkxNzcxMTYzLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDEuNzkyNDI0NTg3MDczODk2MiwxLjQ3NjI0NTk4NDUwMDIwODUsMC4wLDAuMCwwLjAsMC4wLDAuMCw0LjA1ODE3ODM2ODQ3MTAwNSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsNTIuNDE2NzMyMzYzMDU4OTkKKzQsRnJpIDI4IEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwxMDIuNTI1OTU1ODU4MjU5MzIsMC4wNDM4MDQwOTUzMzAwNDU4OCwyLjk1NzYwOTk3MTc0ODA4OTcsMC4wLDAuMCwwLjUxOTA3Mjc4NDA5NTAwNTYsMC4wNzc0MDUyODUxMzQyMjYxMiw1MC4xOTg3MjkwMjgzNTE1NSw0Ni43NTQ0MTk1OTg1NjMwOSwwLjAsMC4wLDAuMCwwLjAsMi41MzIwNTA5MzM4NDYxODAzLDk3LjgwMDk1MDYyMzg1MTY2LDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCw4MjAuNzYwNzE2OTg4OTQxMworNSxTYXQgMjkgSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDI0MC4yMzUyODc3NDQ3OTg0LDAuMTA1MDQwNzk5Nzk4Mzc4MzMsNy4wOTEzMDAwNzg2NzMzMzIsMC4wLDAuMCwxLjI0NDcxNzMyNDIwMTcwNjksMC4xODU2MTUzNzI5OTY5MzAwNCwxMTcuNjg5MTQ5MTQ4MTE5NjcsMTA5LjkwMzg3ODMxMDA4MzcxLDAuMCwwLjAsMC4wLDAuMCw2LjA3MTc3MDYzODYyMzc4OCwyMjguNDM5MzQ4OTY1ODMyMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMTg4Ny45MTIxMzI3OTIyMDEyCis2LFN1biAzMCBKYW4gMTEsMC4wLDAuMCwwLjAsMy4xOTkyMjMwMjc2MTI4M0UtNCwwLjAsMC4wLDguNTEwNDc0NTUzMTAzMTg2RS05LDAuMCwwLjAsMC4wLDAuMCwyLjUwNzg0MDY5MjgyMDIxRS05LDMuMzE0NzY3NzY3NjcwNzEyRS01LDAuMCwyLjU2MDY3OTkyNjY1NDcwNEUtOSwwLjAsMC4wLDAuMCwwLjAsMi4yMjg4NjAyMjc3NjY1MDk1RS05LDIuMjU1ODg4NzIxMzM2Mjg5RS05LDAuMCwwLjAsMC4xMjczNDMyNTY0NTM1MjAzOCwwLjE0MDA3ODQ4NjM4MjMxNjksMC4zNzk3OTEzMjI3MDYzMzAxLDAuMDUyNjg3NTU3OTczMzEyODQsMjcyNi4xNTk1NTg5NzE0ODQsMy45MDI1NDk2NDk5ODE3MjU0LDE1Mi41MTc5MDYzNTg3ODAxOCwwLjA3MDQ0NDQzMjQzMzYyMDU0LDAuMDQ4MjIxNzI5ODA5MDM4MjE2LDIzLjc1MjU3NjgyMDYyMDM3LDQuMzAzNzM2OTg2MjAyODQzLDEzNjcuMjQ1Mjc2MDExNTYyLDEzNzQuNzY4MzQ4OTg5MTgsMC4wLDAuMCwwLjAsMC4wLDEzNy41MTUwNjc1NTY0MDEyOCwyMzY2LjA2NzYxMTY1ODEzOSwwLjAsMC4wLDAuMDExNzUxMjM5MzIwMzc2OTMyLDAuMDExNzY1Nzc4OTc2ODkwMzcsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wMDg0MTQwNjMxMjI4MzE1LDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMTY1MTYuNDM1NzI0OTc0NjM1Cis3LE1vbiAzMSBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wMDExNTEwNzAwNjg0MTgxMDQ2LDAuMCwwLjAsMS4wMjEyNTExNDA5NDcyNjcyRS04LDAuMCwwLjAsMC4wLDAuMCwzLjAwOTM5MTcyNDEzNDUzODVFLTksMi4zODgyNTY0MDQ3MTA3NTAyRS01LDAuMCwzLjA3Mjc5ODQ0NDI5Mjc5MzZFLTksMC4wLDAuMCwwLjAsMC4wLDIuNjc0NjE3MDY5MTM2OTQ0NkUtOSwyLjcwNzA1MTA3NzA0NTY1MzJFLTksMC4wLDAuMCwwLjQ1ODE3NjI5MTI3MDEyMzE2LDAuNTAzOTk3MTI3ODMxMzIxNywxLjM2NjQ3MjM2ODUyODI3MjMsMC4xODk1MzM1MTczMDU3Nzk3NSw4OTMyLjMwMTU4NjIwODc5OCwxMy42NTk1MDU0MjY5NzE5OTMsNTIyLjkzMTk5MTE0MDAwMTMsMC4yNTM0MjQyOTExNTEwNDQ5LDAuMTczNDY4NTQ4NDk5Njg4Niw4MC45Mzk3NjY2MTE2OTE3LDE0LjgxMTYyNTE1Mjg1NDk1OCw0NDkwLjM0NTcxNTkyNDE5NCw0NTQ2LjEyNzU2NDk1NTM2NCwwLjAsMC4wLDAuMCwwLjAsNDcyLjczMTE3MzU4MzQwNTQsNzY3Ny44NTM1ODM3MDk1NzYsMC4wLDAuMCwwLjA0MjI4MDU1MjE4NjU4MzI3LDAuMDQyMzMyODY1OTQzMzcxODMsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wMDYwNTM0OTg3ODkzMDE2OTQsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCw1MjQ4MS4wMDE1OTY5OTEwNDYKKzgsVHVlIDEgRmViIDExLDAuMCwwLjAsNC4wNDc4MDc4NTM5MTAzNDA0RS01LDAuMDQ3NzA0MTY4NzY2NDUxMDMsMy42NDk2MTY5MDI4Njg2MTRFLTExLDMuMjAwOTU1MzIzNjM0MTM0NEUtOSwyLjMyNTA4MzU4MjE0NDcxMzRFLTYsMC4wLDAuMCwzLjkzMjA1NzM4MDQxMjEyRS0xMSwwLjAsNi44OTk3OTkyODU2NDQ3OTdFLTcsMC4wMDM3ODI4MDQ1NTk5NjQ4NjYsMS4zMzQ0OTgxMjcxNzI2MDY3RS0xMSw3LjAzMTY1MTI3OTU2Njg1NUUtNywwLjAsOS41MDU3ODkxOTg4OTcyMzhFLTEwLDIuNDY4NjAyOTI4MDQ4NjI4NEUtOSw1LjU1MjA1NzY1NDA0MzY2NzVFLTksNi4wOTYyOTQ1OTk0ODkzOTRFLTcsNi4xNDgyNTQ4NTI5MjcxOTNFLTcsMC4wLDYuNDE3MzczNDg4NzQyODY3RS00LDExLjAxMzg0MTEwMzg5Mzc0MywxMi4yMTUzODk5MTEzNDQ4MzMsMjkuMTU2NzU2ODgwODc0NDQ3LDQuNzMyNTM1OTcwMTU1MTIxLDgwOTQwLjI0NzE0MDQ5NTI3LDI0Mi43ODMwMTI5NTEzNTU2LDY3NjAuNzg0NzA0MDU1ODM0LDcuMjUzNTQ5OTQwOTgyNzI0LDQuMzEzOTI4ODgzODUwMDksOTQ2LjY3ODYwNzUwNjg2OTgsMjA0LjU2NTQ3NzY3OTcxNDEsNDE2MjYuMjk2MDM3MzIyNjE2LDQ0MjU2LjU0NTE0NjA2MzU3LDAuMCwwLjAsMC4wLDAuMCw2MzM2Ljc3NTU5NTYwMTk0OCw2NDg3NS4xMTQyNjU5MzIyOSwwLjAsMS4wODg4MDQ1MTQyNTE5NzRFLTQsMS4wOTYyODMxMjY0ODcwMzg3LDEuMDk4MTU2MTg5NjI0NTIxMywwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjk2MDQyMTU3ODM2MjUwNzcsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMDg5NzI0NDI5NzAxNjAxNzQsMC4xMjQyNTk5NDgzMDQ2MTg4NCw1LjYwNzkzNjgwOTcxMTYxNkUtNCwwLjAwODczNTM4MjEzNDE3MjQ2OCw0MDYzNjkuMjY4OTQzOTM2MgorOSxXZWQgMiBGZWIgMTEsMS42Mjg2MDM0ODYwNDY0NjJFLTUsMC4wMDM3ODk5ODQyNTYyOTI2OTY0LDAuMDA1Njc5Njc5ODE4MDE1NDc5LDAuMzc5Nzc0ODMwNTc4MTg4NiwxLjE3MjIyNTM3NTg3NDI1NjdFLTksOC45NDU1OTYwOTI4MjkwMjRFLTgsMi40MTg2NDMzMzQ5MTIxNDlFLTUsMC4wLDAuMCwxLjE1Nzk5ODA4MTQ1NDMwMDRFLTksMy43NjQ0OTM0Mjc5NTYyM0UtMTQsNy4yNjMyOTI3MzI2NDU3NzRFLTYsMC4wMjc5MzQzNjcyODM1MTc1MSwzLjk1NjgzODUwNTIwMzMwMDZFLTEwLDcuMzc4MjE5MTE3ODU3MTY0RS02LDIuMjQ0Njg2MDczOTYwMTMwNkUtMTAsMi42ODYyNjkwMDIwNDQzNTlFLTgsNi45MzgxMjkzNTYxNjYzNzdFLTgsMS41NTUzMDY0OTU0OTA1OTkzRS03LDYuMzU0NjczMDA4MTcyNzY3RS02LDYuMzY5ODAxNTA4NTc0NzI5RS02LDAuMCwwLjAwNjM2MTMyNzE5MDIxOTc4Miw3MS41NjE4MTQyMTg5OTcxMSw3OS42OTQ2MjU4OTU0NTM3LDE3OC45NzY5MDc4MTAzNjMxMiwzMS4zMTQyNTczODQzODcxMjYsMzcyMTIyLjgyNzkxMTU1MTQsMTQ2MS44MDE3ODE3NjkzMjIsMzU5NTYuNjU4ODUzNzE5MzQ2LDUwLjk3OTYyMTcyNjk5ODc0NCwyOC41Mzk3ODY5MTkzMDMwMiw0ODExLjk1Mjc5MjU3MzkyODUsMTEyMy45NTUxNzkxNDQ4OTEyLDE5Mzc4NC4zNTYzODg2ODYxNCwyMTA0MzkuNTUzNzUzMDcyNCwwLjAsMC4wLDAuMCwwLjAsMzQxODYuMDUxMDkzNDk5MzE0LDI4ODE0NS4zODUyNTg3NjUyNSwwLjAsMC4wMDExMjIyMDA3MDc3MDg4MjQ1LDcuMzcxNTQ5MjM5MTUwOTIxLDcuMzg2MDAwMjk4MDkzMzcsMC4wLDAuMCwxLjMzNzY1MjM1NjAyNTc1MjNFLTcsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsNy4wOTM4NjUyMzg2OTQ4ODIsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwyLjY4ODcwNDU0MjYzNzEwMTNFLTExLDEuMTA2NDQwNzM5NDMwMzcyOUUtNCwwLjg4MzA2NjEzMjQxNjAwMTgsMS4yMTQ5MDgwODgyMTYxMjE4LDAuMDA2MjQ4MDc1MjczNTMwODM2LDAuMDg0NjIxNjQ3MjkxNDYxNCwxNzM5OTMwLjYxMjU1NDExNDMKKzEwLFRodSAzIEZlYiAxMSwyLjQ5MDE2Nzg5MjIyNDM4NDVFLTQsMC4wNTc5NDk2MjgxMzcxMjgyNywwLjA4NDcwNTkyMzE0MjU4NTQ5LDMuMzYyNTMwMzI0ODY3NjQ3NSwxLjMzNTIyMDA4NDE3NDgzMTlFLTgsOS45ODg4ODE5NzM1MDk3OUUtNywyLjMxODYwMzYyMTAxOTUwNDdFLTQsMC4wLDAuMCwxLjMwMzI1NDMyNjQ2MzcxNTJFLTgsNC44NTMyNzMwNDMyMTYyMDFFLTEzLDYuOTg0NTYwMTIzNDQyMTkxRS01LDAuMjUyODgyNzc1ODM5MTY0NCw0LjQ1NzU0OTg1Mzc1NjQyOEUtOSw3LjA4OTExNTI3NjE2MzU2M0UtNSwyLjg5MzkwMTgyODE1MzI2ODZFLTksMy4wMDQ2ODY0MzA5NDg4NDZFLTcsNy43NTQwNjExMjc1MjU4NzFFLTcsMS43MzczMzI0NTk5NTQ3MzlFLTYsNi4wOTUxODM1NzEwMjI5OTNFLTUsNi4wOTk4NDkwMTkyNDEwOThFLTUsMC4wLDAuMDYzMzc3ODk4NDExNzI2Niw1NDIuMTY0ODE1MjQ5NzA4LDYwNS45NzIyNTcxNDY0NTc3LDEyODQuMTMzMzE2MzQzOTExNywyNDEuMTUxNTU4MjcxODEzODUsMTg2ODYxOC43Mjk2NzkyMTM0LDEwNDAzLjQwMTgxMTY0NTY3LDIyMzkwMy40MTE3OTkyNTA1OCw0MTIuODYzNzQyNzUzMDkzMywyMTkuNzk3MzY1MjQwMTk1OSwyODMyMy43NzQzOTU3NjA2NSw3MzI5LjYyNTY1NDYyMTgyNjUsOTk3MDEyLjUzMDM0NTA0MjEsMTExOTk2NS42MDU1NjE1ODksMC4wLDAuMCwwLjAsMC4wLDIxNTgxMy42MTQ4MTE3OTc0MiwxMzUzMjA1LjQwMDI2NTI3MTgsMC4wLDAuMDExNDA5MDkzNjA3Mzg3MzIsNTcuNTUyMjUyNTgwNTYxNDY1LDU3LjY3ODEyODcwOTA4Mzk5LDAuMCwwLjAsMi4wNDUyOTgwNTAyODc2ODM4RS02LDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDY0LjIyMjYyNjU2NzAyMDMxLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMy40NjYzNDA4MzExNTg3ODdFLTEwLDAuMDAxNjkxNzcwNDAyMTgzODg4LDguNzY0MTU1NDQ3NTU2NTg4LDEyLjAxNDMzODc0OTA2Mzc1NSwwLjA2NTkyMDYyNzkwMDg1NDUzLDAuODMyNTk0MzEyNzAwMjk5NSw3Njk0MzI4LjYxNDc2NzAyMgorMTEsRnJpIDQgRmViIDExLDAuMTQwNzkxMjQwMDI1MzAzNzQsMTAuNzc0NDc4MDMzNjI0ODk1LDE1LjI1Mzg5MjIzMjc5MjQwNCwxOTUuMTI0MTYxNzA2MDk1NzIsMy42MzI3MTEzMjU2NjE5MUUtNiwxLjcyNDA3NzE0OTA0OTQwNjhFLTQsMC4wMTY4MDE1MDkyNTkwODkzOCwwLjAsMS40NzE5NDExNDA1MjAxMjNFLTExLDIuNzk4OTA5NDMzMjk3NDQ2RS02LDguMDg3NDE3MjAyMzYwNzk4RS0xMCwwLjAwNTIyMzEyNjg5MjgxNDgyOSwxMC44OTk1NjA4NzQzNzM2NzEsOS43MTcxMTMxODI0MjMyNDhFLTcsMC4wMDUyNTY5MzQwMDYxNjE0NzcsMi40NzAzNTgwODUyNzI3NzNFLTYsNS40NDUyOTY2ODQ2NDg1NzhFLTUsMS4zNzIzNjQ2MjYxMTk1MjUxRS00LDMuMDMwNzAwMzUzNDI1NDA2NEUtNCwwLjAwNDQ0NjY3MDQyNjI2ODM5OSwwLjAwNDM3NjQxNzA5ODM0ODE4OTUsMC4wLDQuNDY4MTMwMTkzMzA1OTQwNSwxOTI5OC40MjMwMzQ5OTg0NTcsMjE1NTguMTQ5OTgxODcwMTUsMzM3NTkuMTExNDYzMDcxNjgsOTAyMy40OTQ0NjI1MDE1NzIsMjUyMzk1Ny44NzQ1MTQ1OTUsMzAzMzExLjExMzM5NzYxOTU3LDE4Mzc3OTIuNjI0MDgxMjU0LDE4NDkyLjQ2NTM5MzIxMTk4Nyw4Mjk5LjA4NzcyOTMzOTYxMywxNjEwNTYuMzAwMDMyMzEyNSwxNzc0MTUuODA3MTQ4NzI4OCwxNTQyMTgxLjQ0MjQzOTkwNTQsMjA4NDQ1Mi42MTczNDQ1MTgsMC4wLDAuMCwwLjAsMC4wLDE1OTUyMDAuNDMzNzc3MTU1OCwxMzQ1NTU1LjYwMzkxNDAzNCwwLjAsMC44NzUxNzg0MzIxMjc3NTk4LDIyMTYuOTc4ODgyMzQ4NzM4NCwyMjI3LjAwNjAyMjAwOTc3MTYsMC4wLDAuMCw0LjI3MjM1ODAxMTI5ODI5NUUtNCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwyNzY4Ljc2NjE1NTU1NDEyNjcsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDEuNDcyNTI5MDQwMjYxMDUwN0UtMTEsMy4wODk2MTEzNzA2MzAwMjRFLTcsMC40OTQ4MTc4OTEwNzI5NTM5Myw2MDUuMjUwOTMzODk4ODUyMyw4MTUuMzE5NzE3Mzg1ODA2MSw1Ljc0ODA3ODMzNTczMzMsNTUuNDEzNzc2OTg2MjQyODIsNjQyODY5Ni44NTY5Mjg3MzIKKzEyLFNhdCA1IEZlYiAxMSwyNS4zNzU1NjIyMTkyNTQ5NzQsMTExMC44MjkwMDk1MDQ2NzYsMTU1My43Nzc0MDU1NzE3MzY0LDkxMjQuMjAzMTU1Mzg0MTk1LDUuNDE0MjgyNDQ5OTQ0MjU4RS00LDAuMDE3ODcxNDk3MzAwODYzOTE3LDAuOTM5ODg4Njc0MjAyNjE3NiwwLjAsNy40NzkzODczODQwODUzNTZFLTksMy42NjgwMjU0ODA3OTU2Mjk3RS00LDIuNzUzNDQ0NzczNTc2NjE5RS03LDAuMzA2MzM5NzczMTg1MzU3NCwzMzcuMTk5OTUwMDc3OTEwOCwxLjI2ODU0MDc2NTM5MjUzNUUtNCwwLjMwNDU2MjcyOTA5MTM1NjMsNS4wMzgzMjk4MTg4NDI4NTdFLTQsMC4wMDU5NjYwNjM0NjcyODI2MDMsMC4wMTQ2NDMxODIwNzYwNjU4MTgsMC4wMzE4MTAzMTk1NzIzOTc0MywwLjI1MTgyNjI1MjQ4MjI0ODUsMC4yNDE0NDc2MjQ0ODkwMTk5NiwwLjAsMjUzLjI3NDUzNTMwODU2MzIzLDQ0MzUwNy40NTAyMDMzMzE1LDI3MDAxOS44NzgxNDc0OTAyNiwxMTk0MzAuNzc3NzEzMDExMTIsMTk1OTEzLjU5MjQwNTQzMDE2LDE2NzM4NDAuNDA3NjA4Mzg0NSwxNTg1NTAzLjQ3NjQ5MTQzNDMsMTI5MzUxOS4wMTcyNDI1OTA3LDUwMjQxOC4xMTc4Nzc2Mjc1LDE5NDIxMS4zMzY0NTUxMTU4MiwxMTAxOTYuMTk2NzEyNTA5MDksMTcxNjcxMC40NjY5MjEyMzI5LDEwMjI3NDUuMTI1OTMyODczOCwxMzgyMzY4Ljk1ODY0NDg5MDIsMC4wLDAuMCwwLjAsMC4wLDEwODQ5MTQuODkxMjEwOTIzLDg5MjM0Ni42NDQ2MzE4NDExLDAuMCw1Mi40NzcwMjk2Nzc4NzUzMSw1NTY1Ny40NzUwOTI3MzM5MzQsNTg2MTMuOTY0NDgwMzExMDUsMC4wLDAuMCwwLjA0OTIxNzI3ODM0MDA5MTIxNSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCw4NDc0My40NDI2ODY0NTg5OSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsNy40ODM5MzExMjY1NjE3NDRFLTksNi42NjUwODM3MDY5NzQzNDJFLTUsNjkuNjkyNzE1MTg5MzE1NzIsMzA4NzguMTY0MTYzNzYxMDE2LDM5MDAwLjE0MzYzOTgzNDg5Niw0MDEuNjE2ODYzODM3NzU5NSwyODc2Ljc4MjU2NzA1NDEzMzMsNDI2NDUwMC4xOTQ0ODMwNTIKKzEzLFN1biA2IEZlYiAxMSwyMDkwLjM2NTUxMDA5MDk4OCw1MzE4NC41Njc1NDQ1MDkwMSw3MjMwMS41MjYyMzg3ODI5NCwyMjQwMTguMzAyNzU2MTc2MzMsMC4wNDEwMzAxNTU0OTAzNjM1MjYsMC45Nzg3OTI3NzIwNTk4ODcsMzIuODkwNjMyODg3OTExOTUsMC4wLDEuMTYwNDMxMDc1ODQ4NDE3N0UtNiwwLjAyNTk3NTQzODI0NjM3NTYyOCwzLjU3MDYxODAzMjM1MzI0NjZFLTUsMTEuMzgxMzUxNDU1ODIzNDU4LDc3OTQuOTA3NTk0NTc2MDg1LDAuMDA4ODIxODk2NjczMTMzNzkxLDExLjE0ODIxMDk3NjEwNTg4NywwLjA0NDg5MTMyODMzNTU2MzE0LDAuMzQ4ODk5MjAwMTg0NjE0MiwwLjgzMDQzMjIxODE3ODk4MTksMS43NjkxNjE4NTA0MjkwNzExLDguOTgzNzAyNTc4MjczODIxLDguMzE5NDg1NzY5Nzg1MjU4LDAuMCw4MDQ3LjY2NDc1MjA5MzE2NiwxMDg5NTkzLjU0MzUyMzg4NSwyMTY0NzUuNDIwNjAyNjgwNjUsNzkxOTEuNTcwNDUwNjU2NzYsNDMwNDM3Ljc4OTM3OTI4OTgsMTEwOTg4MS44MzM2NDkyNzIsMTA1NzAyNS45ODE3NTI5MzE2LDg1NzY4OS44MzUzNTg1NjEsODgyNjI5Ljg2ODQ0Mjc1Myw1MTcwMjIuMDQ3Nzk3MjkzMzQsNzMwNjguMzUwMDcyMzk4NDMsMTMyMzMxNC4zMTg1MDY2MTYsNjc4MTU2Ljc4ODc2MzQ2NjUsOTE2NjE0LjM4NDI3ODYxNTIsMC4wLDAuMCwwLjAsMC4wLDcxOTM4MC4wMDk3ODkwMjE4LDU5MTY5Mi44MDc1NjU3MjU0LDAuMCwxOTI2LjY0NjI2OTQyNjEzNzIsNDA2NTA3Ljc0OTcxNjQwMDQ2LDkxMjMzMC42NjIwMTQ2MTk5LDAuMCwwLjAsMi45OTkxMzg2OTYxNTExODMsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMTQ5ODE4MC40NTMzMDExOTc2LDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwxLjE2MTM5MTIyNjgwMzg1ODZFLTYsMC4wMDYzMDQ1OTE4NDE3NjMzNTYsNDgxNi4yNzAzMTUwNjcwNSw0MjUxNTkuMTQzMzkwNDg5LDIxNTUzOS4yMzU0NzkzMDM3NSwxNTc3Ni40NzMzOTc0MjE4NTIsNTk5MTcuOTU0MzE0MjkzNjcsMjgyODM4MS44MDQ4MDgzNDM4CisxNCxNb24gNyBGZWIgMTEsOTkyOTUuNjgyOTk1MTUzMjEsNTUyODU5Ljc1NDUyNjc4NjUsNjAzMDkyLjY3Njc3OTAwMDgsMjA2NzkwMS42NDgwNzQyMzcsMi40NjA4MjQwMDI4MzQ0OTQ1LDQzLjk4NDEwMDk5OTUxMjg1LDEwNzYuNzc0MDI1MzY0MTc5OCwwLjAsMS4yMjY1MjE2Mjc4NzExNzgzRS00LDEuNTMxOTIwMTI2MjAxODEzLDAuMDAzMzA4Njk1ODE3MzE0NDEzNiwzOTcuNjE4OTc4NTMzNzYzNywxODIwNTkuMDIxMjM2NDIxMTYsMC41MDM1NDY2NTI0NzI2MjkzLDM4My41OTU3ODkwMjA5ODU0LDIuOTY5MzI5MTgxODE4MjQ0NiwxNi44NzQ3OTMxMjkyOTIyLDM4LjgzMTMyOTU1Njk2Niw4MC45NDI1MzgwNjkzMzM2MSwzMDEuODcwMjE2MTk4Mjk4MDcsMjY4LjgyNTY1NjE0Nzc0MTIsMC4wLDE4NDU1NC42MzIxMjQwMDYwOCw3MjM2MjIuMjc4ODYxNDA4NiwxNDM3NjUuOTM3NDAzOTQxNTYsNTI1OTIuODA4NTkwNjExNzIsMjg1ODYyLjkwMzU2NjE4NzM2LDczNzA5Ni4xNjQ0NDE5NDcsNzAxOTkzLjQ2NzQ1MjExOTksNTY5NjAxLjAzMTIyNjU3OTIsNTg2MTczLjI5NDI0MzM1ODksMzQzMzY1LjM1MzY4ODM5NDI0LDQ4NTI2LjI0NzUyMjU2ODExLDg3ODg0MS4yMjM0MDc3MjUsNDUwMzc4LjM2NzA3NzM5MDIsNjA4NzQzLjEzNTAyNjAxODcsMC4wLDAuMCwwLjAsMC4wLDQ3Nzc1NS41ODYxNDk0MTc0NSwzOTI5NTUuNzk1NjE4ODcyODYsMC4wLDU0NjA2LjY2NjUzMTI2MzgxLDI4ODk4NS44NDI5Nzg3NzM2LDEyMjU4OTAuMDk2NzI5ODM3MSwwLjAsMC4wLDE0Ni4yMzEyNTU2NTk5MzIxNSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwyNjY2NDQ5LjE5MjcwMjc0NjUsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDEuMjI3ODY1MTE3MDUxMzIxRS00LDAuNDQ3ODEzOTYzNzY2ODgxNCwxMzYzMjEuNjk5MTQ5Njc0NzQsNDE4OTAzLjcxNjk3MzQwMTI2LDE0NDYxMS4yODM0NzU2MDM0NywyMjI3ODIuNDM2MzAzNTY2ODIsOTc2NDEuMzIxMDMxNjY3ODYsMTg3ODgzNS4xOTgzNDY3NzEKKzE1LFR1ZSA4IEZlYiAxMSw0Nzc0NjYuMTQ1NjA5OTgyNyw0MTQxMjQuODQwODAxNTgxNzQsNDI1OTMwLjk0NTQ3NTk0NjksMTU4MzcyNC4wOTIwMjAyNTgsOTMuOTExMTY3MDEyMzAwNjQsMTM1Ny4xMzE0NzI5MDY1NjE2LDI2MDk2LjQ2MTgyOTM4NjY1NSwwLjAsMC4wMDY5NTkzNjM3NjA0MTY0NjcsNTkuMzQ0MzE0NzQ4NDU1NjYsMC4xNzEyMjUwNDU0MTI2MTE5LDEwMzQwLjIxMTAwNDExMTM0NSwxNjY4Nzk5LjU2MDUzODYwMDIsMTguODM4MTg1MDEyMDI1NDEzLDk4MzkuNzIxMjMzOTEzNDg4LDExOS43Mjc0Mjk2NzEyMDk5NSw1NTUuNDUwMjUyMzA0MTI3OCwxMjQxLjQ4MzY2MTA3MDE0NjgsMjUzOS4xNDI4Mzc5Mzg4MzMsNzU4My4xMTIxMjE1MDE4MDUsNjQ3OC44MTc0MDUwNDM0NjEsMC4wLDk3MjM0Ny40Njc5NDU4OTY3LDQ3OTAyOC45MTEyNzA3MjU2Niw5NTE3MS4yNTUwNjUyNjIyMiwzNDgxNS43ODI0NTQxNzExOSwxODkyMzcuNjcyMDEyMzQyNiw0ODc5NDguNDU1MjQ5MzcwNyw0NjQ3MTAuOTA4MjQwNTA2OTUsMzc3MDYyLjgwNzUyOTExNTcsMzg4MDM5LjQwMDA1NzE1MzE0LDIyNzMwMy41NzU4NDM4MDIxMywzMjEyMy43Njk4MTQ1MDI0MDQsNTgxNzgxLjkxNDAyNzM2NjQsMjk4MTQ0Ljg1NDIxOTI5NTk2LDQwMjk4MC4zNTI3ODAwMDU3LDAuMCwwLjAsMC4wLDAuMCwzMTYyNjguMjMxMzMwMjUwMiwyNjAxMzEuODI5MDY1NTkyNTIsMC4wLDcyMzAwMS4zNjMzNTI2Nzc3LDE5MTMwNS4wMTg5MDEwMTE1LDgxMTUyMy45MzM4NjUxMjcyLDAuMCwwLjAsNDQ3My41MTcxNzY3NzE5NjMsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMTc2NDQ5Ny4wMDY5MjU0NTA5LDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAwNjk2ODc5ODMxODM2MDc5NSwxOS4yNzcyNTU2NjU3NzYzMywxNzAxMTEuMTY5NzU4ODE2MjIsMjc3MzA5LjAyODkzODA5NSw5NTczMC44NjM2MDcxNTU1OCwyMDkxODAuNDE3NDAxMDAwMzMsNjQ2MzcuMzM1MDc4MjI3MjUsMTI0NDA4MC4wODY1ODQ0ODk2CisxNixXZWQgOSBGZWIgMTEsMzA4OTQzLjQ3MDMyMzY3OTYsMjY3OTU4LjYxMTYwMTczMzM3LDI3NTU5Ny43MjY5MjQ2NDk2LDEwMjQ3NDUuMzU5NDgyNzc1OCwxNTg0Ljk0ODU2MjE0NDM3NzMsMTk3OTguNjAyNTQ2OTAwNzcsMjg5Mjg3LjU4MDgyNTg1ODM0LDAuMCwwLjE0OTI5ODYxMTM4OTEyNjI2LDEwMjEuNzk0MzEwODAyNTQ3MSwzLjQ3MjI2MzgzNDI2MjYyNzcsMTI5MTUwLjk1OTA2MDA4Mzc3LDEyNDE4MDkuNzIzNzg0MDI1NSwzMTYuMjA0NTgyMDc3NDUxLDEyMTU2My4wMTU2Mzk1ODA1NSwyMDgxLjkxMjI5Njc0NjAzMDcsODUzNS45NDgzNTIzOTQyNSwxODY0NC44NDgxMTA4MTY4ODUsMzc1NTUuMDQyNDczMjA4NzQsOTE0MjYuMDYwMDk5MTIwNCw3MzczMi45MDcwNzQ3OTAyMiwwLjAsNjMyNTAzLjEwNzQ2OTQyLDMwOTk1NC42NTQ1NzQwNjQxMyw2MTU4MC4zNjE0MjUxMjA5OTUsMjI1MjcuNDc5MTc3OTkzOTcsMTIyNDQ1LjgzOTY1Nzk2NjgzLDMxNTcyNi4wMjY4Mzk1MTk0LDMwMDY5MC4yMjA2NzY2NDE3NCwyNDM5NzMuOTgzMzQ1MTg2OTgsMjUxMDgwLjA4MTc1NzA0NDgzLDE0NzA3Ni4zMDMwNzE2MDcyLDIwNzg1LjYxODAzMzA3MDMyNSwzNzY0NDAuNzY5OTc2NTcwNSwxOTI5MTQuMDAzOTk0OTQ4NDMsMjYwNzQ3LjU5Mzk0OTQzOTMyLDAuMCwwLjAsMC4wLDAuMCwyMDQ2NDAuNjk3MjI3ODA1NTYsMTY4MzE3Ljc1NTYxOTA5MSwwLjAsNzUxOTUwLjEyNjQ3MDA4MDUsMTIzNzgzLjUxMjEzNTk0MzgzLDUyNTA5NC44NjMxMzE1Mzc2LDAuMCwwLjAsNTkwODQuMjYzMDI0NjEyOTksMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMTE0MTI2OS43MzAyNjE5MTg0LDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjE0OTUyOTMzNDczMTY1ODY0LDM1MS4zMjU0NzYyNTU0OTQ4LDExMDA3MC4wNzY0MDA4NDgwOSwxNzk0MzIuMjI2ODQ5ODcyNyw2MTk0Mi40NTQ5NjEwNjA0NiwxMzUzNDkuNzUxMzI3NTIwNSw0MTgyMy40NTIzOTU4MzUyMTUsODA1MjI3LjA1MDQ3MzE1NzcKKzE3LFRodSAxMCBGZWIgMTEsMTg1MzY2LjA4MjE5NDIwNzc2LDE2MDc3NS4xNjY5NjEwNCwxNjUzNTguNjM2MTU0Nzg5NzcsNjE0ODQ3LjIxNTY4OTY2NTQsODc2Mi43MzA3MDAxOTM0NzMsMTAwNTQyLjc1MzI5MDEyNzQ0LDExMTYyNTYuNDk1ODA2MDA0LDAuMCwwLjkxMTAzNTc2ODI4OTUzMDksNTcxMi43NTc5MzQ2OTg2NzIsMjAuNzE3MzYxNzY1Mjg1NDQ2LDU5MzUwNC4yMDE4NDk5Nzk2LDc0NTA4Mi4zMjI3OTU0MDEzLDE3NDguNzA5MjI3MDU0NTkxLDU1OTEzNC45NzE1NDM4ODksMTE2NDMuMDk1OTkzOTQ0MTI3LDQ1MDQyLjUxMzkxMTY2ODYwNCw5NjcyNy41MjkyODczOTk3NSwxOTIxNDIuMDU3MTAzNTg0MTQsNDEyOTA2Ljg2MDc4NzkyMDQsMzEzNDMyLjIwNTkzNDE4NzYzLDAuMCwzNzk1MDEuODY0NDgxNjUxOSwxODU5NzIuNzkyNzQ0NDM4NDUsMzY5NDguMjE2ODU1MDcyNTksMTM1MTYuNDg3NTA2Nzk2MzgyLDczNDY3LjUwMzc5NDc4MDA5LDE4OTQzNS42MTYxMDM3MTE2MywxODA0MTQuMTMyNDA1OTg1MDMsMTQ2MzgxLjgzMDE5MzQyMTA1LDE1MDY0OC4wNDkwNTQyMjY5LDg4MjQ1Ljc4MTg0Mjk2NDMyLDEyNDcxLjM3MDgxOTg0MjE5NCwyMjU4NjQuNDYxOTg1OTQyMywxMTU3NDguNDAyMzk2OTY5MDYsMTU2NDQ4LjU1NjM2OTY2MzYsMC4wLDAuMCwwLjAsMC4wLDEyMjc4NC40MTgzMzY2ODMzMywxMDA5OTAuNjUzMzcxNDU0NjEsMC4wLDQ1MTE3MC4wNzU4ODIwNDgzLDc0MjcwLjEwNzI4MTU2NjMsMzE1MDU2LjkxNzg3ODkyMjU0LDAuMCwwLjAsMjcxOTgzLjY5NzM1NDY1MzcsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsNjg0NDAxLjY5NDAwOTg5MTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuOTEyNTE3NTAzNjU2ODAwNywyMDEwLjM5ODUzNjgyMzExNTQsNjYwNDIuMDQ1ODQwNTA4ODYsMTA3NjU5LjMzNjEwOTkyMzYyLDM3MTY1LjQ3Mjk3NjYzNjI3LDgxMjA5Ljg1MDc5NjUxMjMsMjUwOTQuMDcxNDM3NTAxMTI3LDQ4MzM2MC45OTU2NjgzNTY4CisxOCxGcmkgMTEgRmViIDExLDEyMjI1Ni4yODgwNTI1NjcwOCwxMDYwMzcuNjAzNDg3MjE4MDMsMTA5MDYwLjU4MzMzMDEyMTgyLDQwNTUxNi4xNDA5MjQ0MjMxLDE3MzEzNC41MDg3OTI4NzAzLDUwMTgxMy41NjA0OTMzMjUzNSw3NTQxOTUuOTQ2MzUyNDE1LDAuMCwzMC42MTcxNzM1MTQwNjkxODcsMTM1MjAwLjcxOTc4NjIyNTE1LDY0Mi44NDk2MjY2ODEwMDg4LDExOTkwNDUuNjE4NzQyNjAxNSw0OTE0MDkuOTU3NzU4MzAwMSwzOTkzOS40MjM1NzMxMTg5MSwxMzEwNDk0LjkxMDQ2NTUzOSwyMTk5MjMuODQwNjcwOTM5ODMsNTIzMTY4Ljc3NTQxNTk0NDIsNzE5Nzc3Ljk5ODkxNDUxMTEsOTI2Nzc2Ljc2NjQ2NDE3ODIsODcyMDczLjI5NzIyNDcxMDMsNDE3Nzk1LjQ2NDc0ODUwMTQsMC4wLDI1MDI5Ni41NDEzNzAyMDM3LDEyMjY1Ni40Mzc3Mzk2OTE3MSwyNDM2OC44MTU0MjQwMDk3NDYsODkxNC42NTk5NTU3NDM4MjYsNDg0NTQuNzM0NTQ1MzgxNDYsMTI0OTQwLjMwNzE3ODM0NjE2LDExODk5MC4yODA2MzMyNzgwOSw5NjU0NC4xMzg2NzM5NzEzNSw5OTM1OC4zNjczMDA2Mjk3NSw1ODIwMS41OTU0NDEzNjE0Nyw4MjI1LjM2NDAyMTkwMTE0NSwxNDg5NjYuNTc2ODMyODY5NDcsNzYzNDAuNjY1MjI2MTM1MjksMTAzMTg0LjAzMjA4NjgzNDE1LDAuMCwwLjAsMC4wLDAuMCw4MDk4MS4xOTY5ODUxNTk3Nyw2NjYwNy4zNDQwMzUzNjU5LDAuMCwyOTc1NjQuNTcxMTcwODE5MDUsNDg5ODQuMDgzMzk4ODAxODQsMjA3NzkyLjU0MTM4MjAwMjEyLDAuMCwwLjAsNTQxMTkyLjAxOTk3MDA1MDksMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsNDUxMjQwLjg0MDEyOTk4ODI3LDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwzMC42NzU1NTUzNDQ1OTYyMjMsNTM5MjQuMTIyOTQwMjMzMjgsNDM1NTcuMzUwMzIxNTA1NDksNzEwMDUuNjA0OTY5Mzc2ODcsMjQ1MTIuMTA0NDU4Njg0NjMsNTM1NjEuMTE5NjcyODEyNzIsMTY1NTAuNTM2MDUxNDY5MTc1LDMxODkwOS42ODk1MzIxMDUxCisxOSxTYXQgMTIgRmViIDExLDgxMDczLjA0NDQ4MzkzMjc1LDcwMzE3Ljc4NDcyNDQzNDM3LDcyMzIyLjQ0MzgxNTQ0NDgxLDI2ODkxNC4wMDU2MTczMDE4LDQzNjU5OC41Njg3NTk2MTM5NiwzNDI2MTMuNDY0ODY4MTU5MDMsNTAwMTM3LjU1OTIzOTAwMDcsMC4wLDExODkuOTgwNzAwOTU0NTIwNywxMDE4ODUxLjA0Mjg2NjU3NDMsMTkyNzAuMTUwMTQwMDE5MDEsNzk1MTM1LjIwNjAwOTA4MTcsMzI1ODcyLjcyMTc1MDQwNTI3LDM5NTI2NC4wMjA1NDE4OTA2NCw4NjkwNTIuNDg2ODk0NDEsMzc1MjY2LjE2NzQzNjY1ODg3LDUxNDIxMC44NjM1NDY1MzAzNyw1MzEwMzYuNzIzNzE0MzQyNSw2MjM1OTYuOTE1MzE5NDk0OSw1NzgzMDYuNzU0OTc2NDcxNSwyNzcwNTYuOTE3Mzg0NzAzNiwwLjAsMTY1OTgxLjY2ODE0OTA5MjM4LDgxMzM4LjM5OTc3ODk1NDc3LDE2MTU5LjkzODE3ODczODE1NSw1OTExLjY2ODMwNDg2NzgzNiwzMjEzMi4yNzY0ODEwNzM2MjYsODI4NTIuOTI1MTM4MzA0MDcsNzg5MDcuMjI0MDY2Nzg1Niw2NDAyMi4xMTc0NTMxMTAzMjQsNjU4ODguNTE1NTEzODMwMzgsMzg1OTUuODEwNTgyOTY1NTYsNTQ1NC41Njg1NDUwMzM4NjE1LDk4Nzg1LjcwNzQ4ODQ5NzcsNTA2MjQuNTU0NzQ4MDU3Niw2ODQyNS40NjcxNjEzMzM0MiwwLjAsMC4wLDAuMCwwLjAsNTM3MDEuODc3MzQ0MDY3OCw0NDE2OS45OTkzNjczNDQ5NiwwLjAsMTk3MzI2Ljk5MzE1MjI5NzIsMzI0ODMuMzA4OTIxNDA0MzYsMTM3Nzk1LjU2MjI1MDc0NDc4LDAuMCwwLjAsMzU4ODg2LjExODcyODg0NDEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMjk5MTQwLjA4MzE1ODIwODgsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDExOTMuMjMwNjcxNDA5NTEwNywxMDM4NzgyLjIzMDk3NzQ0MDMsMjg4ODQuNjI0NzIxMzAwODQ2LDQ3MDg2LjY2MjQ2OTM4MjY2LDE2MjU0Ljk1ODg4MDQ3MzAzNywzNTUxOC41MjUxMTY0ODM4NiwxMDk3NS4zMjM3ODAxMjk0MjksMjExNTU5LjQyNjAwNTUyNDQ3CisyMCxTdW4gMTMgRmViIDExLDUyNzAzLjQ1Mzg5NjAxMTE0LDQ1NzExLjc0MjQwMzIxNDI0NCw0NzAxNC45MTg1NTMyMjU4MSwxNzQ4MTMuOTIyMjc1Mzg2MTcsMjgzODIxLjI0NjQ1OTM4MjYsMjIyNzI0LjAwMjM0NTkzNjUsMzI1MTI2LjI3MzAxNDcwMjE0LDAuMCwxODE5MC4xNDE3MDg4MTU1ODcsNjcyNzcyLjA4MjY2Nzk0MzQsMjEzNzc3Ljc0ODY3NzAwNjE3LDUxNjg5Ni40ODQzNzA5NTU4NSwyMTE4NDAuNjI3NDg2MDU5NiwyODg5MzMuNDEwNDcxNDM4Miw1NjQ5NDguMTY0NTU3MDkzLDI0Mzk1MC42NjU0Nzg1OTAzLDMzNDI3NC45NTc5OTk0MzEyLDM0NTIxMy4wMDcxNTMyNTAzLDQwNTM4My45NTMyNjYzNTU1NiwzNzU5NDIuMDExMjE1NTExMSwxODAxMDcuNDE1MDQ2NTU3NDYsMC4wLDEwNzkwMC4zMTY5MzcxODMzOCw1Mjg3NS45NTQzOTQxMjcwOCwxMDUwNS4xNTA3ODMzMDc1ODEsMzg0My4wMjAwODA2ODYxMTYsMjA4ODguMzQ3ODIxMDc4MzcyLDUzODYwLjUwNzQ5NjMxOTEsNTEyOTUuNTExMDA2NjIzNTcsNDE2MTkuMDQzODI2NjkwMjY0LDQyODMyLjM5MDk4NDc0OTIyNSwyNTA5MC4xMjEzNDE2NDU2LDM1NDUuODcxNTQ5MTE2MzkwNyw2NDIxNy45OTAyNDk5NzM3MzYsMzI5MDkuNjkxNTUyMjc4MDYsNDQ0ODEuNTk2NTI1NzczMjIsMC4wLDAuMCwwLjAsMC4wLDM0OTEwLjE3ODAzNDQ5MTI3LDI4NzEzLjc1NDg2MjE5Nzg0MiwwLjAsMTI4Mjc3LjA4ODMwMDMxMjQ2LDIxMTE2LjU0NDc3Nzk0Mjg5NCw4OTU3Ny4yNzA4MjI2ODc4MiwwLjAsMC4wLDIzMzMwMi40MjY2Mjk1MTM2LDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDE5NDM5NC43NDYwMDI0MDU2LDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwxODMyNC4wNTkzMzcxMDcyMjUsMTUzMjgwMC4wNTIwNTE2NzAyLDE4Nzc3LjEzNDgyOTM3NDI2MywzMDYwOS44MDA4MzI5MjYxOSwxMDU2Ni45MjEyNDIzNDE1MTYsMjMwODkuNjU4OTk2MzYyMzI2LDcxMzQuNzY5MzI0NjQ4NzM5LDEzNzU4Ni44OTA3ODY5Mzc0NAorMjEsTW9uIDE0IEZlYiAxMSwzMzcyNC44MzA1NDg4OTg5MSwyOTI1MC44NDg5MDQyMzA4MzYsMzAwODQuNzQ4NjEyNjEwOTEsMTExODYzLjA2NTMzMDc1MjI3LDE4MTYxNi42MjUzOTA1NDk1NCwxNDI1MjAuNjI1OTM2NzcxMjUsMjA4MDQ3LjYyNTk4NzY3MjY1LDAuMCwxNDUyMDMuODM1NjUyNjQ1MSw0MzA1MDUuNDU2NjM5OTc2MiwzNzQzNjkuNTUzNDAzOTM5NiwzMzA3NjAuOTg1NDM5OTIwNSwxMzU1NTUuOTI0NjA4MTcxNDUsMTg0ODg3Ljg4ODUxMDg5MzIyLDM2MTUwOS4xNTU2NjU0Mzk4LDE1NjEwMy41MjM1MzM1NzM1LDIxMzkwMS44NTA0ODQzMDY1NSwyMjA5MDEuMDg1MzkxNjc5NCwyNTk0MDQuMzQ4NjgxMzE3MTgsMjQwNTY0LjUxMTE4ODc5OTgsMTE1MjUwLjM2MDM0Njk3MjkxLDAuMCw2OTA0NS4xODg0MjQ2MzIwNCwzMzgzNS4yMTMyNTg5MjA5MSw2NzIyLjIyNDE0MDMxMzc5LDI0NTkuMTQwNTU3OTAxMTY0LDEzMzY2LjQxMDMzMjQ2Njc4MywzNDQ2NS4yMjY3NDE1OTE5NSwzMjgyMy44OTA4MjE4NTkyLDI2NjMxLjk1MDk5NzI4NDE3NywyNzQwOC4zNTc5MTkyOTM0MzQsMTYwNTUuMTE2NDcwNTA0MjU3LDIyNjguOTk1ODMwNDgzMTgzNSw0MTA5Mi45NTg0MTY4MTMsMjEwNTguODQzMTg3MTQ2NTczLDI4NDYzLjY4MTExNTM5ODk3LDAuMCwwLjAsMC4wLDAuMCwyMjMzOC45NTAzMjcwMTQ4NjcsMTgzNzMuODcyMDI0Nzk5NzksMC4wLDgyMDg0LjI0MjA0NTUwMjksMTM1MTIuNDMzMDkwNjE4NzQ2LDU3MzIwLjMwOTMxOTU0OTQ3LDAuMCwwLjAsMTQ5Mjg5LjczNzYzNzUzMiwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwxMjQzNDYuMDI1NjQ0MTM2OCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMTUxNDc3LjM4NTI1MDIzMzAzLDk4MDgzNS41NjU3ODI1MDA0LDEyMDE1LjQ0OTUyOTQzNTkyNCwxOTU4Ny4xNDc4OTg1NTc1NzQsNjc2MS43NTA5Mjg1OTUyMDY1LDE0Nzc1LjAyNDc3NTgwNzIzMyw0NTY1LjUyNDA1Mzc3NTAwMSw4ODA4Mi41MzIzNDc3MjMzMworMjIsVHVlIDE1IEZlYiAxMSwyMTA4MC44NDYzMjI3MTQ2NSwxODI4NC4yMzI3MzA2ODY1OSwxODgwNS40ODk5NTYxNDMzMDUsNjk5MjMuNzkzNTY4MjQ4NzcsMTEzNTI1LjYxNjIwNjA0NTMyLDg5MDg3LjMzOTA0MDQxMTIxLDEzMDA0Ny4yMDczNTA0NTg3NiwwLjAsNDM2MTY5Ljc2MzU1OTk4Mzc1LDI2OTEwMi4wMDA2NTY3MTYwNiwyMzQwMTIuMzU1MTMzMDc2NywyMDY3NTMuMzQ0MzQ5NjA2NDMsODQ3MzMuNTAxMDExOTcyMjEsMTE1NTcwLjQyOTg5MzcyNjg4LDIyNTk3My41Mjg0Mjk5NjgxLDk3NTc3Ljc4ODcyMzc3Mzg4LDEzMzcwNi41ODg0MzM4Nzk1LDEzODA4MS42OTcwMTI4NTI3MywxNjIxNDkuNDY0Mzg1NDcxMiwxNTAzNzIuOTg2NTY1OTk1NzMsNzIwNDEuMTM2OTE4MDcyNTYsMC4wLDQzMTU5LjAzMDk4MTQwNDQ5LDIxMTQ5Ljg0NDc3MDExMzM1NSw0MjAxLjk1MzYyNzExNTM4OCwxNTM3LjE2OTAwNDA2MzczNjMsODM1NS4xMjY5OTQ1MzA2NTgsMjE1NDMuNjU2MDEyMjUzNDYsMjA1MTcuNjgzNDY1NDc3NjE4LDE2NjQ3LjIzNjE0MzAwMDE3MywxNzEzMi41MjE0MDQ4Njg4MDcsMTAwMzUuNzkzNzMxMTg3MDQ2LDE0MTguMzEyNjA5MTYwMjU1LDI1Njg2LjU0MzkyNzE2NjQ5NSwxMzE2My41NDI0MDI5Mzk1OTMsMTc3OTIuMTg2ODcyNTkxMTcsMC4wLDAuMCwwLjAsMC4wLDEzOTYzLjcxNjY3OTY2NTYyNywxMTQ4NS4yMTAzMzkyMDE0MzgsMC4wLDUxMzA5LjUzMjU4ODEyNjA5NCw4NDQ2LjQwMzQ1OTc5NzMxNSwzNTgyOS45OTg2MTczMDQ5MiwwLjAsMC4wLDkzMzE4LjYwMTMyMzQ5NzM0LDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDc3Njk0LjE0NTc4MTkzMDgzLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCw2NTQyOTIuNDQyNjA0MjAyOSw2MTMxMDQuNDU0MzAyMTA5Miw3NTEwLjY2MzIzODUwMzQzNywxMjI0My42MDk0NzE5OTA1NjUsNDIyNi42NjExODM0MTIzMDksOTIzNS42MjkxMDg5ODc4NiwyODUzLjgzNTI3MTkyOTM0NTcsNTUwODguMzMxNzE4MjgwOTEKKzIzLFdlZCAxNiBGZWIgMTEsMTMxODYuOTQyMTMwNjIyMzIsMTE0MzcuNTQ0NTQ3ODQ4MzgyLDExNzYzLjYxMjUyMjYzNjQ2Nyw0Mzc0MC4yMjc3NTA5Mzg3Miw3MTAxNC45NzI5NDQzODY5MSw1NTcyNy44MTg4MjI0OTE3NCw4MTM0OS45MTIyMDU5MzAxLDAuMCwyNzI4NDIuMjQ0NzE1NTM2MzYsMTY4MzM0LjQ0MjM0NDk5OTUyLDE0NjM4NC40MTYzNDQxMTI4MywxMjkzMzIuNzc2NTY0NzIxNzIsNTMwMDQuMTE2MzAyNTQ5MzQ0LDcyMjk0LjA4ODU2MjE2NDgzLDE0MTM1NS43OTc0MzA1NjUxNyw2MTAzOC45NDY2MDc1NjY2NCw4MzYzOS4wMDY1NzM1MDE0NSw4NjM3NS44MTgxMjA5NTU0OSwxMDE0MzEuMjAzMDI4MDYwNTUsOTQwNjQuNTI4NjAwOTIxOTksNDUwNjQuNzEzNjc1MTQ0NjcsMC4wLDI2OTk3Ljc2MDY4MDYxNzA4LDEzMjMwLjEwMzUxNjAzNDQ5NSwyNjI4LjQ5NTk1NjM4MDI2Miw5NjEuNTYyODUxNDc0OTU1OCw1MjI2LjQ3Nzg0MDc5NTE1NiwxMzQ3Ni40NDg3NTE5NDE1NzQsMTI4MzQuNjYwNDQ4MjQ1MTQ0LDEwNDEzLjU3MzA1MDMyNTMwNywxMDcxNy4xMDE0MzIyMjM3MTMsNjI3Ny44MDQ0NjQ4NzIzNDYsODg3LjIxMzI1NTc1ODg3OCwxNjA2Ny45OTY2NTk5OTQzMyw4MjM0LjM0MDc0OTE0MzMyNiwxMTEyOS43NDk0OTI3MDc0ODYsMC4wLDAuMCwwLjAsMC4wLDg3MzQuODgyODg2NzgxNzU0LDcxODQuNDc0NTU5NjMyOTE2LDAuMCwzMjA5Ni4yMzY4Njk3NjE5MTMsNTI4My41NzUwNDg3MDI4OTYsMjI0MTMuMTQ3NTExODk5MDI3LDAuMCwwLjAsNTgzNzQuNjQ4NTU2NTcyMTksMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsNDg1ODAuNzEzMjMyMDM1MzMsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDQ4MDYzMy41ODYzNjU1Mjk3LDM4MzUyMi4yMTg5NDQxNzU3NSw0Njk4LjIzMDgwMDI1MTA1OSw3NjU4Ljg4NDYxNTIzMDU1NiwyNjQzLjk1MTU1NTc0NzA0NSw1Nzc3LjI2ODM2NjU0MDE2NCwxNzg1LjE5MjExMjU1MzQyNjMsMzQ0NzguNzg2Njg0MzAzMTEKKzI0LFRodSAxNyBGZWIgMTEsNzkxMi4xNjUyNzgzNzMzOTIsNjg2Mi41MjY3Mjg3MDkwMjksNzA1OC4xNjc1MTM1ODE4ODA1LDI2MjQ0LjEzNjY1MDU2MzIzMiw0MjYwOC45ODM3NjY2MzIxNSwzMzQzNi42OTEyOTM0OTUwNCw0ODgwOS45NDczMjM1NTgwNiwwLjAsMTYzNzA1LjM0NjgyOTMyMTgyLDEwMTAwMC42NjU0MDY5OTk3Miw4NzgzMC42NDk4MDY0Njc3LDc3NTk5LjY2NTkzODgzMzAzLDMxODAyLjMyODk2NzQ3Mjc4Miw0MzM3Ni40NTMxMzcyOTg5LDg0ODEzLjQ3ODQ1ODMzOTEsMzY2MjMuMzY3OTY0NTM5OTgsNTAxODMuNDAzOTQ0MTAwODcsNTE4MjUuNDkwODcyNTczMjksNjA4NTguNzIxODE2ODM2MzMsNTY0MzguNzE3MTYwNTUzMTksMjcwMzguODI4MjA1MDg2OCwwLjAsMTYxOTguNjU2NDA4MzcwMjQ3LDc5MzguMDYyMTA5NjIwNjk2LDE1NzcuMDk3NTczODI4MTU3Miw1NzYuOTM3NzEwODg0OTczNSwzMTM1Ljg4NjcwNDQ3NzA5MzYsODA4NS44NjkyNTExNjQ5NDQsNzcwMC43OTYyNjg5NDcwODYsNjI0OC4xNzg0OTc3MDcxNTUsNjQzMC4yNjA4NTkzMzQyMjc1LDM3NjYuNjgyNjc4OTIzNDA3NCw1MzIuMzI3OTUzNDU1MzI2Nyw5NjQwLjc5Nzk5NTk5NjU5Niw0OTQwLjYwNDQ0OTQ4NTk5Niw2Njc3Ljg0OTY5NTYyNDQ5MiwwLjAsMC4wLDAuMCwwLjAsNTI0MC45Mjk3MzIwNjkwNTIsNDMxMC42ODQ3MzU3Nzk3NDksMC4wLDE5MjU3Ljc0MjEyMTg1NzE0NywzMTcwLjE0NTAyOTIyMTczOCwxMzQ0Ny44ODg1MDcxMzk0MTYsMC4wLDAuMCwzNTAyNC43ODkxMzM5NDMzMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwyOTEzMy45OTY0MzY4OTMyLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwyODgzODAuMTUxODE5MzE3ODMsMjMwMTEzLjMzMTM2NjUwNTQ0LDI4MTguOTM4NDgwMTUwNjM1Myw0NTk1LjMzMDc2OTEzODMzMywxNTg2LjM3MDkzMzQ0ODIyNjksMzQ2Ni4zNjEwMTk5MjQwOTgsMTA3MS4xMTUyNjc1MzIwNTYsMjA3MDAuOTI3MTQ4ODQ0ODE0CisyNSxGcmkgMTggRmViIDExLDQ3NDcuMjk5MTY3MDI0MDM1LDQxMTcuNTE2MDM3MjI1NDE4LDQyMzQuOTAwNTA4MTQ5MTI5LDE1NzQ2LjQ4MTk5MDMzNzk0LDI1NTY1LjM5MDI1OTk3OTI5LDIwMDYyLjAxNDc3NjA5NzAyLDI5Mjg1Ljk2ODM5NDEzNDgzNCwwLjAsOTgyMjMuMjA4MDk3NTkzMDksNjA2MDAuMzk5MjQ0MTk5ODMsNTI2OTguMzg5ODgzODgwNjIsNDY1NTkuNzk5NTYzMjk5ODIsMTkwODEuMzEyOTkyNjM4NDgsMjYwMjUuODcxODgyMzc5MzQsNTA4ODguMDg3MDc1MDAzNDYsMjE5NzQuMDIwNzc4NzIzOTksMzAxMTAuMDQyMzY2NDYwNTIyLDMxMDk1LjI5NDUyMzU0Mzk3MywzNjUxNS4yMzMwOTAxMDE4LDMzODYzLjIzMDI5NjMzMTkxLDE2MjIzLjI5NjkyMzA1MjA4LDAuMCw5NzE5LjE5Mzg0NTAyMjE0OCw0NzYyLjgzNzI2NTc3MjQxOCw5NDYuMjU4NTQ0Mjk2ODk0MywzNDYuMTYyNjI2NTMwOTg0MSwxODgxLjUzMjAyMjY4NjI1NjEsNDg1MS41MjE1NTA2OTg5NjYsNDYyMC40Nzc3NjEzNjgyNTEsMzc0OC45MzI3ODMwNzk5MTMsMzg1OC4xNTY1MTU2MDA1MzYzLDIyNjAuMDA5NjA3MzU0MDQ0NCwzMTkuMzk2NzcyMDczMTk1OTYsNTc4NC40Nzg3OTc1OTc5NTgsMjk2NC4zNjI2Njk2OTE1OTc2LDQwMDYuNzA5ODE3Mzc0Njk1LDAuMCwwLjAsMC4wLDAuMCwzMTQ0LjU1NzgzOTI0MTQzMTMsMjU4Ni40MTA4NDE0Njc4NDk0LDAuMCwxMTU1NC42NDUyNzMxMTQyODksMTkwMi4wODcwMTc1MzMwNDI2LDgwNjguNzMzMTA0MjgzNjQ5NSwwLjAsMC4wLDIxMDE0Ljg3MzQ4MDM2NTk4NiwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwxNzQ3MS43NzEyMzIyMTMzNzQsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDE3MzAyOC4wOTEwOTE1OTA3LDEzODA2Ny45OTg4MTk5MDMyNywxNjkxLjM2MzA4ODA5MDM4MSwyNzU3LjE5ODQ2MTQ4Myw5NTEuODIyNTYwMDY4OTM2MSwyMDc5LjgxNjYxMTk1NDQ1ODUsNjQyLjY2OTE2MDUxOTIzMzUsMTI0MjguODc3MjA3OTMwMzY1CisyNixTYXQgMTkgRmViIDExLDI4NDguMzc5NTAwMjE0NDIxLDI0NzAuNTA5NjIyMzM1MjUwMiwyNTQwLjk0MDMwNDg4OTQ3NzQsOTQ0Ny44ODkxOTQyMDI3NjIsMTUzMzkuMjM0MTU1OTg3NTczLDEyMDM3LjIwODg2NTY1ODIxMywxNzU3MS41ODEwMzY0ODA5LDAuMCw1ODkzMy45MjQ4NTg1NTU4NSwzNjM2MC4yMzk1NDY1MTk4OSwzMTYxOS4wMzM5MzAzMjgzNywyNzkzNS44Nzk3Mzc5Nzk4OTMsMTE0NDguNzM3MjA0MjI3ODUxLDE1NjE1LjUyMzEyOTQyNzYwMiwzMDUzMi44NTIyNDUwMDIwNzYsMTMxODQuNDEyNDY3MjM0MzkzLDE4MDY2LjAyNTQxOTg3NjMxNCwxODY1Ny4xNzY3MTQxMjYzODQsMjE5MDkuMTM5ODU0MDYxMDgsMjAzMTcuOTM4MTc3Nzk5MTQ0LDk3MzMuOTc4MTUzODMxMjQ3LDAuMCw1ODMxLjUxNjMwNzAxMzI4ODUsMjg1Ny43MDIzNTk0NjM0NSw1NjcuNzU1MTI2NTc4MTM2NiwyMDcuNjk3NTc1OTE4NTkwNDUsMTEyOC45MTkyMTM2MTE3NTM1LDI5MTAuOTEyOTMwNDE5Mzc5MywyNzcyLjI4NjY1NjgyMDk1LDIyNDkuMzc3MDczMzA0MTM2NSwyMzE0Ljg5MzkwOTM2MDMyMTcsMTM1Ni4wMDU3NjQ0MTI0MjY3LDE5MS42MzgwNjMyNDM5MTc1NywzNDcwLjY4NzI3ODU1ODc3NSwxNzc4LjYxNzYwMTgxNDk1ODYsMjQwNC4wMjU4OTA0MjQ4MTY3LDAuMCwwLjAsMC4wLDAuMCwxODg2LjczNDcwMzU0NDg1ODgsMTU1MS44NDY1MDQ4ODA3MDk1LDAuMCw2OTMyLjc4NzE2Mzg2ODU3MywxMTQxLjI1MjIxMDUxOTgyNTQsNDg0MS4yMzk4NjI1NzAxOSwwLjAsMC4wLDEyNjA4LjkyNDA4ODIxOTU5MiwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwxMDQ3Ny45MDEyMzczNzE0NzIsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDEwMzgxNi44NTQ2NTQ5NTQ0MSw4Mjg0MC43OTkyOTE5NDE5NSwxMDE0LjgxNzg1Mjg1NDIyODYsMTY1NC4zMTkwNzY4ODk3OTk4LDU3MS4wOTM1MzYwNDEzNjE2LDEyNDcuODg5OTY3MTcyNjc1LDM4NS42MDE0OTYzMTE1NDAxLDc0NjIuMzY4Mzk0ODk3MDM0CisyNyxTdW4gMjAgRmViIDExLDE3MDkuMDI3NzAwMTI4NjUyNywxNDgyLjMwNTc3MzQwMTE1LDE1MjQuNTY0MTgyOTMzNjg2NCw1NjY4LjczMzUxNjUyMTY1Nyw5MjAzLjU0MDQ5MzU5MjU0Myw3MjIyLjMyNTMxOTM5NDkyOCwxMDU0Mi45NDg2MjE4ODg1NCwwLjAsMzUzNjAuMzU0OTE1MTMzNTEsMjE4MTYuMTQzNzI3OTExOTM1LDE4OTcxLjQyMDM1ODE5NzAyLDE2NzYxLjUyNzg0Mjc4NzkzNSw2ODY5LjIxMTk4NDc1NTgzNCw5MzY5LjMxMzg3NzY1NjU2MSwxODMxOS43MTEzNDcwMDEyNDUsNzkxMC42NDc0ODAzNDA2MzUsMTA4MzkuNjE1MjUxOTI1Nzg4LDExMTk0LjMwNjAyODQ3NTgzLDEzMTQ1LjQ4MzkxMjQzNjY0NiwxMjE5MC43NjI5MDY2Nzk0ODcsNTg0MC4zODY4OTIyOTg3NDgsMC4wLDM0OTguOTA5Nzg0MjA3OTczLDE3MTQuNjIxNDE1Njc4MDcsMzQwLjY1MzA3NTk0Njg4MTksMTI0LjYxODU0NTU1MTE1NDI2LDY3Ny4zNTE1MjgxNjcwNTIsMTc0Ni41NDc3NTgyNTE2Mjc2LDE2NjMuMzcxOTk0MDkyNTcsMTM0OS42Mzc1MDY4NjA2ODYsMTM4OC45MzYzNDU2MTYxOTMsODEzLjYwMzQ1ODY0NzQ1NiwxMTQuOTgyODM3OTQ2MzUwNTQsMjA4Mi40MTIzNjcxMzUyNjQ1LDEwNjcuMTcwNTYxMDg4OTc1LDE0NDIuNDE1NTM0MjU0ODksMC4wLDAuMCwwLjAsMC4wLDExMzIuMDQwODIyMTI2OTE1NCw5MzEuMTA3OTAyOTI4NDI1NywwLjAsNDE1OS42NzIyOTgzMjExNDQsNjg0Ljc1MTMyNjMxMTg5NTIsMjkwNC43NDM5MTc1NDIxMTQsMC4wLDAuMCw3NTY1LjM1NDQ1MjkzMTc1NSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCw2MjgzLjY1MDU2ODQxMTI3OSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsNjIyOTAuMTEyNzkyOTcyNjQsNDk3MDQuNDc5NTc1MTY1MTcsNjA4Ljg5MDcxMTcxMjUzNzIsOTkyLjU5MTQ0NjEzMzg3OTgsMzQyLjY1NjEyMTYyNDgxNjkzLDc0OC43MzM5ODAzMDM2MDUsMjMxLjM2MDg5Nzc4NjkyNDAzLDQ0ODAuNDY1MTIzNzU5NjkKKzI4LE1vbiAyMSBGZWIgMTEsMTAyNS40MTY2MjAwNzcxOTE1LDg4OS4zODM0NjQwNDA2OSw5MTQuNzM4NTA5NzYwMjExOSwzNDAxLjI0MDEwOTkxMjk5NDMsNTUyMi4xMjQyOTYxNTU1MjUsNDMzMy4zOTUxOTE2MzY5NTcsNjMyNS43NjkxNzMxMzMxMjMsMC4wLDIxMjE2LjIxMjk0OTA4MDEwNSwxMzA4OS42ODYyMzY3NDcxNiwxMTM4Mi44NTIyMTQ5MTgyMTQsMTAwNTYuOTE2NzA1NjcyNzYsNDEyMS41MDg5OTUzNjQ5Njg1LDU2MjEuNTg4MzI2NTkzOTM2NSwxMDk5MS44MjY4MDgyMDA3NDUsNDc0Ni4zODg0ODgyMDQzODEsNjUwMy43NjkxNTExNTU0NzMsNjcxNi41ODM2MTcwODU0OTgsNzg4Ny4yOTAzNDc0NjE5ODcsNzMxNC40NTc3NDQwMDc2OTIsMzUwNC4yMzIxMzUzNzkyNDg2LDAuMCwyMDk5LjM0NTg3MDUyNDc4NCwxMDI4Ljc3Mjg0OTQwNjg0MiwyMDQuMzkxODQ1NTY4MTI5MTYsNzQuNzcxMTI3MzMwNjkyNTUsNDA2LjQxMDkxNjkwMDIzMTIsMTA0Ny45Mjg2NTQ5NTA5NzY2LDk5OC4wMjMxOTY0NTU1NDIsODA5Ljc4OTYwNDM0ODkxOTQsODMzLjM2MTgwNzM2OTcxNTcsNDg4LjE2MjA3NTE4ODQ3MzYsNjguOTg5NzAyNzY3ODEwMzEsMTI0OS40NDc0MjAyODExNTg3LDY0MC4zMDIzMzY2NTMzODUsODY1LjQ0OTMyMDU1MjkzNCwwLjAsMC4wLDAuMCwwLjAsNjc5LjIyNDQ5MzI3NjE0OTEsNTU4LjY2NDc0MTc1NzA1NTQsMC4wLDI0OTUuODAzMzc4OTkyNjg2Miw0MTAuODUwNzk1Nzg3MTM3MTQsMTc0Mi44NDYzNTA1MjUyNjg1LDAuMCwwLjAsNDUzOS4yMTI2NzE3NTkwNTMsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMzc2OC4zMzk0OTA1MTk4ODE2LDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwzNzM3NC4wNjc2NzU3ODM1OCwyOTgyMi42ODc3NDUwOTkxLDM2NS4zMzQ0MjcwMjc1MjIzLDU5NS41NTQ4Njc2ODAzMjc4LDIwNS41OTM2NzI5NzQ4OTAxNSw0NDkuMjQwMzg4MTgyMTYzLDEzOC44MTY1Mzg2NzIxNTQ0MiwyNjkwLjExMjQ4NjgxMDc3MTgKKzI5LFR1ZSAyMiBGZWIgMTEsNjE1LjI0OTk3MjA0NjMxNSw1MzMuNjMwMDc4NDI0NDE0LDU0OC44NDMxMDU4NTYxMjcxLDIwNDAuNzQ0MDY1OTQ3Nzk2NiwzMzEzLjI3NDU3NzY5MzMxNSwyNjAwLjAzNzExNDk4MjE3NCwzNzk1LjQ2MTUwMzg3OTg3NCwwLjAsMTI3MjkuNzI3NzY5NDQ4MDY0LDc4NTMuODExNzQyMDQ4Mjk2LDY4MjkuNzExMzI4OTUwOTI4LDYwMzQuMTUwMDIzNDAzNjU2LDI0NzIuODk0NDgyOTg5NDU2NywzMzcyLjk1Mjk5NTk1NjM2Miw2NTk1LjA5NjA4NDkyMDQ0NywyODQ3LjgzMzA5MjkyMjYyODYsMzkwMi4yNjE0OTA2OTMyODM2LDQwMjkuOTUwMTcwMjUxMjk5LDQ3MzIuMzc0MjA4NDc3MTkyLDQzODguNjc0NjQ2NDA0NjE1NSwyMTAyLjUzOTI4MTIyNzU0OSwwLjAsMTI1OS42MDc1MjIzMTQ4NzA1LDYxNy4yNjM3MDk2NDQxMDUxLDEyMi42MzUxMDczNDA4Nzc0OCw0NC44NjI2NzYzOTg0MTU1MywyNDMuODQ2NTUwMTQwMTM4Nyw2MjguNzU3MTkyOTcwNTg2LDU5OC44MTM5MTc4NzMzMjUyLDQ4NS44NzgxNjgyODA2NjE4LDUwMC4wMTcwODQ0MjE4Mjk0LDI5Mi44OTcyNDUxMTMwODQxLDQxLjM5MzgyMTY2MDY4NjE4Niw3NDkuNjY4NDUyMTY4Njk1MiwzODQuMTgxNDAxOTkyMDMxLDUxOS4yNjk1OTIzMzE3NjA0LDAuMCwwLjAsMC4wLDAuMCw0MDcuNTM0Njk1OTY1Njg5NSwzMzUuMTk4ODQ1MDU0MjMzMiwwLjAsMTQ5Ny40ODIwMjczOTU2MTE2LDI0Ni41MTA0Nzc0NzIyODIyOCwxMDQ1LjcwNzgxMDMxNTE2MTIsMC4wLDAuMCwyNzIzLjUyNzYwMzA1NTQzMTQsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMjI1OS44OTQ4MjI1ODQ3LDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwyMjQyNC40NDA2MDU0NzAxNDcsMTc4OTMuNjEyNjQ3MDU5NDYsMjE5LjIwMDY1NjIxNjUxMzM1LDM1Ny4zMzI5MjA2MDgxOTY3LDEyMy4zNTYyMDM3ODQ5MzQwOCwyNjkuNTQ0MjMyOTA5Mjk3NzYsODMuMjg5OTIzMjAzMjkyNjYsMTYxNS4xNjk5Nzg0ODI0ODI3CiszMCxXZWQgMjMgRmViIDExLDM2OS4xNDk5ODMyMjc3ODksMzIwLjE3ODA0NzA1NDY0ODQsMzI5LjMwNTg2MzUxMzY3NjIzLDEyMjQuNDQ2NDM5NTY4Njc3OCwxOTg3Ljk2NDc0NjYxNTk4OSwxNTYwLjAyMjI2ODk4OTMwNDQsMjI3Ny4yNzY5MDIzMjc5MjQzLDAuMCw3NjM3LjgzNjY2MTY2ODgzOCw0NzEyLjI4NzA0NTIyODk3Nyw0MDk3LjgyNjc5NzM3MDU1NywzNjIwLjQ5MDAxNDA0MjE5MzMsMTQ4My43MzAxNDI2MDc4NzE4LDIwMjMuNzcxNzk3NTczODE3MSwzOTU3LjA1NzY1MDk1MjI2OCwxNzA4LjY5OTg1NTc1MzU3NzEsMjM0MS4zNTY4OTQ0MTU5NywyNDE3Ljk3MDEwMjE1MDc3OSwyODM5LjQyNDUyNTA4NjMxNSwyNjMzLjIwNDc4Nzg0Mjc2OTMsMTI2MS41MjM1Njg3MzY1MjkzLDAuMCw3NTUuNzY0NTEzMzg4OTIyMywzNzAuMzU4MjI1Nzg2NDYzMSw3My41ODEwNjQ0MDQ1MjY0OSwyNi45MTc2MDU4MzkwNDkzMiwxNDYuMzA3OTMwMDg0MDgzMiwzNzcuMjU0MzE1NzgyMzUxNTcsMzU5LjI4ODM1MDcyMzk5NTEsMjkxLjUyOTYwNzY5NDQ1NzA3LDMwMC4wMTAyNTA2NTMwOTc2LDE3NS43MzgzNDcwNjc4NTA0NywyNC44MzYyOTI5OTY0MTE3MSw0NDkuODAxMDcxMzAxMjE3MSwyMzAuNTA4ODQxMTk1MjE4NiwzMTEuNTYxNzU1Mzk5MDU2MiwwLjAsMC4wLDAuMCwwLjAsMjQ0LjUyMDgxNzU3OTQxMzcsMjAxLjExOTMwNzAzMjUzOTksMC4wLDg5OC40ODkyMTY0MzczNjcsMTQ3LjkwNjI4NjQ4MzM2OTM0LDYyNy40MjQ2ODYxODkwOTY3LDAuMCwwLjAsMTYzNC4xMTY1NjE4MzMyNTg5LDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDEzNTUuMjcyNDI4MjI5NTQ3NiwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMTM0NTQuNjY0MzYzMjgyMDg3LDEwNzM2LjE2NzU4ODIzNTY3NiwxMzEuNTIwMzkzNzI5OTA4LDIxNC4zOTk3NTIzNjQ5MTgsNzQuMDEzNzIyMjcwOTYwNDQsMTYxLjcyNjUzOTc0NTU3ODYzLDQ5Ljk3Mzk1MzkyMTk3NTU5LDk2OS43NjQyNDc0NjY3NDk2CiszMSxUaHUgMjQgRmViIDExLDIyMS40ODk5ODk5MzY2NzM0LDE5Mi4xMDY4MjgyMzI3ODkwNCwxOTcuNTgzNTE4MTA4MjA1NzQsNzM0LjY2Nzg2Mzc0MTIwNjcsMTE5Mi43Nzg4NDc5Njk1OTMyLDkzNi4wMTMzNjEzOTM1ODI2LDEzNjYuMzY2MTQxMzk2NzU0NSwwLjAsNDU4Mi43MDE5OTcwMDEzMDI1LDI4MjcuMzcyMjI3MTM3Mzg2MywyNDU4LjY5NjA3ODQyMjMzNCwyMTcyLjI5NDAwODQyNTMxNiw4OTAuMjM0MTU3ODY1MjUzNiwxMjE0LjI2MzA3ODU0NDI5MDIsMjM3NC4yMzQ1OTA1NzEzNjEsMTAyNS4yMTk5MTM0NTIxNDYsMTQwNC44MTQxMzY2NDk1ODIsMTQ1MC43ODIwNjEyOTA0Njc1LDE3MDMuNjU0NzE1MDUxNzg5LDE1NzkuOTIyODcyNzA1NjYxNiw3NTYuOTE0MTQxMjQxOTE3NiwwLjAsNDUzLjQ1ODcwODAzMzM1MzQsMjIyLjIxNDkzNTQ3MTg3Nzg1LDQ0LjE0ODYzODY0MjcxNTg5NSwxNi4xNTA1NjM1MDM0Mjk1OSw4Ny43ODQ3NTgwNTA0NDk5MiwyMjYuMzUyNTg5NDY5NDEwOTMsMjE1LjU3MzAxMDQzNDM5NzA1LDE3NC45MTk0MTcwNDc5OTg2LDE4MC4wMDYxNTAzOTE4NTg1NywxMDUuNDQzMDA4MjQwNzEwMjgsMTQuOTAxNzc1Nzk3ODQ3MDI2LDI2OS44ODA2NDI3ODA3MzAyLDEzOC4zMDUzMDQ3MTcxMzExNSwxODYuOTM3MDUzMjM5NDMzNzQsMC4wLDAuMCwwLjAsMC4wLDE0Ni43MTI0OTA1NDc2NDgyLDEyMC42NzE1ODQyMTk1MjM5NCwwLjAsNTM5LjA5MzUyOTg2MjQyMDIsODguNzQzNzcxODkwMDIxNiwzNzYuNDU0ODExNzEzNDU4MDcsMC4wLDAuMCw5ODAuNDY5OTM3MDk5OTU1MiwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCw4MTIuNzY1MjQyMDA4Mjk3NCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsODA3Mi43OTg2MTc5NjkyNTIsNjQ0MS43MDA1NTI5NDE0MDU1LDc4LjkxMjIzNjIzNzk0NDgsMTI4LjYzOTg1MTQxODk1MDgsNDQuNDA4MjMzMzYyNTc2MjcsOTcuMDM1OTIzODQ3MzQ3MTgsMjkuOTg0MzcyMzUzMTg1MzUzLDU4Mi4yNTYwODgxMzg0Mjc1CiszMixGcmkgMjUgRmViIDExLDEzMi44OTM5OTM5NjIwMDQwMywxMTUuMjY0MDk2OTM5NjczNDIsMTE4LjU1MDExMDg2NDkyMzQ0LDQ0MC44MDA3MTgyNDQ3MjQsNzE1LjY2NzMwODc4MTc1Niw1NjEuNjA4MDE2ODM2MTQ5NSw4MTkuODE5Njg0ODM4MDUyNywwLjAsMjc0OS42MjExOTgyMDA3ODE3LDE2OTYuNDIzMzM2MjgyNDMxOCwxNDc1LjIxNzY0NzA1MzQwMDIsMTMwMy4zNzY0MDUwNTUxODk1LDUzNC4xMzgxMzgzODg4NTc5LDcyOC41NTc4NDcxMjY1NzQyLDE0MjQuNTQwNzU0MzQyODE2NCw2MTUuMTMxOTQ4MDcxMjg3Niw4NDIuODg4NDgxOTg5NzQ5Miw4NzAuNDY5MjM2Nzc0MjgwNSwxMDIyLjE5MjgyOTAzMTA3MzQsOTQ3Ljk1MzcyMzYyMzM5NjksNDU0LjE0ODQ4NDc0NTE1MDU0LDAuMCwyNzIuMDc1MjI0ODIwMDEyLDEzMy4zMjg5NjEyODMxMjY3MiwyNi40ODkxODMxODU2Mjk1MzUsOS42OTAzMzgxMDIwNTc3NTUsNTIuNjcwODU0ODMwMjY5OTUsMTM1LjgxMTU1MzY4MTY0NjU2LDEyOS4zNDM4MDYyNjA2MzgyMiwxMDQuOTUyNjU0ODgzOTE3OTIsMTA4LjAwMzY5MDIzNTExNTE0LDYzLjI2NTgwNDk0NDQyNjE2NSw4Ljk0MTA2NTQ3ODcwODIxNCwxNjEuOTI4Mzg1NjY4NDM4MTIsODIuOTgzMTgyODMwMjc4NjgsMTEyLjE2MjIzMTk0MzY2MDI1LDAuMCwwLjAsMC4wLDAuMCw4OC4wMjc0OTQzMjg1ODg5Miw3Mi40MDI5NTA1MzE3MTQzNywwLjAsMzIzLjQ1NjExNzkxNzQ1MjA1LDUzLjI0NjI2MzEzNDAxMjk2LDIyNS44NzI4ODcwMjgwNzQ4NCwwLjAsMC4wLDU4OC4yODE5NjIyNTk5NzMyLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDQ4Ny40MjA0NzQ2MzQ1OTk0MywwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsNDg0My42NzkxNzA3ODE1NTEsMzg2NS4wMjAzMzE3NjQ4NDMsNDcuMzQ3MzQxNzQyNzY2ODcsNzcuMTgzOTEwODUxMzcwNDgsMjYuNjQ0OTQwMDE3NTQ1NzYsNTguMjIxNTU0MzA4NDA4MywxNy45OTA2MjM0MTE5MTEyMTIsMzQ5LjU5MjE3NTc0NzI5OTYKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0VJUl9GRF9SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vSV8wLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0VJUl9GRF9SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vSV8wLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYTc5NzdjCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTRUlSX0ZEX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9JXzAuY3N2CkBAIC0wLDAgKzEsMzMgQEAKK2l0ZXJhdGlvbix0aW1lLHN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL25vZGUvdHJhbnNwb3J0L3BpcGUvUEhMCisxLFR1ZSAyNSBKYW4gMTEsMC4wCisyLFdlZCAyNiBKYW4gMTEsMC4wCiszLFRodSAyNyBKYW4gMTEsOS44MDczMzkwMDg1MzcyMjNFLTQKKzQsRnJpIDI4IEphbiAxMSwyLjkyMjI3NDIxMjg1MDIzNUUtNAorNSxTYXQgMjkgSmFuIDExLDAuMTAzNjgwNTEyMDg4OTczNjkKKzYsU3VuIDMwIEphbiAxMSwwLjA0OTk3MDI2MjY3MDc3MjM1NgorNyxNb24gMzEgSmFuIDExLDQuNzA1ODc5MTYzNzc4NDE3Cis4LFR1ZSAxIEZlYiAxMSwzLjA4NjM5ODMzMTc2ODUxNQorOSxXZWQgMiBGZWIgMTEsMTYzLjAwMDQ1MzY5Nzk1MTMxCisxMCxUaHUgMyBGZWIgMTEsMTMyLjMzMDI4Mzg3MjkzNTY0CisxMSxGcmkgNCBGZWIgMTEsNDkyNC45ODQ5NDQ2ODc5MzUKKzEyLFNhdCA1IEZlYiAxMSw0Nzk5Ljc4NzM1MjI5MDg2NAorMTMsU3VuIDYgRmViIDExLDI3NjY1Ljk1NzM4MTU1MjI2NworMTQsTW9uIDcgRmViIDExLDI3MTk3LjYyOTkxOTI4MjU1CisxNSxUdWUgOCBGZWIgMTEsMjIyODEuNDg5ODM3NjQ4Mjk2CisxNixXZWQgOSBGZWIgMTEsMjE5NjEuODAyMDU1NTI5NDkKKzE3LFRodSAxMCBGZWIgMTEsMTEzMjQuNTY5MTUxMzI1MzczCisxOCxGcmkgMTEgRmViIDExLDExMDc2LjY2NTM4ODI0NzM3MQorMTksU2F0IDEyIEZlYiAxMSw3NzY3LjIwMjA4MDE1ODM1NworMjAsU3VuIDEzIEZlYiAxMSw3NjE5LjkwNjg3NTUwMDk1CisyMSxNb24gMTQgRmViIDExLDU3MjEuNTI4ODU1NTEwODg5CisyMixUdWUgMTUgRmViIDExLDU1ODIuOTUxNjE4MTU4NjgzCisyMyxXZWQgMTYgRmViIDExLDM1NjEuNjU1MDkzOTc3MDQzCisyNCxUaHUgMTcgRmViIDExLDM0NjQuMDg2NzkxNDQ4MjMyCisyNSxGcmkgMTggRmViIDExLDIzMTQuOTc1NDcxMzAzNjYzNworMjYsU2F0IDE5IEZlYiAxMSwyMjM5LjMyNDE1NzUzMjExNAorMjcsU3VuIDIwIEZlYiAxMSwxNDQxLjYwODI4MDY5MTQ2OTQKKzI4LE1vbiAyMSBGZWIgMTEsMTM3NC4yMjMyNzI4MzM0MDA2CisyOSxUdWUgMjIgRmViIDExLDg3Ny4xMDg5MzkxOTkyNDM5CiszMCxXZWQgMjMgRmViIDExLDgxNC45MTc3ODE0NzMzMTU3CiszMSxUaHUgMjQgRmViIDExLDQ5NS44NTUzNTg2NDU5NjY3NgorMzIsRnJpIDI1IEZlYiAxMSw0MzYuMzUzOTkyOTkyNzEyNQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTRUlSX0ZEX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9JXzEuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTRUlSX0ZEX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9JXzEuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNiMGIxZTUKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNFSVJfRkRfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL0lfMS5jc3YKQEAgLTAsMCArMSwzMyBAQAoraXRlcmF0aW9uLHRpbWUsc3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vbm9kZS90cmFuc3BvcnQvcGlwZS9QSC0xMSxzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9ub2RlL3RyYW5zcG9ydC9waXBlL1BILTMsc3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vbm9kZS90cmFuc3BvcnQvcGlwZS9QSC03LHN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL25vZGUvdHJhbnNwb3J0L3BpcGUvUEgtTkNSCisxLFR1ZSAyNSBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wCisyLFdlZCAyNiBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wMDIwMzE4OTU2NzQ2MTUwMzg1CiszLFRodSAyNyBKYW4gMTEsMC4wLDAuMCwwLjAsNC4wMjI1MDUzNDg5MDQ4ODA3RS00Cis0LEZyaSAyOCBKYW4gMTEsMi44NjMzNzgwODM1NjMwOTZFLTcsMS4zOTUzODY2OTk0Mzc4NjI1RS01LDcuMjY2NDI3Mjk5NzkxOTkyRS01LDAuMTA2ODU1NjM2MDI1Mjk2MTYKKzUsU2F0IDI5IEphbiAxMSwwLjAsMC4wLDAuMCwwLjA0MDE3NjA1NzE0NDMwOTMxNgorNixTdW4gMzAgSmFuIDExLDQuNTEwNjg5NjcwOTgzODAzRS01LDAuMDAyOTA2NjkyMTI3ODM0NDU4LDAuMDExNDQ2ODYyNjI2ODg1NDY4LDMuMjc0NzMyNjg3MDM0MDM2Cis3LE1vbiAzMSBKYW4gMTEsMC4wLDguNzg5OTI4MDA1NzA4NzI5RS00LDAuMCwxLjc0Mzk0NjQ5ODc3OTUzNjEKKzgsVHVlIDEgRmViIDExLDAuMDAyNzYyMzczOTE0MjgxNTg4LDAuMTkxNzQ0NjEwNTA3Njc1MzMsMC43MDEwMjQwMjc3OTQxNzQ1LDg3LjQxOTQ0Mzk5OTk3NzI2Cis5LFdlZCAyIEZlYiAxMSwwLjAsMC4wNjk0OTIzMTM1OTAwNTc1NywwLjAsNTcuODY2NjM0MzQyNjc4NQorMTAsVGh1IDMgRmViIDExLDAuMTE3Nzg0MjQ3MTE0NzA1ODksOC40OTMzNzA5NjI5NDQ1OTYsMjkuODkxNzEzMjM5MzIyODUsMjIwMC45NzA1MDQyNDY2MzEKKzExLEZyaSA0IEZlYiAxMSwwLjAsMy4zMTc0MzUyNTM3MjA5NzksMC4wLDE5NTcuOTYxMzU4ODA4NzI0CisxMixTYXQgNSBGZWIgMTEsMy45NjIxOTkwMTM4MzIzMTYsMzA3Ljc4MzQ4Mjk5NjkyNzE1LDEwMDUuNTg5NDcxNzUwNjE3MywxOTcxMC44Nzc4OTMxMDA3NDcKKzEzLFN1biA2IEZlYiAxMSwzLjMyOTE5MTkzMTQxMDY3NzMsMjg1LjkxNDM3NTE1MTA4NjgsODQ0Ljk2NTcwMzQwMDM1NjEsMTkwNjguODAxNDIyMjEzOTI4CisxNCxNb24gNyBGZWIgMTEsMTMuNTk3NDU2MzkwODM2NTc3LDEwMjYuNDc5OTc5ODk3MDk4NSwzNDUzLjAyMzE5NDIxMTA4OTUsMjE0NjcuOTc3Mjc4ODE0NDkKKzE1LFR1ZSA4IEZlYiAxMSwxMy4wNjkzMjMwMTgxMTU5MzMsMTAwNC45Mzk5Njc0NDYzNTU4LDMzMTkuMjIzNzk3MDY4MDczNSwyMTEwNy45NTM0NTY0NjU1MjIKKzE2LFdlZCA5IEZlYiAxMSw4LjQ5MjE2MzA4NDQ4MzA2NiwzMzcuNDQyNDUwNTQ5MjczMSwyMTM1Ljk5MjM2OTM3MzYyMSwxMTI3OS44MjI3MTcyMjYzMjcKKzE3LFRodSAxMCBGZWIgMTEsOC4wNjg2MzU5MjIxMjU5MDMsMzU4LjQ5OTQyOTk3NTUwMDcsMjA0MS4xMDYwMDQwMjk0NzEzLDExNDUzLjM2ODkyNDgxNjU2MworMTgsRnJpIDExIEZlYiAxMSw1LjgwMzgwMTQxMTgzMzcwOSw0MDMuOTU1NjMwODk1MTc5MiwxODg2LjAyMTUwMzQ3MTk1ODYsODA0OC4xNjc5NzQ4OTE0MjgKKzE5LFNhdCAxMiBGZWIgMTEsNS4yNTM0MDUyMDk0NTA0MjEsMzk3LjMwNDE5NzA5NzI4OTI2LDE5MzUuNjE0ODU2MjUyNjA0Myw4MDUxLjg0Njc1MTkzMjY0OAorMjAsU3VuIDEzIEZlYiAxMSw1LjMyODU1MDU5NzAzMzc5MywyMTkuNzQ5MDgyMTUyMDc4NSwyMzc3Ljg5MDgwODM3Nzg3Niw1NDk0LjU5MzM5OTQyMDk2MQorMjEsTW9uIDE0IEZlYiAxMSw0LjkwNjU4MTMzNTM5MzkyNSwyMjUuOTE1MjM4MDg4ODk4NzgsMjMyMS4xMjU0MjE2MzU5NDk0LDU1NDQuNDQzNjYyNjQzMDQ2CisyMixUdWUgMTUgRmViIDExLDYuNzU4NDk1MjY5Mzc0NzcxLDE4NS41NjYwNjA0NTI1MzgzLDExNjQuNzg1NjA3NDg3NTU3LDM4NjkuOTc5ODU4MDkxODY4NworMjMsV2VkIDE2IEZlYiAxMSw2LjYyNDQ1MDU2MjQ5NDI0MiwxODQuMjI5MTYxNzM5MzY4MDcsMTIxOS42MjMyNzI2MDY0MjU2LDM4OTAuNzU1MjE5ODM5MTEwNAorMjQsVGh1IDE3IEZlYiAxMSw4LjA0ODIxNDg4MTU2NzkxLDEwNC4wNDAwNTQ1NzMyNjAxOCwxMTE4LjQ3OTU0MjU3MTE5OTUsMjI1OS4wNjY5MjgxODQyNjc1CisyNSxGcmkgMTggRmViIDExLDcuODgwMDI5MTYxODIwNTUyLDEwOC42NTY1NTI5ODc0ODEsMTEwMy4zODU0MjczMTk2MTQ2LDIzNTYuNDY2NTk4NTU5MjMyCisyNixTYXQgMTkgRmViIDExLDUuNjY3ODM1MjA3Njk5NDEsNzMuMjQxNjQ0MDU0MTg0MjMsNjM1LjgyOTk0MTc0NDU3NTgsMTQ4My4zMjI1MTM4NDgxNzg1CisyNyxTdW4gMjAgRmViIDExLDUuNjkzMTE4NjE5NDI0Nyw3My45MjQ4NzUyMTUxMjk4LDY2MS41MjQ3ODM5OTM3MzY2LDE1MDUuNDA2OTY0ODQ5OTQzMworMjgsTW9uIDIxIEZlYiAxMSw0LjY3MDA5OTk4MTgzNTU2MSw0Mi4zMTQ1MzAyMjk5MTEwMTQsNDY0LjkzMjg4NDM2MzM1MTA0LDgzNy4xODMzMDQzNTA3NjEKKzI5LFR1ZSAyMiBGZWIgMTEsNC42NDg3MzQ5NzExNTcwNDIsNDMuNjk1OTM4ODUzMTI5OTksNDY4LjYyMjg3Mzk0ODM4NDg0LDg0OS45NjExOTE1ODEyODA5CiszMCxXZWQgMjMgRmViIDExLDMuMTQwMjIzODczMDY5NTYyNiwyNC42NzM4Nzk0NjA0MjkwNTYsMjc5LjA2NjMwMTE4OTI5Mzc3LDQ1NC41ODI4MzczNzY5OTI2NAorMzEsVGh1IDI0IEZlYiAxMSwzLjE4MzIyNjE2MDYyODcyNTMsMjQuMDc5NDE0NzUxMTc5ODQ3LDI4OS40MzY4NDg4MTE4ODY4LDQzNC42NDk2MjQ4OTc3NDU3CiszMixGcmkgMjUgRmViIDExLDIuMjAxOTI4ODg4NDE2MjU1MywxMi4zMDU3MzgwNDI4MzkzNDYsMTcwLjk0OTQ0NDc2NDM5ODEsMjE1LjEwMDY3Njc5ODQyODY1CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNFSVJfRkRfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL0lfMi5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNFSVJfRkRfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL0lfMi5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTg4ZTcyMgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0VJUl9GRF9SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vSV8yLmNzdgpAQCAtMCwwICsxLDMzIEBACitpdGVyYXRpb24sdGltZSxQSC0xLUc2NDAwMDEsUEgtMS1HNjQwMDAyLFBILTEtRzY0MDAwMyxQSC0xLUc2NDAwMDQsUEgtMTAtRzY1MDAwMSxQSC0xMC1HNjUwMDAyLFBILTEwLUc2NTAwMDMsUEgtMTAtRzY1MDAwNCxQSC0xMC1HNjUwMDA1LFBILTEwLUc2NTAwMDYsUEgtMTAtRzY1MDAwNyxQSC0xMS1HNjYwMDAxLFBILTExLUc2NjAwMDIsUEgtMTEtRzY2MDAwMyxQSC0xMS1HNjYwMDA0LFBILTExLUc2NjAwMDUsUEgtMTItRzY3MDAwMSxQSC0xMi1HNjcwMDAyLFBILTEyLUc2NzAwMDMsUEgtMTItRzY3MDAwNCxQSC0xMi1HNjcwMDA1LFBILTItRzY4MDAwMSxQSC0yLUc2ODAwMDIsUEgtMi1HNjgwMDAzLFBILTItRzY4MDAwNCxQSC0yLUc2ODAwMDUsUEgtMy1HNjkwMDAxLFBILTMtRzY5MDAwMixQSC0zLUc2OTAwMDMsUEgtMy1HNjkwMDA0LFBILTMtRzY5MDAwNSxQSC0zLUc2OTAwMDYsUEgtNC1HNzAwMDAxLFBILTQtRzcwMDAwMixQSC00LUc3MDAwMDMsUEgtNC1HNzAwMDA0LFBILTQtRzcwMDAwNSxQSC00LUc3MDAwMDYsUEgtNC1HNzAwMDA3LFBILTQtRzcwMDAwOCxQSC00LUc3MDAwMDksUEgtNC1HNzAwMDEwLFBILTQtRzcwMDAxMSxQSC01LUc3MTAwMDEsUEgtNS1HNzEwMDAyLFBILTUtRzcxMDAwMyxQSC01LUc3MTAwMDQsUEgtNS1HNzEwMDA1LFBILTUtRzcxMDAwNixQSC02LUc3MjAwMDEsUEgtNi1HNzIwMDAyLFBILTYtRzcyMDAwMyxQSC02LUc3MjAwMDQsUEgtNi1HNzIwMDA1LFBILTctRzczMDAwMSxQSC03LUc3MzAwMDIsUEgtNy1HNzMwMDAzLFBILTctRzczMDAwNCxQSC04LUc3NDAwMDEsUEgtOC1HNzQwMDAyLFBILTgtRzc0MDAwMyxQSC04LUc3NDAwMDQsUEgtOC1HNzQwMDA1LFBILTktRzc1MDAwMSxQSC05LUc3NTAwMDIsUEgtOS1HNzUwMDAzLFBILTktRzc1MDAwNCxQSC05LUc3NTAwMDUsUEgtQ0FSLUcyMzAwMDEsUEgtQ0FSLUcyMzAwMDIsUEgtQ0FSLUcyMzAwMDMsUEgtQ0FSLUcyMzAwMDQsUEgtQ0FSLUcyMzAwMDUsUEgtTkNSLUc1MjAwMDEKKzEsVHVlIDI1IEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMS4wCisyLFdlZCAyNiBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuNTk3OTY4MTA0MzI1Mzg0OQorMyxUaHUgMjcgSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDEuMjUxODYyMTc5NzQxODgxNCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjU5ODQ4ODQ1MDI1NTAzMzgsMC40OTI5MTY3MjcxNzA3Mjc0MywwLjAsMC4wLDAuMCwwLjAsMC4wLDEuMzU1MDIxNTk2OTE0MTk1NCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMTcuODkwMjY4NzU4NTgwODk1Cis0LEZyaSAyOCBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMi4yNTA4MDc2NDM1MTU5NzU2LDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDEuMDc2MDYyOTA0OTgyNTc5LDAuODg2MjQ4NDMwMTAyNTE5OSwwLjAsMC4wLDAuMCwwLjAsMC4wLDIuNDM2Mjg0MzA1NTM2OTE5LDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwzMS42NjQ3MTExMzcxNjc1NjUKKzUsU2F0IDI5IEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwxLjQ4MTMzNzUyMzE1MTA4NjRFLTcsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCw0Mi4zNjA4NjY5Mjk0MTMzMiwwLjAxNzUyMTYzODEzMjAxODM1NCwxLjE4MzA1MTIwNzQ2Njg1OTgsMC4wLDAuMCwwLjIwNzYyOTExMzYzODAwMjI0LDAuMDMwOTYyMTE0MDUzNjkwNDUsMjAuNzI1MTI5MzU0MzMwMTY4LDE5LjIzMzUxNjg5NzQ4Njc0OCwwLjAsMC4wLDAuMCwwLjAsMS4wMTI4MjAzNzM1Mzg0NzIyLDQwLjU4MjE1MDgzMjg2MjgyLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwzLjc1OTE0NTc3NzUwNjI5RS01LDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMzQ3LjI5NTA1NDY1MjkyNTQKKzYsU3VuIDMwIEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCw4Ljg4NzkyNDA4OTM4MjE3RS04LDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMTIxLjUxMDYzNTI1NTU2NzM3LDAuMDUyNTI5MzAyNzk4NTYyMzUsMy41NDU5NzIzNzkwNzE0ODcsMC4wLDAuMCwwLjYyMjQ2NDM5Nzg2MzQ4NDEsMC4wOTI4MjM0MTc2MzA5ODYzLDU5LjUxMDczNzI3MTg0NTk3LDU1LjUwMTY2MTQ2MjUyNTUzLDAuMCwwLjAsMC4wLDAuMCwzLjAzNjQwMDQ3OTU3MjU5OSwxMTUuNzI1MDMwMDg2MDUwNTQsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDIuMjUxODAxNjg5NDk1Mzk3MkUtNSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDk2Mi44NTc4OTg1OTE1MDIyCis3LE1vbiAzMSBKYW4gMTEsMC4wLDAuMCwwLjAsMS4yNzk2ODkyMTEwNDUxMzJFLTQsMC4wLDAuMCwzLjQwNDE4OTgyMTI0MTI3NDdFLTksMC4wLDAuMCwwLjAsMC4wLDEuMDAzMTM2Mjc3MTI4MDg0RS05LDMuOTc4MDUxMjQwNTE2ODQzRS01LDAuMCwxLjAyNDI3MTk3MDY2MTg4MTdFLTksMC4wLDAuMCwwLjAsMC4wLDguOTE1NDQwOTExMDY2MDM4RS0xMCw5LjAyMzU1NDg4NTM0NTE1N0UtMTAsMC4wLDAuMCwwLjA1MDkzNzMwMjU4MTQwODE1NSwwLjA1NjAzMTM5NDU1MjkyNjc2NSwwLjE1MTkxNjUyOTA4MjUzMjA2LDAuMDIxMDc1MDIzMTg5MzI1MTM3LDExNjMuMzcwMjA0NzQxOTM0LDEuNTkyNTM3NDQxNjcxODI3Niw2My4xMzUyOTMxNzc2NzY0MjQsMC4wMjgxNzc3NzI5NzM0NDgyMTgsMC4wMTkyODg2OTE5MjM2MTUyOSw5Ljg3NDUwOTM2Njk2NjIzOCwxLjc3NzE4ODg0NTA1OTcyOSw1ODIuNjA0NTUyNzY3NzMyNSw1ODMuMjA4MzM2NDczMTg3MywwLjAsMC4wLDAuMCwwLjAsNTYuODI3ODY3MzEwMzA0MDgsMTAxNS44NjIwNjI3MTQ4ODYsMC4wLDAuMCwwLjAwNDcwMDQ5NTcyODE1MDc3MywwLjAwNDcwNjMxMTU5MDc1NjE0OCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAxMDA5NTg2Njg3NTEzNzgwNCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDcxODQuMDc2MzM5NjUyNjQKKzgsVHVlIDEgRmViIDExLDAuMCwwLjAsMS4xNDkxMTIyNjkzNzgyOTg4RS02LDAuMDAxODUyODAwNzI1OTg2MzA4LDEuMjQ4NTYxMDEyNjEzNzhFLTEyLDEuMDk1MDcwNTU4NTE5OTI5RS0xMCw5LjE4NjA1ODQzMjk3ODM5N0UtOCwwLjAsMC4wLDEuMzQ1MTg1OTk0OTE0NzA1OEUtMTIsMC4wLDIuNzIzNDQ4MjI2NjA2NDI5RS04LDMuMzAxNjM0MDQ4MTYwNzE0N0UtNCw0LjU2NTQxNzA3NjE5ODI3MkUtMTMsMi43NzYyMDM1Mjk2NTc2NTI4RS04LDAuMCwzLjI1MjAwMDk5MTgxMzU2MUUtMTEsOC40NDUyNzM3MTk0NTAxNThFLTExLDEuODk5NDAwMTA0NDgwNjEyRS0xMCwyLjQwODE4NDY5ODg2NjcxNzNFLTgsMi40Mjk4NzI2OTI1MzExNjYzRS04LDAuMCwxLjgyMTc5NzIzMTM2MDE5OTNFLTUsMC41MTExMDk3NzQ5MDUxMjM3LDAuNTY1MDY3NzExMjk2NjA2OCwxLjQxOTU4NzE3NjkxNjUwOSwwLjIxNjQ0ODc2OTkyNzM1ODM0LDYyNzcuODY3ODk3MTEzNzQ3LDEyLjg1MzA2NzYxODU5OTE5NCw0MjEuNTIyMDY5MDgyMzM3OCwwLjMxNTY4ODI2ODM2MTE5MzcsMC4xOTc2MDYyNzM1MzY3MTcxMSw2Mi40ODA0NTkyOTEyMzQ4NjUsMTIuMzAwNzgwODQ5MzUxMzA1LDMxODAuNjU0Nzc0MjIwNjQsMzI3NS41ODE2MDM0NDY4NTYsMC4wLDAuMCwwLjAsMC4wLDM4Ny4zMTI4NjcyMjQ2OTk1LDUyNzQuODM5NjU1NDQzOTI5LDAuMCwzLjA5MDk1NDA3MDcxODM5RS02LDAuMDQ5NDM0MDQxMTgzNDM5ODg2LDAuMDQ5NTA5ODYyNTA3MDQ3ODcsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wODM3OTY4MDM4MTM1NTYwMywwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wMDI1NDcxNDM3MjYyNTg2MTA1LDAuMDAzNTI3NTU2MjAyODgxODcxNywxLjU5MjAxMDE1NDAwMDQ2NzNFLTUsMi40Nzk4NDU1NjcyNDA4MzZFLTQsMzUxNDcuMzkxOTYxNDQ4MTEKKzksV2VkIDIgRmViIDExLDAuMCwwLjAsMS42ODgwNjk4Nzc3MjY4MzRFLTUsMC4wMjAxOTMzNDc5NDIxNzIyLDEuNTM0NzYwNDIxOTA0MjcyNkUtMTEsMS4zNDYwODYzNjI5NjQ4NDk2RS05LDkuODUxNDk3ODM0NTU3NTU4RS03LDAuMCwwLjAsMS42NTM1MzQxMTE4NTk3MzFFLTExLDAuMCwyLjkyMzMyNjYwNzg1NDMwNDVFLTcsMC4wMDMwNjk1MTg1Mzg2NDIxNTY3LDUuNjExOTE3NTMzMjYyMzI0RS0xMiwyLjk3OTIzMjcyMzYwNjIwMUUtNywwLjAsMy45OTc0MzU3MzkwNjc3MDg3RS0xMCwxLjAzODExMjgxMzUzNjE1MjRFLTksMi4zMzQ3ODcwNjc4ODYzMDM3RS05LDIuNTgzMDA4OTIxNzI3NzYwN0UtNywyLjYwNTA5NDMwMjcyMjc0N0UtNywwLjAsMi42NzYyNTcyMjkzNzg3NTg2RS00LDQuNzEyMjAyMzA2NTAwNTcxLDUuMjI1MTk2NTkxMzE1ODk3LDEyLjUxNDQ1NTA1ODQ5OTY4NSwyLjAyMjg4MzY1MDAxODQ2MzcsMzYxNDIuODE5NTk0NDY2MzUsMTA0LjgyNTA0NTc1MTcwMTc3LDI5NTcuMTg3MDU4NTg5NzA2LDMuMDkwODMyOTM3NDA5ODA1NiwxLjg0NDEzNTMxNzY2MjA2Niw0MTYuMTU5NzE4NTc3NDg4ODMsODkuMjA2NjU5NTgxNDk2NDQsMTg1NTguOTExMjc5NDYxNDMsMTk2NjcuOTY3MDIwNDkzNTQzLDAuMCwwLjAsMC4wLDAuMCwyNzY3LjA5Nzk1ODU3NTU5OSwyOTExNC45NDk0OTk2MzkyNywwLjAsNC41NDA2NzUzMDEyNTFFLTUsMC40NjgxNzM2NzUzMDQ4Nzk0LDAuNDY4OTY4MzkzMzU0MDM3MiwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjc3OTA2MjQ2NzY2OTQwMjYsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMDM3NDE4MDU4MTE2Mzk1ODcsMC4wNTE4MjA1MTMwNDM1NzY2NiwyLjMzODY5NTMzMzEyNDY3NDVFLTQsMC4wMDM2NDI5NDM1ODc3MDM0Mzc2LDE4MzYwNi4zMzc0ODg2OTI4NAorMTAsVGh1IDMgRmViIDExLDYuNTE0NDEzOTQ0MTg1ODQ4RS02LDAuMDAxNTE1OTkzNzAyNTE3MDc4NiwwLjAwMjI4MjAwMDM0NjQ3MjU1MiwwLjE2NDAyNTk0MDk5NjU3ODgsNC43ODA5ODcxMjg4MTEyODNFLTEwLDMuNjU5MDAzNjE4OTA5NTAxRS04LDEuMDI2NTY2MzIwOTcyMjA1RS01LDAuMCwwLjAsNC43MzEyMDQzNzI1Mjg3ODZFLTEwLDEuNTA1Nzk3MzcxMTgyNDkyRS0xNCwzLjA4MDcxNjY4OTUyOTU2OEUtNiwwLjAxOTUxMjc2MzAzMjExMjY4MywxLjYxNjQwNjkwNzI4MDg5NDZFLTEwLDMuMTMwMDQxNjEwNTU5MjM4RS02LDguOTc4NzQ0Mjk1ODQwNTIzRS0xMSwxLjA5ODQ5MjIxNTI1MjE1RS04LDIuODM3NTM4NTExMjc4NzJFLTgsNi4zNjEzMTMyMDYwMzU1NzVFLTgsMi42OTY4NDk3Mzg1NzI3NzI1RS02LDIuNzA0MjI2MjYxNTkzMjU2NUUtNiwwLjAsMC4wMDI3MDUxMDYzMDk4NTA2MzgzLDMxLjQ1MjA0NzA3MTQ5OTE5LDM1LjAxMjk2ODMxMjk3MTAyLDc5LjA5OTQzNjE1OTI0NTA3LDEzLjczOTQzMzE0Mzc2NTkzLDE3MDUzNC44MjI5MjEzMDA0LDY0Ny42MTU3NDAxNTg3NDk5LDE2MTU2LjUxMzU2OTg5ODkzNiwyMi4yNDYzNDg0NTMyNDUzODIsMTIuNTIyMzk1OTU4MzE4NDQ4LDIxNzQuNDc2OTQ4MTc2MDY1LDUwMy4xMDYwNjc0MDY4NTQzLDg4NjQ5LjA4OTMyMzE1MTMyLDk1OTc2LjYwMTcxMzUyNTA5LDAuMCwwLjAsMC4wLDAuMCwxNTMzNC42NzkyMTI1NDUwODcsMTMyNzI3LjEyMzgwMzI4OTY3LDAuMCw0Ljc2MTI0MzM0ODkxMDM1OEUtNCwzLjIyOTUyMzkwMDg0MzI5NjMsMy4yMzU3ODExNTUyNDk3NywwLjAsMC4wLDUuMzUwNjA5NDI0MTAzMDA5NEUtOCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCw0Ljk1MzA5Njc4OTgxMzg2NiwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDEuMDc1NDgxODE3MDU0ODQwN0UtMTEsNC40MjU3NjI5NTc3MjE0OTJFLTUsMC4zNzU2NzcyODc4MzYyMzgyNywwLjUxNzA1NTU0MzExMjU5NDcsMC4wMDI2Mzk1NTE4MjkzOTk4MTUsMC4wMzYwMzQ0MjUwNjkyMDY2Miw4MDU4OTkuNDA3NjkwNzg5MworMTEsRnJpIDQgRmViIDExLDAuMDA1ODkyNDg2ODU2MTEzMTcwNSwwLjU0MjU3ODMxOTk5ODc4MzgsMC43NzE4MTEzNDQxNDAxNjA0LDEyLjY0MDk3Njk0OTAyNTA2NywxLjY3MDkzODUyOTcyMzY3NDVFLTcsOC43Njg5NjUzNDAyMDYwODVFLTYsMC4wMDEwMjcwNTI1MDk4MjM5NzgzLDAuMCw0LjI4MTE2NjY0MjY4NDU0M0UtMTMsMS4zNDc2ODU4ODA2ODA1NTA3RS03LDIuODIxODIzNzU3NjIzNzcxM0UtMTEsMy4xNjM2Mjg3NjUxNzE2NTk3RS00LDEuMDU3NzYwNjQ0ODM2MjU1LDQuNjY5NzUxMjEzNDQ0Mzg0RS04LDMuMTkxODY0NDcwMDk5NTc5N0UtNCw5LjkzMTYxMTY0MzQ2NzM2NkUtOCwyLjczNTA4NDQ2MTUyNjMwNDVFLTYsNi45MzQ5ODA4NDc4NTUzMTZFLTYsMS41MzcyMTIyMjMwMzQ0NTY3RS01LDIuNzEyNDkzNzE4OTY3NjYyNUUtNCwyLjY4Mjg0MjM1ODk0ODI0MUUtNCwwLjAsMC4yNzYwMTgxNTQyMDM5MDM0LDE0ODEuNjI2NjI1NDc5MzkxOCwxNjYxLjMxODMyNzA2MzAzNTIsMjk5MC43MDg4Nzk4NTQzNjEsNjgyLjQ5MzU4MjkxNjk5Niw5OTYyNTYuMzc0MjYxODg3NywyNTM5OC4zNTE0MjA5NzcyMzMsMzA1MDYwLjAxNTM2NTY0ODIsMTMwNi4zNjYxNzMyMDU0NDg4LDYyNS4wMzY3MzUyMDg0ODMyLDMyMDA2LjQxNDIxOTU1NTcyLDE1NzExLjk3MDE0NTkzNjczOSw1NzUwNDAuNDE5MTMxNzA1Myw3MTg3MjkuODU1NjQ4MTU4NCwwLjAsMC4wLDAuMCwwLjAsMjg0NDE0LjgyOTk2ODQ3NzYsNjA1NzA3LjExMDU4MjA3NjgsMC4wLDAuMDUyODA4NTQ5MjkyMjMzNDM1LDE2Ni41NjkyOTkzMTYyMjc1NiwxNjcuMTE3NTI1NTc5ODg5OSwwLjAsMC4wLDIuMDkyNDA0MjU1OTY5MTc4MkUtNSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwyNjguNTgyMTAzMzU4MTE0MywwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsNC4yODI3MzgyNDI2MTYyMkUtMTMsMS4yMjc5MTM3MDc4MDQwNTAxRS04LDAuMDIyNzE2OTQyNjk4Njc1NjgsMzcuNjQ1NTE3MTgyMjM3OTQsNTAuOTg4Mjc5NjY3NzA3NjQsMC4zMzU0MjQ5NTAwNzQzOTE2NiwzLjQ4MjcxNjY1MTQ1MTE4OCwzMTM0MzkzLjQ1ODEzNzA2NzUKKzEyLFNhdCA1IEZlYiAxMSwxLjQyMzgwMjU5OTYwMDY2OCw3MC44Njk2NTQ5NDEyMTUxLDk5LjQ0MTU2MjY5MDQyNTI3LDcyNy4wMjM1NDM4ODQwNjI0LDMuMTQ4MDA0MjIyNjMyMzI3RS01LDAuMDAxMTM3NTMzMTk4NTE0MjM0NCwwLjA3MDQ1NjY5NzY4ODM5ODc1LDAuMCwzLjQ2MjE1MTI2NDI0MDk2MDNFLTEwLDIuMTkxOTIwODk3NTQwNDc5RS01LDEuMzU1NjgxNzQ1MDk4NDIwN0UtOCwwLjAyMjYxMDY1MDI2Mzg2NzkzNCwzMi4zNDc1NjA3OTkxOTQ3NCw3LjU5NjgwNzQzNTg2NzgxM0UtNiwwLjAyMjU2OTAxMDMwNTQ1ODMxMiwyLjc1NzMzNzAyODAwMDUwNEUtNSwzLjczOTI5NzI5MzQ3MzM3MUUtNCw5LjI0NTIxMzI0MzkyODUwMkUtNCwwLjAwMjAxNzYyOTM1OTQ5MTM5LDAuMDE4Nzk3ODc4OTU4MDA1ODcsMC4wMTgxODA5MDU3NDY4MDA1MywwLjAsMTguODE5NTU5Mzc0NTU2MTUsNDUxODYuNDE3Mjg4MTQzMDIsMzk5NTYuNTU1NzgzMjgxMTMsMzIxNzcuNzUyMDQ4OTE4NzY2LDIwNTE4Ljg4ODg4Mzk2NjQ4MywxMzY2ODIwLjUwODIyMDE3OTIsMzY0OTIyLjc1OTQxOTI1NTU0LDc0MzQ0MS4wMzY2NTIzMjA0LDUwNTQxLjI4NzA3MjA3ODYsMTk1NjkuODYwMjI3ODI2Mzc1LDY3NTAyLjY3MTIxMjYyNDg2LDI3NTE1OC41MjA1ODY3NjQ3Myw4MTI4MDguNjM3NjY5MDM3OCwxMDU5ODEwLjc4Mzk3Mzg5NzYsMC4wLDAuMCwwLjAsMC4wLDY0NDgwMS4zMzU0ODUwNzIyLDc3ODEzNi41OTk3ODc4NzE4LDAuMCwzLjg0NzUzMDIzNDQ3MjgzNzUsNTMxOS40NTc4MjE2MzI4ODQsNTQ0Ni44MjY1NjAwNTMzNTQsMC4wLDAuMCwwLjAwMzA0ODM3MDYyODA5MjM3MTQsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsODE4NS4zNzgzNzk0OTg1NTIsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDMuNDY0MDg5NjMxMzk5MTE1NUUtMTAsMy41OTc4ODI0MTQ4NTczODg2RS02LDQuMTE2ODA5ODcyNzM2NTE4LDI0MjAuMDU5MjU3MTM3ODc3LDMxNjEuNzMyNDk2Nzg2NTgwNywyOC4wODg0ODc1NDU3Mjc1MjQsMjIwLjU5MzQ2MjU5MTQwNjI1LDM4NzY4NzUuNjc5NDc4MjgyNgorMTMsU3VuIDYgRmViIDExLDEzNy42ODEzOTUwMjk2MzE3NCw0MTg1LjkxNTE0MjI5MDU2Nyw1NzY1LjExMjQ5NjMzNTMwOTUsMjExNjAuMDE5MDEzMjc4NjY3LDAuMDAyNzQyOTA5NTM3NTQyMzMxLDAuMDcxNjM1NDk5MjUyNzcxNTUsMi43MjMwMTMwMzU2MDgyNywwLjAsNi41MTYyNjkxMzg0NDg4NTdFLTgsMC4wMDE3NjIyNjE4OTEzNzM4NzA1LDIuMDg3NTIwMTI2NjUxODAxRS02LDAuOTI0MjA2NDIwMzg1MzQ0MSw3MzcuMDE1NTY0MjMxNzM5OSw2LjAyMzA1NDg3Nzg0NzI5NUUtNCwwLjkwOTU2NjkzMTM1ODE4NSwwLjAwMjg4ODgxNjkyNTY2MzkzNTUsMC4wMjUwMjkzNTU0MjI2MzA5NTQsMC4wNjAxMjk4OTE1MzE1NzM2NDQsMC4xMjg4NjY1NDE5ODY1Mjk4MywwLjczODg2MTM5NjQ3Njg5NDcsMC42OTIwODM5MDc2ODc1NTMzLDAuMCw3MDQuNjgzODA3NjgyMTAyNCwzNTI0MDMuODY2MTExNDY4MiwxMTQ5NTQuMjA3NjgyNTE1NjMsNTQ3NjYuODYxNTk3MjQ2NDYsMTQ2MjAzLjU2NDM3MzA4ODU2LDEzNzQ4MzkuNDYxMDQxNDksNjg3ODk3LjU2MjAxMjkyODIsODU1MDMzLjg2MjkyMTAxMjQsMzI4ODQ2LjEyNTY0MDg5MDcsMTYyMDE1LjE5MzM2OTM1MTQ3LDc1NjA1LjAyNjc2NTI0MTM5LDcyNzU3OC41NDI1MzEyNjYzLDgyNTIzNS45NTc5NTIxOTM5LDEwODk2ODEuNDE5NzE1ODI4MywwLjAsMC4wLDAuMCwwLjAsNzMxMjM2LjgyMzI1MzM5MDYsNzY1NzQ1LjE2MDg4NjcyNjUsMC4wLDE1OC4wOTkzNDA4OTcyNzg5NSw3NTEwMS4xNjE1Njc4MjM3NCwxMDc5MjYuMDYxMzQ1ODgxNjIsMC4wLDAuMCwwLjIxMjc3NDI5MzcxMTUwMTM2LDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDE2NjcyOS4wODIyODY2NDI1NywwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsNi41MjEyODA1Nzg1NTc3NzhFLTgsMy45ODgzMzkyNDk3NTIwNjVFLTQsMzMzLjg4MjQzNDE4NDM2Nzc1LDU2ODMwLjgyMzIxMzQ4MjM4NSw0ODY0NS41NDMzMTQ1MzA0NSwxMjk1LjU4MTQyOTg5MzkzNDcsNjU3My40MTYwNjM2ODk0MDg1LDM3NjQ0MjkuMzU4ODIxOTE0CisxNCxNb24gNyBGZWIgMTEsODI4OS4xNTQ0OTA2MzcwNjQsOTE0NTYuODIwNjY4MTcwNjcsMTExNzU2Ljc3NTYwOTAxMSwzNDMxMzMuNjc0MzMxMDA5MzMsMC4xODA2NzU5NTM5MzkwMjg3NCwzLjQ5MTUxODU2NjY1MDgzNCw5My4zNTgzMDgwNjkwODMxNCwwLjAsNy44Mjg4NTAzNzMwNzE4OUUtNiwwLjExMjYxNTQ5NDM2NzM5MTI3LDIuMTc4ODE1NjQzODQ1NjY4NEUtNCwzMy43Nzk5NDgxODY5ODMwNywxNzcwMS41NDAzNzY4MDA1OSwwLjAzNzM4NzA0NTk4NTk4NzI1LDMyLjc0MDI3NDU2MTY3OTUxLDAuMjEyOTg3MjI4NTEyODg1NSwxLjMxMTE0OTUyMjA1NjM1OTQsMy4wNDY3MDE0MjI4ODE1NTM0LDYuMzkxMjA0MDc2ODE5NTQ1LDI1Ljk0ODUzNzY4OTE4ODMsMjMuMzk1ODk2NDQ3OTE1NzE0LDAuMCwxODMyMC4wMTM4ODEzNTI0Miw1MzcxNjAuOTMwNTk3MDE4MywxMzY1NjYuNDIyMjU3NTI3MSw1ODQwMi43MjI5MDA2OTIzOTUsMjE2ODQzLjU0NTg3NjQ4NTAzLDEyMjE4MjYuMzMzNjM2NjIzOCw3NTA5MDkuMjMwNzExMjkyNyw4MDY0NDguNDY4NDAwMzE3OCw0NjM5MzguOTkxMDQ2OTg4OCwyNTE0MzEuODk1MTk2MDEzMzYsNzA1MzguMzI4NjMyMDg0MjIsODUxMzQyLjkyMDAxMzUxMzMsNzM2NzE4LjE4NTYzNDEyMjksOTc4NjgwLjMxNjA3ODg1MTksMC4wLDAuMCwwLjAsMC4wLDY4NTc1OS41NDgzODA5NjM3LDY3MzE1NS4wMzEzMDQ5NzM2LDAuMCw1MDcwLjE4ODcyOTIzNjI0MywxNjk3ODkuMzMyNjYwODcyOTUsNTEyMDIyLjg4MjMzMTEwNDgzLDAuMCwwLjAsMTEuNDAyMDI1MTg3MTI2MjI2LDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDk5MDk4MS4zMzQ0NDA5NTI5LDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCw3LjgzNjg2ODI2OTMzOTAyRS02LDAuMDMxNDkwMjIzNjgwNzk2ODEsMTQ1MTEuMzE1NDcyOTg3NjQyLDIwMDIxNy4wNTI0MjczMzA4NCw5MjgxMC45NDg3NTE1NzM5MywzMDU0Ny4zNDQxNzczMDc0NzcsMzcxMzAuNjcyNDY0OTM3MDIsMzI4NzA5NS42OTkxODg0NjA2CisxNSxUdWUgOCBGZWIgMTEsMTE1MjE4LjcwNTg0Mzk3NDQ5LDIzMzM3OC44NzE4MTgwNDE1NSwyNTM1NzEuMTcyMTg4MDA4MjMsODg1NDI5LjczMzQyNDIzMDcsNy4yODExMjE0NTg2NDMzMDcsMTEyLjY2Mzc4ODE5ODg0OTE2LDIzNjUuNTg2OTg2NjQ2MTQ4LDAuMCw0Ljc5MDU3OTk3OTMwNjUxNDNFLTQsNC41NzE0Njk3NDA3NTk5NTksMC4wMTIxMDk3MjQ3ODQ2ODc5MTQsOTExLjIwMjgyMzA2MjIyMzUsMjYzMTE1LjUxODg1OTYzOCwxLjQ2ODEwNjU5NTQwMjM2NTgsODcxLjQyMjg3ODU0OTUzOTcsOS4xMzI2NzQ4MTAwMzQ1NDQsNDUuMTEzMTM2MTA5MDEwMTMsMTAxLjgyMzE5NjkyNTcxMDY1LDIwOS41OTQ2Mzc5MTY0MDU2LDY3Ni44ODQxNDUwNzA1OTUyLDU4Ny43OTA5NTU5NjI3OTQ0LDAuMCwyMTM4MjkuNDI3NzY2NzkxNjMsNTU5NDU3LjU1Mjk0ODMwNTMsMTMwOTA3Ljk3MDgyNjQzNDUsNTM0NzguNjcyMjE3NjI2MDQsMjI0MDgyLjkzNTE3MTc5NzY0LDEwMTY0OTMuNDUyNDQzNjgxOCw2OTQ4NjIuODQ0MTg5MDA5Nyw2OTQzMjMuODY2ODQ0NzQ1OSw0NzIyNjIuNDkyOTAzMDkyMSwyNjMxNzkuOTY2NjYzODA2MzUsNjAzNjYuNjMyNzcwMjI2NTg0LDgxMTE3MS40MjkwMzYxOTg5LDYxNDU4MS44NTQ2MDgyMzEsODE5MzczLjM0ODQ5NjY1OTIsMC4wLDAuMCwwLjAsMC4wLDU4ODU2MC43NjcwODg5NzYsNTU2MzI2LjM2ODAyMDE2NjUsMC4wLDkxMDQ4LjY5OTQ5MjgyNDE1LDE5MzgxMy40NDkxMzczODEsNjg0MzE4LjczOTkyNDk0ODUsMC4wLDAuMCwzNzUuNTI5MTM5Nzc2NjcwMiwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwxNDA3MTEzLjkzOTE0NDAwOSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsNC43OTY2ODYyMTQwNDk0MDI0RS00LDEuNDM5NzczMTg5MjY5NTQ5MSw3MzAyMC41OTEyMTMzMDUyOSwyNTA1NTcuNTU1MTA4NjIxOTIsMTAyMTgwLjU1MDM5ODA3NTU1LDEwMzQxMC4zMjM3NDIzODE4Niw1MjA4OC4yMDk3OTY0NDM1NiwyNzA1NTc1Ljg1NDg3NjM3OAorMTYsV2VkIDkgRmViIDExLDIyMTc1MC40Njc2ODE1NjQ2LDI3ODY3OC4yMTA5Mjg0NTUxNywyOTUzODMuMzEwNzAzOTg5LDEwNjExNjMuMTA2OTAzNDAzMywxMjYuNjQyOTM5NDg0NDA5ODgsMTcwMC42MzE0OTIxOTA2NDUzLDI4OTU5LjU0Nzc1NjM4ODAxMiwwLjAsMC4wMTA2ODU5NDA4NjAwNTk5MSw4MC44MzMxMzQ2NzM5NTEzMiwwLjI1NDkwNDU5MTEyOTIzOTcsMTIwMzYuOTU4NTM4NzI4NjUzLDc0OTkyMy43MzYyNzEwOTUyLDI1LjMxOTcwOTI3MDU2MzIxNiwxMTM5MC43MTUyNzk4OTkzODEsMTY0LjA1NzQxMzg5Mjk3NzY1LDcxMy43OTQwMzM2NDUwODA2LDE1NzcuNjM1NjQ0NTk1Njg5LDMyMDMuMDM1MzUzNDQ0MDQzMyw4NjgzLjQxNDkwMjAzMjExOCw3MjM5Ljg3MzE4NzIwNDY5NCwwLjAsNDM5NTM5LjU4NjIxNTkzNjEsNTA5Njc2LjA3MDQwMDA5OSwxMTQwNDQuMTU1OTUyMzM3Niw0NTMzNi42NTAyMDUxMzIxMTUsMjAzMzMyLjYzNzUzOTM1ODIzLDgwODE1MC4wMDY1NDg4OTg1LDU5Mjg3NS42NzEzNzExMDA3LDU2NTQ5OS4wODE4MjQ3Mjc3LDQyNTIwNS40NTUyNjg3MjI1LDI0MDM2NS42NTk5MDAzMzkzOCw0ODk2My41Njc3OTM5OTU4LDcwNDIyNC44MTgwMDIzOTc0LDQ4OTU3OS4yMzQyMzU1NDY5LDY1NDQwOC45NjcwMzczOTUsMC4wLDAuMCwwLjAsMC4wLDQ3ODMyOS42MTUzOTQ1NTM3NSw0NDAxNjYuMDc1NjEwMjEzMiwwLjAsMzg3MzU2LjQ0NDIyODQwMTA2LDE4NDM4NC4xNzQwODA5NDUxMSw2OTI5NzIuNDE0MTgyOTU4MiwwLjAsMC4wLDUzODMuMjE3NTU5NTk2OTg0LDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDE0NTQyMTEuMjM0NDUzNzA1NiwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wMTA3MDE1MjY4MDYwNjA3MDQsMjcuMDcxNjg2NTE4ODMxMDIsOTk2OTEuNTM4MzE5NTEyOTMsMjQ3NjE0LjU3ODY5NDQzNzAyLDk1NjI4LjY2MDg3NjYxMTU0LDEzMTM5OS44NDI4MjcyODc4OCw1MzYzMC42NjYyOTM3NTE3MSwyMTM0NDIwLjEzNTY1Mzg3NjcKKzE3LFRodSAxMCBGZWIgMTEsMjU2NjI3LjY2ODczODQxMDYsMjc0MzkwLjM3MTE5Nzc2NjQ1LDI4NzQ2OS4wNzcxOTIyNTMyNiwxMDQ2NTk2LjAwNzkzNTE1MjMsNzA5Ljk2NTE4ODU0ODM5NjksODkzOS44MTk5MTQwNzQ2OTUsMTMzMDkwLjc2MDk4NDE3NjEzLDAuMCwwLjA2NjEzMTAwOTA3MTY4NjQ1LDQ1Ny4yMTc2MDUxMjUzODk3LDEuNTQxODQ4Mjg4MzgyNTk1LDU4ODgyLjU1ODc0NzI3MDcsOTQ2Njc3LjIyNzQxODU4NTIsMTQxLjY3MzY1ODM5MzMxODMzLDU1NDU5LjYzNTQyMzc3MTg1LDkzMS4xOTkzNjcwMzQxOTksMzg0Mi42NTU3NjExNDQ3NDksODQwNC41MjA2MzEwODQxNjgsMTY5NDMuODM4MjAxMzQ5OTIsNDE3ODAuNDcyOTgwODY3NDMsMzM4MzcuMDg2NzQyMjM4OTA2LDAuMCw1MTY3MjQuOTk0NzE3MzI5Niw0Mjk3ODcuNTA0MDY5Njg1MDYsOTMwNTguNjM4MTQxNDUwOTcsMzYyMTIuOTgxNzk0Mjc2ODYsMTcwOTc3LjkxODM4NjgwMTY3LDYxMTE4MC40MTQ2NjUxNDY4LDQ3NjAwMS40OTEwOTMzMTcxLDQzNjg4Mi42MDcxNjcxOTAyMywzNTU1NTUuMzA1ODY0MDUxNDUsMjAzMDQ5LjkxNzE2ODg0NjUsMzc2OTIuMzg3ODg5NjI1NjEsNTczMTExLjE5ODc5MjA2NjcsMzcwOTEzLjE0MjEzOTMwNzUsNDk2OTQ0LjQxNzgwMjIxMjcsMC4wLDAuMCwwLjAsMC4wLDM2ODg1NC4wNDgxMjc4NTQ1LDMzMTQyNi43NDc2MTM3NjQzLDAuMCw1MzMxOTMuOTE3MTI1MDcyOCwxNjAxNDMuOTA5MzAyOTQ0Niw2MjU4MjEuMzkzNzYyMzg5OSwwLjAsMC4wLDI2ODYzLjYzNTc0NTYwMzM4NywwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwxMzI4NzYzLjQxMDgwODc4NjUsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMDY2MjMyNjQ5OTc2Mjk5ODgsMTU2Ljc3MzIwMjQxMzQ5NjUzLDEwMzg0Mi45NTM1NTIwNDcsMjIwMzQxLjYzNzk1NjYxMTMsODIxNTQuMTc4NTEwMzkxMTEsMTMyOTc5LjgwNjIyNzM4MDkzLDQ4OTA3Ljc4MDczNDU4NTEyLDE2MDI5ODYuNzU1Nzc1Mjk5NgorMTgsRnJpIDExIEZlYiAxMSwyMjIyNDIuNjA2MjM1MjQyODksMjI2OTI4LjU1NjIwNTQ5MTYyLDIzNjg2NC42NTYxMzg2ODk5Myw4NjYwMjQuMjg0OTc1Mjg2NywxNjg3My43NDM1NzY2MTY5NywxMDY2ODUuOTcxNDMwNjQ1MzQsNDEyODQwLjIzMTQ4NTk3ODEsMC4wLDIuMzEwMTYxMjkwNTgyNDcxLDExODUwLjg0Nzc5MzcwODQxNyw1MC4wOTIxMzA5ODEwMDUyMjYsNDA0NjQ2LjY0MDEyNjc4NTk2LDgzNzM0OS40ODc2NzU2OTUsMzU1Ni42ODM3MzMxMjE1MzQsNDExMzQxLjA5ODY3NDcwOTUsMjIyODYuOTAzNjczNDg2NzMzLDY4MjY0Ljg5MTA4NDk2NjY3LDEyMjMwOC43NTg2MDU1Mzk5NCwyMDMzMzIuNTY5MDIxNjAzMSwyODcxMDIuNDMwMDYyMDc1NjcsMTcwMDA2LjU4MjE4MTYxMzQzLDAuMCw0NDkyODAuMzg3OTc5OTQ5LDMzNjYyMS44MTY4NzA2NzM2LDcxOTM3LjQyOTA1OTI0OTYsMjc3NDcuNTU1OTc3OTc1NTkzLDEzMzc2Ny4yNDIwOTAwNDAxOCw0NTcyNDcuNDgwNzU4NzMxODQsMzY1NTEyLjg0NTAyOTAwMzEsMzI5OTgwLjgzNzM3Mzk5NzU1LDI3NzU2NS4yMzgyNTM2NzEsMTU5MTQ0LjMzNTM4MzkyMjUsMjg0MjQuNTM4NzgxNDAxNzMsNDQyNTUyLjQyNDg1NDMxNTksMjc3NzE4LjM1NjA2NTE0MjIsMzcyNDc1LjAzMDg5ODQwNzU3LDAuMCwwLjAsMC4wLDAuMCwyNzgzNzEuNTMxMDE5ODMyMzYsMjQ3NDU3LjA0MjY4ODkzNDg2LDAuMCw0ODA2MjguNDkxMzkzODI1OSwxMjY4NTEuMjA1NTAwODcxOSw1MDI4MTIuMzUxMzYzMTAwOSwwLjAsMC4wLDE4MzUyNi42MjgyOTExNjAyNSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwxMDcxNzM5LjQzOTMzNzI4NjIsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDIuMzE0MzI1MTQyOTgyNTYyLDQ0NTkuMTEzOTExODM1NzI4LDg3MzY2LjUxODAyMzQ2OTg4LDE3NjA5OC4yMzE5MTgwMjY5Niw2NDgwNy42MDczMjMxNzExODUsMTEwOTE5LjExMTM1MTI3MjEzLDM5NDI5LjcwNTc4NTY4ODEyLDExOTU2MTQuNTcyMTE4MjY2NQorMTksU2F0IDEyIEZlYiAxMSwxODE1ODYuMzYyODgxODYzNSwxODAxNTUuNjczNjgyNDcxNzQsMTg3NTkwLjU1NjA5MzAxMDAzLDY4Nzc2Mi4zOTE0MzMxNTk3LDE0MTExMS41NDA0NDI0MDgwNiwyMTQ3NTkuNTIwNTA1ODEyNiw0ODQ4MDEuNTU1NDMwMDcwMjYsMC4wLDk1LjczNDIzMjI4NjAzNzAzLDE5Mzc4MS4xNDQ2MjczNzM5LDE3MjIuNDAzMDYwMzMyNjMxNCw2MDM4NDAuOTAzMTk4MTkxMiw2OTI3NzkuMjU0MDM1NDQwNyw2MjQ1MS45NjI4MDQ5NzkyOSw2Mzk0NjguODc0MjIzMDMxMSwxNDI2NjYuMzU5ODk1MzY5MzMsMjQ2ODQxLjIxNzI2MzUyOTUsMzAxNjYxLjU3OTYzODMwMiwzOTc1MDcuOTE0MDUxMjgwOTQsNDM0NDAyLjg5ODI4NzI4NDc3LDIyOTY0MS4wMTk4OTQ1MjcxOCwwLjAsMzY3OTcxLjAwMzEyNTEwMywyNTc1NDcuNzY3MDI1MjYwODcsNTQ1MjMuMjAxMDE4OTY0MjcsMjA4OTQuOTE2NjMxNTYzNzg1LDEwMjI2NC40Nzk4NzgyMDM3OCwzMzgxNzguNTI2MDA2MzcwMiwyNzU2ODAuNzQyNzQ1MDQzNSwyNDU4MzUuMjk2NDc0NjU3NTIsMjExODY1Ljk3ODAzNjUwNjUsMTIxODIwLjMwNDgzMzI0ODAyLDIxMTUwLjk4MDAwMjk4NTc5LDMzNTE1Ni40MDY4MTA1Mzg5LDIwNTUyNi45NjEzMzAyNzM2LDI3NTg3NC45MjAwMjA1ODY3NSwwLjAsMC4wLDAuMCwwLjAsMjA3MjU4LjU2OTM3Njk4MTg4LDE4MjczNi4wMDI4MTM3OTI4NSwwLjAsNDAxOTg1LjE5NjkwNTA5NDQzLDk3ODI2LjI5NTI4OTgwMjMsMzkxNTc3LjIwMDkxOTMzNTQsMC4wLDAuMCwyNzMxMzQuMTQ0NTk0NSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCw4MzY3NTkuNjUxNDU0NDEyNSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsOTUuOTU3NDg5MTU1ODIyNjYsMTE0NjQ2LjcxMTQ4NTk4NzQxLDcwMTIzLjk2ODkzNTY2MjQxLDEzNjY0NS43ODc0NzE4ODY1OCw0OTgzNS4yMjQwMDIzNzQ2NTYsODg1NDEuNzgwMDgyNDQ5MTksMzA3NzguNDAzNTkxNzUxMzQzLDg4MjI3Mi41MTY2Nzc0NTM5CisyMCxTdW4gMTMgRmViIDExLDE0MjU3Ny40NTQ4NDY3NjY4LDEzODM5Mi44Mjg5MTAzOTAyLDE0MzgzMi42NjYwMjE2MDM5NSw1Mjg0NzAuMzkyNjg3MjEyNCwyMjM4NDguODgyODQwODE2NzIsMjQzMjg1LjMzNTA2OTE3MzQ4LDQ2NjQ5OS44MDMyNTIyODU5LDAuMCwxNTk2LjgwNTc0MjkwOTkyNCw0Mzg1MjIuOTQwMDIzNTg2NSwyMjI3Ni4xMjI3ODQxNDQ4MzQsNjMzMTUxLjI4ODE2ODIyOTUsNTQ4OTY2LjIzNjM1MTM2MTcsMTcyNzU4LjE1NDI1ODQ4NDI4LDY3ODY3OS42NzY3MjUzOTE5LDIwNjMwMC4yNjkxNDcwOTEwNSwzMTYwNjYuNjY4NDAwMjQ3NzYsMzU2Nzk1LjQ5Nzc4NDUzMjY2LDQ0NzExMS42NTg5MzAyOTQ4LDQ1NzM5MS4xODUxMDE1NjkyLDIzMzEyMS44MDY3MjM3MjgxNiwwLjAsMjg5NDM0LjgwMDg5MDE3ODEsMTkyMDM4LjI2MzA3NDk0MDMzLDQwMzM0LjE0MjY5NDY1NTkxNSwxNTM3Mi4xMjM1NjA0MDQ5MDIsNzYyMDIuNzY3OTA0NTQwOTcsMjQ0OTEyLjQ5ODUyNTEyOTE3LDIwMzA5MC4zNTI5MTE5NDgxLDE3OTE4Mi45Mzk0NzU2ODU2MiwxNTc2NjYuNTU0MTU2MDIwNTIsOTA4NzEuMzc5MzYyMjI3NTQsMTU0MDAuMjYzOTIyMjIyNTE3LDI0Nzc2OS4yMDQwNTU3ODc2NSwxNDg5MjYuODA3NzE4ODk0NSwyMDAwNDQuNzcyNjg0NjUxOTgsMC4wLDAuMCwwLjAsMC4wLDE1MDk4My42ODcyMjkyMDg4MiwxMzIxNTcuODM4MDA3ODM0MDQsMC4wLDMyMTAzMS43MTkwOTE0ODIxNyw3MzQyMy44NDQyNTg4NjI1OCwyOTYyNTEuMzcyNTQ0MTI3LDAuMCwwLjAsMjg2MTU3LjI5NDY5MzUyMDUsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsNjM0Mjk4LjgwMjI5Mzc3MTMsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDE2MDMuNjI2MDQzNDQ4MTk3NCw2NjkxNjEuMzI5MzkzNzUxMSw1NDMyNi4zMTgzMTk0OTQxOTYsMTAzMDc4LjM5MTg4MjYzMDYsMzczMTUuMzY1NjczMzIwNiw2ODMwNi42OTAyNjE2NTU1NSwyMzMyOS4zOTUxODYyMzI2NSw2Mzc3MTMuMDE1NjIzMDQ3CisyMSxNb24gMTQgRmViIDExLDEwODExMC44ODE5OTYxNTU2LDEwMzE5NC4zNzM0NjI0NDM2OCwxMDcwOTIuNTk2MzQwNzg2MzIsMzk0MTQzLjI1MDI4MjE1MzI1LDIzNDEyMS4xNzgxODAxMTk1MiwyMjY5OTQuOTMxODY4MTI3NTUsNDAyNjE5LjAzODg0MjM4NDQ3LDAuMCwxNDU0Ny4yNjIwMjcxNjU0LDQ5NjAzNC4zMzYzODIwNDA4LDEzODM5Ni42NjE5MTg5MTUyLDU3MDY2NC41OTY3NDY0ODg1LDQxOTExMy40ODA1MjM4MTQzMywyMDMwNjUuMjYzMzg0MzExNzUsNjE1MTg0LjQ2NTc1MjcwNDEsMjEwMTI1LjEzMDkxNTMwNTU4LDMwOTI4Ni42MzU2NjUyMDc3NSwzMzg4NTEuMzM3NzIyMTc4MTQsNDE1OTExLjQ0ODYyNDYwMDcsNDEzMDYxLjg2Mzc0ODU1NDQzLDIwNjg0NS4zMDI3MTU5NzMxLDAuMCwyMTk3NTguODU3NDQ3NDEwNzMsMTM5ODE1Ljk4NTcwMjM3MTU0LDI5MTczLjUyNzAwNjM0NDg2MiwxMTA2Ny4xNDA5MTI1ODkxMTEsNTU0NTAuNTI4NTYzODg4Mjg1LDE3Mzk2NS4zNTcwMTA4MDYxNSwxNDYzODIuMTMwNDU5ODgyLDEyNzk4NC41Mjc4NTY4MjE3NiwxMTQ2MDUuNjA5ODY2ODkwOTQsNjYxODIuMzY3ODg4NDY5NTcsMTA5ODkuOTk5Njc1OTIxNDgsMTc5MTA5Ljg2NTk5NDYzNDU3LDEwNTgzNS43NzQ2Njg4MDIzMywxNDIyNTEuNDI2MjQ5NDEzNiwwLjAsMC4wLDAuMCwwLjAsMTA3NzkyLjUzMTY4MTg4NTI3LDkzNzYxLjc4OTQ0MzA3MjYyLDAuMCwyNDY1MDIuMzg2NjM2NTAzOSw1Mzc0NS4zNzA3MTY1OTIzNywyMTgyNTMuNjUxOTAwMzgzMiwwLjAsMC4wLDI1NzgxNS44NjUxMjk4MTY3LDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDQ2Nzk5MS40Nzg1MTA2MTQxNCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMTQ3NDQuNjg4Mzc4NjYzNTU1LDkxOTAwMy44OTQ4NDYyMTI2LDQwNzc1LjgxNDc4Njc5NDUsNzU3NjEuMDM0MTQ1MTk2NDYsMjcyNjEuNTk3MDI1OTYzOTEsNTExMDIuNzEzODk0MjIxMywxNzIxMy4wMTQyNzcwNTEyNDcsNDUyMjUyLjAwMzMyNDc5NzQ0CisyMixUdWUgMTUgRmViIDExLDc5Mzc2LjQwMDY2MjgyNjk2LDc0NzM4LjAyNzIxOTY5Mjc4LDc3NDY2LjQ2ODM5ODA4ODM2LDI4NTUwNS44OTA3NDg4ODU4NywyMDk4ODAuNzMxNDg5MDIxMSwxOTE3NDkuMTg1MzM5NzI3NCwzMjQ0NTIuNDM4NjMwNDE3LDAuMCw4OTA1Ny41NTQ2MDk2NTk5MSw0NjA2NjcuNzczMjQxODQ5MTUsMjE3NDc2LjA5MDk4ODA2ODUyLDQ3MjQyNC4xMDEwODkxMTkwNCwzMDk0MDEuOTk4MTMwNDkzNSwxOTE2MTIuNTc0ODcwNDg0OTcsNTExMDA5LjQ1NTYyMDUxOTYsMTg1OTU1Ljg4MjI5ODM4NzIsMjY4MTU5Ljg1OTQwMzcwMjIsMjg5MDg4LjgzNTM1OTcyODQzLDM1MDcyNy41NTEzMTcyMTIxLDM0MjM1NS41Mzc1MzMzOTA5LDE2OTYxMy45NTcyMzExNDkyNSwwLjAsMTYxNTIxLjk0ODMwODcwNjk4LDk5MjMzLjM2MzgzMTc4MzQzLDIwNTg3LjU1MTQzMjcwNzY2LDc3NzguMTc3NzM4NjA5MDIyNSwzOTMzNy4yMzE0Mzk5MDY0MzQsMTIwNzk5Ljk4MjgwNzQyMzg5LDEwMjk4My45NjE0NzAxMjc5Niw4OTMxNy4yNjM3NTk5ODcyMyw4MTIyNi40NDM2NzgyNDYzLDQ2OTg2LjEyNzAzOTk0NDYsNzY2My40MzkyMjQ3MDM3MDEsMTI2MzM0LjMyNzA0ODc5NDcyLDczNTIzLjI5NTkxNjUyODUxLDk4ODc2LjU4MjcwNzY0MzQsMC4wLDAuMCwwLjAsMC4wLDc1MTk0LjI1NTk1OTQ1Njg0LDY1MDM2Ljc1MzIyODM4MTY1NCwwLjAsMTgyODAwLjM3ODYwMzAzODI2LDM4MzIyLjQ0ODMyMDU3NTMzLDE1NjQ3OS4zMjY4MTcwNTkzLDAuMCwwLjAsMjEzMzgyLjkwNjU3MjYzMTksMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMzM1OTIzLjE0OTg4NTM0MjcsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDk2MzM5LjE3MjgzNjU1MTQ0LDkxNzU4Mi40NzMxMjQzNjYxLDI5NjkxLjY5NTM0MTYxOTkxOCw1NDIwOS4yMTUyNTUxNywxOTQwNi4yNjI2NjIxNjQzMjUsMzcxMTIuMjYxNjY0NTUwMzUsMTIzNTYuNzQ0ODcxNjgwNzQ4LDMxMzYxMC4zNTY1NDA3MDEKKzIzLFdlZCAxNiBGZWIgMTEsNTcwMDguNjk0Njg1NTQyODUsNTMxMzEuNDEzNDg0NTg0NzcsNTUwMjAuMDQyMDExNDIwMDI0LDIwMjk5My4zNjg5MzI4MTI2MiwxNzA5MDAuMTI2NzM2NDQ2NDYsMTUxMDMxLjE1ODc0NTMyMjc4LDI0ODMzNC4xNDAxNzc0NjgsMC4wLDIwNzg5Ni4zMTk2OTI4NzAyOCwzODIwNjEuMDgwMzYwMDMxOCwyMTc2OTEuMjM0MDM3OTI2NCwzNjc2NjAuNjMxNjE0NTE4NywyMjMxMDguMDU5MjIzMzUyMzUsMTYwMTg2LjEwOTEyNzA0MDUsMzk4NTAzLjYyMTEyMDQ1MTgsMTUwMzY5LjY3MTc3MTA1MDg0LDIxNDM5Ny42MjIzMzM0MDU3NCwyMjkwMTYuMTEzODkzNjE3NTMsMjc1OTcxLjM0MDU3NTM1OTM1LDI2NjYyNS4yODM2OTE4NTkzLDEzMTIzNi45NDQwNTQ3NTI3MywwLjAsMTE2MDk3LjU5Mzk1MTYzMjIxLDY5NDU0LjEyMTk3OTIzMzgxLDE0MzQ0LjQ5OTY0NDkzNDM5Niw1NDAxLjkxNjg5ODgzMDIxMiwyNzUyMi4zMTQzNTI5ODU3MTUsODMwODIuMzQyNTMxMDYwMTUsNzE1NzkuNzA0MTI2NDc0NjUsNjE2NzkuOTAyODM3MDgzOTEsNTY3ODguMzM0NzEyNDc4MTk0LDMyODkzLjQyODc0ODc0OTU3NSw1Mjg4LjY3MjE2Nzc0NzA0OCw4Nzk4OS44Mjg4MjU5MzU1Miw1MDU4NC44NTE4MzcwOTE2NCw2ODA1OS4zOTYwMjU4MTY1LDAuMCwwLjAsMC4wLDAuMCw1MTkwOS4zMDEwODk4NjU2LDQ0NjkwLjU2OTExNjMxNTIxLDAuMCwxMzIyNTEuOTgzMjI5MDIzODQsMjY5MTkuMzczNDI4MDE0MDYsMTEwMzg1Ljk5OTk5Njg2NjIyLDAuMCwwLjAsMTY2MDQwLjMwNzIwNjI5NTksMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMjM3MTYyLjM3NjYzMzQ5MTUsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDMyMjE3MC41MzU2NjUyMjcxLDc4NzkwOC41MTQyMjg1NDA1LDIxMTkzLjk4NDI2NTc2NDg0LDM4MTgyLjExNDM1MDc4NDQyNCwxMzYxNC4xNzU1MDQ0NTY5NDQsMjY0MzcuNzI1OTc1NDcyMjUsODcyNS40MDc3MDE1NjkyNDYsMjE1NDcyLjI1Mjk2NTI4NTA2CisyNCxUaHUgMTcgRmViIDExLDM5NDc5Ljk5MzY2MzU3NDYzNCwzNjQ1My44NjU5MDk4OTAyMSwzNzcxNy40NzAyMTU5MDY2LDEzOTI5Mi4xMTI0NjAwNjMwNywxMzA5NDYuMDY1MjE5NjIyNjMsMTEyOTA5LjgyMjc3NjE5MDM3LDE4MTU0MC40NDg5ODg4NTI4NSwwLjAsMjMzODc0LjY4OTcwMTkzNjcsMjk2NTcwLjQyNTE1NDAxODg2LDE4OTE2OC41MDY5NjA0MDA5NiwyNzIzMjkuNDg5NTk0NTk5OTMsMTU1MDY1Ljk0MDA0NzMyNDQsMTI1MDI5LjMwMDkwMTA5MDIzLDI5NTY0NC40OTE2NDQ0OTcxNSwxMTQ2MzcuMzgxNzA1NjU3MTYsMTYyMDk0LjE3NjAyOTQ0NDAzLDE3MTk1OS45OTU1ODQ1NTI3LDIwNjE1NS4yODU1NTY0Mzk4MywxOTc2MDAuOTgxNjU1NDg0MzYsOTY3NjguMDUxOTAyOTA5NSwwLjAsODA0NTcuNjYwNjQzMjI2MTUsNDY5NjQuNTE0NTkzOTU0MDgsOTY1OC4wOTgxNjk1MTI3NDMsMzYyNS43NzUyNzk4ODgxMDkzLDE4NjAzLjk3OTc0ODEwOTQ5LDU1MjM5Ljk4NTAxOTQxMjcxNCw0ODA4MS42ODY2NTUxODI4NSw0MTE3My4yMzMzODM3NTY3MywzODM1OS44NDE0MDAzNzY0MDUsMjIyNDcuMTc5MDM1MTk4Njg2LDM1MjguMDg4NjAyOTUxNzc5Niw1OTIyMS4wOTU5NTk1NTkwNCwzMzY0NC42NDc0MDE5MTIzMSw0NTI4Ny41Mzc0MTI1NzI5LDAuMCwwLjAsMC4wLDAuMCwzNDYzOS41MzM4MDg2MzIwNTUsMjk2ODguMTMxMjkzNjQyMjksMC4wLDkyMTg5LjY4NDY4NTMxOTA3LDE4MjY1LjA1NDA3NjI4OTU5NCw3NTE5Ni44NTkwMDI4NzkzMywwLjAsMC4wLDEyMjk3NC4wNDM3NDY0MDY0MiwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwxNjE2NjYuMzc0MTM4OTQyLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwzODU1NTUuNzU1OTQ1MzQ4MSw2MjYxNTMuOTk2MTE0Nzk0NSwxNDU5NS42ODI4Nzk1NTkzMjYsMjU5NzIuODIyNDU2NTYyODc3LDkyMjYuMDg1OTI0OTcyOTg0LDE4MTczLjU0MjkzMTg5OTQxNCw1OTQ5LjMyMTQ2NTk2MjkxNzUsMTQzMTM0LjgxNTk1NTI5MjcyCisyNSxGcmkgMTggRmViIDExLDI2ODUyLjg2MjMwOTQ5NDEzNiwyNDYxNy4zMzAyMzc0MTc3NCwyNTQ1My43NDkxMzQ5NzY3MSw5NDA3Mi45MjIxMzYyNjMxNCw5NTYxMS4yMzI2Mzg0MjY0Myw4MTEyMC41NzAxODMxMTIyMywxMjg0NDguMjQ4MzIyNzM0OTMsMC4wLDIwNTgwNi45NTI1NTI4OTA3NSwyMTgzNDIuNTIxMjU1MjExMiwxNDg2MzMuMzY0MDk4ODI3NjUsMTk0NDM3LjU2MDEzMjI5MzE1LDEwNTc2MC4xMTQ1NTAzMjM2OCw5MjM2OC4xNjE3OTU1NzM2OSwyMTEzMTIuMDg2MzcwMDMzOSw4MzQzMS43NzYyMDkyMTAyOCwxMTczMjkuODY3MTk1MzA2NzcsMTIzOTA2LjE5MzY5OTc2MDkzLDE0ODAzNi42NjAwNjA1OTg0MywxNDExMzYuMDc1ODU3NTExOSw2ODg3Ni4zNjI0MjM3ODA0MiwwLjAsNTQ3NTQuMDU4OTQ5MjgzNzgsMzEzNTMuOTMzNjAwMjIwNzI3LDY0MjUuNjk3OTMxMjM4OTA4NSwyNDA2LjI0MDI1MjI4Njg1NDcsMTI0MTYuNzQyNTMwNjU2NTMxLDM2Mzc4LjMzODcxMjExMzYwNCwzMTkyOS4zMzA1MDA2ODg1NDYsMjcyMDMuMTY1MzUwMTg4NjQsMjU1ODguMDA5MTgzOTU5NTMzLDE0ODU0Ljk4MDQ5MjY4ODU3NCwyMzI5Ljc4NDM0MzE1MzE5ODMsMzkzODguOTc2Nzc0MTM0MDYsMjIxNjMuMDMwMjIwOTQxNzg2LDI5ODQzLjY2MjMyNTc5MzUzNSwwLjAsMC4wLDAuMCwwLjAsMjI4ODAuMDkyMTc4MDA2ODUzLDE5NTM3LjE1MjY3MDQ5NzI3NSwwLjAsNjMwMTYuOTA3NjU5OTM0Mjk1LDEyMjI3LjA5MDQ1NzQ2MjQ1MSw1MDQ5Ny4yNzA4MDQ1ODMzNiwwLjAsMC4wLDg3Nzk0LjM0MTkwMTQyMTE3LDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDEwODYwOS43OTU1NTAyNDQxOSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMzQ2Njg1LjUxNDI5NDkzNiw0Njc3MzcuNzMwMjE1NDc4ODYsOTg4NC45ODUxMTk3OTU4NSwxNzQyMS44MjU3ODE1OTMwNiw2MTcwLjE5OTkyODM2MzA4MSwxMjI5MC42NzAxNjcxMDkyODcsMzk5OC4wMzg5ODY1OTA1NzI3LDk0MjAzLjI4NDkxOTEyOTYKKzI2LFNhdCAxOSBGZWIgMTEsMTgwMTAuNjM3MDUyNTA2MDkyLDE2NDE3LjQwNDU1NzM0MDgxLDE2OTY2LjIwOTY4NDI0NTY3OCw2Mjc0Mi4zNDYwNzc4OTMwNiw2NzU5Mi44OTU2ODcwNDc1Nyw1NjY5Ny4xNDgwMjAzMDYxNDQsODg3ODMuMzM2MzUxMjk0ODksMC4wLDE2Mjc3My40NTQ3NzA3NzE2NywxNTUyNDUuNjcyNDUwODA2NjUsMTEwMjU5LjM3NDQxMjg0ODgzLDEzNTI4Ni40NTU5MDQ2OTU4Miw3MTA4OC4zMzE3NjMxMDk4Myw2NTgzMS4yNDU4MzAyOTU5NiwxNDcxNDIuNDg2NjUyMDIxNyw1ODg0OC42NzQwMzcwMTU3NjQsODI0NDEuOTM3MjYzNzY4MjcsODY3ODEuODM0MDI5Mjc0MTUsMTAzNDI4LjA4OTI3MjM5OTc3LDk4MjI2LjkzNzYzMzAzOTksNDc4MTUuMTM2MjIzNDg5MDg0LDAuMCwzNjc0MC4xMTI5MDc1NzkxMjUsMjA3MTcuNDk1MDY2NDQxNDAzLDQyMzMuOTIyMTc2NDYyMTAyNSwxNTgyLjIwOTIwMTk4NDUwNjMsODIwMi42NTgzMjc0Njg0MiwyMzc2Ny42MTE4NDc1NDc3NSwyMTAwNS43ODk0MDQ5NjA0MywxNzgyMS40NjYxMTYyOTA2OTYsMTY4OTYuMDY4MTE2NjE1OTM0LDk4MTYuOTkyMTM4NTU0NzYyLDE1MjUuNjI5MzE0NzIxMTk3MywyNTk0Ny4xNzc1ODM1MTk2MiwxNDQ4My41NjMyMDA0NDE3MSwxOTUwOC44ODEzMjI0MjU5OTcsMC4wLDAuMCwwLjAsMC4wLDE0OTg1Ljg3ODQ0MjUwMDY4NSwxMjc1Ni44NTU5Mzg4ODU1MDUsMC4wLDQyNDMyLjAwMjcwNTIwNjI5NCw4MDk3LjA4OTA4MTQ5MDY4NywzMzUyNS44NTU3MjQ0NjM0NywwLjAsMC4wLDYxMDgyLjU1NDUzMjk5OTA5LDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDcyMTI1LjAzNzM4NjY0NjEyLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwyNzcyMjIuNTQ1MDEzNTk3OSwzMzU4NjkuODM3NjU3MjQ4Niw2NjA3LjUzNjMwNzExMzY2MywxMTU1NS45NzQ4NTM1NDkwMzQsNDA4Mi44NDg5ODEwNDU0MjMsODIwNi4zMjg3NDUwNDczNTQsMjY1NS44OTEwNTYxNjIwMzcsNjE1MjIuMzQ2MDM2MDA3MzUKKzI3LFN1biAyMCBGZWIgMTEsMTE5NDUuNzM0MDMxNTg5NDIzLDEwODM4LjY0NjU4MzMzODU4NiwxMTE5Ni4xMDE5MzI1MDMxOTgsNDE0MjQuNTYzMzI0NDE2OTQ0LDQ2NjkxLjQzMTA3NDYyMzU3LDM4ODMzLjE3MjM1ODQ0Njk3LDYwMjk4LjYzNDIyNTM2OTI4NiwwLjAsMTIxMjM3LjY0MjgwNTg4NTM1LDEwNzY5MS40OTkyODkwOTE5NCw3ODgwMy4yMzgyMTk4NDA2NCw5MjM0Ni4yMjU0MzgwMDk0NCw0NzIzMi4zMTY1MTYxMjQ0NCw0NTc0NC45NTY3NDk5NDg2MTUsMTAwNDk4LjYzMjg4OTIxMzg2LDQwNTgyLjk2OTQwOTEwMzIxNCw1NjY5MS41NzI1MjYyMTE0OSw1OTUzMS45NzExMDMyMTUwNCw3MDgyMC41MDk1MDUwNjQyOCw2NzA2My4zMzc4NTA5NDM1OSwzMjU4Mi42NzI5OTU2MjU5NDgsMC4wLDI0Mzc2LjY3NDI2NzM1Mjc5LDEzNTczLjU3Nzk4MzY1MDIyMiwyNzY3LjQ1NTM1NjUwODUxNiwxMDMyLjQwNDU1MTU1ODE0LDUzNzMuMTYyNjgxOTI1NzUzLDE1NDI0LjkzMjI4MDY5NjQwMSwxMzcxMi4zODgzMDU3MDQ2MzcsMTE1OTIuNjM5MTI1MTAyNCwxMTA2My41OTg0MzM3MTM2ODksNjQzMi41OTc1ODg4OTc4MjgsOTkyLjAzMjgxNDEzMDI4NTMsMTY5NTYuNTgxNDYxNTM1MjgsOTQwMS41ODQ5NjA5OTEwMDcsMTI2NjYuOTM5MTQ5NjI1NTI1LDAuMCwwLjAsMC4wLDAuMCw5NzQ2LjIyMDk0NjkxODM1NCw4Mjc0Ljg1MjE2NTI4MzU4NiwwLjAsMjgyMzIuMzE2NDg4NjcxMjA0LDUzMTQuNzU0MzMzMTAyMzQzLDIyMDUyLjAwOTM3OTcwNjE2LDAuMCwwLjAsNDE2OTMuMTAyMzU1MDg3MjksMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsNDc0NDYuNDMxMjg4OTM3Njc0LDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwyMDc4NjAuMjY4ODcwMTQwNDgsMjM0NjU4LjIyMjMxMTEyNTkyLDQzNzAuNDQ4OTI1NDA5ODg5LDc1OTUuMzEyNTQyODg1MzQsMjY3OC4xNDY4MDMwNDM3OTgsNTQyMi45NTMyMzM4OTc0ODIsMTc0Ny43NzUyMzIyMjE4MzgsMzk5MTcuNzkzNzA1NDMzNDUKKzI4LE1vbiAyMSBGZWIgMTEsNzg1MS4wNTE0OTkwMDUxMTQsNzA5Ni4xMTAyNTkzNjM2MTE1LDczMjcuNDg2ODMyNjc1MzkzLDI3MTIyLjIzMTQwMTI1ODgyNSwzMTY5Ni4yNzQ4NDIyMTExNiwyNjE4OC44MzM1NDI4MjYxNTYsNDAzOTYuMzU5OTgzOTc2OTksMC4wLDg2ODg2LjcyNzY0OTU4NDYyLDczMzQxLjM1NzA2NDYxOTkyLDU0ODcwLjUxMTA3NTE4MzE5Niw2MjExMi4zNDYzOTk5MjA4MywzMTA4Ni45NTYxNjc2NjUxMiwzMTE5NC42OTk2MDEwMzE3OTMsNjc2MjcuMDY0MjcyMzI4OCwyNzUxNC4wNDA2Mzc1OTgxODQsMzgzNTAuNzg5NjE2NDk3MjA0LDQwMTk2LjkwNTA3MzMxOTM2LDQ3NzUwLjQ5OTI2ODAxMzIzLDQ1MTE0LjMwNzg3MzIzNzk0LDIxODg1Ljc1ODU1NDI5NTA3LDAuMCwxNjAyNS41Njg0NzQwOTQ4NjQsODgyOS45OTUzNTY0NjEzNiwxNzk2LjczNDQ0NDI4Mzg2MjMsNjY5LjI5MDE0OTE1NTM0NTYsMzQ5NC44MzgyMjA0MjIyNzIsOTk1My41Nzg0NzE3MTg0OSw4ODkyLjc4MTc4MTA1OTgxLDc0OTUuNDUwNzI3MTg0NjQ4LDcxOTMuNzMzNTk4NDc0NjkxLDQxODQuOTk5OTM2Nzk3Njc5LDY0MS4yMTI4MjM2NTY3MTE0LDExMDA2LjkxMzgyMzc3NTI3NCw2MDY3LjgxOTIwMTAzMDE5NCw4MTc3LjEyOTcwMzQ3NzI3MSwwLjAsMC4wLDAuMCwwLjAsNjMwMC41NDg4OTcwMDE3NzksNTMzNy4zNTQ0NjAzNDE1MjEsMC4wLDE4NjAzLjI1ODgxMjUzMTE4LDM0NjIuNzUzMTMwMzg2MTYzMywxNDM5My4xMDMxOTQ4NDA1NDIsMC4wLDAuMCwyODA0Mi4wMDMxOTQyMjUwOCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwzMDk2OC4yNTQ2NjcwODMxNzYsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDE0OTYzMi4yMDY0MzkyNzMzNCwxNjA2NzYuNzI1MjE2NzQxNjIsMjg2NS44MjU2Mzk5MzA5NDgsNDk1NC4yMjQxMDQxODQ3NTYsMTc0My45NTA1MzA0NzYyMDU2LDM1NTMuMjY1NTMyNDU5OTMxNCwxMTQxLjIwOTQ5ODQ0Nzg3MjIsMjU3NTUuNzk4MzI2MDIwODY0CisyOSxUdWUgMjIgRmViIDExLDUxMjAuNzk3NTQ3NDMzOTQ1NSw0NjEzLjQxOTU0MTIzNDQ0MjUsNDc2Mi4zODc1MDM1MDkzMjEsMTc2MzMuODM0ODg0NzIwNDksMjEyMjYuNjE0NjIzNzg4OTA0LDE3NDQ2LjY1ODIwMjM1MDQ3NCwyNjc2OC4xMjM2NTk2Mzk0NCwwLjAsNjA2MTguNTIxNzY5MzgyODEsNDkyNDAuNjg4NzMzNDcwODE1LDM3NDc1LjQ0NzUzMTA3NzE5Niw0MTI5MC4xNzQ1MjIyMjE2MDUsMjAzMDAuNjk4OTI0NTI1NDQ0LDIwOTY1LjQ1NTA5MTI1NjY1LDQ0OTcyLjk2OTI4NjY3NzU4LDE4NDA2Ljk3OTc3Nzg0MDY2LDI1NjExLjk4MTQzMDM2MDUxMywyNjgwNC43NzY0OTA4MjU4MTQsMzE4MDUuMjE1Njk5NzkyNzMsMjk5OTQuMzY3ODIxNTQ1ODQyLDE0NTMzLjE0Nzk4NjcyODc0LDAuMCwxMDQ1NS4wNzk0MzI2NjY4MzMsNTcwOS41MDYzNTM2Mzk1NTMsMTE1OS43OTc0MDQ3OTc1NjksNDMxLjQ4MjU0MDQyNTQ4NDMzLDIyNTkuNDY3Mjk5MDEzNDU2LDYzOTEuMzE4NTQ1MDExNDg1LDU3MzQuODc4MzQ3MjE4MTAyLDQ4MjEuMTk3Njg4Njg5OTM5LDQ2NDkuNTg0ODgyMDMyNywyNzA2LjI2NDc5MjE1Mzk5NjUsNDEyLjMyMzU3NTMwMTE1MDksNzEwMy45MjcyNjIzNzc2MjksMzg5Ni44MTI0NTUyNzk0Nyw1MjUyLjQ1NzU1MDMwNzUzNiwwLjAsMC4wLDAuMCwwLjAsNDA1Mi4wMTkxMzU1MTE1MjY3LDM0MjUuODc4NTcyOTA3NzM1LDAuMCwxMjE2MC4yNzY2MzkxMTU3ODIsMjI0MS45OTIxOTY1NDY1NTMsOTMzMy4wMDA0NTcxMTQ0MzMsMC4wLDAuMCwxODY0MC44ODY5ODUyMzg2NjcsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMjAwNzkuNzIyMjAxMzQ4MDkzLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwxMDQ3MjguOTUwOTMzODc3NDQsMTA4MzM1LjExMDIyODA4NDYxLDE4NjUuNjI5MTU0NzY5NTc3OCwzMjEwLjc1NjQwOTU4Mjk4NDQsMTEyOC42MDc3ODc0NzU2NzkzLDIzMTEuNjU1NDc0NzQ4ODI0LDc0MC4yNTIzMTQ1Mzc1ODUxLDE2NTM4LjA0MTYzMjI2ODIKKzMwLFdlZCAyMyBGZWIgMTEsMzMxOC41Nzg1MTcyNzg4OTMzLDI5ODEuNTAzNzU2MTEwNDMxLDMwNzYuOTY5NzQ0NDQ4MDQzLDExMzk2LjU5ODU1NzIxMTQxMywxNDA2MS4yNzg2MDUzNTA2NjgsMTE1MDguMDA5NzY3NDAzMTUzLDE3NTc5LjA1ODc5NzMzNTYxNiwwLjAsNDE0NjMuMDA0MTY5NDA4OTEsMzI2ODUuOTM3OTM2OTAxODA2LDI1MjE3LjE1MzA1MDIyNjY5LDI3MTg3Ljc2NDcyMjY5NDQyNSwxMzE2OS41MjU3Njk5NTAyNywxMzkyOC40NTQyNTMxMzY1MzMsMjk2MjEuODIwMDA1OTc0NzI1LDEyMTgzLjMyMTEwMzg3MzQ0OCwxNjkyOC4wOTM0NTQ0OTM2MiwxNzY5NC44NDU5NjI1OTYwMSwyMDk3Ni4wNzkxMDMyNjY1MTUsMTk3NTIuMDkwNTUxNDg5MzUzLDk1NjAuOTA0NTA0NTI4MjY0LDAuMCw2Nzc2Ljg5MDY2ODUyNjA0OCwzNjcyLjYwOTI5NjA0MTM3NCw3NDQuOTMyNDg1ODE0ODkyMywyNzYuODM0NTk0ODE0NjU2OCwxNDUzLjIxODk5OTQ2NDEyOSw0MDg2LjI5NDAwNDE5NTEyNSwzNjgwLjQ1MjU3NTQ4MDE5MSwzMDg3LjA3OTA3MzA5NzM4MjcsMjk4OS43NTc3NjI5ODgzNTE3LDE3NDAuOTE3NzczMzM3NjMxNCwyNjMuOTUxNjczODQ0OTY1MDYsNDU2Mi4yMjM3MzgyOTQwNTUsMjQ5MS43NjAwMzM5NjQ0OTQsMzM1OS4xODIzNjcxMTcyMjU2LDAuMCwwLjAsMC4wLDAuMCwyNTk0LjIyNTM1OTY5MzE5MTQsMjE4OS42MDY2ODE3NjYzMzQsMC4wLDc4OTUuMTU4Nzk0NDI3NzEzNSwxNDQzLjc5OTUwODkxNjg0NDYsNjAxOC4wODMzOTgzOTQ3MjQsMC4wLDAuMCwxMjI3My45NDMyMzIzNjUzNzMsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMTI5NDYuMjE0OTY0NDE5MzAxLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCw3MTgwNy4xNDY4MDI1MTQ1Myw3MjE1OC41MTExOTU2NzQ1NSwxMjA3LjA1Nzc1NTM0ODM1MiwyMDY5LjM4NzAxMzk5MzA2OTYsNzI2LjUwNzE1Mzk5OTM4MTIsMTQ5NC44MTA5NzgwMTMwMTM1LDQ3Ny40NjczNTgwMDM4NjgxLDEwNTc0LjQ1MzEyMjA5NzUxNQorMzEsVGh1IDI0IEZlYiAxMSwyMTM4LjgwNzEwMzY1ODQ1MTUsMTkxNi45NzM0NzI0ODgxMTc3LDE5NzcuOTA0MTkyMDc0Mjk2MSw3MzI3LjczNzcxMDE1NDMxOSw5MjMxLjk1MzA2MTg1Njc5NSw3NTI4LjgxNDc2ODAzNzYxMywxMTQ1OC4zNDYwMzkzMzI1MzksMC4wLDI3OTMyLjkzNzE2NjMxMjg3NywyMTQ5Ni40Nzc1ODAyMzI2NzMsMTY3NjkuNDIyNTQ5MDg0MjM2LDE3NzYwLjg1NDgzOTIzMzUzLDg0OTUuMTc0MDc5MzgzMDQxLDkxNjYuNTgxMjcwOTExNDQ3LDE5MzU1LjkxNTA2Mzk2NTc0Miw3OTkzLjQ3MjYwNDYyNTUsMTEwOTMuMzk4ODMwNDYyNTYsMTE1ODQuMDk1NjE4NDE3OTE4LDEzNzIxLjQxNzI3MTk5NDQzNCwxMjkwNC41MzYyNDYwMzA3MTksNjI0MS4xNTIxMzAyMTE1NywwLjAsNDM2OC40NDAyMDY0NzExOTgsMjM1MS43MDg4Njc5Mzk0MDk2LDQ3Ni4zOTE5MTcyNTA3NDU5NiwxNzYuODY3Nzk5MjI0NDEzOCw5MzAuNDU0NTcxNzEyMTEwNiwyNjAyLjY3ODEyODgzMDAxNTMsMjM1MS45ODY4ODU1Nzc3MTI3LDE5NjguODY2MTY4NDc4MDQ1MiwxOTEzLjg1ODc1ODA1NDI1LDExMTQuODQ2MDAyODI5NzE5LDE2OC4zMDU1MjE1MDU1NDM3LDI5MTcuMjU0NjcxNDk2OTE5NCwxNTg3LjI1OTU1Njg1Njc4NCwyMTQwLjEzNDEyMjQyOTk1NzYsMC4wLDAuMCwwLjAsMC4wLDE2NTQuMzQzNTQyODQ3NjgwMywxMzk0LjIxMTczMTg3MjgxNjUsMC4wLDUwOTYuNDkwOTYzMjMxNTc1LDkyNS40NDIyMTk5NDM0NTQ1LDM4NjEuODE5OTEzNTEyNDczMiwwLjAsMC4wLDgwMTguMDEyNTY0MTUyNTI3LDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDgzMDYuMjMwNTEyNDQ2MjcsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDQ4NDY2LjE1MzgyNjgyMTU1LDQ3NTg5LjU3Mzc1MjY5OSw3NzYuODQyODEwNzAwOTc0NCwxMzI3LjM5MjEwOTM0MTgwOSw0NjUuNTA5NzgxMzA4MDEyOSw5NjEuNTc3MjAyNzA2MDM5NSwzMDYuNDY5OTk2MzcxMTExMSw2NzM2LjE4MTM0MzkzMzEzMworMzIsRnJpIDI1IEZlYiAxMSwxMzcxLjg4MDI1ODE2OTc0LDEyMjcuMDI2ODE0Nzg1OTg2MywxMjY1Ljc3NTkyMjQ4Nzg2LDQ2OTAuNTA5NzcxNTg5MDczLDYwMTYuMjgzMzc2MzAxOTE0LDQ4OTEuNjk0MjA1MzgwMDAxLDc0MjEuNTU0MDgwMTU4MjI1LDAuMCwxODU5Mi44NDMwOTg1ODgyNDgsMTQwMjguODM1NDM4OTk0NTYsMTEwNDUuMTMxOTYwODE5NDc1LDExNTI1LjQzMDUwNjkxMDI0Myw1NDUzLjE3NjQ3ODkzMTQ3MSw1OTg1LjY1Mzk5Mzk2NDU4NDUsMTI1NjMuMjQyODc0NjA3OTksNTIwNi4xNzE1MjgxNTYxNTgsNzIxNy45NjQ5NTI5MzczNjgsNzUzMC43NzAxOTU1NjY5MzcsODkxNC4zMTIyNDkyMTczNzUsODM3NC42OTA4OTY3MDA2OTUsNDA0Ny40NTY5MzQ2MjM3MDg1LDAuMCwyODAyLjQ0NzYwNzA5NjA2LDE0OTkuOTExMjk0OTUyMzk3LDMwMy40OTQ2MDU4MDc1MzM5NiwxMTIuNTgwOTA0OTM2MDIwMTIsNTkzLjM4NjY0NjI0NzQ0NjMsMTY1Mi4xNDc5MTMwODU3NzMzLDE0OTcuNDIxMzM1NTIwMzg2NSwxMjUxLjI5MjM5ODM2MzI0NCwxMjIwLjMxNzcxNDk4OTI5MzMsNzExLjA4NDgwNDk5NDExNTUsMTA2Ljk0NDAyMzIyMjQ2NTAzLDE4NTguMzA1MDYwMDEwNDQzNiwxMDA3LjY3Nzg1NjAwMDkyMjgsMTM1OC44NTUyOTQ3NTM3NDgsMC4wLDAuMCwwLjAsMC4wLDEwNTEuMjkxMTIxOTI3NjY3NSw4ODQuNzk1NjcyODExNDk5NSwwLjAsMzI3My41MzE5ODk4ODM5MTMsNTkwLjc2Mjg0MDcyMjA4MTQsMjQ2Ny42NzM4NzI3OTI4NjcsMC4wLDAuMCw1MjAyLjk5NTUxMzMzMTQ5OCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCw1MzA2LjUyMzA5OTI4Mzg5NSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMzIzMDguODExNzQzMjgwNjMyLDMxMTMwLjQyNDQ3Mjc5NTk2LDQ5Ny42NzA1ODA5MTU3NjI1LDg0Ny44OTEyMDYxNzI2NjU2LDI5Ny4wNjkxNjIxMjk4MzgyLDYxNS43NjA2OTExNjI1NjI2LDE5NS44NzU3NDY3NjM5NDA4LDQyNzYuOTMzMDgwNTE1MTkxCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNFSVJfRkRfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL0luY2lkZW5jZV8wLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0VJUl9GRF9SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vSW5jaWRlbmNlXzAuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE2ZjBlZTUKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNFSVJfRkRfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL0luY2lkZW5jZV8wLmNzdgpAQCAtMCwwICsxLDMzIEBACitpdGVyYXRpb24sdGltZSxzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9ub2RlL3RyYW5zcG9ydC9waXBlL1BITAorMSxUdWUgMjUgSmFuIDExLDAuMAorMixXZWQgMjYgSmFuIDExLDAuMAorMyxUaHUgMjcgSmFuIDExLDAuMAorNCxGcmkgMjggSmFuIDExLDAuMDQ0MTMzMDI0NjM1NDI0NTEKKzUsU2F0IDI5IEphbiAxMSwwLjAxMzE1MDE5Nzg2NjUzNzIzMQorNixTdW4gMzAgSmFuIDExLDQuNjY1NjA3ODk2Nzk1MTA3Cis3LE1vbiAzMSBKYW4gMTEsMi4yNDgyOTEwMjc2MDI5NTMKKzgsVHVlIDEgRmViIDExLDIxMS43MjM4MTYwMzE2OTQyCis5LFdlZCAyIEZlYiAxMSwxMzguMDAxMzQ0MDUxNzkzNzIKKzEwLFRodSAzIEZlYiAxMSw3Mjc1Ljg1NTE0MjQxMTIzOQorMTEsRnJpIDQgRmViIDExLDQ3MzcuNzE1OTc1MzM3NzA0CisxMixTYXQgNSBGZWIgMTEsMzI4MDQuODQ2NzkzOTE5NDUKKzEzLFN1biA2IEZlYiAxMSwwLjAKKzE0LE1vbiA3IEZlYiAxMSwxMDQyOS44NDk2MTYyMzk2NAorMTUsVHVlIDggRmViIDExLDAuMAorMTYsV2VkIDkgRmViIDExLDM3ODUuMDE3MDUxNDQwNjI3NworMTcsVGh1IDEwIEZlYiAxMSwwLjAKKzE4LEZyaSAxMSBGZWIgMTEsMjE0MS4yNTQxNDE3NzA4OTIKKzE5LFNhdCAxMiBGZWIgMTEsMC4wCisyMCxTdW4gMTMgRmViIDExLDUxMi4wMTYxMDIwOTgwMDQyCisyMSxNb24gMTQgRmViIDExLDAuMAorMjIsVHVlIDE1IEZlYiAxMSwxMjUuOTI2MjYyOTU3NDU0MTgKKzIzLFdlZCAxNiBGZWIgMTEsMC4wCisyNCxUaHUgMTcgRmViIDExLDI5LjAwNzAwMjIzNjEwNDM0NQorMjUsRnJpIDE4IEZlYiAxMSwwLjAKKzI2LFNhdCAxOSBGZWIgMTEsNi41Njc3MjE2Nzk0NzA5NTUKKzI3LFN1biAyMCBGZWIgMTEsMC4wCisyOCxNb24gMjEgRmViIDExLDEuNDI5Mjc1NDk0NTE5OTM0CisyOSxUdWUgMjIgRmViIDExLDAuMAorMzAsV2VkIDIzIEZlYiAxMSwwLjI5NTA1NTc3Nzc3NjA4ODQKKzMxLFRodSAyNCBGZWIgMTEsMC4wCiszMixGcmkgMjUgRmViIDExLDAuMDUzNDg0NjM2NTM4MTY0NzYKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0VJUl9GRF9SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vSW5jaWRlbmNlXzEuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTRUlSX0ZEX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9JbmNpZGVuY2VfMS5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTJhOTAwNAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0VJUl9GRF9SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vSW5jaWRlbmNlXzEuY3N2CkBAIC0wLDAgKzEsMzMgQEAKK2l0ZXJhdGlvbix0aW1lLHN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL25vZGUvdHJhbnNwb3J0L3BpcGUvUEgtMTEsc3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vbm9kZS90cmFuc3BvcnQvcGlwZS9QSC0zLHN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL25vZGUvdHJhbnNwb3J0L3BpcGUvUEgtNyxzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9ub2RlL3RyYW5zcG9ydC9waXBlL1BILU5DUgorMSxUdWUgMjUgSmFuIDExLDAuMCwwLjAsMC4wLDAuMAorMixXZWQgMjYgSmFuIDExLDAuMCwwLjAsMC4wLDAuMAorMyxUaHUgMjcgSmFuIDExLDAuMCwwLjAsMC4wLDAuMDkxNDM1MzAwODEwMDcyOAorNCxGcmkgMjggSmFuIDExLDAuMCwwLjAsMC4wLDAuMDE4MTAxMTk0MjcyMDAyOTg3Cis1LFNhdCAyOSBKYW4gMTEsMS4xNjkyMjIxNzAzNzA3ODZFLTUsNS42OTc4NzUwODg4Mjc4OTdFLTQsMC4wMDI5NjcxNDg0Njk1MjA1MjUsNC44MDg0ODQ5MzA0OTU4OTYKKzYsU3VuIDMwIEphbiAxMSwwLjAsMC4wLDAuMCwxLjgwNzYzMzQ2MzMzNzE2NTEKKzcsTW9uIDMxIEphbiAxMSwwLjAwMTg4NTQ1OTg0NDI1NTU0MjEsMC4xMzA4MDA3NjAyNTgzNTI1OCwwLjQ3ODQ3NzE0MjIzMDY0NDEsMTQ3LjM0MDQzODg2MjY5MzcKKzgsVHVlIDEgRmViIDExLDAuMCwwLjAzOTU0Njg1MjEyMzcyMTE5LDAuMCw3OC4xMjMzNTcxNjg2NjM4NAorOSxXZWQgMiBGZWIgMTEsMC4xMTU3NTM0MTc5MzgwNDIxOCw4LjYyNjYzNDcyODI1NTY2OCwyOS4zNzU1NTUwNTE5OTg4NjIsMzkxNC44OTI0OTE2MDY3MDIKKzEwLFRodSAzIEZlYiAxMSwwLjAsMy4wOTU0NDUzMDIzMjU5NzgsMC4wLDIzMDAuNzE2MDQ0NjY4MDc4CisxMSxGcmkgNCBGZWIgMTEsNC45MjQxMjQ3Mzk0NDgxOTYsMzc4LjI3NTE1MjU4Mzc1MzYsMTI0OS42NzM2OTE2NzkzODYxLDMxMDA1LjI1Nzg1MDA3MDQzCisxMixTYXQgNSBGZWIgMTEsMC4wLDg5Ljk4NjE3NDgwMzYwODgsMC4wLDAuMAorMTMsU3VuIDYgRmViIDExLDIzLjQ2NzQzMDc5MDA1NDUwNyw4NjIuNzMwNjM4ODIwNTQ1LDU5NTQuNzgwNDMyNDYxOTY0LDE0MDU5LjAyNzA0MTEyNTU3CisxNCxNb24gNyBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wCisxNSxUdWUgOCBGZWIgMTEsMTMuNzY3MzExNzY3OTk2MzE1LDE0Ni45MTU3NzY3MjQ3NTU1NywzNDg3LjE1MTI5MTk1Nzg4MTMsNDIxMC43MDg1MTA2NTA0NjcKKzE2LFdlZCA5IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAKKzE3LFRodSAxMCBGZWIgMTEsMTIuMTY1OTQ4MzkzNjk3ODI4LDUwLjQ2OTMxODE5MDAyMTQ1LDI5MTEuNjU5NDkwNzM3MzMzLDE0NzkuODM4NDIwNDM3OTM4MworMTgsRnJpIDExIEZlYiAxMSwwLjAsMC4wLDUuNjc2NzIyNzc0MDQyMDI5NkUtMTIsMC4wCisxOSxTYXQgMTIgRmViIDExLDExLjgyMzgzNjExNTkwMDgzMiwyOS42MDYzODQzNTc4ODY5MjQsMTUyLjg1ODM3NTI5MjE3MDYyLDgzMC4zMzA2NTQ0NDk3MzI4CisyMCxTdW4gMTMgRmViIDExLDAuMCwwLjAsMC4wLDAuMAorMjEsTW9uIDE0IEZlYiAxMSw5LjU3OTY4MTc3MjE5NzUwMSw2LjgxNTg3MTkwNjYxMzgxMSwzOC4wMDgxMzM0MDYyMTQxMiwxOTMuOTk3ODIxMDk4NjYyNgorMjIsVHVlIDE1IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAKKzIzLFdlZCAxNiBGZWIgMTEsMC4wMzY2OTAyMjU0OTMxNTIyLDEuNjc2MTMyNDgyOTI4ODQyNiw4Ljk2MTI0Mjc2OTgyNTk2LDQ2LjA1OTI5OTE3NzE1NDY0CisyNCxUaHUgMTcgRmViIDExLDAuMCwwLjAsMC4wLDAuMAorMjUsRnJpIDE4IEZlYiAxMSwwLjAwOTAxMzg2MzkxNzk1NjAxMiwwLjM2NDY4ODMxMTA2MDU1MjEsMi4xNTk5NzQwMjYzMTQ2NzgsOS44Mjc3NzMyNDY0NDg3OQorMjYsU2F0IDE5IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAKKzI3LFN1biAyMCBGZWIgMTEsMC4wMDIxMTc5NDMyODA0ODkwMDk0LDAuMDgwNTA4MTg3MzUwMTA4ODEsMC40NzcxMjQ1OTQ0OTgzMjIyMywyLjA3MDYzNjE4ODQxNzYxNDgKKzI4LE1vbiAyMSBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wCisyOSxUdWUgMjIgRmViIDExLDUuMDIxODMwMTY3MTY5MzgzRS00LDAuMDE1OTk3MTMyMjk2OTkwNzUyLDAuMTA3NTEzNzc1NDYwODI0MDIsMC4zODc5ODI0NDQ5MzkyOTYzNAorMzAsV2VkIDIzIEZlYiAxMSwwLjAsMC4wLDcuOTU0OTE3MzA1NDcwNTA2RS0xNywwLjAKKzMxLFRodSAyNCBGZWIgMTEsMS4xNDg4Mjk3MjMzMjY3Njc3RS00LDAuMDAyOTcwOTk0Nzg2ODI2MTM3LDAuMDIyMjAxMjA1NTM4NDcyMzEsMC4wNjU0MTU5MjAxMTI0NDYzNworMzIsRnJpIDI1IEZlYiAxMSwwLjAsNi42NTE3MjQwMzcyODA5ODRFLTE5LDAuMCwwLjAKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0VJUl9GRF9SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vSW5jaWRlbmNlXzIuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTRUlSX0ZEX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9JbmNpZGVuY2VfMi5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2U3MzhiYQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0VJUl9GRF9SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vSW5jaWRlbmNlXzIuY3N2CkBAIC0wLDAgKzEsMzMgQEAKK2l0ZXJhdGlvbix0aW1lLFBILTEtRzY0MDAwMSxQSC0xLUc2NDAwMDIsUEgtMS1HNjQwMDAzLFBILTEtRzY0MDAwNCxQSC0xMC1HNjUwMDAxLFBILTEwLUc2NTAwMDIsUEgtMTAtRzY1MDAwMyxQSC0xMC1HNjUwMDA0LFBILTEwLUc2NTAwMDUsUEgtMTAtRzY1MDAwNixQSC0xMC1HNjUwMDA3LFBILTExLUc2NjAwMDEsUEgtMTEtRzY2MDAwMixQSC0xMS1HNjYwMDAzLFBILTExLUc2NjAwMDQsUEgtMTEtRzY2MDAwNSxQSC0xMi1HNjcwMDAxLFBILTEyLUc2NzAwMDIsUEgtMTItRzY3MDAwMyxQSC0xMi1HNjcwMDA0LFBILTEyLUc2NzAwMDUsUEgtMi1HNjgwMDAxLFBILTItRzY4MDAwMixQSC0yLUc2ODAwMDMsUEgtMi1HNjgwMDA0LFBILTItRzY4MDAwNSxQSC0zLUc2OTAwMDEsUEgtMy1HNjkwMDAyLFBILTMtRzY5MDAwMyxQSC0zLUc2OTAwMDQsUEgtMy1HNjkwMDA1LFBILTMtRzY5MDAwNixQSC00LUc3MDAwMDEsUEgtNC1HNzAwMDAyLFBILTQtRzcwMDAwMyxQSC00LUc3MDAwMDQsUEgtNC1HNzAwMDA1LFBILTQtRzcwMDAwNixQSC00LUc3MDAwMDcsUEgtNC1HNzAwMDA4LFBILTQtRzcwMDAwOSxQSC00LUc3MDAwMTAsUEgtNC1HNzAwMDExLFBILTUtRzcxMDAwMSxQSC01LUc3MTAwMDIsUEgtNS1HNzEwMDAzLFBILTUtRzcxMDAwNCxQSC01LUc3MTAwMDUsUEgtNS1HNzEwMDA2LFBILTYtRzcyMDAwMSxQSC02LUc3MjAwMDIsUEgtNi1HNzIwMDAzLFBILTYtRzcyMDAwNCxQSC02LUc3MjAwMDUsUEgtNy1HNzMwMDAxLFBILTctRzczMDAwMixQSC03LUc3MzAwMDMsUEgtNy1HNzMwMDA0LFBILTgtRzc0MDAwMSxQSC04LUc3NDAwMDIsUEgtOC1HNzQwMDAzLFBILTgtRzc0MDAwNCxQSC04LUc3NDAwMDUsUEgtOS1HNzUwMDAxLFBILTktRzc1MDAwMixQSC05LUc3NTAwMDMsUEgtOS1HNzUwMDA0LFBILTktRzc1MDAwNSxQSC1DQVItRzIzMDAwMSxQSC1DQVItRzIzMDAwMixQSC1DQVItRzIzMDAwMyxQSC1DQVItRzIzMDAwNCxQSC1DQVItRzIzMDAwNSxQSC1OQ1ItRzUyMDAwMQorMSxUdWUgMjUgSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzIsV2VkIDI2IEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwzLjEyOTY1NTQ0OTM1NDcwMzMsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMS40OTYyMjExMjU2Mzc1ODQ2LDEuMjMyMjkxODE3OTI2ODE4NSwwLjAsMC4wLDAuMCwwLjAsMC4wLDMuMzg3NTUzOTkyMjg1NDg4NSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsNDMuODI5MTI5MzU3NTQxNTgKKzMsVGh1IDI3IEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwxLjg3MTQzMjU2OTU2NDI5NDQsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC44OTQ2OTE5MTE2OTEzNDU1LDAuNzM2ODcwODkzNzQ0MTE3NCwwLjAsMC4wLDAuMCwwLjAsMC4wLDIuMDI1NjQ1OTczMDk5NzEyLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwyNi4yMDgzMTA5NjY4OTc3NzcKKzQsRnJpIDI4IEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwxMDAuMjc2NDIwMzU0NzUzMDYsMC4wNDM4MDQwOTUzMzAwNDU4OCwyLjk1NzYwOTk3MTc0ODA4OTcsMC4wLDAuMCwwLjUxOTA3Mjc4NDA5NTAwNTYsMC4wNzc0MDUyODUxMzQyMjYxMiw0OS4xMjMyNzQyNzYxMDcyMSw0NS44Njg2NzIwMDc4NjI5NiwwLjAsMC4wLDAuMCwwLjAsMi41MzIwNTA5MzM4NDYxODAzLDk1LjM2NjA0MzYwMjc2OTA1LDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCw3ODkuMzIzODA5MTIwMDQ3NAorNSxTYXQgMjkgSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDE3OC43MTk3MTQyMjk4NDI4LDAuMDc4NzU4MzQyNjAwMzUwOCw1LjMxNzY4MDAzMjA0NzQxMywwLjAsMC4wLDAuOTMzMjczNjUzNzQ0NzAzNiwwLjEzOTE3MjIwMTkxNjM5NDM3LDg3LjU2OTkxMTczMTEwODczLDgxLjg1MTIyNjU1MDk0NTg3LDAuMCwwLjAsMC4wLDAuMCw0LjU1MjU0MDA3ODMxNjA4LDE2OS43NTg3Nzg1OTE1MjExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwxMzk3LjA5NjI4OTQ5NjUxNDYKKzYsU3VuIDMwIEphbiAxMSwwLjAsMC4wLDAuMCwzLjE5OTIyMzAyNzYxMjgzRS00LDAuMCwwLjAsOC41MTA0NzQ1NTMxMDMxODZFLTksMC4wLDAuMCwwLjAsMC4wLDIuNTA3ODQwNjkyODIwMjFFLTksNi42NTcwNDgyODIxODQ5MkUtNiwwLjAsMi41NjA2Nzk5MjY2NTQ3MDRFLTksMC4wLDAuMCwwLjAsMC4wLDIuMjI4ODYwMjI3NzY2NTA5NUUtOSwyLjI1NTg4ODcyMTMzNjI4OUUtOSwwLjAsMC4wLDAuMTI3MzQzMjU2NDUzNTIwMzgsMC4xNDAwNzg0ODYzODIzMTY5LDAuMzc5NzkxMzIyNzA2MzMwMSwwLjA1MjY4NzU1Nzk3MzMxMjg0LDI1ODIuMDE4Mzg2MzI0NjA0OCwzLjgzOTUyNTE3MDEwMjY5ODIsMTQ4LjI2MzYxNDA0MzYxODYyLDAuMDcwNDQ0NDMyNDMzNjIwNTQsMC4wNDgyMjE3Mjk4MDkwMzgyMTYsMjMuMDA1NzQ2NDI2MDk5MzQ2LDQuMTkyMzY3NzYyNDA0Njg1LDEyOTYuNjMxNzg2NTIyNjkwMiwxMzA4LjgyNjAyMjAwMzEyOTgsMC4wLDAuMCwwLjAsMC4wLDEzMy44NzIwMDUxNzMyMjcwMiwyMjI5LjAwNDAwMjI3ODYzOTMsMC4wLDAuMCwwLjAxMTc1MTIzOTMyMDM3NjkzMiwwLjAxMTc2NTc3ODk3Njg5MDM3LDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMDAxNjkxNjE1NTk5ODYxNDUwNSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDE1Mzg0LjExMjAzMDIwMDE5MQorNyxNb24gMzEgSmFuIDExLDAuMCwwLjAsMC4wLDkuNTkxMTY2ODY3NjEzMzVFLTQsMC4wLDAuMCw1LjEwNjIyNjY3NzYxMDc2MUUtOSwwLjAsMC4wLDAuMCwwLjAsMS41MDQ2ODczMDg0NDI0MTI2RS05LDMuOTk0MTgzNTU4MTU3MTYzRS02LDAuMCwxLjUzNjM5MDQ4ODI5OTk3MTRFLTksMC4wLDAuMCwwLjAsMC4wLDEuMzM3MzAwOTMyNDc3MDM5RS05LDEuMzUzNTE3ODQ0MjQzODgwMUUtOSwwLjAsMC4wLDAuMzgxNzcwMzM3Mzk4MDEwOSwwLjQxOTk1MDAzNjAwMTkzMTU0LDEuMTM4NTk3NTc0OTA0NDc0MywwLjE1NzkyMDk4MjUyMTc5MjA0LDcyOTYuNjA1ODUwODI1OTA3NSwxMS4zMTc5NzU2MzY5ODI5NTgsNDMxLjQ2OTE4NjUzMzI1MzEsMC4yMTExNTc2MzE2OTA4NzI2LDAuMTQ0NTM1NTEwNjE0MjY1NjcsNjYuNjg4MjIwNTE5MzE5NDcsMTIuMjI5MzgyOTYxMTMzMjUyLDM2NjkuOTk4NTUwMzE3MjU3LDM3MjEuMjY2NTU1NTYxODU1NSwwLjAsMC4wLDAuMCwwLjAsMzkwLjIyMjEzMzA0OTU2NDY2LDYyNTguMjEzMDE2NzE0NjkyNSwwLjAsMC4wLDAuMDM1MjI5ODA4NTk0MzU3MTEzLDAuMDM1MjczMzk4NTU3MjM3NjEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wMDEwMTMzMTA3NTgwNTEyMzk1LDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsNDI2MDMuMDkzOTAxNjA0NDE0Cis4LFR1ZSAxIEZlYiAxMSwwLjAsMC4wLDQuMTYyNzE5MDgwODQ4MTdFLTUsMC4wNDgzNDM2MTQ0MTMxNDc5OTUsMy43NzQ0NzMwMDQxMjk5OTJFLTExLDMuMzEwNDYyMzc5NDg2MTI3M0UtOSwyLjQwNDc4NTYwODQyNDgzN0UtNiwwLjAsMC4wLDQuMDY2NTc1OTc5OTAzNTkwM0UtMTEsMC4wLDcuMTM2MzE1NjQwMTU5ODdFLTcsMC4wMDE3NjI0MDQ2NTQ3NjE0Mjg0LDEuMzgwMTUyMjk3OTM0NTg5M0UtMTEsNy4yNzI2ODgyNzI0MTQ5NjRFLTcsMC4wLDkuODMwOTg5Mjk4MDc4NTk0RS0xMCwyLjU1MzA1NTY2NTI0MzEyOThFLTksNS43NDE5OTc2NjQ0OTE3MjlFLTksNi4zMDUyNzAyNzgxMjUzNzRFLTcsNi4zNTkwMTMxODYxNzgyMTRFLTcsMC4wLDYuNTk5NTUzMjExODc4ODg2RS00LDExLjA0MTk4MjM4MzgyMjM3NywxMi4yNDkxODg4OTQwMjYxNjcsMjkuMTM1OTMwODM5MTg2MDgsNC43NDkxOTMxMDA4Mjg1NzYsNzc2OTcuODY5NDgxNTg2MDgsMjQxLjE5MjAyOTgwMjUzOTYsNjYyOC4wMzQ0MTE1MTA4Nyw3LjMwMjA5ODc3NzA4ODA3NjUsNC4zMjg2Nzc5NzEzODExNjY1LDkyMy4zMDE1MTk2OTg5MjcyLDIwMS4xNzMwMDUyNzI4NTQ2OCw0MDAyMi40MTEyMzExMzQ5LDQyNjkyLjIyNDg2OTAyMjA2NiwwLjAsMC4wLDAuMCwwLjAsNjIyMy4xNTM1MTE1OTg2MTM1LDYxOTU2Ljk3Njk5ODc3NzYyLDAuMCwxLjExOTcxNDA1NDk1OTE1NzhFLTQsMS4xMDExNDg3OTA2NjE2NTc1LDEuMTAzMDQyNTMwNjc4MDQyNSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjQ0Nzc5MTUwODg0MTU1NDksMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMDkyMjcxNTczNDI3ODYwMzUsMC4xMjc3ODc1MDQ1MDc1MDA3LDUuNzY3MTM3ODI1MTExNjYzRS00LDAuMDA4OTgzMzY2NjkwODk2NTUxLDM4NTM5Mi4zOTI2MDg3MTQ3NgorOSxXZWQgMiBGZWIgMTEsMS42Mjg2MDM0ODYwNDY0NjJFLTUsMC4wMDM3ODk5ODQyNTYyOTI2OTY0LDAuMDA1NjU1MzkyOTcwODkyMDE3LDAuMzUxMTUyMzI5MzE4MzE3OTcsMS4xNTAzMjc2NzQ0NTcwNDQ4RS05LDguNzUzNTM4NzczNDEwOTc1RS04LDIuMjc5MTM4MzE5OTgzNDY2M0UtNSwwLjAsMC4wLDEuMTM0NDA1NzM3MTcxODI3OEUtOSwzLjc2NDQ5MzQyNzk1NjIzRS0xNCw2Ljg0OTMwNDc3NTUwNzA4NkUtNiwwLjAxNDgzNzM2NDkxNDY4NTA1LDMuODc2NzY4NjE3NTcyOTQ0RS0xMCw2Ljk1NjMyMDA0MTA4MzE1M0UtNiwyLjI0NDY4NjA3Mzk2MDEzMDZFLTEwLDIuNjI5MjM0MjY2ODUwOTc1N0UtOCw2Ljc5MDAxMzE4MDQ4MzQ2RS04LDEuNTIxOTk0MTQ5NTY2MzM3RS03LDUuOTg4ODk1MzMyMjAzNDAyRS02LDYuMDAwOTA2MjE3Mzk5MDk4RS02LDAuMCwwLjAwNTk3NjI4NDc4MDg5NTIxLDY0Ljk1MzUwOTU1NjY2MDg2LDcyLjM2NTM5MTk0ODY0NjgsMTYxLjQ4Mjg1MzY4MTgzODQ2LDI4LjQ3NDczNTgwMjI5NDA1MiwzMjM1NTguNjc5NjI3MjU0MjYsMTMxNi4xMzE5NzM5OTg1MDg2LDMxOTAxLjU1MTA4NTYyOTA5Nyw0Ni42Mjc0OTE3NjI0MDkxMSwyNS45NTE0Mjk1ODg5OTI5NjYsNDI0My45NDU2MjgwNjk4MDcsMTAwMS4yMTU4OTI1MzcwNjI3LDE2ODgwOC41Nzg3NjYyOTI1NywxODM4ODUuNjI2NjY1NDM0MjgsMC4wLDAuMCwwLjAsMC4wLDMwMzgzLjk4NTczNjEzODE0NywyNDkyMjAuMzE2Njk5MjA1ODcsMC4wLDAuMDAxMDU2ODcyNDM2ODUzNzA2MSw2LjcxMzc3OTM2MzI1ODY5NzUsNi43MjcxMDY1ODQzMTg2NTcsMC4wLDAuMCwxLjMzNzY1MjM1NjAyNTc1MjNFLTcsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMy43NzA4NTUxNDgyNTIwODYyLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMi42ODg3MDQ1NDI2MzcxMDEzRS0xMSwxLjEwNjQ0MDczOTQzMDM3MjlFLTQsMC44MjkyMzE0NzQ1OTUwNDA4LDEuMTQwMzUyMTE5MjMzMzUwMywwLjAwNTkxMTU5OTA2NDk0ODEzOCwwLjA3OTM4MDQxODAxMDk1NzkyLDE0OTY2NTMuOTc2OTAyMjQ0NAorMTAsVGh1IDMgRmViIDExLDIuMzkyNDUxNjgzMDYxNTk2NkUtNCwwLjA1NTY3NTYzNzU4MzM1MjY1LDAuMDgxMjk4MTE1MjUxNzc2MiwzLjEzNDY2NTQyNjUyMDczNDMsMS4yNjQ4ODY1NjE2MjIzNzY0RS04LDkuNDUyMTQ2MjA3OTQwMDQ5RS03LDIuMTczNDg1MDIwOTI0Nzc1NkUtNCwwLjAsMC4wLDEuMjMzNzc0NDQxNTc2NDU3M0UtOCw0LjYyNzQwMzQzNzUzODgyOEUtMTMsNi41NDg3NjI1NTk0ODM0NDZFLTUsMC4xMzc5NDI1MDk4MDk4ODc5LDQuMjIwMTM5NTQzNDQ0MjNFLTksNi42NDY0MjIxMjkwOTIxMzJFLTUsMi43NTkyMjA2NjM3MTU2NjFFLTksMi44NDM1MTAyOTA4MjYxODVFLTcsNy4zMzc3NzMzNjYxNTU4ODhFLTcsMS42NDQwMTQwNzAyMjUzMDMyRS02LDUuNzEzOTAzMTkwNTMyNjI3RS01LDUuNzE3NjYwOTI4NzI2NjE1RS01LDAuMCwwLjA1OTU2MTEwMjA5NzU5NDczNiw0OTkuMjI3NzI2NzE4MzA5Nyw1NTguMTU1NDgxNjA5MTg1NSwxMTc2Ljc0NzE3MTY1NzY5MzgsMjIyLjM2MzAwMzg0MTE4MTU4LDE2NDUzNDUuMDMyOTMyMjgyNyw5NTI2LjMyMDc0MjU4NDA3NywyMDIzMzMuODM5NzY1OTcyNCwzODIuMjc1OTY5NzE2ODk0MDUsMjAyLjY3MzQ5MzA4ODYxNDA3LDI1NDM2LjYwMjcyMDIxNjI5NSw2NjU1LjI1MjU0NzEzNDg5Miw4ODA3NDEuOTE2NTExODMwNSw5OTM3MDEuODczMzA5NzQ1NSwwLjAsMC4wLDAuMCwwLjAsMTk1MzAxLjk4NDE1NTY5Nzg0LDExODAzMTguMTY5MTEwMDEyNywwLjAsMC4wMTA3MzU3NzMxODI3NjIwMjUsNTMuMTI5MzIzMDM3MDcwOTEsNTMuMjQ2NTI4NTMwMjI3OTcsMC4wLDAuMCwxLjk2NTAzODkwODkyNjEzOUUtNiwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwzNS4wNTc3MzkzMTE4MDYwOCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDMuMzA1MDE4NTU4NjAwNTYwN0UtMTAsMC4wMDE2MjUzODM5NTc4MTgwNjU1LDguMjM0MzE1NzY4MTA2OTg3LDExLjI4NTM5Mzg5NjEzNDA4MiwwLjA2MjE3MTc4MjczNjczNjAyLDAuNzgxODIxMzI0MzI1NDIyNyw2NjUxNjg4LjcxMzM1MjI0MgorMTEsRnJpIDQgRmViIDExLDAuMTQ2NjUzMzMzNDY1NzcxOTIsMTEuMjgzMjc3NTc5MjYzOTksMTUuOTc1NTA4MjgyMjIyODQsMjA1LjA1NDQ1MzYzMTA1MDcsMy43OTMyOTE1MjE5Nzk5MDI2RS02LDEuODA1Njc4NDAyNzc5NzcyRS00LDAuMDE3NjQ4Mjg0NDc0ODU4NTksMC4wLDEuNTE1ODAxNzc0MDA4MTkzRS0xMSwyLjkyNjM4OTc5OTA1MzM3NkUtNiw4LjM3MzUyNDA0MDIwNzY0RS0xMCwwLjAwNTQ4NTQ1MDI5Mjk4ODcxMjUsMTAuOTY4NjQ3MTI2MjMyMDA3LDEuMDE1OTM3MzkwNzg1NjkzM0UtNiwwLjAwNTUyMTE5ODc2MTc3MTM1OCwyLjU3MDMxNDg4MTg5ODgyMTJFLTYsNS43MDA4MDgxNTM2ODcyNTRFLTUsMS40MzcwMjk5MDM1MjU4MDIyRS00LDMuMTczODcxNTI5ODc1NDQ5RS00LDAuMDA0NjcwNTc1MTQ0NTgyNjg2LDAuMDA0NTk3MTk4OTA0NzAzMDIzLDAuMCw0LjY5NDgzNjQyMzk2OTczNiwyMDMxOC4wMzc1NTYzMDA3NTUsMjI3MDMuNDk2NzYzMTU4NTEzLDM1NjMzLjA1NjkzNTczNzE4Niw5NTAxLjYyNzYzODg1ODU4MywxNjgxNjgzLjc5NjQ5OTEyMzgsMzE5Njk2LjI1ODE3NTA3NjQ1LDE5Mzc4MTUuNjE2MzM4MTYyNywxOTQ1NS4xMzg3NzYyNTY4LDg3MzcuOTYyNzU1MTE0Nzk5LDE2NjY4MC41NzQ5OTQ4NjgwNSwxODY2NDcuNTcyOTY0MDkwODUsMTE0MjE2Ny4zNzkwNTQ4NTc0LDE3MTcwMzcuNDkzNTE2OTYyNSwwLjAsMC4wLDAuMCwwLjAsMTY4MTg0OS4yOTExMTgyMTk1LDYwMDgwNy43ODIxNTA4NTA5LDAuMCwwLjkxOTIzMjgxNTIzNTYxNTcsMjMzNC45NzYwODM2MDUzODU2LDIzNDUuNDUxNjU0ODAwMjAyLDAuMCwwLjAsNC40NzAyNDk2MTM2Nzk3OTU1RS00LDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDI3ODYuNTIzMTEyMzE0MzU5LDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwxLjUxNjQwNTc0ODgwMTE0MDJFLTExLDMuMjEzMjY0NTgxMzE4NDc2RS03LDAuNTE2NzcyNjM0Mjc3NzgxLDYzNi4wNTc2MTU3OTY5NzIsODU2LjkwODk0OTQ5Njg2MTksNi4wMzQxMjQ0MzMxOTU2MTksNTguMjQzMDUyNzA4MTY5NDYsMTgxODM3My4xOTc1OTcwMDI4CisxMixTYXQgNSBGZWIgMTEsMjYuNzMyMTU2MjYwMjM0ODgsMTE3NC45MDcxNDg4MjQ5NDQ0LDE2NDMuNTYyNjI4MzExMzE2Myw5NzAxLjAzMTUxMjA1MjYyMSw1LjcwOTQxOTgxMjExNDMxN0UtNCwwLjAxODkwMDQwMTk0MTc0Njg4MywwLjk5NzgyNTg4MjgzMjA2MzIsMC4wLDcuODI2MDU0NjUyODIwNDgxRS05LDMuODcxMDQ2MzQxMjk1NTY5RS00LDIuODg3MjIxMDI2OTQ2MjM0NkUtNywwLjMyNTA5MjA2MjMzODI4NTI1LDM1Mi4wOTYwNjA4MDkzODM0LDEuMzM4ODkzMjQwNjQ3ODkwN0UtNCwwLjMyMzIzOTQ3NjIyNDgxNTEsNS4zMDMzMzMwODgyMTg0ODNFLTQsMC4wMDYzMDYzMTM0MTc0MTkwMDY1LDAuMDE1NDgyMDU0MDAyMDMxOTc2LDAuMDMzNjM3NzY3Nzg1NjExNDY0LDAuMjY3MzE3NzY1MTIxNzgyNywwLjI1NjM1OTIwNDQ5NTA3NTUsMC4wLDI2OC43NjA5MzkyOTU3MzY5Myw0NzIzMDAuNDg1OTAzMDUxMiwyOTEyNTYuODgyMDgxODc5NTQsMTIwMDM4LjA1ODcxOTE4NjQ5LDIwODc1MC43NTEwMDExNTY2MywwLjAsMTY3Mzg1NS44MjQ5NzI4MDIsMTA2MjI2LjU5ODQxNzA0ODc0LDUzNzc5Mi44ODg4NjA2MTY1LDIwNjc0OC43MjEyMDIwNTk4NSw0ODA3LjQyODgyMzc2MzY5OCwxODMyNDcxLjE5Njc2NzE5LDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDM4NTg0LjQwNjc0OTExMTA1LDAuMCwwLjAsNTUuNjgwNzY5OTg2Njc1ODU1LDU5MDk5LjcyOTY4MjE1NDk4LDYyMTc5LjA3MDUxNjE0MDYsMC4wLDAuMCwwLjA1MjAwNjc1MjM3MTMxNTQ0LDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDg4NDk5Ljg4NTI3MDAxNjI0LDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCw3LjgzMDc5NDIyNDMzMTkzOEUtOSw3LjAxMjAxOTQzMjM3MjI5NUUtNSw3My41MzUyOTIwMjU4Mzc5OCwzMjg0MS45MjYyNTQ1MTM0NSw0MTU0My4zMTY2MDYxMDk0OTYsNDI1LjYwODU0NTEzNzExOTcsMzA1NS40Mjc2MzA2NDU4MywzMS40ODY3MzU1MzA5NDI3NjcKKzEzLFN1biA2IEZlYiAxMSwyMjEwLjQyNDc0OTUyNzgyMiw1NjUxMy41NzY0Njk5MzIyMjQsNzY4NjQuMjYzMTQyNjg1OTQsMjM3MzQ1LjQ3ODQxOTg1ODgsMC4wNDMzODcyNDQwODA5OTYwOCwxLjAzNjc3NzI4MTM4ODUxNzcsMzQuODM2NDY5NzI1NDQ3MDcsMC4wLDEuMjIxNDU0MTA4NTkwMTM2OEUtNiwwLjAyNzQ3MTQ0NDkyMzY5OTA0MiwzLjc2MjgyNTgwNDI3OTI2MkUtNSwxMi4wNTQyOTkzNDU0MjM1MjEsODIyNS41NzQ4NTQ5NTcyMjQsMC4wMDkzMzE4MjQ4OTExNDQ1MTgsMTEuODA3NDU4NjgzOTcwMTczLDAuMDQ3NDM3MzM3NzE4NDAwMzEsMC4zNjk0MjU0NzU0NDA0ODA0LDAuODc5NDQ2NjgyNzg2NTMwNiwxLjg3Mzc5NjMwMDg0Mzc3ODYsOS41MTQ4MzU0OTE4MzE3NzcsOC44MTE0OTAxMzI5NjU5MTUsMC4wLDg1NDIuMjgxNTgyOTg2Njg1LDEwMTcxOTYuNzQ0MjA4Mzk0OCw1MjM0NS4yOTEwNjM5ODc2NywwLjAsMzg3NzIwLjgyMzgxODY5OTgsMC4wLDgxOTkuOTkyMDQyNDkxODEsMC4yNzYwMzk3NjU4NzQ4ODY2LDcyNDI5Ny40ODUyMDA4MDY1LDQ5Mzg5MS4xNjk2ODQ5MzYsMC4wLDI1OTk3My45NTA0OTU1NjM5NCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwyMDQxLjc0Njk0NTcwMTE0MDIsNDMwNjAyLjYxMzU2Njc0LDk2Nzk3NC4zNzkwMjk2NDI4LDAuMCwwLjAsMy4xNzUwNzg2Nzg2OTQ0NTQ1LDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDE1ODcyNDUuODA4NDIyNjE4OCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMS4yMjI0NjIyNjQ1NzY3NTc1RS02LDAuMDA2NjU4Nzk1MTE0NjEzMTMzNiw1MDk5LjY5NDk5OTcwNzY5NCw0NTQ5NzUuMjg4OTA3MDYxNzQsMjI4ODMzLjM5ODczNTQxNzUyLDE2NzQ5LjA4ODMyNDIyNjM4LDY0MDQxLjk0NzMyNDc0NzYwNSw3Ljk2MzQ3OTcyNzg1MDQ1MDYKKzE0LE1vbiA3IEZlYiAxMSwxMDYwMjguOTMwNzc0Mzg2MzIsNTk4MTQ3LjUzNjQxOTM3ODcsNjUxMjk1Ljc3NDgyMjY5MTIsMjIxMDAxNi44NDc4NDcyMiwyLjYxMTQ3OTA1NTI4NjkyNDUsNDYuNzEzNjcwMTkwMjEyNCwxMTQzLjAwNzk4NTEwMTk2NzUsMC4wLDEuMjk3Njg0OTAxMzg1NzM2OEUtNCwxLjYyNTQwODQyNTQ2MDAwOTQsMC4wMDM1MDM1NDg1NTU0NTI2OTEsNDIyLjEwNDU3ODAwODcwODM2LDE5MzAxMi43MTQxMTc2NTQ0LDAuNTM0Mzk0NTAwODI3ODY4Myw0MDcuMjEwNDI0Mjk0MTY5NiwzLjE1MDMxOTk0NDYyMDczMzMsMTcuOTE4MDY1MzAzMjQ3MTI2LDQxLjIzNjMxMDEzODcyNTM1LDg1Ljk2MTAyNTYxNzczNTY0LDMyMC40MzcxMjE2MzkwOTA5NSwyODUuMzQ2MTMzNTUxNDcxNTUsMC4wLDE5NTk3MS44NzMxMTI5ODQ2NywwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjE3NDE4ODgwOTg2NTk2MDEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDU4MDcyLjg1NzA0NTE1ODQ3LDI3MDA2LjY4OTQzNTI2MDY3LDgzMzQ0MC45NzUwODI1OTM5LDAuMCwwLjAsMTU1LjM0MTM5MTY1MDQyMDkyLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDIxOTY0MzEuMTg5NDIxNTQ0LDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwxLjI5OTEwMzM2NzA2OTI4NjJFLTQsMC40NzQ4ODk0NTg0OTc2MDI1LDE0NzAzMy4zNjU0MTcyMTk5NiwxODc1NjIuNTcxNDAzODExOCwyMTA0LjgyMjE3NTQ1NjI4MiwyMzk3MjkuMjExOTc1NzkwODIsNzYxMzEuNTExODA2Nzg5MzksNS4wMTk3NjI3MDg2MDA4NTMKKzE1LFR1ZSA4IEZlYiAxMSw1MDEyMTMuNzY1NDEwOTYwNTQsNjc5MDUuNjM3MjE4NjYzMDYsMzc5MzYuMzM2OTAyODkzNDEsMzAyMzA5LjA1MjMyNjgyOTMsOTkuMTM3MjQ1MzQ4ODk0OTQsMTQzMi4wNTM1OTI3ODIwMjIsMjc1MTMuNTM0MjMzNjM2NjgsMC4wLDAuMDA3MzQxOTk4NzY2MzQwMzA5NSw2Mi42Mzc4MzA1NzYyODk2NywwLjE4MDY5Mzc4MTEwMTQ4OTI2LDEwOTAzLjQzNzYwODM5OTE2NiwxNzY0MTk0LjI5MTk4NjkxNDgsMTkuODg0NDA3MTIyNzAxNjMsMTAzNzQuOTYwNDMyNDU4NTg3LDEyNi40MDAyNTgyNTk3NTc0LDU4Ni4xOTI3ODE2NDA5ODc2LDEzMTAuMTIzNDI0MzE1NzE1NywyNjc5LjQxMzYzMTM1ODczNTUsNzk5NC44NzU1OTMwMTE1MjYsNjgyOS41ODQ4MTQyOTQyNjksMC4wLDEwMTMzMTUuMzM1Mjg4NDg5NSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCw4Ljk4NjMxODUyMjk2ODYyRS00LDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCw3NjQ0NDQuNjY5OTk1NTY1NywwLjAsMC4wLDAuMCwwLjAsNDcyMy44NzA3OTc1MDM3MjcsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wMDQ3MDY4ODg3MDk2MTAxMzQsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMDA3MzUxOTQyMzA1NzA2ODk2LDIwLjM0OTI4NTM3OTM2MTk1NSwxMDgyOTkuODg1NzgyMzg0MTgsMC4wLDAuMCw4NTA5Ni45ODgzNzAzMTY5OCwwLjAsMC4wMjU4OTU2NTE1NTQwMzEzMDYKKzE2LFdlZCA5IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMTYyMC42MTQxNjQyODU3NjE1LDIwMTc1LjgyNDYxOTMwMTY1NywyOTI1NjEuNjA5OTIyMDM3NiwwLjAsMC4xNTMzMTkyNTc5NTk5NjA0MywxMDQ1LjE3ODcwMzg3MjI5MzIsMy41NjI3NDQ1NzkzMzU5NDUzLDEzMTA0My4xNTg2MDAzNTExMiwyMzMwODYuMTc4MzI0OTc5NCwzMjMuMjY2OTEwMjc3MDg5MSwxMjMyOTUuMTkzNjY0MDAwOTUsMjEzMC4xNTc3MjM1MzY4NjczLDg3MDkuMjY0NDQ4ODYxODkyLDE5MDEzLjI5OTM2MTc5NDQxLDM4MjgzLjQyODMyMTczNDAzNCw5MjY1OS43NTkyOTQyOTAwOCw3NDU5Ni42MDM4Nzg2MjkxOSwwLjAsNDkxMC45ODgwNDI0NzcwMzEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsNy43NzIwNDYyNjUxOTE5MDFFLTUsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDM5Njk5NC4xMTQxMDYxNTYwNSwwLjAsMC4wLDAuMCwwLjAsNjAwOTYuOTIyMTAyNzYyOTksMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMy42NTYxNjA5OTc5NTgyMTVFLTQsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMTUzNTU2NTg2NTYzMzkwODgsMzU5Ljc4OTExNjY5NTAyMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAwMTkyMTQyOTYzMTE3MzI2NzgKKzE3LFRodSAxMCBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDc4MTEuNzYxNTYyOTA2ODQ3LDg4NjYzLjU5MTc2MTk4Njk3LDk0MjY4My45NDczMTA0ODg5LDAuMCwwLjgyMTQ1NjYwMTQ1NjA1NTEsNTA5OS42ODEzNDgyMTcxNDQsMTguNjM0MDAzNDY0NzI3ODcsNTE2MDEzLjYyNjQxMzkyOTMzLDAuMCwxNTU4Ljk4NjQ3NzgwODEyMDUsNDg2MTk3LjE2MjE2MDE0MDY0LDEwMzkzLjk0ODYxNTg5NjUxLDM5OTIwLjk0NDkwMDIzMjA1LDg1NTQwLjYyMDQyMDkwOTYyLDE2OTYwOS4wMzE2MTk2NTg5LDM1ODA1MS4yMjQ3Mjg0NDgyLDI2OTE5Mi40NjE2ODkzMTM0NywwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwyMzY1MzMuMTM5NTM5ODg1OTIsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMS40ODIwOTQzNjIzMDc4OTM0RS00LDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjgyMjc5OTkwMjgxNzgwNTYsMTc5OS42MDMyNTEwNjk4MTg1LDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxOCxGcmkgMTEgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwxODIwOTIuNzc4MTcyMTQ5OSw1MTM0ODMuOTU2MTY2ODk2NSwyNDc2OC4wNDgzNjIyODI4MDMsMC4wLDMyLjEzMDY4NjMyMTUwMDk1LDE0MTkyMi42MjY4MDQ1OTQxMyw2NzQuNzAyNzMyMDU5Mzg2MSwxMDIzODYzLjI4Nzg0OTM5OTMsMy4zOTQ0MzA0NjIxOTgzMzczRS05LDQxOTIxLjk2MTQxNTEzOTMsMTE3Nzc2NC42OTk2OTY4ODc1LDIzMTcwNi43NTEwOTM1NjI5Myw1NDk4OTYuNzIzOTQyMDk2NSw3NTE3ODAuNTg3NDAzOTQ4Miw5NDg2ODcuMjg5MjIxNDYzLDc1NTQ5Ny45MTYzNzUwMTc3LDI3NTczNC45MzA5NzM4NTgxNywwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDIuNzcwNDE5MTU3MDQ5OTk0NUUtNywwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCw0NTg5MDcuNDk4NjMzNjQyMiwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwyLjI0MzE3ODI3NjUyNzk0OTZFLTYsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDMyLjE5MTk1NjY2NjM0MzMsNTY1OTIuMTM0NDMxNjU0OTIsMC4wLDAuMCwwLjAsMC4wLDAuMCw3LjAyMTQyNzM3MDU2MDYyMUUtNgorMTksU2F0IDEyIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsNDEyODU2LjA1MzQxNDI1OTg2LDE0MDQ5LjgwNDMyOTU1NTYxMywwLjAsMC4wLDEyNjAuNzQ3MjEyMDc3MjIyMiwxMDkwNjY5Ljk1Mzk1MjA2MSwyMDQ1NC41MzA0OTU5NTM4MzMsMC4wLDUuMDkxNDYzMDExOTA3NTAzRS0xNSw0MjE4MDcuNDU1MTkwODEyMjQsMTUuNjM3MzI4NzA2NTM0NDE5LDMwNDUzNy41NDQwMTg1NTQ3MywyMzA3ODUuNTgwMDcyNzU3MSw3NjAyMi4yMzgwMDU2NDkzMywxMjk0MC45Njg0MjY5MDk5NzQsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDQuNDUxODQ3ODk4MTgzNDY3RS0xMiwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMi40NDc3MDU0MTYyODc1NjM1RS0xMiwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMTI2NC4xNzQ2NDM1NzE2ODE0LDExMDY3MTMuMDg3Njc1MTA3OSwwLjAsMC4wLDAuMCwwLjAsMC4wLDcuODQ0ODY4NDU2MDI0MzFFLTEwCisyMCxTdW4gMTMgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMTg2MzguNzM0ODQ4Mzk2Nzk4LDE1MTY4LjI2ODA5MDc2NDg3NiwyMTcyMzMuMDc2MTc2MjkyNDQsMC4wLDIuOTQ2MjU5NTE4MDIzNjAyN0UtMTksNDU4NDEuOTAxNzM3NjA0NzU2LDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDIuODc1MjU2MTkyODk5MjYwNUUtMTYsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDIuMTEzODgxNTQzNjc2NjhFLTE2LDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwxODc3Ni40MTk1NzcxODE5NDMsMTE1NTg4Ny41NTQ2MjEzOTc1LDAuMCwwLjAsMC4wLDAuMCwwLjAsOC42MzkyMDc1MzE0Njc5MTlFLTEzCisyMSxNb24gMTQgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMTQxMjY0LjkxMjEyMzcxNDA1LDAuMCwyOTMyNjMuMzA5NjEyNDAzMywwLjAsOC4yMzMxNzY1MTg3ODE3NkUtMjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMS41MDA1NzUzNDMyMTI1NzE3RS0xOCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMTQ3NjAyLjk0OTE4MzI1ODQsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyMixUdWUgMTUgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMzc0NTcyLjQ5Mjg4MDYzNDQ0LDAuMCwwLjAsMC4wLDguNDgzMjUzODc4ODA5NkUtMjYsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMi4xNDc2MzE0NDgyMTg2MjY1RS0yMiwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsNTkzNzM3LjE5NzE5OTcxNDYsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyMyxXZWQgMTYgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDEuMzczNDMyMzc4NjA4NDI2OEUtMjcsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDEuMjgyMzc4OTcyODk4Mjc0OEUtMjUsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDcuMjE2NDA5NDg5NjQzNzYxRS0yNSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMTA0OTU5LjA4MzYwMDAzNDY4LDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDMuMjYxNDU5NDI5MTYxODMzOEUtMjQKKzI0LFRodSAxNyBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMS45MTc5NTQyMDkyNDE2OTI5RS0yOCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMy4zODY0MDA2NTYzMzIwMDZFLTI2LDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwxLjQ0MTQ5MTMxODU3OTk5NkUtMjQKKzI1LEZyaSAxOCBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDYuMTUyODE4MTM0ODE4NDMyRS0yNgorMjYsU2F0IDE5IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDEuMzk2MTE1MTg5ODk2NTA1NUUtMjcsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDEuNzI2OTM1ODc5NDMxOTk4RS0yNiwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDQuNzA1MDMxMTUxODY4OTg4NkUtMjYKKzI3LFN1biAyMCBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCw0LjMwMzg2NTYwNTM1MDY2NUUtMjgsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDEuODEyMTQ2MjI5MDA4NzI4M0UtMjYKKzI4LE1vbiAyMSBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMS4yODQ3NDkzNzg2MDc0NjZFLTI5LDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwzLjI4NjU3NDcyNTkwMjQ3NUUtMjgsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDEuODU1NDM5MzE3MDU5MzU4M0UtMjcsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwxLjE4NTM5MjIwODg1NTIzOTFFLTI2CisyOSxUdWUgMjIgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDIuNjcxMTkxMDcxNzY0MDg5RS0zMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMS42NDUxNzkzNjI2NDk1MTY1RS0yOCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsNS40MzgyMTU2Nzg4OTczNTg1RS0yOCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDYuMzA5ODAzNDk0MTQ1NzEzRS0yNworMzAsV2VkIDIzIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwxLjQwMzYwMTY3NzE4ODI1MjJFLTMwLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwxLjA1MDg3NzU3MTM3MjI2NkUtMjgsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDQuMTYyNzM5Nzc5NzAxMTkxRS0yOCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDMuOTIxNDUwNDIzNDM2NTM3NEUtMjcKKzMxLFRodSAyNCBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsNS4zMTUyNzU3MjA2Mzg5MTRFLTMxLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCw2LjIxMTE4NjA0NDYyMTEwNkUtMjksMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDIuMDcyMTk1MTI2MjE4OTY3NkUtMjgsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwyLjM1NDA3NzI4MDczMDE0NkUtMjcKKzMyLEZyaSAyNSBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsNC40MDYxOTc0MDI5MDAxMzRFLTMxLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwzLjkxOTU2MDQ3NzY2NzMxMDdFLTI5LDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwxLjM5NDg0NzkzNzU1NDExOTRFLTI4LDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMS40NzI3NzUxODkwNTYyNjQ0RS0yNwpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTRUlSX0ZEX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9Qb3B1bGF0aW9uIENvdW50XzAuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTRUlSX0ZEX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9Qb3B1bGF0aW9uIENvdW50XzAuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRlYWE4MTQKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNFSVJfRkRfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL1BvcHVsYXRpb24gQ291bnRfMC5jc3YKQEAgLTAsMCArMSwzMyBAQAoraXRlcmF0aW9uLHRpbWUsc3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vbm9kZS90cmFuc3BvcnQvcGlwZS9QSEwKKzEsVHVlIDI1IEphbiAxMSw0NzkzMi41NDc5NDUyMDU0ODYKKzIsV2VkIDI2IEphbiAxMSw0NzkzMi41NDc5NDUyMDU0ODYKKzMsVGh1IDI3IEphbiAxMSw0NzkzMi41NDc5NDUyMDU0ODYKKzQsRnJpIDI4IEphbiAxMSw0NzkzMi41NDc5NDUyMDU0ODYKKzUsU2F0IDI5IEphbiAxMSw0NzkzMi41NDc5NDUyMDU0ODYKKzYsU3VuIDMwIEphbiAxMSw0NzkzMi41NDc5NDUyMDU0ODYKKzcsTW9uIDMxIEphbiAxMSw0NzkzMi41NDc5NDUyMDU0NworOCxUdWUgMSBGZWIgMTEsNDc5MzIuNTQ3OTQ1MjA1NDg2Cis5LFdlZCAyIEZlYiAxMSw0NzkzMi41NDc5NDUyMDU0ODYKKzEwLFRodSAzIEZlYiAxMSw0NzkzMi41NDc5NDUyMDU0OAorMTEsRnJpIDQgRmViIDExLDQ3OTMyLjU0Nzk0NTIwNTQ4NgorMTIsU2F0IDUgRmViIDExLDQ3OTMyLjU0Nzk0NTIwNTQ3CisxMyxTdW4gNiBGZWIgMTEsNDc5MzIuNTQ3OTQ1MjA1NDcKKzE0LE1vbiA3IEZlYiAxMSw0NzkzMi41NDc5NDUyMDU0NworMTUsVHVlIDggRmViIDExLDQ3OTMyLjU0Nzk0NTIwNTQ3CisxNixXZWQgOSBGZWIgMTEsNDc5MzIuNTQ3OTQ1MjA1NDcKKzE3LFRodSAxMCBGZWIgMTEsNDc5MzIuNTQ3OTQ1MjA1NDgKKzE4LEZyaSAxMSBGZWIgMTEsNDc5MzIuNTQ3OTQ1MjA1NDcKKzE5LFNhdCAxMiBGZWIgMTEsNDc5MzIuNTQ3OTQ1MjA1NDcKKzIwLFN1biAxMyBGZWIgMTEsNDc5MzIuNTQ3OTQ1MjA1NDcKKzIxLE1vbiAxNCBGZWIgMTEsNDc5MzIuNTQ3OTQ1MjA1NDcKKzIyLFR1ZSAxNSBGZWIgMTEsNDc5MzIuNTQ3OTQ1MjA1NDcKKzIzLFdlZCAxNiBGZWIgMTEsNDc5MzIuNTQ3OTQ1MjA1NDgKKzI0LFRodSAxNyBGZWIgMTEsNDc5MzIuNTQ3OTQ1MjA1NDcKKzI1LEZyaSAxOCBGZWIgMTEsNDc5MzIuNTQ3OTQ1MjA1NDcKKzI2LFNhdCAxOSBGZWIgMTEsNDc5MzIuNTQ3OTQ1MjA1NDgKKzI3LFN1biAyMCBGZWIgMTEsNDc5MzIuNTQ3OTQ1MjA1NDgKKzI4LE1vbiAyMSBGZWIgMTEsNDc5MzIuNTQ3OTQ1MjA1NDcKKzI5LFR1ZSAyMiBGZWIgMTEsNDc5MzIuNTQ3OTQ1MjA1NDcKKzMwLFdlZCAyMyBGZWIgMTEsNDc5MzIuNTQ3OTQ1MjA1NDg2CiszMSxUaHUgMjQgRmViIDExLDQ3OTMyLjU0Nzk0NTIwNTQ4CiszMixGcmkgMjUgRmViIDExLDQ3OTMyLjU0Nzk0NTIwNTQ4CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNFSVJfRkRfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL1BvcHVsYXRpb24gQ291bnRfMS5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNFSVJfRkRfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL1BvcHVsYXRpb24gQ291bnRfMS5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmFjMTE2NwotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0VJUl9GRF9SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vUG9wdWxhdGlvbiBDb3VudF8xLmNzdgpAQCAtMCwwICsxLDMzIEBACitpdGVyYXRpb24sdGltZSxzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9ub2RlL3RyYW5zcG9ydC9waXBlL1BILTExLHN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL25vZGUvdHJhbnNwb3J0L3BpcGUvUEgtMyxzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9ub2RlL3RyYW5zcG9ydC9waXBlL1BILTcsc3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vbm9kZS90cmFuc3BvcnQvcGlwZS9QSC1OQ1IKKzEsVHVlIDI1IEphbiAxMSwyOC45OTQ1MjA1NDc5NDUyMDcsMTQxMi45NDI0NjU3NTM0MjQ2LDczNTcuODQzODM1NjE2NDM5LDQwODUzLjgyMTkxNzgwODIyCisyLFdlZCAyNiBKYW4gMTEsMjguOTk0NTIwNTQ3OTQ1MjA3LDE0MTIuOTQyNDY1NzUzNDI0Niw3MzU3Ljg0MzgzNTYxNjQ0LDQwODUzLjgyMTkxNzgwODIyCiszLFRodSAyNyBKYW4gMTEsMjguOTk0NTIwNTQ3OTQ1MjA3LDE0MTIuOTQyNDY1NzUzNDI0Niw3MzU3Ljg0MzgzNTYxNjQ0MSw0MDg1My44MjE5MTc4MDgyMgorNCxGcmkgMjggSmFuIDExLDI4Ljk5NDUyMDU0Nzk0NTIwNywxNDEyLjk0MjQ2NTc1MzQyNDYsNzM1Ny44NDM4MzU2MTY0NCw0MDg1My44MjE5MTc4MDgyMTQKKzUsU2F0IDI5IEphbiAxMSwyOC45OTQ1MjA1NDc5NDUyMSwxNDEyLjk0MjQ2NTc1MzQyNDgsNzM1Ny44NDM4MzU2MTY0NDE1LDQwODUzLjgyMTkxNzgwODIyCis2LFN1biAzMCBKYW4gMTEsMjguOTk0NTIwNTQ3OTQ1MjE0LDE0MTIuOTQyNDY1NzUzNDI1Myw3MzU3Ljg0MzgzNTYxNjQ0Miw0MDg1My44MjE5MTc4MDgyMgorNyxNb24gMzEgSmFuIDExLDI4Ljk5NDUyMDU0Nzk0NTIxNCwxNDEyLjk0MjQ2NTc1MzQyNTMsNzM1Ny44NDM4MzU2MTY0NDIsNDA4NTMuODIxOTE3ODA4MjE0Cis4LFR1ZSAxIEZlYiAxMSwyOC45OTQ1MjA1NDc5NDUyMiwxNDEyLjk0MjQ2NTc1MzQyNTUsNzM1Ny44NDM4MzU2MTY0NDMsNDA4NTMuODIxOTE3ODA4MjEKKzksV2VkIDIgRmViIDExLDI4Ljk5NDUyMDU0Nzk0NTIyNSwxNDEyLjk0MjQ2NTc1MzQyNTMsNzM1Ny44NDM4MzU2MTY0NDIsNDA4NTMuODIxOTE3ODA4MjEKKzEwLFRodSAzIEZlYiAxMSwyOC45OTQ1MjA1NDc5NDUyMjUsMTQxMi45NDI0NjU3NTM0MjUzLDczNTcuODQzODM1NjE2NDQzLDQwODUzLjgyMTkxNzgwODIxCisxMSxGcmkgNCBGZWIgMTEsMjguOTk0NTIwNTQ3OTQ1MjIsMTQxMi45NDI0NjU3NTM0MjUsNzM1Ny44NDM4MzU2MTY0NDQsNDA4NTMuODIxOTE3ODA4MgorMTIsU2F0IDUgRmViIDExLDI4Ljk5NDUyMDU0Nzk0NTIyNSwxNDEyLjk0MjQ2NTc1MzQyNSw3MzU3Ljg0MzgzNTYxNjQ0NCw0MDg1My44MjE5MTc4MDgxOQorMTMsU3VuIDYgRmViIDExLDI4Ljk5NDUyMDU0Nzk0NTIyNSwxNDEyLjk0MjQ2NTc1MzQyNTMsNzM1Ny44NDM4MzU2MTY0NDUsNDA4NTMuODIxOTE3ODA4MTkKKzE0LE1vbiA3IEZlYiAxMSwyOC45OTQ1MjA1NDc5NDUyMywxNDEyLjk0MjQ2NTc1MzQyNTUsNzM1Ny44NDM4MzU2MTY0NDUsNDA4NTMuODIxOTE3ODA4MTkKKzE1LFR1ZSA4IEZlYiAxMSwyOC45OTQ1MjA1NDc5NDUyMywxNDEyLjk0MjQ2NTc1MzQyNTUsNzM1Ny44NDM4MzU2MTY0NDYsNDA4NTMuODIxOTE3ODA4MTkKKzE2LFdlZCA5IEZlYiAxMSwyOC45OTQ1MjA1NDc5NDUyMywxNDEyLjk0MjQ2NTc1MzQyNTcsNzM1Ny44NDM4MzU2MTY0NDYsNDA4NTMuODIxOTE3ODA4MTkKKzE3LFRodSAxMCBGZWIgMTEsMjguOTk0NTIwNTQ3OTQ1MjMyLDE0MTIuOTQyNDY1NzUzNDI2LDczNTcuODQzODM1NjE2NDQ2LDQwODUzLjgyMTkxNzgwODIKKzE4LEZyaSAxMSBGZWIgMTEsMjguOTk0NTIwNTQ3OTQ1MjMsMTQxMi45NDI0NjU3NTM0MjYsNzM1Ny44NDM4MzU2MTY0NDcsNDA4NTMuODIxOTE3ODA4MgorMTksU2F0IDEyIEZlYiAxMSwyOC45OTQ1MjA1NDc5NDUyMywxNDEyLjk0MjQ2NTc1MzQyNiw3MzU3Ljg0MzgzNTYxNjQ0OCw0MDg1My44MjE5MTc4MDgyMQorMjAsU3VuIDEzIEZlYiAxMSwyOC45OTQ1MjA1NDc5NDUyMzIsMTQxMi45NDI0NjU3NTM0MjYsNzM1Ny44NDM4MzU2MTY0NSw0MDg1My44MjE5MTc4MDgyMTQKKzIxLE1vbiAxNCBGZWIgMTEsMjguOTk0NTIwNTQ3OTQ1MjMsMTQxMi45NDI0NjU3NTM0MjYsNzM1Ny44NDM4MzU2MTY0NSw0MDg1My44MjE5MTc4MDgyMTQKKzIyLFR1ZSAxNSBGZWIgMTEsMjguOTk0NTIwNTQ3OTQ1MjMyLDE0MTIuOTQyNDY1NzUzNDI2NCw3MzU3Ljg0MzgzNTYxNjQ1MSw0MDg1My44MjE5MTc4MDgyMTQKKzIzLFdlZCAxNiBGZWIgMTEsMjguOTk0NTIwNTQ3OTQ1MjMsMTQxMi45NDI0NjU3NTM0MjY0LDczNTcuODQzODM1NjE2NDUsNDA4NTMuODIxOTE3ODA4MjEKKzI0LFRodSAxNyBGZWIgMTEsMjguOTk0NTIwNTQ3OTQ1MjMsMTQxMi45NDI0NjU3NTM0MjYyLDczNTcuODQzODM1NjE2NDUsNDA4NTMuODIxOTE3ODA4MjEKKzI1LEZyaSAxOCBGZWIgMTEsMjguOTk0NTIwNTQ3OTQ1MjMyLDE0MTIuOTQyNDY1NzUzNDI2Miw3MzU3Ljg0MzgzNTYxNjQ1MSw0MDg1My44MjE5MTc4MDgyMQorMjYsU2F0IDE5IEZlYiAxMSwyOC45OTQ1MjA1NDc5NDUyMzUsMTQxMi45NDI0NjU3NTM0MjYsNzM1Ny44NDM4MzU2MTY0NTE1LDQwODUzLjgyMTkxNzgwODIxNAorMjcsU3VuIDIwIEZlYiAxMSwyOC45OTQ1MjA1NDc5NDUyMzUsMTQxMi45NDI0NjU3NTM0MjYsNzM1Ny44NDM4MzU2MTY0NTE1LDQwODUzLjgyMTkxNzgwODIxNAorMjgsTW9uIDIxIEZlYiAxMSwyOC45OTQ1MjA1NDc5NDUyMzIsMTQxMi45NDI0NjU3NTM0MjYyLDczNTcuODQzODM1NjE2NDUxNSw0MDg1My44MjE5MTc4MDgyMTQKKzI5LFR1ZSAyMiBGZWIgMTEsMjguOTk0NTIwNTQ3OTQ1MjMyLDE0MTIuOTQyNDY1NzUzNDI2Miw3MzU3Ljg0MzgzNTYxNjQ1MTUsNDA4NTMuODIxOTE3ODA4MjE0CiszMCxXZWQgMjMgRmViIDExLDI4Ljk5NDUyMDU0Nzk0NTIzNSwxNDEyLjk0MjQ2NTc1MzQyNjQsNzM1Ny44NDM4MzU2MTY0NTIsNDA4NTMuODIxOTE3ODA4MgorMzEsVGh1IDI0IEZlYiAxMSwyOC45OTQ1MjA1NDc5NDUyMzUsMTQxMi45NDI0NjU3NTM0MjY0LDczNTcuODQzODM1NjE2NDUzLDQwODUzLjgyMTkxNzgwODIxCiszMixGcmkgMjUgRmViIDExLDI4Ljk5NDUyMDU0Nzk0NTI0NiwxNDEyLjk0MjQ2NTc1MzQyNjYsNzM1Ny44NDM4MzU2MTY0NTQsNDA4NTMuODIxOTE3ODA4MjEKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0VJUl9GRF9SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vUG9wdWxhdGlvbiBDb3VudF8yLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0VJUl9GRF9SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vUG9wdWxhdGlvbiBDb3VudF8yLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NWE2Y2M0Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTRUlSX0ZEX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9Qb3B1bGF0aW9uIENvdW50XzIuY3N2CkBAIC0wLDAgKzEsMzMgQEAKK2l0ZXJhdGlvbix0aW1lLFBILTEtRzY0MDAwMSxQSC0xLUc2NDAwMDIsUEgtMS1HNjQwMDAzLFBILTEtRzY0MDAwNCxQSC0xMC1HNjUwMDAxLFBILTEwLUc2NTAwMDIsUEgtMTAtRzY1MDAwMyxQSC0xMC1HNjUwMDA0LFBILTEwLUc2NTAwMDUsUEgtMTAtRzY1MDAwNixQSC0xMC1HNjUwMDA3LFBILTExLUc2NjAwMDEsUEgtMTEtRzY2MDAwMixQSC0xMS1HNjYwMDAzLFBILTExLUc2NjAwMDQsUEgtMTEtRzY2MDAwNSxQSC0xMi1HNjcwMDAxLFBILTEyLUc2NzAwMDIsUEgtMTItRzY3MDAwMyxQSC0xMi1HNjcwMDA0LFBILTEyLUc2NzAwMDUsUEgtMi1HNjgwMDAxLFBILTItRzY4MDAwMixQSC0yLUc2ODAwMDMsUEgtMi1HNjgwMDA0LFBILTItRzY4MDAwNSxQSC0zLUc2OTAwMDEsUEgtMy1HNjkwMDAyLFBILTMtRzY5MDAwMyxQSC0zLUc2OTAwMDQsUEgtMy1HNjkwMDA1LFBILTMtRzY5MDAwNixQSC00LUc3MDAwMDEsUEgtNC1HNzAwMDAyLFBILTQtRzcwMDAwMyxQSC00LUc3MDAwMDQsUEgtNC1HNzAwMDA1LFBILTQtRzcwMDAwNixQSC00LUc3MDAwMDcsUEgtNC1HNzAwMDA4LFBILTQtRzcwMDAwOSxQSC00LUc3MDAwMTAsUEgtNC1HNzAwMDExLFBILTUtRzcxMDAwMSxQSC01LUc3MTAwMDIsUEgtNS1HNzEwMDAzLFBILTUtRzcxMDAwNCxQSC01LUc3MTAwMDUsUEgtNS1HNzEwMDA2LFBILTYtRzcyMDAwMSxQSC02LUc3MjAwMDIsUEgtNi1HNzIwMDAzLFBILTYtRzcyMDAwNCxQSC02LUc3MjAwMDUsUEgtNy1HNzMwMDAxLFBILTctRzczMDAwMixQSC03LUc3MzAwMDMsUEgtNy1HNzMwMDA0LFBILTgtRzc0MDAwMSxQSC04LUc3NDAwMDIsUEgtOC1HNzQwMDAzLFBILTgtRzc0MDAwNCxQSC04LUc3NDAwMDUsUEgtOS1HNzUwMDAxLFBILTktRzc1MDAwMixQSC05LUc3NTAwMDMsUEgtOS1HNzUwMDA0LFBILTktRzc1MDAwNSxQSC1DQVItRzIzMDAwMSxQSC1DQVItRzIzMDAwMixQSC1DQVItRzIzMDAwMyxQSC1DQVItRzIzMDAwNCxQSC1DQVItRzIzMDAwNSxQSC1OQ1ItRzUyMDAwMQorMSxUdWUgMjUgSmFuIDExLDYwOTQ4MC4wLDcyMzc1My4wLDc2Nzc1Ni4wLDI3NTk1ODEuMCw2MDQ0ODMuMCw2Mzc4NTMuMCwxMjg4NzA2LjAsODM5ODQuMCw1MzU3NzAuMCwxMjUzOTcwLjAsNTMxNjQ4LjAsMTY4MjI1OC4wLDIxOTg5MjguMCw1MTE0NzQuMCwxNzk4MDY3LjAsNTQ4ODk4LjAsODI5OTE3LjAsOTMzNzA5LjAsMTE3MjI4OC4wLDEyMTQ1MzQuMCw2MjY2NDguMCw5NjYyLjAsMTIyMzAxNC4wLDE1MTAzOTEuMCwzNjY5NDkuMCwxNTcwNDAuMCw2MDYyMjkuMCwzNzM4NDQ4LjAsMjAxMjg1MS4wLDIyODU0NTEuMCwxMjgxOTgyLjAsNzA5NjExLjAsMjAyMTgzLjAsMjI4Njk2Ny4wLDIyMzY4NDYuMCwyOTQyNDc3LjAsMjQzNzg2LjAsNDQzOTc0LjAsNzk1MTM3LjAsODQ1NDc0LjAsMTk1Mjg3NC4wLDIxMDEwNjEuMCwyNzI4OTUuMCwxMjIxNjEwLjAsNTE5MTA1LjAsMTg2NjAwMS4wLDI0MzQ2MC4wLDgwNDg3NC4wLDc2MDQyMC4wLDQ5NzUwNi4wLDU2MTMyNi4wLDc3NjYwMC4wLDI0NjU5MjUuMCwzMDAyOTc0LjAsMTI5MzQ2NS4wLDM4ODIyMDkuMCwxMzM3Mzg2LjAsODk2NTAuMCw0MTE5OTQuMCwxOTM5MDk2LjAsNTk4MDc2LjAsNDMyNDAzLjAsNzI5ODQ1LjAsMzQyODIyLjAsNjI4NzkzLjAsMjM5NjIzLjAsODY2MzczLjAsMjMyMTM3My4wLDI2MDUwNy4wLDY3NjAyNS4wLDI3MzM1MS4wLDM0MjAwNy4wLDE0MzI4OC4wLDEuMDQwMTU4M0U3CisyLFdlZCAyNiBKYW4gMTEsNjA5NDgwLjAsNzIzNzUzLjAsNzY3NzU2LjAsMjc1OTU4MS4wLDYwNDQ4My4wLDYzNzg1My4wLDEyODg3MDYuMCw4Mzk4NC4wLDUzNTc3MC4wLDEyNTM5NzAuMCw1MzE2NDguMCwxNjgyMjU4LjAsMjE5ODkyOC4wLDUxMTQ3NC4wLDE3OTgwNjcuMCw1NDg4OTguMCw4Mjk5MTcuMCw5MzM3MDkuMCwxMTcyMjg4LjAsMTIxNDUzNC4wLDYyNjY0OC4wLDk2NjIuMCwxMjIzMDE0LjAsMTUxMDM5MS4wLDM2Njk0OS4wLDE1NzA0MC4wLDYwNjIyOS4wLDM3Mzg0NDguMCwyMDEyODUxLjAsMjI4NTQ1MS4wLDEyODE5ODIuMCw3MDk2MTEuMCwyMDIxODMuMCwyMjg2OTY3LjAsMjIzNjg0Ni4wLDI5NDI0NzcuMCwyNDM3ODYuMCw0NDM5NzQuMCw3OTUxMzcuMCw4NDU0NzQuMCwxOTUyODc0LjAsMjEwMTA2MS4wLDI3Mjg5NS4wLDEyMjE2MTAuMCw1MTkxMDUuMCwxODY2MDAxLjAsMjQzNDYwLjAsODA0ODc0LjAsNzYwNDIwLjAsNDk3NTA2LjAsNTYxMzI2LjAsNzc2NjAwLjAsMjQ2NTkyNS4wLDMwMDI5NzQuMCwxMjkzNDY1LjAsMzg4MjIwOS4wLDEzMzczODYuMCw4OTY1MC4wLDQxMTk5NC4wLDE5MzkwOTYuMCw1OTgwNzYuMCw0MzI0MDMuMCw3Mjk4NDUuMCwzNDI4MjIuMCw2Mjg3OTMuMCwyMzk2MjMuMCw4NjYzNzMuMCwyMzIxMzczLjAsMjYwNTA3LjAsNjc2MDI1LjAsMjczMzUxLjAsMzQyMDA3LjAsMTQzMjg4LjAsMS4wNDAxNTgzRTcKKzMsVGh1IDI3IEphbiAxMSw2MDk0ODAuMCw3MjM3NTMuMCw3Njc3NTYuMCwyNzU5NTgxLjAsNjA0NDgzLjAsNjM3ODUzLjAsMTI4ODcwNi4wLDgzOTg0LjAsNTM1NzcwLjAsMTI1Mzk3MC4wLDUzMTY0OC4wLDE2ODIyNTguMCwyMTk4OTI4LjAsNTExNDc0LjAsMTc5ODA2Ny4wLDU0ODg5OC4wLDgyOTkxNy4wLDkzMzcwOS4wLDExNzIyODguMCwxMjE0NTM0LjAsNjI2NjQ4LjAsOTY2Mi4wLDEyMjMwMTQuMCwxNTEwMzkxLjAsMzY2OTQ5LjAsMTU3MDQwLjAsNjA2MjI5LjAsMzczODQ0OC4wMDAwMDAwMDA1LDIwMTI4NTEuMCwyMjg1NDUxLjAsMTI4MTk4Mi4wLDcwOTYxMS4wLDIwMjE4My4wLDIyODY5NjcuMCwyMjM2ODQ2LjAsMjk0MjQ3Ni45OTk5OTk5OTk1LDI0Mzc4Ni4wLDQ0Mzk3NC4wLDc5NTEzNy4wLDg0NTQ3NC4wLDE5NTI4NzQuMCwyMTAxMDYxLjAsMjcyODk1LjAsMTIyMTYxMC4wLDUxOTEwNS4wLDE4NjYwMDEuMCwyNDM0NjAuMCw4MDQ4NzQuMCw3NjA0MjAuMCw0OTc1MDYuMCw1NjEzMjYuMCw3NzY2MDAuMCwyNDY1OTI1LjAsMzAwMjk3NC4wLDEyOTM0NjUuMCwzODgyMjA5LjAsMTMzNzM4Ni4wLDg5NjUwLjAsNDExOTk0LjAsMTkzOTA5Ni4wLDU5ODA3Ni4wLDQzMjQwMy4wLDcyOTg0NS4wLDM0MjgyMi4wLDYyODc5My4wLDIzOTYyMy4wLDg2NjM3My4wLDIzMjEzNzMuMCwyNjA1MDcuMCw2NzYwMjUuMCwyNzMzNTEuMCwzNDIwMDcuMCwxNDMyODguMCwxLjA0MDE1ODI5OTk5OTk5OThFNworNCxGcmkgMjggSmFuIDExLDYwOTQ4MC4wLDcyMzc1My4wLDc2Nzc1Ni4wLDI3NTk1ODEuMCw2MDQ0ODMuMCw2Mzc4NTMuMCwxMjg4NzA2LjAsODM5ODQuMCw1MzU3NzAuMCwxMjUzOTcwLjAsNTMxNjQ4LjAsMTY4MjI1OC4wLDIxOTg5MjguMCw1MTE0NzQuMCwxNzk4MDY3LjAsNTQ4ODk4LjAsODI5OTE3LjAsOTMzNzA5LjAsMTE3MjI4OC4wLDEyMTQ1MzQuMCw2MjY2NDguMCw5NjYyLjAsMTIyMzAxNC4wLDE1MTAzOTEuMCwzNjY5NDkuMCwxNTcwNDAuMCw2MDYyMjkuMCwzNzM4NDQ4LjAsMjAxMjg1MS4wLDIyODU0NTEuMCwxMjgxOTgyLjAsNzA5NjExLjAsMjAyMTgzLjAsMjI4Njk2Ny4wLDIyMzY4NDYuMDAwMDAwMDAwNSwyOTQyNDc3LjAwMDAwMDAwMDUsMjQzNzg2LjAsNDQzOTc0LjAsNzk1MTM3LjAsODQ1NDc0LjAsMTk1Mjg3NC4wLDIxMDEwNjEuMDAwMDAwMDAwNSwyNzI4OTUuMCwxMjIxNjEwLjAsNTE5MTA1LjAsMTg2NjAwMS4wLDI0MzQ2MC4wLDgwNDg3NC4wLDc2MDQyMC4wLDQ5NzUwNi4wLDU2MTMyNi4wLDc3NjYwMC4wLDI0NjU5MjUuMCwzMDAyOTc0LjAsMTI5MzQ2NS4wLDM4ODIyMDkuMCwxMzM3Mzg2LjAsODk2NTAuMCw0MTE5OTQuMCwxOTM5MDk2LjAsNTk4MDc2LjAsNDMyNDAzLjAsNzI5ODQ1LjAsMzQyODIyLjAsNjI4NzkzLjAsMjM5NjIzLjAsODY2MzczLjAsMjMyMTM3My4wLDI2MDUwNy4wLDY3NjAyNS4wLDI3MzM1MS4wLDM0MjAwNy4wLDE0MzI4OC4wLDEuMDQwMTU4M0U3Cis1LFNhdCAyOSBKYW4gMTEsNjA5NDgwLjAsNzIzNzUzLjAsNzY3NzU2LjAsMjc1OTU4MS4wLDYwNDQ4My4wLDYzNzg1My4wLDEyODg3MDYuMCw4Mzk4NC4wLDUzNTc3MC4wLDEyNTM5NzAuMCw1MzE2NDguMCwxNjgyMjU4LjAsMjE5ODkyOC4wLDUxMTQ3NC4wLDE3OTgwNjcuMCw1NDg4OTguMCw4Mjk5MTcuMCw5MzM3MDkuMCwxMTcyMjg4LjAsMTIxNDUzNC4wLDYyNjY0OC4wLDk2NjIuMCwxMjIzMDE0LjAsMTUxMDM5MS4wLDM2Njk0OS4wLDE1NzA0MC4wLDYwNjIyOS4wLDM3Mzg0NDguMDAwMDAwMDAwNSwyMDEyODUxLjAsMjI4NTQ1MS4wMDAwMDAwMDA1LDEyODE5ODIuMCw3MDk2MTEuMCwyMDIxODMuMDAwMDAwMDAwMDMsMjI4Njk2Ny4wLDIyMzY4NDYuMDAwMDAwMDAwNSwyOTQyNDc3LjAsMjQzNzg2LjAsNDQzOTc0LjAsNzk1MTM3LjAsODQ1NDc0LjAsMTk1Mjg3NC4wLDIxMDEwNjEuMCwyNzI4OTUuMCwxMjIxNjEwLjAsNTE5MTA1LjAsMTg2NjAwMS4wLDI0MzQ2MC4wLDgwNDg3NC4wLDc2MDQyMC4wLDQ5NzUwNi4wLDU2MTMyNi4wLDc3NjYwMC4wLDI0NjU5MjUuMCwzMDAyOTc0LjAsMTI5MzQ2NS4wLDM4ODIyMDkuMCwxMzM3Mzg2LjAsODk2NTAuMCw0MTE5OTQuMCwxOTM5MDk2LjAsNTk4MDc2LjAsNDMyNDAzLjAsNzI5ODQ1LjAsMzQyODIyLjAsNjI4NzkzLjAsMjM5NjIzLjAsODY2MzczLjAsMjMyMTM3My4wLDI2MDUwNy4wLDY3NjAyNS4wLDI3MzM1MS4wLDM0MjAwNy4wLDE0MzI4OC4wLDEuMDQwMTU4M0U3Cis2LFN1biAzMCBKYW4gMTEsNjA5NDgwLjAsNzIzNzUzLjAsNzY3NzU2LjAsMjc1OTU4MS4wLDYwNDQ4My4wLDYzNzg1My4wLDEyODg3MDYuMCw4Mzk4NC4wLDUzNTc3MC4wLDEyNTM5NzAuMCw1MzE2NDguMCwxNjgyMjU4LjAsMjE5ODkyOC4wLDUxMTQ3NC4wLDE3OTgwNjcuMCw1NDg4OTguMCw4Mjk5MTcuMCw5MzM3MDkuMCwxMTcyMjg4LjAsMTIxNDUzNC4wLDYyNjY0OC4wLDk2NjIuMCwxMjIzMDE0LjAsMTUxMDM5MS4wLDM2Njk0OS4wLDE1NzA0MC4wLDYwNjIyOS4wLDM3Mzg0NDguMCwyMDEyODUxLjAsMjI4NTQ1MS4wMDAwMDAwMDA1LDEyODE5ODIuMCw3MDk2MTEuMCwyMDIxODMuMDAwMDAwMDAwMDMsMjI4Njk2Ny4wLDIyMzY4NDYuMDAwMDAwMDAwNSwyOTQyNDc3LjAsMjQzNzg2LjAsNDQzOTc0LjAsNzk1MTM3LjAsODQ1NDc0LjAsMTk1Mjg3My45OTk5OTk5OTk4LDIxMDEwNjEuMCwyNzI4OTUuMCwxMjIxNjEwLjAsNTE5MTA1LjAsMTg2NjAwMS4wLDI0MzQ2MC4wLDgwNDg3NC4wLDc2MDQyMC4wLDQ5NzUwNi4wLDU2MTMyNi4wLDc3NjYwMC4wLDI0NjU5MjUuMCwzMDAyOTc0LjAsMTI5MzQ2NS4wLDM4ODIyMDkuMCwxMzM3Mzg2LjAsODk2NTAuMCw0MTE5OTQuMCwxOTM5MDk2LjAsNTk4MDc2LjAsNDMyNDAzLjAsNzI5ODQ1LjAsMzQyODIyLjAsNjI4NzkzLjAsMjM5NjIzLjAsODY2MzczLjAsMjMyMTM3My4wLDI2MDUwNy4wLDY3NjAyNS4wLDI3MzM1MS4wLDM0MjAwNy4wLDE0MzI4OC4wLDEuMDQwMTU4MzAwMDAwMDAwMkU3Cis3LE1vbiAzMSBKYW4gMTEsNjA5NDgwLjAsNzIzNzUzLjAsNzY3NzU2LjAsMjc1OTU4MS4wLDYwNDQ4My4wLDYzNzg1My4wLDEyODg3MDYuMCw4Mzk4NC4wLDUzNTc3MC4wLDEyNTM5NzAuMCw1MzE2NDguMCwxNjgyMjU4LjAsMjE5ODkyOC4wLDUxMTQ3NC4wLDE3OTgwNjYuOTk5OTk5OTk5OCw1NDg4OTguMCw4Mjk5MTcuMCw5MzM3MDkuMCwxMTcyMjg4LjAsMTIxNDUzMy45OTk5OTk5OTk4LDYyNjY0OC4wLDk2NjIuMCwxMjIzMDE0LjAsMTUxMDM5MS4wLDM2Njk0OS4wLDE1NzA0MC4wLDYwNjIyOS4wLDM3Mzg0NDguMDAwMDAwMDAwNSwyMDEyODUwLjk5OTk5OTk5OTgsMjI4NTQ1MS4wLDEyODE5ODIuMDAwMDAwMDAwMiw3MDk2MTEuMCwyMDIxODMuMDAwMDAwMDAwMDMsMjI4Njk2Ny4wLDIyMzY4NDYuMCwyOTQyNDc3LjAsMjQzNzg2LjAsNDQzOTc0LjAsNzk1MTM3LjAsODQ1NDc0LjAsMTk1Mjg3My45OTk5OTk5OTk4LDIxMDEwNjEuMDAwMDAwMDAwNSwyNzI4OTUuMCwxMjIxNjEwLjAsNTE5MTA1LjAwMDAwMDAwMDA2LDE4NjYwMDEuMCwyNDM0NjAuMCw4MDQ4NzQuMCw3NjA0MjAuMCw0OTc1MDYuMCw1NjEzMjYuMCw3NzY2MDAuMCwyNDY1OTI1LjAsMzAwMjk3NC4wLDEyOTM0NjUuMCwzODgyMjA5LjAsMTMzNzM4Ni4wLDg5NjUwLjAsNDExOTk0LjAsMTkzOTA5Ni4wLDU5ODA3Ni4wLDQzMjQwMy4wLDcyOTg0NS4wLDM0MjgyMi4wLDYyODc5My4wLDIzOTYyMy4wLDg2NjM3My4wLDIzMjEzNzMuMCwyNjA1MDcuMCw2NzYwMjUuMCwyNzMzNTEuMCwzNDIwMDcuMCwxNDMyODguMCwxLjA0MDE1ODMwMDAwMDAwMDJFNworOCxUdWUgMSBGZWIgMTEsNjA5NDgwLjAsNzIzNzUzLjAsNzY3NzU2LjAwMDAwMDAwMDEsMjc1OTU4MS4wLDYwNDQ4My4wLDYzNzg1My4wLDEyODg3MDUuOTk5OTk5OTk5OCw4Mzk4NC4wLDUzNTc3MC4wLDEyNTM5NzAuMCw1MzE2NDguMCwxNjgyMjU4LjAsMjE5ODkyOC4wLDUxMTQ3NC4wLDE3OTgwNjYuOTk5OTk5OTk5OCw1NDg4OTguMCw4Mjk5MTcuMCw5MzM3MDkuMDAwMDAwMDAwMSwxMTcyMjg4LjAsMTIxNDUzMy45OTk5OTk5OTk4LDYyNjY0Ny45OTk5OTk5OTk5LDk2NjIuMCwxMjIzMDE0LjAwMDAwMDAwMDIsMTUxMDM5MS4wMDAwMDAwMDAyLDM2Njk0OC45OTk5OTk5OTk5NCwxNTcwNDAuMCw2MDYyMjguOTk5OTk5OTk5OSwzNzM4NDQ4LjAwMDAwMDAwMDUsMjAxMjg1MC45OTk5OTk5OTk4LDIyODU0NTAuOTk5OTk5OTk5NSwxMjgxOTgyLjAwMDAwMDAwMDIsNzA5NjExLjAwMDAwMDAwMDEsMjAyMTgzLjAwMDAwMDAwMDA2LDIyODY5NjcuMCwyMjM2ODQ2LjAwMDAwMDAwMDUsMjk0MjQ3Ny4wLDI0Mzc4Ni4wLDQ0Mzk3NC4wLDc5NTEzNy4wLDg0NTQ3NC4wLDE5NTI4NzMuOTk5OTk5OTk5OCwyMTAxMDYxLjAwMDAwMDAwMDUsMjcyODk1LjAsMTIyMTYxMC4wLDUxOTEwNS4wMDAwMDAwMDAxLDE4NjYwMDAuOTk5OTk5OTk5OCwyNDM0NjAuMCw4MDQ4NzQuMCw3NjA0MjAuMCw0OTc1MDYuMCw1NjEzMjYuMCw3NzY2MDAuMCwyNDY1OTI1LjAsMzAwMjk3NC4wLDEyOTM0NjUuMCwzODgyMjA4Ljk5OTk5OTk5OTUsMTMzNzM4Ni4wLDg5NjUwLjAsNDExOTk0LjAsMTkzOTA5Ni4wLDU5ODA3Ni4wLDQzMjQwMy4wLDcyOTg0NS4wLDM0MjgyMi4wLDYyODc5My4wLDIzOTYyMy4wLDg2NjM3My4wLDIzMjEzNzMuMCwyNjA1MDcuMCw2NzYwMjUuMCwyNzMzNTEuMCwzNDIwMDcuMCwxNDMyODguMCwxLjA0MDE1ODNFNworOSxXZWQgMiBGZWIgMTEsNjA5NDgwLjAsNzIzNzUzLjAsNzY3NzU2LjAsMjc1OTU4MS4wMDAwMDAwMDEsNjA0NDgzLjAsNjM3ODUzLjAsMTI4ODcwNS45OTk5OTk5OTk4LDgzOTg0LjAsNTM1NzcwLjAsMTI1Mzk3MC4wLDUzMTY0OC4wLDE2ODIyNTguMDAwMDAwMDAwMiwyMTk4OTI4LjAsNTExNDc0LjAsMTc5ODA2Ny4wLDU0ODg5OC4wLDgyOTkxNy4wLDkzMzcwOS4wMDAwMDAwMDAxLDExNzIyODcuOTk5OTk5OTk5OCwxMjE0NTMzLjk5OTk5OTk5OTgsNjI2NjQ4LjAsOTY2Mi4wLDEyMjMwMTQuMCwxNTEwMzkxLjAwMDAwMDAwMDIsMzY2OTQ4Ljk5OTk5OTk5OTk0LDE1NzA0MC4wLDYwNjIyOS4wLDM3Mzg0NDguMDAwMDAwMDAwNSwyMDEyODUwLjk5OTk5OTk5OTgsMjI4NTQ1MS4wLDEyODE5ODIuMDAwMDAwMDAwNSw3MDk2MTEuMDAwMDAwMDAwMSwyMDIxODMuMDAwMDAwMDAwMDMsMjI4Njk2Ny4wLDIyMzY4NDYuMCwyOTQyNDc2Ljk5OTk5OTk5OTUsMjQzNzg2LjAsNDQzOTc0LjAsNzk1MTM3LjAsODQ1NDc0LjAsMTk1Mjg3NC4wLDIxMDEwNjEuMCwyNzI4OTUuMCwxMjIxNjA5Ljk5OTk5OTk5OTgsNTE5MTA1LjAwMDAwMDAwMDA2LDE4NjYwMDEuMCwyNDM0NjAuMCw4MDQ4NzQuMCw3NjA0MjAuMCw0OTc1MDYuMCw1NjEzMjYuMCw3NzY2MDAuMCwyNDY1OTI1LjAsMzAwMjk3NC4wLDEyOTM0NjUuMCwzODgyMjA4Ljk5OTk5OTk5OTUsMTMzNzM4Ni4wLDg5NjUwLjAsNDExOTk0LjAsMTkzOTA5Ni4wLDU5ODA3Ni4wLDQzMjQwMy4wLDcyOTg0NS4wLDM0MjgyMi4wLDYyODc5My4wLDIzOTYyMy4wLDg2NjM3My4wLDIzMjEzNzMuMCwyNjA1MDcuMCw2NzYwMjUuMDAwMDAwMDAwMSwyNzMzNTEuMCwzNDIwMDcuMCwxNDMyODguMDAwMDAwMDAwMDMsMS4wNDAxNTgzMDAwMDAwMDAyRTcKKzEwLFRodSAzIEZlYiAxMSw2MDk0ODAuMCw3MjM3NTMuMCw3Njc3NTYuMDAwMDAwMDAwMSwyNzU5NTgxLjAwMDAwMDAwMSw2MDQ0ODMuMCw2Mzc4NTMuMCwxMjg4NzA2LjAsODM5ODQuMCw1MzU3NzAuMCwxMjUzOTcwLjAsNTMxNjQ4LjAsMTY4MjI1OC4wMDAwMDAwMDAyLDIxOTg5MjguMCw1MTE0NzQuMCwxNzk4MDY2Ljk5OTk5OTk5OTUsNTQ4ODk4LjAsODI5OTE2Ljk5OTk5OTk5OTksOTMzNzA5LjAwMDAwMDAwMDIsMTE3MjI4Ny45OTk5OTk5OTk4LDEyMTQ1MzQuMCw2MjY2NDguMCw5NjYyLjAsMTIyMzAxNC4wLDE1MTAzOTAuOTk5OTk5OTk5OCwzNjY5NDguOTk5OTk5OTk5OTQsMTU3MDQwLjAwMDAwMDAwMDAzLDYwNjIyOS4wLDM3Mzg0NDguMDAwMDAwMDAwNSwyMDEyODUxLjAsMjI4NTQ1MC45OTk5OTk5OTk1LDEyODE5ODIuMDAwMDAwMDAwNSw3MDk2MTEuMDAwMDAwMDAwMSwyMDIxODMuMDAwMDAwMDAwMDMsMjI4Njk2Ny4wLDIyMzY4NDYuMCwyOTQyNDc3LjAsMjQzNzg2LjAsNDQzOTc0LjAsNzk1MTM3LjAsODQ1NDc0LjAsMTk1Mjg3My45OTk5OTk5OTk4LDIxMDEwNjEuMCwyNzI4OTUuMCwxMjIxNjA5Ljk5OTk5OTk5OTUsNTE5MTA1LjAwMDAwMDAwMDEsMTg2NjAwMS4wLDI0MzQ2MC4wLDgwNDg3NC4wLDc2MDQyMC4wLDQ5NzUwNi4wLDU2MTMyNi4wLDc3NjYwMC4wLDI0NjU5MjUuMCwzMDAyOTc0LjAsMTI5MzQ2NS4wLDM4ODIyMDguOTk5OTk5OTk5NSwxMzM3Mzg2LjAsODk2NTAuMCw0MTE5OTQuMCwxOTM5MDk2LjAsNTk4MDc2LjAsNDMyNDAzLjAsNzI5ODQ1LjAsMzQyODIyLjAsNjI4NzkzLjAsMjM5NjIzLjAsODY2MzczLjAsMjMyMTM3My4wLDI2MDUwNy4wLDY3NjAyNS4wMDAwMDAwMDAxLDI3MzM1MS4wMDAwMDAwMDAwNiwzNDIwMDcuMCwxNDMyODguMDAwMDAwMDAwMDMsMS4wNDAxNTgzMDAwMDAwMDA0RTcKKzExLEZyaSA0IEZlYiAxMSw2MDk0NzkuOTk5OTk5OTk5OSw3MjM3NTMuMDAwMDAwMDAwMSw3Njc3NTYuMCwyNzU5NTgxLjAwMDAwMDAwMSw2MDQ0ODIuOTk5OTk5OTk5OSw2Mzc4NTMuMDAwMDAwMDAwMiwxMjg4NzA1Ljk5OTk5OTk5OTUsODM5ODQuMCw1MzU3NzAuMCwxMjUzOTY5Ljk5OTk5OTk5OTgsNTMxNjQ4LjAsMTY4MjI1Ny45OTk5OTk5OTk4LDIxOTg5MjcuOTk5OTk5OTk5NSw1MTE0NzMuOTk5OTk5OTk5OTQsMTc5ODA2Ny4wLDU0ODg5Ny45OTk5OTk5OTk5LDgyOTkxNi45OTk5OTk5OTk5LDkzMzcwOS4wLDExNzIyODguMCwxMjE0NTM0LjAsNjI2NjQ4LjAsOTY2Mi4wLDEyMjMwMTQuMCwxNTEwMzkwLjk5OTk5OTk5OTgsMzY2OTQ4Ljk5OTk5OTk5OTksMTU3MDQwLjAsNjA2MjI5LjAsMzczODQ0OC4wMDAwMDAwMDA1LDIwMTI4NTEuMCwyMjg1NDUwLjk5OTk5OTk5OTUsMTI4MTk4Mi4wMDAwMDAwMDAyLDcwOTYxMS4wLDIwMjE4My4wLDIyODY5NjcuMCwyMjM2ODQ2LjAsMjk0MjQ3Ni45OTk5OTk5OTk1LDI0Mzc4Ni4wLDQ0Mzk3NC4wLDc5NTEzNy4wLDg0NTQ3NC4wLDE5NTI4NzQuMCwyMTAxMDYxLjAsMjcyODk1LjAsMTIyMTYxMC4wLDUxOTEwNC45OTk5OTk5OTk5NCwxODY2MDAxLjAsMjQzNDYwLjAsODA0ODc0LjAsNzYwNDIwLjAsNDk3NTA2LjAsNTYxMzI2LjAsNzc2NjAwLjAsMjQ2NTkyNS4wLDMwMDI5NzQuMCwxMjkzNDY1LjAsMzg4MjIwOC45OTk5OTk5OTk1LDEzMzczODYuMCw4OTY1MC4wLDQxMTk5NC4wLDE5MzkwOTYuMCw1OTgwNzYuMCw0MzI0MDMuMCw3Mjk4NDUuMCwzNDI4MjIuMCw2Mjg3OTMuMCwyMzk2MjMuMCw4NjYzNzMuMCwyMzIxMzcyLjk5OTk5OTk5OTUsMjYwNTA3LjAsNjc2MDI1LjAsMjczMzUxLjAwMDAwMDAwMDA2LDM0MjAwNy4wLDE0MzI4OC4wMDAwMDAwMDAwNiwxLjA0MDE1ODMwMDAwMDAwMDJFNworMTIsU2F0IDUgRmViIDExLDYwOTQ3OS45OTk5OTk5OTk3LDcyMzc1My4wMDAwMDAwMDAxLDc2Nzc1NS45OTk5OTk5OTk4LDI3NTk1ODEuMDAwMDAwMDAxLDYwNDQ4My4wLDYzNzg1My4wMDAwMDAwMDAyLDEyODg3MDUuOTk5OTk5OTk5LDgzOTg0LjAsNTM1NzcwLjAsMTI1Mzk2OS45OTk5OTk5OTk4LDUzMTY0OC4wLDE2ODIyNTcuOTk5OTk5OTk5OCwyMTk4OTI3Ljk5OTk5OTk5OTUsNTExNDczLjk5OTk5OTk5OTksMTc5ODA2Ny4wLDU0ODg5Ny45OTk5OTk5OTk4LDgyOTkxNi45OTk5OTk5OTk5LDkzMzcwOS4wMDAwMDAwMDAyLDExNzIyODguMDAwMDAwMDAwMiwxMjE0NTM0LjAwMDAwMDAwMDIsNjI2NjQ4LjAsOTY2Mi4wLDEyMjMwMTQuMCwxNTEwMzkwLjk5OTk5OTk5OTMsMzY2OTQ4Ljk5OTk5OTk5OTk0LDE1NzA0MC4wLDYwNjIyOC45OTk5OTk5OTk4LDM3Mzg0NDguMDAwMDAwMDAxLDIwMTI4NTEuMDAwMDAwMDAwNSwyMjg1NDUwLjk5OTk5OTk5OTUsMTI4MTk4Mi4wMDAwMDAwMDAyLDcwOTYxMS4wLDIwMjE4My4wLDIyODY5NjcuMDAwMDAwMDAwNSwyMjM2ODQ2LjAwMDAwMDAwMDUsMjk0MjQ3Ni45OTk5OTk5OTksMjQzNzg2LjAsNDQzOTc0LjAsNzk1MTM3LjAsODQ1NDc0LjAsMTk1Mjg3NC4wLDIxMDEwNjEuMCwyNzI4OTUuMCwxMjIxNjEwLjAwMDAwMDAwMDIsNTE5MTA0Ljk5OTk5OTk5OTk0LDE4NjYwMDEuMDAwMDAwMDAwMiwyNDM0NjAuMCw4MDQ4NzQuMCw3NjA0MjAuMCw0OTc1MDYuMCw1NjEzMjYuMCw3NzY2MDAuMCwyNDY1OTI1LjAsMzAwMjk3NC4wLDEyOTM0NjUuMCwzODgyMjA5LjAsMTMzNzM4Ni4wLDg5NjUwLjAsNDExOTk0LjAsMTkzOTA5Ni4wLDU5ODA3Ni4wLDQzMjQwMy4wLDcyOTg0NS4wLDM0MjgyMi4wLDYyODc5My4wLDIzOTYyMy4wLDg2NjM3My4wLDIzMjEzNzMuMCwyNjA1MDYuOTk5OTk5OTk5OTQsNjc2MDI1LjAsMjczMzUxLjAsMzQyMDA3LjAwMDAwMDAwMDA2LDE0MzI4OC4wMDAwMDAwMDAwMywxLjA0MDE1ODMwMDAwMDAwMDRFNworMTMsU3VuIDYgRmViIDExLDYwOTQ3OS45OTk5OTk5OTk1LDcyMzc1Mi45OTk5OTk5OTk5LDc2Nzc1NS45OTk5OTk5OTk1LDI3NTk1ODEuMDAwMDAwMDAxLDYwNDQ4My4wMDAwMDAwMDAxLDYzNzg1My4wMDAwMDAwMDAyLDEyODg3MDUuOTk5OTk5OTk5Myw4Mzk4NC4wLDUzNTc3MC4wMDAwMDAwMDAxLDEyNTM5NjkuOTk5OTk5OTk5OCw1MzE2NDguMDAwMDAwMDAwMSwxNjgyMjU4LjAsMjE5ODkyNy45OTk5OTk5OTksNTExNDczLjk5OTk5OTk5OTksMTc5ODA2Ni45OTk5OTk5OTk4LDU0ODg5Ny45OTk5OTk5OTk3LDgyOTkxNy4wMDAwMDAwMDAxLDkzMzcwOS4wLDExNzIyODguMDAwMDAwMDAwNSwxMjE0NTM0LjAwMDAwMDAwMDUsNjI2NjQ3Ljk5OTk5OTk5OTksOTY2Mi4wLDEyMjMwMTMuOTk5OTk5OTk5NSwxNTEwMzkwLjk5OTk5OTk5OTUsMzY2OTQ4Ljk5OTk5OTk5OTk0LDE1NzAzOS45OTk5OTk5OTk5Nyw2MDYyMjkuMCwzNzM4NDQ4LjAwMDAwMDAwMDUsMjAxMjg1MS4wMDAwMDAwMDA3LDIyODU0NTEuMDAwMTkxOTYzMywxMjgxOTgyLjAsNzA5NjExLjAsMjAyMTgzLjAsMjI4Njk2Ny4wLDIyMzY4NDYuMCwyOTQyNDc2Ljk5OTk5OTk5OSwyNDM3ODYuMCw0NDM5NzQuMCw3OTUxMzcuMCw4NDU0NzQuMCwxOTUyODc0LjAsMjEwMTA2MS4wLDI3Mjg5NS4wLDEyMjE2MTAuMDAwMDAwMDAwMiw1MTkxMDUuMCwxODY2MDAxLjAwMDAwMDAwMDIsMjQzNDYwLjAsODA0ODc0LjAsNzYwNDIwLjAsNDk3NTA2LjAsNTYxMzI2LjAsNzc2NjAwLjAsMjQ2NTkyNS4wLDMwMDI5NzQuMCwxMjkzNDY1LjAsMzg4MjIwOS4wLDEzMzczODYuMCw4OTY1MC4wLDQxMTk5NC4wLDE5MzkwOTYuMCw1OTgwNzYuMCw0MzI0MDMuMCw3Mjk4NDUuMCwzNDI4MjIuMCw2Mjg3OTMuMCwyMzk2MjMuMCw4NjYzNzMuMDAwMDAwMDAwMSwyMzIxMzczLjAsMjYwNTA2Ljk5OTk5OTk5OTk3LDY3NjAyNS4wMDAwMDAwMDAyLDI3MzM1MS4wLDM0MjAwNy4wLDE0MzI4OC4wLDEuMDQwMTU4MzAyNjgyMDI2NUU3CisxNCxNb24gNyBGZWIgMTEsNjA5NDc5Ljk5OTk5OTk5OTcsNzIzNzUzLjAsNzY3NzU1Ljk5OTk5OTk5OTUsMjc1OTU4MS4wMDAwMDAwMDEsNjA0NDgzLjAsNjM3ODUzLjAwMDAwMDAwMDIsMTI4ODcwNS45OTk5OTk5OTksODM5ODQuMCw1MzU3NjkuOTk5OTk5OTk5OSwxMjUzOTcwLjAwMDAwMDAwMDIsNTMxNjQ4LjAwMDAwMDAwMDEsMTY4MjI1OC4wMDAwMDAwMDA1LDIxOTg5MjcuOTk5OTk5OTk5NSw1MTE0NzMuOTk5OTk5OTk5OCwxNzk4MDY2Ljk5OTk5OTk5OTUsNTQ4ODk3Ljk5OTk5OTk5OTcsODI5OTE3LjAwMDAwMDAwMDIsOTMzNzA5LjAwMDAwMDAwMDEsMTE3MjI4OC4wMDAwMDAwMDA1LDEyMTQ1MzQuMDAwMDAwMDAwMiw2MjY2NDguMDAwMDAwMDAwMSw5NjYyLjAsMTIyMzAxMy45OTk5OTk5OTk4LDE1MTAzOTAuOTk5OTk5OTk5MywzNjY5NDguOTk5OTk5OTk5OSwxNTcwNDAuMCw2MDYyMjkuMCwzNzM4NDQ4LjAwMDAwMDAwMSwyMDEyODUxLjAwMDAwMDAwMSwyMjg1NDUxLjAwMDQ5ODUxMDQsMTI4MTk4Mi4wLDcwOTYxMS4wLDIwMjE4My4wLDIyODY5NjcuMCwyMjM2ODQ2LjAwMDAwMDAwMDUsMjk0MjQ3Ni45OTk5OTk5OTksMjQzNzg2LjAsNDQzOTc0LjAsNzk1MTM3LjAsODQ1NDc0LjAsMTk1Mjg3NC4wLDIxMDEwNjEuMCwyNzI4OTUuMCwxMjIxNjEwLjAsNTE5MTA1LjAsMTg2NjAwMS4wMDAwMDAwMDA1LDI0MzQ2MC4wLDgwNDg3NC4wLDc2MDQyMC4wMDAwMDAwMDAxLDQ5NzUwNi4wLDU2MTMyNi4wLDc3NjYwMC4wLDI0NjU5MjUuMCwzMDAyOTc0LjAsMTI5MzQ2NS4wLDM4ODIyMDkuMDAwNjg3MTY4LDEzMzczODYuMCw4OTY1MC4wLDQxMTk5NC4wLDE5MzkwOTYuMCw1OTgwNzYuMCw0MzI0MDMuMCw3Mjk4NDUuMCwzNDI4MjIuMCw2Mjg3OTMuMCwyMzk2MjMuMCw4NjYzNzMuMCwyMzIxMzczLjAsMjYwNTA2Ljk5OTk5OTk5OTk3LDY3NjAyNS4wMDAwMDAwMDAyLDI3MzM1MS4wLDM0MjAwNy4wMDAwMDAwMDAxLDE0MzI4OC4wLDEuMDQwMTU4MzAzODk5ODU4MUU3CisxNSxUdWUgOCBGZWIgMTEsNjA5NDc5Ljk5OTk5OTk5OTcsNzIzNzUzLjAsNzY3NzU1Ljk5OTk5OTk5OTUsMjc1OTU4MS4wMDAwMDAwMDEsNjA0NDgyLjk5OTk5OTk5OTksNjM3ODUzLjAwMDAwMDAwMDEsMTI4ODcwNS45OTk5OTk5OTg4LDgzOTg0LjAsNTM1NzcwLjAwMDAwMDAwMDEsMTI1Mzk3MC4wMDAwMDAwMDAyLDUzMTY0OC4wMDAwMDAwMDA1LDE2ODIyNTguMDAwMDAwMDAwMiwyMTk4OTI4LjAsNTExNDczLjk5OTk5OTk5OTksMTc5ODA2Ni45OTk5OTk5OTkzLDU0ODg5Ny45OTk5OTk5OTk3LDgyOTkxNy4wMDAwMDAwMDAxLDkzMzcwOS4wLDExNzIyODguMDAwMDAwMDAwMiwxMjE0NTM0LjAwMDAwMDAwMDUsNjI2NjQ4LjAsOTY2Mi4wLDEyMjMwMTMuOTk5OTk5OTk5OCwxNTEwMzkwLjk5OTk5OTk5OTUsMzY2OTQ4Ljk5OTk5OTk5OTksMTU3MDQwLjAsNjA2MjI4Ljk5OTk5OTk5OTksMzczODQ0OC4wMDAwMDAwMDA1LDIwMTI4NTEuMDAwMDAwMDAxLDIyODU0NTEuMDAwNTAyNzAwNSwxMjgxOTgyLjAwMDAwMDAwMDIsNzA5NjExLjAsMjAyMTgyLjk5OTk5OTk5OTk0LDIyODY5NjYuOTk5OTk5OTk5NSwyMjM2ODQ2LjAsMjk0MjQ3Ni45OTk5OTk5OTksMjQzNzg2LjAsNDQzOTc0LjAsNzk1MTM3LjAsODQ1NDc0LjAsMTk1Mjg3NC4wLDIxMDEwNjEuMCwyNzI4OTUuMCwxMjIxNjEwLjAwMDAwMDAwMDIsNTE5MTA1LjAwMDAwMDAwMDA2LDE4NjYwMDEuMDAwMDAwMDAwNSwyNDM0NjAuMCw4MDQ4NzQuMCw3NjA0MjAuMDAwMDAwMDAwMSw0OTc1MDYuMCw1NjEzMjYuMCw3NzY2MDAuMCwyNDY1OTI1LjAsMzAwMjk3NC4wLDEyOTM0NjUuMCwzODgyMjA5LjAwMDcwOTkzNSwxMzM3Mzg2LjAsODk2NTAuMCw0MTE5OTQuMCwxOTM5MDk2LjAsNTk4MDc2LjAsNDMyNDAzLjAsNzI5ODQ1LjAsMzQyODIyLjAsNjI4NzkzLjAsMjM5NjIzLjAsODY2MzczLjAsMjMyMTM3My4wMDAwMDAwMDA1LDI2MDUwNi45OTk5OTk5OTk5NCw2NzYwMjUuMDAwMDAwMDAwMiwyNzMzNTEuMCwzNDIwMDcuMDAwMDAwMDAwMSwxNDMyODguMDAwMDAwMDAwMDMsMS4wNDAxNTgzMDM5MDM0MzQ4RTcKKzE2LFdlZCA5IEZlYiAxMSw2MDk0NzkuOTk5OTk5OTk5NSw3MjM3NTIuOTk5OTk5OTk5OSw3Njc3NTUuOTk5OTk5OTk5NSwyNzU5NTgxLjAwMDAwMDAwMSw2MDQ0ODIuOTk5OTk5OTk5OSw2Mzc4NTMuMDAwMDAwMDAwMSwxMjg4NzA1Ljk5OTk5OTk5ODgsODM5ODQuMCw1MzU3NzAuMDAwMDAwMDAwMSwxMjUzOTcwLjAwMDAwMDAwMDUsNTMxNjQ4LjAwMDAwMDAwMDMsMTY4MjI1OC4wMDAwMDAwMDA1LDIxOTg5MjguMDAwNDI3NjE2LDUxMTQ3My45OTk5OTk5OTk4LDE3OTgwNjYuOTk5OTk5OTk5LDU0ODg5Ny45OTk5OTk5OTk4LDgyOTkxNy4wMDAwMDAwMDAyLDkzMzcwOS4wMDAwMDAwMDAxLDExNzIyODguMCwxMjE0NTM0LjAwMDAwMDAwMSw2MjY2NDguMCw5NjYyLjAsMTIyMzAxMy45OTk5OTk5OTk4LDE1MTAzOTAuOTk5OTk5OTk5MywzNjY5NDguOTk5OTk5OTk5OSwxNTcwNDAuMCw2MDYyMjguOTk5OTk5OTk5OSwzNzM4NDQ4LjAwMDAwMDAwMTQsMjAxMjg1MS4wMDAwMDAwMDA3LDIyODU0NTEuMDAwNTA5MjU4NCwxMjgxOTgyLjAwMDAwMDAwMDIsNzA5NjExLjAsMjAyMTgyLjk5OTk5OTk5OTk3LDIyODY5NjcuMCwyMjM2ODQ2LjAsMjk0MjQ3Ni45OTk5OTk5OTksMjQzNzg2LjAsNDQzOTc0LjAsNzk1MTM3LjAsODQ1NDc0LjAsMTk1Mjg3NC4wMDAwMDAwMDAyLDIxMDEwNjEuMDAwMDAwMDAwNSwyNzI4OTUuMCwxMjIxNjEwLjAwMDAwMDAwMDIsNTE5MTA1LjAsMTg2NjAwMS4wMDAwMDAwMDA1LDI0MzQ2MC4wLDgwNDg3NC4wLDc2MDQyMC4wMDAwMDAwMDAxLDQ5NzUwNi4wLDU2MTMyNi4wLDc3NjYwMC4wLDI0NjU5MjUuMCwzMDAyOTc0LjAsMTI5MzQ2NS4wLDM4ODIyMDkuMDAwNzQyNDM4MiwxMzM3Mzg2LjAsODk2NTAuMCw0MTE5OTQuMCwxOTM5MDk2LjAsNTk4MDc2LjAsNDMyNDAzLjAsNzI5ODQ1LjAsMzQyODIyLjAsNjI4NzkzLjAsMjM5NjIzLjAsODY2MzczLjAsMjMyMTM3My4wLDI2MDUwNi45OTk5OTk5OTk5NCw2NzYwMjUuMDAwMDAwMDAwMywyNzMzNTEuMCwzNDIwMDcuMCwxNDMyODguMDAwMDAwMDAwMDMsMS4wNDAxNTgzMDM5MDc2NzAzRTcKKzE3LFRodSAxMCBGZWIgMTEsNjA5NDc5Ljk5OTk5OTk5OTUsNzIzNzUyLjk5OTk5OTk5OTksNzY3NzU1Ljk5OTk5OTk5OTUsMjc1OTU4MS4wMDAwMDAwMDEsNjA0NDgyLjk5OTk5OTk5OTgsNjM3ODUzLjAwMDAwMDAwMDIsMTI4ODcwNS45OTk5OTk5OTksODM5ODQuMCw1MzU3NzAuMCwxMjUzOTcwLjAwMDAwMDAwMDIsNTMxNjQ4LjAwMDAwMDAwMDUsMTY4MjI1OC4wMDAwMDAwMDAyLDIxOTg5MjguMDAwNDI3NjE2LDUxMTQ3My45OTk5OTk5OTk5LDE3OTgwNjYuOTk5OTk5OTk5Myw1NDg4OTcuOTk5OTk5OTk5OCw4Mjk5MTcuMDAwMDAwMDAwMiw5MzM3MDkuMDAwMDAwMDAwMSwxMTcyMjg4LjAwMDAwMDAwMDIsMTIxNDUzNC4wMDAwMDAwMDEsNjI2NjQ4LjAsOTY2Mi4wLDEyMjMwMTMuOTk5OTk5OTk5OCwxNTEwMzkwLjk5OTk5OTk5OTMsMzY2OTQ4Ljk5OTk5OTk5OTksMTU3MDQwLjAsNjA2MjI4Ljk5OTk5OTk5OTksMzczODQ0OC4wMDAwMDAwMDEsMjAxMjg1MS4wMDAwMDAwMDEsMjI4NTQ1MS4wMDA1MDkyNTg0LDEyODE5ODIuMCw3MDk2MTEuMCwyMDIxODIuOTk5OTk5OTk5OTcsMjI4Njk2Ny4wLDIyMzY4NDYuMCwyOTQyNDc2Ljk5OTk5OTk5OSwyNDM3ODYuMCw0NDM5NzQuMCw3OTUxMzcuMCw4NDU0NzQuMCwxOTUyODc0LjAwMDAwMDAwMDUsMjEwMTA2MS4wMDAwMDAwMDA1LDI3Mjg5NS4wLDEyMjE2MTAuMDAwMDAwMDAwMiw1MTkxMDUuMDAwMDAwMDAwMDYsMTg2NjAwMS4wMDAwMDAwMDAyLDI0MzQ2MC4wLDgwNDg3NC4wLDc2MDQyMC4wLDQ5NzUwNi4wLDU2MTMyNi4wLDc3NjYwMC4wLDI0NjU5MjUuMCwzMDAyOTc0LjAsMTI5MzQ2NS4wLDM4ODIyMDkuMDAwODgxODYzOCwxMzM3Mzg2LjAsODk2NTAuMCw0MTE5OTQuMCwxOTM5MDk2LjAsNTk4MDc2LjAsNDMyNDAzLjAsNzI5ODQ1LjAsMzQyODIyLjAsNjI4NzkzLjAsMjM5NjIzLjAsODY2MzcyLjk5OTk5OTk5OTksMjMyMTM3My4wMDAwMDAwMDA1LDI2MDUwNi45OTk5OTk5OTk5NCw2NzYwMjUuMDAwMDAwMDAwMywyNzMzNTAuOTk5OTk5OTk5OTQsMzQyMDA3LjAwMDAwMDAwMDA2LDE0MzI4OC4wMDAwMDAwMDAwMywxLjA0MDE1ODMwMzkwNzY3MDNFNworMTgsRnJpIDExIEZlYiAxMSw2MDk0NzkuOTk5OTk5OTk5Nyw3MjM3NTIuOTk5OTk5OTk5OSw3Njc3NTUuOTk5OTk5OTk5NSwyNzU5NTgxLjAwMDAwMDAwMSw2MDQ0ODIuOTk5OTk5OTk5OCw2Mzc4NTMuMDAwMDAwMDAwMiwxMjg4NzA1Ljk5OTk5OTk5OSw4Mzk4NC4wLDUzNTc3MC4wMDAwMDAwMDAxLDEyNTM5NzAuMDAwMDAwMDAwNSw1MzE2NDguMDAwMDAwMDAwMywxNjgyMjU4LjAwMDAwMDAwMDIsMjE5ODkyOC4wMDA0Mjc2MTYsNTExNDczLjk5OTk5OTk5OTksMTc5ODA2Ni45OTk5OTk5OTkzLDU0ODg5Ny45OTk5OTk5OTk4LDgyOTkxNy4wMDAwMDAwMDAyLDkzMzcwOS4wMDAwMDAwMDAyLDExNzIyODguMCwxMjE0NTM0LjAwMDAwMDAwMDcsNjI2NjQ4LjAsOTY2Mi4wLDEyMjMwMTMuOTk5OTk5OTk5NSwxNTEwMzkwLjk5OTk5OTk5OTMsMzY2OTQ4Ljk5OTk5OTk5OTksMTU3MDQwLjAsNjA2MjI5LjAsMzczODQ0OC4wMDAwMDAwMDA1LDIwMTI4NTEuMDAwMDAwMDAxLDIyODU0NTEuMDAwNTA5MywxMjgxOTgyLjAwMDAwMDAwMDIsNzA5NjExLjAsMjAyMTgzLjAwMDAwMDAwMDAzLDIyODY5NjcuMCwyMjM2ODQ2LjAsMjk0MjQ3Ni45OTk5OTk5OTksMjQzNzg2LjAsNDQzOTc0LjAsNzk1MTM3LjAsODQ1NDc0LjAsMTk1Mjg3NC4wMDAwMDAwMDAyLDIxMDEwNjEuMDAwMDAwMDAwNSwyNzI4OTUuMCwxMjIxNjEwLjAsNTE5MTA1LjAsMTg2NjAwMS4wMDAwMDAwMDA1LDI0MzQ2MC4wLDgwNDg3NC4wLDc2MDQyMC4wLDQ5NzUwNi4wLDU2MTMyNi4wLDc3NjYwMC4wLDI0NjU5MjUuMCwzMDAyOTc0LjAsMTI5MzQ2NS4wLDM4ODIyMDkuMDAwODgyNDM4NCwxMzM3Mzg2LjAsODk2NTAuMCw0MTE5OTQuMCwxOTM5MDk2LjAsNTk4MDc2LjAsNDMyNDAzLjAsNzI5ODQ1LjAsMzQyODIyLjAsNjI4NzkzLjAsMjM5NjIzLjAsODY2MzczLjAsMjMyMTM3My4wMDAwMDAwMDA1LDI2MDUwNi45OTk5OTk5OTk5LDY3NjAyNS4wMDAwMDAwMDAyLDI3MzM1MS4wLDM0MjAwNy4wLDE0MzI4OC4wMDAwMDAwMDAwNiwxLjA0MDE1ODMwMzkwNzc0NTVFNworMTksU2F0IDEyIEZlYiAxMSw2MDk0NzkuOTk5OTk5OTk5Nyw3MjM3NTMuMCw3Njc3NTUuOTk5OTk5OTk5NSwyNzU5NTgxLjAwMDAwMDAwMSw2MDQ0ODIuOTk5OTk5OTk5OCw2Mzc4NTMuMDAwMDAwMDAwMiwxMjg4NzA1Ljk5OTk5OTk5OSw4Mzk4NC4wLDUzNTc2OS45OTk5OTk5OTk5LDEyNTM5NzAuMDAwMDAwMDAwNSw1MzE2NDguMDAwMDAwMDAwMywxNjgyMjU4LjAsMjE5ODkyOC4wMDA0Mjc2MTYsNTExNDczLjk5OTk5OTk5OTc3LDE3OTgwNjYuOTk5OTk5OTk5Myw1NDg4OTcuOTk5OTk5OTk5OCw4Mjk5MTcuMDAwMDAwMDAwMiw5MzM3MDkuMDAwMDAwMDAwMiwxMTcyMjg4LjAsMTIxNDUzNC4wMDAwMDAwMDEsNjI2NjQ4LjAsOTY2Mi4wLDEyMjMwMTMuOTk5OTk5OTk5OCwxNTEwMzkwLjk5OTk5OTk5OTMsMzY2OTQ5LjAsMTU3MDQwLjAsNjA2MjI4Ljk5OTk5OTk5OTksMzczODQ0OC4wMDAwMDAwMDEsMjAxMjg1MS4wMDAwMDAwMDA1LDIyODU0NTEuMDAwNTA5MywxMjgxOTgyLjAwMDAwMDAwMDIsNzA5NjEwLjk5OTk5OTk5OTksMjAyMTgzLjAsMjI4Njk2Ni45OTk5OTk5OTk1LDIyMzY4NDUuOTk5OTk5OTk5NSwyOTQyNDc2Ljk5OTk5OTk5OSwyNDM3ODYuMCw0NDM5NzQuMCw3OTUxMzcuMCw4NDU0NzQuMCwxOTUyODc0LjAwMDAwMDAwMDIsMjEwMTA2MS4wMDAwMDAwMDA1LDI3Mjg5NS4wLDEyMjE2MTAuMCw1MTkxMDQuOTk5OTk5OTk5OSwxODY2MDAxLjAwMDAwMDAwMDUsMjQzNDYwLjAsODA0ODc0LjAsNzYwNDIwLjAwMDAwMDAwMDEsNDk3NTA2LjAsNTYxMzI2LjAsNzc2NjAwLjAsMjQ2NTkyNS4wLDMwMDI5NzQuMCwxMjkzNDY1LjAsMzg4MjIwOS4wMDA4ODI0MzksMTMzNzM4Ni4wLDg5NjUwLjAsNDExOTk0LjAsMTkzOTA5Ni4wLDU5ODA3Ni4wLDQzMjQwMy4wLDcyOTg0NS4wLDM0MjgyMi4wLDYyODc5My4wLDIzOTYyMy4wLDg2NjM3My4wLDIzMjEzNzMuMCwyNjA1MDYuOTk5OTk5OTk5OTQsNjc2MDI1LjAwMDAwMDAwMDIsMjczMzUwLjk5OTk5OTk5OTk0LDM0MjAwNy4wMDAwMDAwMDAwNiwxNDMyODguMDAwMDAwMDAwMDYsMS4wNDAxNTgzMDM5MDc3NDU1RTcKKzIwLFN1biAxMyBGZWIgMTEsNjA5NDc5Ljk5OTk5OTk5OTUsNzIzNzUyLjk5OTk5OTk5OTksNzY3NzU1Ljk5OTk5OTk5OTcsMjc1OTU4MS4wMDAwMDAwMDEsNjA0NDgyLjk5OTk5OTk5OTgsNjM3ODUzLjAwMDAwMDAwMDIsMTI4ODcwNS45OTk5OTk5OTksODM5ODQuMCw1MzU3NzAuMCwxMjUzOTcwLjAwMDAwMDAwMDUsNTMxNjQ4LjAwMDAwMDAwMDUsMTY4MjI1OC4wLDIxOTg5MjguMDAwNDI3NjE2LDUxMTQ3My45OTk5OTk5OTk4LDE3OTgwNjYuOTk5OTk5OTk5Myw1NDg4OTcuOTk5OTk5OTk5OCw4Mjk5MTcuMDAwMDAwMDAwMiw5MzM3MDkuMDAwMDAwMDAwMiwxMTcyMjg4LjAsMTIxNDUzNC4wMDAwMDAwMDEsNjI2NjQ3Ljk5OTk5OTk5OTksOTY2Mi4wLDEyMjMwMTMuOTk5OTk5OTk5NSwxNTEwMzkwLjk5OTk5OTk5OTMsMzY2OTQ4Ljk5OTk5OTk5OTk0LDE1NzA0MC4wLDYwNjIyOC45OTk5OTk5OTk5LDM3Mzg0NDguMDAwMDAwMDAxLDIwMTI4NTEuMDAwMDAwMDAwNSwyMjg1NDUxLjAwMDUwOTMwMDMsMTI4MTk4Mi4wMDAwMDAwMDAyLDcwOTYxMC45OTk5OTk5OTk4LDIwMjE4Mi45OTk5OTk5OTk5NCwyMjg2OTY2Ljk5OTk5OTk5OTUsMjIzNjg0NS45OTk5OTk5OTk1LDI5NDI0NzYuOTk5OTk5OTk5LDI0Mzc4Ni4wLDQ0Mzk3NC4wLDc5NTEzNy4wLDg0NTQ3NC4wLDE5NTI4NzQuMDAwMDAwMDAwNSwyMTAxMDYxLjAwMDAwMDAwMDUsMjcyODk1LjAsMTIyMTYxMC4wLDUxOTEwNC45OTk5OTk5OTk4LDE4NjYwMDEuMDAwMDAwMDAwNSwyNDM0NjAuMCw4MDQ4NzQuMCw3NjA0MjAuMDAwMDAwMDAwMSw0OTc1MDYuMCw1NjEzMjYuMCw3NzY2MDAuMCwyNDY1OTI1LjAsMzAwMjk3NC4wLDEyOTM0NjUuMCwzODgyMjA5LjAwMDg4MjQzOSwxMzM3Mzg2LjAsODk2NTAuMCw0MTE5OTQuMCwxOTM5MDk2LjAsNTk4MDc2LjAsNDMyNDAzLjAsNzI5ODQ1LjAsMzQyODIyLjAsNjI4NzkzLjAsMjM5NjIzLjAsODY2MzczLjAwMDAwMDAwMDEsMjMyMTM3My4wLDI2MDUwNi45OTk5OTk5OTk5LDY3NjAyNS4wMDAwMDAwMDAyLDI3MzM1MC45OTk5OTk5OTk5LDM0MjAwNy4wMDAwMDAwMDAxLDE0MzI4OC4wMDAwMDAwMDAwNiwxLjA0MDE1ODMwMzkwNzc0NTdFNworMjEsTW9uIDE0IEZlYiAxMSw2MDk0NzkuOTk5OTk5OTk5Nyw3MjM3NTMuMDAwMDAwMDAwMSw3Njc3NTUuOTk5OTk5OTk5NSwyNzU5NTgxLjAwMDAwMDAwMSw2MDQ0ODIuOTk5OTk5OTk5OCw2Mzc4NTMuMDAwMDAwMDAwMiwxMjg4NzA1Ljk5OTk5OTk5OSw4Mzk4NC4wLDUzNTc3MC4wLDEyNTM5NzAuMDAwMDAwMDAwNSw1MzE2NDguMDAwMDAwMDAwNSwxNjgyMjU4LjAwMDAwMDAwMDIsMjE5ODkyOC4wMDA0Mjc2MTYsNTExNDczLjk5OTk5OTk5OTgsMTc5ODA2Ni45OTk5OTk5OTkzLDU0ODg5Ny45OTk5OTk5OTk4LDgyOTkxNy4wMDAwMDAwMDAxLDkzMzcwOS4wMDAwMDAwMDAzLDExNzIyODcuOTk5OTk5OTk5OCwxMjE0NTM0LjAwMDAwMDAwMDcsNjI2NjQ4LjAsOTY2Mi4wLDEyMjMwMTMuOTk5OTk5OTk5OCwxNTEwMzkwLjk5OTk5OTk5OTMsMzY2OTQ4Ljk5OTk5OTk5OTk0LDE1NzA0MC4wMDAwMDAwMDAwMyw2MDYyMjkuMCwzNzM4NDQ4LjAwMDAwMDAwMSwyMDEyODUxLjAwMDAwMDAwMDUsMjI4NTQ1MS4wMDA1MDkzLDEyODE5ODIuMCw3MDk2MTAuOTk5OTk5OTk5OCwyMDIxODIuOTk5OTk5OTk5OTQsMjI4Njk2Ni45OTk5OTk5OTk1LDIyMzY4NDUuOTk5OTk5OTk5NSwyOTQyNDc2Ljk5OTk5OTk5OTUsMjQzNzg2LjAsNDQzOTc0LjAsNzk1MTM3LjAsODQ1NDc0LjAsMTk1Mjg3NC4wLDIxMDEwNjEuMDAwMDAwMDAwNSwyNzI4OTUuMCwxMjIxNjEwLjAsNTE5MTA0Ljk5OTk5OTk5OTgsMTg2NjAwMS4wMDAwMDAwMDA1LDI0MzQ2MC4wLDgwNDg3NC4wLDc2MDQyMC4wLDQ5NzUwNi4wLDU2MTMyNi4wLDc3NjYwMC4wLDI0NjU5MjUuMCwzMDAyOTc0LjAsMTI5MzQ2NS4wLDM4ODIyMDkuMDAwODgyNDM4NCwxMzM3Mzg2LjAsODk2NTAuMCw0MTE5OTQuMCwxOTM5MDk2LjAsNTk4MDc2LjAsNDMyNDAzLjAsNzI5ODQ1LjAsMzQyODIyLjAsNjI4NzkzLjAsMjM5NjIzLjAsODY2MzcyLjk5OTk5OTk5OTksMjMyMTM3My4wLDI2MDUwNi45OTk5OTk5OTk5LDY3NjAyNS4wMDAwMDAwMDAyLDI3MzM1MC45OTk5OTk5OTk5LDM0MjAwNy4wMDAwMDAwMDAwNiwxNDMyODguMDAwMDAwMDAwMDYsMS4wNDAxNTgzMDM5MDc3NDU3RTcKKzIyLFR1ZSAxNSBGZWIgMTEsNjA5NDc5Ljk5OTk5OTk5OTcsNzIzNzUzLjAwMDAwMDAwMDEsNzY3NzU1Ljk5OTk5OTk5OTUsMjc1OTU4MS4wMDAwMDAwMDEsNjA0NDgyLjk5OTk5OTk5OTgsNjM3ODUzLjAwMDAwMDAwMDIsMTI4ODcwNS45OTk5OTk5OTksODM5ODQuMCw1MzU3NzAuMCwxMjUzOTcwLjAwMDAwMDAwMDUsNTMxNjQ4LjAwMDAwMDAwMDUsMTY4MjI1OC4wLDIxOTg5MjguMDAwNDI3NjE2LDUxMTQ3My45OTk5OTk5OTk4LDE3OTgwNjYuOTk5OTk5OTk5Myw1NDg4OTcuOTk5OTk5OTk5OSw4Mjk5MTcuMCw5MzM3MDkuMDAwMDAwMDAwMywxMTcyMjg4LjAsMTIxNDUzNC4wMDAwMDAwMDA3LDYyNjY0OC4wLDk2NjIuMCwxMjIzMDEzLjk5OTk5OTk5OTgsMTUxMDM5MC45OTk5OTk5OTk1LDM2Njk0OC45OTk5OTk5OTk5NCwxNTcwNDAuMCw2MDYyMjguOTk5OTk5OTk5OSwzNzM4NDQ4LjAwMDAwMDAwMSwyMDEyODUxLjAwMDAwMDAwMDUsMjI4NTQ1MS4wMDA1MDkzMDAzLDEyODE5ODIuMCw3MDk2MTAuOTk5OTk5OTk5OCwyMDIxODIuOTk5OTk5OTk5OTQsMjI4Njk2Ny4wLDIyMzY4NDUuOTk5OTk5OTk5NSwyOTQyNDc2Ljk5OTk5OTk5OTUsMjQzNzg2LjAsNDQzOTc0LjAsNzk1MTM3LjAsODQ1NDc0LjAsMTk1Mjg3NC4wMDAwMDAwMDAyLDIxMDEwNjEuMDAwMDAwMDAwNSwyNzI4OTUuMCwxMjIxNjEwLjAsNTE5MTA0Ljk5OTk5OTk5OTgsMTg2NjAwMS4wMDAwMDAwMDA1LDI0MzQ2MC4wLDgwNDg3NC4wLDc2MDQyMC4wMDAwMDAwMDAxLDQ5NzUwNi4wLDU2MTMyNi4wLDc3NjYwMC4wLDI0NjU5MjUuMCwzMDAyOTc0LjAsMTI5MzQ2NS4wLDM4ODIyMDkuMDAwODgyNDM5LDEzMzczODYuMCw4OTY1MC4wLDQxMTk5NC4wLDE5MzkwOTYuMCw1OTgwNzYuMCw0MzI0MDMuMCw3Mjk4NDUuMCwzNDI4MjIuMCw2Mjg3OTMuMCwyMzk2MjMuMCw4NjYzNzMuMCwyMzIxMzczLjAwMDAwMDAwMDUsMjYwNTA2Ljk5OTk5OTk5OTksNjc2MDI1LjAwMDAwMDAwMDMsMjczMzUwLjk5OTk5OTk5OTksMzQyMDA3LjAwMDAwMDAwMDA2LDE0MzI4OC4wMDAwMDAwMDAwMywxLjA0MDE1ODMwMzkwNzc0NTdFNworMjMsV2VkIDE2IEZlYiAxMSw2MDk0NzkuOTk5OTk5OTk5Nyw3MjM3NTMuMDAwMDAwMDAwMSw3Njc3NTUuOTk5OTk5OTk5NCwyNzU5NTgxLjAwMDAwMDAwMSw2MDQ0ODIuOTk5OTk5OTk5Nyw2Mzc4NTMuMDAwMDAwMDAwMiwxMjg4NzA1Ljk5OTk5OTk5OSw4Mzk4NC4wLDUzNTc3MC4wLDEyNTM5NzAuMDAwMDAwMDAwNSw1MzE2NDguMDAwMDAwMDAwNSwxNjgyMjU4LjAwMDAwMDAwMDIsMjE5ODkyOC4wMDA0Mjc2MTYsNTExNDczLjk5OTk5OTk5OTksMTc5ODA2Ni45OTk5OTk5OTkzLDU0ODg5Ny45OTk5OTk5OTk4LDgyOTkxNy4wMDAwMDAwMDAyLDkzMzcwOS4wMDAwMDAwMDAzLDExNzIyODcuOTk5OTk5OTk5OCwxMjE0NTM0LjAwMDAwMDAwMSw2MjY2NDguMCw5NjYyLjAsMTIyMzAxMy45OTk5OTk5OTk4LDE1MTAzOTAuOTk5OTk5OTk5NSwzNjY5NDguOTk5OTk5OTk5OTQsMTU3MDQwLjAwMDAwMDAwMDAzLDYwNjIyOC45OTk5OTk5OTk5LDM3Mzg0NDguMDAwMDAwMDAxNCwyMDEyODUxLjAwMDAwMDAwMDUsMjI4NTQ1MS4wMDA1MDkzMDA3LDEyODE5ODIuMCw3MDk2MTAuOTk5OTk5OTk5OCwyMDIxODIuOTk5OTk5OTk5OTQsMjI4Njk2Ni45OTk5OTk5OTk1LDIyMzY4NDUuOTk5OTk5OTk5NSwyOTQyNDc2Ljk5OTk5OTk5OTUsMjQzNzg2LjAsNDQzOTc0LjAsNzk1MTM3LjAsODQ1NDc0LjAsMTk1Mjg3NC4wMDAwMDAwMDAyLDIxMDEwNjEuMCwyNzI4OTUuMCwxMjIxNjEwLjAsNTE5MTA0Ljk5OTk5OTk5OTc3LDE4NjYwMDEuMDAwMDAwMDAwNSwyNDM0NjAuMCw4MDQ4NzQuMCw3NjA0MjAuMCw0OTc1MDYuMCw1NjEzMjYuMCw3NzY2MDAuMCwyNDY1OTI1LjAsMzAwMjk3NC4wLDEyOTM0NjUuMCwzODgyMjA5LjAwMDg4MjQzOSwxMzM3Mzg2LjAsODk2NTAuMCw0MTE5OTQuMCwxOTM5MDk2LjAsNTk4MDc2LjAsNDMyNDAzLjAsNzI5ODQ1LjAsMzQyODIyLjAsNjI4NzkzLjAsMjM5NjIzLjAsODY2MzczLjAsMjMyMTM3My4wLDI2MDUwNi45OTk5OTk5OTk4OCw2NzYwMjUuMDAwMDAwMDAwMywyNzMzNTAuOTk5OTk5OTk5OSwzNDIwMDcuMDAwMDAwMDAwMDYsMTQzMjg4LjAwMDAwMDAwMDAzLDEuMDQwMTU4MzAzOTA3NzQ1NUU3CisyNCxUaHUgMTcgRmViIDExLDYwOTQ3OS45OTk5OTk5OTk3LDcyMzc1My4wLDc2Nzc1NS45OTk5OTk5OTk1LDI3NTk1ODEuMDAwMDAwMDAxLDYwNDQ4Mi45OTk5OTk5OTk4LDYzNzg1My4wMDAwMDAwMDAyLDEyODg3MDUuOTk5OTk5OTk5LDgzOTg0LjAsNTM1NzcwLjAsMTI1Mzk3MC4wMDAwMDAwMDAyLDUzMTY0OC4wMDAwMDAwMDA1LDE2ODIyNTguMDAwMDAwMDAwMiwyMTk4OTI4LjAwMDQyNzYxNjMsNTExNDczLjk5OTk5OTk5OTksMTc5ODA2Ni45OTk5OTk5OTkzLDU0ODg5Ny45OTk5OTk5OTk4LDgyOTkxNy4wMDAwMDAwMDAxLDkzMzcwOS4wMDAwMDAwMDA1LDExNzIyODcuOTk5OTk5OTk5OCwxMjE0NTM0LjAwMDAwMDAwMDcsNjI2NjQ4LjAsOTY2Mi4wLDEyMjMwMTMuOTk5OTk5OTk5OCwxNTEwMzkwLjk5OTk5OTk5OTUsMzY2OTQ5LjAsMTU3MDQwLjAwMDAwMDAwMDAzLDYwNjIyOC45OTk5OTk5OTk5LDM3Mzg0NDguMDAwMDAwMDAxNCwyMDEyODUxLjAwMDAwMDAwMDUsMjI4NTQ1MS4wMDA1MDkzMDAzLDEyODE5ODEuOTk5OTk5OTk5OCw3MDk2MTAuOTk5OTk5OTk5NywyMDIxODIuOTk5OTk5OTk5OTQsMjI4Njk2Ni45OTk5OTk5OTk1LDIyMzY4NDUuOTk5OTk5OTk5NSwyOTQyNDc2Ljk5OTk5OTk5OTUsMjQzNzg2LjAsNDQzOTc0LjAsNzk1MTM3LjAsODQ1NDc0LjAsMTk1Mjg3NC4wMDAwMDAwMDAyLDIxMDEwNjEuMDAwMDAwMDAwNSwyNzI4OTUuMCwxMjIxNjA5Ljk5OTk5OTk5OTgsNTE5MTA0Ljk5OTk5OTk5OTc3LDE4NjYwMDEuMDAwMDAwMDAwNSwyNDM0NjAuMCw4MDQ4NzQuMCw3NjA0MjAuMCw0OTc1MDYuMCw1NjEzMjYuMCw3NzY2MDAuMCwyNDY1OTI1LjAsMzAwMjk3NC4wLDEyOTM0NjUuMCwzODgyMjA5LjAwMDg4MjQzOSwxMzM3Mzg2LjAsODk2NTAuMCw0MTE5OTQuMCwxOTM5MDk2LjAsNTk4MDc2LjAsNDMyNDAzLjAsNzI5ODQ1LjAsMzQyODIyLjAsNjI4NzkzLjAsMjM5NjIzLjAsODY2MzczLjAsMjMyMTM3My4wLDI2MDUwNi45OTk5OTk5OTk4NSw2NzYwMjUuMDAwMDAwMDAwMiwyNzMzNTAuOTk5OTk5OTk5OTQsMzQyMDA3LjAwMDAwMDAwMDEsMTQzMjg4LjAwMDAwMDAwMDA2LDEuMDQwMTU4MzAzOTA3NzQ1N0U3CisyNSxGcmkgMTggRmViIDExLDYwOTQ3OS45OTk5OTk5OTk3LDcyMzc1My4wLDc2Nzc1NS45OTk5OTk5OTk1LDI3NTk1ODEuMDAwMDAwMDAxLDYwNDQ4Mi45OTk5OTk5OTk4LDYzNzg1My4wMDAwMDAwMDAzLDEyODg3MDUuOTk5OTk5OTk5LDgzOTg0LjAsNTM1NzcwLjAsMTI1Mzk3MC4wMDAwMDAwMDAyLDUzMTY0OC4wMDAwMDAwMDA1LDE2ODIyNTguMDAwMDAwMDAwNSwyMTk4OTI4LjAwMDQyNzYxNiw1MTE0NzMuOTk5OTk5OTk5OCwxNzk4MDY2Ljk5OTk5OTk5OTMsNTQ4ODk3Ljk5OTk5OTk5OTgsODI5OTE3LjAwMDAwMDAwMDIsOTMzNzA5LjAwMDAwMDAwMDUsMTE3MjI4Ny45OTk5OTk5OTk4LDEyMTQ1MzQuMDAwMDAwMDAwNyw2MjY2NDguMCw5NjYyLjAsMTIyMzAxMy45OTk5OTk5OTk4LDE1MTAzOTAuOTk5OTk5OTk5OCwzNjY5NDkuMCwxNTcwNDAuMDAwMDAwMDAwMDMsNjA2MjI4Ljk5OTk5OTk5OTgsMzczODQ0OC4wMDAwMDAwMDE0LDIwMTI4NTEuMDAwMDAwMDAwNSwyMjg1NDUxLjAwMDUwOTMwMDMsMTI4MTk4Mi4wLDcwOTYxMC45OTk5OTk5OTk4LDIwMjE4Mi45OTk5OTk5OTk5NCwyMjg2OTY2Ljk5OTk5OTk5OTUsMjIzNjg0NS45OTk5OTk5OTk1LDI5NDI0NzYuOTk5OTk5OTk5LDI0Mzc4Ni4wLDQ0Mzk3NC4wLDc5NTEzNy4wLDg0NTQ3NC4wLDE5NTI4NzQuMCwyMTAxMDYxLjAsMjcyODk1LjAsMTIyMTYxMC4wLDUxOTEwNC45OTk5OTk5OTk3NywxODY2MDAxLjAwMDAwMDAwMDUsMjQzNDYwLjAsODA0ODc0LjAsNzYwNDIwLjAsNDk3NTA2LjAsNTYxMzI2LjAsNzc2NjAwLjAsMjQ2NTkyNS4wLDMwMDI5NzQuMCwxMjkzNDY1LjAsMzg4MjIwOS4wMDA4ODI0MzkzLDEzMzczODYuMCw4OTY1MC4wLDQxMTk5NC4wLDE5MzkwOTYuMCw1OTgwNzYuMCw0MzI0MDMuMCw3Mjk4NDUuMCwzNDI4MjIuMCw2Mjg3OTMuMCwyMzk2MjMuMCw4NjYzNzMuMCwyMzIxMzczLjAsMjYwNTA2Ljk5OTk5OTk5OTg4LDY3NjAyNS4wMDAwMDAwMDAzLDI3MzM1MC45OTk5OTk5OTk5LDM0MjAwNy4wMDAwMDAwMDAxLDE0MzI4OC4wMDAwMDAwMDAwNiwxLjA0MDE1ODMwMzkwNzc0NTdFNworMjYsU2F0IDE5IEZlYiAxMSw2MDk0NzkuOTk5OTk5OTk5Nyw3MjM3NTMuMCw3Njc3NTUuOTk5OTk5OTk5NCwyNzU5NTgxLjAwMDAwMDAwMSw2MDQ0ODIuOTk5OTk5OTk5OCw2Mzc4NTMuMDAwMDAwMDAwMywxMjg4NzA1Ljk5OTk5OTk5ODgsODM5ODQuMCw1MzU3NzAuMCwxMjUzOTcwLjAwMDAwMDAwMDUsNTMxNjQ4LjAwMDAwMDAwMDUsMTY4MjI1OC4wMDAwMDAwMDA1LDIxOTg5MjguMDAwNDI3NjE2LDUxMTQ3My45OTk5OTk5OTk5LDE3OTgwNjYuOTk5OTk5OTk5Myw1NDg4OTcuOTk5OTk5OTk5OCw4Mjk5MTcuMDAwMDAwMDAwMiw5MzM3MDkuMDAwMDAwMDAwNSwxMTcyMjg3Ljk5OTk5OTk5OTgsMTIxNDUzNC4wMDAwMDAwMDA3LDYyNjY0OC4wLDk2NjIuMCwxMjIzMDEzLjk5OTk5OTk5OTgsMTUxMDM5MC45OTk5OTk5OTk1LDM2Njk0OS4wLDE1NzA0MC4wMDAwMDAwMDAwNiw2MDYyMjguOTk5OTk5OTk5OSwzNzM4NDQ4LjAwMDAwMDAwMTQsMjAxMjg1MS4wMDAwMDAwMDAyLDIyODU0NTEuMDAwNTA5MzAwMywxMjgxOTgyLjAsNzA5NjEwLjk5OTk5OTk5OTgsMjAyMTgyLjk5OTk5OTk5OTksMjI4Njk2Ny4wLDIyMzY4NDYuMCwyOTQyNDc2Ljk5OTk5OTk5OSwyNDM3ODYuMCw0NDM5NzQuMCw3OTUxMzcuMCw4NDU0NzQuMCwxOTUyODc0LjAsMjEwMTA2MS4wLDI3Mjg5NS4wLDEyMjE2MTAuMCw1MTkxMDQuOTk5OTk5OTk5NzcsMTg2NjAwMS4wMDAwMDAwMDA1LDI0MzQ2MC4wLDgwNDg3NC4wLDc2MDQyMC4wLDQ5NzUwNi4wLDU2MTMyNi4wLDc3NjYwMC4wLDI0NjU5MjUuMCwzMDAyOTc0LjAsMTI5MzQ2NS4wLDM4ODIyMDkuMDAwODgyNDM5LDEzMzczODYuMCw4OTY1MC4wLDQxMTk5NC4wLDE5MzkwOTYuMCw1OTgwNzYuMCw0MzI0MDMuMCw3Mjk4NDUuMCwzNDI4MjIuMCw2Mjg3OTMuMCwyMzk2MjMuMCw4NjYzNzMuMCwyMzIxMzcyLjk5OTk5OTk5OTUsMjYwNTA2Ljk5OTk5OTk5OTg1LDY3NjAyNS4wMDAwMDAwMDAyLDI3MzM1MC45OTk5OTk5OTk5NCwzNDIwMDcuMDAwMDAwMDAwMSwxNDMyODguMDAwMDAwMDAwMDYsMS4wNDAxNTgzMDM5MDc3NDU1RTcKKzI3LFN1biAyMCBGZWIgMTEsNjA5NDc5Ljk5OTk5OTk5OTcsNzIzNzUzLjAwMDAwMDAwMDEsNzY3NzU1Ljk5OTk5OTk5OTQsMjc1OTU4MS4wMDAwMDAwMDE0LDYwNDQ4Mi45OTk5OTk5OTk4LDYzNzg1My4wMDAwMDAwMDAzLDEyODg3MDUuOTk5OTk5OTk5LDgzOTg0LjAsNTM1NzcwLjAsMTI1Mzk3MC4wMDAwMDAwMDAyLDUzMTY0OC4wMDAwMDAwMDA1LDE2ODIyNTguMDAwMDAwMDAwNSwyMTk4OTI4LjAwMDQyNzYxNjMsNTExNDczLjk5OTk5OTk5OTksMTc5ODA2Ni45OTk5OTk5OTksNTQ4ODk3Ljk5OTk5OTk5OTgsODI5OTE3LjAwMDAwMDAwMDIsOTMzNzA5LjAwMDAwMDAwMDUsMTE3MjI4Ny45OTk5OTk5OTk4LDEyMTQ1MzQuMDAwMDAwMDAwNyw2MjY2NDguMCw5NjYyLjAsMTIyMzAxMy45OTk5OTk5OTk4LDE1MTAzOTAuOTk5OTk5OTk5NSwzNjY5NDkuMCwxNTcwNDAuMDAwMDAwMDAwMDMsNjA2MjI4Ljk5OTk5OTk5OTksMzczODQ0OC4wMDAwMDAwMDE0LDIwMTI4NTEuMDAwMDAwMDAwMiwyMjg1NDUxLjAwMDUwOTMwMDMsMTI4MTk4Mi4wLDcwOTYxMC45OTk5OTk5OTk3LDIwMjE4Mi45OTk5OTk5OTk5NCwyMjg2OTY2Ljk5OTk5OTk5OTUsMjIzNjg0Ni4wLDI5NDI0NzYuOTk5OTk5OTk5NSwyNDM3ODYuMCw0NDM5NzQuMCw3OTUxMzcuMCw4NDU0NzQuMCwxOTUyODc0LjAsMjEwMTA2MS4wLDI3Mjg5NS4wLDEyMjE2MDkuOTk5OTk5OTk5OCw1MTkxMDQuOTk5OTk5OTk5NzcsMTg2NjAwMS4wMDAwMDAwMDAyLDI0MzQ2MC4wLDgwNDg3NC4wLDc2MDQyMC4wLDQ5NzUwNi4wLDU2MTMyNi4wLDc3NjYwMC4wLDI0NjU5MjUuMCwzMDAyOTc0LjAsMTI5MzQ2NS4wLDM4ODIyMDkuMDAwODgyNDM5LDEzMzczODYuMCw4OTY1MC4wLDQxMTk5NC4wLDE5MzkwOTYuMCw1OTgwNzYuMCw0MzI0MDMuMCw3Mjk4NDUuMCwzNDI4MjIuMCw2Mjg3OTMuMCwyMzk2MjMuMCw4NjYzNzIuOTk5OTk5OTk5OSwyMzIxMzczLjAsMjYwNTA2Ljk5OTk5OTk5OTg4LDY3NjAyNS4wMDAwMDAwMDAyLDI3MzM1MC45OTk5OTk5OTk5LDM0MjAwNy4wMDAwMDAwMDAxLDE0MzI4OC4wMDAwMDAwMDAwNiwxLjA0MDE1ODMwMzkwNzc0NTVFNworMjgsTW9uIDIxIEZlYiAxMSw2MDk0NzkuOTk5OTk5OTk5Nyw3MjM3NTMuMDAwMDAwMDAwMSw3Njc3NTUuOTk5OTk5OTk5NSwyNzU5NTgxLjAwMDAwMDAwMSw2MDQ0ODIuOTk5OTk5OTk5OCw2Mzc4NTMuMDAwMDAwMDAwMywxMjg4NzA1Ljk5OTk5OTk5OSw4Mzk4NC4wLDUzNTc3MC4wLDEyNTM5NzAuMDAwMDAwMDAwMiw1MzE2NDguMDAwMDAwMDAwNSwxNjgyMjU4LjAwMDAwMDAwMDUsMjE5ODkyOC4wMDA0Mjc2MTYzLDUxMTQ3My45OTk5OTk5OTk4LDE3OTgwNjYuOTk5OTk5OTk5LDU0ODg5Ny45OTk5OTk5OTk3LDgyOTkxNy4wMDAwMDAwMDAyLDkzMzcwOS4wMDAwMDAwMDAzLDExNzIyODcuOTk5OTk5OTk5OCwxMjE0NTM0LjAwMDAwMDAwMDcsNjI2NjQ4LjAsOTY2Mi4wLDEyMjMwMTMuOTk5OTk5OTk5OCwxNTEwMzkwLjk5OTk5OTk5OTMsMzY2OTQ5LjAwMDAwMDAwMDA2LDE1NzA0MC4wMDAwMDAwMDAwMyw2MDYyMjguOTk5OTk5OTk5OSwzNzM4NDQ4LjAwMDAwMDAwMTQsMjAxMjg1MS4wMDAwMDAwMDA1LDIyODU0NTEuMDAwNTA5MzAwNywxMjgxOTgyLjAsNzA5NjEwLjk5OTk5OTk5OTcsMjAyMTgyLjk5OTk5OTk5OTk0LDIyODY5NjcuMCwyMjM2ODQ1Ljk5OTk5OTk5OTUsMjk0MjQ3Ni45OTk5OTk5OTk1LDI0Mzc4Ni4wLDQ0Mzk3NC4wLDc5NTEzNy4wLDg0NTQ3NC4wLDE5NTI4NzQuMDAwMDAwMDAwMiwyMTAxMDYxLjAsMjcyODk1LjAsMTIyMTYxMC4wLDUxOTEwNC45OTk5OTk5OTk3NywxODY2MDAxLjAwMDAwMDAwMDIsMjQzNDYwLjAsODA0ODc0LjAsNzYwNDIwLjAsNDk3NTA2LjAsNTYxMzI2LjAsNzc2NjAwLjAsMjQ2NTkyNS4wLDMwMDI5NzQuMCwxMjkzNDY1LjAsMzg4MjIwOS4wMDA4ODI0MzksMTMzNzM4Ni4wLDg5NjUwLjAsNDExOTk0LjAsMTkzOTA5Ni4wLDU5ODA3Ni4wLDQzMjQwMy4wLDcyOTg0NS4wLDM0MjgyMi4wLDYyODc5My4wLDIzOTYyMy4wLDg2NjM3Mi45OTk5OTk5OTk5LDIzMjEzNzMuMCwyNjA1MDYuOTk5OTk5OTk5ODgsNjc2MDI1LjAwMDAwMDAwMDIsMjczMzUwLjk5OTk5OTk5OTk0LDM0MjAwNy4wMDAwMDAwMDAxLDE0MzI4OC4wMDAwMDAwMDAwNiwxLjA0MDE1ODMwMzkwNzc0NTVFNworMjksVHVlIDIyIEZlYiAxMSw2MDk0NzkuOTk5OTk5OTk5OCw3MjM3NTMuMDAwMDAwMDAwMSw3Njc3NTUuOTk5OTk5OTk5NCwyNzU5NTgxLjAwMDAwMDAwMSw2MDQ0ODIuOTk5OTk5OTk5OCw2Mzc4NTMuMDAwMDAwMDAwMywxMjg4NzA1Ljk5OTk5OTk5OSw4Mzk4NC4wLDUzNTc3MC4wLDEyNTM5NzAuMDAwMDAwMDAwMiw1MzE2NDguMDAwMDAwMDAwNSwxNjgyMjU4LjAwMDAwMDAwMDIsMjE5ODkyOC4wMDA0Mjc2MTYzLDUxMTQ3My45OTk5OTk5OTk4LDE3OTgwNjYuOTk5OTk5OTk5Myw1NDg4OTcuOTk5OTk5OTk5Nyw4Mjk5MTcuMDAwMDAwMDAwMSw5MzM3MDkuMDAwMDAwMDAwMywxMTcyMjg3Ljk5OTk5OTk5OTgsMTIxNDUzNC4wMDAwMDAwMDA3LDYyNjY0OC4wLDk2NjIuMCwxMjIzMDEzLjk5OTk5OTk5OTUsMTUxMDM5MC45OTk5OTk5OTkzLDM2Njk0OS4wLDE1NzA0MC4wMDAwMDAwMDAwNiw2MDYyMjguOTk5OTk5OTk5OSwzNzM4NDQ4LjAwMDAwMDAwMTQsMjAxMjg1MS4wMDAwMDAwMDA1LDIyODU0NTEuMDAwNTA5MzAwMywxMjgxOTgyLjAsNzA5NjEwLjk5OTk5OTk5OTUsMjAyMTgyLjk5OTk5OTk5OTk0LDIyODY5NjYuOTk5OTk5OTk5NSwyMjM2ODQ1Ljk5OTk5OTk5OTUsMjk0MjQ3Ni45OTk5OTk5OTk1LDI0Mzc4Ni4wLDQ0Mzk3NC4wLDc5NTEzNy4wLDg0NTQ3NC4wLDE5NTI4NzQuMDAwMDAwMDAwMiwyMTAxMDYxLjAsMjcyODk1LjAsMTIyMTYxMC4wLDUxOTEwNC45OTk5OTk5OTk3NywxODY2MDAxLjAwMDAwMDAwMDIsMjQzNDYwLjAsODA0ODc0LjAsNzYwNDE5Ljk5OTk5OTk5OTksNDk3NTA2LjAsNTYxMzI2LjAsNzc2NjAwLjAsMjQ2NTkyNS4wLDMwMDI5NzQuMCwxMjkzNDY1LjAsMzg4MjIwOS4wMDA4ODI0MzkzLDEzMzczODYuMCw4OTY1MC4wLDQxMTk5NC4wLDE5MzkwOTYuMCw1OTgwNzYuMCw0MzI0MDMuMCw3Mjk4NDUuMCwzNDI4MjIuMCw2Mjg3OTMuMCwyMzk2MjMuMCw4NjYzNzIuOTk5OTk5OTk5OSwyMzIxMzczLjAsMjYwNTA2Ljk5OTk5OTk5OTg1LDY3NjAyNS4wMDAwMDAwMDAzLDI3MzM1MC45OTk5OTk5OTk5LDM0MjAwNy4wMDAwMDAwMDAwNiwxNDMyODguMDAwMDAwMDAwMDYsMS4wNDAxNTgzMDM5MDc3NDU1RTcKKzMwLFdlZCAyMyBGZWIgMTEsNjA5NDc5Ljk5OTk5OTk5OTgsNzIzNzUzLjAsNzY3NzU1Ljk5OTk5OTk5OTUsMjc1OTU4MS4wMDAwMDAwMDE0LDYwNDQ4Mi45OTk5OTk5OTk4LDYzNzg1My4wMDAwMDAwMDAzLDEyODg3MDUuOTk5OTk5OTk5Myw4Mzk4NC4wLDUzNTc3MC4wLDEyNTM5NzAuMDAwMDAwMDAwMiw1MzE2NDguMDAwMDAwMDAwNSwxNjgyMjU4LjAwMDAwMDAwMDUsMjE5ODkyOC4wMDA0Mjc2MTYzLDUxMTQ3My45OTk5OTk5OTk4LDE3OTgwNjYuOTk5OTk5OTk5Myw1NDg4OTcuOTk5OTk5OTk5Nyw4Mjk5MTcuMDAwMDAwMDAwMSw5MzM3MDkuMDAwMDAwMDAwMywxMTcyMjg3Ljk5OTk5OTk5OTgsMTIxNDUzNC4wMDAwMDAwMDA3LDYyNjY0OC4wMDAwMDAwMDAxLDk2NjIuMCwxMjIzMDEzLjk5OTk5OTk5OTgsMTUxMDM5MC45OTk5OTk5OTksMzY2OTQ5LjAsMTU3MDQwLjAwMDAwMDAwMDA2LDYwNjIyOC45OTk5OTk5OTk5LDM3Mzg0NDguMDAwMDAwMDAxNCwyMDEyODUxLjAwMDAwMDAwMDIsMjI4NTQ1MS4wMDA1MDkzMDA3LDEyODE5ODIuMDAwMDAwMDAwMiw3MDk2MTAuOTk5OTk5OTk5NywyMDIxODIuOTk5OTk5OTk5OTQsMjI4Njk2Ni45OTk5OTk5OTk1LDIyMzY4NDUuOTk5OTk5OTk5NSwyOTQyNDc2Ljk5OTk5OTk5OTUsMjQzNzg2LjAsNDQzOTc0LjAsNzk1MTM3LjAsODQ1NDc0LjAsMTk1Mjg3NC4wMDAwMDAwMDAyLDIxMDEwNjEuMCwyNzI4OTUuMCwxMjIxNjEwLjAsNTE5MTA0Ljk5OTk5OTk5OTc3LDE4NjYwMDEuMDAwMDAwMDAwMiwyNDM0NjAuMCw4MDQ4NzQuMCw3NjA0MjAuMCw0OTc1MDYuMCw1NjEzMjYuMCw3NzY2MDAuMCwyNDY1OTI1LjAsMzAwMjk3NC4wLDEyOTM0NjUuMCwzODgyMjA5LjAwMDg4MjQzOSwxMzM3Mzg2LjAsODk2NTAuMCw0MTE5OTQuMCwxOTM5MDk2LjAsNTk4MDc2LjAsNDMyNDAzLjAsNzI5ODQ1LjAsMzQyODIyLjAsNjI4NzkzLjAsMjM5NjIzLjAsODY2MzczLjAsMjMyMTM3My4wMDAwMDAwMDA1LDI2MDUwNi45OTk5OTk5OTk4NSw2NzYwMjUuMDAwMDAwMDAwMywyNzMzNTAuOTk5OTk5OTk5OSwzNDIwMDcuMDAwMDAwMDAwMSwxNDMyODguMDAwMDAwMDAwMDYsMS4wNDAxNTgzMDM5MDc3NDU1RTcKKzMxLFRodSAyNCBGZWIgMTEsNjA5NDc5Ljk5OTk5OTk5OTgsNzIzNzUyLjk5OTk5OTk5OTksNzY3NzU1Ljk5OTk5OTk5OTUsMjc1OTU4MS4wMDAwMDAwMDEsNjA0NDgyLjk5OTk5OTk5OTgsNjM3ODUzLjAwMDAwMDAwMDMsMTI4ODcwNS45OTk5OTk5OTksODM5ODQuMCw1MzU3NzAuMCwxMjUzOTcwLjAwMDAwMDAwMDUsNTMxNjQ4LjAwMDAwMDAwMDUsMTY4MjI1OC4wMDAwMDAwMDAyLDIxOTg5MjguMDAwNDI3NjE2OCw1MTE0NzMuOTk5OTk5OTk5OCwxNzk4MDY2Ljk5OTk5OTk5OTMsNTQ4ODk3Ljk5OTk5OTk5OTcsODI5OTE3LjAwMDAwMDAwMDEsOTMzNzA5LjAwMDAwMDAwMDMsMTE3MjI4Ny45OTk5OTk5OTk4LDEyMTQ1MzQuMDAwMDAwMDAxLDYyNjY0OC4wMDAwMDAwMDAxLDk2NjIuMCwxMjIzMDEzLjk5OTk5OTk5OTgsMTUxMDM5MC45OTk5OTk5OTksMzY2OTQ5LjAwMDAwMDAwMDA2LDE1NzA0MC4wMDAwMDAwMDAwNiw2MDYyMjguOTk5OTk5OTk5OCwzNzM4NDQ4LjAwMDAwMDAwMiwyMDEyODUxLjAwMDAwMDAwMDUsMjI4NTQ1MS4wMDA1MDkzMDAzLDEyODE5ODIuMDAwMDAwMDAwMiw3MDk2MTAuOTk5OTk5OTk5NSwyMDIxODIuOTk5OTk5OTk5OSwyMjg2OTY2Ljk5OTk5OTk5OTUsMjIzNjg0NS45OTk5OTk5OTk1LDI5NDI0NzYuOTk5OTk5OTk5NSwyNDM3ODYuMCw0NDM5NzQuMCw3OTUxMzcuMCw4NDU0NzQuMCwxOTUyODc0LjAwMDAwMDAwMDIsMjEwMTA2MS4wMDAwMDAwMDA1LDI3Mjg5NS4wLDEyMjE2MTAuMCw1MTkxMDQuOTk5OTk5OTk5NywxODY2MDAxLjAwMDAwMDAwMDIsMjQzNDYwLjAsODA0ODc0LjAsNzYwNDE5Ljk5OTk5OTk5OTksNDk3NTA2LjAsNTYxMzI2LjAsNzc2NjAwLjAsMjQ2NTkyNS4wLDMwMDI5NzQuMCwxMjkzNDY1LjAsMzg4MjIwOS4wMDA4ODI0MzkzLDEzMzczODYuMCw4OTY1MC4wLDQxMTk5NC4wLDE5MzkwOTYuMCw1OTgwNzYuMCw0MzI0MDMuMCw3Mjk4NDUuMCwzNDI4MjIuMCw2Mjg3OTMuMCwyMzk2MjMuMCw4NjYzNzMuMDAwMDAwMDAwMSwyMzIxMzczLjAsMjYwNTA2Ljk5OTk5OTk5OTg1LDY3NjAyNS4wMDAwMDAwMDAyLDI3MzM1MC45OTk5OTk5OTk5LDM0MjAwNy4wMDAwMDAwMDAwNiwxNDMyODguMDAwMDAwMDAwMDMsMS4wNDAxNTgzMDM5MDc3NDU1RTcKKzMyLEZyaSAyNSBGZWIgMTEsNjA5NDc5Ljk5OTk5OTk5OTcsNzIzNzUzLjAsNzY3NzU1Ljk5OTk5OTk5OTQsMjc1OTU4MS4wMDAwMDAwMDE0LDYwNDQ4Mi45OTk5OTk5OTk4LDYzNzg1My4wMDAwMDAwMDAzLDEyODg3MDUuOTk5OTk5OTk5LDgzOTg0LjAsNTM1NzcwLjAsMTI1Mzk3MC4wMDAwMDAwMDAyLDUzMTY0OC4wMDAwMDAwMDA1LDE2ODIyNTguMDAwMDAwMDAwNSwyMTk4OTI4LjAwMDQyNzYxNjMsNTExNDczLjk5OTk5OTk5OTgsMTc5ODA2Ni45OTk5OTk5OTkzLDU0ODg5Ny45OTk5OTk5OTk3LDgyOTkxNy4wLDkzMzcwOS4wMDAwMDAwMDAyLDExNzIyODcuOTk5OTk5OTk5NSwxMjE0NTM0LjAwMDAwMDAwMDcsNjI2NjQ4LjAwMDAwMDAwMDEsOTY2Mi4wLDEyMjMwMTMuOTk5OTk5OTk5OCwxNTEwMzkwLjk5OTk5OTk5OTMsMzY2OTQ5LjAsMTU3MDQwLjAwMDAwMDAwMDAzLDYwNjIyOC45OTk5OTk5OTk5LDM3Mzg0NDguMDAwMDAwMDAyLDIwMTI4NTEuMDAwMDAwMDAwNywyMjg1NDUxLjAwMDUwOTMwMDMsMTI4MTk4Mi4wLDcwOTYxMC45OTk5OTk5OTk3LDIwMjE4Mi45OTk5OTk5OTk5LDIyODY5NjYuOTk5OTk5OTk5NSwyMjM2ODQ1Ljk5OTk5OTk5OTUsMjk0MjQ3Ni45OTk5OTk5OTk1LDI0Mzc4Ni4wLDQ0Mzk3NC4wLDc5NTEzNy4wLDg0NTQ3NC4wLDE5NTI4NzQuMCwyMTAxMDYxLjAwMDAwMDAwMDUsMjcyODk1LjAsMTIyMTYxMC4wMDAwMDAwMDAyLDUxOTEwNC45OTk5OTk5OTk3NywxODY2MDAxLjAwMDAwMDAwMDIsMjQzNDYwLjAsODA0ODc0LjAsNzYwNDIwLjAsNDk3NTA2LjAsNTYxMzI2LjAsNzc2NjAwLjAsMjQ2NTkyNS4wLDMwMDI5NzQuMCwxMjkzNDY1LjAsMzg4MjIwOS4wMDA4ODI0MzksMTMzNzM4Ni4wLDg5NjUwLjAsNDExOTk0LjAsMTkzOTA5Ni4wLDU5ODA3Ni4wLDQzMjQwMy4wLDcyOTg0NS4wLDM0MjgyMi4wLDYyODc5My4wLDIzOTYyMy4wLDg2NjM3My4wLDIzMjEzNzMuMCwyNjA1MDYuOTk5OTk5OTk5ODUsNjc2MDI1LjAwMDAwMDAwMDIsMjczMzUwLjk5OTk5OTk5OTksMzQyMDA3LjAwMDAwMDAwMDEsMTQzMjg4LjAwMDAwMDAwMDAzLDEuMDQwMTU4MzAzOTA3NzQ1N0U3CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNFSVJfRkRfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL1JfMC5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNFSVJfRkRfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL1JfMC5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmFjOTgwMQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0VJUl9GRF9SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vUl8wLmNzdgpAQCAtMCwwICsxLDMzIEBACitpdGVyYXRpb24sdGltZSxzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9ub2RlL3RyYW5zcG9ydC9waXBlL1BITAorMSxUdWUgMjUgSmFuIDExLDAuMAorMixXZWQgMjYgSmFuIDExLDAuMAorMyxUaHUgMjcgSmFuIDExLDAuMAorNCxGcmkgMjggSmFuIDExLDAuMDAxMTc2ODgwNjgxMDI0NDY2OAorNSxTYXQgMjkgSmFuIDExLDAuMDAxNDA5MDY4NDE4ODc1NjExNgorNixTdW4gMzAgSmFuIDExLDAuMDcwNTU4ODA2NzQ5NTY4NDIKKzcsTW9uIDMxIEphbiAxMSwwLjA4Mjg5MzgyMzY3NTc3NTE5Cis4LFR1ZSAxIEZlYiAxMSwyLjcyNTMxMzA4NjIxOTYyNgorOSxXZWQgMiBGZWIgMTEsMy40NjQ0MDMyMDE0MDE4MTI1CisxMCxUaHUgMyBGZWIgMTEsODcuNzk3NDE5ODQ4MzA0MDYKKzExLEZyaSA0IEZlYiAxMSwxMjEuMzgwMDg5NzgzMTA5NjEKKzEyLFNhdCA1IEZlYiAxMSw1NDIuMDAxNjgwMjY2NjIzNQorMTMsU3VuIDYgRmViIDExLDI3NjEuNDY4MjU5ODkxMzE1CisxNCxNb24gNyBGZWIgMTEsMzE1Ny4xNDQ2Mjc3NTYzNDEKKzE1LFR1ZSA4IEZlYiAxMSwxOTQ2NC4xNjQ1ODM1NjgwNQorMTYsV2VkIDkgRmViIDExLDE5NzU1LjcxMTc1ODA2NjA2MworMTcsVGh1IDEwIEZlYiAxMSwzMjUxMC40ODYyODU0OTg0OQorMTgsRnJpIDExIEZlYiAxMSwzMjY4OC44MTIyMDIzMjI5NQorMTksU2F0IDEyIEZlYiAxMSwzNzU0OC42ODc1NTc0Mjg0CisyMCxTdW4gMTMgRmViIDExLDM3Njg0LjkwODM3NTU5MTU0CisyMSxNb24gMTQgRmViIDExLDQxMDAzLjc2NTIwNDIwOTM3NgorMjIsVHVlIDE1IEZlYiAxMSw0MTE0OC41ODcxMjEwMTY5NQorMjMsV2VkIDE2IEZlYiAxMSw0MzY1OC4yNTA4MTc0NDU0OAorMjQsVGh1IDE3IEZlYiAxMSw0Mzc1Ny44OTM1NDIwOTIzNgorMjUsRnJpIDE4IEZlYiAxMSw0NTIyMS45MzY4MjY4NjQ4OAorMjYsU2F0IDE5IEZlYiAxMSw0NTMwMS4zNzY5NTk3ODk5MTUKKzI3LFN1biAyMCBGZWIgMTEsNDYyNjguNDQ1NTcwMTMxODIKKzI4LE1vbiAyMSBGZWIgMTEsNDYzMzcuMDMyMTUyODc5OTI1CisyOSxUdWUgMjIgRmViIDExLDQ2OTM2LjY3Mjg4NTA0NTMzCiszMCxXZWQgMjMgRmViIDExLDQ3MDAwLjU1ODYwMTA3MzI0NAorMzEsVGh1IDI0IEZlYiAxMSw0NzM3Ni4yODk0ODcwNzk5MQorMzIsRnJpIDI1IEZlYiAxMSw0NzQzNy4xMzI4NDQzMDI2MzYKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0VJUl9GRF9SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vUl8xLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0VJUl9GRF9SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vUl8xLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41Mzc0YTI4Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTRUlSX0ZEX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9SXzEuY3N2CkBAIC0wLDAgKzEsMzMgQEAKK2l0ZXJhdGlvbix0aW1lLHN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL25vZGUvdHJhbnNwb3J0L3BpcGUvUEgtMTEsc3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vbm9kZS90cmFuc3BvcnQvcGlwZS9QSC0zLHN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL25vZGUvdHJhbnNwb3J0L3BpcGUvUEgtNyxzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9ub2RlL3RyYW5zcG9ydC9waXBlL1BILU5DUgorMSxUdWUgMjUgSmFuIDExLDAuMCwwLjAsMC4wLDAuMAorMixXZWQgMjYgSmFuIDExLDAuMCwwLjAsMC4wLDAuMAorMyxUaHUgMjcgSmFuIDExLDAuMCwwLjAsMC4wLDAuMDAxNjI1NTE2NTM5NjkyMDMxCis0LEZyaSAyOCBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wMDE0NTgwMTA1NjU2ODM4MDQ3Cis1LFNhdCAyOSBKYW4gMTEsNC4xNTcyMzQ0MjQ1OTU2ODg1RS03LDIuMDI1OTExMTYyNzAxNzU2M0UtNSwxLjA1NDk4NjEzMjkxNDk3MjhFLTQsMC4wNTg2NzYxMTc5NzgwMDY1NworNixTdW4gMzAgSmFuIDExLDQuMTE3MTc1Nzk3NzMzMjU1NkUtNywyLjAwNDgyMDM5ODg3MjExOEUtNSwxLjA0NDgyMDQwOTM3Njg4RS00LDAuMDU3MTExNTcyODc3ODI1MDMKKzcsTW9uIDMxIEphbiAxMSwzLjU5MjQ1MTI4MzQ2NDU3NDVFLTUsMC4wMDIyNzgxMTgzMzM3NzY3NzgsMC4wMDkxMTY2ODgyNjMyMTM1NjUsMS42NDkxNTYxNjg3MDA3MzMKKzgsVHVlIDEgRmViIDExLDIuNTAzMDQzNDg0MjAwMDdFLTUsMC4wMDE5NzY3OTM3NzQ1MDkyNTM3LDAuMDA2MzUyMTIxNjYyMjU5ODM0LDEuNzg4Mjk0NjQzMTc5MzM0NworOSxXZWQgMiBGZWIgMTEsMC4wMDE3NzE3NDkyMzI1NTczMTc0LDAuMTIxNzY0Mzk3MDkyMzUyMTQsMC40NDk2MzMzMDA1ODYzOTUxLDQyLjY1NTI1MTc3OTU3OTQ1CisxMCxUaHUgMyBGZWIgMTEsMC4wMDEwNjQwNjY0OTI5OTcyNzQ1LDAuMTA2MjE2OTk4Mjg0MjM0MzksMC4yNzAwNDI2MDQ5OTEzOTI0Myw1MC40ODQxMjYyNTM1NzU3MworMTEsRnJpIDQgRmViIDExLDAuMDY3OTMzOTY5OTc1Mzg3MDIsNC44OTQ3NDk5MTQyMTIyMjE1LDE3LjI0MDg4NTA0ODU3Njc3NSw0MTIuOTQ0NDE2MjkwOTczMDQKKzEyLFNhdCA1IEZlYiAxMSwwLjAzOTAwNjU4MTQwODIyMDY5LDQuMjg4MzI0Mzg2NzYwNjg1LDkuODk5NjM0Njc3NDQzMzAyLDExNjcuODUwMTY5NTk0MzU3CisxMyxTdW4gNiBGZWIgMTEsMC4yOTkyMDcyOTc1NzAzMzY2LDE2LjYxMDM2MjA1MTI2NzUwOCw3NS45MjkxNTA2MTkyMTA3OSwxNTQyLjI4NDMwMzg2NTA0NDIKKzE0LE1vbiA3IEZlYiAxMSwxLjY5MTI1NTk5NDUzOTQzMTksMTg2Ljc1MTY4NjI0MTkyNTI2LDQyOS40Mjk2NzkxNzI2OTM1NywxMzg5OC4zNTc3MDgxNjMwMzYKKzE1LFR1ZSA4IEZlYiAxMSwxLjkxMzUxNjM1NjgwNzU0NSwxOTUuOTA5MTE3NTM0ODczMjcsNDg1LjgwMDQ2NTM0MDgyNzUsMTM5NTEuNTA1NjUzMTUyMDQyCisxNixXZWQgOSBGZWIgMTEsOC41NzA1MDkyNzk5Mzg3NTMsODQwLjcyNTE0MTE1OTQyMDgsMjI0Mi45ODMzNDk2OTMxODI0LDI1NTk3Ljk3OTIwODUxNzExOAorMTcsVGh1IDEwIEZlYiAxMSw4LjYxNjUxNjE2NTMwOTE2LDgxOC45MTkyNDU4OTU1OTU2LDIyNDkuODQ4MDcwNDAyMDcyLDI1MzI4LjE2NzYwMDk0OTE1CisxOCxGcmkgMTEgRmViIDExLDExLjY2NTMxNTQ2MjcxNzgyOCw5MDguNzM3Nzg3MDQwMjcyOCwzMjc2LjYyNTEyMTczNDE4NCwzMDU1NC43NDA3NTUxNzU5OTMKKzE5LFNhdCAxMiBGZWIgMTEsMTEuNjg5MDQ5ODMzMzYwOTIsOTEwLjcyNDEyMjI0MTc5MzIsMzI5My4xMzM2MDQzNTI5MjIyLDMwNDQzLjU3MTA3MjA1OTQ4CisyMCxTdW4gMTMgRmViIDExLDEyLjk0ODIwOTIzMDYwMDY3MSwxMTE4LjE2NzMwODgxMDg5Niw0NTE2LjcyODQ5NjIzNjk5NiwzMzk1MS40MTA4MzQ3ODI5NAorMjEsTW9uIDE0IEZlYiAxMSwxMi45ODY4NzA5NjI0MDQ2NDYsMTExMC40MDYwMzY2NTQ3MjUsNDUzMC45Mzg5MDYwMjEyLDMzODQxLjgzMzg2Mzg2Mzc0CisyMixUdWUgMTUgRmViIDExLDE0LjI0ODI3NjIzNTUxNjc4OSwxMTk0LjQ4NTE2MjQ0OTMzMDEsNTY0Ny4zNjI1NjAwNDE4OTcsMzYzNDIuNzgzMDA5MjE5OTEKKzIzLFdlZCAxNiBGZWIgMTEsMTQuMzI4NDkzMjkzMzg3NzY3LDExOTMuNDgyOTAyMTQ3NDQ1NCw1NTk1LjkxNjM4Njc2ODcxNywzNjI2My45ODE3OTEwNDgyCisyNCxUaHUgMTcgRmViIDExLDE3LjA5NDE4MTg3MDMwOTAyNiwxMjg2LjI2MDE3MzQ0MzU3Miw2MDE3LjgyOTE4ODE1Mzk2NywzODE3MC4zMTgwODkzNDYxMQorMjUsRnJpIDE4IEZlYiAxMSwxNy4xNDg0Mzg5MjM2MjYwMzUsMTI4MC44MzUzMTA3MTkyNDI0LDYwMTcuOTMxNDY1NjA5NTczLDM4MDUxLjI2NDU4NzU3NDI2CisyNixTYXQgMTkgRmViIDExLDIwLjc2NjQ1MDg5Mjk2NTE3OCwxMzI4LjUyNDQ3MTA4ODMzOCw2NTYzLjEzMjMxODQxNTUwNiwzOTE2My4zMzQ5NDk2NTUwNQorMjcsU3VuIDIwIEZlYiAxMSwyMC42OTIyMjUyMDE2ODczOCwxMzI2LjgxMTU2MTA1MTkzMDMsNjUzMy4wMDc2OTk1NjI5NDE1LDM5MTE3LjkwODIxMjM3NDEzCisyOCxNb24gMjEgRmViIDExLDIyLjkzNDA4MDk5MjA3Nzg3NCwxMzY0LjI3MjgyMDY1NzIyMzcsNjgxMi45OTAwODAyNjc1OTIsMzk5MDQuMDkxNTI2MjY0MjUKKzI5LFR1ZSAyMiBGZWIgMTEsMjIuOTAzNTQ2MDM4MzE4MjgyLDEzNjIuNDQyMTQxMzk4Njc0NSw2ODAyLjY2NDQ1MDYwMjc4MiwzOTg4Mi4yNDgyNjgyNDQxOQorMzAsV2VkIDIzIEZlYiAxMSwyNS4wMTA3MDA1NDgyOTk4OTQsMTM4NS4yMjYzMzk5NjAwMTM1LDcwMzIuMTE1MDgyMjY4ODQxLDQwMzQ4Ljg5ODUzODAyNzAyCiszMSxUaHUgMjQgRmViIDExLDI0LjkzNDkwODM1MjAyODQ5NCwxMzg1LjYxNjE3OTQ4MjI5MDQsNzAxOC4zNjE1MDE4NzQxMyw0MDM2My41ODcxMjc4OTYyNDQKKzMyLEZyaSAyNSBGZWIgMTEsMjYuMzIxODc5MDgzODc3NjksMTM5OS4zMDI3OTgyMDk3NjA2LDcxNjMuMDAwMjU5MzgzOTYsNDA2MTguMDUzMDA3MTY1ODk0CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNFSVJfRkRfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL1JfMi5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNFSVJfRkRfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL1JfMi5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2ZmNjBiYQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0VJUl9GRF9SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vUl8yLmNzdgpAQCAtMCwwICsxLDMzIEBACitpdGVyYXRpb24sdGltZSxQSC0xLUc2NDAwMDEsUEgtMS1HNjQwMDAyLFBILTEtRzY0MDAwMyxQSC0xLUc2NDAwMDQsUEgtMTAtRzY1MDAwMSxQSC0xMC1HNjUwMDAyLFBILTEwLUc2NTAwMDMsUEgtMTAtRzY1MDAwNCxQSC0xMC1HNjUwMDA1LFBILTEwLUc2NTAwMDYsUEgtMTAtRzY1MDAwNyxQSC0xMS1HNjYwMDAxLFBILTExLUc2NjAwMDIsUEgtMTEtRzY2MDAwMyxQSC0xMS1HNjYwMDA0LFBILTExLUc2NjAwMDUsUEgtMTItRzY3MDAwMSxQSC0xMi1HNjcwMDAyLFBILTEyLUc2NzAwMDMsUEgtMTItRzY3MDAwNCxQSC0xMi1HNjcwMDA1LFBILTItRzY4MDAwMSxQSC0yLUc2ODAwMDIsUEgtMi1HNjgwMDAzLFBILTItRzY4MDAwNCxQSC0yLUc2ODAwMDUsUEgtMy1HNjkwMDAxLFBILTMtRzY5MDAwMixQSC0zLUc2OTAwMDMsUEgtMy1HNjkwMDA0LFBILTMtRzY5MDAwNSxQSC0zLUc2OTAwMDYsUEgtNC1HNzAwMDAxLFBILTQtRzcwMDAwMixQSC00LUc3MDAwMDMsUEgtNC1HNzAwMDA0LFBILTQtRzcwMDAwNSxQSC00LUc3MDAwMDYsUEgtNC1HNzAwMDA3LFBILTQtRzcwMDAwOCxQSC00LUc3MDAwMDksUEgtNC1HNzAwMDEwLFBILTQtRzcwMDAxMSxQSC01LUc3MTAwMDEsUEgtNS1HNzEwMDAyLFBILTUtRzcxMDAwMyxQSC01LUc3MTAwMDQsUEgtNS1HNzEwMDA1LFBILTUtRzcxMDAwNixQSC02LUc3MjAwMDEsUEgtNi1HNzIwMDAyLFBILTYtRzcyMDAwMyxQSC02LUc3MjAwMDQsUEgtNi1HNzIwMDA1LFBILTctRzczMDAwMSxQSC03LUc3MzAwMDIsUEgtNy1HNzMwMDAzLFBILTctRzczMDAwNCxQSC04LUc3NDAwMDEsUEgtOC1HNzQwMDAyLFBILTgtRzc0MDAwMyxQSC04LUc3NDAwMDQsUEgtOC1HNzQwMDA1LFBILTktRzc1MDAwMSxQSC05LUc3NTAwMDIsUEgtOS1HNzUwMDAzLFBILTktRzc1MDAwNCxQSC05LUc3NTAwMDUsUEgtQ0FSLUcyMzAwMDEsUEgtQ0FSLUcyMzAwMDIsUEgtQ0FSLUcyMzAwMDMsUEgtQ0FSLUcyMzAwMDQsUEgtQ0FSLUcyMzAwMDUsUEgtTkNSLUc1MjAwMDEKKzEsVHVlIDI1IEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyLFdlZCAyNiBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuNAorMyxUaHUgMjcgSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjYzODM3NDQ4MzQ2MDMwOAorNCxGcmkgMjggSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuNTAwNzQ0ODcxODk2NzUyNSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjIzOTM5NTM4MDEwMjAxMzU2LDAuMTk3MTY2NjkwODY4MjkwOTcsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjU0MjAwODYzODc2NTY3ODIsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDcuNzk0MDI1ODA1OTU5OTQ4Cis1LFNhdCAyOSBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMS40MDEwNjc5MjkzMDMxNDI3LDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuNjY5ODIwNTQyMDk1MDQ1MiwwLjU1MTY2NjA2MjkwOTI5ODksMC4wLDAuMCwwLjAsMC4wLDAuMCwxLjUxNjUyMjM2MDk4MDQ0NTcsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDIwLjQ0NDgyNzg4Njk1OTg0Cis2LFN1biAzMCBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMi45NjI2NzUwNDM5MTM5NjJFLTcsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwxOC4zNDU0MTQ3MDEwNjg0NywwLjAwNzAwODY1NTI1MjgwNzM0MiwwLjQ3MzIzMjAzMzAxNDkzMDYsMC4wLDAuMCwwLjA4MzA1MTY0NTQ1NTIwMDksMC4wMTIzODQ4NDU2MjE0NzYxODIsOC45NTk4NzIyODM4MjcxMTQsOC4yNDUwNzI4MjE5MDM5OTgsMC4wLDAuMCwwLjAsMC4wLDAuNDA1MTI4MTQ5NDE1Mzg4OSwxNy43NDkzODI2OTQxMjU1NzUsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDcuNTE4MjkxNTQ4OTUxOTgzRS01LDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMTU5LjM1MjI2MzQ2Njc5ODkKKzcsTW9uIDMxIEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCw1LjQ0NjQ4MTU1NTY1MDcyOEUtNywwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDY2Ljk0OTY2ODgwMzI5NTQyLDAuMDI4MDIwMzc2MzcyMjMyMjgsMS44OTE0ODAwMDE3NTUyMDY3LDAuMCwwLjAsMC4zMzIwMzc0MDQ2MDA1OTQ1NSwwLjA0OTUxNDIxMjY3Mzg3MDcwNCwzMi43NjQxNjcxOTI1NjU1LDMwLjQ0NTczNzQwNjkxNDIxMiwwLjAsMC4wLDAuMCwwLjAsMS42MTk2ODgzNDEyNDQ0Mjg1LDY0LjAzOTM5NDcyODU0NTc5LDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwxLjM4MTI1ODg0NzMxMTE1MDdFLTQsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCw1NDQuMjAyMDk4NDM0MTk4NAorOCxUdWUgMSBGZWIgMTEsMC4wLDAuMCwwLjAsNi41NjgzOTEwMjMzMjc0NTVFLTUsMC4wLDAuMCwxLjQ1ODE0MzE4MTA1MzQ5NDdFLTksMC4wLDAuMCwwLjAsMC4wLDQuMjk2ODExODY3MDU0OTEyNEUtMTAsMy42ODg1MjU2MTc1NzM1N0UtNSwwLjAsNC4zODczNDQwMzE4OTE0MzdFLTEwLDAuMCwwLjAsMC4wLDAuMCwzLjgxODgyMDM1MTc0NDEwNEUtMTAsMy44NjUxMjk2NTM3MDcyMzhFLTEwLDAuMCwwLjAsMC4wMjYxNDUwOTg4NzUwNDI0MjYsMC4wMjg3NTk3OTM3Njg5NzYxMDQsMC4wNzc5NzU2NzkwMDU5MzE4MiwwLjAxMDgxNjkwMTI0MTIwMjM5Miw2NDIuMzc1OTAzNzMxMTA2MiwwLjgzNjAxMjQ3NzYwMDg3ODksMzMuNjU5NzIzNzExMTI0Mzg2LDAuMDE0NDYyNjMxODY4NjUxNTg1LDAuMDA5OTAwMDU0NDE3NjYzMTQ0LDUuMjg4NzY2Mjg0MDgxMTkzLDAuOTQ1MDc0OTU0Mzc3ODQ0NSwzMjEuMTc0ODU1NDc2MTM3NywzMTkuODc5NzU4MzQ3MTAwNzMsMC4wLDAuMCwwLjAsMC4wLDMwLjI0Mzc3ODAwNjkxOTg2OCw1NjQuNzc4MTE4NTU0NDE0NSwwLjAsMC4wLDAuMDAyNDEyNjcwOTA1OTEyOTE1NCwwLjAwMjQxNTY1NjA4MDYwMTAyMzIsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wMDkzNTkxNjIwMzYxNTg3NCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDQwNTguNDI4OTkyODY1OTgzNworOSxXZWQgMiBGZWIgMTEsMC4wLDAuMCw0LjU5NjQ0OTA3NzUxMzE5NUUtNyw4LjA2ODA0MjAwNjI3Nzk3N0UtNCw0Ljk5NDI0NDA1MDQ1NTEyMUUtMTMsNC4zODAyODIyMzQwNzk3MTZFLTExLDMuODIwMjM3NjkxMjk2NzA4NUUtOCwwLjAsMC4wLDUuMzgwNzQzOTc5NjU4ODI0RS0xMywwLjAsMS4xMzIzNDc0MDkzMTMxMjA4RS04LDIuNzgzNDI0MTU3NzExNTIyRS00LDEuODI2MTY2ODMwNDc5MzA5RS0xMywxLjE1NDM1NDg1MjE4MTk3NTVFLTgsMC4wLDEuMzAwODAwMzk2NzI1NDI0NUUtMTEsMy4zNzgxMDk0ODc3ODAwNjNFLTExLDcuNTk3NjAwNDE3OTIyNDQ5RS0xMSwxLjAwMTQ2MjA4MzA2NDEyOEUtOCwxLjAxMDYwMDM3MzU0OTUzOUUtOCwwLjAsNy4yODcxODg5MjU0NDA3OTc1RS02LDAuMjMwNTg5MDA4ODM3MDkxOSwwLjI1NDc4Njg3ODI4NzYxODgsMC42NDU4MTA1NDk3NzI1MzU0LDAuMDk3Mzk2NDA5MjEyMTQ1NzMsMzE1My41MjMwNjI1NzY2MDUsNS45NzcyMzk1MjUwNDA1NTcsMjAyLjI2NDk2MzI2ODI4MDEsMC4xNDA3Mzc5MzkyMTMxMjkwNSwwLjA4ODk0MjU2MzgzMjM1LDMwLjI4MDk1MDAwMDU3NTE0LDUuODY1Mzg3Mjk0MTE4MzY3LDE1OTMuNDM2NzY1MTY0MzkzOCwxNjMwLjExMjM5OTcyNTg0MzMsMC4wLDAuMCwwLjAsMC4wLDE4NS4xNjg5MjQ4OTY3OTk3LDI2NzQuNzEzOTgwNzMxOTg2LDAuMCwxLjIzNjM4MTYyODI4NzM1NjFFLTYsMC4wMjIxODYyODczNzkyODg4NzQsMC4wMjIyMTk2MDEwODM0MjAxNzYsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wNzA2Mjk1NDEzNzMyOTgzMywwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wMDEwMTg4NTc0OTA1MDM0NDQzLDAuMDAxNDExMDIyNDgxMTUyNzQ4OCw2LjM2ODA0MDYxNjAwMTg2OUUtNiw5LjkxOTM4MjI2ODk2MzM0NEUtNSwxODExMi4wNTQ4ODc3MjQzNAorMTAsVGh1IDMgRmViIDExLDAuMCwwLjAsNy4yMTE5MjQ0MTg2NTg2NTVFLTYsMC4wMDg4ODQxNDMzNzc0OTY2NzcsNi42Mzg0NjYwOTI2NjI2MDI1RS0xMiw1LjgyMjM3MzY3NTI2NzM3RS0xMCw0LjMyMjYyMjkwMjk1MjY5NEUtNywwLjAsMC4wLDcuMTUyMjEwODQ1NDA0ODA2NUUtMTIsMC4wLDEuMjgyNTY1Mzg0MDczMDM0RS03LDAuMDAyNDQ2MDc4ODU4NTMyMTM2NCwyLjQyNzM4MzY5NjM1Mjg2MDdFLTEyLDEuMzA3MTI4NTc0NjYwNjc4RS03LDAuMCwxLjcyOTA1NDMzNTI5OTYyNkUtMTAsNC40OTAyNjIyMDI5MjI2MTY0RS0xMCwxLjAwOTg5MDgzMTMzMzc0NjFFLTksMS4xMzMzNDk3NzY5OTc1MTcyRS03LDEuMTQzMDk3NzU4NDQ0MDUyOEUtNywwLjAsMS4xNDMzNzQ3ODEwMDU5MTE1RS00LDIuMTE1NDY5OTMxNDM3MzIwNiwyLjM0NDg2NTUxNDgxMzk3NzYsNS42NTE1OTI1NzMxNzI0MDksMC45MDY1NDk4NjkyMTk1MzEzLDE3NjEwLjY1MDkwMDM2MzE0Nyw0Ny45MDcyNTc4MjU3MjEyNywxMzg1LjEzNzg5MzMxMDA0MjMsMS4zNzcwNzExMTQxNzcwNTEzLDAuODI2NTk2NjkwODk3MTc2NSwxOTYuNzQ0ODM3NDMxNTcwNyw0MS41NDgwNTExMjY3MTY5NCw5MDE3LjAwMTI3Njk0ODk2Niw5NDk3LjI5OTIwNzkyMzI2LDAuMCwwLjAsMC4wLDAuMCwxMjkyLjAwODEwODMyNzAzOTMsMTQzMjAuNjkzNzgwNTg3Njk1LDAuMCwxLjkzOTkwODI4MzMyOTEzNTVFLTUsMC4yMDk0NTU3NTc1MDEyNDA2NSwwLjIwOTgwNjk1ODQyNTAzNTA4LDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuNjIwNzE1ODI4NDkyNTQ0NiwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wMTU5ODYwODA3MzcwNjE3OTMsMC4wMjIxMzkyMjc2OTg1ODM0MTQsOS45OTE1ODUzOTQwOTg4ODVFLTUsMC4wMDE1NTYzNzEyNTc3NzEwMDg1LDkxNTM5LjI1NzIwMjE0MjEKKzExLEZyaSA0IEZlYiAxMSwyLjI1MTM3Nzg3NTIxNjI5MjJFLTQsMC4wMjU2ODY4NDc0Nzk5NTU5MSwwLjAzNjc5OTg0MDcwMzc1MTA4LDAuODI0NzU1Mzg1MTcxNjMyOSw3LjMyMzI4MTM2NjM0NzMzOUUtOSw0LjI3MjIwNTAzNzM4MDI3NUUtNyw2LjIyODA5OTM1NDcyMDM1RS01LDAuMCwxLjA0ODk2NzA2MTIyNDY0NTRFLTE0LDYuMjI0NTkzNjAwNjEwMjUzRS05LDguOTI4MzE0ODY0Nzk5MzgzRS0xMywxLjkwMTUwOTgxMTkwNzY4NjJFLTUsMC4xMTM2OTk5MTUxNzU5MDgxMywyLjE1MDE3ODMzNzEwNTQxMjNFLTksMS45MjMwMjE1ODI5NTgzNzkzRS01LDMuNjI0MzY5NDYyNDg2NTA3NEUtOSwxLjMxNjU2Njk5NTQxMzkwMUUtNywzLjM1Nzc3NDE2ODU4MDU3M0UtNyw3LjQ2OTUwODk3NTA2MTE5NEUtNywxLjY0MTczNjY4NDQwMjIwMDZFLTUsMS42MzE0NTk2Njg5ODU4MzdFLTUsMC4wLDAuMDE2ODg1NDE4NjU5NTY5NDA1LDExMy43MjAyMjgwNzU1NTE3NywxMjcuMzU4NTQ1MTk5NTcyMDUsMjUyLjEyMDkzNzg4NzQ4MDUyLDUxLjQzNzEzNDcyNDgxNTM5NCwyMTgyMzMuNzUxMjIzNTE3NywyMDg1LjcxODE2NjEwOTcyOTMsMzYzOTMuNjExMTc5NDE2NzUsOTIuNzk0MzcyMTU5ODgxNzUsNDYuOTg0NjQ4NDU2MTEzODYsNDMxMi44NTY5MjQzNjgwOTIsMTM5NC4wNzU0NDI1ODA3MTc0LDExOTYyNC4xMzg0MjgzODkxNSwxMzkyOTQuNTI3MDA3MzIzMTcsMC4wLDAuMCwwLjAsMC4wLDM0Njc0LjMyOTUwNTI1NTYwNiwxNDk3OTguMjg1NTAzODg5MjMsMC4wLDAuMDAzMTUwNDUwODQwNzM0MDc0OCwxMi40MTkxMzQxNzkzMjU0NCwxMi40NTE4MjQwMzMyOTkyOTYsMC4wLDAuMCw5LjYzOTIxODIyOTg2OTk2NkUtNywwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwyOC44NTg3MTM1NjI2ODE0OTQsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDEuMDQ5MzI2MTEzOTI3MjczMUUtMTQsNC40MzU3Mjg5MjA5MTEyNjVFLTEwLDkuNzM4Mjg1Mzc5MTI0NTg0RS00LDIuMzE2OTgzNTMyMDExNDkxMywzLjE1NDQ4NTk2MzIyMzAzMywwLjAxOTI4MTI0Mjk3MjEyMjI0LDAuMjE2NzQ0MTc5NTAyNzI0MDcsODM4NDg5Ljc1ODExOTM0MTEKKzEyLFNhdCA1IEZlYiAxMSwwLjA3OTcwMDMwNjA0ODE4MDc0LDQuNTUxMjI3NTgwMTU2NzUsNi40MDYxNjM0NjY3OTEyMSw1OC4zOTQ3MDY4MjQ2NTQ5MywxLjg0MDgyMjQ1MDY4MzI4MjZFLTYsNy4yOTc1MzQzMTE3NjE0NTVFLTUsMC4wMDUzNzEzNTM3MDM1MDc2MiwwLjAsMS41NjEwMTYwMDUxMTEwNTc2RS0xMSwxLjMyMjc3OTY4OTU1NTI1NzhFLTYsNi41ODY2MDY3NTI3NjEyMjlFLTEwLDAuMDAxNzAwMTQzNzU2NTEwOTczOCwzLjczNzE0MjAzNDQ2NDkxNiw0LjU4OTk5MDk4MzgxNjIxNDZFLTcsMC4wMDE3MDMwODc0OTcwMDE0Njg1LDEuNTAwMjU1MjI4NzI3NDU1OUUtNiwyLjM2Mzk5Mjg3OTY2MTk3NzNFLTUsNS44ODU3ODIyNDQ5OTc0MzFFLTUsMS4yOTAwNzk2MjE5MzAzMTQ2RS00LDAuMDAxNDI3OTcwODQ2NTM3NDk0NCwwLjAwMTM5MTY5MDE5MDE4Nzg3NywwLjAsMS40Mjc4NzgzNzg3ODY5NjcsNDUwMC4zODgzMDAxMzAwODIsNDYyNy4yNzUwMDUyNDA4NDcsNTQzMS40NzAyMzgwNzAxMDUsMjA3NS42OTQ4OTE5MDMzNzU3LDY5Nzc4Ny4wODQxNzE0MzcxLDU0MjI0Ljc3MjA0NjgxODkzNiwyNDg0OTAuOTQ1NzM5NTE5OTMsNDcyNS4xMDk4NDk0ODc2OTgsMTkzOC42MzM2MzIxMjE4NTA3LDI0NDg0LjEzMjA3NDg2NjA0LDM1MTI0LjA2MTk5NjQzODc0NCw0MDEyOTIuMjM2Mzk4MDg4NzUsNTAwMjk3LjI1NzM4MTIxMTQ0LDAuMCwwLjAsMC4wLDAuMCwyMjMxNTcuNzczMzA0MDA0OSw0MzA1NzcuNzU1NTgwMjg3MiwwLjAsMC4yODczNDc1MDY1ODg0NDYwNCw1MTguNzY0MDgzNjMyNDYyOCw1MjQuODU0ODQ3Mzk5MTU5OCwwLjAsMC4wLDEuOTAyMjcxNjg2NDQzNTg2M0UtNCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCw5NDcuODQwMTk4MTYxNDU5NywwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMS41NjE4MTkyMTE4MjkzOTU2RS0xMSwxLjkzMTU4Njg2MTU1MjczMTVFLTcsMC4yNDQyNzU2MjYwOTUyODE0MiwxODguOTE2MjY4MjI3NjU3NzIsMjUwLjkwMjk1MjUwNDc1MzEsMi4wMDU5NzgyODI0MTI0NTYsMTcuMTY0ODM4ODE3NDg3MiwyMjYwMjA3LjEyMTYxMjQxNzUKKzEzLFN1biA2IEZlYiAxMSw5LjI1NjkwOTUzMjEwNTYzLDMyOS4zNDM2NzUxNTg3MDEyLDQ1Ny4yNDk1MzkyOTY2MjkwNSwyMDc2Ljc3ODA1NjQ5NjY3MSwxLjg4OTI4MTYyNzYxNjY4MjZFLTQsMC4wMDU0MzEwMTU5MTgzNTQ2NjA1LDAuMjM4NTQwNTI3NTIxMzgyNiwwLjAsMy43MDE1NTQwMjc3OTExNDM1RS05LDEuMjM3ODkzMjI2OTQwNjE2NUUtNCwxLjI0MTE3NTQ4MDkyMjcwMjRFLTcsMC4wNzkzOTIwMzY0MjA0NTIyOCw3OC44NDUxNjU3MTc1NjAwMSw0LjI1MzI2MTMyOTk1MDAyNUUtNSwwLjA3ODUxNTYwMzM5OTkxNjgsMS45MDA5OTA2NDU2NjI0Njk2RS00LDAuMDAxODYwNTUyOTU4NjYxNzgxNCwwLjAwNDUxMTEzNDI5ODg4MzYwNywwLjAwOTcyNDg2NTMyMjI1OTU2NCwwLjA2NDMyMzYxOTM2Nzg1Mjk1LDAuMDYwOTQwNjc1OTE5MTExNDYsMC4wLDYzLjQ1NDk5NjI3MzMyNDUwNCw2ODM5My41OTAzNjQ2NDYxNSwzNTUxOS4zNzE3MTQ4MDM2NiwyMzA4MS41Njc5NTIwOTY3NTcsMjk1ODcuNjQ2MjQ3NjIxNTgyLDEyNTM3MjYuNzA1MzA5MjM4MywyNjc5MjcuNDU2MjM0MTQwODUsNTcyNzI3LjMwMTU1MTMzNjIsNzA1MDYuMDA1OTE2MzU2NDksMzA1NzMuNzU4ODMzMzU1MTk4LDUzNTA5LjYyMzE2MjM2MDE2LDIzNjA3NC4xMzg5NjIxMTc3Miw3MzM0NTMuMjUzMjg0MzM5OSw5MzYxODEuMTk2MDA1NTU1NSwwLjAsMC4wLDAuMCwwLjAsNTAyMjU3LjE2Njk1NzU4NzcsNzQzNjIzLjAzMTU0NzU0ODEsMC4wLDEzLjYxMzI0Mjc5NjY2MDk2NiwxMDQ4OS4zOTkyODA1MTUxMjcsMTIzMDMuMzAxNTU2OTA0ODI0LDAuMCwwLjAsMC4wMTU2MjE1NjQ5Njg1OTc3MjYsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMTkxNjAuNTkwNTE4ODg5NTg1LDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwzLjcwNDE5MDI2OTE0MTE5NzVFLTksMi41ODExMjI2MDQ1MzI2NzdFLTUsMjMuNTk2MDUxMTQ0NDIyMzgsNjQ3Mi40NjE5OTIyMTcwMTcsNzA2MS4zOTkwMzA3MDk1MzIsMTA4Ljc0NDgyNjU3NjQ5MjM3LDY2NS4xMTc4MTUyMjc1NTEzLDM4MDg3NzEuODQ4Mjc1NzE3MworMTQsTW9uIDcgRmViIDExLDY4MS4zOTcxMDMyNDg3Nzk2LDExNTMwLjc4NzU4NjM3OTc5NiwxNDk3MC4yMTA3MDkwOTQzNCw0NjIzNi42MjUyNjc5MjUzMTYsMC4wMTM5NDEwOTE3MDQwNjkxNzIsMC4yOTM5MDk5MTEyNzk3MzIzNyw4LjcyNzgzODExOTc0NjMyLDAuMCw1LjE2NzcyMjk5NjQ0Njg2MkUtNywwLjAwODczNDI5NDM1MTI0ODYyLDEuNDg4ODk5MTc1MTk4NzAxOUUtNSwzLjA5MDYwMTIwMDU5MDg4NSwxODc0LjgwOTE4NTMwNzgwMzUsMC4wMDI5Mjc1MzcxNDM0Njk3NzU2LDMuMDEwNjU0MjIyMzY4NjcyLDAuMDE1OTczNzc4NjE1Mzk2NzE0LDAuMTA3OTExNzYwNDY0NDczMSwwLjI1MzM1MjQwMjg4NzIzNjMsMC41MzUwMzY3MjkzMjAzNTY1LDIuNDA1MjU1MzQ1NzIzMTIsMi4xOTcwOTEzMDkyMDY1NDYsMC4wLDE5MTMuMDMwNjYzNjc0NzY2OSwyNDk2MDcuNzkwNTQxNTcyMzUsODY2MTYuNjQwMzM4NTMxMjIsNDYwNDQuNDY4NTA4Njk1ODgsMTAzNTIyLjU1MDU1NzMyNzUzLDE3Nzk1MjUuNTAxOTIxNDMsNTU5OTQ4LjMwMTgzNjU4ODMsOTA5NDAxLjUwMDg3MTUwNjMsMjMxODY5LjcxNDcwOTY1MjQ0LDExNDgxMy43NTExMTU1OTI0LDgzMTE4LjQyMzg0NTM0NzY2LDU1Njc4Mi44NTY1Nzg3NjE2LDEwNDk3NDkuNDQ3Mjg4NDg3MywxMzU1MDUzLjU0ODg5NTEyODUsMC4wLDAuMCwwLjAsMC4wLDc4OTM1OC44NjU0Njk2MTg4LDEwMzQ5NTAuMTczMDc2MTUzNiwwLjAsNDk0LjM2MDYzNzc3ODQ5NjQsNjAzMjkuODI0MzYwMzUzNDgsMTI4MDg4LjAyMDkzOTA1ODM5LDAuMCwwLjAsMC45MzU2NDUzNTgxOTM4MjY4LDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDIyNDc3OC40NzM1MzgwNzQxMiwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsNS4xNzI2NDk1NTMxNjA1NjRFLTcsMC4wMDIzMTQ1MDgwNDI3MDgxNjkzLDEzNzQuMDk5NTk0OTUzNDA2NSw1NjkwNC4yMzA1OTkyNjgxMiwzNTkyOC43Njc3NzI4MjI2LDM1ODAuMjMxMTQ4ODA4ODMxLDg1MTYuMDA2NTAzMzk1MTMyLDUyMzU2NTIuMTQxNDYwMDQKKzE1LFR1ZSA4IEZlYiAxMSwxNjc5NS4xNDg1NDYwNDI0MTYsNzYyNDkuMjg3MzgwMzc2NjQsODgyNTMuODgyMzM2MDQ0NDgsMjkwNDI3LjE3NDU1NTUxMiwwLjYwMDM5NzkyNjQyODU2MjQsMTAuMDI3ODYxMTU0MDU0NDgsMjMwLjM0NTU4OTE1Njg4ODQyLDAuMCwzLjQ1NzQ3OTM0NTMwMjUyM0UtNSwwLjM3NTMxNjAwMTk5NDQ5MzUsOS4wMDQ3NzI3NzY0MDQxNTJFLTQsODYuNTEzMzA5MTQ2OTM1NiwzMzkyNS40NTI2NjE3NjYxOCwwLjEyMTk3Njc1MDg3NTk0MTIzLDgzLjE2MzAzNzgwMDU5MzksMC43Mzg0NDM5Njc0NTk0MTYzLDMuOTIzMjQ3NjM5NjYyNzI2Nyw4Ljk0Nzk0OTcwMjU5MzIxLDE4LjU0NDkzNDM3ODk3MDUwMyw2NS4xMDMzMzU2NzIzMzU5LDU3LjM5NTA5NzE5Mjg3Nzc1NiwwLjAsMzE5MjYuMTE2MjQ0ODM0MzUzLDQ3MTkwNC41MzU3ODA5Njg1LDE0MDg2OS43NzQxMDgzMDMxNiw2ODc0NS41NDUzMjgyMDI3NywxOTI5MDguMzkyODE1ODU5NjcsMjIzNDAwNi4wOTIzMDY5NDgzLDg1MzI3Ny4yNDc1NzA0ODQyLDEyMTQwNjQuMzI2MTI4ODM5LDQyMTY4MC4xMDcwMzk3NTQ5LDIxOTEyNy40NTc0OTIzOTE0NiwxMDk2OTIuNTk3NDE1MjcwOTgsODk0MDEzLjY1NjkzNjQzNDQsMTMyNDExOS4yOTExNzI0NzMyLDE3MjAxMjMuMjk4NzIzMzM0MiwwLjAsMC4wLDAuMCwwLjAsMTA0ODA0NS4wMDE1ODA3NzM5LDEyODQ2MDIuODAyOTE0MjQxLDAuMCwxMDU2NS44MjMwNDgzNDIzOCwxMzM5ODYuNTMxOTYxNjA3NTQsMzcwMTU4LjMyNjIwOTkyNDY1LDAuMCwwLjAsMzMuMzkzNDA3MTYwMzQ0OTY0LDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDcxMDU5OC4wNTQ2MjM3NjIsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDMuNDYxNjAxMDg3MDk0NzQ3NUUtNSwwLjExMzg3NTIxOTgwNjQ2MzY5LDE3Mzc1LjIzOTAyNzg3ODQ0NCwxNDgxNTguNDE1OTUzMjgzMzEsNzU0MzkuNTg1OTk0NzY4ODYsMjk0MTYuMjU4ODU2NjE3ODgyLDI2NTYyLjQ1NTEyNTMyOTIyMyw2NDUxOTI3LjA5NzU3MzQ4MQorMTYsV2VkIDkgRmViIDExLDc4Nzg2LjA2MTk5NDc1NTQsMTc3MTE2LjE3NzQ2OTgxMTM3LDE5Njc3NC45NjIzNzEzNjA5OCw2NzM2NzIuNTMzNjEzODIxNywxMC44MTUzNDkwNTQzNDY3NzQsMTU2LjQxMzcwMjQ2OTcwNjksMzAwNi44NzU3NDQ5ODA4NzcyLDAuMCw4LjA3NzAyMjYyNTc0MzkzNUUtNCw2Ljg0MjM1ODg4NzAwNDg5NywwLjAxOTgxMTQwMTQxOTAxODUyLDExOTMuMTY4MTM3ODU5MjA5OCwyMDcxOTQuNTQwMzcyNDk1MjUsMi4xNzA4ODcyODczNzg2MjIsMTEzNS43Njk4OTQ3ODQ2MzksMTMuNzg2NTYxMzQ2NTYzMTg2LDY0LjAwODY5ODg3NTM2MDA3LDE0My4wNzA0MTQwODAyODU5OSwyOTIuNjMyOTA1MzE1NDY1Niw4NzUuMzgzODk1MzgyMjk0Nyw3NDcuODI3MDc0ODMzNDE4LDAuMCwxNTA5NzEuMzA2MzE0NjQzNyw2OTA3NjAuMjc1MDI1ODM2MiwxOTEzMjQuNDgyNjIyNTQxMjgsODkxNzUuODcwNjE2ODczOTIsMjgwNDUwLjUyMjgwMjY3NDg1LDI2MTQ1NzEuOTY2NjExNTgzMywxMTE5Mjg1LjEwNzk1MjI1ODMsMTQ3NTk3Ny45MzUzMzkzNDQsNjA1Njk2LjQ2Mjk3NDIzMjksMzIyMTY5LjAzNzAyODA1MzQsMTMyNDMzLjgxNDE3MjkzMzg0LDEyMDYzMDEuNDEyMDIxMDMxOCwxNTU0MzUyLjc2MTc2OTUwNDgsMjAyNzMyMC40MzkwMTMxNjQ3LDAuMCwwLjAsMC4wLDAuMCwxMjY5OTAzLjY4NzM3NzY0MSwxNDkyNTc3LjE2ODc3MDY5NiwwLjAsODIzMDMuNDI5MzAxNTE4NjgsMjEwOTM3LjMxMzc4MzExMTA4LDY0NzkzMy43MjI2ODU1MDQ2LDAuMCwwLjAsNTExLjg4MTI0MjI2MjAwMTYsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMTI4NjcyOC4wMzYwMTgwMjE2LDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCw4LjA4ODA3OTc2MzA4MjUxN0UtNCwyLjIyMjg1Nzk5NTU0NzY4OSw1MDc0NS4zODUyNzk2Mzg5MSwyNDg5NzguMTk0NDU1NjkwNTcsMTE1Nzc5Ljg4NDE2MjMyNzk3LDc1MjU3LjQwNTg0NTE5MTY2LDQ3ODMzLjg4MTMxMDQxMzExLDc0NjE5MzUuODUyOTQ5NjY5CisxNyxUaHUgMTAgRmViIDExLDE2NzQ4Ni4yNDkwNjczODEyNiwyODg1ODcuNDYxODQxMTkzNDQsMzE0OTI4LjI4NjY1Mjk1NjU3LDEwOTgxMzcuNzc2Mzc1MTgzMSw2MS40NzI1MjQ4NDgxMTA3Myw4MzYuNjY2Mjk5MzQ1OTY1MSwxNDU5MC42OTQ4NDc1MzYwODQsMC4wLDAuMDA1MDgyMDc4NjA2NTk4MzU4LDM5LjE3NTYxMjc1NjU4NTQzLDAuMTIxNzczMjM3ODcwNzE0NCw2MDA3Ljk1MTU1MzM1MDY3MSw1MDcxNjguNDUwMjEzNjI5MiwxMi4yOTg3NzA5OTU2MDM5MSw1NjkyLjA1NjAwNjc0NDM5Miw3OS40MDk1MjY5MDM3NTQyNiwzNDkuNTI2MzEyMzMzMzkyMyw3NzQuMTI0NjcxOTE4NTYxNiwxNTczLjg0NzA0NjY5MzA4Myw0MzQ4Ljc0OTg1NjE5NTE0MiwzNjQzLjc3NjM0OTcxNTI5NTUsMC4wLDMyNjc4Ny4xNDA4MDEwMTgxNiw4OTQ2MzAuNzAzMTg1ODc1OCwyMzY5NDIuMTQ1MDAzNDc2MzMsMTA3MzEwLjUzMDY5ODkyNjc3LDM2MTc4My41Nzc4MTg0MTgxNSwyOTM3ODMxLjk2OTIzMTE0MjcsMTM1NjQzNS4zNzY1MDA2OTg3LDE3MDIxODYuNTYzMTQ4NjQ3Myw3NzU3NzguNjQ1MDgxNzIxOCw0MTgzMTUuMzAwOTg4MTg5MiwxNTIwMTkuMjQxMjkwNTMyMTcsMTQ4Nzk5MS4zMzkyMjE5OTEsMTc1MDE4NC40NTU0NjM3MjM1LDIyODkwODQuMDI1ODI4MTIyNiwwLjAsMC4wLDAuMCwwLjAsMTQ2MTIzNS41MzM1MzU0NjI2LDE2Njg2NDMuNTk5MDE0NzgxNCwwLjAsMjM3MjQ2LjAwNjk5Mjg3OTEyLDI4NDY5MC45ODM0MTU0ODkxNCw5MjUxMjIuNjg4MzU4Njg3OCwwLjAsMC4wLDI2NjUuMTY4MjY2MTAwNzk1MywwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwxODY5MDQzLjg5NjA2MzE4NiwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wMDUwODk0MTg2OTg3MzI1MzQsMTMuMDUxNTMyNjAzMDgwMDk4LDkwNjIyLjAwMDYwNzQ0NDA5LDM0ODAyNC4wMjU5MzM0NjU0LDE1NDAzMS4zNDg1MTI5NzI2LDEyNzgxNy4zNDI5NzYxMDY4Myw2OTI4Ni4xNDc4Mjc5MTM4LDgzMTUyMzUuMjg3NjMzMDQ2NQorMTgsRnJpIDExIEZlYiAxMSwyNjQ5ODEuMTA1NzEyMTg5NywzOTA3ODYuODQwMzA3MjkwMjYsNDIxODMwLjc2MDUzMTE4NzgsMTQ4ODA0MC41NzQxMDAyOTExLDE2MTguNjk0MjE2MjUyNjI3NSwxNTMwMy42NjM3NDY0NzM4NzQsMTIxNjY5LjgyMjE2MTYwNTgzLDAuMCwwLjE4NTYwMDM3MjgxNzExMTY3LDEwODAuMjEwMzc3MjQxMjAyOSw0LjE0MTk1NzY4ODkxMDgxMSw3ODU2NS43NDExMzA2MTI3Niw4NzAxNjguNTU0OTkzNjIxLDMyOC41MzU3NjUzNDIzNzcyLDc2MjE1LjM1MzUzMTA0NDM4LDIxNDkuNzExNjM3MDE4NDczLDc2OTcuNzUzNDI2MzMyMzIzLDE1NjAwLjAwNDQ3NDI5OTgzNiwyOTIzNy42OTYwODczMDg3Myw1NTM1OC4yNzI3MTMyMTQ3MywzODg0NS45NTMwNjk4ODUxMTYsMC4wLDUyMzQzNy4wNzA2NDk4NDY5LDEwNTExMTIuNzQ1Mzg5NjM0LDI3MDY0Mi43NTU1MTY3NDA1NSwxMjAzNzcuNzg0MDY2MjgwNTgsNDI0MDA3LjAyMzM2NDU3ODMsMzE1NjI2MC4yMTIwNjI5MjMsMTUyODM0Ny44NzQzMzc3MTk1LDE4NTg5MjYuMDI0NDYxMzMwOCw5MDUwNTguMzk0NDQ1Njk5NSw0OTIyNjUuMDY5MTc0NzE2LDE2NTUzMy4wOTcxOTY2OTcxNCwxNjk1NDQ3Ljk5ODMxMjgxNDQsMTg4Mjc4Ni45Nzg3MDg3MjI0LDI0NjY4MTcuOTM3MDE0NzU3LDAuMCwwLjAsMC4wLDAuMCwxNTkzNTIxLjI3MTk5NTAwOCwxNzg2OTk2LjYxMzI3NTY5OTgsMC4wLDQ0MzQxNi45Mzc0MzUzNTUxNSwzNDMyNjkuNzExMTAwMzI2MiwxMTU1Mzk2LjEwNzI1NDg5NzIsMC4wLDAuMCwzNTcwMS4zNTE3Mzg3ODg5MiwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwyMzU5MjI4LjcyMTQxNTE2NCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4xODU5MTU3NTEwOTYzNDcyOCwzODkuMTIwODUxNDI1NTk0NTQsMTI5NTgzLjEzMTY1NTAyNDU1LDQyODkyMS4xNjMxMTI1OTY0MywxODQwMzEuMjg4MjE4MTQ0MTUsMTc3NTI2Ljc2ODk3NTkxNTE4LDg3MzA3Ljc1ODE2Mjg0Mjc0LDg4ODcwNTguNzc3NDI3MDgzCisxOSxTYXQgMTIgRmViIDExLDM0NjgyMC41OTI2MzQyMDM0LDQ3MzI3OS41NDE1OTMwOTM5LDUwNzg0My4wMDAwOTE1NDQ3LDE4MDI5MDQuNjAyOTQ5NTM5NCwyNjc3Mi44OTA3OTc5Nzc3MSw4MDQ4MC4wMTQ2MjYwMjg2NiwzMDM3NjYuODg1MzMwOTI4MTQsMC4wLDguMTQ1MjE0MDE0MTMzMTE0LDI2MTY5LjU0NDQxNTI4NzQ0OCwxNTkuMDYxMDEwOTUzMTE2NDcsMjgzMjgxLjg5MDc5MjcyNzEsMTE4MDI3Ni4wMjQ2NDE3Nyw3OTE2LjExNDkxNTUyNTA3OSwyODk1NDUuNjM4ODgyNTU4MiwzMDk2NS40NzI2Njc5NzE1ODYsNjg4NjQuOTE5MTg5OTQwMzUsMTAxMDEwLjY5NjY0NzM1NTgzLDE1MTE4My4xNzA2MjkyMjQwNCwyMDE4MjQuMzQ2NzM2MjQ0NTcsMTE5OTUwLjA2MjcyMDc2OTE2LDAuMCw2ODkwNjEuMzI4NzI1ODA0MywxMTcxNTA0LjgzMzE5NTc4MzcsMjk2MjY1Ljg2MDgwMjI5NzU0LDEzMDIzMy40MTUwNjM1NjgzOCw0NzE4MzIuMjQzNjQwNzIyNSwzMzE3NDE2LjU0ODg1NTMyNjYsMTY1ODI2My4wMzMxODgxNzE1LDE5NzU1OTMuNTg2NTgxNTMyLDEwMDQyMjcuNTA2NDQ5NjYzNCw1NDkxOTQuODg0NTgzNzg2MiwxNzU1NzcuNDUxNDUxOTgwMzMsMTg1MzAyNC44ODU3MDA5NjMsMTk4MDY5NC40ODM5MjE2Njg1LDI1OTgxNzYuNjEyODE4MDc4NiwwLjAsMC4wLDAuMCwwLjAsMTY5MTkxMy41NTMyNzg5NTA1LDE4NzQxNTQuOTk3ODE4ODYyOCwwLjAsNjIyMjk3LjgwOTk0MjYwODUsMzg4Nzk1LjM5NTc4ODc5MzIsMTMzNjYyOC4yMzY4Mjk5MjAyLDAuMCwwLjAsMTI4Mzk5LjczNjY3NjY1NjAyLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDI3NDYzMDkuMjY2MjY5ODE3NSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsOC4xNjIyNzkyNDUwMjMzNjUsMTIwNTYuNTAyOTE1MTc0OTMxLDE2MTQ5OC40MDYzNDMwMzY2OCw0OTIyOTIuNTUwMDU4NzMxMDUsMjA3MjYwLjgxNzExNzE1MjI0LDIxNzk0Ni42OTQ4MDEwNjcsMTAxNTM0LjI3MjYyODExOTI3LDkzMDc3NTEuMDk2Mzk0NDc3CisyMCxTdW4gMTMgRmViIDExLDQxNDE5OS4wOTEyNTcyMjE2NSw1Mzk2NDguNDI4Njg2Mzk1NSw1NzY5MDguNDE1NDI1MTY5OSwyMDU2Mjk2LjY4NTAzNzQwMjIsOTY4MTIuODcwNjk5ODAwNDYsMTcxODQzLjY2MjU4NDg5MDMyLDQ5NzA3OS45MjM3MzMwMTEwNiwwLjAsMTQ1LjY0NzU0MzkyNTk3Nzk3LDE0MjY3NC45NzczMDg0NzAzNSwyMzMwLjgxODkyNjQ0NjE5MDcsNTMyMjEwLjIyNzQ2MDgxNDYsMTQzODEyMS4xMzY1OTAxOTQ0LDQ5NzgyLjQzNTI3MDA3NzM0NSw1NTQ0MzkuMTU4NzE3NTE0NSw5ODY0Ny4wNjUzNzQzMTg0OCwxNzk1NzUuMzczNjAwMzIxMjQsMjMxNzAwLjQ5NTA2MjIxNzMyLDMxOTc5Mi4zODc4MDMzNDk0NywzODEyMDAuODAzNjgyOTIwNSwyMTM0MTguNzc4MjI5NzE0MywwLjAsODI1Njc4Ljg4MjE3MjYzODIsMTI2NTQ3Ni43ODI1MzA5MzIsMzE2MTA5LjcwNjUyMjAzNjQ2LDEzNzgyNC44NTYzNTg5MDksNTA5MTM3Ljg4NDI3NDM4MDYsMzQzOTY3NC45OTM5Nzg1NTI1LDE3NTg0NjUuMTM2MDgxNDI4NywyMDY0NjQ5LjAxNzIwNjkyNCwxMDgxNDgzLjA1NDg1OTIzMDUsNTkzNjQ5LjQ5OTI5NjEyNjcsMTgzMjM2Ljg2NDUyODY2MTA0LDE5NzQ5NzkuODA1Njk0MjM4LDIwNTUwMDkuNTAwNzI4ODI3LDI2OTc5NTAuNjMwNzg5NTc0LDAuMCwwLjAsMC4wLDAuMCwxNzY2OTgwLjEzNDczNjMwMDIsMTk0MDE4OS40MDcxMjk5Njg1LDAuMCw3NzIzMDEuMTkyNjA4MjA1NCw0MjQ1NjQuNjEwOTYzMTk0MzQsMTQ4MDE3Mi4zNTY2MzMxODU2LDAuMCwwLjAsMjQwOTYwLjI3ODY3Njk2NTk3LDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDMwNTM1MTUuNDUyNTg2MjYyLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwxNDYuMDg0NjM2NDM2ODc2MDUsMTE5NDExLjYxODU1NDU3ODg5LDE4NzQwMy41NDY4NTExMzE0NSw1NDIzMzYuODA3Mjg0NDQzNCwyMjU0NjguNzEzMDg0MzM3OCwyNTA2MTAuNjUwNzQxOTgyMiwxMTI4MjMuODM1NDg5MTE4NjYsOTYyNjI4My4xMzI2Njc0NzMKKzIxLE1vbiAxNCBGZWIgMTEsNDY3NjQ0LjI4NzQ1NDk0NTEsNTkxMzA3Ljc3NzYzMzMyNTUsNjMwNTc4LjY1NTA0NjYwMjQsMjI1MzU3NC42ODQzODcwOTUzLDE4ODc0NS4xOTY0MjkzMzA3LDI2ODMzNy40NDIxOTUxMDE0Nyw2NzgwMzkuMzM1MTY5OTQxOSwwLjAsMTQ0Ni40MDk0Mzk1NTUwNDI0LDMyNzQzMC4yMDY5Nzc5ODMzNSwxODg4MS43ODQ2NzcxNDU3MSw3ODA4MzIuNDE3ODEzNTkxMSwxNjQ0MjU4LjU5NTI5NTYzMDIsMTIzNTIwLjg0ODEwNDc5NDg2LDgyMTM3My4zNzg1ODE4NTU2LDE4MjY2OS4zNDU1NTExMjA3MywzMDY3MjguNTEzODUwNDg1ODUsMzczOTU2LjU3Njg4NjE0MjcsNDk2OTcyLjIwMjY5NDA4MTkzLDU2MDkwNy42MjUwNjI2NDY2LDMwNDU1Mi4zMzY5MzcwNTM5NCwwLjAsOTM0MjA5Ljk1NDEyNzk1NywxMzM2NzM5LjgwMTAzODcwNywzMzEwNTMuMjQ4ODUzMzQxMjcsMTQzNTEzLjcxODUyOTUwOTczLDUzNzQxMi4wNjExMDM2NDQ5LDM1MzAwMTcuNDE2MjQ3NjAzLDE4MzM2NDQuOTc4NzE4MjU5MSwyMTMwODM0LjUyMTY1NTE5NCwxMTM5OTY4LjAzMjIxMzgxNTcsNjI3MzczLjUxNTY0MTAyNiwxODg5MjQuMDA0NDkzNTk1MjgsMjA2Njc2NC4xNzU1ODg1NTIsMjEwOTk1MS4zODIxNDQwNTA3LDI3NzE3NjEuODkyNjM1MTg2NywwLjAsMC4wLDAuMCwwLjAsMTgyMjc0Mi41MTc5OTExLDE5ODg5MjUuMzM4NTMyMTI4LDAuMCw4OTMwMjMuMzcxMzE3OTkzMiw0NTE4NDcuMTk2MTkyNzg4NywxNTkwNDI3LjAzODc4MDA2NzgsMC4wLDAuMCwzNTMzMTQuMzk3MjMyNjUxMzYsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMzI4OTg3MS40OTY3Mjc2ODgsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDE0NTQuNjQ1NTcxMzU0MTA2LDQyMTUzMy41MzkzNzEyODcxLDIwNzcxNS43MzU2ODM3Njk0OCw1ODA2NzYuODE3OTU2MjQ2MiwyMzkzMjcuNjUyMDQ1NDQwOCwyNzYxMjkuMjYxMzI5OTcxNTQsMTIxNTA5LjQ2MTY2OTE3MzgsOTg2MTI0OC41MDM0MDQ5MzYKKzIyLFR1ZSAxNSBGZWIgMTEsNTA5MDIyLjc1MzAxNDQ1OCw2MzA3MzAuNzQwMDQ5NjIwNyw2NzE0ODQuMDQxNjQ1NzY3OSwyNDA0MTUxLjMxNTY4Mjg2NiwyODEwNzYuNjUyMzA0OTMzMzUsMzU3MDE2LjQ3NTYxOTg2MTcsODM0MjA2LjM1NDAxOTEyMzQsMC4wLDEwNTQyLjY4MTgzMDM1NjMzOCw1MjQyMDAuMjI2MTAxNDM1MTQsODAxNTkuNTUzODc4ODU1MjcsMTAwMzA4MC41NTQ1NjEyNzQ2LDE4MDQ3OTIuNTAxMjg1MTUwMiwyMDQyOTAuOTk1MjM1Nzg4LDEwNjEwODQuMDE1OTQ5NTExNywyNjUzNjQuMzI4OTc3ODM4NzQsNDI4MDUwLjU1MjE2MjQxODQzLDUwNjUzOC40Njc2Mjc0MTkxLDY1OTQxMC45ODQyOTczMTY1LDcyMTgwNS40NzU5MDA2MTQyLDM4NDk5Mi45MDU4NTA3NzgxNiwwLjAsMTAxODMzMy4wMjA3MDk4ODgzLDEzOTAwMDcuNzkxMzk4MTAyNywzNDIxNTkuNDk0OTQwMTc2OSwxNDc3MjQuNjUzMjU3MzI3MjQsNTU4NTM2LjY0MTU2NTU2MjgsMzU5NjEwNC4zNjExODAzMjM2LDE4ODkzNDkuMzU1MDY0Mzk1LDIxNzk0ODYuNTAwNjA2MzEzLDExODM2MjMuMDM0OTE2ODg1LDY1MjU4OS4wNzkyMjg4NjgxLDE5MzEwMS4yNDgxNjYxMzU5OCwyMTM0OTQ2LjEyOTAyNDAzODYsMjE1MDE1OS4xNjE2ODA1MzE3LDI4MjU4MDguMjMwNDE5NzY0OCwwLjAsMC4wLDAuMCwwLjAsMTg2MzcxNi4wMjczNjA4Nzc3LDIwMjQ1MzkuMDM2NDMyNDE3LDAuMCw5ODc1MDAuMDg4ODA4ODM1Niw0NzIzMzYuMTQ4MjE5NjI3MTUsMTY3MzY5MS42NzQ1NjU2MzYsMC4wLDAuMCw0NTM3MTguNDkyMTAzODcwODQsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMzQ2ODU5MS43MDUyMTUxNjU0LDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwxMDc4Mi4zMDA5NTkyMTA5ODEsNzkwNjg2LjA3MjU3MzUyNDksMjIzMzA0LjY0MTQxOTg3NjU0LDYwOTU3Mi4xNzUyNzI4Mzk3LDI0OTcxOC4wNzYxNTQ0MjMyNywyOTU2NTkuMTA5MjI2NDYxODUsMTI4MDc3LjQxOTg1NjM4OTk2LDEuMDAzMjg4NDM1MDgxODQ3NkU3CisyMyxXZWQgMTYgRmViIDExLDUzOTI4NC4zNjMxODM4MzQ1LDY1OTE4NC4wNDE5Njc1NjY5LDcwMDk3Mi4zNDU0NjU5NDMsMjUxMjg0Ny40MDMzMTYyNDk2LDM2MjU2Ny45MDAzMTkxNjYzNyw0MzEwOTQuMDIyNDMyMTg1NzcsOTU5MDIxLjk0NzYxNjYwMSwwLjAsNTUwMzEuNDM1NTkxNTkzMzQsNzAzNTc0LjQ3NzI5NDk2OSwxNjc1NzIuMzQ5NjE3OTYxMjcsMTE4NTI2NC41OTE4MjA3NTk3LDE5MjI4MTUuODI0OTAxNzE0MiwyNzg5OTMuODAyMzEwNzk0NTMsMTI1ODIwNy41ODE0NDg5ODI1LDMzNzQ4OS4zODE2MjEzODIzLDUzMTg4MC4zNzEwOTMwOTMsNjE4MzE3LjA2Nzk4NTQyNzMsNzk0ODg1LjQ1NjM5NjU3OTksODUzODQ0LjE4NzcwNzIxOTUsNDUwMzQ2LjM0MjI3MDEwMjYsMC4wLDEwNzk5MTguNjQ1MzY3NzUwNCwxNDI3NzA2Ljc3NDUwNDczMTIsMzQ5OTc2LjAwNDM5ODY4NTMsMTUwNjc2LjUyMDI0OTY5NDg1LDU3MzQ4MC4yMDc4MDYyMTksMzY0MTg4OS4yMDg3MTY5OTkzLDE5Mjg0MzYuNjM1NDI1MjgwNSwyMjEzMzU3LjUyNDYyMTg5MTMsMTIxNDQ3Ni41NjM4NTUyOTgsNjcwNDM5Ljc2Njc4NjM3NzksMTk2MDA3LjExNDU3NjQ5NCwyMTgyOTA5LjE3NDUxNDA2OTcsMjE3ODAyNi44MDc0MTM3NjQ4LDI4NjMyODcuODU0NDgxNDc1NCwwLjAsMC4wLDAuMCwwLjAsMTg5MjIyOS44MTYwMjMzNTI4LDIwNDkxODUuOTU2MzI0MDUyLDAuMCwxMDU3MjYxLjc3OTkwMTIxNDIsNDg2OTAyLjA1MTUyMzI4MjgzLDE3MzMyMDEuODUyNDkxMjM1MSwwLjAsMC4wLDUzNjAwNS4wNDQyMzcxMzIsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMzU5NjQ2NS45MTEwMTY5MTIsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDYzNTY4Ljg3Nzk2OTI0MzI0LDExNDk5NDIuMjY2ODI3Mjg0LDIzNDYxNC43ODQ5MzM5ODQsNjMwMTg0LjAwMTAzMzk4NTMsMjU3MDkyLjg3MjkzOTc5NTksMzA5NzkyLjAwNTY1Nzk4NzY3LDEzMjc3Ny40MDAxODU4NzczNywxLjAxNTE2MzE5OTk0Mjc4NjhFNworMjQsVGh1IDE3IEZlYiAxMSw1NjIwODcuODQxMDU4MDUxNiw2ODA0MzYuNjA3MzYxNDAwOCw3MjI5ODAuMzYyMjcwNTExLDI1OTQwNDQuNzUwODg5Mzc1LDQzMDkyNy45NTEwMTM3NDQ5LDQ5MTUwNi40ODU5MzAzMTQ4NywxMDU4MzU1LjYwMzY4NzU4ODEsMC4wLDEzODE4OS45NjM0Njg3NDE0NSw4NTYzOTguOTA5NDM4OTgxOCwyNTQ2NDguODQzMjMzMTMxODMsMTMzMjMyOC44NDQ0NjY1NjczLDIwMTIwNTkuNzMxNDEyODE4NywzNDMwNjguMjQ1OTYxNjEwNzUsMTQxNzYwOS4wMjk4OTcxNjMyLDM5NzYzNy4yNTAzMjk4MDI2LDYxNzYzOS40MjAwMjY0NTUzLDcwOTkyMy41MTM1NDI4NzQ0LDkwNTI3My45OTI2MjY3MjM2LDk2MDQ5NC4zMDExODM5NjMyLDUwMjg0MS4xMTk4OTIwMDM3LDAuMCwxMTI2MzU3LjY4Mjk0ODQwMzMsMTQ1NTQ4OC40MjMyOTY0MjQ4LDM1NTcxMy44MDQyNTY2NTkwNiwxNTI4MzcuMjg3MDA5MjI2OTQsNTg0NDg5LjEzMzU0NzQxMzMsMzY3NTEyMi4xNDU3Mjk0MjM1LDE5NTcwNjguNTE3MDc1ODcwNCwyMjM4MDI5LjU4ODYyNzgzNjcsMTIzNzE5MS44OTc3NDAyODkzLDY4MzU5Ny4xMzgyODU4Nzc2LDE5ODEyMi41ODM0NDM1OTI4MywyMjE4MTA1LjEwNjA0NDQ0NCwyMTk4MjYwLjc0ODE0ODYwMTUsMjg5MDUxMS42MTI4OTE4MDIsMC4wLDAuMCwwLjAsMC4wLDE5MTI5OTMuNTM2NDU5Mjk5LDIwNjcwNjIuMTgzOTcwNTc4MiwwLjAsMTExMDE2Mi41NzMxOTI4MjM3LDQ5NzY2OS44MDA4OTQ0ODg0NiwxNzc3MzU2LjI1MjQ4OTk4MTcsMC4wLDAuMCw2MDI0MjEuMTY3MTE5NjUwMywwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwzNjkxNDA4LjYzMDMwNjYwNCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMTkyNDM3LjA5MjIzNTMzNDEsMTQ2NTEwNS42NzI1MTg3MDAxLDI0MzA5Mi4zNzg2NDAyODk5LDY0NTQ1Ni44NDY3NzQyOTksMjYyNTM4LjU0MzE0MTU3ODcsMzIwMzY3LjA5NjA0ODE3NjYsMTM2MjY3LjU2MzI2NjUwNTA4LDEuMDIzNzc0NzI5NTk3MzMyRTcKKzI1LEZyaSAxOCBGZWIgMTEsNTc3ODc5LjgzODUyMzQ4MTQsNjk1MDE4LjE1MzcyNTM1NjksNzM4MDY3LjM1MDM1Njg3MzYsMjY0OTc2MS41OTU4NzM0LDQ4MzMwNi4zNzcxMDE1OTQsNTM2NjcwLjQxNTA0MDc5MSwxMTMwOTcxLjc4MzI4MzEyOTMsMC4wLDIzMTczOS44MzkzNDk1MTYxNCw5NzUwMjcuMDc5NTAwNTg5MywzMzAzMTYuMjQ2MDE3MjkyMiwxNDQxMjYwLjY0MDMwNDQwNzMsMjA3NDA4Ni41NzI4ODQ2NTM3LDM5MzA3OS45NjYzMjIwNDY4LDE1MzU4NjYuODI2NTU0OTYyLDQ0MzQ5Mi4yMDMwMTIwNjU1LDY4MjQ3Ny4wOTA0MzgyMzI5LDc3ODcwNy41MTE3NzY2OTU1LDk4NzczNi4xMDY4NDkyOTk1LDEwMzk1MzQuNjkzODQ2MTU2OSw1NDE1NDguMzQwNjUzMTY3NiwwLjAsMTE1ODU0MC43NDcyMDU2OTM3LDE0NzQyNzQuMjI5MTM0MDA2NCwzNTk1NzcuMDQzNTI0NDY0MiwxNTQyODcuNTk3MTIxMTgyMiw1OTE5MzAuNzI1NDQ2NjU3LDM2OTcyMTguMTM5NzM3MTg5LDE5NzYzMDEuMTkxNzM3OTQzNiwyMjU0NDk4LjkwMjM3NjAzMiwxMjUyNTM1LjgzNDMwMDQzOTgsNjkyNDk2LjAwOTg5OTk1NzEsMTk5NTMzLjgxODg4NDc3MzUzLDIyNDE3OTMuNTQ0NDI4MjY3NSwyMjExNzE4LjYwNzEwOTM2NjUsMjkwODYyNi42Mjc4NTY4MzEsMC4wLDAuMCwwLjAsMC4wLDE5MjY4NDkuMzQ5OTgyNzUxOCwyMDc4OTM3LjQzNjQ4ODAzNTEsMC4wLDExNDcwMzguNDQ3MDY2OTUxMyw1MDQ5NzUuODIyNTI1MDA0MywxODA3NDM0Ljk5NjA5MTEzMzQsMC4wLDAuMCw2NTE2MTAuNzg0NjE4MjEyOCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwzNzU2MTI3LjQzNDA5OTk4MTYsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDM0NjY1OS4zOTQ2MTM0NzMzLDE3MTU1NjcuMjcwOTY0NjE3OCwyNDg5MzAuNjUxNzkyMTEzNjQsNjU1ODQ1Ljk3NTc1NjkyNDMsMjY2MjI4Ljk3NzUxMTU2NzksMzI3NjM2LjUxMzIyMDkzNjM1LDEzODY0Ny4yOTE4NTI4OTAyNSwxLjAyOTQ5NTA4NzY5NTAzOTZFNworMjYsU2F0IDE5IEZlYiAxMSw1ODg2MjAuOTgzNDQ3Mjc5MSw3MDQ4NjUuMDg1ODIwMzI0LDc0ODI0OC44NTAwMTA4NjQzLDI2ODczOTAuNzY0NzI3OTA1NCw1MjE1NTAuODcwMTU2OTY0Niw1NjkxMTguNjQzMTE0MDM2LDExODIzNTEuMDgyNjEyMjIzMiwwLjAsMzE0MDYyLjYyMDM3MDY3MjQzLDEwNjIzNjQuMDg4MDAyNjczOCwzODk3NjkuNTkxNjU2ODIzMywxNTE5MDM1LjY2NDM1NzMyNDYsMjExNjM5MC45MzE0NjAyNzgsNDMwMDI3LjIzMTA0MDI3NjMsMTYyMDM5MS42NjExMDI5NzU1LDQ3Njg2NC45MTM0OTU3NDk2LDcyOTQwOS4wMzczMTYzNTU2LDgyODI2OS45ODkyNTY1OTk5LDEwNDY5NTAuNzcwODczNTM4OSwxMDk1OTg5LjEyNDE4OTE2MTcsNTY5MDk4Ljg4NTYyMjY3OTcsMC4wLDExODA0NDIuMzcwNzg1NDA3MywxNDg2ODE1LjgwMjU3NDA5NDYsMzYyMTQ3LjMyMjY5Njk1OTgsMTU1MjUwLjA5MzIyMjA5Njk0LDU5Njg5Ny40MjI0NTg5MTk3LDM3MTE3NjkuNDc1MjIyMDM0NCwxOTg5MDcyLjkyMzkzODIxOSwyMjY1MzgwLjE1NzMxOTcwNTUsMTI2Mjc3MS4wMzc5NzQwMjM3LDY5ODQzOC4wMDIwOTcwMzI1LDIwMDQ2NS43MzI2MjIwMzQ4MiwyMjU3NTQ5LjEzNTEzNzkyMSwyMjIwNTgzLjgxOTE5Nzc0MywyOTIwNTY0LjA5Mjc4NzE0ODQsMC4wLDAuMCwwLjAsMC4wLDE5MzYwMDEuMzg2ODUzOTU0NSwyMDg2NzUyLjI5NzU1NjIzNCwwLjAsMTE3MjI0NS4yMTAxMzA5MjUsNTA5ODY2LjY1ODcwNzk4OTI2LDE4Mjc2MzMuOTA0NDEyOTY2NywwLjAsMC4wLDY4NjcyOC41MjEzNzg3ODEzLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDM3OTk2MDYuMDYyMjU4NDIxNCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsNDg1MzMzLjYwMDMzMTQ0NzcsMTkwMjY2Mi4zNjMwNTA4MDk0LDI1Mjg4NC42NDU4NDAwMzE5Nyw2NjI4MTQuNzA2MDY5NTYxNCwyNjg2OTcuMDU3NDgyOTEzMTQsMzMyNTUyLjc4MTI4Nzc4MDEsMTQwMjQ2LjUwNzQ0NzUyNjQ3LDEuMDMzMjU5ODMyNDY0NjU1MUU3CisyNyxTdW4gMjAgRmViIDExLDU5NTgyNS4yMzgyNjgyODE2LDcxMTQzMi4wNDc2NDMyNjAzLDc1NTAzNS4zMzM4ODQ1NjI2LDI3MTI0ODcuNzAzMTU5MDYyNyw1NDg1ODguMDI4NDMxNzgzNyw1OTE3OTcuNTAyMzIyMTU4NCwxMjE3ODY0LjQxNzE1Mjc0MTIsMC4wLDM3OTE3Mi4wMDIyNzg5ODExLDExMjQ0NjIuMzU2OTgyOTk2NSw0MzM4NzMuMzQxNDIxOTYyODMsMTU3MzE1MC4yNDY3MTkyMDMsMjE0NDgyNi40NzE5MjY3MzU3LDQ1NjM1OS43MjkzNzIzOTQ3LDE2NzkyNDguNjU1NzYzNzg0Miw1MDA0MDQuMzgzMTEwNTU1OSw3NjIzODUuODEyMjIxODYzLDg2Mjk4Mi43MjI4NjgzMDk2LDEwODgzMjIuMDA2NTgyNDk4OCwxMTM1Mjc5Ljg5OTI0MjM3NzYsNTg4MjI0Ljk0MDExMjA3NTMsMC4wLDExOTUxMzguNDE1OTQ4NDM5LDE0OTUxMDIuODAwNjAwNjcxMiwzNjM4NDAuODkxNTY3NTQ0NiwxNTU4ODIuOTc2OTAyODkwNzUsNjAwMTc4LjQ4NTc4OTkwNywzNzIxMjc2LjUxOTk2MTA1MzUsMTk5NzQ3NS4yMzk3MDAyMDMsMjI3MjUwOC43MjM4NzczMzczLDEyNjk1MjkuNDY1MjIwNjcwMiw3MDIzNjQuNzk4OTUyNDU0NCwyMDEwNzUuOTg0MzQ3OTIzMywyMjY3OTI4LjAwNjE3MTMyOSwyMjI2Mzc3LjI0NDQ3NzkyLDI5MjgzNjcuNjQ1MzE2MTE5LDAuMCwwLjAsMC4wLDAuMCwxOTQxOTk1LjczODIzMDk1NDksMjA5MTg1NS4wMzk5MzE3ODgzLDAuMCwxMTg5MjE4LjAxMTIxMzAwNzYsNTEzMTA1LjQ5NDM0MDU4NTU0LDE4NDEwNDQuMjQ2NzAyNzUyLDAuMCwwLjAsNzExMTYxLjU0MzE5MTk4MDksMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMzgyODQ3OC45MTkwMjUwOSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsNTk2MjIyLjYxODMzNjg4NjksMjAzNzAxMC4yOTgxMTM3MDg4LDI1NTUyNy42NjAzNjI4Nzc0NSw2Njc0MzcuMDk2MDEwOTgxLDI3MDMzMC4xOTcwNzUzMzEzLDMzNTgzNS4zMTI3ODU3OTkwMywxNDEzMDguODYzODY5OTkxMywxLjAzNTcxODQ3ODAyNDgyNjJFNworMjgsTW9uIDIxIEZlYiAxMSw2MDA2MDMuNTMxODgwOTE3NCw3MTU3NjcuNTA2Mjc2NTk1OCw3NTk1MTMuNzc0NjU3NTYzOSwyNzI5MDU3LjUyODQ4ODgyOTMsNTY3MjY0LjYwMDg2MTYzMzEsNjA3MzMwLjc3MTI2NTUzNzIsMTI0MTk4My44NzA4NDI4ODksMC4wLDQyNzY2Ny4wNTk0MDEzMzUyNSwxMTY3NTM4Ljk1NjY5ODYzMzMsNDY1Mzk0LjYzNjcwOTg5OTA2LDE2MTAwODguNzM2ODk0NDA2OCwyMTYzNzE5LjUzNTI2NDU4Niw0NzQ2NTcuNzEyMDcyMzc0MSwxNzE5NDQ4LjEwODkxOTQ2OTYsNTE2NjM3LjU3MDg3NDE5NzIsNzg1MDYyLjQ0MTIzMjM0NzUsODg2Nzk1LjUxMTMwOTU5NTUsMTExNjY1MC4yMTAzODQ1MjQ0LDExNjIxMDUuMjM0MzgyNzU1MSw2MDEyNTguMDA5MzEwMzI1NywwLjAsMTIwNDg4OS4wODU2NTUzOCwxNTAwNTMyLjIzMTc5NDEzMTIsMzY0OTQ3Ljg3MzcxMDE0ODA0LDE1NjI5NS45Mzg3MjM1MTQsNjAyMzI3Ljc1MDg2MjY3NzMsMzcyNzQ0Ni40OTI4NzMzMzIsMjAwMjk2MC4xOTUwMjI0ODUsMjI3NzE0NS43NjAxNzc3NjcsMTI3Mzk1NC45MDQ1OTQxNTU3LDcwNDkzNy44Mzc5ODgwMTM1LDIwMTQ3Mi43OTc0NzM1NzU0MywyMjc0NzEwLjYzODc1NTk0MywyMjMwMTM3Ljg3ODQ2MjMxNiwyOTMzNDM0LjQyMDk3NTk2OSwwLjAsMC4wLDAuMCwwLjAsMTk0NTg5NC4yMjY2MDk3MjIyLDIwOTUxNjQuOTgwNzk3OTAxNywwLjAsMTIwMDUxMC45Mzc4MDg0NzYyLDUxNTIzMS4zOTYwNzM4MjY1LDE4NDk4NjUuMDUwNDU0NjM0NSwwLjAsMC4wLDcyNzgzOC43ODQxMzQwMTU4LDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDM4NDc0NzIuNDA2NzI0ODM1NywwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsNjc5MzY2LjcyNTg4NDk0MywyMTMwODczLjU4NzAzODE1OTQsMjU3Mjc1LjgzOTkzMzA0MTQsNjcwNDc1LjIyMTAyODEzNTIsMjcxNDAxLjQ1NTc5NjU0ODgsMzM4MDA0LjQ5NDA3OTM1OCwxNDIwMDcuOTczOTYyODgwMDMsMS4wMzczMTM3MTI4MjY0NjIzRTcKKzI5LFR1ZSAyMiBGZWIgMTEsNjAzNzQzLjk1MjQ4MDUxOTQsNzE4NjA1Ljk1MDM4MDM0MTEsNzYyNDQ0Ljc2OTM5MDYzNCwyNzM5OTA2LjQyMTA0OTMzMjcsNTc5OTQzLjExMDc5ODUxNzYsNjE3ODA2LjMwNDY4MjY2NzcsMTI1ODE0Mi40MTQ4MzY0Nzk4LDAuMCw0NjI0MjEuNzUwNDYxMTY5MSwxMTk2ODc1LjQ5OTUyNDQ4MTEsNDg3MzQyLjg0MTEzOTk3MjMsMTYzNDkzMy42NzU0NTQzNzUsMjE3NjE1NC40MDcwMjAxMDEzLDQ4NzEzNS41OTE5MTI3ODY4LDE3NDY0OTguOTM0NjI4NDAxMiw1Mjc2NDMuMTg3MTI5MjM2NCw4MDA0MDIuNzU3MDc4OTQ2Myw5MDI4NzQuMjczMzM4OTIzMiwxMTM1NzUwLjQxMDA5MTcyOTgsMTE4MDE1MC45NTc1MzIwNTAzLDYxMDAxMi4zMTI3MzIwNDM4LDAuMCwxMjExMjk5LjMxMzA0NTAxOCwxNTA0MDY0LjIyOTkzNjcxNTcsMzY1NjY2LjU2NzQ4Nzg2MTU1LDE1NjU2My42NTQ3ODMxNzYxNCw2MDM3MjUuNjg2MTUwODQ2MywzNzMxNDI3LjkyNDI2MjAxOTMsMjAwNjUxNy4zMDc3MzQ5MDksMjI4MDE0My45MjQ2NTIzMjk2LDEyNzY4MzIuMzk4MDMzNTQ1Niw3MDY2MTEuODM3OTYyNzMyNSwyMDE3MjkuMjgyNjAzMDM4MSwyMjc5MTEzLjQwNDI4NTQ1MzMsMjIzMjU2NS4wMDYxNDI3MjgsMjkzNjcwNS4yNzI4NTczNiwwLjAsMC4wLDAuMCwwLjAsMTk0ODQxNC40NDYxNjg1MjMsMjA5NzI5OS45MjI1ODIwMzgsMC4wLDEyMDc5NTIuMjQxMzMzNDg4Niw1MTY2MTYuNDk3MzI1OTgwOSwxODU1NjIyLjI5MTczMjU3MDYsMC4wLDAuMCw3MzkwNTUuNTg1NDExNzA1OCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwzODU5ODY5LjM4Mzg1ODUwNiwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsNzM5MjE5LjYwODQ2MDY1MjQsMjE5NTE0NC4yNzcxMjQ4NTYsMjU4NDIyLjE3MDE4OTAxMzc2LDY3MjQ1Ni45MTA2Njk4MDkxLDI3MjA5OS4wMzYwMDg3MzkyNiwzMzk0MjUuODAwMjkyMzQxOTcsMTQyNDY0LjQ1Nzc2MjI1OTE4LDEuMDM4MzQyOTgyNzQ2NjcwNEU3CiszMCxXZWQgMjMgRmViIDExLDYwNTc5Mi4yNzE0OTk0OTMsNzIwNDUxLjMxODE5NjgzNDksNzY0MzQ5LjcyNDM5MjAzNzcsMjc0Njk1OS45NTUwMDMyMjEsNTg4NDMzLjc1NjY0ODAzMzIsNjI0Nzg0Ljk2Nzk2MzYwNzksMTI2ODg0OS42NjQzMDAzMzU2LDAuMCw0ODY2NjkuMTU5MTY4OTIyMiwxMjE2NTcxLjc3NTAxNzg2OTQsNTAyMzMzLjAyMDE1MjQwMzIsMTY1MTQ0OS43NDUyNjMyNjM4LDIxODQyNzQuNzQ0NTE1MDU4LDQ5NTUyMS43NzM5NDkyODk0NiwxNzY0NDg4LjEyMjM0MzA3MjIsNTM1MDA1Ljk3OTA0MDM3MjcsODEwNjQ3LjU0OTY1MTA5MDUsOTEzNTk2LjE4MzkzNTI1MzUsMTE0ODQ3Mi40OTYzNzE2NDY5LDExOTIxNDguNzA0NjYwNjY4Nyw2MTU4MjUuNTcxOTI2NzM1MywwLjAsMTIxNTQ4MS4zNDQ4MTgwODQ3LDE1MDYzNDguMDMyNDc4MTcxNCwzNjYxMzAuNDg2NDQ5NzgwNiwxNTY3MzYuMjQ3Nzk5MzQ2MzQsNjA0NjI5LjQ3MzA3MDQ1MTYsMzczMzk4NC40NTE2ODAwMjQsMjAwODgxMS4yNTkwNzM3OTYyLDIyODIwNzIuMzkxODI4NTA4NiwxMjc4NjkyLjIzMTk4NjM1ODgsNzA3Njk0LjM0Mzg3OTU5NDEsMjAxODk0LjIxMjAzMzE1ODU1LDIyODE5NTQuOTc1MTkwNDA0MywyMjM0MTIzLjczMTEyNDgzOTcsMjkzODgwNi4yNTU4Nzc0ODMsMC4wLDAuMCwwLjAsMC4wLDE5NTAwMzUuMjUzODIyNzI3NiwyMDk4NjcwLjI3NDAxMTIwMSwwLjAsMTIxMjgxNi4zNTE5ODkxMzUsNTE3NTEzLjI5NDIwNDU5OTUsMTg1OTM1NS40OTE5MTU0MTY0LDAuMCwwLjAsNzQ2NTExLjk0MDIwNTgwMTMsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMzg2NzkwNy41MTM0ODk3OTAzLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCw3ODExMTEuMTg4ODM0MjAzNCwyMjM4NDc4LjMyMTIxNjA5LDI1OTE2OC40MjE4NTA5MjE2LDY3Mzc0MS4yMTMyMzM2NDIzLDI3MjU1MC40NzkxMjM3Mjk1LDM0MDM1MC40NjI0ODIyNDE1LDE0Mjc2MC41NTg2ODgwNzQyLDEuMDM5MDAzODgyMTcwNzg5MUU3CiszMSxUaHUgMjQgRmViIDExLDYwNzExOS43MDI5MDY0MDQ2LDcyMTY0My45MTk2OTkyNzksNzY1NTgwLjUxMjI4OTgxNywyNzUxNTE4LjU5NDQyNjEwNTcsNTk0MDU4LjI2ODA5MDE3MzQsNjI5Mzg4LjE3MTg3MDU2OTEsMTI3NTg4MS4yODc4MTkyNjk4LDAuMCw1MDMyNTQuMzYwODM2Njg1OCwxMjI5NjQ2LjE1MDE5MjYzMDIsNTEyNDE5Ljg4MTM3MjQ5Mzg3LDE2NjIzMjQuODUxMTUyMzQxNiwyMTg5NTQyLjU5MjE5MDM2OCw1MDEwOTMuMTU1NjUwNTQ0MSwxNzc2MzM2Ljg1MDM0NTQ2Miw1Mzk4NzkuMzA3NDgxOTIyLDgxNzQxOC43ODcwMzI4ODc5LDkyMDY3NC4xMjIzMjAyOTE5LDExNTY4NjIuOTI4MDEyOTUzNCwxMjAwMDQ5LjU0MDg4MTI2NDUsNjE5NjQ5LjkzMzcyODU0NjYsMC4wLDEyMTgxOTIuMTAxMDg1NDk1MiwxNTA3ODE3LjA3NjE5NjU4NzksMzY2NDI4LjQ1OTQ0NDEwNjU2LDE1Njg0Ni45ODE2MzcyNzIyLDYwNTIxMC43NjA2NzAyMzcyLDM3MzU2MTguOTY5MjgxNzAyMywyMDEwMjgzLjQ0MDEwMzk4ODQsMjI4MzMwNy4yMTQ5MjM3NzQ0LDEyNzk4ODguMTM1MDkxNTU0MSw3MDgzOTAuNzEwOTg4OTI5MSwyMDE5OTkuNzkyNzAyNjk2NTIsMjI4Mzc3OS44NjQ2ODU3MjIsMjIzNTEyMC40MzUxMzg0MjUzLDI5NDAxNDkuOTI4ODI0MzMsMC4wLDAuMCwwLjAsMC4wLDE5NTEwNzIuOTQzOTY2NjA0OCwyMDk5NTQ2LjExNjY4MzkwOCwwLjAsMTIxNTk3NC40MTU1MDY5MDYsNTE4MDkwLjgxNDAwODE2NjI2LDE4NjE3NjIuNzI1Mjc0Nzc0MiwwLjAsMC4wLDc1MTQyMS41MTc0OTg3NDc0LDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDM4NzMwOTAuMDA1MTI3OTg0NiwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsODA5ODM0LjA0NzU1NTIwOTMsMjI2NzM0MS43MjU2OTQzNTk3LDI1OTY1MS4yNDQ5NTMwNjA5Myw2NzQ1NjguOTY4MDM5MjM5NSwyNzI4NDEuMDgxOTg1MzI5MywzNDA5NDguMzg2ODczNDQ2NywxNDI5NTEuNTQ1NjMxMjc1NzUsMS4wMzk0MjY0NjAxNjQ1Mzg0RTcKKzMyLEZyaSAyNSBGZWIgMTEsNjA3OTc1LjIyNTc0Nzg2OCw3MjI0MTAuNzA5MDg4Mjc0Myw3NjYzNzEuNjczOTY2NjQ2NywyNzU0NDQ5LjY4OTUxMDE2NzYsNTk3NzUxLjA0OTMxNDkxNjEsNjMyMzk5LjY5Nzc3Nzc4NDIsMTI4MDQ2NC42MjYyMzUwMDMsMC4wLDUxNDQyNy41MzU3MDMyMTEsMTIzODI0NC43NDEyMjQ3MjM0LDUxOTEyNy42NTAzOTIxMjc2LDE2Njk0MjkuMTkzMDg4MDM1LDIxOTI5NDAuNjg1ODEwMjk2LDUwNDc1OS43ODgxNTg5MDg2NiwxNzg0MDc5LjIxNjM3MTA0ODUsNTQzMDc2LjY5NjUyMzc3MjIsODIxODU2LjE0NjU2NTA3MjksOTI1MzA3Ljc2MDU2NzY1OSwxMTYyMzUxLjQ5NDkyMTc1MSwxMjA1MjExLjM1NTM3OTY3NjcsNjIyMTQ2LjM5NDU4MDYzMTMsMC4wLDEyMTk5MzkuNDc3MTY4MDgzNywxNTA4NzU3Ljc1OTc0Mzc2MzYsMzY2NjE5LjAxNjIxMTAwNjg1LDE1NjkxNy43Mjg3NTY5NjE5Nyw2MDU1ODIuOTQyNDk4OTIyMSwzNzM2NjYwLjA0MDUzMzIzNDQsMjAxMTIyNC4yMzQ4NTgyMTk1LDIyODQwOTQuNzU1NDU2MDUzLDEyODA2NTMuNjc4NTk0Nzc1Nyw3MDg4MzYuNjQ5MzkwMDYxLDIwMjA2Ny4xMTQ5MTEyOTg3MywyMjg0OTQ2Ljc2NjU1NDMyMDcsMjIzNTc1NS4zMzg5NjExNjgsMjk0MTAwNS45ODI0NzMzMDIsMC4wLDAuMCwwLjAsMC4wLDE5NTE3MzQuNjgxMzgzNzQzOSwyMTAwMTAzLjgwMTM3NjY1NywwLjAsMTIxODAxMy4wMTE4OTIxOTg4LDUxODQ2MC45OTA4OTYxNDM2NiwxODYzMzA3LjQ1MzI0MDE3OTIsMC4wLDAuMCw3NTQ2MjguNzIyNTI0NDA4NSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwzODc2NDE1LjA1NzMwODUyMDcsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDgyOTIyMC41MDkwODU5Mzc5LDIyODYzNzcuNTU1MTk1NDM5LDI1OTk2MS45ODIwNzczNDEzMiw2NzUwOTkuOTI0ODgyOTc2MiwyNzMwMjcuMjg1ODk3ODUyNSwzNDEzMzMuMDE3NzU0NTI5MTQsMTQzMDc0LjEzMzYyOTgyNDE4LDEuMDM5Njk1NjUxMzgyMTE5NEU3CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNFSVJfRkRfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL1NfMC5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNFSVJfRkRfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL1NfMC5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzI0YjQ1MAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0VJUl9GRF9SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vU18wLmNzdgpAQCAtMCwwICsxLDMzIEBACitpdGVyYXRpb24sdGltZSxzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9ub2RlL3RyYW5zcG9ydC9waXBlL1BITAorMSxUdWUgMjUgSmFuIDExLDQ3OTMyLjU0Nzk0NTIwNTQ4NgorMixXZWQgMjYgSmFuIDExLDQ3OTMyLjU0Nzk0NTIwNTQ4NgorMyxUaHUgMjcgSmFuIDExLDQ3OTMyLjU0Njk2NDQ3MTU4NQorNCxGcmkgMjggSmFuIDExLDQ3OTMyLjQxNjM5MjYwODIKKzUsU2F0IDI5IEphbiAxMSw0NzkzMi4zOTIzMjk0ODE1MworNixTdW4gMzAgSmFuIDExLDQ3OTI0LjY0NDExODU2MjY5Cis3LE1vbiAzMSBKYW4gMTEsNDc5MjMuMzI1MDgwOTM2MDUKKzgsVHVlIDEgRmViIDExLDQ3NjI2LjU3NDA0MjQ4MTQ2NQorOSxXZWQgMiBGZWIgMTEsNDc1NDUuOTE3NDgzMTg0MTMKKzEwLFRodSAzIEZlYiAxMSwzODEzNS4zNTM3MDEwNzk2NAorMTEsRnJpIDQgRmViIDExLDM1NzQ4LjYzNTk4NDI0CisxMixTYXQgNSBGZWIgMTEsMC4wCisxMyxTdW4gNiBGZWIgMTEsMTA2MzAuNjI5NTY5NTM3ODY1CisxNCxNb24gNyBGZWIgMTEsMC4wCisxNSxUdWUgOCBGZWIgMTEsMzg3NS40ODg1MTU4MjgzMDA1CisxNixXZWQgOSBGZWIgMTEsMC4wCisxNyxUaHUgMTAgRmViIDExLDIyNDEuOTU1MzE1ODEwOTg2NgorMTgsRnJpIDExIEZlYiAxMSwwLjAKKzE5LFNhdCAxMiBGZWIgMTEsNTQ3LjEyNDE3NzM1MTQ4ODcKKzIwLFN1biAxMyBGZWIgMTEsMC4wCisyMSxNb24gMTQgRmViIDExLDEzNy42NDgwMDY4NTgwMzc2MworMjIsVHVlIDE1IEZlYiAxMSwwLjAKKzIzLFdlZCAxNiBGZWIgMTEsMzMuMzQ0NDk3MzAxMTg3MjUKKzI0LFRodSAxNyBGZWIgMTEsMC4wCisyNSxGcmkgMTggRmViIDExLDguMDc4NjkzNDU3MTg2OTA4CisyNixTYXQgMTkgRmViIDExLDAuMAorMjcsU3VuIDIwIEZlYiAxMSwxLjk1NzMwMzE2OTM5NDMwNDYKKzI4LE1vbiAyMSBGZWIgMTEsMC4wCisyOSxUdWUgMjIgRmViIDExLDAuNDc0MjE0NzYyMjYyMjczNgorMzAsV2VkIDIzIEZlYiAxMSwwLjAKKzMxLFRodSAyNCBGZWIgMTEsMC4xMTQ4OTI1OTUyMTE1NDg0NworMzIsRnJpIDI1IEZlYiAxMSwwLjAwMzk2MTY2MTA2NzYwOTQ3OQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTRUlSX0ZEX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9TXzEuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTRUlSX0ZEX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9TXzEuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI2NmQ4NjcKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNFSVJfRkRfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL1NfMS5jc3YKQEAgLTAsMCArMSwzMyBAQAoraXRlcmF0aW9uLHRpbWUsc3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vbm9kZS90cmFuc3BvcnQvcGlwZS9QSC0xMSxzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9ub2RlL3RyYW5zcG9ydC9waXBlL1BILTMsc3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vbm9kZS90cmFuc3BvcnQvcGlwZS9QSC03LHN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL25vZGUvdHJhbnNwb3J0L3BpcGUvUEgtTkNSCisxLFR1ZSAyNSBKYW4gMTEsMjguOTk0NTIwNTQ3OTQ1MjA3LDE0MTIuOTQyNDY1NzUzNDI0Niw3MzU3Ljg0MzgzNTYxNjQzOSw0MDg1My44MjE5MTc4MDgyMgorMixXZWQgMjYgSmFuIDExLDI4Ljk5NDUyMDU0Nzk0NTIwNywxNDEyLjk0MjQ2NTc1MzQyNDYsNzM1Ny44NDM4MzU2MTY0NCw0MDg1My44MTk4ODU5MTI1NQorMyxUaHUgMjcgSmFuIDExLDI4Ljk5NDUyMDU0Nzk0NTIwNywxNDEyLjk0MjQ2NTc1MzQyNDYsNzM1Ny44NDM4MzU2MTY0NDEsNDA4NTMuNjQxODE2ODg4OTkKKzQsRnJpIDI4IEphbiAxMSwyOC45OTQ1MjAyNjE2MDc0LDE0MTIuOTQyNDUxNzk5NTU3Niw3MzU3Ljg0Mzc2Mjk1MjE2Nyw0MDg1My42NjMxMTkwOTcxMQorNSxTYXQgMjkgSmFuIDExLDI4Ljk5NDQ3Mzk3NjgwNjMsMTQxMi45Mzk1NjM3MjkwMDU0LDczNTcuODMyMDE3MjA1Mjc0NSw0MDg0Ny4yODg5MDk1MTYxNAorNixTdW4gMzAgSmFuIDExLDI4Ljk5NDQ3NTAyOTMzMDkyNSwxNDEyLjkzODMwMTU2MTEzNDcsNzM1Ny44MzIyODQyNzE3NzQsNDA4NDcuNTc1Mjk3NTgwNTQ0Cis3LE1vbiAzMSBKYW4gMTEsMjguOTkwNDg4MzMxNDkzMTE1LDE0MTIuNjYyOTg2MTk2MjgyMiw3MzU2LjgyMDU2NjAyNDEzNCw0MDY2OS40MTQzMTI0MTY4NgorOCxUdWUgMSBGZWIgMTEsMjguOTkxNzMzMTQzNTk2MDk3LDE0MTIuNjM1Nzk4NTM4MTkwOCw3MzU3LjEzNjQ1OTQ2Njk4Nyw0MDY1Ni42ODYyMTcxODc4OQorOSxXZWQgMiBGZWIgMTEsMjguNzk1MzgxNDY1MDg1ODE0LDEzOTguNjE1NDcwMTg2MDM2NCw3MzA3LjMwNjQ1NjA4Nzc3OCwzNjA5NS42NTkwMTU0ODMxOAorMTAsVGh1IDMgRmViIDExLDI4Ljg3NTY3MjIzNDMzNzUyLDEzOTguNDI2NjMyMTkxNjk5LDczMjcuNjgyMDc5NzcyMTI5LDM1NjIwLjQ3Mzk3MTM3ODg2CisxMSxGcmkgNCBGZWIgMTEsMjEuMzk0MDY2NTg2NDkxNTM3LDg1MS42OTczNTcxMjE2MTAzLDU0MjguOTMzMjIwNjU0NzU1LDAuMAorMTIsU2F0IDUgRmViIDExLDI0Ljk5MzMxNDk1MjcwNDY5LDk1MC43NDI2MzU5NTc2MDAxLDYzNDIuMzU0NzI5MTg4Mzg0LDE0NzA2LjU3MTMyODUzMjk2NAorMTMsU3VuIDYgRmViIDExLDAuMCwwLjAsMC4wLDAuMAorMTQsTW9uIDcgRmViIDExLDEzLjcwNTgwODE2MjU2OTIxOCwxNTEuNDA5NzQ0MTEwMzYxMSwzNDc1LjM5MDk2MjIzMjY2MTQsNDM4OC43NzU4MzMyODgyMzcKKzE1LFR1ZSA4IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAKKzE2LFdlZCA5IEZlYiAxMSwxMS45MzE4NDgxODM1MjM0MTIsNTUuMTY1NDQzNTkzMzQ1OTQsMjk3OC44NjgxMTY1NDk2NDMsMTU5OC45NDQwMjYyMDUxNzQyCisxNyxUaHUgMTAgRmViIDExLDAuMCwwLjAsNC41NDc0NzM1MDg4NjQ2NDFFLTEzLDAuMAorMTgsRnJpIDExIEZlYiAxMSwxMS41MjU0MDM2NzMzOTM2OTIsMzEuOTA3NjMzNjY1NTU0OTcsMTY2LjExMDM1MTYyMDc3MDYsOTIzLjk5NDk4MTUyNDI0MDkKKzE5LFNhdCAxMiBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wCisyMCxTdW4gMTMgRmViIDExLDEwLjcxNzc2MDcyMDMxMDc2Niw3Ljc4OTc1Mzg1MTQ4OTQyODQsNDAuNjIxNjM0NDk4MTIzODksMjI2LjA1MTc2NDc5NDc1MjQyCisyMSxNb24gMTQgRmViIDExLDAuMCwwLjAsMC4wLDAuMAorMjIsVHVlIDE1IEZlYiAxMSwwLjA0MDE4ODA5NjQ1OTIyODQ3NCwxLjk1OTc0MjYyNjA1MDg0NjYsMTAuMjE5MTgzODQ4Nzk3OTI5LDU2Ljg2NDM5OTM3NzE2OTcyNQorMjMsV2VkIDE2IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAKKzI0LFRodSAxNyBGZWIgMTEsMC4wMDk3MzU0OTQzNzAzOTkxODMsMC40NzQ3NDkyNTU4MTk4NDE4LDIuNDc1NzM1MDYwNjIxNzQ3LDEzLjc3NzMxMDQzNTY0ODk2OAorMjUsRnJpIDE4IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAKKzI2LFNhdCAxOSBGZWIgMTEsMC4wMDIzNTg3MTIyNTgwODE4ODUsMC4xMTUwMjIwNzg3NjUyMzA5OSwwLjU5OTgyMDE2NDAwMjI2NjYsMy4zMzc5NjIzMTc3MDQ3MDUzCisyNyxTdW4gMjAgRmViIDExLDAuMCwwLjAsMC4wLDAuMAorMjgsTW9uIDIxIEZlYiAxMSw1LjcxNDY4MDIzMDAzNTYwM0UtNCwwLjAyNzg2NzUxMTA2Mzg1NTA4LDAuMTQ1MzI0MjMwMTkzOTk2NjgsMC44MDg3MjA0MDI1NDg5Nzc1CisyOSxUdWUgMjIgRmViIDExLDAuMCwwLjAsMi43NzU1NTc1NjE1NjI4OTE0RS0xNywwLjAKKzMwLFdlZCAyMyBGZWIgMTEsMS4zODQ1NTA4Mjk0NjA4NTUyRS00LDAuMDA2NzUxNzMxMzMxNDcwNDY0LDAuMDM1MjA5MTA2MjU5MDI1MjgsMC4xOTU5MzY1MTA3MTk2MDkzNQorMzEsVGh1IDI0IEZlYiAxMSwwLjAsOC42NzM2MTczNzk4ODQwMzVFLTE5LDAuMCwwLjAKKzMyLEZyaSAyNSBGZWIgMTEsMy4zNTQ0ODUxNTQzNjcyNjNFLTUsMC4wMDE2MzU4MDcyMjYxMjQ5NzYsMC4wMDg1MzA0NTA1Nzg3MjE3MDgsMC4wNDc1NjIyNjU0OTE5NTc4NQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTRUlSX0ZEX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9TXzIuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTRUlSX0ZEX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9TXzIuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNmMGUzMWEKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNFSVJfRkRfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL1NfMi5jc3YKQEAgLTAsMCArMSwzMyBAQAoraXRlcmF0aW9uLHRpbWUsUEgtMS1HNjQwMDAxLFBILTEtRzY0MDAwMixQSC0xLUc2NDAwMDMsUEgtMS1HNjQwMDA0LFBILTEwLUc2NTAwMDEsUEgtMTAtRzY1MDAwMixQSC0xMC1HNjUwMDAzLFBILTEwLUc2NTAwMDQsUEgtMTAtRzY1MDAwNSxQSC0xMC1HNjUwMDA2LFBILTEwLUc2NTAwMDcsUEgtMTEtRzY2MDAwMSxQSC0xMS1HNjYwMDAyLFBILTExLUc2NjAwMDMsUEgtMTEtRzY2MDAwNCxQSC0xMS1HNjYwMDA1LFBILTEyLUc2NzAwMDEsUEgtMTItRzY3MDAwMixQSC0xMi1HNjcwMDAzLFBILTEyLUc2NzAwMDQsUEgtMTItRzY3MDAwNSxQSC0yLUc2ODAwMDEsUEgtMi1HNjgwMDAyLFBILTItRzY4MDAwMyxQSC0yLUc2ODAwMDQsUEgtMi1HNjgwMDA1LFBILTMtRzY5MDAwMSxQSC0zLUc2OTAwMDIsUEgtMy1HNjkwMDAzLFBILTMtRzY5MDAwNCxQSC0zLUc2OTAwMDUsUEgtMy1HNjkwMDA2LFBILTQtRzcwMDAwMSxQSC00LUc3MDAwMDIsUEgtNC1HNzAwMDAzLFBILTQtRzcwMDAwNCxQSC00LUc3MDAwMDUsUEgtNC1HNzAwMDA2LFBILTQtRzcwMDAwNyxQSC00LUc3MDAwMDgsUEgtNC1HNzAwMDA5LFBILTQtRzcwMDAxMCxQSC00LUc3MDAwMTEsUEgtNS1HNzEwMDAxLFBILTUtRzcxMDAwMixQSC01LUc3MTAwMDMsUEgtNS1HNzEwMDA0LFBILTUtRzcxMDAwNSxQSC01LUc3MTAwMDYsUEgtNi1HNzIwMDAxLFBILTYtRzcyMDAwMixQSC02LUc3MjAwMDMsUEgtNi1HNzIwMDA0LFBILTYtRzcyMDAwNSxQSC03LUc3MzAwMDEsUEgtNy1HNzMwMDAyLFBILTctRzczMDAwMyxQSC03LUc3MzAwMDQsUEgtOC1HNzQwMDAxLFBILTgtRzc0MDAwMixQSC04LUc3NDAwMDMsUEgtOC1HNzQwMDA0LFBILTgtRzc0MDAwNSxQSC05LUc3NTAwMDEsUEgtOS1HNzUwMDAyLFBILTktRzc1MDAwMyxQSC05LUc3NTAwMDQsUEgtOS1HNzUwMDA1LFBILUNBUi1HMjMwMDAxLFBILUNBUi1HMjMwMDAyLFBILUNBUi1HMjMwMDAzLFBILUNBUi1HMjMwMDA0LFBILUNBUi1HMjMwMDA1LFBILU5DUi1HNTIwMDAxCisxLFR1ZSAyNSBKYW4gMTEsNjA5NDgwLjAsNzIzNzUzLjAsNzY3NzU2LjAsMjc1OTU4MS4wLDYwNDQ4My4wLDYzNzg1My4wLDEyODg3MDYuMCw4Mzk4NC4wLDUzNTc3MC4wLDEyNTM5NzAuMCw1MzE2NDguMCwxNjgyMjU4LjAsMjE5ODkyOC4wLDUxMTQ3NC4wLDE3OTgwNjcuMCw1NDg4OTguMCw4Mjk5MTcuMCw5MzM3MDkuMCwxMTcyMjg4LjAsMTIxNDUzNC4wLDYyNjY0OC4wLDk2NjIuMCwxMjIzMDE0LjAsMTUxMDM5MS4wLDM2Njk0OS4wLDE1NzA0MC4wLDYwNjIyOS4wLDM3Mzg0NDguMCwyMDEyODUxLjAsMjI4NTQ1MS4wLDEyODE5ODIuMCw3MDk2MTEuMCwyMDIxODMuMCwyMjg2OTY3LjAsMjIzNjg0Ni4wLDI5NDI0NzcuMCwyNDM3ODYuMCw0NDM5NzQuMCw3OTUxMzcuMCw4NDU0NzQuMCwxOTUyODc0LjAsMjEwMTA2MS4wLDI3Mjg5NS4wLDEyMjE2MTAuMCw1MTkxMDUuMCwxODY2MDAxLjAsMjQzNDYwLjAsODA0ODc0LjAsNzYwNDIwLjAsNDk3NTA2LjAsNTYxMzI2LjAsNzc2NjAwLjAsMjQ2NTkyNS4wLDMwMDI5NzQuMCwxMjkzNDY1LjAsMzg4MjIwOS4wLDEzMzczODYuMCw4OTY1MC4wLDQxMTk5NC4wLDE5MzkwOTYuMCw1OTgwNzYuMCw0MzI0MDMuMCw3Mjk4NDUuMCwzNDI4MjIuMCw2Mjg3OTMuMCwyMzk2MjMuMCw4NjYzNzMuMCwyMzIxMzczLjAsMjYwNTA3LjAsNjc2MDI1LjAsMjczMzUxLjAsMzQyMDA3LjAsMTQzMjg4LjAsMS4wNDAxNTgyRTcKKzIsV2VkIDI2IEphbiAxMSw2MDk0ODAuMCw3MjM3NTMuMCw3Njc3NTYuMCwyNzU5NTgxLjAsNjA0NDgzLjAsNjM3ODUzLjAsMTI4ODcwNi4wLDgzOTg0LjAsNTM1NzcwLjAsMTI1Mzk3MC4wLDUzMTY0OC4wLDE2ODIyNTguMCwyMTk4OTI4LjAsNTExNDc0LjAsMTc5ODA2Ny4wLDU0ODg5OC4wLDgyOTkxNy4wLDkzMzcwOS4wLDExNzIyODguMCwxMjE0NTM0LjAsNjI2NjQ4LjAsOTY2Mi4wLDEyMjMwMTQuMCwxNTEwMzkxLjAsMzY2OTQ5LjAsMTU3MDQwLjAsNjA2MjI5LjAsMzczODQ0NC44NzAzNDQ1NTEsMjAxMjg1MS4wLDIyODU0NTEuMCwxMjgxOTgyLjAsNzA5NjExLjAsMjAyMTgzLjAsMjI4Njk2Ny4wLDIyMzY4NDQuNTAzNzc4ODc0NCwyOTQyNDc1Ljc2NzcwODE4MiwyNDM3ODYuMCw0NDM5NzQuMCw3OTUxMzcuMCw4NDU0NzQuMCwxOTUyODc0LjAsMjEwMTA1Ny42MTI0NDYwMDgsMjcyODk1LjAsMTIyMTYxMC4wLDUxOTEwNS4wLDE4NjYwMDEuMCwyNDM0NjAuMCw4MDQ4NzQuMCw3NjA0MjAuMCw0OTc1MDYuMCw1NjEzMjYuMCw3NzY2MDAuMCwyNDY1OTI1LjAsMzAwMjk3NC4wLDEyOTM0NjUuMCwzODgyMjA5LjAsMTMzNzM4Ni4wLDg5NjUwLjAsNDExOTk0LjAsMTkzOTA5Ni4wLDU5ODA3Ni4wLDQzMjQwMy4wLDcyOTg0NS4wLDM0MjgyMi4wLDYyODc5My4wLDIzOTYyMy4wLDg2NjM3My4wLDIzMjEzNzMuMCwyNjA1MDcuMCw2NzYwMjUuMCwyNzMzNTEuMCwzNDIwMDcuMCwxNDMyODguMCwxLjA0MDE1MzgxNzI5MDI1MzhFNworMyxUaHUgMjcgSmFuIDExLDYwOTQ4MC4wLDcyMzc1My4wLDc2Nzc1Ni4wLDI3NTk1ODEuMCw2MDQ0ODMuMCw2Mzc4NTMuMCwxMjg4NzA2LjAsODM5ODQuMCw1MzU3NzAuMCwxMjUzOTcwLjAsNTMxNjQ4LjAsMTY4MjI1OC4wLDIxOTg5MjguMCw1MTE0NzQuMCwxNzk4MDY3LjAsNTQ4ODk4LjAsODI5OTE3LjAsOTMzNzA5LjAsMTE3MjI4OC4wLDEyMTQ1MzQuMCw2MjY2NDguMCw5NjYyLjAsMTIyMzAxNC4wLDE1MTAzOTEuMCwzNjY5NDkuMCwxNTcwNDAuMCw2MDYyMjkuMCwzNzM4NDQyLjk5ODkxMTk4MTUsMjAxMjg1MS4wLDIyODU0NTEuMCwxMjgxOTgyLjAsNzA5NjExLjAsMjAyMTgzLjAsMjI4Njk2Ny4wLDIyMzY4NDMuNjA5MDg2OTYzLDI5NDI0NzUuMDMwODM3Mjg4LDI0Mzc4Ni4wLDQ0Mzk3NC4wLDc5NTEzNy4wLDg0NTQ3NC4wLDE5NTI4NzQuMCwyMTAxMDU1LjU4NjgwMDAzNDYsMjcyODk1LjAsMTIyMTYxMC4wLDUxOTEwNS4wLDE4NjYwMDEuMCwyNDM0NjAuMCw4MDQ4NzQuMCw3NjA0MjAuMCw0OTc1MDYuMCw1NjEzMjYuMCw3NzY2MDAuMCwyNDY1OTI1LjAsMzAwMjk3NC4wLDEyOTM0NjUuMCwzODgyMjA5LjAsMTMzNzM4Ni4wLDg5NjUwLjAsNDExOTk0LjAsMTkzOTA5Ni4wLDU5ODA3Ni4wLDQzMjQwMy4wLDcyOTg0NS4wLDM0MjgyMi4wLDYyODc5My4wLDIzOTYyMy4wLDg2NjM3My4wLDIzMjEzNzMuMCwyNjA1MDcuMCw2NzYwMjUuMCwyNzMzNTEuMCwzNDIwMDcuMCwxNDMyODguMCwxLjA0MDE1MTIwNTQ2MjQzOTRFNworNCxGcmkgMjggSmFuIDExLDYwOTQ4MC4wLDcyMzc1My4wLDc2Nzc1Ni4wLDI3NTk1ODEuMCw2MDQ0ODMuMCw2Mzc4NTMuMCwxMjg4NzA2LjAsODM5ODQuMCw1MzU3NzAuMCwxMjUzOTcwLjAsNTMxNjQ4LjAsMTY4MjI1OC4wLDIxOTg5MjguMCw1MTE0NzQuMCwxNzk4MDY3LjAsNTQ4ODk4LjAsODI5OTE3LjAsOTMzNzA5LjAsMTE3MjI4OC4wLDEyMTQ1MzQuMCw2MjY2NDguMCw5NjYyLjAsMTIyMzAxNC4wLDE1MTAzOTEuMCwzNjY5NDkuMCwxNTcwNDAuMCw2MDYyMjkuMCwzNzM4MzQyLjcyMjQ5MTYyNjYsMjAxMjg1MC45NTYxOTU5MDQ2LDIyODU0NDguMDQyMzkwMDI4NSwxMjgxOTgyLjAsNzA5NjExLjAsMjAyMTgyLjQ4MDkyNzIxNTkyLDIyODY5NjYuOTIyNTk0NzE1LDIyMzY3OTQuNDg1ODEyNjg3LDI5NDI0MjkuMTYyMTY1MjgwNCwyNDM3ODYuMCw0NDM5NzQuMCw3OTUxMzcuMCw4NDU0NzQuMCwxOTUyODcxLjQ2Nzk0OTA2NiwyMTAwOTYwLjIyMDc1NjQzMiwyNzI4OTUuMCwxMjIxNjEwLjAsNTE5MTA1LjAsMTg2NjAwMS4wLDI0MzQ2MC4wLDgwNDg3NC4wLDc2MDQyMC4wLDQ5NzUwNi4wLDU2MTMyNi4wLDc3NjYwMC4wLDI0NjU5MjUuMCwzMDAyOTc0LjAsMTI5MzQ2NS4wLDM4ODIyMDkuMCwxMzM3Mzg2LjAsODk2NTAuMCw0MTE5OTQuMCwxOTM5MDk2LjAsNTk4MDc2LjAsNDMyNDAzLjAsNzI5ODQ1LjAsMzQyODIyLjAsNjI4NzkzLjAsMjM5NjIzLjAsODY2MzczLjAsMjMyMTM3My4wLDI2MDUwNy4wLDY3NjAyNS4wLDI3MzM1MS4wLDM0MjAwNy4wLDE0MzI4OC4wLDEuMDQwMDcyMjc4MDU0NjA2N0U3Cis1LFNhdCAyOSBKYW4gMTEsNjA5NDgwLjAsNzIzNzUzLjAsNzY3NzU2LjAsMjc1OTU4MS4wLDYwNDQ4My4wLDYzNzg1My4wLDEyODg3MDYuMCw4Mzk4NC4wLDUzNTc3MC4wLDEyNTM5NzAuMCw1MzE2NDguMCwxNjgyMjU4LjAsMjE5ODkyNy45OTk5OTk4NTIsNTExNDc0LjAsMTc5ODA2Ny4wLDU0ODg5OC4wLDgyOTkxNy4wLDkzMzcwOS4wLDExNzIyODguMCwxMjE0NTM0LjAsNjI2NjQ4LjAsOTY2Mi4wLDEyMjMwMTQuMCwxNTEwMzkxLjAsMzY2OTQ5LjAsMTU3MDQwLjAsNjA2MjI5LjAsMzczODE2NC4wMDI3NzczOTY3LDIwMTI4NTAuODc3NDM3NTYyLDIyODU0NDIuNzI1NjQ4NzE0LDEyODE5ODIuMCw3MDk2MTEuMCwyMDIxODEuNTQ3NjUzNTYyMiwyMjg2OTY2Ljc4MzQyMjUxMywyMjM2NzA2LjkxNTkwMDk1NiwyOTQyMzQ3LjMxMDkzODcyOTQsMjQzNzg2LjAsNDQzOTc0LjAsNzk1MTM3LjAsODQ1NDc0LjAsMTk1Mjg2Ni45MTU0MDg5ODc4LDIxMDA3OTAuNDYxOTc3ODQwNCwyNzI4OTUuMCwxMjIxNjEwLjAsNTE5MTA1LjAsMTg2NjAwMS4wLDI0MzQ2MC4wLDgwNDg3NC4wLDc2MDQyMC4wLDQ5NzUwNi4wLDU2MTMyNi4wLDc3NjYwMC4wLDI0NjU5MjUuMCwzMDAyOTc0LjAsMTI5MzQ2NS4wLDM4ODIyMDguOTk5OTYyNDA4NiwxMzM3Mzg2LjAsODk2NTAuMCw0MTE5OTQuMCwxOTM5MDk2LjAsNTk4MDc2LjAsNDMyNDAzLjAsNzI5ODQ1LjAsMzQyODIyLjAsNjI4NzkzLjAsMjM5NjIzLjAsODY2MzczLjAsMjMyMTM3My4wLDI2MDUwNy4wLDY3NjAyNS4wLDI3MzM1MS4wLDM0MjAwNy4wLDE0MzI4OC4wLDEuMDM5OTMyNzM0Nzk4NDY2OEU3Cis2LFN1biAzMCBKYW4gMTEsNjA5NDgwLjAsNzIzNzUzLjAsNzY3NzU2LjAsMjc1OTU4MC45OTk2ODAwNzc3LDYwNDQ4My4wLDYzNzg1My4wLDEyODg3MDUuOTk5OTk5OTkxNCw4Mzk4NC4wLDUzNTc3MC4wLDEyNTM5NzAuMCw1MzE2NDguMCwxNjgyMjU3Ljk5OTk5OTk5NzQsMjE5ODkyNy45OTk5NjY0NjczLDUxMTQ3NC4wLDE3OTgwNjYuOTk5OTk5OTk3NCw1NDg4OTguMCw4Mjk5MTcuMCw5MzM3MDkuMCwxMTcyMjg4LjAsMTIxNDUzMy45OTk5OTk5OTc3LDYyNjY0Ny45OTk5OTk5OTc4LDk2NjIuMCwxMjIzMDE0LjAsMTUxMDM5MC44NzI2NTY3NDM1LDM2Njk0OC44NTk5MjE1MTM2LDE1NzAzOS42MjAyMDg2NzcyOCw2MDYyMjguOTQ3MzEyNDQyLDM3MzU1ODEuOTg0MzkxMDcyMywyMDEyODQ3LjAzNzkxMjM5MTgsMjI4NTI5NC40NjI4ODkyMjk0LDEyODE5ODEuOTI5NTU1NTY3Nyw3MDk2MTAuOTUxNzc4MjcwMiwyMDIxNTguNTQxOTA3MTM2MSwyMjg2OTYyLjU5MTA1NDc1MDYsMjIzNTQxMC4yODQxMTQ0MzMsMjk0MTAzOC40ODQ5MTY3MjYsMjQzNzg2LjAsNDQzOTc0LjAsNzk1MTM3LjAsODQ1NDc0LjAsMTk1MjczMy4wNDM0MDM4MTQ1LDIwOTg1NjEuNDU3OTc1NTYxNywyNzI4OTUuMCwxMjIxNjEwLjAsNTE5MTA0Ljk4ODI0ODc2MDcsMTg2NjAwMC45ODgyMzQyMjEsMjQzNDYwLjAsODA0ODc0LjAsNzYwNDIwLjAsNDk3NTA2LjAsNTYxMzI2LjAsNzc2NjAwLjAsMjQ2NTkyNS4wLDMwMDI5NzQuMCwxMjkzNDY1LjAsMzg4MjIwOC45OTE0ODgyMzYsMTMzNzM4Ni4wLDg5NjUwLjAsNDExOTk0LjAsMTkzOTA5Ni4wLDU5ODA3Ni4wLDQzMjQwMy4wLDcyOTg0NS4wLDM0MjgyMi4wLDYyODc5My4wLDIzOTYyMy4wLDg2NjM3My4wLDIzMjEzNzMuMCwyNjA1MDcuMCw2NzYwMjUuMCwyNzMzNTEuMCwzNDIwMDcuMCwxNDMyODguMCwxLjAzODM5NDQzNTQxMTI5NjhFNworNyxNb24gMzEgSmFuIDExLDYwOTQ4MC4wLDcyMzc1My4wLDc2Nzc1Ni4wLDI3NTk1ODAuOTk4NzIwOTYxLDYwNDQ4My4wLDYzNzg1My4wLDEyODg3MDUuOTk5OTk5OTg2Myw4Mzk4NC4wLDUzNTc3MC4wLDEyNTM5NzAuMCw1MzE2NDguMCwxNjgyMjU3Ljk5OTk5OTk5NiwyMTk4OTI3Ljk5OTkzNTc5MjMsNTExNDc0LjAsMTc5ODA2Ni45OTk5OTk5OTU4LDU0ODg5OC4wLDgyOTkxNy4wLDkzMzcwOS4wLDExNzIyODguMCwxMjE0NTMzLjk5OTk5OTk5NjMsNjI2NjQ3Ljk5OTk5OTk5NjQsOTY2Mi4wLDEyMjMwMTQuMCwxNTEwMzkwLjQ5MDg4NjQwNiwzNjY5NDguNDM5OTcxNDc3NiwxNTcwMzguNDgxNjExMTAyMzgsNjA2MjI4Ljc4OTM5MTQ1OTQsMzcyODI4NS4zNzg1NDAyNDYzLDIwMTI4MzUuNzE5OTM2NzU0OCwyMjg0ODYzLjA0MTIzNTY4MDcsMTI4MTk4MS43MTgzOTc5MzYsNzA5NjEwLjgwNzI0Mjc1OTYsMjAyMDkxLjg1MzY4NjYxNjc5LDIyODY5NTAuMzYxNjcxNzg5NSwyMjMxNzQwLjI4NTU2NDExNTcsMjkzNzMxNy4yMTgzNjExNjQ0LDI0Mzc4Ni4wLDQ0Mzk3NC4wLDc5NTEzNy4wLDg0NTQ3NC4wLDE5NTIzNDIuODIxMjcwNzY1LDIwOTIzMDMuMjQ0OTU4ODQ3LDI3Mjg5NS4wLDEyMjE2MTAuMCw1MTkxMDQuOTUzMDE4OTUyMSwxODY2MDAwLjk1Mjk2MDgyMjUsMjQzNDYwLjAsODA0ODc0LjAsNzYwNDIwLjAsNDk3NTA2LjAsNTYxMzI2LjAsNzc2NjAwLjAsMjQ2NTkyNS4wLDMwMDI5NzQuMCwxMjkzNDY1LjAsMzg4MjIwOC45ODM3MTI1MDgzLDEzMzczODYuMCw4OTY1MC4wLDQxMTk5NC4wLDE5MzkwOTYuMCw1OTgwNzYuMCw0MzI0MDMuMCw3Mjk4NDUuMCwzNDI4MjIuMCw2Mjg3OTMuMCwyMzk2MjMuMCw4NjYzNzMuMCwyMzIxMzczLjAsMjYwNTA3LjAsNjc2MDI1LjAsMjczMzUxLjAsMzQyMDA3LjAsMTQzMjg4LjAsMS4wMzQxMzczNzE5OTY0OTIzRTcKKzgsVHVlIDEgRmViIDExLDYwOTQ4MC4wLDcyMzc1My4wLDc2Nzc1NS45OTk5NTgzNzI5LDI3NTk1ODAuOTUwMzc3MzQ3LDYwNDQ4My4wLDYzNzg1Mi45OTk5OTk5OTY3LDEyODg3MDUuOTk5OTk3NTgxNCw4Mzk4NC4wLDUzNTc3MC4wLDEyNTM5NzAuMCw1MzE2NDguMCwxNjgyMjU3Ljk5OTk5OTI4MjQsMjE5ODkyNy45OTU4NTAxNDY3LDUxMTQ3NC4wLDE3OTgwNjYuOTk5OTk5MjY4NCw1NDg4OTguMCw4Mjk5MTYuOTk5OTk5OTk5MSw5MzM3MDguOTk5OTk5OTk3NiwxMTcyMjg3Ljk5OTk5OTk5NDIsMTIxNDUzMy45OTk5OTkzNjU4LDYyNjY0Ny45OTk5OTkzNjA0LDk2NjIuMCwxMjIzMDEzLjk5OTM0MDA0NDgsMTUxMDM3OS40NDg5MDQwMjIzLDM2NjkzNi4xOTA3ODI1ODM1NSwxNTcwMDkuMzQ1NjgwMjYzMiw2MDYyMjQuMDQwMTk4MzU4NiwzNjUwNTg3LjUwOTA1ODY2MDQsMjAxMjU5NC41Mjc5MDY5NTI0LDIyNzgyMzUuMDMzNTAzMTUwNiwxMjgxOTc0LjQxNjI5OTE1OTIsNzA5NjA2LjQ3ODU2NDc4ODIsMjAxMTY4LjU1MjE2NjkxNzg2LDIyODY3NDkuMTg4NjY2NTE2NCwyMTkxNzE3Ljg3NDMzMjk4MDcsMjg5NDYyNC45OTM0OTIxNDIzLDI0Mzc4Ni4wLDQ0Mzk3NC4wLDc5NTEzNy4wLDg0NTQ3NC4wLDE5NDYxMTkuNjY3NzU5MTY2MywyMDMwMzQ2LjI2Nzk2MDA2OTUsMjcyODk1LjAsMTIyMTYwOS45OTk4ODgwMjg1LDUxOTEwMy44NTE4NzAxNjE1LDE4NjU5OTkuODQ5OTE4MjkxNywyNDM0NjAuMCw4MDQ4NzQuMCw3NjA0MjAuMCw0OTc1MDYuMCw1NjEzMjYuMCw3NzY2MDAuMCwyNDY1OTI1LjAsMzAwMjk3NC4wLDEyOTM0NjUuMCwzODgyMjA3Ljk0NjQyMjQ1NTQsMTMzNzM4Ni4wLDg5NjUwLjAsNDExOTk0LjAsMTkzOTA5Ni4wLDU5ODA3Ni4wLDQzMjQwMy4wLDcyOTg0NS4wLDM0MjgyMi4wLDYyODc5My4wLDIzOTYyMy4wLDg2NjM3My4wLDIzMjEzNzMuMCwyNjA1MDcuMCw2NzYwMjQuOTA3NzI4NDI2NiwyNzMzNTAuODcyMjEyNDk1NSwzNDIwMDYuOTk5NDIzMjg2MjQsMTQzMjg3Ljk5MTAxNjYzMzMsOTk1NjAwNy45MTAxMDE3NQorOSxXZWQgMiBGZWIgMTEsNjA5NDc5Ljk5OTk4MzcxNCw3MjM3NTIuOTk2MjEwMDE1Nyw3Njc3NTUuOTk0MzAyOTc5OSwyNzU5NTgwLjU5OTIyNTAxNzcsNjA0NDgyLjk5OTk5OTk5ODgsNjM3ODUyLjk5OTk5OTkwOTIsMTI4ODcwNS45OTk5NzQ3OSw4Mzk4NC4wLDUzNTc3MC4wLDEyNTM5NjkuOTk5OTk5OTk4OCw1MzE2NDguMCwxNjgyMjU3Ljk5OTk5MjQzMywyMTk4OTI3Ljk2ODcxNzc3MTYsNTExNDczLjk5OTk5OTk5OTYsMTc5ODA2Ni45OTk5OTIzMTIyLDU0ODg5Ny45OTk5OTk5OTk4LDgyOTkxNi45OTk5OTk5NzI4LDkzMzcwOC45OTk5OTk5Mjk3LDExNzIyODcuOTk5OTk5ODQyLDEyMTQ1MzMuOTk5OTkzMzc3LDYyNjY0Ny45OTk5OTMzNTk2LDk2NjIuMCwxMjIzMDEzLjk5MzM2Mzc2LDE1MTAzMTQuNDk1Mzk0NDY1NywzNjY4NjMuODI1MzkwNjM0OSwxNTY4NDcuODYyODI2NTgxMzcsNjA2MTk1LjU2NTQ2MjU1NjMsMzMyNzAyOC44Mjk0MzE0MDYsMjAxMTI3OC4zOTU5MzI5NTM4LDIyNDYzMzQuODg5MTI0NDIyMywxMjgxOTI3Ljc4ODgwNzM5NjgsNzA5NTgwLjUyNzEzNTE5OTMsMTk2OTI0LjYwNjUzODg0ODA1LDIyODU3NDcuOTcyNzczOTc5NCwyMDIyOTA5LjI5NTU2NjY4OCwyNzEwNzM5LjM2NjgyNjcwOCwyNDM3ODYuMCw0NDM5NzQuMCw3OTUxMzcuMCw4NDU0NzQuMCwxOTE1NzM1LjY4MjAyMzAyODEsMTc4MTEyNS45NTEyNjA4NjM2LDI3Mjg5NS4wLDEyMjE2MDkuOTk4ODMxMTU2LDUxOTA5Ny4xMzgwOTA3OTgyLDE4NjU5OTMuMTIyODExNzA3NCwyNDM0NjAuMCw4MDQ4NzQuMCw3NjA0MTkuOTk5OTk5ODY2Miw0OTc1MDYuMCw1NjEzMjYuMCw3NzY2MDAuMCwyNDY1OTI1LjAsMzAwMjk3NC4wLDEyOTM0NjUuMCwzODgyMjAxLjA1NjQ0Mjc1MiwxMzM3Mzg2LjAsODk2NTAuMCw0MTE5OTQuMCwxOTM5MDk2LjAsNTk4MDc2LjAsNDMyNDAzLjAsNzI5ODQ1LjAsMzQyODIyLjAsNjI4NzkzLjAsMjM5NjIzLjAsODY2MzczLjAsMjMyMTM3My4wLDI2MDUwNi45OTk4ODkzNTU5NCw2NzYwMjQuMDc4NDk2OTUyMSwyNzMzNDkuNzMxODYwMzc2MjUsMzQyMDA2Ljk5MzUxMTY4NzE1LDE0MzI4Ny45MTE2MzYyMTUzLDg0NTk5MzMuOTk1MDY5NDcKKzEwLFRodSAzIEZlYiAxMSw2MDk0NzkuOTk5NzQ0NDY4OCw3MjM3NTIuOTQwNTM0Mzc4Miw3Njc3NTUuOTEzMDA0ODY0NywyNzU5NTc3LjQ2NDU1OTU5MTQsNjA0NDgyLjk5OTk5OTk4NjEsNjM3ODUyLjk5OTk5ODk2NCwxMjg4NzA1Ljk5OTc1NzQ0MTUsODM5ODQuMCw1MzU3NzAuMCwxMjUzOTY5Ljk5OTk5OTk4NjUsNTMxNjQ4LjAsMTY4MjI1Ny45OTk5MjY5NDU0LDIxOTg5MjcuNzI1MTU4MzgyLDUxMTQ3My45OTk5OTk5OTUzNCwxNzk4MDY2Ljk5OTkyNTg0NzksNTQ4ODk3Ljk5OTk5OTk5Nyw4Mjk5MTYuOTk5OTk5Njg4NCw5MzM3MDguOTk5OTk5MTk1OSwxMTcyMjg3Ljk5OTk5ODE5OCwxMjE0NTMzLjk5OTkzNjIzOCw2MjY2NDcuOTk5OTM2MTgzLDk2NjIuMCwxMjIzMDEzLjkzMzgwMjY1NzgsMTUwOTgxNS4yNjc2Njc3NDczLDM2NjMwNS42Njk5MDkwMjU3LDE1NTY3MS4xMTU2NTQ5MjM3LDYwNTk3My4yMDI0NTg3MTUyLDE2ODE2ODMuNzk2NDk5MTIzNiwyMDAxNzUyLjA3NTE5MDM2OTcsMjA0NDAwNS45MzY3Mzc1NDAyLDEyODE1NDUuNTEyODM3Njc5OCw3MDkzNzcuODUzNjQyMTEwNywxNzE0ODguMDAzODE4NjMxNzUsMjI3OTA5Mi43MjAyMjY4NDQzLDExNDIxNjcuMzc5MDU0ODU3NCwxNzE3MDM3LjQ5MzUxNjk2MjUsMjQzNzg2LjAsNDQzOTc0LjAsNzk1MTM3LjAsODQ1NDc0LjAsMTcyMDQzMy42OTc4NjczMzA0LDYwMDgwNy43ODIxNTA4NTA5LDI3Mjg5NS4wLDEyMjE2MDkuOTg4MDk1MzgyNyw1MTkwNDQuMDA4NzY3NzYxMiwxODY1OTM5Ljg3NjI4MzE3NzIsMjQzNDYwLjAsODA0ODc0LjAsNzYwNDE5Ljk5OTk5NzkwMTEsNDk3NTA2LjAsNTYxMzI2LjAsNzc2NjAwLjAsMjQ2NTkyNS4wLDMwMDI5NzQuMCwxMjkzNDY1LjAsMzg4MjEzOS4yMDM1NjA4MTQzLDEzMzczODYuMCw4OTY1MC4wLDQxMTk5NC4wLDE5MzkwOTYuMCw1OTgwNzYuMCw0MzI0MDMuMCw3Mjk4NDUuMCwzNDI4MjIuMCw2Mjg3OTMuMCwyMzk2MjMuMCw4NjYzNzMuMCwyMzIxMzcyLjk5OTk5OTk5OTUsMjYwNTA2Ljk5ODI2Mzk3MTk3LDY3NjAxNS44NDQxODExODQsMjczMzM4LjQ0NjQ2NjQ4MDE1LDM0MjAwNi45MzEzMzk5MDQ0MywxNDMyODcuMTI5ODE0ODkxLDE4MDk4MTUuNzIwMzQwMDQ5CisxMSxGcmkgNCBGZWIgMTEsNjA5NDc5Ljg1MzA5MTEzNTIsNzIzNzQxLjY1NzI1Njc5ODksNzY3NzM5LjkzNzQ5NjU4MjMsMjc1OTM3Mi40MTAxMDU5NjA0LDYwNDQ4Mi45OTk5OTYxOTI4LDYzNzg1Mi45OTk4MTgzOTYzLDEyODg3MDUuOTgyMTA5MTU2Nyw4Mzk4NC4wLDUzNTc3MC4wLDEyNTM5NjkuOTk5OTk3MDU5OCw1MzE2NDcuOTk5OTk5OTk5MiwxNjgyMjU3Ljk5NDQ0MTQ5NSwyMTk4OTE1LjkyODk3ODU2NSw1MTE0NzMuOTk5OTk4OTc5NCwxNzk4MDY2Ljk5NDQwNDY0OTQsNTQ4ODk3Ljk5OTk5NzQyNjYsODI5OTE2Ljk5OTk0MjY4MDIsOTMzNzA4Ljk5OTg1NTQ5MjgsMTE3MjI4Ny45OTk2ODA4MTA4LDEyMTQ1MzMuOTk1MjY1NjYzLDYyNjY0Ny45OTUzMzg5ODQxLDk2NjIuMCwxMjIzMDA5LjIzODk2NjIzMzgsMTQ4OTQ5Ny4yMzAxMTE0NDY1LDM0MzYwMi4xNzMxNDU4NjcxLDEyMDAzOC4wNTg3MTkxODY0OSw1OTY0NzEuNTc0ODE5ODU2NiwwLjAsMTY4MjA1NS44MTcwMTUyOTM1LDEwNjIwNC43NDkzNzM2ODA2OCwxMjYyMDkwLjM3NDA2MTQyMyw3MDA2MzkuODkwODg2OTk1OCw0ODA3LjQyODgyMzc2MzY5NywyMDkyNDQ1LjE0NzI2Mjc1NCwwLjAsMC4wLDI0Mzc4Ni4wLDQ0Mzk3NC4wLDc5NTEzNy4wLDg0NTQ3NC4wLDM4NTg0LjQwNjc0OTExMTA1LDAuMCwyNzI4OTUuMCwxMjIxNjA5LjA2ODg2MjU2OCw1MTY3MDkuMDMyNjg0MTU1NywxODYzNTk0LjQyNDYyODM3NywyNDM0NjAuMCw4MDQ4NzQuMCw3NjA0MTkuOTk5NTUwODc2Miw0OTc1MDYuMCw1NjEzMjYuMCw3NzY2MDAuMCwyNDY1OTI1LjAsMzAwMjk3NC4wLDEyOTM0NjUuMCwzODc5MTQyLjc5MzAyNzUyNSwxMzM3Mzg2LjAsODk2NTAuMCw0MTE5OTQuMCwxOTM5MDk2LjAsNTk4MDc2LjAsNDMyNDAzLjAsNzI5ODQ1LjAsMzQyODIyLjAsNjI4NzkzLjAsMjM5NjIzLjAsODY2MzczLjAsMjMyMTM3Mi45OTk5OTk2NzgsMjYwNTA2LjQ4MTQ5MTMzNzY4LDY3NTM3OS43ODY1NjUzODY5LDI3MjQ4MS41Mzc1MTY5ODMzNCwzNDIwMDAuODk3MjE1NDcxMjUsMTQzMjI4Ljg4Njc2MjE4Mjg0LDIuOTI2ODE0ODYxMjg3MjM0CisxMixTYXQgNSBGZWIgMTEsNjA5NDUzLjEyMDkzNDg3NDgsNzIyNTY2Ljc1MDEwNzk3NCw3NjYwOTYuMzc0ODY4MjcwOCwyNzQ5NjcxLjM3ODU5MzkwNzcsNjA0NDgyLjk5OTQyNTI1MDgsNjM3ODUyLjk4MDkxNzk5NDQsMTI4ODcwNC45ODQyODMyNzM2LDgzOTg0LjAsNTM1NzY5Ljk5OTk5OTk5MjIsMTI1Mzk2OS45OTk2MDk5NTU0LDUzMTY0Ny45OTk5OTk3MTA1LDE2ODIyNTcuNjY5MzQ5NDMyNywyMTk4NTU0LjcxNTM0NzA4OCw1MTE0NzMuOTk5ODY1MDksMTc5ODA2Ni42NzExNjUxNzMyLDU0ODg5Ny45OTk0NjcwOTMzLDgyOTkxNi45OTM2MzYzNjY4LDkzMzcwOC45ODQzNzM0MzksMTE3MjI4Ny45NjYwNDMwNDM0LDEyMTQ1MzMuNzI3OTQ3ODk4LDYyNjY0Ny43Mzg5Nzk3Nzk1LDk2NjIuMCwxMjIyNzQwLjQ3ODAyNjkzOCwxMDE3MTk2Ljc0NDIwODM5NDgsNTIzNDUuMjkxMDYzOTg3NjcsMC4wLDM4NzcyMC44MjM4MTg2OTk3NSwwLjAsODE5OS45OTIwNDI0OTE4MSwzLjY1NTY4NjU4MjQyODU2OUUtNCw3MjQyOTcuNDg1MjAwODA2NSw0OTM4OTEuMTY5Njg0OTM2LDAuMCwyNTk5NzMuOTUwNDk1NTYzOTQsMC4wLDAuMCwyNDM3ODYuMCw0NDM5NzQuMCw3OTUxMzcuMCw4NDU0NzQuMCwwLjAsMC4wLDI3Mjg5NS4wLDEyMjE1NTMuMzg4MDkyNTgxNCw0NTc2MDkuMzAzMDAyMDAwNjcsMTgwMTQxNS4zNTQxMTIyMzY4LDI0MzQ2MC4wLDgwNDg3NC4wLDc2MDQxOS45NDc1NDQxMjM5LDQ5NzUwNi4wLDU2MTMyNi4wLDc3NjYwMC4wLDI0NjU5MjUuMCwzMDAyOTc0LjAsMTI5MzQ2NS4wLDM3ODgzMzIuMzM4NzM1ODgxLDEzMzczODYuMCw4OTY1MC4wLDQxMTk5NC4wLDE5MzkwOTYuMCw1OTgwNzYuMCw0MzI0MDMuMCw3Mjk4NDUuMCwzNDI4MjIuMCw2Mjg3OTMuMCwyMzk2MjMuMCw4NjYzNzIuOTk5OTk5OTkyMiwyMzIxMzcyLjk5OTkyOTU1OCwyNjA0MzIuOTQ2MTk5MzExODIsNjQyNTM3Ljg2MDMxMDg3MzUsMjMwOTM4LjIyMDkxMDg3MzgsMzQxNTc1LjI4ODY3MDMzNDE1LDE0MDE3My40NTkxMzE1MzcsMC4wMDQ0MjYyNTExMjU1Nzk1MzIKKzEzLFN1biA2IEZlYiAxMSw2MDcyNDIuNjk2MTg1MzQ2OCw2NjYwNTMuMTczNjM4MDQxNyw2ODkyMzIuMTExNzI1NTg0NywyNTEyMzI1LjkwMDE3NDA0OSw2MDQ0ODIuOTU2MDM4MDA2OCw2Mzc4NTEuOTQ0MTQwNzEzLDEyODg2NzAuMTQ3ODEzNTQ4Myw4Mzk4NC4wLDUzNTc2OS45OTk5OTg3NzA4LDEyNTM5NjkuOTcyMTM4NTEwMyw1MzE2NDcuOTk5OTYyMDgyMiwxNjgyMjQ1LjYxNTA1MDA4NzUsMjE5MDMxNy4yMzE2NzU0NzQsNTExNDczLjk5MDUzMzI2NTEsMTc5ODA1NC44NjM3MDY0ODg5LDU0ODg5Ny45NTIwMjk3NTUzLDgyOTkxNi42MjQyMTA4OTE1LDkzMzcwOC4xMDQ5MjY3NTYsMTE3MjI4Ni4wOTIyNDY3NDI3LDEyMTQ1MjQuMjEzMTEyNDA2Miw2MjY2MzguOTI3NDg5NjQ2NSw5NjYyLjAsMTIxNDE5OC4xOTY0NDM5NTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMy42MTA1MzUxMjk1OTc4NDJFLTQsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMjQzNzg2LjAsNDQzOTc0LjAsNzk1MTM3LjAsODQ1NDc0LjAsMC4wLDAuMCwyNzI4OTUuMCwxMjE5NTExLjY0MTE0Njg4LDI3MDA2LjY4OTQzNTI2MDY3Miw4MzM0NDAuOTc1MDgyNTkzOSwyNDM0NjAuMCw4MDQ4NzQuMCw3NjA0MTYuNzcyNDY1NDQ1Miw0OTc1MDYuMCw1NjEzMjYuMCw3NzY2MDAuMCwyNDY1OTI1LjAsMzAwMjk3NC4wLDEyOTM0NjUuMCwyMTk4MTM4Ljg3Mzg5MzI3MDMsMTMzNzM4Ni4wLDg5NjUwLjAsNDExOTk0LjAsMTkzOTA5Ni4wLDU5ODA3Ni4wLDQzMjQwMy4wLDcyOTg0NS4wLDM0MjgyMi4wLDYyODc5My4wLDIzOTYyMy4wLDg2NjM3Mi45OTk5OTg3Njk4LDIzMjEzNzIuOTkzMjcwNzYzLDI1NTMzMy4yNTExOTk2MDQxMywxODc1NjIuNTcxNDAzODExOCwyMTA0LjgyMjE3NTQ1NjI4MiwzMjQ4MjYuMjAwMzQ2MTA3NzcsNzYxMzEuNTExODA2Nzg5MzgsMC4wMTQ5MTQyODkzNDU4MzM0OQorMTQsTW9uIDcgRmViIDExLDUwMTIxMy43NjU0MTA5NjA2LDY3OTA1LjYzNzIxODY2MzA2LDM3OTM2LjMzNjkwMjg5MzQxLDMwMjMwOS4wNTIzMjY4MjkzLDYwNDQ4MC4zNDQ1NTg5NTE0LDYzNzgwNS4yMzA0NzA1MjI4LDEyODc1MjcuMTM5ODI4NDQ2LDgzOTg0LjAsNTM1NzY5Ljk5OTg2OTAwMjEsMTI1Mzk2OC4zNDY3MzAwODUzLDUzMTY0Ny45OTY0NTg1MzM4LDE2ODE4MjMuNTEwNDcyMDc5LDE5OTcyOTIuNjI5MjAxNDcsNTExNDczLjQ1NjEzODc2NDIsMTc5NzY0Ny42NTMyODIxOTQ2LDU0ODg5NC44MDE3MDk4MTA3LDgyOTg5OC43MDYxNDU1ODg0LDkzMzY2Ni44Njg2MTY2MTczLDExNzIyMDAuMTMxMjIxMTI1LDEyMTQyMDMuNzc1OTkwNzY3Miw2MjYzNTMuNTgxMzU2MDk1Miw5NjYyLjAsMTAxODIyNi4zMjMzMzA5NjY0LDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDEuMDcwNTQ4MjU5MjMzNjk5OEUtNywwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwyNDM3ODYuMCw0NDM5NzQuMCw3OTUxMzcuMCw4NDU0NzQuMCwwLjAsMC4wLDI3Mjg5NS4wLDExNjE0MzguNzg0MTAxNzIxNiwwLjAsMC4wLDI0MzQ2MC4wLDgwNDg3NC4wLDc2MDI2MS40MzEwNzM3OTQ4LDQ5NzUwNi4wLDU2MTMyNi4wLDc3NjYwMC4wLDI0NjU5MjUuMCwzMDAyOTc0LjAsMTI5MzQ2NS4wLDUuMzk0ODU3NDI5OTExMTkyRS02LDEzMzczODYuMCw4OTY1MC4wLDQxMTk5NC4wLDE5MzkwOTYuMCw1OTgwNzYuMCw0MzI0MDMuMCw3Mjk4NDUuMCwzNDI4MjIuMCw2Mjg3OTMuMCwyMzk2MjMuMCw4NjYzNzIuOTk5ODY4ODU5NCwyMzIxMzcyLjUxODM4MTMwNDYsMTA4Mjk5Ljg4NTc4MjM4NDE4LDAuMCwwLjAsODUwOTYuOTg4MzcwMzE2OTgsMC4wLDMuMzA5MDY4ODI5NzE5MjE2NkUtNgorMTUsVHVlIDggRmViIDExLDAuMCwwLjAsMC4wLDAuMCw2MDQzODEuMjA3MzEzNjAyNiw2MzYzNzMuMTc2ODc3NzQwNywxMjYwMDEzLjYwNTU5NDgwOTIsODM5ODQuMCw1MzU3NjkuOTkyNTI3MDAzNSwxMjUzOTA1LjcwODg5OTUwOTIsNTMxNjQ3LjgxNTc2NDc1MjksMTY3MDkyMC4wNzI4NjM2Nzk2LDIzMzA4Ny40Njc5Mzk5OTU0LDUxMTQ1My41NzE3MzE2NDE1NCwxNzg3MjcyLjY5Mjg0OTczNTcsNTQ4NzY4LjQwMTQ1MTU1MSw4MjkzMTIuNTEzMzYzOTQ3NCw5MzIzNTYuNzQ1MTkyMzAxNiwxMTY5NTIwLjcxNzU4OTc2NiwxMjA2MjA4LjkwMDM5Nzc1Niw2MTk1MjMuOTk2NTQxODAwOSw5NjYyLjAsNDkxMC45ODgwNDI0NzcwMzEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDI0Mzc4Ni4wLDQ0Mzk3NC4wLDc5NTEzNy4wLDg0NTQ3NC4wLDAuMCwwLjAsMjcyODk1LjAsMzk2OTk0LjExNDEwNjE1NjA1LDAuMCwwLjAsMjQzNDYwLjAsODA0ODc0LjAsNzU1NTM3LjU2MDI3NjI5MTEsNDk3NTA2LjAsNTYxMzI2LjAsNzc2NjAwLjAsMjQ2NTkyNS4wLDMwMDI5NzQuMCwxMjkzNDY1LjAsMS42NzEzMDExMDY5NjE0MTIyRS01LDEzMzczODYuMCw4OTY1MC4wLDQxMTk5NC4wLDE5MzkwOTYuMCw1OTgwNzYuMCw0MzI0MDMuMCw3Mjk4NDUuMCwzNDI4MjIuMCw2Mjg3OTMuMCwyMzk2MjMuMCw4NjYzNzIuOTkyNTE2OTE3MSwyMzIxMzUyLjE2OTA5NTkyNTUsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzE2LFdlZCA5IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsNjAyNzYwLjU5MzE0OTMxNjcsNjE2MTk3LjM1MjI1ODQzOTEsOTY3NDUxLjk5NTY3Mjc3MTcsODM5ODQuMCw1MzU3NjkuODM5MjA3NzQ1NSwxMjUyODYwLjUzMDE5NTYzNyw1MzE2NDQuMjUzMDIwMTczNiwxNTM5ODc2LjkxNDI2MzMyODUsMC4wLDUxMTEzMC4zMDQ4MjEzNjQ0NywxNjYzOTc3LjQ5OTE4NTczNDcsNTQ2NjM4LjI0MzcyODAxNDIsODIwNjAzLjI0ODkxNTA4NTYsOTEzMzQzLjQ0NTgzMDUwNzIsMTEzMTIzNy4yODkyNjgwMzIsMTExMzU0OS4xNDExMDM0NjYsNTQ0OTI3LjM5MjY2MzE3MTYsOTY2Mi4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMjQzNzg2LjAsNDQzOTc0LjAsNzk1MTM3LjAsODQ1NDc0LjAsMC4wLDAuMCwyNzI4OTUuMCwwLjAsMC4wLDAuMCwyNDM0NjAuMCw4MDQ4NzQuMCw2OTU0NDAuNjM4MTczNTI4MSw0OTc1MDYuMCw1NjEzMjYuMCw3NzY2MDAuMCwyNDY1OTI1LjAsMzAwMjk3NC4wLDEyOTM0NjUuMCw4Ljc5MjU0ODIwOTA3NTk1NUUtNiwxMzM3Mzg2LjAsODk2NTAuMCw0MTE5OTQuMCwxOTM5MDk2LjAsNTk4MDc2LjAsNDMyNDAzLjAsNzI5ODQ1LjAsMzQyODIyLjAsNjI4NzkzLjAsMjM5NjIzLjAsODY2MzcyLjgzODk2MDMzMDUsMjMyMDk5Mi4zNzk5NzkyMzA1LDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxNyxUaHUgMTAgRmViIDExLDAuMCwwLjAsMC4wLDAuMCw1OTQ5NDguODMxNTg2NDA5OCw1Mjc1MzMuNzYwNDk2NDUyMSwyNDc2OC4wNDgzNjIyODI4MDMsODM5ODQuMCw1MzU3NjkuMDE3NzUxMTQ0LDEyNDc3NjAuODQ4ODQ3NDE5Nyw1MzE2MjUuNjE5MDE2NzA4OSwxMDIzODYzLjI4Nzg0OTM5OTMsMS43NzkzNjA0OTg4MTEzNjQ0RS0xMCw1MDk1NzEuMzE4MzQzNTU2MzcsMTE3Nzc4MC4zMzcwMjU1OTQsNTM2MjQ0LjI5NTExMjExNzcsNzgwNjgyLjMwNDAxNDg1MzYsODI3ODAyLjgyNTQwOTU5NzYsOTYxNjI4LjI1NzY0ODM3Myw3NTU0OTcuOTE2Mzc1MDE3OCwyNzU3MzQuOTMwOTczODU4MTcsOTY2Mi4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCw3LjE3MDM2MDYyNTM5MTQ5RS0xMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwyNDM3ODYuMCw0NDM5NzQuMCw3OTUxMzcuMCw4NDU0NzQuMCwwLjAsMC4wLDI3Mjg5NS4wLDAuMCwwLjAsMC4wLDI0MzQ2MC4wLDgwNDg3NC4wLDQ1ODkwNy40OTg2MzM2NDIyLDQ5NzUwNi4wLDU2MTMyNi4wLDc3NjYwMC4wLDI0NjU5MjUuMCwzMDAyOTc0LjAsMTI5MzQ2NS4wLDAuMCwxMzM3Mzg2LjAsODk2NTAuMCw0MTE5OTQuMCwxOTM5MDk2LjAsNTk4MDc2LjAsNDMyNDAzLjAsNzI5ODQ1LjAsMzQyODIyLjAsNjI4NzkzLjAsMjM5NjIzLjAsODY2MzcyLjAxNjE2MDQyNzYsMjMxOTE5Mi43NzY3MjgxNjA3LDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxOCxGcmkgMTEgRmViIDExLDAuMCwwLjAsMC4wLDAuMCw0MTI4NTYuMDUzNDE0MjU5ODYsMTQwNDkuODA0MzI5NTU1NjEzLDAuMCw4Mzk4NC4wLDUzNTczNi44ODcwNjQ4MjI2LDExMDU4MzguMjIyMDQyODI1OCw1MzA5NTAuOTE2Mjg0NjQ5NCwwLjAsMC4wLDQ2NzY0OS4zNTY5Mjg0MTcwNSwxNS42MzczMjg3MDY1MzQ0MTksMzA0NTM3LjU0NDAxODU1NDczLDIzMDc4NS41ODAwNzI3NTcxLDc2MDIyLjIzODAwNTY0OTMzLDEyOTQwLjk2ODQyNjkwOTk3NCwwLjAsMC4wLDk2NjIuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMy42MjA0NzYxMDk2MTU5OTdFLTEyLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDI0Mzc4Ni4wLDQ0Mzk3NC4wLDc5NTEzNy4wLDg0NTQ3NC4wLDAuMCwwLjAsMjcyODk1LjAsMC4wLDAuMCwwLjAsMjQzNDYwLjAsODA0ODc0LjAsMC4wLDQ5NzUwNi4wLDU2MTMyNi4wLDc3NjYwMC4wLDI0NjU5MjUuMCwzMDAyOTc0LjAsMTI5MzQ2NS4wLDkuOTg0NDQxNzI0NTM1NDE0RS0xMywxMzM3Mzg2LjAsODk2NTAuMCw0MTE5OTQuMCwxOTM5MDk2LjAsNTk4MDc2LjAsNDMyNDAzLjAsNzI5ODQ1LjAsMzQyODIyLjAsNjI4NzkzLjAsMjM5NjIzLjAsODY2MzM5LjgyNDIwMzc2MTMsMjI2MjYwMC42NDIyOTY1MDU2LDAuMCwwLjAsMC4wLDAuMCwwLjAsNy40NzMxODc0MzM5MDM0MzNFLTEwCisxOSxTYXQgMTIgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCw4Mzk4NC4wLDUzNDQ3Ni4xMzk4NTI3NDUyLDE1MTY4LjI2ODA5MDc2NDg3Niw1MTA0OTYuMzg1Nzg4Njk1NjUsMC4wLDAuMCw0NTg0MS45MDE3Mzc2MDQ3NTYsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDk2NjIuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMi40MjQ2NDE5Njc2NjQyODhFLTE2LDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDI0Mzc4Ni4wLDQ0Mzk3NC4wLDc5NTEzNy4wLDg0NTQ3NC4wLDAuMCwwLjAsMjcyODk1LjAsMC4wLDAuMCwwLjAsMjQzNDYwLjAsODA0ODc0LjAsMC4wLDQ5NzUwNi4wLDU2MTMyNi4wLDc3NjYwMC4wLDI0NjU5MjUuMCwzMDAyOTc0LjAsMTI5MzQ2NS4wLDcuNzI3NjU2ODk2NDE3NTc3RS0xNywxMzM3Mzg2LjAsODk2NTAuMCw0MTE5OTQuMCwxOTM5MDk2LjAsNTk4MDc2LjAsNDMyNDAzLjAsNzI5ODQ1LjAsMzQyODIyLjAsNjI4NzkzLjAsMjM5NjIzLjAsODY1MDc1LjY0OTU2MDE4OTcsMTE1NTg4Ny41NTQ2MjEzOTc1LDAuMCwwLjAsMC4wLDAuMCwwLjAsOC4zNDE1MzI1MTg0MDExMkUtMTMKKzIwLFN1biAxMyBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDgzOTg0LjAsNTE1ODM3LjQwNTAwNDM0ODUsMC4wLDI5MzI2My4zMDk2MTI0MDMzLDAuMCwxLjM5NDMzMjA3MDk2ODY0NzJFLTIwLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsOTY2Mi4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMjQzNzg2LjAsNDQzOTc0LjAsNzk1MTM3LjAsODQ1NDc0LjAsMC4wLDAuMCwyNzI4OTUuMCwwLjAsMC4wLDAuMCwyNDM0NjAuMCw4MDQ4NzQuMCwwLjAsNDk3NTA2LjAsNTYxMzI2LjAsNzc2NjAwLjAsMjQ2NTkyNS4wLDMwMDI5NzQuMCwxMjkzNDY1LjAsMy44ODc0MDA5NTc4NjM5MzM2RS0xOSwxMzM3Mzg2LjAsODk2NTAuMCw0MTE5OTQuMCwxOTM5MDk2LjAsNTk4MDc2LjAsNDMyNDAzLjAsNzI5ODQ1LjAsMzQyODIyLjAsNjI4NzkzLjAsMjM5NjIzLjAsODQ2Mjk5LjIyOTk4MzAwNzgsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyMSxNb24gMTQgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCw4Mzk4NC4wLDM3NDU3Mi40OTI4ODA2MzQ0NCwwLjAsMC4wLDAuMCwxLjIyNjk3MzY5MDgwNjY0NzZFLTI2LDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsOTY2Mi4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMjQzNzg2LjAsNDQzOTc0LjAsNzk1MTM3LjAsODQ1NDc0LjAsMC4wLDAuMCwyNzI4OTUuMCwwLjAsMC4wLDAuMCwyNDM0NjAuMCw4MDQ4NzQuMCwwLjAsNDk3NTA2LjAsNTYxMzI2LjAsNzc2NjAwLjAsMjQ2NTkyNS4wLDMwMDI5NzQuMCwxMjkzNDY1LjAsNC45MTY5Njk5MTUwNjYwNjA0RS0yMywxMzM3Mzg2LjAsODk2NTAuMCw0MTE5OTQuMCwxOTM5MDk2LjAsNTk4MDc2LjAsNDMyNDAzLjAsNzI5ODQ1LjAsMzQyODIyLjAsNjI4NzkzLjAsMjM5NjIzLjAsNjk4Njk2LjI4MDc5OTc0OTMsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyMixUdWUgMTUgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCw4Mzk4NC4wLDAuMCwwLjAsMC4wLDAuMCwxLjA4NjU1MDY1MDM0MTY3ODNFLTI3LDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsOTY2Mi4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCw1LjI5NTA4NzIxOTE5MjQ4RS0yNiwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwyNDM3ODYuMCw0NDM5NzQuMCw3OTUxMzcuMCw4NDU0NzQuMCwwLjAsMC4wLDI3Mjg5NS4wLDAuMCwwLjAsMC4wLDI0MzQ2MC4wLDgwNDg3NC4wLDAuMCw0OTc1MDYuMCw1NjEzMjYuMCw3NzY2MDAuMCwyNDY1OTI1LjAsMzAwMjk3NC4wLDEyOTM0NjUuMCwyLjc5NjQ5NTU5MzA1NDkyOEUtMjUsMTMzNzM4Ni4wLDg5NjUwLjAsNDExOTk0LjAsMTkzOTA5Ni4wLDU5ODA3Ni4wLDQzMjQwMy4wLDcyOTg0NS4wLDM0MjgyMi4wLDYyODc5My4wLDIzOTYyMy4wLDEwNDk1OS4wODM2MDAwMzQ2OCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwxLjUzMTAyMTczMDU1OTY5OEUtMjQKKzIzLFdlZCAxNiBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDgzOTg0LjAsMC4wLDAuMCwwLjAsMC4wLDQuMTk0Nzg0MjIzMTczNDY0RS0yOSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDk2NjIuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMi44MjE5OTIwMjgzNjkzMTQ1RS0yNiwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwyNDM3ODYuMCw0NDM5NzQuMCw3OTUxMzcuMCw4NDU0NzQuMCwwLjAsMC4wLDI3Mjg5NS4wLDAuMCwwLjAsMC4wLDI0MzQ2MC4wLDgwNDg3NC4wLDAuMCw0OTc1MDYuMCw1NjEzMjYuMCw3NzY2MDAuMCwyNDY1OTI1LjAsMzAwMjk3NC4wLDEyOTM0NjUuMCwwLjAsMTMzNzM4Ni4wLDg5NjUwLjAsNDExOTk0LjAsMTkzOTA5Ni4wLDU5ODA3Ni4wLDQzMjQwMy4wLDcyOTg0NS4wLDM0MjgyMi4wLDYyODc5My4wLDIzOTYyMy4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwxLjU0MzgyNDk2OTA4MDYwNjJFLTI0CisyNCxUaHUgMTcgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCw4Mzk4NC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCw5NjYyLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwyNDM3ODYuMCw0NDM5NzQuMCw3OTUxMzcuMCw4NDU0NzQuMCwwLjAsMC4wLDI3Mjg5NS4wLDAuMCwwLjAsMC4wLDI0MzQ2MC4wLDgwNDg3NC4wLDAuMCw0OTc1MDYuMCw1NjEzMjYuMCw3NzY2MDAuMCwyNDY1OTI1LjAsMzAwMjk3NC4wLDEyOTM0NjUuMCwwLjAsMTMzNzM4Ni4wLDg5NjUwLjAsNDExOTk0LjAsMTkzOTA5Ni4wLDU5ODA3Ni4wLDQzMjQwMy4wLDcyOTg0NS4wLDM0MjgyMi4wLDYyODc5My4wLDIzOTYyMy4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCw5LjkxOTY3NTkyMzUzNTczOUUtMjYKKzI1LEZyaSAxOCBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDgzOTg0LjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDk2NjIuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMi42Mzg4NjI4NDgxMDgxMDg0RS0yNywwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwyNDM3ODYuMCw0NDM5NzQuMCw3OTUxMzcuMCw4NDU0NzQuMCwwLjAsMC4wLDI3Mjg5NS4wLDAuMCwwLjAsMC4wLDI0MzQ2MC4wLDgwNDg3NC4wLDAuMCw0OTc1MDYuMCw1NjEzMjYuMCw3NzY2MDAuMCwyNDY1OTI1LjAsMzAwMjk3NC4wLDEyOTM0NjUuMCwxLjM3MTc0NTcyMzMyNTMwMjdFLTI2LDEzMzczODYuMCw4OTY1MC4wLDQxMTk5NC4wLDE5MzkwOTYuMCw1OTgwNzYuMCw0MzI0MDMuMCw3Mjk4NDUuMCwzNDI4MjIuMCw2Mjg3OTMuMCwyMzk2MjMuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMS4xNTI1NDkxNTAwMjgxNDk1RS0yNQorMjYsU2F0IDE5IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsODM5ODQuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsOTY2Mi4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwxLjI0MTkwMzY2NzExNTI2NDFFLTI3LDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDI0Mzc4Ni4wLDQ0Mzk3NC4wLDc5NTEzNy4wLDg0NTQ3NC4wLDAuMCwwLjAsMjcyODk1LjAsMC4wLDAuMCwwLjAsMjQzNDYwLjAsODA0ODc0LjAsMC4wLDQ5NzUwNi4wLDU2MTMyNi4wLDc3NjYwMC4wLDI0NjU5MjUuMCwzMDAyOTc0LjAsMTI5MzQ2NS4wLDAuMCwxMzM3Mzg2LjAsODk2NTAuMCw0MTE5OTQuMCwxOTM5MDk2LjAsNTk4MDc2LjAsNDMyNDAzLjAsNzI5ODQ1LjAsMzQyODIyLjAsNjI4NzkzLjAsMjM5NjIzLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDYuNzk3MDQxNzUyMTczMjUzRS0yNgorMjcsU3VuIDIwIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsODM5ODQuMCwwLjAsMC4wLDAuMCwwLjAsMS4zMjY2NjQ4MTg4MjE0MTgzRS0yOSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDk2NjIuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMS40NTgwODQxMjY4ODMwMzQzRS0yNywwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwyNDM3ODYuMCw0NDM5NzQuMCw3OTUxMzcuMCw4NDU0NzQuMCwwLjAsMC4wLDI3Mjg5NS4wLDAuMCwwLjAsMC4wLDI0MzQ2MC4wLDgwNDg3NC4wLDAuMCw0OTc1MDYuMCw1NjEzMjYuMCw3NzY2MDAuMCwyNDY1OTI1LjAsMzAwMjk3NC4wLDEyOTM0NjUuMCwzLjM3MzcyNDM5MzEyNDYxOEUtMjcsMTMzNzM4Ni4wLDg5NjUwLjAsNDExOTk0LjAsMTkzOTA5Ni4wLDU5ODA3Ni4wLDQzMjQwMy4wLDcyOTg0NS4wLDM0MjgyMi4wLDYyODc5My4wLDIzOTYyMy4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCw2Ljg1MjU2OTk1MzEzNDQzOUUtMjYKKzI4LE1vbiAyMSBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDgzOTg0LjAsMC4wLDAuMCwwLjAsMC4wLDQuMTkwNjM5MDM2MjI2MTY0RS0zMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDk2NjIuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMS4xMjg5NjAzMTMyNjE5NThFLTI3LDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDI0Mzc4Ni4wLDQ0Mzk3NC4wLDc5NTEzNy4wLDg0NTQ3NC4wLDAuMCwwLjAsMjcyODk1LjAsMC4wLDAuMCwwLjAsMjQzNDYwLjAsODA0ODc0LjAsMC4wLDQ5NzUwNi4wLDU2MTMyNi4wLDc3NjYwMC4wLDI0NjU5MjUuMCwzMDAyOTc0LjAsMTI5MzQ2NS4wLDEuNTE0OTc3MTk4MDE2OTEyMkUtMjcsMTMzNzM4Ni4wLDg5NjUwLjAsNDExOTk0LjAsMTkzOTA5Ni4wLDU5ODA3Ni4wLDQzMjQwMy4wLDcyOTg0NS4wLDM0MjgyMi4wLDYyODc5My4wLDIzOTYyMy4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCw1LjY1MzI1NDAzNzA4MzczOUUtMjYKKzI5LFR1ZSAyMiBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDgzOTg0LjAsMC4wLDAuMCwwLjAsMC4wLDMuMzcxODA1MjUyOTgzNDgzNEUtMzAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCw5NjYyLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDEuMTIxMjM0ODQ4NTI4MDczMkUtMjcsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMjQzNzg2LjAsNDQzOTc0LjAsNzk1MTM3LjAsODQ1NDc0LjAsMC4wLDAuMCwyNzI4OTUuMCwwLjAsMC4wLDAuMCwyNDM0NjAuMCw4MDQ4NzQuMCwwLjAsNDk3NTA2LjAsNTYxMzI2LjAsNzc2NjAwLjAsMjQ2NTkyNS4wLDMwMDI5NzQuMCwxMjkzNDY1LjAsMS43ODg0OTU5NTE3MzU0MjQ1RS0yNywxMzM3Mzg2LjAsODk2NTAuMCw0MTE5OTQuMCwxOTM5MDk2LjAsNTk4MDc2LjAsNDMyNDAzLjAsNzI5ODQ1LjAsMzQyODIyLjAsNjI4NzkzLjAsMjM5NjIzLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDUuNDcxNjg2Mjk5NjQ1MzY2RS0yNgorMzAsV2VkIDIzIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsODM5ODQuMCwwLjAsMC4wLDAuMCwwLjAsMS45NjgxODA1NzUwMDYzMDgzRS0zMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDk2NjIuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMS4wMzUwNDE4Mzg1OTUyNTQ4RS0yNywwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwyNDM3ODYuMCw0NDM5NzQuMCw3OTUxMzcuMCw4NDU0NzQuMCwwLjAsMC4wLDI3Mjg5NS4wLDAuMCwwLjAsMC4wLDI0MzQ2MC4wLDgwNDg3NC4wLDAuMCw0OTc1MDYuMCw1NjEzMjYuMCw3NzY2MDAuMCwyNDY1OTI1LjAsMzAwMjk3NC4wLDEyOTM0NjUuMCwxLjM4MDg3NDU3MTgyNjAxMDZFLTI3LDEzMzczODYuMCw4OTY1MC4wLDQxMTk5NC4wLDE5MzkwOTYuMCw1OTgwNzYuMCw0MzI0MDMuMCw3Mjk4NDUuMCwzNDI4MjIuMCw2Mjg3OTMuMCwyMzk2MjMuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsNS4xMzcxNjAxNzg3NjUzNjNFLTI2CiszMSxUaHUgMjQgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCw4Mzk4NC4wLDAuMCwwLjAsMC4wLDAuMCwyLjUyOTIwMTczMzY4NDYxN0UtMzAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCw5NjYyLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDEuMDI0MTg5NDU3ODgyNzEwOEUtMjcsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMjQzNzg2LjAsNDQzOTc0LjAsNzk1MTM3LjAsODQ1NDc0LjAsMC4wLDAuMCwyNzI4OTUuMCwwLjAsMC4wLDAuMCwyNDM0NjAuMCw4MDQ4NzQuMCwwLjAsNDk3NTA2LjAsNTYxMzI2LjAsNzc2NjAwLjAsMjQ2NTkyNS4wLDMwMDI5NzQuMCwxMjkzNDY1LjAsMS40NDg3MzYxMDUwMjkzNzcyRS0yNywxMzM3Mzg2LjAsODk2NTAuMCw0MTE5OTQuMCwxOTM5MDk2LjAsNTk4MDc2LjAsNDMyNDAzLjAsNzI5ODQ1LjAsMzQyODIyLjAsNjI4NzkzLjAsMjM5NjIzLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDUuMDQ1MjgyNzAyNjg2NzYxNkUtMjYKKzMyLEZyaSAyNSBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDgzOTg0LjAsMC4wLDAuMCwwLjAsMC4wLDIuNDQ2MDQ3MTQzODQ5MzQ0OEUtMzAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCw5NjYyLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDEuMDA4MTA3MDQ0NDg0NDU3RS0yNywwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwyNDM3ODYuMCw0NDM5NzQuMCw3OTUxMzcuMCw4NDU0NzQuMCwwLjAsMC4wLDI3Mjg5NS4wLDAuMCwwLjAsMC4wLDI0MzQ2MC4wLDgwNDg3NC4wLDAuMCw0OTc1MDYuMCw1NjEzMjYuMCw3NzY2MDAuMCwyNDY1OTI1LjAsMzAwMjk3NC4wLDEyOTM0NjUuMCwxLjQxNjQ1NjQzNjI5Mjk1NTVFLTI3LDEzMzczODYuMCw4OTY1MC4wLDQxMTk5NC4wLDE5MzkwOTYuMCw1OTgwNzYuMCw0MzI0MDMuMCw3Mjk4NDUuMCwzNDI4MjIuMCw2Mjg3OTMuMCwyMzk2MjMuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsNC45NjEzNDAyNDcyMjA2MTdFLTI2CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNFSVJfRkRfUmVmZXJlbmNlL1Rlc3RTRUlSL3J1bnBhcmFtZXRlcnMuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTRUlSX0ZEX1JlZmVyZW5jZS9UZXN0U0VJUi9ydW5wYXJhbWV0ZXJzLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ODEzMjEyCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTRUlSX0ZEX1JlZmVyZW5jZS9UZXN0U0VJUi9ydW5wYXJhbWV0ZXJzLmNzdgpAQCAtMCwwICsxLDIgQEAKK2Rpc2Vhc2VOYW1lLHBvcHVsYXRpb25JZGVudGlmaWVyLHRpbWVQZXJpb2QsZnJlcXVlbmN5RGVwZW5kZW50LHJlZmVyZW5jZVBvcHVsYXRpb25EZW5zaXR5LHJvYWROZXR3b3JrSW5mZWN0aW91c1Byb3BvcnRpb24sY2hhcmFjdGVyaXN0aWNNaXhpbmdEaXN0YW5jZSx0cmFuc21pc3Npb25SYXRlLG5vbkxpbmVhcml0eUNvZWZmaWNpZW50LHJlY292ZXJ5UmF0ZSxpbmZlY3Rpb3VzTW9ydGFsaXR5UmF0ZSxpbW11bml0eUxvc3NSYXRlLGluY3ViYXRpb25SYXRlCitUZXN0U0VJUixodW1hbiw4NjQwMDAwMCx0cnVlLDEwMC4wLDAuMDEsMi4yNSw0NS4wLDEuMCwwLjQsMC4wLDAuMCwwLjQKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNFSVJfRkRfUmVmZXJlbmNlL2F1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwvaHVtYW4vQmlydGhzXzAuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTRUlSX0ZEX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL2h1bWFuL0JpcnRoc18wLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YjEzOTBjCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTRUlSX0ZEX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL2h1bWFuL0JpcnRoc18wLmNzdgpAQCAtMCwwICsxLDMzIEBACitpdGVyYXRpb24sdGltZSxzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9ub2RlL3RyYW5zcG9ydC9waXBlL1BITAorMSxUdWUgMjUgSmFuIDExLDAuMAorMixXZWQgMjYgSmFuIDExLDAuMAorMyxUaHUgMjcgSmFuIDExLDAuMAorNCxGcmkgMjggSmFuIDExLDAuMAorNSxTYXQgMjkgSmFuIDExLDAuMAorNixTdW4gMzAgSmFuIDExLDAuMAorNyxNb24gMzEgSmFuIDExLDAuMAorOCxUdWUgMSBGZWIgMTEsMC4wCis5LFdlZCAyIEZlYiAxMSwwLjAKKzEwLFRodSAzIEZlYiAxMSwwLjAKKzExLEZyaSA0IEZlYiAxMSwwLjAKKzEyLFNhdCA1IEZlYiAxMSwwLjAKKzEzLFN1biA2IEZlYiAxMSwwLjAKKzE0LE1vbiA3IEZlYiAxMSwwLjAKKzE1LFR1ZSA4IEZlYiAxMSwwLjAKKzE2LFdlZCA5IEZlYiAxMSwwLjAKKzE3LFRodSAxMCBGZWIgMTEsMC4wCisxOCxGcmkgMTEgRmViIDExLDAuMAorMTksU2F0IDEyIEZlYiAxMSwwLjAKKzIwLFN1biAxMyBGZWIgMTEsMC4wCisyMSxNb24gMTQgRmViIDExLDAuMAorMjIsVHVlIDE1IEZlYiAxMSwwLjAKKzIzLFdlZCAxNiBGZWIgMTEsMC4wCisyNCxUaHUgMTcgRmViIDExLDAuMAorMjUsRnJpIDE4IEZlYiAxMSwwLjAKKzI2LFNhdCAxOSBGZWIgMTEsMC4wCisyNyxTdW4gMjAgRmViIDExLDAuMAorMjgsTW9uIDIxIEZlYiAxMSwwLjAKKzI5LFR1ZSAyMiBGZWIgMTEsMC4wCiszMCxXZWQgMjMgRmViIDExLDAuMAorMzEsVGh1IDI0IEZlYiAxMSwwLjAKKzMyLEZyaSAyNSBGZWIgMTEsMC4wCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNFSVJfRkRfUmVmZXJlbmNlL2F1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwvaHVtYW4vQmlydGhzXzEuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTRUlSX0ZEX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL2h1bWFuL0JpcnRoc18xLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NGMwMjMyCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTRUlSX0ZEX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL2h1bWFuL0JpcnRoc18xLmNzdgpAQCAtMCwwICsxLDMzIEBACitpdGVyYXRpb24sdGltZSxzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9ub2RlL3RyYW5zcG9ydC9waXBlL1BILTExLHN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL25vZGUvdHJhbnNwb3J0L3BpcGUvUEgtMyxzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9ub2RlL3RyYW5zcG9ydC9waXBlL1BILTcsc3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vbm9kZS90cmFuc3BvcnQvcGlwZS9QSC1OQ1IKKzEsVHVlIDI1IEphbiAxMSwwLjAsMC4wLDAuMCwwLjAKKzIsV2VkIDI2IEphbiAxMSwwLjAsMC4wLDAuMCwwLjAKKzMsVGh1IDI3IEphbiAxMSwwLjAsMC4wLDAuMCwwLjAKKzQsRnJpIDI4IEphbiAxMSwwLjAsMC4wLDAuMCwwLjAKKzUsU2F0IDI5IEphbiAxMSwwLjAsMC4wLDAuMCwwLjAKKzYsU3VuIDMwIEphbiAxMSwwLjAsMC4wLDAuMCwwLjAKKzcsTW9uIDMxIEphbiAxMSwwLjAsMC4wLDAuMCwwLjAKKzgsVHVlIDEgRmViIDExLDAuMCwwLjAsMC4wLDAuMAorOSxXZWQgMiBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wCisxMCxUaHUgMyBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wCisxMSxGcmkgNCBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wCisxMixTYXQgNSBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wCisxMyxTdW4gNiBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wCisxNCxNb24gNyBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wCisxNSxUdWUgOCBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wCisxNixXZWQgOSBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wCisxNyxUaHUgMTAgRmViIDExLDAuMCwwLjAsMC4wLDAuMAorMTgsRnJpIDExIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAKKzE5LFNhdCAxMiBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wCisyMCxTdW4gMTMgRmViIDExLDAuMCwwLjAsMC4wLDAuMAorMjEsTW9uIDE0IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAKKzIyLFR1ZSAxNSBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wCisyMyxXZWQgMTYgRmViIDExLDAuMCwwLjAsMC4wLDAuMAorMjQsVGh1IDE3IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAKKzI1LEZyaSAxOCBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wCisyNixTYXQgMTkgRmViIDExLDAuMCwwLjAsMC4wLDAuMAorMjcsU3VuIDIwIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAKKzI4LE1vbiAyMSBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wCisyOSxUdWUgMjIgRmViIDExLDAuMCwwLjAsMC4wLDAuMAorMzAsV2VkIDIzIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAKKzMxLFRodSAyNCBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wCiszMixGcmkgMjUgRmViIDExLDAuMCwwLjAsMC4wLDAuMApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTRUlSX0ZEX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL2h1bWFuL0JpcnRoc18yLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0VJUl9GRF9SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9odW1hbi9CaXJ0aHNfMi5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTMwZDZlMQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0VJUl9GRF9SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9odW1hbi9CaXJ0aHNfMi5jc3YKQEAgLTAsMCArMSwzMyBAQAoraXRlcmF0aW9uLHRpbWUsUEgtMS1HNjQwMDAxLFBILTEtRzY0MDAwMixQSC0xLUc2NDAwMDMsUEgtMS1HNjQwMDA0LFBILTEwLUc2NTAwMDEsUEgtMTAtRzY1MDAwMixQSC0xMC1HNjUwMDAzLFBILTEwLUc2NTAwMDQsUEgtMTAtRzY1MDAwNSxQSC0xMC1HNjUwMDA2LFBILTEwLUc2NTAwMDcsUEgtMTEtRzY2MDAwMSxQSC0xMS1HNjYwMDAyLFBILTExLUc2NjAwMDMsUEgtMTEtRzY2MDAwNCxQSC0xMS1HNjYwMDA1LFBILTEyLUc2NzAwMDEsUEgtMTItRzY3MDAwMixQSC0xMi1HNjcwMDAzLFBILTEyLUc2NzAwMDQsUEgtMTItRzY3MDAwNSxQSC0yLUc2ODAwMDEsUEgtMi1HNjgwMDAyLFBILTItRzY4MDAwMyxQSC0yLUc2ODAwMDQsUEgtMi1HNjgwMDA1LFBILTMtRzY5MDAwMSxQSC0zLUc2OTAwMDIsUEgtMy1HNjkwMDAzLFBILTMtRzY5MDAwNCxQSC0zLUc2OTAwMDUsUEgtMy1HNjkwMDA2LFBILTQtRzcwMDAwMSxQSC00LUc3MDAwMDIsUEgtNC1HNzAwMDAzLFBILTQtRzcwMDAwNCxQSC00LUc3MDAwMDUsUEgtNC1HNzAwMDA2LFBILTQtRzcwMDAwNyxQSC00LUc3MDAwMDgsUEgtNC1HNzAwMDA5LFBILTQtRzcwMDAxMCxQSC00LUc3MDAwMTEsUEgtNS1HNzEwMDAxLFBILTUtRzcxMDAwMixQSC01LUc3MTAwMDMsUEgtNS1HNzEwMDA0LFBILTUtRzcxMDAwNSxQSC01LUc3MTAwMDYsUEgtNi1HNzIwMDAxLFBILTYtRzcyMDAwMixQSC02LUc3MjAwMDMsUEgtNi1HNzIwMDA0LFBILTYtRzcyMDAwNSxQSC03LUc3MzAwMDEsUEgtNy1HNzMwMDAyLFBILTctRzczMDAwMyxQSC03LUc3MzAwMDQsUEgtOC1HNzQwMDAxLFBILTgtRzc0MDAwMixQSC04LUc3NDAwMDMsUEgtOC1HNzQwMDA0LFBILTgtRzc0MDAwNSxQSC05LUc3NTAwMDEsUEgtOS1HNzUwMDAyLFBILTktRzc1MDAwMyxQSC05LUc3NTAwMDQsUEgtOS1HNzUwMDA1LFBILUNBUi1HMjMwMDAxLFBILUNBUi1HMjMwMDAyLFBILUNBUi1HMjMwMDAzLFBILUNBUi1HMjMwMDA0LFBILUNBUi1HMjMwMDA1LFBILU5DUi1HNTIwMDAxCisxLFR1ZSAyNSBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMixXZWQgMjYgSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzMsVGh1IDI3IEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCis0LEZyaSAyOCBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorNSxTYXQgMjkgSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzYsU3VuIDMwIEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCis3LE1vbiAzMSBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorOCxUdWUgMSBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorOSxXZWQgMiBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTAsVGh1IDMgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzExLEZyaSA0IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxMixTYXQgNSBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTMsU3VuIDYgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzE0LE1vbiA3IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxNSxUdWUgOCBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTYsV2VkIDkgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzE3LFRodSAxMCBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTgsRnJpIDExIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxOSxTYXQgMTIgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzIwLFN1biAxMyBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjEsTW9uIDE0IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyMixUdWUgMTUgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzIzLFdlZCAxNiBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjQsVGh1IDE3IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyNSxGcmkgMTggRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzI2LFNhdCAxOSBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjcsU3VuIDIwIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyOCxNb24gMjEgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzI5LFR1ZSAyMiBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMzAsV2VkIDIzIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCiszMSxUaHUgMjQgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzMyLEZyaSAyNSBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTRUlSX0ZEX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL2h1bWFuL0NvdW50XzAuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTRUlSX0ZEX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL2h1bWFuL0NvdW50XzAuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZlMDUwOTYKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNFSVJfRkRfUmVmZXJlbmNlL2F1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwvaHVtYW4vQ291bnRfMC5jc3YKQEAgLTAsMCArMSwzMyBAQAoraXRlcmF0aW9uLHRpbWUsc3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vbm9kZS90cmFuc3BvcnQvcGlwZS9QSEwKKzEsVHVlIDI1IEphbiAxMSw0NzkzMi41NDc5NDUyMDU0ODYKKzIsV2VkIDI2IEphbiAxMSw0NzkzMi41NDc5NDUyMDU0ODYKKzMsVGh1IDI3IEphbiAxMSw0NzkzMi41NDc5NDUyMDU0ODYKKzQsRnJpIDI4IEphbiAxMSw0NzkzMi41NDc5NDUyMDU0ODYKKzUsU2F0IDI5IEphbiAxMSw0NzkzMi41NDc5NDUyMDU0ODYKKzYsU3VuIDMwIEphbiAxMSw0NzkzMi41NDc5NDUyMDU0ODYKKzcsTW9uIDMxIEphbiAxMSw0NzkzMi41NDc5NDUyMDU0ODYKKzgsVHVlIDEgRmViIDExLDQ3OTMyLjU0Nzk0NTIwNTQ4NgorOSxXZWQgMiBGZWIgMTEsNDc5MzIuNTQ3OTQ1MjA1NDg2CisxMCxUaHUgMyBGZWIgMTEsNDc5MzIuNTQ3OTQ1MjA1NDg2CisxMSxGcmkgNCBGZWIgMTEsNDc5MzIuNTQ3OTQ1MjA1NDg2CisxMixTYXQgNSBGZWIgMTEsNDc5MzIuNTQ3OTQ1MjA1NDg2CisxMyxTdW4gNiBGZWIgMTEsNDc5MzIuNTQ3OTQ1MjA1NDg2CisxNCxNb24gNyBGZWIgMTEsNDc5MzIuNTQ3OTQ1MjA1NDg2CisxNSxUdWUgOCBGZWIgMTEsNDc5MzIuNTQ3OTQ1MjA1NDg2CisxNixXZWQgOSBGZWIgMTEsNDc5MzIuNTQ3OTQ1MjA1NDg2CisxNyxUaHUgMTAgRmViIDExLDQ3OTMyLjU0Nzk0NTIwNTQ4NgorMTgsRnJpIDExIEZlYiAxMSw0NzkzMi41NDc5NDUyMDU0ODYKKzE5LFNhdCAxMiBGZWIgMTEsNDc5MzIuNTQ3OTQ1MjA1NDg2CisyMCxTdW4gMTMgRmViIDExLDQ3OTMyLjU0Nzk0NTIwNTQ4NgorMjEsTW9uIDE0IEZlYiAxMSw0NzkzMi41NDc5NDUyMDU0ODYKKzIyLFR1ZSAxNSBGZWIgMTEsNDc5MzIuNTQ3OTQ1MjA1NDg2CisyMyxXZWQgMTYgRmViIDExLDQ3OTMyLjU0Nzk0NTIwNTQ4NgorMjQsVGh1IDE3IEZlYiAxMSw0NzkzMi41NDc5NDUyMDU0ODYKKzI1LEZyaSAxOCBGZWIgMTEsNDc5MzIuNTQ3OTQ1MjA1NDg2CisyNixTYXQgMTkgRmViIDExLDQ3OTMyLjU0Nzk0NTIwNTQ4NgorMjcsU3VuIDIwIEZlYiAxMSw0NzkzMi41NDc5NDUyMDU0ODYKKzI4LE1vbiAyMSBGZWIgMTEsNDc5MzIuNTQ3OTQ1MjA1NDg2CisyOSxUdWUgMjIgRmViIDExLDQ3OTMyLjU0Nzk0NTIwNTQ4NgorMzAsV2VkIDIzIEZlYiAxMSw0NzkzMi41NDc5NDUyMDU0ODYKKzMxLFRodSAyNCBGZWIgMTEsNDc5MzIuNTQ3OTQ1MjA1NDg2CiszMixGcmkgMjUgRmViIDExLDQ3OTMyLjU0Nzk0NTIwNTQ4NgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTRUlSX0ZEX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL2h1bWFuL0NvdW50XzEuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTRUlSX0ZEX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL2h1bWFuL0NvdW50XzEuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUzY2U4YTQKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNFSVJfRkRfUmVmZXJlbmNlL2F1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwvaHVtYW4vQ291bnRfMS5jc3YKQEAgLTAsMCArMSwzMyBAQAoraXRlcmF0aW9uLHRpbWUsc3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vbm9kZS90cmFuc3BvcnQvcGlwZS9QSC0xMSxzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9ub2RlL3RyYW5zcG9ydC9waXBlL1BILTMsc3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vbm9kZS90cmFuc3BvcnQvcGlwZS9QSC03LHN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL25vZGUvdHJhbnNwb3J0L3BpcGUvUEgtTkNSCisxLFR1ZSAyNSBKYW4gMTEsMjguOTk0NTIwNTQ3OTQ1MjA3LDE0MTIuOTQyNDY1NzUzNDI0Niw3MzU3Ljg0MzgzNTYxNjQzOSw0MDg1My44MjE5MTc4MDgyMgorMixXZWQgMjYgSmFuIDExLDI4Ljk5NDUyMDU0Nzk0NTIwNywxNDEyLjk0MjQ2NTc1MzQyNDYsNzM1Ny44NDM4MzU2MTY0MzksNDA4NTMuODIxOTE3ODA4MjIKKzMsVGh1IDI3IEphbiAxMSwyOC45OTQ1MjA1NDc5NDUyMDcsMTQxMi45NDI0NjU3NTM0MjQ2LDczNTcuODQzODM1NjE2NDM5LDQwODUzLjgyMTkxNzgwODIyCis0LEZyaSAyOCBKYW4gMTEsMjguOTk0NTIwNTQ3OTQ1MjA3LDE0MTIuOTQyNDY1NzUzNDI0Niw3MzU3Ljg0MzgzNTYxNjQzOSw0MDg1My44MjE5MTc4MDgyMgorNSxTYXQgMjkgSmFuIDExLDI4Ljk5NDUyMDU0Nzk0NTIwNywxNDEyLjk0MjQ2NTc1MzQyNDYsNzM1Ny44NDM4MzU2MTY0MzksNDA4NTMuODIxOTE3ODA4MjIKKzYsU3VuIDMwIEphbiAxMSwyOC45OTQ1MjA1NDc5NDUyMDcsMTQxMi45NDI0NjU3NTM0MjQ2LDczNTcuODQzODM1NjE2NDM5LDQwODUzLjgyMTkxNzgwODIyCis3LE1vbiAzMSBKYW4gMTEsMjguOTk0NTIwNTQ3OTQ1MjA3LDE0MTIuOTQyNDY1NzUzNDI0Niw3MzU3Ljg0MzgzNTYxNjQzOSw0MDg1My44MjE5MTc4MDgyMgorOCxUdWUgMSBGZWIgMTEsMjguOTk0NTIwNTQ3OTQ1MjA3LDE0MTIuOTQyNDY1NzUzNDI0Niw3MzU3Ljg0MzgzNTYxNjQzOSw0MDg1My44MjE5MTc4MDgyMgorOSxXZWQgMiBGZWIgMTEsMjguOTk0NTIwNTQ3OTQ1MjA3LDE0MTIuOTQyNDY1NzUzNDI0Niw3MzU3Ljg0MzgzNTYxNjQzOSw0MDg1My44MjE5MTc4MDgyMgorMTAsVGh1IDMgRmViIDExLDI4Ljk5NDUyMDU0Nzk0NTIwNywxNDEyLjk0MjQ2NTc1MzQyNDYsNzM1Ny44NDM4MzU2MTY0MzksNDA4NTMuODIxOTE3ODA4MjIKKzExLEZyaSA0IEZlYiAxMSwyOC45OTQ1MjA1NDc5NDUyMDcsMTQxMi45NDI0NjU3NTM0MjQ2LDczNTcuODQzODM1NjE2NDM5LDQwODUzLjgyMTkxNzgwODIyCisxMixTYXQgNSBGZWIgMTEsMjguOTk0NTIwNTQ3OTQ1MjA3LDE0MTIuOTQyNDY1NzUzNDI0Niw3MzU3Ljg0MzgzNTYxNjQzOSw0MDg1My44MjE5MTc4MDgyMgorMTMsU3VuIDYgRmViIDExLDI4Ljk5NDUyMDU0Nzk0NTIwNywxNDEyLjk0MjQ2NTc1MzQyNDYsNzM1Ny44NDM4MzU2MTY0MzksNDA4NTMuODIxOTE3ODA4MjIKKzE0LE1vbiA3IEZlYiAxMSwyOC45OTQ1MjA1NDc5NDUyMDcsMTQxMi45NDI0NjU3NTM0MjQ2LDczNTcuODQzODM1NjE2NDM5LDQwODUzLjgyMTkxNzgwODIyCisxNSxUdWUgOCBGZWIgMTEsMjguOTk0NTIwNTQ3OTQ1MjA3LDE0MTIuOTQyNDY1NzUzNDI0Niw3MzU3Ljg0MzgzNTYxNjQzOSw0MDg1My44MjE5MTc4MDgyMgorMTYsV2VkIDkgRmViIDExLDI4Ljk5NDUyMDU0Nzk0NTIwNywxNDEyLjk0MjQ2NTc1MzQyNDYsNzM1Ny44NDM4MzU2MTY0MzksNDA4NTMuODIxOTE3ODA4MjIKKzE3LFRodSAxMCBGZWIgMTEsMjguOTk0NTIwNTQ3OTQ1MjA3LDE0MTIuOTQyNDY1NzUzNDI0Niw3MzU3Ljg0MzgzNTYxNjQzOSw0MDg1My44MjE5MTc4MDgyMgorMTgsRnJpIDExIEZlYiAxMSwyOC45OTQ1MjA1NDc5NDUyMDcsMTQxMi45NDI0NjU3NTM0MjQ2LDczNTcuODQzODM1NjE2NDM5LDQwODUzLjgyMTkxNzgwODIyCisxOSxTYXQgMTIgRmViIDExLDI4Ljk5NDUyMDU0Nzk0NTIwNywxNDEyLjk0MjQ2NTc1MzQyNDYsNzM1Ny44NDM4MzU2MTY0MzksNDA4NTMuODIxOTE3ODA4MjIKKzIwLFN1biAxMyBGZWIgMTEsMjguOTk0NTIwNTQ3OTQ1MjA3LDE0MTIuOTQyNDY1NzUzNDI0Niw3MzU3Ljg0MzgzNTYxNjQzOSw0MDg1My44MjE5MTc4MDgyMgorMjEsTW9uIDE0IEZlYiAxMSwyOC45OTQ1MjA1NDc5NDUyMDcsMTQxMi45NDI0NjU3NTM0MjQ2LDczNTcuODQzODM1NjE2NDM5LDQwODUzLjgyMTkxNzgwODIyCisyMixUdWUgMTUgRmViIDExLDI4Ljk5NDUyMDU0Nzk0NTIwNywxNDEyLjk0MjQ2NTc1MzQyNDYsNzM1Ny44NDM4MzU2MTY0MzksNDA4NTMuODIxOTE3ODA4MjIKKzIzLFdlZCAxNiBGZWIgMTEsMjguOTk0NTIwNTQ3OTQ1MjA3LDE0MTIuOTQyNDY1NzUzNDI0Niw3MzU3Ljg0MzgzNTYxNjQzOSw0MDg1My44MjE5MTc4MDgyMgorMjQsVGh1IDE3IEZlYiAxMSwyOC45OTQ1MjA1NDc5NDUyMDcsMTQxMi45NDI0NjU3NTM0MjQ2LDczNTcuODQzODM1NjE2NDM5LDQwODUzLjgyMTkxNzgwODIyCisyNSxGcmkgMTggRmViIDExLDI4Ljk5NDUyMDU0Nzk0NTIwNywxNDEyLjk0MjQ2NTc1MzQyNDYsNzM1Ny44NDM4MzU2MTY0MzksNDA4NTMuODIxOTE3ODA4MjIKKzI2LFNhdCAxOSBGZWIgMTEsMjguOTk0NTIwNTQ3OTQ1MjA3LDE0MTIuOTQyNDY1NzUzNDI0Niw3MzU3Ljg0MzgzNTYxNjQzOSw0MDg1My44MjE5MTc4MDgyMgorMjcsU3VuIDIwIEZlYiAxMSwyOC45OTQ1MjA1NDc5NDUyMDcsMTQxMi45NDI0NjU3NTM0MjQ2LDczNTcuODQzODM1NjE2NDM5LDQwODUzLjgyMTkxNzgwODIyCisyOCxNb24gMjEgRmViIDExLDI4Ljk5NDUyMDU0Nzk0NTIwNywxNDEyLjk0MjQ2NTc1MzQyNDYsNzM1Ny44NDM4MzU2MTY0MzksNDA4NTMuODIxOTE3ODA4MjIKKzI5LFR1ZSAyMiBGZWIgMTEsMjguOTk0NTIwNTQ3OTQ1MjA3LDE0MTIuOTQyNDY1NzUzNDI0Niw3MzU3Ljg0MzgzNTYxNjQzOSw0MDg1My44MjE5MTc4MDgyMgorMzAsV2VkIDIzIEZlYiAxMSwyOC45OTQ1MjA1NDc5NDUyMDcsMTQxMi45NDI0NjU3NTM0MjQ2LDczNTcuODQzODM1NjE2NDM5LDQwODUzLjgyMTkxNzgwODIyCiszMSxUaHUgMjQgRmViIDExLDI4Ljk5NDUyMDU0Nzk0NTIwNywxNDEyLjk0MjQ2NTc1MzQyNDYsNzM1Ny44NDM4MzU2MTY0MzksNDA4NTMuODIxOTE3ODA4MjIKKzMyLEZyaSAyNSBGZWIgMTEsMjguOTk0NTIwNTQ3OTQ1MjA3LDE0MTIuOTQyNDY1NzUzNDI0Niw3MzU3Ljg0MzgzNTYxNjQzOSw0MDg1My44MjE5MTc4MDgyMgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTRUlSX0ZEX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL2h1bWFuL0NvdW50XzIuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTRUlSX0ZEX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL2h1bWFuL0NvdW50XzIuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFhNWJhMWYKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNFSVJfRkRfUmVmZXJlbmNlL2F1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwvaHVtYW4vQ291bnRfMi5jc3YKQEAgLTAsMCArMSwzMyBAQAoraXRlcmF0aW9uLHRpbWUsUEgtMS1HNjQwMDAxLFBILTEtRzY0MDAwMixQSC0xLUc2NDAwMDMsUEgtMS1HNjQwMDA0LFBILTEwLUc2NTAwMDEsUEgtMTAtRzY1MDAwMixQSC0xMC1HNjUwMDAzLFBILTEwLUc2NTAwMDQsUEgtMTAtRzY1MDAwNSxQSC0xMC1HNjUwMDA2LFBILTEwLUc2NTAwMDcsUEgtMTEtRzY2MDAwMSxQSC0xMS1HNjYwMDAyLFBILTExLUc2NjAwMDMsUEgtMTEtRzY2MDAwNCxQSC0xMS1HNjYwMDA1LFBILTEyLUc2NzAwMDEsUEgtMTItRzY3MDAwMixQSC0xMi1HNjcwMDAzLFBILTEyLUc2NzAwMDQsUEgtMTItRzY3MDAwNSxQSC0yLUc2ODAwMDEsUEgtMi1HNjgwMDAyLFBILTItRzY4MDAwMyxQSC0yLUc2ODAwMDQsUEgtMi1HNjgwMDA1LFBILTMtRzY5MDAwMSxQSC0zLUc2OTAwMDIsUEgtMy1HNjkwMDAzLFBILTMtRzY5MDAwNCxQSC0zLUc2OTAwMDUsUEgtMy1HNjkwMDA2LFBILTQtRzcwMDAwMSxQSC00LUc3MDAwMDIsUEgtNC1HNzAwMDAzLFBILTQtRzcwMDAwNCxQSC00LUc3MDAwMDUsUEgtNC1HNzAwMDA2LFBILTQtRzcwMDAwNyxQSC00LUc3MDAwMDgsUEgtNC1HNzAwMDA5LFBILTQtRzcwMDAxMCxQSC00LUc3MDAwMTEsUEgtNS1HNzEwMDAxLFBILTUtRzcxMDAwMixQSC01LUc3MTAwMDMsUEgtNS1HNzEwMDA0LFBILTUtRzcxMDAwNSxQSC01LUc3MTAwMDYsUEgtNi1HNzIwMDAxLFBILTYtRzcyMDAwMixQSC02LUc3MjAwMDMsUEgtNi1HNzIwMDA0LFBILTYtRzcyMDAwNSxQSC03LUc3MzAwMDEsUEgtNy1HNzMwMDAyLFBILTctRzczMDAwMyxQSC03LUc3MzAwMDQsUEgtOC1HNzQwMDAxLFBILTgtRzc0MDAwMixQSC04LUc3NDAwMDMsUEgtOC1HNzQwMDA0LFBILTgtRzc0MDAwNSxQSC05LUc3NTAwMDEsUEgtOS1HNzUwMDAyLFBILTktRzc1MDAwMyxQSC05LUc3NTAwMDQsUEgtOS1HNzUwMDA1LFBILUNBUi1HMjMwMDAxLFBILUNBUi1HMjMwMDAyLFBILUNBUi1HMjMwMDAzLFBILUNBUi1HMjMwMDA0LFBILUNBUi1HMjMwMDA1LFBILU5DUi1HNTIwMDAxCisxLFR1ZSAyNSBKYW4gMTEsNjA5NDgwLjAsNzIzNzUzLjAsNzY3NzU2LjAsMjc1OTU4MS4wLDYwNDQ4My4wLDYzNzg1My4wLDEyODg3MDYuMCw4Mzk4NC4wLDUzNTc3MC4wLDEyNTM5NzAuMCw1MzE2NDguMCwxNjgyMjU4LjAsMjE5ODkyOC4wLDUxMTQ3NC4wLDE3OTgwNjcuMCw1NDg4OTguMCw4Mjk5MTcuMCw5MzM3MDkuMCwxMTcyMjg4LjAsMTIxNDUzNC4wLDYyNjY0OC4wLDk2NjIuMCwxMjIzMDE0LjAsMTUxMDM5MS4wLDM2Njk0OS4wLDE1NzA0MC4wLDYwNjIyOS4wLDM3Mzg0NDguMCwyMDEyODUxLjAsMjI4NTQ1MS4wLDEyODE5ODIuMCw3MDk2MTEuMCwyMDIxODMuMCwyMjg2OTY3LjAsMjIzNjg0Ni4wLDI5NDI0NzcuMCwyNDM3ODYuMCw0NDM5NzQuMCw3OTUxMzcuMCw4NDU0NzQuMCwxOTUyODc0LjAsMjEwMTA2MS4wLDI3Mjg5NS4wLDEyMjE2MTAuMCw1MTkxMDUuMCwxODY2MDAxLjAsMjQzNDYwLjAsODA0ODc0LjAsNzYwNDIwLjAsNDk3NTA2LjAsNTYxMzI2LjAsNzc2NjAwLjAsMjQ2NTkyNS4wLDMwMDI5NzQuMCwxMjkzNDY1LjAsMzg4MjIwOS4wLDEzMzczODYuMCw4OTY1MC4wLDQxMTk5NC4wLDE5MzkwOTYuMCw1OTgwNzYuMCw0MzI0MDMuMCw3Mjk4NDUuMCwzNDI4MjIuMCw2Mjg3OTMuMCwyMzk2MjMuMCw4NjYzNzMuMCwyMzIxMzczLjAsMjYwNTA3LjAsNjc2MDI1LjAsMjczMzUxLjAsMzQyMDA3LjAsMTQzMjg4LjAsMS4wNDAxNTgzRTcKKzIsV2VkIDI2IEphbiAxMSw2MDk0ODAuMCw3MjM3NTMuMCw3Njc3NTYuMCwyNzU5NTgxLjAsNjA0NDgzLjAsNjM3ODUzLjAsMTI4ODcwNi4wLDgzOTg0LjAsNTM1NzcwLjAsMTI1Mzk3MC4wLDUzMTY0OC4wLDE2ODIyNTguMCwyMTk4OTI4LjAsNTExNDc0LjAsMTc5ODA2Ny4wLDU0ODg5OC4wLDgyOTkxNy4wLDkzMzcwOS4wLDExNzIyODguMCwxMjE0NTM0LjAsNjI2NjQ4LjAsOTY2Mi4wLDEyMjMwMTQuMCwxNTEwMzkxLjAsMzY2OTQ5LjAsMTU3MDQwLjAsNjA2MjI5LjAsMzczODQ0OC4wLDIwMTI4NTEuMCwyMjg1NDUxLjAsMTI4MTk4Mi4wLDcwOTYxMS4wLDIwMjE4My4wLDIyODY5NjcuMCwyMjM2ODQ2LjAsMjk0MjQ3Ny4wLDI0Mzc4Ni4wLDQ0Mzk3NC4wLDc5NTEzNy4wLDg0NTQ3NC4wLDE5NTI4NzQuMCwyMTAxMDYxLjAsMjcyODk1LjAsMTIyMTYxMC4wLDUxOTEwNS4wLDE4NjYwMDEuMCwyNDM0NjAuMCw4MDQ4NzQuMCw3NjA0MjAuMCw0OTc1MDYuMCw1NjEzMjYuMCw3NzY2MDAuMCwyNDY1OTI1LjAsMzAwMjk3NC4wLDEyOTM0NjUuMCwzODgyMjA5LjAsMTMzNzM4Ni4wLDg5NjUwLjAsNDExOTk0LjAsMTkzOTA5Ni4wLDU5ODA3Ni4wLDQzMjQwMy4wLDcyOTg0NS4wLDM0MjgyMi4wLDYyODc5My4wLDIzOTYyMy4wLDg2NjM3My4wLDIzMjEzNzMuMCwyNjA1MDcuMCw2NzYwMjUuMCwyNzMzNTEuMCwzNDIwMDcuMCwxNDMyODguMCwxLjA0MDE1ODNFNworMyxUaHUgMjcgSmFuIDExLDYwOTQ4MC4wLDcyMzc1My4wLDc2Nzc1Ni4wLDI3NTk1ODEuMCw2MDQ0ODMuMCw2Mzc4NTMuMCwxMjg4NzA2LjAsODM5ODQuMCw1MzU3NzAuMCwxMjUzOTcwLjAsNTMxNjQ4LjAsMTY4MjI1OC4wLDIxOTg5MjguMCw1MTE0NzQuMCwxNzk4MDY3LjAsNTQ4ODk4LjAsODI5OTE3LjAsOTMzNzA5LjAsMTE3MjI4OC4wLDEyMTQ1MzQuMCw2MjY2NDguMCw5NjYyLjAsMTIyMzAxNC4wLDE1MTAzOTEuMCwzNjY5NDkuMCwxNTcwNDAuMCw2MDYyMjkuMCwzNzM4NDQ4LjAsMjAxMjg1MS4wLDIyODU0NTEuMCwxMjgxOTgyLjAsNzA5NjExLjAsMjAyMTgzLjAsMjI4Njk2Ny4wLDIyMzY4NDYuMCwyOTQyNDc3LjAsMjQzNzg2LjAsNDQzOTc0LjAsNzk1MTM3LjAsODQ1NDc0LjAsMTk1Mjg3NC4wLDIxMDEwNjEuMCwyNzI4OTUuMCwxMjIxNjEwLjAsNTE5MTA1LjAsMTg2NjAwMS4wLDI0MzQ2MC4wLDgwNDg3NC4wLDc2MDQyMC4wLDQ5NzUwNi4wLDU2MTMyNi4wLDc3NjYwMC4wLDI0NjU5MjUuMCwzMDAyOTc0LjAsMTI5MzQ2NS4wLDM4ODIyMDkuMCwxMzM3Mzg2LjAsODk2NTAuMCw0MTE5OTQuMCwxOTM5MDk2LjAsNTk4MDc2LjAsNDMyNDAzLjAsNzI5ODQ1LjAsMzQyODIyLjAsNjI4NzkzLjAsMjM5NjIzLjAsODY2MzczLjAsMjMyMTM3My4wLDI2MDUwNy4wLDY3NjAyNS4wLDI3MzM1MS4wLDM0MjAwNy4wLDE0MzI4OC4wLDEuMDQwMTU4M0U3Cis0LEZyaSAyOCBKYW4gMTEsNjA5NDgwLjAsNzIzNzUzLjAsNzY3NzU2LjAsMjc1OTU4MS4wLDYwNDQ4My4wLDYzNzg1My4wLDEyODg3MDYuMCw4Mzk4NC4wLDUzNTc3MC4wLDEyNTM5NzAuMCw1MzE2NDguMCwxNjgyMjU4LjAsMjE5ODkyOC4wLDUxMTQ3NC4wLDE3OTgwNjcuMCw1NDg4OTguMCw4Mjk5MTcuMCw5MzM3MDkuMCwxMTcyMjg4LjAsMTIxNDUzNC4wLDYyNjY0OC4wLDk2NjIuMCwxMjIzMDE0LjAsMTUxMDM5MS4wLDM2Njk0OS4wLDE1NzA0MC4wLDYwNjIyOS4wLDM3Mzg0NDguMCwyMDEyODUxLjAsMjI4NTQ1MS4wLDEyODE5ODIuMCw3MDk2MTEuMCwyMDIxODMuMCwyMjg2OTY3LjAsMjIzNjg0Ni4wLDI5NDI0NzcuMCwyNDM3ODYuMCw0NDM5NzQuMCw3OTUxMzcuMCw4NDU0NzQuMCwxOTUyODc0LjAsMjEwMTA2MS4wLDI3Mjg5NS4wLDEyMjE2MTAuMCw1MTkxMDUuMCwxODY2MDAxLjAsMjQzNDYwLjAsODA0ODc0LjAsNzYwNDIwLjAsNDk3NTA2LjAsNTYxMzI2LjAsNzc2NjAwLjAsMjQ2NTkyNS4wLDMwMDI5NzQuMCwxMjkzNDY1LjAsMzg4MjIwOS4wLDEzMzczODYuMCw4OTY1MC4wLDQxMTk5NC4wLDE5MzkwOTYuMCw1OTgwNzYuMCw0MzI0MDMuMCw3Mjk4NDUuMCwzNDI4MjIuMCw2Mjg3OTMuMCwyMzk2MjMuMCw4NjYzNzMuMCwyMzIxMzczLjAsMjYwNTA3LjAsNjc2MDI1LjAsMjczMzUxLjAsMzQyMDA3LjAsMTQzMjg4LjAsMS4wNDAxNTgzRTcKKzUsU2F0IDI5IEphbiAxMSw2MDk0ODAuMCw3MjM3NTMuMCw3Njc3NTYuMCwyNzU5NTgxLjAsNjA0NDgzLjAsNjM3ODUzLjAsMTI4ODcwNi4wLDgzOTg0LjAsNTM1NzcwLjAsMTI1Mzk3MC4wLDUzMTY0OC4wLDE2ODIyNTguMCwyMTk4OTI4LjAsNTExNDc0LjAsMTc5ODA2Ny4wLDU0ODg5OC4wLDgyOTkxNy4wLDkzMzcwOS4wLDExNzIyODguMCwxMjE0NTM0LjAsNjI2NjQ4LjAsOTY2Mi4wLDEyMjMwMTQuMCwxNTEwMzkxLjAsMzY2OTQ5LjAsMTU3MDQwLjAsNjA2MjI5LjAsMzczODQ0OC4wLDIwMTI4NTEuMCwyMjg1NDUxLjAsMTI4MTk4Mi4wLDcwOTYxMS4wLDIwMjE4My4wLDIyODY5NjcuMCwyMjM2ODQ2LjAsMjk0MjQ3Ny4wLDI0Mzc4Ni4wLDQ0Mzk3NC4wLDc5NTEzNy4wLDg0NTQ3NC4wLDE5NTI4NzQuMCwyMTAxMDYxLjAsMjcyODk1LjAsMTIyMTYxMC4wLDUxOTEwNS4wLDE4NjYwMDEuMCwyNDM0NjAuMCw4MDQ4NzQuMCw3NjA0MjAuMCw0OTc1MDYuMCw1NjEzMjYuMCw3NzY2MDAuMCwyNDY1OTI1LjAsMzAwMjk3NC4wLDEyOTM0NjUuMCwzODgyMjA5LjAsMTMzNzM4Ni4wLDg5NjUwLjAsNDExOTk0LjAsMTkzOTA5Ni4wLDU5ODA3Ni4wLDQzMjQwMy4wLDcyOTg0NS4wLDM0MjgyMi4wLDYyODc5My4wLDIzOTYyMy4wLDg2NjM3My4wLDIzMjEzNzMuMCwyNjA1MDcuMCw2NzYwMjUuMCwyNzMzNTEuMCwzNDIwMDcuMCwxNDMyODguMCwxLjA0MDE1ODNFNworNixTdW4gMzAgSmFuIDExLDYwOTQ4MC4wLDcyMzc1My4wLDc2Nzc1Ni4wLDI3NTk1ODEuMCw2MDQ0ODMuMCw2Mzc4NTMuMCwxMjg4NzA2LjAsODM5ODQuMCw1MzU3NzAuMCwxMjUzOTcwLjAsNTMxNjQ4LjAsMTY4MjI1OC4wLDIxOTg5MjguMCw1MTE0NzQuMCwxNzk4MDY3LjAsNTQ4ODk4LjAsODI5OTE3LjAsOTMzNzA5LjAsMTE3MjI4OC4wLDEyMTQ1MzQuMCw2MjY2NDguMCw5NjYyLjAsMTIyMzAxNC4wLDE1MTAzOTEuMCwzNjY5NDkuMCwxNTcwNDAuMCw2MDYyMjkuMCwzNzM4NDQ4LjAsMjAxMjg1MS4wLDIyODU0NTEuMCwxMjgxOTgyLjAsNzA5NjExLjAsMjAyMTgzLjAsMjI4Njk2Ny4wLDIyMzY4NDYuMCwyOTQyNDc3LjAsMjQzNzg2LjAsNDQzOTc0LjAsNzk1MTM3LjAsODQ1NDc0LjAsMTk1Mjg3NC4wLDIxMDEwNjEuMCwyNzI4OTUuMCwxMjIxNjEwLjAsNTE5MTA1LjAsMTg2NjAwMS4wLDI0MzQ2MC4wLDgwNDg3NC4wLDc2MDQyMC4wLDQ5NzUwNi4wLDU2MTMyNi4wLDc3NjYwMC4wLDI0NjU5MjUuMCwzMDAyOTc0LjAsMTI5MzQ2NS4wLDM4ODIyMDkuMCwxMzM3Mzg2LjAsODk2NTAuMCw0MTE5OTQuMCwxOTM5MDk2LjAsNTk4MDc2LjAsNDMyNDAzLjAsNzI5ODQ1LjAsMzQyODIyLjAsNjI4NzkzLjAsMjM5NjIzLjAsODY2MzczLjAsMjMyMTM3My4wLDI2MDUwNy4wLDY3NjAyNS4wLDI3MzM1MS4wLDM0MjAwNy4wLDE0MzI4OC4wLDEuMDQwMTU4M0U3Cis3LE1vbiAzMSBKYW4gMTEsNjA5NDgwLjAsNzIzNzUzLjAsNzY3NzU2LjAsMjc1OTU4MS4wLDYwNDQ4My4wLDYzNzg1My4wLDEyODg3MDYuMCw4Mzk4NC4wLDUzNTc3MC4wLDEyNTM5NzAuMCw1MzE2NDguMCwxNjgyMjU4LjAsMjE5ODkyOC4wLDUxMTQ3NC4wLDE3OTgwNjcuMCw1NDg4OTguMCw4Mjk5MTcuMCw5MzM3MDkuMCwxMTcyMjg4LjAsMTIxNDUzNC4wLDYyNjY0OC4wLDk2NjIuMCwxMjIzMDE0LjAsMTUxMDM5MS4wLDM2Njk0OS4wLDE1NzA0MC4wLDYwNjIyOS4wLDM3Mzg0NDguMCwyMDEyODUxLjAsMjI4NTQ1MS4wLDEyODE5ODIuMCw3MDk2MTEuMCwyMDIxODMuMCwyMjg2OTY3LjAsMjIzNjg0Ni4wLDI5NDI0NzcuMCwyNDM3ODYuMCw0NDM5NzQuMCw3OTUxMzcuMCw4NDU0NzQuMCwxOTUyODc0LjAsMjEwMTA2MS4wLDI3Mjg5NS4wLDEyMjE2MTAuMCw1MTkxMDUuMCwxODY2MDAxLjAsMjQzNDYwLjAsODA0ODc0LjAsNzYwNDIwLjAsNDk3NTA2LjAsNTYxMzI2LjAsNzc2NjAwLjAsMjQ2NTkyNS4wLDMwMDI5NzQuMCwxMjkzNDY1LjAsMzg4MjIwOS4wLDEzMzczODYuMCw4OTY1MC4wLDQxMTk5NC4wLDE5MzkwOTYuMCw1OTgwNzYuMCw0MzI0MDMuMCw3Mjk4NDUuMCwzNDI4MjIuMCw2Mjg3OTMuMCwyMzk2MjMuMCw4NjYzNzMuMCwyMzIxMzczLjAsMjYwNTA3LjAsNjc2MDI1LjAsMjczMzUxLjAsMzQyMDA3LjAsMTQzMjg4LjAsMS4wNDAxNTgzRTcKKzgsVHVlIDEgRmViIDExLDYwOTQ4MC4wLDcyMzc1My4wLDc2Nzc1Ni4wLDI3NTk1ODEuMCw2MDQ0ODMuMCw2Mzc4NTMuMCwxMjg4NzA2LjAsODM5ODQuMCw1MzU3NzAuMCwxMjUzOTcwLjAsNTMxNjQ4LjAsMTY4MjI1OC4wLDIxOTg5MjguMCw1MTE0NzQuMCwxNzk4MDY3LjAsNTQ4ODk4LjAsODI5OTE3LjAsOTMzNzA5LjAsMTE3MjI4OC4wLDEyMTQ1MzQuMCw2MjY2NDguMCw5NjYyLjAsMTIyMzAxNC4wLDE1MTAzOTEuMCwzNjY5NDkuMCwxNTcwNDAuMCw2MDYyMjkuMCwzNzM4NDQ4LjAsMjAxMjg1MS4wLDIyODU0NTEuMCwxMjgxOTgyLjAsNzA5NjExLjAsMjAyMTgzLjAsMjI4Njk2Ny4wLDIyMzY4NDYuMCwyOTQyNDc3LjAsMjQzNzg2LjAsNDQzOTc0LjAsNzk1MTM3LjAsODQ1NDc0LjAsMTk1Mjg3NC4wLDIxMDEwNjEuMCwyNzI4OTUuMCwxMjIxNjEwLjAsNTE5MTA1LjAsMTg2NjAwMS4wLDI0MzQ2MC4wLDgwNDg3NC4wLDc2MDQyMC4wLDQ5NzUwNi4wLDU2MTMyNi4wLDc3NjYwMC4wLDI0NjU5MjUuMCwzMDAyOTc0LjAsMTI5MzQ2NS4wLDM4ODIyMDkuMCwxMzM3Mzg2LjAsODk2NTAuMCw0MTE5OTQuMCwxOTM5MDk2LjAsNTk4MDc2LjAsNDMyNDAzLjAsNzI5ODQ1LjAsMzQyODIyLjAsNjI4NzkzLjAsMjM5NjIzLjAsODY2MzczLjAsMjMyMTM3My4wLDI2MDUwNy4wLDY3NjAyNS4wLDI3MzM1MS4wLDM0MjAwNy4wLDE0MzI4OC4wLDEuMDQwMTU4M0U3Cis5LFdlZCAyIEZlYiAxMSw2MDk0ODAuMCw3MjM3NTMuMCw3Njc3NTYuMCwyNzU5NTgxLjAsNjA0NDgzLjAsNjM3ODUzLjAsMTI4ODcwNi4wLDgzOTg0LjAsNTM1NzcwLjAsMTI1Mzk3MC4wLDUzMTY0OC4wLDE2ODIyNTguMCwyMTk4OTI4LjAsNTExNDc0LjAsMTc5ODA2Ny4wLDU0ODg5OC4wLDgyOTkxNy4wLDkzMzcwOS4wLDExNzIyODguMCwxMjE0NTM0LjAsNjI2NjQ4LjAsOTY2Mi4wLDEyMjMwMTQuMCwxNTEwMzkxLjAsMzY2OTQ5LjAsMTU3MDQwLjAsNjA2MjI5LjAsMzczODQ0OC4wLDIwMTI4NTEuMCwyMjg1NDUxLjAsMTI4MTk4Mi4wLDcwOTYxMS4wLDIwMjE4My4wLDIyODY5NjcuMCwyMjM2ODQ2LjAsMjk0MjQ3Ny4wLDI0Mzc4Ni4wLDQ0Mzk3NC4wLDc5NTEzNy4wLDg0NTQ3NC4wLDE5NTI4NzQuMCwyMTAxMDYxLjAsMjcyODk1LjAsMTIyMTYxMC4wLDUxOTEwNS4wLDE4NjYwMDEuMCwyNDM0NjAuMCw4MDQ4NzQuMCw3NjA0MjAuMCw0OTc1MDYuMCw1NjEzMjYuMCw3NzY2MDAuMCwyNDY1OTI1LjAsMzAwMjk3NC4wLDEyOTM0NjUuMCwzODgyMjA5LjAsMTMzNzM4Ni4wLDg5NjUwLjAsNDExOTk0LjAsMTkzOTA5Ni4wLDU5ODA3Ni4wLDQzMjQwMy4wLDcyOTg0NS4wLDM0MjgyMi4wLDYyODc5My4wLDIzOTYyMy4wLDg2NjM3My4wLDIzMjEzNzMuMCwyNjA1MDcuMCw2NzYwMjUuMCwyNzMzNTEuMCwzNDIwMDcuMCwxNDMyODguMCwxLjA0MDE1ODNFNworMTAsVGh1IDMgRmViIDExLDYwOTQ4MC4wLDcyMzc1My4wLDc2Nzc1Ni4wLDI3NTk1ODEuMCw2MDQ0ODMuMCw2Mzc4NTMuMCwxMjg4NzA2LjAsODM5ODQuMCw1MzU3NzAuMCwxMjUzOTcwLjAsNTMxNjQ4LjAsMTY4MjI1OC4wLDIxOTg5MjguMCw1MTE0NzQuMCwxNzk4MDY3LjAsNTQ4ODk4LjAsODI5OTE3LjAsOTMzNzA5LjAsMTE3MjI4OC4wLDEyMTQ1MzQuMCw2MjY2NDguMCw5NjYyLjAsMTIyMzAxNC4wLDE1MTAzOTEuMCwzNjY5NDkuMCwxNTcwNDAuMCw2MDYyMjkuMCwzNzM4NDQ4LjAsMjAxMjg1MS4wLDIyODU0NTEuMCwxMjgxOTgyLjAsNzA5NjExLjAsMjAyMTgzLjAsMjI4Njk2Ny4wLDIyMzY4NDYuMCwyOTQyNDc3LjAsMjQzNzg2LjAsNDQzOTc0LjAsNzk1MTM3LjAsODQ1NDc0LjAsMTk1Mjg3NC4wLDIxMDEwNjEuMCwyNzI4OTUuMCwxMjIxNjEwLjAsNTE5MTA1LjAsMTg2NjAwMS4wLDI0MzQ2MC4wLDgwNDg3NC4wLDc2MDQyMC4wLDQ5NzUwNi4wLDU2MTMyNi4wLDc3NjYwMC4wLDI0NjU5MjUuMCwzMDAyOTc0LjAsMTI5MzQ2NS4wLDM4ODIyMDkuMCwxMzM3Mzg2LjAsODk2NTAuMCw0MTE5OTQuMCwxOTM5MDk2LjAsNTk4MDc2LjAsNDMyNDAzLjAsNzI5ODQ1LjAsMzQyODIyLjAsNjI4NzkzLjAsMjM5NjIzLjAsODY2MzczLjAsMjMyMTM3My4wLDI2MDUwNy4wLDY3NjAyNS4wLDI3MzM1MS4wLDM0MjAwNy4wLDE0MzI4OC4wLDEuMDQwMTU4M0U3CisxMSxGcmkgNCBGZWIgMTEsNjA5NDgwLjAsNzIzNzUzLjAsNzY3NzU2LjAsMjc1OTU4MS4wLDYwNDQ4My4wLDYzNzg1My4wLDEyODg3MDYuMCw4Mzk4NC4wLDUzNTc3MC4wLDEyNTM5NzAuMCw1MzE2NDguMCwxNjgyMjU4LjAsMjE5ODkyOC4wLDUxMTQ3NC4wLDE3OTgwNjcuMCw1NDg4OTguMCw4Mjk5MTcuMCw5MzM3MDkuMCwxMTcyMjg4LjAsMTIxNDUzNC4wLDYyNjY0OC4wLDk2NjIuMCwxMjIzMDE0LjAsMTUxMDM5MS4wLDM2Njk0OS4wLDE1NzA0MC4wLDYwNjIyOS4wLDM3Mzg0NDguMCwyMDEyODUxLjAsMjI4NTQ1MS4wLDEyODE5ODIuMCw3MDk2MTEuMCwyMDIxODMuMCwyMjg2OTY3LjAsMjIzNjg0Ni4wLDI5NDI0NzcuMCwyNDM3ODYuMCw0NDM5NzQuMCw3OTUxMzcuMCw4NDU0NzQuMCwxOTUyODc0LjAsMjEwMTA2MS4wLDI3Mjg5NS4wLDEyMjE2MTAuMCw1MTkxMDUuMCwxODY2MDAxLjAsMjQzNDYwLjAsODA0ODc0LjAsNzYwNDIwLjAsNDk3NTA2LjAsNTYxMzI2LjAsNzc2NjAwLjAsMjQ2NTkyNS4wLDMwMDI5NzQuMCwxMjkzNDY1LjAsMzg4MjIwOS4wLDEzMzczODYuMCw4OTY1MC4wLDQxMTk5NC4wLDE5MzkwOTYuMCw1OTgwNzYuMCw0MzI0MDMuMCw3Mjk4NDUuMCwzNDI4MjIuMCw2Mjg3OTMuMCwyMzk2MjMuMCw4NjYzNzMuMCwyMzIxMzczLjAsMjYwNTA3LjAsNjc2MDI1LjAsMjczMzUxLjAsMzQyMDA3LjAsMTQzMjg4LjAsMS4wNDAxNTgzRTcKKzEyLFNhdCA1IEZlYiAxMSw2MDk0ODAuMCw3MjM3NTMuMCw3Njc3NTYuMCwyNzU5NTgxLjAsNjA0NDgzLjAsNjM3ODUzLjAsMTI4ODcwNi4wLDgzOTg0LjAsNTM1NzcwLjAsMTI1Mzk3MC4wLDUzMTY0OC4wLDE2ODIyNTguMCwyMTk4OTI4LjAsNTExNDc0LjAsMTc5ODA2Ny4wLDU0ODg5OC4wLDgyOTkxNy4wLDkzMzcwOS4wLDExNzIyODguMCwxMjE0NTM0LjAsNjI2NjQ4LjAsOTY2Mi4wLDEyMjMwMTQuMCwxNTEwMzkxLjAsMzY2OTQ5LjAsMTU3MDQwLjAsNjA2MjI5LjAsMzczODQ0OC4wLDIwMTI4NTEuMCwyMjg1NDUxLjAsMTI4MTk4Mi4wLDcwOTYxMS4wLDIwMjE4My4wLDIyODY5NjcuMCwyMjM2ODQ2LjAsMjk0MjQ3Ny4wLDI0Mzc4Ni4wLDQ0Mzk3NC4wLDc5NTEzNy4wLDg0NTQ3NC4wLDE5NTI4NzQuMCwyMTAxMDYxLjAsMjcyODk1LjAsMTIyMTYxMC4wLDUxOTEwNS4wLDE4NjYwMDEuMCwyNDM0NjAuMCw4MDQ4NzQuMCw3NjA0MjAuMCw0OTc1MDYuMCw1NjEzMjYuMCw3NzY2MDAuMCwyNDY1OTI1LjAsMzAwMjk3NC4wLDEyOTM0NjUuMCwzODgyMjA5LjAsMTMzNzM4Ni4wLDg5NjUwLjAsNDExOTk0LjAsMTkzOTA5Ni4wLDU5ODA3Ni4wLDQzMjQwMy4wLDcyOTg0NS4wLDM0MjgyMi4wLDYyODc5My4wLDIzOTYyMy4wLDg2NjM3My4wLDIzMjEzNzMuMCwyNjA1MDcuMCw2NzYwMjUuMCwyNzMzNTEuMCwzNDIwMDcuMCwxNDMyODguMCwxLjA0MDE1ODNFNworMTMsU3VuIDYgRmViIDExLDYwOTQ4MC4wLDcyMzc1My4wLDc2Nzc1Ni4wLDI3NTk1ODEuMCw2MDQ0ODMuMCw2Mzc4NTMuMCwxMjg4NzA2LjAsODM5ODQuMCw1MzU3NzAuMCwxMjUzOTcwLjAsNTMxNjQ4LjAsMTY4MjI1OC4wLDIxOTg5MjguMCw1MTE0NzQuMCwxNzk4MDY3LjAsNTQ4ODk4LjAsODI5OTE3LjAsOTMzNzA5LjAsMTE3MjI4OC4wLDEyMTQ1MzQuMCw2MjY2NDguMCw5NjYyLjAsMTIyMzAxNC4wLDE1MTAzOTEuMCwzNjY5NDkuMCwxNTcwNDAuMCw2MDYyMjkuMCwzNzM4NDQ4LjAsMjAxMjg1MS4wLDIyODU0NTEuMCwxMjgxOTgyLjAsNzA5NjExLjAsMjAyMTgzLjAsMjI4Njk2Ny4wLDIyMzY4NDYuMCwyOTQyNDc3LjAsMjQzNzg2LjAsNDQzOTc0LjAsNzk1MTM3LjAsODQ1NDc0LjAsMTk1Mjg3NC4wLDIxMDEwNjEuMCwyNzI4OTUuMCwxMjIxNjEwLjAsNTE5MTA1LjAsMTg2NjAwMS4wLDI0MzQ2MC4wLDgwNDg3NC4wLDc2MDQyMC4wLDQ5NzUwNi4wLDU2MTMyNi4wLDc3NjYwMC4wLDI0NjU5MjUuMCwzMDAyOTc0LjAsMTI5MzQ2NS4wLDM4ODIyMDkuMCwxMzM3Mzg2LjAsODk2NTAuMCw0MTE5OTQuMCwxOTM5MDk2LjAsNTk4MDc2LjAsNDMyNDAzLjAsNzI5ODQ1LjAsMzQyODIyLjAsNjI4NzkzLjAsMjM5NjIzLjAsODY2MzczLjAsMjMyMTM3My4wLDI2MDUwNy4wLDY3NjAyNS4wLDI3MzM1MS4wLDM0MjAwNy4wLDE0MzI4OC4wLDEuMDQwMTU4M0U3CisxNCxNb24gNyBGZWIgMTEsNjA5NDgwLjAsNzIzNzUzLjAsNzY3NzU2LjAsMjc1OTU4MS4wLDYwNDQ4My4wLDYzNzg1My4wLDEyODg3MDYuMCw4Mzk4NC4wLDUzNTc3MC4wLDEyNTM5NzAuMCw1MzE2NDguMCwxNjgyMjU4LjAsMjE5ODkyOC4wLDUxMTQ3NC4wLDE3OTgwNjcuMCw1NDg4OTguMCw4Mjk5MTcuMCw5MzM3MDkuMCwxMTcyMjg4LjAsMTIxNDUzNC4wLDYyNjY0OC4wLDk2NjIuMCwxMjIzMDE0LjAsMTUxMDM5MS4wLDM2Njk0OS4wLDE1NzA0MC4wLDYwNjIyOS4wLDM3Mzg0NDguMCwyMDEyODUxLjAsMjI4NTQ1MS4wLDEyODE5ODIuMCw3MDk2MTEuMCwyMDIxODMuMCwyMjg2OTY3LjAsMjIzNjg0Ni4wLDI5NDI0NzcuMCwyNDM3ODYuMCw0NDM5NzQuMCw3OTUxMzcuMCw4NDU0NzQuMCwxOTUyODc0LjAsMjEwMTA2MS4wLDI3Mjg5NS4wLDEyMjE2MTAuMCw1MTkxMDUuMCwxODY2MDAxLjAsMjQzNDYwLjAsODA0ODc0LjAsNzYwNDIwLjAsNDk3NTA2LjAsNTYxMzI2LjAsNzc2NjAwLjAsMjQ2NTkyNS4wLDMwMDI5NzQuMCwxMjkzNDY1LjAsMzg4MjIwOS4wLDEzMzczODYuMCw4OTY1MC4wLDQxMTk5NC4wLDE5MzkwOTYuMCw1OTgwNzYuMCw0MzI0MDMuMCw3Mjk4NDUuMCwzNDI4MjIuMCw2Mjg3OTMuMCwyMzk2MjMuMCw4NjYzNzMuMCwyMzIxMzczLjAsMjYwNTA3LjAsNjc2MDI1LjAsMjczMzUxLjAsMzQyMDA3LjAsMTQzMjg4LjAsMS4wNDAxNTgzRTcKKzE1LFR1ZSA4IEZlYiAxMSw2MDk0ODAuMCw3MjM3NTMuMCw3Njc3NTYuMCwyNzU5NTgxLjAsNjA0NDgzLjAsNjM3ODUzLjAsMTI4ODcwNi4wLDgzOTg0LjAsNTM1NzcwLjAsMTI1Mzk3MC4wLDUzMTY0OC4wLDE2ODIyNTguMCwyMTk4OTI4LjAsNTExNDc0LjAsMTc5ODA2Ny4wLDU0ODg5OC4wLDgyOTkxNy4wLDkzMzcwOS4wLDExNzIyODguMCwxMjE0NTM0LjAsNjI2NjQ4LjAsOTY2Mi4wLDEyMjMwMTQuMCwxNTEwMzkxLjAsMzY2OTQ5LjAsMTU3MDQwLjAsNjA2MjI5LjAsMzczODQ0OC4wLDIwMTI4NTEuMCwyMjg1NDUxLjAsMTI4MTk4Mi4wLDcwOTYxMS4wLDIwMjE4My4wLDIyODY5NjcuMCwyMjM2ODQ2LjAsMjk0MjQ3Ny4wLDI0Mzc4Ni4wLDQ0Mzk3NC4wLDc5NTEzNy4wLDg0NTQ3NC4wLDE5NTI4NzQuMCwyMTAxMDYxLjAsMjcyODk1LjAsMTIyMTYxMC4wLDUxOTEwNS4wLDE4NjYwMDEuMCwyNDM0NjAuMCw4MDQ4NzQuMCw3NjA0MjAuMCw0OTc1MDYuMCw1NjEzMjYuMCw3NzY2MDAuMCwyNDY1OTI1LjAsMzAwMjk3NC4wLDEyOTM0NjUuMCwzODgyMjA5LjAsMTMzNzM4Ni4wLDg5NjUwLjAsNDExOTk0LjAsMTkzOTA5Ni4wLDU5ODA3Ni4wLDQzMjQwMy4wLDcyOTg0NS4wLDM0MjgyMi4wLDYyODc5My4wLDIzOTYyMy4wLDg2NjM3My4wLDIzMjEzNzMuMCwyNjA1MDcuMCw2NzYwMjUuMCwyNzMzNTEuMCwzNDIwMDcuMCwxNDMyODguMCwxLjA0MDE1ODNFNworMTYsV2VkIDkgRmViIDExLDYwOTQ4MC4wLDcyMzc1My4wLDc2Nzc1Ni4wLDI3NTk1ODEuMCw2MDQ0ODMuMCw2Mzc4NTMuMCwxMjg4NzA2LjAsODM5ODQuMCw1MzU3NzAuMCwxMjUzOTcwLjAsNTMxNjQ4LjAsMTY4MjI1OC4wLDIxOTg5MjguMCw1MTE0NzQuMCwxNzk4MDY3LjAsNTQ4ODk4LjAsODI5OTE3LjAsOTMzNzA5LjAsMTE3MjI4OC4wLDEyMTQ1MzQuMCw2MjY2NDguMCw5NjYyLjAsMTIyMzAxNC4wLDE1MTAzOTEuMCwzNjY5NDkuMCwxNTcwNDAuMCw2MDYyMjkuMCwzNzM4NDQ4LjAsMjAxMjg1MS4wLDIyODU0NTEuMCwxMjgxOTgyLjAsNzA5NjExLjAsMjAyMTgzLjAsMjI4Njk2Ny4wLDIyMzY4NDYuMCwyOTQyNDc3LjAsMjQzNzg2LjAsNDQzOTc0LjAsNzk1MTM3LjAsODQ1NDc0LjAsMTk1Mjg3NC4wLDIxMDEwNjEuMCwyNzI4OTUuMCwxMjIxNjEwLjAsNTE5MTA1LjAsMTg2NjAwMS4wLDI0MzQ2MC4wLDgwNDg3NC4wLDc2MDQyMC4wLDQ5NzUwNi4wLDU2MTMyNi4wLDc3NjYwMC4wLDI0NjU5MjUuMCwzMDAyOTc0LjAsMTI5MzQ2NS4wLDM4ODIyMDkuMCwxMzM3Mzg2LjAsODk2NTAuMCw0MTE5OTQuMCwxOTM5MDk2LjAsNTk4MDc2LjAsNDMyNDAzLjAsNzI5ODQ1LjAsMzQyODIyLjAsNjI4NzkzLjAsMjM5NjIzLjAsODY2MzczLjAsMjMyMTM3My4wLDI2MDUwNy4wLDY3NjAyNS4wLDI3MzM1MS4wLDM0MjAwNy4wLDE0MzI4OC4wLDEuMDQwMTU4M0U3CisxNyxUaHUgMTAgRmViIDExLDYwOTQ4MC4wLDcyMzc1My4wLDc2Nzc1Ni4wLDI3NTk1ODEuMCw2MDQ0ODMuMCw2Mzc4NTMuMCwxMjg4NzA2LjAsODM5ODQuMCw1MzU3NzAuMCwxMjUzOTcwLjAsNTMxNjQ4LjAsMTY4MjI1OC4wLDIxOTg5MjguMCw1MTE0NzQuMCwxNzk4MDY3LjAsNTQ4ODk4LjAsODI5OTE3LjAsOTMzNzA5LjAsMTE3MjI4OC4wLDEyMTQ1MzQuMCw2MjY2NDguMCw5NjYyLjAsMTIyMzAxNC4wLDE1MTAzOTEuMCwzNjY5NDkuMCwxNTcwNDAuMCw2MDYyMjkuMCwzNzM4NDQ4LjAsMjAxMjg1MS4wLDIyODU0NTEuMCwxMjgxOTgyLjAsNzA5NjExLjAsMjAyMTgzLjAsMjI4Njk2Ny4wLDIyMzY4NDYuMCwyOTQyNDc3LjAsMjQzNzg2LjAsNDQzOTc0LjAsNzk1MTM3LjAsODQ1NDc0LjAsMTk1Mjg3NC4wLDIxMDEwNjEuMCwyNzI4OTUuMCwxMjIxNjEwLjAsNTE5MTA1LjAsMTg2NjAwMS4wLDI0MzQ2MC4wLDgwNDg3NC4wLDc2MDQyMC4wLDQ5NzUwNi4wLDU2MTMyNi4wLDc3NjYwMC4wLDI0NjU5MjUuMCwzMDAyOTc0LjAsMTI5MzQ2NS4wLDM4ODIyMDkuMCwxMzM3Mzg2LjAsODk2NTAuMCw0MTE5OTQuMCwxOTM5MDk2LjAsNTk4MDc2LjAsNDMyNDAzLjAsNzI5ODQ1LjAsMzQyODIyLjAsNjI4NzkzLjAsMjM5NjIzLjAsODY2MzczLjAsMjMyMTM3My4wLDI2MDUwNy4wLDY3NjAyNS4wLDI3MzM1MS4wLDM0MjAwNy4wLDE0MzI4OC4wLDEuMDQwMTU4M0U3CisxOCxGcmkgMTEgRmViIDExLDYwOTQ4MC4wLDcyMzc1My4wLDc2Nzc1Ni4wLDI3NTk1ODEuMCw2MDQ0ODMuMCw2Mzc4NTMuMCwxMjg4NzA2LjAsODM5ODQuMCw1MzU3NzAuMCwxMjUzOTcwLjAsNTMxNjQ4LjAsMTY4MjI1OC4wLDIxOTg5MjguMCw1MTE0NzQuMCwxNzk4MDY3LjAsNTQ4ODk4LjAsODI5OTE3LjAsOTMzNzA5LjAsMTE3MjI4OC4wLDEyMTQ1MzQuMCw2MjY2NDguMCw5NjYyLjAsMTIyMzAxNC4wLDE1MTAzOTEuMCwzNjY5NDkuMCwxNTcwNDAuMCw2MDYyMjkuMCwzNzM4NDQ4LjAsMjAxMjg1MS4wLDIyODU0NTEuMCwxMjgxOTgyLjAsNzA5NjExLjAsMjAyMTgzLjAsMjI4Njk2Ny4wLDIyMzY4NDYuMCwyOTQyNDc3LjAsMjQzNzg2LjAsNDQzOTc0LjAsNzk1MTM3LjAsODQ1NDc0LjAsMTk1Mjg3NC4wLDIxMDEwNjEuMCwyNzI4OTUuMCwxMjIxNjEwLjAsNTE5MTA1LjAsMTg2NjAwMS4wLDI0MzQ2MC4wLDgwNDg3NC4wLDc2MDQyMC4wLDQ5NzUwNi4wLDU2MTMyNi4wLDc3NjYwMC4wLDI0NjU5MjUuMCwzMDAyOTc0LjAsMTI5MzQ2NS4wLDM4ODIyMDkuMCwxMzM3Mzg2LjAsODk2NTAuMCw0MTE5OTQuMCwxOTM5MDk2LjAsNTk4MDc2LjAsNDMyNDAzLjAsNzI5ODQ1LjAsMzQyODIyLjAsNjI4NzkzLjAsMjM5NjIzLjAsODY2MzczLjAsMjMyMTM3My4wLDI2MDUwNy4wLDY3NjAyNS4wLDI3MzM1MS4wLDM0MjAwNy4wLDE0MzI4OC4wLDEuMDQwMTU4M0U3CisxOSxTYXQgMTIgRmViIDExLDYwOTQ4MC4wLDcyMzc1My4wLDc2Nzc1Ni4wLDI3NTk1ODEuMCw2MDQ0ODMuMCw2Mzc4NTMuMCwxMjg4NzA2LjAsODM5ODQuMCw1MzU3NzAuMCwxMjUzOTcwLjAsNTMxNjQ4LjAsMTY4MjI1OC4wLDIxOTg5MjguMCw1MTE0NzQuMCwxNzk4MDY3LjAsNTQ4ODk4LjAsODI5OTE3LjAsOTMzNzA5LjAsMTE3MjI4OC4wLDEyMTQ1MzQuMCw2MjY2NDguMCw5NjYyLjAsMTIyMzAxNC4wLDE1MTAzOTEuMCwzNjY5NDkuMCwxNTcwNDAuMCw2MDYyMjkuMCwzNzM4NDQ4LjAsMjAxMjg1MS4wLDIyODU0NTEuMCwxMjgxOTgyLjAsNzA5NjExLjAsMjAyMTgzLjAsMjI4Njk2Ny4wLDIyMzY4NDYuMCwyOTQyNDc3LjAsMjQzNzg2LjAsNDQzOTc0LjAsNzk1MTM3LjAsODQ1NDc0LjAsMTk1Mjg3NC4wLDIxMDEwNjEuMCwyNzI4OTUuMCwxMjIxNjEwLjAsNTE5MTA1LjAsMTg2NjAwMS4wLDI0MzQ2MC4wLDgwNDg3NC4wLDc2MDQyMC4wLDQ5NzUwNi4wLDU2MTMyNi4wLDc3NjYwMC4wLDI0NjU5MjUuMCwzMDAyOTc0LjAsMTI5MzQ2NS4wLDM4ODIyMDkuMCwxMzM3Mzg2LjAsODk2NTAuMCw0MTE5OTQuMCwxOTM5MDk2LjAsNTk4MDc2LjAsNDMyNDAzLjAsNzI5ODQ1LjAsMzQyODIyLjAsNjI4NzkzLjAsMjM5NjIzLjAsODY2MzczLjAsMjMyMTM3My4wLDI2MDUwNy4wLDY3NjAyNS4wLDI3MzM1MS4wLDM0MjAwNy4wLDE0MzI4OC4wLDEuMDQwMTU4M0U3CisyMCxTdW4gMTMgRmViIDExLDYwOTQ4MC4wLDcyMzc1My4wLDc2Nzc1Ni4wLDI3NTk1ODEuMCw2MDQ0ODMuMCw2Mzc4NTMuMCwxMjg4NzA2LjAsODM5ODQuMCw1MzU3NzAuMCwxMjUzOTcwLjAsNTMxNjQ4LjAsMTY4MjI1OC4wLDIxOTg5MjguMCw1MTE0NzQuMCwxNzk4MDY3LjAsNTQ4ODk4LjAsODI5OTE3LjAsOTMzNzA5LjAsMTE3MjI4OC4wLDEyMTQ1MzQuMCw2MjY2NDguMCw5NjYyLjAsMTIyMzAxNC4wLDE1MTAzOTEuMCwzNjY5NDkuMCwxNTcwNDAuMCw2MDYyMjkuMCwzNzM4NDQ4LjAsMjAxMjg1MS4wLDIyODU0NTEuMCwxMjgxOTgyLjAsNzA5NjExLjAsMjAyMTgzLjAsMjI4Njk2Ny4wLDIyMzY4NDYuMCwyOTQyNDc3LjAsMjQzNzg2LjAsNDQzOTc0LjAsNzk1MTM3LjAsODQ1NDc0LjAsMTk1Mjg3NC4wLDIxMDEwNjEuMCwyNzI4OTUuMCwxMjIxNjEwLjAsNTE5MTA1LjAsMTg2NjAwMS4wLDI0MzQ2MC4wLDgwNDg3NC4wLDc2MDQyMC4wLDQ5NzUwNi4wLDU2MTMyNi4wLDc3NjYwMC4wLDI0NjU5MjUuMCwzMDAyOTc0LjAsMTI5MzQ2NS4wLDM4ODIyMDkuMCwxMzM3Mzg2LjAsODk2NTAuMCw0MTE5OTQuMCwxOTM5MDk2LjAsNTk4MDc2LjAsNDMyNDAzLjAsNzI5ODQ1LjAsMzQyODIyLjAsNjI4NzkzLjAsMjM5NjIzLjAsODY2MzczLjAsMjMyMTM3My4wLDI2MDUwNy4wLDY3NjAyNS4wLDI3MzM1MS4wLDM0MjAwNy4wLDE0MzI4OC4wLDEuMDQwMTU4M0U3CisyMSxNb24gMTQgRmViIDExLDYwOTQ4MC4wLDcyMzc1My4wLDc2Nzc1Ni4wLDI3NTk1ODEuMCw2MDQ0ODMuMCw2Mzc4NTMuMCwxMjg4NzA2LjAsODM5ODQuMCw1MzU3NzAuMCwxMjUzOTcwLjAsNTMxNjQ4LjAsMTY4MjI1OC4wLDIxOTg5MjguMCw1MTE0NzQuMCwxNzk4MDY3LjAsNTQ4ODk4LjAsODI5OTE3LjAsOTMzNzA5LjAsMTE3MjI4OC4wLDEyMTQ1MzQuMCw2MjY2NDguMCw5NjYyLjAsMTIyMzAxNC4wLDE1MTAzOTEuMCwzNjY5NDkuMCwxNTcwNDAuMCw2MDYyMjkuMCwzNzM4NDQ4LjAsMjAxMjg1MS4wLDIyODU0NTEuMCwxMjgxOTgyLjAsNzA5NjExLjAsMjAyMTgzLjAsMjI4Njk2Ny4wLDIyMzY4NDYuMCwyOTQyNDc3LjAsMjQzNzg2LjAsNDQzOTc0LjAsNzk1MTM3LjAsODQ1NDc0LjAsMTk1Mjg3NC4wLDIxMDEwNjEuMCwyNzI4OTUuMCwxMjIxNjEwLjAsNTE5MTA1LjAsMTg2NjAwMS4wLDI0MzQ2MC4wLDgwNDg3NC4wLDc2MDQyMC4wLDQ5NzUwNi4wLDU2MTMyNi4wLDc3NjYwMC4wLDI0NjU5MjUuMCwzMDAyOTc0LjAsMTI5MzQ2NS4wLDM4ODIyMDkuMCwxMzM3Mzg2LjAsODk2NTAuMCw0MTE5OTQuMCwxOTM5MDk2LjAsNTk4MDc2LjAsNDMyNDAzLjAsNzI5ODQ1LjAsMzQyODIyLjAsNjI4NzkzLjAsMjM5NjIzLjAsODY2MzczLjAsMjMyMTM3My4wLDI2MDUwNy4wLDY3NjAyNS4wLDI3MzM1MS4wLDM0MjAwNy4wLDE0MzI4OC4wLDEuMDQwMTU4M0U3CisyMixUdWUgMTUgRmViIDExLDYwOTQ4MC4wLDcyMzc1My4wLDc2Nzc1Ni4wLDI3NTk1ODEuMCw2MDQ0ODMuMCw2Mzc4NTMuMCwxMjg4NzA2LjAsODM5ODQuMCw1MzU3NzAuMCwxMjUzOTcwLjAsNTMxNjQ4LjAsMTY4MjI1OC4wLDIxOTg5MjguMCw1MTE0NzQuMCwxNzk4MDY3LjAsNTQ4ODk4LjAsODI5OTE3LjAsOTMzNzA5LjAsMTE3MjI4OC4wLDEyMTQ1MzQuMCw2MjY2NDguMCw5NjYyLjAsMTIyMzAxNC4wLDE1MTAzOTEuMCwzNjY5NDkuMCwxNTcwNDAuMCw2MDYyMjkuMCwzNzM4NDQ4LjAsMjAxMjg1MS4wLDIyODU0NTEuMCwxMjgxOTgyLjAsNzA5NjExLjAsMjAyMTgzLjAsMjI4Njk2Ny4wLDIyMzY4NDYuMCwyOTQyNDc3LjAsMjQzNzg2LjAsNDQzOTc0LjAsNzk1MTM3LjAsODQ1NDc0LjAsMTk1Mjg3NC4wLDIxMDEwNjEuMCwyNzI4OTUuMCwxMjIxNjEwLjAsNTE5MTA1LjAsMTg2NjAwMS4wLDI0MzQ2MC4wLDgwNDg3NC4wLDc2MDQyMC4wLDQ5NzUwNi4wLDU2MTMyNi4wLDc3NjYwMC4wLDI0NjU5MjUuMCwzMDAyOTc0LjAsMTI5MzQ2NS4wLDM4ODIyMDkuMCwxMzM3Mzg2LjAsODk2NTAuMCw0MTE5OTQuMCwxOTM5MDk2LjAsNTk4MDc2LjAsNDMyNDAzLjAsNzI5ODQ1LjAsMzQyODIyLjAsNjI4NzkzLjAsMjM5NjIzLjAsODY2MzczLjAsMjMyMTM3My4wLDI2MDUwNy4wLDY3NjAyNS4wLDI3MzM1MS4wLDM0MjAwNy4wLDE0MzI4OC4wLDEuMDQwMTU4M0U3CisyMyxXZWQgMTYgRmViIDExLDYwOTQ4MC4wLDcyMzc1My4wLDc2Nzc1Ni4wLDI3NTk1ODEuMCw2MDQ0ODMuMCw2Mzc4NTMuMCwxMjg4NzA2LjAsODM5ODQuMCw1MzU3NzAuMCwxMjUzOTcwLjAsNTMxNjQ4LjAsMTY4MjI1OC4wLDIxOTg5MjguMCw1MTE0NzQuMCwxNzk4MDY3LjAsNTQ4ODk4LjAsODI5OTE3LjAsOTMzNzA5LjAsMTE3MjI4OC4wLDEyMTQ1MzQuMCw2MjY2NDguMCw5NjYyLjAsMTIyMzAxNC4wLDE1MTAzOTEuMCwzNjY5NDkuMCwxNTcwNDAuMCw2MDYyMjkuMCwzNzM4NDQ4LjAsMjAxMjg1MS4wLDIyODU0NTEuMCwxMjgxOTgyLjAsNzA5NjExLjAsMjAyMTgzLjAsMjI4Njk2Ny4wLDIyMzY4NDYuMCwyOTQyNDc3LjAsMjQzNzg2LjAsNDQzOTc0LjAsNzk1MTM3LjAsODQ1NDc0LjAsMTk1Mjg3NC4wLDIxMDEwNjEuMCwyNzI4OTUuMCwxMjIxNjEwLjAsNTE5MTA1LjAsMTg2NjAwMS4wLDI0MzQ2MC4wLDgwNDg3NC4wLDc2MDQyMC4wLDQ5NzUwNi4wLDU2MTMyNi4wLDc3NjYwMC4wLDI0NjU5MjUuMCwzMDAyOTc0LjAsMTI5MzQ2NS4wLDM4ODIyMDkuMCwxMzM3Mzg2LjAsODk2NTAuMCw0MTE5OTQuMCwxOTM5MDk2LjAsNTk4MDc2LjAsNDMyNDAzLjAsNzI5ODQ1LjAsMzQyODIyLjAsNjI4NzkzLjAsMjM5NjIzLjAsODY2MzczLjAsMjMyMTM3My4wLDI2MDUwNy4wLDY3NjAyNS4wLDI3MzM1MS4wLDM0MjAwNy4wLDE0MzI4OC4wLDEuMDQwMTU4M0U3CisyNCxUaHUgMTcgRmViIDExLDYwOTQ4MC4wLDcyMzc1My4wLDc2Nzc1Ni4wLDI3NTk1ODEuMCw2MDQ0ODMuMCw2Mzc4NTMuMCwxMjg4NzA2LjAsODM5ODQuMCw1MzU3NzAuMCwxMjUzOTcwLjAsNTMxNjQ4LjAsMTY4MjI1OC4wLDIxOTg5MjguMCw1MTE0NzQuMCwxNzk4MDY3LjAsNTQ4ODk4LjAsODI5OTE3LjAsOTMzNzA5LjAsMTE3MjI4OC4wLDEyMTQ1MzQuMCw2MjY2NDguMCw5NjYyLjAsMTIyMzAxNC4wLDE1MTAzOTEuMCwzNjY5NDkuMCwxNTcwNDAuMCw2MDYyMjkuMCwzNzM4NDQ4LjAsMjAxMjg1MS4wLDIyODU0NTEuMCwxMjgxOTgyLjAsNzA5NjExLjAsMjAyMTgzLjAsMjI4Njk2Ny4wLDIyMzY4NDYuMCwyOTQyNDc3LjAsMjQzNzg2LjAsNDQzOTc0LjAsNzk1MTM3LjAsODQ1NDc0LjAsMTk1Mjg3NC4wLDIxMDEwNjEuMCwyNzI4OTUuMCwxMjIxNjEwLjAsNTE5MTA1LjAsMTg2NjAwMS4wLDI0MzQ2MC4wLDgwNDg3NC4wLDc2MDQyMC4wLDQ5NzUwNi4wLDU2MTMyNi4wLDc3NjYwMC4wLDI0NjU5MjUuMCwzMDAyOTc0LjAsMTI5MzQ2NS4wLDM4ODIyMDkuMCwxMzM3Mzg2LjAsODk2NTAuMCw0MTE5OTQuMCwxOTM5MDk2LjAsNTk4MDc2LjAsNDMyNDAzLjAsNzI5ODQ1LjAsMzQyODIyLjAsNjI4NzkzLjAsMjM5NjIzLjAsODY2MzczLjAsMjMyMTM3My4wLDI2MDUwNy4wLDY3NjAyNS4wLDI3MzM1MS4wLDM0MjAwNy4wLDE0MzI4OC4wLDEuMDQwMTU4M0U3CisyNSxGcmkgMTggRmViIDExLDYwOTQ4MC4wLDcyMzc1My4wLDc2Nzc1Ni4wLDI3NTk1ODEuMCw2MDQ0ODMuMCw2Mzc4NTMuMCwxMjg4NzA2LjAsODM5ODQuMCw1MzU3NzAuMCwxMjUzOTcwLjAsNTMxNjQ4LjAsMTY4MjI1OC4wLDIxOTg5MjguMCw1MTE0NzQuMCwxNzk4MDY3LjAsNTQ4ODk4LjAsODI5OTE3LjAsOTMzNzA5LjAsMTE3MjI4OC4wLDEyMTQ1MzQuMCw2MjY2NDguMCw5NjYyLjAsMTIyMzAxNC4wLDE1MTAzOTEuMCwzNjY5NDkuMCwxNTcwNDAuMCw2MDYyMjkuMCwzNzM4NDQ4LjAsMjAxMjg1MS4wLDIyODU0NTEuMCwxMjgxOTgyLjAsNzA5NjExLjAsMjAyMTgzLjAsMjI4Njk2Ny4wLDIyMzY4NDYuMCwyOTQyNDc3LjAsMjQzNzg2LjAsNDQzOTc0LjAsNzk1MTM3LjAsODQ1NDc0LjAsMTk1Mjg3NC4wLDIxMDEwNjEuMCwyNzI4OTUuMCwxMjIxNjEwLjAsNTE5MTA1LjAsMTg2NjAwMS4wLDI0MzQ2MC4wLDgwNDg3NC4wLDc2MDQyMC4wLDQ5NzUwNi4wLDU2MTMyNi4wLDc3NjYwMC4wLDI0NjU5MjUuMCwzMDAyOTc0LjAsMTI5MzQ2NS4wLDM4ODIyMDkuMCwxMzM3Mzg2LjAsODk2NTAuMCw0MTE5OTQuMCwxOTM5MDk2LjAsNTk4MDc2LjAsNDMyNDAzLjAsNzI5ODQ1LjAsMzQyODIyLjAsNjI4NzkzLjAsMjM5NjIzLjAsODY2MzczLjAsMjMyMTM3My4wLDI2MDUwNy4wLDY3NjAyNS4wLDI3MzM1MS4wLDM0MjAwNy4wLDE0MzI4OC4wLDEuMDQwMTU4M0U3CisyNixTYXQgMTkgRmViIDExLDYwOTQ4MC4wLDcyMzc1My4wLDc2Nzc1Ni4wLDI3NTk1ODEuMCw2MDQ0ODMuMCw2Mzc4NTMuMCwxMjg4NzA2LjAsODM5ODQuMCw1MzU3NzAuMCwxMjUzOTcwLjAsNTMxNjQ4LjAsMTY4MjI1OC4wLDIxOTg5MjguMCw1MTE0NzQuMCwxNzk4MDY3LjAsNTQ4ODk4LjAsODI5OTE3LjAsOTMzNzA5LjAsMTE3MjI4OC4wLDEyMTQ1MzQuMCw2MjY2NDguMCw5NjYyLjAsMTIyMzAxNC4wLDE1MTAzOTEuMCwzNjY5NDkuMCwxNTcwNDAuMCw2MDYyMjkuMCwzNzM4NDQ4LjAsMjAxMjg1MS4wLDIyODU0NTEuMCwxMjgxOTgyLjAsNzA5NjExLjAsMjAyMTgzLjAsMjI4Njk2Ny4wLDIyMzY4NDYuMCwyOTQyNDc3LjAsMjQzNzg2LjAsNDQzOTc0LjAsNzk1MTM3LjAsODQ1NDc0LjAsMTk1Mjg3NC4wLDIxMDEwNjEuMCwyNzI4OTUuMCwxMjIxNjEwLjAsNTE5MTA1LjAsMTg2NjAwMS4wLDI0MzQ2MC4wLDgwNDg3NC4wLDc2MDQyMC4wLDQ5NzUwNi4wLDU2MTMyNi4wLDc3NjYwMC4wLDI0NjU5MjUuMCwzMDAyOTc0LjAsMTI5MzQ2NS4wLDM4ODIyMDkuMCwxMzM3Mzg2LjAsODk2NTAuMCw0MTE5OTQuMCwxOTM5MDk2LjAsNTk4MDc2LjAsNDMyNDAzLjAsNzI5ODQ1LjAsMzQyODIyLjAsNjI4NzkzLjAsMjM5NjIzLjAsODY2MzczLjAsMjMyMTM3My4wLDI2MDUwNy4wLDY3NjAyNS4wLDI3MzM1MS4wLDM0MjAwNy4wLDE0MzI4OC4wLDEuMDQwMTU4M0U3CisyNyxTdW4gMjAgRmViIDExLDYwOTQ4MC4wLDcyMzc1My4wLDc2Nzc1Ni4wLDI3NTk1ODEuMCw2MDQ0ODMuMCw2Mzc4NTMuMCwxMjg4NzA2LjAsODM5ODQuMCw1MzU3NzAuMCwxMjUzOTcwLjAsNTMxNjQ4LjAsMTY4MjI1OC4wLDIxOTg5MjguMCw1MTE0NzQuMCwxNzk4MDY3LjAsNTQ4ODk4LjAsODI5OTE3LjAsOTMzNzA5LjAsMTE3MjI4OC4wLDEyMTQ1MzQuMCw2MjY2NDguMCw5NjYyLjAsMTIyMzAxNC4wLDE1MTAzOTEuMCwzNjY5NDkuMCwxNTcwNDAuMCw2MDYyMjkuMCwzNzM4NDQ4LjAsMjAxMjg1MS4wLDIyODU0NTEuMCwxMjgxOTgyLjAsNzA5NjExLjAsMjAyMTgzLjAsMjI4Njk2Ny4wLDIyMzY4NDYuMCwyOTQyNDc3LjAsMjQzNzg2LjAsNDQzOTc0LjAsNzk1MTM3LjAsODQ1NDc0LjAsMTk1Mjg3NC4wLDIxMDEwNjEuMCwyNzI4OTUuMCwxMjIxNjEwLjAsNTE5MTA1LjAsMTg2NjAwMS4wLDI0MzQ2MC4wLDgwNDg3NC4wLDc2MDQyMC4wLDQ5NzUwNi4wLDU2MTMyNi4wLDc3NjYwMC4wLDI0NjU5MjUuMCwzMDAyOTc0LjAsMTI5MzQ2NS4wLDM4ODIyMDkuMCwxMzM3Mzg2LjAsODk2NTAuMCw0MTE5OTQuMCwxOTM5MDk2LjAsNTk4MDc2LjAsNDMyNDAzLjAsNzI5ODQ1LjAsMzQyODIyLjAsNjI4NzkzLjAsMjM5NjIzLjAsODY2MzczLjAsMjMyMTM3My4wLDI2MDUwNy4wLDY3NjAyNS4wLDI3MzM1MS4wLDM0MjAwNy4wLDE0MzI4OC4wLDEuMDQwMTU4M0U3CisyOCxNb24gMjEgRmViIDExLDYwOTQ4MC4wLDcyMzc1My4wLDc2Nzc1Ni4wLDI3NTk1ODEuMCw2MDQ0ODMuMCw2Mzc4NTMuMCwxMjg4NzA2LjAsODM5ODQuMCw1MzU3NzAuMCwxMjUzOTcwLjAsNTMxNjQ4LjAsMTY4MjI1OC4wLDIxOTg5MjguMCw1MTE0NzQuMCwxNzk4MDY3LjAsNTQ4ODk4LjAsODI5OTE3LjAsOTMzNzA5LjAsMTE3MjI4OC4wLDEyMTQ1MzQuMCw2MjY2NDguMCw5NjYyLjAsMTIyMzAxNC4wLDE1MTAzOTEuMCwzNjY5NDkuMCwxNTcwNDAuMCw2MDYyMjkuMCwzNzM4NDQ4LjAsMjAxMjg1MS4wLDIyODU0NTEuMCwxMjgxOTgyLjAsNzA5NjExLjAsMjAyMTgzLjAsMjI4Njk2Ny4wLDIyMzY4NDYuMCwyOTQyNDc3LjAsMjQzNzg2LjAsNDQzOTc0LjAsNzk1MTM3LjAsODQ1NDc0LjAsMTk1Mjg3NC4wLDIxMDEwNjEuMCwyNzI4OTUuMCwxMjIxNjEwLjAsNTE5MTA1LjAsMTg2NjAwMS4wLDI0MzQ2MC4wLDgwNDg3NC4wLDc2MDQyMC4wLDQ5NzUwNi4wLDU2MTMyNi4wLDc3NjYwMC4wLDI0NjU5MjUuMCwzMDAyOTc0LjAsMTI5MzQ2NS4wLDM4ODIyMDkuMCwxMzM3Mzg2LjAsODk2NTAuMCw0MTE5OTQuMCwxOTM5MDk2LjAsNTk4MDc2LjAsNDMyNDAzLjAsNzI5ODQ1LjAsMzQyODIyLjAsNjI4NzkzLjAsMjM5NjIzLjAsODY2MzczLjAsMjMyMTM3My4wLDI2MDUwNy4wLDY3NjAyNS4wLDI3MzM1MS4wLDM0MjAwNy4wLDE0MzI4OC4wLDEuMDQwMTU4M0U3CisyOSxUdWUgMjIgRmViIDExLDYwOTQ4MC4wLDcyMzc1My4wLDc2Nzc1Ni4wLDI3NTk1ODEuMCw2MDQ0ODMuMCw2Mzc4NTMuMCwxMjg4NzA2LjAsODM5ODQuMCw1MzU3NzAuMCwxMjUzOTcwLjAsNTMxNjQ4LjAsMTY4MjI1OC4wLDIxOTg5MjguMCw1MTE0NzQuMCwxNzk4MDY3LjAsNTQ4ODk4LjAsODI5OTE3LjAsOTMzNzA5LjAsMTE3MjI4OC4wLDEyMTQ1MzQuMCw2MjY2NDguMCw5NjYyLjAsMTIyMzAxNC4wLDE1MTAzOTEuMCwzNjY5NDkuMCwxNTcwNDAuMCw2MDYyMjkuMCwzNzM4NDQ4LjAsMjAxMjg1MS4wLDIyODU0NTEuMCwxMjgxOTgyLjAsNzA5NjExLjAsMjAyMTgzLjAsMjI4Njk2Ny4wLDIyMzY4NDYuMCwyOTQyNDc3LjAsMjQzNzg2LjAsNDQzOTc0LjAsNzk1MTM3LjAsODQ1NDc0LjAsMTk1Mjg3NC4wLDIxMDEwNjEuMCwyNzI4OTUuMCwxMjIxNjEwLjAsNTE5MTA1LjAsMTg2NjAwMS4wLDI0MzQ2MC4wLDgwNDg3NC4wLDc2MDQyMC4wLDQ5NzUwNi4wLDU2MTMyNi4wLDc3NjYwMC4wLDI0NjU5MjUuMCwzMDAyOTc0LjAsMTI5MzQ2NS4wLDM4ODIyMDkuMCwxMzM3Mzg2LjAsODk2NTAuMCw0MTE5OTQuMCwxOTM5MDk2LjAsNTk4MDc2LjAsNDMyNDAzLjAsNzI5ODQ1LjAsMzQyODIyLjAsNjI4NzkzLjAsMjM5NjIzLjAsODY2MzczLjAsMjMyMTM3My4wLDI2MDUwNy4wLDY3NjAyNS4wLDI3MzM1MS4wLDM0MjAwNy4wLDE0MzI4OC4wLDEuMDQwMTU4M0U3CiszMCxXZWQgMjMgRmViIDExLDYwOTQ4MC4wLDcyMzc1My4wLDc2Nzc1Ni4wLDI3NTk1ODEuMCw2MDQ0ODMuMCw2Mzc4NTMuMCwxMjg4NzA2LjAsODM5ODQuMCw1MzU3NzAuMCwxMjUzOTcwLjAsNTMxNjQ4LjAsMTY4MjI1OC4wLDIxOTg5MjguMCw1MTE0NzQuMCwxNzk4MDY3LjAsNTQ4ODk4LjAsODI5OTE3LjAsOTMzNzA5LjAsMTE3MjI4OC4wLDEyMTQ1MzQuMCw2MjY2NDguMCw5NjYyLjAsMTIyMzAxNC4wLDE1MTAzOTEuMCwzNjY5NDkuMCwxNTcwNDAuMCw2MDYyMjkuMCwzNzM4NDQ4LjAsMjAxMjg1MS4wLDIyODU0NTEuMCwxMjgxOTgyLjAsNzA5NjExLjAsMjAyMTgzLjAsMjI4Njk2Ny4wLDIyMzY4NDYuMCwyOTQyNDc3LjAsMjQzNzg2LjAsNDQzOTc0LjAsNzk1MTM3LjAsODQ1NDc0LjAsMTk1Mjg3NC4wLDIxMDEwNjEuMCwyNzI4OTUuMCwxMjIxNjEwLjAsNTE5MTA1LjAsMTg2NjAwMS4wLDI0MzQ2MC4wLDgwNDg3NC4wLDc2MDQyMC4wLDQ5NzUwNi4wLDU2MTMyNi4wLDc3NjYwMC4wLDI0NjU5MjUuMCwzMDAyOTc0LjAsMTI5MzQ2NS4wLDM4ODIyMDkuMCwxMzM3Mzg2LjAsODk2NTAuMCw0MTE5OTQuMCwxOTM5MDk2LjAsNTk4MDc2LjAsNDMyNDAzLjAsNzI5ODQ1LjAsMzQyODIyLjAsNjI4NzkzLjAsMjM5NjIzLjAsODY2MzczLjAsMjMyMTM3My4wLDI2MDUwNy4wLDY3NjAyNS4wLDI3MzM1MS4wLDM0MjAwNy4wLDE0MzI4OC4wLDEuMDQwMTU4M0U3CiszMSxUaHUgMjQgRmViIDExLDYwOTQ4MC4wLDcyMzc1My4wLDc2Nzc1Ni4wLDI3NTk1ODEuMCw2MDQ0ODMuMCw2Mzc4NTMuMCwxMjg4NzA2LjAsODM5ODQuMCw1MzU3NzAuMCwxMjUzOTcwLjAsNTMxNjQ4LjAsMTY4MjI1OC4wLDIxOTg5MjguMCw1MTE0NzQuMCwxNzk4MDY3LjAsNTQ4ODk4LjAsODI5OTE3LjAsOTMzNzA5LjAsMTE3MjI4OC4wLDEyMTQ1MzQuMCw2MjY2NDguMCw5NjYyLjAsMTIyMzAxNC4wLDE1MTAzOTEuMCwzNjY5NDkuMCwxNTcwNDAuMCw2MDYyMjkuMCwzNzM4NDQ4LjAsMjAxMjg1MS4wLDIyODU0NTEuMCwxMjgxOTgyLjAsNzA5NjExLjAsMjAyMTgzLjAsMjI4Njk2Ny4wLDIyMzY4NDYuMCwyOTQyNDc3LjAsMjQzNzg2LjAsNDQzOTc0LjAsNzk1MTM3LjAsODQ1NDc0LjAsMTk1Mjg3NC4wLDIxMDEwNjEuMCwyNzI4OTUuMCwxMjIxNjEwLjAsNTE5MTA1LjAsMTg2NjAwMS4wLDI0MzQ2MC4wLDgwNDg3NC4wLDc2MDQyMC4wLDQ5NzUwNi4wLDU2MTMyNi4wLDc3NjYwMC4wLDI0NjU5MjUuMCwzMDAyOTc0LjAsMTI5MzQ2NS4wLDM4ODIyMDkuMCwxMzM3Mzg2LjAsODk2NTAuMCw0MTE5OTQuMCwxOTM5MDk2LjAsNTk4MDc2LjAsNDMyNDAzLjAsNzI5ODQ1LjAsMzQyODIyLjAsNjI4NzkzLjAsMjM5NjIzLjAsODY2MzczLjAsMjMyMTM3My4wLDI2MDUwNy4wLDY3NjAyNS4wLDI3MzM1MS4wLDM0MjAwNy4wLDE0MzI4OC4wLDEuMDQwMTU4M0U3CiszMixGcmkgMjUgRmViIDExLDYwOTQ4MC4wLDcyMzc1My4wLDc2Nzc1Ni4wLDI3NTk1ODEuMCw2MDQ0ODMuMCw2Mzc4NTMuMCwxMjg4NzA2LjAsODM5ODQuMCw1MzU3NzAuMCwxMjUzOTcwLjAsNTMxNjQ4LjAsMTY4MjI1OC4wLDIxOTg5MjguMCw1MTE0NzQuMCwxNzk4MDY3LjAsNTQ4ODk4LjAsODI5OTE3LjAsOTMzNzA5LjAsMTE3MjI4OC4wLDEyMTQ1MzQuMCw2MjY2NDguMCw5NjYyLjAsMTIyMzAxNC4wLDE1MTAzOTEuMCwzNjY5NDkuMCwxNTcwNDAuMCw2MDYyMjkuMCwzNzM4NDQ4LjAsMjAxMjg1MS4wLDIyODU0NTEuMCwxMjgxOTgyLjAsNzA5NjExLjAsMjAyMTgzLjAsMjI4Njk2Ny4wLDIyMzY4NDYuMCwyOTQyNDc3LjAsMjQzNzg2LjAsNDQzOTc0LjAsNzk1MTM3LjAsODQ1NDc0LjAsMTk1Mjg3NC4wLDIxMDEwNjEuMCwyNzI4OTUuMCwxMjIxNjEwLjAsNTE5MTA1LjAsMTg2NjAwMS4wLDI0MzQ2MC4wLDgwNDg3NC4wLDc2MDQyMC4wLDQ5NzUwNi4wLDU2MTMyNi4wLDc3NjYwMC4wLDI0NjU5MjUuMCwzMDAyOTc0LjAsMTI5MzQ2NS4wLDM4ODIyMDkuMCwxMzM3Mzg2LjAsODk2NTAuMCw0MTE5OTQuMCwxOTM5MDk2LjAsNTk4MDc2LjAsNDMyNDAzLjAsNzI5ODQ1LjAsMzQyODIyLjAsNjI4NzkzLjAsMjM5NjIzLjAsODY2MzczLjAsMjMyMTM3My4wLDI2MDUwNy4wLDY3NjAyNS4wLDI3MzM1MS4wLDM0MjAwNy4wLDE0MzI4OC4wLDEuMDQwMTU4M0U3CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNFSVJfRkRfUmVmZXJlbmNlL2F1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwvaHVtYW4vRGVhdGhzXzAuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTRUlSX0ZEX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL2h1bWFuL0RlYXRoc18wLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YjEzOTBjCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTRUlSX0ZEX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL2h1bWFuL0RlYXRoc18wLmNzdgpAQCAtMCwwICsxLDMzIEBACitpdGVyYXRpb24sdGltZSxzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9ub2RlL3RyYW5zcG9ydC9waXBlL1BITAorMSxUdWUgMjUgSmFuIDExLDAuMAorMixXZWQgMjYgSmFuIDExLDAuMAorMyxUaHUgMjcgSmFuIDExLDAuMAorNCxGcmkgMjggSmFuIDExLDAuMAorNSxTYXQgMjkgSmFuIDExLDAuMAorNixTdW4gMzAgSmFuIDExLDAuMAorNyxNb24gMzEgSmFuIDExLDAuMAorOCxUdWUgMSBGZWIgMTEsMC4wCis5LFdlZCAyIEZlYiAxMSwwLjAKKzEwLFRodSAzIEZlYiAxMSwwLjAKKzExLEZyaSA0IEZlYiAxMSwwLjAKKzEyLFNhdCA1IEZlYiAxMSwwLjAKKzEzLFN1biA2IEZlYiAxMSwwLjAKKzE0LE1vbiA3IEZlYiAxMSwwLjAKKzE1LFR1ZSA4IEZlYiAxMSwwLjAKKzE2LFdlZCA5IEZlYiAxMSwwLjAKKzE3LFRodSAxMCBGZWIgMTEsMC4wCisxOCxGcmkgMTEgRmViIDExLDAuMAorMTksU2F0IDEyIEZlYiAxMSwwLjAKKzIwLFN1biAxMyBGZWIgMTEsMC4wCisyMSxNb24gMTQgRmViIDExLDAuMAorMjIsVHVlIDE1IEZlYiAxMSwwLjAKKzIzLFdlZCAxNiBGZWIgMTEsMC4wCisyNCxUaHUgMTcgRmViIDExLDAuMAorMjUsRnJpIDE4IEZlYiAxMSwwLjAKKzI2LFNhdCAxOSBGZWIgMTEsMC4wCisyNyxTdW4gMjAgRmViIDExLDAuMAorMjgsTW9uIDIxIEZlYiAxMSwwLjAKKzI5LFR1ZSAyMiBGZWIgMTEsMC4wCiszMCxXZWQgMjMgRmViIDExLDAuMAorMzEsVGh1IDI0IEZlYiAxMSwwLjAKKzMyLEZyaSAyNSBGZWIgMTEsMC4wCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNFSVJfRkRfUmVmZXJlbmNlL2F1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwvaHVtYW4vRGVhdGhzXzEuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTRUlSX0ZEX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL2h1bWFuL0RlYXRoc18xLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NGMwMjMyCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTRUlSX0ZEX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL2h1bWFuL0RlYXRoc18xLmNzdgpAQCAtMCwwICsxLDMzIEBACitpdGVyYXRpb24sdGltZSxzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9ub2RlL3RyYW5zcG9ydC9waXBlL1BILTExLHN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL25vZGUvdHJhbnNwb3J0L3BpcGUvUEgtMyxzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9ub2RlL3RyYW5zcG9ydC9waXBlL1BILTcsc3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vbm9kZS90cmFuc3BvcnQvcGlwZS9QSC1OQ1IKKzEsVHVlIDI1IEphbiAxMSwwLjAsMC4wLDAuMCwwLjAKKzIsV2VkIDI2IEphbiAxMSwwLjAsMC4wLDAuMCwwLjAKKzMsVGh1IDI3IEphbiAxMSwwLjAsMC4wLDAuMCwwLjAKKzQsRnJpIDI4IEphbiAxMSwwLjAsMC4wLDAuMCwwLjAKKzUsU2F0IDI5IEphbiAxMSwwLjAsMC4wLDAuMCwwLjAKKzYsU3VuIDMwIEphbiAxMSwwLjAsMC4wLDAuMCwwLjAKKzcsTW9uIDMxIEphbiAxMSwwLjAsMC4wLDAuMCwwLjAKKzgsVHVlIDEgRmViIDExLDAuMCwwLjAsMC4wLDAuMAorOSxXZWQgMiBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wCisxMCxUaHUgMyBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wCisxMSxGcmkgNCBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wCisxMixTYXQgNSBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wCisxMyxTdW4gNiBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wCisxNCxNb24gNyBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wCisxNSxUdWUgOCBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wCisxNixXZWQgOSBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wCisxNyxUaHUgMTAgRmViIDExLDAuMCwwLjAsMC4wLDAuMAorMTgsRnJpIDExIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAKKzE5LFNhdCAxMiBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wCisyMCxTdW4gMTMgRmViIDExLDAuMCwwLjAsMC4wLDAuMAorMjEsTW9uIDE0IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAKKzIyLFR1ZSAxNSBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wCisyMyxXZWQgMTYgRmViIDExLDAuMCwwLjAsMC4wLDAuMAorMjQsVGh1IDE3IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAKKzI1LEZyaSAxOCBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wCisyNixTYXQgMTkgRmViIDExLDAuMCwwLjAsMC4wLDAuMAorMjcsU3VuIDIwIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAKKzI4LE1vbiAyMSBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wCisyOSxUdWUgMjIgRmViIDExLDAuMCwwLjAsMC4wLDAuMAorMzAsV2VkIDIzIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAKKzMxLFRodSAyNCBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wCiszMixGcmkgMjUgRmViIDExLDAuMCwwLjAsMC4wLDAuMApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTRUlSX0ZEX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL2h1bWFuL0RlYXRoc18yLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0VJUl9GRF9SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9odW1hbi9EZWF0aHNfMi5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTMwZDZlMQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0VJUl9GRF9SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9odW1hbi9EZWF0aHNfMi5jc3YKQEAgLTAsMCArMSwzMyBAQAoraXRlcmF0aW9uLHRpbWUsUEgtMS1HNjQwMDAxLFBILTEtRzY0MDAwMixQSC0xLUc2NDAwMDMsUEgtMS1HNjQwMDA0LFBILTEwLUc2NTAwMDEsUEgtMTAtRzY1MDAwMixQSC0xMC1HNjUwMDAzLFBILTEwLUc2NTAwMDQsUEgtMTAtRzY1MDAwNSxQSC0xMC1HNjUwMDA2LFBILTEwLUc2NTAwMDcsUEgtMTEtRzY2MDAwMSxQSC0xMS1HNjYwMDAyLFBILTExLUc2NjAwMDMsUEgtMTEtRzY2MDAwNCxQSC0xMS1HNjYwMDA1LFBILTEyLUc2NzAwMDEsUEgtMTItRzY3MDAwMixQSC0xMi1HNjcwMDAzLFBILTEyLUc2NzAwMDQsUEgtMTItRzY3MDAwNSxQSC0yLUc2ODAwMDEsUEgtMi1HNjgwMDAyLFBILTItRzY4MDAwMyxQSC0yLUc2ODAwMDQsUEgtMi1HNjgwMDA1LFBILTMtRzY5MDAwMSxQSC0zLUc2OTAwMDIsUEgtMy1HNjkwMDAzLFBILTMtRzY5MDAwNCxQSC0zLUc2OTAwMDUsUEgtMy1HNjkwMDA2LFBILTQtRzcwMDAwMSxQSC00LUc3MDAwMDIsUEgtNC1HNzAwMDAzLFBILTQtRzcwMDAwNCxQSC00LUc3MDAwMDUsUEgtNC1HNzAwMDA2LFBILTQtRzcwMDAwNyxQSC00LUc3MDAwMDgsUEgtNC1HNzAwMDA5LFBILTQtRzcwMDAxMCxQSC00LUc3MDAwMTEsUEgtNS1HNzEwMDAxLFBILTUtRzcxMDAwMixQSC01LUc3MTAwMDMsUEgtNS1HNzEwMDA0LFBILTUtRzcxMDAwNSxQSC01LUc3MTAwMDYsUEgtNi1HNzIwMDAxLFBILTYtRzcyMDAwMixQSC02LUc3MjAwMDMsUEgtNi1HNzIwMDA0LFBILTYtRzcyMDAwNSxQSC03LUc3MzAwMDEsUEgtNy1HNzMwMDAyLFBILTctRzczMDAwMyxQSC03LUc3MzAwMDQsUEgtOC1HNzQwMDAxLFBILTgtRzc0MDAwMixQSC04LUc3NDAwMDMsUEgtOC1HNzQwMDA0LFBILTgtRzc0MDAwNSxQSC05LUc3NTAwMDEsUEgtOS1HNzUwMDAyLFBILTktRzc1MDAwMyxQSC05LUc3NTAwMDQsUEgtOS1HNzUwMDA1LFBILUNBUi1HMjMwMDAxLFBILUNBUi1HMjMwMDAyLFBILUNBUi1HMjMwMDAzLFBILUNBUi1HMjMwMDA0LFBILUNBUi1HMjMwMDA1LFBILU5DUi1HNTIwMDAxCisxLFR1ZSAyNSBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMixXZWQgMjYgSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzMsVGh1IDI3IEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCis0LEZyaSAyOCBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorNSxTYXQgMjkgSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzYsU3VuIDMwIEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCis3LE1vbiAzMSBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorOCxUdWUgMSBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorOSxXZWQgMiBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTAsVGh1IDMgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzExLEZyaSA0IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxMixTYXQgNSBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTMsU3VuIDYgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzE0LE1vbiA3IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxNSxUdWUgOCBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTYsV2VkIDkgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzE3LFRodSAxMCBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTgsRnJpIDExIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxOSxTYXQgMTIgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzIwLFN1biAxMyBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjEsTW9uIDE0IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyMixUdWUgMTUgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzIzLFdlZCAxNiBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjQsVGh1IDE3IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyNSxGcmkgMTggRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzI2LFNhdCAxOSBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjcsU3VuIDIwIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyOCxNb24gMjEgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzI5LFR1ZSAyMiBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMzAsV2VkIDIzIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCiszMSxUaHUgMjQgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzMyLEZyaSAyNSBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTRUlSX0ZEX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL2h1bWFuL0RlbnNpdHlfMC5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNFSVJfRkRfUmVmZXJlbmNlL2F1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwvaHVtYW4vRGVuc2l0eV8wLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YjEzOTBjCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTRUlSX0ZEX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL2h1bWFuL0RlbnNpdHlfMC5jc3YKQEAgLTAsMCArMSwzMyBAQAoraXRlcmF0aW9uLHRpbWUsc3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vbm9kZS90cmFuc3BvcnQvcGlwZS9QSEwKKzEsVHVlIDI1IEphbiAxMSwwLjAKKzIsV2VkIDI2IEphbiAxMSwwLjAKKzMsVGh1IDI3IEphbiAxMSwwLjAKKzQsRnJpIDI4IEphbiAxMSwwLjAKKzUsU2F0IDI5IEphbiAxMSwwLjAKKzYsU3VuIDMwIEphbiAxMSwwLjAKKzcsTW9uIDMxIEphbiAxMSwwLjAKKzgsVHVlIDEgRmViIDExLDAuMAorOSxXZWQgMiBGZWIgMTEsMC4wCisxMCxUaHUgMyBGZWIgMTEsMC4wCisxMSxGcmkgNCBGZWIgMTEsMC4wCisxMixTYXQgNSBGZWIgMTEsMC4wCisxMyxTdW4gNiBGZWIgMTEsMC4wCisxNCxNb24gNyBGZWIgMTEsMC4wCisxNSxUdWUgOCBGZWIgMTEsMC4wCisxNixXZWQgOSBGZWIgMTEsMC4wCisxNyxUaHUgMTAgRmViIDExLDAuMAorMTgsRnJpIDExIEZlYiAxMSwwLjAKKzE5LFNhdCAxMiBGZWIgMTEsMC4wCisyMCxTdW4gMTMgRmViIDExLDAuMAorMjEsTW9uIDE0IEZlYiAxMSwwLjAKKzIyLFR1ZSAxNSBGZWIgMTEsMC4wCisyMyxXZWQgMTYgRmViIDExLDAuMAorMjQsVGh1IDE3IEZlYiAxMSwwLjAKKzI1LEZyaSAxOCBGZWIgMTEsMC4wCisyNixTYXQgMTkgRmViIDExLDAuMAorMjcsU3VuIDIwIEZlYiAxMSwwLjAKKzI4LE1vbiAyMSBGZWIgMTEsMC4wCisyOSxUdWUgMjIgRmViIDExLDAuMAorMzAsV2VkIDIzIEZlYiAxMSwwLjAKKzMxLFRodSAyNCBGZWIgMTEsMC4wCiszMixGcmkgMjUgRmViIDExLDAuMApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTRUlSX0ZEX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL2h1bWFuL0RlbnNpdHlfMS5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNFSVJfRkRfUmVmZXJlbmNlL2F1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwvaHVtYW4vRGVuc2l0eV8xLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NGMwMjMyCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTRUlSX0ZEX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL2h1bWFuL0RlbnNpdHlfMS5jc3YKQEAgLTAsMCArMSwzMyBAQAoraXRlcmF0aW9uLHRpbWUsc3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vbm9kZS90cmFuc3BvcnQvcGlwZS9QSC0xMSxzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9ub2RlL3RyYW5zcG9ydC9waXBlL1BILTMsc3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vbm9kZS90cmFuc3BvcnQvcGlwZS9QSC03LHN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL25vZGUvdHJhbnNwb3J0L3BpcGUvUEgtTkNSCisxLFR1ZSAyNSBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wCisyLFdlZCAyNiBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wCiszLFRodSAyNyBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wCis0LEZyaSAyOCBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wCis1LFNhdCAyOSBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wCis2LFN1biAzMCBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wCis3LE1vbiAzMSBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wCis4LFR1ZSAxIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAKKzksV2VkIDIgRmViIDExLDAuMCwwLjAsMC4wLDAuMAorMTAsVGh1IDMgRmViIDExLDAuMCwwLjAsMC4wLDAuMAorMTEsRnJpIDQgRmViIDExLDAuMCwwLjAsMC4wLDAuMAorMTIsU2F0IDUgRmViIDExLDAuMCwwLjAsMC4wLDAuMAorMTMsU3VuIDYgRmViIDExLDAuMCwwLjAsMC4wLDAuMAorMTQsTW9uIDcgRmViIDExLDAuMCwwLjAsMC4wLDAuMAorMTUsVHVlIDggRmViIDExLDAuMCwwLjAsMC4wLDAuMAorMTYsV2VkIDkgRmViIDExLDAuMCwwLjAsMC4wLDAuMAorMTcsVGh1IDEwIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAKKzE4LEZyaSAxMSBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wCisxOSxTYXQgMTIgRmViIDExLDAuMCwwLjAsMC4wLDAuMAorMjAsU3VuIDEzIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAKKzIxLE1vbiAxNCBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wCisyMixUdWUgMTUgRmViIDExLDAuMCwwLjAsMC4wLDAuMAorMjMsV2VkIDE2IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAKKzI0LFRodSAxNyBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wCisyNSxGcmkgMTggRmViIDExLDAuMCwwLjAsMC4wLDAuMAorMjYsU2F0IDE5IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAKKzI3LFN1biAyMCBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wCisyOCxNb24gMjEgRmViIDExLDAuMCwwLjAsMC4wLDAuMAorMjksVHVlIDIyIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAKKzMwLFdlZCAyMyBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wCiszMSxUaHUgMjQgRmViIDExLDAuMCwwLjAsMC4wLDAuMAorMzIsRnJpIDI1IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0VJUl9GRF9SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9odW1hbi9EZW5zaXR5XzIuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTRUlSX0ZEX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL2h1bWFuL0RlbnNpdHlfMi5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDZkNjY4NwotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0VJUl9GRF9SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9odW1hbi9EZW5zaXR5XzIuY3N2CkBAIC0wLDAgKzEsMzMgQEAKK2l0ZXJhdGlvbix0aW1lLFBILTEtRzY0MDAwMSxQSC0xLUc2NDAwMDIsUEgtMS1HNjQwMDAzLFBILTEtRzY0MDAwNCxQSC0xMC1HNjUwMDAxLFBILTEwLUc2NTAwMDIsUEgtMTAtRzY1MDAwMyxQSC0xMC1HNjUwMDA0LFBILTEwLUc2NTAwMDUsUEgtMTAtRzY1MDAwNixQSC0xMC1HNjUwMDA3LFBILTExLUc2NjAwMDEsUEgtMTEtRzY2MDAwMixQSC0xMS1HNjYwMDAzLFBILTExLUc2NjAwMDQsUEgtMTEtRzY2MDAwNSxQSC0xMi1HNjcwMDAxLFBILTEyLUc2NzAwMDIsUEgtMTItRzY3MDAwMyxQSC0xMi1HNjcwMDA0LFBILTEyLUc2NzAwMDUsUEgtMi1HNjgwMDAxLFBILTItRzY4MDAwMixQSC0yLUc2ODAwMDMsUEgtMi1HNjgwMDA0LFBILTItRzY4MDAwNSxQSC0zLUc2OTAwMDEsUEgtMy1HNjkwMDAyLFBILTMtRzY5MDAwMyxQSC0zLUc2OTAwMDQsUEgtMy1HNjkwMDA1LFBILTMtRzY5MDAwNixQSC00LUc3MDAwMDEsUEgtNC1HNzAwMDAyLFBILTQtRzcwMDAwMyxQSC00LUc3MDAwMDQsUEgtNC1HNzAwMDA1LFBILTQtRzcwMDAwNixQSC00LUc3MDAwMDcsUEgtNC1HNzAwMDA4LFBILTQtRzcwMDAwOSxQSC00LUc3MDAwMTAsUEgtNC1HNzAwMDExLFBILTUtRzcxMDAwMSxQSC01LUc3MTAwMDIsUEgtNS1HNzEwMDAzLFBILTUtRzcxMDAwNCxQSC01LUc3MTAwMDUsUEgtNS1HNzEwMDA2LFBILTYtRzcyMDAwMSxQSC02LUc3MjAwMDIsUEgtNi1HNzIwMDAzLFBILTYtRzcyMDAwNCxQSC02LUc3MjAwMDUsUEgtNy1HNzMwMDAxLFBILTctRzczMDAwMixQSC03LUc3MzAwMDMsUEgtNy1HNzMwMDA0LFBILTgtRzc0MDAwMSxQSC04LUc3NDAwMDIsUEgtOC1HNzQwMDAzLFBILTgtRzc0MDAwNCxQSC04LUc3NDAwMDUsUEgtOS1HNzUwMDAxLFBILTktRzc1MDAwMixQSC05LUc3NTAwMDMsUEgtOS1HNzUwMDA0LFBILTktRzc1MDAwNSxQSC1DQVItRzIzMDAwMSxQSC1DQVItRzIzMDAwMixQSC1DQVItRzIzMDAwMyxQSC1DQVItRzIzMDAwNCxQSC1DQVItRzIzMDAwNSxQSC1OQ1ItRzUyMDAwMQorMSxUdWUgMjUgSmFuIDExLDE3NC4zNTYzMzM2NzY2MjIwNiwyNjcuMTU2MjUxMTUzNTE5NjMsNDM4LjY5MjY0NjEzNDUwNjYsNTQ3LjU3OTM3MTM3ODY4MDgsMTgwLjIyNzQ4OTU2NDY5ODg2LDgzLjUyNjg3NzQ5NjIzNTE5LDE0Ny45Mjk4ODY1ODc5OTc2LDMzMC42NDU2NjkyOTEzMzg2LDI3NS44Mjg4NzE0OTkxNzYzLDM2NS4zNjUyMjgyODU4ODkxLDE4My41ODY0NDk4MDgzNDk3MywyMTQuNzE4ODc4ODMzOTA1NiwzNzUuNjYwMzc0MTM1MTMyOCw5Ni43OTQ5MTMwNDEwMDk4MiwyMzcuOTc0OTA2MzYyMDg0MjUsMTExLjEzOTk1MzAyNTAyNjMyLDI4OS4zNjEyNDk2MDc3NTQyNSwyMjYuNjMzODk4ODgxMDQwODQsMjM0Ljk5ODA5NTYxOTkyNTgzLDE5MC42Mzc3NDM0ODk5MzA3OCwxMzYuMjk4OTM4NTc2NjQ4NjgsNDYuOTcxMzE3NDUyNjAwODgsMTM1LjgyODU2Njk4NjE1MDc1LDE1MS40MTc2NDQxMTAyNzU3LDExMy40Njk0OTUwMzY5NTIyOCw1NS40NTE5Nzc0MDExMjk5NDUsNDUwLjI5MjY1Mzk0MDQyOTMsMTM5Mi4wODYzODk4NzE1MzIyLDM2NS4yMDI2NjM0NzM0MDE1LDEwMDkuNzQyNDIyOTAzNTk2Myw0MjcuNDg0MDc3NDk1MDgxNSwxODkuNzg2MzA2NDk5MDYzOTMsNTcuNDgwODA5Njg4OTc0ODEsNjQxLjY0OTQ1ODUwNDAxMjIsMTkyMy44Mzc2MTkzMzQzMDgsMTUwNy4zMzkyNzU2NTE4NjIyLDI2Mi41ODcyNDY4NzYzNDY0LDc2LjExODA5MjgyMTUwNjM0LDE3OS41MDUzNzI5NDU2Mzg0LDU4LjA3MDY2MjI1MjU2NTM1NiwyMjQuMzM0MTkxMDU4MjE4MDcsMTI2OS42NzY2OTgwOTA0MDM4LDIwMy4xOTgwNjQwMzU3NDA4OCw1MjIuOTQ5NDg2MzAxMzY5OSwyNjEuNjQ1NjY1MzIyNTgwNjcsMzQyLjE0Njk0MzQxNTYwMDEsMTYzLjMxOTI0NTk5MTgxNTkzLDE5OS4yMDE1ODM5NjIzODA4OCwzNjMuMTU5NjU0MjMzNzI2NTQsMjcwLjA3NTQ1NzM1ODQ0OTYsMjEzLjA1MTIwMTI3NTI4NzUzLDMwMy41NjA5NTg0NDg5Nyw0NTMuMzUzMzcyNjc2NjMxMiwzOTIuODUzNzQxNDk2NTk4NiwzMjMuNzQ2NjUyMzE2NDcxODUsNzg3LjAxOTMzOTkyODY0MDksMjU2LjM4MTAyOTA2MjE4ODUsMjcwLjUxOTAxMDI1OTUwNTE0LDExMi4xMTAyNjE1MDM3MTQzOCwzMjIuNzMwODQzNDg1Nzg2NiwxNTMuNTg1MTY3MzA0MzgzNTYsMjM1LjA5MTA2NzI1Mzg0NjU3LDEyOC42NzA1MzM0NzkwNzMzOCwyNTEuODM0Mjc2MDU5NjQ4OSw0MTYuOTcxNDg1NDExMTQwNiwyMTIuMDkzMjkwODQ3OTM3NywxMzMuNzI2MzY0ODU3MTQ3MjcsMjg5LjU0MTg3MTQyOTY0MDU0LDYzLjA3MzcwMTAzMTQyNzA1LDI3OC4yOTEyMDY5ODE3MjI0LDExMS42NDQ3NDc1OTAyNjMwMiw0Ny42MzU5NDA3MjA5MzE1Myw3MS4yNTIxMTMzNzY0Mjk2MywxNjI4OC4xMDM2NjQyNjU1OAorMixXZWQgMjYgSmFuIDExLDE3NC4zNTYzMzM2NzY2MjIwNiwyNjcuMTU2MjUxMTUzNTE5NjMsNDM4LjY5MjY0NjEzNDUwNjYsNTQ3LjU3OTM3MTM3ODY4MDgsMTgwLjIyNzQ4OTU2NDY5ODg2LDgzLjUyNjg3NzQ5NjIzNTE5LDE0Ny45Mjk4ODY1ODc5OTc2LDMzMC42NDU2NjkyOTEzMzg2LDI3NS44Mjg4NzE0OTkxNzYzLDM2NS4zNjUyMjgyODU4ODkxLDE4My41ODY0NDk4MDgzNDk3MywyMTQuNzE4ODc4ODMzOTA1NiwzNzUuNjYwMzc0MTM1MTMyOCw5Ni43OTQ5MTMwNDEwMDk4MiwyMzcuOTc0OTA2MzYyMDg0MjUsMTExLjEzOTk1MzAyNTAyNjMyLDI4OS4zNjEyNDk2MDc3NTQyNSwyMjYuNjMzODk4ODgxMDQwODQsMjM0Ljk5ODA5NTYxOTkyNTgzLDE5MC42Mzc3NDM0ODk5MzA3OCwxMzYuMjk4OTM4NTc2NjQ4NjgsNDYuOTcxMzE3NDUyNjAwODgsMTM1LjgyODU2Njk4NjE1MDc1LDE1MS40MTc2NDQxMTAyNzU3LDExMy40Njk0OTUwMzY5NTIyOCw1NS40NTE5Nzc0MDExMjk5NDUsNDUwLjI5MjY1Mzk0MDQyOTMsMTM5Mi4wODYzODk4NzE1MzIyLDM2NS4yMDI2NjM0NzM0MDE1LDEwMDkuNzQyNDIyOTAzNTk2Myw0MjcuNDg0MDc3NDk1MDgxNSwxODkuNzg2MzA2NDk5MDYzOTMsNTcuNDgwODA5Njg4OTc0ODEsNjQxLjY0OTQ1ODUwNDAxMjIsMTkyMy44Mzc2MTkzMzQzMDgsMTUwNy4zMzkyNzU2NTE4NjIyLDI2Mi41ODcyNDY4NzYzNDY0LDc2LjExODA5MjgyMTUwNjM0LDE3OS41MDUzNzI5NDU2Mzg0LDU4LjA3MDY2MjI1MjU2NTM1NiwyMjQuMzM0MTkxMDU4MjE4MDcsMTI2OS42NzY2OTgwOTA0MDM4LDIwMy4xOTgwNjQwMzU3NDA4OCw1MjIuOTQ5NDg2MzAxMzY5OSwyNjEuNjQ1NjY1MzIyNTgwNjcsMzQyLjE0Njk0MzQxNTYwMDEsMTYzLjMxOTI0NTk5MTgxNTkzLDE5OS4yMDE1ODM5NjIzODA4OCwzNjMuMTU5NjU0MjMzNzI2NTQsMjcwLjA3NTQ1NzM1ODQ0OTYsMjEzLjA1MTIwMTI3NTI4NzUzLDMwMy41NjA5NTg0NDg5Nyw0NTMuMzUzMzcyNjc2NjMxMiwzOTIuODUzNzQxNDk2NTk4NiwzMjMuNzQ2NjUyMzE2NDcxODUsNzg3LjAxOTMzOTkyODY0MDksMjU2LjM4MTAyOTA2MjE4ODUsMjcwLjUxOTAxMDI1OTUwNTE0LDExMi4xMTAyNjE1MDM3MTQzOCwzMjIuNzMwODQzNDg1Nzg2NiwxNTMuNTg1MTY3MzA0MzgzNTYsMjM1LjA5MTA2NzI1Mzg0NjU3LDEyOC42NzA1MzM0NzkwNzMzOCwyNTEuODM0Mjc2MDU5NjQ4OSw0MTYuOTcxNDg1NDExMTQwNiwyMTIuMDkzMjkwODQ3OTM3NywxMzMuNzI2MzY0ODU3MTQ3MjcsMjg5LjU0MTg3MTQyOTY0MDU0LDYzLjA3MzcwMTAzMTQyNzA1LDI3OC4yOTEyMDY5ODE3MjI0LDExMS42NDQ3NDc1OTAyNjMwMiw0Ny42MzU5NDA3MjA5MzE1Myw3MS4yNTIxMTMzNzY0Mjk2MywxNjI4OC4xMDM2NjQyNjU1OAorMyxUaHUgMjcgSmFuIDExLDE3NC4zNTYzMzM2NzY2MjIwNiwyNjcuMTU2MjUxMTUzNTE5NjMsNDM4LjY5MjY0NjEzNDUwNjYsNTQ3LjU3OTM3MTM3ODY4MDgsMTgwLjIyNzQ4OTU2NDY5ODg2LDgzLjUyNjg3NzQ5NjIzNTE5LDE0Ny45Mjk4ODY1ODc5OTc2LDMzMC42NDU2NjkyOTEzMzg2LDI3NS44Mjg4NzE0OTkxNzYzLDM2NS4zNjUyMjgyODU4ODkxLDE4My41ODY0NDk4MDgzNDk3MywyMTQuNzE4ODc4ODMzOTA1NiwzNzUuNjYwMzc0MTM1MTMyOCw5Ni43OTQ5MTMwNDEwMDk4MiwyMzcuOTc0OTA2MzYyMDg0MjUsMTExLjEzOTk1MzAyNTAyNjMyLDI4OS4zNjEyNDk2MDc3NTQyNSwyMjYuNjMzODk4ODgxMDQwODQsMjM0Ljk5ODA5NTYxOTkyNTgzLDE5MC42Mzc3NDM0ODk5MzA3OCwxMzYuMjk4OTM4NTc2NjQ4NjgsNDYuOTcxMzE3NDUyNjAwODgsMTM1LjgyODU2Njk4NjE1MDc1LDE1MS40MTc2NDQxMTAyNzU3LDExMy40Njk0OTUwMzY5NTIyOCw1NS40NTE5Nzc0MDExMjk5NDUsNDUwLjI5MjY1Mzk0MDQyOTMsMTM5Mi4wODYzODk4NzE1MzIyLDM2NS4yMDI2NjM0NzM0MDE1LDEwMDkuNzQyNDIyOTAzNTk2Myw0MjcuNDg0MDc3NDk1MDgxNSwxODkuNzg2MzA2NDk5MDYzOTMsNTcuNDgwODA5Njg4OTc0ODEsNjQxLjY0OTQ1ODUwNDAxMjIsMTkyMy44Mzc2MTkzMzQzMDgsMTUwNy4zMzkyNzU2NTE4NjIyLDI2Mi41ODcyNDY4NzYzNDY0LDc2LjExODA5MjgyMTUwNjM0LDE3OS41MDUzNzI5NDU2Mzg0LDU4LjA3MDY2MjI1MjU2NTM1NiwyMjQuMzM0MTkxMDU4MjE4MDcsMTI2OS42NzY2OTgwOTA0MDM4LDIwMy4xOTgwNjQwMzU3NDA4OCw1MjIuOTQ5NDg2MzAxMzY5OSwyNjEuNjQ1NjY1MzIyNTgwNjcsMzQyLjE0Njk0MzQxNTYwMDEsMTYzLjMxOTI0NTk5MTgxNTkzLDE5OS4yMDE1ODM5NjIzODA4OCwzNjMuMTU5NjU0MjMzNzI2NTQsMjcwLjA3NTQ1NzM1ODQ0OTYsMjEzLjA1MTIwMTI3NTI4NzUzLDMwMy41NjA5NTg0NDg5Nyw0NTMuMzUzMzcyNjc2NjMxMiwzOTIuODUzNzQxNDk2NTk4NiwzMjMuNzQ2NjUyMzE2NDcxODUsNzg3LjAxOTMzOTkyODY0MDksMjU2LjM4MTAyOTA2MjE4ODUsMjcwLjUxOTAxMDI1OTUwNTE0LDExMi4xMTAyNjE1MDM3MTQzOCwzMjIuNzMwODQzNDg1Nzg2NiwxNTMuNTg1MTY3MzA0MzgzNTYsMjM1LjA5MTA2NzI1Mzg0NjU3LDEyOC42NzA1MzM0NzkwNzMzOCwyNTEuODM0Mjc2MDU5NjQ4OSw0MTYuOTcxNDg1NDExMTQwNiwyMTIuMDkzMjkwODQ3OTM3NywxMzMuNzI2MzY0ODU3MTQ3MjcsMjg5LjU0MTg3MTQyOTY0MDU0LDYzLjA3MzcwMTAzMTQyNzA1LDI3OC4yOTEyMDY5ODE3MjI0LDExMS42NDQ3NDc1OTAyNjMwMiw0Ny42MzU5NDA3MjA5MzE1Myw3MS4yNTIxMTMzNzY0Mjk2MywxNjI4OC4xMDM2NjQyNjU1OAorNCxGcmkgMjggSmFuIDExLDE3NC4zNTYzMzM2NzY2MjIwNiwyNjcuMTU2MjUxMTUzNTE5NjMsNDM4LjY5MjY0NjEzNDUwNjYsNTQ3LjU3OTM3MTM3ODY4MDgsMTgwLjIyNzQ4OTU2NDY5ODg2LDgzLjUyNjg3NzQ5NjIzNTE5LDE0Ny45Mjk4ODY1ODc5OTc2LDMzMC42NDU2NjkyOTEzMzg2LDI3NS44Mjg4NzE0OTkxNzYzLDM2NS4zNjUyMjgyODU4ODkxLDE4My41ODY0NDk4MDgzNDk3MywyMTQuNzE4ODc4ODMzOTA1NiwzNzUuNjYwMzc0MTM1MTMyOCw5Ni43OTQ5MTMwNDEwMDk4MiwyMzcuOTc0OTA2MzYyMDg0MjUsMTExLjEzOTk1MzAyNTAyNjMyLDI4OS4zNjEyNDk2MDc3NTQyNSwyMjYuNjMzODk4ODgxMDQwODQsMjM0Ljk5ODA5NTYxOTkyNTgzLDE5MC42Mzc3NDM0ODk5MzA3OCwxMzYuMjk4OTM4NTc2NjQ4NjgsNDYuOTcxMzE3NDUyNjAwODgsMTM1LjgyODU2Njk4NjE1MDc1LDE1MS40MTc2NDQxMTAyNzU3LDExMy40Njk0OTUwMzY5NTIyOCw1NS40NTE5Nzc0MDExMjk5NDUsNDUwLjI5MjY1Mzk0MDQyOTMsMTM5Mi4wODYzODk4NzE1MzIyLDM2NS4yMDI2NjM0NzM0MDE1LDEwMDkuNzQyNDIyOTAzNTk2Myw0MjcuNDg0MDc3NDk1MDgxNSwxODkuNzg2MzA2NDk5MDYzOTMsNTcuNDgwODA5Njg4OTc0ODEsNjQxLjY0OTQ1ODUwNDAxMjIsMTkyMy44Mzc2MTkzMzQzMDgsMTUwNy4zMzkyNzU2NTE4NjIyLDI2Mi41ODcyNDY4NzYzNDY0LDc2LjExODA5MjgyMTUwNjM0LDE3OS41MDUzNzI5NDU2Mzg0LDU4LjA3MDY2MjI1MjU2NTM1NiwyMjQuMzM0MTkxMDU4MjE4MDcsMTI2OS42NzY2OTgwOTA0MDM4LDIwMy4xOTgwNjQwMzU3NDA4OCw1MjIuOTQ5NDg2MzAxMzY5OSwyNjEuNjQ1NjY1MzIyNTgwNjcsMzQyLjE0Njk0MzQxNTYwMDEsMTYzLjMxOTI0NTk5MTgxNTkzLDE5OS4yMDE1ODM5NjIzODA4OCwzNjMuMTU5NjU0MjMzNzI2NTQsMjcwLjA3NTQ1NzM1ODQ0OTYsMjEzLjA1MTIwMTI3NTI4NzUzLDMwMy41NjA5NTg0NDg5Nyw0NTMuMzUzMzcyNjc2NjMxMiwzOTIuODUzNzQxNDk2NTk4NiwzMjMuNzQ2NjUyMzE2NDcxODUsNzg3LjAxOTMzOTkyODY0MDksMjU2LjM4MTAyOTA2MjE4ODUsMjcwLjUxOTAxMDI1OTUwNTE0LDExMi4xMTAyNjE1MDM3MTQzOCwzMjIuNzMwODQzNDg1Nzg2NiwxNTMuNTg1MTY3MzA0MzgzNTYsMjM1LjA5MTA2NzI1Mzg0NjU3LDEyOC42NzA1MzM0NzkwNzMzOCwyNTEuODM0Mjc2MDU5NjQ4OSw0MTYuOTcxNDg1NDExMTQwNiwyMTIuMDkzMjkwODQ3OTM3NywxMzMuNzI2MzY0ODU3MTQ3MjcsMjg5LjU0MTg3MTQyOTY0MDU0LDYzLjA3MzcwMTAzMTQyNzA1LDI3OC4yOTEyMDY5ODE3MjI0LDExMS42NDQ3NDc1OTAyNjMwMiw0Ny42MzU5NDA3MjA5MzE1Myw3MS4yNTIxMTMzNzY0Mjk2MywxNjI4OC4xMDM2NjQyNjU1OAorNSxTYXQgMjkgSmFuIDExLDE3NC4zNTYzMzM2NzY2MjIwNiwyNjcuMTU2MjUxMTUzNTE5NjMsNDM4LjY5MjY0NjEzNDUwNjYsNTQ3LjU3OTM3MTM3ODY4MDgsMTgwLjIyNzQ4OTU2NDY5ODg2LDgzLjUyNjg3NzQ5NjIzNTE5LDE0Ny45Mjk4ODY1ODc5OTc2LDMzMC42NDU2NjkyOTEzMzg2LDI3NS44Mjg4NzE0OTkxNzYzLDM2NS4zNjUyMjgyODU4ODkxLDE4My41ODY0NDk4MDgzNDk3MywyMTQuNzE4ODc4ODMzOTA1NiwzNzUuNjYwMzc0MTM1MTMyOCw5Ni43OTQ5MTMwNDEwMDk4MiwyMzcuOTc0OTA2MzYyMDg0MjUsMTExLjEzOTk1MzAyNTAyNjMyLDI4OS4zNjEyNDk2MDc3NTQyNSwyMjYuNjMzODk4ODgxMDQwODQsMjM0Ljk5ODA5NTYxOTkyNTgzLDE5MC42Mzc3NDM0ODk5MzA3OCwxMzYuMjk4OTM4NTc2NjQ4NjgsNDYuOTcxMzE3NDUyNjAwODgsMTM1LjgyODU2Njk4NjE1MDc1LDE1MS40MTc2NDQxMTAyNzU3LDExMy40Njk0OTUwMzY5NTIyOCw1NS40NTE5Nzc0MDExMjk5NDUsNDUwLjI5MjY1Mzk0MDQyOTMsMTM5Mi4wODYzODk4NzE1MzIyLDM2NS4yMDI2NjM0NzM0MDE1LDEwMDkuNzQyNDIyOTAzNTk2Myw0MjcuNDg0MDc3NDk1MDgxNSwxODkuNzg2MzA2NDk5MDYzOTMsNTcuNDgwODA5Njg4OTc0ODEsNjQxLjY0OTQ1ODUwNDAxMjIsMTkyMy44Mzc2MTkzMzQzMDgsMTUwNy4zMzkyNzU2NTE4NjIyLDI2Mi41ODcyNDY4NzYzNDY0LDc2LjExODA5MjgyMTUwNjM0LDE3OS41MDUzNzI5NDU2Mzg0LDU4LjA3MDY2MjI1MjU2NTM1NiwyMjQuMzM0MTkxMDU4MjE4MDcsMTI2OS42NzY2OTgwOTA0MDM4LDIwMy4xOTgwNjQwMzU3NDA4OCw1MjIuOTQ5NDg2MzAxMzY5OSwyNjEuNjQ1NjY1MzIyNTgwNjcsMzQyLjE0Njk0MzQxNTYwMDEsMTYzLjMxOTI0NTk5MTgxNTkzLDE5OS4yMDE1ODM5NjIzODA4OCwzNjMuMTU5NjU0MjMzNzI2NTQsMjcwLjA3NTQ1NzM1ODQ0OTYsMjEzLjA1MTIwMTI3NTI4NzUzLDMwMy41NjA5NTg0NDg5Nyw0NTMuMzUzMzcyNjc2NjMxMiwzOTIuODUzNzQxNDk2NTk4NiwzMjMuNzQ2NjUyMzE2NDcxODUsNzg3LjAxOTMzOTkyODY0MDksMjU2LjM4MTAyOTA2MjE4ODUsMjcwLjUxOTAxMDI1OTUwNTE0LDExMi4xMTAyNjE1MDM3MTQzOCwzMjIuNzMwODQzNDg1Nzg2NiwxNTMuNTg1MTY3MzA0MzgzNTYsMjM1LjA5MTA2NzI1Mzg0NjU3LDEyOC42NzA1MzM0NzkwNzMzOCwyNTEuODM0Mjc2MDU5NjQ4OSw0MTYuOTcxNDg1NDExMTQwNiwyMTIuMDkzMjkwODQ3OTM3NywxMzMuNzI2MzY0ODU3MTQ3MjcsMjg5LjU0MTg3MTQyOTY0MDU0LDYzLjA3MzcwMTAzMTQyNzA1LDI3OC4yOTEyMDY5ODE3MjI0LDExMS42NDQ3NDc1OTAyNjMwMiw0Ny42MzU5NDA3MjA5MzE1Myw3MS4yNTIxMTMzNzY0Mjk2MywxNjI4OC4xMDM2NjQyNjU1OAorNixTdW4gMzAgSmFuIDExLDE3NC4zNTYzMzM2NzY2MjIwNiwyNjcuMTU2MjUxMTUzNTE5NjMsNDM4LjY5MjY0NjEzNDUwNjYsNTQ3LjU3OTM3MTM3ODY4MDgsMTgwLjIyNzQ4OTU2NDY5ODg2LDgzLjUyNjg3NzQ5NjIzNTE5LDE0Ny45Mjk4ODY1ODc5OTc2LDMzMC42NDU2NjkyOTEzMzg2LDI3NS44Mjg4NzE0OTkxNzYzLDM2NS4zNjUyMjgyODU4ODkxLDE4My41ODY0NDk4MDgzNDk3MywyMTQuNzE4ODc4ODMzOTA1NiwzNzUuNjYwMzc0MTM1MTMyOCw5Ni43OTQ5MTMwNDEwMDk4MiwyMzcuOTc0OTA2MzYyMDg0MjUsMTExLjEzOTk1MzAyNTAyNjMyLDI4OS4zNjEyNDk2MDc3NTQyNSwyMjYuNjMzODk4ODgxMDQwODQsMjM0Ljk5ODA5NTYxOTkyNTgzLDE5MC42Mzc3NDM0ODk5MzA3OCwxMzYuMjk4OTM4NTc2NjQ4NjgsNDYuOTcxMzE3NDUyNjAwODgsMTM1LjgyODU2Njk4NjE1MDc1LDE1MS40MTc2NDQxMTAyNzU3LDExMy40Njk0OTUwMzY5NTIyOCw1NS40NTE5Nzc0MDExMjk5NDUsNDUwLjI5MjY1Mzk0MDQyOTMsMTM5Mi4wODYzODk4NzE1MzIyLDM2NS4yMDI2NjM0NzM0MDE1LDEwMDkuNzQyNDIyOTAzNTk2Myw0MjcuNDg0MDc3NDk1MDgxNSwxODkuNzg2MzA2NDk5MDYzOTMsNTcuNDgwODA5Njg4OTc0ODEsNjQxLjY0OTQ1ODUwNDAxMjIsMTkyMy44Mzc2MTkzMzQzMDgsMTUwNy4zMzkyNzU2NTE4NjIyLDI2Mi41ODcyNDY4NzYzNDY0LDc2LjExODA5MjgyMTUwNjM0LDE3OS41MDUzNzI5NDU2Mzg0LDU4LjA3MDY2MjI1MjU2NTM1NiwyMjQuMzM0MTkxMDU4MjE4MDcsMTI2OS42NzY2OTgwOTA0MDM4LDIwMy4xOTgwNjQwMzU3NDA4OCw1MjIuOTQ5NDg2MzAxMzY5OSwyNjEuNjQ1NjY1MzIyNTgwNjcsMzQyLjE0Njk0MzQxNTYwMDEsMTYzLjMxOTI0NTk5MTgxNTkzLDE5OS4yMDE1ODM5NjIzODA4OCwzNjMuMTU5NjU0MjMzNzI2NTQsMjcwLjA3NTQ1NzM1ODQ0OTYsMjEzLjA1MTIwMTI3NTI4NzUzLDMwMy41NjA5NTg0NDg5Nyw0NTMuMzUzMzcyNjc2NjMxMiwzOTIuODUzNzQxNDk2NTk4NiwzMjMuNzQ2NjUyMzE2NDcxODUsNzg3LjAxOTMzOTkyODY0MDksMjU2LjM4MTAyOTA2MjE4ODUsMjcwLjUxOTAxMDI1OTUwNTE0LDExMi4xMTAyNjE1MDM3MTQzOCwzMjIuNzMwODQzNDg1Nzg2NiwxNTMuNTg1MTY3MzA0MzgzNTYsMjM1LjA5MTA2NzI1Mzg0NjU3LDEyOC42NzA1MzM0NzkwNzMzOCwyNTEuODM0Mjc2MDU5NjQ4OSw0MTYuOTcxNDg1NDExMTQwNiwyMTIuMDkzMjkwODQ3OTM3NywxMzMuNzI2MzY0ODU3MTQ3MjcsMjg5LjU0MTg3MTQyOTY0MDU0LDYzLjA3MzcwMTAzMTQyNzA1LDI3OC4yOTEyMDY5ODE3MjI0LDExMS42NDQ3NDc1OTAyNjMwMiw0Ny42MzU5NDA3MjA5MzE1Myw3MS4yNTIxMTMzNzY0Mjk2MywxNjI4OC4xMDM2NjQyNjU1OAorNyxNb24gMzEgSmFuIDExLDE3NC4zNTYzMzM2NzY2MjIwNiwyNjcuMTU2MjUxMTUzNTE5NjMsNDM4LjY5MjY0NjEzNDUwNjYsNTQ3LjU3OTM3MTM3ODY4MDgsMTgwLjIyNzQ4OTU2NDY5ODg2LDgzLjUyNjg3NzQ5NjIzNTE5LDE0Ny45Mjk4ODY1ODc5OTc2LDMzMC42NDU2NjkyOTEzMzg2LDI3NS44Mjg4NzE0OTkxNzYzLDM2NS4zNjUyMjgyODU4ODkxLDE4My41ODY0NDk4MDgzNDk3MywyMTQuNzE4ODc4ODMzOTA1NiwzNzUuNjYwMzc0MTM1MTMyOCw5Ni43OTQ5MTMwNDEwMDk4MiwyMzcuOTc0OTA2MzYyMDg0MjUsMTExLjEzOTk1MzAyNTAyNjMyLDI4OS4zNjEyNDk2MDc3NTQyNSwyMjYuNjMzODk4ODgxMDQwODQsMjM0Ljk5ODA5NTYxOTkyNTgzLDE5MC42Mzc3NDM0ODk5MzA3OCwxMzYuMjk4OTM4NTc2NjQ4NjgsNDYuOTcxMzE3NDUyNjAwODgsMTM1LjgyODU2Njk4NjE1MDc1LDE1MS40MTc2NDQxMTAyNzU3LDExMy40Njk0OTUwMzY5NTIyOCw1NS40NTE5Nzc0MDExMjk5NDUsNDUwLjI5MjY1Mzk0MDQyOTMsMTM5Mi4wODYzODk4NzE1MzIyLDM2NS4yMDI2NjM0NzM0MDE1LDEwMDkuNzQyNDIyOTAzNTk2Myw0MjcuNDg0MDc3NDk1MDgxNSwxODkuNzg2MzA2NDk5MDYzOTMsNTcuNDgwODA5Njg4OTc0ODEsNjQxLjY0OTQ1ODUwNDAxMjIsMTkyMy44Mzc2MTkzMzQzMDgsMTUwNy4zMzkyNzU2NTE4NjIyLDI2Mi41ODcyNDY4NzYzNDY0LDc2LjExODA5MjgyMTUwNjM0LDE3OS41MDUzNzI5NDU2Mzg0LDU4LjA3MDY2MjI1MjU2NTM1NiwyMjQuMzM0MTkxMDU4MjE4MDcsMTI2OS42NzY2OTgwOTA0MDM4LDIwMy4xOTgwNjQwMzU3NDA4OCw1MjIuOTQ5NDg2MzAxMzY5OSwyNjEuNjQ1NjY1MzIyNTgwNjcsMzQyLjE0Njk0MzQxNTYwMDEsMTYzLjMxOTI0NTk5MTgxNTkzLDE5OS4yMDE1ODM5NjIzODA4OCwzNjMuMTU5NjU0MjMzNzI2NTQsMjcwLjA3NTQ1NzM1ODQ0OTYsMjEzLjA1MTIwMTI3NTI4NzUzLDMwMy41NjA5NTg0NDg5Nyw0NTMuMzUzMzcyNjc2NjMxMiwzOTIuODUzNzQxNDk2NTk4NiwzMjMuNzQ2NjUyMzE2NDcxODUsNzg3LjAxOTMzOTkyODY0MDksMjU2LjM4MTAyOTA2MjE4ODUsMjcwLjUxOTAxMDI1OTUwNTE0LDExMi4xMTAyNjE1MDM3MTQzOCwzMjIuNzMwODQzNDg1Nzg2NiwxNTMuNTg1MTY3MzA0MzgzNTYsMjM1LjA5MTA2NzI1Mzg0NjU3LDEyOC42NzA1MzM0NzkwNzMzOCwyNTEuODM0Mjc2MDU5NjQ4OSw0MTYuOTcxNDg1NDExMTQwNiwyMTIuMDkzMjkwODQ3OTM3NywxMzMuNzI2MzY0ODU3MTQ3MjcsMjg5LjU0MTg3MTQyOTY0MDU0LDYzLjA3MzcwMTAzMTQyNzA1LDI3OC4yOTEyMDY5ODE3MjI0LDExMS42NDQ3NDc1OTAyNjMwMiw0Ny42MzU5NDA3MjA5MzE1Myw3MS4yNTIxMTMzNzY0Mjk2MywxNjI4OC4xMDM2NjQyNjU1OAorOCxUdWUgMSBGZWIgMTEsMTc0LjM1NjMzMzY3NjYyMjA2LDI2Ny4xNTYyNTExNTM1MTk2Myw0MzguNjkyNjQ2MTM0NTA2Niw1NDcuNTc5MzcxMzc4NjgwOCwxODAuMjI3NDg5NTY0Njk4ODYsODMuNTI2ODc3NDk2MjM1MTksMTQ3LjkyOTg4NjU4Nzk5NzYsMzMwLjY0NTY2OTI5MTMzODYsMjc1LjgyODg3MTQ5OTE3NjMsMzY1LjM2NTIyODI4NTg4OTEsMTgzLjU4NjQ0OTgwODM0OTczLDIxNC43MTg4Nzg4MzM5MDU2LDM3NS42NjAzNzQxMzUxMzI4LDk2Ljc5NDkxMzA0MTAwOTgyLDIzNy45NzQ5MDYzNjIwODQyNSwxMTEuMTM5OTUzMDI1MDI2MzIsMjg5LjM2MTI0OTYwNzc1NDI1LDIyNi42MzM4OTg4ODEwNDA4NCwyMzQuOTk4MDk1NjE5OTI1ODMsMTkwLjYzNzc0MzQ4OTkzMDc4LDEzNi4yOTg5Mzg1NzY2NDg2OCw0Ni45NzEzMTc0NTI2MDA4OCwxMzUuODI4NTY2OTg2MTUwNzUsMTUxLjQxNzY0NDExMDI3NTcsMTEzLjQ2OTQ5NTAzNjk1MjI4LDU1LjQ1MTk3NzQwMTEyOTk0NSw0NTAuMjkyNjUzOTQwNDI5MywxMzkyLjA4NjM4OTg3MTUzMjIsMzY1LjIwMjY2MzQ3MzQwMTUsMTAwOS43NDI0MjI5MDM1OTYzLDQyNy40ODQwNzc0OTUwODE1LDE4OS43ODYzMDY0OTkwNjM5Myw1Ny40ODA4MDk2ODg5NzQ4MSw2NDEuNjQ5NDU4NTA0MDEyMiwxOTIzLjgzNzYxOTMzNDMwOCwxNTA3LjMzOTI3NTY1MTg2MjIsMjYyLjU4NzI0Njg3NjM0NjQsNzYuMTE4MDkyODIxNTA2MzQsMTc5LjUwNTM3Mjk0NTYzODQsNTguMDcwNjYyMjUyNTY1MzU2LDIyNC4zMzQxOTEwNTgyMTgwNywxMjY5LjY3NjY5ODA5MDQwMzgsMjAzLjE5ODA2NDAzNTc0MDg4LDUyMi45NDk0ODYzMDEzNjk5LDI2MS42NDU2NjUzMjI1ODA2NywzNDIuMTQ2OTQzNDE1NjAwMSwxNjMuMzE5MjQ1OTkxODE1OTMsMTk5LjIwMTU4Mzk2MjM4MDg4LDM2My4xNTk2NTQyMzM3MjY1NCwyNzAuMDc1NDU3MzU4NDQ5NiwyMTMuMDUxMjAxMjc1Mjg3NTMsMzAzLjU2MDk1ODQ0ODk3LDQ1My4zNTMzNzI2NzY2MzEyLDM5Mi44NTM3NDE0OTY1OTg2LDMyMy43NDY2NTIzMTY0NzE4NSw3ODcuMDE5MzM5OTI4NjQwOSwyNTYuMzgxMDI5MDYyMTg4NSwyNzAuNTE5MDEwMjU5NTA1MTQsMTEyLjExMDI2MTUwMzcxNDM4LDMyMi43MzA4NDM0ODU3ODY2LDE1My41ODUxNjczMDQzODM1NiwyMzUuMDkxMDY3MjUzODQ2NTcsMTI4LjY3MDUzMzQ3OTA3MzM4LDI1MS44MzQyNzYwNTk2NDg5LDQxNi45NzE0ODU0MTExNDA2LDIxMi4wOTMyOTA4NDc5Mzc3LDEzMy43MjYzNjQ4NTcxNDcyNywyODkuNTQxODcxNDI5NjQwNTQsNjMuMDczNzAxMDMxNDI3MDUsMjc4LjI5MTIwNjk4MTcyMjQsMTExLjY0NDc0NzU5MDI2MzAyLDQ3LjYzNTk0MDcyMDkzMTUzLDcxLjI1MjExMzM3NjQyOTYzLDE2Mjg4LjEwMzY2NDI2NTU4Cis5LFdlZCAyIEZlYiAxMSwxNzQuMzU2MzMzNjc2NjIyMDYsMjY3LjE1NjI1MTE1MzUxOTYzLDQzOC42OTI2NDYxMzQ1MDY2LDU0Ny41NzkzNzEzNzg2ODA4LDE4MC4yMjc0ODk1NjQ2OTg4Niw4My41MjY4Nzc0OTYyMzUxOSwxNDcuOTI5ODg2NTg3OTk3NiwzMzAuNjQ1NjY5MjkxMzM4NiwyNzUuODI4ODcxNDk5MTc2MywzNjUuMzY1MjI4Mjg1ODg5MSwxODMuNTg2NDQ5ODA4MzQ5NzMsMjE0LjcxODg3ODgzMzkwNTYsMzc1LjY2MDM3NDEzNTEzMjgsOTYuNzk0OTEzMDQxMDA5ODIsMjM3Ljk3NDkwNjM2MjA4NDI1LDExMS4xMzk5NTMwMjUwMjYzMiwyODkuMzYxMjQ5NjA3NzU0MjUsMjI2LjYzMzg5ODg4MTA0MDg0LDIzNC45OTgwOTU2MTk5MjU4MywxOTAuNjM3NzQzNDg5OTMwNzgsMTM2LjI5ODkzODU3NjY0ODY4LDQ2Ljk3MTMxNzQ1MjYwMDg4LDEzNS44Mjg1NjY5ODYxNTA3NSwxNTEuNDE3NjQ0MTEwMjc1NywxMTMuNDY5NDk1MDM2OTUyMjgsNTUuNDUxOTc3NDAxMTI5OTQ1LDQ1MC4yOTI2NTM5NDA0MjkzLDEzOTIuMDg2Mzg5ODcxNTMyMiwzNjUuMjAyNjYzNDczNDAxNSwxMDA5Ljc0MjQyMjkwMzU5NjMsNDI3LjQ4NDA3NzQ5NTA4MTUsMTg5Ljc4NjMwNjQ5OTA2MzkzLDU3LjQ4MDgwOTY4ODk3NDgxLDY0MS42NDk0NTg1MDQwMTIyLDE5MjMuODM3NjE5MzM0MzA4LDE1MDcuMzM5Mjc1NjUxODYyMiwyNjIuNTg3MjQ2ODc2MzQ2NCw3Ni4xMTgwOTI4MjE1MDYzNCwxNzkuNTA1MzcyOTQ1NjM4NCw1OC4wNzA2NjIyNTI1NjUzNTYsMjI0LjMzNDE5MTA1ODIxODA3LDEyNjkuNjc2Njk4MDkwNDAzOCwyMDMuMTk4MDY0MDM1NzQwODgsNTIyLjk0OTQ4NjMwMTM2OTksMjYxLjY0NTY2NTMyMjU4MDY3LDM0Mi4xNDY5NDM0MTU2MDAxLDE2My4zMTkyNDU5OTE4MTU5MywxOTkuMjAxNTgzOTYyMzgwODgsMzYzLjE1OTY1NDIzMzcyNjU0LDI3MC4wNzU0NTczNTg0NDk2LDIxMy4wNTEyMDEyNzUyODc1MywzMDMuNTYwOTU4NDQ4OTcsNDUzLjM1MzM3MjY3NjYzMTIsMzkyLjg1Mzc0MTQ5NjU5ODYsMzIzLjc0NjY1MjMxNjQ3MTg1LDc4Ny4wMTkzMzk5Mjg2NDA5LDI1Ni4zODEwMjkwNjIxODg1LDI3MC41MTkwMTAyNTk1MDUxNCwxMTIuMTEwMjYxNTAzNzE0MzgsMzIyLjczMDg0MzQ4NTc4NjYsMTUzLjU4NTE2NzMwNDM4MzU2LDIzNS4wOTEwNjcyNTM4NDY1NywxMjguNjcwNTMzNDc5MDczMzgsMjUxLjgzNDI3NjA1OTY0ODksNDE2Ljk3MTQ4NTQxMTE0MDYsMjEyLjA5MzI5MDg0NzkzNzcsMTMzLjcyNjM2NDg1NzE0NzI3LDI4OS41NDE4NzE0Mjk2NDA1NCw2My4wNzM3MDEwMzE0MjcwNSwyNzguMjkxMjA2OTgxNzIyNCwxMTEuNjQ0NzQ3NTkwMjYzMDIsNDcuNjM1OTQwNzIwOTMxNTMsNzEuMjUyMTEzMzc2NDI5NjMsMTYyODguMTAzNjY0MjY1NTgKKzEwLFRodSAzIEZlYiAxMSwxNzQuMzU2MzMzNjc2NjIyMDYsMjY3LjE1NjI1MTE1MzUxOTYzLDQzOC42OTI2NDYxMzQ1MDY2LDU0Ny41NzkzNzEzNzg2ODA4LDE4MC4yMjc0ODk1NjQ2OTg4Niw4My41MjY4Nzc0OTYyMzUxOSwxNDcuOTI5ODg2NTg3OTk3NiwzMzAuNjQ1NjY5MjkxMzM4NiwyNzUuODI4ODcxNDk5MTc2MywzNjUuMzY1MjI4Mjg1ODg5MSwxODMuNTg2NDQ5ODA4MzQ5NzMsMjE0LjcxODg3ODgzMzkwNTYsMzc1LjY2MDM3NDEzNTEzMjgsOTYuNzk0OTEzMDQxMDA5ODIsMjM3Ljk3NDkwNjM2MjA4NDI1LDExMS4xMzk5NTMwMjUwMjYzMiwyODkuMzYxMjQ5NjA3NzU0MjUsMjI2LjYzMzg5ODg4MTA0MDg0LDIzNC45OTgwOTU2MTk5MjU4MywxOTAuNjM3NzQzNDg5OTMwNzgsMTM2LjI5ODkzODU3NjY0ODY4LDQ2Ljk3MTMxNzQ1MjYwMDg4LDEzNS44Mjg1NjY5ODYxNTA3NSwxNTEuNDE3NjQ0MTEwMjc1NywxMTMuNDY5NDk1MDM2OTUyMjgsNTUuNDUxOTc3NDAxMTI5OTQ1LDQ1MC4yOTI2NTM5NDA0MjkzLDEzOTIuMDg2Mzg5ODcxNTMyMiwzNjUuMjAyNjYzNDczNDAxNSwxMDA5Ljc0MjQyMjkwMzU5NjMsNDI3LjQ4NDA3NzQ5NTA4MTUsMTg5Ljc4NjMwNjQ5OTA2MzkzLDU3LjQ4MDgwOTY4ODk3NDgxLDY0MS42NDk0NTg1MDQwMTIyLDE5MjMuODM3NjE5MzM0MzA4LDE1MDcuMzM5Mjc1NjUxODYyMiwyNjIuNTg3MjQ2ODc2MzQ2NCw3Ni4xMTgwOTI4MjE1MDYzNCwxNzkuNTA1MzcyOTQ1NjM4NCw1OC4wNzA2NjIyNTI1NjUzNTYsMjI0LjMzNDE5MTA1ODIxODA3LDEyNjkuNjc2Njk4MDkwNDAzOCwyMDMuMTk4MDY0MDM1NzQwODgsNTIyLjk0OTQ4NjMwMTM2OTksMjYxLjY0NTY2NTMyMjU4MDY3LDM0Mi4xNDY5NDM0MTU2MDAxLDE2My4zMTkyNDU5OTE4MTU5MywxOTkuMjAxNTgzOTYyMzgwODgsMzYzLjE1OTY1NDIzMzcyNjU0LDI3MC4wNzU0NTczNTg0NDk2LDIxMy4wNTEyMDEyNzUyODc1MywzMDMuNTYwOTU4NDQ4OTcsNDUzLjM1MzM3MjY3NjYzMTIsMzkyLjg1Mzc0MTQ5NjU5ODYsMzIzLjc0NjY1MjMxNjQ3MTg1LDc4Ny4wMTkzMzk5Mjg2NDA5LDI1Ni4zODEwMjkwNjIxODg1LDI3MC41MTkwMTAyNTk1MDUxNCwxMTIuMTEwMjYxNTAzNzE0MzgsMzIyLjczMDg0MzQ4NTc4NjYsMTUzLjU4NTE2NzMwNDM4MzU2LDIzNS4wOTEwNjcyNTM4NDY1NywxMjguNjcwNTMzNDc5MDczMzgsMjUxLjgzNDI3NjA1OTY0ODksNDE2Ljk3MTQ4NTQxMTE0MDYsMjEyLjA5MzI5MDg0NzkzNzcsMTMzLjcyNjM2NDg1NzE0NzI3LDI4OS41NDE4NzE0Mjk2NDA1NCw2My4wNzM3MDEwMzE0MjcwNSwyNzguMjkxMjA2OTgxNzIyNCwxMTEuNjQ0NzQ3NTkwMjYzMDIsNDcuNjM1OTQwNzIwOTMxNTMsNzEuMjUyMTEzMzc2NDI5NjMsMTYyODguMTAzNjY0MjY1NTgKKzExLEZyaSA0IEZlYiAxMSwxNzQuMzU2MzMzNjc2NjIyMDYsMjY3LjE1NjI1MTE1MzUxOTYzLDQzOC42OTI2NDYxMzQ1MDY2LDU0Ny41NzkzNzEzNzg2ODA4LDE4MC4yMjc0ODk1NjQ2OTg4Niw4My41MjY4Nzc0OTYyMzUxOSwxNDcuOTI5ODg2NTg3OTk3NiwzMzAuNjQ1NjY5MjkxMzM4NiwyNzUuODI4ODcxNDk5MTc2MywzNjUuMzY1MjI4Mjg1ODg5MSwxODMuNTg2NDQ5ODA4MzQ5NzMsMjE0LjcxODg3ODgzMzkwNTYsMzc1LjY2MDM3NDEzNTEzMjgsOTYuNzk0OTEzMDQxMDA5ODIsMjM3Ljk3NDkwNjM2MjA4NDI1LDExMS4xMzk5NTMwMjUwMjYzMiwyODkuMzYxMjQ5NjA3NzU0MjUsMjI2LjYzMzg5ODg4MTA0MDg0LDIzNC45OTgwOTU2MTk5MjU4MywxOTAuNjM3NzQzNDg5OTMwNzgsMTM2LjI5ODkzODU3NjY0ODY4LDQ2Ljk3MTMxNzQ1MjYwMDg4LDEzNS44Mjg1NjY5ODYxNTA3NSwxNTEuNDE3NjQ0MTEwMjc1NywxMTMuNDY5NDk1MDM2OTUyMjgsNTUuNDUxOTc3NDAxMTI5OTQ1LDQ1MC4yOTI2NTM5NDA0MjkzLDEzOTIuMDg2Mzg5ODcxNTMyMiwzNjUuMjAyNjYzNDczNDAxNSwxMDA5Ljc0MjQyMjkwMzU5NjMsNDI3LjQ4NDA3NzQ5NTA4MTUsMTg5Ljc4NjMwNjQ5OTA2MzkzLDU3LjQ4MDgwOTY4ODk3NDgxLDY0MS42NDk0NTg1MDQwMTIyLDE5MjMuODM3NjE5MzM0MzA4LDE1MDcuMzM5Mjc1NjUxODYyMiwyNjIuNTg3MjQ2ODc2MzQ2NCw3Ni4xMTgwOTI4MjE1MDYzNCwxNzkuNTA1MzcyOTQ1NjM4NCw1OC4wNzA2NjIyNTI1NjUzNTYsMjI0LjMzNDE5MTA1ODIxODA3LDEyNjkuNjc2Njk4MDkwNDAzOCwyMDMuMTk4MDY0MDM1NzQwODgsNTIyLjk0OTQ4NjMwMTM2OTksMjYxLjY0NTY2NTMyMjU4MDY3LDM0Mi4xNDY5NDM0MTU2MDAxLDE2My4zMTkyNDU5OTE4MTU5MywxOTkuMjAxNTgzOTYyMzgwODgsMzYzLjE1OTY1NDIzMzcyNjU0LDI3MC4wNzU0NTczNTg0NDk2LDIxMy4wNTEyMDEyNzUyODc1MywzMDMuNTYwOTU4NDQ4OTcsNDUzLjM1MzM3MjY3NjYzMTIsMzkyLjg1Mzc0MTQ5NjU5ODYsMzIzLjc0NjY1MjMxNjQ3MTg1LDc4Ny4wMTkzMzk5Mjg2NDA5LDI1Ni4zODEwMjkwNjIxODg1LDI3MC41MTkwMTAyNTk1MDUxNCwxMTIuMTEwMjYxNTAzNzE0MzgsMzIyLjczMDg0MzQ4NTc4NjYsMTUzLjU4NTE2NzMwNDM4MzU2LDIzNS4wOTEwNjcyNTM4NDY1NywxMjguNjcwNTMzNDc5MDczMzgsMjUxLjgzNDI3NjA1OTY0ODksNDE2Ljk3MTQ4NTQxMTE0MDYsMjEyLjA5MzI5MDg0NzkzNzcsMTMzLjcyNjM2NDg1NzE0NzI3LDI4OS41NDE4NzE0Mjk2NDA1NCw2My4wNzM3MDEwMzE0MjcwNSwyNzguMjkxMjA2OTgxNzIyNCwxMTEuNjQ0NzQ3NTkwMjYzMDIsNDcuNjM1OTQwNzIwOTMxNTMsNzEuMjUyMTEzMzc2NDI5NjMsMTYyODguMTAzNjY0MjY1NTgKKzEyLFNhdCA1IEZlYiAxMSwxNzQuMzU2MzMzNjc2NjIyMDYsMjY3LjE1NjI1MTE1MzUxOTYzLDQzOC42OTI2NDYxMzQ1MDY2LDU0Ny41NzkzNzEzNzg2ODA4LDE4MC4yMjc0ODk1NjQ2OTg4Niw4My41MjY4Nzc0OTYyMzUxOSwxNDcuOTI5ODg2NTg3OTk3NiwzMzAuNjQ1NjY5MjkxMzM4NiwyNzUuODI4ODcxNDk5MTc2MywzNjUuMzY1MjI4Mjg1ODg5MSwxODMuNTg2NDQ5ODA4MzQ5NzMsMjE0LjcxODg3ODgzMzkwNTYsMzc1LjY2MDM3NDEzNTEzMjgsOTYuNzk0OTEzMDQxMDA5ODIsMjM3Ljk3NDkwNjM2MjA4NDI1LDExMS4xMzk5NTMwMjUwMjYzMiwyODkuMzYxMjQ5NjA3NzU0MjUsMjI2LjYzMzg5ODg4MTA0MDg0LDIzNC45OTgwOTU2MTk5MjU4MywxOTAuNjM3NzQzNDg5OTMwNzgsMTM2LjI5ODkzODU3NjY0ODY4LDQ2Ljk3MTMxNzQ1MjYwMDg4LDEzNS44Mjg1NjY5ODYxNTA3NSwxNTEuNDE3NjQ0MTEwMjc1NywxMTMuNDY5NDk1MDM2OTUyMjgsNTUuNDUxOTc3NDAxMTI5OTQ1LDQ1MC4yOTI2NTM5NDA0MjkzLDEzOTIuMDg2Mzg5ODcxNTMyMiwzNjUuMjAyNjYzNDczNDAxNSwxMDA5Ljc0MjQyMjkwMzU5NjMsNDI3LjQ4NDA3NzQ5NTA4MTUsMTg5Ljc4NjMwNjQ5OTA2MzkzLDU3LjQ4MDgwOTY4ODk3NDgxLDY0MS42NDk0NTg1MDQwMTIyLDE5MjMuODM3NjE5MzM0MzA4LDE1MDcuMzM5Mjc1NjUxODYyMiwyNjIuNTg3MjQ2ODc2MzQ2NCw3Ni4xMTgwOTI4MjE1MDYzNCwxNzkuNTA1MzcyOTQ1NjM4NCw1OC4wNzA2NjIyNTI1NjUzNTYsMjI0LjMzNDE5MTA1ODIxODA3LDEyNjkuNjc2Njk4MDkwNDAzOCwyMDMuMTk4MDY0MDM1NzQwODgsNTIyLjk0OTQ4NjMwMTM2OTksMjYxLjY0NTY2NTMyMjU4MDY3LDM0Mi4xNDY5NDM0MTU2MDAxLDE2My4zMTkyNDU5OTE4MTU5MywxOTkuMjAxNTgzOTYyMzgwODgsMzYzLjE1OTY1NDIzMzcyNjU0LDI3MC4wNzU0NTczNTg0NDk2LDIxMy4wNTEyMDEyNzUyODc1MywzMDMuNTYwOTU4NDQ4OTcsNDUzLjM1MzM3MjY3NjYzMTIsMzkyLjg1Mzc0MTQ5NjU5ODYsMzIzLjc0NjY1MjMxNjQ3MTg1LDc4Ny4wMTkzMzk5Mjg2NDA5LDI1Ni4zODEwMjkwNjIxODg1LDI3MC41MTkwMTAyNTk1MDUxNCwxMTIuMTEwMjYxNTAzNzE0MzgsMzIyLjczMDg0MzQ4NTc4NjYsMTUzLjU4NTE2NzMwNDM4MzU2LDIzNS4wOTEwNjcyNTM4NDY1NywxMjguNjcwNTMzNDc5MDczMzgsMjUxLjgzNDI3NjA1OTY0ODksNDE2Ljk3MTQ4NTQxMTE0MDYsMjEyLjA5MzI5MDg0NzkzNzcsMTMzLjcyNjM2NDg1NzE0NzI3LDI4OS41NDE4NzE0Mjk2NDA1NCw2My4wNzM3MDEwMzE0MjcwNSwyNzguMjkxMjA2OTgxNzIyNCwxMTEuNjQ0NzQ3NTkwMjYzMDIsNDcuNjM1OTQwNzIwOTMxNTMsNzEuMjUyMTEzMzc2NDI5NjMsMTYyODguMTAzNjY0MjY1NTgKKzEzLFN1biA2IEZlYiAxMSwxNzQuMzU2MzMzNjc2NjIyMDYsMjY3LjE1NjI1MTE1MzUxOTYzLDQzOC42OTI2NDYxMzQ1MDY2LDU0Ny41NzkzNzEzNzg2ODA4LDE4MC4yMjc0ODk1NjQ2OTg4Niw4My41MjY4Nzc0OTYyMzUxOSwxNDcuOTI5ODg2NTg3OTk3NiwzMzAuNjQ1NjY5MjkxMzM4NiwyNzUuODI4ODcxNDk5MTc2MywzNjUuMzY1MjI4Mjg1ODg5MSwxODMuNTg2NDQ5ODA4MzQ5NzMsMjE0LjcxODg3ODgzMzkwNTYsMzc1LjY2MDM3NDEzNTEzMjgsOTYuNzk0OTEzMDQxMDA5ODIsMjM3Ljk3NDkwNjM2MjA4NDI1LDExMS4xMzk5NTMwMjUwMjYzMiwyODkuMzYxMjQ5NjA3NzU0MjUsMjI2LjYzMzg5ODg4MTA0MDg0LDIzNC45OTgwOTU2MTk5MjU4MywxOTAuNjM3NzQzNDg5OTMwNzgsMTM2LjI5ODkzODU3NjY0ODY4LDQ2Ljk3MTMxNzQ1MjYwMDg4LDEzNS44Mjg1NjY5ODYxNTA3NSwxNTEuNDE3NjQ0MTEwMjc1NywxMTMuNDY5NDk1MDM2OTUyMjgsNTUuNDUxOTc3NDAxMTI5OTQ1LDQ1MC4yOTI2NTM5NDA0MjkzLDEzOTIuMDg2Mzg5ODcxNTMyMiwzNjUuMjAyNjYzNDczNDAxNSwxMDA5Ljc0MjQyMjkwMzU5NjMsNDI3LjQ4NDA3NzQ5NTA4MTUsMTg5Ljc4NjMwNjQ5OTA2MzkzLDU3LjQ4MDgwOTY4ODk3NDgxLDY0MS42NDk0NTg1MDQwMTIyLDE5MjMuODM3NjE5MzM0MzA4LDE1MDcuMzM5Mjc1NjUxODYyMiwyNjIuNTg3MjQ2ODc2MzQ2NCw3Ni4xMTgwOTI4MjE1MDYzNCwxNzkuNTA1MzcyOTQ1NjM4NCw1OC4wNzA2NjIyNTI1NjUzNTYsMjI0LjMzNDE5MTA1ODIxODA3LDEyNjkuNjc2Njk4MDkwNDAzOCwyMDMuMTk4MDY0MDM1NzQwODgsNTIyLjk0OTQ4NjMwMTM2OTksMjYxLjY0NTY2NTMyMjU4MDY3LDM0Mi4xNDY5NDM0MTU2MDAxLDE2My4zMTkyNDU5OTE4MTU5MywxOTkuMjAxNTgzOTYyMzgwODgsMzYzLjE1OTY1NDIzMzcyNjU0LDI3MC4wNzU0NTczNTg0NDk2LDIxMy4wNTEyMDEyNzUyODc1MywzMDMuNTYwOTU4NDQ4OTcsNDUzLjM1MzM3MjY3NjYzMTIsMzkyLjg1Mzc0MTQ5NjU5ODYsMzIzLjc0NjY1MjMxNjQ3MTg1LDc4Ny4wMTkzMzk5Mjg2NDA5LDI1Ni4zODEwMjkwNjIxODg1LDI3MC41MTkwMTAyNTk1MDUxNCwxMTIuMTEwMjYxNTAzNzE0MzgsMzIyLjczMDg0MzQ4NTc4NjYsMTUzLjU4NTE2NzMwNDM4MzU2LDIzNS4wOTEwNjcyNTM4NDY1NywxMjguNjcwNTMzNDc5MDczMzgsMjUxLjgzNDI3NjA1OTY0ODksNDE2Ljk3MTQ4NTQxMTE0MDYsMjEyLjA5MzI5MDg0NzkzNzcsMTMzLjcyNjM2NDg1NzE0NzI3LDI4OS41NDE4NzE0Mjk2NDA1NCw2My4wNzM3MDEwMzE0MjcwNSwyNzguMjkxMjA2OTgxNzIyNCwxMTEuNjQ0NzQ3NTkwMjYzMDIsNDcuNjM1OTQwNzIwOTMxNTMsNzEuMjUyMTEzMzc2NDI5NjMsMTYyODguMTAzNjY0MjY1NTgKKzE0LE1vbiA3IEZlYiAxMSwxNzQuMzU2MzMzNjc2NjIyMDYsMjY3LjE1NjI1MTE1MzUxOTYzLDQzOC42OTI2NDYxMzQ1MDY2LDU0Ny41NzkzNzEzNzg2ODA4LDE4MC4yMjc0ODk1NjQ2OTg4Niw4My41MjY4Nzc0OTYyMzUxOSwxNDcuOTI5ODg2NTg3OTk3NiwzMzAuNjQ1NjY5MjkxMzM4NiwyNzUuODI4ODcxNDk5MTc2MywzNjUuMzY1MjI4Mjg1ODg5MSwxODMuNTg2NDQ5ODA4MzQ5NzMsMjE0LjcxODg3ODgzMzkwNTYsMzc1LjY2MDM3NDEzNTEzMjgsOTYuNzk0OTEzMDQxMDA5ODIsMjM3Ljk3NDkwNjM2MjA4NDI1LDExMS4xMzk5NTMwMjUwMjYzMiwyODkuMzYxMjQ5NjA3NzU0MjUsMjI2LjYzMzg5ODg4MTA0MDg0LDIzNC45OTgwOTU2MTk5MjU4MywxOTAuNjM3NzQzNDg5OTMwNzgsMTM2LjI5ODkzODU3NjY0ODY4LDQ2Ljk3MTMxNzQ1MjYwMDg4LDEzNS44Mjg1NjY5ODYxNTA3NSwxNTEuNDE3NjQ0MTEwMjc1NywxMTMuNDY5NDk1MDM2OTUyMjgsNTUuNDUxOTc3NDAxMTI5OTQ1LDQ1MC4yOTI2NTM5NDA0MjkzLDEzOTIuMDg2Mzg5ODcxNTMyMiwzNjUuMjAyNjYzNDczNDAxNSwxMDA5Ljc0MjQyMjkwMzU5NjMsNDI3LjQ4NDA3NzQ5NTA4MTUsMTg5Ljc4NjMwNjQ5OTA2MzkzLDU3LjQ4MDgwOTY4ODk3NDgxLDY0MS42NDk0NTg1MDQwMTIyLDE5MjMuODM3NjE5MzM0MzA4LDE1MDcuMzM5Mjc1NjUxODYyMiwyNjIuNTg3MjQ2ODc2MzQ2NCw3Ni4xMTgwOTI4MjE1MDYzNCwxNzkuNTA1MzcyOTQ1NjM4NCw1OC4wNzA2NjIyNTI1NjUzNTYsMjI0LjMzNDE5MTA1ODIxODA3LDEyNjkuNjc2Njk4MDkwNDAzOCwyMDMuMTk4MDY0MDM1NzQwODgsNTIyLjk0OTQ4NjMwMTM2OTksMjYxLjY0NTY2NTMyMjU4MDY3LDM0Mi4xNDY5NDM0MTU2MDAxLDE2My4zMTkyNDU5OTE4MTU5MywxOTkuMjAxNTgzOTYyMzgwODgsMzYzLjE1OTY1NDIzMzcyNjU0LDI3MC4wNzU0NTczNTg0NDk2LDIxMy4wNTEyMDEyNzUyODc1MywzMDMuNTYwOTU4NDQ4OTcsNDUzLjM1MzM3MjY3NjYzMTIsMzkyLjg1Mzc0MTQ5NjU5ODYsMzIzLjc0NjY1MjMxNjQ3MTg1LDc4Ny4wMTkzMzk5Mjg2NDA5LDI1Ni4zODEwMjkwNjIxODg1LDI3MC41MTkwMTAyNTk1MDUxNCwxMTIuMTEwMjYxNTAzNzE0MzgsMzIyLjczMDg0MzQ4NTc4NjYsMTUzLjU4NTE2NzMwNDM4MzU2LDIzNS4wOTEwNjcyNTM4NDY1NywxMjguNjcwNTMzNDc5MDczMzgsMjUxLjgzNDI3NjA1OTY0ODksNDE2Ljk3MTQ4NTQxMTE0MDYsMjEyLjA5MzI5MDg0NzkzNzcsMTMzLjcyNjM2NDg1NzE0NzI3LDI4OS41NDE4NzE0Mjk2NDA1NCw2My4wNzM3MDEwMzE0MjcwNSwyNzguMjkxMjA2OTgxNzIyNCwxMTEuNjQ0NzQ3NTkwMjYzMDIsNDcuNjM1OTQwNzIwOTMxNTMsNzEuMjUyMTEzMzc2NDI5NjMsMTYyODguMTAzNjY0MjY1NTgKKzE1LFR1ZSA4IEZlYiAxMSwxNzQuMzU2MzMzNjc2NjIyMDYsMjY3LjE1NjI1MTE1MzUxOTYzLDQzOC42OTI2NDYxMzQ1MDY2LDU0Ny41NzkzNzEzNzg2ODA4LDE4MC4yMjc0ODk1NjQ2OTg4Niw4My41MjY4Nzc0OTYyMzUxOSwxNDcuOTI5ODg2NTg3OTk3NiwzMzAuNjQ1NjY5MjkxMzM4NiwyNzUuODI4ODcxNDk5MTc2MywzNjUuMzY1MjI4Mjg1ODg5MSwxODMuNTg2NDQ5ODA4MzQ5NzMsMjE0LjcxODg3ODgzMzkwNTYsMzc1LjY2MDM3NDEzNTEzMjgsOTYuNzk0OTEzMDQxMDA5ODIsMjM3Ljk3NDkwNjM2MjA4NDI1LDExMS4xMzk5NTMwMjUwMjYzMiwyODkuMzYxMjQ5NjA3NzU0MjUsMjI2LjYzMzg5ODg4MTA0MDg0LDIzNC45OTgwOTU2MTk5MjU4MywxOTAuNjM3NzQzNDg5OTMwNzgsMTM2LjI5ODkzODU3NjY0ODY4LDQ2Ljk3MTMxNzQ1MjYwMDg4LDEzNS44Mjg1NjY5ODYxNTA3NSwxNTEuNDE3NjQ0MTEwMjc1NywxMTMuNDY5NDk1MDM2OTUyMjgsNTUuNDUxOTc3NDAxMTI5OTQ1LDQ1MC4yOTI2NTM5NDA0MjkzLDEzOTIuMDg2Mzg5ODcxNTMyMiwzNjUuMjAyNjYzNDczNDAxNSwxMDA5Ljc0MjQyMjkwMzU5NjMsNDI3LjQ4NDA3NzQ5NTA4MTUsMTg5Ljc4NjMwNjQ5OTA2MzkzLDU3LjQ4MDgwOTY4ODk3NDgxLDY0MS42NDk0NTg1MDQwMTIyLDE5MjMuODM3NjE5MzM0MzA4LDE1MDcuMzM5Mjc1NjUxODYyMiwyNjIuNTg3MjQ2ODc2MzQ2NCw3Ni4xMTgwOTI4MjE1MDYzNCwxNzkuNTA1MzcyOTQ1NjM4NCw1OC4wNzA2NjIyNTI1NjUzNTYsMjI0LjMzNDE5MTA1ODIxODA3LDEyNjkuNjc2Njk4MDkwNDAzOCwyMDMuMTk4MDY0MDM1NzQwODgsNTIyLjk0OTQ4NjMwMTM2OTksMjYxLjY0NTY2NTMyMjU4MDY3LDM0Mi4xNDY5NDM0MTU2MDAxLDE2My4zMTkyNDU5OTE4MTU5MywxOTkuMjAxNTgzOTYyMzgwODgsMzYzLjE1OTY1NDIzMzcyNjU0LDI3MC4wNzU0NTczNTg0NDk2LDIxMy4wNTEyMDEyNzUyODc1MywzMDMuNTYwOTU4NDQ4OTcsNDUzLjM1MzM3MjY3NjYzMTIsMzkyLjg1Mzc0MTQ5NjU5ODYsMzIzLjc0NjY1MjMxNjQ3MTg1LDc4Ny4wMTkzMzk5Mjg2NDA5LDI1Ni4zODEwMjkwNjIxODg1LDI3MC41MTkwMTAyNTk1MDUxNCwxMTIuMTEwMjYxNTAzNzE0MzgsMzIyLjczMDg0MzQ4NTc4NjYsMTUzLjU4NTE2NzMwNDM4MzU2LDIzNS4wOTEwNjcyNTM4NDY1NywxMjguNjcwNTMzNDc5MDczMzgsMjUxLjgzNDI3NjA1OTY0ODksNDE2Ljk3MTQ4NTQxMTE0MDYsMjEyLjA5MzI5MDg0NzkzNzcsMTMzLjcyNjM2NDg1NzE0NzI3LDI4OS41NDE4NzE0Mjk2NDA1NCw2My4wNzM3MDEwMzE0MjcwNSwyNzguMjkxMjA2OTgxNzIyNCwxMTEuNjQ0NzQ3NTkwMjYzMDIsNDcuNjM1OTQwNzIwOTMxNTMsNzEuMjUyMTEzMzc2NDI5NjMsMTYyODguMTAzNjY0MjY1NTgKKzE2LFdlZCA5IEZlYiAxMSwxNzQuMzU2MzMzNjc2NjIyMDYsMjY3LjE1NjI1MTE1MzUxOTYzLDQzOC42OTI2NDYxMzQ1MDY2LDU0Ny41NzkzNzEzNzg2ODA4LDE4MC4yMjc0ODk1NjQ2OTg4Niw4My41MjY4Nzc0OTYyMzUxOSwxNDcuOTI5ODg2NTg3OTk3NiwzMzAuNjQ1NjY5MjkxMzM4NiwyNzUuODI4ODcxNDk5MTc2MywzNjUuMzY1MjI4Mjg1ODg5MSwxODMuNTg2NDQ5ODA4MzQ5NzMsMjE0LjcxODg3ODgzMzkwNTYsMzc1LjY2MDM3NDEzNTEzMjgsOTYuNzk0OTEzMDQxMDA5ODIsMjM3Ljk3NDkwNjM2MjA4NDI1LDExMS4xMzk5NTMwMjUwMjYzMiwyODkuMzYxMjQ5NjA3NzU0MjUsMjI2LjYzMzg5ODg4MTA0MDg0LDIzNC45OTgwOTU2MTk5MjU4MywxOTAuNjM3NzQzNDg5OTMwNzgsMTM2LjI5ODkzODU3NjY0ODY4LDQ2Ljk3MTMxNzQ1MjYwMDg4LDEzNS44Mjg1NjY5ODYxNTA3NSwxNTEuNDE3NjQ0MTEwMjc1NywxMTMuNDY5NDk1MDM2OTUyMjgsNTUuNDUxOTc3NDAxMTI5OTQ1LDQ1MC4yOTI2NTM5NDA0MjkzLDEzOTIuMDg2Mzg5ODcxNTMyMiwzNjUuMjAyNjYzNDczNDAxNSwxMDA5Ljc0MjQyMjkwMzU5NjMsNDI3LjQ4NDA3NzQ5NTA4MTUsMTg5Ljc4NjMwNjQ5OTA2MzkzLDU3LjQ4MDgwOTY4ODk3NDgxLDY0MS42NDk0NTg1MDQwMTIyLDE5MjMuODM3NjE5MzM0MzA4LDE1MDcuMzM5Mjc1NjUxODYyMiwyNjIuNTg3MjQ2ODc2MzQ2NCw3Ni4xMTgwOTI4MjE1MDYzNCwxNzkuNTA1MzcyOTQ1NjM4NCw1OC4wNzA2NjIyNTI1NjUzNTYsMjI0LjMzNDE5MTA1ODIxODA3LDEyNjkuNjc2Njk4MDkwNDAzOCwyMDMuMTk4MDY0MDM1NzQwODgsNTIyLjk0OTQ4NjMwMTM2OTksMjYxLjY0NTY2NTMyMjU4MDY3LDM0Mi4xNDY5NDM0MTU2MDAxLDE2My4zMTkyNDU5OTE4MTU5MywxOTkuMjAxNTgzOTYyMzgwODgsMzYzLjE1OTY1NDIzMzcyNjU0LDI3MC4wNzU0NTczNTg0NDk2LDIxMy4wNTEyMDEyNzUyODc1MywzMDMuNTYwOTU4NDQ4OTcsNDUzLjM1MzM3MjY3NjYzMTIsMzkyLjg1Mzc0MTQ5NjU5ODYsMzIzLjc0NjY1MjMxNjQ3MTg1LDc4Ny4wMTkzMzk5Mjg2NDA5LDI1Ni4zODEwMjkwNjIxODg1LDI3MC41MTkwMTAyNTk1MDUxNCwxMTIuMTEwMjYxNTAzNzE0MzgsMzIyLjczMDg0MzQ4NTc4NjYsMTUzLjU4NTE2NzMwNDM4MzU2LDIzNS4wOTEwNjcyNTM4NDY1NywxMjguNjcwNTMzNDc5MDczMzgsMjUxLjgzNDI3NjA1OTY0ODksNDE2Ljk3MTQ4NTQxMTE0MDYsMjEyLjA5MzI5MDg0NzkzNzcsMTMzLjcyNjM2NDg1NzE0NzI3LDI4OS41NDE4NzE0Mjk2NDA1NCw2My4wNzM3MDEwMzE0MjcwNSwyNzguMjkxMjA2OTgxNzIyNCwxMTEuNjQ0NzQ3NTkwMjYzMDIsNDcuNjM1OTQwNzIwOTMxNTMsNzEuMjUyMTEzMzc2NDI5NjMsMTYyODguMTAzNjY0MjY1NTgKKzE3LFRodSAxMCBGZWIgMTEsMTc0LjM1NjMzMzY3NjYyMjA2LDI2Ny4xNTYyNTExNTM1MTk2Myw0MzguNjkyNjQ2MTM0NTA2Niw1NDcuNTc5MzcxMzc4NjgwOCwxODAuMjI3NDg5NTY0Njk4ODYsODMuNTI2ODc3NDk2MjM1MTksMTQ3LjkyOTg4NjU4Nzk5NzYsMzMwLjY0NTY2OTI5MTMzODYsMjc1LjgyODg3MTQ5OTE3NjMsMzY1LjM2NTIyODI4NTg4OTEsMTgzLjU4NjQ0OTgwODM0OTczLDIxNC43MTg4Nzg4MzM5MDU2LDM3NS42NjAzNzQxMzUxMzI4LDk2Ljc5NDkxMzA0MTAwOTgyLDIzNy45NzQ5MDYzNjIwODQyNSwxMTEuMTM5OTUzMDI1MDI2MzIsMjg5LjM2MTI0OTYwNzc1NDI1LDIyNi42MzM4OTg4ODEwNDA4NCwyMzQuOTk4MDk1NjE5OTI1ODMsMTkwLjYzNzc0MzQ4OTkzMDc4LDEzNi4yOTg5Mzg1NzY2NDg2OCw0Ni45NzEzMTc0NTI2MDA4OCwxMzUuODI4NTY2OTg2MTUwNzUsMTUxLjQxNzY0NDExMDI3NTcsMTEzLjQ2OTQ5NTAzNjk1MjI4LDU1LjQ1MTk3NzQwMTEyOTk0NSw0NTAuMjkyNjUzOTQwNDI5MywxMzkyLjA4NjM4OTg3MTUzMjIsMzY1LjIwMjY2MzQ3MzQwMTUsMTAwOS43NDI0MjI5MDM1OTYzLDQyNy40ODQwNzc0OTUwODE1LDE4OS43ODYzMDY0OTkwNjM5Myw1Ny40ODA4MDk2ODg5NzQ4MSw2NDEuNjQ5NDU4NTA0MDEyMiwxOTIzLjgzNzYxOTMzNDMwOCwxNTA3LjMzOTI3NTY1MTg2MjIsMjYyLjU4NzI0Njg3NjM0NjQsNzYuMTE4MDkyODIxNTA2MzQsMTc5LjUwNTM3Mjk0NTYzODQsNTguMDcwNjYyMjUyNTY1MzU2LDIyNC4zMzQxOTEwNTgyMTgwNywxMjY5LjY3NjY5ODA5MDQwMzgsMjAzLjE5ODA2NDAzNTc0MDg4LDUyMi45NDk0ODYzMDEzNjk5LDI2MS42NDU2NjUzMjI1ODA2NywzNDIuMTQ2OTQzNDE1NjAwMSwxNjMuMzE5MjQ1OTkxODE1OTMsMTk5LjIwMTU4Mzk2MjM4MDg4LDM2My4xNTk2NTQyMzM3MjY1NCwyNzAuMDc1NDU3MzU4NDQ5NiwyMTMuMDUxMjAxMjc1Mjg3NTMsMzAzLjU2MDk1ODQ0ODk3LDQ1My4zNTMzNzI2NzY2MzEyLDM5Mi44NTM3NDE0OTY1OTg2LDMyMy43NDY2NTIzMTY0NzE4NSw3ODcuMDE5MzM5OTI4NjQwOSwyNTYuMzgxMDI5MDYyMTg4NSwyNzAuNTE5MDEwMjU5NTA1MTQsMTEyLjExMDI2MTUwMzcxNDM4LDMyMi43MzA4NDM0ODU3ODY2LDE1My41ODUxNjczMDQzODM1NiwyMzUuMDkxMDY3MjUzODQ2NTcsMTI4LjY3MDUzMzQ3OTA3MzM4LDI1MS44MzQyNzYwNTk2NDg5LDQxNi45NzE0ODU0MTExNDA2LDIxMi4wOTMyOTA4NDc5Mzc3LDEzMy43MjYzNjQ4NTcxNDcyNywyODkuNTQxODcxNDI5NjQwNTQsNjMuMDczNzAxMDMxNDI3MDUsMjc4LjI5MTIwNjk4MTcyMjQsMTExLjY0NDc0NzU5MDI2MzAyLDQ3LjYzNTk0MDcyMDkzMTUzLDcxLjI1MjExMzM3NjQyOTYzLDE2Mjg4LjEwMzY2NDI2NTU4CisxOCxGcmkgMTEgRmViIDExLDE3NC4zNTYzMzM2NzY2MjIwNiwyNjcuMTU2MjUxMTUzNTE5NjMsNDM4LjY5MjY0NjEzNDUwNjYsNTQ3LjU3OTM3MTM3ODY4MDgsMTgwLjIyNzQ4OTU2NDY5ODg2LDgzLjUyNjg3NzQ5NjIzNTE5LDE0Ny45Mjk4ODY1ODc5OTc2LDMzMC42NDU2NjkyOTEzMzg2LDI3NS44Mjg4NzE0OTkxNzYzLDM2NS4zNjUyMjgyODU4ODkxLDE4My41ODY0NDk4MDgzNDk3MywyMTQuNzE4ODc4ODMzOTA1NiwzNzUuNjYwMzc0MTM1MTMyOCw5Ni43OTQ5MTMwNDEwMDk4MiwyMzcuOTc0OTA2MzYyMDg0MjUsMTExLjEzOTk1MzAyNTAyNjMyLDI4OS4zNjEyNDk2MDc3NTQyNSwyMjYuNjMzODk4ODgxMDQwODQsMjM0Ljk5ODA5NTYxOTkyNTgzLDE5MC42Mzc3NDM0ODk5MzA3OCwxMzYuMjk4OTM4NTc2NjQ4NjgsNDYuOTcxMzE3NDUyNjAwODgsMTM1LjgyODU2Njk4NjE1MDc1LDE1MS40MTc2NDQxMTAyNzU3LDExMy40Njk0OTUwMzY5NTIyOCw1NS40NTE5Nzc0MDExMjk5NDUsNDUwLjI5MjY1Mzk0MDQyOTMsMTM5Mi4wODYzODk4NzE1MzIyLDM2NS4yMDI2NjM0NzM0MDE1LDEwMDkuNzQyNDIyOTAzNTk2Myw0MjcuNDg0MDc3NDk1MDgxNSwxODkuNzg2MzA2NDk5MDYzOTMsNTcuNDgwODA5Njg4OTc0ODEsNjQxLjY0OTQ1ODUwNDAxMjIsMTkyMy44Mzc2MTkzMzQzMDgsMTUwNy4zMzkyNzU2NTE4NjIyLDI2Mi41ODcyNDY4NzYzNDY0LDc2LjExODA5MjgyMTUwNjM0LDE3OS41MDUzNzI5NDU2Mzg0LDU4LjA3MDY2MjI1MjU2NTM1NiwyMjQuMzM0MTkxMDU4MjE4MDcsMTI2OS42NzY2OTgwOTA0MDM4LDIwMy4xOTgwNjQwMzU3NDA4OCw1MjIuOTQ5NDg2MzAxMzY5OSwyNjEuNjQ1NjY1MzIyNTgwNjcsMzQyLjE0Njk0MzQxNTYwMDEsMTYzLjMxOTI0NTk5MTgxNTkzLDE5OS4yMDE1ODM5NjIzODA4OCwzNjMuMTU5NjU0MjMzNzI2NTQsMjcwLjA3NTQ1NzM1ODQ0OTYsMjEzLjA1MTIwMTI3NTI4NzUzLDMwMy41NjA5NTg0NDg5Nyw0NTMuMzUzMzcyNjc2NjMxMiwzOTIuODUzNzQxNDk2NTk4NiwzMjMuNzQ2NjUyMzE2NDcxODUsNzg3LjAxOTMzOTkyODY0MDksMjU2LjM4MTAyOTA2MjE4ODUsMjcwLjUxOTAxMDI1OTUwNTE0LDExMi4xMTAyNjE1MDM3MTQzOCwzMjIuNzMwODQzNDg1Nzg2NiwxNTMuNTg1MTY3MzA0MzgzNTYsMjM1LjA5MTA2NzI1Mzg0NjU3LDEyOC42NzA1MzM0NzkwNzMzOCwyNTEuODM0Mjc2MDU5NjQ4OSw0MTYuOTcxNDg1NDExMTQwNiwyMTIuMDkzMjkwODQ3OTM3NywxMzMuNzI2MzY0ODU3MTQ3MjcsMjg5LjU0MTg3MTQyOTY0MDU0LDYzLjA3MzcwMTAzMTQyNzA1LDI3OC4yOTEyMDY5ODE3MjI0LDExMS42NDQ3NDc1OTAyNjMwMiw0Ny42MzU5NDA3MjA5MzE1Myw3MS4yNTIxMTMzNzY0Mjk2MywxNjI4OC4xMDM2NjQyNjU1OAorMTksU2F0IDEyIEZlYiAxMSwxNzQuMzU2MzMzNjc2NjIyMDYsMjY3LjE1NjI1MTE1MzUxOTYzLDQzOC42OTI2NDYxMzQ1MDY2LDU0Ny41NzkzNzEzNzg2ODA4LDE4MC4yMjc0ODk1NjQ2OTg4Niw4My41MjY4Nzc0OTYyMzUxOSwxNDcuOTI5ODg2NTg3OTk3NiwzMzAuNjQ1NjY5MjkxMzM4NiwyNzUuODI4ODcxNDk5MTc2MywzNjUuMzY1MjI4Mjg1ODg5MSwxODMuNTg2NDQ5ODA4MzQ5NzMsMjE0LjcxODg3ODgzMzkwNTYsMzc1LjY2MDM3NDEzNTEzMjgsOTYuNzk0OTEzMDQxMDA5ODIsMjM3Ljk3NDkwNjM2MjA4NDI1LDExMS4xMzk5NTMwMjUwMjYzMiwyODkuMzYxMjQ5NjA3NzU0MjUsMjI2LjYzMzg5ODg4MTA0MDg0LDIzNC45OTgwOTU2MTk5MjU4MywxOTAuNjM3NzQzNDg5OTMwNzgsMTM2LjI5ODkzODU3NjY0ODY4LDQ2Ljk3MTMxNzQ1MjYwMDg4LDEzNS44Mjg1NjY5ODYxNTA3NSwxNTEuNDE3NjQ0MTEwMjc1NywxMTMuNDY5NDk1MDM2OTUyMjgsNTUuNDUxOTc3NDAxMTI5OTQ1LDQ1MC4yOTI2NTM5NDA0MjkzLDEzOTIuMDg2Mzg5ODcxNTMyMiwzNjUuMjAyNjYzNDczNDAxNSwxMDA5Ljc0MjQyMjkwMzU5NjMsNDI3LjQ4NDA3NzQ5NTA4MTUsMTg5Ljc4NjMwNjQ5OTA2MzkzLDU3LjQ4MDgwOTY4ODk3NDgxLDY0MS42NDk0NTg1MDQwMTIyLDE5MjMuODM3NjE5MzM0MzA4LDE1MDcuMzM5Mjc1NjUxODYyMiwyNjIuNTg3MjQ2ODc2MzQ2NCw3Ni4xMTgwOTI4MjE1MDYzNCwxNzkuNTA1MzcyOTQ1NjM4NCw1OC4wNzA2NjIyNTI1NjUzNTYsMjI0LjMzNDE5MTA1ODIxODA3LDEyNjkuNjc2Njk4MDkwNDAzOCwyMDMuMTk4MDY0MDM1NzQwODgsNTIyLjk0OTQ4NjMwMTM2OTksMjYxLjY0NTY2NTMyMjU4MDY3LDM0Mi4xNDY5NDM0MTU2MDAxLDE2My4zMTkyNDU5OTE4MTU5MywxOTkuMjAxNTgzOTYyMzgwODgsMzYzLjE1OTY1NDIzMzcyNjU0LDI3MC4wNzU0NTczNTg0NDk2LDIxMy4wNTEyMDEyNzUyODc1MywzMDMuNTYwOTU4NDQ4OTcsNDUzLjM1MzM3MjY3NjYzMTIsMzkyLjg1Mzc0MTQ5NjU5ODYsMzIzLjc0NjY1MjMxNjQ3MTg1LDc4Ny4wMTkzMzk5Mjg2NDA5LDI1Ni4zODEwMjkwNjIxODg1LDI3MC41MTkwMTAyNTk1MDUxNCwxMTIuMTEwMjYxNTAzNzE0MzgsMzIyLjczMDg0MzQ4NTc4NjYsMTUzLjU4NTE2NzMwNDM4MzU2LDIzNS4wOTEwNjcyNTM4NDY1NywxMjguNjcwNTMzNDc5MDczMzgsMjUxLjgzNDI3NjA1OTY0ODksNDE2Ljk3MTQ4NTQxMTE0MDYsMjEyLjA5MzI5MDg0NzkzNzcsMTMzLjcyNjM2NDg1NzE0NzI3LDI4OS41NDE4NzE0Mjk2NDA1NCw2My4wNzM3MDEwMzE0MjcwNSwyNzguMjkxMjA2OTgxNzIyNCwxMTEuNjQ0NzQ3NTkwMjYzMDIsNDcuNjM1OTQwNzIwOTMxNTMsNzEuMjUyMTEzMzc2NDI5NjMsMTYyODguMTAzNjY0MjY1NTgKKzIwLFN1biAxMyBGZWIgMTEsMTc0LjM1NjMzMzY3NjYyMjA2LDI2Ny4xNTYyNTExNTM1MTk2Myw0MzguNjkyNjQ2MTM0NTA2Niw1NDcuNTc5MzcxMzc4NjgwOCwxODAuMjI3NDg5NTY0Njk4ODYsODMuNTI2ODc3NDk2MjM1MTksMTQ3LjkyOTg4NjU4Nzk5NzYsMzMwLjY0NTY2OTI5MTMzODYsMjc1LjgyODg3MTQ5OTE3NjMsMzY1LjM2NTIyODI4NTg4OTEsMTgzLjU4NjQ0OTgwODM0OTczLDIxNC43MTg4Nzg4MzM5MDU2LDM3NS42NjAzNzQxMzUxMzI4LDk2Ljc5NDkxMzA0MTAwOTgyLDIzNy45NzQ5MDYzNjIwODQyNSwxMTEuMTM5OTUzMDI1MDI2MzIsMjg5LjM2MTI0OTYwNzc1NDI1LDIyNi42MzM4OTg4ODEwNDA4NCwyMzQuOTk4MDk1NjE5OTI1ODMsMTkwLjYzNzc0MzQ4OTkzMDc4LDEzNi4yOTg5Mzg1NzY2NDg2OCw0Ni45NzEzMTc0NTI2MDA4OCwxMzUuODI4NTY2OTg2MTUwNzUsMTUxLjQxNzY0NDExMDI3NTcsMTEzLjQ2OTQ5NTAzNjk1MjI4LDU1LjQ1MTk3NzQwMTEyOTk0NSw0NTAuMjkyNjUzOTQwNDI5MywxMzkyLjA4NjM4OTg3MTUzMjIsMzY1LjIwMjY2MzQ3MzQwMTUsMTAwOS43NDI0MjI5MDM1OTYzLDQyNy40ODQwNzc0OTUwODE1LDE4OS43ODYzMDY0OTkwNjM5Myw1Ny40ODA4MDk2ODg5NzQ4MSw2NDEuNjQ5NDU4NTA0MDEyMiwxOTIzLjgzNzYxOTMzNDMwOCwxNTA3LjMzOTI3NTY1MTg2MjIsMjYyLjU4NzI0Njg3NjM0NjQsNzYuMTE4MDkyODIxNTA2MzQsMTc5LjUwNTM3Mjk0NTYzODQsNTguMDcwNjYyMjUyNTY1MzU2LDIyNC4zMzQxOTEwNTgyMTgwNywxMjY5LjY3NjY5ODA5MDQwMzgsMjAzLjE5ODA2NDAzNTc0MDg4LDUyMi45NDk0ODYzMDEzNjk5LDI2MS42NDU2NjUzMjI1ODA2NywzNDIuMTQ2OTQzNDE1NjAwMSwxNjMuMzE5MjQ1OTkxODE1OTMsMTk5LjIwMTU4Mzk2MjM4MDg4LDM2My4xNTk2NTQyMzM3MjY1NCwyNzAuMDc1NDU3MzU4NDQ5NiwyMTMuMDUxMjAxMjc1Mjg3NTMsMzAzLjU2MDk1ODQ0ODk3LDQ1My4zNTMzNzI2NzY2MzEyLDM5Mi44NTM3NDE0OTY1OTg2LDMyMy43NDY2NTIzMTY0NzE4NSw3ODcuMDE5MzM5OTI4NjQwOSwyNTYuMzgxMDI5MDYyMTg4NSwyNzAuNTE5MDEwMjU5NTA1MTQsMTEyLjExMDI2MTUwMzcxNDM4LDMyMi43MzA4NDM0ODU3ODY2LDE1My41ODUxNjczMDQzODM1NiwyMzUuMDkxMDY3MjUzODQ2NTcsMTI4LjY3MDUzMzQ3OTA3MzM4LDI1MS44MzQyNzYwNTk2NDg5LDQxNi45NzE0ODU0MTExNDA2LDIxMi4wOTMyOTA4NDc5Mzc3LDEzMy43MjYzNjQ4NTcxNDcyNywyODkuNTQxODcxNDI5NjQwNTQsNjMuMDczNzAxMDMxNDI3MDUsMjc4LjI5MTIwNjk4MTcyMjQsMTExLjY0NDc0NzU5MDI2MzAyLDQ3LjYzNTk0MDcyMDkzMTUzLDcxLjI1MjExMzM3NjQyOTYzLDE2Mjg4LjEwMzY2NDI2NTU4CisyMSxNb24gMTQgRmViIDExLDE3NC4zNTYzMzM2NzY2MjIwNiwyNjcuMTU2MjUxMTUzNTE5NjMsNDM4LjY5MjY0NjEzNDUwNjYsNTQ3LjU3OTM3MTM3ODY4MDgsMTgwLjIyNzQ4OTU2NDY5ODg2LDgzLjUyNjg3NzQ5NjIzNTE5LDE0Ny45Mjk4ODY1ODc5OTc2LDMzMC42NDU2NjkyOTEzMzg2LDI3NS44Mjg4NzE0OTkxNzYzLDM2NS4zNjUyMjgyODU4ODkxLDE4My41ODY0NDk4MDgzNDk3MywyMTQuNzE4ODc4ODMzOTA1NiwzNzUuNjYwMzc0MTM1MTMyOCw5Ni43OTQ5MTMwNDEwMDk4MiwyMzcuOTc0OTA2MzYyMDg0MjUsMTExLjEzOTk1MzAyNTAyNjMyLDI4OS4zNjEyNDk2MDc3NTQyNSwyMjYuNjMzODk4ODgxMDQwODQsMjM0Ljk5ODA5NTYxOTkyNTgzLDE5MC42Mzc3NDM0ODk5MzA3OCwxMzYuMjk4OTM4NTc2NjQ4NjgsNDYuOTcxMzE3NDUyNjAwODgsMTM1LjgyODU2Njk4NjE1MDc1LDE1MS40MTc2NDQxMTAyNzU3LDExMy40Njk0OTUwMzY5NTIyOCw1NS40NTE5Nzc0MDExMjk5NDUsNDUwLjI5MjY1Mzk0MDQyOTMsMTM5Mi4wODYzODk4NzE1MzIyLDM2NS4yMDI2NjM0NzM0MDE1LDEwMDkuNzQyNDIyOTAzNTk2Myw0MjcuNDg0MDc3NDk1MDgxNSwxODkuNzg2MzA2NDk5MDYzOTMsNTcuNDgwODA5Njg4OTc0ODEsNjQxLjY0OTQ1ODUwNDAxMjIsMTkyMy44Mzc2MTkzMzQzMDgsMTUwNy4zMzkyNzU2NTE4NjIyLDI2Mi41ODcyNDY4NzYzNDY0LDc2LjExODA5MjgyMTUwNjM0LDE3OS41MDUzNzI5NDU2Mzg0LDU4LjA3MDY2MjI1MjU2NTM1NiwyMjQuMzM0MTkxMDU4MjE4MDcsMTI2OS42NzY2OTgwOTA0MDM4LDIwMy4xOTgwNjQwMzU3NDA4OCw1MjIuOTQ5NDg2MzAxMzY5OSwyNjEuNjQ1NjY1MzIyNTgwNjcsMzQyLjE0Njk0MzQxNTYwMDEsMTYzLjMxOTI0NTk5MTgxNTkzLDE5OS4yMDE1ODM5NjIzODA4OCwzNjMuMTU5NjU0MjMzNzI2NTQsMjcwLjA3NTQ1NzM1ODQ0OTYsMjEzLjA1MTIwMTI3NTI4NzUzLDMwMy41NjA5NTg0NDg5Nyw0NTMuMzUzMzcyNjc2NjMxMiwzOTIuODUzNzQxNDk2NTk4NiwzMjMuNzQ2NjUyMzE2NDcxODUsNzg3LjAxOTMzOTkyODY0MDksMjU2LjM4MTAyOTA2MjE4ODUsMjcwLjUxOTAxMDI1OTUwNTE0LDExMi4xMTAyNjE1MDM3MTQzOCwzMjIuNzMwODQzNDg1Nzg2NiwxNTMuNTg1MTY3MzA0MzgzNTYsMjM1LjA5MTA2NzI1Mzg0NjU3LDEyOC42NzA1MzM0NzkwNzMzOCwyNTEuODM0Mjc2MDU5NjQ4OSw0MTYuOTcxNDg1NDExMTQwNiwyMTIuMDkzMjkwODQ3OTM3NywxMzMuNzI2MzY0ODU3MTQ3MjcsMjg5LjU0MTg3MTQyOTY0MDU0LDYzLjA3MzcwMTAzMTQyNzA1LDI3OC4yOTEyMDY5ODE3MjI0LDExMS42NDQ3NDc1OTAyNjMwMiw0Ny42MzU5NDA3MjA5MzE1Myw3MS4yNTIxMTMzNzY0Mjk2MywxNjI4OC4xMDM2NjQyNjU1OAorMjIsVHVlIDE1IEZlYiAxMSwxNzQuMzU2MzMzNjc2NjIyMDYsMjY3LjE1NjI1MTE1MzUxOTYzLDQzOC42OTI2NDYxMzQ1MDY2LDU0Ny41NzkzNzEzNzg2ODA4LDE4MC4yMjc0ODk1NjQ2OTg4Niw4My41MjY4Nzc0OTYyMzUxOSwxNDcuOTI5ODg2NTg3OTk3NiwzMzAuNjQ1NjY5MjkxMzM4NiwyNzUuODI4ODcxNDk5MTc2MywzNjUuMzY1MjI4Mjg1ODg5MSwxODMuNTg2NDQ5ODA4MzQ5NzMsMjE0LjcxODg3ODgzMzkwNTYsMzc1LjY2MDM3NDEzNTEzMjgsOTYuNzk0OTEzMDQxMDA5ODIsMjM3Ljk3NDkwNjM2MjA4NDI1LDExMS4xMzk5NTMwMjUwMjYzMiwyODkuMzYxMjQ5NjA3NzU0MjUsMjI2LjYzMzg5ODg4MTA0MDg0LDIzNC45OTgwOTU2MTk5MjU4MywxOTAuNjM3NzQzNDg5OTMwNzgsMTM2LjI5ODkzODU3NjY0ODY4LDQ2Ljk3MTMxNzQ1MjYwMDg4LDEzNS44Mjg1NjY5ODYxNTA3NSwxNTEuNDE3NjQ0MTEwMjc1NywxMTMuNDY5NDk1MDM2OTUyMjgsNTUuNDUxOTc3NDAxMTI5OTQ1LDQ1MC4yOTI2NTM5NDA0MjkzLDEzOTIuMDg2Mzg5ODcxNTMyMiwzNjUuMjAyNjYzNDczNDAxNSwxMDA5Ljc0MjQyMjkwMzU5NjMsNDI3LjQ4NDA3NzQ5NTA4MTUsMTg5Ljc4NjMwNjQ5OTA2MzkzLDU3LjQ4MDgwOTY4ODk3NDgxLDY0MS42NDk0NTg1MDQwMTIyLDE5MjMuODM3NjE5MzM0MzA4LDE1MDcuMzM5Mjc1NjUxODYyMiwyNjIuNTg3MjQ2ODc2MzQ2NCw3Ni4xMTgwOTI4MjE1MDYzNCwxNzkuNTA1MzcyOTQ1NjM4NCw1OC4wNzA2NjIyNTI1NjUzNTYsMjI0LjMzNDE5MTA1ODIxODA3LDEyNjkuNjc2Njk4MDkwNDAzOCwyMDMuMTk4MDY0MDM1NzQwODgsNTIyLjk0OTQ4NjMwMTM2OTksMjYxLjY0NTY2NTMyMjU4MDY3LDM0Mi4xNDY5NDM0MTU2MDAxLDE2My4zMTkyNDU5OTE4MTU5MywxOTkuMjAxNTgzOTYyMzgwODgsMzYzLjE1OTY1NDIzMzcyNjU0LDI3MC4wNzU0NTczNTg0NDk2LDIxMy4wNTEyMDEyNzUyODc1MywzMDMuNTYwOTU4NDQ4OTcsNDUzLjM1MzM3MjY3NjYzMTIsMzkyLjg1Mzc0MTQ5NjU5ODYsMzIzLjc0NjY1MjMxNjQ3MTg1LDc4Ny4wMTkzMzk5Mjg2NDA5LDI1Ni4zODEwMjkwNjIxODg1LDI3MC41MTkwMTAyNTk1MDUxNCwxMTIuMTEwMjYxNTAzNzE0MzgsMzIyLjczMDg0MzQ4NTc4NjYsMTUzLjU4NTE2NzMwNDM4MzU2LDIzNS4wOTEwNjcyNTM4NDY1NywxMjguNjcwNTMzNDc5MDczMzgsMjUxLjgzNDI3NjA1OTY0ODksNDE2Ljk3MTQ4NTQxMTE0MDYsMjEyLjA5MzI5MDg0NzkzNzcsMTMzLjcyNjM2NDg1NzE0NzI3LDI4OS41NDE4NzE0Mjk2NDA1NCw2My4wNzM3MDEwMzE0MjcwNSwyNzguMjkxMjA2OTgxNzIyNCwxMTEuNjQ0NzQ3NTkwMjYzMDIsNDcuNjM1OTQwNzIwOTMxNTMsNzEuMjUyMTEzMzc2NDI5NjMsMTYyODguMTAzNjY0MjY1NTgKKzIzLFdlZCAxNiBGZWIgMTEsMTc0LjM1NjMzMzY3NjYyMjA2LDI2Ny4xNTYyNTExNTM1MTk2Myw0MzguNjkyNjQ2MTM0NTA2Niw1NDcuNTc5MzcxMzc4NjgwOCwxODAuMjI3NDg5NTY0Njk4ODYsODMuNTI2ODc3NDk2MjM1MTksMTQ3LjkyOTg4NjU4Nzk5NzYsMzMwLjY0NTY2OTI5MTMzODYsMjc1LjgyODg3MTQ5OTE3NjMsMzY1LjM2NTIyODI4NTg4OTEsMTgzLjU4NjQ0OTgwODM0OTczLDIxNC43MTg4Nzg4MzM5MDU2LDM3NS42NjAzNzQxMzUxMzI4LDk2Ljc5NDkxMzA0MTAwOTgyLDIzNy45NzQ5MDYzNjIwODQyNSwxMTEuMTM5OTUzMDI1MDI2MzIsMjg5LjM2MTI0OTYwNzc1NDI1LDIyNi42MzM4OTg4ODEwNDA4NCwyMzQuOTk4MDk1NjE5OTI1ODMsMTkwLjYzNzc0MzQ4OTkzMDc4LDEzNi4yOTg5Mzg1NzY2NDg2OCw0Ni45NzEzMTc0NTI2MDA4OCwxMzUuODI4NTY2OTg2MTUwNzUsMTUxLjQxNzY0NDExMDI3NTcsMTEzLjQ2OTQ5NTAzNjk1MjI4LDU1LjQ1MTk3NzQwMTEyOTk0NSw0NTAuMjkyNjUzOTQwNDI5MywxMzkyLjA4NjM4OTg3MTUzMjIsMzY1LjIwMjY2MzQ3MzQwMTUsMTAwOS43NDI0MjI5MDM1OTYzLDQyNy40ODQwNzc0OTUwODE1LDE4OS43ODYzMDY0OTkwNjM5Myw1Ny40ODA4MDk2ODg5NzQ4MSw2NDEuNjQ5NDU4NTA0MDEyMiwxOTIzLjgzNzYxOTMzNDMwOCwxNTA3LjMzOTI3NTY1MTg2MjIsMjYyLjU4NzI0Njg3NjM0NjQsNzYuMTE4MDkyODIxNTA2MzQsMTc5LjUwNTM3Mjk0NTYzODQsNTguMDcwNjYyMjUyNTY1MzU2LDIyNC4zMzQxOTEwNTgyMTgwNywxMjY5LjY3NjY5ODA5MDQwMzgsMjAzLjE5ODA2NDAzNTc0MDg4LDUyMi45NDk0ODYzMDEzNjk5LDI2MS42NDU2NjUzMjI1ODA2NywzNDIuMTQ2OTQzNDE1NjAwMSwxNjMuMzE5MjQ1OTkxODE1OTMsMTk5LjIwMTU4Mzk2MjM4MDg4LDM2My4xNTk2NTQyMzM3MjY1NCwyNzAuMDc1NDU3MzU4NDQ5NiwyMTMuMDUxMjAxMjc1Mjg3NTMsMzAzLjU2MDk1ODQ0ODk3LDQ1My4zNTMzNzI2NzY2MzEyLDM5Mi44NTM3NDE0OTY1OTg2LDMyMy43NDY2NTIzMTY0NzE4NSw3ODcuMDE5MzM5OTI4NjQwOSwyNTYuMzgxMDI5MDYyMTg4NSwyNzAuNTE5MDEwMjU5NTA1MTQsMTEyLjExMDI2MTUwMzcxNDM4LDMyMi43MzA4NDM0ODU3ODY2LDE1My41ODUxNjczMDQzODM1NiwyMzUuMDkxMDY3MjUzODQ2NTcsMTI4LjY3MDUzMzQ3OTA3MzM4LDI1MS44MzQyNzYwNTk2NDg5LDQxNi45NzE0ODU0MTExNDA2LDIxMi4wOTMyOTA4NDc5Mzc3LDEzMy43MjYzNjQ4NTcxNDcyNywyODkuNTQxODcxNDI5NjQwNTQsNjMuMDczNzAxMDMxNDI3MDUsMjc4LjI5MTIwNjk4MTcyMjQsMTExLjY0NDc0NzU5MDI2MzAyLDQ3LjYzNTk0MDcyMDkzMTUzLDcxLjI1MjExMzM3NjQyOTYzLDE2Mjg4LjEwMzY2NDI2NTU4CisyNCxUaHUgMTcgRmViIDExLDE3NC4zNTYzMzM2NzY2MjIwNiwyNjcuMTU2MjUxMTUzNTE5NjMsNDM4LjY5MjY0NjEzNDUwNjYsNTQ3LjU3OTM3MTM3ODY4MDgsMTgwLjIyNzQ4OTU2NDY5ODg2LDgzLjUyNjg3NzQ5NjIzNTE5LDE0Ny45Mjk4ODY1ODc5OTc2LDMzMC42NDU2NjkyOTEzMzg2LDI3NS44Mjg4NzE0OTkxNzYzLDM2NS4zNjUyMjgyODU4ODkxLDE4My41ODY0NDk4MDgzNDk3MywyMTQuNzE4ODc4ODMzOTA1NiwzNzUuNjYwMzc0MTM1MTMyOCw5Ni43OTQ5MTMwNDEwMDk4MiwyMzcuOTc0OTA2MzYyMDg0MjUsMTExLjEzOTk1MzAyNTAyNjMyLDI4OS4zNjEyNDk2MDc3NTQyNSwyMjYuNjMzODk4ODgxMDQwODQsMjM0Ljk5ODA5NTYxOTkyNTgzLDE5MC42Mzc3NDM0ODk5MzA3OCwxMzYuMjk4OTM4NTc2NjQ4NjgsNDYuOTcxMzE3NDUyNjAwODgsMTM1LjgyODU2Njk4NjE1MDc1LDE1MS40MTc2NDQxMTAyNzU3LDExMy40Njk0OTUwMzY5NTIyOCw1NS40NTE5Nzc0MDExMjk5NDUsNDUwLjI5MjY1Mzk0MDQyOTMsMTM5Mi4wODYzODk4NzE1MzIyLDM2NS4yMDI2NjM0NzM0MDE1LDEwMDkuNzQyNDIyOTAzNTk2Myw0MjcuNDg0MDc3NDk1MDgxNSwxODkuNzg2MzA2NDk5MDYzOTMsNTcuNDgwODA5Njg4OTc0ODEsNjQxLjY0OTQ1ODUwNDAxMjIsMTkyMy44Mzc2MTkzMzQzMDgsMTUwNy4zMzkyNzU2NTE4NjIyLDI2Mi41ODcyNDY4NzYzNDY0LDc2LjExODA5MjgyMTUwNjM0LDE3OS41MDUzNzI5NDU2Mzg0LDU4LjA3MDY2MjI1MjU2NTM1NiwyMjQuMzM0MTkxMDU4MjE4MDcsMTI2OS42NzY2OTgwOTA0MDM4LDIwMy4xOTgwNjQwMzU3NDA4OCw1MjIuOTQ5NDg2MzAxMzY5OSwyNjEuNjQ1NjY1MzIyNTgwNjcsMzQyLjE0Njk0MzQxNTYwMDEsMTYzLjMxOTI0NTk5MTgxNTkzLDE5OS4yMDE1ODM5NjIzODA4OCwzNjMuMTU5NjU0MjMzNzI2NTQsMjcwLjA3NTQ1NzM1ODQ0OTYsMjEzLjA1MTIwMTI3NTI4NzUzLDMwMy41NjA5NTg0NDg5Nyw0NTMuMzUzMzcyNjc2NjMxMiwzOTIuODUzNzQxNDk2NTk4NiwzMjMuNzQ2NjUyMzE2NDcxODUsNzg3LjAxOTMzOTkyODY0MDksMjU2LjM4MTAyOTA2MjE4ODUsMjcwLjUxOTAxMDI1OTUwNTE0LDExMi4xMTAyNjE1MDM3MTQzOCwzMjIuNzMwODQzNDg1Nzg2NiwxNTMuNTg1MTY3MzA0MzgzNTYsMjM1LjA5MTA2NzI1Mzg0NjU3LDEyOC42NzA1MzM0NzkwNzMzOCwyNTEuODM0Mjc2MDU5NjQ4OSw0MTYuOTcxNDg1NDExMTQwNiwyMTIuMDkzMjkwODQ3OTM3NywxMzMuNzI2MzY0ODU3MTQ3MjcsMjg5LjU0MTg3MTQyOTY0MDU0LDYzLjA3MzcwMTAzMTQyNzA1LDI3OC4yOTEyMDY5ODE3MjI0LDExMS42NDQ3NDc1OTAyNjMwMiw0Ny42MzU5NDA3MjA5MzE1Myw3MS4yNTIxMTMzNzY0Mjk2MywxNjI4OC4xMDM2NjQyNjU1OAorMjUsRnJpIDE4IEZlYiAxMSwxNzQuMzU2MzMzNjc2NjIyMDYsMjY3LjE1NjI1MTE1MzUxOTYzLDQzOC42OTI2NDYxMzQ1MDY2LDU0Ny41NzkzNzEzNzg2ODA4LDE4MC4yMjc0ODk1NjQ2OTg4Niw4My41MjY4Nzc0OTYyMzUxOSwxNDcuOTI5ODg2NTg3OTk3NiwzMzAuNjQ1NjY5MjkxMzM4NiwyNzUuODI4ODcxNDk5MTc2MywzNjUuMzY1MjI4Mjg1ODg5MSwxODMuNTg2NDQ5ODA4MzQ5NzMsMjE0LjcxODg3ODgzMzkwNTYsMzc1LjY2MDM3NDEzNTEzMjgsOTYuNzk0OTEzMDQxMDA5ODIsMjM3Ljk3NDkwNjM2MjA4NDI1LDExMS4xMzk5NTMwMjUwMjYzMiwyODkuMzYxMjQ5NjA3NzU0MjUsMjI2LjYzMzg5ODg4MTA0MDg0LDIzNC45OTgwOTU2MTk5MjU4MywxOTAuNjM3NzQzNDg5OTMwNzgsMTM2LjI5ODkzODU3NjY0ODY4LDQ2Ljk3MTMxNzQ1MjYwMDg4LDEzNS44Mjg1NjY5ODYxNTA3NSwxNTEuNDE3NjQ0MTEwMjc1NywxMTMuNDY5NDk1MDM2OTUyMjgsNTUuNDUxOTc3NDAxMTI5OTQ1LDQ1MC4yOTI2NTM5NDA0MjkzLDEzOTIuMDg2Mzg5ODcxNTMyMiwzNjUuMjAyNjYzNDczNDAxNSwxMDA5Ljc0MjQyMjkwMzU5NjMsNDI3LjQ4NDA3NzQ5NTA4MTUsMTg5Ljc4NjMwNjQ5OTA2MzkzLDU3LjQ4MDgwOTY4ODk3NDgxLDY0MS42NDk0NTg1MDQwMTIyLDE5MjMuODM3NjE5MzM0MzA4LDE1MDcuMzM5Mjc1NjUxODYyMiwyNjIuNTg3MjQ2ODc2MzQ2NCw3Ni4xMTgwOTI4MjE1MDYzNCwxNzkuNTA1MzcyOTQ1NjM4NCw1OC4wNzA2NjIyNTI1NjUzNTYsMjI0LjMzNDE5MTA1ODIxODA3LDEyNjkuNjc2Njk4MDkwNDAzOCwyMDMuMTk4MDY0MDM1NzQwODgsNTIyLjk0OTQ4NjMwMTM2OTksMjYxLjY0NTY2NTMyMjU4MDY3LDM0Mi4xNDY5NDM0MTU2MDAxLDE2My4zMTkyNDU5OTE4MTU5MywxOTkuMjAxNTgzOTYyMzgwODgsMzYzLjE1OTY1NDIzMzcyNjU0LDI3MC4wNzU0NTczNTg0NDk2LDIxMy4wNTEyMDEyNzUyODc1MywzMDMuNTYwOTU4NDQ4OTcsNDUzLjM1MzM3MjY3NjYzMTIsMzkyLjg1Mzc0MTQ5NjU5ODYsMzIzLjc0NjY1MjMxNjQ3MTg1LDc4Ny4wMTkzMzk5Mjg2NDA5LDI1Ni4zODEwMjkwNjIxODg1LDI3MC41MTkwMTAyNTk1MDUxNCwxMTIuMTEwMjYxNTAzNzE0MzgsMzIyLjczMDg0MzQ4NTc4NjYsMTUzLjU4NTE2NzMwNDM4MzU2LDIzNS4wOTEwNjcyNTM4NDY1NywxMjguNjcwNTMzNDc5MDczMzgsMjUxLjgzNDI3NjA1OTY0ODksNDE2Ljk3MTQ4NTQxMTE0MDYsMjEyLjA5MzI5MDg0NzkzNzcsMTMzLjcyNjM2NDg1NzE0NzI3LDI4OS41NDE4NzE0Mjk2NDA1NCw2My4wNzM3MDEwMzE0MjcwNSwyNzguMjkxMjA2OTgxNzIyNCwxMTEuNjQ0NzQ3NTkwMjYzMDIsNDcuNjM1OTQwNzIwOTMxNTMsNzEuMjUyMTEzMzc2NDI5NjMsMTYyODguMTAzNjY0MjY1NTgKKzI2LFNhdCAxOSBGZWIgMTEsMTc0LjM1NjMzMzY3NjYyMjA2LDI2Ny4xNTYyNTExNTM1MTk2Myw0MzguNjkyNjQ2MTM0NTA2Niw1NDcuNTc5MzcxMzc4NjgwOCwxODAuMjI3NDg5NTY0Njk4ODYsODMuNTI2ODc3NDk2MjM1MTksMTQ3LjkyOTg4NjU4Nzk5NzYsMzMwLjY0NTY2OTI5MTMzODYsMjc1LjgyODg3MTQ5OTE3NjMsMzY1LjM2NTIyODI4NTg4OTEsMTgzLjU4NjQ0OTgwODM0OTczLDIxNC43MTg4Nzg4MzM5MDU2LDM3NS42NjAzNzQxMzUxMzI4LDk2Ljc5NDkxMzA0MTAwOTgyLDIzNy45NzQ5MDYzNjIwODQyNSwxMTEuMTM5OTUzMDI1MDI2MzIsMjg5LjM2MTI0OTYwNzc1NDI1LDIyNi42MzM4OTg4ODEwNDA4NCwyMzQuOTk4MDk1NjE5OTI1ODMsMTkwLjYzNzc0MzQ4OTkzMDc4LDEzNi4yOTg5Mzg1NzY2NDg2OCw0Ni45NzEzMTc0NTI2MDA4OCwxMzUuODI4NTY2OTg2MTUwNzUsMTUxLjQxNzY0NDExMDI3NTcsMTEzLjQ2OTQ5NTAzNjk1MjI4LDU1LjQ1MTk3NzQwMTEyOTk0NSw0NTAuMjkyNjUzOTQwNDI5MywxMzkyLjA4NjM4OTg3MTUzMjIsMzY1LjIwMjY2MzQ3MzQwMTUsMTAwOS43NDI0MjI5MDM1OTYzLDQyNy40ODQwNzc0OTUwODE1LDE4OS43ODYzMDY0OTkwNjM5Myw1Ny40ODA4MDk2ODg5NzQ4MSw2NDEuNjQ5NDU4NTA0MDEyMiwxOTIzLjgzNzYxOTMzNDMwOCwxNTA3LjMzOTI3NTY1MTg2MjIsMjYyLjU4NzI0Njg3NjM0NjQsNzYuMTE4MDkyODIxNTA2MzQsMTc5LjUwNTM3Mjk0NTYzODQsNTguMDcwNjYyMjUyNTY1MzU2LDIyNC4zMzQxOTEwNTgyMTgwNywxMjY5LjY3NjY5ODA5MDQwMzgsMjAzLjE5ODA2NDAzNTc0MDg4LDUyMi45NDk0ODYzMDEzNjk5LDI2MS42NDU2NjUzMjI1ODA2NywzNDIuMTQ2OTQzNDE1NjAwMSwxNjMuMzE5MjQ1OTkxODE1OTMsMTk5LjIwMTU4Mzk2MjM4MDg4LDM2My4xNTk2NTQyMzM3MjY1NCwyNzAuMDc1NDU3MzU4NDQ5NiwyMTMuMDUxMjAxMjc1Mjg3NTMsMzAzLjU2MDk1ODQ0ODk3LDQ1My4zNTMzNzI2NzY2MzEyLDM5Mi44NTM3NDE0OTY1OTg2LDMyMy43NDY2NTIzMTY0NzE4NSw3ODcuMDE5MzM5OTI4NjQwOSwyNTYuMzgxMDI5MDYyMTg4NSwyNzAuNTE5MDEwMjU5NTA1MTQsMTEyLjExMDI2MTUwMzcxNDM4LDMyMi43MzA4NDM0ODU3ODY2LDE1My41ODUxNjczMDQzODM1NiwyMzUuMDkxMDY3MjUzODQ2NTcsMTI4LjY3MDUzMzQ3OTA3MzM4LDI1MS44MzQyNzYwNTk2NDg5LDQxNi45NzE0ODU0MTExNDA2LDIxMi4wOTMyOTA4NDc5Mzc3LDEzMy43MjYzNjQ4NTcxNDcyNywyODkuNTQxODcxNDI5NjQwNTQsNjMuMDczNzAxMDMxNDI3MDUsMjc4LjI5MTIwNjk4MTcyMjQsMTExLjY0NDc0NzU5MDI2MzAyLDQ3LjYzNTk0MDcyMDkzMTUzLDcxLjI1MjExMzM3NjQyOTYzLDE2Mjg4LjEwMzY2NDI2NTU4CisyNyxTdW4gMjAgRmViIDExLDE3NC4zNTYzMzM2NzY2MjIwNiwyNjcuMTU2MjUxMTUzNTE5NjMsNDM4LjY5MjY0NjEzNDUwNjYsNTQ3LjU3OTM3MTM3ODY4MDgsMTgwLjIyNzQ4OTU2NDY5ODg2LDgzLjUyNjg3NzQ5NjIzNTE5LDE0Ny45Mjk4ODY1ODc5OTc2LDMzMC42NDU2NjkyOTEzMzg2LDI3NS44Mjg4NzE0OTkxNzYzLDM2NS4zNjUyMjgyODU4ODkxLDE4My41ODY0NDk4MDgzNDk3MywyMTQuNzE4ODc4ODMzOTA1NiwzNzUuNjYwMzc0MTM1MTMyOCw5Ni43OTQ5MTMwNDEwMDk4MiwyMzcuOTc0OTA2MzYyMDg0MjUsMTExLjEzOTk1MzAyNTAyNjMyLDI4OS4zNjEyNDk2MDc3NTQyNSwyMjYuNjMzODk4ODgxMDQwODQsMjM0Ljk5ODA5NTYxOTkyNTgzLDE5MC42Mzc3NDM0ODk5MzA3OCwxMzYuMjk4OTM4NTc2NjQ4NjgsNDYuOTcxMzE3NDUyNjAwODgsMTM1LjgyODU2Njk4NjE1MDc1LDE1MS40MTc2NDQxMTAyNzU3LDExMy40Njk0OTUwMzY5NTIyOCw1NS40NTE5Nzc0MDExMjk5NDUsNDUwLjI5MjY1Mzk0MDQyOTMsMTM5Mi4wODYzODk4NzE1MzIyLDM2NS4yMDI2NjM0NzM0MDE1LDEwMDkuNzQyNDIyOTAzNTk2Myw0MjcuNDg0MDc3NDk1MDgxNSwxODkuNzg2MzA2NDk5MDYzOTMsNTcuNDgwODA5Njg4OTc0ODEsNjQxLjY0OTQ1ODUwNDAxMjIsMTkyMy44Mzc2MTkzMzQzMDgsMTUwNy4zMzkyNzU2NTE4NjIyLDI2Mi41ODcyNDY4NzYzNDY0LDc2LjExODA5MjgyMTUwNjM0LDE3OS41MDUzNzI5NDU2Mzg0LDU4LjA3MDY2MjI1MjU2NTM1NiwyMjQuMzM0MTkxMDU4MjE4MDcsMTI2OS42NzY2OTgwOTA0MDM4LDIwMy4xOTgwNjQwMzU3NDA4OCw1MjIuOTQ5NDg2MzAxMzY5OSwyNjEuNjQ1NjY1MzIyNTgwNjcsMzQyLjE0Njk0MzQxNTYwMDEsMTYzLjMxOTI0NTk5MTgxNTkzLDE5OS4yMDE1ODM5NjIzODA4OCwzNjMuMTU5NjU0MjMzNzI2NTQsMjcwLjA3NTQ1NzM1ODQ0OTYsMjEzLjA1MTIwMTI3NTI4NzUzLDMwMy41NjA5NTg0NDg5Nyw0NTMuMzUzMzcyNjc2NjMxMiwzOTIuODUzNzQxNDk2NTk4NiwzMjMuNzQ2NjUyMzE2NDcxODUsNzg3LjAxOTMzOTkyODY0MDksMjU2LjM4MTAyOTA2MjE4ODUsMjcwLjUxOTAxMDI1OTUwNTE0LDExMi4xMTAyNjE1MDM3MTQzOCwzMjIuNzMwODQzNDg1Nzg2NiwxNTMuNTg1MTY3MzA0MzgzNTYsMjM1LjA5MTA2NzI1Mzg0NjU3LDEyOC42NzA1MzM0NzkwNzMzOCwyNTEuODM0Mjc2MDU5NjQ4OSw0MTYuOTcxNDg1NDExMTQwNiwyMTIuMDkzMjkwODQ3OTM3NywxMzMuNzI2MzY0ODU3MTQ3MjcsMjg5LjU0MTg3MTQyOTY0MDU0LDYzLjA3MzcwMTAzMTQyNzA1LDI3OC4yOTEyMDY5ODE3MjI0LDExMS42NDQ3NDc1OTAyNjMwMiw0Ny42MzU5NDA3MjA5MzE1Myw3MS4yNTIxMTMzNzY0Mjk2MywxNjI4OC4xMDM2NjQyNjU1OAorMjgsTW9uIDIxIEZlYiAxMSwxNzQuMzU2MzMzNjc2NjIyMDYsMjY3LjE1NjI1MTE1MzUxOTYzLDQzOC42OTI2NDYxMzQ1MDY2LDU0Ny41NzkzNzEzNzg2ODA4LDE4MC4yMjc0ODk1NjQ2OTg4Niw4My41MjY4Nzc0OTYyMzUxOSwxNDcuOTI5ODg2NTg3OTk3NiwzMzAuNjQ1NjY5MjkxMzM4NiwyNzUuODI4ODcxNDk5MTc2MywzNjUuMzY1MjI4Mjg1ODg5MSwxODMuNTg2NDQ5ODA4MzQ5NzMsMjE0LjcxODg3ODgzMzkwNTYsMzc1LjY2MDM3NDEzNTEzMjgsOTYuNzk0OTEzMDQxMDA5ODIsMjM3Ljk3NDkwNjM2MjA4NDI1LDExMS4xMzk5NTMwMjUwMjYzMiwyODkuMzYxMjQ5NjA3NzU0MjUsMjI2LjYzMzg5ODg4MTA0MDg0LDIzNC45OTgwOTU2MTk5MjU4MywxOTAuNjM3NzQzNDg5OTMwNzgsMTM2LjI5ODkzODU3NjY0ODY4LDQ2Ljk3MTMxNzQ1MjYwMDg4LDEzNS44Mjg1NjY5ODYxNTA3NSwxNTEuNDE3NjQ0MTEwMjc1NywxMTMuNDY5NDk1MDM2OTUyMjgsNTUuNDUxOTc3NDAxMTI5OTQ1LDQ1MC4yOTI2NTM5NDA0MjkzLDEzOTIuMDg2Mzg5ODcxNTMyMiwzNjUuMjAyNjYzNDczNDAxNSwxMDA5Ljc0MjQyMjkwMzU5NjMsNDI3LjQ4NDA3NzQ5NTA4MTUsMTg5Ljc4NjMwNjQ5OTA2MzkzLDU3LjQ4MDgwOTY4ODk3NDgxLDY0MS42NDk0NTg1MDQwMTIyLDE5MjMuODM3NjE5MzM0MzA4LDE1MDcuMzM5Mjc1NjUxODYyMiwyNjIuNTg3MjQ2ODc2MzQ2NCw3Ni4xMTgwOTI4MjE1MDYzNCwxNzkuNTA1MzcyOTQ1NjM4NCw1OC4wNzA2NjIyNTI1NjUzNTYsMjI0LjMzNDE5MTA1ODIxODA3LDEyNjkuNjc2Njk4MDkwNDAzOCwyMDMuMTk4MDY0MDM1NzQwODgsNTIyLjk0OTQ4NjMwMTM2OTksMjYxLjY0NTY2NTMyMjU4MDY3LDM0Mi4xNDY5NDM0MTU2MDAxLDE2My4zMTkyNDU5OTE4MTU5MywxOTkuMjAxNTgzOTYyMzgwODgsMzYzLjE1OTY1NDIzMzcyNjU0LDI3MC4wNzU0NTczNTg0NDk2LDIxMy4wNTEyMDEyNzUyODc1MywzMDMuNTYwOTU4NDQ4OTcsNDUzLjM1MzM3MjY3NjYzMTIsMzkyLjg1Mzc0MTQ5NjU5ODYsMzIzLjc0NjY1MjMxNjQ3MTg1LDc4Ny4wMTkzMzk5Mjg2NDA5LDI1Ni4zODEwMjkwNjIxODg1LDI3MC41MTkwMTAyNTk1MDUxNCwxMTIuMTEwMjYxNTAzNzE0MzgsMzIyLjczMDg0MzQ4NTc4NjYsMTUzLjU4NTE2NzMwNDM4MzU2LDIzNS4wOTEwNjcyNTM4NDY1NywxMjguNjcwNTMzNDc5MDczMzgsMjUxLjgzNDI3NjA1OTY0ODksNDE2Ljk3MTQ4NTQxMTE0MDYsMjEyLjA5MzI5MDg0NzkzNzcsMTMzLjcyNjM2NDg1NzE0NzI3LDI4OS41NDE4NzE0Mjk2NDA1NCw2My4wNzM3MDEwMzE0MjcwNSwyNzguMjkxMjA2OTgxNzIyNCwxMTEuNjQ0NzQ3NTkwMjYzMDIsNDcuNjM1OTQwNzIwOTMxNTMsNzEuMjUyMTEzMzc2NDI5NjMsMTYyODguMTAzNjY0MjY1NTgKKzI5LFR1ZSAyMiBGZWIgMTEsMTc0LjM1NjMzMzY3NjYyMjA2LDI2Ny4xNTYyNTExNTM1MTk2Myw0MzguNjkyNjQ2MTM0NTA2Niw1NDcuNTc5MzcxMzc4NjgwOCwxODAuMjI3NDg5NTY0Njk4ODYsODMuNTI2ODc3NDk2MjM1MTksMTQ3LjkyOTg4NjU4Nzk5NzYsMzMwLjY0NTY2OTI5MTMzODYsMjc1LjgyODg3MTQ5OTE3NjMsMzY1LjM2NTIyODI4NTg4OTEsMTgzLjU4NjQ0OTgwODM0OTczLDIxNC43MTg4Nzg4MzM5MDU2LDM3NS42NjAzNzQxMzUxMzI4LDk2Ljc5NDkxMzA0MTAwOTgyLDIzNy45NzQ5MDYzNjIwODQyNSwxMTEuMTM5OTUzMDI1MDI2MzIsMjg5LjM2MTI0OTYwNzc1NDI1LDIyNi42MzM4OTg4ODEwNDA4NCwyMzQuOTk4MDk1NjE5OTI1ODMsMTkwLjYzNzc0MzQ4OTkzMDc4LDEzNi4yOTg5Mzg1NzY2NDg2OCw0Ni45NzEzMTc0NTI2MDA4OCwxMzUuODI4NTY2OTg2MTUwNzUsMTUxLjQxNzY0NDExMDI3NTcsMTEzLjQ2OTQ5NTAzNjk1MjI4LDU1LjQ1MTk3NzQwMTEyOTk0NSw0NTAuMjkyNjUzOTQwNDI5MywxMzkyLjA4NjM4OTg3MTUzMjIsMzY1LjIwMjY2MzQ3MzQwMTUsMTAwOS43NDI0MjI5MDM1OTYzLDQyNy40ODQwNzc0OTUwODE1LDE4OS43ODYzMDY0OTkwNjM5Myw1Ny40ODA4MDk2ODg5NzQ4MSw2NDEuNjQ5NDU4NTA0MDEyMiwxOTIzLjgzNzYxOTMzNDMwOCwxNTA3LjMzOTI3NTY1MTg2MjIsMjYyLjU4NzI0Njg3NjM0NjQsNzYuMTE4MDkyODIxNTA2MzQsMTc5LjUwNTM3Mjk0NTYzODQsNTguMDcwNjYyMjUyNTY1MzU2LDIyNC4zMzQxOTEwNTgyMTgwNywxMjY5LjY3NjY5ODA5MDQwMzgsMjAzLjE5ODA2NDAzNTc0MDg4LDUyMi45NDk0ODYzMDEzNjk5LDI2MS42NDU2NjUzMjI1ODA2NywzNDIuMTQ2OTQzNDE1NjAwMSwxNjMuMzE5MjQ1OTkxODE1OTMsMTk5LjIwMTU4Mzk2MjM4MDg4LDM2My4xNTk2NTQyMzM3MjY1NCwyNzAuMDc1NDU3MzU4NDQ5NiwyMTMuMDUxMjAxMjc1Mjg3NTMsMzAzLjU2MDk1ODQ0ODk3LDQ1My4zNTMzNzI2NzY2MzEyLDM5Mi44NTM3NDE0OTY1OTg2LDMyMy43NDY2NTIzMTY0NzE4NSw3ODcuMDE5MzM5OTI4NjQwOSwyNTYuMzgxMDI5MDYyMTg4NSwyNzAuNTE5MDEwMjU5NTA1MTQsMTEyLjExMDI2MTUwMzcxNDM4LDMyMi43MzA4NDM0ODU3ODY2LDE1My41ODUxNjczMDQzODM1NiwyMzUuMDkxMDY3MjUzODQ2NTcsMTI4LjY3MDUzMzQ3OTA3MzM4LDI1MS44MzQyNzYwNTk2NDg5LDQxNi45NzE0ODU0MTExNDA2LDIxMi4wOTMyOTA4NDc5Mzc3LDEzMy43MjYzNjQ4NTcxNDcyNywyODkuNTQxODcxNDI5NjQwNTQsNjMuMDczNzAxMDMxNDI3MDUsMjc4LjI5MTIwNjk4MTcyMjQsMTExLjY0NDc0NzU5MDI2MzAyLDQ3LjYzNTk0MDcyMDkzMTUzLDcxLjI1MjExMzM3NjQyOTYzLDE2Mjg4LjEwMzY2NDI2NTU4CiszMCxXZWQgMjMgRmViIDExLDE3NC4zNTYzMzM2NzY2MjIwNiwyNjcuMTU2MjUxMTUzNTE5NjMsNDM4LjY5MjY0NjEzNDUwNjYsNTQ3LjU3OTM3MTM3ODY4MDgsMTgwLjIyNzQ4OTU2NDY5ODg2LDgzLjUyNjg3NzQ5NjIzNTE5LDE0Ny45Mjk4ODY1ODc5OTc2LDMzMC42NDU2NjkyOTEzMzg2LDI3NS44Mjg4NzE0OTkxNzYzLDM2NS4zNjUyMjgyODU4ODkxLDE4My41ODY0NDk4MDgzNDk3MywyMTQuNzE4ODc4ODMzOTA1NiwzNzUuNjYwMzc0MTM1MTMyOCw5Ni43OTQ5MTMwNDEwMDk4MiwyMzcuOTc0OTA2MzYyMDg0MjUsMTExLjEzOTk1MzAyNTAyNjMyLDI4OS4zNjEyNDk2MDc3NTQyNSwyMjYuNjMzODk4ODgxMDQwODQsMjM0Ljk5ODA5NTYxOTkyNTgzLDE5MC42Mzc3NDM0ODk5MzA3OCwxMzYuMjk4OTM4NTc2NjQ4NjgsNDYuOTcxMzE3NDUyNjAwODgsMTM1LjgyODU2Njk4NjE1MDc1LDE1MS40MTc2NDQxMTAyNzU3LDExMy40Njk0OTUwMzY5NTIyOCw1NS40NTE5Nzc0MDExMjk5NDUsNDUwLjI5MjY1Mzk0MDQyOTMsMTM5Mi4wODYzODk4NzE1MzIyLDM2NS4yMDI2NjM0NzM0MDE1LDEwMDkuNzQyNDIyOTAzNTk2Myw0MjcuNDg0MDc3NDk1MDgxNSwxODkuNzg2MzA2NDk5MDYzOTMsNTcuNDgwODA5Njg4OTc0ODEsNjQxLjY0OTQ1ODUwNDAxMjIsMTkyMy44Mzc2MTkzMzQzMDgsMTUwNy4zMzkyNzU2NTE4NjIyLDI2Mi41ODcyNDY4NzYzNDY0LDc2LjExODA5MjgyMTUwNjM0LDE3OS41MDUzNzI5NDU2Mzg0LDU4LjA3MDY2MjI1MjU2NTM1NiwyMjQuMzM0MTkxMDU4MjE4MDcsMTI2OS42NzY2OTgwOTA0MDM4LDIwMy4xOTgwNjQwMzU3NDA4OCw1MjIuOTQ5NDg2MzAxMzY5OSwyNjEuNjQ1NjY1MzIyNTgwNjcsMzQyLjE0Njk0MzQxNTYwMDEsMTYzLjMxOTI0NTk5MTgxNTkzLDE5OS4yMDE1ODM5NjIzODA4OCwzNjMuMTU5NjU0MjMzNzI2NTQsMjcwLjA3NTQ1NzM1ODQ0OTYsMjEzLjA1MTIwMTI3NTI4NzUzLDMwMy41NjA5NTg0NDg5Nyw0NTMuMzUzMzcyNjc2NjMxMiwzOTIuODUzNzQxNDk2NTk4NiwzMjMuNzQ2NjUyMzE2NDcxODUsNzg3LjAxOTMzOTkyODY0MDksMjU2LjM4MTAyOTA2MjE4ODUsMjcwLjUxOTAxMDI1OTUwNTE0LDExMi4xMTAyNjE1MDM3MTQzOCwzMjIuNzMwODQzNDg1Nzg2NiwxNTMuNTg1MTY3MzA0MzgzNTYsMjM1LjA5MTA2NzI1Mzg0NjU3LDEyOC42NzA1MzM0NzkwNzMzOCwyNTEuODM0Mjc2MDU5NjQ4OSw0MTYuOTcxNDg1NDExMTQwNiwyMTIuMDkzMjkwODQ3OTM3NywxMzMuNzI2MzY0ODU3MTQ3MjcsMjg5LjU0MTg3MTQyOTY0MDU0LDYzLjA3MzcwMTAzMTQyNzA1LDI3OC4yOTEyMDY5ODE3MjI0LDExMS42NDQ3NDc1OTAyNjMwMiw0Ny42MzU5NDA3MjA5MzE1Myw3MS4yNTIxMTMzNzY0Mjk2MywxNjI4OC4xMDM2NjQyNjU1OAorMzEsVGh1IDI0IEZlYiAxMSwxNzQuMzU2MzMzNjc2NjIyMDYsMjY3LjE1NjI1MTE1MzUxOTYzLDQzOC42OTI2NDYxMzQ1MDY2LDU0Ny41NzkzNzEzNzg2ODA4LDE4MC4yMjc0ODk1NjQ2OTg4Niw4My41MjY4Nzc0OTYyMzUxOSwxNDcuOTI5ODg2NTg3OTk3NiwzMzAuNjQ1NjY5MjkxMzM4NiwyNzUuODI4ODcxNDk5MTc2MywzNjUuMzY1MjI4Mjg1ODg5MSwxODMuNTg2NDQ5ODA4MzQ5NzMsMjE0LjcxODg3ODgzMzkwNTYsMzc1LjY2MDM3NDEzNTEzMjgsOTYuNzk0OTEzMDQxMDA5ODIsMjM3Ljk3NDkwNjM2MjA4NDI1LDExMS4xMzk5NTMwMjUwMjYzMiwyODkuMzYxMjQ5NjA3NzU0MjUsMjI2LjYzMzg5ODg4MTA0MDg0LDIzNC45OTgwOTU2MTk5MjU4MywxOTAuNjM3NzQzNDg5OTMwNzgsMTM2LjI5ODkzODU3NjY0ODY4LDQ2Ljk3MTMxNzQ1MjYwMDg4LDEzNS44Mjg1NjY5ODYxNTA3NSwxNTEuNDE3NjQ0MTEwMjc1NywxMTMuNDY5NDk1MDM2OTUyMjgsNTUuNDUxOTc3NDAxMTI5OTQ1LDQ1MC4yOTI2NTM5NDA0MjkzLDEzOTIuMDg2Mzg5ODcxNTMyMiwzNjUuMjAyNjYzNDczNDAxNSwxMDA5Ljc0MjQyMjkwMzU5NjMsNDI3LjQ4NDA3NzQ5NTA4MTUsMTg5Ljc4NjMwNjQ5OTA2MzkzLDU3LjQ4MDgwOTY4ODk3NDgxLDY0MS42NDk0NTg1MDQwMTIyLDE5MjMuODM3NjE5MzM0MzA4LDE1MDcuMzM5Mjc1NjUxODYyMiwyNjIuNTg3MjQ2ODc2MzQ2NCw3Ni4xMTgwOTI4MjE1MDYzNCwxNzkuNTA1MzcyOTQ1NjM4NCw1OC4wNzA2NjIyNTI1NjUzNTYsMjI0LjMzNDE5MTA1ODIxODA3LDEyNjkuNjc2Njk4MDkwNDAzOCwyMDMuMTk4MDY0MDM1NzQwODgsNTIyLjk0OTQ4NjMwMTM2OTksMjYxLjY0NTY2NTMyMjU4MDY3LDM0Mi4xNDY5NDM0MTU2MDAxLDE2My4zMTkyNDU5OTE4MTU5MywxOTkuMjAxNTgzOTYyMzgwODgsMzYzLjE1OTY1NDIzMzcyNjU0LDI3MC4wNzU0NTczNTg0NDk2LDIxMy4wNTEyMDEyNzUyODc1MywzMDMuNTYwOTU4NDQ4OTcsNDUzLjM1MzM3MjY3NjYzMTIsMzkyLjg1Mzc0MTQ5NjU5ODYsMzIzLjc0NjY1MjMxNjQ3MTg1LDc4Ny4wMTkzMzk5Mjg2NDA5LDI1Ni4zODEwMjkwNjIxODg1LDI3MC41MTkwMTAyNTk1MDUxNCwxMTIuMTEwMjYxNTAzNzE0MzgsMzIyLjczMDg0MzQ4NTc4NjYsMTUzLjU4NTE2NzMwNDM4MzU2LDIzNS4wOTEwNjcyNTM4NDY1NywxMjguNjcwNTMzNDc5MDczMzgsMjUxLjgzNDI3NjA1OTY0ODksNDE2Ljk3MTQ4NTQxMTE0MDYsMjEyLjA5MzI5MDg0NzkzNzcsMTMzLjcyNjM2NDg1NzE0NzI3LDI4OS41NDE4NzE0Mjk2NDA1NCw2My4wNzM3MDEwMzE0MjcwNSwyNzguMjkxMjA2OTgxNzIyNCwxMTEuNjQ0NzQ3NTkwMjYzMDIsNDcuNjM1OTQwNzIwOTMxNTMsNzEuMjUyMTEzMzc2NDI5NjMsMTYyODguMTAzNjY0MjY1NTgKKzMyLEZyaSAyNSBGZWIgMTEsMTc0LjM1NjMzMzY3NjYyMjA2LDI2Ny4xNTYyNTExNTM1MTk2Myw0MzguNjkyNjQ2MTM0NTA2Niw1NDcuNTc5MzcxMzc4NjgwOCwxODAuMjI3NDg5NTY0Njk4ODYsODMuNTI2ODc3NDk2MjM1MTksMTQ3LjkyOTg4NjU4Nzk5NzYsMzMwLjY0NTY2OTI5MTMzODYsMjc1LjgyODg3MTQ5OTE3NjMsMzY1LjM2NTIyODI4NTg4OTEsMTgzLjU4NjQ0OTgwODM0OTczLDIxNC43MTg4Nzg4MzM5MDU2LDM3NS42NjAzNzQxMzUxMzI4LDk2Ljc5NDkxMzA0MTAwOTgyLDIzNy45NzQ5MDYzNjIwODQyNSwxMTEuMTM5OTUzMDI1MDI2MzIsMjg5LjM2MTI0OTYwNzc1NDI1LDIyNi42MzM4OTg4ODEwNDA4NCwyMzQuOTk4MDk1NjE5OTI1ODMsMTkwLjYzNzc0MzQ4OTkzMDc4LDEzNi4yOTg5Mzg1NzY2NDg2OCw0Ni45NzEzMTc0NTI2MDA4OCwxMzUuODI4NTY2OTg2MTUwNzUsMTUxLjQxNzY0NDExMDI3NTcsMTEzLjQ2OTQ5NTAzNjk1MjI4LDU1LjQ1MTk3NzQwMTEyOTk0NSw0NTAuMjkyNjUzOTQwNDI5MywxMzkyLjA4NjM4OTg3MTUzMjIsMzY1LjIwMjY2MzQ3MzQwMTUsMTAwOS43NDI0MjI5MDM1OTYzLDQyNy40ODQwNzc0OTUwODE1LDE4OS43ODYzMDY0OTkwNjM5Myw1Ny40ODA4MDk2ODg5NzQ4MSw2NDEuNjQ5NDU4NTA0MDEyMiwxOTIzLjgzNzYxOTMzNDMwOCwxNTA3LjMzOTI3NTY1MTg2MjIsMjYyLjU4NzI0Njg3NjM0NjQsNzYuMTE4MDkyODIxNTA2MzQsMTc5LjUwNTM3Mjk0NTYzODQsNTguMDcwNjYyMjUyNTY1MzU2LDIyNC4zMzQxOTEwNTgyMTgwNywxMjY5LjY3NjY5ODA5MDQwMzgsMjAzLjE5ODA2NDAzNTc0MDg4LDUyMi45NDk0ODYzMDEzNjk5LDI2MS42NDU2NjUzMjI1ODA2NywzNDIuMTQ2OTQzNDE1NjAwMSwxNjMuMzE5MjQ1OTkxODE1OTMsMTk5LjIwMTU4Mzk2MjM4MDg4LDM2My4xNTk2NTQyMzM3MjY1NCwyNzAuMDc1NDU3MzU4NDQ5NiwyMTMuMDUxMjAxMjc1Mjg3NTMsMzAzLjU2MDk1ODQ0ODk3LDQ1My4zNTMzNzI2NzY2MzEyLDM5Mi44NTM3NDE0OTY1OTg2LDMyMy43NDY2NTIzMTY0NzE4NSw3ODcuMDE5MzM5OTI4NjQwOSwyNTYuMzgxMDI5MDYyMTg4NSwyNzAuNTE5MDEwMjU5NTA1MTQsMTEyLjExMDI2MTUwMzcxNDM4LDMyMi43MzA4NDM0ODU3ODY2LDE1My41ODUxNjczMDQzODM1NiwyMzUuMDkxMDY3MjUzODQ2NTcsMTI4LjY3MDUzMzQ3OTA3MzM4LDI1MS44MzQyNzYwNTk2NDg5LDQxNi45NzE0ODU0MTExNDA2LDIxMi4wOTMyOTA4NDc5Mzc3LDEzMy43MjYzNjQ4NTcxNDcyNywyODkuNTQxODcxNDI5NjQwNTQsNjMuMDczNzAxMDMxNDI3MDUsMjc4LjI5MTIwNjk4MTcyMjQsMTExLjY0NDc0NzU5MDI2MzAyLDQ3LjYzNTk0MDcyMDkzMTUzLDcxLjI1MjExMzM3NjQyOTYzLDE2Mjg4LjEwMzY2NDI2NTU4CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNFSVJfRkRfUmVmZXJlbmNlL2F1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwvaHVtYW4vSW5jaWRlbmNlXzAuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTRUlSX0ZEX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL2h1bWFuL0luY2lkZW5jZV8wLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YjEzOTBjCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTRUlSX0ZEX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL2h1bWFuL0luY2lkZW5jZV8wLmNzdgpAQCAtMCwwICsxLDMzIEBACitpdGVyYXRpb24sdGltZSxzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9ub2RlL3RyYW5zcG9ydC9waXBlL1BITAorMSxUdWUgMjUgSmFuIDExLDAuMAorMixXZWQgMjYgSmFuIDExLDAuMAorMyxUaHUgMjcgSmFuIDExLDAuMAorNCxGcmkgMjggSmFuIDExLDAuMAorNSxTYXQgMjkgSmFuIDExLDAuMAorNixTdW4gMzAgSmFuIDExLDAuMAorNyxNb24gMzEgSmFuIDExLDAuMAorOCxUdWUgMSBGZWIgMTEsMC4wCis5LFdlZCAyIEZlYiAxMSwwLjAKKzEwLFRodSAzIEZlYiAxMSwwLjAKKzExLEZyaSA0IEZlYiAxMSwwLjAKKzEyLFNhdCA1IEZlYiAxMSwwLjAKKzEzLFN1biA2IEZlYiAxMSwwLjAKKzE0LE1vbiA3IEZlYiAxMSwwLjAKKzE1LFR1ZSA4IEZlYiAxMSwwLjAKKzE2LFdlZCA5IEZlYiAxMSwwLjAKKzE3LFRodSAxMCBGZWIgMTEsMC4wCisxOCxGcmkgMTEgRmViIDExLDAuMAorMTksU2F0IDEyIEZlYiAxMSwwLjAKKzIwLFN1biAxMyBGZWIgMTEsMC4wCisyMSxNb24gMTQgRmViIDExLDAuMAorMjIsVHVlIDE1IEZlYiAxMSwwLjAKKzIzLFdlZCAxNiBGZWIgMTEsMC4wCisyNCxUaHUgMTcgRmViIDExLDAuMAorMjUsRnJpIDE4IEZlYiAxMSwwLjAKKzI2LFNhdCAxOSBGZWIgMTEsMC4wCisyNyxTdW4gMjAgRmViIDExLDAuMAorMjgsTW9uIDIxIEZlYiAxMSwwLjAKKzI5LFR1ZSAyMiBGZWIgMTEsMC4wCiszMCxXZWQgMjMgRmViIDExLDAuMAorMzEsVGh1IDI0IEZlYiAxMSwwLjAKKzMyLEZyaSAyNSBGZWIgMTEsMC4wCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNFSVJfRkRfUmVmZXJlbmNlL2F1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwvaHVtYW4vSW5jaWRlbmNlXzEuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTRUlSX0ZEX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL2h1bWFuL0luY2lkZW5jZV8xLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NGMwMjMyCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTRUlSX0ZEX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL2h1bWFuL0luY2lkZW5jZV8xLmNzdgpAQCAtMCwwICsxLDMzIEBACitpdGVyYXRpb24sdGltZSxzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9ub2RlL3RyYW5zcG9ydC9waXBlL1BILTExLHN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL25vZGUvdHJhbnNwb3J0L3BpcGUvUEgtMyxzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9ub2RlL3RyYW5zcG9ydC9waXBlL1BILTcsc3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vbm9kZS90cmFuc3BvcnQvcGlwZS9QSC1OQ1IKKzEsVHVlIDI1IEphbiAxMSwwLjAsMC4wLDAuMCwwLjAKKzIsV2VkIDI2IEphbiAxMSwwLjAsMC4wLDAuMCwwLjAKKzMsVGh1IDI3IEphbiAxMSwwLjAsMC4wLDAuMCwwLjAKKzQsRnJpIDI4IEphbiAxMSwwLjAsMC4wLDAuMCwwLjAKKzUsU2F0IDI5IEphbiAxMSwwLjAsMC4wLDAuMCwwLjAKKzYsU3VuIDMwIEphbiAxMSwwLjAsMC4wLDAuMCwwLjAKKzcsTW9uIDMxIEphbiAxMSwwLjAsMC4wLDAuMCwwLjAKKzgsVHVlIDEgRmViIDExLDAuMCwwLjAsMC4wLDAuMAorOSxXZWQgMiBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wCisxMCxUaHUgMyBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wCisxMSxGcmkgNCBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wCisxMixTYXQgNSBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wCisxMyxTdW4gNiBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wCisxNCxNb24gNyBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wCisxNSxUdWUgOCBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wCisxNixXZWQgOSBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wCisxNyxUaHUgMTAgRmViIDExLDAuMCwwLjAsMC4wLDAuMAorMTgsRnJpIDExIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAKKzE5LFNhdCAxMiBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wCisyMCxTdW4gMTMgRmViIDExLDAuMCwwLjAsMC4wLDAuMAorMjEsTW9uIDE0IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAKKzIyLFR1ZSAxNSBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wCisyMyxXZWQgMTYgRmViIDExLDAuMCwwLjAsMC4wLDAuMAorMjQsVGh1IDE3IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAKKzI1LEZyaSAxOCBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wCisyNixTYXQgMTkgRmViIDExLDAuMCwwLjAsMC4wLDAuMAorMjcsU3VuIDIwIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAKKzI4LE1vbiAyMSBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wCisyOSxUdWUgMjIgRmViIDExLDAuMCwwLjAsMC4wLDAuMAorMzAsV2VkIDIzIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAKKzMxLFRodSAyNCBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wCiszMixGcmkgMjUgRmViIDExLDAuMCwwLjAsMC4wLDAuMApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTRUlSX0ZEX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL2h1bWFuL0luY2lkZW5jZV8yLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0VJUl9GRF9SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9odW1hbi9JbmNpZGVuY2VfMi5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTMwZDZlMQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0VJUl9GRF9SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9odW1hbi9JbmNpZGVuY2VfMi5jc3YKQEAgLTAsMCArMSwzMyBAQAoraXRlcmF0aW9uLHRpbWUsUEgtMS1HNjQwMDAxLFBILTEtRzY0MDAwMixQSC0xLUc2NDAwMDMsUEgtMS1HNjQwMDA0LFBILTEwLUc2NTAwMDEsUEgtMTAtRzY1MDAwMixQSC0xMC1HNjUwMDAzLFBILTEwLUc2NTAwMDQsUEgtMTAtRzY1MDAwNSxQSC0xMC1HNjUwMDA2LFBILTEwLUc2NTAwMDcsUEgtMTEtRzY2MDAwMSxQSC0xMS1HNjYwMDAyLFBILTExLUc2NjAwMDMsUEgtMTEtRzY2MDAwNCxQSC0xMS1HNjYwMDA1LFBILTEyLUc2NzAwMDEsUEgtMTItRzY3MDAwMixQSC0xMi1HNjcwMDAzLFBILTEyLUc2NzAwMDQsUEgtMTItRzY3MDAwNSxQSC0yLUc2ODAwMDEsUEgtMi1HNjgwMDAyLFBILTItRzY4MDAwMyxQSC0yLUc2ODAwMDQsUEgtMi1HNjgwMDA1LFBILTMtRzY5MDAwMSxQSC0zLUc2OTAwMDIsUEgtMy1HNjkwMDAzLFBILTMtRzY5MDAwNCxQSC0zLUc2OTAwMDUsUEgtMy1HNjkwMDA2LFBILTQtRzcwMDAwMSxQSC00LUc3MDAwMDIsUEgtNC1HNzAwMDAzLFBILTQtRzcwMDAwNCxQSC00LUc3MDAwMDUsUEgtNC1HNzAwMDA2LFBILTQtRzcwMDAwNyxQSC00LUc3MDAwMDgsUEgtNC1HNzAwMDA5LFBILTQtRzcwMDAxMCxQSC00LUc3MDAwMTEsUEgtNS1HNzEwMDAxLFBILTUtRzcxMDAwMixQSC01LUc3MTAwMDMsUEgtNS1HNzEwMDA0LFBILTUtRzcxMDAwNSxQSC01LUc3MTAwMDYsUEgtNi1HNzIwMDAxLFBILTYtRzcyMDAwMixQSC02LUc3MjAwMDMsUEgtNi1HNzIwMDA0LFBILTYtRzcyMDAwNSxQSC03LUc3MzAwMDEsUEgtNy1HNzMwMDAyLFBILTctRzczMDAwMyxQSC03LUc3MzAwMDQsUEgtOC1HNzQwMDAxLFBILTgtRzc0MDAwMixQSC04LUc3NDAwMDMsUEgtOC1HNzQwMDA0LFBILTgtRzc0MDAwNSxQSC05LUc3NTAwMDEsUEgtOS1HNzUwMDAyLFBILTktRzc1MDAwMyxQSC05LUc3NTAwMDQsUEgtOS1HNzUwMDA1LFBILUNBUi1HMjMwMDAxLFBILUNBUi1HMjMwMDAyLFBILUNBUi1HMjMwMDAzLFBILUNBUi1HMjMwMDA0LFBILUNBUi1HMjMwMDA1LFBILU5DUi1HNTIwMDAxCisxLFR1ZSAyNSBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMixXZWQgMjYgSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzMsVGh1IDI3IEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCis0LEZyaSAyOCBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorNSxTYXQgMjkgSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzYsU3VuIDMwIEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCis3LE1vbiAzMSBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorOCxUdWUgMSBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorOSxXZWQgMiBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTAsVGh1IDMgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzExLEZyaSA0IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxMixTYXQgNSBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTMsU3VuIDYgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzE0LE1vbiA3IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxNSxUdWUgOCBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTYsV2VkIDkgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzE3LFRodSAxMCBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTgsRnJpIDExIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxOSxTYXQgMTIgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzIwLFN1biAxMyBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjEsTW9uIDE0IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyMixUdWUgMTUgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzIzLFdlZCAxNiBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjQsVGh1IDE3IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyNSxGcmkgMTggRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzI2LFNhdCAxOSBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjcsU3VuIDIwIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyOCxNb24gMjEgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzI5LFR1ZSAyMiBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMzAsV2VkIDIzIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCiszMSxUaHUgMjQgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzMyLEZyaSAyNSBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTRUlSX0ZEX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL3J1bnBhcmFtZXRlcnMuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTRUlSX0ZEX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL3J1bnBhcmFtZXRlcnMuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA2ODU1YjUKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNFSVJfRkRfUmVmZXJlbmNlL2F1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwvcnVucGFyYW1ldGVycy5jc3YKQEAgLTAsMCArMSwyIEBACitwb3B1bGF0aW9uSWRlbnRpZmllcixuYW1lLHRhcmdldElTT0tleSxiaXJ0aFJhdGUsZGVhdGhSYXRlLHRpbWVQZXJpb2QKK2h1bWFuLGF1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwsLDAuMCwwLjAsODY0MDAwMDAKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNFSVJfUktfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL0Rpc2Vhc2UgRGVhdGhzXzAuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTRUlSX1JLX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9EaXNlYXNlIERlYXRoc18wLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YjEzOTBjCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTRUlSX1JLX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9EaXNlYXNlIERlYXRoc18wLmNzdgpAQCAtMCwwICsxLDMzIEBACitpdGVyYXRpb24sdGltZSxzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9ub2RlL3RyYW5zcG9ydC9waXBlL1BITAorMSxUdWUgMjUgSmFuIDExLDAuMAorMixXZWQgMjYgSmFuIDExLDAuMAorMyxUaHUgMjcgSmFuIDExLDAuMAorNCxGcmkgMjggSmFuIDExLDAuMAorNSxTYXQgMjkgSmFuIDExLDAuMAorNixTdW4gMzAgSmFuIDExLDAuMAorNyxNb24gMzEgSmFuIDExLDAuMAorOCxUdWUgMSBGZWIgMTEsMC4wCis5LFdlZCAyIEZlYiAxMSwwLjAKKzEwLFRodSAzIEZlYiAxMSwwLjAKKzExLEZyaSA0IEZlYiAxMSwwLjAKKzEyLFNhdCA1IEZlYiAxMSwwLjAKKzEzLFN1biA2IEZlYiAxMSwwLjAKKzE0LE1vbiA3IEZlYiAxMSwwLjAKKzE1LFR1ZSA4IEZlYiAxMSwwLjAKKzE2LFdlZCA5IEZlYiAxMSwwLjAKKzE3LFRodSAxMCBGZWIgMTEsMC4wCisxOCxGcmkgMTEgRmViIDExLDAuMAorMTksU2F0IDEyIEZlYiAxMSwwLjAKKzIwLFN1biAxMyBGZWIgMTEsMC4wCisyMSxNb24gMTQgRmViIDExLDAuMAorMjIsVHVlIDE1IEZlYiAxMSwwLjAKKzIzLFdlZCAxNiBGZWIgMTEsMC4wCisyNCxUaHUgMTcgRmViIDExLDAuMAorMjUsRnJpIDE4IEZlYiAxMSwwLjAKKzI2LFNhdCAxOSBGZWIgMTEsMC4wCisyNyxTdW4gMjAgRmViIDExLDAuMAorMjgsTW9uIDIxIEZlYiAxMSwwLjAKKzI5LFR1ZSAyMiBGZWIgMTEsMC4wCiszMCxXZWQgMjMgRmViIDExLDAuMAorMzEsVGh1IDI0IEZlYiAxMSwwLjAKKzMyLEZyaSAyNSBGZWIgMTEsMC4wCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNFSVJfUktfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL0Rpc2Vhc2UgRGVhdGhzXzEuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTRUlSX1JLX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9EaXNlYXNlIERlYXRoc18xLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NGMwMjMyCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTRUlSX1JLX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9EaXNlYXNlIERlYXRoc18xLmNzdgpAQCAtMCwwICsxLDMzIEBACitpdGVyYXRpb24sdGltZSxzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9ub2RlL3RyYW5zcG9ydC9waXBlL1BILTExLHN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL25vZGUvdHJhbnNwb3J0L3BpcGUvUEgtMyxzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9ub2RlL3RyYW5zcG9ydC9waXBlL1BILTcsc3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vbm9kZS90cmFuc3BvcnQvcGlwZS9QSC1OQ1IKKzEsVHVlIDI1IEphbiAxMSwwLjAsMC4wLDAuMCwwLjAKKzIsV2VkIDI2IEphbiAxMSwwLjAsMC4wLDAuMCwwLjAKKzMsVGh1IDI3IEphbiAxMSwwLjAsMC4wLDAuMCwwLjAKKzQsRnJpIDI4IEphbiAxMSwwLjAsMC4wLDAuMCwwLjAKKzUsU2F0IDI5IEphbiAxMSwwLjAsMC4wLDAuMCwwLjAKKzYsU3VuIDMwIEphbiAxMSwwLjAsMC4wLDAuMCwwLjAKKzcsTW9uIDMxIEphbiAxMSwwLjAsMC4wLDAuMCwwLjAKKzgsVHVlIDEgRmViIDExLDAuMCwwLjAsMC4wLDAuMAorOSxXZWQgMiBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wCisxMCxUaHUgMyBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wCisxMSxGcmkgNCBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wCisxMixTYXQgNSBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wCisxMyxTdW4gNiBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wCisxNCxNb24gNyBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wCisxNSxUdWUgOCBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wCisxNixXZWQgOSBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wCisxNyxUaHUgMTAgRmViIDExLDAuMCwwLjAsMC4wLDAuMAorMTgsRnJpIDExIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAKKzE5LFNhdCAxMiBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wCisyMCxTdW4gMTMgRmViIDExLDAuMCwwLjAsMC4wLDAuMAorMjEsTW9uIDE0IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAKKzIyLFR1ZSAxNSBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wCisyMyxXZWQgMTYgRmViIDExLDAuMCwwLjAsMC4wLDAuMAorMjQsVGh1IDE3IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAKKzI1LEZyaSAxOCBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wCisyNixTYXQgMTkgRmViIDExLDAuMCwwLjAsMC4wLDAuMAorMjcsU3VuIDIwIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAKKzI4LE1vbiAyMSBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wCisyOSxUdWUgMjIgRmViIDExLDAuMCwwLjAsMC4wLDAuMAorMzAsV2VkIDIzIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAKKzMxLFRodSAyNCBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wCiszMixGcmkgMjUgRmViIDExLDAuMCwwLjAsMC4wLDAuMApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTRUlSX1JLX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9EaXNlYXNlIERlYXRoc18yLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0VJUl9SS19SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vRGlzZWFzZSBEZWF0aHNfMi5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTMwZDZlMQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0VJUl9SS19SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vRGlzZWFzZSBEZWF0aHNfMi5jc3YKQEAgLTAsMCArMSwzMyBAQAoraXRlcmF0aW9uLHRpbWUsUEgtMS1HNjQwMDAxLFBILTEtRzY0MDAwMixQSC0xLUc2NDAwMDMsUEgtMS1HNjQwMDA0LFBILTEwLUc2NTAwMDEsUEgtMTAtRzY1MDAwMixQSC0xMC1HNjUwMDAzLFBILTEwLUc2NTAwMDQsUEgtMTAtRzY1MDAwNSxQSC0xMC1HNjUwMDA2LFBILTEwLUc2NTAwMDcsUEgtMTEtRzY2MDAwMSxQSC0xMS1HNjYwMDAyLFBILTExLUc2NjAwMDMsUEgtMTEtRzY2MDAwNCxQSC0xMS1HNjYwMDA1LFBILTEyLUc2NzAwMDEsUEgtMTItRzY3MDAwMixQSC0xMi1HNjcwMDAzLFBILTEyLUc2NzAwMDQsUEgtMTItRzY3MDAwNSxQSC0yLUc2ODAwMDEsUEgtMi1HNjgwMDAyLFBILTItRzY4MDAwMyxQSC0yLUc2ODAwMDQsUEgtMi1HNjgwMDA1LFBILTMtRzY5MDAwMSxQSC0zLUc2OTAwMDIsUEgtMy1HNjkwMDAzLFBILTMtRzY5MDAwNCxQSC0zLUc2OTAwMDUsUEgtMy1HNjkwMDA2LFBILTQtRzcwMDAwMSxQSC00LUc3MDAwMDIsUEgtNC1HNzAwMDAzLFBILTQtRzcwMDAwNCxQSC00LUc3MDAwMDUsUEgtNC1HNzAwMDA2LFBILTQtRzcwMDAwNyxQSC00LUc3MDAwMDgsUEgtNC1HNzAwMDA5LFBILTQtRzcwMDAxMCxQSC00LUc3MDAwMTEsUEgtNS1HNzEwMDAxLFBILTUtRzcxMDAwMixQSC01LUc3MTAwMDMsUEgtNS1HNzEwMDA0LFBILTUtRzcxMDAwNSxQSC01LUc3MTAwMDYsUEgtNi1HNzIwMDAxLFBILTYtRzcyMDAwMixQSC02LUc3MjAwMDMsUEgtNi1HNzIwMDA0LFBILTYtRzcyMDAwNSxQSC03LUc3MzAwMDEsUEgtNy1HNzMwMDAyLFBILTctRzczMDAwMyxQSC03LUc3MzAwMDQsUEgtOC1HNzQwMDAxLFBILTgtRzc0MDAwMixQSC04LUc3NDAwMDMsUEgtOC1HNzQwMDA0LFBILTgtRzc0MDAwNSxQSC05LUc3NTAwMDEsUEgtOS1HNzUwMDAyLFBILTktRzc1MDAwMyxQSC05LUc3NTAwMDQsUEgtOS1HNzUwMDA1LFBILUNBUi1HMjMwMDAxLFBILUNBUi1HMjMwMDAyLFBILUNBUi1HMjMwMDAzLFBILUNBUi1HMjMwMDA0LFBILUNBUi1HMjMwMDA1LFBILU5DUi1HNTIwMDAxCisxLFR1ZSAyNSBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMixXZWQgMjYgSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzMsVGh1IDI3IEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCis0LEZyaSAyOCBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorNSxTYXQgMjkgSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzYsU3VuIDMwIEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCis3LE1vbiAzMSBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorOCxUdWUgMSBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorOSxXZWQgMiBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTAsVGh1IDMgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzExLEZyaSA0IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxMixTYXQgNSBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTMsU3VuIDYgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzE0LE1vbiA3IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxNSxUdWUgOCBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTYsV2VkIDkgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzE3LFRodSAxMCBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTgsRnJpIDExIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxOSxTYXQgMTIgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzIwLFN1biAxMyBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjEsTW9uIDE0IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyMixUdWUgMTUgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzIzLFdlZCAxNiBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjQsVGh1IDE3IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyNSxGcmkgMTggRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzI2LFNhdCAxOSBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjcsU3VuIDIwIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyOCxNb24gMjEgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzI5LFR1ZSAyMiBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMzAsV2VkIDIzIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCiszMSxUaHUgMjQgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzMyLEZyaSAyNSBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTRUlSX1JLX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9FXzAuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTRUlSX1JLX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9FXzAuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJkYjM5M2EKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNFSVJfUktfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL0VfMC5jc3YKQEAgLTAsMCArMSwzMyBAQAoraXRlcmF0aW9uLHRpbWUsc3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vbm9kZS90cmFuc3BvcnQvcGlwZS9QSEwKKzEsVHVlIDI1IEphbiAxMSwwLjAKKzIsV2VkIDI2IEphbiAxMSwwLjA2MTIxNDkzNTk3NzEwNTYKKzMsVGh1IDI3IEphbiAxMSw3LjM1MTUzMjU5MTk2ODYyODUKKzQsRnJpIDI4IEphbiAxMSw1MjguNjMyNDIzNTQ3MjgzCis1LFNhdCAyOSBKYW4gMTEsMjAyMjEuNzc0ODY5Mzk5MDg3Cis2LFN1biAzMCBKYW4gMTEsMzE4MTAuNzg3NTg3NDMxNTE4Cis3LE1vbiAzMSBKYW4gMTEsMjEzNzEuMDc2MjI4Mjk0ODUKKzgsVHVlIDEgRmViIDExLDE0NTE1LjU1MDg0NTE5NTUwNQorOSxXZWQgMiBGZWIgMTEsOTg4My4yMDgwNTI3OTU4NjgKKzEwLFRodSAzIEZlYiAxMSw2NzE4LjA2ODQ2Mzg5Mzc1NgorMTEsRnJpIDQgRmViIDExLDQ1NTUuOTExNTMzNjI5NzA5CisxMixTYXQgNSBGZWIgMTEsMzA4My4wNDkyMzg0NzE1MzM1CisxMyxTdW4gNiBGZWIgMTEsMjA4Mi42NDc1MTUyMjY3OTAzCisxNCxNb24gNyBGZWIgMTEsMTQwNC44MzQ5NjU0MjI0OTk5CisxNSxUdWUgOCBGZWIgMTEsOTQ2LjUyMzM5MDcwMTMxMzYKKzE2LFdlZCA5IEZlYiAxMSw2MzcuMTM0NDQxNzQ4NjEwMQorMTcsVGh1IDEwIEZlYiAxMSw0MjguNTUwNzQzMTg3NTExNQorMTgsRnJpIDExIEZlYiAxMSwyODguMDg3NjgxNDM4MjI3OAorMTksU2F0IDEyIEZlYiAxMSwxOTMuNTczMDI0NDA5NTQ0MjUKKzIwLFN1biAxMyBGZWIgMTEsMTMwLjAxMzUwNjM3MzEyODQ4CisyMSxNb24gMTQgRmViIDExLDg3LjI5NzMxNjg3NDk1MDI0CisyMixUdWUgMTUgRmViIDExLDU4LjU5NjkxOTg4NzMwODAzCisyMyxXZWQgMTYgRmViIDExLDM5LjMyODE2ODg3MDY5NTI2NQorMjQsVGh1IDE3IEZlYiAxMSwyNi4zODgwNjY0MTY1NDg4NworMjUsRnJpIDE4IEZlYiAxMSwxNy43MDE3OTMxMzc2NjI3NDcKKzI2LFNhdCAxOSBGZWIgMTEsMTEuODcyODc5NTQxOTExMzA0CisyNyxTdW4gMjAgRmViIDExLDcuOTYyMzUzNjMwMzc4ODgyCisyOCxNb24gMjEgRmViIDExLDUuMzM5MzI4MzE0NzExMjYyCisyOSxUdWUgMjIgRmViIDExLDMuNTgwMTUyMDA3MjcxMjYyNworMzAsV2VkIDIzIEZlYiAxMSwyLjQwMDQ1NDMyNTA3NjcxMDMKKzMxLFRodSAyNCBGZWIgMTEsMS42MDk0MTU1NDE2ODk3NDY0CiszMixGcmkgMjUgRmViIDExLDEuMDc5MDIxMDk2NDA1NjY2MQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTRUlSX1JLX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9FXzEuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTRUlSX1JLX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9FXzEuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU3NDg4MWUKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNFSVJfUktfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL0VfMS5jc3YKQEAgLTAsMCArMSwzMyBAQAoraXRlcmF0aW9uLHRpbWUsc3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vbm9kZS90cmFuc3BvcnQvcGlwZS9QSC0xMSxzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9ub2RlL3RyYW5zcG9ydC9waXBlL1BILTMsc3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vbm9kZS90cmFuc3BvcnQvcGlwZS9QSC03LHN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL25vZGUvdHJhbnNwb3J0L3BpcGUvUEgtTkNSCisxLFR1ZSAyNSBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wCisyLFdlZCAyNiBKYW4gMTEsNC40ODgzNjY3NTIwODk0NjdFLTYsMi45NDIxODMyNTEyNjE0MjQzRS00LDAuMDAxMTM5MDM1MjMwMDM5Njg5OCwwLjI5MDE5OTYzOTQxNzE0MTUKKzMsVGh1IDI3IEphbiAxMSw5LjU2OTc5NTM5MzYyOTM4N0UtNCwwLjA2NDM3OTcxMDA3Mjg5Njc4LDAuMjQyODY5NTA1ODk3MTgyMzcsMTguNjczOTE1NjQ5MDU4NzYKKzQsRnJpIDI4IEphbiAxMSwwLjA5MTU1MzY5NTMzMTE4Nzc1LDYuMjU1MDI4NjY3MzE5MTI1LDIzLjIzNzEyNzUzMTUyNTgxOCw5NjUuNjMzMjk1Mjg4NzIzNworNSxTYXQgMjkgSmFuIDExLDUuMzMzMTIyMDc0MDk3ODMxLDM1My4yNTQ1NDczMTE4NDE0NiwxMzUzLjczMTgwOTQwMDkxNzksMjMxNjIuNjI1OTQzMDcwNTEKKzYsU3VuIDMwIEphbiAxMSwyMC41NjQxNzMwOTIwMjE1NDQsMTAwMS4xNzk3NzExNDM3NjA3LDUyMjIuMDI4OTIwODA1ODYyLDI1OTA0Ljk0NTg1MDgzMjA0Cis3LE1vbiAzMSBKYW4gMTEsMTYuNjU4MjAyODQwNjE5MzU3LDY2OC41OTkxMjI5OTE2NjMsNDI5My4yMDMwMTY1MTI3MjUsMTczNTguMDI3OTM4Nzk2MjA0Cis4LFR1ZSAxIEZlYiAxMSwxNC4zMDc5MDEwOTU2MTQxNyw0NDguMDIxNDM3MjIxODQ0NzQsMzM3My40NDIyNDE0NTA0MzQ3LDExNjY0LjkxNTczNTczNDI5NworOSxXZWQgMiBGZWIgMTEsMTIuODA4NDc3MTMyNjQzOTM3LDMwMS42MjU5OTk4NTY2OTA5NSwyMzYyLjczMzg3MTA4OTAxOCw3ODY1LjQzNzg4NTc0NTYxNAorMTAsVGh1IDMgRmViIDExLDkuNDUxMTI4MDAzNDgyNjIzLDIwMy4zOTc4NDE5ODM2NTY5MiwxNjEyLjQxNTMwMDczNDY5MzMsNTMwOS42MTk5MjUxOTA4MgorMTEsRnJpIDQgRmViIDExLDYuNTM5ODA0NDE2ODE5OTY3LDEzNy4xNTI1MDgyOTQ2MjMxLDEwOTAuMjQ4MzAxMjQzMzc4OCwzNTgzLjI3OTYwNDM2NTA1MgorMTIsU2F0IDUgRmViIDExLDQuNDM4NDIzMTUyODM3NzM2LDkyLjQyMDI1ODg5MTIyNzk1LDczNC40OTA0MDY1MDMxNDU5LDI0MTYuMjI1MTg3NDQ0Nzk5MworMTMsU3VuIDYgRmViIDExLDIuOTkxNDc1MDAyMjYxOTMwNSw2Mi4yMjY4ODE3NjUxMjY0MTQsNDk0LjAwMDAwNTQ5ODQzMTA1LDE2MjcuNzY3NTAwMDg5NzMyMworMTQsTW9uIDcgRmViIDExLDIuMDEwOTM5MTk1ODkyMzkyLDQxLjg2NTcyOTg5MjUwMzcsMzMxLjk1NTQ2ODQ5OTMwOTA2LDEwOTUuNjY3NDQzNTU3MzM2NAorMTUsVHVlIDggRmViIDExLDEuMzUwMzI0NTMyNDg2NDI1LDI4LjE0ODU2NDAxMTM4Nzk3NSwyMjIuOTM5NTQ2MDI1NjU4MTMsNzM2Ljk3MzMwNDgzNTExMjUKKzE2LFdlZCA5IEZlYiAxMSwwLjkwNjI1NzA1MjI3NTUwODYsMTguOTE1NTI1MzE2MjU1MTksMTQ5LjY2NDU2OTQ4MjY1MTQsNDk1LjQxMDM2MzU3MzM4MTgKKzE3LFRodSAxMCBGZWIgMTEsMC42MDgwNDc1Mzk1NDc2NTU3LDEyLjcwNTM2OTYxODM1MDE1LDEwMC40NDIzMTk1MzMwMDQwNSwzMzIuODYzMTIzMTI3ODEzNQorMTgsRnJpIDExIEZlYiAxMSwwLjQwNzg5MTg5NzE4OTY2OTksOC41MzExNzM2MzQyNzcyODIsNjcuMzkyOTMxMzUxOTY5NzYsMjIzLjU2NTQ1NDg1MjM2ODI1CisxOSxTYXQgMTIgRmViIDExLDAuMjczNTg2OTI4NDg4MTM1NDMsNS43MjY3NzA1NDYwODU2NjksNDUuMjA5NjAwMjA5NzQ3MiwxNTAuMTEwODYxMzAzMjc5ODIKKzIwLFN1biAxMyBGZWIgMTEsMC4xODM0ODQwNjk1MzQ4OTc2LDMuODQzMzA5MDIzMjMwMDM4LDMwLjMyMzI4NTMyMjkxNDY2NCwxMDAuNzYzNzYyNTEyMTgxOTEKKzIxLE1vbiAxNCBGZWIgMTEsMC4xMjMwNDU4NTg3NTY1NzMxMiwyLjU3ODgyNjk4MDczODA2NDQsMjAuMzM2MDk2NjY1NzcxOTU0LDY3LjYyNTcwOTY3MTI0OTc3CisyMixUdWUgMTUgRmViIDExLDAuMDgyNTA4Njk3NDQwOTkwMzUsMS43MzAwMzk0NDk5NjgzNTA1LDEzLjYzNjUyNDcwODk1NTk1MSw0NS4zNzYyMzAyODkwMjEyNDQKKzIzLFdlZCAxNiBGZWIgMTEsMC4wNTUzMjQ4ODQ0Njg1NzE2ODYsMS4xNjA1NDYyMTg1ODk4NDc2LDkuMTQzNTMyMjM0OTMwMTk1LDMwLjQ0NTI2Nzg0NzU1MTM4NQorMjQsVGh1IDE3IEZlYiAxMSwwLjAzNzA5NDQ1MDA1MzAwNjMxLDAuNzc4MzgzNjM2MjkzODU2Myw2LjEzMDIwMzE1MjczMjA5NSwyMC40MjM0MjgwOTE0NTA0MgorMjUsRnJpIDE4IEZlYiAxMSwwLjAyNDg2OTgzOTQ5NjAzMzQzNCwwLjUyMTk5NzM4OTkxNjA2OTksNC4xMDk1OTAwMDQ2MDE2ODksMTMuNjk4NTcyNTA3NjA5NAorMjYsU2F0IDE5IEZlYiAxMSwwLjAxNjY3MzE4ODE1NDU0MjY3LDAuMzUwMDI2MDAyMDk2MTU0NCwyLjc1NDgyNTMzMzgwNDk3Niw5LjE4NzAzMDIxNzU2MzQ5MworMjcsU3VuIDIwIEZlYiAxMSwwLjAxMTE3NzY0ODk4NjEyNTk0NywwLjIzNDY5MzAwMTQxOTg0ODA5LDEuODQ2NTgxNTgwNTI2MjM5Niw2LjE2MDgzNjM2OTc1NTc0NgorMjgsTW9uIDIxIEZlYiAxMSwwLjAwNzQ5MzI3NzkwMDEyMzE3NywwLjE1NzM1MzI1OTU1OTAwNTU2LDEuMjM3NzMzMDkwMDMyMDEzOCw0LjEzMTIxMzAxMDMwMTUwOAorMjksVHVlIDIyIEZlYiAxMSwwLjAwNTAyMzI1NjI5MTkwODA5MiwwLjEwNTQ5NTI5MzkxODQ1MDExLDAuODI5NjA5MDk0MTQ2MzE3MSwyLjc3MDA5OTg5MTk5NDI1OQorMzAsV2VkIDIzIEZlYiAxMSwwLjAwMzM2NzM4NTk1NjYzMTc0OSwwLjA3MDcyNTYwMzQ2MTY2ODk4LDAuNTU2MDQ2MzE2MDc1MzI1LDEuODU3MzY4NzMwMDgwNDAzMgorMzEsVGh1IDI0IEZlYiAxMSwwLjAwMjI1NzMzNDgwNDM4MjQ1NywwLjA0NzQxNDM1NjA0NTQxNjk0LDAuMzcyNjg0NzUyNjQxMDE5MzYsMS4yNDUzNDQxOTQwMzMzNzE4CiszMixGcmkgMjUgRmViIDExLDAuMDAxNTEzMTk3NzMxMzM3MjY1LDAuMDMxNzg1OTUyMDQxNTU2MzUsMC4yNDk3ODU0NjI3ODE0MzIyNCwwLjgzNDk3MjI0ODM3ODgxNjkKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0VJUl9SS19SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vRV8yLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0VJUl9SS19SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vRV8yLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wOWMyZDliCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTRUlSX1JLX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9FXzIuY3N2CkBAIC0wLDAgKzEsMzMgQEAKK2l0ZXJhdGlvbix0aW1lLFBILTEtRzY0MDAwMSxQSC0xLUc2NDAwMDIsUEgtMS1HNjQwMDAzLFBILTEtRzY0MDAwNCxQSC0xMC1HNjUwMDAxLFBILTEwLUc2NTAwMDIsUEgtMTAtRzY1MDAwMyxQSC0xMC1HNjUwMDA0LFBILTEwLUc2NTAwMDUsUEgtMTAtRzY1MDAwNixQSC0xMC1HNjUwMDA3LFBILTExLUc2NjAwMDEsUEgtMTEtRzY2MDAwMixQSC0xMS1HNjYwMDAzLFBILTExLUc2NjAwMDQsUEgtMTEtRzY2MDAwNSxQSC0xMi1HNjcwMDAxLFBILTEyLUc2NzAwMDIsUEgtMTItRzY3MDAwMyxQSC0xMi1HNjcwMDA0LFBILTEyLUc2NzAwMDUsUEgtMi1HNjgwMDAxLFBILTItRzY4MDAwMixQSC0yLUc2ODAwMDMsUEgtMi1HNjgwMDA0LFBILTItRzY4MDAwNSxQSC0zLUc2OTAwMDEsUEgtMy1HNjkwMDAyLFBILTMtRzY5MDAwMyxQSC0zLUc2OTAwMDQsUEgtMy1HNjkwMDA1LFBILTMtRzY5MDAwNixQSC00LUc3MDAwMDEsUEgtNC1HNzAwMDAyLFBILTQtRzcwMDAwMyxQSC00LUc3MDAwMDQsUEgtNC1HNzAwMDA1LFBILTQtRzcwMDAwNixQSC00LUc3MDAwMDcsUEgtNC1HNzAwMDA4LFBILTQtRzcwMDAwOSxQSC00LUc3MDAwMTAsUEgtNC1HNzAwMDExLFBILTUtRzcxMDAwMSxQSC01LUc3MTAwMDIsUEgtNS1HNzEwMDAzLFBILTUtRzcxMDAwNCxQSC01LUc3MTAwMDUsUEgtNS1HNzEwMDA2LFBILTYtRzcyMDAwMSxQSC02LUc3MjAwMDIsUEgtNi1HNzIwMDAzLFBILTYtRzcyMDAwNCxQSC02LUc3MjAwMDUsUEgtNy1HNzMwMDAxLFBILTctRzczMDAwMixQSC03LUc3MzAwMDMsUEgtNy1HNzMwMDA0LFBILTgtRzc0MDAwMSxQSC04LUc3NDAwMDIsUEgtOC1HNzQwMDAzLFBILTgtRzc0MDAwNCxQSC04LUc3NDAwMDUsUEgtOS1HNzUwMDAxLFBILTktRzc1MDAwMixQSC05LUc3NTAwMDMsUEgtOS1HNzUwMDA0LFBILTktRzc1MDAwNSxQSC1DQVItRzIzMDAwMSxQSC1DQVItRzIzMDAwMixQSC1DQVItRzIzMDAwMyxQSC1DQVItRzIzMDAwNCxQSC1DQVItRzIzMDAwNSxQSC1OQ1ItRzUyMDAwMQorMSxUdWUgMjUgSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzIsV2VkIDI2IEphbiAxMSwzLjc3NTQwNzUzOTQ2NTE1NjdFLTEwLDUuNDY0Njc2NDk4ODc0MzQ1NkUtOCw4LjE3NzY2ODE0OTA3OTA3M0UtOCw2Ljk2NzI4MzY2NTc0NDM0NkUtNiwxLjMxMDQwNDU4OTU2MzE1NTVFLTE0LDguOTgzMTc1Mzc2NzAzNTQxRS0xMywyLjkxNTEwNjYwNjMwNDc5MTNFLTEwLDAuMCw5LjkyMzIxNTM2MjgzODU0OEUtMjEsMS4yMjM5NzEyNTk5NTMzNjg1RS0xNCw5LjcyMTU1NTQ3OTU4ODExM0UtMTksOC43NjU5NTc5ODA5ODk2NDNFLTExLDUuMDcxMDgzNzMyMDYzMDVFLTcsNC4yMTc3MTcxNDIxMTc0Mzc1RS0xNSw4LjkyNDIyNTc0MjEzMTQ5MkUtMTEsNC4xNzk5NDgzMzUwNTUyMjRFLTE1LDIuNzI4Mzg0NjM4MTc0MDk2RS0xMyw3LjAxMTIzMTMyMzY3MjY2M0UtMTMsMS41NjYzNTYxNDQyMTUyODEyRS0xMiw3LjYzMzI1NTY3MzczODExM0UtMTEsNy42NjgzNDAxNTgwMDExOEUtMTEsMC4wLDguNzc0NzU3NjU3ODY1MDc0RS04LDAuMDAxNjI1NzcxNzAyMjgwMjEyNSwwLjAwMTc3NDM4NjgyNjM3NjM3MzgsMC4wMDQyODE0ODI4OTIzMTE3Niw3LjEyNTk3MjY2MTQxMjM1M0UtNCwzMS45NTkyMzUzNTY0NTA3NywwLjA0NDk5NDUyNTQwMjE4MDQ0LDEuNTk0MTY2MTYzOTUwMDIyNCwwLjAwMTA3NDQyMTE0MjYxNDY3NTQsNi40NTkwOTEyMzEzNDExMjhFLTQsMC4yMzQxMzUwMDQ5NDY5MDI3OSwwLjA0NjQ3MTI1MDE4NTM1MjYyLDE2LjA3MDQzNzMwMDI2NDM2LDE1LjcwNDIzNzE0MzgzNDA3OCwwLjAsMC4wLDAuMCwwLjAsMS40Mzk5NjI5MjAxMTk4NTgzLDI3Ljc4MDgyMjE4NTQyMjA1NywwLjAsMS41NzIxNTU4MTUzODY5NTVFLTgsMS42Mzg1MDY2NTY4MTI3NjNFLTQsMS42NDE0NTA5Mzk1NDU0NzAzRS00LDAuMCwwLjAsMi4wNTM5NTkyOTk4MjIzNTNFLTEyLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDEuMjg3Nzc1MDEzNjk4NDM1RS00LDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCw5LjkyNjkyMDQ0MTM3MzEzM0UtMjEsNS4xMTU4MjA4OTUwMDA3ODlFLTE2LDEuODYxMDExNzM1MjI3MjM5N0UtOSwxLjE5NjI5MjAwMTgyMDk3MDJFLTUsMS42NDYxOTU3MzQ2NDYwNDgyRS01LDguNTg2MTAwNjUzNTc2MjkyRS04LDEuMTUxNjk1NjM3MjY3MTU1OEUtNiwyMzMuMzE4MTU4ODk1OTgxNjcKKzMsVGh1IDI3IEphbiAxMSwyLjA0MzA5NTUxNzI4MjI0NkUtNiwxLjQ5NDA2MzI2MDU1ODMyRS00LDIuMTM1NjQ2MTEwODQxMjk3N0UtNCwwLjAwMzgxMTc1Nzg1NjI3NjE1NjYsNC41NjA1NjY4NTcwNTY5MjAzRS0xMSwyLjE3MjAwMTUxNjQ2NjQ3NkUtOSwyLjYyNTEyNTQxMDgyNjg1NkUtNywwLjAsMi41MTM0MzA2OTg0NjE0MDVFLTE2LDMuNTg0MzEyNDMzMDIyNTgyNkUtMTEsMS4xNzQ1MjcyNjM5ODIxMzQzRS0xNCw4LjE3MjYxMTY4MTE5OTA5OEUtOCwyLjQ1NTMyNzQyNTUyMzEwMUUtNCwxLjI1NDQ2MDQxMTY1MTA4MzJFLTExLDguMjc3MjM3MzIzMTU1NjQ3RS04LDMuMDc0MTUxNDgzMzI2NTE0M0UtMTEsNi44ODUzNjg0OTQ5MjQzNzRFLTEwLDEuNzMzOTc2OTAyNjYxNTM0RS05LDMuODIzNzA4ODI1NTkyNDQ1RS05LDYuODgyNTM0ODczODM5MDYyRS04LDYuODIwNjc4NTkwMDgxODE1RS04LDAuMCw3Ljc0MDYzNDg4OTM0MzM0RS01LDAuNDgzNDQ3MTIzNDM5NjY5NDUsMC41MjM0Mzc4MDQxODQ1ODM0LDEuMDIxOTMwMzUyNzExMDMwOCwwLjIzMjUyNDA5NTYzMjQyNCwxOTg4LjgyNzUyMzc2NDE0OTYsOS41MjQ3OTAzNTg2MjExNDUsMjAzLjE5MzA1NDQ5NzM5NDg4LDAuNDE2ODQ2NzQ3NTY5Njc2MDUsMC4yMDg3Njg0OTI0MzQyMTE1OCwyMy43ODAzNzg1MzkzMjc5NCw2LjgyNjcxNzM0MzU2MjY5MywxMDU1LjAyNzkwNTczMzI1MTgsMTEyNS41NTc4MDkwMjczMzg5LDAuMCwwLjAsMC4wLDAuMCwxOTIuNzQ0MTQ0OTAwODMwODMsMTQ2OC42Njk1NjM1Mjc5ODEyLDAuMCwxLjUzNDQ4NTAxMTIzNTUwMDZFLTUsMC4wNTU3NTY0MTE0NTM3Mjc3NSwwLjA1NTkxMzk2NDM2NTE0MDA4LDAuMCwwLjAsNi40MTk3NDg0MzMwNjczMTY1RS05LDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMDYyMzkwMDAyMzUzMjc5NjE0LDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwyLjUxNDc2MTA3OTY4MzUzMjNFLTE2LDMuOTM4ODIyODcxNjQ3Mjc0RS0xMiw2Ljg0OTUyNzUyNzMzNDk3MkUtNiwwLjAxMDA2MzA3OTYzMTc2OTQ1NCwwLjAxMzY0NDE3MTE4MjY4ODU3Myw5LjE4Mzc2MTk0ODk4OTU0OUUtNSw5LjQyODMzMjY5NTY4MzA5MkUtNCwxMDUxMC44NDY3NzA2NTM2ODkKKzQsRnJpIDI4IEphbiAxMSwwLjAwMTEyNzM4NDczNDUwMTk1NTMsMC4wNTExOTI0MjkyMjc3Njk4OSwwLjA3MjU2OTc4MDU4MDU5MjQxLDAuNjgxNzU0NjAyMTExOTQwNSwyLjMxMDk1MzU2NDQyMzMxNzZFLTgsOC4xNTY4ODgxNTA3MTg0MjlFLTcsNS45OTkwNzkyNDM1MDI1Nzc0RS01LDAuMCwzLjMwNzc4MzQwNDMzNTM0MUUtMTMsMS42NDUwMzIxNTI4MjQyMjRFLTgsMS4xNzEwNDQ0Mjk4MzQ1MTE0RS0xMSwxLjk0MDI0OTQ0NjU1ODQwODdFLTUsMC4wMzg3ODQ3MzI5ODA1NDk5Niw1Ljc3NTg2OTkzNjgzNDM3MkUtOSwxLjk1NTI1NzkwMTI1MDM4NUUtNSwyLjA1Njc3ODM1NDE2ODg3ODNFLTgsMi43MDg4OTUyMjUyMzQyMjRFLTcsNi42NzUxNzIxOTc0MTIwNThFLTcsMS40NTEyMzAzNTA2MzcxNDc1RS02LDEuNTc2NTY3OTUwNTIyMTQyRS01LDEuNTM4OTA1NzI4Njk1ODU5NUUtNSwwLjAsMC4wMTU2ODY5MDczMzc0OTYzMSw1Ni4xMzgxNjQxMTg5MTY1Miw2MC4zNDE0NTg2NDIyNzk1OSw5NS4zNDM0MTc2MjI4MjgyNywyOS40OTY0OTk1NjMwOTc1MywxMDA2NzkuMzE1NDAzODM0MDksMTAwMy4wNjUzOTExMDA1Mzg2LDE1NDIyLjQ1OTA3MTIxNzMyMyw2MC40ODg3NzEzNjI4MjM0MiwyNi40MjI4NTUyMjE3NzI1NjUsMTQ4OC44MTA3OTUwNjQwOTEsNTkzLjM1NDg2MjY1Mzc4NzQsNTU5NzguODg3MTMzNTgwODYsNjI0ODcuOTY5MDkyMTAwNDEsMC4wLDAuMCwwLjAsMC4wLDE0OTgzLjU3NjEzMjYxNzI4Nyw2NjkwMy41Mzg0MjEzMTk2NSwwLjAsMC4wMDM0MjYwMjc2NzIzNjMyMDcsNy4yNzUxMDc5MzA2NDg4NzU1LDcuMzA0MDUwODU5NDg5NTk2LDAuMCwwLjAsMi41NTA4Nzg5MDAwOTI4OEUtNiwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCw5Ljg2MTgwMzM4MTY3MjM5NSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMy4zMTAyMDEwOTIwNjcyNTVFLTEzLDIuNzgwNjA1MjUwMDMyMTY4OEUtOSwwLjAwMzAwNTAxMTI5OTQwOTM1MTYsMS45MzQ2NDY5NDY1NjMwMTE4LDIuNTc4NDcwNzYwMjAwMDYwNSwwLjAyMTU3MzM5MTEzOTc3NjQwNywwLjE3NTgzNTc4ODU5MTQ2NTksNDU4OTg4LjUwNTM5OTc4ODI2Cis1LFNhdCAyOSBKYW4gMTEsMC4yNjI5NTUxMjUyMzMyOTg5LDguNDgyMDM4NDcyNDQ1NDg1LDExLjk4ODgyNzU5NjQ3NzExMiw3OC4yMjYwOTkwMTQyMDI3LDUuNDAwODAxNDEyODM4NDE0RS02LDEuNTAyMjU5MDQxMjUyNTcyNUUtNCwwLjAwODAwMzIyMzczMTU0Mjc5NSwwLjAsMS40MjE0ODI2NDI4NTgxNjE4RS0xMCwzLjY2Nzc3Nzc5NjYzNDg3NDNFLTYsNC4zMDQ1NDQ1MTY3MDc5NTNFLTksMC4wMDI2OTI2MzMyNzI2MDU3MTcsMy45MDU3NjY2Mjk3Njg0MDksMS4yODAyNDY3MDk0NDMwMzA2RS02LDAuMDAyNzAxMDk4MzUxOTYxNTczLDUuNTQ3MzEyMDAxMjA1OTMxNUUtNiw1LjIyMTU1ODA4OTAzMjA3MkUtNSwxLjI1OTYyNzY5NDk2NTMxM0UtNCwyLjcwMDA1MjY5MDczMzUxMTRFLTQsMC4wMDIxMTA4NjcxNDYxNzI0ODYsMC4wMDIwMjc4NjUyNzMwODkwNzY3LDAuMCwxLjg4ODA2NDgzNzQ4OTQ3MTUsNDU1Mi4yNjIzNDI2MzgwNzIsNDgzMC44MTc3MjcxNzI3NDcsNjA1Ny41NTU4MjY3NzAyMDMsMjU3NC40MDA2NzE1NTg5NzYsMjIyNTI0MC42MzgyOTQ5NDAzLDc1MTQ3LjcwMTIzODU4MDQ4LDcwMDcxMS4zNTE4MTkxNzIzLDU5MTUuNTA0Mzk3NDI1NTkyLDIzMTguMTUzNDYxNzc5NjYyLDU3NTk1LjYwNzUyNTY5NTM3LDM5ODQ5LjM2MDM0MTQwMDA1LDEzMTIwMDMuMjQwMTk4MjMyNSwxNjE5MjUzLjA0NTk0OTE3MzIsMC4wLDAuMCwwLjAsMC4wLDY2MzM1Ny40NDkzNzUxNDA1LDEzMDUxNDkuODMzMTAyMjYyOCwwLjAsMC40NDg0MzYxMzQ4MTAzNzAyLDY0NS44MTYwNzMxMDI4NTU5LDY0OS42NTAxNTU2MDMzNzA2LDAuMCwwLjAsNC44ODY4MDY0MzkyNzI3OTRFLTQsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsOTkzLjcyMTYyNTQzODA3MDgsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDEuNDIyODQwNDk2NTQ2NDc3NUUtMTAsNy45MjU5OTQwNDAyNTU5ODFFLTcsMC42MDAwMTkxNDI0MjM1OTg4LDIyMC4yODg5MjY0MTA4NDYzMywyODguMzAwODIwOTQ5NTYyOTMsMi44ODQ2MzA4NzgyMTE0NzY1LDE5LjQ1Mjg2NjcwNjQwMTcyLDcxNTY0MTYuODE0NTU4NzY3Cis2LFN1biAzMCBKYW4gMTEsNDcuNDQ1ODI3NTAxODY4NDMsMTEzMC4xMDQwNTg2MjgyMjMxLDE1ODAuMzI4MjM5MDExMzg1Nyw2ODc0LjY4OTI3MTE0ODI4NiwwLjAwMTAxNDY2NTU4NzY0ODgxMDQsMC4wMjI0ODk2OTMzMDE2MzA2MDQsMC44Mzc3OTYzNzY2MjQxMjM4LDAuMCw0LjM3MjUxODU4MTc3MTA2RS04LDYuNjQ0MTc1MTA5Njk5Mjc5RS00LDEuMTczNzUzMDgxNDkxOTc2M0UtNiwwLjI5NDEyOTI5NDcyNDIwODMsMjUyLjgwMDU5MTY0NDY1MzMsMi4yNjY3MjIxNzQ1Njk1MzUxRS00LDAuMjkxNjI3MDc0NjQ2MzcyNDQsMC4wMDExNTAyNzg2MDUzMjcyNzQyLDAuMDA4MTc1OTM1MjY2MDcwODcsMC4wMTkyNDk0NTM4MDkzMDEzMjQsMC4wNDA1MzM0NDAyNjA3ODg2MiwwLjIyNDk1MzM0NTQwNjI1NzMzLDAuMjEwMzM5Njk5NjcxOTc1MDgsMC4wLDE4My40MDc3NjIyMjU4MTI3NSwyMzkzNzAuNzg0MTU5MDUxNTIsMTc1NDMxLjgyMTA3Nzg5NTM4LDEwMzE2OC4xMDQ4ODg5MTYzNCwxMjczNzAuMDEwMzUyODA4OTUsMjM0MjExNy42MDg0MzcwNjYsMTM5MzM4OC42NTExODAzOTg5LDE2MTAzMDYuNDE3NDg3MzU2NiwzMzg1OTUuMDYzNTk3MjE3MTQsMTI0MTE0LjM3NTg4MzUwNDQ0LDE0Mzk1OC43Mjk2MTI2OTMyLDExNTE2OTcuNjM1MzQ4ODUzLDE0MDc4ODAuODI0OTM5MjE0NiwxODgwODE1Ljc1MDY3NTAzOTEsMC4wLDAuMCwwLjAsMC4wLDEzNTcwNTcuNDgzMzc3MDU0NiwxMjk4ODgzLjM4MjgyODkyMzksMC4wLDQ2LjU0ODU3MDUzOTE2MzU1NiwzNjA2Ni40MjQwNjYyMjkyNiwzNzg0NC4yOTk0MTcyMjg4MSwwLjAsMC4wLDAuMDc0MDUyMjg3NTk5NDM1MjIsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsNjM2MTcuNzQwMzYzMTYwODc2LDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCw0LjM3NzY4MjM3NjExMDk1NEUtOCwxLjcyNjcxMDk5MTEwOTk5ODdFLTQsOTcuOTY0OTIxNTE5MjkyNCwxOTQ0Ni4zMDA3NzQ2NDg1MiwyNDA2My40OTMwODU5Mzk3ODMsMzIxLjkyMDA0MzcxOTExOTMsMTc1NC4wNDIxMzc2Mzk5OTUyLDYyMDcxOTEuMTE0Njc0NDA1Cis3LE1vbiAzMSBKYW4gMTEsNjIyNy4zNTI3MDQ2Njg3NDgsODk2OTIuMjkzOTQxNzg1ODksMTE5NjY3LjE5MjE5NDY1MTkxLDMzMjk0Ni44NDY4NzAwNTgzMywwLjE0MTI5MDIyNjk2NTk1NjQ3LDIuMzk4ODU1Nzc0OTAyNTcwMyw2MS40NDU3NzExNjYwNTUzNSwwLjAsOS41NTg5NjQ2NDU4NDg4MDNFLTYsMC4wOTEzNTcwOTk3NDIxNjkzNSwyLjMyNjk2MTUyMzAwODkzMDJFLTQsMjMuMTQzOTQ0NDMxNTMxMzksMTIwMjYuMjY4NTUwMzIxMTg5LDAuMDMwMDg2MDYzMTkxNzIwMzU4LDIyLjU3NzA1OTIzNzM0OTc3NiwwLjE3NDIzMDY5MzE5NTMxMTI2LDAuOTMzODcyNDgwNDE3NzA3OSwyLjEyOTM4MDk4NjE0ODc0NCw0LjM5MjU1NzYyNDk3MDM1MSwxNi45NzIzMzkwNDM4OTkxNDcsMTUuMjAzMjA0NDAxNDk4MjA4LDAuMCwxMTY3NC42MzMzOTcwMDIwMiwxMTM3NjY5LjMyMTAyNjk3OTIsMjQyMDQ3LjAzMTgyNjYyNjgsOTUwMjUuOTYyNzY0MTM1OTUsNDQ2Mjc3LjIzMzE3NTE3NjE0LDE1NzAxMDguODIwODMwNTExOSwxMjAzNzg2LjUzMTAzNjI0OTYsMTA4MjA3NC4yMzM5NTU1MzY3LDkyMDY3Ny44NDM4OTMxMDMyLDUzMDYzNi44NzkyOTIyMTY0LDk3MTM5LjQxODYxMTEyNDE2LDE0ODk0OTcuOTczMjU4MzI4Niw5NDM4MjEuNDY2MTcxMTgwNCwxMjYwOTQxLjcyNDA3OTQzMTMsMC4wLDAuMCwwLjAsMC4wLDkxMTA3OC4xNjUwMTIxNDAxLDg3MDcxNy44OTQ2MTg1NDQ4LDAuMCwzNDQ3LjA1NzE3MjI4ODgwMDgsMzg4NzcyLjg1MjkxMTE3NjQsOTcwOTkwLjc4Njg2NjExNTIsMC4wLDAuMCw4LjM4MDY5NTYxMDkxMjEyNiwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwxODIwMjU1LjE4OTI2NTU2NjYsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDkuNTcyODg1MTU1MjQ0NDU0RS02LDAuMDI3Nzk4MjQ1MTI0NDEwODA3LDExMTA0LjU5NzIyNjUxNjM3NSw0MTc0NTguNjY2NDIwNjgwNSwyMDk1NjQuNjgyMjEzNDE1OSwyMzYwOS40NzM2MDg1NDA3NzUsNjExMTIuNjE5OTkzNjc2MDksNDE2MTMyNS4zNzMyOTM3MjEKKzgsVHVlIDEgRmViIDExLDI4MTkyNi43NDA2NjU4Mzc2Niw1NTIwOTQuNTg1NzEwMTY3MSw1Nzg4ODUuODI1NjUzMTQxNywyMTA0NzI0LjcxOTIwMzg5MDgsMTQuNDg5NjQwOTc0OTkzNzI2LDE5MS44MTU0MTcyOTgyNzQ1OCwzNzE1LjYyMjkwNTY0NjkyMzMsMC4wLDAuMDAxNDg3NTc4ODc4MTU4OTMzOCw5LjYwMDI5MDc4MzU3NzY5MywwLjAzMzAxOTkxNTIzNjE5MjU1LDE1MTcuMzIzMDk1MDQ4MTYyNSw0NjQyNDIuNjcyMjYzNTYyNDUsMy4wMjk4OTQxMTc1NjQ2MDU3LDE0NTguMDMwNzgwNTUzODIxMiwxOC45OTA0NDEyNjQ2NzYyOCw4MC43MjA5NjQ3NDI3MTAxNSwxNzcuNzQ5MjYwODEzOTYxMTcsMzU4LjU2MzczMTkxNDE2NTUsMTA2My43OTM5MDc3MDU5Mzg5LDkwOC41Mzk2NTIxMDg5NzY1LDAuMCw0MDQ0MjkuOTE5MjExODA2NDQsNzc4NTE1LjE3ODY4MTg1ODUsMTYyMzM1LjIzNTA4NzA3ODA0LDYzNzAxLjkzNDkyNDcyNTc4NSwzMDIwNzQuMjI4ODMzNDM1LDEwNTI0NzUuNDE3MTAzODcxNyw4MDY5MzguNzgyMzAzMTk1OSw3MjUzMjkuNDQ5NDcxNTg2OCw2MTk3NjcuNTI5MDIyNzk3OCwzNjEwMzIuNDI0MzMwMjU1Myw2NTExNC41MDE1MjU5Nzc5OCw5OTg3MzAuNzE1ODQ5Mjc1NSw2MzI2NjIuNDQ4NjgxODA0Nyw4NDUyMzQuNTE0NjAyMjcwNiwwLjAsMC4wLDAuMCwwLjAsNjEwNzEzLjk1ODY0MDg2MzcsNTgzNjU5LjY1OTIxODQzMywwLjAsMTU5NTI1LjM4NjM4ODU1MjIsMjk0MDg3LjgwMTE2OTI0NTEsMTIwNjEzNC45Nzk2MzM5MjU3LDAuMCwwLjAsNzAwLjQ3NDQ3Mjc1NTM0MzEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMjU1OTQ0MC42NDYwMDAwMDksMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMDAxNDkwMjM3NjQ5MDM5OTgxLDMuMjcxNzY2OTMwNTc2ODUyLDE5MjAxMi40NDc0NjI2NTk3NCw0MTg5MjYuODEwMjUzODUzLDE0OTQ0OS4zNDIxMTg5ODM2MiwyNTYwODcuODU0OTgyNjU0OTcsOTYzNjEuNTY3NTY2Mjg4NjIsMjc4OTcxMi43MDg2NDM0MzMKKzksV2VkIDIgRmViIDExLDQwNDgxMi43MzQ1NjE0NDY3LDM4MjQ5OS40NzkyOTE3MDk0LDM5NTM3OC40OTU1ODEwNjUsMTQ2OTM2OS42NDg4MDUzMDE2LDEyMDIuMzcyODYwODc3MzA0MiwxMjQ5OC4yNjQ0MDQ3MzM2MDksMTYxODQ4LjgyMTcyMDI2NDg1LDAuMCwwLjE4MDAxNjQyMjUxNTA5MDE1LDgzNi4wNTM3NTc1ODY1MzM1LDMuNjU2NzE2NzkwNDQ0NTY1LDc5NTk3LjQzOTQ0MTMwNzA4LDE2MTcxNzkuNjEwMzMxMzU3NywyNTIuMzg1MjA4MjYwODc1MSw3NTQxMi45MzkwMTc3NTgzOCwxNjQ4LjI1MDAwNjQ5NzQwNDcsNTc2MC45NzY4NDYxMDMyMzUsMTIxODYuMzQwMDkwNzU2MDE3LDIzOTU1LjAyNDI2ODM2NDkyLDUyNDA5LjEyMjE0MTAwNjYzNiw0MDkwMS4wODkzMDgzNDQzNywwLjAsODUyODkyLjEwMDg5MDQ3OTksNTIxODU0LjM4NjgyMDI3MDQsMTA4ODE2LjU2MjMxODU2MzI2LDQyNzAwLjY4Mzk1Mjc4Mjk2LDIwMjQ4Ni40MTcxNDUzNjI0NCw3MDU0OTUuMzcwMDQ0MzQ4Myw1NDA5MDcuMjQxNzA1MTYxLDQ4NjE5OC42NTcyNzA2MDA1LDQxNTQ0Mi42MDIwMjYyMDI5LDI0MjAwNy4yODYwMjc4ODMxMiw0MzY0Ny41NTU2NjA0NzU0Niw2Njk0NjkuMjE5NTUzNjU3OCw0MjQwODYuMzIxNzI1MzQ4OTQsNTY2NTc3LjYzODczOTAyNjcsMC4wLDAuMCwwLjAsMC4wLDQwOTM3My44MDg4NzA2OTQ4LDM5MTIzOC43Njk2MzYzOTEzLDAuMCw5MjkyOTYuODc4Njg2ODgwNSwxOTcxMzMuNTk0MjAzODg1MTIsODA4NjkwLjE2MTIyMTQyNjMsMC4wLDAuMCw0MDQ3NS45ODkzNDg0NzcxNiwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwxNzE1ODk3Ljk5NTg3NDk2MjUsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMTgwNDA2MjgzNTEyMzQyNzUsMzA5LjQ5Mzc0NjgzMDI4NDEsMTUxNzg4LjQ2ODI3MDM0MjM2LDI4MDg0Mi40NzIzNTIyNjYxNCwxMDAxNzguOTc1MzI3NjE3MSwxOTMzOTYuMjM1MjU2MjczMzMsNjQ2NzEuMjYyMjc3NjU0MTU0LDE4NzAyMTIuMzA5MTUyMjcxCisxMCxUaHUgMyBGZWIgMTEsMjcxNDcwLjQwOTU5NjUyNTY2LDI1NjM5Ny4xMzQ0NjQ3MjA3NiwyNjUwMzAuMTU1MjQzMDAwMjUsOTg0OTQ4LjI4NjM5NTY4ODUsNzI1NzAuMjYzOTMxNDEzNjYsMzM5MTg3LjcxMjk5NTE3NDIsOTc3MDMyLjA3Njk2OTEzNzIsMC4wLDE4LjA3ODIxNzMyNjgxMDYxMyw1ODM4MC43Nzc5NDk1ODg5MjYsMzMyLjcxNjE4NDY3NzE4ODI3LDExODk1OTYuMzIyOTMxMDE0NSwxMDk0NzkxLjAyOTQ3NjA3MTUsMTY3OTEuMjkwODAzMDQ4MTA1LDEyMzI4MTUuMDY3NjQwNDIwMyw5OTAyOC42NzY3MTg5NDE2OSwyNDU5NjQuMDQ0Mjg5OTU4NTIsNDEzOTQyLjk4Njk1ODExMzQsNjY0NDAzLjUyMTI0OTA1NjMsODIyNzY5Ljc0MzYwNDMxNzQsNDU1MDcxLjA4ODk2MjgyNDU1LDAuMCw1NzI5MzkuNDA2ODcxMzEyNCwzNDk4MDkuNDU2NTk3MjIxNjcsNzI5NDEuOTIzMDYyODA5MjUsMjg2MjMuMTI0NDMyOTc4OCwxMzU3MzAuNzA0NDYyNDUyODIsNDcyOTA3LjY4ODkyNTk5MjMsMzYyNTgwLjk2NzE2MDc2NCwzMjU5MDYuMzk0OTc4NjAwNCwyNzg0NzkuNTA0MTE1MzMxODYsMTYyMjIyLjMzNTExMTE0OTgyLDI5MjU3LjgzMTUxOTY2ODk4NCw0NDg3NTguNjM4MDcwNTg5MiwyODQyNzMuNTYyNzAxOTgxNDYsMzc5Nzg4LjM0ODg4MjI1NTYsMC4wLDAuMCwwLjAsMC4wLDI3NDQxMS40NzA0MDc5NTExLDI2MjI1NS4xOTAwNzM1NTY0LDAuMCw2NDQ2ODAuMDA4NDEzNzQ4OSwxMzIxNDIuNTk5OTQyMDA0NSw1NDIwODEuMjI2MTc5NjIxLDAuMCwwLjAsNTUwMjE1LjgwNzU2NDkwNjQsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMTE0OTg5Mi40MzIyMDk2NjU0LDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwxOC4xMjUyMzY3Njk0NDQ2ODcsMjQwNDYuMDk0MTkzOTMyMDk1LDEwMTc0Ny41MjM0NjE1ODQ0NCwxODgyNTQuMzM5MDA2MTIyMDMsNjcxNTEuOTc1MzUzNDEzNjgsMTI5NjM3Ljg1MTE1MzI4NTEsNDMzNTAuNDQzNTc5MzgzNzU1LDEyNTM3OTkuODMyNTAxMjMyOQorMTEsRnJpIDQgRmViIDExLDE4MTk3Mi4wNTc1MTU3Mzg2MiwxNzE4NjguMTM4OTc3NzgxNCwxNzc2NTUuMDI1ODYzMjk4MjQsNjYwMjMwLjU4MDY3OTQzMjcsNDYwOTUwLjEyNDUwMjE3MjE3LDQxMDkwOC4wOTczMDcxNjQxLDY4Njk5Ni43Mjg4MTk3MzMzLDAuMCwxNDY1Ljg3MDQxMjcxMDQwMDYsOTEwMTg0LjU3MzI0MjM3NDUsMjA2NDIuMDMwMTg3MjEzMzg2LDk5MjgwNy43NzAzOTA1MTc1LDczMzg1OC41NTUyNTcyNDI4LDMzMzk5NC4yNjc1OTcxMTM5NywxMDc1OTg3LjgwMzA2OTIzNDQsNDA5MjM2LjA4NDUxNzY5NjIzLDU4NzkwMS40NjAwNDcwMDg5LDYyMzE1Ni41OTA0OTQ5MzkyLDc0NTczMS4zNDAwNDA4NTA5LDcyODIxOC40MTY0MTIzNzI0LDM2MDgzOC45MDA5NjIxODI3LDAuMCwzODQwNTIuNzcwNzUzNDI2MjQsMjM0NDg0LjI5MTA0OTkxODg2LDQ4ODk0LjQzMzIyNTM4MzUyNCwxOTE4Ni42NTQwODc1OTU1LDkwOTgzLjAxMjA2MzcwODQyLDMxNjk5OS41MDM4MTE0MzQ3LDI0MzA0NS4yOTA1OTg4MTU4MywyMTg0NjAuNDQ2OTUwMjc1ODMsMTg2NjcwLjM5NDAxODU0NTE0LDEwODc0MC44ODMxMzk2OTk2NCwxOTYxMi4xMTA5NzExNjQ3NTUsMzAwODExLjkxMDkzMDMyNjE1LDE5MDU1NC4yNjc2MzcwODA4LDI1NDU3OS43NDM1MDY1MTczNSwwLjAsMC4wLDAuMCwwLjAsMTgzOTQzLjUwOTQ3NjUzOTQ4LDE3NTc5NC45MTEwODMxNjcwNCwwLjAsNDMyMTQyLjA0Nzg3NjM3MDQzLDg4NTc3LjgzMzY3NjM4MTE4LDM2MzM2Ny45MTI0ODc3Mjg1LDAuMCwwLjAsNDQzMDg5LjAzNDE2NTY5NTE0LDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDc3MDU5Ni40MjM5OTczNzYyLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwxNDcxLjczMzMyNTQ3NjM5OSw5MDQxNjcuNDkyNzg4MzM2OSw2ODIwMy40MDQ2MTA4OTMzLDEyNjE5MC42NTcxODg5NzQ5Myw0NTAxMy4zMTUyMTAyNzgwOCw4Njg5OC44NTAzNTMxMDA1MSwyOTA1OC42NzEzMzU3OTM4NSw4NDA1NjUuOTQxNjkxMjUzMgorMTIsU2F0IDUgRmViIDExLDEyMTk3OS41MTc5NzExMzI1MiwxMTUyMDYuNjU4ODMxNjI5NjgsMTE5MDg1LjcyNTExNTEzMTczLDQ0MjU2NS43OTMyMzUxMTA5MywzMjE0NTYuMDYxOTgyMTMyNSwyNzU1MTkuNDUzNDUyNjM4OTMsNDYwNTA3Ljk1Nzk1MDU2NTk2LDAuMCw3MTcxOS4xNTI1MjI4MjI2NSw3MzMzNTguNTc4NDI5NzY3NSwzNTg0MzguNTQyNDIwOTg5Niw2NjU1MDcuNjgzNDU5MTY0OSw0OTE5MTguOTA0OTAxMDM4MywzMTIyMjIuNzc1MzIyMjI2Niw3MjEyNzEuMjI0MDczNTY3MSwyNzc3ODEuNzg2MzAxMTYzMywzOTU1MTYuOTI1MzcwMTk5NSw0MTc5NzIuMzkyNzY3OTMzMSw0OTk5NDEuNzQ1OTkxMTE0NDcsNDg4MTUyLjI4NDQ3OTQ3Nzg1LDI0MTg3OS41MDg0NTc1MTA3MywwLjAsMjU3NDM4LjI3MDk3MTUxNDg0LDE1NzE3OS41MjA3NzExOTMzOCwzMjc3NC45MTg3MzA1MjA5MDUsMTI4NjEuMTk4ODUxMjY1MDY0LDYwOTg3LjczNjgzNDk5NzQ2LDIxMjQ5MS4xMjE5ODgxMjU0NywxNjI5MTguMTMwMzgyOTIwMzIsMTQ2NDM3LjkwOTA3MzM3MzY1LDEyNTEyOC45MDcxMTE5ODQyMyw3Mjg5MS4xOTM3OTIxNDkxMiwxMzE0Ni4zOTExMjkwNDUzNDksMjAxNjQwLjI1Mzk4Mjg1NjEsMTI3NzMyLjM0NTQ1NDc1NzI1LDE3MDY0OS45MDUzODcwMDU2LDAuMCwwLjAsMC4wLDAuMCwxMjMzMDEuMDIxNzQwMjUzNCwxMTc4MzguODUyODkwMDgyNzgsMC4wLDI4OTY3My40Nzc0MjYzOTYxNiw1OTM3NS40OTc1NDc2ODA1OSwyNDM1NzIuNzk1ODI2NjEzNjQsMC4wLDAuMCwyOTcwMTMuOTc2NDMwMjAwMTYsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsNTE2NDE1LjA3NDczMjU3MjM2LDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCw3NTE1Mi45MTk3NTE4NTY4MSwxNTgxOTk2LjkzODQ0ODg0ODQsNDU3MTguMTA5MzE4NTU0ODEsODQ1ODguMTI3MTM2MTY5MTksMzAxNzMuMzI3NTIzOTY2MDQsNTgyNTAuMDQxMzY5MTI2MTY0LDE5NDc4LjYwOTkwNzU0MTA3NSw1NjM1MzUuMzI5NDQ1NTgwMworMTMsU3VuIDYgRmViIDExLDgxNzY1LjMxNjEwMTgwMzI3LDc3MjI1LjMzMjg1MTYxOTQ5LDc5ODI1LjU0ODc0MTM1MTUxLDI5NjY2MC43MjI4OTUxMTc1MywyMTU0NzguNTIwOTUxMTM3MTUsMTg0Njg2LjIxMjc2MjQ2NzMzLDMwODY4Ny43MTU1NzMxOTY3NywwLjAsNDA3MjMyLjEwMzExNzg1MDQzLDQ5MTU4OC45OTUzMzU2Mjg5LDMyMDQzMC4xOTI5NjQ3NzczLDQ0NjEwMy4xNDEwMTUxNDAyLDMyOTc0Mi4zMTI1NzcxMzAwNCwyMDkyOTcuMTU4MTE0NjEyNTQsNDgzNDgyLjU2MDEyODQ2ODQsMTg2MjAyLjcwODI3MDYyMDksMjY1MTIyLjkyNTYzNjcwMjg2LDI4MDE3NS4yNzM3MTIxNDc1LDMzNTEyMC45NzQyMDk0MDAwNywzMjcyMTguMjYxODA3NzQxMSwxNjIxMzYuNjgzMjQ0NjczMTMsMC4wLDE3MjU2Ni4wMzM2NDg5MzcxOCwxMDUzNjAuNTgzNTk5MTkxNCwyMTk2OS42ODUwMzIyNTQwNTYsODYyMS4xMTk0MDYwNTIzMSw0MDg4MS4zMDI1NjI4MzkyNjQsMTQyNDM3LjA1ODY3MzIyNTA4LDEwOTIwNy4yODg2NTgzMDQyNiw5ODE2MC4wNzY1MTEyNDAzNiw4Mzg3Ni40MTQ3NzU2ODI4OCw0ODg2MC40MjgzNzgzMzkzMSw4ODEyLjI4OTUwNjgyMjk3MiwxMzUxNjMuNTA0MzMyNDA3MzUsODU2MjEuNTUxNjg1NDYxMTMsMTE0MzkwLjA1MjQzNDk3OTIxLDAuMCwwLjAsMC4wLDAuMCw4MjY1MS4xNDY1NjkxNTY1Miw3ODk4OS43NDUyOTQwNTYyNSwwLjAsMTk0MTczLjkzODcyMzczODU3LDM5ODAwLjU4NjI0OTU0NDcxLDE2MzI3MS43Mjc3MTE1MDIzMiwwLjAsMC4wLDE5OTA5NC40MjIzNTQzNjQzLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDM0NjA3Ni41NzI4OTcyMzEyLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCw2NTkwNTcuNzIxOTQ4NzYxMywxMDYxNTg0LjYzOTgzNTc1OTUsMzA2NDUuNzY1MTQzMDcxNzg1LDU2NzAxLjExNzI3NTk3NzU1LDIwMjI1Ljc4NjI5NDkxMDUyNiwzOTA0Ni4xNzA0MTIxMjUxMjQsMTMwNTYuOTAyNjg5OTMxMzc2LDM3NzgxMS43NTk4NDI1MjM3CisxNCxNb24gNyBGZWIgMTEsNTQ4MDguOTMwNDUzNDcxNzEsNTE3NjUuNjg4NjcyMjA3OTEsNTM1MDguNjY1NTA3MTE1NDQ2LDE5ODg1Ny42Mjk0Mjc5OTM0NywxNDQ0MzkuNTcyMDgzNjQ3MjUsMTIzNzk4Ljg3MDY0MTA2NzcxLDIwNjkxOS41NjM3MTM2MzI1OCwwLjAsMjgxODk2LjM2NTI3ODY5NTYsMzI5NTIxLjk1Nzk4NDY5NDcsMjE0Nzk2LjM4NzU3OTQ3NzIsMjk5MDMxLjg3ODAyMTg3MDMsMjIxMDMyLjM1NTk2MTYwMzcyLDE0MDI5Ni4wODA2NjQ1MjY5NiwzMjQwODguMDUxOTYyNjk4MzQsMTI0ODE1LjQwNzk3OTkwNjc0LDE3NzcxNy4yMTE3MTc4NzM0MywxODc4MDcuMTAyMzcyNzQ4MjgsMjI0NjM4LjMwNjg1OTUyMiwyMTkzNDAuOTYwMzE4NjM2MjQsMTA4NjgzLjQ2ODk3NjYyMDAzLDAuMCwxMTU2NzQuNDcxNjE5NzI3MTIsNzA2MjUuMzExMjQ4NTQxOTQsMTQ3MjYuNzIwMjgyMjA2OTc4LDU3NzguOTA5MTU3MTQyOTIxLDI3NDAzLjU1NjYxNTkxNTQ4OCw5NTQ3OC40MTU3MjcwMDM5NCw3MzIwMy44MzQ3NjA4NTE2Myw2NTc5OC42MjUxMzUzODU2Miw1NjIyNC4wNDIyMTM3MzIyOCwzMjc1Mi4xMjQ1OTk4ODQ4ODYsNTkwNy4wNTQzMDc4OTIxMzIsOTA2MDIuODA2NDQ2NDI0OTgsNTczOTMuODQyNDY3NDMzMTQsNzY2NzcuOTQ1MjE0MjIzNzEsMC4wLDAuMCwwLjAsMC4wLDU1NDAyLjcyMDM3MzEyNzYzLDUyOTQ4LjQwOTcwMTg0NzgyLDAuMCwxMzAxNTguNjgzNTQ0MTk5NzEsMjY2NzkuMTMwODA3MDM2NTEsMTA5NDQ0LjMxMjAzNTg3NzMyLDAuMCwwLjAsMTMzNDU2Ljk4MjM1Nzk5NzgsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMjMxOTI0LjQxNTc0OTc2ODc2LDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCw0Nzg5MjYuNzI0NDE1MDkyMjYsNzExNjAxLjQ2NTQ1MTU0OSwyMDU0Mi40NzA3MDE0OTgzOTgsMzgwMDcuODk1NTQyNzAwMTQsMTM1NTcuNzUwMDAwMzA5NTMsMjYxNzMuNDMwNzQ4MTY3NDczLDg3NTIuMzAzNjEyMTk2NDQxLDI1MzI5OS4yNjk0ODM3MzY5MgorMTUsVHVlIDggRmViIDExLDM2NzM5LjUyNDc4NDczMDE2NSwzNDY5OS41Nzg4MTM4MTYxMiwzNTg2Ny45MzExMjYwMzAyMSwxMzMyOTguMjU1MzEyNjkyMDIsOTY4MjAuNzQwNjA4NDY0OSw4Mjk4NC44NjQ2NjcyNjkwNCwxMzg3MDIuMzMxNDc0MTc3MTYsMC4wLDE4ODk2MC44Mjg5MjU1NzA2MiwyMjA4ODUuMTc0MDQ2MDIzNiwxNDM5ODIuMzI0NDExODU4MjgsMjAwNDQ3LjA2MjI0MTcxNTY3LDE0ODE2Mi4wNjc3MzE0OTU2Niw5NDA0My4yNzUyNDk2NTIyNywyMTcyNDIuNzE3OTExMjA2MjQsODM2NjYuMjcwMDIzMDM2NDcsMTE5MTI3LjQwOTU0MDAzMzY3LDEyNTg5MC44NjU1MDgzMDI5OSwxNTA1NzkuNTYwMTk1NDIxOCwxNDcwMjguNjQyNjE4MjY5LDcyODUyLjcwNzkyNzcxMDcxLDAuMCw3NzUzOC45MTcxNDEyNzI4OSw0NzM0MS41NjE4ODczOTczNiw5ODcxLjYxNTgxNzUyMTU3OSwzODczLjcxODY1MjI1MTI3NzUsMTgzNjkuMTUzMzMyMzE4MTQzLDY0MDAxLjA5NjAyNTUyNjIzLDQ5MDY5Ljk5Nzg4Njg3MjU0LDQ0MTA2LjE1NjYzMDMzODU4LDM3Njg4LjEwMjU2NTAxMzQ3NiwyMTk1NC40MDU2Njk1NTY3NSwzOTU5LjYxNjkxNTYwMDcyLDYwNzMyLjg3NzM4ODExNzE5NSwzODQ3Mi4yNDMxMjQ5MjY2MSw1MTM5OC43NjM3NjU5MDk0NSwwLjAsMC4wLDAuMCwwLjAsMzcxMzcuNTU0MDcxMDA5MzYsMzU0OTIuMzgwNDI4ODUxNTQ2LDAuMCw4NzI0Ny45NzQ3NDUyNzM5MiwxNzg4My41NTYxOTA3NjEwNDYsNzMzNjIuNzE2MjgyMjE3ODUsMC4wLDAuMCw4OTQ1OC44OTA1NTc5NzgwMywwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwxNTU0MjUuMjIyMzg2ODEzNDMsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDMyMTAzNC42Mjg2NjcyMjA5NCw0NzcwMDAuNzI3MDgwNDQzNzYsMTM3NzAuMDI5OTA2MzEyMjQ3LDI1NDc3LjQ1NDI4OTg5Njk1Niw5MDg4LjAzMTYwNDM0NTg5NywxNzU0NC41NzUzMDQwMTk3NzQsNTg2Ni44NDQ1NjAyNDQ1ODgsMTY5ODIyLjcyNjIwODg2MTkKKzE2LFdlZCA5IEZlYiAxMSwyNDYyNy4yMzk5NDUwMjQxOCwyMzI1OS44MjMyNjc4OTEwNjQsMjQwNDIuOTkzMjQzNjAwMTQsODkzNTIuNDkyNjM3NjYwODUsNjQ5MDAuODgzMzAxODYxMjM1LDU1NjI2LjQxODMwNDAxNjgzNSw5Mjk3NC45NTMyMTkwMDcxOCwwLjAsMTI2NjY0LjIzMTU0NDMwNzQsMTQ4MDYzLjc2MDAzNTA5ODgsOTY1MTQuMjM4MzI4MDYwOTIsMTM0MzYzLjY4Mzk4OTU1NTYsOTkzMTUuNzY5MjEwODMxOSw2MzAzOS4wOTI1OTQ2Nzk4NCwxNDU2MjIuMTQ4NjcxMTI1Niw1NjA4My4xNzc5NzM0NjM3MjQsNzk4NTMuNDkwNjQ2OTY5OTYsODQzODcuMTcwNzYyOTc5NiwxMDA5MzYuNDk3NzIyMjA2NSw5ODU1Ni4yNDY0ODg0MjA5OCw0ODgzNC42MzA1MzE5MTY3OSwwLjAsNTE5NzUuODkwNTA3NjgzOTQ0LDMxNzMzLjk5Nzk0Mzc1NDU2LDY2MTcuMTQxOTY5MjQ2MjMsMjU5Ni42MzEyNjUzMDU4MDUzLDEyMzEzLjIxMTcwNzM1MzM4Niw0MjkwMS4yMTc2MzQxNTU3NCwzMjg5Mi42MDMyNDI0OTIyNSwyOTU2NS4yNzk4ODczOTE3MDUsMjUyNjMuMDkwNjQ2MzcxOTcsMTQ3MTYuNDc4MjE5MTAwMTksMjY1NC4yMTA1OTMxNDg1NzY3LDQwNzEwLjQ2NTE2NjY3MzUyLDI1Nzg4LjcxNTc4MjU5MTI4LDM0NDUzLjYyMTY5MzczNDI2LDAuMCwwLjAsMC4wLDAuMCwyNDg5NC4wNDY5NTQ1MjYzNDgsMjM3OTEuMjU0MDgyOTc4NjYzLDAuMCw1ODQ4NC4wNjY0NDc3NTk2MiwxMTk4Ny43MDYyMDkwNzAxMDcsNDkxNzYuNDk5MzU1NTg4NTE2LDAuMCwwLjAsNTk5NjYuMDg3NjM3MTEyMTUsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMTA0MTU5LjA3NjkyNjc4ODE0LDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwyMTUxOTUuOTQ3MDY3Mjc2ODQsMzE5NzQzLjE0OTMzNTU0OTEsOTIzMC4zMjcwODA3MDk5ODUsMTcwNzguMDQ4MzMyNDcyMDg4LDYwOTEuODg5NzYzMzk3NTg0LDExNzYwLjQ4MDUyNTQ2NDUzLDM5MzIuNjYzNTE1NzA2NTA5MywxMTM4NTcuMTkxMDEwMTYwMjgKKzE3LFRodSAxMCBGZWIgMTEsMTY1MDguMTMyNjEzNjc1MjMyLDE1NTkxLjUyNTgwMzcwOTY3NiwxNjExNi41MDAzMzc4ODA1ODcsNTk4OTQuNzY2OTc4MjYwOTk2LDQzNTA0LjM2MzA4MjY0NjQyLDM3Mjg3LjUwMzI3ODMzNjk3NSw2MjMyMi45NzQ5MjE5MTA3MywwLjAsODQ5MDUuNTczNTE5ODI3OCw5OTI1MC4xMDY0NDI5MTI1LDY0Njk1LjQyODY3OTE0NDI5LDkwMDY2LjY3MDgzNzM3NDUyLDY2NTczLjE5MzcyMzg1NTUsNDIyNTYuMzY3NDUwMTAwMTgsOTc2MTMuNDQ1NDAxMDEzMjMsMzc1OTMuNjc4NDQwOTg3NzY1LDUzNTI3LjM5NTUyNjU3MDAzNSw1NjU2Ni40MTIxOTA2NDM3Miw2NzY1OS43NTc3OTk4MDg3Nyw2NjA2NC4yMjc2ODMyMDE2OCwzMjczNC44MzE3ODYyNzk3MywwLjAsMzQ4NDAuNDgxMzE3ODQ1MzUsMjEyNzEuOTM0OTYyNTQ3MTMsNDQzNS42MDI5MDk0NDgzODY1LDE3NDAuNTczOTg5Mjk2OTMzLDgyNTMuNzkyNjM4NTE3NjM2LDI4NzU3LjU0NjE3OTUwNTA3MiwyMjA0OC41NzEzMTk3MzM5MTcsMTk4MTguMjQwMjQ1ODE1MzYsMTY5MzQuMzU2MDg1MDc0MzUyLDk4NjQuNzUwMzU3MzA3MjYsMTc3OS4xNzA1NjY5ODcxOTEzLDI3Mjg5LjA0MDg4NDY1MDA4LDE3Mjg2LjY5MzE1MDU4MjI4NywyMzA5NC45NTMyNzk4MzI2ODcsMC4wLDAuMCwwLjAsMC4wLDE2Njg2Ljk3ODcwMDU2NzMwMiwxNTk0Ny43NTQ1MzIxNDM4NiwwLjAsMzkyMDMuMDQyMTEzNjAzODIsODAzNS41OTk3Nzc5MjM1ODgsMzI5NjMuOTkzMzExOTAxNDYsMC4wLDAuMCw0MDE5Ni40NzA2MjU0NzYxNiwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCw2OTgwMi44NDY1ODYzNjk5LDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwxNDQyNTAuMTU3MTQ0NzgzOTcsMjE0MzMwLjI0MjU4MjEzMiw2MTg3LjI3MzI3MzY2Mzk4MSwxMTQ0Ny43NTgxNDQ0MTg3MDUsNDA4My41MTU4MjY2NDM2ODgzLDc4ODMuMjg1ODQ3MjI4NjU3LDI2MzYuMTQzMTg4ODkwNDA3Niw3NjMzNS42NjAwMTgwODE4NAorMTgsRnJpIDExIEZlYiAxMSwxMTA2NS43MzIyMTM1NTQ4MDIsMTA0NTEuMzEyMjk0NTAyNDY4LDEwODAzLjIxMzI0ODQxNTI0OCw0MDE0OC42NjI5NTgxMzg1MywyOTE2MS44NDY2NjQyOTM4MTUsMjQ5OTQuNTYwOTE0MDc0NDA1LDQxNzc2LjMzOTQxODcwODk3LDAuMCw1NjkxMy45MDc5NTA0NjAzMiw2NjUyOS4zMzU5MTk4MTY2Myw0MzM2Ni42NDI3MzA0NzQyNyw2MDM3My40OTQ5NDE5NTA2NSw0NDYyNS4yNDA4MjQ3MDU3NiwyODMyNS4yOTAxNzQ0MzM2MTYsNjU0MzIuMjQ5MjE0ODY2NiwyNTE5OS43OTYyNjMxOTczMjgsMzU4ODAuNDg2MjMzNTE3NSwzNzkxNy42MDAwMjM2ODEyNTQsNDUzNTMuNjkxOTYzMTAxNzIsNDQyODQuMTc2MTQxODg3MDQsMjE5NDIuODEzOTQ5OTM1MjE1LDAuMCwyMzM1NC4yNzMwNDA4NjgzODYsMTQyNTkuMDA0NDIzMzUzNDUyLDI5NzMuMjczNTQ2NDU1NTM1LDExNjYuNzQxNjM2NjMzMjgwNSw1NTMyLjY4MjY2MTQxNjU1NCwxOTI3Ni43NTk2Nzg5MDY2OSwxNDc3OS41OTkzNDIwNTU1NDgsMTMyODQuNTk4Nzk1MDM1NjQxLDExMzUxLjQzODM1MDUyNDM2OCw2NjEyLjUzOTkxMzYzNjQ1OCwxMTkyLjYxMzY5NjM2NzQxNzMsMTgyOTIuMzkxMTQyMDU2NDc2LDExNTg3LjYxNjk0ODQ5NTU3LDE1NDgxLjAxMDE0NTcxOTQwNSwwLjAsMC4wLDAuMCwwLjAsMTExODUuNjE2MzMwNzUzNTE5LDEwNjkwLjA5OTU1MjE0NTU0OCwwLjAsMjYyNzguNTg0OTk0MzEyNzgzLDUzODYuNDIzNjEzMDU4NTksMjIwOTYuNDI1NTE0MzM5NDg0LDAuMCwwLjAsMjY5NDQuNTAwMDQwMTIzNzgsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsNDY3NzguODI4ODMyNjYzMzM0LDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCw5NjY5My43NzE5Nzc4ODM3MywxNDM2NjkuODU4MDc0NDAxMTksNDE0Ny40NTMzMDU2MzUxMTYsNzY3My42NjE3NjYzNjcxNjIsMjczNy4yNjI1MTY5MDE0NzE0LDUyODQuMzI0NTMyMDIzMzU0LDE3NjcuMDU5NjIzNzMyNTMwMyw1MTE3OS41NTA1NzUxODc4NAorMTksU2F0IDEyIEZlYiAxMSw3NDE3LjU4MjEyNjc5NTc0OCw3MDA1LjcyNDEzODM3MjA1OSw3MjQxLjYxMDQwMTk5ODQ2OCwyNjkxMi40NTM2MDIzMjM5MjcsMTk1NDcuNzcwMzk4NDYxMSwxNjc1NC4zNTUyMjI1MzUwMiwyODAwMy41MTc3NjIzMDI4MTQsMC4wLDM4MTUwLjUzMzM5NzM1NzExLDQ0NTk1Ljk0NzUxNjQxNzY2LDI5MDY5LjUyOTk1MTQ1NDE3Nyw0MDQ2OS41NjM5MDg3NTMzNCwyOTkxMy4xMjI2Nzc0MDc5ODQsMTg5ODcuMDA5ODEzNjY3NTMzLDQzODYwLjU0ODMwNTg1MTcwNiwxNjg5MS45Mjg1OTEyMDcwMDUsMjQwNTEuNDA5MTgzNzkyNDg2LDI1NDE2LjkyNzM5MzM5MjYwNSwzMDQwMS40ODg4ODQ1NDE4OCwyOTY4NC41NzA5OTAwMzA2MDYsMTQ3MDguNzA4MDU3MDQ3NTI2LDAuMCwxNTY1NC44MzczNzk4NTc2OSw5NTU4LjA5NjUwMTQ2ODczOSwxOTkzLjA0NDg2MDUzMzMsNzgyLjA5MDMwNzU3ODQxNDIsMzcwOC42NjgwOTYyOTUxNDYsMTI5MjEuNTk4NDM1MzYxMTUsOTkwNy4wNjE3MTEzMzg0NjksODkwNC45NjA4MjI5MDY5MjcsNzYwOS4wOTY2Nzc2ODE1MzUsNDQzMi41MTgwNTkzMTM5MDUsNzk5LjQzMjg2Nzg1MDQwODcsMTIyNjEuNzU2NDcyNDI0NzgyLDc3NjcuNDExOTI2MzQ1OTU5LDEwMzc3LjIzMTQzMzUzOTUzNSwwLjAsMC4wLDAuMCwwLjAsNzQ5Ny45NDI4NTM3NTUxOTksNzE2NS43ODgwMjM5MDc4Mjk1LDAuMCwxNzYxNS4wNjIzMDMxMDk4NCwzNjEwLjYyNzcyNDI2Njg3MDcsMTQ4MTEuNjc2OTY3OTcwNDMyLDAuMCwwLjAsMTgwNjEuNDM4NTA3MjcyOTUzLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDMxMzQ5LjEzNjU2Mjc0ODk4MywwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsNjQ4MTUuNzczNjgzNDY2NTgsOTYzMDQuNzg1ODc4MjA1ODUsMjc4MC4xMjEwOTA3NTkzNjEzLDUxNDMuODA5MzA4NDg0NTg5LDE4MzQuODQxOTM2MzM3OTY1MywzNTQyLjE4ODY2MzU2NzI0NzcsMTE4NC40OTU0ODgzMjYxMzUsMzQzMTMuNjczNzkzMjk5NTYKKzIwLFN1biAxMyBGZWIgMTEsNDk3Mi4xNTM5OTI0MDE5MzUsNDY5Ni4wNzczMjY2NTg1NTQsNDg1NC4xOTY2MTc3NDIwODYsMTgwMzkuOTU3MTM2NTM1NDUsMTMxMDMuMjYyMzUyNTg2OTcsMTEyMzAuNzgwMTYzMzc4MzgyLDE4NzcxLjMxOTMxNDQzNTQ4LDAuMCwyNTU3My4wNjczMDE2MzIyOTgsMjk4OTMuNTU3NTkwMzc0NzcsMTk0ODUuODg4NjU0MDk4MTU1LDI3MTI3LjU1OTk0MDY5NDE0LDIwMDUxLjMxNzc2OTIzNzIyMywxMjcyNy4zNzMyOTE1OTYyMywyOTQwMC42MDQ3NTc3MjM4NTcsMTEzMjIuOTk4MzUwMTk0MjEsMTYxMjIuMTQxNzEwMzEzMDYsMTcwMzcuNDc1OTM5Mzc4NTgzLDIwMzc4LjcyNzQyNzM4ODMzLDE5ODk4LjE2Mjk5MTM2NTIzMiw5ODU5LjU0MTg2MTMyMDIyNCwwLjAsMTA0OTMuNzUxMzEyNTAzMTA3LDY0MDYuOTgzNjg2NDg0Njg3NSwxMzM1Ljk3NzkyMjU4MTg0NDcsNTI0LjI1MDgxMDk0NzgzOTMsMjQ4NS45OTQ1Njg4ODcwMTEsODY2MS42MDY0NTc1MTQxNDMsNjY0MC45MDIwNjIwMTUwNTYsNTk2OS4xOTUxMTM5NTQ5NDcsNTEwMC41MzAwMzQ5NjAzMTgsMjk3MS4yMDU3MDkzOTA4ODQ3LDUzNS44NzU4NzY3NDcwMjU2LDgyMTkuMzAxMTYyNTY5NTE0LDUyMDYuNjUxOTE5NzI2NjksNjk1Ni4wNjYyNTE4MjYxMTIsMC4wLDAuMCwwLjAsMC4wLDUwMjYuMDIxMzk4NTkzNTQ5LDQ4MDMuMzcxMzU3NzcyOTU0LDAuMCwxMTgwNy43MjkzNzMyMTcxMTMsMjQyMC4yNzYxNDIxOTk2OTY2LDk5MjguNTYzOTg2NDI2MDc0LDAuMCwwLjAsMTIxMDYuOTQ0MjkwOTIyNTk2LDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDIxMDA4Ljc3ODIwNDUzNjQyLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCw0MzQ0Ny4zMTIzOTY2NzI0MTYsNjQ1NTUuMDI4NDk5MzcyMzgsMTg2My41NzA4OTc0MjgxOCwzNDQ3Ljk5ODQ5MjI1MDQ4NSwxMjI5LjkzMTMzMTE1ODc1OSwyMzc0LjQwMDA2Nzg4MzcwMzMsNzkzLjk5MTA3MDIxNTA4OSwyMzAwNS45NTUwODUxMDAwMTMKKzIxLE1vbiAxNCBGZWIgMTEsMzMzMi45MzQ0Nzk0NDMwODQ1LDMxNDcuODc0NzU2OTA5OTc0NiwzMjUzLjg2NTI4Njk1NDQ0MywxMjA5Mi41NDQ4NDg3NTQ1NCw4NzgzLjM3OTM4NzQ1NzA4Nyw3NTI4LjIxNzA0NTMyMjYzNiwxMjU4Mi43OTE1NzU1MDY4NzUsMC4wLDE3MTQyLjEzOTU4MDc0ODI4NCwyMDAzOC4yNTA4MTgxNDIzMDQsMTMwNjEuNzgxNzI2MjA0OTQxLDE4MTg0LjE0NzE1Mzg2MTg1LDEzNDQwLjc2NjU4NDI4MTYzOSw4NTMxLjQxMzQxNTgyMDY1NCwxOTcwNy44MTQ2NTQwMTg2Niw3NTkwLjAzMjc0NDMwMTM2NSwxMDgwNi45OTQ3MjkyMjI0MTcsMTE0MjAuNTYxNjA5Mjc2NTg1LDEzNjYwLjI2OTQ1MTM2OTg5OSwxMzMzOC4xMzc0Nzc4MTAxMzMsNjYwOS4wNDg1MjczMjI4ODcsMC4wLDcwMzQuMTcxODM0MDk2MjE0LDQyOTQuNzI5NTgyMDk3NzgxLDg5NS41MzI3Nzg5MDI2ODI4LDM1MS40MTU4MjYyOTA2MDQwNiwxNjY2LjQxMTk4NzA0MDg4MjcsNTgwNi4wNDg0MTU1ODIxNTksNDQ1MS41Mjk3NTc3MTAxNzMsNDAwMS4yODc0MjQ5MjMwNjE3LDM0MTguOTg3NTEzODQ4NTIsMTk5MS42NTg3Mzk3NDkzNjg2LDM1OS4yMDgzNDA5MDAzOTA5Nyw1NTA5LjU2MjMxMTEyNjQ0MSwzNDkwLjEyMzE0MDIzOTM4LDQ2NjIuNzkwNjMxMDY4NTE4LDAuMCwwLjAsMC4wLDAuMCwzMzY5LjA0Mjg4MTQ5MzQ5MzUsMzIxOS43OTYwOTY0OTE1ODksMC4wLDc5MTQuOTU3NjY0NjM5MjIxLDE2MjIuMzU5NjA4NDE4NzM2OCw2NjU1LjMxNTQ0MTIxMTk3LDAuMCwwLjAsODExNS41Mjc0MjEyMjkyNzcsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMTQwNzguOTg1OTQ5Njk4MjMyLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwyOTEyMy42MDQzMjY2NzM2MTIsNDMyNzIuNTI5NDk4NDM4MDQsMTI0OS4xODg5MjQ2NDI0MTY5LDIzMTEuMjYyNDk4NTk3Mjk1LDgyNC40NDc2MjMxNDg5NTQxLDE1OTEuNjA3OTU2Mjk3MTU3Miw1MzIuMjI4MTI4NTYwMzE2LDE1NDI0Ljc2MDA4ODA4MDkyNAorMjIsVHVlIDE1IEZlYiAxMSwyMjM0LjEzMTkyOTIzNDI2NiwyMTEwLjA4MjczNTUwNTI3OTMsMjE4MS4xMzAyODQ5OTMzNzQ1LDgxMDUuODcyMDgzMjc0MjQyLDU4ODcuNjcyOTk3MjEyNjMyLDUwNDYuMzEyODQzODAxMDMzNSw4NDM0LjQ5NDE2NDU2NDg5OCwwLjAsMTE0OTAuNzE1MzQ2Nzc3NDExLDEzNDMyLjAzNjAxMzU5MDMwNyw4NzU1LjU3MDc0MDE5NjI2LDEyMTg5LjE5MzY0MDg5MTk1LDkwMDkuNTg2MDMzNjEwMjM4LDU3MTguNzc1MjIwODU4MDM5LDEzMjEwLjUzODExNDU0Nzk5NSw1MDg3Ljc0OTEyOTk1MzEwNSw3MjQ0LjE0MjQwMTQwMDE2MSw3NjU1LjQyODQyMTU0MzgwNCw5MTU2Ljc0ODkwNDQ1MTQ1NSw4OTQwLjgxNzQ2ODY1NjM2LDQ0MzAuMTc1OTk4OTA0NzI1LDAuMCw0NzE1LjE0NDU2MzIwODA1LDI4NzguODQyMjE3MjYyODA2Niw2MDAuMjkzMzQxMzA3MDUzNCwyMzUuNTYwOTgxNzEwNDA4MSwxMTE3LjAyODkyNzY1MjAyMDcsMzg5MS45MDkxMzUzMDkzNzA0LDI5ODMuOTQ4NDc3NTI4NjAxLDI2ODIuMTU1MzIzMzU1NTg4NywyMjkxLjgxNDk4MDg5ODkzNywxMzM1LjA0ODI2MTU0MTU5OSwyNDAuNzg0NDU4NDQxMjM3MzUsMzY5My4xNjg2MzMwMjA5ODMsMjMzOS40OTg1OTg4MDU2NTgsMzEyNS41NjA4MjEwODkxODE0LDAuMCwwLjAsMC4wLDAuMCwyMjU4LjMzNjEwNTU5MzU3LDIxNTguMjkzMDMyNTEwNDA4LDAuMCw1MzA1LjU1MjczMzIzNjY2LDEwODcuNDk5NzQ2NjExODY0Myw0NDYxLjE4OTYyNjc1MjU4LDAuMCwwLjAsNTQzOS45OTg2MDk2ODU4OTIsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsOTQzNC42NTI1NDc2MzEzNDcsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDE5NTIyLjEyODIzOTIyMDI2NywyOTAwNi40MzI3NDE5MjAwMjQsODM3LjM1NjA1MzQ3MjY2NzYsMTU0OS4yODQ5ODQ5OTA0MDU1LDU1Mi42NDM1NTQ4NjcwNDczLDEwNjYuODg2MzA1NzIyMDc5NywzNTYuNzYzMDQ1NTk0NTUwMjUsMTAzNDIuMTUyNTUzODAxNjQKKzIzLFdlZCAxNiBGZWIgMTEsMTQ5Ny41ODI4MzgxODk1MDE3LDE0MTQuNDMwMjA5MTEyOTE1MiwxNDYyLjA1NDc4NzMyODk2NDcsNTQzMy41MjY0NDU2MDc2NzgsMzk0Ni42MjM3MDc0NTQ2NjU3LDMzODIuNjQzMzQ4OTA5OTY4Niw1NjUzLjgwODMyOTAzMjM4NywwLjAsNzcwMi40NTM4NTk4OTkyMjgsOTAwMy43NTk1MTUxMjg4MzcsNTg2OS4wMzIzMTA3MTMyNjYsODE3MC42NTc2ODEwMDEzODIsNjAzOS4yODY1Mzc2ODkwMzk1LDM4MzMuNDA4MTg2MDQwMTgsODg1NS4yODUwOTA2OTU2ODEsMzQxMC40MTg5MTE0MDM2ODQsNDg1NS44OTE5ODkwODk1MSw1MTMxLjU4NTE0NjM3MTE3OSw2MTM3Ljk0OTk3MjE5MjEzMyw1OTkzLjIwNjg1ODIxNTMzOCwyOTY5LjYzNDYzMDQ4MTYwMjUsMC4wLDMxNjAuNjU0Njk3NzEyMTEzNCwxOTI5Ljc0NDkwMDkyMjU5OCw0MDIuMzg4NTA0NDgyMzY0NTcsMTU3LjkwMTE4NzAwNzExMTMzLDc0OC43NjY1OTI0ODQxOTc5LDI2MDguODIzNzAxMzA2NjI4LDIwMDAuMTk5NzA2ODgxMjk2NiwxNzk3LjkxMTMxNzM3MDkwMTUsMTUzNi4yNDg5MjkwNzU2NDYyLDg5NC45MDkyNjU4NjYyNjg4LDE2MS40MDI1ODY4MTQ5NzkxLDI0NzUuNjA0MDEwMjEwNjUwNCwxNTY4LjIxMjIwMTY1ODM3NDIsMjA5NS4xMjUyNjI4MDYxOTE2LDAuMCwwLjAsMC4wLDAuMCwxNTEzLjgwNzM3NjUyMzExMjcsMTQ0Ni43NDY1MjUxMTY1Mjk3LDAuMCwzNTU2LjQxNjk3NjI5MTk0ODIsNzI4Ljk3MjU5ODE0ODkxODksMjk5MC40MjM2Nzg4ODQzMzU1LDAuMCwwLjAsMzY0Ni41Mzg3MDc1MTE2MTA1LDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDYzMjIuMzgxOTc3NTMxMDkxLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwxMzA4Ni4wNjg4MzY1OTM0MzcsMTk0NDMuNTg1ODA3NTI0ODQ3LDU2MS4yOTYzMzExMjc4NDA0LDEwMzguNTE2MzgwNjI0NjM4NSwzNzAuNDQ3OTA5ODAxMTg3NDUsNzE1LjE1NTAwMDg0OTIxMjYsMjM5LjE0NTMyODYxMzQ4OTIsNjkzNC4zMzA3NzQ4OTM5NzE1CisyNCxUaHUgMTcgRmViIDExLDEwMDMuODU5NDA4NjEwODQ3OSw5NDguMTIwNTU2MDI3NDU4MSw5ODAuMDQ0MjUzMTM3MzMwMywzNjQyLjIwMDI4Nzg2NzQzMDIsMjY0NS40OTk5NjE2MzQ2MjA0LDIyNjcuNDUyNzY4MDEwNzQ5LDM3ODkuODU5NTkyOTcxMjEyNCwwLjAsNTE2My4xMDcyMjgxNzc0OTMsNjAzNS4zOTgxNTczNzkxMzIsMzkzNC4xMjg0ODY0NTcwOTA3LDU0NzYuOTUzNTEzNjU1MjA4LDQwNDguMjQxNzA3NjgxNTI4LDI1NjkuNjA5MzU3NDcyNzA3NCw1OTM1Ljg3MjgxMjg2NzY0MywyMjg2LjA3MTI3NzEzNjA4MywzMjU1LjAwMDQ4MjIwMjg1NiwzNDM5LjgwMzA2MDU3NzM2NCw0MTE0LjM4OTMxNTkzMDUwMyw0MDE3LjM2NTE0MjY0ODEwODgsMTk5MC42MDQ4NTE5ODIzNzMyLDAuMCwyMTE4LjY0OTM4MjY5NzM4MTUsMTI5My41NDYxOTAzMDc1MjM2LDI2OS43Mjg5NzY0ODE3Mzc2LDEwNS44NDQyODk5ODkwMjAzLDUwMS45MTMwNjI1MzcxMzQ0LDE3NDguNzQ2MTQ2OTEwODAyNywxMzQwLjc3MzQ0MDgwNzM5OTgsMTIwNS4xODIyNzU1NDE5NjAzLDEwMjkuNzc4MDU0NDA0ODgyNCw1OTkuODc1Mzg4MTgxNTAwNSwxMDguMTkxMzQ3NTYxMjY0OTMsMTY1OS40NDYzNTE5OTU1NDc3LDEwNTEuMjAzNjY4NDYzNzA1LDE0MDQuNDAzOTE5MjA0MTkwMywwLjAsMC4wLDAuMCwwLjAsMTAxNC43MzUwMzc2ODUzOTkyLDk2OS43ODI4MjIwNzY4NTM2LDAuMCwyMzgzLjkzNjY2ODg0NTczMDMsNDg4LjY0NDc1NjQ3NzAyOSwyMDA0LjU0MDE2MjQ3MjY5NjIsMC4wLDAuMCwyNDQ0LjM0NzA0ODQ5MDkyNSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCw0MjM2Ljc3ODY3NTIyODU1OCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsODc3MS44NTA4NzA4NTA2MjcsMTMwMzMuNDIwMjkwNTM1MDgzLDM3Ni4yNDgwMzY5MzgzOTY3LDY5Ni4xMzgwNzg3MTAxNDY1LDI0OC4zMTg1NjM4NjkwNDQ1Nyw0NzkuMzgyNTQ3NjAyODQzOTQsMTYwLjMwMzg0NTY1ODUyMzk4LDQ2NDkuNDIxOTkwMzU4NDQKKzI1LEZyaSAxOCBGZWIgMTEsNjcyLjkwNjgyNDYyMzM0OTcsNjM1LjU0Mzk2ODg1MDYwNzEsNjU2Ljk0MzA1NDY4NjkwNzksMjQ0MS40Mzg5MTk5NjA1Njc1LDE3NzMuMzMwOTY5OTA5NTkzNSwxNTE5LjkxODQ1NTcyOTcwOCwyNTQwLjQxNzg3Mzg1NzA4MywwLjAsMzQ2MC45MzI5MzU3MjkwNjE3LDQwNDUuNjQ2ODA1MzAyNzczLDI2MzcuMTI0MTY3NzYxMTczMywzNjcxLjMxMDMxMDg1NjYwOTIsMjcxMy42MDg3NzU1Mjg2MjA4LDE3MjIuNDU5OTk2MzE3Nzc1NywzOTc4LjkzMjk5NzYwMTkwNTMsMTUzMi4zOTg4MTA3OTQ2NTM0LDIxODEuODkxMjI4ODMwMTE1MywyMzA1Ljc2ODA1Mzc0MTU2NTQsMjc1Ny45NTY1Njg1MTgxNDcsMjY5Mi45MTkzNDUzODE5ODMsMTMzNC4zNDE4MTk3MTg0NTYsMC4wLDE0MjAuMTcyNjAyMjMxMTczNiw4NjcuMDg5NjA2MzMwNDE4NSwxODAuODA0NjY5OTczMDU2NzIsNzAuOTQ5NTIxODg1MzI0ODgsMzM2LjQ0MjI1NzAwNTEwNTI2LDExNzIuMjE5MTQ0MTMxNDA0Niw4OTguNzQ2OTY2ODEwMzQ4OCw4MDcuODYyMjI5NTkwMTYxNiw2OTAuMjgwNjA1NzQyNjk1OCw0MDIuMTA4MzQyMjMyNDA3MjcsNzIuNTIyODAxMDE2NDQ2MywxMTEyLjM1OTcyNDY1NDQzMzYsNzA0LjY0MjYxODc4NzgwODMsOTQxLjM5OTczNTUxNDc4MzQsMC4wLDAuMCwwLjAsMC4wLDY4MC4xOTY5NzM5ODQ0Njg3LDY1MC4wNjQ2MTQ0MDc1NTQ1LDAuMCwxNTk3Ljk5OTkxOTI4NzUxMzksMzI3LjU0ODI0ODkxNzQ2NzQsMTM0My42ODI5MzQwNzM0NjMsMC4wLDAuMCwxNjM4LjQ5NDE5MjA4MzczMzIsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMjgzOS4xNjc0NDY5NTkwNzAzLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCw1ODc5Ljk0NTIwNDQyMDQwNiw4NzM2LjU1OTUwODY4ODQ4MiwyNTIuMjA2NTAzODU0Mjk4MTgsNDY2LjYzNTEyODQxMTUyODYsMTY2LjQ1Mjg0Njc1ODA3MSwzMjEuMzM5NjA3MDQwODYxNSwxMDcuNDU0ODM5NjIzNjY4MDUsMzExNy40MTAxODY4OTI4NTE1CisyNixTYXQgMTkgRmViIDExLDQ1MS4wNjI3NTkxMjgwNjc5LDQyNi4wMTc2OTc2MTcyMjU2LDQ0MC4zNjE5MjgyNjk4NzY0LDE2MzYuNTQ0ODE1OTg3NjY0NiwxMTg4LjY5ODgzNzQzOTE5MTcsMTAxOC44MzE0MTQ5OTU0NjczLDE3MDIuODkyMzY3MjQ4MDY2OSwwLjAsMjMxOS45MzE4MjcxNDU1NDUsMjcxMS44NzcxMDM0NTkyMzY0LDE3NjcuNzE2NTA5NTQ3MTgwNSwyNDYwLjk1MTk0NDM2MDUzNiwxODE4Ljk4MDQ2NzYzOTA4ODEsMTE1NC41OTkwMTcyNzM1OTg3LDI2NjcuMTU3NTE4MTEzNDY5NSwxMDI3LjE5NzI0Mzk0MDEyNTYsMTQ2Mi41NjQ4NjMwMzkyNzM5LDE1NDUuNjAxOTQ5ODg2ODYxMywxODQ4LjcxMjg1ODY0NTAxNjIsMTgwNS4xMTcxMjExMDY5OTA1LDg5NC40MzU3MjM5MzQwODczLDAuMCw5NTEuOTY5Nzk1NzU3NDQ1MSw1ODEuMjI3MzE5OTM2MjkwMSwxMjEuMTk2OTQ3ODA0Njc2NDYsNDcuNTU4ODY4Mzc0MjcyOTc2LDIyNS41MjM5MDE5NDEzMTQsNzg1Ljc2MTY4NjYyMDc0NTYsNjAyLjQ0Nzg3NTA1OTYyNjgsNTQxLjUyOTI4NDkzOTczOTMsNDYyLjcwODc0ODM4MTU4MTI0LDI2OS41NDExNzgxODIxMTQyLDQ4LjYxMzQ2ODUwNTgxMzQsNzQ1LjYzNjczMzMyNjk1Miw0NzIuMzM1ODg5OTAyMDg0OTQsNjMxLjAzODg2OTg3ODMyNjEsMC4wLDAuMCwwLjAsMC4wLDQ1NS45NDk0OTA0OTI1ODEzLDQzNS43NTExNzM2NDkyMjA4NSwwLjAsMTA3MS4xNzA5NjQ5OTAxNTY4LDIxOS41NjIwNzIzMzczOTY5Niw5MDAuNjk3MjU3NzE1NzY0NCwwLjAsMC4wLDEwOTguMzE1MDc3MjkyMTQwNCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwxOTAyLjU5NTE1Mjk3NjQ3NjEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDM5NDEuNDQzNjE1MDM4Nzc2NCw1ODU2LjI4ODcwNjA2NDcwMSwxNjkuMDU5MDA5ODU5NTU5LDMxMi43OTQ3NTk3Mjc5ODg0MywxMTEuNTc2NjM2NzI4OTI5NSwyMTUuNDAwMjk2ODM5MTgwNzgsNzIuMDI5MTA1MTcyODM4MDQsMjA5MC4yMDcyMDU3NDcwMzkKKzI3LFN1biAyMCBGZWIgMTEsMzAyLjM1NjI5MjQ3MjAwNDUsMjg1LjU2ODA5MjE4MzAwMzE2LDI5NS4xODMzMTM4MTM5ODU1LDEwOTcuMDA4MzcxOTIzMjkwNSw3OTYuODA4MzUxMTIzMTUzNyw2ODIuOTQyODU2NzQ5MDU5NywxMTQxLjQ4MjQ0ODMzMDAxOTIsMC4wLDE1NTUuMDk2MjA3NDUzNDExOCwxODE3LjgyNDg4MTQ1NzAxMzQsMTE4NC45MzUzNTM1NjY4MTA2LDE2NDkuNjI0NzgyMzQwNjczLDEyMTkuMjk1MTIyNTIwODc2Nyw3NzMuOTUwNTY2OTQ0MzgxNiwxNzg3Ljg0ODQ1ODU0ODIxNyw2ODguNTUwNjM3NDIyNTMzLDk4MC4zODYxNjY5Nzg2NDg2LDEwMzYuMDQ3NTY5MzE5NzQ1LDEyMzkuMjI4ODA5MDE0ODUwOSwxMjEwLjAwNTcyMzUyODc4NTIsNTk5LjU1Nzk2MzY1NDU0MjgsMC4wLDYzOC4xMjQxOTA0MDUyNDA4LDM4OS42MDgxNzMxMDQ1MzI0LDgxLjI0MDcxMjE5NzA4MTg1LDMxLjg3OTY1MDUwMjc1MDc0MiwxNTEuMTczMTMzODM3NTM1ODMsNTI2LjcxMTYwNjE0NjQ1ODQsNDAzLjgzMjczMTA4Nzc1NTcsMzYzLjAwMDAyMDkzNDcwNzk1LDMxMC4xNjI4Mjk1MDM5NDE5LDE4MC42Nzg3ODUwNTY5MTY3OCwzMi41ODY1Njk4Mzc5NDM1Niw0OTkuODE1MDU2MDE0NTUyNywzMTYuNjE2MDkyOTU0MTc1Nyw0MjIuOTk3ODQwNjM1MjEzOTUsMC4wLDAuMCwwLjAsMC4wLDMwNS42MzE5NjUxOTc3NjI0NCwyOTIuMDkyNjMzNzYwMjk1MzcsMC4wLDcxOC4wMjcwOTI3MzU3Mjk0LDE0Ny4xNzY4MDE0ODkyOTUxNCw2MDMuNzU1MTkzNjQzMjgyOCwwLjAsMC4wLDczNi4yMjIzMjgzMDMyNTExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDEyNzQuOTc1NjQ4NTA4NTk1NCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMjY0Mi4wMjc2NDMxOTE0ODgsMzkyNS41ODYxOTYxMDc2OTk0LDExMy4zMjM1OTk0MjMxMzc1LDIwOS42NzI1MTY2MTEzMTY0Nyw3NC43OTIwMjczMjkxMjAxOSwxNDQuMzg3MDgxMDI1MTc2MzEsNDguMjgyNTM0NDEzMjQ3NjksMTQwMS40NzM4ODU0ODc2ODQxCisyOCxNb24gMjEgRmViIDExLDIwMi42NzU0MDU0NjcxNTgzMywxOTEuNDIxOTQyNjMwOTE3NjcsMTk3Ljg2NzIxNTk0MzM1MDQ2LDczNS4zNDY0MTc4MzkxNjc0LDUzNC4xMTY0MDM5MzkwOTA4LDQ1Ny43OTAxMTAwNDE1NTM2LDc2NS4xNTgyNzEyNDgzMjI4LDAuMCwxMDQyLjQxMTc1ODAyNjMxMzUsMTIxOC41MjM5ODY3MzU2MjM4LDc5NC4yODU2MTM0MTY2OTU3LDExMDUuNzc2MTMyMTc4NjQ2Myw4MTcuMzE1MzE2NTkzOTUwMyw1MTguNzk0Mzc4OTI0NzAzNiwxMTk4LjQzMDE5NzMyNjM2OTYsNDYxLjU0OTExNjM4NjI2OTY1LDY1Ny4xNzIyNDYzMDAwNzg4LDY5NC40ODMxODU2NDI5Myw4MzAuNjc5NTkwODkwMDIyMyw4MTEuMDkwNzc4NDYxMjYwOSw0MDEuODk1NTY2MjkxMjE0MiwwLjAsNDI3Ljc0NzI3MTE3OTI4MDM1LDI2MS4xNjIwNjc0NzkwMTk4Nyw1NC40NTcyNTY4Njg1OTU5NiwyMS4zNjk1NjA1MjQwMTE3NywxMDEuMzM0MzQyODIzNzA4NDcsMzUzLjA2NTIxMTQ2Njk1MTQsMjcwLjY5NzA3MDE1MTc2MTc1LDI0My4zMjc2MTQ3Njg1NDk5LDIwNy45MDgyODE3MDUwMTIwMywxMjEuMTEyNTY0NjU0NTQ0OTcsMjEuODQzNDIyNTQxOTY4NzYsMzM1LjAzNTkyMTcyMDQ2Mjk3LDIxMi4yMzQwMzE4ODQyNzY1NiwyODMuNTQzODIyMjk1MDU3MywwLjAsMC4wLDAuMCwwLjAsMjA0Ljg3MTE1MzcwOTg3ODIsMTk1Ljc5NTQ3MTk0OTEwNiwwLjAsNDgxLjMwNzc2NzYyMzUwMTA0LDk4LjY1NTUyMjE3NjU4NjY2LDQwNC43MDkwNTI2MDE4NTczNywwLjAsMC4wLDQ5My41MDQzOTQwNDc0NzE4NiwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCw4NTQuMzkyNjQzMDMwMDI3MywwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMTc3MS4wMDM0MDYxNTE1NTQ0LDI2MzEuMzk4MTAxNTE2NTI0NSw3NS45NjMwNTA5ODk2MTYzLDE0MC41NDc2MzY2MDQ3NjA3OCw1MC4xMzQ1NzU4MDM2MjMzNSw5Ni43ODU1MTczNTAyMTg5LDMyLjM2NDczODE2NzYxNDE4NSw5MzkuNjgxOTAxMDAzMjgxNAorMjksVHVlIDIyIEZlYiAxMSwxMzUuODU3MzM0NTU1MzI1NzQsMTI4LjMxMzkxNTc0NzY3NTY1LDEzMi42MzQzMDk5Nzk0NzM5Myw0OTIuOTE3MjUzOTMyMDQ4MjUsMzU4LjAyODc5Mzk0MzYxODUsMzA2Ljg2NTc2ODkwMTE2NDEsNTEyLjkwMDcyOTE0OTQxMTIsMC4wLDY5OC43NDkyMjcyNTkwMjM0LDgxNi44MDA3Mzg4MzY4Mzk1LDUzMi40MjUzNjI5Mzc4ODIsNzQxLjIyMzYyMTAyMzA4MTksNTQ3Ljg2MTA2NzIyODcwMzYsMzQ3Ljc1ODEzNzQwNDY3MzEsODAzLjMzMTQ3NDIwNjcwMzIsMzA5LjM4NTUwNTIzMjIzMjczLDQ0MC41MTU1NTk5NDMxMjI5LDQ2NS41MjU4MjA4NDM3NTU5LDU1Ni44MjA5NjYxNTM3NTM3LDU0My42OTAxOTc1ODU0NTMsMjY5LjM5ODU1MDI1ODYwNTksMC4wLDI4Ni43Mjc0NTk1NjQxNDQsMTc1LjA2MjEwMTM1Nzk2MjIsMzYuNTAzNzc2ODA2NjA5MTEsMTQuMzI0NDM5MjUxNjE1OTkyLDY3LjkyNjQxNTA2MzU5NTEzLDIzNi42NjY1OTcyMjk5NDg0LDE4MS40NTM2MDIzMTU0MjA2MiwxNjMuMTA4MzQ2MjY1MDkwNCwxMzkuMzY1MDM1MDM4NzM2OSw4MS4xODQxNDg1MDE4ODc0NSwxNC42NDIwNzgzMzg0MDIzNTcsMjI0LjU4MTIwNzU3MzMzMDc0LDE0Mi4yNjQ2NzA5NzYwNzQ4LDE5MC4wNjUwMzQ0NzE0NzQwNCwwLjAsMC4wLDAuMCwwLjAsMTM3LjMyOTE4ODA0ODk1OTQyLDEzMS4yNDU1Nzg5ODcyMjQwNiwwLjAsMzIyLjYzMDEyMDExNDM5NDgsNjYuMTMwNzQ4NTc4ODk4MTYsMjcxLjI4NDQ4NTgwMjE0NTgsMC4wLDAuMCwzMzAuODA1NzYwMTM2OTYzOTUsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsNTcyLjU0OTcxNDA0MzM3OTMsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDExODcuMTM4NjI1Mzk3NDUsMTc2My44NzgyMTQwNDM2MjgzLDUwLjkxOTUzNjEzMzkwODcyLDk0LjIxMTg2MTc4NTQwNzQ0LDMzLjYwNjE5ODE1NzMwODYzLDY0Ljg3NzI0NzM0MjYyMTcsMjEuNjk0NzI0Mzg0MDM3NjYzLDYzMC4wNTI2MjU3MjM5MzIxCiszMCxXZWQgMjMgRmViIDExLDkxLjA2Nzg1OTUxNjIyNzkxLDg2LjAxMTM1NjYzMDM0NjU3LDg4LjkwNzQwMjM3MDEyMTUsMzMwLjQxMjE4ODUwMDA0OTc1LDIzOS45OTM3ODQ3NzY4MTAzLDIwNS42OTgxOTY3NDUxMzA5MywzNDMuODA3NTA3MzQ0NjExMDUsMC4wLDQ2OC4zODU0MzI5NDk3NjY3LDU0Ny41MTc2OTcwMDYyODYsMzU2Ljg5NTI1NTcwMDQ0MzYsNDk2Ljg1Njg1OTUxNjQ4NjQ1LDM2Ny4yNDEwNjcyMDk1MjYzLDIzMy4xMDkxNjA0NzY2OTc4LDUzOC40ODg5ODI0MTI4NTYxLDIwNy4zODcyMjU4NjUwMjkxLDI5NS4yODYyOTYxNjQ0MjEzNCwzMTIuMDUxMTY4OTE1ODExMzMsMzczLjI0ODExMTI0MzcxMTQsMzY0LjQ0NjI5NzI1ODIzODcsMTgwLjU4MzE3ODczNzY1OCwwLjAsMTkyLjE5OTA4OTUyNjUxMjMsMTE3LjM0NzU5MDQzNTY4NzYxLDI0LjQ2OTIwMzg4MTUzMzgzMyw5LjYwMTk1NTA2MzI2Mjg1OCw0NS41MzI0MjAwNTQ0NjA1NCwxNTguNjQyMzAyOTY2MzA0OTIsMTIxLjYzMTkzOTk5Mzk3MDkyLDEwOS4zMzU0NTA2ODc4MzA4Niw5My40MTkxNDA1NTU5NTg2NSw1NC40MTkzNDExMDQ1MDAxOCw5LjgxNDg3NDgyODE1NDQ4OSwxNTAuNTQxMjI3MTQ5ODk3NDUsOTUuMzYyODIzODk4ODg1OTgsMTI3LjQwNDM1MzM1OTcxMTEyLDAuMCwwLjAsMC4wLDAuMCw5Mi4wNTQ0NzIwMzYwODUwMyw4Ny45NzY1MDg1MDc2NTkxOSwwLjAsMjE2LjI2NTM1MzI4NzMyMjE3LDQ0LjMyODc0OTI3OTUxMzk4NSwxODEuODQ3MzU4NjQ4ODcwNzQsMC4wLDAuMCwyMjEuNzQ1NjQ2NTYzMTE0MTgsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMzgzLjY3OTg0NDQzODM2MTk1LDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCw3OTUuNzYyNTEwMTIwMTc4NSwxMTgyLjM2MjQ2ODE0MzcwNTksMzQuMTMyMzcyNTk4NDQ3MzIsNjMuMTUyMDc1MDkzNDYzNzksMjIuNTI2ODk5NTc5NDg0ODQ4LDQzLjQ4ODUwMjU5ODIyNjc0NSwxNC41NDI0MDMwMjA5MDAyNTYsNDIyLjQ0NzU5OTUzNjU4MzkKKzMxLFRodSAyNCBGZWIgMTEsNjEuMDQ0NTg4MTYzMTA3ODYsNTcuNjU1MTE0MjI3MzY0NDksNTkuNTk2MzkwOTg5ODI3MzQsMjIxLjQ4MTgyNzcwNzQxOTgsMTYwLjg3MjU4MjYxMjkxNzM3LDEzNy44ODM1NzEzNTk5MTQxOSwyMzAuNDYwOTc0OTc3NjM4MSwwLjAsMzEzLjk2ODAyMzQ5MjY2MTksMzY3LjAxMTk0NTg1MzQ3ODI3LDIzOS4yMzM5NTE2NjM0NjY4LDMzMy4wNTI5ODQwNzQ5NjExNiwyNDYuMTY4MjUyNDI2NTUzNzUsMTU2LjI1NzY4MjcyMDc4NTg1LDM2MC45NTk4MTk4MTMzMzYxNCwxMzkuMDE1NzYwOTk5MjM4MTMsMTk3LjkzNjI0NzA1MDUyNTA1LDIwOS4xNzQwNzI5NzY3MzA2LDI1MC4xOTU1OTQzMDI2MjA5LDI0NC4yOTU1NjQyMjk1OTkxNCwxMjEuMDQ4NDc3ODQ3MDE1NDMsMC4wLDEyOC44MzQ4NTI2ODg5MzkzLDc4LjY2MDQxMTc4NjY5NzUsMTYuNDAyMTkxNTI1NzcyOTMsNi40MzYzODA0Njk1ODkyNzksMzAuNTIxMjgyMDk3MzIzMDQsMTA2LjM0MTA3NDY4MDY4MjIzLDgxLjUzMjI5NjA2ODYxMTM3LDczLjI5MDE4ODQ2NDE3OTU4LDYyLjYyMDY5ODM2ODA1MzU1LDM2LjQ3ODM2MTExOTcwOTEyLDYuNTc5MTA0ODAwOTY4NTUzLDEwMC45MTA3NjMyNjc2NTc0Niw2My45MjM1ODc3NzE4MzIxNDYsODUuNDAxNjU4OTY0NDg2MTksMC4wLDAuMCwwLjAsMC4wLDYxLjcwNTkzNDA1Njk0MTE0Niw1OC45NzIzOTQ0MTQ1MzIyOSwwLjAsMTQ0Ljk2Njk0NTQ3ODk0OTEsMjkuNzE0NDM3NzYwMjQzOTY4LDEyMS44OTU4ODI2NTU0MDc4NiwwLjAsMC4wLDE0OC42NDA0OTQ0OTg0NDg3NiwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwyNTcuMTEzNDc3MTcxMDUzNTUsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDUzMy40MTUzNTYwMjEwODkyLDc5Mi41NjA5NTc0MDg3NjIzLDIyLjg3OTYwNDcxODYxODM4NSw0Mi4zMzIwODU1MDQyMDc5NywxNS4xMDAyMjY1MjAzODE3MDUsMjkuMTUxMjAzNzg0MDk2MTMsOS43NDgwNjA0OTA1OTA1NDgsMjgzLjI0OTMyNTE3MTEyMDMKKzMyLEZyaSAyNSBGZWIgMTEsNDAuOTE5Mzk1MzE0NjQ4OTgsMzguNjQ3MzYzODY5MTI5MjY1LDM5Ljk0ODY0MDA5NDQwNDMyLDE0OC40NjM2NTE0OTkzODEwNiwxMDcuODM2MDc1MjU3NjA2NDgsOTIuNDI2MDg2MTM4ODE1NzgsMTU0LjQ4MjU1MTU4MjAwMjM3LDAuMCwyMTAuNDU4OTc4NTI3NzU2MTMsMjQ2LjAxNTM2OTI0ODYyMTc3LDE2MC4zNjMyNTE0NDI0Nzg3LDIyMy4yNTIwMDUyMzM4MjQ2NiwxNjUuMDEwOTgwMzM3MzYxNTYsMTA0Ljc0MjYxNjU0NjQyNDg2LDI0MS45NTg1MDk0MTI1MTM5Myw5My4xODUwMTUyNTYzMTM2MiwxMzIuNjgwNTgyODk2NTA4NTgsMTQwLjIxMzUxOTk3Mzk1OTgyLDE2Ny43MTEwNTczOTc4NzI3LDE2My43NTYxNTA0OTc5OTc4NSw4MS4xNDExODk4NDY3MzYxMSwwLjAsODYuMzYwNTUwOTY5NjgxMjEsNTIuNzI3NjMwNDQ3OTcxMjE1LDEwLjk5NDcxMzUyNDQyMTkxOCw0LjMxNDQzMzE4MzI4MDU4NSwyMC40NTkwMTkzMDQyNzA3MzMsNzEuMjgyNTI2NDkzODU4OTgsNTQuNjUyNzExMzA3MTU1MDgsNDkuMTI4MTgyNDY0MTA3MSw0MS45NzU4OTMxNzA5OTEzNCwyNC40NTIxNjcyNDM3MTMwNDYsNC40MTAxMDQxMjY2NDI4ODMsNjcuNjQyNDgxMzA1OTQ2NjUsNDIuODQ5MjQ1NzE4MTgyNDY2LDU3LjI0NjQyMTgxODA1MzgwNCwwLjAsMC4wLDAuMCwwLjAsNDEuMzYyNzA4NTUzMTE2MTksMzkuNTMwMzYyODQzMTcxODEsMC4wLDk3LjE3NDIxMTk2NzE2NzQ1LDE5LjkxODE3NTU4MDM2NjY4LDgxLjcwOTIyMjA1NzExODAzLDAuMCwwLjAsOTkuNjM2NjY0NTYyMjI4MDIsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMTcyLjI5ODIwOTg1ODU2NjgsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDM1Ny41NTg4Njc2NTI3ODA2LDUzMS4yNjkyOTE4OTA1NzA3LDE1LjMzNjY1MTc1NDAwMTkzNCwyOC4zNzYwMzQ1MjQzMzU3NzUsMTAuMTIxOTgwNjE5NzYwNjA2LDE5LjU0MDYyODcwMTYzMTg0Miw2LjUzNDMxNzgyODQ2NjQxOCwxODkuOTE3NDY1ODE5NjE1MjQKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0VJUl9SS19SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vSV8wLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0VJUl9SS19SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vSV8wLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZTcyMjM4Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTRUlSX1JLX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9JXzAuY3N2CkBAIC0wLDAgKzEsMzMgQEAKK2l0ZXJhdGlvbix0aW1lLHN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL25vZGUvdHJhbnNwb3J0L3BpcGUvUEhMCisxLFR1ZSAyNSBKYW4gMTEsMC4wCisyLFdlZCAyNiBKYW4gMTEsMC4wMDU3Nzg5Njc1ODg1NTQyMTEKKzMsVGh1IDI3IEphbiAxMSwwLjY5MzI2MjQ3MTI2MjQzNjEKKzQsRnJpIDI4IEphbiAxMSw1MC4wNTg5Nzg3NjU0NTk1NworNSxTYXQgMjkgSmFuIDExLDIzNjEuMTc3MDMxMzkxMjQ1Cis2LFN1biAzMCBKYW4gMTEsMTI2NTUuNDM0NTA4NDM4NzU1Cis3LE1vbiAzMSBKYW4gMTEsMTY5MzAuODQ5Mzg1NjI2ODQzCis4LFR1ZSAxIEZlYiAxMSwxNjk3MC44NzM1ODY0NDgxMworOSxXZWQgMiBGZWIgMTEsMTUyNDUuMjUxMTYyNjIyOTQ4CisxMCxUaHUgMyBGZWIgMTEsMTI4OTMuNDI5NDA2NDc1ODk0CisxMSxGcmkgNCBGZWIgMTEsMTA0NzkuMDMyMTAwODEzNjIyCisxMixTYXQgNSBGZWIgMTEsODI3Ni45ODYxNjg2Nzc3NAorMTMsU3VuIDYgRmViIDExLDYzOTguNDQxNTIwMTUxMTM3CisxNCxNb24gNyBGZWIgMTEsNDg2My44OTYyODExNjQ0ODE1CisxNSxUdWUgOCBGZWIgMTEsMzY0OC4wNDI0NTI5NTkwNjczCisxNixXZWQgOSBGZWIgMTEsMjcwNi4yNjc3MTY2OTg5NTgKKzE3LFRodSAxMCBGZWIgMTEsMTk4OS40MTMzOTYzNjU3MjAyCisxOCxGcmkgMTEgRmViIDExLDE0NTEuMjk5Nzk2NjI3MjA0CisxOSxTYXQgMTIgRmViIDExLDEwNTEuODYyMzc0Njk1MjA1MworMjAsU3VuIDEzIEZlYiAxMSw3NTguMDgyODQxOTM1MTcxNQorMjEsTW9uIDE0IEZlYiAxMSw1NDMuNjk4NTcwNDg2NzA1MworMjIsVHVlIDE1IEZlYiAxMSwzODguMjYyMjE3MjQxNTkyNworMjMsV2VkIDE2IEZlYiAxMSwyNzYuMjM3NjYwNjc3MjE1NgorMjQsVGh1IDE3IEZlYiAxMSwxOTUuODYyMzk0MDM1OTg0MDQKKzI1LEZyaSAxOCBGZWIgMTEsMTM4LjQ1MDEyMzU3MjEwMTc1CisyNixTYXQgMTkgRmViIDExLDk3LjU5OTc2MDU4Njc5NTY3CisyNyxTdW4gMjAgRmViIDExLDY4LjYzMzQ2NzY4MDI4NTcKKzI4LE1vbiAyMSBGZWIgMTEsNDguMTU2NzEwMTI2NzAyNjEKKzI5LFR1ZSAyMiBGZWIgMTEsMzMuNzIwOTE1MDAzNjEzOTI1CiszMCxXZWQgMjMgRmViIDExLDIzLjU2ODkzNjcyOTY0NDM4CiszMSxUaHUgMjQgRmViIDExLDE2LjQ0NTQzOTQ1OTU4MTQ3NQorMzIsRnJpIDI1IEZlYiAxMSwxMS40NTcwOTMzMDQ1Nzc3NzUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0VJUl9SS19SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vSV8xLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0VJUl9SS19SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vSV8xLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYTRlMWYwCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTRUlSX1JLX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9JXzEuY3N2CkBAIC0wLDAgKzEsMzMgQEAKK2l0ZXJhdGlvbix0aW1lLHN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL25vZGUvdHJhbnNwb3J0L3BpcGUvUEgtMTEsc3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vbm9kZS90cmFuc3BvcnQvcGlwZS9QSC0zLHN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL25vZGUvdHJhbnNwb3J0L3BpcGUvUEgtNyxzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9ub2RlL3RyYW5zcG9ydC9waXBlL1BILU5DUgorMSxUdWUgMjUgSmFuIDExLDAuMCwwLjAsMC4wLDAuMAorMixXZWQgMjYgSmFuIDExLDQuMjM2MDQwOTUyNDUyMTc3RS03LDIuNjg3NzY2ODQ5MDQ0ODM5OEUtNSwxLjA3NTAwMTI1NTMzNzk4NzNFLTQsMC4wMjc0NTMzMjE5ODY5Mzg3MTQKKzMsVGh1IDI3IEphbiAxMSw5LjAyMjkyNTM3NTk5ODg0NUUtNSwwLjAwNjAxOTQxOTE5MjgyMzEwOCwwLjAyMjg5OTA2MjM4MzY2OTc0LDEuNzYzNDU0ODMwNjY5OTAzOAorNCxGcmkgMjggSmFuIDExLDAuMDA4NjQzODExNDc1MDEzODksMC41ODg3NjQ4NTQ4OTI2NTc1LDIuMTkzODc1MDc4MDc1MDcxNSw5MS45ODUzODQ0MjMzMTI4MQorNSxTYXQgMjkgSmFuIDExLDAuNTQ3NTI2NzMzOTM4MzMzMywzNy4xNzY4MTM4NTk3MzAwNywxMzguOTgzMzkxNTc0NjI3ODYsMzA2Ni41MjAzNzg3NDI4NjczCis2LFN1biAzMCBKYW4gMTEsNS4zMzgwMjIyMTE0MjM2NSwzMzEuMzA4MzIwODA5MTg3OCwxMzU1Ljk1NjQxNjI2NzE2NjgsMTE1MDMuNDUzMjk2MTU0MDM1Cis3LE1vbiAzMSBKYW4gMTEsNy42OTY4MjEzMjg5OTM1MzgsNDkyLjE0NjI5NDIxMTgyODY2LDIwMDEuMTMxMTM3ODE3MDE2NSwxNDY0MS4zNTc1NDQ5MjI0NTQKKzgsVHVlIDEgRmViIDExLDcuODg0MzEyNDM3NjExNDgxLDUwOC4wMDE2NDgyNDMzNjM0MywyMzY5LjAyNzc0ODE1NTcwNSwxNDQ0MC41MTczMDM3MTE0MgorOSxXZWQgMiBGZWIgMTEsOC4xMTk0MzI2NTI1NTUzLDQ2MC4xMzM4NDg4MjkxNjkxNSwyNDg2LjYxMDA0MjYwODk1OTIsMTI3OTcuMzI5ODczMzYyMDQKKzEwLFRodSAzIEZlYiAxMSw4Ljc3ODc1NTE2MDA1Njk2NywzODkuNTQxNjcxNDc4Mzk3NywyMzA5Ljg3NjU1MDgzOTc3NTUsMTA2OTYuMDc1MDU0MDg2MjI2CisxMSxGcmkgNCBGZWIgMTEsOC40NzcxMjYxMDc4MDEwODQsMzE2LjE3MDMwMDcxODQzMjQzLDE5ODcuNDI4NTMyNDU2MDU0Nyw4NjA5LjMwMzQwMTAxNTA5NworMTIsU2F0IDUgRmViIDExLDcuNDc2MTIxNjE5NjcxODQ2LDI0OS4yMjAzOTExNDI0MTQ0OCwxNjI4LjU2MTAxNzM2MDczMyw2NzQ3LjAwNjY2MjIyMTM5MgorMTMsU3VuIDYgRmViIDExLDYuMjIxMjAxMjMyNzA1MTE3LDE5Mi4yNDE0Mzc4MjE5NzE1NywxMjkxLjAzOTI4ODY1NTM1MjUsNTE4Mi40ODQwNDkwMjEyMTU1CisxNCxNb24gNyBGZWIgMTEsNC45ODE5NjU1MDExMDAzNDYsMTQ1LjgzNTQ2NzQ2MjQ0NzksOTk5LjM4Nzc2MDM4NDYzOTcsMzkxOC45MDgwOTI0NTc0MDQ2CisxNSxUdWUgOCBGZWIgMTEsMy44ODM4MTc1MDIzNDYwOTQ2LDEwOS4xNzUxNTg0MDUzODkwNyw3NTkuODY5OTg0Nzk2Nzg4OSwyOTI2LjQ2NzE4MzE1NDEwNzcKKzE2LFdlZCA5IEZlYiAxMSwyLjk2ODM2OTkzNzgxODY0MzIsODAuODU1MjczOTMwNjE2NjUsNTY5LjcyNDQxNTg1MTIwNjcsMjE2My4wMzk5NjcwODQ2MjQ1CisxNyxUaHUgMTAgRmViIDExLDIuMjM0NDc3NTMzOTI3NzI0Myw1OS4zNTAzMzIyMTgwMzQ0Nyw0MjIuMzg4OTQ2MjMxNDY2NywxNTg1LjE3MDk3OTE3OTYxNworMTgsRnJpIDExIEZlYiAxMSwxLjY2MTkwNTk0NDcwMTQ1MTcsNDMuMjQwNjM2NDM2NDAzOTksMzEwLjI4NzQ1MDk3OTUyNDg2LDExNTMuMzU2MzEwMDc3MDczCisxOSxTYXQgMTIgRmViIDExLDEuMjI0MDI2NTYwNzc2MDUxOSwzMS4zMDM5MTc2MDI0MTYwNzgsMjI2LjE5MzgyMDA0NzU2OTYsODM0LjAzMjI3Mzk1NzEzODcKKzIwLFN1biAxMyBGZWIgMTEsMC44OTQyNDI0MTc3NzExNzU5LDIyLjUzODQzMTYyNDQyNjY4LDE2My44MjEwMzgxOTQyODA4Nyw1OTkuOTIxODQ1NzIxMTU1NAorMjEsTW9uIDE0IEZlYiAxMSwwLjY0ODg3MDY3MDY3MjY2OCwxNi4xNTA0MDM1MTEwNjAzMjUsMTE3Ljk4NzU2Mzc0MDUyODE1LDQyOS41MzgwMTE2MzExNzg4NQorMjIsVHVlIDE1IEZlYiAxMSwwLjQ2ODA4NzU2OTMxNTAwNzA2LDExLjUyNDQ1NzU1MjkxODMwNSw4NC41NjU5OTU5Mzg5OTgzLDMwNi4yOTA2MjMzMzEzMjQ0NworMjMsV2VkIDE2IEZlYiAxMSwwLjMzNTk4NjQwNTE2MTEyOTQzLDguMTkzNTk3MDIzMjIwNzAyLDYwLjM1Njc4NzA3NDc0OTIzNSwyMTcuNjM0MzMxMzIxMDMwNDYKKzI0LFRodSAxNyBGZWIgMTEsMC4yNDAxMDU2ODQ2ODQyODg1Niw1LjgwNjExMTAyMDcyOTc1Miw0Mi45MTYzNTM0Mjk4ODAwMiwxNTQuMTM3OTg5MTc2MzUzMjIKKzI1LEZyaSAxOCBGZWIgMTEsMC4xNzA5MjMzNTM2NzU3NzQ4Myw0LjEwMjExNTM1NTg0ODQyODUsMzAuNDEzODA2Mjk2NTM2NTUzLDEwOC44NTA2MzQxMzgxMTg2MQorMjYsU2F0IDE5IEZlYiAxMSwwLjEyMTI1ODIwMDIzMzEwNzk5LDIuODkwNTA3Nzc3MjUzMTI5LDIxLjQ4OTQ2Mjc4ODY2MDI4LDc2LjY2ODkyNDYwMzQ0NDk5CisyNyxTdW4gMjAgRmViIDExLDAuMDg1NzYxNjE4MTQ3MDE2OTEsMi4wMzE4NzUzOTA2OTI2OTcsMTUuMTQzMjUxMTk4NjQwNjEzLDUzLjg3NDY4NTA0MTI2MTI5NAorMjgsTW9uIDIxIEZlYiAxMSwwLjA2MDQ4OTk4ODg2NTA1MTkyLDEuNDI1MTkzNzAzNDgxMTAwNiwxMC42NDU0NTY2NDQ1Njc0MSwzNy43NzY1MDU1MTM3MDkwNQorMjksVHVlIDIyIEZlYiAxMSwwLjA0MjU1OTc2ODQ4MjM1MTg5LDAuOTk3Njc0NDk4OTM3NTc1Myw3LjQ2NzIwNzMyMDQzMDczMSwyNi40MzcwMjcxNzI2MDEyMgorMzAsV2VkIDIzIEZlYiAxMSwwLjAyOTg3NzIzNjg1MzI0NjMsMC42OTcxMzI2NjQ1OTE2MTM0LDUuMjI3MzkyMTAyNjA5MzU2LDE4LjQ2ODM4Mzk0MDkzMjgyNAorMzEsVGh1IDI0IEZlYiAxMSwwLjAyMDkzMTE4NDY2MzE0OTkxLDAuNDg2MzE1MzAyNDk5ODExNSwzLjY1MjczNjU4MTgxNzA3MSwxMi44ODA1MjE0Nzc2ODA0NTUKKzMyLEZyaSAyNSBGZWIgMTEsMC4wMTQ2MzY0MjYxMzc0MTEyMjIsMC4zMzg3Mjk1NTEwMjEyOTc3NiwyLjU0ODEzNTMwMzA1ODQyMzUsOC45Njk3Nzc0NjUwNzQ3NQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTRUlSX1JLX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9JXzIuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTRUlSX1JLX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9JXzIuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJkOWU4NzYKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNFSVJfUktfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL0lfMi5jc3YKQEAgLTAsMCArMSwzMyBAQAoraXRlcmF0aW9uLHRpbWUsUEgtMS1HNjQwMDAxLFBILTEtRzY0MDAwMixQSC0xLUc2NDAwMDMsUEgtMS1HNjQwMDA0LFBILTEwLUc2NTAwMDEsUEgtMTAtRzY1MDAwMixQSC0xMC1HNjUwMDAzLFBILTEwLUc2NTAwMDQsUEgtMTAtRzY1MDAwNSxQSC0xMC1HNjUwMDA2LFBILTEwLUc2NTAwMDcsUEgtMTEtRzY2MDAwMSxQSC0xMS1HNjYwMDAyLFBILTExLUc2NjAwMDMsUEgtMTEtRzY2MDAwNCxQSC0xMS1HNjYwMDA1LFBILTEyLUc2NzAwMDEsUEgtMTItRzY3MDAwMixQSC0xMi1HNjcwMDAzLFBILTEyLUc2NzAwMDQsUEgtMTItRzY3MDAwNSxQSC0yLUc2ODAwMDEsUEgtMi1HNjgwMDAyLFBILTItRzY4MDAwMyxQSC0yLUc2ODAwMDQsUEgtMi1HNjgwMDA1LFBILTMtRzY5MDAwMSxQSC0zLUc2OTAwMDIsUEgtMy1HNjkwMDAzLFBILTMtRzY5MDAwNCxQSC0zLUc2OTAwMDUsUEgtMy1HNjkwMDA2LFBILTQtRzcwMDAwMSxQSC00LUc3MDAwMDIsUEgtNC1HNzAwMDAzLFBILTQtRzcwMDAwNCxQSC00LUc3MDAwMDUsUEgtNC1HNzAwMDA2LFBILTQtRzcwMDAwNyxQSC00LUc3MDAwMDgsUEgtNC1HNzAwMDA5LFBILTQtRzcwMDAxMCxQSC00LUc3MDAwMTEsUEgtNS1HNzEwMDAxLFBILTUtRzcxMDAwMixQSC01LUc3MTAwMDMsUEgtNS1HNzEwMDA0LFBILTUtRzcxMDAwNSxQSC01LUc3MTAwMDYsUEgtNi1HNzIwMDAxLFBILTYtRzcyMDAwMixQSC02LUc3MjAwMDMsUEgtNi1HNzIwMDA0LFBILTYtRzcyMDAwNSxQSC03LUc3MzAwMDEsUEgtNy1HNzMwMDAyLFBILTctRzczMDAwMyxQSC03LUc3MzAwMDQsUEgtOC1HNzQwMDAxLFBILTgtRzc0MDAwMixQSC04LUc3NDAwMDMsUEgtOC1HNzQwMDA0LFBILTgtRzc0MDAwNSxQSC05LUc3NTAwMDEsUEgtOS1HNzUwMDAyLFBILTktRzc1MDAwMyxQSC05LUc3NTAwMDQsUEgtOS1HNzUwMDA1LFBILUNBUi1HMjMwMDAxLFBILUNBUi1HMjMwMDAyLFBILUNBUi1HMjMwMDAzLFBILUNBUi1HMjMwMDA0LFBILUNBUi1HMjMwMDA1LFBILU5DUi1HNTIwMDAxCisxLFR1ZSAyNSBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDEuMAorMixXZWQgMjYgSmFuIDExLDEuMjAxODY4NDU3MzkzOTI3RS0xMSwxLjg1MTkyNDE5ODQ0MTQ0NjJFLTksMi44MTA1NDMxMDM2OTU4MTJFLTksMy4yNTkwMTI2ODQ1NzQ4MjgzRS03LDQuNTcwMjA1MTc5MjgyNTE1RS0xNiwzLjIzNTg4OTI5Mjc5NTFFLTE0LDEuMjQxNDY3ODk3NTIwNjg4MkUtMTEsMC4wLDIuNjE0NDA4MTEyOTA0NTkxRS0yMiw0LjM0NjcyNDg1OTQzMjkxMkUtMTYsMi44NzAxNjA2NTM3ODQ5NTVFLTIwLDMuNzIyMzg0MzU0MjU3NTVFLTEyLDQuNzg4MTM1MzY4ODQ1NDY2RS04LDEuNDk1Mjc4Mzc1NzI3ODQyRS0xNiwzLjc5MTYwNTAxNzI5MjE3N0UtMTIsMS4yODQwNjQyOTIzNzI1ODU4RS0xNiw5Ljc5ODI1MTA0NjQ3OTI4RS0xNSwyLjUyMTcxMTY4OTU5NTY4NzRFLTE0LDUuNjM5NDA4NTEyMDEzNjIyM0UtMTQsMy4yNTAyNjI3MjQ3MzA5NjVFLTEyLDMuMjY5MTU5NjA5MjYyNTk4RS0xMiwwLjAsMy41OTUwOTkwNDY3MTQyNTc3RS05LDguMjc0MDU2Nzg0NzM3NzAzRS01LDkuMDM1MTUzMTExMjQxODExRS01LDIuMjI5NTYxMzM4MTUyMjY5RS00LDMuNTg5OTUxNjg3MTEwNDc4RS01LDIuNjAwMDc3NDg1NzU2NjQ0LDAuMDAyNTkzNDgxNDM2ODc5MjI5LDAuMTAxODIwNDQ2NjI3MjQ3MzcsNS4yOTc1ODM0NjgxODM4MzdFLTUsMy4yNTgyODA4NjMyNzY4MDA2RS01LDAuMDE1NDkzMjU4NjcxNTAxODI2LDAuMDAyOTA1OTEyNDU2Mzk3ODI4NSwxLjI5MzI3MTQwNTAxMDQ1NjYsMS4yMjc5ODE5MjYwMjYzMDcyLDAuMCwwLjAsMC4wLDAuMCwwLjA5MTA1MDYwMzUyOTEyNTcyLDIuMzYxMTA2NTg3MTc0NDY3NiwwLjAsNi4zODQ4MTcxNjEzNjM5OEUtMTAsOC4yMDk2MzYyMzQwNjMxMThFLTYsOC4yMjM1NjAzNzc4MjA1NTNFLTYsMC4wLDAuMCw2LjkwMDI3ODM1OTQ0MTk1MUUtMTQsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMS4yMTUzNjM4NzIzNzk5NTkzRS01LDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwyLjYxNTM2NTQ1ODk3ODg4NjVFLTIyLDEuNTY3MzI1MzkxODg1Mzg5RS0xNyw2LjE2MDI4ODY3ODA4Mjk4N0UtMTEsNC45MTg4NDQ2MjE2MTYwMjVFLTcsNi43NzU5NTQ0NDkxNjc4NjRFLTcsMy40NTE4OTM0MDEyOTYxNjQ3RS05LDQuNzQ0NTAwMzA2NDU0MDU2RS04LDIyLjIxMjM5NzAyOTQ4MjYzOAorMyxUaHUgMjcgSmFuIDExLDEuMDQyODA2ODAwMjkzMDUwN0UtNyw4LjI2NTA5MDc5MTg4ODQzNUUtNiwxLjE4NDg4MzM0NTc0NDE0NTVFLTUsMi40NzA2NjQwNDQxMDY4OTA3RS00LDIuMzk2Nzk5MDA2MzUwMzkwNkUtMTIsMS4xOTYwOTI5NjQ1MDgxMzZFLTEwLDEuNjA2NjU3MzA0NTM4MzYzNUUtOCwwLjAsMS4xMTM4MDY2NzgxMDQ4OTM2RS0xNywxLjkyMjEzODY2MDI4NTA3NkUtMTIsNS40ODc3MTk2NTg1MTIzNUUtMTYsNC45NzY0NjU4ODU2OTg3ODY1RS05LDIuMzE2MjEyODU4MzA2MzlFLTUsNi43MTg3NTcwMzkwMDM4OTNFLTEzLDUuMDQ1MDU2Njk2MTA1MzUxRS05LDEuNTIxMDA1NjQzNDMyMjA5RS0xMiwzLjc2OTQ2NDIyNzYwODE2NUUtMTEsOS41MjEyMDIxMjQ2MTYwMzRFLTExLDIuMTAzOTc0MzM3MTY0MDE0RS0xMCw0LjIwOTcyMzc3MzI0NzI3M0UtOSw0LjE4MTUyNTk5MDA2OTYzMkUtOSwwLjAsNC44MTQxMTAyMTYzNTA0OThFLTYsMC4wMzQzMDQyODk5NTg2MzU0OCwwLjAzNzEyNTkyMzUzMjQxODg4LDAuMDc1MzI3NTU1NDk5Nzg1OTgsMC4wMTYyMzAyMTI5OTU2ODY1MzQsMTc4LjIzNTE4MjYyNjM1NDY5LDAuNjk5NzA0NTU4NTY0NzUxNCwxNi4xNzk3NzEyNTkxMDE5MjMsMC4wMjgyOTM4MzQ2OTczNjA4NDYsMC4wMTQ1ODA3MTc3MjI5MDQyOTUsMS45NzMyODY4Mjg1MzEwNzU4LDAuNTI5NDI1NjczOTQ0MDgxNCw5My40OTY1NDQ2NjcyNjMyNyw5OC4yMzM2MDgzMTM0MzQxMywwLjAsMC4wLDAuMCwwLjAsMTUuMjIyNDc0OTk0MTAyNzQzLDEzNS43NzExMDY5ODE5NjA1MSwwLjAsOS4zOTMwOTIyMDU4ODQ1OTlFLTcsMC4wMDM4NjcwMTEyMDE2ODMzMDczLDAuMDAzODc3MjUyNzkwMzk1NDg1NSwwLjAsMC4wLDMuNDg0MTAyMDg4ODcwMDk0RS0xMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAwNTg4MjIxNjMxNDI0NDQ4MiwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMS4xMTQzNzU5ODc5NDYxNDkyRS0xNywxLjkzNzI3NDA2OTU4MDA4MDhFLTEzLDMuNjM3NDMxMDAzMDM2NTk2RS03LDYuMzAzNDkzNDkzNTY3MDI0RS00LDguNTY1ODk2NzU0MDczMzc3RS00LDUuNTQ5ODk3ODk2NzAyNTg4RS02LDUuOTI4MDE4MTI3MzcwMDgyRS01LDk5OC44NDEyNTQ1NzAxMDYzCis0LEZyaSAyOCBKYW4gMTEsNy4wNDQzNzgyNDcxNDcxODRFLTUsMC4wMDM0Mjg3MDM3MDk4MzI2NTk2LDAuMDA0ODY2OTI3ODk4MjAyMzQ4LDAuMDUwMTkwNDc5NDA1MTgyMzE0LDEuNDUyMTAxNjExODI0OTI2NEUtOSw1LjM2MTgzMDUyMDAwMzU5NTVFLTgsNC4yNTEwNzg0MTA4Nzg5NjZFLTYsMC4wLDEuODQxMjUyOTg1MjIwODA0NUUtMTQsMS4wNDc4NzM3NTExOTY3MjUyRS05LDYuNzMxMzY1MjU4OTUzMjA3RS0xMywxLjM2NjMzODA3MjUxODE0NzRFLTYsMC4wMDM2NTkxNjE3MTA2OTQzNzM4LDMuNjgwOTk3MzExODY0OTgzNUUtMTAsMS4zNzg0NzY2Njc2NTc3ODdFLTYsMS4yNDk5NTQ1OTYyNTMwMTg5RS05LDEuNzY3OTg0NTIyMTU3MTM3RS04LDQuMzcyNzY2NTQ0MjQwNDg0RS04LDkuNTMyNDM0ODc1MTMwNDI1RS04LDEuMTE1OTk2ODU5ODUwMjg3RS02LDEuMDkyNTY2MTE1NTI2MzE3OEUtNiwwLjAsMC4wMDExMzY0MDg3MDQ0MTYzMDUsNC40NjMwMjY1Mjk1MTUzMDIsNC43OTEyMzg5MDEyODI5NjEsNy45MDI3OTEwNjI2MTM5MDksMi4zMDQ3NDQyNDk3NzAwNDA2LDkzOTcuNzA4NTAwMTcyNzkyLDgwLjg3MTU3NTA4OTIxODc3LDEzMjQuNzg5MjAzMzQxNjUyOSw0LjYwOTQyNTMxNzM2MjE5LDIuMDYyNjExMzg3NDg1Nzg3NCwxMzIuNzEyMzY0MjIwMDIzNjMsNDkuNTE3OTA1ODQyMTc3NTEsNTE3MS41OTA4OTAwNTIyMDEsNTcxOC4xNjE1Mjc1NzcxNzcsMC4wLDAuMCwwLjAsMC4wLDEyODEuMzYxNDkwODAxNjQ0OCw2Mzc1LjY2NzgwOTMzNjgyNywwLjAsMi40Mzk4ODA1MzU5NDk5NzQ3RS00LDAuNTY1NzY1OTY4ODQ5MzkwMiwwLjU2Nzg5MDgwMDMyMTA2MTcsMC4wLDAuMCwxLjY2ODA1MTI1OTQ0MDM4NDRFLTcsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC45Mjk4NTgyMjM5NTAxMjQ3LDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwxLjg0MjU0ODc0OTY0NjUwNTNFLTE0LDEuNjc2MzU2MDEwMjI0ODUzNEUtMTAsMS45MzM2NzgxNjIxMTcxMjQzRS00LDAuMTQxNDAyNzc0NzQ1MjkxLDAuMTg4OTk4NDUxODE4MTM0ODUsMC4wMDE1MjMzOTMzOTU4MTc0MzgxLDAuMDEyOTA4MDEwNjkxNDkxMDU1LDQ0MzI1LjIxOTc4NjAwMzMzNAorNSxTYXQgMjkgSmFuIDExLDAuMDE4MzY0MjU3OTE4Mzg3NiwwLjYyNzEyNzA4ODgyNTY1NTQsMC44ODcxNzkxODM3MjU0NTU2LDYuMTY5NzQ5ODMyODgwMzQ1NSwzLjc1OTIwMTA5ODQ0NzI3NzdFLTcsMS4wODc5Nzc4NTQ0NDU2NjM0RS01LDYuMTQxOTUzNDMxODM5NDUxRS00LDAuMCw5LjAxNzAyNjIzNjg1Nzc1NUUtMTIsMi41NzE0NDY5MzE1NTQ0OUUtNywyLjc5NDAxMzcwNjA3MjY5OEUtMTAsMi4wNTE4Nzg5MjcwNTUwMzU1RS00LDAuMzY5NzUzMDkxMDM3NzM5NCw4Ljk5MzA0NjkxOTU0NTQ5NkUtOCwyLjA2MDcwODc5MzIzMzE4MjRFLTQsMy43ODE5NjMxMDkxNTY1MUUtNywzLjc1MzExOTE1ODMyNzU0NjdFLTYsOS4wODk1MTMzMDkzNTMzMjhFLTYsMS45NTQwODE0MTg5NjE5MDgyRS01LDEuNjE3NjU2MjQwMDA5NzQ4NUUtNCwxLjU1OTMyMDE1NDkwOTM5OUUtNCwwLjAsMC4xNDc3MzkyMTg4ODU4Njg3NywzODUuNjE3ODM1MTA1MjM0Niw0MDkuOTUwMjcyMDQ1OTk1MSw1NDQuOTIyNTA1NDM5NDE5NSwyMTUuMTcwMzA5MjU5MjA5MSwzMDEyNTEuOTYxMDc4Mzc3MDMsNjUyMC45OTExNDExNDI4MjksNzIzNTAuMTQ0MTQ3MTk3Miw0ODEuOTQ0NjM0NzkxMzI5NiwxOTMuMjIzNjAyODgwODg3OSw2MTQzLjc0MzA4MDc0OTk2OCwzNTI0LjQ0MzcyOTA2NzU3OTYsMTc0MzgzLjI4NzU1OTI2NDkyLDIwNjU5NC44NzY1MzU4NzQzLDAuMCwwLjAsMC4wLDAuMCw2OTU0MS40MTAwNzQzMjkwOCwxODQyNTcuNTkwODc1NTkwNTcsMC4wLDAuMDM0NTQxMzM1MDY5MTcyMjUsNTMuODIxNDAyMTQ1Nzc1MjgsNTQuMTA4NDE1NjQ3ODIzNjMsMC4wLDAuMCwzLjUyMjEwMjE2MTQ4MTQ2RS01LDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDk0LjAyMjkyODY3ODg3MjgsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDkuMDI1MzM0Nzc2MDA2MjUzRS0xMiw1LjM1NDc1ODE3NTc1MTc1ODVFLTgsMC4wNDI4Njg0ODYxNjQxMDc5MiwxNy40MTY1NzMxNTUwODA3OCwyMi44NzE1MzI4MzMyMTkwMTQsMC4yMjExNDMyODUzNTMwNzg3LDEuNTQ0NDY2NzA2NTg1OTU1MiwxMTE5ODY3LjkyMjM4ODc4Cis2LFN1biAzMCBKYW4gMTEsMy40NDI2OTA0ODkzNjI0OTE3LDg2Ljc5Mzg2NTI2NjEwNDIzLDEyMS42Njk4NjE4MzQ3NTAxMiw1ODEuNzI2OTI4MzYwMzQ2NSw3LjMwNzY3MzczMTIzOTQyNkUtNSwwLjAwMTY5MTkxMjQ0NTUzNDU2NjUsMC4wNjc5NzUxOTMxNDY5NjUyMywwLjAsMi45MDY2NDgyNjE0NDEyMjJFLTksNC44MTIzNjc4MzQ0Mjk5MTFFLTUsNy45NDQ1NzExNzQyMzQyMTJFLTgsMC4wMjM2MTYzNDk2MjMxNDc2NTMsMjQuMTA0OTY2NDU3MDY1OTEsMS42NDk4MjU1ODg4NTgzNDg2RS01LDAuMDIzNDc5Nzc1NTA4MjMxMDYzLDguMTQ4NTc0NTk1MzE3ODE3RS01LDYuMDkyNTQzMTI4NzA0OTY5RS00LDAuMDAxNDQxMzg0NDE1NTc0NDk3OCwwLjAwMzA0NTE3MzY0MDAxNTExMywwLjAxODE3NDc0Mjc2MTQ5MjIwMywwLjAxNzEwNjAxOTg0NzUyNTMsMC4wLDE1LjAxMTA5ODA0MTc2NTk4MSwyMzI2MS4xNjQwMDY5NDE0MjgsMjA1MjIuMjQzODU4ODk2MDg3LDE1ODcwLjQ0NDM5MjI2MTgyNywxMjc4MC42Njg4MzI3Mjg0NzQsMTA3MDc4Mi42NTQ2ODY0MjY1LDIxNDAwNS4zNTczMzg2NDMyMyw1NDU3MDQuNzgwNzcxMjE3NSwzMzQwNS4zMDQ2NTc5MjAxNCwxMjA5Ni4wMjM4NTYzNzE1NjgsNDY3MDkuNjQzMjQyOTY0MDI2LDE0MTMzNy44NTU1NjIxOTQ0NSw2MzczNjUuMjYwNDA5ODQ0LDgyMjQ5NC44NzY0NTg4MDUsMC4wLDAuMCwwLjAsMC4wLDQ3OTY0OS43NTczNzkzNDk3LDYxMDkwNi44MTk4MzI5NDY4LDAuMCwzLjc2NTQ2NjM4MzMxNDkxNjcsMzQwOS4yMzczOTE3NTM3NDQsMzUwNy4xMzQ1NDM4NDc5NzMsMC4wLDAuMCwwLjAwNTU0OTYxOTg5MjI2MzY4OCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCw2MDk5Ljk2ODg4MDUxODIxMiwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMi45MDk5NjUzMjMzMTY3OTIzRS05LDEuMjEyNTQ4OTkyMTAxMjk3NUUtNSw3LjIzNzA3NzIyMDAxNDI0OCwxNjQ4LjAzNjYyNTk0MTMwMDEsMjA4Ni4xNDA2NzM3MDMxMjIsMjUuNTU4NjMxMDM0MTU5MzEsMTQ2LjQ5MDMzNTY2NzUzMzMyLDMxMzg2MTkuOTEzMDY0MDk1NworNyxNb24gMzEgSmFuIDExLDQ4NS44MzUwMDY0OTIyNzE0LDgwNDQuNzYzOTI3MDU2ODMxLDEwOTI0LjE4NjY3MDgzNDE5MywzMjQ4OS4wMTQ0MzUyNzA1MzIsMC4wMTA4MjM5MjU1NjgxMDk2MiwwLjE5MzU3MTQzMTk0Njk4NzQ4LDUuMzE4NTczODUwMjgyNjkyLDAuMCw2Ljc1NzkzNDk2MDA1MzA2N0UtNywwLjAwNjk5ODI4MTc1NjczMjg4MywxLjY3MjcwMDEzNDYxNjM2MTZFLTUsMS45NzE3ODk0ODE2MDYzNzg4LDExMzcuNjE1NzE5ODQ2OTE2NCwwLjAwMjMyMTI5MzQ3NjM5MjIyOCwxLjkyOTk1NzQ3NTI5ODcyMzQsMC4wMTMxNTUyMjYxMzY1ODkyLDAuMDc0MjYyMjg1NDYyMjAzNTYsMC4xNzA0NTc4NDEyNTY5OTg0OCwwLjM1MzExNjUwNjM3MjMxMTEsMS40NTk3ODYyMjkwMzQ1MTMyLDEuMzIwMTI5OTE4MDQ0OTQzNywwLjAsMTA2MS43MDE2MjQwNTEwNjI3LDI5NDM3My45MTM5NTY3NTcxNyw5ODIzOS4yODc5MDI4Mzg1NSw0NjY4NC44NTc0MjYxNzAxMzYsMTI5MjQ0LjA5MDg2NDIxMjUxLDEzNDU4MDYuMjY5ODA0ODE5NSw2MDY5MzQuNTgzMjcxODUxNiw3OTg1MzUuNjE0NTYxNzY4NSwyOTM0NzAuODQzNDUxMTEwMDYsMTQzNDc1LjU3MjQ5ODI0NjcsNzAxMzkuODg3OTc5Mzk1OSw2MjMyMjkuODIxMDYzMzg4NCw4MDQ3NjQuNDkxNTI3MjkxMSwxMDU1NzA1LjQxOTU1MzQwNjgsMC4wLDAuMCwwLjAsMC4wLDY4NTkwMC43NzE5NTkzMDI3LDc1Nzc4OC43MTgzOTExMSwwLjAsMjk5Ljg4Njk0MDE5OTc5NjQ3LDcyMDM3LjM4MzU1NDE4NjUzLDEyMjEwNS42MDAxMjYzMTI5NywwLjAsMC4wLDAuNjY2NTU0Mjc5NDQwMDEyNywwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwyMTk3OTQuNzc4NzI5MTg1LDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCw2Ljc2NzQyOTAwMjUyMTQxNkUtNywwLjAwMjA3MjgyMTg0ODM3OTEzMDcsOTAxLjMyMDE2MTcyMzYyNTUsNTkwNTQuODc5NTczOTA1NjgsNDM5NzIuNDgxNjAzNDQ0NTYsMjExMS41NzAwNDU3MjAzMjIsNzE2Ny4zOTUwMTcwMTg4MzEsMzc2ODE2NC43MDk2ODA3MDIKKzgsVHVlIDEgRmViIDExLDMxNjA2LjY5NzY0Nzg1NTM3NywxMzA5ODEuMDc4NDExODM4MTksMTUwMzI2LjM5ODQ3MDA0MzM4LDQ4NjA3My43MjA1Njc1NTA4NiwxLjE2OTkxMDIwNDg5MjY5NSwxNi4yNTk4NzM0MDU3NjQxMiwzMzMuNDczNTIwNjUxNzgwNzUsMC4wLDEuMTExODAwMDI4OTUwMDkxN0UtNCwwLjc2OTkyODc0OTMxNDY2NiwwLjAwMjUwOTk4MjE0NjY5NzM0MTQsMTMzLjYzMzQxNDY0MjQ3MTQsNDc5NDcuNzg2MjIwNDcwODIsMC4yNDUxMDAwNjI4NzYzNDQyOCwxMjguODIxNDk0OTE5NTgzNDcsMS41MTY3OTQ3MTM3NjE5NTAyLDYuNzMxOTQ1MzEyNjIzNDQwNSwxNC45MzA4OTkyMzk2MDgxODIsMzAuMjU4OTczOTE0MDg3MTcsOTQuNjQ4MzM1NTY2NzcxODYsODEuNzI3NTY5MDM5NzY2NDYsMC4wLDQ0MzUxLjMzOTQ2MjE0MjMyLDUwODA0OS4zMzQ4OTM4MzY0LDEzMDc4Mi45MTgwMjExODE0OCw1Njc3NC40NDA1ODE3ODMyNzQsMjA3MzQ4LjE3Mjc5MzAyNTYyLDEzMjMxMTEuMDg3NTcxODExNiw3Mjk2MTUuNDM5NzUyNDIyLDgyNTQwNy4yNzA3MjYzMzE0LDQ0NDUyOC43OTgwMzgzMjQxNywyNDAzNjcuMDk1NTI2ODU3NDgsNzMwNjEuOTczNDk2NzE4NDksODE3MjQ2LjM0NjYyNDAxNzIsNzkyNTE0Ljc1MDQ4MDg3NSwxMDQ1NzU0LjMxMTI3NDg3OTMsMC4wLDAuMCwwLjAsMC4wLDcwNDA1OC42MjA0NjM0MjczLDc0MTQyNC44MzIyODQ2NjAzLDAuMCwxNTcxMC4xMDY5MTU2ODk2MDgsMTY0MDYyLjYxMzQ4MjczODQ0LDUxMzYwMC43NjQ4OTA0NzU4NCwwLjAsMC4wLDU5LjEzNDg4MjA4MDk2NTg5NSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwxMDM4NDQ2LjAxODI2MzIwNjgsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDEuMTEzNzE1NTA5MTM4MDc3MUUtNCwwLjI1NzI2MzAzMTY4NTE1NDUsMzE3MDYuMDI1NDIzMDM4MzgzLDE5NjAyOC4zMDk0MDI2ODEzMyw4ODgxMC43NTU1MzkyMjgzOCw0Nzk1MC4wMDQzMzExNTcwODQsMzcxMjYuNjYxMzkzNjY3MTgsMzY0MTcwNC4xOTU3NTE4ODIKKzksV2VkIDIgRmViIDExLDE2MTc3OC43OTc2MDI4MzY4LDI0MDIzNS42ODc4Nzk2NjQzMywyNTg2MDcuNTk1MDQyOTU1Miw5MTA4NTYuODUyMDI5OTk2OSwxMDEuMDI0NTgxOTM3MzUyNTIsMTExMC45Nzg4NzM4MzU2OTQ1LDE2MjIyLjI1MjcxNDczODk2MywwLjAsMC4wMTQwMzk1NjgwMzM5OTI5MDEsNjkuNDU1NDIxMjAxNjUzMTEsMC4yOTAwOTUwOTMzMzk4OTYsNzQ4MC4wNjEzNDcxNTMzMDcsNDY5MjUwLjIxOTY2Mjc3MTQsMjEuMTU5MTIzNjk2MzM0NDQ3LDcxMDQuNTQ4NDc0NjIwNjM4LDEzNy4yNzAxMjc3Mjc4MDg4LDUwMC4zNTM1MTY0NDM1NDAzNCwxMDY5LjE4NDM1Nzc1NTk0NDMsMjExNS42MTYyNTY0NzE0NjMsNTAwNS45NjYxNjMyMzQ3MzUsNDAxOS44NjIyODc2NDYyNzg3LDAuMCwyOTc0MTUuMDE4OTQ2OTUxOSw1NDkyOTcuNDA2NzcxNTgwNywxMzExOTMuMDM2NTU0NTQ0ODQsNTUxMzcuMzE5MjA1NTM0MzI0LDIxOTk4NC4yMDM0Mjc2MSwxMTY5MTA2LjAzMzE0OTYwNTYsNzA1NDM4Ljc1MTg0NTUwNzgsNzQ3NzY0Ljk0MzY0NTIxNzIsNDY0MTUzLjYwNTA4NjQwNDUsMjU3OTI1Ljc5NjU1ODY0NTY0LDY2NDMzLjkyNzcwMTk5NDcyLDgxNTYwNC4yOTY1MTAxNTI5LDcwMDg3My4wNTI3MTY2ODIyLDkyNzYyMS4xMzM1NzE3MzA3LDAuMCwwLjAsMC4wLDAuMCw2MzU2OTQuMTMwNDI5Mzg2Niw2NTM0ODcuNDM1NTYzODMzMSwwLjAsMjIxNTAwLjc2OTg0MTYwOTQ2LDE4ODgyNy44NzgwMDM2ODk3LDY2Nzc0Ni43Mzk0OTE2Nzc3LDAuMCwwLjAsMzc2Mi40ODI0ODAxNjYwMzgsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMTM4MjU1OC43NDAzMzQxNDUzLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAxNDA2ODkxMDAxODg3NDQzNywyNS4yOTgzMzAwMzMxMzkzNiw4MDYwMy44MzExNzA1NzAxLDI0MzczNy44MzAzNDU2OTQ2Miw5OTYwMy4yMTc1MDkxMzM1NCwxMDgyNzUuNTMwNjYyNTA5NTUsNTA3NTIuNDgyNTA1NTM0NTksMzE4OTIxOS4yOTcwNjM3NTUKKzEwLFRodSAzIEZlYiAxMSwyMTcwMjcuOTE5NzMzNzQ5MzIsMjYzNTkzLjY0OTM1NjY0Mzk2LDI3OTM2MS45MTY0NzM2Nzg0MywxMDA0NTQ0LjkxMTg1MTY3NTEsNjc1NS4wMTY5NTc5MDkxOTYsNDMwNjIuNjg2MTgxMTQ4NDMsMjI1ODAzLjY3NDAzOTE0MTU0LDAuMCwxLjQ1OTMxMzAzNjk3MjgxMyw1MTUwLjg5NjI5OTY4NTgxMiwyNy40NzcyNDIxMDQ4MjcyMDUsMTkxODc2LjYzMTIxMDEzMzE0LDc1MjAzNS40OTc0NjcyNTU2LDE0OTcuODc5NjY2MTc0MTk0NCwxOTA0MzEuMTYyODM0MTY0OTUsOTM1MC42MTExNDA5OTIwMjksMjU4NTkuMjk1MTUzNzE5NjQyLDQ4MDAyLjc2NDU0MDIyMDMxLDg0NjU2LjM0MTQ2MjY1MDgyLDEyNzY2NC4wMDM0NzI3NTI5LDgwODgzLjAyNjYyNjM5NTAzLDAuMCw0Mjg0OTUuMTY0ODI2MTE4Niw1MDgxMjguODQ1NjMzNTExNjYsMTE3MTE4LjA5MTUyNzk2OTk4LDQ4NDA4LjkwMDEyMTM0NTcxLDIwMTc1Mi4xMDMxNTM3ODI1OCw5NzI4MzguMjg1NTMyMDY4OSw2MTc5MDIuMTIzNDc2OTQ2NSw2MzE2MDIuMDI5MTAwNDUyOCw0MjI1MjMuMjY3NTc1NDQ3ODYsMjM3NzgxLjc2NTg2NzU0MTIsNTYyMzUuMTI2MDgzNDE1Miw3MjYyMTkuMzY0ODEyMDg0Miw1ODM1MTguNjgyMDQzMTQ5NSw3NzM3MTguMzgwNTEyNTY2NSwwLjAsMC4wLDAuMCwwLjAsNTM1ODgzLjEwNjkzNzM2MTksNTQyOTQ3LjgwMzkyMDQ0MDQsMC4wLDQwNTM2MC4zNDgyMTI3MjI3NSwxNzk0MzIuMTUxODUzMTM2OTgsNjY0NDM2LjUxNTYyNjM4NzcsMC4wLDAuMCw5MjUzOC4zNTg0NzQ2ODYyLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDEzODY2NjguNDc2NzY1Nzc3NywwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMS40NjI5NzA5ODI3ODAzNjQsMjA1OS4wMjQ1MTg1ODQxOSw5NDcyOS4zNTM5MDY4MjAxNSwyMzg2ODQuMDg5MjYwMjc2NTIsOTM2MjYuODIzNDg3NDMyLDEyNDQzNC4zODU1MzI0MDkzNSw1MTM2MC41ODM4Mzk0NDgwNCwyNjM5Mzg4LjM0MDk2MDQ0NjcKKzExLEZyaSA0IEZlYiAxMSwyMTgyNjYuOTg4MTUxOTA0NTIsMjQ1NDM5LjM2Mjc2MjY3ODUsMjU4MzIzLjkwMzA1NjY4MTQ1LDkzNzQ1OC44MjM4Mjk1MDk0LDEwNzA2NC44OTgwNTU4MDE2OCwxNzYzMjUuMzUyMzkzNDkxNDgsNDI0NjAxLjU2NDA4MDQ4NTMsMC4wLDEyNC43NzU5MDMwNTI0MDY1NSwxNDk3NDIuOTQ2MTM3NDAxOSwxODk2Ljc0NTg5NjEzMTEwNjcsNTEzMjczLjYwMjgyNDkzNDksNzk3NjQ3LjU0ODI1MjA3OTMsNDgzNDEuOTM2NTE2MjcxNjMsNTQxMjgyLjA5MDA1NDUwNTYsMTEyNzA2Ljk1NTM5OTIwMjgsMTk1MzE5LjA4MDQ2NDM5OTk3LDI0NTQ0Ny4zMTI2MDUzODkyLDMyOTk0NS4wOTA2MDE2OTA4LDM2NDY1Ni4zMjE0NzUwMDM5LDE5NTE1MS4zMjMzNzAxMjIwMywwLjAsNDQwODUwLjAwNjg4Mzg4NjksNDM0NDAyLjY2NzYxNzIwNjksOTgwNjQuMzc3Nzk0ODE4Miw0MDEyNC4xMTc3OTI5MjQ3NjQsMTcxNjMxLjY4Mzg5OTM3MDgsNzc4OTEyLjgwNTg2NzgzNTMsNTExNDEwLjI5NjA5NDI1NjksNTEwNzU3LjU0NzczNDY2NjMsMzU3ODkzLjk3Mzc3OTgzNjg0LDIwMjg4Ni4yMzc0OTg3MTM5LDQ1NTQwLjM3NjY5MzUzMTgzLDYwNzEyNC4xNjI0MjUxMjE5LDQ2NzM2NS45NzY4NjQ3NTU4LDYyMDQ3MC44Mzc4NDY1NTAyLDAuMCwwLjAsMC4wLDAuMCw0MzI3OTAuNTkyNzAyNjkyNjcsNDM0MjY2Ljc2MTM1MjI2MTEsMC4wLDQ0NDU3Ny45ODMzMDczOTc4LDE1NTcwOC4xMDE3NjEwNzc5Nyw1OTA3MzIuMjgwNzM3NzcxNSwwLjAsMC4wLDIzNDczOS40NDE1MTcwNDczNSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwxMjM3NjM5LjQ2NzU5MTAwNDcsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDEyNS4yMDg0OTI1ODkwOTU1MywxMDA4OTQuOTE4ODEzNTY0MjYsOTA3ODAuMzQ2NzE2MTQ4MjQsMjEwNDcwLjk5MjU3NjU5NTgsODA3NjUuMjYyNzE0NDA2MDQsMTE4MTcwLjQwMzE3OTc5OTk4LDQ2MDUxLjQ5NzQ1ODAxMzAzLDIxMDU1NTMuODE4NjAyMTkyCisxMixTYXQgNSBGZWIgMTEsMTk1MTAwLjU0NDczNDU4MTk4LDIxMDYwNS41ODg0Nzg3NjQwNSwyMjA3OTMuOTgwNjM1MTkxMSw4MDU0MjMuNzU5MjQwMjQ4NSwxOTk3NjkuMzc3NTM3Nzg2NSwyMjgzOTkuNTkyNjU4MTQ4MTIsNDY4ODIyLjExNTQ0OTg4OTc0LDAuMCw3MDI0LjU2MzQwNzA5OTAzNDUsMzg2MjQ1Ljk2NTg4MjkxOTYsNTQxMTcuNDkzNzU0NzE3NzU0LDYxMDI2MC40MDI5Nzc0NjI1LDczMTQ0NS45OTM2NDEzNjA4LDE1MDkzMy41OTMxNzg3MTQsNjUxMzQwLjI4MDIxOTI5NTgsMTg2NTIxLjc1MDgyMjc3MzA2LDI4OTA3OS4zNTE0NTMyNjIsMzMxNzA4LjU3NjE2MDA1NDU0LDQyMTE0My41MzQ3OTExNzM0LDQzOTY5Ni45NzEzMDk0OTQ3NSwyMjc1NjUuNTkwNTg4NDM2NSwwLjAsMzk4NDg1LjkwNTI5ODAwNDA0LDM1NDA2MC42MjQ0NjM3NDE2LDc4ODQ0LjQ4NTczMDEwNjA0LDMyMDQwLjQ4MDAyNjYwNTk4LDEzOTQ0My4yNTI5ODY2MzU1NSw2MDcxMTcuMzE2NjgyNDM0OCw0MDc5NzUuODI1Mzc0MjYxNSw0MDA5NDQuNjA4ODM2NjMxNSwyODk5NTUuMDY3ODI0ODQ1MSwxNjUxNTUuMTg5NTc3MDM4MzcsMzU3ODUuMTgzODUzMzEzNzA1LDQ4NzYyMy41OTgwOTk0MTQzLDM2NDM3Ny43MjEzMDk0NDI2Niw0ODQxNzQuMDAyNzQzOTYwNywwLjAsMC4wLDAuMCwwLjAsMzM5NDI4LjYxODcyMDQyNjUsMzM4MjMzLjI1NjYxNzQ4ODUsMC4wLDQxMzg3OC45MjUyMDc4MTEyMywxMjgxMjQuNDYwOTU5NzE2MTYsNDkzNDA4LjgwNzk0OTY3OTYsMC4wLDAuMCwyNzYxNTYuMDcxMDUwNTgwOCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwxMDM2MDU0LjYzNjA4Njg0MjQsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDcyMTMuMzIzMDQxMTYwNDY1LDU4OTY3Mi43NDkyMzExODUzLDc5MTM5LjEyOTkxNzM1MjM0LDE3NDkxOC4xNzYyODc2MzA2Myw2NjIwNy45MDU2MzA0MDU3OSwxMDI1MTIuMDA2NjQ3MjIyOCwzODY2MC42ODU4NTkwOTQxODUsMTYzNjkwNy41Nzg4NjY2NDc2CisxMyxTdW4gNiBGZWIgMTEsMTYzNDg1LjkzMjU2ODgzNDQsMTcyMDYzLjI4MDkwNTE0MDM2LDE3OTkzMi44NTA3NjAzNTk3OCw2NTg1NTUuOTgwNTMwMzM5NiwyMjAxMDAuODI0NTgwODIwNDUsMjI2OTc1LjMxMDU2OTIxOTUsNDM3NzM1Ljk0ODI0MDM4NjYsMC4wLDk4MDkyLjgzMTQyNzAxMjksNDU1NTQzLjg5NTA1MDA3OTk3LDE1ODkyNS4xNzQ5NDM1MTM4NSw1ODc1MTEuMDM3ODIzOTA1OSw2MjIxOTkuMDQ5ODU3OTI3NywxODQ4OTIuNDM2MzQ0ODU2NzIsNjI5OTk5LjQ3MDY3MzEwODcsMTk5NTEwLjM1MTY4MTYwMjksMjk5ODI0Ljg1NDM3NjMxODYsMzM0NDIxLjAxNzUyMzI0NTYsNDE2MzQ5LjM0MzMxMjI4NjYsNDI1NjI0Ljk5ODc3MzE2MTMsMjE3Mzk2LjQ1MDQ1NzM0MTUzLDAuMCwzMzYxMzkuNTAzODQzNTkyNSwyNzk0NzguMTY3NTI5NjczNjYsNjE2MzguOTEzMzE3MTczNTMsMjQ5MjUuODIzODA4ODYzNjE0LDEwOTgyNC4xMjg3ODY1MTc1NSw0NjM5MzcuNzMxMTM2OTU1NCwzMTcxNTcuMjg5NTA5Njc3NCwzMDgwMjQuMjAwOTA1ODMzNDUsMjI3OTEzLjI2MDMyMjkzMjksMTMwMjUxLjAwNTYzMTY2NjA4LDI3NTEyLjQ0MTg5MDY4MDI0LDM4MDkyOS4yNzQ0NTkwOTMzLDI3ODQ5OC4zMTE1OTY3Mjg3LDM3MDMwNy41NjA3ODI2MzMsMC4wLDAuMCwwLjAsMC4wLDI2MDU4Ni4yNjU5NTQxODk0NywyNTgzMjAuNDMwMjY0Mjc1NywwLjAsMzU1MTAwLjkxNTY4ODA5OTMsMTAxODA0LjYyOTA2ODY0NzQ1LDM5NjA1MC41MDU5NDM5MDk4LDAuMCwwLjAsMjY0NzUwLjcxOTIwMTUyMDIsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsODMyODAwLjQzODQ4NDM1MzIsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDEzMzE3Mi42NzczODM5Mzk0NCw4MTk4NjQuMTcyNDAzMzA3Nyw2NTMwNi44NTEyNjY2NjY4OCwxMzk5MzEuNjA2ODkyMDE2NTQsNTI0NzAuODAwODY4MDcxNzQsODQzMzQuMzIxMTc5ODQ1MTEsMzExMzcuNzkzODAwODE3MjAyLDEyNDg0NzAuNTExODg0OTU2NgorMTQsTW9uIDcgRmViIDExLDEzMTUxMS40NzAwMjcxMzk1OCwxMzYwNDMuNzQxODQ2Mjg2OTgsMTQyMDE2LjA2MzAwNzg4MjEzLDUyMDk4Ni4zMjY5NTc0NDQzNywyMDUzMTMuODIzNjk5MDU2MiwyMDE2NjUuNjQ4ODg2MjIxNzUsMzc2MTkxLjAwNjQ2MTUzNDgsMC4wLDE3ODExMC40MTg0OTk3NzIxNyw0MzcxNjguOTg3ODk1MzE1NCwxOTI0NDkuMTE4NjQ2NjE0MDgsNTEzNDMzLjE3NzEyOTUwOTIsNTA1NDg0LjcwMzEwOTg5NTc1LDE4MDA1NS41Mzg3MDgxODUyNSw1NTE5MzYuNDk0OTY5MzE3MywxODM2NjEuOTUxMzE1ODQ2NywyNzIwNjUuNDk0ODc1NDMyMiwyOTkyOTEuOTUyODEwNjkxOSwzNjg5NDIuNjMzNzE5OTU3MywzNzMwNDEuMzUyODk5MTQxOTYsMTg5MTk4LjU4NjI2OTI2ODA0LDAuMCwyNzE1OTAuODM2MzM4Nzg5OCwyMTU1ODkuOTQyNjIzODk2NDcsNDcyMDguNDg3MzI1MjQzODM0LDE5MDE5Ljg0MzAyNTg5MzM0NCw4NDU3OC43Mzc3MTAzODEyLDM0OTE3OC4xMjc1ODQyMzE4LDI0MTg3OC40MjI4MDkwMzc1MywyMzI3OTMuNjIyMTc1NTY1NzIsMTc1MjY0LjQ0NDAzNzMxOTQ4LDEwMDQxMC43MDk5MzExNzU3NiwyMDgwNC45NjMwMzc4NzI4MywyOTE1ODUuNjUxMzcwMzUxOSwyMDk2NDAuNTM4MDM3MzYyLDI3ODg5NS43NTkyNzY4Nzg2NywwLjAsMC4wLDAuMCwwLjAsMTk2ODM3LjI4NTkzOTk0MDQ2LDE5NDMzNi43MjY1ODc0NTQ1LDAuMCwyOTAwOTQuNzM1NTY5MDk5Niw3ODkxMy4zMzU5NjY3NjQyOCwzMDkyNTguMzE4MTkxMTY1MDUsMC4wLDAuMCwyMzA4NTAuNTA3MjI2NDE3MjUsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsNjUwOTEwLjc1OTQ4NjM2MjgsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDI3ODkyNS44MTE4MjM4MzgyLDgzNDIxMS45NzU5NDg4MTczLDUxOTkzLjQ3OTgyODEyNTE2NCwxMDkwMDIuMTE5MzkwNzk2MTksNDA1OTUuMzI5NjUzNTQyOSw2NzAwMC4zNTgzNTQ5MzkwOSwyNDM3My4yMDg4MTg4OTQ5OSw5MzgyNzcuNzEzNTkwNzc2MworMTUsVHVlIDggRmViIDExLDEwMjg1MC41ODQ1NTY3MTcyNywxMDUwNzIuNjc4ODIyODA2NDQsMTA5NTQzLjM4NjM0MzY3MjU4LDQwMjU0Ni44ODA3OTUxOTIxNSwxNzYzNTQuMjY3OTk3MTUyMiwxNjgzNzQuNDcyOTEyMTc3MzMsMzA3NjQ5LjMwNTM1OTI0MTEsMC4wLDE5NDk3NS4zMTQyOTczNTU4LDM4MTM5Ny4yMDU3MDk4OTUsMTg2NTk1LjQzMTgzNTUyOTMsNDI0MzQzLjM3NTgyNjQ4MzA3LDM5ODEwMC43MjUyNTI1MDM1MywxNTgzMTIuMTQ3MDk1NzY1MjgsNDU2ODcxLjE4Mzg4MTE5NDc0LDE1NjU3OC43OTU2NzAzMDExLDIzMDAyMS45MTg4NjU2OTYzNSwyNTA5NzcuNzQxNzg5NTU3ODgsMzA3NTQxLjQ2NzI5NzkzMTksMzA4ODY4LjU1Mzg5NTk0NTYsMTU1OTY0LjY4ODIyOTAyMTEyLDAuMCwyMTMwNjguMzQ4Nzc0MDIzOTQsMTYzNDUwLjg4NTAxOTQ0OTQzLDM1NTkzLjQ0MTcyNDE0Mjc5LDE0Mjk4Ljg2OTUxMzYwOTQyOCw2NDA0Mi40ODQ2ODg1OTM3LDI1OTY2MS41MzY5NjcxMzE3NSwxODE3NjMuOTU0NjY3MTQ5MiwxNzM2ODguMzUxNTU2NjAwOTcsMTMyNTU4LjUxMTIyMTUyNzIsNzYwODkuMDczOTcxMzY4NiwxNTUyOS44MzA1NDc1NTgzMzgsMjE5NzQ4Ljg1ODIwNTE3NjQ4LDE1NTkxNS4xNTIzNTgxMjM4MywyMDc1MDguOTIzNzA0MDAyNTUsMC4wLDAuMCwwLjAsMC4wLDE0Njc5OS4wMDAyMDEyMDc1MywxNDQ0NjQuNzU1Njg0MDcwMDMsMC4wLDIyOTM1NS41MDYzOTk1MzA4LDYwMDUwLjYxMzQ3NDM3OTI2NSwyMzY2NDcuMTM2NTk5NzI1NjcsMC4wLDAuMCwxOTA1MjcuMjc4ODU0NjA3MSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCw0OTg0MDUuNDI1MTM5MjAwNzYsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDMxNTM4My40MDIwOTc3MTA0LDc0OTk4OS4zMDA5NTM5OTE1LDQwMzYwLjI4Mzc1NDQ3MzQ5NCw4MzI1Ny4yODc0MDM5OTA2MiwzMDg0Ny4wNzU4ODM5MzY5ODUsNTE5MjkuNTEzNDE4NTAzNCwxODY4NC41ODgyODE2MTg0MDIsNjk2OTQ1LjU5NDY5MTIyNjQKKzE2LFdlZCA5IEZlYiAxMSw3ODc5My43MDQ1NTI4NzI1Nyw3OTczNi4yNTIyMTI3NTgyOSw4MzA0Ni4zMjUwNzQyNDEwNiwzMDU1NzYuMjQwNzIxMjQwMzUsMTQ0MTc0LjE1NDM2MzIxNzM5LDEzNTExNS4zNTE3NTUzNTY4LDI0MzQxMy40Nzc4MTg4OTQyLDAuMCwxODEzNjEuNTU0MjczNDMzMjYsMzE0ODgzLjY5NjUwMzQ1NDgsMTYzNjg0LjM1Mzc4OTMyMzg1LDMzODE5MS4zNDQ4MTQ4MjY1NiwzMDY1ODAuNjg4MTkyNDEyMSwxMzEzMzUuNDQyNzY3MTQ2NywzNjQ0OTguNzcyNDgwMTM0MjcsMTI3MzkxLjE3NjcxMTM0MTE1LDE4NjEyOS42OTk1MDIwOTYwNSwyMDE5OTAuMjc5NzM1NTM5MzcsMjQ2NTI1LjgwOTYwNTk1OTksMjQ2NDYzLjI4MTg2MTkxNzIsMTI0MDgwLjEwOTIwNjQwNjM3LDAuMCwxNjM2MTQuMzQxNTYyMDQwMTgsMTIyMjU4LjAwMzk0ODMxNzIsMjY1MDUuODU0MjgyNzk1MDg4LDEwNjIzLjQ3MTM3Njc0MzQ5MSw0Nzg1NC4yNDU5Njc2NDA4MjUsMTkxMjE2LjgyMDQ2NzE2NzI3LDEzNDk5Ny4wNjM3NTcxMTE1MiwxMjgyNTIuNzI5ODM5OTY5NjIsOTg5NjEuODYzNjAyOTg4MSw1Njg5MC42MjI4NTQ5NDI2LDExNDcxLjY0MDk2NDgyNTI0LDE2MzU4Ni4yNTA4MTUwNTY5LDExNDgyOC41Mzg0MTkzOTUzLDE1Mjg3OC44Mzk5Njc1NzY4NSwwLjAsMC4wLDAuMCwwLjAsMTA4MzU5LjkzMTM1NDY3NzM2LDEwNjM1NC4xMjMzMTM4NzE1NSwwLjAsMTc3MTM1LjIyMDE4NzM5NDA2LDQ1MDQ4LjIxMjQ3MjI0NzA2LDE3ODI5OS45MTkyNDE5ODYxLDAuMCwwLjAsMTUxNzAwLjY4OTM4Nzc0NDczLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDM3NTY4OS4wNjgyMDYyOTMyLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwyOTc0ODYuMTk1NDQwMDgzNiw2MzA2MzAuMTIyNDc2MTQ2OCwzMDc0Ni40MzgwOTY1OTgzNDcsNjI2NDAuMjQ4MDU4NDQxMjMsMjMxMTQuMTY5MjMxOTQ2OSwzOTUxMy41ODYwMzU0OTA2OSwxNDA5Ny43MTk0ODMzNzU2NjgsNTEyNzc2LjQ5MDU4NTU0NTU0CisxNyxUaHUgMTAgRmViIDExLDU5NDIwLjI1MjcwODY4MTY2LDU5Njg1LjQxODU3NTQ1OTMwNSw2MjExNC4yMTY1ODIwMTgzMzYsMjI4NzkxLjc4NjUzOTAwMjE4LDExNDA0NC41NzEwMjMwMDA2NSwxMDU0ODUuNTMwMTIwMTQwMjIsMTg4MDk0LjEyMzYyNjA3MjgzLDAuMCwxNTU1MzIuNTE0ODE3NjkwNDUsMjUwNzcyLjg5NjUxMzMyODYsMTM1NTk5LjA3NTAzOTEwMDM3LDI2MjcyMy4xMDYxNjAxNTcsMjMyMTM2LjA1MDI2MzEyMjU0LDEwNDkzOS4zMjcwMjE4NjYwNSwyODMzNzYuMjEyMTA5MzA3NywxMDA0MzAuMzMwODE0MTEwMzksMTQ2MTc3LjQyNjk0OTUyMTU2LDE1ODAyNC42OTg0ODczODY1NCwxOTIzMTUuMDk1MTY0MDIzNTcsMTkxNjM0Ljk2OTUxNzExMzE4LDk2MjY3LjMxNzIyOTg4NTQ5LDAuMCwxMjM2MTAuMTY1NDk1MTIwMzcsOTA0NjAuNzY0ODE5ODkxNTQsMTk1NDEuNjQ2NjI2ODM4Njg3LDc4MTcuMzU1NDE4MDM2NTg2LDM1Mzc5LjE3NzQxNTQ0MTE3NiwxMzk2NzkuNDg2MzcwMTUzMSw5OTMxMC42NjY1MjAyNDcwMyw5Mzg5Ny42MDg5NjE4NjM1OSw3MzEwOS44NjM0MDAxNjYxLDQyMDgwLjgyNTA3NDA0OTQyLDg0MDEuMzM5MTI2NDQxNTkzLDEyMDU3MC43NTk1MzEwMTk5Nyw4Mzg4Ni41NDg0MTk3MzM3NSwxMTE3MTUuNzMyMzU2ODgzMjIsMC4wLDAuMCwwLjAsMC4wLDc5MzEwLjYyNTY1NDMxOTc0LDc3NjcwLjQwMjY0ODY5ODAxLDAuMCwxMzQ0MTguNTA1Nzk2MDE3NTMsMzM0MTAuOTU5NzY5MzkzODEsMTMyNzAzLjYwNzM5OTIxODg2LDAuMCwwLjAsMTE3NzY2LjYwMTM0NDI1NjM2LDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDI3OTcwMi4zNDA3MjY4NDQ1NiwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMjU3MTExLjAyMzA4MDQ0MzMyLDUwODQ1Ni4xMDk3NjI3MzksMjMwODQuODYzMTA5ODEzNDMsNDY1NjguMTE3MjE5OTkyMjcsMTcxMjcuMjk3MzE0MjkzOTA0LDI5NjQwLjA2MzE0OTIzOTkzLDEwNTA0LjQ0MTI0ODY1MTY0NSwzNzQzMDMuNzE5MzY5NTkxOQorMTgsRnJpIDExIEZlYiAxMSw0NDI1Ni44Nzk0MTY1NzAwNiw0NDE4OC44NTc0NDQ5NzIzNyw0NTk1Ny42ODk4MTgxMDU2NzUsMTY5NDIzLjE4NjA2ODcwNjA3LDg4MTExLjEwMDc2NDAyNzAxLDgwNzA2Ljg4OTc3MTkwMTc4LDE0Mjc5My43OTczNzU2MTc5NiwwLjAsMTI3MDIyLjEyNTY3Mjk1NDM4LDE5NDcwOS44MzM5MDMzNjUzMywxMDgyNDEuNDM1MzE0ODg3NDgsMjAwMjU3Ljk2MjU5Mjc5MDQsMTczNDU1LjIyODUwMzU1NjcyLDgxNjczLjA1MDU5MDA3NzMxLDIxNjEyNS42NTUyMzI1ODAwMyw3NzQwMC4zODI0ODAwMTY0LDExMjMzNy44NTQwNTU2NDk0MSwxMjEwOTQuMTYzMTc0Mzc1OCwxNDcwNTQuMTQwMjI5MDIwMSwxNDYxNzAuNDMyMDQ1NTgzNzYsNzMzMDcuMDM4MDk3Mjc3MjQsMC4wLDkyMjAwLjA4MTA0MTU0MjUsNjYzNDEuMjY1ODA3ODQ0NiwxNDI4OC40NjY4ODUwOTk2NTEsNTcwNi44MjY2OTgzNDk1NjUsMjU5MjguNDQ0ODk4MzkzNjY3LDEwMTM0MC42NjM2MDU0NTA4NCw3MjQ4MS43NzAyOTA1MTY5Niw2ODI1NS4yODE3NDk5Mjc1Niw1MzU0Ny41ODIzNDAyNzk0MSwzMDg1Mi42MzY1NjYzMTU2OCw2MTA4LjYzMTUwODU0NTE5MSw4ODEzNy45NTM1MzYyMjQ1NSw2MDg2NS44ODE3Nzc4OTI3LDgxMDc3LjY5ODkxNDY2OTIyLDAuMCwwLjAsMC4wLDAuMCw1NzYzNy43NDg3NzIwMjgzOSw1NjM0MC4wNjc2OTk5NDcwNzQsMC4wLDEwMDYxNC44NTI5OTA5OTI0NywyNDU1MC42MDU1MzU5NDQxMDUsOTc3OTIuNDU4NDI2NzAwNzQsMC4wLDAuMCw4OTcxOS4xMTM2NTA2NDAwNSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwyMDYxNjMuMTM4NjM0MDQ5MiwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMjExMDI0LjE4MTYxODk0MjUsMzk4Mjk2LjI2NjEzMzMyMzEsMTcxMzMuMjI3ODI0NzU2MDUzLDM0Mjg1LjAwNzE4NTI1MzY4NiwxMjU3NS42NzU3MzA5NDcwMSwyMTk4Mi4wNTgzMDc1MTM5NDQsNzc0OC4xNjEzOTA4Njk5MDU1LDI3MTQxMC4wMzk5MDQ5NjYyNQorMTksU2F0IDEyIEZlYiAxMSwzMjYzMy4zMDYyOTg2NTE4NywzMjQyMi45NjY2MTIxNDU1NDUsMzM3MDMuMDA0OTE1Mzg0NTI1LDEyNDMzMi43MzkzMjYwODg1Niw2Njg4MS43NDUyNzk4NzQ1Miw2MDgwMS4xODgxNTYzODU1LDEwNjkxOC45NTE5MzU0NjksMC4wLDEwMDQwNS42OTA0ODc4MjEyMSwxNDgzNTYuMjgzODMyNDkwMSw4NDE4NC4yMTU4ODM5ODk4OCwxNTA0MjQuNzUyMjY3ODg0MSwxMjgyMzUuNTI1NzMxNzY1OTcsNjIzNDEuODg2OTU2OTc2OTcsMTYyNDE3LjU3ODQ4NzUyMjY3LDU4NjM5Ljc5OTM4Mzc0NTU3LDg0OTIyLjg3OTE3NTc1OTM2LDkxMzM4LjYxNTk5MTE3MDIxLDExMDczMy45MzM2MDIwMDM5OSwxMDk4NTQuNzk5MTMzOTkwMTUsNTUwMjIuNjYwMzc0OTg3MTQsMC4wLDY4MDY1LjQ5NzUyMDI1Mjc0LDQ4MjkzLjExODk1MDk4NTczNiwxMDM3NS4wNjM3MjQ0MTU5NTMsNDEzOC4yMzY0NTgxODc4OTEsMTg4NjMuODIzNjE2NDQ5ODc4LDczMDk5LjMxNzY2NzQ0ODI0LDUyNTQ4LjgwODI4MjQzNzIyLDQ5MzE0Ljg4NzQyMTc1ODAzLDM4OTM3LjY1NjUzMDUyMjAxNCwyMjQ1NC4xNDc5ODcxODg5MDIsNDQxNC41MTEzMDExNjQwODYsNjM5ODUuMzM5NjYwODgyODksNDM5MDYuNTg1NDQ1OTA0Nyw1ODQ5OC44OTk0NDIzNzM1OCwwLjAsMC4wLDAuMCwwLjAsNDE2MzQuOTE1NTUxNzY5MTksNDA2MzIuMTkxOTgzODUxMjYsMC4wLDc0NDkwLjE3NzgxMDA5ODQ1LDE3OTAxLjAxNDEyMjc3MjIyMyw3MTQ3Ni45MTYwMjE3NTExMiwwLjAsMC4wLDY3MzY1LjA5NTc5NTU2MywwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwxNTA3MDYuMTE0NDk5NDgxMTYsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDE2NzM4MC4wNDg2MTEyNDAzNSwzMDU1MDcuODg1ODAyMTEwODMsMTI1OTYuNzk0NTAwNTQxOTE5LDI1MDM5LjQ1MTMxODE1ODM0LDkxNjMuNjY0MzA5NDM3MTIsMTYxNTEuODg5ODAyMDg4NTQzLDU2NjcuNTQ2MDk1NTUzMDk1LDE5NTY4My42ODQxODE5Nzk5CisyMCxTdW4gMTMgRmViIDExLDIzODYzLjYyMDk3Nzg0MjkyNiwyMzYxMi4xOTU0MDMxMTEzNCwyNDUzMy40Nzg0NTM5MDQ0Miw5MDU1OC43MTA0MDQ4OTM0Nyw1MDA3My40Nzk1MTgwMjExMSw0NTI0OC41NjczMTA5NjQxNjUsNzkxNzguNDQ0NTExNzAxNTYsMC4wLDc3NTMzLjE3Mzk5NTkwMzE1LDExMTQwMy42MTQwNDkyNDE4LDY0MjI0LjcyMjkzMjEyNjY1LDExMTY4My43NTA4NDUxMTA3Niw5Mzk3OS4xODkyNjAzMTAzOCw0Njg3OS45NjU4NTM2NzQxNywxMjA2MzIuMDAwNTk1OTA1NDgsNDM4MzYuNjMyMzY0MjM2MTI0LDYzMzc0LjM2NDk2NTA5NzMsNjgwNDEuMDk1NjU0MjUyODcsODIzNzguNjY2NDQzNjQ5ODgsODE1OTcuMTM5MjEyMDMwNzEsNDA4MjYuNjA4OTgxNDMyNDEsMC4wLDQ5ODIzLjE2Nzk1NzI1MDgzLDM0OTM0LjYzOTE5MzM3ODMyLDc0ODkuMDA0MzYyNDY3NDMzLDI5ODMuNjQzMTc3NTU5Mzg1LDEzNjM5LjE5Njk0MjY3NDI4Myw1MjQ2NC41ODA1NjcxODIyNzUsMzc4ODAuODgwNDEyMDcyOTA0LDM1NDQ0LjQ2NTQzODM1MjUzNCwyODE0MC45MDM3MzIzMDYsMTYyMzkuOTQ3Nzk2MzgyMTQsMzE3My40ODU3NjkzMzQyNCw0NjE3OC4zNzYyOTI0ODg4MzYsMzE1MTQuMTI1MTQ1MzU0MTg0LDQxOTk1LjQxMTQ2ODExMjY0LDAuMCwwLjAsMC4wLDAuMCwyOTkxOS4xMjcwNjg5MTM2NDcsMjkxNTcuOTIxMzQ0MzM3NTMsMC4wLDU0NjU1LjM1MTE2OTQwNTkzNCwxMjk2Ny41MTkwNjc4ODkzNzYsNTE4ODMuODM1MjMzNDQ0NTUsMC4wLDAuMCw0OTk5OC45NTE4MzI4OTkyMDUsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMTA5NDAzLjMyNjMwOTM4MSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMTI5NTc3LjEyNjg1ODE5Mjc3LDIzMDYxMC4wNzE0ODU4OTIzNSw5MTg5LjMxMjIyODYzODkwOCwxODE2My42NDU1NTc0MjUzOTIsNjYzNC41NjA0MTQyOTMxMDE1LDExNzc2LjY5NTU0MzA1NTM4NCw0MTE2LjY2NjE4NzgyMzMzOCwxNDAzOTMuMjMyMTQ0MDg4MworMjEsTW9uIDE0IEZlYiAxMSwxNzMyOS40MzczMTg5MjYxMSwxNzA4Ni44Nzc4MjMzMjI2NCwxNzc0Ni44Mjg1MzIzODIwMDIsNjU1NDAuMzM2OTA5NDc4MjcsMzcwNzguNjA4OTI0NTczMDEsMzMzNDIuMzA4NTk4MDExODksNTgxMDguMDE1Mjg1NzY4NTYsMC4wLDU4ODI4Ljg5Njc5NDE1NjIsODI2OTEuMzc2MjAxNjYwNTIsNDgyNzUuODMyMDYwOTY2ODYsODIxMzcuNTE2MDAwNDg1MTQsNjgzNzIuMzAyMjU1MjI2MTQsMzQ4MzcuMTQ2MzEyMTE4MDEsODg3NDUuMTc0MTk3NTQwOTgsMzI0MjAuNTg2NTg0NDczNTU2LDQ2ODAzLjkwNTIxODY2NTAzLDUwMTc3LjUzNTEwMzAzMzY3LDYwNjg0LjE3OTM2NTk5OTcxLDYwMDMxLjQ1MzIwMTA5NDI2NCwzMDAxMC41MTM4Njk4MTQwMDcsMC4wLDM2MjExLjEzNzAwNDkwMTg0LDI1MTM1LjI4MDc5MjY1MDY3Miw1Mzc4LjI0Mjg2MTU2NzU5OSwyMTQwLjU2MjE2MjkxOTU3NzUsOTgwOS4xOTE5MTk5ODU4MjIsMzc0OTAuNDc5NDIyOTk3NjUsMjcxNzIuOTI1NDA3OTMyMjgsMjUzNTkuNjgyMzkwODA4MzAyLDIwMjMxLjAwNjg5NTkwMzQ3LDExNjgyLjYyNjA1Mzc0MjYyOCwyMjcwLjkzNDQ2MzI4ODE4MywzMzE1OC4xMTYyNTI1MjY3NiwyMjUyMC41OTkwNzE4MDAwMTgsMzAwMTUuNDgyMzk3OTY5NDcsMC4wLDAuMCwwLjAsMC4wLDIxNDAzLjAwNzc4NTczODQxMywyMDgzMy4wNTc2MTM4OTU0ODYsMC4wLDM5ODAyLjU2MDYxODI3MzQ3LDkzNDEuMzMxODI1MzczMDE0LDM3NDQwLjkwMTAxNjQyNDU4NSwwLjAsMC4wLDM2NzYxLjUxMDcyMDkwMDI3LDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDc4OTUwLjUwODkyNDU4MDE4LDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCw5ODUwNy41ODc3MTY0Nzg0MiwxNzE4OTEuNTY1OTQyMzA5NTMsNjY1OS40NTU3NzA4MzI1NzUsMTMwOTkuOTYwNzMxNDMzMzIsNDc3Ny4wNTc4OTMyMjUxNTMsODUzMC43OTgyODcwNjQ0MjgsMjk3Mi4zNzUxMjE0NjgwMDYsMTAwMjkzLjc2Nzg0MTkyMTI5CisyMixUdWUgMTUgRmViIDExLDEyNTA5LjkyMjA0ODkzNjE3LDEyMjk3LjcwOTY4OTQyOTQ3NywxMjc2OC41MDY4NzI0NDQzMDQsNDcxNzUuMzQ5OTk4ODg3MTksMjcyMDkuNjA2NDE1MzQyMjUyLDI0MzY4LjU0NDYwMjQzOTU4Miw0MjMyNC43NjcyNTU1MTA1MSwwLjAsNDQwMzAuNDgzMDkyMzM5NjcsNjA4MDIuNTA3NDE4OTk4MDY2LDM1ODYyLjQ5MTU3ODAyNzYyLDU5OTM0LjEwNDQ4NjU1NDE0LDQ5NDM1LjA0NjY3OTg2MjE5LDI1NjM5LjU1MDIyMDU4MDczLDY0NzcxLjg4ODM4OTM0NzMxLDIzNzY3LjI3MDY5NzgxODQ1OCwzNDI3MS4yNTU0NzcwNTI2MywzNjY5Ny4xODE1ODcyMTU2OCw0NDM0MC41MjQzNzkyNjA0NzQsNDM4MTYuNjE2MTAxNTEzNzMsMjE4ODguNzIwNjc4MDg2OTEsMC4wLDI2MTU5LjEwOTA2MTM1NTczNSwxODAwMC4yMTg4MDkzNzg5NCwzODQ1LjI2MTE2NjgzMTA5MSwxNTI5LjA4NjA0NDg3ODg5NDQsNzAyMi4xMDkyODE0NDU5MjgsMjY2ODcuMzgxNzUwMTcwMDI1LDE5NDA4LjEzNTAzMTM4NzgxNCwxODA3MS45OTUxMTU0NTI2NSwxNDQ3Ny45NzQ4ODY5MzEwNjgsODM2NS4xMTc0Mjc5NDU5MDUsMTYxOC41NjY1Nzg3ODA5MzIzLDIzNzAzLjgxNjM4ODI1OTczNiwxNjAzMS44MDczNzAxMTgyNDQsMjEzNzAuMjAyNDUyNDAzMTMsMC4wLDAuMCwwLjAsMC4wLDE1MjUwLjE5ODY1NTA2NTE1NSwxNDgyOC4xMzIzNDQ0NTk4OTcsMC4wLDI4ODAyLjY3NTg0MjI3ODMzNSw2Njk2LjY4MTY3MDA3Mjk4LDI2ODgxLjg2MTcxOTM2MjU1OCwwLjAsMC4wLDI2ODE3Ljk3ODU0ODI1MjcwOCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCw1NjY4Mi43NDgzNDA2MTg3NywwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsNzM4NDAuNDc2MjQyMjczNjQsMTI2ODI0Ljk0OTk5MDQ0MzE0LDQ3OTguOTA5MDk4NTY4OTM5LDk0MDAuODgwMDMyNDc1OTg3LDM0MjMuMjE0OTc1NDczNjQxLDYxNDUuMTE5NTgzMjQ1NjIxNSwyMTM1LjE0NzgwMjIyMjM2Niw3MTM3OC4zOTYyNzU5NDA2NworMjMsV2VkIDE2IEZlYiAxMSw4OTg0LjY4NDQ2NDY3MDExNyw4ODA5LjE3MzEwMDExODQyNyw5MTQzLjgwNzY5NTY5MDIwMiwzMzc5NS45OTIxOTI2Mzk4MiwxOTgxNy43OTUwODkyMzQyNSwxNzY4Ny43ODE4NDg3NDc1NzQsMzA2MzIuNjYzODA0OTM5MTEsMC4wLDMyNTk1LjUwMTI2NTkwMzc4Miw0NDM1OC42NDU5NDcxNTkyNCwyNjM4Ni45NjI1ODI0NzY0OTUsNDM0NDMuMjk1ODQ4MTk3NjIsMzU1NTIuOTM0MTc3MzQ4NTUsMTg3MjAuMDY4OTE2NTM5NDcsNDY5NjAuMDEwNDgwMjEwNzQ1LDE3Mjk1Ljg0NjMzNDg0NTU0LDI0OTE1LjA2NzM0NjQ4MTY1LDI2NjUxLjQ5MTQ0MzU3MDQyLDMyMTc3LjUyMzMzMzQ4NTM3LDMxNzY4LjQzOTcwODEwNDE2OCwxNTg2MC4zMDI0NzYyMDEwNzcsMC4wLDE4Nzk5LjIzNjcyMjIyNjkzLDEyODM3LjgwNDcyMzIwNDQ5MiwyNzM4LjUxMDg2NjQyMTI4OTQsMTA4OC4xMzc0Mjc4MjAzMDI1LDUwMDYuNTY2OTU3NTk5MzYyNSwxODkzMi42MTQ4MzU3NDE3ODgsMTM4MDkuNzQwODkwNjc0NTc5LDEyODMzLjIxMTQxMTk5MDIzNiwxMDMxOS4zNzU3MzgyOTQ2MzcsNTk2NS4yNjkyNTg4NzQ3MTUsMTE0OS41MTg1NjcyNzEyNywxNjg3OS4zODM3OTEwNTQ2MDYsMTEzNzMuNzI1NzcxMDc3NTI3LDE1MTYyLjkyMzkyMTQ3MzE5MywwLjAsMC4wLDAuMCwwLjAsMTA4MjguMDM1OTQzMDc4MzY4LDEwNTE4LjI5MjA2NjYzOTQ5LDAuMCwyMDcyOS41Nzc1NjAzODk5NDYsNDc4MC41MDg3NTI1MTcxMTgsMTkyMTUuNjE5Mzc1NDkwNTgsMC4wLDAuMCwxOTQzNS4yNDQ1Njk3MTIwOCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCw0MDUxNC45NTExMzk1ODk3MSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsNTQ3MzEuMTg2NDcwOTM1NzMsOTI3OTAuNzQ3MzQ4MDYzOTYsMzQ0MS4zMjMzOTg5MDY3MjUsNjcxNy4wMDQ1NjUzODg1MTgsMjQ0Mi44Mjg2NTA1MzY3NzE0LDQ0MDUuMjU4NzA1MDc3NDgyLDE1MjYuODkwNDM3ODMzMzcyMyw1MDYyOS4zNDM4Mzk3ODAyMjQKKzI0LFRodSAxNyBGZWIgMTEsNjQyNC4xNTc1ODE3NjkwOTUsNjI4NC4yMTMxODY3NjA4MTgsNjUyMS4yOTQ5MjEzNDMxNDksMjQxMTEuMDA5ODEwNDgwNCwxNDM0Mi40NjU1NDk1Mjk5NjcsMTI3NjMuNDU1ODgxMDk5MDMxLDIyMDQ5LjYzMjIyMzI3OTk2NSwwLjAsMjM5MTQuNjYyODYyNTQxNjg1LDMyMTQ4LjY0OTY0NDIwNjYyNCwxOTI2MS4zNjI1MzY4MzUyNDQsMzEzMTEuNjkzMzY2MTk0MDgyLDI1NDUxLjA4MDE3MDI1MzE2LDEzNTc2LjI4MTU3OTM4OTA5NSwzMzg1Mi41ODU0MjI1MjIyNjUsMTI1MDguMTgxMTkyNjA2MTY0LDE4MDAzLjA2OTQ1MTI3MTU1LDE5MjQwLjk1MDI4OTM1NzgxNCwyMzIxNC45OTQ2ODMwODM0OTYsMjI5MDEuOTY3OTY3NjUzNTksMTE0MjcuNzIwNTY3NjUwMDA5LDAuMCwxMzQ0OC45NjQ0MTc1NjU0ODgsOTEyMi44NTU2MzQxOTQ4MDgsMTk0My41NzAxNTk3NTEwMDAzLDc3MS43Mzc5ODAwNjM4ODI3LDM1NTYuNzY3MTQyMjgxMjI4LDEzMzkwLjQwODM1ODQxNDg4NSw5NzkzLjI1NDY3NTAyMTIyLDkwODQuNDUzNTk0NjE0ODM5LDczMjkuMTk1MDYyNjgwNjYxLDQyMzguNTg5Mzk0MTQwMTc1LDgxMy44MjE4MDAxNzU0ODc5LDExOTc4LjM2Njg2MjcwNzQxLDgwNDQuNTE3MDQwOTkxNzMxLDEwNzI1Ljc3MjM1NjUxMDg0MywwLjAsMC4wLDAuMCwwLjAsNzY2NC4xNDI4MjUzMDkxMjIsNzQzOC41MzQzOTgzMjk0NzIsMC4wLDE0ODQ5LjAyNTUzMTIwMzY0NiwzMzk5LjkyODUwNTAyNjgwNjMsMTM2ODIuNDMwMDI4MzYwOTIsMC4wLDAuMCwxNDAwNS41NzI3OTE5MjExMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMjg4NDUuNzg3MDUwOTc2NzE2LDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCw0MDE5Ni4xNTU0NTQzOTc0Myw2NzQxMi44Njg2MzAxODQ2NSwyNDU3LjI4NzE0NzczODExMzYsNDc4MC45OTc3MTY3MTUzNDgsMTczNi44MDQzMTEyMjM1MjcsMzE0NC42ODYwNzA4NjUxMTMsMTA4Ny42MjY3MzczMjgzMzc2LDM1ODA0LjM0OTg1Njc2MTA5NQorMjUsRnJpIDE4IEZlYiAxMSw0NTc1LjQwNDA0MDE3NjU2MTUsNDQ2Ni42NTEzMjQ3NTgyMDcsNDYzNC4xMzE1ODA0MjcwMDcsMTcxMzguNjY3NDkzMjgwODE2LDEwMzIzLjM3NDQ0NzM4ODA2Miw5MTYzLjU2NzUwMTQ2ODQ0MiwxNTc5Ni40NzcwOTE5NTE5NSwwLjAsMTc0MTQuODUxOTMxODc4MjI3LDIzMTY4LjE0MjkzMzU3NzM4NiwxMzk2Ni4xMjc0NjUxMDE5NTYsMjI0NTcuMzc5MjE5NjA5MTM4LDE4MTQ1Ljc2ODM2MzQ3Mzg1LDk3ODkuNDM3Njc4OTIzMTE0LDI0MjgzLjYzOTE0MjAyNjAxLDg5OTcuNDQzOTk0MTgyOTU1LDEyOTQwLjU3NDYwOTYxNDIzMiwxMzgxOS45MDE2MTEyMDA2NzIsMTY2NjQuNjU4NTI4MzUyNDcsMTY0MjguODE1NTA1NTE5NzIsODE5My45NjY2NTg3MTk5NzQsMC4wLDk1ODMuMTc4ODkyODI1MTgzLDY0NjIuMDY4MjUxMTU4MTYxLDEzNzUuMTM1NzcxMTE1MTc1LDU0NS42OTExOTE0MjU4NTMzLDI1MTguNzQ4OTgwMTE3NjM5Myw5NDQ0Ljc0NTcxOTQ2NjE4NCw2OTI0LjExMzAwMTg1OTM3MSw2NDEyLjY1MzU4MTM1MDEwNyw1MTg5LjAxODExOTE0MTg2OSwzMDAyLjA1NDQ5NDM3MDQ2NCw1NzQuNTMwMTIzNjAyMTQ3Myw4NDc0LjI4MjQ3NTU4NDI5Miw1Njc0LjI1NzQyOTUxMjQ3Myw3NTY2LjI1OTI0OTUzNjk3NywwLjAsMC4wLDAuMCwwLjAsNTQwOS41MDY3NTg2ODk0MzMsNTI0Ni4yMjM5NjA4NDA3MDgsMC4wLDEwNTkyLjc5ODg0ODg2NzUxOCwyNDEwLjA1OTMxNjkwMTQ0ODcsOTcwOS4wNzk0ODgxODczNzIsMC4wLDAuMCwxMDA0My42MTM1ODAyMDcwMjgsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMjA0NjYuNjIwOTcxOTI1NjQsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDI5Mjk2LjI2ODQwNzI4MDQwNCw0ODY4Mi44MjEzMTcyMTE5NiwxNzQ4LjA1MTMxMTg5NjI2LDMzOTEuNDUyMzcxMzQ3NTg3NCwxMjMwLjc5NTc3MzEyMTk0MjYsMjIzNi40ODE3OTM0ODkyNTY3LDc3Mi4wMzk4NzcyNTY1NDUyLDI1MjUyLjE4NjI0NjM0MDM5NgorMjYsU2F0IDE5IEZlYiAxMSwzMjQ3LjQwOTg4MjUxODMwMjMsMzE2NC40OTI3MDk5MDI1NjEzLDMyODIuNDk1NzYwNjMxMjk1NSwxMjE0My4wMDkxOTc2MTk5MzYsNzM5NS40NDQxMTM0MTY4NDQsNjU1MC4wNTUyNTM4ODM0NDQsMTEyNjkuODUxNTY5Nzc4NTQ4LDAuMCwxMjYwMS40OTcyODc5OTM1MjEsMTY2MTQuODIwOTkzNzM4NTY1LDEwMDY4Ljg2MTc4NzMzOTAyLDE2MDM4LjAxMTQzNzg4NzM5LDEyODkxLjAzMjM3ODgwODA3NSw3MDIzLjg5NTczNTE2Mzg1NywxNzM0NC42NzIyNDg5ODg0MzQsNjQ0Mi4wNDU3Mjg1MzcyMjcsOTI1OS4zNTIxMzU4ODUyMyw5ODgxLjk5NzQyNzg3MTA4MywxMTkxMC4xMzkyNTg1ODYxMTQsMTE3MzQuNjEwNjMwMDIxMzQ3LDU4NTAuMzU0MDk0MDIxOTUyLDAuMCw2ODA0LjU4NDI4ODMzOTA1LDQ1NjQuMTQ0MzIzMzgyNjM3LDk3MC4yNTk3NDI3MTIxMzk1LDM4NC44MTEyNDcyNDE5MTM1LDE3NzguNTc3Mjk5MTUxNjk0LDY2NDUuMzA2MjEwOTExNjU0NSw0ODgyLjM1MDMyNzM3NTMwOTUsNDUxNS4xNTUzMzM3NDU4NjEsMzY2My4zODU5NjA0NDgzOTgyLDIxMjAuMTUzNTQ4NTEyODg2LDQwNC41NjQzOTYzMDY2ODgsNTk3OC43MzU0MzMyNTkzMjYsMzk5Mi41MDIzNDc2NzU0Mzg2LDUzMjQuMjMwMTE5MjkwMDg5LDAuMCwwLjAsMC4wLDAuMCwzODA4LjQ4MDE0MTM0OTIyNjQsMzY5MC45NDkwODMyNTA4NzM2LDAuMCw3NTI5LjAzMzIzMjM3NDQwNiwxNzAzLjMzNTcyMzMwNjg5MjgsNjg2OC40Njg4Mjg5MTI4NzM1LDAuMCwwLjAsNzE3MS43NjExODA0NTQ0MDQsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMTQ0NzYuNjg1MTI3NTExNzk5LDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwyMTIxNC40NTM4NjI5OTgzMDQsMzQ5NzUuNTg1ODEwNDI2NzcsMTIzOS4zNzczMzA3NjI0NTc5LDIzOTguNDc2MTcxMDU1NTY2Myw4NjkuNjU3NjQyMDI0NTI3NiwxNTg1LjMxODU1NjE2Njk1MTYsNTQ2LjMyNTM5NDYwMTU3NjUsMTc3NjYuNjA5NDQyNjg4NTE3CisyNyxTdW4gMjAgRmViIDExLDIyOTcuNzQ2MjMyNTA4NzE2LDIyMzUuNDQ5ODk2NzM5NDcxLDIzMTguMzk1Nzg0NzY3MDIxMyw4NTc4LjUwNDkxODAzODQ3Miw1Mjc2LjAzNzQ4MzgzMDI0MSw0NjYzLjgxMDE3NDE4MjE0NSw4MDEwLjk5OTgwNDM2NjY3NCwwLjAsOTA2OS4wNzQ2MjQyMzAwMTYsMTE4NjQuMzc2OTE5MjI2Nyw3MjIzLjMzMzg0MDIxNDI0MiwxMTQxMC40NDk2Nzg1NTgyMjUsOTEyOC44MTIzODEwNzcyNjMsNTAxNy44MzgwOTM5NTQyMjQsMTIzNDEuNjIwMDI2NzIzNTMzLDQ1OTMuNjUyMzc1ODg1NjM2LDY1OTguODgzNDEyMDc4MTUsNzAzOC41MTk1NDU2ODA4NTMsODQ3OS4yOTYwNTQ3MDA5NjQsODM0OS45NDY0NDgxMzAzOTgsNDE2MS40MzI1MTQ4OTM5ODEsMC4wLDQ4MTYuNDk4NDY0NDMyOTc0LDMyMTUuMjgwMzExOTc2NTczNiw2ODIuODgwNzU0MDk5MTIxOCwyNzAuNjk4NTE4MjkyOTQxOTcsMTI1Mi42ODUxMTcxODc4NTQ4LDQ2NjUuMTY1OTU2OTE4MTgxLDM0MzQuMjY5OTQ0ODU1NDE1NCwzMTcxLjgwOTI0Mzk4NTA5NywyNTc5LjcwNTg1OTAzODY4NjQsMTQ5My40NTI3NTYzNzYwNTYyLDI4NC4yMjIyMTQxMzM5OTQzLDQyMDcuNTkxNzAwNjA3MzQsMjgwMi45MDA0MDQwMzc1NzEsMzczOC4xMzY3OTU1NTkyNjIzLDAuMCwwLjAsMC4wLDAuMCwyNjc1LjE1MzAwNDQ3NTU5MjgsMjU5MC45NTM4NTA1MzE5NzUsMC4wLDUzMzQuMDcyMjQ5NzMxMTcyLDEyMDAuNjUwNjU5MDM5OTIyOSw0ODQ1LjU3Mzg2NzMzMjgzLDAuMCwwLjAsNTEwMS44NjM4NTUzOTM5NjQsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMTAyMTEuNDg0MTg4OTMyODQ1LDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwxNTI3Ny4yODQ2MjYzNTU4MSwyNTAxNS4wNjk2OTMyMTYyMjUsODc2LjEwODgxODU0NzM1LDE2OTEuNjE1NDY5MDIwNjg5Myw2MTIuODY1Njg4MzQ1ODY3MiwxMTIwLjQyNTUyMjg3MTgxNDgsMzg1LjUyNTgzNDA2ODk0ODU0LDEyNDcyLjM4OTIxODQyMDYyNworMjgsTW9uIDIxIEZlYiAxMSwxNjIxLjI5NTMzOTM5MzM2NzQsMTU3NS4wMzU0NjQ4MzQ0MjY2LDE2MzMuMjEzODU3MjU0ODg3LDYwNDQuNDgxNjUxNDk2MjY0LDM3NTAuMjc5OTcwMDkxMDYyOCwzMzA5LjM2MTIxNzQ3Mjg3MzIsNTY3NS45OTY1NDY4NTMxNDMsMC4wLDY0OTYuMTQ2OTkzODEzMTU4LDg0NDAuMzM4NjgyMDYwMTE5LDUxNTkuNjU5NDYxOTkyOTM4LDgwOTAuOTYyODk5NDYxMDQ2LDY0NDYuMTM1NTMyNjYwMjcyNSwzNTcxLjA3NDk2ODkzNzY1NzYsODc1Mi4yMDY2MjMzNzQwMjIsMzI2My44MzY2NjcyODAxMzAzLDQ2ODYuMjMyMzU4MDk2Mzc2LDQ5OTUuODUzNjA5MTE3NDA2LDYwMTYuMTEzNDUwNzg3MDY4LDU5MjEuNTcyMjg1MjM0NTEyLDI5NTAuMjQ5NjAwNzI0NDIxNywwLjAsMzM5OS42OTQwMDI4ODI5NzksMjI1OS43MzEzNzE3MzQzMDQsNDc5LjUzMTQ5NTA3NDU4NjUsMTkwLjAwMjQ0MDc2OTA2MTgyLDg4MC4yMzM1NjQwNDUwNzMyLDMyNjguMzc5ODUyNzI5Njg0LDI0MTAuMzM4NDc2MjE4MjIwNCwyMjIzLjQ2NTg3OTEwMDkxMTUsMTgxMi4zOTE2MTcyNTEyMTcsMTA0OS41MzYyMDU1OTkzMjkyLDE5OS4yNTcxODc0NTI1NDQyNiwyOTU0LjQ0NzAyMjIzMzg5MDUsMTk2My43MzM2NDU5MjI1OTQ2LDI2MTkuMTY1MTY1NzgxMTc2MywwLjAsMC4wLDAuMCwwLjAsMTg3NS4xNTY4NzAwMzQyMzI3LDE4MTUuMDg2MjE5OTM1MjIzNywwLjAsMzc2OC4wNTgyNTk5MDAxMSw4NDQuMjgyMzAzNDQ0ODYxNCwzNDA5Ljk2ODQ4NjM5NTk1MSwwLjAsMC4wLDM2MTcuMjgzMDUzOTU3OTMzNiwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCw3MTg0LjkzMzc0OTQ4Mzg1MiwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMTA5NDkuMDcxMTQxMjkzODA0LDE3ODIwLjY2MDc4MDU0ODc5NSw2MTcuNjU4NDUxNDY1Nzc5MywxMTkwLjE0MjY2MTIzMDc2MTksNDMwLjg2OTkyOTkwNDgxODgsNzg5Ljc1NzgwMTU0MzkwNTUsMjcxLjM3MTU1NjAzNjM4NTY0LDg3MzguMTMyNTYwMjM2MzUKKzI5LFR1ZSAyMiBGZWIgMTEsMTE0MS4xMjk1NTY1Njc0NDAyLDExMDcuMTAzMjY0NDM0MDc2MiwxMTQ3LjgyOTU1ODUyMjYzNDcsNDI0OC45MDM1NTY3MDczNTE1LDI2NTcuMDk5MTE2MzE2MDkxNiwyMzQxLjA3NzIzNzg5NTkxOSw0MDA5Ljg5NDEzMDc2MzE5MjYsMC4wLDQ2MzMuOTk2OTgxMTkxMjczLDU5ODQuNDQ3OTgzOTc5MTA2LDM2NzEuNTkzMDU5NDc1NTMxNCw1NzIwLjAyMzQ4Mjg1Njg4OCw0NTQwLjEwNjUwNjUzNTQ4MTUsMjUzMi44NjYxNzQ2MzgwOTE3LDYxODguMTExNTAyNTgyMDM5LDIzMTEuNTY5MTMwNzg3MzQ4LDMzMTcuNDgxMzk1Nzg2MDE1NiwzNTM1LjAzMDgwMjAyMDAyMiw0MjU1LjQ0OTQwNTUxMDA4OCw0MTg2LjgyNDI1NzQxMzEwMSwyMDg1LjM3MDY1MTc5NTg2ODUsMC4wLDIzOTMuNTczNzI2NTg3NzI5NywxNTg0Ljc2Nzg0ODE0MTM3MzYsMzM2LjA0MTAzNDU1MzI5NjIsMTMzLjA5MjIwMDQzOTY4MzE4LDYxNy4yMDg2NzkyNDgxMjczLDIyODUuNTI2ODA2NTcxMDc0OCwxNjg4LjI3OTM4MzY5MDk1NzMsMTU1NS42ODI2MTEyOTUxODcxLDEyNzAuNjI4MjYwMTExODkyOCw3MzUuOTk4NzEwMTk2MDYxNywxMzkuNDIyODk2NTQzOTAzMzMsMjA3MC4yNTcyMzgxMjY4MzQsMTM3My4yMzU2NzY3NjU2MTc0LDE4MzEuNzA0NjM2MDkxNjI0MywwLjAsMC4wLDAuMCwwLjAsMTMxMS44ODY3MDgwMjQ4ODAxLDEyNjkuMTg2NzA2NjQ5NTU5NSwwLjAsMjY1NC44NTY3MTQxMTUxMDk4LDU5Mi4zOTE1Njc2NjA4MzM3LDIzOTQuMjgzNjk1MjI0NjA4LDAuMCwwLjAsMjU1Ny4wNTkzODI4OTQ4MTU0LDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDUwNDMuOTYyMzc4NDQ1Mzk5LDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCw3ODE0LjIzNjg5OTc5OTE4MiwxMjY1MS4wOTY0MTEwMjk0OTQsNDM0LjM5NjU5OTU4Nzg1NCw4MzUuNDYxMTExMzg3NjM5NCwzMDIuMjYzMTg3MjA4MjEwNyw1NTUuMzQxMzEyMTMwNzg4MSwxOTAuNTgzNjU3NDkxOTgyMyw2MTEwLjYxODU4NTQ4MzE4NAorMzAsV2VkIDIzIEZlYiAxMSw4MDEuMzQ5MDUwMjE0MzUzLDc3Ni41MTc5NDE4NzY4MjUxLDgwNC45NzYwMDY4MzY2Nzk3LDI5ODAuMjg5Njc0MDk1NjkwMywxODc3LjEwNDExNTU0MDU2MTcsMTY1MS41NTAwOTIzNDg2OTczLDI4MjUuNDM1MDgxNTA3NDA4NSwwLjAsMzI5My42MTQ5OTUwNTE2Myw0MjMwLjUwMjA4OTk0NjQyNywyNjAzLjkwMDMwNTU3MjcyNTMsNDAzMi45ODg2NzY1ODA4NjUsMzE5MC4yMTI0NTM4MDMxMTAzLDE3OTEuMDc0NDUyODM1MDc3Niw0MzYzLjQxMDI3MjA2MDcyMSwxNjMyLjQ0NTgzOTM3NDk4MiwyMzQxLjg4ODU0MTQxMDI2NCwyNDk0LjQyMjE5NjIzNDQwMiwzMDAxLjgxMTk0MjQxNjAyNiwyOTUyLjI5MDQwNDI2MTYyLDE0NzAuMDk4ODQ5NzQ2NjE4LDAuMCwxNjgxLjMzOTg1NzA2NjM4ODMsMTEwOS4yNDA1MjEwNzQ3MTU0LDIzNS4wNDI2ODU5ODU0NDgyNiw5My4wNTUxMzY5ODg2NjUyLDQzMS45NDAyNTA5NjY0MDI3LDE1OTUuNDkxMDg1NzE2OTg2OCwxMTgwLjM0MDEwMDA1MTY5NCwxMDg2LjU0MzQ0MDIyNTY2OTcsODg5LjA5NTExMDc1Mjk1MzEsNTE1LjEyMjM0NTY5MDc5LDk3LjM4Mzg5NjE5MDMzNzQ0LDE0NDcuOTUxMTg3Njk0NDY5OCw5NTguNjUyMzY5NjkwODM2MiwxMjc4Ljc4OTg2MTc0NzI5MzMsMC4wLDAuMCwwLjAsMC4wLDkxNi4yMDU1OTQ1Njg2MjU0LDg4NS45NTE3NDUwMzg1Mjk1LDAuMCwxODY2LjEwOTU2ODA0ODc5NDIsNDE0LjgyMzM3OTI1OTg2MzI2LDE2NzcuNjc1MDQ5NjU1NzM3MiwwLjAsMC4wLDE4MDIuNzQ2MjEwMzIxNDI3NywwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwzNTMzLjY1MDc1Njk0OTc2NDQsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDU1NTYuMzQ0MjM2NTI0MTksODk1My4yMjc2NDI4Nzk5MjcsMzA0LjgzNzY1NDUyNTk3NDYsNTg1LjI4NzA3MjYyMTYzOTUsMjExLjYyMzgwMDg4MjA1MSwzODkuNjUxNzU5NDkzMDU1NywxMzMuNTY4OTg3NDYxMDY5MSw0MjY1LjkzMzQyMDgxNDc5NworMzEsVGh1IDI0IEZlYiAxMSw1NjEuNTc4MDgzOTg4NDQ4NSw1NDMuNTc3NTA0MjY2ODMwNiw1NjMuNDMwMDIyOTU4NzE5MywyMDg2LjM0MDMyMDc1MDQzNTIsMTMyMi42MDkzOTA5OTY5NTIyLDExNjIuMjIwNDE0OTYzMDYyNSwxOTg2LjEyOTkwMDQ3OTQ2NzMsMC4wLDIzMzMuMzYzMTQ5NzQ0NDUyLDI5ODIuNTk0Nzg0MzExMzMsMTg0MS4xMzk5NjUyNzkxNTMsMjgzNi42MTM5ODEzMTk5ODQzLDIyMzYuOTI0NzI3NjA2NTgzLDEyNjMuMDk2MDM2NDg4NTQ3MywzMDY5LjI2NDkwNTg0OTE3NiwxMTQ5Ljg2NzMzNDM0NzExMywxNjQ4Ljk4OTEyOTQ1OTY3MjMsMTc1NS43MzA2MDk2ODA5OTcsMjExMi4yNTI2ODgxODI4OTksMjA3Ni42OTczOTcyNDUyMTQsMTAzMy44NTU5ODUwMzYxMDQ2LDAuMCwxMTc4LjU2OTU3Nzc5NDMwNDUsNzc1LjAxMDE5NDM4MjA4MTIsMTY0LjExNDY3MzE0NjI1NDg2LDY0Ljk1MTI2NDg3MjE4NDUyLDMwMS43NDY2NzE4ODY0MDU2LDExMTIuMDI1ODkwNjc4Mjc2LDgyMy44MTg0MDg1NTYzNSw3NTcuNjUwODI5MjE0NzMzMiw2MjEuMDI2NDUxODYxNzgzOSwzNTkuODg4MTE5NjE5MTA3Myw2Ny45MTAwMDc4NDAwMzg5OSwxMDEwLjk1NDg0MjA4NTEyMjEsNjY4LjE3MzIxNzI0OTQzMDksODkxLjM1ODk4NDg1MzE0NjcsMC4wLDAuMCwwLjAsMC4wLDYzOC44MzMyMzgwMDE4NjMsNjE3LjQ2MDA2MjYxNDI2MDYsMC4wLDEzMDguODc3MjQxMDE2OTY4NiwyODkuOTUwMTU0NzE3NDMzODYsMTE3My4zMzczODI3MjU2NDY2LDAuMCwwLjAsMTI2Ny44NzI5NTU2NzI5MDM2LDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDI0NzAuODk2MTQzNjI0NjgwNSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMzkzNy44OTQ3MTIxNjI5NzM1LDYzMTguNTUxNjQwODM1NzcxLDIxMy40OTA2MDAwMzkzMzE3Miw0MDkuMjYyNDI2MDgzODExNiwxNDcuODk1NzQyNDI1NzI1MTMsMjcyLjg1MTgyNTE4NzYxNzA3LDkzLjQzMzE3OTIzMTY1MDMxLDI5NzMuNDYzMDk0NjE2NTAxNgorMzIsRnJpIDI1IEZlYiAxMSwzOTIuODA0NzQyOTI3ODgyODQsMzc5LjgyOTc4MDk2MzA0MTk3LDM5My42NTc4MzAxOTc5ODQ3LDE0NTcuOTAwOTYxNzE1NzcxMiw5MjkuNzA1ODk0NTY0MTQ4OSw4MTYuMDI5OTYzMzMwMjQ3MywxMzkzLjEzNTUwNjQ3MDUzNjUsMC4wLDE2NDguMjgzNTA4ODM0NjczLDIwOTcuNjk4OTQ4MzI1Nzc1MywxMjk4LjI5ODE3NTk2MDQ3NiwxOTkwLjczOTczNTYzNTk2NjYsMTU2NS40NTU2ODg4Mzc1NzEsODg4LjU3NTUyNTY4MDkwOCwyMTU0LjE3Mjg5MzUwNzc4Niw4MDguMDUzMDIyMTU5OTAzMiwxMTU4LjQyMjU0NDg4MjYxOTQsMTIzMi45ODY2NjEzMDc0MjA3LDE0ODIuOTY5NTM1ODg4Mzg3OCwxNDU3LjU1NDE1MDAzNjcwOTksNzI1LjQ3MDc2NDU0MzY3NDQsMC4wLDgyNC41NjI5MDQyNDkyOTI4LDU0MC41OTU4Mjc3Mzk1NTkxLDExNC40MDcyMjA0OTY0OTQ4Nyw0NS4yNjM5MDAwNzM5Njk5MiwyMTAuNDUwNDE0MTE5NzA0MTYsNzczLjkyNjExMzU5NTgyOTUsNTc0LjA4Mjk3NTcxNzE4OSw1MjcuNTIxODk3OTI2NDYwMiw0MzMuMDc2NzYxNDkyODcxMywyNTEuMDIxMDQ0MjY5NTU1NCw0Ny4yODU0NzI2MDExOTQ4Myw3MDQuNzIwMTY0Mzc1MzQwMSw0NjUuMDI5NTE0MDA3Mjk3LDYyMC4zOTQyNDk4OTkxMzExLDAuMCwwLjAsMC4wLDAuMCw0NDQuNzY3NzI3NDgzMzk5OCw0MjkuNzA3OTIzMTAxMDIyMywwLjAsOTE2LjIzNjE5NTY4NjQxOTUsMjAyLjMyNjYzNjY1NjQxNjI3LDgxOS4xOTUxMTkzMjgwMzk1LDAuMCwwLjAsODg5LjczNTE5NzkzNTgwOTksMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMTcyNC43NzEwNTE1ODEyMDczLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwyNzgyLjY3MzAxODcyMzc1Nyw0NDQ3Ljk1ODk4Njc5MzQ3MiwxNDkuMjQxNjY1NDEzNTkxMjUsMjg1LjY4NzE3Mzc1MDMyNDc1LDEwMy4xODYyNTUzNzY0NjcyLDE5MC43MTQyNjg1MzMxMzcwNyw2NS4yNDM4NDkyMTA4ODY3NiwyMDY5LjU3NjI3Mjc5MzEzMgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTRUlSX1JLX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9JbmNpZGVuY2VfMC5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNFSVJfUktfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL0luY2lkZW5jZV8wLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NjVjYTQ0Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTRUlSX1JLX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9JbmNpZGVuY2VfMC5jc3YKQEAgLTAsMCArMSwzMyBAQAoraXRlcmF0aW9uLHRpbWUsc3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vbm9kZS90cmFuc3BvcnQvcGlwZS9QSEwKKzEsVHVlIDI1IEphbiAxMSwwLjAKKzIsV2VkIDI2IEphbiAxMSwwLjA2NzI5MTI5OTQwODc2MTYKKzMsVGh1IDI3IEphbiAxMSw3LjkxODcyNDk0MTQ3Njk4MQorNCxGcmkgMjggSmFuIDExLDU3MC4wOTU3MzQxMjQyMDI2Cis1LFNhdCAyOSBKYW4gMTEsMjIwNjAuODMwMjQwNDk2ODQKKzYsU3VuIDMwIEphbiAxMSwyMzE4MS4zMzc5NTg1NzMKKzcsTW9uIDMxIEphbiAxMSw3MDkuNDYzMDY3MzYwMzQzMgorOCxUdWUgMSBGZWIgMTEsMzI0LjU2NTUwNzI0NzExCis5LFdlZCAyIEZlYiAxMSwyLjQ3MjkyMjgwNjg2MzA0NgorMTAsVGh1IDMgRmViIDExLDAuMDkxNDE2MTIxMjYxNzc0MDYKKzExLEZyaSA0IEZlYiAxMSwxLjc1MjczNzAyMDAxNDUwOTlFLTYKKzEyLFNhdCA1IEZlYiAxMSwxLjUxMTczNDg4NjAxNTg1MDNFLTExCisxMyxTdW4gNiBGZWIgMTEsMS44MDgxNTI3NjQ4MDU4ODI1RS0xNQorMTQsTW9uIDcgRmViIDExLDEuNTc0MDcwMjA2ODAwMzgyNkUtMTgKKzE1LFR1ZSA4IEZlYiAxMSw2LjgxOTcxMzY2MzU3MzQxNUUtMjEKKzE2LFdlZCA5IEZlYiAxMSwxLjA1MDYwNTQzNzYyNDU5MjhFLTIyCisxNyxUaHUgMTAgRmViIDExLDQuMjk4MzMyODgwODgyODI3NEUtMjQKKzE4LEZyaSAxMSBGZWIgMTEsMy42ODA4MjA5OTU4OTk2MDQzRS0yNQorMTksU2F0IDEyIEZlYiAxMSw1LjQyNzE1NDI3MDQ2MzgyNkUtMjYKKzIwLFN1biAxMyBGZWIgMTEsMS4xOTQxNDA0Mjk0MDA2NDI3RS0yNgorMjEsTW9uIDE0IEZlYiAxMSwzLjU2ODU5Nzc5NzA1NTcyNEUtMjcKKzIyLFR1ZSAxNSBGZWIgMTEsMS4zMjIxMzA5MDM5NjM4MTFFLTI3CisyMyxXZWQgMTYgRmViIDExLDUuOTM2OTY4NzE2ODQ3MTE4RS0yOAorMjQsVGh1IDE3IEZlYiAxMSwyLjkwMTY2ODY4Nzk3NTU3OEUtMjgKKzI1LEZyaSAxOCBGZWIgMTEsMS41NjkzMzgzOTk2ODUwODUyRS0yOAorMjYsU2F0IDE5IEZlYiAxMSw5LjEyNTY0NTAxNzM0Mzc3NUUtMjkKKzI3LFN1biAyMCBGZWIgMTEsNS41ODg0OTExNjU3NDYzNzhFLTI5CisyOCxNb24gMjEgRmViIDExLDMuNTUwNTM1MjQxNjMwMjk1RS0yOQorMjksVHVlIDIyIEZlYiAxMSwyLjMxNTIxODg0MjkyNzk2RS0yOQorMzAsV2VkIDIzIEZlYiAxMSwxLjUzNzU0NDMyNTYyNDM4NjlFLTI5CiszMSxUaHUgMjQgRmViIDExLDEuMDM0MTgyNjI0MDIwNDc1N0UtMjkKKzMyLEZyaSAyNSBGZWIgMTEsNy4wMTc1MzMyNzM2MTUzMTJFLTMwCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNFSVJfUktfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL0luY2lkZW5jZV8xLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0VJUl9SS19SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vSW5jaWRlbmNlXzEuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJhNjI3NWQKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNFSVJfUktfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL0luY2lkZW5jZV8xLmNzdgpAQCAtMCwwICsxLDMzIEBACitpdGVyYXRpb24sdGltZSxzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9ub2RlL3RyYW5zcG9ydC9waXBlL1BILTExLHN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL25vZGUvdHJhbnNwb3J0L3BpcGUvUEgtMyxzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9ub2RlL3RyYW5zcG9ydC9waXBlL1BILTcsc3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vbm9kZS90cmFuc3BvcnQvcGlwZS9QSC1OQ1IKKzEsVHVlIDI1IEphbiAxMSwwLjAsMC4wLDAuMCwwLjAKKzIsV2VkIDI2IEphbiAxMSw0LjkzMTg1NTk3MDQyNzU1NUUtNiwzLjIyNTIxMTYxNTY5OTY4NzZFLTQsMC4wMDEyNTE1ODE2ODMxMjg3MjIzLDAuMzE5MTg3NzQwNDA4Njg0NzUKKzMsVGh1IDI3IEphbiAxMSwwLjAwMTAyODkyNjMzMTA4NDM4MjIsMC4wNjkzNzc1MzM1OTY4MzUyOCwwLjI2MTEyODYxMjMwMjk5MTYsMjAuMTUwOTUxNDU1Njg5MTQKKzQsRnJpIDI4IEphbiAxMSwwLjA5ODU5Mzc1MTMzMDcxNzY3LDYuNzQzNzM4MTIxMTU1NTU5LDI1LjAyMzkzODc4NTc4ODk0MywxMDQyLjk4MTE2MDQ1NDEyNDQKKzUsU2F0IDI5IEphbiAxMSw1Ljc3MTU3Njk2ODE3NTQyNjUsMzgzLjIzNTI1MzM0MjExMzYsMTQ2NS4wMjY4NzU3MTY5OTcyLDI1NDU0LjMyNTIzMjQxNDA5NgorNixTdW4gMzAgSmFuIDExLDIwLjQxOTYzNTUwMDA1NDMwNSw5MzQuNDU3NzEwNDU3ODkyNyw1MTg1LjgzMzAzNDQwMDA0NCwxNDQ2Ni4wMjg3Mjk2NTQzNjgKKzcsTW9uIDMxIEphbiAxMSw5LjIyODAyMTU4NDQxOTEyLDcuNDU0NjExNjk2MTY4NzI4LDI0MjAuMjM5MDIwMTA0MzcsOTcuMDc3NzExMTkzOTA2NzcKKzgsVHVlIDEgRmViIDExLDkuMDE0MTIzMTA5NTk0Mjc4LDEuMzk5NDE2NjU2Njc1MDcsMTI0Ni43MjA2NTM0MjY3OTQ4LDQwLjQ2MjI1NDE1MzcxNzM5NgorOSxXZWQgMiBGZWIgMTEsOC40OTkwNzc3Mjk2Mjg4MTQsMC4wMTA3NjgzNTE3MDY5MjgzMDgsMC45NjY4NTA0NzM3MDgzMjI4LDAuMzExMzgxMzgzMDYxNDQ4OQorMTAsVGh1IDMgRmViIDExLDAuMzI1NzgyMTUxMDI2OTQyMzYsNC4yNDIxOTkwNjkwMTIwNjAzRS00LDAuMDAyMjA5NDExMDQyNDk3MjA2LDAuMDEyMjY5NTEyNTI4Nzk5OTU3CisxMSxGcmkgNCBGZWIgMTEsMy4wNTMyNTg2MjIxMDUzMzhFLTYsMS40MDAwMDU3ODQxNzIyOTQ1RS04LDcuMTAyMjY5MTE0ODIxMDY5RS04LDQuMTA3MDg2MTYwMTkxMzI3RS03CisxMixTYXQgNSBGZWIgMTEsMS4wMjAxMTgzNjI5NzI2ODAyRS0xMiwyLjIzNTU4NTgzMjIwNTQ2N0UtMTMsOS43NDg0MDYzMDMxNjQ2MTdFLTEzLDcuMTc0NjEzNzQyMjk1NjA1NEUtMTIKKzEzLFN1biA2IEZlYiAxMSwxLjI3ODA2MzYyMTg5NTgyMUUtMTgsMi44ODM5NjIzNzk1NzY2MTQ1RS0xNywxLjE2MDI3MDQ4NDQ2MjE2NDdFLTE2LDEuMDAwMjczMDI0Mzk1MzcyM0UtMTUKKzE0LE1vbiA3IEZlYiAxMSwzLjc0MzkwNDYwMDUxNTgxNkUtMjIsMi41MzcwMTU4MzYxMTAzOTg1RS0yMCwxLjAwOTMxMzQzNzkwNTg3OTlFLTE5LDkuMDY4MjIyMTkwMDk2ODhFLTE5CisxNSxUdWUgOCBGZWIgMTEsMS42MjU4OTUzNDgxNzg4MDE3RS0yNCwxLjEwOTMwMjQ1NjU0NjU0OTVFLTIyLDQuNDY4NjM2ODE2Mjc2OTU5RS0yMiwzLjk3MzA4ODcxNTgzMTAyNkUtMjEKKzE2LFdlZCA5IEZlYiAxMSwyLjYwMjk0MTg0NjI2MTQ3MzVFLTI2LDEuNzI4MzkwODA1NDg2MjMxM0UtMjQsNy4xNTczOTcwMzE0OTkzNjJFLTI0LDYuMTQ2Mjc0NjUzNTA4MDcxRS0yMworMTcsVGh1IDEwIEZlYiAxMSwxLjEyODgzODc2NjEyNTc4NTdFLTI3LDcuMTQyNzczNTE0MzQ2Mjg5RS0yNiwzLjA4MDQ1MjY4NzEwNzQ4N0UtMjUsMi41MzM4NjczMDI5MjA5MzFFLTI0CisxOCxGcmkgMTEgRmViIDExLDEuMDQ4MzcxNzAxMzU3Mzc2RS0yOCw2LjE1NDY0OTI1OTAxODg1N0UtMjcsMi44MDM4NTQ4NDg5NTg3MzE0RS0yNiwyLjIwMjI0MzgxMjAyNjg0N0UtMjUKKzE5LFNhdCAxMiBGZWIgMTEsMS43MTA4MTI4NzA3MTk2NTVFLTI5LDkuMDg2MDkyMTYxMDYxNDc2RS0yOCw0LjQyNzg4OTkyNzIwMDEyOEUtMjcsMy4zMjQ5NjkyMTk5NzQzMjA2RS0yNgorMjAsU3VuIDEzIEZlYiAxMSw0LjEzODU0NDQxNTk3MDUyNkUtMzAsMS45ODg4OTU5NzQ3Njg0OTgyRS0yOCwxLjAzMjUxMjcxNzU5MzUyNzVFLTI3LDcuNTc0NDE1NjgzNjYyMDc0RS0yNworMjEsTW9uIDE0IEZlYiAxMSwxLjM1OTU5Njk3MjA4MjI0NTdFLTMwLDUuODc5ODg4NTgyNjAyNDY3RS0yOSwzLjI0NDE4NTc3MjQ0NDYxOEUtMjgsMi4zNTU1NzU5MDU2NDI1NDhFLTI3CisyMixUdWUgMTUgRmViIDExLDUuNTE1NTY1MDgzMjczODc4RS0zMSwyLjE0NTQ0NTg1NTk1Njg2NjVFLTI5LDEuMjU0NDQxODA3NDQ2MzYyM0UtMjgsOS4xMTUxMTU3MzQ1MTkyNTFFLTI4CisyMyxXZWQgMTYgRmViIDExLDIuODQ4NDEzODIxMDE1Mzc3RS0zMSw5LjQ4MzQ4MTM0NzM5Mzk0MkUtMzAsNi4wMjk5MjEyMjQxNjAyMjJFLTI5LDQuMjIzMzEwNzE4MDQwMjdFLTI4CisyNCxUaHUgMTcgRmViIDExLDEuNTE0NzIxOTAzMDE3ODQ1OUUtMzEsNC41NDgwNzcwMDI3NDQxMDJFLTMwLDMuMDQ4OTY1NzI1MTA5MDk1NEUtMjksMi4xNTI3NDc4OTMwNzk3MDFFLTI4CisyNSxGcmkgMTggRmViIDExLDguNDM2MjY4ODYwMzE1NTVFLTMyLDIuNDE4MDQ2OTgyOTc0NDg2NkUtMzAsMS42NTY3ODA0MTA1MDY5NzVFLTI5LDEuMjA3NTEwNjEzNzc3Mzc0RS0yOAorMjYsU2F0IDE5IEZlYiAxMSw1LjA4NDE3NTAwODg0Mjk5MUUtMzIsMS4zODU5MTExNjg2ODg5ODQ5RS0zMCw5LjcxMzA4MzgzNTY3MzU5MUUtMzAsNy4yMjQ4NzA5Nzc5NTk3NjRFLTI5CisyNyxTdW4gMjAgRmViIDExLDMuMTk1NDYyNTQzNjI0MTg5RS0zMiw4LjM4Njc5NzIyMzEzNzkxOEUtMzEsNS45NzgzNzYxMzY3Mzg3ODE1RS0zMCw0LjUyMzc5NzgyNDgwNjU3MzdFLTI5CisyOCxNb24gMjEgRmViIDExLDIuMDcyODY4NDE1NTgzOTI3RS0zMiw1LjI3ODA5MDY5NDg0Mzc3RS0zMSwzLjgxMjY2MTE1NTg1MjI4OUUtMzAsMi45MjM1MjExNjQwNTM3NDA1RS0yOQorMjksVHVlIDIyIEZlYiAxMSwxLjM3MzY1ODgxODc4NDY2OTdFLTMyLDMuNDE2MTMyNDI4MTU0NDczRS0zMSwyLjQ5MzA2MzM5NDg0OTE2RS0zMCwxLjkzMTE2OTM3ODU0NzcxOUUtMjkKKzMwLFdlZCAyMyBGZWIgMTEsOS4yMzc3MjM2NDA1NDkzODdFLTMzLDIuMjU1NjExMjM5MjMwNDkxRS0zMSwxLjY1OTIwMjM0MzQ0ODYyOTVFLTMwLDEuMjk1MDU4NTMzNzQzNTIxN0UtMjkKKzMxLFRodSAyNCBGZWIgMTEsNi4yNzQ2MjI0NTEyOTM0MTJFLTMzLDEuNTEwNDY2Nzk5NTI3NDU2NEUtMzEsMS4xMTc5Mzg2NzcwNjczNzM4RS0zMCw4Ljc3NDY4NDE5ODYzNDY3NUUtMzAKKzMyLEZyaSAyNSBGZWIgMTEsNC4yOTA3MDY4NDUzMDMzNkUtMzMsMS4wMjE0ODk3NTA0NzAyNTE3RS0zMSw3LjU5Njk4MjA3NjU3NjEwMkUtMzEsNS45ODY2OTgzOTI5NDA2NThFLTMwCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNFSVJfUktfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL0luY2lkZW5jZV8yLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0VJUl9SS19SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vSW5jaWRlbmNlXzIuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQyMDM5NzcKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNFSVJfUktfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL0luY2lkZW5jZV8yLmNzdgpAQCAtMCwwICsxLDMzIEBACitpdGVyYXRpb24sdGltZSxQSC0xLUc2NDAwMDEsUEgtMS1HNjQwMDAyLFBILTEtRzY0MDAwMyxQSC0xLUc2NDAwMDQsUEgtMTAtRzY1MDAwMSxQSC0xMC1HNjUwMDAyLFBILTEwLUc2NTAwMDMsUEgtMTAtRzY1MDAwNCxQSC0xMC1HNjUwMDA1LFBILTEwLUc2NTAwMDYsUEgtMTAtRzY1MDAwNyxQSC0xMS1HNjYwMDAxLFBILTExLUc2NjAwMDIsUEgtMTEtRzY2MDAwMyxQSC0xMS1HNjYwMDA0LFBILTExLUc2NjAwMDUsUEgtMTItRzY3MDAwMSxQSC0xMi1HNjcwMDAyLFBILTEyLUc2NzAwMDMsUEgtMTItRzY3MDAwNCxQSC0xMi1HNjcwMDA1LFBILTItRzY4MDAwMSxQSC0yLUc2ODAwMDIsUEgtMi1HNjgwMDAzLFBILTItRzY4MDAwNCxQSC0yLUc2ODAwMDUsUEgtMy1HNjkwMDAxLFBILTMtRzY5MDAwMixQSC0zLUc2OTAwMDMsUEgtMy1HNjkwMDA0LFBILTMtRzY5MDAwNSxQSC0zLUc2OTAwMDYsUEgtNC1HNzAwMDAxLFBILTQtRzcwMDAwMixQSC00LUc3MDAwMDMsUEgtNC1HNzAwMDA0LFBILTQtRzcwMDAwNSxQSC00LUc3MDAwMDYsUEgtNC1HNzAwMDA3LFBILTQtRzcwMDAwOCxQSC00LUc3MDAwMDksUEgtNC1HNzAwMDEwLFBILTQtRzcwMDAxMSxQSC01LUc3MTAwMDEsUEgtNS1HNzEwMDAyLFBILTUtRzcxMDAwMyxQSC01LUc3MTAwMDQsUEgtNS1HNzEwMDA1LFBILTUtRzcxMDAwNixQSC02LUc3MjAwMDEsUEgtNi1HNzIwMDAyLFBILTYtRzcyMDAwMyxQSC02LUc3MjAwMDQsUEgtNi1HNzIwMDA1LFBILTctRzczMDAwMSxQSC03LUc3MzAwMDIsUEgtNy1HNzMwMDAzLFBILTctRzczMDAwNCxQSC04LUc3NDAwMDEsUEgtOC1HNzQwMDAyLFBILTgtRzc0MDAwMyxQSC04LUc3NDAwMDQsUEgtOC1HNzQwMDA1LFBILTktRzc1MDAwMSxQSC05LUc3NTAwMDIsUEgtOS1HNzUwMDAzLFBILTktRzc1MDAwNCxQSC05LUc3NTAwMDUsUEgtQ0FSLUcyMzAwMDEsUEgtQ0FSLUcyMzAwMDIsUEgtQ0FSLUcyMzAwMDMsUEgtQ0FSLUcyMzAwMDQsUEgtQ0FSLUcyMzAwMDUsUEgtTkNSLUc1MjAwMDEKKzEsVHVlIDI1IEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyLFdlZCAyNiBKYW4gMTEsMy44OTkzOTIxNzU1ODk3MTVFLTEwLDUuNjU2MDIzNzkwODk1NTgyRS04LDguNDY4MjA4NzE5NjU1MTg3RS04LDcuMzA4MDUzMjQ0MDkyMzMyRS02LDEuMzU3Njg3MTkyNzE2MzMzNEUtMTQsOS4zMTgyNTg3NDM0MDM4MjZFLTEzLDMuMDQ0NDMxMzU2MTY2MDQ1RS0xMCwwLjAsMS4wMTkxNjQzMTgzNDE1MDI3RS0yMCwxLjI2ODk2NDE3NDA4MzE0MTFFLTE0LDEuMDAxNzA4ODc5NDcxNTA3MkUtMTgsOS4xNTM2ODE4MjUwMzc4MjFFLTExLDUuNTY5NzA2NTQzODgyNzI2RS03LDQuMzcyNDg1MDQzOTIyOTEyNUUtMTUsOS4zMTkxNjUzMzM3OTMwOUUtMTEsNC4zMTIyODkyNjIxODYyMUUtMTUsMi44Mjk4Mzg0NjY0NDA0OThFLTEzLDcuMjcyMzQ3MjQ0ODAzMzA2RS0xMywxLjYyNDc1MjA4MzcxOTk1MkUtMTIsNy45NzE4Mzg2MTAzNDc4MDdFLTExLDguMDA4OTA0NTAzNTIwNzJFLTExLDAuMCw5LjE0ODUzMzkyNDE4MTM5OEUtOCwwLjAwMTcxMjU2NjQ1MjkwNjk3MzQsMC4wMDE4NjkxNzA0NzYwMzQ0Mjg1LDAuMDA0NTE1NTcxNzA0MjUwNzgsNy41MDI0MTQ3MDA5OTcxNDJFLTQsMzQuNzcyNzU2MTA3MTc5NDcsMC4wNDc3MzQ3MDIyMDU5Mjk1NzYsMS43MDIzMDcyMTQzODA5MDg4LDAuMDAxMTI5OTI3MjI2NjUwNTM5LDYuODAwNzc1ODU3MDU4NjU2RS00LDAuMjUwNjE5MjE4MTY2OTk0OSwwLjA0OTU1NDM2NzM2NzU4ODk2LDE3LjQ2ODg1MDk3MzQ3Njc5OCwxNy4wMjkxOTgzMjE1Mjk1MSwwLjAsMC4wLDAuMCwwLjAsMS41MzY2MTc0OTM4NTIzNzkxLDMwLjM0Mzg1NTU3NzgwNTM2OCwwLjAsMS42Mzg1MjAwNTA5MzY2NDc0RS04LDEuNzI0NTc1MDcyMzI1NDM1M0UtNCwxLjcyNzY2NTAwMDQyMjg0ODJFLTQsMC4wLDAuMCwyLjEyNTIzODkyMDA3OTAwMTNFLTEyLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDEuNDE0MzM5Njc2MTQ3MzQxOUUtNCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMS4wMTk1NDQ2NTA4MjY5NDA0RS0yMCw1LjI3NzM0NDY5NDU2NzY3RS0xNiwxLjkyNDYyNjAyNTEwNzYwMUUtOSwxLjI0NzQzODY0Mjk4NTQwN0UtNSwxLjcxNjY1NTI3NzA1NTIxOTZFLTUsOC45NDQ3ODkxNzgzNTM0NEUtOCwxLjIwMTAzMjcxNzI4MjgyM0UtNiwyNTYuODYwNDY2NjE3NDAzOAorMyxUaHUgMjcgSmFuIDExLDIuMTUyNDU2NjkyNDQzMDc1NUUtNiwxLjU4MDgzOTE1MjA1ODUxMzdFLTQsMi4yNjAwMzMyNzgzNDM4NTNFLTQsMC4wMDQwNjgxNDczMTk3NTIwNiw0LjgxMTg5NDc4MzU0OTY2NEUtMTEsMi4yOTc0NzEwNzU3MTI0NDNFLTksMi43OTI5MjY5MTU5NDE2NTUzRS03LDAuMCwyLjYyOTc4NTEzMDI1NTM1M0UtMTYsMy43ODU4OTQ1MjU4MzI3MzVFLTExLDEuMjMxOTQ2NzA1MzY4ODIwN0UtMTQsOC42OTI0NzExMjczOTQzNzVFLTgsMi42MzIwODY2MjEwOTU0MjA3RS00LDEuMzI0OTIyNzY1NTMxMzE0MkUtMTEsOC44MDQyNDY0Njk2NDgzOTFFLTgsMy4yMzM1NTgxMTY4ODE0NjJFLTExLDcuMjgwNzY1MjkyNjE4MjY4RS0xMCwxLjgzMzg1MTY4ODM1ODkzMjdFLTksNC4wNDQ0MTM3NDM0NDkyNzlFLTksNy4zMjIyMDQyMjUwNDU0MzdFLTgsNy4yNTczNjcwNDM4NDcxOThFLTgsMC4wLDguMjQzNzQ3MDM3MzM5OTVFLTUsMC41MTg1Njk3MjcxNjgxODE1LDAuNTYxNDM4MDU4NDE1MDI3OCwxLjA5ODUxNzQwNzI4MDAxOTcsMC4yNDkxODI3MjEwNTQxMDg2OSwyMTQ5LjU3Njc2NTY1NjE0NjYsMTAuMjMwNzIyMzM1OTc3ODMsMjE5LjAzMTg4NjU2NTcxNDUzLDAuNDQ2MDEwMTE1NTQ2MDQ1MTQsMC4yMjM3Mjk1ODgyODY5NDI0NSwyNS42NzY3MTUxNjMxMjg4NCw3LjM0OTkzODEzNzc3MDY1NCwxMTQwLjAxMjkxNTU2NjQ4MTgsMTIxNS45OTg0MDY5MjQ4MzQ5LDAuMCwwLjAsMC4wLDAuMCwyMDcuNjk5ODM0Mzk2NTc4NzUsMTU4Ny43NzU3MzY0NDMzOCwwLjAsMS42MzI3MDc2NTUyNDc0NzJFLTUsMC4wNTk3Mjk5NjM4NzExOTI0NiwwLjA1OTg5ODEzOTA0NTM1MTYzLDAuMCwwLjAsNi43ODU0NDczMzM2MzkxNDA0RS05LDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMDY2ODgwNzM5MzAwMzEyMjgsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDIuNjMxMTc0OTA2MTEwNDUwM0UtMTYsNC4xNDE4MjA0MDM3MzkzNDhFLTEyLDcuMjMxMjI5MDAzMDEwMzE3RS02LDAuMDEwNzIxNjUzMTA3ODk4NjA4LDAuMDE0NTM5MDI2MDM2MjE5MjIsOS43NjQ0MzA5NTE1NDE5NTFFLTUsMC4wMDEwMDQ3NTU0NTU1Njk0NTAyLDExMzU3LjA0NDgzOTAzODk2NworNCxGcmkgMjggSmFuIDExLDAuMDAxMjAwMzMwNjY1MDExMDA3NywwLjA1NDcwNjI2NTUwOTI0MzgsMC4wNzc1NTYyNzg5MjMwMDI3OSwwLjczMTgxMTE0NTU5MjQxNDIsMi40NjEwMzIwMDc4MzAwOTdFLTgsOC43MDc1MjA1ODk5NzcwMzhFLTcsNi40MjgzMDAyMTM2ODU5NUUtNSwwLjAsMy41MDAxMTc3NTYyODM1NDc1RS0xMywxLjc1MzExMzcwODA0MjE0M0UtOCwxLjI0MTIyMTA2Mjg5MDkxMDNFLTExLDIuMDc4NDE3OTM0NTExMDAyRS01LDAuMDQxNjU0NzE3NjM5NzI4OTcsNi4xNTU1ODM4MjA1NzEwNDFFLTksMi4wOTQ2Mjc2MDg5NjgzMTU1RS01LDIuMTg2NTc2MTk5ODcyMDgyN0UtOCwyLjg5MDY1ODMyMDEwODk1ODZFLTcsNy4xMjQ1MDQ2NTEyMDY2NzRFLTcsMS41NDkxNTE1MDI0ODAzMDUxRS02LDEuNjg5MjU0NjE5NTM3MzMyN0UtNSwxLjY0OTE1OTYzODQ4MDMyMzVFLTUsMC4wLDAuMDE2ODI4Mjk4OTcyMTg3NDk2LDYwLjQ2MDgzMjc3NjgzMTYxLDY0Ljk3ODIwODQxMDQxNDM4LDEwMi44NDc1NDg1NjI5MDkwNCwzMS43NDQwNzEzNzczMDk5NywxMDg4NTEuOTI1MjE0MTY3MjIsMTA4MC42NzAzMjQ4NDA4MzgyLDE2NjQ5LjUyNzA3MjM0MDgyLDY1LjAyNjk2MTg0MDEzOTEyLDI4LjQzMzY3NTU5MDEwMTkxMywxNjA4LjQ4MzExOTEwMzM2MDksNjM5LjkzNDU0NjE4NDY0NjUsNjA1MTQuNzA2MTUxNTYxNTEsNjc1NDMuNjk2MzQ0NTgxNDksMC4wLDAuMCwwLjAsMC4wLDE2MTc0LjExNDA5NTU2NzcxMSw3MjMyOS45OTA0NjUzMTA3NywwLjAsMC4wMDM2NzIxNDMxNjU5NzM3MTUsNy44MjgwNDE2MTAzMzYzNTMsNy44NTkxMDY2MjUxMzQxMzM1LDAuMCwwLjAsMi43MjI0NDI2MDkwMTcyODUyRS02LDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDEwLjU5MTUxMzMwMzEyMTgwOCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMy41MDI2NzA5NDI2NTY4NTg0RS0xMywyLjk1NDc4NjkzNjk5OTA1MDdFLTksMC4wMDMyMDQzNTcxNTY1OTMzNDA0LDIuMDc2MzE2NjU1Njg4NDgsMi43Njc2NjQzMDgyNjc1MjAzLDAuMDIzMTEzNTE4NjQzODk4Mjc1LDAuMTg4NzQ3NzMyNzg4NDgzOTUsNDk2NDA1LjI1MDc3MzU4MTUKKzUsU2F0IDI5IEphbiAxMSwwLjI4MTQ5MDMyMDYwMDc4ODQ0LDkuMTA0MTMwMjIxODkyNDg2LDEyLjg2ODc0MjQ3MTgzODUzNCw4NC4xODQ3Mjk1MDEyMjA3Miw1Ljc4MDE0MDcxMzg4ODE1NUUtNiwxLjYxMDgwMzcyODMzOTUzNUUtNCwwLjAwODYwMzY0MTA3ODM0OTA3MiwwLjAsMS41MTQyNTc0OTI0NDE5NDJFLTEwLDMuOTI2Njk3Mzg5OTQzNzYxRS02LDQuNTkwODk5OTQyNDY0MzEyRS05LDAuMDAyODkzNzc4NjUwNTMwODk3LDQuMjAwMDg2NTk2MTc4NDI2LDEuMzcwNzgwOTYwNjAzMjIwM0UtNiwwLjAwMjkwMzA0OTU1NzM5NjE4MzUsNS45MzEyMDg2MTc3ODg1NTZFLTYsNS41OTY4ODQ5Mzg2MjI0MTdFLTUsMS4zNTA0Mjk2MTEzNTMzNTg2RS00LDIuODk1MTIzNzUwNDc1MTI4RS00LDAuMDAyMjY5MDM0OTAxMjY5NjA4NSwwLjAwMjE4MDE1OTY0MDgxODg5NywwLjAsMi4wMzEzNDYxNDYyMDM0NjQsNDkxMi4xNzk3MTUyMTU1MDIsNTIxMi44OTI1Mzg5OTMxNzksNjU1MS4zMzE5MTg4NDE2MTEsMjc3Ni45NTUxNzU0ODc4MzEsMjQ1MzY4MC4zMzU3Nzk3OTA4LDgxMTg1LjY4MjU4Njc3MDMsNzYzODE3LjE3Njg0MTg5OTQsNjM3NC4zNTE3NzQ1Mzc1MTUsMjUwMC4xMDYzNTA4MzE5NDUsNjI3NzkuMzA4NDk2NzQzNjQ0LDQzMDYyLjg0NjgyNzMzMTA2NSwxNDQ2NTAwLjgwMDkwNjUwNDMsMTc4MjIxNi41MDg5ODAyNDIsMC4wLDAuMCwwLjAsMC4wLDcyMzg5OC44NTk0MDM3MzE0LDE0Mzk2NDAuNjI3OTM4ODY3NSwwLjAsMC40ODIxNTI3Nzk5NDEwNjg4LDY5Ni41Nzk3NjM0OTgyNTMsNzAwLjY5MzE1MjA4MDIwOTksMC4wLDAuMCw1LjIzODk0OTMzMzMyMzY2OUUtNCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwxMDY4LjYwOTM2MDcxNTUzMjEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDEuNTE1NzAxMjc2Mzk0MTI0MkUtMTAsOC40NzA1NzQyNjAyNjY0OTZFLTcsMC42NDI5NzE0NTczMzA4MDU0LDIzNy4xMDQxODA2NjEwMjQ2LDMxMC4zNDg3MzQ1Njk0MDIsMy4xMDA4Mzk2Njc3MTI1Mjg1LDIwLjk0MDEzMTA0NzUyODU0Miw3OTI0MzY4LjM3NTY1MjIxNworNixTdW4gMzAgSmFuIDExLDUwLjg3MjI5Nzc3MDI4MzMsMTIxNC44NjkzNTI0MTA3MjMyLDE2OTkuMDcwNTQ3OTgzNzc5OCw3NDIzLjg5ODE4NzQ2ODM4LDAuMDAxMDg3NTQ4NDA0Njc2NTU5LDAuMDI0MTU1NTA5ODc0NDk3NjgsMC45MDI5OTQzNjg3OTEyMzcyLDAuMCw0LjY2ODQ2MDY3MjA3OTE0ODVFLTgsNy4xMjMxNjcxMzc1Njk2NzRFLTQsMS4yNTQyOTk5MjkxMjQ0NTQ2RS02LDAuMzE2ODU4MTM3ODY2MTc2OTUsMjcxLjgxMzYxMDM3NTIzMzM0LDIuNDMwNzQ5MDE0Mzk2Mzc0NUUtNCwwLjMxNDIwMzQ4ODM2ODg5ODUsMC4wMDEyMzE5NTU4NzIyMzEyNjgyLDAuMDA4Nzc3NDAyODY3Mzg5NDgsMC4wMjA2NzAzMjA0NjkzNTc4MjIsMC4wNDM1MzE4NjgwMDY5MDUzMywwLjI0MjQxMDg1Mjc3NzQyMTQ0LDAuMjI2NzM0NTgxNjAwMzM4NiwwLjAsMTk3LjY4OTE0NDkyMTY1MzQ1LDI2MDAyMy43OTczNzM2NzMwNiwxOTI5NzYuMjU2NzkxOTc5MjIsMTE0NTQwLjM3MzQzNTg3NzUzLDEzODY2NC4zMzMzNTE1NTMzMywxMTczNTI4LjE2MjAyMzIwOCwxNTUzNTU4LjQ0MTUxMjYzOTQsMTUwMDkxOS41Njc2NDYwMzY0LDM2ODkwMy44OTcwOTIxODQ3LDEzNDkwOC40ODc0NTg2Mjc2NCwxMzY4NTAuNzg2NzUxOTY2ODcsMTI2NjA0My42MDkzMTYyNzMsNzI4NTQxLjcyNTkwMjkwMDMsMTA5MTIwNC4zMDM1NTg2ODg4LDAuMCwwLjAsMC4wLDAuMCwxMjEwNTUxLjU5Mjc4NDExNzQsNTg3Mzk5LjM5NzUwOTUyMDksMC4wLDUwLjE1NDU2NTI0OTY1OTM4LDM5MTEyLjk3MzI5MTMxODEsNDA5OTAuNTYwODI3NjgxMjU2LDAuMCwwLjAsMC4wNzk1MTk3NjkwODIzNDU1OCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCw2ODQyMy43MDUwMzc4OTU3NSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsNC42NzM5NjQyMjk3NDI1MTc2RS04LDEuODQ4NTI2NjEyMTg1NTU3NkUtNCwxMDUuMTI2NjQ4NjgzMzg5NzksMjEwMDMuMzQ2MzQ3ODQwNTMsMjYwMjYuNzQyOTQ2ODAzODAzLDM0Ni41MzIwNTA5NDIyOTIyLDE4OTIuNDkxNzU1MzMzNTk3NywxOTcyMzU4LjA2NTIyNTY4OQorNyxNb24gMzEgSmFuIDExLDY3MDIuMjkxNzc3NTY1MTM5NSw5NzI2MC4yODM4NTM2NzI3NSwxMjk5MDUuODEwMzYxOTE5NDQsMzYxMjg1LjUwNTA4MDc0MjI0LDAuMTUxOTA1ODM2NzIwODYxNDQsMi41ODQ4Mjc2MDQxOTg4Njg1LDY2LjM0OTg0NjMzODQxNDk4LDAuMCwxLjAyMzg2NDk1NzcxNDYxMzJFLTUsMC4wOTgyMTIyMjQ3NzIyMjA3NywyLjQ5NDQyMzgwMzc3OTg1NEUtNCwyNC45NzczMzE4MTI3MDA0NCwxMjk5Mi41NDk0NjAzMTc0NzYsMC4wMzIzNTQzODU4Mzk4MzIwOSwyNC4zNjgwNTI4NzM4ODYyNywwLjE4NzIwNjQ2MzEyNDg5NTA4LDEuMDA1NjIxMTQzNDAwNjA0NCwyLjI5MzYzODIxODc3ODYzNzUsNC43MzIyMzk0OTQzNTIzOTUsMTguMzIzMDA3NDMyODI0NDQzLDE2LjQxODIxNzk2NTQ1NDE0NywwLjAsMTI2MzkuNjY5MTI5NzUzNzU1LDEyMjI2MzIuODk4OTg0Nzk5OSwxNjg1NjkuODc0NDg1Njg3NzYsMzU4MzguMzc0MDIwODkzMzYsNDYwNTU4LjU3MzE5NTIyNTQsMjAzLjIyNzM5NzEyMzcyMzEsMzc2OTkxLjk2NTAwNDA3MDIsMzgzMi40MDI3MTMwNTI2MzYsOTAyODcyLjI0MTgxNDE3NTIsNTY0NTMwLjE0NTY5MDI4MTEsOTE4LjQ5MTQzNDg4MjY0OTUsOTc2NzkzLjYwNjcyNzE1NDMsMTMxLjI4NTIzMDg3NDA0MjE2LDI3OS40NjM0MTA1NDYwNzY0LDAuMCwwLjAsMC4wLDAuMCwyMDQwLjE5NTYyNDE4ODA5MTQsNzIuODY0NDc0MjYxNTc3MywwLjAsMzcyNC4zMTI3Nzc5Nzc1MDY0LDQzMTk3OC4xMTExMTE4NzU1LDEwNjYyNTUuOTcwOTczNTMyNCwwLjAsMC4wLDkuMDIzOTkwNzAxODUzODE0LDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDE5OTMzMDIuMzk3MzA2NzA3LDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwxLjAyNTM1MzI5Mzc1MzE5NTVFLTUsMC4wMjk4NTAwODIxMzM2NzYwMTUsMTE5NzcuMzA4NTc4ODY4NDg2LDQ2MjgxOC4zMTg2NDM0OTY3LDIzNDI1OC4zMzE0ODEwODMsMjU1NzAuMTYxMjU1NjQ0NjQ1LDY3MTc4LjU3NDIwMDAzMzc2LDEzOC4yNjA1NTY4NTUwNDQ4Cis4LFR1ZSAxIEZlYiAxMSwzMTAxNTQuNDEwNzE4NDA5NjQsNjA3NTQ3Ljc5NzUxNjYxOSw2MjU2MzQuMzgyOTQ4NTg4OSwyMzA3MzU1LjgxMzYzMzIwNDQsMTUuNjA4MTAyNTUxODY2NjI2LDIwNi45NTUxMzA4ODgxMSw0MDE0LjM4NjM5NTM5NjY1OTMsMC4wLDAuMDAxNTk3MzQ3NjM1ODk1MDk0MiwxMC4zMzc3MzU1MDUwOTY2NiwwLjAzNTQ4MzE5ODgxNTAzOTA4NSwxNjM4LjQ1NDQ1Mzc3MDIwMjcsNTA0MTQ5LjU5OTI5Mzc5NCwzLjI2Mzc0MTA4Nzc3NzM5NjUsMTU3NC41NDUwMDc5OTE5OSwyMC40NDg4MzA3MDMzMzU4MjMsODcuMDQ0MzU0MTg2NTgyNjUsMTkxLjcxOTkzNjg2MjExNzI3LDM4Ni44MDQ3NzQ5MTg3NzMxLDExNDkuMDMzODcxNDM2NzYyLDk4MS42MTk5Nzc1MjgwNzUyLDAuMCw0NDA5MjcuMTEyMzMzNDg2NSwyMjc2MS4wNjA4NTg0OTIwNiwxMjQuNDM0NTc3ODE5NTMyMDgsNS45NzAwNDA2ODE1NjI5NTYsNDE5Ny4xMzUzMDg5OTQ0NDcsNi4zOTQ1OTU3NTE1MTQ1MjZFLTUsMjMuOTYyMTA5MDg5OTY0Nzg4LDAuMjAzMDU0NDQwMTgxOTcxNTgsMzc2Ni4wMzAyMTUxODQyOTkzLDc2NDMuNTgxMDA5MDM5MjMzLDAuMDAyODYyOTIxOTExNjA3ODgxNyw0MTkuNjAyOTAzNjYxNzAwNSw0LjE2MTk2NzE1MjYyNjgzMUUtNSwxLjAwNjk2MDU5ODQ3MjU1MzVFLTQsMC4wLDAuMCwwLjAsMC4wLDAuMDAxNjQwNTA1NTI3MTcyNjQyLDIuMDAxNzczNTY1NTk3NTg1NkUtNSwwLjAsMTczMTAyLjk1NDczMzU1Njc1LDQ3MzA4LjUxMTA1MTU1NzUzNiw3NTc3NjUuODcwMDY3OTI0NywwLjAsMC4wLDc1NS44NzU1MDYyNjc5MTYzLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDE4MTMxNjguMTExMTIzNDM3MywwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wMDE2MDAxOTc3MTk2OTA4MTc2LDMuNTIwNjk1OTk0NTM5MDk0LDIxNTkyOS44MDE3OTIyODU3LDE5MTkyNC40NjgyNjAzODA4NSwxMjc1Mi42NzA1OTAyMDYwNzcsMjg1NDAxLjg0Mjc5NjY0Miw3NDA4My4xNzkwNTU0ODkyMiw1Ljc1NDcwMzYxOTcyNjkzNAorOSxXZWQgMiBGZWIgMTEsMjkyNDA0LjEzMjA2MTgyNTY2LDE3NzIwLjc5NDU3MzYzMjgzNywxMDUwMy43NTQ5MTM4NTQ3NzcsODM0MzAuMzQ1ODIzMDQwMjgsMTI5Ni44MDc2MzE1MzEzNDAxLDEzNTA2LjM0NDUzMDIxMTUwNSwxNzU3MTMuODg4NTUxMjA0MSwwLjAsMC4xOTM2MjQ1Njk0ODU3MTk3Nyw5MDEuMzA4OTEyMDIzMDg5NSwzLjkzNTgzMTgwMjM1MTE0NCw4NjE3MS41Mzk5MzczMiwxNjY2MDMwLjMzOTg1MjUwNTQsMjcyLjE2NjcwNzgwMDM2Mzg0LDgxNjQwLjUzNTA1Nzc5ODMzLDE3NzcuMjIyNjMwMjc4NzkxMyw2MjIwLjI4MjEzNDY3Mjc2MSwxMzE2Mi45MDM2OTIzNDQ5NTEsMjU4ODAuOTY0NTE0ODI1NTY2LDU2NzYyLjgwOTM4ODY4ODA5Niw0NDM0Ni4yNzY3MzYyNjE4NzYsMC4wLDc2NzQ3Ny42Nzk2Nzc5NzkxLDAuMDgxOTUyNzQwNDI4NDk2OTMsOC45ODgxMTAzNTE5Mzk3ODRFLTUsMi4xNjM5Nzg1NDUwMzU1ODNFLTYsMC4wMDg5NjQzOTg1NjIxOTYxMTQsNS42MDEyNzE5MjEwNzA0NDhFLTEyLDUuNTUxNTczNjc3NTI0OTAzRS02LDAuMDAxNDQ5Mjg1NDE4OTU0NTA4NSwwLjAwNTAwMjAzMzk2MTE1NzIyNywwLjAyMTQwNTk2MTk1NDUxMDkzLDMuNTAxNTMzODkxMjQzOTE3RS0xMCwxLjg2ODkxMjcwNDY2Nzc3NTdFLTQsMy42MTkwMDg2MjQ0Mzc4NDIzRS0xMiw4LjY3OTgxNzEwNjAyNjY0M0UtMTIsMC4wLDAuMCwwLjAsMC4wLDEuNDMxNTc2MjY0MDAzMjUxNkUtMTAsMS43NzQ0NjI5ODI2NzA5ODUyRS0xMiwwLjAsMTAxMzY5NC4yNjY1MDIyNTU2LDAuOTM2ODM3NTY4NTExMDczNSwyNzkuOTg1NjgzMTM4OTk3MzMsMC4wLDAuMCw0Mzg0Ni40NzQ3MzcwOTExOCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwxMDgxLjE5ODcwNjU2NTg1ODYsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMTk0MDQzMjcyOTk0OTU0MjcsMzMzLjQ3MjY2MDQ5OTM0ODQsMzI0OTMuMTQ0NjQyOTYyNjE2LDM5LjY3NTUwMTk3NjcwNTY3LDAuMTI0MDI2ODIwMDQ5MjE3NjEsMzA2ODQuNjQ2Nzc3Nzk4MTc0LDExMi42MjQ5OTkzNDE5OTM4OCwwLjA0MTkxMjc4OTUyOTI3NzYxCisxMCxUaHUgMyBGZWIgMTEsMTY4LjAxMDM2NzY3MTgyMDg2LDAuMDk1NzA5MDI1NDYzMTM0OTIsMC4wMzQ3MDI4MTA2NDAzMzYxMDQsMC41MTY2NTkzNzkzNzE5NTIzLDc4Njc1LjYyMTY5MTI0Mzk2LDM3MzcxNi4wMDMwNzY3MzQ1LDEwNjMyODkuMjc3ODIyOTA5NiwwLjAsMTkuNDY5MzM0MzUwOTUyMDA3LDYzMTA3LjE2OTEyMTA3MDIxLDM1OC42NjY5MTc2MTgyOTI1LDEzMjA1NDkuMTc4MzQwMjA5MiwxNTQ0My41MTY4NTkyNTE0MjcsMTgxNTcuMDI5Mjg5NzQ1NDEsMTM2NjA5OS42NzU4MDA0ODcsMTA3NTAxLjI5ODkwMDE4NDA5LDI2ODI4My42NjY3NjY5OTQyLDQ1NDA0MC4yNjE2NzQwODcyLDczMjkxNC4wNTMzMjUyODM2LDkxMDE5MS4xMjA1MTA2MDA5LDUwMjg4My43Mjg2MjQzMjExLDAuMCwxNzY5Ljc5OTc2NDMxMDM2NjMsOC44ODAxMzIwODY0ODkxMDVFLTksOC41NzMzMTA3OTUzNjI5MUUtMTIsMi4wNTI3ODYyNDM2NDE5NTY4RS0xMyw4LjgyMzA5ODU3NTc4OTY5N0UtMTAsMS42MTYxMjY1MDEzMTc1MjM2RS0xOCw1LjEyNzQ5NjE5MjkzMDQ0NkUtMTMsMS45MTg1OTk3NzAyMzMyNTFFLTUsNC42MDI4Mjc4NTI2ODYyMUUtMTAsMi4yMDg0NDQ0NjM2NjUyNDNFLTksNS40NTEyODA1ODA0Njg4MjE0RS0xNywxLjU5OTM1MzE4MDM3MDM3MkUtMTEsMS4wMzAyOTk5NTYyMDI1NzQ3RS0xOCwyLjMwNjAyMTY5MDczMDIxMTdFLTE4LDAuMCwwLjAsMC4wLDAuMCwyLjY4OTY5MzUzMjY3NzU4NTNFLTE3LDUuNTMxMzkwMTQ0NjU0MjE1RS0xOSwwLjAsMzEwMzcuNjU4NjEyODc3MTYzLDEuNTA2MTE3MjA2MjI4NDMxN0UtNywxLjE4MTEyMjQzMzEzMDg3MjRFLTQsMC4wLDAuMCw2MTE0MjQuNDk0MjMwMjU5OSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCw2LjUxMDk0MzczODI4MzA2NUUtNCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMTkuNTE5ODk2NTQwMDQwOTQsMjU5NTcuOTc4NDk0MzUzODMsMC45NzIxNTM5NzU3MTcxNTUxLDEuNDg2MDk0MjYzNzg0NzU2MUUtNSwxLjY3ODIwMzU2MDg4MTM1ODVFLTgsMC42OTMwNjc5MzQ2OTcyODQsMS4wNTA2NDU2OTA2NzAyMDg0RS00LDUuNTYyMjAwNTcwNTU4MjI3RS00CisxMSxGcmkgNCBGZWIgMTEsOC4zOTUzMDUxOTQyMzYwOUUtNSwxLjEzMjIyMzUwNzk3NTEyMDhFLTgsMy42ODIzMDkxNzYxMTA4NTNFLTksNi4yNDA4NDQ4Mjk0MTgwMzZFLTgsNTA2NzE5Ljc5MTUyMTk2MjU2LDI1MDMwNi4yMjk4MzQyMDAxNyw0NTYyMC43ODA2MDk4NjA3NCwwLjAsMTU4Mi4zOTAzMjYwMTk2OTQ2LDEwMTY2ODAuNDc0MDc1NjEzNSwyMjM2MS40Mjg4NTY0MjU2ODIsMjczODYwLjg3MjQxNTk4MjgsMC4wMzM3NDUxMzU4MjQ4Njk1OCwzNzAxOTQuOTI3MzE4NzM2NiwzNDg3MDUuNzgxMzM1ODg4LDQzNDYzNS4zODYwMjk5OTY5LDU1MzI2MS45MTI4OTY1OTcxLDQ2NTkzOS4zMzEzNTM5NDAxLDQxMzAxMC4xNTIzMjE2MjExLDI0NjM5My44MDgzNDI0Njk0OCw3ODQxNi44ODYzODMxMzIxNywwLjAsMC4wMDE2OTI1NzM0NTI5OTY5NjUsMS4xMzU2MzE0NzAyMDYxODY4RS0xNSwxLjg5MDQxOTM0NDQxODA0MUUtMTgsNi4xODA2MzA2NzcyNDQ5MzVFLTIwLDEuMjU3NTY1Njc2MDU0OTEzNkUtMTYsNC4wOTMwMTQ2ODcyMzg3MDFFLTI0LDEuODIwMTQ0NDI3NjgwMzUzM0UtMTksNi43NjA2NjIxODk5NTM4MDNFLTEwLDcuNDEzMzU5MTMzMDI0OTg0RS0xNywyLjk2MDc4Nzg0MzU4NTg4M0UtMTYsNS4xOTY2MjY3ODQzMjQwNDU1RS0yMywzLjgyNDE3NjU2NzAwMDE2OUUtMTgsMi41NzE0MzI0OTQ2MTcxNDM3RS0yNCw1LjI2Njc4MDU5NjU4NjY1NkUtMjQsMC4wLDAuMCwwLjAsMC4wLDMuODM5MzgwMzM5NDIyNTM0N0UtMjMsMS41NDU0MjI3NTM5NzY5MTVFLTI0LDAuMCwwLjE2Njk2Njc5NzI2MzkwOTQyLDEuNTA1MDczNjY3OTU3MjU2RS0xNCwxLjAxNDkxMTI3NjEzNzE5ODJFLTExLDAuMCwwLjAsMTA0MzgwLjQwNTYyOTk4Nzk2LDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDIuODgxMzYzNDY3MDgyMzNFLTksMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDE1ODguNjcwNDEzNjQxMTYyMiw5ODk5NDEuNDM5MzM5MDYzMiwxLjc2NDgxMzc2OTQ2MjU1NjJFLTcsMS4zNTcxNzU3MzUxMDI1NDIyRS0xMiwxLjgzNzk4MzYwMzg3MzIzOTdFLTE1LDEuMTgyNDUzMjIyMTk5NDMzOEUtNyw5Ljg4NTYwMTMwMjYzMDc5RS0xMiwyLjE2OTI0ODc5NDcyMjU3MzVFLTgKKzEyLFNhdCA1IEZlYiAxMSw3LjE0NzE5MzU4NDM3MzY0RS0xMiwxLjM1Mzk2OTY4MzIwNjQyOTNFLTE1LDQuNzY4NTAyODI3MDEwMzhFLTE2LDcuMjM3NTAwNjU2NTUyNTQ1RS0xNSwxNzc3NC45MDM3ODkwMzM4OTUsMTE0Ljg1ODIyNDExOTgxODk2LDAuNDA1MTExNjYzNzI0NTM3NSwwLjAsNzc4NjcuNDI4NjM2MDQyMzEsMTczMjY0Ljc1NDY0NzkxNTIsMzk3MTE3LjIwMTkwOTI2NjQ3LDEyLjY1Nzc0NTUyMTY4NjA1LDMuMzUzMDA1ODM5MTM0Njc0NkUtOSwxMjI4MzUuMDMzOTAxNDc4NzIsMjEuNzc3NjEyNDk4NjEyOTMyLDQ5NjMuNDQyODI2NzkxMjQxLDIwNjMuMDc2NDYzNzE4MTc3NCwzNzIuNDY4Njc5NzQ2MDQxNyw5MS4yNDg5Njk1NzI5ODkwMSwxOC42NjAxNzgwMDY1NDIzMDMsMi44NDExMjg5MzQxOTQ1OTM2LDAuMCwxLjUwMTIyMDE1NTI3NjQ0NTNFLTEwLDguNzgxMDI1MTcwNjEwM0UtMjIsMy4yMTM1MTUyNDUyMjM4NDk1RS0yNCwxLjU5OTE4MDc3Njk2MjMxNzFFLTI1LDEuMTc0Mjg4NzE1OTgyNDQzNUUtMjIsMS4xMTU5OTM0ODk3MDc4NDY2RS0yOCw1Ljk0MzY1MTk4NjE0ODIzMjVFLTI1LDIuNjkyMzk5OTQ2MTA0OTA2RS0xNCw4LjQwNTMyMDM3NjkwMzk0RS0yMywyLjQ5MzUxNTI2NTEzMDk4ODRFLTIyLDUuMDQ1ODQ1NTg0ODAyODA5RS0yOCw3LjYwODY2MzgzMjE4MTA4M0UtMjQsNi45MTY1OTU4MjE4MjgyNTdFLTI5LDEuMjk3NTIzNzI5NDMzMjE0NUUtMjgsMC4wLDAuMCwwLjAsMC4wLDUuODg2MTI0MTkyODExNDQxRS0yOCw0LjY0MjAyMDA4NDgwOTU3MjRFLTI5LDAuMCwxLjk2MTU4OTc2MDI2MTQ3NkUtOCw3LjAwMzIxODU2NjU3MTY5N0UtMjEsMi40OTgyMjMzMDY3MDk3ODZFLTE4LDAuMCwwLjAsMy42NDU4NTg2MTEzNDI0NDk2LDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDUuNTM0MzA4MjE4MTI1OTQzRS0xNCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsODE0OTQuODE3ODcwMzAwNTUsMTMwMzQ5MS44NTAxNzg2NzAxLDEuNjk4NTQwMTgxNTM2MTExRS0xNCwzLjgyNjU0NTMwMzMzMDc2MjZFLTE5LDEuMDQ0OTE0NjU3MDIyNDAwNUUtMjEsMS4xOTA2ODkxNTgyMDE2NjEzRS0xNCwxLjkyMzI0MjYyMjE5ODY2NkUtMTgsMS4yNjQxNTE2NjkzMTQ3MjM4RS0xMgorMTMsU3VuIDYgRmViIDExLDEuNjExNjAzMTMxOTc5NTc0RS0xOCw5LjE5OTExNzgzNzMyNDM5OUUtMjIsMy43ODUzNzU3MDgzODU4NDc1RS0yMiw0LjY3NTA4NTA4Nzk2NDA4NUUtMjEsMC4xMTQyNjQ0NzI1OTc2NjI0LDUuODc3ODc3MDYzMDc4NDE5NEUtNSw1LjUzMjgwMjg4MTgzNTQxMDZFLTgsMC4wLDQ0MzU2OC4wNjY0NzE0MzcyLDUuODU2NTc4Mjk4NDEwNDk5LDExMTc5OC42MDk4MDMwMjU3MywyLjU5NTA3MzEyMjk1NjYyNEUtNiw0Ljc3NjU3NDU2MTgxMDgyOUUtMTYsMTEuNTQ2NDM5MzU3OTMwOTI3LDQuODg5OTI4NTM5NDI3NDUzRS02LDAuMDEyMzM3NjcyMDM0MTg2MTc3LDAuMDAyOTI5MDI2MTY0NjIwMTM2NSwyLjE4NzIzMjY4NDMxNzc1NjVFLTQsMy4xMzQ5NDk4NjgzNjUwNTM0RS01LDQuNTExODcwMzE3NTQwODQ1RS02LDUuNTE5NzAwMTE5MTMxMTU4RS03LDAuMCwyLjY3MTMyNTY5NjU2NzA2RS0xNyw3LjAzNDg4NDI4ODYwMTY5MkUtMjcsNS43OTQxMDY1NTA0Mjc5MUUtMjksNC40MDIyODM3MjI3MjUwMUUtMzAsMS4xNTM5MDQ5MjQwNTc1MjE3RS0yNywyLjc3MDU5MDc0MDY4MDI0MDRFLTMyLDIuMDc1OTQ1NDQwMzIwMDA0OEUtMjksNi4xNTU2Mjc5OTczMDY2MzZFLTE4LDEuMDE0MTM0NTI0NzU2ODQ3NkUtMjcsMi4xOTI5ODkyMDQwMzQwNjI1RS0yNyw0Ljg3MTE5NTY5MzkyNDk3NjRFLTMyLDEuNjMzNjAyNjYyOTc1Njc0MUUtMjgsMS42OTczMTMwNDU2OTU5OTJFLTMyLDIuOTQ1NzIzMDE2Njg5MjgwN0UtMzIsMC4wLDAuMCwwLjAsMC4wLDguNzQxNzQ0MTg3OTE5MjAyRS0zMiwxLjI1NTI3OTY0NTY5OTA3OUUtMzIsMC4wLDIuMzMxODkzODI2OTUwOTYzN0UtMTUsMy4xNzI4NTMwMzg5NzczMDdFLTI2LDUuMTU4MzA3ODA1NDQyMzkxNkUtMjQsMC4wLDAuMCw2Ljg2NzEyNzAxMjQxMjk4NEUtNywwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCw3LjAwNTk0MTIzNTc3ODAzNkUtMTgsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDczMDU4MC40NTMzNjY2MjQsMTY0NC43MDc0MjI5Nzc4NTAyLDcuMTE1NTIyNTUwNDE1NTg2RS0yMSw5LjIyMjM1OTM2MTA3MDI0NEUtMjUsNS45NDI1MDg2ODg4NDQxMjlFLTI3LDUuNDQ5Nzc2NDExMDU1NTg2NEUtMjEsMi43ODEwMzg1ODYyNDI0ODc2RS0yNCw0LjY3NDc4NjQxNTU3NzQ2N0UtMTYKKzE0LE1vbiA3IEZlYiAxMSwyLjk3MDk0NzkwNTc3ODk2OTVFLTI0LDYuMzg2NTAwMjQwNTc2MzYyNEUtMjcsMy4xMjM4NzMwNTc4NTI5NTM3RS0yNywzLjA3NTIzMjk2NzE4MDkzN0UtMjYsMS40MDcxMTczNDIzNTAxNDE5RS04LDUuMjg2MTI3NjQ1MTcwMTM5RS0xMiw2LjMyNDA1NDQwNjU0MTI1MkUtMTUsMC4wLDEyNzMyLjM4NTU0NTk4MzI4MSwxLjA4OTExOTI0Nzk0MTY3NzZFLTYsOC4xMjA5NDYwNDg3MjIzMTIsMi40MTIyMzQ2NTYwMDYxNDdFLTEzLDQuNjQzMzc5Nzg1NTIyNzkzRS0yMiwyLjk1NTQ5MDI4MzU1MTkwNUUtNiw0LjQ1MjAxMDIyODk2NTYyM0UtMTMsMS4yNDUyMjE5MzAwMDUzMzU2RS05LDIuODE5NTY5ODQwNjQ0NDA1RS0xMCwxLjg4OTg0NDUwNDY3MzIxMzJFLTExLDIuNjk1MTQxOTc4NTY3Nzg5NkUtMTIsNC4xMDUxMTAyNjE3MjgxNTNFLTEzLDUuMzIyNTk2NDc3MjM2MDYxNkUtMTQsMC4wLDMuNTE5NTM2MDAwMDU4NjM5RS0yMyw1Ljc2Njc3MjU4MjYxODY5NUUtMzEsOS44ODc4OTc5NTI4MTE3NDVFLTMzLDEuMDk2NjY2MTI3MDEzNzkxRS0zMywxLjE0MjU3Nzc5ODg2Njg5MDdFLTMxLDQuNTU0NzIwMTAyMjkwMDY1N0UtMzUsNi40MDczNTAxNzM3MjIzOTVFLTMzLDguMzAyOTg3MDMyNzEwNTNFLTIxLDEuMjExNzU4MTIwMTY2MjQzNEUtMzEsMS45NjA0MjExNjk2NzQ2NzEzRS0zMSwzLjU5Njg1NDgyODIyMzM5ODNFLTM1LDMuMjgxOTg5MjI3ODQ0NDA5RS0zMiwyLjc2NDEwOTk1MjYxOTQ4NjZFLTM1LDQuNDk2ODYzNjg3MjMxNTg2RS0zNSwwLjAsMC4wLDAuMCwwLjAsOS4zNTgwMDA0MTE1MjMyNDFFLTM1LDIuMjE1MjIzMTQ1OTU0NzY1RS0zNSwwLjAsMS41NzY2NDU2MjQ4MzY5MzU4RS0yMSwxLjUyMjAxMzIxMjc4NzU1N0UtMzAsMS4xNDg4NjY1MDg3MDUxMTVFLTI4LDAuMCwwLjAsNi41MTI4NjU5NjM3NjQzMDhFLTE0LDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDYuNTc3Mjc0NDA5MDcxODc1NUUtMjEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDUyNjg4LjY5NzM2Mjc5NTY1NCwwLjAwMTE3MjY1NDEzNDczNDM4NTMsMi44NDgxODYyNTAwODc1OUUtMjYsMi4zNzc2NDQxMjY5NjA1Nzc3RS0yOSwzLjUzMzUyMTY4OTYyNDcwMTRFLTMxLDIuNDA2ODU4MjMwNTU5Njg3OEUtMjYsNC4yNzA4NjIyOTQyMzk0NjY0RS0yOSw5LjkxNTE5MTc3OTk2MjY0NEUtMTkKKzE1LFR1ZSA4IEZlYiAxMSw1LjkxMjM3OTIxMzg3MDc4MUUtMjksNC41Nzk0MzE1MDY1MzAxNzJFLTMxLDIuNjMzMjA2Njc1NzUzNjM2RS0zMSwyLjA5ODM4OTYxOTk0NDE5RS0zMCwxLjY0MDk0MzY5ODg2MzQ1NjNFLTE1LDEuMjY4Njg1MTU0MjQ4NzA0RS0xOCwzLjc5MTM1Mjg3Mjg2NTIwOEUtMjEsMC4wLDAuMDY0NDUzOTU2OTA4NDg2NTcsMS4wMzEzOTYwMDc0OTk0MzU4RS0xMywxLjkxMjY0NDcxNDIzMjk3RS02LDkuMTMyMTQ5OTUxODc5ODg3RS0yMCw5Ljg4NTcyMjk5NzcwOTEzM0UtMjYsMi42Mjk1MDQyNTQ0ODMxOTU3RS0xMywxLjU3MzUyOTMyNDA1NzkyMzhFLTE5LDEuNzEwMzQ2ODQ4NzUwMjc0NkUtMTYsNC42NjAwODcwOTA5OTgzMTFFLTE3LDQuMDQyNzgyNzAwMzgyNjEzRS0xOCw3LjI4NjYxOTc2MzIxNzc0RS0xOSwxLjQwMjI1NTMwMzIwNDU1ODVFLTE5LDIuMTY4NDk3NzMyOTE2MTE2NEUtMjAsMC4wLDQuOTY2MDQ4MDMzMTMwMDU5NUUtMjgsMy43Mjg3MzQxOTUwNDU2MjQzRS0zNCwxLjE4NTI0MzQwMzM2NDQ0NTdFLTM1LDEuODAzMzIyMzQ3NDEzMzc4MkUtMzYsOC42ODAyMzk5NDMyMTAwMDFFLTM1LDMuNDc0NDI4NTY2NDQyODk0MkUtMzcsMS4yNjExMjExNzc0NzA1MzVFLTM1LDUuMTgwMTU2NjUyOTI4ODQ4RS0yMywxLjA3OTYyNTMxMjAyMTc2MjNFLTM0LDEuMzY1MTMyOTk3MTQ2NjU1MkUtMzQsMS40Mzk1OTQxNDY1NjMyNzE2RS0zNyw0LjUyNTE2NjQ5NzAzMDQxNkUtMzUsMi4wOTMwMzI3OTEyODg3NThFLTM3LDMuMjM0NjA2NjU5MzE5NDQ2NkUtMzcsMC4wLDAuMCwwLjAsMC4wLDUuMDcwMDIzMzc4ODU1MjVFLTM3LDEuNzg3NTI0NDMxNTkzNzM1OEUtMzcsMC4wLDEuMDkwMzU3ODI0MDk4MTQ0MUUtMjYsNi4yMDI4MzM4MDA1NTI1OTI1RS0zNCwyLjM4NDMwMDE1ODU2NTkwNTVFLTMyLDAuMCwwLjAsMi42MzEzMDg3MDgyMjk4MTM3RS0yMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwzLjIyNTUyMTQyNzY0MzY2M0UtMjMsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuNjQ1NDM2MjM2ODY4NDUyNiwxLjAxNzU5MjUxNTg4OTI5NzVFLTEwLDEuMjEzMTY3NTQyMzU1NzM4OEUtMzAsNS42MDAxODMyMDM1MDE5NTFFLTMzLDEuNzMzNTg1NjIzMDU2MDhFLTM0LDEuMTI0MDM2NjE2MjU1MzU1OEUtMzAsNi4zMjA2NDM4OTE2MzI4OTJFLTMzLDkuMDQxOTc4NjM1OTY3NTQzRS0yMQorMTYsV2VkIDkgRmViIDExLDEuMTEwMzQ3MDMxODY3OTEzM0UtMzIsMi42Mzk1OTcxMjIxMzUxNDhFLTM0LDEuNzQ0MDM1MDAwMjU3NDA0MUUtMzQsMS4xNTk1NDkyODk3MjI0ODIyRS0zMywxLjA1ODY1OTQzMTE3MDQxMDRFLTIxLDIuNDgwODk4MTE2MjEyNTc5RS0yNCwyLjI3MTI4OTEwMjI5Nzk2MzhFLTI2LDAuMCw3LjQ1NTkzMTkyMDUzMjYxNUUtOSw0LjE4MjU5ODg2NjI1MjkzMTVFLTIwLDEuNzI1ODQyMDU1NTE4NjEyN0UtMTMsMy4yNDE0OTY4Mzg3NjQ1MzRFLTI1LDEuNjYwMTgxNzI5Nzg2MDgxRS0yNyw4LjQ5NTg4NjMxMTM3NzQ5MkUtMjAsNS4xNDE2MzYyNTExNTY0MjhFLTI1LDEuNTAyNjU4NjQxMzgxNzAzRS0yMiw1LjM2MDE1NjExMjI2NzU0N0UtMjMsNi44OTg2Nzg0MDQwNTM5NTVFLTI0LDEuNzA1Nzg0MTM0OTM4NzYwOEUtMjQsNC4zNzg0MTY1MjMxNzc2NjRFLTI1LDguMzU0MzE2OTAyMTY4NDY2RS0yNiwwLjAsNi44NDExMjAzODgzNDgxMzlFLTMyLDEuMzQ0OTYwNDkyNzY2NjM0NkUtMzYsNy4wMTcxOTg3NjYxMzcyMTdFLTM4LDEuMzc0MDcxMDYwMjc3MzIzM0UtMzgsMy41Njc5NTExMDk3MzU5NjZFLTM3LDguNzg3MzY0MTgyNjY2ODc5RS0zOSwxLjEwOTUxMTI5OTMxMjk4MTNFLTM3LDEuMTA2NDY4Nzg2NjE5MzI3M0UtMjQsNS4wNDY2MjA1ODIwOTM1NUUtMzcsNS4yMjk0NDIzMDg2MzgzMjNFLTM3LDIuMjA3MTE2MzU5MTM4MDY0NUUtMzksMy4wMDE1NzI1OTc1MDUyMzZFLTM3LDUuMjY0MTAxMTE1MTM0NzIyM0UtMzksNy44MjA1NTc3NjYwNDkyNTdFLTM5LDAuMCwwLjAsMC4wLDAuMCw5Ljg1MjEyOTIzNTY5NTYxNUUtMzksNC43MTk5NjI2MjU1MzY5MDc2RS0zOSwwLjAsNy43OTUwMDU2MzQwOTU1ODhFLTMxLDEuNTM1NDM2NDE2ODk1ODMyN0UtMzYsMy4zNzczNTExMjg5Nzc2NTRFLTM1LDAuMCwwLjAsMS4wMDk5MjkxMDExMDA4Mzg5RS0yNSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCw1Ljg1OTMwNzI0OTM2NzMyMUUtMjUsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDkuMTU1NzI2NzY5OTg2NzI1RS04LDIuMDA1MzUzOTcwMzYwNjQzNkUtMTcsNC40NTc3MzY1ODA3NDIyOTg1RS0zNCw4Ljc5ODkzOTMyMTI0MjA5RS0zNiw0Ljk5MzgyNTUzODEzOTAwMUUtMzcsNC40NzAzMzg2NzkxODU1MDFFLTM0LDYuNzI5MTgyMjAwNTQzOTM5RS0zNiwyLjYwMDM5OTM5OTczMzEzNkUtMjIKKzE3LFRodSAxMCBGZWIgMTEsMS40NDcyODczMjg4MTIzMjM1RS0zNSw4LjY3MTAzMzM1NzU2NjUzMkUtMzcsNi40MTUyMDMzMjg5MTY2NzlFLTM3LDMuNjgxMzgxOTgxNzcyMjA4RS0zNiw2LjkzNDUwMzk3ODM4NjI5MkUtMjcsNS4xOTUyNzAyMTQzMDg3MDlFLTI5LDEuNDEzODE5NDc1MTQwOTkzRS0zMCwwLjAsOC45Mzk4MjUyMzkyOTM5ODVFLTE2LDEuNjE0NDM1OTI4NzIzNDIzOEUtMjUsNS44OTkxNTIwNjkwMTkyNzVFLTIwLDEuMjMwMDA1OTI3NDU3NDRFLTI5LDguMDc4ODU5NzM3ODMwMTAyRS0yOSwyLjQ4Njk1MTA3ODEwNDUzNTdFLTI1LDEuODAwODk3MjI0NDQ5MThFLTI5LDEuMzgzNTExNTA1NTY4NTMyN0UtMjcsNi41MTY2OTA2OTE2NzIzNzZFLTI4LDEuMjY3MzgxMDYyMjU0MjQ4NkUtMjgsNC4zMDk2NjIwNzM1MzI1NzVFLTI5LDEuNDY1MTU0ODIxNjE3MDE3N0UtMjksMy40MjMxMTE0ODkyOTQ2OTFFLTMwLDAuMCw2Ljg3MzQ3MTMzMTMzODM0NUUtMzUsMS45MDUwNzE0OTgyMjUzODkzRS0zOCwxLjQ1ODg1Nzc4NjM3OTA3NTlFLTM5LDMuNDY5ODE3MzE3MTIzMjgzRS00MCw1LjU5NTgyMDA4MDY1Njk4MzdFLTM5LDUuNTE0MzA5Mzg5NDQ3NzM3RS00MCwzLjEzMDM5MTEzMzQ1NDI3RS0zOSw2LjEwMDUyMjUwMjQ2MjQxRS0yNiw4Ljc0NjYyNzQ1ODE4MzUzNkUtMzksNy43NjM0NTg0NTA4NDkyNzdFLTM5LDkuNDkzODYwNDEwMjY3MzU4RS00MSw2LjgxODY3OTk1MTE0MDg2NUUtMzksMy4yODk2OTYwODYzMjUzMDE0RS00MCw0Ljc0NTA5NDk3MDUxNDM5MkUtNDAsMC4wLDAuMCwwLjAsMC4wLDUuMDczMjQxNTE5OTAwOEUtNDAsMy4wNTg5MDAxMTk4OTgzNTg3RS00MCwwLjAsNC40ODI4NjU0MDY1NzQzNDFFLTM0LDEuNjE5MTU3NTczMDQzNDkxOUUtMzgsMi4yODg3OTgyNDk1ODE0OTFFLTM3LDAuMCwwLjAsNC4xMzMwMTIzMjUxMjQ5NTJFLTMwLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDIuOTM0ODY5MTg5OTk1NzA5N0UtMjYsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDkuNjUyMzgyNzUwNDExNDY0RS0xNSwzLjA1OTUzMjUxODYwNjE5M0UtMjMsMS4wMTMzNDEwMDA5NTkzMjlFLTM2LDYuNDY5NzIyMTkxNDIzMDIyRS0zOCw1LjkzMTYyNTMzMjQ4MDc5NEUtMzksMS4wODM5NDE0MTYyNDU3NDIzRS0zNiwzLjYyNDgxNjUwODczOTQ1MzdFLTM4LDEuNzkwMzUyMTgyODgzMDQxM0UtMjMKKzE4LEZyaSAxMSBGZWIgMTEsOS4xNzgyMDM3ODExODE0NzNFLTM4LDEuMTQxMTYzOTMwODc0NDE0NUUtMzgsOS4yMjQ5Mjc5NDIzOTU1MjRFLTM5LDQuNzE5NTM4ODM3NDIxMzE0RS0zOCw0LjcwNDkyMTgyNjIyNzIzM0UtMzEsMS4wMTYyNzU5NzA1ODAxNDM2RS0zMiw3LjIwMTczNTE2MTEzNDQxRS0zNCwwLjAsNi4xNTczMjgzMTk0NTkzOEUtMjIsNi42NDQ1MTI5OTc0NjUxMDZFLTMwLDEuODUwNDQzNDU2Njc5ODEyNEUtMjUsNC4wODU3MDYyMDYzOTMyMDNFLTMzLDguNTgzNTQ2MTkzNDg0MDE3RS0zMCw3LjgyNTczMDI3MDAzNTc2MkUtMzAsNS41Nzc3MDQwNDU4MDkxNTJFLTMzLDEuMjg5ODgxNzY1MTY3MzE4MkUtMzEsNy44MDk5MjkyMDIzMjM4N0UtMzIsMi4yMTIyNDk3NTc2NTMzMjFFLTMyLDEuMDAwMzIwMTU5NzA0NzEzOUUtMzIsNC4zNTM5NDY1ODMyOTk3ODc2RS0zMywxLjIxNDEwODE5MTA2Mjg5MDVFLTMzLDAuMCwzLjUzODk4MTcwMzU1NDQ5NjhFLTM3LDcuNzI1NTYzNDU3NDcxNDk4RS00MCw3Ljg5NTY5NDcxNTE2MTc4NkUtNDEsMi4xNzI5ODQ5MDM1OTEwMjM0RS00MSwyLjQ1MTI4MzY3NDkyOTQ0NjRFLTQwLDYuNzg5ODkwOTMwNTE3MDg2RS00MSwyLjEzMTUyNzc1ODI1NjY2NTJFLTQwLDYuODQ2MDgxOTY4MjE0NzExRS0yNyw0LjEzMTQxMDkxNTA1Mjk2OEUtNDAsMy4yNjE5MzcwMTM5ODM4ODU0RS00MCw4LjgzODE3ODMzMzIwMzgzOEUtNDIsMy45NDgzNzIzNzc2Mzk5ODNFLTQwLDQuMDM4NjIwMDkxMDk5Nzk5RS00MSw1LjcwMDEzMjQ5NzEwODcxNEUtNDEsMC4wLDAuMCwwLjAsMC4wLDUuNDAwMzk4OTE3ODA2MzY1RS00MSwzLjg1NTk3Njg0MzQ1NzM2NjZFLTQxLDAuMCwxLjQ3MDE1NDY5MzQ0MTU5MzdFLTM2LDUuMjQ3MjIyNTY2NDczNTJFLTQwLDUuMjg1ODkxOTM5NjQ1NjU0RS0zOSwwLjAsMC4wLDEuNDY2ODE4OTgyODk1MTE0MUUtMzMsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMy4xNzcxODQzMTI2NDMxMTdFLTI3LDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCw1LjEwNDcyMTAwMjk2NTMwMDVFLTIxLDUuMDE5MjIzOTI0ODI0MjU5RS0yOCw5Ljk4MzYyNjQyNDI5ODQ5MUUtMzksMS41ODk1OTc5NjA1Nzg4MzA0RS0zOSwyLjEwMzgzMjUwOTc0NDcyNkUtNDAsMS4xMjM3ODE5ODY4ODU1MzA3RS0zOCw3LjAwMzU4MTgxODM0MTQ5MkUtNDAsMi4zNTcwOTQ3Njk2NzczMDc1RS0yNAorMTksU2F0IDEyIEZlYiAxMSwyLjAxMzYzNDI5MDkxMTg0MTRFLTM5LDQuMzc0NTM3NTk4MDMzNzIxRS00MCwzLjc4MjgxMDA3MTY2MTY5N0UtNDAsMS43NzQ1MjM5NTY2NzU3MDE2RS0zOSwyLjU4MzE2Nzg5MDYxMjQ2NzNFLTM0LDEuMzY1NzE4NTA2NTE4NDU3N0UtMzUsMi4xMzU5NTcwOTUyNzY2NjAzRS0zNiwwLjAsNC4zNDgxNDQ0MDY3NTgzNDk1RS0yNywyLjM2OTU0Njk3Njc3NTQ1N0UtMzMsNi4yMjg3NTkyNzgyMDY4MTlFLTMwLDguNTQ2Njk1NTc5ODM4MzU1RS0zNiwxLjYzNjIzOTE3NTU5Njg5OEUtMzAsMi4yMDU5ODA5OTEyMzQwMzM3RS0zMywxLjEwMTUzMDA1ODYxNjc3OTVFLTM1LDkuMzA0OTQ1MDE0MTMyMjlFLTM1LDYuOTU2MzI4Mzk1MjI1MzgzRS0zNSwyLjcwODA1MzQ3MzA0ODE5NTRFLTM1LDEuNTU0MTc0MTkzMTYyMjg3NkUtMzUsOC4yOTgwMjk3NzM0Njk3OTFFLTM2LDIuNjc3MDYxMDc5MTUzODA0NUUtMzYsMC4wLDYuNjEwNzkyODgyODI0MTQ2RS0zOSw2Ljg5MTk2MTY1OTA3ODAxMUUtNDEsOC43MTI4Nzk4NzUwNzA1NDRFLTQyLDIuNjcwMDI4NDcyNTk0OTk2M0UtNDIsMi4zMTU2MTU1OTYyMDQzOTVFLTQxLDEuMzY4NzQ1NjE4ODkwODUzN0UtNDEsMi43ODcyMDgyNDM1MTkwMTEzRS00MSwxLjI5NTY1ODc4MTMyMDYzRS0yNyw0LjEyNTk5MjIzODA0NDA3OTZFLTQxLDIuOTg3MDA5NDQ4NzgwMzc2N0UtNDEsMS40NTIwMjMyODczNDkxNTk4RS00Miw0LjU4MzU5MDIxNTc1NjY2M0UtNDEsOC4xMjQyNDkzNjcxMzU4NjJFLTQyLDEuMTI4NjY5ODQyMTk3ODg1M0UtNDEsMC4wLDAuMCwwLjAsMC4wLDkuNzkyNjI1MTc3OTczNzY5RS00Miw3LjkwNDg4ODQ3NTQ5MDY3RS00MiwwLjAsMS45MzMxNDUxNDYxODk4NjRFLTM4LDMuOTYyNjYxNTY2MTc0ODQ1M0UtNDEsMy4wOTg4MzkwODg5NTY0ODM0RS00MCwwLjAsMC4wLDMuMjQwOTQ4OTQ2MTQ1NzczRS0zNiwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCw2LjA4OTk4NjE4NDYxNjI2OTRFLTI4LDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwyLjY4MDM2ODI0MTIwNzY5N0UtMjYsNy45MjE4MTYwNTA2NTI0MjJFLTMyLDMuMDY4MTc3NzYyNTIwOTcyMkUtNDAsOS43NTQ2Mjc0ODY0NDM0MjRFLTQxLDEuNjk4NDE0MTI4NjA1Nzk3NUUtNDEsMy41OTIyMzcxMDI3MTE0MzJFLTQwLDMuNTg2NjcxMzI4MDM3ODEyRS00MSw0Ljk4NjQzNzc4ODAwNjY2MkUtMjUKKzIwLFN1biAxMyBGZWIgMTEsMS4xMzU3MzgwMzA5MjI5NDY4RS00MCwzLjc0MjEzNTYwMTAyNzMzNTRFLTQxLDMuNDAyMjkzNzcyNTgyNzM0RS00MSwxLjQ5Njc0MTE5MTM0MDg2N0UtNDAsOC4xNDYwNzQ3ODk5NjIyODVFLTM3LDguODUwMzMwMzI4MzgzMjI4RS0zOCwyLjU5Mjc3NTY3MDI1NDk0OTNFLTM4LDAuMCwzLjE3MDIyNzM1NDQxMTA3N0UtMzEsNS4yNTQ3MzE4MzI5MjE4MzRFLTM2LDEuODYyOTkwNjc4OTA5NjA1NkUtMzMsNy44OTA3NjYxNTEwODkzNzRFLTM4LDQuNzY0NzE4MzM1NDAxNjM1RS0zMSw0LjAzMDIwODYyMzgwNDc0RS0zNiw5LjcxOTUzODc2NzU4ODQxOEUtMzgsMy42NjU2MTA5Mjc0NjUzMTVFLTM3LDMuMjQzNTYyMzM3OTYyOTk4N0UtMzcsMS42MzEwNjk0NjU0NjE4Njc3RS0zNywxLjEzMjU3MDUxNzgzNjg2NDdFLTM3LDcuMTA5MDgyODgzNTA2NzU1RS0zOCwyLjU3MzUwODQxNDQyODA3NTVFLTM4LDAuMCwzLjMwNDMxMzM5MTE1NTI1OTVFLTQwLDEuMDk4NzE3MTA0MDQwNzg1OUUtNDEsMS42MjI0OTIxNDg5NTI5NjIyRS00Miw1LjM3NzgyOTEzNjU2OTE3NEUtNDMsMy44NDkyNTM5Nzk1NzMzNDI2RS00MiwzLjk0Nzk4OTczMTAyMjE5NDVFLTQyLDUuODcyMTQ4MDE3MzUwNzY0RS00MiwzLjU4NDM1MjMzNjAxNzNFLTI4LDcuMTQzMzIzNzA5Njc3NTUyRS00Miw0Ljg1Mzk4ODA1MDA5NjM0MUUtNDIsMy42MTMyNjM1MTYyMzg4MDFFLTQzLDguODU1MDc3Mjc4MTE5MDQ1RS00MiwyLjMzOTQzNTI5OTgxNTI1ODRFLTQyLDMuMjEzMjU5OTAyMjEyMDE0NEUtNDIsMC4wLDAuMCwwLjAsMC4wLDIuNjE1NjUwNDc0MDk0NTY4NUUtNDIsMi4zMDk1ODAwNzc4MTc0MDQzRS00MiwwLjAsNy40MDk4MDgwNDQ2OTc2NzVFLTQwLDUuNTkxNzYwMjcxMjE0MjA3RS00MiwzLjYzMDIzOTc5ODE4NzU2MDdFLTQxLDAuMCwwLjAsMy4xMjQ5MjkzNjgzODEzNDZFLTM4LDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDEuNzYxNTc1MTcxNTI3MjQ2NEUtMjgsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDEuNDc5MjU0MjE4MTY0Nzg4OUUtMzAsOC45MjMzMzkxMDM4MTU2NzhFLTM1LDIuMjI1Njg2OTQ1NDI5NTY0NUUtNDEsMS4xODE1NjM5MjUwMzk2NzNFLTQxLDIuNTE2ODAyNjExMTU0NDg4M0UtNDIsMi42ODQxMjY5NTI3NDY3MTQ3RS00MSwzLjgwMTM3MTMzMzk4MDc4N0UtNDIsMS40ODc2NDczMzE5MDI2NjI0RS0yNQorMjEsTW9uIDE0IEZlYiAxMSwxLjI5Mjg5OTM1MDEyNjE3ODNFLTQxLDUuNzg1OTQ5MDQ2NTI2OTMzRS00Miw1LjQ1NzIwNTE5MDYxMjgzM0UtNDIsMi4yOTAyMzA4MDQzMjk4MzE1RS00MSwxLjAzNDg4MDA0NjMxMjY4MUUtMzgsMS45NjMxNDE2MDU4ODY2NjE1RS0zOSw5LjMzMTU4MzA5MTU0NjU0OEUtNDAsMC4wLDEuODU2NjIyODU0Mzk3NDY2RS0zNCw1LjA3NDIyMDI1NTU2MjE5NUUtMzgsMy41NzMxNzczMDQ3NjkyNzFFLTM2LDIuMzA5MTM1NjY0MjYwMDM2NEUtMzksMS44NjU5MDYxNTA1MDMzMDQzRS0zMSwzLjM0MjMxOTQwOTQxNTI1NUUtMzgsMi43NDg3NTEyODE5NTMzNDFFLTM5LDUuNTUxMDExMDQ5MDk2MjExRS0zOSw1LjU4NDQ5MzIyNTI2Nzc0NTdFLTM5LDMuNDI2MzEzMDcwMTQ3Njk5NUUtMzksMi43NTc0OTQ3MDkwODUwOTkyRS0zOSwxLjk1OTE5MDUzNjQ5ODAxNjNFLTM5LDcuNzQ3NTQyNDEyNjcxMjM4RS00MCwwLjAsMy40NDEzMzIwMDc5ODcwNDJFLTQxLDIuNjcyOTAxNDUzMDA1MjU5M0UtNDIsNC40MjgzMzYyOTA4NDk5OTJFLTQzLDEuNTU0NjUxOTM4MzUxNjYxM0UtNDMsOS42NTA4NDIwNzgzMTI0NTZFLTQzLDEuNDc4ODI4ODI3MjUzMzg2NEUtNDIsMS43NDg4MzkwNjM4MzI0NzkzRS00MiwxLjMwMzcwNDU1MTk2MjY3OTZFLTI4LDEuODQ1NTcyNzM4MzYwMTI4NkUtNDIsMS4xOTgxMTE2OTk4ODUwNzQ1RS00MiwxLjIyMDQzMDQ0MDQ0NTc3MTRFLTQzLDIuNDc1MDI0ODMzOTYxNzIyNUUtNDIsOC43NDQ5MzM4OTE3OTU5NzZFLTQzLDEuMTkxNDc5NzM0NDkxNTUwMUUtNDIsMC4wLDAuMCwwLjAsMC4wLDkuMjU0NDE4MzczODM0NjY1RS00Myw4Ljc2NDA5Njc3MTc2ODk3N0UtNDMsMC4wLDYuMzM5ODEyNTYyNzY2NTQ3RS00MSwxLjI0NDk3MjgyMjc2NDgzRS00Miw3LjA1OTg1NDA2NDQ2OTc3NkUtNDIsMC4wLDAuMCw5LjQ1NzYxMjkxNDg4MTU2NEUtNDAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsNi43OTMwNTg5MTg0NTQ1NzVFLTI5LDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCw2LjgyMTk5ODY5MDQwNzk5N0UtMzQsNS4wMzMwNzg3OTExNDMyOTdFLTM3LDMuMDQ4MzQ2OTU3NDQ1MDMzRS00MiwyLjM1NTkyMzExMjc5ODk3M0UtNDIsNS44MTI4NjY0MjA4MjM0NDRFLTQzLDMuNzU3NjA4MzUyMDEwNzc0RS00Miw2Ljg3NzE0ODkzMDM5OTIzMUUtNDMsNS42ODYyODQzMzcwOTMxNTZFLTI2CisyMixUdWUgMTUgRmViIDExLDIuNDYxOTc1ODI5ODUyMzM1NEUtNDIsMS4zNzg1NzQzNTYxNDgxNTg0RS00MiwxLjMzNDk3ODA3OTY1NzcxNkUtNDIsNS40MDc1MzUyNzY5ODQ0NzlFLTQyLDMuNjY2MTQzNTY5MjgwMjk3RS00MCwxLjA4MjkyNjcwMDg2MTU2NDdFLTQwLDcuNTQ1NjY2NjM4MDg4NTQyRS00MSwwLjAsLTEuNTIwNDA3Nzk3MDk4NDM5OEUtMzYsMS40Mzg2MTY3NzQ3NzU3NDAxRS0zOSwxLjI0OTEzMjI2MzM1MzQ2NTZFLTM4LDEuNjAyNDU0ODcxODk2NTU1MkUtNDAsOC4yMTY2NTYyNzkzNjI2NTZFLTMyLDguMzM0NjM5MTc4ODQ2OTQ0RS00MCwxLjg2MDkxMjkwMjUxNTg2MTVFLTQwLDIuMjg4MzAzMDgxNzgwMTI3NkUtNDAsMi41MzAyOTk4MTk1OTM5NjhFLTQwLDEuODIxMTk3MTYwNTI2NDE2RS00MCwxLjY0ODYwNzMyODYwOTA3MjVFLTQwLDEuMjg4MzU4NjI0NDY3NDM5RS00MCw1LjQ1NjM2MzM2NDQyODI1N0UtNDEsMC4wLDYuMTQxMzUyNzMwNDYwNTMyRS00Miw4LjgyNzE5OTU5NTM1NzQ2NUUtNDMsMS42MDMwMTA5MDI3OTk2MTUzRS00Myw1Ljg3ODg0MDk5MTg3ODcyRS00NCwzLjI1NTIwMjQzMTY5MjYwNDRFLTQzLDYuNzM3NTE1MzkxMjM1MzMzRS00Myw2LjY5NTk4Mjg2ODYwODEyN0UtNDMsNS43NjU0OTMyMjYxNTUzMDZFLTI5LDYuMzc0NjgxNDEyOTc1NDg0RS00Myw0LjAwNzUxMzgzMjI4MzE4N0UtNDMsNS4yMDY0MDI4NjE1NTMzMDJFLTQ0LDkuMDI2MjY0MTYwMTEzMjM5RS00MywzLjk2ODA2NjE5MjE0MDY0RS00Myw1LjM3NzE0MTY3MTY2NTQxNUUtNDMsMC4wLDAuMCwwLjAsMC4wLDQuMDI1Njg4NDMyODQ4NDY2RS00Myw0LjA3MzI1NDI0NjgwODQyNUUtNDMsMC4wLDkuNzk4Njc0MDU1MTQyMDg1RS00MiwzLjg1NDkwMDExMjEyMDEwNTZFLTQzLDEuOTgyNjUwMzc0OTM5NDA4OEUtNDIsMC4wLDAuMCw2Ljc0MjMyMDc3ODQ3Nzc1MkUtNDEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMy4wNTM0NzI1NjUyNjMwNjNFLTI5LDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwtOC4wODI1MzYxNDY2OTI2NDVFLTM2LDguNzIwNjY0MzQ4MTcyMzQ1RS0zOSw2LjY1MDg2ODIxNzIzNzAzMTVFLTQzLDYuNzU4NTM5NTAxNzUxNTVFLTQzLDEuODU2NTMxOTI0MDY5MzM5NkUtNDMsOC4zMjU5ODYwODM5NTU4MjFFLTQzLDEuODQwMzczNDk3ODczMDMxNkUtNDMsMi41OTc4OTcwNTA1NDg1MDUzRS0yNgorMjMsV2VkIDE2IEZlYiAxMSw2Ljc1ODUwODk0NTI5MTM5M0UtNDMsNC40MDQzOTAxNzkwODI2OTg0RS00Myw0LjM2ODI3NTI5MjQ5MzY5OEUtNDMsMS43NDU1NTY5OTk2NDE2NTUzRS00Miw0LjUzNjQwNTQ0NTYxODUyMkUtNDEsMS4zNDI2NTAxODc5NDQ2MTU3RS00MSwxLjEzNTI2MTM2ODY0NzcxMDRFLTQxLDAuMCwxLjcxNTE4OTI2NTc3NjUzMjJFLTM2LDEuOTQ3MDcwNzE0MjQ4MjE4NkUtNDAsMS45NTE5MjI3NjIyMDQyMzdFLTM4LDIuMjMzMTUyNTgxMDg0NzY1OEUtNDEsNS42MTcxODE3MjE1NTAxMzNFLTMyLDEuMjIzNzk1OTM0MDI4NTIxM0UtNDAsMi41NjY3NTAzOTA3NjIyMDA1RS00MSwyLjczMzY4NjM5NzI2MzY3NUUtNDEsMy4wMzY5MTkwOTM5NDc5NTU1RS00MSwyLjI0MjUwNzg3NzU3Njc1NzdFLTQxLDIuMTE0NjI2MTQ3ODk1NDM3RS00MSwxLjcyMDk3NzI3NTcyMDA4NzdFLTQxLDcuNTUxNzAwOTM5NDU4MjA3RS00MiwwLjAsMS42MjA3NTc3MTQwODY4MjgzRS00MiwzLjYxOTM4NDc4OTM4NDUzMUUtNDMsNi44Mjk3Njk3MjAxNzU5OTJFLTQ0LDIuNTczMDE5ODkzNzU0Nzc4M0UtNDQsMS4zNTc3NTE3NDgzMTI3MjJFLTQzLDMuMzk4MjQ3OTc4MDUyMTQ2NEUtNDMsMy4wMzM4OTA5MzI4MzU4MjkzRS00MywyLjk0OTg2NTY3NTY1NDQ1NEUtMjksMi42ODYwOTE5Mjc1NjMyNDQzRS00MywxLjY0NTE2NDA4NjgyODA3NkUtNDMsMi40NDc1MzcxOTAzNTg1MjI0RS00NCwzLjk4MTQ2Mzc3NjgyNDgwN0UtNDMsMi4wMDU2OTM0NzY1NDY1ODMyRS00MywyLjcwNTA3ODQwMTA3NTA4ODhFLTQzLDAuMCwwLjAsMC4wLDAuMCwxLjk4Mzc3MjEyMzczMzg4NkUtNDMsMi4wNDAyNTE4MDY3MTI2Nzc3RS00MywwLjAsMi4zMzM1NTAxMTU4MDc0MTRFLTQyLDEuNTEyNTE0MTMwODU4OTc5NUUtNDMsNy4yNTM3NzkwNDM4NzI0NkUtNDMsMC4wLDAuMCw5LjU2Mzg5MDA4OTYyMDA1N0UtNDIsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMS45MDg1OTU2MDE3MTcyOTcyRS0yOSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsNi44NjE3MDEyNjk4MTY2NzNFLTM2LDEuODU0MzU1MjcyMTM3MTgzOEUtMzksMS45NTQ3ODk1MTk1MTMyMzA1RS00MywyLjQ2NzU2NTA2MzQyNzUyODJFLTQzLDcuMzE1MDM5MTYwNTIxMTE1RS00NCwyLjUyMDU4MTM4NDE1OTYwMTNFLTQzLDYuMzIzMzA3NzM1NjkxODI3RS00NCwxLjM0Mjg0ODY5NjM5NTczMzZFLTI2CisyNCxUaHUgMTcgRmViIDExLDIuNDMyMzM2NTk2MzIwMDIwNEUtNDMsMS43Njc2NDY3NjkyMzAxNjE5RS00MywxLjc4MzQ1MjYyMDQ0MTEzNjNFLTQzLDcuMDU3NTI2NDc1NTMwMzExRS00Myw2LjkyNjY5NzcxMTcyOTY1NEUtNDIsMi40ODQ1MjY5NTcxNjgzMjM0RS00MiwyLjU5NTEwOTQ5NDA0MzQzMzNFLTQyLDAuMCw3Ljc3NjgyNTQ4MzQwMDIyRS0zNywyLjc0NjA3MDE3MTI4NDQ3ODNFLTQxLDIuNzgyOTcwNzI5ODE4MTM4NEUtMzksNC43Njk0MjQwOTgzNjc0MDhFLTQyLDMuODIzODIzMjc5NzU1NzAwM0UtMzIsMS42NTU1ODMyMTQzMDIzMDdFLTQxLDUuNDI5NTIzMzI0OTc4MjdFLTQyLDQuNDkzODQwNjQwOTk3ODIxRS00Miw1LjE1NDA4MzExNjM2MzgxNDZFLTQyLDQuMTEzNDcyNDQ1NTA1MTY3NEUtNDIsNC4xMjUxMDU5NjUyNDUwMjZFLTQyLDMuNTE2NzQwNDg2OTg5OTg0RS00MiwxLjU5OTk3NTU1NTUzNjI2MTVFLTQyLDAuMCw1LjY2OTQ5MzE5NTMxODMwMjZFLTQzLDEuNzM2MTY4Mzk0ODI5MjY5NkUtNDMsMy4zNjY4MTg0NTY1NTUyNjY0RS00NCwxLjI5MjkxNTY3NTM5ODQ3MTRFLTQ0LDYuNTkyODI2NjYwOTI0ODg1RS00NCwxLjg4ODQ3MDc3OTQ4NTcwNjdFLTQzLDEuNTYyNTA4NTgzODY5NzkzOEUtNDMsMS42NjAxNTUxMjMwNTkzODQ2RS0yOSwxLjMxMzc3NTA5NTQzNzE5NTJFLTQzLDcuODk4NDEzMTQzMDgzMTI3RS00NCwxLjI5MzkzNjY3NjA5ODYwODdFLTQ0LDIuMDExNzk1NzMyOTc2MDk5M0UtNDMsMS4xMTYyOTI1NjQwNjcxMjczRS00MywxLjUwMDUwMjYzMzk4NjQxMDZFLTQzLDAuMCwwLjAsMC4wLDAuMCwxLjA4NDQwNDIyNzc0OTMwMzdFLTQzLDEuMTI4MjU2NDc3NjcwNTA1NUUtNDMsMC4wLDcuNTc4MDc0OTEwNDI0MjQ4RS00Myw3LjAzMTA0NDQyNzIzNzYyMUUtNDQsMy4yMDc3NTU4MzU3NDg0NDA4RS00MywwLjAsMC4wLDIuMDc3MTMyOTgzNTcyNTJFLTQyLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDEuMjM1MTM0MzE4NjM4ODM1NkUtMjksMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDQuNDY3MTY3NjQ0MjE5OTM0RS0zNiwyLjI4MzYwNDUwNDUzNTM1RS00MCw3LjM4OTQxMTc0NTUxODI5MUUtNDQsMS4wODk1NTcwNzgyNzY5Nzg2RS00MywzLjQxMDY4NzczMjUzODYxNDRFLTQ0LDkuNzMyNDU1ODMwNzUwNjQyRS00NCwyLjY3MzM3NDM4ODc5NzYyMzRFLTQ0LDcuNTkxNzczOTI5OTk1NTM4RS0yNworMjUsRnJpIDE4IEZlYiAxMSwxLjA2MzA2MTQ3Mjc0ODc1NkUtNDMsOC4zNTA2OTIxMjMyNzU3NEUtNDQsOC41Mjg5MzMyODg3NDA5MDZFLTQ0LDMuMzUxNzEyOTQ4MzEwOTIxN0UtNDMsMS42MDM0MjE5MTU0NjA3MDg2RS00Miw2LjY5NTMyMTE4NTk2MDI0OEUtNDMsOC4xNzk0MjIyMTIyMDQ4ODRFLTQzLDAuMCw5LjMzMDU1MjQ5ODYwNDhFLTM4LDUuOTMwMzc5OTIyNzMzMjA2RS00MiwzLjgxMTU1ODc1MzUzMDY2NEUtNDAsMS40MzA0NTk0NTA5MTQ5NzE4RS00MiwyLjY0Njk3NDY0NjMzMDIzN0UtMzIsMy40MzU1MzM2NDc5NTQwN0UtNDIsMS42MTY5OTk4OTM1MjQ1Mjk1RS00MiwxLjEwNTI4MTEwODYxMDk4NTNFLTQyLDEuMjk5NTY2OTYxMzY2NzkzNUUtNDIsMS4xMDEzNDMzNzQ1OTYxMTIzRS00MiwxLjE1NjkxMjE2MzAxOTQyOEUtNDIsMS4wMjA4ODE2Nzg5MTMxNDRFLTQyLDQuNzcwMTI4Mjk0NTY3NDgxRS00MywwLjAsMi40Mjc5ODQwNDM1MjU2MzY4RS00Myw5LjMxMTA5NjcwMDg3OTQzNUUtNDQsMS44NDA5MDEwMjQ4MzQzMjg4RS00NCw3LjE2NTg2OTI1NzY3NDY2OEUtNDUsMy41NjY0MzcyMDQxMDY1Mzc2RS00NCwxLjEyMzgwNjg1MTI0NjQ1MzZFLTQzLDguODEyMzE2MjI1MzQxOTI0RS00NCwxLjAwMDM5ODc1MzU3NDUyOTJFLTI5LDcuMTQzNTgzMzE1MjIwOTIzRS00NCw0LjIzODUxOTQyOTUwNzY5RS00NCw3LjQzMzc2NzE1MzM5MTc1NUUtNDUsMS4xMTk0MjA4MjgwNDgzMTk3RS00Myw2LjY1MDAwNzkwMzUzNjM1RS00NCw4LjkxNzczMjc2MDQzMjY1NEUtNDQsMC4wLDAuMCwwLjAsMC4wLDYuMzc4NjQ3NjE4NjI5NzI1RS00NCw2LjY5MDk5OTY0NzU1ODU2MkUtNDQsMC4wLDMuMDc3MTIzNTU2MTM2MjkwN0UtNDMsMy42ODc2NzExMTU4MDg3NjFFLTQ0LDEuNjIzNzc1MDc2MTU0NjY3RS00MywwLjAsMC4wLDYuMzA2OTY1NzU3NjM3Njg2RS00MywwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCw4LjI4MTY3NDIxMjI5ODM3N0UtMzAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDUuNTQ4MjA0MzcwNjQxODNFLTM3LDQuMjIyMjUzNzk4MjU5NjYyRS00MSwzLjM0NDk0NzEwMTg4NTM3OUUtNDQsNS41MDkzODUwMDk4NTA3NDlFLTQ0LDEuNzkyNjcyMTkzOTYwMDQyNUUtNDQsNC40NzI3MDg5MjcyMzQxNDlFLTQ0LDEuMzEwNjQ4MzYxNzM0MzE3RS00NCw0LjU3MjQyNTgwNTMzMTIzNzVFLTI3CisyNixTYXQgMTkgRmViIDExLDUuMzM2NDkyNzEwNzY3ODE1RS00NCw0LjQzMDI0ODg3NTQxODAwNUUtNDQsNC41NjQyMDY2NTgwNDU0MDJFLTQ0LDEuNzg0ODIzOTgxMjg1NzkyRS00Myw1LjEwMDU0Mjg1MDkxOTkyOEUtNDMsMi4zNzc1MTk4MTA3MTI0NUUtNDMsMy4yNTA4MzYwOTk4OTc2NDA4RS00MywwLjAsMS40NzkxMjc5MzIxNzQ5NzAyRS0zOCwxLjc5MzIzOTQ1MDQzMzQyNjNFLTQyLDguMDA3NDc4ODE1MDE2MDU2RS00MSw1LjQ4NjQzMDU0NTA0MDEwNEUtNDMsMS45MjUwMDUzNTg4NjkyMTE0RS0zMiwxLjAwODc5ODY3MjI5NjY1NjNFLTQyLDYuMTcwNTY2NTI2NDg5MzE5NUUtNDMsMy42NzQzNDMxNjk5MDIwMTI1RS00Myw0LjM5ODQxMDc2NzYyOTg4NkUtNDMsMy44OTI4MzQ2MjI1MjQ0NUUtNDMsNC4yMjgzMjY5MzA4NzUzODhFLTQzLDMuODI0NzQ2OTY2OTAyNjc3RS00MywxLjgyMTY5MzkxNTI2NTM0MkUtNDMsMC4wLDEuMjAxMzEzNDY0NTM5NTA5NkUtNDMsNS40MDM3MDMzODA3MDg4MDlFLTQ0LDEuMDgzMDQ2NDM4OTI5NDU1NUUtNDQsNC4yNTYzMTg0MjcyNjU1MzhFLTQ1LDIuMDgyNDQ0MzEzMjcwNDczOEUtNDQsNy4wMTY5MDk1OTU3MjY0ODJFLTQ0LDUuMjk4ODQxNTg1NDYyMTIyRS00NCw2LjMyNzIyMzIzNzYyMDIyMUUtMzAsNC4xODYyODc0NDc5NTY2OTJFLTQ0LDIuNDYwODg5OTc0MzI3OTA0RS00NCw0LjUyODQwNDYxNzg3NzQ0MzNFLTQ1LDYuNjY3NDc5MDU0ODg5NjgyRS00NCw0LjE1NTI2ODY0Mjc3ODU2NUUtNDQsNS41NjMwMzQ1NzMzMDYxODFFLTQ0LDAuMCwwLjAsMC4wLDAuMCwzLjk1MDQ0MzM1NTk3MDUwMzZFLTQ0LDQuMTY3NzMwNDE5ODg3OTE5NEUtNDQsMC4wLDEuNDY1ODUxODc5MzIxMDI1N0UtNDMsMi4xMDY3MzgzNzgxNjczNDZFLTQ0LDkuMDQ2Njg5ODUyNDUzNUUtNDQsMC4wLDAuMCwyLjQ0MDQ3MTIyODg3MTA2NEUtNDMsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsNS43ODM2NTA0NTM0ODUxNjVFLTMwLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCw4LjMyODA2NTYwODI4MDMyMUUtMzgsMS4xMzc1MjA2NDc5NTgzNTUyRS00MSwxLjcyMTU3Mjg1Njc2NDM1OUUtNDQsMy4wNjcxMjgzODY0NDM0RS00NCwxLjAyNTY4NTE5NTA4NTYzMTlFLTQ0LDIuMzI2ODYyMzU3NDk4MjIyRS00NCw3LjEzODQ3ODI3NDM5NjY2NUUtNDUsMi44Nzg5NzgwNzk2MzQ4ODgyRS0yNworMjcsU3VuIDIwIEZlYiAxMSwyLjk1NTY1MDk5MDc1MDc2M0UtNDQsMi41NTE1MjExOTczNzcwOTY3RS00NCwyLjY0NDgwNjU1MzU1NTA0OEUtNDQsMS4wMzA2NTE4ODMzMjAxNTk3RS00MywyLjA0MDY2MDUwNzUyNDAyODdFLTQzLDEuMDI5MTY2MDYyODE3ODE2N0UtNDMsMS41MjUwODI2ODk4MTM5MUUtNDMsMC4wLDMuNTMzOTU4NDU1NTA1OTA3NUUtMzksNi45MTgzNjUwODQzNTkxNzE0RS00MywyLjM3MjcyNzU5NDY3MjA2MUUtNDEsMi41MDkzNzYyOTUwNjY1NDU1RS00MywxLjQ0NDk5NzcxOTg4NjcyM0UtMzIsMy44MTA3NTA1NTY2NzI3NzFFLTQzLDIuODEyMTAwOTYzOTg0ODQ2NEUtNDMsMS41MTcyMzQ5NjcwMjk5Mzg4RS00MywxLjgzOTY1NDQzNDExOTM0NDZFLTQzLDEuNjc5NTc1ODU5MTg1MDk5NEUtNDMsMS44Njg0ODAzNjI1NTM5Mzc0RS00MywxLjcyMDI5ODkxMTkyOTI5NzJFLTQzLDguMzA2NDEyMDg3MDYyMTM1RS00NCwwLjAsNi41ODU2ODU1OTYyMTI4OTJFLTQ0LDMuMzE1MTk1OTQ2NDEwNzk1NUUtNDQsNi43MDg0NjM3NzQ2NDAxODNFLTQ1LDIuNjU0MDkzMzEzMTYyOTM2OEUtNDUsMS4yODMwNjQ0OTg3MTc3NzI2RS00NCw0LjUzMDY2OTAzMzM3OTk5OEUtNDQsMy4zMzI2MTc0OTI2MzI3NDVFLTQ0LDQuMTM5ODcwNjE2OTMyNTU1RS0zMCwyLjU4NTg3NjU5MzcwNzg4N0UtNDQsMS41MTAyMjQwMDQ1NjA5Njc4RS00NCwyLjg3NDA3MTk3OTczOTU3NDRFLTQ1LDQuMTY1NjQyNDIyMzkyMTg5N0UtNDQsMi42ODQzNDU5NzI5OTcyMDZFLTQ0LDMuNTg5NjI4NDMyNTM0Mjc3RS00NCwwLjAsMC4wLDAuMCwwLjAsMi41MzYyNzcxMDQ3MzIzMTg3RS00NCwyLjY4NjUzODQ3NjQ5MTE1NDVFLTQ0LDAuMCw3LjgyMjgwNzcyNDYwNDQ2OEUtNDQsMS4yNzgyOTUwNDI4Mzg3MTU3RS00NCw1LjM5MzIyMTUzNjE5MDA5RS00NCwwLjAsMC4wLDEuMTIzMjgzODA0OTIwODg1NEUtNDMsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsNC4xNTg4OTIwNjAyMjA2OTFFLTMwLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwxLjkwMTM4OTU0ODQ5MzI5OUUtMzgsNC4wMzg3NzQzOTM0NDIxODA1RS00Miw5LjcwNDkwNTIxMjMxMjEzMUUtNDUsMS44Mjc0OTMyMzQ3NDAzMTdFLTQ0LDYuMjMwMTAwMDc0NTQ4NDM2RS00NSwxLjMyMTcwMDQ4NzMwNDQ2NDFFLTQ0LDQuMTg4MjIzODI2Njc1ODE0RS00NSwxLjg2OTcwOTQyMzcwNDc5NzZFLTI3CisyOCxNb24gMjEgRmViIDExLDEuNzU0NzA2NzYxOTU3OTg1MkUtNDQsMS41NTY5OTUwMzUyMDE4MjhFLTQ0LDEuNjIwODY1NjQzNzUzNDA3RS00NCw2LjMwMDkxODI3ODE5NDcxNkUtNDQsOS42MTkwMDY3MzkwMzIyRS00NCw1LjEzMTA2ODE5NDA2OTg3N0UtNDQsOC4wNTA5NDQxOTkzOTA1ODRFLTQ0LDAuMCwxLjE1MDMzNzgzNzAxNDQ2MjlFLTM5LDMuMTc3NjIxMjU0NzE3NDk2NkUtNDMsOS4wMjE2Mzc1NzMyMzM3MjhFLTQyLDEuMzAxMDUzNzczOTE0ODE1MUUtNDMsMS4xMDcyNDc0NDA2MDY3MDM1RS0zMiwxLjcyNDEyNjA0MDU2MDUwMzRFLTQzLDEuNDU0MjY5ODQyMjE3ODY5MkUtNDMsNy4zMTQ2Mzg5MDcxNTI1OTJFLTQ0LDguOTUwMjgzOTEyMjI0NzYzRS00NCw4LjM1NDMwODA4NDI3NzgzN0UtNDQsOS40NTM0MjgyNTQ3MjY3NjRFLTQ0LDguODEzODA0NTA5MDYyNzgyRS00NCw0LjI5NzI1MTAwMzIyMjgwNkUtNDQsMC4wLDMuODgxNjQ0OTU1MDUyNjIzNkUtNDQsMi4xMTQ0ODY2NTQzMTg0NzlFLTQ0LDQuMzA3NDQyNjc2NzYxNDJFLTQ1LDEuNzEyMTIxMDE0ODk0NjI4RS00NSw4LjIwODAxODE4NjQ4NDkzMkUtNDUsMi45OTQwNTc1Njk0MDk5OTlFLTQ0LDIuMTYyNjQ0NjI2Njg0NzQ1M0UtNDQsMi43NzMxNTgyMDkyMjA2OTQzRS0zMCwxLjY1NzE2Njg1MzAyMDIyNzNFLTQ0LDkuNjM0NDkwMDE2NjU3OTdFLTQ1LDEuODc2ODk1ODUwNjE0MTYzM0UtNDUsMi42OTA3Nzc1MDA1NDExNUUtNDQsMS43NzQ1NTA0MTI2MDQ1NTlFLTQ0LDIuMzcxMTExNjEwMzU2NzE2RS00NCwwLjAsMC4wLDAuMCwwLjAsMS42Njk1MDQ4NTcyMDIwNDFFLTQ0LDEuNzczMzYwMDUzMTEzNDUxNUUtNDQsMC4wLDQuNTI0MjM5MzI3NDc2MDZFLTQ0LDguMDkwNTg3NTM3MzQyNjAxRS00NSwzLjM3MTY0NDk3NDk4NjM1MjZFLTQ0LDAuMCwwLjAsNS44NTAxMjUyMzE5NTU2NTlFLTQ0LDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDMuMDUwMjYzNTY1MjI4NDAxNEUtMzAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDUuOTg4MDI4MjQ1NTE3OTAzRS0zOSwxLjc0ODEzMzk4ODk2NjkyMjhFLTQyLDUuODMzNjQ3MTMyNzU3NDIxRS00NSwxLjE0MjA1NjcwOTQ1MjAyMzRFLTQ0LDMuOTQ2MDgxMTQxNTMwMTk5RS00NSw3Ljk4NzMwMzc5MzM1NDY3RS00NSwyLjU4OTIyNDkwNjc5NDUxMjZFLTQ1LDEuMjQwNTE4MjgwNDg2NDU1NEUtMjcKKzI5LFR1ZSAyMiBGZWIgMTEsMS4wOTM3ODczNTIxMjU2MjAyRS00NCw5Ljg5MzcwMjg0MDc4MzU5RS00NSwxLjAzMzA0Mzg2MjkwMjIxMzFFLTQ0LDQuMDA4OTk1MzM4MjYyOTI3M0UtNDQsNS4wOTUwNTQ5NjY0MTkzOTNFLTQ0LDIuODI4MTEyNTMyNjAxOTA0RS00NCw0LjYyMDU5Mjk4MDQ4OTU5NUUtNDQsMC4wLDQuNjc4OTA5NjI2MDMzOTIxRS00MCwxLjY1MjQ0NTYxNTc1MTU0ODVFLTQzLDQuMTAwNzY3MDg3ODI0NDlFLTQyLDcuMzcyNTU5NjAyNjY2NDE4RS00NCw4LjU3OTA4ODAzOTA3MjIwNEUtMzMsOC44NzA0NzcwNDMzNDUyM0UtNDQsOC4yMjU4MjY1NDM5NTgyNzJFLTQ0LDMuOTM2ODY0NTgzOTkyNjAwNUUtNDQsNC44NDg0MjAyMjcxMDcyODRFLTQ0LDQuNTk3MTA1MzQ5NjI4NjQ5RS00NCw1LjI2NDk2MzA2MjkxNTA4NUUtNDQsNC45NTI1NzE4ODUyNTU5MjhFLTQ0LDIuNDMxMzEwMTgxNzkyNTYwNUUtNDQsMC4wLDIuNDA3Mzk3OTMzNjE0NjUwNEUtNDQsMS4zODU1NTQ3MzAyOTgwMzE4RS00NCwyLjgzNTYxNTY4NjEwNjM3NzRFLTQ1LDEuMTMwNzI1ODIyMDk5OTg2OEUtNDUsNS4zODk1MzYwMjg3NDE0NzhFLTQ1LDIuMDEwMzQyMTY2MTI0MTE2RS00NCwxLjQzNDEwNDA2Mzg5NDA5NjhFLTQ0LDEuODg3ODE1Mjk0ODg2Mzc4RS0zMCwxLjA4OTQ1NzQwNzUzMzQyNzRFLTQ0LDYuMzE0MDkwMjEyMTM5ODg4RS00NSwxLjI1MDA0NjQzNzQ4NTk2MjdFLTQ1LDEuNzc4NjU5NTA3MzA3Nzg4RS00NCwxLjE5MTc5MDk4MjM5MjAwNjVFLTQ0LDEuNTkxNTY3ODgyNDUxNjUwNEUtNDQsMC4wLDAuMCwwLjAsMC4wLDEuMTE3OTU5MjE5MTQyNjMwMUUtNDQsMS4xODk4MDI0MTI5MzY4MDVFLTQ0LDAuMCwyLjc2ODg4NjUyMzQ2OTgxMjVFLTQ0LDUuMjczMjkxODM0OTA3MTY4RS00NSwyLjE3ODg1MTg1MTA2MDUwMUUtNDQsMC4wLDAuMCwzLjMyNTU1MjIxMzk0Mjg5MjdFLTQ0LDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDIuMjY0NDk5OTcyMTc0MDQxRS0zMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMi4zNzg1NjQxNjgwODgwMzk4RS0zOSw4LjcxNTE2ODUwNDQyODA3OEUtNDMsMy42NjgxMzIwMzc4MDIyNDVFLTQ1LDcuMzc4NDQwOTYyNDkyNTcyRS00NSwyLjU3MzMwNjg1NjQyMDcxMDZFLTQ1LDUuMDQxMTA4NTMwNjIzNTAzRS00NSwxLjY2MDI4ODcxOTU5NzAzOTNFLTQ1LDguMzUyMDAxMjU0OTEwOTFFLTI4CiszMCxXZWQgMjMgRmViIDExLDcuMDU0MDU0OTg1NjIzODU1RS00NSw2LjQ2NjI3ODMwNjE4NTc0NEUtNDUsNi43NjU3MDc5MzYzOTgwMTNFLTQ1LDIuNjIyNTE1MjI2NzE4MDQ2RS00NCwyLjkzMTEyNzk5MzU5MDExNUUtNDQsMS42NzMyNjIyNzgzNTk3MTNFLTQ0LDIuODEyNjczMDQwNDc2NTEzOEUtNDQsMC4wLDIuMjMxNTgxNTQ2NTYwMzE5MkUtNDAsOS4zODM1Mjc5MjM1MDIyNDhFLTQ0LDIuMTE2Nzk2NTU3NzUwNzkyRS00Miw0LjQ0Nzg5MDQ4ODYxMjA5NTZFLTQ0LDYuNjc2MzcyNzQ4MDU5MkUtMzMsNC45OTkyMDAxNjQ3ODA3NTlFLTQ0LDQuOTU2MzM3NTEyMTYxMjI2RS00NCwyLjI5MDUxODYwNTI5ODk4ODNFLTQ0LDIuODMzNzU5MjE1NTA5NzA5NUUtNDQsMi43MTY3MzcwNzk5MzM2MjIzRS00NCwzLjEzNzkyNzIyNDY0NzE4MUUtNDQsMi45NzAyNzExNTA5OTM2MzNFLTQ0LDEuNDY1MjIyMDkwMTY5NTgzN0UtNDQsMC4wLDEuNTQ3MTMwMDE3OTQxODY2RS00NCw5LjI0OTQwMDY5MDA4NDYzNkUtNDUsMS44OTg5NjM2Njk3MzkzNDE1RS00NSw3LjU4ODkwMjAwOTU1NjY5MkUtNDYsMy42MDI5MDcxODAwMDY5MTY0RS00NSwxLjM2NDQ1NTI4ODUwNDMxNThFLTQ0LDkuNjUxNzA3NDgzNDgwNjRFLTQ1LDEuMjk5MTYzMjA2OTI4NDcxRS0zMCw3LjI4OTExNzY5MTY3NzI0MUUtNDUsNC4yMTU0NTA0ODAyNzY0NDVFLTQ1LDguNDM3OTk3NzUwNDU3ODA4RS00NiwxLjE5NDQ3MDk0MjM5NjEwODJFLTQ0LDguMDkwMTQwMjU4Nzk5OTRFLTQ1LDEuMDc5OTg3ODkyOTA4ODQ5NkUtNDQsMC4wLDAuMCwwLjAsMC4wLDcuNTczOTAzMzA5MTUyNDMxRS00NSw4LjA3MTM1NDgxODY1NzcyRS00NSwwLjAsMS43NjMwNDM5NzI0OTc0MDE0RS00NCwzLjUwNzM4MTczNTM5NTc4MUUtNDUsMS40NDA3MDEwNzc1MjU0MDE0RS00NCwwLjAsMC4wLDIuMDEwNzg4Nzg2NjAwOTY5MkUtNDQsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMS42OTIxODcxMjg0NTYzODk0RS0zMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMS4xMTU0NDM4OTAwNTM5OTI2RS0zOSw0LjgwMzQyNDYyODYxOTY2OEUtNDMsMi4zNzk5ODgxNDkzMjg5Mzg0RS00NSw0Ljg3Nzk3NTY5MzIwNjIwMTZFLTQ1LDEuNzEyMTcxMTg5MjkxMDgyMkUtNDUsMy4yNzkzMDQwMzI2NDUwMDJFLTQ1LDEuMDkxOTY0NzY1OTU5ODgzRS00NSw1LjY3ODk3MTc4MDY4OTk0OUUtMjgKKzMxLFRodSAyNCBGZWIgMTEsNC42NTc3NzAwMjc5MzI4NjQ2RS00NSw0LjMwODk4ODIyOTM5NDg2RS00NSw0LjUxNDkxMzE4MDkyNzQ1OUUtNDUsMS43NDg2NTIwMDE4OTY0NTdFLTQ0LDEuNzg3MjM3NjUzODg5ODg4NUUtNDQsMS4wNDA1MzI4MjUyNjI5NjYxRS00NCwxLjc4NDIyMDM3NDAwMzExODlFLTQ0LDAuMCwxLjE5MTk0NTU2OTI3MDA5OTNFLTQwLDUuNjY5NTExNzA5NjkyNjcxRS00NCwxLjE5NTc3MTA0MzY3NjI2RS00MiwyLjgwMzkzMzQ3NjE5MzMzMTRFLTQ0LDUuMTk0ODUxNDQ0NTY5OTg2RS0zMywzLjAwNDQ4NDU5NDUyOTYwM0UtNDQsMy4xMjE2Njk2MTIwMDUwMDVFLTQ0LDEuNDA3NzI1Mzc5MTM1MDUzMkUtNDQsMS43NDcxNzY2NDQyNTQ1NDUyRS00NCwxLjY4ODA0NzQxNjM2NTI0MDlFLTQ0LDEuOTYxMzY2MTA0ODgyODA1NkUtNDQsMS44NjQ3MjExMzk3NjI2NjhFLTQ0LDkuMjI5NzEyMjc2MjE5NDg3RS00NSwwLjAsMS4wMTkwOTIxOTI3ODIwNTU3RS00NCw2LjI1MzEzODY4ODY1NDc5M0UtNDUsMS4yODY1ODE2ODAxNjgxMjU4RS00NSw1LjE0OTIxMTU2NDQ1MDkxNjRFLTQ2LDIuNDM4MDkzOTkwNjI5NjcxM0UtNDUsOS4zMjc0MzcwMTIxNTc4NDdFLTQ1LDYuNTYwOTUwNTQwNDY4MjY5RS00NSw5LjAwNTAzNTkzMzQ2MzI2NEUtMzEsNC45MzUzNDEwOTk2MTg3MzNFLTQ1LDIuODUwMDg0MDUzNzY3NzUxRS00NSw1Ljc0NzM4Mjc1NjI0Mjc2MzRFLTQ2LDguMTA3ODYzMzQ0NjY5ODY1RS00NSw1LjUzMDk2NTc4NTcyMjAzNUUtNDUsNy4zODE2NzQ5MjU5NjU2NThFLTQ1LDAuMCwwLjAsMC4wLDAuMCw1LjE3MTE4NjczOTAwMzU2OEUtNDUsNS41MTU4NDIxOTc2MDAwMzdFLTQ1LDAuMCwxLjE1MzkwODgyNTg4NTkyOUUtNDQsMi4zNjUzMzA0NTIyNDY2ODhFLTQ1LDkuNjc3MTIyMzk4ODg0Mzg0RS00NSwwLjAsMC4wLDEuMjY5NTY2MzgwMzI1MDdFLTQ0LDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDEuMjY3ODE3OTg4NjQ4MzM3M0UtMzAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDUuODg2ODk4MTQ0OTAyMDY4RS00MCwyLjg0MTg5MzU2MzEyNjgxNkUtNDMsMS41NzgwNTI3NDg1NTc2NTczRS00NSwzLjI3NjE3OTAzOTk1MTA4NUUtNDUsMS4xNTQ5NDUzMzMyNDQ1MzE4RS00NSwyLjE3ODIzMDAyNjM4MzkyNUUtNDUsNy4zMDgwNTgxNDUwOTI3NTFFLTQ2LDMuODg2Nzk5OTY5NjA1MTQ0NkUtMjgKKzMyLEZyaSAyNSBGZWIgMTEsMy4xMjU2MTg4NzIwMDk5NjM1RS00NSwyLjkwOTY0NjQ3Mjg5Mzc4M0UtNDUsMy4wNTE2MTUwODY0NjkzNzk0RS00NSwxLjE4MTI2MjY5MzUyNTEyNTZFLTQ0LDEuMTM1MDU0MTk4MzM3NDgxNkUtNDQsNi42OTk1MzE0MDc2MDYwMzJFLTQ1LDEuMTY0NzQ4NTQ1MTk2MTE5RS00NCwwLjAsNi44OTc2NTE3Mjg1MTMwM0UtNDEsMy41Nzc3Mzg2ODQ0Njc0MjZFLTQ0LDcuMTk4MzI3NDkzNDQ2ODc2RS00MywxLjgyMjQ5NTgyMTQ1MzAwMDJFLTQ0LDQuMDI5Njg4NzYyOTI0NzA5RS0zMywxLjg4ODk0Mjk1ODU2OTU1N0UtNDQsMi4wMjc3NjEyMTM3NDI5MDE0RS00NCw4Ljk4OTc0ODc2NzA0ODQyRS00NSwxLjExODI0NTA5NTc3NjE0MzRFLTQ0LDEuMDg2MjM2MjY0NDEwOTAzOEUtNDQsMS4yNjczMzE3Mzk1NDI3MDE3RS00NCwxLjIwODU1ODY3NDA5OTQwNThFLTQ0LDUuOTk1OTg1OTY4NDgyOTNFLTQ1LDAuMCw2LjgyNzM3Nzg4NzQ4OTk0NUUtNDUsNC4yNjM1MDUwMjg0MDk2ODFFLTQ1LDguNzg0Nzk3NTUyNTUxNzIzRS00NiwzLjUxOTMxNjM4MjgwMzQzNUUtNDYsMS42NjMzODQ2NzUyODM1NzlFLTQ1LDYuNDA1OTg3Njk4MDQ2ODM5RS00NSw0LjQ4OTU3MDY1MjcwNjU0NEUtNDUsNi4yNzA1MzYxNDE2NDUwNjk1RS0zMSwzLjM2ODM4MzEyODYyNzI2MUUtNDUsMS45NDMzMjYyNTgwMDY5NDc0RS00NSwzLjkzODA1MjY3NjQwMzExMUUtNDYsNS41NDI3OTM5OTE5MjU2ODc2RS00NSwzLjc5ODgyNjE5OTkwMDIzMUUtNDUsNS4wNjkxMDgxMDU4ODg0NDVFLTQ1LDAuMCwwLjAsMC4wLDAuMCwzLjU0ODY2MDQzNjA1MTY1RS00NSwzLjc4NzUxMTIyMzYxNTY4MUUtNDUsMC4wLDcuNjk2ODI3NzI2NDkzODU0RS00NSwxLjYxMDA2OTUzNzk4MjY1MkUtNDUsNi41Njk1Nzc0NTEyNzQyNDRFLTQ1LDAuMCwwLjAsOC4yNjA4MDU0MDAxMTU5NDRFLTQ1LDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDkuNDk4MTc0MzY1MDkzMDI4RS0zMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMy4zNzc5NzY4MTI3MzE2ODhFLTQwLDEuNzY3MjE3NDQzNzg1OTA3RS00MywxLjA2MTk2NzA2NzYzNjMxNTlFLTQ1LDIuMjIzOTkyMzgyMjE4MjIzM0UtNDUsNy44NjI5NDcyMTM3MTI0NTRFLTQ2LDEuNDY3NjQ2NzYzMDYzNjkyNEUtNDUsNC45NDkyMTIyODY3NTAyMzk2RS00NiwyLjY3MTQ1NDU4Njg5MjQ2RS0yOApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTRUlSX1JLX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9Qb3B1bGF0aW9uIENvdW50XzAuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTRUlSX1JLX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9Qb3B1bGF0aW9uIENvdW50XzAuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA2ZjhjZDEKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNFSVJfUktfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL1BvcHVsYXRpb24gQ291bnRfMC5jc3YKQEAgLTAsMCArMSwzMyBAQAoraXRlcmF0aW9uLHRpbWUsc3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vbm9kZS90cmFuc3BvcnQvcGlwZS9QSEwKKzEsVHVlIDI1IEphbiAxMSw0NzkzMi41NDc5NDUyMDU0ODYKKzIsV2VkIDI2IEphbiAxMSw0NzkzMi41NDc5NDUyMDU0OAorMyxUaHUgMjcgSmFuIDExLDQ3OTMyLjU0Nzk0NTIwNTQ2NAorNCxGcmkgMjggSmFuIDExLDQ3OTMyLjU0Nzk0NTIwNTQ2NAorNSxTYXQgMjkgSmFuIDExLDQ3OTMyLjU0Nzk0NTIwNTQ2NAorNixTdW4gMzAgSmFuIDExLDQ3OTMyLjU0Nzk0NTIwNTQ2Cis3LE1vbiAzMSBKYW4gMTEsNDc5MzIuNTQ3OTQ1MjA1NDQKKzgsVHVlIDEgRmViIDExLDQ3OTMyLjU0Nzk0NTIwNTQzNQorOSxXZWQgMiBGZWIgMTEsNDc5MzIuNTQ3OTQ1MjA1NDM1CisxMCxUaHUgMyBGZWIgMTEsNDc5MzIuNTQ3OTQ1MjA1NDQKKzExLEZyaSA0IEZlYiAxMSw0NzkzMi41NDc5NDUyMDU0NQorMTIsU2F0IDUgRmViIDExLDQ3OTMyLjU0Nzk0NTIwNTQ2CisxMyxTdW4gNiBGZWIgMTEsNDc5MzIuNTQ3OTQ1MjA1NDYKKzE0LE1vbiA3IEZlYiAxMSw0NzkzMi41NDc5NDUyMDU0NgorMTUsVHVlIDggRmViIDExLDQ3OTMyLjU0Nzk0NTIwNTQ2CisxNixXZWQgOSBGZWIgMTEsNDc5MzIuNTQ3OTQ1MjA1NDYKKzE3LFRodSAxMCBGZWIgMTEsNDc5MzIuNTQ3OTQ1MjA1NDUKKzE4LEZyaSAxMSBGZWIgMTEsNDc5MzIuNTQ3OTQ1MjA1NDYKKzE5LFNhdCAxMiBGZWIgMTEsNDc5MzIuNTQ3OTQ1MjA1NDY0CisyMCxTdW4gMTMgRmViIDExLDQ3OTMyLjU0Nzk0NTIwNTQ2CisyMSxNb24gMTQgRmViIDExLDQ3OTMyLjU0Nzk0NTIwNTQ2CisyMixUdWUgMTUgRmViIDExLDQ3OTMyLjU0Nzk0NTIwNTQ2CisyMyxXZWQgMTYgRmViIDExLDQ3OTMyLjU0Nzk0NTIwNTQ1CisyNCxUaHUgMTcgRmViIDExLDQ3OTMyLjU0Nzk0NTIwNTQ1CisyNSxGcmkgMTggRmViIDExLDQ3OTMyLjU0Nzk0NTIwNTQ1CisyNixTYXQgMTkgRmViIDExLDQ3OTMyLjU0Nzk0NTIwNTQ1CisyNyxTdW4gMjAgRmViIDExLDQ3OTMyLjU0Nzk0NTIwNTQ1CisyOCxNb24gMjEgRmViIDExLDQ3OTMyLjU0Nzk0NTIwNTQ0CisyOSxUdWUgMjIgRmViIDExLDQ3OTMyLjU0Nzk0NTIwNTQ1CiszMCxXZWQgMjMgRmViIDExLDQ3OTMyLjU0Nzk0NTIwNTQ0CiszMSxUaHUgMjQgRmViIDExLDQ3OTMyLjU0Nzk0NTIwNTQ0CiszMixGcmkgMjUgRmViIDExLDQ3OTMyLjU0Nzk0NTIwNTQ0CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNFSVJfUktfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL1BvcHVsYXRpb24gQ291bnRfMS5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNFSVJfUktfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL1BvcHVsYXRpb24gQ291bnRfMS5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGJkNGNhZgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0VJUl9SS19SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vUG9wdWxhdGlvbiBDb3VudF8xLmNzdgpAQCAtMCwwICsxLDMzIEBACitpdGVyYXRpb24sdGltZSxzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9ub2RlL3RyYW5zcG9ydC9waXBlL1BILTExLHN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL25vZGUvdHJhbnNwb3J0L3BpcGUvUEgtMyxzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9ub2RlL3RyYW5zcG9ydC9waXBlL1BILTcsc3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vbm9kZS90cmFuc3BvcnQvcGlwZS9QSC1OQ1IKKzEsVHVlIDI1IEphbiAxMSwyOC45OTQ1MjA1NDc5NDUyMDcsMTQxMi45NDI0NjU3NTM0MjQ2LDczNTcuODQzODM1NjE2NDM5LDQwODUzLjgyMTkxNzgwODIyCisyLFdlZCAyNiBKYW4gMTEsMjguOTk0NTIwNTQ3OTQ1MjA3LDE0MTIuOTQyNDY1NzUzNDI0Niw3MzU3Ljg0MzgzNTYxNjQ0LDQwODUzLjgyMTkxNzgwODIxCiszLFRodSAyNyBKYW4gMTEsMjguOTk0NTIwNTQ3OTQ1MjA3LDE0MTIuOTQyNDY1NzUzNDI0OCw3MzU3Ljg0MzgzNTYxNjQ0LDQwODUzLjgyMTkxNzgwODIxCis0LEZyaSAyOCBKYW4gMTEsMjguOTk0NTIwNTQ3OTQ1MjE0LDE0MTIuOTQyNDY1NzUzNDI0Niw3MzU3Ljg0MzgzNTYxNjQ0LDQwODUzLjgyMTkxNzgwODIxNAorNSxTYXQgMjkgSmFuIDExLDI4Ljk5NDUyMDU0Nzk0NTIxNCwxNDEyLjk0MjQ2NTc1MzQyNSw3MzU3Ljg0MzgzNTYxNjQzOCw0MDg1My44MjE5MTc4MDgyMQorNixTdW4gMzAgSmFuIDExLDI4Ljk5NDUyMDU0Nzk0NTIxLDE0MTIuOTQyNDY1NzUzNDI0OCw3MzU3Ljg0MzgzNTYxNjQ0MSw0MDg1My44MjE5MTc4MDgyMQorNyxNb24gMzEgSmFuIDExLDI4Ljk5NDUyMDU0Nzk0NTIyLDE0MTIuOTQyNDY1NzUzNDI0OCw3MzU3Ljg0MzgzNTYxNjQzOSw0MDg1My44MjE5MTc4MDgyMgorOCxUdWUgMSBGZWIgMTEsMjguOTk0NTIwNTQ3OTQ1MjMsMTQxMi45NDI0NjU3NTM0MjUsNzM1Ny44NDM4MzU2MTY0NDEsNDA4NTMuODIxOTE3ODA4MjIKKzksV2VkIDIgRmViIDExLDI4Ljk5NDUyMDU0Nzk0NTIzNSwxNDEyLjk0MjQ2NTc1MzQyNTMsNzM1Ny44NDM4MzU2MTY0NDIsNDA4NTMuODIxOTE3ODA4MjIKKzEwLFRodSAzIEZlYiAxMSwyOC45OTQ1MjA1NDc5NDUyNDMsMTQxMi45NDI0NjU3NTM0MjU1LDczNTcuODQzODM1NjE2NDQxLDQwODUzLjgyMTkxNzgwODIyCisxMSxGcmkgNCBGZWIgMTEsMjguOTk0NTIwNTQ3OTQ1MjUsMTQxMi45NDI0NjU3NTM0MjU1LDczNTcuODQzODM1NjE2NDQsNDA4NTMuODIxOTE3ODA4MjEKKzEyLFNhdCA1IEZlYiAxMSwyOC45OTQ1MjA1NDc5NDUyNDYsMTQxMi45NDI0NjU3NTM0MjU1LDczNTcuODQzODM1NjE2NDQxLDQwODUzLjgyMTkxNzgwODIxCisxMyxTdW4gNiBGZWIgMTEsMjguOTk0NTIwNTQ3OTQ1MjUsMTQxMi45NDI0NjU3NTM0MjU3LDczNTcuODQzODM1NjE2NDQxNSw0MDg1My44MjE5MTc4MDgxOQorMTQsTW9uIDcgRmViIDExLDI4Ljk5NDUyMDU0Nzk0NTI1NywxNDEyLjk0MjQ2NTc1MzQyNTMsNzM1Ny44NDM4MzU2MTY0NDIsNDA4NTMuODIxOTE3ODA4MjEKKzE1LFR1ZSA4IEZlYiAxMSwyOC45OTQ1MjA1NDc5NDUyNTcsMTQxMi45NDI0NjU3NTM0MjU1LDczNTcuODQzODM1NjE2NDQ1LDQwODUzLjgyMTkxNzgwODIxCisxNixXZWQgOSBGZWIgMTEsMjguOTk0NTIwNTQ3OTQ1MjYsMTQxMi45NDI0NjU3NTM0MjU1LDczNTcuODQzODM1NjE2NDQ2LDQwODUzLjgyMTkxNzgwODIyCisxNyxUaHUgMTAgRmViIDExLDI4Ljk5NDUyMDU0Nzk0NTI1NywxNDEyLjk0MjQ2NTc1MzQyNTcsNzM1Ny44NDM4MzU2MTY0NDUsNDA4NTMuODIxOTE3ODA4MjE0CisxOCxGcmkgMTEgRmViIDExLDI4Ljk5NDUyMDU0Nzk0NTI1NywxNDEyLjk0MjQ2NTc1MzQyNTcsNzM1Ny44NDM4MzU2MTY0NDQsNDA4NTMuODIxOTE3ODA4MjE0CisxOSxTYXQgMTIgRmViIDExLDI4Ljk5NDUyMDU0Nzk0NTI2LDE0MTIuOTQyNDY1NzUzNDI2LDczNTcuODQzODM1NjE2NDQ1LDQwODUzLjgyMTkxNzgwODIxCisyMCxTdW4gMTMgRmViIDExLDI4Ljk5NDUyMDU0Nzk0NTI2LDE0MTIuOTQyNDY1NzUzNDI2LDczNTcuODQzODM1NjE2NDQ2LDQwODUzLjgyMTkxNzgwODIKKzIxLE1vbiAxNCBGZWIgMTEsMjguOTk0NTIwNTQ3OTQ1MjYsMTQxMi45NDI0NjU3NTM0MjYsNzM1Ny44NDM4MzU2MTY0NDcsNDA4NTMuODIxOTE3ODA4MgorMjIsVHVlIDE1IEZlYiAxMSwyOC45OTQ1MjA1NDc5NDUyNiwxNDEyLjk0MjQ2NTc1MzQyNjIsNzM1Ny44NDM4MzU2MTY0NDYsNDA4NTMuODIxOTE3ODA4MjEKKzIzLFdlZCAxNiBGZWIgMTEsMjguOTk0NTIwNTQ3OTQ1MjYsMTQxMi45NDI0NjU3NTM0MjYyLDczNTcuODQzODM1NjE2NDQ2LDQwODUzLjgyMTkxNzgwODIxCisyNCxUaHUgMTcgRmViIDExLDI4Ljk5NDUyMDU0Nzk0NTI2LDE0MTIuOTQyNDY1NzUzNDI2NCw3MzU3Ljg0MzgzNTYxNjQ0Niw0MDg1My44MjE5MTc4MDgyCisyNSxGcmkgMTggRmViIDExLDI4Ljk5NDUyMDU0Nzk0NTI2NywxNDEyLjk0MjQ2NTc1MzQyNjQsNzM1Ny44NDM4MzU2MTY0NDgsNDA4NTMuODIxOTE3ODA4MjEKKzI2LFNhdCAxOSBGZWIgMTEsMjguOTk0NTIwNTQ3OTQ1MjcsMTQxMi45NDI0NjU3NTM0MjY2LDczNTcuODQzODM1NjE2NDQ5LDQwODUzLjgyMTkxNzgwODIxCisyNyxTdW4gMjAgRmViIDExLDI4Ljk5NDUyMDU0Nzk0NTI3OCwxNDEyLjk0MjQ2NTc1MzQyNjYsNzM1Ny44NDM4MzU2MTY0NSw0MDg1My44MjE5MTc4MDgyMTQKKzI4LE1vbiAyMSBGZWIgMTEsMjguOTk0NTIwNTQ3OTQ1Mjc4LDE0MTIuOTQyNDY1NzUzNDI2Niw3MzU3Ljg0MzgzNTYxNjQ1LDQwODUzLjgyMTkxNzgwODIxNAorMjksVHVlIDIyIEZlYiAxMSwyOC45OTQ1MjA1NDc5NDUyOCwxNDEyLjk0MjQ2NTc1MzQyNjksNzM1Ny44NDM4MzU2MTY0NTE1LDQwODUzLjgyMTkxNzgwODIxNAorMzAsV2VkIDIzIEZlYiAxMSwyOC45OTQ1MjA1NDc5NDUyOCwxNDEyLjk0MjQ2NTc1MzQyNjksNzM1Ny44NDM4MzU2MTY0NTEsNDA4NTMuODIxOTE3ODA4MjE0CiszMSxUaHUgMjQgRmViIDExLDI4Ljk5NDUyMDU0Nzk0NTI4NSwxNDEyLjk0MjQ2NTc1MzQyNjksNzM1Ny44NDM4MzU2MTY0NTE1LDQwODUzLjgyMTkxNzgwODIxCiszMixGcmkgMjUgRmViIDExLDI4Ljk5NDUyMDU0Nzk0NTI4NSwxNDEyLjk0MjQ2NTc1MzQyNjYsNzM1Ny44NDM4MzU2MTY0NTIsNDA4NTMuODIxOTE3ODA4MjEKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0VJUl9SS19SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vUG9wdWxhdGlvbiBDb3VudF8yLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0VJUl9SS19SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vUG9wdWxhdGlvbiBDb3VudF8yLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYmY3ZWYxCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTRUlSX1JLX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9Qb3B1bGF0aW9uIENvdW50XzIuY3N2CkBAIC0wLDAgKzEsMzMgQEAKK2l0ZXJhdGlvbix0aW1lLFBILTEtRzY0MDAwMSxQSC0xLUc2NDAwMDIsUEgtMS1HNjQwMDAzLFBILTEtRzY0MDAwNCxQSC0xMC1HNjUwMDAxLFBILTEwLUc2NTAwMDIsUEgtMTAtRzY1MDAwMyxQSC0xMC1HNjUwMDA0LFBILTEwLUc2NTAwMDUsUEgtMTAtRzY1MDAwNixQSC0xMC1HNjUwMDA3LFBILTExLUc2NjAwMDEsUEgtMTEtRzY2MDAwMixQSC0xMS1HNjYwMDAzLFBILTExLUc2NjAwMDQsUEgtMTEtRzY2MDAwNSxQSC0xMi1HNjcwMDAxLFBILTEyLUc2NzAwMDIsUEgtMTItRzY3MDAwMyxQSC0xMi1HNjcwMDA0LFBILTEyLUc2NzAwMDUsUEgtMi1HNjgwMDAxLFBILTItRzY4MDAwMixQSC0yLUc2ODAwMDMsUEgtMi1HNjgwMDA0LFBILTItRzY4MDAwNSxQSC0zLUc2OTAwMDEsUEgtMy1HNjkwMDAyLFBILTMtRzY5MDAwMyxQSC0zLUc2OTAwMDQsUEgtMy1HNjkwMDA1LFBILTMtRzY5MDAwNixQSC00LUc3MDAwMDEsUEgtNC1HNzAwMDAyLFBILTQtRzcwMDAwMyxQSC00LUc3MDAwMDQsUEgtNC1HNzAwMDA1LFBILTQtRzcwMDAwNixQSC00LUc3MDAwMDcsUEgtNC1HNzAwMDA4LFBILTQtRzcwMDAwOSxQSC00LUc3MDAwMTAsUEgtNC1HNzAwMDExLFBILTUtRzcxMDAwMSxQSC01LUc3MTAwMDIsUEgtNS1HNzEwMDAzLFBILTUtRzcxMDAwNCxQSC01LUc3MTAwMDUsUEgtNS1HNzEwMDA2LFBILTYtRzcyMDAwMSxQSC02LUc3MjAwMDIsUEgtNi1HNzIwMDAzLFBILTYtRzcyMDAwNCxQSC02LUc3MjAwMDUsUEgtNy1HNzMwMDAxLFBILTctRzczMDAwMixQSC03LUc3MzAwMDMsUEgtNy1HNzMwMDA0LFBILTgtRzc0MDAwMSxQSC04LUc3NDAwMDIsUEgtOC1HNzQwMDAzLFBILTgtRzc0MDAwNCxQSC04LUc3NDAwMDUsUEgtOS1HNzUwMDAxLFBILTktRzc1MDAwMixQSC05LUc3NTAwMDMsUEgtOS1HNzUwMDA0LFBILTktRzc1MDAwNSxQSC1DQVItRzIzMDAwMSxQSC1DQVItRzIzMDAwMixQSC1DQVItRzIzMDAwMyxQSC1DQVItRzIzMDAwNCxQSC1DQVItRzIzMDAwNSxQSC1OQ1ItRzUyMDAwMQorMSxUdWUgMjUgSmFuIDExLDYwOTQ4MC4wLDcyMzc1My4wLDc2Nzc1Ni4wLDI3NTk1ODEuMCw2MDQ0ODMuMCw2Mzc4NTMuMCwxMjg4NzA2LjAsODM5ODQuMCw1MzU3NzAuMCwxMjUzOTcwLjAsNTMxNjQ4LjAsMTY4MjI1OC4wLDIxOTg5MjguMCw1MTE0NzQuMCwxNzk4MDY3LjAsNTQ4ODk4LjAsODI5OTE3LjAsOTMzNzA5LjAsMTE3MjI4OC4wLDEyMTQ1MzQuMCw2MjY2NDguMCw5NjYyLjAsMTIyMzAxNC4wLDE1MTAzOTEuMCwzNjY5NDkuMCwxNTcwNDAuMCw2MDYyMjkuMCwzNzM4NDQ4LjAsMjAxMjg1MS4wLDIyODU0NTEuMCwxMjgxOTgyLjAsNzA5NjExLjAsMjAyMTgzLjAsMjI4Njk2Ny4wLDIyMzY4NDYuMCwyOTQyNDc3LjAsMjQzNzg2LjAsNDQzOTc0LjAsNzk1MTM3LjAsODQ1NDc0LjAsMTk1Mjg3NC4wLDIxMDEwNjEuMCwyNzI4OTUuMCwxMjIxNjEwLjAsNTE5MTA1LjAsMTg2NjAwMS4wLDI0MzQ2MC4wLDgwNDg3NC4wLDc2MDQyMC4wLDQ5NzUwNi4wLDU2MTMyNi4wLDc3NjYwMC4wLDI0NjU5MjUuMCwzMDAyOTc0LjAsMTI5MzQ2NS4wLDM4ODIyMDkuMCwxMzM3Mzg2LjAsODk2NTAuMCw0MTE5OTQuMCwxOTM5MDk2LjAsNTk4MDc2LjAsNDMyNDAzLjAsNzI5ODQ1LjAsMzQyODIyLjAsNjI4NzkzLjAsMjM5NjIzLjAsODY2MzczLjAsMjMyMTM3My4wLDI2MDUwNy4wLDY3NjAyNS4wLDI3MzM1MS4wLDM0MjAwNy4wLDE0MzI4OC4wLDEuMDQwMTU4M0U3CisyLFdlZCAyNiBKYW4gMTEsNjA5NDc5Ljk5OTk5OTk5OTksNzIzNzUzLjAsNzY3NzU2LjAsMjc1OTU4MS4wLDYwNDQ4My4wLDYzNzg1My4wLDEyODg3MDYuMCw4Mzk4NC4wLDUzNTc3MC4wLDEyNTM5NzAuMCw1MzE2NDguMCwxNjgyMjU4LjAsMjE5ODkyOC4wMDAwMDAwMDA1LDUxMTQ3NC4wLDE3OTgwNjcuMCw1NDg4OTguMCw4Mjk5MTcuMCw5MzM3MDkuMCwxMTcyMjg4LjAsMTIxNDUzNC4wLDYyNjY0OC4wMDAwMDAwMDAxLDk2NjIuMCwxMjIzMDEzLjk5OTk5OTk5OTgsMTUxMDM5MS4wMDAwMDAwMDA1LDM2Njk0OS4wMDAwMDAwMDAxLDE1NzAzOS45OTk5OTk5OTk5Nyw2MDYyMjkuMDAwMDAwMDAwMiwzNzM4NDQ3Ljk5OTk5OTk5OTUsMjAxMjg1MS4wLDIyODU0NTEuMDAwMDAwMDAwNSwxMjgxOTgxLjk5OTk5OTk5OTUsNzA5NjExLjAwMDAwMDAwMDEsMjAyMTgzLjAwMDAwMDAwMDAzLDIyODY5NjYuOTk5OTk5OTk5NSwyMjM2ODQ2LjAsMjk0MjQ3Ny4wMDAwMDAwMDEsMjQzNzg2LjAsNDQzOTc0LjAsNzk1MTM3LjAsODQ1NDc0LjAsMTk1Mjg3NC4wMDAwMDAwMDAyLDIxMDEwNjAuOTk5OTk5OTk5LDI3Mjg5NS4wLDEyMjE2MTAuMDAwMDAwMDAwMiw1MTkxMDUuMDAwMDAwMDAwMDYsMTg2NjAwMS4wLDI0MzQ2MC4wLDgwNDg3NC4wLDc2MDQyMC4wLDQ5NzUwNi4wLDU2MTMyNi4wLDc3NjYwMC4wLDI0NjU5MjUuMCwzMDAyOTc0LjAsMTI5MzQ2NS4wLDM4ODIyMDkuMDAwMDAwMDAwNSwxMzM3Mzg2LjAsODk2NTAuMCw0MTE5OTQuMCwxOTM5MDk2LjAsNTk4MDc2LjAsNDMyNDAzLjAsNzI5ODQ1LjAsMzQyODIyLjAsNjI4NzkzLjAsMjM5NjIzLjAsODY2MzczLjAsMjMyMTM3My4wLDI2MDUwNi45OTk5OTk5OTk5Nyw2NzYwMjQuOTk5OTk5OTk5OSwyNzMzNTEuMDAwMDAwMDAwMDYsMzQyMDA3LjAsMTQzMjg3Ljk5OTk5OTk5OTk3LDEuMDQwMTU4MzAwMDAwMDAwNkU3CiszLFRodSAyNyBKYW4gMTEsNjA5NDgwLjAsNzIzNzUzLjAsNzY3NzU2LjAsMjc1OTU4MS4wMDAwMDAwMDA1LDYwNDQ4My4wLDYzNzg1My4wMDAwMDAwMDAxLDEyODg3MDYuMCw4Mzk4NC4wLDUzNTc3MC4wLDEyNTM5NzAuMCw1MzE2NDguMCwxNjgyMjU4LjAwMDAwMDAwMDIsMjE5ODkyOC4wMDAwMDAwMDA1LDUxMTQ3NC4wLDE3OTgwNjcuMDAwMDAwMDAwMiw1NDg4OTguMCw4Mjk5MTcuMDAwMDAwMDAwMSw5MzM3MDkuMDAwMDAwMDAwMSwxMTcyMjg4LjAsMTIxNDUzNC4wMDAwMDAwMDA1LDYyNjY0OC4wLDk2NjIuMCwxMjIzMDEzLjk5OTk5OTk5OTUsMTUxMDM5MS4wMDAwMDAwMDA3LDM2Njk0OS4wMDAwMDAwMDAxLDE1NzAzOS45OTk5OTk5OTk5Nyw2MDYyMjkuMCwzNzM4NDQ3Ljk5OTk5OTk5ODYsMjAxMjg1MS4wLDIyODU0NTEuMDAwMDAwMDAwNSwxMjgxOTgxLjk5OTk5OTk5OTMsNzA5NjExLjAwMDAwMDAwMDEsMjAyMTgzLjAwMDAwMDAwMDAzLDIyODY5NjcuMDAwMDAwMDAxLDIyMzY4NDUuOTk5OTk5OTk5NSwyOTQyNDc3LjAwMDAwMDAwMTQsMjQzNzg2LjAsNDQzOTc0LjAsNzk1MTM3LjAsODQ1NDc0LjAsMTk1Mjg3NC4wMDAwMDAwMDA1LDIxMDEwNjEuMCwyNzI4OTUuMCwxMjIxNjEwLjAwMDAwMDAwMDIsNTE5MTA1LjAwMDAwMDAwMDIsMTg2NjAwMC45OTk5OTk5OTk1LDI0MzQ2MC4wLDgwNDg3NC4wLDc2MDQxOS45OTk5OTk5OTk5LDQ5NzUwNi4wLDU2MTMyNi4wLDc3NjYwMC4wLDI0NjU5MjUuMCwzMDAyOTc0LjAsMTI5MzQ2NS4wLDM4ODIyMDguOTk5OTk5OTk5NSwxMzM3Mzg2LjAsODk2NTAuMCw0MTE5OTQuMCwxOTM5MDk2LjAsNTk4MDc2LjAsNDMyNDAzLjAsNzI5ODQ1LjAsMzQyODIyLjAsNjI4NzkzLjAsMjM5NjIzLjAsODY2MzczLjAsMjMyMTM3My4wLDI2MDUwNi45OTk5OTk5OTk5NCw2NzYwMjUuMCwyNzMzNTEuMDAwMDAwMDAwMSwzNDIwMDcuMDAwMDAwMDAwMSwxNDMyODcuOTk5OTk5OTk5OTcsMS4wNDAxNTgzMDAwMDAwMDA2RTcKKzQsRnJpIDI4IEphbiAxMSw2MDk0NzkuOTk5OTk5OTk5OCw3MjM3NTMuMCw3Njc3NTYuMDAwMDAwMDAwMSwyNzU5NTgxLjAwMDAwMDAwMDUsNjA0NDgzLjAwMDAwMDAwMDEsNjM3ODUzLjAwMDAwMDAwMDIsMTI4ODcwNi4wMDAwMDAwMDA1LDgzOTg0LjAsNTM1NzcwLjAsMTI1Mzk3MC4wMDAwMDAwMDAyLDUzMTY0OC4wLDE2ODIyNTguMDAwMDAwMDAwMiwyMTk4OTI4LjAsNTExNDc0LjAsMTc5ODA2Ny4wMDAwMDAwMDAyLDU0ODg5OC4wMDAwMDAwMDAzLDgyOTkxNy4wMDAwMDAwMDAxLDkzMzcwOS4wLDExNzIyODcuOTk5OTk5OTk5NSwxMjE0NTM0LjAwMDAwMDAwMDUsNjI2NjQ3Ljk5OTk5OTk5OTksOTY2Mi4wLDEyMjMwMTQuMCwxNTEwMzkxLjAwMDAwMDAwMDUsMzY2OTQ5LjAwMDAwMDAwMDEsMTU3MDM5Ljk5OTk5OTk5OTksNjA2MjI5LjAsMzczODQ0Ny45OTk5OTk5OTg2LDIwMTI4NTEuMCwyMjg1NDUxLjAwMDAwMDAwMSwxMjgxOTgxLjk5OTk5OTk5OTMsNzA5NjExLjAwMDAwMDAwMDEsMjAyMTgzLjAwMDAwMDAwMDA2LDIyODY5NjcuMCwyMjM2ODQ2LjAsMjk0MjQ3Ny4wMDAwMDAwMDIsMjQzNzg2LjAsNDQzOTc0LjAsNzk1MTM3LjAsODQ1NDc0LjAsMTk1Mjg3NC4wMDAwMDAwMDA1LDIxMDEwNjAuOTk5OTk5OTk5NSwyNzI4OTUuMCwxMjIxNjEwLjAwMDAwMDAwMDUsNTE5MTA1LjAwMDAwMDAwMDIsMTg2NjAwMS4wLDI0MzQ2MC4wLDgwNDg3NC4wLDc2MDQyMC4wMDAwMDAwMDAxLDQ5NzUwNi4wLDU2MTMyNi4wLDc3NjYwMC4wLDI0NjU5MjUuMCwzMDAyOTc0LjAsMTI5MzQ2NS4wLDM4ODIyMDguOTk5OTk5OTk5NSwxMzM3Mzg2LjAsODk2NTAuMCw0MTE5OTQuMCwxOTM5MDk2LjAsNTk4MDc2LjAsNDMyNDAzLjAsNzI5ODQ1LjAsMzQyODIyLjAsNjI4NzkzLjAsMjM5NjIzLjAsODY2MzczLjAsMjMyMTM3My4wLDI2MDUwNi45OTk5OTk5OTk5Nyw2NzYwMjUuMCwyNzMzNTEuMCwzNDIwMDcuMDAwMDAwMDAwMSwxNDMyODcuOTk5OTk5OTk5OTcsMS4wNDAxNTgzMDAwMDAwMDA2RTcKKzUsU2F0IDI5IEphbiAxMSw2MDk0NzkuOTk5OTk5OTk5NSw3MjM3NTIuOTk5OTk5OTk5Nyw3Njc3NTYuMDAwMDAwMDAwMSwyNzU5NTgxLjAsNjA0NDgzLjAwMDAwMDAwMDIsNjM3ODUzLjAwMDAwMDAwMDEsMTI4ODcwNi4wMDAwMDAwMDA1LDgzOTg0LjAsNTM1NzcwLjAwMDAwMDAwMDEsMTI1Mzk3MC4wLDUzMTY0OC4wLDE2ODIyNTguMCwyMTk4OTI4LjAwMDAwMDAwMDUsNTExNDc0LjAsMTc5ODA2Ni45OTk5OTk5OTk4LDU0ODg5OC4wMDAwMDAwMDAyLDgyOTkxNi45OTk5OTk5OTk5LDkzMzcwOS4wLDExNzIyODcuOTk5OTk5OTk5OCwxMjE0NTM0LjAsNjI2NjQ4LjAsOTY2Mi4wLDEyMjMwMTQuMCwxNTEwMzkxLjAwMDAwMDAwMDUsMzY2OTQ5LjAwMDAwMDAwMDEsMTU3MDM5Ljk5OTk5OTk5OTksNjA2MjI5LjAsMzczODQ0Ny45OTk5OTk5OTksMjAxMjg1MS4wLDIyODU0NTEuMDAwMDAwMDAxNCwxMjgxOTgxLjk5OTk5OTk5OSw3MDk2MTEuMCwyMDIxODMuMDAwMDAwMDAwMDYsMjI4Njk2Ny4wMDAwMDAwMDA1LDIyMzY4NDYuMCwyOTQyNDc3LjAwMDAwMDAwMiwyNDM3ODYuMCw0NDM5NzQuMCw3OTUxMzcuMCw4NDU0NzQuMCwxOTUyODc0LjAwMDAwMDAwMDcsMjEwMTA2MC45OTk5OTk5OTk1LDI3Mjg5NS4wLDEyMjE2MTAuMCw1MTkxMDUuMDAwMDAwMDAwMSwxODY2MDAxLjAsMjQzNDYwLjAsODA0ODc0LjAsNzYwNDIwLjAwMDAwMDAwMDEsNDk3NTA2LjAsNTYxMzI2LjAsNzc2NjAwLjAsMjQ2NTkyNS4wLDMwMDI5NzQuMCwxMjkzNDY1LjAsMzg4MjIwOC45OTk5OTk5OTk1LDEzMzczODYuMCw4OTY1MC4wLDQxMTk5NC4wLDE5MzkwOTYuMCw1OTgwNzYuMCw0MzI0MDMuMCw3Mjk4NDUuMCwzNDI4MjIuMCw2Mjg3OTMuMCwyMzk2MjMuMCw4NjYzNzMuMDAwMDAwMDAwMSwyMzIxMzczLjAsMjYwNTA2Ljk5OTk5OTk5OTk0LDY3NjAyNS4wMDAwMDAwMDAxLDI3MzM1MC45OTk5OTk5OTk5LDM0MjAwNy4wMDAwMDAwMDAxLDE0MzI4Ny45OTk5OTk5OTk5NywxLjA0MDE1ODMwMDAwMDAwMDdFNworNixTdW4gMzAgSmFuIDExLDYwOTQ3OS45OTk5OTk5OTk1LDcyMzc1Mi45OTk5OTk5OTk3LDc2Nzc1NS45OTk5OTk5OTk4LDI3NTk1ODEuMCw2MDQ0ODIuOTk5OTk5OTk5OSw2Mzc4NTIuOTk5OTk5OTk5OSwxMjg4NzA2LjAwMDAwMDAwMDcsODM5ODQuMCw1MzU3NzAuMDAwMDAwMDAwMSwxMjUzOTcwLjAsNTMxNjQ3Ljk5OTk5OTk5OTksMTY4MjI1OC4wLDIxOTg5MjguMDAwMDAwMDAwNSw1MTE0NzQuMDAwMDAwMDAwMSwxNzk4MDY3LjAsNTQ4ODk4LjAwMDAwMDAwMDEsODI5OTE3LjAwMDAwMDAwMDEsOTMzNzA4Ljk5OTk5OTk5OTksMTE3MjI4Ny45OTk5OTk5OTk1LDEyMTQ1MzQuMCw2MjY2NDcuOTk5OTk5OTk5OCw5NjYyLjAsMTIyMzAxMy45OTk5OTk5OTk4LDE1MTAzOTEuMDAwMDAwMDAwNSwzNjY5NDkuMDAwMDAwMDAwMSwxNTcwMzkuOTk5OTk5OTk5OSw2MDYyMjkuMDAwMDAwMDAwMSwzNzM4NDQ3Ljk5OTk5OTk5ODYsMjAxMjg1MS4wMDAwMDAwMDA1LDIyODU0NTEuMDAwMDAwMDAxLDEyODE5ODEuOTk5OTk5OTk5LDcwOTYxMC45OTk5OTk5OTk4LDIwMjE4My4wMDAwMDAwMDAwMywyMjg2OTY3LjAwMDAwMDAwMTQsMjIzNjg0Ni4wLDI5NDI0NzcuMDAwMDAwMDAyLDI0Mzc4Ni4wLDQ0Mzk3NC4wLDc5NTEzNy4wLDg0NTQ3NC4wLDE5NTI4NzQuMDAwMDAwMDAwNSwyMTAxMDYwLjk5OTk5OTk5OSwyNzI4OTUuMCwxMjIxNjEwLjAwMDAwMDAwMDIsNTE5MTA1LjAwMDAwMDAwMDIsMTg2NjAwMS4wLDI0MzQ2MC4wLDgwNDg3NC4wLDc2MDQyMC4wMDAwMDAwMDAxLDQ5NzUwNi4wLDU2MTMyNi4wLDc3NjYwMC4wLDI0NjU5MjUuMCwzMDAyOTc0LjAsMTI5MzQ2NS4wLDM4ODIyMDkuMDAwMDAwMDAwNSwxMzM3Mzg2LjAsODk2NTAuMCw0MTE5OTQuMCwxOTM5MDk2LjAsNTk4MDc2LjAsNDMyNDAzLjAsNzI5ODQ1LjAsMzQyODIyLjAsNjI4NzkzLjAsMjM5NjIzLjAsODY2MzczLjAwMDAwMDAwMDEsMjMyMTM3Mi45OTk5OTk5OTk1LDI2MDUwNy4wLDY3NjAyNS4wLDI3MzM1MS4wLDM0MjAwNy4wMDAwMDAwMDAyLDE0MzI4Ny45OTk5OTk5OTk5NCwxLjA0MDE1ODMwMDAwMDAwMDdFNworNyxNb24gMzEgSmFuIDExLDYwOTQ3OS45OTk5OTk5OTk1LDcyMzc1Mi45OTk5OTk5OTk4LDc2Nzc1NS45OTk5OTk5OTk5LDI3NTk1ODAuOTk5OTk5OTk5LDYwNDQ4My4wMDAwMDAwMDAxLDYzNzg1My4wLDEyODg3MDYuMDAwMDAwMDAwMiw4Mzk4NC4wLDUzNTc3MC4wLDEyNTM5NjkuOTk5OTk5OTk5OCw1MzE2NDguMDAwMDAwMDAwMiwxNjgyMjU4LjAsMjE5ODkyOC4wMDAwMDAwMDA1LDUxMTQ3NC4wMDAwMDAwMDAyLDE3OTgwNjcuMCw1NDg4OTcuOTk5OTk5OTk5OSw4Mjk5MTcuMDAwMDAwMDAwMSw5MzM3MDguOTk5OTk5OTk5OCwxMTcyMjg3Ljk5OTk5OTk5OTgsMTIxNDUzNC4wMDAwMDAwMDAyLDYyNjY0Ny45OTk5OTk5OTk5LDk2NjIuMCwxMjIzMDEzLjk5OTk5OTk5OTUsMTUxMDM5MS4wMDAwMDAwMDA1LDM2Njk0OS4wMDAwMDAwMDAyLDE1NzAzOS45OTk5OTk5OTk4OCw2MDYyMjkuMDAwMDAwMDAwMSwzNzM4NDQ3Ljk5OTk5OTk5OCwyMDEyODUxLjAwMDAwMDAwMSwyMjg1NDUxLjAwMDAwMDAwMSwxMjgxOTgxLjk5OTk5OTk5OSw3MDk2MTEuMCwyMDIxODMuMDAwMDAwMDAwMDYsMjI4Njk2Ny4wMDAwMDAwMDE0LDIyMzY4NDYuMCwyOTQyNDc3LjAwMDAwMDAwMjMsMjQzNzg2LjAsNDQzOTc0LjAsNzk1MTM3LjAsODQ1NDc0LjAsMTk1Mjg3NC4wMDAwMDAwMDA1LDIxMDEwNjAuOTk5OTk5OTk5NSwyNzI4OTUuMCwxMjIxNjA5Ljk5OTk5OTk5OTgsNTE5MTA1LjAwMDAwMDAwMDEsMTg2NjAwMS4wMDAwMDAwMDA1LDI0MzQ2MC4wLDgwNDg3NC4wLDc2MDQxOS45OTk5OTk5OTk4LDQ5NzUwNi4wLDU2MTMyNi4wLDc3NjYwMC4wLDI0NjU5MjUuMCwzMDAyOTc0LjAsMTI5MzQ2NS4wLDM4ODIyMDkuMCwxMzM3Mzg2LjAsODk2NTAuMCw0MTE5OTQuMCwxOTM5MDk2LjAsNTk4MDc2LjAsNDMyNDAzLjAsNzI5ODQ1LjAsMzQyODIyLjAsNjI4NzkzLjAsMjM5NjIzLjAsODY2MzczLjAsMjMyMTM3Mi45OTk5OTk5OTk1LDI2MDUwNy4wMDAwMDAwMDAwMyw2NzYwMjUuMCwyNzMzNTAuOTk5OTk5OTk5OTQsMzQyMDA3LjAwMDAwMDAwMDEsMTQzMjg3Ljk5OTk5OTk5OTk3LDEuMDQwMTU4MzAwMDAwMDAwN0U3Cis4LFR1ZSAxIEZlYiAxMSw2MDk0NzkuOTk5OTk5OTk5NSw3MjM3NTMuMCw3Njc3NTUuOTk5OTk5OTk5OCwyNzU5NTgxLjAsNjA0NDgzLjAwMDAwMDAwMDMsNjM3ODUzLjAwMDAwMDAwMDIsMTI4ODcwNi4wMDAwMDAwMDA1LDgzOTg0LjAsNTM1NzcwLjAwMDAwMDAwMDIsMTI1Mzk3MC4wMDAwMDAwMDA1LDUzMTY0OC4wMDAwMDAwMDAxLDE2ODIyNTcuOTk5OTk5OTk5OCwyMTk4OTI4LjAsNTExNDc0LjAwMDAwMDAwMDIsMTc5ODA2Ny4wLDU0ODg5Ny45OTk5OTk5OTk5LDgyOTkxNy4wMDAwMDAwMDAyLDkzMzcwOC45OTk5OTk5OTk5LDExNzIyODcuOTk5OTk5OTk5OCwxMjE0NTM0LjAsNjI2NjQ4LjAwMDAwMDAwMDEsOTY2Mi4wLDEyMjMwMTMuOTk5OTk5OTk5MywxNTEwMzkxLjAwMDAwMDAwMDIsMzY2OTQ5LjAwMDAwMDAwMDIzLDE1NzAzOS45OTk5OTk5OTk5LDYwNjIyOS4wMDAwMDAwMDAxLDM3Mzg0NDcuOTk5OTk5OTk4LDIwMTI4NTEuMDAwMDAwMDAwNSwyMjg1NDUxLjAwMDAwMDAwMSwxMjgxOTgxLjk5OTk5OTk5OSw3MDk2MTEuMCwyMDIxODMuMDAwMDAwMDAwMSwyMjg2OTY3LjAwMDAwMDAwMiwyMjM2ODQ2LjAsMjk0MjQ3Ny4wMDAwMDAwMDIzLDI0Mzc4Ni4wLDQ0Mzk3NC4wLDc5NTEzNy4wLDg0NTQ3NC4wLDE5NTI4NzQuMDAwMDAwMDAwMiwyMTAxMDYwLjk5OTk5OTk5OTUsMjcyODk1LjAsMTIyMTYwOS45OTk5OTk5OTk4LDUxOTEwNS4wMDAwMDAwMDAxLDE4NjYwMDEuMDAwMDAwMDAxLDI0MzQ2MC4wLDgwNDg3NC4wLDc2MDQxOS45OTk5OTk5OTk5LDQ5NzUwNi4wLDU2MTMyNi4wLDc3NjYwMC4wLDI0NjU5MjUuMCwzMDAyOTc0LjAsMTI5MzQ2NS4wLDM4ODIyMDkuMCwxMzM3Mzg2LjAsODk2NTAuMCw0MTE5OTQuMCwxOTM5MDk2LjAsNTk4MDc2LjAsNDMyNDAzLjAsNzI5ODQ1LjAsMzQyODIyLjAsNjI4NzkzLjAsMjM5NjIzLjAsODY2MzczLjAwMDAwMDAwMDEsMjMyMTM3Mi45OTk5OTk5OTg2LDI2MDUwNy4wMDAwMDAwMDAwNiw2NzYwMjUuMCwyNzMzNTAuOTk5OTk5OTk5OTQsMzQyMDA3LjAwMDAwMDAwMDEsMTQzMjg3Ljk5OTk5OTk5OTk3LDEuMDQwMTU4MzAwMDAwMDAxRTcKKzksV2VkIDIgRmViIDExLDYwOTQ3OS45OTk5OTk5OTk1LDcyMzc1My4wLDc2Nzc1Ni4wLDI3NTk1ODEuMDAwMDAwMDAwNSw2MDQ0ODMuMDAwMDAwMDAwMyw2Mzc4NTMuMDAwMDAwMDAwMywxMjg4NzA2LjAwMDAwMDAwMSw4Mzk4NC4wLDUzNTc3MC4wMDAwMDAwMDA1LDEyNTM5NzAuMDAwMDAwMDAwNSw1MzE2NDguMDAwMDAwMDAwMSwxNjgyMjU3Ljk5OTk5OTk5OTMsMjE5ODkyOC4wLDUxMTQ3NC4wMDAwMDAwMDAyLDE3OTgwNjcuMCw1NDg4OTcuOTk5OTk5OTk5OCw4Mjk5MTcuMDAwMDAwMDAwMiw5MzM3MDkuMCwxMTcyMjg3Ljk5OTk5OTk5OTgsMTIxNDUzMy45OTk5OTk5OTk4LDYyNjY0OC4wMDAwMDAwMDAyLDk2NjIuMCwxMjIzMDEzLjk5OTk5OTk5OSwxNTEwMzkxLjAwMDAwMDAwMDUsMzY2OTQ5LjAwMDAwMDAwMDIzLDE1NzAzOS45OTk5OTk5OTk5LDYwNjIyOS4wMDAwMDAwMDAxLDM3Mzg0NDcuOTk5OTk5OTk4NiwyMDEyODUxLjAwMDAwMDAwMDUsMjI4NTQ1MS4wMDAwMDAwMDEsMTI4MTk4MS45OTk5OTk5OTksNzA5NjExLjAsMjAyMTgzLjAwMDAwMDAwMDA2LDIyODY5NjcuMDAwMDAwMDAxNCwyMjM2ODQ2LjAsMjk0MjQ3Ny4wMDAwMDAwMDIzLDI0Mzc4Ni4wLDQ0Mzk3NC4wLDc5NTEzNy4wLDg0NTQ3NC4wLDE5NTI4NzQuMDAwMDAwMDAwNywyMTAxMDYwLjk5OTk5OTk5OTUsMjcyODk1LjAsMTIyMTYxMC4wLDUxOTEwNS4wMDAwMDAwMDAwNiwxODY2MDAxLjAwMDAwMDAwMSwyNDM0NjAuMCw4MDQ4NzQuMCw3NjA0MjAuMCw0OTc1MDYuMCw1NjEzMjYuMCw3NzY2MDAuMCwyNDY1OTI1LjAsMzAwMjk3NC4wLDEyOTM0NjUuMCwzODgyMjA5LjAsMTMzNzM4Ni4wLDg5NjUwLjAsNDExOTk0LjAsMTkzOTA5Ni4wLDU5ODA3Ni4wLDQzMjQwMy4wLDcyOTg0NS4wLDM0MjgyMi4wLDYyODc5My4wLDIzOTYyMy4wLDg2NjM3My4wMDAwMDAwMDAzLDIzMjEzNzIuOTk5OTk5OTk4LDI2MDUwNy4wMDAwMDAwMDAxLDY3NjAyNS4wLDI3MzM1MC45OTk5OTk5OTk5NCwzNDIwMDcuMDAwMDAwMDAwMjMsMTQzMjg3Ljk5OTk5OTk5OTk0LDEuMDQwMTU4MzAwMDAwMDAxRTcKKzEwLFRodSAzIEZlYiAxMSw2MDk0NzkuOTk5OTk5OTk5NSw3MjM3NTMuMCw3Njc3NTYuMCwyNzU5NTgxLjAwMDAwMDAwMDUsNjA0NDgzLjAwMDAwMDAwMDIsNjM3ODUzLjAwMDAwMDAwMDIsMTI4ODcwNi4wMDAwMDAwMDEsODM5ODQuMCw1MzU3NzAuMDAwMDAwMDAwMywxMjUzOTcwLjAwMDAwMDAwMDUsNTMxNjQ4LjAsMTY4MjI1Ny45OTk5OTk5OTkzLDIxOTg5MjguMDAwMDAwMDAwNSw1MTE0NzQuMDAwMDAwMDAwMSwxNzk4MDY3LjAsNTQ4ODk3Ljk5OTk5OTk5OTgsODI5OTE3LjAwMDAwMDAwMDIsOTMzNzA5LjAwMDAwMDAwMDIsMTE3MjI4Ny45OTk5OTk5OTkzLDEyMTQ1MzQuMCw2MjY2NDguMDAwMDAwMDAwMiw5NjYyLjAsMTIyMzAxMy45OTk5OTk5OTksMTUxMDM5MS4wMDAwMDAwMDA1LDM2Njk0OS4wMDAwMDAwMDAyMywxNTcwMzkuOTk5OTk5OTk5OSw2MDYyMjkuMDAwMDAwMDAwMSwzNzM4NDQ3Ljk5OTk5OTk5OCwyMDEyODUxLjAwMDAwMDAwMDIsMjI4NTQ1MS4wMDAwMDAwMDEsMTI4MTk4MS45OTk5OTk5OTkzLDcwOTYxMS4wLDIwMjE4My4wMDAwMDAwMDAwNiwyMjg2OTY3LjAwMDAwMDAwMiwyMjM2ODQ2LjAwMDAwMDAwMDUsMjk0MjQ3Ny4wMDAwMDAwMDMzLDI0Mzc4Ni4wLDQ0Mzk3NC4wLDc5NTEzNy4wLDg0NTQ3NC4wLDE5NTI4NzQuMDAwMDAwMDAwNSwyMTAxMDYwLjk5OTk5OTk5OTUsMjcyODk1LjAsMTIyMTYxMC4wLDUxOTEwNS4wMDAwMDAwMDAxLDE4NjYwMDEuMDAwMDAwMDAwNywyNDM0NjAuMCw4MDQ4NzQuMCw3NjA0MjAuMDAwMDAwMDAwMiw0OTc1MDYuMCw1NjEzMjYuMCw3NzY2MDAuMCwyNDY1OTI1LjAsMzAwMjk3NC4wLDEyOTM0NjUuMCwzODgyMjA4Ljk5OTk5OTk5OTUsMTMzNzM4Ni4wLDg5NjUwLjAsNDExOTk0LjAsMTkzOTA5Ni4wLDU5ODA3Ni4wLDQzMjQwMy4wLDcyOTg0NS4wLDM0MjgyMi4wLDYyODc5My4wLDIzOTYyMy4wLDg2NjM3My4wMDAwMDAwMDA1LDIzMjEzNzIuOTk5OTk5OTk3NywyNjA1MDcuMDAwMDAwMDAwMTIsNjc2MDI1LjAsMjczMzUxLjAsMzQyMDA3LjAwMDAwMDAwMDIzLDE0MzI4Ny45OTk5OTk5OTk5NCwxLjA0MDE1ODMwMDAwMDAwMDdFNworMTEsRnJpIDQgRmViIDExLDYwOTQ3OS45OTk5OTk5OTk1LDcyMzc1My4wLDc2Nzc1Ni4wLDI3NTk1ODEuMDAwMDAwMDAxLDYwNDQ4My4wMDAwMDAwMDAyLDYzNzg1My4wMDAwMDAwMDAyLDEyODg3MDYuMDAwMDAwMDAwNyw4Mzk4NC4wLDUzNTc3MC4wMDAwMDAwMDAyLDEyNTM5NzAuMDAwMDAwMDAwNSw1MzE2NDguMCwxNjgyMjU3Ljk5OTk5OTk5OTUsMjE5ODkyOC4wMDAwMDAwMDA1LDUxMTQ3NC4wLDE3OTgwNjcuMCw1NDg4OTcuOTk5OTk5OTk5OCw4Mjk5MTcuMDAwMDAwMDAwMiw5MzM3MDkuMCwxMTcyMjg3Ljk5OTk5OTk5OTMsMTIxNDUzMy45OTk5OTk5OTk1LDYyNjY0OC4wMDAwMDAwMDAyLDk2NjIuMCwxMjIzMDEzLjk5OTk5OTk5OTMsMTUxMDM5MS4wMDAwMDAwMDA3LDM2Njk0OS4wMDAwMDAwMDAyMywxNTcwMzkuOTk5OTk5OTk5OTcsNjA2MjI5LjAsMzczODQ0Ny45OTk5OTk5OTgsMjAxMjg1MS4wMDAwMDAwMDAyLDIyODU0NTEuMDAwMDAwMDAwNSwxMjgxOTgxLjk5OTk5OTk5ODgsNzA5NjExLjAsMjAyMTgzLjAwMDAwMDAwMDEsMjI4Njk2Ny4wMDAwMDAwMDIzLDIyMzY4NDYuMDAwMDAwMDAwNSwyOTQyNDc3LjAwMDAwMDAwMywyNDM3ODYuMCw0NDM5NzQuMCw3OTUxMzcuMCw4NDU0NzQuMCwxOTUyODc0LjAwMDAwMDAwMDIsMjEwMTA2MC45OTk5OTk5OTk1LDI3Mjg5NS4wLDEyMjE2MDkuOTk5OTk5OTk5OCw1MTkxMDUuMDAwMDAwMDAwMSwxODY2MDAxLjAwMDAwMDAwMDUsMjQzNDYwLjAsODA0ODc0LjAsNzYwNDIwLjAwMDAwMDAwMDMsNDk3NTA2LjAsNTYxMzI2LjAsNzc2NjAwLjAsMjQ2NTkyNS4wLDMwMDI5NzQuMCwxMjkzNDY1LjAsMzg4MjIwOC45OTk5OTk5OTgsMTMzNzM4Ni4wLDg5NjUwLjAsNDExOTk0LjAsMTkzOTA5Ni4wLDU5ODA3Ni4wLDQzMjQwMy4wLDcyOTg0NS4wLDM0MjgyMi4wLDYyODc5My4wLDIzOTYyMy4wLDg2NjM3My4wMDAwMDAwMDA1LDIzMjEzNzIuOTk5OTk5OTk4LDI2MDUwNy4wMDAwMDAwMDAwNiw2NzYwMjUuMCwyNzMzNTEuMCwzNDIwMDcuMDAwMDAwMDAwMiwxNDMyODcuOTk5OTk5OTk5OTcsMS4wNDAxNTgzMDAwMDAwMDFFNworMTIsU2F0IDUgRmViIDExLDYwOTQ3OS45OTk5OTk5OTk1LDcyMzc1My4wMDAwMDAwMDAxLDc2Nzc1NS45OTk5OTk5OTk4LDI3NTk1ODEuMDAwMDAwMDAxLDYwNDQ4My4wMDAwMDAwMDAyLDYzNzg1My4wLDEyODg3MDYuMDAwMDAwMDAxLDgzOTg0LjAsNTM1NzcwLjAwMDAwMDAwMDMsMTI1Mzk3MC4wMDAwMDAwMDA1LDUzMTY0Ny45OTk5OTk5OTk5LDE2ODIyNTguMCwyMTk4OTI4LjAwMDAwMDAwMDUsNTExNDc0LjAwMDAwMDAwMDA2LDE3OTgwNjcuMCw1NDg4OTcuOTk5OTk5OTk5OSw4Mjk5MTcuMDAwMDAwMDAwMiw5MzM3MDguOTk5OTk5OTk5OCwxMTcyMjg3Ljk5OTk5OTk5OTMsMTIxNDUzMy45OTk5OTk5OTk4LDYyNjY0OC4wMDAwMDAwMDAyLDk2NjIuMCwxMjIzMDEzLjk5OTk5OTk5OTMsMTUxMDM5MS4wMDAwMDAwMDEsMzY2OTQ5LjAwMDAwMDAwMDIzLDE1NzAzOS45OTk5OTk5OTk5NCw2MDYyMjkuMDAwMDAwMDAwMSwzNzM4NDQ3Ljk5OTk5OTk5NzcsMjAxMjg1MS4wMDAwMDAwMDAyLDIyODU0NTEuMDAwMDAwMDAxNCwxMjgxOTgxLjk5OTk5OTk5ODYsNzA5NjEwLjk5OTk5OTk5OTgsMjAyMTgzLjAwMDAwMDAwMDA2LDIyODY5NjcuMDAwMDAwMDAyMywyMjM2ODQ2LjAwMDAwMDAwMDUsMjk0MjQ3Ny4wMDAwMDAwMDMzLDI0Mzc4Ni4wLDQ0Mzk3NC4wLDc5NTEzNy4wLDg0NTQ3NC4wLDE5NTI4NzMuOTk5OTk5OTk5OCwyMTAxMDYwLjk5OTk5OTk5OTUsMjcyODk1LjAsMTIyMTYxMC4wLDUxOTEwNS4wLDE4NjYwMDEuMDAwMDAwMDAxLDI0MzQ2MC4wLDgwNDg3NC4wLDc2MDQyMC4wMDAwMDAwMDAzLDQ5NzUwNi4wLDU2MTMyNi4wLDc3NjYwMC4wLDI0NjU5MjUuMCwzMDAyOTc0LjAsMTI5MzQ2NS4wLDM4ODIyMDguOTk5OTk5OTk3NywxMzM3Mzg2LjAsODk2NTAuMCw0MTE5OTQuMCwxOTM5MDk2LjAsNTk4MDc2LjAsNDMyNDAzLjAsNzI5ODQ1LjAsMzQyODIyLjAsNjI4NzkzLjAsMjM5NjIzLjAsODY2MzczLjAwMDAwMDAwMDcsMjMyMTM3Mi45OTk5OTk5OTc3LDI2MDUwNy4wMDAwMDAwMDAxMiw2NzYwMjUuMCwyNzMzNTAuOTk5OTk5OTk5OTQsMzQyMDA3LjAwMDAwMDAwMDIsMTQzMjg4LjAsMS4wNDAxNTgzMDAwMDAwMDFFNworMTMsU3VuIDYgRmViIDExLDYwOTQ3OS45OTk5OTk5OTk1LDcyMzc1Mi45OTk5OTk5OTk5LDc2Nzc1NS45OTk5OTk5OTk5LDI3NTk1ODEuMDAwMDAwMDAwNSw2MDQ0ODMuMDAwMDAwMDAwMSw2Mzc4NTMuMCwxMjg4NzA2LjAwMDAwMDAwMSw4Mzk4NC4wLDUzNTc3MC4wMDAwMDAwMDA1LDEyNTM5NzAuMDAwMDAwMDAwNSw1MzE2NDcuOTk5OTk5OTk5OCwxNjgyMjU4LjAsMjE5ODkyOC4wMDAwMDAwMDA1LDUxMTQ3NC4wLDE3OTgwNjYuOTk5OTk5OTk5OCw1NDg4OTcuOTk5OTk5OTk5OSw4Mjk5MTcuMDAwMDAwMDAwNSw5MzM3MDguOTk5OTk5OTk5OSwxMTcyMjg3Ljk5OTk5OTk5OSwxMjE0NTMzLjk5OTk5OTk5OTgsNjI2NjQ4LjAwMDAwMDAwMDIsOTY2Mi4wLDEyMjMwMTMuOTk5OTk5OTk4OCwxNTEwMzkxLjAwMDAwMDAwMDcsMzY2OTQ5LjAwMDAwMDAwMDIzLDE1NzAzOS45OTk5OTk5OTk5Nyw2MDYyMjkuMDAwMDAwMDAwMSwzNzM4NDQ3Ljk5OTk5OTk5NzcsMjAxMjg1MS4wLDIyODU0NTEuMDAwMDAwMDAxNCwxMjgxOTgxLjk5OTk5OTk5ODYsNzA5NjEwLjk5OTk5OTk5OTgsMjAyMTgzLjAwMDAwMDAwMDA2LDIyODY5NjcuMDAwMDAwMDAyLDIyMzY4NDYuMDAwMDAwMDAwNSwyOTQyNDc3LjAwMDAwMDAwMzcsMjQzNzg2LjAsNDQzOTc0LjAsNzk1MTM3LjAsODQ1NDc0LjAsMTk1Mjg3My45OTk5OTk5OTk4LDIxMDEwNjAuOTk5OTk5OTk5NSwyNzI4OTUuMCwxMjIxNjA5Ljk5OTk5OTk5OTgsNTE5MTA0Ljk5OTk5OTk5OTksMTg2NjAwMS4wMDAwMDAwMDA3LDI0MzQ2MC4wLDgwNDg3NC4wLDc2MDQyMC4wMDAwMDAwMDAyLDQ5NzUwNi4wLDU2MTMyNi4wLDc3NjYwMC4wLDI0NjU5MjUuMCwzMDAyOTc0LjAsMTI5MzQ2NS4wLDM4ODIyMDguOTk5OTk5OTk2MywxMzM3Mzg2LjAsODk2NTAuMCw0MTE5OTQuMCwxOTM5MDk2LjAsNTk4MDc2LjAsNDMyNDAzLjAsNzI5ODQ1LjAsMzQyODIyLjAsNjI4NzkzLjAsMjM5NjIzLjAsODY2MzczLjAwMDAwMDAwMDcsMjMyMTM3Mi45OTk5OTk5OTgsMjYwNTA3LjAwMDAwMDAwMDEsNjc2MDI1LjAsMjczMzUxLjAsMzQyMDA3LjAwMDAwMDAwMDEsMTQzMjg3Ljk5OTk5OTk5OTk0LDEuMDQwMTU4MzAwMDAwMDAxRTcKKzE0LE1vbiA3IEZlYiAxMSw2MDk0NzkuOTk5OTk5OTk5Nyw3MjM3NTIuOTk5OTk5OTk5OSw3Njc3NTUuOTk5OTk5OTk5OSwyNzU5NTgxLjAwMDAwMDAwMSw2MDQ0ODMuMDAwMDAwMDAwMSw2Mzc4NTIuOTk5OTk5OTk5OSwxMjg4NzA2LjAwMDAwMDAwMDcsODM5ODQuMCw1MzU3NzAuMDAwMDAwMDAwNSwxMjUzOTcwLjAwMDAwMDAwMDUsNTMxNjQ3Ljk5OTk5OTk5OTksMTY4MjI1OC4wLDIxOTg5MjguMDAwMDAwMDAxLDUxMTQ3NC4wMDAwMDAwMDAxLDE3OTgwNjcuMCw1NDg4OTcuOTk5OTk5OTk5OSw4Mjk5MTcuMDAwMDAwMDAwMyw5MzM3MDguOTk5OTk5OTk5OSwxMTcyMjg3Ljk5OTk5OTk5OSwxMjE0NTMzLjk5OTk5OTk5OTgsNjI2NjQ4LjAwMDAwMDAwMDIsOTY2Mi4wLDEyMjMwMTMuOTk5OTk5OTk5LDE1MTAzOTEuMDAwMDAwMDAwNSwzNjY5NDkuMDAwMDAwMDAwMjMsMTU3MDM5Ljk5OTk5OTk5OTk3LDYwNjIyOS4wMDAwMDAwMDAxLDM3Mzg0NDcuOTk5OTk5OTk2NywyMDEyODUxLjAwMDAwMDAwMDIsMjI4NTQ1MS4wMDAwMDAwMDE0LDEyODE5ODEuOTk5OTk5OTk4Niw3MDk2MTAuOTk5OTk5OTk5NywyMDIxODMuMDAwMDAwMDAwMTIsMjI4Njk2Ny4wMDAwMDAwMDIsMjIzNjg0Ni4wLDI5NDI0NzcuMDAwMDAwMDA0NywyNDM3ODYuMCw0NDM5NzQuMCw3OTUxMzcuMCw4NDU0NzQuMCwxOTUyODczLjk5OTk5OTk5OTgsMjEwMTA2MC45OTk5OTk5OTk1LDI3Mjg5NS4wLDEyMjE2MDkuOTk5OTk5OTk5OCw1MTkxMDQuOTk5OTk5OTk5OSwxODY2MDAxLjAwMDAwMDAwMDcsMjQzNDYwLjAsODA0ODc0LjAsNzYwNDIwLjAwMDAwMDAwMDEsNDk3NTA2LjAsNTYxMzI2LjAsNzc2NjAwLjAsMjQ2NTkyNS4wLDMwMDI5NzQuMCwxMjkzNDY1LjAsMzg4MjIwOC45OTk5OTk5OTYsMTMzNzM4Ni4wLDg5NjUwLjAsNDExOTk0LjAsMTkzOTA5Ni4wLDU5ODA3Ni4wLDQzMjQwMy4wLDcyOTg0NS4wLDM0MjgyMi4wLDYyODc5My4wLDIzOTYyMy4wLDg2NjM3My4wMDAwMDAwMDA2LDIzMjEzNzIuOTk5OTk5OTk4LDI2MDUwNy4wMDAwMDAwMDAxLDY3NjAyNS4wMDAwMDAwMDAxLDI3MzM1MS4wMDAwMDAwMDAwNiwzNDIwMDcuMDAwMDAwMDAwMSwxNDMyODcuOTk5OTk5OTk5OTcsMS4wNDAxNTgzMDAwMDAwMDFFNworMTUsVHVlIDggRmViIDExLDYwOTQ3OS45OTk5OTk5OTk5LDcyMzc1My4wLDc2Nzc1NS45OTk5OTk5OTk4LDI3NTk1ODAuOTk5OTk5OTk5NSw2MDQ0ODMuMDAwMDAwMDAwMSw2Mzc4NTIuOTk5OTk5OTk5NywxMjg4NzA2LjAwMDAwMDAwMDUsODM5ODQuMCw1MzU3NzAuMDAwMDAwMDAwMywxMjUzOTcwLjAwMDAwMDAwMDUsNTMxNjQ4LjAsMTY4MjI1OC4wLDIxOTg5MjguMDAwMDAwMDAxNCw1MTE0NzQuMDAwMDAwMDAwMDYsMTc5ODA2Ny4wLDU0ODg5Ny45OTk5OTk5OTk5LDgyOTkxNy4wMDAwMDAwMDA1LDkzMzcwOC45OTk5OTk5OTk4LDExNzIyODcuOTk5OTk5OTk5LDEyMTQ1MzMuOTk5OTk5OTk5OCw2MjY2NDguMDAwMDAwMDAwMyw5NjYyLjAsMTIyMzAxMy45OTk5OTk5OTksMTUxMDM5MS4wMDAwMDAwMDA1LDM2Njk0OS4wMDAwMDAwMDAyMywxNTcwMzkuOTk5OTk5OTk5OSw2MDYyMjkuMDAwMDAwMDAwMSwzNzM4NDQ3Ljk5OTk5OTk5NTMsMjAxMjg1MS4wLDIyODU0NTEuMDAwMDAwMDAyLDEyODE5ODEuOTk5OTk5OTk4Niw3MDk2MTAuOTk5OTk5OTk5NSwyMDIxODMuMDAwMDAwMDAwMTIsMjI4Njk2Ny4wMDAwMDAwMDE0LDIyMzY4NDYuMCwyOTQyNDc3LjAwMDAwMDAwNDcsMjQzNzg2LjAsNDQzOTc0LjAsNzk1MTM3LjAsODQ1NDc0LjAsMTk1Mjg3My45OTk5OTk5OTk4LDIxMDEwNjAuOTk5OTk5OTk5NSwyNzI4OTUuMCwxMjIxNjA5Ljk5OTk5OTk5OTgsNTE5MTA0Ljk5OTk5OTk5OTksMTg2NjAwMS4wMDAwMDAwMDA3LDI0MzQ2MC4wLDgwNDg3NC4wLDc2MDQyMC4wMDAwMDAwMDAxLDQ5NzUwNi4wLDU2MTMyNi4wLDc3NjYwMC4wLDI0NjU5MjUuMCwzMDAyOTc0LjAsMTI5MzQ2NS4wLDM4ODIyMDguOTk5OTk5OTk1LDEzMzczODYuMCw4OTY1MC4wLDQxMTk5NC4wLDE5MzkwOTYuMCw1OTgwNzYuMCw0MzI0MDMuMCw3Mjk4NDUuMCwzNDI4MjIuMCw2Mjg3OTMuMCwyMzk2MjMuMCw4NjYzNzMuMDAwMDAwMDAwOCwyMzIxMzcyLjk5OTk5OTk5OCwyNjA1MDcuMDAwMDAwMDAwMTUsNjc2MDI1LjAwMDAwMDAwMDEsMjczMzUxLjAsMzQyMDA3LjAwMDAwMDAwMDEsMTQzMjg3Ljk5OTk5OTk5OTk0LDEuMDQwMTU4MzAwMDAwMDAwN0U3CisxNixXZWQgOSBGZWIgMTEsNjA5NDc5Ljk5OTk5OTk5OTgsNzIzNzUzLjAwMDAwMDAwMDEsNzY3NzU2LjAsMjc1OTU4MC45OTk5OTk5OTc3LDYwNDQ4Mi45OTk5OTk5OTk4LDYzNzg1Mi45OTk5OTk5OTk3LDEyODg3MDYuMDAwMDAwMDAxLDgzOTg0LjAsNTM1NzcwLjAwMDAwMDAwMDUsMTI1Mzk3MC4wMDAwMDAwMDA3LDUzMTY0Ny45OTk5OTk5OTk5LDE2ODIyNTguMCwyMTk4OTI4LjAwMDAwMDAwMiw1MTE0NzQuMDAwMDAwMDAwMDYsMTc5ODA2Ni45OTk5OTk5OTk1LDU0ODg5Ny45OTk5OTk5OTk4LDgyOTkxNy4wMDAwMDAwMDA1LDkzMzcwOC45OTk5OTk5OTk4LDExNzIyODcuOTk5OTk5OTk5LDEyMTQ1MzMuOTk5OTk5OTk5NSw2MjY2NDguMDAwMDAwMDAwNSw5NjYyLjAsMTIyMzAxMy45OTk5OTk5OTg4LDE1MTAzOTAuOTk5OTk5OTk5OCwzNjY5NDkuMDAwMDAwMDAwMiwxNTcwMzkuOTk5OTk5OTk5ODUsNjA2MjI5LjAsMzczODQ0Ny45OTk5OTk5OTUzLDIwMTI4NTEuMCwyMjg1NDUxLjAwMDAwMDAwMiwxMjgxOTgxLjk5OTk5OTk5ODgsNzA5NjEwLjk5OTk5OTk5OTQsMjAyMTgzLjAwMDAwMDAwMDA2LDIyODY5NjcuMDAwMDAwMDAxLDIyMzY4NDUuOTk5OTk5OTk5NSwyOTQyNDc3LjAwMDAwMDAwNiwyNDM3ODYuMCw0NDM5NzQuMCw3OTUxMzcuMCw4NDU0NzQuMCwxOTUyODczLjk5OTk5OTk5OTgsMjEwMTA2MC45OTk5OTk5OTk1LDI3Mjg5NS4wLDEyMjE2MDkuOTk5OTk5OTk5NSw1MTkxMDQuOTk5OTk5OTk5OSwxODY2MDAxLjAwMDAwMDAwMDcsMjQzNDYwLjAsODA0ODc0LjAsNzYwNDIwLjAwMDAwMDAwMDIsNDk3NTA2LjAsNTYxMzI2LjAsNzc2NjAwLjAsMjQ2NTkyNS4wLDMwMDI5NzQuMCwxMjkzNDY1LjAsMzg4MjIwOC45OTk5OTk5OTQ0LDEzMzczODYuMCw4OTY1MC4wLDQxMTk5NC4wLDE5MzkwOTYuMCw1OTgwNzYuMCw0MzI0MDMuMCw3Mjk4NDUuMCwzNDI4MjIuMCw2Mjg3OTMuMCwyMzk2MjMuMCw4NjYzNzMuMDAwMDAwMDAwOCwyMzIxMzcyLjk5OTk5OTk5NzcsMjYwNTA3LjAwMDAwMDAwMDEsNjc2MDI1LjAwMDAwMDAwMDEsMjczMzUwLjk5OTk5OTk5OTk0LDM0MjAwNy4wMDAwMDAwMDAwNiwxNDMyODcuOTk5OTk5OTk5OTcsMS4wNDAxNTgzMDAwMDAwMDA2RTcKKzE3LFRodSAxMCBGZWIgMTEsNjA5NDc5Ljk5OTk5OTk5OTksNzIzNzUzLjAsNzY3NzU2LjAsMjc1OTU4MC45OTk5OTk5OTcsNjA0NDgyLjk5OTk5OTk5OTgsNjM3ODUyLjk5OTk5OTk5OTgsMTI4ODcwNi4wMDAwMDAwMDEsODM5ODQuMCw1MzU3NzAuMDAwMDAwMDAwMywxMjUzOTcwLjAwMDAwMDAwMDcsNTMxNjQ3Ljk5OTk5OTk5OTgsMTY4MjI1OC4wLDIxOTg5MjguMDAwMDAwMDAyMyw1MTE0NzQuMCwxNzk4MDY2Ljk5OTk5OTk5OTgsNTQ4ODk3Ljk5OTk5OTk5OTksODI5OTE3LjAwMDAwMDAwMDYsOTMzNzA4Ljk5OTk5OTk5OTgsMTE3MjI4Ny45OTk5OTk5OTksMTIxNDUzMy45OTk5OTk5OTk4LDYyNjY0OC4wMDAwMDAwMDAzLDk2NjIuMCwxMjIzMDEzLjk5OTk5OTk5OSwxNTEwMzkxLjAwMDAwMDAwMDIsMzY2OTQ5LjAwMDAwMDAwMDIsMTU3MDM5Ljk5OTk5OTk5OTg1LDYwNjIyOS4wMDAwMDAwMDAxLDM3Mzg0NDcuOTk5OTk5OTk1MywyMDEyODUxLjAwMDAwMDAwMDIsMjI4NTQ1MS4wMDAwMDAwMDIsMTI4MTk4MS45OTk5OTk5OTg4LDcwOTYxMC45OTk5OTk5OTk0LDIwMjE4My4wMDAwMDAwMDAwNiwyMjg2OTY3LjAwMDAwMDAwMSwyMjM2ODQ2LjAsMjk0MjQ3Ny4wMDAwMDAwMDY1LDI0Mzc4Ni4wLDQ0Mzk3NC4wLDc5NTEzNy4wLDg0NTQ3NC4wLDE5NTI4NzMuOTk5OTk5OTk5NSwyMTAxMDYwLjk5OTk5OTk5OTUsMjcyODk1LjAsMTIyMTYwOS45OTk5OTk5OTk1LDUxOTEwNC45OTk5OTk5OTk5NCwxODY2MDAxLjAwMDAwMDAwMSwyNDM0NjAuMCw4MDQ4NzQuMCw3NjA0MjAuMCw0OTc1MDYuMCw1NjEzMjYuMCw3NzY2MDAuMCwyNDY1OTI1LjAsMzAwMjk3NC4wLDEyOTM0NjUuMCwzODgyMjA4Ljk5OTk5OTk5NCwxMzM3Mzg2LjAsODk2NTAuMCw0MTE5OTQuMCwxOTM5MDk2LjAsNTk4MDc2LjAsNDMyNDAzLjAsNzI5ODQ1LjAsMzQyODIyLjAsNjI4NzkzLjAsMjM5NjIzLjAsODY2MzczLjAwMDAwMDAwMDksMjMyMTM3Mi45OTk5OTk5OTgsMjYwNTA3LjAwMDAwMDAwMDEsNjc2MDI1LjAsMjczMzUxLjAsMzQyMDA3LjAwMDAwMDAwMDEsMTQzMjg3Ljk5OTk5OTk5OTk0LDEuMDQwMTU4MzAwMDAwMDAwN0U3CisxOCxGcmkgMTEgRmViIDExLDYwOTQ3OS45OTk5OTk5OTk5LDcyMzc1My4wLDc2Nzc1Ni4wLDI3NTk1ODAuOTk5OTk5OTk3LDYwNDQ4Mi45OTk5OTk5OTk4LDYzNzg1Mi45OTk5OTk5OTk4LDEyODg3MDYuMDAwMDAwMDAwNyw4Mzk4NC4wLDUzNTc3MC4wMDAwMDAwMDAzLDEyNTM5NzAuMDAwMDAwMDAxLDUzMTY0Ny45OTk5OTk5OTk4LDE2ODIyNTcuOTk5OTk5OTk5NSwyMTk4OTI4LjAwMDAwMDAwMjMsNTExNDc0LjAsMTc5ODA2Ni45OTk5OTk5OTk1LDU0ODg5Ny45OTk5OTk5OTk5LDgyOTkxNy4wMDAwMDAwMDA2LDkzMzcwOC45OTk5OTk5OTk4LDExNzIyODcuOTk5OTk5OTk4OCwxMjE0NTMzLjk5OTk5OTk5OTUsNjI2NjQ4LjAwMDAwMDAwMDUsOTY2Mi4wLDEyMjMwMTMuOTk5OTk5OTk4NiwxNTEwMzkxLjAwMDAwMDAwMDUsMzY2OTQ5LjAwMDAwMDAwMDMsMTU3MDM5Ljk5OTk5OTk5OTgzLDYwNjIyOS4wLDM3Mzg0NDcuOTk5OTk5OTk1MywyMDEyODUxLjAwMDAwMDAwMDIsMjI4NTQ1MS4wMDAwMDAwMDIsMTI4MTk4MS45OTk5OTk5OTg2LDcwOTYxMC45OTk5OTk5OTk1LDIwMjE4My4wMDAwMDAwMDAwMywyMjg2OTY3LjAwMDAwMDAwMDUsMjIzNjg0Ni4wMDAwMDAwMDEsMjk0MjQ3Ny4wMDAwMDAwMDcsMjQzNzg2LjAsNDQzOTc0LjAsNzk1MTM3LjAsODQ1NDc0LjAsMTk1Mjg3My45OTk5OTk5OTk1LDIxMDEwNjAuOTk5OTk5OTk5NSwyNzI4OTUuMCwxMjIxNjA5Ljk5OTk5OTk5OTgsNTE5MTA0Ljk5OTk5OTk5OTk0LDE4NjYwMDEuMDAwMDAwMDAxMiwyNDM0NjAuMCw4MDQ4NzQuMCw3NjA0MjAuMDAwMDAwMDAwMSw0OTc1MDYuMCw1NjEzMjYuMCw3NzY2MDAuMCwyNDY1OTI1LjAsMzAwMjk3NC4wLDEyOTM0NjUuMCwzODgyMjA4Ljk5OTk5OTk5MzUsMTMzNzM4Ni4wLDg5NjUwLjAsNDExOTk0LjAsMTkzOTA5Ni4wLDU5ODA3Ni4wLDQzMjQwMy4wLDcyOTg0NS4wLDM0MjgyMi4wLDYyODc5My4wLDIzOTYyMy4wLDg2NjM3My4wMDAwMDAwMDA5LDIzMjEzNzIuOTk5OTk5OTk3LDI2MDUwNy4wMDAwMDAwMDAxLDY3NjAyNS4wMDAwMDAwMDAxLDI3MzM1MS4wLDM0MjAwNy4wMDAwMDAwMDAxLDE0MzI4Ny45OTk5OTk5OTk5NCwxLjA0MDE1ODMwMDAwMDAwMDRFNworMTksU2F0IDEyIEZlYiAxMSw2MDk0NzkuOTk5OTk5OTk5OSw3MjM3NTMuMCw3Njc3NTYuMDAwMDAwMDAwMSwyNzU5NTgwLjk5OTk5OTk5NjcsNjA0NDgyLjk5OTk5OTk5OTgsNjM3ODUyLjk5OTk5OTk5OTcsMTI4ODcwNi4wMDAwMDAwMDA1LDgzOTg0LjAsNTM1NzcwLjAwMDAwMDAwMDMsMTI1Mzk3MC4wMDAwMDAwMDA1LDUzMTY0Ny45OTk5OTk5OTk3LDE2ODIyNTguMCwyMTk4OTI4LjAwMDAwMDAwMjMsNTExNDc0LjAsMTc5ODA2Ni45OTk5OTk5OTk4LDU0ODg5Ny45OTk5OTk5OTk5LDgyOTkxNy4wMDAwMDAwMDA5LDkzMzcwOC45OTk5OTk5OTk5LDExNzIyODcuOTk5OTk5OTk4OCwxMjE0NTMzLjk5OTk5OTk5OTMsNjI2NjQ4LjAwMDAwMDAwMDMsOTY2Mi4wLDEyMjMwMTMuOTk5OTk5OTk4NiwxNTEwMzkxLjAwMDAwMDAwMDUsMzY2OTQ5LjAwMDAwMDAwMDMsMTU3MDM5Ljk5OTk5OTk5OTgsNjA2MjI4Ljk5OTk5OTk5OTksMzczODQ0Ny45OTk5OTk5OTUzLDIwMTI4NTEuMDAwMDAwMDAwNSwyMjg1NDUxLjAwMDAwMDAwMSwxMjgxOTgxLjk5OTk5OTk5ODgsNzA5NjEwLjk5OTk5OTk5OTQsMjAyMTgzLjAwMDAwMDAwMDA2LDIyODY5NjcuMDAwMDAwMDAwNSwyMjM2ODQ2LjAwMDAwMDAwMTQsMjk0MjQ3Ny4wMDAwMDAwMDY1LDI0Mzc4Ni4wLDQ0Mzk3NC4wLDc5NTEzNy4wLDg0NTQ3NC4wLDE5NTI4NzMuOTk5OTk5OTk5MywyMTAxMDYxLjAsMjcyODk1LjAsMTIyMTYxMC4wMDAwMDAwMDAyLDUxOTEwNC45OTk5OTk5OTk5NCwxODY2MDAxLjAwMDAwMDAwMTIsMjQzNDYwLjAsODA0ODc0LjAsNzYwNDIwLjAwMDAwMDAwMDEsNDk3NTA2LjAsNTYxMzI2LjAsNzc2NjAwLjAsMjQ2NTkyNS4wLDMwMDI5NzQuMCwxMjkzNDY1LjAsMzg4MjIwOC45OTk5OTk5OTM1LDEzMzczODYuMCw4OTY1MC4wLDQxMTk5NC4wLDE5MzkwOTYuMCw1OTgwNzYuMCw0MzI0MDMuMCw3Mjk4NDUuMCwzNDI4MjIuMCw2Mjg3OTMuMCwyMzk2MjMuMCw4NjYzNzMuMDAwMDAwMDAwNiwyMzIxMzcyLjk5OTk5OTk5NjcsMjYwNTA3LjAwMDAwMDAwMDEsNjc2MDI1LjAsMjczMzUxLjAsMzQyMDA3LjAwMDAwMDAwMDIzLDE0MzI4Ny45OTk5OTk5OTk5NCwxLjA0MDE1ODMwMDAwMDAwMDJFNworMjAsU3VuIDEzIEZlYiAxMSw2MDk0NzkuOTk5OTk5OTk5OSw3MjM3NTMuMCw3Njc3NTYuMCwyNzU5NTgwLjk5OTk5OTk5NzcsNjA0NDgyLjk5OTk5OTk5OTcsNjM3ODUyLjk5OTk5OTk5OTQsMTI4ODcwNi4wMDAwMDAwMDAyLDgzOTg0LjAsNTM1NzcwLjAwMDAwMDAwMDMsMTI1Mzk3MC4wMDAwMDAwMDA3LDUzMTY0Ny45OTk5OTk5OTk3LDE2ODIyNTcuOTk5OTk5OTk5OCwyMTk4OTI4LjAwMDAwMDAwMjMsNTExNDczLjk5OTk5OTk5OTk0LDE3OTgwNjcuMCw1NDg4OTcuOTk5OTk5OTk5OSw4Mjk5MTcuMDAwMDAwMDAwOCw5MzM3MDkuMCwxMTcyMjg3Ljk5OTk5OTk5ODgsMTIxNDUzMy45OTk5OTk5OTksNjI2NjQ4LjAwMDAwMDAwMDMsOTY2Mi4wLDEyMjMwMTMuOTk5OTk5OTk4NCwxNTEwMzkxLjAwMDAwMDAwMDIsMzY2OTQ5LjAwMDAwMDAwMDMsMTU3MDM5Ljk5OTk5OTk5OTgzLDYwNjIyOC45OTk5OTk5OTk4LDM3Mzg0NDcuOTk5OTk5OTk1LDIwMTI4NTEuMDAwMDAwMDAwNSwyMjg1NDUxLjAwMDAwMDAwMTQsMTI4MTk4MS45OTk5OTk5OTg4LDcwOTYxMC45OTk5OTk5OTk0LDIwMjE4My4wMDAwMDAwMDAxLDIyODY5NjcuMDAwMDAwMDAxLDIyMzY4NDYuMDAwMDAwMDAxNCwyOTQyNDc3LjAwMDAwMDAwNiwyNDM3ODYuMCw0NDM5NzQuMCw3OTUxMzcuMCw4NDU0NzQuMCwxOTUyODczLjk5OTk5OTk5OTUsMjEwMTA2MS4wLDI3Mjg5NS4wLDEyMjE2MTAuMDAwMDAwMDAwMiw1MTkxMDUuMCwxODY2MDAxLjAwMDAwMDAwMTIsMjQzNDYwLjAsODA0ODc0LjAsNzYwNDIwLjAwMDAwMDAwMDEsNDk3NTA2LjAsNTYxMzI2LjAsNzc2NjAwLjAsMjQ2NTkyNS4wLDMwMDI5NzQuMCwxMjkzNDY1LjAsMzg4MjIwOC45OTk5OTk5OTM1LDEzMzczODYuMCw4OTY1MC4wLDQxMTk5NC4wLDE5MzkwOTYuMCw1OTgwNzYuMCw0MzI0MDMuMCw3Mjk4NDUuMCwzNDI4MjIuMCw2Mjg3OTMuMCwyMzk2MjMuMCw4NjYzNzMuMDAwMDAwMDAwNiwyMzIxMzcyLjk5OTk5OTk5NjcsMjYwNTA3LjAwMDAwMDAwMDEsNjc2MDI1LjAwMDAwMDAwMDIsMjczMzUxLjAsMzQyMDA3LjAwMDAwMDAwMDIzLDE0MzI4OC4wMDAwMDAwMDAwMywxLjA0MDE1ODNFNworMjEsTW9uIDE0IEZlYiAxMSw2MDk0NzkuOTk5OTk5OTk5OSw3MjM3NTMuMDAwMDAwMDAwMiw3Njc3NTYuMCwyNzU5NTgwLjk5OTk5OTk5NzcsNjA0NDgyLjk5OTk5OTk5OTUsNjM3ODUyLjk5OTk5OTk5OTUsMTI4ODcwNi4wLDgzOTg0LjAsNTM1NzcwLjAwMDAwMDAwMDMsMTI1Mzk3MC4wMDAwMDAwMDA1LDUzMTY0Ny45OTk5OTk5OTk3LDE2ODIyNTcuOTk5OTk5OTk5NSwyMTk4OTI4LjAwMDAwMDAwMjMsNTExNDczLjk5OTk5OTk5OTk0LDE3OTgwNjcuMCw1NDg4OTcuOTk5OTk5OTk5OSw4Mjk5MTcuMDAwMDAwMDAwOCw5MzM3MDkuMCwxMTcyMjg3Ljk5OTk5OTk5OSwxMjE0NTMzLjk5OTk5OTk5OSw2MjY2NDguMDAwMDAwMDAwMyw5NjYyLjAsMTIyMzAxMy45OTk5OTk5OTg2LDE1MTAzOTEuMDAwMDAwMDAwMiwzNjY5NDkuMDAwMDAwMDAwMywxNTcwMzkuOTk5OTk5OTk5ODMsNjA2MjI4Ljk5OTk5OTk5OTgsMzczODQ0Ny45OTk5OTk5OTUsMjAxMjg1MS4wMDAwMDAwMDAyLDIyODU0NTEuMDAwMDAwMDAxLDEyODE5ODEuOTk5OTk5OTk4OCw3MDk2MTAuOTk5OTk5OTk5MywyMDIxODMuMDAwMDAwMDAwMSwyMjg2OTY3LjAwMDAwMDAwMSwyMjM2ODQ2LjAwMDAwMDAwMTQsMjk0MjQ3Ny4wMDAwMDAwMDYsMjQzNzg2LjAsNDQzOTc0LjAsNzk1MTM3LjAsODQ1NDc0LjAsMTk1Mjg3My45OTk5OTk5OTk4LDIxMDEwNjEuMCwyNzI4OTUuMCwxMjIxNjEwLjAsNTE5MTA1LjAsMTg2NjAwMS4wMDAwMDAwMDE0LDI0MzQ2MC4wLDgwNDg3NC4wLDc2MDQyMC4wMDAwMDAwMDAxLDQ5NzUwNi4wLDU2MTMyNi4wLDc3NjYwMC4wLDI0NjU5MjUuMCwzMDAyOTc0LjAsMTI5MzQ2NS4wLDM4ODIyMDguOTk5OTk5OTkzNSwxMzM3Mzg2LjAsODk2NTAuMCw0MTE5OTQuMCwxOTM5MDk2LjAsNTk4MDc2LjAsNDMyNDAzLjAsNzI5ODQ1LjAsMzQyODIyLjAsNjI4NzkzLjAsMjM5NjIzLjAsODY2MzczLjAwMDAwMDAwMDcsMjMyMTM3Mi45OTk5OTk5OTY3LDI2MDUwNy4wMDAwMDAwMDAxMiw2NzYwMjUuMDAwMDAwMDAwMiwyNzMzNTEuMDAwMDAwMDAwMDYsMzQyMDA3LjAwMDAwMDAwMDIzLDE0MzI4OC4wMDAwMDAwMDAwMywxLjA0MDE1ODNFNworMjIsVHVlIDE1IEZlYiAxMSw2MDk0NzkuOTk5OTk5OTk5OCw3MjM3NTMuMDAwMDAwMDAwMiw3Njc3NTUuOTk5OTk5OTk5OSwyNzU5NTgwLjk5OTk5OTk5NzcsNjA0NDgyLjk5OTk5OTk5OTUsNjM3ODUyLjk5OTk5OTk5OTUsMTI4ODcwNi4wLDgzOTg0LjAsNTM1NzcwLjAwMDAwMDAwMDMsMTI1Mzk3MC4wMDAwMDAwMDA1LDUzMTY0Ny45OTk5OTk5OTk1LDE2ODIyNTcuOTk5OTk5OTk5OCwyMTk4OTI4LjAwMDAwMDAwMiw1MTE0NzMuOTk5OTk5OTk5OTQsMTc5ODA2Ni45OTk5OTk5OTk4LDU0ODg5Ny45OTk5OTk5OTk4LDgyOTkxNy4wMDAwMDAwMDA4LDkzMzcwOS4wLDExNzIyODcuOTk5OTk5OTk4OCwxMjE0NTMzLjk5OTk5OTk5OTMsNjI2NjQ4LjAwMDAwMDAwMDIsOTY2Mi4wLDEyMjMwMTMuOTk5OTk5OTk4NCwxNTEwMzkxLjAwMDAwMDAwMDIsMzY2OTQ5LjAwMDAwMDAwMDIzLDE1NzAzOS45OTk5OTk5OTk4Myw2MDYyMjguOTk5OTk5OTk5OSwzNzM4NDQ3Ljk5OTk5OTk5NSwyMDEyODUxLjAwMDAwMDAwMDIsMjI4NTQ1MS4wMDAwMDAwMDEsMTI4MTk4MS45OTk5OTk5OTg4LDcwOTYxMC45OTk5OTk5OTk0LDIwMjE4My4wMDAwMDAwMDAxLDIyODY5NjcuMDAwMDAwMDAxLDIyMzY4NDYuMDAwMDAwMDAxNCwyOTQyNDc3LjAwMDAwMDAwNiwyNDM3ODYuMCw0NDM5NzQuMCw3OTUxMzcuMCw4NDU0NzQuMCwxOTUyODczLjk5OTk5OTk5OTgsMjEwMTA2MS4wLDI3Mjg5NS4wLDEyMjE2MTAuMDAwMDAwMDAwMiw1MTkxMDUuMCwxODY2MDAxLjAwMDAwMDAwMTYsMjQzNDYwLjAsODA0ODc0LjAsNzYwNDIwLjAwMDAwMDAwMDEsNDk3NTA2LjAsNTYxMzI2LjAsNzc2NjAwLjAsMjQ2NTkyNS4wLDMwMDI5NzQuMCwxMjkzNDY1LjAsMzg4MjIwOC45OTk5OTk5OTM1LDEzMzczODYuMCw4OTY1MC4wLDQxMTk5NC4wLDE5MzkwOTYuMCw1OTgwNzYuMCw0MzI0MDMuMCw3Mjk4NDUuMCwzNDI4MjIuMCw2Mjg3OTMuMCwyMzk2MjMuMCw4NjYzNzMuMDAwMDAwMDAwNywyMzIxMzcyLjk5OTk5OTk5NjcsMjYwNTA3LjAwMDAwMDAwMDEsNjc2MDI1LjAwMDAwMDAwMDIsMjczMzUxLjAwMDAwMDAwMDA2LDM0MjAwNy4wMDAwMDAwMDAyLDE0MzI4OC4wMDAwMDAwMDAwMywxLjA0MDE1ODNFNworMjMsV2VkIDE2IEZlYiAxMSw2MDk0NzkuOTk5OTk5OTk5OSw3MjM3NTMuMDAwMDAwMDAwMiw3Njc3NTUuOTk5OTk5OTk5OSwyNzU5NTgwLjk5OTk5OTk5NzcsNjA0NDgyLjk5OTk5OTk5OTUsNjM3ODUyLjk5OTk5OTk5OTUsMTI4ODcwNi4wLDgzOTg0LjAsNTM1NzcwLjAwMDAwMDAwMDMsMTI1Mzk3MC4wMDAwMDAwMDA1LDUzMTY0Ny45OTk5OTk5OTk3LDE2ODIyNTcuOTk5OTk5OTk5OCwyMTk4OTI4LjAwMDAwMDAwMiw1MTE0NzMuOTk5OTk5OTk5OTQsMTc5ODA2Ni45OTk5OTk5OTk1LDU0ODg5Ny45OTk5OTk5OTk4LDgyOTkxNy4wMDAwMDAwMDA4LDkzMzcwOS4wMDAwMDAwMDAxLDExNzIyODcuOTk5OTk5OTk4OCwxMjE0NTMzLjk5OTk5OTk5OTMsNjI2NjQ4LjAwMDAwMDAwMDIsOTY2Mi4wLDEyMjMwMTMuOTk5OTk5OTk4NCwxNTEwMzkxLjAwMDAwMDAwMDIsMzY2OTQ5LjAwMDAwMDAwMDIzLDE1NzAzOS45OTk5OTk5OTk4Myw2MDYyMjguOTk5OTk5OTk5OCwzNzM4NDQ3Ljk5OTk5OTk5NSwyMDEyODUxLjAwMDAwMDAwMDIsMjI4NTQ1MS4wMDAwMDAwMDE0LDEyODE5ODEuOTk5OTk5OTk4OCw3MDk2MTAuOTk5OTk5OTk5MywyMDIxODMuMDAwMDAwMDAwMSwyMjg2OTY3LjAwMDAwMDAwMTQsMjIzNjg0Ni4wMDAwMDAwMDEsMjk0MjQ3Ny4wMDAwMDAwMDY1LDI0Mzc4Ni4wLDQ0Mzk3NC4wLDc5NTEzNy4wLDg0NTQ3NC4wLDE5NTI4NzMuOTk5OTk5OTk5OCwyMTAxMDYxLjAsMjcyODk1LjAsMTIyMTYxMC4wLDUxOTEwNS4wLDE4NjYwMDEuMDAwMDAwMDAxNCwyNDM0NjAuMCw4MDQ4NzQuMCw3NjA0MjAuMDAwMDAwMDAwMSw0OTc1MDYuMCw1NjEzMjYuMCw3NzY2MDAuMCwyNDY1OTI1LjAsMzAwMjk3NC4wLDEyOTM0NjUuMCwzODgyMjA4Ljk5OTk5OTk5MzUsMTMzNzM4Ni4wLDg5NjUwLjAsNDExOTk0LjAsMTkzOTA5Ni4wLDU5ODA3Ni4wLDQzMjQwMy4wLDcyOTg0NS4wLDM0MjgyMi4wLDYyODc5My4wLDIzOTYyMy4wLDg2NjM3My4wMDAwMDAwMDA2LDIzMjEzNzIuOTk5OTk5OTk2NywyNjA1MDcuMDAwMDAwMDAwMTIsNjc2MDI1LjAwMDAwMDAwMDIsMjczMzUxLjAwMDAwMDAwMDA2LDM0MjAwNy4wMDAwMDAwMDAyLDE0MzI4OC4wMDAwMDAwMDAwMywxLjA0MDE1ODI5OTk5OTk5OThFNworMjQsVGh1IDE3IEZlYiAxMSw2MDk0NzkuOTk5OTk5OTk5OCw3MjM3NTMuMDAwMDAwMDAwMiw3Njc3NTUuOTk5OTk5OTk5OSwyNzU5NTgwLjk5OTk5OTk5Nyw2MDQ0ODIuOTk5OTk5OTk5NSw2Mzc4NTIuOTk5OTk5OTk5NSwxMjg4NzA1Ljk5OTk5OTk5OTgsODM5ODQuMCw1MzU3NzAuMDAwMDAwMDAwNSwxMjUzOTcwLjAwMDAwMDAwMDUsNTMxNjQ3Ljk5OTk5OTk5OTUsMTY4MjI1Ny45OTk5OTk5OTk4LDIxOTg5MjguMDAwMDAwMDAyMyw1MTE0NzMuOTk5OTk5OTk5OTQsMTc5ODA2Ni45OTk5OTk5OTk1LDU0ODg5Ny45OTk5OTk5OTk5LDgyOTkxNy4wMDAwMDAwMDA4LDkzMzcwOS4wMDAwMDAwMDAxLDExNzIyODcuOTk5OTk5OTk4OCwxMjE0NTMzLjk5OTk5OTk5OTMsNjI2NjQ4LjAwMDAwMDAwMDIsOTY2Mi4wLDEyMjMwMTMuOTk5OTk5OTk4NCwxNTEwMzkxLjAwMDAwMDAwMDIsMzY2OTQ5LjAwMDAwMDAwMDIzLDE1NzAzOS45OTk5OTk5OTk4Myw2MDYyMjguOTk5OTk5OTk5OCwzNzM4NDQ3Ljk5OTk5OTk5NDQsMjAxMjg1MS4wMDAwMDAwMDAyLDIyODU0NTEuMDAwMDAwMDAxNCwxMjgxOTgxLjk5OTk5OTk5ODgsNzA5NjEwLjk5OTk5OTk5OTMsMjAyMTgzLjAwMDAwMDAwMDEsMjI4Njk2Ny4wMDAwMDAwMDE0LDIyMzY4NDYuMDAwMDAwMDAxLDI5NDI0NzcuMDAwMDAwMDA2LDI0Mzc4Ni4wLDQ0Mzk3NC4wLDc5NTEzNy4wLDg0NTQ3NC4wLDE5NTI4NzQuMCwyMTAxMDYxLjAsMjcyODk1LjAsMTIyMTYxMC4wMDAwMDAwMDAyLDUxOTEwNS4wLDE4NjYwMDEuMDAwMDAwMDAxNiwyNDM0NjAuMCw4MDQ4NzQuMCw3NjA0MjAuMCw0OTc1MDYuMCw1NjEzMjYuMCw3NzY2MDAuMCwyNDY1OTI1LjAsMzAwMjk3NC4wLDEyOTM0NjUuMCwzODgyMjA4Ljk5OTk5OTk5MzUsMTMzNzM4Ni4wLDg5NjUwLjAsNDExOTk0LjAsMTkzOTA5Ni4wLDU5ODA3Ni4wLDQzMjQwMy4wLDcyOTg0NS4wLDM0MjgyMi4wLDYyODc5My4wLDIzOTYyMy4wLDg2NjM3My4wMDAwMDAwMDA2LDIzMjEzNzIuOTk5OTk5OTk3LDI2MDUwNy4wMDAwMDAwMDAxMiw2NzYwMjUuMDAwMDAwMDAwMiwyNzMzNTEuMCwzNDIwMDcuMDAwMDAwMDAwMjMsMTQzMjg4LjAsMS4wNDAxNTgyOTk5OTk5OTk4RTcKKzI1LEZyaSAxOCBGZWIgMTEsNjA5NDc5Ljk5OTk5OTk5OTgsNzIzNzUzLjAwMDAwMDAwMDIsNzY3NzU2LjAsMjc1OTU4MC45OTk5OTk5OTc3LDYwNDQ4Mi45OTk5OTk5OTk1LDYzNzg1Mi45OTk5OTk5OTk1LDEyODg3MDYuMCw4Mzk4NC4wLDUzNTc3MC4wMDAwMDAwMDAzLDEyNTM5NzAuMDAwMDAwMDAwNSw1MzE2NDcuOTk5OTk5OTk5NywxNjgyMjU3Ljk5OTk5OTk5OTgsMjE5ODkyOC4wMDAwMDAwMDIzLDUxMTQ3NC4wLDE3OTgwNjYuOTk5OTk5OTk5NSw1NDg4OTcuOTk5OTk5OTk5OSw4Mjk5MTcuMDAwMDAwMDAwOCw5MzM3MDkuMDAwMDAwMDAwMSwxMTcyMjg3Ljk5OTk5OTk5ODgsMTIxNDUzMy45OTk5OTk5OTksNjI2NjQ4LjAwMDAwMDAwMDIsOTY2Mi4wLDEyMjMwMTMuOTk5OTk5OTk4NiwxNTEwMzkxLjAwMDAwMDAwMDIsMzY2OTQ5LjAwMDAwMDAwMDMsMTU3MDM5Ljk5OTk5OTk5OTgzLDYwNjIyOC45OTk5OTk5OTk4LDM3Mzg0NDcuOTk5OTk5OTk1LDIwMTI4NTEuMDAwMDAwMDAwMiwyMjg1NDUxLjAwMDAwMDAwMTQsMTI4MTk4MS45OTk5OTk5OTksNzA5NjEwLjk5OTk5OTk5OTMsMjAyMTgzLjAwMDAwMDAwMDEsMjI4Njk2Ny4wMDAwMDAwMDE0LDIyMzY4NDYuMDAwMDAwMDAxNCwyOTQyNDc3LjAwMDAwMDAwNjUsMjQzNzg2LjAsNDQzOTc0LjAsNzk1MTM3LjAsODQ1NDc0LjAsMTk1Mjg3My45OTk5OTk5OTk4LDIxMDEwNjEuMCwyNzI4OTUuMCwxMjIxNjEwLjAsNTE5MTA0Ljk5OTk5OTk5OTk0LDE4NjYwMDEuMDAwMDAwMDAxNCwyNDM0NjAuMCw4MDQ4NzQuMCw3NjA0MjAuMCw0OTc1MDYuMCw1NjEzMjYuMCw3NzY2MDAuMCwyNDY1OTI1LjAsMzAwMjk3NC4wLDEyOTM0NjUuMCwzODgyMjA4Ljk5OTk5OTk5MzUsMTMzNzM4Ni4wLDg5NjUwLjAsNDExOTk0LjAsMTkzOTA5Ni4wLDU5ODA3Ni4wLDQzMjQwMy4wLDcyOTg0NS4wLDM0MjgyMi4wLDYyODc5My4wLDIzOTYyMy4wLDg2NjM3My4wMDAwMDAwMDA2LDIzMjEzNzIuOTk5OTk5OTk2NywyNjA1MDcuMDAwMDAwMDAwMTIsNjc2MDI1LjAwMDAwMDAwMDIsMjczMzUxLjAsMzQyMDA3LjAwMDAwMDAwMDIsMTQzMjg4LjAwMDAwMDAwMDAzLDEuMDQwMTU4Mjk5OTk5OTk5OEU3CisyNixTYXQgMTkgRmViIDExLDYwOTQ3OS45OTk5OTk5OTk4LDcyMzc1My4wMDAwMDAwMDAyLDc2Nzc1NS45OTk5OTk5OTk5LDI3NTk1ODAuOTk5OTk5OTk3Nyw2MDQ0ODIuOTk5OTk5OTk5NSw2Mzc4NTIuOTk5OTk5OTk5NSwxMjg4NzA1Ljk5OTk5OTk5OTgsODM5ODQuMCw1MzU3NzAuMDAwMDAwMDAwMywxMjUzOTcwLjAwMDAwMDAwMDcsNTMxNjQ3Ljk5OTk5OTk5OTcsMTY4MjI1Ny45OTk5OTk5OTk4LDIxOTg5MjguMDAwMDAwMDAyMyw1MTE0NzMuOTk5OTk5OTk5OTQsMTc5ODA2Ni45OTk5OTk5OTk4LDU0ODg5Ny45OTk5OTk5OTk4LDgyOTkxNy4wMDAwMDAwMDA5LDkzMzcwOS4wMDAwMDAwMDAyLDExNzIyODcuOTk5OTk5OTk4OCwxMjE0NTMzLjk5OTk5OTk5OSw2MjY2NDguMDAwMDAwMDAwMiw5NjYyLjAsMTIyMzAxMy45OTk5OTk5OTg2LDE1MTAzOTEuMCwzNjY5NDkuMDAwMDAwMDAwMywxNTcwMzkuOTk5OTk5OTk5ODMsNjA2MjI4Ljk5OTk5OTk5OTgsMzczODQ0Ny45OTk5OTk5OTUsMjAxMjg1MS4wMDAwMDAwMDAyLDIyODU0NTEuMDAwMDAwMDAxLDEyODE5ODEuOTk5OTk5OTk4OCw3MDk2MTAuOTk5OTk5OTk5MiwyMDIxODMuMDAwMDAwMDAwMTIsMjI4Njk2Ny4wMDAwMDAwMDIsMjIzNjg0Ni4wMDAwMDAwMDEsMjk0MjQ3Ny4wMDAwMDAwMDY1LDI0Mzc4Ni4wLDQ0Mzk3NC4wLDc5NTEzNy4wLDg0NTQ3NC4wLDE5NTI4NzMuOTk5OTk5OTk5OCwyMTAxMDYxLjAsMjcyODk1LjAsMTIyMTYwOS45OTk5OTk5OTk4LDUxOTEwNC45OTk5OTk5OTk5NCwxODY2MDAxLjAwMDAwMDAwMTQsMjQzNDYwLjAsODA0ODc0LjAsNzYwNDIwLjAwMDAwMDAwMDEsNDk3NTA2LjAsNTYxMzI2LjAsNzc2NjAwLjAsMjQ2NTkyNS4wLDMwMDI5NzQuMCwxMjkzNDY1LjAsMzg4MjIwOC45OTk5OTk5OTMsMTMzNzM4Ni4wLDg5NjUwLjAsNDExOTk0LjAsMTkzOTA5Ni4wLDU5ODA3Ni4wLDQzMjQwMy4wLDcyOTg0NS4wLDM0MjgyMi4wLDYyODc5My4wLDIzOTYyMy4wLDg2NjM3My4wMDAwMDAwMDA2LDIzMjEzNzIuOTk5OTk5OTk2NywyNjA1MDcuMDAwMDAwMDAwMSw2NzYwMjUuMDAwMDAwMDAwMiwyNzMzNTEuMCwzNDIwMDcuMDAwMDAwMDAwMiwxNDMyODguMDAwMDAwMDAwMDMsMS4wNDAxNTgyOTk5OTk5OTk2RTcKKzI3LFN1biAyMCBGZWIgMTEsNjA5NDc5Ljk5OTk5OTk5OTcsNzIzNzUzLjAwMDAwMDAwMDIsNzY3NzU1Ljk5OTk5OTk5OTksMjc1OTU4MC45OTk5OTk5OTc3LDYwNDQ4Mi45OTk5OTk5OTk1LDYzNzg1Mi45OTk5OTk5OTk1LDEyODg3MDUuOTk5OTk5OTk5OCw4Mzk4NC4wLDUzNTc3MC4wMDAwMDAwMDA1LDEyNTM5NzAuMDAwMDAwMDAwNyw1MzE2NDcuOTk5OTk5OTk5NywxNjgyMjU3Ljk5OTk5OTk5OTgsMjE5ODkyOC4wMDAwMDAwMDIzLDUxMTQ3My45OTk5OTk5OTk5LDE3OTgwNjYuOTk5OTk5OTk5OCw1NDg4OTcuOTk5OTk5OTk5OCw4Mjk5MTcuMDAwMDAwMDAwOCw5MzM3MDkuMDAwMDAwMDAwMSwxMTcyMjg3Ljk5OTk5OTk5ODgsMTIxNDUzMy45OTk5OTk5OTg4LDYyNjY0OC4wMDAwMDAwMDAxLDk2NjIuMCwxMjIzMDEzLjk5OTk5OTk5ODYsMTUxMDM5MS4wLDM2Njk0OS4wMDAwMDAwMDAzLDE1NzAzOS45OTk5OTk5OTk4NSw2MDYyMjguOTk5OTk5OTk5OCwzNzM4NDQ3Ljk5OTk5OTk5NDQsMjAxMjg1MS4wMDAwMDAwMDAyLDIyODU0NTEuMDAwMDAwMDAxLDEyODE5ODEuOTk5OTk5OTk4OCw3MDk2MTAuOTk5OTk5OTk5MiwyMDIxODMuMDAwMDAwMDAwMSwyMjg2OTY3LjAwMDAwMDAwMTQsMjIzNjg0Ni4wMDAwMDAwMDEsMjk0MjQ3Ny4wMDAwMDAwMDY1LDI0Mzc4Ni4wLDQ0Mzk3NC4wLDc5NTEzNy4wLDg0NTQ3NC4wLDE5NTI4NzQuMCwyMTAxMDYwLjk5OTk5OTk5OTUsMjcyODk1LjAsMTIyMTYxMC4wLDUxOTEwNS4wLDE4NjYwMDEuMDAwMDAwMDAxNiwyNDM0NjAuMCw4MDQ4NzQuMCw3NjA0MjAuMDAwMDAwMDAwMSw0OTc1MDYuMCw1NjEzMjYuMCw3NzY2MDAuMCwyNDY1OTI1LjAsMzAwMjk3NC4wLDEyOTM0NjUuMCwzODgyMjA4Ljk5OTk5OTk5MywxMzM3Mzg2LjAsODk2NTAuMCw0MTE5OTQuMCwxOTM5MDk2LjAsNTk4MDc2LjAsNDMyNDAzLjAsNzI5ODQ1LjAsMzQyODIyLjAsNjI4NzkzLjAsMjM5NjIzLjAsODY2MzczLjAwMDAwMDAwMDcsMjMyMTM3Mi45OTk5OTk5OTY3LDI2MDUwNy4wMDAwMDAwMDAxLDY3NjAyNS4wMDAwMDAwMDAxLDI3MzM1MC45OTk5OTk5OTk5NCwzNDIwMDcuMDAwMDAwMDAwMiwxNDMyODguMCwxLjA0MDE1ODI5OTk5OTk5OTZFNworMjgsTW9uIDIxIEZlYiAxMSw2MDk0NzkuOTk5OTk5OTk5Nyw3MjM3NTMuMDAwMDAwMDAwMiw3Njc3NTYuMCwyNzU5NTgwLjk5OTk5OTk5NzcsNjA0NDgyLjk5OTk5OTk5OTUsNjM3ODUyLjk5OTk5OTk5OTQsMTI4ODcwNS45OTk5OTk5OTk4LDgzOTg0LjAsNTM1NzcwLjAwMDAwMDAwMDUsMTI1Mzk3MC4wMDAwMDAwMDA3LDUzMTY0Ny45OTk5OTk5OTk3LDE2ODIyNTguMCwyMTk4OTI4LjAwMDAwMDAwMjMsNTExNDczLjk5OTk5OTk5OTk0LDE3OTgwNjYuOTk5OTk5OTk5OCw1NDg4OTcuOTk5OTk5OTk5OCw4Mjk5MTcuMDAwMDAwMDAwOCw5MzM3MDkuMDAwMDAwMDAwMiwxMTcyMjg3Ljk5OTk5OTk5ODgsMTIxNDUzMy45OTk5OTk5OTg4LDYyNjY0OC4wMDAwMDAwMDAxLDk2NjIuMCwxMjIzMDEzLjk5OTk5OTk5ODYsMTUxMDM5MS4wLDM2Njk0OS4wMDAwMDAwMDAzLDE1NzAzOS45OTk5OTk5OTk4Myw2MDYyMjguOTk5OTk5OTk5NywzNzM4NDQ3Ljk5OTk5OTk5NSwyMDEyODUxLjAwMDAwMDAwMDIsMjI4NTQ1MS4wMDAwMDAwMDEsMTI4MTk4MS45OTk5OTk5OTksNzA5NjEwLjk5OTk5OTk5OTIsMjAyMTgzLjAwMDAwMDAwMDEsMjI4Njk2Ny4wMDAwMDAwMDE0LDIyMzY4NDYuMDAwMDAwMDAxLDI5NDI0NzcuMDAwMDAwMDA2NSwyNDM3ODYuMCw0NDM5NzQuMCw3OTUxMzcuMCw4NDU0NzQuMCwxOTUyODc0LjAsMjEwMTA2MC45OTk5OTk5OTk1LDI3Mjg5NS4wLDEyMjE2MTAuMCw1MTkxMDUuMCwxODY2MDAxLjAwMDAwMDAwMTQsMjQzNDYwLjAsODA0ODc0LjAsNzYwNDIwLjAwMDAwMDAwMDEsNDk3NTA2LjAsNTYxMzI2LjAsNzc2NjAwLjAsMjQ2NTkyNS4wLDMwMDI5NzQuMCwxMjkzNDY1LjAsMzg4MjIwOC45OTk5OTk5OTMsMTMzNzM4Ni4wLDg5NjUwLjAsNDExOTk0LjAsMTkzOTA5Ni4wLDU5ODA3Ni4wLDQzMjQwMy4wLDcyOTg0NS4wLDM0MjgyMi4wLDYyODc5My4wLDIzOTYyMy4wLDg2NjM3My4wMDAwMDAwMDA3LDIzMjEzNzIuOTk5OTk5OTk2NywyNjA1MDcuMDAwMDAwMDAwMDYsNjc2MDI1LjAwMDAwMDAwMDEsMjczMzUxLjAsMzQyMDA3LjAwMDAwMDAwMDIsMTQzMjg4LjAsMS4wNDAxNTgyOTk5OTk5OTk4RTcKKzI5LFR1ZSAyMiBGZWIgMTEsNjA5NDc5Ljk5OTk5OTk5OTcsNzIzNzUzLjAwMDAwMDAwMDIsNzY3NzU2LjAsMjc1OTU4MC45OTk5OTk5OTc3LDYwNDQ4Mi45OTk5OTk5OTk0LDYzNzg1Mi45OTk5OTk5OTk1LDEyODg3MDUuOTk5OTk5OTk5OCw4Mzk4NC4wLDUzNTc3MC4wMDAwMDAwMDA1LDEyNTM5NzAuMDAwMDAwMDAwNyw1MzE2NDcuOTk5OTk5OTk5NywxNjgyMjU3Ljk5OTk5OTk5OTgsMjE5ODkyOC4wMDAwMDAwMDIsNTExNDczLjk5OTk5OTk5OTk0LDE3OTgwNjYuOTk5OTk5OTk5NSw1NDg4OTcuOTk5OTk5OTk5OSw4Mjk5MTcuMDAwMDAwMDAwOSw5MzM3MDkuMDAwMDAwMDAwMSwxMTcyMjg3Ljk5OTk5OTk5ODgsMTIxNDUzMy45OTk5OTk5OTg4LDYyNjY0OC4wMDAwMDAwMDAxLDk2NjIuMCwxMjIzMDEzLjk5OTk5OTk5ODYsMTUxMDM5MC45OTk5OTk5OTk4LDM2Njk0OS4wMDAwMDAwMDAzLDE1NzAzOS45OTk5OTk5OTk4NSw2MDYyMjguOTk5OTk5OTk5NywzNzM4NDQ3Ljk5OTk5OTk5NDQsMjAxMjg1MS4wMDAwMDAwMDAyLDIyODU0NTEuMDAwMDAwMDAxLDEyODE5ODEuOTk5OTk5OTk4OCw3MDk2MTAuOTk5OTk5OTk5MiwyMDIxODMuMDAwMDAwMDAwMDYsMjI4Njk2Ny4wMDAwMDAwMDE0LDIyMzY4NDYuMDAwMDAwMDAwNSwyOTQyNDc3LjAwMDAwMDAwNywyNDM3ODYuMCw0NDM5NzQuMCw3OTUxMzcuMCw4NDU0NzQuMCwxOTUyODc0LjAsMjEwMTA2MC45OTk5OTk5OTk1LDI3Mjg5NS4wLDEyMjE2MDkuOTk5OTk5OTk5OCw1MTkxMDUuMCwxODY2MDAxLjAwMDAwMDAwMTQsMjQzNDYwLjAsODA0ODc0LjAsNzYwNDIwLjAsNDk3NTA2LjAsNTYxMzI2LjAsNzc2NjAwLjAsMjQ2NTkyNS4wLDMwMDI5NzQuMCwxMjkzNDY1LjAsMzg4MjIwOC45OTk5OTk5OTMsMTMzNzM4Ni4wLDg5NjUwLjAsNDExOTk0LjAsMTkzOTA5Ni4wLDU5ODA3Ni4wLDQzMjQwMy4wLDcyOTg0NS4wLDM0MjgyMi4wLDYyODc5My4wLDIzOTYyMy4wLDg2NjM3My4wMDAwMDAwMDA3LDIzMjEzNzIuOTk5OTk5OTk2NywyNjA1MDcuMDAwMDAwMDAwMSw2NzYwMjUuMCwyNzMzNTEuMCwzNDIwMDcuMDAwMDAwMDAwMSwxNDMyODguMCwxLjA0MDE1ODI5OTk5OTk5OThFNworMzAsV2VkIDIzIEZlYiAxMSw2MDk0NzkuOTk5OTk5OTk5OCw3MjM3NTMuMDAwMDAwMDAwMiw3Njc3NTUuOTk5OTk5OTk5OSwyNzU5NTgwLjk5OTk5OTk5OCw2MDQ0ODIuOTk5OTk5OTk5NCw2Mzc4NTIuOTk5OTk5OTk5NSwxMjg4NzA1Ljk5OTk5OTk5OTgsODM5ODQuMCw1MzU3NzAuMDAwMDAwMDAwNSwxMjUzOTcwLjAwMDAwMDAwMDcsNTMxNjQ3Ljk5OTk5OTk5OTgsMTY4MjI1Ny45OTk5OTk5OTk4LDIxOTg5MjguMDAwMDAwMDAyMyw1MTE0NzMuOTk5OTk5OTk5OTQsMTc5ODA2Ni45OTk5OTk5OTk4LDU0ODg5Ny45OTk5OTk5OTk5LDgyOTkxNy4wMDAwMDAwMDA4LDkzMzcwOS4wMDAwMDAwMDAyLDExNzIyODcuOTk5OTk5OTk5LDEyMTQ1MzMuOTk5OTk5OTk4Niw2MjY2NDguMDAwMDAwMDAwMSw5NjYyLjAsMTIyMzAxMy45OTk5OTk5OTg2LDE1MTAzOTEuMCwzNjY5NDkuMDAwMDAwMDAwMywxNTcwMzkuOTk5OTk5OTk5ODUsNjA2MjI4Ljk5OTk5OTk5OTcsMzczODQ0Ny45OTk5OTk5OTQ0LDIwMTI4NTEuMCwyMjg1NDUxLjAwMDAwMDAwMSwxMjgxOTgxLjk5OTk5OTk5ODgsNzA5NjEwLjk5OTk5OTk5OTEsMjAyMTgzLjAwMDAwMDAwMDA2LDIyODY5NjcuMDAwMDAwMDAxNCwyMjM2ODQ2LjAwMDAwMDAwMSwyOTQyNDc3LjAwMDAwMDAwNjUsMjQzNzg2LjAsNDQzOTc0LjAsNzk1MTM3LjAsODQ1NDc0LjAsMTk1Mjg3My45OTk5OTk5OTk4LDIxMDEwNjAuOTk5OTk5OTk5NSwyNzI4OTUuMCwxMjIxNjA5Ljk5OTk5OTk5OTgsNTE5MTA1LjAsMTg2NjAwMS4wMDAwMDAwMDE2LDI0MzQ2MC4wLDgwNDg3NC4wLDc2MDQyMC4wMDAwMDAwMDAxLDQ5NzUwNi4wLDU2MTMyNi4wLDc3NjYwMC4wLDI0NjU5MjUuMCwzMDAyOTc0LjAsMTI5MzQ2NS4wLDM4ODIyMDguOTk5OTk5OTkzLDEzMzczODYuMCw4OTY1MC4wLDQxMTk5NC4wLDE5MzkwOTYuMCw1OTgwNzYuMCw0MzI0MDMuMCw3Mjk4NDUuMCwzNDI4MjIuMCw2Mjg3OTMuMCwyMzk2MjMuMCw4NjYzNzMuMDAwMDAwMDAwNywyMzIxMzcyLjk5OTk5OTk5NywyNjA1MDcuMDAwMDAwMDAwMSw2NzYwMjUuMDAwMDAwMDAwMSwyNzMzNTEuMDAwMDAwMDAwMDYsMzQyMDA3LjAwMDAwMDAwMDEsMTQzMjg4LjAsMS4wNDAxNTgyOTk5OTk5OTk2RTcKKzMxLFRodSAyNCBGZWIgMTEsNjA5NDc5Ljk5OTk5OTk5OTcsNzIzNzUzLjAwMDAwMDAwMDIsNzY3NzU1Ljk5OTk5OTk5OTksMjc1OTU4MC45OTk5OTk5OTgsNjA0NDgyLjk5OTk5OTk5OTUsNjM3ODUyLjk5OTk5OTk5OTUsMTI4ODcwNi4wLDgzOTg0LjAsNTM1NzcwLjAwMDAwMDAwMDUsMTI1Mzk3MC4wMDAwMDAwMDA1LDUzMTY0Ny45OTk5OTk5OTk4LDE2ODIyNTcuOTk5OTk5OTk5OCwyMTk4OTI4LjAwMDAwMDAwMjMsNTExNDczLjk5OTk5OTk5OTk0LDE3OTgwNjYuOTk5OTk5OTk5OCw1NDg4OTcuOTk5OTk5OTk5OSw4Mjk5MTcuMDAwMDAwMDAwOSw5MzM3MDkuMDAwMDAwMDAwMSwxMTcyMjg3Ljk5OTk5OTk5OSwxMjE0NTMzLjk5OTk5OTk5ODgsNjI2NjQ4LjAwMDAwMDAwMDEsOTY2Mi4wLDEyMjMwMTMuOTk5OTk5OTk4OCwxNTEwMzkxLjAsMzY2OTQ5LjAwMDAwMDAwMDM1LDE1NzAzOS45OTk5OTk5OTk4NSw2MDYyMjguOTk5OTk5OTk5OCwzNzM4NDQ3Ljk5OTk5OTk5NDQsMjAxMjg1MS4wLDIyODU0NTEuMDAwMDAwMDAxLDEyODE5ODEuOTk5OTk5OTk4OCw3MDk2MTAuOTk5OTk5OTk5MiwyMDIxODMuMDAwMDAwMDAwMSwyMjg2OTY3LjAwMDAwMDAwMTQsMjIzNjg0Ni4wMDAwMDAwMDEsMjk0MjQ3Ny4wMDAwMDAwMDY1LDI0Mzc4Ni4wLDQ0Mzk3NC4wLDc5NTEzNy4wLDg0NTQ3NC4wLDE5NTI4NzQuMCwyMTAxMDYxLjAsMjcyODk1LjAsMTIyMTYxMC4wLDUxOTEwNS4wLDE4NjYwMDEuMDAwMDAwMDAxNiwyNDM0NjAuMCw4MDQ4NzQuMCw3NjA0MjAuMDAwMDAwMDAwMSw0OTc1MDYuMCw1NjEzMjYuMCw3NzY2MDAuMCwyNDY1OTI1LjAsMzAwMjk3NC4wLDEyOTM0NjUuMCwzODgyMjA4Ljk5OTk5OTk5MjUsMTMzNzM4Ni4wLDg5NjUwLjAsNDExOTk0LjAsMTkzOTA5Ni4wLDU5ODA3Ni4wLDQzMjQwMy4wLDcyOTg0NS4wLDM0MjgyMi4wLDYyODc5My4wLDIzOTYyMy4wLDg2NjM3My4wMDAwMDAwMDA4LDIzMjEzNzIuOTk5OTk5OTk3LDI2MDUwNy4wMDAwMDAwMDAxLDY3NjAyNS4wMDAwMDAwMDAxLDI3MzM1MS4wMDAwMDAwMDAwNiwzNDIwMDcuMDAwMDAwMDAwMSwxNDMyODguMCwxLjA0MDE1ODI5OTk5OTk5OTZFNworMzIsRnJpIDI1IEZlYiAxMSw2MDk0NzkuOTk5OTk5OTk5Nyw3MjM3NTMuMDAwMDAwMDAwMiw3Njc3NTUuOTk5OTk5OTk5OSwyNzU5NTgwLjk5OTk5OTk5NzcsNjA0NDgyLjk5OTk5OTk5OTUsNjM3ODUyLjk5OTk5OTk5OTUsMTI4ODcwNi4wLDgzOTg0LjAsNTM1NzcwLjAwMDAwMDAwMDYsMTI1Mzk3MC4wMDAwMDAwMDA1LDUzMTY0Ny45OTk5OTk5OTk3LDE2ODIyNTcuOTk5OTk5OTk5OCwyMTk4OTI4LjAwMDAwMDAwMjMsNTExNDczLjk5OTk5OTk5OTk0LDE3OTgwNjcuMCw1NDg4OTcuOTk5OTk5OTk5OCw4Mjk5MTcuMDAwMDAwMDAwOCw5MzM3MDkuMDAwMDAwMDAwMSwxMTcyMjg3Ljk5OTk5OTk5ODgsMTIxNDUzMy45OTk5OTk5OTg4LDYyNjY0OC4wMDAwMDAwMDAxLDk2NjIuMCwxMjIzMDEzLjk5OTk5OTk5ODYsMTUxMDM5MC45OTk5OTk5OTk4LDM2Njk0OS4wMDAwMDAwMDAzLDE1NzAzOS45OTk5OTk5OTk4NSw2MDYyMjguOTk5OTk5OTk5OCwzNzM4NDQ3Ljk5OTk5OTk5NDQsMjAxMjg1MS4wMDAwMDAwMDAyLDIyODU0NTEuMDAwMDAwMDAxLDEyODE5ODEuOTk5OTk5OTk4OCw3MDk2MTAuOTk5OTk5OTk5MiwyMDIxODMuMDAwMDAwMDAwMDYsMjI4Njk2Ny4wMDAwMDAwMDIsMjIzNjg0Ni4wMDAwMDAwMDA1LDI5NDI0NzcuMDAwMDAwMDA3LDI0Mzc4Ni4wLDQ0Mzk3NC4wLDc5NTEzNy4wLDg0NTQ3NC4wLDE5NTI4NzMuOTk5OTk5OTk5OCwyMTAxMDYwLjk5OTk5OTk5OTUsMjcyODk1LjAsMTIyMTYxMC4wMDAwMDAwMDAyLDUxOTEwNS4wMDAwMDAwMDAwNiwxODY2MDAxLjAwMDAwMDAwMTYsMjQzNDYwLjAsODA0ODc0LjAsNzYwNDIwLjAwMDAwMDAwMDIsNDk3NTA2LjAsNTYxMzI2LjAsNzc2NjAwLjAsMjQ2NTkyNS4wLDMwMDI5NzQuMCwxMjkzNDY1LjAsMzg4MjIwOC45OTk5OTk5OTI1LDEzMzczODYuMCw4OTY1MC4wLDQxMTk5NC4wLDE5MzkwOTYuMCw1OTgwNzYuMCw0MzI0MDMuMCw3Mjk4NDUuMCwzNDI4MjIuMCw2Mjg3OTMuMCwyMzk2MjMuMCw4NjYzNzMuMDAwMDAwMDAwNywyMzIxMzcyLjk5OTk5OTk5NzcsMjYwNTA3LjAwMDAwMDAwMDEyLDY3NjAyNS4wMDAwMDAwMDAxLDI3MzM1MS4wLDM0MjAwNy4wMDAwMDAwMDAxLDE0MzI4Ny45OTk5OTk5OTk5NywxLjA0MDE1ODI5OTk5OTk5OTZFNwpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTRUlSX1JLX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9SXzAuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTRUlSX1JLX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9SXzAuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEyZDIyNDcKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNFSVJfUktfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL1JfMC5jc3YKQEAgLTAsMCArMSwzMyBAQAoraXRlcmF0aW9uLHRpbWUsc3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vbm9kZS90cmFuc3BvcnQvcGlwZS9QSEwKKzEsVHVlIDI1IEphbiAxMSwwLjAKKzIsV2VkIDI2IEphbiAxMSw2LjAxNTYzOTIxODM2NjMxNkUtNAorMyxUaHUgMjcgSmFuIDExLDAuMDcyMjYyMjEyNzE4ODA2OTkKKzQsRnJpIDI4IEphbiAxMSw1LjIyNzA2NTAwNDI0MDQ4OQorNSxTYXQgMjkgSmFuIDExLDI3Ny4yNTQ5MzE2NTc0NTgKKzYsU3VuIDMwIEphbiAxMSwzNDIzLjAyNTk5NzY5NDk3MjQKKzcsTW9uIDMxIEphbiAxMSw5NjI0LjYxODcyNDE1OTkxNQorOCxUdWUgMSBGZWIgMTEsMTY0NDYuMDYzNjQ4NTM4MzA3Cis5LFdlZCAyIEZlYiAxMSwyMjgwNC4wODQzMjY2NDYzMjcKKzEwLFRodSAzIEZlYiAxMSwyODMyMS4wNTAwNzM5NDQ0OTQKKzExLEZyaSA0IEZlYiAxMSwzMjg5Ny42MDQzMTA3NjIxCisxMixTYXQgNSBGZWIgMTEsMzY1NzIuNTEyNTM4MDU2MTkKKzEzLFN1biA2IEZlYiAxMSwzOTQ1MS40NTg5MDk4Mjc1MworMTQsTW9uIDcgRmViIDExLDQxNjYzLjgxNjY5ODYxODQ3CisxNSxUdWUgOCBGZWIgMTEsNDMzMzcuOTgyMTAxNTQ1MDcKKzE2LFdlZCA5IEZlYiAxMSw0NDU4OS4xNDU3ODY3NTc4OQorMTcsVGh1IDEwIEZlYiAxMSw0NTUxNC41ODM4MDU2NTIyMgorMTgsRnJpIDExIEZlYiAxMSw0NjE5My4xNjA0NjcxNDAwMworMTksU2F0IDEyIEZlYiAxMSw0NjY4Ny4xMTI1NDYxMDA3MQorMjAsU3VuIDEzIEZlYiAxMSw0NzA0NC40NTE1OTY4OTcxNTQKKzIxLE1vbiAxNCBGZWIgMTEsNDczMDEuNTUyMDU3ODQzOAorMjIsVHVlIDE1IEZlYiAxMSw0NzQ4NS42ODg4MDgwNzY1NgorMjMsV2VkIDE2IEZlYiAxMSw0NzYxNi45ODIxMTU2NTc1NAorMjQsVGh1IDE3IEZlYiAxMSw0NzcxMC4yOTc0ODQ3NTI5MgorMjUsRnJpIDE4IEZlYiAxMSw0Nzc3Ni4zOTYwMjg0OTU2ODUKKzI2LFNhdCAxOSBGZWIgMTEsNDc4MjMuMDc1MzA1MDc2NzQ1CisyNyxTdW4gMjAgRmViIDExLDQ3ODU1Ljk1MjEyMzg5NDc4NQorMjgsTW9uIDIxIEZlYiAxMSw0Nzg3OS4wNTE5MDY3NjQwMzQKKzI5LFR1ZSAyMiBGZWIgMTEsNDc4OTUuMjQ2ODc4MTk0NTY0CiszMCxXZWQgMjMgRmViIDExLDQ3OTA2LjU3ODU1NDE1MDcyCiszMSxUaHUgMjQgRmViIDExLDQ3OTE0LjQ5MzA5MDIwNDE3NAorMzIsRnJpIDI1IEZlYiAxMSw0NzkyMC4wMTE4MzA4MDQ0NgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTRUlSX1JLX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9SXzEuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTRUlSX1JLX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9SXzEuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUyZmYyNjUKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNFSVJfUktfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL1JfMS5jc3YKQEAgLTAsMCArMSwzMyBAQAoraXRlcmF0aW9uLHRpbWUsc3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vbm9kZS90cmFuc3BvcnQvcGlwZS9QSC0xMSxzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9ub2RlL3RyYW5zcG9ydC9waXBlL1BILTMsc3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vbm9kZS90cmFuc3BvcnQvcGlwZS9QSC03LHN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL25vZGUvdHJhbnNwb3J0L3BpcGUvUEgtTkNSCisxLFR1ZSAyNSBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wCisyLFdlZCAyNiBKYW4gMTEsNC4zOTk4ODcxMjY4OTMxOTVFLTgsMi42MDAyOTA0ODEwMDQ0OTdFLTYsMS4xMTY1ODEyNjgwMjk5OEUtNSwwLjAwMjg3MjYyNzAxNTE4NTc2ODQKKzMsVGh1IDI3IEphbiAxMSw5LjM5NzQ4MzkwMTYyNjc0NEUtNiw2LjEwNTc1NzQzNDMzODc3MkUtNCwwLjAwMjM4NDk2NDQ0NzY0MTU0MTcsMC4xODQ0NjA5NTc1NTE4NjU2Cis0LEZyaSAyOCBKYW4gMTEsOS4wMDc3MTAyMDY5NDAxMDFFLTQsMC4wNjA2MzA0OTM1NTQxNjIzMzUsMC4yMjg2MjM1NjgxNTAyNDk2Miw5LjY1Nzc4Nzg5NzUyNjA4MQorNSxTYXQgMjkgSmFuIDExLDAuMDYwMDkyNDQzNTE1Nzg2MDUsNC4wOTY4NDM2NDUzOTcxNjQsMTUuMjUzODIxMDUxMDg0OTgyLDM4Ny44MTY2ODkwNzMzMTk2Cis2LFN1biAzMCBKYW4gMTEsMS4xMzg3MjAzNjYzNTQxNzUsNzYuNDg0ODk0MzAxMDM5MTUsMjg5LjIwNjA5NDA3MjIwNzcsMzQzOS4xMDg0NDczNTcwMworNyxNb24gMzEgSmFuIDExLDMuNDcyOTczMjg2NDM0Mjg2LDI1Mi4xOTExNDM3OTQ2Nzc2Myw4OTAuODA4ODcyMjg3MjkyMiw4ODU0LjI3MTYxNjA0Mzk5NAorOCxUdWUgMSBGZWIgMTEsNS43OTE4MTQ4MzA4MjIwNTksNDU2LjkxOTI5NTQ3NzY4OSwxNjE1LjA0NDIwNDM4NTkzMTYsMTQ3NDguMzg2Mzc0OTc4Njg1Cis5LFdlZCAyIEZlYiAxMSw3Ljk5MDc5MjI1MDQ0NDM3Nyw2NTEuMTgyNjEwOTU2OTU4NywyNTA4LjQ5OTg5MDU5MjYwMjcsMjAxOTEuMDUzOTczODQxODU2CisxMCxUaHUgMyBGZWIgMTEsMTAuNzY0NjM0ODQ4NDgyOTEzLDgyMC4wMDI5NTIyODczMTQsMzQzNS41NTE5ODQwMjYxMDM2LDI0ODQ4LjEyNjkzODM5NzY3NgorMTEsRnJpIDQgRmViIDExLDEzLjk3NzU5MDAyMzMyMjEyLDk1OS42MTk2NTY3NDAzNjk5LDQyODAuMTY3MDAxOTE3MDA2LDI4NjYxLjIzODkxMjQyODA1CisxMixTYXQgNSBGZWIgMTEsMTcuMDc5OTc1Nzc1NDM1NjYzLDEwNzEuMzAxODE1NzE5NzgzMiw0OTk0Ljc5MjQxMTc1MjU2MiwzMTY5MC41OTAwNjgxNDIwMTcKKzEzLFN1biA2IEZlYiAxMSwxOS43ODE4NDQzMTI5NzgyLDExNTguNDc0MTQ2MTY2MzI3Nyw1NTcyLjgwNDU0MTQ2MjY1OCwzNDA0My41NzAzNjg2OTcyNQorMTQsTW9uIDcgRmViIDExLDIyLjAwMTYxNTg1MDk1MjUyLDEyMjUuMjQxMjY4Mzk4NDczNyw2MDI2LjUwMDYwNjczMjQ5NCwzNTgzOS4yNDYzODE3OTM0NworMTUsVHVlIDggRmViIDExLDIzLjc2MDM3ODUxMzExMjczNywxMjc1LjYxODc0MzMzNjY0ODMsNjM3NS4wMzQzMDQ3OTM5OTgsMzcxOTAuMzgxNDI5ODE4OTkKKzE2LFdlZCA5IEZlYiAxMSwyNS4xMTk4OTM1NTc4NTExMDcsMTMxMy4xNzE2NjY1MDY1NTM1LDY2MzguNDU0ODUwMjgyNTg4LDM4MTk1LjM3MTU4NzE1MDIxCisxNyxUaHUgMTAgRmViIDExLDI2LjE1MTk5NTQ3NDQ2OTg3OCwxMzQwLjg4Njc2MzkxNzA0MSw2ODM1LjAxMjU2OTg1MTk3NSwzODkzNS43ODc4MTU1MDA3ODYKKzE4LEZyaSAxMSBGZWIgMTEsMjYuOTI0NzIyNzA2MDU0MTMzLDEzNjEuMTcwNjU1NjgyNzQ0NCw2OTgwLjE2MzQ1MzI4NDk1LDM5NDc2LjkwMDE1Mjg3ODc4CisxOSxTYXQgMTIgRmViIDExLDI3LjQ5NjkwNzA1ODY4MTA3LDEzNzUuOTExNzc3NjA0OTI0Myw3MDg2LjQ0MDQxNTM1OTEyOSwzOTg2OS42Nzg3ODI1NDc3OQorMjAsU3VuIDEzIEZlYiAxMSwyNy45MTY3OTQwNjA2MzkxODcsMTM4Ni41NjA3MjUxMDU3NjkzLDcxNjMuNjk5NTEyMDk5MjUxLDQwMTUzLjEzNjMwOTU3NDg3CisyMSxNb24gMTQgRmViIDExLDI4LjIyMjYwNDAxODUxNjAyLDEzOTQuMjEzMjM1MjYxNjI3NSw3MjE5LjUyMDE3NTIxMDE0Nyw0MDM1Ni42NTgxOTY1MDU3NworMjIsVHVlIDE1IEZlYiAxMSwyOC40NDM5MjQyODExODkyNjUsMTM5OS42ODc5Njg3NTA1Mzk1LDcyNTkuNjQxMzE0OTY4NDkxLDQwNTAyLjE1NTA2NDE4Nzg2CisyMyxXZWQgMTYgRmViIDExLDI4LjYwMzIwOTI1ODMxNTU2LDE0MDMuNTg4MzIyNTExNjE1Niw3Mjg4LjM0MzUxNjMwNjc2Nyw0MDYwNS43NDIzMTg2Mzk2MjYKKzI0LFRodSAxNyBGZWIgMTEsMjguNzE3MzIwNDEzMjA3OTY1LDE0MDYuMzU3OTcxMDk2NDAyNyw3MzA4Ljc5NzI3OTAzMzgzNDUsNDA2NzkuMjYwNTAwNTQwNAorMjUsRnJpIDE4IEZlYiAxMSwyOC43OTg3MjczNTQ3NzM0NTgsMTQwOC4zMTgzNTMwMDc2NjIsNzMyMy4zMjA0MzkzMTUzMDksNDA3MzEuMjcyNzExMTYyNDgKKzI2LFNhdCAxOSBGZWIgMTEsMjguODU2NTg5MTU5NTU3NjIyLDE0MDkuNzAxOTMxOTc0MDc3Myw3MzMzLjU5OTU0NzQ5Mzk4NCw0MDc2Ny45NjU5NjI5ODcyCisyNyxTdW4gMjAgRmViIDExLDI4Ljg5NzU4MTI4MDgxMjEzMywxNDEwLjY3NTg5NzM2MTMxNDEsNzM0MC44NTQwMDI4MzcyODMsNDA3OTMuNzg2Mzk2Mzk3MgorMjgsTW9uIDIxIEZlYiAxMSwyOC45MjY1MzcyODExODAxMDMsMTQxMS4zNTk5MTg3OTAzODY3LDczNDUuOTYwNjQ1ODgxODUxLDQwODExLjkxNDE5OTI4NDIwNQorMjksVHVlIDIyIEZlYiAxMSwyOC45NDY5Mzc1MjMxNzEwMjMsMTQxMS44MzkyOTU5NjA1NzA4LDczNDkuNTQ3MDE5MjAxODc0LDQwODI0LjYxNDc5MDc0MzYyCiszMCxXZWQgMjMgRmViIDExLDI4Ljk2MTI3NTkyNTEzNTQwMywxNDEyLjE3NDYwNzQ4NTM3MzYsNzM1Mi4wNjAzOTcxOTc3NjYsNDA4MzMuNDk2MTY1MTM3MgorMzEsVGh1IDI0IEZlYiAxMSwyOC45NzEzMzIwMjg0Nzc3NSwxNDEyLjQwODczNjA5NDg4MTUsNzM1My44MTg0MTQyODE5OTMsNDA4MzkuNjk2MDUyMTM2NDk2CiszMixGcmkgMjUgRmViIDExLDI4Ljk3ODM3MDkyNDA3NjUzNiwxNDEyLjU3MTk1MDI1MDM2NCw3MzU1LjA0NTkxNDg1MDYxMjUsNDA4NDQuMDE3MTY4MDk0NzUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0VJUl9SS19SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vUl8yLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0VJUl9SS19SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vUl8yLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNzQzMTZkCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTRUlSX1JLX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9SXzIuY3N2CkBAIC0wLDAgKzEsMzMgQEAKK2l0ZXJhdGlvbix0aW1lLFBILTEtRzY0MDAwMSxQSC0xLUc2NDAwMDIsUEgtMS1HNjQwMDAzLFBILTEtRzY0MDAwNCxQSC0xMC1HNjUwMDAxLFBILTEwLUc2NTAwMDIsUEgtMTAtRzY1MDAwMyxQSC0xMC1HNjUwMDA0LFBILTEwLUc2NTAwMDUsUEgtMTAtRzY1MDAwNixQSC0xMC1HNjUwMDA3LFBILTExLUc2NjAwMDEsUEgtMTEtRzY2MDAwMixQSC0xMS1HNjYwMDAzLFBILTExLUc2NjAwMDQsUEgtMTEtRzY2MDAwNSxQSC0xMi1HNjcwMDAxLFBILTEyLUc2NzAwMDIsUEgtMTItRzY3MDAwMyxQSC0xMi1HNjcwMDA0LFBILTEyLUc2NzAwMDUsUEgtMi1HNjgwMDAxLFBILTItRzY4MDAwMixQSC0yLUc2ODAwMDMsUEgtMi1HNjgwMDA0LFBILTItRzY4MDAwNSxQSC0zLUc2OTAwMDEsUEgtMy1HNjkwMDAyLFBILTMtRzY5MDAwMyxQSC0zLUc2OTAwMDQsUEgtMy1HNjkwMDA1LFBILTMtRzY5MDAwNixQSC00LUc3MDAwMDEsUEgtNC1HNzAwMDAyLFBILTQtRzcwMDAwMyxQSC00LUc3MDAwMDQsUEgtNC1HNzAwMDA1LFBILTQtRzcwMDAwNixQSC00LUc3MDAwMDcsUEgtNC1HNzAwMDA4LFBILTQtRzcwMDAwOSxQSC00LUc3MDAwMTAsUEgtNC1HNzAwMDExLFBILTUtRzcxMDAwMSxQSC01LUc3MTAwMDIsUEgtNS1HNzEwMDAzLFBILTUtRzcxMDAwNCxQSC01LUc3MTAwMDUsUEgtNS1HNzEwMDA2LFBILTYtRzcyMDAwMSxQSC02LUc3MjAwMDIsUEgtNi1HNzIwMDAzLFBILTYtRzcyMDAwNCxQSC02LUc3MjAwMDUsUEgtNy1HNzMwMDAxLFBILTctRzczMDAwMixQSC03LUc3MzAwMDMsUEgtNy1HNzMwMDA0LFBILTgtRzc0MDAwMSxQSC04LUc3NDAwMDIsUEgtOC1HNzQwMDAzLFBILTgtRzc0MDAwNCxQSC04LUc3NDAwMDUsUEgtOS1HNzUwMDAxLFBILTktRzc1MDAwMixQSC05LUc3NTAwMDMsUEgtOS1HNzUwMDA0LFBILTktRzc1MDAwNSxQSC1DQVItRzIzMDAwMSxQSC1DQVItRzIzMDAwMixQSC1DQVItRzIzMDAwMyxQSC1DQVItRzIzMDAwNCxQSC1DQVItRzIzMDAwNSxQSC1OQ1ItRzUyMDAwMQorMSxUdWUgMjUgSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzIsV2VkIDI2IEphbiAxMSwzLjc5Nzc5MDM4NTE2NjQ2NTVFLTEzLDYuMTU0ODcyMTc3MDkxNTc5RS0xMSw5LjQ4NjI2MDIwNjUzMjE2OUUtMTEsMS40ODY4MzA5ODkwNTAyMjA1RS04LDEuNTgwNTUxMzYwMzUyNzMzRS0xNywxLjE0OTQ0Mzc0MjA3NzIzODFFLTE1LDUuMTc3OTYwMTA5MTg1NDY5RS0xMywwLjAsNi45ODcwMDkyODYwMTk3NTNFLTI0LDEuNTI1NjY1NTM1NDQzNDM1RS0xNyw4LjUxNzI0OTc0ODQ2MzMxOEUtMjIsMS41NDg1NDA4NjIyNDIxNTg1RS0xMyw0Ljk2MDM3ODcxOTE1MTY1OUUtOSw1LjI0MDA2NDIzMjY4OTgxNzZFLTE4LDEuNTc3OTA4OTkzMjM4MDgyMUUtMTMsMy45MzQ0OTc4OTM3Mjc5NDk0RS0xOCwzLjQ3MTMxNzgwMTYwOTA1MkUtMTYsOC45NDQ3NTIxNzEwNzMwOTVFLTE2LDIuMDAxODU0Mzg0NTM0NTgxRS0xNSwxLjM1NTY2NjQxMzY1OTc4MzZFLTEzLDEuMzY0ODM4NDU5MzI3OTU3RS0xMywwLjAsMS40MjY2MzYxNjQ0ODk5ODQ3RS0xMCw0LjA1NDE4Mjc3OTM4Mzk0NkUtNiw0LjQzMjExODU0NTYzNjQ2M0UtNiwxLjExMzI2NzgxMjM3OTM3ODVFLTUsMS43NDQ2ODcwODczNzQxNzgzRS02LDAuMjEzNDQzMjY0OTcyMDU5NTQsMS40NjY5NTM2Njg2OTkwMjhFLTQsMC4wMDYzMjA3NDg5ODkxOTI2NTQsMi41MzAyNDkzNTQwMjUzNTE3RS02LDEuNTg1NjUzOTM4OTg0NzgyRS02LDkuOTA5NTQ1NDg1OTAzMjI1RS00LDEuNzcyMDQ3MjU4Mzg1MDk4RS00LDAuMTA1MTQyMjY4MjAxOTgxMDUsMC4wOTY5NzkyNTE2NjkxMjcyLDAuMCwwLjAsMC4wLDAuMCwwLjAwNTYwMzk3MDIwMzM5NTM3MywwLjIwMTkyNjgwNTIwODg0NjQsMC4wLDIuNTE2MDYzOTM2MDUyNzA2RS0xMSwzLjk3MjA1MzE3MjA0MTM5M0UtNywzLjk3ODQ1NzA5OTE3MjI1OEUtNywwLjAsMC4wLDIuMjc2ODM2NjYyMjI4NjQ2NEUtMTUsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMS4yNTg3OTUyNjAxNjg1MkUtNiwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsNi45ODk1MjA5OTgzODMzMDVFLTI0LDQuNzkxMjYwMzc4MzQwNjQyRS0xOSwyLjAxMTQwMzA5OTUzMTcxMjZFLTEyLDEuOTU4MTk0OTQ4Mjc2NDEzNUUtOCwyLjY5OTk5NzkxNzQ5MjQ0MTdFLTgsMS4zNDk5MTg0NjQ3NTMyMDY5RS0xMCwxLjg5MjA3Njk1MTEyNjYxNTdFLTksMi4zMjgyNjAzODk3NzM2MjYKKzMsVGh1IDI3IEphbiAxMSw1LjQ3MDQzNDM0OTA4MzIxNkUtOSw0LjY5MDU4NTk2MDM5ODg2NEUtNyw2Ljc0NTY1MzgwMDEwNjc0MkUtNywxLjY2MzExMTIzMDkzMDY4MDNFLTUsMS4zMDA1NzEzMDUwNDIwMDI2RS0xMyw2Ljc5MjA4ODY2OTQ5MzIzN0UtMTIsMS4wMTgwMjA2MDE3MTI5NDA1RS05LDAuMCw1LjA3NTY4MDQxNTI5MjM5NEUtMTksMS4wNjM3MTkwOTU1NzI3OTY4RS0xMywyLjY0MjQxNTY4OTUwOTk4NDNFLTE3LDMuMTM2NjUzOTQ1MDQzNjAzRS0xMCwyLjQxMjE0MDEwNjMwMzU5NkUtNiwzLjcxMjAzMTk5NDU4NDQ0NUUtMTQsMy4xODIyNjQyMjE2MDA0MzQzRS0xMCw3LjczNzI5ODEzNzk0NjQxN0UtMTQsMi4xMjgwMjEzMzk5NTE4NDM3RS0xMiw1LjM4OTk5OTE3NTcxODk1MkUtMTIsMS4xOTMyMjM2MjI0MTUyOTI1RS0xMSwyLjY2Njg4MTI0OTE5OTU4NDVFLTEwLDIuNjU0NDc1OTI2MTk0MjUzN0UtMTAsMC4wLDMuMDg0OTY2MDI4NTc0MjExRS03LDAuMDAyNTMwODgwMjIyNzgzNjIsMC4wMDI3NDM1MDExNzQwNTk4ODgsMC4wMDU3NzUwNzA3NzM0NTM4MzYsMC4wMDExNzg2NTM4OTYwOTc4MzgzLDE3LjI4NjgxNTM3MjgyMTcyLDAuMDUzOTYyMTIwOTk3ODYyMzksMS4zNjEzMTc2NDcxOTgwMDU3LDAuMDAxOTk5NDYwNTA1NjU4ODQzNiwwLjAwMTA2MDQ1NTcxNTUzMjM4MzksMC4xNzM2NjkwMTM0MzY4MTU3LDAuMDQzMzQ5NDg3NjMxNDY4NTgsOC45NTczMTYxMzk0NDMyMyw5LjIzNjE4NzkwNTU5MTQyNywwLjAsMC4wLDAuMCwwLjAsMS4yNjk4MzE5OTU0OTc1MjUsMTMuNjc4OTIxNTExMjQzNTQsMC4wLDUuOTMwMjQyMDA0MDYxOTMyRS04LDIuNzg5OTg3MjMwMTM5NDgyRS00LDIuNzk2ODgzODk4NTgzNTM4RS00LDAuMCwwLjAsMS45NDEzOTMwNjA0ODkyOTYyRS0xMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCw2LjEyMzI5NjA0MzIxNDI0MkUtNCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsNS4wNzgxODIwOTczODU1MDdFLTE5LDkuNzk3ODU5NjAzNTIxODUyRS0xNSwxLjk4ODMwMDEzOTY3OTI5NjVFLTgsNC4wNjk4NTEzMjAyMzA2MTlFLTUsNS41NDMxNzMwODkzODYzNDZFLTUsMy40NjI0MDAyMDYwNDkzNzM1RS03LDMuODQzMDM3NDQ0NzIzMDEwNkUtNiwxMDQuOTA1OTE1MDA4MTkzNTkKKzQsRnJpIDI4IEphbiAxMSw0LjY1NDk5NDY2OTI0MTI0OUUtNiwyLjQzMjczMDQ3MDg0OTk5NTFFLTQsMy40NTY1ODQ1NDEyOTU5NzlFLTQsMC4wMDM5NDE1MTk0NDgyODc0OTQsOS42ODE1MzQ2OTUwMjg2NDZFLTExLDMuNzQzMzQxNjI3NDExNkUtOSwzLjIwNzI4NDI1Njg0NTQxOUUtNywwLjAsMS4wODM4OTQwNDcyODEyODY3RS0xNSw3LjA4MTM0MzU4ODI1Mzg5OEUtMTEsNC4wOTUwMjczNDMxMjM2MDRFLTE0LDEuMDIzNjMwNTUwOTk5ODE3MkUtNywzLjgxMTUzNjQ2MzgyODk2OTNFLTQsMi40ODY3NzUyNjkwNTI3MzE3RS0xMSwxLjAzMzU2MDY1ODcxMzM5MUUtNyw4LjAzNjM3NTQyMzcxMDQwNkUtMTEsMS4yMjQ4MjM3NzkwMTA1NjRFLTksMy4wNDAxNTg4NjAxNDAxMzI1RS05LDYuNjQyODQxNTg3Mzg2NTQ2NUUtOSw4LjQxNzE1OTA5MzgxNzY0N0UtOCw4LjI2MjY3NDE4MDE4Mjc3OEUtOCwwLjAsOC43NTExODg1OTg3NTIzOEUtNSwwLjM3OTkyNDQyMjAyMDg3NzQsMC40MDg4MTgwOTU3NDI4ODk4LDAuNzA0MzcyODU2NDUxMTI3MiwwLjE5Mjc2MDUyNjk2NjYxNDA1LDk1OS4yNTA4MzE5MjM2NDUxLDcuMDExODE1Njg5MjY0NjEzLDEyMy4wMDgxNjM2ODIwMTI2NiwwLjM3NTkwNTIwMjcyNjIxNDUsMC4xNzI2MTg2NDY3MTYyMDgyMiwxMi44ODcyOTQyMDA1NDIwMjEsNC40NjEyNzAxOTM4MTk4MzQsNTIxLjcwOTg5NDQ2ODQwODgsNTcwLjU5MzMzMDE1MDI3NjgsMC4wLDAuMCwwLjAsMC4wLDExOC40MTI5MjQwMzkyMDgxMiw2NjguOTAzODI2Njc1NDY3NiwwLjAsMS44NDcwOTAxNzY4NDk0NzIzRS01LDAuMDQ3MDcwMTMyMjE2NTEyODIsMC4wNDcyMzU4NzA4Njg4NzAwNywwLjAsMC4wLDEuMTU0NjE1NTU1MjkyNjI4M0UtOCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjA5NjgwNzk2MDcxNzUzNTc1LDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwxLjA4NDYyNTI0ODU1Mjc0MjdFLTE1LDEuMDY4ODQzNDA4MjYwNTAxMkUtMTEsMS4zMjExMTk0NjAxMzExNjA4RS01LDAuMDExMDAxMDYxODc0NTA1MjIxLDAuMDE0NzUxMjg4ODM4MzE0OTI2LDEuMTQ0Njc4NjU3MTE2MzQzOUUtNCwwLjAwMTAwOTg4OTk5MzgxMzc2NDMsNDY5NC44Nzg5MDk1NzQ3NjIKKzUsU2F0IDI5IEphbiAxMSwwLjAwMTM3MzQyMDk2MDc0NDYwNjUsMC4wNDk4MjkwNjY2MDYwMzQyNTYsMC4wNzA1MTgwNTg1Njg4OTE4NCwwLjUyNDc2NzI1NTEwMzA3MTIsMi44MDc3NjQzODA4MDIxODc2RS04LDguNDc3NDA2MjYxMzg5MDU0RS03LDUuMDc4NDYwMjg5MzkyMDk2NUUtNSwwLjAsNi4xMDczMzQ4NTg1MzI1NDNFLTEzLDEuOTM0MzkwODg2ODc1OTM2RS04LDEuOTM3ODU4NjI0Njc2MDI0RS0xMSwxLjY4Mjg2ODA4MTI4Nzg2MTZFLTUsMC4wMzg3MTE2MDU0MzQ2ODg4MSw2Ljc3MjYxOTM4NTQ0NjM3NkUtOSwxLjY5MTQ3Mzc4NTczMjQ5NDdFLTUsMi43NTk4NDA3NTU5MTUzMzNFLTgsMi44OTk0MzUyOTA5OTkwNTk1RS03LDcuMDQ5NjMzNzM0OTQ5NTY1RS03LDEuNTE5NDg5MzI1NTE4NUUtNiwxLjMzNjc5NzkwNTIxNTc4MTZFLTUsMS4yOTI2NjAyMzgzMTY3MzAyRS01LDAuMCwwLjAxMjQ1MjkxNzc1NjAyNDA0NSwzNS4yODA2NTI1NDI2NDgwMywzNy42NjYwNTU0MTM3NDE4NCw1Mi44MDQxNjgxNzM4ODE3MDYsMTkuMzc4MTk5MDA5NDgwMzMzLDM4MjI0LjAxMTE0MjQwMzczLDYwNy45Mzg5ODg5MjU5OTY2LDc2MjUuOTU2OTA4MTI2OTk2LDQyLjM3Njg0NDIwMzUwNDEzLDE3LjM4NzM3MTQyNzM2OTU4Nyw2NzQuMzY4MzQzNzgyOTUzNywzMzYuMzc2Nzk1NTUzMjE3OCwyMTc4Ni40NjEwNjcxMDgzNTcsMjUxNDUuMzEwNDQ1MDIzMDI0LDAuMCwwLjAsMC4wLDAuMCw3MzgzLjM1MDUwMTcxOTk4MiwyNDE4MS4zMTQwMTgzNDYwMjQsMC4wLDAuMDAyODYzNzk2Njg5MjUzMDU2LDQuODMwMjMyMjgxMzM2NjQ3LDQuODUzNzU4MzU5Njk1MTE4LDAuMCwwLjAsMi43MjI0OTc5NzE4NjI5MDIyRS02LDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDkuODM4NDIwNjk2OTU1NzMzLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCw2LjExMjczNDMwNzEwMTUzRS0xMywzLjg2OTM2OTUyODY3MTI0RS05LDAuMDAzMjk1NDE5MDUzMzIwOTk1NiwxLjQ4NTczMTg3ODI4MDMzMSwxLjk1ODYwMTI4NzQ3NjU0OSwwLjAxODI3Njc1NjU0OTI3ODQ1OCwwLjEzMjU1MTMyMzgxNzYzODYyLDE1NTY4NC42NjU1OTI4OTQ3NworNixTdW4gMzAgSmFuIDExLDAuMjY2NDcyNTgzMTY0ODA4LDcuMTMwNDIzMTQ0MjcyOTMyLDEwLjAxODk3MTk3NjQxNTQyNSw1Mi40MDI2MDQwNjE5MzE3Niw1LjYxMDg3ODg4MTg0NTI5NkUtNiwxLjM1ODU3NTUwNjI4MzY1NzRFLTQsMC4wMDU4OTEwMDI2OTc3Njg4MTUsMC4wLDIuMDQ1NDg2NjU2NDgxOTc0N0UtMTAsMy43MTk3OTA4NDEzOTk0OTE3RS02LDUuNzA0NDYwMzYzNjk4MDU0RS05LDAuMDAyMDI3MTQzMzY0OTQ1MTMzLDIuNjE5MjkwNDcxNDMwNjI0LDEuMjgxMzc3ODkyMTI0MzQ3NkUtNiwwLjAwMjAyMDcyMjE4MzQzNzI0NDUsNi4xNDQ2Mjc2NzA0OTY4NDg2RS02LDQuODQ3MTkzMjAyNTg1OTQzRS01LDEuMTUyMzk0OTA2NjEzODM0NkUtNCwyLjQ0MzE5Njc4NjkwMDk4N0UtNCwwLjAwMTU2ODc2NTM1ODg5NzUxLDAuMDAxNDg1NTg1OTcxODAxNDQ0LDAuMCwxLjMxODU0MTYyODIwNjA3OTMsMjM2NS4wMTAwMzc5NjYwOTM1LDIzMDAuNjI1OTA5ODIwMjE3LDIxNTcuMTA2NjU1MDgyODY0LDEzMjIuNjAzMzQ1ODQzNTU3NSwzMjUzNDQuNTA5NDE1NDM2NSwyODQ0MS4wNjQzNjIyNDY2NTIsMTI1NjA3LjUyMDE4NTc1NjE1LDMzNDMuMzU0NzEzNDY3ODAzLDEyMjYuODUyMTU0ODM5NTMzNiwxMDU5Ni4xMzI4NDY1Mzc4OTYsMTY3MTguMjk5MjcxMjQ2NjUsMTkxNDY4LjYyOTM3ODQ0NzQ1LDIzODg4Ni45MDkzNTQ5MTU1MiwwLjAsMC4wLDAuMCwwLjAsMTE0MTI2LjU2MTk3ODkwMjM2LDE5MTE5Ny45MzI4NDM4NDkyNywwLjAsMC4zMjYzNjk1OTM3NDk2OTYsMzQxLjc3OTU0MDg2NTA2NzEzLDM0Ny43MzkxOTYyMTUzNjAzLDAuMCwwLjAsNC40NDQ4NTc1NDE2MDYyNTVFLTQsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsNjY0LjU1NDIyNjA3Nzk1NDYsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDIuMDQ3NzM4NzA4NjAyMDA5MkUtMTAsOS4wNjA4ODU0MTg1NDcwNDVFLTcsMC41NzA4MzI5OTE3MjQxNTgyLDE0OC4yMDAxNzg2OTQ5MTMxLDE5MC4yNDAxNDIyMzExNTg1NiwyLjE3NzQyNzEwOTEyNzQxOTgsMTMuMDg5MTY2NzYyODc0Mzk1LDEwNTU2NDkuODE0NzU4Njk5OQorNyxNb24gMzEgSmFuIDExLDQwLjI1OTA1Njk3ODUxNjIzNCw3NDcuMjU0MzMxODY4NjI5MiwxMDI2LjQ0ODU2OTI1NTg4MzMsMzM1OC40NjI1Nzg5ODM5MzkyLDguODUwMzczOTA2MzgzODY2RS00LDAuMDE2NzE3ODYwNjQ3MTAzNjQsMC40OTcxNjM4OTQ1NDU3OTIzLDAuMCw1LjA3Mjc4MTgwMzY4MjA1NEUtOCw1LjczMTA0MjUzNDc0MTU1MkUtNCwxLjI3ODEyOTk4NDUyNjgwODhFLTYsMC4xODEzNzA2ODcyNzQ5NzUyLDExOS43NjUyODI4OTMwNzI2MSwxLjkxNDgxMDIyOTU3MTcxMDdFLTQsMC4xNzgxNjM3MzM1NzU4MTI3OCwwLjAwMTA1ODQ1Mjc3MTk0NTU4NTksMC4wMDYzMjAwMzkwMzE2NjAxNjYsMC4wMTQ2MDU0NjkwODg0MzIwODcsMC4wMzAzODgyOTY1ODkyMjczLDAuMTM1NTc5MDEzNDE3NDI2NzksMC4xMjM4MTQ5NTE0MDIyOTkxMiwwLjAsMTAzLjA3MTUxMDU5NjQ1NjEyLDU1NTg2LjYyMjIwNTAyMjUyNiwyNjUzOC4yNDU2MDI4MzQxNzcsMTUzMjMuMjA5NzY2ODQ4MjcsMjY1MTAuNTMxNjg3MjE3NTgsODIyNTMyLjkwOTMwMDcyMDYsMjAyMTA1LjkyMzU3NzI1ODEsNDA0ODQxLjE0NzM2NjE4MjgsNjQwNjcuMjc3NDM4NTY2OTksMjc4NTQuOTQ1Nzk0NTMzNDQzLDM0OTAzLjY5MDU0NjU1NzczLDE3MzgxOS42MDI1ODc3MzE1Niw0ODgyNjAuMDQyMjU5OTA4Nyw2MjU4MjkuODU2MjY2NDY4MywwLjAsMC4wLDAuMCwwLjAsMzU1ODk1LjA2MTM4ODA1Miw0NzI1NTQuMzg2OTcwMzI2OTQsMC4wLDI4LjAwOTA3MjAwNTEzNzM3LDEwOTg1LjMxNTY0NTM2MDUyNCwxNDg1OC43NTcxMzgzOTYxNjIsMC4wLDAuMCwwLjA1Njc4NzIwNDc0NzUzNDg3LDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDI2NTE2Ljc1MDk0MjY5MDI0MywwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsNS4wNzk2NDQ0OTkwNjQ0MzFFLTgsMS42NDcxNzgzODQ1OTk0MTdFLTQsNzcuMTY0MDIyMzU5NTE2OTMsNzU0Ny4zMTAyMjgxOTUyNTYsNzA2MS4wNDE1NjYwOTY1OTcsMTk4Ljc3MzcwMzI0NTk1NjcsODEyLjE4MDgyOTQwOTI1NjQsMjQ3MjA5Mi45MTExNjk3NjU1Cis4LFR1ZSAxIEZlYiAxMSwzMzc0LjQxOTE3Mjg1NjE0MSwyMjk1Ni40NDU1OTUzMjUwNTQsMjgwMzkuOTg2MjYwMTQ1NTg2LDg1MzUxLjY5Nzc0NjA3NjM2LDAuMTAxNTUwNTYxOTA0OTA3NzYsMS40ODg5ODUyNTE1Njc5NjM0LDMyLjU1MTQ3ODAwODgzOTQ3NCwwLjAsOC44NzQyNDA4MDEwNDE5ODRFLTYsMC4wNjY0NDQ0NTc5NTY2Nzc5MiwyLjA0MDAyNzE1NzgwNzgxMDZFLTQsMTIuNzk1MDQ4Njc5OTgxNDE2LDUyNTQuNTQxNjU0OTQ1NDQ3LDAuMDIxMzQ1NzQ1MDI3NTE3MDI2LDEyLjM3NzkxMjk2NDgwOTQyMiwwLjEzMDAzOTA5NzAwMTQzNTQ2LDAuNjA1ODk4OTM2MTYwNjM0OCwxLjM1NDIyMTEwNTA0MjA2NiwyLjc1ODEzMTUxODQ1MjI5NDUsOS4xNTkzMzI0NTA0MDI1MSw3Ljk5OTkwNTY1MDI3NzYyNCwwLjAsNDk4NS4yNjAxOTExODcyMTI1LDIyMzgyNi40MDQ0NzE1NTYxLDczODMwLjg0NjgwMTg1OTU5LDM2NTYzLjYyNDQ5MTMyNjg3NSw5NjgwNi41ODk0MDkxNDAwMywxMzYyODYxLjQ5NTMyNDMxNDgsNDc2Mjk2Ljc3NzkzODgzMDk2LDczNDcxNC4yNzk3OTczNzIsMjE3Njg1LjY2NzkzNjg0MjYzLDEwODIxMS40NTg3MzY5MjMwOSw2NDAwNi41MjQ5NzczMDMyNyw0NzA5ODkuOTM3MzM5ODE3NjQsODExNjY4LjgwMDgzNzMyMDMsMTA1MTQ4OC4xNzQxMjI4NTI1LDAuMCwwLjAsMC4wLDAuMCw2MzgxMDEuNDIwODk1NzA5Miw3NzU5NzYuNTA4NDk2OTA2MSwwLjAsMTY0Mi40MTQ2MTM4MDg2NzgzLDYwOTUzLjY0ODUxMDI5NzQzLDE0NTk4NS4yNjk2NzQzNDc5OCwwLjAsMC4wLDUuMzcwMTg4NTI2NzA3MDMyLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDI4MzI0MC4zNzU0OTEzNzM5NCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsOC44ODg5NDQyMzc1MTYxMTVFLTYsMC4wMjE3MDE4MTcwODgzMzczNDMsNDI5NC40MTAzMTcxODcxMzYsNjEwMzAuMjA0ODI2NjI3OTk2LDM1MDkwLjc3ODMxNDk1MTExNiw3MjgzLjgwMDg0MDMzNjk3Nyw5Njg3LjE0NTkzNTYzNzYwMiwzOTcwMTY2LjA5NTQ2MDg2NAorOSxXZWQgMiBGZWIgMTEsNDI3MjAuNDU3Mzg0MDkxMTIsMTAxMDE3LjczNzExOTU4OTUxLDExMzc2OS44NzQ2NzMxNjU0OCwzNzkzNTMuOTgyNTA1MjYwMiw5LjE3MTI5MDQ1ODQ3NDY4NywxMDYuNjY1NTI3NTk3ODA3NzcsMTcyNC40NjIwMjA1MDc4MjA5LDAuMCwwLjAwMTE3NjIxMjA1ODQ5MTY4MSw2LjIzNjM5NzIyNTc1MTc5MSwwLjAyNDc1MzgxODY2NTM1MzE5Myw3NTcuNzkwNzA3MjMwMjI5Niw5NzA1NC41NDA5MzgxODg2NiwxLjkxODcxNTc2ODYyMjc2NTIsNzIyLjI3Nzc1Mzg1NzUzNjQsMTIuMzM5NzcxMTI5MDE3NDUzLDQ3LjAxMDU4MTExNzQ3NzkzLDEwMS40MTM2MjQ5OTE2MDE4NCwyMDEuOTA0ODI3MzM1ODkwMDIsNTE1LjMyMjY2MDE2OTgyNTcsNDIzLjU5MjI2NzA3MDI0NDcsMC4wLDcwOTM3LjA3ODcwNTY4MzUsNDM5MjM5LjIwNjQwODE0MDYsMTI2OTM5LjQwMTEyNjg5MjE1LDU5MjAxLjk5Njg0MTY4MjYzLDE4Mzc1OC4zNzk0MjcwMjY4LDE4NjM4NDYuNTk2ODA2MDQ0NSw3NjY1MDUuMDA2NDQ5MzMxNiwxMDUxNDg3LjM5OTA4NDAyODYsNDAyMzg1Ljc5Mjg4NzM5MTIsMjA5Njc3LjkxNzQxMzQ2ODk3LDkyMTAxLjUxNjYzNzUyOTksODAxODkzLjQ4MzkzNjE5MDcsMTExMTg4Ni42MjU1NTc5Njg5LDE0NDgyNzguMjI3Njg5MjQ1MywwLjAsMC4wLDAuMCwwLjAsOTA3ODA2LjA2MDY5OTkxOTIsMTA1NjMzNC43OTQ3OTk3NzUxLDAuMCwzOTc3NC41MjU4OTE4MTYwMiwxMzMxNDMuNTI3NzkyMjc0NjMsMzg5NTY0LjA5OTE2ODc4NDU3LDAuMCwwLjAsMzcyLjk4MjQ1MTgxMDk4NzUsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsNzgzNzUyLjI2MzIzODM5MDcsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMDAxMTc4NTc3NjA3OTI4MzU2MiwyLjIzMTMxNTQxNTI3NTIzMywyODExMy43Mjg0MDQ5MzU0MiwxNTE0NDQuNjk3Mjg3MTc4Myw3MzU2OC44MDcxNjMyMzI1Niw0MDMzNC41NDEwMTMxNjQzOTUsMjc4NjQuMjU1MTExNzQ2NjQsNTM0MjE1MS4zOTM3Nzg5NTEKKzEwLFRodSAzIEZlYiAxMSwxMjA5ODEuNjcwNTg1NzcxNTMsMjAzNzYyLjIxNjE3ODYyNCwyMjMzNjMuOTI4MjgzMzE3NjgsNzcwMDg3LjgwMTc1MjU3NDQsNjYyLjkwOTUzNTE5NDIzNTIsNTE4MS41MTI3MDY1Nzg5MTEsNDAyNDkuMDYzMjcwMTQyNDA0LDAuMCwwLjEyNzAzNjE4OTc3NjE1NjA1LDQ4Ny4yNDA0NDc4MDk0MTQxLDIuNDQ1MDU2NTM4NzI2Nzg3LDI2OTExLjUxNTY5NDc1MjE1LDM1MjEwMS40MzkzMTE0MjIsMTQzLjMyMTg2ODI0ODk0NTk1LDI2MDkzLjIxMDU3MjEzODIsOTE5Ljg3MDk0NTYwNDYwNzQsMjc2OC42NjgyNjY5ODAzMzE3LDU0NTEuNDQ4MjQ5MjU3MDI2LDEwMTI2LjczNTk2NTc0ODU0LDE3Njg3Ljc4NDM5Nzk0MTY1NCwxMjI3NC4xNTY4OTgxNjIzOTMsMC4wLDIyMTU3OS40MjY2MDk5OTQ1NSw2NTI0NTIuNjk3NzY5MjY3NCwxNzY4ODguOTg1NDA5MjIxLDgwMDA3Ljk3NTQ0NTY3NTQyLDI2ODc0Ni4xOTIzODM3NjQ3LDIyOTI3MDIuMDI1NTQxOTM3LDEwMzIzNjcuOTA5MzYyMjg5OSwxMzI3OTQyLjU3NTkyMDk0NzYsNTgwOTc5LjIyODMwOTIxOTUsMzA5NjA2Ljg5OTAyMTMwODksMTE2NjkwLjA0MjM5NjkxNTg5LDExMTE5ODguOTk3MTE3MzI4MiwxMzY5MDUzLjc1NTI1NDg2OTMsMTc4ODk3MC4yNzA2MDUxODA5LDAuMCwwLjAsMC4wLDAuMCwxMTQyNTc5LjQyMjY1NDY4NzQsMTI5NTg1OC4wMDYwMDYwMDMsMC4wLDE3MTU2OS40NzY0MDY3MTEzMywyMDc1MzAuMjQ4MjA0ODU4Niw2NTk0ODMuMjU4MTkzOTkyLDAuMCwwLjAsMTMyODEuNzgyNDcxMTIxNTMsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMTM0NTY0OC4wOTEwMjQ1NTYsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMTI3MzQyNTU4OTU1MDM1ODUsMTg5Ljg4MzE3NDExNjI0MDk4LDY0MDMwLjEyMjYzMTQxOTAzNSwyNDkwODYuNTcxNzMzNjAxNSwxMTI1NzIuMjAxMTU5MTU0MzMsODc5MzQuNzYzMzE0MTg3NSw0ODU3Ni45NzI1ODExNjgxNiw2NTA4Mzk0LjgyNjUzODMyMworMTEsRnJpIDQgRmViIDExLDIwOTI0MC45NTQzMzIzNTY0MywzMDY0NDUuNDk4MjU5NTQwMSwzMzE3NzcuMDcxMDgwMDIwMywxMTYxODkxLjU5NTQ5MTA1ODQsMTg2OTIuOTU5Mzg4NTA1ODI4LDUwNTA0LjY5MjAxNjQ0NiwxNzcxMDcuMzAxOTg4MDYzMTUsMC4wLDExLjQwODU3NjgxMDQ0Njk5NSwyMDc3MS44NjkzOTI5MjE0MSwxODUuMjkxMjU2NDAxOTI3OCwxNzYxNjMuOTY5MDM2NDMwMzgsNjY3NDIxLjg5NjQ5MDY3NDksNjI5MS4yMTU1NDI4MjIyODcsMTgwNzc1LjMyOTI1ODg3MTUzLDIxOTkxLjUwNDkxODYzNjI5LDQ0NjMzLjM4MDA5NTg0NjY3NSw2NDczMi42MjgwMDEyMDIxNyw5NjUyMC4zMjAzNTY1MzUwNiwxMjE2NDAuNjAxOTMwMTA0OTcsNzA2NTQuOTM0NTM4MjA5MjksMC4wLDM5ODExMS4yMjIzNjI2ODYsODQxNTA0LjA0MTMzMjg3NSwyMTk5OTAuMTg4OTc5Nzk4NSw5NzcyOS4yMjgxMTk0Nzk3LDM0MzYxNC4zMDQwMzY5MjA4MywyNjQyNTM1LjY5MDMyMDcyOCwxMjU4Mzk1LjQxMzMwNjkyNzUsMTU1NjIzMy4wMDUzMTUwNTg0LDczNzQxNy42MzIyMDE2MTcsMzk3OTgzLjg3OTM2MTU4NjQsMTM3MDMwLjUxMjMzNTMwMzUsMTM3OTAzMC45MjY2NDQ1NTQxLDE1Nzg5MjUuNzU1NDk4MTYzOSwyMDY3NDI2LjQxODY0NjkzNTYsMC4wLDAuMCwwLjAsMC4wLDEzMzYxMzkuODk3ODIwNzY4MiwxNDkwOTk5LjMyNzU2NDU3MTUsMC4wLDM0NDg4OS45Njg4MTYyMTIwMywyNzQ4MTkuMDY0NTYyNTQwOTcsOTExOTAwLjgwNjc3NDUwMDUsMC4wLDAuMCw4MjU4Ny44Nzg0NTc5NTk4LDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDE4NzM5NzMuMTA4NDExNjE3NiwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMTEuNDQ0MTQ1ODg2ODQ3NjI0LDExMTc0LjAyOTYyMzc5NDQ3MSwxMDE1MjMuMjQ4NjcyOTU4NTUsMzM5MzYzLjM1MDIzNDQyOTMsMTQ3NTcyLjQyMjA3NTMxNTg3LDEzNjkzNy43NDY0NjcwOTk3LDY4MTc3LjgzMTIwNjE5MzA4LDc0NTU0NjMuMjM5NzA2NTY0CisxMixTYXQgNSBGZWIgMTEsMjkyMzk5LjkzNzI5NDI4NTA1LDM5Nzk0MC43NTI2ODk2MDY0LDQyNzg3Ni4yOTQyNDk2NzcsMTUxMTU5MS40NDc1MjQ2NDE0LDgzMjU3LjQ0NjIxNTU5NDU3LDEzMzkzMy45NTM4MzA0MzQyNCwzNTkzNzUuOTI2NTk5NDg5OSwwLjAsNzI1Ljc2NzU5ODY5Mzg5MzMsMTM0MzU5LjU5OTEwNzkyNTg3LDcyODUuMjMzMDczMzA1NDk3LDQwNjQ4OS45MTM1NjA3Nzc1LDk3NTU2My4xMDE0NTc2MDEyLDQ4MzA2LjA4NTA1Njc0NjA1LDQyNTQ1NS40OTU3MDIyNDczLDg0NTk0LjQ1MDUzODM5MDI0LDE0NTMyMC43MjAyNDc1MTIzMywxODQwMjguMDMwODUzMjg4ODMsMjUxMjAyLjcxOTE4NjM2MTgyLDI4NjY4NC43NDQyMDY1MTUzLDE1NzIwMi45MDA5NTM1MDEsMC4wLDU2NzA4OS44MjM3MzA0ODA0LDk5OTE1MC44NTQ3NjUwNjYsMjU1MzI5LjU5NTUzOTM3MzMsMTEyMTM4LjMyMTEyMjEyODksNDA1Nzk4LjAxMDE3ODM2NzE0LDI5MTg4MzkuNTYxMzI5NDM3NCwxNDQxOTU3LjA0NDI0MjgxODQsMTczODA2OC40ODIwODk5OTU5LDg2Njg5OC4wMjUwNjMxNjkzLDQ3MTU2NC42MTY2MzA4MTIzLDE1MzI1MS40MjUwMTc2NDEsMTU5NzcwMy4xNDc5MTc3MzIsMTc0NDczNS45MzMyMzU4MDA2LDIyODc2NTMuMDkxODY5MDM2NywwLjAsMC4wLDAuMCwwLjAsMTQ5MDE0NC4zNTk1MzkzMiwxNjQ0OTg4Ljg5MDQ5MjQyOCwwLjAsNTE4MDU3LjU5NzM2NTc5MjU1LDMzMTYwNS4wNDE0OTI2MDMyNSwxMTI5MDE5LjM5NjIyMzcwNzYsMC4wLDAuMCwxODcyNDkuOTUyNTE4NTMyNiwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwyMzI5NzM5LjI4OTE4MDU4MywwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsNzM2Ljk2MTA0MTIzNTYwODUsMTQ4MDU4LjYwMzcyNDMzMTk3LDEzNTY0OS43NjA3NjQwOTI5Niw0MTY1MTguNjk2NTc2MjAwMiwxNzY5NjkuNzY2ODQ1NjI4MTIsMTgxMjQ0Ljk1MTk4MzY1MTE4LDg1MTQ4LjcwNDIzMzM2NDczLDgyMDExNDAuMDkxNjg3NzgyCisxMyxTdW4gNiBGZWIgMTEsMzY0MjI4Ljc1MTMyOTM2Miw0NzQ0NjQuMzg2MjQzMjQwMSw1MDc5OTcuNjAwNDk4Mjg4NiwxODA0MzY0LjI5NjU3NDU0MzUsMTY4OTAzLjY1NDQ2ODAyODQzLDIyNjE5MS40NzY2NjgzMTMxNyw1NDIyODIuMzM2MTg2NDE3NSwwLjAsMTc3MTIuNjE1NDU1MTg5NDMsMzA2ODM3LjEwOTYxMzIwMjQ1LDUyMjg0LjUxMTE0Mzc0NzMxLDY0ODY0My44MjExNjA5NTM4LDEyNDY5ODYuNjM3NTY0OTQyNywxMTcyODQuNDA1NTM3NTc1MjUsNjg0NTg0Ljk2OTE5ODQyMjcsMTYzMTg0Ljk0MDA0Nzc3NDg3LDI2NDk2OS4yMTk5ODY5Nzg2LDMxOTExMi43MDg3NjQ2MDY4LDQyMDgxNy42ODI0NzgzMTIzNCw0NjE2OTAuNzM5NDE5MDk3NCwyNDcxMTQuODY2Mjk3OTg1NSwwLjAsNzE0MzA4LjQ2MjUwNzQ2OTIsMTEyNTU1Mi4yNDg4NzExMzU1LDI4MzM0MC40MDE2NTA1NzI2LDEyMzQ5My4wNTY3ODUwODQwNSw0NTU1MjMuNTY4NjUwNjQzMzQsMzEzMjA3My4yMTAxODk4MTc1LDE1ODY0ODYuNDIxODMyMDE4MywxODc5MjY2LjcyMjU4MjkyNzQsOTcwMTkyLjMyNDkwMTM4MjksNTMwNDk5LjU2NTk4OTk5NDQsMTY1ODU4LjI2ODYwMjQ5Njg2LDE3NzA4NzQuMjIxMjA4NTAxNCwxODcyNzI2LjEzNjcxNzgxMDMsMjQ1Nzc3OS4zODY3ODIzOTE1LDAuMCwwLjAsMC4wLDAuMCwxNjA5NjM2LjU4NzQ3NjY1MzcsMTc2Mzc1MC44MjQ0NDE2Njc2LDAuMCw2NzIzMzUuMTQ1NTg4MTYyLDM3NzQ5OS43ODQ2ODE4MDc3NCwxMzA2Njc4Ljc2NjM0NDU4ODcsMC4wLDAuMCwyOTY1NzQuODU4NDQ0MTE1OCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwyNzAzMzMxLjk4ODYxODQxMiwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMjE0NTMuMjU3ODY4MTc1OTksNDM5OTI0LjE4NjU4ODI3NjkzLDE2NDU1NC4zODM1OTAyNjE0LDQ3OTM5Mi4yNzU4MzIwMDU5LDIwMDY1NC40MTI4MzcwMTc3NCwyMTg2MjYuNTA4NDA4MDI5ODgsOTkwOTMuMzAzNTA5MjUxMzYsODc3NTMwMC43MjgyNzI1MjcKKzE0LE1vbiA3IEZlYiAxMSw0MjMxNTkuNTk5NTE5Mzg4NCw1MzU5NDMuNTY5NDgxNTA1MSw1NzIyMzEuMjcxNDg1MDAyNCwyMDM5NzM3LjA0MzYxNDU2MjgsMjU0NzI5LjYwNDIxNzI5NjcsMzEyMzg4LjQ4MDQ3MjcxMDQsNzA1NTk1LjQyOTgyNDgzMzQsMC4wLDc1NzYzLjE1MTc2NzU2ODMxLDQ4NzI3OS4wNTQxMTk5OTA0LDEyNDQwMi40OTM3NzE5OTU5Nyw4Njk3OTIuOTQ0ODQ4NjIwNCwxNDcyNDEwLjk0MDkyODUwMTUsMTkxMTIyLjM4MDYyNzI4NzksOTIyMDQyLjQ1MzA2Nzk4NDIsMjQwNDIwLjY0MDcwNDI0NjQ3LDM4MDEzNC4yOTM0MDY2OTQ3LDQ0NjYwOS45NDQ4MTY1NTk2Nyw1Nzg3MDcuMDU5NDIwNTE5Nyw2MjIxNTEuNjg2NzgyMjIxNSwzMjg3NjUuOTQ0NzU0MTEyMiwwLjAsODM1NzQ4LjY5MjA0MTQ4MjEsMTIyNDE3NS43NDYxMjc1NjIsMzA1MDEzLjc5MjM5MjU0OTQ1LDEzMjI0MS4yNDc4MTY5NjM3LDQ5NDI0Ni43MDU2NzM3MDM0NiwzMjkzNzkxLjQ1NjY4ODc2MTIsMTY5Nzc2OC43NDI0MzAxMTEsMTk4Njg1OC43NTI2ODkwNTAzLDEwNTA0OTMuNTEzNzQ4OTQ2OCw1NzY0NDguMTY1NDY4OTM5LDE3NTQ3MC45ODI2NTQyMzUxNSwxOTA0Nzc4LjU0MjE4MzIyNDgsMTk2OTgxMS42MTk0OTUyMDQ2LDI1ODY5MDMuMjk1NTA4OTAyNSwwLjAsMC4wLDAuMCwwLjAsMTcwMDYzMy45OTM2ODY5MzE3LDE4NTM3NzUuODYzNzEwNjk3MywwLjAsODAxMzU2LjU4MDg4NjcwMDUsNDEzNTEyLjUzMzIyNjE5OTEsMTQ0NzI5OC4zNjk3NzI5NTgzLDAuMCwwLjAsMzk2MTEyLjUxMDQxNTU4NTEzLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDI5OTkzNzMuODI0NzYzODY0MywwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMTA4NTE5LjgxODMyNDc0MTY2LDc3NTU1OS41NTg1OTk2MzE3LDE4Nzk3MS4wNDk0NzAzNzY1NCw1MjkwMTQuOTg1MDY2NTAzOCwyMTkxOTcuOTIwMzQ2MTQ3NiwyNDg4MzMuMjEwODk2ODkzNTUsMTEwMTYyLjQ4NzU2ODkwODUzLDkyMTAwMDYuMDE2OTI1NDk1CisxNSxUdWUgOCBGZWIgMTEsNDY5ODg5Ljg5MDY1ODU1MjQsNTgzOTgwLjc0MjM2MzM3NzUsNjIyMzQ0LjY4MjUzMDI5NzEsMjIyMzczNS44NjM4OTIxMTU3LDMzMTMwNy45OTEzOTQzODI5NiwzODY0OTMuNjYyNDIwNTUzMzMsODQyMzU0LjM2MzE2NjU4MjQsMC4wLDE1MTgzMy44NTY3NzcwNjY1NCw2NTE2ODcuNjIwMjQ0MDgxOCwyMDEwNzAuMjQzNzUyNjEyMzIsMTA1NzQ2Ny41NjE5MzE4MDEzLDE2NTI2NjUuMjA3MDE2MDAyNCwyNTkxMTguNTc3NjU0NTgyNSwxMTIzOTUzLjA5ODIwNzU5OSwzMDg2NTIuOTM0MzA2NjYyMjQsNDgwNzY3LjY3MTU5NDI3MDQsNTU2ODQwLjM5MjcwMjEzODksNzE0MTY2Ljk3MjUwNjY0NTQsNzU4NjM2LjgwMzQ4NTc4NTMsMzk3ODMwLjYwMzg0MzI2ODUzLDAuMCw5MzI0MDYuNzM0MDg0NzAyMiwxMjk5NTk4LjU1MzA5MzE1MzUsMzIxNDgzLjk0MjQ1ODMzNTksMTM4ODY3LjQxMTgzNDEzOTIzLDUyMzgxNy4zNjE5NzkwODgyLDM0MTQ3ODUuMzY3MDA3MzM3NSwxNzgyMDE3LjA0NzQ0NTk3ODMsMjA2NzY1Ni40OTE4MTMwNjIyLDExMTE3MzUuMzg2MjEzNDU4LDYxMTU2Ny41MjAzNTkwNzQyLDE4MjY5My41NTI1MzY4NDEwNSwyMDA2NDg1LjI2NDQwNjcwNzYsMjA0MjQ1OC42MDQ1MTY5NDk1LDI2ODM1NjkuMzEyNTMwMDkzLDAuMCwwLjAsMC4wLDAuMCwxNzY4OTM3LjQ0NTcyNzc4MjgsMTkyMTEwMy44NjM4ODcwNzgxLDAuMCw5MDUwMDYuNTE4ODU1MTk1LDQ0MTE3MC44MzAzMzQ4NTk1NSwxNTU1OTkxLjE0NzExODA1NzQsMC4wLDAuMCw0ODA0MzMuODMwNTg3NDE0OSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwzMjI4Mzc4LjM1MjQ3Mzk4MDcsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDIyOTk1NC45NjkyMzQ5Nzc5NCwxMDk0MzgyLjk3MTk2NTU2MjgsMjA2Mzc2LjY4NjMzOTIxNDQyLDU2NzI5MC4yNTgzMDYxMTI1LDIzMzQxNS44OTI1MTE3MTcxMywyNzI1MzIuOTExMjc3NDc2OTMsMTE4NzM2LjU2NzE1ODEzNjk3LDk1MzQ4MTQuNjc5MDk5OTIKKzE2LFdlZCA5IEZlYiAxMSw1MDYwNTkuMDU1NTAyMTAzMDYsNjIwNzU2LjkyNDUxOTM1MDgsNjYwNjY2LjY4MTY4MjE1ODgsMjM2NDY1Mi4yNjY2NDEwOTY3LDM5NTQwNy45NjIzMzQ5MjEyLDQ0NzExMS4yMjk5NDA2MjYxLDk1MjMxNy41Njg5NjIwOTk0LDAuMCwyMjc3NDQuMjE0MTgyMjU5OCw3OTEwMjIuNTQzNDYxNDQ3MiwyNzE0NDkuNDA3ODgyNjE1MDUsMTIwOTcwMi45NzExOTU2MTgsMTc5MzAzMS41NDI1OTY3NTgsMzE3MDk5LjQ2NDYzODE3MzQ2LDEyODc5NDYuMDc4ODQ4NzM5OSwzNjU0MjMuNjQ1MzE1MTk0OSw1NjM5MzMuODA5ODUwOTM0NCw2NDczMzEuNTQ5NTAxNDgwOCw4MjQ4MjUuNjkyNjcxODMyNyw4Njk1MTQuNDcxNjQ5NjYxNCw0NTM3MzMuMjYwMjYxNjc3MywwLjAsMTAwNzQyMy43Njc5MzAyNzQ4LDEzNTYzOTguOTk4MTA3OTI4LDMzMzgyNi4wMDM3NDc5NTg4NiwxNDM4MTkuODk3MzU3OTUwNTcsNTQ2MDYxLjU0MjMyNTAwNTksMzUwNDMyOS45NjE4OTg2NzI0LDE4NDQ5NjEuMzMzMDAwMzk2MSwyMTI3NjMyLjk5MDI3MjY0MDcsMTE1Nzc1Ny4wNDU3NTA2Mzg3LDYzODAwMy44OTg5MjU5NTY3LDE4ODA1Ny4xNDg0NDIwMjYyNiwyMDgyNjcwLjI4NDAxODI3MDcsMjA5NjIyOC43NDU3OTgwMTMyLDI3NTUxNDQuNTM4MzM4Njk1LDAuMCwwLjAsMC4wLDAuMCwxODE5NjIwLjAyMTY5MDc5NjEsMTk3MDkxNS42MjI2MDMxNDk2LDAuMCw5ODU5OTAuNzEzMzY0ODQ2LDQ2MjA2OS4wODEzMTg2ODI3LDE2Mzg1MjQuNTgxNDAyNDI2MSwwLjAsMC4wLDU0ODc1My4yMjI5NzUxNDMzLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDM0MDIzNjAuODU0ODY2OTEzLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwzNTM2OTAuODU3NDkyNjQwNCwxMzcwOTk5LjcyODE4ODMwMiwyMjA1MzAuMjM0ODIyNjkxNzcsNTk2MzA2LjcwMzYwOTA4NjgsMjQ0MTQ0Ljk0MTAwNDY1NTUsMjkwNzMyLjkzMzQzOTA0NDg2LDEyNTI1Ny42MTcwMDA5MTc3Nyw5Nzc0OTQ5LjMxODQwNDMKKzE3LFRodSAxMCBGZWIgMTEsNTMzNTUxLjYxNDY3NzY0Myw2NDg0NzYuMDU1NjIwODMxMSw2ODk1MjUuMjgzMDgwMTAxMSwyNDcwODk0LjQ0NjQ4MjczNCw0NDY5MzQuMDY1ODk0MzUyNyw0OTUwNzkuOTY2NjAxNTIyNiwxMDM4Mjg4LjkwMTQ1MjAxNzQsMC4wLDI5NTMzMS45MTE2NjI0ODIxMyw5MDM5NDYuOTk3MDQzNzU5NywzMzEzNTMuNDk2MjgxNzU1MTYsMTMyOTQ2OC4yMjMwMDI0Njg1LDE5MDAyMTguNzU2MDEzMDI0MSwzNjQyNzguMzA1NTI4MDMzNzYsMTQxNzA3Ny4zNDI0ODk2Nzg5LDQxMDg3My45OTA3NDQ5MDE3LDYzMDIxMi4xNzc1MjM5MDksNzE5MTE3Ljg4OTMyMTk2OTUsOTEyMzEzLjE0NzAzNjE2NjUsOTU2ODM0LjgwMjc5OTY4NDgsNDk3NjQ1Ljg1MDk4MzgzNTIzLDAuMCwxMDY0NTYzLjM1MzE4NzAzMzIsMTM5ODY1OC4zMDAyMTc1NjE0LDM0Mjk3MS43NTA0NjM3MTMxNCwxNDc0ODIuMDcwNTkyNjY2MzQsNTYyNTk2LjAyOTk0NjA0MTMsMzU3MDAxMC45Njc0NTAzMzcsMTg5MTQ5MS43NjIxNjAwMTkzLDIxNzE3MzUuMTUwNzkyMzIzLDExOTE5MzcuNzgwNTE0NzU4Myw2NTc2NjUuNDI0NTY4NjQyNywxOTIwMDIuNDkwMzA2NTcxMjcsMjEzOTEwNy4xOTk1ODQzMzEsMjEzNTY3Mi43NTg0Mjk2ODQsMjgwNzY2Ni4zMTQzNjMyOTA2LDAuMCwwLjAsMC4wLDAuMCwxODU2ODc2LjM5NTY0NTExMjUsMjAwNzQ0Mi44NDI4MTkxNTc4LDAuMCwxMDQ3OTg4LjQ1MjA5MDM3ODMsNDc3NjU4LjQ0MDQ1MjY4MjU1LDE3MDAzMzMuMzk5Mjg4ODgwNiwwLjAsMC4wLDYwMjQ1Ni45MjgwMzAyNjc1LDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDM1MzI3MDMuODEyNjg2Nzc5NSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsNDY1MDExLjgxOTc3NDc3MzYsMTU5ODU4Ni42NDc2NTUxMjY5LDIzMTIzNC44NjM2MTY1MjI3LDYxODAwOS4xMjQ2MzU1ODkxLDI1MjE0MC4xODY4NTkwNjI0NCwzMDQ0ODMuNjUxMDAzNTMxNTMsMTMwMTQ3LjQxNTU2MjQ1Nzg5LDk5NTA5NDMuNjIwNjEyMzMzCisxOCxGcmkgMTEgRmViIDExLDU1NDE1Ny4zODgzNjk4NzUsNjY5MTEyLjgzMDI2MDUyNTEsNzEwOTk1LjA5NjkzMzQ3OTEsMjU1MDAwOS4xNTA5NzMxNTI0LDQ4NzIxMC4wNTI1NzE2NzksNTMyMTUxLjU0OTMxNDAyMzYsMTEwNDEzNS44NjMyMDU2NzM2LDAuMCwzNTE4MzMuOTY2Mzc2NTg1NjUsOTkyNzMwLjgzMDE3NjgxODksMzgwMDM5LjkyMTk1NDYzOCwxNDIxNjI2LjU0MjQ2NTI1ODYsMTk4MDg0Ny41MzA2NzE3Mzk3LDQwMTQ3NS42NTkyMzU0ODkxLDE1MTY1MDkuMDk1NTUyNTUzLDQ0NjI5Ny44MjEyNTY3ODYxLDY4MTY5OC42NTk3MTA4MzM3LDc3NDY5Ny4yMzY4MDE5NDI3LDk3OTg4MC4xNjc4MDc4NzcxLDEwMjQwNzkuMzkxODEyNTI4Nyw1MzEzOTguMTQ3OTUyNzg3OSwwLjAsMTEwNzQ1OS42NDU5MTc1ODc3LDE0Mjk3OTAuNzI5NzY4ODAyNCwzNDk2ODcuMjU5NTY4NDQ1MSwxNTAxNjYuNDMxNjY1MDE2OTgsNTc0NzY3Ljg3MjQ0MDE4OTcsMzYxNzgzMC41NzY3MTU2MzgsMTkyNTU4OS42MzAzNjc0Mjc2LDIyMDM5MTEuMTE5NDU1MDM4NiwxMjE3MDgyLjk3OTMwOTE5NSw2NzIxNDUuODIzNTIwMDQ3NCwxOTQ4ODEuNzU0Nzk1MDg3NCwyMTgwNTM2LjY1NTMyMTcxOTYsMjE2NDM5Mi41MDEyNzM2MTI1LDI4NDU5MTguMjkwOTM5NjE4NCwwLjAsMC4wLDAuMCwwLjAsMTg4NDA1MC42MzQ4OTcyMTc2LDIwMzQwMzAuODMyNzQ3OTA3LDAuMCwxMDk0NzE2LjU2MjAxNDY5NDYsNDg5MTY3Ljk3MDg1MDk5NzI2LDE3NDYxMTIuMTE2MDU4OTYxLDAuMCwwLjAsNjQzNzU2LjM4NjMwOTIzNjMsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMzYyOTI2Ny4wMzI1MzMyODEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDU1ODY1NS4wNDY0MDMxNzQ2LDE3Nzk0MDYuODc1NzkyMjczLDIzOTIyNi4zMTg4Njk2MDg5Miw2MzQwNjYuMzMxMDQ4Mzc5MywyNTgwMzguMDYxNzUyMTUxNTIsMzE0NzQwLjYxNzE2MDQ2MjgzLDEzMzc3Mi43Nzg5ODUzOTc1LDEuMDA3ODk5MzQwOTUxOTg1RTcKKzE5LFNhdCAxMiBGZWIgMTEsNTY5NDI5LjExMTU3NDU1MjMsNjg0MzI0LjMwOTI0OTQ4MjQsNzI2ODExLjM4NDY4MjYxNywyNjA4MzM1LjgwNzA3MTU4NDMsNTE4MDUzLjQ4NDMyMTY2NDE1LDU2MDI5Ny40NTY2MjEwNzkyLDExNTM3ODMuNTMwMzAyMjI4NiwwLjAsMzk3MjEzLjc3NjExNDgyMjEsMTA2MTAxNy43Njg2NTEwOTMsNDE4Mzk0LjI1NDE2NDU1NTYsMTQ5MTM2My42ODM4MjMzNjI1LDIwNDA3NzkuMzUxNTkwODI4Myw0MzAxNDUuMTAzMjI5MzU1NTMsMTU5MTc4OC44NzMyMDY2MjU1LDQ3MzM2Ni4yNzIwMjUwNDczLDcyMDk0Mi43MTE2NDA0NDksODE2OTUzLjQ1NjYxNTQzNywxMDMxMTUyLjU3NzUxMzQ1MywxMDc0OTk0LjYyOTg3NTk3ODUsNTU2OTE2LjYzMTU2Nzk2NTYsMC4wLDExMzkyOTMuNjY1MDk5ODg4LDE0NTI1MzkuNzg0NTQ3NTQ2LDM1NDU4MC44OTE0MTUwNTEsMTUyMTE5LjY3MzIzNDIzMzUsNTgzNjU2LjUwODI4NzI1NSwzNjUyNDI3LjA4Mzg5NzE4NiwxOTUwMzk1LjEzMDAwNjIyNDYsMjIyNzIzMS4xNTE3NTUzMzYsMTIzNTQzNS4yNDY3OTE3OTU0LDY4MjcyNC4zMzM5NTM0OTY3LDE5Njk2OS4wNTU4MzA5ODU1NywyMjEwNzE5LjkwMzg2NjY5MywyMTg1MTcyLjAwMjYyNzc1MSwyODczNjAwLjg2OTEyNDA5MywwLjAsMC4wLDAuMCwwLjAsMTkwMzc0MS4xNDE1OTQ0NzUxLDIwNTMyNjMuMDE5OTkyMjQwNywwLjAsMTEyOTUwNC43NTk4ODY3OTIsNDk3NTkzLjM1ODE1Mjk2MDksMTc3OTcxMi40MDcwMTAyNzk2LDAuMCwwLjAsNjc0OTkzLjQ2NTY5NzE2NDIsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMzcwMDE1My43NDg5Mzc3NjMzLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCw2MzQxNzcuMTc3NzA1MjkzNiwxOTE5NTYwLjMyODMxOTY4MDQsMjQ1MTMwLjA4NDQwODY5ODgsNjQ1ODQxLjczOTM3MzM1NzIsMjYyMzUyLjQ5Mzc1NDIyNDk3LDMyMjMxMi45MjE1MzQzNDQ0NCwxMzY0MzUuOTU4NDE2MTIwNzMsMS4wMTcxNTg1NjQyMDI0NzIyRTcKKzIwLFN1biAxMyBGZWIgMTEsNTgwNjQ0LjIyNTAyOTc1NSw2OTU0NDQuNzI3MjcwMjMwMiw3MzgzNjguMzI0OTI4MzUzNSwyNjUwOTgyLjMzMjQ1ODU2ODcsNTQxMzA2LjI1ODEyOTM5MTYsNTgxMzczLjY1MjUyNTY1NywxMTkwNzU2LjIzNjE3Mzg2MywwLjAsNDMyNjYzLjc1ODcwMjQ2NDksMTExMjY3Mi44MjgzNjAzODQsNDQ3OTM3LjM4ODQxMzc3NDg0LDE1NDM0NDYuNjg5MjE0MTk1LDIwODQ4OTcuNDkyOTcwNDU0NSw0NTE4NjYuNjYwODU0NzI5NTMsMTY0ODAzNC4zOTQ2NDYzNzA2LDQ5MzczOC4zNjkyODU1Njk1LDc1MDQyMC40OTMzMjQ1OTA1LDg0ODYzMC40Mjg0MDYzNjg1LDEwNjk1MzAuNjA2MTI4OTYwNiwxMTEzMDM4LjY5Nzc5NjYwMzIsNTc1OTYxLjg0OTE1NzI0NzcsMC4wLDExNjI2OTcuMDgwNzMwMjQ0NSwxNDY5MDQ5LjM3NzEyMDEzNzIsMzU4MTI0LjAxNzcxNDk1MSwxNTM1MzIuMTA2MDExNDkyNTgsNTkwMTAzLjgwODQ4ODQzODUsMzY3NzMyMS44MTI5NzUyOTg2LDE5NjgzMjkuMjE3NTI1OTEyNCwyMjQ0MDM3LjMzOTQ0NzY5NCwxMjQ4NzQwLjU2NjIzMjczMjUsNjkwMzk5Ljg0NjQ5NDIyNjQsMTk4NDczLjYzODM1MzkxODgyLDIyMzI1NjkuMzIyNTQ0OTQyNiwyMjAwMTI1LjIyMjkzNDkyMDMsMjg5MzUyNS41MjIyODAwNjcsMC4wLDAuMCwwLjAsMC4wLDE5MTc5MjguODUxNTMyNDkyNiwyMDY3MDk5LjcwNzI5Nzg4OTUsMC4wLDExNTUxNDYuOTE5NDU3Mzc3Miw1MDM3MTcuMjA0Nzg5OTEwOTMsMTgwNDE4OC42MDA3ODAxMzA2LDAuMCwwLjAsNjk4MzE0LjEwMzg3NjE3ODMsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMzc1MTc5Ni44OTU0ODYwNzYsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDY5MzM0OC41NjA3NDUxMzU0LDIwMjYyMDcuOTAwMDE0NzMyMywyNDk0NTQuMTE2ODczOTMzLDY1NDQxMy4zNTU5NTAzMjQzLDI2NTQ4Ni41MDgyNTQ1NDgyLDMyNzg1NS45MDQzODkwNjExNSwxMzgzNzcuMzQyNzQxOTYxNiwxLjAyMzgxODM4MTI3NzA4MTJFNworMjEsTW9uIDE0IEZlYiAxMSw1ODg4MTcuNjI4MjAxNjMwNyw3MDM1MTguMjQ3NDE5NzY3NSw3NDY3NTUuMzA2MTgwNjYzNSwyNjgxOTQ4LjExODI0MTc2NSw1NTg2MjEuMDExNjg3OTY5NCw1OTY5ODIuNDc0MzU2NjY1LDEyMTgwMTUuMTkzMTM4NzI0NywwLjAsNDU5Nzk4Ljk2MzYyNTA5NTksMTE1MTI0MC4zNzI5ODAxOTc3LDQ3MDMxMC4zODYyMTI4Mjc4LDE1ODE5MzYuMzM2ODQ1NjUyNywyMTE3MTE0LjkzMTE2MDQ5NCw0NjgxMDUuNDQwMjcyMDYxMjcsMTY4OTYxNC4wMTExNDg0NDAyLDUwODg4Ny4zODA2NzEyMjQ5LDc3MjMwNi4xMDAwNTIxMTM0LDg3MjExMC45MDMyODc2ODk4LDEwOTc5NDMuNTUxMTgyNjI5MywxMTQxMTY0LjQwOTMyMTA5NDksNTkwMDI4LjQzNzYwMjg2MzQsMC4wLDExNzk3NjguNjkxMTYxMDAwNCwxNDgwOTYwLjk4OTYyNTI1MTYsMzYwNjc1LjIyNDM1OTUzLDE1NDU0OC4wMjIwMTA3ODk2Myw1OTQ3NTMuMzk2MDkyOTczMSwzNjk1MTUxLjQ3MjE2MTQxNSwxOTgxMjI2LjU0NDgzNDM1NzcsMjI1NjA5MC4wMzAxODQyNywxMjU4MzMyLjAwNTU5MDI0NjgsNjk1OTM2LjcxNTIwNjUwNzQsMTk5NTUyLjg1NzE5NTgxMTUyLDIyNDgyOTkuMzIxNDM2MzQ4LDIyMTA4MzUuMjc3Nzg3OTYyLDI5MDc3OTguNzI2OTcwOTY4MywwLjAsMC4wLDAuMCwwLjAsMTkyODEwMS45NDkzMzI3Njc5LDIwNzcwMDguMTQ2Mjg5NjEyOSwwLjAsMTE3Mzg5Mi40ODE3MTcwODczLDUwODE0MS4zMDg1NjYyMDgzLDE4MjE5MDQuNzgzNTQyMzY0OCwwLjAsMC4wLDcxNTU0Mi45NjE4NTc4NzA2LDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDM3ODkxNzkuNTA1MTI1NzE1LDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCw3Mzg3NDEuODA3OTU2ODQ4NiwyMTA2MjA4LjkwNDU1OTI0OTUsMjUyNTk4LjM1NTMwNDUyNTEyLDY2MDYxMy43NzY3Njk5Njk2LDI2Nzc0OS40OTQ0ODM2MjU5LDMzMTg4NC41OTM3NTY2Mzg2NCwxMzk3ODMuMzk2NzQ5OTcxNywxLjAyODU4NjQ0NzIwNjk5OTdFNworMjIsVHVlIDE1IEZlYiAxMSw1OTQ3MzUuOTQ2MDIxODI5NCw3MDkzNDUuMjA3NTc1MDY1NCw3NTI4MDYuMzYyODQyNTYyMywyNzA0Mjk5Ljc3NzkxNzgzNjMsNTcxMzg1LjcyMDU4NzQ0NDYsNjA4NDM4LjE0MjU1Mzc1ODksMTIzNzk0Ni43Mzg1Nzk5MjQ3LDAuMCw0ODAyNDguODAxNTYwODgzMywxMTc5NzM1LjQ1NjU2NzQxMiw0ODcwMjkuOTM3NjgxNzc1NywxNjEwMTM0LjcwMTg3MjU1MzcsMjE0MDQ4My4zNjcyODY1Mjk0LDQ4MDExNS42NzQ1NTg1NjEyLDE3MjAwODQuNTczNDk2MTA0NSw1MjAwNDIuOTgwMTcyMjI4MjQsNzg4NDAxLjYwMjEyMTU0OCw4ODkzNTYuMzg5OTkxMjQwNiwxMTE4NzkwLjcyNjcxNjI4NywxMTYxNzc2LjU2NjQyOTgyOTIsNjAwMzI5LjEwMzMyMzAwODYsMC4wLDExOTIxMzkuNzQ2Mzc1NDM0NiwxNDg5NTExLjkzODk3MzM1ODQsMzYyNTAzLjQ0NTQ5MTg2MjEzLDE1NTI3NS4zNTI5NzM0MTA1LDU5ODA4OS44NjE3OTA5MDE5LDM3MDc4NjguNzA5MTE0NTE1LDE5OTA0NTguOTE2NDkxMDgzOCwyMjY0Njk2Ljg0OTU2MTE5MywxMjY1MjEyLjIxMDEzMjE2ODgsNjk5OTEwLjgzNDMxMDUxMTgsMjAwMzIzLjY0ODk2Mjc3NzkyLDIyNTk1NzAuMDE0OTc4NzIwMywyMjE4NDc0LjY5NDAzMTA3NzQsMjkxNzk4MS4yMzY3MjY1MTQsMC4wLDAuMCwwLjAsMC4wLDE5MzUzNjUuNDY1MjM5MzQxMSwyMDg0MDc0LjU3NDYyMzAyOTcsMC4wLDExODc1MDEuNzcxNDI0NDg1MSw1MTEzMjAuODE4NTgzMzE1MiwxODM0NjU3Ljk0ODY1Mzg4NjMsMC4wLDAuMCw3MjgxNjIuMDIyODQyMDYxNSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwzODE2MDkxLjU5OTExMTc0MzMsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDc3MzAxMC4zOTU1MTg1MDY4LDIxNjU1NDEuNjE3MjY3NjM0LDI1NDg3MC43MzQ4NDc5NTg1LDY2NTA3NC44MzQ5ODI1MzM4LDI2OTM3NS4xNDE0Njk2NTkzNCwzMzQ3OTQuOTk0MTExMDMyNSwxNDA3OTYuMDg5MTUyMTgzMSwxLjAzMTk4NjI0NTExNzAyNTZFNworMjMsV2VkIDE2IEZlYiAxMSw1OTg5OTcuNzMyNjk3MTQwMiw3MTM1MjkuMzk2NjkwNzY4OSw3NTcxNTAuMTM3NTE2OTgwOCwyNzIwMzUxLjQ4MTM2MTc1LDU4MDcxOC41ODEyMDMzMTA2LDYxNjc4Mi41NzQ4MDIzNDIsMTI1MjQxOS41Mjc4NjYwMjg1LDAuMCw0OTU0NzIuMDQ0ODc0MTk3NCwxMjAwNjA3LjU5NDUzNzcxMjQsNDk5MzkyLjAwNTEwNjgwOTg0LDE2MzA2NDQuMDQ2NDcwODAwOSwyMTU3MzM1Ljc3OTI4NDk2NDMsNDg4OTIwLjUyMjg5NzQyMDMsMTc0MjI1MS43MDQ0MjkwOTMzLDUyODE5MS43MzQ3NTM3NTA2LDgwMDE0Ni4wNDA2NjQ0Mjk3LDkwMTkyNS45MjM0MTAwNTg1LDExMzM5NzIuNTI2Njk0MzIxMywxMTc2NzcyLjM1MzQzMzY3OTgsNjA3ODE4LjA2Mjg5MzMxNzUsMC4wLDEyMDEwNTQuMTA4NTgwMDU5NCwxNDk1NjIzLjQ1MDM3NTg3MzEsMzYzODA4LjEwMDYyOTA5NjYsMTU1NzkzLjk2MTM4NTE3MjQsNjAwNDczLjY2NjQ0OTkxNjIsMzcxNjkwNi41NjE0NjI5NDYyLDE5OTcwNDEuMDU5NDAyNDQ0NCwyMjcwODE5Ljg3NzI3MDY0MDMsMTI3MDEyNi4zNzUzMzI2Mjg2LDcwMjc1MC44MjE0NzUyNTgzLDIwMDg3Mi4wNzg4NDU5MTM4NCwyMjY3NjEyLjAxMjE5ODczNiwyMjIzOTA0LjA2MjAyNzI2NTMsMjkyNTIxOC45NTA4MTU3MjcsMC4wLDAuMCwwLjAsMC4wLDE5NDA1MzIuMTU2NjgwMzk4NCwyMDg5MDk1Ljk2MTQwODI0NCwwLjAsMTE5NzMyNC4wMDU0NjMzMTgyLDUxMzU5NS41MTg2NDkzMzQsMTg0Mzc5NC45NTY5NDU2MjY1LDAuMCwwLjAsNzM3MzM4LjIxNjcyMjc3NjQsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMzgzNTM3MS42NjY4ODI4NzI2LDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCw3OTg1NTUuNzQ0NjkyNDcxNSwyMjA5MTM4LjY2Njg0NDQwOCwyNTY1MDQuMzgwMjY5OTY1NTQsNjY4MjY5LjQ3OTA1Mzk4NzEsMjcwNTM3LjcyMzQzOTY2MjEsMzM2ODg2LjU4NjI5NDA3MzUsMTQxNTIxLjk2NDIzMzU1MzE1LDEuMDM0NDAxOTMyNTM4NTMyNUU3CisyNCxUaHUgMTcgRmViIDExLDYwMjA1MS45ODMwMDk2MTk5LDcxNjUyMC42NjYyNTcyMTE5LDc2MDI1NC42NjA4MjU1MTk1LDI3MzE4MjcuNzg5OTAxNjQ5Niw1ODc0OTUuMDM0NDg4ODM0OSw2MjI4MjIuMDkxMzUwODg5OCwxMjYyODY2LjUwODE4Mzc0ODcsMC4wLDUwNjY5Mi4yMjk5MDkyODEyNSwxMjE1Nzg1Ljk1MjE5ODQxNDgsNTA4NDUyLjUwODk3NjcwNzMsMTY0NTQ2OS4zNTMxMjAxNTA1LDIxNjk0MjguNjc4MTIyMDY3NCw0OTUzMjguMTA5MDYzMTM4MTQsMTc1ODI3OC41NDE3NjQ2MDk3LDUzNDEwMy43NDc1MzAyNTc2LDgwODY1OC45MzAwNjY1MjY0LDkxMTAyOC4yNDY2NTAwNjUsMTE0NDk1OC42MTYwMDA5ODQ4LDExODc2MTQuNjY2ODg5Njk3NSw2MTMyMjkuNjc0NTgwMzY3OSwwLjAsMTIwNzQ0Ni4zODYxOTk3MzU2LDE0OTk5NzQuNTk4MTc1NDk4LDM2NDczNS43MDA4NjM3Njc1MywxNTYxNjIuNDE3NzI5OTQ2OTMsNjAyMTcwLjMxOTc5NTE4MTQsMzcyMzMwOC44NDU0OTQ2NjksMjAwMTcxNi45NzE4ODQxNzE3LDIyNzUxNjEuMzY0MTI5ODQ0NiwxMjczNjIzLjAyNjg4MjkxMzQsNzA0NzcyLjUzNTIxNzY3NzYsMjAxMjYwLjk4Njg1MjI2MzMzLDIyNzMzMjkuMTg2Nzg1Mjk4NCwyMjI3NzUwLjI3OTI5MDU0NTcsMjkzMDM0Ni44MjM3MjQyOTEzLDAuMCwwLjAsMC4wLDAuMCwxOTQ0MTk1LjEyMjEzNzAwNTQsMjA5MjY1Mi42ODI3Nzk1OTM2LDAuMCwxMjA0Mzc3LjAzNzc5OTk1MDcsNTE1MjE2LjQyNjczODQ5NjIsMTg1MDMxNC4wMjk4MDkxNjc4LDAuMCwwLjAsNzQzOTcwLjA4MDE1OTU4OCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwzODQ5MTI2LjQzNDI3Mzc4ODIsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDgxNzQwNC45OTM2NzQ3NTI1LDIyNDA5MjYuNzExMDc5Mjc3LDI1NzY3My40NjQ4MTUzMjM2LDY3MDU0Ny44NjQyMDQ1NzQ3LDI3MTM2NS44NzcxMjQ5MDc0NSwzMzgzODIuOTMxMzgxNTMyMiwxNDIwNDAuMDY5NDE3MDEzMTUsMS4wMzYxMTI5MjI4MTUyODc5RTcKKzI1LEZyaSAxOCBGZWIgMTEsNjA0MjMxLjY4OTEzNTE5OTksNzE4NjUwLjgwNDcwNjM5MTQsNzYyNDY0LjkyNTM2NDg4NjEsMjc0MDAwMC44OTM1ODY3NTYsNTkyMzg2LjI5NDU4MjcwMTksNjI3MTY5LjUxNDA0MjgwMTMsMTI3MDM2OS4xMDUwMzQxOTEsMC4wLDUxNDg5NC4yMTUxMzIzOTMxLDEyMjY3NTYuMjEwMjYxMTIwNSw1MTUwNDQuNzQ4MzY3MTM2NSwxNjU2MTI5LjMxMDQ2OTUzNCwyMTc4MDY4LjYyMjg2MSw0OTk5NjIuMTAyMzI0NzU5MDYsMTc2OTgwNC40Mjc4NjAzNzE4LDUzODM2OC4xNTcxOTUwMjIyLDgxNDc5NC41MzQxNjE1NTY1LDkxNzU4My4zMzAzMzUwNTc5LDExNTI4NjUuMzg0OTAzMTI4MywxMTk1NDEyLjI2NTE0OTA5NzQsNjE3MTE5LjY5MTUyMTU2MTgsMC4wLDEyMTIwMTAuNjQ4NTA0OTQyMiwxNTAzMDYxLjg0MjE0MjUxMTYsMzY1MzkzLjA1OTU1ODkxMjA2LDE1NjQyMy4zNTkyODY2ODg2NSw2MDMzNzMuODA4NzYyODc3LDM3Mjc4MzEuMDM1MTM2Mzk3LDIwMDUwMjguMTQwMDMxMzMwNSwyMjc4MjMwLjQ4NDE4OTA2MSwxMjc2MTAyLjcwMTI3NTExNDQsNzA2MjA2LjgzNzE2MzM5NjQsMjAxNTM1Ljk0NzA3NTM4MTUsMjI3NzM4MC4zNTc3OTk3NjMsMjIzMDQ2Ny4wOTk5NTE3MDEsMjkzMzk2OS4zNDEwMTQ5NTQ3LDAuMCwwLjAsMC4wLDAuMCwxOTQ2Nzg0LjI5NjI2NzMyNiwyMDk1MTY0LjcxMTQyNDc1MTcsMC4wLDEyMDk0MTkuMjAxMjMxODQ1LDUxNjM2Ny4zOTI0MzQxODEwNiwxODU0OTQ4LjIzNzU3Nzc0MDYsMC4wLDAuMCw3NDg3MzcuODkyMjI3NzA5MywwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwzODU4OTAzLjIxMTU4MTEwODYsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDgzMTE5Ni43ODYzODgyOTk4LDIyNjM5NTMuNjE5MTc0MDk2MywyNTg1MDYuNzQyMTg0MjQ5NTQsNjcyMTY2LjkxMjUwMDI0MTEsMjcxOTUzLjc1MTM4MDEyLDMzOTQ0OS4xNzg1OTk0NzAwNiwxNDI0MDguNTA1MjgzMTE5OCwxLjAzNzMyMTM0MDM1NjY3NjVFNworMjYsU2F0IDE5IEZlYiAxMSw2MDU3ODEuNTI3MzU4MzUzNCw3MjAxNjIuNDg5NTkyNDgwNSw3NjQwMzMuMTQyMzExMDk4OCwyNzQ1ODAxLjQ0NTk4NjM5LDU5NTg5OC44NTcwNDkxNDM1LDYzMDI4NC4xMTMzMzExMjA2LDEyNzU3MzMuMjU2MDYyOTczMywwLjAsNTIwODQ4LjU3MDg4NDg2MTM0LDEyMzQ2NDMuMzAxOTAyODAzLDUxOTgxMS40MjE3MDMxMTM1LDE2NjM3NTkuMDM2NjE3NzUyLDIxODQyMTcuOTg3MTUzNTU1Myw1MDMyOTUuNTA1MjQ3NTYyNSwxNzc4MDU1LjE3MDIzMjg5NzksNTQxNDI4Ljc1NzAyNzUyMjQsODE5MTk1LjA4MzAwMTA3NjQsOTIyMjgxLjQwMDYyMjI0MjIsMTE1ODUyOS4xNDc4ODI3Njc3LDEyMDA5OTQuMjcyMjQ4ODcwNyw2MTk5MDMuMjEwMTgyMDQ0MiwwLjAsMTIxNTI1Ny40NDU5MTU5MDIsMTUwNTI0NS42MjgzNTY2ODEyLDM2NTg1Ny41NDMzMDk0ODM1LDE1NjYwNy42Mjk4ODQzODM2NCw2MDQyMjQuODk4Nzk4OTA2NywzNzMxMDE2LjkzMjEwMjQ2MjMsMjAwNzM2Ni4yMDE3OTc1NjUyLDIyODAzOTQuMzE1MzgxMzE1NSwxMjc3ODU1LjkwNTI5MTE2OSw3MDcyMjEuMzA1MjczMzA0MiwyMDE3MjkuODIyMTM1MTg3NiwyMjgwMjQyLjYyNzgzMzQxNTMsMjIzMjM4MS4xNjE3NjI0MjMzLDI5MzY1MjEuNzMxMDEwODM4LDAuMCwwLjAsMC4wLDAuMCwxOTQ4NjA5LjU3MDM2ODE1ODIsMjA5NjkzNC4yOTk3NDMwOTk4LDAuMCwxMjEzMDA5Ljc5NTgwMjYzNTQsNTE3MTgyLjEwMjIwNDM1NTcsMTg1ODIzMS44MzM5MTMzNzI4LDAuMCwwLjAsNzUyMTQ5LjkyMzc0MjI1MzYsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMzg2NTgyOS43MTk3MTk1MDUsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDg0MTIxNy4xMDI1MjE5NjM1LDIyODA1NDEuMTI1NDgzNTA1NCwyNTkwOTguNTYzNjU5Mzc4MDcsNjczMzEzLjcyOTA2OTIxNjYsMjcyMzY5Ljc2NTcyMTI0NjU0LDM0MDIwNi4yODExNDY5OTQwNCwxNDI2NjkuNjQ1NTAwMjI1NiwxLjAzODE3MjYxODMzNTE1NjFFNworMjcsU3VuIDIwIEZlYiAxMSw2MDY4NzkuODk3NDc1MDE5LDcyMTIzMS45ODIwMTEwNzc4LDc2NTE0Mi40MjA5MDE0MTg5LDI3NDk5MDUuNDg2NzEwMDM2LDU5ODQxMC4xNTQxNjUwNDYyLDYzMjUwNi4yNDY5NjkwNjgzLDEyNzk1NTMuNTE3NzQ3MzAzMiwwLjAsNTI1MTQ1LjgyOTE2ODMxNywxMjQwMjg3Ljc5ODE5OTMxNyw1MjMyMzkuNzMwODA2MjE4NjMsMTY2OTE5Ny45MjU1MzkxMDEsMjE4ODU3OS44OTI0OTY0MDQyLDUwNTY4Mi4yMTEzMzkxMDEzLDE3ODM5MzcuNTMxNTE0NzI4LDU0MzYxNS43OTY5ODY2OTE3LDgyMjMzNy43MzA0MjA5NDQsOTI1NjM0LjQzMjg4NDk5OTYsMTE2MjU2OS40NzUxMzYyODMsMTIwNDk3NC4wNDc4MjgzMzk3LDYyMTg4Ny4wMDk1MjE0NTE3LDAuMCwxMjE3NTU5LjM3NzM0NTE2MDMsMTUwNjc4Ni4xMTE1MTQ5MTksMzY2MTg0Ljg3ODUzMzcwNDEsMTU2NzM3LjQyMTgzMTIwNDE1LDYwNDgyNS4xNDE3NDg5NzQzLDM3MzMyNTYuMTIyNDM2OTMsMjAwOTAxMi44OTczMjQwNTcsMjI4MTkxNi4xOTA3MzUwODEsMTI3OTA5Mi4xMzEzMTE0NTYyLDcwNzkzNi44Njg0NTg1NjYzLDIwMTg2Ni4xOTEyMTYwMjgxNSwyMjgyMjU5LjU5MzI0MzM3OTYsMjIzMzcyNi40ODM1MDMwMDksMjkzODMxNS44NjUzNjM4MTIsMC4wLDAuMCwwLjAsMC4wLDE5NDk4OTMuMjE1MDMwMzI2NSwyMDk4MTc3Ljk1MzUxNTcwNzUsMC4wLDEyMTU1NTcuOTAwNjU3NTMzLDUxNzc1Ny4xNzI1Mzk0NzA4LDE4NjA1NTEuNjcwOTM5MDI1NSwwLjAsMC4wLDc1NDU4MS45MTM4MTYzMDI5LDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDM4NzA3MjIuNTQwMTYyNTUxNywwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsODQ4NDUzLjY4NzczMDQ1MzMsMjI5MjQzMi4zNDQxMTA2NzMsMjU5NTE3LjU2NzU4MjAyOTYsNjc0MTIzLjcxMjAxNDM2ODIsMjcyNjYzLjM0MjI4NDMyNSwzNDA3NDIuMTg3Mzk2MTAzMTcsMTQyODU0LjE5MTYzMTUxNzgsMS4wMzg3NzA5MTM2ODk2MDg5RTcKKzI4LE1vbiAyMSBGZWIgMTEsNjA3NjU2LjAyOTI1NTEzOTIsNzIxOTg2LjU0MjU5MjUzNDksNzY1OTI0LjkxODkyNjgwMTYsMjc1MjgwMS4xNzE5MzA2NjI0LDYwMDE5OC42MDM2MjU5Njk0LDYzNDA4NS44NDg2NzI0ODUxLDEyODIyNjQuODQ1MTgxODk4NCwwLjAsNTI4MjMxLjQ0MTI0ODE2MSwxMjQ0MzExLjEzNzMzMTIwNSw1MjU2OTQuMDU0OTI0NTksMTY3MzA2MS4yNjA5NjgzNjAxLDIxOTE2NjQuNTQ5MTUwNzQ4LDUwNzM4NC4xMzA2NTIxMzc1NywxNzg4MTE2LjM2MzE3OTI5OTMsNTQ1MTcyLjYxNDIxNjMzMzQsODI0NTczLjU5NTM5NTYwNDQsOTI4MDE4LjY2MzIwNTIzOTgsMTE2NTQ0MS4yMDY5NTgzMjE5LDEyMDc4MDEuMzM2OTM2MzAzMiw2MjMyOTUuODU0ODMyOTg0NSwwLjAsMTIxOTE4Ni41NTg3MjU5MzYzLDE1MDc4NzAuMTA2NTYwNzg2NywzNjY0MTUuMDExMjQ4MDU3MSwxNTY4MjguNjI3OTk4NzA2NzcsNjA1MjQ3LjQzMjA5MzEzMDksMzczNDgyNi41NTQ5MzU3OTgsMjAxMDE2OS45NjQ0NTM2MzAxLDIyODI5ODQuMjA2NTA2MTMxNywxMjc5OTYxLjcwMDEwMTA0MjYsNzA4NDQwLjM1MTIyOTc0NTMsMjAxOTYxLjg5OTM5MDAwNTU2LDIyODM2NzcuNTE3MDU2MDQ3LDIyMzQ2NzAuMDMyMzIyMTk0LDI5Mzk1NzQuMjkxMDExOTMwNCwwLjAsMC4wLDAuMCwwLjAsMTk1MDc5My45NzE5NzYyNTU4LDIwOTkwNTAuMTE4MzA4MTE1MywwLjAsMTIxNzM2MC42MzM5NzI0NzYyLDUxODE2Mi4wNjIxNzQzNzg1NSwxODYyMTg2LjMyMjQ2MTAwMzcsMC4wLDAuMCw3NTYzMDkuMjEyNTUxOTk0NywwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwzODc0MTY5LjY3MzYwNzQ3OTMsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDg1MzY1Mi45MjU0NTI1NTUzLDIzMDA5MjAuOTQxMTE3OTMxNiwyNTk4MTMuMzc4NDk3NTQ0NjgsNjc0Njk0LjMwOTcwMjE2NDYsMjcyODY5Ljk5NTQ5NDI5MTU0LDM0MTEyMC40NTY2ODExMDYsMTQyOTg0LjI2MzcwNTc5NiwxLjAzOTE5MDUxODU1Mzg3NThFNworMjksVHVlIDIyIEZlYiAxMSw2MDgyMDMuMDEzMTA4ODc2OSw3MjI1MTcuNTgyODE5ODE4NSw3NjY0NzUuNTM2MTMxNDk3OCwyNzU0ODM5LjE3OTE4OTM1ODQsNjAxNDY3Ljg3MjA4OTczOTgsNjM1MjA1LjA1Njk5MzIwMjQsMTI4NDE4My4yMDUxNDAwODczLDAuMCw1MzA0MzcuMjUzNzkxNTUwMiwxMjQ3MTY4Ljc1MTI3NzE4NDgsNTI3NDQzLjk4MTU3NzU4NjMsMTY3NTc5Ni43NTI4OTYxMTk4LDIxOTM4NDAuMDMyNDI2MjM4LDUwODU5My4zNzU2ODc5NTcxNiwxNzkxMDc1LjU1NzAyMzIxMSw1NDYyNzcuMDQ1MzYzOTgwMiw4MjYxNTkuMDAzMDQ0MjcxNyw5Mjk3MDguNDQzMzc3MTM2NCwxMTY3NDc1LjcyOTYyODMzNTIsMTIwOTgwMy40ODU1NDUwMDAzLDYyNDI5My4yMzA3OTc5NDU2LDAuMCwxMjIwMzMzLjY5ODgxMzg0NjgsMTUwODYzMS4xNzAwNTA1MDA3LDM2NjU3Ni40NTUxODg2NDA0LDE1Njg5Mi41ODMzNjAzMDg1NSw2MDU1NDMuODY0OTA1Njg4LDM3MzU5MjUuODA2NTk2MTkzNSwyMDEwOTgxLjI2NzAxMzk5MzgsMjI4MzczMi4yMDkwNDI0NDA2LDEyODA1NzIuMDA2NzA0ODQ4Myw3MDg3OTMuODE3MTQxMzAxMiwyMDIwMjguOTM1MDI1MTE3NzcsMjI4NDY3Mi4xNjE1NTQzMDEsMjIzNTMzMC40OTk2NTIyNTksMjk0MDQ1NS4yMzAzMjk0NDM3LDAuMCwwLjAsMC4wLDAuMCwxOTUxNDI0Ljc4NDEwMzkyNiwyMDk5NjYwLjU2NzcxNDM2MywwLjAsMTIxODYzMi41MTMxNjU3NzAzLDUxODQ0Ni40Nzc2ODM3NjAzLDE4NjMzMzUuNDMxODE4OTc0NywwLjAsMC4wLDc1NzUzMi4xMzQ4NTY5NjgzLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDM4NzY1OTIuNDg3OTA3NTA0LDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCw4NTczNzEuNjI0NDc0ODA0LDIzMDY5NTguMDI1Mzc0OTI0LDI2MDAyMS42ODM4NjQyNzgzLDY3NTA5NS4zMjcwMjY4MjcsMjczMDE1LjEzMDYxNDYzNDUsMzQxMzg2Ljc4MTQ0MDUyNjcsMTQzMDc1LjcyMTYxODEyNCwxLjAzOTQ4NDIzMjg3ODg3OUU3CiszMCxXZWQgMjMgRmViIDExLDYwODU4Ny41ODMwOTAyNjkxLDcyMjg5MC40NzA3MDE0OTMxLDc2Njg2Mi4xMTY1OTA3OTMxLDI3NTYyNzAuMjk4MTM3NDAyLDYwMjM2NS45MDIwOTk2ODIxLDYzNTk5NS43NTE3MTA5MDU3LDEyODU1MzYuNzU3NDExMTQ4LDAuMCw1MzIwMDcuOTk5NTcxOTk5MSwxMjQ5MTkxLjk4MDIxMzA0OCw1Mjg2ODcuMjA0NDM4NzI2NSwxNjc3NzI4LjE1NDQ2MzkwMjMsMjE5NTM3MC41NDY0Nzg5ODk1LDUwOTQ0OS44MTYzODY2ODgxNSwxNzkzMTY1LjEwMDc0NTUyNjEsNTQ3MDU4LjE2NjkzNDc1OTgsODI3Mjc5LjgyNTE2MjQyNjIsOTMwOTAyLjUyNjYzNDg1LDExNjg5MTIuOTM5OTQ2MzM5MiwxMjExMjE3LjI2MzI5ODQ3OSw2MjQ5OTcuMzE3OTcxNTE1OCwwLjAsMTIyMTE0MC40NjEwNTM0MDYsMTUwOTE2NC40MTE4ODg0ODk1LDM2NjY4OS40ODgxMTAxMzMzMywxNTY5MzcuMzQyOTA3OTQ3OTIsNjA1NzUxLjUyNzMyODk3ODksMzczNjY5My44NjY2MTEzMTEsMjAxMTU0OS4wMjc5NTk5NTQ1LDIyODQyNTUuMTIxMTA5MDg3NSwxMjgwOTk5LjQ4NTc0ODY5LDcwOTA0MS40NTgzMTMyMDM5LDIwMjA3NS44MDEyMjg5ODE1OCwyMjg1MzY4LjUwNzU4NTE1NywyMjM1NzkxLjk4NDgwNjQxMSwyOTQxMDcwLjgwNTc4NDg5OTcsMC4wLDAuMCwwLjAsMC4wLDE5NTE4NjUuNzM5OTMzMzk1LDIxMDAwODcuMDcxNzQ2NDUzNiwwLjAsMTIxOTUyNy42MjUwNzg2NjM3LDUxODY0NS44NDc4NzE0NjA2NiwxODY0MTQxLjQ3NzU5MTY5NywwLjAsMC4wLDc1ODM5NS41MDgxNDMxMTU2LDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDM4NzgyOTEuNjY5Mzk4NjA1LDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCw4NjAwMjAuODkzMjUzMzU2MywyMzExMjM3LjQwOTg4ODk3MzUsMjYwMTY4LjAyOTk3Mjg3NTY3LDY3NTM3Ni41NjA4NTIyODUsMjczMTE2Ljg0OTI5OTUzODUsMzQxNTczLjg1OTczNzkwODgsMTQzMTM5Ljg4ODYwOTUxODA0LDEuMDM5Njg5NDYxODk3OTY0NkU3CiszMSxUaHUgMjQgRmViIDExLDYwODg1Ny4zNzczMjc4NDgxLDcyMzE1MS43NjczODE1MDYsNzY3MTMyLjk3MzU4NjA1MTQsMjc1NzI3My4xNzc4NTE1NCw2MDI5OTkuNTE4MDI2Mzg5Niw2MzY1NTIuODk2MDEzNjc2NSwxMjg2NDg5LjQwOTEyNDU0MywwLjAsNTMzMTIyLjY2ODgyNjc2MzQsMTI1MDYyMC4zOTMyNjk4MzU3LDUyOTU2Ny42MjYwODMwNTcxLDE2NzkwODguMzMzMDM0NjA0OCwyMTk2NDQ0LjkwNzAxOTk2OSw1MTAwNTQuNjQ2MjgwNzkwNiwxNzk0NjM2Ljc3NTI3NDMzNzMsNTQ3NjA5LjExNjkwNDY1MzUsODI4MDcwLjA3NDYyMzQ5MDcsOTMxNzQ0LjA5NTMxNzM0MjQsMTE2OTkyNS41NTE3MTc1MTM1LDEyMTIyMTMuMDA3MDM4NTI0LDYyNTQ5My4wOTU1MzcxMTcsMC4wLDEyMjE3MDYuNTk1NTY5NTE1NiwxNTA5NTM3LjMyOTM5MzgzMSwzNjY3NjguNDgzMTM1MzI4MywxNTY5NjguNjEyMzU0NjU4MDgsNjA1ODk2LjczMjA0NjAxNiwzNzM3MjI5LjYzMzAzNDYzNTMsMjAxMTk0NS42NDkyOTUzNzUyLDIyODQ2MjAuMDU4OTgyMzIyLDEyODEyOTguMzUyODQ5NzY5Miw3MDkyMTQuNjMzNTE5MjYwMywyMDIxMDguNTEwODg3MzU5MDcsMjI4NTg1NS4xMzQzOTQ2NDksMjIzNjExMy45MDMxOTQ5NzkzLDI5NDE1MDAuMjM5MzU2MTg5LDAuMCwwLjAsMC4wLDAuMCwxOTUyMTczLjQ2MDgyNzk0MSwyMTAwMzg0LjU2NzU0Mjk3MSwwLjAsMTIyMDE1Ni4xNTU4MTM1MDQsNTE4Nzg1LjMzNTQwNzUyMjMzLDE4NjQ3MDUuNzY2NzM0NjIwNiwwLjAsMC4wLDc1OTAwMy40ODY1NDk4Mjg4LDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDM4Nzk0ODAuOTkwMzc5MTk3LDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCw4NjE5MDEuNjg5OTMxODE2NywyMzE0MjYxLjg4NzQwMTc1MjYsMjYwMjcwLjYyOTc5NTI0MjEzLDY3NTU3My40MDU0ODg0MTIxLDI3MzE4OC4wMDQwMzEwNTM5LDM0MTcwNC45OTY5NzEwMjg0LDE0MzE4NC44MTg3NjAyNzc3NiwxLjAzOTgzMjYyODc1ODAyMDlFNworMzIsRnJpIDI1IEZlYiAxMSw2MDkwNDYuMjc1ODYxNzU3MSw3MjMzMzQuNTIyODU1MTY4MSw3NjczMjIuMzkzNTI5NzA3NiwyNzU3OTc0LjYzNTM4Njc4MjcsNjAzNDQ1LjQ1ODAzMDE3NzcsNjM2OTQ0LjU0Mzk1MDUzMDUsMTI4NzE1OC4zODE5NDE5NDc2LDAuMCw1MzM5MTEuMjU3NTEyNjM4MSwxMjUxNjI2LjI4NTY4MjQyNiw1MzAxODkuMzM4NTcyNTk2OCwxNjgwMDQ0LjAwODI1OTEzLDIxOTcxOTcuNTMzMzMwODI3NSw1MTA0ODAuNjgxODU3NzcyNjQsMTc5NTY3MC44Njg1OTcwNzk1LDU0Nzk5Ni43NjE5NjI1ODM2LDgyODYyNS44OTY4NzIyMjE3LDkzMjMzNS43OTk4MTg3MTg4LDExNzA2MzcuMzE5NDA2NzEyNywxMjEyOTEyLjY4OTY5OTQ2NCw2MjU4NDEuMzg4MDQ1NjA5NywwLjAsMTIyMjEwMy4wNzY1NDQ3Nzk4LDE1MDk3OTcuNjc2NTQxODEyMywzNjY4MjMuNTk4MDY1OTc5NCwxNTY5OTAuNDIxNjY2NzQyNiw2MDU5OTguMDkwNTY2NTc1OCwzNzM3NjAyLjc5MTM1OTkwNDcsMjAxMjIyMi4yNjQzMTI5NzU4LDIyODQ4NzQuMzQ5OTE5NjEsMTI4MTUwNi45NDczNDUzMzUsNzA5MzM1LjUyNjc4ODQ4NTksMjAyMTMxLjMwNDQyMzI3MjIzLDIyODYxOTQuNjM3MzU0MzIwNCwyMjM2MzM4LjEyMTI0MDI3NSwyOTQxNzk5LjM1OTMyODI4OTUsMC4wLDAuMCwwLjAsMC4wLDE5NTIzODcuODY5NTYzOTYzMywyMTAwNTkxLjc2MTcxNDA1NTcsMC4wLDEyMjA1OTYuNTg5NTkyMzQ2NSw1MTg4ODIuNzU1MTg3NzYzMjUsMTg2NTEwMC4wOTU2NTg2MTY0LDAuMCwwLjAsNzU5NDMwLjYyODEzNzUwMjEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMzg4MDMxMS45MzA3Mzg1NTMsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDg2MzIzMi43NjgxMTM2MjQyLDIzMTYzOTMuNzcxNzIxMzEzMiwyNjAzNDIuNDIxNjgyODMyNSw2NzU3MTAuOTM2NzkxNzI1NSwyNzMyMzcuNjkxNzY0MDAzOCwzNDE3OTYuNzQ1MTAyNzY1MzMsMTQzMjE2LjIyMTgzMjk2MDY0LDEuMDM5OTMyMzUwNjI2MTM4NEU3CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNFSVJfUktfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL1NfMC5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNFSVJfUktfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL1NfMC5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmY2ZDhmNwotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0VJUl9SS19SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vU18wLmNzdgpAQCAtMCwwICsxLDMzIEBACitpdGVyYXRpb24sdGltZSxzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9ub2RlL3RyYW5zcG9ydC9waXBlL1BITAorMSxUdWUgMjUgSmFuIDExLDQ3OTMyLjU0Nzk0NTIwNTQ4NgorMixXZWQgMjYgSmFuIDExLDQ3OTMyLjQ4MDM0OTczNzk4CiszLFRodSAyNyBKYW4gMTEsNDc5MjQuNDMwODg3OTI5NTEKKzQsRnJpIDI4IEphbiAxMSw0NzM0OC42Mjk0Nzc4ODg0OAorNSxTYXQgMjkgSmFuIDExLDI1MDcyLjM0MTExMjc1NzY3MworNixTdW4gMzAgSmFuIDExLDQzLjI5OTg1MTY0MDIwNjgyNQorNyxNb24gMzEgSmFuIDExLDYuMDAzNjA3MTIzODM3NDM4Cis4LFR1ZSAxIEZlYiAxMSwwLjA1OTg2NTAyMzQ5NTA3OTY1NAorOSxXZWQgMiBGZWIgMTEsMC4wMDQ0MDMxNDAyOTQwNTM2NjQKKzEwLFRodSAzIEZlYiAxMSw4LjkxMjk2MjYzMjMxMjMxOUUtNworMTEsRnJpIDQgRmViIDExLDEuODcxNDc5NTQyMTU3OTUzOEUtMTEKKzEyLFNhdCA1IEZlYiAxMSwyLjE5MjQyMTE4MzYyMTI5OUUtMTUKKzEzLFN1biA2IEZlYiAxMSwxLjg3ODg2ODY4NzY1NTgxOUUtMTgKKzE0LE1vbiA3IEZlYiAxMSw4LjIxMTgwMTA0NzkxNDA2M0UtMjEKKzE1LFR1ZSA4IEZlYiAxMSwxLjMwNzc1Mjk2MDQ4OTQxNTRFLTIyCisxNixXZWQgOSBGZWIgMTEsNS43MDQ1NTQxNDM0NDYyNjhFLTI0CisxNyxUaHUgMTAgRmViIDExLDUuMzk2NTQ5Njk4NTMyNzQ5RS0yNQorMTgsRnJpIDExIEZlYiAxMSw5LjEyMTM4NTM2ODkzOTAxM0UtMjYKKzE5LFNhdCAxMiBGZWIgMTEsMi4zODY2NTQ1NDIyOTUyMTY3RS0yNgorMjAsU3VuIDEzIEZlYiAxMSw4LjczMjAxMzA3MjU4MjA2OUUtMjcKKzIxLE1vbiAxNCBGZWIgMTEsNC4wOTk2NzUwNzI1MDIyMjJFLTI3CisyMixUdWUgMTUgRmViIDExLDIuMzQyNzE2ODcwNjQ2MTEwNUUtMjcKKzIzLFdlZCAxNiBGZWIgMTEsMS41MjkwNTgwNDEwNzczNjcyRS0yNworMjQsVGh1IDE3IEZlYiAxMSwxLjEyMzAyMzkzMTQxNjg4OTZFLTI3CisyNSxGcmkgMTggRmViIDExLDguOTg1MzI0NjQwMjgzOTY1RS0yOAorMjYsU2F0IDE5IEZlYiAxMSw3LjY1MDQyNjk0NTUxOTU5OEUtMjgKKzI3LFN1biAyMCBGZWIgMTEsNi44MTI4MjU0ODEzMjE5NTlFLTI4CisyOCxNb24gMjEgRmViIDExLDYuMjY2ODE4NjIzOTc3NTQyRS0yOAorMjksVHVlIDIyIEZlYiAxMSw1LjkwMDYzODIxMDEzNTkzOUUtMjgKKzMwLFdlZCAyMyBGZWIgMTEsNS42NDk4ODE2OTcwMDQ2MzNFLTI4CiszMSxUaHUgMjQgRmViIDExLDUuNDc1NDAxOTI4NjQ3NDQ2RS0yOAorMzIsRnJpIDI1IEZlYiAxMSw1LjM1MjQ3MjU0OTg0NTQzRS0yOApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTRUlSX1JLX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9TXzEuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTRUlSX1JLX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9TXzEuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU3MjZkNGIKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNFSVJfUktfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL1NfMS5jc3YKQEAgLTAsMCArMSwzMyBAQAoraXRlcmF0aW9uLHRpbWUsc3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vbm9kZS90cmFuc3BvcnQvcGlwZS9QSC0xMSxzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9ub2RlL3RyYW5zcG9ydC9waXBlL1BILTMsc3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vbm9kZS90cmFuc3BvcnQvcGlwZS9QSC03LHN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL25vZGUvdHJhbnNwb3J0L3BpcGUvUEgtTkNSCisxLFR1ZSAyNSBKYW4gMTEsMjguOTk0NTIwNTQ3OTQ1MjA3LDE0MTIuOTQyNDY1NzUzNDI0Niw3MzU3Ljg0MzgzNTYxNjQzOSw0MDg1My44MjE5MTc4MDgyMgorMixXZWQgMjYgSmFuIDExLDI4Ljk5NDUxNTU5MTk3NTQ5LDE0MTIuOTQyMTQyMDU3MTQwNyw3MzU3Ljg0MjU3NzkxNTI3MSw0MDg1My41MDEzOTIyMTk3OQorMyxUaHUgMjcgSmFuIDExLDI4Ljk5MzQ2Mzk0MTY2ODE4MiwxNDEyLjg3MTQ1NjA0ODQxNTcsNzM1Ny41NzU2ODIwODM3MTEsNDA4MzMuMjAwMDg2MzcwOTMKKzQsRnJpIDI4IEphbiAxMSwyOC44OTM0MjIyNzAxMTgzMTgsMTQwNi4wMzgwNDE3Mzc2NTksNzMzMi4xODQyMDk0Mzg2ODgsMzk3ODYuNTQ1NDUwMTk4NjQ2Cis1LFNhdCAyOSBKYW4gMTEsMjMuMDUzNzc5Mjk2MzkzMjYyLDEwMTguNDE0MjYwOTM2NDU2Miw1ODQ5Ljg3NDgxMzU4OTgwOCwxNDIzNi44NTg5MDY5MjE1MQorNixTdW4gMzAgSmFuIDExLDEuOTUzNjA0ODc4MTQ1ODQyLDMuOTY5NDc5NDk5NDM3MTA4OCw0OTAuNjUyNDA0NDcxMjAzOSw2LjMxNDMyMzQ2NTEwMzQwNQorNyxNb24gMzEgSmFuIDExLDEuMTY2NTIzMDkxODk4MDQwNSwwLjAwNTkwNDc1NTI1NTUxMTUyNDUsMTcyLjcwMDgwODk5OTQwNTUsMC4xNjQ4MTgwNDU1NjgyMDMyCis4LFR1ZSAxIEZlYiAxMSwxLjAxMDQ5MjE4Mzg5NzUxODMsOC40ODEwNTI3OTU5NDgyOTlFLTUsMC4zMjk2NDE2MjQzNjg2OTM5MywwLjAwMjUwMzM4MzgxOTAyNDExNDIKKzksV2VkIDIgRmViIDExLDAuMDc1ODE4NTEyMzAxNjE5MDcsNi4xMTA2MDY2MzY0Nzc2MTFFLTYsMy4xMzI1ODYxNzY4ODQzMzFFLTUsMS44NDg1ODcxNjY2NzQzMzZFLTQKKzEwLFRodSAzIEZlYiAxMSwyLjUzNTkyMjc0MDc3MjUyNkUtNiw0LjA1NjkzODI1Mjk5NTM1N0UtOSwxLjU4NjgyMzYyNzY1NjY2NUUtOCwxLjMzNTAzMzA3NDE3Njk2OEUtNworMTEsRnJpIDQgRmViIDExLDIuMDc0MzEzNjUxMzcxNDEwNUUtMTIsMi4wMTAyMzA0Nzg3MjQxMDcxRS0xMyw1LjE5MDE2OTIwMTIyODgwOEUtMTMsNy43Njc5NjAwOTE1ODc2NkUtMTIKKzEyLFNhdCA1IEZlYiAxMSwyLjQ0NDE0Mzg0NzUyMjA3MkUtMTgsMy4wMjU2ODg1ODcxMjU3MzU3RS0xNyw2LjIyMDQ3NDY4MDc4NTM2RS0xNywxLjMyOTEyMDk0MDkzMzk1ODNFLTE1CisxMyxTdW4gNiBGZWIgMTEsMS41MTYyOTM3Njg2MjYxMDhFLTIyLDIuNzQ4MjIzNjM0MDcwMDI1RS0yMCw1LjUyMjI1ODIxNTc5MjU2M0UtMjAsMS4yNjAwNzkyMjc5MzQ1OTA2RS0xOAorMTQsTW9uIDcgRmViIDExLDYuNDA0NTkyMzQyNjMyOTIxRS0yNSwxLjIzNzUzODk5NDI1MDA3NzdFLTIyLDIuNjMwMTg0MDk0NTI5MzcyM0UtMjIsNS41ODgwMDUxNDU2NjkzMDM0RS0yMQorMTUsVHVlIDggRmViIDExLDEuMTUyNjI5MTE5NTQ3MDE4OEUtMjYsMi4wMjU4OTQwODA1NzAxNTI0RS0yNCw0LjcxMDY5NDEwNjE0MDQyODRFLTI0LDguNzc3OTM4OTYxNTQ3OTE2RS0yMworMTYsV2VkIDkgRmViIDExLDUuODI3MjkxMzkwNTY3Mzc0RS0yOCw5LjA1OTgyMDc0NDc0MjcyOUUtMjYsMi4zMzExNDkxNTAyMTgyNThFLTI1LDMuNzY0NzY0Mjk0MzE4MDEwNkUtMjQKKzE3LFRodSAxMCBGZWIgMTEsNi40NDc2OTk0MzU3MDIwNzFFLTI5LDguNzM2ODI5NjQzNTM0MDExRS0yNywyLjQ5NTAzOTM1MTMzMTQwNDhFLTI2LDMuNTMyMTA2NzM4NDM4Mzc4NEUtMjUKKzE4LEZyaSAxMSBGZWIgMTEsMS4zMjE0MTc2OTUxNjQxMThFLTI5LDEuNDk2NDc0NTc0MjczMDc3RS0yNyw0LjgzMTY1NTUxODQwMjc5MTRFLTI3LDUuOTc4MDI4ODQ1MDQyNjY1RS0yNgorMTksU2F0IDEyIEZlYiAxMSw0LjA0Mzc1MjgzODExNjY0MjZFLTMwLDMuOTM0NTA2NTc0MDQ2MTUyRS0yOCwxLjQwOTUyNTE3NTQ3MjAxMjZFLTI3LDEuNTk0MjIyMzIyMzM3NzMzRS0yNgorMjAsU3VuIDEzIEZlYiAxMSwxLjY3OTQ2NjIyMDEyMTIwODhFLTMwLDEuNDMzMjU0MDMxNjE2NzUyRS0yOCw1LjU4MTM1MzcyNjk5OTQ5OEUtMjgsNi4wMzYyNTEyNTk2NTI3MzA1RS0yNworMjEsTW9uIDE0IEZlYiAxMSw4LjkxODE0MDg5OTgwOTk0RS0zMSw2LjY1NDM1MTA3MjEzNzc3M0UtMjksMi44MDIzODEyNzkwODM4MzFFLTI4LDIuOTU1OTI2NTI3MTQ4NTM1N0UtMjcKKzIyLFR1ZSAxNSBGZWIgMTEsNS40NDQ1NDcxMjg2MDkzMDNFLTMxLDMuNzQ0NzM1OTMwNTIxMjYxRS0yOSwxLjY1Mzc2NTc4MTUzMTc4OThFLTI4LDEuNzY3NzQ1NzQ3NjM4NDk4N0UtMjcKKzIzLFdlZCAxNiBGZWIgMTEsMy45OTE0NzIyNzQ5ODQzMDhFLTMxLDIuMzk5NzQyNDk0Mjk3MjUxN0UtMjksMS4xMzQ5OTA5MDMzMDQ1MTJFLTI4LDEuMjA2MDA5MjU1ODE1NzMwMkUtMjcKKzI0LFRodSAxNyBGZWIgMTEsMi45NDk1ODExNDY1NzM2NDU0RS0zMSwxLjczMjA2OTg1MDM1MDExMUUtMjksOC4yOTkyODY4ODcwOTMyNjhFLTI5LDkuMjI3NzE3Mzg5MTYzNDE3RS0yOAorMjUsRnJpIDE4IEZlYiAxMSwyLjQzNTIwNzE0ODIzNDI4MDdFLTMxLDEuMzY1NDIxNjE2OTE1MDUxNkUtMjksNi42ODE1NDg3OTU5ODAzMzRFLTI5LDcuNjI1ODIyMzIxMjk4NjgxRS0yOAorMjYsU2F0IDE5IEZlYiAxMSwyLjExNDk4NTAxMzE3ODc1NUUtMzEsMS4xNDgxMDA0MTAyNjcyNjA2RS0yOSw1LjcwMzAzNDgwMTQ1NDA1OEUtMjksNi42NjAzNzAzMjI3MjA5ODc1RS0yOAorMjcsU3VuIDIwIEZlYiAxMSwxLjkxNDExNjgwNTQ0MzI3MzRFLTMxLDEuMDEyMjIyMzg1MTUwNDQ0N0UtMjksNS4wODc0MzQxNzkyNjI4OThFLTI5LDYuMDQ5OTQ1ODk3MTAzMjk4RS0yOAorMjgsTW9uIDIxIEZlYiAxMSwxLjc4MTgyOTQ5MzM2ODEzNzVFLTMxLDkuMjM3MzU0ODA4Nzc3MDQ0RS0zMCw0LjY4Mzg1NzI3MDkyOTg0N0UtMjksNS42NTAzMDUxNDg1MDgzMDVFLTI4CisyOSxUdWUgMjIgRmViIDExLDEuNjkyMzM5MTE3NTIwODU3N0UtMzEsOC42NDQzOTM3NzEwNTU0OTlFLTMwLDQuNDEyMDU4OTE0ODg2ODQzRS0yOSw1LjM4MjE5Mjc1NTU2MjQ5MkUtMjgKKzMwLFdlZCAyMyBGZWIgMTEsMS42MzA0MTk1NzI0MzQ3MzQ4RS0zMSw4LjIzODI1MTAyNTYwOTk3NUUtMzAsNC4yMjUxODA1ODcxNzY4NDVFLTI5LDUuMTk4OTg3ODA0MjY1Nzk5RS0yOAorMzEsVGh1IDI0IEZlYiAxMSwxLjU4Njg0MjMxNDEyOTYwNzhFLTMxLDcuOTU1NTMyMjE0MDM5MjcyRS0zMCw0LjA5NDc1ODY4OTc3MDE3OTVFLTI5LDUuMDcyMDg1NzcxMzE3MDU1RS0yOAorMzIsRnJpIDI1IEZlYiAxMSwxLjU1NTc0MzU0MDM3MDYwMTZFLTMxLDcuNzU2MjIzMjEzNTc5NTdFLTMwLDQuMDAyNzAwODk1MzcxMzA3RS0yOSw0Ljk4MzIzMjQwOTkzNTUyM0UtMjgKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0VJUl9SS19SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vU18yLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0VJUl9SS19SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vU18yLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNTViOTBiCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTRUlSX1JLX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9TXzIuY3N2CkBAIC0wLDAgKzEsMzMgQEAKK2l0ZXJhdGlvbix0aW1lLFBILTEtRzY0MDAwMSxQSC0xLUc2NDAwMDIsUEgtMS1HNjQwMDAzLFBILTEtRzY0MDAwNCxQSC0xMC1HNjUwMDAxLFBILTEwLUc2NTAwMDIsUEgtMTAtRzY1MDAwMyxQSC0xMC1HNjUwMDA0LFBILTEwLUc2NTAwMDUsUEgtMTAtRzY1MDAwNixQSC0xMC1HNjUwMDA3LFBILTExLUc2NjAwMDEsUEgtMTEtRzY2MDAwMixQSC0xMS1HNjYwMDAzLFBILTExLUc2NjAwMDQsUEgtMTEtRzY2MDAwNSxQSC0xMi1HNjcwMDAxLFBILTEyLUc2NzAwMDIsUEgtMTItRzY3MDAwMyxQSC0xMi1HNjcwMDA0LFBILTEyLUc2NzAwMDUsUEgtMi1HNjgwMDAxLFBILTItRzY4MDAwMixQSC0yLUc2ODAwMDMsUEgtMi1HNjgwMDA0LFBILTItRzY4MDAwNSxQSC0zLUc2OTAwMDEsUEgtMy1HNjkwMDAyLFBILTMtRzY5MDAwMyxQSC0zLUc2OTAwMDQsUEgtMy1HNjkwMDA1LFBILTMtRzY5MDAwNixQSC00LUc3MDAwMDEsUEgtNC1HNzAwMDAyLFBILTQtRzcwMDAwMyxQSC00LUc3MDAwMDQsUEgtNC1HNzAwMDA1LFBILTQtRzcwMDAwNixQSC00LUc3MDAwMDcsUEgtNC1HNzAwMDA4LFBILTQtRzcwMDAwOSxQSC00LUc3MDAwMTAsUEgtNC1HNzAwMDExLFBILTUtRzcxMDAwMSxQSC01LUc3MTAwMDIsUEgtNS1HNzEwMDAzLFBILTUtRzcxMDAwNCxQSC01LUc3MTAwMDUsUEgtNS1HNzEwMDA2LFBILTYtRzcyMDAwMSxQSC02LUc3MjAwMDIsUEgtNi1HNzIwMDAzLFBILTYtRzcyMDAwNCxQSC02LUc3MjAwMDUsUEgtNy1HNzMwMDAxLFBILTctRzczMDAwMixQSC03LUc3MzAwMDMsUEgtNy1HNzMwMDA0LFBILTgtRzc0MDAwMSxQSC04LUc3NDAwMDIsUEgtOC1HNzQwMDAzLFBILTgtRzc0MDAwNCxQSC04LUc3NDAwMDUsUEgtOS1HNzUwMDAxLFBILTktRzc1MDAwMixQSC05LUc3NTAwMDMsUEgtOS1HNzUwMDA0LFBILTktRzc1MDAwNSxQSC1DQVItRzIzMDAwMSxQSC1DQVItRzIzMDAwMixQSC1DQVItRzIzMDAwMyxQSC1DQVItRzIzMDAwNCxQSC1DQVItRzIzMDAwNSxQSC1OQ1ItRzUyMDAwMQorMSxUdWUgMjUgSmFuIDExLDYwOTQ4MC4wLDcyMzc1My4wLDc2Nzc1Ni4wLDI3NTk1ODEuMCw2MDQ0ODMuMCw2Mzc4NTMuMCwxMjg4NzA2LjAsODM5ODQuMCw1MzU3NzAuMCwxMjUzOTcwLjAsNTMxNjQ4LjAsMTY4MjI1OC4wLDIxOTg5MjguMCw1MTE0NzQuMCwxNzk4MDY3LjAsNTQ4ODk4LjAsODI5OTE3LjAsOTMzNzA5LjAsMTE3MjI4OC4wLDEyMTQ1MzQuMCw2MjY2NDguMCw5NjYyLjAsMTIyMzAxNC4wLDE1MTAzOTEuMCwzNjY5NDkuMCwxNTcwNDAuMCw2MDYyMjkuMCwzNzM4NDQ4LjAsMjAxMjg1MS4wLDIyODU0NTEuMCwxMjgxOTgyLjAsNzA5NjExLjAsMjAyMTgzLjAsMjI4Njk2Ny4wLDIyMzY4NDYuMCwyOTQyNDc3LjAsMjQzNzg2LjAsNDQzOTc0LjAsNzk1MTM3LjAsODQ1NDc0LjAsMTk1Mjg3NC4wLDIxMDEwNjEuMCwyNzI4OTUuMCwxMjIxNjEwLjAsNTE5MTA1LjAsMTg2NjAwMS4wLDI0MzQ2MC4wLDgwNDg3NC4wLDc2MDQyMC4wLDQ5NzUwNi4wLDU2MTMyNi4wLDc3NjYwMC4wLDI0NjU5MjUuMCwzMDAyOTc0LjAsMTI5MzQ2NS4wLDM4ODIyMDkuMCwxMzM3Mzg2LjAsODk2NTAuMCw0MTE5OTQuMCwxOTM5MDk2LjAsNTk4MDc2LjAsNDMyNDAzLjAsNzI5ODQ1LjAsMzQyODIyLjAsNjI4NzkzLjAsMjM5NjIzLjAsODY2MzczLjAsMjMyMTM3My4wLDI2MDUwNy4wLDY3NjAyNS4wLDI3MzM1MS4wLDM0MjAwNy4wLDE0MzI4OC4wLDEuMDQwMTU4MkU3CisyLFdlZCAyNiBKYW4gMTEsNjA5NDc5Ljk5OTk5OTk5OTUsNzIzNzUyLjk5OTk5OTk0MzQsNzY3NzU1Ljk5OTk5OTkxNTQsMjc1OTU4MC45OTk5OTI2OTIsNjA0NDgzLjAsNjM3ODUzLjAsMTI4ODcwNS45OTk5OTk5OTk4LDgzOTg0LjAsNTM1NzcwLjAsMTI1Mzk3MC4wLDUzMTY0OC4wLDE2ODIyNTguMCwyMTk4OTI3Ljk5OTk5OTQ0MDMsNTExNDc0LjAsMTc5ODA2Ny4wLDU0ODg5OC4wLDgyOTkxNy4wLDkzMzcwOS4wLDExNzIyODguMCwxMjE0NTM0LjAsNjI2NjQ4LjAsOTY2Mi4wLDEyMjMwMTMuOTk5OTk5OTA4MywxNTEwMzkwLjk5ODI4NzQzNCwzNjY5NDguOTk4MTMwODI5NjYsMTU3MDM5Ljk5NTQ4NDQyODI4LDYwNjIyOC45OTkyNDk3NTg3LDM3Mzg0MTMuMjI3MjQzODkyNCwyMDEyODUwLjk1MjI2NTI5NzgsMjI4NTQ0OS4yOTc2OTI2NDEsMTI4MTk4MS45OTg4NzAwNzI0LDcwOTYxMC45OTkzMTk5MjI1LDIwMjE4Mi43NDkzODA3ODE4NywyMjg2OTY2Ljk1MDQ0NTYzMjUsMjIzNjgyOC41MzExNDkwMjYsMjk0MjQ1OS45NzA4MDE2Nzk0LDI0Mzc4Ni4wLDQ0Mzk3NC4wLDc5NTEzNy4wLDg0NTQ3NC4wLDE5NTI4NzIuNDYzMzgyNTA2NSwyMTAxMDMwLjY1NjE0NDQyMTUsMjcyODk1LjAsMTIyMTYwOS45OTk5OTk5ODM3LDUxOTEwNC45OTk4Mjc1NDI2LDE4NjYwMDAuOTk5ODI3MjMzNCwyNDM0NjAuMCw4MDQ4NzQuMCw3NjA0MjAuMCw0OTc1MDYuMCw1NjEzMjYuMCw3NzY2MDAuMCwyNDY1OTI1LjAsMzAwMjk3NC4wLDEyOTM0NjUuMCwzODgyMjA4Ljk5OTg1NzgxMDMsMTMzNzM4Ni4wLDg5NjUwLjAsNDExOTk0LjAsMTkzOTA5Ni4wLDU5ODA3Ni4wLDQzMjQwMy4wLDcyOTg0NS4wLDM0MjgyMi4wLDYyODc5My4wLDIzOTYyMy4wLDg2NjM3My4wLDIzMjEzNzMuMCwyNjA1MDYuOTk5OTk5OTk4MDUsNjc2MDI0Ljk5OTk4NzUyNTUsMjczMzUwLjk5OTk4MjgzMzUsMzQyMDA2Ljk5OTk5OTkxMDYsMTQzMjg3Ljk5OTk5ODc5ODk0LDEuMDQwMTMyNTE0MTE4MzY5RTcKKzMsVGh1IDI3IEphbiAxMSw2MDk0NzkuOTk5OTk3ODQ3MSw3MjM3NTIuOTk5ODQxODU5NCw3Njc3NTUuOTk5NzczOTEyLDI3NTk1ODAuOTk1OTI0NTQ1LDYwNDQ4My4wLDYzNzg1Mi45OTk5OTk5OTc4LDEyODg3MDUuOTk5OTk5NzIwNiw4Mzk4NC4wLDUzNTc3MC4wLDEyNTM5NzAuMCw1MzE2NDguMCwxNjgyMjU3Ljk5OTk5OTkxMzQsMjE5ODkyNy45OTk3Mjg4OTM0LDUxMTQ3NC4wLDE3OTgwNjYuOTk5OTk5OTEyLDU0ODg5OC4wLDgyOTkxNi45OTk5OTk5OTk0LDkzMzcwOC45OTk5OTk5OTgzLDExNzIyODcuOTk5OTk5OTk2LDEyMTQ1MzMuOTk5OTk5OTI3MSw2MjY2NDcuOTk5OTk5OTI3NCw5NjYyLjAsMTIyMzAxMy45OTk5MTc0NzA2LDE1MTAzOTAuNDc5NzE3NzA3LDM2Njk0OC40MzY2OTI3NzEyLDE1NzAzOC44OTY5NjcwMjEsNjA2MjI4Ljc1MDA2NzAzNzQsMzczNjI2My42NTA0NzgyMzU0LDIwMTI4NDAuNzIxNTQyOTYxNywyMjg1MjMwLjI2NTg1NjU5NywxMjgxOTgxLjU1Mjg1OTk1NjYsNzA5NjEwLjc3NTU5MDMzNDIsMjAyMTU3LjA3MjY2NTYxODc2LDIyODY5NTkuNjAwNTA3NDk1NSwyMjM1Njg4LjUxODIzMzQ2LDI5NDEyNDMuOTcyMzk0NzU1LDI0Mzc4Ni4wLDQ0Mzk3NC4wLDc5NTEzNy4wLDg0NTQ3NC4wLDE5NTI2NjQuNzYzNTQ4MTEsMjA5OTQ0Mi44ODA0MDc5NzgzLDI3Mjg5NS4wLDEyMjE2MDkuOTk5OTgzNjU2Nyw1MTkxMDQuOTQwMDk3NTc4NzQsMTg2NjAwMC45Mzk5MjkwOTQyLDI0MzQ2MC4wLDgwNDg3NC4wLDc2MDQxOS45OTk5OTk5OTMxLDQ5NzUwNi4wLDU2MTMyNi4wLDc3NjYwMC4wLDI0NjU5MjUuMCwzMDAyOTc0LjAsMTI5MzQ2NS4wLDM4ODIyMDguOTMxMTE1NDUxMywxMzM3Mzg2LjAsODk2NTAuMCw0MTE5OTQuMCwxOTM5MDk2LjAsNTk4MDc2LjAsNDMyNDAzLjAsNzI5ODQ1LjAsMzQyODIyLjAsNjI4NzkzLjAsMjM5NjIzLjAsODY2MzczLjAsMjMyMTM3My4wLDI2MDUwNi45OTk5OTI3NjY4LDY3NjAyNC45ODkyNjU4NzI0LDI3MzM1MC45ODU0NDM4MDc1LDM0MjAwNi45OTk5MDIyNjYzNywxNDMyODcuOTk4OTk0MDQzNDgsMS4wMzg5OTY4NDA2MDU5Nzc0RTcKKzQsRnJpIDI4IEphbiAxMSw2MDk0NzkuOTk4Nzk3NTE2Myw3MjM3NTIuOTQ1MTM1NTkzOSw3Njc3NTUuOTIyMjE3NjMzMSwyNzU5NTgwLjI2NDExMzM5OSw2MDQ0ODIuOTk5OTk5OTc1NCw2Mzc4NTIuOTk5OTk5MTI3MSwxMjg4NzA1Ljk5OTkzNTQzOCw4Mzk4NC4wLDUzNTc3MC4wLDEyNTM5NjkuOTk5OTk5OTgyNSw1MzE2NDguMCwxNjgyMjU3Ljk5OTk3OTEyOSwyMTk4OTI3Ljk1NzE3NDk1MTcsNTExNDczLjk5OTk5OTk5MzksMTc5ODA2Ni45OTk5Nzg5NjU2LDU0ODg5Ny45OTk5OTk5NzgzLDgyOTkxNi45OTk5OTk3MTAyLDkzMzcwOC45OTk5OTkyODU3LDExNzIyODcuOTk5OTk4NDQ2MywxMjE0NTMzLjk5OTk4MzAzNDYsNjI2NjQ3Ljk5OTk4MzQzNTYsOTY2Mi4wLDEyMjMwMTMuOTgzMDg5MTcyLDE1MTAzMzAuMDE4ODg0OTMsMzY2ODgzLjQ1ODQ4NDM2MDgzLDE1NjkzNi4wNDk0MTg0NTgwNSw2MDYxOTcuMDA1OTk1NjYwMSwzNjI3NDExLjcyNTI2NDA2OCwyMDExNzYwLjA1MTIxODEyMSwyMjY4NTgwLjc0MzU2MTc2LDEyODE5MTYuNTI1ODk4MTE2NCw3MDk1ODIuMzQxOTE0NzQ0MSwyMDA1NDguNTg5NTQ2NTE1NCwyMjg2MzE5LjY2NTk2MTMxMDMsMjE3NTE3My44MTIwODE4OTg2LDI4NzM3MDAuMjc2MDUwMTczNywyNDM3ODYuMCw0NDM5NzQuMCw3OTUxMzcuMCw4NDU0NzQuMCwxOTM2NDkwLjY0OTQ1MjU0MjQsMjAyNzExMi44ODk5NDI2Njc3LDI3Mjg5NS4wLDEyMjE2MDkuOTk2MzExNTEzNyw1MTkwOTcuMTEyMDU1OTY4NDQsMTg2NTk5My4wODA4MjI0NjkyLDI0MzQ2MC4wLDgwNDg3NC4wLDc2MDQxOS45OTk5OTcyNzA5LDQ5NzUwNi4wLDU2MTMyNi4wLDc3NjYwMC4wLDI0NjU5MjUuMCwzMDAyOTc0LjAsMTI5MzQ2NS4wLDM4ODIxOTguMTExNTMwNDMzLDEzMzczODYuMCw4OTY1MC4wLDQxMTk5NC4wLDE5MzkwOTYuMCw1OTgwNzYuMCw0MzI0MDMuMCw3Mjk4NDUuMCwzNDI4MjIuMCw2Mjg3OTMuMCwyMzk2MjMuMCw4NjYzNzMuMCwyMzIxMzcyLjk5OTk5OTk5NywyNjA1MDYuOTk2Nzg4NDA5NjUsNjc2MDIyLjkxMjk0OTIxNjgsMjczMzQ4LjIxNzc3OTQ5OTEzLDM0MjAwNi45NzY3ODg3NDc3LDE0MzI4Ny44MTAyNDYzMTA3LDk4OTM1NzQuMzk1OTA0NjQKKzUsU2F0IDI5IEphbiAxMSw2MDk0NzkuNzE3MzA3MTk1NSw3MjM3NDMuODQxMDA1MzcxOCw3Njc3NDMuMDUzNDc1MTYxMiwyNzU5NDk2LjA3OTM4Mzg5OCw2MDQ0ODIuOTk5OTk0MTk1NCw2Mzc4NTIuOTk5ODM4MDQ2NiwxMjg4NzA1Ljk5MTMzMTc5NjksODM5ODQuMCw1MzU3NzAuMCwxMjUzOTY5Ljk5OTk5NjA1NTgsNTMxNjQ3Ljk5OTk5OTk5NTUsMTY4MjI1Ny45OTcwODUzNSwyMTk4OTIzLjY4NTc2ODY3NCw1MTE0NzMuOTk5OTk4NjIzMSwxNzk4MDY2Ljk5NzA3NTkxNTgsNTQ4ODk3Ljk5OTk5NDA0NzEsODI5OTE2Ljk5OTk0Mzc0MTIsOTMzNzA4Ljk5OTg2NDI0MjcsMTE3MjI4Ny45OTk3MDg5MzQyLDEyMTQ1MzMuOTk3NzEzOTk5NCw2MjY2NDcuOTk3ODAzMjc2LDk2NjIuMCwxMjIzMDExLjk1MTc0MzAyNTgsMTUwNTQxNy44MzkxNjk3MTQ2LDM2MTY3MC41NjU5NDUzNjc3LDE1MDM4NC43MTc0OTk2MTY0LDYwMzQyMC4wNTA4MjAxNzI0LDExNzM3MzEuMzg5NDg0Mjc3NywxOTMwNTc0LjM2ODYzMTM1MDgsMTUwNDc2My41NDcxMjU1MDQ4LDEyNzU1NDIuMTc0MTIzNTc4Nyw3MDcwODIuMjM1NTYzOTEyMSwxMzc3NjkuMjgxMDQ5NzcxNzYsMjI0MzI1Ni44MTkxMzM5Nzk3LDcyODY3My4wMTExNzUzOTQyLDEwOTE0ODMuNzY3MDY5OTMxMSwyNDM3ODYuMCw0NDM5NzQuMCw3OTUxMzcuMCw4NDU0NzQuMCwxMjEyNTkxLjc5MDA0ODgxMTEsNTg3NDcyLjI2MjAwMzgwMDIsMjcyODk1LjAsMTIyMTYwOS41MTQxNTg3MzM3LDUxODQwMC41MzIyOTI0NzAxLDE4NjUyOTIuMzg3NjcwMzg5LDI0MzQ2MC4wLDgwNDg3NC4wLDc2MDQxOS45OTk0NzMzNzYsNDk3NTA2LjAsNTYxMzI2LjAsNzc2NjAwLjAsMjQ2NTkyNS4wLDMwMDI5NzQuMCwxMjkzNDY1LjAsMzg4MTExMS40MTcwMjUxODU3LDEzMzczODYuMCw4OTY1MC4wLDQxMTk5NC4wLDE5MzkwOTYuMCw1OTgwNzYuMCw0MzI0MDMuMCw3Mjk4NDUuMCwzNDI4MjIuMCw2Mjg3OTMuMCwyMzk2MjMuMCw4NjYzNzMuMCwyMzIxMzcyLjk5OTk5OTE1LDI2MDUwNi4zNTM4MTY5NTIzMiw2NzU3ODUuODA4NzY4NTU1OSwyNzMwMzcuODY5MDQ0OTI5NywzNDIwMDMuODc1OTQ5MDgsMTQzMjY2Ljg3MDExNTI2MzE1LDE5Njk2MTMuNTk3NDU5NTY1OAorNixTdW4gMzAgSmFuIDExLDYwOTQyOC44NDUwMDk0MjUyLDcyMjUyOC45NzE2NTI5NjEsNzY2MDQzLjk4MjkyNzE3NzMsMjc1MjA3Mi4xODExOTY0MjkzLDYwNDQ4Mi45OTg5MDY2NDY3LDYzNzg1Mi45NzU2ODI1MzY3LDEyODg3MDUuMDg4MzM3NDI4Miw4Mzk4NC4wLDUzNTc2OS45OTk5OTk5NTMyLDEyNTM5NjkuOTk5MjgzNzM5MSw1MzE2NDcuOTk5OTk4NzQxMSwxNjgyMjU3LjY4MDIyNzIxMjQsMjE5ODY0OC40NzUxNTE0MjcsNTExNDczLjk5OTc1NTU0ODI2LDE3OTgwNjYuNjgyODcyNDI3Niw1NDg4OTcuOTk4NzYyMDkxMiw4Mjk5MTYuOTkxMTY2MzM4Niw5MzM3MDguOTc5MTkzOTIyMSwxMTcyMjg3Ljk1NjE3NzA2NiwxMjE0NTMzLjc1NTMwMzE0NjMsNjI2NjQ3Ljc3MTA2ODY5NDMsOTY2Mi4wLDEyMjI4MTQuMjYyNTk4MTA0LDEyNDUzOTQuMDQxNzk2MDQxNCwxNjg2OTQuMzA5MTUzMzg4NCwzNTg0NC4zNDQwNjM3Mzg4OSw0NjQ3NTUuNzE3NDY4NjE5MSwyMDMuMjI3NDYxMDY5Njg2MjMsMzc3MDE1LjkyNzExODcxMTcsMzgzMi4yODE1NTU2NzA5LDkwNjYzOC4yNzcwMzEzOTQsNTcyMTczLjc0ODEwNTI4NDMsOTE4LjQ5NDI5NzgwNDkxMTIsOTc3MjEzLjIwOTgxNzcwNzQsMTMxLjI4NTI3MjQ5MzcxNzI2LDI3OS40NjM1MTEyNDIxNDQ5MywyNDM3ODYuMCw0NDM5NzQuMCw3OTUxMzcuMCw4NDU0NzQuMCwyMDQwLjE5NzI2NDY5Mzc2MTYsNzIuODY0NDk0Mjc5MzE0NzEsMjcyODk1LjAsMTIyMTU1OS4zNTk1OTM0ODM5LDQ3OTI4Ny41NTkwMDExNTIxLDE4MjQzMDEuODI2ODQyNzA3OCwyNDM0NjAuMCw4MDQ4NzQuMCw3NjA0MTkuOTE5OTUzNjA2OCw0OTc1MDYuMCw1NjEzMjYuMCw3NzY2MDAuMCwyNDY1OTI1LjAsMzAwMjk3NC4wLDEyOTM0NjUuMCwzODExODI2LjczNjUzMDI0MywxMzM3Mzg2LjAsODk2NTAuMCw0MTE5OTQuMCwxOTM5MDk2LjAsNTk4MDc2LjAsNDMyNDAzLjAsNzI5ODQ1LjAsMzQyODIyLjAsNjI4NzkzLjAsMjM5NjIzLjAsODY2MzcyLjk5OTk5OTk1MzIsMjMyMTM3Mi45OTk4MTQyOTcsMjYwNDAxLjIyNzE2ODI2ODk2LDY1NDc4Mi40NjI0MjA3MTUzLDI0NzAxMS4xMjYwOTgxMjU5NCwzNDE2NTcuMzQzODk4MTM3NzQsMTQxMzc0LjM3ODM1OTkyOTU0LDEyMi4xNTc1MDI4MDgyOTA1NgorNyxNb24gMzEgSmFuIDExLDYwMjcyNi41NTMyMzE4NTk5LDYyNTI2OC42ODc3OTkyODg0LDYzNjEzOC4xNzI1NjUyNTc5LDIzOTA3ODYuNjc2MTE1Njg2NSw2MDQ0ODIuODQ3MDAwODEwMiw2Mzc4NTAuMzkwODU0OTMyNiwxMjg4NjM4LjczODQ5MTA4OTMsODM5ODQuMCw1MzU3NjkuOTk5OTg5NzE0NSwxMjUzOTY5LjkwMTA3MTUxNCw1MzE2NDcuOTk5NzQ5Mjk4OSwxNjgyMjMyLjcwMjg5NTM5OTYsMjE4NTY0NC4zNTA0NDY5Mzk1LDUxMTQ3My45Njc0MDExNjI1LDE3OTgwNDIuMzE0ODE5NTUzOSw1NDg4OTcuODExNTU1NjI3OCw4Mjk5MTUuOTg1NTQ1MTk1Miw5MzM3MDYuNjg1NTU1NzAzNCwxMTcyMjgzLjIyMzkzNzU3MTcsMTIxNDUxNS40MzIyOTU3MTM4LDYyNjYzMS4zNTI4NTA3Mjg5LDk2NjIuMCwxMjEwMTc0LjU5MzQ2ODM1MDEsMjI3NjEuMTQyODExMjQxMzYzLDEyNC40MzQ2Njc3MDA2NDQxNyw1Ljk3MDA0Mjg0NTU0MTcwNiw0MTk3LjE0NDI3MzM5Mzg5MSw2LjM5NDU5NjMxMTY0MTg4MUUtNSwyMy45NjIxMTQ2NDE1Mzg5NzUsMC4wMDQxMTY1MTI3NjkyNzAyODksMzc2Ni4wMzUyMTcyMTg3MjA0LDc2NDMuNjAyNDE1MDAzMzk2LDAuMDAyODYyOTIyMjYxNzYxMzI1Miw0MTkuNjAzMDkwNTUyOTg3LDQuMTYxOTY3NTE0NTI3Nzk3RS01LDEuMDA2OTYwNjg1MjcwNzQ3M0UtNCwyNDM3ODYuMCw0NDM5NzQuMCw3OTUxMzcuMCw4NDU0NzQuMCwwLjAwMTY0MDUwNTY3MDMzMDI5NTIsMi4wMDE3NzM3NDMwNDM5MzlFLTUsMjcyODk1LjAsMTIxNzgzNS4wNDY4MTU1MDYsNDczMDkuNDQ3ODg5Mjc2NjY0LDc1ODA0NS44NTU4NjkxNzYyLDI0MzQ2MC4wLDgwNDg3NC4wLDc2MDQxMC44OTU5NjI5MDQ4LDQ5NzUwNi4wLDU2MTMyNi4wLDc3NjYwMC4wLDI0NjU5MjUuMCwzMDAyOTc0LjAsMTI5MzQ2NS4wLDE4MTU2NDIuMjgxMDYyNTU4MywxMzM3Mzg2LjAsODk2NTAuMCw0MTE5OTQuMCwxOTM5MDk2LjAsNTk4MDc2LjAsNDMyNDAzLjAsNzI5ODQ1LjAsMzQyODIyLjAsNjI4NzkzLjAsMjM5NjIzLjAsODY2MzcyLjk5OTk4OTY5OTcsMjMyMTM3Mi45Njk5NjQyMTQ2LDI0ODQyMy45MTg1ODk0MDA1LDE5MTk2NC4xNDM3NzcyMTg1LDEyNzUyLjc5NDYxNzA0MjkwNiwzMTYwODcuMTgyNjQyNDkzMDUsNzQxOTUuODA0MTU5ODk1NzgsMC4wMDU4NTU4MTk0MzA4NzY0MDYKKzgsVHVlIDEgRmViIDExLDI5MjU3Mi4xNDI1MTM0NTA0LDE3NzIwLjg5MDI4MjY2OTYyNSwxMDUwMy43ODk2MTY2NjkwOTksODM0MzAuODYyNDgyNDgyMDQsNjA0NDY3LjIzODg5ODI1ODQsNjM3NjQzLjQzNTcyNDA0NDcsMTI4NDYyNC4zNTIwOTU2OTMxLDgzOTg0LjAsNTM1NzY5Ljk5ODM5MjM2NzIsMTI1Mzk1OS41NjMzMzYwMDk0LDUzMTY0Ny45NjQyNjYxMDAxLDE2ODA1OTQuMjQ4NDQxNjI5MywxNjgxNDgyLjk5OTg2MTAyMSw1MTE0NzAuNzAzNjYwMDc0NzQsMTc5NjQ2Ny43Njk4MTE1NjE4LDU0ODg3Ny4zNjI3MjQ5MjQzLDgyOTgyOC45NDExOTEwMDg4LDkzMzUxNC45NjU2MTg4NDE0LDExNzE4OTYuNDE5MTYyNjUzLDEyMTMzNjYuMzk4NDI0Mjc2OCw2MjU2NDkuNzMyODczMjAxLDk2NjIuMCw3NjkyNDcuNDgxMTM0ODYzMiwwLjA4MTk1Mjc0OTMwODYzMDE3LDguOTg4MTExMjA5MjcxMDUyRS01LDIuMTYzOTc4NzUwMzE0MjY5M0UtNiwwLjAwODk2NDM5OTQ0NDUwNjA5OCw1LjYwMTI3MzUzNzIwMTA0M0UtMTIsNS41NTE1NzQxOTAyNzQ3MDNFLTYsNC43MTA1NzQ1NDgyODM1MzZFLTYsMC4wMDUwMDIwMzQ0MjE0NDAwODc1LDAuMDIxNDA1OTY0MTYyOTU1NjksMy41MDE1MzQ0MzYzNzI0OTUzRS0xMCwxLjg2ODkxMjg2NDYwMzEzMjdFLTQsMy42MTkwMDk2NTQ3NDAzNzAzRS0xMiw4LjY3OTgxOTQxMjA1MzZFLTEyLDI0Mzc4Ni4wLDQ0Mzk3NC4wLDc5NTEzNy4wLDg0NTQ3NC4wLDEuNDMxNTc2NTMyOTcyOTg5RS0xMCwxLjc3NDQ2MzUzNTgxMTU0NTZFLTEyLDI3Mjg5NS4wLDEwNDQ3MzIuMDkyMDgxOTQ5MywwLjkzNjgzNzcxOTEyMjgwOTEsMjc5Ljk4NTgwMTI1MTI1MDksMjQzNDYwLjAsODA0ODc0LjAsNzU5NjU1LjAyMDQ1NjYzNjksNDk3NTA2LjAsNTYxMzI2LjAsNzc2NjAwLjAsMjQ2NTkyNS4wLDMwMDI5NzQuMCwxMjkzNDY1LjAsMTA4MS45NjAyNDU0MTAzMDEsMTMzNzM4Ni4wLDg5NjUwLjAsNDExOTk0LjAsMTkzOTA5Ni4wLDU5ODA3Ni4wLDQzMjQwMy4wLDcyOTg0NS4wLDM0MjgyMi4wLDYyODc5My4wLDIzOTYyMy4wLDg2NjM3Mi45OTgzODk1MDIsMjMyMTM2OS40NDkyNjgyMTk1LDMyNDk0LjExNjc5NzExNDgxLDM5LjY3NTUxNjgzNzY0OTY3LDAuMTI0MDI2ODM2ODMxMjU1MDcsMzA2ODUuMzM5ODQ1ODUxMTE1LDExMi42MjUxMDQ0MDY1NzI4NSwxLjQzODI5ODMxNTAwOTU3MjhFLTQKKzksV2VkIDIgRmViIDExLDE2OC4wMTA0NTE2MjQ4Nzk5NSwwLjA5NTcwOTAzNjc4NTM3MTM1LDAuMDM0NzAyODE0MzIyNjQ1NzU2LDAuNTE2NjU5NDQxNzgwNDA3OCw2MDMxNzAuNDMxMjY2NzI3Miw2MjQxMzcuMDkxMTkzODMzMywxMTA4OTEwLjQ2MzU0NDQ4OTQsODM5ODQuMCw1MzU3NjkuODA0NzY3Nzk3OCwxMjUzMDU4LjI1NDQyMzk4NjcsNTMxNjQ0LjAyODQzNDI5NzgsMTU5NDQyMi43MDg1MDQzMDg3LDE1NDQzLjYyOTA2NzY4MjQxNCw1MTExOTguNTM2OTUyMjc0NCwxNzE0ODI3LjIzNDc1Mzc2MzUsNTQ3MTAwLjE0MDA5NDY0NTYsODIzNjA4LjY1OTA1NjMzNiw5MjAzNTIuMDYxOTI2NDk2NCwxMTQ2MDE1LjQ1NDY0NzgyNzQsMTE1NjYwMy41ODkwMzU1ODg1LDU4MTMwMy40NTYxMzY5MzkzLDk2NjIuMCwxNzY5LjgwMTQ1Njg4Mzk2OTksOC44ODAxMzMyMjIxMjE0NTJFLTksOC41NzMzMTI2ODU3ODU0NjdFLTEyLDIuMDUyNzg2ODYxNzA2NjIzRS0xMyw4LjgyMzA5OTgzMzM1NjU0N0UtMTAsMS42MTYxMzA1OTQ0NDM4Mzg1RS0xOCw1LjEyNzQ5ODAxMzA4MDgxOEUtMTMsMS41NDY0ODc2OTQ0Mjg3MjVFLTcsNC42MDI4Mjg1OTQwMjI5NjM2RS0xMCwyLjIwODQ0NDc1OTc0NDI3NjdFLTksNS40NTEyODU3NzcxNDYwNjhFLTE3LDEuNTk5MzUzNTYyNzg4NzlFLTExLDEuMDMwMzAyNTI3NzA0MjUyRS0xOCwyLjMwNjAyNjk1NzY0MDU5MUUtMTgsMjQzNzg2LjAsNDQzOTc0LjAsNzk1MTM3LjAsODQ1NDc0LjAsMi42ODk2OTczNzIxMTY3OTQ0RS0xNyw1LjUzMTQwNTU5OTM0NjA4NEUtMTksMjcyODk1LjAsMzEwMzcuODI1NTc5Njk0MDUsMS41MDYxMTczNTY3MzU4Njg3RS03LDEuMTgxMTIyNTM0NjIyMDI0OEUtNCwyNDM0NjAuMCw4MDQ4NzQuMCw3MTU4MDguNTQ1NzE5NTQ1OSw0OTc1MDYuMCw1NjEzMjYuMCw3NzY2MDAuMCwyNDY1OTI1LjAsMzAwMjk3NC4wLDEyOTM0NjUuMCw1LjUyNTAxNjAyOTAyNDMzM0UtNCwxMzM3Mzg2LjAsODk2NTAuMCw0MTE5OTQuMCwxOTM5MDk2LjAsNTk4MDc2LjAsNDMyNDAzLjAsNzI5ODQ1LjAsMzQyODIyLjAsNjI4NzkzLjAsMjM5NjIzLjAsODY2MzcyLjgwNDM0NjIyOTIsMjMyMTAzNS45NzY2MDc3MTk0LDAuOTcyMTU0MTUyMTk4NTQ5LDEuNDg2MDk0Mzk5NTAyMzY4MkUtNSwxLjY3ODIwMzc0NDY3OTgyMzNFLTgsMC42OTMwNjgwNTI5NDI2MTgxLDEuMDUwNjQ1Nzg5NTI2MjQwOEUtNCw1LjAzMTc2MjIxMDE2Njg5N0UtNgorMTAsVGh1IDMgRmViIDExLDguMzk1MzA1OTA4OTU1NjA4RS01LDEuMTMyMjIzNjQzMzcyMTgxRS04LDMuNjgyMzA5NjUyOTYxNTE0RS05LDYuMjQwODQ1NTUzMTY4NTdFLTgsNTI0NDk0LjgwOTU3NTQ4MzEsMjUwNDIxLjA4ODExNzA5ODczLDQ1NjIxLjE4NTcyMTU3OTc4LDgzOTg0LjAsNTM1NzUwLjMzNTQzMzQ0NjgsMTE4OTk1MS4wODUzMDI5MTY0LDUzMTI4NS4zNjE1MTY2NzkzLDI3Mzg3My41MzAxNjQwOTk1MywwLjAzMzc0NTI1MTQ3MzQ0Nzk3LDQ5MzA0MS41MDc2NjI1Mjg5LDM0ODcyNy41NTg5NTMyNzY1LDQzOTU5OC44NDExOTQ0NjE0LDU1NTMyNC45OTIyODkzNDE4LDQ2NjMxMS44MDAyNTI0MDk0LDQxMzEwMS40MDEzMjI1NDM2LDI0NjQxMi40Njg1MjQ5ODc4Nyw3ODQxOS43Mjc1MTI2MTgzLDk2NjIuMCwwLjAwMTY5MjU3MzYwMzExOTAwNzQsMS4xMzU2MzIzNDgzMTU3MzlFLTE1LDEuODkwNDIyNTU3OTkxMjM3RS0xOCw2LjE4MDY0NjY2OTQ5MzA0NEUtMjAsMS4yNTc1NjY4NTAzNTUxNjk2RS0xNiw0LjA5MzEyNjMxNDMzOTQ4MkUtMjQsMS44MjAxNTAzNzE1Mzk5OThFLTE5LDEuMTk1MDM4NzQ1MTQxNzUxRS0xMCw3LjQxMzM2NzUzODQ0Njc4N0UtMTcsMi45NjA3OTAzMzcxMjMwODEyRS0xNiw1LjE5NjY3NzI0NzY1NDcwMDVFLTIzLDMuODI0MTg0MTc1ODI3MzkzRS0xOCwyLjU3MTUwMTY3NzU3NjM0OUUtMjQsNS4yNjY5MTAzNzg0NjIxMzFFLTI0LDI0Mzc4Ni4wLDQ0Mzk3NC4wLDc5NTEzNy4wLDg0NTQ3NC4wLDMuODM5NDM5MjA5NDE1NjE4NUUtMjMsMS41NDU0NjkxODY3NTI4OTZFLTI0LDI3Mjg5NS4wLDAuMTY2OTY2ODE2ODc5ODA5NCwxLjUwNTA3NDM2ODI4MjI4NTJFLTE0LDEuMDE0OTExNTI1OTYwMDQ1RS0xMSwyNDM0NjAuMCw4MDQ4NzQuMCwxMDQzODQuMDUxNDg5Mjg2MDQsNDk3NTA2LjAsNTYxMzI2LjAsNzc2NjAwLjAsMjQ2NTkyNS4wLDMwMDI5NzQuMCwxMjkzNDY1LjAsMy4wMDY5OTkyNzk5ODA1MjYzRS0xMCwxMzM3Mzg2LjAsODk2NTAuMCw0MTE5OTQuMCwxOTM5MDk2LjAsNTk4MDc2LjAsNDMyNDAzLjAsNzI5ODQ1LjAsMzQyODIyLjAsNjI4NzkzLjAsMjM5NjIzLjAsODY2MzUzLjI4NDQ0OTY4OTMsMjI5NTA3Ny45OTgxMTMzNjUsMS43NjQ4MTM5MzkzMTY2NDU0RS03LDEuMzU3MTc2MTE3NzU3OTk1RS0xMiwxLjgzNzk4NDY0ODc5MzgzOTVFLTE1LDEuMTgyNDUzMzQxMjY4NDA0MUUtNyw5Ljg4NTYwMzIyNTg3NjE5M0UtMTIsNC44MDkzMDgzMTAzNTU2MDFFLTkKKzExLEZyaSA0IEZlYiAxMSw3LjE0NzE5NTE5NTk3OTc0M0UtMTIsMS4zNTM5NzA2MDMxMjQ2RS0xNSw0Ljc2ODUwNjYxMjQxNzMzMkUtMTYsNy4yMzc1MDUzMzE2NjgzODRFLTE1LDE3Nzc1LjAxODA1MzUyMDU3LDExNC44NTgyODI4OTg1OTQ4NSwwLjQwNTExMTcxOTA1MjU3MjY1LDgzOTg0LjAsNTM0MTY3Ljk0NTEwNzQyNywxNzMyNzAuNjExMjI3MzAyNzUsNTA4OTIzLjkzMjY2MDI1MzYsMTIuNjU3NzQ4MTE2NzU5NDEsMy4zNTI5Nzc4MzA2OTk4ODA2RS05LDEyMjg0Ni41ODAzNDM3OTIxNCwyMS43Nzc2MTczODg1NDE5MTMsNDk2My40NTUxNjQ0NjQ1MiwyMDYzLjA3OTM5Mjc0NDYyNDMsMzcyLjQ2ODg5ODQ2OTMyODk2LDkxLjI0OTAwMDkyMjQ5MDQsMTguNjYwMTgyNTE4NDEzMDM0LDIuODQxMTI5NDg2MTY0NjU5Nyw5NjYyLjAsMS41MDEyMjA0MjI0MDkzNjYyRS0xMCw4Ljc4MTA5NTUyNTIyMzY5NUUtMjIsMy4yMTM1NzMxOTYxODkxNzVFLTI0LDEuNTk5MjI0ODEwNzg0MzgwMUUtMjUsMS4xNzQzMDAyNTYxNzUxMzM3RS0yMiwxLjExNjI3MTAwNzgyMjYzMkUtMjgsNS45NDM4NTk2NDQ4OTMwMjJFLTI1LDEuMzQ3OTk4NjYxNjY3MjMzNEUtMTQsOC40MDU0MjE4MDI0ODQ4NDVFLTIzLDIuNDkzNTM3MTk2OTg0ODIxNUUtMjIsNS4wNDYzMzMwNjU1MjA0MDhFLTI4LDcuNjA4ODI3MjI1MzEyODMxRS0yNCw2LjkxODI5NTkyMDQ3ODgzNkUtMjksMS4yOTc4MTg3NTQ3Mzk1NTI2RS0yOCwyNDM3ODYuMCw0NDM5NzQuMCw3OTUxMzcuMCw4NDU0NzQuMCw1Ljg4Njk5OTMwODIwNDU3N0UtMjgsNC42NDMyNzc1OTgwNjEzMzQ2RS0yOSwyNzI4OTUuMCwxLjk2MTU4OTk5MzQ1MTAxNjVFLTgsNy4wMDMyNTAyOTY2MjQ3MjRFLTIxLDIuNDk4MjI4NDY1MTMyNTAzNUUtMTgsMjQzNDYwLjAsODA0ODc0LjAsMy42NDU4NTkyOTgwNTUyMTU0LDQ5NzUwNi4wLDU2MTMyNi4wLDc3NjYwMC4wLDI0NjU5MjUuMCwzMDAyOTc0LjAsMTI5MzQ2NS4wLDguOTQxODI0NTQxOTAxMzk4RS0xNSwxMzM3Mzg2LjAsODk2NTAuMCw0MTE5OTQuMCwxOTM5MDk2LjAsNTk4MDc2LjAsNDMyNDAzLjAsNzI5ODQ1LjAsMzQyODIyLjAsNjI4NzkzLjAsMjM5NjIzLjAsODY0NzY0LjYxNDAzNjA0ODIsMTMwNTEzNi41NTg3NzQzMDI1LDEuNjk4NTQwODkzMDkxMjE0RS0xNCwzLjgyNjU1NDUyNTkyNzk0NEUtMTksMS4wNDQ5MjA1OTk4ODQ2MTU1RS0yMSwxLjE5MDY4OTcwMzE4MTcwOTRFLTE0LDEuOTIzMjQ1NDAzMjc5OTY3M0UtMTgsOC4wMzQ0MjI2Nzc3NzM3MDNFLTEzCisxMixTYXQgNSBGZWIgMTEsMS42MTE2MDYxMDI5ODY2MTQyRS0xOCw5LjE5OTE4MTcwNjkwODg4MkUtMjIsMy43ODU0MDY5NDk3NTEzODVFLTIyLDQuNjc1MTE1ODQyMzkzMzExRS0yMSwwLjExNDI2NDQ4NjY2ODgzNzQ3LDUuODc3ODc3NTkxNjkxMzExRS01LDUuNTMyODAzNTE0MjQxMjMwM0UtOCw4Mzk4NC4wLDQ1NjMwMC41MTY0NzEzODQ4LDUuODU2NTc5Mzg3NTI5ODQ5LDExMTgwNi43MzA3NTA5ODcwOSwyLjU5NTA3MzM2NDE4MDE4MTZFLTYsNC43NzU4MzQ2NjI5Nzg4NzlFLTE2LDExLjU0NjQ0MjMxMzQyMTQ3Niw0Ljg4OTkyODk4NDYyODYzMkUtNiwwLjAxMjMzNzY3MzI3OTQwODI4LDAuMDAyOTI5MDI2NDQ2NTc3MTY2MiwyLjE4NzIzMjg3MzMwMjI0N0UtNCwzLjEzNDk1MDEzNzg3OTMyMzRFLTUsNC41MTE4NzA3MjgwNTIwMTNFLTYsNS41MTk3MDA2NTEzOTEwMjRFLTcsOTY2Mi4wLDIuNjcxMzI5MjE2MTUyNzI3RS0xNyw3LjAzNTQ2MTM0MDA5ODI0MUUtMjcsNS43OTUwOTY1MzI2Mzg2ODlFLTI5LDQuNDAzMzgyMjA2Mjg3MjkxNkUtMzAsMS4xNTQwMTkyNjkwMDI0NzI3RS0yNywyLjc3NTE4MTE0Nzg1NDQyMUUtMzIsMi4wNzY1ODc0NDc4OTE3MzUyRS0yOSw0LjIxMTM4Mzk4MTMzODc0NjRFLTE4LDEuMDE0MjU1ODA5MDQ1MjY4N0UtMjcsMi4xOTMxODUzODMxOTUzOTk2RS0yNyw0Ljg3NDgwNzE3NTk5MTE3MjVFLTMyLDEuNjMzOTMxMzE3NDg5NDA4NEUtMjgsMS43MDAwOTg2NTA1Nzc2MzU3RS0zMiwyLjk1MDI1MzA2MzM4MjAyNTVFLTMyLDI0Mzc4Ni4wLDQ0Mzk3NC4wLDc5NTEzNy4wLDg0NTQ3NC4wLDguNzUxMTUzOTMxMzU5OTM1RS0zMiwxLjI1NzUxMzI1MTc2MTgxMjRFLTMyLDI3Mjg5NS4wLDIuMzMxODk1NDAzNjA3NDk0RS0xNSwzLjE3MzAwNTMwMjQ4MjE0NDdFLTI2LDUuMTU4NDIyNzE1OTcwMjcyRS0yNCwyNDM0NjAuMCw4MDQ4NzQuMCw2Ljg2NzEyNzY2MzY5OTg0NUUtNyw0OTc1MDYuMCw1NjEzMjYuMCw3NzY2MDAuMCwyNDY1OTI1LjAsMzAwMjk3NC4wLDEyOTM0NjUuMCwxLjE0MTQxMTM5Mjg4OTE4OThFLTE4LDEzMzczODYuMCw4OTY1MC4wLDQxMTk5NC4wLDE5MzkwOTYuMCw1OTgwNzYuMCw0MzI0MDMuMCw3Mjk4NDUuMCwzNDI4MjIuMCw2Mjg3OTMuMCwyMzk2MjMuMCw3ODMyNjkuNzk2MTY1NzQ3OCwxNjQ0LjcwODU5NTYzMjA4Nyw3LjExNTU1MTAzMzQ5MTdFLTIxLDkuMjIyNTk3MTgxNTczNDI1RS0yNSw1Ljk0Mjg2MjIxNDg3NzE5OEUtMjcsNS40NDk4MDA0ODA3NjIzNzdFLTIxLDIuNzgxMDgxMzAxMTkyODRFLTI0LDMuOTU3NzQ5Njg2MzYzODE3NkUtMTYKKzEzLFN1biA2IEZlYiAxMSwyLjk3MTAwNzA0MDY4OTE0NTVFLTI0LDYuMzg2OTU4NDQ4NTY1NzI0RS0yNywzLjEyNDEzNjU1MzU3NTE5MzZFLTI3LDMuMDc1NDQyOTIyNDcwOTE1RS0yNiwxLjQwNzExNzUwNjQ0NDYxNzRFLTgsNS4yODYxMjg5MTM4NTc3NzQ2RS0xMiw2LjMyNDA1ODE5NzkxNjgzOEUtMTUsODM5ODQuMCwxMjczMi40NDk5OTk5NDc2NDcsMS4wODkxMTkzNTEwODEzMjAxRS02LDguMTIwOTQ3OTYxMzY3MTk1LDIuNDEyMjM1NTY5MjI0Mzg1RS0xMyw0LjQ1NjA3NTc2NzA0OTI4M0UtMjIsMi45NTU0OTA1NDY1MDI0MTU2RS02LDQuNDUyMDExODAyNTAwMDg5RS0xMywxLjI0NTIyMjEwMTA0MDE3MDdFLTksMi44MTk1NzAzMDY2NTM2NUUtMTAsMS44ODk4NDQ5MDg5NTIxNzMyRS0xMSwyLjY5NTE0MjcwNzIzMTQ3MkUtMTIsNC4xMDUxMTE2NjM5ODc4MzU0RS0xMyw1LjMyMjU5ODY0NTc0MjE0OTVFLTE0LDk2NjIuMCwzLjUxOTU4NTY2NzM4NzAwMDVFLTIzLDUuNzcwNTE0OTY1NDk1ODg0RS0zMSw5Ljg5OTgyMjEwNzc4MzczN0UtMzMsMS4wOTg0ODM1NjIyODMxODA0RS0zMywxLjE0MzQ0OTQ0OTUwODU2NkUtMzEsNC41OTA0MDcxNzQxODA1NjdFLTM1LDYuNDIwMDc1NzE3MzA4MzEzRS0zMyw2LjUwNzkwNDc5NDgyOTI3MjVFLTIxLDEuMjEyODQyODg0MjEzMDMwMkUtMzEsMS45NjE3OTE2MTMzNzgzNzU0RS0zMSwzLjYxMTQ4MjA2NjE5NjcxNEUtMzUsMy4yODY1NDUxMzczNDc5MkUtMzIsMi43ODU2MDQ4ODE2NDQwNDNFLTM1LDQuNTMwMDQ2NjkyNzQ0NDc4NEUtMzUsMjQzNzg2LjAsNDQzOTc0LjAsNzk1MTM3LjAsODQ1NDc0LjAsOS40MDk3NDM0NDA3MzM3MjhFLTM1LDIuMjMzNjA2MDYyNzMzMTgzM0UtMzUsMjcyODk1LjAsMS41NzY2NTY1MjkxOTUxMjcxRS0yMSwxLjUyMjYzNTA0ODM2NzU2NDZFLTMwLDEuMTQ5MTA1Mjc4ODAxMzExRS0yOCwyNDM0NjAuMCw4MDQ4NzQuMCw2LjUxMjg2ODU5NTA4MzEyRS0xNCw0OTc1MDYuMCw1NjEzMjYuMCw3NzY2MDAuMCwyNDY1OTI1LjAsMzAwMjk3NC4wLDEyOTM0NjUuMCwxLjE0MjM5NjgyNTcyMTYyNjZFLTIxLDEzMzczODYuMCw4OTY1MC4wLDQxMTk5NC4wLDE5MzkwOTYuMCw1OTgwNzYuMCw0MzI0MDMuMCw3Mjk4NDUuMCwzNDI4MjIuMCw2Mjg3OTMuMCwyMzk2MjMuMCw1MjY4OS4zNDI3OTkxMjQwNzUsMC4wMDExNzI2NTQyMzY0OTM2NTczLDIuODQ4MzA3NjExNTIxNTU2M0UtMjYsMi4zNzgyMDUwMzE4MTQ4MzkyRS0yOSwzLjUzNTI2MDMzMDY5Nzk0OUUtMzEsMi40MDY5NzA2NzkwMzQyNTY2RS0yNiw0LjI3MTQ5NTAzNTI0NTc3MTdFLTI5LDkuMzA5NTk1Mjc1NTkwNDQxRS0xOQorMTQsTW9uIDcgRmViIDExLDUuOTEzNDkxMDE3NTgyNTY3RS0yOSw0LjU4MjA3OTg5MzYzMTUzOUUtMzEsMi42MzQ5NTcyMjI0MDY2NjlFLTMxLDIuMDk5NTUyODk5NzY3NDIzOEUtMzAsMS42NDA5NDQ3NTc1Mjk4MjI0RS0xNSwxLjI2ODY4NzYzNTE5ODc4MzFFLTE4LDMuNzkxMzc1NTg3MTcwNzcxRS0yMSw4Mzk4NC4wLDAuMDY0NDUzOTY0MzY0NDE5MzYsMS4wMzEzOTY0MjU3NjA5MzdFLTEzLDEuOTEyNjQ0ODg2ODE3MjM0NEUtNiw5LjEzMjE4MjM2ODA3ODY4OUUtMjAsMS4zMTE4NzQ4NzEwNDU0NTczRS0yNiwyLjYyOTUwNTEwNDA3NDMxNEUtMTMsMS41NzM1MzQ0NjU4NzQzMjA4RS0xOSwxLjcxMDM0ODM1MTQyMjc1MkUtMTYsNC42NjAwOTI0NTEyMTk1OTlFLTE3LDQuMDQyNzg5NTk5MTg3Nzc1RS0xOCw3LjI4NjYzNjgyMTQ5MDE1NkUtMTksMS40MDIyNTk2ODE3Njc2NDE2RS0xOSwyLjE2ODUwNjA4NzU3NTQ1MTZFLTIwLDk2NjIuMCw0Ljk2NjczMjgzNjEyNDg1NzVFLTI4LDMuNzQyMzgyODc3MTg4MTA4RS0zNCwxLjE5MjQxNTQ5NzE5OTI1NDZFLTM1LDEuODE3NDM1MjY5Mzg5NTc1RS0zNiw4LjcxNjUwNjQxNjc1MjA0NEUtMzUsMy41Njg3MDcxODkwNTAyMDJFLTM3LDEuMjcyNTU0MzU4NTkxODk5NkUtMzUsNC40MjY4MDcwMjI3OTA0NjhFLTIzLDEuMDg0NzY0MDQ2Nzg2ODI1OUUtMzQsMS4zNzA0NDM3MDM3MDM4NDNFLTM0LDEuNDYyNzIzNzk3MzMxNTI2OEUtMzcsNC41NTU5MDk1MDM1MTA5MzlFLTM1LDIuMTQ5NDkyOTAyNDU1NjUxM0UtMzcsMy4zMTgzMDA1NTEyODkyNDNFLTM3LDI0Mzc4Ni4wLDQ0Mzk3NC4wLDc5NTEzNy4wLDg0NTQ3NC4wLDUuMTc0MzAyOTIxMDQ4ODE1RS0zNywxLjgzODI5MTY3Nzg0MTg2NTJFLTM3LDI3Mjg5NS4wLDEuMDkwNDM1ODE5MTMyMTY5NEUtMjYsNi4yMTgzNTU4MDAwNzU1OTFFLTM0LDIuMzg3NzAwOTYxOTYwNjUzNkUtMzIsMjQzNDYwLjAsODA0ODc0LjAsMi42MzEzMTg4MDc5MzQyNzI2RS0yMCw0OTc1MDYuMCw1NjEzMjYuMCw3NzY2MDAuMCwyNDY1OTI1LjAsMzAwMjk3NC4wLDEyOTM0NjUuMCw2LjQ5OTkzNTU0NDk4MTgxN0UtMjQsMTMzNzM4Ni4wLDg5NjUwLjAsNDExOTk0LjAsMTkzOTA5Ni4wLDU5ODA3Ni4wLDQzMjQwMy4wLDcyOTg0NS4wLDM0MjgyMi4wLDYyODc5My4wLDIzOTYyMy4wLDAuNjQ1NDM2MzI4NDI1NzMsMS4wMTc1OTI3MTY0MjUwMDA1RS0xMCwxLjIxMzYxNDMzOTY3MTYwNDhFLTMwLDUuNjA5MDQ4NTQyNjE3Njg4RS0zMywxLjczODY0MTA3MzI0ODU1NzlFLTM0LDEuMTI0NDg0NzQ1NjkzNjYyNEUtMzAsNi4zMjc0MTAwNjMwMzYxMzZFLTMzLDkuMDA0NTMxMDE4OTczMTk2RS0yMQorMTUsVHVlIDggRmViIDExLDEuMTExODAzNzExNzg0MzY4OUUtMzIsMi42NDgzODcxMDEzNjczMjJFLTM0LDEuNzUwNTQ2NjUzMDMyNjg5RS0zNCwxLjE2MzI3OTgyMzIzNDE5MTdFLTMzLDEuMDU4NjY2MzY2MTQ1MTQwNUUtMjEsMi40ODA5NTAwNzkwOTEyMjk3RS0yNCwyLjI3MTQzMDU1NjQ3OTEyRS0yNiw4Mzk4NC4wLDcuNDU1OTMyODE0NTE1NzU1RS05LDQuMTgyNjE1MDExMjc2OTA3RS0yMCwxLjcyNTg0MjY0NTQzNTY3MDFFLTEzLDMuMjQxNjE5ODgwMzAwNjIzM0UtMjUsMS44OTk2ODY5ODM2NDcyMjI1RS0yOCw4LjQ5NTkxMTE4MTY3MTA2NUUtMjAsNS4xNDE4MTYzOTY3NjcwNjhFLTI1LDEuNTAyNjcyNDc3Nzg3NTc1RS0yMiw1LjM2MDIyMTI4Njk5MTM4M0UtMjMsNi44OTg4MDUxNjQzMDk5MjNFLTI0LDEuNzA1ODI3MjQxNTc4MzU1N0UtMjQsNC4zNzg1NjMwODIyODMwMDVFLTI1LDguMzU0NjU5MzM0OTk4NThFLTI2LDk2NjIuMCw2Ljg0ODAyOTk0Nzk2Mzk2MUUtMzIsMS4zNjQ4NjgyMTQyNDgzMDM2RS0zNiw3LjE3MjA5MzgzNDgwOTE2N0UtMzgsMS40MTEyOTIxOTc2MTk2OThFLTM4LDMuNjI2NjQ3MzU0MjA0MjI4NkUtMzcsOS40Mjc4NjIyNjA3MzA3OTFFLTM5LDEuMTQzMzE4MTEyMTM2NDUyM0UtMzcsMS4wMjU0NTExOTg0NDkwOTM0RS0yNCw1LjEzODczNDc2NTA2MzMzMkUtMzcsNS4zMTA3MDY1NTcxODgwNThFLTM3LDIuMzEyOTY1MDc2ODI1NTEyMkUtMzksMy4wNzQzMDA2NDgwNTIzNjg1RS0zNyw1LjY0NjAxMTExNjY4OTM0ODNFLTM5LDguMzY5Mzg5MTk2OTc5NzMyRS0zOSwyNDM3ODYuMCw0NDM5NzQuMCw3OTUxMzcuMCw4NDU0NzQuMCwxLjA0Mjc5NTQyMTkzNTY2MThFLTM4LDUuMDc2NzI0NjI0ODEyOTY1M0UtMzksMjcyODk1LjAsNy43OTk1MDM0MDI1NDQ1ODZFLTMxLDEuNTUyMTk5OTUyMjk5NjU0MkUtMzYsMy40MDA4MDMzOTQ3NDgzNzIzRS0zNSwyNDM0NjAuMCw4MDQ4NzQuMCwxLjAwOTk3MDQ0NTkyNTAxMjJFLTI1LDQ5NzUwNi4wLDU2MTMyNi4wLDc3NjYwMC4wLDI0NjU5MjUuMCwzMDAyOTc0LjAsMTI5MzQ2NS4wLDEuNDM1NTU5ODg3MTQzODZFLTI1LDEzMzczODYuMCw4OTY1MC4wLDQxMTk5NC4wLDE5MzkwOTYuMCw1OTgwNzYuMCw0MzI0MDMuMCw3Mjk4NDUuMCwzNDI4MjIuMCw2Mjg3OTMuMCwyMzk2MjMuMCw5LjE1NTcyNzczNTIyNTUwOUUtOCwyLjAwNTM1NzAyOTk0MzM2MkUtMTcsNC40Njc5NzMxNTg2NjM0OTY1RS0zNCw4Ljg2NTMzOTExNTczODM2MkUtMzYsNS4wNTU0NTAxOTI0Nzc2MjhFLTM3LDQuNDgxMjk0MzgzMDY4MzY1RS0zNCw2Ljc2NjE3MTQwMzI0MzE5NEUtMzYsMi43NTkyOTAxOTUxNTQ0NDg0RS0yMgorMTYsV2VkIDkgRmViIDExLDEuNDU2Njc5OTE2NDU1NjY3MUUtMzUsOC43ODk5NzkyMzIxNzM3NkUtMzcsNi41MTE2NTI3NzUyODQ4NjY1RS0zNywzLjczMDUzMzUxMTcwOTUxRS0zNiw2LjkzNDk3NDcyOTcxMTA4MkUtMjcsNS4xOTYyODc4NjUwNTY5OEUtMjksMS40MTQ1NDE4MTE1NjYxODg1RS0zMCw4Mzk4NC4wLDguOTM5ODMxMzk2NjY1NzlFLTE2LDEuNjE0NTAyMzk3NjAxOTM5MkUtMjUsNS44OTkxNzA1NzQwNzY5MDNFLTIwLDEuMjMwNDE1MzYwODg4MzMxNEUtMjksMS4xOTI1ODg4NjIxNzM0MzgyRS0yOSwyLjQ4NzAyOTM1NzUwNzY5MTVFLTI1LDEuODAxNDU2MTA2NDAwMjY2NEUtMjksMS4zODM2NDA1ODcxNjY4NzRFLTI3LDYuNTE3NDcyMzgzNTI3NzYxRS0yOCwxLjI2NzYwMjU1OTcwMjgwMDVFLTI4LDQuMzEwNjYzOTU5NDg3MTU1NUUtMjksMS40NjU1OTEwNTMzOTg0Nzc2RS0yOSwzLjQyNDMyODMwMTEyMTMxNkUtMzAsOTY2Mi4wLDYuOTA5NTU5NjE1ODIwOTg1RS0zNSwxLjk5MDc3MjE0ODE2NjkxMTVFLTM4LDEuNTQ4OTUwNjg2NzE5NDk5M0UtMzksMy43MjIxMTM3MzQyMzc0OTQ1RS00MCw1Ljg2OTYyNDQ0NjgyNjI0RS0zOSw2LjQwNDk4MDc4MDYzOTExRS00MCwzLjM4MDY4MTI4MjM0NzA3N0UtMzksNi4yNDU5NTQ4MzU2NjUzODhFLTI2LDkuMjExNDE4Mjk2OTc4MjE5RS0zOSw4LjEyNjQyNDg1NDk3MzY1NkUtMzksMS4wNTg0ODcxNzY4NzQ0ODE5RS00MCw3LjI3MjgwNTA1NDcxMzI4MUUtMzksMy44MTkxMDAwMTU1NDYyNDVFLTQwLDUuNDg4MzE0MzA5MzA0Nzc2RS00MCwyNDM3ODYuMCw0NDM5NzQuMCw3OTUxMzcuMCw4NDU0NzQuMCw1Ljc1ODI0OTgzNjYxMDAxNzZFLTQwLDMuNTY3NjE5OTkyNzYwNTc4NUUtNDAsMjcyODk1LjAsNC40OTc3Njg0NDg5OTQ5MTZFLTM0LDEuNjc2MzUzNTQwMzgyMTcxM0UtMzgsMi4zNDUyMjY1NzcwNzE5MjY1RS0zNywyNDM0NjAuMCw4MDQ4NzQuMCw0LjEzNDQ4MjQxNzMzMjE2RS0zMCw0OTc1MDYuMCw1NjEzMjYuMCw3NzY2MDAuMCwyNDY1OTI1LjAsMzAwMjk3NC4wLDEyOTM0NjUuMCw4Ljk4ODUxODg4OTgxMzMyMkUtMjcsMTMzNzM4Ni4wLDg5NjUwLjAsNDExOTk0LjAsMTkzOTA5Ni4wLDU5ODA3Ni4wLDQzMjQwMy4wLDcyOTg0NS4wLDM0MjgyMi4wLDYyODc5My4wLDIzOTYyMy4wLDkuNjUyMzg3ODU1MTU5MjczRS0xNSwzLjA1OTU4MjcxODc3NjIzM0UtMjMsMS4wMjM2NTc3OTIxMTk4MjhFLTM2LDYuNjM5OTc5NDQ5NjI3MzFFLTM4LDYuMTYyNDY1NDMzODYyNzg3RS0zOSwxLjA5NTU3MDM4ODI4NjQxOTVFLTM2LDMuNjk4OTIwMjY5OTI1Mzk2NEUtMzgsMi4wODIwMjk0NDI1OTg1MDA0RS0yMworMTcsVGh1IDEwIEZlYiAxMSw5LjM5MjU4NzY0MzM0MzY1NUUtMzgsMS4xODk0NTg3NDYwNzIyNjYyRS0zOCw5LjY0NDk0NDYzNjgxODgxOUUtMzksNC45MTUxNTI5OTM3MzAxNDNFLTM4LDQuNzA3NTEzMjQ3ODk2MjA2NEUtMzEsMS4wMTc2NTA3NDgyNzI3NzYxRS0zMiw3LjIyMzM2NDI1MTk1NDU1MkUtMzQsODM5ODQuMCw2LjE1NzM3MTgwNDA3NTU0MTVFLTIyLDYuNjQ2ODg3ODUxNTg2MTY1RS0zMCwxLjg1MDUwNTc2MjkzODU4NkUtMjUsNC4wOTQzMzQzMDg5MTYzOTc2RS0zMywxLjY5Mjg4MTQ4MTk2NjQwODhFLTMwLDcuODI3OTQwMzE1NjM2NTlFLTMwLDUuNTg4ODE5NTEwODcwMDE4NUUtMzMsMS4yOTA4MTU5ODM0MTUyOTA0RS0zMSw3LjgxNjkxODU1Mzg3Mjc1NUUtMzIsMi4yMTQ5NzQ0ODU1MTY3Nzg3RS0zMiwxLjAwMTg4NTk1NDU4MTEwOEUtMzIsNC4zNjIzMTc4MTQ2MDM2NDRFLTMzLDEuMjE2ODExODI2NjI0OTU2NEUtMzMsOTY2Mi4wLDMuNjA4ODI4NDQ4MjY0MDQxRS0zNyw4LjU3MDA2NDk5NDE1MjE3NUUtNDAsOS4wMDkyOTAwMzQwNDIzMDhFLTQxLDIuNTIyOTY0MTcxMTQyMTE0RS00MSwyLjczODA0MzY2MTY5MjU0OEUtNDAsOC45MDY3MTM5MTE5MTM3MjdFLTQxLDIuNTAyOTAxNDg4OTI4MDY3NkUtNDAsNy45OTU5NjY2MzM2NTA4ODRFLTI3LDQuNjQ3OTA4Mzg3OTQ2ODIzRS00MCwzLjYyOTY2NDA0MTI0Mzc5M0UtNDAsMS4wOTEwMTEzNTg0Nzc0NjA2RS00MSw0LjU0MTI1MTAzNTcyNDE2NEUtNDAsNS4yOTQwMzkyOTIyMDk0NDNFLTQxLDcuNDMyMTkzMzg3OTAzODQxRS00MSwyNDM3ODYuMCw0NDM5NzQuMCw3OTUxMzcuMCw4NDU0NzQuMCw2Ljg1MDA4MzE2NzA5MjE5OUUtNDEsNS4wODcxOTg3Mjg2MjIxOTVFLTQxLDI3Mjg5NS4wLDEuNDkwMzA0MjQyMDU3Mzc1OUUtMzYsNS43MTk1OTY3MzM4Njc5NzlFLTQwLDUuNjQyODMyNzQ5MDQzNTQ1RS0zOSwyNDM0NjAuMCw4MDQ4NzQuMCwxLjQ3MDA5MjIwNzIwNzA0MzRFLTMzLDQ5NzUwNi4wLDU2MTMyNi4wLDc3NjYwMC4wLDI0NjU5MjUuMCwzMDAyOTc0LjAsMTI5MzQ2NS4wLDEuMjQ0MzA5MjY3MTU3ODA0RS0yNywxMzM3Mzg2LjAsODk2NTAuMCw0MTE5OTQuMCwxOTM5MDk2LjAsNTk4MDc2LjAsNDMyNDAzLjAsNzI5ODQ1LjAsMzQyODIyLjAsNjI4NzkzLjAsMjM5NjIzLjAsNS4xMDQ3NDc4MDgxMjc2NTNFLTIxLDUuMDIwMDE3MDAzOTA0OTc2RS0yOCwxLjAzMTY3OTExNjA0OTkxMzZFLTM4LDEuNzAyNTcyNTgyMDQyODcyRS0zOSwyLjMwODQwMTAxMzgxOTkyOUUtNDAsMS4xNjI4OTcyMDQwNjc2OTI5RS0zOCw3LjQxMDM3NjExODU5NDMxNEUtNDAsMy4xMjMzMTE3Mjc2MzExNTZFLTI0CisxOCxGcmkgMTEgRmViIDExLDIuMTQzODM4NjIxNjIxODJFLTM5LDQuODI5NDgxNTE5Nzg1MTc4RS00MCw0LjIwMDE2Njk0NDIzMjkzOTVFLTQwLDEuOTU2MTQxNTYzMDg4Mjg5MkUtMzksMi41OTE0MjE2Njg5NzM0ODQ1RS0zNCwxLjM3NDc3NzY5MjYzMjQ2M0UtMzUsMi4xNjI5MDkwODIwMTQzM0UtMzYsODM5ODQuMCw0LjM0ODQ2MTYxNjI0MjU4NDRFLTI3LDIuMzc0ODU0MTIxMDU4NTQ0NEUtMzMsNi4yMzA2MjU4NzczNjM3ODdFLTMwLDguNjI4MTAyNTIzMTk0ODU1RS0zNiw0LjM4NDc5NjIwNzYxNTYzNEUtMzEsMi4yMTAwNDU2MDA4MjkxNTQyRS0zMywxLjExMTU0NjUwNjA4NjY2ODhFLTM1LDkuMzQyMTgyNDc5NzE4MTA5RS0zNSw2Ljk4OTM1MTU0ODg4NjgwOEUtMzUsMi43MjQ3Mjc4NjM0NTc1NDJFLTM1LDEuNTY1Nzk0ODc2Mzk0MTE1M0UtMzUsOC4zNzEyMzEzMDM4NTc1MjRFLTM2LDIuNzAzNjM1NTYyMDY1NjIyMkUtMzYsOTY2Mi4wLDYuOTg0Njc0NDcwOTU0NDcxRS0zOSw4LjQ0NTAxNTM2NjgwNjc0OUUtNDEsMS4xMTM1OTUzMTg4ODA1MjM1RS00MSwzLjQ5OTc5MjY3NTUxMDkwN0UtNDIsMi44Njc1OTk4Njc2MzEwMTZFLTQxLDIuMTE2ODIyOTgxMzk2NjM5RS00MSwzLjcxMzczNzMwNjcxNDAxOTRFLTQxLDEuNzkyMDA1ODU0MTMwNTUyMkUtMjcsNS4xNjQ5NzQ3Mjg5Mzg1NDNFLTQxLDMuNjc3MjcwMjcyNTk5MDdFLTQxLDIuMDcxOTM1MjUxNTcwNzY2NkUtNDIsNS45Mjg3ODY1ODA4NDE4MTVFLTQxLDEuMjU1NDE5MjAxMTA5NjQzOEUtNDEsMS43MzIwNjA4OTA3OTUxMjc0RS00MSwyNDM3ODYuMCw0NDM5NzQuMCw3OTUxMzcuMCw4NDU0NzQuMCwxLjQ0OTY4NDI0OTI4NTgzNDNFLTQxLDEuMjMxMjIxODg1MTY0ODI3OUUtNDEsMjcyODk1LjAsMi4wMTQ5NTQ4NjE1NzgyMzY0RS0zOCw0LjcyMzc0MTY3Mzk0NDU4OEUtNDEsMy41Njk0MDgwOTM5Nzg5MTFFLTQwLDI0MzQ2MC4wLDgwNDg3NC4wLDMuMjczMjI0MzExOTI4OTkzNEUtMzYsNDk3NTA2LjAsNTYxMzI2LjAsNzc2NjAwLjAsMjQ2NTkyNS4wLDMwMDI5NzQuMCwxMjkzNDY1LjAsMy4xMDQyNjM4MzM3OTE1NjI0RS0yOCwxMzM3Mzg2LjAsODk2NTAuMCw0MTE5OTQuMCwxOTM5MDk2LjAsNTk4MDc2LjAsNDMyNDAzLjAsNzI5ODQ1LjAsMzQyODIyLjAsNjI4NzkzLjAsMjM5NjIzLjAsMi42ODA1MTYyMzUyNDEwNjRFLTI2LDcuOTMwNzkwODA3MTY0MzU1RS0zMiwzLjMzMTY0NzM2MjAwNjQ2NTRFLTQwLDEuMTI5NzQ2MjE0NjQwNDE0OUUtNDAsMi4wNDU2ODUwNDA3NTIwMjRFLTQxLDMuOTExNTIxNzE4MjE2MjEzRS00MCw0LjA2Nzk0MzAwMjUyODIyMzRFLTQxLDcuODQ0OTAwNDI3NjgxNzY4RS0yNQorMTksU2F0IDEyIEZlYiAxMSwxLjMwMjA0MzMwNzA5OTc4MTNFLTQwLDQuNTQ5NDM5MjE3NTE0NThFLTQxLDQuMTczNTY4NzI1NzEyNDI3NEUtNDEsMS44MTYxNzYwNjQxMjU4Nzc1RS00MCw4LjI1Mzc3ODM2MTAxNzIzN0UtMzcsOS4wNTkxODYxMTQwMDQ5NjFFLTM4LDIuNjk1MTk4NjczNzY3MDAxNEUtMzgsODM5ODQuMCwzLjE3MjA5NDg0MjMzOTg0MzdFLTMxLDUuMzA3MTQ0MjgzMDg3MDIzRS0zNiwxLjg2NjU5OTE1Njk2OTQ0ODVFLTMzLDguMTQwNjk0MzM1NjQ5OTMyRS0zOCwxLjc2NTQ3MDMwMDg5MjM4NjVFLTMxLDQuMDY0NjA5NTk1MTIwNTk5RS0zNiwxLjAwMTY0NDc0Njk4ODkyNzhFLTM3LDMuNzIzNzQ2NTU4NTgxOTUwNUUtMzcsMy4zMDIzMTUzNjYxNDI1MDNFLTM3LDEuNjY3NDM5MDQwOTM0NjYzOEUtMzcsMS4xNjIwNjgzMjMxODI3MTQ1RS0zNyw3LjMyMDE1MzAzODc3MzM2RS0zOCwyLjY1NzQ0ODI5MTE4MTc4OUUtMzgsOTY2Mi4wLDMuNzM4ODE1ODgxMzAzMjM4RS00MCwxLjU1MzA1MzcwNzcyODczOEUtNDEsMi40MjMwNzMzMTM3MzQ2OTIzRS00Miw4LjI5NzY0MjAyOTE1OTFFLTQzLDUuNTE5ODQyNzE0MjY2MjE2RS00Miw3LjQ4MDc3MzYyNTA1Nzg0OEUtNDIsOS4yNjUyOTA2MzE5NTAwNzhFLTQyLDYuMDkwNTc1NDA4ODA5NjM0RS0yOCwxLjAzODk4MjQ5MDg5NDQ2NEUtNDEsNi45MDI2MDgyMzgxODY5MzZFLTQyLDYuMTk5MTE5NjQyMjE2MDY3RS00MywxLjM0NTE5NjM2NTA4NTE1MjJFLTQxLDQuNDI5OTQyNjQzOTYwNTc1RS00Miw2LjAzMzkxMDQ4NTk3MjQyMUUtNDIsMjQzNzg2LjAsNDQzOTc0LjAsNzk1MTM3LjAsODQ1NDc0LjAsNC43MDQyMTczMTQ4ODQ1NzVFLTQyLDQuNDA3MzMwMzc2MTU3NjA5RS00MiwyNzI4OTUuMCw4LjE4MDk3MTUzODgzNzE5OEUtNDAsNy42MTA4MDEwNzc2OTc0MThFLTQyLDQuNzA1NjkwMDUwMjI0Mjc5RS00MSwyNDM0NjAuMCw4MDQ4NzQuMCwzLjIyNzUzNjU3ODMyMjA4ODdFLTM4LDQ5NzUwNi4wLDU2MTMyNi4wLDc3NjYwMC4wLDI0NjU5MjUuMCwzMDAyOTc0LjAsMTI5MzQ2NS4wLDEuMTkzMjYxOTE4OTA5MTE5N0UtMjgsMTMzNzM4Ni4wLDg5NjUwLjAsNDExOTk0LjAsMTkzOTA5Ni4wLDU5ODA3Ni4wLDQzMjQwMy4wLDcyOTg0NS4wLDM0MjgyMi4wLDYyODc5My4wLDIzOTYyMy4wLDEuNDc5OTQwMzMzNjgwNjhFLTMwLDguOTc0NzU2NTExOTI5ODAxRS0zNSwyLjYzNDY5NTk5NDg1NDkzRS00MSwxLjU0MjgzNDY1OTk2MDcyNEUtNDEsMy40NzI3MDkxMjE0NjIyNjQ1RS00MiwzLjE5Mjg0NjE1NTA0NzgxMUUtNDEsNC44MTI3MTY3NDQ5MDQxMDg0RS00MiwyLjg4NjgyODY2OTY2MDc1NDRFLTI1CisyMCxTdW4gMTMgRmViIDExLDEuNjYzMDUyNzYxNzY4MzQ0OEUtNDEsOC4wNzMwMzYxNjQ4NzI0NDFFLTQyLDcuNzEyNzQ5NTMxMjk2OTIxRS00MiwzLjE5NDM0ODcyNzg1MDEwNEUtNDEsMS4wNzcwMzU3MTA1NDk1MDY3RS0zOCwyLjA4ODU1Nzg1NjIxNzMyNjRFLTM5LDEuMDI0MjMwMDM1MTIwNTIxOUUtMzksODM5ODQuMCwxLjg2NzQ4NzkyODc2NzExOTZFLTM0LDUuMjQxMjQ1MDE2NTE4Nzc3RS0zOCwzLjYwODQ3ODA1OTg0MjcyNkUtMzYsMi40OTkyODE4NDU2MDU1NjhFLTM5LDEuMDAwMjAwNTg0MzIwMDEyMkUtMzEsMy40NDAwOTcxMzE1ODU4NjFFLTM4LDIuOTY5MDg3MDIzMDA4NTk0NkUtMzksNS44MTM1NjMxMTE2NjM1NDZFLTM5LDUuODc1MzAyODE3OTUwNDU1RS0zOSwzLjYzNjk1NzU0NzI3OTYxNEUtMzksMi45NDk3ODA1MzQ1ODQ5ODVFLTM5LDIuMTEwNzAxNTUyNjY2MDU2RS0zOSw4LjM5Mzk4NzY3NTM3MTM1N0UtNDAsOTY2Mi4wLDQuMzQ1MDI0OTAxNDc5Nzk0M0UtNDEsNC41NDMzNjYwMzY4Nzk1MTlFLTQyLDguMDA1ODExNjQ3ODE3M0UtNDMsMi45MTk4MTI4OTI1ODk5MjYyRS00MywxLjY3MDU4ODczNDY5Mjg3MzNFLTQyLDMuNTMyNzgzODk0MDM1NjUzNUUtNDIsMy4zOTMxNDI2MTQ1OTkzMTRFLTQyLDIuODEzNTE1ODk0OTIzNTk3RS0yOCwzLjI0NjUwMTE5OTI2NzA4OEUtNDIsMi4wNDg2MjAxODgwOTA1OTM3RS00MiwyLjU4NTg1NjEyNTk3NzI2NjNFLTQzLDQuNTk2ODg2MzcyNzMyNDc2RS00MiwyLjA5MDUwNzM0NDE0NTMxNzZFLTQyLDIuODIwNjUwNTgzNzYwNDA3MkUtNDIsMjQzNzg2LjAsNDQzOTc0LjAsNzk1MTM3LjAsODQ1NDc0LjAsMi4wODg1NjY4NDA3OTAwMDU3RS00MiwyLjA5Nzc1MDI5ODM0MDIwNUUtNDIsMjcyODk1LjAsNy43MTE2MzQ5NDEzOTUyMzFFLTQxLDIuMDE5MDQwODA2NDgzMjEwNUUtNDIsMS4wNzU0NTAyNTIwMzY3MTc2RS00MSwyNDM0NjAuMCw4MDQ4NzQuMCwxLjAyNjA3MjA5OTQwNzQyN0UtMzksNDk3NTA2LjAsNTYxMzI2LjAsNzc2NjAwLjAsMjQ2NTkyNS4wLDMwMDI5NzQuMCwxMjkzNDY1LjAsNi4zNjAyNTQxMTk5NTk1ODhFLTI5LDEzMzczODYuMCw4OTY1MC4wLDQxMTk5NC4wLDE5MzkwOTYuMCw1OTgwNzYuMCw0MzI0MDMuMCw3Mjk4NDUuMCwzNDI4MjIuMCw2Mjg3OTMuMCwyMzk2MjMuMCw2Ljg2MTE1NTE1ODkxMTg0NUUtMzQsNS4xNDE3NDA4MTE0MTIzODRFLTM3LDQuMDkwMDkwNDk0MjUzNjUyRS00MiwzLjYxMjcwNzM0OTIxMDUxMUUtNDIsOS41NTkwNjUxMDMwNzc3NjRFLTQzLDUuMDg3MTkyMDIzMDEwOTZFLTQyLDEuMDExMzQ1NDEwOTIzMzIwN0UtNDIsMS40MDU4OTI5ODEzOTg3MzAzRS0yNQorMjEsTW9uIDE0IEZlYiAxMSwzLjcwMTUzNDExNjQyMTY2NTRFLTQyLDIuMjg3MDg3MTE4MzQ1NTA4OEUtNDIsMi4yNTU1NDQzNDA2ODQwODhFLTQyLDkuMDQxMTc5MjM1MjAyNzI2RS00Miw0LjIxNTU2NjQyMzY4MjU3MkUtNDAsMS4yNTQxNjI1MDMzMDY2NDkzRS00MCw5LjEwNzE3MjU5NjU4NjcxRS00MSw4Mzk4NC4wLDEuMDg2NTA3NDM2OTY1MzQwOEUtMzYsMS42NzAyNDc2MDk1NjU4MTZFLTM5LDMuNTMwMDc1NTA3MzQ1NTQyNkUtMzgsMS45MDE0NjE4MTM0NTUzMTdFLTQwLDcuNDE3MjcyMzE0MjAyMDExRS0zMiw5Ljc3Nzc3MjIxNzA2MDYzRS00MCwyLjIwMzM1NzQxMDU1MjUzNzNFLTQwLDIuNjI1NTIwNjI1NjczMzUzM0UtNDAsMi45MDgwOTU5MjY4MjcwODg2RS00MCwyLjEwNjQ0NDc3MTMxOTE0M0UtNDAsMS45MjI4NTgyNTQ5OTg4NTM3RS00MCwxLjUxNTExMDE2MTY4MDM5NzdFLTQwLDYuNDY0NDUyNjI3MDAxMTkxRS00MSw5NjYyLjAsOS4wMzY5Mjg5MzQ5Mjc1MTlFLTQyLDEuODcwNDY0NTgzODc0MjU5OEUtNDIsMy41Nzc0NzUzNTY5NjczMDlFLTQzLDEuMzY1MTYwOTU0MjM4MjY1RS00Myw3LjA1NTA0NTI2ODYxNjI3N0UtNDMsMi4wNTM5NTUwNjY3ODIyNjdFLTQyLDEuNjQ0MzAzNTUwNzY2ODM0NUUtNDIsMS42MjY4NjY5MDY5NTExMzVFLTI4LDEuNDAwOTI4NDYwOTA2OTU5M0UtNDIsOC41MDUwODQ4ODIwNTUxOTRFLTQzLDEuMzY1NDI1Njg1NTMxNDk1RS00MywyLjEyMTg2MTUzODc3MDc1MjZFLTQyLDEuMjE2MDEzOTU0OTY1NzJFLTQyLDEuNjI5MTcwODQ5MjY4ODU2NkUtNDIsMjQzNzg2LjAsNDQzOTc0LjAsNzk1MTM3LjAsODQ1NDc0LjAsMS4xNjMxMjUwMDM0MDY1MzkyRS00MiwxLjIyMTM0MDYyMTE2MzMwNzNFLTQyLDI3Mjg5NS4wLDEuMzcxODIyMzc4NjI4NjgzNUUtNDEsNy43NDA2Nzk4MzcxODM4MDVFLTQzLDMuNjk0NjQ4NDU1ODk3Mzk5RS00MiwyNDM0NjAuMCw4MDQ4NzQuMCw4LjAzMTA4MDc5MTkyNzA3NEUtNDEsNDk3NTA2LjAsNTYxMzI2LjAsNzc2NjAwLjAsMjQ2NTkyNS4wLDMwMDI5NzQuMCwxMjkzNDY1LjAsNC4zNzAxNDE3MDY2MzIxMzk3RS0yOSwxMzM3Mzg2LjAsODk2NTAuMCw0MTE5OTQuMCwxOTM5MDk2LjAsNTk4MDc2LjAsNDMyNDAzLjAsNzI5ODQ1LjAsMzQyODIyLjAsNjI4NzkzLjAsMjM5NjIzLjAsMy45MTU2NDY4NTAzODQ3OTZFLTM2LDEuMDg2NjIwMjAyNjkwODc5M0UtMzgsMS4wNDE3NDM1MzY4MDg2MTg5RS00MiwxLjI1Njc4NDIzNjQxMTUzNzdFLTQyLDMuNzQ2MTk4NjgyMjU0MzJFLTQzLDEuMzI5NTgzNjcxMDAwMTg2MUUtNDIsMy4yMzYzMDUxNzg4MzM5NzZFLTQzLDguMzk0NDI1MjkzNzE2Mzg1RS0yNgorMjIsVHVlIDE1IEZlYiAxMSwxLjIzOTU1ODI4NjU2OTMzRS00Miw5LjA4NTEyNzYyMTk3MzUwNEUtNDMsOS4yMDU2NjI2MTAyNjM3MkUtNDMsMy42MzM2NDM5NTgyMTgyNDczRS00Miw1LjQ5NDIyODU0NDAyMjc1RS00MSwxLjcxMjM1ODAyNDQ1MDg0NTdFLTQxLDEuNTYxNTA1OTU4NDk4MTY3OEUtNDEsODM5ODQuMCwyLjYwNjkxNTIzNDA2Mzc4MDZFLTM2LDIuMzE2MzA4MzQ3OTAwNzU3NkUtNDAsMi4yODA5NDMyNDM5OTIwNzdFLTM4LDIuOTkwMDY5NDE1NTg3NjE5RS00MSw2LjgzNTgzOTU2MDY4NDk1MUUtMzIsMS40NDMxMzMwMzgyMTM2ODY5RS00MCwzLjQyNDQ0NTA4MDM2Njc1ODNFLTQxLDMuMzcyMTc1NDM4OTMyMjU3NkUtNDEsMy43Nzc5NjEwNzIzMzEyMDc2RS00MSwyLjg1MjQ3NjEwNzkyNzI3MDZFLTQxLDIuNzQyNTA5MjYzODk3ODExNkUtNDEsMi4yNjc1MTUzNzIxMjk1ODU4RS00MSwxLjAwODA4OTI2MjU3MjkzMzdFLTQxLDk2NjIuMCwyLjg5NTU3NjIwNDQ2Njk4N0UtNDIsOS44Nzc0NDYyNDMzODUxMzNFLTQzLDEuOTc0NDY0NDU0MTY3NjkzNkUtNDMsNy43NzI3Njg1NTA1MDM5M0UtNDQsMy43OTk4NDI4MzY5MjM2NzNFLTQzLDEuMzgwMjAzNTI3NjU4NzMzN0UtNDIsOS43NDcwNTI2MzkwNjAyMThFLTQzLDEuMTA4MTI3NjgxMjI4NzMwNUUtMjgsNy42MzQ2MDMxOTYwOTQxMDlFLTQzLDQuNDk3NTcxMDQ5NzcyMDA3RS00Myw4LjQ0Nzg1Mzk5Mzc2MTY0N0UtNDQsMS4yMTkyMzUxMjI3NTk0Mjg4RS00Miw4LjE5MjA3MzM1NzUxNjU2RS00MywxLjA5MTQ1NjY4MjEwMjMxNUUtNDIsMjQzNzg2LjAsNDQzOTc0LjAsNzk1MTM3LjAsODQ1NDc0LjAsNy42MDU1NjE2MDEyMTY5MjVFLTQzLDguMTQwMTUxOTY0ODI0NjQ4RS00MywyNzI4OTUuMCwzLjkxOTU0OTczMTE0NDc1MDZFLTQyLDMuODg1Nzc5NzI1MDYzNjk5RS00MywxLjcxMTk5ODA4MDk1Nzk5MDNFLTQyLDI0MzQ2MC4wLDgwNDg3NC4wLDEuMjg4NzYwMDEzNDQ5MzIyN0UtNDEsNDk3NTA2LjAsNTYxMzI2LjAsNzc2NjAwLjAsMjQ2NTkyNS4wLDMwMDI5NzQuMCwxMjkzNDY1LjAsMy42ODUxMjExMTMzODAxNTJFLTI5LDEzMzczODYuMCw4OTY1MC4wLDQxMTk5NC4wLDE5MzkwOTYuMCw1OTgwNzYuMCw0MzI0MDMuMCw3Mjk4NDUuMCwzNDI4MjIuMCw2Mjg3OTMuMCwyMzk2MjMuMCwxLjE5OTgxODI5OTcwNzc0NDFFLTM1LDIuMTQ1NTM3Njc4NzM2NDQ3NkUtMzksMy43NjY1NjcxNTA4NDkxNTdFLTQzLDUuODA5MzAyODYyMzYzODI4RS00MywxLjg4OTY2Njc1ODE4NDk4MDZFLTQzLDQuOTY5ODUwNjI2MDQ2MDRFLTQzLDEuMzk1OTMxNjgwOTYwOTQ0M0UtNDMsNS44MDU2NTMwNjI5Mjg1NjlFLTI2CisyMyxXZWQgMTYgRmViIDExLDUuNjM3MDczOTIwNDAxOTA3RS00Myw0LjY4MDczNzQ0Mjg5MDgwNTVFLTQzLDQuODM3Mzg3MzE3NzcwMDIzRS00MywxLjg4ODA4Njk1ODU3NjU5MkUtNDIsOS41NzgyMzA5ODQwNDIyODVFLTQyLDMuNjk3MDc4MzY1MDYyMzAwN0UtNDIsNC4yNjI0NDU4OTg1MDQ1NzNFLTQyLDgzOTg0LjAsOC45MTcyNTk2ODI4NzI0ODRFLTM3LDMuNjkyMzc2MzM2NTI1MzkwNUUtNDEsMy4yOTAyMDQ4MTc4Nzg0RS0zOSw3LjU2OTE2ODM0NTAyODUyOUUtNDIsNi41MTUxMTk2OTM3Njk3NjhFLTMyLDIuMTkzMzcxMDQxODUxNjU1N0UtNDEsOC41NzY5NDY4OTYwNDU1NzhFLTQyLDYuMzg0ODkwNDE2Njg1ODI2RS00Miw3LjQxMDQxOTc4MzgzMjUyMUUtNDIsNi4wOTk2ODIzMDM1MDUxMjlFLTQyLDYuMjc4ODMxMTYwMDIzNzQ2RS00Miw1LjQ2NTM4MDk2NDA5NDk4MUUtNDIsMi41MjkxOTE2ODYyNzExMzA3RS00Miw5NjYyLjAsMS4yNzQ4MTg0OTAzODAxNTg5RS00Miw2LjI1ODA2MTQ1NDAwMDYwMkUtNDMsMS4yOTE0ODc0ODIxNTAwOTQ0RS00Myw1LjE5OTc0ODY1Njc0OTE1MkUtNDQsMi40NDIwOTEwODg2MTA5NTA4RS00MywxLjA0MDM3ODcyOTg1MzUxOUUtNDIsNi43MTMxNjE3MDYyMjQzODg1RS00Myw4LjQ0OTU2NTA1NjM5OTM5NUUtMjksNC45NDg1MTEyNjg1MzA4NjQ2RS00MywyLjg1MjQwNjk2Mjk0MzkzMUUtNDMsNi4wMDAzMTY4MDM0MDMxMjRFLTQ0LDguMjEwODg3NDUwNzY5NDhFLTQzLDYuMTg2Mzc5ODgwOTY5OTc3RS00Myw4LjIwOTQ4ODQxOTk0ODA2RS00MywyNDM3ODYuMCw0NDM5NzQuMCw3OTUxMzcuMCw4NDU0NzQuMCw1LjYyMTc4OTQ3NzQ4MzAzOEUtNDMsNi4wOTk5MDAxNTgxMTE5NzFFLTQzLDI3Mjg5NS4wLDEuNTg1OTk5NjE1MzM3MzM2NkUtNDIsMi4zNzMyNjU1OTQyMDQ3MTk2RS00Myw5Ljg2NjIwMTc2NTcwNzQ0MkUtNDMsMjQzNDYwLjAsODA0ODc0LjAsMy4zMjM3MTAwNDQ4NzMxN0UtNDIsNDk3NTA2LjAsNTYxMzI2LjAsNzc2NjAwLjAsMjQ2NTkyNS4wLDMwMDI5NzQuMCwxMjkzNDY1LjAsMy4yNzQwNTUxNTU3OTg2Mzc3RS0yOSwxMzM3Mzg2LjAsODk2NTAuMCw0MTE5OTQuMCwxOTM5MDk2LjAsNTk4MDc2LjAsNDMyNDAzLjAsNzI5ODQ1LjAsMzQyODIyLjAsNjI4NzkzLjAsMjM5NjIzLjAsNS4xMzY0ODE3MjcyNjA3NjhFLTM2LDIuOTExODI0MDY1OTkyNjM4NEUtNDAsMS44MTE3Nzc2MzEzMzU5MjY2RS00MywzLjM0MTczNzc5ODkzNjI5OTVFLTQzLDEuMTU4MTYyODQyMTMyODY5RS00MywyLjQ0OTI2OTI0MTg4NjQzOUUtNDMsNy42MzYwMDkwNzM5MTc2MTdFLTQ0LDQuNDY2Mzk3Mjg3ODQ1MDg3N0UtMjYKKzI0LFRodSAxNyBGZWIgMTEsMy4yMDQ3MzczMjQwODE4ODY1RS00MywyLjkxMzA5MDY3MzY2MDY0MzVFLTQzLDMuMDUzOTM0Njk3MzI4ODg2M0UtNDMsMS4xODIzMzQzMTEwMjM1NjFFLTQyLDIuNjUxNTMzMjcyMzEyNjMxNkUtNDIsMS4yMTI1NTE0MDc4OTM5NzczRS00MiwxLjY2NzMzNjQwNDQ2MTE0RS00Miw4Mzk4NC4wLDEuMTQwNDM0MTk5NDcyMjYzMUUtMzcsOS40NjMwNjE2NTI0MDkxMjJFLTQyLDUuMDcyMzQwODgwNjAyNjE2RS00MCwyLjc5OTc0NDI0NjY2MTEyMTNFLTQyLDYuMDY1OTE2NzM0ODg1MDExRS0zMiw1LjM3Nzg3ODI3NTQ5MzQ4N0UtNDIsMy4xNDc0MjM1NzEwNjczMDhFLTQyLDEuODkxMDQ5Nzc1Njg4MDA0N0UtNDIsMi4yNTYzMzY2Njc0Njg3MDdFLTQyLDEuOTg2MjA5ODU3OTk5OTYxNkUtNDIsMi4xNTM3MjUxOTQ3Nzg3MjA2RS00MiwxLjk0ODY0MDQ3NzEwNDk5NzNFLTQyLDkuMjkyMTYxMzA3MzQ4NjkyRS00Myw5NjYyLjAsNy4wNzg2OTE3MDg0ODMyODZFLTQzLDQuNTIxODkzMDU5MTcxMzMzRS00Myw5LjU0ODA1NjM2NDk0NTY3N0UtNDQsMy45MDY4MzI5ODEzNTA2ODAzRS00NCwxLjc4MjgwODQyMjUxODQ2MjJFLTQzLDguNTE1MzE2NTE5MDQ5NDgzRS00Myw1LjE1MDY1MzEyMjM1NDU5NEUtNDMsNi45OTUzMTc4MjMwOTI4N0UtMjksMy42MzQ3MzYxNzMwOTM2NjlFLTQzLDIuMDYyNTY1NjQ4NjM1NjE4NEUtNDMsNC43MDYzODAxMjczMDQ1MTZFLTQ0LDYuMTk5MDkxNzE3NzkzMzgxRS00Myw1LjA3MDA4NzMxNjkwMjg1RS00Myw2LjcwODk4NTc4NTk2MTY0OTZFLTQzLDI0Mzc4Ni4wLDQ0Mzk3NC4wLDc5NTEzNy4wLDg0NTQ3NC4wLDQuNTM3Mzg1MjQ5NzMzNzM0RS00Myw0Ljk3MTY0MzY4MDQ0MTQ2NUUtNDMsMjcyODk1LjAsOC4yODE5MjEyNDI5NDkxMTlFLTQzLDEuNjcwMTYxMTUxNDgwOTU3NEUtNDMsNi42NTg0NDU5Mjk5NTkwMDE1RS00MywyNDM0NjAuMCw4MDQ4NzQuMCwxLjI0NjU3NzA2MTMwMDY1MDJFLTQyLDQ5NzUwNi4wLDU2MTMyNi4wLDc3NjYwMC4wLDI0NjU5MjUuMCwzMDAyOTc0LjAsMTI5MzQ2NS4wLDMuMDAwNjM1MDA2MTM0NDMzNUUtMjksMTMzNzM4Ni4wLDg5NjUwLjAsNDExOTk0LjAsMTkzOTA5Ni4wLDU5ODA3Ni4wLDQzMjQwMy4wLDcyOTg0NS4wLDM0MjgyMi4wLDYyODc5My4wLDIzOTYyMy4wLDYuNjkzMTQwODMwNDA4MzM4RS0zNyw2LjI4MjE5NTYxNDU3Mjg4NEUtNDEsMS4wNzI4MzY0NTY3ODQwOTc1RS00MywyLjI1MjE4MDcyMDY1OTMyMUUtNDMsOC4xNzA5NDA2ODg3OTAwNzZFLTQ0LDEuNDc2MDIzNjU4ODExMzc0NkUtNDMsNC45NjI2MzQ2ODUxMTk5OTNFLTQ0LDMuNzA4ODY3NTEwMzU1Nzk0RS0yNgorMjUsRnJpIDE4IEZlYiAxMSwyLjE0MTY3NTg1MTMzMzEzMDRFLTQzLDIuMDc4MDIxNDYxMzMzMDY5NkUtNDMsMi4yMDEwNDEzNjg0NTQ3OTU3RS00Myw4LjQ3MTYzMDE2MTkyNDY4N0UtNDMsMS4wNDgxMTEzNTY4NTE5MjI5RS00Miw1LjQzMDE5Mjg5Mjk3OTUyNTVFLTQzLDguNDkzOTQxODMyNDA2NTE1RS00Myw4Mzk4NC4wLDIuMDczNzg5NDk2MTE3ODMxRS0zOCwzLjUzMjY4MTcyOTY3NTkxNkUtNDIsMS4yNjA3ODIxMjcwNzE5NTI0RS00MCwxLjM2OTI4NDc5NTc0NjE0OTVFLTQyLDYuMDQ2MzkxNTQ4MTkzNjdFLTMyLDEuOTQyMzQ0NjI3NTM5NDE2NkUtNDIsMS41MzA0MjM2Nzc1NDI3Nzg3RS00Miw3Ljg1NzY4NjY3MDc3MDE5NUUtNDMsOS41Njc2OTcwNjEwMTkxMzRFLTQzLDguODQ4NjY0ODM0MDM4NDkzRS00Myw5Ljk2ODEzMDMxNzU5MjkyNkUtNDMsOS4yNzc1ODc5ODE5MTg1MzNFLTQzLDQuNTIyMDMzMDEyNzgxMjFFLTQzLDk2NjIuMCw0LjY1MDcwNzY2NDk1NzY0OTZFLTQzLDMuNTkwNzgzMzg5MDgzMzg5RS00Myw3LjcwNzE1NTM0MDExMTM0N0UtNDQsMy4xOTAyNDYwNTU1ODMyMTM2RS00NCwxLjQyNjE2NDcwMjEwNzgwODRFLTQzLDcuMzkxNTA5NjY3ODAzMDI5RS00Myw0LjI2OTQyMTQ5OTgyMDQwMkUtNDMsNi4xNDQ2OTExNjcyNDUwN0UtMjksMi45MjAzNzc4NDE1NzE1NzdFLTQzLDEuNjM4NzEzNzA1Njg0ODQ5M0UtNDMsMy45NjMwMDM0MTE5NjUzNDA0RS00NCw1LjA3OTY3MDg4OTc0NTA2MTVFLTQzLDQuNDA1MDg2NTI2NTQ5MjE1RS00Myw1LjgxNzIxMjUwOTkxODM4NDVFLTQzLDI0Mzc4Ni4wLDQ0Mzk3NC4wLDc5NTEzNy4wLDg0NTQ3NC4wLDMuODk5NTIwNDg3ODcwNzYyRS00Myw0LjMwMjU0MzcxNTY4NTYwOUUtNDMsMjcyODk1LjAsNS4yMDQ3OTc2ODY4MTI4MjhFLTQzLDEuMzAxMzk0MDM5OTAwMDgxM0UtNDMsNS4wMzQ2NzA4NTM4MDQzMzQ1RS00MywyNDM0NjAuMCw4MDQ4NzQuMCw2LjE1ODgwNDg1NTM2ODgxNkUtNDMsNDk3NTA2LjAsNTYxMzI2LjAsNzc2NjAwLjAsMjQ2NTkyNS4wLDMwMDI5NzQuMCwxMjkzNDY1LjAsMi44OTYyODMwNDkzMjEzNzg1RS0yOSwxMzM3Mzg2LjAsODk2NTAuMCw0MTE5OTQuMCwxOTM5MDk2LjAsNTk4MDc2LjAsNDMyNDAzLjAsNzI5ODQ1LjAsMzQyODIyLjAsNjI4NzkzLjAsMjM5NjIzLjAsMS4xNDQ5MzY0NTk3NjY1MDc4RS0zNywyLjA1OTk0MTgxNjMxMzIyMjJFLTQxLDcuMzgzNDE3NDY1OTU1NTk2RS00NCwxLjcwMTI0MjIxOTY3NDI0NjNFLTQzLDYuMzc4MjY4NDk0ODMwMDMzRS00NCwxLjAyODc1Mjc2NjA4Nzk1OTdFLTQzLDMuNjUxOTg2MzIzMzg1Njc2NEUtNDQsMy4yNTIzNTg3MTY1NjkzNjRFLTI2CisyNixTYXQgMTkgRmViIDExLDEuNjA4MDI2NTgwMjU2MzQ5RS00MywxLjYzNDk5NjU3Mzc5MTI2OUUtNDMsMS43NDQ2MjA3MDI2NTAyNTU0RS00Myw2LjY4NjgwNjE4MDYzODg5NUUtNDMsNS4zODA1NzA3MTc1OTkzMDFFLTQzLDMuMDUyNjczMDgyMjY3MDc1NUUtNDMsNS4yNDMxMDU3MzI1MDg4NzQ1RS00Myw4Mzk4NC4wLDUuOTQ2NjE1NjM5NDI4NjA3RS0zOSwxLjczOTQ0MjI3OTI0MjQ4OTVFLTQyLDQuNjAwMzQyNDU1NzAzNDY4RS00MSw4LjIwNjQxNzQxMjQyMTM5MUUtNDMsNi4yODc2NjE1MDcyNzg2MzZFLTMyLDkuMzM1NDU5NTUyNDI3NjAzRS00Myw5LjEzMzY3MDI0ODkzODQ2N0UtNDMsNC4xODMzNDM1MDA4NjgxODJFLTQzLDUuMTY5Mjg2MjkzMzg5MjQ4RS00Myw0Ljk1NTgzMDIxMTUxNDA0M0UtNDMsNS43Mzk4MDMzODY3MTc1MzhFLTQzLDUuNDUyODQxMDE1MDE1ODU3RS00MywyLjcwMDMzOTA5NzUxNTg2ODNFLTQzLDk2NjIuMCwzLjQ0OTM5NDIwMDQxODE0MDJFLTQzLDMuMDUwNDEzMDUxMDEyNTA4MkUtNDMsNi42MjQxMDg5MDExODE4OTJFLTQ0LDIuNzY0NjE0MjEyODU2NjZFLTQ0LDEuMjE3OTIwMjcwNzgwNzYxRS00Myw2LjY4OTgxODcwODIzMDM4MDZFLTQzLDMuNzM5NTM3MzQxMjc0MTlFLTQzLDUuNjMxMDQwMzcxNDI3Mjg2RS0yOSwyLjUwMTc0OTA5Njc3NTkwOEUtNDMsMS4zOTI2MjQ3MDgyNTIwNTg5RS00MywzLjUxMDE2Mjk1MDE3NzU5NkUtNDQsNC40MTI5MjI5ODQyNTYwOTM2RS00MywzLjk4OTU1OTY2MjI3MTM1ODZFLTQzLDUuMjYwOTA5MDUyNTg3NzY2RS00MywyNDM3ODYuMCw0NDM5NzQuMCw3OTUxMzcuMCw4NDU0NzQuMCwzLjUwNDQ3NjE1MjI3MzcxMTZFLTQzLDMuODg1NzcwNjczNjk2ODE3NUUtNDMsMjcyODk1LjAsMy43Mzg5NDU4MDc0OTE4MDNFLTQzLDEuMDkwNzIwMjAyMDgzMzQ2OEUtNDMsNC4xMzAwMDE4Njg1NTg5ODRFLTQzLDI0MzQ2MC4wLDgwNDg3NC4wLDMuNzE4MzMzNjI2NDk3NzUyRS00Myw0OTc1MDYuMCw1NjEzMjYuMCw3NzY2MDAuMCwyNDY1OTI1LjAsMzAwMjk3NC4wLDEyOTM0NjUuMCwyLjkwNDQ3NTczNjA2NjgzOUUtMjksMTMzNzM4Ni4wLDg5NjUwLjAsNDExOTk0LjAsMTkzOTA5Ni4wLDU5ODA3Ni4wLDQzMjQwMy4wLDcyOTg0NS4wLDM0MjgyMi4wLDYyODc5My4wLDIzOTYyMy4wLDMuMTIxMjk4OTg5Mzg0NzU3RS0zOCw5LjIyNDIxMTY4MzU0ODY3RS00Miw1LjY2MTg0NDYwOTE5MTIzN0UtNDQsMS4zOTQ1MjkzODEwMjk5MDYzRS00Myw1LjM1MjU4MzI5OTc0NDQwMkUtNDQsNy45NjA2NjUzMDMzODEzNzVFLTQ0LDIuOTM4MTM4NDk1OTQ2MDFFLTQ0LDIuOTY0NzQ0MTQ1NDI4NzAyM0UtMjYKKzI3LFN1biAyMCBGZWIgMTEsMS4zMTI0NjE0ODExODEyNzI2RS00MywxLjM3OTg0NDQ1NDA1MzU1OTRFLTQzLDEuNDgwMTQwMDQ3Mjk0NzUwNkUtNDMsNS42NTYxNTQyOTczMTg3MzVFLTQzLDMuMzM5OTEwMjEwMDc1MjcyM0UtNDMsMi4wMjM1MDcwMTk0NDkyNTlFLTQzLDMuNzE4MDIzMDQyNjk0OTY1RS00Myw4Mzk4NC4wLDIuNDEyNjU3MTgzOTIyNjk5RS0zOSwxLjA0NzYwNTc3MDgwNjU3MjJFLTQyLDIuMjI3NjE0ODYxMDMxNDA2NUUtNDEsNS42OTcwNDExMTczNTQ4NDZFLTQzLDYuNzM5NzE3MDczOTU5MjQ2RS0zMiw1LjUyNDcwODk5NTc1NDgzMkUtNDMsNi4zMjE1NjkyODQ5NTM2MjA1RS00MywyLjY2NjEwODUzMzgzODI0MzVFLTQzLDMuMzI5NjMxODU5MjY5OTAzMkUtNDMsMy4yNzYyNTQzNTIzMjg5NDM2RS00MywzLjg3MTMyMzAyNDE2MzYwMDVFLTQzLDMuNzMyNTQyMTAzMDg2NTZFLTQzLDEuODY5Njk3ODg4ODA5NjU1RS00Myw5NjYyLjAsMi43OTA4MjU2NDA3OTY4NTFFLTQzLDIuNzE4ODkzNDU2MzcxNDI4NkUtNDMsNS45NTMyNjI1MjM3MTc4NzRFLTQ0LDIuNDk5MjA0ODgxNTQwMzY2RS00NCwxLjA4OTYxMzgyMDkwODk4MzdFLTQzLDYuMjM2NzUxODA0ODkyMzgwNUUtNDMsMy40MDYyNzU1OTIwMTA5MTUzRS00Myw1LjMxNzg5MzM1MDM4MTQ3NEUtMjksMi4yNDMxNjE0Mzc0MDUxMTlFLTQzLDEuMjQxNjAyMzA3Nzk1OTYyRS00MywzLjIyMjc1NTc1MjIwMzYzOUUtNDQsMy45OTYzNTg3NDIwMTY4NzQ0RS00MywzLjcyMTEyNTA2NDk3MTYzOEUtNDMsNC45MDE5NDYyMDkzMzQzMzhFLTQzLDI0Mzc4Ni4wLDQ0Mzk3NC4wLDc5NTEzNy4wLDg0NTQ3NC4wLDMuMjUwODQ4NDQxODAwNDc5NkUtNDMsMy42MTcxMTY4MjYwNDc3MDJFLTQzLDI3Mjg5NS4wLDIuOTU2NjY1MDM1MDMxMzU2RS00Myw5LjYyODkwNjk3Nzk5NDc1MkUtNDQsMy41OTA2Nzk3MTQ5Mzk5NzVFLTQzLDI0MzQ2MC4wLDgwNDg3NC4wLDIuNTk1MDQ5ODIxNTc2ODY2NUUtNDMsNDk3NTA2LjAsNTYxMzI2LjAsNzc2NjAwLjAsMjQ2NTkyNS4wLDMwMDI5NzQuMCwxMjkzNDY1LjAsMi45OTM1MzM5OTkyOTQ3NDYzRS0yOSwxMzM3Mzg2LjAsODk2NTAuMCw0MTE5OTQuMCwxOTM5MDk2LjAsNTk4MDc2LjAsNDMyNDAzLjAsNzI5ODQ1LjAsMzQyODIyLjAsNjI4NzkzLjAsMjM5NjIzLjAsMS4yMTk5MDk0NDA4OTE0NThFLTM4LDUuMTg1NDM3MjkwMTA2NDlFLTQyLDQuNjkxMzU0MDg3OTYwMDIzNUUtNDQsMS4yMTE3ODAwNTc1NTU4NzQ2RS00Myw0LjcyOTU3MzI5MjI4OTU1OEUtNDQsNi42Mzg5NjQ4MTYwNzY5MTFFLTQ0LDIuNTE5MzE2MTEzMjc4NDI5RS00NCwyLjc3NzgwNjQ2Mjg2OTE4M0UtMjYKKzI4LE1vbiAyMSBGZWIgMTEsMS4xMzY5OTA4MDQ5ODU0NzQxRS00MywxLjIyNDE0NDk1MDUzMzM3NjdFLTQzLDEuMzE4MDUzNDgyOTE5NDA5OEUtNDMsNS4wMjYwNjI0Njk0OTkyNjRFLTQzLDIuMzc4MDA5NTM2MTcyMDUyM0UtNDMsMS41MTA0MDAyMDAwNDIyNzExRS00MywyLjkxMjkyODYyMjc1NTkwNkUtNDMsODM5ODQuMCwxLjI2MjMxOTM0NjkwODIzNjJFLTM5LDcuMjk4NDM2NDUzMzQ4MjI2RS00MywxLjMyNTQ1MTEwMzcwODAzMzdFLTQxLDQuMzk1OTg3MzQzNDQwMDMxRS00Myw3LjM1OTY4MDI2ODgxNTM1RS0zMiwzLjgwMDU4Mjk1NTE5NDMyOUUtNDMsNC44NjcyOTk0NDI3MzU3NTE1RS00MywxLjkzNDY0NDY0MzEyMjk4NDJFLTQzLDIuNDM0NjAzNDY4MDQ3NDI3RS00MywyLjQ0MDgyMzU0MzkwMTE2RS00MywyLjkyNTk4MDE5ODY5MDkyNEUtNDMsMi44NTExNjE2NTIxODAyODE0RS00MywxLjQzOTk3Mjc4ODQ4NzM3NDNFLTQzLDk2NjIuMCwyLjQwMjY2MTE0NTI5MTU4OUUtNDMsMi41MDc0NDQ3OTA5Mzk1ODA3RS00Myw1LjUyMjUxODI1NjA0MTczMkUtNDQsMi4zMjc5OTI3ODAwNTA5MDM2RS00NCwxLjAwNzUzMzYzOTA0NDEzNDRFLTQzLDUuOTM3MzQ2MDQ3OTUxMzhFLTQzLDMuMTkwMDExMTI5MzQyNDQwN0UtNDMsNS4xMzAwNTg5NjE2NDEzMDdFLTI5LDIuMDc3NDQ0NzUyMTAzMDk2NUUtNDMsMS4xNDUyNTc0MDc2MjkzODI0RS00MywzLjAzNTA2NjE2NzE0MjIyMjZFLTQ0LDMuNzI3MjgwOTkxOTYyNzU5RS00MywzLjU0MzY3MDAyMzcxMTE4MjNFLTQzLDQuNjY0ODM1MDQ4Mjk4NjY2NUUtNDMsMjQzNzg2LjAsNDQzOTc0LjAsNzk1MTM3LjAsODQ1NDc0LjAsMy4wODM4OTc5NTYwODAyNzU1RS00MywzLjQzOTc4MDgyMDczNjM1NzRFLTQzLDI3Mjg5NS4wLDIuNTA0MjQxMTAyMjgzNzQ5OEUtNDMsOC44MTk4NDgyMjQyNjA0OTFFLTQ0LDMuMjUzNTE1MjE3NDQxMzM5N0UtNDMsMjQzNDYwLjAsODA0ODc0LjAsMi4wMTAwMzcyOTgzODEzMDA2RS00Myw0OTc1MDYuMCw1NjEzMjYuMCw3NzY2MDAuMCwyNDY1OTI1LjAsMzAwMjk3NC4wLDEyOTM0NjUuMCwzLjE0MjEzNjgyNzcxMzk3NDZFLTI5LDEzMzczODYuMCw4OTY1MC4wLDQxMTk5NC4wLDE5MzkwOTYuMCw1OTgwNzYuMCw0MzI0MDMuMCw3Mjk4NDUuMCwzNDI4MjIuMCw2Mjg3OTMuMCwyMzk2MjMuMCw2LjIxMTA2NjE2MzM5NjY3OEUtMzksMy40MzczMDMzMDExMzk1NjdFLTQyLDQuMTA3OTg5Mzc0Njg0MjgxN0UtNDQsMS4wOTc1NzQzODY2MTA2NzIzRS00Myw0LjMzNDk2NTE3ODEzNjUzOEUtNDQsNS44NDAyMzQ0MzY3NDE0NDRFLTQ0LDIuMjYwMzkzNjIyNTk4OTc3NkUtNDQsMi42NTM2NDA2ODgyNjQwOTQ0RS0yNgorMjksVHVlIDIyIEZlYiAxMSwxLjAyNzYxMjA2OTc3MjkxMkUtNDMsMS4xMjUyMDc5MjIxMjU1NDA5RS00MywxLjIxNDc0OTA5NjYyOTE4ODZFLTQzLDQuNjI1MTYyOTM1NjcyOTcxRS00MywxLjg2ODUwNDAzOTUzMDExM0UtNDMsMS4yMjc1ODg5NDY3ODIwODA5RS00MywyLjQ1MDg2OTMyNDcwNjk0NjdFLTQzLDgzOTg0LjAsNy45NDQyODM4NDMwNDg0NDFFLTQwLDUuNjQ1OTkwODM3NTk2Njc3RS00Myw5LjE1Mzc0Mzk0OTI1NTg0NkUtNDIsMy42NTg3MzEzODMxNzMzOUUtNDMsOC4xMTgyNDkzOTM3NDU5NThFLTMyLDIuOTEzNTM1MjUwODU5ODA1OEUtNDMsNC4wNDQ3MTY3ODgzMzk5MjRFLTQzLDEuNTQwOTU4MTg0NzIzNzI0MkUtNDMsMS45NDk3NjE0NDUzMzY2OTg0RS00MywxLjk4MTExMzAwODkzODI5NUUtNDMsMi4zOTk0ODM4OTIzOTk0MTU3RS00MywyLjM1NTkwNDQ2MzY1NDY4ODVFLTQzLDEuMTk2ODQxNzcwMzA4MTE4M0UtNDMsOTY2Mi4wLDIuMTYxOTIxMzUxOTMwMTI0RS00MywyLjM2ODg4OTMxNzkwOTc3NzVFLTQzLDUuMjM4OTU2Njg3NDMxMDk0RS00NCwyLjIxNDkyMDE5Nzg0MDkwNUUtNDQsOS41MzYzODI3ODc1NjcxOTdFLTQ0LDUuNzM2MzExODMxMzM4OTY5RS00MywzLjA0NjYwMDcyMjk1MzAzMUUtNDMsNS4wMjMzOTA0MDkxMjAzNTVFLTI5LDEuOTY4NDk5MDExMzQ5NzU0RS00MywxLjA4MjExNjUwNTUwNzk4MzVFLTQzLDIuOTEwMDYxNTIzMzkzNjI2NUUtNDQsMy41NDk0MTUwNDEyMzE5ODA2RS00MywzLjQyNDQ5MDkyNTQ3MTk4MkUtNDMsNC41MDU2NzgyNjAwNTM1MDE2RS00MywyNDM3ODYuMCw0NDM5NzQuMCw3OTUxMzcuMCw4NDU0NzQuMCwyLjk3MjEwMjAzNDE2NjAxMjNFLTQzLDMuMzIwODAwNTc5NDQyNjc3RS00MywyNzI4OTUuMCwyLjIyNzM1MjQ0OTkzNjc2ODZFLTQzLDguMjkyNTE5MDQwNzY5Nzc0RS00NCwzLjAzNTYzMDAzMjMzNTI4OTZFLTQzLDI0MzQ2MC4wLDgwNDg3NC4wLDEuNjc3NDgyMDc2OTg3MDExM0UtNDMsNDk3NTA2LjAsNTYxMzI2LjAsNzc2NjAwLjAsMjQ2NTkyNS4wLDMwMDI5NzQuMCwxMjkzNDY1LjAsMy4zMzU3OTEzOTY2OTI5MjFFLTI5LDEzMzczODYuMCw4OTY1MC4wLDQxMTk5NC4wLDE5MzkwOTYuMCw1OTgwNzYuMCw0MzI0MDMuMCw3Mjk4NDUuMCwzNDI4MjIuMCw2Mjg3OTMuMCwyMzk2MjMuMCwzLjgzMjUwMTk5NTMwODYzODRFLTM5LDIuNTY1Nzg2NDUwNjk2NzU5M0UtNDIsMy43NDExNzYxNzA5MDQwNTc0RS00NCwxLjAyMzc4OTk3Njk4NTc0NjZFLTQzLDQuMDc3NjM0NDkyNDk0NDY3RS00NCw1LjMzNjEyMzU4MzY3OTA5NEUtNDQsMi4wOTQzNjQ3NTA2MzkyNzM3RS00NCwyLjU2OTkxNDU4NjUxMDYyMzZFLTI2CiszMCxXZWQgMjMgRmViIDExLDkuNTcwNzE1MTk5MTY2NzM0RS00NCwxLjA2MDU0NTEzOTA2MzY4MzVFLTQzLDEuMTQ3MDkyMDE3MjY1MjA4NUUtNDMsNC4zNjI5MTE0MTMwMDExNjZFLTQzLDEuNTc1MzkxMjQwMTcxMTAxNUUtNDMsMS4wNjAyNjI3MTg5NDYxMDk2RS00MywyLjE2OTYwMjAyMDY1OTI5NTRFLTQzLDgzOTg0LjAsNS43MTI3MDIyOTY0ODgxMjJFLTQwLDQuNzA3NjM4MDQ1MjQ2NDUyRS00Myw3LjAzNjk0NzM5MTUwNTA1NEUtNDIsMy4yMTM5NDIzMzQzMTIxOEUtNDMsOC45OTMwMzMxMzUyODA0ODJFLTMyLDIuNDEzNjE1MjM0MzgxNzNFLTQzLDMuNTQ5MDgzMDM3MTIzODAxM0UtNDMsMS4zMTE5MDYzMjQxOTM4MjUzRS00MywxLjY2NjM4NTUyMzc4NTcyNzRFLTQzLDEuNzA5NDM5MzAwOTQ0OTMyN0UtNDMsMi4wODU2OTExNjk5MzQ2OTc3RS00MywyLjA1ODg3NzM0ODU1NTMyNTJFLTQzLDEuMDUwMzE5NTYxMjkxMTZFLTQzLDk2NjIuMCwyLjAwNzIwODM1MDEzNTkzN0UtNDMsMi4yNzYzOTUzMTEwMDg5MzEyRS00Myw1LjA0OTA2MDMyMDQ1NzE2RS00NCwyLjEzOTAzMTE3Nzc0NTMzOEUtNDQsOS4xNzYwOTIwNjk1NjY1MDZFLTQ0LDUuNTk5ODY2MzAyNDg4NTM3RS00MywyLjk1MDA4MzY0ODExODIyNDZFLTQzLDQuOTcwNjc5MjgxNDU4NDc4NUUtMjksMS44OTU2MDc4MzQ0MzI5ODEzRS00MywxLjAzOTk2MjAwMDcwNTIxOUUtNDMsMi44MjU2ODE1NDU4ODkwNDg2RS00NCwzLjQyOTk2Nzk0Njk5MjM2OThFLTQzLDMuMzQzNTg5NTIyODgzOTgyNEUtNDMsNC4zOTc2Nzk0NzA3NjI2MTY1RS00MywyNDM3ODYuMCw0NDM5NzQuMCw3OTUxMzcuMCw4NDU0NzQuMCwyLjg5NjM2MzAwMTA3NDQ4OEUtNDMsMy4yNDAwODcwMzEyNTYwOTk4RS00MywyNzI4OTUuMCwyLjA1MTA0ODA1MjY4NzAyODNFLTQzLDcuOTQxNzgwODY3MjMwMTk2RS00NCwyLjg5MTU1OTkyNDU4Mjc0OTZFLTQzLDI0MzQ2MC4wLDgwNDg3NC4wLDEuNDc2NDAzMTk4MzI2OTE0NEUtNDMsNDk3NTA2LjAsNTYxMzI2LjAsNzc2NjAwLjAsMjQ2NTkyNS4wLDMwMDI5NzQuMCwxMjkzNDY1LjAsMy41NjQyMDcyOTc0MTk1NTMzRS0yOSwxMzM3Mzg2LjAsODk2NTAuMCw0MTE5OTQuMCwxOTM5MDk2LjAsNTk4MDc2LjAsNDMyNDAzLjAsNzI5ODQ1LjAsMzQyODIyLjAsNjI4NzkzLjAsMjM5NjIzLjAsMi43MTcwNTgxMDUyNTQ2NDU3RS0zOSwyLjA4NTQ0Mzk4NzgzNDc5MjVFLTQyLDMuNTAzMTc3MzU1OTcxMTYzN0UtNDQsOS43NTAxMDIyMDA1MzY4NDVFLTQ0LDMuOTA2NDE3MzczNTY1MzU5RS00NCw1LjAwODE5MzE4MDQxNDU5NEUtNDQsMS45ODUxNjgyNzQwNDMyODU1RS00NCwyLjUxMjg1ODcxODU5MTc4OUUtMjYKKzMxLFRodSAyNCBGZWIgMTEsOS4xMDQ5MzgxOTYzNzM0NDdFLTQ0LDEuMDE3NDU1MjU2NzY5NzM0OUUtNDMsMS4xMDE5NDI4ODU0NTU5MzM4RS00Myw0LjE4ODA0NjIxMjgxMTUyRS00MywxLjM5NjY2NzQ3NDc4MjExMjZFLTQzLDkuNTYyMDk0MzY0MTk4MTI5RS00NCwxLjk5MTE3OTk4MzI1ODk4MzVFLTQzLDgzOTg0LjAsNC41MjA3NTY3MjcyMTgwMjNFLTQwLDQuMTQwNjg2ODc0Mjc3MTg1RS00Myw1Ljg0MTE3NjM0NzgyODc5NUUtNDIsMi45MzM1NDg5ODY2OTI4NDY4RS00Myw5Ljk2NTQyMDc4NjE1OTc0RS0zMiwyLjExMzE2Njc3NDkyODc2OTZFLTQzLDMuMjM2OTE2MDc1OTIzMzAxRS00MywxLjE3MTEzMzc4NjI4MDMyRS00MywxLjQ5MTY2Nzg1OTM2MDI3MjhFLTQzLDEuNTQwNjM0NTU5MzA4NDA4NUUtNDMsMS44ODk1NTQ1NTk0NDY0MTdFLTQzLDEuODcyNDA1MjM0NTc5MDU4NEUtNDMsOS41ODAyMjQzODUyODk2NUUtNDQsOTY2Mi4wLDEuOTA1Mjk5MTMwODU3NzMxN0UtNDMsMi4yMTM4NjM5MjQxMjIzODM0RS00Myw0LjkyMDQwMjE1MjQ0MDM0N0UtNDQsMi4wODc1MzkwNjIxMDA4Mjg5RS00NCw4LjkzMjI4MjY3MDUwMzUzOUUtNDQsNS41MDY1OTE5MzIzNjY5NThFLTQzLDIuODg0NDc0MTQyNzEzNTQyRS00Myw0Ljk1NDQ5NjUwNDY3NjQyNkUtMjksMS44NDYyNTQ0MjM0MzY3OTRFLTQzLDEuMDExNDYxMTYwMTY3NTQxNUUtNDMsMi43NjgyMDc3MTgzMjY2MjFFLTQ0LDMuMzQ4ODg5MzEzNTQ1NjcxRS00MywzLjI4ODI3OTg2NTAyNjc2MkUtNDMsNC4zMjM4NjI3MjE1MDI5NkUtNDMsMjQzNzg2LjAsNDQzOTc0LjAsNzk1MTM3LjAsODQ1NDc0LjAsMi44NDQ2NTExMzM2ODQ0NTJFLTQzLDMuMTg0OTI4NjA5MjgwMDk5NUUtNDMsMjcyODk1LjAsMS45MzU2NTcxNzAwOTg0MzUzRS00Myw3LjcwNTI0NzgyMjAwNTUyN0UtNDQsMi43OTQ3ODg3MDA1OTM5MDU4RS00MywyNDM0NjAuMCw4MDQ4NzQuMCwxLjM0OTQ0NjU2MDI5NDQwNzNFLTQzLDQ5NzUwNi4wLDU2MTMyNi4wLDc3NjYwMC4wLDI0NjU5MjUuMCwzMDAyOTc0LjAsMTI5MzQ2NS4wLDMuODE5NjgyNzUyMTQ5MDEyRS0yOSwxMzM3Mzg2LjAsODk2NTAuMCw0MTE5OTQuMCwxOTM5MDk2LjAsNTk4MDc2LjAsNDMyNDAzLjAsNzI5ODQ1LjAsMzQyODIyLjAsNjI4NzkzLjAsMjM5NjIzLjAsMi4xMjgzNjgyOTA3NjQ0Mzg4RS0zOSwxLjgwMTI1NDYzMTUyMjExMDhFLTQyLDMuMzQ1MzcyMDgxMTE1Mzk4RS00NCw5LjQyMjQ4NDI5NjU0MTczN0UtNDQsMy43OTA5MjI4NDAyNDA5MDU3RS00NCw0Ljc5MDM3MDE3Nzc3NjIwMUUtNDQsMS45MTIwODc2OTI1OTIzNThFLTQ0LDIuNDczNjg0MDM5NzQ5MjA2RS0yNgorMzIsRnJpIDI1IEZlYiAxMSw4Ljc5MjM3NjMwOTE3MjQ1RS00NCw5Ljg4MzU4NzkyMDQwNzk3MUUtNDQsMS4wNzE0MjY3MzQ1OTEyNEUtNDMsNC4wNjk5MTk5NDM0NTkwMDhFLTQzLDEuMjgzMTYyMDU0OTQ4MzY0NEUtNDMsOC44OTIxNDEyMjM0Mzc1MjZFLTQ0LDEuODc0NzA1MTI4NzM5MzcxNkUtNDMsODM5ODQuMCwzLjgzMDk5MTU1NDM2NjcyRS00MCwzLjc4MjkxMzAwNTgzMDQ0MjRFLTQzLDUuMTIxMzQzNTk4NDg0MTA3RS00MiwyLjc1MTI5OTQwNDU0NzU0N0UtNDMsMS4xMDE5MzExOTYyNzczNDI3RS0zMSwxLjkyNDI3MjQ3OTA3MTgxMzhFLTQzLDMuMDM0MTM5OTU0NTQ5MDEwN0UtNDMsMS4wODEyMzYyOTg2MDk4MzZFLTQzLDEuMzc5ODQzMzQ5NzgyNjU4NUUtNDMsMS40MzIwMTA5MzI4NjczMTgyRS00MywxLjc2MjgyMTM4NTQ5MjE0N0UtNDMsMS43NTE1NDkzNjcxNjkxMThFLTQzLDguOTgwNjI1Nzg4NDQxMzU4RS00NCw5NjYyLjAsMS44MzcwMjUzNTE5ODI4MzIzRS00MywyLjE3MTIyODg3MzgzODI4NjZFLTQzLDQuODMyNTU0MTc2OTE0ODNFLTQ0LDIuMDUyMzQ1ODk4MjcyNzk0NkUtNDQsOC43NjU5NDQyMDI5NzUxOEUtNDQsNS40NDI1MzIwNTUzODY0OUUtNDMsMi44Mzk1Nzg0MzYxODY0NzY3RS00Myw0Ljk2MzM1NDczMjcwMDkzNDZFLTI5LDEuODEyNTcwNTkyMTUwNTIxRS00Myw5LjkyMDI3ODk3NTg3NDcyRS00NCwyLjcyODgyNzE5MTU2MjU5RS00NCwzLjI5MzQ2MTM3MzYyNjQxNDRFLTQzLDMuMjUwMjkxNjAzMDI3NzU5NEUtNDMsNC4yNzMxNzE2NDA0NDQwNzVFLTQzLDI0Mzc4Ni4wLDQ0Mzk3NC4wLDc5NTEzNy4wLDg0NTQ3NC4wLDIuODA5MTY0NTI5MzIzOTM1N0UtNDMsMy4xNDcwNTM0OTcwNDM5NDI3RS00MywyNzI4OTUuMCwxLjg1ODY4ODg5MjgzMzQ5NjZFLTQzLDcuNTQ0MjQwODY4MjA3MjYyRS00NCwyLjcyOTA5MjkyNjA4MTE2MzRFLTQzLDI0MzQ2MC4wLDgwNDg3NC4wLDEuMjY2ODM4NTA2MjkzMjQ3OEUtNDMsNDk3NTA2LjAsNTYxMzI2LjAsNzc2NjAwLjAsMjQ2NTkyNS4wLDMwMDI5NzQuMCwxMjkzNDY1LjAsNC4wOTYyNzE0MzUxMTk1NjdFLTI5LDEzMzczODYuMCw4OTY1MC4wLDQxMTk5NC4wLDE5MzkwOTYuMCw1OTgwNzYuMCw0MzI0MDMuMCw3Mjk4NDUuMCwzNDI4MjIuMCw2Mjg3OTMuMCwyMzk2MjMuMCwxLjc5MDU3MDYwOTQ5MTI3RS0zOSwxLjYyNDUzMjg4NzE0MzUyRS00MiwzLjIzOTE3NTM3NDM1MTc2NkUtNDQsOS4yMDAwODUwNTgzMTk5MTVFLTQ0LDMuNzEyMjkzMzY4MTAzNzgxRS00NCw0LjY0MzYwNTUwMTQ2OTgzMkUtNDQsMS44NjI1OTU1Njk3MjQ4NTU2RS00NCwyLjQ0NjYzNDc3NjgwNjQ5NjRFLTI2CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNFSVJfUktfUmVmZXJlbmNlL1Rlc3RTRUlSL3J1bnBhcmFtZXRlcnMuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTRUlSX1JLX1JlZmVyZW5jZS9UZXN0U0VJUi9ydW5wYXJhbWV0ZXJzLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ODEzMjEyCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTRUlSX1JLX1JlZmVyZW5jZS9UZXN0U0VJUi9ydW5wYXJhbWV0ZXJzLmNzdgpAQCAtMCwwICsxLDIgQEAKK2Rpc2Vhc2VOYW1lLHBvcHVsYXRpb25JZGVudGlmaWVyLHRpbWVQZXJpb2QsZnJlcXVlbmN5RGVwZW5kZW50LHJlZmVyZW5jZVBvcHVsYXRpb25EZW5zaXR5LHJvYWROZXR3b3JrSW5mZWN0aW91c1Byb3BvcnRpb24sY2hhcmFjdGVyaXN0aWNNaXhpbmdEaXN0YW5jZSx0cmFuc21pc3Npb25SYXRlLG5vbkxpbmVhcml0eUNvZWZmaWNpZW50LHJlY292ZXJ5UmF0ZSxpbmZlY3Rpb3VzTW9ydGFsaXR5UmF0ZSxpbW11bml0eUxvc3NSYXRlLGluY3ViYXRpb25SYXRlCitUZXN0U0VJUixodW1hbiw4NjQwMDAwMCx0cnVlLDEwMC4wLDAuMDEsMi4yNSw0NS4wLDEuMCwwLjQsMC4wLDAuMCwwLjQKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNFSVJfUktfUmVmZXJlbmNlL2F1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwvaHVtYW4vQmlydGhzXzAuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTRUlSX1JLX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL2h1bWFuL0JpcnRoc18wLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YjEzOTBjCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTRUlSX1JLX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL2h1bWFuL0JpcnRoc18wLmNzdgpAQCAtMCwwICsxLDMzIEBACitpdGVyYXRpb24sdGltZSxzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9ub2RlL3RyYW5zcG9ydC9waXBlL1BITAorMSxUdWUgMjUgSmFuIDExLDAuMAorMixXZWQgMjYgSmFuIDExLDAuMAorMyxUaHUgMjcgSmFuIDExLDAuMAorNCxGcmkgMjggSmFuIDExLDAuMAorNSxTYXQgMjkgSmFuIDExLDAuMAorNixTdW4gMzAgSmFuIDExLDAuMAorNyxNb24gMzEgSmFuIDExLDAuMAorOCxUdWUgMSBGZWIgMTEsMC4wCis5LFdlZCAyIEZlYiAxMSwwLjAKKzEwLFRodSAzIEZlYiAxMSwwLjAKKzExLEZyaSA0IEZlYiAxMSwwLjAKKzEyLFNhdCA1IEZlYiAxMSwwLjAKKzEzLFN1biA2IEZlYiAxMSwwLjAKKzE0LE1vbiA3IEZlYiAxMSwwLjAKKzE1LFR1ZSA4IEZlYiAxMSwwLjAKKzE2LFdlZCA5IEZlYiAxMSwwLjAKKzE3LFRodSAxMCBGZWIgMTEsMC4wCisxOCxGcmkgMTEgRmViIDExLDAuMAorMTksU2F0IDEyIEZlYiAxMSwwLjAKKzIwLFN1biAxMyBGZWIgMTEsMC4wCisyMSxNb24gMTQgRmViIDExLDAuMAorMjIsVHVlIDE1IEZlYiAxMSwwLjAKKzIzLFdlZCAxNiBGZWIgMTEsMC4wCisyNCxUaHUgMTcgRmViIDExLDAuMAorMjUsRnJpIDE4IEZlYiAxMSwwLjAKKzI2LFNhdCAxOSBGZWIgMTEsMC4wCisyNyxTdW4gMjAgRmViIDExLDAuMAorMjgsTW9uIDIxIEZlYiAxMSwwLjAKKzI5LFR1ZSAyMiBGZWIgMTEsMC4wCiszMCxXZWQgMjMgRmViIDExLDAuMAorMzEsVGh1IDI0IEZlYiAxMSwwLjAKKzMyLEZyaSAyNSBGZWIgMTEsMC4wCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNFSVJfUktfUmVmZXJlbmNlL2F1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwvaHVtYW4vQmlydGhzXzEuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTRUlSX1JLX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL2h1bWFuL0JpcnRoc18xLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NGMwMjMyCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTRUlSX1JLX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL2h1bWFuL0JpcnRoc18xLmNzdgpAQCAtMCwwICsxLDMzIEBACitpdGVyYXRpb24sdGltZSxzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9ub2RlL3RyYW5zcG9ydC9waXBlL1BILTExLHN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL25vZGUvdHJhbnNwb3J0L3BpcGUvUEgtMyxzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9ub2RlL3RyYW5zcG9ydC9waXBlL1BILTcsc3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vbm9kZS90cmFuc3BvcnQvcGlwZS9QSC1OQ1IKKzEsVHVlIDI1IEphbiAxMSwwLjAsMC4wLDAuMCwwLjAKKzIsV2VkIDI2IEphbiAxMSwwLjAsMC4wLDAuMCwwLjAKKzMsVGh1IDI3IEphbiAxMSwwLjAsMC4wLDAuMCwwLjAKKzQsRnJpIDI4IEphbiAxMSwwLjAsMC4wLDAuMCwwLjAKKzUsU2F0IDI5IEphbiAxMSwwLjAsMC4wLDAuMCwwLjAKKzYsU3VuIDMwIEphbiAxMSwwLjAsMC4wLDAuMCwwLjAKKzcsTW9uIDMxIEphbiAxMSwwLjAsMC4wLDAuMCwwLjAKKzgsVHVlIDEgRmViIDExLDAuMCwwLjAsMC4wLDAuMAorOSxXZWQgMiBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wCisxMCxUaHUgMyBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wCisxMSxGcmkgNCBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wCisxMixTYXQgNSBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wCisxMyxTdW4gNiBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wCisxNCxNb24gNyBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wCisxNSxUdWUgOCBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wCisxNixXZWQgOSBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wCisxNyxUaHUgMTAgRmViIDExLDAuMCwwLjAsMC4wLDAuMAorMTgsRnJpIDExIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAKKzE5LFNhdCAxMiBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wCisyMCxTdW4gMTMgRmViIDExLDAuMCwwLjAsMC4wLDAuMAorMjEsTW9uIDE0IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAKKzIyLFR1ZSAxNSBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wCisyMyxXZWQgMTYgRmViIDExLDAuMCwwLjAsMC4wLDAuMAorMjQsVGh1IDE3IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAKKzI1LEZyaSAxOCBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wCisyNixTYXQgMTkgRmViIDExLDAuMCwwLjAsMC4wLDAuMAorMjcsU3VuIDIwIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAKKzI4LE1vbiAyMSBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wCisyOSxUdWUgMjIgRmViIDExLDAuMCwwLjAsMC4wLDAuMAorMzAsV2VkIDIzIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAKKzMxLFRodSAyNCBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wCiszMixGcmkgMjUgRmViIDExLDAuMCwwLjAsMC4wLDAuMApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTRUlSX1JLX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL2h1bWFuL0JpcnRoc18yLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0VJUl9SS19SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9odW1hbi9CaXJ0aHNfMi5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTMwZDZlMQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0VJUl9SS19SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9odW1hbi9CaXJ0aHNfMi5jc3YKQEAgLTAsMCArMSwzMyBAQAoraXRlcmF0aW9uLHRpbWUsUEgtMS1HNjQwMDAxLFBILTEtRzY0MDAwMixQSC0xLUc2NDAwMDMsUEgtMS1HNjQwMDA0LFBILTEwLUc2NTAwMDEsUEgtMTAtRzY1MDAwMixQSC0xMC1HNjUwMDAzLFBILTEwLUc2NTAwMDQsUEgtMTAtRzY1MDAwNSxQSC0xMC1HNjUwMDA2LFBILTEwLUc2NTAwMDcsUEgtMTEtRzY2MDAwMSxQSC0xMS1HNjYwMDAyLFBILTExLUc2NjAwMDMsUEgtMTEtRzY2MDAwNCxQSC0xMS1HNjYwMDA1LFBILTEyLUc2NzAwMDEsUEgtMTItRzY3MDAwMixQSC0xMi1HNjcwMDAzLFBILTEyLUc2NzAwMDQsUEgtMTItRzY3MDAwNSxQSC0yLUc2ODAwMDEsUEgtMi1HNjgwMDAyLFBILTItRzY4MDAwMyxQSC0yLUc2ODAwMDQsUEgtMi1HNjgwMDA1LFBILTMtRzY5MDAwMSxQSC0zLUc2OTAwMDIsUEgtMy1HNjkwMDAzLFBILTMtRzY5MDAwNCxQSC0zLUc2OTAwMDUsUEgtMy1HNjkwMDA2LFBILTQtRzcwMDAwMSxQSC00LUc3MDAwMDIsUEgtNC1HNzAwMDAzLFBILTQtRzcwMDAwNCxQSC00LUc3MDAwMDUsUEgtNC1HNzAwMDA2LFBILTQtRzcwMDAwNyxQSC00LUc3MDAwMDgsUEgtNC1HNzAwMDA5LFBILTQtRzcwMDAxMCxQSC00LUc3MDAwMTEsUEgtNS1HNzEwMDAxLFBILTUtRzcxMDAwMixQSC01LUc3MTAwMDMsUEgtNS1HNzEwMDA0LFBILTUtRzcxMDAwNSxQSC01LUc3MTAwMDYsUEgtNi1HNzIwMDAxLFBILTYtRzcyMDAwMixQSC02LUc3MjAwMDMsUEgtNi1HNzIwMDA0LFBILTYtRzcyMDAwNSxQSC03LUc3MzAwMDEsUEgtNy1HNzMwMDAyLFBILTctRzczMDAwMyxQSC03LUc3MzAwMDQsUEgtOC1HNzQwMDAxLFBILTgtRzc0MDAwMixQSC04LUc3NDAwMDMsUEgtOC1HNzQwMDA0LFBILTgtRzc0MDAwNSxQSC05LUc3NTAwMDEsUEgtOS1HNzUwMDAyLFBILTktRzc1MDAwMyxQSC05LUc3NTAwMDQsUEgtOS1HNzUwMDA1LFBILUNBUi1HMjMwMDAxLFBILUNBUi1HMjMwMDAyLFBILUNBUi1HMjMwMDAzLFBILUNBUi1HMjMwMDA0LFBILUNBUi1HMjMwMDA1LFBILU5DUi1HNTIwMDAxCisxLFR1ZSAyNSBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMixXZWQgMjYgSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzMsVGh1IDI3IEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCis0LEZyaSAyOCBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorNSxTYXQgMjkgSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzYsU3VuIDMwIEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCis3LE1vbiAzMSBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorOCxUdWUgMSBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorOSxXZWQgMiBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTAsVGh1IDMgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzExLEZyaSA0IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxMixTYXQgNSBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTMsU3VuIDYgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzE0LE1vbiA3IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxNSxUdWUgOCBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTYsV2VkIDkgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzE3LFRodSAxMCBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTgsRnJpIDExIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxOSxTYXQgMTIgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzIwLFN1biAxMyBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjEsTW9uIDE0IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyMixUdWUgMTUgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzIzLFdlZCAxNiBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjQsVGh1IDE3IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyNSxGcmkgMTggRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzI2LFNhdCAxOSBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjcsU3VuIDIwIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyOCxNb24gMjEgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzI5LFR1ZSAyMiBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMzAsV2VkIDIzIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCiszMSxUaHUgMjQgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzMyLEZyaSAyNSBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTRUlSX1JLX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL2h1bWFuL0NvdW50XzAuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTRUlSX1JLX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL2h1bWFuL0NvdW50XzAuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZlMDUwOTYKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNFSVJfUktfUmVmZXJlbmNlL2F1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwvaHVtYW4vQ291bnRfMC5jc3YKQEAgLTAsMCArMSwzMyBAQAoraXRlcmF0aW9uLHRpbWUsc3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vbm9kZS90cmFuc3BvcnQvcGlwZS9QSEwKKzEsVHVlIDI1IEphbiAxMSw0NzkzMi41NDc5NDUyMDU0ODYKKzIsV2VkIDI2IEphbiAxMSw0NzkzMi41NDc5NDUyMDU0ODYKKzMsVGh1IDI3IEphbiAxMSw0NzkzMi41NDc5NDUyMDU0ODYKKzQsRnJpIDI4IEphbiAxMSw0NzkzMi41NDc5NDUyMDU0ODYKKzUsU2F0IDI5IEphbiAxMSw0NzkzMi41NDc5NDUyMDU0ODYKKzYsU3VuIDMwIEphbiAxMSw0NzkzMi41NDc5NDUyMDU0ODYKKzcsTW9uIDMxIEphbiAxMSw0NzkzMi41NDc5NDUyMDU0ODYKKzgsVHVlIDEgRmViIDExLDQ3OTMyLjU0Nzk0NTIwNTQ4NgorOSxXZWQgMiBGZWIgMTEsNDc5MzIuNTQ3OTQ1MjA1NDg2CisxMCxUaHUgMyBGZWIgMTEsNDc5MzIuNTQ3OTQ1MjA1NDg2CisxMSxGcmkgNCBGZWIgMTEsNDc5MzIuNTQ3OTQ1MjA1NDg2CisxMixTYXQgNSBGZWIgMTEsNDc5MzIuNTQ3OTQ1MjA1NDg2CisxMyxTdW4gNiBGZWIgMTEsNDc5MzIuNTQ3OTQ1MjA1NDg2CisxNCxNb24gNyBGZWIgMTEsNDc5MzIuNTQ3OTQ1MjA1NDg2CisxNSxUdWUgOCBGZWIgMTEsNDc5MzIuNTQ3OTQ1MjA1NDg2CisxNixXZWQgOSBGZWIgMTEsNDc5MzIuNTQ3OTQ1MjA1NDg2CisxNyxUaHUgMTAgRmViIDExLDQ3OTMyLjU0Nzk0NTIwNTQ4NgorMTgsRnJpIDExIEZlYiAxMSw0NzkzMi41NDc5NDUyMDU0ODYKKzE5LFNhdCAxMiBGZWIgMTEsNDc5MzIuNTQ3OTQ1MjA1NDg2CisyMCxTdW4gMTMgRmViIDExLDQ3OTMyLjU0Nzk0NTIwNTQ4NgorMjEsTW9uIDE0IEZlYiAxMSw0NzkzMi41NDc5NDUyMDU0ODYKKzIyLFR1ZSAxNSBGZWIgMTEsNDc5MzIuNTQ3OTQ1MjA1NDg2CisyMyxXZWQgMTYgRmViIDExLDQ3OTMyLjU0Nzk0NTIwNTQ4NgorMjQsVGh1IDE3IEZlYiAxMSw0NzkzMi41NDc5NDUyMDU0ODYKKzI1LEZyaSAxOCBGZWIgMTEsNDc5MzIuNTQ3OTQ1MjA1NDg2CisyNixTYXQgMTkgRmViIDExLDQ3OTMyLjU0Nzk0NTIwNTQ4NgorMjcsU3VuIDIwIEZlYiAxMSw0NzkzMi41NDc5NDUyMDU0ODYKKzI4LE1vbiAyMSBGZWIgMTEsNDc5MzIuNTQ3OTQ1MjA1NDg2CisyOSxUdWUgMjIgRmViIDExLDQ3OTMyLjU0Nzk0NTIwNTQ4NgorMzAsV2VkIDIzIEZlYiAxMSw0NzkzMi41NDc5NDUyMDU0ODYKKzMxLFRodSAyNCBGZWIgMTEsNDc5MzIuNTQ3OTQ1MjA1NDg2CiszMixGcmkgMjUgRmViIDExLDQ3OTMyLjU0Nzk0NTIwNTQ4NgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTRUlSX1JLX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL2h1bWFuL0NvdW50XzEuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTRUlSX1JLX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL2h1bWFuL0NvdW50XzEuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUzY2U4YTQKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNFSVJfUktfUmVmZXJlbmNlL2F1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwvaHVtYW4vQ291bnRfMS5jc3YKQEAgLTAsMCArMSwzMyBAQAoraXRlcmF0aW9uLHRpbWUsc3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vbm9kZS90cmFuc3BvcnQvcGlwZS9QSC0xMSxzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9ub2RlL3RyYW5zcG9ydC9waXBlL1BILTMsc3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vbm9kZS90cmFuc3BvcnQvcGlwZS9QSC03LHN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL25vZGUvdHJhbnNwb3J0L3BpcGUvUEgtTkNSCisxLFR1ZSAyNSBKYW4gMTEsMjguOTk0NTIwNTQ3OTQ1MjA3LDE0MTIuOTQyNDY1NzUzNDI0Niw3MzU3Ljg0MzgzNTYxNjQzOSw0MDg1My44MjE5MTc4MDgyMgorMixXZWQgMjYgSmFuIDExLDI4Ljk5NDUyMDU0Nzk0NTIwNywxNDEyLjk0MjQ2NTc1MzQyNDYsNzM1Ny44NDM4MzU2MTY0MzksNDA4NTMuODIxOTE3ODA4MjIKKzMsVGh1IDI3IEphbiAxMSwyOC45OTQ1MjA1NDc5NDUyMDcsMTQxMi45NDI0NjU3NTM0MjQ2LDczNTcuODQzODM1NjE2NDM5LDQwODUzLjgyMTkxNzgwODIyCis0LEZyaSAyOCBKYW4gMTEsMjguOTk0NTIwNTQ3OTQ1MjA3LDE0MTIuOTQyNDY1NzUzNDI0Niw3MzU3Ljg0MzgzNTYxNjQzOSw0MDg1My44MjE5MTc4MDgyMgorNSxTYXQgMjkgSmFuIDExLDI4Ljk5NDUyMDU0Nzk0NTIwNywxNDEyLjk0MjQ2NTc1MzQyNDYsNzM1Ny44NDM4MzU2MTY0MzksNDA4NTMuODIxOTE3ODA4MjIKKzYsU3VuIDMwIEphbiAxMSwyOC45OTQ1MjA1NDc5NDUyMDcsMTQxMi45NDI0NjU3NTM0MjQ2LDczNTcuODQzODM1NjE2NDM5LDQwODUzLjgyMTkxNzgwODIyCis3LE1vbiAzMSBKYW4gMTEsMjguOTk0NTIwNTQ3OTQ1MjA3LDE0MTIuOTQyNDY1NzUzNDI0Niw3MzU3Ljg0MzgzNTYxNjQzOSw0MDg1My44MjE5MTc4MDgyMgorOCxUdWUgMSBGZWIgMTEsMjguOTk0NTIwNTQ3OTQ1MjA3LDE0MTIuOTQyNDY1NzUzNDI0Niw3MzU3Ljg0MzgzNTYxNjQzOSw0MDg1My44MjE5MTc4MDgyMgorOSxXZWQgMiBGZWIgMTEsMjguOTk0NTIwNTQ3OTQ1MjA3LDE0MTIuOTQyNDY1NzUzNDI0Niw3MzU3Ljg0MzgzNTYxNjQzOSw0MDg1My44MjE5MTc4MDgyMgorMTAsVGh1IDMgRmViIDExLDI4Ljk5NDUyMDU0Nzk0NTIwNywxNDEyLjk0MjQ2NTc1MzQyNDYsNzM1Ny44NDM4MzU2MTY0MzksNDA4NTMuODIxOTE3ODA4MjIKKzExLEZyaSA0IEZlYiAxMSwyOC45OTQ1MjA1NDc5NDUyMDcsMTQxMi45NDI0NjU3NTM0MjQ2LDczNTcuODQzODM1NjE2NDM5LDQwODUzLjgyMTkxNzgwODIyCisxMixTYXQgNSBGZWIgMTEsMjguOTk0NTIwNTQ3OTQ1MjA3LDE0MTIuOTQyNDY1NzUzNDI0Niw3MzU3Ljg0MzgzNTYxNjQzOSw0MDg1My44MjE5MTc4MDgyMgorMTMsU3VuIDYgRmViIDExLDI4Ljk5NDUyMDU0Nzk0NTIwNywxNDEyLjk0MjQ2NTc1MzQyNDYsNzM1Ny44NDM4MzU2MTY0MzksNDA4NTMuODIxOTE3ODA4MjIKKzE0LE1vbiA3IEZlYiAxMSwyOC45OTQ1MjA1NDc5NDUyMDcsMTQxMi45NDI0NjU3NTM0MjQ2LDczNTcuODQzODM1NjE2NDM5LDQwODUzLjgyMTkxNzgwODIyCisxNSxUdWUgOCBGZWIgMTEsMjguOTk0NTIwNTQ3OTQ1MjA3LDE0MTIuOTQyNDY1NzUzNDI0Niw3MzU3Ljg0MzgzNTYxNjQzOSw0MDg1My44MjE5MTc4MDgyMgorMTYsV2VkIDkgRmViIDExLDI4Ljk5NDUyMDU0Nzk0NTIwNywxNDEyLjk0MjQ2NTc1MzQyNDYsNzM1Ny44NDM4MzU2MTY0MzksNDA4NTMuODIxOTE3ODA4MjIKKzE3LFRodSAxMCBGZWIgMTEsMjguOTk0NTIwNTQ3OTQ1MjA3LDE0MTIuOTQyNDY1NzUzNDI0Niw3MzU3Ljg0MzgzNTYxNjQzOSw0MDg1My44MjE5MTc4MDgyMgorMTgsRnJpIDExIEZlYiAxMSwyOC45OTQ1MjA1NDc5NDUyMDcsMTQxMi45NDI0NjU3NTM0MjQ2LDczNTcuODQzODM1NjE2NDM5LDQwODUzLjgyMTkxNzgwODIyCisxOSxTYXQgMTIgRmViIDExLDI4Ljk5NDUyMDU0Nzk0NTIwNywxNDEyLjk0MjQ2NTc1MzQyNDYsNzM1Ny44NDM4MzU2MTY0MzksNDA4NTMuODIxOTE3ODA4MjIKKzIwLFN1biAxMyBGZWIgMTEsMjguOTk0NTIwNTQ3OTQ1MjA3LDE0MTIuOTQyNDY1NzUzNDI0Niw3MzU3Ljg0MzgzNTYxNjQzOSw0MDg1My44MjE5MTc4MDgyMgorMjEsTW9uIDE0IEZlYiAxMSwyOC45OTQ1MjA1NDc5NDUyMDcsMTQxMi45NDI0NjU3NTM0MjQ2LDczNTcuODQzODM1NjE2NDM5LDQwODUzLjgyMTkxNzgwODIyCisyMixUdWUgMTUgRmViIDExLDI4Ljk5NDUyMDU0Nzk0NTIwNywxNDEyLjk0MjQ2NTc1MzQyNDYsNzM1Ny44NDM4MzU2MTY0MzksNDA4NTMuODIxOTE3ODA4MjIKKzIzLFdlZCAxNiBGZWIgMTEsMjguOTk0NTIwNTQ3OTQ1MjA3LDE0MTIuOTQyNDY1NzUzNDI0Niw3MzU3Ljg0MzgzNTYxNjQzOSw0MDg1My44MjE5MTc4MDgyMgorMjQsVGh1IDE3IEZlYiAxMSwyOC45OTQ1MjA1NDc5NDUyMDcsMTQxMi45NDI0NjU3NTM0MjQ2LDczNTcuODQzODM1NjE2NDM5LDQwODUzLjgyMTkxNzgwODIyCisyNSxGcmkgMTggRmViIDExLDI4Ljk5NDUyMDU0Nzk0NTIwNywxNDEyLjk0MjQ2NTc1MzQyNDYsNzM1Ny44NDM4MzU2MTY0MzksNDA4NTMuODIxOTE3ODA4MjIKKzI2LFNhdCAxOSBGZWIgMTEsMjguOTk0NTIwNTQ3OTQ1MjA3LDE0MTIuOTQyNDY1NzUzNDI0Niw3MzU3Ljg0MzgzNTYxNjQzOSw0MDg1My44MjE5MTc4MDgyMgorMjcsU3VuIDIwIEZlYiAxMSwyOC45OTQ1MjA1NDc5NDUyMDcsMTQxMi45NDI0NjU3NTM0MjQ2LDczNTcuODQzODM1NjE2NDM5LDQwODUzLjgyMTkxNzgwODIyCisyOCxNb24gMjEgRmViIDExLDI4Ljk5NDUyMDU0Nzk0NTIwNywxNDEyLjk0MjQ2NTc1MzQyNDYsNzM1Ny44NDM4MzU2MTY0MzksNDA4NTMuODIxOTE3ODA4MjIKKzI5LFR1ZSAyMiBGZWIgMTEsMjguOTk0NTIwNTQ3OTQ1MjA3LDE0MTIuOTQyNDY1NzUzNDI0Niw3MzU3Ljg0MzgzNTYxNjQzOSw0MDg1My44MjE5MTc4MDgyMgorMzAsV2VkIDIzIEZlYiAxMSwyOC45OTQ1MjA1NDc5NDUyMDcsMTQxMi45NDI0NjU3NTM0MjQ2LDczNTcuODQzODM1NjE2NDM5LDQwODUzLjgyMTkxNzgwODIyCiszMSxUaHUgMjQgRmViIDExLDI4Ljk5NDUyMDU0Nzk0NTIwNywxNDEyLjk0MjQ2NTc1MzQyNDYsNzM1Ny44NDM4MzU2MTY0MzksNDA4NTMuODIxOTE3ODA4MjIKKzMyLEZyaSAyNSBGZWIgMTEsMjguOTk0NTIwNTQ3OTQ1MjA3LDE0MTIuOTQyNDY1NzUzNDI0Niw3MzU3Ljg0MzgzNTYxNjQzOSw0MDg1My44MjE5MTc4MDgyMgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTRUlSX1JLX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL2h1bWFuL0NvdW50XzIuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTRUlSX1JLX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL2h1bWFuL0NvdW50XzIuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFhNWJhMWYKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNFSVJfUktfUmVmZXJlbmNlL2F1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwvaHVtYW4vQ291bnRfMi5jc3YKQEAgLTAsMCArMSwzMyBAQAoraXRlcmF0aW9uLHRpbWUsUEgtMS1HNjQwMDAxLFBILTEtRzY0MDAwMixQSC0xLUc2NDAwMDMsUEgtMS1HNjQwMDA0LFBILTEwLUc2NTAwMDEsUEgtMTAtRzY1MDAwMixQSC0xMC1HNjUwMDAzLFBILTEwLUc2NTAwMDQsUEgtMTAtRzY1MDAwNSxQSC0xMC1HNjUwMDA2LFBILTEwLUc2NTAwMDcsUEgtMTEtRzY2MDAwMSxQSC0xMS1HNjYwMDAyLFBILTExLUc2NjAwMDMsUEgtMTEtRzY2MDAwNCxQSC0xMS1HNjYwMDA1LFBILTEyLUc2NzAwMDEsUEgtMTItRzY3MDAwMixQSC0xMi1HNjcwMDAzLFBILTEyLUc2NzAwMDQsUEgtMTItRzY3MDAwNSxQSC0yLUc2ODAwMDEsUEgtMi1HNjgwMDAyLFBILTItRzY4MDAwMyxQSC0yLUc2ODAwMDQsUEgtMi1HNjgwMDA1LFBILTMtRzY5MDAwMSxQSC0zLUc2OTAwMDIsUEgtMy1HNjkwMDAzLFBILTMtRzY5MDAwNCxQSC0zLUc2OTAwMDUsUEgtMy1HNjkwMDA2LFBILTQtRzcwMDAwMSxQSC00LUc3MDAwMDIsUEgtNC1HNzAwMDAzLFBILTQtRzcwMDAwNCxQSC00LUc3MDAwMDUsUEgtNC1HNzAwMDA2LFBILTQtRzcwMDAwNyxQSC00LUc3MDAwMDgsUEgtNC1HNzAwMDA5LFBILTQtRzcwMDAxMCxQSC00LUc3MDAwMTEsUEgtNS1HNzEwMDAxLFBILTUtRzcxMDAwMixQSC01LUc3MTAwMDMsUEgtNS1HNzEwMDA0LFBILTUtRzcxMDAwNSxQSC01LUc3MTAwMDYsUEgtNi1HNzIwMDAxLFBILTYtRzcyMDAwMixQSC02LUc3MjAwMDMsUEgtNi1HNzIwMDA0LFBILTYtRzcyMDAwNSxQSC03LUc3MzAwMDEsUEgtNy1HNzMwMDAyLFBILTctRzczMDAwMyxQSC03LUc3MzAwMDQsUEgtOC1HNzQwMDAxLFBILTgtRzc0MDAwMixQSC04LUc3NDAwMDMsUEgtOC1HNzQwMDA0LFBILTgtRzc0MDAwNSxQSC05LUc3NTAwMDEsUEgtOS1HNzUwMDAyLFBILTktRzc1MDAwMyxQSC05LUc3NTAwMDQsUEgtOS1HNzUwMDA1LFBILUNBUi1HMjMwMDAxLFBILUNBUi1HMjMwMDAyLFBILUNBUi1HMjMwMDAzLFBILUNBUi1HMjMwMDA0LFBILUNBUi1HMjMwMDA1LFBILU5DUi1HNTIwMDAxCisxLFR1ZSAyNSBKYW4gMTEsNjA5NDgwLjAsNzIzNzUzLjAsNzY3NzU2LjAsMjc1OTU4MS4wLDYwNDQ4My4wLDYzNzg1My4wLDEyODg3MDYuMCw4Mzk4NC4wLDUzNTc3MC4wLDEyNTM5NzAuMCw1MzE2NDguMCwxNjgyMjU4LjAsMjE5ODkyOC4wLDUxMTQ3NC4wLDE3OTgwNjcuMCw1NDg4OTguMCw4Mjk5MTcuMCw5MzM3MDkuMCwxMTcyMjg4LjAsMTIxNDUzNC4wLDYyNjY0OC4wLDk2NjIuMCwxMjIzMDE0LjAsMTUxMDM5MS4wLDM2Njk0OS4wLDE1NzA0MC4wLDYwNjIyOS4wLDM3Mzg0NDguMCwyMDEyODUxLjAsMjI4NTQ1MS4wLDEyODE5ODIuMCw3MDk2MTEuMCwyMDIxODMuMCwyMjg2OTY3LjAsMjIzNjg0Ni4wLDI5NDI0NzcuMCwyNDM3ODYuMCw0NDM5NzQuMCw3OTUxMzcuMCw4NDU0NzQuMCwxOTUyODc0LjAsMjEwMTA2MS4wLDI3Mjg5NS4wLDEyMjE2MTAuMCw1MTkxMDUuMCwxODY2MDAxLjAsMjQzNDYwLjAsODA0ODc0LjAsNzYwNDIwLjAsNDk3NTA2LjAsNTYxMzI2LjAsNzc2NjAwLjAsMjQ2NTkyNS4wLDMwMDI5NzQuMCwxMjkzNDY1LjAsMzg4MjIwOS4wLDEzMzczODYuMCw4OTY1MC4wLDQxMTk5NC4wLDE5MzkwOTYuMCw1OTgwNzYuMCw0MzI0MDMuMCw3Mjk4NDUuMCwzNDI4MjIuMCw2Mjg3OTMuMCwyMzk2MjMuMCw4NjYzNzMuMCwyMzIxMzczLjAsMjYwNTA3LjAsNjc2MDI1LjAsMjczMzUxLjAsMzQyMDA3LjAsMTQzMjg4LjAsMS4wNDAxNTgzRTcKKzIsV2VkIDI2IEphbiAxMSw2MDk0ODAuMCw3MjM3NTMuMCw3Njc3NTYuMCwyNzU5NTgxLjAsNjA0NDgzLjAsNjM3ODUzLjAsMTI4ODcwNi4wLDgzOTg0LjAsNTM1NzcwLjAsMTI1Mzk3MC4wLDUzMTY0OC4wLDE2ODIyNTguMCwyMTk4OTI4LjAsNTExNDc0LjAsMTc5ODA2Ny4wLDU0ODg5OC4wLDgyOTkxNy4wLDkzMzcwOS4wLDExNzIyODguMCwxMjE0NTM0LjAsNjI2NjQ4LjAsOTY2Mi4wLDEyMjMwMTQuMCwxNTEwMzkxLjAsMzY2OTQ5LjAsMTU3MDQwLjAsNjA2MjI5LjAsMzczODQ0OC4wLDIwMTI4NTEuMCwyMjg1NDUxLjAsMTI4MTk4Mi4wLDcwOTYxMS4wLDIwMjE4My4wLDIyODY5NjcuMCwyMjM2ODQ2LjAsMjk0MjQ3Ny4wLDI0Mzc4Ni4wLDQ0Mzk3NC4wLDc5NTEzNy4wLDg0NTQ3NC4wLDE5NTI4NzQuMCwyMTAxMDYxLjAsMjcyODk1LjAsMTIyMTYxMC4wLDUxOTEwNS4wLDE4NjYwMDEuMCwyNDM0NjAuMCw4MDQ4NzQuMCw3NjA0MjAuMCw0OTc1MDYuMCw1NjEzMjYuMCw3NzY2MDAuMCwyNDY1OTI1LjAsMzAwMjk3NC4wLDEyOTM0NjUuMCwzODgyMjA5LjAsMTMzNzM4Ni4wLDg5NjUwLjAsNDExOTk0LjAsMTkzOTA5Ni4wLDU5ODA3Ni4wLDQzMjQwMy4wLDcyOTg0NS4wLDM0MjgyMi4wLDYyODc5My4wLDIzOTYyMy4wLDg2NjM3My4wLDIzMjEzNzMuMCwyNjA1MDcuMCw2NzYwMjUuMCwyNzMzNTEuMCwzNDIwMDcuMCwxNDMyODguMCwxLjA0MDE1ODNFNworMyxUaHUgMjcgSmFuIDExLDYwOTQ4MC4wLDcyMzc1My4wLDc2Nzc1Ni4wLDI3NTk1ODEuMCw2MDQ0ODMuMCw2Mzc4NTMuMCwxMjg4NzA2LjAsODM5ODQuMCw1MzU3NzAuMCwxMjUzOTcwLjAsNTMxNjQ4LjAsMTY4MjI1OC4wLDIxOTg5MjguMCw1MTE0NzQuMCwxNzk4MDY3LjAsNTQ4ODk4LjAsODI5OTE3LjAsOTMzNzA5LjAsMTE3MjI4OC4wLDEyMTQ1MzQuMCw2MjY2NDguMCw5NjYyLjAsMTIyMzAxNC4wLDE1MTAzOTEuMCwzNjY5NDkuMCwxNTcwNDAuMCw2MDYyMjkuMCwzNzM4NDQ4LjAsMjAxMjg1MS4wLDIyODU0NTEuMCwxMjgxOTgyLjAsNzA5NjExLjAsMjAyMTgzLjAsMjI4Njk2Ny4wLDIyMzY4NDYuMCwyOTQyNDc3LjAsMjQzNzg2LjAsNDQzOTc0LjAsNzk1MTM3LjAsODQ1NDc0LjAsMTk1Mjg3NC4wLDIxMDEwNjEuMCwyNzI4OTUuMCwxMjIxNjEwLjAsNTE5MTA1LjAsMTg2NjAwMS4wLDI0MzQ2MC4wLDgwNDg3NC4wLDc2MDQyMC4wLDQ5NzUwNi4wLDU2MTMyNi4wLDc3NjYwMC4wLDI0NjU5MjUuMCwzMDAyOTc0LjAsMTI5MzQ2NS4wLDM4ODIyMDkuMCwxMzM3Mzg2LjAsODk2NTAuMCw0MTE5OTQuMCwxOTM5MDk2LjAsNTk4MDc2LjAsNDMyNDAzLjAsNzI5ODQ1LjAsMzQyODIyLjAsNjI4NzkzLjAsMjM5NjIzLjAsODY2MzczLjAsMjMyMTM3My4wLDI2MDUwNy4wLDY3NjAyNS4wLDI3MzM1MS4wLDM0MjAwNy4wLDE0MzI4OC4wLDEuMDQwMTU4M0U3Cis0LEZyaSAyOCBKYW4gMTEsNjA5NDgwLjAsNzIzNzUzLjAsNzY3NzU2LjAsMjc1OTU4MS4wLDYwNDQ4My4wLDYzNzg1My4wLDEyODg3MDYuMCw4Mzk4NC4wLDUzNTc3MC4wLDEyNTM5NzAuMCw1MzE2NDguMCwxNjgyMjU4LjAsMjE5ODkyOC4wLDUxMTQ3NC4wLDE3OTgwNjcuMCw1NDg4OTguMCw4Mjk5MTcuMCw5MzM3MDkuMCwxMTcyMjg4LjAsMTIxNDUzNC4wLDYyNjY0OC4wLDk2NjIuMCwxMjIzMDE0LjAsMTUxMDM5MS4wLDM2Njk0OS4wLDE1NzA0MC4wLDYwNjIyOS4wLDM3Mzg0NDguMCwyMDEyODUxLjAsMjI4NTQ1MS4wLDEyODE5ODIuMCw3MDk2MTEuMCwyMDIxODMuMCwyMjg2OTY3LjAsMjIzNjg0Ni4wLDI5NDI0NzcuMCwyNDM3ODYuMCw0NDM5NzQuMCw3OTUxMzcuMCw4NDU0NzQuMCwxOTUyODc0LjAsMjEwMTA2MS4wLDI3Mjg5NS4wLDEyMjE2MTAuMCw1MTkxMDUuMCwxODY2MDAxLjAsMjQzNDYwLjAsODA0ODc0LjAsNzYwNDIwLjAsNDk3NTA2LjAsNTYxMzI2LjAsNzc2NjAwLjAsMjQ2NTkyNS4wLDMwMDI5NzQuMCwxMjkzNDY1LjAsMzg4MjIwOS4wLDEzMzczODYuMCw4OTY1MC4wLDQxMTk5NC4wLDE5MzkwOTYuMCw1OTgwNzYuMCw0MzI0MDMuMCw3Mjk4NDUuMCwzNDI4MjIuMCw2Mjg3OTMuMCwyMzk2MjMuMCw4NjYzNzMuMCwyMzIxMzczLjAsMjYwNTA3LjAsNjc2MDI1LjAsMjczMzUxLjAsMzQyMDA3LjAsMTQzMjg4LjAsMS4wNDAxNTgzRTcKKzUsU2F0IDI5IEphbiAxMSw2MDk0ODAuMCw3MjM3NTMuMCw3Njc3NTYuMCwyNzU5NTgxLjAsNjA0NDgzLjAsNjM3ODUzLjAsMTI4ODcwNi4wLDgzOTg0LjAsNTM1NzcwLjAsMTI1Mzk3MC4wLDUzMTY0OC4wLDE2ODIyNTguMCwyMTk4OTI4LjAsNTExNDc0LjAsMTc5ODA2Ny4wLDU0ODg5OC4wLDgyOTkxNy4wLDkzMzcwOS4wLDExNzIyODguMCwxMjE0NTM0LjAsNjI2NjQ4LjAsOTY2Mi4wLDEyMjMwMTQuMCwxNTEwMzkxLjAsMzY2OTQ5LjAsMTU3MDQwLjAsNjA2MjI5LjAsMzczODQ0OC4wLDIwMTI4NTEuMCwyMjg1NDUxLjAsMTI4MTk4Mi4wLDcwOTYxMS4wLDIwMjE4My4wLDIyODY5NjcuMCwyMjM2ODQ2LjAsMjk0MjQ3Ny4wLDI0Mzc4Ni4wLDQ0Mzk3NC4wLDc5NTEzNy4wLDg0NTQ3NC4wLDE5NTI4NzQuMCwyMTAxMDYxLjAsMjcyODk1LjAsMTIyMTYxMC4wLDUxOTEwNS4wLDE4NjYwMDEuMCwyNDM0NjAuMCw4MDQ4NzQuMCw3NjA0MjAuMCw0OTc1MDYuMCw1NjEzMjYuMCw3NzY2MDAuMCwyNDY1OTI1LjAsMzAwMjk3NC4wLDEyOTM0NjUuMCwzODgyMjA5LjAsMTMzNzM4Ni4wLDg5NjUwLjAsNDExOTk0LjAsMTkzOTA5Ni4wLDU5ODA3Ni4wLDQzMjQwMy4wLDcyOTg0NS4wLDM0MjgyMi4wLDYyODc5My4wLDIzOTYyMy4wLDg2NjM3My4wLDIzMjEzNzMuMCwyNjA1MDcuMCw2NzYwMjUuMCwyNzMzNTEuMCwzNDIwMDcuMCwxNDMyODguMCwxLjA0MDE1ODNFNworNixTdW4gMzAgSmFuIDExLDYwOTQ4MC4wLDcyMzc1My4wLDc2Nzc1Ni4wLDI3NTk1ODEuMCw2MDQ0ODMuMCw2Mzc4NTMuMCwxMjg4NzA2LjAsODM5ODQuMCw1MzU3NzAuMCwxMjUzOTcwLjAsNTMxNjQ4LjAsMTY4MjI1OC4wLDIxOTg5MjguMCw1MTE0NzQuMCwxNzk4MDY3LjAsNTQ4ODk4LjAsODI5OTE3LjAsOTMzNzA5LjAsMTE3MjI4OC4wLDEyMTQ1MzQuMCw2MjY2NDguMCw5NjYyLjAsMTIyMzAxNC4wLDE1MTAzOTEuMCwzNjY5NDkuMCwxNTcwNDAuMCw2MDYyMjkuMCwzNzM4NDQ4LjAsMjAxMjg1MS4wLDIyODU0NTEuMCwxMjgxOTgyLjAsNzA5NjExLjAsMjAyMTgzLjAsMjI4Njk2Ny4wLDIyMzY4NDYuMCwyOTQyNDc3LjAsMjQzNzg2LjAsNDQzOTc0LjAsNzk1MTM3LjAsODQ1NDc0LjAsMTk1Mjg3NC4wLDIxMDEwNjEuMCwyNzI4OTUuMCwxMjIxNjEwLjAsNTE5MTA1LjAsMTg2NjAwMS4wLDI0MzQ2MC4wLDgwNDg3NC4wLDc2MDQyMC4wLDQ5NzUwNi4wLDU2MTMyNi4wLDc3NjYwMC4wLDI0NjU5MjUuMCwzMDAyOTc0LjAsMTI5MzQ2NS4wLDM4ODIyMDkuMCwxMzM3Mzg2LjAsODk2NTAuMCw0MTE5OTQuMCwxOTM5MDk2LjAsNTk4MDc2LjAsNDMyNDAzLjAsNzI5ODQ1LjAsMzQyODIyLjAsNjI4NzkzLjAsMjM5NjIzLjAsODY2MzczLjAsMjMyMTM3My4wLDI2MDUwNy4wLDY3NjAyNS4wLDI3MzM1MS4wLDM0MjAwNy4wLDE0MzI4OC4wLDEuMDQwMTU4M0U3Cis3LE1vbiAzMSBKYW4gMTEsNjA5NDgwLjAsNzIzNzUzLjAsNzY3NzU2LjAsMjc1OTU4MS4wLDYwNDQ4My4wLDYzNzg1My4wLDEyODg3MDYuMCw4Mzk4NC4wLDUzNTc3MC4wLDEyNTM5NzAuMCw1MzE2NDguMCwxNjgyMjU4LjAsMjE5ODkyOC4wLDUxMTQ3NC4wLDE3OTgwNjcuMCw1NDg4OTguMCw4Mjk5MTcuMCw5MzM3MDkuMCwxMTcyMjg4LjAsMTIxNDUzNC4wLDYyNjY0OC4wLDk2NjIuMCwxMjIzMDE0LjAsMTUxMDM5MS4wLDM2Njk0OS4wLDE1NzA0MC4wLDYwNjIyOS4wLDM3Mzg0NDguMCwyMDEyODUxLjAsMjI4NTQ1MS4wLDEyODE5ODIuMCw3MDk2MTEuMCwyMDIxODMuMCwyMjg2OTY3LjAsMjIzNjg0Ni4wLDI5NDI0NzcuMCwyNDM3ODYuMCw0NDM5NzQuMCw3OTUxMzcuMCw4NDU0NzQuMCwxOTUyODc0LjAsMjEwMTA2MS4wLDI3Mjg5NS4wLDEyMjE2MTAuMCw1MTkxMDUuMCwxODY2MDAxLjAsMjQzNDYwLjAsODA0ODc0LjAsNzYwNDIwLjAsNDk3NTA2LjAsNTYxMzI2LjAsNzc2NjAwLjAsMjQ2NTkyNS4wLDMwMDI5NzQuMCwxMjkzNDY1LjAsMzg4MjIwOS4wLDEzMzczODYuMCw4OTY1MC4wLDQxMTk5NC4wLDE5MzkwOTYuMCw1OTgwNzYuMCw0MzI0MDMuMCw3Mjk4NDUuMCwzNDI4MjIuMCw2Mjg3OTMuMCwyMzk2MjMuMCw4NjYzNzMuMCwyMzIxMzczLjAsMjYwNTA3LjAsNjc2MDI1LjAsMjczMzUxLjAsMzQyMDA3LjAsMTQzMjg4LjAsMS4wNDAxNTgzRTcKKzgsVHVlIDEgRmViIDExLDYwOTQ4MC4wLDcyMzc1My4wLDc2Nzc1Ni4wLDI3NTk1ODEuMCw2MDQ0ODMuMCw2Mzc4NTMuMCwxMjg4NzA2LjAsODM5ODQuMCw1MzU3NzAuMCwxMjUzOTcwLjAsNTMxNjQ4LjAsMTY4MjI1OC4wLDIxOTg5MjguMCw1MTE0NzQuMCwxNzk4MDY3LjAsNTQ4ODk4LjAsODI5OTE3LjAsOTMzNzA5LjAsMTE3MjI4OC4wLDEyMTQ1MzQuMCw2MjY2NDguMCw5NjYyLjAsMTIyMzAxNC4wLDE1MTAzOTEuMCwzNjY5NDkuMCwxNTcwNDAuMCw2MDYyMjkuMCwzNzM4NDQ4LjAsMjAxMjg1MS4wLDIyODU0NTEuMCwxMjgxOTgyLjAsNzA5NjExLjAsMjAyMTgzLjAsMjI4Njk2Ny4wLDIyMzY4NDYuMCwyOTQyNDc3LjAsMjQzNzg2LjAsNDQzOTc0LjAsNzk1MTM3LjAsODQ1NDc0LjAsMTk1Mjg3NC4wLDIxMDEwNjEuMCwyNzI4OTUuMCwxMjIxNjEwLjAsNTE5MTA1LjAsMTg2NjAwMS4wLDI0MzQ2MC4wLDgwNDg3NC4wLDc2MDQyMC4wLDQ5NzUwNi4wLDU2MTMyNi4wLDc3NjYwMC4wLDI0NjU5MjUuMCwzMDAyOTc0LjAsMTI5MzQ2NS4wLDM4ODIyMDkuMCwxMzM3Mzg2LjAsODk2NTAuMCw0MTE5OTQuMCwxOTM5MDk2LjAsNTk4MDc2LjAsNDMyNDAzLjAsNzI5ODQ1LjAsMzQyODIyLjAsNjI4NzkzLjAsMjM5NjIzLjAsODY2MzczLjAsMjMyMTM3My4wLDI2MDUwNy4wLDY3NjAyNS4wLDI3MzM1MS4wLDM0MjAwNy4wLDE0MzI4OC4wLDEuMDQwMTU4M0U3Cis5LFdlZCAyIEZlYiAxMSw2MDk0ODAuMCw3MjM3NTMuMCw3Njc3NTYuMCwyNzU5NTgxLjAsNjA0NDgzLjAsNjM3ODUzLjAsMTI4ODcwNi4wLDgzOTg0LjAsNTM1NzcwLjAsMTI1Mzk3MC4wLDUzMTY0OC4wLDE2ODIyNTguMCwyMTk4OTI4LjAsNTExNDc0LjAsMTc5ODA2Ny4wLDU0ODg5OC4wLDgyOTkxNy4wLDkzMzcwOS4wLDExNzIyODguMCwxMjE0NTM0LjAsNjI2NjQ4LjAsOTY2Mi4wLDEyMjMwMTQuMCwxNTEwMzkxLjAsMzY2OTQ5LjAsMTU3MDQwLjAsNjA2MjI5LjAsMzczODQ0OC4wLDIwMTI4NTEuMCwyMjg1NDUxLjAsMTI4MTk4Mi4wLDcwOTYxMS4wLDIwMjE4My4wLDIyODY5NjcuMCwyMjM2ODQ2LjAsMjk0MjQ3Ny4wLDI0Mzc4Ni4wLDQ0Mzk3NC4wLDc5NTEzNy4wLDg0NTQ3NC4wLDE5NTI4NzQuMCwyMTAxMDYxLjAsMjcyODk1LjAsMTIyMTYxMC4wLDUxOTEwNS4wLDE4NjYwMDEuMCwyNDM0NjAuMCw4MDQ4NzQuMCw3NjA0MjAuMCw0OTc1MDYuMCw1NjEzMjYuMCw3NzY2MDAuMCwyNDY1OTI1LjAsMzAwMjk3NC4wLDEyOTM0NjUuMCwzODgyMjA5LjAsMTMzNzM4Ni4wLDg5NjUwLjAsNDExOTk0LjAsMTkzOTA5Ni4wLDU5ODA3Ni4wLDQzMjQwMy4wLDcyOTg0NS4wLDM0MjgyMi4wLDYyODc5My4wLDIzOTYyMy4wLDg2NjM3My4wLDIzMjEzNzMuMCwyNjA1MDcuMCw2NzYwMjUuMCwyNzMzNTEuMCwzNDIwMDcuMCwxNDMyODguMCwxLjA0MDE1ODNFNworMTAsVGh1IDMgRmViIDExLDYwOTQ4MC4wLDcyMzc1My4wLDc2Nzc1Ni4wLDI3NTk1ODEuMCw2MDQ0ODMuMCw2Mzc4NTMuMCwxMjg4NzA2LjAsODM5ODQuMCw1MzU3NzAuMCwxMjUzOTcwLjAsNTMxNjQ4LjAsMTY4MjI1OC4wLDIxOTg5MjguMCw1MTE0NzQuMCwxNzk4MDY3LjAsNTQ4ODk4LjAsODI5OTE3LjAsOTMzNzA5LjAsMTE3MjI4OC4wLDEyMTQ1MzQuMCw2MjY2NDguMCw5NjYyLjAsMTIyMzAxNC4wLDE1MTAzOTEuMCwzNjY5NDkuMCwxNTcwNDAuMCw2MDYyMjkuMCwzNzM4NDQ4LjAsMjAxMjg1MS4wLDIyODU0NTEuMCwxMjgxOTgyLjAsNzA5NjExLjAsMjAyMTgzLjAsMjI4Njk2Ny4wLDIyMzY4NDYuMCwyOTQyNDc3LjAsMjQzNzg2LjAsNDQzOTc0LjAsNzk1MTM3LjAsODQ1NDc0LjAsMTk1Mjg3NC4wLDIxMDEwNjEuMCwyNzI4OTUuMCwxMjIxNjEwLjAsNTE5MTA1LjAsMTg2NjAwMS4wLDI0MzQ2MC4wLDgwNDg3NC4wLDc2MDQyMC4wLDQ5NzUwNi4wLDU2MTMyNi4wLDc3NjYwMC4wLDI0NjU5MjUuMCwzMDAyOTc0LjAsMTI5MzQ2NS4wLDM4ODIyMDkuMCwxMzM3Mzg2LjAsODk2NTAuMCw0MTE5OTQuMCwxOTM5MDk2LjAsNTk4MDc2LjAsNDMyNDAzLjAsNzI5ODQ1LjAsMzQyODIyLjAsNjI4NzkzLjAsMjM5NjIzLjAsODY2MzczLjAsMjMyMTM3My4wLDI2MDUwNy4wLDY3NjAyNS4wLDI3MzM1MS4wLDM0MjAwNy4wLDE0MzI4OC4wLDEuMDQwMTU4M0U3CisxMSxGcmkgNCBGZWIgMTEsNjA5NDgwLjAsNzIzNzUzLjAsNzY3NzU2LjAsMjc1OTU4MS4wLDYwNDQ4My4wLDYzNzg1My4wLDEyODg3MDYuMCw4Mzk4NC4wLDUzNTc3MC4wLDEyNTM5NzAuMCw1MzE2NDguMCwxNjgyMjU4LjAsMjE5ODkyOC4wLDUxMTQ3NC4wLDE3OTgwNjcuMCw1NDg4OTguMCw4Mjk5MTcuMCw5MzM3MDkuMCwxMTcyMjg4LjAsMTIxNDUzNC4wLDYyNjY0OC4wLDk2NjIuMCwxMjIzMDE0LjAsMTUxMDM5MS4wLDM2Njk0OS4wLDE1NzA0MC4wLDYwNjIyOS4wLDM3Mzg0NDguMCwyMDEyODUxLjAsMjI4NTQ1MS4wLDEyODE5ODIuMCw3MDk2MTEuMCwyMDIxODMuMCwyMjg2OTY3LjAsMjIzNjg0Ni4wLDI5NDI0NzcuMCwyNDM3ODYuMCw0NDM5NzQuMCw3OTUxMzcuMCw4NDU0NzQuMCwxOTUyODc0LjAsMjEwMTA2MS4wLDI3Mjg5NS4wLDEyMjE2MTAuMCw1MTkxMDUuMCwxODY2MDAxLjAsMjQzNDYwLjAsODA0ODc0LjAsNzYwNDIwLjAsNDk3NTA2LjAsNTYxMzI2LjAsNzc2NjAwLjAsMjQ2NTkyNS4wLDMwMDI5NzQuMCwxMjkzNDY1LjAsMzg4MjIwOS4wLDEzMzczODYuMCw4OTY1MC4wLDQxMTk5NC4wLDE5MzkwOTYuMCw1OTgwNzYuMCw0MzI0MDMuMCw3Mjk4NDUuMCwzNDI4MjIuMCw2Mjg3OTMuMCwyMzk2MjMuMCw4NjYzNzMuMCwyMzIxMzczLjAsMjYwNTA3LjAsNjc2MDI1LjAsMjczMzUxLjAsMzQyMDA3LjAsMTQzMjg4LjAsMS4wNDAxNTgzRTcKKzEyLFNhdCA1IEZlYiAxMSw2MDk0ODAuMCw3MjM3NTMuMCw3Njc3NTYuMCwyNzU5NTgxLjAsNjA0NDgzLjAsNjM3ODUzLjAsMTI4ODcwNi4wLDgzOTg0LjAsNTM1NzcwLjAsMTI1Mzk3MC4wLDUzMTY0OC4wLDE2ODIyNTguMCwyMTk4OTI4LjAsNTExNDc0LjAsMTc5ODA2Ny4wLDU0ODg5OC4wLDgyOTkxNy4wLDkzMzcwOS4wLDExNzIyODguMCwxMjE0NTM0LjAsNjI2NjQ4LjAsOTY2Mi4wLDEyMjMwMTQuMCwxNTEwMzkxLjAsMzY2OTQ5LjAsMTU3MDQwLjAsNjA2MjI5LjAsMzczODQ0OC4wLDIwMTI4NTEuMCwyMjg1NDUxLjAsMTI4MTk4Mi4wLDcwOTYxMS4wLDIwMjE4My4wLDIyODY5NjcuMCwyMjM2ODQ2LjAsMjk0MjQ3Ny4wLDI0Mzc4Ni4wLDQ0Mzk3NC4wLDc5NTEzNy4wLDg0NTQ3NC4wLDE5NTI4NzQuMCwyMTAxMDYxLjAsMjcyODk1LjAsMTIyMTYxMC4wLDUxOTEwNS4wLDE4NjYwMDEuMCwyNDM0NjAuMCw4MDQ4NzQuMCw3NjA0MjAuMCw0OTc1MDYuMCw1NjEzMjYuMCw3NzY2MDAuMCwyNDY1OTI1LjAsMzAwMjk3NC4wLDEyOTM0NjUuMCwzODgyMjA5LjAsMTMzNzM4Ni4wLDg5NjUwLjAsNDExOTk0LjAsMTkzOTA5Ni4wLDU5ODA3Ni4wLDQzMjQwMy4wLDcyOTg0NS4wLDM0MjgyMi4wLDYyODc5My4wLDIzOTYyMy4wLDg2NjM3My4wLDIzMjEzNzMuMCwyNjA1MDcuMCw2NzYwMjUuMCwyNzMzNTEuMCwzNDIwMDcuMCwxNDMyODguMCwxLjA0MDE1ODNFNworMTMsU3VuIDYgRmViIDExLDYwOTQ4MC4wLDcyMzc1My4wLDc2Nzc1Ni4wLDI3NTk1ODEuMCw2MDQ0ODMuMCw2Mzc4NTMuMCwxMjg4NzA2LjAsODM5ODQuMCw1MzU3NzAuMCwxMjUzOTcwLjAsNTMxNjQ4LjAsMTY4MjI1OC4wLDIxOTg5MjguMCw1MTE0NzQuMCwxNzk4MDY3LjAsNTQ4ODk4LjAsODI5OTE3LjAsOTMzNzA5LjAsMTE3MjI4OC4wLDEyMTQ1MzQuMCw2MjY2NDguMCw5NjYyLjAsMTIyMzAxNC4wLDE1MTAzOTEuMCwzNjY5NDkuMCwxNTcwNDAuMCw2MDYyMjkuMCwzNzM4NDQ4LjAsMjAxMjg1MS4wLDIyODU0NTEuMCwxMjgxOTgyLjAsNzA5NjExLjAsMjAyMTgzLjAsMjI4Njk2Ny4wLDIyMzY4NDYuMCwyOTQyNDc3LjAsMjQzNzg2LjAsNDQzOTc0LjAsNzk1MTM3LjAsODQ1NDc0LjAsMTk1Mjg3NC4wLDIxMDEwNjEuMCwyNzI4OTUuMCwxMjIxNjEwLjAsNTE5MTA1LjAsMTg2NjAwMS4wLDI0MzQ2MC4wLDgwNDg3NC4wLDc2MDQyMC4wLDQ5NzUwNi4wLDU2MTMyNi4wLDc3NjYwMC4wLDI0NjU5MjUuMCwzMDAyOTc0LjAsMTI5MzQ2NS4wLDM4ODIyMDkuMCwxMzM3Mzg2LjAsODk2NTAuMCw0MTE5OTQuMCwxOTM5MDk2LjAsNTk4MDc2LjAsNDMyNDAzLjAsNzI5ODQ1LjAsMzQyODIyLjAsNjI4NzkzLjAsMjM5NjIzLjAsODY2MzczLjAsMjMyMTM3My4wLDI2MDUwNy4wLDY3NjAyNS4wLDI3MzM1MS4wLDM0MjAwNy4wLDE0MzI4OC4wLDEuMDQwMTU4M0U3CisxNCxNb24gNyBGZWIgMTEsNjA5NDgwLjAsNzIzNzUzLjAsNzY3NzU2LjAsMjc1OTU4MS4wLDYwNDQ4My4wLDYzNzg1My4wLDEyODg3MDYuMCw4Mzk4NC4wLDUzNTc3MC4wLDEyNTM5NzAuMCw1MzE2NDguMCwxNjgyMjU4LjAsMjE5ODkyOC4wLDUxMTQ3NC4wLDE3OTgwNjcuMCw1NDg4OTguMCw4Mjk5MTcuMCw5MzM3MDkuMCwxMTcyMjg4LjAsMTIxNDUzNC4wLDYyNjY0OC4wLDk2NjIuMCwxMjIzMDE0LjAsMTUxMDM5MS4wLDM2Njk0OS4wLDE1NzA0MC4wLDYwNjIyOS4wLDM3Mzg0NDguMCwyMDEyODUxLjAsMjI4NTQ1MS4wLDEyODE5ODIuMCw3MDk2MTEuMCwyMDIxODMuMCwyMjg2OTY3LjAsMjIzNjg0Ni4wLDI5NDI0NzcuMCwyNDM3ODYuMCw0NDM5NzQuMCw3OTUxMzcuMCw4NDU0NzQuMCwxOTUyODc0LjAsMjEwMTA2MS4wLDI3Mjg5NS4wLDEyMjE2MTAuMCw1MTkxMDUuMCwxODY2MDAxLjAsMjQzNDYwLjAsODA0ODc0LjAsNzYwNDIwLjAsNDk3NTA2LjAsNTYxMzI2LjAsNzc2NjAwLjAsMjQ2NTkyNS4wLDMwMDI5NzQuMCwxMjkzNDY1LjAsMzg4MjIwOS4wLDEzMzczODYuMCw4OTY1MC4wLDQxMTk5NC4wLDE5MzkwOTYuMCw1OTgwNzYuMCw0MzI0MDMuMCw3Mjk4NDUuMCwzNDI4MjIuMCw2Mjg3OTMuMCwyMzk2MjMuMCw4NjYzNzMuMCwyMzIxMzczLjAsMjYwNTA3LjAsNjc2MDI1LjAsMjczMzUxLjAsMzQyMDA3LjAsMTQzMjg4LjAsMS4wNDAxNTgzRTcKKzE1LFR1ZSA4IEZlYiAxMSw2MDk0ODAuMCw3MjM3NTMuMCw3Njc3NTYuMCwyNzU5NTgxLjAsNjA0NDgzLjAsNjM3ODUzLjAsMTI4ODcwNi4wLDgzOTg0LjAsNTM1NzcwLjAsMTI1Mzk3MC4wLDUzMTY0OC4wLDE2ODIyNTguMCwyMTk4OTI4LjAsNTExNDc0LjAsMTc5ODA2Ny4wLDU0ODg5OC4wLDgyOTkxNy4wLDkzMzcwOS4wLDExNzIyODguMCwxMjE0NTM0LjAsNjI2NjQ4LjAsOTY2Mi4wLDEyMjMwMTQuMCwxNTEwMzkxLjAsMzY2OTQ5LjAsMTU3MDQwLjAsNjA2MjI5LjAsMzczODQ0OC4wLDIwMTI4NTEuMCwyMjg1NDUxLjAsMTI4MTk4Mi4wLDcwOTYxMS4wLDIwMjE4My4wLDIyODY5NjcuMCwyMjM2ODQ2LjAsMjk0MjQ3Ny4wLDI0Mzc4Ni4wLDQ0Mzk3NC4wLDc5NTEzNy4wLDg0NTQ3NC4wLDE5NTI4NzQuMCwyMTAxMDYxLjAsMjcyODk1LjAsMTIyMTYxMC4wLDUxOTEwNS4wLDE4NjYwMDEuMCwyNDM0NjAuMCw4MDQ4NzQuMCw3NjA0MjAuMCw0OTc1MDYuMCw1NjEzMjYuMCw3NzY2MDAuMCwyNDY1OTI1LjAsMzAwMjk3NC4wLDEyOTM0NjUuMCwzODgyMjA5LjAsMTMzNzM4Ni4wLDg5NjUwLjAsNDExOTk0LjAsMTkzOTA5Ni4wLDU5ODA3Ni4wLDQzMjQwMy4wLDcyOTg0NS4wLDM0MjgyMi4wLDYyODc5My4wLDIzOTYyMy4wLDg2NjM3My4wLDIzMjEzNzMuMCwyNjA1MDcuMCw2NzYwMjUuMCwyNzMzNTEuMCwzNDIwMDcuMCwxNDMyODguMCwxLjA0MDE1ODNFNworMTYsV2VkIDkgRmViIDExLDYwOTQ4MC4wLDcyMzc1My4wLDc2Nzc1Ni4wLDI3NTk1ODEuMCw2MDQ0ODMuMCw2Mzc4NTMuMCwxMjg4NzA2LjAsODM5ODQuMCw1MzU3NzAuMCwxMjUzOTcwLjAsNTMxNjQ4LjAsMTY4MjI1OC4wLDIxOTg5MjguMCw1MTE0NzQuMCwxNzk4MDY3LjAsNTQ4ODk4LjAsODI5OTE3LjAsOTMzNzA5LjAsMTE3MjI4OC4wLDEyMTQ1MzQuMCw2MjY2NDguMCw5NjYyLjAsMTIyMzAxNC4wLDE1MTAzOTEuMCwzNjY5NDkuMCwxNTcwNDAuMCw2MDYyMjkuMCwzNzM4NDQ4LjAsMjAxMjg1MS4wLDIyODU0NTEuMCwxMjgxOTgyLjAsNzA5NjExLjAsMjAyMTgzLjAsMjI4Njk2Ny4wLDIyMzY4NDYuMCwyOTQyNDc3LjAsMjQzNzg2LjAsNDQzOTc0LjAsNzk1MTM3LjAsODQ1NDc0LjAsMTk1Mjg3NC4wLDIxMDEwNjEuMCwyNzI4OTUuMCwxMjIxNjEwLjAsNTE5MTA1LjAsMTg2NjAwMS4wLDI0MzQ2MC4wLDgwNDg3NC4wLDc2MDQyMC4wLDQ5NzUwNi4wLDU2MTMyNi4wLDc3NjYwMC4wLDI0NjU5MjUuMCwzMDAyOTc0LjAsMTI5MzQ2NS4wLDM4ODIyMDkuMCwxMzM3Mzg2LjAsODk2NTAuMCw0MTE5OTQuMCwxOTM5MDk2LjAsNTk4MDc2LjAsNDMyNDAzLjAsNzI5ODQ1LjAsMzQyODIyLjAsNjI4NzkzLjAsMjM5NjIzLjAsODY2MzczLjAsMjMyMTM3My4wLDI2MDUwNy4wLDY3NjAyNS4wLDI3MzM1MS4wLDM0MjAwNy4wLDE0MzI4OC4wLDEuMDQwMTU4M0U3CisxNyxUaHUgMTAgRmViIDExLDYwOTQ4MC4wLDcyMzc1My4wLDc2Nzc1Ni4wLDI3NTk1ODEuMCw2MDQ0ODMuMCw2Mzc4NTMuMCwxMjg4NzA2LjAsODM5ODQuMCw1MzU3NzAuMCwxMjUzOTcwLjAsNTMxNjQ4LjAsMTY4MjI1OC4wLDIxOTg5MjguMCw1MTE0NzQuMCwxNzk4MDY3LjAsNTQ4ODk4LjAsODI5OTE3LjAsOTMzNzA5LjAsMTE3MjI4OC4wLDEyMTQ1MzQuMCw2MjY2NDguMCw5NjYyLjAsMTIyMzAxNC4wLDE1MTAzOTEuMCwzNjY5NDkuMCwxNTcwNDAuMCw2MDYyMjkuMCwzNzM4NDQ4LjAsMjAxMjg1MS4wLDIyODU0NTEuMCwxMjgxOTgyLjAsNzA5NjExLjAsMjAyMTgzLjAsMjI4Njk2Ny4wLDIyMzY4NDYuMCwyOTQyNDc3LjAsMjQzNzg2LjAsNDQzOTc0LjAsNzk1MTM3LjAsODQ1NDc0LjAsMTk1Mjg3NC4wLDIxMDEwNjEuMCwyNzI4OTUuMCwxMjIxNjEwLjAsNTE5MTA1LjAsMTg2NjAwMS4wLDI0MzQ2MC4wLDgwNDg3NC4wLDc2MDQyMC4wLDQ5NzUwNi4wLDU2MTMyNi4wLDc3NjYwMC4wLDI0NjU5MjUuMCwzMDAyOTc0LjAsMTI5MzQ2NS4wLDM4ODIyMDkuMCwxMzM3Mzg2LjAsODk2NTAuMCw0MTE5OTQuMCwxOTM5MDk2LjAsNTk4MDc2LjAsNDMyNDAzLjAsNzI5ODQ1LjAsMzQyODIyLjAsNjI4NzkzLjAsMjM5NjIzLjAsODY2MzczLjAsMjMyMTM3My4wLDI2MDUwNy4wLDY3NjAyNS4wLDI3MzM1MS4wLDM0MjAwNy4wLDE0MzI4OC4wLDEuMDQwMTU4M0U3CisxOCxGcmkgMTEgRmViIDExLDYwOTQ4MC4wLDcyMzc1My4wLDc2Nzc1Ni4wLDI3NTk1ODEuMCw2MDQ0ODMuMCw2Mzc4NTMuMCwxMjg4NzA2LjAsODM5ODQuMCw1MzU3NzAuMCwxMjUzOTcwLjAsNTMxNjQ4LjAsMTY4MjI1OC4wLDIxOTg5MjguMCw1MTE0NzQuMCwxNzk4MDY3LjAsNTQ4ODk4LjAsODI5OTE3LjAsOTMzNzA5LjAsMTE3MjI4OC4wLDEyMTQ1MzQuMCw2MjY2NDguMCw5NjYyLjAsMTIyMzAxNC4wLDE1MTAzOTEuMCwzNjY5NDkuMCwxNTcwNDAuMCw2MDYyMjkuMCwzNzM4NDQ4LjAsMjAxMjg1MS4wLDIyODU0NTEuMCwxMjgxOTgyLjAsNzA5NjExLjAsMjAyMTgzLjAsMjI4Njk2Ny4wLDIyMzY4NDYuMCwyOTQyNDc3LjAsMjQzNzg2LjAsNDQzOTc0LjAsNzk1MTM3LjAsODQ1NDc0LjAsMTk1Mjg3NC4wLDIxMDEwNjEuMCwyNzI4OTUuMCwxMjIxNjEwLjAsNTE5MTA1LjAsMTg2NjAwMS4wLDI0MzQ2MC4wLDgwNDg3NC4wLDc2MDQyMC4wLDQ5NzUwNi4wLDU2MTMyNi4wLDc3NjYwMC4wLDI0NjU5MjUuMCwzMDAyOTc0LjAsMTI5MzQ2NS4wLDM4ODIyMDkuMCwxMzM3Mzg2LjAsODk2NTAuMCw0MTE5OTQuMCwxOTM5MDk2LjAsNTk4MDc2LjAsNDMyNDAzLjAsNzI5ODQ1LjAsMzQyODIyLjAsNjI4NzkzLjAsMjM5NjIzLjAsODY2MzczLjAsMjMyMTM3My4wLDI2MDUwNy4wLDY3NjAyNS4wLDI3MzM1MS4wLDM0MjAwNy4wLDE0MzI4OC4wLDEuMDQwMTU4M0U3CisxOSxTYXQgMTIgRmViIDExLDYwOTQ4MC4wLDcyMzc1My4wLDc2Nzc1Ni4wLDI3NTk1ODEuMCw2MDQ0ODMuMCw2Mzc4NTMuMCwxMjg4NzA2LjAsODM5ODQuMCw1MzU3NzAuMCwxMjUzOTcwLjAsNTMxNjQ4LjAsMTY4MjI1OC4wLDIxOTg5MjguMCw1MTE0NzQuMCwxNzk4MDY3LjAsNTQ4ODk4LjAsODI5OTE3LjAsOTMzNzA5LjAsMTE3MjI4OC4wLDEyMTQ1MzQuMCw2MjY2NDguMCw5NjYyLjAsMTIyMzAxNC4wLDE1MTAzOTEuMCwzNjY5NDkuMCwxNTcwNDAuMCw2MDYyMjkuMCwzNzM4NDQ4LjAsMjAxMjg1MS4wLDIyODU0NTEuMCwxMjgxOTgyLjAsNzA5NjExLjAsMjAyMTgzLjAsMjI4Njk2Ny4wLDIyMzY4NDYuMCwyOTQyNDc3LjAsMjQzNzg2LjAsNDQzOTc0LjAsNzk1MTM3LjAsODQ1NDc0LjAsMTk1Mjg3NC4wLDIxMDEwNjEuMCwyNzI4OTUuMCwxMjIxNjEwLjAsNTE5MTA1LjAsMTg2NjAwMS4wLDI0MzQ2MC4wLDgwNDg3NC4wLDc2MDQyMC4wLDQ5NzUwNi4wLDU2MTMyNi4wLDc3NjYwMC4wLDI0NjU5MjUuMCwzMDAyOTc0LjAsMTI5MzQ2NS4wLDM4ODIyMDkuMCwxMzM3Mzg2LjAsODk2NTAuMCw0MTE5OTQuMCwxOTM5MDk2LjAsNTk4MDc2LjAsNDMyNDAzLjAsNzI5ODQ1LjAsMzQyODIyLjAsNjI4NzkzLjAsMjM5NjIzLjAsODY2MzczLjAsMjMyMTM3My4wLDI2MDUwNy4wLDY3NjAyNS4wLDI3MzM1MS4wLDM0MjAwNy4wLDE0MzI4OC4wLDEuMDQwMTU4M0U3CisyMCxTdW4gMTMgRmViIDExLDYwOTQ4MC4wLDcyMzc1My4wLDc2Nzc1Ni4wLDI3NTk1ODEuMCw2MDQ0ODMuMCw2Mzc4NTMuMCwxMjg4NzA2LjAsODM5ODQuMCw1MzU3NzAuMCwxMjUzOTcwLjAsNTMxNjQ4LjAsMTY4MjI1OC4wLDIxOTg5MjguMCw1MTE0NzQuMCwxNzk4MDY3LjAsNTQ4ODk4LjAsODI5OTE3LjAsOTMzNzA5LjAsMTE3MjI4OC4wLDEyMTQ1MzQuMCw2MjY2NDguMCw5NjYyLjAsMTIyMzAxNC4wLDE1MTAzOTEuMCwzNjY5NDkuMCwxNTcwNDAuMCw2MDYyMjkuMCwzNzM4NDQ4LjAsMjAxMjg1MS4wLDIyODU0NTEuMCwxMjgxOTgyLjAsNzA5NjExLjAsMjAyMTgzLjAsMjI4Njk2Ny4wLDIyMzY4NDYuMCwyOTQyNDc3LjAsMjQzNzg2LjAsNDQzOTc0LjAsNzk1MTM3LjAsODQ1NDc0LjAsMTk1Mjg3NC4wLDIxMDEwNjEuMCwyNzI4OTUuMCwxMjIxNjEwLjAsNTE5MTA1LjAsMTg2NjAwMS4wLDI0MzQ2MC4wLDgwNDg3NC4wLDc2MDQyMC4wLDQ5NzUwNi4wLDU2MTMyNi4wLDc3NjYwMC4wLDI0NjU5MjUuMCwzMDAyOTc0LjAsMTI5MzQ2NS4wLDM4ODIyMDkuMCwxMzM3Mzg2LjAsODk2NTAuMCw0MTE5OTQuMCwxOTM5MDk2LjAsNTk4MDc2LjAsNDMyNDAzLjAsNzI5ODQ1LjAsMzQyODIyLjAsNjI4NzkzLjAsMjM5NjIzLjAsODY2MzczLjAsMjMyMTM3My4wLDI2MDUwNy4wLDY3NjAyNS4wLDI3MzM1MS4wLDM0MjAwNy4wLDE0MzI4OC4wLDEuMDQwMTU4M0U3CisyMSxNb24gMTQgRmViIDExLDYwOTQ4MC4wLDcyMzc1My4wLDc2Nzc1Ni4wLDI3NTk1ODEuMCw2MDQ0ODMuMCw2Mzc4NTMuMCwxMjg4NzA2LjAsODM5ODQuMCw1MzU3NzAuMCwxMjUzOTcwLjAsNTMxNjQ4LjAsMTY4MjI1OC4wLDIxOTg5MjguMCw1MTE0NzQuMCwxNzk4MDY3LjAsNTQ4ODk4LjAsODI5OTE3LjAsOTMzNzA5LjAsMTE3MjI4OC4wLDEyMTQ1MzQuMCw2MjY2NDguMCw5NjYyLjAsMTIyMzAxNC4wLDE1MTAzOTEuMCwzNjY5NDkuMCwxNTcwNDAuMCw2MDYyMjkuMCwzNzM4NDQ4LjAsMjAxMjg1MS4wLDIyODU0NTEuMCwxMjgxOTgyLjAsNzA5NjExLjAsMjAyMTgzLjAsMjI4Njk2Ny4wLDIyMzY4NDYuMCwyOTQyNDc3LjAsMjQzNzg2LjAsNDQzOTc0LjAsNzk1MTM3LjAsODQ1NDc0LjAsMTk1Mjg3NC4wLDIxMDEwNjEuMCwyNzI4OTUuMCwxMjIxNjEwLjAsNTE5MTA1LjAsMTg2NjAwMS4wLDI0MzQ2MC4wLDgwNDg3NC4wLDc2MDQyMC4wLDQ5NzUwNi4wLDU2MTMyNi4wLDc3NjYwMC4wLDI0NjU5MjUuMCwzMDAyOTc0LjAsMTI5MzQ2NS4wLDM4ODIyMDkuMCwxMzM3Mzg2LjAsODk2NTAuMCw0MTE5OTQuMCwxOTM5MDk2LjAsNTk4MDc2LjAsNDMyNDAzLjAsNzI5ODQ1LjAsMzQyODIyLjAsNjI4NzkzLjAsMjM5NjIzLjAsODY2MzczLjAsMjMyMTM3My4wLDI2MDUwNy4wLDY3NjAyNS4wLDI3MzM1MS4wLDM0MjAwNy4wLDE0MzI4OC4wLDEuMDQwMTU4M0U3CisyMixUdWUgMTUgRmViIDExLDYwOTQ4MC4wLDcyMzc1My4wLDc2Nzc1Ni4wLDI3NTk1ODEuMCw2MDQ0ODMuMCw2Mzc4NTMuMCwxMjg4NzA2LjAsODM5ODQuMCw1MzU3NzAuMCwxMjUzOTcwLjAsNTMxNjQ4LjAsMTY4MjI1OC4wLDIxOTg5MjguMCw1MTE0NzQuMCwxNzk4MDY3LjAsNTQ4ODk4LjAsODI5OTE3LjAsOTMzNzA5LjAsMTE3MjI4OC4wLDEyMTQ1MzQuMCw2MjY2NDguMCw5NjYyLjAsMTIyMzAxNC4wLDE1MTAzOTEuMCwzNjY5NDkuMCwxNTcwNDAuMCw2MDYyMjkuMCwzNzM4NDQ4LjAsMjAxMjg1MS4wLDIyODU0NTEuMCwxMjgxOTgyLjAsNzA5NjExLjAsMjAyMTgzLjAsMjI4Njk2Ny4wLDIyMzY4NDYuMCwyOTQyNDc3LjAsMjQzNzg2LjAsNDQzOTc0LjAsNzk1MTM3LjAsODQ1NDc0LjAsMTk1Mjg3NC4wLDIxMDEwNjEuMCwyNzI4OTUuMCwxMjIxNjEwLjAsNTE5MTA1LjAsMTg2NjAwMS4wLDI0MzQ2MC4wLDgwNDg3NC4wLDc2MDQyMC4wLDQ5NzUwNi4wLDU2MTMyNi4wLDc3NjYwMC4wLDI0NjU5MjUuMCwzMDAyOTc0LjAsMTI5MzQ2NS4wLDM4ODIyMDkuMCwxMzM3Mzg2LjAsODk2NTAuMCw0MTE5OTQuMCwxOTM5MDk2LjAsNTk4MDc2LjAsNDMyNDAzLjAsNzI5ODQ1LjAsMzQyODIyLjAsNjI4NzkzLjAsMjM5NjIzLjAsODY2MzczLjAsMjMyMTM3My4wLDI2MDUwNy4wLDY3NjAyNS4wLDI3MzM1MS4wLDM0MjAwNy4wLDE0MzI4OC4wLDEuMDQwMTU4M0U3CisyMyxXZWQgMTYgRmViIDExLDYwOTQ4MC4wLDcyMzc1My4wLDc2Nzc1Ni4wLDI3NTk1ODEuMCw2MDQ0ODMuMCw2Mzc4NTMuMCwxMjg4NzA2LjAsODM5ODQuMCw1MzU3NzAuMCwxMjUzOTcwLjAsNTMxNjQ4LjAsMTY4MjI1OC4wLDIxOTg5MjguMCw1MTE0NzQuMCwxNzk4MDY3LjAsNTQ4ODk4LjAsODI5OTE3LjAsOTMzNzA5LjAsMTE3MjI4OC4wLDEyMTQ1MzQuMCw2MjY2NDguMCw5NjYyLjAsMTIyMzAxNC4wLDE1MTAzOTEuMCwzNjY5NDkuMCwxNTcwNDAuMCw2MDYyMjkuMCwzNzM4NDQ4LjAsMjAxMjg1MS4wLDIyODU0NTEuMCwxMjgxOTgyLjAsNzA5NjExLjAsMjAyMTgzLjAsMjI4Njk2Ny4wLDIyMzY4NDYuMCwyOTQyNDc3LjAsMjQzNzg2LjAsNDQzOTc0LjAsNzk1MTM3LjAsODQ1NDc0LjAsMTk1Mjg3NC4wLDIxMDEwNjEuMCwyNzI4OTUuMCwxMjIxNjEwLjAsNTE5MTA1LjAsMTg2NjAwMS4wLDI0MzQ2MC4wLDgwNDg3NC4wLDc2MDQyMC4wLDQ5NzUwNi4wLDU2MTMyNi4wLDc3NjYwMC4wLDI0NjU5MjUuMCwzMDAyOTc0LjAsMTI5MzQ2NS4wLDM4ODIyMDkuMCwxMzM3Mzg2LjAsODk2NTAuMCw0MTE5OTQuMCwxOTM5MDk2LjAsNTk4MDc2LjAsNDMyNDAzLjAsNzI5ODQ1LjAsMzQyODIyLjAsNjI4NzkzLjAsMjM5NjIzLjAsODY2MzczLjAsMjMyMTM3My4wLDI2MDUwNy4wLDY3NjAyNS4wLDI3MzM1MS4wLDM0MjAwNy4wLDE0MzI4OC4wLDEuMDQwMTU4M0U3CisyNCxUaHUgMTcgRmViIDExLDYwOTQ4MC4wLDcyMzc1My4wLDc2Nzc1Ni4wLDI3NTk1ODEuMCw2MDQ0ODMuMCw2Mzc4NTMuMCwxMjg4NzA2LjAsODM5ODQuMCw1MzU3NzAuMCwxMjUzOTcwLjAsNTMxNjQ4LjAsMTY4MjI1OC4wLDIxOTg5MjguMCw1MTE0NzQuMCwxNzk4MDY3LjAsNTQ4ODk4LjAsODI5OTE3LjAsOTMzNzA5LjAsMTE3MjI4OC4wLDEyMTQ1MzQuMCw2MjY2NDguMCw5NjYyLjAsMTIyMzAxNC4wLDE1MTAzOTEuMCwzNjY5NDkuMCwxNTcwNDAuMCw2MDYyMjkuMCwzNzM4NDQ4LjAsMjAxMjg1MS4wLDIyODU0NTEuMCwxMjgxOTgyLjAsNzA5NjExLjAsMjAyMTgzLjAsMjI4Njk2Ny4wLDIyMzY4NDYuMCwyOTQyNDc3LjAsMjQzNzg2LjAsNDQzOTc0LjAsNzk1MTM3LjAsODQ1NDc0LjAsMTk1Mjg3NC4wLDIxMDEwNjEuMCwyNzI4OTUuMCwxMjIxNjEwLjAsNTE5MTA1LjAsMTg2NjAwMS4wLDI0MzQ2MC4wLDgwNDg3NC4wLDc2MDQyMC4wLDQ5NzUwNi4wLDU2MTMyNi4wLDc3NjYwMC4wLDI0NjU5MjUuMCwzMDAyOTc0LjAsMTI5MzQ2NS4wLDM4ODIyMDkuMCwxMzM3Mzg2LjAsODk2NTAuMCw0MTE5OTQuMCwxOTM5MDk2LjAsNTk4MDc2LjAsNDMyNDAzLjAsNzI5ODQ1LjAsMzQyODIyLjAsNjI4NzkzLjAsMjM5NjIzLjAsODY2MzczLjAsMjMyMTM3My4wLDI2MDUwNy4wLDY3NjAyNS4wLDI3MzM1MS4wLDM0MjAwNy4wLDE0MzI4OC4wLDEuMDQwMTU4M0U3CisyNSxGcmkgMTggRmViIDExLDYwOTQ4MC4wLDcyMzc1My4wLDc2Nzc1Ni4wLDI3NTk1ODEuMCw2MDQ0ODMuMCw2Mzc4NTMuMCwxMjg4NzA2LjAsODM5ODQuMCw1MzU3NzAuMCwxMjUzOTcwLjAsNTMxNjQ4LjAsMTY4MjI1OC4wLDIxOTg5MjguMCw1MTE0NzQuMCwxNzk4MDY3LjAsNTQ4ODk4LjAsODI5OTE3LjAsOTMzNzA5LjAsMTE3MjI4OC4wLDEyMTQ1MzQuMCw2MjY2NDguMCw5NjYyLjAsMTIyMzAxNC4wLDE1MTAzOTEuMCwzNjY5NDkuMCwxNTcwNDAuMCw2MDYyMjkuMCwzNzM4NDQ4LjAsMjAxMjg1MS4wLDIyODU0NTEuMCwxMjgxOTgyLjAsNzA5NjExLjAsMjAyMTgzLjAsMjI4Njk2Ny4wLDIyMzY4NDYuMCwyOTQyNDc3LjAsMjQzNzg2LjAsNDQzOTc0LjAsNzk1MTM3LjAsODQ1NDc0LjAsMTk1Mjg3NC4wLDIxMDEwNjEuMCwyNzI4OTUuMCwxMjIxNjEwLjAsNTE5MTA1LjAsMTg2NjAwMS4wLDI0MzQ2MC4wLDgwNDg3NC4wLDc2MDQyMC4wLDQ5NzUwNi4wLDU2MTMyNi4wLDc3NjYwMC4wLDI0NjU5MjUuMCwzMDAyOTc0LjAsMTI5MzQ2NS4wLDM4ODIyMDkuMCwxMzM3Mzg2LjAsODk2NTAuMCw0MTE5OTQuMCwxOTM5MDk2LjAsNTk4MDc2LjAsNDMyNDAzLjAsNzI5ODQ1LjAsMzQyODIyLjAsNjI4NzkzLjAsMjM5NjIzLjAsODY2MzczLjAsMjMyMTM3My4wLDI2MDUwNy4wLDY3NjAyNS4wLDI3MzM1MS4wLDM0MjAwNy4wLDE0MzI4OC4wLDEuMDQwMTU4M0U3CisyNixTYXQgMTkgRmViIDExLDYwOTQ4MC4wLDcyMzc1My4wLDc2Nzc1Ni4wLDI3NTk1ODEuMCw2MDQ0ODMuMCw2Mzc4NTMuMCwxMjg4NzA2LjAsODM5ODQuMCw1MzU3NzAuMCwxMjUzOTcwLjAsNTMxNjQ4LjAsMTY4MjI1OC4wLDIxOTg5MjguMCw1MTE0NzQuMCwxNzk4MDY3LjAsNTQ4ODk4LjAsODI5OTE3LjAsOTMzNzA5LjAsMTE3MjI4OC4wLDEyMTQ1MzQuMCw2MjY2NDguMCw5NjYyLjAsMTIyMzAxNC4wLDE1MTAzOTEuMCwzNjY5NDkuMCwxNTcwNDAuMCw2MDYyMjkuMCwzNzM4NDQ4LjAsMjAxMjg1MS4wLDIyODU0NTEuMCwxMjgxOTgyLjAsNzA5NjExLjAsMjAyMTgzLjAsMjI4Njk2Ny4wLDIyMzY4NDYuMCwyOTQyNDc3LjAsMjQzNzg2LjAsNDQzOTc0LjAsNzk1MTM3LjAsODQ1NDc0LjAsMTk1Mjg3NC4wLDIxMDEwNjEuMCwyNzI4OTUuMCwxMjIxNjEwLjAsNTE5MTA1LjAsMTg2NjAwMS4wLDI0MzQ2MC4wLDgwNDg3NC4wLDc2MDQyMC4wLDQ5NzUwNi4wLDU2MTMyNi4wLDc3NjYwMC4wLDI0NjU5MjUuMCwzMDAyOTc0LjAsMTI5MzQ2NS4wLDM4ODIyMDkuMCwxMzM3Mzg2LjAsODk2NTAuMCw0MTE5OTQuMCwxOTM5MDk2LjAsNTk4MDc2LjAsNDMyNDAzLjAsNzI5ODQ1LjAsMzQyODIyLjAsNjI4NzkzLjAsMjM5NjIzLjAsODY2MzczLjAsMjMyMTM3My4wLDI2MDUwNy4wLDY3NjAyNS4wLDI3MzM1MS4wLDM0MjAwNy4wLDE0MzI4OC4wLDEuMDQwMTU4M0U3CisyNyxTdW4gMjAgRmViIDExLDYwOTQ4MC4wLDcyMzc1My4wLDc2Nzc1Ni4wLDI3NTk1ODEuMCw2MDQ0ODMuMCw2Mzc4NTMuMCwxMjg4NzA2LjAsODM5ODQuMCw1MzU3NzAuMCwxMjUzOTcwLjAsNTMxNjQ4LjAsMTY4MjI1OC4wLDIxOTg5MjguMCw1MTE0NzQuMCwxNzk4MDY3LjAsNTQ4ODk4LjAsODI5OTE3LjAsOTMzNzA5LjAsMTE3MjI4OC4wLDEyMTQ1MzQuMCw2MjY2NDguMCw5NjYyLjAsMTIyMzAxNC4wLDE1MTAzOTEuMCwzNjY5NDkuMCwxNTcwNDAuMCw2MDYyMjkuMCwzNzM4NDQ4LjAsMjAxMjg1MS4wLDIyODU0NTEuMCwxMjgxOTgyLjAsNzA5NjExLjAsMjAyMTgzLjAsMjI4Njk2Ny4wLDIyMzY4NDYuMCwyOTQyNDc3LjAsMjQzNzg2LjAsNDQzOTc0LjAsNzk1MTM3LjAsODQ1NDc0LjAsMTk1Mjg3NC4wLDIxMDEwNjEuMCwyNzI4OTUuMCwxMjIxNjEwLjAsNTE5MTA1LjAsMTg2NjAwMS4wLDI0MzQ2MC4wLDgwNDg3NC4wLDc2MDQyMC4wLDQ5NzUwNi4wLDU2MTMyNi4wLDc3NjYwMC4wLDI0NjU5MjUuMCwzMDAyOTc0LjAsMTI5MzQ2NS4wLDM4ODIyMDkuMCwxMzM3Mzg2LjAsODk2NTAuMCw0MTE5OTQuMCwxOTM5MDk2LjAsNTk4MDc2LjAsNDMyNDAzLjAsNzI5ODQ1LjAsMzQyODIyLjAsNjI4NzkzLjAsMjM5NjIzLjAsODY2MzczLjAsMjMyMTM3My4wLDI2MDUwNy4wLDY3NjAyNS4wLDI3MzM1MS4wLDM0MjAwNy4wLDE0MzI4OC4wLDEuMDQwMTU4M0U3CisyOCxNb24gMjEgRmViIDExLDYwOTQ4MC4wLDcyMzc1My4wLDc2Nzc1Ni4wLDI3NTk1ODEuMCw2MDQ0ODMuMCw2Mzc4NTMuMCwxMjg4NzA2LjAsODM5ODQuMCw1MzU3NzAuMCwxMjUzOTcwLjAsNTMxNjQ4LjAsMTY4MjI1OC4wLDIxOTg5MjguMCw1MTE0NzQuMCwxNzk4MDY3LjAsNTQ4ODk4LjAsODI5OTE3LjAsOTMzNzA5LjAsMTE3MjI4OC4wLDEyMTQ1MzQuMCw2MjY2NDguMCw5NjYyLjAsMTIyMzAxNC4wLDE1MTAzOTEuMCwzNjY5NDkuMCwxNTcwNDAuMCw2MDYyMjkuMCwzNzM4NDQ4LjAsMjAxMjg1MS4wLDIyODU0NTEuMCwxMjgxOTgyLjAsNzA5NjExLjAsMjAyMTgzLjAsMjI4Njk2Ny4wLDIyMzY4NDYuMCwyOTQyNDc3LjAsMjQzNzg2LjAsNDQzOTc0LjAsNzk1MTM3LjAsODQ1NDc0LjAsMTk1Mjg3NC4wLDIxMDEwNjEuMCwyNzI4OTUuMCwxMjIxNjEwLjAsNTE5MTA1LjAsMTg2NjAwMS4wLDI0MzQ2MC4wLDgwNDg3NC4wLDc2MDQyMC4wLDQ5NzUwNi4wLDU2MTMyNi4wLDc3NjYwMC4wLDI0NjU5MjUuMCwzMDAyOTc0LjAsMTI5MzQ2NS4wLDM4ODIyMDkuMCwxMzM3Mzg2LjAsODk2NTAuMCw0MTE5OTQuMCwxOTM5MDk2LjAsNTk4MDc2LjAsNDMyNDAzLjAsNzI5ODQ1LjAsMzQyODIyLjAsNjI4NzkzLjAsMjM5NjIzLjAsODY2MzczLjAsMjMyMTM3My4wLDI2MDUwNy4wLDY3NjAyNS4wLDI3MzM1MS4wLDM0MjAwNy4wLDE0MzI4OC4wLDEuMDQwMTU4M0U3CisyOSxUdWUgMjIgRmViIDExLDYwOTQ4MC4wLDcyMzc1My4wLDc2Nzc1Ni4wLDI3NTk1ODEuMCw2MDQ0ODMuMCw2Mzc4NTMuMCwxMjg4NzA2LjAsODM5ODQuMCw1MzU3NzAuMCwxMjUzOTcwLjAsNTMxNjQ4LjAsMTY4MjI1OC4wLDIxOTg5MjguMCw1MTE0NzQuMCwxNzk4MDY3LjAsNTQ4ODk4LjAsODI5OTE3LjAsOTMzNzA5LjAsMTE3MjI4OC4wLDEyMTQ1MzQuMCw2MjY2NDguMCw5NjYyLjAsMTIyMzAxNC4wLDE1MTAzOTEuMCwzNjY5NDkuMCwxNTcwNDAuMCw2MDYyMjkuMCwzNzM4NDQ4LjAsMjAxMjg1MS4wLDIyODU0NTEuMCwxMjgxOTgyLjAsNzA5NjExLjAsMjAyMTgzLjAsMjI4Njk2Ny4wLDIyMzY4NDYuMCwyOTQyNDc3LjAsMjQzNzg2LjAsNDQzOTc0LjAsNzk1MTM3LjAsODQ1NDc0LjAsMTk1Mjg3NC4wLDIxMDEwNjEuMCwyNzI4OTUuMCwxMjIxNjEwLjAsNTE5MTA1LjAsMTg2NjAwMS4wLDI0MzQ2MC4wLDgwNDg3NC4wLDc2MDQyMC4wLDQ5NzUwNi4wLDU2MTMyNi4wLDc3NjYwMC4wLDI0NjU5MjUuMCwzMDAyOTc0LjAsMTI5MzQ2NS4wLDM4ODIyMDkuMCwxMzM3Mzg2LjAsODk2NTAuMCw0MTE5OTQuMCwxOTM5MDk2LjAsNTk4MDc2LjAsNDMyNDAzLjAsNzI5ODQ1LjAsMzQyODIyLjAsNjI4NzkzLjAsMjM5NjIzLjAsODY2MzczLjAsMjMyMTM3My4wLDI2MDUwNy4wLDY3NjAyNS4wLDI3MzM1MS4wLDM0MjAwNy4wLDE0MzI4OC4wLDEuMDQwMTU4M0U3CiszMCxXZWQgMjMgRmViIDExLDYwOTQ4MC4wLDcyMzc1My4wLDc2Nzc1Ni4wLDI3NTk1ODEuMCw2MDQ0ODMuMCw2Mzc4NTMuMCwxMjg4NzA2LjAsODM5ODQuMCw1MzU3NzAuMCwxMjUzOTcwLjAsNTMxNjQ4LjAsMTY4MjI1OC4wLDIxOTg5MjguMCw1MTE0NzQuMCwxNzk4MDY3LjAsNTQ4ODk4LjAsODI5OTE3LjAsOTMzNzA5LjAsMTE3MjI4OC4wLDEyMTQ1MzQuMCw2MjY2NDguMCw5NjYyLjAsMTIyMzAxNC4wLDE1MTAzOTEuMCwzNjY5NDkuMCwxNTcwNDAuMCw2MDYyMjkuMCwzNzM4NDQ4LjAsMjAxMjg1MS4wLDIyODU0NTEuMCwxMjgxOTgyLjAsNzA5NjExLjAsMjAyMTgzLjAsMjI4Njk2Ny4wLDIyMzY4NDYuMCwyOTQyNDc3LjAsMjQzNzg2LjAsNDQzOTc0LjAsNzk1MTM3LjAsODQ1NDc0LjAsMTk1Mjg3NC4wLDIxMDEwNjEuMCwyNzI4OTUuMCwxMjIxNjEwLjAsNTE5MTA1LjAsMTg2NjAwMS4wLDI0MzQ2MC4wLDgwNDg3NC4wLDc2MDQyMC4wLDQ5NzUwNi4wLDU2MTMyNi4wLDc3NjYwMC4wLDI0NjU5MjUuMCwzMDAyOTc0LjAsMTI5MzQ2NS4wLDM4ODIyMDkuMCwxMzM3Mzg2LjAsODk2NTAuMCw0MTE5OTQuMCwxOTM5MDk2LjAsNTk4MDc2LjAsNDMyNDAzLjAsNzI5ODQ1LjAsMzQyODIyLjAsNjI4NzkzLjAsMjM5NjIzLjAsODY2MzczLjAsMjMyMTM3My4wLDI2MDUwNy4wLDY3NjAyNS4wLDI3MzM1MS4wLDM0MjAwNy4wLDE0MzI4OC4wLDEuMDQwMTU4M0U3CiszMSxUaHUgMjQgRmViIDExLDYwOTQ4MC4wLDcyMzc1My4wLDc2Nzc1Ni4wLDI3NTk1ODEuMCw2MDQ0ODMuMCw2Mzc4NTMuMCwxMjg4NzA2LjAsODM5ODQuMCw1MzU3NzAuMCwxMjUzOTcwLjAsNTMxNjQ4LjAsMTY4MjI1OC4wLDIxOTg5MjguMCw1MTE0NzQuMCwxNzk4MDY3LjAsNTQ4ODk4LjAsODI5OTE3LjAsOTMzNzA5LjAsMTE3MjI4OC4wLDEyMTQ1MzQuMCw2MjY2NDguMCw5NjYyLjAsMTIyMzAxNC4wLDE1MTAzOTEuMCwzNjY5NDkuMCwxNTcwNDAuMCw2MDYyMjkuMCwzNzM4NDQ4LjAsMjAxMjg1MS4wLDIyODU0NTEuMCwxMjgxOTgyLjAsNzA5NjExLjAsMjAyMTgzLjAsMjI4Njk2Ny4wLDIyMzY4NDYuMCwyOTQyNDc3LjAsMjQzNzg2LjAsNDQzOTc0LjAsNzk1MTM3LjAsODQ1NDc0LjAsMTk1Mjg3NC4wLDIxMDEwNjEuMCwyNzI4OTUuMCwxMjIxNjEwLjAsNTE5MTA1LjAsMTg2NjAwMS4wLDI0MzQ2MC4wLDgwNDg3NC4wLDc2MDQyMC4wLDQ5NzUwNi4wLDU2MTMyNi4wLDc3NjYwMC4wLDI0NjU5MjUuMCwzMDAyOTc0LjAsMTI5MzQ2NS4wLDM4ODIyMDkuMCwxMzM3Mzg2LjAsODk2NTAuMCw0MTE5OTQuMCwxOTM5MDk2LjAsNTk4MDc2LjAsNDMyNDAzLjAsNzI5ODQ1LjAsMzQyODIyLjAsNjI4NzkzLjAsMjM5NjIzLjAsODY2MzczLjAsMjMyMTM3My4wLDI2MDUwNy4wLDY3NjAyNS4wLDI3MzM1MS4wLDM0MjAwNy4wLDE0MzI4OC4wLDEuMDQwMTU4M0U3CiszMixGcmkgMjUgRmViIDExLDYwOTQ4MC4wLDcyMzc1My4wLDc2Nzc1Ni4wLDI3NTk1ODEuMCw2MDQ0ODMuMCw2Mzc4NTMuMCwxMjg4NzA2LjAsODM5ODQuMCw1MzU3NzAuMCwxMjUzOTcwLjAsNTMxNjQ4LjAsMTY4MjI1OC4wLDIxOTg5MjguMCw1MTE0NzQuMCwxNzk4MDY3LjAsNTQ4ODk4LjAsODI5OTE3LjAsOTMzNzA5LjAsMTE3MjI4OC4wLDEyMTQ1MzQuMCw2MjY2NDguMCw5NjYyLjAsMTIyMzAxNC4wLDE1MTAzOTEuMCwzNjY5NDkuMCwxNTcwNDAuMCw2MDYyMjkuMCwzNzM4NDQ4LjAsMjAxMjg1MS4wLDIyODU0NTEuMCwxMjgxOTgyLjAsNzA5NjExLjAsMjAyMTgzLjAsMjI4Njk2Ny4wLDIyMzY4NDYuMCwyOTQyNDc3LjAsMjQzNzg2LjAsNDQzOTc0LjAsNzk1MTM3LjAsODQ1NDc0LjAsMTk1Mjg3NC4wLDIxMDEwNjEuMCwyNzI4OTUuMCwxMjIxNjEwLjAsNTE5MTA1LjAsMTg2NjAwMS4wLDI0MzQ2MC4wLDgwNDg3NC4wLDc2MDQyMC4wLDQ5NzUwNi4wLDU2MTMyNi4wLDc3NjYwMC4wLDI0NjU5MjUuMCwzMDAyOTc0LjAsMTI5MzQ2NS4wLDM4ODIyMDkuMCwxMzM3Mzg2LjAsODk2NTAuMCw0MTE5OTQuMCwxOTM5MDk2LjAsNTk4MDc2LjAsNDMyNDAzLjAsNzI5ODQ1LjAsMzQyODIyLjAsNjI4NzkzLjAsMjM5NjIzLjAsODY2MzczLjAsMjMyMTM3My4wLDI2MDUwNy4wLDY3NjAyNS4wLDI3MzM1MS4wLDM0MjAwNy4wLDE0MzI4OC4wLDEuMDQwMTU4M0U3CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNFSVJfUktfUmVmZXJlbmNlL2F1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwvaHVtYW4vRGVhdGhzXzAuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTRUlSX1JLX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL2h1bWFuL0RlYXRoc18wLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YjEzOTBjCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTRUlSX1JLX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL2h1bWFuL0RlYXRoc18wLmNzdgpAQCAtMCwwICsxLDMzIEBACitpdGVyYXRpb24sdGltZSxzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9ub2RlL3RyYW5zcG9ydC9waXBlL1BITAorMSxUdWUgMjUgSmFuIDExLDAuMAorMixXZWQgMjYgSmFuIDExLDAuMAorMyxUaHUgMjcgSmFuIDExLDAuMAorNCxGcmkgMjggSmFuIDExLDAuMAorNSxTYXQgMjkgSmFuIDExLDAuMAorNixTdW4gMzAgSmFuIDExLDAuMAorNyxNb24gMzEgSmFuIDExLDAuMAorOCxUdWUgMSBGZWIgMTEsMC4wCis5LFdlZCAyIEZlYiAxMSwwLjAKKzEwLFRodSAzIEZlYiAxMSwwLjAKKzExLEZyaSA0IEZlYiAxMSwwLjAKKzEyLFNhdCA1IEZlYiAxMSwwLjAKKzEzLFN1biA2IEZlYiAxMSwwLjAKKzE0LE1vbiA3IEZlYiAxMSwwLjAKKzE1LFR1ZSA4IEZlYiAxMSwwLjAKKzE2LFdlZCA5IEZlYiAxMSwwLjAKKzE3LFRodSAxMCBGZWIgMTEsMC4wCisxOCxGcmkgMTEgRmViIDExLDAuMAorMTksU2F0IDEyIEZlYiAxMSwwLjAKKzIwLFN1biAxMyBGZWIgMTEsMC4wCisyMSxNb24gMTQgRmViIDExLDAuMAorMjIsVHVlIDE1IEZlYiAxMSwwLjAKKzIzLFdlZCAxNiBGZWIgMTEsMC4wCisyNCxUaHUgMTcgRmViIDExLDAuMAorMjUsRnJpIDE4IEZlYiAxMSwwLjAKKzI2LFNhdCAxOSBGZWIgMTEsMC4wCisyNyxTdW4gMjAgRmViIDExLDAuMAorMjgsTW9uIDIxIEZlYiAxMSwwLjAKKzI5LFR1ZSAyMiBGZWIgMTEsMC4wCiszMCxXZWQgMjMgRmViIDExLDAuMAorMzEsVGh1IDI0IEZlYiAxMSwwLjAKKzMyLEZyaSAyNSBGZWIgMTEsMC4wCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNFSVJfUktfUmVmZXJlbmNlL2F1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwvaHVtYW4vRGVhdGhzXzEuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTRUlSX1JLX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL2h1bWFuL0RlYXRoc18xLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NGMwMjMyCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTRUlSX1JLX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL2h1bWFuL0RlYXRoc18xLmNzdgpAQCAtMCwwICsxLDMzIEBACitpdGVyYXRpb24sdGltZSxzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9ub2RlL3RyYW5zcG9ydC9waXBlL1BILTExLHN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL25vZGUvdHJhbnNwb3J0L3BpcGUvUEgtMyxzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9ub2RlL3RyYW5zcG9ydC9waXBlL1BILTcsc3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vbm9kZS90cmFuc3BvcnQvcGlwZS9QSC1OQ1IKKzEsVHVlIDI1IEphbiAxMSwwLjAsMC4wLDAuMCwwLjAKKzIsV2VkIDI2IEphbiAxMSwwLjAsMC4wLDAuMCwwLjAKKzMsVGh1IDI3IEphbiAxMSwwLjAsMC4wLDAuMCwwLjAKKzQsRnJpIDI4IEphbiAxMSwwLjAsMC4wLDAuMCwwLjAKKzUsU2F0IDI5IEphbiAxMSwwLjAsMC4wLDAuMCwwLjAKKzYsU3VuIDMwIEphbiAxMSwwLjAsMC4wLDAuMCwwLjAKKzcsTW9uIDMxIEphbiAxMSwwLjAsMC4wLDAuMCwwLjAKKzgsVHVlIDEgRmViIDExLDAuMCwwLjAsMC4wLDAuMAorOSxXZWQgMiBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wCisxMCxUaHUgMyBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wCisxMSxGcmkgNCBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wCisxMixTYXQgNSBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wCisxMyxTdW4gNiBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wCisxNCxNb24gNyBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wCisxNSxUdWUgOCBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wCisxNixXZWQgOSBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wCisxNyxUaHUgMTAgRmViIDExLDAuMCwwLjAsMC4wLDAuMAorMTgsRnJpIDExIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAKKzE5LFNhdCAxMiBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wCisyMCxTdW4gMTMgRmViIDExLDAuMCwwLjAsMC4wLDAuMAorMjEsTW9uIDE0IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAKKzIyLFR1ZSAxNSBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wCisyMyxXZWQgMTYgRmViIDExLDAuMCwwLjAsMC4wLDAuMAorMjQsVGh1IDE3IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAKKzI1LEZyaSAxOCBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wCisyNixTYXQgMTkgRmViIDExLDAuMCwwLjAsMC4wLDAuMAorMjcsU3VuIDIwIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAKKzI4LE1vbiAyMSBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wCisyOSxUdWUgMjIgRmViIDExLDAuMCwwLjAsMC4wLDAuMAorMzAsV2VkIDIzIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAKKzMxLFRodSAyNCBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wCiszMixGcmkgMjUgRmViIDExLDAuMCwwLjAsMC4wLDAuMApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTRUlSX1JLX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL2h1bWFuL0RlYXRoc18yLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0VJUl9SS19SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9odW1hbi9EZWF0aHNfMi5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTMwZDZlMQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0VJUl9SS19SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9odW1hbi9EZWF0aHNfMi5jc3YKQEAgLTAsMCArMSwzMyBAQAoraXRlcmF0aW9uLHRpbWUsUEgtMS1HNjQwMDAxLFBILTEtRzY0MDAwMixQSC0xLUc2NDAwMDMsUEgtMS1HNjQwMDA0LFBILTEwLUc2NTAwMDEsUEgtMTAtRzY1MDAwMixQSC0xMC1HNjUwMDAzLFBILTEwLUc2NTAwMDQsUEgtMTAtRzY1MDAwNSxQSC0xMC1HNjUwMDA2LFBILTEwLUc2NTAwMDcsUEgtMTEtRzY2MDAwMSxQSC0xMS1HNjYwMDAyLFBILTExLUc2NjAwMDMsUEgtMTEtRzY2MDAwNCxQSC0xMS1HNjYwMDA1LFBILTEyLUc2NzAwMDEsUEgtMTItRzY3MDAwMixQSC0xMi1HNjcwMDAzLFBILTEyLUc2NzAwMDQsUEgtMTItRzY3MDAwNSxQSC0yLUc2ODAwMDEsUEgtMi1HNjgwMDAyLFBILTItRzY4MDAwMyxQSC0yLUc2ODAwMDQsUEgtMi1HNjgwMDA1LFBILTMtRzY5MDAwMSxQSC0zLUc2OTAwMDIsUEgtMy1HNjkwMDAzLFBILTMtRzY5MDAwNCxQSC0zLUc2OTAwMDUsUEgtMy1HNjkwMDA2LFBILTQtRzcwMDAwMSxQSC00LUc3MDAwMDIsUEgtNC1HNzAwMDAzLFBILTQtRzcwMDAwNCxQSC00LUc3MDAwMDUsUEgtNC1HNzAwMDA2LFBILTQtRzcwMDAwNyxQSC00LUc3MDAwMDgsUEgtNC1HNzAwMDA5LFBILTQtRzcwMDAxMCxQSC00LUc3MDAwMTEsUEgtNS1HNzEwMDAxLFBILTUtRzcxMDAwMixQSC01LUc3MTAwMDMsUEgtNS1HNzEwMDA0LFBILTUtRzcxMDAwNSxQSC01LUc3MTAwMDYsUEgtNi1HNzIwMDAxLFBILTYtRzcyMDAwMixQSC02LUc3MjAwMDMsUEgtNi1HNzIwMDA0LFBILTYtRzcyMDAwNSxQSC03LUc3MzAwMDEsUEgtNy1HNzMwMDAyLFBILTctRzczMDAwMyxQSC03LUc3MzAwMDQsUEgtOC1HNzQwMDAxLFBILTgtRzc0MDAwMixQSC04LUc3NDAwMDMsUEgtOC1HNzQwMDA0LFBILTgtRzc0MDAwNSxQSC05LUc3NTAwMDEsUEgtOS1HNzUwMDAyLFBILTktRzc1MDAwMyxQSC05LUc3NTAwMDQsUEgtOS1HNzUwMDA1LFBILUNBUi1HMjMwMDAxLFBILUNBUi1HMjMwMDAyLFBILUNBUi1HMjMwMDAzLFBILUNBUi1HMjMwMDA0LFBILUNBUi1HMjMwMDA1LFBILU5DUi1HNTIwMDAxCisxLFR1ZSAyNSBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMixXZWQgMjYgSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzMsVGh1IDI3IEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCis0LEZyaSAyOCBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorNSxTYXQgMjkgSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzYsU3VuIDMwIEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCis3LE1vbiAzMSBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorOCxUdWUgMSBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorOSxXZWQgMiBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTAsVGh1IDMgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzExLEZyaSA0IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxMixTYXQgNSBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTMsU3VuIDYgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzE0LE1vbiA3IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxNSxUdWUgOCBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTYsV2VkIDkgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzE3LFRodSAxMCBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTgsRnJpIDExIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxOSxTYXQgMTIgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzIwLFN1biAxMyBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjEsTW9uIDE0IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyMixUdWUgMTUgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzIzLFdlZCAxNiBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjQsVGh1IDE3IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyNSxGcmkgMTggRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzI2LFNhdCAxOSBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjcsU3VuIDIwIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyOCxNb24gMjEgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzI5LFR1ZSAyMiBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMzAsV2VkIDIzIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCiszMSxUaHUgMjQgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzMyLEZyaSAyNSBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTRUlSX1JLX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL2h1bWFuL0RlbnNpdHlfMC5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNFSVJfUktfUmVmZXJlbmNlL2F1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwvaHVtYW4vRGVuc2l0eV8wLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YjEzOTBjCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTRUlSX1JLX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL2h1bWFuL0RlbnNpdHlfMC5jc3YKQEAgLTAsMCArMSwzMyBAQAoraXRlcmF0aW9uLHRpbWUsc3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vbm9kZS90cmFuc3BvcnQvcGlwZS9QSEwKKzEsVHVlIDI1IEphbiAxMSwwLjAKKzIsV2VkIDI2IEphbiAxMSwwLjAKKzMsVGh1IDI3IEphbiAxMSwwLjAKKzQsRnJpIDI4IEphbiAxMSwwLjAKKzUsU2F0IDI5IEphbiAxMSwwLjAKKzYsU3VuIDMwIEphbiAxMSwwLjAKKzcsTW9uIDMxIEphbiAxMSwwLjAKKzgsVHVlIDEgRmViIDExLDAuMAorOSxXZWQgMiBGZWIgMTEsMC4wCisxMCxUaHUgMyBGZWIgMTEsMC4wCisxMSxGcmkgNCBGZWIgMTEsMC4wCisxMixTYXQgNSBGZWIgMTEsMC4wCisxMyxTdW4gNiBGZWIgMTEsMC4wCisxNCxNb24gNyBGZWIgMTEsMC4wCisxNSxUdWUgOCBGZWIgMTEsMC4wCisxNixXZWQgOSBGZWIgMTEsMC4wCisxNyxUaHUgMTAgRmViIDExLDAuMAorMTgsRnJpIDExIEZlYiAxMSwwLjAKKzE5LFNhdCAxMiBGZWIgMTEsMC4wCisyMCxTdW4gMTMgRmViIDExLDAuMAorMjEsTW9uIDE0IEZlYiAxMSwwLjAKKzIyLFR1ZSAxNSBGZWIgMTEsMC4wCisyMyxXZWQgMTYgRmViIDExLDAuMAorMjQsVGh1IDE3IEZlYiAxMSwwLjAKKzI1LEZyaSAxOCBGZWIgMTEsMC4wCisyNixTYXQgMTkgRmViIDExLDAuMAorMjcsU3VuIDIwIEZlYiAxMSwwLjAKKzI4LE1vbiAyMSBGZWIgMTEsMC4wCisyOSxUdWUgMjIgRmViIDExLDAuMAorMzAsV2VkIDIzIEZlYiAxMSwwLjAKKzMxLFRodSAyNCBGZWIgMTEsMC4wCiszMixGcmkgMjUgRmViIDExLDAuMApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTRUlSX1JLX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL2h1bWFuL0RlbnNpdHlfMS5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNFSVJfUktfUmVmZXJlbmNlL2F1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwvaHVtYW4vRGVuc2l0eV8xLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NGMwMjMyCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTRUlSX1JLX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL2h1bWFuL0RlbnNpdHlfMS5jc3YKQEAgLTAsMCArMSwzMyBAQAoraXRlcmF0aW9uLHRpbWUsc3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vbm9kZS90cmFuc3BvcnQvcGlwZS9QSC0xMSxzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9ub2RlL3RyYW5zcG9ydC9waXBlL1BILTMsc3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vbm9kZS90cmFuc3BvcnQvcGlwZS9QSC03LHN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL25vZGUvdHJhbnNwb3J0L3BpcGUvUEgtTkNSCisxLFR1ZSAyNSBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wCisyLFdlZCAyNiBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wCiszLFRodSAyNyBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wCis0LEZyaSAyOCBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wCis1LFNhdCAyOSBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wCis2LFN1biAzMCBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wCis3LE1vbiAzMSBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wCis4LFR1ZSAxIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAKKzksV2VkIDIgRmViIDExLDAuMCwwLjAsMC4wLDAuMAorMTAsVGh1IDMgRmViIDExLDAuMCwwLjAsMC4wLDAuMAorMTEsRnJpIDQgRmViIDExLDAuMCwwLjAsMC4wLDAuMAorMTIsU2F0IDUgRmViIDExLDAuMCwwLjAsMC4wLDAuMAorMTMsU3VuIDYgRmViIDExLDAuMCwwLjAsMC4wLDAuMAorMTQsTW9uIDcgRmViIDExLDAuMCwwLjAsMC4wLDAuMAorMTUsVHVlIDggRmViIDExLDAuMCwwLjAsMC4wLDAuMAorMTYsV2VkIDkgRmViIDExLDAuMCwwLjAsMC4wLDAuMAorMTcsVGh1IDEwIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAKKzE4LEZyaSAxMSBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wCisxOSxTYXQgMTIgRmViIDExLDAuMCwwLjAsMC4wLDAuMAorMjAsU3VuIDEzIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAKKzIxLE1vbiAxNCBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wCisyMixUdWUgMTUgRmViIDExLDAuMCwwLjAsMC4wLDAuMAorMjMsV2VkIDE2IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAKKzI0LFRodSAxNyBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wCisyNSxGcmkgMTggRmViIDExLDAuMCwwLjAsMC4wLDAuMAorMjYsU2F0IDE5IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAKKzI3LFN1biAyMCBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wCisyOCxNb24gMjEgRmViIDExLDAuMCwwLjAsMC4wLDAuMAorMjksVHVlIDIyIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAKKzMwLFdlZCAyMyBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wCiszMSxUaHUgMjQgRmViIDExLDAuMCwwLjAsMC4wLDAuMAorMzIsRnJpIDI1IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0VJUl9SS19SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9odW1hbi9EZW5zaXR5XzIuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTRUlSX1JLX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL2h1bWFuL0RlbnNpdHlfMi5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDZkNjY4NwotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0VJUl9SS19SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9odW1hbi9EZW5zaXR5XzIuY3N2CkBAIC0wLDAgKzEsMzMgQEAKK2l0ZXJhdGlvbix0aW1lLFBILTEtRzY0MDAwMSxQSC0xLUc2NDAwMDIsUEgtMS1HNjQwMDAzLFBILTEtRzY0MDAwNCxQSC0xMC1HNjUwMDAxLFBILTEwLUc2NTAwMDIsUEgtMTAtRzY1MDAwMyxQSC0xMC1HNjUwMDA0LFBILTEwLUc2NTAwMDUsUEgtMTAtRzY1MDAwNixQSC0xMC1HNjUwMDA3LFBILTExLUc2NjAwMDEsUEgtMTEtRzY2MDAwMixQSC0xMS1HNjYwMDAzLFBILTExLUc2NjAwMDQsUEgtMTEtRzY2MDAwNSxQSC0xMi1HNjcwMDAxLFBILTEyLUc2NzAwMDIsUEgtMTItRzY3MDAwMyxQSC0xMi1HNjcwMDA0LFBILTEyLUc2NzAwMDUsUEgtMi1HNjgwMDAxLFBILTItRzY4MDAwMixQSC0yLUc2ODAwMDMsUEgtMi1HNjgwMDA0LFBILTItRzY4MDAwNSxQSC0zLUc2OTAwMDEsUEgtMy1HNjkwMDAyLFBILTMtRzY5MDAwMyxQSC0zLUc2OTAwMDQsUEgtMy1HNjkwMDA1LFBILTMtRzY5MDAwNixQSC00LUc3MDAwMDEsUEgtNC1HNzAwMDAyLFBILTQtRzcwMDAwMyxQSC00LUc3MDAwMDQsUEgtNC1HNzAwMDA1LFBILTQtRzcwMDAwNixQSC00LUc3MDAwMDcsUEgtNC1HNzAwMDA4LFBILTQtRzcwMDAwOSxQSC00LUc3MDAwMTAsUEgtNC1HNzAwMDExLFBILTUtRzcxMDAwMSxQSC01LUc3MTAwMDIsUEgtNS1HNzEwMDAzLFBILTUtRzcxMDAwNCxQSC01LUc3MTAwMDUsUEgtNS1HNzEwMDA2LFBILTYtRzcyMDAwMSxQSC02LUc3MjAwMDIsUEgtNi1HNzIwMDAzLFBILTYtRzcyMDAwNCxQSC02LUc3MjAwMDUsUEgtNy1HNzMwMDAxLFBILTctRzczMDAwMixQSC03LUc3MzAwMDMsUEgtNy1HNzMwMDA0LFBILTgtRzc0MDAwMSxQSC04LUc3NDAwMDIsUEgtOC1HNzQwMDAzLFBILTgtRzc0MDAwNCxQSC04LUc3NDAwMDUsUEgtOS1HNzUwMDAxLFBILTktRzc1MDAwMixQSC05LUc3NTAwMDMsUEgtOS1HNzUwMDA0LFBILTktRzc1MDAwNSxQSC1DQVItRzIzMDAwMSxQSC1DQVItRzIzMDAwMixQSC1DQVItRzIzMDAwMyxQSC1DQVItRzIzMDAwNCxQSC1DQVItRzIzMDAwNSxQSC1OQ1ItRzUyMDAwMQorMSxUdWUgMjUgSmFuIDExLDE3NC4zNTYzMzM2NzY2MjIwNiwyNjcuMTU2MjUxMTUzNTE5NjMsNDM4LjY5MjY0NjEzNDUwNjYsNTQ3LjU3OTM3MTM3ODY4MDgsMTgwLjIyNzQ4OTU2NDY5ODg2LDgzLjUyNjg3NzQ5NjIzNTE5LDE0Ny45Mjk4ODY1ODc5OTc2LDMzMC42NDU2NjkyOTEzMzg2LDI3NS44Mjg4NzE0OTkxNzYzLDM2NS4zNjUyMjgyODU4ODkxLDE4My41ODY0NDk4MDgzNDk3MywyMTQuNzE4ODc4ODMzOTA1NiwzNzUuNjYwMzc0MTM1MTMyOCw5Ni43OTQ5MTMwNDEwMDk4MiwyMzcuOTc0OTA2MzYyMDg0MjUsMTExLjEzOTk1MzAyNTAyNjMyLDI4OS4zNjEyNDk2MDc3NTQyNSwyMjYuNjMzODk4ODgxMDQwODQsMjM0Ljk5ODA5NTYxOTkyNTgzLDE5MC42Mzc3NDM0ODk5MzA3OCwxMzYuMjk4OTM4NTc2NjQ4NjgsNDYuOTcxMzE3NDUyNjAwODgsMTM1LjgyODU2Njk4NjE1MDc1LDE1MS40MTc2NDQxMTAyNzU3LDExMy40Njk0OTUwMzY5NTIyOCw1NS40NTE5Nzc0MDExMjk5NDUsNDUwLjI5MjY1Mzk0MDQyOTMsMTM5Mi4wODYzODk4NzE1MzIyLDM2NS4yMDI2NjM0NzM0MDE1LDEwMDkuNzQyNDIyOTAzNTk2Myw0MjcuNDg0MDc3NDk1MDgxNSwxODkuNzg2MzA2NDk5MDYzOTMsNTcuNDgwODA5Njg4OTc0ODEsNjQxLjY0OTQ1ODUwNDAxMjIsMTkyMy44Mzc2MTkzMzQzMDgsMTUwNy4zMzkyNzU2NTE4NjIyLDI2Mi41ODcyNDY4NzYzNDY0LDc2LjExODA5MjgyMTUwNjM0LDE3OS41MDUzNzI5NDU2Mzg0LDU4LjA3MDY2MjI1MjU2NTM1NiwyMjQuMzM0MTkxMDU4MjE4MDcsMTI2OS42NzY2OTgwOTA0MDM4LDIwMy4xOTgwNjQwMzU3NDA4OCw1MjIuOTQ5NDg2MzAxMzY5OSwyNjEuNjQ1NjY1MzIyNTgwNjcsMzQyLjE0Njk0MzQxNTYwMDEsMTYzLjMxOTI0NTk5MTgxNTkzLDE5OS4yMDE1ODM5NjIzODA4OCwzNjMuMTU5NjU0MjMzNzI2NTQsMjcwLjA3NTQ1NzM1ODQ0OTYsMjEzLjA1MTIwMTI3NTI4NzUzLDMwMy41NjA5NTg0NDg5Nyw0NTMuMzUzMzcyNjc2NjMxMiwzOTIuODUzNzQxNDk2NTk4NiwzMjMuNzQ2NjUyMzE2NDcxODUsNzg3LjAxOTMzOTkyODY0MDksMjU2LjM4MTAyOTA2MjE4ODUsMjcwLjUxOTAxMDI1OTUwNTE0LDExMi4xMTAyNjE1MDM3MTQzOCwzMjIuNzMwODQzNDg1Nzg2NiwxNTMuNTg1MTY3MzA0MzgzNTYsMjM1LjA5MTA2NzI1Mzg0NjU3LDEyOC42NzA1MzM0NzkwNzMzOCwyNTEuODM0Mjc2MDU5NjQ4OSw0MTYuOTcxNDg1NDExMTQwNiwyMTIuMDkzMjkwODQ3OTM3NywxMzMuNzI2MzY0ODU3MTQ3MjcsMjg5LjU0MTg3MTQyOTY0MDU0LDYzLjA3MzcwMTAzMTQyNzA1LDI3OC4yOTEyMDY5ODE3MjI0LDExMS42NDQ3NDc1OTAyNjMwMiw0Ny42MzU5NDA3MjA5MzE1Myw3MS4yNTIxMTMzNzY0Mjk2MywxNjI4OC4xMDM2NjQyNjU1OAorMixXZWQgMjYgSmFuIDExLDE3NC4zNTYzMzM2NzY2MjIwNiwyNjcuMTU2MjUxMTUzNTE5NjMsNDM4LjY5MjY0NjEzNDUwNjYsNTQ3LjU3OTM3MTM3ODY4MDgsMTgwLjIyNzQ4OTU2NDY5ODg2LDgzLjUyNjg3NzQ5NjIzNTE5LDE0Ny45Mjk4ODY1ODc5OTc2LDMzMC42NDU2NjkyOTEzMzg2LDI3NS44Mjg4NzE0OTkxNzYzLDM2NS4zNjUyMjgyODU4ODkxLDE4My41ODY0NDk4MDgzNDk3MywyMTQuNzE4ODc4ODMzOTA1NiwzNzUuNjYwMzc0MTM1MTMyOCw5Ni43OTQ5MTMwNDEwMDk4MiwyMzcuOTc0OTA2MzYyMDg0MjUsMTExLjEzOTk1MzAyNTAyNjMyLDI4OS4zNjEyNDk2MDc3NTQyNSwyMjYuNjMzODk4ODgxMDQwODQsMjM0Ljk5ODA5NTYxOTkyNTgzLDE5MC42Mzc3NDM0ODk5MzA3OCwxMzYuMjk4OTM4NTc2NjQ4NjgsNDYuOTcxMzE3NDUyNjAwODgsMTM1LjgyODU2Njk4NjE1MDc1LDE1MS40MTc2NDQxMTAyNzU3LDExMy40Njk0OTUwMzY5NTIyOCw1NS40NTE5Nzc0MDExMjk5NDUsNDUwLjI5MjY1Mzk0MDQyOTMsMTM5Mi4wODYzODk4NzE1MzIyLDM2NS4yMDI2NjM0NzM0MDE1LDEwMDkuNzQyNDIyOTAzNTk2Myw0MjcuNDg0MDc3NDk1MDgxNSwxODkuNzg2MzA2NDk5MDYzOTMsNTcuNDgwODA5Njg4OTc0ODEsNjQxLjY0OTQ1ODUwNDAxMjIsMTkyMy44Mzc2MTkzMzQzMDgsMTUwNy4zMzkyNzU2NTE4NjIyLDI2Mi41ODcyNDY4NzYzNDY0LDc2LjExODA5MjgyMTUwNjM0LDE3OS41MDUzNzI5NDU2Mzg0LDU4LjA3MDY2MjI1MjU2NTM1NiwyMjQuMzM0MTkxMDU4MjE4MDcsMTI2OS42NzY2OTgwOTA0MDM4LDIwMy4xOTgwNjQwMzU3NDA4OCw1MjIuOTQ5NDg2MzAxMzY5OSwyNjEuNjQ1NjY1MzIyNTgwNjcsMzQyLjE0Njk0MzQxNTYwMDEsMTYzLjMxOTI0NTk5MTgxNTkzLDE5OS4yMDE1ODM5NjIzODA4OCwzNjMuMTU5NjU0MjMzNzI2NTQsMjcwLjA3NTQ1NzM1ODQ0OTYsMjEzLjA1MTIwMTI3NTI4NzUzLDMwMy41NjA5NTg0NDg5Nyw0NTMuMzUzMzcyNjc2NjMxMiwzOTIuODUzNzQxNDk2NTk4NiwzMjMuNzQ2NjUyMzE2NDcxODUsNzg3LjAxOTMzOTkyODY0MDksMjU2LjM4MTAyOTA2MjE4ODUsMjcwLjUxOTAxMDI1OTUwNTE0LDExMi4xMTAyNjE1MDM3MTQzOCwzMjIuNzMwODQzNDg1Nzg2NiwxNTMuNTg1MTY3MzA0MzgzNTYsMjM1LjA5MTA2NzI1Mzg0NjU3LDEyOC42NzA1MzM0NzkwNzMzOCwyNTEuODM0Mjc2MDU5NjQ4OSw0MTYuOTcxNDg1NDExMTQwNiwyMTIuMDkzMjkwODQ3OTM3NywxMzMuNzI2MzY0ODU3MTQ3MjcsMjg5LjU0MTg3MTQyOTY0MDU0LDYzLjA3MzcwMTAzMTQyNzA1LDI3OC4yOTEyMDY5ODE3MjI0LDExMS42NDQ3NDc1OTAyNjMwMiw0Ny42MzU5NDA3MjA5MzE1Myw3MS4yNTIxMTMzNzY0Mjk2MywxNjI4OC4xMDM2NjQyNjU1OAorMyxUaHUgMjcgSmFuIDExLDE3NC4zNTYzMzM2NzY2MjIwNiwyNjcuMTU2MjUxMTUzNTE5NjMsNDM4LjY5MjY0NjEzNDUwNjYsNTQ3LjU3OTM3MTM3ODY4MDgsMTgwLjIyNzQ4OTU2NDY5ODg2LDgzLjUyNjg3NzQ5NjIzNTE5LDE0Ny45Mjk4ODY1ODc5OTc2LDMzMC42NDU2NjkyOTEzMzg2LDI3NS44Mjg4NzE0OTkxNzYzLDM2NS4zNjUyMjgyODU4ODkxLDE4My41ODY0NDk4MDgzNDk3MywyMTQuNzE4ODc4ODMzOTA1NiwzNzUuNjYwMzc0MTM1MTMyOCw5Ni43OTQ5MTMwNDEwMDk4MiwyMzcuOTc0OTA2MzYyMDg0MjUsMTExLjEzOTk1MzAyNTAyNjMyLDI4OS4zNjEyNDk2MDc3NTQyNSwyMjYuNjMzODk4ODgxMDQwODQsMjM0Ljk5ODA5NTYxOTkyNTgzLDE5MC42Mzc3NDM0ODk5MzA3OCwxMzYuMjk4OTM4NTc2NjQ4NjgsNDYuOTcxMzE3NDUyNjAwODgsMTM1LjgyODU2Njk4NjE1MDc1LDE1MS40MTc2NDQxMTAyNzU3LDExMy40Njk0OTUwMzY5NTIyOCw1NS40NTE5Nzc0MDExMjk5NDUsNDUwLjI5MjY1Mzk0MDQyOTMsMTM5Mi4wODYzODk4NzE1MzIyLDM2NS4yMDI2NjM0NzM0MDE1LDEwMDkuNzQyNDIyOTAzNTk2Myw0MjcuNDg0MDc3NDk1MDgxNSwxODkuNzg2MzA2NDk5MDYzOTMsNTcuNDgwODA5Njg4OTc0ODEsNjQxLjY0OTQ1ODUwNDAxMjIsMTkyMy44Mzc2MTkzMzQzMDgsMTUwNy4zMzkyNzU2NTE4NjIyLDI2Mi41ODcyNDY4NzYzNDY0LDc2LjExODA5MjgyMTUwNjM0LDE3OS41MDUzNzI5NDU2Mzg0LDU4LjA3MDY2MjI1MjU2NTM1NiwyMjQuMzM0MTkxMDU4MjE4MDcsMTI2OS42NzY2OTgwOTA0MDM4LDIwMy4xOTgwNjQwMzU3NDA4OCw1MjIuOTQ5NDg2MzAxMzY5OSwyNjEuNjQ1NjY1MzIyNTgwNjcsMzQyLjE0Njk0MzQxNTYwMDEsMTYzLjMxOTI0NTk5MTgxNTkzLDE5OS4yMDE1ODM5NjIzODA4OCwzNjMuMTU5NjU0MjMzNzI2NTQsMjcwLjA3NTQ1NzM1ODQ0OTYsMjEzLjA1MTIwMTI3NTI4NzUzLDMwMy41NjA5NTg0NDg5Nyw0NTMuMzUzMzcyNjc2NjMxMiwzOTIuODUzNzQxNDk2NTk4NiwzMjMuNzQ2NjUyMzE2NDcxODUsNzg3LjAxOTMzOTkyODY0MDksMjU2LjM4MTAyOTA2MjE4ODUsMjcwLjUxOTAxMDI1OTUwNTE0LDExMi4xMTAyNjE1MDM3MTQzOCwzMjIuNzMwODQzNDg1Nzg2NiwxNTMuNTg1MTY3MzA0MzgzNTYsMjM1LjA5MTA2NzI1Mzg0NjU3LDEyOC42NzA1MzM0NzkwNzMzOCwyNTEuODM0Mjc2MDU5NjQ4OSw0MTYuOTcxNDg1NDExMTQwNiwyMTIuMDkzMjkwODQ3OTM3NywxMzMuNzI2MzY0ODU3MTQ3MjcsMjg5LjU0MTg3MTQyOTY0MDU0LDYzLjA3MzcwMTAzMTQyNzA1LDI3OC4yOTEyMDY5ODE3MjI0LDExMS42NDQ3NDc1OTAyNjMwMiw0Ny42MzU5NDA3MjA5MzE1Myw3MS4yNTIxMTMzNzY0Mjk2MywxNjI4OC4xMDM2NjQyNjU1OAorNCxGcmkgMjggSmFuIDExLDE3NC4zNTYzMzM2NzY2MjIwNiwyNjcuMTU2MjUxMTUzNTE5NjMsNDM4LjY5MjY0NjEzNDUwNjYsNTQ3LjU3OTM3MTM3ODY4MDgsMTgwLjIyNzQ4OTU2NDY5ODg2LDgzLjUyNjg3NzQ5NjIzNTE5LDE0Ny45Mjk4ODY1ODc5OTc2LDMzMC42NDU2NjkyOTEzMzg2LDI3NS44Mjg4NzE0OTkxNzYzLDM2NS4zNjUyMjgyODU4ODkxLDE4My41ODY0NDk4MDgzNDk3MywyMTQuNzE4ODc4ODMzOTA1NiwzNzUuNjYwMzc0MTM1MTMyOCw5Ni43OTQ5MTMwNDEwMDk4MiwyMzcuOTc0OTA2MzYyMDg0MjUsMTExLjEzOTk1MzAyNTAyNjMyLDI4OS4zNjEyNDk2MDc3NTQyNSwyMjYuNjMzODk4ODgxMDQwODQsMjM0Ljk5ODA5NTYxOTkyNTgzLDE5MC42Mzc3NDM0ODk5MzA3OCwxMzYuMjk4OTM4NTc2NjQ4NjgsNDYuOTcxMzE3NDUyNjAwODgsMTM1LjgyODU2Njk4NjE1MDc1LDE1MS40MTc2NDQxMTAyNzU3LDExMy40Njk0OTUwMzY5NTIyOCw1NS40NTE5Nzc0MDExMjk5NDUsNDUwLjI5MjY1Mzk0MDQyOTMsMTM5Mi4wODYzODk4NzE1MzIyLDM2NS4yMDI2NjM0NzM0MDE1LDEwMDkuNzQyNDIyOTAzNTk2Myw0MjcuNDg0MDc3NDk1MDgxNSwxODkuNzg2MzA2NDk5MDYzOTMsNTcuNDgwODA5Njg4OTc0ODEsNjQxLjY0OTQ1ODUwNDAxMjIsMTkyMy44Mzc2MTkzMzQzMDgsMTUwNy4zMzkyNzU2NTE4NjIyLDI2Mi41ODcyNDY4NzYzNDY0LDc2LjExODA5MjgyMTUwNjM0LDE3OS41MDUzNzI5NDU2Mzg0LDU4LjA3MDY2MjI1MjU2NTM1NiwyMjQuMzM0MTkxMDU4MjE4MDcsMTI2OS42NzY2OTgwOTA0MDM4LDIwMy4xOTgwNjQwMzU3NDA4OCw1MjIuOTQ5NDg2MzAxMzY5OSwyNjEuNjQ1NjY1MzIyNTgwNjcsMzQyLjE0Njk0MzQxNTYwMDEsMTYzLjMxOTI0NTk5MTgxNTkzLDE5OS4yMDE1ODM5NjIzODA4OCwzNjMuMTU5NjU0MjMzNzI2NTQsMjcwLjA3NTQ1NzM1ODQ0OTYsMjEzLjA1MTIwMTI3NTI4NzUzLDMwMy41NjA5NTg0NDg5Nyw0NTMuMzUzMzcyNjc2NjMxMiwzOTIuODUzNzQxNDk2NTk4NiwzMjMuNzQ2NjUyMzE2NDcxODUsNzg3LjAxOTMzOTkyODY0MDksMjU2LjM4MTAyOTA2MjE4ODUsMjcwLjUxOTAxMDI1OTUwNTE0LDExMi4xMTAyNjE1MDM3MTQzOCwzMjIuNzMwODQzNDg1Nzg2NiwxNTMuNTg1MTY3MzA0MzgzNTYsMjM1LjA5MTA2NzI1Mzg0NjU3LDEyOC42NzA1MzM0NzkwNzMzOCwyNTEuODM0Mjc2MDU5NjQ4OSw0MTYuOTcxNDg1NDExMTQwNiwyMTIuMDkzMjkwODQ3OTM3NywxMzMuNzI2MzY0ODU3MTQ3MjcsMjg5LjU0MTg3MTQyOTY0MDU0LDYzLjA3MzcwMTAzMTQyNzA1LDI3OC4yOTEyMDY5ODE3MjI0LDExMS42NDQ3NDc1OTAyNjMwMiw0Ny42MzU5NDA3MjA5MzE1Myw3MS4yNTIxMTMzNzY0Mjk2MywxNjI4OC4xMDM2NjQyNjU1OAorNSxTYXQgMjkgSmFuIDExLDE3NC4zNTYzMzM2NzY2MjIwNiwyNjcuMTU2MjUxMTUzNTE5NjMsNDM4LjY5MjY0NjEzNDUwNjYsNTQ3LjU3OTM3MTM3ODY4MDgsMTgwLjIyNzQ4OTU2NDY5ODg2LDgzLjUyNjg3NzQ5NjIzNTE5LDE0Ny45Mjk4ODY1ODc5OTc2LDMzMC42NDU2NjkyOTEzMzg2LDI3NS44Mjg4NzE0OTkxNzYzLDM2NS4zNjUyMjgyODU4ODkxLDE4My41ODY0NDk4MDgzNDk3MywyMTQuNzE4ODc4ODMzOTA1NiwzNzUuNjYwMzc0MTM1MTMyOCw5Ni43OTQ5MTMwNDEwMDk4MiwyMzcuOTc0OTA2MzYyMDg0MjUsMTExLjEzOTk1MzAyNTAyNjMyLDI4OS4zNjEyNDk2MDc3NTQyNSwyMjYuNjMzODk4ODgxMDQwODQsMjM0Ljk5ODA5NTYxOTkyNTgzLDE5MC42Mzc3NDM0ODk5MzA3OCwxMzYuMjk4OTM4NTc2NjQ4NjgsNDYuOTcxMzE3NDUyNjAwODgsMTM1LjgyODU2Njk4NjE1MDc1LDE1MS40MTc2NDQxMTAyNzU3LDExMy40Njk0OTUwMzY5NTIyOCw1NS40NTE5Nzc0MDExMjk5NDUsNDUwLjI5MjY1Mzk0MDQyOTMsMTM5Mi4wODYzODk4NzE1MzIyLDM2NS4yMDI2NjM0NzM0MDE1LDEwMDkuNzQyNDIyOTAzNTk2Myw0MjcuNDg0MDc3NDk1MDgxNSwxODkuNzg2MzA2NDk5MDYzOTMsNTcuNDgwODA5Njg4OTc0ODEsNjQxLjY0OTQ1ODUwNDAxMjIsMTkyMy44Mzc2MTkzMzQzMDgsMTUwNy4zMzkyNzU2NTE4NjIyLDI2Mi41ODcyNDY4NzYzNDY0LDc2LjExODA5MjgyMTUwNjM0LDE3OS41MDUzNzI5NDU2Mzg0LDU4LjA3MDY2MjI1MjU2NTM1NiwyMjQuMzM0MTkxMDU4MjE4MDcsMTI2OS42NzY2OTgwOTA0MDM4LDIwMy4xOTgwNjQwMzU3NDA4OCw1MjIuOTQ5NDg2MzAxMzY5OSwyNjEuNjQ1NjY1MzIyNTgwNjcsMzQyLjE0Njk0MzQxNTYwMDEsMTYzLjMxOTI0NTk5MTgxNTkzLDE5OS4yMDE1ODM5NjIzODA4OCwzNjMuMTU5NjU0MjMzNzI2NTQsMjcwLjA3NTQ1NzM1ODQ0OTYsMjEzLjA1MTIwMTI3NTI4NzUzLDMwMy41NjA5NTg0NDg5Nyw0NTMuMzUzMzcyNjc2NjMxMiwzOTIuODUzNzQxNDk2NTk4NiwzMjMuNzQ2NjUyMzE2NDcxODUsNzg3LjAxOTMzOTkyODY0MDksMjU2LjM4MTAyOTA2MjE4ODUsMjcwLjUxOTAxMDI1OTUwNTE0LDExMi4xMTAyNjE1MDM3MTQzOCwzMjIuNzMwODQzNDg1Nzg2NiwxNTMuNTg1MTY3MzA0MzgzNTYsMjM1LjA5MTA2NzI1Mzg0NjU3LDEyOC42NzA1MzM0NzkwNzMzOCwyNTEuODM0Mjc2MDU5NjQ4OSw0MTYuOTcxNDg1NDExMTQwNiwyMTIuMDkzMjkwODQ3OTM3NywxMzMuNzI2MzY0ODU3MTQ3MjcsMjg5LjU0MTg3MTQyOTY0MDU0LDYzLjA3MzcwMTAzMTQyNzA1LDI3OC4yOTEyMDY5ODE3MjI0LDExMS42NDQ3NDc1OTAyNjMwMiw0Ny42MzU5NDA3MjA5MzE1Myw3MS4yNTIxMTMzNzY0Mjk2MywxNjI4OC4xMDM2NjQyNjU1OAorNixTdW4gMzAgSmFuIDExLDE3NC4zNTYzMzM2NzY2MjIwNiwyNjcuMTU2MjUxMTUzNTE5NjMsNDM4LjY5MjY0NjEzNDUwNjYsNTQ3LjU3OTM3MTM3ODY4MDgsMTgwLjIyNzQ4OTU2NDY5ODg2LDgzLjUyNjg3NzQ5NjIzNTE5LDE0Ny45Mjk4ODY1ODc5OTc2LDMzMC42NDU2NjkyOTEzMzg2LDI3NS44Mjg4NzE0OTkxNzYzLDM2NS4zNjUyMjgyODU4ODkxLDE4My41ODY0NDk4MDgzNDk3MywyMTQuNzE4ODc4ODMzOTA1NiwzNzUuNjYwMzc0MTM1MTMyOCw5Ni43OTQ5MTMwNDEwMDk4MiwyMzcuOTc0OTA2MzYyMDg0MjUsMTExLjEzOTk1MzAyNTAyNjMyLDI4OS4zNjEyNDk2MDc3NTQyNSwyMjYuNjMzODk4ODgxMDQwODQsMjM0Ljk5ODA5NTYxOTkyNTgzLDE5MC42Mzc3NDM0ODk5MzA3OCwxMzYuMjk4OTM4NTc2NjQ4NjgsNDYuOTcxMzE3NDUyNjAwODgsMTM1LjgyODU2Njk4NjE1MDc1LDE1MS40MTc2NDQxMTAyNzU3LDExMy40Njk0OTUwMzY5NTIyOCw1NS40NTE5Nzc0MDExMjk5NDUsNDUwLjI5MjY1Mzk0MDQyOTMsMTM5Mi4wODYzODk4NzE1MzIyLDM2NS4yMDI2NjM0NzM0MDE1LDEwMDkuNzQyNDIyOTAzNTk2Myw0MjcuNDg0MDc3NDk1MDgxNSwxODkuNzg2MzA2NDk5MDYzOTMsNTcuNDgwODA5Njg4OTc0ODEsNjQxLjY0OTQ1ODUwNDAxMjIsMTkyMy44Mzc2MTkzMzQzMDgsMTUwNy4zMzkyNzU2NTE4NjIyLDI2Mi41ODcyNDY4NzYzNDY0LDc2LjExODA5MjgyMTUwNjM0LDE3OS41MDUzNzI5NDU2Mzg0LDU4LjA3MDY2MjI1MjU2NTM1NiwyMjQuMzM0MTkxMDU4MjE4MDcsMTI2OS42NzY2OTgwOTA0MDM4LDIwMy4xOTgwNjQwMzU3NDA4OCw1MjIuOTQ5NDg2MzAxMzY5OSwyNjEuNjQ1NjY1MzIyNTgwNjcsMzQyLjE0Njk0MzQxNTYwMDEsMTYzLjMxOTI0NTk5MTgxNTkzLDE5OS4yMDE1ODM5NjIzODA4OCwzNjMuMTU5NjU0MjMzNzI2NTQsMjcwLjA3NTQ1NzM1ODQ0OTYsMjEzLjA1MTIwMTI3NTI4NzUzLDMwMy41NjA5NTg0NDg5Nyw0NTMuMzUzMzcyNjc2NjMxMiwzOTIuODUzNzQxNDk2NTk4NiwzMjMuNzQ2NjUyMzE2NDcxODUsNzg3LjAxOTMzOTkyODY0MDksMjU2LjM4MTAyOTA2MjE4ODUsMjcwLjUxOTAxMDI1OTUwNTE0LDExMi4xMTAyNjE1MDM3MTQzOCwzMjIuNzMwODQzNDg1Nzg2NiwxNTMuNTg1MTY3MzA0MzgzNTYsMjM1LjA5MTA2NzI1Mzg0NjU3LDEyOC42NzA1MzM0NzkwNzMzOCwyNTEuODM0Mjc2MDU5NjQ4OSw0MTYuOTcxNDg1NDExMTQwNiwyMTIuMDkzMjkwODQ3OTM3NywxMzMuNzI2MzY0ODU3MTQ3MjcsMjg5LjU0MTg3MTQyOTY0MDU0LDYzLjA3MzcwMTAzMTQyNzA1LDI3OC4yOTEyMDY5ODE3MjI0LDExMS42NDQ3NDc1OTAyNjMwMiw0Ny42MzU5NDA3MjA5MzE1Myw3MS4yNTIxMTMzNzY0Mjk2MywxNjI4OC4xMDM2NjQyNjU1OAorNyxNb24gMzEgSmFuIDExLDE3NC4zNTYzMzM2NzY2MjIwNiwyNjcuMTU2MjUxMTUzNTE5NjMsNDM4LjY5MjY0NjEzNDUwNjYsNTQ3LjU3OTM3MTM3ODY4MDgsMTgwLjIyNzQ4OTU2NDY5ODg2LDgzLjUyNjg3NzQ5NjIzNTE5LDE0Ny45Mjk4ODY1ODc5OTc2LDMzMC42NDU2NjkyOTEzMzg2LDI3NS44Mjg4NzE0OTkxNzYzLDM2NS4zNjUyMjgyODU4ODkxLDE4My41ODY0NDk4MDgzNDk3MywyMTQuNzE4ODc4ODMzOTA1NiwzNzUuNjYwMzc0MTM1MTMyOCw5Ni43OTQ5MTMwNDEwMDk4MiwyMzcuOTc0OTA2MzYyMDg0MjUsMTExLjEzOTk1MzAyNTAyNjMyLDI4OS4zNjEyNDk2MDc3NTQyNSwyMjYuNjMzODk4ODgxMDQwODQsMjM0Ljk5ODA5NTYxOTkyNTgzLDE5MC42Mzc3NDM0ODk5MzA3OCwxMzYuMjk4OTM4NTc2NjQ4NjgsNDYuOTcxMzE3NDUyNjAwODgsMTM1LjgyODU2Njk4NjE1MDc1LDE1MS40MTc2NDQxMTAyNzU3LDExMy40Njk0OTUwMzY5NTIyOCw1NS40NTE5Nzc0MDExMjk5NDUsNDUwLjI5MjY1Mzk0MDQyOTMsMTM5Mi4wODYzODk4NzE1MzIyLDM2NS4yMDI2NjM0NzM0MDE1LDEwMDkuNzQyNDIyOTAzNTk2Myw0MjcuNDg0MDc3NDk1MDgxNSwxODkuNzg2MzA2NDk5MDYzOTMsNTcuNDgwODA5Njg4OTc0ODEsNjQxLjY0OTQ1ODUwNDAxMjIsMTkyMy44Mzc2MTkzMzQzMDgsMTUwNy4zMzkyNzU2NTE4NjIyLDI2Mi41ODcyNDY4NzYzNDY0LDc2LjExODA5MjgyMTUwNjM0LDE3OS41MDUzNzI5NDU2Mzg0LDU4LjA3MDY2MjI1MjU2NTM1NiwyMjQuMzM0MTkxMDU4MjE4MDcsMTI2OS42NzY2OTgwOTA0MDM4LDIwMy4xOTgwNjQwMzU3NDA4OCw1MjIuOTQ5NDg2MzAxMzY5OSwyNjEuNjQ1NjY1MzIyNTgwNjcsMzQyLjE0Njk0MzQxNTYwMDEsMTYzLjMxOTI0NTk5MTgxNTkzLDE5OS4yMDE1ODM5NjIzODA4OCwzNjMuMTU5NjU0MjMzNzI2NTQsMjcwLjA3NTQ1NzM1ODQ0OTYsMjEzLjA1MTIwMTI3NTI4NzUzLDMwMy41NjA5NTg0NDg5Nyw0NTMuMzUzMzcyNjc2NjMxMiwzOTIuODUzNzQxNDk2NTk4NiwzMjMuNzQ2NjUyMzE2NDcxODUsNzg3LjAxOTMzOTkyODY0MDksMjU2LjM4MTAyOTA2MjE4ODUsMjcwLjUxOTAxMDI1OTUwNTE0LDExMi4xMTAyNjE1MDM3MTQzOCwzMjIuNzMwODQzNDg1Nzg2NiwxNTMuNTg1MTY3MzA0MzgzNTYsMjM1LjA5MTA2NzI1Mzg0NjU3LDEyOC42NzA1MzM0NzkwNzMzOCwyNTEuODM0Mjc2MDU5NjQ4OSw0MTYuOTcxNDg1NDExMTQwNiwyMTIuMDkzMjkwODQ3OTM3NywxMzMuNzI2MzY0ODU3MTQ3MjcsMjg5LjU0MTg3MTQyOTY0MDU0LDYzLjA3MzcwMTAzMTQyNzA1LDI3OC4yOTEyMDY5ODE3MjI0LDExMS42NDQ3NDc1OTAyNjMwMiw0Ny42MzU5NDA3MjA5MzE1Myw3MS4yNTIxMTMzNzY0Mjk2MywxNjI4OC4xMDM2NjQyNjU1OAorOCxUdWUgMSBGZWIgMTEsMTc0LjM1NjMzMzY3NjYyMjA2LDI2Ny4xNTYyNTExNTM1MTk2Myw0MzguNjkyNjQ2MTM0NTA2Niw1NDcuNTc5MzcxMzc4NjgwOCwxODAuMjI3NDg5NTY0Njk4ODYsODMuNTI2ODc3NDk2MjM1MTksMTQ3LjkyOTg4NjU4Nzk5NzYsMzMwLjY0NTY2OTI5MTMzODYsMjc1LjgyODg3MTQ5OTE3NjMsMzY1LjM2NTIyODI4NTg4OTEsMTgzLjU4NjQ0OTgwODM0OTczLDIxNC43MTg4Nzg4MzM5MDU2LDM3NS42NjAzNzQxMzUxMzI4LDk2Ljc5NDkxMzA0MTAwOTgyLDIzNy45NzQ5MDYzNjIwODQyNSwxMTEuMTM5OTUzMDI1MDI2MzIsMjg5LjM2MTI0OTYwNzc1NDI1LDIyNi42MzM4OTg4ODEwNDA4NCwyMzQuOTk4MDk1NjE5OTI1ODMsMTkwLjYzNzc0MzQ4OTkzMDc4LDEzNi4yOTg5Mzg1NzY2NDg2OCw0Ni45NzEzMTc0NTI2MDA4OCwxMzUuODI4NTY2OTg2MTUwNzUsMTUxLjQxNzY0NDExMDI3NTcsMTEzLjQ2OTQ5NTAzNjk1MjI4LDU1LjQ1MTk3NzQwMTEyOTk0NSw0NTAuMjkyNjUzOTQwNDI5MywxMzkyLjA4NjM4OTg3MTUzMjIsMzY1LjIwMjY2MzQ3MzQwMTUsMTAwOS43NDI0MjI5MDM1OTYzLDQyNy40ODQwNzc0OTUwODE1LDE4OS43ODYzMDY0OTkwNjM5Myw1Ny40ODA4MDk2ODg5NzQ4MSw2NDEuNjQ5NDU4NTA0MDEyMiwxOTIzLjgzNzYxOTMzNDMwOCwxNTA3LjMzOTI3NTY1MTg2MjIsMjYyLjU4NzI0Njg3NjM0NjQsNzYuMTE4MDkyODIxNTA2MzQsMTc5LjUwNTM3Mjk0NTYzODQsNTguMDcwNjYyMjUyNTY1MzU2LDIyNC4zMzQxOTEwNTgyMTgwNywxMjY5LjY3NjY5ODA5MDQwMzgsMjAzLjE5ODA2NDAzNTc0MDg4LDUyMi45NDk0ODYzMDEzNjk5LDI2MS42NDU2NjUzMjI1ODA2NywzNDIuMTQ2OTQzNDE1NjAwMSwxNjMuMzE5MjQ1OTkxODE1OTMsMTk5LjIwMTU4Mzk2MjM4MDg4LDM2My4xNTk2NTQyMzM3MjY1NCwyNzAuMDc1NDU3MzU4NDQ5NiwyMTMuMDUxMjAxMjc1Mjg3NTMsMzAzLjU2MDk1ODQ0ODk3LDQ1My4zNTMzNzI2NzY2MzEyLDM5Mi44NTM3NDE0OTY1OTg2LDMyMy43NDY2NTIzMTY0NzE4NSw3ODcuMDE5MzM5OTI4NjQwOSwyNTYuMzgxMDI5MDYyMTg4NSwyNzAuNTE5MDEwMjU5NTA1MTQsMTEyLjExMDI2MTUwMzcxNDM4LDMyMi43MzA4NDM0ODU3ODY2LDE1My41ODUxNjczMDQzODM1NiwyMzUuMDkxMDY3MjUzODQ2NTcsMTI4LjY3MDUzMzQ3OTA3MzM4LDI1MS44MzQyNzYwNTk2NDg5LDQxNi45NzE0ODU0MTExNDA2LDIxMi4wOTMyOTA4NDc5Mzc3LDEzMy43MjYzNjQ4NTcxNDcyNywyODkuNTQxODcxNDI5NjQwNTQsNjMuMDczNzAxMDMxNDI3MDUsMjc4LjI5MTIwNjk4MTcyMjQsMTExLjY0NDc0NzU5MDI2MzAyLDQ3LjYzNTk0MDcyMDkzMTUzLDcxLjI1MjExMzM3NjQyOTYzLDE2Mjg4LjEwMzY2NDI2NTU4Cis5LFdlZCAyIEZlYiAxMSwxNzQuMzU2MzMzNjc2NjIyMDYsMjY3LjE1NjI1MTE1MzUxOTYzLDQzOC42OTI2NDYxMzQ1MDY2LDU0Ny41NzkzNzEzNzg2ODA4LDE4MC4yMjc0ODk1NjQ2OTg4Niw4My41MjY4Nzc0OTYyMzUxOSwxNDcuOTI5ODg2NTg3OTk3NiwzMzAuNjQ1NjY5MjkxMzM4NiwyNzUuODI4ODcxNDk5MTc2MywzNjUuMzY1MjI4Mjg1ODg5MSwxODMuNTg2NDQ5ODA4MzQ5NzMsMjE0LjcxODg3ODgzMzkwNTYsMzc1LjY2MDM3NDEzNTEzMjgsOTYuNzk0OTEzMDQxMDA5ODIsMjM3Ljk3NDkwNjM2MjA4NDI1LDExMS4xMzk5NTMwMjUwMjYzMiwyODkuMzYxMjQ5NjA3NzU0MjUsMjI2LjYzMzg5ODg4MTA0MDg0LDIzNC45OTgwOTU2MTk5MjU4MywxOTAuNjM3NzQzNDg5OTMwNzgsMTM2LjI5ODkzODU3NjY0ODY4LDQ2Ljk3MTMxNzQ1MjYwMDg4LDEzNS44Mjg1NjY5ODYxNTA3NSwxNTEuNDE3NjQ0MTEwMjc1NywxMTMuNDY5NDk1MDM2OTUyMjgsNTUuNDUxOTc3NDAxMTI5OTQ1LDQ1MC4yOTI2NTM5NDA0MjkzLDEzOTIuMDg2Mzg5ODcxNTMyMiwzNjUuMjAyNjYzNDczNDAxNSwxMDA5Ljc0MjQyMjkwMzU5NjMsNDI3LjQ4NDA3NzQ5NTA4MTUsMTg5Ljc4NjMwNjQ5OTA2MzkzLDU3LjQ4MDgwOTY4ODk3NDgxLDY0MS42NDk0NTg1MDQwMTIyLDE5MjMuODM3NjE5MzM0MzA4LDE1MDcuMzM5Mjc1NjUxODYyMiwyNjIuNTg3MjQ2ODc2MzQ2NCw3Ni4xMTgwOTI4MjE1MDYzNCwxNzkuNTA1MzcyOTQ1NjM4NCw1OC4wNzA2NjIyNTI1NjUzNTYsMjI0LjMzNDE5MTA1ODIxODA3LDEyNjkuNjc2Njk4MDkwNDAzOCwyMDMuMTk4MDY0MDM1NzQwODgsNTIyLjk0OTQ4NjMwMTM2OTksMjYxLjY0NTY2NTMyMjU4MDY3LDM0Mi4xNDY5NDM0MTU2MDAxLDE2My4zMTkyNDU5OTE4MTU5MywxOTkuMjAxNTgzOTYyMzgwODgsMzYzLjE1OTY1NDIzMzcyNjU0LDI3MC4wNzU0NTczNTg0NDk2LDIxMy4wNTEyMDEyNzUyODc1MywzMDMuNTYwOTU4NDQ4OTcsNDUzLjM1MzM3MjY3NjYzMTIsMzkyLjg1Mzc0MTQ5NjU5ODYsMzIzLjc0NjY1MjMxNjQ3MTg1LDc4Ny4wMTkzMzk5Mjg2NDA5LDI1Ni4zODEwMjkwNjIxODg1LDI3MC41MTkwMTAyNTk1MDUxNCwxMTIuMTEwMjYxNTAzNzE0MzgsMzIyLjczMDg0MzQ4NTc4NjYsMTUzLjU4NTE2NzMwNDM4MzU2LDIzNS4wOTEwNjcyNTM4NDY1NywxMjguNjcwNTMzNDc5MDczMzgsMjUxLjgzNDI3NjA1OTY0ODksNDE2Ljk3MTQ4NTQxMTE0MDYsMjEyLjA5MzI5MDg0NzkzNzcsMTMzLjcyNjM2NDg1NzE0NzI3LDI4OS41NDE4NzE0Mjk2NDA1NCw2My4wNzM3MDEwMzE0MjcwNSwyNzguMjkxMjA2OTgxNzIyNCwxMTEuNjQ0NzQ3NTkwMjYzMDIsNDcuNjM1OTQwNzIwOTMxNTMsNzEuMjUyMTEzMzc2NDI5NjMsMTYyODguMTAzNjY0MjY1NTgKKzEwLFRodSAzIEZlYiAxMSwxNzQuMzU2MzMzNjc2NjIyMDYsMjY3LjE1NjI1MTE1MzUxOTYzLDQzOC42OTI2NDYxMzQ1MDY2LDU0Ny41NzkzNzEzNzg2ODA4LDE4MC4yMjc0ODk1NjQ2OTg4Niw4My41MjY4Nzc0OTYyMzUxOSwxNDcuOTI5ODg2NTg3OTk3NiwzMzAuNjQ1NjY5MjkxMzM4NiwyNzUuODI4ODcxNDk5MTc2MywzNjUuMzY1MjI4Mjg1ODg5MSwxODMuNTg2NDQ5ODA4MzQ5NzMsMjE0LjcxODg3ODgzMzkwNTYsMzc1LjY2MDM3NDEzNTEzMjgsOTYuNzk0OTEzMDQxMDA5ODIsMjM3Ljk3NDkwNjM2MjA4NDI1LDExMS4xMzk5NTMwMjUwMjYzMiwyODkuMzYxMjQ5NjA3NzU0MjUsMjI2LjYzMzg5ODg4MTA0MDg0LDIzNC45OTgwOTU2MTk5MjU4MywxOTAuNjM3NzQzNDg5OTMwNzgsMTM2LjI5ODkzODU3NjY0ODY4LDQ2Ljk3MTMxNzQ1MjYwMDg4LDEzNS44Mjg1NjY5ODYxNTA3NSwxNTEuNDE3NjQ0MTEwMjc1NywxMTMuNDY5NDk1MDM2OTUyMjgsNTUuNDUxOTc3NDAxMTI5OTQ1LDQ1MC4yOTI2NTM5NDA0MjkzLDEzOTIuMDg2Mzg5ODcxNTMyMiwzNjUuMjAyNjYzNDczNDAxNSwxMDA5Ljc0MjQyMjkwMzU5NjMsNDI3LjQ4NDA3NzQ5NTA4MTUsMTg5Ljc4NjMwNjQ5OTA2MzkzLDU3LjQ4MDgwOTY4ODk3NDgxLDY0MS42NDk0NTg1MDQwMTIyLDE5MjMuODM3NjE5MzM0MzA4LDE1MDcuMzM5Mjc1NjUxODYyMiwyNjIuNTg3MjQ2ODc2MzQ2NCw3Ni4xMTgwOTI4MjE1MDYzNCwxNzkuNTA1MzcyOTQ1NjM4NCw1OC4wNzA2NjIyNTI1NjUzNTYsMjI0LjMzNDE5MTA1ODIxODA3LDEyNjkuNjc2Njk4MDkwNDAzOCwyMDMuMTk4MDY0MDM1NzQwODgsNTIyLjk0OTQ4NjMwMTM2OTksMjYxLjY0NTY2NTMyMjU4MDY3LDM0Mi4xNDY5NDM0MTU2MDAxLDE2My4zMTkyNDU5OTE4MTU5MywxOTkuMjAxNTgzOTYyMzgwODgsMzYzLjE1OTY1NDIzMzcyNjU0LDI3MC4wNzU0NTczNTg0NDk2LDIxMy4wNTEyMDEyNzUyODc1MywzMDMuNTYwOTU4NDQ4OTcsNDUzLjM1MzM3MjY3NjYzMTIsMzkyLjg1Mzc0MTQ5NjU5ODYsMzIzLjc0NjY1MjMxNjQ3MTg1LDc4Ny4wMTkzMzk5Mjg2NDA5LDI1Ni4zODEwMjkwNjIxODg1LDI3MC41MTkwMTAyNTk1MDUxNCwxMTIuMTEwMjYxNTAzNzE0MzgsMzIyLjczMDg0MzQ4NTc4NjYsMTUzLjU4NTE2NzMwNDM4MzU2LDIzNS4wOTEwNjcyNTM4NDY1NywxMjguNjcwNTMzNDc5MDczMzgsMjUxLjgzNDI3NjA1OTY0ODksNDE2Ljk3MTQ4NTQxMTE0MDYsMjEyLjA5MzI5MDg0NzkzNzcsMTMzLjcyNjM2NDg1NzE0NzI3LDI4OS41NDE4NzE0Mjk2NDA1NCw2My4wNzM3MDEwMzE0MjcwNSwyNzguMjkxMjA2OTgxNzIyNCwxMTEuNjQ0NzQ3NTkwMjYzMDIsNDcuNjM1OTQwNzIwOTMxNTMsNzEuMjUyMTEzMzc2NDI5NjMsMTYyODguMTAzNjY0MjY1NTgKKzExLEZyaSA0IEZlYiAxMSwxNzQuMzU2MzMzNjc2NjIyMDYsMjY3LjE1NjI1MTE1MzUxOTYzLDQzOC42OTI2NDYxMzQ1MDY2LDU0Ny41NzkzNzEzNzg2ODA4LDE4MC4yMjc0ODk1NjQ2OTg4Niw4My41MjY4Nzc0OTYyMzUxOSwxNDcuOTI5ODg2NTg3OTk3NiwzMzAuNjQ1NjY5MjkxMzM4NiwyNzUuODI4ODcxNDk5MTc2MywzNjUuMzY1MjI4Mjg1ODg5MSwxODMuNTg2NDQ5ODA4MzQ5NzMsMjE0LjcxODg3ODgzMzkwNTYsMzc1LjY2MDM3NDEzNTEzMjgsOTYuNzk0OTEzMDQxMDA5ODIsMjM3Ljk3NDkwNjM2MjA4NDI1LDExMS4xMzk5NTMwMjUwMjYzMiwyODkuMzYxMjQ5NjA3NzU0MjUsMjI2LjYzMzg5ODg4MTA0MDg0LDIzNC45OTgwOTU2MTk5MjU4MywxOTAuNjM3NzQzNDg5OTMwNzgsMTM2LjI5ODkzODU3NjY0ODY4LDQ2Ljk3MTMxNzQ1MjYwMDg4LDEzNS44Mjg1NjY5ODYxNTA3NSwxNTEuNDE3NjQ0MTEwMjc1NywxMTMuNDY5NDk1MDM2OTUyMjgsNTUuNDUxOTc3NDAxMTI5OTQ1LDQ1MC4yOTI2NTM5NDA0MjkzLDEzOTIuMDg2Mzg5ODcxNTMyMiwzNjUuMjAyNjYzNDczNDAxNSwxMDA5Ljc0MjQyMjkwMzU5NjMsNDI3LjQ4NDA3NzQ5NTA4MTUsMTg5Ljc4NjMwNjQ5OTA2MzkzLDU3LjQ4MDgwOTY4ODk3NDgxLDY0MS42NDk0NTg1MDQwMTIyLDE5MjMuODM3NjE5MzM0MzA4LDE1MDcuMzM5Mjc1NjUxODYyMiwyNjIuNTg3MjQ2ODc2MzQ2NCw3Ni4xMTgwOTI4MjE1MDYzNCwxNzkuNTA1MzcyOTQ1NjM4NCw1OC4wNzA2NjIyNTI1NjUzNTYsMjI0LjMzNDE5MTA1ODIxODA3LDEyNjkuNjc2Njk4MDkwNDAzOCwyMDMuMTk4MDY0MDM1NzQwODgsNTIyLjk0OTQ4NjMwMTM2OTksMjYxLjY0NTY2NTMyMjU4MDY3LDM0Mi4xNDY5NDM0MTU2MDAxLDE2My4zMTkyNDU5OTE4MTU5MywxOTkuMjAxNTgzOTYyMzgwODgsMzYzLjE1OTY1NDIzMzcyNjU0LDI3MC4wNzU0NTczNTg0NDk2LDIxMy4wNTEyMDEyNzUyODc1MywzMDMuNTYwOTU4NDQ4OTcsNDUzLjM1MzM3MjY3NjYzMTIsMzkyLjg1Mzc0MTQ5NjU5ODYsMzIzLjc0NjY1MjMxNjQ3MTg1LDc4Ny4wMTkzMzk5Mjg2NDA5LDI1Ni4zODEwMjkwNjIxODg1LDI3MC41MTkwMTAyNTk1MDUxNCwxMTIuMTEwMjYxNTAzNzE0MzgsMzIyLjczMDg0MzQ4NTc4NjYsMTUzLjU4NTE2NzMwNDM4MzU2LDIzNS4wOTEwNjcyNTM4NDY1NywxMjguNjcwNTMzNDc5MDczMzgsMjUxLjgzNDI3NjA1OTY0ODksNDE2Ljk3MTQ4NTQxMTE0MDYsMjEyLjA5MzI5MDg0NzkzNzcsMTMzLjcyNjM2NDg1NzE0NzI3LDI4OS41NDE4NzE0Mjk2NDA1NCw2My4wNzM3MDEwMzE0MjcwNSwyNzguMjkxMjA2OTgxNzIyNCwxMTEuNjQ0NzQ3NTkwMjYzMDIsNDcuNjM1OTQwNzIwOTMxNTMsNzEuMjUyMTEzMzc2NDI5NjMsMTYyODguMTAzNjY0MjY1NTgKKzEyLFNhdCA1IEZlYiAxMSwxNzQuMzU2MzMzNjc2NjIyMDYsMjY3LjE1NjI1MTE1MzUxOTYzLDQzOC42OTI2NDYxMzQ1MDY2LDU0Ny41NzkzNzEzNzg2ODA4LDE4MC4yMjc0ODk1NjQ2OTg4Niw4My41MjY4Nzc0OTYyMzUxOSwxNDcuOTI5ODg2NTg3OTk3NiwzMzAuNjQ1NjY5MjkxMzM4NiwyNzUuODI4ODcxNDk5MTc2MywzNjUuMzY1MjI4Mjg1ODg5MSwxODMuNTg2NDQ5ODA4MzQ5NzMsMjE0LjcxODg3ODgzMzkwNTYsMzc1LjY2MDM3NDEzNTEzMjgsOTYuNzk0OTEzMDQxMDA5ODIsMjM3Ljk3NDkwNjM2MjA4NDI1LDExMS4xMzk5NTMwMjUwMjYzMiwyODkuMzYxMjQ5NjA3NzU0MjUsMjI2LjYzMzg5ODg4MTA0MDg0LDIzNC45OTgwOTU2MTk5MjU4MywxOTAuNjM3NzQzNDg5OTMwNzgsMTM2LjI5ODkzODU3NjY0ODY4LDQ2Ljk3MTMxNzQ1MjYwMDg4LDEzNS44Mjg1NjY5ODYxNTA3NSwxNTEuNDE3NjQ0MTEwMjc1NywxMTMuNDY5NDk1MDM2OTUyMjgsNTUuNDUxOTc3NDAxMTI5OTQ1LDQ1MC4yOTI2NTM5NDA0MjkzLDEzOTIuMDg2Mzg5ODcxNTMyMiwzNjUuMjAyNjYzNDczNDAxNSwxMDA5Ljc0MjQyMjkwMzU5NjMsNDI3LjQ4NDA3NzQ5NTA4MTUsMTg5Ljc4NjMwNjQ5OTA2MzkzLDU3LjQ4MDgwOTY4ODk3NDgxLDY0MS42NDk0NTg1MDQwMTIyLDE5MjMuODM3NjE5MzM0MzA4LDE1MDcuMzM5Mjc1NjUxODYyMiwyNjIuNTg3MjQ2ODc2MzQ2NCw3Ni4xMTgwOTI4MjE1MDYzNCwxNzkuNTA1MzcyOTQ1NjM4NCw1OC4wNzA2NjIyNTI1NjUzNTYsMjI0LjMzNDE5MTA1ODIxODA3LDEyNjkuNjc2Njk4MDkwNDAzOCwyMDMuMTk4MDY0MDM1NzQwODgsNTIyLjk0OTQ4NjMwMTM2OTksMjYxLjY0NTY2NTMyMjU4MDY3LDM0Mi4xNDY5NDM0MTU2MDAxLDE2My4zMTkyNDU5OTE4MTU5MywxOTkuMjAxNTgzOTYyMzgwODgsMzYzLjE1OTY1NDIzMzcyNjU0LDI3MC4wNzU0NTczNTg0NDk2LDIxMy4wNTEyMDEyNzUyODc1MywzMDMuNTYwOTU4NDQ4OTcsNDUzLjM1MzM3MjY3NjYzMTIsMzkyLjg1Mzc0MTQ5NjU5ODYsMzIzLjc0NjY1MjMxNjQ3MTg1LDc4Ny4wMTkzMzk5Mjg2NDA5LDI1Ni4zODEwMjkwNjIxODg1LDI3MC41MTkwMTAyNTk1MDUxNCwxMTIuMTEwMjYxNTAzNzE0MzgsMzIyLjczMDg0MzQ4NTc4NjYsMTUzLjU4NTE2NzMwNDM4MzU2LDIzNS4wOTEwNjcyNTM4NDY1NywxMjguNjcwNTMzNDc5MDczMzgsMjUxLjgzNDI3NjA1OTY0ODksNDE2Ljk3MTQ4NTQxMTE0MDYsMjEyLjA5MzI5MDg0NzkzNzcsMTMzLjcyNjM2NDg1NzE0NzI3LDI4OS41NDE4NzE0Mjk2NDA1NCw2My4wNzM3MDEwMzE0MjcwNSwyNzguMjkxMjA2OTgxNzIyNCwxMTEuNjQ0NzQ3NTkwMjYzMDIsNDcuNjM1OTQwNzIwOTMxNTMsNzEuMjUyMTEzMzc2NDI5NjMsMTYyODguMTAzNjY0MjY1NTgKKzEzLFN1biA2IEZlYiAxMSwxNzQuMzU2MzMzNjc2NjIyMDYsMjY3LjE1NjI1MTE1MzUxOTYzLDQzOC42OTI2NDYxMzQ1MDY2LDU0Ny41NzkzNzEzNzg2ODA4LDE4MC4yMjc0ODk1NjQ2OTg4Niw4My41MjY4Nzc0OTYyMzUxOSwxNDcuOTI5ODg2NTg3OTk3NiwzMzAuNjQ1NjY5MjkxMzM4NiwyNzUuODI4ODcxNDk5MTc2MywzNjUuMzY1MjI4Mjg1ODg5MSwxODMuNTg2NDQ5ODA4MzQ5NzMsMjE0LjcxODg3ODgzMzkwNTYsMzc1LjY2MDM3NDEzNTEzMjgsOTYuNzk0OTEzMDQxMDA5ODIsMjM3Ljk3NDkwNjM2MjA4NDI1LDExMS4xMzk5NTMwMjUwMjYzMiwyODkuMzYxMjQ5NjA3NzU0MjUsMjI2LjYzMzg5ODg4MTA0MDg0LDIzNC45OTgwOTU2MTk5MjU4MywxOTAuNjM3NzQzNDg5OTMwNzgsMTM2LjI5ODkzODU3NjY0ODY4LDQ2Ljk3MTMxNzQ1MjYwMDg4LDEzNS44Mjg1NjY5ODYxNTA3NSwxNTEuNDE3NjQ0MTEwMjc1NywxMTMuNDY5NDk1MDM2OTUyMjgsNTUuNDUxOTc3NDAxMTI5OTQ1LDQ1MC4yOTI2NTM5NDA0MjkzLDEzOTIuMDg2Mzg5ODcxNTMyMiwzNjUuMjAyNjYzNDczNDAxNSwxMDA5Ljc0MjQyMjkwMzU5NjMsNDI3LjQ4NDA3NzQ5NTA4MTUsMTg5Ljc4NjMwNjQ5OTA2MzkzLDU3LjQ4MDgwOTY4ODk3NDgxLDY0MS42NDk0NTg1MDQwMTIyLDE5MjMuODM3NjE5MzM0MzA4LDE1MDcuMzM5Mjc1NjUxODYyMiwyNjIuNTg3MjQ2ODc2MzQ2NCw3Ni4xMTgwOTI4MjE1MDYzNCwxNzkuNTA1MzcyOTQ1NjM4NCw1OC4wNzA2NjIyNTI1NjUzNTYsMjI0LjMzNDE5MTA1ODIxODA3LDEyNjkuNjc2Njk4MDkwNDAzOCwyMDMuMTk4MDY0MDM1NzQwODgsNTIyLjk0OTQ4NjMwMTM2OTksMjYxLjY0NTY2NTMyMjU4MDY3LDM0Mi4xNDY5NDM0MTU2MDAxLDE2My4zMTkyNDU5OTE4MTU5MywxOTkuMjAxNTgzOTYyMzgwODgsMzYzLjE1OTY1NDIzMzcyNjU0LDI3MC4wNzU0NTczNTg0NDk2LDIxMy4wNTEyMDEyNzUyODc1MywzMDMuNTYwOTU4NDQ4OTcsNDUzLjM1MzM3MjY3NjYzMTIsMzkyLjg1Mzc0MTQ5NjU5ODYsMzIzLjc0NjY1MjMxNjQ3MTg1LDc4Ny4wMTkzMzk5Mjg2NDA5LDI1Ni4zODEwMjkwNjIxODg1LDI3MC41MTkwMTAyNTk1MDUxNCwxMTIuMTEwMjYxNTAzNzE0MzgsMzIyLjczMDg0MzQ4NTc4NjYsMTUzLjU4NTE2NzMwNDM4MzU2LDIzNS4wOTEwNjcyNTM4NDY1NywxMjguNjcwNTMzNDc5MDczMzgsMjUxLjgzNDI3NjA1OTY0ODksNDE2Ljk3MTQ4NTQxMTE0MDYsMjEyLjA5MzI5MDg0NzkzNzcsMTMzLjcyNjM2NDg1NzE0NzI3LDI4OS41NDE4NzE0Mjk2NDA1NCw2My4wNzM3MDEwMzE0MjcwNSwyNzguMjkxMjA2OTgxNzIyNCwxMTEuNjQ0NzQ3NTkwMjYzMDIsNDcuNjM1OTQwNzIwOTMxNTMsNzEuMjUyMTEzMzc2NDI5NjMsMTYyODguMTAzNjY0MjY1NTgKKzE0LE1vbiA3IEZlYiAxMSwxNzQuMzU2MzMzNjc2NjIyMDYsMjY3LjE1NjI1MTE1MzUxOTYzLDQzOC42OTI2NDYxMzQ1MDY2LDU0Ny41NzkzNzEzNzg2ODA4LDE4MC4yMjc0ODk1NjQ2OTg4Niw4My41MjY4Nzc0OTYyMzUxOSwxNDcuOTI5ODg2NTg3OTk3NiwzMzAuNjQ1NjY5MjkxMzM4NiwyNzUuODI4ODcxNDk5MTc2MywzNjUuMzY1MjI4Mjg1ODg5MSwxODMuNTg2NDQ5ODA4MzQ5NzMsMjE0LjcxODg3ODgzMzkwNTYsMzc1LjY2MDM3NDEzNTEzMjgsOTYuNzk0OTEzMDQxMDA5ODIsMjM3Ljk3NDkwNjM2MjA4NDI1LDExMS4xMzk5NTMwMjUwMjYzMiwyODkuMzYxMjQ5NjA3NzU0MjUsMjI2LjYzMzg5ODg4MTA0MDg0LDIzNC45OTgwOTU2MTk5MjU4MywxOTAuNjM3NzQzNDg5OTMwNzgsMTM2LjI5ODkzODU3NjY0ODY4LDQ2Ljk3MTMxNzQ1MjYwMDg4LDEzNS44Mjg1NjY5ODYxNTA3NSwxNTEuNDE3NjQ0MTEwMjc1NywxMTMuNDY5NDk1MDM2OTUyMjgsNTUuNDUxOTc3NDAxMTI5OTQ1LDQ1MC4yOTI2NTM5NDA0MjkzLDEzOTIuMDg2Mzg5ODcxNTMyMiwzNjUuMjAyNjYzNDczNDAxNSwxMDA5Ljc0MjQyMjkwMzU5NjMsNDI3LjQ4NDA3NzQ5NTA4MTUsMTg5Ljc4NjMwNjQ5OTA2MzkzLDU3LjQ4MDgwOTY4ODk3NDgxLDY0MS42NDk0NTg1MDQwMTIyLDE5MjMuODM3NjE5MzM0MzA4LDE1MDcuMzM5Mjc1NjUxODYyMiwyNjIuNTg3MjQ2ODc2MzQ2NCw3Ni4xMTgwOTI4MjE1MDYzNCwxNzkuNTA1MzcyOTQ1NjM4NCw1OC4wNzA2NjIyNTI1NjUzNTYsMjI0LjMzNDE5MTA1ODIxODA3LDEyNjkuNjc2Njk4MDkwNDAzOCwyMDMuMTk4MDY0MDM1NzQwODgsNTIyLjk0OTQ4NjMwMTM2OTksMjYxLjY0NTY2NTMyMjU4MDY3LDM0Mi4xNDY5NDM0MTU2MDAxLDE2My4zMTkyNDU5OTE4MTU5MywxOTkuMjAxNTgzOTYyMzgwODgsMzYzLjE1OTY1NDIzMzcyNjU0LDI3MC4wNzU0NTczNTg0NDk2LDIxMy4wNTEyMDEyNzUyODc1MywzMDMuNTYwOTU4NDQ4OTcsNDUzLjM1MzM3MjY3NjYzMTIsMzkyLjg1Mzc0MTQ5NjU5ODYsMzIzLjc0NjY1MjMxNjQ3MTg1LDc4Ny4wMTkzMzk5Mjg2NDA5LDI1Ni4zODEwMjkwNjIxODg1LDI3MC41MTkwMTAyNTk1MDUxNCwxMTIuMTEwMjYxNTAzNzE0MzgsMzIyLjczMDg0MzQ4NTc4NjYsMTUzLjU4NTE2NzMwNDM4MzU2LDIzNS4wOTEwNjcyNTM4NDY1NywxMjguNjcwNTMzNDc5MDczMzgsMjUxLjgzNDI3NjA1OTY0ODksNDE2Ljk3MTQ4NTQxMTE0MDYsMjEyLjA5MzI5MDg0NzkzNzcsMTMzLjcyNjM2NDg1NzE0NzI3LDI4OS41NDE4NzE0Mjk2NDA1NCw2My4wNzM3MDEwMzE0MjcwNSwyNzguMjkxMjA2OTgxNzIyNCwxMTEuNjQ0NzQ3NTkwMjYzMDIsNDcuNjM1OTQwNzIwOTMxNTMsNzEuMjUyMTEzMzc2NDI5NjMsMTYyODguMTAzNjY0MjY1NTgKKzE1LFR1ZSA4IEZlYiAxMSwxNzQuMzU2MzMzNjc2NjIyMDYsMjY3LjE1NjI1MTE1MzUxOTYzLDQzOC42OTI2NDYxMzQ1MDY2LDU0Ny41NzkzNzEzNzg2ODA4LDE4MC4yMjc0ODk1NjQ2OTg4Niw4My41MjY4Nzc0OTYyMzUxOSwxNDcuOTI5ODg2NTg3OTk3NiwzMzAuNjQ1NjY5MjkxMzM4NiwyNzUuODI4ODcxNDk5MTc2MywzNjUuMzY1MjI4Mjg1ODg5MSwxODMuNTg2NDQ5ODA4MzQ5NzMsMjE0LjcxODg3ODgzMzkwNTYsMzc1LjY2MDM3NDEzNTEzMjgsOTYuNzk0OTEzMDQxMDA5ODIsMjM3Ljk3NDkwNjM2MjA4NDI1LDExMS4xMzk5NTMwMjUwMjYzMiwyODkuMzYxMjQ5NjA3NzU0MjUsMjI2LjYzMzg5ODg4MTA0MDg0LDIzNC45OTgwOTU2MTk5MjU4MywxOTAuNjM3NzQzNDg5OTMwNzgsMTM2LjI5ODkzODU3NjY0ODY4LDQ2Ljk3MTMxNzQ1MjYwMDg4LDEzNS44Mjg1NjY5ODYxNTA3NSwxNTEuNDE3NjQ0MTEwMjc1NywxMTMuNDY5NDk1MDM2OTUyMjgsNTUuNDUxOTc3NDAxMTI5OTQ1LDQ1MC4yOTI2NTM5NDA0MjkzLDEzOTIuMDg2Mzg5ODcxNTMyMiwzNjUuMjAyNjYzNDczNDAxNSwxMDA5Ljc0MjQyMjkwMzU5NjMsNDI3LjQ4NDA3NzQ5NTA4MTUsMTg5Ljc4NjMwNjQ5OTA2MzkzLDU3LjQ4MDgwOTY4ODk3NDgxLDY0MS42NDk0NTg1MDQwMTIyLDE5MjMuODM3NjE5MzM0MzA4LDE1MDcuMzM5Mjc1NjUxODYyMiwyNjIuNTg3MjQ2ODc2MzQ2NCw3Ni4xMTgwOTI4MjE1MDYzNCwxNzkuNTA1MzcyOTQ1NjM4NCw1OC4wNzA2NjIyNTI1NjUzNTYsMjI0LjMzNDE5MTA1ODIxODA3LDEyNjkuNjc2Njk4MDkwNDAzOCwyMDMuMTk4MDY0MDM1NzQwODgsNTIyLjk0OTQ4NjMwMTM2OTksMjYxLjY0NTY2NTMyMjU4MDY3LDM0Mi4xNDY5NDM0MTU2MDAxLDE2My4zMTkyNDU5OTE4MTU5MywxOTkuMjAxNTgzOTYyMzgwODgsMzYzLjE1OTY1NDIzMzcyNjU0LDI3MC4wNzU0NTczNTg0NDk2LDIxMy4wNTEyMDEyNzUyODc1MywzMDMuNTYwOTU4NDQ4OTcsNDUzLjM1MzM3MjY3NjYzMTIsMzkyLjg1Mzc0MTQ5NjU5ODYsMzIzLjc0NjY1MjMxNjQ3MTg1LDc4Ny4wMTkzMzk5Mjg2NDA5LDI1Ni4zODEwMjkwNjIxODg1LDI3MC41MTkwMTAyNTk1MDUxNCwxMTIuMTEwMjYxNTAzNzE0MzgsMzIyLjczMDg0MzQ4NTc4NjYsMTUzLjU4NTE2NzMwNDM4MzU2LDIzNS4wOTEwNjcyNTM4NDY1NywxMjguNjcwNTMzNDc5MDczMzgsMjUxLjgzNDI3NjA1OTY0ODksNDE2Ljk3MTQ4NTQxMTE0MDYsMjEyLjA5MzI5MDg0NzkzNzcsMTMzLjcyNjM2NDg1NzE0NzI3LDI4OS41NDE4NzE0Mjk2NDA1NCw2My4wNzM3MDEwMzE0MjcwNSwyNzguMjkxMjA2OTgxNzIyNCwxMTEuNjQ0NzQ3NTkwMjYzMDIsNDcuNjM1OTQwNzIwOTMxNTMsNzEuMjUyMTEzMzc2NDI5NjMsMTYyODguMTAzNjY0MjY1NTgKKzE2LFdlZCA5IEZlYiAxMSwxNzQuMzU2MzMzNjc2NjIyMDYsMjY3LjE1NjI1MTE1MzUxOTYzLDQzOC42OTI2NDYxMzQ1MDY2LDU0Ny41NzkzNzEzNzg2ODA4LDE4MC4yMjc0ODk1NjQ2OTg4Niw4My41MjY4Nzc0OTYyMzUxOSwxNDcuOTI5ODg2NTg3OTk3NiwzMzAuNjQ1NjY5MjkxMzM4NiwyNzUuODI4ODcxNDk5MTc2MywzNjUuMzY1MjI4Mjg1ODg5MSwxODMuNTg2NDQ5ODA4MzQ5NzMsMjE0LjcxODg3ODgzMzkwNTYsMzc1LjY2MDM3NDEzNTEzMjgsOTYuNzk0OTEzMDQxMDA5ODIsMjM3Ljk3NDkwNjM2MjA4NDI1LDExMS4xMzk5NTMwMjUwMjYzMiwyODkuMzYxMjQ5NjA3NzU0MjUsMjI2LjYzMzg5ODg4MTA0MDg0LDIzNC45OTgwOTU2MTk5MjU4MywxOTAuNjM3NzQzNDg5OTMwNzgsMTM2LjI5ODkzODU3NjY0ODY4LDQ2Ljk3MTMxNzQ1MjYwMDg4LDEzNS44Mjg1NjY5ODYxNTA3NSwxNTEuNDE3NjQ0MTEwMjc1NywxMTMuNDY5NDk1MDM2OTUyMjgsNTUuNDUxOTc3NDAxMTI5OTQ1LDQ1MC4yOTI2NTM5NDA0MjkzLDEzOTIuMDg2Mzg5ODcxNTMyMiwzNjUuMjAyNjYzNDczNDAxNSwxMDA5Ljc0MjQyMjkwMzU5NjMsNDI3LjQ4NDA3NzQ5NTA4MTUsMTg5Ljc4NjMwNjQ5OTA2MzkzLDU3LjQ4MDgwOTY4ODk3NDgxLDY0MS42NDk0NTg1MDQwMTIyLDE5MjMuODM3NjE5MzM0MzA4LDE1MDcuMzM5Mjc1NjUxODYyMiwyNjIuNTg3MjQ2ODc2MzQ2NCw3Ni4xMTgwOTI4MjE1MDYzNCwxNzkuNTA1MzcyOTQ1NjM4NCw1OC4wNzA2NjIyNTI1NjUzNTYsMjI0LjMzNDE5MTA1ODIxODA3LDEyNjkuNjc2Njk4MDkwNDAzOCwyMDMuMTk4MDY0MDM1NzQwODgsNTIyLjk0OTQ4NjMwMTM2OTksMjYxLjY0NTY2NTMyMjU4MDY3LDM0Mi4xNDY5NDM0MTU2MDAxLDE2My4zMTkyNDU5OTE4MTU5MywxOTkuMjAxNTgzOTYyMzgwODgsMzYzLjE1OTY1NDIzMzcyNjU0LDI3MC4wNzU0NTczNTg0NDk2LDIxMy4wNTEyMDEyNzUyODc1MywzMDMuNTYwOTU4NDQ4OTcsNDUzLjM1MzM3MjY3NjYzMTIsMzkyLjg1Mzc0MTQ5NjU5ODYsMzIzLjc0NjY1MjMxNjQ3MTg1LDc4Ny4wMTkzMzk5Mjg2NDA5LDI1Ni4zODEwMjkwNjIxODg1LDI3MC41MTkwMTAyNTk1MDUxNCwxMTIuMTEwMjYxNTAzNzE0MzgsMzIyLjczMDg0MzQ4NTc4NjYsMTUzLjU4NTE2NzMwNDM4MzU2LDIzNS4wOTEwNjcyNTM4NDY1NywxMjguNjcwNTMzNDc5MDczMzgsMjUxLjgzNDI3NjA1OTY0ODksNDE2Ljk3MTQ4NTQxMTE0MDYsMjEyLjA5MzI5MDg0NzkzNzcsMTMzLjcyNjM2NDg1NzE0NzI3LDI4OS41NDE4NzE0Mjk2NDA1NCw2My4wNzM3MDEwMzE0MjcwNSwyNzguMjkxMjA2OTgxNzIyNCwxMTEuNjQ0NzQ3NTkwMjYzMDIsNDcuNjM1OTQwNzIwOTMxNTMsNzEuMjUyMTEzMzc2NDI5NjMsMTYyODguMTAzNjY0MjY1NTgKKzE3LFRodSAxMCBGZWIgMTEsMTc0LjM1NjMzMzY3NjYyMjA2LDI2Ny4xNTYyNTExNTM1MTk2Myw0MzguNjkyNjQ2MTM0NTA2Niw1NDcuNTc5MzcxMzc4NjgwOCwxODAuMjI3NDg5NTY0Njk4ODYsODMuNTI2ODc3NDk2MjM1MTksMTQ3LjkyOTg4NjU4Nzk5NzYsMzMwLjY0NTY2OTI5MTMzODYsMjc1LjgyODg3MTQ5OTE3NjMsMzY1LjM2NTIyODI4NTg4OTEsMTgzLjU4NjQ0OTgwODM0OTczLDIxNC43MTg4Nzg4MzM5MDU2LDM3NS42NjAzNzQxMzUxMzI4LDk2Ljc5NDkxMzA0MTAwOTgyLDIzNy45NzQ5MDYzNjIwODQyNSwxMTEuMTM5OTUzMDI1MDI2MzIsMjg5LjM2MTI0OTYwNzc1NDI1LDIyNi42MzM4OTg4ODEwNDA4NCwyMzQuOTk4MDk1NjE5OTI1ODMsMTkwLjYzNzc0MzQ4OTkzMDc4LDEzNi4yOTg5Mzg1NzY2NDg2OCw0Ni45NzEzMTc0NTI2MDA4OCwxMzUuODI4NTY2OTg2MTUwNzUsMTUxLjQxNzY0NDExMDI3NTcsMTEzLjQ2OTQ5NTAzNjk1MjI4LDU1LjQ1MTk3NzQwMTEyOTk0NSw0NTAuMjkyNjUzOTQwNDI5MywxMzkyLjA4NjM4OTg3MTUzMjIsMzY1LjIwMjY2MzQ3MzQwMTUsMTAwOS43NDI0MjI5MDM1OTYzLDQyNy40ODQwNzc0OTUwODE1LDE4OS43ODYzMDY0OTkwNjM5Myw1Ny40ODA4MDk2ODg5NzQ4MSw2NDEuNjQ5NDU4NTA0MDEyMiwxOTIzLjgzNzYxOTMzNDMwOCwxNTA3LjMzOTI3NTY1MTg2MjIsMjYyLjU4NzI0Njg3NjM0NjQsNzYuMTE4MDkyODIxNTA2MzQsMTc5LjUwNTM3Mjk0NTYzODQsNTguMDcwNjYyMjUyNTY1MzU2LDIyNC4zMzQxOTEwNTgyMTgwNywxMjY5LjY3NjY5ODA5MDQwMzgsMjAzLjE5ODA2NDAzNTc0MDg4LDUyMi45NDk0ODYzMDEzNjk5LDI2MS42NDU2NjUzMjI1ODA2NywzNDIuMTQ2OTQzNDE1NjAwMSwxNjMuMzE5MjQ1OTkxODE1OTMsMTk5LjIwMTU4Mzk2MjM4MDg4LDM2My4xNTk2NTQyMzM3MjY1NCwyNzAuMDc1NDU3MzU4NDQ5NiwyMTMuMDUxMjAxMjc1Mjg3NTMsMzAzLjU2MDk1ODQ0ODk3LDQ1My4zNTMzNzI2NzY2MzEyLDM5Mi44NTM3NDE0OTY1OTg2LDMyMy43NDY2NTIzMTY0NzE4NSw3ODcuMDE5MzM5OTI4NjQwOSwyNTYuMzgxMDI5MDYyMTg4NSwyNzAuNTE5MDEwMjU5NTA1MTQsMTEyLjExMDI2MTUwMzcxNDM4LDMyMi43MzA4NDM0ODU3ODY2LDE1My41ODUxNjczMDQzODM1NiwyMzUuMDkxMDY3MjUzODQ2NTcsMTI4LjY3MDUzMzQ3OTA3MzM4LDI1MS44MzQyNzYwNTk2NDg5LDQxNi45NzE0ODU0MTExNDA2LDIxMi4wOTMyOTA4NDc5Mzc3LDEzMy43MjYzNjQ4NTcxNDcyNywyODkuNTQxODcxNDI5NjQwNTQsNjMuMDczNzAxMDMxNDI3MDUsMjc4LjI5MTIwNjk4MTcyMjQsMTExLjY0NDc0NzU5MDI2MzAyLDQ3LjYzNTk0MDcyMDkzMTUzLDcxLjI1MjExMzM3NjQyOTYzLDE2Mjg4LjEwMzY2NDI2NTU4CisxOCxGcmkgMTEgRmViIDExLDE3NC4zNTYzMzM2NzY2MjIwNiwyNjcuMTU2MjUxMTUzNTE5NjMsNDM4LjY5MjY0NjEzNDUwNjYsNTQ3LjU3OTM3MTM3ODY4MDgsMTgwLjIyNzQ4OTU2NDY5ODg2LDgzLjUyNjg3NzQ5NjIzNTE5LDE0Ny45Mjk4ODY1ODc5OTc2LDMzMC42NDU2NjkyOTEzMzg2LDI3NS44Mjg4NzE0OTkxNzYzLDM2NS4zNjUyMjgyODU4ODkxLDE4My41ODY0NDk4MDgzNDk3MywyMTQuNzE4ODc4ODMzOTA1NiwzNzUuNjYwMzc0MTM1MTMyOCw5Ni43OTQ5MTMwNDEwMDk4MiwyMzcuOTc0OTA2MzYyMDg0MjUsMTExLjEzOTk1MzAyNTAyNjMyLDI4OS4zNjEyNDk2MDc3NTQyNSwyMjYuNjMzODk4ODgxMDQwODQsMjM0Ljk5ODA5NTYxOTkyNTgzLDE5MC42Mzc3NDM0ODk5MzA3OCwxMzYuMjk4OTM4NTc2NjQ4NjgsNDYuOTcxMzE3NDUyNjAwODgsMTM1LjgyODU2Njk4NjE1MDc1LDE1MS40MTc2NDQxMTAyNzU3LDExMy40Njk0OTUwMzY5NTIyOCw1NS40NTE5Nzc0MDExMjk5NDUsNDUwLjI5MjY1Mzk0MDQyOTMsMTM5Mi4wODYzODk4NzE1MzIyLDM2NS4yMDI2NjM0NzM0MDE1LDEwMDkuNzQyNDIyOTAzNTk2Myw0MjcuNDg0MDc3NDk1MDgxNSwxODkuNzg2MzA2NDk5MDYzOTMsNTcuNDgwODA5Njg4OTc0ODEsNjQxLjY0OTQ1ODUwNDAxMjIsMTkyMy44Mzc2MTkzMzQzMDgsMTUwNy4zMzkyNzU2NTE4NjIyLDI2Mi41ODcyNDY4NzYzNDY0LDc2LjExODA5MjgyMTUwNjM0LDE3OS41MDUzNzI5NDU2Mzg0LDU4LjA3MDY2MjI1MjU2NTM1NiwyMjQuMzM0MTkxMDU4MjE4MDcsMTI2OS42NzY2OTgwOTA0MDM4LDIwMy4xOTgwNjQwMzU3NDA4OCw1MjIuOTQ5NDg2MzAxMzY5OSwyNjEuNjQ1NjY1MzIyNTgwNjcsMzQyLjE0Njk0MzQxNTYwMDEsMTYzLjMxOTI0NTk5MTgxNTkzLDE5OS4yMDE1ODM5NjIzODA4OCwzNjMuMTU5NjU0MjMzNzI2NTQsMjcwLjA3NTQ1NzM1ODQ0OTYsMjEzLjA1MTIwMTI3NTI4NzUzLDMwMy41NjA5NTg0NDg5Nyw0NTMuMzUzMzcyNjc2NjMxMiwzOTIuODUzNzQxNDk2NTk4NiwzMjMuNzQ2NjUyMzE2NDcxODUsNzg3LjAxOTMzOTkyODY0MDksMjU2LjM4MTAyOTA2MjE4ODUsMjcwLjUxOTAxMDI1OTUwNTE0LDExMi4xMTAyNjE1MDM3MTQzOCwzMjIuNzMwODQzNDg1Nzg2NiwxNTMuNTg1MTY3MzA0MzgzNTYsMjM1LjA5MTA2NzI1Mzg0NjU3LDEyOC42NzA1MzM0NzkwNzMzOCwyNTEuODM0Mjc2MDU5NjQ4OSw0MTYuOTcxNDg1NDExMTQwNiwyMTIuMDkzMjkwODQ3OTM3NywxMzMuNzI2MzY0ODU3MTQ3MjcsMjg5LjU0MTg3MTQyOTY0MDU0LDYzLjA3MzcwMTAzMTQyNzA1LDI3OC4yOTEyMDY5ODE3MjI0LDExMS42NDQ3NDc1OTAyNjMwMiw0Ny42MzU5NDA3MjA5MzE1Myw3MS4yNTIxMTMzNzY0Mjk2MywxNjI4OC4xMDM2NjQyNjU1OAorMTksU2F0IDEyIEZlYiAxMSwxNzQuMzU2MzMzNjc2NjIyMDYsMjY3LjE1NjI1MTE1MzUxOTYzLDQzOC42OTI2NDYxMzQ1MDY2LDU0Ny41NzkzNzEzNzg2ODA4LDE4MC4yMjc0ODk1NjQ2OTg4Niw4My41MjY4Nzc0OTYyMzUxOSwxNDcuOTI5ODg2NTg3OTk3NiwzMzAuNjQ1NjY5MjkxMzM4NiwyNzUuODI4ODcxNDk5MTc2MywzNjUuMzY1MjI4Mjg1ODg5MSwxODMuNTg2NDQ5ODA4MzQ5NzMsMjE0LjcxODg3ODgzMzkwNTYsMzc1LjY2MDM3NDEzNTEzMjgsOTYuNzk0OTEzMDQxMDA5ODIsMjM3Ljk3NDkwNjM2MjA4NDI1LDExMS4xMzk5NTMwMjUwMjYzMiwyODkuMzYxMjQ5NjA3NzU0MjUsMjI2LjYzMzg5ODg4MTA0MDg0LDIzNC45OTgwOTU2MTk5MjU4MywxOTAuNjM3NzQzNDg5OTMwNzgsMTM2LjI5ODkzODU3NjY0ODY4LDQ2Ljk3MTMxNzQ1MjYwMDg4LDEzNS44Mjg1NjY5ODYxNTA3NSwxNTEuNDE3NjQ0MTEwMjc1NywxMTMuNDY5NDk1MDM2OTUyMjgsNTUuNDUxOTc3NDAxMTI5OTQ1LDQ1MC4yOTI2NTM5NDA0MjkzLDEzOTIuMDg2Mzg5ODcxNTMyMiwzNjUuMjAyNjYzNDczNDAxNSwxMDA5Ljc0MjQyMjkwMzU5NjMsNDI3LjQ4NDA3NzQ5NTA4MTUsMTg5Ljc4NjMwNjQ5OTA2MzkzLDU3LjQ4MDgwOTY4ODk3NDgxLDY0MS42NDk0NTg1MDQwMTIyLDE5MjMuODM3NjE5MzM0MzA4LDE1MDcuMzM5Mjc1NjUxODYyMiwyNjIuNTg3MjQ2ODc2MzQ2NCw3Ni4xMTgwOTI4MjE1MDYzNCwxNzkuNTA1MzcyOTQ1NjM4NCw1OC4wNzA2NjIyNTI1NjUzNTYsMjI0LjMzNDE5MTA1ODIxODA3LDEyNjkuNjc2Njk4MDkwNDAzOCwyMDMuMTk4MDY0MDM1NzQwODgsNTIyLjk0OTQ4NjMwMTM2OTksMjYxLjY0NTY2NTMyMjU4MDY3LDM0Mi4xNDY5NDM0MTU2MDAxLDE2My4zMTkyNDU5OTE4MTU5MywxOTkuMjAxNTgzOTYyMzgwODgsMzYzLjE1OTY1NDIzMzcyNjU0LDI3MC4wNzU0NTczNTg0NDk2LDIxMy4wNTEyMDEyNzUyODc1MywzMDMuNTYwOTU4NDQ4OTcsNDUzLjM1MzM3MjY3NjYzMTIsMzkyLjg1Mzc0MTQ5NjU5ODYsMzIzLjc0NjY1MjMxNjQ3MTg1LDc4Ny4wMTkzMzk5Mjg2NDA5LDI1Ni4zODEwMjkwNjIxODg1LDI3MC41MTkwMTAyNTk1MDUxNCwxMTIuMTEwMjYxNTAzNzE0MzgsMzIyLjczMDg0MzQ4NTc4NjYsMTUzLjU4NTE2NzMwNDM4MzU2LDIzNS4wOTEwNjcyNTM4NDY1NywxMjguNjcwNTMzNDc5MDczMzgsMjUxLjgzNDI3NjA1OTY0ODksNDE2Ljk3MTQ4NTQxMTE0MDYsMjEyLjA5MzI5MDg0NzkzNzcsMTMzLjcyNjM2NDg1NzE0NzI3LDI4OS41NDE4NzE0Mjk2NDA1NCw2My4wNzM3MDEwMzE0MjcwNSwyNzguMjkxMjA2OTgxNzIyNCwxMTEuNjQ0NzQ3NTkwMjYzMDIsNDcuNjM1OTQwNzIwOTMxNTMsNzEuMjUyMTEzMzc2NDI5NjMsMTYyODguMTAzNjY0MjY1NTgKKzIwLFN1biAxMyBGZWIgMTEsMTc0LjM1NjMzMzY3NjYyMjA2LDI2Ny4xNTYyNTExNTM1MTk2Myw0MzguNjkyNjQ2MTM0NTA2Niw1NDcuNTc5MzcxMzc4NjgwOCwxODAuMjI3NDg5NTY0Njk4ODYsODMuNTI2ODc3NDk2MjM1MTksMTQ3LjkyOTg4NjU4Nzk5NzYsMzMwLjY0NTY2OTI5MTMzODYsMjc1LjgyODg3MTQ5OTE3NjMsMzY1LjM2NTIyODI4NTg4OTEsMTgzLjU4NjQ0OTgwODM0OTczLDIxNC43MTg4Nzg4MzM5MDU2LDM3NS42NjAzNzQxMzUxMzI4LDk2Ljc5NDkxMzA0MTAwOTgyLDIzNy45NzQ5MDYzNjIwODQyNSwxMTEuMTM5OTUzMDI1MDI2MzIsMjg5LjM2MTI0OTYwNzc1NDI1LDIyNi42MzM4OTg4ODEwNDA4NCwyMzQuOTk4MDk1NjE5OTI1ODMsMTkwLjYzNzc0MzQ4OTkzMDc4LDEzNi4yOTg5Mzg1NzY2NDg2OCw0Ni45NzEzMTc0NTI2MDA4OCwxMzUuODI4NTY2OTg2MTUwNzUsMTUxLjQxNzY0NDExMDI3NTcsMTEzLjQ2OTQ5NTAzNjk1MjI4LDU1LjQ1MTk3NzQwMTEyOTk0NSw0NTAuMjkyNjUzOTQwNDI5MywxMzkyLjA4NjM4OTg3MTUzMjIsMzY1LjIwMjY2MzQ3MzQwMTUsMTAwOS43NDI0MjI5MDM1OTYzLDQyNy40ODQwNzc0OTUwODE1LDE4OS43ODYzMDY0OTkwNjM5Myw1Ny40ODA4MDk2ODg5NzQ4MSw2NDEuNjQ5NDU4NTA0MDEyMiwxOTIzLjgzNzYxOTMzNDMwOCwxNTA3LjMzOTI3NTY1MTg2MjIsMjYyLjU4NzI0Njg3NjM0NjQsNzYuMTE4MDkyODIxNTA2MzQsMTc5LjUwNTM3Mjk0NTYzODQsNTguMDcwNjYyMjUyNTY1MzU2LDIyNC4zMzQxOTEwNTgyMTgwNywxMjY5LjY3NjY5ODA5MDQwMzgsMjAzLjE5ODA2NDAzNTc0MDg4LDUyMi45NDk0ODYzMDEzNjk5LDI2MS42NDU2NjUzMjI1ODA2NywzNDIuMTQ2OTQzNDE1NjAwMSwxNjMuMzE5MjQ1OTkxODE1OTMsMTk5LjIwMTU4Mzk2MjM4MDg4LDM2My4xNTk2NTQyMzM3MjY1NCwyNzAuMDc1NDU3MzU4NDQ5NiwyMTMuMDUxMjAxMjc1Mjg3NTMsMzAzLjU2MDk1ODQ0ODk3LDQ1My4zNTMzNzI2NzY2MzEyLDM5Mi44NTM3NDE0OTY1OTg2LDMyMy43NDY2NTIzMTY0NzE4NSw3ODcuMDE5MzM5OTI4NjQwOSwyNTYuMzgxMDI5MDYyMTg4NSwyNzAuNTE5MDEwMjU5NTA1MTQsMTEyLjExMDI2MTUwMzcxNDM4LDMyMi43MzA4NDM0ODU3ODY2LDE1My41ODUxNjczMDQzODM1NiwyMzUuMDkxMDY3MjUzODQ2NTcsMTI4LjY3MDUzMzQ3OTA3MzM4LDI1MS44MzQyNzYwNTk2NDg5LDQxNi45NzE0ODU0MTExNDA2LDIxMi4wOTMyOTA4NDc5Mzc3LDEzMy43MjYzNjQ4NTcxNDcyNywyODkuNTQxODcxNDI5NjQwNTQsNjMuMDczNzAxMDMxNDI3MDUsMjc4LjI5MTIwNjk4MTcyMjQsMTExLjY0NDc0NzU5MDI2MzAyLDQ3LjYzNTk0MDcyMDkzMTUzLDcxLjI1MjExMzM3NjQyOTYzLDE2Mjg4LjEwMzY2NDI2NTU4CisyMSxNb24gMTQgRmViIDExLDE3NC4zNTYzMzM2NzY2MjIwNiwyNjcuMTU2MjUxMTUzNTE5NjMsNDM4LjY5MjY0NjEzNDUwNjYsNTQ3LjU3OTM3MTM3ODY4MDgsMTgwLjIyNzQ4OTU2NDY5ODg2LDgzLjUyNjg3NzQ5NjIzNTE5LDE0Ny45Mjk4ODY1ODc5OTc2LDMzMC42NDU2NjkyOTEzMzg2LDI3NS44Mjg4NzE0OTkxNzYzLDM2NS4zNjUyMjgyODU4ODkxLDE4My41ODY0NDk4MDgzNDk3MywyMTQuNzE4ODc4ODMzOTA1NiwzNzUuNjYwMzc0MTM1MTMyOCw5Ni43OTQ5MTMwNDEwMDk4MiwyMzcuOTc0OTA2MzYyMDg0MjUsMTExLjEzOTk1MzAyNTAyNjMyLDI4OS4zNjEyNDk2MDc3NTQyNSwyMjYuNjMzODk4ODgxMDQwODQsMjM0Ljk5ODA5NTYxOTkyNTgzLDE5MC42Mzc3NDM0ODk5MzA3OCwxMzYuMjk4OTM4NTc2NjQ4NjgsNDYuOTcxMzE3NDUyNjAwODgsMTM1LjgyODU2Njk4NjE1MDc1LDE1MS40MTc2NDQxMTAyNzU3LDExMy40Njk0OTUwMzY5NTIyOCw1NS40NTE5Nzc0MDExMjk5NDUsNDUwLjI5MjY1Mzk0MDQyOTMsMTM5Mi4wODYzODk4NzE1MzIyLDM2NS4yMDI2NjM0NzM0MDE1LDEwMDkuNzQyNDIyOTAzNTk2Myw0MjcuNDg0MDc3NDk1MDgxNSwxODkuNzg2MzA2NDk5MDYzOTMsNTcuNDgwODA5Njg4OTc0ODEsNjQxLjY0OTQ1ODUwNDAxMjIsMTkyMy44Mzc2MTkzMzQzMDgsMTUwNy4zMzkyNzU2NTE4NjIyLDI2Mi41ODcyNDY4NzYzNDY0LDc2LjExODA5MjgyMTUwNjM0LDE3OS41MDUzNzI5NDU2Mzg0LDU4LjA3MDY2MjI1MjU2NTM1NiwyMjQuMzM0MTkxMDU4MjE4MDcsMTI2OS42NzY2OTgwOTA0MDM4LDIwMy4xOTgwNjQwMzU3NDA4OCw1MjIuOTQ5NDg2MzAxMzY5OSwyNjEuNjQ1NjY1MzIyNTgwNjcsMzQyLjE0Njk0MzQxNTYwMDEsMTYzLjMxOTI0NTk5MTgxNTkzLDE5OS4yMDE1ODM5NjIzODA4OCwzNjMuMTU5NjU0MjMzNzI2NTQsMjcwLjA3NTQ1NzM1ODQ0OTYsMjEzLjA1MTIwMTI3NTI4NzUzLDMwMy41NjA5NTg0NDg5Nyw0NTMuMzUzMzcyNjc2NjMxMiwzOTIuODUzNzQxNDk2NTk4NiwzMjMuNzQ2NjUyMzE2NDcxODUsNzg3LjAxOTMzOTkyODY0MDksMjU2LjM4MTAyOTA2MjE4ODUsMjcwLjUxOTAxMDI1OTUwNTE0LDExMi4xMTAyNjE1MDM3MTQzOCwzMjIuNzMwODQzNDg1Nzg2NiwxNTMuNTg1MTY3MzA0MzgzNTYsMjM1LjA5MTA2NzI1Mzg0NjU3LDEyOC42NzA1MzM0NzkwNzMzOCwyNTEuODM0Mjc2MDU5NjQ4OSw0MTYuOTcxNDg1NDExMTQwNiwyMTIuMDkzMjkwODQ3OTM3NywxMzMuNzI2MzY0ODU3MTQ3MjcsMjg5LjU0MTg3MTQyOTY0MDU0LDYzLjA3MzcwMTAzMTQyNzA1LDI3OC4yOTEyMDY5ODE3MjI0LDExMS42NDQ3NDc1OTAyNjMwMiw0Ny42MzU5NDA3MjA5MzE1Myw3MS4yNTIxMTMzNzY0Mjk2MywxNjI4OC4xMDM2NjQyNjU1OAorMjIsVHVlIDE1IEZlYiAxMSwxNzQuMzU2MzMzNjc2NjIyMDYsMjY3LjE1NjI1MTE1MzUxOTYzLDQzOC42OTI2NDYxMzQ1MDY2LDU0Ny41NzkzNzEzNzg2ODA4LDE4MC4yMjc0ODk1NjQ2OTg4Niw4My41MjY4Nzc0OTYyMzUxOSwxNDcuOTI5ODg2NTg3OTk3NiwzMzAuNjQ1NjY5MjkxMzM4NiwyNzUuODI4ODcxNDk5MTc2MywzNjUuMzY1MjI4Mjg1ODg5MSwxODMuNTg2NDQ5ODA4MzQ5NzMsMjE0LjcxODg3ODgzMzkwNTYsMzc1LjY2MDM3NDEzNTEzMjgsOTYuNzk0OTEzMDQxMDA5ODIsMjM3Ljk3NDkwNjM2MjA4NDI1LDExMS4xMzk5NTMwMjUwMjYzMiwyODkuMzYxMjQ5NjA3NzU0MjUsMjI2LjYzMzg5ODg4MTA0MDg0LDIzNC45OTgwOTU2MTk5MjU4MywxOTAuNjM3NzQzNDg5OTMwNzgsMTM2LjI5ODkzODU3NjY0ODY4LDQ2Ljk3MTMxNzQ1MjYwMDg4LDEzNS44Mjg1NjY5ODYxNTA3NSwxNTEuNDE3NjQ0MTEwMjc1NywxMTMuNDY5NDk1MDM2OTUyMjgsNTUuNDUxOTc3NDAxMTI5OTQ1LDQ1MC4yOTI2NTM5NDA0MjkzLDEzOTIuMDg2Mzg5ODcxNTMyMiwzNjUuMjAyNjYzNDczNDAxNSwxMDA5Ljc0MjQyMjkwMzU5NjMsNDI3LjQ4NDA3NzQ5NTA4MTUsMTg5Ljc4NjMwNjQ5OTA2MzkzLDU3LjQ4MDgwOTY4ODk3NDgxLDY0MS42NDk0NTg1MDQwMTIyLDE5MjMuODM3NjE5MzM0MzA4LDE1MDcuMzM5Mjc1NjUxODYyMiwyNjIuNTg3MjQ2ODc2MzQ2NCw3Ni4xMTgwOTI4MjE1MDYzNCwxNzkuNTA1MzcyOTQ1NjM4NCw1OC4wNzA2NjIyNTI1NjUzNTYsMjI0LjMzNDE5MTA1ODIxODA3LDEyNjkuNjc2Njk4MDkwNDAzOCwyMDMuMTk4MDY0MDM1NzQwODgsNTIyLjk0OTQ4NjMwMTM2OTksMjYxLjY0NTY2NTMyMjU4MDY3LDM0Mi4xNDY5NDM0MTU2MDAxLDE2My4zMTkyNDU5OTE4MTU5MywxOTkuMjAxNTgzOTYyMzgwODgsMzYzLjE1OTY1NDIzMzcyNjU0LDI3MC4wNzU0NTczNTg0NDk2LDIxMy4wNTEyMDEyNzUyODc1MywzMDMuNTYwOTU4NDQ4OTcsNDUzLjM1MzM3MjY3NjYzMTIsMzkyLjg1Mzc0MTQ5NjU5ODYsMzIzLjc0NjY1MjMxNjQ3MTg1LDc4Ny4wMTkzMzk5Mjg2NDA5LDI1Ni4zODEwMjkwNjIxODg1LDI3MC41MTkwMTAyNTk1MDUxNCwxMTIuMTEwMjYxNTAzNzE0MzgsMzIyLjczMDg0MzQ4NTc4NjYsMTUzLjU4NTE2NzMwNDM4MzU2LDIzNS4wOTEwNjcyNTM4NDY1NywxMjguNjcwNTMzNDc5MDczMzgsMjUxLjgzNDI3NjA1OTY0ODksNDE2Ljk3MTQ4NTQxMTE0MDYsMjEyLjA5MzI5MDg0NzkzNzcsMTMzLjcyNjM2NDg1NzE0NzI3LDI4OS41NDE4NzE0Mjk2NDA1NCw2My4wNzM3MDEwMzE0MjcwNSwyNzguMjkxMjA2OTgxNzIyNCwxMTEuNjQ0NzQ3NTkwMjYzMDIsNDcuNjM1OTQwNzIwOTMxNTMsNzEuMjUyMTEzMzc2NDI5NjMsMTYyODguMTAzNjY0MjY1NTgKKzIzLFdlZCAxNiBGZWIgMTEsMTc0LjM1NjMzMzY3NjYyMjA2LDI2Ny4xNTYyNTExNTM1MTk2Myw0MzguNjkyNjQ2MTM0NTA2Niw1NDcuNTc5MzcxMzc4NjgwOCwxODAuMjI3NDg5NTY0Njk4ODYsODMuNTI2ODc3NDk2MjM1MTksMTQ3LjkyOTg4NjU4Nzk5NzYsMzMwLjY0NTY2OTI5MTMzODYsMjc1LjgyODg3MTQ5OTE3NjMsMzY1LjM2NTIyODI4NTg4OTEsMTgzLjU4NjQ0OTgwODM0OTczLDIxNC43MTg4Nzg4MzM5MDU2LDM3NS42NjAzNzQxMzUxMzI4LDk2Ljc5NDkxMzA0MTAwOTgyLDIzNy45NzQ5MDYzNjIwODQyNSwxMTEuMTM5OTUzMDI1MDI2MzIsMjg5LjM2MTI0OTYwNzc1NDI1LDIyNi42MzM4OTg4ODEwNDA4NCwyMzQuOTk4MDk1NjE5OTI1ODMsMTkwLjYzNzc0MzQ4OTkzMDc4LDEzNi4yOTg5Mzg1NzY2NDg2OCw0Ni45NzEzMTc0NTI2MDA4OCwxMzUuODI4NTY2OTg2MTUwNzUsMTUxLjQxNzY0NDExMDI3NTcsMTEzLjQ2OTQ5NTAzNjk1MjI4LDU1LjQ1MTk3NzQwMTEyOTk0NSw0NTAuMjkyNjUzOTQwNDI5MywxMzkyLjA4NjM4OTg3MTUzMjIsMzY1LjIwMjY2MzQ3MzQwMTUsMTAwOS43NDI0MjI5MDM1OTYzLDQyNy40ODQwNzc0OTUwODE1LDE4OS43ODYzMDY0OTkwNjM5Myw1Ny40ODA4MDk2ODg5NzQ4MSw2NDEuNjQ5NDU4NTA0MDEyMiwxOTIzLjgzNzYxOTMzNDMwOCwxNTA3LjMzOTI3NTY1MTg2MjIsMjYyLjU4NzI0Njg3NjM0NjQsNzYuMTE4MDkyODIxNTA2MzQsMTc5LjUwNTM3Mjk0NTYzODQsNTguMDcwNjYyMjUyNTY1MzU2LDIyNC4zMzQxOTEwNTgyMTgwNywxMjY5LjY3NjY5ODA5MDQwMzgsMjAzLjE5ODA2NDAzNTc0MDg4LDUyMi45NDk0ODYzMDEzNjk5LDI2MS42NDU2NjUzMjI1ODA2NywzNDIuMTQ2OTQzNDE1NjAwMSwxNjMuMzE5MjQ1OTkxODE1OTMsMTk5LjIwMTU4Mzk2MjM4MDg4LDM2My4xNTk2NTQyMzM3MjY1NCwyNzAuMDc1NDU3MzU4NDQ5NiwyMTMuMDUxMjAxMjc1Mjg3NTMsMzAzLjU2MDk1ODQ0ODk3LDQ1My4zNTMzNzI2NzY2MzEyLDM5Mi44NTM3NDE0OTY1OTg2LDMyMy43NDY2NTIzMTY0NzE4NSw3ODcuMDE5MzM5OTI4NjQwOSwyNTYuMzgxMDI5MDYyMTg4NSwyNzAuNTE5MDEwMjU5NTA1MTQsMTEyLjExMDI2MTUwMzcxNDM4LDMyMi43MzA4NDM0ODU3ODY2LDE1My41ODUxNjczMDQzODM1NiwyMzUuMDkxMDY3MjUzODQ2NTcsMTI4LjY3MDUzMzQ3OTA3MzM4LDI1MS44MzQyNzYwNTk2NDg5LDQxNi45NzE0ODU0MTExNDA2LDIxMi4wOTMyOTA4NDc5Mzc3LDEzMy43MjYzNjQ4NTcxNDcyNywyODkuNTQxODcxNDI5NjQwNTQsNjMuMDczNzAxMDMxNDI3MDUsMjc4LjI5MTIwNjk4MTcyMjQsMTExLjY0NDc0NzU5MDI2MzAyLDQ3LjYzNTk0MDcyMDkzMTUzLDcxLjI1MjExMzM3NjQyOTYzLDE2Mjg4LjEwMzY2NDI2NTU4CisyNCxUaHUgMTcgRmViIDExLDE3NC4zNTYzMzM2NzY2MjIwNiwyNjcuMTU2MjUxMTUzNTE5NjMsNDM4LjY5MjY0NjEzNDUwNjYsNTQ3LjU3OTM3MTM3ODY4MDgsMTgwLjIyNzQ4OTU2NDY5ODg2LDgzLjUyNjg3NzQ5NjIzNTE5LDE0Ny45Mjk4ODY1ODc5OTc2LDMzMC42NDU2NjkyOTEzMzg2LDI3NS44Mjg4NzE0OTkxNzYzLDM2NS4zNjUyMjgyODU4ODkxLDE4My41ODY0NDk4MDgzNDk3MywyMTQuNzE4ODc4ODMzOTA1NiwzNzUuNjYwMzc0MTM1MTMyOCw5Ni43OTQ5MTMwNDEwMDk4MiwyMzcuOTc0OTA2MzYyMDg0MjUsMTExLjEzOTk1MzAyNTAyNjMyLDI4OS4zNjEyNDk2MDc3NTQyNSwyMjYuNjMzODk4ODgxMDQwODQsMjM0Ljk5ODA5NTYxOTkyNTgzLDE5MC42Mzc3NDM0ODk5MzA3OCwxMzYuMjk4OTM4NTc2NjQ4NjgsNDYuOTcxMzE3NDUyNjAwODgsMTM1LjgyODU2Njk4NjE1MDc1LDE1MS40MTc2NDQxMTAyNzU3LDExMy40Njk0OTUwMzY5NTIyOCw1NS40NTE5Nzc0MDExMjk5NDUsNDUwLjI5MjY1Mzk0MDQyOTMsMTM5Mi4wODYzODk4NzE1MzIyLDM2NS4yMDI2NjM0NzM0MDE1LDEwMDkuNzQyNDIyOTAzNTk2Myw0MjcuNDg0MDc3NDk1MDgxNSwxODkuNzg2MzA2NDk5MDYzOTMsNTcuNDgwODA5Njg4OTc0ODEsNjQxLjY0OTQ1ODUwNDAxMjIsMTkyMy44Mzc2MTkzMzQzMDgsMTUwNy4zMzkyNzU2NTE4NjIyLDI2Mi41ODcyNDY4NzYzNDY0LDc2LjExODA5MjgyMTUwNjM0LDE3OS41MDUzNzI5NDU2Mzg0LDU4LjA3MDY2MjI1MjU2NTM1NiwyMjQuMzM0MTkxMDU4MjE4MDcsMTI2OS42NzY2OTgwOTA0MDM4LDIwMy4xOTgwNjQwMzU3NDA4OCw1MjIuOTQ5NDg2MzAxMzY5OSwyNjEuNjQ1NjY1MzIyNTgwNjcsMzQyLjE0Njk0MzQxNTYwMDEsMTYzLjMxOTI0NTk5MTgxNTkzLDE5OS4yMDE1ODM5NjIzODA4OCwzNjMuMTU5NjU0MjMzNzI2NTQsMjcwLjA3NTQ1NzM1ODQ0OTYsMjEzLjA1MTIwMTI3NTI4NzUzLDMwMy41NjA5NTg0NDg5Nyw0NTMuMzUzMzcyNjc2NjMxMiwzOTIuODUzNzQxNDk2NTk4NiwzMjMuNzQ2NjUyMzE2NDcxODUsNzg3LjAxOTMzOTkyODY0MDksMjU2LjM4MTAyOTA2MjE4ODUsMjcwLjUxOTAxMDI1OTUwNTE0LDExMi4xMTAyNjE1MDM3MTQzOCwzMjIuNzMwODQzNDg1Nzg2NiwxNTMuNTg1MTY3MzA0MzgzNTYsMjM1LjA5MTA2NzI1Mzg0NjU3LDEyOC42NzA1MzM0NzkwNzMzOCwyNTEuODM0Mjc2MDU5NjQ4OSw0MTYuOTcxNDg1NDExMTQwNiwyMTIuMDkzMjkwODQ3OTM3NywxMzMuNzI2MzY0ODU3MTQ3MjcsMjg5LjU0MTg3MTQyOTY0MDU0LDYzLjA3MzcwMTAzMTQyNzA1LDI3OC4yOTEyMDY5ODE3MjI0LDExMS42NDQ3NDc1OTAyNjMwMiw0Ny42MzU5NDA3MjA5MzE1Myw3MS4yNTIxMTMzNzY0Mjk2MywxNjI4OC4xMDM2NjQyNjU1OAorMjUsRnJpIDE4IEZlYiAxMSwxNzQuMzU2MzMzNjc2NjIyMDYsMjY3LjE1NjI1MTE1MzUxOTYzLDQzOC42OTI2NDYxMzQ1MDY2LDU0Ny41NzkzNzEzNzg2ODA4LDE4MC4yMjc0ODk1NjQ2OTg4Niw4My41MjY4Nzc0OTYyMzUxOSwxNDcuOTI5ODg2NTg3OTk3NiwzMzAuNjQ1NjY5MjkxMzM4NiwyNzUuODI4ODcxNDk5MTc2MywzNjUuMzY1MjI4Mjg1ODg5MSwxODMuNTg2NDQ5ODA4MzQ5NzMsMjE0LjcxODg3ODgzMzkwNTYsMzc1LjY2MDM3NDEzNTEzMjgsOTYuNzk0OTEzMDQxMDA5ODIsMjM3Ljk3NDkwNjM2MjA4NDI1LDExMS4xMzk5NTMwMjUwMjYzMiwyODkuMzYxMjQ5NjA3NzU0MjUsMjI2LjYzMzg5ODg4MTA0MDg0LDIzNC45OTgwOTU2MTk5MjU4MywxOTAuNjM3NzQzNDg5OTMwNzgsMTM2LjI5ODkzODU3NjY0ODY4LDQ2Ljk3MTMxNzQ1MjYwMDg4LDEzNS44Mjg1NjY5ODYxNTA3NSwxNTEuNDE3NjQ0MTEwMjc1NywxMTMuNDY5NDk1MDM2OTUyMjgsNTUuNDUxOTc3NDAxMTI5OTQ1LDQ1MC4yOTI2NTM5NDA0MjkzLDEzOTIuMDg2Mzg5ODcxNTMyMiwzNjUuMjAyNjYzNDczNDAxNSwxMDA5Ljc0MjQyMjkwMzU5NjMsNDI3LjQ4NDA3NzQ5NTA4MTUsMTg5Ljc4NjMwNjQ5OTA2MzkzLDU3LjQ4MDgwOTY4ODk3NDgxLDY0MS42NDk0NTg1MDQwMTIyLDE5MjMuODM3NjE5MzM0MzA4LDE1MDcuMzM5Mjc1NjUxODYyMiwyNjIuNTg3MjQ2ODc2MzQ2NCw3Ni4xMTgwOTI4MjE1MDYzNCwxNzkuNTA1MzcyOTQ1NjM4NCw1OC4wNzA2NjIyNTI1NjUzNTYsMjI0LjMzNDE5MTA1ODIxODA3LDEyNjkuNjc2Njk4MDkwNDAzOCwyMDMuMTk4MDY0MDM1NzQwODgsNTIyLjk0OTQ4NjMwMTM2OTksMjYxLjY0NTY2NTMyMjU4MDY3LDM0Mi4xNDY5NDM0MTU2MDAxLDE2My4zMTkyNDU5OTE4MTU5MywxOTkuMjAxNTgzOTYyMzgwODgsMzYzLjE1OTY1NDIzMzcyNjU0LDI3MC4wNzU0NTczNTg0NDk2LDIxMy4wNTEyMDEyNzUyODc1MywzMDMuNTYwOTU4NDQ4OTcsNDUzLjM1MzM3MjY3NjYzMTIsMzkyLjg1Mzc0MTQ5NjU5ODYsMzIzLjc0NjY1MjMxNjQ3MTg1LDc4Ny4wMTkzMzk5Mjg2NDA5LDI1Ni4zODEwMjkwNjIxODg1LDI3MC41MTkwMTAyNTk1MDUxNCwxMTIuMTEwMjYxNTAzNzE0MzgsMzIyLjczMDg0MzQ4NTc4NjYsMTUzLjU4NTE2NzMwNDM4MzU2LDIzNS4wOTEwNjcyNTM4NDY1NywxMjguNjcwNTMzNDc5MDczMzgsMjUxLjgzNDI3NjA1OTY0ODksNDE2Ljk3MTQ4NTQxMTE0MDYsMjEyLjA5MzI5MDg0NzkzNzcsMTMzLjcyNjM2NDg1NzE0NzI3LDI4OS41NDE4NzE0Mjk2NDA1NCw2My4wNzM3MDEwMzE0MjcwNSwyNzguMjkxMjA2OTgxNzIyNCwxMTEuNjQ0NzQ3NTkwMjYzMDIsNDcuNjM1OTQwNzIwOTMxNTMsNzEuMjUyMTEzMzc2NDI5NjMsMTYyODguMTAzNjY0MjY1NTgKKzI2LFNhdCAxOSBGZWIgMTEsMTc0LjM1NjMzMzY3NjYyMjA2LDI2Ny4xNTYyNTExNTM1MTk2Myw0MzguNjkyNjQ2MTM0NTA2Niw1NDcuNTc5MzcxMzc4NjgwOCwxODAuMjI3NDg5NTY0Njk4ODYsODMuNTI2ODc3NDk2MjM1MTksMTQ3LjkyOTg4NjU4Nzk5NzYsMzMwLjY0NTY2OTI5MTMzODYsMjc1LjgyODg3MTQ5OTE3NjMsMzY1LjM2NTIyODI4NTg4OTEsMTgzLjU4NjQ0OTgwODM0OTczLDIxNC43MTg4Nzg4MzM5MDU2LDM3NS42NjAzNzQxMzUxMzI4LDk2Ljc5NDkxMzA0MTAwOTgyLDIzNy45NzQ5MDYzNjIwODQyNSwxMTEuMTM5OTUzMDI1MDI2MzIsMjg5LjM2MTI0OTYwNzc1NDI1LDIyNi42MzM4OTg4ODEwNDA4NCwyMzQuOTk4MDk1NjE5OTI1ODMsMTkwLjYzNzc0MzQ4OTkzMDc4LDEzNi4yOTg5Mzg1NzY2NDg2OCw0Ni45NzEzMTc0NTI2MDA4OCwxMzUuODI4NTY2OTg2MTUwNzUsMTUxLjQxNzY0NDExMDI3NTcsMTEzLjQ2OTQ5NTAzNjk1MjI4LDU1LjQ1MTk3NzQwMTEyOTk0NSw0NTAuMjkyNjUzOTQwNDI5MywxMzkyLjA4NjM4OTg3MTUzMjIsMzY1LjIwMjY2MzQ3MzQwMTUsMTAwOS43NDI0MjI5MDM1OTYzLDQyNy40ODQwNzc0OTUwODE1LDE4OS43ODYzMDY0OTkwNjM5Myw1Ny40ODA4MDk2ODg5NzQ4MSw2NDEuNjQ5NDU4NTA0MDEyMiwxOTIzLjgzNzYxOTMzNDMwOCwxNTA3LjMzOTI3NTY1MTg2MjIsMjYyLjU4NzI0Njg3NjM0NjQsNzYuMTE4MDkyODIxNTA2MzQsMTc5LjUwNTM3Mjk0NTYzODQsNTguMDcwNjYyMjUyNTY1MzU2LDIyNC4zMzQxOTEwNTgyMTgwNywxMjY5LjY3NjY5ODA5MDQwMzgsMjAzLjE5ODA2NDAzNTc0MDg4LDUyMi45NDk0ODYzMDEzNjk5LDI2MS42NDU2NjUzMjI1ODA2NywzNDIuMTQ2OTQzNDE1NjAwMSwxNjMuMzE5MjQ1OTkxODE1OTMsMTk5LjIwMTU4Mzk2MjM4MDg4LDM2My4xNTk2NTQyMzM3MjY1NCwyNzAuMDc1NDU3MzU4NDQ5NiwyMTMuMDUxMjAxMjc1Mjg3NTMsMzAzLjU2MDk1ODQ0ODk3LDQ1My4zNTMzNzI2NzY2MzEyLDM5Mi44NTM3NDE0OTY1OTg2LDMyMy43NDY2NTIzMTY0NzE4NSw3ODcuMDE5MzM5OTI4NjQwOSwyNTYuMzgxMDI5MDYyMTg4NSwyNzAuNTE5MDEwMjU5NTA1MTQsMTEyLjExMDI2MTUwMzcxNDM4LDMyMi43MzA4NDM0ODU3ODY2LDE1My41ODUxNjczMDQzODM1NiwyMzUuMDkxMDY3MjUzODQ2NTcsMTI4LjY3MDUzMzQ3OTA3MzM4LDI1MS44MzQyNzYwNTk2NDg5LDQxNi45NzE0ODU0MTExNDA2LDIxMi4wOTMyOTA4NDc5Mzc3LDEzMy43MjYzNjQ4NTcxNDcyNywyODkuNTQxODcxNDI5NjQwNTQsNjMuMDczNzAxMDMxNDI3MDUsMjc4LjI5MTIwNjk4MTcyMjQsMTExLjY0NDc0NzU5MDI2MzAyLDQ3LjYzNTk0MDcyMDkzMTUzLDcxLjI1MjExMzM3NjQyOTYzLDE2Mjg4LjEwMzY2NDI2NTU4CisyNyxTdW4gMjAgRmViIDExLDE3NC4zNTYzMzM2NzY2MjIwNiwyNjcuMTU2MjUxMTUzNTE5NjMsNDM4LjY5MjY0NjEzNDUwNjYsNTQ3LjU3OTM3MTM3ODY4MDgsMTgwLjIyNzQ4OTU2NDY5ODg2LDgzLjUyNjg3NzQ5NjIzNTE5LDE0Ny45Mjk4ODY1ODc5OTc2LDMzMC42NDU2NjkyOTEzMzg2LDI3NS44Mjg4NzE0OTkxNzYzLDM2NS4zNjUyMjgyODU4ODkxLDE4My41ODY0NDk4MDgzNDk3MywyMTQuNzE4ODc4ODMzOTA1NiwzNzUuNjYwMzc0MTM1MTMyOCw5Ni43OTQ5MTMwNDEwMDk4MiwyMzcuOTc0OTA2MzYyMDg0MjUsMTExLjEzOTk1MzAyNTAyNjMyLDI4OS4zNjEyNDk2MDc3NTQyNSwyMjYuNjMzODk4ODgxMDQwODQsMjM0Ljk5ODA5NTYxOTkyNTgzLDE5MC42Mzc3NDM0ODk5MzA3OCwxMzYuMjk4OTM4NTc2NjQ4NjgsNDYuOTcxMzE3NDUyNjAwODgsMTM1LjgyODU2Njk4NjE1MDc1LDE1MS40MTc2NDQxMTAyNzU3LDExMy40Njk0OTUwMzY5NTIyOCw1NS40NTE5Nzc0MDExMjk5NDUsNDUwLjI5MjY1Mzk0MDQyOTMsMTM5Mi4wODYzODk4NzE1MzIyLDM2NS4yMDI2NjM0NzM0MDE1LDEwMDkuNzQyNDIyOTAzNTk2Myw0MjcuNDg0MDc3NDk1MDgxNSwxODkuNzg2MzA2NDk5MDYzOTMsNTcuNDgwODA5Njg4OTc0ODEsNjQxLjY0OTQ1ODUwNDAxMjIsMTkyMy44Mzc2MTkzMzQzMDgsMTUwNy4zMzkyNzU2NTE4NjIyLDI2Mi41ODcyNDY4NzYzNDY0LDc2LjExODA5MjgyMTUwNjM0LDE3OS41MDUzNzI5NDU2Mzg0LDU4LjA3MDY2MjI1MjU2NTM1NiwyMjQuMzM0MTkxMDU4MjE4MDcsMTI2OS42NzY2OTgwOTA0MDM4LDIwMy4xOTgwNjQwMzU3NDA4OCw1MjIuOTQ5NDg2MzAxMzY5OSwyNjEuNjQ1NjY1MzIyNTgwNjcsMzQyLjE0Njk0MzQxNTYwMDEsMTYzLjMxOTI0NTk5MTgxNTkzLDE5OS4yMDE1ODM5NjIzODA4OCwzNjMuMTU5NjU0MjMzNzI2NTQsMjcwLjA3NTQ1NzM1ODQ0OTYsMjEzLjA1MTIwMTI3NTI4NzUzLDMwMy41NjA5NTg0NDg5Nyw0NTMuMzUzMzcyNjc2NjMxMiwzOTIuODUzNzQxNDk2NTk4NiwzMjMuNzQ2NjUyMzE2NDcxODUsNzg3LjAxOTMzOTkyODY0MDksMjU2LjM4MTAyOTA2MjE4ODUsMjcwLjUxOTAxMDI1OTUwNTE0LDExMi4xMTAyNjE1MDM3MTQzOCwzMjIuNzMwODQzNDg1Nzg2NiwxNTMuNTg1MTY3MzA0MzgzNTYsMjM1LjA5MTA2NzI1Mzg0NjU3LDEyOC42NzA1MzM0NzkwNzMzOCwyNTEuODM0Mjc2MDU5NjQ4OSw0MTYuOTcxNDg1NDExMTQwNiwyMTIuMDkzMjkwODQ3OTM3NywxMzMuNzI2MzY0ODU3MTQ3MjcsMjg5LjU0MTg3MTQyOTY0MDU0LDYzLjA3MzcwMTAzMTQyNzA1LDI3OC4yOTEyMDY5ODE3MjI0LDExMS42NDQ3NDc1OTAyNjMwMiw0Ny42MzU5NDA3MjA5MzE1Myw3MS4yNTIxMTMzNzY0Mjk2MywxNjI4OC4xMDM2NjQyNjU1OAorMjgsTW9uIDIxIEZlYiAxMSwxNzQuMzU2MzMzNjc2NjIyMDYsMjY3LjE1NjI1MTE1MzUxOTYzLDQzOC42OTI2NDYxMzQ1MDY2LDU0Ny41NzkzNzEzNzg2ODA4LDE4MC4yMjc0ODk1NjQ2OTg4Niw4My41MjY4Nzc0OTYyMzUxOSwxNDcuOTI5ODg2NTg3OTk3NiwzMzAuNjQ1NjY5MjkxMzM4NiwyNzUuODI4ODcxNDk5MTc2MywzNjUuMzY1MjI4Mjg1ODg5MSwxODMuNTg2NDQ5ODA4MzQ5NzMsMjE0LjcxODg3ODgzMzkwNTYsMzc1LjY2MDM3NDEzNTEzMjgsOTYuNzk0OTEzMDQxMDA5ODIsMjM3Ljk3NDkwNjM2MjA4NDI1LDExMS4xMzk5NTMwMjUwMjYzMiwyODkuMzYxMjQ5NjA3NzU0MjUsMjI2LjYzMzg5ODg4MTA0MDg0LDIzNC45OTgwOTU2MTk5MjU4MywxOTAuNjM3NzQzNDg5OTMwNzgsMTM2LjI5ODkzODU3NjY0ODY4LDQ2Ljk3MTMxNzQ1MjYwMDg4LDEzNS44Mjg1NjY5ODYxNTA3NSwxNTEuNDE3NjQ0MTEwMjc1NywxMTMuNDY5NDk1MDM2OTUyMjgsNTUuNDUxOTc3NDAxMTI5OTQ1LDQ1MC4yOTI2NTM5NDA0MjkzLDEzOTIuMDg2Mzg5ODcxNTMyMiwzNjUuMjAyNjYzNDczNDAxNSwxMDA5Ljc0MjQyMjkwMzU5NjMsNDI3LjQ4NDA3NzQ5NTA4MTUsMTg5Ljc4NjMwNjQ5OTA2MzkzLDU3LjQ4MDgwOTY4ODk3NDgxLDY0MS42NDk0NTg1MDQwMTIyLDE5MjMuODM3NjE5MzM0MzA4LDE1MDcuMzM5Mjc1NjUxODYyMiwyNjIuNTg3MjQ2ODc2MzQ2NCw3Ni4xMTgwOTI4MjE1MDYzNCwxNzkuNTA1MzcyOTQ1NjM4NCw1OC4wNzA2NjIyNTI1NjUzNTYsMjI0LjMzNDE5MTA1ODIxODA3LDEyNjkuNjc2Njk4MDkwNDAzOCwyMDMuMTk4MDY0MDM1NzQwODgsNTIyLjk0OTQ4NjMwMTM2OTksMjYxLjY0NTY2NTMyMjU4MDY3LDM0Mi4xNDY5NDM0MTU2MDAxLDE2My4zMTkyNDU5OTE4MTU5MywxOTkuMjAxNTgzOTYyMzgwODgsMzYzLjE1OTY1NDIzMzcyNjU0LDI3MC4wNzU0NTczNTg0NDk2LDIxMy4wNTEyMDEyNzUyODc1MywzMDMuNTYwOTU4NDQ4OTcsNDUzLjM1MzM3MjY3NjYzMTIsMzkyLjg1Mzc0MTQ5NjU5ODYsMzIzLjc0NjY1MjMxNjQ3MTg1LDc4Ny4wMTkzMzk5Mjg2NDA5LDI1Ni4zODEwMjkwNjIxODg1LDI3MC41MTkwMTAyNTk1MDUxNCwxMTIuMTEwMjYxNTAzNzE0MzgsMzIyLjczMDg0MzQ4NTc4NjYsMTUzLjU4NTE2NzMwNDM4MzU2LDIzNS4wOTEwNjcyNTM4NDY1NywxMjguNjcwNTMzNDc5MDczMzgsMjUxLjgzNDI3NjA1OTY0ODksNDE2Ljk3MTQ4NTQxMTE0MDYsMjEyLjA5MzI5MDg0NzkzNzcsMTMzLjcyNjM2NDg1NzE0NzI3LDI4OS41NDE4NzE0Mjk2NDA1NCw2My4wNzM3MDEwMzE0MjcwNSwyNzguMjkxMjA2OTgxNzIyNCwxMTEuNjQ0NzQ3NTkwMjYzMDIsNDcuNjM1OTQwNzIwOTMxNTMsNzEuMjUyMTEzMzc2NDI5NjMsMTYyODguMTAzNjY0MjY1NTgKKzI5LFR1ZSAyMiBGZWIgMTEsMTc0LjM1NjMzMzY3NjYyMjA2LDI2Ny4xNTYyNTExNTM1MTk2Myw0MzguNjkyNjQ2MTM0NTA2Niw1NDcuNTc5MzcxMzc4NjgwOCwxODAuMjI3NDg5NTY0Njk4ODYsODMuNTI2ODc3NDk2MjM1MTksMTQ3LjkyOTg4NjU4Nzk5NzYsMzMwLjY0NTY2OTI5MTMzODYsMjc1LjgyODg3MTQ5OTE3NjMsMzY1LjM2NTIyODI4NTg4OTEsMTgzLjU4NjQ0OTgwODM0OTczLDIxNC43MTg4Nzg4MzM5MDU2LDM3NS42NjAzNzQxMzUxMzI4LDk2Ljc5NDkxMzA0MTAwOTgyLDIzNy45NzQ5MDYzNjIwODQyNSwxMTEuMTM5OTUzMDI1MDI2MzIsMjg5LjM2MTI0OTYwNzc1NDI1LDIyNi42MzM4OTg4ODEwNDA4NCwyMzQuOTk4MDk1NjE5OTI1ODMsMTkwLjYzNzc0MzQ4OTkzMDc4LDEzNi4yOTg5Mzg1NzY2NDg2OCw0Ni45NzEzMTc0NTI2MDA4OCwxMzUuODI4NTY2OTg2MTUwNzUsMTUxLjQxNzY0NDExMDI3NTcsMTEzLjQ2OTQ5NTAzNjk1MjI4LDU1LjQ1MTk3NzQwMTEyOTk0NSw0NTAuMjkyNjUzOTQwNDI5MywxMzkyLjA4NjM4OTg3MTUzMjIsMzY1LjIwMjY2MzQ3MzQwMTUsMTAwOS43NDI0MjI5MDM1OTYzLDQyNy40ODQwNzc0OTUwODE1LDE4OS43ODYzMDY0OTkwNjM5Myw1Ny40ODA4MDk2ODg5NzQ4MSw2NDEuNjQ5NDU4NTA0MDEyMiwxOTIzLjgzNzYxOTMzNDMwOCwxNTA3LjMzOTI3NTY1MTg2MjIsMjYyLjU4NzI0Njg3NjM0NjQsNzYuMTE4MDkyODIxNTA2MzQsMTc5LjUwNTM3Mjk0NTYzODQsNTguMDcwNjYyMjUyNTY1MzU2LDIyNC4zMzQxOTEwNTgyMTgwNywxMjY5LjY3NjY5ODA5MDQwMzgsMjAzLjE5ODA2NDAzNTc0MDg4LDUyMi45NDk0ODYzMDEzNjk5LDI2MS42NDU2NjUzMjI1ODA2NywzNDIuMTQ2OTQzNDE1NjAwMSwxNjMuMzE5MjQ1OTkxODE1OTMsMTk5LjIwMTU4Mzk2MjM4MDg4LDM2My4xNTk2NTQyMzM3MjY1NCwyNzAuMDc1NDU3MzU4NDQ5NiwyMTMuMDUxMjAxMjc1Mjg3NTMsMzAzLjU2MDk1ODQ0ODk3LDQ1My4zNTMzNzI2NzY2MzEyLDM5Mi44NTM3NDE0OTY1OTg2LDMyMy43NDY2NTIzMTY0NzE4NSw3ODcuMDE5MzM5OTI4NjQwOSwyNTYuMzgxMDI5MDYyMTg4NSwyNzAuNTE5MDEwMjU5NTA1MTQsMTEyLjExMDI2MTUwMzcxNDM4LDMyMi43MzA4NDM0ODU3ODY2LDE1My41ODUxNjczMDQzODM1NiwyMzUuMDkxMDY3MjUzODQ2NTcsMTI4LjY3MDUzMzQ3OTA3MzM4LDI1MS44MzQyNzYwNTk2NDg5LDQxNi45NzE0ODU0MTExNDA2LDIxMi4wOTMyOTA4NDc5Mzc3LDEzMy43MjYzNjQ4NTcxNDcyNywyODkuNTQxODcxNDI5NjQwNTQsNjMuMDczNzAxMDMxNDI3MDUsMjc4LjI5MTIwNjk4MTcyMjQsMTExLjY0NDc0NzU5MDI2MzAyLDQ3LjYzNTk0MDcyMDkzMTUzLDcxLjI1MjExMzM3NjQyOTYzLDE2Mjg4LjEwMzY2NDI2NTU4CiszMCxXZWQgMjMgRmViIDExLDE3NC4zNTYzMzM2NzY2MjIwNiwyNjcuMTU2MjUxMTUzNTE5NjMsNDM4LjY5MjY0NjEzNDUwNjYsNTQ3LjU3OTM3MTM3ODY4MDgsMTgwLjIyNzQ4OTU2NDY5ODg2LDgzLjUyNjg3NzQ5NjIzNTE5LDE0Ny45Mjk4ODY1ODc5OTc2LDMzMC42NDU2NjkyOTEzMzg2LDI3NS44Mjg4NzE0OTkxNzYzLDM2NS4zNjUyMjgyODU4ODkxLDE4My41ODY0NDk4MDgzNDk3MywyMTQuNzE4ODc4ODMzOTA1NiwzNzUuNjYwMzc0MTM1MTMyOCw5Ni43OTQ5MTMwNDEwMDk4MiwyMzcuOTc0OTA2MzYyMDg0MjUsMTExLjEzOTk1MzAyNTAyNjMyLDI4OS4zNjEyNDk2MDc3NTQyNSwyMjYuNjMzODk4ODgxMDQwODQsMjM0Ljk5ODA5NTYxOTkyNTgzLDE5MC42Mzc3NDM0ODk5MzA3OCwxMzYuMjk4OTM4NTc2NjQ4NjgsNDYuOTcxMzE3NDUyNjAwODgsMTM1LjgyODU2Njk4NjE1MDc1LDE1MS40MTc2NDQxMTAyNzU3LDExMy40Njk0OTUwMzY5NTIyOCw1NS40NTE5Nzc0MDExMjk5NDUsNDUwLjI5MjY1Mzk0MDQyOTMsMTM5Mi4wODYzODk4NzE1MzIyLDM2NS4yMDI2NjM0NzM0MDE1LDEwMDkuNzQyNDIyOTAzNTk2Myw0MjcuNDg0MDc3NDk1MDgxNSwxODkuNzg2MzA2NDk5MDYzOTMsNTcuNDgwODA5Njg4OTc0ODEsNjQxLjY0OTQ1ODUwNDAxMjIsMTkyMy44Mzc2MTkzMzQzMDgsMTUwNy4zMzkyNzU2NTE4NjIyLDI2Mi41ODcyNDY4NzYzNDY0LDc2LjExODA5MjgyMTUwNjM0LDE3OS41MDUzNzI5NDU2Mzg0LDU4LjA3MDY2MjI1MjU2NTM1NiwyMjQuMzM0MTkxMDU4MjE4MDcsMTI2OS42NzY2OTgwOTA0MDM4LDIwMy4xOTgwNjQwMzU3NDA4OCw1MjIuOTQ5NDg2MzAxMzY5OSwyNjEuNjQ1NjY1MzIyNTgwNjcsMzQyLjE0Njk0MzQxNTYwMDEsMTYzLjMxOTI0NTk5MTgxNTkzLDE5OS4yMDE1ODM5NjIzODA4OCwzNjMuMTU5NjU0MjMzNzI2NTQsMjcwLjA3NTQ1NzM1ODQ0OTYsMjEzLjA1MTIwMTI3NTI4NzUzLDMwMy41NjA5NTg0NDg5Nyw0NTMuMzUzMzcyNjc2NjMxMiwzOTIuODUzNzQxNDk2NTk4NiwzMjMuNzQ2NjUyMzE2NDcxODUsNzg3LjAxOTMzOTkyODY0MDksMjU2LjM4MTAyOTA2MjE4ODUsMjcwLjUxOTAxMDI1OTUwNTE0LDExMi4xMTAyNjE1MDM3MTQzOCwzMjIuNzMwODQzNDg1Nzg2NiwxNTMuNTg1MTY3MzA0MzgzNTYsMjM1LjA5MTA2NzI1Mzg0NjU3LDEyOC42NzA1MzM0NzkwNzMzOCwyNTEuODM0Mjc2MDU5NjQ4OSw0MTYuOTcxNDg1NDExMTQwNiwyMTIuMDkzMjkwODQ3OTM3NywxMzMuNzI2MzY0ODU3MTQ3MjcsMjg5LjU0MTg3MTQyOTY0MDU0LDYzLjA3MzcwMTAzMTQyNzA1LDI3OC4yOTEyMDY5ODE3MjI0LDExMS42NDQ3NDc1OTAyNjMwMiw0Ny42MzU5NDA3MjA5MzE1Myw3MS4yNTIxMTMzNzY0Mjk2MywxNjI4OC4xMDM2NjQyNjU1OAorMzEsVGh1IDI0IEZlYiAxMSwxNzQuMzU2MzMzNjc2NjIyMDYsMjY3LjE1NjI1MTE1MzUxOTYzLDQzOC42OTI2NDYxMzQ1MDY2LDU0Ny41NzkzNzEzNzg2ODA4LDE4MC4yMjc0ODk1NjQ2OTg4Niw4My41MjY4Nzc0OTYyMzUxOSwxNDcuOTI5ODg2NTg3OTk3NiwzMzAuNjQ1NjY5MjkxMzM4NiwyNzUuODI4ODcxNDk5MTc2MywzNjUuMzY1MjI4Mjg1ODg5MSwxODMuNTg2NDQ5ODA4MzQ5NzMsMjE0LjcxODg3ODgzMzkwNTYsMzc1LjY2MDM3NDEzNTEzMjgsOTYuNzk0OTEzMDQxMDA5ODIsMjM3Ljk3NDkwNjM2MjA4NDI1LDExMS4xMzk5NTMwMjUwMjYzMiwyODkuMzYxMjQ5NjA3NzU0MjUsMjI2LjYzMzg5ODg4MTA0MDg0LDIzNC45OTgwOTU2MTk5MjU4MywxOTAuNjM3NzQzNDg5OTMwNzgsMTM2LjI5ODkzODU3NjY0ODY4LDQ2Ljk3MTMxNzQ1MjYwMDg4LDEzNS44Mjg1NjY5ODYxNTA3NSwxNTEuNDE3NjQ0MTEwMjc1NywxMTMuNDY5NDk1MDM2OTUyMjgsNTUuNDUxOTc3NDAxMTI5OTQ1LDQ1MC4yOTI2NTM5NDA0MjkzLDEzOTIuMDg2Mzg5ODcxNTMyMiwzNjUuMjAyNjYzNDczNDAxNSwxMDA5Ljc0MjQyMjkwMzU5NjMsNDI3LjQ4NDA3NzQ5NTA4MTUsMTg5Ljc4NjMwNjQ5OTA2MzkzLDU3LjQ4MDgwOTY4ODk3NDgxLDY0MS42NDk0NTg1MDQwMTIyLDE5MjMuODM3NjE5MzM0MzA4LDE1MDcuMzM5Mjc1NjUxODYyMiwyNjIuNTg3MjQ2ODc2MzQ2NCw3Ni4xMTgwOTI4MjE1MDYzNCwxNzkuNTA1MzcyOTQ1NjM4NCw1OC4wNzA2NjIyNTI1NjUzNTYsMjI0LjMzNDE5MTA1ODIxODA3LDEyNjkuNjc2Njk4MDkwNDAzOCwyMDMuMTk4MDY0MDM1NzQwODgsNTIyLjk0OTQ4NjMwMTM2OTksMjYxLjY0NTY2NTMyMjU4MDY3LDM0Mi4xNDY5NDM0MTU2MDAxLDE2My4zMTkyNDU5OTE4MTU5MywxOTkuMjAxNTgzOTYyMzgwODgsMzYzLjE1OTY1NDIzMzcyNjU0LDI3MC4wNzU0NTczNTg0NDk2LDIxMy4wNTEyMDEyNzUyODc1MywzMDMuNTYwOTU4NDQ4OTcsNDUzLjM1MzM3MjY3NjYzMTIsMzkyLjg1Mzc0MTQ5NjU5ODYsMzIzLjc0NjY1MjMxNjQ3MTg1LDc4Ny4wMTkzMzk5Mjg2NDA5LDI1Ni4zODEwMjkwNjIxODg1LDI3MC41MTkwMTAyNTk1MDUxNCwxMTIuMTEwMjYxNTAzNzE0MzgsMzIyLjczMDg0MzQ4NTc4NjYsMTUzLjU4NTE2NzMwNDM4MzU2LDIzNS4wOTEwNjcyNTM4NDY1NywxMjguNjcwNTMzNDc5MDczMzgsMjUxLjgzNDI3NjA1OTY0ODksNDE2Ljk3MTQ4NTQxMTE0MDYsMjEyLjA5MzI5MDg0NzkzNzcsMTMzLjcyNjM2NDg1NzE0NzI3LDI4OS41NDE4NzE0Mjk2NDA1NCw2My4wNzM3MDEwMzE0MjcwNSwyNzguMjkxMjA2OTgxNzIyNCwxMTEuNjQ0NzQ3NTkwMjYzMDIsNDcuNjM1OTQwNzIwOTMxNTMsNzEuMjUyMTEzMzc2NDI5NjMsMTYyODguMTAzNjY0MjY1NTgKKzMyLEZyaSAyNSBGZWIgMTEsMTc0LjM1NjMzMzY3NjYyMjA2LDI2Ny4xNTYyNTExNTM1MTk2Myw0MzguNjkyNjQ2MTM0NTA2Niw1NDcuNTc5MzcxMzc4NjgwOCwxODAuMjI3NDg5NTY0Njk4ODYsODMuNTI2ODc3NDk2MjM1MTksMTQ3LjkyOTg4NjU4Nzk5NzYsMzMwLjY0NTY2OTI5MTMzODYsMjc1LjgyODg3MTQ5OTE3NjMsMzY1LjM2NTIyODI4NTg4OTEsMTgzLjU4NjQ0OTgwODM0OTczLDIxNC43MTg4Nzg4MzM5MDU2LDM3NS42NjAzNzQxMzUxMzI4LDk2Ljc5NDkxMzA0MTAwOTgyLDIzNy45NzQ5MDYzNjIwODQyNSwxMTEuMTM5OTUzMDI1MDI2MzIsMjg5LjM2MTI0OTYwNzc1NDI1LDIyNi42MzM4OTg4ODEwNDA4NCwyMzQuOTk4MDk1NjE5OTI1ODMsMTkwLjYzNzc0MzQ4OTkzMDc4LDEzNi4yOTg5Mzg1NzY2NDg2OCw0Ni45NzEzMTc0NTI2MDA4OCwxMzUuODI4NTY2OTg2MTUwNzUsMTUxLjQxNzY0NDExMDI3NTcsMTEzLjQ2OTQ5NTAzNjk1MjI4LDU1LjQ1MTk3NzQwMTEyOTk0NSw0NTAuMjkyNjUzOTQwNDI5MywxMzkyLjA4NjM4OTg3MTUzMjIsMzY1LjIwMjY2MzQ3MzQwMTUsMTAwOS43NDI0MjI5MDM1OTYzLDQyNy40ODQwNzc0OTUwODE1LDE4OS43ODYzMDY0OTkwNjM5Myw1Ny40ODA4MDk2ODg5NzQ4MSw2NDEuNjQ5NDU4NTA0MDEyMiwxOTIzLjgzNzYxOTMzNDMwOCwxNTA3LjMzOTI3NTY1MTg2MjIsMjYyLjU4NzI0Njg3NjM0NjQsNzYuMTE4MDkyODIxNTA2MzQsMTc5LjUwNTM3Mjk0NTYzODQsNTguMDcwNjYyMjUyNTY1MzU2LDIyNC4zMzQxOTEwNTgyMTgwNywxMjY5LjY3NjY5ODA5MDQwMzgsMjAzLjE5ODA2NDAzNTc0MDg4LDUyMi45NDk0ODYzMDEzNjk5LDI2MS42NDU2NjUzMjI1ODA2NywzNDIuMTQ2OTQzNDE1NjAwMSwxNjMuMzE5MjQ1OTkxODE1OTMsMTk5LjIwMTU4Mzk2MjM4MDg4LDM2My4xNTk2NTQyMzM3MjY1NCwyNzAuMDc1NDU3MzU4NDQ5NiwyMTMuMDUxMjAxMjc1Mjg3NTMsMzAzLjU2MDk1ODQ0ODk3LDQ1My4zNTMzNzI2NzY2MzEyLDM5Mi44NTM3NDE0OTY1OTg2LDMyMy43NDY2NTIzMTY0NzE4NSw3ODcuMDE5MzM5OTI4NjQwOSwyNTYuMzgxMDI5MDYyMTg4NSwyNzAuNTE5MDEwMjU5NTA1MTQsMTEyLjExMDI2MTUwMzcxNDM4LDMyMi43MzA4NDM0ODU3ODY2LDE1My41ODUxNjczMDQzODM1NiwyMzUuMDkxMDY3MjUzODQ2NTcsMTI4LjY3MDUzMzQ3OTA3MzM4LDI1MS44MzQyNzYwNTk2NDg5LDQxNi45NzE0ODU0MTExNDA2LDIxMi4wOTMyOTA4NDc5Mzc3LDEzMy43MjYzNjQ4NTcxNDcyNywyODkuNTQxODcxNDI5NjQwNTQsNjMuMDczNzAxMDMxNDI3MDUsMjc4LjI5MTIwNjk4MTcyMjQsMTExLjY0NDc0NzU5MDI2MzAyLDQ3LjYzNTk0MDcyMDkzMTUzLDcxLjI1MjExMzM3NjQyOTYzLDE2Mjg4LjEwMzY2NDI2NTU4CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNFSVJfUktfUmVmZXJlbmNlL2F1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwvaHVtYW4vSW5jaWRlbmNlXzAuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTRUlSX1JLX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL2h1bWFuL0luY2lkZW5jZV8wLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YjEzOTBjCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTRUlSX1JLX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL2h1bWFuL0luY2lkZW5jZV8wLmNzdgpAQCAtMCwwICsxLDMzIEBACitpdGVyYXRpb24sdGltZSxzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9ub2RlL3RyYW5zcG9ydC9waXBlL1BITAorMSxUdWUgMjUgSmFuIDExLDAuMAorMixXZWQgMjYgSmFuIDExLDAuMAorMyxUaHUgMjcgSmFuIDExLDAuMAorNCxGcmkgMjggSmFuIDExLDAuMAorNSxTYXQgMjkgSmFuIDExLDAuMAorNixTdW4gMzAgSmFuIDExLDAuMAorNyxNb24gMzEgSmFuIDExLDAuMAorOCxUdWUgMSBGZWIgMTEsMC4wCis5LFdlZCAyIEZlYiAxMSwwLjAKKzEwLFRodSAzIEZlYiAxMSwwLjAKKzExLEZyaSA0IEZlYiAxMSwwLjAKKzEyLFNhdCA1IEZlYiAxMSwwLjAKKzEzLFN1biA2IEZlYiAxMSwwLjAKKzE0LE1vbiA3IEZlYiAxMSwwLjAKKzE1LFR1ZSA4IEZlYiAxMSwwLjAKKzE2LFdlZCA5IEZlYiAxMSwwLjAKKzE3LFRodSAxMCBGZWIgMTEsMC4wCisxOCxGcmkgMTEgRmViIDExLDAuMAorMTksU2F0IDEyIEZlYiAxMSwwLjAKKzIwLFN1biAxMyBGZWIgMTEsMC4wCisyMSxNb24gMTQgRmViIDExLDAuMAorMjIsVHVlIDE1IEZlYiAxMSwwLjAKKzIzLFdlZCAxNiBGZWIgMTEsMC4wCisyNCxUaHUgMTcgRmViIDExLDAuMAorMjUsRnJpIDE4IEZlYiAxMSwwLjAKKzI2LFNhdCAxOSBGZWIgMTEsMC4wCisyNyxTdW4gMjAgRmViIDExLDAuMAorMjgsTW9uIDIxIEZlYiAxMSwwLjAKKzI5LFR1ZSAyMiBGZWIgMTEsMC4wCiszMCxXZWQgMjMgRmViIDExLDAuMAorMzEsVGh1IDI0IEZlYiAxMSwwLjAKKzMyLEZyaSAyNSBGZWIgMTEsMC4wCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNFSVJfUktfUmVmZXJlbmNlL2F1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwvaHVtYW4vSW5jaWRlbmNlXzEuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTRUlSX1JLX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL2h1bWFuL0luY2lkZW5jZV8xLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NGMwMjMyCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTRUlSX1JLX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL2h1bWFuL0luY2lkZW5jZV8xLmNzdgpAQCAtMCwwICsxLDMzIEBACitpdGVyYXRpb24sdGltZSxzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9ub2RlL3RyYW5zcG9ydC9waXBlL1BILTExLHN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL25vZGUvdHJhbnNwb3J0L3BpcGUvUEgtMyxzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9ub2RlL3RyYW5zcG9ydC9waXBlL1BILTcsc3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vbm9kZS90cmFuc3BvcnQvcGlwZS9QSC1OQ1IKKzEsVHVlIDI1IEphbiAxMSwwLjAsMC4wLDAuMCwwLjAKKzIsV2VkIDI2IEphbiAxMSwwLjAsMC4wLDAuMCwwLjAKKzMsVGh1IDI3IEphbiAxMSwwLjAsMC4wLDAuMCwwLjAKKzQsRnJpIDI4IEphbiAxMSwwLjAsMC4wLDAuMCwwLjAKKzUsU2F0IDI5IEphbiAxMSwwLjAsMC4wLDAuMCwwLjAKKzYsU3VuIDMwIEphbiAxMSwwLjAsMC4wLDAuMCwwLjAKKzcsTW9uIDMxIEphbiAxMSwwLjAsMC4wLDAuMCwwLjAKKzgsVHVlIDEgRmViIDExLDAuMCwwLjAsMC4wLDAuMAorOSxXZWQgMiBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wCisxMCxUaHUgMyBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wCisxMSxGcmkgNCBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wCisxMixTYXQgNSBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wCisxMyxTdW4gNiBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wCisxNCxNb24gNyBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wCisxNSxUdWUgOCBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wCisxNixXZWQgOSBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wCisxNyxUaHUgMTAgRmViIDExLDAuMCwwLjAsMC4wLDAuMAorMTgsRnJpIDExIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAKKzE5LFNhdCAxMiBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wCisyMCxTdW4gMTMgRmViIDExLDAuMCwwLjAsMC4wLDAuMAorMjEsTW9uIDE0IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAKKzIyLFR1ZSAxNSBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wCisyMyxXZWQgMTYgRmViIDExLDAuMCwwLjAsMC4wLDAuMAorMjQsVGh1IDE3IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAKKzI1LEZyaSAxOCBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wCisyNixTYXQgMTkgRmViIDExLDAuMCwwLjAsMC4wLDAuMAorMjcsU3VuIDIwIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAKKzI4LE1vbiAyMSBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wCisyOSxUdWUgMjIgRmViIDExLDAuMCwwLjAsMC4wLDAuMAorMzAsV2VkIDIzIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAKKzMxLFRodSAyNCBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wCiszMixGcmkgMjUgRmViIDExLDAuMCwwLjAsMC4wLDAuMApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTRUlSX1JLX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL2h1bWFuL0luY2lkZW5jZV8yLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0VJUl9SS19SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9odW1hbi9JbmNpZGVuY2VfMi5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTMwZDZlMQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0VJUl9SS19SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9odW1hbi9JbmNpZGVuY2VfMi5jc3YKQEAgLTAsMCArMSwzMyBAQAoraXRlcmF0aW9uLHRpbWUsUEgtMS1HNjQwMDAxLFBILTEtRzY0MDAwMixQSC0xLUc2NDAwMDMsUEgtMS1HNjQwMDA0LFBILTEwLUc2NTAwMDEsUEgtMTAtRzY1MDAwMixQSC0xMC1HNjUwMDAzLFBILTEwLUc2NTAwMDQsUEgtMTAtRzY1MDAwNSxQSC0xMC1HNjUwMDA2LFBILTEwLUc2NTAwMDcsUEgtMTEtRzY2MDAwMSxQSC0xMS1HNjYwMDAyLFBILTExLUc2NjAwMDMsUEgtMTEtRzY2MDAwNCxQSC0xMS1HNjYwMDA1LFBILTEyLUc2NzAwMDEsUEgtMTItRzY3MDAwMixQSC0xMi1HNjcwMDAzLFBILTEyLUc2NzAwMDQsUEgtMTItRzY3MDAwNSxQSC0yLUc2ODAwMDEsUEgtMi1HNjgwMDAyLFBILTItRzY4MDAwMyxQSC0yLUc2ODAwMDQsUEgtMi1HNjgwMDA1LFBILTMtRzY5MDAwMSxQSC0zLUc2OTAwMDIsUEgtMy1HNjkwMDAzLFBILTMtRzY5MDAwNCxQSC0zLUc2OTAwMDUsUEgtMy1HNjkwMDA2LFBILTQtRzcwMDAwMSxQSC00LUc3MDAwMDIsUEgtNC1HNzAwMDAzLFBILTQtRzcwMDAwNCxQSC00LUc3MDAwMDUsUEgtNC1HNzAwMDA2LFBILTQtRzcwMDAwNyxQSC00LUc3MDAwMDgsUEgtNC1HNzAwMDA5LFBILTQtRzcwMDAxMCxQSC00LUc3MDAwMTEsUEgtNS1HNzEwMDAxLFBILTUtRzcxMDAwMixQSC01LUc3MTAwMDMsUEgtNS1HNzEwMDA0LFBILTUtRzcxMDAwNSxQSC01LUc3MTAwMDYsUEgtNi1HNzIwMDAxLFBILTYtRzcyMDAwMixQSC02LUc3MjAwMDMsUEgtNi1HNzIwMDA0LFBILTYtRzcyMDAwNSxQSC03LUc3MzAwMDEsUEgtNy1HNzMwMDAyLFBILTctRzczMDAwMyxQSC03LUc3MzAwMDQsUEgtOC1HNzQwMDAxLFBILTgtRzc0MDAwMixQSC04LUc3NDAwMDMsUEgtOC1HNzQwMDA0LFBILTgtRzc0MDAwNSxQSC05LUc3NTAwMDEsUEgtOS1HNzUwMDAyLFBILTktRzc1MDAwMyxQSC05LUc3NTAwMDQsUEgtOS1HNzUwMDA1LFBILUNBUi1HMjMwMDAxLFBILUNBUi1HMjMwMDAyLFBILUNBUi1HMjMwMDAzLFBILUNBUi1HMjMwMDA0LFBILUNBUi1HMjMwMDA1LFBILU5DUi1HNTIwMDAxCisxLFR1ZSAyNSBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMixXZWQgMjYgSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzMsVGh1IDI3IEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCis0LEZyaSAyOCBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorNSxTYXQgMjkgSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzYsU3VuIDMwIEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCis3LE1vbiAzMSBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorOCxUdWUgMSBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorOSxXZWQgMiBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTAsVGh1IDMgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzExLEZyaSA0IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxMixTYXQgNSBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTMsU3VuIDYgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzE0LE1vbiA3IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxNSxUdWUgOCBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTYsV2VkIDkgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzE3LFRodSAxMCBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTgsRnJpIDExIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxOSxTYXQgMTIgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzIwLFN1biAxMyBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjEsTW9uIDE0IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyMixUdWUgMTUgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzIzLFdlZCAxNiBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjQsVGh1IDE3IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyNSxGcmkgMTggRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzI2LFNhdCAxOSBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjcsU3VuIDIwIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyOCxNb24gMjEgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzI5LFR1ZSAyMiBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMzAsV2VkIDIzIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCiszMSxUaHUgMjQgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzMyLEZyaSAyNSBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTRUlSX1JLX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL3J1bnBhcmFtZXRlcnMuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTRUlSX1JLX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL3J1bnBhcmFtZXRlcnMuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA2ODU1YjUKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNFSVJfUktfUmVmZXJlbmNlL2F1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwvcnVucGFyYW1ldGVycy5jc3YKQEAgLTAsMCArMSwyIEBACitwb3B1bGF0aW9uSWRlbnRpZmllcixuYW1lLHRhcmdldElTT0tleSxiaXJ0aFJhdGUsZGVhdGhSYXRlLHRpbWVQZXJpb2QKK2h1bWFuLGF1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwsLDAuMCwwLjAsODY0MDAwMDAKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNJUlN0YXRlc09ubHlfRkRfUmVmZXJlbmNlL1Rlc3RTSVIvaHVtYW4vRGlzZWFzZSBEZWF0aHNfMC5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNJUlN0YXRlc09ubHlfRkRfUmVmZXJlbmNlL1Rlc3RTSVIvaHVtYW4vRGlzZWFzZSBEZWF0aHNfMC5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTEyZThiOAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0lSU3RhdGVzT25seV9GRF9SZWZlcmVuY2UvVGVzdFNJUi9odW1hbi9EaXNlYXNlIERlYXRoc18wLmNzdgpAQCAtMCwwICsxLDMzIEBACitpdGVyYXRpb24sdGltZSxzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9ub2RlL3RyYW5zcG9ydC9waXBlL1VTQQorMSxUdWUgMjUgSmFuIDExLDAuMAorMixXZWQgMjYgSmFuIDExLDAuMAorMyxUaHUgMjcgSmFuIDExLDAuMAorNCxGcmkgMjggSmFuIDExLDAuMAorNSxTYXQgMjkgSmFuIDExLDAuMAorNixTdW4gMzAgSmFuIDExLDAuMAorNyxNb24gMzEgSmFuIDExLDAuMAorOCxUdWUgMSBGZWIgMTEsMC4wCis5LFdlZCAyIEZlYiAxMSwwLjAKKzEwLFRodSAzIEZlYiAxMSwwLjAKKzExLEZyaSA0IEZlYiAxMSwwLjAKKzEyLFNhdCA1IEZlYiAxMSwwLjAKKzEzLFN1biA2IEZlYiAxMSwwLjAKKzE0LE1vbiA3IEZlYiAxMSwwLjAKKzE1LFR1ZSA4IEZlYiAxMSwwLjAKKzE2LFdlZCA5IEZlYiAxMSwwLjAKKzE3LFRodSAxMCBGZWIgMTEsMC4wCisxOCxGcmkgMTEgRmViIDExLDAuMAorMTksU2F0IDEyIEZlYiAxMSwwLjAKKzIwLFN1biAxMyBGZWIgMTEsMC4wCisyMSxNb24gMTQgRmViIDExLDAuMAorMjIsVHVlIDE1IEZlYiAxMSwwLjAKKzIzLFdlZCAxNiBGZWIgMTEsMC4wCisyNCxUaHUgMTcgRmViIDExLDAuMAorMjUsRnJpIDE4IEZlYiAxMSwwLjAKKzI2LFNhdCAxOSBGZWIgMTEsMC4wCisyNyxTdW4gMjAgRmViIDExLDAuMAorMjgsTW9uIDIxIEZlYiAxMSwwLjAKKzI5LFR1ZSAyMiBGZWIgMTEsMC4wCiszMCxXZWQgMjMgRmViIDExLDAuMAorMzEsVGh1IDI0IEZlYiAxMSwwLjAKKzMyLEZyaSAyNSBGZWIgMTEsMC4wCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNJUlN0YXRlc09ubHlfRkRfUmVmZXJlbmNlL1Rlc3RTSVIvaHVtYW4vRGlzZWFzZSBEZWF0aHNfMS5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNJUlN0YXRlc09ubHlfRkRfUmVmZXJlbmNlL1Rlc3RTSVIvaHVtYW4vRGlzZWFzZSBEZWF0aHNfMS5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDdhODQzZgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0lSU3RhdGVzT25seV9GRF9SZWZlcmVuY2UvVGVzdFNJUi9odW1hbi9EaXNlYXNlIERlYXRoc18xLmNzdgpAQCAtMCwwICsxLDMzIEBACitpdGVyYXRpb24sdGltZSxVUy1BSyxVUy1BTCxVUy1BUixVUy1BWixVUy1DQSxVUy1DTyxVUy1DVCxVUy1EQyxVUy1ERSxVUy1GTCxVUy1HQSxVUy1ISSxVUy1JQSxVUy1JRCxVUy1JTCxVUy1JTixVUy1LUyxVUy1LWSxVUy1MQSxVUy1NQSxVUy1NRCxVUy1NRSxVUy1NSSxVUy1NTixVUy1NTyxVUy1NUyxVUy1NVCxVUy1OQyxVUy1ORCxVUy1ORSxVUy1OSCxVUy1OSixVUy1OTSxVUy1OVixVUy1OWSxVUy1PSCxVUy1PSyxVUy1PUixVUy1QQSxVUy1SSSxVUy1TQyxVUy1TRCxVUy1UTixVUy1UWCxVUy1VVCxVUy1WQSxVUy1WVCxVUy1XQSxVUy1XSSxVUy1XVixVUy1XWQorMSxUdWUgMjUgSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyLFdlZCAyNiBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzMsVGh1IDI3IEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorNCxGcmkgMjggSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCis1LFNhdCAyOSBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzYsU3VuIDMwIEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorNyxNb24gMzEgSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCis4LFR1ZSAxIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorOSxXZWQgMiBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzEwLFRodSAzIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTEsRnJpIDQgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxMixTYXQgNSBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzEzLFN1biA2IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTQsTW9uIDcgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxNSxUdWUgOCBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzE2LFdlZCA5IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTcsVGh1IDEwIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTgsRnJpIDExIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTksU2F0IDEyIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjAsU3VuIDEzIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjEsTW9uIDE0IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjIsVHVlIDE1IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjMsV2VkIDE2IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjQsVGh1IDE3IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjUsRnJpIDE4IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjYsU2F0IDE5IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjcsU3VuIDIwIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjgsTW9uIDIxIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjksVHVlIDIyIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMzAsV2VkIDIzIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMzEsVGh1IDI0IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMzIsRnJpIDI1IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTSVJTdGF0ZXNPbmx5X0ZEX1JlZmVyZW5jZS9UZXN0U0lSL2h1bWFuL0lfMC5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNJUlN0YXRlc09ubHlfRkRfUmVmZXJlbmNlL1Rlc3RTSVIvaHVtYW4vSV8wLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yY2I3MjI5Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTSVJTdGF0ZXNPbmx5X0ZEX1JlZmVyZW5jZS9UZXN0U0lSL2h1bWFuL0lfMC5jc3YKQEAgLTAsMCArMSwzMyBAQAoraXRlcmF0aW9uLHRpbWUsc3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vbm9kZS90cmFuc3BvcnQvcGlwZS9VU0EKKzEsVHVlIDI1IEphbiAxMSwwLjAKKzIsV2VkIDI2IEphbiAxMSwwLjAwMzE2NzU0NTkwNzQyMDg2MTUKKzMsVGh1IDI3IEphbiAxMSwwLjEyNzMyNTMxMDA0ODE3MTQ0Cis0LEZyaSAyOCBKYW4gMTEsMy44MzkzNTY0MzMxNTU5MDYyCis1LFNhdCAyOSBKYW4gMTEsMTAyLjkyODk1NzI4MjUwOTEyCis2LFN1biAzMCBKYW4gMTEsMjU4Ny4xMjc4MDgyNDcxMworNyxNb24gMzEgSmFuIDExLDYyMjQwLjc0NTk3NTIyODY0Cis4LFR1ZSAxIEZlYiAxMSw5MjI5NDYuNjA0MjMzNDc0OQorOSxXZWQgMiBGZWIgMTEsMC4wCisxMCxUaHUgMyBGZWIgMTEsODU0OTguNDY4ODQzMzU4NTUKKzExLEZyaSA0IEZlYiAxMSw4NjY4NzYuOTg4MjQyMjIzMgorMTIsU2F0IDUgRmViIDExLDQ3MjkzNS41ODAwMTY0ODc0NQorMTMsU3VuIDYgRmViIDExLDQ2MDI3OS44MTg2ODU0Mjc4MworMTQsTW9uIDcgRmViIDExLDEyMjg0MS4zMzA1Mzg2NTU1NworMTUsVHVlIDggRmViIDExLDE1NTA5OS43OTI3NTkwNTMxCisxNixXZWQgOSBGZWIgMTEsMTEwMDk4LjgwOTIzMDk2NTM5CisxNyxUaHUgMTAgRmViIDExLDEwOTg0Ny42NDQyODc2OTc5CisxOCxGcmkgMTEgRmViIDExLDQ3ODI1LjAwODE4NjIwMjg2CisxOSxTYXQgMTIgRmViIDExLDUxNDY3LjAwODgwNDgyMDA1CisyMCxTdW4gMTMgRmViIDExLDIzNzcwLjE4ODk1MzkwNjk3OAorMjEsTW9uIDE0IEZlYiAxMSwxNzkwOC4zNzM1MTU0MjgxNworMjIsVHVlIDE1IEZlYiAxMSw5MjY5LjI5MDY2MDM2OTYyOAorMjMsV2VkIDE2IEZlYiAxMSw2MTU5LjI2MjQ1ODIyNDgxNAorMjQsVGh1IDE3IEZlYiAxMSwzNDUzLjcwMTA0OTg0NDY0ODQKKzI1LEZyaSAxOCBGZWIgMTEsMjE3MC4xNjczMDI3NDY2MzMKKzI2LFNhdCAxOSBGZWIgMTEsMTI2Mi40ODEzMzI0NTgwMDk1CisyNyxTdW4gMjAgRmViIDExLDc3My41NDI5MzU0MjIxNTEKKzI4LE1vbiAyMSBGZWIgMTEsNDU3LjYzNzUwNzcwMTk1MjUzCisyOSxUdWUgMjIgRmViIDExLDI3Ny4yMTQ5OTQ0MDUwODUwNgorMzAsV2VkIDIzIEZlYiAxMSwxNjUuMjY3MTA5OTQ3MDMzODQKKzMxLFRodSAyNCBGZWIgMTEsOTkuNTkyMzM0MzY1NTE5NTIKKzMyLEZyaSAyNSBGZWIgMTEsNTkuNTgxODUzNjg1OTIyNTQ2CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNJUlN0YXRlc09ubHlfRkRfUmVmZXJlbmNlL1Rlc3RTSVIvaHVtYW4vSV8xLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0lSU3RhdGVzT25seV9GRF9SZWZlcmVuY2UvVGVzdFNJUi9odW1hbi9JXzEuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM4MGJhNzEKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNJUlN0YXRlc09ubHlfRkRfUmVmZXJlbmNlL1Rlc3RTSVIvaHVtYW4vSV8xLmNzdgpAQCAtMCwwICsxLDMzIEBACitpdGVyYXRpb24sdGltZSxVUy1BSyxVUy1BTCxVUy1BUixVUy1BWixVUy1DQSxVUy1DTyxVUy1DVCxVUy1EQyxVUy1ERSxVUy1GTCxVUy1HQSxVUy1ISSxVUy1JQSxVUy1JRCxVUy1JTCxVUy1JTixVUy1LUyxVUy1LWSxVUy1MQSxVUy1NQSxVUy1NRCxVUy1NRSxVUy1NSSxVUy1NTixVUy1NTyxVUy1NUyxVUy1NVCxVUy1OQyxVUy1ORCxVUy1ORSxVUy1OSCxVUy1OSixVUy1OTSxVUy1OVixVUy1OWSxVUy1PSCxVUy1PSyxVUy1PUixVUy1QQSxVUy1SSSxVUy1TQyxVUy1TRCxVUy1UTixVUy1UWCxVUy1VVCxVUy1WQSxVUy1WVCxVUy1XQSxVUy1XSSxVUy1XVixVUy1XWQorMSxUdWUgMjUgSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwxLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyLFdlZCAyNiBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDIwLjU5NjgzMTg2MzYyODI1LDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMyxUaHUgMjcgSmFuIDExLDEuMjE5NzE5MzEzNjc5ODIwM0UtNSwxLjIyNDA4NTA0OTEwODc0MDJFLTUsOC45MzI5NjYzMzkxNzQ4OTVFLTYsMS4wNTkxOTQ1ODAyMTY0NTE5RS00LDQyNC4yMjk1OTk5MzA3MTM4NSwxLjEwODY5NTMwMzQ2NDM2MDlFLTQsMS41ODMwODI4MzE2ODY4NTlFLTUsNC4xMjgzMDY1ODY3NDcyNTQ2RS01LDQuMDI5OTA5NjI2Njk1NDQxRS04LDIuOTI3Nzk2NTA4OTU0NjgzRS00LDEuOTI0NzE4NDIwMjg5OTY1MkUtNCw0LjUyMjIzMDI1Mjc1NjczNEUtNSw3LjM1Nzk0MzMyNjc0MTQyN0UtNiw5LjA4NzQ0NjIwODE5ODIyRS02LDIuMTQ3MzcwOTI3MTY0ODg4NEUtNCwyLjI1MDAzMjg3NDkwNDk1NDdFLTUsMy40NzU3OTcwNTMwMjQ4MThFLTYsMS4wOTIxMDU1MDg4MzQ0NjQ3RS01LDIuMDU3MjY4ODY0NDI4MDIyN0UtNSw2LjQ1NTI0MzU3MDM2MTY0OEUtNSw0Ljc2OTA2MjIxNzM5MTgzRS01LDUuMzczMjEyODM1NTkzOTIxNEUtNiw4LjgyNTE2NjI1NjY2MDc5MUUtNSw3LjkzODkyMTk2NDU5MDAxOUUtNSw1Ljg2ODU1NTg5Mzg3NTIzN0UtNSw1Ljc2NjEyOTAyNDE5NjcyN0UtNiw2LjM2Mzg5ODk1MjE1NjU1RS02LDkuNDE1MjEyMTkxMTY5NDVFLTUsMy4wMzU4NjUyNTIxMTA1NjU1RS02LDEuMDU1ODM2MzIyMTk0MjA1NkUtNSw5LjA2MzkzODQwMjA0MjQ5NkUtNiw4LjQxMjc3MjE3MTUyODk1N0UtNSwxLjQ1NTEzMzIwMTAzOTI3ODhFLTUsMS4xMTQ1Mzg2NzI0MjMwNjlFLTQsMS44OTI5ODI4ODE5Nzk3Mzg2RS00LDguNTQ1MDg3NTM3NjA1NDU4RS01LDEuNTg2NDQxMDg5NzA5MTA1NEUtNSwzLjQ3ODQ4MzY1OTQ0MjYxNDVFLTUsOS43MDMzNTA3Mjk0NzgxNzNFLTUsMS4xOTg1NjIyODgxMzk2NjkyRS01LDEuNDQyMDM1OTk0NzUyNTE4NkUtNSwyLjkzNTExNzUxMTQ0MzE4RS02LDUuMjUxMzA4MDY5Mzg2Mzg0RS01LDIuNjkxNjQzODA0ODMwMzNFLTQsNC43NjI2ODE1MjcxNDk1NjJFLTUsNy4xNzY1OTczOTM1NDAxMzFFLTUsMy4xMzY2MTI5OTI3Nzc5NTE4RS02LDcuMzI0MDI0OTIwNzE2NzM5RS01LDIuNDczMDIxMjA3NTgyMTAyNUUtNSwxLjY0MjE4ODE3Mjg3ODM5MjJFLTYsMi4xODk1ODQyMzA1MDQ1MjMzRS02Cis0LEZyaSAyOCBKYW4gMTEsNy40MTQ4MDAzNzYyMzQ1MzJFLTQsNy40NDE5NDg5NTMxODg0NzhFLTQsNS40MzA4NzE2Mzc3NDQ0NTRFLTQsMC4wMDY0Mzg5MTYzNDQ5NjgwNTEsODczNy42OTIwNDUxMjkxNDQsMC4wMDY3Mzk2NjUyMTcxNjMxMTUsOS42MjQ0MjI5MzI2NjYzMTJFLTQsMC4wMDI1MDg5OTI0Nzc5ODIyOTM4LDIuNDUwMDU2NzYwMTUzNjkxNUUtNiwwLjAxNzc5ODQ3ODExMDEwODg3NiwwLjAxMTcwMDMzMDcxODMzOTg1MSwwLjAwMjc0ODg3MDA4MzAxNjE1Niw0LjQ3MzM0MTMzNzU3MzMzNEUtNCw1LjUyNDY4OTM0MzEwMDc0NkUtNCwwLjAxMzA1NDIyOTI5MzEwMDI3LDAuMDAxMzY3OTIzOTA5NTI2OTcsMi4xMTMxNjExMDY2MjM1NDJFLTQsNi42Mzk1Njc2MjE4NDMwODhFLTQsMC4wMDEyNTA3MjYwOTAzOTY2NTY1LDAuMDAzOTI0Mzg4MTQxOTA2MDMsMC4wMDI4OTkzMTA4NjU5MTU3MzIzLDMuMjY2Njc1NzM3MDkxODRFLTQsMC4wMDUzNjUxODgxMzE4MzI5OTUsMC4wMDQ4MjYyMzE1MzczMjE2MDE1LDAuMDAzNTY3NzEyNzY4NTQyNjM1LDMuNTA1NTg4OTYwMzcxNzc1NkUtNCwzLjg2ODkxNTI3MjIwNzQ1MUUtNCwwLjAwNTcyMzgyMjc4NDQ0MjQ3OCwxLjg0NTY2NzE1NjE5Mzg5MjZFLTQsNi40MTg5NTYzNDYwNjk3MUUtNCw1LjUxMDM4OTQyNDgxNTM2OUUtNCwwLjAwNTExNDQ0ODQ4MzUwMjAyMyw4Ljg0NjQwMjIzMTE1NzU3MUUtNCwwLjAwNjc3NDE5MDk0MDk4MzQzNywwLjAxMTUwODE3Mzg5MTk0NDQ3LDAuMDA1MTk0OTUwOTgyMDA0OTAxLDkuNjQ0ODQyMDIyMjkwNzk5RS00LDAuMDAyMTE0NzAyNTUxMzAxMjczLDAuMDA1ODk5MTAxNTI3OTk1Nzc1LDcuMjg2NDcwOTMyNjM1NDU4RS00LDguNzY2OTY3NjQyNjQ3Mjg3RS00LDEuNzg0NDI0NDcyMDQ5NTk1N0UtNCwwLjAwMzE5MjQ4NDYwMTc5NDU3NiwwLjAxNjM2MzMwNjk1NDYyNDYwNiwwLjAwMjg5NTI1NzAxNzQwMDk1OCwwLjAwNDM2MjkyNzE4NDk3MzY0MSwxLjkwNjkxMzIwNjYxOTM3OUUtNCwwLjAwNDQ1MjUwNDExMzQ5MDg2LDAuMDAxNTAzNDg0NTkwNzgzMTM2Miw5Ljk4MzkzOTQwNTUzMTk3MUUtNSwxLjMzMTE2ODkyOTkzNTIwMTNFLTQKKzUsU2F0IDI5IEphbiAxMSwwLjAzMDA1NDMxMDk3OTc4NDI4NiwwLjAzMDE2NjgzOTQyNjc5NDgwNSwwLjAyMjAxNDYzMDQ5MTUzNzIwNywwLjI2MDk4NjIwMDk1Nzc3ODQsMTc5OTIzLjIxNTU2NTY0MjgsMC4yNzMxNjk0MjI1MTg0NjY0LDAuMDM5MDEzMzk2MjcxNjMzNTYsMC4xMDE2NzAxOTQ3NTgzOTE4OCw5LjkzMTczMzYwMzI0OTIzMkUtNSwwLjcyMTQyNzM3NTI3Njg5ODksMC40NzQyMzg0NDExNzUwMjU1NiwwLjExMTQwOTc1MjY3MzY3NzQzLDAuMDE4MTMzMjUxMDI2MTY5MDE0LDAuMDIyMzk0NTIzNzUwNjI0Nzk4LDAuNTI5MTMwOTgxMTY3MzY1NiwwLjA1NTQ1MDE4OTI5NzkzMzEzLDAuMDA4NTY2MDE1NjQ2MTM0MiwwLjAyNjkxNDI5NjQ0MzkwMzY5LDAuMDUwNjk5MjMwMjcxNzcwOTMsMC4xNTkwNzM5OTI3NjU1NTI3LDAuMTE3NTIzNDQyNDAzNzMzLDAuMDEzMjQxNzY5Mjk1Mjk3NTE2LDAuMjE3NDc3ODA1ODM4MDc5MTksMC4xOTU2MjQyMDAxMjA1ODA5LDAuMTQ0NjE2MDI1MjgzODY4NiwwLjAxNDIxMDM3OTM5NTUxMjU0OCwwLjAxNTY4Mjc4MjU3OTA0NDU0LDAuMjMyMDExODI4MzI2Nzc3ODYsMC4wMDc0ODE1NjE5MjMzODk2MDgsMC4wMjYwMTk1NzYyNzY4NjU2NiwwLjAyMjMzNjUyNDE3MDcyODM5MywwLjIwNzMxMjkzNDA2MzY4OCwwLjAzNTg1OTAzMTYyNTYwNDMzLDAuMjc0NTI4MTQyOTQ3NTUzNDYsMC40NjY0ODExMDE1ODUyMTM4LDAuMjEwNTc4NjUyNzg3MjI4NjIsMC4wMzkwOTYxNzY1ODk4MDUyMTUsMC4wODU3MTg4ODU3ODM5NTQ1NSwwLjIzOTEyMTEzMTMzMjQ3NjI4LDAuMDI5NTM1MzI0NjkzNTc1ODMsMC4wMzU1Mzc4MTUxMjY3NTU0NCwwLjAwNzIzMzMzOTY4MDQzNDU3MSwwLjEyOTQwNzA4MjkyNDc2NzUyLDAuNjYzMjczMTY1NDExNTMwOCwwLjExNzM1MTk4MDI1NTY0ODM0LDAuMTc2ODUwMDc3MTE1NjM4OTcsMC4wMDc3Mjk4MTE1NjYxNzY0NDUsMC4xODA0NzkwMTU2MjIxOTcxLDAuMDYwOTQ1MDA1NzM2NjE5NDIsMC4wMDQwNDcxNDczNDQ1MDE4NjQsMC4wMDUzOTYwMDkzMjQ1NzMxMTkKKzYsU3VuIDMwIEphbiAxMSwxLjAxNTI5MDczMzE5NjY3OTQsMS4wMTkxNzY4NzE1ODU3NzYsMC43NDM3NTQ5NjA3ODIxMjU5LDguODE2NTQ4OTI2NTIwNTQxLDM2ODYzNTUuMTEzNDk0NDk3LDkuMjI3ODgyODAyMzg0Nzg3LDEuMzE4MDQyNDgzNzcyNjc3NCwzLjQzMzcwODI0Nzk4MTM1NywwLjAwMzM1NTQ0OTA0NzU3Njc1NzYsMjQuMzcxMzAxNDA1Mzk2NjgsMTYuMDIwMzM2NTUxNTU4NTgyLDMuNzYzMjk0NzM3MzE0ODczLDAuNjEyNjI2NzIyMjA5MDI4NCwwLjc1NjU3NTYzMDYzMjE3NDMsMTcuODc1MjI0OTUwMjIzMDUsMS44NzMzNTc3OTcwNzM1NjIsMC4yODk0MDIxNTg3Mjg2OTE1NywwLjkwOTI5MDk5MTg5NTMwMzIsMS43MTI4NDEyNDg2MTYxMDgyLDUuMzc0MDY0ODU5NDUyNzg3LDMuOTcwMzY3NzkyODkyMjEyLDAuNDQ3MzY1NjE5NDE3NjgzMTYsNy4zNDcxOTI5NzUxNjU3MTk1LDYuNjA4NjU5ODAzMzczMDU5LDQuODg1NjE3MzM1MzEyMTE4LDAuNDgwMDk0Nzg1ODYyMTA3NzQsMC41Mjk4MjYzNzMzNjA1MTI2LDcuODM4MDk1MzM4MzczNTc1LDAuMjUyNzU5NjU1MzA4ODcyNiwwLjg3OTA0Nzk4MjAxOTk1NzcsMC43NTQ2MTUwMDUyNjc4NDUzLDcuMDAzNzQ3NTc2MTAwNjgyLDEuMjExNDU0MTAwNTE3MTczNSw5LjI3MjM5NzE2OTk3MzQ5MSwxNS43NTkzNDU5Nzc3MjAwMjQsNy4xMTQxNjIzNDk2NjY3MDksMS4zMjA4Mzk0OTg4NjUxOTEzLDIuODk1ODc3ODUzMTIxNTA3LDguMDc4NDIyNzQ5OTk1Mjk2LDAuOTk3Nzk4MjQyOTY0NTgxNywxLjIwMDYyODUxMTE3MDcwMjIsMC4yNDQzNzQ2NTAxOTY2MTgwMyw0LjM3MTgzNTMxOTU5OTI0MywyMi40MDczMzU4NTYxNDIxNDQsMy45NjQzMzIwNTE1MTUyNDI1LDUuOTc0NjAyNzg1MDA1NzMsMC4yNjExNDYwNTQ1NjE3NjI4LDYuMDk3MTMxMzc2NTQ0Nzc1LDIuMDU4OTg4MTgxOTIyMDQ2LDAuMTM2NzMyODEzNjU1MDQ2MTYsMC4xODIzMDA4OTY0NzM0OTM5NgorNyxNb24gMzEgSmFuIDExLDIzMy4yMDg4OTg1ODE4NTA5NSwyMzQuMTQzMDU5ODc5ODMwOTMsMTcwLjg2NzI3MzM5NjU1NzE1LDIwMjUuMTA2MzQxNTYzMjc5OCwyLjU5MDM0ODg2NDI0NDc5MzRFNywyMTE5LjQ3MTY4MzUxNTQxODYsMzAyLjc5NzU3NTY5MzUyMjMsNzg4LjI3MDE3MjkxNDYzMzMsMC43NzA4OTQzMDU4NTAyODAyLDU1OTguMDc0Mjg1NjE3NzgzLDM2NzkuNjU5NDY0MzI3MzQ5Myw4NjQuMjUyMjYyMTg1MDI1NCwxNDAuNzQzNjM1NDkyNjc5MjMsMTczLjgwNTg0NjUzODc5OTg0LDQxMDUuOTczOTk1MzQ5Nzg1LDQzMC4zNzYwNDQ5NTk0NDAwNCw2Ni40ODc1MzQ1ODUxNjc1NSwyMDguODk4MjczOTc3MDA5MywzOTMuNDk1OTg1MzU4OTQzLDEyMzQuNTI2NTUxMTIzNTE1Miw5MTIuMDgxNDczNTM4NDc1NiwxMDIuNzc1MDI1MTA5NjQyNywxNjg3LjgxNTI4NDYzMzYsMTUxOC4wNDA2MTU4ODgzOTUyLDExMjIuMzE2ODg1NTYyODU0MiwxMTAuMjk2NTg0OTc5Nzc4NjYsMTIxLjcxNTM4MTEyNzA5MjksMTgwMC41MzI3MTg3MzIxODgsNTguMDY3MTMxOTU3ODc0MTMsMjAxLjk0Mjg4MTQ2MzM1Mjg4LDE3My4zNTQ4NjQzOTM0MTQ5NywxNjA4Ljg5OTA1MzA1NzAxMzgsMjc4LjMwMDgyNDg0Nzk5OTYsMjEyOS4wMTc2ODE2Mzg0MTQsMzYyMC4yMzM2OTAwNzM0NzksMTYzNC4zMDY0MDEzNTY5ODg4LDMwMy40NDAzMDYxNTg0NzY3NCw2NjUuMjM5MTA3NjA0ODM2OCwxODU1LjgxNDQ4MTM0MDEyNTIsMjI5LjIxMDQ1NzA0MTYzMDc4LDI3NS44MjY4MjQ1ODk3ODIyMyw1Ni4xNDEzMjMxNjQxOTAxMSwxMDA0LjMwNTA1MTU5MjA1MzQsNTE0Ny4yNDgyMjAyOTIxMjYsOTEwLjU3NTc2Njc1MjI2MjQsMTM3Mi40ODIxMzUwOTI3MTY0LDU5Ljk5MzQ5MDY5MTcwODcyLDE0MDAuNTk1MzA1ODQ2NTY3LDQ3My4wMTcyODc0MjAwNTI0LDMxLjQxMzI1ODUxODcwMTAxLDQxLjg4MDU4ODY0Mzg1NTk3Cis4LFR1ZSAxIEZlYiAxMSw1NjA0MzEuMDE1MDYwNTAzMiw0MTMwOTUwLjMwNDA5MTc3NjcsMjQ5NzMwOS40Mzk2ODg3NjU0LDQ1NzcyMzEuNjA0OTAzNzYyLDEuNzI1MDIwNDI5MTAzNzUyMkU3LDM4MDgyOTEuNDg1MzQ5NTk2NSwzMTc4MDMwLjM2MzcyNDAxNDcsNDg3NjYwLjE5MzIxNTA1ODcsNjAwNjQuNTY1NjY4MDg1OTQsMS40MzE1OTcyOTU1ODcyNTJFNyw3MjcxMTgzLjM0MTMwNjc2LDEwNTg3NTQuODk1MjcyODc3MywyNzA0NzQ5LjY4ODE3NDgzNSwxMTk1MzY4LjkyMzE5NTQ5MDEsMS4xMTQ1ODg2OTAxNjQ0MDE4RTcsNTY4NDUyNS45NjU5MjI0NTYsMjIyNTE1Mi42NDA5NDE4OTI4LDM3NTExMjQuNTgyNTk4MzU2LDQxNzEwMzcuODA4ODA0MDI4LDU3OTc4OTkuMTE1NTU1MTM3LDQ4NTU0NzcuNzY4NDU1MzUsMTE5MTI2NC4wODMwMDE0Mzc2LDkxMTQ5NDYuMzg1NjY2NTUsNDQyNTIwMS4xNzI4NzA4ODcsNTEwNDM1MS42MDkwNzM5NDksMjU3NzM0MC44OTQwMjYyNTg1LDgzMzM0OS44MTIwNzMxNjg2LDczMTczMzQuMjAxODY1Mzk1NSw1OTkxMjUuMjA3MTYxNDAyOSwxNTg2NzU4LjMxNjkxODI3OCwxMTQwMTQ3LjIwOTg2Mjg5OTMsNzY4Nzk5My43MTMzODA2MjQsMTY3MzgwMS4yNjgzNDE1NTgzLDE3MjA0ODguOTIyNTIzMDExMiwxLjczMzk2MDY0NDcxMjQwMUU3LDEuMDQ2NjI3NDA0NTY1NDAyRTcsMzIyMDY3MC4wOTQzOTg4MTU3LDMxMjQzNzMuMDI1Njg4Njk1MywxLjEzMDQ3OTM1Njc4MDY0NUU3LDk1MzY5Mi41Nzk5NjI2MTI3LDM3NTAzNTcuODY2NTIwMDgyNiw3MDU2NzMuMDQ0ODY0Nzk1Myw1MjExNDYwLjQyMzU4NzYyNCwxLjg4OTQ5NjM0NTI3MzczN0U3LDE5OTAwOTkuNzY0ODQ0OTI4Miw2NDY0NTc4Ljc2NjM4MDAyMSw1NjcwNDYuMjE3NzE2MTEzOCw1MzQ3NjE1LjM2MjU0MjIxNSw1MDA1OTY1Ljg0NTkzNDUwNjUsMTMxODY2Mi44MDUzNTYwOTUzLDQ2MTExMS42MzQwMDMzMzA4NAorOSxXZWQgMiBGZWIgMTEsMzY0MzE1LjAyMTQ4MTgwODg2LDI3NTE4MjYuMDA3MjA4NTU4NywxNjQ0NDEzLjU0Mzk4MjExNDYsMjk3NTM3NC42MjkzMzE3MzczLDEuMTI0NTI1NTg2MjgyNzc5NkU3LDI0NzUxNTguODc0Mjc5ODQ0LDIwNzMzNTEuNDgxMTc5MTYyOSwzMTY2NTAuNzc4NTYwNzE5OSw1NDY2MjYuODY1MTUyOTU2OSw5MzA2NjExLjIzNDg0OTU3OCw0NzI2MTM3LjQyNDk5OTgyMSw2ODc5MjEuNTAzOTkxMDgwMiwxODE1ODE4Ljk2MDIzMjMxNjUsNzc3NTc4LjU3NTA4OTQ4OTIsNzI0NjAyNi44NTY1ODc4NzUsMzcyODMwMy4xNTE0MzA5NzEsMTcwMjE3NS4wODE0MzY2MzI3LDI1MDI0MzQuMTc0ODcxMzU3NiwyNzIxNTk5LjY5MTEyODM1MjcsMzc3MDIxNi44ODQwMzQ3MTEsMzE1NzU2NC45MjMzMDM3NDUsNzc4NTcwLjc3NTcxOTI3NTksNTkyNzU4NS45NzY4ODU0NzMsMjg3Njk2OC4zNzkzNjI5NDE3LDMzMTkxNzguOTA0Mjg1NDUyMywxNzc2NzkxLjkxMDYwNjgzMDYsNTQyMDgyLjg1MTU4NTE1NTUsNDc1Nzk4Ni44NDM4Mjk3ODYsMzkwNzczLjg0NTY1OTc1NTg3LDEwMzI1OTIuODE0Mzk3NjUwMyw3NDE1OTYuNjY4OTY5NjI3MSw0OTk5MzI5LjU4NzMyODc2NiwxMDg4NTg0LjI1NTA2Njc0ODUsMTExNzQ1NC40MDI2NTg5MzQ1LDEuMTI3NTU2NzQxOTMzNjI3MkU3LDY4MDc0MDcuNTA0Njk2NDQ2LDIxMDE1MjguMDA2NDMyODE1NSwyMDMxNjk1LjI1MDcxMjc2ODYsNzM1MjM1Mi4zNTQ0Mjg5NTgsNjIwMTMwLjMxNzIwNjUyNjUsMjQ2MjIyMy43NzIxNjA3MjQsNDYyMTI2Ljk0MjU3MDQ1Nzc2LDMzODkwMTkuNjM3MTE0MDY1NywxLjIyODU2MjU5MDg2ODcxOTdFNywxMjkzNjEzLjQwNzE2Nzk1MjcsNDIwMzc0NS41ODE1MzgyMTgsMzY5NDY4LjAyNjgxNDM0NzcsMzQ3NzExNC4zMDQzNjUxODE0LDMyNjYzMDkuNDAzNjQzMDI3NCwxMTU3MTQwLjMyNDM5NTIzMTcsMzAxMDY0Ljc4OTI3MDY5NzcKKzEwLFRodSAzIEZlYiAxMSwyMTg0NjAuMDc5NTkxODE4NDcsMTY1MDgyOC44NTM1MDk2NTYyLDk4NjQ2My4yNzM3MTA3ODE4LDE3ODQxNDIuNDc3NzI2MzA5OCw2NzcwMDcxLjk4NDkyOTUxNCwxNDg0MTEwLjE0OTQ4MzAzOSwxMjQzNzEyLjk0MzU1NDgxOTYsMTg5ODkzLjEwOTk2NzEwODY0LDMyNzk3NC4yOTUzODQ2MjMyLDU1ODA3NjcuNTAzMzA3ODk2LDI4MzM4NjUuNDMwODIyNDIyLDQxMjQ1My45NTExMDU4ODIzLDEwODkzMjcuMjYyNjI4MDEwMiw0NjYzOTcuNDM3ODU0MzA0ODUsNDM0NTE5Ni40NjE5MTA0NTEsMjIzNjUyOS4zMDMyNzc1MzQsMTAyMTIxNC40NDIxMjUwMjA5LDE1MDEyMjEuMzY5NjM1Njc3NCwxNjMyNTcxLjQ4NzI2NzcxMjYsMjI2MTIwMy40MTk5NjQ0MTQsMTg5MzgyMS4wMzk4MjIxNjk2LDQ2NzAzOC4zNDk5NjM0NTUxNywzNTU1MjE2LjA0NzMwOTc4NCwxNzI1MjU0LjI2NTM3NzEzMSwxOTkwNjc1LjM2ODg3NTU1MDYsMTA2NTkzOS41MDY3MDY1MTYzLDMyNTE0NS4wMzAzNTk5Mjg0LDI4NTM1MTYuNTczMzI2OTY5NSwyMzQ0MDcuNDYwMjc1NTIxNyw2MTkzNzMuOTYxMzEyNzg3Niw0NDQ4MTAuOTI1NDU1OTQ3MiwyOTk4MzgxLjkwNjM0NDczMjMsNjUyOTIxLjY0NzM4ODU0NjQsNjcwMDIxLjA4MjM5ODg3ODEsNjc2MjYwMi4xNjYzNzUyNzQsNDA4MzA3MC41NDI4OTc5MDEsMTI2MDYxNy4yMzMwNzg2ODM3LDEyMTg1MTcuNzc0OTg3MjQ2NCw0NDA5ODc4LjEyNjAwMDAyMSwzNzE5MTQuMjM0NDUwOTk4MTMsMTQ3NzA0MS44MjI1NTM3MTY4LDI3NzIxNy45NTEyODIzODY2LDIwMzI2MjguNzM3ODc5MjY1LDczNjc4ODIuNzA3MjcxMzQ5LDc3NTY5MC42MjA3NTAxNzI4LDI1MjEyMTUuOTE3NDA2MjYxLDIyMTYyMy42MTQzOTk1MzE3NywyMDg1MzAxLjk5MDc1NzY4MDcsMTk1OTMxOS4wNTg0NDkwNzcyLDY5NDIzOC4wOTEyMTE1MTYyLDE4MDU5Ny4wNzgwODE3MDk1NAorMTEsRnJpIDQgRmViIDExLDEzMTA0Ni44MzI0ODc0MDcxNyw5OTAzODUuMDQ3NjY3NjkwMyw1OTE4MDEuOTQ5NjY0MzM4NiwxMDcwMjU0LjM1ODQ0MzM0MTIsNDA3NzEyMS44MTUzNDQwNjQsODkwMzEzLjM4MDQ1MjA2OTcsNzQ2MTEwLjkyOTM2OTA4MjIsMTE0MDM5Ljk2Nzk5MTUzMzE0LDE5Njc4My42Mzk2MzQ5NDU5LDMzNDc2OTYuMTM5ODg5NjMxLDE2OTk5ODkuNzAyMTA4MDAxOCwyNDc0NzIuMDU0NTc4ODU0MzUsNjUzNTI2LjYwNDk5MzA1NDYsMjc5Nzg0LjI2NDg5MTQ4NDc1LDI2MDY1MTMuMDAyOTUxNzE0NywxMzQxNzMzLjk2MzQxNzA0MSw2MTI2ODcuODQyOTExMjU1OSw5MDA2MzEuOTcxNzYyMTk0Miw5NzkzOTAuMzcyODAxNzA1LDEzNTY0MTkuNjc5Mjk1OTkwMiwxMTM2MDQ5LjEyMzk2MTkyNCwyODAxODEuNTUxNDMxMjkwNzUsMjEzMjY3NC43Nzg2MTgxMTY0LDEwMzQ5MDkuNDU4MzkwMzM4NywxMTk0MTM2LjY4NTA2NDk1NTYsNjM5NTA0LjgwOTAyNjQzNjUsMTk1MDQ5LjE1OTU3MDUwOTI1LDE3MTE3MTQuOTM3OTg3MDUzLDE0MDYyMi4yNDUxNTQ5OTE1NywzNzE1NTYuNzAzNjA5MzI3MjYsMjY2ODMzLjg1MzAwNzY5NTQsMTc5ODYzMC4xNzI2MzI4NzU5LDM5MTY3Mi43MzYxNDMyNTgxNyw0MDIxODIuMzE4NTE2Njc0Niw0MDU2NjYyLjA2NzQ1OTc1NDYsMjQ0OTM1My4wODc1MzQ1NjM2LDc1NjI1Mi42NTU5MDY4MzM4LDczMDk0Ny43MjM5MDg2NzQ3LDI2NDUzODcuNTc5MDA2MTczNiwyMjMwOTcuMzAwOTQzODgwMDIsODg2MTA1Ljk3ODk3MzY0NTYsMTY2MzA3LjMxNTM1NjIyNjcsMTIxOTMxMy42MzE4NDE0MDM0LDQ0MTk2OTMuMzA4NDE0OTc5LDQ2NTMxNi4wMjU5ODgwNzU4LDE1MTIzOTIuNjg0ODc1MTMzNywxMzI5NTIuMTI0MTIwOTgwMywxMjUwODg5LjQyNDI3NjIxOTIsMTE3NTQwOC4yMjU5NDc1Nzg0LDQxNjUyMS41ODY2MTAzMzI5NSwxMDgzNDEuNzMzMzc3MzUyNzQKKzEyLFNhdCA1IEZlYiAxMSw3ODU5MS41MTM2NzQ5NDM1Niw1OTQxNDQuNDY3MjI4OTgwNiwzNTUwMjEuNTU2MDQ1MzI2NjQsNjQxODQ4LjQwMjcxMjYzMDgsMjQ1NDcwNC41NjQ0MjYzOTcsNTMzOTIyLjgxNTk3NzkzNDMsNDQ3NTcxLjY2MzgzNzMyMjIsNjg0MTkuMTMyMjMzMDMxMywxMTgwNjkuNTU3NzE2MTAxNzMsMjAwNzcwMS43NDAyNDY2ODM2LDEwMTk0OTUuMDA5NTgwMzY5NywxNDg0MTEuNzY0NjQ0NzUwNjMsMzkyMDYyLjU2NTY2MjA5MywxNjc4MjMuODI5NDM0NzkxOTYsMTU2MzIwOS41MTA3NDIyOTE4LDgwNDg5NC45NDI5NDk0NywzNjc1ODIuNzQ5Mjk1NTA5NCw1NDAzMDEuNTM5ODAxNDM2LDU4NzUxMC40OTMxNzUyMzE2LDgxMzU2OS41NDgxODYzMTI3LDY4MTQwOC44NTQ2MjI0MTA0LDE2ODA3NS42MzgxOTY2MjAxNiwxMjc5MTk0LjA1MjcyMzk5MDUsNjIwNjc1Ljg0NDkyMzQ0OTcsNzE2MjI5LjIyNDQ2MTYwNDgsMzgzNjU4LjQ5NTA2NTE4MjQsMTE2OTk2LjgyODkzNTE0NDEsMTAyNjY0NC45MjcwNzU3Mzg0LDg0MzU1LjI1NDQ3NzA3NjA3LDIyMjg3Ni44OTk4OTc4NzYyLDE2MDA1NC41MTg0NTM1Mjg3OCwxMDc4ODA3LjMwMTc4MzUxMTYsMjM0OTMyLjc0NDgzNzM4ODg2LDI0MTIzMi42OTQ2ODgxMjE0NywyNDMzMTYxLjk4OTQyNTE2NzQsMTQ2OTE4NC43MTM1NjQ0MTY5LDQ1MzY1Ni4xMzc5MDQ0MTAxMyw0Mzg0MTYuNTMzMTQ3OTI5MjQsMTU4Njc1Ny4yODg1MzQxMzA3LDEzMzgwOC45MTg3NTU0NTQ4OCw1MzE1NjkuNTE1OTQ0MjU3Niw5OTc2NS43MTY2MjQ2NDU3OCw3MzEzNDcuOTYzMDAzNzk0NCwyNjUwNzczLjkwNjY1Njc3NjYsMjc5MDU2LjE2MDE4MTU5Mjg2LDkwNzEyMS4zODY5Njk4MTIzLDc5NzUzLjEzNzQ3MjAxMjY2LDc1MDI0NC4yMjY1OTk3MjMxLDcwNTA5Ni4yODA0NjM3NzU5LDI0OTg5Ny42MDgzMzcwNDUxLDY0OTkxLjcwMjQwMDk1NTc2CisxMyxTdW4gNiBGZWIgMTEsNDcxNDAuOTI3MjgzMzY5MjIsMzU2NDQyLjYwMDg1MDEyNzUsMjEyOTgyLjkwNjkzNjkwODU1LDM4NDk5NS43NTk1MzkwMDc1NiwxNDc4MDg0LjEwNzc3NTEyLDMyMDI2Ny4xMjE3NzI0MDI1NSwyNjg0OTYuMjYzMzUwOTM3ODYsNDEwNzQuOTM0NDkxMDI2MTMsNzA4NDEuMzg0NjM0NTI0ODUsMTIwNDI2Mi43MTEwMDU5NTM2LDYxMTUyMy42NDE5NTE1ODk4LDg5MDMzLjczODExOTUwOTkyLDIzNTIxMC4yMjEzNTM2MjQ0MiwxMDA2NzIuMTM4MTk1NzgwNzgsOTM3NjQ2LjkyMTA1NTQ5NjYsNDgyODY0LjE3NzM4ODA3MzM1LDIyMDUzMy44OTgxODg3MjIzLDMyNDE0MS4zNDcyNjYwMTA2NSwzNTI0NDUuMzEzNDY2MzgyMiw0ODgwMTQuMjg5NTMxNDI4ODMsNDA4NzQzLjg2ODM4MzM3MzgsMTAwODI4Ljg2Njk5NDk5OTY1LDc2NzMyNy4xNjU5ODQ3MzMsMzcyMjk1LjQwNDg5MTM3NjUsNDI5NjIzLjk4MjAzMjg0ODYsMjMwMTcyLjE1NzQ0ODM0MDksNzAxODIuNjEzOTU3OTczMjYsNjE1ODE3Ljc2MjQ0OTU5MzksNTA2MDQuMjUzNjk0MzgyMDksMTMzNjk4LjY4NzY4NDY3Mzc2LDk2MDExLjEwMDYzMzYxNjUzLDY0NzExNi41MTc0NTQ0MTA3LDE0MDkyNi41MzM3NTE3MDgzNCwxNDQ3NjUuNzY4NDExMDc2OTgsMTQ1OTUxOC45MzY0MzEzMTMyLDg4MTMwOS44NTcyNTc1MzM0LDI3MjE0Ni42MzEzNjc1MTgyLDI2Mjk4MS4yNDYyMjczOTU0LDk1MTgzMi4wNTg4MjU0MzEzLDgwMjYzLjQ2NjU5NjQ0ODA3LDMxODg5NC41NDAxNTU2NTY0Niw1OTg1MC4xMTUwNjU0MTE5Nyw0Mzg2OTguNzExODY5MTE4NCwxNTkwMDE0LjMxNzU1NDMyNzcsMTY3Mzg0Ljc2NTczMzM4NjksNTQ0MTMwLjg5NjY3OTM4OSw0Nzg0My4wMjMzMDE2OTQ1Nyw0NTAwMjAuNTM4MTE1MjgxNiw0MjI5ODQuNTEwMTYxMzA2LDE0OTkzMC40MDc1NjczMzExLDM4OTg4LjQyOTI2Nzg4MTA3NAorMTQsTW9uIDcgRmViIDExLDI4MjczLjA5NDE4NTIyNTM3LDIxMzgzNS45ODMwMjgwODM2NiwxMjc3NjkuNDQ3NjQxNzU5NzIsMjMwOTAyLjc4ODMyNTM3MDc4LDg4OTg5Ny40MzIxODk3NzE4LDE5MjA4MC4zMjIwMjA3NzQ0NywxNjEwNjUuNjg3MzE1OTE5MTcsMjQ2NDcuODUyNDg5Mzc1NDIyLDQyNTA0LjYxMDM2NjIxNTI0NSw3MjIyNjguODU4MTY2MjQyNywzNjY3NjEuNjAwNTUwMjkxOCw1MzQwMC43MDI0MzQxOTQ1OTQsMTQxMTA3Ljg1OTQxNDA4NDE3LDYwMzg3LjY4MzI0MzM2ODczLDU2MjM2Ni43NzgxMzcxNTE2LDI4OTY2OS4wOTQyMjQxMjM1LDEzMjMwOS45OTUxNzk1NDgwNCwxOTQ0NTguMjY5NjYxMjAwNTgsMjExNDI1LjM2MTM4MjI3OTIyLDI5MjcxNS44MDAzNjI3Mzk5NCwyNDUxNzMuMzkxOTAwOTcwODMsNjA0ODYuMDQxNjY2NjMzNDcsNDYwMjYwLjQxNTYzODEzNzg0LDIyMzI5MS4xNzc5MDgwNzIyLDI1NzY5MS40MzQxMTE1MjUwNywxMzgwODguMDUzMjM0ODExOSw0MjA5OC42NjQ5MjQ0NDYxMTUsMzY5MzY1LjM3OTQxNjI4MDcsMzAzNTYuNDQwMTY1Njg2NTg1LDgwMjAwLjA2MDkyNjk3MDkxLDU3NTkxLjM5NzA1ODU5ODg5LDM4ODE0Ny45MzM2NDU2NDA5Nyw4NDUzMi4zNjc3NDUzNzYyMiw4Njg0NS44OTE3Mzg0NTE0NSw4NzU0MzYuNTcxODQ1MDg2OSw1Mjg2NDMuNjgxNjE2MjE5OSwxNjMyNTUuNzA5MzA5MzQxNzQsMTU3NzM4Ljc1NDg0OTA4MDA1LDU3MDk0MS4yNzM0NTE5OTY3LDQ4MTQxLjkyMzc2MjIzMjYsMTkxMzA0Ljc0MzMxNDMxMDQsMzU5MDMuNzMxNzUzMjkyMDg2LDI2MzEzOS45MDgzMjk5NDI1LDk1MzY3MC42ODkwMDU4NTI3LDEwMDM4OS40OTM5NjY1ODM4OCwzMjYzNzUuMjQzOTc4NTkyMTYsMjg2OTkuNzAwODIzNDIzMzE0LDI2OTkxOC4yNDc4NDA1NjU3NSwyNTM3NDAuNDU1Njk0Mjc5NTgsODk5NTIuOTI3NTU3MTQ1ODQsMjMzODguNTQ0NjU3Mjk3NjE0CisxNSxUdWUgOCBGZWIgMTEsMTY5NTguMzE0MjE2NjA4MTg1LDEyODI4NS4xNDA3MjM3MTA0Myw3NjY1MC40Mzk5NzI2MzI2MiwxMzg0OTYuNDcxMDQ0ODU1Niw1MzU3OTQuNDYzNDg1OTY3NSwxMTUyMTIuMzY3NjI1ODY2NTIsOTY2MjEuODYwOTA2OTM1MiwxNDc5NC42NzgyMjEwNzAzOTksMjU1MDIuNjM4MTY1ODU1OTg4LDQzMzIyMC4wODA2MjcwNTA5LDIxOTk4Ni40OTY1MTYzNjY2MywzMjAzMy42MTc4OTMwNDg1NzMsODQ2NTQuNTMwNTgwNDA3MjEsMzYyMjQuMjI3OTM2ODgwOTYsMzM3MzEwLjcxNjQ2ODc4MTMsMTczNzc0LjIwMzg4Mjc4NDQsNzkzODAuMTU2MzYyMzY1NDcsMTE2NjYwLjE5NTgxMzk0NjUxLDEyNjgzMi4zMTc4ODIwNDY0MiwxNzU1ODAuODExMDgzMTgxMjcsMTQ3MDY1LjQzMzQzNDgxNDUsMzYyODUuNDMwODk2MjI3ODYsMjc2MDg0LjI1NzI0MTMwMjc1LDEzMzkzMS43Mzg0NjM0NTA4LDE1NDU3MS40NTAyODg3ODg2LDgyODQ0LjI5NjEyNjYwMjIyLDI1MjUzLjM0MTY4NjQzNTQ2MiwyMjE1NTQuMjg5NzkyMTI2NjgsMTgyMTAuNTIxMjI4NTM1MTMsNDgxMDkuNjc4ODkyMzMyODgsMzQ1NDYuNjU2MzA1MDg0MDM0LDIzMjgyNC42ODcyNDEzNjMyOCw1MDcwNi44NTg3MDk1MDMzOSw1MjExMS4yMTA5ODA1ODg4MjUsNTI1MTE3LjU3Mzk4MzQzNiwzMTcxMTAuMDc1NzI2MDg1MzQsOTc5MzUuNzU4MDkxMDA2NTIsOTQ2MTcuMDI2NDQ3MzA4NCwzNDI0ODAuNDUwOTIyNzIxMDcsMjg4NzYuNzYyMTUxMTQ1MzIsMTE0NzY1LjE5MTU5MDY3NjIzLDIxNTM4Ljc0OTI5NTQyNTI0NSwxNTc4NDIuMDMzNTQxMDU1MzQsNTcyMDI4Ljk2NjcxMDk4MDUsNjAyMTQuMDkzMzg4OTEwMTksMTk1NzcwLjk0NjA4OTg3Mzg1LDE3MjE2LjQ4ODIxMjI5ODAxMywxNjE5MDIuNDY5MzkwMDk4MzgsMTUyMjE2Ljc2NDMxOTcxNTU2LDUzOTY4LjczODU4Mzc1NTI5NCwxNDAzMC42NTI3NDY3Njc2NworMTYsV2VkIDkgRmViIDExLDEwMTcxLjE3NjgxMTc2MjgzNCw3Njk2MC43MDgxNTUyOTk5LDQ1OTgzLjE1ODI4NjkyMTA3LDgzMDY2LjUzNzE1NTM5OTkzLDMyMjU2OS4wODY1MTIwMTU1LDY5MTAxLjQ4NzYxODcyNjAyLDU3OTYxLjkzNzA0OTgwMjYzLDg4NzguNTAzOTg2MzI3NDA1LDE1MzAxLjUwNDM1NjIxMTQ0OCwyNTk4MzUuNjMzNDM5ODM1NjgsMTMxOTQxLjkzMTc5NDk4MTYyLDE5MjE0LjI0MjAxMjM1MTU3LDUwNzg2LjMwMjE3OTAzMjUxLDIxNzI5LjEzODgxNzg1MzIwNywyMDIzMTIuMjU1MTA0MTc3MywxMDQyNDcuMjQ0Mzc2ODgxMTUsNDc2MjQuNDQzODc3Nzg4Mzg0LDY5OTg2LjgwNTU3Mjg0Nzg0LDc2MDg0LjgwODI5NDg1MDk1LDEwNTMxNi42ODg2NzI2Njk5Myw4ODIxNC4xNzU0MTU5MDU0OCwyMTc2Ny4zMjE0NTcwNDY4MjYsMTY1NjAzLjc5ODIyNTUzMzkyLDgwMzMwLjA5NDA5ODExNTQ0LDkyNzE0LjQ2NTE3NzU1OTUsNDk3MDEuMjE2MjQ2NDQyNDUsMTUxNDguMjMyNDUyMDYyNzcyLDEzMjg4OS44MzUzNDQxMjM2NSwxMDkyNC4xODI2Nzg4MDA0NiwyODg1OS4xNjI5NzY1MTM4NCwyMDcyMi43MTcyMjYwMzk3OTMsMTM5NjUyLjk4MzQzMDE5MTQ3LDMwNDE1Ljk4OTQ3MjAxMTQ1NywzMTI2NC4xMzM2ODAxNDQ4NTIsMzE0OTc2LjMwNTUwNTc5Mjk2LDE5MDIxNi45MDM5NzY2MzY3Niw1ODc1MC4yMDQyMTc4MzcyNyw1Njc1My4wODA4Mzc0NTgzMzYsMjA1NDMzLjc1NjU1ODM1MDMsMTczMjAuNTQxMTQxMTk1ODM0LDY4ODQ3LjkyODI2NDE0OTI2LDEyOTIxLjAzNTAwNDg4MTc4LDk0Njc3Ljk1NjM0MTU3MTIzLDM0MzEwMi41Mzc2OTY4MDA1NCwzNjExNC43OTQzMjEwODkyMDQsMTE3NDI3LjE2MDY0NjYyMTA4LDEwMzI3Ljc2NTM0NjU5ODI2OCw5NzEwOS40NjAzMDA4MDk4NSw5MTMxMi41Mzk3MjgzMTMwNCwzMjM3OS4zNjMzOTM3NTI2MzYsODQxNi44MTc0MTY1NzgyMzMKKzE3LFRodSAxMCBGZWIgMTEsNjEwMC42NDgwNzU3MDUyMzIsNDYxNzAuNDE1MzA4NDUwNTcsMjc1ODUuNzkwMTgwNjQ3NzkzLDQ5ODIzLjEwNDcyOTE5NzE0LDE5NDE5OS41NDk2NzA3NjQsNDE0NDcuNDEyODUyMzUwOTEsMzQ3NzAuNzM4NTkzMjg0ODEsNTMyOC43ODQ1NjMwNzE2NDYsOTE4MC44NTYxNzI2NjE1MTUsMTU1ODQ5LjAyNDMyNDA2ODQyLDc5MTM4Ljc5NDY4OTU0NDE3LDExNTI1LjgyMTExMDAyMjQ4LDMwNDY4LjA2MTI0NDQzNDI3NywxMzAzNC40MDk5ODk5OTQ1LDEyMTM0Ni44NzMzMjEwMjE1NCw2MjUzOC4zODA2MzI2MTQ3NiwyODU3Mi41MzY3MzgzMjI4NzMsNDE5ODYuNjg4OTczMDA0MzYsNDU2NDIuNTA0NTQxMjAwODEsNjMxNzIuMTI1ODgwNjU2ODYsNTI5MTQuMzMwODM3MzA1NDMsMTMwNTguMTI2NzI4NTEzMDgyLDk5MzM1Ljg0NjE2OTk3NDg0LDQ4MTgyLjE3MzA5NjgwNTU1LDU1NjEyLjcyMDQ4MTAxODk2NSwyOTgxNy42MTM5NTQxOTkxOSw5MDg2Ljc5MTgyOTA2NDk3Niw3OTcxMC4wMDQzMjkxNDQ3OCw2NTUzLjI4NjA3NzA3NzE3MiwxNzMxMS43MDI1MTA2OTQ2OSwxMjQzMC42Mjk3MDQwODA2NjYsODM3NjguMjQ0NTQ5NTAzNzcsMTgyNDQuOTg0NDY0MDk3NTcsMTg3NTguODU4NDUwMDE1NjcsMTg4OTMyLjczMTUzMDIwNzAzLDExNDEwMi4yMTc0MDQ2MDM4MSwzNTI0My42NTY3MDYwMDk5OSwzNDA0Mi4yMDk1MTcxNzYwNzQsMTIzMjI5LjMyMDA2MTc5MTYzLDEwMzg5LjIzNzEyMjQyMjA2Miw0MTMwMi4zMDE1NzI2NDAxLDc3NTEuMzQ0NjIwNzY1MTExLDU2NzkxLjM4MTQwNDgyMDg5NSwyMDU3OTcuNjI1MjgzODM4MjgsMjE2NjEuNTc0MzYwNTU5MDMyLDcwNDM2LjM3NjY1NjI3MzQxLDYxOTUuNDM5MTM5MDc4Nzc1LDU4MjQ3LjgyNDQ1NTE4ODQ2LDU0Nzc3LjQ1NjE0MzE2OTEzLDE5NDI2LjUxODU1MTk3MjA1NCw1MDQ5LjE4NTEzODExODY2MjUKKzE4LEZyaSAxMSBGZWIgMTEsMzY1OS4wODA0NjUyOTU4NDc3LDI3Njk4LjU2MjU1NzkwODkyLDE2NTQ4Ljk1MjcwMjI1NzYyNiwyOTg4My4xMzMyNDI5NTQ1NzMsMTE2OTA5Ljk3ODMzNzYzMjQzLDI0ODU5LjY4NjIwNDkyNDEyOCwyMDg1OC40ODY4OTk3NzQ5MzYsMzE5Ny45NTQ1MTk1NTE5NTU0LDU1MDguNDg1NTU3MTkzMjAyLDkzNDc2LjIzNDUxMTk4OTQzLDQ3NDY2LjI5MzYyOTc0MTIyLDY5MTMuNTcxNTAwNTkxOCwxODI3OC41NTU5MTg4MDUwMTcsNzgxOC43NDQ3NDIzODcyNDQsNzI3ODIuNTM5MzY5ODA2NDQsMzc1MTYuOTAyMDQ5MjUyNTE2LDE3MTQyLjIyMDc0NjMxNDMwNiwyNTE4OC43MDQ1NTA3Njg0MTIsMjczODAuMzQxNzQ3MjE5NjUsMzc4OTIuMTQ0ODA5ODI0ODk1LDMxNzM5Ljc5NzU3MzE5ODI0LDc4MzMuNDgxNTMwMjE1NzIxLDU5NTg1LjA5OTMzNzQ0ODk1NSwyODg5OS4yOTM2ODk0MzI0MSwzMzM1Ny42OTU2MDAxNTk5LDE3ODg4LjY2MDM1OTQxMDI3OCw1NDUwLjc0NjQxNTQ5Mzg0MjUsNDc4MTEuMDg3NzQ3MjU5MjEsMzkzMS4yMTc5NzA2MDQ5NDIsMTAzODQuNjc3MzA1NDg2OTc0LDc0NTYuNTIwNDYzNTE2MDcxLDUwMjQ2LjI5OTgzMjEwOTk5NSwxMDk0NC4xMzQxMjg5NzA2NjIsMTEyNTQuNzU0NDk5NTQwMzMzLDExMzMyNi42Mzg1NTc1OTU4MSw2ODQ0NC4wMzkwNzQwODE1MiwyMTE0Mi4yMTIxNzkzNDMwMTIsMjA0MTkuMzI3Njc2NzQ4NzIsNzM5MTguNDI0MzM3Nzk4MjYsNjIzMS42MTYyMzQ2OTcxNDMsMjQ3NzcuNDEzNTQxOTY0NjU1LDQ2NTAuMDIxODQ3MzgwMTEyLDM0MDY1LjI2NzYxOTQ4MDQ1LDEyMzQzOC41OTU2NzU0MTQ1NCwxMjk5Mi4yNzU4MTE1NjYyNDUsNDIyNDkuNDMxMjUwMTc0NjYsMzcxNi41MTEzMjc3OTkxMzYzLDM0OTM3LjUzNjMxNTU2NjUxLDMyODYwLjI3MzU0NjAyNjE4LDExNjU1LjI0MDIyNzA0NjA4NCwzMDI4Ljk1Mzc0MzMyMDgzNQorMTksU2F0IDEyIEZlYiAxMSwyMTk0LjcwNDQxMzM3NDExODMsMTY2MTYuOTYyMjgyNzg0Nzc4LDk5MjcuODg1ODgxNTE2NjM5LDE3OTIzLjc5OTc3NTMzNjMsNzAzNzkuODkyMDI1NjIwNTUsMTQ5MTAuOTI3MzIzNjI1NjE4LDEyNTEyLjc2NzQ0OTMyMzk0MywxOTE5LjI4MTk1MTMxNDMxNjgsMzMwNS4wNzQ1NTc4NTk5NDQsNTYwNjYuODE5NzU5MzE3NTQsMjg0NzAuMjM1MDk3MzM3NDU2LDQxNDcuMTM2MDY0NzI5MTE3LDEwOTY1Ljc4NzAyMDg0NjI2Niw0NjkwLjEzNTA5MDg5MDY4OCw0MzY1NC44OTU4MDk0MTc2MzQsMjI1MDYuNTM0MTMxODczMTk1LDEwMjg0LjU2MTc0MDY0NzY1OCwxNTExMS4yNzAxNjE3ODQ5MSwxNjQyNS4xNzIxNzkwNTMxNDUsMjI3MjguODE5ODg0OTU2OTgsMTkwMzguNzUyODg5ODEyODQ0LDQ2OTkuMjY4NzU4MDk3OTgyLDM1NzQxLjUwMDk1MzAzNDc2LDE3MzMzLjgzNjc5Njk3NjM4LDIwMDA4Ljg0Nzk1OTg4ODM3LDEwNzMyLjA2ODQzNTI3NTUzLDMyNjkuNjcwOTUyNjE0MTQ2LDI4Njc4LjAxNDkxNTQ2MDEzNSwyMzU4LjI4Nzk5NjUyNDI5NjQsNjIyOS40MzMyMzk4NTkyNTQsNDQ3Mi44MjY4NzQ5NjQ1MTIsMzAxMzkuMjY2OTk1MzU5MjI3LDY1NjQuODEzNDE2MTIwNDUxLDY3NTIuODMyNTMyODAzMzI1LDY3OTc2LjgwMjEzNjcyMDEsNDEwNTYuMzIyNjQ4NDY1NDksMTI2ODIuOTg3MzMxNjI1NjQ1LDEyMjQ4LjExMTcxNzMwNDUxNyw0NDMzOS44NjYyNDExOTMzNSwzNzM3Ljg1MzY3NDY5MDEwNywxNDg2NC4xMTE2MzM5MzU4MTgsMjc4OS41NTExNDM0NDg0MDUsMjA0MzMuNTk0NzAwNTY0ODYsNzQwNDAuMDY0NDY5NDQwNjQsNzc5Mi43MjQ5ODQ0Mzg5NjIsMjUzNDIuNDU2OTE2MzU4MjEsMjIyOS40NjUyOTMxODQ5ODUsMjA5NTYuMDY5NzE0MDE2NTYsMTk3MTIuNTIwNjQ1NjIzMTAzLDY5OTIuNzQ2Mjk2NTkxNjg3LDE4MTcuMDQ0NjA2NzUxNjg4NAorMjAsU3VuIDEzIEZlYiAxMSwxMzE2LjM2NjQzNzUxNjczMjMsOTk2OC44NTk3NTAxMjI3Nyw1OTU1LjgzMTE2MzE4NTMzNSwxMDc1MC41NDU4MjQ0NzgyMSw0MjM2Ny4xMTc4Mzk5NzM0Niw4OTQzLjUzNDE2NTY5NTA4Niw3NTA2LjI1MDQ0MjIzODAyLDExNTEuODE1NzA4MDgwNDIzLDE5ODMuMDM0NjIyMTgxNDgzLDMzNjI4LjUwMTYzMjcwNTU5LDE3MDc2LjI1OTEyMzQxMjgyNywyNDg3LjYzNjA3ODY0MjQ3MSw2NTc4LjY1NjczNjAxMDk2OCwyODEzLjQwNTc0NjgxNzY3MTYsMjYxODMuOTg2MTA2NjczMzEsMTM1MDEuNzMzOTk5MzQ5LDYxNzAuMjcwODcwMTUzMzg5LDkwNjUuNTc5NDEyMTcxNzk5LDk4NTMuMjYzNzkxNzMwNTIyLDEzNjMzLjM1NjE1NDg1NDY0LDExNDIwLjEzNDU2MTA2ODUzOCwyODE5LjA2MzkzMjQxNDQyOSwyMTQzOS4wODc5MTA4MjA3OTYsMTAzOTYuNzkzNTgwMjA2ODksMTIwMDEuNzk2ODMwNzc1NjYsNjQzOC41NTgzNjA1MDAzMzIsMTk2MS4zMzA2NTYyNzQyMzE0LDE3MjAxLjU0Njc3OTM3ODIzLDE0MTQuNzA0MjE1MjI4NzM5NSwzNzM2LjgyNjI4ODE4Mjc4NDUsMjY4My4wMzY3MDEwNTI2MjUsMTgwNzguMzc5ODU0NDQ0MzE2LDM5MzcuODc0ODQyNjQ1Mjk4LDQwNTEuNTU3OTk1NDQ2MzcsNDA3NzQuNDA5MjcwMzA1NTksMjQ2MjcuNjU2MjY0MzkwNDQ0LDc2MDguMzczMTQ2ODczMzcxLDczNDYuNzQ2MTQ5NDU1NTkyLDI2NTk3LjEyMDA4MDc0NjIzNCwyMjQyLjAzMjQxMDY0MzI4MzYsODkxNy4wNTA3OTc1NzI4NDcsMTY3My40NTA2MjQ3ODkyMjksMTIyNTYuNzcxNDU3NjUwMTU3LDQ0NDA5Ljk1ODMxMjY3OTQ4LDQ2NzQuMDEyMDA4OTQ5MjY1LDE1MjAxLjA5MTIzOTA2MTQ4OSwxMzM3LjQxMTI5OTM1NDEyMywxMjU2OS43MDkxODc1MDcxNjcsMTE4MjUuMzAyNTA4NTYxMzMsNDE5NS40MDcyNjk4NTM3MiwxMDkwLjAyODA2MzkyNzEzNDgKKzIxLE1vbiAxNCBGZWIgMTEsNzg5LjU1NDE2ODA5ODE0MDQsNTk4MC41MzE3NjY1MzI5OTcsMzU3Mi45NjMzMjEwNjkxNTgsNjQ0OC4xNTY4MjE5MTk5NzgsMjU1MDMuNDk4NjAxNTE2MTYzLDUzNjQuMzc5MzQzMzAwMjA4LDQ1MDIuOTEzMTk1MDMxMjg5LDY5MS4yNTAyODg5NDk5MTcxLDExODkuODE0NzIzNzQ3OTA0MywyMDE3MC4zMzk0MjQzNDQ4OCwxMDI0Mi4zNTI1Mjk2MzI3OTcsMTQ5Mi4yMjE0NjYzNDU2Mjg5LDM5NDYuNzA4NjE3MTQwMjEwNywxNjg3LjY0MzY5MDcwMDUyODQsMTU3MDUuMTYxNzk5MDEyNDQ1LDgwOTkuNzQwODYyMDMyMTg4NSwzNzAxLjg4NDUzMjY4ODUxMDcsNTQzOC42NDM4MTMwNjE4ODEsNTkxMC44NjYxNzY1Njc2NjgsODE3Ny42OTI2NjMyNjAwNDEsNjg1MC4yMzk4NjEyOTY0MjIsMTY5MS4xNDI5NjQwODk1NzAxLDEyODYwLjAxOTUxMDcxNDEzNyw2MjM2LjAyMjk4NDU2NTY2OCw3MTk5LjAwNzgyODIwMjQwMSwzODYyLjcyODM1NTU0NjkyNjcsMTE3Ni41MTkwNDc0OTU2NTQsMTAzMTcuODMwNjkyMDMwNDUsODQ4LjY2MzA5ODg5NzI1MDIsMjI0MS42MDE3NzU5NjM4NTEsMTYwOS40MzE4MTEwODY2MjY2LDEwODQzLjk3MjI5ODg4Njc4MiwyMzYyLjEyNTgyMzg3OTg3NCwyNDMwLjkwMTQ3NTQ4NTk0MjcsMjQ0NTcuNzYwNjYxMTcyOTQsMTQ3NzIuOTYyODcyNjYxODc2LDQ1NjQuMTgxMjg5MDE0MjA2LDQ0MDYuNzk2OTUwNDUzMiwxNTk1NC4yNTExMTg5Mjg5LDEzNDQuODE5MTc5Njk4MTc3Myw1MzQ5LjM4ODY1NTc1Njk3OSwxMDAzLjkwMzk1OTE2MjAyNzYsNzM1Mi4wNjQxNjI4NDIzNTQsMjY2MzcuNjk5ODA5NjkzNDQ4LDI4MDMuNDY0NzY1NjMxMzIwNSw5MTE4LjA2OTkzNjQyMzc3Nyw4MDIuMjg3ODUwNDM3MzE2NCw3NTM5LjUxMjgzODA1MjQxOCw3MDkzLjg2OTUzODExNjY3MzUsMjUxNy4xMDA4NDc2MzUzMiw2NTMuODk4ODQ4MDQ2MTMzMworMjIsVHVlIDE1IEZlYiAxMSw0NzMuNTcyMjI5NTE5NTQ5MDcsMzU4Ny44NDY4NDk5NTE4NjU0LDIxNDMuNDU1NTQ1OTYwNDUyNiwzODY3LjU4NDI0NDcwMjY3LDE1MzUxLjcwMTU1Mzg1NTk3NywzMjE3LjU3NDUxNjEwOTMyNTUsMjcwMS4yNDM3MjYzOTk0MDUsNDE0LjgzNTEzMjQwNzI2MjEsNzEzLjg4NTE5NjY5NTMwOSwxMjA5OC4xMjYxNDEyMDU0NDgsNjE0My4zNTU3OTg2MzY3MTgsODk1LjExMTg5ODg4MzYzNiwyMzY3LjczMjgzNDkxMTYyOSwxMDEyLjM0NTQxMjM5NjQ3ODksOTQxOS45NDM5NDA5Nzg2NCw0ODU5LjA2MTgxMDQ4NTg3MSwyMjIwLjk2MzM1MDc5OTYwMzYsMzI2Mi43NjI0MTAxMjU3MzksMzU0NS44NjE5MDYwOTcwNTgsNDkwNS4yMTczMzc0NDQ3ODMsNDEwOS4wMzQ5NjcxMzExNCwxMDE0LjUwNzg1NzM1NDg5OSw3NzEzLjk0MzUyMTkyOTg4MywzNzQwLjM3NjE3NzE2NDI0NTMsNDMxOC4xNTc0ODI0NTc5NSwyMzE3LjM5MjEzMDYxNjA2Niw3MDUuNzQzMTU4NDQ0NjM3LDYxODguODMyMjk4OTE5NjU5NSw1MDkuMTAxODI5NzcwMjQ0NSwxMzQ0LjY2MzUwMjcxNjQ2OCw5NjUuNDI0MDM0MTgxMzU3Nyw2NTA0LjU0MjU5NjQ1NDkwNCwxNDE2LjkxNDYxNjM0MzY1NDksMTQ1OC40OTk1NzA2NDc0OTc0LDE0NjcwLjUwODc1MzY0MDYzNCw4ODYxLjU5MDU1ODI2MTE4MSwyNzM4LjAwMTI1Mzc3MzU4NzUsMjY0My4zMjQ2ODYwNDQ2OTE2LDk1NzAuMTI4NTI5MDg0NjQzLDgwNi42NTAzNTgxMDA3NDA4LDMyMDkuMTI2MTcwNDk1ODY3NCw2MDIuMjQyMTQyNjgxNDQyLDQ0MTAuMDM0NDU3Mzk5OTc1NSwxNTk3Ny42MzM3NTgzMzg1MzIsMTY4MS41MTAwMzI5MTYyNzA4LDU0NjkuMjg0Nzk1Njg5NzcxLDQ4MS4yNzY5ODA5NDg1NzIwMyw0NTIyLjMxNDI4MDUyMTE4Niw0MjU1LjUzMTQ5MDEyMTY5MywxNTEwLjE3NDExNjUxMTY4MDcsMzkyLjI2ODI0MDY4OTc2MjgKKzIzLFdlZCAxNiBGZWIgMTEsMjg0LjA0ODk0NjY0MDAxNDYsMjE1Mi40MjYwMTcyODE3MzgsMTI4NS44ODA3OTc5NjQzMTg0LDIzMTkuNzgwMDEyNDczMDQ0Myw5MjQwLjY1MDE1OTUwMjA2NywxOTI5LjkyODYwMzQzOTg4ODgsMTYyMC40NDU1MTM4MDk5MzksMjQ4Ljk1MzA4MzIxNjUwOTMsNDI4LjMyODkzODMyNjg0MzQsNzI1Ni40NzE2NTk4ODg4NDEsMzY4NC44MDc3NDU5MjYyNDk1LDUzNi45NDAxMzMzMDcxMzc4LDE0MjAuNDY1MDI3MjgwNjIwMiw2MDcuMjYzODk4MDUwNjA2Nyw1NjUwLjEwNTU2MTU0MTYxLDI5MTQuOTY5ODgwMjI4NzgyLDEzMzIuNDc3ODkzOTE5NzIyOSwxOTU3LjQwNDIxNTUwOTM1NywyMTI3LjEyNDc4NzcxMzEwNTQsMjk0Mi4zMDAxNDIxNDYyMDc3LDI0NjQuNzYxODgwODMzNTM4Myw2MDguNTk4NTU2NTA5MDQ4LDQ2MjcuMTM2NzcyMjM5ODA2LDIyNDMuNDk0NTczODExMDQ5NiwyNTkwLjE1NDExMzIzNjUwMiwxMzkwLjI4ODg5NTE4MjU0OSw0MjMuMzQ1NzI2NDMyOTUxNTUsMzcxMi4xOTI3MTgzNjY5MjM2LDMwNS40MDM4MjUxNzgwMTk2LDgwNi42MjA4NDA1NDI0MTYzLDU3OS4xMTQ1MjkwMTAwMzY3LDM5MDEuNjMyMzg0NTE1MjY0Nyw4NDkuOTM0MTA4NjE2MjY3Miw4NzUuMDgzMzQ0OTU4NDIxMyw4Nzk5Ljg0MjA3MzQwOTU2Nyw1MzE1LjY1Mjg0NTIwNDQwMiwxNjQyLjQ5ODAzMjA0NjA0NTQsMTU4NS41NDc0MDY5OTQ2MjIyLDU3NDAuNjM2MjM4OTg3OTkxLDQ4My44NDcxNzQ2Mjk5Nzg1NSwxOTI1LjE3MzAyODExMDM2OTgsMzYxLjI4NTQ2NDg4OTA5MDksMjY0NS4zMDUxODk5Njk3NTEsOTU4My42MjYzNTIzODQyNzcsMTAwOC41NzE2Mjg4NzM5NzAxLDMyODAuNjQ2MjQwMjE1Nzk2LDI4OC43MDkxMTQ2ODM2MzE4LDI3MTIuNTYyNzM0MTEzMzI4LDI1NTIuODQ3NTQ5MDQ4ODc5NSw5MDYuMDUyNzcxNTU2ODgxMywyMzUuMzE4NTQ4NzQ0MzIyMDcKKzI0LFRodSAxNyBGZWIgMTEsMTcwLjM3Mjg2NDQyMTE2NDI1LDEyOTEuMjg2MTY4NzI1NTg2OCw3NzEuNDEyODQ4MDg1OTU2NSwxMzkxLjQwNjgxMzI2ODQ0MjksNTU2Mi4wNjE0OTg1OTY3NiwxMTU3LjU4ODQ0ODA5NDAyOSw5NzIuMDg2NzUxNzE3NzU1MSwxNDkuNDAwNTI3NTAyOTI1MzcsMjU2Ljk5NjA1Mzg0MTY0MTIsNDM1Mi40NDM3MTQ5ODc5MTcsMjIxMC4xNjMwODgyNzIyOCwzMjIuMDg3NzQ2NTY1NjM3Myw4NTIuMTc0MDkyMTQ2NzM5OCwzNjQuMjcyMzE5MjI0MDM3NDYsMzM4OC45NDkxMTYyMzA2MTUsMTc0OC43MDEzNTIzNTg3MjMyLDc5OS40MjY1ODY0ODI3Njk4LDExNzQuMjkwNDIyNDU4NTU5OCwxMjc2LjAzOTI5NTY1MzA5MzIsMTc2NC44ODIyNDIzODE0MjQ1LDE0NzguNDYxODEwNDMwNDgxNiwzNjUuMDk1Mzg5MjM2OTkxNzYsMjc3NS41NDQ3MDEyMzE3MTksMTM0NS42NTg4NzIwOTkxNTA4LDE1NTMuNjQ4NTU0MTg0NjM5Niw4MzQuMDg1Mzk5MDA3NDQzMiwyNTMuOTQ3MzI4MTU2NDE2OCwyMjI2LjY1MjI3OTY4MzQ4NywxODMuMjA3OTA4NjM2MDM5NzUsNDgzLjg2NjExMzQ1MDU0MjQsMzQ3LjM4NDc3OTA4MDMyMSwyMzQwLjMyMzkxMzY3NzM2NTUsNTA5LjgzMTY4Mzc4NDMyMDQsNTI1LjAzNjY0MTgyNDgxNDMsNTI3OC40MjgyMDEwMDg0MTUsMzE4OC42MTA4MTc1MjE2NTMsOTg1LjMxNzA2MDc2OTUyNDUsOTUxLjA2MDE3MDIxNzk3NTUsMzQ0My41MTcyOTg4MTgwNjQsMjkwLjIyMjU1OTA3NjY2NTgsMTE1NC45MjIwNDQ3Njc5MTgxLDIxNi43MzUzNTU3MTg1ODY3LDE1ODYuNzUzOTk5ODQyOTgyMiw1NzQ4LjQwNTY0OTI3MjE5NCw2MDQuOTQyODQyOTc0Mzk1LDE5NjcuODMzMzA3MDYyNDQ0NCwxNzMuMTkxMjA1MTIwODUyMDMsMTYyNy4wNDI2OTkxNjUzMTA1LDE1MzEuNDI1NTI2NTg2MjcxMiw1NDMuNjAwNjAxOTI4MTYzOSwxNDEuMTY1NjczMTkwNTkwNQorMjUsRnJpIDE4IEZlYiAxMSwxMDIuMTkwMjY4MTE5MjI1NjYsNzc0LjY3MDI5OTgzNzAwNTYsNDYyLjc3ODUzNjQ5NDQxMTQ3LDgzNC41NzEyODU2NTk1NDk1LDMzNDcuNzg3NDM2NjU3NTE4NCw2OTQuMzM1ODAwMDI3MzYyNiw1ODMuMTQ0MTI4Mjk4Mzk2NSw4OS42NTczMjczNzU3NTYxLDE1NC4xOTY4NDcyNDI5MTMzOCwyNjEwLjYxMzQ5NDMxNjA2ODcsMTMyNS42NzE5Mjk4NjM2NDQsMTkzLjIwODE1NzAzNTM1MDk1LDUxMS4yNDE2NTQyNzUzMDU1NiwyMTguNTEyMDUyMjQxNjI3MjYsMjAzMi43MDg4NjE3ODk5ODA2LDEwNDkuMDUzMDA0MzM5NDk4Myw0NzkuNjE5OTIwNTM1NzQ1MDUsNzA0LjQ4MzIyMzAxMzM2MDIsNzY1LjQ4Mjc2MzcyMjYxMDYsMTA1OC42MzI4MDQ1NjA1NDI0LDg4Ni44NDE0NDEyMTA2MTE1LDIxOS4wMTkxMjE0ODA1MTA0OCwxNjY0Ljg4NzI1MjI3NzksODA3LjEzNTUxMjg5NDA1NzgsOTMxLjkyNDc2ODU2Nzc1NjcsNTAwLjM5ODU4ODM2NTc0Mjk3LDE1Mi4zMzI1MjMzNTgxODM3OCwxMzM1LjU5NjYyNjY4NDEzMywxMDkuOTA0MTkyNjMyNDU5LDI5MC4yNTYxMzY1Nzc0MzA3NywyMDguMzgwNzgwMTE4NjQ1NjIsMTQwMy44MDM4NDY2NTM1NTQsMzA1LjgyMjE5NjQ0NDk5NjUsMzE1LjAxNTMyMzQ0OTYwNjksMzE2Ni4xNzcwMTA3NTA5MjEsMTkxMi43MDA1Nzc0NjI0NzM4LDU5MS4wODE1OTE4NDA1NjQyLDU3MC40NzYzMDQzMDE2NzYsMjA2NS41OTQ3MzQ5MDg3MDMsMTc0LjA4MjUwMjA1MzQ1MTk1LDY5Mi44NDQ1MDUwNjE2ODI2LDEzMC4wMTk3MzA5OTg1MTA3NCw5NTEuNzk2NjQ1ODM2MDU4NCwzNDQ3Ljk5MDgzODU5MjI3MzYsMzYyLjg0NzM4MTM2Mzc5ODA0LDExODAuMzY5NzI2OTc3MjgwNiwxMDMuODk0MjQ5Mzc3OTUzNCw5NzUuOTMxMjMyMjIwODM5Miw5MTguNjg2MTU0NzM4MTg2NSwzMjYuMTQxNzQ5NjgyOTE0NDUsODQuNjg0MTg2MjAwNTExMzMKKzI2LFNhdCAxOSBGZWIgMTEsNjEuMjk0MjA3OTk5MDk3Mzk1LDQ2NC43NDEzNDU1NjEwNTU4LDI3Ny42MjU2MzEzOTc0MTY3LDUwMC41ODAxMDQwOTc1MTQ5NSwyMDE0Ljk2NzExMDA1MjQyMDEsNDE2LjQ3MjA5MjQyNzU4MjE0LDM0OS44MjE3NzM2NDMyMzk3LDUzLjgwMzk3OTAxNTczOTU0LDkyLjUxNzYzNzA2ODI5OTQ2LDE1NjUuODU5Mjc0ODcxODMzOCw3OTUuMTQ5MzgxMjY0NjkwOSwxMTUuODk4NDExMTQ0NTc4NTYsMzA2LjcwNzMxMjkyNTMxNTI1LDEzMS4wNzY0NzgyNTU5NzEzLDEyMTkuMjMxMDA5NTQ2OTgzLDYyOS4zMzExNjI0MzUxMDMxLDI4Ny43NTAzMjU2MjU5NDEzLDQyMi42MzUzMjA0MjAwNjUxNyw0NTkuMjA1MjM0Mjk0NjQ2LDYzNS4wMDIyNTE5NzA0MzQ2LDUzMS45NjM4MTEwMjEwMDcxLDEzMS4zODg2MTk4NTA2NjQ0LDk5OC42NjkyMjAyMjgwMTM3LDQ4NC4xMjYxNzMxMTcwNDAzNyw1NTguOTk2NzAxMTMwODAzMSwzMDAuMjA3NTU4MDg2MDc1NTUsOTEuMzc4MDI1NDEyNDMzMjYsODAxLjEyMTkxNjk0MTEwOTIsNjUuOTMwMTkzOTc5ODE0MTUsMTc0LjExNTYxMzY4OTUxNDIyLDEyNC45OTg0NjgzMzU2MjkyNCw4NDIuMDQ4NjQzMTA0OTMyMiwxODMuNDQ3MzIxNDY4MTU5NiwxODkuMDA0NjEwMTQzMzYwMzcsMTg5OS4xNzk2ODk0Mzc5ODksMTE0Ny4zNDEzMDgwMzY3ODA0LDM1NC41ODM4MTc3NzQwMzkyLDM0Mi4xOTAxNjk5NDMxOTkzLDEyMzkuMDQ4MDYwMTY0NDE0MiwxMDQuNDE4OTc5OTIyNzcxNTYsNDE1LjY0MTQ5NjA2NTMzOTM3LDc3Ljk5ODk1NTY0MjQ0OTMyLDU3MC45MjQ5MDkzMjU4MDc5LDIwNjguMTY1MzMzNjgyODg2LDIxNy42Mzc4ODc1MDcxNTk1NSw3MDguMDI0MjI5Njk4NzYzLDYyLjMyNDI3NzE4NjkyMzY4LDU4NS4zODI3Mzc4MzIzNDc3LDU1MS4xMTAyNzM1Nzg4MjcyLDE5NS42NzM4Nzc2Nzk4NDg0LDUwLjgwMTM4NzQ4MTM4OTc5NgorMjcsU3VuIDIwIEZlYiAxMSwzNi43NjQ2ODQxNzAxMTI1LDI3OC44MDgzNzIxNTA3MDUzNCwxNjYuNTUwNTM3MTc0Mjc0NTgsMzAwLjI1MTU5NjY3MTEzODAzLDEyMTIuNzM3NTc0MTkxMTI3OCwyNDkuODA2NzU2OTEwOTAyNDQsMjA5Ljg1NDM1MTg2NjQwMzg1LDMyLjI4Nzk4MzUwOTIxMjA0LDU1LjUxMDI5OTUzMjk0MzQyLDkzOS4yMTM0MTk1NDYzNjIyLDQ3Ni45MzkzODQwNTY3NTIwMyw2OS41MjM1MDg2Njc2OCwxODQuMDAxODE3NTMzOTQ4MTYsNzguNjI3NTEwOTYyMjI2MzUsNzMxLjMwNDMyNDI4MzgzNTcsMzc3LjUzODQ1Mjg0OTM0NDk0LDE3Mi42MzcyMzIxMDE1Njk2MiwyNTMuNTQ4NDgyMDQwNTczODQsMjc1LjQ3MjYyODA4NjA1MzQsMzgwLjg5NTUxMTkzNjUzMiwzMTkuMDk0MDkzMTkzODE4LDc4LjgxOTQ5NTU5NjYzNjA3LDU5OS4wNDQ0NjEzNzcwMDI4LDI5MC4zODM0Njk0NzU1MTU1NCwzMzUuMzAzNjkzMjIxOTE4OCwxODAuMTA1NjA0MjkwMDUyMzgsNTQuODEzOTc1MzA5MTYyOTMsNDgwLjUzMjQ1NjU4MTAwMzMsMzkuNTUwNzQ0NjMwOTgzNDIsMTA0LjQ0NjYxMDYxODU3ODQzLDc0Ljk4MTE1ODE5OTc5NzM5LDUwNS4wODk3ODk1MDkyODc4NywxMTAuMDQwOTIzMDk4OTk0MTcsMTEzLjQwMDIzMzUwNzkzMzU5LDExMzkuMTkzNzA4MDA4MTI3NSw2ODguMjM4MDk1NzQ1NzgzNywyMTIuNzExMzE3NjAyMjIwODcsMjA1LjI1NzA2ODA1MDI2MDc2LDc0My4yNDQ0MTc0MjY4OTMsNjIuNjMzMTk0MzEwMjQzNzIsMjQ5LjM0NTg2MTU3MzAxNDA1LDQ2Ljc5MTY2MjI1ODI4Nzc0NCwzNDIuNDYzNTg2MTYzOTE3OTcsMTI0MC41MjQ0NTg5OTk2ODY5LDEzMC41NDA5MTYyMjY5NDA2OCw0MjQuNjk2NjYxNzA2MzEyMDYsMzcuMzg3MjI1NjYxNjU4Njc1LDM1MS4xMjQ3ODYxMDc3MTU4NiwzMzAuNjA1NDgzMjYwNzQzMywxMTcuMzk3NjI4NDM4MTAyMTcsMzAuNDc1MzcyNzc2MDQxMzYKKzI4LE1vbiAyMSBGZWIgMTEsMjIuMDUxNzU5MzQwMDE4MTQ0LDE2Ny4yNjMxNzY2MDY3MTUzMiw5OS45MTU0MzA3NTg3MzY3NiwxODAuMDkzNTM3OTc4NzAyMDUsNzI5Ljg4NDU3MzYxNjU4MTMsMTQ5LjgzODYwMjM3MTM5NzgzLDEyNS44ODk0MTczNTEyMjY1MSwxOS4zNzU5NzU0NTI2MTE2OTgsMzMuMzA2MDEwMDQ4NDU2NSw1NjMuMzQ4MDQzNDc0MjMsMjg2LjA3NDI5Mjc2MjM5MDIsNDEuNzA0ODk4MDY1OTIxMzA2LDExMC4zODc1NTYwMDgwNTM0OCw0Ny4xNjU1MDc5NTIzMzgwNSw0MzguNjQyOTYxMTYxMDIwMjUsMjI2LjQ4Njk2Mjk1MjM0MDIsMTAzLjU3NDU2MTkwNDIyNzIsMTUyLjEwOTQ3NTY0NDU4OTc0LDE2NS4yNTMzMTI2NTY3MzMxLDIyOC40NzQwNDI2NDM5ODEyOCwxOTEuNDA2MTA1NDY3NTEzMDQsNDcuMjgzNTAxOTU3NTcxMzksMzU5LjMzMjczODQwNzc2OTE3LDE3NC4xNzUwODQxNjA2MTkxMiwyMDEuMTI1ODQwMDYwODUwODMsMTA4LjA1MjAwODM5MjIzNjM2LDMyLjg4MDcwMDE2NzA2OTk2LDI4OC4yMzU0MjkxMTI1NjA2NywyMy43MjYwMzAyNzMxNTYzNyw2Mi42NTQzNDAzMTExMjQzMzYsNDQuOTc3OTY4OTUzMzMwMzc1LDMwMi45NzA1NDQ4MTU3NjQsNjYuMDA4MTE5MDc0NTMzODQsNjguMDM4NTIyMDc2ODI0ODgsNjgzLjMyODQ1NTczMTg0MDcsNDEyLjg0MzEwOTgzNjcyMDksMTI3LjYwMzQ0MDA3MzcyNjAzLDEyMy4xMjAxNDkyODI0OTc3OCw0NDUuODM2MzEwNzgxMDkzOSwzNy41NjkwNDcyMjY0NDYxLDE0OS41ODQxMTg4OTk3NzEwMywyOC4wNzAzNzU5MDU4NDgwOTIsMjA1LjQyMzUyMDkyMTg5NjcsNzQ0LjA5MDkzMTY4MzY2NjksNzguMjk5NjY1NDcxNDcyODUsMjU0Ljc0NzUzNjcyNjQzNzgsMjIuNDI3OTM4MzEyNzAyMjUsMjEwLjYxMjI1MzMzNjQyMTEsMTk4LjMyNjkzMzU1MDg4NDYzLDcwLjQzNDU1NzkwMTQ1MDg2LDE4LjI4MTk1MjI4NjAwMTMyOAorMjksVHVlIDIyIEZlYiAxMSwxMy4yMjY4NjY1OTg3MTMzNiwxMDAuMzQ0ODE2NzA1NjI1NDMsNTkuOTQwMzM4OTYxNjczNTgsMTA4LjAyMjAzMTA3MjMwMjYsNDM5LjI2ODg4NDc4ODM5NDksODkuODc2MjQ2ODc3NDM1MSw3NS41MTk3NjczNDc5NzQxOCwxMS42Mjc0MzA4ODEyOTIyNzUsMTkuOTgzNTA0MjMxNjcwMDc1LDMzNy45MDE4MjMyNzk0MDM3NCwxNzEuNTkxNjExNzk4MTI0MzUsMjUuMDE3NTIwMDE3ODkyNTcyLDY2LjIyNDQyMzUzOTI0ODMsMjguMjkyNzI5MjI1MTQ5NzgsMjYzLjEwMjczMDQxMTY0MjM3LDEzNS44NzA1NTM4NTg5Mjg4LDYyLjE0MDA3Mzk2Mjc1NDE2NSw5MS4yNTM5MzM3NzQyOTg0Niw5OS4xMzM4NzE5ODM3ODAyMSwxMzcuMDQ2NjYyODY4ODQ5MDcsMTE0LjgxMzU5MTMwNTU3MTAxLDI4LjM2NTE5NDU5MDQ4NDEzNywyMTUuNTQzNTM0NDc5MTM5NzcsMTA0LjQ3MjMyMTc0OTU2OTg0LDEyMC42NDE4NTg2NDAxOTcwMSw2NC44MjQzOTk3Nzc3ODg5OCwxOS43MjM4MjU2NzA2MjE5NjMsMTcyLjg5MTEyOTc5OTk1MTQ3LDE0LjIzMjk3NDY4NzI3MjE4MywzNy41ODQ0NTQzMTQyOTE0MiwyNi45ODAzNjk4NDQwMjc0NDMsMTgxLjczMjU4MzQ1MTI2MzYyLDM5LjU5NTA1MDcyNjg1MjkyLDQwLjgyMjE3NzAwMDcyNzgzLDQwOS44ODQ5ODI4MjMxNjYyNCwyNDcuNjQ2MjQ2Nzk1MjYwNSw3Ni41NDgwODY4MTQ2NTY4MSw3My44NTE3NDAyNTI5MDE4MiwyNjcuNDM1ODQ4OTY1NDIyOSwyMi41MzQ5NDQ1NTI2NDA4MjMsODkuNzM2NDU4NTUyMDkwNjIsMTYuODM5NDU4MjI3NzM5MTg2LDEyMy4yMjE0ODc4NjcyMjkwMyw0NDYuMzIxMTkxMzk2MDk1Niw0Ni45NjUwMzAwNDQyMDQyMSwxNTIuODA2NDYzNTMzNzYzNTgsMTMuNDU0MTMxNjk5MjU2MDU4LDEyNi4zMzAwMTc3NTk2MzU1MiwxMTguOTc0Mzk3OTEwNTEyOTMsNDIuMjU4MzI0NDQ0Mjg4NzA0LDEwLjk2NzIxMzAxNDY2NDcyNworMzAsV2VkIDIzIEZlYiAxMSw3LjkzMzYyNzMwMTA3ODg4Miw2MC4xOTkwNDM2NjEwNDAwNSwzNS45NTg4NTc5NzU0MDQ3MSw2NC43OTI5NDI1OTUxOTk0MywyNjQuMzU5ODcyNTQ5MTc2Myw1My45MDk3NzM5NTU2MjQyMSw0NS4zMDM1NDUyMTU0NzMzNSw2Ljk3NzUxNDMwOTgxMDI2MywxMS45OTAwNDE0NTA0Nzg0NjgsMjAyLjY3NzM5MTQwNDMzNjk2LDEwMi45MjM1MDM5NjYzODk1NSwxNS4wMDczMDc4ODQ2NTIxMjgsMzkuNzI5NzkyMDMxMDY3OTYsMTYuOTcxNzAzMzMzNjg5NjY4LDE1Ny44MTIxNzYwMjkyMDQ3LDgxLjUwOTM3NTI5NTg0MjE4LDM3LjI4MTI0NzI2MTA2OTE3LDU0Ljc0NTMxNTU5NzkzNzY3LDU5LjQ2OTQ3MjcxNDM3NTY2LDgyLjIwNTQzNTc3MjM5OTgsNjguODcwMTc4NDUyNTAzNDcsMTcuMDE2MTc3NDA5NDgyNDE3LDEyOS4yOTI1Nzg0MTgwNTI2NCw2Mi42NjM4OTAxNDQ3NTgyOSw3Mi4zNjUwMTYwNzY4MTMwMywzOC44OTA1NTkxNTQxOTE0MzYsMTEuODMxNTQ2NTU2NzEwMzk4LDEwMy43MDQ3NDg2ODAyMTA4NCw4LjUzODIwMTU3MDYxNDYzNCwyMi41NDU3OTQ1ODg2ODAwOSwxNi4xODQzODYzNzQ1NjExMywxMDkuMDA5ODI3ODAyOTE4NzgsMjMuNzUxMTU3MTk1NDM0MTA0LDI0LjQ5MjcyNzgwOTkxMDE4NSwyNDUuODY0MDEzNjAyMzY0NCwxNDguNTUyMDg1NTUxMTYwMjIsNDUuOTIwNDgwMzAzNzM2OCw0NC4yOTg4ODYxMjAyMDgzOCwxNjAuNDIyMDczOTgyNzcxNDgsMTMuNTE3MDk1MDczNjg2Mjg4LDUzLjgzMzQ3ODI5MTAyOTE5NSwxMC4xMDIwMTY5MDM1Mzc5MDUsNzMuOTEzMzkyNDA5NjIzMDYsMjY3LjcxMzEyOTE1OTM0OTcsMjguMTcwMjM2NTIwMzA5ODg1LDkxLjY1ODc0OTI2NDEyMzcsOC4wNzA5MDMzNzcxOTE4ODMsNzUuNzc1NzI3MDk2ODE4OCw3MS4zNzE2MDQxNDkzMDA2LDI1LjM1MzU0ODY2NjA2MTg4LDYuNTc5MTU0NzQ4MDQxNDYyNQorMzEsVGh1IDI0IEZlYiAxMSw0Ljc1ODY5NDc3MTk0ODcyMSwzNi4xMTQ3MjQzNTQyNDYzMDYsMjEuNTcyMTEyNTMwMDIxODYsMzguODYzNzIwNjI2MTE2NSwxNTkuMDkyNTA1NjkxNjAwOTMsMzIuMzM2Mzk4MzQ4MDU4NDQ1LDI3LjE3NzE0ODkzMzMyMzY3LDQuMTg3MTE3ODI4NDQ5MzQ2LDcuMTkzOTg4MjE2NjA2NzcyLDEyMS41Njg1NDk4ODQ3NjY0Nyw2MS43MzU0Mzc2MTIxMjQxNCw5LjAwMjQ5NjE4MzI2MTc4MywyMy44MzQ5NjEzMjkzMjI4MywxMC4xODA2NjkzNjgyMDkyNTUsOTQuNjU3ODc0OTUwMzU2MDUsNDguODk3ODY0NDA0NTIwMTU2LDIyLjM2NzA3MTAzNDAxOTg3MiwzMi44NDI5Njc4MTk5NTE1MSwzNS42NzUxODc0NTAxNDQ4Miw0OS4zMDk3OTAxOTUzNTgwNCw0MS4zMTEzNjc2OTQyNDY1MSwxMC4yMDc5NDYzMjczOTQ0NDYsNzcuNTU1NTA3MDkyMzIzNzIsMzcuNTg2NzIzMTA0NTgxNjUsNDMuNDA3MDEwNzY4NTY0NDIsMjMuMzMxODg5MzEzMjI4OTQsNy4wOTcyODQxNjMyNTU3MjYsNjIuMjA0OTkyNDI0MTc3Mjg0LDUuMTIxOTczMTEyODYxNzg0NSwxMy41MjQ1NTg1MjE4ODgxMjMsOS43MDgzMzg1NDQ4MDkzMzcsNjUuMzg4MTQ4Njc0NjA4MjksMTQuMjQ3MTgzODIwNzkwMzAzLDE0LjY5NTI5NTEwNDY5OTA5OSwxNDcuNDc4NDE0Mzk5NjEzMTQsODkuMTA5OTMwNTU4ODY0NSwyNy41NDcyNzU5ODExNTcxNTMsMjYuNTcyMDcyMzY0NDQwOTk1LDk2LjIyOTY3MjMxNjgzMjM0LDguMTA3OTQ2NzgzOTAzMzIzLDMyLjI5NTA1NzMyMDE1NTIyLDYuMDYwMjE3MTMyNjQ5OTc4LDQ0LjMzNjM4Njg5OTE2OTEwNiwxNjAuNTgwNDIxOTY5Mjk3OTYsMTYuODk2OTI3MDAxNzE0NzcsNTQuOTgwMjQ1NDM0NDQ3MDksNC44NDE1OTg5NDEyMDcyNTQsNDUuNDUyMTQ1ODQ1NTY4MjI1LDQyLjgxNTE1ODcwNTU2MTk4NCwxNS4yMTEyNjE5MjkxNTQ4NzQsMy45NDY3OTA0Nzk3MTM1NTA3CiszMixGcmkgMjUgRmViIDExLDIuODU0MzM1NTU0MDY3MDIzNywyMS42NjYwMTY0MzAzMjM0NjMsMTIuOTQxMzQ4NjcxOTY4Njk0LDIzLjMxMTA3MTQwOTU4NzYyNiw5NS43Mzk5MTU3MjQ0NjcwNCwxOS4zOTYyMjM2MjA2OTgyNzIsMTYuMzAzMzA4MTI5NzQ1MDM0LDIuNTEyNjIwMDEyMDgxMDc1LDQuMzE2MzcwOTM1MjUzNTA4LDcyLjkxODU4MzM1NjAwMjk2LDM3LjAzMDE3OTc0NTQ3MDEzNiw1LjQwMDM4MjEzNDMxODU0MywxNC4yOTkyMzAwODYzMTU0ODIsNi4xMDY5OTQyNzA4NDE5MjUsNTYuNzc3MjAxNzczOTk1OTMsMjkuMzM0MDY5MDE5ODUwNDU3LDEzLjQxOTIzNjYwODM0MDAxNSwxOS43MDMyNTAzMzUwNjg3ODgsMjEuNDAxMjIyMTAzODQ1MDUsMjkuNTc3ODI3MjMzMzUyMiwyNC43ODA0MDIxNTkxMjUyNTYsNi4xMjM3MTM1MjU4Nzc5ODIsNDYuNTIxMzI2NTYwMjY3NjEsMjIuNTQ1MTE3MDMzMTkyOTY2LDI2LjAzNzA0MDE0ODExMDc4LDEzLjk5NzY2NjkxODQ4NzE1OSw0LjI1NzM4NzIwNDMxNDcxNiwzNy4zMTIzMzY0MjIwNzA3NCwzLjA3MjYxNjI3MzQzODI1NDcsOC4xMTI5ODg3MzMxNDYwMTgsNS44MjM2MzE0Nzg0NTk4MjQsMzkuMjIyMjg2ODQzNzI1OTksOC41NDYyMTEyNTA0MTI2MTUsOC44MTY5NjkzMTQwOTAzNzksODguNDYzMTU2Nzg5NzE3MjYsNTMuNDUzMjA3MTYwNjkzODM2LDE2LjUyNTM2MzkyMzc1NjQxLDE1LjkzODkwNzE2NjUzMzk4Nyw1Ny43MjM3MDgyMjgyNzk0MDYsNC44NjMzODg4NjgyNDM0NTcsMTkuMzc0MDIwODg2Mjk2NDkyLDMuNjM1NTM1NDAwNTI5MjQyNiwyNi41OTQ4NzEwMzUzNDcxNDMsOTYuMzE5OTQxODExOTg0NzYsMTAuMTM1MDU2NzUxODgwOTI2LDMyLjk3OTE4NDYyNzcxMDM0LDIuOTA0Mzk0NzIxOTg3NTU0LDI3LjI2MzM1Njg2ODA2MjM1MywyNS42ODQ0MjE3ODY5Njc4OTIsOS4xMjYyMzY5MDQ4Nzk4NiwyLjM2NzY1MzYyNzMyNDAwODUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0lSU3RhdGVzT25seV9GRF9SZWZlcmVuY2UvVGVzdFNJUi9odW1hbi9JbmNpZGVuY2VfMC5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNJUlN0YXRlc09ubHlfRkRfUmVmZXJlbmNlL1Rlc3RTSVIvaHVtYW4vSW5jaWRlbmNlXzAuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ4MGU5MzEKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNJUlN0YXRlc09ubHlfRkRfUmVmZXJlbmNlL1Rlc3RTSVIvaHVtYW4vSW5jaWRlbmNlXzAuY3N2CkBAIC0wLDAgKzEsMzMgQEAKK2l0ZXJhdGlvbix0aW1lLHN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL25vZGUvdHJhbnNwb3J0L3BpcGUvVVNBCisxLFR1ZSAyNSBKYW4gMTEsMC4wCisyLFdlZCAyNiBKYW4gMTEsMC4wCiszLFRodSAyNyBKYW4gMTEsMC4wMDEyNjcwMTgzNjI5NjgzNDQ2Cis0LEZyaSAyOCBKYW4gMTEsMC4wNTA5MzAxMjQwMTkyNjg1OAorNSxTYXQgMjkgSmFuIDExLDEuNTM1NzQyNTczMjYyMzYyNgorNixTdW4gMzAgSmFuIDExLDQxLjE3MTU4MjkxMzAwMzY1Cis3LE1vbiAzMSBKYW4gMTEsMTAzNC44NTExMjMyOTg4NTIKKzgsVHVlIDEgRmViIDExLDE4MTc4LjI0ODk3NDQ0NTk0Cis5LFdlZCAyIEZlYiAxMSwyNzczNTguNjEyMDcxMzA1NzUKKzEwLFRodSAzIEZlYiAxMSwwLjAKKzExLEZyaSA0IEZlYiAxMSwxNDY1NC42NDczNjc1MzI2OTYKKzEyLFNhdCA1IEZlYiAxMSwzNDY3NTAuNzk1Mjk2ODg5MjYKKzEzLFN1biA2IEZlYiAxMSwxNzE1Ny41NDc3MjEwMjE0MTYKKzE0LE1vbiA3IEZlYiAxMSwxODQxMTEuOTI3NDc0MTcxMTYKKzE1LFR1ZSA4IEZlYiAxMSwxMzYzMS4wNjAyOTc4NzEyMjUKKzE2LFdlZCA5IEZlYiAxMSw2MjAzOS45MTcxMDM2MjEyMzYKKzE3LFRodSAxMCBGZWIgMTEsMTMyMDcuMDI0MTc0NzYyMTE3CisxOCxGcmkgMTEgRmViIDExLDQzOTM5LjA1NzcxNTA3OTE2NQorMTksU2F0IDEyIEZlYiAxMSw5NjkxLjM4Njk1MjY2ODY1NAorMjAsU3VuIDEzIEZlYiAxMSwyMDU4Ni44MDM1MjE5MjgwMgorMjEsTW9uIDE0IEZlYiAxMSw5NTA4LjA3NTU4MTU2Mjc5CisyMixUdWUgMTUgRmViIDExLDcxNjMuMzQ5NDA2MTcxMjY5CisyMyxXZWQgMTYgRmViIDExLDM3MDcuNzE2MjY0MTQ3ODUxNworMjQsVGh1IDE3IEZlYiAxMSwyNDYzLjcwNDk4MzI4OTkyNTYKKzI1LEZyaSAxOCBGZWIgMTEsMTM4MS40ODA0MTk5Mzc4NTk2CisyNixTYXQgMTkgRmViIDExLDg2OC4wNjY5MjEwOTg2NTMzCisyNyxTdW4gMjAgRmViIDExLDUwNC45OTI1MzI5ODMyMDM4MworMjgsTW9uIDIxIEZlYiAxMSwzMDkuNDE3MTc0MTY4ODYwNAorMjksVHVlIDIyIEZlYiAxMSwxODMuMDU1MDAzMDgwNzgxMDMKKzMwLFdlZCAyMyBGZWIgMTEsMTEwLjg4NTk5Nzc2MjAzNDA0CiszMSxUaHUgMjQgRmViIDExLDY2LjEwNjg0Mzk3ODgxMzU0CiszMixGcmkgMjUgRmViIDExLDM5LjgzNjkzMzc0NjIwNzgxCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNJUlN0YXRlc09ubHlfRkRfUmVmZXJlbmNlL1Rlc3RTSVIvaHVtYW4vSW5jaWRlbmNlXzEuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTSVJTdGF0ZXNPbmx5X0ZEX1JlZmVyZW5jZS9UZXN0U0lSL2h1bWFuL0luY2lkZW5jZV8xLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ODAyZGJiCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTSVJTdGF0ZXNPbmx5X0ZEX1JlZmVyZW5jZS9UZXN0U0lSL2h1bWFuL0luY2lkZW5jZV8xLmNzdgpAQCAtMCwwICsxLDMzIEBACitpdGVyYXRpb24sdGltZSxVUy1BSyxVUy1BTCxVUy1BUixVUy1BWixVUy1DQSxVUy1DTyxVUy1DVCxVUy1EQyxVUy1ERSxVUy1GTCxVUy1HQSxVUy1ISSxVUy1JQSxVUy1JRCxVUy1JTCxVUy1JTixVUy1LUyxVUy1LWSxVUy1MQSxVUy1NQSxVUy1NRCxVUy1NRSxVUy1NSSxVUy1NTixVUy1NTyxVUy1NUyxVUy1NVCxVUy1OQyxVUy1ORCxVUy1ORSxVUy1OSCxVUy1OSixVUy1OTSxVUy1OVixVUy1OWSxVUy1PSCxVUy1PSyxVUy1PUixVUy1QQSxVUy1SSSxVUy1TQyxVUy1TRCxVUy1UTixVUy1UWCxVUy1VVCxVUy1WQSxVUy1WVCxVUy1XQSxVUy1XSSxVUy1XVixVUy1XWQorMSxUdWUgMjUgSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyLFdlZCAyNiBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuNCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzMsVGh1IDI3IEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsOC4yMzg3MzI3NDU0NTEzLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorNCxGcmkgMjggSmFuIDExLDQuODc4ODc3MjU0NzE5MjgyRS02LDQuODk2MzQwMTk2NDM0OTYxRS02LDMuNTczMTg2NTM1NjY5OTU4RS02LDQuMjM2Nzc4MzIwODY1ODA4RS01LDE2OS42OTE4Mzk5NzIyODU1NSw0LjQzNDc4MTIxMzg1NzQ0MzZFLTUsNi4zMzIzMzEzMjY3NDc0MzZFLTYsMS42NTEzMjI2MzQ2OTg5MDJFLTUsMS42MTE5NjM4NTA2NzgxNzY2RS04LDEuMTcxMTE4NjAzNTgxODczMkUtNCw3LjY5ODg3MzY4MTE1OTg2MUUtNSwxLjgwODg5MjEwMTEwMjY5MzVFLTUsMi45NDMxNzczMzA2OTY1NzFFLTYsMy42MzQ5Nzg0ODMyNzkyODhFLTYsOC41ODk0ODM3MDg2NTk1NTRFLTUsOS4wMDAxMzE0OTk2MTk4MkUtNiwxLjM5MDMxODgyMTIwOTkyNzRFLTYsNC4zNjg0MjIwMzUzMzc4NTg1RS02LDguMjI5MDc1NDU3NzEyMDlFLTYsMi41ODIwOTc0MjgxNDQ2NTk2RS01LDEuOTA3NjI0ODg2OTU2NzMyRS01LDIuMTQ5Mjg1MTM0MjM3NTY4NkUtNiwzLjUzMDA2NjUwMjY2NDMxN0UtNSwzLjE3NTU2ODc4NTgzNjAwOEUtNSwyLjM0NzQyMjM1NzU1MDA5NUUtNSwyLjMwNjQ1MTYwOTY3ODY5MUUtNiwyLjU0NTU1OTU4MDg2MjYyRS02LDMuNzY2MDg0ODc2NDY3NzgwNkUtNSwxLjIxNDM0NjEwMDg0NDIyNjJFLTYsNC4yMjMzNDUyODg3NzY4MjJFLTYsMy42MjU1NzUzNjA4MTY5OTlFLTYsMy4zNjUxMDg4Njg2MTE1ODNFLTUsNS44MjA1MzI4MDQxNTcxMTZFLTYsNC40NTgxNTQ2ODk2OTIyNzdFLTUsNy41NzE5MzE1Mjc5MTg5NTVFLTUsMy40MTgwMzUwMTUwNDIxODM1RS01LDYuMzQ1NzY0MzU4ODM2NDIyRS02LDEuMzkxMzkzNDYzNzc3MDQ1OEUtNSwzLjg4MTM0MDI5MTc5MTI2OTRFLTUsNC43OTQyNDkxNTI1NTg2NzdFLTYsNS43NjgxNDM5NzkwMTAwNzVFLTYsMS4xNzQwNDcwMDQ1NzcyNzIyRS02LDIuMTAwNTIzMjI3NzU0NTU0RS01LDEuMDc2NjU3NTIxOTMyMTMyMUUtNCwxLjkwNTA3MjYxMDg1OTgyNDhFLTUsMi44NzA2Mzg5NTc0MTYwNTI0RS01LDEuMjU0NjQ1MTk3MTExMTgwOUUtNiwyLjkyOTYwOTk2ODI4NjY5NTdFLTUsOS44OTIwODQ4MzAzMjg0MUUtNiw2LjU2ODc1MjY5MTUxMzU2OUUtNyw4Ljc1ODMzNjkyMjAxODA5NEUtNworNSxTYXQgMjkgSmFuIDExLDIuOTY1OTIwMTUwNDkzODEyN0UtNCwyLjk3Njc3OTU4MTI3NTM5MTZFLTQsMi4xNzIzNDg2NTUwOTc3ODE3RS00LDAuMDAyNTc1NTY2NTM3OTg3MjIwNCwzNDk1LjA3NjgxODA1MTY1OCwwLjAwMjY5NTg2NjA4Njg2NTI0NjIsMy44NDk3NjkxNzMwNjY1MjVFLTQsMC4wMDEwMDM1OTY5OTExOTI5MTc1LDkuODAwMjI3MDQwNjE0NzY3RS03LDAuMDA3MTE5MzkxMjQ0MDQzNTUxLDAuMDA0NjgwMTMyMjg3MzM1OTQxLDAuMDAxMDk5NTQ4MDMzMjA2NDYyNCwxLjc4OTMzNjUzNTAyOTMzMzdFLTQsMi4yMDk4NzU3MzcyNDAyOTg0RS00LDAuMDA1MjIxNjkxNzE3MjQwMTA4LDUuNDcxNjk1NjM4MTA3ODhFLTQsOC40NTI2NDQ0MjY0OTQxNjlFLTUsMi42NTU4MjcwNDg3MzcyMzVFLTQsNS4wMDI5MDQzNjE1ODY2MjZFLTQsMC4wMDE1Njk3NTUyNTY3NjI0MTIzLDAuMDAxMTU5NzI0MzQ2MzY2MjkzLDEuMzA2NjcwMjk0ODM2NzM2MUUtNCwwLjAwMjE0NjA3NTI1MjczMzE5OCwwLjAwMTkzMDQ5MjYxNDkyODY0MDgsMC4wMDE0MjcwODUxMDc0MTcwNTQyLDEuNDAyMjM1NTg0MTQ4NzEwNEUtNCwxLjU0NzU2NjEwODg4Mjk4MDRFLTQsMC4wMDIyODk1MjkxMTM3NzY5OTEsNy4zODI2Njg2MjQ3NzU1N0UtNSwyLjU2NzU4MjUzODQyNzg4NEUtNCwyLjIwNDE1NTc2OTkyNjE0NzhFLTQsMC4wMDIwNDU3NzkzOTM0MDA4MDksMy41Mzg1NjA4OTI0NjMwMjlFLTQsMC4wMDI3MDk2NzYzNzYzOTMzNzUsMC4wMDQ2MDMyNjk1NTY3Nzc3ODgsMC4wMDIwNzc5ODAzOTI4MDE5NjA4LDMuODU3OTM2ODA4OTE2MzJFLTQsOC40NTg4MTAyMDUyMDUwOTJFLTQsMC4wMDIzNTk2NDA2MTExOTgzMTA0LDIuOTE0NTg4MzczMDU0MTgzM0UtNCwzLjUwNjc4NzA1NzA1ODkxNUUtNCw3LjEzNzY5Nzg4ODE5ODM4M0UtNSwwLjAwMTI3Njk5Mzg0MDcxNzgzMDYsMC4wMDY1NDUzMjI3ODE4NDk4NDMsMC4wMDExNTgxMDI4MDY5NjAzODMxLDAuMDAxNzQ1MTcwODczOTg5NDU2Niw3LjYyNzY1MjgyNjQ3NzUxNkUtNSwwLjAwMTc4MTAwMTY0NTM5NjM0NDIsNi4wMTM5MzgzNjMxMzI1NDVFLTQsMy45OTM1NzU3NjIyMTI3ODg1RS01LDUuMzI0Njc1NzE5NzQwODA2RS01Cis2LFN1biAzMCBKYW4gMTEsMC4wMTIwMjE3MjQzOTE5MTM3MTQsMC4wMTIwNjY3MzU3NzA3MTc5MjIsMC4wMDg4MDU4NTIxOTY2MTQ4ODQsMC4xMDQzOTQ0ODAzODMxMTEzNyw3MTk2OS4yODYyMjYyNTcxMywwLjEwOTI2Nzc2OTAwNzM4NjU1LDAuMDE1NjA1MzU4NTA4NjUzNDI1LDAuMDQwNjY4MDc3OTAzMzU2NzU0LDMuOTcyNjkzNDQxMjk5NjkzRS01LDAuMjg4NTcwOTUwMTEwNzU5NTYsMC4xODk2OTUzNzY0NzAwMTAyMiwwLjA0NDU2MzkwMTA2OTQ3MDk3NCwwLjAwNzI1MzMwMDQxMDQ2NzYwNiwwLjAwODk1NzgwOTUwMDI0OTkyLDAuMjExNjUyMzkyNDY2OTQ2MjMsMC4wMjIxODAwNzU3MTkxNzMyNTYsMC4wMDM0MjY0MDYyNTg0NTM2ODAyLDAuMDEwNzY1NzE4NTc3NTYxNDc3LDAuMDIwMjc5NjkyMTA4NzA4Mzc0LDAuMDYzNjI5NTk3MTA2MjIxMDgsMC4wNDcwMDkzNzY5NjE0OTMyLDAuMDA1Mjk2NzA3NzE4MTE5MDA2LDAuMDg2OTkxMTIyMzM1MjMxNjgsMC4wNzgyNDk2ODAwNDgyMzIzNiwwLjA1Nzg0NjQxMDExMzU0NzQ0LDAuMDA1Njg0MTUxNzU4MjA1MDIsMC4wMDYyNzMxMTMwMzE2MTc4MTYsMC4wOTI4MDQ3MzEzMzA3MTExNSwwLjAwMjk5MjYyNDc2OTM1NTg0MzUsMC4wMTA0MDc4MzA1MTA3NDYyNjUsMC4wMDg5MzQ2MDk2NjgyOTEzNTgsMC4wODI5MjUxNzM2MjU0NzUyLDAuMDE0MzQzNjEyNjUwMjQxNzM0LDAuMTA5ODExMjU3MTc5MDIxMzksMC4xODY1OTI0NDA2MzQwODU1MywwLjA4NDIzMTQ2MTExNDg5MTQ1LDAuMDE1NjM4NDcwNjM1OTIyMDg3LDAuMDM0Mjg3NTU0MzEzNTgxODIsMC4wOTU2NDg0NTI1MzI5OTA1MiwwLjAxMTgxNDEyOTg3NzQzMDMzMywwLjAxNDIxNTEyNjA1MDcwMjE3NywwLjAwMjg5MzMzNTg3MjE3MzgyODMsMC4wNTE3NjI4MzMxNjk5MDcwMSwwLjI2NTMwOTI2NjE2NDYxMjMsMC4wNDY5NDA3OTIxMDIyNTkzNCwwLjA3MDc0MDAzMDg0NjI1NTU5LDAuMDAzMDkxOTI0NjI2NDcwNTc4LDAuMDcyMTkxNjA2MjQ4ODc4ODQsMC4wMjQzNzgwMDIyOTQ2NDc3NywwLjAwMTYxODg1ODkzNzgwMDc0NTYsMC4wMDIxNTg0MDM3Mjk4MjkyNDc1Cis3LE1vbiAzMSBKYW4gMTEsNC4zNjEyMjQ2MzA1ODI1NjIsNC4zNzg0MzYyMjM0MTk3MDcsMy4xOTUxOTYxOTYyOTU4MjY0LDM3Ljg3MTU0MjQ5NDI2MjkyLDc4MzY2NDguNjUxNjYwNzc1LDM5LjYzNjk4NzY4NDkwMzA4LDUuNjYyMzAyMTI4MzA3MjUwNSwxNC43NDQxMjk5NDk1MDk3NCwwLjAxNDQxNTQ1NzY3ODg5NDEzLDEwNC42ODg4MDc3OTA2NzMwNSw2OC44MTQwNTk5MTEzNzIwNywxNi4xNjMzNDQ5NjE3MjI2NSwyLjYzMTg4MDMzMDU1NjEwMTQsMy4yNTAxODkzNzMyOTA3NDUsNzYuNzg0OTY5NDA1MjE0NzEsOC4wNDc5ODcyODg2MTE3NTQsMS4yNDMyOTk0MTcyNDAzMjc2LDMuOTA2MzYyMjM1MjI1NDUzLDcuMzU4MzU3NDYzMTEyOTM4LDIzLjA4NjA0NTA0ODE4OTg1LDE3LjA1NjE0Nzk5NjYzOTkzNiwxLjkyMTg4NTc3MDI2MjM5ODgsMzEuNTYyNTQ3Mjk5MzQxODQsMjguMzg4NDQ3NzEwMjc0OTYzLDIwLjk4NzcxMTg3OTU3MzM5MywyLjA2MjUyMjQ4NzA2NjYzNiwyLjI3NjA5MTkxMDQwMjgzNywzMy42NzA3MjQ4Nzk2MDMwMSwxLjA4NTg1MzI2NTI4MzExMzIsMy43NzYzNDM4MDA2OTA1MTk0LDMuMjQxNzU5NTE5NjkzODgxLDMwLjA4NjkxMzc0MTk5NzYxNiw1LjIwNDI3NTQ1MjY3ODk5NSwzOS44MTk3MjMxOTE2MTk4NCw2Ny42OTk0OTI5MDk0ODA5NCwzMC41NjE3NzI0OTM5MDQ0NTYsNS42NzQzMjAxMzk3NjI0NjcsMTIuNDQwMTg2MDU2NTA4MDc3LDM0LjcwNDA1MjM1OTYwMjgzNCw0LjI4NjMyODY5MzMzMjU3Myw1LjE1NzkzMTAwNjI2NzQxOSwxLjA0OTgzNzYwMTg5MjYzMTYsMTguNzgwNzY2NTc4Mzc0NDcsOTYuMjU2MTM0NTgzOTAyNTIsMTcuMDI4NzMxMzY4NDkwMTg1LDI1LjY2NTg1NjQxMjA4Nzk0OCwxLjEyMTg3Nzc4NTIxODExNTksMjYuMTkxNzkzMTU5NDkzMTM3LDguODQ1NDAyNTA4NTQ2ODc2LDAuNTg3NDE4ODc3OTU5ODEyMiwwLjc4MzE2NDY4MTQ3MzI0NworOCxUdWUgMSBGZWIgMTEsNjY0NDIuMzE0NzI5MDYxODIsMjE4NzU4LjUyNzM3NjMwMjUyLDE0NTk1Ny44Mjk3Mzk2MjI0Miw1NTI4OTAuOTQ4NjI2OTk3Myw4NzMyNzYwLjAxMTYyNzE0Nyw0OTI0MzYuNDI1NTIyMTUxOSwyMTgwMDUuNDEzOTAzOTk5OCw4NDIwMS4yNjAwNjU5MjUxOSwxMjYyLjYwNzIwOTk4MjU5MiwxNjY0OTk2LjI4MTM1NzA3MzUsOTE0MzQ0LjAwMTc1NjA5NTEsMTUyNTY0LjkwNTAxNjQwMzAzLDEzNjcxMi43MzMzNTAzOTIyMyw5ODI5NC4yNDYxMTA1NzQ4NSwxMjcyMzcyLjA3NzYyMjk3LDM0OTUzOS4zMDc0NTM1ODUsODExNjAuNDM1MzU3MDE4NTUsMTk2NzYyLjU1NDc3Nzg0Nzk1LDI4NDgyNi4wNDMwMDY1MDgxNSw1NTA4ODUuNzE2NjE0NTQ3Myw0NDA3MjUuNTM3MDU0NDExNSw3ODAyNC41NDM5OTI0MTcxOCw4MjI5NDcuMjI0NjUzMjgwMyw0OTM4OTQuODk1NTYyMDQ2OSw0OTA1NzguMDk5NTgyOTgzMSwxMTY2NDIuNDUxNjEyODE3OTEsNjg2NDkuNDM0NDM2NzEwMzYsNzMxNTI1LjE5MTczNjIzODMsNDE0MjAuODAwNzE2MzIxNjUsMTIzNTU1LjAwOTkzMTYwNDg0LDk1NDM2Ljg4MzA3MDQ5MTUyLDcyNTk0NS42NTUwMjc1NTQsMTQ1MDgwLjU0NDc2MTE2OTczLDI3NzIzMy43OTgwOTcyODcxMywxNjM1OTI1LjEyODA1Mjk1OSw4ODUzMjQuNTU5OTgyMDAwMiwyMTk3OTYuMTA0MDQzNTQ5MTYsMjk2ODU3Ljc1NjUyODc4ODUsOTc1MDYxLjg3MTQxNDc4NTYsOTQ1NjguODIyOTc0NjIxMzUsMjI3MzE3LjMxNzc5ODA0NDc0LDQ0NDU3LjU0Nzg3MzYzMTY5LDQ3NzUzMy40NTg0NjMxOTc5LDE5NTU1NTAuNzY5MzAzNjg3OCwyNDI4NDAuMTY0MzQxODc2OCw2MTM1ODkuNzI5NDU5NjgzNiw0MDc3OC44NzMyNDY2MTY3MSw1NDYxNTAuODk1NzIyNDAzNSwzNDIwOTEuMzM0NDA2NjkyMDcsNDE2OTAuODUyMDM0MTcxNDc2LDMwOTM5LjM0NzQzNjU2NjE4MgorOSxXZWQgMiBGZWIgMTEsMTk1NzE1LjU2NDc1MDE5MDM2LDE0NzU4NDYuNjA3Mzg2NjA2Nyw4ODI1NTQuOTI3NDg1NzMyMSwxNTk4NDM2LjQ3NDU5NzcxLDYwMzQzOTYuNDgwNDA3NzUsMTMyOTc3Ni43MzMyMjAxMTc0LDExMTM0MTMuMTUyNzg1ODg0MiwxNzAxNjguNDUyMjc0MDk2NzIsMjM1NzA3Ljc1Mzg2Mjg0MTM3LDQ5OTk1OTEuNTE1Mjk1ODAyLDI1MzkwNTcuOTQ1NDI4Njc4LDM2OTYyMC42NzAzNDQ1NDY4LDk3MzM4NC44Mjc2MDAxMzUsNDE3NjU2LjMxMzY4MDI0NTgsMzg5MjU4My40OTIzNjMyMzQsMjAwMTQ2OC43OTg4NDY5NDE0LDkwNDg3Mi44NTc1OTY4NjQxLDEzNDE5NzMuODY5MDE3MDk3NiwxNDYxNTE1LjQ3NTcwNTQ1MTMsMjAyNTE5Mi4yNTQ5NDkwNywxNjk2MDc0LjU1NTEzOTc4NDcsNDE4MDUzLjM0MzQ0NDAzNjcsMzE4Mzk3NS4xNjU2NDMwNTk2LDE1NDU0OTQuMjIxNTQxMDUwOCwxNzgyOTIyLjU2OTYwMzMwNjcsOTUwODk0LjQ4MTg5OTg4MDcsMjkxMTY2LjEyNTM3Nzc1NTAzLDI1NTU4MzAuMDYyOTQwMTkyNCwyMDk4NTMuMzQ1MTQyMzk3MzYsNTU0NjEwLjgxODMyMTgwOCwzOTgzMzMuMTA1NDUzNDUyOSwyNjg1NDEwLjQ4ODU2MzAzNjUsNTg0NzE4Ljk5NTk5MDUwNTIsNjAwNDc3Ljk4MTEyNTcwNSw2MDU2NzE1LjU5NTcxMDUyNCwzNjU2NDczLjgwODQxMDc5NTQsMTEyODUzMS43NDYwNjA3MjUzLDEwOTEzMzYuMDE0MjU1NDc2NCwzOTQ5MjEzLjQ4MDQzNzk3MDMsMzMzMTExLjk1MTc3NzU1OTMsMTMyMTcxNS4xMDYxODU0MjEsMjQ4MTA3LjYzNDE0MDk0OTQ2LDE4MjA0MDUuODQ0NTU3Nzg2NCw2NTk5NTI1LjU5MjkxNjkxMyw2OTQ5NjIuMzcxNzg0NTg1OCwyMjU4MDYzLjYzNjkwNjg4LDE5ODQyNS4zNzI0NDEyOTU3LDE4Njc4MDUuOTY0MTQ1NzgxLDE3NTQwMzAuNjg1NjI3MDUwMiw2MDk0MTAuMjg5Njc1MTMxNywxNjE2NjcuMDI0OTY0NjkxNzUKKzEwLFRodSAzIEZlYiAxMSwxNDU3MjYuMDA4NTkyNzIzNTUsMTEwMDczMC40MDI4ODM0MjM1LDY1Nzc2NS40MTc1OTI4NDU5LDExOTAxNDkuODUxNzMyNjk1LDQ0OTgxMDIuMzQ1MTMxMTE5LDk5MDA2My41NDk3MTE5Mzc3LDgyOTM0MC41OTI0NzE2NjUyLDEyNjY2MC4zMTE0MjQyODc5NywyMTg2NTAuNzQ2MDYxMTgyNzgsMzcyMjY0NC40OTM5Mzk4MzE0LDE4OTA0NTQuOTY5OTk5OTI4NSwyNzUxNjguNjAxNTk2NDMyMSw3MjYzMjcuNTg0MDkyOTI2NywzMTEwMzEuNDMwMDM1Nzk1NywyODk4NDEwLjc0MjYzNTE1LDE0OTEzMjEuMjYwNTcyMzg4NSw2ODA4NzAuMDMyNTc0NjUzMiwxMDAwOTczLjY2OTk0ODU0MzEsMTA4ODYzOS44NzY0NTEzNDEyLDE1MDgwODYuNzUzNjEzODg0NiwxMjYzMDI1Ljk2OTMyMTQ5ODIsMzExNDI4LjMxMDI4NzcxMDQsMjM3MTAzNC4zOTA3NTQxODkzLDExNTA3ODcuMzUxNzQ1MTc2OCwxMzI3NjcxLjU2MTcxNDE4MSw3MTA3MTYuNzY0MjQyNzMyMywyMTY4MzMuMTQwNjM0MDYyMiwxOTAzMTk0LjczNzUzMTkxNDYsMTU2MzA5LjUzODI2MzkwMjM2LDQxMzAzNy4xMjU3NTkwNjAxNSwyOTY2MzguNjY3NTg3ODUwOSwxOTk5NzMxLjgzNDkzMTUwNjMsNDM1NDMzLjcwMjAyNjY5OTQ0LDQ0Njk4MS43NjEwNjM1NzM4LDQ1MTAyMjYuOTY3NzM0NTA5LDI3MjI5NjMuMDAxODc4NTc4LDg0MDYxMS4yMDI1NzMxMjYyLDgxMjY3OC4xMDAyODUxMDc1LDI5NDA5NDAuOTQxNzcxNTgzNiwyNDgwNTIuMTI2ODgyNjEwNiw5ODQ4ODkuNTA4ODY0Mjg5NiwxODQ4NTAuNzc3MDI4MTgzMSwxMzU1NjA3Ljg1NDg0NTYyNjMsNDkxNDI1MC4zNjM0NzQ4Nzg1LDUxNzQ0NS4zNjI4NjcxODExMywxNjgxNDk4LjIzMjYxNTI4NzQsMTQ3Nzg3LjIxMDcyNTczOTEsMTM5MDg0NS43MjE3NDYwNzI2LDEzMDY1MjMuNzYxNDU3MjExLDQ2Mjg1Ni4xMjk3NTgwOTI3LDEyMDQyNS45MTU3MDgyNzkwOAorMTEsRnJpIDQgRmViIDExLDg3Mzg0LjAzMTgzNjcyNzQsNjYwMzMxLjU0MTQwMzg2MjUsMzk0NTg1LjMwOTQ4NDMxMjgsNzEzNjU2Ljk5MTA5MDUyNCwyNzA4MDI4Ljc5Mzk3MTgwNiw1OTM2NDQuMDU5NzkzMjE1Niw0OTc0ODUuMTc3NDIxOTI3ODYsNzU5NTcuMjQzOTg2ODQzNDYsMTMxMTg5LjcxODE1Mzg0OTMsMjIzMjMwNy4wMDEzMjMxNTg0LDExMzM1NDYuMTcyMzI4OTY4OCwxNjQ5ODEuNTgwNDQyMzUyOTIsNDM1NzMwLjkwNTA1MTIwNDE0LDE4NjU1OC45NzUxNDE3MjE5NSwxNzM4MDc4LjU4NDc2NDE4MDUsODk0NjExLjcyMTMxMTAxMzcsNDA4NDg1Ljc3Njg1MDAwODQsNjAwNDg4LjU0Nzg1NDI3MSw2NTMwMjguNTk0OTA3MDg1MSw5MDQ0ODEuMzY3OTg1NzY1Nyw3NTc1MjguNDE1OTI4ODY3OSwxODY4MTUuMzM5OTg1MzgyMDcsMTQyMjA4Ni40MTg5MjM5MTM3LDY5MDEwMS43MDYxNTA4NTI1LDc5NjI3MC4xNDc1NTAyMjAzLDQyNjM3NS44MDI2ODI2MDY1LDEzMDA1OC4wMTIxNDM5NzEzNSwxMTQxNDA2LjYyOTMzMDc4NzgsOTM3NjIuOTg0MTEwMjA4NywyNDc3NDkuNTg0NTI1MTE1MDYsMTc3OTI0LjM3MDE4MjM3ODksMTE5OTM1Mi43NjI1Mzc4OTMsMjYxMTY4LjY1ODk1NTQxODU2LDI2ODAwOC40MzI5NTk1NTEyLDI3MDUwNDAuODY2NTUwMTEsMTYzMzIyOC4yMTcxNTkxNjA0LDUwNDI0Ni44OTMyMzE0NzM1LDQ4NzQwNy4xMDk5OTQ4OTg1NSwxNzYzOTUxLjI1MDQwMDAwODQsMTQ4NzY1LjY5Mzc4MDM5OTI1LDU5MDgxNi43MjkwMjE0ODY3LDExMDg4Ny4xODA1MTI5NTQ2Niw4MTMwNTEuNDk1MTUxNzA2LDI5NDcxNTMuMDgyOTA4NTM5NiwzMTAyNzYuMjQ4MzAwMDY5MSwxMDA4NDg2LjM2Njk2MjUwNDUsODg2NDkuNDQ1NzU5ODEyNzIsODM0MTIwLjc5NjMwMzA3MjQsNzgzNzI3LjYyMzM3OTYzMSwyNzc2OTUuMjM2NDg0NjA2NDYsNzIyMzguODMxMjMyNjgzODIKKzEyLFNhdCA1IEZlYiAxMSw1MjQxOC43MzI5OTQ5NjI4NywzOTYxNTQuMDE5MDY3MDc2MTUsMjM2NzIwLjc3OTg2NTczNTQ0LDQyODEwMS43NDMzNzczMzY1MywxNjMwODQ4LjcyNjEzNzYyNTgsMzU2MTI1LjM1MjE4MDgyNzksMjk4NDQ0LjM3MTc0NzYzMjksNDU2MTUuOTg3MTk2NjEzMjU2LDc4NzEzLjQ1NTg1Mzk3ODM2LDEzMzkwNzguNDU1OTU1ODUyNSw2Nzk5OTUuODgwODQzMjAwNyw5ODk4OC44MjE4MzE1NDE3NSwyNjE0MTAuNjQxOTk3MjIxODYsMTExOTEzLjcwNTk1NjU5MzkxLDEwNDI2MDUuMjAxMTgwNjg1OSw1MzY2OTMuNTg1MzY2ODE2NSwyNDUwNzUuMTM3MTY0NTAyMzgsMzYwMjUyLjc4ODcwNDg3NzcsMzkxNzU2LjE0OTEyMDY4MjA0LDU0MjU2Ny44NzE3MTgzOTYxLDQ1NDQxOS42NDk1ODQ3Njk3LDExMjA3Mi42MjA1NzI1MTYzLDg1MzA2OS45MTE0NDcyNDY2LDQxMzk2My43ODMzNTYxMzU1LDQ3NzY1NC42NzQwMjU5ODIyNywyNTU4MDEuOTIzNjEwNTc0NjIsNzgwMTkuNjYzODI4MjAzNyw2ODQ2ODUuOTc1MTk0ODIxMyw1NjI0OC44OTgwNjE5OTY2MywxNDg2MjIuNjgxNDQzNzMwOTIsMTA2NzMzLjU0MTIwMzA3ODE3LDcxOTQ1Mi4wNjkwNTMxNTA0LDE1NjY2OS4wOTQ0NTczMDMyNiwxNjA4NzIuOTI3NDA2NjY5ODYsMTYyMjY2NC44MjY5ODM5MDIsOTc5NzQxLjIzNTAxMzgyNTUsMzAyNTAxLjA2MjM2MjczMzUzLDI5MjM3OS4wODk1NjM0Njk4NywxMDU4MTU1LjAzMTYwMjQ2OTUsODkyMzguOTIwMzc3NTUyMDEsMzU0NDQyLjM5MTU4OTQ1ODMsNjY1MjIuOTI2MTQyNDkwNjksNDg3NzI1LjQ1MjczNjU2MTQsMTc2Nzg3Ny4zMjMzNjU5OTE3LDE4NjEyNi40MTAzOTUyMzAzNCw2MDQ5NTcuMDczOTUwMDUzNSw1MzE4MC44NDk2NDgzOTIxMiw1MDAzNTUuNzY5NzEwNDg3Nyw0NzAxNjMuMjkwMzc5MDMxNCwxNjY2MDguNjM0NjQ0MTMzMTgsNDMzMzYuNjkzMzUwOTQxMDk2CisxMyxTdW4gNiBGZWIgMTEsMzE0MzYuNjA1NDY5OTc3NDI1LDIzNzY1Ny43ODY4OTE1OTIyNiwxNDIwMDguNjIyNDE4MTMwNjYsMjU2NzM5LjM2MTA4NTA1MjM0LDk4MTg4MS44MjU3NzA1NTg4LDIxMzU2OS4xMjYzOTExNzM3MiwxNzkwMjguNjY1NTM0OTI4OSwyNzM2Ny42NTI4OTMyMTI1MjIsNDcyMjcuODIzMDg2NDQwNjk0LDgwMzA4MC42OTYwOTg2NzM1LDQwNzc5OC4wMDM4MzIxNDc5LDU5MzY0LjcwNTg1NzkwMDI1NSwxNTY4MjUuMDI2MjY0ODM3MjIsNjcxMjkuNTMxNzczOTE2NzgsNjI1MjgzLjgwNDI5NjkxNjcsMzIxOTU3Ljk3NzE3OTc4ODA1LDE0NzAzMy4wOTk3MTgyMDM3NywyMTYxMjAuNjE1OTIwNTc0NCwyMzUwMDQuMTk3MjcwMDkyNjcsMzI1NDI3LjgxOTI3NDUyNTEsMjcyNTYzLjU0MTg0ODk2NDIsNjcyMzAuMjU1Mjc4NjQ4MDcsNTExNjc3LjYyMTA4OTU5NjI0LDI0ODI3MC4zMzc5NjkzNzk4OCwyODY0OTEuNjg5Nzg0NjQxOTYsMTUzNDYzLjM5ODAyNjA3Mjk3LDQ2Nzk4LjczMTU3NDA1NzY0NSw0MTA2NTcuOTcwODMwMjk1NCwzMzc0Mi4xMDE3OTA4MzA0Myw4OTE1MC43NTk5NTkxNTA0OCw2NDAyMS44MDczODE0MTE1Miw0MzE1MjIuOTIwNzEzNDA0NjYsOTM5NzMuMDk3OTM0OTU1NTYsOTY0OTMuMDc3ODc1MjQ4Niw5NzMyNjQuNzk1NzcwMDY3LDU4NzY3My44ODU0MjU3NjY4LDE4MTQ2Mi40NTUxNjE3NjQwNSwxNzUzNjYuNjEzMjU5MTcxNzIsNjM0NzAyLjkxNTQxMzY1MjMsNTM1MjMuNTY3NTAyMTgxOTU1LDIxMjYyNy44MDYzNzc3MDMwNiwzOTkwNi4yODY2NDk4NTgzMiwyOTI1MzkuMTg1MjAxNTE3OCwxMDYwMzA5LjU2MjY2MjcxMDcsMTExNjIyLjQ2NDA3MjYzNzE0LDM2Mjg0OC41NTQ3ODc5MjUsMzE5MDEuMjU0OTg4ODA1MDY3LDMwMDA5Ny42OTA2Mzk4ODkzLDI4MjAzOC41MTIxODU1MTAzNiw5OTk1OS4wNDMzMzQ4MTgwNCwyNTk5Ni42ODA5NjAzODIzMDYKKzE0LE1vbiA3IEZlYiAxMSwxODg1Ni4zNzA5MTMzNDc2OSwxNDI1NzcuMDQwMzQwMDUxMDMsODUxOTMuMTYyNzc0NzYzNDIsMTUzOTk4LjMwMzgxNTYwMzAyLDU5MTIzMy42NDMxMTAwNDgsMTI4MTA2Ljg0ODcwODk2MTAzLDEwNzM5OC41MDUzNDAzNzUxNSwxNjQyOS45NzM3OTY0MTA0NTMsMjgzMzYuNTUzODUzODA5OTQsNDgxNzA1LjA4NDQwMjM4MTQ0LDI0NDYwOS40NTY3ODA2MzU5NiwzNTYxMy40OTUyNDc4MDM5Nyw5NDA4NC4wODg1NDE0NDk3OCw0MDI2OC44NTUyNzgzMTIzMTYsMzc1MDU4Ljc2ODQyMjE5ODY2LDE5MzE0NS42NzA5NTUyMjkzNSw4ODIxMy41NTkyNzU0ODg5MiwxMjk2NTYuNTM4OTA2NDA0MjcsMTQwOTc4LjEyNTM4NjU1Mjg5LDE5NTIwNS43MTU4MTI1NzE1NSwxNjM0OTcuNTQ3MzUzMzQ5NSw0MDMzMS41NDY3OTc5OTk4NjUsMzA2OTMwLjg2NjM5Mzg5MzIsMTQ4OTE4LjE2MTk1NjU1MDYsMTcxODQ5LjU5MjgxMzEzOTQzLDkyMDY4Ljg2Mjk3OTMzNjM3LDI4MDczLjA0NTU4MzE4OTMwNSwyNDYzMjcuMTA0OTc5ODM3NTUsMjAyNDEuNzAxNDc3NzUyODQsNTM0NzkuNDc1MDczODY5NTEsMzg0MDQuNDQwMjUzNDQ2NjEsMjU4ODQ2LjYwNjk4MTc2NDMsNTYzNzAuNjEzNTAwNjgzMzM2LDU3OTA2LjMwNzM2NDQzMDc5NSw1ODM4MDcuNTc0NTcyNTI1MywzNTI1MjMuOTQyOTAzMDEzNCwxMDg4NTguNjUyNTQ3MDA3MywxMDUxOTIuNDk4NDkwOTU4MTUsMzgwNzMyLjgyMzUzMDE3MjUsMzIxMDUuMzg2NjM4NTc5MjI4LDEyNzU1Ny44MTYwNjIyNjI1OSwyMzk0MC4wNDYwMjYxNjQ3OSwxNzU0NzkuNDg0NzQ3NjQ3MzcsNjM2MDA1LjcyNzAyMTczMTEsNjY5NTMuOTA2MjkzMzU0NzcsMjE3NjUyLjM1ODY3MTc1NTY1LDE5MTM3LjIwOTMyMDY3NzgzLDE4MDAwOC4yMTUyNDYxMTI2NywxNjkxOTMuODA0MDY0NTIyNCw1OTk3Mi4xNjMwMjY5MzI0NDUsMTU1OTUuMzcxNzA3MTUyNDMKKzE1LFR1ZSA4IEZlYiAxMSwxMTMwOS4yMzc2NzQwOTAxNDksODU1MzQuMzkzMjExMjMzNDcsNTExMDcuNzc5MDU2NzAzODksOTIzNjEuMTE1MzMwMTQ4MzEsMzU1OTU4Ljk3Mjg3NTkwODcsNzY4MzIuMTI4ODA4MzA5NzksNjQ0MjYuMjc0OTI2MzY3Njc0LDk4NTkuMTQwOTk1NzUwMTcsMTcwMDEuODQ0MTQ2NDg2MSwyODg5MDcuNTQzMjY2NDk3MSwxNDY3MDQuNjQwMjIwMTE2NzQsMjEzNjAuMjgwOTczNjc3ODQsNTY0NDMuMTQzNzY1NjMzNjcsMjQxNTUuMDczMjk3MzQ3NDk1LDIyNDk0Ni43MTEyNTQ4NjA2NSwxMTU4NjcuNjM3Njg5NjQ5NDIsNTI5MjMuOTk4MDcxODE5MjI0LDc3NzgzLjMwNzg2NDQ4MDIzLDg0NTcwLjE0NDU1MjkxMTY5LDExNzA4Ni4zMjAxNDUwOTU5OSw5ODA2OS4zNTY3NjAzODgzNCwyNDE5NC40MTY2NjY2NTMzOSwxODQxMDQuMTY2MjU1MjU1MTQsODkzMTYuNDcxMTYzMjI4ODgsMTAzMDc2LjU3MzY0NDYxMDAzLDU1MjM1LjIyMTI5MzkyNDc2LDE2ODM5LjQ2NTk2OTc3ODQ1LDE0Nzc0Ni4xNTE3NjY1MTIyOCwxMjE0Mi41NzYwNjYyNzQ2MzQsMzIwODAuMDI0MzcwNzg4MzY0LDIzMDM2LjU1ODgyMzQzOTU2LDE1NTI1OS4xNzM0NTgyNTYzOCwzMzgxMi45NDcwOTgxNTA0OSwzNDczOC4zNTY2OTUzODA1OCwzNTAxNzQuNjI4NzM4MDM0NzUsMjExNDU3LjQ3MjY0NjQ4OCw2NTMwMi4yODM3MjM3MzY3LDYzMDk1LjUwMTkzOTYzMjAzLDIyODM3Ni41MDkzODA3OTg3LDE5MjU2Ljc2OTUwNDg5MzA0NCw3NjUyMS44OTczMjU3MjQxNywxNDM2MS40OTI3MDEzMTY4MzQsMTA1MjU1Ljk2MzMzMTk3NzAxLDM4MTQ2OC4yNzU2MDIzNDExLDQwMTU1Ljc5NzU4NjYzMzU1NSwxMzA1NTAuMDk3NTkxNDM2ODgsMTE0NzkuODgwMzI5MzY5MzI3LDEwNzk2Ny4yOTkxMzYyMjYzLDEwMTQ5Ni4xODIyNzc3MTE4NCwzNTk4MS4xNzEwMjI4NTgzNCw5MzU1LjQxNzg2MjkxOTA0NgorMTYsV2VkIDkgRmViIDExLDY3ODMuMzI1Njg2NjQzMjc1LDUxMzE0LjA1NjI4OTQ4NDE3LDMwNjYwLjE3NTk4OTA1MzA1Miw1NTM5OC41ODg0MTc5NDIyNCwyMTQzMTcuNzg1Mzk0Mzg3LDQ2MDg0Ljk0NzA1MDM0NjYxNSwzODY0OC43NDQzNjI3NzQwOCw1OTE3Ljg3MTI4ODQyODE1OTUsMTAyMDEuMDU1MjY2MzQyMzk1LDE3MzI4OC4wMzIyNTA4MjAzNyw4Nzk5NC41OTg2MDY1NDY2NiwxMjgxMy40NDcxNTcyMTk0MywzMzg2MS44MTIyMzIxNjI4OCwxNDQ4OS42OTExNzQ3NTIzODUsMTM0OTI0LjI4NjU4NzUxMjUzLDY5NTA5LjY4MTU1MzExMzc3LDMxNzUyLjA2MjU0NDk0NjE4OCw0NjY2NC4wNzgzMjU1Nzg2MSw1MDczMi45MjcxNTI4MTg1Nyw3MDIzMi4zMjQ0MzMyNzI1Miw1ODgyNi4xNzMzNzM5MjU4MDUsMTQ1MTQuMTcyMzU4NDkxMTQ1LDExMDQzMy43MDI4OTY1MjExLDUzNTcyLjY5NTM4NTM4MDMzLDYxODI4LjU4MDExNTUxNTQ0LDMzMTM3LjcxODQ1MDY0MDg5LDEwMTAxLjMzNjY3NDU3NDE4Niw4ODYyMS43MTU5MTY4NTA2OCw3Mjg0LjIwODQ5MTQxNDA1MiwxOTI0My44NzE1NTY5MzMxNSwxMzgxOC42NjI1MjIwMzM2MTQsOTMxMjkuODc0ODk2NTQ1MzEsMjAyODIuNzQzNDgzODAxMzU4LDIwODQ0LjQ4NDM5MjIzNTUzMiwyMTAwNDcuMDI5NTkzMzc0NCwxMjY4NDQuMDMwMjkwNDM0MTQsMzkxNzQuMzAzMjM2NDAyNjEsMzc4NDYuODEwNTc4OTIzMzYsMTM2OTkyLjE4MDM2OTA4ODQzLDExNTUwLjcwNDg2MDQ1ODEyOSw0NTkwNi4wNzY2MzYyNzA0OTYsODYxNS40OTk3MTgxNzAwOTgsNjMxMzYuODEzNDE2NDIyMTQsMjI4ODExLjU4NjY4NDM5MjIsMjQwODUuNjM3MzU1NTY0MDc1LDc4MzA4LjM3ODQzNTk0OTU1LDY4ODYuNTk1Mjg0OTE5MjA1LDY0NzYwLjk4Nzc1NjAzOTM2LDYwODg2LjcwNTcyNzg4NjIzLDIxNTg3LjQ5NTQzMzUwMjExOCw1NjEyLjI2MTA5ODcwNzA2OAorMTcsVGh1IDEwIEZlYiAxMSw0MDY4LjQ3MDcyNDcwNTEzMzgsMzA3ODQuMjgzMjYyMTE5OTYzLDE4MzkzLjI2MzMxNDc2ODQzLDMzMjI2LjYxNDg2MjE1OTk3LDEyOTAyNy42MzQ2MDQ4MDYyLDI3NjQwLjU5NTA0NzQ5MDQxLDIzMTg0Ljc3NDgxOTkyMTA1NSwzNTUxLjQwMTU5NDUzMDk2Miw2MTIwLjYwMTc0MjQ4NDU3OTUsMTAzOTM0LjI1MzM3NTkzNDI4LDUyNzc2Ljc3MjcxNzk5MjY1LDc2ODUuNjk2ODA0OTQwNjI4LDIwMzE0LjUyMDg3MTYxMzAwNCw4NjkxLjY1NTUyNzE0MTI4NCw4MDkyNC45MDIwNDE2NzA5Miw0MTY5OC44OTc3NTA3NTI0NiwxOTA0OS43Nzc1NTExMTUzNTYsMjc5OTQuNzIyMjI5MTM5MTM3LDMwNDMzLjkyMzMxNzk0MDM4Miw0MjEyNi42NzU0NjkwNjc5NywzNTI4NS42NzAxNjYzNjIxOSw4NzA2LjkyODU4MjgxODczMSw2NjI0MS41MTkyOTAyMTM1OCwzMjEzMi4wMzc2MzkyNDYxNzcsMzcwODUuNzg2MDcxMDIzOCwxOTg4MC40ODY0OTg1NzY5ODIsNjA1OS4yOTI5ODA4MjUxMDksNTMxNTUuOTM0MTM3NjQ5NDYsNDM2OS42NzMwNzE1MjAxODQsMTE1NDMuNjY1MTkwNjA1NTM2LDgyODkuMDg2ODkwNDE1OTE4LDU1ODYxLjE5MzM3MjA3NjU5LDEyMTY2LjM5NTc4ODgwNDU4NCwxMjUwNS42NTM0NzIwNTc5NDIsMTI1OTkwLjUyMjIwMjMxNzIsNzYwODYuNzYxNTkwNjU0NzEsMjM1MDAuMDgxNjg3MTM0OTEsMjI3MDEuMjMyMzM0OTgzMzM1LDgyMTczLjUwMjYyMzM0MDExLDY5MjguMjE2NDU2NDc4MzM0LDI3NTM5LjE3MTMwNTY1OTcwNyw1MTY4LjQxNDAwMTk1MjcxMiwzNzg3MS4xODI1MzY2Mjg1LDEzNzI0MS4wMTUwNzg3MjAyMywxNDQ0NS45MTc3Mjg0MzU2ODMsNDY5NzAuODY0MjU4NjQ4NDM1LDQxMzEuMTA2MTM4NjM5MzA4LDM4ODQzLjc4NDEyMDMyMzk0NCwzNjUyNS4wMTU4OTEzMjUyMTYsMTI5NTEuNzQ1MzU3NTAxMDU1LDMzNjYuNzI2OTY2NjMxMjkzCisxOCxGcmkgMTEgRmViIDExLDI0NDAuMjU5MjMwMjgyMDkzLDE4NDY4LjE2NjEyMzM4MDIyNiwxMTAzNC4zMTYwNzIyNTkxMTgsMTk5MjkuMjQxODkxNjc4ODYsNzc2NzkuODE5ODY4MzA1NjEsMTY1NzguOTY1MTQwOTQwMzY3LDEzOTA4LjI5NTQzNzMxMzkyNiwyMTMxLjUxMzgyNTIyODY1ODMsMzY3Mi4zNDI0NjkwNjQ2MDYsNjIzMzkuNjA5NzI5NjI3MzcsMzE2NTUuNTE3ODc1ODE3NjcsNDYxMC4zMjg0NDQwMDg5OTIsMTIxODcuMjI0NDk3NzczNzEyLDUyMTMuNzYzOTk1OTk3ODAwNSw0ODUzOC43NDkzMjg0MDg2MiwyNTAxNS4zNTIyNTMwNDU5MDUsMTE0MjkuMDE0Njk1MzI5MTUsMTY3OTQuNjc1NTg5MjAxNzQ2LDE4MjU3LjAwMTgxNjQ4MDMyNiwyNTI2OC44NTAzNTIyNjI3NDMsMjExNjUuNzMyMzM0OTIyMTczLDUyMjMuMjUwNjkxNDA1MjMzLDM5NzM0LjMzODQ2Nzk4OTk0LDE5MjcyLjg2OTIzODcyMjIyLDIyMjQ1LjA4ODE5MjQwNzU4NywxMTkyNy4wNDU1ODE2Nzk2NzcsMzYzNC43MTY3MzE2MjU5OTA2LDMxODg0LjAwMTczMTY1NzkxNCwyNjIxLjMxNDQzMDgzMDg2OTIsNjkyNC42ODEwMDQyNzc4NzYsNDk3Mi4yNTE4ODE2MzIyNjYsMzM1MDcuMjk3ODE5ODAxNTEsNzI5Ny45OTM3ODU2MzkwMjksNzUwMy41NDMzODAwMDYyNjcsNzU1NzMuMDkyNjEyMDgyODIsNDU2NDAuODg2OTYxODQxNTMsMTQwOTcuNDYyNjgyNDAzOTk3LDEzNjE2Ljg4MzgwNjg3MDQzLDQ5MjkxLjcyODAyNDcxNjY2LDQxNTUuNjk0ODQ4OTY4ODI1LDE2NTIwLjkyMDYyOTA1NjA0LDMxMDAuNTM3ODQ4MzA2MDQ1LDIyNzE2LjU1MjU2MTkyODM1OCw4MjMxOS4wNTAxMTM1MzUzMSw4NjY0LjYyOTc0NDIyMzYxNCwyODE3NC41NTA2NjI1MDkzNjYsMjQ3OC4xNzU2NTU2MzE1MTA0LDIzMjk5LjEyOTc4MjA3NTM4NiwyMTkxMC45ODI0NTcyNjc2NTUsNzc3MC42MDc0MjA3ODg4MjIsMjAxOS42NzQwNTUyNDc0NjUKKzE5LFNhdCAxMiBGZWIgMTEsMTQ2My42MzIxODYxMTgzMzkyLDExMDc5LjQyNTAyMzE2MzU2OSw2NjE5LjU4MTA4MDkwMzA1MSwxMTk1My4yNTMyOTcxODE4Myw0Njc2My45OTEzMzUwNTI5NzUsOTk0My44NzQ0ODE5Njk2NTEsODM0My4zOTQ3NTk5MDk5NzYsMTI3OS4xODE4MDc4MjA3ODIzLDIyMDMuMzk0MjIyODc3MjgwOCwzNzM5MC40OTM4MDQ3OTU3OCwxODk4Ni41MTc0NTE4OTY0OSwyNzY1LjQyODYwMDIzNjcyMDMsNzMxMS40MjIzNjc1MjIwMDcsMzEyNy40OTc4OTY5NTQ4OTc0LDI5MTEzLjAxNTc0NzkyMjU3OCwxNTAwNi43NjA4MTk3MDEwMDcsNjg1Ni44ODgyOTg1MjU3MjIsMTAwNzUuNDgxODIwMzA3MzY2LDEwOTUyLjEzNjY5ODg4Nzg2LDE1MTU2Ljg1NzkyMzkyOTk1OCwxMjY5NS45MTkwMjkyNzkyOTcsMzEzMy4zOTI2MTIwODYyODksMjM4MzQuMDM5NzM0OTc5NTgyLDExNTU5LjcxNzQ3NTc3Mjk2NCwxMzM0My4wNzgyNDAwNjM5NjIsNzE1NS40NjQxNDM3NjQxMTEsMjE4MC4yOTg1NjYxOTc1MzcsMTkxMjQuNDM1MDk4OTAzNjg3LDE1NzIuNDg3MTg4MjQxOTc2OCw0MTUzLjg3MDkyMjE5NDc4OSwyOTgyLjYwODE4NTQwNjQyODcsMjAwOTguNTE5OTMyODQ0LDQzNzcuNjUzNjUxNTg4MjY0LDQ1MDEuOTAxNzk5ODE2MTMzNSw0NTMzMC42NTU0MjMwMzgzMjYsMjczNzcuNjE1NjI5NjMyNjA4LDg0NTYuODg0ODcxNzM3MjA2LDgxNjcuNzMxMDcwNjk5NDg4LDI5NTY3LjM2OTczNTExOTMwOCwyNDkyLjY0NjQ5Mzg3ODg1NzcsOTkxMC45NjU0MTY3ODU4NjMsMTg2MC4wMDg3Mzg5NTIwNDUsMTM2MjYuMTA3MDQ3NzkyMTgyLDQ5Mzc1LjQzODI3MDE2NTgyLDUxOTYuOTEwMzI0NjI2NDk5LDE2ODk5Ljc3MjUwMDA2OTg2NywxNDg2LjYwNDUzMTExOTY1NDcsMTM5NzUuMDE0NTI2MjI2NjA1LDEzMTQ0LjEwOTQxODQxMDQ3Myw0NjYyLjA5NjA5MDgxODQzNCwxMjExLjU4MTQ5NzMyODMzNAorMjAsU3VuIDEzIEZlYiAxMSw4NzcuODgxNzY1MzQ5NjQ3NCw2NjQ2Ljc4NDkxMzExMzkxMiwzOTcxLjE1NDM1MjYwNjY1NTcsNzE2OS41MTk5MTAxMzQ1MjEsMjgxNTEuOTU2ODEwMjQ4MjIsNTk2NC4zNzA5Mjk0NTAyNDgsNTAwNS4xMDY5Nzk3Mjk1NzgsNzY3LjcxMjc4MDUyNTcyNjgsMTMyMi4wMjk4MjMxNDM5Nzc2LDIyNDI2LjcyNzkwMzcyNzAyLDExMzg4LjA5NDAzODkzNDk4MywxNjU4Ljg1NDQyNTg5MTY0NjgsNDM4Ni4zMTQ4MDgzMzg1MDcsMTg3Ni4wNTQwMzYzNTYyNzUyLDE3NDYxLjk1ODMyMzc2NzA1Niw5MDAyLjYxMzY1Mjc0OTI3OCw0MTEzLjgyNDY5NjI1OTA2Myw2MDQ0LjUwODA2NDcxMzk2NSw2NTcwLjA2ODg3MTYyMTI1OCw5MDkxLjUyNzk1Mzk4Mjc5Myw3NjE1LjUwMTE1NTkyNTEzOCwxODc5LjcwNzUwMzIzOTE5MjksMTQyOTYuNjAwMzgxMjEzOTA0LDY5MzMuNTM0NzE4NzkwNTUyLDgwMDMuNTM5MTgzOTU1MzQ5LDQyOTIuODI3Mzc0MTEwMjEyLDEzMDcuODY4MzgxMDQ1NjU4NSwxMTQ3MS4yMDU5NjYxODQwNTQsOTQzLjMxNTE5ODYwOTcxODcsMjQ5MS43NzMyOTU5NDM3MDE3LDE3ODkuMTMwNzQ5OTg1ODA0OSwxMjA1NS43MDY3OTgxNDM2OTIsMjYyNS45MjUzNjY0NDgxODAzLDI3MDEuMTMzMDEzMTIxMzMwNCwyNzE5MC43MjA4NTQ2ODgwNDMsMTY0MjIuNTI5MDU5Mzg2MTk3LDUwNzMuMTk0OTMyNjUwMjU4LDQ4OTkuMjQ0Njg2OTIxODA2NSwxNzczNS45NDY0OTY0NzczNCwxNDk1LjE0MTQ2OTg3NjA0MjcsNTk0NS42NDQ2NTM1NzQzMjcsMTExNS44MjA0NTczNzkzNjIsODE3My40Mzc4ODAyMjU5NDQsMjk2MTYuMDI1Nzg3Nzc2MjU2LDMxMTcuMDg5OTkzNzc1NTg1LDEwMTM2Ljk4Mjc2NjU0MzI4NCw4OTEuNzg2MTE3MjczOTk0LDgzODIuNDI3ODg1NjA2NjI1LDc4ODUuMDA4MjU4MjQ5MjQxLDI3OTcuMDk4NTE4NjM2Njc0Nyw3MjYuODE3ODQyNzAwNjc1NAorMjEsTW9uIDE0IEZlYiAxMSw1MjYuNTQ2NTc1MDA2NjkyOSwzOTg3LjU0MzkwMDA0OTEwODMsMjM4Mi4zMzI0NjUyNzQxMzQsNDMwMC4yMTgzMjk3OTEyODQsMTY5NDYuODQ3MTM1OTg5Mzg1LDM1NzcuNDEzNjY2Mjc4MDM0NywzMDAyLjUwMDE3Njg5NTIwOCw0NjAuNzI2MjgzMjMyMTY5MjQsNzkzLjIxMzg0ODg3MjU5MzIsMTM0NTEuNDAwNjUzMDgyMjM3LDY4MzAuNTAzNjQ5MzY1MTMxLDk5NS4wNTQ0MzE0NTY5ODg1LDI2MzEuNDYyNjk0NDA0Mzg3NSwxMTI1LjM2MjI5ODcyNzA2ODcsMTA0NzMuNTk0NDQyNjY5MzI0LDU0MDAuNjkzNTk5NzM5NiwyNDY4LjEwODM0ODA2MTM1NiwzNjI2LjIzMTc2NDg2ODcyLDM5NDEuMzA1NTE2NjkyMjA5LDU0NTMuMzQyNDYxOTQxODU2NSw0NTY4LjA1MzgyNDQyNzQxNiwxMTI3LjYyNTU3Mjk2NTc3MTcsODU3NS42MzUxNjQzMjgzMTgsNDE1OC43MTc0MzIwODI3NTYsNDgwMC43MTg3MzIzMTAyNjQsMjU3NS40MjMzNDQyMDAxMzMsNzg0LjUzMjI2MjUwOTY5MjYsNjg4MC42MTg3MTE3NTEyOTMsNTY1Ljg4MTY4NjA5MTQ5NTgsMTQ5NC43MzA1MTUyNzMxMTQsMTA3My4yMTQ2ODA0MjEwNTAyLDcyMzEuMzUxOTQxNzc3NzI3LDE1NzUuMTQ5OTM3MDU4MTE5MywxNjIwLjYyMzE5ODE3ODU0ODEsMTYzMDkuNzYzNzA4MTIyMjM1LDk4NTEuMDYyNTA1NzU2MTc3LDMwNDMuMzQ5MjU4NzQ5MzQ5LDI5MzguNjk4NDU5NzgyMjM3LDEwNjM4Ljg0ODAzMjI5ODQ5NCw4OTYuODEyOTY0MjU3MzEzNSwzNTY2LjgyMDMxOTAyOTEzOSw2NjkuMzgwMjQ5OTE1NjkxNyw0OTAyLjcwODU4MzA2MDA2MywxNzc2My45ODMzMjUwNzE3OTMsMTg2OS42MDQ4MDM1Nzk3MDYsNjA4MC40MzY0OTU2MjQ1OTUsNTM0Ljk2NDUxOTc0MTY0OTMsNTAyNy44ODM2NzUwMDI4NjgsNDczMC4xMjEwMDM0MjQ1MzIsMTY3OC4xNjI5MDc5NDE0ODgxLDQzNi4wMTEyMjU1NzA4NTM5CisyMixUdWUgMTUgRmViIDExLDMxNS44MjE2NjcyMzkyNTYxNiwyMzkyLjIxMjcwNjYxMzE5OSwxNDI5LjE4NTMyODQyNzY2MzMsMjU3OS4yNjI3Mjg3Njc5OTE2LDEwMjAxLjM5OTQ0MDYwNjQ2NywyMTQ1Ljc1MTczNzMyMDA4MzUsMTgwMS4xNjUyNzgwMTI1MTYsMjc2LjUwMDExNTU3OTk2Njg2LDQ3NS45MjU4ODk0OTkxNjE3LDgwNjguMTM1NzY5NzM3OTUyLDQwOTYuOTQxMDExODUzMTE5LDU5Ni44ODg1ODY1MzgyNTE2LDE1NzguNjgzNDQ2ODU2MDg0NCw2NzUuMDU3NDc2MjgwMjExNCw2MjgyLjA2NDcxOTYwNDk3OSwzMjM5Ljg5NjM0NDgxMjg3NTcsMTQ4MC43NTM4MTMwNzU0MDQ0LDIxNzUuNDU3NTI1MjI0NzUyMywyMzY0LjM0NjQ3MDYyNzA2NzQsMzI3MS4wNzcwNjUzMDQwMTYzLDI3NDAuMDk1OTQ0NTE4NTY5LDY3Ni40NTcxODU2MzU4MjgxLDUxNDQuMDA3ODA0Mjg1NjU1LDI0OTQuNDA5MTkzODI2MjY3MywyODc5LjYwMzEzMTI4MDk2MDUsMTU0NS4wOTEzNDIyMTg3NzA3LDQ3MC42MDc2MTg5OTgyNjE2LDQxMjcuMTMyMjc2ODEyMTgsMzM5LjQ2NTIzOTU1ODkwMDA3LDg5Ni42NDA3MTAzODU1NDA1LDY0My43NzI3MjQ0MzQ2NTA2LDQzMzcuNTg4OTE5NTU0NzEyLDk0NC44NTAzMjk1NTE5NDk3LDk3Mi4zNjA1OTAxOTQzNzcxLDk3ODMuMTA0MjY0NDY5MTc1LDU5MDkuMTg1MTQ5MDY0NzUwNSwxODI1LjY3MjUxNTYwNTY4MjcsMTc2Mi43MTg3ODAxODEyODAyLDYzODEuNzAwNDQ3NTcxNTYsNTM3LjkyNzY3MTg3OTI3MSwyMTM5Ljc1NTQ2MjMwMjc5MTMsNDAxLjU2MTU4MzY2NDgxMTA1LDI5NDAuODI1NjY1MTM2OTQxNiwxMDY1NS4wNzk5MjM4NzczOCwxMTIxLjM4NTkwNjI1MjUyODIsMzY0Ny4yMjc5NzQ1Njk1MTEsMzIwLjkxNTE0MDE3NDkyNjYsMzAxNS44MDUxMzUyMjA5Njc3LDI4MzcuNTQ3ODE1MjQ2NjY5NCwxMDA2Ljg0MDMzOTA1NDEyOCwyNjEuNTU5NTM5MjE4NDUzMworMjMsV2VkIDE2IEZlYiAxMSwxODkuNDI4ODkxODA3ODE5NjQsMTQzNS4xMzg3Mzk5ODA3NDYzLDg1Ny4zODIyMTgzODQxODExLDE1NDcuMDMzNjk3ODgxMDY4LDYxNDAuNjgwNjIxNTQyMzkxLDEyODcuMDI5ODA2NDQzNzMwMiwxMDgwLjQ5NzQ5MDU1OTc2MjEsMTY1LjkzNDA1Mjk2MjkwNDg0LDI4NS41NTQwNzg2NzgxMjM2Myw0ODM5LjI1MDQ1NjQ4MjE3OSwyNDU3LjM0MjMxOTQ1NDY4NywzNTguMDQ0NzU5NTUzNDU0NCw5NDcuMDkzMTMzOTY0NjUxOCw0MDQuOTM4MTY0OTU4NTkxNiwzNzY3Ljk3NzU3NjM5MTQ1NiwxOTQzLjYyNDcyNDE5NDM0ODYsODg4LjM4NTM0MDMxOTg0MTUsMTMwNS4xMDQ5NjQwNTAyOTU2LDE0MTguMzQ0NzYyNDM4ODIzNCwxOTYyLjA4NjkzNDk3NzkxMzIsMTY0My42MTM5ODY4NTI0NTYsNDA1LjgwMzE0Mjk0MTk1OTYsMzA4NS41Nzc0MDg3NzE5NTMzLDE0OTYuMTUwNDcwODY1Njk4MywxNzI3LjI2Mjk5Mjk4MzE4LDkyNi45NTY4NTIyNDY0MjY1LDI4Mi4yOTcyNjMzNzc4NTQ4LDI0NzUuNTMyOTE5NTY3ODY0LDIwMy42NDA3MzE5MDgwOTc4LDUzNy44NjU0MDEwODY1ODcyLDM4Ni4xNjk2MTM2NzI1NDMxLDI2MDEuODE3MDM4NTgxOTYxNyw1NjYuNzY1ODQ2NTM3NDYxOSw1ODMuMzk5ODI4MjU4OTk5LDU4NjguMjAzNTAxNDU2MjUzLDM1NDQuNjM2MjIzMzA0NDczLDEwOTUuMjAwNTAxNTA5NDM1LDEwNTcuMzI5ODc0NDE3ODc2NywzODI4LjA1MTQxMTYzMzg1NzIsMzIyLjY2MDE0MzI0MDI5NjM1LDEyODMuNjUwNDY4MTk4MzQ3LDI0MC44OTY4NTcwNzI1NzY4NCwxNzY0LjAxMzc4Mjk1OTk5MDMsNjM5MS4wNTM1MDMzMzU0MTQsNjcyLjYwNDAxMzE2NjUwODQsMjE4Ny43MTM5MTgyNzU5MDksMTkyLjUxMDc5MjM3OTQyODg0LDE4MDguOTI1NzEyMjA4NDc0NiwxNzAyLjIxMjU5NjA0ODY3NzQsNjA0LjA2OTY0NjYwNDY3MjQsMTU2LjkwNzI5NjI3NTkwNTE0CisyNCxUaHUgMTcgRmViIDExLDExMy42MTk1Nzg2NTYwMDU4NCw4NjAuOTcwNDA2OTEyNjk1Miw1MTQuMzUyMzE5MTg1NzI3NCw5MjcuOTEyMDA0OTg5MjE3NywzNjk2LjI2MDA2MzgwMDgyNyw3NzEuOTcxNDQxMzc1OTU1Niw2NDguMTc4MjA1NTIzOTc1Niw5OS41ODEyMzMyODY2MDM3MiwxNzEuMzMxNTc1MzMwNzM3MzcsMjkwMi41ODg2NjM5NTU1MzY1LDE0NzMuOTIzMDk4MzcwNSwyMTQuNzc2MDUzMzIyODU1MTIsNTY4LjE4NjAxMDkxMjI0ODEsMjQyLjkwNTU1OTIyMDI0MjcsMjI2MC4wNDIyMjQ2MTY2NDQsMTE2NS45ODc5NTIwOTE1MTI5LDUzMi45OTExNTc1Njc4ODkyLDc4Mi45NjE2ODYyMDM3NDI4LDg1MC44NDk5MTUwODUyNDIyLDExNzYuOTIwMDU2ODU4NDgzMSw5ODUuOTA0NzUyMzMzNDE1MywyNDMuNDM5NDIyNjAzNjE5MiwxODUwLjg1NDcwODg5NTkyMjYsODk3LjM5NzgyOTUyNDQxOTksMTAzNi4wNjE2NDUyOTQ2MDA4LDU1Ni4xMTU1NTgwNzMwMTk1LDE2OS4zMzgyOTA1NzMxODA2NCwxNDg0Ljg3NzA4NzM0Njc2OTUsMTIyLjE2MTUzMDA3MTIwNzg0LDMyMi42NDgzMzYyMTY5NjY1LDIzMS42NDU4MTE2MDQwMTQ2OCwxNTYwLjY1Mjk1MzgwNjEwNTksMzM5Ljk3MzY0MzQ0NjUwNjksMzUwLjAzMzMzNzk4MzM2ODU0LDM1MTkuOTM2ODI5MzYzODI3LDIxMjYuMjYxMTM4MDgxNzYxLDY1Ni45OTkyMTI4MTg0MTgyLDYzNC4yMTg5NjI3OTc4NDg5LDIyOTYuMjU0NDk1NTk1MTk2NywxOTMuNTM4ODY5ODUxOTkxNDIsNzcwLjA2OTIxMTI0NDE0NzksMTQ0LjUxNDE4NTk1NTYzNjM4LDEwNTguMTIyMDc1OTg3OTAwNCwzODMzLjQ1MDU0MDk1MzcxMSw0MDMuNDI4NjUxNTQ5NTg4MDQsMTMxMi4yNTg0OTYwODYzMTg1LDExNS40ODM2NDU4NzM0NTI3MywxMDg1LjAyNTA5MzY0NTMzMTMsMTAyMS4xMzkwMTk2MTk1NTE4LDM2Mi40MjExMDg2MjI3NTI1Nyw5NC4xMjc0MTk0OTc3Mjg4NAorMjUsRnJpIDE4IEZlYiAxMSw2OC4xNDkxNDU3Njg0NjU3LDUxNi41MTQ0Njc0OTAyMzQ4LDMwOC41NjUxMzkyMzQzODI2LDU1Ni41NjI3MjUzMDczNzcxLDIyMjQuODI0NTk5NDM4NzA0NCw0NjMuMDM1Mzc5MjM3NjExNiwzODguODM0NzAwNjg3MTAyMDQsNTkuNzYwMjExMDAxMTcwMTUsMTAyLjc5ODQyMTUzNjY1NjQ4LDE3NDAuOTc3NDg1OTk1MTY2Nyw4ODQuMDY1MjM1MzA4OTEyMiwxMjguODM1MDk4NjI2MjU0OTMsMzQwLjg2OTYzNjg1ODY5NTksMTQ1LjcwODkyNzY4OTYxNSwxMzU1LjU3OTY0NjQ5MjI0Niw2OTkuNDgwNTQwOTQzNDg5NCwzMTkuNzcwNjM0NTkzMTA3OTYsNDY5LjcxNjE2ODk4MzQyMzksNTEwLjQxNTcxODI2MTIzNzMsNzA1Ljk1Mjg5Njk1MjU2OTksNTkxLjM4NDcyNDE3MjE5MjcsMTQ2LjAzODE1NTY5NDc5NjcsMTExMC4yMTc4ODA0OTI2ODc4LDUzOC4yNjM1NDg4Mzk2NjAzLDYyMS40NTk0MjE2NzM4NTU5LDMzMy42MzQxNTk2MDI5NzczLDEwMS41Nzg5MzEyNjI1NjY3Myw4OTAuNjYwOTExODczMzk0OSw3My4yODMxNjM0NTQ0MTU5LDE5My41NDY0NDUzODAyMTY5NywxMzguOTUzOTExNjMyMTI4NCw5MzYuMTI5NTY1NDcwOTQ2MiwyMDMuOTMyNjczNTEzNzI4MTYsMjEwLjAxNDY1NjcyOTkyNTcyLDIxMTEuMzcxMjgwNDAzMzY2LDEyNzUuNDQ0MzI3MDA4NjYxMywzOTQuMTI2ODI0MzA3ODA5OCwzODAuNDI0MDY4MDg3MTkwMiwxMzc3LjQwNjkxOTUyNzIyNTcsMTE2LjA4OTAyMzYzMDY2NjMyLDQ2MS45Njg4MTc5MDcxNjcyNSw4Ni42OTQxNDIyODc0MzQ2OSw2MzQuNzAxNTk5OTM3MTkyOSwyMjk5LjM2MjI1OTcwODg3NzQsMjQxLjk3NzEzNzE4OTc1ODAzLDc4Ny4xMzMzMjI4MjQ5Nzc4LDY5LjI3NjQ4MjA0ODM0MDgxLDY1MC44MTcwNzk2NjYxMjQzLDYxMi41NzAyMTA2MzQ1MDg1LDIxNy40NDAyNDA3NzEyNjU1Niw1Ni40NjYyNjkyNzYyMzYyMDQKKzI2LFNhdCAxOSBGZWIgMTEsNDAuODc2MTA3MjQ3NjkwMjcsMzA5Ljg2ODExOTkzNDgwMjMsMTg1LjExMTQxNDU5Nzc2NDYsMzMzLjgyODUxNDI2MzgxOTg0LDEzMzkuMTE0OTc0NjYzMDA3NCwyNzcuNzM0MzIwMDEwOTQ1MDUsMjMzLjI1NzY1MTMxOTM1ODYyLDM1Ljg2MjkzMDk1MDMwMjQ0LDYxLjY3ODczODg5NzE2NTM1LDEwNDQuMjQ1Mzk3NzI2NDI3NCw1MzAuMjY4NzcxOTQ1NDU3Niw3Ny4yODMyNjI4MTQxNDAzOSwyMDQuNDk2NjYxNzEwMTIyMjMsODcuNDA0ODIwODk2NjUwOSw4MTMuMDgzNTQ0NzE1OTkyMyw0MTkuNjIxMjAxNzM1Nzk5MzMsMTkxLjg0Nzk2ODIxNDI5ODAyLDI4MS43OTMyODkyMDUzNDQxLDMwNi4xOTMxMDU0ODkwNDQyLDQyMy40NTMxMjE4MjQyMTY5NiwzNTQuNzM2NTc2NDg0MjQ0Niw4Ny42MDc2NDg1OTIyMDQyLDY2NS45NTQ5MDA5MTExNiwzMjIuODU0MjA1MTU3NjIzMTQsMzcyLjc2OTkwNzQyNzEwMjcsMjAwLjE1OTQzNTM0NjI5NzIsNjAuOTMzMDA5MzQzMjczNTEsNTM0LjIzODY1MDY3MzY1MzMsNDMuOTYxNjc3MDUyOTgzNiwxMTYuMTAyNDU0NjMwOTcyMzIsODMuMzUyMzEyMDQ3NDU4MjYsNTYxLjUyMTUzODY2MTQyMTcsMTIyLjMyODg3ODU3Nzk5ODYxLDEyNi4wMDYxMjkzNzk4NDI3OCwxMjY2LjQ3MDgwNDMwMDM2ODQsNzY1LjA4MDIzMDk4NDk4OTYsMjM2LjQzMjYzNjczNjIyNTcsMjI4LjE5MDUyMTcyMDY3MDQsODI2LjIzNzg5Mzk2MzQ4MTIsNjkuNjMzMDAwODIxMzgwNzgsMjc3LjEzNzgwMjAyNDY3MzEsNTIuMDA3ODkyMzk5NDA0MywzODAuNzE4NjU4MzM0NDIzMzcsMTM3OS4xOTYzMzU0MzY5MDk1LDE0NS4xMzg5NTI1NDU1MTkyMyw0NzIuMTQ3ODkwNzkwOTEyMjQsNDEuNTU3Njk5NzUxMTgxMzYsMzkwLjM3MjQ5Mjg4ODMzNTcsMzY3LjQ3NDQ2MTg5NTI3NDYsMTMwLjQ1NjY5OTg3MzE2NTc3LDMzLjg3MzY3NDQ4MDIwNDUzNQorMjcsU3VuIDIwIEZlYiAxMSwyNC41MTc2ODMxOTk2Mzg5NiwxODUuODk2NTM4MjI0NDIyMzMsMTExLjA1MDI1MjU1ODk2NjY5LDIwMC4yMzIwNDE2MzkwMDU5OCw4MDUuOTg2ODQ0MDIwOTY4MSwxNjYuNTg4ODM2OTcxMDMyODYsMTM5LjkyODcwOTQ1NzI5NTg3LDIxLjUyMTU5MTYwNjI5NTgxOCwzNy4wMDcwNTQ4MjczMTk3ODQsNjI2LjM0MzcwOTk0ODczMzYsMzE4LjA1OTc1MjUwNTg3NjM2LDQ2LjM1OTM2NDQ1NzgzMTQyNSwxMjIuNjgyOTI1MTcwMTI2MTEsNTIuNDMwNTkxMzAyMzg4NTIsNDg3LjY5MjQwMzgxODc5MzIsMjUxLjczMjQ2NDk3NDA0MTI1LDExNS4xMDAxMzAyNTAzNzY1MiwxNjkuMDU0MTI4MTY4MDI2MDcsMTgzLjY4MjA5MzcxNzg1ODQsMjU0LjAwMDkwMDc4ODE3Mzg1LDIxMi43ODU1MjQ0MDg0MDI4Niw1Mi41NTU0NDc5NDAyNjU3NjUsMzk5LjQ2NzY4ODA5MTIwNTUsMTkzLjY1MDQ2OTI0NjgxNjE2LDIyMy41OTg2ODA0NTIzMjEyNSwxMjAuMDgzMDIzMjM0NDMwMjMsMzYuNTUxMjEwMTY0OTczMzA1LDMyMC40NDg3NjY3NzY0NDM3MywyNi4zNzIwNzc1OTE5MjU2Niw2OS42NDYyNDU0NzU4MDU2OSw0OS45OTkzODczMzQyNTE3LDMzNi44MTk0NTcyNDE5NzI5NCw3My4zNzg5Mjg1ODcyNjM4NCw3NS42MDE4NDQwNTczNDQxNSw3NTkuNjcxODc1Nzc1MTk1Niw0NTguOTM2NTIzMjE0NzEyMiwxNDEuODMzNTI3MTA5NjE1NywxMzYuODc2MDY3OTc3Mjc5NzIsNDk1LjYxOTIyNDA2NTc2NTcsNDEuNzY3NTkxOTY5MTA4NjIsMTY2LjI1NjU5ODQyNjEzNTc1LDMxLjE5OTU4MjI1Njk3OTcyOCwyMjguMzY5OTYzNzMwMzIzMTgsODI3LjI2NjEzMzQ3MzE1NDQsODcuMDU1MTU1MDAyODYzODMsMjgzLjIwOTY5MTg3OTUwNTIsMjQuOTI5NzEwODc0NzY5NDczLDIzNC4xNTMwOTUxMzI5MzkxMSwyMjAuNDQ0MTA5NDMxNTMwOSw3OC4yNjk1NTEwNzE5MzkzNiwyMC4zMjA1NTQ5OTI1NTU5MgorMjgsTW9uIDIxIEZlYiAxMSwxNC43MDU4NzM2NjgwNDUwMDEsMTExLjUyMzM0ODg2MDI4MjE0LDY2LjYyMDIxNDg2OTcwOTg0LDEyMC4xMDA2Mzg2Njg0NTUyMiw0ODUuMDk1MDI5Njc2NDUxMTMsOTkuOTIyNzAyNzY0MzYwOTgsODMuOTQxNzQwNzQ2NTYxNTUsMTIuOTE1MTkzNDAzNjg0ODE3LDIyLjIwNDExOTgxMzE3NzM3LDM3NS42ODUzNjc4MTg1NDQ5LDE5MC43NzU3NTM2MjI3MDA4MiwyNy44MDk0MDM0NjcwNzIwMDIsNzMuNjAwNzI3MDEzNTc5MjYsMzEuNDUxMDA0Mzg0ODkwNTQyLDI5Mi41MjE3Mjk3MTM1MzQzLDE1MS4wMTUzODExMzk3Mzc5Nyw2OS4wNTQ4OTI4NDA2Mjc4NiwxMDEuNDE5MzkyODE2MjI5NTUsMTEwLjE4OTA1MTIzNDQyMTM3LDE1Mi4zNTgyMDQ3NzQ2MTI4LDEyNy42Mzc2MzcyNzc1MjcyMiwzMS41Mjc3OTgyMzg2NTQ0MywyMzkuNjE3Nzg0NTUwODAxMTMsMTE2LjE1MzM4Nzc5MDIwNjIyLDEzNC4xMjE0NzcyODg3Njc1Miw3Mi4wNDIyNDE3MTYwMjA5NSwyMS45MjU1OTAxMjM2NjUxNzQsMTkyLjIxMjk4MjYzMjQwMTM1LDE1LjgyMDI5Nzg1MjM5MzM2Nyw0MS43Nzg2NDQyNDc0MzEzNywyOS45OTI0NjMyNzk5MTg5NTgsMjAyLjAzNTkxNTgwMzcxNTE3LDQ0LjAxNjM2OTIzOTU5NzY3LDQ1LjM2MDA5MzQwMzE3MzQ0LDQ1NS42Nzc0ODMyMDMyNTEwMywyNzUuMjk1MjM4Mjk4MzEzNDUsODUuMDg0NTI3MDQwODg4MzYsODIuMTAyODI3MjIwMTA0MywyOTcuMjk3NzY2OTcwNzU3MiwyNS4wNTMyNzc3MjQwOTc0ODcsOTkuNzM4MzQ0NjI5MjA1NjMsMTguNzE2NjY0OTAzMzE1MSwxMzYuOTg1NDM0NDY1NTY3MTgsNDk2LjIwOTc4MzU5OTg3NDc1LDUyLjIxNjM2NjQ5MDc3NjI3NCwxNjkuODc4NjY0NjgyNTI0ODMsMTQuOTU0ODkwMjY0NjYzNDcsMTQwLjQ0OTkxNDQ0MzA4NjM2LDEzMi4yNDIxOTMzMDQyOTczMyw0Ni45NTkwNTEzNzUyNDA4NzUsMTIuMTkwMTQ5MTEwNDE2NTQ1CisyOSxUdWUgMjIgRmViIDExLDguODIwNzAzNzM2MDA3MjU5LDY2LjkwNTI3MDY0MjY4NjEzLDM5Ljk2NjE3MjMwMzQ5NDcxLDcyLjAzNzQxNTE5MTQ4MDgyLDI5MS45NTM4Mjk0NDY2MzI1NCw1OS45MzU0NDA5NDg1NTkxMyw1MC4zNTU3NjY5NDA0OTA2MSw3Ljc1MDM5MDE4MTA0NDY3OSwxMy4zMjI0MDQwMTkzODI2MDEsMjI1LjMzOTIxNzM4OTY5MjA0LDExNC40Mjk3MTcxMDQ5NTYwOCwxNi42ODE5NTkyMjYzNjg1MjMsNDQuMTU1MDIyNDAzMjIxMzk1LDE4Ljg2NjIwMzE4MDkzNTIyLDE3NS40NTcxODQ0NjQ0MDgxLDkwLjU5NDc4NTE4MDkzNjA5LDQxLjQyOTgyNDc2MTY5MDg4LDYwLjg0Mzc5MDI1NzgzNTksNjYuMTAxMzI1MDYyNjkzMjUsOTEuMzg5NjE3MDU3NTkyNTIsNzYuNTYyNDQyMTg3MDA1MjIsMTguOTEzNDAwNzgzMDI4NTU3LDE0My43MzMwOTUzNjMxMDc2OCw2OS42NzAwMzM2NjQyNDc2NSw4MC40NTAzMzYwMjQzNDAzNCw0My4yMjA4MDMzNTY4OTQ1NSwxMy4xNTIyODAwNjY4Mjc5ODQsMTE1LjI5NDE3MTY0NTAyNDI4LDkuNDkwNDEyMTA5MjYyNTQ4LDI1LjA2MTczNjEyNDQ0OTczNywxNy45OTExODc1ODEzMzIxNTIsMTIxLjE4ODIxNzkyNjMwNTYxLDI2LjQwMzI0NzYyOTgxMzUzNSwyNy4yMTU0MDg4MzA3Mjk5NTIsMjczLjMzMTM4MjI5MjczNjMsMTY1LjEzNzI0MzkzNDY4ODM3LDUxLjA0MTM3NjAyOTQ5MDQxNSw0OS4yNDgwNTk3MTI5OTkxMTUsMTc4LjMzNDUyNDMxMjQzNzU3LDE1LjAyNzYxODg5MDU3ODQ0Miw1OS44MzM2NDc1NTk5MDg0MTQsMTEuMjI4MTUwMzYyMzM5MjM3LDgyLjE2OTQwODM2ODc1ODcsMjk3LjYzNjM3MjY3MzQ2NjgsMzEuMzE5ODY2MTg4NTg5MTQyLDEwMS44OTkwMTQ2OTA1NzUxMyw4Ljk3MTE3NTMyNTA4MDksODQuMjQ0OTAxMzM0NTY4NDUsNzkuMzMwNzczNDIwMzUzODYsMjguMTczODIzMTYwNTgwMzQ0LDcuMzEyNzgwOTE0NDAwNTMxCiszMCxXZWQgMjMgRmViIDExLDUuMjkwNzQ2NjM5NDg1MzQ0LDQwLjEzNzkyNjY4MjI1MDE3NSwyMy45NzYxMzU1ODQ2Njk0MzYsNDMuMjA4ODEyNDI4OTIxMDQsMTc1LjcwNzU1MzkxNTM1Nzk4LDM1Ljk1MDQ5ODc1MDk3NDA0LDMwLjIwNzkwNjkzOTE4OTY3Myw0LjY1MDk3MjM1MjUxNjkxLDcuOTkzNDAxNjkyNjY4MDMsMTM1LjE2MDcyOTMxMTc2MTUxLDY4LjYzNjY0NDcxOTI0OTc0LDEwLjAwNzAwODAwNzE1NzAzLDI2LjQ4OTc2OTQxNTY5OTMyNSwxMS4zMTcwOTE2OTAwNTk5MTMsMTA1LjI0MTA5MjE2NDY1Njk1LDU0LjM0ODIyMTU0MzU3MTUyLDI0Ljg1NjAyOTU4NTEwMTY2NiwzNi41MDE1NzM1MDk3MTkzODUsMzkuNjUzNTQ4NzkzNTEyMDksNTQuODE4NjY1MTQ3NTM5NjMsNDUuOTI1NDM2NTIyMjI4NDEsMTEuMzQ2MDc3ODM2MTkzNjU2LDg2LjIxNzQxMzc5MTY1NTkxLDQxLjc4ODkyODY5OTgyNzk0LDQ4LjI1Njc0MzQ1NjA3ODgxLDI1LjkyOTc1OTkxMTExNTU5Niw3Ljg4OTUzMDI2ODI0ODc4Niw2OS4xNTY0NTE5MTk5ODA2LDUuNjkzMTg5ODc0OTA4ODc0LDE1LjAzMzc4MTcyNTcxNjU2OSwxMC43OTIxNDc5Mzc2MTA5NzcsNzIuNjkzMDMzMzgwNTA1NDUsMTUuODM4MDIwMjkwNzQxMTY4LDE2LjMyODg3MDgwMDI5MTEzLDE2My45NTM5OTMxMjkyNjY1LDk5LjA1ODQ5ODcxODEwNDIsMzAuNjE5MjM0NzI1ODYyNzI1LDI5LjU0MDY5NjEwMTE2MDczLDEwNi45NzQzMzk1ODYxNjkxNyw5LjAxMzk3NzgyMTA1NjMzLDM1Ljg5NDU4MzQyMDgzNjI1LDYuNzM1NzgzMjkxMDk1Njc1LDQ5LjI4ODU5NTE0Njg5MTYxNiwxNzguNTI4NDc2NTU4NDM4MjYsMTguNzg2MDEyMDE3NjgxNjg1LDYxLjEyMjU4NTQxMzUwNTQzLDUuMzgxNjUyNjc5NzAyNDIzLDUwLjUzMjAwNzEwMzg1NDIxLDQ3LjU4OTc1OTE2NDIwNTE4LDE2LjkwMzMyOTc3NzcxNTQ4LDQuMzg2ODg1MjA1ODY1ODkxCiszMSxUaHUgMjQgRmViIDExLDMuMTczNDUwOTIwNDMxNTUzLDI0LjA3OTYxNzQ2NDQxNjAyLDE0LjM4MzU0MzE5MDE2MTg4NiwyNS45MTcxNzcwMzgwNzk3NzUsMTA1Ljc0Mzk0OTAxOTY3MDU0LDIxLjU2MzkwOTU4MjI0OTY4NiwxOC4xMjE0MTgwODYxODkzNCwyLjc5MTAwNTcyMzkyNDEwNTMsNC43OTYwMTY1ODAxOTEzODcsODEuMDcwOTU2NTYxNzM0NzksNDEuMTY5NDAxNTg2NTU1ODIsNi4wMDI5MjMxNTM4NjA4NTIsMTUuODkxOTE2ODEyNDI3MTgzLDYuNzg4NjgxMzMzNDc1ODY4LDYzLjEyNDg3MDQxMTY4MTg4LDMyLjYwMzc1MDExODMzNjg3LDE0LjkxMjQ5ODkwNDQyNzY2OCwyMS44OTgxMjYyMzkxNzUwNywyMy43ODc3ODkwODU3NTAyNjYsMzIuODgyMTc0MzA4OTU5OTIsMjcuNTQ4MDcxMzgxMDAxMzksNi44MDY0NzA5NjM3OTI5NjcsNTEuNzE3MDMxMzY3MjIxMDYsMjUuMDY1NTU2MDU3OTAzMzIsMjguOTQ2MDA2NDMwNzI1MjE2LDE1LjU1NjIyMzY2MTY3NjU3Niw0LjczMjYxODYyMjY4NDE2LDQxLjQ4MTg5OTQ3MjA4NDMzNiwzLjQxNTI4MDYyODI0NTg1MzcsOS4wMTgzMTc4MzU0NzIwMzYsNi40NzM3NTQ1NDk4MjQ0NTIsNDMuNjAzOTMxMTIxMTY3NTEsOS41MDA0NjI4NzgxNzM2NDEsOS43OTcwOTExMjM5NjQwNzUsOTguMzQ1NjA1NDQwOTQ1NzYsNTkuNDIwODM0MjIwNDY0MDksMTguMzY4MTkyMTIxNDk0NzIyLDE3LjcxOTU1NDQ0ODA4MzM1NCw2NC4xNjg4Mjk1OTMxMDg2LDUuNDA2ODM4MDI5NDc0NTE2LDIxLjUzMzM5MTMxNjQxMTY4LDQuMDQwODA2NzYxNDE1MTYyLDI5LjU2NTM1Njk2Mzg0OTIyNiwxMDcuMDg1MjUxNjYzNzM5ODgsMTEuMjY4MDk0NjA4MTIzOTU0LDM2LjY2MzQ5OTcwNTY0OTQ4LDMuMjI4MzYxMzUwODc2NzUzLDMwLjMxMDI5MDgzODcyNzUyLDI4LjU0ODY0MTY1OTcyMDI0LDEwLjE0MTQxOTQ2NjQyNDc1MiwyLjYzMTY2MTg5OTIxNjU4NQorMzIsRnJpIDI1IEZlYiAxMSwxLjkwMzQ3NzkwODc3OTQ4ODYsMTQuNDQ1ODg5NzQxNjk4NTIyLDguNjI4ODQ1MDEyMDA4NzQ0LDE1LjU0NTQ4ODI1MDQ0NjYwMyw2My42MzcwMDIyNzY2NDAzNzQsMTIuOTM0NTU5MzM5MjIzMzc4LDEwLjg3MDg1OTU3MzMyOTQ2OSwxLjY3NDg0NzEzMTM3OTczODYsMi44Nzc1OTUyODY2NDI3MDksNDguNjI3NDE5OTUzOTA2NTksMjQuNjk0MTc1MDQ0ODQ5NjU4LDMuNjAwOTk4NDczMzA0NzEzMyw5LjUzMzk4NDUzMTcyOTEzMiw0LjA3MjI2Nzc0NzI4MzcwMjYsMzcuODYzMTQ5OTgwMTQyNDIsMTkuNTU5MTQ1NzYxODA4MDY1LDguOTQ2ODI4NDEzNjA3OTUsMTMuMTM3MTg3MTI3OTgwNjA1LDE0LjI3MDA3NDk4MDA1NzkyNywxOS43MjM5MTYwNzgxNDMyMiwxNi41MjQ1NDcwNzc2OTg2MDcsNC4wODMxNzg1MzA5NTc3NzgsMzEuMDIyMjAyODM2OTI5NDksMTUuMDM0Njg5MjQxODMyNjYsMTcuMzYyODA0MzA3NDI1NzcsOS4zMzI3NTU3MjUyOTE1NzcsMi44Mzg5MTM2NjUzMDIyOTEsMjQuODgxOTk2OTY5NjcwOTE1LDIuMDQ4Nzg5MjQ1MTQ0NzE0LDUuNDA5ODIzNDA4NzU1MjQ5NSwzLjg4MzMzNTQxNzkyMzczNSwyNi4xNTUyNTk0Njk4NDMzMTUsNS42OTg4NzM1MjgzMTYxMjEsNS44NzgxMTgwNDE4Nzk2NCw1OC45OTEzNjU3NTk4NDUyNiwzNS42NDM5NzIyMjM1NDU4LDExLjAxODkxMDM5MjQ2Mjg2MiwxMC42Mjg4Mjg5NDU3NzYzOTgsMzguNDkxODY4OTI2NzMyOTM0LDMuMjQzMTc4NzEzNTYxMzI5NSwxMi45MTgwMjI5MjgwNjIwOSwyLjQyNDA4Njg1MzA1OTk5MTUsMTcuNzM0NTU0NzU5NjY3NjQyLDY0LjIzMjE2ODc4NzcxOTE5LDYuNzU4NzcwODAwNjg1OTA4LDIxLjk5MjA5ODE3Mzc3ODg0LDEuOTM2NjM5NTc2NDgyOTAxNiwxOC4xODA4NTgzMzgyMjcyOTIsMTcuMTI2MDYzNDgyMjI0Nzk0LDYuMDg0NTA0NzcxNjYxOTUsMS41Nzg3MTYxOTE4ODU0MjA1CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNJUlN0YXRlc09ubHlfRkRfUmVmZXJlbmNlL1Rlc3RTSVIvaHVtYW4vUG9wdWxhdGlvbiBDb3VudF8wLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0lSU3RhdGVzT25seV9GRF9SZWZlcmVuY2UvVGVzdFNJUi9odW1hbi9Qb3B1bGF0aW9uIENvdW50XzAuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMwYWMyODAKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNJUlN0YXRlc09ubHlfRkRfUmVmZXJlbmNlL1Rlc3RTSVIvaHVtYW4vUG9wdWxhdGlvbiBDb3VudF8wLmNzdgpAQCAtMCwwICsxLDMzIEBACitpdGVyYXRpb24sdGltZSxzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9ub2RlL3RyYW5zcG9ydC9waXBlL1VTQQorMSxUdWUgMjUgSmFuIDExLDk0MzIxMS4wCisyLFdlZCAyNiBKYW4gMTEsOTQzMjExLjAKKzMsVGh1IDI3IEphbiAxMSw5NDMyMTEuMAorNCxGcmkgMjggSmFuIDExLDk0MzIxMC45OTk5OTk5OTk1Cis1LFNhdCAyOSBKYW4gMTEsOTQzMjEwLjk5OTk5OTk5OTgKKzYsU3VuIDMwIEphbiAxMSw5NDMyMTEuMAorNyxNb24gMzEgSmFuIDExLDk0MzIxMC45OTk5OTk5OTk3Cis4LFR1ZSAxIEZlYiAxMSw5NDMyMTAuOTk5OTk5OTk5MworOSxXZWQgMiBGZWIgMTEsOTQzMjEwLjk5OTk5OTk5OTIKKzEwLFRodSAzIEZlYiAxMSw5NDMyMTAuOTk5OTk5OTk5MworMTEsRnJpIDQgRmViIDExLDk0MzIxMC45OTk5OTk5OTkKKzEyLFNhdCA1IEZlYiAxMSw5NDMyMTAuOTk5OTk5OTk5MQorMTMsU3VuIDYgRmViIDExLDk0MzIxMC45OTk5OTk5OTkxCisxNCxNb24gNyBGZWIgMTEsOTQzMjEwLjk5OTk5OTk5ODgKKzE1LFR1ZSA4IEZlYiAxMSw5NDMyMTAuOTk5OTk5OTk4OAorMTYsV2VkIDkgRmViIDExLDk0MzIxMC45OTk5OTk5OTkxCisxNyxUaHUgMTAgRmViIDExLDk0MzIxMC45OTk5OTk5OTkxCisxOCxGcmkgMTEgRmViIDExLDk0MzIxMC45OTk5OTk5OTk1CisxOSxTYXQgMTIgRmViIDExLDk0MzIxMC45OTk5OTk5OTk5CisyMCxTdW4gMTMgRmViIDExLDk0MzIxMS4wMDAwMDAwMDAxCisyMSxNb24gMTQgRmViIDExLDk0MzIxMS4wMDAwMDAwMDAyCisyMixUdWUgMTUgRmViIDExLDk0MzIxMS4wMDAwMDAwMDAzCisyMyxXZWQgMTYgRmViIDExLDk0MzIxMS4wMDAwMDAwMDA4CisyNCxUaHUgMTcgRmViIDExLDk0MzIxMS4wMDAwMDAwMDA5CisyNSxGcmkgMTggRmViIDExLDk0MzIxMS4wMDAwMDAwMDEzCisyNixTYXQgMTkgRmViIDExLDk0MzIxMS4wMDAwMDAwMDE2CisyNyxTdW4gMjAgRmViIDExLDk0MzIxMS4wMDAwMDAwMDEyCisyOCxNb24gMjEgRmViIDExLDk0MzIxMS4wMDAwMDAwMDEKKzI5LFR1ZSAyMiBGZWIgMTEsOTQzMjExLjAwMDAwMDAwMTIKKzMwLFdlZCAyMyBGZWIgMTEsOTQzMjExLjAwMDAwMDAwMTIKKzMxLFRodSAyNCBGZWIgMTEsOTQzMjExLjAwMDAwMDAwMTUKKzMyLEZyaSAyNSBGZWIgMTEsOTQzMjExLjAwMDAwMDAwMTUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0lSU3RhdGVzT25seV9GRF9SZWZlcmVuY2UvVGVzdFNJUi9odW1hbi9Qb3B1bGF0aW9uIENvdW50XzEuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTSVJTdGF0ZXNPbmx5X0ZEX1JlZmVyZW5jZS9UZXN0U0lSL2h1bWFuL1BvcHVsYXRpb24gQ291bnRfMS5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjRmYmQ1YQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0lSU3RhdGVzT25seV9GRF9SZWZlcmVuY2UvVGVzdFNJUi9odW1hbi9Qb3B1bGF0aW9uIENvdW50XzEuY3N2CkBAIC0wLDAgKzEsMzMgQEAKK2l0ZXJhdGlvbix0aW1lLFVTLUFLLFVTLUFMLFVTLUFSLFVTLUFaLFVTLUNBLFVTLUNPLFVTLUNULFVTLURDLFVTLURFLFVTLUZMLFVTLUdBLFVTLUhJLFVTLUlBLFVTLUlELFVTLUlMLFVTLUlOLFVTLUtTLFVTLUtZLFVTLUxBLFVTLU1BLFVTLU1ELFVTLU1FLFVTLU1JLFVTLU1OLFVTLU1PLFVTLU1TLFVTLU1ULFVTLU5DLFVTLU5ELFVTLU5FLFVTLU5ILFVTLU5KLFVTLU5NLFVTLU5WLFVTLU5ZLFVTLU9ILFVTLU9LLFVTLU9SLFVTLVBBLFVTLVJJLFVTLVNDLFVTLVNELFVTLVROLFVTLVRYLFVTLVVULFVTLVZBLFVTLVZULFVTLVdBLFVTLVdJLFVTLVdWLFVTLVdZCisxLFR1ZSAyNSBKYW4gMTEsNjI2OTMyLjAsNDQ0NzEwMC4wLDI2NzM0MDAuMCw1MTMwNjMyLjAsMy4zODcxNjQ4RTcsNDMwMTI2MS4wLDM0MDU1NjUuMCw1NzIwNTkuMCw3ODM2MDAuMCwxLjU5ODIzNzhFNyw4MTg2NDUzLjAsMTIxMTUzNy4wLDI5MjYzMjQuMCwxMjkzOTUzLjAsMS4yNDE5MjkzRTcsNjA4MDQ4NS4wLDI2ODg0MTguMCw0MDQxNzY5LjAsNDQ2ODk3Ni4wLDYzNDkwOTcuMCw1Mjk2NDg2LjAsMTI3NDkyMy4wLDk5Mzg0NDQuMCw0OTE5NDc5LjAsNTU5NTIxMS4wLDI4NDQ2NTguMCw5MDIxOTUuMCw4MDQ5MzEzLjAsNjQyMjAwLjAsMTcxMTI2My4wLDEyMzU3ODYuMCw4NDE0MzUwLjAsMTgxOTA0Ni4wLDE5OTgyNTcuMCwxLjg5NzY0NTdFNywxLjEzNTMxNEU3LDM0NTA2NTQuMCwzNDIxMzk5LjAsMS4yMjgxMDU0RTcsMTA0ODMxOS4wLDQwMTIwMTIuMCw3NTQ4NDQuMCw1Njg5MjgzLjAsMi4wODUxODJFNywyMjMzMTY5LjAsNzA3ODUxNi4wLDYwODgyNy4wLDU4OTQxMjEuMCw1MzYzNjc1LjAsMTgwODM0NC4wLDQ5Mzc4Mi4wCisyLFdlZCAyNiBKYW4gMTEsNjI2OTMyLjAsNDQ0NzEwMC4wLDI2NzM0MDAuMCw1MTMwNjMyLjAsMy4zODcxNjQ4RTcsNDMwMTI2MS4wLDM0MDU1NjUuMCw1NzIwNTkuMCw3ODM2MDAuMCwxLjU5ODIzNzhFNyw4MTg2NDUzLjAsMTIxMTUzNy4wLDI5MjYzMjQuMCwxMjkzOTUzLjAsMS4yNDE5MjkzRTcsNjA4MDQ4NS4wLDI2ODg0MTguMCw0MDQxNzY5LjAsNDQ2ODk3Ni4wLDYzNDkwOTcuMCw1Mjk2NDg2LjAsMTI3NDkyMy4wLDk5Mzg0NDQuMCw0OTE5NDc5LjAsNTU5NTIxMS4wLDI4NDQ2NTguMCw5MDIxOTUuMCw4MDQ5MzEzLjAsNjQyMjAwLjAsMTcxMTI2My4wLDEyMzU3ODYuMCw4NDE0MzUwLjAsMTgxOTA0Ni4wLDE5OTgyNTcuMCwxLjg5NzY0NTdFNywxLjEzNTMxNEU3LDM0NTA2NTQuMCwzNDIxMzk5LjAsMS4yMjgxMDU0RTcsMTA0ODMxOS4wLDQwMTIwMTIuMCw3NTQ4NDQuMCw1Njg5MjgzLjAsMi4wODUxODJFNywyMjMzMTY5LjAsNzA3ODUxNi4wLDYwODgyNy4wLDU4OTQxMjEuMCw1MzYzNjc1LjAsMTgwODM0NC4wLDQ5Mzc4Mi4wCiszLFRodSAyNyBKYW4gMTEsNjI2OTMyLjAsNDQ0NzEwMC4wLDI2NzM0MDAuMCw1MTMwNjMyLjAsMy4zODcxNjQ4RTcsNDMwMTI2MS4wLDM0MDU1NjUuMCw1NzIwNTkuMCw3ODM2MDAuMCwxLjU5ODIzNzhFNyw4MTg2NDUzLjAsMTIxMTUzNy4wLDI5MjYzMjQuMCwxMjkzOTUzLjAsMS4yNDE5MjkzRTcsNjA4MDQ4NS4wLDI2ODg0MTguMCw0MDQxNzY5LjAsNDQ2ODk3Ni4wLDYzNDkwOTcuMCw1Mjk2NDg2LjAsMTI3NDkyMy4wLDk5Mzg0NDQuMCw0OTE5NDc5LjAsNTU5NTIxMS4wLDI4NDQ2NTguMCw5MDIxOTUuMCw4MDQ5MzEzLjAsNjQyMjAwLjAsMTcxMTI2My4wLDEyMzU3ODYuMCw4NDE0MzUwLjAsMTgxOTA0Ni4wLDE5OTgyNTcuMCwxLjg5NzY0NTdFNywxLjEzNTMxNEU3LDM0NTA2NTQuMCwzNDIxMzk5LjAsMS4yMjgxMDU0RTcsMTA0ODMxOS4wLDQwMTIwMTIuMCw3NTQ4NDQuMCw1Njg5MjgzLjAsMi4wODUxODJFNywyMjMzMTY5LjAsNzA3ODUxNi4wLDYwODgyNy4wLDU4OTQxMjEuMCw1MzYzNjc1LjAsMTgwODM0NC4wLDQ5Mzc4Mi4wCis0LEZyaSAyOCBKYW4gMTEsNjI2OTMyLjAsNDQ0NzA5OS45OTk5OTk5OTksMjY3MzQwMC4wMDAwMDAwMDA1LDUxMzA2MzIuMCwzLjM4NzE2NDc5OTk5OTk5OUU3LDQzMDEyNjEuMCwzNDA1NTY1LjAwMDAwMDAwMDUsNTcyMDU5LjAsNzgzNjAwLjAsMS41OTgyMzc4RTcsODE4NjQ1My4wLDEyMTE1MzcuMCwyOTI2MzI0LjAsMTI5Mzk1My4wLDEuMjQxOTI5M0U3LDYwODA0ODQuOTk5OTk5OTk5LDI2ODg0MTguMCw0MDQxNzY4Ljk5OTk5OTk5OTUsNDQ2ODk3Ni4wLDYzNDkwOTcuMCw1Mjk2NDg2LjAsMTI3NDkyMy4wLDk5Mzg0NDQuMCw0OTE5NDc5LjAsNTU5NTIxMS4wLDI4NDQ2NTcuOTk5OTk5OTk5NSw5MDIxOTUuMDAwMDAwMDAwMSw4MDQ5MzEzLjAsNjQyMTk5Ljk5OTk5OTk5OTksMTcxMTI2My4wLDEyMzU3ODYuMCw4NDE0MzUwLjAsMTgxOTA0Ni4wMDAwMDAwMDAyLDE5OTgyNTcuMCwxLjg5NzY0NTdFNywxLjEzNTMxNEU3LDM0NTA2NTMuOTk5OTk5OTk5NSwzNDIxMzk5LjAsMS4yMjgxMDU0RTcsMTA0ODMxOS4wLDQwMTIwMTIuMDAwMDAwMDAwNSw3NTQ4NDQuMDAwMDAwMDAwMSw1Njg5MjgzLjAwMDAwMDAwMSwyLjA4NTE4MjAwMDAwMDAwMDRFNywyMjMzMTY4Ljk5OTk5OTk5OTUsNzA3ODUxNi4wLDYwODgyNy4wLDU4OTQxMjEuMCw1MzYzNjc1LjAsMTgwODM0NC4wLDQ5Mzc4Mi4wCis1LFNhdCAyOSBKYW4gMTEsNjI2OTMyLjAsNDQ0NzA5OS45OTk5OTk5OTksMjY3MzQwMC4wMDAwMDAwMDA1LDUxMzA2MzIuMCwzLjM4NzE2NDc5OTk5OTk5OUU3LDQzMDEyNjEuMDAwMDAwMDAxLDM0MDU1NjUuMDAwMDAwMDAwNSw1NzIwNTkuMCw3ODM2MDAuMCwxLjU5ODIzNzhFNyw4MTg2NDUzLjAsMTIxMTUzNy4wLDI5MjYzMjQuMCwxMjkzOTUzLjAsMS4yNDE5MjkzRTcsNjA4MDQ4NC45OTk5OTk5OTksMjY4ODQxOC4wMDAwMDAwMDA1LDQwNDE3NjkuMCw0NDY4OTc2LjAsNjM0OTA5Ni45OTk5OTk5OTksNTI5NjQ4Ni4wLDEyNzQ5MjMuMCw5OTM4NDQ0LjAsNDkxOTQ3OC45OTk5OTk5OTksNTU5NTIxMS4wMDAwMDAwMDEsMjg0NDY1OC4wLDkwMjE5NS4wMDAwMDAwMDAxLDgwNDkzMTMuMDAwMDAwMDAxLDY0MjIwMC4wLDE3MTEyNjMuMCwxMjM1Nzg2LjAwMDAwMDAwMDIsODQxNDM0OS45OTk5OTk5OTgsMTgxOTA0Ni4wMDAwMDAwMDAyLDE5OTgyNTcuMCwxLjg5NzY0NTdFNywxLjEzNTMxNEU3LDM0NTA2NTMuOTk5OTk5OTk5NSwzNDIxMzk5LjAwMDAwMDAwMDUsMS4yMjgxMDU0MDAwMDAwMDAyRTcsMTA0ODMxOS4wLDQwMTIwMTIuMDAwMDAwMDAxLDc1NDg0NC4wMDAwMDAwMDAxLDU2ODkyODMuMCwyLjA4NTE4MjAwMDAwMDAwMDRFNywyMjMzMTY4Ljk5OTk5OTk5OTUsNzA3ODUxNi4wLDYwODgyNy4wLDU4OTQxMjEuMCw1MzYzNjc1LjAsMTgwODM0My45OTk5OTk5OTk4LDQ5Mzc4MS45OTk5OTk5OTk5NAorNixTdW4gMzAgSmFuIDExLDYyNjkzMS45OTk5OTk5OTk5LDQ0NDcwOTkuOTk5OTk5OTk5LDI2NzM0MDAuMDAwMDAwMDAwNSw1MTMwNjMyLjAsMy4zODcxNjQ3OTk5OTk5OTlFNyw0MzAxMjYxLjAwMDAwMDAwMSwzNDA1NTY1LjAsNTcyMDU5LjAsNzgzNjAwLjAwMDAwMDAwMDEsMS41OTgyMzc4RTcsODE4NjQ1My4wLDEyMTE1MzcuMCwyOTI2MzI0LjAsMTI5Mzk1My4wLDEuMjQxOTI5M0U3LDYwODA0ODUuMCwyNjg4NDE4LjAwMDAwMDAwMDUsNDA0MTc2OC45OTk5OTk5OTk1LDQ0Njg5NzYuMCw2MzQ5MDk2Ljk5OTk5OTk5OSw1Mjk2NDg2LjAwMDAwMDAwMSwxMjc0OTIzLjAsOTkzODQ0My45OTk5OTk5OTgsNDkxOTQ3OS4wLDU1OTUyMTEuMCwyODQ0NjU4LjAsOTAyMTk1LjAsODA0OTMxMy4wLDY0MjIwMC4wLDE3MTEyNjIuOTk5OTk5OTk5OCwxMjM1Nzg2LjAwMDAwMDAwMDIsODQxNDM0OS45OTk5OTk5OTgsMTgxOTA0Ni4wMDAwMDAwMDAyLDE5OTgyNTcuMCwxLjg5NzY0NTdFNywxLjEzNTMxNEU3LDM0NTA2NTMuOTk5OTk5OTk5NSwzNDIxMzk5LjAsMS4yMjgxMDU0MDAwMDAwMDAyRTcsMTA0ODMxOS4wLDQwMTIwMTIuMDAwMDAwMDAwNSw3NTQ4NDQuMCw1Njg5MjgzLjAsMi4wODUxODJFNywyMjMzMTY4Ljk5OTk5OTk5OTUsNzA3ODUxNi4wLDYwODgyNi45OTk5OTk5OTk5LDU4OTQxMjEuMCw1MzYzNjc1LjAsMTgwODM0NC4wLDQ5Mzc4Mi4wCis3LE1vbiAzMSBKYW4gMTEsNjI2OTMxLjk5OTk5OTk5OTgsNDQ0NzA5OS45OTk5OTk5OTksMjY3MzQwMC4wLDUxMzA2MzIuMCwzLjM4NzE2NDc5OTk5OTk5OUU3LDQzMDEyNjEuMCwzNDA1NTY1LjAwMDAwMDAwMDUsNTcyMDU4Ljk5OTk5OTk5OTksNzgzNjAwLjAwMDAwMDAwMDEsMS41OTgyMzc4RTcsODE4NjQ1My4wLDEyMTE1MzcuMCwyOTI2MzI0LjAwMDAwMDAwMDUsMTI5Mzk1My4wLDEuMjQxOTI5M0U3LDYwODA0ODUuMCwyNjg4NDE4LjAsNDA0MTc2OC45OTk5OTk5OTk1LDQ0Njg5NzYuMCw2MzQ5MDk3LjAsNTI5NjQ4Ni4wMDAwMDAwMDEsMTI3NDkyMi45OTk5OTk5OTk4LDk5Mzg0NDQuMCw0OTE5NDc4Ljk5OTk5OTk5OSw1NTk1MjExLjAsMjg0NDY1Ny45OTk5OTk5OTk1LDkwMjE5NS4wLDgwNDkzMTIuOTk5OTk5OTk5LDY0MjIwMC4wLDE3MTEyNjIuOTk5OTk5OTk5OCwxMjM1Nzg2LjAwMDAwMDAwMDIsODQxNDM0OS45OTk5OTk5OTgsMTgxOTA0Ni4wMDAwMDAwMDAyLDE5OTgyNTcuMCwxLjg5NzY0NTY5OTk5OTk5OTZFNywxLjEzNTMxNEU3LDM0NTA2NTQuMCwzNDIxMzk5LjAsMS4yMjgxMDU0MDAwMDAwMDA0RTcsMTA0ODMxOC45OTk5OTk5OTk5LDQwMTIwMTIuMDAwMDAwMDAwNSw3NTQ4NDQuMDAwMDAwMDAwMSw1Njg5MjgzLjAsMi4wODUxODJFNywyMjMzMTY5LjAsNzA3ODUxNi4wLDYwODgyNy4wLDU4OTQxMjEuMDAwMDAwMDAxLDUzNjM2NzQuOTk5OTk5OTk5LDE4MDgzNDQuMDAwMDAwMDAwMiw0OTM3ODEuOTk5OTk5OTk5OTQKKzgsVHVlIDEgRmViIDExLDYyNjkzMS45OTk5OTk5OTk1LDQ0NDcxMDAuMDAwMDAwMDAxLDI2NzM0MDAuMDAwMDAwMDAwNSw1MTMwNjMxLjk5OTk5OTk5OSwzLjM4NzE2NDhFNyw0MzAxMjYxLjAsMzQwNTU2NS4wMDAwMDAwMDEsNTcyMDU5LjAwMDAwMDAwMDEsNzgzNjAwLjAwMDAwMDAwMDEsMS41OTgyMzc4RTcsODE4NjQ1Mi45OTk5OTk5OTksMTIxMTUzNi45OTk5OTk5OTk4LDI5MjYzMjMuOTk5OTk5OTk5NSwxMjkzOTUyLjk5OTk5OTk5OTUsMS4yNDE5MjkzRTcsNjA4MDQ4NS4wMDAwMDAwMDEsMjY4ODQxOC4wLDQwNDE3NjguOTk5OTk5OTk5NSw0NDY4OTc2LjAsNjM0OTA5Ny4wLDUyOTY0ODYuMDAwMDAwMDAyLDEyNzQ5MjMuMDAwMDAwMDAwNSw5OTM4NDQ0LjAsNDkxOTQ3OS4wMDAwMDAwMDEsNTU5NTIxMS4wLDI4NDQ2NTcuOTk5OTk5OTk5NSw5MDIxOTUuMCw4MDQ5MzEzLjAwMDAwMDAwMSw2NDIyMDAuMCwxNzExMjYyLjk5OTk5OTk5OTUsMTIzNTc4NS45OTk5OTk5OTk4LDg0MTQzNTAuMCwxODE5MDQ2LjAsMTk5ODI1Ni45OTk5OTk5OTk1LDEuODk3NjQ1N0U3LDEuMTM1MzE0MDAwMDAwMDAwMkU3LDM0NTA2NTMuOTk5OTk5OTk5LDM0MjEzOTkuMDAwMDAwMDAxNCwxLjIyODEwNTQwMDAwMDAwMDZFNywxMDQ4MzE4Ljk5OTk5OTk5OTgsNDAxMjAxMi4wMDAwMDAwMDEsNzU0ODQ0LjAwMDAwMDAwMDEsNTY4OTI4My4wLDIuMDg1MTgyRTcsMjIzMzE2OS4wLDcwNzg1MTYuMDAwMDAwMDAyLDYwODgyNi45OTk5OTk5OTk4LDU4OTQxMjEuMCw1MzYzNjc1LjAwMDAwMDAwMSwxODA4MzQzLjk5OTk5OTk5OTgsNDkzNzgxLjk5OTk5OTk5OTgKKzksV2VkIDIgRmViIDExLDYyNjkzMi4wMDAwMjY5OTA3LDQ0NDcxMDAuMDAwNTAwMjk4LDI2NzM0MDAuMDAwMDI2MTU1LDUxMzA2MzIuMDAwMjM0MjE1LDMuMzg3MTY0OEU3LDQzMDEyNjEuMDAwMjQ0NTMyLDM0MDU1NjUuMDAwMDQ2MDksNTcyMDU5LjAwMDA5MTIzNzIsNzgzNjAwLjAwMDAwMDE1ODgsMS41OTgyMzc4MDAwNjQ4NDI4RTcsODE4NjQ1My4wMDA0MjQ5NTIsMTIxMTUzNy4wMDAwOTk0NDM0LDI5MjYzMjQuMDAwNDM0NjgzLDEyOTM5NTMuMDAwMDIzOTIzMywxLjI0MTkyOTMwMDA0NzYwMDNFNyw2MDgwNDg1LjAwMDA1MDU1MiwyNjg4NDE4LjAwMDAwMDA4LDQwNDE3NjkuMDAwNDk1MTMzLDQ0Njg5NzYuMDAwMDU5MTkzLDYzNDkwOTcuMDAwMTQ0MDk3LDUyOTY0ODYuMDAwMTA4MjI4LDEyNzQ5MjMuMDAwMDEzNTM1LDk5Mzg0NDQuMDAwMjAxMDIyLDQ5MTk0NzkuMDAwMTc2MTk0LDU1OTUyMTEuMDAwMTMwODQ0LDI4NDQ2NTguMDAwMDEyOTAwNyw5MDIxOTUuMDAwMDE2Njg3OSw4MDQ5MzEzLjAwMDIwOTc1LDY0MjIwMC4wMDAwMDkwMDM4LDE3MTEyNjMuMDAwMDM0MTI3OSwxMjM1Nzg2LjAwMDAyMjk4MTMsODQxNDM1MC4wMDAxODc5ODIsMTgxOTA0Ni4wMDAwMzQ2NzQ4LDE5OTgyNTcuMDAwMjQ1MjYxLDEuODk3NjQ1NzAwMDQyMzA1RTcsMS4xMzUzMTQwMDAwMjEyMjRFNywzNDUwNjU0LjAwMDA0NTU3MTUsMzQyMTM5OS4wMDAwNzc2NTEsMS4yMjgxMDU0MDAwMjMyOThFNywxMDQ4MzE5LjAwMDAyNjcwMDgsNDAxMjAxMi4wMDAwMzM1Njg2LDc1NDg0NC4wMDAwMDY2MzA4LDU2ODkyODMuMDAwMTE4NTE1LDIuMDg1MTgyMDAwMDU5OTQ5NkU3LDIyMzMxNjkuMDAwMTA1MjczNCw3MDc4NTE2LjAwMDE2MDIyNyw2MDg4MjcuMDAwMDE0ODg0OSw1ODk0MTIxLjAwMDE2MzE1Niw1MzYzNjc1LjAwMDA3MTI5NSwxODA4MzQ0LjAwMDAwMzkyMDksNDkzNzgyLjAwMDAwNTk4MTcKKzEwLFRodSAzIEZlYiAxMSw2MjY5MzIuMDAwMDMyMzc2Myw0NDQ3MTAwLjAwMDUwNjA4MzUsMjY3MzQwMC4wMDAwMzAzNDk1LDUxMzA2MzIuMDAwMjgwODc5LDMuMzg3MTY0ODAwMDA4NDQ3NUU3LDQzMDEyNjEuMDAwMjkyOTczLDM0MDU1NjUuMDAwMDUzNDQyLDU3MjA1OS4wMDAxMDg1NDYzLDc4MzYwMC4wMDAwMDAxODA0LDEuNTk4MjM3ODAwMDc3Nzk5RTcsODE4NjQ1My4wMDA1MDkzMzksMTIxMTUzNy4wMDAxMTg5MjEsMjkyNjMyNC4wMDA0MzgxNzE0LDEyOTM5NTMuMDAwMDI4MDg0LDEuMjQxOTI5MzAwMDU3MTIzRTcsNjA4MDQ4NS4wMDAwNjEwODIsMjY4ODQxOC4wMDAwMDE3NjQsNDA0MTc2OS4wMDA1MDAyOTc2LDQ0Njg5NzYuMDAwMDY4NzUsNjM0OTA5Ny4wMDAxNzMyNzQsNTI5NjQ4Ni4wMDAxMjk4NzYsMTI3NDkyMy4wMDAwMTYwMzg1LDk5Mzg0NDQuMDAwMjQxMSw0OTE5NDc5LjAwMDIxMTQ4OSw1NTk1MjExLjAwMDE1NzM0LDI4NDQ2NTguMDAwMDE1NjUzNyw5MDIxOTUuMDAwMDE5NjAxMiw4MDQ5MzEzLjAwMDI1MjA5NCw2NDIyMDAuMDAwMDEwNDEyOSwxNzExMjYzLjAwMDAzODk4MzgsMTIzNTc4Ni4wMDAwMjcxMjUyLDg0MTQzNTAuMDAwMjI2MDMsMTgxOTA0Ni4wMDAwNDEzMDc0LDE5OTgyNTcuMDAwMjkyNDk1NCwxLjg5NzY0NTcwMDA1MDg2N0U3LDEuMTM1MzE0MDAwMDI1MTI3RTcsMzQ1MDY1NC4wMDAwNTI5NDEsMzQyMTM5OS4wMDAwOTMzNzMsMS4yMjgxMDU0MDAwMjc3MjI1RTcsMTA0ODMxOS4wMDAwMzIwOTU4LDQwMTIwMTIuMDAwMDQwMzIzNSw3NTQ4NDQuMDAwMDA4MDAyMiw1Njg5MjgzLjAwMDE0MjMzMSwyLjA4NTE4MjAwMDA3MjAxM0U3LDIyMzMxNjkuMDAwMTI2MjMxNSw3MDc4NTE2LjAwMDE5MjY2OCw2MDg4MjcuMDAwMDE2MzM2Myw1ODk0MTIxLjAwMDE5NjAyNSw1MzYzNjc1LjAwMDA4Mjc4MjUsMTgwODM0NC4wMDAwMDQ3MjU4LDQ5Mzc4Mi4wMDAwMDcwMDAxNworMTEsRnJpIDQgRmViIDExLDYyNjkzMi4wMDAwMzIzNzYzLDQ0NDcxMDAuMDAwNTA2MDgzNSwyNjczNDAwLjAwMDAzMDM0OTUsNTEzMDYzMi4wMDAyODA4NzksMy4zODcxNjQ4MDAwMDg0NDdFNyw0MzAxMjYxLjAwMDI5Mjk3MywzNDA1NTY1LjAwMDA1MzQ0Miw1NzIwNTkuMDAwMTA4NTQ2Myw3ODM2MDAuMDAwMDAwMTgwNCwxLjU5ODIzNzgwMDA3Nzc5OUU3LDgxODY0NTMuMDAwNTA5MzQsMTIxMTUzNy4wMDAxMTg5MjEsMjkyNjMyNC4wMDA0MzgxNzEsMTI5Mzk1My4wMDAwMjgwODQsMS4yNDE5MjkzMDAwNTcxMjI5RTcsNjA4MDQ4NS4wMDAwNjEwODIsMjY4ODQxOC4wMDAwMDE3NjQsNDA0MTc2OS4wMDA1MDAyOTcsNDQ2ODk3Ni4wMDAwNjg3NSw2MzQ5MDk3LjAwMDE3MzI3NCw1Mjk2NDg2LjAwMDEyOTg3NiwxMjc0OTIzLjAwMDAxNjAzODUsOTkzODQ0NC4wMDAyNDExLDQ5MTk0NzkuMDAwMjExNDg5LDU1OTUyMTEuMDAwMTU3MzQxLDI4NDQ2NTguMDAwMDE1NjUzNyw5MDIxOTUuMDAwMDE5NjAxMiw4MDQ5MzEzLjAwMDI1MjA5NCw2NDIyMDAuMDAwMDEwNDEyOSwxNzExMjYzLjAwMDAzODk4MzgsMTIzNTc4Ni4wMDAwMjcxMjUyLDg0MTQzNTAuMDAwMjI2MDMsMTgxOTA0Ni4wMDAwNDEzMDc0LDE5OTgyNTcuMDAwMjkyNDk1NiwxLjg5NzY0NTcwMDA1MDg2N0U3LDEuMTM1MzE0MDAwMDI1MTI3RTcsMzQ1MDY1NC4wMDAwNTI5NDEsMzQyMTM5OS4wMDAwOTMzNzMsMS4yMjgxMDU0MDAwMjc3MjI1RTcsMTA0ODMxOS4wMDAwMzIwOTU4LDQwMTIwMTIuMDAwMDQwMzIzNSw3NTQ4NDQuMDAwMDA4MDAyMiw1Njg5MjgzLjAwMDE0MjMzMSwyLjA4NTE4MjAwMDA3MjAxMzJFNywyMjMzMTY5LjAwMDEyNjIzMTUsNzA3ODUxNi4wMDAxOTI2NjgsNjA4ODI3LjAwMDAxNjMzNjMsNTg5NDEyMS4wMDAxOTYwMjUsNTM2MzY3NS4wMDAwODI3ODI1LDE4MDgzNDQuMDAwMDA0NzI1OCw0OTM3ODIuMDAwMDA3MDAwMTcKKzEyLFNhdCA1IEZlYiAxMSw2MjY5MzIuMDAwMDMyMzg0LDQ0NDcxMDAuMDAwNTA2MDkyLDI2NzM0MDAuMDAwMDMwMzU1NSw1MTMwNjMyLjAwMDI4MDk0NywzLjM4NzE2NDgwMDAwODQ1N0U3LDQzMDEyNjEuMDAwMjkzMDQyNSwzNDA1NTY1LjAwMDA1MzQ1MjMsNTcyMDU5LjAwMDEwODU3MSw3ODM2MDAuMDAwMDAwMTgwNiwxLjU5ODIzNzgwMDA3NzgxNzRFNyw4MTg2NDUzLjAwMDUwOTQ2LDEyMTE1MzcuMDAwMTE4OTQ5LDI5MjYzMjQuMDAwNDM4MTc2LDEyOTM5NTMuMDAwMDI4MDksMS4yNDE5MjkzMDAwNTcxMzY2RTcsNjA4MDQ4NS4wMDAwNjEwOTcsMjY4ODQxOC4wMDAwMDE3NjYzLDQwNDE3NjkuMDAwNTAwMzA1LDQ0Njg5NzYuMDAwMDY4NzY0LDYzNDkwOTcuMDAwMTczMzE2LDUyOTY0ODYuMDAwMTI5OTA2LDEyNzQ5MjMuMDAwMDE2MDQyLDk5Mzg0NDQuMDAwMjQxMTU5LDQ5MTk0NzkuMDAwMjExNTQsNTU5NTIxMS4wMDAxNTczNzksMjg0NDY1OC4wMDAwMTU2NTc0LDkwMjE5NS4wMDAwMTk2MDU0LDgwNDkzMTMuMDAwMjUyMTU1LDY0MjIwMC4wMDAwMTA0MTQ5LDE3MTEyNjMuMDAwMDM4OTkwOCwxMjM1Nzg2LjAwMDAyNzEzMTMsODQxNDM1MC4wMDAyMjYwODQsMTgxOTA0Ni4wMDAwNDEzMTcsMTk5ODI1Ny4wMDAyOTI1NjI5LDEuODk3NjQ1NzAwMDUwODc5M0U3LDEuMTM1MzE0MDAwMDI1MTMyN0U3LDM0NTA2NTQuMDAwMDUyOTUxNywzNDIxMzk5LjAwMDA5MzM5NiwxLjIyODEwNTQwMDAyNzcyODhFNywxMDQ4MzE5LjAwMDAzMjEwMzYsNDAxMjAxMi4wMDAwNDAzMzMsNzU0ODQ0LjAwMDAwODAwNCw1Njg5MjgzLjAwMDE0MjM2NiwyLjA4NTE4MjAwMDA3MjAzMDRFNywyMjMzMTY5LjAwMDEyNjI2MTMsNzA3ODUxNi4wMDAxOTI3MTUsNjA4ODI3LjAwMDAxNjMzODUsNTg5NDEyMS4wMDAxOTYwNzIsNTM2MzY3NS4wMDAwODI3OTksMTgwODM0NC4wMDAwMDQ3MjcsNDkzNzgyLjAwMDAwNzAwMTcKKzEzLFN1biA2IEZlYiAxMSw2MjY5MzIuMDAwMDMyMzg0LDQ0NDcxMDAuMDAwNTA2MDkyLDI2NzM0MDAuMDAwMDMwMzU2LDUxMzA2MzIuMDAwMjgwOTQ2NSwzLjM4NzE2NDgwMDAwODQ1N0U3LDQzMDEyNjEuMDAwMjkzMDQyNSwzNDA1NTY1LjAwMDA1MzQ1Myw1NzIwNTkuMDAwMTA4NTcxLDc4MzYwMC4wMDAwMDAxODA2LDEuNTk4MjM3ODAwMDc3ODE3NEU3LDgxODY0NTMuMDAwNTA5NDU5NSwxMjExNTM3LjAwMDExODk0OSwyOTI2MzI0LjAwMDQzODE3NiwxMjkzOTUzLjAwMDAyODA5LDEuMjQxOTI5MzAwMDU3MTM2NkU3LDYwODA0ODUuMDAwMDYxMDk2LDI2ODg0MTguMDAwMDAxNzY2Myw0MDQxNzY5LjAwMDUwMDMwNSw0NDY4OTc2LjAwMDA2ODc2Myw2MzQ5MDk3LjAwMDE3MzMxNyw1Mjk2NDg2LjAwMDEyOTkwNiwxMjc0OTIzLjAwMDAxNjA0Miw5OTM4NDQ0LjAwMDI0MTE1OSw0OTE5NDc5LjAwMDIxMTU0LDU1OTUyMTEuMDAwMTU3Mzc5LDI4NDQ2NTguMDAwMDE1NjU3NCw5MDIxOTUuMDAwMDE5NjA1Myw4MDQ5MzEzLjAwMDI1MjE1Niw2NDIyMDAuMDAwMDEwNDE0NywxNzExMjYzLjAwMDAzODk5MDgsMTIzNTc4Ni4wMDAwMjcxMzEzLDg0MTQzNTAuMDAwMjI2MDg0LDE4MTkwNDYuMDAwMDQxMzE3MiwxOTk4MjU3LjAwMDI5MjU2MjksMS44OTc2NDU3MDAwNTA4NzkzRTcsMS4xMzUzMTQwMDAwMjUxMzI3RTcsMzQ1MDY1NC4wMDAwNTI5NTE3LDM0MjEzOTkuMDAwMDkzMzk2LDEuMjI4MTA1NDAwMDI3NzI4OEU3LDEwNDgzMTkuMDAwMDMyMTAzNiw0MDEyMDEyLjAwMDA0MDMzMzMsNzU0ODQ0LjAwMDAwODAwNDEsNTY4OTI4My4wMDAxNDIzNjYsMi4wODUxODIwMDAwNzIwMzA0RTcsMjIzMzE2OS4wMDAxMjYyNjEzLDcwNzg1MTYuMDAwMTkyNzE1LDYwODgyNy4wMDAwMTYzMzg1LDU4OTQxMjEuMDAwMTk2MDcyLDUzNjM2NzUuMDAwMDgyNzk5LDE4MDgzNDQuMDAwMDA0NzI3LDQ5Mzc4Mi4wMDAwMDcwMDE3CisxNCxNb24gNyBGZWIgMTEsNjI2OTMyLjAwMDAzMjM4NCw0NDQ3MTAwLjAwMDUwNjA5MiwyNjczNDAwLjAwMDAzMDM1Niw1MTMwNjMyLjAwMDI4MDk0NywzLjM4NzE2NDgwMDAwODQ1N0U3LDQzMDEyNjEuMDAwMjkzMDQyNSwzNDA1NTY1LjAwMDA1MzQ1MjMsNTcyMDU5LjAwMDEwODU3MDksNzgzNjAwLjAwMDAwMDE4MDYsMS41OTgyMzc4MDAwNzc4MTc0RTcsODE4NjQ1My4wMDA1MDk0NiwxMjExNTM3LjAwMDExODk0OSwyOTI2MzI0LjAwMDQzODE3NiwxMjkzOTUzLjAwMDAyODA5LDEuMjQxOTI5MzAwMDU3MTM2NUU3LDYwODA0ODUuMDAwMDYxMDk2LDI2ODg0MTguMDAwMDAxNzY2Myw0MDQxNzY5LjAwMDUwMDMwNTYsNDQ2ODk3Ni4wMDAwNjg3NjQsNjM0OTA5Ny4wMDAxNzMzMTYsNTI5NjQ4Ni4wMDAxMjk5MDU1LDEyNzQ5MjMuMDAwMDE2MDQyLDk5Mzg0NDQuMDAwMjQxMTU5LDQ5MTk0NzkuMDAwMjExNTQsNTU5NTIxMS4wMDAxNTczNzksMjg0NDY1OC4wMDAwMTU2NTcsOTAyMTk1LjAwMDAxOTYwNTQsODA0OTMxMy4wMDAyNTIxNTUsNjQyMjAwLjAwMDAxMDQxNDcsMTcxMTI2My4wMDAwMzg5OTA4LDEyMzU3ODYuMDAwMDI3MTMxMyw4NDE0MzUwLjAwMDIyNjA4NCwxODE5MDQ2LjAwMDA0MTMxNywxOTk4MjU3LjAwMDI5MjU2MywxLjg5NzY0NTcwMDA1MDg3OTNFNywxLjEzNTMxNDAwMDAyNTEzMjdFNywzNDUwNjU0LjAwMDA1Mjk1MiwzNDIxMzk5LjAwMDA5MzM5NiwxLjIyODEwNTQwMDAyNzcyODhFNywxMDQ4MzE5LjAwMDAzMjEwMzYsNDAxMjAxMi4wMDAwNDAzMzMzLDc1NDg0NC4wMDAwMDgwMDQsNTY4OTI4My4wMDAxNDIzNjUsMi4wODUxODIwMDAwNzIwMzA0RTcsMjIzMzE2OS4wMDAxMjYyNjEzLDcwNzg1MTYuMDAwMTkyNzE1LDYwODgyNy4wMDAwMTYzMzg1LDU4OTQxMjEuMDAwMTk2MDcyLDUzNjM2NzUuMDAwMDgyNzk5LDE4MDgzNDQuMDAwMDA0NzI3LDQ5Mzc4Mi4wMDAwMDcwMDE3CisxNSxUdWUgOCBGZWIgMTEsNjI2OTMyLjAwMDAzMjM4NCw0NDQ3MTAwLjAwMDUwNjA5MiwyNjczNDAwLjAwMDAzMDM1Niw1MTMwNjMyLjAwMDI4MDk0NjUsMy4zODcxNjQ4MDAwMDg0NTdFNyw0MzAxMjYxLjAwMDI5MzA0MjUsMzQwNTU2NS4wMDAwNTM0NTMsNTcyMDU5LjAwMDEwODU3MSw3ODM2MDAuMDAwMDAwMTgwNiwxLjU5ODIzNzgwMDA3NzgxNzRFNyw4MTg2NDUzLjAwMDUwOTQ2LDEyMTE1MzcuMDAwMTE4OTQ5LDI5MjYzMjQuMDAwNDM4MTc1NiwxMjkzOTUzLjAwMDAyODA5LDEuMjQxOTI5MzAwMDU3MTM2NUU3LDYwODA0ODUuMDAwMDYxMDk2LDI2ODg0MTguMDAwMDAxNzY2Myw0MDQxNzY5LjAwMDUwMDMwNTYsNDQ2ODk3Ni4wMDAwNjg3NjMsNjM0OTA5Ny4wMDAxNzMzMTYsNTI5NjQ4Ni4wMDAxMjk5MDU1LDEyNzQ5MjMuMDAwMDE2MDQyLDk5Mzg0NDQuMDAwMjQxMTU5LDQ5MTk0NzkuMDAwMjExNTQsNTU5NTIxMS4wMDAxNTczNzksMjg0NDY1OC4wMDAwMTU2NTcsOTAyMTk1LjAwMDAxOTYwNTQsODA0OTMxMy4wMDAyNTIxNTYsNjQyMjAwLjAwMDAxMDQxNDcsMTcxMTI2My4wMDAwMzg5OTA1LDEyMzU3ODYuMDAwMDI3MTMxMyw4NDE0MzUwLjAwMDIyNjA4NCwxODE5MDQ2LjAwMDA0MTMxNywxOTk4MjU3LjAwMDI5MjU2MjksMS44OTc2NDU3MDAwNTA4NzlFNywxLjEzNTMxNDAwMDAyNTEzMjdFNywzNDUwNjU0LjAwMDA1Mjk1MiwzNDIxMzk5LjAwMDA5MzM5NiwxLjIyODEwNTQwMDAyNzcyODhFNywxMDQ4MzE5LjAwMDAzMjEwMzYsNDAxMjAxMi4wMDAwNDAzMzMzLDc1NDg0NC4wMDAwMDgwMDQxLDU2ODkyODMuMDAwMTQyMzY1LDIuMDg1MTgyMDAwMDcyMDMwNEU3LDIyMzMxNjkuMDAwMTI2MjYxMyw3MDc4NTE2LjAwMDE5MjcxNSw2MDg4MjcuMDAwMDE2MzM4NSw1ODk0MTIxLjAwMDE5NjA3Miw1MzYzNjc1LjAwMDA4Mjc5OCwxODA4MzQ0LjAwMDAwNDcyNjcsNDkzNzgyLjAwMDAwNzAwMTcKKzE2LFdlZCA5IEZlYiAxMSw2MjY5MzIuMDAwMDMyMzg0LDQ0NDcxMDAuMDAwNTA2MDkxLDI2NzM0MDAuMDAwMDMwMzU2LDUxMzA2MzIuMDAwMjgwOTQ3LDMuMzg3MTY0ODAwMDA4NDU3RTcsNDMwMTI2MS4wMDAyOTMwNDI1LDM0MDU1NjUuMDAwMDUzNDUzLDU3MjA1OS4wMDAxMDg1NzEsNzgzNjAwLjAwMDAwMDE4MDQsMS41OTgyMzc4MDAwNzc4MTc0RTcsODE4NjQ1My4wMDA1MDk0NiwxMjExNTM3LjAwMDExODk0OSwyOTI2MzI0LjAwMDQzODE3NTYsMTI5Mzk1My4wMDAwMjgwOTAzLDEuMjQxOTI5MzAwMDU3MTM2NUU3LDYwODA0ODUuMDAwMDYxMDk2LDI2ODg0MTguMDAwMDAxNzY2Myw0MDQxNzY5LjAwMDUwMDMwNTYsNDQ2ODk3Ni4wMDAwNjg3NjQsNjM0OTA5Ny4wMDAxNzMzMTcsNTI5NjQ4Ni4wMDAxMjk5MDU1LDEyNzQ5MjMuMDAwMDE2MDQxOCw5OTM4NDQ0LjAwMDI0MTE1Nyw0OTE5NDc5LjAwMDIxMTU0LDU1OTUyMTEuMDAwMTU3Mzc5LDI4NDQ2NTguMDAwMDE1NjU3LDkwMjE5NS4wMDAwMTk2MDU0LDgwNDkzMTMuMDAwMjUyMTU2LDY0MjIwMC4wMDAwMTA0MTQ3LDE3MTEyNjMuMDAwMDM4OTkwNSwxMjM1Nzg2LjAwMDAyNzEzMTMsODQxNDM1MC4wMDAyMjYwODQsMTgxOTA0Ni4wMDAwNDEzMTcsMTk5ODI1Ny4wMDAyOTI1NjI5LDEuODk3NjQ1NzAwMDUwODc5M0U3LDEuMTM1MzE0MDAwMDI1MTMyNUU3LDM0NTA2NTQuMDAwMDUyOTUyLDM0MjEzOTkuMDAwMDkzMzk2LDEuMjI4MTA1NDAwMDI3NzI4OEU3LDEwNDgzMTkuMDAwMDMyMTAzNSw0MDEyMDEyLjAwMDA0MDMzMzcsNzU0ODQ0LjAwMDAwODAwNDEsNTY4OTI4My4wMDAxNDIzNjUsMi4wODUxODIwMDAwNzIwMzA0RTcsMjIzMzE2OS4wMDAxMjYyNjEsNzA3ODUxNi4wMDAxOTI3MTUsNjA4ODI3LjAwMDAxNjMzODUsNTg5NDEyMS4wMDAxOTYwNzIsNTM2MzY3NS4wMDAwODI3OTgsMTgwODM0NC4wMDAwMDQ3MjY3LDQ5Mzc4Mi4wMDAwMDcwMDE3CisxNyxUaHUgMTAgRmViIDExLDYyNjkzMi4wMDAwMzIzODQsNDQ0NzEwMC4wMDA1MDYwOTEsMjY3MzQwMC4wMDAwMzAzNTYsNTEzMDYzMi4wMDAyODA5NDcsMy4zODcxNjQ4MDAwMDg0NTdFNyw0MzAxMjYxLjAwMDI5MzA0MjUsMzQwNTU2NS4wMDAwNTM0NTMsNTcyMDU5LjAwMDEwODU3MSw3ODM2MDAuMDAwMDAwMTgwNiwxLjU5ODIzNzgwMDA3NzgxNzRFNyw4MTg2NDUzLjAwMDUwOTQ2LDEyMTE1MzcuMDAwMTE4OTQ5LDI5MjYzMjQuMDAwNDM4MTc1NiwxMjkzOTUzLjAwMDAyODA5MDMsMS4yNDE5MjkzMDAwNTcxMzY1RTcsNjA4MDQ4NS4wMDAwNjEwOTYsMjY4ODQxOC4wMDAwMDE3NjY3LDQwNDE3NjkuMDAwNTAwMzA1Niw0NDY4OTc2LjAwMDA2ODc2Myw2MzQ5MDk3LjAwMDE3MzMxNyw1Mjk2NDg2LjAwMDEyOTkwNiwxMjc0OTIzLjAwMDAxNjA0MTgsOTkzODQ0NC4wMDAyNDExNTcsNDkxOTQ3OS4wMDAyMTE1NCw1NTk1MjExLjAwMDE1NzM3OSwyODQ0NjU4LjAwMDAxNTY1Nyw5MDIxOTUuMDAwMDE5NjA1NCw4MDQ5MzEzLjAwMDI1MjE1Niw2NDIyMDAuMDAwMDEwNDE0NywxNzExMjYzLjAwMDAzODk5MDUsMTIzNTc4Ni4wMDAwMjcxMzEzLDg0MTQzNTAuMDAwMjI2MDg0LDE4MTkwNDYuMDAwMDQxMzE2NywxOTk4MjU3LjAwMDI5MjU2MywxLjg5NzY0NTcwMDA1MDg3OTNFNywxLjEzNTMxNDAwMDAyNTEzMjVFNywzNDUwNjU0LjAwMDA1Mjk1MiwzNDIxMzk5LjAwMDA5MzM5NiwxLjIyODEwNTQwMDAyNzcyODhFNywxMDQ4MzE5LjAwMDAzMjEwMzUsNDAxMjAxMi4wMDAwNDAzMzMzLDc1NDg0NC4wMDAwMDgwMDQxLDU2ODkyODMuMDAwMTQyMzY1LDIuMDg1MTgyMDAwMDcyMDMwNEU3LDIyMzMxNjkuMDAwMTI2MjYxMyw3MDc4NTE2LjAwMDE5MjcxNSw2MDg4MjcuMDAwMDE2MzM4NSw1ODk0MTIxLjAwMDE5NjA3Miw1MzYzNjc1LjAwMDA4Mjc5OCwxODA4MzQ0LjAwMDAwNDcyNjcsNDkzNzgyLjAwMDAwNzAwMTcKKzE4LEZyaSAxMSBGZWIgMTEsNjI2OTMyLjAwMDAzMjM4MzgsNDQ0NzEwMC4wMDA1MDYwOTEsMjY3MzQwMC4wMDAwMzAzNTYsNTEzMDYzMi4wMDAyODA5NDcsMy4zODcxNjQ4MDAwMDg0NTdFNyw0MzAxMjYxLjAwMDI5MzA0MjUsMzQwNTU2NS4wMDAwNTM0NTMsNTcyMDU5LjAwMDEwODU3MSw3ODM2MDAuMDAwMDAwMTgwNiwxLjU5ODIzNzgwMDA3NzgxNzRFNyw4MTg2NDUzLjAwMDUwOTQ2LDEyMTE1MzcuMDAwMTE4OTQ5LDI5MjYzMjQuMDAwNDM4MTc1NiwxMjkzOTUzLjAwMDAyODA5MDMsMS4yNDE5MjkzMDAwNTcxMzY1RTcsNjA4MDQ4NS4wMDAwNjEwOTYsMjY4ODQxOC4wMDAwMDE3NjYzLDQwNDE3NjkuMDAwNTAwMzA1LDQ0Njg5NzYuMDAwMDY4NzYzLDYzNDkwOTcuMDAwMTczMzE4LDUyOTY0ODYuMDAwMTI5OTA2LDEyNzQ5MjMuMDAwMDE2MDQyLDk5Mzg0NDQuMDAwMjQxMTU3LDQ5MTk0NzkuMDAwMjExNTQsNTU5NTIxMS4wMDAxNTczNzksMjg0NDY1OC4wMDAwMTU2NTcsOTAyMTk1LjAwMDAxOTYwNTUsODA0OTMxMy4wMDAyNTIxNTYsNjQyMjAwLjAwMDAxMDQxNDcsMTcxMTI2My4wMDAwMzg5OTA1LDEyMzU3ODYuMDAwMDI3MTMxLDg0MTQzNTAuMDAwMjI2MDg0LDE4MTkwNDYuMDAwMDQxMzE2NywxOTk4MjU3LjAwMDI5MjU2MywxLjg5NzY0NTcwMDA1MDg3OUU3LDEuMTM1MzE0MDAwMDI1MTMyNUU3LDM0NTA2NTQuMDAwMDUyOTUyLDM0MjEzOTkuMDAwMDkzMzk2LDEuMjI4MTA1NDAwMDI3NzI4OEU3LDEwNDgzMTkuMDAwMDMyMTAzNSw0MDEyMDEyLjAwMDA0MDMzMzMsNzU0ODQ0LjAwMDAwODAwNDEsNTY4OTI4My4wMDAxNDIzNjUsMi4wODUxODIwMDAwNzIwMzA3RTcsMjIzMzE2OS4wMDAxMjYyNjEsNzA3ODUxNi4wMDAxOTI3MTUsNjA4ODI3LjAwMDAxNjMzODcsNTg5NDEyMS4wMDAxOTYwNzIsNTM2MzY3NS4wMDAwODI3OTgsMTgwODM0NC4wMDAwMDQ3MjcsNDkzNzgyLjAwMDAwNzAwMTcKKzE5LFNhdCAxMiBGZWIgMTEsNjI2OTMyLjAwMDAzMjM4MzgsNDQ0NzEwMC4wMDA1MDYwOTIsMjY3MzQwMC4wMDAwMzAzNTYsNTEzMDYzMi4wMDAyODA5NDcsMy4zODcxNjQ4MDAwMDg0NTdFNyw0MzAxMjYxLjAwMDI5MzA0MjUsMzQwNTU2NS4wMDAwNTM0NTMsNTcyMDU5LjAwMDEwODU3MSw3ODM2MDAuMDAwMDAwMTgwNiwxLjU5ODIzNzgwMDA3NzgxNzJFNyw4MTg2NDUzLjAwMDUwOTQ2LDEyMTE1MzcuMDAwMTE4OTQ5MiwyOTI2MzI0LjAwMDQzODE3NTYsMTI5Mzk1My4wMDAwMjgwOTAzLDEuMjQxOTI5MzAwMDU3MTM2NUU3LDYwODA0ODUuMDAwMDYxMDk2LDI2ODg0MTguMDAwMDAxNzY2Myw0MDQxNzY5LjAwMDUwMDMwNSw0NDY4OTc2LjAwMDA2ODc2Myw2MzQ5MDk3LjAwMDE3MzMxNyw1Mjk2NDg2LjAwMDEyOTkwNiwxMjc0OTIzLjAwMDAxNjA0MTgsOTkzODQ0NC4wMDAyNDExNTcsNDkxOTQ3OS4wMDAyMTE1NCw1NTk1MjExLjAwMDE1NzM3OSwyODQ0NjU4LjAwMDAxNTY1Nyw5MDIxOTUuMDAwMDE5NjA1NSw4MDQ5MzEzLjAwMDI1MjE1Niw2NDIyMDAuMDAwMDEwNDE0NywxNzExMjYzLjAwMDAzODk5MDUsMTIzNTc4Ni4wMDAwMjcxMzEsODQxNDM1MC4wMDAyMjYwODQsMTgxOTA0Ni4wMDAwNDEzMTY3LDE5OTgyNTcuMDAwMjkyNTYyOSwxLjg5NzY0NTcwMDA1MDg3OUU3LDEuMTM1MzE0MDAwMDI1MTMyNUU3LDM0NTA2NTQuMDAwMDUyOTUxNywzNDIxMzk5LjAwMDA5MzM5NiwxLjIyODEwNTQwMDAyNzcyODZFNywxMDQ4MzE5LjAwMDAzMjEwMzUsNDAxMjAxMi4wMDAwNDAzMzMzLDc1NDg0NC4wMDAwMDgwMDQzLDU2ODkyODMuMDAwMTQyMzY1LDIuMDg1MTgyMDAwMDcyMDMwN0U3LDIyMzMxNjkuMDAwMTI2MjYxMyw3MDc4NTE2LjAwMDE5MjcxNSw2MDg4MjcuMDAwMDE2MzM4Nyw1ODk0MTIxLjAwMDE5NjA3MSw1MzYzNjc1LjAwMDA4Mjc5OCwxODA4MzQ0LjAwMDAwNDcyNjcsNDkzNzgyLjAwMDAwNzAwMTcKKzIwLFN1biAxMyBGZWIgMTEsNjI2OTMyLjAwMDAzMjM4NCw0NDQ3MTAwLjAwMDUwNjA5MiwyNjczNDAwLjAwMDAzMDM1Niw1MTMwNjMyLjAwMDI4MDk0OCwzLjM4NzE2NDgwMDAwODQ1OEU3LDQzMDEyNjEuMDAwMjkzMDQyNSwzNDA1NTY1LjAwMDA1MzQ1Myw1NzIwNTkuMDAwMTA4NTcxLDc4MzYwMC4wMDAwMDAxODA2LDEuNTk4MjM3ODAwMDc3ODE3MkU3LDgxODY0NTMuMDAwNTA5NDYsMTIxMTUzNy4wMDAxMTg5NDkyLDI5MjYzMjQuMDAwNDM4MTc1NiwxMjkzOTUzLjAwMDAyODA5MDMsMS4yNDE5MjkzMDAwNTcxMzY1RTcsNjA4MDQ4NS4wMDAwNjEwOTYsMjY4ODQxOC4wMDAwMDE3NjYzLDQwNDE3NjkuMDAwNTAwMzA1LDQ0Njg5NzYuMDAwMDY4NzYzLDYzNDkwOTcuMDAwMTczMzE3LDUyOTY0ODYuMDAwMTI5OTA2LDEyNzQ5MjMuMDAwMDE2MDQxOCw5OTM4NDQ0LjAwMDI0MTE1Nyw0OTE5NDc5LjAwMDIxMTU0LDU1OTUyMTEuMDAwMTU3Mzc5LDI4NDQ2NTguMDAwMDE1NjU3LDkwMjE5NS4wMDAwMTk2MDU1LDgwNDkzMTMuMDAwMjUyMTU2LDY0MjIwMC4wMDAwMTA0MTQ5LDE3MTEyNjMuMDAwMDM4OTkwNSwxMjM1Nzg2LjAwMDAyNzEzMTMsODQxNDM1MC4wMDAyMjYwODQsMTgxOTA0Ni4wMDAwNDEzMTcsMTk5ODI1Ny4wMDAyOTI1NjI5LDEuODk3NjQ1NzAwMDUwODc5RTcsMS4xMzUzMTQwMDAwMjUxMzI1RTcsMzQ1MDY1NC4wMDAwNTI5NTE3LDM0MjEzOTkuMDAwMDkzMzk2LDEuMjI4MTA1NDAwMDI3NzI4OEU3LDEwNDgzMTkuMDAwMDMyMTAzNSw0MDEyMDEyLjAwMDA0MDMzMzMsNzU0ODQ0LjAwMDAwODAwNDMsNTY4OTI4My4wMDAxNDIzNjUsMi4wODUxODIwMDAwNzIwMzA3RTcsMjIzMzE2OS4wMDAxMjYyNjEzLDcwNzg1MTYuMDAwMTkyNzE1LDYwODgyNy4wMDAwMTYzMzg3LDU4OTQxMjEuMDAwMTk2MDcyLDUzNjM2NzUuMDAwMDgyNzk4LDE4MDgzNDQuMDAwMDA0NzI2Nyw0OTM3ODIuMDAwMDA3MDAxNworMjEsTW9uIDE0IEZlYiAxMSw2MjY5MzIuMDAwMDMyMzg0LDQ0NDcxMDAuMDAwNTA2MDkyLDI2NzM0MDAuMDAwMDMwMzU2NSw1MTMwNjMyLjAwMDI4MDk0NywzLjM4NzE2NDgwMDAwODQ1OEU3LDQzMDEyNjEuMDAwMjkzMDQyNSwzNDA1NTY1LjAwMDA1MzQ1Myw1NzIwNTkuMDAwMTA4NTcxLDc4MzYwMC4wMDAwMDAxODA2LDEuNTk4MjM3ODAwMDc3ODE3NEU3LDgxODY0NTMuMDAwNTA5NDYsMTIxMTUzNy4wMDAxMTg5NDkyLDI5MjYzMjQuMDAwNDM4MTc1LDEyOTM5NTMuMDAwMDI4MDkwNiwxLjI0MTkyOTMwMDA1NzEzNjVFNyw2MDgwNDg1LjAwMDA2MTA5NiwyNjg4NDE4LjAwMDAwMTc2NjMsNDA0MTc2OS4wMDA1MDAzMDU2LDQ0Njg5NzYuMDAwMDY4NzYzLDYzNDkwOTcuMDAwMTczMzE3LDUyOTY0ODYuMDAwMTI5OTA2LDEyNzQ5MjMuMDAwMDE2MDQxOCw5OTM4NDQ0LjAwMDI0MTE1Nyw0OTE5NDc5LjAwMDIxMTUzOSw1NTk1MjExLjAwMDE1NzM3OSwyODQ0NjU4LjAwMDAxNTY1Nyw5MDIxOTUuMDAwMDE5NjA1NSw4MDQ5MzEzLjAwMDI1MjE1Niw2NDIyMDAuMDAwMDEwNDE0NywxNzExMjYzLjAwMDAzODk5MDUsMTIzNTc4Ni4wMDAwMjcxMzEzLDg0MTQzNTAuMDAwMjI2MDg0LDE4MTkwNDYuMDAwMDQxMzE3LDE5OTgyNTcuMDAwMjkyNTYyOSwxLjg5NzY0NTcwMDA1MDg3OUU3LDEuMTM1MzE0MDAwMDI1MTMyNUU3LDM0NTA2NTQuMDAwMDUyOTUxNywzNDIxMzk5LjAwMDA5MzM5NiwxLjIyODEwNTQwMDAyNzcyODZFNywxMDQ4MzE5LjAwMDAzMjEwMzQsNDAxMjAxMi4wMDAwNDAzMzMzLDc1NDg0NC4wMDAwMDgwMDQzLDU2ODkyODMuMDAwMTQyMzY1LDIuMDg1MTgyMDAwMDcyMDMwN0U3LDIyMzMxNjkuMDAwMTI2MjYxMyw3MDc4NTE2LjAwMDE5MjcxNSw2MDg4MjcuMDAwMDE2MzM4Nyw1ODk0MTIxLjAwMDE5NjA3Miw1MzYzNjc1LjAwMDA4Mjc5OCwxODA4MzQ0LjAwMDAwNDcyNyw0OTM3ODIuMDAwMDA3MDAxNworMjIsVHVlIDE1IEZlYiAxMSw2MjY5MzIuMDAwMDMyMzg0LDQ0NDcxMDAuMDAwNTA2MDkyLDI2NzM0MDAuMDAwMDMwMzU2NSw1MTMwNjMyLjAwMDI4MDk0OCwzLjM4NzE2NDgwMDAwODQ1OEU3LDQzMDEyNjEuMDAwMjkzMDQyNSwzNDA1NTY1LjAwMDA1MzQ1Myw1NzIwNTkuMDAwMTA4NTcxLDc4MzYwMC4wMDAwMDAxODA2LDEuNTk4MjM3ODAwMDc3ODE3NEU3LDgxODY0NTMuMDAwNTA5NDYsMTIxMTUzNy4wMDAxMTg5NDkyLDI5MjYzMjQuMDAwNDM4MTc1LDEyOTM5NTMuMDAwMDI4MDkwNiwxLjI0MTkyOTMwMDA1NzEzNjVFNyw2MDgwNDg1LjAwMDA2MTA5NiwyNjg4NDE4LjAwMDAwMTc2Niw0MDQxNzY5LjAwMDUwMDMwNTYsNDQ2ODk3Ni4wMDAwNjg3NjMsNjM0OTA5Ny4wMDAxNzMzMTcsNTI5NjQ4Ni4wMDAxMjk5MDYsMTI3NDkyMy4wMDAwMTYwNDE4LDk5Mzg0NDQuMDAwMjQxMTU3LDQ5MTk0NzkuMDAwMjExNTM5LDU1OTUyMTEuMDAwMTU3MzgsMjg0NDY1OC4wMDAwMTU2NTcsOTAyMTk1LjAwMDAxOTYwNTUsODA0OTMxMy4wMDAyNTIxNTYsNjQyMjAwLjAwMDAxMDQxNDcsMTcxMTI2My4wMDAwMzg5OTA1LDEyMzU3ODYuMDAwMDI3MTMxMyw4NDE0MzUwLjAwMDIyNjA4NCwxODE5MDQ2LjAwMDA0MTMxNywxOTk4MjU3LjAwMDI5MjU2MjksMS44OTc2NDU3MDAwNTA4NzlFNywxLjEzNTMxNDAwMDAyNTEzMjVFNywzNDUwNjU0LjAwMDA1Mjk1MTMsMzQyMTM5OS4wMDAwOTMzOTYsMS4yMjgxMDU0MDAwMjc3Mjg2RTcsMTA0ODMxOS4wMDAwMzIxMDM1LDQwMTIwMTIuMDAwMDQwMzMzMyw3NTQ4NDQuMDAwMDA4MDA0Myw1Njg5MjgzLjAwMDE0MjM2NiwyLjA4NTE4MjAwMDA3MjAzMUU3LDIyMzMxNjkuMDAwMTI2MjYxNyw3MDc4NTE2LjAwMDE5MjcxNSw2MDg4MjcuMDAwMDE2MzM4NSw1ODk0MTIxLjAwMDE5NjA3Miw1MzYzNjc1LjAwMDA4Mjc5OSwxODA4MzQ0LjAwMDAwNDcyNjcsNDkzNzgyLjAwMDAwNzAwMTcKKzIzLFdlZCAxNiBGZWIgMTEsNjI2OTMyLjAwMDAzMjM4MzgsNDQ0NzEwMC4wMDA1MDYwOTIsMjY3MzQwMC4wMDAwMzAzNTY1LDUxMzA2MzIuMDAwMjgwOTQ4LDMuMzg3MTY0ODAwMDA4NDU3RTcsNDMwMTI2MS4wMDAyOTMwNDI1LDM0MDU1NjUuMDAwMDUzNDUzMyw1NzIwNTkuMDAwMTA4NTcxLDc4MzYwMC4wMDAwMDAxODA0LDEuNTk4MjM3ODAwMDc3ODE3NEU3LDgxODY0NTMuMDAwNTA5NDYsMTIxMTUzNy4wMDAxMTg5NDkyLDI5MjYzMjQuMDAwNDM4MTc1LDEyOTM5NTMuMDAwMDI4MDkwNiwxLjI0MTkyOTMwMDA1NzEzNjVFNyw2MDgwNDg1LjAwMDA2MTA5NiwyNjg4NDE4LjAwMDAwMTc2Niw0MDQxNzY5LjAwMDUwMDMwNTYsNDQ2ODk3Ni4wMDAwNjg3NjMsNjM0OTA5Ny4wMDAxNzMzMTgsNTI5NjQ4Ni4wMDAxMjk5MDYsMTI3NDkyMy4wMDAwMTYwNDE4LDk5Mzg0NDQuMDAwMjQxMTU3LDQ5MTk0NzkuMDAwMjExNTM5LDU1OTUyMTEuMDAwMTU3MzgsMjg0NDY1OC4wMDAwMTU2NTcsOTAyMTk1LjAwMDAxOTYwNTUsODA0OTMxMy4wMDAyNTIxNTYsNjQyMjAwLjAwMDAxMDQxNDcsMTcxMTI2My4wMDAwMzg5OTA1LDEyMzU3ODYuMDAwMDI3MTMxNSw4NDE0MzUwLjAwMDIyNjA4MiwxODE5MDQ2LjAwMDA0MTMxNzIsMTk5ODI1Ny4wMDAyOTI1NjI5LDEuODk3NjQ1NzAwMDUwODc5RTcsMS4xMzUzMTQwMDAwMjUxMzI1RTcsMzQ1MDY1NC4wMDAwNTI5NTEzLDM0MjEzOTkuMDAwMDkzMzk2LDEuMjI4MTA1NDAwMDI3NzI4NkU3LDEwNDgzMTkuMDAwMDMyMTAzNSw0MDEyMDEyLjAwMDA0MDMzMzMsNzU0ODQ0LjAwMDAwODAwNDMsNTY4OTI4My4wMDAxNDIzNjYsMi4wODUxODIwMDAwNzIwMzFFNywyMjMzMTY5LjAwMDEyNjI2MTcsNzA3ODUxNi4wMDAxOTI3MTUsNjA4ODI3LjAwMDAxNjMzODcsNTg5NDEyMS4wMDAxOTYwNzIsNTM2MzY3NS4wMDAwODI3OTksMTgwODM0NC4wMDAwMDQ3MjY3LDQ5Mzc4Mi4wMDAwMDcwMDE3CisyNCxUaHUgMTcgRmViIDExLDYyNjkzMi4wMDAwMzIzODM4LDQ0NDcxMDAuMDAwNTA2MDkyLDI2NzM0MDAuMDAwMDMwMzU2NSw1MTMwNjMyLjAwMDI4MDk0OCwzLjM4NzE2NDgwMDAwODQ1N0U3LDQzMDEyNjEuMDAwMjkzMDQzLDM0MDU1NjUuMDAwMDUzNDUzLDU3MjA1OS4wMDAxMDg1NzA5LDc4MzYwMC4wMDAwMDAxODA2LDEuNTk4MjM3ODAwMDc3ODE3MkU3LDgxODY0NTMuMDAwNTA5NDYsMTIxMTUzNy4wMDAxMTg5NDkyLDI5MjYzMjQuMDAwNDM4MTc1LDEyOTM5NTMuMDAwMDI4MDkwNiwxLjI0MTkyOTMwMDA1NzEzNjVFNyw2MDgwNDg1LjAwMDA2MTA5NiwyNjg4NDE4LjAwMDAwMTc2Niw0MDQxNzY5LjAwMDUwMDMwNTYsNDQ2ODk3Ni4wMDAwNjg3NjIsNjM0OTA5Ny4wMDAxNzMzMTgsNTI5NjQ4Ni4wMDAxMjk5MDYsMTI3NDkyMy4wMDAwMTYwNDE4LDk5Mzg0NDQuMDAwMjQxMTU3LDQ5MTk0NzkuMDAwMjExNTM5LDU1OTUyMTEuMDAwMTU3Mzc5LDI4NDQ2NTguMDAwMDE1NjU2NSw5MDIxOTUuMDAwMDE5NjA1NSw4MDQ5MzEzLjAwMDI1MjE1Niw2NDIyMDAuMDAwMDEwNDE0NywxNzExMjYzLjAwMDAzODk5MDUsMTIzNTc4Ni4wMDAwMjcxMzEzLDg0MTQzNTAuMDAwMjI2MDgyLDE4MTkwNDYuMDAwMDQxMzE3MiwxOTk4MjU3LjAwMDI5MjU2MjYsMS44OTc2NDU3MDAwNTA4NzlFNywxLjEzNTMxNDAwMDAyNTEzMjVFNywzNDUwNjU0LjAwMDA1Mjk1MTMsMzQyMTM5OS4wMDAwOTMzOTYsMS4yMjgxMDU0MDAwMjc3Mjg2RTcsMTA0ODMxOS4wMDAwMzIxMDM0LDQwMTIwMTIuMDAwMDQwMzMzMyw3NTQ4NDQuMDAwMDA4MDA0Myw1Njg5MjgzLjAwMDE0MjM2NiwyLjA4NTE4MjAwMDA3MjAzMUU3LDIyMzMxNjkuMDAwMTI2MjYxMyw3MDc4NTE2LjAwMDE5MjcxNSw2MDg4MjcuMDAwMDE2MzM4Nyw1ODk0MTIxLjAwMDE5NjA3Myw1MzYzNjc1LjAwMDA4Mjc5OSwxODA4MzQ0LjAwMDAwNDcyNjcsNDkzNzgyLjAwMDAwNzAwMTc0CisyNSxGcmkgMTggRmViIDExLDYyNjkzMi4wMDAwMzIzODM4LDQ0NDcxMDAuMDAwNTA2MDkzLDI2NzM0MDAuMDAwMDMwMzU2NSw1MTMwNjMyLjAwMDI4MDk0OCwzLjM4NzE2NDgwMDAwODQ1N0U3LDQzMDEyNjEuMDAwMjkzMDQzLDM0MDU1NjUuMDAwMDUzNDUzLDU3MjA1OS4wMDAxMDg1NzA5LDc4MzYwMC4wMDAwMDAxODA2LDEuNTk4MjM3ODAwMDc3ODE3MkU3LDgxODY0NTMuMDAwNTA5NDYsMTIxMTUzNy4wMDAxMTg5NDksMjkyNjMyNC4wMDA0MzgxNzU2LDEyOTM5NTMuMDAwMDI4MDkwOCwxLjI0MTkyOTMwMDA1NzEzNjZFNyw2MDgwNDg1LjAwMDA2MTA5NiwyNjg4NDE4LjAwMDAwMTc2NjMsNDA0MTc2OS4wMDA1MDAzMDU2LDQ0Njg5NzYuMDAwMDY4NzYyLDYzNDkwOTcuMDAwMTczMzE4LDUyOTY0ODYuMDAwMTI5OTA2LDEyNzQ5MjMuMDAwMDE2MDQxOCw5OTM4NDQ0LjAwMDI0MTE1Nyw0OTE5NDc5LjAwMDIxMTUzOCw1NTk1MjExLjAwMDE1NzM3OSwyODQ0NjU4LjAwMDAxNTY1NjUsOTAyMTk1LjAwMDAxOTYwNTUsODA0OTMxMy4wMDAyNTIxNTYsNjQyMjAwLjAwMDAxMDQxNDYsMTcxMTI2My4wMDAwMzg5OTAzLDEyMzU3ODYuMDAwMDI3MTMxNSw4NDE0MzUwLjAwMDIyNjA4MiwxODE5MDQ2LjAwMDA0MTMxNzIsMTk5ODI1Ny4wMDAyOTI1NjI2LDEuODk3NjQ1NzAwMDUwODc5RTcsMS4xMzUzMTQwMDAwMjUxMzI1RTcsMzQ1MDY1NC4wMDAwNTI5NTEzLDM0MjEzOTkuMDAwMDkzMzk2LDEuMjI4MTA1NDAwMDI3NzI4NkU3LDEwNDgzMTkuMDAwMDMyMTAzNSw0MDEyMDEyLjAwMDA0MDMzMzMsNzU0ODQ0LjAwMDAwODAwNDMsNTY4OTI4My4wMDAxNDIzNjYsMi4wODUxODIwMDAwNzIwMzFFNywyMjMzMTY5LjAwMDEyNjI2MTMsNzA3ODUxNi4wMDAxOTI3MTUsNjA4ODI3LjAwMDAxNjMzODcsNTg5NDEyMS4wMDAxOTYwNzIsNTM2MzY3NS4wMDAwODI3OTksMTgwODM0NC4wMDAwMDQ3MjY3LDQ5Mzc4Mi4wMDAwMDcwMDE3CisyNixTYXQgMTkgRmViIDExLDYyNjkzMi4wMDAwMzIzODM4LDQ0NDcxMDAuMDAwNTA2MDkzLDI2NzM0MDAuMDAwMDMwMzU2NSw1MTMwNjMyLjAwMDI4MDk0OCwzLjM4NzE2NDgwMDAwODQ1N0U3LDQzMDEyNjEuMDAwMjkzMDQzLDM0MDU1NjUuMDAwMDUzNDUzLDU3MjA1OS4wMDAxMDg1NzEsNzgzNjAwLjAwMDAwMDE4MDYsMS41OTgyMzc4MDAwNzc4MTcyRTcsODE4NjQ1My4wMDA1MDk0NjEsMTIxMTUzNy4wMDAxMTg5NDksMjkyNjMyNC4wMDA0MzgxNzU2LDEyOTM5NTMuMDAwMDI4MDkwNiwxLjI0MTkyOTMwMDA1NzEzNjZFNyw2MDgwNDg1LjAwMDA2MTA5NiwyNjg4NDE4LjAwMDAwMTc2Niw0MDQxNzY5LjAwMDUwMDMwNSw0NDY4OTc2LjAwMDA2ODc2Miw2MzQ5MDk3LjAwMDE3MzMxOCw1Mjk2NDg2LjAwMDEyOTkwNywxMjc0OTIzLjAwMDAxNjA0MTgsOTkzODQ0NC4wMDAyNDExNTUsNDkxOTQ3OS4wMDAyMTE1MzgsNTU5NTIxMS4wMDAxNTczNzksMjg0NDY1OC4wMDAwMTU2NTY1LDkwMjE5NS4wMDAwMTk2MDU1LDgwNDkzMTMuMDAwMjUyMTU2LDY0MjIwMC4wMDAwMTA0MTQ2LDE3MTEyNjMuMDAwMDM4OTkwMywxMjM1Nzg2LjAwMDAyNzEzMTUsODQxNDM1MC4wMDAyMjYwODIsMTgxOTA0Ni4wMDAwNDEzMTc0LDE5OTgyNTcuMDAwMjkyNTYyNiwxLjg5NzY0NTcwMDA1MDg3ODVFNywxLjEzNTMxNDAwMDAyNTEzMjVFNywzNDUwNjU0LjAwMDA1Mjk1MTMsMzQyMTM5OS4wMDAwOTMzOTYsMS4yMjgxMDU0MDAwMjc3Mjg2RTcsMTA0ODMxOS4wMDAwMzIxMDM1LDQwMTIwMTIuMDAwMDQwMzMzMyw3NTQ4NDQuMDAwMDA4MDA0Myw1Njg5MjgzLjAwMDE0MjM2NywyLjA4NTE4MjAwMDA3MjAzMTVFNywyMjMzMTY5LjAwMDEyNjI2MTMsNzA3ODUxNi4wMDAxOTI3MTUsNjA4ODI3LjAwMDAxNjMzODUsNTg5NDEyMS4wMDAxOTYwNzIsNTM2MzY3NS4wMDAwODI3OTksMTgwODM0NC4wMDAwMDQ3MjY3LDQ5Mzc4Mi4wMDAwMDcwMDE3CisyNyxTdW4gMjAgRmViIDExLDYyNjkzMi4wMDAwMzIzODM4LDQ0NDcxMDAuMDAwNTA2MDkzLDI2NzM0MDAuMDAwMDMwMzU2LDUxMzA2MzIuMDAwMjgwOTQ4LDMuMzg3MTY0ODAwMDA4NDU3RTcsNDMwMTI2MS4wMDAyOTMwNDMsMzQwNTU2NS4wMDAwNTM0NTMsNTcyMDU5LjAwMDEwODU3MSw3ODM2MDAuMDAwMDAwMTgwNiwxLjU5ODIzNzgwMDA3NzgxNzJFNyw4MTg2NDUzLjAwMDUwOTQ2MSwxMjExNTM3LjAwMDExODk0OSwyOTI2MzI0LjAwMDQzODE3NTYsMTI5Mzk1My4wMDAwMjgwOTA4LDEuMjQxOTI5MzAwMDU3MTM2NkU3LDYwODA0ODUuMDAwMDYxMDk3LDI2ODg0MTguMDAwMDAxNzY2LDQwNDE3NjkuMDAwNTAwMzA1LDQ0Njg5NzYuMDAwMDY4NzYyLDYzNDkwOTcuMDAwMTczMzE4LDUyOTY0ODYuMDAwMTI5OTA3LDEyNzQ5MjMuMDAwMDE2MDQxOCw5OTM4NDQ0LjAwMDI0MTE1NSw0OTE5NDc5LjAwMDIxMTUzOCw1NTk1MjExLjAwMDE1NzM3OSwyODQ0NjU4LjAwMDAxNTY1NjUsOTAyMTk1LjAwMDAxOTYwNTUsODA0OTMxMy4wMDAyNTIxNTUsNjQyMjAwLjAwMDAxMDQxNDYsMTcxMTI2My4wMDAwMzg5OTA1LDEyMzU3ODYuMDAwMDI3MTMxMyw4NDE0MzUwLjAwMDIyNjA4MiwxODE5MDQ2LjAwMDA0MTMxNzQsMTk5ODI1Ny4wMDAyOTI1NjI2LDEuODk3NjQ1NzAwMDUwODc4NUU3LDEuMTM1MzE0MDAwMDI1MTMyNUU3LDM0NTA2NTQuMDAwMDUyOTUxMywzNDIxMzk5LjAwMDA5MzM5NiwxLjIyODEwNTQwMDAyNzcyODZFNywxMDQ4MzE5LjAwMDAzMjEwMzUsNDAxMjAxMi4wMDAwNDAzMzMzLDc1NDg0NC4wMDAwMDgwMDQzLDU2ODkyODMuMDAwMTQyMzY2LDIuMDg1MTgyMDAwMDcyMDMxNUU3LDIyMzMxNjkuMDAwMTI2MjYxMyw3MDc4NTE2LjAwMDE5MjcxNSw2MDg4MjcuMDAwMDE2MzM4NSw1ODk0MTIxLjAwMDE5NjA3Miw1MzYzNjc1LjAwMDA4Mjc5OSwxODA4MzQ0LjAwMDAwNDcyNyw0OTM3ODIuMDAwMDA3MDAxNworMjgsTW9uIDIxIEZlYiAxMSw2MjY5MzIuMDAwMDMyMzgzOCw0NDQ3MTAwLjAwMDUwNjA5MywyNjczNDAwLjAwMDAzMDM1Niw1MTMwNjMyLjAwMDI4MDk0OCwzLjM4NzE2NDgwMDAwODQ1N0U3LDQzMDEyNjEuMDAwMjkzMDQzLDM0MDU1NjUuMDAwMDUzNDUzLDU3MjA1OS4wMDAxMDg1NzEsNzgzNjAwLjAwMDAwMDE4MDcsMS41OTgyMzc4MDAwNzc4MTcyRTcsODE4NjQ1My4wMDA1MDk0NiwxMjExNTM3LjAwMDExODk0OSwyOTI2MzI0LjAwMDQzODE3NTYsMTI5Mzk1My4wMDAwMjgwOTA4LDEuMjQxOTI5MzAwMDU3MTM2NkU3LDYwODA0ODUuMDAwMDYxMDk3LDI2ODg0MTguMDAwMDAxNzY2LDQwNDE3NjkuMDAwNTAwMzA1Niw0NDY4OTc2LjAwMDA2ODc2Miw2MzQ5MDk3LjAwMDE3MzMxOCw1Mjk2NDg2LjAwMDEyOTkwNiwxMjc0OTIzLjAwMDAxNjA0MTgsOTkzODQ0NC4wMDAyNDExNTUsNDkxOTQ3OS4wMDAyMTE1MzgsNTU5NTIxMS4wMDAxNTczNzksMjg0NDY1OC4wMDAwMTU2NTY1LDkwMjE5NS4wMDAwMTk2MDU1LDgwNDkzMTMuMDAwMjUyMTU2LDY0MjIwMC4wMDAwMTA0MTQ2LDE3MTEyNjMuMDAwMDM4OTkwNSwxMjM1Nzg2LjAwMDAyNzEzMTMsODQxNDM1MC4wMDAyMjYwOCwxODE5MDQ2LjAwMDA0MTMxNzQsMTk5ODI1Ny4wMDAyOTI1NjI2LDEuODk3NjQ1NzAwMDUwODc4NUU3LDEuMTM1MzE0MDAwMDI1MTMyNUU3LDM0NTA2NTQuMDAwMDUyOTUxMywzNDIxMzk5LjAwMDA5MzM5NiwxLjIyODEwNTQwMDAyNzcyODZFNywxMDQ4MzE5LjAwMDAzMjEwMzUsNDAxMjAxMi4wMDAwNDAzMzMzLDc1NDg0NC4wMDAwMDgwMDQzLDU2ODkyODMuMDAwMTQyMzY2LDIuMDg1MTgyMDAwMDcyMDMxNUU3LDIyMzMxNjkuMDAwMTI2MjYxMyw3MDc4NTE2LjAwMDE5MjcxNSw2MDg4MjcuMDAwMDE2MzM4NSw1ODk0MTIxLjAwMDE5NjA3Miw1MzYzNjc1LjAwMDA4Mjc5OSwxODA4MzQ0LjAwMDAwNDcyNyw0OTM3ODIuMDAwMDA3MDAxNworMjksVHVlIDIyIEZlYiAxMSw2MjY5MzIuMDAwMDMyMzgzOCw0NDQ3MTAwLjAwMDUwNjA5MiwyNjczNDAwLjAwMDAzMDM1Niw1MTMwNjMyLjAwMDI4MDk0OCwzLjM4NzE2NDgwMDAwODQ1N0U3LDQzMDEyNjEuMDAwMjkzMDQyNSwzNDA1NTY1LjAwMDA1MzQ1Myw1NzIwNTkuMDAwMTA4NTcxLDc4MzYwMC4wMDAwMDAxODA3LDEuNTk4MjM3ODAwMDc3ODE3MkU3LDgxODY0NTMuMDAwNTA5NDYsMTIxMTUzNy4wMDAxMTg5NDksMjkyNjMyNC4wMDA0MzgxNzU2LDEyOTM5NTMuMDAwMDI4MDkwOCwxLjI0MTkyOTMwMDA1NzEzNjZFNyw2MDgwNDg1LjAwMDA2MTA5NiwyNjg4NDE4LjAwMDAwMTc2NjMsNDA0MTc2OS4wMDA1MDAzMDU2LDQ0Njg5NzYuMDAwMDY4NzYyLDYzNDkwOTcuMDAwMTczMzE4LDUyOTY0ODYuMDAwMTI5OTA2LDEyNzQ5MjMuMDAwMDE2MDQxOCw5OTM4NDQ0LjAwMDI0MTE1Nyw0OTE5NDc5LjAwMDIxMTUzOCw1NTk1MjExLjAwMDE1NzM3OSwyODQ0NjU4LjAwMDAxNTY1NjUsOTAyMTk1LjAwMDAxOTYwNTYsODA0OTMxMy4wMDAyNTIxNTYsNjQyMjAwLjAwMDAxMDQxNDYsMTcxMTI2My4wMDAwMzg5OTA1LDEyMzU3ODYuMDAwMDI3MTMxMyw4NDE0MzUwLjAwMDIyNjA4MiwxODE5MDQ2LjAwMDA0MTMxNzIsMTk5ODI1Ny4wMDAyOTI1NjI2LDEuODk3NjQ1NzAwMDUwODc4NUU3LDEuMTM1MzE0MDAwMDI1MTMyNUU3LDM0NTA2NTQuMDAwMDUyOTUxMywzNDIxMzk5LjAwMDA5MzM5NiwxLjIyODEwNTQwMDAyNzcyODZFNywxMDQ4MzE5LjAwMDAzMjEwMzUsNDAxMjAxMi4wMDAwNDAzMzMzLDc1NDg0NC4wMDAwMDgwMDQzLDU2ODkyODMuMDAwMTQyMzY3LDIuMDg1MTgyMDAwMDcyMDMxNUU3LDIyMzMxNjkuMDAwMTI2MjYxMyw3MDc4NTE2LjAwMDE5MjcxNSw2MDg4MjcuMDAwMDE2MzM4NSw1ODk0MTIxLjAwMDE5NjA3Miw1MzYzNjc1LjAwMDA4MjgsMTgwODM0NC4wMDAwMDQ3MjcsNDkzNzgyLjAwMDAwNzAwMTcKKzMwLFdlZCAyMyBGZWIgMTEsNjI2OTMyLjAwMDAzMjM4MzgsNDQ0NzEwMC4wMDA1MDYwOTMsMjY3MzQwMC4wMDAwMzAzNTYsNTEzMDYzMi4wMDAyODA5NDcsMy4zODcxNjQ4MDAwMDg0NTdFNyw0MzAxMjYxLjAwMDI5MzA0MywzNDA1NTY1LjAwMDA1MzQ1Myw1NzIwNTkuMDAwMTA4NTcxLDc4MzYwMC4wMDAwMDAxODA3LDEuNTk4MjM3ODAwMDc3ODE3MkU3LDgxODY0NTMuMDAwNTA5NDYsMTIxMTUzNy4wMDAxMTg5NDksMjkyNjMyNC4wMDA0MzgxNzU2LDEyOTM5NTMuMDAwMDI4MDkwOCwxLjI0MTkyOTMwMDA1NzEzNjZFNyw2MDgwNDg1LjAwMDA2MTA5NiwyNjg4NDE4LjAwMDAwMTc2Niw0MDQxNzY5LjAwMDUwMDMwNTYsNDQ2ODk3Ni4wMDAwNjg3NjIsNjM0OTA5Ny4wMDAxNzMzMTgsNTI5NjQ4Ni4wMDAxMjk5MDcsMTI3NDkyMy4wMDAwMTYwNDE4LDk5Mzg0NDQuMDAwMjQxMTU1LDQ5MTk0NzkuMDAwMjExNTM4LDU1OTUyMTEuMDAwMTU3Mzc5LDI4NDQ2NTguMDAwMDE1NjU2NSw5MDIxOTUuMDAwMDE5NjA1NSw4MDQ5MzEzLjAwMDI1MjE1NSw2NDIyMDAuMDAwMDEwNDE0NiwxNzExMjYzLjAwMDAzODk5MDUsMTIzNTc4Ni4wMDAwMjcxMzE1LDg0MTQzNTAuMDAwMjI2MDgyLDE4MTkwNDYuMDAwMDQxMzE3NCwxOTk4MjU3LjAwMDI5MjU2MjQsMS44OTc2NDU3MDAwNTA4NzhFNywxLjEzNTMxNDAwMDAyNTEzMjVFNywzNDUwNjU0LjAwMDA1Mjk1MTcsMzQyMTM5OS4wMDAwOTMzOTYzLDEuMjI4MTA1NDAwMDI3NzI4NkU3LDEwNDgzMTkuMDAwMDMyMTAzNSw0MDEyMDEyLjAwMDA0MDMzMzMsNzU0ODQ0LjAwMDAwODAwNDMsNTY4OTI4My4wMDAxNDIzNjcsMi4wODUxODIwMDAwNzIwMzE1RTcsMjIzMzE2OS4wMDAxMjYyNjEzLDcwNzg1MTYuMDAwMTkyNzE0LDYwODgyNy4wMDAwMTYzMzg0LDU4OTQxMjEuMDAwMTk2MDcyLDUzNjM2NzUuMDAwMDgyOCwxODA4MzQ0LjAwMDAwNDcyNyw0OTM3ODIuMDAwMDA3MDAxNworMzEsVGh1IDI0IEZlYiAxMSw2MjY5MzIuMDAwMDMyMzgzNyw0NDQ3MTAwLjAwMDUwNjA5MiwyNjczNDAwLjAwMDAzMDM1Niw1MTMwNjMyLjAwMDI4MDk0OCwzLjM4NzE2NDgwMDAwODQ1N0U3LDQzMDEyNjEuMDAwMjkzMDQzLDM0MDU1NjUuMDAwMDUzNDUzLDU3MjA1OS4wMDAxMDg1NzEsNzgzNjAwLjAwMDAwMDE4MDcsMS41OTgyMzc4MDAwNzc4MTcyRTcsODE4NjQ1My4wMDA1MDk0NiwxMjExNTM3LjAwMDExODk0ODgsMjkyNjMyNC4wMDA0MzgxNzU2LDEyOTM5NTMuMDAwMDI4MDkwOCwxLjI0MTkyOTMwMDA1NzEzNjZFNyw2MDgwNDg1LjAwMDA2MTA5NiwyNjg4NDE4LjAwMDAwMTc2Niw0MDQxNzY5LjAwMDUwMDMwNTYsNDQ2ODk3Ni4wMDAwNjg3NjEsNjM0OTA5Ny4wMDAxNzMzMTgsNTI5NjQ4Ni4wMDAxMjk5MDcsMTI3NDkyMy4wMDAwMTYwNDE2LDk5Mzg0NDQuMDAwMjQxMTU1LDQ5MTk0NzkuMDAwMjExNTM3LDU1OTUyMTEuMDAwMTU3Mzc5LDI4NDQ2NTguMDAwMDE1NjU2NSw5MDIxOTUuMDAwMDE5NjA1NSw4MDQ5MzEzLjAwMDI1MjE1NSw2NDIyMDAuMDAwMDEwNDE0NSwxNzExMjYzLjAwMDAzODk5MDMsMTIzNTc4Ni4wMDAwMjcxMzEzLDg0MTQzNTAuMDAwMjI2MDgyLDE4MTkwNDYuMDAwMDQxMzE3MiwxOTk4MjU3LjAwMDI5MjU2MjYsMS44OTc2NDU3MDAwNTA4Nzg1RTcsMS4xMzUzMTQwMDAwMjUxMzI1RTcsMzQ1MDY1NC4wMDAwNTI5NTEzLDM0MjEzOTkuMDAwMDkzMzk2MywxLjIyODEwNTQwMDAyNzcyODZFNywxMDQ4MzE5LjAwMDAzMjEwMzUsNDAxMjAxMi4wMDAwNDAzMzMzLDc1NDg0NC4wMDAwMDgwMDQzLDU2ODkyODMuMDAwMTQyMzY3LDIuMDg1MTgyMDAwMDcyMDMxNUU3LDIyMzMxNjkuMDAwMTI2MjYxMyw3MDc4NTE2LjAwMDE5MjcxNSw2MDg4MjcuMDAwMDE2MzM4NSw1ODk0MTIxLjAwMDE5NjA3Miw1MzYzNjc1LjAwMDA4MjgsMTgwODM0NC4wMDAwMDQ3MjcyLDQ5Mzc4Mi4wMDAwMDcwMDE3CiszMixGcmkgMjUgRmViIDExLDYyNjkzMi4wMDAwMzIzODM3LDQ0NDcxMDAuMDAwNTA2MDkzLDI2NzM0MDAuMDAwMDMwMzU2LDUxMzA2MzIuMDAwMjgwOTQ4LDMuMzg3MTY0ODAwMDA4NDU2NEU3LDQzMDEyNjEuMDAwMjkzMDQzLDM0MDU1NjUuMDAwMDUzNDUzLDU3MjA1OS4wMDAxMDg1NzEsNzgzNjAwLjAwMDAwMDE4MDgsMS41OTgyMzc4MDAwNzc4MTcyRTcsODE4NjQ1My4wMDA1MDk0NiwxMjExNTM3LjAwMDExODk0OSwyOTI2MzI0LjAwMDQzODE3NTYsMTI5Mzk1My4wMDAwMjgwOTA4LDEuMjQxOTI5MzAwMDU3MTM2NUU3LDYwODA0ODUuMDAwMDYxMDk3LDI2ODg0MTguMDAwMDAxNzY2LDQwNDE3NjkuMDAwNTAwMzA1Niw0NDY4OTc2LjAwMDA2ODc2Miw2MzQ5MDk3LjAwMDE3MzMxOCw1Mjk2NDg2LjAwMDEyOTkwNywxMjc0OTIzLjAwMDAxNjA0MTgsOTkzODQ0NC4wMDAyNDExNTUsNDkxOTQ3OS4wMDAyMTE1MzgsNTU5NTIxMS4wMDAxNTczNzksMjg0NDY1OC4wMDAwMTU2NTcsOTAyMTk1LjAwMDAxOTYwNTUsODA0OTMxMy4wMDAyNTIxNTYsNjQyMjAwLjAwMDAxMDQxNDUsMTcxMTI2My4wMDAwMzg5OTA1LDEyMzU3ODYuMDAwMDI3MTMxNSw4NDE0MzUwLjAwMDIyNjA4MiwxODE5MDQ2LjAwMDA0MTMxNzIsMTk5ODI1Ny4wMDAyOTI1NjI2LDEuODk3NjQ1NzAwMDUwODc4RTcsMS4xMzUzMTQwMDAwMjUxMzI3RTcsMzQ1MDY1NC4wMDAwNTI5NTE3LDM0MjEzOTkuMDAwMDkzMzk2MywxLjIyODEwNTQwMDAyNzcyODhFNywxMDQ4MzE5LjAwMDAzMjEwMzUsNDAxMjAxMi4wMDAwNDAzMzMzLDc1NDg0NC4wMDAwMDgwMDQxLDU2ODkyODMuMDAwMTQyMzY3LDIuMDg1MTgyMDAwMDcyMDMxNUU3LDIyMzMxNjkuMDAwMTI2MjYxLDcwNzg1MTYuMDAwMTkyNzE1LDYwODgyNy4wMDAwMTYzMzg0LDU4OTQxMjEuMDAwMTk2MDcyLDUzNjM2NzUuMDAwMDgyOCwxODA4MzQ0LjAwMDAwNDcyNzIsNDkzNzgyLjAwMDAwNzAwMTcKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0lSU3RhdGVzT25seV9GRF9SZWZlcmVuY2UvVGVzdFNJUi9odW1hbi9SXzAuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTSVJTdGF0ZXNPbmx5X0ZEX1JlZmVyZW5jZS9UZXN0U0lSL2h1bWFuL1JfMC5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjk2OGJlZAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0lSU3RhdGVzT25seV9GRF9SZWZlcmVuY2UvVGVzdFNJUi9odW1hbi9SXzAuY3N2CkBAIC0wLDAgKzEsMzMgQEAKK2l0ZXJhdGlvbix0aW1lLHN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL25vZGUvdHJhbnNwb3J0L3BpcGUvVVNBCisxLFR1ZSAyNSBKYW4gMTEsMC4wCisyLFdlZCAyNiBKYW4gMTEsMC4wCiszLFRodSAyNyBKYW4gMTEsMC4wMDI1MzQwMzY3MjU5MzY2ODkKKzQsRnJpIDI4IEphbiAxMSwwLjA3ODI4OTY5MzIzMzU5NTE2Cis1LFNhdCAyOSBKYW4gMTEsMi4xMDA1Mzk4NTQ1MzUxNTIKKzYsU3VuIDMwIEphbiAxMSw1Mi44MDYxMjA3MzQ5OTE0OQorNyxNb24gMzEgSmFuIDExLDEyNzQuNDM4NjE4MzU0MTc5Cis4LFR1ZSAxIEZlYiAxMSwyMDI2NC4zOTU3NjY1MjQzNzIKKzksV2VkIDIgRmViIDExLDMxNTcyNi4xNjIyNTE5NzE0MworMTAsVGh1IDMgRmViIDExLDQ2OTg0Ljc4MjM3ODgyMDY0NAorMTEsRnJpIDQgRmViIDExLDc2MzM0LjAxMTc1Nzc3NTc2CisxMixTYXQgNSBGZWIgMTEsNDY5MjE2LjIxNzg3NDIwODYKKzEzLFN1biA2IEZlYiAxMSw0ODI5MzEuMTgxMzE0NTcxMgorMTQsTW9uIDcgRmViIDExLDgyMDM2NC42MTUxMTUwNjM2CisxNSxUdWUgOCBGZWIgMTEsNzg4MTExLjIwNzI0MDk0NTgKKzE2LFdlZCA5IEZlYiAxMSw4MzMxMTIuMTY2NjUwNDg1MgorMTcsVGh1IDEwIEZlYiAxMSw4MzMzNjMuMzU1NzEyMzAxMgorMTgsRnJpIDExIEZlYiAxMSw4OTUzODUuOTkxNjk4NzA2OAorMTksU2F0IDEyIEZlYiAxMSw4OTE3NDMuOTkxMTk1MTc5OQorMjAsU3VuIDEzIEZlYiAxMSw5MTk0NDAuODExMDQyMjUyCisyMSxNb24gMTQgRmViIDExLDkyNTMwMi42MjY0ODM3NTg5CisyMixUdWUgMTUgRmViIDExLDkzMzk0MS43MDkzMzc0NzYxCisyMyxXZWQgMTYgRmViIDExLDkzNzA1MS43Mzc1Mzk5MDY2CisyNCxUaHUgMTcgRmViIDExLDkzOTc1Ny4yOTg5NDgxOTk1CisyNSxGcmkgMTggRmViIDExLDk0MTA0MC44MzI2OTUyNTE3CisyNixTYXQgMTkgRmViIDExLDk0MTk0OC41MTg2NjU1MjEyCisyNyxTdW4gMjAgRmViIDExLDk0MjQzNy40NTcwNjI1MzY3CisyOCxNb24gMjEgRmViIDExLDk0Mjc1My4zNjI0OTAyNDYxCisyOSxUdWUgMjIgRmViIDExLDk0MjkzMy43ODUwMDM1MzQ1CiszMCxXZWQgMjMgRmViIDExLDk0MzA0NS43MzI4ODc5ODY2CiszMSxUaHUgMjQgRmViIDExLDk0MzExMS40MDc2NjM1NjM2CiszMixGcmkgMjUgRmViIDExLDk0MzE1MS40MTgxNDQyMzkzCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNJUlN0YXRlc09ubHlfRkRfUmVmZXJlbmNlL1Rlc3RTSVIvaHVtYW4vUl8xLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0lSU3RhdGVzT25seV9GRF9SZWZlcmVuY2UvVGVzdFNJUi9odW1hbi9SXzEuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEzMjJiZmQzCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTSVJTdGF0ZXNPbmx5X0ZEX1JlZmVyZW5jZS9UZXN0U0lSL2h1bWFuL1JfMS5jc3YKQEAgLTAsMCArMSwzMyBAQAoraXRlcmF0aW9uLHRpbWUsVVMtQUssVVMtQUwsVVMtQVIsVVMtQVosVVMtQ0EsVVMtQ08sVVMtQ1QsVVMtREMsVVMtREUsVVMtRkwsVVMtR0EsVVMtSEksVVMtSUEsVVMtSUQsVVMtSUwsVVMtSU4sVVMtS1MsVVMtS1ksVVMtTEEsVVMtTUEsVVMtTUQsVVMtTUUsVVMtTUksVVMtTU4sVVMtTU8sVVMtTVMsVVMtTVQsVVMtTkMsVVMtTkQsVVMtTkUsVVMtTkgsVVMtTkosVVMtTk0sVVMtTlYsVVMtTlksVVMtT0gsVVMtT0ssVVMtT1IsVVMtUEEsVVMtUkksVVMtU0MsVVMtU0QsVVMtVE4sVVMtVFgsVVMtVVQsVVMtVkEsVVMtVlQsVVMtV0EsVVMtV0ksVVMtV1YsVVMtV1kKKzEsVHVlIDI1IEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMixXZWQgMjYgSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjQsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCiszLFRodSAyNyBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDguNjM3NDY1NzI3MDg4MzMxLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorNCxGcmkgMjggSmFuIDExLDEuNDYzNjYzMTc2NDE1Nzg0NEUtNSwxLjQ2ODkwMjA1ODkzMDQ4ODNFLTUsMS4wNzE5NTU5NjA3MDA5ODc0RS01LDEuMjcxMDMzNDk2MjU5NzQyMUUtNCwxNzguMzAyMjM0Mzc2MTYyMTIsMS4zMzA0MzQzNjQxNTcyMzNFLTQsMS44OTk2OTkzOTgwMjQyMzA3RS01LDQuOTUzOTY3OTA0MDk2NzA2RS01LDQuODM1ODkxNTUyMDM0NTI5NkUtOCwzLjUxMzM1NTgxMDc0NTYyRS00LDIuMzA5NjYyMTA0MzQ3OTU4MkUtNCw1LjQyNjY3NjMwMzMwODA4MUUtNSw4LjgyOTUzMTk5MjA4OTcxM0UtNiwxLjA5MDQ5MzU0NDk4Mzc4NjRFLTUsMi41NzY4NDUxMTI1OTc4NjZFLTQsMi43MDAwMzk0NDk4ODU5NDU1RS01LDQuMTcwOTU2NDYzNjI5NzgxRS02LDEuMzEwNTI2NjEwNjAxMzU3OEUtNSwyLjQ2ODcyMjYzNzMxMzYyNzZFLTUsNy43NDYyOTIyODQ0MzM5NzhFLTUsNS43MjI4NzQ2NjA4NzAxOTZFLTUsNi40NDc4NTU0MDI3MTI3MDZFLTYsMS4wNTkwMTk5NTA3OTkyOTVFLTQsOS41MjY3MDYzNTc1MDgwMjRFLTUsNy4wNDIyNjcwNzI2NTAyODVFLTUsNi45MTkzNTQ4MjkwMzYwNzJFLTYsNy42MzY2Nzg3NDI1ODc4NkUtNiwxLjEyOTgyNTQ2Mjk0MDMzNEUtNCwzLjY0MzAzODMwMjUzMjY3ODZFLTYsMS4yNjcwMDM1ODY2MzMwNDY3RS01LDEuMDg3NjcyNjA4MjQ1MDk5NUUtNSwxLjAwOTUzMjY2MDU4MzQ3NUUtNCwxLjc0NjE1OTg0MTI0NzEzNDRFLTUsMS4zMzc0NDY0MDY5MDc2ODNFLTQsMi4yNzE1Nzk0NTgzNzU2ODYzRS00LDEuMDI1NDEwNTA0NTEyNjU1RS00LDEuOTAzNzI5MzA3NjUwOTI2M0UtNSw0LjE3NDE4MDM5MTMzMTEzNzRFLTUsMS4xNjQ0MDIwODc1MzczODA4RS00LDEuNDM4Mjc0NzQ1NzY3NjAzRS01LDEuNzMwNDQzMTkzNzAzMDIyM0UtNSwzLjUyMjE0MTAxMzczMTgxNjNFLTYsNi4zMDE1Njk2ODMyNjM2NkUtNSwzLjIyOTk3MjU2NTc5NjM5NkUtNCw1LjcxNTIxNzgzMjU3OTQ3NUUtNSw4LjYxMTkxNjg3MjI0ODE1OEUtNSwzLjc2MzkzNTU5MTMzMzU0MjZFLTYsOC43ODg4Mjk5MDQ4NjAwODdFLTUsMi45Njc2MjU0NDkwOTg1MjNFLTUsMS45NzA2MjU4MDc0NTQwNzFFLTYsMi42Mjc1MDEwNzY2MDU0Mjc3RS02Cis1LFNhdCAyOSBKYW4gMTEsNi4xMjYxMjA5ODU4NDQxNjlFLTQsNi4xNDkwMjIyODk1OTA1NDlFLTQsNC40ODczMjcyODAzNDg2ODRFLTQsMC4wMDUzMTk4MTQ4NzczNzExMTMsMzY3Mi44MjMxNzczNDY3ODg3LDAuMDA1NTY4MTYxNjcyMTc2MjczLDcuOTUyMjU1MDk3OTI1MTc1RS00LDAuMDAyMDcyNDMyNTU4NDA1OTYxNiwyLjAyNDQyMTMzOTUzMTg0OUUtNiwwLjAxNDcwNTIxMDI4MzA2MjE0MywwLjAwOTY2NjY1Mzc1NjIwOTM5OCwwLjAwMjI3MDkzNTAzNTA4MDM0NzQsMy42OTYxNjk2MjA1NTQ2RS00LDQuNTY0NzY4Mjc4OTg2MTk4RS00LDAuMDEwNzg1NTM0MDg5OTIyMDI4LDAuMDAxMTMwMjYyNzk3NDEzMTA2OCwxLjc0NjA0Mjg0NjkzMjgyNzhFLTQsNS40ODYwNDM5MTMwNjA3ODlFLTQsMC4wMDEwMzM0MjI0NzY3NzQzNzEzLDAuMDAzMjQyNDc0NDcwMjgyMTg2LDAuMDAyMzk1NTMwNTMyMjQwNzI0NSwyLjY5OTEyMTg3NzA2NjkwMTdFLTQsMC4wMDQ0MzI5NDI4Mjk0MDQwOTgsMC4wMDM5ODc1MDE1OTA2MTg1MTgsMC4wMDI5NDc3NzE3NTQyMTgwNjg3LDIuODk2NTU1MjYwMzMyNTQ0NEUtNCwzLjE5NjY4NjM4Njg5ODMzNEUtNCwwLjAwNDcyOTIwMDY2NzcwNDY2OSwxLjUyNDk5NjQ0NDEyMjM3ODJFLTQsNS4zMDM2NzYxMjQ3MzYyMDhFLTQsNC41NTI5NDY0ODE2Nzc3MzE3RS00LDAuMDA0MjI1NzQ5NTY4NTI2MzMsNy4zMDkyOTcwMzQzNzgxOTdFLTQsMC4wMDU1OTU5MTU2MjI5NTcwNDQsMC4wMDk1MDg0ODY4MDUyMDQ3MzgsMC4wMDQyOTIzMTI0MTgzMDc0MDYsNy45NjkxMjgzOTU2ODQ5MTRFLTQsMC4wMDE3NDcyNDUzNzg3NzM0NjQxLDAuMDA0ODc0MTA2Mjg5Nzk2ODU1LDYuMDIwMzE2NTIzNTg5MDc5RS00LDcuMjQzODEwOTUwNzM5NDUyRS00LDEuNDc0Mzk5ODg2NDA4NjUwNUUtNCwwLjAwMjYzNzc2MDA2MjI2ODA4LDAuMDEzNTE5Nzk4NzQ3NTk2NDQzLDAuMDAyMzkyMDQ1ODUxMzAyNjIxLDAuMDAzNjA0ODEyMTAyODYwMjQ4MywxLjU3NTU5ODM4Nzg4NTczNzRFLTQsMC4wMDM2Nzg3ODUyODAxMzU3MjEsMC4wMDEyNDIyNjYxNzYzNzg4NjQsOC4yNDk0NDk5MzEyNDQ3NDNFLTUsMS4wOTk4ODk4NzIyMTczMjA2RS00Cis2LFN1biAzMCBKYW4gMTEsMC4wMjA3MTkyODU5NDI0MzEyNDgsMC4wMjA3OTg1ODM2MjAxNDg4NzIsMC4wMTUxNzc5ODM3MDI3NTA0MjMsMC4xNzk5MjE0NzE4MTAxMDkxLDc1NjMwLjcxNDUwMzQyODc0LDAuMTg4MzE1Njg0MjA5MzY4MjMsMC4wMjY4OTc2MDYwMzE1MDI0MzcsMC4wNzAwNzI2MDM2MTU4MjkxNiw2Ljg0NzU0Mzg3MTI4OTMwOEUtNSwwLjQ5NzM1MTA4NzE0ODY2NTA1LDAuMzI2OTMwOTQ5Njk4NDI4MjMsMC4wNzY3OTg1MDQ5ODQzOTk5LDAuMDEyNTAyMDE4NDQwMTczMzI3LDAuMDE1NDM5NjE5NDEyMTI5NTczLDAuMzY0Nzg0MDYzNTIwNDMzNDcsMC4wMzgyMzAwNTY3MjQ5ODE3OTUsMC4wMDU5MDU4OTgxNTIzOTczMiwwLjAxODU1NjExNjQ0NjUzMjUzOCwwLjAzNDk1NDM1ODE2NDM4NTI2LDAuMTA5NjY5ODMxNDc3OTUwNTksMC4wODEwMjQyNDY0MzQxNDE2LDAuMDA5MTI5NDk2MzY2OTk4MjM2LDAuMTQ5OTM1OTI2MjQ5MTgyNjQsMC4xMzQ4NjQ1MjQ2NTY0NzQ0LDAuMDk5NzAxOTY2MzI1MDEzNjcsMC4wMDk3OTc0MDc3NTc4NzkxOTgsMC4wMTA4MTIyOTMyMjQzMzc0ODMsMC4xNTk5NTM4OTgzMDM1NjUwNywwLjAwNTE1ODEyNjMzMTA5NTA5OCwwLjAxNzkzODk0MTU2ODk4ODM1MywwLjAxNTM5OTYwODU2ODk2OTkyOSwwLjE0MjkyNzE1NzI5OTg4MDEyLDAuMDI0NzIyNDMzNDE1OTU0OTA0LDAuMTg5MjI0MjI0MzYyNzcxNjEsMC4zMjE2MDQ3NTQ1ODIyMTIyNywwLjE0NTE4MDQxMDEyMDQ2MzA3LDAuMDI2OTU0Njg1MzUyMzE0NzUsMC4wNTkwOTY4NzQ0MjExNDgzLDAuMTY0ODU4MzAzNzcwMzkyMTUsMC4wMjAzNjIzMDg4MDg0NjIwNzgsMC4wMjQ1MDE1MTA2MzAzNjMwNzUsMC4wMDQ5ODcwMTE0NDY5MTU1NzYsMC4wODkyMTcwOTA4NDgyODU3OSwwLjQ1NzI3MTkwODgyODgwOSwwLjA4MDkwMTA5NTY3MTk1NDY2LDAuMTIxOTI1MTUyOTg5MzcyNDcsMC4wMDUzMjkyNjk2MjMxNTg0ODYsMC4xMjQ0MjU2Mjk2NzA3NzY0LDAuMDQyMDE4MjYwODQ5ODM1NTIsMC4wMDI3OTAzMzg3NzM0NzYyMjA0LDAuMDAzNzIwMjU3Njc3MjU3MTI5Cis3LE1vbiAzMSBKYW4gMTEsNC43NjM0OTk3MDY1MzM0NDIsNC43ODI1MTE2MTgzODU0NjE1LDMuNDkwMDY3NzI3ODE0NTMyLDQxLjM2NDY0NTM5ODMyOTAyLDc5MTIwNTEuMjY5NTU4MTgyLDQzLjI5MjMzNTkyMjk4Nzg1LDYuMTg0ODMxMTk4MTMwMTgyNSwxNi4xMDE4NTUzMDU3NDcyODYsMC4wMTU3NDU5MzkwNDc3MTE5OSwxMTQuMzQ1NTQ2NjEwMjM5NDcsNzUuMTYwNTg5NTczNDE0ODgsMTcuNjUzMzk2MTMzODQ0OTUsMi44NzQ3NzIwODc5NDQxNzI1LDMuNTUwMTAxMTg1Njg2ODAxLDgzLjg2ODAyMjk5NzQ0NTcsOC43OTA2OTQ1NjkzMjM5MywxLjM1ODA0NTgyMzgzNjk4Myw0LjI2Njg3MTYyNjE1NTA5Niw4LjAzNzQwMzAyNzQ4MTg5NCwyNS4yMTYxMDI4NjY0OTkwODUsMTguNjI5OTA4ODMyNzI3NjcyLDIuMDk5MjQzODMwOTE1NzEwNCwzNC40NzQ4MTY1NjUzMDU4MywzMS4wMDcyNDQxNjcwMjEwNiwyMi45MjQxNDUxOTg3NDQ3NTcsMi4yNTI4NzIxMDI4MjI4NDc2LDIuNDg2MTE4NDk5MzQ1MTc2NiwzNi43NzcyMzkyOTQ4MzE3NDUsMS4xODYwNTc4MjQyNTk3OTUsNC4xMjQ4MTU5ODA1MDgwODUsMy41NDA4OTA1Mjc2MzU0OTYzLDMyLjg2MjkyODc0NjIyNDMzLDUuNjg0NDg2MTI4MTQwNjg3LDQzLjQ4ODQ1MTE0MjIyMDQxLDczLjk0NTg5NDM5MTIzMDEzLDMzLjM4MTgyMDgwMTk3MzQ3NSw2LjE5Nzk1OTA5ODkwNDkzMSwxMy41ODc5OTI2OTg5MDg5NzMsMzcuOTA2Mjg2NDE4MTMzMDIsNC42ODE3OTU0NTY5MTUyMDMsNS42MzM5MzE0NzU4NjQwNjYsMS4xNDY3MjExMzA5MDE1OTQzLDIwLjUxMzY0NDYxOTc2MTUzLDEwNS4xMzY1Mzg4MTg0NTU4OCwxOC41OTkzNTIxMzE5MjY4OTYsMjguMDMzOTQ1MzMwNDkwNjEsMS4yMjU0MDUzNjc5NzcwODQ5LDI4LjYwODIzMzkzOTgzNTUxNSw5LjY2MTY3NTcwNTA5MTQxMywwLjY0MTYzMzUxMjEyMTMxMzksMC44NTU0MzcyNDI1MTI1ODAxCis4LFR1ZSAxIEZlYiAxMSw2NjUwMC40Njk3OTM5MjcyLDIxODgxNy4wMTU5MDM5OTcwNiwxNDYwMDAuNTA5NDk3MDc4OTgsNTUzMzk1Ljg4NTUyMDIxMDUsMS42NjIxMzYzOTg5NjEyMDUyRTcsNDkyOTY0LjYxMjMxNzU0NzEsMjE4MDgxLjAzNzQzODQ0ODY2LDg0Mzk2Ljc2Nzk5MDI5NDUyLDEyNjIuNzk5ODMxNjMwNTY4NiwxNjY2MzkyLjQzMDczODE1LDkxNTI2MS4yMTE3NDUyNDgzLDE1Mjc4MC4wMjY4MjA1Mzg0LDEzNjc0Ny44OTE3Mjc0NDcsOTgzMzcuNjQzNDEzNTQ3ODUsMTI3MzM5Ni4yMDgzNTA4MzMzLDM0OTY0Ni44MDQxNDEzODQzLDgxMTc3LjA0NjMyNDg0NTY3LDE5NjgxNC43Mzc0NzM1NTIxLDI4NDkyNC4zMTg4NzcwOTE0LDU1MTE5My44NjM3NzA3NjU2LDQ0MDk1My4yMjY3NTA3MDcxNCw3ODA1MC4yMTMxNDgwODgwMiw4MjMzNjguNTcxOTU5NTQyOCw0OTQyNzMuNTc3MTA0NTAzMjMsNDkwODU4LjIyOTA4ODQ3MTQsMTE2NjcwLjAwNTU2NjY5NjYyLDY4Njc5LjgyNTI1ODU4ODAzLDczMTk3NC41NDc1MTg3NTgzLDQxNDM1LjMwMjgzNDE1NjkyLDEyMzYwNS40MzcxNTYzNDY3MSw5NTQ4MC4xNjYzNzk1ODc2Nyw3MjYzNDcuMjU1MzgwOTg3MSwxNDUxNTAuMDI2MjU5ODg3NDQsMjc3NzYyLjcyOTc3NTI3MzUsMTYzNjgyOC43ODM1ODM2NDE1LDg4NTczMi42MDYxNTk0MzE0LDIxOTg3MS44ODg0OTc3ODkxNiwyOTcwMjMuODA1MjQyODk0Nyw5NzU1MjUuMjA0ODUxODQxNCw5NDYyNi4wMjgxNzg1ODM0MiwyMjczODYuMjEyODgzMDEyMDUsNDQ0NzEuNTcwMjM3MzUxOTE2LDQ3Nzc4NC4xNjQ3ODQxNDA0LDE5NTY4MzUuMTk4NzQ0NDg3MywyNDMwNjcuMTg5OTUyMTAzNzcsNjEzOTMyLjMxMjM4MTkwNTksNDA3OTMuODU1ODEyMzEyNzMsNTQ2NTAwLjQxMzU4ODQ2NDcsMzQyMjA5LjQ3MDY4NDU0NTgsNDE2OTguNzAwNTAyNTMzNzcsMzA5NDkuODA3MzIyMjMyNDcKKzksV2VkIDIgRmViIDExLDI2MjYxNi45Nzg1NDQ2NzUxLDE2OTUyNzMuOTkzMjkxMjMwOSwxMDI4OTg2LjQ1NjA0MzY2OSwyMTU1MjU3LjM3MDg5ODA3NjMsMi4yNjI2MzkyMTM3MTU3MjNFNywxODI2MTAyLjEyNTk2MDA4MTQsMTMzMjIxMy41MTg4NjYyNjk4LDI1NTQwOC4yMjE1Mjg4MDIxNSwyMzY5NzMuMTM0ODQ3MjAwMiw2Njc1NzY2Ljc2NTc4NjY4NiwzNDYwMzE1LjU3NTQxNzEzNSw1MjM2MTUuNDk2MTA2NDg0MywxMTEwNTA1LjA0MDIwMjA2MSw1MTYzNzQuNDI0OTM0MDU2NSw1MTczMjY2LjE0Mzg3OTIwNywyMzUyMTgxLjg0ODYxODY0Niw5ODYyNDIuOTE4NTYzMzAyOCwxNTM5MzM0LjgyNTYyMzMyMTYsMTc0NzM3Ni4zMDg5Mjk5ODU5LDI1Nzg4ODAuMTE2MTA2NzA0MywyMTM4OTIxLjA3NjgwMjUwMTUsNDk2MzUyLjIyNDI5NDAzNTcsNDAxMDg1OC4wMjMzMTE4ODIzLDIwNDI1MTAuNjIwODA5OTU0NCwyMjc2MDMyLjA5NTg0Mjk1NCwxMDY3ODY2LjA4OTQwNTgzMDUsMzYwMTEyLjE0ODQzMTI2ODA1LDMyOTEzMjYuMTU2Mzc2MDUxNywyNTE0MjYuMTU0MzQ5MTIxODUsNjc4NjcwLjE4NTYzNjAzODksNDk0MTg5LjMzMTA1Mjk3NzYsMzQxNTAyMC40MTI4NTU3MjIsNzMwNDYxLjc0NDk2NzMyMTksODgwODAyLjU5NzU4MTY5NjMsNzcwMDg4OS41ODEwNzg5MTMsNDU0NTczMi40OTU1MTIyNDMsMTM0OTEyNS45OTM2MTIwOTY5LDEzODk3MDMuNzQ5MzYzNDM2OCw0OTI4NzAxLjY0NTc5OTk4OSw0MjgxODguNjgyODE5Njc2MzUsMTU0OTc4OC4yMjc4NzIyNDU1LDI5MjcxNy4wNTc0MzYwNTExLDIzMDAyNjMuMzYzMDAyMjY4LDg1NjYxOTQuMDkxOTAxMTE4LDkzOTU1NS41OTI5MzUzNDIxLDI4NzQ3NzAuNDE4NjE5MDI3NCwyMzkzNTguOTczMjAwNDA2ODIsMjQxNzAwNi42OTU3OTQ5MzE2LDIwOTczNjUuNTk2NDI3MjQwNCw2NTEyMDMuNjc1NjA4NjIxLDE5MjcxNy4yMTA3MzUxOTMwNQorMTAsVGh1IDMgRmViIDExLDQwODQ3MS45MjA0NDA1NTc4LDI3OTYyNzEuMTQ2OTk2NDI3MywxNjg2OTM2LjcyNjMxOTU2NzgsMzM0NjQ4OS41MjI1NTQ1NywyLjcxMDE1NzYwMTUxNTQ5NThFNywyODE3MTUwLjg1MDgwOTkzMzYsMjE2MTg1Mi4wNTY0OTg2MjI1LDM4MjE2NS44OTAxNDE0Mzc3LDQ1NTYyNS43MDQ2MTU1NTczLDEuMDQwMTYxMDQ5NzQ3MDA5NEU3LDUzNTI1ODcuNTY5Njg2OTE4LDc5OTA4My4wNDkwMTMwMzg5LDE4MzY5OTYuNzM3ODEwMTYxLDgyNzU1NS41NjIxNzM3NzkxLDgwNzQwOTYuNTM4NjYwNzgsMzg0Mzk1NS42OTY3ODM1NDczLDE2NjcyMDMuNTU3ODc2NzQzMSwyNTQwNTQ3LjYzMDg2NDYyLDI4MzY0MDQuNTEyODAxMDM3LDQwODc4OTMuNTgwMjA4ODYwMywzNDAyNjY0Ljk2MDMwNzcwNiw4MDc4ODQuNjUwMDUyNTgzMyw2MzgzMjI3Ljk1MjkzMTMxNywzMTk0MjI0LjczNDgzNDM1OCwzNjA0NTM1LjYzMTI4MTc5LDE3Nzg3MTguNDkzMzA5MTM3NCw1NzcwNDkuOTY5NjU5NjcyOCw1MTk1Nzk2LjQyNjkyNTEyNSw0MDc3OTIuNTM5NzM0ODkxMTUsMTA5MTg4OS4wMzg3MjYxOTYyLDc5MDk3NS4wNzQ1NzExNzgsNTQxNTk2OC4wOTM4ODEyOTgsMTE2NjEyNC4zNTI2NTI3NjEyLDEzMjgyMzUuOTE3ODkzNjE3NCwxLjIyMTM4NTQ4MzQxMzMzOTZFNyw3MjcwMDY5LjQ1NzM1MzM2OSwyMTkwMDM2Ljc2Njk3NDI1NzMsMjIwMjg4MS4yMjUxMDYxMjY2LDc4NzExNzUuODc0Mjc3MjA0LDY3NjQwNC43NjU1ODEwOTc3LDI1MzQ5NzAuMTc3NDg2NjA2NCw0Nzc2MjYuMDQ4NzI1NjE1NSwzNjU2NjU0LjI2MjI2MzA2NiwxLjM0ODM5MzcyOTM0NDg3ODJFNywxNDU3NDc4LjM3OTM3NjA1ODUsNDU1NzMwMC4wODI3ODY0MDcsMzg3MjAzLjM4NTYxNjgwNDYsMzgwODgxOS4wMDk0MzgzNDQzLDM0MDQzNTUuOTQxNjMzNzA1NSwxMTE0MTA1LjkwODc5MzIwOTYsMzEzMTg0LjkyMTkyNTI5MDYKKzExLEZyaSA0IEZlYiAxMSw0OTU4ODUuMTY3NTQ0OTY2NywzNDU2NzE0Ljk1MjgzODM5MDYsMjA4MTU5OC4wNTAzNjYwMDkxLDQwNjAzNzcuNjQxODM3NTE3NywyLjk3OTQ1MjYxODQ3NDAzMzVFNywzNDEwOTQ3LjYxOTg0MDg4MSwyNjU5NDU0LjA3MDY4NDM1NjYsNDU4MDE5LjAzMjExNzAwNTAzLDU4NjgxNi4zNjAzNjUyMzQ1LDEuMjYzNDY4MTg2MDg4ODNFNyw2NDg2NDYzLjI5ODQwMTMsOTY0MDY0Ljk0NTU0MDA1NzgsMjI3Mjc5Ny4zOTU0NDUxMTUsMTAxNDE2OC43MzUxMzY1OTc0LDk4MTI3NzkuOTk3NjE5NDcyLDQ3Mzg3NTEuMDM2NjQ0MDM2LDIwNzU3MzAuMTU3MDkwNTA3NCwzMTQxMTM3LjAyODczODEwMSwzNDg5NTg1LjYyNzI2NzA0MSw0OTkyNjc3LjMyMDg3NzI3Miw0MTYwNDM2Ljg3NjE2Nzk0Miw5OTQ3NDEuNDQ4NTg0NzQ2Nyw3ODA1NzY5LjIyMTYyMjk2NiwzODg0NTY5LjU0MTgyMTEzNDcsNDQwMTA3NC4zMTUwOTIzNzQsMjIwNTE1My4xOTA5ODkyMTYsNzA3MTQ1Ljg0MDQ0OTA5MDcsNjMzNzU5OC4wNjIyNjUwMjMsNTAxNTc3Ljc1NDg1NTQyMDcsMTMzOTcwNi4yOTY0Mjk2NTQ0LDk2ODk1Mi4xNDcwMTk0MjgsNjYxNTcxOS44Mjc1OTMxMzc1LDE0MjczNzMuMjYzODk4MDQ2NSwxNTk2MDc0LjY4MTc3NTc5ODgsMS40OTE5Nzk0OTMzMDQ4ODc4RTcsODkwMzc4Ni45MTI3MTY2OSwyNjk0NDAxLjM0NDE0NjEwNCwyNjkwNDUxLjI3NjE4NDY5MTYsOTYzNTY2Ni40MjEyNzEwMzIsODI1MjIxLjY5OTA4ODIxMzQsMzEyNTkwNi4wMjEwNjY2NzUsNTg4NTM2LjY4NDY1MTc3NDgsNDQ2OTk2OS4zNjgzMDA5MTgsMS42NDMyMTI2NjkyMzA1MUU3LDE3Njc4NTIuOTc0MTM4MTQ2LDU1NjYxMjMuMzE1MzE3NTIxLDQ3NTg3NC44NzU4OTUzNTU1LDQ2NDMyMzEuNTc1OTE5NzkxLDQxODgyNjYuNzc0MTM1MTk5NCwxMzkxODIyLjQxMzM5NDM5MjUsMzg1NDQwLjI2NjYyOTY0NworMTIsU2F0IDUgRmViIDExLDU0ODM0MC40ODYzNTc0NDA0LDM4NTI5NTUuNTMzMjc3MTExLDIzMTgzNzguNDQzOTg1MDI5LDQ0ODg3ODMuNTk3NTY4MzE2LDMuMTQxNjk0MzQzNTY1ODE3NUU3LDM3NjczMzguMTg0MzE1MTA3OCwyOTU3OTkzLjMzNjIxNjEzMDMsNTAzNjM5Ljg2Nzg3NTUzOTcsNjY1NTMwLjQ0MjI4NDA3ODgsMS4zOTc0Njc2MjYwNTMxNDlFNyw3MTY2OTU3Ljk5MDkyOTA5LDEwNjMxMjUuMjM1NDc0MTk4NCwyNTM0MjYxLjQzNDc3NjA4MywxMTI2MTI5LjE3MDU5MzI5OCwxLjA4NTYwODM0ODk4MjkwNzVFNyw1Mjc1NTkwLjA1NzExMTYyNjUsMjMyMDgzNS4yNTA3MDYyNTcsMzUwMTQ2Ny40NjA2OTg4NjksMzg4MTQ2NS41MDY4OTM1MzI0LDU1MzU1MjcuNDUxOTg3MDA0LDQ2MTUwNzcuMTQ1NTA3NDk2LDExMDY4NDcuMzYxODE5NDIxOSw4NjU5MjQ5Ljk0NzUxNzE2OCw0Mjk4ODAzLjE1NTI4ODA5LDQ4Nzg5ODEuNzc1Njk1Nzc0LDI0NjA5OTkuNTA0OTUwNDc1LDc4NTE5OC4xNzEwODQ0NjEzLDcwMjI2NjguMDczMTc2NDE3LDU1Nzg0NC43NDU1MzMzMzg3LDE0ODgzODYuMTAwMTQxMTE0NiwxMDc1NzMxLjQ4MTU3MzYwMjQsNzMzNTU0Mi42OTg0NDI1NzMsMTU4NDExMy4yNTUyMDM5MjgsMTc1NzAyNC4zMDU2MDQ0NDEzLDEuNjU0MzI5NTAxMTA4MzYyNUU3LDk4ODM5NTUuMjg2Njg2OTEsMjk5Njk5Ny44NjIxNDg1NDE1LDI5ODI5ODIuNDY2OTQ1NDY2NiwxLjA2OTQyOTY3MTE3NDMxNTdFNyw5MTQ1MTAuMDgxMjc2NjQ4NywzNDgwNDQyLjQ4NDA5NjA3NTQsNjU1MDc4LjI4MzM4MzM1ODMsNDk1NzkzNS4wMzcxMzg1NzEsMS44MjAxMDQ2MDk0MDYzNTI4RTcsMTk1NDExMi44Mzk5NDQ2NjgzLDYxNzEzOTQuNjEzMjIyOTAzLDUyOTA3My44NjI1NDQzMjU5LDUxNDM4NzYuNzczNTk2MzQ5LDQ2NTg1NzguNzE5NjE5MDI0LDE1NTg0NDYuMzkxNjY3NjgxNyw0Mjg3OTAuMjk3NjA2MDQ1OQorMTMsU3VuIDYgRmViIDExLDU3OTc5MS4wNzI3NDkwMTQ3LDQwOTA2NTcuMzk5NjU1OTY0LDI0NjA0MTcuMDkzMDkzNDQ3NCw0NzQ1NjM2LjI0MDc0MTkzOSwzLjIzOTM1NjM4OTIzMDk0NTNFNywzOTgwOTkzLjg3ODUyMDYzOTYsMzEzNzA2OC43MzY3MDI1MTUsNTMwOTg0LjA2NTYxNzU0NDgsNzEyNzU4LjYxNTM2NTY1NTcsMS40Nzc4MTE1Mjg5NzcyMjJFNyw3NTc0OTI5LjM1ODU1Nzg3LDExMjI1MDMuMjYxOTk5NDM5LDI2OTExMTMuNzc5MDg0NTUxNiwxMTkzMjgwLjg2MTgzMjMwOTMsMS4xNDgxNjQ2MDc5NTE1ODY5RTcsNTU5NzYyMC44MjI2NzMwMjMsMjQ2Nzg4NC4xMDE4MTMwNDQsMzcxNzYyNy42NTMyMzQyOTQ2LDQxMTY1MzAuNjg2NjAyMzgxNSw1ODYxMDgyLjcxMDY0MTg4OCw0ODg3NzQyLjEzMTc0NjUzMiwxMTc0MDk0LjEzMzAyMTA0MjQsOTE3MTExNi44MzQyNTY0MjUsNDU0NzE4My41OTUzMjAxNjMsNTE2NTU4Ny4wMTgxMjQ1MywyNjE0NDg1Ljg0MjU2NzMxNjMsODMyMDEyLjM4NjA2MTYzMjEsNzQzMzQ5NS4yMzc4MDI1NjEsNTkxNTk1Ljc0NjMxNjAzMjcsMTU3NzU2NC4zMTIzNTQzMTcsMTEzOTc3NC44OTkzOTM1MTQ3LDc3NjcyMzMuNDgyNzcxNjczLDE2NzgxMTkuNDY2Mjg5NjA4NywxODUzNDkxLjIzMTg4MTQ4NTgsMS43NTE2OTM4MDY0MDc3NDc4RTcsMS4wNDcxODMwMTQyOTkzNzkzRTcsMzE3ODUwNy4zNjg2ODU0MzM2LDMxNTg0MTcuNzUzODY2MDAwNiwxLjEzMjkyMjE5NDE0NTE4NTdFNyw5NjgwNTUuNTMzNDM1NjU1NSwzNjkzMTE3LjQ1OTg4NDY3NjYsNjk0OTkzLjg4NDk0MjU5MjEsNTI1MDU4NC4yODgyNzMyNDcsMS45MjYxODA1NjgzMTY1OTc1RTcsMjA2NTc4NC4yMzQzOTI4NzQyLDY1MzQzODUuMTAzNTEzMzI2LDU2MDk4My45NzY3MTQ2NDQsNTQ0NDEwMC40NjIwODA3OTEsNDk0MDY5MC40ODk5MjE0OTMsMTY1ODQxMy41OTI0MzczOTU4LDQ1NDc5My41NzA3MzkxMjA2CisxNCxNb24gNyBGZWIgMTEsNTk4NjU4LjkwNTg0NzE1ODYsNDIzMzI2NC4wMTc0NzgwMDgsMjU0NTYzMC41NTIzODg1OTYzLDQ4OTk3MjkuMjExOTU1NTc2LDMuMjk4MTc1MDU2Nzg5NDhFNyw0MTA5MTgwLjY3ODI3MjI2OCwzMjQ0NDk5LjMxMjczNzUzMzQsNTQ3NDExLjE0NzYxOTE5NTUsNzQxMDk1LjM4OTYzMzk2NTMsMS41MjYwMTA5MTQyNjExOTMyRTcsNzgxOTY5MS4zOTk5NTkxNjgsMTE1ODEzNi4yOTc2ODQ3NTQ1LDI3ODUyMTYuMTQxMDI0MDkxNywxMjMzNTY1LjMxNjc4NDcyMTMsMS4xODU2OTI2MjIyNDM0MjEzRTcsNTc5MDgxNS45MDU4MzY5NzIsMjU1NjEwOC4wMDQ4MjIyMTgzLDM4NDczMTAuNzMwODM5MTA1LDQyNTc1NTAuNjM4Njg2NDg1LDYwNTYzODEuMTk5ODEwNTc3LDUwNTEzMTIuNjA4MjI4OTM1LDEyMTQ0MzYuOTU4MzQ5NDA4Niw5NDc4MTgzLjU4NDYwMzAyLDQ2OTYxODcuODIyMzAzNDY3LDUzMzc1MTkuNTY2MDQ1ODUzLDI3MDY1NjkuOTQ2NzgwODQ1LDg2MDA5Ni4zMzUwOTUxNTkyLDc2Nzk5NDcuNjIwODM1ODc0LDYxMTg0My41NTk4NDQ3MjgyLDE2MzEwNjIuOTM5MTEyMDE5NywxMTc4MTk0LjYwMjk2ODUzMjQsODAyNjIwMi4wNjY1ODA0NDMsMTczNDUxMy42MzIyOTU5NDA4LDE5MTE0MTEuMTA4NTU0MTExNiwxLjgxMDEwMjA0Mjg2NjM3MDVFNywxLjA4MjQ0OTYzMTg2MzUxMDZFNywzMjg3Mzk4LjI5MDc0MzYxMDQsMzI2MzY2MC4yNDUyNDQzMTYsMS4xNzEwMTEyNzI2ODI1MjkxRTcsMTAwMDE3Ny4wNzYyNjk4NzEsMzgyMDcwNy4yNTY3MjYwMjMsNzE4OTQwLjI2ODI1NDcxMiw1NDI2MTQzLjA5MTgxMjQyMjUsMS45ODk4MTQ5MzExNzE0NDVFNywyMTMyNzc5LjUwNjE1OTY3Nyw2NzUyMTQwLjc1NjIxNDEyMiw1ODAxMjcuMjk5MTkyOTE1Miw1NjI0MjAyLjc1MjM1NTUwNyw1MTA5OTM0LjU0NDM4ODUyLDE3MTgzOTEuMDcyNDQ3NTgxLDQ3MDM5My40NTUzNDk3MDQxCisxNSxUdWUgOCBGZWIgMTEsNjA5OTczLjY4NTgxNTc3NTgsNDMxODgxNC44NTk3ODIzODEsMjU5Njc0OS41NjAwNTc3MjM0LDQ5OTIxMzUuNTI5MjM2MDkxLDMuMzMzNTg1MzUzNjU5ODYwNEU3LDQxODYwNDguNjMyNjY3MTc2LDMzMDg5NDMuMTM5MTQ2NTE3NSw1NTcyNjQuMzIxODg3NTAwNiw3NTgwOTcuMzYxODM0MzI0NSwxLjU1NDkxNTc5MjAxNTExMjRFNyw3OTY2NDY2LjUwMzk5MzA5NCwxMTc5NTAzLjM4MjIyNTkwMDQsMjg0MTY2OS40Njk4NTc3Njg2LDEyNTc3MjguNzcyMDkxMjA5MiwxLjIwODE5ODIyODQxMDI1ODNFNyw1OTA2NzEwLjc5NjE3ODMxMSwyNjA5MDM3Ljg0MzYzOTQwMSwzOTI1MTA4LjgwNDY4NjM1OSw0MzQyMTQzLjY4MjE4NjcxNyw2MTczNTE2LjE4OTA5MDEzNTUsNTE0OTQyMC41NjY2OTUwOTEsMTIzODYzNy41NjkxMTk4MTQsOTY2MjM1OS43NDI5OTk4NTUsNDc4NTU0Ny4yNjE3NDgwODg1LDU0NDA2MzkuNTQ5ODY4NTksMjc2MTgxMy43MDM4ODkwNTQ3LDg3Njk0MS42NTgzMzMxNjk5LDc4Mjc3NTguNzEwNDYwMDI5LDYyMzk4OS40Nzg3ODE4Nzk2LDE2NjMxNTMuMzIxMTQ2NjU3NywxMjAxMjM5LjM0MzcyMjA0NzMsODE4MTUyNS4zMTI5ODQ3MjEsMTc2ODMzOS4xNDEzMzE4MTM1LDE5NDYxNDUuNzg5MzExOTc0LDEuODQ1MTMzOTQyNjUyNTM1NEU3LDEuMTAzNjAyOTkyNDUyNTI0RTcsMzM1MjcxOC4yNDE5NjE5NDYsMzMyNjc4MS45NzM2NDYwODc2LDEuMTkzODU3MzU0OTM1NDU2NkU3LDEwMTk0NDIuMjM3ODgwOTU4MiwzODk3MjQ2LjgwODQ0OTY1Nyw3MzMzMDUuMjUwNzEyNTc4OSw1NTMxNDQwLjk2NjYwMTMwOSwyLjAyNzk3OTEwMzQwMDkzMjNFNywyMTcyOTU0LjkwNjczNzM1MSw2ODgyNzQ1LjA1NDEwMjg0MSw1OTE2MTAuNTExODA0MDQwNSw1NzMyMjE4LjUzMDgwNTk3NCw1MjExNDU4LjIzNTc2MzA4MywxNzU0Mzc1LjI2MTQyMDk3MTUsNDc5NzUxLjM0NzI2MDIzNAorMTYsV2VkIDkgRmViIDExLDYxNjc2MC44MjMyMjA2MjExLDQzNzAxMzkuMjkyMzUwNzkxLDI2Mjc0MTYuODQxNzQzNDM1LDUwNDc1NjUuNDYzMTI1NTQ3LDMuMzU0OTA3ODkxMzU3MjU1N0U3LDQyMzIxNTkuNTEyNjc0MzE3LDMzNDc2MDMuMDYzMDAzNjUsNTYzMTgwLjQ5NjEyMjI0MzYsNzY4Mjk4LjQ5NTY0Mzk2OSwxLjU3MjI1NDIzNjczMzgzMzlFNyw4MDU0NTExLjA2ODcxNDQ3OSwxMTkyMzIyLjc1ODEwNjU5NzUsMjg3NTUzNy42OTgyNTkxNDMsMTI3MjIyMy44NjEyMTAyMzcsMS4yMjE2OTgwNzQ1NDY3MTg4RTcsNTk3NjIzNy43NTU2ODQyMTUsMjY0MDc5My41NTYxMjM5NzgsMzk3MTc4Mi4xOTQ5Mjc0NTc3LDQzOTI4OTEuMTkxNzczOTEzLDYyNDM3ODAuMzExNTAwNjQ3LDUyMDgyNzEuODI0NzE0LDEyNTMxNTUuNjc4NTU4OTk1LDk3NzI4NDAuMjAyMDE1NjIzLDQ4MzkxNDguOTA2MTEzNDI0LDU1MDI0OTYuNTM0OTc5ODE5LDI3OTQ5NTYuNzgzNzY5MjE0NSw4ODcwNDYuNzY3NTY3NTQyNiw3OTE2NDIzLjE2NDkwODAzMiw2MzEyNzUuODE3MzMxNjE0MywxNjgyNDAzLjgzNzA2MjQ3NjcsMTIxNTA2My4yODI4MDEwOTE0LDgyNzQ2OTcuMDE2Nzk1ODkyLDE3ODg2MzAuMDEwNTY5MzA1NCwxOTY2OTkyLjg2NjYxMjQxOCwxLjg2NjE0ODA2OTUwMDNFNywxLjExNjI5MjMwOTYyNzQ2ODlFNywzMzkxOTAzLjc5NTgzNTExNSwzMzY0NjQ1LjkxOTI1NTkzNzQsMS4yMDc1NjIwMjQzNzE4OTM3RTcsMTAzMDk5OC40NTg4OTA5MDc3LDM5NDMxNjQuMDcxNzc2MTg0Myw3NDE5MjIuOTY1MDAzMTIyMyw1NTk0NjA1LjA0MzgwMDc5NCwyLjA1MDg3MTc0NjMwMjM1MDJFNywyMTk3MDU0LjIwNTgwNTE3MTcsNjk2MTA4OC44Mzk1NDYwOTQsNTk4NDk5LjIzNDY2OTc0MDMsNTc5NzAxMS41Mzk4OTUyNjMsNTI3MjM2Mi40NjAzNTQ0ODYsMTc3NTk2NC42MzY2MTA5NzQsNDg1MzY1LjE4MjU5MDQyMzQ0CisxNyxUaHUgMTAgRmViIDExLDYyMDgzMS4zNTE5NTY2Nzg3LDQ0MDA5MjkuNTg1MTk3NjQxLDI2NDU4MTQuMjA5ODQ5NzA4Miw1MDgwODA4Ljg5NTU1MTc1LDMuMzY3NzQ0ODQ1MDQxMzgxRTcsNDI1OTgxMy41ODc0NDA2OTIsMzM3MDc5NC4yNjE0NjAxNjgsNTY2NzMwLjIxNTU0NTQ5OTMsNzc0NDE5LjE0MzgyNzUxOSwxLjU4MjY1Mjg5NzY0NTQxMDVFNyw4MTA3MzE0LjIwNTgxOTkxNiwxMjAwMDExLjE3OTAwODkyNjUsMjg5NTg1NS45MzkxOTM3NDE0LDEyODA5MTguNTkwMDM4MDk1OCwxLjIyOTc5NDYxMjcyNTAzNDRFNyw2MDE3OTQ2LjYxOTQyODQ4MSwyNjU5ODQ1LjQ2MzI2MzQ0MzcsMzk5OTc4Mi4zMTE1MjczMDEsNDQyMzMzMy40OTU1Mjc1NjMsNjI4NTkyNC44NzQyOTI2NjA1LDUyNDM1NzEuNjY5MjkyNjAxLDEyNjE4NjQuODczMjg3NTI4OCw5ODM5MTA4LjE1NDA3MTE4Miw0ODcxMjk2LjgyNzExNDczNCw1NTM5NTk4LjI3OTY3NjM2LDI4MTQ4NDAuMzg2MDYxNDU4LDg5MzEwOC4yMDgxOTA1NDA0LDc5Njk2MDIuOTk1OTIzMDExLDYzNTY0Ni43MTM5MzMzMzc2LDE2OTM5NTEuMjk3NTI4Mjk1OCwxMjIzMzU1LjM3MDMyMzA1MDUsODMzMDU4MS43NTU2NzY1OCwxODAwODAxLjAxNTU3NzIxOTIsMTk3OTQ5OC4xNDE4NDI1NDczLDEuODc4NzUyNDI2ODk3ODU4NUU3LDEuMTIzOTAzNzc4Mjg0NjcyRTcsMzQxNTQxMC4zNDMzNDY5NDIsMzM4NzM1Ni43OTA1NzYyMTk2LDEuMjE1NzgyNDY4MDIxNTQ5N0U3LDEwMzc5MjkuNzYyOTA5NjgxNCwzOTcwNzA5LjY5ODQ2NzY5MzMsNzQ3MDkyLjY1NTM4NzIzOTEsNTYzMjQ5MS42MTg3Mzc1NDQsMi4wNjQ2MDIyMzc1NDM2NDY2RTcsMjIxMTUwNy40MjU3NjU3MDIsNzAwODA3OS42MjM1MzY0NDE1LDYwMjYzMS41NjA4NzcyNTk4LDU4MzU4NzMuMTc1NzQwODg0LDUzMDg4OTcuNTQzOTM5NjMsMTc4ODkxNy40ODE0NTI3NTQ3LDQ4ODczMi44MTQ4Njg4ODMKKzE4LEZyaSAxMSBGZWIgMTEsNjIzMjcyLjkxOTU2NzA4OCw0NDE5NDAxLjQzNzk0ODE4MiwyNjU2ODUxLjA0NzMyODA5OCw1MTAwNzQ4Ljg2NzAzNzk5MywzLjM3NTQ3MzgwMjE3NDY5NEU3LDQyNzY0MDEuMzE0MDg4MTE4LDMzODQ3MDYuNTEzMTUzNjc4LDU2ODg2MS4wNDU1ODkwMTkxLDc3ODA5MS41MTQ0NDI5ODc0LDEuNTg4ODkwMTc2NjI2NjE4NEU3LDgxMzg5ODYuNzA2ODc5NzE5LDEyMDQ2MjMuNDI4NjE4MzU3MywyOTA4MDQ1LjQ0NDUxOTM3MSwxMjg2MTM0LjI1NTI4NTcwMywxLjIzNDY1MTA0NjEyMDE1NThFNyw2MDQyOTY4LjA5ODAxMTg0MywyNjcxMjc1Ljc3OTI1NTQ1Miw0MDE2NTgwLjI5NTk0OTUzNyw0NDQxNTk1LjY1ODMyMTU0NCw2MzExMjA0Ljg1NTM2MzQ5Myw1MjY0NzQ2LjIwMjU1NjcwOCwxMjY3MDg5LjUxODQ4NTgyNjIsOTg3ODg1OC45MDA5MDM3MDcsNDg5MDU3OS43MDY1MjIxMDcsNTU2MTg1My4zMDQ1NTcyMTksMjgyNjc2OS4zMzk2NTYyNDcsODk2NzQ0LjI1MzYwNDExMTYsODAwMTUwMS45MTI1MDQ4OTY1LDYzODI2OC43ODIwMzk4MDk5LDE3MDA4NzguMzIyNzMzNTAzNSwxMjI4MzI5LjQ3OTU2MzYxNSw4MzY0MTAzLjcwMDM5Mzk3NCwxODA4MTAxLjg2NTkxMjM0NjIsMTk4NzAwMi4yNDU3OTMwMjI3LDEuODg2MzEzMDM2MTk1MTE5NUU3LDEuMTI4NDY5NTk2MTE3NzI0M0U3LDM0Mjk1MTEuNzg3ODczNjA5LDM0MDA5NzkuNjcyNDE2NjQ3LDEuMjIwNzEzNTU3NTkzOTQ5RTcsMTA0MjA4Ny4zODM3OTc0MDYzLDM5ODcyMzQuNTg2NDk4MzY4NSw3NTAxOTMuOTc4MTYwNjI0LDU2NTUyMTcuNzMyNTIyODg0LDIuMDcyODM4MTQwNTA0NDg5RTcsMjIyMDE3Ni43MjQzMTQ2OTQ4LDcwMzYyNjYuNTY4OTQyNTQsNjA1MTEwLjQ4ODY4ODUzOTUsNTg1OTE4My40NjM4ODA1MDUsNTMzMDgxNC43MjY1MzY3NzIsMTc5NjY4OC43NTk3Nzc2ODA3LDQ5MDc1My4wNDYyNjM2ODA4NQorMTksU2F0IDEyIEZlYiAxMSw2MjQ3MzcuMjk1NjE5MDA5OCw0NDMwNDgzLjAzODIyMzMwNywyNjYzNDcyLjExNDE0ODgzOTQsNTExMjcwOC4yMDA1MDU2MTE1LDMuMzgwMTI2ODEwODA1ODk1RTcsNDI4NjM1MC4wNzI5Njk0MTcsMzM5MzA1Mi4yMzI2MDQxMjksNTcwMTM5LjcxODE1NzI1NjcsNzgwMjk0LjkyNTQ0MjMyMDYsMS41OTI2MzExMTgxMDE4ODU1RTcsODE1Nzk4Mi43NjU0MTIxMjMsMTIwNzM4OS44NjQwNTQyMiwyOTE1MzU4LjIxMzQxNzMyOTQsMTI4OTI2Mi44NjQ5MzcxOTk3LDEuMjM3NTYzODEwNDc2MTk0N0U3LDYwNTc5NzguNDY1OTI5MjIyLDI2NzgxMzMuNDM4MjYxMTE4Nyw0MDI2NjU3LjczMDMzODUyMDQsNDQ1MjU1MC44Mjc4ODk3MSw2MzI2MzY4LjE4MDI4ODM2LDUyNzc0NDcuMjQ3MjQwMDk0LDEyNzAyMjMuNzMxMjU3OTQ0LDk5MDI3MDIuNDk5Mjg4MTIxLDQ5MDIxNDUuMTYzNDE0NTYzLDU1NzUyMDIuMTUyMTk3NDksMjgzMzkyNS45MzE1ODAzODE1LDg5ODkyNS4zMjkwNjY5OTEzLDgwMjA2MzQuOTg1MzM2Njk2LDYzOTg0MS43MTIwMTM4OTA1LDE3MDUwMzMuNTY2Nzk5MTMxMiwxMjMxMzEzLjE3MzE1MjE2NjcsODM4NDIxMC43MzMyMzA3MjUsMTgxMjQ4MS4xODY2MjUxOTY0LDE5OTE1MDQuMTY3NzU5NzU5NiwxLjg5MDg0ODAxOTgzNzIwN0U3LDEuMTMxMjA4MzY3NzYwMjg2RTcsMzQzNzk3MS4wMTI3MjEzMjYsMzQwOTE1MC44ODgzNzYwOTEsMS4yMjM2NzE0MTM0MDM2MDk0RTcsMTA0NDU4MS4xNDYzNTc0MTM0LDM5OTcxNDcuODg4NDA2Mzk3Myw3NTIwNTQuNDQ4ODY0NTU1OCw1NjY4ODQ5LjQwNTQ0MTgsMi4wNzc3Nzc5OTM2MjUwODY1RTcsMjIyNTM3Ni4yNzUxNDE4MjIsNzA1MzE3My41NDMyNzYzNTY1LDYwNjU5Ny41MzQ3MjMxNTM3LDU4NzMxNjQuOTMwNDgyMDU1LDUzNDM5NjIuNDc5NDM3MTc1LDE4MDEzNTEuMjUzNzA4MTM1LDQ5MTk2NC45NTU0MDAyNQorMjAsU3VuIDEzIEZlYiAxMSw2MjU2MTUuNjMzNTk0ODY3Miw0NDM3MTMxLjE0MDc1NTk2OSwyNjY3NDQ0LjE2ODg2NzE3MSw1MTE5ODgxLjQ1NDQ1NjQ3LDMuMzgyOTI4MDg4MjI0NDZFNyw0MjkyMzE3LjQ2NjEyNzM0NywzMzk4MDU4Ljc0OTYxMTIxNDcsNTcwOTA3LjE4NDQwMDQ5MDYsNzgxNjE2Ljk2NTM3Nzk5OTEsMS41OTQ4NzQ5NDk5MTQ1NDY3RTcsODE2OTM3Ni43NDEzODYwNDgsMTIwOTA0OS4zNjQwNDAzMDY4LDI5MTk3NDUuMzQzNzAyMTY0NSwxMjkxMTM5LjU5NDI4MTI3MjcsMS4yMzkzMTA5MDE0NDY0NjkxRTcsNjA2Njk4My4yNjYwNjE3NDY1LDI2ODIyNDcuNzI5MTMxNjEzLDQwMzI3MDMuNDIxMDg4MTMzNSw0NDU5MTIyLjczNjI3NzAzMyw2MzM1NDYzLjY0NDAxODQ2Myw1Mjg1MDY1Ljg2NTU2ODgzOCwxMjcyMTAzLjkzNjA4MzYyNzQsOTkxNzAwNC45MTIzMzAzMzUsNDkwOTA4Mi4yMDY2MzEzMzMsNTU4MzIwOS4yMDMzMjY2MDMsMjgzODIxOS40NDE2NTUxNTY3LDkwMDIzMy42NjkzNjMzMzEzLDgwMzIxMTEuNDUzNDcyNzc3LDY0MDc4NS4yOTU3OTUxODYxLDE3MDc1MjYuMTczNzUwODA3OCwxMjMzMTAyLjk2MzMyNjA3ODYsODM5NjI3MS42MjAzNzE2NCwxODE1MTA4LjEyNTE5ODY3MTYsMTk5NDIwNS40NDIyOTcxMTY2LDEuODkzNTY4MjU5MTIzODQ4NEU3LDEuMTMyODUxMjM0Mzk4NjkzNEU3LDM0NDMwNDUuNjI2OTA2MDc4MywzNDE0MDUyLjI1Mzk0Mzk0LDEuMjI1NDQ1Njg4MDE5NjU0MkU3LDEwNDYwNzYuOTY3NjIxNDYwMiw0MDAzMDk0Ljk0OTI0Mjc2MDQsNzUzMTcwLjU0OTM4MzIxNSw1Njc3MDI2LjIyODY4NDcxNSwyLjA4MDc0MTAwNDI0MDc2M0U3LDIyMjg0OTQuOTg4MTE3MzEyLDcwNjMzMTQuOTA4OTUzNjU0LDYwNzQ4OS41ODg3MTY5ODQ1LDU4ODE1NTEuMjkxMDA4NTY1LDUzNTE4NDkuNjk3NTc0MjM3LDE4MDQxNDguNTkyNzM0ODczLDQ5MjY5MS45NzE5NDMwNzQ1NQorMjEsTW9uIDE0IEZlYiAxMSw2MjYxNDIuNDQ1ODY0Mjg1OCw0NDQxMTE5LjQ2ODczOTU1OSwyNjY5ODI3LjAzNjcwOTI4Nyw1MTI0MTgzLjg0MzQ1OTAyOCwzLjM4NDYxNDQ1MDE0ODMwNkU3LDQyOTU4OTYuNjIwOTQ5NzQyLDM0MDEwNjIuMDg2ODU4NDIxNiw1NzEzNjcuNzQ5ODE5NjIxMSw3ODI0MTAuMTg1Mjc2NDMyNywxLjU5NjIyMDc2NjEzNTM4MjhFNyw4MTc2MjEwLjY0Nzk3OTgyOCwxMjEwMDQ0Ljc3ODY1MjYwMzUsMjkyMjM3Ny4yOTE4MjEwMzUsMTI5MjI2NS4zNTYzMzczOSwxLjI0MDM1ODc4Mzg3NzIzNTNFNyw2MDcyMzg1LjI1OTE5OTA2MywyNjg0NzE2LjExNTQ2OTA3NzYsNDAzNjMzMC4zNTY2ODcyNDM2LDQ0NjMwNjUuMTMzODkyMTk1LDYzNDA5MTkuMzA3NTEwMDU3LDUyODk2MzUuNzYwMjY4NjEsMTI3MzIzMS44NTcwNTE5NTIzLDk5MjU1ODMuOTgwNzMwNDQyLDQ5MTMyNDIuOTc3MjI2OTczNSw1NTg4MDExLjk5MjMyOTE3NjUsMjg0MDc5NS4yNzE2NjAxMSw5MDEwMTguNDgwOTcyMTA5OCw4MDM4OTk1LjE2OTU2MDEyNSw2NDEzNTEuMzM2OTExNTE3NSwxNzA5MDIxLjM5ODI2MzAyNjcsMTIzNDE3Ni41NjgyMTYwNDQ3LDg0MDM1MDYuMDI3OTI3MTk4LDE4MTY2ODMuODc0MjE3NDM3LDE5OTU4MjYuMDk4ODE3MDc3LDEuODk1MTk5OTIzOTg0NzYxNUU3LDEuMTMzODM2NzAzNzM3ODY2M0U3LDM0NDYwODkuODE4NzYzOTM3MywzNDE2OTkyLjIwMzE0Mjk0MjQsMS4yMjY1MDk5NzQ5MTU4MzU4RTcsMTA0Njk3NC4xODA4NTI0MDUzLDQwMDY2NjIuNjExMzg0NTc2LDc1Mzg0MC4wOTYwNDg4NDIyLDU2ODE5MzAuOTM1OTc5NTIzLDIuMDgyNTE4MjMwMDkxMDYxNEU3LDIyMzAzNjUuNTM1MzYwNjMsNzA2OTM5Ny45MzAyNTYyOTEsNjA4MDI0LjcxMjE2NTkwMTMsNTg4NjU4MS40ODczNTgwMiw1MzU2NTgxLjEzMDU0NDY4MiwxODA1ODI2Ljg5OTE1NzA5MTUsNDkzMTI4LjEwMTE1ODk1NTU0CisyMixUdWUgMTUgRmViIDExLDYyNjQ1OC40Mjc4MDI4NjQzLDQ0NDM1MTIuMTUzNjU2MTQsMjY3MTI1Ni41NDQ0ODQzOTYsNTEyNjc2NC40MTYwMzYyNDUsMy4zODU2Mjk2Mjk4NTMwNzJFNyw0Mjk4MDQzLjQyNTc3NjkzMywzNDAyODYzLjc1NjMyNzA1MzUsNTcxNjQ0LjE2NDk3NjE2MzgsNzgyODg2LjExNDgwMzQ4NTIsMS41OTcwMjc5ODc0NjM2OTY5RTcsODE4MDMwOS42NDQ3MTA4MjQsMTIxMDY0MS44ODgyMjAwNjU1LDI5MjM5NTYuMjY3NjAzMjYzNywxMjkyOTQwLjY1NDYxNTY5NCwxLjI0MDk4NzMwNTY2MzAzODZFNyw2MDc1NjI1LjkzODI1MDYxLDI2ODYxOTcuMDM2NjUwOTY2NCw0MDM4NTA2LjIzODA5MDE4LDQ0NjU0MzAuMTM4MTYyNjY2LDYzNDQxOTEuNzgyODM1ODczLDUyOTIzNzYuOTY1MTYyNzc1NSwxMjczOTA4LjQ5MjE1ODY4Nyw5OTMwNzMwLjA1NjcxOTIyNyw0OTE1NzM4LjYyNDAzNDM3NSw1NTkwODkyLjg0MjY3NDkyMSwyODQyMzQwLjYwNzg4NTA0MSw5MDE0ODkuMjU2ODYxMTYwOSw4MDQzMTI0LjE2Nzk1MzIzNiw2NDE2OTAuODk4MTgwNjQ0NSwxNzA5OTE4LjMzNjUzNjI3NCwxMjM0ODIwLjU3NTk5Mjk1LDg0MDc4NDUuNDU3NjI5NjI4LDE4MTc2MjkuMDg1NDI0OTczNCwxOTk2Nzk4LjUwMDcyMTkxNTQsMS44OTYxNzg2NDkxNzU1MTQ3RTcsMS4xMzQ0Mjc4NDA5NjkzMDY0RTcsMzQ0NzkxNS45OTg3OTkxNzgsMzQxODc1NS42NzU0MDczNTEsMS4yMjcxNDgzODcxNzQ4MjAyRTcsMTA0NzUxMi4zNDk2NzQwMDI3LDQwMDg4MDIuODczODY5ODM3Myw3NTQyNDEuNzU3ODY1MzIyOCw1Njg0ODcyLjk2NTY4NDk2NSwyLjA4MzU4NDIzNjY5NjE5N0U3LDIyMzE0ODcuNDkwMDkzMzQ1Myw3MDczMDQ2LjcxNTM5NzAyNSw2MDgzNDUuNzIzMDM1MzksNTg4OTU5OC42ODU5MTU1NTEsNTM1OTQxOS40Njg1OTI2NzcsMTgwNjgzMy44MjU4ODgyMTUsNDkzMzg5LjczMTc2NjMxMTkKKzIzLFdlZCAxNiBGZWIgMTEsNjI2NjQ3Ljk1MTA4NTc0MzgsNDQ0NDk0Ny41NzQ0ODg4MSwyNjcyMTE0LjExOTIzMjM5Miw1MTI4MzEyLjIyMDI2ODQ3NSwzLjM4NjI0MDczNDk5MjUwN0U3LDQyOTkzMzEuMDcxNjg5NjAzLDM0MDM5NDQuNTU0NTM5NjQzLDU3MTgxMC4wNDcwMjUzNTQ1LDc4MzE3MS42NzEwNjE4NTM2LDEuNTk3NTEyMTUyOTExODI4NUU3LDgxODI3NjguMTkyNzYzNTM0LDEyMTEwMDAuMDU5OTg1NjQyLDI5MjQ5MDMuNTM1NDEwODk0NSwxMjkzMzQ1LjczNjEzMDA0LDEuMjQxMzY0Mjg5NTAwOTgyM0U3LDYwNzc1NzAuMDMwMTgwODY3LDI2ODcwODUuNTIyMTA3ODQ2LDQwMzk4MTEuNTk2Mjg0Nzk2LDQ0NjY4NDguODc1MjgxMDUsNjM0NjE1NC43MDAwMzExNzIsNTI5NDAyMS4yMzgyNDkwNzMsMTI3NDMxNC40MDE0NTk1MzI4LDk5MzM4MTYuODYzNDY4OTE3LDQ5MTcyMzUuNTA1NjM3NzI4LDU1OTI2MjAuODQ2MDQ0MTQzLDI4NDMyNjcuNzExMTIwNDc0LDkwMTc3MS42NTQyOTMxNzI1LDgwNDU2MDAuODA3NTMzNzg4NSw2NDE4OTQuNTk2MTg1MjM2NywxNzEwNDU2LjM3OTE5ODQ0OCwxMjM1MjA2Ljg4NTQ5ODEyMTQsODQxMDQ0OC4zNjc4NDE1NjgsMTgxODE5Ni4wNjU5MzI3MDA5LDE5OTczODEuOTE2OTQ3NjA0NCwxLjg5Njc2NTcxNTg0MzUzOEU3LDEuMTM0NzgyNDM0NzQwNjEyMUU3LDM0NDkwMTEuNTAyMDIwOTA1MywzNDE5ODEzLjQ1MjY4NjQwMSwxLjIyNzUzMTMzNjQwMzgyOThFNywxMDQ3ODM1LjE1Mjg1NzQ3MzUsNDAxMDA4Ni44MjcwMTIyMjI3LDc1NDQ4Mi43MTQ1NDMxMTUxLDU2ODY2MzcuNjk0OTUyMzk2LDIuMDg0MjIzNjM3NDM2NzkyNkU3LDIyMzIxNjAuNDI4NDk3Mzg3Niw3MDc1MjM1LjM1Mzk1MjQ5OSw2MDg1MzguMjkwOTAxNjU1LDU4OTE0MDguNDM3NDYxOTU5LDUzNjExMjIuMTUyNTMzNzUsMTgwNzQzNy45NDcyMzMxNjk4LDQ5MzU0Ni42ODE0NTgyNTc0CisyNCxUaHUgMTcgRmViIDExLDYyNjc2MS42MjcxNjc5NjI3LDQ0NDU4MDguNzE0MzM3MzY3LDI2NzI2MjguNTg3MTgyMjcwNCw1MTI5MjQwLjU5MzQ2NzY4LDMuMzg2NjA4NTkzODU4NTk3NEU3LDQzMDAxMDMuNDExODQ0OTQ5LDM0MDQ1OTIuOTEzMzAxNzM1LDU3MTkwOS41OTk1ODEwNjgsNzgzMzQzLjAwMzk0NjMzODksMS41OTc4MDI1NTU3MDYzMTg1RTcsODE4NDI0Mi44Mzc0MjExODgsMTIxMTIxNC45MTIzNzIzODM1LDI5MjU0NzEuODI2MzQ2MDI4NiwxMjkzNTg4LjcyNzcwODg2NjYsMS4yNDE1OTA0MDUxNDU1MTM1RTcsNjA3ODczNi4yOTg3MDg3MzcsMjY4NzYxOC41NzM0MTUyODMsNDA0MDU5NC43MTAwNzc4NDcsNDQ2NzY5OS45NjA3NzMxMDksNjM0NzMzMi4xMTc5MzA5MzcsNTI5NTAwNy41MzgzMTk0NzYsMTI3NDU1Ny45MDQ2MjY4MDQ5LDk5MzU2NjguNDU1NTM5OTI1LDQ5MTgxMzMuMzQxMzM5NDM5LDU1OTM2NTcuMzUxNjAzMTk0LDI4NDM4MjMuOTE0NjE2NjQ5LDkwMTk0MS4wNTI2OTE0NDkxLDgwNDcwODYuMzQ3OTcyNDcyLDY0MjAxNi43OTIxMDE3Nzg3LDE3MTA3NzkuMTMzOTI1NTQsMTIzNTQzOC42MTUyNDgwNTEsODQxMjAwOS42NzYzMTI0MDYsMTgxODUzNi4xNjgzNTc1MzMsMTk5NzczMS45NjM2NTA3MzgsMS44OTcxMTc4NTcyMzA3NzhFNywxLjEzNDk5NTEzODk0MzM4MDNFNywzNDQ5NjY4LjY4Mjk5MjE4MTcsMzQyMDQ0Ny45Mzk5MjMxNzgsMS4yMjc3NjEwNDgyOTc4NDY5RTcsMTA0ODAyOC43Nzc0NzMwMjY4LDQwMTA4NTcuMDc3OTk1NTY1Myw3NTQ2MjcuMjY0NjUyMjg1Niw1Njg3Njk2LjI0NjE0MjUyMiwyLjA4NDYwNzE1OTUwNzEwNEU3LDIyMzI1NjQuMDU3MjgzMjg3LDcwNzY1NDguMTY2ODg1NjUzLDYwODY1My44MDg4MTEyMTc4LDU4OTI0OTMuOTU3NDk2OTA4LDUzNjIxNDMuNTc0NTU2MjEzLDE4MDc4MDAuMzk5NDAyNzk4Niw0OTM2NDAuODM0MzMzODExMTMKKzI1LEZyaSAxOCBGZWIgMTEsNjI2ODI5LjgwOTc2NDI2NDYsNDQ0NjMyNS4zMzAyMDYyNTUsMjY3MjkzNy4yMjE0OTM4NjIsNTEyOTc5Ny40Mjg5OTUyODksMy4zODY4MzAwMjEyNjQ3OTE1RTcsNDMwMDU2Ni42NjQ0OTMwMTYsMzQwNDk4MS44NTU5MjUxNTQ0LDU3MTk2OS4zNDI3ODExOTUyLDc4MzQ0NS44MDMxNTI5Mzc3LDEuNTk3OTc2NzM4NzI4Mzg1NkU3LDgxODUxMjcuMzI4NTc5NTk3LDEyMTEzNDMuNzkxOTYxOTEzNywyOTI1ODEyLjc1ODc4MzksMTI5MzczNC40ODc5NzU4NDksMS4yNDE3MjYwMjkxNzA5NTc2RTcsNjA3OTQzNS45NDcwNTY3NTYsMjY4NzkzOC4zODAwODEyMzAzLDQwNDEwNjQuNTE3Mjc3MjkyLDQ0NjgyMTAuNTE3MzA1MDQsNjM0ODAzOC4zNjczNjg3NTgsNTI5NTU5OS4xNTg2ODg2OTYsMTI3NDcwMy45ODA4OTQ1NjE0LDk5MzY3NzkuMTEyOTg4ODc4LDQ5MTg2NzEuODY0Njk4NjQ0LDU1OTQyNzkuMDc1Mzg4ODExLDI4NDQxNTcuNjAxNDI3MjkwNiw5MDIwNDIuNjY3NDk2MjQ3Myw4MDQ3OTc3LjQwMzYyNTQ3MTUsNjQyMDkwLjA5NTgxNzc4MjIsMTcxMDk3Mi43NDM5MDI0MTMsMTIzNTU3Ny42MTkyNDcwMTI4LDg0MTI5NDYuMTk2Mzc5NDI5LDE4MTg3NDAuMTc3ODQ0ODcyMiwxOTk3OTQxLjk4NDk2OTExMywxLjg5NzMyOTA4MjM0OTgwMzdFNywxLjEzNTEyMjcyOTk2NzM4NjNFNywzNDUwMDYyLjkxODQ2MTExMSwzNDIwODI4LjUyMzc4OTA5NDMsMS4yMjc4OTg4NDA1NTQyMzc3RTcsMTA0ODE0NC45MTc1MzAwNSw0MDExMzE5LjE1NTUzNTI3MTQsNzU0NzEzLjk4MDI3NzAwNTcsNTY4ODMzMS4yMDM0OTY1MywyLjA4NDgzNzIwMDk4ODE3MkU3LDIyMzI4MDYuMTUyNzQ0ODk3Niw3MDc3MzM1LjYzMDQ2NTczOCw2MDg3MjMuMTA1NzY2OTYwNyw1ODkzMTQ1LjA2ODk2Mzg1Miw1MzYyNzU2LjMxMzkyODA2MSwxODA4MDE3Ljg1ODI1NTA0MzksNDkzNjk3LjMxNTgyMDgwMTIKKzI2LFNhdCAxOSBGZWIgMTEsNjI2ODcwLjcwNTgyNDM4NDcsNDQ0NjYzNS4yNTkxNjA1MzIsMjY3MzEyMi4zNzQzOTg5NTksNTEzMDEzMS40MjAxNzY4NTEsMy4zODY5NjMzMDMyOTc0NTJFNyw0MzAwODQ0LjUyODIwMDYxNiwzNDA1MjE1LjE3ODI3OTgwOTcsNTcyMDA1LjE5NjEyOTU1NTIsNzgzNTA3LjQ4MjM2MzExMjMsMS41OTgwODEyMTQxNTAzM0U3LDgxODU2NTcuODUxMTI4MTk2LDEyMTE0MjEuMTAxNzA3ODA0NSwyOTI2MDE3LjI5MzEyNTI1MDQsMTI5MzgyMS45MjM1NDk4MzQ2LDEuMjQxODA3Mzc2OTU2MTgyRTcsNjA3OTg1NS42Njg4OTg2NjEsMjY4ODEzMC4yNDk2NzYxNCw0MDQxMzQ2LjM2NTE3OTg4NSw0NDY4NTE2Ljc5NDgzNDQ2OCw2MzQ4NDYxLjk5NzkyMTM0OCw1Mjk1OTU0LjAzNjMxODg4NiwxMjc0NzkxLjYxMTM5NjE5MTIsOTkzNzQ0NS4zMzEwMjA5MjcsNDkxODk5NC44NzQwMzg0MjEsNTU5NDY1Mi4wMDM0NTYyNDgsMjg0NDM1Ny43OTI0NTc1NzAzLDkwMjEwMy42MjE5OTQxOTMxLDgwNDg1MTEuODc4MzM1MjE0LDY0MjEzNC4wNjk4MTY0MzQ5LDE3MTEwODguODg0NDI1MzAwOSwxMjM1NjYxLjAwMTU1ODc5NTgsODQxMzUwNy45NTE1ODI5NzgsMTgxODg2Mi41NTI3MTk4NDkyLDE5OTgwNjcuOTk1NjgyNDE5MywxLjg5NzQ1NTc4MjA4MTkzNDhFNywxLjEzNTE5OTI2NTg5NDMyODhFNywzNDUwMjk5LjQxNjIzNTE3NzMsMzQyMTA1Ni44MDk5MjM0NTMsMS4yMjc5ODE0OTUyMjE3MTIzRTcsMTA0ODIxNC41ODEwNTIxODA3LDQwMTE1OTYuMzU4NTQ0MjY3Nyw3NTQ3NjYuMDAxMDUyMzYxOCw1Njg4NzEyLjA3NTIzMzA0LDIuMDg0OTc1MTgzNTM4NjYzRTcsMjIzMjk1MS4zNjIyMzg3NTQsNzA3NzgwNy45NzU5NjMwMTYsNjA4NzY0LjY3NTczOTE1MTcsNTg5MzUzNS42MTc0NTgyNCw1MzYzMTIzLjg4OTgwOTIyLDE4MDgxNDguMzI2MTI3MDQ3LDQ5MzczMS4xOTg2MTk1MjAzCisyNyxTdW4gMjAgRmViIDExLDYyNjg5NS4yMzUzNDgyMTM3LDQ0NDY4MjEuMTkyMTMzOTQyLDI2NzMyMzMuNDQ5NDkzMTgyLDUxMzAzMzEuNzQ4Njg0Mjc3LDMuMzg3MDQzNTI2MjUxMDM4RTcsNDMwMTAxMS4xOTM1MzYxMzMsMzQwNTM1NS4xNDU3MDE1ODYzLDU3MjAyNi43MTIxMjUwNjE4LDc4MzU0NC40ODk3MDA2NDc3LDEuNTk4MTQzODc4NzM1ODYyN0U3LDgxODU5NzYuMDYxMTI1NDA0LDEyMTE0NjcuNDc2NjEwMjgxMywyOTI2MTM5Ljk5ODYyMDY0MiwxMjkzODc0LjM3MjUxNzEyODUsMS4yNDE4NTYxNjk2MjQ3MDgyRTcsNjA4MDEwNy40NjE2MDgyNDcsMjY4ODI0NS4zNjI3Njk2NjQzLDQwNDE1MTUuNDUyMDE4MjY0Nyw0NDY4NzAwLjUyNzQ0MDY3Niw2MzQ4NzE2LjEwNDY2MTM4Miw1Mjk2MTY2LjkwNjAzNjcxMywxMjc0ODQ0LjE4MDUyMDQ0NSw5OTM3ODQ0Ljk1NTc3OTc3OCw0OTE5MTg4LjYxNjc0MjA2Miw1NTk0ODc1LjY5NjQ2NDE1NywyODQ0NDc3Ljg5NDQxMTM2NjQsOTAyMTQwLjE4NjA0NDI5NjQsODA0ODgzMi40Njc3OTU1NzQsNjQyMTYwLjQ0OTI2NTc4MzcsMTcxMTE1OC41NTM0MjgzNzIsMTIzNTcxMS4wMTg4Njg5MzE2LDg0MTM4NDQuOTEwNDM2NTczLDE4MTg5MzUuOTU5MTE4MjE4NCwxOTk4MTQzLjYwMDA1OTA1NDgsMS44OTc1MzE3ODA2ODAwNzhFNywxLjEzNTI0NTE3NjIxNTU1OEU3LDM0NTA0NDEuMjg4NzM1MzQ5LDM0MjExOTMuNzQzMDI1MzQ1NywxLjIyODAzMTA3NTU4NTk4NkU3LDEwNDgyNTYuMzY2ODM3NzkzMyw0MDExNzYyLjY1NDE3ODc2LDc1NDc5Ny4yMDgzNDU3NDU5LDU2ODg5NDAuNTM2NTU2MjAyLDIuMDg1MDU3OTQ3NjI2MTMxNEU3LDIyMzMwMzguNDU5MjEwMDM0NSw3MDc4MDkxLjMwMzUzMTAwOSw2MDg3ODkuNjEyNzkwNjc2OSw1ODkzNzY5Ljg3NTQwOTk2NDUsNTM2MzM0NC4zOTQ1OTk1MzgsMTgwODIyNi42MDIzNzYyODg3LDQ5Mzc1MS41MjQ2MzQyMjU2NAorMjgsTW9uIDIxIEZlYiAxMSw2MjY5MDkuOTQ4MjczMDQzOCw0NDQ2OTMyLjczNzMyOTQ4NiwyNjczMzAwLjA4NDU5OTU5NzQsNTEzMDQ1MS45MDY3NDI5Njk1LDMuMzg3MDkxODExNTUxMDk1NUU3LDQzMDExMTEuMTYxNjkwNjcyLDM0MDU0MzkuMTEwNjM2MTAxNiw1NzIwMzkuNjI0MTMzMTE4NCw3ODM1NjYuNjkzOTkwMTMyMiwxLjU5ODE4MTQ2NTI3MzQ2OTlFNyw4MTg2MTY2LjkyNjIxNjY5OCwxMjExNDk1LjI5NTIyMDg4MywyOTI2MjEzLjYxMjg4MjE2NzYsMTI5MzkwNS44MzQ1MjAxMzgzLDEuMjQxODg1NDM1NzYxMDIwNUU3LDYwODAyNTguNTEzMDk4MTQ0LDI2ODgzMTQuNDI1NDM5ODYxNiw0MDQxNjE2Ljg5MTAyNDY2MSw0NDY4ODEwLjc0Njc1NjEwNiw2MzQ4ODY4LjUyNjEzMDY3NCw1Mjk2Mjk0LjU5NDAyNDQzOSwxMjc0ODc1LjcxNjUxNDA4NDMsOTkzODA4NC42Njc1MDI3NDgsNDkxOTMwNC44MjUxMjczNzcsNTU5NTAwOS44NzQzMTczMTgsMjg0NDU0OS45NDgwMDcyNjQsOTAyMTYyLjExOTMxOTQzODUsODA0OTAyNC43NjQ4MjMwNDMsNjQyMTc2LjI3Mzk4MDE0MTUsMTcxMTIwMC4zNDU2OTg2NzkzLDEyMzU3NDEuMDIyMDU4MTc4LDg0MTQwNDcuMDI5NjgxMjY1LDE4MTg5NzkuOTkxOTIyMjQyOCwxOTk4MTg4Ljk2MTc3MDQ4NTksMS44OTc1NzczNjcyMDUzMDU0RTcsMS4xMzUyNzI3MTU3MTQxNDg4RTcsMzQ1MDUyNi4zOTY2MTI4Nzc1LDM0MjEyNzUuODc5OTQ0MTEzNSwxLjIyODA2MDgxNjM5NjY1MDVFNywxMDQ4MjgxLjQzMDk4NDg3Nyw0MDExODYyLjQxNTkyMTQzMzQsNzU0ODE1LjkyOTYzMjA5ODQsNTY4OTA3Ny41NzY2MjE0NDQsMi4wODUxMDc1OTA5Nzg4NjNFNywyMjMzMDkwLjcwMDQ2MDc4OTcsNzA3ODI2MS4yNTI2NTU5ODksNjA4ODA0LjU3MjA3ODAyNTgsNTg5MzkxMC4zODc5NDI3MzYsNTM2MzQ3Ni42NzMxNDkyNDksMTgwODI3My41NjU0NDY4MjU1LDQ5Mzc2My43MTgwNTQ3MTU2NgorMjksVHVlIDIyIEZlYiAxMSw2MjY5MTguNzczMTY1Nzg1MSw0NDQ2OTk5LjY1NTY4OTM4NywyNjczMzQwLjA1OTY5MTM5NCw1MTMwNTIzLjk3ODI0OTg3NiwzLjM4NzEyMDg3MzExOTk3ODZFNyw0MzAxMTcxLjEyNDA0NjE2NTUsMzQwNTQ4OS40ODAyODYxMDQ2LDU3MjA0Ny4zNzI2Nzc2ODk4LDc4MzU4MC4wMTY0OTU5NDksMS41OTgyMDQwMDk4OTU0ODk0RTcsODE4NjI4MS40MDg4OTc2NjMsMTIxMTUxMS45ODI1OTg5MzEsMjkyNjI1Ny43NzYwMTQ2MzYzLDEyOTM5MjQuNzA3Mjk4ODY1NSwxLjI0MTkwMjk4OTc4NDA5NTRFNyw2MDgwMzQ5LjEyOTUwNzIzNywyNjg4MzU1Ljg1OTkyNzgwMzMsNDA0MTY3Ny43NDY1NjY1MzEyLDQ0Njg4NzYuODY2MTk2Nzc5LDYzNDg5NTkuOTUzNTEwNDQ5LDUyOTYzNzEuMTg2NTM4NjAxLDEyNzQ4OTQuNjM0ODIxNDUxMyw5OTM4MjI4LjQ1NjcwNjY3Nyw0OTE5Mzc0LjUyNzg4OTc4OCw1NTk1MDkwLjM1ODI5ODczODUsMjg0NDU5My4xNzU2MTU4NzksOTAyMTc1LjI3NjE5MzkzNSw4MDQ5MTQwLjEwOTEyMjM1NTUsNjQyMTg1Ljc2NzAzNTcyNzQsMTcxMTIyNS40MTU1ODQ2NzYyLDEyMzU3NTkuMDE5NjU3Mjg3Myw4NDE0MTY4LjI2NzY0MjYzLDE4MTkwMDYuNDA0OTkwNTkwNCwxOTk4MjE2LjE3ODExNTU2MTgsMS44OTc2MDQ3MTE1NTI1OTZFNywxLjEzNTI4OTIzNTQwMDQ1M0U3LDM0NTA1NzcuNDUxOTY2MTM2NywzNDIxMzI1LjE0ODM1MzE0MywxLjIyODA3ODY1NjQ0MjgzMkU3LDEwNDgyOTYuNDY1MDg3NTUwOCw0MDExOTIyLjI2MzU4MTc4MSw3NTQ4MjcuMTYwNTQ5Nzc2NSw1Njg5MTU5Ljc3ODY1NDQ5OSwyLjA4NTEzNzM2Nzk1Mjg5MThFNywyMjMzMTIyLjAzNTA5NjIxNyw3MDc4MzYzLjE5MzcyOTE4MSw2MDg4MTMuNTQ1ODg0NjM5Myw1ODkzOTk0LjY3MDE3ODMxMyw1MzYzNTU2LjAyNTY4NDg4OSwxODA4MzAxLjc0MTY4MDI4MjYsNDkzNzcxLjAzMjc5Mzk4NworMzAsV2VkIDIzIEZlYiAxMSw2MjY5MjQuMDY2NDA1MDgyNyw0NDQ3MDM5LjgwMTQ2MjQzMSwyNjczMzY0LjA0MTE3MjM4MDYsNTEzMDU2Ny4yMDczMzgzNTMsMy4zODcxMzgzNjQwMjEyMDJFNyw0MzAxMjA3LjA5MDUxOTA4NywzNDA1NTE5LjY5NjUwODIzNyw1NzIwNTIuMDIyNTk0MjYxMiw3ODM1ODguMDA5OTU4NzMwMiwxLjU5ODIxNzUzMjMzODY3NjhFNyw4MTg2MzUwLjA3NzAwNTQ5NCwxMjExNTIxLjk5MjgxMTA2NDIsMjkyNjI4NC4yNzA2NDYxNDQ2LDEyOTM5MzYuMDI4MzI0NzU3LDEuMjQxOTEzNTE4ODM5NTMzNkU3LDYwODA0MDMuNDkwNjg1OCwyNjg4MzgwLjcxODc1NDUwNSw0MDQxNzE0LjI1NTE4NDcwNzcsNDQ2ODkxNi41MzA1OTYwNDgsNjM0OTAxNC43OTQ3Mzc1NDYsNTI5NjQxNy4xMjk5NTE0NTUsMTI3NDkwNS45ODM4Mzg2MzIyLDk5MzgzMTQuNzA3NjYyNzM3LDQ5MTk0MTYuMzM2MzIxMzkzLDU1OTUxMzguNjM1MTQxMzAyLDI4NDQ2MTkuMTA5NDU2NTAyNCw5MDIxODMuMTY4NDczMDQ4OCw4MDQ5MjA5LjI5NTUwMzQ3NSw2NDIxOTEuNDYxODA4ODQ0LDE3MTEyNDAuNDU0MjQ0NDAxOCwxMjM1NzY5LjgxNTY0MDc1NjksODQxNDI0MC45OTAzOTgyNzgsMTgxOTAyMi4yNDg4ODQxMjIsMTk5ODIzMi41MDc1NjQ3NTI2LDEuODk3NjIxMTEzNjQ5NTE4RTcsMS4xMzUyOTkxNDQ4MTY1Nzc0RTcsMzQ1MDYwOC4wNzk1NzI2NDgsMzQyMTM1NC43MDEyMDcyNzYsMS4yMjgwODkzNTc4MjAzMzA0RTcsMTA0ODMwNS40ODI5MzcwMjk4LDQwMTE5NTguMTY2NTYyMDQyLDc1NDgzMy44OTc5OTExMDA3LDU2ODkyMDkuMDg2NzQ5OTU3LDIuMDg1MTU1MjI4NzU5MTE1NkU3LDIyMzMxNDAuODI5ODg5NzQxLDcwNzg0MjQuMzQxNDQzNDUsNjA4ODE4LjkyOTExMjk2MTMsNTg5NDA0NS4yMjQ0Njg5NzUsNTM2MzYwMy42Mjg0Nzg2NTEsMTgwODMxOC42NDY0NTYwNjEsNDkzNzc1LjQyMDg1MjI1MzYKKzMxLFRodSAyNCBGZWIgMTEsNjI2OTI3LjI0MTMzNzYxMTgsNDQ0NzA2My44ODU3ODE3MzgsMjY3MzM3OC40Mjc5MTc4MjYsNTEzMDU5My4xMzY1NjAzMjIsMy4zODcxNDg4OTA3NTc4ODhFNyw0MzAxMjI4LjY2Mzg5NDY5NSwzNDA1NTM3LjgyMjkwNDUxOTMsNTcyMDU0LjgxMjk5MDc0MjYsNzgzNTkyLjgwNjAxMTk2NDEsMS41OTgyMjU2NDMyMjI4Mjg4RTcsODE4NjM5MS4yNjUwNzE4NDgsMTIxMTUyNy45OTc2MjI3NjU2LDI5MjYzMDAuMTY1NDc2ODQ2NSwxMjkzOTQyLjgxOTM1ODcyMjUsMS4yNDE5MTk4MzQyNjk2NDE1RTcsNjA4MDQzNi4xMDIxOTY2OTIsMjY4ODM5NS42MzI5MzA3MzIsNDA0MTczNi4xNTc1MzI0ODU3LDQ0Njg5NDAuMzI0ODgxMzExNSw2MzQ5MDQ3LjY5MDM4MzEyMyw1Mjk2NDQ0LjY4ODc2MjIxMywxMjc0OTEyLjc5MjA2OTcxNDMsOTkzODM2Ni40NDQ3MzQwNjMsNDkxOTQ0MS40MTM0ODg0MzMsNTU5NTE2Ny41OTMxNDY2MSwyODQ0NjM0LjY2ODEyNjM0MzMsOTAyMTg3LjkwMjczNTQ0MjMsODA0OTI1MC43OTUyNTk3MzEsNjQyMTk0Ljg3ODAzNzMwMTcsMTcxMTI0OS40NzU0ODA0Njg1LDEyMzU3NzYuMjkxNjg4NTg2Niw4NDE0Mjg0LjYxMjA3NzQwOCwxODE5MDMxLjc1Mjg1NzQ5NjUsMTk5ODI0Mi4zMDQ5OTc0NTgsMS44OTc2MzA5NTIyMDk0Mzg0RTcsMS4xMzUzMDUwODkwMzIwNzY3RTcsMzQ1MDYyNi40NTI3NzY5NzAzLDM0MjEzNzIuNDI4MDIxMDMyLDEuMjI4MDk1Nzc3MDYwNDk3RTcsMTA0ODMxMC44OTIwODUzMTk2LDQwMTE5NzkuNzA0OTgzMDEzLDc1NDgzNy45Mzk3OTA4NzE2LDU2ODkyMzguNjYzNzU1NDY3LDIuMDg1MTY1OTQyMDI5ODM0NUU3LDIyMzMxNTIuMTAzMTk5MjU5NCw3MDc4NDYxLjAxOTk0NzI4LDYwODgyMi4xNTg0MTczOTczLDU4OTQwNzUuNTQ4MDUwMjI3LDUzNjM2MzIuMTg0OTI0MDk1LDE4MDgzMjguNzg4NzQyNzk4LDQ5Mzc3OC4wNTMyMTY1MjIKKzMyLEZyaSAyNSBGZWIgMTEsNjI2OTI5LjE0NTY5NjgyOTcsNDQ0NzA3OC4zMzQ0ODk2NjIsMjY3MzM4Ny4wNTg2ODE2ODQsNTEzMDYwOC42ODkyMDk1Mzg1LDMuMzg3MTU1MjI2MDE2ODg0RTcsNDMwMTI0MS42MDQwNjk0MjMsMzQwNTU0OC42OTY3NDUzMjMsNTcyMDU2LjQ4NzQ4ODU1OSw3ODM1OTUuNjgzNjI5MjQ1NSwxLjU5ODIzMDUwODIxOTQ4MTZFNyw4MTg2NDE1Ljk3MDMyOTcxNSwxMjExNTMxLjU5OTczNjgxNDYsMjkyNjMwOS43MDEyMDgwODk1LDEyOTM5NDYuODkzMDMzODIsMS4yNDE5MjM2MjIzMzY5NTkxRTcsNjA4MDQ1NS42NjU5OTIwNzY1LDI2ODg0MDQuNTgwNzY1MTU3NSw0MDQxNzQ5LjI5NzI0OTk3MDUsNDQ2ODk1NC41OTg4NDY2NTgsNjM0OTA2Ny40MjIzNDYwODUsNTI5NjQ2MS4yMTk3Mjc3NDgsMTI3NDkxNi44NzYzMDI1MTU5LDk5MzgzOTcuNDc4OTE0NTk0LDQ5MTk0NTYuNDU1MDk0NTA0LDU1OTUxODQuOTYzMTE3MjMxLDI4NDQ2NDQuMDAyMzQ4NzM4Myw5MDIxOTAuNzQyNjMyNDAxMiw4MDQ5Mjc1LjY4NzkxNTczMyw2NDIxOTYuOTI3Mzk0MTQxMSwxNzExMjU0Ljg4NzA1MDI1NzMsMTIzNTc4MC4xNzYzOTU2NTMsODQxNDMxMC43Nzc5MzkyMzgsMTgxOTAzNy40NTM4MzAwNjY4LDE5OTgyNDguMTgzMzIzMjQ4NSwxLjg5NzYzNjg1MzczNTE5OTJFNywxLjEzNTMwODY1NDcwNDQxNjVFNywzNDUwNjM3LjQ3NDY4OTAyNzgsMzQyMTM4My4wNjExODYyMywxLjIyODA5OTYyNzY1NjkwNkU3LDEwNDgzMTQuMTM2NjQzMjM1Miw0MDExOTkyLjYyNjAxOTQ0Nyw3NTQ4NDAuMzY0NDcyNjAzNyw1Njg5MjU2LjQwNTI3MTMzMSwyLjA4NTE3MjM2ODA3Nzg1MDNFNywyMjMzMTU4Ljg2NTA2OTUwOSw3MDc4NDgzLjAyMTAwODA4Nyw2MDg4MjQuMDk1NjIxNjE2NSw1ODk0MDkzLjczNjgzOTIwNCw1MzYzNjQ5LjMxNTY2MTAxMywxODA4MzM0Ljg3Mzc2NzgyMjMsNDkzNzc5LjYzMjM1MzM3NDQKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0lSU3RhdGVzT25seV9GRF9SZWZlcmVuY2UvVGVzdFNJUi9odW1hbi9TXzAuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTSVJTdGF0ZXNPbmx5X0ZEX1JlZmVyZW5jZS9UZXN0U0lSL2h1bWFuL1NfMC5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTIzZGQ5MgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0lSU3RhdGVzT25seV9GRF9SZWZlcmVuY2UvVGVzdFNJUi9odW1hbi9TXzAuY3N2CkBAIC0wLDAgKzEsMzMgQEAKK2l0ZXJhdGlvbix0aW1lLHN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL25vZGUvdHJhbnNwb3J0L3BpcGUvVVNBCisxLFR1ZSAyNSBKYW4gMTEsOTQzMjExLjAKKzIsV2VkIDI2IEphbiAxMSw5NDMyMTAuOTk2ODMyNDU0MQorMyxUaHUgMjcgSmFuIDExLDk0MzIxMC44NzAxNDA2NTMyCis0LEZyaSAyOCBKYW4gMTEsOTQzMjA3LjA4MjM1Mzg3MzIKKzUsU2F0IDI5IEphbiAxMSw5NDMxMDUuOTcwNTAyODYyNworNixTdW4gMzAgSmFuIDExLDk0MDU3MS4wNjYwNzEwMTc5Cis3LE1vbiAzMSBKYW4gMTEsODc5Njk1LjgxNTQwNjQxNjkKKzgsVHVlIDEgRmViIDExLDAuMAorOSxXZWQgMiBGZWIgMTEsNjI3NDg0LjgzNzc0ODAyNzgKKzEwLFRodSAzIEZlYiAxMSw4MTA3MjcuNzQ4Nzc3ODIKKzExLEZyaSA0IEZlYiAxMSwwLjAKKzEyLFNhdCA1IEZlYiAxMSwxMDU5LjIwMjEwOTMwMjk2OTMKKzEzLFN1biA2IEZlYiAxMSwwLjAKKzE0LE1vbiA3IEZlYiAxMSw1LjA1NDM0NjI3OTYzMDI5NAorMTUsVHVlIDggRmViIDExLDAuMAorMTYsV2VkIDkgRmViIDExLDAuMDI0MTE4NTQ4NDE3Nzk3Nzk2CisxNyxUaHUgMTAgRmViIDExLDAuMAorMTgsRnJpIDExIEZlYiAxMSwxLjE1MDg5OTMzNjEzMzc1MjdFLTQKKzE5LFNhdCAxMiBGZWIgMTEsMC4wCisyMCxTdW4gMTMgRmViIDExLDMuODQxMTcwMjE0MzE1NjM4RS02CisyMSxNb24gMTQgRmViIDExLDguMTMxOTI0Mjc3OTYxMDg4RS03CisyMixUdWUgMTUgRmViIDExLDIuMTU0NjM4MjY0NjY2MTYyRS02CisyMyxXZWQgMTYgRmViIDExLDEuODY5MzQ1NTc4Nzk4MjIxRS02CisyNCxUaHUgMTcgRmViIDExLDEuOTU2NzQ5NTA4MzI5NzMyNEUtNgorMjUsRnJpIDE4IEZlYiAxMSwyLjAwMjk3ODE5ODg1MDMxODZFLTYKKzI2LFNhdCAxOSBGZWIgMTEsMi4wMjIzOTM4Mjg1MDM3MjYyRS02CisyNyxTdW4gMjAgRmViIDExLDIuMDQyMzE0NTQxOTQ2MTgyNEUtNgorMjgsTW9uIDIxIEZlYiAxMSwyLjA1Mjk4ODE5Mjg4NzUyMDNFLTYKKzI5LFR1ZSAyMiBGZWIgMTEsMi4wNjE2MDI5NjgwNTIxNjlFLTYKKzMwLFdlZCAyMyBGZWIgMTEsMi4wNjc0OTE2NjUyODYzNTE2RS02CiszMSxUaHUgMjQgRmViIDExLDIuMDcyMzIyODc2MzI3Njk2N0UtNgorMzIsRnJpIDI1IEZlYiAxMSwyLjA3NjI5MTYxOTIxMjUzMzRFLTYKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0lSU3RhdGVzT25seV9GRF9SZWZlcmVuY2UvVGVzdFNJUi9odW1hbi9TXzEuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTSVJTdGF0ZXNPbmx5X0ZEX1JlZmVyZW5jZS9UZXN0U0lSL2h1bWFuL1NfMS5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWQ5NzlmZgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0lSU3RhdGVzT25seV9GRF9SZWZlcmVuY2UvVGVzdFNJUi9odW1hbi9TXzEuY3N2CkBAIC0wLDAgKzEsMzMgQEAKK2l0ZXJhdGlvbix0aW1lLFVTLUFLLFVTLUFMLFVTLUFSLFVTLUFaLFVTLUNBLFVTLUNPLFVTLUNULFVTLURDLFVTLURFLFVTLUZMLFVTLUdBLFVTLUhJLFVTLUlBLFVTLUlELFVTLUlMLFVTLUlOLFVTLUtTLFVTLUtZLFVTLUxBLFVTLU1BLFVTLU1ELFVTLU1FLFVTLU1JLFVTLU1OLFVTLU1PLFVTLU1TLFVTLU1ULFVTLU5DLFVTLU5ELFVTLU5FLFVTLU5ILFVTLU5KLFVTLU5NLFVTLU5WLFVTLU5ZLFVTLU9ILFVTLU9LLFVTLU9SLFVTLVBBLFVTLVJJLFVTLVNDLFVTLVNELFVTLVROLFVTLVRYLFVTLVVULFVTLVZBLFVTLVZULFVTLVdBLFVTLVdJLFVTLVdWLFVTLVdZCisxLFR1ZSAyNSBKYW4gMTEsNjI2OTMyLjAsNDQ0NzEwMC4wLDI2NzM0MDAuMCw1MTMwNjMyLjAsMy4zODcxNjQ3RTcsNDMwMTI2MS4wLDM0MDU1NjUuMCw1NzIwNTkuMCw3ODM2MDAuMCwxLjU5ODIzNzhFNyw4MTg2NDUzLjAsMTIxMTUzNy4wLDI5MjYzMjQuMCwxMjkzOTUzLjAsMS4yNDE5MjkzRTcsNjA4MDQ4NS4wLDI2ODg0MTguMCw0MDQxNzY5LjAsNDQ2ODk3Ni4wLDYzNDkwOTcuMCw1Mjk2NDg2LjAsMTI3NDkyMy4wLDk5Mzg0NDQuMCw0OTE5NDc5LjAsNTU5NTIxMS4wLDI4NDQ2NTguMCw5MDIxOTUuMCw4MDQ5MzEzLjAsNjQyMjAwLjAsMTcxMTI2My4wLDEyMzU3ODYuMCw4NDE0MzUwLjAsMTgxOTA0Ni4wLDE5OTgyNTcuMCwxLjg5NzY0NTdFNywxLjEzNTMxNEU3LDM0NTA2NTQuMCwzNDIxMzk5LjAsMS4yMjgxMDU0RTcsMTA0ODMxOS4wLDQwMTIwMTIuMCw3NTQ4NDQuMCw1Njg5MjgzLjAsMi4wODUxODJFNywyMjMzMTY5LjAsNzA3ODUxNi4wLDYwODgyNy4wLDU4OTQxMjEuMCw1MzYzNjc1LjAsMTgwODM0NC4wLDQ5Mzc4Mi4wCisyLFdlZCAyNiBKYW4gMTEsNjI2OTMyLjAsNDQ0NzEwMC4wLDI2NzM0MDAuMCw1MTMwNjMyLjAsMy4zODcxNjI3MDAzMTY4MTM2RTcsNDMwMTI2MS4wLDM0MDU1NjUuMCw1NzIwNTkuMCw3ODM2MDAuMCwxLjU5ODIzNzhFNyw4MTg2NDUzLjAsMTIxMTUzNy4wLDI5MjYzMjQuMCwxMjkzOTUzLjAsMS4yNDE5MjkzRTcsNjA4MDQ4NS4wLDI2ODg0MTguMCw0MDQxNzY5LjAsNDQ2ODk3Ni4wLDYzNDkwOTcuMCw1Mjk2NDg2LjAsMTI3NDkyMy4wLDk5Mzg0NDQuMCw0OTE5NDc5LjAsNTU5NTIxMS4wLDI4NDQ2NTguMCw5MDIxOTUuMCw4MDQ5MzEzLjAsNjQyMjAwLjAsMTcxMTI2My4wLDEyMzU3ODYuMCw4NDE0MzUwLjAsMTgxOTA0Ni4wLDE5OTgyNTcuMCwxLjg5NzY0NTdFNywxLjEzNTMxNEU3LDM0NTA2NTQuMCwzNDIxMzk5LjAsMS4yMjgxMDU0RTcsMTA0ODMxOS4wLDQwMTIwMTIuMCw3NTQ4NDQuMCw1Njg5MjgzLjAsMi4wODUxODJFNywyMjMzMTY5LjAsNzA3ODUxNi4wLDYwODgyNy4wLDU4OTQxMjEuMCw1MzYzNjc1LjAsMTgwODM0NC4wLDQ5Mzc4Mi4wCiszLFRodSAyNyBKYW4gMTEsNjI2OTMxLjk5OTk4NzgwMjgsNDQ0NzA5OS45OTk5ODc3NTksMjY3MzM5OS45OTk5OTEwNjcsNTEzMDYzMS45OTk4OTQwODEsMy4zODcxMjE1MTMyOTM0MzRFNyw0MzAxMjYwLjk5OTg4OTEzMSwzNDA1NTY0Ljk5OTk4NDE2OTQsNTcyMDU4Ljk5OTk1ODcxNjksNzgzNTk5Ljk5OTk5OTk1OTcsMS41OTgyMzc3OTk5NzA3MjJFNyw4MTg2NDUyLjk5OTgwNzUyOCwxMjExNTM2Ljk5OTk1NDc3NzgsMjkyNjMyMy45OTk5OTI2NDIsMTI5Mzk1Mi45OTk5OTA5MTI2LDEuMjQxOTI5Mjk5OTc4NTI2M0U3LDYwODA0ODQuOTk5OTc3NDk5LDI2ODg0MTcuOTk5OTk2NTI0Myw0MDQxNzY4Ljk5OTk4OTA3OSw0NDY4OTc1Ljk5OTk3OTQyNyw2MzQ5MDk2Ljk5OTkzNTQ0Nyw1Mjk2NDg1Ljk5OTk1MjMxLDEyNzQ5MjIuOTk5OTk0NjI2Nyw5OTM4NDQzLjk5OTkxMTc0OCw0OTE5NDc4Ljk5OTkyMDYxLDU1OTUyMTAuOTk5OTQxMzE1LDI4NDQ2NTcuOTk5OTk0MjMzNyw5MDIxOTQuOTk5OTkzNjM2Miw4MDQ5MzEyLjk5OTkwNTg0OCw2NDIxOTkuOTk5OTk2OTY0MSwxNzExMjYyLjk5OTk4OTQ0MTYsMTIzNTc4NS45OTk5OTA5MzYxLDg0MTQzNDkuOTk5OTE1ODcyLDE4MTkwNDUuOTk5OTg1NDQ4OCwxOTk4MjU2Ljk5OTg4ODU0NiwxLjg5NzY0NTY5OTk4MTA3MDNFNywxLjEzNTMxMzk5OTk5MTQ1NUU3LDM0NTA2NTMuOTk5OTg0MTM1NCwzNDIxMzk4Ljk5OTk2NTIxNSwxLjIyODEwNTM5OTk5MDI5NjdFNywxMDQ4MzE4Ljk5OTk4ODAxNDMsNDAxMjAxMS45OTk5ODU1OCw3NTQ4NDMuOTk5OTk3MDY0OSw1Njg5MjgyLjk5OTk0NzQ4NywyLjA4NTE4MTk5OTk3MzA4MzdFNywyMjMzMTY4Ljk5OTk1MjM3Myw3MDc4NTE1Ljk5OTkyODIzNCw2MDg4MjYuOTk5OTk2ODYzNCw1ODk0MTIwLjk5OTkyNjc2LDUzNjM2NzQuOTk5OTc1MjcsMTgwODM0My45OTk5OTgzNTc4LDQ5Mzc4MS45OTk5OTc4MTA0Cis0LEZyaSAyOCBKYW4gMTEsNjI2OTMxLjk5OTI0Mzg4MzMsNDQ0NzA5OS45OTkyNDExMTU1LDI2NzMzOTkuOTk5NDQ2MTkzNyw1MTMwNjMxLjk5MzQzMzk4LDMuMzg2MjczMjAwNTcyMDQ5RTcsNDMwMTI2MC45OTMxMjcyOTIsMzQwNTU2NC45OTkwMTg1NjEsNTcyMDU4Ljk5NzQ0MTQ2NzgsNzgzNTk5Ljk5OTk5NzUwMTYsMS41OTgyMzc3OTgxODUwMTg2RTcsODE4NjQ1Mi45ODgwNjg3MDQsMTIxMTUzNi45OTcxOTY4NjMyLDI5MjYzMjMuOTk5NTQzODM2MywxMjkzOTUyLjk5OTQzNjYyNjIsMS4yNDE5MjkyOTg2Njg4MDg3RTcsNjA4MDQ4NC45OTg2MDUwNzUsMjY4ODQxNy45OTk3ODQ1MTMsNDA0MTc2OC45OTkzMjI5MzgsNDQ2ODk3NS45OTg3MjQ1ODYsNjM0OTA5Ni45OTU5OTgxNDksNTI5NjQ4NS45OTcwNDM0NjEsMTI3NDkyMi45OTk2NjY4ODQ1LDk5Mzg0NDMuOTk0NTI4OTEsNDkxOTQ3OC45OTUwNzg1MDEsNTU5NTIxMC45OTYzNjE4NjUsMjg0NDY1Ny45OTk2NDI1MjE2LDkwMjE5NC45OTk2MDU0NzE5LDgwNDkzMTIuOTk0MTYzMTk1LDY0MjE5OS45OTk4MTE3OTAyLDE3MTEyNjIuOTk5MzQ1NDM0NCwxMjM1Nzg1Ljk5OTQzODA4NDQsODQxNDM0OS45OTQ3ODQ1OTcsMTgxOTA0NS45OTkwOTc4OTg0LDE5OTgyNTYuOTkzMDkyMDY0MywxLjg5NzY0NTY5ODgyNjQ2N0U3LDEuMTM1MzEzOTk5NDcwMjUwOUU3LDM0NTA2NTMuOTk5MDE2NDc4LDM0MjEzOTguOTk3ODQzNTU1NiwxLjIyODEwNTM5OTM5ODQ0NTlFNywxMDQ4MzE4Ljk5OTI1Njk3MDEsNDAxMjAxMS45OTkxMDU5OTkyLDc1NDg0My45OTk4MTgwMzU1LDU2ODkyODIuOTk2NzQ0NTAwNSwyLjA4NTE4MTk5ODMzMTM3RTcsMjIzMzE2OC45OTcwNDc1OTA2LDcwNzg1MTUuOTk1NTUwOTU0LDYwODgyNi45OTk4MDU1NDQ3LDU4OTQxMjAuOTk1NDU5NjA4LDUzNjM2NzQuOTk4NDY2ODM5LDE4MDgzNDMuOTk5ODk4MTksNDkzNzgxLjk5OTg2NDI1NTYKKzUsU2F0IDI5IEphbiAxMSw2MjY5MzEuOTY5MzMzMDc2OCw0NDQ3MDk5Ljk2OTIxODI1OCwyNjczMzk5Ljk3NzUzNjYzNzMsNTEzMDYzMS43MzM2OTM5ODQsMy4zNjg4MDUxOTYxMjU3RTcsNDMwMTI2MC43MjEyNjI0MTcsMzQwNTU2NC45NjAxOTEzNzg0LDU3MjA1OC44OTYyNTczNzI3LDc4MzU5OS45OTk4OTg2NTgzLDEuNTk4MjM3NzI2Mzg2NzQxNEU3LDgxODY0NTIuNTE2MDk0OTA1LDEyMTE1MzYuODg2MzE5MzEyMywyOTI2MzIzLjk4MTQ5NzEzMiwxMjkzOTUyLjk3NzE0ODk5OTUsMS4yNDE5MjkyNDYwMDgzNDg1RTcsNjA4MDQ4NC45NDM0MTk1NDgsMjY4ODQxNy45OTEyNTkzODAyLDQwNDE3NjguOTcyNTM3MDk5LDQ0Njg5NzUuOTQ4MjY3MzQ3LDYzNDkwOTYuODM3NjgzNTMyLDUyOTY0ODUuODgwMDgxMDI4LDEyNzQ5MjIuOTg2NDg4MzE4NSw5OTM4NDQzLjc3ODA4OTI1MSw0OTE5NDc4LjgwMDM4ODI5OCw1NTk1MjEwLjg1MjQzNjIwMzUsMjg0NDY1Ny45ODU0OTk5NjUsOTAyMTk0Ljk4Mzk5NzU0ODgsODA0OTMxMi43NjMyNTg5NzEsNjQyMTk5Ljk5MjM2NTkzODQsMTcxMTI2Mi45NzM0NTAwNTYsMTIzNTc4NS45NzcyMDgxODEzLDg0MTQzNDkuNzg4NDYxMzE1LDE4MTkwNDUuOTYzNDEwMDM5LDE5OTgyNTYuNzE5ODc1OTQxMywxLjg5NzY0NTY1MjQwMTA0MTJFNywxLjEzNTMxMzk3ODUxMjkwMzVFNywzNDUwNjUzLjk2MDEwNjkxLDM0MjEzOTguOTEyNTMzODY5LDEuMjI4MTA1Mzc1NjAwNDc2NEU3LDEwNDgzMTguOTY5ODYyNjQzNiw0MDEyMDExLjk2MzczNzgwNDQsNzU0ODQzLjk5MjYxOTIyMDQsNTY4OTI4Mi44Njc5NTUxNTc1LDIuMDg1MTgxOTMyMzIwNzA0RTcsMjIzMzE2OC44ODAyNTU5NzM0LDcwNzg1MTUuODE5NTQ1MTExLDYwODgyNi45OTIxMTI2Mjg1LDU4OTQxMjAuODE1ODQyMTk5LDUzNjM2NzQuOTM3ODEyNzI4LDE4MDgzNDMuOTk1ODcwMzU4LDQ5Mzc4MS45OTQ0OTQwMDE3Cis2LFN1biAzMCBKYW4gMTEsNjI2OTMwLjk2Mzk4OTk4MDgsNDQ0NzA5OC45NjAwMjQ1NDQsMjY3MzM5OS4yNDEwNjcwNTYsNTEzMDYyMy4wMDM1Mjk2MDIsMy4wMTA5NjYyMTcyMDAyMDY2RTcsNDMwMTI1MS41ODM4MDE1MTQ1LDM0MDU1NjMuNjU1MDU5OTEwNCw1NzIwNTUuNDk2MjE5MTQ4NCw3ODM1OTkuOTk2NTc2MDc1NiwxLjU5ODIzNTMxMzEzNDc1MDdFNyw4MTg2NDM2LjY1MjczMjQ5OSwxMjExNTMzLjE1OTkwNjc1NzgsMjkyNjMyMy4zNzQ4NzEyNTk2LDEyOTM5NTIuMjI3OTg0NzUsMS4yNDE5Mjc0NzU5OTkwOTg2RTcsNjA4MDQ4My4wODg0MTIxNDYsMjY4ODQxNy43MDQ2OTE5NDMyLDQwNDE3NjguMDcyMTUyODkxLDQ0Njg5NzQuMjUyMjA0MzkzLDYzNDkwOTEuNTE2MjY1MzA4NSw1Mjk2NDgxLjk0ODYwNzk2MiwxMjc0OTIyLjU0MzUwNDg4NDIsOTkzODQzNi41MDI4NzEwOTgsNDkxOTQ3Mi4yNTY0NzU2NzIsNTU5NTIwNi4wMTQ2ODA2OTg1LDI4NDQ2NTcuNTEwMTA3ODA2NCw5MDIxOTQuNDU5MzYxMzMzNCw4MDQ5MzA1LjAwMTk1MDc2Myw2NDIxOTkuNzQyMDgyMjE4MywxNzExMjYyLjEwMzAxMzA3NjQsMTIzNTc4NS4yMjk5ODUzODY0LDg0MTQzNDIuODUzMzI1MjY1LDE4MTkwNDQuNzYzODIzNDY2NCwxOTk4MjQ3LjUzODM3ODYwNTYsMS44OTc2NDQwOTE5MDQ5MjY3RTcsMS4xMzUzMTMyNzQwNjU3MjRFNywzNDUwNjUyLjY1MjIwNTgxNTUsMzQyMTM5Ni4wNDUwMjUyNzI4LDEuMjI4MTA0NTc1NjcxODk0OEU3LDEwNDgzMTcuOTgxODM5NDQ4Miw0MDEyMDEwLjc3NDg2OTk3OSw3NTQ4NDMuNzUwNjM4MzM4NCw1Njg5Mjc4LjUzODk0NzU5LDIuMDg1MTc5NzEzNTM5MjIzN0U3LDIyMzMxNjQuOTU0NzY2ODUyMyw3MDc4NTA5LjkwMzQ3MjA2Miw2MDg4MjYuNzMzNTI0Njc1Nyw1ODk0MTE0Ljc3ODQ0Mjk5NCw1MzYzNjcyLjg5ODk5MzU1NywxODA4MzQzLjg2MDQ3Njg0NzUsNDkzNzgxLjgxMzk3ODg0NTg0Cis3LE1vbiAzMSBKYW4gMTEsNjI2Njk0LjAyNzYwMTcxMTUsNDQ0Njg2MS4wNzQ0Mjg1MDIsMjY3MzIyNS42NDI2NTg4NzYsNTEyODU2NS41MjkwMTMwMzksNTYxMDguMDg3OTkzODgwMzA1LDQyOTkwOTguMjM1OTgwNTYyLDM0MDUyNTYuMDE3NTkzMTA4Niw1NzEyNTQuNjI3OTcxNzc5Niw3ODM1OTkuMjEzMzU5NzU1MSwxLjU5NzY2NjU1ODAxNjc3NzJFNyw4MTgyNjk4LjE3OTk0NjA5OSwxMjEwNjU1LjA5NDM0MTY4MSwyOTI2MTgwLjM4MTU5MjQxOTUsMTI5Mzc3NS42NDQwNTIyNzU1LDEuMjQxNTEwMzE1Nzk4MTY1M0U3LDYwODAwNDUuODMzMjYwNDcxLDI2ODgzNTAuMTU0NDE5NTkxLDQwNDE1NTUuODM0ODU0Mzk2NSw0NDY4NTc0LjQ2NjYxMTYxMzUsNjM0NzgzNy4yNTczNDYwMSw1Mjk1NTU1LjI4ODYxNzYzLDEyNzQ4MTguMTI1NzMxMDU5NCw5OTM2NzIxLjcwOTg5ODgwMiw0OTE3OTI5Ljk1MjEzOTk0NCw1NTk0MDY1Ljc1ODk2OTIzOSwyODQ0NTQ1LjQ1MDU0MjkxNyw5MDIwNzAuNzk4NTAwMzczNiw4MDQ3NDc1LjY5MDA0MTk3Miw2NDIxNDAuNzQ2ODEwMjE3OSwxNzExMDU2LjkzMjMwMjU1NiwxMjM1NjA5LjEwNDI0NTA3OTIsODQxMjcwOC4yMzgwMTgxOTQsMTgxODc2Mi4wMTQ2ODkwMjQsMTk5NjA4NC40OTM4NjcyMTkyLDEuODk3Mjc2MjgyMDQxNTUzNEU3LDEuMTM1MTQ3MjMxMTc3Nzg0MUU3LDM0NTAzNDQuMzYxNzM0NzQyOCwzNDIwNzIwLjE3Mjg5OTY5NjUsMS4yMjc5MTYwMjc5MjMyMjQ1RTcsMTA0ODA4NS4xMDc3NDc1MDEzLDQwMTE3MzAuNTM5MjQzOTM1LDc1NDc4Ni43MTE5NTU3MDUsNTY4ODI1OC4xODEzMDM3ODgsMi4wODQ2NTY3NjE1MjQwODlFNywyMjMyMjM5LjgyNDg4MTExNTUsNzA3NzExNS40ODM5MTk1NzcsNjA4NzY1Ljc4MTEwMzk0MDIsNTg5MjY5MS43OTY0NjAyMTQsNTM2MzE5Mi4zMjEwMzY4NzQsMTgwODMxMS45NDUxMDc5NjkyLDQ5MzczOS4yNjM5NzQxMTM2Cis4LFR1ZSAxIEZlYiAxMSwwLjUxNTE0NTU2OTI3NTgyNjMsOTczMzIuNjgwMDA0MjI2NzQsMzAwOTAuMDUwODE0MTU1OTEsNC41MDk1NzYwMjY3Nzg0NjgsNzkuNzE5MzUwNDIyMDE5MDksNC45MDIzMzI4NTYzMzU4NTMsOTQ1My41OTg4Mzc1Mzc2NCwyLjAzODc5NDY0NjgyNjc4Myw3MjIyNzIuNjM0NTAwMjgzNiwxMi42MTMzODkzMjk4Mzc1NzQsOC40NDY5NDc5OTA3MDYxODcsMi4wNzc5MDY1ODQwNDYyNjE2LDg0ODI2LjQyMDA5NzcxNzYxLDI0Ni40MzMzOTA5NjE1MDA3OCw5Ljg5MDAwNTE0ODc3NDk2Niw0NjMxMi4yMjk5MzYxNjAzNSwzODIwODguMzEyNzMzMjYxNSw5MzgyOS42Nzk5MjgwOTE0NCwxMzAxMy44NzIzMTg4ODA3ODUsNC4wMjA2NzQwOTcxNjc3NjEsNTUuMDA0NzkzOTQ0NjA2MjYsNTYwOC43MDM4NTA0NzQ4NjMsMTI5LjA0MjM3MzkwOTEwMjI1LDQuMjUwMDI0NjA5OTUyMDQ5LDEuMTYxODM3NTc5NDI2MzM5NiwxNTA2NDcuMTAwNDA3MDQ0NCwxNjUuMzYyNjY4MjQzMzYzMjYsNC4yNTA2MTU4NDczMTEwNDcsMTYzOS40OTAwMDQ0NDAyMzMsODk5LjI0NTkyNTM3NDc1OTMsMTU4LjYyMzc1NzUxMjg3NzQzLDkuMDMxMjM4Mzg5Mjk3MjgzLDk0LjcwNTM5ODU1NDE3Mzk0LDUuMzQ3NzAxNzE0OTI4OTQ0LDIxLjc2OTI5MjM0NzcyNTQ0NywxMTMzLjM0ODE4NjU1MDQxNjgsMTAxMTIuMDE3MTAzMzk0NjMyLDIuMTY5MDY4NDExMzI0MzUxLDczNS4yMjczNDE3MTI4NjE3LDAuMzkxODU4ODAzNzQ0ODc3OSwzNDI2Ny45MjA1OTY5MDY0Miw0Njk5LjM4NDg5Nzg1Mjk0OCwzOC40MTE2MjgyMzUxMzI4MjQsMjEuMzQ4NTE4MTQzMjM4MDMsMi4wNDUyMDI5NjgwNTUwMzQ1LDQuOTIxMjM4MDc0ODgyNTQ1LDk4Ni45MjY0NzE1NzMyODkzLDUuMjIzODY5MzE5ODM3NjQxLDE1NDk5LjY4MzM4MDk0ODc4Nyw0NDc5ODIuNDk0MTQxMzcwOCwxNzIwLjU1ODY3NDQzNjUyMzcKKzksV2VkIDIgRmViIDExLDUuMDY3Mzg3NjgzODE1MjZFLTcsNS4wODU1MjUzNTk5OTYzMTZFLTcsMy43MTEyNDc1ODc4MTYyNDJFLTcsNC40MDA0NzkyODI2OTY0MDFFLTYsMS40OTY5MTYzNjcyODEyMjAxRS01LDQuNjA2MTMyNjI2NDcyMzg0RS02LDYuNTc3MDAwNDI0NDIzMjE5RS03LDEuNzE1MTI2NTYzNzk3OTM0N0UtNiwxLjY3NDI0NzAzMjA5NzU1MjdFLTksMS4yMTYzNjgzNzI5MzYwNzM3RS01LDcuOTk2MzQzMzQ1ODgzOTJFLTYsMS44Nzg3ODQyMTExODU0NzAzRS02LDMuMDU2ODk2MDM5NDM4MTE1RS03LDMuNzc1NDI3MDU3Mzc5OTgxNUUtNyw4LjkyMTM2NDgzMTExNzgxOUUtNiw5LjM0Nzg3OTI2MjU0NDY2OUUtNywxLjQ0NDAzODA2NTE4NDEzOTNFLTcsNC41MzcyMDk0NTY5ODQzNjg1RS03LDguNTQ3MDMxMDk4ODU4MDA3RS03LDIuNjgxODY0NzA0MjQ4MjYzNkUtNiwxLjk4MTMzMTg0MTkwMTQ0NTNFLTYsMi4yMzIzMjkzNzYxMzAwNzAyRS03LDMuNjY2NDYxNDc5NzA3NjMyRS02LDMuMjk4MjY2NjUzMjMyMTc5MkUtNiwyLjQzODEyMjI0MDQ5MjA2MTZFLTYsMi4zOTU1Njg0NjE3NTk1ODJFLTcsMi42NDM5MTUxMDQ4NTQwNTJFLTcsMy45MTE1OTkxNDkzMjM5MTY2RS02LDEuMjYxMjY2MDk3NTEzNDg5N0UtNyw0LjM4NjUyNzIyNDA5NTU4ODVFLTcsMy43NjU2NjA2MTYzNTk0MTJFLTcsMy40OTUxMzAyMDAwODk2NDlFLTYsNi4wNDU0MjY5OTE3MzIyNDdFLTcsNC42MzA0MDkyMDg0Mzc3OTc2RS02LDcuODY0NDk2MzkyMTA2MjM3RS02LDMuNTUwMTAxMzEwOTc2ODUyNkUtNiw2LjU5MDk1MjQ4MzAyNDAzMUUtNywxLjQ0NTE1NDIyOTg3MjIwNDNFLTYsNC4wMzEzMDc4MTIxMTg4OTFFLTYsNC45Nzk0ODk3MTQ2MzAxMzhFLTcsNS45OTEwMTM5NjMxODkwNzZFLTcsMS4yMTk0MDk5MjE3MTEwNTEyRS03LDIuMTgxNjgzNDAzNDA5MTE5M0UtNiwxLjExODI1NzQ5Njg1NTE1NzFFLTUsMS45Nzg2ODA5NTA3NjcyOTFFLTYsMi45ODE1NTQ5MjI5OTM3MjVFLTYsMS4zMDMxMjIyNzMzMTU5Mjg3RS03LDMuMDQyODA0NDYwMjUxMjk0RS02LDEuMDI3NDI5NTk1MzYzODY1RS02LDYuODIyNTU2NjU1Nzk3NTI4RS04LDkuMDk2NzQyMjA3NzMwMDM2RS04CisxMCxUaHUgMyBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzExLEZyaSA0IEZlYiAxMSwyLjQxODA3Nzk5MTIxMjE3MDJFLTksMi40MjY3MzMwMDYwNDg1NTczRS05LDEuNzcwOTQ5MTg5NTk5MjIxNEUtOSwyLjA5OTgzOTc1MzM4MTkzNDJFLTgsNy4xNDMwNTAzMjE1MDc1MzVFLTgsMi4xOTc5NzQzMDYyMTkxMjRFLTgsMy4xMzg0NDE1MzM3NDgzOTQ4RS05LDguMTg0MzE1MTgzMzYyMTE2RS05LDcuOTg5MjQ0NDY0MzU3MzlFLTEyLDUuODA0MzE5MjU3NDMwMDVFLTgsMy44MTU3Mjk3MzMyMTQyOTNFLTgsOC45NjUyNjM4Mjk3NTMwNUUtOSwxLjQ1ODcwMjg4NTExNzI1MzNFLTksMS44MDE1NzQ2MjY3MTI1OTE1RS05LDQuMjU3MTM1NDg5ODcwMDM5RS04LDQuNDYwNjYxNDkyNTk5NTQyNUUtOSw2Ljg5MDcyMzM1MDUwODI0OUUtMTAsMi4xNjUwODUyNDk4NDA4NTNFLTksNC4wNzg1MDkyOTkwNTQ0NDhFLTksMS4yNzk3NDM4MDkxMTU2NDc5RS04LDkuNDU0NjA1MDUzMTk0OTQyRS05LDEuMDY1MjMyNTk1MjQ3NjUyRS05LDEuNzQ5NTc3OTYwNjU3MDY1MkUtOCwxLjU3Mzg4MTE1OTQ3ODQwNkUtOCwxLjE2MzQzMzcyNTEyMjA0NUUtOCwxLjE0MzEyNzcyODc3NTEzNjZFLTksMS4yNjE2MzQ4NTQ5OTY0Mzc3RS05LDEuODY2NTUzODE1MDIyNjk4NkUtOCw2LjAxODU2NDE2MzE0OTIzNEUtMTAsMi4wOTMxODIwNDk2NjE2MzYyRS05LDEuNzk2OTE0MjM0MTA4MzgzMkUtOSwxLjY2NzgyMTM1ODk3MTgwOEUtOCwyLjg4NDc4MzAyMjAwNTA0NzZFLTksMi4yMDk1NTg3MTA2OTI0NDIyRS04LDMuNzUyODE0NDMzMDU3NDc4RS04LDEuNjk0MDUyNzExNjI5NzgxNkUtOCwzLjE0NTA5OTIzNzQ2ODY5MjdFLTksNi44OTYwNDk1MTM0ODQ0ODhFLTksMS45MjM2NzY5MTI5NDI4NTM4RS04LDIuMzc2MTM0NDU3Nzc0MjkzN0UtOSwyLjg1ODgxNzk3NzQ5NTg4NjRFLTksNS44MTg4MzMwNTE1NDAyOTlFLTEwLDEuMDQxMDY1MTMwNzQyOTcxMUUtOCw1LjMzNjE0OTUzMTgxODcwN0UtOCw5LjQ0MTk1NTQxNjEyNjM3NkUtOSwxLjQyMjc1MTI4NTAyNzY0NTNFLTgsNi4yMTgyOTUyNzQ3NTgxN0UtMTAsMS40NTE5Nzg2MDQzNTk3NTI1RS04LDQuOTAyNzMzMDE5NjI3MzE5RS05LDMuMjU1NjE3MTE5MjI1NjM2RS0xMCw0LjM0MDgyMjgyNTYzNDE4MjNFLTEwCisxMixTYXQgNSBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzEzLFN1biA2IEZlYiAxMSwxLjE1Mzg2ODkyMzQ2MzU5OUUtMTEsMS4xNTc5OTg5NjA5MDk5MTY4RS0xMSw4LjQ1MDY5MjAwNTU0Mjg3OEUtMTIsMS4wMDIwMTA2MjM1MTQzNzAxRS0xMCwzLjQwODU1MTY3Mzk2NTAyRS0xMCwxLjA0ODgzODg5NDI1MTg1MTdFLTEwLDEuNDk3NjE1MTE3MDcyNTIzNkUtMTEsMy45MDU0MjY5NDgyNzU4ODhFLTExLDMuODEyMzQyMjU4MTM5NjQ0NkUtMTQsMi43Njk3MzAxODk1NzYwODdFLTEwLDEuODIwODA2NDMyMDA2MzExOEUtMTAsNC4yNzgwODM0MDQwMDkwMzhFLTExLDYuOTYwNzAxNTcyOTg2NjM0RS0xMiw4LjU5NjgzMTc5MjEwNDg5N0UtMTIsMi4wMzE0MzgzNDE3Njg1Mjc1RS0xMCwyLjEyODU1Nzc2MDc5NDYzNDdFLTExLDMuMjg4MTQ1MTk3NjQ1NDQzRS0xMiwxLjAzMzE0NDc1MTk1NTg0MzlFLTExLDEuOTQ2MjAwNzIyNzgwMjg4M0UtMTEsNi4xMDY3MzY5MDcxNjMzNTNFLTExLDQuNTExNTg5MzY3MzIwMDkwNUUtMTEsNS4wODMxMjMwMTA4NTI4NTlFLTEyLDguMzQ4NzExODUwMTM3NjQyRS0xMSw3LjUxMDMxNDI0ODUzNTFFLTExLDUuNTUxNzIzNDEzNDE1ODU3NEUtMTEsNS40NTQ4MjYzODEwMjE0NzVFLTEyLDYuMDIwMzIzODE1OTc4ODU1RS0xMiw4LjkwNjkwMjI5NTc2NjkyM0UtMTEsMi44NzE5NjQ1MDExMzE4NjU0RS0xMiw5Ljk4ODMzNjcxNjMyNTg2OUUtMTIsOC41NzQ1OTMxMjg5MzI0MTdFLTEyLDcuOTU4NTgyMTU5MDU0Njg0RS0xMSwxLjM3NjU3MzI1MDM3NjU4OThFLTExLDEuMDU0MzY2NzkwNTI2MTU0MkUtMTAsMS43OTA3ODQyMzY3MjM0NjIyRS0xMCw4LjA4Mzc1NDA2MzE5NjkzOEUtMTEsMS41MDA3OTIwNjg5NTQzMDY0RS0xMSwzLjI5MDY4Njc1OTE1MDg2OTRFLTExLDkuMTc5NDg0NzY3MjIzOTA3RS0xMSwxLjEzMzg1NDEyNjYwODM2NTlFLTExLDEuMzY0MTgzMTM4MDM3NjM2RS0xMSwyLjc3NjY1NTk0NDY3ODM3NDRFLTEyLDQuOTY3Nzk5NjU3NTQ0MTM0RS0xMSwyLjU0NjMyNjkzMzI0OTEwNEUtMTAsNC41MDU1NTMxNTg3NDQ3MDI3RS0xMSw2Ljc4OTE0NjE3MTM3MDM1RS0xMSwyLjk2NzI3MzA1NzU4NTM1NjhFLTEyLDYuOTI4NjE0MzU4OTgwNjI1RS0xMSwyLjMzOTUwNzM2NTc0NTAyODZFLTExLDEuNTUzNTI5NDcwMTkxOTA1RS0xMiwyLjA3MTM3MjYyNjkyMjU0RS0xMgorMTQsTW9uIDcgRmViIDExLDAuMCwwLjAsMC4wLDAuMCw0LjIyOTIxMTkzMTIxMzcyOEUtMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxNSxUdWUgOCBGZWIgMTEsNS41MDYwODE2Nzg4MTEyOTNFLTE0LDUuNTI1Nzg5NTcwMjgyODA5RS0xNCw0LjAzMjUzNzc5MzQwMjU0NDRFLTE0LDQuNzgxNDM3NjY5MzIwMTZFLTEzLDIuMTU2MjE1NjU1ODI0MTY1NkUtMTEsNS4wMDQ4OTQ4Mzg3NzQxMkUtMTMsNy4xNDYzODQ2NDU5MDIxMDJFLTE0LDEuODYzNjA4NTM3Mzc5NjA0RS0xMywxLjgxOTE4OTk4MTk4NjExRS0xNiwxLjMyMTY3MTg0MTc0NTk0MjFFLTEyLDguNjg4NjAyOTUzMTMwODI3RS0xMywyLjA0MTQzNDM1ODExODc0NjRFLTEzLDMuMzIxNTM3NzA4Nzc2MzA2RS0xNCw0LjEwMjI3MzQwOTM3ODY3OEUtMTQsOS42OTM3MDU0MTgxNzgxNTJFLTEzLDEuMDE1NzE0NDA2NjA4OTExNEUtMTMsMS41NjkwNTEzNTk0NjMwMkUtMTQsNC45MzAwMDQ4NTExODIzNTlFLTE0LDkuMjg2OTY0ODU4MDM5MDkyRS0xNCwyLjkxNDAzOTE1MjgxMTQxN0UtMTMsMi4xNTI4NTk3NDQ1MTUzOTU4RS0xMywyLjQyNTU4NjY0MjY0ODE0N0UtMTQsMy45ODM4NzQ0NjEzODQ0MTVFLTEzLDMuNTgzODA0MjY0NTEyNjM3RS0xMywyLjY0OTE5NTQxMTI2NzI3M0UtMTMsMi42MDI5NTc2NjU4OTE3OTI0RS0xNCwyLjg3MjgwNDE3OTg4NjM5ODRFLTE0LDQuMjUwMjM0MTk0NTgwMjE1NkUtMTMsMS4zNzA0NTY0NTMwOTYyMDNFLTE0LDQuNzY2Mjc3NzUyODAzNjA4RS0xNCw0LjA5MTY2MTQ2NzgxNzA5MkUtMTQsMy43OTc3MTA2ODY1NjExN0UtMTMsNi41Njg3OTE4MjY2MjE1MTFFLTE0LDUuMDMxMjczMDkzNTEyOTE4RS0xMyw4LjU0NTM0MTc0MjA0OTQyMUUtMTMsMy44NTc0NDA3NTc2MzYzODA3RS0xMyw3LjE2MTU0NDU2MjQxODY1M0UtMTQsMS41NzAyNjQxNTI3ODQzNDM5RS0xMyw0LjM4MDMwNjI3ODI5MjIyMjZFLTEzLDUuNDEwNTc0MjA0NzU3MDIyNEUtMTQsNi41MDk2NjgxNTIyMDY5NjNFLTE0LDEuMzI0OTc2NzAzNTQ2NTUwNEUtMTQsMi4zNzA1NTYxNDU2OTMwNjdFLTEzLDEuMjE1MDY3MzA4ODAxNTU2RS0xMiwyLjE0OTk3OTM2MDM3NzI1MUUtMTMsMy4yMzk2NzQxNTk1ODY5MzFFLTEzLDEuNDE1OTM2MjAyNjQ1ODU2RS0xNCwzLjMwNjIyNjE5MzA5NDU4OTVFLTEzLDEuMTE2Mzc2MjUyMjc4ODA5NUUtMTMsNy40MTMxOTkxNzY1OTMzOTlFLTE1LDkuODg0MjY1NTY4NzkxMTk4RS0xNQorMTYsV2VkIDkgRmViIDExLDIuNDk1NDI3NjQ4MDg0MjM4RS0xNCwyLjMzMzIyMDE3NTgzODE2NUUtMTQsMS43MTYxNDU3NTYzNDQyNjA0RS0xNCwyLjE3MDYzODE3NzYwMjA4NUUtMTMsMS40NjcyMjkxNDQ1MzU5NTkzRS0xMSwyLjI4NTI4NjAzNTg0Nzg5ODNFLTEzLDMuMDgxMzgyODg0OTk2MTQzRS0xNCw4LjU5NjIyNzM3OTIxMTE5MkUtMTQsNi4zNTAzMzg5Nzc3MTcwNjFFLTE3LDUuOTc5NTQ2NTU4MDQxODA5RS0xMywzLjk1ODE2ODg2MTA2ODg1OUUtMTMsOS4zOTIxNDE4NzczMjE1ODhFLTE0LDEuMzk3MzAwNDA2NTgxMzQ1OEUtMTQsMS43OTY4MzA3MTM1NDk4NTA0RS0xNCw0LjM3ODEzMjM4MTk4NTQzRS0xMyw0LjM0MDMzMDg3NzQ5NzIzNjZFLTE0LDYuNDE4Njg2MDI0NDczNTUyRS0xNSwyLjA4MDA3OTczMTY2MDkyNzNFLTE0LDQuMDAyODM3NjgyODExMjE5RS0xNCwxLjI5MzQ5MzYxMzgzMzIwMUUtMTMsOS41MTUzNTM1ODg1NTUwMzdFLTE0LDEuMDQxODU1OTYzNDYzMjEzNkUtMTQsMS43NTk5NDU1Nzc4Nzc4Mzg5RS0xMywxLjYxNTIxNjk3MjczMzQxMjNFLTEzLDEuMTc3MjA1NDg1MjUwMTkxN0UtMTMsMS4wODUyODAyNTM3NTU5Mzg0RS0xNCwxLjI1ODUxNjcxOTkxNzAzNDVFLTE0LDEuODk1NzA4NzkxNzQyMjEzM0UtMTMsNS45MTMwMTMzMTIyODY5ODJFLTE1LDIuMDc3NTgxMTQ2MTg1NTY1N0UtMTQsMS43OTUwNjAwNzk1OTI5MzA4RS0xNCwxLjY4NDc1NDU0NTM3NzcwNTJFLTEzLDIuODkwOTc0Njg3NDU4NzA0NkUtMTQsMi4zMjM1NjcwNDU2MDQzODVFLTEzLDMuNzkwNjE1MDY2MjY0NTYyRS0xMywxLjY5MzkxNDI2MjM0MTM3NjhFLTEzLDMuMDg2NTkwMzUwMDQxMjI2NkUtMTQsNi45NzAxMzM4Nzk3MjAyMThFLTE0LDEuOTI2OTM3ODY1NzUxNDQxRS0xMywyLjQxMTM4NDQyODA5NzE0MjhFLTE0LDIuNzc4NDY4MjUzMzgwNTkwNEUtMTQsNS42NzMwMzc5MzA3NDcyMDlFLTE1LDEuMDQ4Njc4NDI1ODczMDQ1NUUtMTMsNS40MzczNjg2NDQwNDk2MTJFLTEzLDkuNzY5MDU1MDU3MTU3OTg4RS0xNCwxLjQzNzg5NjMwOTM0OTkzOUUtMTMsNi4xMjk2MzQ5NzM1NDMzN0UtMTUsMS40Nzc2NTM0MTkxMDk4OTYzRS0xMyw0LjgxMjA2NDA4Mzk4NTk1NEUtMTQsMi45ODYzNjE1NzEwMzA1MTIzRS0xNSw0LjI1NDA1MTIyNjkxMTA2MjRFLTE1CisxNyxUaHUgMTAgRmViIDExLDEuNzIxODU3OTcwMTE5NTU4RS0xNCwxLjU3NDUxMzE5MjIwMjc1MjZFLTE0LDEuMTYxMTI2NDUwNjQ1MDI2RS0xNCwxLjQ5ODM2MDE5NTk0NDQwOThFLTEzLDEuMTg0NjE5NDc3NjY0MTExOEUtMTEsMS41Nzk0NDk4NDkxNTUxODMzRS0xMywyLjA5Mzg5MDE5ODMwNDU2ODdFLTE0LDUuOTE0NDE4MDg3MDk3OTNFLTE0LDQuMDM3MzA0MjUyNjQ1NzcxNUUtMTcsNC4xMjQwOTkwMTUwNTQzNjc2RS0xMywyLjczNDQwNDUwNDUyNzE1OTRFLTEzLDYuNDk2MjQ0MjAxNDAwNTY0RS0xNCw5LjQxNzcwMTI4MDQzNzQ0NEUtMTUsMS4yMjcyODcyNTk2MTMwMTVFLTE0LDMuMDE4MjQ3NDA4OTk3MDg3RS0xMywyLjk0MDYxMTE2NzQzOTAwNEUtMTQsNC4yODYyODE0Nzk4ODQxMzRFLTE1LDEuNDAzMzM0NzM0MzkwMDU4NEUtMTQsMi43MTk3MDQ1NDYwMjY2ODZFLTE0LDguODcyMzEwNzIxMzYxNjFFLTE0LDYuNTE4MDM4OTE5MzgzNDk2RS0xNCw3LjA3MDczNTE3ODYyNTMxMTVFLTE1LDEuMjA1Mzc4MjI0MzY3NzM2RS0xMywxLjExMjg4NjI5NTI5ODU1NDhFLTEzLDguMDc3MzYxNzAxMzk3NTk4RS0xNCw3LjI5MzA1ODY1NzkzNjA4OUUtMTUsOC41OTY0ODIzNTQ3Njg4MUUtMTUsMS4zMDIyMTQ1ODQ5NTczNTA2RS0xMyw0LjAxODkzNDIyNDM2NTcxNUUtMTUsMS40MTY4MTk5ODY5MDcwNDg0RS0xNCwxLjIyNjcxMTg0OTkxMDAwODRFLTE0LDEuMTU1Mzk0NzMyNjE2NTcyRS0xMywxLjk3NzY1MTcwNzc3NDA2OTdFLTE0LDEuNjA0MTI2ODg2MTE4ODM4OEUtMTMsMi41OTk1MTczODk3Nzk2NDk3RS0xMywxLjE1Nzk0NDIyMTgwODIzNjZFLTEzLDIuMDk3MTMwNzk4ODcwMDA3NUUtMTQsNC43ODA5NDEzNzg0MzY0MzFFLTE0LDEuMzE3OTg2MDIxMjk1NjY2NUUtMTMsMS42NTYwNTk2NTk3OTA4MjJFLTE0LDEuODgxNzEwMjY5MzcyOTg2NUUtMTQsMy44NDYwNDUyMDA3MDcyMzFFLTE1LDcuMTg1NDYxNDcwOTQyMjI1RS0xNCwzLjczODc0NTE0ODc4MjU4ODVFLTEzLDYuNzQ0ODU0NDUwNjIwOTU2RS0xNCw5Ljg2MjQ5NTYyMTkzMTM5MUUtMTQsNC4xNzA3NDEzMjE1MDQwMjM0RS0xNSwxLjAxNTY1NzY4NjA4NzQxNDlFLTEzLDMuMjY5NTk0ODU5Njc2MDc2NkUtMTQsMS45ODQyMTg4MTA3OTEyODg2RS0xNSwyLjg4ODk5MjcyNzkyNDI2NDNFLTE1CisxOCxGcmkgMTEgRmViIDExLDEuMzg5ODE2MjQzMzczMDIyNkUtMTQsMS4yNTkzNzMwMTAyMjIzMTkzRS0xNCw5LjI5ODk2OTg3NjUzNjAyRS0xNSwxLjIwOTQ2NDIwOTQ2NDU3ODZFLTEzLDEuMDQ1NDE0NTA4ODY0MzM0NUUtMTEsMS4yNzQ3ODQ5ODE2MjU1NTJFLTEzLDEuNjgwMzQ1MTQ3MzE5MzM4RS0xNCw0LjcyOTU5MTExNzIwNTQyM0UtMTQsMy4xMzQyODQ1MzgzMjc2MjlFLTE3LDMuMzI4NTk2NzE2MTg5NjY1N0UtMTMsMi4yMDcxNjYwNjY5MDk4ODgyRS0xMyw1LjIzNjM2MTAxNTk2OTUzM0UtMTQsNy41MjgyMjQ2NTc0NDQ1NUUtMTUsOS44NzE3ODc2NTg3MDI3MDRFLTE1LDIuNDM1ODQ4OTIyOTQ5ODY2RS0xMywyLjM1NjUzNjU3MjUxMzM2M0UtMTQsMy40MTA2OTgwNjg3MDMyODhFLTE1LDEuMTIyMzE4OTcwMTA2MTlFLTE0LDIuMTgyNDMzNDIyODkwOTAwNUUtMTQsNy4xNDg5MTE1NjA4OTIwMjVFLTE0LDUuMjQ5MTg0NTI5Mzc5MzAzRS0xNCw1LjY3MDg5NjU4NjA0NDA5MzRFLTE1LDkuNzA2NjgxOTMwMzA0MjU0RS0xNCw4Ljk4MDMwMTY4NDU1NzgwNUUtMTQsNi41MDkyMDE3MzM5NzU4NTNFLTE0LDUuODIxMzkwMTIyNTQzNzMyRS0xNSw2LjkxNDgwOTExNTcxNTIwNEUtMTUsMS4wNDk4MzU2ODA0NDgwNTEyRS0xMywzLjIyNTUxNDUxODUyMzQxN0UtMTUsMS4xMzg4NDQ0ODg0NTcwNjMyRS0xNCw5Ljg2OTM1ODM0NTk1ODQ4N0UtMTUsOS4zMDkwMDYwMDI5NTM0NzhFLTE0LDEuNTkxNzgxODAyMjg1NzU5N0UtMTQsMS4yODgyMjE5MzQ0MTU4Mjg4RS0xMywyLjA5NDQwOTEyNTEzODcyMzVFLTEzLDkuMzE3MzEzMDc5NTI2ODYzRS0xNCwxLjY4MjgzNDYxNzQyNzA2NThFLTE0LDMuODUyMjY4NDIwMzU1Njg3RS0xNCwxLjA2MDc2MjkzMjcwODY2NzRFLTEzLDEuMzM0OTkxODg5NzMxOTc4MkUtMTQsMS41MDc2ODE3MTkxODQ3NDY2RS0xNCwzLjA4MzA4NTY5ODE4OTk2MDhFLTE1LDUuNzg3MzI0MTQ0MjMzNDdFLTE0LDMuMDE1MTU3NTEzOTU5MjM2RS0xMyw1LjQ0NDQ0NjQyNzUzOTY3M0UtMTQsNy45NDY2NjU3NzY0NTc2OTdFLTE0LDMuMzQ5MDQ1MDczNTg1NzE2M0UtMTUsOC4xODk4NzgzMzkwNzkxNjVFLTE0LDIuNjIzNzE4OTA5NjEwNjk4M0UtMTQsMS41NzQ5MjEwNDMxODk2MDUyRS0xNSwyLjMxNzc1NjkyOTM2NjE4OEUtMTUKKzE5LFNhdCAxMiBGZWIgMTEsMS4yMzkxMDMxMTE3MzEwMDg3RS0xNCwxLjEyMTEwMzIzOTA5MDgzNTNFLTE0LDguMjgxNzk5NDAwMDQ4MDg5RS0xNSwxLjA3ODEzNTM5MzA4NDYzODFFLTEzLDkuNzA1MTUwNjM0OTM4MzE2RS0xMiwxLjEzNTQzNDcyMDQ1NDQwODRFLTEzLDEuNDk3NTg0NjU4MTA3MDg3RS0xNCw0LjE2NTQwNjQ4NjczNzQ3RS0xNCwyLjc1ODIzNzAzODg1NzU3MjVFLTE3LDIuOTY4MDU4NzQ4MTExOTEyNUUtMTMsMS45NjY2NDc3NzUwNjM2NjRFLTEzLDQuNjUzMTAyMzQzNTYxMjc1RS0xNCw2LjcwMDE4ODQ3NjM2MzQ4OEUtMTUsOC44MDM5NDc3NTA3MTk2MzlFLTE1LDIuMTcyMjYwNzg3MTY3NDQxOUUtMTMsMi4wOTkyNDQ0OTUzNTg0NzU1RS0xNCwzLjAzMDIwMjcwMzI5NzE3NEUtMTUsOS45OTA1MTU5ODQ4MTgwMDVFLTE1LDEuOTQ1MDI3Mzk2MzI0MDkyRS0xNCw2LjM3NzUzNzAyMjUzNzg4NkUtMTQsNC42ODI1MDY5OTQ3MjkxMjg1RS0xNCw1LjA1MzEyNTg5NzU2NzU2NjRFLTE1LDguNjU4NzEwNzgzMTE1Nzg2RS0xNCw4LjAwOTQ0NTMyMTk3Mzk1OEUtMTQsNS44MDY5MDI3NTA1MDI2RS0xNCw1LjE3ODI0MTEzNDM0Mjc4MkUtMTUsNi4xNjY4NjE3MjI3MTQ4NEUtMTUsOS4zNjU3MDgyNzYzNjgzMjlFLTE0LDIuODc0Nzg4MTU3OTIxMDU4RS0xNSwxLjAxNTQ3Mzk2NDI1ODUwODZFLTE0LDguODAyMjQxMTcxMDMyMDFFLTE1LDguMzA0NTA2MzAzNzgxMzYyRS0xNCwxLjQxOTgwMjU0OTE5OTA1MjFFLTE0LDEuMTM5NTk3NTEyNTUwMjUwOEUtMTMsMS44Njg0MDc3MzE0MDcxNjI1RS0xMyw4LjMxMDEyODMwNTE2MTg1NEUtMTQsMS40OTk3NzE0MDk1MjAwNDE2RS0xNCwzLjQzNjYwNDg1ODg1OTlFLTE0LDkuNDYxNDQ1NDMxODIzMjI2RS0xNCwxLjE5MDk2NDU2OTMwMTg4MzdFLTE0LDEuMzQyOTgzNjQ1NDM1NzUxOEUtMTQsMi43NDY3NjExMzg5MTE4NzJFLTE1LDUuMTYyNjMzMDgzMzcyNTkyNUUtMTQsMi42ODk3NzQ4ODgyNTYwOTMzRS0xMyw0Ljg1Mjc5MDc2NjMzMjIyNzZFLTE0LDcuMDg5MjA2MTg1NTkyNzE3RS0xNCwyLjk4NTM1OTg5NDI4MzMxNTZFLTE1LDcuMzA2MTgwNzU0NTE0MTA0RS0xNCwyLjMzODMxNjc3MjU4MDQ5NkUtMTQsMS4zOTc4Mjk5OTE0NDc4ODc2RS0xNSwyLjA2NTQ3ODgwMzg4MDE4NEUtMTUKKzIwLFN1biAxMyBGZWIgMTEsMS4xNjE4MTE5MTEyNTY0MzA0RS0xNCwxLjA1MzEwMzk3NDk4NTkxM0UtMTQsNy43ODAzMzg5NzY5Mjg5MzNFLTE1LDEuMDEwNjMwMzkyMjEyODA2RS0xMyw5LjI3NjAxMDA0MzcwMjE5NkUtMTIsMS4wNjMxMjQwNTYxMDk4MzNFLTEzLDEuNDA3MDYyNTkxODI4MDcxN0UtMTQsMy44NTI3MjA3MTIzNDc5NTlFLTE0LDIuNTgwNTA1MDUyODQwMjIyNEUtMTcsMi43ODM1NzQxNTkxMzQ3MDI2RS0xMywxLjg0MjM1MTIyNDM0NjM5NThFLTEzLDQuMzQ0NTMxMDA1MTIxNjA3NEUtMTQsNi4yOTM0MTM0NDE1NTAyOThFLTE1LDguMjcxMzAwODAwMzk4NTY0RS0xNSwyLjAzNzY2MTc2ODIxMjcwOEUtMTMsMS45NzIyMjY2Mzc5Mzk0OTk2RS0xNCwyLjg0NDYxOTA2ODUwMzk0OUUtMTUsOS4zODQ0Mzk2ODQzODI3M0UtMTUsMS44Mjc0NTY2MTQ0NzA2NTVFLTE0LDUuOTg5NjkyMzkxNDgxNjQ4RS0xNCw0LjM5ODM4Njk2OTg0MjU2ODZFLTE0LDQuNzQ3NTg4MzU1NzYzOTg2RS0xNSw4LjEzMzQ0Mjk2Mjc5MTIzNEUtMTQsNy41MTQ4NDkwODUyNzc5NUUtMTQsNS40NTM1MjA0MTMxNzk0NzRFLTE0LDQuODYzMDY5MzQ3NDE3MzgzRS0xNSw1Ljc5Mzc0ODM4NDMxOTEwNUUtMTUsOC43OTQxODgzNjk0MDczNzRFLTE0LDIuNzAxMDI3MDgxOTU3NzcwN0UtMTUsOS41NDA4MjU3MDE0MTQ1OTFFLTE1LDguMjY5NTA2Mjc3MzAzMTEzRS0xNSw3Ljc5OTY1MDc4Mjk2NDI1M0UtMTQsMS4zMzM3OTUxNDEzNTc3MTQzRS0xNCwxLjA1ODg1NTE5NDcwOTk0MjVFLTEzLDEuNzU0ODI2OTU4MTU0MzAzNUUtMTMsNy44MDcwNTU3NjczNjE1NzZFLTE0LDEuNDA5MTE0NjQ0NTA0NDgxOUUtMTQsMy4yMjc2MTA3MjgxNTM0MzlFLTE0LDguODg4MzgxNDIxMDUxRS0xNCwxLjExODMzMzkyOTUwNjYyMDNFLTE0LDEuMjYxNzA5MTE2NjM0ODQ3NEUtMTQsMi41ODA2MTI5MjQ4MDEwMjg2RS0xNSw0Ljg0OTI1MTM5NTYwODA5MUUtMTQsMi41MjUxNDU0OTc3OTAyNTZFLTEzLDQuNTQ4Mjc1MzA5ODIyMTU0N0UtMTQsNi42NTgxMDc2NDAwNDkwNDNFLTE0LDIuODA0OTM0NDE2NzE1NTk3M0UtMTUsNi44NTk1NDYxMjA5NjkwNThFLTE0LDIuMTk2OTczNDYwMjgxMjYzRS0xNCwxLjMxMTc1MTg4ODEyMDI2MzdFLTE1LDEuOTQwNjEzMzIzMzQzMDEzRS0xNQorMjEsTW9uIDE0IEZlYiAxMSwxLjEyMjQzMDQyODIzMTQ1OTdFLTE0LDEuMDIxMjIyOTQzODM3Mzk5NEUtMTQsNy41NDQxMjgyODk0MjM2OTVFLTE1LDkuNzYwNzkyMDM3NjMzNzk4RS0xNCw5LjAxOTM0Mzk0MTEzNTE0MkUtMTIsMS4wMjU0MjI3MjU4Nzk3MkUtMTMsMS4zNjQwMzQzOTg0MDEwMzYxRS0xNCwzLjY2OTQwNTkwMzM1NzY4OEUtMTQsMi41MDMxNzc1NDQ2NDE1MDZFLTE3LDIuNjg5OTg5ODQwMDM0MDU2NUUtMTMsMS43NzgwNTkzNzU0NDI2Mzk5RS0xMyw0LjE3NzY2NDk5OTMxNTY2NTRFLTE0LDYuMTAzMDkxMzkyNzE5MDMyNEUtMTUsOC4wMTQ1NTkzMjI2Mzg5MzdFLTE1LDEuOTY5NjYxMzA1NjAzMDQ3NUUtMTMsMS45MTIyMzcyNDY3MDYwMTIyRS0xNCwyLjc1ODkzNzE5NDEwOTY1OUUtMTUsOS4xMDA0MDU5MzA4NjA1OUUtMTUsMS43NzE1ODc0OTE1MTE1NjA0RS0xNCw1Ljc5OTczNjQ0ODM0NTc0MUUtMTQsNC4yNjAwMjA0NjM1MDUzODE0RS0xNCw0LjYwMjc2OTk2ODYxMjY3NjVFLTE1LDcuODc3Nzk2MzY2MjA2MzU4RS0xNCw3LjI2NjE0MTU5NzcxNjgwN0UtMTQsNS4yODAxNzgxODA4MjU5MDdFLTE0LDQuNzE2Mjg2NDE0MDMzODQ0RS0xNSw1LjYxMzg3MzY4NzczMjc3N0UtMTUsOC41MTIyNjQ2MDkzNDYzOTVFLTE0LDIuNjE4MzkwODY3MTMyMjM1NkUtMTUsOS4yNDYzMTY1MDA5MjgwODhFLTE1LDguMDEyMjkwMTA2Mjg5MTQ4RS0xNSw3LjU1MjU4NjU2MTY0ODk4OUUtMTQsMS4yOTIxMjMwMTcxNDYzNjU4RS0xNCwxLjAxMzA3ODI3Njg3MDU5ODRFLTEzLDEuNjk5MjQ5MzE2NTM1MTQ0OUUtMTMsNy41NjM5MTIzNTI5NDA0ODRFLTE0LDEuMzY2MDM2NTk4MjAzMzA5MUUtMTQsMy4xMjUyNTExNDk0NTc1ODg2RS0xNCw4LjYxMDg2Mzc4NTEwMDM1NUUtMTQsMS4wODI1NDk0Mzc5NTU0Nzg5RS0xNCwxLjIyMzM1MzI5MjMyODA3MjdFLTE0LDIuNTAyMDM4MTIxMjEzMzg0RS0xNSw0LjY5NjQ2MzE1NTgyNjkxODRFLTE0LDIuNDQzNDkyMzU3MzQxOTc1N0UtMTMsNC4zOTIwMTYyMzc4ODAzNjczRS0xNCw2LjQ0Njk5NjAxNzM0MTM0NkUtMTQsMi43MTg5MDAyMTgyMTg5NTc2RS0xNSw2LjYzODQ5ODg0NTI4ODIyN0UtMTQsMi4xMjk4MDQ1OTQwMDQ1NzdFLTE0LDEuMjcyMjU5MTczNzgyMjk0MkUtMTUsMS44ODEzNDMxNTAyNjY1Nzk1RS0xNQorMjIsVHVlIDE1IEZlYiAxMSwxLjEwMzM5MjU5OTcwNjMyMUUtMTQsMS4wMDg3MTE0NzAxODg4NTYzRS0xNCw3LjQ1MDIxOTMxNDExNTgyOUUtMTUsOS41OTIwOTU1OTkwNjIzOTJFLTE0LDguODU5NjAxODU2MDQwMjIyRS0xMiwxLjAwNjI3ODc0MDgzMjE3NTNFLTEzLDEuMzQ2NDk5NTI0MDYwMjY5RS0xNCwzLjU1NTEzNjg5NzYxNzM4MTdFLTE0LDIuNDc5MTE1MzYyMjU5MDU0OEUtMTcsMi42NDUxOTIzMzEyMzE2MTZFLTEzLDEuNzQ1OTUxNDUwMzYzNTkwNkUtMTMsNC4wODY2NjQ1OTg2NTA5MjJFLTE0LDYuMDI4ODI3NjE1MjQ2MDA2NUUtMTUsNy45MDU5ODExOTg1NTczMzZFLTE1LDEuOTM3NDA4OTQxODkxNjAxOEUtMTMsMS44ODgyMTM5MTc3NDk3MTU2RS0xNCwyLjcyNjczODc1NTMwOTI5NkUtMTUsOC45ODkwNzEzMjQwNDIwMjdFLTE1LDEuNzQ4ODM3NTUzMjg0NTA5NEUtMTQsNS43MTYwNTg2MTI2ODg0NzdFLTE0LDQuMTk5OTMyNzE4OTA5NDc1RS0xNCw0LjU0NDIwODM5ODExMTA1MkUtMTUsNy43NjY5NTI5Njg0Njg1ODNFLTE0LDcuMTQ5NDM2MTI1NzIyODM1RS0xNCw1LjIwMzUyNzU2MTg1MDAxMzZFLTE0LDQuNjU5NzQ4MzkyNDg2Njk2RS0xNSw1LjUzNzc2OTkzMjY0MDUzMkUtMTUsOC4zODU4NjI2NjgwMjIyNkUtMTQsMi41ODQ2Njg5NTY2MzQ1OTFFLTE1LDkuMTIzMzExOTYzODUwNjYyRS0xNSw3LjkwMzAzMzcxOTAwMTc5OUUtMTUsNy40NDM5NzIxNjAwMDczMzlFLTE0LDEuMjc0MjYwOTc1NTgyNTYyRS0xNCw5Ljg1OTgzNTQ3Mzc1NDUzOUUtMTQsMS42NzQ4MjI5NDMwMzUwMjFFLTEzLDcuNDYwMzU4ODAxODE3MDY1RS0xNCwxLjM0ODQ5NzAxMzk2MTUwMjdFLTE0LDMuMDgwMTYwNzI4MzU4MzYyRS0xNCw4LjQ5MjA2NzMwMjEwOTE1NEUtMTQsMS4wNjY1NTI2OTA0NDU1MDk2RS0xNCwxLjIwODAyNTU4MTk2NTkzODRFLTE0LDIuNDcwNDU3Mjc5OTQzNTIyN0UtMTUsNC42Mjk5MjM4MzQzODM0OEUtMTQsMi40MDYzOTY2MzU4MzA2MTZFLTEzLDQuMzE1Mjk4MDQ3NjQxMTI1NUUtMTQsNi4zNTQwMzA2NDY3MTk1M0UtMTQsMi42ODM1Mzk0Mzc4MjcwMTA0RS0xNSw2LjUzODU5MzY1MDQ4MjI3OUUtMTQsMi4xMDI0NDk5MzU2Mzk3MTZFLTE0LDEuMjU3NjgzOTU4ODkyMzE4NEUtMTUsMS44NTcyODAyMTYxODE4NDU0RS0xNQorMjMsV2VkIDE2IEZlYiAxMSwxLjA5NTg0NDc3Mjk2MzgzNTNFLTE0LDEuMDA3MTc4MDYzMzUxOTk4MkUtMTQsNy40MzY5NjA3ODkwNzUwMkUtMTUsOS41MjMyMzc1NDA0MTMyMzlFLTE0LDguNzU1ODEyNTE2NTE0Nzg5RS0xMiw5Ljk3NjAyMDMwODM4NDQ2N0UtMTQsMS4zNDM0MTEwNTYzODcyODExRS0xNCwzLjQ3OTY4ODk0OTc4OTc4M0UtMTQsMi40ODUxNjQyNTA2OTUyMjg2RS0xNywyLjYyNzk1NjQzMTIyMTI3NjdFLTEzLDEuNzMyMDA1MDc3NjA3ODI1NkUtMTMsNC4wMzgzNzU2MDkwNDYxNTVFLTE0LDYuMDIwMzQxODgzNjg1NjVFLTE1LDcuODgxMzI2ODg4Mjg5MjZFLTE1LDEuOTI1MzU2ODUyODI1MTEyNUUtMTMsMS44ODQ1NzQwMDM0MDA5MzE1RS0xNCwyLjcyNDg0NjU2ODU3OTQwNThFLTE1LDguOTc1NjE3MjYwNzg2NDU4RS0xNSwxLjc0NDg1NTUyNjU4NTE3MDNFLTE0LDUuNjkyNTM3MDIxMTA5ODQ0RS0xNCw0LjE4NDE2NDgzNzQyNjcwM0UtMTQsNC41MzQ1MjkyNDQ5NzE2NjlFLTE1LDcuNzM4MDk2NTcxMDY1NzM5RS0xNCw3LjEwNzM0MTM2NTY3OTAxRS0xNCw1LjE4MTYwMjgyNjA3MTMxM0UtMTQsNC42NTQzNTY0MTU0MTc4Njc1RS0xNSw1LjUyMDQ0NDUyNDcwODYzNkUtMTUsOC4zNDc0NTgyNTUzMDU0MTVFLTE0LDIuNTc4NjY1MTk3MDE1MzUyNUUtMTUsOS4wOTc0NjkxMzMzMjkyMjNFLTE1LDcuODc3NTgwMzE4MTk5MDM5RS0xNSw3LjQxMzcyNzE2NDI1MDgxNUUtMTQsMS4yNjk4ODI3ODI3NjMyMDM3RS0xNCw5LjY5MzkwOTk3MzM2OTM0NEUtMTQsMS42NjgwMjk4MTMwMTEyODU1RS0xMyw3LjQzNTg2NDMzMzI0ODg0NkUtMTQsMS4zNDU0Mjk1MjUzNDUzNzkzRS0xNCwzLjA2NzQ4NjE4MDg0MDI5NDVFLTE0LDguNDYzMTU3ODg2Mzc5ODAzRS0xNCwxLjA2MTc1Mjk3MTE1ODAxMzVFLTE0LDEuMjA1NzQ4OTU1OTkzOTc3OUUtMTQsMi40NjU1MDkzMDI1OTk2MzM4RS0xNSw0LjYxMjIxNDM3NzU2MTA3NjRFLTE0LDIuMzk0NTA1MTM3NzAwODA1RS0xMyw0LjI4MzQ4NTc3NTA0Njg4OTZFLTE0LDYuMzI3OTM5NjU3MDg4NDFFLTE0LDIuNjc2ODkxNzEwMjYxOTQzN0UtMTUsNi41MDcyMjEyNTM0NTQzODRFLTE0LDIuMDk3NjU3MDg3MDg1Mjg0N0UtMTQsMS4yNTcyMjUyODE1NDI2ODE4RS0xNSwxLjg1MzE2ODkyNDA0MjA0NDdFLTE1CisyNCxUaHUgMTcgRmViIDExLDEuMDk0OTUwMTc0MjU2ODQwMkUtMTQsMS4wMTIwNDE5OTg1MDY4ODk2RS0xNCw3LjQ3MDY4ODEzMDQwMzIwNUUtMTUsOS41MTIxNzA2NTIwMjEyOTdFLTE0LDguNjg0ODQ4NDI5Nzk2NDQzRS0xMiw5Ljk0OTc2NDQxMzQxNzg0NUUtMTQsMS4zNDg3MzQwMDY0MzE3MzY4RS0xNCwzLjQyNjY5NjY4MDI4NDAzMzRFLTE0LDIuNTA4Nzg1NzYwOTAyNzI4NEUtMTcsMi42MjY2ODUzODg0MjYxODhFLTEzLDEuNzI4NTYzNDk2MzcyODA3RS0xMyw0LjAxNDczMjI4NjM4MTE4NkUtMTQsNi4wNTAxOTE1ODAyNDMxNjVFLTE1LDcuOTA1NDg3MDA1MjU0MzIxRS0xNSwxLjkyNTAwOTM3OTk2NzQ1MzhFLTEzLDEuODkyODA3MzAyMzU2NTE1N0UtMTQsMi43NDA2MjYyMTg5MjEyMzM1RS0xNSw5LjAxOTIwMzIyOTcwMTgyOEUtMTUsMS43NTE4MDEzMjk5MDc2Njc1RS0xNCw1LjcwMzk2MDM2NDcwMzE3RS0xNCw0LjE5NDE1NDQ4MDE1MjQzNUUtMTQsNC41NTMzMTczMTk3NDYyNkUtMTUsNy43NTY4OTEyNDQ3MDIzMTFFLTE0LDcuMTA4NDk0MzQ5MzM3OTY3RS0xNCw1LjE5MTQ2NDUwMDA2MjAyOTdFLTE0LDQuNjc4Nzc4NzE0MzcxNzE5RS0xNSw1LjUzNzMwNzE5NDk1MTk1NUUtMTUsOC4zNjAxNDE2MzQ3MzgxMDdFLTE0LDIuNTg4Nzk5NzY2NDMxOTYyNkUtMTUsOS4xMjgxNjExODY0ODQ0NTNFLTE1LDcuOTAwODY0NjQ2MjIyNzIzRS0xNSw3LjQyOTAxMDIyNDU3MDcxOUUtMTQsMS4yNzMzNDQyNzg5MTEyNDkyRS0xNCw5LjU4ODU3OTA0NTUyODE2OEUtMTQsMS42NzE0ODA2NjE2MTUzNjU4RS0xMyw3LjQ1NzM0NDk0MzI0OTQ0OUUtMTQsMS4zNTA3ODg2MDExMDA4NTU3RS0xNCwzLjA3MzY0MjExMDAxMDQ3MzZFLTE0LDguNDg2NTEyMTQ0ODczMzA1RS0xNCwxLjA2MzQ1NDQ0MzQ1OTYxMzNFLTE0LDEuMjExMDc0ODYzNzU0Njk5N0UtMTQsMi40NzYwNzM1MTI1ODE3NzQzRS0xNSw0LjYyMjg4MDk0MTE2ODk4MDRFLTE0LDIuMzk3MjM5NTkwMDg0MDkzRS0xMyw0LjI3NzY2MjI1ODE4MDg0NTVFLTE0LDYuMzQwNjk2NjI2NDcwNTY3RS0xNCwyLjY4Njk1ODQ1ODk5MjAzODZFLTE1LDYuNTE1NjI1MzQ0MjE0MTcyRS0xNCwyLjEwNjAwMTA2NzExNTUwOTVFLTE0LDEuMjY0OTk5NDA2MjY1NzUzNUUtMTUsMS44NjA2NzU1Njg1MDY5NDdFLTE1CisyNSxGcmkgMTggRmViIDExLDEuMDk3OTYzODQ3ODcyNTgzNkUtMTQsMS4wMjA2OTgyNzI5Mjc0MjQ0RS0xNCw3LjUzMjI1NTY1MTY2ODk4MkUtMTUsOS41MzUwMzc4ODQzNTc0MTFFLTE0LDguNjMzMzM4MDg3MjYyOTM5RS0xMiw5Ljk1ODk4ODc3NjQ5NTA1OUUtMTQsMS4zNTkwMzYwODYzNTA4MzM3RS0xNCwzLjM4Njk3NDU1NDQ2Mjk3RS0xNCwyLjU0Mjg2OTE2NTgzMzM1NTVFLTE3LDIuNjM0Nzk2NDEzODk1NDYyN0UtMTMsMS43MzEyODQ4MjcwNTUyMjQ2RS0xMyw0LjAwNTUxOTc0MjY0MDUxNzdFLTE0LDYuMTAyNzcwOTQ4MTI1NDY1RS0xNSw3Ljk1ODQ5Njc0MzYwOTA5NUUtMTUsMS45MzE1NDMxMTMzOTIwMzk4RS0xMywxLjkwODA3MzgxNzY5MDIyOUUtMTQsMi43NjY4OTU1MTIyNzEzMzg1RS0xNSw5LjA5NjYwMzg3ODA1NDc5RS0xNSwxLjc2NTIxNjA1ODU1NjA4MDJFLTE0LDUuNzM1OTk3ODI4MDE5NDUzRS0xNCw0LjIxOTM0ODYyNjg5NTQ3MzRFLTE0LDQuNTg4OTYxODExODc4NDY4RS0xNSw3LjgwMzgxNjA5MTU3MDQ5OEUtMTQsNy4xMzUwODQ5OTA2NjE1MUUtMTQsNS4yMjAwNzM3NDYwMzU0MDc2RS0xNCw0LjcyMDg4NTc3MDMxMDU1MjVFLTE1LDUuNTc0Mzc0ODMxMTY1MzU5NkUtMTUsOC40MDI5MzcwNjk0NDE4NTVFLTE0LDIuNjA4NDg2ODY4MTc3NzIyRS0xNSw5LjE5MjI4NDE1MzkwNzY0RS0xNSw3Ljk1Mjk0NzYwNjQzMTVFLTE1LDcuNDcxMTUyOTUwMTI5ODY4RS0xNCwxLjI4MTQzNjI2NjMyMjIyNjZFLTE0LDkuNTE4ODIxNDUyMTE5MzAzRS0xNCwxLjY4MDk3NTEwOTYyMDU0MjlFLTEzLDcuNTA1OTg4NTA3OTA1ODRFLTE0LDEuMzYxMTM1OTU0MTgxMDk4RS0xNCwzLjA5MDkwNjE5NDY3NzgxMTNFLTE0LDguNTQwNzM3NjU0OTI5MDY3RS0xNCwxLjA2ODk4ODM2Mjg1MjYxNzVFLTE0LDEuMjIwOTA0NTcwMDA2NDcxRS0xNCwyLjQ5NTgyNTIyNzE2ODM5NUUtMTUsNC42NTAyOTU0OTI3MDk4NzY2RS0xNCwyLjQwODU4OTU0NjkyNTE4NjdFLTEzLDQuMjg3MDk1NTc2NTA1NjkxN0UtMTQsNi4zNzYzNzA0ODUzNzc0MDFFLTE0LDIuNzA2OTE1ODI2NjI1OTc4NkUtMTUsNi41NDc0NjU2NTMxNjg4NzVFLTE0LDIuMTIyMTIxNTg4NjkyOThFLTE0LDEuMjc3NjYyNDY3NzM1NzY2N0UtMTUsMS44NzUwNjA0OTM0ODY4ODgzRS0xNQorMjYsU2F0IDE5IEZlYiAxMSwxLjEwMzI4NzkzODUzMzc4MkUtMTQsMS4wMzE2MjQ1NTE5NjQ0NzQ5RS0xNCw3LjYxMDQ3NjE4MTYzMzE5MUUtMTUsOS41Nzc5NTU5MzYyNzczOThFLTE0LDguNTkzNDM0NzUxMDM1NjY5RS0xMiw5Ljk4OTE0NTIwMjg3OTAzNkUtMTQsMS4zNzIzMTIzMDk1NjQ3NjcxRS0xNCwzLjM1NTIzOTE1NDM2NjA5N0UtMTQsMi41ODMyNTUxODI1MDE5NTdFLTE3LDIuNjQ4NDU2NTY0MDkzMjc2RS0xMywxLjczNzY0NDEzNzYwMDk5NDNFLTEzLDQuMDA0ODE3NTM5NTM1NTA3RS0xNCw2LjE2ODk1OTcxOTg1NjcxNDVFLTE1LDguMDI4Njk5Nzk2MTU1NjRFLTE1LDEuOTQyMTQ4ODM1MDEwNDA0N0UtMTMsMS45Mjc1NDU2NjUxNDUwNTEzRS0xNCwyLjc5OTQ1NjA3MzI4ODMzOTdFLTE1LDkuMTk0MjQ2NDI5MjAzNzA5RS0xNSwxLjc4MjQ5NDk5NzM1ODM1NzRFLTE0LDUuNzgwMjg4NjE1MzI1ODFFLTE0LDQuMjUzNTg4ODA5OTg1MDYxRS0xNCw0LjYzNDY3OTU3MzM0NTQyRS0xNSw3Ljg2NzQ3ODg5MTY3NzY2MkUtMTQsNy4xNzY3Mzc1NTAxNDk4MzFFLTE0LDUuMjU5ODI0MTA1ODk5MTU4NkUtMTQsNC43NzM1ODgyMDk1MTgxODNFLTE1LDUuNjIzNDgzNTUyMzU4NjYzRS0xNSw4LjQ2MzYxMTQ4MjU2NTA5MkUtMTQsMi42MzM4Nzk0NDU1MTAyMzM1RS0xNSw5LjI3NjM0NjMyNDc0OTY2OEUtMTUsOC4wMjIxODg3MzY0MTk2NTZFLTE1LDcuNTI5MjYzNTA3NjExMDc2RS0xNCwxLjI5MjI4NTUwMDk3NDA4NEUtMTQsOS40NzAxOTY0MjE0MTM3ODFFLTE0LDEuNjk0MDYyNDg2NDQ2NjI0M0UtMTMsNy41NzA4MTI5Nzk2MDI1NUUtMTQsMS4zNzQ0NjMwNzExMzQ4MzQyRS0xNCwzLjExNDc3MzEyNTYwNDI0NUUtMTQsOC42MTMzNDcxMzg1ODg0OUUtMTQsMS4wNzY3OTgyMTU5Njg2NDQ3RS0xNCwxLjIzMzQyNzUyMzc0NDc2ODZFLTE0LDIuNTIxMDY5MjQ2NTk0MjQ4N0UtMTUsNC42ODc2NzI1NzU4MDcwMjQ1RS0xNCwyLjQyNTA1MDcyNzAyODk3MjVFLTEzLDQuMzA1NTQxNDY4NzgxMDY2RS0xNCw2LjQyNTY2Njc2NDcxMjg0NUUtMTQsMi43MzI3NzgwNjc5NzA2NzI0RS0xNSw2LjU5MzIxNDE3ODg3NTMzM0UtMTQsMi4xNDI4ODczODk4MDg0MDQ0RS0xNCwxLjI5MzI1OTY2MDQ5NTk4NzFFLTE1LDEuODkzNTU0ODc3ODcyNTc2RS0xNQorMjcsU3VuIDIwIEZlYiAxMSwxLjEwOTk3ODI3NjcwNzcwMDVFLTE0LDEuMDQzOTE2NzAwMzk2MDYzOEUtMTQsNy42OTg3MDcwMTgyMzAxOTNFLTE1LDkuNjMyNzIzOTA5OTIzNTk4RS0xNCw4LjU2MDQ5MjIwNTk1ODQ2NEUtMTIsMS4wMDMxNjUyMTI2ODMxMjM1RS0xMywxLjM4NzM3MjcxMDQ1NjU5NzVFLTE0LDMuMzI4NDA2NDk4MjEzMzQ2RS0xNCwyLjYyNzQ2NTkxMDU3OTIzMzdFLTE3LDIuNjY1NDAwMjM4NzczMTkxRS0xMywxLjc0NjE1MTEyMzU2NDc4NDNFLTEzLDQuMDA5MTQzOTQwOTU0NzEyRS0xNCw2LjI0MzM0MDcxODgwMTcxNkUtMTUsOC4xMDkxODM0NDQ1MDMyOThFLTE1LDEuOTU1MTY1NTczMzA4ODE2RS0xMywxLjk0OTU0MzkyOTM3Njc1RS0xNCwyLjgzNTgxMjcxNzIzNjEyMzhFLTE1LDkuMzA0MDY5NjYzMTQ3MTA0RS0xNSwxLjgwMjA5MjIxNjIxNTY3MzNFLTE0LDUuODMxODc5MTQ0OTMyMDJFLTE0LDQuMjkzMjI1MDAzMjU0ODIyRS0xNCw0LjY4NjQ0NDE4MzMwOTg1NEUtMTUsNy45NDExMjc0MDI1OTk5NTlFLTE0LDcuMjI3MzE1Mjg3NDk0MDE2RS0xNCw1LjMwNjIwOTM1NjY4NjM5MkUtMTQsNC44MzI2NzQyNTUxNDc2MDlFLTE1LDUuNjc5NzkxODUzODUxNTYxRS0xNSw4LjUzNDkyMDMzMDg2OTc5N0UtMTQsMi42NjI2OTQzMTk2NzM2OTY3RS0xNSw5LjM3MjM0NDM0MDA1MzAzRS0xNSw4LjEwMTY4NTM4NjI4MTI0OUUtMTUsNy41OTY4ODg0MDc1NjA4ODdFLTE0LDEuMzA0NzgxNDAwNzcwMzQ4NUUtMTQsOS40MzQyNDgyMDU4MzYxMTlFLTE0LDEuNzA5MjkwNzQyMzM0OTUzN0UtMTMsNy42NDUzMDY1Mjg4NzM0NzRFLTE0LDEuMzg5NTc3ODcyNDEyNjAwMkUtMTQsMy4xNDI1NzM2MDkwNjM0NDE1RS0xNCw4LjY5NjkzNzA5MzI4NzI0NEUtMTQsMS4wODU5NjIxNDk1MTE3ODU5RS0xNCwxLjI0NzU2ODc1OTA2ODYwOEUtMTQsMi41NDk2MTE4NzgzMjM4M0UtMTUsNC43MzA5OTA4MzI0NDYwMDJFLTE0LDIuNDQ0NTQ4NTk2MDQzMzg4N0UtMTMsNC4zMjkzMTIxMzM1NTc5MThFLTE0LDYuNDgzMDc4NjU1NTMzODQ2RS0xNCwyLjc2MjE4MDAzMTQ5MTIxNjdFLTE1LDYuNjQ3MjI5NTUyNTY4MjA3RS0xNCwyLjE2NjQ0MDAzMzAwNjczNUUtMTQsMS4zMTA2Mjg5MDI0NTE5MjM4RS0xNSwxLjkxNDUxNTI5NzQzMzg1OEUtMTUKKzI4LE1vbiAyMSBGZWIgMTEsMS4xMTc0NzE3NTkzNzk4OTQzRS0xNCwxLjA1NzAzMjM1NDI1NDExN0UtMTQsNy43OTI5NjQ1NjA4MTkwOEUtMTUsOS42OTQ0NTI1Mjg2NDk0MDZFLTE0LDguNTMxNzQ0MTg1ODc3MDY2RS0xMiwxLjAwODE0MDA5Nzk4NTg3NjVFLTEzLDEuNDAzNTA0MDgxMzM4NTU3NkUtMTQsMy4zMDQ2NTg2MTY3MDUxOTU0RS0xNCwyLjY3NDAwODM5MTU4NzAzOTdFLTE3LDIuNjg0Mjc1NzY4NzcwNzA1RS0xMywxLjc1NTkxODAzMzI5OTE1ODZFLTEzLDQuMDE2NDMyNzcwNDI0ODg0NUUtMTQsNi4zMjI2NjM5Mjk1NjgyMDVFLTE1LDguMTk1ODA4MzI1NDA5MTU3RS0xNSwxLjk2OTYwMjA3Mjc1Mjg2NThFLTEzLDEuOTczMDYxOTM4Nzg1NTY5NUUtMTQsMi44NzQ0NjcyNjM5MDUwOTRFLTE1LDkuNDIxMjM3NzY1MTE1Nzk1RS0xNSwxLjgyMzA4MTE0MjMwOTk5NjJFLTE0LDUuODg3ODA2NDMzMDgxNTI4RS0xNCw0LjMzNjA3MzA4MzM4NzIwMkUtMTQsNC43NDE4NDE5NTk5MTgzMTNFLTE1LDguMDIwNzIxMDA2NTAyMzg1RS0xNCw3LjI4MzE1NDUzOTUzMzAxOEUtMTQsNS4zNTY1MzQzOTE0ODkyMzY0RS0xNCw0Ljg5NTYxNjM1NDkzNDk4OTVFLTE1LDUuNzQwNDAwNjU1ODU3MDkyNUUtMTUsOC42MTI1MzI0ODM1NzY0NTZFLTE0LDIuNjkzNTYzMTA4NDI3NzAyRS0xNSw5LjQ3NTQ4NDI0MzI4NjUyRS0xNSw4LjE4NzMwNDY4Nzc0MDg4MUUtMTUsNy42NzAxNjcyNzc3MjU3NzVFLTE0LDEuMzE4MjU5MTc3MDk0NTA2NkUtMTQsOS40MDU5Nzk2ODMxMjcwODhFLTE0LDEuNzI1NzkxMjc4MTQ3OTg0MkUtMTMsNy43MjU1NzA1NTQ1MjcwNzRFLTE0LDEuNDA1NzY1ODY4MjUzNTI3RS0xNCwzLjE3MjcxMTAwNzQ0MTk5OUUtMTQsOC43ODcwNzU2NjczODA5RS0xNCwxLjA5NTkyODk4ODM5MzUxNjNFLTE0LDEuMjYyNjgzNjk5MTk1NDYwNEUtMTQsMi41ODAxMzc5MDI3MzE4NTU0RS0xNSw0Ljc3Nzg0NDEyNTg2MDUxMzVFLTE0LDIuNDY1ODQzMzg1NTgzNDYyN0UtMTMsNC4zNTYyMDkzOTM4NjQ3ODJFLTE0LDYuNTQ1MzEyMjI5NzMyNzRFLTE0LDIuNzkzNzA0NDQ5NDI0MzQwNkUtMTUsNi43MDYxMzk4OTU3MzQ1ODlFLTE0LDIuMTkxNjY1NjQzNTYyNTM1MkUtMTQsMS4zMjkwNzIxODgwNDM2OTQzRS0xNSwxLjkzNjk1NjY3NTQ3Mjk5MTZFLTE1CisyOSxUdWUgMjIgRmViIDExLDEuMTI1NDMwNzY0NDQzNzYyNUUtMTQsMS4wNzA2NDQyNzU4MTY4NTUzRS0xNCw3Ljg5MDg0NjA3MzQ4NTExRS0xNSw5Ljc2MDIxMTQxMjM2Mzk0OUUtMTQsOC41MDU1MzgyNzQ1MzE1NzJFLTEyLDEuMDEzNTMzNDc2MjU1MTE3OEUtMTMsMS40MjAyNzY1MjEwMDkwNTQ1RS0xNCwzLjI4MjkxNjcyMjExMTA2NEUtMTQsMi43MjE5NzcyNTY1NjM0MTlFLTE3LDIuNzA0MjcyNDMyNDQ4MzEwNkUtMTMsMS43NjY0MTMyNjczMzgyMjhFLTEzLDQuMDI1NDUxNTU1OTQ2MjA4NUUtMTQsNi40MDQ5NjgxNTk3NjUzMzVFLTE1LDguMjg2MDgxODQ5MzEyMDQzRS0xNSwxLjk4NDg2MzU4NjgzNzkzMTVFLTEzLDEuOTk3NDkyNjI1MTA5NTU1OEUtMTQsMi45MTQ1MTQ4MTU3MTk1MDYyRS0xNSw5LjU0MjgzMjkzNzc2NjE4MkUtMTUsMS44NDQ5MDMyNTI1MTkyNThFLTE0LDUuOTQ2Mjg4Mzc5NTI4ODI5RS0xNCw0LjM4MDgxODgzOTc5MDQ2RS0xNCw0Ljc5OTQxNzcxMDU2NTQwOEUtMTUsOC4xMDM4MjgzMDc0ODc4MTdFLTE0LDcuMzQyMDU2MzAxMjE4ODk2RS0xNCw1LjQwOTE3ODQxMzQwODE1MkUtMTQsNC45NjA4ODg3OTA2NjYwNDY2RS0xNSw1LjgwMzU2NDI0ODM1ODEzNEUtMTUsOC42OTM4NDQzODAxNjQ4NUUtMTQsMi43MjU2NjEwMTk2NjA2NzlFLTE1LDkuNTgyODc4Mjc0ODQ1NDM5RS0xNSw4LjI3NjU1ODI2Nzc0MDkwOUUtMTUsNy43NDY3NzgxMzczMTIzNDRFLTE0LDEuMzMyMzE4NjY4MDA2NjU4MkUtMTQsOS4zODI0MjEyNTUxNzg3ODRFLTE0LDEuNzQzMDQxNjM0NjU0NDkxRS0xMyw3LjgwOTI1NzkxMDA5OTE2NUUtMTQsMS40MjI1OTYzNzQ2MDI0NDc4RS0xNCwzLjIwNDIyNTAxNTU2NjUyNEUtMTQsOC44ODEwOTUwNTc2OTI2NzdFLTE0LDEuMTA2MzY3Mzc1NTMyOTM3M0UtMTQsMS4yNzgzODM2MTQzODM3Nzk4RS0xNCwyLjYxMTg1NDI1NzUyNTU5MkUtMTUsNC44MjY3ODQ3Nzg3MjQ0MDVFLTE0LDIuNDg4MTkwMTUwOTQ2Mjc1NkUtMTMsNC4zODQ5MTYwNTgwNTU5NTA1RS0xNCw2LjYxMDM4NjMxODU2MjE2M0UtMTQsMi44MjY0OTcyMjU3MzA1MDU1RS0xNSw2Ljc2NzkxODc5NjA0OTU3OEUtMTQsMi4yMTc4OTI3OTgwMTg1MDlFLTE0LDEuMzQ4MTY3NzQxNDk4OTMyM0UtMTUsMS45NjAyODUxNzcyNzA4OTk2RS0xNQorMzAsV2VkIDIzIEZlYiAxMSwxLjEzMzY1MjIyNjU4NjU4ODJFLTE0LDEuMDg0NTU0MzMxNTg4NTAwN0UtMTQsNy45OTA4OTcyNzIzODg5MTdFLTE1LDkuODI4MjM4NzYxMjc2NTA1RS0xNCw4LjQ4MDg4NTQxMDkwMDk2RS0xMiwxLjAxOTE2MTg1NjUxNzE5MDFFLTEzLDEuNDM3NDMwMDAzMTc1MjMyNUUtMTQsMy4yNjI1MzcwNjIzNTM5NzZFLTE0LDIuNzcwODIxMzM5NzU0OTEzN0UtMTcsMi43MjQ5MDI0Mjc3NjI1MTlFLTEzLDEuNzc3MzE3NTE1NzIwOTQ2RS0xMyw0LjAzNTQ2Mjg4NzU1MDM4RS0xNCw2LjQ4OTA2NTc3OTU1MTYxRS0xNSw4LjM3ODQ5Nzk2OTA2MTExNUUtMTUsMi4wMDA1OTIxMzcxNzQyMzA3RS0xMywyLjAyMjQ2ODYyNTU5NzcyNDhFLTE0LDIuOTU1NDA2ODU2NjMyNTA3RS0xNSw5LjY2NzA4ODQ3ODQ5MDI3OEUtMTUsMS44NjcyMjA3MTYwMzQxMDVFLTE0LDYuMDA2MjQ5NTcwMzkyODFFLTE0LDQuNDI2NjY4ODUwNDcyNTgxRS0xNCw0Ljg1ODI5MTA3MTUwMDQ1OEUtMTUsOC4xODg5ODEzMzg4MTQzNTJFLTE0LDcuNDAyNjk2NDU5NzEwMDk4RS0xNCw1LjQ2MzE2MzQ2NzM5MzU4OUUtMTQsNS4wMjc1NjczMjM2NzI1OTVFLTE1LDUuODY4MjI3ODY5Nzg1NjE3RS0xNSw4Ljc3NzI4NTc5OTY2ODcyOEUtMTQsMi43NTg0ODkxOTU3NTgyMjcyRS0xNSw5LjY5Mjc4MDk4NTU0MDY0NUUtMTUsOC4zNjc5NDI4MjE5ODQxNjVFLTE1LDcuODI1MzE5Njg5MDc1NTFFLTE0LDEuMzQ2NzE4MTg4ODk0ODE2OEUtMTQsOS4zNjE4MDE0OTAwNDgyRS0xNCwxLjc2MDcyNjUwOTA0NzI2OUUtMTMsNy44OTQ5NTA3MjMxMjI4MTVFLTE0LDEuNDM5ODA4ODg1MjExNzA5N0UtMTQsMy4yMzY1MzYxMzQyNDgwMDA2RS0xNCw4Ljk3NzM4MzkzNDg2NjE2OEUtMTQsMS4xMTcwNzc0NDgxMDI4Mjg0RS0xNCwxLjI5NDQzMzI1NDMyMjU5ODRFLTE0LDIuNjQ0MjgxMDc0ODAxMzgzMkUtMTUsNC44NzY5Mzg4NjkyMjM2NjY1RS0xNCwyLjUxMTEzOTgxMjQ1MjcyMkUtMTMsNC40MTQ2NDAzODM4NDA0MDc1RS0xNCw2LjY3NzEwNTM2NjU0NjQ4RS0xNCwyLjg2MDA0MTg4MjU3NDI0NzVFLTE1LDYuODMxMzQ0NDQyODk1NDQzRS0xNCwyLjI0NDcxNTM3NzU4ODIwODNFLTE0LDEuMzY3NjU5Nzc4ODY4ODM4MkUtMTUsMS45ODQxNDE1ODM1NDEwODRFLTE1CiszMSxUaHUgMjQgRmViIDExLDEuMTQyMDEzODIxMzExNTIwMUUtMTQsMS4wOTg2NDIzMjI5MzE1ODE3RS0xNCw4LjA5MjIzNjIyNzg3NzcwN0UtMTUsOS44OTc0NzM3MzUyODAyM0UtMTQsOC40NTcxOTI4NTY2NDIzMDVFLTEyLDEuMDI0OTE0OTQ0NjI4MTUxNUUtMTMsMS40NTQ4MDY5NDk3NjQ5MjJFLTE0LDMuMjQzMTMzMzM0ODM5OTYzRS0xNCwyLjgyMDIwNDQwMzU4NTM4NEUtMTcsMi43NDU4NzE3ODY1MzIwOTkzRS0xMywxLjc4ODQzODcwMTUwNzQyNUUtMTMsNC4wNDYwMjQ5MjQwMDI5MDY2RS0xNCw2LjU3NDIzNjE5MzY0OTQ4N0UtMTUsOC40NzIxNDUwMjE3MjA5NUUtMTUsMi4wMTY1NzE5MTA2NTg3MTgzRS0xMywyLjA0Nzc2NzIwMzkwMTg1MDZFLTE0LDIuOTk2ODEwMjM0NDMyMDQ1NkUtMTUsOS43OTI5MzI1NzM0NDk2NjZFLTE1LDEuODg5ODI4Nzk5OTQxMDE3RS0xNCw2LjA2NzAzOTg4MzUzMjAwM0UtMTQsNC40NzMxNDMyMzY2MDE3MjZFLTE0LDQuOTE3OTI4NDE1OTQ1ODcxRS0xNSw4LjI3NTI5MjE5NjI0NTM1M0UtMTQsNy40NjQyNzY0MDg3MzE5NDJFLTE0LDUuNTE3ODk4NDI1NDM1OTA4NEUtMTQsNS4wOTUwOTA5NzI2ODEyMTFFLTE1LDUuOTMzNzUzMDQ0ODAxNTg2NkUtMTUsOC44NjE5MDgwNzY4OTg4ODdFLTE0LDIuNzkxNzQ1MzM2ODc4NDQ1RS0xNSw5LjgwNDEzNTM4ODkyNTE0OUUtMTUsOC40NjA1NDg0NzIzNjQzNzRFLTE1LDcuOTA0OTQ0NzQ1NTIzNzA3RS0xNCwxLjM2MTMxMTUwMTY1Mzg1N0UtMTQsOS4zNDMwNjA4NTQ0NjY5OUUtMTQsMS43Nzg2NTUyNzU3NjY2NjA0RS0xMyw3Ljk4MTc5MDg5NTAzOTc1NUUtMTQsMS40NTcyNDU1MjcwODA5NTFFLTE0LDMuMjY5Mjk0MDM3NjE0NTE4NUUtMTQsOS4wNzQ5NjcyNzc0NTYxNjNFLTE0LDEuMTI3OTM4NDQ0MjM3MTUxRS0xNCwxLjMxMDY4OTk3NTUxMzAzNTJFLTE0LDIuNjc3MTI3NDM1MDc2Njg3NEUtMTUsNC45Mjc3Nzc4ODAxNjA3MzhFLTE0LDIuNTM0NDIxMTgzNDUzNTM4RS0xMyw0LjQ0NDkwNTc1MDUzNDQxMzRFLTE0LDYuNzQ0NzQ2NjEzNjc0ODIyRS0xNCwyLjg5NDAyNTUwODA3MzM2MzNFLTE1LDYuODk1Njc4ODc5NDgxOTQ2RS0xNCwyLjI3MTg4NzI2NjI0MTQ1N0UtMTQsMS4zODczOTI4NzAyMTY0NzE2RS0xNSwyLjAwODMwODE4MDY5NTg0MUUtMTUKKzMyLEZyaSAyNSBGZWIgMTEsMS4xNTA0NDE4MTg3MDQ1MzEyRS0xNCwxLjExMjgzNTI0ODQyOTAzMUUtMTQsOC4xOTQzMjc1MDc1ODU1MzZFLTE1LDkuOTY3Mjc3MjIxNjg5MTk0RS0xNCw4LjQzNDEwNTEwMDAxMDg3MUUtMTIsMS4wMzA3MjY0MTgzMDY2OTA1RS0xMywxLjQ3MjMxMTc2MjY4MDYxMTJFLTE0LDMuMjI0NDcyMDY3NDc0ODg4RS0xNCwyLjg2OTkyMTA4OTE3ODE2MDZFLTE3LDIuNzY3MDAzMjQxNzAyMjMwNUUtMTMsMS43OTk2NjEyMzE0OTA4MDQ0RS0xMyw0LjA1Njg3MjgwODIxNzg4MTRFLTE0LDYuNjYwMDQxNjg1MDc1MjQ3RS0xNSw4LjU2NjQ3MDU3NDU5NTM0RS0xNSwyLjAzMjY3MjcxNDUwOTAzNzVFLTEzLDIuMDczMjUzMTYyMDQzMjExOEUtMTQsMy4wMzg1MjIzNjk4NzkwODEzRS0xNSw5LjkxOTcxNDI0NTU0MjY4NUUtMTUsMS45MTI2MDMyOTU3MDM2MjlFLTE0LDYuMTI4MjY1OTMxNjgwNjk4RS0xNCw0LjUxOTk1MTQ3NDE1NDQ4MUUtMTQsNC45NzgwMDU5MzI2NjE5NzdFLTE1LDguMzYyMjIzMzAyNTEwNDQ4RS0xNCw3LjUyNjMxNDE0NzE2OTg1NUUtMTQsNS41NzMwMjU2NDgxNzk5MDdFLTE0LDUuMTYzMTE4ODUzMTY0ODYxRS0xNSw1Ljk5OTc1Mjg4NzQ4NTAxN0UtMTUsOC45NDcxMzc1NjE1MTE5NTJFLTE0LDIuODI1MjQ2MDUzOTUxMTMxNkUtMTUsOS45MTYzMDA3MzE1MjA3MjlFLTE1LDguNTUzODIzOTQ4MDQ0MDI3RS0xNSw3Ljk4NTE0MDYzNzI4Njk2N0UtMTQsMS4zNzYwMTAwMzE3MjM0MDYzRS0xNCw5LjMyNTU2NDA0NjI3NDgyN0UtMTQsMS43OTY3MTI1Nzc5NzY2NzIyRS0xMyw4LjA2OTI1ODU3MzIzNzU3NEUtMTQsMS40NzQ4MTA1MjA2MTQxMzc0RS0xNCwzLjMwMjI4Njc0NDMzNDE5RS0xNCw5LjE3MzI1NDUwMDcyNjM5OEUtMTQsMS4xMzg4NzczMzE4MTI0NTU4RS0xNCwxLjMyNzA2NzE4OTk1MTM4MDhFLTE0LDIuNzEwMjE2NzcyOTg4MzIyRS0xNSw0Ljk3ODk4MTg3Mzc1MDgyMUUtMTQsMi41NTc4NzAzNjUyNTkwNjdFLTEzLDQuNDc1NDI1MDg5MzkxMzQxNEUtMTQsNi44MTI4NzI3MTQxNTUxMDZFLTE0LDIuOTI4MjU4MzE2OTQyMjg1RS0xNSw2Ljk2MDQ3NjAwOTkyNDY4NUUtMTQsMi4yOTkyNTkxNDk0NjU4MzE2RS0xNCwxLjQwNzI3MjQ1NzgwMjcyMzhFLTE1LDIuMDMyNjUyODczMTQzMzI3RS0xNQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTSVJTdGF0ZXNPbmx5X0ZEX1JlZmVyZW5jZS9UZXN0U0lSL3J1bnBhcmFtZXRlcnMuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTSVJTdGF0ZXNPbmx5X0ZEX1JlZmVyZW5jZS9UZXN0U0lSL3J1bnBhcmFtZXRlcnMuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVlYTJmNWQKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNJUlN0YXRlc09ubHlfRkRfUmVmZXJlbmNlL1Rlc3RTSVIvcnVucGFyYW1ldGVycy5jc3YKQEAgLTAsMCArMSwyIEBACitkaXNlYXNlTmFtZSxwb3B1bGF0aW9uSWRlbnRpZmllcix0aW1lUGVyaW9kLGZyZXF1ZW5jeURlcGVuZGVudCxyZWZlcmVuY2VQb3B1bGF0aW9uRGVuc2l0eSxyb2FkTmV0d29ya0luZmVjdGlvdXNQcm9wb3J0aW9uLGNoYXJhY3RlcmlzdGljTWl4aW5nRGlzdGFuY2UsdHJhbnNtaXNzaW9uUmF0ZSxub25MaW5lYXJpdHlDb2VmZmljaWVudCxyZWNvdmVyeVJhdGUsaW5mZWN0aW91c01vcnRhbGl0eVJhdGUsaW1tdW5pdHlMb3NzUmF0ZQorVGVzdFNJUixodW1hbiw4NjQwMDAwMCx0cnVlLDEwMC4wLDAuMDEsMi4yNSwyMC4wLDEuMCwwLjQsMC4wLDAuMApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0lSU3RhdGVzT25seV9GRF9SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9odW1hbi9CaXJ0aHNfMC5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNJUlN0YXRlc09ubHlfRkRfUmVmZXJlbmNlL2F1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwvaHVtYW4vQmlydGhzXzAuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjExMmU4YjgKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNJUlN0YXRlc09ubHlfRkRfUmVmZXJlbmNlL2F1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwvaHVtYW4vQmlydGhzXzAuY3N2CkBAIC0wLDAgKzEsMzMgQEAKK2l0ZXJhdGlvbix0aW1lLHN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL25vZGUvdHJhbnNwb3J0L3BpcGUvVVNBCisxLFR1ZSAyNSBKYW4gMTEsMC4wCisyLFdlZCAyNiBKYW4gMTEsMC4wCiszLFRodSAyNyBKYW4gMTEsMC4wCis0LEZyaSAyOCBKYW4gMTEsMC4wCis1LFNhdCAyOSBKYW4gMTEsMC4wCis2LFN1biAzMCBKYW4gMTEsMC4wCis3LE1vbiAzMSBKYW4gMTEsMC4wCis4LFR1ZSAxIEZlYiAxMSwwLjAKKzksV2VkIDIgRmViIDExLDAuMAorMTAsVGh1IDMgRmViIDExLDAuMAorMTEsRnJpIDQgRmViIDExLDAuMAorMTIsU2F0IDUgRmViIDExLDAuMAorMTMsU3VuIDYgRmViIDExLDAuMAorMTQsTW9uIDcgRmViIDExLDAuMAorMTUsVHVlIDggRmViIDExLDAuMAorMTYsV2VkIDkgRmViIDExLDAuMAorMTcsVGh1IDEwIEZlYiAxMSwwLjAKKzE4LEZyaSAxMSBGZWIgMTEsMC4wCisxOSxTYXQgMTIgRmViIDExLDAuMAorMjAsU3VuIDEzIEZlYiAxMSwwLjAKKzIxLE1vbiAxNCBGZWIgMTEsMC4wCisyMixUdWUgMTUgRmViIDExLDAuMAorMjMsV2VkIDE2IEZlYiAxMSwwLjAKKzI0LFRodSAxNyBGZWIgMTEsMC4wCisyNSxGcmkgMTggRmViIDExLDAuMAorMjYsU2F0IDE5IEZlYiAxMSwwLjAKKzI3LFN1biAyMCBGZWIgMTEsMC4wCisyOCxNb24gMjEgRmViIDExLDAuMAorMjksVHVlIDIyIEZlYiAxMSwwLjAKKzMwLFdlZCAyMyBGZWIgMTEsMC4wCiszMSxUaHUgMjQgRmViIDExLDAuMAorMzIsRnJpIDI1IEZlYiAxMSwwLjAKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0lSU3RhdGVzT25seV9GRF9SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9odW1hbi9CaXJ0aHNfMS5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNJUlN0YXRlc09ubHlfRkRfUmVmZXJlbmNlL2F1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwvaHVtYW4vQmlydGhzXzEuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ3YTg0M2YKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNJUlN0YXRlc09ubHlfRkRfUmVmZXJlbmNlL2F1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwvaHVtYW4vQmlydGhzXzEuY3N2CkBAIC0wLDAgKzEsMzMgQEAKK2l0ZXJhdGlvbix0aW1lLFVTLUFLLFVTLUFMLFVTLUFSLFVTLUFaLFVTLUNBLFVTLUNPLFVTLUNULFVTLURDLFVTLURFLFVTLUZMLFVTLUdBLFVTLUhJLFVTLUlBLFVTLUlELFVTLUlMLFVTLUlOLFVTLUtTLFVTLUtZLFVTLUxBLFVTLU1BLFVTLU1ELFVTLU1FLFVTLU1JLFVTLU1OLFVTLU1PLFVTLU1TLFVTLU1ULFVTLU5DLFVTLU5ELFVTLU5FLFVTLU5ILFVTLU5KLFVTLU5NLFVTLU5WLFVTLU5ZLFVTLU9ILFVTLU9LLFVTLU9SLFVTLVBBLFVTLVJJLFVTLVNDLFVTLVNELFVTLVROLFVTLVRYLFVTLVVULFVTLVZBLFVTLVZULFVTLVdBLFVTLVdJLFVTLVdWLFVTLVdZCisxLFR1ZSAyNSBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzIsV2VkIDI2IEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMyxUaHUgMjcgSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCis0LEZyaSAyOCBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzUsU2F0IDI5IEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorNixTdW4gMzAgSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCis3LE1vbiAzMSBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzgsVHVlIDEgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCis5LFdlZCAyIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTAsVGh1IDMgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxMSxGcmkgNCBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzEyLFNhdCA1IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTMsU3VuIDYgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxNCxNb24gNyBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzE1LFR1ZSA4IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTYsV2VkIDkgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxNyxUaHUgMTAgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxOCxGcmkgMTEgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxOSxTYXQgMTIgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyMCxTdW4gMTMgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyMSxNb24gMTQgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyMixUdWUgMTUgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyMyxXZWQgMTYgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyNCxUaHUgMTcgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyNSxGcmkgMTggRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyNixTYXQgMTkgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyNyxTdW4gMjAgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyOCxNb24gMjEgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyOSxUdWUgMjIgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCiszMCxXZWQgMjMgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCiszMSxUaHUgMjQgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCiszMixGcmkgMjUgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNJUlN0YXRlc09ubHlfRkRfUmVmZXJlbmNlL2F1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwvaHVtYW4vQ291bnRfMC5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNJUlN0YXRlc09ubHlfRkRfUmVmZXJlbmNlL2F1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwvaHVtYW4vQ291bnRfMC5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDI1MDAyYgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0lSU3RhdGVzT25seV9GRF9SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9odW1hbi9Db3VudF8wLmNzdgpAQCAtMCwwICsxLDMzIEBACitpdGVyYXRpb24sdGltZSxzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9ub2RlL3RyYW5zcG9ydC9waXBlL1VTQQorMSxUdWUgMjUgSmFuIDExLDk0MzIxMS4wCisyLFdlZCAyNiBKYW4gMTEsOTQzMjExLjAKKzMsVGh1IDI3IEphbiAxMSw5NDMyMTEuMAorNCxGcmkgMjggSmFuIDExLDk0MzIxMS4wCis1LFNhdCAyOSBKYW4gMTEsOTQzMjExLjAKKzYsU3VuIDMwIEphbiAxMSw5NDMyMTEuMAorNyxNb24gMzEgSmFuIDExLDk0MzIxMS4wCis4LFR1ZSAxIEZlYiAxMSw5NDMyMTEuMAorOSxXZWQgMiBGZWIgMTEsOTQzMjExLjAKKzEwLFRodSAzIEZlYiAxMSw5NDMyMTEuMAorMTEsRnJpIDQgRmViIDExLDk0MzIxMS4wCisxMixTYXQgNSBGZWIgMTEsOTQzMjExLjAKKzEzLFN1biA2IEZlYiAxMSw5NDMyMTEuMAorMTQsTW9uIDcgRmViIDExLDk0MzIxMS4wCisxNSxUdWUgOCBGZWIgMTEsOTQzMjExLjAKKzE2LFdlZCA5IEZlYiAxMSw5NDMyMTEuMAorMTcsVGh1IDEwIEZlYiAxMSw5NDMyMTEuMAorMTgsRnJpIDExIEZlYiAxMSw5NDMyMTEuMAorMTksU2F0IDEyIEZlYiAxMSw5NDMyMTEuMAorMjAsU3VuIDEzIEZlYiAxMSw5NDMyMTEuMAorMjEsTW9uIDE0IEZlYiAxMSw5NDMyMTEuMAorMjIsVHVlIDE1IEZlYiAxMSw5NDMyMTEuMAorMjMsV2VkIDE2IEZlYiAxMSw5NDMyMTEuMAorMjQsVGh1IDE3IEZlYiAxMSw5NDMyMTEuMAorMjUsRnJpIDE4IEZlYiAxMSw5NDMyMTEuMAorMjYsU2F0IDE5IEZlYiAxMSw5NDMyMTEuMAorMjcsU3VuIDIwIEZlYiAxMSw5NDMyMTEuMAorMjgsTW9uIDIxIEZlYiAxMSw5NDMyMTEuMAorMjksVHVlIDIyIEZlYiAxMSw5NDMyMTEuMAorMzAsV2VkIDIzIEZlYiAxMSw5NDMyMTEuMAorMzEsVGh1IDI0IEZlYiAxMSw5NDMyMTEuMAorMzIsRnJpIDI1IEZlYiAxMSw5NDMyMTEuMApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTSVJTdGF0ZXNPbmx5X0ZEX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL2h1bWFuL0NvdW50XzEuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTSVJTdGF0ZXNPbmx5X0ZEX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL2h1bWFuL0NvdW50XzEuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ1OTBlNmEKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNJUlN0YXRlc09ubHlfRkRfUmVmZXJlbmNlL2F1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwvaHVtYW4vQ291bnRfMS5jc3YKQEAgLTAsMCArMSwzMyBAQAoraXRlcmF0aW9uLHRpbWUsVVMtQUssVVMtQUwsVVMtQVIsVVMtQVosVVMtQ0EsVVMtQ08sVVMtQ1QsVVMtREMsVVMtREUsVVMtRkwsVVMtR0EsVVMtSEksVVMtSUEsVVMtSUQsVVMtSUwsVVMtSU4sVVMtS1MsVVMtS1ksVVMtTEEsVVMtTUEsVVMtTUQsVVMtTUUsVVMtTUksVVMtTU4sVVMtTU8sVVMtTVMsVVMtTVQsVVMtTkMsVVMtTkQsVVMtTkUsVVMtTkgsVVMtTkosVVMtTk0sVVMtTlYsVVMtTlksVVMtT0gsVVMtT0ssVVMtT1IsVVMtUEEsVVMtUkksVVMtU0MsVVMtU0QsVVMtVE4sVVMtVFgsVVMtVVQsVVMtVkEsVVMtVlQsVVMtV0EsVVMtV0ksVVMtV1YsVVMtV1kKKzEsVHVlIDI1IEphbiAxMSw2MjY5MzIuMCw0NDQ3MTAwLjAsMjY3MzQwMC4wLDUxMzA2MzIuMCwzLjM4NzE2NDhFNyw0MzAxMjYxLjAsMzQwNTU2NS4wLDU3MjA1OS4wLDc4MzYwMC4wLDEuNTk4MjM3OEU3LDgxODY0NTMuMCwxMjExNTM3LjAsMjkyNjMyNC4wLDEyOTM5NTMuMCwxLjI0MTkyOTNFNyw2MDgwNDg1LjAsMjY4ODQxOC4wLDQwNDE3NjkuMCw0NDY4OTc2LjAsNjM0OTA5Ny4wLDUyOTY0ODYuMCwxMjc0OTIzLjAsOTkzODQ0NC4wLDQ5MTk0NzkuMCw1NTk1MjExLjAsMjg0NDY1OC4wLDkwMjE5NS4wLDgwNDkzMTMuMCw2NDIyMDAuMCwxNzExMjYzLjAsMTIzNTc4Ni4wLDg0MTQzNTAuMCwxODE5MDQ2LjAsMTk5ODI1Ny4wLDEuODk3NjQ1N0U3LDEuMTM1MzE0RTcsMzQ1MDY1NC4wLDM0MjEzOTkuMCwxLjIyODEwNTRFNywxMDQ4MzE5LjAsNDAxMjAxMi4wLDc1NDg0NC4wLDU2ODkyODMuMCwyLjA4NTE4MkU3LDIyMzMxNjkuMCw3MDc4NTE2LjAsNjA4ODI3LjAsNTg5NDEyMS4wLDUzNjM2NzUuMCwxODA4MzQ0LjAsNDkzNzgyLjAKKzIsV2VkIDI2IEphbiAxMSw2MjY5MzIuMCw0NDQ3MTAwLjAsMjY3MzQwMC4wLDUxMzA2MzIuMCwzLjM4NzE2NDhFNyw0MzAxMjYxLjAsMzQwNTU2NS4wLDU3MjA1OS4wLDc4MzYwMC4wLDEuNTk4MjM3OEU3LDgxODY0NTMuMCwxMjExNTM3LjAsMjkyNjMyNC4wLDEyOTM5NTMuMCwxLjI0MTkyOTNFNyw2MDgwNDg1LjAsMjY4ODQxOC4wLDQwNDE3NjkuMCw0NDY4OTc2LjAsNjM0OTA5Ny4wLDUyOTY0ODYuMCwxMjc0OTIzLjAsOTkzODQ0NC4wLDQ5MTk0NzkuMCw1NTk1MjExLjAsMjg0NDY1OC4wLDkwMjE5NS4wLDgwNDkzMTMuMCw2NDIyMDAuMCwxNzExMjYzLjAsMTIzNTc4Ni4wLDg0MTQzNTAuMCwxODE5MDQ2LjAsMTk5ODI1Ny4wLDEuODk3NjQ1N0U3LDEuMTM1MzE0RTcsMzQ1MDY1NC4wLDM0MjEzOTkuMCwxLjIyODEwNTRFNywxMDQ4MzE5LjAsNDAxMjAxMi4wLDc1NDg0NC4wLDU2ODkyODMuMCwyLjA4NTE4MkU3LDIyMzMxNjkuMCw3MDc4NTE2LjAsNjA4ODI3LjAsNTg5NDEyMS4wLDUzNjM2NzUuMCwxODA4MzQ0LjAsNDkzNzgyLjAKKzMsVGh1IDI3IEphbiAxMSw2MjY5MzIuMCw0NDQ3MTAwLjAsMjY3MzQwMC4wLDUxMzA2MzIuMCwzLjM4NzE2NDhFNyw0MzAxMjYxLjAsMzQwNTU2NS4wLDU3MjA1OS4wLDc4MzYwMC4wLDEuNTk4MjM3OEU3LDgxODY0NTMuMCwxMjExNTM3LjAsMjkyNjMyNC4wLDEyOTM5NTMuMCwxLjI0MTkyOTNFNyw2MDgwNDg1LjAsMjY4ODQxOC4wLDQwNDE3NjkuMCw0NDY4OTc2LjAsNjM0OTA5Ny4wLDUyOTY0ODYuMCwxMjc0OTIzLjAsOTkzODQ0NC4wLDQ5MTk0NzkuMCw1NTk1MjExLjAsMjg0NDY1OC4wLDkwMjE5NS4wLDgwNDkzMTMuMCw2NDIyMDAuMCwxNzExMjYzLjAsMTIzNTc4Ni4wLDg0MTQzNTAuMCwxODE5MDQ2LjAsMTk5ODI1Ny4wLDEuODk3NjQ1N0U3LDEuMTM1MzE0RTcsMzQ1MDY1NC4wLDM0MjEzOTkuMCwxLjIyODEwNTRFNywxMDQ4MzE5LjAsNDAxMjAxMi4wLDc1NDg0NC4wLDU2ODkyODMuMCwyLjA4NTE4MkU3LDIyMzMxNjkuMCw3MDc4NTE2LjAsNjA4ODI3LjAsNTg5NDEyMS4wLDUzNjM2NzUuMCwxODA4MzQ0LjAsNDkzNzgyLjAKKzQsRnJpIDI4IEphbiAxMSw2MjY5MzIuMCw0NDQ3MTAwLjAsMjY3MzQwMC4wLDUxMzA2MzIuMCwzLjM4NzE2NDhFNyw0MzAxMjYxLjAsMzQwNTU2NS4wLDU3MjA1OS4wLDc4MzYwMC4wLDEuNTk4MjM3OEU3LDgxODY0NTMuMCwxMjExNTM3LjAsMjkyNjMyNC4wLDEyOTM5NTMuMCwxLjI0MTkyOTNFNyw2MDgwNDg1LjAsMjY4ODQxOC4wLDQwNDE3NjkuMCw0NDY4OTc2LjAsNjM0OTA5Ny4wLDUyOTY0ODYuMCwxMjc0OTIzLjAsOTkzODQ0NC4wLDQ5MTk0NzkuMCw1NTk1MjExLjAsMjg0NDY1OC4wLDkwMjE5NS4wLDgwNDkzMTMuMCw2NDIyMDAuMCwxNzExMjYzLjAsMTIzNTc4Ni4wLDg0MTQzNTAuMCwxODE5MDQ2LjAsMTk5ODI1Ny4wLDEuODk3NjQ1N0U3LDEuMTM1MzE0RTcsMzQ1MDY1NC4wLDM0MjEzOTkuMCwxLjIyODEwNTRFNywxMDQ4MzE5LjAsNDAxMjAxMi4wLDc1NDg0NC4wLDU2ODkyODMuMCwyLjA4NTE4MkU3LDIyMzMxNjkuMCw3MDc4NTE2LjAsNjA4ODI3LjAsNTg5NDEyMS4wLDUzNjM2NzUuMCwxODA4MzQ0LjAsNDkzNzgyLjAKKzUsU2F0IDI5IEphbiAxMSw2MjY5MzIuMCw0NDQ3MTAwLjAsMjY3MzQwMC4wLDUxMzA2MzIuMCwzLjM4NzE2NDhFNyw0MzAxMjYxLjAsMzQwNTU2NS4wLDU3MjA1OS4wLDc4MzYwMC4wLDEuNTk4MjM3OEU3LDgxODY0NTMuMCwxMjExNTM3LjAsMjkyNjMyNC4wLDEyOTM5NTMuMCwxLjI0MTkyOTNFNyw2MDgwNDg1LjAsMjY4ODQxOC4wLDQwNDE3NjkuMCw0NDY4OTc2LjAsNjM0OTA5Ny4wLDUyOTY0ODYuMCwxMjc0OTIzLjAsOTkzODQ0NC4wLDQ5MTk0NzkuMCw1NTk1MjExLjAsMjg0NDY1OC4wLDkwMjE5NS4wLDgwNDkzMTMuMCw2NDIyMDAuMCwxNzExMjYzLjAsMTIzNTc4Ni4wLDg0MTQzNTAuMCwxODE5MDQ2LjAsMTk5ODI1Ny4wLDEuODk3NjQ1N0U3LDEuMTM1MzE0RTcsMzQ1MDY1NC4wLDM0MjEzOTkuMCwxLjIyODEwNTRFNywxMDQ4MzE5LjAsNDAxMjAxMi4wLDc1NDg0NC4wLDU2ODkyODMuMCwyLjA4NTE4MkU3LDIyMzMxNjkuMCw3MDc4NTE2LjAsNjA4ODI3LjAsNTg5NDEyMS4wLDUzNjM2NzUuMCwxODA4MzQ0LjAsNDkzNzgyLjAKKzYsU3VuIDMwIEphbiAxMSw2MjY5MzIuMCw0NDQ3MTAwLjAsMjY3MzQwMC4wLDUxMzA2MzIuMCwzLjM4NzE2NDhFNyw0MzAxMjYxLjAsMzQwNTU2NS4wLDU3MjA1OS4wLDc4MzYwMC4wLDEuNTk4MjM3OEU3LDgxODY0NTMuMCwxMjExNTM3LjAsMjkyNjMyNC4wLDEyOTM5NTMuMCwxLjI0MTkyOTNFNyw2MDgwNDg1LjAsMjY4ODQxOC4wLDQwNDE3NjkuMCw0NDY4OTc2LjAsNjM0OTA5Ny4wLDUyOTY0ODYuMCwxMjc0OTIzLjAsOTkzODQ0NC4wLDQ5MTk0NzkuMCw1NTk1MjExLjAsMjg0NDY1OC4wLDkwMjE5NS4wLDgwNDkzMTMuMCw2NDIyMDAuMCwxNzExMjYzLjAsMTIzNTc4Ni4wLDg0MTQzNTAuMCwxODE5MDQ2LjAsMTk5ODI1Ny4wLDEuODk3NjQ1N0U3LDEuMTM1MzE0RTcsMzQ1MDY1NC4wLDM0MjEzOTkuMCwxLjIyODEwNTRFNywxMDQ4MzE5LjAsNDAxMjAxMi4wLDc1NDg0NC4wLDU2ODkyODMuMCwyLjA4NTE4MkU3LDIyMzMxNjkuMCw3MDc4NTE2LjAsNjA4ODI3LjAsNTg5NDEyMS4wLDUzNjM2NzUuMCwxODA4MzQ0LjAsNDkzNzgyLjAKKzcsTW9uIDMxIEphbiAxMSw2MjY5MzIuMCw0NDQ3MTAwLjAsMjY3MzQwMC4wLDUxMzA2MzIuMCwzLjM4NzE2NDhFNyw0MzAxMjYxLjAsMzQwNTU2NS4wLDU3MjA1OS4wLDc4MzYwMC4wLDEuNTk4MjM3OEU3LDgxODY0NTMuMCwxMjExNTM3LjAsMjkyNjMyNC4wLDEyOTM5NTMuMCwxLjI0MTkyOTNFNyw2MDgwNDg1LjAsMjY4ODQxOC4wLDQwNDE3NjkuMCw0NDY4OTc2LjAsNjM0OTA5Ny4wLDUyOTY0ODYuMCwxMjc0OTIzLjAsOTkzODQ0NC4wLDQ5MTk0NzkuMCw1NTk1MjExLjAsMjg0NDY1OC4wLDkwMjE5NS4wLDgwNDkzMTMuMCw2NDIyMDAuMCwxNzExMjYzLjAsMTIzNTc4Ni4wLDg0MTQzNTAuMCwxODE5MDQ2LjAsMTk5ODI1Ny4wLDEuODk3NjQ1N0U3LDEuMTM1MzE0RTcsMzQ1MDY1NC4wLDM0MjEzOTkuMCwxLjIyODEwNTRFNywxMDQ4MzE5LjAsNDAxMjAxMi4wLDc1NDg0NC4wLDU2ODkyODMuMCwyLjA4NTE4MkU3LDIyMzMxNjkuMCw3MDc4NTE2LjAsNjA4ODI3LjAsNTg5NDEyMS4wLDUzNjM2NzUuMCwxODA4MzQ0LjAsNDkzNzgyLjAKKzgsVHVlIDEgRmViIDExLDYyNjkzMi4wLDQ0NDcxMDAuMCwyNjczNDAwLjAsNTEzMDYzMi4wLDMuMzg3MTY0OEU3LDQzMDEyNjEuMCwzNDA1NTY1LjAsNTcyMDU5LjAsNzgzNjAwLjAsMS41OTgyMzc4RTcsODE4NjQ1My4wLDEyMTE1MzcuMCwyOTI2MzI0LjAsMTI5Mzk1My4wLDEuMjQxOTI5M0U3LDYwODA0ODUuMCwyNjg4NDE4LjAsNDA0MTc2OS4wLDQ0Njg5NzYuMCw2MzQ5MDk3LjAsNTI5NjQ4Ni4wLDEyNzQ5MjMuMCw5OTM4NDQ0LjAsNDkxOTQ3OS4wLDU1OTUyMTEuMCwyODQ0NjU4LjAsOTAyMTk1LjAsODA0OTMxMy4wLDY0MjIwMC4wLDE3MTEyNjMuMCwxMjM1Nzg2LjAsODQxNDM1MC4wLDE4MTkwNDYuMCwxOTk4MjU3LjAsMS44OTc2NDU3RTcsMS4xMzUzMTRFNywzNDUwNjU0LjAsMzQyMTM5OS4wLDEuMjI4MTA1NEU3LDEwNDgzMTkuMCw0MDEyMDEyLjAsNzU0ODQ0LjAsNTY4OTI4My4wLDIuMDg1MTgyRTcsMjIzMzE2OS4wLDcwNzg1MTYuMCw2MDg4MjcuMCw1ODk0MTIxLjAsNTM2MzY3NS4wLDE4MDgzNDQuMCw0OTM3ODIuMAorOSxXZWQgMiBGZWIgMTEsNjI2OTMyLjAsNDQ0NzEwMC4wLDI2NzM0MDAuMCw1MTMwNjMyLjAsMy4zODcxNjQ4RTcsNDMwMTI2MS4wLDM0MDU1NjUuMCw1NzIwNTkuMCw3ODM2MDAuMCwxLjU5ODIzNzhFNyw4MTg2NDUzLjAsMTIxMTUzNy4wLDI5MjYzMjQuMCwxMjkzOTUzLjAsMS4yNDE5MjkzRTcsNjA4MDQ4NS4wLDI2ODg0MTguMCw0MDQxNzY5LjAsNDQ2ODk3Ni4wLDYzNDkwOTcuMCw1Mjk2NDg2LjAsMTI3NDkyMy4wLDk5Mzg0NDQuMCw0OTE5NDc5LjAsNTU5NTIxMS4wLDI4NDQ2NTguMCw5MDIxOTUuMCw4MDQ5MzEzLjAsNjQyMjAwLjAsMTcxMTI2My4wLDEyMzU3ODYuMCw4NDE0MzUwLjAsMTgxOTA0Ni4wLDE5OTgyNTcuMCwxLjg5NzY0NTdFNywxLjEzNTMxNEU3LDM0NTA2NTQuMCwzNDIxMzk5LjAsMS4yMjgxMDU0RTcsMTA0ODMxOS4wLDQwMTIwMTIuMCw3NTQ4NDQuMCw1Njg5MjgzLjAsMi4wODUxODJFNywyMjMzMTY5LjAsNzA3ODUxNi4wLDYwODgyNy4wLDU4OTQxMjEuMCw1MzYzNjc1LjAsMTgwODM0NC4wLDQ5Mzc4Mi4wCisxMCxUaHUgMyBGZWIgMTEsNjI2OTMyLjAsNDQ0NzEwMC4wLDI2NzM0MDAuMCw1MTMwNjMyLjAsMy4zODcxNjQ4RTcsNDMwMTI2MS4wLDM0MDU1NjUuMCw1NzIwNTkuMCw3ODM2MDAuMCwxLjU5ODIzNzhFNyw4MTg2NDUzLjAsMTIxMTUzNy4wLDI5MjYzMjQuMCwxMjkzOTUzLjAsMS4yNDE5MjkzRTcsNjA4MDQ4NS4wLDI2ODg0MTguMCw0MDQxNzY5LjAsNDQ2ODk3Ni4wLDYzNDkwOTcuMCw1Mjk2NDg2LjAsMTI3NDkyMy4wLDk5Mzg0NDQuMCw0OTE5NDc5LjAsNTU5NTIxMS4wLDI4NDQ2NTguMCw5MDIxOTUuMCw4MDQ5MzEzLjAsNjQyMjAwLjAsMTcxMTI2My4wLDEyMzU3ODYuMCw4NDE0MzUwLjAsMTgxOTA0Ni4wLDE5OTgyNTcuMCwxLjg5NzY0NTdFNywxLjEzNTMxNEU3LDM0NTA2NTQuMCwzNDIxMzk5LjAsMS4yMjgxMDU0RTcsMTA0ODMxOS4wLDQwMTIwMTIuMCw3NTQ4NDQuMCw1Njg5MjgzLjAsMi4wODUxODJFNywyMjMzMTY5LjAsNzA3ODUxNi4wLDYwODgyNy4wLDU4OTQxMjEuMCw1MzYzNjc1LjAsMTgwODM0NC4wLDQ5Mzc4Mi4wCisxMSxGcmkgNCBGZWIgMTEsNjI2OTMyLjAsNDQ0NzEwMC4wLDI2NzM0MDAuMCw1MTMwNjMyLjAsMy4zODcxNjQ4RTcsNDMwMTI2MS4wLDM0MDU1NjUuMCw1NzIwNTkuMCw3ODM2MDAuMCwxLjU5ODIzNzhFNyw4MTg2NDUzLjAsMTIxMTUzNy4wLDI5MjYzMjQuMCwxMjkzOTUzLjAsMS4yNDE5MjkzRTcsNjA4MDQ4NS4wLDI2ODg0MTguMCw0MDQxNzY5LjAsNDQ2ODk3Ni4wLDYzNDkwOTcuMCw1Mjk2NDg2LjAsMTI3NDkyMy4wLDk5Mzg0NDQuMCw0OTE5NDc5LjAsNTU5NTIxMS4wLDI4NDQ2NTguMCw5MDIxOTUuMCw4MDQ5MzEzLjAsNjQyMjAwLjAsMTcxMTI2My4wLDEyMzU3ODYuMCw4NDE0MzUwLjAsMTgxOTA0Ni4wLDE5OTgyNTcuMCwxLjg5NzY0NTdFNywxLjEzNTMxNEU3LDM0NTA2NTQuMCwzNDIxMzk5LjAsMS4yMjgxMDU0RTcsMTA0ODMxOS4wLDQwMTIwMTIuMCw3NTQ4NDQuMCw1Njg5MjgzLjAsMi4wODUxODJFNywyMjMzMTY5LjAsNzA3ODUxNi4wLDYwODgyNy4wLDU4OTQxMjEuMCw1MzYzNjc1LjAsMTgwODM0NC4wLDQ5Mzc4Mi4wCisxMixTYXQgNSBGZWIgMTEsNjI2OTMyLjAsNDQ0NzEwMC4wLDI2NzM0MDAuMCw1MTMwNjMyLjAsMy4zODcxNjQ4RTcsNDMwMTI2MS4wLDM0MDU1NjUuMCw1NzIwNTkuMCw3ODM2MDAuMCwxLjU5ODIzNzhFNyw4MTg2NDUzLjAsMTIxMTUzNy4wLDI5MjYzMjQuMCwxMjkzOTUzLjAsMS4yNDE5MjkzRTcsNjA4MDQ4NS4wLDI2ODg0MTguMCw0MDQxNzY5LjAsNDQ2ODk3Ni4wLDYzNDkwOTcuMCw1Mjk2NDg2LjAsMTI3NDkyMy4wLDk5Mzg0NDQuMCw0OTE5NDc5LjAsNTU5NTIxMS4wLDI4NDQ2NTguMCw5MDIxOTUuMCw4MDQ5MzEzLjAsNjQyMjAwLjAsMTcxMTI2My4wLDEyMzU3ODYuMCw4NDE0MzUwLjAsMTgxOTA0Ni4wLDE5OTgyNTcuMCwxLjg5NzY0NTdFNywxLjEzNTMxNEU3LDM0NTA2NTQuMCwzNDIxMzk5LjAsMS4yMjgxMDU0RTcsMTA0ODMxOS4wLDQwMTIwMTIuMCw3NTQ4NDQuMCw1Njg5MjgzLjAsMi4wODUxODJFNywyMjMzMTY5LjAsNzA3ODUxNi4wLDYwODgyNy4wLDU4OTQxMjEuMCw1MzYzNjc1LjAsMTgwODM0NC4wLDQ5Mzc4Mi4wCisxMyxTdW4gNiBGZWIgMTEsNjI2OTMyLjAsNDQ0NzEwMC4wLDI2NzM0MDAuMCw1MTMwNjMyLjAsMy4zODcxNjQ4RTcsNDMwMTI2MS4wLDM0MDU1NjUuMCw1NzIwNTkuMCw3ODM2MDAuMCwxLjU5ODIzNzhFNyw4MTg2NDUzLjAsMTIxMTUzNy4wLDI5MjYzMjQuMCwxMjkzOTUzLjAsMS4yNDE5MjkzRTcsNjA4MDQ4NS4wLDI2ODg0MTguMCw0MDQxNzY5LjAsNDQ2ODk3Ni4wLDYzNDkwOTcuMCw1Mjk2NDg2LjAsMTI3NDkyMy4wLDk5Mzg0NDQuMCw0OTE5NDc5LjAsNTU5NTIxMS4wLDI4NDQ2NTguMCw5MDIxOTUuMCw4MDQ5MzEzLjAsNjQyMjAwLjAsMTcxMTI2My4wLDEyMzU3ODYuMCw4NDE0MzUwLjAsMTgxOTA0Ni4wLDE5OTgyNTcuMCwxLjg5NzY0NTdFNywxLjEzNTMxNEU3LDM0NTA2NTQuMCwzNDIxMzk5LjAsMS4yMjgxMDU0RTcsMTA0ODMxOS4wLDQwMTIwMTIuMCw3NTQ4NDQuMCw1Njg5MjgzLjAsMi4wODUxODJFNywyMjMzMTY5LjAsNzA3ODUxNi4wLDYwODgyNy4wLDU4OTQxMjEuMCw1MzYzNjc1LjAsMTgwODM0NC4wLDQ5Mzc4Mi4wCisxNCxNb24gNyBGZWIgMTEsNjI2OTMyLjAsNDQ0NzEwMC4wLDI2NzM0MDAuMCw1MTMwNjMyLjAsMy4zODcxNjQ4RTcsNDMwMTI2MS4wLDM0MDU1NjUuMCw1NzIwNTkuMCw3ODM2MDAuMCwxLjU5ODIzNzhFNyw4MTg2NDUzLjAsMTIxMTUzNy4wLDI5MjYzMjQuMCwxMjkzOTUzLjAsMS4yNDE5MjkzRTcsNjA4MDQ4NS4wLDI2ODg0MTguMCw0MDQxNzY5LjAsNDQ2ODk3Ni4wLDYzNDkwOTcuMCw1Mjk2NDg2LjAsMTI3NDkyMy4wLDk5Mzg0NDQuMCw0OTE5NDc5LjAsNTU5NTIxMS4wLDI4NDQ2NTguMCw5MDIxOTUuMCw4MDQ5MzEzLjAsNjQyMjAwLjAsMTcxMTI2My4wLDEyMzU3ODYuMCw4NDE0MzUwLjAsMTgxOTA0Ni4wLDE5OTgyNTcuMCwxLjg5NzY0NTdFNywxLjEzNTMxNEU3LDM0NTA2NTQuMCwzNDIxMzk5LjAsMS4yMjgxMDU0RTcsMTA0ODMxOS4wLDQwMTIwMTIuMCw3NTQ4NDQuMCw1Njg5MjgzLjAsMi4wODUxODJFNywyMjMzMTY5LjAsNzA3ODUxNi4wLDYwODgyNy4wLDU4OTQxMjEuMCw1MzYzNjc1LjAsMTgwODM0NC4wLDQ5Mzc4Mi4wCisxNSxUdWUgOCBGZWIgMTEsNjI2OTMyLjAsNDQ0NzEwMC4wLDI2NzM0MDAuMCw1MTMwNjMyLjAsMy4zODcxNjQ4RTcsNDMwMTI2MS4wLDM0MDU1NjUuMCw1NzIwNTkuMCw3ODM2MDAuMCwxLjU5ODIzNzhFNyw4MTg2NDUzLjAsMTIxMTUzNy4wLDI5MjYzMjQuMCwxMjkzOTUzLjAsMS4yNDE5MjkzRTcsNjA4MDQ4NS4wLDI2ODg0MTguMCw0MDQxNzY5LjAsNDQ2ODk3Ni4wLDYzNDkwOTcuMCw1Mjk2NDg2LjAsMTI3NDkyMy4wLDk5Mzg0NDQuMCw0OTE5NDc5LjAsNTU5NTIxMS4wLDI4NDQ2NTguMCw5MDIxOTUuMCw4MDQ5MzEzLjAsNjQyMjAwLjAsMTcxMTI2My4wLDEyMzU3ODYuMCw4NDE0MzUwLjAsMTgxOTA0Ni4wLDE5OTgyNTcuMCwxLjg5NzY0NTdFNywxLjEzNTMxNEU3LDM0NTA2NTQuMCwzNDIxMzk5LjAsMS4yMjgxMDU0RTcsMTA0ODMxOS4wLDQwMTIwMTIuMCw3NTQ4NDQuMCw1Njg5MjgzLjAsMi4wODUxODJFNywyMjMzMTY5LjAsNzA3ODUxNi4wLDYwODgyNy4wLDU4OTQxMjEuMCw1MzYzNjc1LjAsMTgwODM0NC4wLDQ5Mzc4Mi4wCisxNixXZWQgOSBGZWIgMTEsNjI2OTMyLjAsNDQ0NzEwMC4wLDI2NzM0MDAuMCw1MTMwNjMyLjAsMy4zODcxNjQ4RTcsNDMwMTI2MS4wLDM0MDU1NjUuMCw1NzIwNTkuMCw3ODM2MDAuMCwxLjU5ODIzNzhFNyw4MTg2NDUzLjAsMTIxMTUzNy4wLDI5MjYzMjQuMCwxMjkzOTUzLjAsMS4yNDE5MjkzRTcsNjA4MDQ4NS4wLDI2ODg0MTguMCw0MDQxNzY5LjAsNDQ2ODk3Ni4wLDYzNDkwOTcuMCw1Mjk2NDg2LjAsMTI3NDkyMy4wLDk5Mzg0NDQuMCw0OTE5NDc5LjAsNTU5NTIxMS4wLDI4NDQ2NTguMCw5MDIxOTUuMCw4MDQ5MzEzLjAsNjQyMjAwLjAsMTcxMTI2My4wLDEyMzU3ODYuMCw4NDE0MzUwLjAsMTgxOTA0Ni4wLDE5OTgyNTcuMCwxLjg5NzY0NTdFNywxLjEzNTMxNEU3LDM0NTA2NTQuMCwzNDIxMzk5LjAsMS4yMjgxMDU0RTcsMTA0ODMxOS4wLDQwMTIwMTIuMCw3NTQ4NDQuMCw1Njg5MjgzLjAsMi4wODUxODJFNywyMjMzMTY5LjAsNzA3ODUxNi4wLDYwODgyNy4wLDU4OTQxMjEuMCw1MzYzNjc1LjAsMTgwODM0NC4wLDQ5Mzc4Mi4wCisxNyxUaHUgMTAgRmViIDExLDYyNjkzMi4wLDQ0NDcxMDAuMCwyNjczNDAwLjAsNTEzMDYzMi4wLDMuMzg3MTY0OEU3LDQzMDEyNjEuMCwzNDA1NTY1LjAsNTcyMDU5LjAsNzgzNjAwLjAsMS41OTgyMzc4RTcsODE4NjQ1My4wLDEyMTE1MzcuMCwyOTI2MzI0LjAsMTI5Mzk1My4wLDEuMjQxOTI5M0U3LDYwODA0ODUuMCwyNjg4NDE4LjAsNDA0MTc2OS4wLDQ0Njg5NzYuMCw2MzQ5MDk3LjAsNTI5NjQ4Ni4wLDEyNzQ5MjMuMCw5OTM4NDQ0LjAsNDkxOTQ3OS4wLDU1OTUyMTEuMCwyODQ0NjU4LjAsOTAyMTk1LjAsODA0OTMxMy4wLDY0MjIwMC4wLDE3MTEyNjMuMCwxMjM1Nzg2LjAsODQxNDM1MC4wLDE4MTkwNDYuMCwxOTk4MjU3LjAsMS44OTc2NDU3RTcsMS4xMzUzMTRFNywzNDUwNjU0LjAsMzQyMTM5OS4wLDEuMjI4MTA1NEU3LDEwNDgzMTkuMCw0MDEyMDEyLjAsNzU0ODQ0LjAsNTY4OTI4My4wLDIuMDg1MTgyRTcsMjIzMzE2OS4wLDcwNzg1MTYuMCw2MDg4MjcuMCw1ODk0MTIxLjAsNTM2MzY3NS4wLDE4MDgzNDQuMCw0OTM3ODIuMAorMTgsRnJpIDExIEZlYiAxMSw2MjY5MzIuMCw0NDQ3MTAwLjAsMjY3MzQwMC4wLDUxMzA2MzIuMCwzLjM4NzE2NDhFNyw0MzAxMjYxLjAsMzQwNTU2NS4wLDU3MjA1OS4wLDc4MzYwMC4wLDEuNTk4MjM3OEU3LDgxODY0NTMuMCwxMjExNTM3LjAsMjkyNjMyNC4wLDEyOTM5NTMuMCwxLjI0MTkyOTNFNyw2MDgwNDg1LjAsMjY4ODQxOC4wLDQwNDE3NjkuMCw0NDY4OTc2LjAsNjM0OTA5Ny4wLDUyOTY0ODYuMCwxMjc0OTIzLjAsOTkzODQ0NC4wLDQ5MTk0NzkuMCw1NTk1MjExLjAsMjg0NDY1OC4wLDkwMjE5NS4wLDgwNDkzMTMuMCw2NDIyMDAuMCwxNzExMjYzLjAsMTIzNTc4Ni4wLDg0MTQzNTAuMCwxODE5MDQ2LjAsMTk5ODI1Ny4wLDEuODk3NjQ1N0U3LDEuMTM1MzE0RTcsMzQ1MDY1NC4wLDM0MjEzOTkuMCwxLjIyODEwNTRFNywxMDQ4MzE5LjAsNDAxMjAxMi4wLDc1NDg0NC4wLDU2ODkyODMuMCwyLjA4NTE4MkU3LDIyMzMxNjkuMCw3MDc4NTE2LjAsNjA4ODI3LjAsNTg5NDEyMS4wLDUzNjM2NzUuMCwxODA4MzQ0LjAsNDkzNzgyLjAKKzE5LFNhdCAxMiBGZWIgMTEsNjI2OTMyLjAsNDQ0NzEwMC4wLDI2NzM0MDAuMCw1MTMwNjMyLjAsMy4zODcxNjQ4RTcsNDMwMTI2MS4wLDM0MDU1NjUuMCw1NzIwNTkuMCw3ODM2MDAuMCwxLjU5ODIzNzhFNyw4MTg2NDUzLjAsMTIxMTUzNy4wLDI5MjYzMjQuMCwxMjkzOTUzLjAsMS4yNDE5MjkzRTcsNjA4MDQ4NS4wLDI2ODg0MTguMCw0MDQxNzY5LjAsNDQ2ODk3Ni4wLDYzNDkwOTcuMCw1Mjk2NDg2LjAsMTI3NDkyMy4wLDk5Mzg0NDQuMCw0OTE5NDc5LjAsNTU5NTIxMS4wLDI4NDQ2NTguMCw5MDIxOTUuMCw4MDQ5MzEzLjAsNjQyMjAwLjAsMTcxMTI2My4wLDEyMzU3ODYuMCw4NDE0MzUwLjAsMTgxOTA0Ni4wLDE5OTgyNTcuMCwxLjg5NzY0NTdFNywxLjEzNTMxNEU3LDM0NTA2NTQuMCwzNDIxMzk5LjAsMS4yMjgxMDU0RTcsMTA0ODMxOS4wLDQwMTIwMTIuMCw3NTQ4NDQuMCw1Njg5MjgzLjAsMi4wODUxODJFNywyMjMzMTY5LjAsNzA3ODUxNi4wLDYwODgyNy4wLDU4OTQxMjEuMCw1MzYzNjc1LjAsMTgwODM0NC4wLDQ5Mzc4Mi4wCisyMCxTdW4gMTMgRmViIDExLDYyNjkzMi4wLDQ0NDcxMDAuMCwyNjczNDAwLjAsNTEzMDYzMi4wLDMuMzg3MTY0OEU3LDQzMDEyNjEuMCwzNDA1NTY1LjAsNTcyMDU5LjAsNzgzNjAwLjAsMS41OTgyMzc4RTcsODE4NjQ1My4wLDEyMTE1MzcuMCwyOTI2MzI0LjAsMTI5Mzk1My4wLDEuMjQxOTI5M0U3LDYwODA0ODUuMCwyNjg4NDE4LjAsNDA0MTc2OS4wLDQ0Njg5NzYuMCw2MzQ5MDk3LjAsNTI5NjQ4Ni4wLDEyNzQ5MjMuMCw5OTM4NDQ0LjAsNDkxOTQ3OS4wLDU1OTUyMTEuMCwyODQ0NjU4LjAsOTAyMTk1LjAsODA0OTMxMy4wLDY0MjIwMC4wLDE3MTEyNjMuMCwxMjM1Nzg2LjAsODQxNDM1MC4wLDE4MTkwNDYuMCwxOTk4MjU3LjAsMS44OTc2NDU3RTcsMS4xMzUzMTRFNywzNDUwNjU0LjAsMzQyMTM5OS4wLDEuMjI4MTA1NEU3LDEwNDgzMTkuMCw0MDEyMDEyLjAsNzU0ODQ0LjAsNTY4OTI4My4wLDIuMDg1MTgyRTcsMjIzMzE2OS4wLDcwNzg1MTYuMCw2MDg4MjcuMCw1ODk0MTIxLjAsNTM2MzY3NS4wLDE4MDgzNDQuMCw0OTM3ODIuMAorMjEsTW9uIDE0IEZlYiAxMSw2MjY5MzIuMCw0NDQ3MTAwLjAsMjY3MzQwMC4wLDUxMzA2MzIuMCwzLjM4NzE2NDhFNyw0MzAxMjYxLjAsMzQwNTU2NS4wLDU3MjA1OS4wLDc4MzYwMC4wLDEuNTk4MjM3OEU3LDgxODY0NTMuMCwxMjExNTM3LjAsMjkyNjMyNC4wLDEyOTM5NTMuMCwxLjI0MTkyOTNFNyw2MDgwNDg1LjAsMjY4ODQxOC4wLDQwNDE3NjkuMCw0NDY4OTc2LjAsNjM0OTA5Ny4wLDUyOTY0ODYuMCwxMjc0OTIzLjAsOTkzODQ0NC4wLDQ5MTk0NzkuMCw1NTk1MjExLjAsMjg0NDY1OC4wLDkwMjE5NS4wLDgwNDkzMTMuMCw2NDIyMDAuMCwxNzExMjYzLjAsMTIzNTc4Ni4wLDg0MTQzNTAuMCwxODE5MDQ2LjAsMTk5ODI1Ny4wLDEuODk3NjQ1N0U3LDEuMTM1MzE0RTcsMzQ1MDY1NC4wLDM0MjEzOTkuMCwxLjIyODEwNTRFNywxMDQ4MzE5LjAsNDAxMjAxMi4wLDc1NDg0NC4wLDU2ODkyODMuMCwyLjA4NTE4MkU3LDIyMzMxNjkuMCw3MDc4NTE2LjAsNjA4ODI3LjAsNTg5NDEyMS4wLDUzNjM2NzUuMCwxODA4MzQ0LjAsNDkzNzgyLjAKKzIyLFR1ZSAxNSBGZWIgMTEsNjI2OTMyLjAsNDQ0NzEwMC4wLDI2NzM0MDAuMCw1MTMwNjMyLjAsMy4zODcxNjQ4RTcsNDMwMTI2MS4wLDM0MDU1NjUuMCw1NzIwNTkuMCw3ODM2MDAuMCwxLjU5ODIzNzhFNyw4MTg2NDUzLjAsMTIxMTUzNy4wLDI5MjYzMjQuMCwxMjkzOTUzLjAsMS4yNDE5MjkzRTcsNjA4MDQ4NS4wLDI2ODg0MTguMCw0MDQxNzY5LjAsNDQ2ODk3Ni4wLDYzNDkwOTcuMCw1Mjk2NDg2LjAsMTI3NDkyMy4wLDk5Mzg0NDQuMCw0OTE5NDc5LjAsNTU5NTIxMS4wLDI4NDQ2NTguMCw5MDIxOTUuMCw4MDQ5MzEzLjAsNjQyMjAwLjAsMTcxMTI2My4wLDEyMzU3ODYuMCw4NDE0MzUwLjAsMTgxOTA0Ni4wLDE5OTgyNTcuMCwxLjg5NzY0NTdFNywxLjEzNTMxNEU3LDM0NTA2NTQuMCwzNDIxMzk5LjAsMS4yMjgxMDU0RTcsMTA0ODMxOS4wLDQwMTIwMTIuMCw3NTQ4NDQuMCw1Njg5MjgzLjAsMi4wODUxODJFNywyMjMzMTY5LjAsNzA3ODUxNi4wLDYwODgyNy4wLDU4OTQxMjEuMCw1MzYzNjc1LjAsMTgwODM0NC4wLDQ5Mzc4Mi4wCisyMyxXZWQgMTYgRmViIDExLDYyNjkzMi4wLDQ0NDcxMDAuMCwyNjczNDAwLjAsNTEzMDYzMi4wLDMuMzg3MTY0OEU3LDQzMDEyNjEuMCwzNDA1NTY1LjAsNTcyMDU5LjAsNzgzNjAwLjAsMS41OTgyMzc4RTcsODE4NjQ1My4wLDEyMTE1MzcuMCwyOTI2MzI0LjAsMTI5Mzk1My4wLDEuMjQxOTI5M0U3LDYwODA0ODUuMCwyNjg4NDE4LjAsNDA0MTc2OS4wLDQ0Njg5NzYuMCw2MzQ5MDk3LjAsNTI5NjQ4Ni4wLDEyNzQ5MjMuMCw5OTM4NDQ0LjAsNDkxOTQ3OS4wLDU1OTUyMTEuMCwyODQ0NjU4LjAsOTAyMTk1LjAsODA0OTMxMy4wLDY0MjIwMC4wLDE3MTEyNjMuMCwxMjM1Nzg2LjAsODQxNDM1MC4wLDE4MTkwNDYuMCwxOTk4MjU3LjAsMS44OTc2NDU3RTcsMS4xMzUzMTRFNywzNDUwNjU0LjAsMzQyMTM5OS4wLDEuMjI4MTA1NEU3LDEwNDgzMTkuMCw0MDEyMDEyLjAsNzU0ODQ0LjAsNTY4OTI4My4wLDIuMDg1MTgyRTcsMjIzMzE2OS4wLDcwNzg1MTYuMCw2MDg4MjcuMCw1ODk0MTIxLjAsNTM2MzY3NS4wLDE4MDgzNDQuMCw0OTM3ODIuMAorMjQsVGh1IDE3IEZlYiAxMSw2MjY5MzIuMCw0NDQ3MTAwLjAsMjY3MzQwMC4wLDUxMzA2MzIuMCwzLjM4NzE2NDhFNyw0MzAxMjYxLjAsMzQwNTU2NS4wLDU3MjA1OS4wLDc4MzYwMC4wLDEuNTk4MjM3OEU3LDgxODY0NTMuMCwxMjExNTM3LjAsMjkyNjMyNC4wLDEyOTM5NTMuMCwxLjI0MTkyOTNFNyw2MDgwNDg1LjAsMjY4ODQxOC4wLDQwNDE3NjkuMCw0NDY4OTc2LjAsNjM0OTA5Ny4wLDUyOTY0ODYuMCwxMjc0OTIzLjAsOTkzODQ0NC4wLDQ5MTk0NzkuMCw1NTk1MjExLjAsMjg0NDY1OC4wLDkwMjE5NS4wLDgwNDkzMTMuMCw2NDIyMDAuMCwxNzExMjYzLjAsMTIzNTc4Ni4wLDg0MTQzNTAuMCwxODE5MDQ2LjAsMTk5ODI1Ny4wLDEuODk3NjQ1N0U3LDEuMTM1MzE0RTcsMzQ1MDY1NC4wLDM0MjEzOTkuMCwxLjIyODEwNTRFNywxMDQ4MzE5LjAsNDAxMjAxMi4wLDc1NDg0NC4wLDU2ODkyODMuMCwyLjA4NTE4MkU3LDIyMzMxNjkuMCw3MDc4NTE2LjAsNjA4ODI3LjAsNTg5NDEyMS4wLDUzNjM2NzUuMCwxODA4MzQ0LjAsNDkzNzgyLjAKKzI1LEZyaSAxOCBGZWIgMTEsNjI2OTMyLjAsNDQ0NzEwMC4wLDI2NzM0MDAuMCw1MTMwNjMyLjAsMy4zODcxNjQ4RTcsNDMwMTI2MS4wLDM0MDU1NjUuMCw1NzIwNTkuMCw3ODM2MDAuMCwxLjU5ODIzNzhFNyw4MTg2NDUzLjAsMTIxMTUzNy4wLDI5MjYzMjQuMCwxMjkzOTUzLjAsMS4yNDE5MjkzRTcsNjA4MDQ4NS4wLDI2ODg0MTguMCw0MDQxNzY5LjAsNDQ2ODk3Ni4wLDYzNDkwOTcuMCw1Mjk2NDg2LjAsMTI3NDkyMy4wLDk5Mzg0NDQuMCw0OTE5NDc5LjAsNTU5NTIxMS4wLDI4NDQ2NTguMCw5MDIxOTUuMCw4MDQ5MzEzLjAsNjQyMjAwLjAsMTcxMTI2My4wLDEyMzU3ODYuMCw4NDE0MzUwLjAsMTgxOTA0Ni4wLDE5OTgyNTcuMCwxLjg5NzY0NTdFNywxLjEzNTMxNEU3LDM0NTA2NTQuMCwzNDIxMzk5LjAsMS4yMjgxMDU0RTcsMTA0ODMxOS4wLDQwMTIwMTIuMCw3NTQ4NDQuMCw1Njg5MjgzLjAsMi4wODUxODJFNywyMjMzMTY5LjAsNzA3ODUxNi4wLDYwODgyNy4wLDU4OTQxMjEuMCw1MzYzNjc1LjAsMTgwODM0NC4wLDQ5Mzc4Mi4wCisyNixTYXQgMTkgRmViIDExLDYyNjkzMi4wLDQ0NDcxMDAuMCwyNjczNDAwLjAsNTEzMDYzMi4wLDMuMzg3MTY0OEU3LDQzMDEyNjEuMCwzNDA1NTY1LjAsNTcyMDU5LjAsNzgzNjAwLjAsMS41OTgyMzc4RTcsODE4NjQ1My4wLDEyMTE1MzcuMCwyOTI2MzI0LjAsMTI5Mzk1My4wLDEuMjQxOTI5M0U3LDYwODA0ODUuMCwyNjg4NDE4LjAsNDA0MTc2OS4wLDQ0Njg5NzYuMCw2MzQ5MDk3LjAsNTI5NjQ4Ni4wLDEyNzQ5MjMuMCw5OTM4NDQ0LjAsNDkxOTQ3OS4wLDU1OTUyMTEuMCwyODQ0NjU4LjAsOTAyMTk1LjAsODA0OTMxMy4wLDY0MjIwMC4wLDE3MTEyNjMuMCwxMjM1Nzg2LjAsODQxNDM1MC4wLDE4MTkwNDYuMCwxOTk4MjU3LjAsMS44OTc2NDU3RTcsMS4xMzUzMTRFNywzNDUwNjU0LjAsMzQyMTM5OS4wLDEuMjI4MTA1NEU3LDEwNDgzMTkuMCw0MDEyMDEyLjAsNzU0ODQ0LjAsNTY4OTI4My4wLDIuMDg1MTgyRTcsMjIzMzE2OS4wLDcwNzg1MTYuMCw2MDg4MjcuMCw1ODk0MTIxLjAsNTM2MzY3NS4wLDE4MDgzNDQuMCw0OTM3ODIuMAorMjcsU3VuIDIwIEZlYiAxMSw2MjY5MzIuMCw0NDQ3MTAwLjAsMjY3MzQwMC4wLDUxMzA2MzIuMCwzLjM4NzE2NDhFNyw0MzAxMjYxLjAsMzQwNTU2NS4wLDU3MjA1OS4wLDc4MzYwMC4wLDEuNTk4MjM3OEU3LDgxODY0NTMuMCwxMjExNTM3LjAsMjkyNjMyNC4wLDEyOTM5NTMuMCwxLjI0MTkyOTNFNyw2MDgwNDg1LjAsMjY4ODQxOC4wLDQwNDE3NjkuMCw0NDY4OTc2LjAsNjM0OTA5Ny4wLDUyOTY0ODYuMCwxMjc0OTIzLjAsOTkzODQ0NC4wLDQ5MTk0NzkuMCw1NTk1MjExLjAsMjg0NDY1OC4wLDkwMjE5NS4wLDgwNDkzMTMuMCw2NDIyMDAuMCwxNzExMjYzLjAsMTIzNTc4Ni4wLDg0MTQzNTAuMCwxODE5MDQ2LjAsMTk5ODI1Ny4wLDEuODk3NjQ1N0U3LDEuMTM1MzE0RTcsMzQ1MDY1NC4wLDM0MjEzOTkuMCwxLjIyODEwNTRFNywxMDQ4MzE5LjAsNDAxMjAxMi4wLDc1NDg0NC4wLDU2ODkyODMuMCwyLjA4NTE4MkU3LDIyMzMxNjkuMCw3MDc4NTE2LjAsNjA4ODI3LjAsNTg5NDEyMS4wLDUzNjM2NzUuMCwxODA4MzQ0LjAsNDkzNzgyLjAKKzI4LE1vbiAyMSBGZWIgMTEsNjI2OTMyLjAsNDQ0NzEwMC4wLDI2NzM0MDAuMCw1MTMwNjMyLjAsMy4zODcxNjQ4RTcsNDMwMTI2MS4wLDM0MDU1NjUuMCw1NzIwNTkuMCw3ODM2MDAuMCwxLjU5ODIzNzhFNyw4MTg2NDUzLjAsMTIxMTUzNy4wLDI5MjYzMjQuMCwxMjkzOTUzLjAsMS4yNDE5MjkzRTcsNjA4MDQ4NS4wLDI2ODg0MTguMCw0MDQxNzY5LjAsNDQ2ODk3Ni4wLDYzNDkwOTcuMCw1Mjk2NDg2LjAsMTI3NDkyMy4wLDk5Mzg0NDQuMCw0OTE5NDc5LjAsNTU5NTIxMS4wLDI4NDQ2NTguMCw5MDIxOTUuMCw4MDQ5MzEzLjAsNjQyMjAwLjAsMTcxMTI2My4wLDEyMzU3ODYuMCw4NDE0MzUwLjAsMTgxOTA0Ni4wLDE5OTgyNTcuMCwxLjg5NzY0NTdFNywxLjEzNTMxNEU3LDM0NTA2NTQuMCwzNDIxMzk5LjAsMS4yMjgxMDU0RTcsMTA0ODMxOS4wLDQwMTIwMTIuMCw3NTQ4NDQuMCw1Njg5MjgzLjAsMi4wODUxODJFNywyMjMzMTY5LjAsNzA3ODUxNi4wLDYwODgyNy4wLDU4OTQxMjEuMCw1MzYzNjc1LjAsMTgwODM0NC4wLDQ5Mzc4Mi4wCisyOSxUdWUgMjIgRmViIDExLDYyNjkzMi4wLDQ0NDcxMDAuMCwyNjczNDAwLjAsNTEzMDYzMi4wLDMuMzg3MTY0OEU3LDQzMDEyNjEuMCwzNDA1NTY1LjAsNTcyMDU5LjAsNzgzNjAwLjAsMS41OTgyMzc4RTcsODE4NjQ1My4wLDEyMTE1MzcuMCwyOTI2MzI0LjAsMTI5Mzk1My4wLDEuMjQxOTI5M0U3LDYwODA0ODUuMCwyNjg4NDE4LjAsNDA0MTc2OS4wLDQ0Njg5NzYuMCw2MzQ5MDk3LjAsNTI5NjQ4Ni4wLDEyNzQ5MjMuMCw5OTM4NDQ0LjAsNDkxOTQ3OS4wLDU1OTUyMTEuMCwyODQ0NjU4LjAsOTAyMTk1LjAsODA0OTMxMy4wLDY0MjIwMC4wLDE3MTEyNjMuMCwxMjM1Nzg2LjAsODQxNDM1MC4wLDE4MTkwNDYuMCwxOTk4MjU3LjAsMS44OTc2NDU3RTcsMS4xMzUzMTRFNywzNDUwNjU0LjAsMzQyMTM5OS4wLDEuMjI4MTA1NEU3LDEwNDgzMTkuMCw0MDEyMDEyLjAsNzU0ODQ0LjAsNTY4OTI4My4wLDIuMDg1MTgyRTcsMjIzMzE2OS4wLDcwNzg1MTYuMCw2MDg4MjcuMCw1ODk0MTIxLjAsNTM2MzY3NS4wLDE4MDgzNDQuMCw0OTM3ODIuMAorMzAsV2VkIDIzIEZlYiAxMSw2MjY5MzIuMCw0NDQ3MTAwLjAsMjY3MzQwMC4wLDUxMzA2MzIuMCwzLjM4NzE2NDhFNyw0MzAxMjYxLjAsMzQwNTU2NS4wLDU3MjA1OS4wLDc4MzYwMC4wLDEuNTk4MjM3OEU3LDgxODY0NTMuMCwxMjExNTM3LjAsMjkyNjMyNC4wLDEyOTM5NTMuMCwxLjI0MTkyOTNFNyw2MDgwNDg1LjAsMjY4ODQxOC4wLDQwNDE3NjkuMCw0NDY4OTc2LjAsNjM0OTA5Ny4wLDUyOTY0ODYuMCwxMjc0OTIzLjAsOTkzODQ0NC4wLDQ5MTk0NzkuMCw1NTk1MjExLjAsMjg0NDY1OC4wLDkwMjE5NS4wLDgwNDkzMTMuMCw2NDIyMDAuMCwxNzExMjYzLjAsMTIzNTc4Ni4wLDg0MTQzNTAuMCwxODE5MDQ2LjAsMTk5ODI1Ny4wLDEuODk3NjQ1N0U3LDEuMTM1MzE0RTcsMzQ1MDY1NC4wLDM0MjEzOTkuMCwxLjIyODEwNTRFNywxMDQ4MzE5LjAsNDAxMjAxMi4wLDc1NDg0NC4wLDU2ODkyODMuMCwyLjA4NTE4MkU3LDIyMzMxNjkuMCw3MDc4NTE2LjAsNjA4ODI3LjAsNTg5NDEyMS4wLDUzNjM2NzUuMCwxODA4MzQ0LjAsNDkzNzgyLjAKKzMxLFRodSAyNCBGZWIgMTEsNjI2OTMyLjAsNDQ0NzEwMC4wLDI2NzM0MDAuMCw1MTMwNjMyLjAsMy4zODcxNjQ4RTcsNDMwMTI2MS4wLDM0MDU1NjUuMCw1NzIwNTkuMCw3ODM2MDAuMCwxLjU5ODIzNzhFNyw4MTg2NDUzLjAsMTIxMTUzNy4wLDI5MjYzMjQuMCwxMjkzOTUzLjAsMS4yNDE5MjkzRTcsNjA4MDQ4NS4wLDI2ODg0MTguMCw0MDQxNzY5LjAsNDQ2ODk3Ni4wLDYzNDkwOTcuMCw1Mjk2NDg2LjAsMTI3NDkyMy4wLDk5Mzg0NDQuMCw0OTE5NDc5LjAsNTU5NTIxMS4wLDI4NDQ2NTguMCw5MDIxOTUuMCw4MDQ5MzEzLjAsNjQyMjAwLjAsMTcxMTI2My4wLDEyMzU3ODYuMCw4NDE0MzUwLjAsMTgxOTA0Ni4wLDE5OTgyNTcuMCwxLjg5NzY0NTdFNywxLjEzNTMxNEU3LDM0NTA2NTQuMCwzNDIxMzk5LjAsMS4yMjgxMDU0RTcsMTA0ODMxOS4wLDQwMTIwMTIuMCw3NTQ4NDQuMCw1Njg5MjgzLjAsMi4wODUxODJFNywyMjMzMTY5LjAsNzA3ODUxNi4wLDYwODgyNy4wLDU4OTQxMjEuMCw1MzYzNjc1LjAsMTgwODM0NC4wLDQ5Mzc4Mi4wCiszMixGcmkgMjUgRmViIDExLDYyNjkzMi4wLDQ0NDcxMDAuMCwyNjczNDAwLjAsNTEzMDYzMi4wLDMuMzg3MTY0OEU3LDQzMDEyNjEuMCwzNDA1NTY1LjAsNTcyMDU5LjAsNzgzNjAwLjAsMS41OTgyMzc4RTcsODE4NjQ1My4wLDEyMTE1MzcuMCwyOTI2MzI0LjAsMTI5Mzk1My4wLDEuMjQxOTI5M0U3LDYwODA0ODUuMCwyNjg4NDE4LjAsNDA0MTc2OS4wLDQ0Njg5NzYuMCw2MzQ5MDk3LjAsNTI5NjQ4Ni4wLDEyNzQ5MjMuMCw5OTM4NDQ0LjAsNDkxOTQ3OS4wLDU1OTUyMTEuMCwyODQ0NjU4LjAsOTAyMTk1LjAsODA0OTMxMy4wLDY0MjIwMC4wLDE3MTEyNjMuMCwxMjM1Nzg2LjAsODQxNDM1MC4wLDE4MTkwNDYuMCwxOTk4MjU3LjAsMS44OTc2NDU3RTcsMS4xMzUzMTRFNywzNDUwNjU0LjAsMzQyMTM5OS4wLDEuMjI4MTA1NEU3LDEwNDgzMTkuMCw0MDEyMDEyLjAsNzU0ODQ0LjAsNTY4OTI4My4wLDIuMDg1MTgyRTcsMjIzMzE2OS4wLDcwNzg1MTYuMCw2MDg4MjcuMCw1ODk0MTIxLjAsNTM2MzY3NS4wLDE4MDgzNDQuMCw0OTM3ODIuMApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTSVJTdGF0ZXNPbmx5X0ZEX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL2h1bWFuL0RlYXRoc18wLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0lSU3RhdGVzT25seV9GRF9SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9odW1hbi9EZWF0aHNfMC5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTEyZThiOAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0lSU3RhdGVzT25seV9GRF9SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9odW1hbi9EZWF0aHNfMC5jc3YKQEAgLTAsMCArMSwzMyBAQAoraXRlcmF0aW9uLHRpbWUsc3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vbm9kZS90cmFuc3BvcnQvcGlwZS9VU0EKKzEsVHVlIDI1IEphbiAxMSwwLjAKKzIsV2VkIDI2IEphbiAxMSwwLjAKKzMsVGh1IDI3IEphbiAxMSwwLjAKKzQsRnJpIDI4IEphbiAxMSwwLjAKKzUsU2F0IDI5IEphbiAxMSwwLjAKKzYsU3VuIDMwIEphbiAxMSwwLjAKKzcsTW9uIDMxIEphbiAxMSwwLjAKKzgsVHVlIDEgRmViIDExLDAuMAorOSxXZWQgMiBGZWIgMTEsMC4wCisxMCxUaHUgMyBGZWIgMTEsMC4wCisxMSxGcmkgNCBGZWIgMTEsMC4wCisxMixTYXQgNSBGZWIgMTEsMC4wCisxMyxTdW4gNiBGZWIgMTEsMC4wCisxNCxNb24gNyBGZWIgMTEsMC4wCisxNSxUdWUgOCBGZWIgMTEsMC4wCisxNixXZWQgOSBGZWIgMTEsMC4wCisxNyxUaHUgMTAgRmViIDExLDAuMAorMTgsRnJpIDExIEZlYiAxMSwwLjAKKzE5LFNhdCAxMiBGZWIgMTEsMC4wCisyMCxTdW4gMTMgRmViIDExLDAuMAorMjEsTW9uIDE0IEZlYiAxMSwwLjAKKzIyLFR1ZSAxNSBGZWIgMTEsMC4wCisyMyxXZWQgMTYgRmViIDExLDAuMAorMjQsVGh1IDE3IEZlYiAxMSwwLjAKKzI1LEZyaSAxOCBGZWIgMTEsMC4wCisyNixTYXQgMTkgRmViIDExLDAuMAorMjcsU3VuIDIwIEZlYiAxMSwwLjAKKzI4LE1vbiAyMSBGZWIgMTEsMC4wCisyOSxUdWUgMjIgRmViIDExLDAuMAorMzAsV2VkIDIzIEZlYiAxMSwwLjAKKzMxLFRodSAyNCBGZWIgMTEsMC4wCiszMixGcmkgMjUgRmViIDExLDAuMApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTSVJTdGF0ZXNPbmx5X0ZEX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL2h1bWFuL0RlYXRoc18xLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0lSU3RhdGVzT25seV9GRF9SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9odW1hbi9EZWF0aHNfMS5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDdhODQzZgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0lSU3RhdGVzT25seV9GRF9SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9odW1hbi9EZWF0aHNfMS5jc3YKQEAgLTAsMCArMSwzMyBAQAoraXRlcmF0aW9uLHRpbWUsVVMtQUssVVMtQUwsVVMtQVIsVVMtQVosVVMtQ0EsVVMtQ08sVVMtQ1QsVVMtREMsVVMtREUsVVMtRkwsVVMtR0EsVVMtSEksVVMtSUEsVVMtSUQsVVMtSUwsVVMtSU4sVVMtS1MsVVMtS1ksVVMtTEEsVVMtTUEsVVMtTUQsVVMtTUUsVVMtTUksVVMtTU4sVVMtTU8sVVMtTVMsVVMtTVQsVVMtTkMsVVMtTkQsVVMtTkUsVVMtTkgsVVMtTkosVVMtTk0sVVMtTlYsVVMtTlksVVMtT0gsVVMtT0ssVVMtT1IsVVMtUEEsVVMtUkksVVMtU0MsVVMtU0QsVVMtVE4sVVMtVFgsVVMtVVQsVVMtVkEsVVMtVlQsVVMtV0EsVVMtV0ksVVMtV1YsVVMtV1kKKzEsVHVlIDI1IEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMixXZWQgMjYgSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCiszLFRodSAyNyBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzQsRnJpIDI4IEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorNSxTYXQgMjkgSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCis2LFN1biAzMCBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzcsTW9uIDMxIEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorOCxUdWUgMSBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzksV2VkIDIgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxMCxUaHUgMyBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzExLEZyaSA0IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTIsU2F0IDUgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxMyxTdW4gNiBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzE0LE1vbiA3IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTUsVHVlIDggRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxNixXZWQgOSBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzE3LFRodSAxMCBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzE4LEZyaSAxMSBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzE5LFNhdCAxMiBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzIwLFN1biAxMyBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzIxLE1vbiAxNCBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzIyLFR1ZSAxNSBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzIzLFdlZCAxNiBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzI0LFRodSAxNyBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzI1LEZyaSAxOCBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzI2LFNhdCAxOSBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzI3LFN1biAyMCBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzI4LE1vbiAyMSBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzI5LFR1ZSAyMiBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzMwLFdlZCAyMyBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzMxLFRodSAyNCBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzMyLEZyaSAyNSBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0lSU3RhdGVzT25seV9GRF9SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9odW1hbi9EZW5zaXR5XzAuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTSVJTdGF0ZXNPbmx5X0ZEX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL2h1bWFuL0RlbnNpdHlfMC5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTEyZThiOAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0lSU3RhdGVzT25seV9GRF9SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9odW1hbi9EZW5zaXR5XzAuY3N2CkBAIC0wLDAgKzEsMzMgQEAKK2l0ZXJhdGlvbix0aW1lLHN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL25vZGUvdHJhbnNwb3J0L3BpcGUvVVNBCisxLFR1ZSAyNSBKYW4gMTEsMC4wCisyLFdlZCAyNiBKYW4gMTEsMC4wCiszLFRodSAyNyBKYW4gMTEsMC4wCis0LEZyaSAyOCBKYW4gMTEsMC4wCis1LFNhdCAyOSBKYW4gMTEsMC4wCis2LFN1biAzMCBKYW4gMTEsMC4wCis3LE1vbiAzMSBKYW4gMTEsMC4wCis4LFR1ZSAxIEZlYiAxMSwwLjAKKzksV2VkIDIgRmViIDExLDAuMAorMTAsVGh1IDMgRmViIDExLDAuMAorMTEsRnJpIDQgRmViIDExLDAuMAorMTIsU2F0IDUgRmViIDExLDAuMAorMTMsU3VuIDYgRmViIDExLDAuMAorMTQsTW9uIDcgRmViIDExLDAuMAorMTUsVHVlIDggRmViIDExLDAuMAorMTYsV2VkIDkgRmViIDExLDAuMAorMTcsVGh1IDEwIEZlYiAxMSwwLjAKKzE4LEZyaSAxMSBGZWIgMTEsMC4wCisxOSxTYXQgMTIgRmViIDExLDAuMAorMjAsU3VuIDEzIEZlYiAxMSwwLjAKKzIxLE1vbiAxNCBGZWIgMTEsMC4wCisyMixUdWUgMTUgRmViIDExLDAuMAorMjMsV2VkIDE2IEZlYiAxMSwwLjAKKzI0LFRodSAxNyBGZWIgMTEsMC4wCisyNSxGcmkgMTggRmViIDExLDAuMAorMjYsU2F0IDE5IEZlYiAxMSwwLjAKKzI3LFN1biAyMCBGZWIgMTEsMC4wCisyOCxNb24gMjEgRmViIDExLDAuMAorMjksVHVlIDIyIEZlYiAxMSwwLjAKKzMwLFdlZCAyMyBGZWIgMTEsMC4wCiszMSxUaHUgMjQgRmViIDExLDAuMAorMzIsRnJpIDI1IEZlYiAxMSwwLjAKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0lSU3RhdGVzT25seV9GRF9SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9odW1hbi9EZW5zaXR5XzEuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTSVJTdGF0ZXNPbmx5X0ZEX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL2h1bWFuL0RlbnNpdHlfMS5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjQxOGI3MgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0lSU3RhdGVzT25seV9GRF9SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9odW1hbi9EZW5zaXR5XzEuY3N2CkBAIC0wLDAgKzEsMzMgQEAKK2l0ZXJhdGlvbix0aW1lLFVTLUFLLFVTLUFMLFVTLUFSLFVTLUFaLFVTLUNBLFVTLUNPLFVTLUNULFVTLURDLFVTLURFLFVTLUZMLFVTLUdBLFVTLUhJLFVTLUlBLFVTLUlELFVTLUlMLFVTLUlOLFVTLUtTLFVTLUtZLFVTLUxBLFVTLU1BLFVTLU1ELFVTLU1FLFVTLU1JLFVTLU1OLFVTLU1PLFVTLU1TLFVTLU1ULFVTLU5DLFVTLU5ELFVTLU5FLFVTLU5ILFVTLU5KLFVTLU5NLFVTLU5WLFVTLU5ZLFVTLU9ILFVTLU9LLFVTLU9SLFVTLVBBLFVTLVJJLFVTLVNDLFVTLVNELFVTLVROLFVTLVRYLFVTLVVULFVTLVZBLFVTLVZULFVTLVdBLFVTLVdJLFVTLVdWLFVTLVdZCisxLFR1ZSAyNSBKYW4gMTEsMC45NDUyMTc3NjkzODAwMjMzLDg0LjgzNzUyNjUzMTQwMDI0LDUwLjI3MjA4MzAyODg1NjMzLDQ1LjAwNjIxNTAwNDk2MDYsMjA2LjkxODUzNzg2ODgwMTIsNDEuMzIxMTAxNzc0MTA1NzM1LDYxNC4zNTM2NDY2MzQ3ODQ1LDgzNzAuNzc4NDYwNjM3OTg2LDMxNC43OTEwODMzMjk2NTA4NiwyNDMuMDYxMDI0MzMzMDU0MTgsMTM3Ljc2MTYyNzAxMTc2NjMsMTEwLjgzNTE2NzU2OTYwNDkyLDUyLjAwMzYxNDYxNTIwMDc1LDE1LjQ4MzQ0ODE0MzE2MzIsMjE0LjQ0MjMwMjU4NTI5OTIyLDE2Ni45NjQ5NjQ1OTI3OTU4NywzMi42NzUyNzA0NjQ5MzI3OCwxMDAuMDIxNDU1NjA1NzAzODgsODYuMjA3NTk3NjUxOTkyNTksNjAxLjU0OTU2NTczMzEzNzUsNDI2LjkwNTk4OTM1NDEyMjE0LDM2LjAzMDM5NzM2MTU2NzgsMTAyLjc1ODkzMDIzNDA2MzM5LDU2LjU4NTQ5NTA3MjU3MjI2LDgwLjI3MDY2MDQ1MTI2OTA4LDU4LjczNzI4NzYyOTg4NTQxLDYuMTM1NjExMjI1MDYxNjE1NSwxNDkuNTY0MDI1NDYyNjE1LDkuMDgzNDc4MTgyODkxMzUsMjIuMTIyNTY2MDM1Mjc3MTYzLDEzMi4xNzA0NzM4MjEyMjIzNyw5NjQuODA0NTU4OTUzMzY3MiwxNC45NjA1NTQxNTMyMDQ3MDIsMTguMDczODQzNzczMjUzNjI1LDM0Ny44MzQ0NjM2NzAzNTcxLDI1My4yNzc1MzEwMTUxMjc3NSw0OS4zNjY4NTc3MTExOTM5NSwzNC43NzcxNTczNzU2Nzg3OSwyNjYuNjU5MjExODUwODEyMiw2NzguNTAxNjY2NjEyNzMxLDEyNS4yOTYyODE3MjIxNjI4OSw5Ljc4ODM2MDQ0MDE2MDA3NSwxMzQuOTk4NjEzMDY0NDM0NzIsNzcuNjM3MDQwNTAwNTA5MywyNi4zMDM4ODQyODIwMzMwOTYsMTY1LjQ4NTY0MzIxNDgzNTE0LDYzLjMyNTQxNDU0MDQ4NDY1LDgyLjY2NjkxMTA4MTE3Nzk3LDgxLjg5MDg5MzQ2NzkwNDczLDc0LjYzMzE3ODM3MjM4MTc0LDUuMDQ4MTk1NzcxNjI5MjEKKzIsV2VkIDI2IEphbiAxMSwwLjk0NTIxNzc2OTM4MDAyMzMsODQuODM3NTI2NTMxNDAwMjQsNTAuMjcyMDgzMDI4ODU2MzMsNDUuMDA2MjE1MDA0OTYwNiwyMDYuOTE4NTM3ODY4ODAxMiw0MS4zMjExMDE3NzQxMDU3MzUsNjE0LjM1MzY0NjYzNDc4NDUsODM3MC43Nzg0NjA2Mzc5ODYsMzE0Ljc5MTA4MzMyOTY1MDg2LDI0My4wNjEwMjQzMzMwNTQxOCwxMzcuNzYxNjI3MDExNzY2MywxMTAuODM1MTY3NTY5NjA0OTIsNTIuMDAzNjE0NjE1MjAwNzUsMTUuNDgzNDQ4MTQzMTYzMiwyMTQuNDQyMzAyNTg1Mjk5MjIsMTY2Ljk2NDk2NDU5Mjc5NTg3LDMyLjY3NTI3MDQ2NDkzMjc4LDEwMC4wMjE0NTU2MDU3MDM4OCw4Ni4yMDc1OTc2NTE5OTI1OSw2MDEuNTQ5NTY1NzMzMTM3NSw0MjYuOTA1OTg5MzU0MTIyMTQsMzYuMDMwMzk3MzYxNTY3OCwxMDIuNzU4OTMwMjM0MDYzMzksNTYuNTg1NDk1MDcyNTcyMjYsODAuMjcwNjYwNDUxMjY5MDgsNTguNzM3Mjg3NjI5ODg1NDEsNi4xMzU2MTEyMjUwNjE2MTU1LDE0OS41NjQwMjU0NjI2MTUsOS4wODM0NzgxODI4OTEzNSwyMi4xMjI1NjYwMzUyNzcxNjMsMTMyLjE3MDQ3MzgyMTIyMjM3LDk2NC44MDQ1NTg5NTMzNjcyLDE0Ljk2MDU1NDE1MzIwNDcwMiwxOC4wNzM4NDM3NzMyNTM2MjUsMzQ3LjgzNDQ2MzY3MDM1NzEsMjUzLjI3NzUzMTAxNTEyNzc1LDQ5LjM2Njg1NzcxMTE5Mzk1LDM0Ljc3NzE1NzM3NTY3ODc5LDI2Ni42NTkyMTE4NTA4MTIyLDY3OC41MDE2NjY2MTI3MzEsMTI1LjI5NjI4MTcyMjE2Mjg5LDkuNzg4MzYwNDQwMTYwMDc1LDEzNC45OTg2MTMwNjQ0MzQ3Miw3Ny42MzcwNDA1MDA1MDkzLDI2LjMwMzg4NDI4MjAzMzA5NiwxNjUuNDg1NjQzMjE0ODM1MTQsNjMuMzI1NDE0NTQwNDg0NjUsODIuNjY2OTExMDgxMTc3OTcsODEuODkwODkzNDY3OTA0NzMsNzQuNjMzMTc4MzcyMzgxNzQsNS4wNDgxOTU3NzE2MjkyMQorMyxUaHUgMjcgSmFuIDExLDAuOTQ1MjE3NzY5MzgwMDIzMyw4NC44Mzc1MjY1MzE0MDAyNCw1MC4yNzIwODMwMjg4NTYzMyw0NS4wMDYyMTUwMDQ5NjA2LDIwNi45MTg1Mzc4Njg4MDEyLDQxLjMyMTEwMTc3NDEwNTczNSw2MTQuMzUzNjQ2NjM0Nzg0NSw4MzcwLjc3ODQ2MDYzNzk4NiwzMTQuNzkxMDgzMzI5NjUwODYsMjQzLjA2MTAyNDMzMzA1NDE4LDEzNy43NjE2MjcwMTE3NjYzLDExMC44MzUxNjc1Njk2MDQ5Miw1Mi4wMDM2MTQ2MTUyMDA3NSwxNS40ODM0NDgxNDMxNjMyLDIxNC40NDIzMDI1ODUyOTkyMiwxNjYuOTY0OTY0NTkyNzk1ODcsMzIuNjc1MjcwNDY0OTMyNzgsMTAwLjAyMTQ1NTYwNTcwMzg4LDg2LjIwNzU5NzY1MTk5MjU5LDYwMS41NDk1NjU3MzMxMzc1LDQyNi45MDU5ODkzNTQxMjIxNCwzNi4wMzAzOTczNjE1Njc4LDEwMi43NTg5MzAyMzQwNjMzOSw1Ni41ODU0OTUwNzI1NzIyNiw4MC4yNzA2NjA0NTEyNjkwOCw1OC43MzcyODc2Mjk4ODU0MSw2LjEzNTYxMTIyNTA2MTYxNTUsMTQ5LjU2NDAyNTQ2MjYxNSw5LjA4MzQ3ODE4Mjg5MTM1LDIyLjEyMjU2NjAzNTI3NzE2MywxMzIuMTcwNDczODIxMjIyMzcsOTY0LjgwNDU1ODk1MzM2NzIsMTQuOTYwNTU0MTUzMjA0NzAyLDE4LjA3Mzg0Mzc3MzI1MzYyNSwzNDcuODM0NDYzNjcwMzU3MSwyNTMuMjc3NTMxMDE1MTI3NzUsNDkuMzY2ODU3NzExMTkzOTUsMzQuNzc3MTU3Mzc1Njc4NzksMjY2LjY1OTIxMTg1MDgxMjIsNjc4LjUwMTY2NjYxMjczMSwxMjUuMjk2MjgxNzIyMTYyODksOS43ODgzNjA0NDAxNjAwNzUsMTM0Ljk5ODYxMzA2NDQzNDcyLDc3LjYzNzA0MDUwMDUwOTMsMjYuMzAzODg0MjgyMDMzMDk2LDE2NS40ODU2NDMyMTQ4MzUxNCw2My4zMjU0MTQ1NDA0ODQ2NSw4Mi42NjY5MTEwODExNzc5Nyw4MS44OTA4OTM0Njc5MDQ3Myw3NC42MzMxNzgzNzIzODE3NCw1LjA0ODE5NTc3MTYyOTIxCis0LEZyaSAyOCBKYW4gMTEsMC45NDUyMTc3NjkzODAwMjMzLDg0LjgzNzUyNjUzMTQwMDI0LDUwLjI3MjA4MzAyODg1NjMzLDQ1LjAwNjIxNTAwNDk2MDYsMjA2LjkxODUzNzg2ODgwMTIsNDEuMzIxMTAxNzc0MTA1NzM1LDYxNC4zNTM2NDY2MzQ3ODQ1LDgzNzAuNzc4NDYwNjM3OTg2LDMxNC43OTEwODMzMjk2NTA4NiwyNDMuMDYxMDI0MzMzMDU0MTgsMTM3Ljc2MTYyNzAxMTc2NjMsMTEwLjgzNTE2NzU2OTYwNDkyLDUyLjAwMzYxNDYxNTIwMDc1LDE1LjQ4MzQ0ODE0MzE2MzIsMjE0LjQ0MjMwMjU4NTI5OTIyLDE2Ni45NjQ5NjQ1OTI3OTU4NywzMi42NzUyNzA0NjQ5MzI3OCwxMDAuMDIxNDU1NjA1NzAzODgsODYuMjA3NTk3NjUxOTkyNTksNjAxLjU0OTU2NTczMzEzNzUsNDI2LjkwNTk4OTM1NDEyMjE0LDM2LjAzMDM5NzM2MTU2NzgsMTAyLjc1ODkzMDIzNDA2MzM5LDU2LjU4NTQ5NTA3MjU3MjI2LDgwLjI3MDY2MDQ1MTI2OTA4LDU4LjczNzI4NzYyOTg4NTQxLDYuMTM1NjExMjI1MDYxNjE1NSwxNDkuNTY0MDI1NDYyNjE1LDkuMDgzNDc4MTgyODkxMzUsMjIuMTIyNTY2MDM1Mjc3MTYzLDEzMi4xNzA0NzM4MjEyMjIzNyw5NjQuODA0NTU4OTUzMzY3MiwxNC45NjA1NTQxNTMyMDQ3MDIsMTguMDczODQzNzczMjUzNjI1LDM0Ny44MzQ0NjM2NzAzNTcxLDI1My4yNzc1MzEwMTUxMjc3NSw0OS4zNjY4NTc3MTExOTM5NSwzNC43NzcxNTczNzU2Nzg3OSwyNjYuNjU5MjExODUwODEyMiw2NzguNTAxNjY2NjEyNzMxLDEyNS4yOTYyODE3MjIxNjI4OSw5Ljc4ODM2MDQ0MDE2MDA3NSwxMzQuOTk4NjEzMDY0NDM0NzIsNzcuNjM3MDQwNTAwNTA5MywyNi4zMDM4ODQyODIwMzMwOTYsMTY1LjQ4NTY0MzIxNDgzNTE0LDYzLjMyNTQxNDU0MDQ4NDY1LDgyLjY2NjkxMTA4MTE3Nzk3LDgxLjg5MDg5MzQ2NzkwNDczLDc0LjYzMzE3ODM3MjM4MTc0LDUuMDQ4MTk1NzcxNjI5MjEKKzUsU2F0IDI5IEphbiAxMSwwLjk0NTIxNzc2OTM4MDAyMzMsODQuODM3NTI2NTMxNDAwMjQsNTAuMjcyMDgzMDI4ODU2MzMsNDUuMDA2MjE1MDA0OTYwNiwyMDYuOTE4NTM3ODY4ODAxMiw0MS4zMjExMDE3NzQxMDU3MzUsNjE0LjM1MzY0NjYzNDc4NDUsODM3MC43Nzg0NjA2Mzc5ODYsMzE0Ljc5MTA4MzMyOTY1MDg2LDI0My4wNjEwMjQzMzMwNTQxOCwxMzcuNzYxNjI3MDExNzY2MywxMTAuODM1MTY3NTY5NjA0OTIsNTIuMDAzNjE0NjE1MjAwNzUsMTUuNDgzNDQ4MTQzMTYzMiwyMTQuNDQyMzAyNTg1Mjk5MjIsMTY2Ljk2NDk2NDU5Mjc5NTg3LDMyLjY3NTI3MDQ2NDkzMjc4LDEwMC4wMjE0NTU2MDU3MDM4OCw4Ni4yMDc1OTc2NTE5OTI1OSw2MDEuNTQ5NTY1NzMzMTM3NSw0MjYuOTA1OTg5MzU0MTIyMTQsMzYuMDMwMzk3MzYxNTY3OCwxMDIuNzU4OTMwMjM0MDYzMzksNTYuNTg1NDk1MDcyNTcyMjYsODAuMjcwNjYwNDUxMjY5MDgsNTguNzM3Mjg3NjI5ODg1NDEsNi4xMzU2MTEyMjUwNjE2MTU1LDE0OS41NjQwMjU0NjI2MTUsOS4wODM0NzgxODI4OTEzNSwyMi4xMjI1NjYwMzUyNzcxNjMsMTMyLjE3MDQ3MzgyMTIyMjM3LDk2NC44MDQ1NTg5NTMzNjcyLDE0Ljk2MDU1NDE1MzIwNDcwMiwxOC4wNzM4NDM3NzMyNTM2MjUsMzQ3LjgzNDQ2MzY3MDM1NzEsMjUzLjI3NzUzMTAxNTEyNzc1LDQ5LjM2Njg1NzcxMTE5Mzk1LDM0Ljc3NzE1NzM3NTY3ODc5LDI2Ni42NTkyMTE4NTA4MTIyLDY3OC41MDE2NjY2MTI3MzEsMTI1LjI5NjI4MTcyMjE2Mjg5LDkuNzg4MzYwNDQwMTYwMDc1LDEzNC45OTg2MTMwNjQ0MzQ3Miw3Ny42MzcwNDA1MDA1MDkzLDI2LjMwMzg4NDI4MjAzMzA5NiwxNjUuNDg1NjQzMjE0ODM1MTQsNjMuMzI1NDE0NTQwNDg0NjUsODIuNjY2OTExMDgxMTc3OTcsODEuODkwODkzNDY3OTA0NzMsNzQuNjMzMTc4MzcyMzgxNzQsNS4wNDgxOTU3NzE2MjkyMQorNixTdW4gMzAgSmFuIDExLDAuOTQ1MjE3NzY5MzgwMDIzMyw4NC44Mzc1MjY1MzE0MDAyNCw1MC4yNzIwODMwMjg4NTYzMyw0NS4wMDYyMTUwMDQ5NjA2LDIwNi45MTg1Mzc4Njg4MDEyLDQxLjMyMTEwMTc3NDEwNTczNSw2MTQuMzUzNjQ2NjM0Nzg0NSw4MzcwLjc3ODQ2MDYzNzk4NiwzMTQuNzkxMDgzMzI5NjUwODYsMjQzLjA2MTAyNDMzMzA1NDE4LDEzNy43NjE2MjcwMTE3NjYzLDExMC44MzUxNjc1Njk2MDQ5Miw1Mi4wMDM2MTQ2MTUyMDA3NSwxNS40ODM0NDgxNDMxNjMyLDIxNC40NDIzMDI1ODUyOTkyMiwxNjYuOTY0OTY0NTkyNzk1ODcsMzIuNjc1MjcwNDY0OTMyNzgsMTAwLjAyMTQ1NTYwNTcwMzg4LDg2LjIwNzU5NzY1MTk5MjU5LDYwMS41NDk1NjU3MzMxMzc1LDQyNi45MDU5ODkzNTQxMjIxNCwzNi4wMzAzOTczNjE1Njc4LDEwMi43NTg5MzAyMzQwNjMzOSw1Ni41ODU0OTUwNzI1NzIyNiw4MC4yNzA2NjA0NTEyNjkwOCw1OC43MzcyODc2Mjk4ODU0MSw2LjEzNTYxMTIyNTA2MTYxNTUsMTQ5LjU2NDAyNTQ2MjYxNSw5LjA4MzQ3ODE4Mjg5MTM1LDIyLjEyMjU2NjAzNTI3NzE2MywxMzIuMTcwNDczODIxMjIyMzcsOTY0LjgwNDU1ODk1MzM2NzIsMTQuOTYwNTU0MTUzMjA0NzAyLDE4LjA3Mzg0Mzc3MzI1MzYyNSwzNDcuODM0NDYzNjcwMzU3MSwyNTMuMjc3NTMxMDE1MTI3NzUsNDkuMzY2ODU3NzExMTkzOTUsMzQuNzc3MTU3Mzc1Njc4NzksMjY2LjY1OTIxMTg1MDgxMjIsNjc4LjUwMTY2NjYxMjczMSwxMjUuMjk2MjgxNzIyMTYyODksOS43ODgzNjA0NDAxNjAwNzUsMTM0Ljk5ODYxMzA2NDQzNDcyLDc3LjYzNzA0MDUwMDUwOTMsMjYuMzAzODg0MjgyMDMzMDk2LDE2NS40ODU2NDMyMTQ4MzUxNCw2My4zMjU0MTQ1NDA0ODQ2NSw4Mi42NjY5MTEwODExNzc5Nyw4MS44OTA4OTM0Njc5MDQ3Myw3NC42MzMxNzgzNzIzODE3NCw1LjA0ODE5NTc3MTYyOTIxCis3LE1vbiAzMSBKYW4gMTEsMC45NDUyMTc3NjkzODAwMjMzLDg0LjgzNzUyNjUzMTQwMDI0LDUwLjI3MjA4MzAyODg1NjMzLDQ1LjAwNjIxNTAwNDk2MDYsMjA2LjkxODUzNzg2ODgwMTIsNDEuMzIxMTAxNzc0MTA1NzM1LDYxNC4zNTM2NDY2MzQ3ODQ1LDgzNzAuNzc4NDYwNjM3OTg2LDMxNC43OTEwODMzMjk2NTA4NiwyNDMuMDYxMDI0MzMzMDU0MTgsMTM3Ljc2MTYyNzAxMTc2NjMsMTEwLjgzNTE2NzU2OTYwNDkyLDUyLjAwMzYxNDYxNTIwMDc1LDE1LjQ4MzQ0ODE0MzE2MzIsMjE0LjQ0MjMwMjU4NTI5OTIyLDE2Ni45NjQ5NjQ1OTI3OTU4NywzMi42NzUyNzA0NjQ5MzI3OCwxMDAuMDIxNDU1NjA1NzAzODgsODYuMjA3NTk3NjUxOTkyNTksNjAxLjU0OTU2NTczMzEzNzUsNDI2LjkwNTk4OTM1NDEyMjE0LDM2LjAzMDM5NzM2MTU2NzgsMTAyLjc1ODkzMDIzNDA2MzM5LDU2LjU4NTQ5NTA3MjU3MjI2LDgwLjI3MDY2MDQ1MTI2OTA4LDU4LjczNzI4NzYyOTg4NTQxLDYuMTM1NjExMjI1MDYxNjE1NSwxNDkuNTY0MDI1NDYyNjE1LDkuMDgzNDc4MTgyODkxMzUsMjIuMTIyNTY2MDM1Mjc3MTYzLDEzMi4xNzA0NzM4MjEyMjIzNyw5NjQuODA0NTU4OTUzMzY3MiwxNC45NjA1NTQxNTMyMDQ3MDIsMTguMDczODQzNzczMjUzNjI1LDM0Ny44MzQ0NjM2NzAzNTcxLDI1My4yNzc1MzEwMTUxMjc3NSw0OS4zNjY4NTc3MTExOTM5NSwzNC43NzcxNTczNzU2Nzg3OSwyNjYuNjU5MjExODUwODEyMiw2NzguNTAxNjY2NjEyNzMxLDEyNS4yOTYyODE3MjIxNjI4OSw5Ljc4ODM2MDQ0MDE2MDA3NSwxMzQuOTk4NjEzMDY0NDM0NzIsNzcuNjM3MDQwNTAwNTA5MywyNi4zMDM4ODQyODIwMzMwOTYsMTY1LjQ4NTY0MzIxNDgzNTE0LDYzLjMyNTQxNDU0MDQ4NDY1LDgyLjY2NjkxMTA4MTE3Nzk3LDgxLjg5MDg5MzQ2NzkwNDczLDc0LjYzMzE3ODM3MjM4MTc0LDUuMDQ4MTk1NzcxNjI5MjEKKzgsVHVlIDEgRmViIDExLDAuOTQ1MjE3NzY5MzgwMDIzMyw4NC44Mzc1MjY1MzE0MDAyNCw1MC4yNzIwODMwMjg4NTYzMyw0NS4wMDYyMTUwMDQ5NjA2LDIwNi45MTg1Mzc4Njg4MDEyLDQxLjMyMTEwMTc3NDEwNTczNSw2MTQuMzUzNjQ2NjM0Nzg0NSw4MzcwLjc3ODQ2MDYzNzk4NiwzMTQuNzkxMDgzMzI5NjUwODYsMjQzLjA2MTAyNDMzMzA1NDE4LDEzNy43NjE2MjcwMTE3NjYzLDExMC44MzUxNjc1Njk2MDQ5Miw1Mi4wMDM2MTQ2MTUyMDA3NSwxNS40ODM0NDgxNDMxNjMyLDIxNC40NDIzMDI1ODUyOTkyMiwxNjYuOTY0OTY0NTkyNzk1ODcsMzIuNjc1MjcwNDY0OTMyNzgsMTAwLjAyMTQ1NTYwNTcwMzg4LDg2LjIwNzU5NzY1MTk5MjU5LDYwMS41NDk1NjU3MzMxMzc1LDQyNi45MDU5ODkzNTQxMjIxNCwzNi4wMzAzOTczNjE1Njc4LDEwMi43NTg5MzAyMzQwNjMzOSw1Ni41ODU0OTUwNzI1NzIyNiw4MC4yNzA2NjA0NTEyNjkwOCw1OC43MzcyODc2Mjk4ODU0MSw2LjEzNTYxMTIyNTA2MTYxNTUsMTQ5LjU2NDAyNTQ2MjYxNSw5LjA4MzQ3ODE4Mjg5MTM1LDIyLjEyMjU2NjAzNTI3NzE2MywxMzIuMTcwNDczODIxMjIyMzcsOTY0LjgwNDU1ODk1MzM2NzIsMTQuOTYwNTU0MTUzMjA0NzAyLDE4LjA3Mzg0Mzc3MzI1MzYyNSwzNDcuODM0NDYzNjcwMzU3MSwyNTMuMjc3NTMxMDE1MTI3NzUsNDkuMzY2ODU3NzExMTkzOTUsMzQuNzc3MTU3Mzc1Njc4NzksMjY2LjY1OTIxMTg1MDgxMjIsNjc4LjUwMTY2NjYxMjczMSwxMjUuMjk2MjgxNzIyMTYyODksOS43ODgzNjA0NDAxNjAwNzUsMTM0Ljk5ODYxMzA2NDQzNDcyLDc3LjYzNzA0MDUwMDUwOTMsMjYuMzAzODg0MjgyMDMzMDk2LDE2NS40ODU2NDMyMTQ4MzUxNCw2My4zMjU0MTQ1NDA0ODQ2NSw4Mi42NjY5MTEwODExNzc5Nyw4MS44OTA4OTM0Njc5MDQ3Myw3NC42MzMxNzgzNzIzODE3NCw1LjA0ODE5NTc3MTYyOTIxCis5LFdlZCAyIEZlYiAxMSwwLjk0NTIxNzc2OTM4MDAyMzMsODQuODM3NTI2NTMxNDAwMjQsNTAuMjcyMDgzMDI4ODU2MzMsNDUuMDA2MjE1MDA0OTYwNiwyMDYuOTE4NTM3ODY4ODAxMiw0MS4zMjExMDE3NzQxMDU3MzUsNjE0LjM1MzY0NjYzNDc4NDUsODM3MC43Nzg0NjA2Mzc5ODYsMzE0Ljc5MTA4MzMyOTY1MDg2LDI0My4wNjEwMjQzMzMwNTQxOCwxMzcuNzYxNjI3MDExNzY2MywxMTAuODM1MTY3NTY5NjA0OTIsNTIuMDAzNjE0NjE1MjAwNzUsMTUuNDgzNDQ4MTQzMTYzMiwyMTQuNDQyMzAyNTg1Mjk5MjIsMTY2Ljk2NDk2NDU5Mjc5NTg3LDMyLjY3NTI3MDQ2NDkzMjc4LDEwMC4wMjE0NTU2MDU3MDM4OCw4Ni4yMDc1OTc2NTE5OTI1OSw2MDEuNTQ5NTY1NzMzMTM3NSw0MjYuOTA1OTg5MzU0MTIyMTQsMzYuMDMwMzk3MzYxNTY3OCwxMDIuNzU4OTMwMjM0MDYzMzksNTYuNTg1NDk1MDcyNTcyMjYsODAuMjcwNjYwNDUxMjY5MDgsNTguNzM3Mjg3NjI5ODg1NDEsNi4xMzU2MTEyMjUwNjE2MTU1LDE0OS41NjQwMjU0NjI2MTUsOS4wODM0NzgxODI4OTEzNSwyMi4xMjI1NjYwMzUyNzcxNjMsMTMyLjE3MDQ3MzgyMTIyMjM3LDk2NC44MDQ1NTg5NTMzNjcyLDE0Ljk2MDU1NDE1MzIwNDcwMiwxOC4wNzM4NDM3NzMyNTM2MjUsMzQ3LjgzNDQ2MzY3MDM1NzEsMjUzLjI3NzUzMTAxNTEyNzc1LDQ5LjM2Njg1NzcxMTE5Mzk1LDM0Ljc3NzE1NzM3NTY3ODc5LDI2Ni42NTkyMTE4NTA4MTIyLDY3OC41MDE2NjY2MTI3MzEsMTI1LjI5NjI4MTcyMjE2Mjg5LDkuNzg4MzYwNDQwMTYwMDc1LDEzNC45OTg2MTMwNjQ0MzQ3Miw3Ny42MzcwNDA1MDA1MDkzLDI2LjMwMzg4NDI4MjAzMzA5NiwxNjUuNDg1NjQzMjE0ODM1MTQsNjMuMzI1NDE0NTQwNDg0NjUsODIuNjY2OTExMDgxMTc3OTcsODEuODkwODkzNDY3OTA0NzMsNzQuNjMzMTc4MzcyMzgxNzQsNS4wNDgxOTU3NzE2MjkyMQorMTAsVGh1IDMgRmViIDExLDAuOTQ1MjE3NzY5MzgwMDIzMyw4NC44Mzc1MjY1MzE0MDAyNCw1MC4yNzIwODMwMjg4NTYzMyw0NS4wMDYyMTUwMDQ5NjA2LDIwNi45MTg1Mzc4Njg4MDEyLDQxLjMyMTEwMTc3NDEwNTczNSw2MTQuMzUzNjQ2NjM0Nzg0NSw4MzcwLjc3ODQ2MDYzNzk4NiwzMTQuNzkxMDgzMzI5NjUwODYsMjQzLjA2MTAyNDMzMzA1NDE4LDEzNy43NjE2MjcwMTE3NjYzLDExMC44MzUxNjc1Njk2MDQ5Miw1Mi4wMDM2MTQ2MTUyMDA3NSwxNS40ODM0NDgxNDMxNjMyLDIxNC40NDIzMDI1ODUyOTkyMiwxNjYuOTY0OTY0NTkyNzk1ODcsMzIuNjc1MjcwNDY0OTMyNzgsMTAwLjAyMTQ1NTYwNTcwMzg4LDg2LjIwNzU5NzY1MTk5MjU5LDYwMS41NDk1NjU3MzMxMzc1LDQyNi45MDU5ODkzNTQxMjIxNCwzNi4wMzAzOTczNjE1Njc4LDEwMi43NTg5MzAyMzQwNjMzOSw1Ni41ODU0OTUwNzI1NzIyNiw4MC4yNzA2NjA0NTEyNjkwOCw1OC43MzcyODc2Mjk4ODU0MSw2LjEzNTYxMTIyNTA2MTYxNTUsMTQ5LjU2NDAyNTQ2MjYxNSw5LjA4MzQ3ODE4Mjg5MTM1LDIyLjEyMjU2NjAzNTI3NzE2MywxMzIuMTcwNDczODIxMjIyMzcsOTY0LjgwNDU1ODk1MzM2NzIsMTQuOTYwNTU0MTUzMjA0NzAyLDE4LjA3Mzg0Mzc3MzI1MzYyNSwzNDcuODM0NDYzNjcwMzU3MSwyNTMuMjc3NTMxMDE1MTI3NzUsNDkuMzY2ODU3NzExMTkzOTUsMzQuNzc3MTU3Mzc1Njc4NzksMjY2LjY1OTIxMTg1MDgxMjIsNjc4LjUwMTY2NjYxMjczMSwxMjUuMjk2MjgxNzIyMTYyODksOS43ODgzNjA0NDAxNjAwNzUsMTM0Ljk5ODYxMzA2NDQzNDcyLDc3LjYzNzA0MDUwMDUwOTMsMjYuMzAzODg0MjgyMDMzMDk2LDE2NS40ODU2NDMyMTQ4MzUxNCw2My4zMjU0MTQ1NDA0ODQ2NSw4Mi42NjY5MTEwODExNzc5Nyw4MS44OTA4OTM0Njc5MDQ3Myw3NC42MzMxNzgzNzIzODE3NCw1LjA0ODE5NTc3MTYyOTIxCisxMSxGcmkgNCBGZWIgMTEsMC45NDUyMTc3NjkzODAwMjMzLDg0LjgzNzUyNjUzMTQwMDI0LDUwLjI3MjA4MzAyODg1NjMzLDQ1LjAwNjIxNTAwNDk2MDYsMjA2LjkxODUzNzg2ODgwMTIsNDEuMzIxMTAxNzc0MTA1NzM1LDYxNC4zNTM2NDY2MzQ3ODQ1LDgzNzAuNzc4NDYwNjM3OTg2LDMxNC43OTEwODMzMjk2NTA4NiwyNDMuMDYxMDI0MzMzMDU0MTgsMTM3Ljc2MTYyNzAxMTc2NjMsMTEwLjgzNTE2NzU2OTYwNDkyLDUyLjAwMzYxNDYxNTIwMDc1LDE1LjQ4MzQ0ODE0MzE2MzIsMjE0LjQ0MjMwMjU4NTI5OTIyLDE2Ni45NjQ5NjQ1OTI3OTU4NywzMi42NzUyNzA0NjQ5MzI3OCwxMDAuMDIxNDU1NjA1NzAzODgsODYuMjA3NTk3NjUxOTkyNTksNjAxLjU0OTU2NTczMzEzNzUsNDI2LjkwNTk4OTM1NDEyMjE0LDM2LjAzMDM5NzM2MTU2NzgsMTAyLjc1ODkzMDIzNDA2MzM5LDU2LjU4NTQ5NTA3MjU3MjI2LDgwLjI3MDY2MDQ1MTI2OTA4LDU4LjczNzI4NzYyOTg4NTQxLDYuMTM1NjExMjI1MDYxNjE1NSwxNDkuNTY0MDI1NDYyNjE1LDkuMDgzNDc4MTgyODkxMzUsMjIuMTIyNTY2MDM1Mjc3MTYzLDEzMi4xNzA0NzM4MjEyMjIzNyw5NjQuODA0NTU4OTUzMzY3MiwxNC45NjA1NTQxNTMyMDQ3MDIsMTguMDczODQzNzczMjUzNjI1LDM0Ny44MzQ0NjM2NzAzNTcxLDI1My4yNzc1MzEwMTUxMjc3NSw0OS4zNjY4NTc3MTExOTM5NSwzNC43NzcxNTczNzU2Nzg3OSwyNjYuNjU5MjExODUwODEyMiw2NzguNTAxNjY2NjEyNzMxLDEyNS4yOTYyODE3MjIxNjI4OSw5Ljc4ODM2MDQ0MDE2MDA3NSwxMzQuOTk4NjEzMDY0NDM0NzIsNzcuNjM3MDQwNTAwNTA5MywyNi4zMDM4ODQyODIwMzMwOTYsMTY1LjQ4NTY0MzIxNDgzNTE0LDYzLjMyNTQxNDU0MDQ4NDY1LDgyLjY2NjkxMTA4MTE3Nzk3LDgxLjg5MDg5MzQ2NzkwNDczLDc0LjYzMzE3ODM3MjM4MTc0LDUuMDQ4MTk1NzcxNjI5MjEKKzEyLFNhdCA1IEZlYiAxMSwwLjk0NTIxNzc2OTM4MDAyMzMsODQuODM3NTI2NTMxNDAwMjQsNTAuMjcyMDgzMDI4ODU2MzMsNDUuMDA2MjE1MDA0OTYwNiwyMDYuOTE4NTM3ODY4ODAxMiw0MS4zMjExMDE3NzQxMDU3MzUsNjE0LjM1MzY0NjYzNDc4NDUsODM3MC43Nzg0NjA2Mzc5ODYsMzE0Ljc5MTA4MzMyOTY1MDg2LDI0My4wNjEwMjQzMzMwNTQxOCwxMzcuNzYxNjI3MDExNzY2MywxMTAuODM1MTY3NTY5NjA0OTIsNTIuMDAzNjE0NjE1MjAwNzUsMTUuNDgzNDQ4MTQzMTYzMiwyMTQuNDQyMzAyNTg1Mjk5MjIsMTY2Ljk2NDk2NDU5Mjc5NTg3LDMyLjY3NTI3MDQ2NDkzMjc4LDEwMC4wMjE0NTU2MDU3MDM4OCw4Ni4yMDc1OTc2NTE5OTI1OSw2MDEuNTQ5NTY1NzMzMTM3NSw0MjYuOTA1OTg5MzU0MTIyMTQsMzYuMDMwMzk3MzYxNTY3OCwxMDIuNzU4OTMwMjM0MDYzMzksNTYuNTg1NDk1MDcyNTcyMjYsODAuMjcwNjYwNDUxMjY5MDgsNTguNzM3Mjg3NjI5ODg1NDEsNi4xMzU2MTEyMjUwNjE2MTU1LDE0OS41NjQwMjU0NjI2MTUsOS4wODM0NzgxODI4OTEzNSwyMi4xMjI1NjYwMzUyNzcxNjMsMTMyLjE3MDQ3MzgyMTIyMjM3LDk2NC44MDQ1NTg5NTMzNjcyLDE0Ljk2MDU1NDE1MzIwNDcwMiwxOC4wNzM4NDM3NzMyNTM2MjUsMzQ3LjgzNDQ2MzY3MDM1NzEsMjUzLjI3NzUzMTAxNTEyNzc1LDQ5LjM2Njg1NzcxMTE5Mzk1LDM0Ljc3NzE1NzM3NTY3ODc5LDI2Ni42NTkyMTE4NTA4MTIyLDY3OC41MDE2NjY2MTI3MzEsMTI1LjI5NjI4MTcyMjE2Mjg5LDkuNzg4MzYwNDQwMTYwMDc1LDEzNC45OTg2MTMwNjQ0MzQ3Miw3Ny42MzcwNDA1MDA1MDkzLDI2LjMwMzg4NDI4MjAzMzA5NiwxNjUuNDg1NjQzMjE0ODM1MTQsNjMuMzI1NDE0NTQwNDg0NjUsODIuNjY2OTExMDgxMTc3OTcsODEuODkwODkzNDY3OTA0NzMsNzQuNjMzMTc4MzcyMzgxNzQsNS4wNDgxOTU3NzE2MjkyMQorMTMsU3VuIDYgRmViIDExLDAuOTQ1MjE3NzY5MzgwMDIzMyw4NC44Mzc1MjY1MzE0MDAyNCw1MC4yNzIwODMwMjg4NTYzMyw0NS4wMDYyMTUwMDQ5NjA2LDIwNi45MTg1Mzc4Njg4MDEyLDQxLjMyMTEwMTc3NDEwNTczNSw2MTQuMzUzNjQ2NjM0Nzg0NSw4MzcwLjc3ODQ2MDYzNzk4NiwzMTQuNzkxMDgzMzI5NjUwODYsMjQzLjA2MTAyNDMzMzA1NDE4LDEzNy43NjE2MjcwMTE3NjYzLDExMC44MzUxNjc1Njk2MDQ5Miw1Mi4wMDM2MTQ2MTUyMDA3NSwxNS40ODM0NDgxNDMxNjMyLDIxNC40NDIzMDI1ODUyOTkyMiwxNjYuOTY0OTY0NTkyNzk1ODcsMzIuNjc1MjcwNDY0OTMyNzgsMTAwLjAyMTQ1NTYwNTcwMzg4LDg2LjIwNzU5NzY1MTk5MjU5LDYwMS41NDk1NjU3MzMxMzc1LDQyNi45MDU5ODkzNTQxMjIxNCwzNi4wMzAzOTczNjE1Njc4LDEwMi43NTg5MzAyMzQwNjMzOSw1Ni41ODU0OTUwNzI1NzIyNiw4MC4yNzA2NjA0NTEyNjkwOCw1OC43MzcyODc2Mjk4ODU0MSw2LjEzNTYxMTIyNTA2MTYxNTUsMTQ5LjU2NDAyNTQ2MjYxNSw5LjA4MzQ3ODE4Mjg5MTM1LDIyLjEyMjU2NjAzNTI3NzE2MywxMzIuMTcwNDczODIxMjIyMzcsOTY0LjgwNDU1ODk1MzM2NzIsMTQuOTYwNTU0MTUzMjA0NzAyLDE4LjA3Mzg0Mzc3MzI1MzYyNSwzNDcuODM0NDYzNjcwMzU3MSwyNTMuMjc3NTMxMDE1MTI3NzUsNDkuMzY2ODU3NzExMTkzOTUsMzQuNzc3MTU3Mzc1Njc4NzksMjY2LjY1OTIxMTg1MDgxMjIsNjc4LjUwMTY2NjYxMjczMSwxMjUuMjk2MjgxNzIyMTYyODksOS43ODgzNjA0NDAxNjAwNzUsMTM0Ljk5ODYxMzA2NDQzNDcyLDc3LjYzNzA0MDUwMDUwOTMsMjYuMzAzODg0MjgyMDMzMDk2LDE2NS40ODU2NDMyMTQ4MzUxNCw2My4zMjU0MTQ1NDA0ODQ2NSw4Mi42NjY5MTEwODExNzc5Nyw4MS44OTA4OTM0Njc5MDQ3Myw3NC42MzMxNzgzNzIzODE3NCw1LjA0ODE5NTc3MTYyOTIxCisxNCxNb24gNyBGZWIgMTEsMC45NDUyMTc3NjkzODAwMjMzLDg0LjgzNzUyNjUzMTQwMDI0LDUwLjI3MjA4MzAyODg1NjMzLDQ1LjAwNjIxNTAwNDk2MDYsMjA2LjkxODUzNzg2ODgwMTIsNDEuMzIxMTAxNzc0MTA1NzM1LDYxNC4zNTM2NDY2MzQ3ODQ1LDgzNzAuNzc4NDYwNjM3OTg2LDMxNC43OTEwODMzMjk2NTA4NiwyNDMuMDYxMDI0MzMzMDU0MTgsMTM3Ljc2MTYyNzAxMTc2NjMsMTEwLjgzNTE2NzU2OTYwNDkyLDUyLjAwMzYxNDYxNTIwMDc1LDE1LjQ4MzQ0ODE0MzE2MzIsMjE0LjQ0MjMwMjU4NTI5OTIyLDE2Ni45NjQ5NjQ1OTI3OTU4NywzMi42NzUyNzA0NjQ5MzI3OCwxMDAuMDIxNDU1NjA1NzAzODgsODYuMjA3NTk3NjUxOTkyNTksNjAxLjU0OTU2NTczMzEzNzUsNDI2LjkwNTk4OTM1NDEyMjE0LDM2LjAzMDM5NzM2MTU2NzgsMTAyLjc1ODkzMDIzNDA2MzM5LDU2LjU4NTQ5NTA3MjU3MjI2LDgwLjI3MDY2MDQ1MTI2OTA4LDU4LjczNzI4NzYyOTg4NTQxLDYuMTM1NjExMjI1MDYxNjE1NSwxNDkuNTY0MDI1NDYyNjE1LDkuMDgzNDc4MTgyODkxMzUsMjIuMTIyNTY2MDM1Mjc3MTYzLDEzMi4xNzA0NzM4MjEyMjIzNyw5NjQuODA0NTU4OTUzMzY3MiwxNC45NjA1NTQxNTMyMDQ3MDIsMTguMDczODQzNzczMjUzNjI1LDM0Ny44MzQ0NjM2NzAzNTcxLDI1My4yNzc1MzEwMTUxMjc3NSw0OS4zNjY4NTc3MTExOTM5NSwzNC43NzcxNTczNzU2Nzg3OSwyNjYuNjU5MjExODUwODEyMiw2NzguNTAxNjY2NjEyNzMxLDEyNS4yOTYyODE3MjIxNjI4OSw5Ljc4ODM2MDQ0MDE2MDA3NSwxMzQuOTk4NjEzMDY0NDM0NzIsNzcuNjM3MDQwNTAwNTA5MywyNi4zMDM4ODQyODIwMzMwOTYsMTY1LjQ4NTY0MzIxNDgzNTE0LDYzLjMyNTQxNDU0MDQ4NDY1LDgyLjY2NjkxMTA4MTE3Nzk3LDgxLjg5MDg5MzQ2NzkwNDczLDc0LjYzMzE3ODM3MjM4MTc0LDUuMDQ4MTk1NzcxNjI5MjEKKzE1LFR1ZSA4IEZlYiAxMSwwLjk0NTIxNzc2OTM4MDAyMzMsODQuODM3NTI2NTMxNDAwMjQsNTAuMjcyMDgzMDI4ODU2MzMsNDUuMDA2MjE1MDA0OTYwNiwyMDYuOTE4NTM3ODY4ODAxMiw0MS4zMjExMDE3NzQxMDU3MzUsNjE0LjM1MzY0NjYzNDc4NDUsODM3MC43Nzg0NjA2Mzc5ODYsMzE0Ljc5MTA4MzMyOTY1MDg2LDI0My4wNjEwMjQzMzMwNTQxOCwxMzcuNzYxNjI3MDExNzY2MywxMTAuODM1MTY3NTY5NjA0OTIsNTIuMDAzNjE0NjE1MjAwNzUsMTUuNDgzNDQ4MTQzMTYzMiwyMTQuNDQyMzAyNTg1Mjk5MjIsMTY2Ljk2NDk2NDU5Mjc5NTg3LDMyLjY3NTI3MDQ2NDkzMjc4LDEwMC4wMjE0NTU2MDU3MDM4OCw4Ni4yMDc1OTc2NTE5OTI1OSw2MDEuNTQ5NTY1NzMzMTM3NSw0MjYuOTA1OTg5MzU0MTIyMTQsMzYuMDMwMzk3MzYxNTY3OCwxMDIuNzU4OTMwMjM0MDYzMzksNTYuNTg1NDk1MDcyNTcyMjYsODAuMjcwNjYwNDUxMjY5MDgsNTguNzM3Mjg3NjI5ODg1NDEsNi4xMzU2MTEyMjUwNjE2MTU1LDE0OS41NjQwMjU0NjI2MTUsOS4wODM0NzgxODI4OTEzNSwyMi4xMjI1NjYwMzUyNzcxNjMsMTMyLjE3MDQ3MzgyMTIyMjM3LDk2NC44MDQ1NTg5NTMzNjcyLDE0Ljk2MDU1NDE1MzIwNDcwMiwxOC4wNzM4NDM3NzMyNTM2MjUsMzQ3LjgzNDQ2MzY3MDM1NzEsMjUzLjI3NzUzMTAxNTEyNzc1LDQ5LjM2Njg1NzcxMTE5Mzk1LDM0Ljc3NzE1NzM3NTY3ODc5LDI2Ni42NTkyMTE4NTA4MTIyLDY3OC41MDE2NjY2MTI3MzEsMTI1LjI5NjI4MTcyMjE2Mjg5LDkuNzg4MzYwNDQwMTYwMDc1LDEzNC45OTg2MTMwNjQ0MzQ3Miw3Ny42MzcwNDA1MDA1MDkzLDI2LjMwMzg4NDI4MjAzMzA5NiwxNjUuNDg1NjQzMjE0ODM1MTQsNjMuMzI1NDE0NTQwNDg0NjUsODIuNjY2OTExMDgxMTc3OTcsODEuODkwODkzNDY3OTA0NzMsNzQuNjMzMTc4MzcyMzgxNzQsNS4wNDgxOTU3NzE2MjkyMQorMTYsV2VkIDkgRmViIDExLDAuOTQ1MjE3NzY5MzgwMDIzMyw4NC44Mzc1MjY1MzE0MDAyNCw1MC4yNzIwODMwMjg4NTYzMyw0NS4wMDYyMTUwMDQ5NjA2LDIwNi45MTg1Mzc4Njg4MDEyLDQxLjMyMTEwMTc3NDEwNTczNSw2MTQuMzUzNjQ2NjM0Nzg0NSw4MzcwLjc3ODQ2MDYzNzk4NiwzMTQuNzkxMDgzMzI5NjUwODYsMjQzLjA2MTAyNDMzMzA1NDE4LDEzNy43NjE2MjcwMTE3NjYzLDExMC44MzUxNjc1Njk2MDQ5Miw1Mi4wMDM2MTQ2MTUyMDA3NSwxNS40ODM0NDgxNDMxNjMyLDIxNC40NDIzMDI1ODUyOTkyMiwxNjYuOTY0OTY0NTkyNzk1ODcsMzIuNjc1MjcwNDY0OTMyNzgsMTAwLjAyMTQ1NTYwNTcwMzg4LDg2LjIwNzU5NzY1MTk5MjU5LDYwMS41NDk1NjU3MzMxMzc1LDQyNi45MDU5ODkzNTQxMjIxNCwzNi4wMzAzOTczNjE1Njc4LDEwMi43NTg5MzAyMzQwNjMzOSw1Ni41ODU0OTUwNzI1NzIyNiw4MC4yNzA2NjA0NTEyNjkwOCw1OC43MzcyODc2Mjk4ODU0MSw2LjEzNTYxMTIyNTA2MTYxNTUsMTQ5LjU2NDAyNTQ2MjYxNSw5LjA4MzQ3ODE4Mjg5MTM1LDIyLjEyMjU2NjAzNTI3NzE2MywxMzIuMTcwNDczODIxMjIyMzcsOTY0LjgwNDU1ODk1MzM2NzIsMTQuOTYwNTU0MTUzMjA0NzAyLDE4LjA3Mzg0Mzc3MzI1MzYyNSwzNDcuODM0NDYzNjcwMzU3MSwyNTMuMjc3NTMxMDE1MTI3NzUsNDkuMzY2ODU3NzExMTkzOTUsMzQuNzc3MTU3Mzc1Njc4NzksMjY2LjY1OTIxMTg1MDgxMjIsNjc4LjUwMTY2NjYxMjczMSwxMjUuMjk2MjgxNzIyMTYyODksOS43ODgzNjA0NDAxNjAwNzUsMTM0Ljk5ODYxMzA2NDQzNDcyLDc3LjYzNzA0MDUwMDUwOTMsMjYuMzAzODg0MjgyMDMzMDk2LDE2NS40ODU2NDMyMTQ4MzUxNCw2My4zMjU0MTQ1NDA0ODQ2NSw4Mi42NjY5MTEwODExNzc5Nyw4MS44OTA4OTM0Njc5MDQ3Myw3NC42MzMxNzgzNzIzODE3NCw1LjA0ODE5NTc3MTYyOTIxCisxNyxUaHUgMTAgRmViIDExLDAuOTQ1MjE3NzY5MzgwMDIzMyw4NC44Mzc1MjY1MzE0MDAyNCw1MC4yNzIwODMwMjg4NTYzMyw0NS4wMDYyMTUwMDQ5NjA2LDIwNi45MTg1Mzc4Njg4MDEyLDQxLjMyMTEwMTc3NDEwNTczNSw2MTQuMzUzNjQ2NjM0Nzg0NSw4MzcwLjc3ODQ2MDYzNzk4NiwzMTQuNzkxMDgzMzI5NjUwODYsMjQzLjA2MTAyNDMzMzA1NDE4LDEzNy43NjE2MjcwMTE3NjYzLDExMC44MzUxNjc1Njk2MDQ5Miw1Mi4wMDM2MTQ2MTUyMDA3NSwxNS40ODM0NDgxNDMxNjMyLDIxNC40NDIzMDI1ODUyOTkyMiwxNjYuOTY0OTY0NTkyNzk1ODcsMzIuNjc1MjcwNDY0OTMyNzgsMTAwLjAyMTQ1NTYwNTcwMzg4LDg2LjIwNzU5NzY1MTk5MjU5LDYwMS41NDk1NjU3MzMxMzc1LDQyNi45MDU5ODkzNTQxMjIxNCwzNi4wMzAzOTczNjE1Njc4LDEwMi43NTg5MzAyMzQwNjMzOSw1Ni41ODU0OTUwNzI1NzIyNiw4MC4yNzA2NjA0NTEyNjkwOCw1OC43MzcyODc2Mjk4ODU0MSw2LjEzNTYxMTIyNTA2MTYxNTUsMTQ5LjU2NDAyNTQ2MjYxNSw5LjA4MzQ3ODE4Mjg5MTM1LDIyLjEyMjU2NjAzNTI3NzE2MywxMzIuMTcwNDczODIxMjIyMzcsOTY0LjgwNDU1ODk1MzM2NzIsMTQuOTYwNTU0MTUzMjA0NzAyLDE4LjA3Mzg0Mzc3MzI1MzYyNSwzNDcuODM0NDYzNjcwMzU3MSwyNTMuMjc3NTMxMDE1MTI3NzUsNDkuMzY2ODU3NzExMTkzOTUsMzQuNzc3MTU3Mzc1Njc4NzksMjY2LjY1OTIxMTg1MDgxMjIsNjc4LjUwMTY2NjYxMjczMSwxMjUuMjk2MjgxNzIyMTYyODksOS43ODgzNjA0NDAxNjAwNzUsMTM0Ljk5ODYxMzA2NDQzNDcyLDc3LjYzNzA0MDUwMDUwOTMsMjYuMzAzODg0MjgyMDMzMDk2LDE2NS40ODU2NDMyMTQ4MzUxNCw2My4zMjU0MTQ1NDA0ODQ2NSw4Mi42NjY5MTEwODExNzc5Nyw4MS44OTA4OTM0Njc5MDQ3Myw3NC42MzMxNzgzNzIzODE3NCw1LjA0ODE5NTc3MTYyOTIxCisxOCxGcmkgMTEgRmViIDExLDAuOTQ1MjE3NzY5MzgwMDIzMyw4NC44Mzc1MjY1MzE0MDAyNCw1MC4yNzIwODMwMjg4NTYzMyw0NS4wMDYyMTUwMDQ5NjA2LDIwNi45MTg1Mzc4Njg4MDEyLDQxLjMyMTEwMTc3NDEwNTczNSw2MTQuMzUzNjQ2NjM0Nzg0NSw4MzcwLjc3ODQ2MDYzNzk4NiwzMTQuNzkxMDgzMzI5NjUwODYsMjQzLjA2MTAyNDMzMzA1NDE4LDEzNy43NjE2MjcwMTE3NjYzLDExMC44MzUxNjc1Njk2MDQ5Miw1Mi4wMDM2MTQ2MTUyMDA3NSwxNS40ODM0NDgxNDMxNjMyLDIxNC40NDIzMDI1ODUyOTkyMiwxNjYuOTY0OTY0NTkyNzk1ODcsMzIuNjc1MjcwNDY0OTMyNzgsMTAwLjAyMTQ1NTYwNTcwMzg4LDg2LjIwNzU5NzY1MTk5MjU5LDYwMS41NDk1NjU3MzMxMzc1LDQyNi45MDU5ODkzNTQxMjIxNCwzNi4wMzAzOTczNjE1Njc4LDEwMi43NTg5MzAyMzQwNjMzOSw1Ni41ODU0OTUwNzI1NzIyNiw4MC4yNzA2NjA0NTEyNjkwOCw1OC43MzcyODc2Mjk4ODU0MSw2LjEzNTYxMTIyNTA2MTYxNTUsMTQ5LjU2NDAyNTQ2MjYxNSw5LjA4MzQ3ODE4Mjg5MTM1LDIyLjEyMjU2NjAzNTI3NzE2MywxMzIuMTcwNDczODIxMjIyMzcsOTY0LjgwNDU1ODk1MzM2NzIsMTQuOTYwNTU0MTUzMjA0NzAyLDE4LjA3Mzg0Mzc3MzI1MzYyNSwzNDcuODM0NDYzNjcwMzU3MSwyNTMuMjc3NTMxMDE1MTI3NzUsNDkuMzY2ODU3NzExMTkzOTUsMzQuNzc3MTU3Mzc1Njc4NzksMjY2LjY1OTIxMTg1MDgxMjIsNjc4LjUwMTY2NjYxMjczMSwxMjUuMjk2MjgxNzIyMTYyODksOS43ODgzNjA0NDAxNjAwNzUsMTM0Ljk5ODYxMzA2NDQzNDcyLDc3LjYzNzA0MDUwMDUwOTMsMjYuMzAzODg0MjgyMDMzMDk2LDE2NS40ODU2NDMyMTQ4MzUxNCw2My4zMjU0MTQ1NDA0ODQ2NSw4Mi42NjY5MTEwODExNzc5Nyw4MS44OTA4OTM0Njc5MDQ3Myw3NC42MzMxNzgzNzIzODE3NCw1LjA0ODE5NTc3MTYyOTIxCisxOSxTYXQgMTIgRmViIDExLDAuOTQ1MjE3NzY5MzgwMDIzMyw4NC44Mzc1MjY1MzE0MDAyNCw1MC4yNzIwODMwMjg4NTYzMyw0NS4wMDYyMTUwMDQ5NjA2LDIwNi45MTg1Mzc4Njg4MDEyLDQxLjMyMTEwMTc3NDEwNTczNSw2MTQuMzUzNjQ2NjM0Nzg0NSw4MzcwLjc3ODQ2MDYzNzk4NiwzMTQuNzkxMDgzMzI5NjUwODYsMjQzLjA2MTAyNDMzMzA1NDE4LDEzNy43NjE2MjcwMTE3NjYzLDExMC44MzUxNjc1Njk2MDQ5Miw1Mi4wMDM2MTQ2MTUyMDA3NSwxNS40ODM0NDgxNDMxNjMyLDIxNC40NDIzMDI1ODUyOTkyMiwxNjYuOTY0OTY0NTkyNzk1ODcsMzIuNjc1MjcwNDY0OTMyNzgsMTAwLjAyMTQ1NTYwNTcwMzg4LDg2LjIwNzU5NzY1MTk5MjU5LDYwMS41NDk1NjU3MzMxMzc1LDQyNi45MDU5ODkzNTQxMjIxNCwzNi4wMzAzOTczNjE1Njc4LDEwMi43NTg5MzAyMzQwNjMzOSw1Ni41ODU0OTUwNzI1NzIyNiw4MC4yNzA2NjA0NTEyNjkwOCw1OC43MzcyODc2Mjk4ODU0MSw2LjEzNTYxMTIyNTA2MTYxNTUsMTQ5LjU2NDAyNTQ2MjYxNSw5LjA4MzQ3ODE4Mjg5MTM1LDIyLjEyMjU2NjAzNTI3NzE2MywxMzIuMTcwNDczODIxMjIyMzcsOTY0LjgwNDU1ODk1MzM2NzIsMTQuOTYwNTU0MTUzMjA0NzAyLDE4LjA3Mzg0Mzc3MzI1MzYyNSwzNDcuODM0NDYzNjcwMzU3MSwyNTMuMjc3NTMxMDE1MTI3NzUsNDkuMzY2ODU3NzExMTkzOTUsMzQuNzc3MTU3Mzc1Njc4NzksMjY2LjY1OTIxMTg1MDgxMjIsNjc4LjUwMTY2NjYxMjczMSwxMjUuMjk2MjgxNzIyMTYyODksOS43ODgzNjA0NDAxNjAwNzUsMTM0Ljk5ODYxMzA2NDQzNDcyLDc3LjYzNzA0MDUwMDUwOTMsMjYuMzAzODg0MjgyMDMzMDk2LDE2NS40ODU2NDMyMTQ4MzUxNCw2My4zMjU0MTQ1NDA0ODQ2NSw4Mi42NjY5MTEwODExNzc5Nyw4MS44OTA4OTM0Njc5MDQ3Myw3NC42MzMxNzgzNzIzODE3NCw1LjA0ODE5NTc3MTYyOTIxCisyMCxTdW4gMTMgRmViIDExLDAuOTQ1MjE3NzY5MzgwMDIzMyw4NC44Mzc1MjY1MzE0MDAyNCw1MC4yNzIwODMwMjg4NTYzMyw0NS4wMDYyMTUwMDQ5NjA2LDIwNi45MTg1Mzc4Njg4MDEyLDQxLjMyMTEwMTc3NDEwNTczNSw2MTQuMzUzNjQ2NjM0Nzg0NSw4MzcwLjc3ODQ2MDYzNzk4NiwzMTQuNzkxMDgzMzI5NjUwODYsMjQzLjA2MTAyNDMzMzA1NDE4LDEzNy43NjE2MjcwMTE3NjYzLDExMC44MzUxNjc1Njk2MDQ5Miw1Mi4wMDM2MTQ2MTUyMDA3NSwxNS40ODM0NDgxNDMxNjMyLDIxNC40NDIzMDI1ODUyOTkyMiwxNjYuOTY0OTY0NTkyNzk1ODcsMzIuNjc1MjcwNDY0OTMyNzgsMTAwLjAyMTQ1NTYwNTcwMzg4LDg2LjIwNzU5NzY1MTk5MjU5LDYwMS41NDk1NjU3MzMxMzc1LDQyNi45MDU5ODkzNTQxMjIxNCwzNi4wMzAzOTczNjE1Njc4LDEwMi43NTg5MzAyMzQwNjMzOSw1Ni41ODU0OTUwNzI1NzIyNiw4MC4yNzA2NjA0NTEyNjkwOCw1OC43MzcyODc2Mjk4ODU0MSw2LjEzNTYxMTIyNTA2MTYxNTUsMTQ5LjU2NDAyNTQ2MjYxNSw5LjA4MzQ3ODE4Mjg5MTM1LDIyLjEyMjU2NjAzNTI3NzE2MywxMzIuMTcwNDczODIxMjIyMzcsOTY0LjgwNDU1ODk1MzM2NzIsMTQuOTYwNTU0MTUzMjA0NzAyLDE4LjA3Mzg0Mzc3MzI1MzYyNSwzNDcuODM0NDYzNjcwMzU3MSwyNTMuMjc3NTMxMDE1MTI3NzUsNDkuMzY2ODU3NzExMTkzOTUsMzQuNzc3MTU3Mzc1Njc4NzksMjY2LjY1OTIxMTg1MDgxMjIsNjc4LjUwMTY2NjYxMjczMSwxMjUuMjk2MjgxNzIyMTYyODksOS43ODgzNjA0NDAxNjAwNzUsMTM0Ljk5ODYxMzA2NDQzNDcyLDc3LjYzNzA0MDUwMDUwOTMsMjYuMzAzODg0MjgyMDMzMDk2LDE2NS40ODU2NDMyMTQ4MzUxNCw2My4zMjU0MTQ1NDA0ODQ2NSw4Mi42NjY5MTEwODExNzc5Nyw4MS44OTA4OTM0Njc5MDQ3Myw3NC42MzMxNzgzNzIzODE3NCw1LjA0ODE5NTc3MTYyOTIxCisyMSxNb24gMTQgRmViIDExLDAuOTQ1MjE3NzY5MzgwMDIzMyw4NC44Mzc1MjY1MzE0MDAyNCw1MC4yNzIwODMwMjg4NTYzMyw0NS4wMDYyMTUwMDQ5NjA2LDIwNi45MTg1Mzc4Njg4MDEyLDQxLjMyMTEwMTc3NDEwNTczNSw2MTQuMzUzNjQ2NjM0Nzg0NSw4MzcwLjc3ODQ2MDYzNzk4NiwzMTQuNzkxMDgzMzI5NjUwODYsMjQzLjA2MTAyNDMzMzA1NDE4LDEzNy43NjE2MjcwMTE3NjYzLDExMC44MzUxNjc1Njk2MDQ5Miw1Mi4wMDM2MTQ2MTUyMDA3NSwxNS40ODM0NDgxNDMxNjMyLDIxNC40NDIzMDI1ODUyOTkyMiwxNjYuOTY0OTY0NTkyNzk1ODcsMzIuNjc1MjcwNDY0OTMyNzgsMTAwLjAyMTQ1NTYwNTcwMzg4LDg2LjIwNzU5NzY1MTk5MjU5LDYwMS41NDk1NjU3MzMxMzc1LDQyNi45MDU5ODkzNTQxMjIxNCwzNi4wMzAzOTczNjE1Njc4LDEwMi43NTg5MzAyMzQwNjMzOSw1Ni41ODU0OTUwNzI1NzIyNiw4MC4yNzA2NjA0NTEyNjkwOCw1OC43MzcyODc2Mjk4ODU0MSw2LjEzNTYxMTIyNTA2MTYxNTUsMTQ5LjU2NDAyNTQ2MjYxNSw5LjA4MzQ3ODE4Mjg5MTM1LDIyLjEyMjU2NjAzNTI3NzE2MywxMzIuMTcwNDczODIxMjIyMzcsOTY0LjgwNDU1ODk1MzM2NzIsMTQuOTYwNTU0MTUzMjA0NzAyLDE4LjA3Mzg0Mzc3MzI1MzYyNSwzNDcuODM0NDYzNjcwMzU3MSwyNTMuMjc3NTMxMDE1MTI3NzUsNDkuMzY2ODU3NzExMTkzOTUsMzQuNzc3MTU3Mzc1Njc4NzksMjY2LjY1OTIxMTg1MDgxMjIsNjc4LjUwMTY2NjYxMjczMSwxMjUuMjk2MjgxNzIyMTYyODksOS43ODgzNjA0NDAxNjAwNzUsMTM0Ljk5ODYxMzA2NDQzNDcyLDc3LjYzNzA0MDUwMDUwOTMsMjYuMzAzODg0MjgyMDMzMDk2LDE2NS40ODU2NDMyMTQ4MzUxNCw2My4zMjU0MTQ1NDA0ODQ2NSw4Mi42NjY5MTEwODExNzc5Nyw4MS44OTA4OTM0Njc5MDQ3Myw3NC42MzMxNzgzNzIzODE3NCw1LjA0ODE5NTc3MTYyOTIxCisyMixUdWUgMTUgRmViIDExLDAuOTQ1MjE3NzY5MzgwMDIzMyw4NC44Mzc1MjY1MzE0MDAyNCw1MC4yNzIwODMwMjg4NTYzMyw0NS4wMDYyMTUwMDQ5NjA2LDIwNi45MTg1Mzc4Njg4MDEyLDQxLjMyMTEwMTc3NDEwNTczNSw2MTQuMzUzNjQ2NjM0Nzg0NSw4MzcwLjc3ODQ2MDYzNzk4NiwzMTQuNzkxMDgzMzI5NjUwODYsMjQzLjA2MTAyNDMzMzA1NDE4LDEzNy43NjE2MjcwMTE3NjYzLDExMC44MzUxNjc1Njk2MDQ5Miw1Mi4wMDM2MTQ2MTUyMDA3NSwxNS40ODM0NDgxNDMxNjMyLDIxNC40NDIzMDI1ODUyOTkyMiwxNjYuOTY0OTY0NTkyNzk1ODcsMzIuNjc1MjcwNDY0OTMyNzgsMTAwLjAyMTQ1NTYwNTcwMzg4LDg2LjIwNzU5NzY1MTk5MjU5LDYwMS41NDk1NjU3MzMxMzc1LDQyNi45MDU5ODkzNTQxMjIxNCwzNi4wMzAzOTczNjE1Njc4LDEwMi43NTg5MzAyMzQwNjMzOSw1Ni41ODU0OTUwNzI1NzIyNiw4MC4yNzA2NjA0NTEyNjkwOCw1OC43MzcyODc2Mjk4ODU0MSw2LjEzNTYxMTIyNTA2MTYxNTUsMTQ5LjU2NDAyNTQ2MjYxNSw5LjA4MzQ3ODE4Mjg5MTM1LDIyLjEyMjU2NjAzNTI3NzE2MywxMzIuMTcwNDczODIxMjIyMzcsOTY0LjgwNDU1ODk1MzM2NzIsMTQuOTYwNTU0MTUzMjA0NzAyLDE4LjA3Mzg0Mzc3MzI1MzYyNSwzNDcuODM0NDYzNjcwMzU3MSwyNTMuMjc3NTMxMDE1MTI3NzUsNDkuMzY2ODU3NzExMTkzOTUsMzQuNzc3MTU3Mzc1Njc4NzksMjY2LjY1OTIxMTg1MDgxMjIsNjc4LjUwMTY2NjYxMjczMSwxMjUuMjk2MjgxNzIyMTYyODksOS43ODgzNjA0NDAxNjAwNzUsMTM0Ljk5ODYxMzA2NDQzNDcyLDc3LjYzNzA0MDUwMDUwOTMsMjYuMzAzODg0MjgyMDMzMDk2LDE2NS40ODU2NDMyMTQ4MzUxNCw2My4zMjU0MTQ1NDA0ODQ2NSw4Mi42NjY5MTEwODExNzc5Nyw4MS44OTA4OTM0Njc5MDQ3Myw3NC42MzMxNzgzNzIzODE3NCw1LjA0ODE5NTc3MTYyOTIxCisyMyxXZWQgMTYgRmViIDExLDAuOTQ1MjE3NzY5MzgwMDIzMyw4NC44Mzc1MjY1MzE0MDAyNCw1MC4yNzIwODMwMjg4NTYzMyw0NS4wMDYyMTUwMDQ5NjA2LDIwNi45MTg1Mzc4Njg4MDEyLDQxLjMyMTEwMTc3NDEwNTczNSw2MTQuMzUzNjQ2NjM0Nzg0NSw4MzcwLjc3ODQ2MDYzNzk4NiwzMTQuNzkxMDgzMzI5NjUwODYsMjQzLjA2MTAyNDMzMzA1NDE4LDEzNy43NjE2MjcwMTE3NjYzLDExMC44MzUxNjc1Njk2MDQ5Miw1Mi4wMDM2MTQ2MTUyMDA3NSwxNS40ODM0NDgxNDMxNjMyLDIxNC40NDIzMDI1ODUyOTkyMiwxNjYuOTY0OTY0NTkyNzk1ODcsMzIuNjc1MjcwNDY0OTMyNzgsMTAwLjAyMTQ1NTYwNTcwMzg4LDg2LjIwNzU5NzY1MTk5MjU5LDYwMS41NDk1NjU3MzMxMzc1LDQyNi45MDU5ODkzNTQxMjIxNCwzNi4wMzAzOTczNjE1Njc4LDEwMi43NTg5MzAyMzQwNjMzOSw1Ni41ODU0OTUwNzI1NzIyNiw4MC4yNzA2NjA0NTEyNjkwOCw1OC43MzcyODc2Mjk4ODU0MSw2LjEzNTYxMTIyNTA2MTYxNTUsMTQ5LjU2NDAyNTQ2MjYxNSw5LjA4MzQ3ODE4Mjg5MTM1LDIyLjEyMjU2NjAzNTI3NzE2MywxMzIuMTcwNDczODIxMjIyMzcsOTY0LjgwNDU1ODk1MzM2NzIsMTQuOTYwNTU0MTUzMjA0NzAyLDE4LjA3Mzg0Mzc3MzI1MzYyNSwzNDcuODM0NDYzNjcwMzU3MSwyNTMuMjc3NTMxMDE1MTI3NzUsNDkuMzY2ODU3NzExMTkzOTUsMzQuNzc3MTU3Mzc1Njc4NzksMjY2LjY1OTIxMTg1MDgxMjIsNjc4LjUwMTY2NjYxMjczMSwxMjUuMjk2MjgxNzIyMTYyODksOS43ODgzNjA0NDAxNjAwNzUsMTM0Ljk5ODYxMzA2NDQzNDcyLDc3LjYzNzA0MDUwMDUwOTMsMjYuMzAzODg0MjgyMDMzMDk2LDE2NS40ODU2NDMyMTQ4MzUxNCw2My4zMjU0MTQ1NDA0ODQ2NSw4Mi42NjY5MTEwODExNzc5Nyw4MS44OTA4OTM0Njc5MDQ3Myw3NC42MzMxNzgzNzIzODE3NCw1LjA0ODE5NTc3MTYyOTIxCisyNCxUaHUgMTcgRmViIDExLDAuOTQ1MjE3NzY5MzgwMDIzMyw4NC44Mzc1MjY1MzE0MDAyNCw1MC4yNzIwODMwMjg4NTYzMyw0NS4wMDYyMTUwMDQ5NjA2LDIwNi45MTg1Mzc4Njg4MDEyLDQxLjMyMTEwMTc3NDEwNTczNSw2MTQuMzUzNjQ2NjM0Nzg0NSw4MzcwLjc3ODQ2MDYzNzk4NiwzMTQuNzkxMDgzMzI5NjUwODYsMjQzLjA2MTAyNDMzMzA1NDE4LDEzNy43NjE2MjcwMTE3NjYzLDExMC44MzUxNjc1Njk2MDQ5Miw1Mi4wMDM2MTQ2MTUyMDA3NSwxNS40ODM0NDgxNDMxNjMyLDIxNC40NDIzMDI1ODUyOTkyMiwxNjYuOTY0OTY0NTkyNzk1ODcsMzIuNjc1MjcwNDY0OTMyNzgsMTAwLjAyMTQ1NTYwNTcwMzg4LDg2LjIwNzU5NzY1MTk5MjU5LDYwMS41NDk1NjU3MzMxMzc1LDQyNi45MDU5ODkzNTQxMjIxNCwzNi4wMzAzOTczNjE1Njc4LDEwMi43NTg5MzAyMzQwNjMzOSw1Ni41ODU0OTUwNzI1NzIyNiw4MC4yNzA2NjA0NTEyNjkwOCw1OC43MzcyODc2Mjk4ODU0MSw2LjEzNTYxMTIyNTA2MTYxNTUsMTQ5LjU2NDAyNTQ2MjYxNSw5LjA4MzQ3ODE4Mjg5MTM1LDIyLjEyMjU2NjAzNTI3NzE2MywxMzIuMTcwNDczODIxMjIyMzcsOTY0LjgwNDU1ODk1MzM2NzIsMTQuOTYwNTU0MTUzMjA0NzAyLDE4LjA3Mzg0Mzc3MzI1MzYyNSwzNDcuODM0NDYzNjcwMzU3MSwyNTMuMjc3NTMxMDE1MTI3NzUsNDkuMzY2ODU3NzExMTkzOTUsMzQuNzc3MTU3Mzc1Njc4NzksMjY2LjY1OTIxMTg1MDgxMjIsNjc4LjUwMTY2NjYxMjczMSwxMjUuMjk2MjgxNzIyMTYyODksOS43ODgzNjA0NDAxNjAwNzUsMTM0Ljk5ODYxMzA2NDQzNDcyLDc3LjYzNzA0MDUwMDUwOTMsMjYuMzAzODg0MjgyMDMzMDk2LDE2NS40ODU2NDMyMTQ4MzUxNCw2My4zMjU0MTQ1NDA0ODQ2NSw4Mi42NjY5MTEwODExNzc5Nyw4MS44OTA4OTM0Njc5MDQ3Myw3NC42MzMxNzgzNzIzODE3NCw1LjA0ODE5NTc3MTYyOTIxCisyNSxGcmkgMTggRmViIDExLDAuOTQ1MjE3NzY5MzgwMDIzMyw4NC44Mzc1MjY1MzE0MDAyNCw1MC4yNzIwODMwMjg4NTYzMyw0NS4wMDYyMTUwMDQ5NjA2LDIwNi45MTg1Mzc4Njg4MDEyLDQxLjMyMTEwMTc3NDEwNTczNSw2MTQuMzUzNjQ2NjM0Nzg0NSw4MzcwLjc3ODQ2MDYzNzk4NiwzMTQuNzkxMDgzMzI5NjUwODYsMjQzLjA2MTAyNDMzMzA1NDE4LDEzNy43NjE2MjcwMTE3NjYzLDExMC44MzUxNjc1Njk2MDQ5Miw1Mi4wMDM2MTQ2MTUyMDA3NSwxNS40ODM0NDgxNDMxNjMyLDIxNC40NDIzMDI1ODUyOTkyMiwxNjYuOTY0OTY0NTkyNzk1ODcsMzIuNjc1MjcwNDY0OTMyNzgsMTAwLjAyMTQ1NTYwNTcwMzg4LDg2LjIwNzU5NzY1MTk5MjU5LDYwMS41NDk1NjU3MzMxMzc1LDQyNi45MDU5ODkzNTQxMjIxNCwzNi4wMzAzOTczNjE1Njc4LDEwMi43NTg5MzAyMzQwNjMzOSw1Ni41ODU0OTUwNzI1NzIyNiw4MC4yNzA2NjA0NTEyNjkwOCw1OC43MzcyODc2Mjk4ODU0MSw2LjEzNTYxMTIyNTA2MTYxNTUsMTQ5LjU2NDAyNTQ2MjYxNSw5LjA4MzQ3ODE4Mjg5MTM1LDIyLjEyMjU2NjAzNTI3NzE2MywxMzIuMTcwNDczODIxMjIyMzcsOTY0LjgwNDU1ODk1MzM2NzIsMTQuOTYwNTU0MTUzMjA0NzAyLDE4LjA3Mzg0Mzc3MzI1MzYyNSwzNDcuODM0NDYzNjcwMzU3MSwyNTMuMjc3NTMxMDE1MTI3NzUsNDkuMzY2ODU3NzExMTkzOTUsMzQuNzc3MTU3Mzc1Njc4NzksMjY2LjY1OTIxMTg1MDgxMjIsNjc4LjUwMTY2NjYxMjczMSwxMjUuMjk2MjgxNzIyMTYyODksOS43ODgzNjA0NDAxNjAwNzUsMTM0Ljk5ODYxMzA2NDQzNDcyLDc3LjYzNzA0MDUwMDUwOTMsMjYuMzAzODg0MjgyMDMzMDk2LDE2NS40ODU2NDMyMTQ4MzUxNCw2My4zMjU0MTQ1NDA0ODQ2NSw4Mi42NjY5MTEwODExNzc5Nyw4MS44OTA4OTM0Njc5MDQ3Myw3NC42MzMxNzgzNzIzODE3NCw1LjA0ODE5NTc3MTYyOTIxCisyNixTYXQgMTkgRmViIDExLDAuOTQ1MjE3NzY5MzgwMDIzMyw4NC44Mzc1MjY1MzE0MDAyNCw1MC4yNzIwODMwMjg4NTYzMyw0NS4wMDYyMTUwMDQ5NjA2LDIwNi45MTg1Mzc4Njg4MDEyLDQxLjMyMTEwMTc3NDEwNTczNSw2MTQuMzUzNjQ2NjM0Nzg0NSw4MzcwLjc3ODQ2MDYzNzk4NiwzMTQuNzkxMDgzMzI5NjUwODYsMjQzLjA2MTAyNDMzMzA1NDE4LDEzNy43NjE2MjcwMTE3NjYzLDExMC44MzUxNjc1Njk2MDQ5Miw1Mi4wMDM2MTQ2MTUyMDA3NSwxNS40ODM0NDgxNDMxNjMyLDIxNC40NDIzMDI1ODUyOTkyMiwxNjYuOTY0OTY0NTkyNzk1ODcsMzIuNjc1MjcwNDY0OTMyNzgsMTAwLjAyMTQ1NTYwNTcwMzg4LDg2LjIwNzU5NzY1MTk5MjU5LDYwMS41NDk1NjU3MzMxMzc1LDQyNi45MDU5ODkzNTQxMjIxNCwzNi4wMzAzOTczNjE1Njc4LDEwMi43NTg5MzAyMzQwNjMzOSw1Ni41ODU0OTUwNzI1NzIyNiw4MC4yNzA2NjA0NTEyNjkwOCw1OC43MzcyODc2Mjk4ODU0MSw2LjEzNTYxMTIyNTA2MTYxNTUsMTQ5LjU2NDAyNTQ2MjYxNSw5LjA4MzQ3ODE4Mjg5MTM1LDIyLjEyMjU2NjAzNTI3NzE2MywxMzIuMTcwNDczODIxMjIyMzcsOTY0LjgwNDU1ODk1MzM2NzIsMTQuOTYwNTU0MTUzMjA0NzAyLDE4LjA3Mzg0Mzc3MzI1MzYyNSwzNDcuODM0NDYzNjcwMzU3MSwyNTMuMjc3NTMxMDE1MTI3NzUsNDkuMzY2ODU3NzExMTkzOTUsMzQuNzc3MTU3Mzc1Njc4NzksMjY2LjY1OTIxMTg1MDgxMjIsNjc4LjUwMTY2NjYxMjczMSwxMjUuMjk2MjgxNzIyMTYyODksOS43ODgzNjA0NDAxNjAwNzUsMTM0Ljk5ODYxMzA2NDQzNDcyLDc3LjYzNzA0MDUwMDUwOTMsMjYuMzAzODg0MjgyMDMzMDk2LDE2NS40ODU2NDMyMTQ4MzUxNCw2My4zMjU0MTQ1NDA0ODQ2NSw4Mi42NjY5MTEwODExNzc5Nyw4MS44OTA4OTM0Njc5MDQ3Myw3NC42MzMxNzgzNzIzODE3NCw1LjA0ODE5NTc3MTYyOTIxCisyNyxTdW4gMjAgRmViIDExLDAuOTQ1MjE3NzY5MzgwMDIzMyw4NC44Mzc1MjY1MzE0MDAyNCw1MC4yNzIwODMwMjg4NTYzMyw0NS4wMDYyMTUwMDQ5NjA2LDIwNi45MTg1Mzc4Njg4MDEyLDQxLjMyMTEwMTc3NDEwNTczNSw2MTQuMzUzNjQ2NjM0Nzg0NSw4MzcwLjc3ODQ2MDYzNzk4NiwzMTQuNzkxMDgzMzI5NjUwODYsMjQzLjA2MTAyNDMzMzA1NDE4LDEzNy43NjE2MjcwMTE3NjYzLDExMC44MzUxNjc1Njk2MDQ5Miw1Mi4wMDM2MTQ2MTUyMDA3NSwxNS40ODM0NDgxNDMxNjMyLDIxNC40NDIzMDI1ODUyOTkyMiwxNjYuOTY0OTY0NTkyNzk1ODcsMzIuNjc1MjcwNDY0OTMyNzgsMTAwLjAyMTQ1NTYwNTcwMzg4LDg2LjIwNzU5NzY1MTk5MjU5LDYwMS41NDk1NjU3MzMxMzc1LDQyNi45MDU5ODkzNTQxMjIxNCwzNi4wMzAzOTczNjE1Njc4LDEwMi43NTg5MzAyMzQwNjMzOSw1Ni41ODU0OTUwNzI1NzIyNiw4MC4yNzA2NjA0NTEyNjkwOCw1OC43MzcyODc2Mjk4ODU0MSw2LjEzNTYxMTIyNTA2MTYxNTUsMTQ5LjU2NDAyNTQ2MjYxNSw5LjA4MzQ3ODE4Mjg5MTM1LDIyLjEyMjU2NjAzNTI3NzE2MywxMzIuMTcwNDczODIxMjIyMzcsOTY0LjgwNDU1ODk1MzM2NzIsMTQuOTYwNTU0MTUzMjA0NzAyLDE4LjA3Mzg0Mzc3MzI1MzYyNSwzNDcuODM0NDYzNjcwMzU3MSwyNTMuMjc3NTMxMDE1MTI3NzUsNDkuMzY2ODU3NzExMTkzOTUsMzQuNzc3MTU3Mzc1Njc4NzksMjY2LjY1OTIxMTg1MDgxMjIsNjc4LjUwMTY2NjYxMjczMSwxMjUuMjk2MjgxNzIyMTYyODksOS43ODgzNjA0NDAxNjAwNzUsMTM0Ljk5ODYxMzA2NDQzNDcyLDc3LjYzNzA0MDUwMDUwOTMsMjYuMzAzODg0MjgyMDMzMDk2LDE2NS40ODU2NDMyMTQ4MzUxNCw2My4zMjU0MTQ1NDA0ODQ2NSw4Mi42NjY5MTEwODExNzc5Nyw4MS44OTA4OTM0Njc5MDQ3Myw3NC42MzMxNzgzNzIzODE3NCw1LjA0ODE5NTc3MTYyOTIxCisyOCxNb24gMjEgRmViIDExLDAuOTQ1MjE3NzY5MzgwMDIzMyw4NC44Mzc1MjY1MzE0MDAyNCw1MC4yNzIwODMwMjg4NTYzMyw0NS4wMDYyMTUwMDQ5NjA2LDIwNi45MTg1Mzc4Njg4MDEyLDQxLjMyMTEwMTc3NDEwNTczNSw2MTQuMzUzNjQ2NjM0Nzg0NSw4MzcwLjc3ODQ2MDYzNzk4NiwzMTQuNzkxMDgzMzI5NjUwODYsMjQzLjA2MTAyNDMzMzA1NDE4LDEzNy43NjE2MjcwMTE3NjYzLDExMC44MzUxNjc1Njk2MDQ5Miw1Mi4wMDM2MTQ2MTUyMDA3NSwxNS40ODM0NDgxNDMxNjMyLDIxNC40NDIzMDI1ODUyOTkyMiwxNjYuOTY0OTY0NTkyNzk1ODcsMzIuNjc1MjcwNDY0OTMyNzgsMTAwLjAyMTQ1NTYwNTcwMzg4LDg2LjIwNzU5NzY1MTk5MjU5LDYwMS41NDk1NjU3MzMxMzc1LDQyNi45MDU5ODkzNTQxMjIxNCwzNi4wMzAzOTczNjE1Njc4LDEwMi43NTg5MzAyMzQwNjMzOSw1Ni41ODU0OTUwNzI1NzIyNiw4MC4yNzA2NjA0NTEyNjkwOCw1OC43MzcyODc2Mjk4ODU0MSw2LjEzNTYxMTIyNTA2MTYxNTUsMTQ5LjU2NDAyNTQ2MjYxNSw5LjA4MzQ3ODE4Mjg5MTM1LDIyLjEyMjU2NjAzNTI3NzE2MywxMzIuMTcwNDczODIxMjIyMzcsOTY0LjgwNDU1ODk1MzM2NzIsMTQuOTYwNTU0MTUzMjA0NzAyLDE4LjA3Mzg0Mzc3MzI1MzYyNSwzNDcuODM0NDYzNjcwMzU3MSwyNTMuMjc3NTMxMDE1MTI3NzUsNDkuMzY2ODU3NzExMTkzOTUsMzQuNzc3MTU3Mzc1Njc4NzksMjY2LjY1OTIxMTg1MDgxMjIsNjc4LjUwMTY2NjYxMjczMSwxMjUuMjk2MjgxNzIyMTYyODksOS43ODgzNjA0NDAxNjAwNzUsMTM0Ljk5ODYxMzA2NDQzNDcyLDc3LjYzNzA0MDUwMDUwOTMsMjYuMzAzODg0MjgyMDMzMDk2LDE2NS40ODU2NDMyMTQ4MzUxNCw2My4zMjU0MTQ1NDA0ODQ2NSw4Mi42NjY5MTEwODExNzc5Nyw4MS44OTA4OTM0Njc5MDQ3Myw3NC42MzMxNzgzNzIzODE3NCw1LjA0ODE5NTc3MTYyOTIxCisyOSxUdWUgMjIgRmViIDExLDAuOTQ1MjE3NzY5MzgwMDIzMyw4NC44Mzc1MjY1MzE0MDAyNCw1MC4yNzIwODMwMjg4NTYzMyw0NS4wMDYyMTUwMDQ5NjA2LDIwNi45MTg1Mzc4Njg4MDEyLDQxLjMyMTEwMTc3NDEwNTczNSw2MTQuMzUzNjQ2NjM0Nzg0NSw4MzcwLjc3ODQ2MDYzNzk4NiwzMTQuNzkxMDgzMzI5NjUwODYsMjQzLjA2MTAyNDMzMzA1NDE4LDEzNy43NjE2MjcwMTE3NjYzLDExMC44MzUxNjc1Njk2MDQ5Miw1Mi4wMDM2MTQ2MTUyMDA3NSwxNS40ODM0NDgxNDMxNjMyLDIxNC40NDIzMDI1ODUyOTkyMiwxNjYuOTY0OTY0NTkyNzk1ODcsMzIuNjc1MjcwNDY0OTMyNzgsMTAwLjAyMTQ1NTYwNTcwMzg4LDg2LjIwNzU5NzY1MTk5MjU5LDYwMS41NDk1NjU3MzMxMzc1LDQyNi45MDU5ODkzNTQxMjIxNCwzNi4wMzAzOTczNjE1Njc4LDEwMi43NTg5MzAyMzQwNjMzOSw1Ni41ODU0OTUwNzI1NzIyNiw4MC4yNzA2NjA0NTEyNjkwOCw1OC43MzcyODc2Mjk4ODU0MSw2LjEzNTYxMTIyNTA2MTYxNTUsMTQ5LjU2NDAyNTQ2MjYxNSw5LjA4MzQ3ODE4Mjg5MTM1LDIyLjEyMjU2NjAzNTI3NzE2MywxMzIuMTcwNDczODIxMjIyMzcsOTY0LjgwNDU1ODk1MzM2NzIsMTQuOTYwNTU0MTUzMjA0NzAyLDE4LjA3Mzg0Mzc3MzI1MzYyNSwzNDcuODM0NDYzNjcwMzU3MSwyNTMuMjc3NTMxMDE1MTI3NzUsNDkuMzY2ODU3NzExMTkzOTUsMzQuNzc3MTU3Mzc1Njc4NzksMjY2LjY1OTIxMTg1MDgxMjIsNjc4LjUwMTY2NjYxMjczMSwxMjUuMjk2MjgxNzIyMTYyODksOS43ODgzNjA0NDAxNjAwNzUsMTM0Ljk5ODYxMzA2NDQzNDcyLDc3LjYzNzA0MDUwMDUwOTMsMjYuMzAzODg0MjgyMDMzMDk2LDE2NS40ODU2NDMyMTQ4MzUxNCw2My4zMjU0MTQ1NDA0ODQ2NSw4Mi42NjY5MTEwODExNzc5Nyw4MS44OTA4OTM0Njc5MDQ3Myw3NC42MzMxNzgzNzIzODE3NCw1LjA0ODE5NTc3MTYyOTIxCiszMCxXZWQgMjMgRmViIDExLDAuOTQ1MjE3NzY5MzgwMDIzMyw4NC44Mzc1MjY1MzE0MDAyNCw1MC4yNzIwODMwMjg4NTYzMyw0NS4wMDYyMTUwMDQ5NjA2LDIwNi45MTg1Mzc4Njg4MDEyLDQxLjMyMTEwMTc3NDEwNTczNSw2MTQuMzUzNjQ2NjM0Nzg0NSw4MzcwLjc3ODQ2MDYzNzk4NiwzMTQuNzkxMDgzMzI5NjUwODYsMjQzLjA2MTAyNDMzMzA1NDE4LDEzNy43NjE2MjcwMTE3NjYzLDExMC44MzUxNjc1Njk2MDQ5Miw1Mi4wMDM2MTQ2MTUyMDA3NSwxNS40ODM0NDgxNDMxNjMyLDIxNC40NDIzMDI1ODUyOTkyMiwxNjYuOTY0OTY0NTkyNzk1ODcsMzIuNjc1MjcwNDY0OTMyNzgsMTAwLjAyMTQ1NTYwNTcwMzg4LDg2LjIwNzU5NzY1MTk5MjU5LDYwMS41NDk1NjU3MzMxMzc1LDQyNi45MDU5ODkzNTQxMjIxNCwzNi4wMzAzOTczNjE1Njc4LDEwMi43NTg5MzAyMzQwNjMzOSw1Ni41ODU0OTUwNzI1NzIyNiw4MC4yNzA2NjA0NTEyNjkwOCw1OC43MzcyODc2Mjk4ODU0MSw2LjEzNTYxMTIyNTA2MTYxNTUsMTQ5LjU2NDAyNTQ2MjYxNSw5LjA4MzQ3ODE4Mjg5MTM1LDIyLjEyMjU2NjAzNTI3NzE2MywxMzIuMTcwNDczODIxMjIyMzcsOTY0LjgwNDU1ODk1MzM2NzIsMTQuOTYwNTU0MTUzMjA0NzAyLDE4LjA3Mzg0Mzc3MzI1MzYyNSwzNDcuODM0NDYzNjcwMzU3MSwyNTMuMjc3NTMxMDE1MTI3NzUsNDkuMzY2ODU3NzExMTkzOTUsMzQuNzc3MTU3Mzc1Njc4NzksMjY2LjY1OTIxMTg1MDgxMjIsNjc4LjUwMTY2NjYxMjczMSwxMjUuMjk2MjgxNzIyMTYyODksOS43ODgzNjA0NDAxNjAwNzUsMTM0Ljk5ODYxMzA2NDQzNDcyLDc3LjYzNzA0MDUwMDUwOTMsMjYuMzAzODg0MjgyMDMzMDk2LDE2NS40ODU2NDMyMTQ4MzUxNCw2My4zMjU0MTQ1NDA0ODQ2NSw4Mi42NjY5MTEwODExNzc5Nyw4MS44OTA4OTM0Njc5MDQ3Myw3NC42MzMxNzgzNzIzODE3NCw1LjA0ODE5NTc3MTYyOTIxCiszMSxUaHUgMjQgRmViIDExLDAuOTQ1MjE3NzY5MzgwMDIzMyw4NC44Mzc1MjY1MzE0MDAyNCw1MC4yNzIwODMwMjg4NTYzMyw0NS4wMDYyMTUwMDQ5NjA2LDIwNi45MTg1Mzc4Njg4MDEyLDQxLjMyMTEwMTc3NDEwNTczNSw2MTQuMzUzNjQ2NjM0Nzg0NSw4MzcwLjc3ODQ2MDYzNzk4NiwzMTQuNzkxMDgzMzI5NjUwODYsMjQzLjA2MTAyNDMzMzA1NDE4LDEzNy43NjE2MjcwMTE3NjYzLDExMC44MzUxNjc1Njk2MDQ5Miw1Mi4wMDM2MTQ2MTUyMDA3NSwxNS40ODM0NDgxNDMxNjMyLDIxNC40NDIzMDI1ODUyOTkyMiwxNjYuOTY0OTY0NTkyNzk1ODcsMzIuNjc1MjcwNDY0OTMyNzgsMTAwLjAyMTQ1NTYwNTcwMzg4LDg2LjIwNzU5NzY1MTk5MjU5LDYwMS41NDk1NjU3MzMxMzc1LDQyNi45MDU5ODkzNTQxMjIxNCwzNi4wMzAzOTczNjE1Njc4LDEwMi43NTg5MzAyMzQwNjMzOSw1Ni41ODU0OTUwNzI1NzIyNiw4MC4yNzA2NjA0NTEyNjkwOCw1OC43MzcyODc2Mjk4ODU0MSw2LjEzNTYxMTIyNTA2MTYxNTUsMTQ5LjU2NDAyNTQ2MjYxNSw5LjA4MzQ3ODE4Mjg5MTM1LDIyLjEyMjU2NjAzNTI3NzE2MywxMzIuMTcwNDczODIxMjIyMzcsOTY0LjgwNDU1ODk1MzM2NzIsMTQuOTYwNTU0MTUzMjA0NzAyLDE4LjA3Mzg0Mzc3MzI1MzYyNSwzNDcuODM0NDYzNjcwMzU3MSwyNTMuMjc3NTMxMDE1MTI3NzUsNDkuMzY2ODU3NzExMTkzOTUsMzQuNzc3MTU3Mzc1Njc4NzksMjY2LjY1OTIxMTg1MDgxMjIsNjc4LjUwMTY2NjYxMjczMSwxMjUuMjk2MjgxNzIyMTYyODksOS43ODgzNjA0NDAxNjAwNzUsMTM0Ljk5ODYxMzA2NDQzNDcyLDc3LjYzNzA0MDUwMDUwOTMsMjYuMzAzODg0MjgyMDMzMDk2LDE2NS40ODU2NDMyMTQ4MzUxNCw2My4zMjU0MTQ1NDA0ODQ2NSw4Mi42NjY5MTEwODExNzc5Nyw4MS44OTA4OTM0Njc5MDQ3Myw3NC42MzMxNzgzNzIzODE3NCw1LjA0ODE5NTc3MTYyOTIxCiszMixGcmkgMjUgRmViIDExLDAuOTQ1MjE3NzY5MzgwMDIzMyw4NC44Mzc1MjY1MzE0MDAyNCw1MC4yNzIwODMwMjg4NTYzMyw0NS4wMDYyMTUwMDQ5NjA2LDIwNi45MTg1Mzc4Njg4MDEyLDQxLjMyMTEwMTc3NDEwNTczNSw2MTQuMzUzNjQ2NjM0Nzg0NSw4MzcwLjc3ODQ2MDYzNzk4NiwzMTQuNzkxMDgzMzI5NjUwODYsMjQzLjA2MTAyNDMzMzA1NDE4LDEzNy43NjE2MjcwMTE3NjYzLDExMC44MzUxNjc1Njk2MDQ5Miw1Mi4wMDM2MTQ2MTUyMDA3NSwxNS40ODM0NDgxNDMxNjMyLDIxNC40NDIzMDI1ODUyOTkyMiwxNjYuOTY0OTY0NTkyNzk1ODcsMzIuNjc1MjcwNDY0OTMyNzgsMTAwLjAyMTQ1NTYwNTcwMzg4LDg2LjIwNzU5NzY1MTk5MjU5LDYwMS41NDk1NjU3MzMxMzc1LDQyNi45MDU5ODkzNTQxMjIxNCwzNi4wMzAzOTczNjE1Njc4LDEwMi43NTg5MzAyMzQwNjMzOSw1Ni41ODU0OTUwNzI1NzIyNiw4MC4yNzA2NjA0NTEyNjkwOCw1OC43MzcyODc2Mjk4ODU0MSw2LjEzNTYxMTIyNTA2MTYxNTUsMTQ5LjU2NDAyNTQ2MjYxNSw5LjA4MzQ3ODE4Mjg5MTM1LDIyLjEyMjU2NjAzNTI3NzE2MywxMzIuMTcwNDczODIxMjIyMzcsOTY0LjgwNDU1ODk1MzM2NzIsMTQuOTYwNTU0MTUzMjA0NzAyLDE4LjA3Mzg0Mzc3MzI1MzYyNSwzNDcuODM0NDYzNjcwMzU3MSwyNTMuMjc3NTMxMDE1MTI3NzUsNDkuMzY2ODU3NzExMTkzOTUsMzQuNzc3MTU3Mzc1Njc4NzksMjY2LjY1OTIxMTg1MDgxMjIsNjc4LjUwMTY2NjYxMjczMSwxMjUuMjk2MjgxNzIyMTYyODksOS43ODgzNjA0NDAxNjAwNzUsMTM0Ljk5ODYxMzA2NDQzNDcyLDc3LjYzNzA0MDUwMDUwOTMsMjYuMzAzODg0MjgyMDMzMDk2LDE2NS40ODU2NDMyMTQ4MzUxNCw2My4zMjU0MTQ1NDA0ODQ2NSw4Mi42NjY5MTEwODExNzc5Nyw4MS44OTA4OTM0Njc5MDQ3Myw3NC42MzMxNzgzNzIzODE3NCw1LjA0ODE5NTc3MTYyOTIxCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNJUlN0YXRlc09ubHlfRkRfUmVmZXJlbmNlL2F1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwvaHVtYW4vSW5jaWRlbmNlXzAuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTSVJTdGF0ZXNPbmx5X0ZEX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL2h1bWFuL0luY2lkZW5jZV8wLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMTJlOGI4Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTSVJTdGF0ZXNPbmx5X0ZEX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL2h1bWFuL0luY2lkZW5jZV8wLmNzdgpAQCAtMCwwICsxLDMzIEBACitpdGVyYXRpb24sdGltZSxzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9ub2RlL3RyYW5zcG9ydC9waXBlL1VTQQorMSxUdWUgMjUgSmFuIDExLDAuMAorMixXZWQgMjYgSmFuIDExLDAuMAorMyxUaHUgMjcgSmFuIDExLDAuMAorNCxGcmkgMjggSmFuIDExLDAuMAorNSxTYXQgMjkgSmFuIDExLDAuMAorNixTdW4gMzAgSmFuIDExLDAuMAorNyxNb24gMzEgSmFuIDExLDAuMAorOCxUdWUgMSBGZWIgMTEsMC4wCis5LFdlZCAyIEZlYiAxMSwwLjAKKzEwLFRodSAzIEZlYiAxMSwwLjAKKzExLEZyaSA0IEZlYiAxMSwwLjAKKzEyLFNhdCA1IEZlYiAxMSwwLjAKKzEzLFN1biA2IEZlYiAxMSwwLjAKKzE0LE1vbiA3IEZlYiAxMSwwLjAKKzE1LFR1ZSA4IEZlYiAxMSwwLjAKKzE2LFdlZCA5IEZlYiAxMSwwLjAKKzE3LFRodSAxMCBGZWIgMTEsMC4wCisxOCxGcmkgMTEgRmViIDExLDAuMAorMTksU2F0IDEyIEZlYiAxMSwwLjAKKzIwLFN1biAxMyBGZWIgMTEsMC4wCisyMSxNb24gMTQgRmViIDExLDAuMAorMjIsVHVlIDE1IEZlYiAxMSwwLjAKKzIzLFdlZCAxNiBGZWIgMTEsMC4wCisyNCxUaHUgMTcgRmViIDExLDAuMAorMjUsRnJpIDE4IEZlYiAxMSwwLjAKKzI2LFNhdCAxOSBGZWIgMTEsMC4wCisyNyxTdW4gMjAgRmViIDExLDAuMAorMjgsTW9uIDIxIEZlYiAxMSwwLjAKKzI5LFR1ZSAyMiBGZWIgMTEsMC4wCiszMCxXZWQgMjMgRmViIDExLDAuMAorMzEsVGh1IDI0IEZlYiAxMSwwLjAKKzMyLEZyaSAyNSBGZWIgMTEsMC4wCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNJUlN0YXRlc09ubHlfRkRfUmVmZXJlbmNlL2F1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwvaHVtYW4vSW5jaWRlbmNlXzEuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTSVJTdGF0ZXNPbmx5X0ZEX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL2h1bWFuL0luY2lkZW5jZV8xLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40N2E4NDNmCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTSVJTdGF0ZXNPbmx5X0ZEX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL2h1bWFuL0luY2lkZW5jZV8xLmNzdgpAQCAtMCwwICsxLDMzIEBACitpdGVyYXRpb24sdGltZSxVUy1BSyxVUy1BTCxVUy1BUixVUy1BWixVUy1DQSxVUy1DTyxVUy1DVCxVUy1EQyxVUy1ERSxVUy1GTCxVUy1HQSxVUy1ISSxVUy1JQSxVUy1JRCxVUy1JTCxVUy1JTixVUy1LUyxVUy1LWSxVUy1MQSxVUy1NQSxVUy1NRCxVUy1NRSxVUy1NSSxVUy1NTixVUy1NTyxVUy1NUyxVUy1NVCxVUy1OQyxVUy1ORCxVUy1ORSxVUy1OSCxVUy1OSixVUy1OTSxVUy1OVixVUy1OWSxVUy1PSCxVUy1PSyxVUy1PUixVUy1QQSxVUy1SSSxVUy1TQyxVUy1TRCxVUy1UTixVUy1UWCxVUy1VVCxVUy1WQSxVUy1WVCxVUy1XQSxVUy1XSSxVUy1XVixVUy1XWQorMSxUdWUgMjUgSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyLFdlZCAyNiBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzMsVGh1IDI3IEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorNCxGcmkgMjggSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCis1LFNhdCAyOSBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzYsU3VuIDMwIEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorNyxNb24gMzEgSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCis4LFR1ZSAxIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorOSxXZWQgMiBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzEwLFRodSAzIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTEsRnJpIDQgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxMixTYXQgNSBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzEzLFN1biA2IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTQsTW9uIDcgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxNSxUdWUgOCBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzE2LFdlZCA5IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTcsVGh1IDEwIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTgsRnJpIDExIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTksU2F0IDEyIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjAsU3VuIDEzIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjEsTW9uIDE0IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjIsVHVlIDE1IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjMsV2VkIDE2IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjQsVGh1IDE3IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjUsRnJpIDE4IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjYsU2F0IDE5IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjcsU3VuIDIwIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjgsTW9uIDIxIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjksVHVlIDIyIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMzAsV2VkIDIzIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMzEsVGh1IDI0IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMzIsRnJpIDI1IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTSVJTdGF0ZXNPbmx5X0ZEX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL3J1bnBhcmFtZXRlcnMuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTSVJTdGF0ZXNPbmx5X0ZEX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL3J1bnBhcmFtZXRlcnMuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA2ODU1YjUKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNJUlN0YXRlc09ubHlfRkRfUmVmZXJlbmNlL2F1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwvcnVucGFyYW1ldGVycy5jc3YKQEAgLTAsMCArMSwyIEBACitwb3B1bGF0aW9uSWRlbnRpZmllcixuYW1lLHRhcmdldElTT0tleSxiaXJ0aFJhdGUsZGVhdGhSYXRlLHRpbWVQZXJpb2QKK2h1bWFuLGF1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwsLDAuMCwwLjAsODY0MDAwMDAKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNJUlN0YXRlc09ubHlfUktfUmVmZXJlbmNlL1Rlc3RTSVIvaHVtYW4vRGlzZWFzZSBEZWF0aHNfMC5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNJUlN0YXRlc09ubHlfUktfUmVmZXJlbmNlL1Rlc3RTSVIvaHVtYW4vRGlzZWFzZSBEZWF0aHNfMC5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTEyZThiOAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0lSU3RhdGVzT25seV9SS19SZWZlcmVuY2UvVGVzdFNJUi9odW1hbi9EaXNlYXNlIERlYXRoc18wLmNzdgpAQCAtMCwwICsxLDMzIEBACitpdGVyYXRpb24sdGltZSxzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9ub2RlL3RyYW5zcG9ydC9waXBlL1VTQQorMSxUdWUgMjUgSmFuIDExLDAuMAorMixXZWQgMjYgSmFuIDExLDAuMAorMyxUaHUgMjcgSmFuIDExLDAuMAorNCxGcmkgMjggSmFuIDExLDAuMAorNSxTYXQgMjkgSmFuIDExLDAuMAorNixTdW4gMzAgSmFuIDExLDAuMAorNyxNb24gMzEgSmFuIDExLDAuMAorOCxUdWUgMSBGZWIgMTEsMC4wCis5LFdlZCAyIEZlYiAxMSwwLjAKKzEwLFRodSAzIEZlYiAxMSwwLjAKKzExLEZyaSA0IEZlYiAxMSwwLjAKKzEyLFNhdCA1IEZlYiAxMSwwLjAKKzEzLFN1biA2IEZlYiAxMSwwLjAKKzE0LE1vbiA3IEZlYiAxMSwwLjAKKzE1LFR1ZSA4IEZlYiAxMSwwLjAKKzE2LFdlZCA5IEZlYiAxMSwwLjAKKzE3LFRodSAxMCBGZWIgMTEsMC4wCisxOCxGcmkgMTEgRmViIDExLDAuMAorMTksU2F0IDEyIEZlYiAxMSwwLjAKKzIwLFN1biAxMyBGZWIgMTEsMC4wCisyMSxNb24gMTQgRmViIDExLDAuMAorMjIsVHVlIDE1IEZlYiAxMSwwLjAKKzIzLFdlZCAxNiBGZWIgMTEsMC4wCisyNCxUaHUgMTcgRmViIDExLDAuMAorMjUsRnJpIDE4IEZlYiAxMSwwLjAKKzI2LFNhdCAxOSBGZWIgMTEsMC4wCisyNyxTdW4gMjAgRmViIDExLDAuMAorMjgsTW9uIDIxIEZlYiAxMSwwLjAKKzI5LFR1ZSAyMiBGZWIgMTEsMC4wCiszMCxXZWQgMjMgRmViIDExLDAuMAorMzEsVGh1IDI0IEZlYiAxMSwwLjAKKzMyLEZyaSAyNSBGZWIgMTEsMC4wCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNJUlN0YXRlc09ubHlfUktfUmVmZXJlbmNlL1Rlc3RTSVIvaHVtYW4vRGlzZWFzZSBEZWF0aHNfMS5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNJUlN0YXRlc09ubHlfUktfUmVmZXJlbmNlL1Rlc3RTSVIvaHVtYW4vRGlzZWFzZSBEZWF0aHNfMS5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDdhODQzZgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0lSU3RhdGVzT25seV9SS19SZWZlcmVuY2UvVGVzdFNJUi9odW1hbi9EaXNlYXNlIERlYXRoc18xLmNzdgpAQCAtMCwwICsxLDMzIEBACitpdGVyYXRpb24sdGltZSxVUy1BSyxVUy1BTCxVUy1BUixVUy1BWixVUy1DQSxVUy1DTyxVUy1DVCxVUy1EQyxVUy1ERSxVUy1GTCxVUy1HQSxVUy1ISSxVUy1JQSxVUy1JRCxVUy1JTCxVUy1JTixVUy1LUyxVUy1LWSxVUy1MQSxVUy1NQSxVUy1NRCxVUy1NRSxVUy1NSSxVUy1NTixVUy1NTyxVUy1NUyxVUy1NVCxVUy1OQyxVUy1ORCxVUy1ORSxVUy1OSCxVUy1OSixVUy1OTSxVUy1OVixVUy1OWSxVUy1PSCxVUy1PSyxVUy1PUixVUy1QQSxVUy1SSSxVUy1TQyxVUy1TRCxVUy1UTixVUy1UWCxVUy1VVCxVUy1WQSxVUy1WVCxVUy1XQSxVUy1XSSxVUy1XVixVUy1XWQorMSxUdWUgMjUgSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyLFdlZCAyNiBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzMsVGh1IDI3IEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorNCxGcmkgMjggSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCis1LFNhdCAyOSBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzYsU3VuIDMwIEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorNyxNb24gMzEgSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCis4LFR1ZSAxIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorOSxXZWQgMiBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzEwLFRodSAzIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTEsRnJpIDQgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxMixTYXQgNSBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzEzLFN1biA2IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTQsTW9uIDcgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxNSxUdWUgOCBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzE2LFdlZCA5IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTcsVGh1IDEwIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTgsRnJpIDExIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTksU2F0IDEyIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjAsU3VuIDEzIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjEsTW9uIDE0IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjIsVHVlIDE1IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjMsV2VkIDE2IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjQsVGh1IDE3IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjUsRnJpIDE4IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjYsU2F0IDE5IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjcsU3VuIDIwIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjgsTW9uIDIxIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjksVHVlIDIyIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMzAsV2VkIDIzIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMzEsVGh1IDI0IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMzIsRnJpIDI1IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTSVJTdGF0ZXNPbmx5X1JLX1JlZmVyZW5jZS9UZXN0U0lSL2h1bWFuL0lfMC5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNJUlN0YXRlc09ubHlfUktfUmVmZXJlbmNlL1Rlc3RTSVIvaHVtYW4vSV8wLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43OGVjYTA3Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTSVJTdGF0ZXNPbmx5X1JLX1JlZmVyZW5jZS9UZXN0U0lSL2h1bWFuL0lfMC5jc3YKQEAgLTAsMCArMSwzMyBAQAoraXRlcmF0aW9uLHRpbWUsc3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vbm9kZS90cmFuc3BvcnQvcGlwZS9VU0EKKzEsVHVlIDI1IEphbiAxMSwwLjAKKzIsV2VkIDI2IEphbiAxMSwyODc3NjMuMzIzNzAxMDU1MgorMyxUaHUgMjcgSmFuIDExLDY4NTQ1OC43MTMyNTAxMgorNCxGcmkgMjggSmFuIDExLDQ3MzQ0OS44MjcwMjQ2NDY1Cis1LFNhdCAyOSBKYW4gMTEsMzIwNjkzLjU4OTgxMTY1OTkKKzYsU3VuIDMwIEphbiAxMSwyMTU3NTAuNTIxNjA3NzAzNjIKKzcsTW9uIDMxIEphbiAxMSwxNDQ4MDIuNTQ0MjUwODI3NjMKKzgsVHVlIDEgRmViIDExLDk3MTA0LjU1MjM4ODY0MzEyCis5LFdlZCAyIEZlYiAxMSw2NTA5OS42MTUyMDk5MzAyMQorMTAsVGh1IDMgRmViIDExLDQzNjM5LjM3MTgzMTY4NTM2CisxMSxGcmkgNCBGZWIgMTEsMjkyNTIuNzMwMTMzMjI0ODM1CisxMixTYXQgNSBGZWIgMTEsMTk2MDguODEzMTYxOTE4NTkKKzEzLFN1biA2IEZlYiAxMSwxMzE0NC4yNDQwMjUxNjU1MTMKKzE0LE1vbiA3IEZlYiAxMSw4ODEwLjg5NDQ5NTU1MDUyNQorMTUsVHVlIDggRmViIDExLDU5MDYuMTQ3ODI1MzcxMjA4NQorMTYsV2VkIDkgRmViIDExLDM5NTkuMDI4MTM0NDY1NjM3MworMTcsVGh1IDEwIEZlYiAxMSwyNjUzLjgyODI4OTY1NzM4NjQKKzE4LEZyaSAxMSBGZWIgMTEsMTc3OC45MjI0MjYyNTk2NTc2CisxOSxTYXQgMTIgRmViIDExLDExOTIuNDUyNzAwMzM1MTQ3MworMjAsU3VuIDEzIEZlYiAxMSw3OTkuMzI4NDU2Nzk1NzM0MgorMjEsTW9uIDE0IEZlYiAxMSw1MzUuODA4MTkzODg5MTc4CisyMixUdWUgMTUgRmViIDExLDM1OS4xNjQ0ODk1MjMwNDk1NQorMjMsV2VkIDE2IEZlYiAxMSwyNDAuNzU2MTU0NTcxOTU2NTkKKzI0LFRodSAxNyBGZWIgMTEsMTYxLjM4NDMzMjkxOTQzNjg3CisyNSxGcmkgMTggRmViIDExLDEwOC4xNzk1ODU0NjM3NDYwNgorMjYsU2F0IDE5IEZlYiAxMSw3Mi41MTUyMjkxNTAxNTY2NworMjcsU3VuIDIwIEZlYiAxMSw0OC42MDg1OTkwOTU4OTY3NQorMjgsTW9uIDIxIEZlYiAxMSwzMi41ODM0NDE4MzE2MjMKKzI5LFR1ZSAyMiBGZWIgMTEsMjEuODQxNDE1NTk3OTgyNzAzCiszMCxXZWQgMjMgRmViIDExLDE0LjY0MDc5MjM2MjQ2ODMxNAorMzEsVGh1IDI0IEZlYiAxMSw5LjgxNDA1MjAwMTQzNTc4NworMzIsRnJpIDI1IEZlYiAxMSw2LjU3ODU3OTE0MjkzMTI3OQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTSVJTdGF0ZXNPbmx5X1JLX1JlZmVyZW5jZS9UZXN0U0lSL2h1bWFuL0lfMS5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNJUlN0YXRlc09ubHlfUktfUmVmZXJlbmNlL1Rlc3RTSVIvaHVtYW4vSV8xLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNzA5NDliCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTSVJTdGF0ZXNPbmx5X1JLX1JlZmVyZW5jZS9UZXN0U0lSL2h1bWFuL0lfMS5jc3YKQEAgLTAsMCArMSwzMyBAQAoraXRlcmF0aW9uLHRpbWUsVVMtQUssVVMtQUwsVVMtQVIsVVMtQVosVVMtQ0EsVVMtQ08sVVMtQ1QsVVMtREMsVVMtREUsVVMtRkwsVVMtR0EsVVMtSEksVVMtSUEsVVMtSUQsVVMtSUwsVVMtSU4sVVMtS1MsVVMtS1ksVVMtTEEsVVMtTUEsVVMtTUQsVVMtTUUsVVMtTUksVVMtTU4sVVMtTU8sVVMtTVMsVVMtTVQsVVMtTkMsVVMtTkQsVVMtTkUsVVMtTkgsVVMtTkosVVMtTk0sVVMtTlYsVVMtTlksVVMtT0gsVVMtT0ssVVMtT1IsVVMtUEEsVVMtUkksVVMtU0MsVVMtU0QsVVMtVE4sVVMtVFgsVVMtVVQsVVMtVkEsVVMtVlQsVVMtV0EsVVMtV0ksVVMtV1YsVVMtV1kKKzEsVHVlIDI1IEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMS4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMixXZWQgMjYgSmFuIDExLDU5Ny42ODc3MDMxNDcyMjE4LDYwMC44ODI4NDY0MDA5MzU5LDQzOC40NzcxNDc5NDQ4MjU1Niw1MTg5LjYyMzI1NDkyNTczNCwyLjg5OTA3MTcxMDc2OTg0NkU3LDU0MjkuMjI1MjcyMTAzNTUyLDc3Ni45NTM2MzAyNjQ5NDUsMjAxMS43OTA0NDMzNTU3MzM3LDEuOTc4Nzc4Mjc4MTI4NTExNSwxNDM0OC41MjQ1MzI0MDgzMSw5NDI3LjQ5NTIwMDQ1NDk4MSwyMjExLjgyNjMwMzg0ODc1MDMsMzYxLjE5ODE3NjE5NzgzMTQ2LDQ0NS44ODY4NzI1Mzg3MDA2LDEwNTI0Ljk1OTIyMzYzNzY0MSwxMTA0LjM5MzE0OTY3MjM1NjIsMTcwLjY0NzI5OTc3OTcwOTc4LDUzNi4wOTkxNTMyNjU0Mzk2LDEwMDkuNjgxOTEzMjA2NTM3NywzMTY2LjI5NzA3NzA3MjUwMDUsMjMzOS41MTE1OTcxMTI4MTIsMjYzLjcyMTM5MjY4MDIxMjEsNDMyOS4zMzEwNzA0OTYzMjA1LDM4OTEuNTk0NTAzMDY2MTg3LDI4NzguNDI5MzU5NzM4MjYzNCwyODMuMDcxMjU0ODE2ODE5MiwzMTIuMjUxNjIwMDA0Njk3Niw0NjE3LjQxNzkzMzgyMzAyNSwxNDguOTk0NTM4MjMwMzY5MDIsNTE4LjEwNTgwMjIyOTQ4MDYsNDQ0LjcxODgzOTU5MjcyMzQsNDEyNi41MzgzNDkwODY5NzMsNzEzLjkwNTgxNjEwNjE1NzIsNTQ0MC42NjgzMDkzNjc3MDIsOTI4NS4yNjg4MzUwNzQ3NDUsNDE5Mi41MzEyOTAwODg5NjUsNzc4LjYwNTk5NzYxODU1NzIsMTcwNi4xOTYzNTI2NTg5MzEsNDc2MC42Mjk2NjM3NzQzMzgsNTg3LjgxNjQ1ODA3NjE1OSw3MDcuODA4NTM4MjA5MTA4LDE0NC4wNjI3NjEwMDcxOTU4NiwyNTc2LjAyMDg2Mjc0MDk1MiwxMzE5OC43MDMyNjg4NjI4NTEsMjMzMy4zNTI5NjQwODgxNzM0LDM1MjAuMTMxNzQ4NDgzODQ2LDE1My45MzIxNjE2MjUxODczNSwzNTkxLjU4MDA0NTYxOTc5MywxMjEzLjcyNzA1NDk5ODYxMTUsODAuNjI3OTM1MzE0MjcwMzksMTA3LjQ2Mzk3OTMyMTQ4OTkyCiszLFRodSAyNyBKYW4gMTEsNDgzMjYyLjk2NjY0NDMyNTkzLDM1Njg0NDIuMDU4ODc4MjE5NywyMTM2NzExLjAzMjE3OTQ2NDYsMzk1MDAzMi44NjA2NDc0Nzc3LDIuMTcwNTQxNzAyNjE1NDg3NkU3LDMyOTYzMDMuMjE1NzQ3MjE1MywyNzAzNTc1LjEyNzA2NjQyNyw0MjkwNjYuMjM3NjUxMDgwMzYsNjgwODQ1LjIwMTI2NzAwMTIsMS4yMzM1MTY5MzkxODMxOTY0RTcsNjI4NTczMC42MzUyODk2MTIsOTIxMzQ1LjM2NDMzNzI1MjUsMjM1MjQ4Mi42NzQ3MDE5NzMsMTAxODU4MC4zMjM2MTI2ODY4LDk1OTY2MzkuNjY0ODkwMzgsNDg0OTY5MS42ODcxNDg5MTMsMjE5MDcyMi4yNTU1NTM5MzY2LDMyNDQ0MjIuNjc2OTYwNzc1NiwzNTQ4NDkyLjYwNzQ1ODc4Miw0OTYwMDczLjA1MTI5NDA0Myw0MTQ4MDkzLjg5Mjg0NTM0MDUsMTAxNDE1NC44ODMwMTk4NjA0LDc3ODU4MDAuNjMyMzY4OTksMzgwNjgwMy41NjIxMzY1NjM1LDQzNjgzMjEuMzI4ODk1OTIxLDIyOTY5MDUuMDIyMzU4NjQsNzEwMTMwLjU5Mzc0MjY5OTcsNjI3MDIxMS44MzEzMjcxMjcsNTA5NjQ3LjgzMTgzOTE5MDIsMTM1MDY2My4xNTc0MTY4OTcxLDk3MTkyNi4wOTM5NzExODU1LDY1NzU3NjcuNjQzMzkxMjc5LDE0MjgxMDQuNjMxNTI1MTUxNCwxNTA2OTExLjgwODg4NTA4OCwxLjQ4MzA2ODg1Nzk3NjcwNDVFNyw4OTI0MzI4LjMxNTQyNDEyOCwyNzM5OTg4LjY4NTI2NzQ1LDI2NzI4ODQuMTI0MTgwNTAyMyw5NjQ0MTEzLjQ5ODg4NDk5Niw4MTY5OTcuNTg5NTc1MjcxOCwzMjAxODE2Ljg4MDcxOTg1NjQsNjAxNDQxLjEwMjA4NDI2NjEsNDQ1MzQ1NC43MzMxMTI3NDMsMS42MjEwMDk4NDgwMjczOTUzRTcsMTcxODE0MS42MTc3NDcyNDQ0LDU1MzAyMzQuMDM4ODY2Nzg2LDQ4MjMxMi45MjY4NTUxMTc4LDQ1ODU2NTcuMjk5OTg4OTE5LDQyNTg3NzEuODA2ODYwNzMyLDE0ODQxODkuODMwMDM5Mzg1NywzOTIzNzcuMjgzNzUxODQwNjQKKzQsRnJpIDI4IEphbiAxMSwzMjM4NjcuNTQxNzkwMDgyOCwyMzkxOTk5LjI5NzI5NjkzNDMsMTQzMjI1Mi42MDU0MzgxMDM3LDI2NDcxNjUuODMwMjQzOTYzMywxLjQ1NTY3MTAwMjQwODk0NTdFNywyMjA4OTk1Ljc4MDIyMzAwODIsMTgxMjE2NC4zNTg3NTI0MywyODc1MjMuMjA0MDAwMjE5NDcsNDU3MjA4LjQxODgwMDYyNDUsODI2NjcwNy4xOTA4MDIwNjEsNDIxMjM5MS4wOTA2OTg2MjgsNjE3NDA3LjU5NTE1NDE4OTcsMTU3NjkzMS42NjUxMDA0OTU4LDY4MjcwOC4xMDcyNDIwNDg1LDY0MzE0NjYuNDY5Njg2MzUzLDMyNTA3NDkuMTI0Mjg4MDg5LDE0Njg2MDkuNDc3NzYxNzQ5MiwyMTc0ODA2LjY0MDE1ODUwOTQsMjM3ODUwMS44MTU3MzE5ODYsMzMyNDM2Ni4zOTYwMjU1Mjk2LDI3ODAxOTguNTA5ODQyNjI4LDY3OTc3OS4xMzcyNTA4Myw1MjE4MzI2LjI3MjI5MDgxMywyNTUxMjYzLjUxMTE1ODg0MjYsMjkyNzc0OC4xNDE4MTUwNTg0LDE1Mzk3MTEuNDU2NTUzNjIwMyw0NzU5NjguMDM0MDY4ODkyNzcsNDIwMjM4MC42NjgyMTk2MjksMzQxNjA4LjQxNjc4MjU3NDAzLDkwNTMwMS4xNzUxODA0NjgyLDY1MTQzNC42OTAyODUzODkyLDQ0MDcyNTQuODczOTUzNTU4LDk1NzE3OS4zNjE4NTMzNzgxLDEwMDk3ODQuOTUxMjc3Mzg3OSw5OTM5OTI1Ljg1MDEzMDMxNiw1OTgxNTI0LjYyNjYyNzMwOCwxODM2NTczLjkwODQ5NzQyMTgsMTc5MTQzNC41NDI4ODY0NTEsNjQ2MzkyMy45MTQ4NDcyMSw1NDc1NjQuNDA3MjExMDM2NSwyMTQ2MTg0LjcyODMxMTAzNSw0MDMxNDQuMDMxNTY1NTcxMSwyOTg0ODUzLjE5Njg5NDA0MywxLjA4NjQwODkyMjMwMzU1ODVFNywxMTUxNDI5Ljg5OTA0NDI0OTcsMzcwNjUwMy45OTgwNDQ3MzgsMzIzMjgzLjM2NjA0OTgyNzYsMzA3MzM0NS42NDk4Mzk5ODMsMjg1NDU5MC45MzIzMDE4NDQ1LDk5NTAxNS41MzkwODY2NzE4LDI2MzAwNS42NzgyMTM1MTA3Cis1LFNhdCAyOSBKYW4gMTEsMjE3MDY1LjkyNTg5MTk1NSwxNjAzMzIzLjEwOTg4NDM1NTIsOTYwMDExLjY4NjgzMTE0MzUsMTc3NDIxMC4zNzE5NzI4MTAyLDk3NjMxMzEuMjcyMDYxODc5LDE0ODA1MzguNjcxOTExMDIxNywxMjE0NjQyLjU5MjExODg0LDE5Mjc1MS4xMDY0NDQyNzc5LDMwNjQ3NS4zMjYzMzE4MjI2LDU1NDA2MDUuNDUxODE0NTMzLDI4MjMyNzIuMzIwOTU4ODQ5NSw0MTM4MTcuMjM5MzA2NjQ2ODYsMTA1Njk5OC4xNDI1MzczOTY5LDQ1NzU5MS4wMDc2ODgyMTg5Niw0MzEwNTc1LjM4MzY5MzI5NSwyMTc4OTA2LjUxMDAzNDA3NSw5ODQ0MDkuMTc4MTMzOTE3NCwxNDU3NzQyLjkwMjgxNjU4ODMsMTU5NDI0My4yODY0OTkzNTYsMjIyODE0NC4yODc0NTgyNTQ1LDE4NjM0MjguOTMwMTE2Mzg5LDQ1NTYzOC43MTE0MDM1NjI4NiwzNDk3NTg3LjI1OTA2NjE2MzYsMTcwOTk0Mi4wMjM1MDc2MDQ0LDE5NjIzMDkuNDE2ODg1NjA3NCwxMDMyMDU2Ljg4MTIyMzIyMjEsMzE5MDIxLjYxODA4MTM4NjcsMjgxNjYxMS40NDMzOTE1MTU0LDIyODk3MC4zMDIzNzgwOTQwNiw2MDY3ODkuNzkzODU4Mjg5Nyw0MzY2MjguNzg2ODQxNTg4MjcsMjk1Mzk0OC42OTg4NzkzMzIzLDY0MTU1My41Njc1Nzg4NDc1LDY3Njg2OC4xODAxNjM5NDgxLDY2NjIyMDQuNzM1MjIyNzQ4LDQwMDkxNTQuNzMwOTk2MjY3NCwxMjMxMDA0LjIyODAyNjA0MTgsMTIwMDcwMi4zODE3NTM5MDIsNDMzMjQ3NS4zNzkyNzA0MzcsMzY3MDAwLjk3MjU5OTc4MTcsMTQzODU0Mi42ODEzNTU2NywyNzAyMTguMTM2MDQ2NDk2NTcsMjAwMDU5Ni4zMzI0ODA0NDM5LDcyODE1MzUuNzA0MjI5MTcxLDc3MTcyMi45MjU3ODA4NjU1LDI0ODQyNzAuOTQyOTIyMzA5LDIxNjY4Ni42OTkzNjE3NzczNCwyMDU5ODc5LjMzMjk3NDI1NjcsMTkxMzM1Mi4zODA4MjY0OTU2LDY2Njk2My43NDg1MzMyODA4LDE3NjI4NS42NDU4OTQwNDg3NgorNixTdW4gMzAgSmFuIDExLDE0NTQ4OS43OTI1NzQ0NjUyNywxMDc0Njg5Ljk2NDg3ODM4NjEsNjQzNDgxLjQ1OTU5MTQ5MTYsMTE4OTE3Ny43NjM4NzYwOTQ3LDY1NDgyNzQuMDg5NzU2NjUyLDk5MjM1NC42NjM0MzEwMDI1LDgxNDE0Ny41NzMyMzE2MzM5LDEyOTIzNS45ODMyMTk3NTAzMSwyMDU0MzYuMTM5NjY2MjM5OCwzNzEzNjIwLjUxMTI5NzU4NSwxODkyMzMxLjA2MDU4NTIwNjYsMjc3MzgxLjY5NTgwOTAzOTUsNzA4NDk2LjE4NjUwNDQzNTcsMzA2NzA4LjM2NDYxNzA3MDEsMjg4OTE4My45MzM4MjY2OTQsMTQ2MDQ4My40OTgyOTA2MDg0LDY1OTg1MS4xMDQ0MTgyNzE1LDk3NzEwOS42ODEzNTgzNTUsMTA2ODU4NS43Mzk1MjYyMTczLDE0OTM0MzQuNDczODEzMDE2NCwxMjQ4OTg1LjE3OTQ1NTk1NTUsMzA1NDA1LjQyMDU5Nzg3Mzc0LDIzNDQzMDAuMDgzNTY4MDg5NiwxMTQ2MDk2LjM4MjgyNDk0MzksMTMxNTI1NS4wNDQwNDU4NDQzLDY5MTc4Mi4zNDczOTY5NDU3LDIxMzgyOS43Nzc2OTgyNzQ5NiwxODg3ODUzLjM2OTUxOTc2MDQsMTUzNDczLjU0NDg1NDU5NjY2LDQwNjcxMy4zNjE5NzMyMTkyLDI5MjY1Ny42MTc4MjM2MDEyMywxOTc5OTEyLjU5MDU0MTkzNzQsNDMwMDEwLjUxODIxMzc3NzYsNDUzNzYxLjk2MDEyMjI5MDUzLDQ0NjU0MDcuMjM3NzkyMzkxLDI2ODcxOTkuMzc3MTUwNjU2LDgyNTExNC43MzI5OTU5NjIxLDgwNDc4MS45NjIwNDUxMzMzLDI5MDM5MDUuMjUyNDE3NjcsMjQ1OTg1LjA3NjI1NDU5MzM1LDk2NDIzMS4zMTQwNjQ1OTk1LDE4MTEyMi4yNTg0MDk5NTk3NiwxMzQwOTIyLjE5NzM3NDU4MTEsNDg4MDQ5MC41NjQ5NDE2MjIsNTE3MjUzLjcwNzA0NjcxODksMTY2NTEwNS44ODQxODY0MjcsMTQ1MjM5LjY3ODEyNDcxODU3LDEzODA2NDYuNzE1NDg1MTA4OCwxMjgyNDc3LjM4MDk2Nzg5MTUsNDQ3MDY5LjcyNjQzOTI2OTE0LDExODE2MC40OTU1ODc3MzYzNworNyxNb24gMzEgSmFuIDExLDk3NTE2LjczMzk4NDkwNzMyLDcyMDM1My45NTE3NTI4NzgxLDQzMTMxNi43NDU1NTcxODk1Nyw3OTcwNjYuNTYwMjgwNDI5LDQzOTIwODAuODk1NTA2ODgsNjY1MTUzLjUzNzY4OTI0MTEsNTQ1NzA2LjE5MTEyMjMxNDUsODY2NTQuNTY2NTg1NjQ4NDMsMTM3NzA3LjY4NTY2Njc5NjE3LDI0ODkxMDQuODk5ODgyMDAzNywxMjY4Mzc3LjU2NDY4Mzg5MSwxODU5MzMuOTA4MTk3NjU5NSw0NzQ4OTkuMTExMjY1OTUwNSwyMDU1NzcuNDk0MTIyNDQzMjgsMTkzNjUxMS45NTgzOTg5MTI4LDk3ODkzOC44Njc1Mzc3MDUyLDQ0MjI5OS41NDM0ODMwMDMxNiw2NTQ5NDcuMjAzNjM1MjAzNSw3MTYyNTEuMDMxMjE0MTU5MSwxMDAwOTk0Ljc1MDc0NTA4ODgsODM3MTUxLjY2MTgwNzM1NjMsMjA0NzA3LjU1MzMzMDIxMzIsMTU3MTMwNC4wMDM1Mzg2LDc2ODE4NC41NTAyMDUyMTgzLDg4MTU2Ny4wMTIyNTQ3MzI4LDQ2MzY5OC41NTQ1MTM3MTA2LDE0MzMyMy43MjA0NzE1MTMxNywxMjY1MzU2LjI4MjA5ODY1NDcsMTAyODcwLjA2OTgwNzU1MDQ1LDI3MjYwOC45ODg1NTA3NzQyMywxOTYxNTkuNDM1MzI5MTcwMDIsMTMyNzA2My43OTI4MDE1MjMsMjg4MjIyLjEzNzM0OTU1MTYsMzA0MjA3LjAxMjI4NTE3NTUsMjk5MzAwMS4wOTc5ODc0OTgsMTgwMTE0Ni4wMTQ1Mzg1Mzg2LDU1MzA1Ny40NDkwNjQ3MzE2LDUzOTQxNi4wNDY4MjgyMjQ4LDE5NDYzOTQuNDI4NjM2ODU5NCwxNjQ4NzQuNDkwNjU1NDkwNyw2NDYzMDkuNTAzNDg3ODUyMiwxMjE0MDMuMTgxMDY3OTkxMyw4OTg3NzMuMzEyOTUxNjE3NCwzMjcxMjAzLjgwMTc3NzgwNywzNDY2OTguNjgwODcwNDI3MTcsMTExNjA1OS45MTI0MjU1NjAyLDk3MzUwLjgwODk5MDc1MzgsOTI1Mzk0LjMxMDIwMzU1MDgsODU5NjE4LjE1MjkwNjI5NiwyOTk2NzMuNTgyMTAwMzE0Niw3OTIwMC42NDQ5MTQ1NTg2NQorOCxUdWUgMSBGZWIgMTEsNjUzNjIuMzIyMDIxOTgzNjIsNDgyODQ2LjAyMjgyMzUxNjIsMjg5MTA1LjY1OTIzOTUzNzk2LDUzNDI0OS42NjQ3MTE5MzIxLDI5NDU5MDQuODY1OTczNjAzLDQ0NTg0MC40MjY5ODM3NjU1LDM2NTc3NS41NzE2MjI3Mjg2Niw1ODEwNC4xMTA2MjMwODQ0LDkyMzA4LjAzNDM2MDA3MzIsMTY2ODM2Mi41NDIyMDExMjg2LDg1MDE2My4wNTY4NDA1ODQ1LDEyNDYzNS45OTQ2NzYyMjQ0NywzMTgzMjAuOTAwMDg4NTkzMSwxMzc3OTIuNTYwNjk5MTgxLDEyOTc5NzUuNzk4ODU1MTcxLDY1NjE2Ny4xNzQwOTE4MjE5LDI5NjQ3NC4yNDM1MTg0MDgyLDQzOTAwNC43NjMwODMxNzMxLDQ4MDA4OC4zOTkxNjE0NzEzLDY3MDkzMS4yMDk2MjQ5ODQxLDU2MTExNC40NDI1MTYxMzk3LDEzNzIxMS42NjUxNDUwMDA4LDEwNTMxOTIuMjcwOTUwMDk5Miw1MTQ4ODYuMjE4MzI3NzE5MzcsNTkwODgyLjcxNjI5Njg1NjEsMzEwODE0Ljk4NzM5MDM1NTcsOTYwNjUuNjcwOTQzMDA3ODksODQ4MTIxLjYwNzI2NzEwMDgsNjg5NTEuNjQyOTA0NDI5ODMsMTgyNzIyLjUyMzUzNDY1ODc3LDEzMTQ3OS43NDU3NjY3MTQxMyw4ODk0ODMuOTgxNDMyODk4OSwxOTMxODYuMTI2OTgyMzk5NywyMDM5NDYuNjMwMDI3MDE3MDYsMjAwNjEwMi45OTUxMDA1OTU1LDEyMDcyNTIuODkwNDYzNjA4NSwzNzA3MDMuMDk4MDg5NDQyNjUsMzYxNTUxLjQwNzQ3ODgwMzk0LDEzMDQ2MDYuNjg1MTIwNDU5OSwxMTA1MDkuMzEzMzIyMjM4Myw0MzMyMTEuMzgwODc4NzE1ODMsODEzNzQuNDk5MzA4NTY1NzUsNjAyNDE3LjAwODIzMDc3MjksMjE5MjU2NS42Mzg1ODI1Mzk3LDIzMjM4Mi4xMjQxMTMzNjg5Miw3NDgwNTUuMzM3NDI3NTE1OSw2NTI1Mi4wMTkyNDEyNDg1MDUsNjIwMjU3LjMzMDYxNTYyMSw1NzYxODQuNDE2MTg2MjM2LDIwMDg3My4wMTM0ODk5OTMxNCw1MzA4Ni42MzM2NDY4NTU4NworOSxXZWQgMiBGZWIgMTEsNDM4MTAuMjkyODE0MDEyMDgsMzIzNjQ2LjY4MDU5OTQ3MjM3LDE5Mzc4My40Mjg2ODM0NjU2LDM1ODA5MS43ODU3NzY3MzYzMywxOTc1OTI3Ljg3MjQ3ODY4NiwyOTg4MzkuMzIwOTc1Mzk5MiwyNDUxNzEuNjYyMTg0MDY1ODUsMzg5NjAuNDg0MjAzMDM2NDcsNjE4NzUuNzk3OTI3MzU5Mjk0LDExMTgyNDcuNTQxMzM5Mzk4LDU2OTg0NC43MDU3Mjg0MjAzLDgzNTQ2Ljc5ODkxMTEzNTg1LDIxMzM2Ny43MzI1NjA1MzE5Niw5MjM1OC4yNjI4NDM5NzQ0OSw4Njk5ODcuOTQ5MjEyNTI2Niw0Mzk4MTguMTk1MjYwNTcxNDMsMTk4NzI3LjE5MzAxODE3OTQ1LDI5NDI2MC40OTIwODQ5NTE1LDMyMTc5My4yNDI5MzU3NjA2LDQ0OTcwMS4yMTg1ODM2NjE0LDM3NjA5NS44ODc5OTUwODY5LDkxOTcwLjM3NTY5NzUxNTk2LDcwNTkxOS4xMTE5MTY4MDA4LDM0NTEwOS42NzIwNDI1MDY1LDM5NjA0Ny4zNjc1NTAxNzAwNSwyMDgzMzcuNzUxMDYxMDk4ODIsNjQzODkuOTU5MTUxOTMwNSw1Njg0NjQuNTI2MzEwNDM3Nyw0NjIxNi44MDkyOTY3NjU2MiwxMjI0NzMuOTYxMjU0NjY0MTEsODgxMjYuODYwMTI1NDYyNCw1OTYxODkuNTEyMDg3OTQ4NSwxMjk0ODYuNDU1MTkxMjM0MDIsMTM2NzMwLjY4MzM5MzIzMjU1LDEzNDQ2MTkuNjIzMDEwMzgxLDgwOTE4NC4xNzE3MTgwMTk1LDI0ODQ3NC41NjY3OTk1NzU0LDI0MjMzNC45OTA5NTg3MzY0Miw4NzQ0MzYuMjQwNzM3MjM4LDc0MDcwLjMyMDAzMjg0MDEsMjkwMzc0LjgwOTU4MzM3ODMsNTQ1NDMuOTIwODUwOTcxNzEsNDAzNzc5LjM2NzQ0MTYxNzM2LDE0Njk1OTQuNzc3ODU1NjU2MywxNTU3NTkuMjAzOTU2NTc5Niw1MDEzOTQuNzkwNzc0NzkxLDQzNzM2LjkxMDcxNDEyOTI2LDQxNTczNS4zNTQzNDk1NzIxLDM4NjIwNC4zNzk5Njg4NDQyNCwxMzQ2NDYuMzU3NzUzMjE0MDgsMzU1ODIuOTA1OTQxOTQ3OTcKKzEwLFRodSAzIEZlYiAxMSwyOTM2NC42MDE5NTg2NDcyNCwyMTY5MzYuNjk1MDQxMDcyMTUsMTI5ODkwLjA3NTkxODYwOTQ0LDI0MDAxNy45OTYyNjc4NjYsMTMyNTM1My45MzE2OTI2NDkxLDIwMDMwNi44MTExOTYwNTAzMiwxNjQzMzMuMDg3MjMyOTA4MDYsMjYxMjQuMjg0NjgzOTE3NjI0LDQxNDc2LjQ5ODUyMzAyNzQ3Niw3NDk1MjIuNTMwNzU2MzE3MiwzODE5NTMuMzU3NzQyNzQxNiw1NjAwMy42OTgzOTE0Njg0MiwxNDMwMTguMzM3NzUyOTAzNzIsNjE5MDQuODY0NDM4NzAzNDcsNTgzMTIxLjQ5MTU0MTExOTYsMjk0ODAyLjQ4MzUyODkzNTA2LDEzMzIwNy4wNTY0MTM1OTE5NiwxOTcyMzkuNTcyMjM5OTgxOTQsMjE1NjkwLjg4OTU5ODIyODQsMzAxNDE3Ljk1NDI3MDUzNzMsMjUyMDgzLjY3MDE0NDg2MjMsNjE2NDUuODg0OTUzODIxMDg1LDQ3MzE1Mi41NzU1MjQ4MDc2LDIzMTMxNC4xMDM2ODUzMDk2LDI2NTQ1NS42NDEzMTgwODk4NSwxMzk2NDcuNTk1MjA5MzQwMDcsNDMxNTguNTc2NzI5Nzg4OTIsMzgxMDE5Ljg1MTc2NTAzOTksMzA5NzguMDc3NTk3MjUyMTgsODIwOTAuODA1NjM3Mzc2OTUsNTkwNjguNjExNzQ0OTg0ODksMzk5NjAzLjcxMzk2MzkzODM1LDg2NzkwLjQxMzA3NTY4MTA2LDkxNjY3LjkwNTQ4MDExNTY5LDkwMTI0OC42OTE1ODUxNTEsNTQyMzY5LjgzMDk4NDc4ODcsMTY2NTQ3LjAxMDUyNDk1MzEzLDE2MjQyOC4xMDYxNDQ1MTM4NSw1ODYxMDUuMzc5MTY0NTIzOCw0OTY0Ni40OTAzNzE2Mzg5NCwxOTQ2MzMuMzYxNDk1MTQzMSwzNjU1OS43ODMzMjQxMTc5NCwyNzA2MzguNzY5MDM3MDI2OCw5ODUwMTIuMjA1Mjk1NDcxNywxMDQ0MDAuODY3NjE0OTc4NDYsMzM2MDY2LjI0NDM0MDUwMjEsMjkzMTUuNzc1MzQyNjM1OTU2LDI3ODY1MS4yNjM4ODQ5NDEzNSwyNTg4NjQuMjM2MDU2MzA5NDgsOTAyNTQuMTc4MDk3OTg5MDIsMjM4NTAuNDYzNTg5NTkwMTgKKzExLEZyaSA0IEZlYiAxMSwxOTY4Mi4xMDA1MjkxMjgyNjQsMTQ1NDEwLjAyNDcyNDEwMzY2LDg3MDYzLjIxNzczOTYwNTY1LDE2MDg3Ni41MjA4MzM4NDM5NCw4ODg5OTQuMTMxMTgyNzkwNSwxMzQyNjIuMDY5OTA3ODU3NzUsMTEwMTQ4LjYyMTM3OTMwODQ5LDE3NTE3LjIyMTMwMDQ0MzA3NCwyNzgwMi40NjUzNjA4NDcsNTAyMzc4LjE2NDcyNzAxODUsMjU2MDEzLjk4MjI5MjQ0NDYyLDM3NTQwLjgyNDYxNjY2NTcyNiw5NTg2My43MDM0MTkzNDI0Niw0MTQ5Mi44MjQ1MTYzMTQwNDUsMzkwODQ0LjYyNjkyMjA4MDQ3LDE5NzYwMC42OTIwMTY0MzQxNiw4OTI4OC43NjY4NjgwMDA4NSwxMzIyMDcuMzU1Njc2NTY0NDgsMTQ0NTcyLjYwMTA3ODcxMjU2LDIwMjAyOC44MTk5NTk0MTE3LDE2ODk2Mi4zNzQyNTA5NDY1Nyw0MTMxOS45Mjg0MjI0ODU2NSwzMTcxMzYuODAwNTU1ODE1NSwxNTUwNDAuOTIzNDMxMDE5MywxNzc5MjQuNTc3NDA0ODE0MDcsOTM2MDQuODgyNjE5MzY0MTMsMjg5MjcuNzkxNTM4ODExOTksMjU1MzgyLjQyMTQwNjYxMzU1LDIwNzYzLjg2ODU2Njc0NTkxOCw1NTAyMy4wMjk5NDkyOTg3NCwzOTU5MS43MjQ5MzkxNjk1NiwyNjc4MzkuMDI1NDE3NzkxNyw1ODE3Mi41ODI3NjQ3NzIzODUsNjE0NTYuNzI5NjY3MTg0MTksNjA0MDcyLjQxNzAyNDMwNDMsMzYzNTMyLjE3NjY5NTAxNTYsMTExNjMyLjYwMzQ3MjMyOTcyLDEwODg2OS4yODk4NTc0OTE4MiwzOTI4NDYuMDk5MjkxOTA2OCwzMzI3Ni4wNzExMTAxODkyNywxMzA0NTkuMjkxMzY0NTUzODgsMjQ1MDUuMzExOTM5ODA4Mzk1LDE4MTM5OS4wNjk4MTc3NDA3Myw2NjAyMTQuMTA3NzQ1ODAyNCw2OTk3Ni43NzczODIzODMyMSwyMjUyNTIuMjQyNTQzMDk2NiwxOTY0OS42MTA0NDY0MTk1NiwxODY3NjguNzY0MzE3MzY2MywxNzM1MTAuNjg0ODQ2NTI3MzgsNjA0OTcuODIzNTYyNDY5OTEsMTU5ODYuNDMyNTc0ODQyMjc2CisxMixTYXQgNSBGZWIgMTEsMTMxOTIuMTYyOTA2ODQyNTM1LDk3NDY2LjE1ODQ1NTc5MjIsNTgzNTYuNzkzODk3MTgwMDc2LDEwNzgyOS44MjIxNTQxMDk2Niw1OTYzMzEuOTg0ODMwOTgyOCw4OTk5My4wNjM2OTc4NzgzLDczODI5LjYzNDAwNTMyNTgyLDExNzQ2LjExODEyMTM0OTEyNSwxODYzNi40OTg0NzQ1MTEzODcsMzM2NzIzLjg5NzIzNjUzMzEsMTcxNTk5LjAwODI2Njc4NjYsMjUxNjQuNjY2ODUwNzQ2MDc0LDY0MjU2LjE4NTg3NTM5MjM3LDI3ODExLjExMzM4MDE1MTIyMiwyNjE5NjYuODEzNzk1NzQwMywxMzI0NDcuNDYxNDA2MzAxNDIsNTk4NTAuMTUxODE5NTkxMTgsODg2MTYuNjU5ODk0OTQxMTQsOTY5MDMuMTI4MTA3MzM1OCwxMzU0MTEuMTQ0NTY2MjIwOSwxMTMyNDguNDQyNDI0MzM2NDIsMjc2OTUuNzI0OTg2MDE4OTA0LDIxMjU2My42NjMyMjMwNzU3NCwxMDM5MTcuMjIyODI2MjU3NzEsMTE5MjU1LjA1MTkwNzYyMjM3LDYyNzQyLjUyODE2OTYwMDEsMTkzODkuMjMxNDAwOTE2Mjg3LDE3MTE3MS40MDg5OTEwMDM2NywxMzkxNy40NDk2MjQxNTY3NzIsMzY4ODAuMDcyOTgxMjY5OTM2LDI2NTM2LjgzOTM2ODUyNzcxLDE3OTUyMC45MjQ4NTM5ODA5NSwzODk5MC43ODQzNjg3NDQ1Myw0MTIwMi43NDE0NDA0ODU5MTYsNDA0ODgzLjY1NTk3MTUzODMsMjQzNjYxLjcwNDYwMzgwMTQyLDc0ODI0LjMzNjY3OTA2NDk2LDcyOTcwLjM1NzE5ODUxNjg0LDI2MzMwOS4zMTgyOTI3NjI3LDIyMzAzLjQ2NjQ0OTgxOTg0Nyw4NzQ0NC4xMjQzODg4MzY2NywxNjQyNS4zNTA4OTY1MjM4MywxMjE1ODQuMTY4NTIwNzk1OTgsNDQyNTExLjc2MDA5ODA2Mzk3LDQ2OTAzLjA2Mzk0ODEwMTQ5NSwxNTA5NzYuODA0MTY1MTc4OSwxMzE3MC41NTIzMDI5MjY0MDYsMTI1MTgyLjY5NTQ0MDI2Mzk4LDExNjI5OS41NDExNjc3MTYwOSw0MDU1MS45MDQ0NDM3MTQ2NCwxMDcxNS4yOTA0MzAwOTY1NTcKKzEzLFN1biA2IEZlYiAxMSw4ODQyLjIxMDQ5ODk3NDE5NSw2NTMzMC4xMDc2OTYxNTg4LDM5MTE1LjQzNTE5NzI4MDQyLDcyMjc0LjU1MDg3MDgwMDc0LDQwMDAxNC42NjYxNDI5NjkzLDYwMzIwLjUxMDY3MzkyMDk4LDQ5NDg2LjAwNzgxNjc3NjMsNzg3Ni4yNTI5MDkwMTYxODgsMTI0OTIuMzg0MDcyMTk5NDY0LDIyNTY5Mi42NDE1NTkyMjQ3LDExNTAxOC4wODk4MzA4ODkyOCwxNjg2OC41ODAxMzQ5MTgwMSw0MzA3MC4wODI1ODgyMzU1NCwxODY0MC43NzAwOTgzMDA0NDMsMTc1NTg1LjUxMTQxNTkzLDg4Nzc2LjY3MDgwMzMwOTA4LDQwMTE3LjQ4NDYzNDgwMjIxLDU5Mzk4LjQ1NjI5MDczNDkzLDY0OTUxLjU2OTgyNDAyNTkyLDkwNzYwLjI0Mjk3MDcxOTI4LDc1OTA1LjczODIzMDk1MzYsMTg1NjMuNzYwNzQ1NDA0Mjc3LDE0MjQ3Mi42NjQyMzY1NzgwNCw2OTY1MS4yNTkwNTE4NDg1LDc5OTMxLjQ2ODgxNDk5MTU1LDQyMDU1Ljc2NTMyNTQ5MDk4LDEyOTk1Ljg4OTQxNzczNzM4LDExNDcyOC41ODUxMzU0NDY5Niw5MzI4LjQ4NDYzMzczMzI3MSwyNDcxOS40NjgyMTU1Mjc5MywxNzc4Ni42NDY0MjUyMzAyMDMsMTIwMzI1LjE2MTYyNzk0MjU4LDI2MTMzLjk4OTY1NDkyNDA4LDI3NjIzLjY2NTIzNjY4NTM5LDI3MTM3Ni4xMjc5NDE3NTE2LDE2MzMxNy4xNTU1OTE4NjQwOCw1MDE1Mi43NDk5NDU3MzQ4NSw0ODkwOC44Nzk1MDMzMjY5MzQsMTc2NDg1Ljk0NjEyMjgyODE3LDE0OTQ5LjAyNTE2OTEwMjM0NCw1ODYxMS45NjU5MDQ0MjExNywxMTAwOS41Mzg2MDUxMDE0MzYsODE0OTIuNzgxOTMwODYzMTIsMjk2NTk1LjgzMDQwNzU4MzgsMzE0MzcuNTU2MzMzMDU5MDM4LDEwMTE5My4yMzc2NjI2ODY1LDg4MjcuODMyNjc3ODQ1NDk4LDgzOTA0LjM2NDMyMTA0NTIsNzc5NTIuNDYxMzAwNDY1OTMsMjcxODIuMDg0Nzg5NDQ4MjUsNzE4Mi4xODE2MzAzMDIwMjIKKzE0LE1vbiA3IEZlYiAxMSw1OTI2LjYwNDgzODE4NDU3ODUsNDM3ODkuNzk2MDg5NTA2NDQ2LDI2MjE4LjMyNDkyMjMxMjg3LDQ4NDQzLjEzMDA5NDA5NTMyLDI2ODMyNS43MzcxMDg4NDU0NCw0MDQzMS42Mjk3Nzg3MjQzMSwzMzE2OS4xMzczMzQ4MjU3Miw1MjgxLjMwNDA2NzE1MDI4Miw4MzczLjg3MjM3OTUyODIzMSwxNTEyNzIuODk5MTk1NTk4NzMsNzcwOTMuNTA4MjA5NDU4NjcsMTEzMDcuNDgwMDU2MjIxOTI4LDI4ODY5LjMxNTQ4MzY4MzUsMTI0OTQuMjI3ODQyOTc2NjM0LDExNzY4Ny43NzA5Njc0NTcxMSw1OTUwNS4wODg4Njk5NTI1NCwyNjg5MC43MDIwMzY0MzUxMzcsMzk4MTMuOTIyMTMxNjIzODI1LDQzNTM1LjMwMTg0NjU3NDAzLDYwODMyLjY5MzYwNzE2NTQ2LDUwODc2LjQ4Njc0NDg4MDczNCwxMjQ0Mi44MzE4NjcwMDY0NTMsOTU0OTMuNTg0OTMxNDU4NzIsNDY2ODQuMjc5NDcxMzI4MTEsNTM1NzQuNjAzMjYzNDQyMDU1LDI4MTg5LjYxMDkwNTIyODU3LDg3MTAuNjY5MTM2NjkyNjMyLDc2ODk3LjUwMjMwNjI0OTExLDYyNTIuNjI4MDkyNDk5NDcyLDE2NTY4LjYyODMzNDM4NDc1NCwxMTkyMS43MjM2NTkxMzIzNyw4MDY0OC44MTM3MTM2NjM5OSwxNzUxNi41OTAzMzIwMDMyOSwxODUxOS43NDYyNzcwMDE1NzcsMTgxODkxLjgyODk5NDUxNDEsMTA5NDY1LjI5Mjc3NDE4MDc0LDMzNjE2LjA0OTgyOTUxMjcyLDMyNzgxLjUyMTc5NzA0MjQzLDExODI5MS42NjM2MjQwODUxOCwxMDAxOS42NzMyMjkyODI3NjIsMzkyODYuMzc2OTM3MTI3MjM2LDczNzkuNDQzNjY1NDk4NjE1LDU0NjIxLjIyMDA4ODk1MjQyNSwxOTg3OTUuMDA1OTAyMjQxNCwyMTA3MS41NTcxOTIwMDY2OCw2NzgyNS40ODUzNjMzNzM3MSw1OTE3LjAzNjY2Nzk1NzE3MjUsNTYyMzcuMzY5NzcyODgwMzEsNTIyNDkuNDQ5MTE0Njc2MTYsMTgyMjAuMjQ3NjE0NjkxODEyLDQ4MTQuMDMwODY1MDYwNjc4NQorMTUsVHVlIDggRmViIDExLDM5NzIuMzg1MzI5MDQwMDQ4NCwyOTM1MS42NDgzMjkzNDQ0NDMsMTc1NzMuNjQwOTIxOTY4MjU0LDMyNDY5Ljc3NDU0OTIwMDMzOCwxNzk5ODkuNTc4OTE0MzcxMSwyNzEwMC41Mjc4NjQ0MjQxODQsMjIyMzIuMzgxNTM2MDAyNTIsMzU0MS4yNjk4ODQ1MDkxMDcsNTYxMy4xNTkwNDQxMjkyMzUsMTAxMzkyLjMzNjI5NTU2NTI2LDUxNjczLjcyMjI5NDQ1OTgyLDc1NzkuNzE4NzcwODcxNzIxLDE5MzUwLjcyNzEzODIzMDc3NCw4Mzc0LjQyNjc2ODc2Nzg5MSw3ODg4MS4zMzYxMDAwMzU3OCwzOTg4NC45ODE5MDU0OTg0NSwxODAyNC44MDU3NTA2NTAxNjUsMjY2ODYuNjk0ODg1MjEwMjA3LDI5MTgwLjU1MzE1ODM5NTg2LDQwNzczLjU1NzAxMDUwNjgzLDM0MTAwLjQyMTk3MjY2ODgxLDgzNDAuMTI0NzkzNTkyNTA0LDY0MDA1LjQ1MzgzMTk3OTcxNCwzMTI5MC41MDY4MTU2MTM2NDgsMzU5MDguNzUwNjc3NDMyMjYsMTg4OTUuMjQ5NzYwMDI3Njc3LDU4MzguNDQ0MDkxMjQ4NDcxLDUxNTQxLjAyMDQ5NTg3MTYxLDQxOTAuOTY2MTEyNDAzMDQ4LDExMTA1LjM5NjQ5OTc4MjgzLDc5OTAuNjg3MjM0OTIxMjU2LDU0MDU1LjQ3MjMxNzYyODY2LDExNzQwLjY4Nzk4MDI2NzM5NCwxMjQxNi4xNjEwMDMyNzg4OCwxMjE5MTQuMzY3NzkxNDMwOTUsNzMzNzAuNDUwMzE4ODIyODMsMjI1MzEuOTQzNzg1NjEwNzQsMjE5NzIuMDU0MzI0NjUzNDM2LDc5Mjg2LjMyMDc1MzY0MDgzLDY3MTUuNzQ4NDczMjA1ODYxLDI2MzMyLjg0MDM1MjAzODg4Niw0OTQ2LjI3Mzk0MTQ2MzUwNCwzNjYxMC4zNDIyMzA1ODEzNywxMzMyNDMuNTIxNDY4OTk4NCwxNDEyMy41NzkwMjY1NTc0NCw0NTQ2MC41Mjg5NjY0ODMyOCwzOTY2LjAxNjI1ODk2MDU4OSwzNzY5My40Mjg4MjA0OTU1MywzNTAyMS40MTE5OTkyMTIwNTQsMTIyMTMuMDk2NTU3NzU3NTY2LDMyMjYuNzIwOTMzOTU1NjI4CisxNixXZWQgOSBGZWIgMTEsMjY2Mi41NDU1MTkxOTkwMTUsMTk2NzMuOTczOTI3OTAwNDM1LDExNzc5LjI3NTcxNTEyMjkxMywyMTc2My4zOTQxNzUyNzk1LDEyMDczNC4zOTUyNjM3OTA4MSwxODE2NC45NjI4MTg4ODcyMzgsMTQ5MDEuNzY5ODAzNzAyMDU2LDIzNzQuNTA2MjE4NjExMzcyMywzNzYyLjYwMjY1NjI4ODM2ODUsNjc5NTkuMzc4MjYwNDI4ODksMzQ2MzUuNTM5ODQ3MzAzNzY0LDUwODAuODk2MDk5MDIxODAyLDEyOTcwLjU0MTYzNDc4NDY0NCw1NjEzLjA3NTEwMjU0NDk4NCw1Mjg3MC45ODkzNTY2MTE3MiwyNjczNC4wNDgyODU2MzE4NjcsMTIwODIuMDA2MTU3ODc3NTksMTc4ODcuNzA1NjkyODE0NTI1LDE5NTU4Ljk0OTg0MTYzNDMyNywyNzMyOC43ODQwMjc4MTcwOTUsMjI4NTYuMTIwOTg4MDI2MzUsNTU5MC4xODE1MzE3Mzc5OTE1LDQyOTAwLjI1NzI0Mjg0ODIxNiwyMDk3Mi43MjEwODY3MDQyNzgsMjQwNjguMDk4OTY1MTY0OTgsMTI2NjUuMzIxMTU3OTQ0ODM2LDM5MTMuMjk3MTgzNDI2NDg0NSwzNDU0NS42OTgyMjU3MjkwMTUsMjgwOS4wOTA2NTY5MDI3OCw3NDQzLjU3NjYwMTk0NDc4NCw1MzU1Ljg2MTIyNTQzNDg4NiwzNjIzMS4wOTg0NjY4NzI2OTYsNzg2OS4zMjc3NjQwNzY4OTgsODMyNC4xMTgyMTk5NjIwNiw4MTcxNC4wNTE0MDk2MTU2NSw0OTE3Ny40NTI5OTIyNTQ2OSwxNTEwMi41NjQyMzE3OTU3NDMsMTQ3MjYuOTM1MDkzNDQ4MjU0LDUzMTQyLjU2Mzg4MTcyMjQ0LDQ1MDEuMjc0MTQxOTY3Njc4LDE3NjUwLjM1NTk4NTE3NTcsMzMxNS4zNzU2OTY5MzI3NjE1LDI0NTM4LjQwNDMzMjk0NDMyLDg5MzA3LjI5NTIzNjA0OTc2LDk0NjYuNTgxNDc2NDEzMTI2LDMwNDcwLjI2Mzc3OTU0NDgwNiwyNjU4LjMwNDgzODU5NDg0MzcsMjUyNjQuMjU0MzI3NTcyNjgsMjM0NzMuOTIxMTA3ODM5NjM3LDgxODYuNDgxOTg2MzE2NjgzLDIxNjIuNzg4MjA0NDQ1OTY3CisxNyxUaHUgMTAgRmViIDExLDE3ODQuNjA4NjE0NDcxNjI1NywxMzE4Ny4xNzMyMzE0NDM2NzQsNzg5NS40MjQwMTYyODgxMjUsMTQ1ODcuMjc3OTc3MDkyMDQ2LDgwOTg2LjYyMjc3ODcyNTcsMTIxNzUuNjMyNTkwNDEyNjYyLDk5ODguMjU4MzQyMDM0Mjc2LDE1OTIuMTUwNTIwOTgzOTE5NSwyNTIyLjE0MTAzMzE2MTU2Niw0NTU1MC41ODE4MjIyODM3NCwyMzIxNS4zMDc5NjY1OTIyNDUsMzQwNS44NjU1MTQ3OTIxODUsODY5My45ODYzODE5MTY2NzksMzc2Mi4yNDE4NzM3Nzg0NjM3LDM1NDM3LjMyMDIxODcwNjQ3NCwxNzkxOS4yNjA5NjUxNDMzNzQsODA5OC41NTQ2OTAwNTU1MiwxMTk4OS44NzExMDI5NDg1MTcsMTMxMDkuODQ2MjMxMTU2NjUsMTgzMTcuMzMwMDc3MDk0MzQsMTUzMTkuNTI5Njg1NzQwMzk2LDM3NDYuOTYyMjU5ODA0NDg5LDI4NzU0LjMwOTQ0NDc4NDYxNiwxNDA1Ny4xNDc3NTk4MTcyNSwxNjEzMS44MjI3NjQ4ODMwMSw4NDg5LjQ1NDYyMDcxMDQyNSwyNjIyLjk0MTY2MTQ1MDc5NzMsMjMxNTQuNDg0NTgyNTkxLDE4ODIuODU3MzM5NTYzMzA3LDQ5ODkuMTgxODY1OTUyNDA2LDM1ODkuODM1OTM1MDUyMTA2LDI0Mjg0LjE4MjQ4MTU5NTU3LDUyNzQuNTA2NTU3NjQyMjIsNTU4MC42ODgzNzg2NjU3MTEsNTQ3NjkuNDk2MzM0OTk4NzUsMzI5NjEuODA0OTA0MDA1NTM0LDEwMTIyLjg0OTQwMzYyNzM3Nyw5ODcwLjg0MjgwODIxMTcwNiwzNTYxOS40MjA4NDkzMTk0LDMwMTcuMDA5NTMxNTYzMDE3LDExODMwLjY2ODAxNDUxNiwyMjIyLjIyMTY0ODkyNDY1NzUsMTY0NDcuMDg2ODMwNjc1MDc4LDU5ODU4Ljc5NTMwNzkxOTgzLDYzNDUuMTQ5NjE4MTc1MjYsMjA0MjIuOTMyMjY5NzY0MzYsMTc4MS43ODQzMjg3MTA4NDc4LDE2OTMzLjUzMDYyMTExMTQ3MywxNTczMy45NDY5NDk4MDgxMzYsNTQ4Ny40Mjc5OTE5MjI5MjIsMTQ0OS42NjE1NzQxMTM4NjUKKzE4LEZyaSAxMSBGZWIgMTEsMTE5Ni4xNTk3ODgwMDA0MTc4LDg4MzkuMTY3MzEyOTgyMjU2LDUyOTIuMTUyNjMxNjIyMDc3LDk3NzcuMzcyNTU1NDg5NTY4LDU0MzI0LjMwNzc3MTExOTQ5LDgxNjEuMTAyMDk0MzgxNTA3LDY2OTQuODYzNjM5ODI4ODE0NSwxMDY3LjU1ODE4NTEyNzQ0MDMsMTY5MC42MzcwMzMxOTg5NjMzLDMwNTMwLjgzNzg4MjI4NjQzMiwxNTU2MC42MzExNTU0OTQ5ODMsMjI4My4wNDU4NjQ1NTU2MjQsNTgyNy40NjY5NTQ0MzQ4NDUsMjUyMS42OTU2NDI3OTI0MjI0LDIzNzUyLjIzOTQ3ODk0MzQ5LDEyMDEwLjg5ODUyNTgzMDI1LDU0MjguNDUxODg2NDk5OTUsODAzNi42MzgwNzQxOTkwMjksODc4Ny4xODM4ODEyOTYzNTgsMTIyNzcuMzM3MzE3NjM3MzMyLDEwMjY4LjA2MTczODY0ODA2OCwyNTExLjQ5NzYyNjQ2MzcyNzYsMTkyNzIuODU3ODQ5ODMwNjM4LDk0MjEuOTMwMTgxODkwODkzLDEwODEyLjQ3ODQ0NzU2MTcxLDU2OTAuNDA3Nzg3OTg2MjExLDE3NTguMDYzMzgxOTkzNzczMiwxNTUxOS40NTQxMzMwMzM5NTMsMTI2Mi4wMjg0MDU1NTEyMjUyLDMzNDQuMDgzMzA3MTA2MDQ5LDI0MDYuMTM0OTgwNzU3OTUzNiwxNjI3Ni42NzI0ODUyMjU4MSwzNTM1LjI5OTAxNzcxMDI0MDYsMzc0MS40MTU2ODE1OTQyOTUsMzY3MDkuNzA1NTU5NDQ1MTEsMjIwOTMuMDY4NjQ5NDQ0MTIsNjc4NS4wNzkwNTgyMTc1MzA1LDY2MTYuMDExNTIxMzQ2NTA0LDIzODc0LjMzNjgwMTUzOTY2MywyMDIyLjE3MTkyNjQzMjQ3MjQsNzkyOS44NTIzNjYzNDUxMzUsMTQ4OS41MDUyNTI2Mjg5MDE5LDExMDIzLjgxMTc2NDY0OTE5LDQwMTIwLjc2NTI0MjYwMTYzLDQyNTIuOTU1NDM2NDM2ODg0LDEzNjg4LjYzNDY4ODExODgyLDExOTQuMjc4MzIyNDM3NjEwMywxMTM0OS44MTM5NTcxMTU1OTUsMTA1NDYuMDQ4NzQ4ODg0MjgsMzY3OC4yNDI1MzMwNTU5MzEzLDk3MS42NzExNTcxODYxMTQKKzE5LFNhdCAxMiBGZWIgMTEsODAxLjc0MzkyNzQxMzc1MzIsNTkyNC43NjM1Mjg4MzU0OTEsMzU0Ny4yMjk1Njg2NDg4NDEsNjU1My40NTUyNzczNDQzOTEsMzY0MzkuNjEyODkxMzU3NDEsNTQ3MC4yMzk0ODIyMDUyMzQsNDQ4Ny4zODkzOTc3NDc3MzgsNzE1LjgwNjU5NTQwMzk2ODUsMTEzMy4yNjQ3NzAyMDQxNzI3LDIwNDYzLjY4MjAwOTI5NDI0LDEwNDI5LjkwMjIwMDI5NzQxNiwxNTMwLjM4ODY1MjM4MTQ1ODUsMzkwNi4wNzYxMzE2NjQ2MzI2LDE2OTAuMjAyNDE2OTIwNDMyOCwxNTkyMC4xOTk1MzExNDg3MSw4MDUwLjY0OTg1OTMxMzEwNTUsMzYzOC42ODUxMDkwNTU3NjY2LDUzODYuODQzMTQyMTQ0OTU3LDU4ODkuODE4MTEyNDE0NzcyLDgyMjguOTg2NjU0OTM1OTg1LDY4ODIuMjY4OTc3ODYyMjU5LDE2ODMuMzk1OTIxNzk4MjIwNiwxMjkxNy44MjU4MDc1NjM5MzEsNjMxNS4xMzcyNzA0NTI1ODksNzI0Ny4xNDk2MDI0MjA2MzEsMzgxNC4yMzExMDM3MTU1MTc3LDExNzguMzY2ODYyNTg3MzksMTA0MDIuMDI2MjM5Mjk2NTU4LDg0NS45MDM2NDkwOTc4MTcyLDIyNDEuNDI4NjU3MjUwNTQsMTYxMi43NDQxNDY1Mzg5NjM2LDEwOTA5LjU3NzAwMzc0OTMwMiwyMzY5LjU3NTY2OTI1OTk5NiwyNTA4LjMxOTM5MDU0NTc0NSwyNDYwNC45OTA2Nzc4MjQyNjIsMTQ4MDguMTYzNjA3NjQ2MDk4LDQ1NDcuODYwMTQwNjUyODI0LDQ0MzQuNDM2MzIyNjE0MDU0LDE2MDAyLjA1OTg0NDQ3NTA2NSwxMzU1LjM3NTU0ODczMDY1MDcsNTMxNS4yMTY2NTgxNjI5NzcsOTk4LjM4MjAwMzg1MzM2OTUsNzM4OC44MTM5MDc4OTM4NzgsMjY4OTEuMjI4NDgxNDkyNTY2LDI4NTAuNjI0ODY3NTI1ODY2Niw5MTc0LjkyMDc3MDMwOTcsODAwLjQ5MDIxMDY1MzI5MzQsNzYwNy4yOTMyNzcxMjU4NDgsNzA2OC43Mzg1NjEyNDg5NTYsMjQ2NS41MzkwOTY1NTI1NDMsNjUxLjI4NjQ1Mjc1MDE1NTEKKzIwLFN1biAxMyBGZWIgMTEsNTM3LjM4MTE0NjA5NDYwNzQsMzk3MS4yODE4NTUyMTU1MzM2LDIzNzcuNjQwODk3MzM5MTA2Miw0MzkyLjU3MDk1MzQ2NDY3NCwyNDQ0Mi44NTY0MjY3MzgyNDYsMzY2Ni42MDQ5MzM0NzcwMTk2LDMwMDcuNzc4MzY5MDc1MDMwNyw0NzkuOTUwNzA0ODI1NzA4MTYsNzU5LjY0Nzk5OTEzODM2MjcsMTM3MTYuMDUxMDUxNjIzNDcyLDY5OTAuOTA3MDc5MTk4MTY2LDEwMjUuODYxNjU1MzIwNjc5MywyNjE4LjE5MjcwMzM0NzgyMzcsMTEzMi44ODI0ODgwNTQ2NDc2LDEwNjcwLjY5NDg1NTg1MDQwNSw1Mzk2LjE3OTg1NzkwMzkzNCwyNDM5LjAwNjUxODA1MTk5NTUsMzYxMC43MjM4MjM3NjkxNzgsMzk0Ny43OTA1NTQ1Njk5ODYsNTUxNS41NDgxNTA1OTkzNjg1LDQ2MTIuOTA5NjA1MTIyOTMzLDExMjguMzM5NTU5MzA3NDYwNCw4NjU4LjMwNDU3MTQ2MjA4Niw0MjMyLjc4MjQ1NjU5NzQ1Niw0ODU3LjQ2MTM3OTk0OTMyOCwyNTU2LjY0NjE5MDU3Nzk5OTcsNzg5LjgxNzIzOTg0Njc3NzYsNjk3Mi4wMzYwOTU3OTU2ODgsNTY2Ljk4NjUwMjg3NjYzNDYsMTUwMi4zNTU5MTY0OTE2OTcsMTA4MC45NjM1ODA3NjQ2OTQ2LDczMTIuMjM4NTA5NTc5MDgzLDE1ODguMjM2MzIyODg2NDkyOSwxNjgxLjYyMjE0ODY3Mjg0MjcsMTY0OTEuNzA4Nzk0MTk0NTA2LDk5MjUuMzY0NjI0MzMwOTk0LDMwNDguMzExNDY5ODM3NzgyNiwyOTcyLjIxODU4NDg3NjMwMywxMDcyNS41NzQ3ODMzMTAzMiw5MDguNDUwNzU2MDMzODA5OSwzNTYyLjY4MDUwNTA2ODAyOSw2NjkuMTkzMTUzNzg2ODMyMiw0OTUyLjQyMzgyMzUxMTg5MiwxODAyNC4wNDU1MTQyMzUxMDIsMTkxMC42ODcxMjMxMzYwNzYsNjE0OS41Njg3ODUyODc2MzYsNTM2LjU0NTUwNjU0OTYyMzcsNTA5OC44NDQ0OTIxNzc4OTMsNDczNy45ODk3NDM4OTM4OCwxNjUyLjY1OTY3MDA2MjAwMiw0MzYuNTQwNzg2NjE1OTcyMTQKKzIxLE1vbiAxNCBGZWIgMTEsMzYwLjE4ODE2MTQ1MDYzNTcsMjY2MS44OTE5NjMyOTA3NTQ2LDE1OTMuNjg3ODQ1NDY5MjAyOCwyOTQ0LjIwMTI4MzMxMDI5NiwxNjM5NS42NTY2MjQ2NTkzNiwyNDU3LjY2MTk0MTU4NTAwODcsMjAxNi4wMzQ0OTI1NjYwOTI1LDMyMS44MDYyMzUxMDQwOTExLDUwOS4yMDU4NzgzMDM5ODgxMyw5MTkzLjM2ODQxMTY4NTc4OCw0Njg1LjgzNjAyMDMxMTkxNyw2ODcuNjYzMjUyNDI5MDU2OSwxNzU0Ljk0MTA1MDg3NDk2NSw3NTkuMzMwOTUyNDE0OTM5Niw3MTUyLjE1ODcyOTk2ODg2MiwzNjE2Ljk0NTIyMjAyOTgwMTcsMTYzNC44NjMzMzk3NjQyNDg4LDI0MjAuMjE2NjAzMzk3ODgxLDI2NDYuMTAwNzQ4MDkxMzg1NCwzNjk2Ljg0NDI1NDExMzcwODgsMzA5MS44NDk3MjM5OTUzMzI2LDc1Ni4yOTg3ODY4OTEzODkyLDU4MDMuMzE4NzE0NTIxNjU1LDI4MzcuMDY1MzU0NTAwNjYxNywzMjU1Ljc1NDQ1NTU5NzQ2MiwxNzEzLjY5NzkzMzI5ODYwOTMsNTI5LjM4NjQxNDk3NzQzMjMsNDY3My4wNjEzOTIzOTQ3NjQsMzgwLjAzNTg3NTgzMzkzMTI0LDEwMDYuOTc5OTQ2ODI5NDc1OSw3MjQuNTMwNjMwMDY1NDMxMSw0OTAxLjA5Mjg5NDgxNzc1NywxMDY0LjUzNDU5MzAzMzYwOCwxMTI3LjM4NjI2MTUzNDA1LDExMDUzLjcxNDg5MjEwNDMsNjY1Mi42MDY1NjczMDE2LDIwNDMuMjAzNTM1NTE2MjkxOCwxOTkyLjE1NTQzMDk0NzY5OTIsNzE4OC45NDg0NzcxNjA4ODUsNjA4Ljg5NjI2MjM4Mjc5MzEsMjM4Ny45OTE3Mjg4MTkxMzA1LDQ0OC41NDUyNjI3OTQ4MjE4LDMzMTkuNDEwODkwMzk1OTgxNCwxMjA4MC43NTU3ODEzODU0OTUsMTI4MC42NzYyMzg0MTQ1MDE1LDQxMjEuODAyMjg3MjY2MDMyLDM1OS42MzEwMzI1MDkzNDA0NiwzNDE3LjUzOTY2MjIwNTI5OSwzMTc1Ljc1MDQyNDI5NjQ2OCwxMTA3Ljc4MzY5NDU1MDQ1MTIsMjkyLjYwMjI0NzM5OTk3OTgKKzIyLFR1ZSAxNSBGZWIgMTEsMjQxLjQyMTkyMjkzNzcxOTc2LDE3ODQuMjI3MjI1MDQ3ODIyNywxMDY4LjIxODk3OTY4NzI4MiwxOTczLjQwNjEzNzM1NzY2NjcsMTA5OTcuNzYyNDMxMDEwMjg0LDE2NDcuMzI5MjY3MzE5NTQwOCwxMzUxLjI5NDg5NzcwOTQ1MjIsMjE1Ljc2OTA5NTI5MzE2MzczLDM0MS4zMjk5NjcwNjgzOTIxLDYxNjEuOTgyOTI1ODEwNDY0LDMxNDAuODA0NDk2ODk4MTEwOCw0NjAuOTU5NTI4NDYwMTc2NjcsMTE3Ni4zMTQ1NzQyNzkxMTMyLDUwOC45NTI3MTY5OTk5NzM4LDQ3OTMuODIxMjQwNDg3ODYxLDI0MjQuMzYyMDg1MTg5ODM5NSwxMDk1Ljg0NzA4NDU5Mjc0MzYsMTYyMi4yMzY3MDMzNTA3NTcxLDE3NzMuNjEyMzI4NTc5MTExNiwyNDc3Ljg0Mjk2Njk3NDU4MywyMDcyLjM0NDQ0MjkzOTI0MSw1MDYuOTI4ODg0NzIyODIyNDMsMzg4OS43MzU4OTAxNTA4OTMzLDE5MDEuNTcyODUzNTI5NzU4LDIxODIuMTk3NjY4NzAyNzY1NCwxMTQ4LjY3NzAxMDU3NjQ4NTgsMzU0LjgyODk2OTc0NjM3NDY0LDMxMzIuMTU3MDAxNjA5Nzc3NiwyNTQuNzI3OTA2MTg1NzI2MDYsNjc0Ljk0NTc4NzQzNTc5MTgsNDg1LjYyNjY3OTczNDEwMDQzLDMyODUuMDAyMjIyNjk5OTczNiw3MTMuNTE3MzYyNTU4NjA0Niw3NTUuODE1NTQzMjI1ODk2NSw3NDA4Ljg1MzUwMzU2ODkyNyw0NDU4Ljk5ODM2OTU3ODg1NiwxMzY5LjUwNjEwOTI5NDg3OTMsMTMzNS4yNjAwMTgyMDYwNzczLDQ4MTguNDgyNDAwNjU5NDk0NSw0MDguMTE3NjY5ODE5NjEsMTYwMC42MjIwNDY0NjM3MzUsMzAwLjY0OTkyNDYyMzA4OTkzLDIyMjQuODY4NTYyMDU0MzU5LDgwOTcuMjIzNTYzMjAyMjA5LDg1OC4zOTkzNzM1OTkxMTM5LDI3NjIuNjc1MDA2OTMwMzUwNywyNDEuMDUwMzc4ODYxMzE2NTcsMjI5MC42MzMxODczODQyMTIsMjEyOC42MjI1ODA0MDIyNDgzLDc0Mi41NTEzODM3MjcwNjA3LDE5Ni4xMjM5MDczMDg3MTUyCisyMyxXZWQgMTYgRmViIDExLDE2MS44MTcwMzMwNzc3NjQxLDExOTUuOTQxNDYwMDI1NDY1OSw3MTYuMDA3MTM2ODc3MDQwOCwxMzIyLjcxMzI3OTgwOTkyMzcsNzM3Ni45Nzg1ODY0MTI5NDM1LDExMDQuMTc3NTg0NDE0ODcyNCw5MDUuNzM3NTM4Nzc5NDUwOCwxNDQuNjcwODYzMjg1MjY1OCwyMjguNzk5Njg4Njg0NTQyMjIsNDEzMC4xNTcwODgzMjI0OSwyMTA1LjIwNzg0NTU5ODI0NjQsMzA4Ljk5Mzc3OTIzODE3MDc2LDc4OC40Njg2NzMxNDc1NjI5LDM0MS4xMzMxMDMxNjg4OTc0LDMyMTMuMTE4NzE4MDg4NjI1NCwxNjI0Ljk5ODkwMzI3NDQ5OTMsNzM0LjU0NTA5NzgwOTE2NTIsMTA4Ny4zNjIyMDMzNzA1MDg1LDExODguODA2MjMzNDMyNDMyNywxNjYwLjc5NzAxMzI1MDU1MjMsMTM4OS4wMTA4Mzc0NzIzMTk1LDMzOS43ODIyNzI4Mzg3NDE0LDI2MDcuMTM3NDgyMTk2OTE1NywxMjc0LjU0OTg2ODk3OTQzODMsMTQ2Mi42Mzc0NDQwNzUxNTE3LDc2OS45NDgzNjI3Mzc5ODU2LDIzNy44MjkzNDY1NTAyOTMwMiwyMDk5LjM1NDI4NTI2Mjk1NTMsMTcwLjczNzMzODk5MzEyMzksNDUyLjM5NDIxMDczNjQ5NjEsMzI1LjQ5ODA3NjA0ODY0MDc3LDIyMDEuODAzNDU0Nzc2NzQ0LDQ3OC4yNDM4ODMyMDcxNTI4LDUwNi43MDc5MTIyNzE0MjA4LDQ5NjUuODUzNTAzOTg1NzkxLDI5ODguNzAzODk3NzA0MTUxLDkxNy45NDQzODA5MTI3NTkxLDg5NC45NzAyOTUwMjUyMDM0LDMyMjkuNjQ4NzU3ODcyMDQ4LDI3My41NDQyOTQxMzgzNTc0LDEwNzIuODY0MzI4OTA5ODk4LDIwMS41MTg5ODM1ODk5NjcxNSwxNDkxLjI0MTAwODgxMDQ1MDIsNTQyNy4yMzE1NDIyMTUyNTIsNTc1LjM2MDAzOTI4NDI5NjEsMTg1MS43MDgzNzgyNzU4OTI4LDE2MS41NjkxODYxOTIyMTE4NywxNTM1LjMxNTgwNjk0MjAzMDEsMTQyNi43NjAyOTk0MDUwMjA1LDQ5Ny43MzQ4NjAyMjU2MTkwNiwxMzEuNDU2OTIzNzEwNDk2NzcKKzI0LFRodSAxNyBGZWIgMTEsMTA4LjQ2MDYwNDQ0MTgxMjYyLDgwMS42MjIxNDMyNTE5NzQyLDQ3OS45MjYxODI2NDE0Nzc1LDg4Ni41NzQ0NTQwMjMxMyw0OTQ4LjI0NzE5OTA1NzMzLDc0MC4xMTIzOTUwOTg3ODQxLDYwNy4wOTIxOTYyMjc2OTY3LDk2Ljk5OTYxOTQwMzk3Mzk4LDE1My4zNjg1OTUxOTc0OTk2NywyNzY4LjI5ODM5NTAyMjQ3NTIsMTQxMS4wNzI0NDU3MzEwNzIzLDIwNy4xMjY5NjIxMTY0MjkzNSw1MjguNTAwNTMxMTQ1ODU2MywyMjguNjQ5NTY4NTM1NzM2OCwyMTUzLjYzNDI2Nzg5MDg1NSwxMDg5LjIwMjY3MTIzODk2Miw0OTIuMzY0NzgwNDY2NjA2LDcyOC44NDM0NjY2Nzc0NTk5LDc5Ni44MjYwMDU1MjI1OTk5LDExMTMuMTY0ODQwMjM3MDQ2NSw5MzAuOTk5NTE5ODI2OTg2NywyMjcuNzQ3OTMxMzc2NzA0OTQsMTc0Ny40NjI1NjExNzM3MDUxLDg1NC4yODEzNTk1NjI1ODE5LDk4MC4zNDYxMzgzNjUyODQxLDUxNi4wODk4MTA0OTc2MTg2LDE1OS40MDg2NTkyNzIyMjU5MiwxNDA3LjExMDI0MDgwOTYzMjYsMTE0LjQ0MDcxMDIyNjkyMjI4LDMwMy4yMjUxODEzMDY0ODc3NCwyMTguMTY5Njg5MDUyMDI5OTUsMTQ3NS43Nzk4NTE2MjM4OTU0LDMyMC41NDg5OTA3MTAzNTI0LDMzOS43MDIyMDMxOTc3ODc2NCwzMzI4LjQxMDk3ODUwNDIwNTYsMjAwMy4yMTk2MzgxMDYyMTI0LDYxNS4yNzQzNTMxNDAzNDYsNTk5Ljg2MjI2OTcyOTE5OCwyMTY0LjcxMzQ2Mzk5NjE2OTYsMTgzLjM0NTQzMTU4MDEyNTcsNzE5LjExOTE0NzQ1NTM1LDEzNS4wNzM3MjIzOTQzNDk1LDk5OS41MTk5MTE5OTA2MjA3LDM2MzcuNjQ4NzcxNzIzNzIzMywzODUuNjQ3MjY4MzEzODI1ODYsMTI0MS4xMjUwMjg1Mjg3NTc5LDEwOC4yOTUyMjcyNDgxOTM5NSwxMDI5LjA1ODUzODE5OTA4MTYsOTU2LjMyMDM5NzU0NTY2NjEsMzMzLjYzMzQ2NzkzODQwNjYsODguMTEyMjgwNDEyOTQzODcKKzI1LEZyaSAxOCBGZWIgMTEsNzIuNjk3NTk4MDA4MjE5MjcsNTM3LjMxNTY3NjYyMDM3MTcsMzIxLjY4NTU2MDg2MzU0MTgsNTk0LjI0NDIyNjI0OTM3NTcsMzMxOS4xMTk4NTE3NjgzODQzLDQ5Ni4wODU2NTExMjUyMjIzNCw0MDYuOTE4MDc4MjIzOTg4Nyw2NS4wMzYzNTQzNjM0NzQyLDEwMi44MDU3NjA0OTE3NzY2OCwxODU1LjQ5MzY4NzI5NTgzNTgsOTQ1LjgwOTk4ODU3Mjk1OTEsMTM4Ljg0Mjg0MjA0MDUwODgsMzU0LjI0NzIwNTc5MTI1OTAzLDE1My4yNTU4Mjg2ODI1MjgxNSwxNDQzLjUwMTk1MzkyMzYyNzMsNzMwLjA2OTc1OTk2MDQwNzYsMzMwLjAzMTU4MjI0NDY0MTY0LDQ4OC41MzM0NjYzNjU0ODA2NSw1MzQuMDkxODgxMjY4MDkxOSw3NDYuMTA5NDc0NjMzMDkwNyw2MjQuMDEyNjcxMjQxODI4NSwxNTIuNjU0MDA3MzgxODkwMzUsMTE3MS4yNTYzMzUzNDgwOCw1NzIuNTkxOTc4Njg2OTQwNSw2NTcuMDg2MjA4ODc0MjE4OSwzNDUuOTMwNjAyNzUwMzYxMjMsMTA2Ljg0NjA0OTUyMzQ5NjA4LDk0My4xMjgxMDI5NzM3OTIsNzYuNzA2NTgyMzc0MjgzOTUsMjAzLjI0MjA1MDYzOTkwODk3LDE0Ni4yMzEzNTI5OTIxNjM3NSw5ODkuMTU1OTExNzM1OTUwNiwyMTQuODUyMDU2MjA3NDA0ODcsMjI3LjczOTI0NDY0ODM4MzM2LDIyMzAuOTAwMTU3MDU3OTY1LDEzNDIuNjg1NjU5NTQ3NTAzNyw0MTIuNDAyNTE3OTQ4ODcxODMsNDAyLjA2MzQ3NDI4MzM0NjUsMTQ1MC45MjczMDE4ODgzNjE0LDEyMi44ODg5MTExMTkxMTUyNSw0ODIuMDEwOTgzMTk0MDc3MSw5MC41MzY5NDAwODgwOTI3Niw2NjkuOTM4ODk5MzE4MzMsMjQzOC4xNjY1NTk0MDM2MzQsMjU4LjQ4ODQxNDA3Mjc2ODUsODMxLjg3NjA1NjU2OTg1ODYsNzIuNTg3MjE4ODEwNzk4NTMsNjg5LjczNTU3Mjc2NDE3MTksNjQwLjk5NjgxNjk0Nzk3NjksMjIzLjYzNTcxNjEzMTkxOTAzLDU5LjA1OTQ1OTE5ODM3NTcKKzI2LFNhdCAxOSBGZWIgMTEsNDguNzI2ODUyMTI3MjA5LDM2MC4xNTQ5MTEwNDA4OTI1LDIxNS42MTk4NDE2ODA4NzE2NywzOTguMzA0MjkwMDQzOTg3NiwyMjI2LjM0ODYyNDM1MTUwNCwzMzIuNTE4NTU3NDM5Njg0OSwyNzIuNzQ2NjE1OTIxMjk3Nyw0My42MDUzMzQ1NTUyNDY0LDY4LjkxMjU3MjIxMTEyNjM1LDEyNDMuNjczMjk0ODkwMzg2LDYzMy45NTU0Mzg2MDI0OTQ0LDkzLjA3MDEyODY2NjM5Nzk5LDIzNy40NDc0MjE4OTY3ODk2NSwxMDIuNzIyMDU3MTczOTAwMjUsOTY3LjUyNjg4MDc1MjM0NTgsNDg5LjM1MDUyNTI5ODA3NzIzLDIyMS4yMTk4MTc3MjU0MDU4NSwzMjcuNDU3MDg5MjAxOTI3MjYsMzU3Ljk4ODAyODg2NTk5NzIsNTAwLjA4NzI0NTI0ODkzMzM2LDQxOC4yNTE0ODIwMzk5NDk0LDEwMi4zMjAzNTEzNzI2MTU1OSw3ODUuMDQ3ODkyOTAzMjE5LDM4My43ODY2MTE0MDQ2Nzc0LDQ0MC40MTgzNjA0MDYwNDQ5NCwyMzEuODc0MzQzMTY1MzMwNyw3MS42MTUxODU4MjkwODI1OCw2MzIuMTQwMjE3NjczNjI2LDUxLjQxNDQwMDM5MjIzMjAyNSwxMzYuMjI2NjEwMDg5MzExNSw5OC4wMTM2NzcwNzIwMjE3OCw2NjIuOTkxNjY4MjI0MjI2MywxNDQuMDA3MzcyMTUyODM2NjQsMTUyLjY3NzkyNDA0MTk0MjMzLDE0OTUuMjgzMjQ2ODkxNTcxNyw4OTkuOTUzODM5MDE4NDg5NCwyNzYuNDIyNzk1NTE1NDcxNywyNjkuNDg3MDE1MjMxNjYwMiw5NzIuNTAzMTAzNjc3MTM5NSw4Mi4zNjc0MjEwNjY2Njc5MywzMjMuMDgyMjE0NDkzMTI3Miw2MC42ODQ5MjE2ODgwNDQ4NCw0NDkuMDMzODQxMzIzNTgxNSwxNjM0LjIwMzYyMDkzODAzMDMsMTczLjI1NzU0Njc5MTY1MzE0LDU1Ny41NzMxNjQxOTM1MTYzLDQ4LjY1MzE2MDQxNDUxNTk1LDQ2Mi4zMDE1NTUxNDg2MDAxMyw0MjkuNjQzNjMwNTgyNjU5MDYsMTQ5LjkwMzgyNzkzMDUwMzY3LDM5LjU4NjA4MzY5OTY0OTE2CisyNyxTdW4gMjAgRmViIDExLDMyLjY2MDA1NDE4Nzg0OTk5NCwyNDEuNDA2NjMwMTY1NTcwMDUsMTQ0LjUyNTk3NTQzMzc4ODEyLDI2Ni45NzE3MTQ5MTQ4ODczNCwxNDkzLjM1MTcxMjcyMTY5MDMsMjIyLjg4MjE3NzI3MTMxMDQ0LDE4Mi44MTQ5OTIyNTU2NTY3LDI5LjIzNjE2NTA1ODcwMDk0OCw0Ni4xOTMzNTEyOTIzNjg1Myw4MzMuNTkxNzAxMzQ3MTU1Myw0MjQuOTI2NDk5OTcyMTE4MSw2Mi4zODc0Mjk3Njc0NTQ0NSwxNTkuMTU4MDExMjI4NjExMDMsNjguODUxMDQwNTg4NDc5MDEsNjQ4LjQ5ODQ1MDI0MDE4MTcsMzI4LjAwMTQ3MzExNDQ4LDE0OC4yODM0MTAyOTczNjI2LDIxOS40ODk4Nzc3MTY3MTkyMywyMzkuOTUwMTgxMzk1OTE1NzYsMzM1LjE4ODUyOTk2NzA4ODEzLDI4MC4zMzc4MjI5MTIwNTIyLDY4LjU4MjkwNTU5ODgyMzE1LDUyNi4xODc0Mzk4MzA5MDAxLDI1Ny4yMzc2OTUwNTgxMzU0LDI5NS4xOTQ3NTIyMTYxNjY2NSwxNTUuNDIzNDA2NzIxNDgxNjMsNDguMDAxMTc1MTkzNjI2OTYsNDIzLjY5NzkxODAwNzIyOTc2LDM0LjQ2MTcyMTYzMTY3Njk0NCw5MS4zMDgzMzE4NjUwMjI5Miw2NS42OTUwOTgwMDA2MzE5NCw0NDQuMzc2OTYxODc4NTI0OCw5Ni41MjI4Mjk5NzMzMzg0NywxMDIuMzU2MDQ1MjQ0NTQzNTEsMTAwMi4yMjg5NTQ5MDI2MzkxLDYwMy4yMDY3ODY0NTQxMTQ1LDE4NS4yNzkxMDgzMjI1NTc4NywxODAuNjI2Mzk1NDQ2MDk4MTIsNjUxLjgzMzE1NjE2ODA2MzUsNTUuMjA3NTQxNzA0MjQyMTMsMjE2LjU1NTQ5MjIwNzM2MzEsNDAuNjc1NzczMzQzNjIyNDIsMzAwLjk2OTkxMjM5OTY3NTksMTA5NS4zNDA1MjgxMzU4MDYsMTE2LjEyOTc1MDY4MTc4MTU5LDM3My43MTkwNjEyMjYyNjk2LDMyLjYxMDg0MjI4OTE0ODMsMzA5Ljg2MTk2MjYyOTQ0MzYsMjg3Ljk3OTA3NTc5MDE1OTUsMTAwLjQ4MTA3Nzk1MTExMzM1LDI2LjUzMzU2ODMyNTgzOTk2MgorMjgsTW9uIDIxIEZlYiAxMSwyMS44OTEwMDQ3NDU1NDkxNSwxNjEuODExMzgyNzg2NTgwMjgsOTYuODczMDg0MTcyODI2MjcsMTc4Ljk0MzQzNTA2ODU5MTU4LDEwMDEuNjgxNzAwNzAzNjMxMSwxNDkuMzk0NjQyOTc0NDU2MiwxMjIuNTM2MTY4NzIzMzk1MzIsMTkuNjAxOTE5NzAzNDgzNjg4LDMwLjk2NDI0NDA0NzAwNzM3Nyw1NTguNzI4MzM5NDQwODYzOCwyODQuODE5MTI0MDQ2MzA3Miw0MS44MTk5ODEyNzA4NDk5OSwxMDYuNjgxNjExODYwODQ1ODMsNDYuMTQ4NDc5OTcxODM0MjA2LDQzNC42NjU0MTE0OTE5NDI1LDIxOS44NTI1Nzk3NTMwMDA4NCw5OS4zOTQyMTQ5NDQ4MDgzNSwxNDcuMTIwOTgzMTMxODQ3NjUsMTYwLjgzMjQ2MjYwNTA4NDE3LDIyNC42NjM1NzU3NTE4NDI2NCwxODcuODk5Njc2MDkyOTMwNDYsNDUuOTY5NTAwMjgwMTAzNDYsMzUyLjY4MzMyNTYyNjI0OTYsMTcyLjQxNjgxODMwMTAzMTQ3LDE5Ny44NTcyNjUyMjIwNzA1LDEwNC4xNzg5OTU0NTAyMzg3MywzMi4xNzM1Mjk3NjQwMjEwOSwyODMuOTg3NjIxMjkxNzM3NSwyMy4wOTg3ODkzMDQwMTk1Miw2MS4yMDEwNjAxMDI5ODgyNjUsNDQuMDMzMTA4NDY5OTc5NTcsMjk3Ljg0ODMxMjk3NDQwNjksNjQuNjk1NzA5MTE0NzcsNjguNjE5ODMyMzI0OTk4MjQsNjcxLjc1NDQ3NDA2MjgyMzgsNDA0LjMwNzk3MjYwNzI1NTUsMTI0LjE4Nzg0NzUwMzc2NDk2LDEyMS4wNjY3MDgwMjkxODEwOSw0MzYuODk5OTYyMDQ4MzgxMywzNy4wMDMzOTA0MDA5NzM3MTQsMTQ1LjE1Mjc5MDQxNjEyNDI1LDI3LjI2NDA4MjA5NDM5NjAwNiwyMDEuNzI4NDgyODMwNzc4NzIsNzM0LjE2MjczMjg2MjQxMDYsNzcuODM4NjExMTU4NTA0MjksMjUwLjQ4OTA3MDk5OTEyNDgsMjEuODU4MTMxNTU5MzI3NjMsMjA3LjY4Nzk4MDMwNTIwMDQ4LDE5My4wMjQ5OTA2NzI5MTQ5OCw2Ny4zNTI4MzA1MDQxOTI4NywxNy43ODQ3OTM1NDIzNDIwNTgKKzI5LFR1ZSAyMiBGZWIgMTEsMTQuNjcyODU4NzM1NzU3MzM0LDEwOC40NTk4NDIwNzAxNzc4OCw2NC45MzIyMzg1MTQ3MTYxOCwxMTkuOTQwNjg4NzE2NzcwNDcsNjcxLjg4Njc2MjU5MjI3NzQsMTAwLjEzNzA4MjY1ODc4NDk1LDgyLjEzMjgzOTUwMTIyMDUzLDEzLjE0MjM4ODI3MTY4MzY3LDIwLjc1NTg5NjMwNzE4ODA4OCwzNzQuNDk2OTI3OTk3NDc2MiwxOTAuOTA4MjYwNTI0NzQwNTcsMjguMDMzMDYxODA0MDIxMTU1LDcxLjUwNzM0NTA3Mzc0MzYyLDMwLjkzMTc0MjQ1MzUzMTQyLDI5MS4zNDA5MDA1MDE3NjU0LDE0Ny4zNjI2MzM0OTg4NTgsNjYuNjIzODM5NDM1MDk3MzUsOTguNjEzMTM0Mjk3MTI3NjksMTA3LjgwMTg5NDA2ODEwNDQyLDE1MC41ODMxMzM5NDg4OTkxNiwxMjUuOTQxOTczMjMyODY5MiwzMC44MTIyNzI0MzE1NzgzMSwyMzYuMzkwMjE4NTM3MDA4MjgsMTE1LjU2NDYxMzE0MjczMDE1LDEzMi42MTU4Nzc0NzY1MjM2Miw2OS44MzAzMDIxMDA2MDY4MSwyMS41NjQ4MTAzMjAwNjUxLDE5MC4zNDU1MjA2NDE2NTUzNiwxNS40ODI1MTUyODM1NDk0NjYsNDEuMDIxMTI0MjA0ODM3NjA1LDI5LjUxMzg0NzA5MjMyNjk3NiwxOTkuNjM2MDE3NDM4MTM0OTYsNDMuMzYzMTY5NDQzNjM1MzE0LDQ2LjAwMjg0OTQ0OTE3NzYsNDUwLjI1MDYzNDA2MDQ4NjE2LDI3MC45OTMyNjE5ODc4NTIsODMuMjM5OTQ3NTQ2MDE2NzUsODEuMTQ2MjM5NDczNTMzMDcsMjkyLjgzODE2MzEyODQ3OTgzLDI0LjgwMTg5MDkyMjY4NDY3NCw5Ny4yOTMwMDM0NTc4NjkxOCwxOC4yNzQ1MjAxNDkxMjg4MiwxMzUuMjEwODM0NTc0OTQ3NDYsNDkyLjA3OTk4NjYwOTQ4MjE1LDUyLjE3MzEzMjUxMzEyOTc2NSwxNjcuODkyOTUwMzcyODE3NTIsMTQuNjUwODkzNjA3MzgxNTMsMTM5LjIwNDkzNzc1MTE1NzU2LDEyOS4zNzk3MTcxNDExMzQsNDUuMTQ2ODQ2NjQwMjMyNzk1LDExLjkyMDcwNzg0NjcyNzI5NQorMzAsV2VkIDIzIEZlYiAxMSw5LjgzNDc2NTgwOTczNzM4Miw3Mi42OTkwNzU2NzM1Mjg3NCw0My41MjI4ODI5MDg5MjMwNCw4MC4zOTI4NzM4ODc4MDQ3Myw0NTAuNjcyNTkwNTg1NDg0Myw2Ny4xMjA0ODI0MTYwNjE2NSw1NS4wNTE1MzQ0ODkzNTIwMyw4LjgxMTQ1MzEyMzUzNTI4MiwxMy45MTMwNTUwMzU1NjU3NTUsMjUxLjAxMjkxMDU4MzY2MDIsMTI3Ljk2MTg1NzYzMzA0NzUzLDE4Ljc5MTMxNTk5NDU5NTg0LDQ3LjkzMDQ3NzgzODUzMzUzNCwyMC43MzI0ODk4NjY3MTgyNDcsMTk1LjI3NTYzOTE0OTI3ODQ1LDk4Ljc3NDEzMTIzNjg5NDI2LDQ0LjY1Nzg5MTMzMjk5OTYsNjYuMDk5MDA2MDQ3ODMyMTIsNzIuMjU2ODY2MDg4Njk4OCwxMDAuOTI5OTY5NTEyNTUyMyw4NC40MTQxMTY5NzYwNTkyLDIwLjY1Mjc0MTk5NjAzMDExLDE1OC40NDM0MTc0OTU1NTMxOCw3Ny40NTg3MjM4ODE4OTg0NCw4OC44ODcxOTM4MjA2MjY0OSw0Ni44MDY2NjQxMjc5MjQ0NSwxNC40NTQxNTM2NTk3MTA1NzQsMTI3LjU4MTAyMzYzNTgyMDYzLDEwLjM3NzUyNjk0NjQ3OTIwNCwyNy40OTUxNTk4MjEzMjA0MiwxOS43ODIxMDAyMzEwNjI0MywxMzMuODA4MjIwMDI4NjE5MSwyOS4wNjQ3NTUwMTMxMDkyODgsMzAuODQwMzExODQyMTg1MTk0LDMwMS43ODU0MTExMjQ1MzMzNywxODEuNjM3MTkyNTIwODc4NzMsNTUuNzkzNjIwNzg2Njc2OCw1NC4zODkxNDIxNTk1MzM3NzYsMTk2LjI3ODgyNDQ0ODM4NDI4LDE2LjYyMzcyMDc0NTcwOTQ3Nyw2NS4yMTM1NTM1OTk1NjYxNCwxMi4yNDkwMTM3NjExMzg5OTMsOTAuNjI2NjQzMzYxNTcyMTQsMzI5LjgyMTcyMzQ0MTIyMzg3LDM0Ljk3MDI3MDc2NDIxMzY0NSwxMTIuNTMyMDY0MjM3Njk0NSw5LjgyMDA4NTEzODEyNjQ2Miw5My4zMDM1MzUxMjMxMDY3OCw4Ni43MTk5MjcyODAxNjM0OSwzMC4yNjIwOTUzNTcxODk0NDUsNy45OTAxNTY5MTgzNzcxOTkKKzMxLFRodSAyNCBGZWIgMTEsNi41OTE5NDQ2NTQ1NjI5Niw0OC43MjkxNDk3MTA4MjU4NCwyOS4xNzI1ODg0NTQ2NTMwNCw1My44ODUxMTUxNjk5MTkxLDMwMi4yOTA3OTkyMDg0MTc2NCw0NC45ODk5NDEyMzUxMjU0LDM2Ljg5OTYzNTA3ODQ2NDk3LDUuOTA3Njk5NDg1MTI4MjYyLDkuMzI2MTczOTk3ODk2NzIsMTY4LjI0NTc0ODMzODU4MzQsODUuNzcwMjMzMjE1ODY5MjQsMTIuNTk2MzIzODQ5NTUwMTE2LDMyLjEyNzIwMDQ3NDI1OTAzLDEzLjg5NjI4MjM0Njg4ODY3NSwxMzAuODg2NTE2NzQ4MDg5MTUsNjYuMjA2MjY2Njk3MTg1MzYsMjkuOTM0MTM5MjgzODEzMjI0LDQ0LjMwNTI0MjQ0OTY5MzIxLDQ4LjQzMTk0NDA0NDAzNDY1LDY3LjY0OTQyMzIwMDA5ODIzLDU2LjU3OTU5MDAxMDE1OTE5NCwxMy44NDMwNDg5NDA2NDIwMTcsMTA2LjE5ODY1Njg1NTcwMTEzLDUxLjkxNzc2OTg2ODI2MDQ2NCw1OS41Nzc2MDE5Nzk5NzIyMTUsMzEuMzc0MTE0MjY4NzQ4Mjg2LDkuNjg4MTI2MTI3MDAyMDg2LDg1LjUxMjUxMzY4NzIyMjc4LDYuOTU1Nzg2OTk2OTc3NjE2LDE4LjQyOTEzNzcwOTc1MTY2OCwxMy4yNTkyNTMzODI3MTg3NzksODkuNjg2NDQ5NjQ2MDg2MjksMTkuNDgxMDUyODM3MTk0Mzk3LDIwLjY3NTI5NzAwMzA4NTQ4LDIwMi4yNzUwMzgxNjgzMzIyMywxMjEuNzQ1MDA5NzYxMzAzMTgsMzcuMzk3MDQ5OTk3MzAwODcsMzYuNDU0OTIxMzEzNjExNzM0LDEzMS41NTg2MjYwNzcxNTU2MiwxMS4xNDIyMjI4ODYyMzA5MTgsNDMuNzExMzQzNjgyMzkyNjk1LDguMjEwMjQ4NDk3ODg0MjUsNjAuNzQzNTg1ODcwNzQ3NDcsMjIxLjA2NjUzMTgwMTQ3NTksMjMuNDM5NjYwNzkyOTUyMjM1LDc1LjQyNTg1NzIzOTYzODgsNi41ODIxMjk5Mjc5OTQyMDI1LDYyLjUzNzY3NTg1MTcyNzY1LDU4LjEyNjE2NDAyNTAxNDk0NCwyMC4yODQ3OTI2NjAxNzcxMDcsNS4zNTU2MDYwMDg2NDAwNworMzIsRnJpIDI1IEZlYiAxMSw0LjQxODM4MjYzNTg0MDUzMywzMi42NjI0NTMxOTExMTg0MywxOS41NTM4NTEyMzMxMzg1MjMsMzYuMTE3NzE5NDQ3NDY4Mzc0LDIwMi43NjI0MDgzNTk3OTMzNywzMC4xNTYxNTc0NjYxNTU0NTYsMjQuNzMyODg0MjE2MTY5MzUzLDMuOTYwODM2NzAwNTE0OTA4Myw2LjI1MTUwNDE2MTA3ODQ0NDUsMTEyLjc2OTY4NjY2NDY1MTg3LDU3LjQ5MDA3NTk5NjAyMzQ4NSw4LjQ0MzY1MzQ1ODU2Mjc4NywyMS41MzQ0NjIwNzU1Nzk3MTgsOS4zMTQyMDcwNjYxMjQ4NDQsODcuNzI4NzU4NDE4NjAzNDUsNDQuMzc2NzAxMjYzNTYwNDMsMjAuMDY0ODIzNTIzODgzNTIsMjkuNjk3MTg3OTkxMTUxNTY2LDMyLjQ2MjcwNzAzMDQyODUzLDQ1LjM0Mjc4NTc2MjQ5NDM4LDM3LjkyMzE3MDI1NzkyNTUyLDkuMjc4NjcyMjE3NjYxOTAzLDcxLjE4MDk4MTE4OTAzNDk4LDM0Ljc5ODYxMzYzNDgwNzYxLDM5LjkzMjU0NTE3ODAzODIyNSwyMS4wMjk4MDYyNTExMDUxMDcsNi40OTM2MjE4MjU4MDAxOTIsNTcuMzE1Njc3NzI5MzYxOTQsNC42NjIyODQwNjg5ODgzMTcsMTIuMzUyNDcxNDQxNzAwODU3LDguODg3MjE4MTA3Njc2MjY5LDYwLjExMzM2MTMzNDE2MTYyLDEzLjA1NzQ0NzU1MTQ1NTA3NSwxMy44NjA2NTQ2MzQ1NjkwNzMsMTM1LjU3NzE0NDg4NjI2NTg0LDgxLjYwMTQwODg3MzQyNDQ1LDI1LjA2NjI5NzcyMzM3OTY3LDI0LjQzNDMyMDQ5MzcxMjEzLDg4LjE3OTAyOTk0NDkwNjQzLDcuNDY4MTk0MzgzMjI3MzQ1LDI5LjI5ODg0Mzc2ODE5NDM2LDUuNTAzMTUyMTUyMTY0Mzc2LDQwLjcxNDEyMzE5NDMxMzk4NCwxNDguMTcyMjY2NzI4NTM5LDE1LjcxMTAwMjM0NjQ1MDU2MSw1MC41NTUwMjk1MjgxMjE4MzUsNC40MTE4MTkyMTMzMDI0NjEsNDEuOTE2NTUyMzQwNDA2NjUsMzguOTYwNDk1NDg2MTM3MDUsMTMuNTk2OTcwNDY2NjMxMTQ1LDMuNTg5NzMxNjA5MzE1MDM1CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNJUlN0YXRlc09ubHlfUktfUmVmZXJlbmNlL1Rlc3RTSVIvaHVtYW4vSW5jaWRlbmNlXzAuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTSVJTdGF0ZXNPbmx5X1JLX1JlZmVyZW5jZS9UZXN0U0lSL2h1bWFuL0luY2lkZW5jZV8wLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYWI2ZjgwCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTSVJTdGF0ZXNPbmx5X1JLX1JlZmVyZW5jZS9UZXN0U0lSL2h1bWFuL0luY2lkZW5jZV8wLmNzdgpAQCAtMCwwICsxLDMzIEBACitpdGVyYXRpb24sdGltZSxzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9ub2RlL3RyYW5zcG9ydC9waXBlL1VTQQorMSxUdWUgMjUgSmFuIDExLDAuMAorMixXZWQgMjYgSmFuIDExLDcxOTkuMDExODQyNTQwMTM2CiszLFRodSAyNyBKYW4gMTEsMjUxOTM3LjM4MDQ1NDI1NjMKKzQsRnJpIDI4IEphbiAxMSwyMzI3MjMuOTU0Njc1NzQzMworNSxTYXQgMjkgSmFuIDExLDE1NzY3OS40MjEzMzk5MTExOAorNixTdW4gMzAgSmFuIDExLDEwNjA5NS43NDE2OTkwMDczMQorNyxNb24gMzEgSmFuIDExLDcxMjEyLjA3Njg1NTYyMDMzCis4LFR1ZSAxIEZlYiAxMSw0Nzc1Ni41NjIyMzQwMzM5MjUKKzksV2VkIDIgRmViIDExLDMyMDE3LjA2NzA5MTgwMDQ3CisxMCxUaHUgMyBGZWIgMTEsMjE0NjIuNzQxODIzODM2NTQKKzExLEZyaSA0IEZlYiAxMSwxNDM4Ny4xNTUzMTYzNzYzODQKKzEyLFNhdCA1IEZlYiAxMSw5NjQ0LjA3Mzg5ODY0Njc2MgorMTMsU3VuIDYgRmViIDExLDY0NjQuNjUyMzMyMTM5MzI4CisxNCxNb24gNyBGZWIgMTEsNDMzMy40MDczMzY3OTMwMjgKKzE1LFR1ZSA4IEZlYiAxMSwyOTA0Ljc4NDE2OTI3MDg4OAorMTYsV2VkIDkgRmViIDExLDE5NDcuMTQ0NDIyOTIxODU1MworMTcsVGh1IDEwIEZlYiAxMSwxMzA1LjIxNjA5NzEwOTEyNgorMTgsRnJpIDExIEZlYiAxMSw4NzQuOTE2NTU2NTMxNDk1NgorMTksU2F0IDEyIEZlYiAxMSw1ODYuNDc2NzYxOTE2MzQ3MworMjAsU3VuIDEzIEZlYiAxMSwzOTMuMTI4ODc0ODExNTc3MjUKKzIxLE1vbiAxNCBGZWIgMTEsMjYzLjUyMzMxMjIyOTA5ODQKKzIyLFR1ZSAxNSBGZWIgMTEsMTc2LjY0NTcxMjczNzgwMTE4CisyMyxXZWQgMTYgRmViIDExLDExOC40MDk2NTgxNDQzOTMyMworMjQsVGh1IDE3IEZlYiAxMSw3OS4zNzI2OTM3MDczNzM4OAorMjUsRnJpIDE4IEZlYiAxMSw1My4yMDUzMjIzNzYyNjg2CisyNixTYXQgMTkgRmViIDExLDM1LjY2NDczNTQ2OTM4NjI0CisyNyxTdW4gMjAgRmViIDExLDIzLjkwNjg4MDE4OTg0MDk0CisyOCxNb24gMjEgRmViIDExLDE2LjAyNTMyMjMzOTk5MzE0MgorMjksVHVlIDIyIEZlYiAxMSwxMC43NDIxMzUyMTI2MzI0MjEKKzMwLFdlZCAyMyBGZWIgMTEsNy4yMDA2OTUyMDYyNjQ0CiszMSxUaHUgMjQgRmViIDExLDQuODI2Nzg3OTA4MTkzMDU0CiszMixGcmkgMjUgRmViIDExLDMuMjM1NTA0MjgxNjc0MjYxCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNJUlN0YXRlc09ubHlfUktfUmVmZXJlbmNlL1Rlc3RTSVIvaHVtYW4vSW5jaWRlbmNlXzEuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTSVJTdGF0ZXNPbmx5X1JLX1JlZmVyZW5jZS9UZXN0U0lSL2h1bWFuL0luY2lkZW5jZV8xLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMTExZTY3Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTSVJTdGF0ZXNPbmx5X1JLX1JlZmVyZW5jZS9UZXN0U0lSL2h1bWFuL0luY2lkZW5jZV8xLmNzdgpAQCAtMCwwICsxLDMzIEBACitpdGVyYXRpb24sdGltZSxVUy1BSyxVUy1BTCxVUy1BUixVUy1BWixVUy1DQSxVUy1DTyxVUy1DVCxVUy1EQyxVUy1ERSxVUy1GTCxVUy1HQSxVUy1ISSxVUy1JQSxVUy1JRCxVUy1JTCxVUy1JTixVUy1LUyxVUy1LWSxVUy1MQSxVUy1NQSxVUy1NRCxVUy1NRSxVUy1NSSxVUy1NTixVUy1NTyxVUy1NUyxVUy1NVCxVUy1OQyxVUy1ORCxVUy1ORSxVUy1OSCxVUy1OSixVUy1OTSxVUy1OVixVUy1OWSxVUy1PSCxVUy1PSyxVUy1PUixVUy1QQSxVUy1SSSxVUy1TQyxVUy1TRCxVUy1UTixVUy1UWCxVUy1VVCxVUy1WQSxVUy1WVCxVUy1XQSxVUy1XSSxVUy1XVixVUy1XWQorMSxUdWUgMjUgSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyLFdlZCAyNiBKYW4gMTEsMTIuMjg0NTcyNjM2NTY2Nzg4LDEyLjM0NTI1Mjg1OTQ0MzIxMiw5LjAwODcyNTMxODc4NzksMTA2LjY2Nzk3Mjk5MjI5MjUyLDE1NzcyNTMuNzUxNjE5MzU4LDExMS42MDY2MDQ4Njk1ODIyLDE1Ljk2MzM5NDA5MTQ3MDc5NSw0MS40MDE4MDMyMjQyNDkyNSwwLjA0MDY1MTcxNTk3MDY3NjIsMjk0LjkwNDI2MTAyMjQ2NzUsMTkzLjc4Njk4MzczNDY5NTg0LDQ1LjQ4MDM3NDY1OTA3MTE0Niw3LjQyMDg0MjY5NjM5ODkwNSw5LjE2MTc3ODc0ODY0MTI2LDIxNi4zMTM0MDI5OTU0MDMzNSwyMi42OTA0ODkzOTUwOTM5OTQsMy41MDU4NTczMzcyMjU5OTEsMTEuMDE0MjQ2MDI5ODI3MDk5LDIwLjc0NTAzODEzMzQ0ODc3Myw2NS4wNjM4NjExODU1MTk3Niw0OC4wNzI5OTE1NTcyNzc4Niw1LjQxODM5ODMzNzI0NDQwNjQsODguOTYwMTM1NzgyNzA5NjMsNzkuOTc5NDYyOTI4MDM0NTUsNTkuMTQ4OTYxODI1ODQwODksNS44MTU2NTA3MzgyNzcxNzgsNi40MTU5Mzc2ODU3NTU2MzcsOTQuODg2MjgzNDE3NjkxOTEsMy4wNjEyNjc3MjI1MDY4NDMsMTAuNjQ1NDY0MDE4OTU4Nzc2LDkuMTM3ODQ3NzQ1MjY0Nzg0LDg0Ljc5NTM5NzYzMTkwODA3LDE0LjY2OTE5NTY3NzI1MzgzOSwxMTEuOTIyNjU5MjY5MzE0NywxOTAuODAwOTk2ODI2MjgyMjQsODYuMTQ2MzE4NDcyNDQ3MjMsMTUuOTk3MzI0MDg0ODMyNzA3LDM1LjA2MDQyNTE3MDEyMDQxLDk3LjgyMDI0NDkwNTU2ODEsMTIuMDc5MzQwNDIwMDk0ODc2LDE0LjU0MjM1ODI1MTAzODM5NywyLjk1OTg3ODQwODQzNTQwOCw1Mi45MzMxNDUwMTY5MjI2NjYsMjcxLjIzNjU3MTgyOTAxMzQsNDcuOTYwNzMyOTQ2MzI5ODU2LDcyLjMzNDcxNzU1NzA1MDk0LDMuMTYyNzQ5NTI1MDg4NTAzLDczLjgwNjk4NDU0MTM5MzYzLDI0LjkzNzM3NjkzNTk2MTA2LDEuNjU2NDQyMjc5MDMyNDMwMiwyLjIwNzk1Nzk1Njc4NzAxNzYKKzMsVGh1IDI3IEphbiAxMSwxNDM2MjUuNDc3MjU3NzEyMjgsODc4MzkxLjgxNjYxOTk0NDMsNTM2NTQ0LjM5Nzk5NTAwNjQsMTE4MDIyNi44NDUyMDI4NDYyLDEuMDU5MzIzNTQxMzc2MjQxNUU3LDEwMDQ1ODYuNDA4NDc4MDc3Myw3MDE4MjcuNDc2NjEwODUzNywxNDI4NjcuMjcyODIzMjEwMzcsMTAxNTUyLjQ4ODA2MTY3MTY0LDM2NDYxNDQuNTc2NDQzOTEzLDE5MDAwNjUuOTM5MTA2MzgyLDI5MDA0Ny43NjU4MDAzMzk3NSw1NzM2NTYuNzExNTUxMDEyNCwyNzUzMTMuOTk0MTU4Mjg0MywyODIxODU4LjQ2MTc2MzMxNDQsMTIzMDQ3OS4yMTc1NTYyMTk1LDQ5NzQyNi44NjU1MTQwMTU0Myw3OTcxMDEuODkwODQ2MjI2OCw5MjAyNjkuNzA1ODY1MDkxMiwxMzg4NzE0Ljg4NTI0NDg1NjEsMTE0ODE0My4yMjcxMzA4NzQzLDI2MDcwNS40NTA4NzA4MDkxLDIxNTIxNzcuOTA0ODE1ODIyNCwxMTEyMzc0LjQyMDA1OTU1MTMsMTIyNjYxNC4zMzE0NDg4OTgyLDU0NzU0Ny4xMjQwODg1ODkxLDE5MjAyMy40ODI5NTI5MDM3MiwxNzc4Njg3LjM5MzEyMzc3OTQsMTMyNTIxLjY4MzIyMzE5NjkyLDM2MDUyMi4xMjI5NTI5MjcxNCwyNjM4MDMuNzE3NDg5MTI3NCwxODM4MTc1LjAyNzA0MDUxODEsMzkwODU3Ljg0OTE4MDM5MDMsNDkxMDAxLjc1MDExODI2NTYsNDE0NDg1MC40NjYxOTg0MTYsMjQyODI5NC4zMTE4NTUxMyw3MTA1MDAuMjU5Mzg4OTg0NCw3NDgzNDguMzI5Njg0NDE3NywyNjM2Mzc3LjYyNzE1NDI4MDQsMjMxMjY4LjA0ODU5MzI3NzM0LDgwOTk4NS4yNzEzOTczNTM0LDE1MzM2NC42ODI0MDEwNTU0NCwxMjM1NTU5LjI0NzgwMzk4NSw0NjQwNTk4LjU1ODc3MTU2Nyw1MTQ4NjEuMzMwOTk5MDY5MSwxNTQ3OTM3LjcxNzI2MDg2ODgsMTI2NDg1Ljc0NzQxNTA3ODIyLDEzMDgxNTIuMTc0NDA0Mjc3NywxMTA0NjQ2LjgzOTYyMjM2NjUsMzIzOTE1LjgyNDU3MTMzMzMsMTAxMzgwLjg0MzExNTM1MTIyCis0LEZyaSAyOCBKYW4gMTEsMTU5Mjg2Ljc1MzgzMDc3MDE1LDExNzY0NDAuNDQ3OTk4MTQ1OCw3MDQ0MTUuNTcwMTMzOTIyOSwxMzAxOTQ3LjQzMTMwNDUzNzIsNzE1OTIyNi4wOTI4NzMwMDksMTA4NjQ0NC4wNzg3Nzk2NjA0LDg5MTI2Ni40Njg3NDUxNDkyLDE0MTQxMS4xNzY2MjAwNzIzNywyMjQ4MzcuMzkzMTM3NzEyODUsNDA2NTc4Ny45MzEwNDgxMzQzLDIwNzE3NjcuOTQxMTEyOTE5MiwzMDM2NTcuODQ3MzkzNDk4OCw3NzU1NzEuMDAxNDU5NDEyNCwzMzU3NzMuMDA5NDIyNDYsMzE2MzE2Ni44OTQwMTYzODA0LDE1OTg3OTUuNzcyODY0NTcyNyw3MjIyOTIuNDgxNzA4NzQwOCwxMDY5NjE5Ljk4Mjc4OTA1MzMsMTE2OTgwNC45NDI5NDkxODI4LDE2MzUwMDkuMjU1ODc1NzE1OCwxMzY3MzcyLjgyMTc1NTYwNywzMzQzMzEuNzU0Mzg2OTExODcsMjU2NjUwNi4zNTY1NTgwMzIsMTI1NDc3OS4yNDM2Njg1NDcxLDE0Mzk5NDIuMzE2ODU1ODYwNiw3NTcyNjQuMzA0MzQzNTQ2NywyMzQwOTMuMDQ4MzIzODE4NTQsMjA2Njg0MC4zODY2MjY1MzMsMTY4MDExLjMzMjk4NjcxNDI2LDQ0NTI0OS42NDU2ODgzOTA1MywzMjAzOTIuMDExMzE1MjU3NCwyMTY3NjAxLjY0NTg5MTg0NSw0NzA3NjUuMTEwMzg3Mzg1MDcsNDk2NjM4Ljk3NTI1MzY2ODgsNDg4ODcxMS45MjM4ODk0OTYsMjk0MTg2NC45NzQ3ODAyNDE1LDkwMzI3MS42MzUwOTEwMTUzLDg4MTA3My43Nzc1NjYzNzM4LDMxNzkxMjEuNzMyMDg0MzY1LDI2OTMwNi40MzEyNDQ1OTE1NCwxMDU1NTQ0LjU3NDc2NjcyMywxOTgyNzUuODczMzIxODAyNDQsMTQ2ODAyNy4zNzMzMjc0OTY3LDUzNDMyNDQuMTY1NTc0Njc0LDU2NjMwNC4yNzAxMjgyNjUxLDE4MjI5NTQuMzc5NzY3OTc0NCwxNTg5OTguNjg1NTM4MzEzODgsMTUxMTU1MS44NDI0NzEzNzkzLDE0MDM5NTcuMTM5NTI0Nzc1OCw0ODkzNjcuNjE0OTQ4NjM3NywxMjkzNTIuNTU3MDk1NTY5MDMKKzUsU2F0IDI5IEphbiAxMSwxMDY3NTguOTMyNDkzNjkzNSw3ODg1NTUuNjgyNTAzNDI5LDQ3MjE1OC42NjU3OTM0MTUyLDg3MjYwNC45MzAzNDUxMjMzLDQ4MDE2MTguNjU1NTk4NjMsNzI4MTY4LjkwMDgyMjA3OTcsNTk3MzkzLjA5NjQ4NDQ0NjgsOTQ3OTguOTE5MjU4NjE2NjIsMTUwNzMyLjE0OTE4NDAwMTU1LDI3MjUwMjAuNjc0NjI0Mjg4LDEzODg1NjEuODc4NzY1Mzc2NSwyMDM1MjYuMDkxOTM2NjU2NDIsNTE5ODU4Ljg5NTcwOTM2NSwyMjUwNTUuNDQwMDUyMDgyODIsMjEyMDA1OC4zODU2NzIwNDYsMTA3MTY0Mi45NTk3MzgzNjY4LDQ4NDE1Ny4zODg4NDg0NzQ5LDcxNjk1NS41NTk5MDkzNjE1LDc4NDA5MC42NjM5NTIwNDc5LDEwOTU4NjEuNDI2NzI4ODI1OCw5MTY0ODQuMzg2ODc3MzA5NiwyMjQwOTUuMDMzNjU1NTYyODcsMTcyMDIwNy4yOTE5NDUwMDUzLDg0MDk5Ni4wNDUyMTk3MzkzLDk2NTExNi43MjA5NDEyODY5LDUwNzU5MS45OTMzOTA5MzE2MywxNTY5MDMuMzI2NDIzMjYxNDYsMTM4NTI4NS43NDM4NjQ1NTU2LDExMjYxMy42MDU4ODA2MTEyOSwyOTg0MzUuMzAwNzYyMjc0NTQsMjE0NzQ1LjY3OTY2NjgzNjk1LDE0NTI4MzEuNTYxMTgwMDQ4OSwzMTU1MzMuMjAzMDkyNjExNCwzMzI4OTkuNjMyNzQwODY0MDYsMzI3NjY1MS43ODIyNDU1MTYsMTk3MTgwOS4yOTQ2MTIzMjgzLDYwNTQ0MC4xNjYxMTY1NDg0LDU5MDUzNy43OTk3NjM4MzA0LDIxMzA4MjcuMjE1MTQwMTA4NSwxODA1MDEuMDA1NzEwNDUzNzMsNzA3NTEyLjcxNTE2MjEwOTYsMTMyOTAwLjMyNjk5NjkxMTg0LDk4Mzk0Ny4wNDI2OTEzODQzLDM1ODEyNTYuODE5ODgyMzM4LDM3OTU1NC4zMTc1MzE4NDA5MywxMjIxODMxLjQxNDcyNTk4MSwxMDY1NzIuMjI0NDU0NzA1OTIsMTAxMzEwNC40OTQ4NTQ2MjI4LDk0MTAzNi44ODkyMDE2NTY4LDMyODAyOS41NzgxMjYzODcsODY3MDEuODk4NTgzNjgyMTgKKzYsU3VuIDMwIEphbiAxMSw3MTU1NS44OTcwMTY1MDc5LDUyODU2MC42OTU2MzA3MzY2LDMxNjQ4MS4xNzQ2NTY3NzQ5LDU4NDg3MC4zNjMzMzY2NzE4LDMyMjA0NzIuMzUyMDMyNjkwMyw0ODgwNjYuODQ1NzA0ODk5Niw0MDA0MTkuNTY5MDY5MDgzNjYsNjM1NjAuMjc1NzI4OTA1MTIsMTAxMDM4LjU4MTEwOTU1MTg3LDE4MjY0NjEuMzMwMTc5NTYzLDkzMDcwMC4wMzg5NDQxMzI3LDEzNjQyMy4yOTQ5MzYxMjg2NiwzNDg0NTYuOTM1NjExNzY4OCwxNTA4NDcuNTI2Nzk2MzA5MiwxNDIwOTgwLjczMDgwOTA5Myw3MTgzMDQuNTA5OTIyNDMyLDMyNDUzMS42NjcwMjA2MDI5Nyw0ODA1NjguMTM2OTA3MTc2NSw1MjU1NTkuMDU4MTM3OTIwOCw3MzQ1MTIuMjg3MzQ2MTE2NCw2MTQyODUuMjQ2NTMzNDYzNCwxNTAyMDYuNTI3MjI0MTgxNjMsMTE1Mjk5MS4xOTY0MjE2MjMyLDU2MzY4Mi4wMDEzNDczMzg3LDY0Njg3OC43NTgzNjYzODkxLDM0MDIzNi41MDExMzE3Mzk4LDEwNTE2Ny4zMDkyNjYxNTM0OSw5Mjg0OTguNTY2NTUzNDc2NSw3NTQ4Mi40MDAzNTA0NjU5MywyMDAwMzIuNjQ5MTc0NjM0NzUsMTQzOTM3LjAwMDcwNTAzODIzLDk3Mzc3NS42MjMzMjYyMTYxLDIxMTQ5MC45NDM4MzkyODM1NywyMjMxNjkuNTA4NDg3Njg3NjUsMjE5NjIxMC40MzkxMzcwNjM1LDEzMjE2MzguMDQwMjU5Mzg4Myw0MDU4MTMuNTAxNTM0MTA3LDM5NTgxMy45Nzc4NDEwNjYzLDE0MjgyMjAuMDU2NTYxNDg5NiwxMjA5ODIuMjY5MTUzMzU1MDQsNDc0MjM0LjQ5NzM0OTE1MTkzLDg5MDgwLjczODkzNTY0ODksNjU5NTAyLjQzMDA1ODk2MjcsMjQwMDM2MC42MzU4Njc3NDQ3LDI1NDM5OS41ODY0ODM4MzI2OCw4MTg5NDUuMDIwNzA1MTE5LDcxNDMyLjc3ODMzNzMxMzA4LDY3OTA0MC4zMzA0MTc3MzE0LDYzMDc1Ni42OTI2MjcwOTkzLDIxOTg4MC4yNDUxNTY1NDcyMyw1ODExNC40ODgzMDEyNTEzOQorNyxNb24gMzEgSmFuIDExLDQ3OTYxLjUxOTA3MDMzMDA3NiwzNTQyODkuNDQ3NjgwMTc4ODYsMjEyMTMzLjI5NTI5OTUzNjIsMzkyMDIwLjAxODA4NDk2NywyMTYwMDAyLjg5NTI1NzQ1OCwzMjcxNDAuODcwMDMzNjE4MjQsMjY4MzkzLjQwOTMxMTQwNzU0LDQyNjE3LjU3ODg0NDcwNDE0LDY3NzI4LjA1NDU0MTk0Nzg3LDEyMjQyMTMuMjc1OTEzODQzNyw2MjM4MjMuNjMyMjA4NjE1MSw5MTQ0Ni44NjcyNzk0MDcxNSwyMzM1NjguMDk3MzUyOTU5OTQsMTAxMTA4LjgzMzg2MTUyMTU4LDk1MjQzMi4zNjM3MDY0MzE2LDQ4MTQ2OC44ODQ0NzU2MTIxLDIxNzUzNC40MjMyMjI4MTAwMywzMjIxMjAuNjMzMTYxMDI5NCwzNTIyNzIuMDcxMTQ5ODA3Niw0OTIzMTguMDM2MDU1MzM2Niw0MTE3MzUuMTc4MjkwNjU5NSwxMDA2ODAuODA5MzIzNDM0NjksNzcyODEyLjMxMjk0MDQ0NywzNzc4MTUuMzQ2MjQxNjU0MTMsNDMzNTgwLjA2MTI2MzA5MTg2LDIyODA1OS4yMzcxMjAyNzI0Miw3MDQ5MC42NjU3ODg4NTMyNCw2MjIzMzguNzg1NzE1MTgwMiw1MDU5NC4zNTAzODQ2MDQ1NSwxMzQwNzYuNzY3NjcyNTcwMTMsOTY0NzYuNzc4MjU5Nzg3MzYsNjUyNjg4LjE1NjQ3ODE0MSwxNDE3NTUuODYzMzgxODk5NzgsMTQ5NjE0LjM2ODQ4ODUxODE0LDE0NzIwNDQuMDQ5ODgxMDY5LDg4NTg1NC44MDE5OTM3NDQsMjcyMDA4Ljk1MTgyMDkwMzg3LDI2NTMwMC4zNDEwNjIxMzI3LDk1NzI5Mi4yMzIyNTI0MDk5LDgxMDkwLjAzNjcyNTk0MzM2LDMxNzg3Mi42NDU3NDgxOTI1LDU5NzA5LjQxMDk1ODEwNTA1LDQ0MjA0Mi40OTgzNDI1NTE1LDE2MDg4NzIuNjk0MDg3ODYyNSwxNzA1MTYuMjQ1ODQyMjI5OTIsNTQ4OTEwLjM5MjE2Njc1MTIsNDc4NzkuODM4MjUyMDU4Miw0NTUxMzUuNjkwNjIzNTU5NSw0MjI3ODMuOTg5NzYwNzM3MSwxNDczODcuMTc0NzgxMDc5NTgsMzg5NTMuMDYzNDcxNTQxNDUKKzgsVHVlIDEgRmViIDExLDMyMTQ3LjE3NjUyMDQ5MTkzLDIzNzQ3Ny4xOTg2NDgzODAxNCwxNDIxOTAuMzgwNzY2ODk1ODYsMjYyNzYwLjA5NzcxMjg4MjU2LDE0NDg3MzUuMjAyNDcxNDQ0NiwyMTkyNzcuMTYyMjEwNzk2NjcsMTc5ODk5LjA5ODc5MzQwMTgyLDI4NTc1LjcxMzQ1ODE3Njc5LDQ1Mzk5LjM4NTA1NTE0ODcyLDgyMDU1MS43MjI5OTk2NzY1LDQxODEzNS4yNDIxNjUxOTc3Myw2MTI5OC45ODc0MDAyODEwMSwxNTY1NTkuMDc2NTE0NDE3MSw2Nzc3MC41MzIzMjUxNTk5Myw2MzgzODQuMzgxMjg0MzI2OSwzMjI3MjEuODE2NjA4MTkxMzUsMTQ1ODEzLjk0NjcwMzU5NTc1LDIxNTkxNC44MjIzOTQ1NTA0NiwyMzYxMjEuNDcxODc2NTM4ODgsMzI5OTg0LjYyOTgwMzUwNzM2LDI3NTk3My4yNTg3NjQ5OTEzNiw2NzQ4NC42NjkxNzU0NjU3Nyw1MTc5OTIuMTcyNDI2OTc4LDI1MzIzNi45MjgyMTk4NDQ2NSwyOTA2MTQuMzM4OTE5MTQzNjYsMTUyODY3LjMzMjU2OTQ1MDIzLDQ3MjQ3Ljk5MTgzMzg4MDcsNDE3MTMyLjQ0NzE5Mjk4MDU2LDMzOTEyLjQzMjU3Njk0NzQ4LDg5ODY4LjM4ODk3MTUyMjM4LDY0NjY1LjcxMTkxODg3NDEwNSw0Mzc0NzUuNTkzMDgzODIyMTcsOTUwMTQuODA4ODYzMjIxMDMsMTAwMzAzLjcwMDUzNTYxODE5LDk4NjY2My4xNzgwODAwMTA5LDU5Mzc2My41MTYyOTEwNzgsMTgyMzIyLjU5MDUxODQ3MjE2LDE3NzgyMi4xMTU5MzMzMTI2LDY0MTY0NS4xODc1OTI3OTY2LDU0MzUxLjg5NzQ2MDgzODUyNSwyMTMwNjUuNzQxMDE0ODkwNTIsNDAwMjIuMzE5NDUzMDg1LDI5NjI4Ny4xNDk2NDY5NjMxLDEwNzgzNzEuNzE5Njg4OTI3MywxMTQyOTIuNTAyNTI0NjY5NCwzNjc5MTYuNjQ4MDU3MzE3NSwzMjA5Mi44NjI3MTkxNTYwMywzMDUwNjEuNzY3MzA3NjM2ODUsMjgzMzg0LjI5Njg4NDE0NDUsOTg3OTQuNjE5MjIxNjM1NzcsMjYxMDkuNTQ5NTQ5NTg4NjUKKzksV2VkIDIgRmViIDExLDIxNTQ3LjMxMjk3NzM3MDkwOCwxNTkxNzguODY2MjY1MTMxNjMsOTUzMDguNDQyNTg4ODcwOTcsMTc2MTIwLjk1ODE2Mjg1MjM2LDk3MTY5MC4wOTIwNjg0NjAyLDE0Njk3OC4xNTM1MTE3MDA2LDEyMDU4Mi45NDcyMTE3NzI3NiwxOTE2MC41NDY2MjI5NzgxMSwzMDQzMi4wNTgzMTExNDc1LDU0OTk5MC40NTAzNTQ2ODM4LDI4MDI2Ny4yNTY1MTY4NzksNDEwOTAuMjk3NzMwNTk3ODcsMTA0OTQwLjQxNDY2NDg3MDEsNDU0MjQuNzQzNjI1NjExNzEsNDI3ODg4LjQ5NTg2MTgxNTg3LDIxNjMxNS43Nzc2MTc1NTI3OCw5NzczOS40NzMyNzY5MDI0NiwxNDQ3MjUuODY3NzA5NzMwMywxNTgyNjcuNzgyMjI0MDg0MjgsMjIxMTc3LjgxNTg4NDgyMjMsMTg0OTc2LjIwOTYxNzYyODUsNDUyMzMuODI1MjIxNTY5MTYsMzQ3MTkzLjk5Mzc5NTY3ODk1LDE2OTczNi4yNzI2Nzc5NzI2OCwxOTQ3ODkuMTExMTc0MzIyMTQsMTAyNDY2LjQxMDYwNTgwMDQ4LDMxNjY5LjAzOTM1MDEwODg2NiwyNzk1ODkuNjExODA1NDcxLDIyNzMwLjg0NzUxMjg0OTc3LDYwMjM2LjU1OTUwOTYyMDM1LDQzMzQzLjYxNTMzMjQ2NDA5LDI5MzIyNS41NDgyNTU4OTE0LDYzNjg1LjYyMDIyOTIwMDU2LDY3MjQ1LjQ1ODQxNDQzLDY2MTMyOC4wMDg4NDQ2MzA3LDM5Nzk4Mi43NzY5MjI0OTA2LDEyMjIwNy40MDg1NDM0ODQ3LDExOTE4OC4zMDA1Njg1OTQwNyw0MzAwNzUuOTUzODUzMDM0NywzNjQzMC4yMjU4OTExNjMxNiwxNDI4MTUuMDEzNzE4MzE4MjgsMjY4MjYuMzQ0MTAzMDE2MzE2LDE5ODU5MS44NjgyMDMxMzY5LDcyMjc5NS4yODEyMTQ2ODUyLDc2NjA3LjMxMTE5NDk4MjIzLDI0NjYwMi40MDg1NzcwMTExNywyMTUxMS4xNjg4NTY2MTY5NCwyMDQ0NzIuMzgyMzAxOTE3MjcsMTg5OTQ3LjE1NTk4MDQwMTM1LDY2MjIyLjY4MzA3MDE5OCwxNzUwMC43NTk4OTA2NDE3OTUKKzEwLFRodSAzIEZlYiAxMSwxNDQ0Mi41NzAyMjAyNjg4NjYsMTA2Njk2LjI5NDAzNDY0MjE3LDYzODg0LjEzNjE0MTQ3ODI2LDExODA0OS4zODc3ODU0NDMwMyw2NTE3MTkuMzQ2NzgyMzA1Nyw5ODUxNy40NDY3MzkwODk2NSw4MDgyNC41NzIyNTA3MDQzNCwxMjg0Ny4zNzg1Nzc4MjQxNjIsMjAzOTkuMTgwMDgyODA5OTgsMzY4NjQyLjUxNTY5NjY3OTcsMTg3ODU3LjY5MjQ4ODM4ODYyLDI3NTQzLjkxNTA2NDI2NDg5LDcwMzQwLjg2NjM0MTQwODk1LDMwNDQ3LjAyNDE2MjE4NTU5NywyODY4MDAuNTk2NTcwMjIwOSwxNDQ5OTMuNTIyNDM1MTc0Miw2NTUxNS4wNjU4NDk5MjI1Myw5NzAwOC42MTM5MDY1NTU5MSwxMDYwODQuMDY3MTYyMjMyNzQsMTQ4MjQ4LjUxNDk1NTg0OTUsMTIzOTgzLjk5NzE0MTM2MTA4LDMwMzE5LjUwMzUzNTQ1MDcyLDIzMjcxMy43NzMxOTA1MTU3LDExMzc2OC44NDc4NDA1MzQ5LDEzMDU2MC45MzcwNjA2MzMyOCw2ODY4Mi45MTQyMjQ4OTA3MiwyMTIyNi45MzA4NzkxMTQ5NDUsMTg3Mzk5Ljc3OTM0NDI0ODU5LDE1MjM2LjA2OTExMDMyNDIzMiw0MDM3NS4xNDQxODE4Njk2NTUsMjkwNTIuMDY0NTg2NjI5NzUsMTk2NTM5Ljg5MTMzMTAwMjEyLDQyNjg2LjY3MjMyMDA4MTc4LDQ1MDgyLjQ0Mzc4OTQ4NTcsNDQzMjY3LjQ0NjExNTAzMDk3LDI2Njc1Ny4wMTg4MTc1NTA3NCw4MTkxMy40NDU5NzIyNzk4OCw3OTg4OC4xNTkyMDgwNzY2LDI4ODI2Ny44NTA0OTc1MzcsMjQ0MTcuOTk0NzU2Njk3NDM3LDk1NzI3LjAzOTc1NTg0Njk2LDE3OTgxLjMwNzg2ODQ0NDI4LDEzMzExMC4wOTcxNDYxMjM4Miw0ODQ0NjUuODI1NDkzODEwNzYsNTEzNDguMDI3NDI4ODQ2OTYsMTY1Mjg5LjgyNTA2MDEzNjg4LDE0NDE4LjUwNDM3NTE1MzI5OCwxMzcwNTEuMTA0MzQ4OTYxODIsMTI3MzE4LjE3OTU4NjA5OSw0NDM4OS41MjA0Njk1NDQ0MiwxMTczMC40NTk2NDA0MDU4NzYKKzExLEZyaSA0IEZlYiAxMSw5NjgwLjQyNzUyNzk0MjI3Niw3MTUxNy41MDU3NjYzNTEwOCw0MjgyMC42OTAzNzc3Mzg5Miw3OTEyNS4yNjkxOTU0NjA2OSw0MzcxMjUuMTk4ODY4MDYxLDY2MDM0Ljc3MjkyMTE4NzMxLDU0MTc1LjA5OTk4NzI1NDU5NCw4NjE0LjQwNjgxOTUwNDI5NSwxMzY3My45NTMxOTcyMjU5NCwyNDcwODkuNTA5NTUyNzEzOTgsMTI1OTE3LjA2MzQxNTkzNTUyLDE4NDYzLjQzMjg2Mjc5MTYzNyw0NzE0OC45MjUxODQ4MjU5NDUsMjA0MDcuNzgwNDA4MTkyMzI0LDE5MjIzMy4wNDY3ODg4OTUwNCw5NzE4Ni45NDQ0Mzg5NDU4NCw0MzkxNC44OTMzODU1NjcsNjUwMjMuOTc5MzAyNjY2MDIsNzExMDYuMDU3Mzg2NDI2MTQsOTkzNjUuOTQyNzI2NzI4MzIsODMxMDIuNDUyNjE1NTk1OTIsMjAzMjIuNjIwMjEzNzQyNzc1LDE1NTk4MC41NDI2MzQ2NDkyLDc2MjU1LjM5MzE2ODE5MDI2LDg3NTEwLjUxODA0NzQ5MjI4LDQ2MDM3Ljg2MzkzNTYxMTc2NCwxNDIyNy44MTA1MzUwMjMxNDcsMTI1NjA3LjQ4NjQzNzE1MjIsMTAyMTIuNDI4MTgyMTQwNDc4LDI3MDYyLjQyMDM0MDEzNzMzOCwxOTQ3Mi43NTUwNjYxNzc5MjgsMTMxNzM0LjA0ODQxNzYxMDk2LDI4NjExLjU3MTQ3NzUyNDg1LDMwMjI0LjE3NzYzMTUxMjgxLDI5NzEwNy4yMDM0NjM3NTc2LDE3ODc5OS4zNTcyMTY2Mzc1OCw1NDkwNC45NjkwMjcyMzk2Miw1MzU0Ni4zMTg4ODkzOTA0NCwxOTMyMTcuMTg4MTAzODAxODYsMTYzNjYuNTI3MTA0MDg3LDY0MTY0LjQyODk3NDMxNjY3NCwxMjA1Mi41NzgxNzE4NzMwNjEsODkyMTkuMzM1MDQ4NTYzNjIsMzI0NzIwLjI3MDI5ODA5OSwzNDQxNy4yNDYzNDIwNTc2NzUsMTEwNzg4LjE1OTAwMjE4ODk3LDk2NjQuNDA1NDcwNjk3MDczLDkxODYwLjUwNTQ2MDE2NjIsODUzMzguODU5OTAxNDYyNDYsMjk3NTQuNTczMjQyNjU2OTE2LDc4NjIuNzA0NzQ0MDczNTc0CisxMixTYXQgNSBGZWIgMTEsNjQ4OC41NTYyNTgyMjYxNzgsNDc5MzcuNzI5MDUyNTk4NjUsMjg3MDIuMjk0MjEwODUxMzY3LDUzMDM1LjkwODg2NTE4MjQ3LDI5MzE3My43MDY4OTAyNDk1LDQ0MjYyLjM4MzU5ODE3NDE0LDM2MzEyLjcxOTAyMTcxNzk3NCw1Nzc1LjkyOTc2Njg5OTI4MSw5MTY1LjkxMzI4ODk2ODAxMSwxNjU2MTcuNzE0NTMwMzA3Niw4NDQwMC4xMzU3MzQ4ODUyNiwxMjM3Ni41MzMwNDE1OTUyMjgsMzE2MDMuNjk0MDIwODk5MDY0LDEzNjc4Ljg2MjQzODg3NzUzMiwxMjg4NDguNjA1MjU1Nzk0MSw2NTE0My4yOTA5MDM3MDMxNjQsMjk0MzYuMzM5NzA1MTg3OTIyLDQzNTg1LjE3OTQ1NjcwNzQ4LDQ3NjYxLjI4Njg1MDAxNTQ3LDY2NjAyLjE4MDQ2MzI4NzM4LDU1NzAxLjMzNzUxNTExNDYzLDEzNjIxLjk3MDIxODc2MTYyNCwxMDQ1NDkuNTg4MTI0OTE2MjUsNTExMTEuODM5NTQzOTc1MDc1LDU4NjU1Ljc5OTYzNzE5NTM5LDMwODU5LjEwNjcyMjIyNDIyLDk1MzYuNTcwNzUyOTY4NTQ0LDg0MTkxLjAxNTc3MTU1NTc2LDY4NDUuMjI3MDkyMDE0NzY4LDE4MTM5LjM3NDQ0NjU2OTI5NCwxMzA1Mi4xMjI1OTQ0MzY4MTgsODgyOTcuNjI3OTY3MTU2NTksMTkxNzcuNjEzODU2MTY1MDIsMjAyNjIuNTc3Nzg3Njg3LDE5OTE0Mi42MDk5NzkyNDM2LDExOTg0NC44NjM2MDg3OTE3NSwzNjgwMS45NTAwNDcxMDc1NjYsMzU4OTAuNTgyODA1OTU5NTUsMTI5NTA4LjYzODM2MDkzNjE0LDEwOTcwLjAwNTI0NzAyMjI5Niw0MzAwOC43MTIyNzU1MzE0Nyw4MDc4LjY5MzY2MzQwOTg3Nyw1OTgwMS4yOTE0MjgzMzg2NCwyMTc2NTAuMzk0NTYyNjY0ODUsMjMwNjkuMTU4MDY0MTY2NTU3LDc0MjU4LjE3MTk0NTg3NTYsNjQ3Ny44ODA3ODQ4NzU0MjQsNjE1NzEuMzg0NTcwOTY1MDgsNTcyMDEuMzExMDE5NTY0NCwxOTk0NC43MjU1NDk0MjU5MDgsNTI3MC4yNTQ0NDQ0Nzk2MDkKKzEzLFN1biA2IEZlYiAxMSw0MzQ5LjAzMzU0NjAzNTg0LDMyMTMxLjk0MTUwODI5MTc5LDE5MjM4LjU5NDI3NzQ4NTY3NCwzNTU0OC4wOTc2NTA2NzAzNDUsMTk2NjU4LjkwNzAyMzgyMzQ0LDI5NjY4LjE2MDE3ODU1ODUxNSwyNDMzOS40MzIxODU3NDA3NiwzODczLjAxNjc3MDI5MzU1ODcsNjE0NC4wNzg0NzcyNTc5MjMsMTExMDA2LjkyOTc5ODkyNTgsNTY1NzEuMDY1NTE0OTMxNzksODI5Ni4zMzY2NzkyNTMwMjEsMjExODMuNTQyOTYzOTI3NDYzLDkxNjguNDM5MDI0ODM4NjQ4LDg2MzYxLjg1NjQ3OTUzNjI1LDQzNjY0LjEzNzc2Njg0MDU5LDE5NzMxLjE0Mjg0MTEwOTMwNywyOTIxNC41MTAwMDY1NTQzNjcsMzE5NDYuMDgxMDUyOTEwODM1LDQ0NjQwLjU1NjMzNzQ1NTUxLDM3MzM0LjI5MTc1NjE0Mjc4LDkxMzAuNDY5Nzk5OTM4MTU1LDcwMDc1LjI2ODQxMTYyNTU0LDM0MjU4LjA2MzI4OTI5OTQ4LDM5MzE0LjQyMDEwNTc4MTUxLDIwNjg0LjU4NzY3OTE5NDU0LDYzOTIuMDEyMTYyOTMzNTUyLDU2NDI5LjQ4MDk1ODU0MjQ1LDQ1ODguMTY3NTc2MTQyNjM3LDEyMTU4LjIwOTE4NjY5NTE4Nyw4NzQ4LjM0NjIwOTM2ODg4Nyw1OTE4Mi4wOTM3MTAwMzQ3MSwxMjg1My45OTg1NDM0NjQzOTEsMTM1ODQuNzIwOTI3NDE5MjE3LDEzMzQ3Ni43MTI3Njk1NjQ0Miw4MDMyNy40MzM5MzMyMzc1MSwyNDY2Ny4zNjAyNjg2NDEwOCwyNDA1NS45MDI4NzgzOTc3NCw4NjgwNC41NjYxMzY4MjExMyw3MzUyLjcwNjYyNTg0ODY1NiwyODgyNy44MzgwNTM4NzMwOCw1NDE0Ljk2NDA3MDkzMDc5Niw0MDA4Mi4yOTY2MDA2MTg0OTQsMTQ1ODgxLjI4MDA5MDQyOTQsMTU0NjIuNDc5ODQ4Njg2NTExLDQ5NzcyLjAzODM2NTE2Nzc0LDQzNDEuOTMyMDM1MDM2OTE3LDQxMjY4LjUzNTcxMDgxNDcsMzgzNDAuNTAwOTc3NDE3NiwxMzM2OS4wMTk5MTQxOTk1NzMsMzUzMi41MTQ4MTIyMjQ5MTIKKzE0LE1vbiA3IEZlYiAxMSwyOTE0Ljk5NDM4MDk3NDU4NTUsMjE1MzcuNTYwMTM1MTMzNzU3LDEyODk1LjI1OTY4ODMxOTkwOCwyMzgyNi42NTA3ODgyMjU3LDEzMTkxNy4wMTg0NzIwMDg3LDE5ODg1Ljk2NjQ3MzU4OTc0LDE2MzE0LjA2NDI4NjM2MTk3MiwyNTk3LjAwNjQ2OTA3ODI3ODMsNDExOC40ODc2MTI3MjI1MTI1LDc0NDAzLjU1MTk1MTEyNjE1LDM3OTE4LjAzODAzMzM0NDQ0LDU1NjEuMjY2MzIzMjA2NDU5LDE0MTk5LjA1MjYwODQ3ODQzOCw2MTQ1LjI2OTI3MzExMTI3LDU3ODg0Ljc5MjY0NDg4MDEyLDI5MjY3LjEyODkzNDY2MjU3OCwxMzIyNS43NjEzNTk1NjA4NDIsMTk1ODIuMDYwOTUzMzQ1NjQ1LDIxNDEyLjYwMzExNTA2NzExLDI5OTIwLjY0MTk0NDExOTI2MywyNTAyMy42MzIwODU1OTg1NzIsNjExOS45Mjg3ODczMzkwOTk1LDQ2OTY4LjU3MDk4MjEwMTI5LDIyOTYxLjcxNjczODI5MTczLDI2MzUwLjc0ODI3NzQ0ODczLDEzODY0LjY5NzU3MTA5ODQyOCw0Mjg0LjMzMTMxNjEzOTkxNCwzNzgyMi4xNzkxNjMxNDE1OCwzMDc1LjMyMzAwOTUzODQwNyw4MTQ5LjIzNzkzMzE4NTE1Miw1ODYzLjY4ODM4NDI5MTE5NCwzOTY2Ny4yMjAzMzA1MDkzMyw4NjE1LjUzMDc5OTIxNTY4NSw5MTA3LjYyNzg3MzMxNzc5LDg5NDYzLjcyMjQwODk1NDY3LDUzODQwLjQyMzcwNjk1MzQ5LDE2NTMzLjg3MjE0NTY0Mzc2MywxNjEyMy42MzU0NTk1NjI2MDcsNTgxODEuNzE1MDEwMzUyODMsNDkyOC4xOTQyOTMyMjAyODU1LDE5MzIyLjY5NzAyMDU2MjY0MiwzNjI5LjUyNzIzMzYyMjkyMSwyNjg2NS40OTAzNzA2OTE1Niw5Nzc3Ny43MTM3OTEzNTYzNSwxMDM2My45ODY0NDgyMzgzMTYsMzMzNjAuMDU0OTk5Mjg1NjUsMjkxMC4yNjkxMzY0MzAxMjE4LDI3NjYwLjQ1OTk1MDEwNjMzLDI1Njk4LjYxMDIwNTYzMjAxLDg5NjEuMzAxMzA2OTU2NjUsMjM2Ny43NTMyOTc0NTExOTMKKzE1LFR1ZSA4IEZlYiAxMSwxOTUzLjgxMjg1ODQxMzQwNjMsMTQ0MzYuMzA1NDM3MjIxMjM3LDg2NDMuNDQ1MTY3NDcyNTYsMTU5NzAuMTgzODg4NDQzMDcsODg0ODguNDYxMDA1ODg2MTEsMTMzMjkuMTY4NDI0MzY0NzM2LDEwOTM0Ljg3ODE4OTk5Nzg3MywxNzQxLjM3NzYyODYyMzQ5MywyNzYwLjY5NzE5NTA0Mjk5OSw0OTg2OS43ODczNDA3ODg1MiwyNTQxNS40NDAyNzEyNTczNCwzNzI3Ljg3MTg3OTYwOTQ0ODYsOTUxNy40NDAyNTM0OTQwNjIsNDExOC45NTAwOTk4NzM1MzMsMzg3OTcuODEzODczMDY1OTEsMTk2MTcuMTI2NDEzODYwMTIsODg2NS4yMTIxMDU1MzEzNDcsMTMxMjUuNTcxMjEyMDI4ODM5LDE0MzUyLjI5NjUwODQxNTA2MiwyMDA1NC41MjQ2MjM2NTc3OCwxNjc3Mi4zMTExMTIyOTA1NjUsNDEwMi4wMzc4MDc4NTc2MjYsMzE0ODEuMTExMzkxMTk1NzQ3LDE1MzkwLjI2NjkwNjU5NDkyNywxNzY2MS43Njg2ODU2MzE5MjcsOTI5My4zODU0MDE4NjA1ODMsMjg3MS42MzA3ODkzNTc4NzczLDI1MzUwLjU0MDQ4MjkyNzc0LDIwNjEuMzA1MDA3OTA5MDY3LDU0NjIuMTYwNjAxNzU4MDQ4LDM5MzAuMjExMzUxOTg2ODE0LDI2NTg3LjI0NjY1ODYxMjYyLDU3NzQuNjUzNzMwNTk3MTk3LDYxMDYuMDIyMzM4MDk4NjAzLDU5OTYzLjcyMTU2NTU1MTMxNCwzNjA4Ny4xOTcwMDg5OTQ2LDExMDgyLjIxMzgyODgxNDUyNSwxMDgwNi45ODIxODc3MjExNDIsMzg5OTYuOTQ0NDYzNzIwMzg1LDMzMDMuMTUyMTkxMjgxMTc2MywxMjk1MS42MDA4MjM5NTAxNjgsMjQzMi43ODk3NjUzOTY5NTU4LDE4MDA2LjgyMjU3NDc1NjA5Nyw2NTUzNi4wNzAxMjg5ODQ1Miw2OTQ2LjY0MDI2ODgxMDgwNSwyMjM1OS44MTY5NzY3MDY2MzYsMTk1MC42Njc5NDg2NTI4MjIsMTg1MzkuNTgxNzExODcxNDEsMTcyMjUuMDkxNzM0MjI0NTM0LDYwMDYuNzkxOTk4Mjc3Mzc1LDE1ODcuMDQzOTY2MDc2MjM4OAorMTYsV2VkIDkgRmViIDExLDEzMDkuNTY5Mjg0NTExNDY5NSw5Njc2LjQ0MDgxOTkzMTIxNSw1NzkzLjUzNTg5NTc0OTU1LDEwNzA0LjI3MTQ1MzExMjIwNiw1OTM1Ni44ODExMzgzODM5Miw4OTM0LjI4MjMwMjE5MzY5Nyw3MzI5LjM1NTQzMDUxMzE5OCwxMTY3LjY0MDgxMjk4NjIxNCwxODUwLjU0NTU2OTIzNzgwODIsMzM0MjUuNzg2MjY3MzMxOTYsMTcwMzUuMjk2NDI5Mzc4OTI2LDI0OTguODk2MjMzNDgzNjM0LDYzNzkuNDE2Njk0OTY2MzI3LDI3NjAuNzgyNzk2NzE1ODI4NywyNjAwNC42MDY1OTkxODE3ODUsMTMxNDguOTM4NjI0MjMyMzczLDU5NDIuMzQxMjI0MjE4OTgxLDg3OTcuODgwMzI0NTQwMDU0LDk2MTkuOTYyNTQzMzU0Nzk1LDEzNDQxLjY5MzYyMzk2MDQzNywxMTI0MS43OTM1OTI1MDU3OSwyNzQ5LjQ5NTM4NDU5NDgxMiwyMTEwMC41MDcyOTkxNDUyNjUsMTAzMTUuNDUwNDE1NDEyMzUzLDExODM3LjkyNTI3ODIxNzQ5Miw2MjI5LjI3NTA4MzY4NzExNSwxOTI0Ljc0OTY1NzA2NjYwNywxNjk5MS4zNTc2NTUzMjY0NDMsMTM4MS42MzY2MTM3NTkwOTA4LDM2NjEuMTAzNTU0NDA2NDI4NCwyNjM0LjI3NDUyMDg4NzE3MTUsMTc4MjAuMzA0MjAzNzMzOTEsMzg3MC41MjU4MzQwODU2MjUsNDA5My42NDQxMjMwMDUxNTcsNDAxOTEuMTQxOTE1NjExOTE1LDI0MTg3Ljg4NzM4OTIwOTk4NCw3NDI4LjExMzQ1NDQ2NDIwNiw3MjQzLjQ1OTgzNjQwMTkzNCwyNjEzOC4xNDQ0ODYwMjkzOSwyMjEzLjk1ODc1MDUyNTEzOSw4NjgxLjE4ODYzNjE2NzU1MywxNjMwLjY0Mzk0MTk3MjcyNDQsMTIwNjkuMjI5MjU5Njc1MzQ5LDQzOTI1Ljk0NTE3OTQ2NDczLDQ2NTYuMTA4MTk5MDU5MjA4LDE0OTg2LjgzMzYyMDMzODIzNSwxMzA3LjQ3NTYzNTQ4MDUyNTksMTI0MjYuMjY2NDE2NTI2MjMsMTE1NDUuNTIwMTE4Mjc1NDE1LDQwMjYuMzczOTgzMzY3MDQ3LDEwNjMuNzU0NzU4NzAwMjQ2OAorMTcsVGh1IDEwIEZlYiAxMSw4NzcuNzU2OTM2NDUyNDk5NSw2NDg1Ljk3NDcxNDQ3MjMxMSwzODgzLjI5NjUzMjc3NzAwNTMsNzE3NC43MTM5MTM2OTgyNTMsMzk4MTUuNjc5MTQxMTYyNTk2LDU5ODguNDc5MjA4NDU3NzI4LDQ5MTIuNjcwODcyODY1NjExLDc4Mi45MjgzOTY5NDgyODcsMTI0MC40NTQzNzE1OTg5OTUzLDIyNDA0LjAyMzE4ODA4Mzg1LDExNDE4LjMxNTIxNzM4MzQxMywxNjc1LjA3OTUxMTE4MjE3NDIsNDI3Ni4wNDA0MjcxMTEyMjIsMTg1MC40NTI5NDMyNzY3NzM4LDE3NDI5Ljg0NzE0NjExMzU2Nyw4ODEzLjQ1MTk5MjA0MjAzNywzOTgzLjE0NDM4MjEyMTMxOCw1ODk3LjA5MjA5OTQyNzk2LDY0NDguMDA1NzUzNzM2Mzc1LDkwMDkuMzk3ODk0OTE3Mjk2LDc1MzQuOTE2Mzk1NjAzNTE2LDE4NDIuOTE5NTQ4Nzg1OTU1LDE0MTQyLjgxNTI2MTY0NTQ1Nyw2OTE0LjAxNzY4MDE4NDU0OCw3OTM0LjQ1NjAxMzQ5NzQxMiw0MTc1LjQyODgzMzE0MDA5NiwxMjkwLjA4OTk2NTU5OTQ2NjMsMTEzODguNTY4MDcwNTU4ODUzLDkyNi4wNzM1MTM2MzQyMjg4LDI0NTMuOTE1NzA5NDg4MjE0LDE3NjUuNjU2NjY3NzE3MDY3OSwxMTk0NC4xOTg1NDc4MDA1MDgsMjU5NC4yNjM2MzUzNTE3OTU1LDI3NDQuNDgyMDQ3OTM0ODUxLDI2OTM4LjQyODkyNzY5MDcxNSwxNjIxMi4yMzI3ODUyMjY2MzcsNDk3OC44Njc2Njc0MDkxMzcsNDg1NC45ODQzMjQ0MzY0MjQsMTc1MTkuMzkyNDQ2NjI3NTI4LDE0ODMuOTIwNTMwMjk2MTU1Miw1ODE4LjgyMDY1MjUzODk0MywxMDkyLjk4Mzg0NTU0MjIxMjUsODA4OS41MDgzMjI1MDc0NDcsMjk0NDEuNjQyNjM3NjMxNDYsMzEyMC44NDA2NzAxMjY2MDE3LDEwMDQ1LjA0MDI2MzI0NDE5Niw4NzYuMzYyNzc2OTIyNDY4LDgzMjguNzgzNzA1MjQyMDk4LDc3MzguNjU1NDk5MDU4MTgzNSwyNjk4Ljg5Mjc4NzYzNjQwOTYsNzEzLjAwNzU0MDc1MTg3MzgKKzE4LEZyaSAxMSBGZWIgMTEsNTg4LjMyOTEwMTA3NDY0ODQsNDM0Ny40NTI4NTYxNDU4NjY1LDI2MDIuODk5NzM4OTIzNjk5LDQ4MDguOTcyOTk1NDEzNjM2LDI2NzA3LjY1ODQyMzA5NjUyNCw0MDEzLjk2NTg5Mjk1NjA1MTQsMzI5Mi44MzIyNjQ4NDE3MjkzLDUyNC45NjYyNTg4ODU5MDM2LDgzMS40OTkxMzkzODE5NzcyLDE1MDE2LjU2NzAzNDMwMDg3NSw3NjUzLjQwMzkwNzE5ODY3NSwxMTIyLjg1MjE4OTk2ODkyNjMsMjg2Ni4xNzQ2Nzg0MDMyMzQsMTI0MC4yOTIwMTE5OTYwMjE4LDExNjgyLjUzNTkwOTkzODk4LDU5MDcuNDY4NjUwMDk2NTU1LDI2NjkuODk3MDcwMDcyNTg3LDM5NTIuNzM1ODYxMjgzOTUsNDMyMS45Mjc3NjIxMjIzNzUsNjAzOC42MTk5NDc5ODk3NzEsNTA1MC4zNDkxMjY5ODI2NSwxMjM1LjI2NDA1NTcyNjcxODcsOTQ3OS4zNTg5OTM4NTE1MTQsNDYzNC4xODEyOTQxODU4NDIsNTMxOC4xMjkxNDM3MDkyNDgsMjc5OC43NTM2NzMxNDExMDcsODY0LjcwMDc1ODQwMTAxODksNzYzMy4yNjUwNjI3NTM0NDYsNjIwLjcyMjAxMjY2ODI0MTEsMTY0NC43NzgyMjc5MTk5NzIzLDExODMuNDU0NTYxMTA5MTI2Niw4MDA1LjY5NTQ2ODA0NjU1MywxNzM4LjgzNDk0NTE5NTYxNzgsMTgzOS45NjQwNzk5NzAyNDIsMTgwNTUuNzAwMDk2NzI1Mjc1LDEwODY2LjQ1MzU3OTU1NTY3NywzMzM3LjIwMzQ5OTc2NzQ2NzMsMzI1NC4wOTE1MTA1MDA3MDMsMTE3NDIuNTc3NjM5MTA1MTYyLDk5NC42MDc5Nzc1OTYzNTI2LDM5MDAuMjM1MDkzNzQyNjIyLDczMi42MDI0ODEwNTI0MDcsNTQyMi4wNjY2NTc0NjkwMDEsMTk3MzMuNDU2MzUwMzM2OTU3LDIwOTEuODAxMTkyNDQzNDkyMyw2NzMyLjc2NzcxODQ1NTE5Niw1ODcuNDAwNDg3NDUwNjQ3OSw1NTgyLjQyMjQ2ODgzNTYyOCw1MTg3LjAxNTg3NDQ2NzY3NCwxODA5LjA3NzQ0MTY2MTMwMzMsNDc3LjkxMDcyNzY4OTM5MjMKKzE5LFNhdCAxMiBGZWIgMTEsMzk0LjMzNjIxMTg5MDQxMDM3LDI5MTQuMDMzNDYzMjA5ODA0MywxNzQ0LjY3NDI3MTEwODYxNywzMjIzLjI5NzI3MzQzNjA5MTUsMTc5MTQuOTcyMDkzMTMwNjg0LDI2OTAuNDg4MDI3NzcyMzgzMiwyMjA3LjA5NzkxNDg5ODMxOTcsMzUxLjk5NTcyOTkzODA4MDg0LDU1Ny4zNjkwMDUwMjQ4OTg2LDEwMDY1LjA0MTQyNzk3MDQ5Niw1MTI5Ljg4MzU4Mjk1NTYzMyw3NTIuNjc4ODUxOTM0ODczOCwxOTIxLjE1OTk2Mzg1NzI1NzUsODMxLjMyMzI4MTMxNTA3NDQsNzgzMC4zNDU0OTQ1OTM0MjMsMzk1OS42NTA0MTYyNDEzMTA3LDE3ODkuNjI4OTQ1MTcwOTA4LDI2NDkuNDYyMDMwOTQ3Nzg3OCwyODk2Ljg3NDI0NzM2NDQ0MjUsNDA0Ny40MzQwNDUxNzA5OTc3LDMzODUuMDQ1Mzk4NjUyOTczNyw4MjcuOTY3NDc1OTQwNDQ0OCw2MzUzLjYzNDEzNjM2MjgyLDMxMDYuMTAyNTk1MTQwNTkzLDM1NjQuNTE3NTgxNTQ3MDU4NCwxODc1Ljk4MDMzNTQ4NTE4Miw1NzkuNTc3ODQ4NTU3MjQwNSw1MTE2LjI0OTg0OTkyMDg1OSw0MTYuMDUzMjE3NDU3NTMzOTUsMTEwMi40NDA0NDAxMzY4NjkzLDc5My4yMjYxNDA3MzkxNjA3LDUzNjUuODgzODUzNzgzODc5LDExNjUuNDc0MzYyODEzNzI5LDEyMzMuNTUwNTg0NjQ5NDMxMSwxMjEwMS45ODMzNjAyMzk3MjgsNzI4My4zNzkzNzM5NDExNzIsMjIzNi44Mzk2MzM0NTE5NTAyLDIxODEuMDgxMjU0NjcwNjg1LDc4NzAuNjAxOTkxOTQ5NTM0LDY2Ni42NDMxMzE1MDI4OTUyLDI2MTQuMjQ3MTAzMzA5MDY5LDQ5MS4wNDcwMDYwMTAzNjI5NiwzNjM0LjE5MDcyMDEyNzMyODQsMTMyMjYuNDg2MTQ4MTQ1NDg4LDE0MDIuMDY5MzI5OTAzNDcyOSw0NTEyLjY5MjQyNjYxMzcyNSwzOTMuNzE3NTIyNTc1MzExMjUsMzc0MS42NTczMDU5ODYxNDY2LDM0NzYuNzE5ODEzOTgyNjIzNywxMjEyLjYzMTA1OTA3NjU5MDIsMzIwLjMzMTM3OTk4MDA1NzE0CisyMCxTdW4gMTMgRmViIDExLDI2NC4zMDk3OTM4NjE3MTQyLDE5NTMuMjMzNzEyNzQ2Nzc4NiwxMTY5LjQyMjEyMTU4MDk2NywyMTYwLjQ3MjA1NzczNzQxNzMsMTIwMTYuOTczNDk0OTU3OTM0LDE4MDMuMzg2MDMwMDIxODAwMywxNDc5LjM1OTIyNzQzNjExMzMsMjM2LjAxNTI5NDEzOTE4MjE3LDM3My42MTQ1ODcyOTkwMjY4LDY3NDYuMjIzNjQ1NzE5MDgxLDM0MzguNDMzNjgxNjkxMzg3NCw1MDQuNTQxMzg3MTc0MzE3MDQsMTI4Ny43Mjg4MzQ5NTI0Mjk1LDU1Ny4yMDYzMjEyMjQwMTA3LDUyNDguMzc2NDMzNDE3NDA3LDI2NTQuMDY5NTY2OTIwODI5LDExOTkuNTg2MjQ5NDAxOTgzLDE3NzUuODk2NDA4OTM0Njk1NSwxOTQxLjY5ODY3NDIzMTY0NzYsMjcxMi44MjY0ODI4Njg4MjIsMjI2OC44NjAxMzk5ODc0OTgsNTU0Ljk2NjUzNDk5NzQ5MjIsNDI1OC41ODc0MDAxODQyNDgsMjA4MS44OTQ5NjA1OTQwNTEsMjM4OS4xNDY2MTIxODUxNzI3LDEyNTcuNDUzNDA0ODk3MDI2OCwzODguNDcwMjkyNDEzNTU0MSwzNDI5LjIwNDAzMTYyMDk5ODYsMjc4Ljg2OTI4MDc3MzkxMTUsNzM4LjkyOTQ5NTQ0MzgyMTcsNTMxLjY3MDQ4MTUzMTk2NDcsMzU5Ni41Mjk0NDMyNTI2OTAzLDc4MS4xNzI5NjE4Mzg2MTcyLDgyNi45OTU3NDkyMTQ3NTExLDgxMTEuNDU3OTI0NzI3NTUzLDQ4ODEuNzc5MjcyNjUzMTQyLDE0OTkuMjk0ODg2MTc2NDc5MiwxNDYxLjg4NzkzMzQzMTMwNiw1Mjc1LjM2NTcyNDUxMjg5LDQ0Ni44MjI1MjA2ODc2MzA2LDE3NTIuMjc2MDMyNzU5ODg0MiwzMjkuMTM3ODIxMTY0ODM2MDUsMjQzNS44NTA5NjkyODg5MjEsODg2NS4xNDgyMzgzMTAxMjUsOTM5Ljc2NDA4NTI4MDQyNDUsMzAyNC42Njk5MzIzODE3MjIsMjYzLjg5NzQ4MTc1NTg2MzcsMjUwNy44NzI4MTUzNDI2NTQsMjMzMC4zNTM3OTE1NDMwNCw4MTIuODMwOTI5NjA2ODIzOSwyMTQuNzA5OTgzNzM3NDY5NDMKKzIxLE1vbiAxNCBGZWIgMTEsMTc3LjE1NzczMzgwNzUzNjQ2LDEzMDkuMjIzODYxMTA0NjE4NCw3ODMuODQxNTU3NjM4Mzc1NywxNDQ4LjA5NTUzNjQ2MzM2MSw4MDYwLjY5OTMzMTI3NjI1MywxMjA4Ljc3ODExMDY0MTkyODQsOTkxLjU3NTM5NTUwNTQ5MjMsMTU4LjI0ODU0NzU5MDIxNDM3LDI1MC40NDA2NTcwODg0MTY0Niw0NTIxLjc0NTk3MDg2NzA1ODUsMjMwNC42OTgxODY0OTYyNjg2LDMzOC4yMDc5NzE1Mzk4NjYwNCw4NjMuMTQ4MTI5NzQ3NTk4NywzNzMuNDc1NTg4OTU3MTY4MDQsMzUxNy43ODQ4ODk1NDQyMjI2LDE3NzguOTY2NjA3NDkyMjEyMiw4MDQuMDgxMzEzMzczOTE1NSwxMTkwLjM1Nzk2MDc0NTMzMiwxMzAxLjQ2OTc0NTY0OTU3NDQsMTgxOC4yOTUyNTEzNDE0NjcsMTUyMC43MjYzOTYyMzg3MDEsMzcxLjk4MDY1ODY1ODM4MTc0LDI4NTQuMzYyMDI5NzM0NTAxNCwxMzk1LjQxMDc3MDMyMjAxLDE2MDEuMzQ1MzM3MTY1NjI4Myw4NDIuODYwMTc3MDc0NTc5NCwyNjAuMzc3NzkzMTg1MjQ5NzQsMjI5OC40NTAxMjcyMTYxMDYsMTg2LjkxODYwMTA3Nzk2OTksNDk1LjI4MDE3OTEyNjQ4Mzg2LDM1Ni4zNTkzNjgxMzY4MzgxLDI0MTAuNjA1Mzc4NTQzMjMyNyw1MjMuNTkwNTQzMTk4NDExLDU1NC40MzIwMzA2NDQxNTM4LDU0MzYuNzc1OTU5OTE2NzI2LDMyNzIuMDc2NTExNDAyOTE5LDEwMDQuOTM4MTIyOTMwNjE3Nyw5NzkuODQyOTQ0NDIxMzk1NywzNTM1Ljg3ODI4MDEwNDYzOSwyOTkuNDg2MjQwMTE3MjEzNzUsMTE3NC41MTQ2NTkyNzg4NjY1LDIyMC42MTM3Mzc1NDM2NDA4LDE2MzIuNjUyODM4MTQ5NDI1NCw1OTQxLjkzMjU4NDI2NTQ1Nyw2MjkuODk1NDQzOTQxMTE4OSwyMDI3LjMxMTA4ODI0NTk2MjgsMTc2Ljg4Mjg4MzQ1NDEyMjYzLDE2ODAuOTIwNTkwOTEyOTM5NiwxNTYxLjk3NTAwMjc4MzA5MSw1NDQuODQzNDc5ODc4NDczMSwxNDMuOTE0NjYyMDcwODc4MjgKKzIyLFR1ZSAxNSBGZWIgMTEsMTE4Ljc0Mjc4NzE3NDM3OTM0LDg3Ny41NTM1NjYzNzI0NDA5LDUyNS4zOTQyMjc1MTMxOTE2LDk3MC42MTI4NjE3MDQzOTAxLDU0MDYuOTA4MjM3OTM1OTE0LDgxMC4yMjMyODIxMjI1ODMyLDY2NC42MjY4NjM0ODA3OTgyLDEwNi4xMDUwOTQ2Njg5MDMxMywxNjcuODc0OTMwMTA4MTY3NTIsMzAzMC43NjIwNjE1NTMxNTM3LDE1NDQuNzgzODgzOTMyNzU2NSwyMjYuNzEwMDg2MjQ3NDkyMTEsNTc4LjU1NzE1Mjk4NjI5NTMsMjUwLjMyNzQ2NDk2NDY3NzM4LDIzNTcuODM3Mjc5MTg3MTA5NywxMTkyLjQwMzczMzM4MTQzOSw1MzguOTc0ODA4MjgzNTIwNyw3OTcuODc5OTU2MDEzMjM0Nyw4NzIuMzQxMTczMzMyMzY0MSwxMjE4LjcyODQzNTExNjIwNywxMDE5LjI4MjUxNDMyOTY5OCwyNDkuMzI5NjczMTY5NTE2OSwxOTEzLjE2NjA5MDE5OTgzNDEsOTM1LjI4ODQzNjk2OTgzMzEsMTA3My4zMTUzODUxOTE2Nzg4LDU2NC45NjE5MjkyMTA5ODI2LDE3NC41MjE5OTM5MDA1Mjg4LDE1NDAuNTU0MzM3NjAxNTA5NCwxMjUuMjg2NTQxNTc1NDk2ODEsMzMxLjk3MDEwMjUzMDc5ODY3LDIzOC44NTQ3NjYxMzAxNzM5NywxNjE1LjcyOTkzMzQ2NzcxNDUsMzUwLjk0MjkyOTY5NDQzNjU0LDM3MS42OTk2MDA2NjA0MDI5NSwzNjQ0LjA0ODEwOTc4NDA1NywyMTkzLjE1MjY3MDk3MDY1NjMsNjczLjU4MzgwMjQ3OTEzOTgsNjU2Ljc0ODM3OTAxNzc1OTEsMjM2OS45NjYxODczNDU3OTY3LDIwMC43MzMwNDE4OTc0OTQxLDc4Ny4yNTMxMzMzNDA3MDMsMTQ3Ljg3MjQ3OTM2MTE0MjcsMTA5NC4zMDE4MDY5NTUyOTk1LDM5ODIuNjI3MDA3NzE4MDYyNSw0MjIuMjAwMTI0NjAzMDE3MSwxMzU4LjgyMzIwMDI3MDM4MzUsMTE4LjU1OTUyMDI4NTAyMTYzLDExMjYuNjUwMTQxNjgxNzk0NCwxMDQ2Ljk1MDk4NTgyMDQzNjcsMzY1LjIxMDUzNjkwMjk4Njc1LDk2LjQ2MjM2MjQ5MTA0MDAzCisyMyxXZWQgMTYgRmViIDExLDc5LjU4OTI4ODMxMzk5MTMsNTg4LjIxMTMyNTgxNjE1ODgsMzUyLjE2MTg3NzE3ODYyOTksNjUwLjU3MTY0NzczNzM2NTgsMzYyNi44MDI3OTIyMjgxODY3LDU0My4wNzkxMDUxNDk0OTk0LDQ0NS40ODE5Mjk3NDIwOTEzLDcxLjE0MjYwMTUwMDA0NjU0LDExMi41Mjk2MjA3NDgxNjQzOCwyMDMxLjQxMDg5OTY5NDgxNCwxMDM1LjQzMjE4MzE2NTMyNjUsMTUxLjk2OTk3OTMzMTgzNTgyLDM4Ny43OTk0Nzg3Njg4NDE2LDE2Ny43ODU2NzM2NTE2OTc2NCwxNTgwLjM2OTQ1NjQyNTMyNDYsNzk5LjI0MzA5ODkxNTI2MTcsMzYxLjI3NDIxOTA4MjE0NDUsNTM0LjgwNzU3NzUwMTgyNjQsNTg0LjcwNzU3MDIyODUyNzIsODE2Ljg2Mzc3MDE5MDY4Miw2ODMuMTg0Nzk3NzI3MDUxOSwxNjcuMTE5NjkwMDA4OTYxMSwxMjgyLjMyMDAxNzExNDA5MzQsNjI2Ljg4NzA0NjExNjM4LDcxOS4zOTkwNjAzNjEzODEsMzc4LjY4OTEzNTY4MTg5MzA1LDExNi45NzU5MjQxNjU5NzkxNSwxMDMyLjU2OTEyMjg3Njc0OTYsODMuOTc2MjI5OTc4NzA3MjgsMjIyLjUwODc0MDYzMjU4NDU2LDE2MC4wOTU3Mjc4MTQ1MTkwMiwxMDgyLjk1Nzg4NjgwODc0NTEsMjM1LjIyMzgyNzU0NDEwODA1LDI0OS4xOTIzMTczNTU0OTYwNywyNDQyLjQ1NjkzMjc1Mjg5NzUsMTQ2OS45OTAwMDkzOTQwMTgsNDUxLjQ4NTcwMDYzNjUwODgsNDQwLjE5MTU0ODYyMjY3OTMsMTU4OC40OTk1NzcyNDg4MTA1LDEzNC41NDI5NzYyNDY4ODI3NCw1MjcuNjc5NzAyNzkwMzk1Niw5OS4xMTU2NDE2NjgxOTY1LDczMy40NjY4OTkyOTg4NDgxLDI2NjkuMzg4MjQ4OTE2MTY0NywyODIuOTg4MzIwMzkzMTMwNCw5MTAuNzYzNTkxOTAyODEzMyw3OS40NjcwNTQ5MTc5NzAzOSw3NTUuMTQ2Mzc1MjY2NTcwNCw3MDEuNzQzOTQyNTgzMDY4MiwyNDQuODAxOTMzNzIyNzk0MjcsNjQuNjU2MjkyMDI5MTY3MDYKKzI0LFRodSAxNyBGZWIgMTEsNTMuMzQ2MDQ5MzA1MjQxMDgsMzk0LjI2OTQ3MzIwMjEwNzcsMjM2LjA0NzUwNTMzNDkxOCw0MzYuMDU4MjI3MDUxOTczMjMsMjQzMi43NTA0MTc0NzU2NzUsMzY0LjAxNzAzNjMxNjA1NTYsMjk4LjU5NDg3MjM3OTQ0MjczLDQ3LjcwMDIxNDAwMjkzODczLDc1LjQzMDY1MjY4MzAwNTUyLDEzNjEuNTgyNTE4NjE2MjE5Miw2OTQuMDI2MTY4OTAyNTA0NSwxMDEuODY5NjI5NDY2NjQ3NjQsMjU5LjkzNzA1NTM1MzgxOTg2LDExMi40NjA4NDU0ODgyMDExLDEwNTkuMjYyNjc2Nzk5Njc5NCw1MzUuNzE1ODU0ODI3Njk5NiwyNDIuMTYxNzE0MTEwMzg1MzMsMzU4LjQ3MzkyNTM3MTMzNDY0LDM5MS45MTQzMDMxMDQzNTg0LDU0Ny41MTA1Mjg2MTA2NjIsNDU3LjkxMTkxNDEzNjMxNjQsMTEyLjAxNjMyNDg5MzE2MTgxLDg1OS40ODg5NDcyMjU1Njk0LDQyMC4xNzc5NTI5MjYzODUzLDQ4Mi4xODM3MDkxNzkzMzQ2LDI1My44MzIwODgxMDE2MzQ5Miw3OC40MDQ4NDQ1Njc1NzIzMyw2OTIuMDg4MTY1MTI0OTQ1Niw1Ni4yODcwMzU5MjcyNDY2NCwxNDkuMTQwMzg0MDY2Nzk4MiwxMDcuMzA2NDExOTQ5Nzk1Myw3MjUuODYyNzU1ODEyMTU5NCwxNTcuNjYxNzEyMzk3Mjk5NywxNjcuMDYxMzU1MTY5MjYzOTUsMTYzNy4wNzk4OTE3NjE1MzY2LDk4NS4yODA3NjQyMDM0NDksMzAyLjYxOTE1NjExNzY4MywyOTUuMDQyNDczODg4NDExMDUsMTA2NC43MTIwNDQzMzcxNDk2LDkwLjE3ODU3NDY0Mjk2NjMxLDM1My42OTI5NjAzOTkwMjk3NCw2Ni40MzUwMjEzMzkzOTQwMSw0OTEuNjEzNzg5MzEzNjk3LDE3ODkuMTgwMDU1NTgwMzA4OCwxODkuNjc4ODU4NzQzMjY1NzgsNjEwLjQ0Nzc4MDExMTQ3MTIsNTMuMjY0NTAxMDg1NDQ5Myw1MDYuMTQzMTg3MzExOTYzNjMsNDcwLjM2MDcxOTcwMjQxODksMTY0LjA5MTYxNjI4Njk5NDUsNDMuMzM3NDg4OTE2Njc4MgorMjUsRnJpIDE4IEZlYiAxMSwzNS43NTYxMDEyOTAwOTQ3NTUsMjY0LjI3MzA5MTk0ODU1NDg1LDE1OC4yMTgyMjk3NzUzODkzNywyOTIuMjc2NjMzMjQ5NDM3OTYsMTYzMS44MTA5NzIwMDUxMjgyLDI0My45OTQ3OTU4NDIzOTA1NCwyMDAuMTQwMzQ4MDIwMjcxNCwzMS45ODIxODA1NTU4Njc2ODYsNTAuNTYyNTM5MjQwNzYyOTQsOTEyLjYyMDg5MDQ2NDcyNTMsNDY1LjE4OTkxMTQzODYxMDg2LDY4LjI4NTk4OTc0NDM0MDgxLDE3NC4yMzI1MDgyMTI0NjA3Nyw3NS4zNzg1NzIwMzk5NTYwMyw3MDkuOTg0NjQ0NzAyMTk5MywzNTkuMDc5MTEwOTQ3ODUzOSwxNjIuMzIwNzM0Nzk4OTI3ODcsMjQwLjI3OTk5NDU5MTEwNDQ3LDI2Mi42OTAwMTI3MDMwMTE3LDM2Ni45NzQxNDMxMzgzODcxNSwzMDYuOTIwNDQ2OTM1MTMxNCw3NS4wODE4NjY5ODY5NDQyNSw1NzYuMDgxOTg5MjMzMDQzOSwyODEuNjI5MDU1NzQwNzM5NywzMjMuMTg4MDk1NjkzNDcwNjQsMTcwLjE0MTQ4Mjc4NTEyNDksNTIuNTUyMDE4OTM2OTkzMjIsNDYzLjg3ODExNzY4NjkzODE0LDM3LjcyNzcwOTQwMTMwOTQ4LDk5Ljk2Mzk3NDg4NDk3MTQsNzEuOTIzNjQ3MzY0Nzc3NjUsNDg2LjUxNjUzNDUwNzg2NTksMTA1LjY3NDc2MTY2ODc0NjY4LDExMS45OTk1MjI3OTQ5MDg3NCwxMDk3LjI2ODY3MTY0OTA4MTIsNjYwLjM5Nzk2Njg2MDM0NjQsMjAyLjgzNzc5NTkxNTIyODE4LDE5Ny43NTUwMjY0OTcwOTA4NSw3MTMuNjM2OTY4NDUwMzkyNCw2MC40NDI5ODA3MTczMDU4NSwyMzcuMDczMjA4NzkyMzc1Myw0NC41Mjk5Mjg3NjU5NjkyNzQsMzI5LjUwOTMzNzMyODgyODU2LDExOTkuMjEzNjAxNDQ1MDQwNywxMjcuMTM2MzEwNTEzOTEwMTksNDA5LjE1ODQ1MDU2NjEyOTQzLDM1LjcwMTY4MTMxNzk0MDczLDMzOS4yNDY4NTg5MjE0OTI4LDMxNS4yNzA1OTg0NDM0MDc4MywxMDkuOTkxMjAxMzExNTU4ODUsMjkuMDQ4MDMzNzc0Mzk3MDQ0CisyNixTYXQgMTkgRmViIDExLDIzLjk2NjE1MjAyMjI1MDc4MiwxNzcuMTM4NDE4MjQ2MjkyOTMsMTA2LjA1MDcyOTA3OTYyNDgyLDE5NS45MDQyOTgxMjY3ODQyMywxMDk0LjU2MzE2MTk0NDA4NzEsMTYzLjU0NTg5NjkxMzMxNzU2LDEzNC4xNDg4NjY1MDk3MjE3MywyMS40NDMzNzA0MTAyMTQ3NiwzMy44OTI5OTAyMzQzOTkxOCw2MTEuNjk4MDQ2MjgzMzI2NCwzMTEuODA2MzY4NTM0ODQ1NjYsNDUuNzczOTU2Mjg3MTc1MDU0LDExNi43ODU4NDM2OTkwODU4Niw1MC41MjM2MzE3MjYzMDg4Nyw0NzUuODc2NzQ2MzA2MTgxMywyNDAuNjgzMjIzNDYyMTgyNjQsMTA4LjgwMzQxNDUxNDgyOTc1LDE2MS4wNTYyODUyNjcxNzcyMywxNzYuMDc0MzM2NDcxMTQ3MTUsMjQ1Ljk2Nzk5NjY4Nzk5NzkyLDIwNS43MTY4MzI3MzQzNzk2NCw1MC4zMjU1ODcyMzMzNDQ3MDYsMzg2LjEyNTQ0ODE1MzM5NzY2LDE4OC43NjUxODA5NTA4MzMzNSwyMTYuNjE5ODkwNTQyMjQyNTYsMTE0LjA0NDM4Nzg3MjU0NDE2LDM1LjIyMzc4Mzc1MDMzNzQ5NiwzMTAuOTE4NDcxMjMzMDkwNywyNS4yODc4ODc0Njc5MzMxNzQsNjcuMDAyNjMwNjM3MzUyODgsNDguMjA3ODU3NTkzOTc0NzY1LDMyNi4wOTI1MjM2OTU2MTQ1NSw3MC44Mjk4NjY4NzI5MzM3LDc1LjA4NTM0NjQ5OTE4MTExLDczNS40NTUyMTM1MjAwNDc0LDQ0Mi42NDA5MTMyMjMzODIxNCwxMzUuOTU2OTQ2MDE0MjQ4NDQsMTMyLjU0NzIzNDI3NTE0NTU3LDQ3OC4zMjQ0OTQ1NzA5MjM2LDQwLjUxMjQ1Mzg3OTcwMTUzLDE1OC45MDUzNzAzNTA5ODkxLDI5Ljg0NzQzMTMxNTgzMDcsMjIwLjg1NzE4MjgxNjgxODk4LDgwMy43ODM3NzQ1MjAzNzE3LDg1LjIxNTg4MDg5NzQ0OTY0LDI3NC4yNDI0NTAwNzE5NzA0LDIzLjkyOTgyNTY3MjE3NzEyNCwyMjcuMzgzMjQ0OTY4MTQxNiwyMTEuMzE3NzM1MDMxODg2ODUsNzMuNzI3NDk4OTgwNjU1MSwxOS40NzAxNzE5MjA1MzQxNTMKKzI3LFN1biAyMCBGZWIgMTEsMTYuMDYzNzQxNzIzMTg2OTkzLDExOC43MzMzMTczMTk5NTYzMyw3MS4wODM4MzEyNTg2MzE0NSwxMzEuMzA4ODc3MjM2MzgyODQsNzM0LjE5MzQzODE1NTY3NjMsMTA5LjYyMjMxNjU4MzI0MTg1LDg5LjkxNjUwNDU5OTAzMTc1LDE0LjM3NzIzMzY3NzMyNTE4NywyMi43MTkwODgxNzA5MTI0Niw0MTAuMDAwMTYxNDU5NTUxNzUsMjA4Ljk5NjkzODY2NTU0NjkzLDMwLjY4MzUyNTEyMzU0Mjc2NSw3OC4yODAwNzU2MDc3MzY2LDMzLjg2NDIzODA2MjM5ODA0LDMxOC45NjI5NTg1MDg5MTUyLDE2MS4zMjQ5NDgwODc4NzY2Niw3Mi45MzA4MTMyNDcyNzc5NCwxMDcuOTUzNzU3ODkwODk5NTcsMTE4LjAxODA5NzczNDMwNTIsMTY0Ljg2MjUwMzcyNjkwMDk3LDEzNy44ODQwMjg4MzY0ODYxLDMzLjczMjA0NTk4OTcwMjM4NSwyNTguODA1MDA5OTM1Mjk4NiwxMjYuNTIyMTQ1NjQ3ODEyMTUsMTQ1LjE5MTU5MDI4Mzc2MjksNzYuNDQyOTg1MDc0ODQyMDcsMjMuNjA5Mjc3NjkzMzM4MjU3LDIwOC4zOTU5Nzg2MDA1NDk1NCwxNi45NDk4MDUzNDQ3NTA1Miw0NC45MDk3MTE5MjUwOTA3NSwzMi4zMTIwMTYyMjExMDk0OSwyMTguNTY2ODE1NDE5MDE2LDQ3LjQ3NDY0MDQ1NTA0MTMyLDUwLjMzNzY2NTk0MDgzNDEzNSw0OTIuOTQ2MzE4MDcxOTUzOTUsMjk2LjY4NjI5MTk1NTA1NTIsOTEuMTI4NDQ2OTczMjQ3OTUsODguODQxMTA2MTkyOTY1ODIsMzIwLjYwMzMxNzA5NjYzNzc0LDI3LjE1Mzg0ODc3NDkwNTg5LDEwNi41MTEwNTk5NzE4NzA3MSwyMC4wMDYwNzgxOTgxNTQ4MTcsMTQ4LjAzMTk1MDg3ODAzNTUsNTM4Ljc0MzU4OTgyMDUwNDIsNTcuMTE3ODMzNTgwNTM4ODYsMTgzLjgxMzc0NDc3MDg1OTcsMTYuMDM5NDg2NTA3OTcwMjQsMTUyLjQwNTcyMDY3MzI4MjYsMTQxLjY0MDgzMzYxNzk2NzQ3LDQ5LjQxOTgwODkzODEyNjAzLDEzLjA1MDM3MTY1NDQwMzI4MgorMjgsTW9uIDIxIEZlYiAxMSwxMC43NjcwMTYxODY5MTY0MzgsNzkuNTg1MjI3OTE2OTkwNDgsNDcuNjQ2MTczNDIwNDM4MTQ2LDg4LjAxMjUyMTY0MzQ1LDQ5Mi40Njg5NjcxMTEwMTg0Niw3My40NzgyMDMzODA5NjY5NSw2MC4yNjg3MDcyMDE4OTMyMzUsOS42Mzk1MTA3OTUxMjkzOTMsMTUuMjI5MDE4MjY2MTUyMTg2LDI3NC44MDkxNjE1MzcwMTQ0NiwxNDAuMDg2MTIyODg5MzEzMjMsMjAuNTY3OTk3NzA1NzIyODM1LDUyLjQ3MDE0ODEzMTU2ODA5NSwyMi42OTgwMjkxMTM2MTYxMSwyMTMuNzg5NDQzMzc4ODI3NCwxMDguMTMyNzU5MjY0MzYwODMsNDguODg1NDQ3NDYzNzgxMjksNzIuMzU5ODg2MDA2OTYzNTksNzkuMTA0NTAzODA0NDEzMTgsMTEwLjUwMDc3NTQ1MjkxMzM5LDkyLjQxODM1MzYzMTE2MDM2LDIyLjYwOTc5MTY3MTYwNDI2MywxNzMuNDY3MDc2MTQ1Nzc0OTcsODQuODAzMDQzMDIzMjM4ODcsOTcuMzE2MTEwOTk2NTM1NzEsNTEuMjM5MDg1NjQyMTgzMTMsMTUuODI0NDgxNDUyNjE4NzY4LDEzOS42NzkzODU4OTEwNjM5NiwxMS4zNjEwMDk3NTE1MDI1NSwzMC4xMDE1NDMyNjA5MzMxMDIsMjEuNjU3NjAyNzI1ODU5NjUsMTQ2LjQ5NjY2OTY1ODE0NCwzMS44MjA1MDM5MjM0ODk0MjIsMzMuNzQ2NTg2NTAyNTM0MzIsMzMwLjQwMjM4MDQ1MTI5OCwxOTguODU4MjAyNjA4MjEyMTQsNjEuMDgxMDYzMjI2NzQ3ODUsNTkuNTQ2NjU4MDIzOTY5NDg1LDIxNC44ODg2NjU5NTU3NTc1NywxOC4yMDAxMjY1ODI5ODM5NTUsNzEuMzkyMjE3Nzg3MDkwNywxMy40MDk2MzYzOTAzMjQ3NjksOTkuMjIwMDY5OTEwMjM5NjIsMzYxLjA5ODA4NjE3MDcxOTYsMzguMjg0NTE2Njg4MjUxMTYsMTIzLjIwMzA0MjQyMjA0NTI5LDEwLjc1MDgxNjQyNTEwNzg5LDEwMi4xNTEzODU0MTk4MTMyNSw5NC45MzgyMTI3OTY1MTczOCwzMy4xMjYyNzY3NzExMzQxNCw4Ljc0NzM0MDI4MTQ2NTIxNworMjksVHVlIDIyIEZlYiAxMSw3LjIxNjc5MzMxMDgzOTIzMiw1My4zNDQ4MzE3NjcxMzkwNywzMS45MzYzNDg0NDk0NzU5NTgsNTguOTkyMjY3NzA4MDIxMzY2LDMzMC4zMjg0MjMxNjg2MDk0NSw0OS4yNTEzNjk0MDg0OTYzNiw0MC4zOTY1NjAyNjcwODMzMyw2LjQ2Mjk2OTQ3NTkwNzkxNywxMC4yMDgyODgwOTgxNDg5NTMsMTg0LjE5NTMzNjExOTU1MzEzLDkzLjg5Njc0ODA5MjAxMjI2LDEzLjc4NzI4NDUyMzc4ODY3MywzNS4xNzAwODA2MzM0NDc2NywxNS4yMTM3MDgxNjMwOTMxNjYsMTQzLjI5NTQ4MjM3NDA1MTgzLDcyLjQ3OTE0Njg2ODY0MTU1LDMyLjc2Nzg2NDU2NDIyNjYzLDQ4LjUwMTgxNjY0OTgzMDk0LDUzLjAyMTcyNjA4NDA2MjY2NCw3NC4wNjQyOTc0MDU2NjU5NCw2MS45NDQ0ODA4ODMwNzk5NiwxNS4xNTQ4MDk1MTc5NDUwMjYsMTE2LjI2ODM2NDI1NDQwMzA1LDU2Ljg0MDMyNDg5NTk1NDEzLDY1LjIyNzExNjUzNzEzNDU1LDM0LjM0NTEyNjM3MjE0Nzc0LDEwLjYwNjYwNDMxODMzMjIzNCw5My42MjE0NzMyOTMxMzYwMiw3LjYxNDk4NzY0MDU5NDg4OSwyMC4xNzYxMDUwOTg0MzE4NTQsMTQuNTE2MzI5MTAxNTM1MSw5OC4xOTA5NDEyOTg4MjA5NSwyMS4zMjgxMTc4MjQ0MTMzNTgsMjIuNjIzNzk5MjgwMDI3MDU0LDIyMS40NTU2OTQzMzM4MDIwMywxMzMuMjg3NTY2NzkwOTY0NjYsNDAuOTQxMDc2NDk3ODM1MTcsMzkuOTExNzY4NzAwNzc4NywxNDQuMDMyMDQxMzIzOTM1NTIsMTIuMTk4ODEzNDM2Nzg1OTQ2LDQ3Ljg1Mjc2OTE5MDQ4NTM2LDguOTg4MTg2NjE5NzIwMzYzLDY2LjUwMzM4MTA5NTk2NTU1LDI0Mi4wMjk1Nzk3NDgzMDUyNSwyNS42NjEwNzU5Mzg4NDY1NzIsODIuNTc4MTI3MTE0OTYyLDcuMjA1OTcwNjkxOTA4NDUzLDY4LjQ2Nzk2NzQ2MDM1Nzg0LDYzLjYzNDY1MzAyNDEzMDYzLDIyLjIwNDY2MzM5MDczNzk1LDUuODYzMTI1Nzc1NzIzNzMyNQorMzAsV2VkIDIzIEZlYiAxMSw0LjgzNzE5Mjk4OTkyOTYyOSwzNS43NTYyNzQxMzQ1MDcyMTUsMjEuNDA2MzQ0OTc5MTkxNjM3LDM5LjU0MDg0Njg4MjE1OTUyLDIyMS41NzAzOTUwNDc5MDY4NiwzMy4wMTI0OTI2NjMyNDQxMywyNy4wNzY3NzU4MTg2ODk1Miw0LjMzMzE4MDAxNTYyMjkzNCw2Ljg0MjgwMTI5NDUyNjEyMiwxMjMuNDYwMDA1OTA0MzIzMjIsNjIuOTM3MDI3OTQ2NTMyODY1LDkuMjQxOTg4NDUyNDUwNjYsMjMuNTc0MDYzOTY1NDkwNDQ2LDEwLjE5NzIyNzQyOTIyODY5Myw5Ni4wNDU5MzIxNzAyMTI1MSw0OC41ODEyNzM2NjU5Mzk1MiwyMS45NjQyNjU4NjA5NTI1LDMyLjUxMDA4OTA2NjMzNTU3LDM1LjUzOTExMTI4MTgzMjI0LDQ5LjY0MjM4NDY0MjcwMTMzLDQxLjUxOTAyMzg3NTAyNjMwNiwxMC4xNTc5MTIwMzQ0ODM0OTUsNzcuOTMwMjcxODU1MDM3NTUsMzguMDk3OTc0OTkwMTA2OTUsNDMuNzE5MTU1NzgyODQ2Nzg0LDIzLjAyMTI0ODg5NTA5MzE2Niw3LjEwOTI0MjY5MTkxNDI0Niw2Mi43NTA3MzE5NjU0MjIxNzYsNS4xMDQxMjc2Mjk3MjQ5MTMsMTMuNTIzNDAyNjIyODY4MjA4LDkuNzI5Nzg2ODMzOTI0NzUsNjUuODEzNTM4MDI2MDA1MjMsMTQuMjk1NDU5NDczMDM2NDksMTUuMTY3MDE2NjMwMjQ1MSwxNDguNDMzMDczMTgwNzAzNCw4OS4zMzc5MjY5ODU0ODA1MiwyNy40NDE3NjEwMDgyMTMyNzcsMjYuNzUxMjg4MzIzMzc5MjY0LDk2LjUzOTQ1MjAyOTgyNzg2LDguMTc2Mzc3NTQ3MDgxNTA2LDMyLjA3NDc1MjMwOTIwNDk3LDYuMDI0NTg1ODc1NzcyMTYyLDQ0LjU3NDY2MTQ2MjUzMDc4NCwxNjIuMjIyODAwNjc1MDkyNywxNy4xOTk5MzQ5MjI3MTEwMDUsNTUuMzQ4ODcxNTM1OTQ1NjQsNC44Mjk5NjA2OTEwNDkwNDIsNDUuODkxMzQ1NTQ1MDIyNCw0Mi42NTI2ODM0NDM3MzU1NywxNC44ODM4NjY0ODQ1ODE1MzUsMy45Mjk5MDg1ODE4MTUxMzQKKzMxLFRodSAyNCBGZWIgMTEsMy4yNDIyMjI0MzU2Njc2MTMsMjMuOTY2OTE3OTc0NDU1NDYsMTQuMzQ4Mjc5MDA3ODk4MTc0LDI2LjUwMzEyNTI1MzE4ODY5LDE0OC42MTk2NTE0ODg0MjY4NSwyMi4xMjc4MTU4NTAyODkyMTMsMTguMTQ4ODY4ODY2NzMwNTA2LDIuOTA1MjE5NDMxMTIxMTY5Niw0LjU4Njg1NDI0MTQ4OTY4OCw4Mi43NTExODAyOTE3NzUzNCw0Mi4xODUzOTc5MDU1NzM0MSw2LjE5NTE1MzQxNzUyODk4LDE1LjgwMTQwMDE0NDc5MjYwNyw2LjgzNDg1MzY3NzQxNjcxMiw2NC4zNzYyNTE3MTM1MDY5NSwzMi41NjMwMjYwNTQ5NTQ3MDUsMTQuNzIyNjI1MDA4NTM0NjM5LDIxLjc5MTA1ODkzNjk4MTYxNywyMy44MjA5NjMwMzUxNjExNjcsMzMuMjczMzQ4NTEwOTYxNSwyNy44Mjg2MjY4NTcwMTczLDYuODA4NjA5OTgzNzUzODM1LDUyLjIzMzcxODQ3NDM5ODg2LDI1LjUzNTY4MTc1MzM2ODU0NywyOS4zMDMyMzA3NDM5ODMzMiwxNS40MzA5NDk3MDk2ODk0NjUsNC43NjUwODIyODg2OTIyMzYsNDIuMDU5MzI0MjQ4MzM1MjcsMy40MjExNjQwNTU3NzgyNjIsOS4wNjQzMDg5ODk1OTgyNjUsNi41MjE1MzY3MDExODY1NzcsNDQuMTEyMjQ4NjAwNjAzOTQsOS41ODE3Mjc0ODMyOTMyMiwxMC4xNjc5NTc5OTIxMzE0MzgsOTkuNDg4OTA0NTkzNzU1NzYsNTkuODgwMDU2NjA4NjkzMTk1LDE4LjM5MzUxNTcyNDg4MjA1LDE3LjkzMDM0MjExMDU2NDk4LDY0LjcwNjkwODMzNTgyMjksNS40ODAzMDE0Nzg3NDQyMzUsMjEuNDk5MDY1NDcwOTYyOTc1LDQuMDM4MTQ5MTU5MTE2Mjg3LDI5Ljg3NjY5MjA4MTU3NTk4NSwxMDguNzMxNTM3ODE2NTcxMjYsMTEuNTI4NjY0MjczMTg2NTI1LDM3LjA5ODE4NDYxMzg2MDYsMy4yMzczODgwNTgyOTkyNjk2LDMwLjc1OTE0OTg1MTc0NzA0LDI4LjU4OTAwODE4NzY0NDIzMiw5Ljk3NjcwOTgyNzA0ODQzNiwyLjYzNDEyMTA3MjIwOTI1CiszMixGcmkgMjUgRmViIDExLDIuMTczMTYzNjk0ODc4NTI0MiwxNi4wNjQ2ODIzODkxMzY5MSw5LjYxNzM4Nzk5MTI1NTYzLDE3Ljc2NDMxNDYwNjA5ODc1LDk5LjY4NzIxNjY2NTY2MzMzLDE0LjgzMTk3NTUzODI1NDk3MSwxMi4xNjQ3MjMwODE4NzM4MTEsMS45NDc4MTk4ODQxNTUzMzY1LDMuMDc0NjUxODc1NjQ1ODQyNyw1NS40NjU0MjQxMzAxNzA2OSwyOC4yNzYwMjE3NzUzMTQ1MDQsNC4xNTI3Nzc1NzcyMTc1NDMsMTAuNTkxNDgxMzEwNzczMDA0LDQuNTgxMTcwMjE5MzQ4MzUxLDQzLjE0OTE4ODEyNjkyODA4LDIxLjgyNjMyNjc3NDExNzUxNSw5Ljg2ODU2MDY4Mjg5Nzc0OCwxNC42MDYyNDMzOTkzNjIwNCwxNS45NjY1ODc5Mzg2MTQ3NywyMi4zMDE4MzEzNjgwMTQ4MiwxOC42NTI0Nzg0MjA5MTg2ODcsNC41NjM2NTE5MDUzODg2MTksMzUuMDEwMjk5MDQxMDUyMywxNy4xMTU2NDM5OTY1OTIwODcsMTkuNjQwODA5OTMzNDI3MTU3LDEwLjM0MzIzNjI3MzE1NjA3NywzLjE5Mzg3MjQwMDU1MzI3NSwyOC4xOTA3MDYxMzU1ODY2MjMsMi4yOTMxMTc2MDA3Mzk4NjM3LDYuMDc1NTIwNjUzMjI0OTEsNC4zNzExNTk1Mjc5OTA4MjgsMjkuNTY2NzMwMDc4MzYxNjcsNi40MjIyODU2NjcwNjUwNDcsNi44MTY1NzYzMTMxNDA3NzUsNjYuNjgzNTU3NTE1MTY5MTMsNDAuMTM1NDk1OTQ1ODk3NTIsMTIuMzI4NzA4MDQ3MTc1OTE5LDEyLjAxODAxMDkzNTQwOTI2OSw0My4zNzA3MTQ1MzAwMjIyNywzLjY3MzIzMDA1MDY0MDU4NjYsMTQuNDEwMzk1MDgxOTAyOTIsMi43MDY2ODM5ODMxODkxOTIyLDIwLjAyNTIxMDg4NjAxMTAzLDcyLjg3ODQ4NzcxMzg1OTQ3LDcuNzI3MzY0OTc5OTUxODUyLDI0Ljg2NTQ3MDk5ODI4NDI3MywyLjE2OTkzMTI5NzUxMDc5MSwyMC42MTY2NDc0MjIwNjQzNDcsMTkuMTYyNDg2ODA5NzI3NTQ3LDYuNjg3NDI0OTMzNTMwODM2LDEuNzY1NTg2NzY1NjAyNzcwNgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTSVJTdGF0ZXNPbmx5X1JLX1JlZmVyZW5jZS9UZXN0U0lSL2h1bWFuL1BvcHVsYXRpb24gQ291bnRfMC5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNJUlN0YXRlc09ubHlfUktfUmVmZXJlbmNlL1Rlc3RTSVIvaHVtYW4vUG9wdWxhdGlvbiBDb3VudF8wLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZTIxNjAxCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTSVJTdGF0ZXNPbmx5X1JLX1JlZmVyZW5jZS9UZXN0U0lSL2h1bWFuL1BvcHVsYXRpb24gQ291bnRfMC5jc3YKQEAgLTAsMCArMSwzMyBAQAoraXRlcmF0aW9uLHRpbWUsc3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vbm9kZS90cmFuc3BvcnQvcGlwZS9VU0EKKzEsVHVlIDI1IEphbiAxMSw5NDMyMTEuMAorMixXZWQgMjYgSmFuIDExLDk0MzIxMC45OTk5OTk5OTk3CiszLFRodSAyNyBKYW4gMTEsOTQzMjEwLjk5OTk5OTk5OTUKKzQsRnJpIDI4IEphbiAxMSw5NDMyMTAuOTk5OTk5OTk5NQorNSxTYXQgMjkgSmFuIDExLDk0MzIxMC45OTk5OTk5OTk4Cis2LFN1biAzMCBKYW4gMTEsOTQzMjEwLjk5OTk5OTk5OTUKKzcsTW9uIDMxIEphbiAxMSw5NDMyMTAuOTk5OTk5OTk5OAorOCxUdWUgMSBGZWIgMTEsOTQzMjEwLjk5OTk5OTk5OTkKKzksV2VkIDIgRmViIDExLDk0MzIxMS4wMDAwMDAwMDAyCisxMCxUaHUgMyBGZWIgMTEsOTQzMjExLjAwMDAwMDAwMDIKKzExLEZyaSA0IEZlYiAxMSw5NDMyMTEuMDAwMDAwMDAwMgorMTIsU2F0IDUgRmViIDExLDk0MzIxMS4wMDAwMDAwMDAyCisxMyxTdW4gNiBGZWIgMTEsOTQzMjExLjAwMDAwMDAwMDYKKzE0LE1vbiA3IEZlYiAxMSw5NDMyMTEuMDAwMDAwMDAwOQorMTUsVHVlIDggRmViIDExLDk0MzIxMS4wMDAwMDAwMDE0CisxNixXZWQgOSBGZWIgMTEsOTQzMjExLjAwMDAwMDAwMDkKKzE3LFRodSAxMCBGZWIgMTEsOTQzMjExLjAwMDAwMDAwMQorMTgsRnJpIDExIEZlYiAxMSw5NDMyMTEuMDAwMDAwMDAxMgorMTksU2F0IDEyIEZlYiAxMSw5NDMyMTEuMDAwMDAwMDAwOAorMjAsU3VuIDEzIEZlYiAxMSw5NDMyMTEuMDAwMDAwMDAwMworMjEsTW9uIDE0IEZlYiAxMSw5NDMyMTEuMDAwMDAwMDAwMgorMjIsVHVlIDE1IEZlYiAxMSw5NDMyMTEuMAorMjMsV2VkIDE2IEZlYiAxMSw5NDMyMTEuMDAwMDAwMDAwMgorMjQsVGh1IDE3IEZlYiAxMSw5NDMyMTEuMDAwMDAwMDAwNgorMjUsRnJpIDE4IEZlYiAxMSw5NDMyMTEuMDAwMDAwMDAwMQorMjYsU2F0IDE5IEZlYiAxMSw5NDMyMTEuMDAwMDAwMDAwMQorMjcsU3VuIDIwIEZlYiAxMSw5NDMyMTEuMDAwMDAwMDAwMgorMjgsTW9uIDIxIEZlYiAxMSw5NDMyMTEuMDAwMDAwMDAwNQorMjksVHVlIDIyIEZlYiAxMSw5NDMyMTEuMDAwMDAwMDAwMQorMzAsV2VkIDIzIEZlYiAxMSw5NDMyMTEuMDAwMDAwMDAwMgorMzEsVGh1IDI0IEZlYiAxMSw5NDMyMTEuMDAwMDAwMDAwNworMzIsRnJpIDI1IEZlYiAxMSw5NDMyMTEuMDAwMDAwMDAxMwpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTSVJTdGF0ZXNPbmx5X1JLX1JlZmVyZW5jZS9UZXN0U0lSL2h1bWFuL1BvcHVsYXRpb24gQ291bnRfMS5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNJUlN0YXRlc09ubHlfUktfUmVmZXJlbmNlL1Rlc3RTSVIvaHVtYW4vUG9wdWxhdGlvbiBDb3VudF8xLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42M2ViNjViCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTSVJTdGF0ZXNPbmx5X1JLX1JlZmVyZW5jZS9UZXN0U0lSL2h1bWFuL1BvcHVsYXRpb24gQ291bnRfMS5jc3YKQEAgLTAsMCArMSwzMyBAQAoraXRlcmF0aW9uLHRpbWUsVVMtQUssVVMtQUwsVVMtQVIsVVMtQVosVVMtQ0EsVVMtQ08sVVMtQ1QsVVMtREMsVVMtREUsVVMtRkwsVVMtR0EsVVMtSEksVVMtSUEsVVMtSUQsVVMtSUwsVVMtSU4sVVMtS1MsVVMtS1ksVVMtTEEsVVMtTUEsVVMtTUQsVVMtTUUsVVMtTUksVVMtTU4sVVMtTU8sVVMtTVMsVVMtTVQsVVMtTkMsVVMtTkQsVVMtTkUsVVMtTkgsVVMtTkosVVMtTk0sVVMtTlYsVVMtTlksVVMtT0gsVVMtT0ssVVMtT1IsVVMtUEEsVVMtUkksVVMtU0MsVVMtU0QsVVMtVE4sVVMtVFgsVVMtVVQsVVMtVkEsVVMtVlQsVVMtV0EsVVMtV0ksVVMtV1YsVVMtV1kKKzEsVHVlIDI1IEphbiAxMSw2MjY5MzIuMCw0NDQ3MTAwLjAsMjY3MzQwMC4wLDUxMzA2MzIuMCwzLjM4NzE2NDhFNyw0MzAxMjYxLjAsMzQwNTU2NS4wLDU3MjA1OS4wLDc4MzYwMC4wLDEuNTk4MjM3OEU3LDgxODY0NTMuMCwxMjExNTM3LjAsMjkyNjMyNC4wLDEyOTM5NTMuMCwxLjI0MTkyOTNFNyw2MDgwNDg1LjAsMjY4ODQxOC4wLDQwNDE3NjkuMCw0NDY4OTc2LjAsNjM0OTA5Ny4wLDUyOTY0ODYuMCwxMjc0OTIzLjAsOTkzODQ0NC4wLDQ5MTk0NzkuMCw1NTk1MjExLjAsMjg0NDY1OC4wLDkwMjE5NS4wLDgwNDkzMTMuMCw2NDIyMDAuMCwxNzExMjYzLjAsMTIzNTc4Ni4wLDg0MTQzNTAuMCwxODE5MDQ2LjAsMTk5ODI1Ny4wLDEuODk3NjQ1N0U3LDEuMTM1MzE0RTcsMzQ1MDY1NC4wLDM0MjEzOTkuMCwxLjIyODEwNTRFNywxMDQ4MzE5LjAsNDAxMjAxMi4wLDc1NDg0NC4wLDU2ODkyODMuMCwyLjA4NTE4MkU3LDIyMzMxNjkuMCw3MDc4NTE2LjAsNjA4ODI3LjAsNTg5NDEyMS4wLDUzNjM2NzUuMCwxODA4MzQ0LjAsNDkzNzgyLjAKKzIsV2VkIDI2IEphbiAxMSw2MjY5MzEuOTk5OTk5OTk5OCw0NDQ3MTAwLjAwMDAwMDAwMiwyNjczMzk5Ljk5OTk5OTk5OTUsNTEzMDYzMi4wLDMuMzg3MTY0OEU3LDQzMDEyNjAuOTk5OTk5OTk4LDM0MDU1NjUuMDAwMDAwMDAxLDU3MjA1OS4wMDAwMDAwMDAxLDc4MzYwMC4wLDEuNTk4MjM3ODAwMDAwMDAwMkU3LDgxODY0NTMuMDAwMDAwMDAxLDEyMTE1MzcuMDAwMDAwMDAwMiwyOTI2MzI0LjAwMDAwMDAwMiwxMjkzOTUzLjAwMDAwMDAwMDIsMS4yNDE5MjkzRTcsNjA4MDQ4NS4wMDAwMDAwMDEsMjY4ODQxOC4wLDQwNDE3NjkuMCw0NDY4OTc2LjAsNjM0OTA5Ni45OTk5OTk5OTksNTI5NjQ4Ni4wMDAwMDAwMDEsMTI3NDkyMi45OTk5OTk5OTk1LDk5Mzg0NDQuMDAwMDAwMDAyLDQ5MTk0NzkuMCw1NTk1MjEwLjk5OTk5OTk5OSwyODQ0NjU4LjAwMDAwMDAwMDUsOTAyMTk0Ljk5OTk5OTk5OTksODA0OTMxMy4wLDY0MjE5OS45OTk5OTk5OTk5LDE3MTEyNjMuMCwxMjM1Nzg2LjAsODQxNDM1MC4wMDAwMDAwMDIsMTgxOTA0NS45OTk5OTk5OTk4LDE5OTgyNTcuMCwxLjg5NzY0NTdFNywxLjEzNTMxNEU3LDM0NTA2NTQuMCwzNDIxMzk5LjAwMDAwMDAwMDUsMS4yMjgxMDUzOTk5OTk5OTk4RTcsMTA0ODMxOC45OTk5OTk5OTk5LDQwMTIwMTEuOTk5OTk5OTk5LDc1NDg0NC4wMDAwMDAwMDAyLDU2ODkyODMuMCwyLjA4NTE4MTk5OTk5OTk5OTNFNywyMjMzMTY4Ljk5OTk5OTk5OSw3MDc4NTE1Ljk5OTk5OTk5OSw2MDg4MjcuMCw1ODk0MTIwLjk5OTk5OTk5OSw1MzYzNjc0Ljk5OTk5OTk5OSwxODA4MzQ0LjAsNDkzNzgxLjk5OTk5OTk5OTkKKzMsVGh1IDI3IEphbiAxMSw2MjY5MzEuOTk5OTk5OTk5OCw0NDQ3MTAwLjAwMDAwMDAwMywyNjczNDAwLjAsNTEzMDYzMS45OTk5OTk5OTgsMy4zODcxNjQ4RTcsNDMwMTI2MC45OTk5OTk5OTcsMzQwNTU2NS4wMDAwMDAwMDEsNTcyMDU5LjAwMDAwMDAwMDIsNzgzNjAwLjAwMDAwMDAwMDIsMS41OTgyMzc4RTcsODE4NjQ1My4wMDAwMDAwMDIsMTIxMTUzNi45OTk5OTk5OTk1LDI5MjYzMjQuMDAwMDAwMDAyLDEyOTM5NTMuMDAwMDAwMDAwMiwxLjI0MTkyOTI5OTk5OTk5OThFNyw2MDgwNDg1LjAwMDAwMDAwMiwyNjg4NDE4LjAsNDA0MTc2OS4wLDQ0Njg5NzYuMDAwMDAwMDAyLDYzNDkwOTYuOTk5OTk5OTk4LDUyOTY0ODYuMCwxMjc0OTIyLjk5OTk5OTk5OTUsOTkzODQ0NC4wMDAwMDAwMDIsNDkxOTQ3OC45OTk5OTk5OTksNTU5NTIxMC45OTk5OTk5OTcsMjg0NDY1OC4wMDAwMDAwMDA1LDkwMjE5NC45OTk5OTk5OTk4LDgwNDkzMTMuMCw2NDIyMDAuMCwxNzExMjYzLjAwMDAwMDAwMSwxMjM1Nzg2LjAwMDAwMDAwMDIsODQxNDM1MC4wMDAwMDAwMDQsMTgxOTA0Ni4wMDAwMDAwMDA1LDE5OTgyNTcuMCwxLjg5NzY0NTdFNywxLjEzNTMxMzk5OTk5OTk5OTZFNywzNDUwNjUzLjk5OTk5OTk5OSwzNDIxMzk4Ljk5OTk5OTk5OTUsMS4yMjgxMDUzOTk5OTk5OTk0RTcsMTA0ODMxOC45OTk5OTk5OTk5LDQwMTIwMTEuOTk5OTk5OTk5NSw3NTQ4NDQuMDAwMDAwMDAwMyw1Njg5MjgyLjk5OTk5OTk5NywyLjA4NTE4MTk5OTk5OTk5OTNFNywyMjMzMTY4Ljk5OTk5OTk5ODYsNzA3ODUxNS45OTk5OTk5OTcsNjA4ODI3LjAsNTg5NDEyMC45OTk5OTk5OTgsNTM2MzY3NS4wMDAwMDAwMDEsMTgwODM0NC4wMDAwMDAwMDA3LDQ5Mzc4MS45OTk5OTk5OTk3NworNCxGcmkgMjggSmFuIDExLDYyNjkzMS45OTk5OTk5OTk4LDQ0NDcxMDAuMDAwMDAwMDA0LDI2NzM0MDAuMCw1MTMwNjMxLjk5OTk5OTk5OCwzLjM4NzE2NDc5OTk5OTk5OUU3LDQzMDEyNjAuOTk5OTk5OTk3LDM0MDU1NjUuMCw1NzIwNTkuMDAwMDAwMDAwMiw3ODM2MDAuMDAwMDAwMDAwMiwxLjU5ODIzNzhFNyw4MTg2NDUzLjAwMDAwMDAwMiwxMjExNTM2Ljk5OTk5OTk5OTUsMjkyNjMyNC4wMDAwMDAwMDIsMTI5Mzk1My4wMDAwMDAwMDA1LDEuMjQxOTI5Mjk5OTk5OTk5OEU3LDYwODA0ODUuMDAwMDAwMDAzLDI2ODg0MTguMCw0MDQxNzY4Ljk5OTk5OTk5OSw0NDY4OTc2LjAwMDAwMDAwMiw2MzQ5MDk2Ljk5OTk5OTk5OCw1Mjk2NDg2LjAsMTI3NDkyMi45OTk5OTk5OTk1LDk5Mzg0NDQuMDAwMDAwMDA0LDQ5MTk0NzkuMCw1NTk1MjEwLjk5OTk5OTk5NiwyODQ0NjU4LjAwMDAwMDAwMDUsOTAyMTk1LjAsODA0OTMxMi45OTk5OTk5OTgsNjQyMjAwLjAwMDAwMDAwMDEsMTcxMTI2My4wMDAwMDAwMDEyLDEyMzU3ODYuMDAwMDAwMDAwNSw4NDE0MzUwLjAwMDAwMDAwNiwxODE5MDQ2LjAsMTk5ODI1Ny4wLDEuODk3NjQ1N0U3LDEuMTM1MzEzOTk5OTk5OTk5NkU3LDM0NTA2NTMuOTk5OTk5OTk5LDM0MjEzOTkuMCwxLjIyODEwNTM5OTk5OTk5OTRFNywxMDQ4MzE5LjAsNDAxMjAxMS45OTk5OTk5OTg2LDc1NDg0NC4wMDAwMDAwMDA1LDU2ODkyODIuOTk5OTk5OTk3LDIuMDg1MTgxOTk5OTk5OTk5NkU3LDIyMzMxNjguOTk5OTk5OTk5LDcwNzg1MTUuOTk5OTk5OTk2LDYwODgyNy4wLDU4OTQxMjAuOTk5OTk5OTk4LDUzNjM2NzUuMDAwMDAwMDAyLDE4MDgzNDQuMDAwMDAwMDAwNSw0OTM3ODEuOTk5OTk5OTk5NzcKKzUsU2F0IDI5IEphbiAxMSw2MjY5MzEuOTk5OTk5OTk5OSw0NDQ3MTAwLjAwMDAwMDAwNiwyNjczNDAwLjAwMDAwMDAwMDUsNTEzMDYzMS45OTk5OTk5OTksMy4zODcxNjQ3OTk5OTk5OTlFNyw0MzAxMjYwLjk5OTk5OTk5NywzNDA1NTY1LjAwMDAwMDAwMSw1NzIwNTkuMDAwMDAwMDAwMiw3ODM2MDAuMDAwMDAwMDAwMiwxLjU5ODIzNzhFNyw4MTg2NDUzLjAwMDAwMDAwMywxMjExNTM3LjAsMjkyNjMyNC4wMDAwMDAwMDIsMTI5Mzk1My4wMDAwMDAwMDA1LDEuMjQxOTI5M0U3LDYwODA0ODUuMDAwMDAwMDAyLDI2ODg0MTguMCw0MDQxNzY4Ljk5OTk5OTk5OSw0NDY4OTc2LjAwMDAwMDAwMyw2MzQ5MDk2Ljk5OTk5OTk5OCw1Mjk2NDg2LjAsMTI3NDkyMi45OTk5OTk5OTk1LDk5Mzg0NDQuMCw0OTE5NDc4Ljk5OTk5OTk5OCw1NTk1MjEwLjk5OTk5OTk5NSwyODQ0NjU4LjAsOTAyMTk1LjAsODA0OTMxMi45OTk5OTk5OTgsNjQyMjAwLjAwMDAwMDAwMDEsMTcxMTI2My4wMDAwMDAwMDE0LDEyMzU3ODYuMDAwMDAwMDAwNSw4NDE0MzUwLjAwMDAwMDAwNywxODE5MDQ2LjAsMTk5ODI1Ny4wLDEuODk3NjQ1N0U3LDEuMTM1MzEzOTk5OTk5OTk5NkU3LDM0NTA2NTMuOTk5OTk5OTk5LDM0MjEzOTkuMCwxLjIyODEwNTM5OTk5OTk5OTZFNywxMDQ4MzE5LjAwMDAwMDAwMDIsNDAxMjAxMS45OTk5OTk5OTc3LDc1NDg0NC4wMDAwMDAwMDAyLDU2ODkyODIuOTk5OTk5OTk4LDIuMDg1MTgyRTcsMjIzMzE2OC45OTk5OTk5OTksNzA3ODUxNS45OTk5OTk5OTcsNjA4ODI3LjAsNTg5NDEyMC45OTk5OTk5OTgsNTM2MzY3NS4wMDAwMDAwMDEsMTgwODM0NC4wMDAwMDAwMDA1LDQ5Mzc4MS45OTk5OTk5OTk2NQorNixTdW4gMzAgSmFuIDExLDYyNjkzMS45OTk5OTk5OTk4LDQ0NDcxMDAuMDAwMDAwMDA2LDI2NzM0MDAuMDAwMDAwMDAwNSw1MTMwNjMxLjk5OTk5OTk5OCwzLjM4NzE2NDc5OTk5OTk5OUU3LDQzMDEyNjAuOTk5OTk5OTk3LDM0MDU1NjUuMCw1NzIwNTkuMDAwMDAwMDAwMiw3ODM2MDAuMCwxLjU5ODIzNzhFNyw4MTg2NDUzLjAwMDAwMDAwNCwxMjExNTM3LjAsMjkyNjMyNC4wMDAwMDAwMDEsMTI5Mzk1My4wMDAwMDAwMDA1LDEuMjQxOTI5M0U3LDYwODA0ODUuMDAwMDAwMDAyLDI2ODg0MTcuOTk5OTk5OTk5NSw0MDQxNzY4Ljk5OTk5OTk5ODYsNDQ2ODk3Ni4wMDAwMDAwMDMsNjM0OTA5Ni45OTk5OTk5OTcsNTI5NjQ4Ni4wMDAwMDAwMDEsMTI3NDkyMi45OTk5OTk5OTk4LDk5Mzg0NDQuMCw0OTE5NDc4Ljk5OTk5OTk5OCw1NTk1MjEwLjk5OTk5OTk5NiwyODQ0NjU4LjAsOTAyMTk1LjAsODA0OTMxMi45OTk5OTk5OTgsNjQyMjAwLjAsMTcxMTI2My4wMDAwMDAwMDE0LDEyMzU3ODYuMDAwMDAwMDAwNSw4NDE0MzUwLjAwMDAwMDAwNywxODE5MDQ2LjAsMTk5ODI1Ny4wLDEuODk3NjQ1N0U3LDEuMTM1MzEzOTk5OTk5OTk5NkU3LDM0NTA2NTMuOTk5OTk5OTk4NiwzNDIxMzk4Ljk5OTk5OTk5OSwxLjIyODEwNTM5OTk5OTk5OTZFNywxMDQ4MzE5LjAwMDAwMDAwMDUsNDAxMjAxMS45OTk5OTk5OTg2LDc1NDg0NC4wMDAwMDAwMDAyLDU2ODkyODIuOTk5OTk5OTk5LDIuMDg1MTgyRTcsMjIzMzE2OC45OTk5OTk5OTksNzA3ODUxNS45OTk5OTk5OTcsNjA4ODI3LjAsNTg5NDEyMC45OTk5OTk5OTcsNTM2MzY3NS4wLDE4MDgzNDQuMDAwMDAwMDAwMiw0OTM3ODEuOTk5OTk5OTk5NjUKKzcsTW9uIDMxIEphbiAxMSw2MjY5MzEuOTk5OTk5OTk5Nyw0NDQ3MTAwLjAwMDAwMDAwNSwyNjczNDAwLjAwMDAwMDAwMDUsNTEzMDYzMS45OTk5OTk5OTksMy4zODcxNjQ3OTk5OTk5OTlFNyw0MzAxMjYwLjk5OTk5OTk5NywzNDA1NTY1LjAsNTcyMDU5LjAwMDAwMDAwMDIsNzgzNjAwLjAwMDAwMDAwMDEsMS41OTgyMzc3OTk5OTk5OTk4RTcsODE4NjQ1My4wMDAwMDAwMDMsMTIxMTUzNy4wLDI5MjYzMjQuMDAwMDAwMDAwNSwxMjkzOTUzLjAwMDAwMDAwMDUsMS4yNDE5MjkyOTk5OTk5OTk4RTcsNjA4MDQ4NS4wMDAwMDAwMDIsMjY4ODQxNy45OTk5OTk5OTk1LDQwNDE3NjguOTk5OTk5OTk4Niw0NDY4OTc2LjAwMDAwMDAwMyw2MzQ5MDk2Ljk5OTk5OTk5Nyw1Mjk2NDg2LjAsMTI3NDkyMi45OTk5OTk5OTk4LDk5Mzg0NDMuOTk5OTk5OTk4LDQ5MTk0NzguOTk5OTk5OTk4LDU1OTUyMTAuOTk5OTk5OTk1LDI4NDQ2NTcuOTk5OTk5OTk5NSw5MDIxOTUuMCw4MDQ5MzEyLjk5OTk5OTk5OCw2NDIyMDAuMCwxNzExMjYzLjAwMDAwMDAwMTQsMTIzNTc4Ni4wMDAwMDAwMDAyLDg0MTQzNTAuMDAwMDAwMDEsMTgxOTA0NS45OTk5OTk5OTk4LDE5OTgyNTcuMCwxLjg5NzY0NTdFNywxLjEzNTMxMzk5OTk5OTk5OTZFNywzNDUwNjUzLjk5OTk5OTk5OCwzNDIxMzk4Ljk5OTk5OTk5OSwxLjIyODEwNTM5OTk5OTk5OTZFNywxMDQ4MzE5LjAwMDAwMDAwMDMsNDAxMjAxMS45OTk5OTk5OTksNzU0ODQ0LjAwMDAwMDAwMDIsNTY4OTI4Mi45OTk5OTk5OTgsMi4wODUxODJFNywyMjMzMTY4Ljk5OTk5OTk5OTUsNzA3ODUxNS45OTk5OTk5OTcsNjA4ODI3LjAsNTg5NDEyMC45OTk5OTk5OTYsNTM2MzY3NC45OTk5OTk5OTksMTgwODM0NC4wMDAwMDAwMDAyLDQ5Mzc4MS45OTk5OTk5OTk2NQorOCxUdWUgMSBGZWIgMTEsNjI2OTMxLjk5OTk5OTk5OTgsNDQ0NzEwMC4wMDAwMDAwMDUsMjY3MzQwMC4wMDAwMDAwMDA1LDUxMzA2MzEuOTk5OTk5OTk5LDMuMzg3MTY0Nzk5OTk5OTk4NUU3LDQzMDEyNjAuOTk5OTk5OTk3LDM0MDU1NjUuMDAwMDAwMDAwNSw1NzIwNTkuMDAwMDAwMDAwMSw3ODM2MDAuMDAwMDAwMDAwMSwxLjU5ODIzNzc5OTk5OTk5OTZFNyw4MTg2NDUzLjAwMDAwMDAwMywxMjExNTM2Ljk5OTk5OTk5OTgsMjkyNjMyNC4wMDAwMDAwMDA1LDEyOTM5NTMuMDAwMDAwMDAwMiwxLjI0MTkyOTNFNyw2MDgwNDg1LjAwMDAwMDAwMiwyNjg4NDE4LjAsNDA0MTc2OC45OTk5OTk5OTg2LDQ0Njg5NzYuMDAwMDAwMDAyLDYzNDkwOTYuOTk5OTk5OTk4LDUyOTY0ODYuMCwxMjc0OTIyLjk5OTk5OTk5OTUsOTkzODQ0NC4wLDQ5MTk0NzguOTk5OTk5OTk5LDU1OTUyMTAuOTk5OTk5OTk1LDI4NDQ2NTcuOTk5OTk5OTk5NSw5MDIxOTQuOTk5OTk5OTk5OSw4MDQ5MzEyLjk5OTk5OTk5OCw2NDIyMDAuMCwxNzExMjYzLjAwMDAwMDAwMTYsMTIzNTc4Ni4wMDAwMDAwMDA1LDg0MTQzNTAuMDAwMDAwMDEsMTgxOTA0Ni4wLDE5OTgyNTcuMCwxLjg5NzY0NTdFNywxLjEzNTMxMzk5OTk5OTk5OTRFNywzNDUwNjUzLjk5OTk5OTk5OCwzNDIxMzk4Ljk5OTk5OTk5ODYsMS4yMjgxMDUzOTk5OTk5OTkzRTcsMTA0ODMxOS4wMDAwMDAwMDAzLDQwMTIwMTEuOTk5OTk5OTk4Niw3NTQ4NDQuMDAwMDAwMDAwMSw1Njg5MjgyLjk5OTk5OTk5OCwyLjA4NTE4MkU3LDIyMzMxNjguOTk5OTk5OTk5NSw3MDc4NTE1Ljk5OTk5OTk5Nyw2MDg4MjcuMCw1ODk0MTIwLjk5OTk5OTk5Niw1MzYzNjc1LjAsMTgwODM0NC4wMDAwMDAwMDA1LDQ5Mzc4MS45OTk5OTk5OTk3Cis5LFdlZCAyIEZlYiAxMSw2MjY5MzEuOTk5OTk5OTk5OSw0NDQ3MTAwLjAwMDAwMDAwNSwyNjczNDAwLjAwMDAwMDAwMSw1MTMwNjMxLjk5OTk5OTk5OSwzLjM4NzE2NDc5OTk5OTk5ODVFNyw0MzAxMjYwLjk5OTk5OTk5OCwzNDA1NTY1LjAwMDAwMDAwMDUsNTcyMDU5LjAwMDAwMDAwMDIsNzgzNjAwLjAwMDAwMDAwMDIsMS41OTgyMzc3OTk5OTk5OTk2RTcsODE4NjQ1My4wMDAwMDAwMDMsMTIxMTUzNi45OTk5OTk5OTk4LDI5MjYzMjQuMDAwMDAwMDAwNSwxMjkzOTUzLjAwMDAwMDAwMDIsMS4yNDE5MjkzMDAwMDAwMDAyRTcsNjA4MDQ4NS4wMDAwMDAwMDIsMjY4ODQxNy45OTk5OTk5OTk1LDQwNDE3NjguOTk5OTk5OTk5LDQ0Njg5NzYuMDAwMDAwMDAyLDYzNDkwOTYuOTk5OTk5OTk3LDUyOTY0ODYuMCwxMjc0OTIyLjk5OTk5OTk5OTUsOTkzODQ0NC4wLDQ5MTk0NzguOTk5OTk5OTk4LDU1OTUyMTAuOTk5OTk5OTk1LDI4NDQ2NTcuOTk5OTk5OTk5LDkwMjE5NC45OTk5OTk5OTk5LDgwNDkzMTIuOTk5OTk5OTk3LDY0MjIwMC4wLDE3MTEyNjMuMDAwMDAwMDAxNCwxMjM1Nzg2LjAwMDAwMDAwMDIsODQxNDM1MC4wMDAwMDAwMSwxODE5MDQ2LjAwMDAwMDAwMDIsMTk5ODI1Ni45OTk5OTk5OTk4LDEuODk3NjQ1N0U3LDEuMTM1MzEzOTk5OTk5OTk5NEU3LDM0NTA2NTMuOTk5OTk5OTk4LDM0MjEzOTguOTk5OTk5OTk4NiwxLjIyODEwNTM5OTk5OTk5OTNFNywxMDQ4MzE5LjAwMDAwMDAwMDMsNDAxMjAxMS45OTk5OTk5OTksNzU0ODQ0LjAwMDAwMDAwMDEsNTY4OTI4Mi45OTk5OTk5OTgsMi4wODUxODIwMDAwMDAwMDA0RTcsMjIzMzE2OS4wLDcwNzg1MTUuOTk5OTk5OTk3LDYwODgyNi45OTk5OTk5OTk5LDU4OTQxMjAuOTk5OTk5OTk2LDUzNjM2NzUuMCwxODA4MzQ0LjAwMDAwMDAwMDUsNDkzNzgxLjk5OTk5OTk5OTY1CisxMCxUaHUgMyBGZWIgMTEsNjI2OTMxLjk5OTk5OTk5OTksNDQ0NzEwMC4wMDAwMDAwMDYsMjY3MzQwMC4wMDAwMDAwMDA1LDUxMzA2MzEuOTk5OTk5OTk5LDMuMzg3MTY0Nzk5OTk5OTk5RTcsNDMwMTI2MC45OTk5OTk5OTgsMzQwNTU2NS4wMDAwMDAwMDEsNTcyMDU5LjAwMDAwMDAwMDEsNzgzNjAwLjAwMDAwMDAwMDIsMS41OTgyMzc3OTk5OTk5OTk4RTcsODE4NjQ1My4wMDAwMDAwMDMsMTIxMTUzNi45OTk5OTk5OTk4LDI5MjYzMjQuMDAwMDAwMDAwNSwxMjkzOTUzLjAwMDAwMDAwMDIsMS4yNDE5MjkzRTcsNjA4MDQ4NS4wMDAwMDAwMDMsMjY4ODQxNy45OTk5OTk5OTk1LDQwNDE3NjguOTk5OTk5OTk5LDQ0Njg5NzYuMDAwMDAwMDAxLDYzNDkwOTYuOTk5OTk5OTk3LDUyOTY0ODYuMCwxMjc0OTIyLjk5OTk5OTk5OTUsOTkzODQ0NC4wLDQ5MTk0NzguOTk5OTk5OTk3LDU1OTUyMTAuOTk5OTk5OTk1LDI4NDQ2NTcuOTk5OTk5OTk5LDkwMjE5NC45OTk5OTk5OTk4LDgwNDkzMTIuOTk5OTk5OTk4LDY0MjIwMC4wMDAwMDAwMDAxLDE3MTEyNjMuMDAwMDAwMDAxMiwxMjM1Nzg2LjAwMDAwMDAwMDUsODQxNDM1MC4wMDAwMDAwMSwxODE5MDQ2LjAwMDAwMDAwMDIsMTk5ODI1Ni45OTk5OTk5OTk4LDEuODk3NjQ1N0U3LDEuMTM1MzEzOTk5OTk5OTk5M0U3LDM0NTA2NTMuOTk5OTk5OTk4LDM0MjEzOTguOTk5OTk5OTk5LDEuMjI4MTA1Mzk5OTk5OTk5NEU3LDEwNDgzMTkuMDAwMDAwMDAwMiw0MDEyMDExLjk5OTk5OTk5OSw3NTQ4NDQuMCw1Njg5MjgyLjk5OTk5OTk5OSwyLjA4NTE4MjAwMDAwMDAwMDRFNywyMjMzMTY5LjAsNzA3ODUxNS45OTk5OTk5OTcsNjA4ODI2Ljk5OTk5OTk5OTksNTg5NDEyMC45OTk5OTk5OTUsNTM2MzY3NS4wLDE4MDgzNDQuMDAwMDAwMDAwNSw0OTM3ODEuOTk5OTk5OTk5NjUKKzExLEZyaSA0IEZlYiAxMSw2MjY5MzEuOTk5OTk5OTk5OSw0NDQ3MTAwLjAwMDAwMDAwNSwyNjczNDAwLjAwMDAwMDAwMSw1MTMwNjMxLjk5OTk5OTk5OSwzLjM4NzE2NDc5OTk5OTk5OUU3LDQzMDEyNjAuOTk5OTk5OTk4LDM0MDU1NjUuMDAwMDAwMDAxLDU3MjA1OS4wMDAwMDAwMDAxLDc4MzYwMC4wMDAwMDAwMDAxLDEuNTk4MjM3Nzk5OTk5OTk5OEU3LDgxODY0NTMuMDAwMDAwMDAzLDEyMTE1MzYuOTk5OTk5OTk5OCwyOTI2MzI0LjAwMDAwMDAwMSwxMjkzOTUzLjAwMDAwMDAwMDIsMS4yNDE5MjkzRTcsNjA4MDQ4NS4wMDAwMDAwMDIsMjY4ODQxNy45OTk5OTk5OTk1LDQwNDE3NjguOTk5OTk5OTk5LDQ0Njg5NzYuMDAwMDAwMDAyLDYzNDkwOTYuOTk5OTk5OTk3LDUyOTY0ODYuMCwxMjc0OTIyLjk5OTk5OTk5OTgsOTkzODQ0NC4wMDAwMDAwMDIsNDkxOTQ3OC45OTk5OTk5OTcsNTU5NTIxMC45OTk5OTk5OTQsMjg0NDY1Ny45OTk5OTk5OTksOTAyMTk0Ljk5OTk5OTk5OTgsODA0OTMxMi45OTk5OTk5OTgsNjQyMjAwLjAsMTcxMTI2My4wMDAwMDAwMDE0LDEyMzU3ODYuMDAwMDAwMDAwNSw4NDE0MzUwLjAwMDAwMDAxMSwxODE5MDQ2LjAwMDAwMDAwMDUsMTk5ODI1Ni45OTk5OTk5OTk4LDEuODk3NjQ1N0U3LDEuMTM1MzEzOTk5OTk5OTk5M0U3LDM0NTA2NTMuOTk5OTk5OTk4LDM0MjEzOTguOTk5OTk5OTk5LDEuMjI4MTA1Mzk5OTk5OTk5NkU3LDEwNDgzMTkuMDAwMDAwMDAwMyw0MDEyMDExLjk5OTk5OTk5ODYsNzU0ODQ0LjAwMDAwMDAwMDEsNTY4OTI4Mi45OTk5OTk5OTgsMi4wODUxODIwMDAwMDAwMDA0RTcsMjIzMzE2OC45OTk5OTk5OTk1LDcwNzg1MTUuOTk5OTk5OTk3LDYwODgyNi45OTk5OTk5OTk5LDU4OTQxMjAuOTk5OTk5OTk2LDUzNjM2NzUuMCwxODA4MzQ0LjAwMDAwMDAwMDIsNDkzNzgxLjk5OTk5OTk5OTcKKzEyLFNhdCA1IEZlYiAxMSw2MjY5MzEuOTk5OTk5OTk5OSw0NDQ3MTAwLjAwMDAwMDAwNSwyNjczNDAwLjAwMDAwMDAwMDUsNTEzMDYzMS45OTk5OTk5OTgsMy4zODcxNjQ3OTk5OTk5OTg1RTcsNDMwMTI2MC45OTk5OTk5OTgsMzQwNTU2NS4wMDAwMDAwMDEsNTcyMDU5LjAwMDAwMDAwMDEsNzgzNjAwLjAwMDAwMDAwMDIsMS41OTgyMzc3OTk5OTk5OTk4RTcsODE4NjQ1My4wMDAwMDAwMDQsMTIxMTUzNi45OTk5OTk5OTk4LDI5MjYzMjQuMDAwMDAwMDAxLDEyOTM5NTMuMDAwMDAwMDAwMiwxLjI0MTkyOTNFNyw2MDgwNDg1LjAwMDAwMDAwMywyNjg4NDE4LjAsNDA0MTc2OC45OTk5OTk5OTksNDQ2ODk3Ni4wMDAwMDAwMDIsNjM0OTA5Ni45OTk5OTk5OTgsNTI5NjQ4Ni4wLDEyNzQ5MjIuOTk5OTk5OTk5OCw5OTM4NDQ0LjAwMDAwMDAwMiw0OTE5NDc4Ljk5OTk5OTk5Nyw1NTk1MjEwLjk5OTk5OTk5NCwyODQ0NjU3Ljk5OTk5OTk5OSw5MDIxOTQuOTk5OTk5OTk5OCw4MDQ5MzEyLjk5OTk5OTk5OCw2NDIyMDAuMDAwMDAwMDAwMSwxNzExMjYzLjAwMDAwMDAwMTQsMTIzNTc4Ni4wMDAwMDAwMDA1LDg0MTQzNTAuMDAwMDAwMDExLDE4MTkwNDYuMDAwMDAwMDAwNSwxOTk4MjU2Ljk5OTk5OTk5OTgsMS44OTc2NDU3RTcsMS4xMzUzMTM5OTk5OTk5OTkzRTcsMzQ1MDY1My45OTk5OTk5OTgsMzQyMTM5OC45OTk5OTk5OTksMS4yMjgxMDUzOTk5OTk5OTk2RTcsMTA0ODMxOS4wMDAwMDAwMDAzLDQwMTIwMTEuOTk5OTk5OTk4Niw3NTQ4NDQuMCw1Njg5MjgyLjk5OTk5OTk5OCwyLjA4NTE4MkU3LDIyMzMxNjguOTk5OTk5OTk5NSw3MDc4NTE1Ljk5OTk5OTk5Nyw2MDg4MjYuOTk5OTk5OTk5OSw1ODk0MTIwLjk5OTk5OTk5Niw1MzYzNjc1LjAwMDAwMDAwMSwxODA4MzQ0LjAwMDAwMDAwMDIsNDkzNzgxLjk5OTk5OTk5OTcKKzEzLFN1biA2IEZlYiAxMSw2MjY5MzEuOTk5OTk5OTk5OSw0NDQ3MTAwLjAwMDAwMDAwNSwyNjczNDAwLjAwMDAwMDAwMDUsNTEzMDYzMS45OTk5OTk5OTgsMy4zODcxNjQ3OTk5OTk5OTg1RTcsNDMwMTI2MC45OTk5OTk5OTgsMzQwNTU2NS4wMDAwMDAwMDEsNTcyMDU5LjAwMDAwMDAwMDEsNzgzNjAwLjAwMDAwMDAwMDIsMS41OTgyMzc3OTk5OTk5OTk4RTcsODE4NjQ1My4wMDAwMDAwMDQsMTIxMTUzNi45OTk5OTk5OTk4LDI5MjYzMjQuMDAwMDAwMDAwNSwxMjkzOTUzLjAsMS4yNDE5MjkzMDAwMDAwMDAyRTcsNjA4MDQ4NS4wMDAwMDAwMDMsMjY4ODQxNy45OTk5OTk5OTk1LDQwNDE3NjguOTk5OTk5OTk5LDQ0Njg5NzYuMDAwMDAwMDAyLDYzNDkwOTYuOTk5OTk5OTk3LDUyOTY0ODYuMCwxMjc0OTIyLjk5OTk5OTk5OTgsOTkzODQ0NC4wLDQ5MTk0NzguOTk5OTk5OTk3LDU1OTUyMTAuOTk5OTk5OTk0LDI4NDQ2NTcuOTk5OTk5OTk4Niw5MDIxOTQuOTk5OTk5OTk5OCw4MDQ5MzEyLjk5OTk5OTk5OCw2NDIyMDAuMDAwMDAwMDAwMSwxNzExMjYzLjAwMDAwMDAwMTQsMTIzNTc4Ni4wMDAwMDAwMDA1LDg0MTQzNTAuMDAwMDAwMDExLDE4MTkwNDYuMDAwMDAwMDAwNSwxOTk4MjU2Ljk5OTk5OTk5OTgsMS44OTc2NDU3RTcsMS4xMzUzMTM5OTk5OTk5OTkzRTcsMzQ1MDY1My45OTk5OTk5OTc3LDM0MjEzOTguOTk5OTk5OTk5LDEuMjI4MTA1Mzk5OTk5OTk5NkU3LDEwNDgzMTkuMDAwMDAwMDAwMyw0MDEyMDExLjk5OTk5OTk5ODYsNzU0ODQ0LjAsNTY4OTI4Mi45OTk5OTk5OTgsMi4wODUxODJFNywyMjMzMTY4Ljk5OTk5OTk5OTUsNzA3ODUxNS45OTk5OTk5OTYsNjA4ODI2Ljk5OTk5OTk5OTksNTg5NDEyMC45OTk5OTk5OTYsNTM2MzY3NS4wMDAwMDAwMDEsMTgwODM0NC4wMDAwMDAwMDAyLDQ5Mzc4MS45OTk5OTk5OTk3CisxNCxNb24gNyBGZWIgMTEsNjI2OTMxLjk5OTk5OTk5OTksNDQ0NzEwMC4wMDAwMDAwMDUsMjY3MzQwMC4wMDAwMDAwMDEsNTEzMDYzMS45OTk5OTk5OTgsMy4zODcxNjQ3OTk5OTk5OTlFNyw0MzAxMjYwLjk5OTk5OTk5OCwzNDA1NTY1LjAwMDAwMDAwMTQsNTcyMDU5LjAsNzgzNjAwLjAwMDAwMDAwMDIsMS41OTgyMzc3OTk5OTk5OTk4RTcsODE4NjQ1My4wMDAwMDAwMDQsMTIxMTUzNi45OTk5OTk5OTk4LDI5MjYzMjQuMDAwMDAwMDAxLDEyOTM5NTMuMCwxLjI0MTkyOTMwMDAwMDAwMDJFNyw2MDgwNDg1LjAwMDAwMDAwMywyNjg4NDE3Ljk5OTk5OTk5OTUsNDA0MTc2OC45OTk5OTk5OTksNDQ2ODk3Ni4wMDAwMDAwMDIsNjM0OTA5Ni45OTk5OTk5OTcsNTI5NjQ4Ni4wLDEyNzQ5MjIuOTk5OTk5OTk5OCw5OTM4NDQ0LjAwMDAwMDAwMiw0OTE5NDc4Ljk5OTk5OTk5OCw1NTk1MjEwLjk5OTk5OTk5NSwyODQ0NjU3Ljk5OTk5OTk5ODYsOTAyMTk0Ljk5OTk5OTk5OTgsODA0OTMxMi45OTk5OTk5OTgsNjQyMjAwLjAwMDAwMDAwMDEsMTcxMTI2My4wMDAwMDAwMDEyLDEyMzU3ODYuMDAwMDAwMDAwNSw4NDE0MzUwLjAwMDAwMDAxMSwxODE5MDQ2LjAwMDAwMDAwMDUsMTk5ODI1Ni45OTk5OTk5OTk4LDEuODk3NjQ1N0U3LDEuMTM1MzEzOTk5OTk5OTk5M0U3LDM0NTA2NTMuOTk5OTk5OTk4LDM0MjEzOTguOTk5OTk5OTk5LDEuMjI4MTA1Mzk5OTk5OTk5NkU3LDEwNDgzMTkuMDAwMDAwMDAwMyw0MDEyMDExLjk5OTk5OTk5ODYsNzU0ODQ0LjAsNTY4OTI4Mi45OTk5OTk5OTgsMi4wODUxODIwMDAwMDAwMDA0RTcsMjIzMzE2OC45OTk5OTk5OTk1LDcwNzg1MTUuOTk5OTk5OTk2LDYwODgyNi45OTk5OTk5OTk5LDU4OTQxMjAuOTk5OTk5OTk2LDUzNjM2NzUuMDAwMDAwMDAxLDE4MDgzNDQuMDAwMDAwMDAwMiw0OTM3ODEuOTk5OTk5OTk5NworMTUsVHVlIDggRmViIDExLDYyNjkzMS45OTk5OTk5OTk5LDQ0NDcxMDAuMDAwMDAwMDA1LDI2NzM0MDAuMDAwMDAwMDAwNSw1MTMwNjMxLjk5OTk5OTk5OCwzLjM4NzE2NDc5OTk5OTk5OUU3LDQzMDEyNjAuOTk5OTk5OTk5LDM0MDU1NjUuMDAwMDAwMDAxNCw1NzIwNTkuMDAwMDAwMDAwMSw3ODM2MDAuMDAwMDAwMDAwMiwxLjU5ODIzNzc5OTk5OTk5OThFNyw4MTg2NDUzLjAwMDAwMDAwNCwxMjExNTM2Ljk5OTk5OTk5OTgsMjkyNjMyNC4wMDAwMDAwMDA1LDEyOTM5NTMuMCwxLjI0MTkyOTMwMDAwMDAwMDJFNyw2MDgwNDg1LjAwMDAwMDAwMywyNjg4NDE3Ljk5OTk5OTk5OTUsNDA0MTc2OC45OTk5OTk5OTksNDQ2ODk3Ni4wMDAwMDAwMDIsNjM0OTA5Ni45OTk5OTk5OTcsNTI5NjQ4Ni4wLDEyNzQ5MjMuMCw5OTM4NDQ0LjAwMDAwMDAwMiw0OTE5NDc4Ljk5OTk5OTk5Nyw1NTk1MjEwLjk5OTk5OTk5NCwyODQ0NjU3Ljk5OTk5OTk5OCw5MDIxOTQuOTk5OTk5OTk5OCw4MDQ5MzEyLjk5OTk5OTk5OSw2NDIyMDAuMDAwMDAwMDAwMSwxNzExMjYzLjAwMDAwMDAwMTIsMTIzNTc4Ni4wMDAwMDAwMDA1LDg0MTQzNTAuMDAwMDAwMDExLDE4MTkwNDYuMDAwMDAwMDAwNSwxOTk4MjU2Ljk5OTk5OTk5OTUsMS44OTc2NDU3RTcsMS4xMzUzMTM5OTk5OTk5OTkzRTcsMzQ1MDY1My45OTk5OTk5OTc3LDM0MjEzOTguOTk5OTk5OTk5LDEuMjI4MTA1Mzk5OTk5OTk5NkU3LDEwNDgzMTkuMDAwMDAwMDAwMyw0MDEyMDExLjk5OTk5OTk5ODYsNzU0ODQ0LjAsNTY4OTI4Mi45OTk5OTk5OTksMi4wODUxODJFNywyMjMzMTY4Ljk5OTk5OTk5OTUsNzA3ODUxNS45OTk5OTk5OTcsNjA4ODI2Ljk5OTk5OTk5OTksNTg5NDEyMC45OTk5OTk5OTYsNTM2MzY3NS4wLDE4MDgzNDQuMDAwMDAwMDAwMiw0OTM3ODEuOTk5OTk5OTk5NworMTYsV2VkIDkgRmViIDExLDYyNjkzMS45OTk5OTk5OTk5LDQ0NDcxMDAuMDAwMDAwMDA1LDI2NzM0MDAuMDAwMDAwMDAxLDUxMzA2MzEuOTk5OTk5OTk5LDMuMzg3MTY0Nzk5OTk5OTk5RTcsNDMwMTI2MC45OTk5OTk5OTgsMzQwNTU2NS4wMDAwMDAwMDEsNTcyMDU5LjAwMDAwMDAwMDEsNzgzNjAwLjAwMDAwMDAwMDMsMS41OTgyMzc3OTk5OTk5OTk2RTcsODE4NjQ1My4wMDAwMDAwMDQsMTIxMTUzNy4wLDI5MjYzMjQuMDAwMDAwMDAwNSwxMjkzOTUzLjAsMS4yNDE5MjkzRTcsNjA4MDQ4NS4wMDAwMDAwMDIsMjY4ODQxNy45OTk5OTk5OTksNDA0MTc2OC45OTk5OTk5OTksNDQ2ODk3Ni4wMDAwMDAwMDIsNjM0OTA5Ni45OTk5OTk5OTYsNTI5NjQ4Ni4wLDEyNzQ5MjMuMCw5OTM4NDQ0LjAwMDAwMDAwMiw0OTE5NDc4Ljk5OTk5OTk5Nyw1NTk1MjEwLjk5OTk5OTk5NSwyODQ0NjU3Ljk5OTk5OTk5OCw5MDIxOTQuOTk5OTk5OTk5OCw4MDQ5MzEyLjk5OTk5OTk5OSw2NDIyMDAuMDAwMDAwMDAwMSwxNzExMjYzLjAwMDAwMDAwMTIsMTIzNTc4Ni4wMDAwMDAwMDA1LDg0MTQzNTAuMDAwMDAwMDExLDE4MTkwNDYuMDAwMDAwMDAwNSwxOTk4MjU2Ljk5OTk5OTk5OTgsMS44OTc2NDU3MDAwMDAwMDA0RTcsMS4xMzUzMTM5OTk5OTk5OTkzRTcsMzQ1MDY1My45OTk5OTk5OTc3LDM0MjEzOTguOTk5OTk5OTk4NiwxLjIyODEwNTM5OTk5OTk5OTZFNywxMDQ4MzE5LjAwMDAwMDAwMDMsNDAxMjAxMS45OTk5OTk5OTg2LDc1NDg0NC4wLDU2ODkyODIuOTk5OTk5OTk5LDIuMDg1MTgyMDAwMDAwMDAwNEU3LDIyMzMxNjguOTk5OTk5OTk5NSw3MDc4NTE1Ljk5OTk5OTk5Nyw2MDg4MjYuOTk5OTk5OTk5OSw1ODk0MTIwLjk5OTk5OTk5Niw1MzYzNjc1LjAwMDAwMDAwMSwxODA4MzQ0LjAwMDAwMDAwMDIsNDkzNzgxLjk5OTk5OTk5OTcKKzE3LFRodSAxMCBGZWIgMTEsNjI2OTMxLjk5OTk5OTk5OTksNDQ0NzEwMC4wMDAwMDAwMDUsMjY3MzQwMC4wMDAwMDAwMDEsNTEzMDYzMS45OTk5OTk5OTksMy4zODcxNjQ3OTk5OTk5OTlFNyw0MzAxMjYwLjk5OTk5OTk5OSwzNDA1NTY1LjAwMDAwMDAwMSw1NzIwNTkuMDAwMDAwMDAwMSw3ODM2MDAuMDAwMDAwMDAwMiwxLjU5ODIzNzc5OTk5OTk5OTZFNyw4MTg2NDUzLjAwMDAwMDAwMywxMjExNTM3LjAsMjkyNjMyNC4wMDAwMDAwMDA1LDEyOTM5NTIuOTk5OTk5OTk5OCwxLjI0MTkyOTNFNyw2MDgwNDg1LjAwMDAwMDAwMiwyNjg4NDE3Ljk5OTk5OTk5OSw0MDQxNzY4Ljk5OTk5OTk5OSw0NDY4OTc2LjAwMDAwMDAwMiw2MzQ5MDk2Ljk5OTk5OTk5Niw1Mjk2NDg2LjAsMTI3NDkyMy4wLDk5Mzg0NDQuMDAwMDAwMDAyLDQ5MTk0NzguOTk5OTk5OTk3LDU1OTUyMTAuOTk5OTk5OTk1LDI4NDQ2NTcuOTk5OTk5OTk4LDkwMjE5NC45OTk5OTk5OTk4LDgwNDkzMTIuOTk5OTk5OTk5LDY0MjIwMC4wMDAwMDAwMDAxLDE3MTEyNjMuMDAwMDAwMDAxMiwxMjM1Nzg2LjAwMDAwMDAwMDUsODQxNDM1MC4wMDAwMDAwMTMsMTgxOTA0Ni4wMDAwMDAwMDA1LDE5OTgyNTYuOTk5OTk5OTk5NSwxLjg5NzY0NTcwMDAwMDAwMDRFNywxLjEzNTMxMzk5OTk5OTk5OTNFNywzNDUwNjUzLjk5OTk5OTk5NzcsMzQyMTM5OC45OTk5OTk5OTg2LDEuMjI4MTA1Mzk5OTk5OTk5NkU3LDEwNDgzMTkuMDAwMDAwMDAwMyw0MDEyMDExLjk5OTk5OTk5ODYsNzU0ODQ0LjAsNTY4OTI4Mi45OTk5OTk5OTksMi4wODUxODIwMDAwMDAwMDA0RTcsMjIzMzE2OC45OTk5OTk5OTk1LDcwNzg1MTUuOTk5OTk5OTk2LDYwODgyNi45OTk5OTk5OTk5LDU4OTQxMjAuOTk5OTk5OTk2LDUzNjM2NzUuMDAwMDAwMDAxLDE4MDgzNDQuMDAwMDAwMDAwMiw0OTM3ODEuOTk5OTk5OTk5NworMTgsRnJpIDExIEZlYiAxMSw2MjY5MzEuOTk5OTk5OTk5OSw0NDQ3MTAwLjAwMDAwMDAwNiwyNjczNDAwLjAwMDAwMDAwMTQsNTEzMDYzMS45OTk5OTk5OTksMy4zODcxNjQ3OTk5OTk5OTg1RTcsNDMwMTI2MC45OTk5OTk5OTgsMzQwNTU2NS4wMDAwMDAwMDEsNTcyMDU5LjAwMDAwMDAwMDEsNzgzNjAwLjAwMDAwMDAwMDIsMS41OTgyMzc3OTk5OTk5OTk2RTcsODE4NjQ1My4wMDAwMDAwMDMsMTIxMTUzNi45OTk5OTk5OTk4LDI5MjYzMjQuMDAwMDAwMDAwNSwxMjkzOTUyLjk5OTk5OTk5OTgsMS4yNDE5MjkzRTcsNjA4MDQ4NS4wMDAwMDAwMDIsMjY4ODQxNy45OTk5OTk5OTksNDA0MTc2OC45OTk5OTk5OTksNDQ2ODk3Ni4wMDAwMDAwMDIsNjM0OTA5Ni45OTk5OTk5OTYsNTI5NjQ4Ni4wLDEyNzQ5MjIuOTk5OTk5OTk5OCw5OTM4NDQ0LjAwMDAwMDAwMiw0OTE5NDc4Ljk5OTk5OTk5Nyw1NTk1MjEwLjk5OTk5OTk5NiwyODQ0NjU3Ljk5OTk5OTk5NzcsOTAyMTk0Ljk5OTk5OTk5OTgsODA0OTMxMi45OTk5OTk5OTksNjQyMjAwLjAwMDAwMDAwMDEsMTcxMTI2My4wMDAwMDAwMDEyLDEyMzU3ODYuMDAwMDAwMDAwNSw4NDE0MzUwLjAwMDAwMDAxMSwxODE5MDQ2LjAwMDAwMDAwMDIsMTk5ODI1Ni45OTk5OTk5OTk1LDEuODk3NjQ1N0U3LDEuMTM1MzEzOTk5OTk5OTk5M0U3LDM0NTA2NTMuOTk5OTk5OTk3NywzNDIxMzk4Ljk5OTk5OTk5ODYsMS4yMjgxMDUzOTk5OTk5OTk2RTcsMTA0ODMxOS4wMDAwMDAwMDAzLDQwMTIwMTEuOTk5OTk5OTk4LDc1NDg0NC4wLDU2ODkyODIuOTk5OTk5OTk5LDIuMDg1MTgyMDAwMDAwMDAwNEU3LDIyMzMxNjguOTk5OTk5OTk5NSw3MDc4NTE1Ljk5OTk5OTk5Niw2MDg4MjYuOTk5OTk5OTk5OSw1ODk0MTIwLjk5OTk5OTk5Niw1MzYzNjc1LjAwMDAwMDAwMSwxODA4MzQ0LjAsNDkzNzgxLjk5OTk5OTk5OTY1CisxOSxTYXQgMTIgRmViIDExLDYyNjkzMS45OTk5OTk5OTk5LDQ0NDcxMDAuMDAwMDAwMDA1LDI2NzM0MDAuMDAwMDAwMDAxLDUxMzA2MzEuOTk5OTk5OTk5LDMuMzg3MTY0Nzk5OTk5OTk5RTcsNDMwMTI2MC45OTk5OTk5OTksMzQwNTU2NS4wMDAwMDAwMDEsNTcyMDU5LjAwMDAwMDAwMDEsNzgzNjAwLjAwMDAwMDAwMDIsMS41OTgyMzc3OTk5OTk5OTk2RTcsODE4NjQ1My4wMDAwMDAwMDMsMTIxMTUzNy4wLDI5MjYzMjQuMDAwMDAwMDAwNSwxMjkzOTUyLjk5OTk5OTk5OTgsMS4yNDE5MjkzRTcsNjA4MDQ4NS4wMDAwMDAwMDIsMjY4ODQxNy45OTk5OTk5OTksNDA0MTc2OC45OTk5OTk5OTg2LDQ0Njg5NzYuMDAwMDAwMDAxLDYzNDkwOTYuOTk5OTk5OTk3LDUyOTY0ODUuOTk5OTk5OTk5LDEyNzQ5MjIuOTk5OTk5OTk5OCw5OTM4NDQ0LjAwMDAwMDAwMiw0OTE5NDc4Ljk5OTk5OTk5Nyw1NTk1MjEwLjk5OTk5OTk5NiwyODQ0NjU3Ljk5OTk5OTk5NzcsOTAyMTk0Ljk5OTk5OTk5OTgsODA0OTMxMi45OTk5OTk5OTksNjQyMjAwLjAwMDAwMDAwMDEsMTcxMTI2My4wMDAwMDAwMDEyLDEyMzU3ODYuMDAwMDAwMDAwNSw4NDE0MzUwLjAwMDAwMDAxMSwxODE5MDQ2LjAwMDAwMDAwMDIsMTk5ODI1Ni45OTk5OTk5OTk1LDEuODk3NjQ1NzAwMDAwMDAwNEU3LDEuMTM1MzEzOTk5OTk5OTk5M0U3LDM0NTA2NTMuOTk5OTk5OTk3NywzNDIxMzk4Ljk5OTk5OTk5ODYsMS4yMjgxMDUzOTk5OTk5OTk2RTcsMTA0ODMxOS4wMDAwMDAwMDAyLDQwMTIwMTEuOTk5OTk5OTk4LDc1NDg0My45OTk5OTk5OTk5LDU2ODkyODMuMCwyLjA4NTE4MjAwMDAwMDAwMDRFNywyMjMzMTY4Ljk5OTk5OTk5OTUsNzA3ODUxNS45OTk5OTk5OTcsNjA4ODI2Ljk5OTk5OTk5OTgsNTg5NDEyMC45OTk5OTk5OTYsNTM2MzY3NS4wMDAwMDAwMDEsMTgwODM0NC4wMDAwMDAwMDAyLDQ5Mzc4MS45OTk5OTk5OTk2NQorMjAsU3VuIDEzIEZlYiAxMSw2MjY5MzIuMCw0NDQ3MTAwLjAwMDAwMDAwNSwyNjczNDAwLjAwMDAwMDAwMTQsNTEzMDYzMi4wLDMuMzg3MTY0Nzk5OTk5OTk4NUU3LDQzMDEyNjAuOTk5OTk5OTk5LDM0MDU1NjUuMDAwMDAwMDAxLDU3MjA1OS4wMDAwMDAwMDAxLDc4MzYwMC4wMDAwMDAwMDAyLDEuNTk4MjM3Nzk5OTk5OTk5NkU3LDgxODY0NTMuMDAwMDAwMDAzLDEyMTE1MzcuMCwyOTI2MzI0LjAwMDAwMDAwMDUsMTI5Mzk1My4wLDEuMjQxOTI5M0U3LDYwODA0ODUuMDAwMDAwMDAyLDI2ODg0MTcuOTk5OTk5OTk5LDQwNDE3NjguOTk5OTk5OTk4Niw0NDY4OTc2LjAwMDAwMDAwMiw2MzQ5MDk2Ljk5OTk5OTk5Niw1Mjk2NDg2LjAsMTI3NDkyMy4wLDk5Mzg0NDQuMDAwMDAwMDAyLDQ5MTk0NzguOTk5OTk5OTk3LDU1OTUyMTAuOTk5OTk5OTk2LDI4NDQ2NTcuOTk5OTk5OTk3Nyw5MDIxOTQuOTk5OTk5OTk5OCw4MDQ5MzEzLjAsNjQyMjAwLjAwMDAwMDAwMDEsMTcxMTI2My4wMDAwMDAwMDEyLDEyMzU3ODYuMDAwMDAwMDAwNSw4NDE0MzUwLjAwMDAwMDAxMSwxODE5MDQ2LjAwMDAwMDAwMDIsMTk5ODI1Ni45OTk5OTk5OTk1LDEuODk3NjQ1NzAwMDAwMDAwNEU3LDEuMTM1MzEzOTk5OTk5OTk5M0U3LDM0NTA2NTMuOTk5OTk5OTk3LDM0MjEzOTguOTk5OTk5OTk4NiwxLjIyODEwNTM5OTk5OTk5OTZFNywxMDQ4MzE5LjAwMDAwMDAwMDIsNDAxMjAxMS45OTk5OTk5OTgsNzU0ODQzLjk5OTk5OTk5OTksNTY4OTI4My4wLDIuMDg1MTgyRTcsMjIzMzE2OC45OTk5OTk5OTk1LDcwNzg1MTUuOTk5OTk5OTk3LDYwODgyNi45OTk5OTk5OTk4LDU4OTQxMjAuOTk5OTk5OTk2LDUzNjM2NzUuMDAwMDAwMDAxLDE4MDgzNDQuMCw0OTM3ODEuOTk5OTk5OTk5NjUKKzIxLE1vbiAxNCBGZWIgMTEsNjI2OTMyLjAsNDQ0NzEwMC4wMDAwMDAwMDUsMjY3MzQwMC4wMDAwMDAwMDEsNTEzMDYzMi4wLDMuMzg3MTY0Nzk5OTk5OTk4NUU3LDQzMDEyNjAuOTk5OTk5OTk5LDM0MDU1NjUuMDAwMDAwMDAxLDU3MjA1OS4wMDAwMDAwMDAxLDc4MzYwMC4wMDAwMDAwMDAyLDEuNTk4MjM3Nzk5OTk5OTk5NkU3LDgxODY0NTMuMDAwMDAwMDAzLDEyMTE1MzcuMCwyOTI2MzI0LjAwMDAwMDAwMDUsMTI5Mzk1My4wLDEuMjQxOTI5M0U3LDYwODA0ODUuMDAwMDAwMDAxLDI2ODg0MTcuOTk5OTk5OTk5LDQwNDE3NjguOTk5OTk5OTk4Niw0NDY4OTc2LjAwMDAwMDAwMiw2MzQ5MDk2Ljk5OTk5OTk5Niw1Mjk2NDg2LjAsMTI3NDkyMy4wLDk5Mzg0NDQuMDAwMDAwMDAyLDQ5MTk0NzguOTk5OTk5OTk3LDU1OTUyMTAuOTk5OTk5OTk2LDI4NDQ2NTcuOTk5OTk5OTk3Nyw5MDIxOTQuOTk5OTk5OTk5OCw4MDQ5MzEzLjAsNjQyMjAwLjAwMDAwMDAwMDEsMTcxMTI2My4wMDAwMDAwMDEyLDEyMzU3ODYuMDAwMDAwMDAwNSw4NDE0MzUwLjAwMDAwMDAxMywxODE5MDQ2LjAwMDAwMDAwMDIsMTk5ODI1Ni45OTk5OTk5OTk1LDEuODk3NjQ1NzAwMDAwMDAwNEU3LDEuMTM1MzEzOTk5OTk5OTk5M0U3LDM0NTA2NTMuOTk5OTk5OTk3LDM0MjEzOTguOTk5OTk5OTk4NiwxLjIyODEwNTM5OTk5OTk5OTZFNywxMDQ4MzE5LjAwMDAwMDAwMDIsNDAxMjAxMS45OTk5OTk5OTgsNzU0ODQzLjk5OTk5OTk5OTksNTY4OTI4Mi45OTk5OTk5OTksMi4wODUxODIwMDAwMDAwMDA0RTcsMjIzMzE2OC45OTk5OTk5OTk1LDcwNzg1MTUuOTk5OTk5OTk3LDYwODgyNi45OTk5OTk5OTk4LDU4OTQxMjAuOTk5OTk5OTk3LDUzNjM2NzUuMDAwMDAwMDAxLDE4MDgzNDQuMCw0OTM3ODEuOTk5OTk5OTk5NjUKKzIyLFR1ZSAxNSBGZWIgMTEsNjI2OTMyLjAsNDQ0NzEwMC4wMDAwMDAwMDQsMjY3MzQwMC4wMDAwMDAwMDE0LDUxMzA2MzIuMCwzLjM4NzE2NDc5OTk5OTk5ODVFNyw0MzAxMjYwLjk5OTk5OTk5OSwzNDA1NTY1LjAwMDAwMDAwMSw1NzIwNTkuMDAwMDAwMDAwMSw3ODM2MDAuMDAwMDAwMDAwMiwxLjU5ODIzNzc5OTk5OTk5OTRFNyw4MTg2NDUzLjAwMDAwMDAwMywxMjExNTM3LjAsMjkyNjMyNC4wLDEyOTM5NTIuOTk5OTk5OTk5OCwxLjI0MTkyOTNFNyw2MDgwNDg1LjAwMDAwMDAwMSwyNjg4NDE3Ljk5OTk5OTk5OSw0MDQxNzY4Ljk5OTk5OTk5ODYsNDQ2ODk3Ni4wMDAwMDAwMDIsNjM0OTA5Ni45OTk5OTk5OTYsNTI5NjQ4Ni4wLDEyNzQ5MjMuMCw5OTM4NDQ0LjAsNDkxOTQ3OC45OTk5OTk5OTcsNTU5NTIxMC45OTk5OTk5OTYsMjg0NDY1Ny45OTk5OTk5OTgsOTAyMTk0Ljk5OTk5OTk5OTcsODA0OTMxMy4wLDY0MjIwMC4wLDE3MTEyNjMuMDAwMDAwMDAxNCwxMjM1Nzg2LjAwMDAwMDAwMDUsODQxNDM1MC4wMDAwMDAwMTMsMTgxOTA0Ni4wMDAwMDAwMDAyLDE5OTgyNTYuOTk5OTk5OTk5OCwxLjg5NzY0NTcwMDAwMDAwMDRFNywxLjEzNTMxMzk5OTk5OTk5OTNFNywzNDUwNjUzLjk5OTk5OTk5NywzNDIxMzk4Ljk5OTk5OTk5ODYsMS4yMjgxMDUzOTk5OTk5OTk2RTcsMTA0ODMxOS4wMDAwMDAwMDAzLDQwMTIwMTEuOTk5OTk5OTk4LDc1NDg0My45OTk5OTk5OTk5LDU2ODkyODMuMCwyLjA4NTE4MjAwMDAwMDAwMDRFNywyMjMzMTY5LjAsNzA3ODUxNS45OTk5OTk5OTgsNjA4ODI2Ljk5OTk5OTk5OTgsNTg5NDEyMC45OTk5OTk5OTcsNTM2MzY3NS4wMDAwMDAwMDEsMTgwODM0NC4wLDQ5Mzc4MS45OTk5OTk5OTk2NQorMjMsV2VkIDE2IEZlYiAxMSw2MjY5MzEuOTk5OTk5OTk5OSw0NDQ3MTAwLjAwMDAwMDAwNCwyNjczNDAwLjAwMDAwMDAwMTQsNTEzMDYzMi4wLDMuMzg3MTY0Nzk5OTk5OTk4NUU3LDQzMDEyNjEuMCwzNDA1NTY1LjAwMDAwMDAwMSw1NzIwNTkuMDAwMDAwMDAwMiw3ODM2MDAuMDAwMDAwMDAwMiwxLjU5ODIzNzc5OTk5OTk5OTRFNyw4MTg2NDUzLjAwMDAwMDAwMywxMjExNTM3LjAsMjkyNjMyNC4wMDAwMDAwMDA1LDEyOTM5NTIuOTk5OTk5OTk5OCwxLjI0MTkyOTNFNyw2MDgwNDg1LjAwMDAwMDAwMSwyNjg4NDE3Ljk5OTk5OTk5OTUsNDA0MTc2OC45OTk5OTk5OTg2LDQ0Njg5NzYuMDAwMDAwMDAyLDYzNDkwOTYuOTk5OTk5OTk1LDUyOTY0ODYuMCwxMjc0OTIzLjAsOTkzODQ0NC4wLDQ5MTk0NzguOTk5OTk5OTk3LDU1OTUyMTAuOTk5OTk5OTk3LDI4NDQ2NTcuOTk5OTk5OTk3Nyw5MDIxOTQuOTk5OTk5OTk5Nyw4MDQ5MzEyLjk5OTk5OTk5OSw2NDIyMDAuMCwxNzExMjYzLjAwMDAwMDAwMTQsMTIzNTc4Ni4wMDAwMDAwMDA1LDg0MTQzNTAuMDAwMDAwMDEzLDE4MTkwNDYuMDAwMDAwMDAwNSwxOTk4MjU2Ljk5OTk5OTk5OTUsMS44OTc2NDU3MDAwMDAwMDA0RTcsMS4xMzUzMTM5OTk5OTk5OTkzRTcsMzQ1MDY1My45OTk5OTk5OTcsMzQyMTM5OC45OTk5OTk5OTgsMS4yMjgxMDUzOTk5OTk5OTk2RTcsMTA0ODMxOS4wMDAwMDAwMDAzLDQwMTIwMTEuOTk5OTk5OTk4LDc1NDg0My45OTk5OTk5OTk5LDU2ODkyODMuMCwyLjA4NTE4MjAwMDAwMDAwMDRFNywyMjMzMTY5LjAsNzA3ODUxNS45OTk5OTk5OTgsNjA4ODI2Ljk5OTk5OTk5OTgsNTg5NDEyMC45OTk5OTk5OTcsNTM2MzY3NS4wMDAwMDAwMDEsMTgwODM0NC4wLDQ5Mzc4MS45OTk5OTk5OTk2CisyNCxUaHUgMTcgRmViIDExLDYyNjkzMi4wLDQ0NDcxMDAuMDAwMDAwMDA0LDI2NzM0MDAuMDAwMDAwMDAxNCw1MTMwNjMyLjAwMDAwMDAwMSwzLjM4NzE2NDc5OTk5OTk5ODVFNyw0MzAxMjYwLjk5OTk5OTk5OSwzNDA1NTY1LjAwMDAwMDAwMDUsNTcyMDU5LjAwMDAwMDAwMDIsNzgzNjAwLjAwMDAwMDAwMDIsMS41OTgyMzc3OTk5OTk5OTk0RTcsODE4NjQ1My4wMDAwMDAwMDIsMTIxMTUzNy4wLDI5MjYzMjQuMDAwMDAwMDAwNSwxMjkzOTUzLjAsMS4yNDE5MjkyOTk5OTk5OTk4RTcsNjA4MDQ4NS4wMDAwMDAwMDEsMjY4ODQxNy45OTk5OTk5OTk1LDQwNDE3NjguOTk5OTk5OTk4Niw0NDY4OTc2LjAwMDAwMDAwMiw2MzQ5MDk2Ljk5OTk5OTk5Niw1Mjk2NDg2LjAsMTI3NDkyMy4wLDk5Mzg0NDQuMCw0OTE5NDc4Ljk5OTk5OTk5Nyw1NTk1MjEwLjk5OTk5OTk5NywyODQ0NjU3Ljk5OTk5OTk5NzcsOTAyMTk0Ljk5OTk5OTk5OTcsODA0OTMxMi45OTk5OTk5OTksNjQyMjAwLjAsMTcxMTI2My4wMDAwMDAwMDE0LDEyMzU3ODYuMDAwMDAwMDAwNSw4NDE0MzUwLjAwMDAwMDAxMywxODE5MDQ2LjAwMDAwMDAwMDUsMTk5ODI1Ni45OTk5OTk5OTk4LDEuODk3NjQ1N0U3LDEuMTM1MzEzOTk5OTk5OTk5M0U3LDM0NTA2NTMuOTk5OTk5OTk3LDM0MjEzOTguOTk5OTk5OTk4NiwxLjIyODEwNTM5OTk5OTk5OTZFNywxMDQ4MzE5LjAwMDAwMDAwMDMsNDAxMjAxMS45OTk5OTk5OTgsNzU0ODQzLjk5OTk5OTk5OTksNTY4OTI4My4wLDIuMDg1MTgyMDAwMDAwMDAwNEU3LDIyMzMxNjkuMCw3MDc4NTE1Ljk5OTk5OTk5OSw2MDg4MjYuOTk5OTk5OTk5OCw1ODk0MTIwLjk5OTk5OTk5Nyw1MzYzNjc1LjAwMDAwMDAwMSwxODA4MzQ0LjAwMDAwMDAwMDIsNDkzNzgxLjk5OTk5OTk5OTYKKzI1LEZyaSAxOCBGZWIgMTEsNjI2OTMyLjAsNDQ0NzEwMC4wMDAwMDAwMDQsMjY3MzQwMC4wMDAwMDAwMDEsNTEzMDYzMi4wLDMuMzg3MTY0Nzk5OTk5OTk4NUU3LDQzMDEyNjAuOTk5OTk5OTk5LDM0MDU1NjUuMDAwMDAwMDAxLDU3MjA1OS4wMDAwMDAwMDAyLDc4MzYwMC4wMDAwMDAwMDAyLDEuNTk4MjM3Nzk5OTk5OTk5NEU3LDgxODY0NTMuMDAwMDAwMDAzLDEyMTE1MzcuMCwyOTI2MzI0LjAwMDAwMDAwMDUsMTI5Mzk1My4wLDEuMjQxOTI5Mjk5OTk5OTk5OEU3LDYwODA0ODUuMDAwMDAwMDAxLDI2ODg0MTcuOTk5OTk5OTk5NSw0MDQxNzY4Ljk5OTk5OTk5OSw0NDY4OTc2LjAwMDAwMDAwMiw2MzQ5MDk2Ljk5OTk5OTk5Niw1Mjk2NDg2LjAsMTI3NDkyMy4wLDk5Mzg0NDQuMCw0OTE5NDc4Ljk5OTk5OTk5Nyw1NTk1MjEwLjk5OTk5OTk5NywyODQ0NjU3Ljk5OTk5OTk5NzcsOTAyMTk0Ljk5OTk5OTk5OTUsODA0OTMxMi45OTk5OTk5OTksNjQyMjAwLjAsMTcxMTI2My4wMDAwMDAwMDE0LDEyMzU3ODYuMDAwMDAwMDAwNSw4NDE0MzUwLjAwMDAwMDAxMywxODE5MDQ2LjAwMDAwMDAwMDUsMTk5ODI1Ni45OTk5OTk5OTk4LDEuODk3NjQ1N0U3LDEuMTM1MzEzOTk5OTk5OTk5NEU3LDM0NTA2NTMuOTk5OTk5OTk2NywzNDIxMzk4Ljk5OTk5OTk5ODYsMS4yMjgxMDUzOTk5OTk5OTk4RTcsMTA0ODMxOS4wMDAwMDAwMDAzLDQwMTIwMTEuOTk5OTk5OTk4LDc1NDg0NC4wLDU2ODkyODMuMDAwMDAwMDAxLDIuMDg1MTgyMDAwMDAwMDAwNEU3LDIyMzMxNjkuMCw3MDc4NTE1Ljk5OTk5OTk5OCw2MDg4MjYuOTk5OTk5OTk5OCw1ODk0MTIwLjk5OTk5OTk5Niw1MzYzNjc1LjAwMDAwMDAwMSwxODA4MzQ0LjAsNDkzNzgxLjk5OTk5OTk5OTYKKzI2LFNhdCAxOSBGZWIgMTEsNjI2OTMyLjAsNDQ0NzEwMC4wMDAwMDAwMDUsMjY3MzQwMC4wMDAwMDAwMDEsNTEzMDYzMi4wMDAwMDAwMDEsMy4zODcxNjQ3OTk5OTk5OTg1RTcsNDMwMTI2MC45OTk5OTk5OTksMzQwNTU2NS4wMDAwMDAwMDA1LDU3MjA1OS4wMDAwMDAwMDAzLDc4MzYwMC4wMDAwMDAwMDAyLDEuNTk4MjM3Nzk5OTk5OTk5NEU3LDgxODY0NTMuMDAwMDAwMDAzLDEyMTE1MzcuMCwyOTI2MzI0LjAwMDAwMDAwMDUsMTI5Mzk1My4wLDEuMjQxOTI5Mjk5OTk5OTk5OEU3LDYwODA0ODUuMDAwMDAwMDAxLDI2ODg0MTcuOTk5OTk5OTk5NSw0MDQxNzY4Ljk5OTk5OTk5OSw0NDY4OTc2LjAwMDAwMDAwMyw2MzQ5MDk2Ljk5OTk5OTk5Niw1Mjk2NDg2LjAsMTI3NDkyMy4wLDk5Mzg0NDQuMCw0OTE5NDc4Ljk5OTk5OTk5Nyw1NTk1MjEwLjk5OTk5OTk5NiwyODQ0NjU3Ljk5OTk5OTk5NzcsOTAyMTk0Ljk5OTk5OTk5OTcsODA0OTMxMi45OTk5OTk5OTksNjQyMjAwLjAsMTcxMTI2My4wMDAwMDAwMDE2LDEyMzU3ODYuMDAwMDAwMDAwNSw4NDE0MzUwLjAwMDAwMDAxMywxODE5MDQ2LjAwMDAwMDAwMDUsMTk5ODI1Ni45OTk5OTk5OTk1LDEuODk3NjQ1N0U3LDEuMTM1MzEzOTk5OTk5OTk5NEU3LDM0NTA2NTMuOTk5OTk5OTk2NywzNDIxMzk4Ljk5OTk5OTk5OCwxLjIyODEwNTM5OTk5OTk5OThFNywxMDQ4MzE5LjAwMDAwMDAwMDMsNDAxMjAxMS45OTk5OTk5OTgsNzU0ODQ0LjAsNTY4OTI4My4wMDAwMDAwMDEsMi4wODUxODIwMDAwMDAwMDA0RTcsMjIzMzE2OS4wLDcwNzg1MTUuOTk5OTk5OTk5LDYwODgyNi45OTk5OTk5OTk4LDU4OTQxMjAuOTk5OTk5OTk2LDUzNjM2NzUuMDAwMDAwMDAxLDE4MDgzNDQuMCw0OTM3ODEuOTk5OTk5OTk5NgorMjcsU3VuIDIwIEZlYiAxMSw2MjY5MzIuMCw0NDQ3MTAwLjAwMDAwMDAwNSwyNjczNDAwLjAwMDAwMDAwMSw1MTMwNjMyLjAwMDAwMDAwMSwzLjM4NzE2NDc5OTk5OTk5ODVFNyw0MzAxMjYwLjk5OTk5OTk5OSwzNDA1NTY1LjAwMDAwMDAwMDUsNTcyMDU5LjAwMDAwMDAwMDMsNzgzNjAwLjAwMDAwMDAwMDIsMS41OTgyMzc3OTk5OTk5OTk0RTcsODE4NjQ1My4wMDAwMDAwMDMsMTIxMTUzNy4wLDI5MjYzMjQuMDAwMDAwMDAwNSwxMjkzOTUzLjAsMS4yNDE5MjkyOTk5OTk5OTk4RTcsNjA4MDQ4NS4wMDAwMDAwMDEsMjY4ODQxNy45OTk5OTk5OTk1LDQwNDE3NjguOTk5OTk5OTk5LDQ0Njg5NzYuMDAwMDAwMDAzLDYzNDkwOTYuOTk5OTk5OTk2LDUyOTY0ODYuMCwxMjc0OTIzLjAsOTkzODQ0NC4wLDQ5MTk0NzguOTk5OTk5OTk3LDU1OTUyMTAuOTk5OTk5OTk3LDI4NDQ2NTcuOTk5OTk5OTk3Nyw5MDIxOTQuOTk5OTk5OTk5NSw4MDQ5MzEyLjk5OTk5OTk5OSw2NDIyMDAuMCwxNzExMjYzLjAwMDAwMDAwMTYsMTIzNTc4Ni4wMDAwMDAwMDA1LDg0MTQzNTAuMDAwMDAwMDEzLDE4MTkwNDYuMDAwMDAwMDAwNSwxOTk4MjU2Ljk5OTk5OTk5OTUsMS44OTc2NDU3MDAwMDAwMDA0RTcsMS4xMzUzMTM5OTk5OTk5OTk0RTcsMzQ1MDY1My45OTk5OTk5OTY3LDM0MjEzOTguOTk5OTk5OTk4NiwxLjIyODEwNTM5OTk5OTk5OThFNywxMDQ4MzE5LjAwMDAwMDAwMDUsNDAxMjAxMS45OTk5OTk5OTgsNzU0ODQ0LjAsNTY4OTI4My4wLDIuMDg1MTgyMDAwMDAwMDAwNEU3LDIyMzMxNjguOTk5OTk5OTk5NSw3MDc4NTE1Ljk5OTk5OTk5OSw2MDg4MjYuOTk5OTk5OTk5OCw1ODk0MTIwLjk5OTk5OTk5Niw1MzYzNjc1LjAwMDAwMDAwMSwxODA4MzQ0LjAsNDkzNzgxLjk5OTk5OTk5OTYKKzI4LE1vbiAyMSBGZWIgMTEsNjI2OTMxLjk5OTk5OTk5OTksNDQ0NzEwMC4wMDAwMDAwMDQsMjY3MzQwMC4wMDAwMDAwMDEsNTEzMDYzMi4wMDAwMDAwMDEsMy4zODcxNjQ3OTk5OTk5OTlFNyw0MzAxMjYwLjk5OTk5OTk5OSwzNDA1NTY1LjAwMDAwMDAwMDUsNTcyMDU5LjAwMDAwMDAwMDUsNzgzNjAwLjAwMDAwMDAwMDIsMS41OTgyMzc3OTk5OTk5OTk0RTcsODE4NjQ1My4wMDAwMDAwMDMsMTIxMTUzNy4wLDI5MjYzMjQuMCwxMjkzOTUzLjAsMS4yNDE5MjkyOTk5OTk5OTk4RTcsNjA4MDQ4NS4wMDAwMDAwMDEsMjY4ODQxNy45OTk5OTk5OTk1LDQwNDE3NjguOTk5OTk5OTk5LDQ0Njg5NzYuMDAwMDAwMDAzLDYzNDkwOTYuOTk5OTk5OTk2LDUyOTY0ODYuMCwxMjc0OTIzLjAsOTkzODQ0NC4wLDQ5MTk0NzguOTk5OTk5OTk3LDU1OTUyMTAuOTk5OTk5OTk3LDI4NDQ2NTcuOTk5OTk5OTk3LDkwMjE5NC45OTk5OTk5OTk3LDgwNDkzMTIuOTk5OTk5OTk5LDY0MjIwMC4wLDE3MTEyNjMuMDAwMDAwMDAxNiwxMjM1Nzg2LjAwMDAwMDAwMDUsODQxNDM1MC4wMDAwMDAwMTEsMTgxOTA0Ni4wMDAwMDAwMDAyLDE5OTgyNTYuOTk5OTk5OTk5NSwxLjg5NzY0NTcwMDAwMDAwMDRFNywxLjEzNTMxMzk5OTk5OTk5OTZFNywzNDUwNjUzLjk5OTk5OTk5NjcsMzQyMTM5OC45OTk5OTk5OTg2LDEuMjI4MTA1Mzk5OTk5OTk5OEU3LDEwNDgzMTkuMDAwMDAwMDAwNSw0MDEyMDExLjk5OTk5OTk5OCw3NTQ4NDQuMCw1Njg5MjgzLjAsMi4wODUxODIwMDAwMDAwMDA0RTcsMjIzMzE2OS4wLDcwNzg1MTUuOTk5OTk5OTk5LDYwODgyNi45OTk5OTk5OTk4LDU4OTQxMjAuOTk5OTk5OTk2LDUzNjM2NzUuMDAwMDAwMDAxLDE4MDgzNDQuMCw0OTM3ODEuOTk5OTk5OTk5NgorMjksVHVlIDIyIEZlYiAxMSw2MjY5MzIuMCw0NDQ3MTAwLjAwMDAwMDAwNCwyNjczNDAwLjAwMDAwMDAwMSw1MTMwNjMyLjAwMDAwMDAwMiwzLjM4NzE2NDc5OTk5OTk5ODVFNyw0MzAxMjYwLjk5OTk5OTk5OSwzNDA1NTY1LjAwMDAwMDAwMDUsNTcyMDU5LjAwMDAwMDAwMDMsNzgzNjAwLjAwMDAwMDAwMDEsMS41OTgyMzc3OTk5OTk5OTk0RTcsODE4NjQ1My4wMDAwMDAwMDMsMTIxMTUzNy4wLDI5MjYzMjQuMDAwMDAwMDAwNSwxMjkzOTUzLjAsMS4yNDE5MjkyOTk5OTk5OTk2RTcsNjA4MDQ4NS4wMDAwMDAwMDIsMjY4ODQxNy45OTk5OTk5OTk1LDQwNDE3NjguOTk5OTk5OTk5LDQ0Njg5NzYuMDAwMDAwMDAzLDYzNDkwOTYuOTk5OTk5OTk2LDUyOTY0ODYuMCwxMjc0OTIyLjk5OTk5OTk5OTgsOTkzODQ0NC4wLDQ5MTk0NzguOTk5OTk5OTk3LDU1OTUyMTAuOTk5OTk5OTk3LDI4NDQ2NTcuOTk5OTk5OTk3Nyw5MDIxOTQuOTk5OTk5OTk5NSw4MDQ5MzEyLjk5OTk5OTk5OSw2NDIyMDAuMCwxNzExMjYzLjAwMDAwMDAwMTYsMTIzNTc4Ni4wMDAwMDAwMDA1LDg0MTQzNTAuMDAwMDAwMDExLDE4MTkwNDYuMDAwMDAwMDAwMiwxOTk4MjU2Ljk5OTk5OTk5OTUsMS44OTc2NDU3MDAwMDAwMDA0RTcsMS4xMzUzMTM5OTk5OTk5OTk0RTcsMzQ1MDY1My45OTk5OTk5OTYzLDM0MjEzOTguOTk5OTk5OTk4NiwxLjIyODEwNTM5OTk5OTk5OTZFNywxMDQ4MzE5LjAwMDAwMDAwMDUsNDAxMjAxMS45OTk5OTk5OTg2LDc1NDg0NC4wLDU2ODkyODMuMCwyLjA4NTE4MjAwMDAwMDAwMDRFNywyMjMzMTY5LjAsNzA3ODUxNS45OTk5OTk5OTksNjA4ODI2Ljk5OTk5OTk5OTgsNTg5NDEyMC45OTk5OTk5OTYsNTM2MzY3NS4wMDAwMDAwMDEsMTgwODM0My45OTk5OTk5OTk4LDQ5Mzc4MS45OTk5OTk5OTk1MworMzAsV2VkIDIzIEZlYiAxMSw2MjY5MzIuMCw0NDQ3MTAwLjAwMDAwMDAwNCwyNjczNDAwLjAwMDAwMDAwMTQsNTEzMDYzMi4wMDAwMDAwMDIsMy4zODcxNjQ3OTk5OTk5OTg1RTcsNDMwMTI2MC45OTk5OTk5OTksMzQwNTU2NS4wLDU3MjA1OS4wMDAwMDAwMDA1LDc4MzYwMC4wMDAwMDAwMDAxLDEuNTk4MjM3Nzk5OTk5OTk5NEU3LDgxODY0NTMuMDAwMDAwMDAyLDEyMTE1MzcuMCwyOTI2MzI0LjAwMDAwMDAwMDUsMTI5Mzk1My4wLDEuMjQxOTI5Mjk5OTk5OTk5NkU3LDYwODA0ODUuMDAwMDAwMDAxLDI2ODg0MTcuOTk5OTk5OTk5NSw0MDQxNzY4Ljk5OTk5OTk5OSw0NDY4OTc2LjAwMDAwMDAwNCw2MzQ5MDk2Ljk5OTk5OTk5Niw1Mjk2NDg2LjAsMTI3NDkyMi45OTk5OTk5OTk4LDk5Mzg0NDQuMCw0OTE5NDc4Ljk5OTk5OTk5Nyw1NTk1MjEwLjk5OTk5OTk5NywyODQ0NjU3Ljk5OTk5OTk5NzcsOTAyMTk0Ljk5OTk5OTk5OTcsODA0OTMxMi45OTk5OTk5OTksNjQyMjAwLjAsMTcxMTI2My4wMDAwMDAwMDE2LDEyMzU3ODYuMDAwMDAwMDAwNSw4NDE0MzUwLjAwMDAwMDAxMSwxODE5MDQ2LjAwMDAwMDAwMDUsMTk5ODI1Ni45OTk5OTk5OTk1LDEuODk3NjQ1NzAwMDAwMDAwNEU3LDEuMTM1MzEzOTk5OTk5OTk5NEU3LDM0NTA2NTMuOTk5OTk5OTk2MywzNDIxMzk4Ljk5OTk5OTk5ODYsMS4yMjgxMDUzOTk5OTk5OTk2RTcsMTA0ODMxOS4wMDAwMDAwMDAzLDQwMTIwMTEuOTk5OTk5OTk4Niw3NTQ4NDQuMDAwMDAwMDAwMSw1Njg5MjgzLjAsMi4wODUxODIwMDAwMDAwMDA0RTcsMjIzMzE2OS4wLDcwNzg1MTUuOTk5OTk5OTk5LDYwODgyNi45OTk5OTk5OTk3LDU4OTQxMjAuOTk5OTk5OTk2LDUzNjM2NzUuMDAwMDAwMDAxLDE4MDgzNDQuMCw0OTM3ODEuOTk5OTk5OTk5NTMKKzMxLFRodSAyNCBGZWIgMTEsNjI2OTMyLjAwMDAwMDAwMDEsNDQ0NzEwMC4wMDAwMDAwMDMsMjY3MzQwMC4wMDAwMDAwMDE0LDUxMzA2MzIuMDAwMDAwMDAyLDMuMzg3MTY0Nzk5OTk5OTk4NUU3LDQzMDEyNjAuOTk5OTk5OTk5LDM0MDU1NjUuMCw1NzIwNTkuMDAwMDAwMDAwMyw3ODM2MDAuMDAwMDAwMDAwMiwxLjU5ODIzNzc5OTk5OTk5OTRFNyw4MTg2NDUzLjAwMDAwMDAwMiwxMjExNTM3LjAsMjkyNjMyNC4wMDAwMDAwMDA1LDEyOTM5NTMuMCwxLjI0MTkyOTI5OTk5OTk5OTZFNyw2MDgwNDg1LjAwMDAwMDAwMiwyNjg4NDE3Ljk5OTk5OTk5OTUsNDA0MTc2OC45OTk5OTk5OTg2LDQ0Njg5NzYuMDAwMDAwMDA0LDYzNDkwOTYuOTk5OTk5OTk1LDUyOTY0ODYuMDAwMDAwMDAxLDEyNzQ5MjIuOTk5OTk5OTk5OCw5OTM4NDQ0LjAsNDkxOTQ3OC45OTk5OTk5OTYsNTU5NTIxMC45OTk5OTk5OTgsMjg0NDY1Ny45OTk5OTk5OTgsOTAyMTk0Ljk5OTk5OTk5OTcsODA0OTMxMi45OTk5OTk5OTgsNjQyMjAwLjAsMTcxMTI2My4wMDAwMDAwMDE2LDEyMzU3ODYuMDAwMDAwMDAwMiw4NDE0MzUwLjAwMDAwMDAxMSwxODE5MDQ2LjAwMDAwMDAwMDIsMTk5ODI1Ni45OTk5OTk5OTkzLDEuODk3NjQ1NzAwMDAwMDAwNEU3LDEuMTM1MzEzOTk5OTk5OTk5NEU3LDM0NTA2NTMuOTk5OTk5OTk2MywzNDIxMzk4Ljk5OTk5OTk5ODYsMS4yMjgxMDUzOTk5OTk5OTk2RTcsMTA0ODMxOS4wMDAwMDAwMDAzLDQwMTIwMTEuOTk5OTk5OTk4Niw3NTQ4NDQuMDAwMDAwMDAwMSw1Njg5MjgzLjAsMi4wODUxODJFNywyMjMzMTY5LjAwMDAwMDAwMDUsNzA3ODUxNS45OTk5OTk5OTksNjA4ODI2Ljk5OTk5OTk5OTgsNTg5NDEyMC45OTk5OTk5OTYsNTM2MzY3NS4wMDAwMDAwMDEsMTgwODM0NC4wLDQ5Mzc4MS45OTk5OTk5OTk1MworMzIsRnJpIDI1IEZlYiAxMSw2MjY5MzIuMCw0NDQ3MTAwLjAwMDAwMDAwNCwyNjczNDAwLjAwMDAwMDAwMiw1MTMwNjMyLjAwMDAwMDAwMiwzLjM4NzE2NDc5OTk5OTk5ODVFNyw0MzAxMjYxLjAsMzQwNTU2NS4wLDU3MjA1OS4wMDAwMDAwMDAzLDc4MzYwMC4wMDAwMDAwMDAxLDEuNTk4MjM3Nzk5OTk5OTk5NEU3LDgxODY0NTMuMDAwMDAwMDAyLDEyMTE1MzYuOTk5OTk5OTk5OCwyOTI2MzI0LjAwMDAwMDAwMSwxMjkzOTUzLjAsMS4yNDE5MjkyOTk5OTk5OTk2RTcsNjA4MDQ4NS4wMDAwMDAwMDIsMjY4ODQxNy45OTk5OTk5OTk1LDQwNDE3NjguOTk5OTk5OTk5LDQ0Njg5NzYuMDAwMDAwMDA0LDYzNDkwOTYuOTk5OTk5OTk2LDUyOTY0ODYuMDAwMDAwMDAxLDEyNzQ5MjIuOTk5OTk5OTk5OCw5OTM4NDQ0LjAsNDkxOTQ3OC45OTk5OTk5OTYsNTU5NTIxMC45OTk5OTk5OTcsMjg0NDY1Ny45OTk5OTk5OTgsOTAyMTk0Ljk5OTk5OTk5OTcsODA0OTMxMi45OTk5OTk5OTgsNjQyMjAwLjAsMTcxMTI2My4wMDAwMDAwMDE2LDEyMzU3ODYuMDAwMDAwMDAwMiw4NDE0MzUwLjAwMDAwMDAxMSwxODE5MDQ2LjAwMDAwMDAwMDUsMTk5ODI1Ni45OTk5OTk5OTk1LDEuODk3NjQ1NzAwMDAwMDAwNEU3LDEuMTM1MzEzOTk5OTk5OTk5NEU3LDM0NTA2NTMuOTk5OTk5OTk2MywzNDIxMzk4Ljk5OTk5OTk5ODYsMS4yMjgxMDUzOTk5OTk5OTk2RTcsMTA0ODMxOS4wMDAwMDAwMDAzLDQwMTIwMTEuOTk5OTk5OTk5LDc1NDg0NC4wMDAwMDAwMDAxLDU2ODkyODMuMCwyLjA4NTE4MjAwMDAwMDAwMDRFNywyMjMzMTY5LjAwMDAwMDAwMDUsNzA3ODUxNS45OTk5OTk5OTksNjA4ODI2Ljk5OTk5OTk5OTgsNTg5NDEyMC45OTk5OTk5OTYsNTM2MzY3NS4wMDAwMDAwMDEsMTgwODM0NC4wLDQ5Mzc4MS45OTk5OTk5OTk2CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNJUlN0YXRlc09ubHlfUktfUmVmZXJlbmNlL1Rlc3RTSVIvaHVtYW4vUl8wLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0lSU3RhdGVzT25seV9SS19SZWZlcmVuY2UvVGVzdFNJUi9odW1hbi9SXzAuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkxNDg0MWIKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNJUlN0YXRlc09ubHlfUktfUmVmZXJlbmNlL1Rlc3RTSVIvaHVtYW4vUl8wLmNzdgpAQCAtMCwwICsxLDMzIEBACitpdGVyYXRpb24sdGltZSxzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9ub2RlL3RyYW5zcG9ydC9waXBlL1VTQQorMSxUdWUgMjUgSmFuIDExLDAuMAorMixXZWQgMjYgSmFuIDExLDcxOTkuMDExODQyNTQwMTM2CiszLFRodSAyNyBKYW4gMTEsMjU3NzQwLjE3NzU1NDA1MTQ1Cis0LEZyaSAyOCBKYW4gMTEsNDY5NzYxLjE3MjkyNzA0NTEKKzUsU2F0IDI5IEphbiAxMSw2MjI1MTcuNDEwMTg4MzMxNgorNixTdW4gMzAgSmFuIDExLDcyNzQ2MC40NzgzOTIyOTU5Cis3LE1vbiAzMSBKYW4gMTEsNzk4NDA4LjQ1NTc0OTE3MjEKKzgsVHVlIDEgRmViIDExLDg0NjEwNi40NDc2MTEzNTY3Cis5LFdlZCAyIEZlYiAxMSw4NzgxMTEuMzg0NzkwMDcKKzEwLFRodSAzIEZlYiAxMSw4OTk1NzEuNjI4MTY4MzE0OQorMTEsRnJpIDQgRmViIDExLDkxMzk1OC4yNjk4NjY3NzU0CisxMixTYXQgNSBGZWIgMTEsOTIzNjAyLjE4NjgzODA4MTcKKzEzLFN1biA2IEZlYiAxMSw5MzAwNjYuNzU1OTc0ODM1CisxNCxNb24gNyBGZWIgMTEsOTM0NDAwLjEwNTUwNDQ1MDQKKzE1LFR1ZSA4IEZlYiAxMSw5MzczMDQuODUyMTc0NjMwMgorMTYsV2VkIDkgRmViIDExLDkzOTI1MS45NzE4NjU1MzUyCisxNyxUaHUgMTAgRmViIDExLDk0MDU1Ny4xNzE3MTAzNDM3CisxOCxGcmkgMTEgRmViIDExLDk0MTQzMi4wNzc1NzM3NDE2CisxOSxTYXQgMTIgRmViIDExLDk0MjAxOC41NDcyOTk2NjU2CisyMCxTdW4gMTMgRmViIDExLDk0MjQxMS42NzE1NDMyMDQ2CisyMSxNb24gMTQgRmViIDExLDk0MjY3NS4xOTE4MDYxMTEKKzIyLFR1ZSAxNSBGZWIgMTEsOTQyODUxLjgzNTUxMDQ3NworMjMsV2VkIDE2IEZlYiAxMSw5NDI5NzAuMjQzODQ1NDI4MgorMjQsVGh1IDE3IEZlYiAxMSw5NDMwNDkuNjE1NjY3MDgxMQorMjUsRnJpIDE4IEZlYiAxMSw5NDMxMDIuODIwNDE0NTM2NAorMjYsU2F0IDE5IEZlYiAxMSw5NDMxMzguNDg0NzcwODQ5OQorMjcsU3VuIDIwIEZlYiAxMSw5NDMxNjIuMzkxNDAwOTA0MworMjgsTW9uIDIxIEZlYiAxMSw5NDMxNzguNDE2NTU4MTY4OAorMjksVHVlIDIyIEZlYiAxMSw5NDMxODkuMTU4NTg0NDAyMgorMzAsV2VkIDIzIEZlYiAxMSw5NDMxOTYuMzU5MjA3NjM3NworMzEsVGh1IDI0IEZlYiAxMSw5NDMyMDEuMTg1OTQ3OTk5MgorMzIsRnJpIDI1IEZlYiAxMSw5NDMyMDQuNDIxNDIwODU4NApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTSVJTdGF0ZXNPbmx5X1JLX1JlZmVyZW5jZS9UZXN0U0lSL2h1bWFuL1JfMS5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNJUlN0YXRlc09ubHlfUktfUmVmZXJlbmNlL1Rlc3RTSVIvaHVtYW4vUl8xLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NTA4ZGJjCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTSVJTdGF0ZXNPbmx5X1JLX1JlZmVyZW5jZS9UZXN0U0lSL2h1bWFuL1JfMS5jc3YKQEAgLTAsMCArMSwzMyBAQAoraXRlcmF0aW9uLHRpbWUsVVMtQUssVVMtQUwsVVMtQVIsVVMtQVosVVMtQ0EsVVMtQ08sVVMtQ1QsVVMtREMsVVMtREUsVVMtRkwsVVMtR0EsVVMtSEksVVMtSUEsVVMtSUQsVVMtSUwsVVMtSU4sVVMtS1MsVVMtS1ksVVMtTEEsVVMtTUEsVVMtTUQsVVMtTUUsVVMtTUksVVMtTU4sVVMtTU8sVVMtTVMsVVMtTVQsVVMtTkMsVVMtTkQsVVMtTkUsVVMtTkgsVVMtTkosVVMtTk0sVVMtTlYsVVMtTlksVVMtT0gsVVMtT0ssVVMtT1IsVVMtUEEsVVMtUkksVVMtU0MsVVMtU0QsVVMtVE4sVVMtVFgsVVMtVVQsVVMtVkEsVVMtVlQsVVMtV0EsVVMtV0ksVVMtV1YsVVMtV1kKKzEsVHVlIDI1IEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMixXZWQgMjYgSmFuIDExLDEyLjI4NDU3MjYzNjU2Njc4OCwxMi4zNDUyNTI4NTk0NDMyMTIsOS4wMDg3MjUzMTg3ODc5LDEwNi42Njc5NzI5OTIyOTI1MiwxNTc3MjUzLjc1MTYxOTM1OCwxMTEuNjA2NjA0ODY5NTgyMiwxNS45NjMzOTQwOTE0NzA3OTUsNDEuNDAxODAzMjI0MjQ5MjUsMC4wNDA2NTE3MTU5NzA2NzYyLDI5NC45MDQyNjEwMjI0Njc1LDE5My43ODY5ODM3MzQ2OTU4NCw0NS40ODAzNzQ2NTkwNzExNDYsNy40MjA4NDI2OTYzOTg5MDUsOS4xNjE3Nzg3NDg2NDEyNiwyMTYuMzEzNDAyOTk1NDAzMzUsMjIuNjkwNDg5Mzk1MDkzOTk0LDMuNTA1ODU3MzM3MjI1OTkxLDExLjAxNDI0NjAyOTgyNzA5OSwyMC43NDUwMzgxMzM0NDg3NzMsNjUuMDYzODYxMTg1NTE5NzYsNDguMDcyOTkxNTU3Mjc3ODYsNS40MTgzOTgzMzcyNDQ0MDY0LDg4Ljk2MDEzNTc4MjcwOTYzLDc5Ljk3OTQ2MjkyODAzNDU1LDU5LjE0ODk2MTgyNTg0MDg5LDUuODE1NjUwNzM4Mjc3MTc4LDYuNDE1OTM3Njg1NzU1NjM3LDk0Ljg4NjI4MzQxNzY5MTkxLDMuMDYxMjY3NzIyNTA2ODQzLDEwLjY0NTQ2NDAxODk1ODc3Niw5LjEzNzg0Nzc0NTI2NDc4NCw4NC43OTUzOTc2MzE5MDgwNywxNC42NjkxOTU2NzcyNTM4MzksMTExLjkyMjY1OTI2OTMxNDcsMTkwLjgwMDk5NjgyNjI4MjI0LDg2LjE0NjMxODQ3MjQ0NzIzLDE1Ljk5NzMyNDA4NDgzMjcwNywzNS4wNjA0MjUxNzAxMjA0MSw5Ny44MjAyNDQ5MDU1NjgxLDEyLjA3OTM0MDQyMDA5NDg3NiwxNC41NDIzNTgyNTEwMzgzOTcsMi45NTk4Nzg0MDg0MzU0MDgsNTIuOTMzMTQ1MDE2OTIyNjY2LDI3MS4yMzY1NzE4MjkwMTM0LDQ3Ljk2MDczMjk0NjMyOTg1Niw3Mi4zMzQ3MTc1NTcwNTA5NCwzLjE2Mjc0OTUyNTA4ODUwMyw3My44MDY5ODQ1NDEzOTM2MywyNC45MzczNzY5MzU5NjEwNiwxLjY1NjQ0MjI3OTAzMjQzMDIsMi4yMDc5NTc5NTY3ODcwMTc2CiszLFRodSAyNyBKYW4gMTEsMTQzNjYyLjMxNzY1MzI0LDg3ODQyOC45Mjc3MjgzNDQsNTM2NTcxLjQ3Njg2OTAzODksMTE4MDU0Ni42Nzg5NjMxODksMS4yMTY2MjI5MTI0ODk2NDk1RTcsMTAwNDkyMC44MDQ0NTA3MzI3LDcwMTg3NS40NTExODAwODgzLDE0Mjk5MC41MDEzNzMzNjEwNCwxMDE1NTIuNjEwMzEyMjk1MywzNjQ3MDI5LjExMzM5MDY5NzYsMTkwMDY0Ni43NTI0NTIzNzYsMjkwMTgzLjgwOTE2MDYxODgsNTczNjc5LjAyMDEzNDUyNTUsMjc1MzQxLjUxODU1MzI3NTI3LDI4MjI1MDcuMzY4NTc3OTk2MywxMjMwNTQ3LjQxODI0NDkxNiw0OTc0MzcuNDA2NjkwODg0MjcsNzk3MTM1LjAwMTA1MDA4MTMsOTIwMzMyLjA1MTA0NjUxNywxMzg4OTEwLjI2NjEyNDM1MiwxMTQ4Mjg3LjYxMDAzNjQ5MSwyNjA3MjEuNzM1NzIyNDM0NjIsMjE1MjQ0NS4wOTMzNDQ3OTIzLDExMTI2MTQuMzg1NzMyNjgwNiwxMjI2NzkxLjk0MjI0MDMzNSw1NDc1NjQuNjA4MzU2MjY1NSwxOTIwNDIuNzU4MDMzNDg2NywxNzc4OTcyLjI2NTU2NzM4ODYsMTMyNTMwLjg4MzEwNTE1ODEsMzYwNTU0LjEwODY0MTEyODY0LDI2MzgzMS4xNjg3NjI4OTMwNywxODM4NDI5LjY2NjEwNjYzNjQsMzkwOTAxLjkxMzEzNjYzMTM3LDQ5MTMzNS42NTc1NzU5NDAyNSw0MTQ1NDIzLjQ0MDA1MTU4MiwyNDI4NTUzLjA5OTM4NTQ1MjUsNzEwNTQ4LjMzNjI3OTIzNDYsNzQ4NDUzLjYxMjk2OTM2MzcsMjYzNjY3MS40Njc5MjU1MzgsMjMxMzA0LjMxNTE3NjUwMjIyLDgxMDAyOC45ODE5NTQ4OTYyLDE1MzM3My41Nzg2NTI3NDM0LDEyMzU3MTguMjIyNTkzNDA5LDQ2NDE0MTIuNzM3Njc0MzU4LDUxNTAwNS4xMjI2MzQ1NzgsMTU0ODE1NC45MzI3NTQzNjU1LDEyNjQ5NS4yNTE2OTY3NDk0LDEzMDgzNzMuNzM4MzQ4NTE3MywxMTA0NzIxLjc4Mzk4NTcxMzcsMzIzOTIwLjgwNTMyNTg0MjY0LDEwMTM4Ny40Nzg4NjQ5MzQ3MworNCxGcmkgMjggSmFuIDExLDMwMzA2NC40NTgxODk0NDc5LDIwNTUxMDAuNzAyMjkxMDU0NywxMjQxMTQ3LjM5NDMzOTE0OSwyNDgzNDY2LjE2OTU5MzQ5NDQsMS45MzE0OTM3OTc1ODM5OTdFNywyMDkyMjY1LjIxOTY1NTA1MzUsMTU5MzQwMC42NDEwMTA0NzQyLDI4NDUzNS43OTU5ODk0MDYsMzI2MzkxLjU4MDQ5MjQ3MTUsNzcxNTY3MC44MDg2NTk4Mzg1LDM5NzQwNjEuOTA5MDU4NDQ3NSw1OTQxMjkuNDA0ODE3MDQ4MiwxMzQ5MzkyLjMzNDYxNDU3NTYsNjExMjQ0Ljg5MjY4NTgzMjMsNTk4NzgyNi41Mjk4ODI5MzIsMjgyOTczNS44NzUyMzI3MjIsMTIxOTgwOC41MjE4NTk5NjcsMTg2Njk2Mi4zNTk0NjMyMDQsMjA5MDQ3NC4xODM5NTUyMzgyLDMwMjQ3MzAuNjAzNjgzODk0LDI1MTYyODcuNDg5ODk4ODQwNCw1OTUxNDMuODYyNjU1NTYxMyw0NzIwMTE3LjcyNzIyMDQ3NSwyMzY4MjE1LjQ4ODY2NDM2OCwyNjY3NDYyLjg1NzkzMzA0NDQsMTMwNDk0Ni41NDMxMzQ0OTA3LDQyNjIyNi45NjU4ODA5NDAyLDM4NDY5MzIuMzMxNDM4MjQsMzAwNTkxLjU4MzE3MzEyMTI3LDgwNTk2MS44MjQ3MTcyODU2LDU4NDM1MS4zMDk2NDczMTYyLDQwMDcwOTUuMTI1NjU3OTIxLDg2MTg2Ni42MzgwNTIwNTQ0LDk4ODQ3Mi4wNDg2ODI3NTMsOTAzNjUzMS4xNDg5OTI0MDIsNTM3MTYxNS4zNzI3NjI5NDIsMTYxNDA4MC4wOTEyNjA5MDEyLDE2Mjk5NjQuNDU2OTU2OTYyLDU4MTcxMzAuMDg0NTEwMDk0NSw1MDA3NTQuNTkyNzQzODY3NiwxODY1ODI3LjI3MTM2NzczLDM1MTY5OS45NjgzNzY1MjUyNywyNzA0NDI5LjgwMjgzMTg4Myw5OTg3NzMwLjc3NjEyMjc4OCwxMDgxNzM5LjEwMDg4NjE1NTQsMzM3MjAxMi4wMDE2MzA4MTc1LDI4NTU0My42MzM5MTAwODAyLDI4MjA3NzUuMzQ5OTE3MzIsMjUwOTA4NC4wNjczMjMwNzkzLDgxMzMyOC40NjA2MDMyNzk5LDIzMDc3Ni4zMjE3NTEyMjExCis1LFNhdCAyOSBKYW4gMTEsNDA5ODY2LjA3NDEwODA0MDcsMjg0Mzc3Ni44OTAxMTU1OTIsMTcxMzM4OC4zMTMxNjg4MjQ3LDMzNTY0MjEuNjI4MDI3MTU2LDIuNDEwODUxNjcyNzkzODA1MkU3LDI4MjA3MjIuMzI4MDg4OTQ5NCwyMTkwOTIyLjQwNzg4MTEyNCwzNzkzMDcuODkzNTU1NzE5Niw0NzcxMjQuNjczNjY4MTMwNTMsMS4wNDQxNzcyNTQ4MTg1MzZFNyw1MzYzMTgwLjY3OTA0MTEwMjUsNzk3NzE5Ljc2MDY5MzM0NjYsMTg2OTMyNS44NTc0NjI1NjU0LDgzNjM2MS45OTIzMTE3Njk1LDgxMDg3MTcuNjE2MzA2NjIsMzkwMTU3OC40ODk5NjU4NTUsMTcwNDAwOC44MjE4NjYwMzYsMjU4NDAyNi4wOTcxODMzNTc1LDI4NzQ3MzIuNzEzNTAwNTk4NCw0MTIwOTUyLjcxMjU0MTY5MiwzNDMzMDU3LjA2OTg4MzU2NjMsODE5Mjg0LjI4ODU5NjQyMjUsNjQ0MDg1Ni43NDA5MzM3NTIsMzIwOTUzNi45NzY0OTIzNTkzLDM2MzI5MDEuNTgzMTE0MzQyOCwxODEyNjAxLjExODc3NjczNjUsNTgzMTczLjM4MTkxODYwNDgsNTIzMjcwMS41NTY2MDg0Miw0MTMyMjkuNjk3NjIxODk5MTMsMTEwNDQ3My4yMDYxNDE2OTUxLDc5OTE1Ny4yMTMxNTg0MDA4LDU0NjA0MDEuMzAxMTIwNjA2LDExNzc0OTIuNDMyNDIxMTM2MiwxMzIxMzg4LjgxOTgzNjA0MjEsMS4yMzE0MjUyMjY0Nzc3MDk0RTcsNzM0Mzk4NS4yNjkwMDM2MjYsMjIxOTY0OS43NzE5NzM5MTk2LDIyMjA2OTYuNjE4MjQ2MDcsNzk0ODU3OC42MjA3Mjk0NSw2ODEzMTguMDI3NDAwMjEwNCwyNTczNDY5LjMxODY0NDI4LDQ4NDYyNS44NjM5NTM0OTUwNSwzNjg4Njg2LjY2NzUxOTUwNjUsMS4zNTcwMjg0Mjk1NzcwNjczRTcsMTQ2MTQ0Ni4wNzQyMTkxMTkzLDQ1OTQyNDUuMDU3MDc3NjMsMzkyMTQwLjMwMDYzODIxNjMsMzgzNDI0MS42NjcwMjU2OTYsMzQ1MDMyMi42MTkxNzM0NDcsMTE0MTM4MC4yNTE0NjY2ODQsMzE3NDk2LjM1NDEwNTk0NTUKKzYsU3VuIDMwIEphbiAxMSw0ODE0NDIuMjA3NDI1NTM0NDMsMzM3MjQxMC4wMzUxMjE2MTksMjAyOTkxOC41NDA0MDg1MDg5LDM5NDE0NTQuMjM2MTIzOTAzNywyLjczMjMzNzM5MTAyNDMzNEU3LDMzMDg5MDYuMzM2NTY4OTk1LDI1OTE0MTcuNDI2NzY4MzY2Miw0NDI4MjMuMDE2NzgwMjQ5OSw1NzgxNjMuODYwMzMzNzYwMiwxLjIyNjg3NTc0ODg3MDI0MTVFNyw2Mjk0MTIxLjkzOTQxNDc5Niw5MzQxNTUuMzA0MTkwOTYwNCwyMjE3ODI3LjgxMzQ5NTU2NSw5ODcyNDQuNjM1MzgyOTMwMyw5NTMwMTA5LjA2NjE3MzMwNiw0NjIwMDAxLjUwMTcwOTM5MywyMDI4NTY2Ljg5NTU4MTcyOCwzMDY0NjU5LjMxODY0MTY0MzUsMzQwMDM5MC4yNjA0NzM3ODUsNDg1NTY2Mi41MjYxODY5OCw0MDQ3NTAwLjgyMDU0NDA0NSw5Njk1MTcuNTc5NDAyMTI1OSw3NTk0MTQzLjkxNjQzMTkwOSwzNzczMzgyLjYxNzE3NTA1NCw0Mjc5OTU1Ljk1NTk1NDE1MSwyMTUyODc1LjY1MjYwMzA1NCw2ODgzNjUuMjIyMzAxNzI1MSw2MTYxNDU5LjYzMDQ4MDIzNyw0ODg3MjYuNDU1MTQ1NDAzMzQsMTMwNDU0OS42MzgwMjY3ODIsOTQzMTI4LjM4MjE3NjM5OTEsNjQzNDQzNy40MDk0NTgwNywxMzg5MDM1LjQ4MTc4NjIyMjQsMTU0NDQ5NS4wMzk4Nzc3MDk1LDEuNDUxMTA0OTc2MjIwNzYwOUU3LDg2NjU5NDAuNjIyODQ5MzQsMjYyNTUzOS4yNjcwMDQwMzYzLDI2MTY2MTcuMDM3OTU0ODY1NSw5Mzc3MTQ4Ljc0NzU4MjMyNiw4MDIzMzMuOTIzNzQ1NDA3LDMwNDc3ODAuNjg1OTM1Mzk5LDU3MzcyMS43NDE1OTAwNDA1LDQzNDgzNjAuODAyNjI1NDE4LDEuNTk3MTMyOTQzNTA1ODM3NkU3LDE3MTU5MTUuMjkyOTUzMjgwMyw1NDEzNDEwLjExNTgxMzU3LDQ2MzU4Ny4zMjE4NzUyODE0LDQ1MTM0NzQuMjg0NTE0ODg4LDQwODExOTcuNjE5MDMyMTA4NywxMzYxMjc0LjI3MzU2MDczMSwzNzU2MjEuNTA0NDEyMjYzMworNyxNb24gMzEgSmFuIDExLDUyOTQxNS4yNjYwMTUwOTI0LDM3MjY3NDYuMDQ4MjQ3MTI3LDIyNDIwODMuMjU0NDQyODExLDQzMzM1NjUuNDM5NzE5NTcsMi45NDc5NTY3MTA0NDkzMTFFNywzNjM2MTA3LjQ2MjMxMDc1NiwyODU5ODU4LjgwODg3NzY4NTYsNDg1NDA0LjQzMzQxNDM1MTgsNjQ1ODkyLjMxNDMzMzIwNCwxLjM0OTMyNzMxMDAxMTc5OTRFNyw2OTE4MDc1LjQzNTMxNjExMiwxMDI1NjAzLjA5MTgwMjM0MDUsMjQ1MTQyNC44ODg3MzQwNSwxMDg4Mzc1LjUwNTg3NzU1NzIsMS4wNDgyNzgxMDQxNjAxMDg2RTcsNTEwMTU0Ni4xMzI0NjIyOTcsMjI0NjExOC40NTY1MTY5OTY1LDMzODY4MjEuNzk2MzY0Nzk1LDM3NTI3MjQuOTY4Nzg1ODQzMyw1MzQ4MTAyLjI0OTI1NDkwOCw0NDU5MzM0LjMzODE5MjY0NCwxMDcwMjE1LjQ0NjY2OTc4NjUsODM2NzEzOS45OTY0NjEzOTksNDE1MTI5NC40NDk3OTQ3OCw0NzEzNjQzLjk4Nzc0NTI2MywyMzgwOTU5LjQ0NTQ4NjI4OSw3NTg4NzEuMjc5NTI4NDg2OCw2NzgzOTU2LjcxNzkwMTM0MzUsNTM5MzI5LjkzMDE5MjQ0OTYsMTQzODY1NC4wMTE0NDkyMjcsMTAzOTYyNi41NjQ2NzA4MzAzLDcwODcyODYuMjA3MTk4NDg2LDE1MzA4MjMuODYyNjUwNDQ4MiwxNjk0MDQ5Ljk4NzcxNDgyNDUsMS41OTgzNDU1OTAyMDEyNTAzRTcsOTU1MTk5My45ODU0NjE0NTcsMjg5NzU5Ni41NTA5MzUyNjY1LDI4ODE5ODIuOTUzMTcxNzc0MywxLjAzMzQ2NTk1NzEzNjMxMzZFNyw4ODM0NDQuNTA5MzQ0NTA5NywzMzY1NzAyLjQ5NjUxMjE0NjcsNjMzNDQwLjgxODkzMjAwODksNDc5MDUwOS42ODcwNDgzODEsMS43NTgwNjE2MTk4MjIyMTk0RTcsMTg4NjQ3MC4zMTkxMjk1NzI1LDU5NjI0NTYuMDg3NTc0NDM3LDUxMTQ3Ni4xOTEwMDkyNDYyLDQ5Njg3MjYuNjg5Nzk2NDQ2LDQ1MDQwNTYuODQ3MDkzNzAzLDE1MDg2NzAuNDE3ODk5Njg1Nyw0MTQ1ODEuMzU1MDg1NDQxCis4LFR1ZSAxIEZlYiAxMSw1NjE1NjkuNjc3OTc4MDE2MiwzOTY0MjUzLjk3NzE3NjQ4OSwyMzg0Mjk0LjM0MDc2MDQ2MjUsNDU5NjM4Mi4zMzUyODgwNjcsMy4wOTI1NzQzMTM0MDI2Mzg2RTcsMzg1NTQyMC41NzMwMTYyMzIsMzAzOTc4OS40MjgzNzcyNzE2LDUxMzk1NC44ODkzNzY5MTU3Niw2OTEyOTEuOTY1NjM5OTI3LDEuNDMxNDAxNTQ1Nzc5ODg2OEU3LDczMzYyODkuOTQzMTU5NDE4LDEwODY5MDEuMDA1MzIzNzc1MywyNjA4MDAzLjA5OTkxMTQwNzYsMTE1NjE2MC40MzkzMDA4MTkzLDEuMTEyMTMxNzIwMTE0NDgzRTcsNTQyNDMxNy44MjU5MDgxOCwyMzkxOTQzLjc1NjQ4MTU5MTYsMzYwMjc2NC4yMzY5MTY4MjU2LDM5ODg4ODcuNjAwODM4NTMxLDU2NzgxNjUuNzkwMzc1MDE0LDQ3MzUzNzEuNTU3NDgzODYsMTEzNzcxMS4zMzQ4NTQ5OTg5LDg4ODUyNTEuNzI5MDQ5OSw0NDA0NTkyLjc4MTY3MjI3OSw1MDA0MzI4LjI4MzcwMzEzOSwyNTMzODQzLjAxMjYwOTY0NCw4MDYxMjkuMzI5MDU2OTkyLDcyMDExOTEuMzkyNzMyODk3LDU3MzI0OC4zNTcwOTU1NzAyLDE1Mjg1NDAuNDc2NDY1MzQyOCwxMTA0MzA2LjI1NDIzMzI4NjMsNzUyNDg2Ni4wMTg1NjcxMSwxNjI1ODU5Ljg3MzAxNzYwMDMsMTc5NDMxMC4zNjk5NzI5ODMsMS42OTcwMzU0MDA0ODk5NDA1RTcsMS4wMTQ1ODg3MTA5NTM2Mzg1RTcsMzA3OTk1MC45MDE5MTA1NTU1LDMwNTk4NDcuNTkyNTIxMTk1LDEuMDk3NjQ0NzMxNDg3OTUzM0U3LDkzNzgwOS42ODY2Nzc3NjIxLDM1Nzg4MDAuNjE5MTIxMjgzLDY3MzQ2OS41MDA2OTE0MzQ0LDUwODY4NjUuOTkxNzY5MjI1LDEuODY1OTI1NDM2MTQxNzQ2RTcsMjAwMDc4Ni44NzU4ODY2MzA3LDYzMzA0NjAuNjYyNTcyNDgyLDU0MzU3NC45ODA3NTg3NTE1LDUyNzM4NjMuNjY5Mzg0Mzc1LDQ3ODc0OTAuNTgzODEzNzY0LDE2MDc0NzAuOTg2NTEwMDA3NCw0NDA2OTUuMzY2MzUzMTQzOAorOSxXZWQgMiBGZWIgMTEsNTgzMTIxLjcwNzE4NTk4NzgsNDEyMzQ1My4zMTk0MDA1MzI2LDI0Nzk2MTYuNTcxMzE2NTM1LDQ3NzI1NDAuMjE0MjIzMjYzLDMuMTg5NTcyMDEyNzUyMTMwM0U3LDQwMDI0MjEuNjc5MDI0NTk4NiwzMTYwMzkzLjMzNzgxNTkzNSw1MzMwOTguNTE1Nzk2OTYzNyw3MjE3MjQuMjAyMDcyNjQwOSwxLjQ4NjQxMzA0NTg2NjA1OTlFNyw3NjE2NjA4LjI5NDI3MTU4MywxMTI3OTkwLjIwMTA4ODg2NCwyNzEyOTU2LjI2NzQzOTQ2ODMsMTIwMTU5NC43MzcxNTYwMjU4LDEuMTU0OTMwNTA1MDc4NzQ3NUU3LDU2NDA2NjYuODA0NzM5NDMxLDI0ODk2OTAuODA2OTgxODIsMzc0NzUwOC41MDc5MTUwNDc1LDQxNDcxODIuNzU3MDY0MjQxNSw1ODk5Mzk1Ljc4MTQxNjMzNiw0OTIwMzkwLjExMjAwNDkxMywxMTgyOTUyLjYyNDMwMjQ4MzYsOTIzMjUyNC44ODgwODMxOTksNDU3NDM2OS4zMjc5NTc0OTEsNTE5OTE2My42MzI0NDk4MjUsMjYzNjMyMC4yNDg5Mzg5MDA0LDgzNzgwNS4wNDA4NDgwNjk0LDc0ODA4NDguNDczNjg5NTYsNTk1OTgzLjE5MDcwMzIzNDQsMTU4ODc4OS4wMzg3NDUzMzcyLDExNDc2NTkuMTM5ODc0NTM4LDc4MTgxNjAuNDg3OTEyMDYyLDE2ODk1NTkuNTQ0ODA4NzY2LDE4NjE1MjYuMzE2NjA2NzY3MiwxLjc2MzE4MzczNzY5ODk2MThFNywxLjA1NDM5NTU4MjgyODE5NzRFNywzMjAyMTc5LjQzMzIwMDQyMjcsMzE3OTA2NC4wMDkwNDEyNjIzLDEuMTQwNjYxNzc1OTI2Mjc1NkU3LDk3NDI0OC42Nzk5NjcxNjAyLDM3MjE2MzcuMTkwNDE2NjIwNiw3MDAzMDAuMDc5MTQ5MDI4NCw1Mjg1NTAzLjYzMjU1ODM4MSwxLjkzODIyMjUyMjIxNDQzNDdFNywyMDc3NDA5Ljc5NjA0MzQyMDIsNjU3NzEyMS4yMDkyMjUyMDcsNTY1MDkwLjA4OTI4NTg3MDcsNTQ3ODM4NS42NDU2NTA0MjQsNDk3NzQ3MC42MjAwMzExNTYsMTY3MzY5Ny42NDIyNDY3ODY1LDQ1ODE5OS4wOTQwNTgwNTE3CisxMCxUaHUgMyBGZWIgMTEsNTk3NTY3LjM5ODA0MTM1MjYsNDIzMDE2My4zMDQ5NTg5MzMsMjU0MzUwOS45MjQwODEzOTEsNDg5MDYxNC4wMDM3MzIxMzMsMy4yNTQ2Mjk0MDY4MzA3MzRFNyw0MTAwOTU0LjE4ODgwMzk0NzUsMzI0MTIzMS45MTI3NjcwOTI3LDU0NTkzNC43MTUzMTYwODI1LDc0MjEyMy41MDE0NzY5NzI3LDEuNTIzMjg1NTQ2OTI0MzY4MUU3LDc4MDQ0OTkuNjQyMjU3MjYxLDExNTU1MzMuMzAxNjA4NTMxMywyNzgzMzA1LjY2MjI0NzA5NjcsMTIzMjA0OC4xMzU1NjEyOTY3LDEuMTgzNjE3MTUwODQ1ODg4RTcsNTc4NTY4Mi41MTY0NzEwNjcsMjU1NTIxMC45NDM1ODY0MDc3LDM4NDQ1MjkuNDI3NzYwMDE3LDQyNTMyODUuMTEwNDAxNzczLDYwNDc2NzkuMDQ1NzI5NDYsNTA0NDQwMi4zMjk4NTUxMzc1LDEyMTMyNzcuMTE1MDQ2MTc4NSw5NDY1MjkxLjQyNDQ3NTE5Myw0Njg4MTY0Ljg5NjMxNDY4OCw1MzI5NzU1LjM1ODY4MTkwNSwyNzA1MDEwLjQwNDc5MDY1OSw4NTkwMzYuNDIzMjcwMjEwOSw3NjY4MjkzLjE0ODIzNDk1OCw2MTEyMjEuOTIyNDAyNzQ3OSwxNjI5MTcyLjE5NDM2MjYyNDMsMTE3NjcxNy4zODgyNTUwMTU1LDgwMTQ3NDYuMjg2MDM2MDcxLDE3MzIyNTUuNTg2OTI0MzE5MiwxOTA2NTg5LjA5NDUxOTg4NCwxLjgwNzUyMDgzMDg0MTQ4NUU3LDEuMDgxMDc3MDE2OTAxNTIwNUU3LDMyODQxMDYuOTg5NDc1MDQ1LDMyNTg5NzAuODkzODU1NDg1LDEuMTY5NDk0ODYyMDgzNTQ3RTcsOTk4NjcyLjUwOTYyODM2MTMsMzgxNzM3OC42Mzg1MDQ4NTYsNzE4Mjg0LjIxNjY3NTg4MjEsNTQxODY0NC4yMzA5NjI5NzIsMS45ODY2ODA3Nzk0NzA0NTNFNywyMTI4NzY4LjEzMjM4NTAyMTUsNjc0MjQ0OS43NTU2NTk0OTU1LDU3OTUxMS4yMjQ2NTczNjQsNTYxNTQ2OS43MzYxMTUwNTQsNTEwNDgxMC43NjM5NDM2OTEsMTcxODA4OS44MjE5MDIwMTE1LDQ2OTkzMS41MzY0MTA0MDk1CisxMSxGcmkgNCBGZWIgMTEsNjA3MjQ5Ljg5OTQ3MDg3MTcsNDMwMTY4OS45NzUyNzU5MDEsMjU4NjMzNi43ODIyNjAzOTUsNDk2OTc1NS40NzkxNjYxNTUsMy4yOTgyNjUzODY4ODE3MkU3LDQxNjY5OTguOTMwMDkyMTQsMzI5NTQxNi4zNzg2MjA2OTI1LDU1NDU0MS43Nzg2OTk1NTcxLDc1NTc5Ny41MzQ2MzkxNTMyLDEuNTQ3OTk5OTgzNTI3Mjk3OUU3LDc5MzA0MzkuMDE3NzA3NTU4LDExNzM5OTYuMTc1MzgzMzM0LDI4MzA0NjAuMjk2NTgwNjU4MywxMjUyNDYwLjE3NTQ4MzY4NjIsMS4yMDI4NDQ4MzczMDc3OTJFNyw1ODgyODg0LjMwNzk4MzU2OCwyNTk5MTI5LjIzMzEzMTk5ODcsMzkwOTU2MS42NDQzMjM0MzQ3LDQzMjQ0MDMuMzk4OTIxMjg5NSw2MTQ3MDY4LjE4MDA0MDU4Niw1MTI3NTIzLjYyNTc0OTA1MywxMjMzNjAzLjA3MTU3NzUxNCw5NjIxMzA3LjE5OTQ0NDE4Niw0NzY0NDM4LjA3NjU2ODk3OCw1NDE3Mjg2LjQyMjU5NTE4MSwyNzUxMDUzLjExNzM4MDYzNSw4NzMyNjcuMjA4NDYxMTg3OCw3NzkzOTMwLjU3ODU5MzM4NDUsNjIxNDM2LjEzMTQzMzI1NDEsMTY1NjIzOS45NzAwNTA3MDI2LDExOTYxOTQuMjc1MDYwODMwOSw4MTQ2NTEwLjk3NDU4MjIxOSwxNzYwODczLjQxNzIzNTIyOCwxOTM2ODAwLjI3MDMzMjgxNTYsMS44MzcyMzg0NTgyOTc1Njk3RTcsMS4wOTg5NjA3ODIzMzA0OTc3RTcsMzMzOTAyMS4zOTY1Mjc2Njg1LDMzMTI1MjkuNzEwMTQyNTA3LDEuMTg4ODIwNzkwMDcwODA4OUU3LDEwMTUwNDIuOTI4ODg5ODExLDM4ODE1NTIuNzA4NjM1NDQ0OCw3MzAzMzguNjg4MDYwMTkxNyw1NTA3ODgzLjkzMDE4MjI1OCwyLjAxOTE2MDU4OTIyNTQyRTcsMjE2MzE5Mi4yMjI2MTc2MTY0LDY4NTMyNjMuNzU3NDU2OTAxLDU4OTE3Ny4zODk1NTM1ODAzLDU3MDczNTIuMjM1NjgyNjMsNTE5MDE2NC4zMTUxNTM0NzMsMTc0Nzg0Ni4xNzY0Mzc1MzA0LDQ3Nzc5NS41Njc0MjUxNTc0CisxMixTYXQgNSBGZWIgMTEsNjEzNzM5LjgzNzA5MzE1NzMsNDM0OTYzMy44NDE1NDQyMTMsMjYxNTA0My4yMDYxMDI4MjA2LDUwMjI4MDIuMTc3ODQ1ODg5LDMuMzI3NTMxNjAxNTE2OTAwNkU3LDQyMTEyNjcuOTM2MzAyMTIsMzMzMTczNS4zNjU5OTQ2NzUsNTYwMzEyLjg4MTg3ODY1MSw3NjQ5NjMuNTAxNTI1NDg4OCwxLjU2NDU2NTQxMDI3NjM0NjVFNyw4MDE0ODUzLjk5MTczMzIxNywxMTg2MzcyLjMzMzE0OTI1MzYsMjg2MjA2Ny44MTQxMjQ2MDg0LDEyNjYxNDEuODg2NjE5ODQ5LDEuMjE1NzMyNjE4NjIwNDI2RTcsNTk0ODAzNy41Mzg1OTM3MDEsMjYyODU2Ny44NDgxODA0MDg2LDM5NTMxNTIuMzQwMTA1MDU4LDQzNzIwNzIuODcxODkyNjY2LDYyMTM2ODUuODU1NDMzNzc3LDUxODMyMzcuNTU3NTc1NjY0LDEyNDcyMjcuMjc1MDEzOTgxLDk3MjU4ODAuMzM2Nzc2OTI1LDQ4MTU1NjEuNzc3MTczNzQsNTQ3NTk1NS45NDgwOTIzNzIsMjc4MTkxNS40NzE4MzAzOTksODgyODA1Ljc2ODU5OTA4MzUsNzg3ODE0MS41OTEwMDg5OTUsNjI4MjgyLjU1MDM3NTg0MzMsMTY3NDM4Mi45MjcwMTg3MzE0LDEyMDkyNDkuMTYwNjMxNDcyNyw4MjM0ODI5LjA3NTE0NjAzLDE3ODAwNTUuMjE1NjMxMjU1OSwxOTU3MDU0LjI1ODU1OTUxMzgsMS44NTcxNTczMzQ0MDI4NDZFNywxLjExMDk0NzgyOTUzOTYxOTJFNywzMzc1ODI5LjY2MzMyMDkzMywzMzQ4NDI4LjY0MjgwMTQ4MiwxLjIwMTc3NDQ2ODE3MDcyMzNFNywxMDI2MDE1LjUzMzU1MDE4MDUsMzkyNDU2Ny44NzU2MTExNjIsNzM4NDE4LjY0OTEwMzQ3NjIsNTU2NzY5OC44MzE0NzkyMDIsMi4wNDA5MzA4MjM5OTAxOTM4RTcsMjE4NjI2NS45MzYwNTE4OTgsNjkyNzUzOS4xOTU4MzQ4MTgsNTk1NjU2LjQ0NzY5NzA3MzUsNTc2ODkzOC4zMDQ1NTk3MzIsNTI0NzM3NS40NTg4MzIyODQsMTc2Nzc5Mi4wOTU1NTYyODU3LDQ4MzA2Ni43MDk1Njk5MDMxNQorMTMsU3VuIDYgRmViIDExLDYxODA4OS43ODk1MDEwMjU3LDQzODE3NjkuODkyMzAzODQ2LDI2MzQyODQuNTY0ODAyNzIsNTA1ODM1Ny40NDkxMjkxOTgsMy4zNDcxNjMzMzMzODU3MDJFNyw0MjQwOTQwLjQ4OTMyNjA3NzUsMzM1NjA3OC45OTIxODMyMjQ4LDU2NDE4Mi43NDcwOTA5ODM5LDc3MTEwNy42MTU5Mjc4MDA4LDEuNTc1NjY4NTM1ODQ0MDc3NEU3LDgwNzE0MzQuOTEwMTY5MTE0LDExOTQ2NjguNDE5ODY1MDgxOCwyODgzMjUzLjkxNzQxMTc2NSwxMjc1MzEyLjIyOTkwMTY5OTYsMS4yMjQzNzA3NDg4NTg0MDcxRTcsNTk5MTcwOC4zMjkxOTY2OTMsMjY0ODMwMC41MTUzNjUxOTczLDM5ODIzNzAuNTQzNzA5MjY0LDQ0MDQwMjQuNDMwMTc1OTc2LDYyNTgzMzYuNzU3MDI5Mjc4LDUyMjA1ODAuMjYxNzY5MDQ2LDEyNTYzNTkuMjM5MjU0NTk1NSw5Nzk1OTcxLjMzNTc2MzQyMyw0ODQ5ODI3Ljc0MDk0ODE0OSw1NTE1Mjc5LjUzMTE4NTAwMywyODAyNjAyLjIzNDY3NDUwNzgsODg5MTk5LjExMDU4MjI2MjQsNzkzNDU4NC40MTQ4NjQ1NTEsNjMyODcxLjUxNTM2NjI2NjgsMTY4NjU0My41MzE3ODQ0NzM1LDEyMTc5OTkuMzUzNTc0NzcwMyw4Mjk0MDI0LjgzODM3MjA2ODUsMTc5MjkxMi4wMTAzNDUwNzY0LDE5NzA2MzMuMzM0NzYzMzE0MywxLjg3MDUwODA4NzIwNTgyNUU3LDEuMTE4OTgyMjg0NDQwODEyOEU3LDM0MDA1MDEuMjUwMDU0MjYzLDMzNzI0OTAuMTIwNDk2NjcyLDEuMjEwNDU2ODA1Mzg3NzE2N0U3LDEwMzMzNjkuOTc0ODMwODk4LDM5NTM0MDAuMDM0MDk1NTc3NCw3NDM4MzQuNDYxMzk0ODk4Niw1NjA3NzkwLjIxODA2OTEzNSwyLjA1NTUyMjQxNjk1OTI0MThFNywyMjAxNzMxLjQ0MzY2Njk0MDYsNjk3NzMyMi43NjIzMzczMSw1OTk5OTkuMTY3MzIyMTU0NCw1ODEwMjE2LjYzNTY3ODk1MSw1Mjg1NzIyLjUzODY5OTUzNSwxNzgxMTYxLjkxNTIxMDU1Miw0ODY1OTkuODE4MzY5Njk3NjYKKzE0LE1vbiA3IEZlYiAxMSw2MjEwMDUuMzk1MTYxODE1Myw0NDAzMzEwLjIwMzkxMDQ5OCwyNjQ3MTgxLjY3NTA3NzY4OCw1MDgyMTg4Ljg2OTkwNTkwMywzLjM2MDMzMjIyNjI4OTExNEU3LDQyNjA4MjkuMzcwMjIxMjc0LDMzNzIzOTUuODYyNjY1MTc1NSw1NjY3NzcuNjk1OTMyODQ5OCw3NzUyMjYuMTI3NjIwNDcyLDEuNTgzMTEwNTEwMDgwNDRFNyw4MTA5MzU5LjQ5MTc5MDU0NSwxMjAwMjI5LjUxOTk0Mzc3OCwyODk3NDU0LjY4NDUxNjMxNywxMjgxNDU4Ljc3MjE1NzAyMzQsMS4yMzAxNjA1MjI5MDMyNTQ0RTcsNjAyMDk3OS45MTExMzAwNSwyNjYxNTI3LjI5Nzk2MzU2NDMsNDAwMTk1NS4wNzc4NjgzNzU1LDQ0MjU0NDAuNjk4MTUzNDI4LDYyODgyNjQuMzA2MzkyODMyLDUyNDU2MDkuNTEzMjU1MTE5LDEyNjI0ODAuMTY4MTMyOTkzNCw5ODQyOTUwLjQxNTA2ODU0Myw0ODcyNzk0LjcyMDUyODY3LDU1NDE2MzYuMzk2NzM2NTUzLDI4MTY0NjguMzg5MDk0NzcsODkzNDg0LjMzMDg2MzMwNzEsNzk3MjQxNS40OTc2OTM3NDksNjM1OTQ3LjM3MTkwNzUwMDcsMTY5NDY5NC4zNzE2NjU2MTY1LDEyMjM4NjQuMjc2MzQwODY4LDgzMzM3MDEuMTg2Mjg2MzQ3LDE4MDE1MjkuNDA5NjY3OTk3MiwxOTc5NzM3LjI1MzcyMjk5OCwxLjg3OTQ1NjUxNzEwMDU0ODdFNywxLjEyNDM2NzQ3MDcyMjU4MTNFNywzNDE3MDM3Ljk1MDE3MDQ4NTMsMzM4ODYxNy40NzgyMDI5NTY3LDEuMjE2Mjc2MjMzNjM3NTkxRTcsMTAzODI5OS4zMjY3NzA3MTc2LDM5NzI3MjUuNjIzMDYyODcxNCw3NDc0NjQuNTU2MzM0NTAxNCw1NjM0NjYxLjc3OTkxMTA0NiwyLjA2NTMwMjQ5OTQwOTc3NkU3LDIyMTIwOTcuNDQyODA3OTkzLDcwMTA2OTAuNTE0NjM2NjIzLDYwMjkwOS45NjMzMzIwNDI3LDU4Mzc4ODMuNjMwMjI3MTE2LDUzMTE0MjUuNTUwODg1MzI0LDE3OTAxMjMuNzUyMzg1MzA4NSw0ODg5NjcuOTY5MTM0OTM5CisxNSxUdWUgOCBGZWIgMTEsNjIyOTU5LjYxNDY3MDk1OTksNDQxNzc0OC4zNTE2NzA2NiwyNjU1ODI2LjM1OTA3ODAzMjQsNTA5ODE2Mi4yMjU0NTA3OTgsMy4zNjkxNjU4NDIxMDg1NjJFNyw0Mjc0MTYwLjQ3MjEzNTU3NSwzMzgzMzMyLjYxODQ2Mzk5ODcsNTY4NTE3LjczMDExNTQ5MSw3Nzc5ODYuODQwOTU1ODcxLDEuNTg4MDk4NTY2MzcwNDQzM0U3LDgxMzQ3NzkuMjc3NzA1NTQ0LDEyMDM5NTcuMjgxMjI5MTI4MSwyOTA2OTczLjI3Mjg2MTc3LDEyODU1NzguNTczMjMxMjMyMSwxLjIzNDA0MTE2NjM4OTk5NjZFNyw2MDQwNjAwLjAxODA5NDUwNCwyNjcwMzkzLjE5NDI0OTM0OSw0MDE1MDgyLjMwNTExNDc4OSw0NDM5Nzk1LjQ0Njg0MTYwNiw2MzA4MzIzLjQ0Mjk4OTQ5LDUyNjIzODUuNTc4MDI3MzMxLDEyNjY1ODIuODc1MjA2NDA3NCw5ODc0NDM4LjU0NjE2ODAyMiw0ODg4MTg4LjQ5MzE4NDM4NCw1NTU5MzAyLjI0OTMyMjU2MjUsMjgyNTc2Mi43NTAyMzk5NzA2LDg5NjM1Ni41NTU5MDg3NTEzLDc5OTc3NzEuOTc5NTA0MTI3LDYzODAwOS4wMzM4ODc1OTcsMTcwMDE1Ny42MDM1MDAyMTg0LDEyMjc3OTUuMzEyNzY1MDc5Myw4MzYwMjk0LjUyNzY4MjM4MywxODA3MzA1LjMxMjAxOTczMywxOTg1ODQwLjgzODk5NjcyMDcsMS44ODU0NTQyNjMyMjA4NTdFNywxLjEyNzk3Njk1NDk2ODExN0U3LDM0MjgxMjIuMDU2MjE0Mzg3LDMzOTk0MjYuOTQ1Njc1MzQ1NiwxLjIyMDE3Njc2NzkyNDYzNTVFNywxMDQxNjAzLjI1MTUyNjc5NDUsMzk4NTY3OS4xNTk2NDc5NTk4LDc0OTg5Ny43MjYwNTg1MzY0LDU2NTI2NzIuNjU3NzY5NDE3LDIuMDcxODU3NjQ3ODUzMTAwM0U3LDIyMTkwNDUuNDIwOTczNDQyLDcwMzMwNTUuNDcxMDMzNTE0LDYwNDg2MC45ODM3NDEwMzkzLDU4NTY0MjcuNTcxMTc5NTAxLDUzMjg2NTMuNTg4MDAwNzg4LDE3OTYxMzAuOTAzNDQyMjQyNiw0OTA1NTUuMjc5MDY2MDQ0MQorMTYsV2VkIDkgRmViIDExLDYyNDI2OS40NTQ0ODA4MDA5LDQ0Mjc0MjYuMDI2MDcyMTA0LDI2NjE2MjAuNzI0Mjg0ODc4LDUxMDg4NjguNjA1ODI0NzE5LDMuMzc1MDkxMzYwNDczNjJFNyw0MjgzMDk2LjAzNzE4MTExMSwzMzkwNjYzLjIzMDE5NjI5OSw1Njk2ODQuNDkzNzgxMzg4Nyw3Nzk4MzcuMzk3MzQzNzExOSwxLjU5MTQ0MTg2MjE3Mzk1NjhFNyw4MTUxODE3LjQ2MDE1MjcsMTIwNjQ1Ni4xMDM5MDA5NzgsMjkxMzM1My40NTgzNjUyMTYsMTI4ODMzOS45MjQ4OTc0NTUsMS4yMzY2NDIyMDEwNjQzMzlFNyw2MDUzNzUwLjk1MTcxNDM3LDI2NzYzMzUuOTkzODQyMTIxNyw0MDIzODgxLjI5NDMwNzE4NDQsNDQ0OTQxNy4wNTAxNTgzNjc1LDYzMjE3NjguMjE1OTcyMTgsNTI3MzYyOS44NzkwMTE5NzQsMTI2OTMzMi44MTg0NjgyNjIsOTg5NTU0My43NDI3NTcxNTMsNDg5ODUwNi4yNzg5MTMyOTMsNTU3MTE0Mi45MDEwMzQ4MywyODMxOTkyLjY3ODg0MjA1MzMsODk4MjgxLjcwMjgxNjU3MzMsODAxNDc2Ny4zMDE3NzQyNyw2MzkzOTAuOTA5MzQzMDk3NCwxNzAzODE5LjQyMzM5ODA1NjMsMTIzMDQzMC4xMzg3NzQ1NjU3LDgzNzgxMTguOTAxNTMzMTM5LDE4MTExNzYuNjcyMjM1OTIzNiwxOTg5OTMyLjg4MTc4MDAzNzcsMS44ODk0NzQyOTQ4NTkwMzg3RTcsMS4xMzAzOTYyNTQ3MDA3NzM4RTcsMzQzNTU1MS40MzU3NjgyMDIsMzQwNjY3Mi4wNjQ5MDY1NTA2LDEuMjIyNzkxMTQzNjExODI3M0U3LDEwNDM4MTcuNzI1ODU4MDMyNywzOTk0MzYxLjY0NDAxNDgyMyw3NTE1MjguNjI0MzAzMDY3Miw1NjY0NzQ0LjU5NTY2NzA1NSwyLjA3NjI1MTI3MDQ3NjM5NTNFNywyMjIzNzAyLjQxODUyMzU4NjQsNzA0ODA0NS43MzYyMjA0NTIsNjA2MTY4LjY5NTE2MTQwNSw1ODY4ODU2Ljc0NTY3MjQyMyw1MzQwMjAxLjA3ODg5MjE2MSwxODAwMTU3LjUxODAxMzY4MzYsNDkxNjE5LjIxMTc5NTU1Mzc0CisxNyxUaHUgMTAgRmViIDExLDYyNTE0Ny4zOTEzODU1MjgzLDQ0MzM5MTIuODI2NzY4NTYxLDI2NjU1MDQuNTc1OTgzNzEzLDUxMTYwNDQuNzIyMDIyOTA3LDMuMzc5MDY2MTM3NzIyMTI2NEU3LDQyODkwODUuMzY3NDA5NTg2LDMzOTU1NzYuNzQxNjU3OTY2Nyw1NzA0NjYuODQ5NDc5MDE2MSw3ODEwNzcuODU4OTY2ODM4NywxLjU5MzY4Mjc0MTgxNzc3MTNFNyw4MTYzMjM3LjY5MjAzMzQxMSwxMjA4MTMxLjEzNDQ4NTIwNzcsMjkxNzYzMC4wMTM2MTgwODM3LDEyOTAxOTAuNzU4MTI2MjIxNCwxLjIzODM4NTU2Nzk3ODEyOTNFNyw2MDYyNTY1LjczOTAzNDg1ODUsMjY4MDMxOS40NDUzMDk5NDM1LDQwMjk3NzkuMTI4ODk3MDUwNCw0NDU1ODY2LjE1Mzc2ODg0NSw2MzMwNzc5LjY2OTkyMjkwMiw1MjgxMTY2LjQ3MDMxNDI2LDEyNzExNzYuMDM3NzQwMTk1NCw5OTA5Njg5LjY5MDU1NTIxNyw0OTA1NDIxLjg1MjI0MDE4LDU1NzkwNzkuMTc3MjM1MTEyNSwyODM2MTY4LjU0NTM3OTI4NzYsODk5NTcyLjA1ODMzODU0OSw4MDI2MTU4LjUxNTQxNzQwOCw2NDAzMTcuMTQyNjYwNDM2OCwxNzA2MjczLjgxODEzNDA0ODcsMTIzMjE5Ni4xNjQwNjQ5NDg0LDgzOTAwNjUuODE3NTE4NDE3LDE4MTM3NzEuNDkzNDQyMzU4MiwxOTkyNjc2LjMxMTYyMTMzNCwxLjg5MjE2ODc1MDM2NjUwMDRFNywxLjEzMjAxNzgxOTUwOTU5ODZFNywzNDQwNTMxLjE1MDU5NjM3MDUsMzQxMTUyOC4xNTcxOTE3ODcsMS4yMjQ1NDM0NTc5MTUwNjc3RTcsMTA0NTMwMS45OTA0Njg0MzczLDQwMDAxODEuMzMxOTg1NDgyNSw3NTI2MjEuNzc4MzUxMDc1NCw1NjcyODM1LjkxMzE2OTMyNCwyLjA3OTE5NjEyMDQ2OTIwODRFNywyMjI2ODIzLjg1MDM4MTgyNCw3MDU4MDkzLjA2NzczMDIzMiw2MDcwNDUuMjE1NjcxMjg5LDU4NzcxODcuNDY5Mzc4ODg1LDUzNDc5NDEuMDUzMDUwMTkzLDE4MDI4NTYuNTcyMDA4MDc3Myw0OTIzMzIuMzM4NDI1ODg1OAorMTgsRnJpIDExIEZlYiAxMSw2MjU3MzUuODQwMjExOTk5NSw0NDM4MjYwLjgzMjY4NzAyMywyNjY4MTA3Ljg0NzM2ODM3OSw1MTIwODU0LjYyNzQ0NDUwOSwzLjM4MTczMjM2OTIyMjg4N0U3LDQyOTMwOTkuODk3OTA1NjE3LDMzOTg4NzAuMTM2MzYwMTcyLDU3MDk5MS40NDE4MTQ4NzI3LDc4MTkwOS4zNjI5NjY4MDEzLDEuNTk1MTg0NzE2MjExNzcxRTcsODE3MDg5Mi4zNjg4NDQ1MDgsMTIwOTI1My45NTQxMzU0NDQyLDI5MjA0OTYuNTMzMDQ1NTY1NywxMjkxNDMxLjMwNDM1NzIwNzQsMS4yMzk1NTQwNzYwNTIxMDU2RTcsNjA2ODQ3NC4xMDE0NzQxNzE1LDI2ODI5ODkuNTQ4MTEzNDk5Myw0MDMzNzMyLjM2MTkyNTgsNDQ2MDE4OC44MTYxMTg3MDUsNjMzNjgxOS42NjI2ODIzNTksNTI4NjIxNy45MzgyNjEzNTIsMTI3MjQxMS41MDIzNzM1MzYxLDk5MTkxNzEuMTQyMTUwMTcxLDQ5MTAwNTcuMDY5ODE4MTA2NSw1NTg0Mzk4LjUyMTU1MjQzNCwyODM4OTY3LjU5MjIxMjAxMTYsOTAwNDM2LjkzNjYxODAwNiw4MDMzNzkzLjU0NTg2Njk2NSw2NDA5MzcuOTcxNTk0NDQ4OSwxNzA3OTE4LjkxNjY5Mjg5NSwxMjMzMzc5Ljg2NTAxOTI0MjUsODM5ODA3My4zMjc1MTQ3ODYsMTgxNTUxMC43MDA5ODIyOSwxOTk0NTE1LjU4NDMxODQwNTMsMS44OTM5NzQ3Mjk0NDQwNTU2RTcsMS4xMzMxMDQ2OTMxMzUwNTQ4RTcsMzQ0Mzg2OC45MjA5NDE3ODAzLDM0MTQ3ODIuOTg4NDc4NjUyLDEuMjI1NzE3OTY2MzE5ODQ1NkU3LDEwNDYyOTYuODI4MDczNTY3OCw0MDA0MDgyLjE0NzYzMzY1Myw3NTMzNTQuNDk0NzQ3MzcxMSw1Njc4MjU5LjE4ODIzNTM1LDIuMDgxMTY5OTIzNDc1NzRFNywyMjI4OTE2LjA0NDU2MzU2MjYsNzA2NDgyNy4zNjUzMTE4NzgsNjA3NjMyLjcyMTY3NzU2MjIsNTg4Mjc3MS4xODYwNDI4ODEsNTM1MzEyOC45NTEyNTExMTcsMTgwNDY2NS43NTc0NjY5NDQyLDQ5MjgxMC4zMjg4NDI4MTM1NgorMTksU2F0IDEyIEZlYiAxMSw2MjYxMzAuMjU2MDcyNTg2Miw0NDQxMTc1LjIzNjQ3MTE3LDI2Njk4NTIuNzcwNDMxMzUyMyw1MTI0MDc4LjU0NDcyMjY1NSwzLjM4MzUyMDgzODcxMDg2M0U3LDQyOTU3OTAuNzYwNTE3Nzk0LDM0MDEwNzcuNjEwNjAyMjUzLDU3MTM0My4xOTM0MDQ1OTYyLDc4MjQ2Ni43MzUyMjk3OTYsMS41OTYxOTE0MzE3OTkwNzAyRTcsODE3NjAyMy4wOTc3OTk3MDUsMTIxMDAwNi42MTEzNDc2MTg1LDI5MjI0MTcuOTIzODY4MzM2LDEyOTIyNjIuNzk3NTgzMDc5NCwxLjI0MDMzNzI4MDA0Njg4NUU3LDYwNzI0MzQuMzUwMTQwNjg5LDI2ODQ3NzkuMzE0ODkwOTQzNSw0MDM2MzgyLjE1Njg1Nzg1MzgsNDQ2MzA4Ni4xODE4ODc1ODcsNjM0MDg2OC4wMTMzNDUwNjEsNTI4OTYwMy43MzEwMjIxMzcsMTI3MzIzOS42MDQwNzgyMDE2LDk5MjU1MjYuMTc0MTkyNDM4LDQ5MTMxNjMuODYyNzI5NTQ1LDU1ODc5NjMuODUwMzk3NTc2LDI4NDA4NDMuNzY4ODk2MjgyLDkwMTAxNi42MzMxMzc0MTI0LDgwMzg5MTAuOTczNzYwNzAzLDY0MTM1NC4wOTYzNTA5MDIzLDE3MDkwMjEuNTcxMzQyNzUwNywxMjM0MTczLjI1NTg1MzQ2MTYsODQwMzQ0MC40MjI5OTYyNjIsMTgxNjY3Ni40MjQzMzA3NDAyLDE5OTU3NDguNjgwNjA5NDUzNywxLjg5NTE4NTIwMDkzMjIxNzhFNywxLjEzMzgzMzE4MzYzOTIzNDdFNywzNDQ2MTA2LjEzOTg1OTM0NSwzNDE2OTY0LjU2MzY3NzM4NDUsMS4yMjY1MDUxOTQwMTU1NTIxRTcsMTA0Njk2My42MjQ0NTEyNjk2LDQwMDY2OTYuNzgzMzQxODM1Myw3NTM4NDUuNjE3OTk2MTQ2Niw1NjgxODk0LjE4NjA5MjEwNiwyLjA4MjQ5Mjg3NzE1MTg1MUU3LDIyMzAzMTguMzc1MTMyNDczNyw3MDY5MzQxLjA3OTIyOTY4Nyw2MDgwMjYuNTA5Nzg5MzQ2NSw1ODg2NTEzLjcwNjcyMjg3MDUsNTM1NjYwNi4yNjE0Mzg3NTIsMTgwNTg3OC40NjA5MDM0NDc2LDQ5MzEzMC43MTM1NDcyNDk1CisyMCxTdW4gMTMgRmViIDExLDYyNjM5NC42MTg4NTM5MDU0LDQ0NDMxMjguNzE4MTQ0Nzg5LDI2NzEwMjIuMzU5MTAyNjYyLDUxMjYyMzkuNDI5MDQ2NTM1LDMuMzg0NzIwNTE0MzU3MzI1RTcsNDI5NzU5NC4zOTUwNjY1MjIsMzQwMjU1Ny4yMjE2MzA5MjYsNTcxNTc5LjA0OTI5NTE3NDQsNzgyODQwLjM1MjAwMDg2MTksMS41OTY4NjYxOTQ4OTQ4MzcyRTcsODE3OTQ2Mi4wOTI5MjA4MDQsMTIxMDUxMS4xMzgzNDQ2NzkzLDI5MjM3MDUuODA3Mjk2NjUzLDEyOTI4MjAuMTE3NTExOTQ1MywxLjI0MDg2MjIzMDUxNDQxNUU3LDYwNzUwODguODIwMTQyMDk4LDI2ODU5NzguOTkzNDgxOTQ3LDQwMzgxNTguMjc2MTc2MjI5Niw0NDY1MDI4LjIwOTQ0NTQzMiw2MzQzNTgxLjQ1MTg0OTM5Nyw1MjkxODczLjA5MDM5NDg3NywxMjczNzk0LjY2MDQ0MDY5MjQsOTkyOTc4NS42OTU0Mjg1MzksNDkxNTI0Ni4yMTc1NDM0LDU1OTAzNTMuNTM4NjIwMDQ3LDI4NDIxMDEuMzUzODA5NDE5Niw5MDE0MDUuMTgyNzYwMTUzLDgwNDIzNDAuOTYzOTA0MjA0LDY0MTYzMy4wMTM0OTcxMjM1LDE3MDk3NjAuNjQ0MDgzNTA5NSwxMjM0NzA1LjAzNjQxOTIzNTksODQwNzAzNy43NjE0OTA0MzMsMTgxNzQ1Ny43NjM2NzcxMTM3LDE5OTY1NzUuMzc3ODUxMzI2NywxLjg5NTk5NjUyOTEyMDU4MUU3LDEuMTM0MzIxNDYzNTM3NTY2MkU3LDM0NDc2MDUuNjg4NTMwMTU5NiwzNDE4NDI2Ljc4MTQxNTEyMiwxLjIyNzAzMjg0MjUyMTY2ODZFNywxMDQ3NDEwLjU0OTI0Mzk2NjUsNDAwODQ0OS4zMTk0OTQ5Myw3NTQxNzQuODA2ODQ2MjEzMSw1Njg0MzMwLjU3NjE3NjQ4OCwyLjA4MzM3OTU5NTQ0ODU3NjdFNywyMjMxMjU4LjMxMjg3Njg2MzQsNzA3MjM2Ni40MzEyMTQ3MSw2MDgyOTAuNDU0NDkzNDUwMSw1ODg5MDIyLjE1NTUwNzgxOSw1MzU4OTM3LjAxMDI1NjEwNywxODA2NjkxLjM0MDMyOTkzOCw0OTMzNDUuNDU5MjEzMzgzNjcKKzIxLE1vbiAxNCBGZWIgMTEsNjI2NTcxLjgxMTgzODU0OTMsNDQ0NDQzOC4xMDgwMzY3MTQsMjY3MTgwNi4zMTIxNTQ1MzIsNTEyNzY4Ny43OTg3MTY2ODksMy4zODU1MjUyMzQzMzc1MzI1RTcsNDI5ODgwMy4zMzgwNTg0MTQsMzQwMzU0OC45NjU1MDc0MzQ3LDU3MTczNy4xOTM3NjQ4OTYsNzgzMDkwLjc5NDEyMTY5NjMsMS41OTczMTg0NjMxNTg4MzFFNyw4MTgxNzY3LjE2Mzk3OTY5MDUsMTIxMDg0OS4zMzY3NDc1NzEsMjkyNDU2OS4wNTg5NDkxMjU1LDEyOTMxOTMuNjY5MDQ3NTg1LDEuMjQxMjE0MDg0MTI3MDAzMUU3LDYwNzY4NjguMDU0Nzc3OTcxNSwyNjg2NzgzLjEzNjY2MDIzNSw0MDM5MzQ4Ljc4MzM5NjYwMDcsNDQ2NjMyOS44OTkyNTE5MTEsNjM0NTQwMC4xNTU3NDU4ODMsNTI5MzM5NC4xNTAyNzYwMDQsMTI3NDE2Ni43MDEyMTMxMDg2LDk5MzI2NDAuNjgxMjg1NDgsNDkxNjY0MS45MzQ2NDU0OTYsNTU5MTk1NS4yNDU1NDQzOTksMjg0Mjk0NC4zMDIwNjY2OTksOTAxNjY1LjYxMzU4NTAyMjMsODA0NDYzOS45Mzg2MDc2MDUsNjQxODE5Ljk2NDEyNDE2NjIsMTcxMDI1Ni4wMjAwNTMxNzE4LDEyMzUwNjEuNDY5MzY5OTM1LDg0MDk0NDguOTA3MTA1MTk0LDE4MTc5ODEuNDY1NDA2OTY2NiwxOTk3MTI5LjYxMzczODQ2NTYsMS44OTY1NDAzMjg1MTA3OUU3LDEuMTM0NjQ4NzM5MzQzMjY5MkU3LDM0NDg2MTAuNzk2NDY0NDgxLDM0MTk0MDYuODQ0NTY5MDUwNywxLjIyNzM4NjUwNTE1MjI4MzZFNywxMDQ3NzEwLjEwMzczNzYxNzUsNDAwOTYyNC4wMDgyNzExNzksNzU0Mzk1LjQ1NDczNzIwNTEsNTY4NTk2My41ODkxMDk2MDMsMi4wODM5NzM5MjQ0MjE4NjE4RTcsMjIzMTg4OC4zMjM3NjE1ODUsNzA3NDM5NC4xOTc3MTI3MzIsNjA4NDY3LjM2ODk2NzQ5MDQsNTg5MDcwMy40NjAzMzc3OTIsNTM2MDQ5OS4yNDk1NzU3MDQsMTgwNzIzNi4yMTYzMDU0NDk2LDQ5MzQ4OS4zOTc3NTI1OTk3CisyMixUdWUgMTUgRmViIDExLDYyNjY5MC41NzgwNzcwNjIzLDQ0NDUzMTUuNzcyNzc0OTU2LDI2NzIzMzEuNzgxMDIwMzE0LDUxMjg2NTguNTkzODYyNjQyNSwzLjM4NjA2NTAyMzc1Njg5NzRFNyw0Mjk5NjEzLjY3MDczMjY4LDM0MDQyMTMuNzA1MTAyMjkxNCw1NzE4NDMuMjMwOTA0NzA3LDc4MzI1OC42NzAwMzI5MzE4LDEuNTk3NjIxNjAxNzA3NDE4NEU3LDgxODMzMTIuMTk1NTAzMTA0NSwxMjExMDc2LjA0MDQ3MTUzOTgsMjkyNTE0Ny42ODU0MjU3MjEsMTI5MzQ0NC4wNDcyODI5OTk4LDEuMjQxNDQ5OTE3ODc1OTUxMkU3LDYwNzgwNjAuNjM3OTE0ODExLDI2ODczMjIuMTUyOTE1NDA2NSw0MDQwMTQ2Ljc2MzI5NjY0OCw0NDY3MjAyLjM4NzY3MTQyMyw2MzQ2NjE5LjE1NzAzMzAyMiw1Mjk0NDEzLjY1NTU1NzA2MSwxMjc0NDE2LjA3MTExNTI3NzIsOTkzNDU1NC4yNjQxMDk4NSw0OTE3NTc3LjQyNzE0NjQ2Nyw1NTkzMDI4LjgwMjMzMTI5NCwyODQzNTA5LjMyMjk4OTQyMTQsOTAxODQwLjE3MTAzMDI1MzMsODA0NjE4MC44NDI5OTgzOSw2NDE5NDUuMjcyMDkzODE0MywxNzEwNTg4LjA1NDIxMjU2NTUsMTIzNTMwMC4zNzMzMjAyNjY0LDg0MTEwNjQuOTk3Nzc3MzEzLDE4MTgzMzIuNDgyNjM3NDQxNywxOTk3NTAxLjE4NDQ1Njc3MzgsMS44OTY5MDQ4MTQ2NDk2NDM0RTcsMS4xMzQ4NjgxMDAxNjMwNDE0RTcsMzQ0OTI4NC40OTM4OTA3MDIzLDM0MjAwNjMuNzM5OTgxNzkyNCwxLjIyNzYyMzU1MTc1OTkzMzdFNywxMDQ3OTEwLjg4MjMzMDE4MDcsNDAxMDQxMS4zNzc5NTM1MzQ1LDc1NDU0My4zNTAwNzUzNzY4LDU2ODcwNTguMTMxNDM3OTQ1LDIuMDg0MzcyMjc3NjQzNjgwMkU3LDIyMzIzMTAuNjAwNjI2NDAwNyw3MDc1NzUzLjMyNDk5MzA2Nyw2MDg1ODUuOTQ5NjIxMTM4NCw1ODkxODMwLjM2NjgxMjYxMyw1MzYxNTQ2LjM3NzQxOTU5OCwxODA3NjAxLjQ0ODYxNjI3Myw0OTM1ODUuODc2MDkyNjkwOQorMjMsV2VkIDE2IEZlYiAxMSw2MjY3NzAuMTgyOTY2OTIyMiw0NDQ1OTA0LjA1ODUzOTk3OCwyNjcyNjgzLjk5Mjg2MzEyNDIsNTEyOTMwOS4yODY3MjAxOSwzLjM4NjQyNzEwMjE0MTM1N0U3LDQzMDAxNTYuODIyNDE1NTg1LDM0MDQ2NTkuMjYyNDYxMjIxMyw1NzE5MTQuMzI5MTM2NzE0OSw3ODMzNzEuMjAwMzExMzE1NywxLjU5NzgyNDc4NDI5MTE2NzJFNyw4MTg0MzQ3Ljc5MjE1NDQwNCwxMjExMjI4LjAwNjIyMDc2MiwyOTI1NTM1LjUzMTMyNjg1MjcsMTI5MzYxMS44NjY4OTY4MzEsMS4yNDE2MDc5ODgxMjgxOTFFNyw2MDc4ODYwLjAwMTA5NjcyNiwyNjg3NjgzLjQ1NDkwMjE5MDIsNDA0MDY4MS42Mzc3OTY2MjgzLDQ0Njc3ODcuMTkzNzY2NTcsNjM0NzQzNi4yMDI5ODY3NDUsNTI5NTA5Ni45ODkxNjI1MjgsMTI3NDU4My4yMTc3MjcxNjEyLDk5MzU4MzYuODYyNTE3ODA0LDQ5MTgyMDQuNDUwMTMxMDE4LDU1OTM3NDguMzYyNTU1OTIyLDI4NDM4ODguMDUxNjM3MjYsOTAxOTU3LjE3MDY1MzQ0OTQsODA0NzIxMy42NDU3MTQ3MzcsNjQyMDI5LjI2MjY2MTAwNjksMTcxMDgxMC42MDU3ODkyNjUsMTIzNTQ2MC41MDE5MjM5NTE4LDg0MTIxNDguMTk2NTQ1MjM2LDE4MTg1NjcuNzU2MTE2NzkzMywxOTk3NzUwLjI5MjA4NzcyODIsMS44OTcxNDkxMTQ2NDk2MDE3RTcsMS4xMzUwMTUxMjk2MTAyMjlFNywzNDQ5NzM2LjA1NTYxOTA4NDMsMzQyMDUwNC4wMjk3MDQ5NzMsMS4yMjc3ODI0MzUxMjQyMTI1RTcsMTA0ODA0NS40NTU3MDU4NjIsNDAxMDkzOS4xMzU2NzEwODg1LDc1NDY0Mi40ODEwMTY0MDk5LDU2ODc3OTEuNzU4OTkxMTg5LDIuMDg0NjM5Mjc2ODQ1Nzc5RTcsMjIzMjU5My42Mzk5NjA3MTU1LDcwNzY2NjQuMjkxNjIxNzIyLDYwODY2NS40MzA4MTM4MDc1LDU4OTI1ODUuNjg0MTkzMDU1LDUzNjIyNDguMjM5NzAwNTk2LDE4MDc4NDYuMjY1MTM5Nzc0NCw0OTM2NTAuNTQzMDc2Mjg5MQorMjQsVGh1IDE3IEZlYiAxMSw2MjY4MjMuNTM5Mzk1NTU4Miw0NDQ2Mjk4LjM3Nzg1Njc1MiwyNjcyOTIwLjA3MzgxNzM1OTcsNTEyOTc0NS40MjU1NDU5NzcsMy4zODY2Njk5NzUyODAwOTNFNyw0MzAwNTIwLjg4NzYwNDkwMSwzNDA0OTU3LjkwNzgwMzc3Myw1NzE5NjIuMDAwMzgwNTk2Myw3ODM0NDYuNjMxNDA0ODAyOCwxLjU5Nzk2MDk3MDE2MDQ5NzJFNyw4MTg1MDQxLjkyNzU1NDI3MSwxMjExMzI5Ljg3MzAzNzg4MzUsMjkyNTc5NS40OTk0Njg4NTQ2LDEyOTM3MjQuMzUwNDMxNDY0MSwxLjI0MTcxMzkzNjU3MzIxMDdFNyw2MDc5Mzk1Ljc5NzMyODc2MiwyNjg3OTI1LjYzNTIxOTUzMyw0MDQxMDQwLjE1NjUzMzMyMTQsNDQ2ODE3OS4xNzM5OTQ0OCw2MzQ3OTgzLjgzNTE1OTc1OSw1Mjk1NTU1LjAwMDQ4MDE3MywxMjc0Njk1LjI1MjA2ODYyMzIsOTkzNjY5Ni41Mzc0Mzg4MjcsNDkxODYyNC43MTg2NDA0MzUsNTU5NDIzMC42NTM4NjE2MzIsMjg0NDE0MS45MTAxODk1LDkwMjAzNS41OTEzNDA3Mjc0LDgwNDc5MDUuODg5NzU5MTg5LDY0MjA4NS41NTkyODk3NzMxLDE3MTA5NTkuNzc0ODE4Njk1LDEyMzU1NjcuODMwMzEwOTQ4NCw4NDEyODc0LjIyMDE0ODM4OCwxODE4NzI1LjQ1MTAwOTI5LDE5OTc5MTcuMjk3Nzk2ODAyLDEuODk3MzEyODU4OTAyMTQ5NkU3LDEuMTM1MTEzNjc4MDM2MTg4N0U3LDM0NTAwMzguNzI1NjQ2ODU2NywzNDIwNzk5LjEzNzczMDI2OSwxLjIyNzg4ODkyODY1MzZFNywxMDQ4MTM1LjY1NDU2ODQyMDMsNDAxMTI5Mi44ODA4NTI1NDMsNzU0NzA4LjkyNjI3NzYwNTYsNTY4ODI4My40ODAwODgwMDk1LDIuMDg0ODE4MjM1MTIyODI4RTcsMjIzMjc4My4zNTI3MzE2ODYsNzA3NzI3NC44NzQ5NzE0Nyw2MDg3MTguNzA0NzcyNzUxNSw1ODkzMDkxLjk0MTQ2MTc5OCw1MzYyNzE4LjY3OTYwMjQ1NSwxODA4MDEwLjM2NjUzMjA2MTcsNDkzNjkzLjg4NzcxOTU4NjY3CisyNSxGcmkgMTggRmViIDExLDYyNjg1OS4zMDI0MDE5OTE4LDQ0NDY1NjIuNjg0MzIzMzgzNSwyNjczMDc4LjMxNDQzOTEzNzUsNTEzMDAzNy43NTU3NzM3NTEsMy4zODY4MzI4ODgwMTQ4MjJFNyw0MzAwNzY0LjkxNDM0ODg3NCwzNDA1MTU4LjA4MTkyMTc3NjgsNTcxOTkzLjk2MzY0NTYzNjgsNzgzNDk3LjE5NDIzOTUwODUsMS41OTgwNTIyNTA2MzEyNjk4RTcsODE4NTUwNy4xOTAwMTE0MywxMjExMzk4LjE1NzE1Nzk1OTQsMjkyNTk2OS43NTI3OTQyMDk0LDEyOTM3OTkuNzQ0MTcxMzE3NCwxLjI0MTc4NDk0OTgwNDYwNzRFNyw2MDc5NzU0LjkzMDI0MDA0MSwyNjg4MDg3Ljk2ODQxNzc1NSw0MDQxMjgwLjQ2NjUzMzYzMzQsNDQ2ODQ0MS45MDgxMTg3MzQsNjM0ODM1MC44OTA1MjUzNjMsNTI5NTg2MS45ODczMjg3NTgsMTI3NDc3MC4zNDU5OTI2MTgsOTkzNzI3Mi43NDM2NjQ2NTIsNDkxODkwNi40MDgwMjEzMSw1NTk0NTUzLjkxMzc5MTEyMywyODQ0MzEyLjA2OTM5NzI0NzQsOTAyMDg4LjE1Mzk1MDQ3NjEsODA0ODM2OS44NzE4OTcwMjUsNjQyMTIzLjI5MzQxNzYyNTcsMTcxMTA1OS43NTc5NDkzNjE2LDEyMzU2MzkuNzY4NjQ3MDA4Myw4NDEzMzYwLjg0NDA4ODI3NywxODE4ODMxLjE0Nzk0Mzc5MywxOTk4MDI5LjI2MDc1NTM1MTMsMS44OTc0MjI2MDk5ODQyOTQzRTcsMS4xMzUxNzk3MzE0MzQwNDQ2RTcsMzQ1MDI0MS41OTc0ODIwNDgsMzQyMDk5Ni45MzY1MjU3MTUsMS4yMjc5NjAzMDcyNjk4MTA5RTcsMTA0ODE5Ni4xMTEwODg4ODEzLDQwMTE1MjkuOTg5MDE2ODA0LDc1NDc1My40NjMwNTk5MTE5LDU2ODg2MTMuMDYxMTAwNjgyLDIuMDg0OTM4MTgzMzQ0MDZFNywyMjMyOTEwLjUxMTU4NTkyNyw3MDc3Njg0LjEyMzk0MzQyODUsNjA4NzU0LjQxMjc4MTE4OSw1ODkzNDMxLjI2NDQyNzIzMyw1MzYzMDM0LjAwMzE4MzA1MywxODA4MTIwLjM2NDI4Mzg2OCw0OTM3MjIuOTQwNTQwODAxMgorMjYsU2F0IDE5IEZlYiAxMSw2MjY4ODMuMjczMTQ3ODcyOCw0NDQ2NzM5Ljg0NTA4ODk2MywyNjczMTg0LjM4MDE1ODMyLDUxMzAyMzMuNjk1NzA5OTU3LDMuMzg2OTQyMTY1MTM3NTY0RTcsNDMwMDkyOC40ODE0NDI1NTk1LDM0MDUyOTIuMjUzMzg0MDc5Myw1NzIwMTUuMzk0NjY1NDQ1MSw3ODM1MzEuMDg3NDI3Nzg5MSwxLjU5ODExMzQzMjY3MDUxMDRFNyw4MTg1ODE5LjA0NDU2MTQsMTIxMTQ0My45Mjk4NzEzMzM1LDI5MjYwODYuNTUyNTc4MTAzNywxMjkzODUwLjI3Nzk0MjgyNiwxLjI0MTgzMjU0NzMxMTkyNDZFNyw2MDc5OTk1LjY0OTQ3NDcwMywyNjg4MTk2Ljc4MDE4MjI3NCw0MDQxNDQxLjU0MjkxMDc5Nyw0NDY4NjE4LjAxMTk3MTEzNyw2MzQ4NTk2LjkxMjc1NDc0Nyw1Mjk2MDY3Ljc0ODUxNzk2LDEyNzQ4MjAuNjc5NjQ4NjI3Myw5OTM3NjU4Ljk1MjEwNzA5Niw0OTE5MDk1LjIxMzM4ODU5Myw1NTk0NzcwLjU4MTYzOTU5MSwyODQ0NDI2LjEyNTY1NjgzMjUsOTAyMTIzLjM4NDgxNDE3MDUsODA0ODY4MC44NTk3ODIzMjUsNjQyMTQ4LjU4NTU5OTYwNzgsMTcxMTEyNi43NzMzODk5MTIyLDEyMzU2ODcuOTg2MzIyOTI4NSw4NDEzNjg3LjAwODMzMTc4OSwxODE4OTAxLjk5MjYyNzg0NzcsMTk5ODEwNC4zMjIwNzU5NTc3LDEuODk3NDk2MTcxNjc1MzExRTcsMS4xMzUyMjQwMDQ2MTYwOTc1RTcsMzQ1MDM3Ny41NzcyMDQ0ODEyLDM0MjExMjkuNTEyOTg0NzY2NiwxLjIyODAwODE0OTY4OTYzMjFFNywxMDQ4MjM2LjYzMjU3ODkzMzcsNDAxMTY4OC45MTc3ODU1MDUsNzU0NzgzLjMxNTA3ODMxMiw1Njg4ODMzLjk2NjE1ODY3NywyLjA4NTAxODU3OTYzNzkwNjdFNywyMjMyOTk1Ljc0MjQ1MzIwOCw3MDc3OTU4LjQyNjgzNTgwNSw2MDg3NzguMzQ2ODM5NTg1Miw1ODkzNjU4LjY5ODQ0NDg0OCw1MzYzMjQ1LjM1NjM2OTQxOCwxODA4MTk0LjA5NjE3MjA2OTQsNDkzNzQyLjQxMzkxNjI5OTkzCisyNyxTdW4gMjAgRmViIDExLDYyNjg5OS4zMzk5NDU4MTIxLDQ0NDY4NTguNTkzMzY5ODM5LDI2NzMyNTUuNDc0MDI0NTY3Myw1MTMwMzY1LjAyODI4NTA4NiwzLjM4NzAxNTQ2NDgyODcyN0U3LDQzMDEwMzguMTE3ODIyNzI4LDM0MDUzODIuMTg1MDA3NzQ1LDU3MjAyOS43NjM4MzQ5NDE3LDc4MzU1My44MDY2NDg3MDc4LDEuNTk4MTU0NDQwODI5ODY0N0U3LDgxODYwMjguMDczNTAwMDMxLDEyMTE0NzQuNjEyNTcwMjMyNSwyOTI2MTY0Ljg0MTk4ODc3MTcsMTI5Mzg4NC4xNDg5NTk0MTE1LDEuMjQxODY0NDUwMTU0OTc1OEU3LDYwODAxNTYuOTk4NTI2ODg2LDI2ODgyNjkuNzE2NTg5NzAyMyw0MDQxNTQ5LjUxMDEyMjI4MjQsNDQ2ODczNi4wNDk4MTg2MDcsNjM0ODc2MS44MTE0NzAwMjksNTI5NjIwNS42NjIxNzcwODgsMTI3NDg1NC40MTcwOTQ0MDEsOTkzNzkxNy44MTI1NjAxNjksNDkxOTIyMS43NjIzMDQ5MzksNTU5NDkxNS44MDUyNDc3ODEsMjg0NDUwMi41NzY1OTMyNzYsOTAyMTQ2Ljk5ODgyNDgwNiw4MDQ4ODg5LjMwMjA4MTk5Miw2NDIxNjUuNTM4Mjc4MzY4MywxNzExMTcxLjY5MTY2ODEzNjUsMTIzNTcyMC4zMDQ5MDIsODQxMzkwNS42MjMwMzgxMzQsMTgxODk0OS40NzcxNzAwMjcsMTk5ODE1NC42NDM5NTQ3NTUsMS44OTc1NDU0NzcxMDQ1MUU3LDEuMTM1MjUzNjc5MzIxMzU0RTcsMzQ1MDQ2OC43MjA4OTE2NzQsMzQyMTIxOC4zNzM2MDQ1NTI0LDEuMjI4MDQwMjE2Njg0MzgzRTcsMTA0ODI2My43OTI0NTgyOTYyLDQwMTE3OTUuNDQ0NTA3NzkwNyw3NTQ4MDMuMzI0MjI2NjU2Myw1Njg4OTgyLjAzMDA4NzYsMi4wODUwNzI0NjU5NDcxODdFNywyMjMzMDUyLjg3MDI0OTMxOCw3MDc4MTQyLjI4MDkzODc3MjUsNjA4Nzk0LjM4OTE1NzcxMDYsNTg5MzgxMS4xMzgwMzczNjcsNTM2MzM4Ny4wMjA5MjQyMTEsMTgwODI0My41MTg5MjIwNDg5LDQ5Mzc1NS40NjY0MzE2NzM3MworMjgsTW9uIDIxIEZlYiAxMSw2MjY5MTAuMTA4OTk1MjU0NCw0NDQ2OTM4LjE4ODYxNzIxNywyNjczMzAzLjEyNjkxNTgyODMsNTEzMDQ1My4wNTY1NjQ5MzMsMy4zODcwNjQ2MzE4Mjk5Mjg2RTcsNDMwMTExMS42MDUzNTcwMjUsMzQwNTQ0Mi40NjM4MzEyNzcsNTcyMDM5LjM5ODA4MDI5NjksNzgzNTY5LjAzNTc1NTk1MzIsMS41OTgxODE5MjcxNjYwNTUzRTcsODE4NjE2OC4xODA4NzU5NTYsMTIxMTQ5NS4xODAwMTg3MjksMjkyNjIxNy4zMTgzODgxMzk0LDEyOTM5MDYuODUxNTIwMDI4MiwxLjI0MTg4NTgzMzQ1ODg1MDVFNyw2MDgwMjY1LjE0NzQyMDI0OCwyNjg4MzE4LjYwNTc4NTA1NDYsNDA0MTYyMS44NzkwMTY4Njc0LDQ0Njg4MTUuMTY3NTM3Mzk4LDYzNDg4NzIuMzM2NDI0MjQ1LDUyOTYyOTguMTAwMzIzOTA3LDEyNzQ4NzcuMDMwNDk5NzE5OCw5OTM4MDkxLjMxNjY3NDM3NCw0OTE5MzA2LjU4MzE4MTY5Niw1NTk1MDEzLjE0MjczNDc3NSwyODQ0NTUzLjgyMTAwNDU0Nyw5MDIxNjIuODI2NDcwMjM1Niw4MDQ5MDI5LjAxMjM3ODcwNzUsNjQyMTc2LjkwMTIxMDY5NiwxNzExMjAxLjc5ODkzOTg5ODYsMTIzNTc0MS45NjY4OTE1MzA0LDg0MTQwNTIuMTUxNjg3MDM3LDE4MTg5ODEuMzA0MjkwODg1NiwxOTk4MTg4LjM4MDE2NzY3NDUsMS44OTc1Nzg1MjQ1NTI1OTRFNywxLjEzNTI3MzU2OTIwMjczODhFNywzNDUwNTI5LjgxMjE1MjQ5MywzNDIxMjc3LjkzMzI5MTk2OTQsMS4yMjgwNjE3MTAwMDM3OTVFNywxMDQ4MjgxLjk5NjYwOTU5OTQsNDAxMTg2Ni44NDcyMDk1ODIsNzU0ODE2LjczNTkxNzkwNTYsNTY4OTA4MS4yNzE1MTcxNywyLjA4NTEwODU4MzcyNjcxNEU3LDIyMzMwOTEuMTYxMzg4ODQxNSw3MDc4MjY1LjUxMDkyOSw2MDg4MDUuMTQxODY4NDQwNCw1ODkzOTEzLjMxMjAxOTY5MSw1MzYzNDgxLjk3NTAwOTMyOCwxODA4Mjc2LjY0NzE2OTQ5NTcsNDkzNzY0LjIxNTIwNjQ1NzI0CisyOSxUdWUgMjIgRmViIDExLDYyNjkxNy4zMjcxNDEyNjQyLDQ0NDY5OTEuNTQwMTU3OTM0LDI2NzMzMzUuMDY3NzYxNDg2NCw1MTMwNTEyLjA1OTMxMTI4NSwzLjM4NzA5NzYxMTMyMzczOTZFNyw0MzAxMTYwLjg2MjkxNzM0LDM0MDU0ODIuODY3MTYwNDk5LDU3MjA0NS44NTc2MTE3Mjg3LDc4MzU3OS4yNDQxMDM2OTI5LDEuNTk4MjAwMzUwMzA3MTk5N0U3LDgxODYyNjIuMDkxNzM5NDc4LDEyMTE1MDguOTY2OTM4MTk2LDI5MjYyNTIuNDkyNjU0OTI2NiwxMjkzOTIyLjA2ODI1NzU0NjUsMS4yNDE5MDAxNjU5MDk5NDk1RTcsNjA4MDMzNy42MzczNjY1MDMsMjY4ODM1MS4zNzYxNjA1NjQ0LDQwNDE2NzAuMzg2ODY1NzAyLDQ0Njg4NjguMTk4MTA1OTM1LDYzNDg5NDYuNDE2ODY2MDQ3LDUyOTYzNjAuMDU4MDI2NzY3LDEyNzQ4OTIuMTg3NzI3NTY4Miw5OTM4MjA3LjYwOTc4MTQ2Myw0OTE5MzYzLjQzNTM4Njg1NCw1NTk1MDc4LjM4NDEyMjUyMSwyODQ0NTg4LjE2OTY5Nzg5Nyw5MDIxNzMuNDM1MTg5Njc5NSw4MDQ5MTIyLjY1NDQ3OTM1Nyw2NDIxODQuNTE3NDg0NzE2NSwxNzExMjIxLjk3ODg3NTc5NjgsMTIzNTc1Ni40ODYxNTI5MDgsODQxNDE1MC4zNjM5ODI1NzMsMTgxOTAwMi42MzY4MzA1NTY3LDE5OTgyMTAuOTk3MTUwNTUwNCwxLjg5NzYwMDY3NDkzNjU5NDRFNywxLjEzNTI4NjkwMDY3MzgwMDdFNywzNDUwNTcwLjc2MDA1MjQ1MDUsMzQyMTMxNy44NTM3NjA1MjUsMS4yMjgwNzYxMTYxODM2ODY4RTcsMTA0ODI5NC4xOTgxMDkwNzc4LDQwMTE5MTQuNzA2OTk2NTQwNSw3NTQ4MjUuNzI1NDc5ODUwOSw1Njg5MTQ3Ljc4OTE2NTQyNSwyLjA4NTEzMjc5MjAwMTMzOTRFNywyMjMzMTE2LjgyNjg2NzQ4Nyw3MDc4MzQ4LjEwNzA0OTYyNiw2MDg4MTIuMzQ5MTA2MzkyNCw1ODkzOTgxLjc5NTA2MjI0NSw1MzYzNTQ1LjYyMDI4Mjg2LDE4MDgyOTguODUzMTUzMzU5Niw0OTM3NzAuMDc5MjkyMTUyODMKKzMwLFdlZCAyMyBGZWIgMTEsNjI2OTIyLjE2NTIzNDE5MDMsNDQ0NzAyNy4zMDA5MjQzMywyNjczMzU2LjQ3NzExNzA5MjMsNTEzMDU1MS42MDcxMjYxMTQsMy4zODcxMTk3MzI3NDA5NEU3LDQzMDExOTMuODc5NTE3NTgzLDM0MDU1MDkuOTQ4NDY1NTEwNyw1NzIwNTAuMTg4NTQ2ODc2OSw3ODM1ODYuMDg2OTQ0OTY0NiwxLjU5ODIxMjY5ODcwODk0MUU3LDgxODYzMjUuMDM4MTQyMzY5LDEyMTE1MTguMjA4Njg0MDA1MywyOTI2Mjc2LjA2OTUyMjE2MiwxMjkzOTMyLjI2NzUxMDEzMzMsMS4yNDE5MDk3NzI0MzYwODQ4RTcsNjA4MDM4Ni4yMjU4Njg3NjQsMjY4ODM3My4zNDIxMDg2NjY0LDQwNDE3MDIuOTAwOTkzOTUxLDQ0Njg5MDMuNzQzMTMzOTE1LDYzNDg5OTYuMDcwMDMwNDgzLDUyOTY0MDEuNTg1ODgzMDI0LDEyNzQ5MDIuMzQ3MjU4MDAzNyw5OTM4Mjg1LjU1NjU4MjUwNSw0OTE5NDAxLjU0MTI3NjExNSw1NTk1MTIyLjExMjgwNjE3NywyODQ0NjExLjE5MzMzNTg3LDkwMjE4MC41NDU4NDYzMzk5LDgwNDkxODUuNDE4OTc2MzYzLDY0MjE4OS42MjI0NzMwNTM1LDE3MTEyMzUuNTA0ODQwMTgwMywxMjM1NzY2LjIxNzg5OTc2OTMsODQxNDIxNi4xOTE3Nzk5ODIsMTgxOTAxNi45MzUyNDQ5ODczLDE5OTgyMjYuMTU5Njg4MTU3MywxLjg5NzYxNTUyMTQ1ODg4OEU3LDEuMTM1Mjk1ODM2MjgwNzQ3M0U3LDM0NTA1OTguMjA2Mzc5MjA5NiwzNDIxMzQ0LjYxMDg1NzgzOSwxLjIyODA4NTc3MjExNzU1NDhFNywxMDQ4MzAyLjM3NjI3OTI1NDcsNDAxMTk0Ni43ODY0NDYzOTksNzU0ODMxLjc1MDk4NjIzODksNTY4OTE5Mi4zNzMzNTY2Mzg1LDIuMDg1MTQ5MDE3ODI3NjU2RTcsMjIzMzEzNC4wMjk3MjkyMzYsNzA3ODQwMy40Njc5MzU3NjEsNjA4ODE3LjE3OTkxNDg2MTYsNTg5NDAyNy42OTY0NjQ4NzMsNTM2MzU4OC4yODAwNzI3MjEsMTgwODMxMy43Mzc5MDQ2NDI3LDQ5Mzc3NC4wMDk4NDMwODEyCiszMSxUaHUgMjQgRmViIDExLDYyNjkyNS40MDgwNTUzNDU1LDQ0NDcwNTEuMjcwODUwMjkyLDI2NzMzNzAuODI3NDExNTQ3LDUxMzA1NzguMTE0ODg0ODMyLDMuMzg3MTM0NTcwOTIwMDc4RTcsNDMwMTIxNi4wMTAwNTg3NjQsMzQwNTUyOC4xMDAzNjQ5MjE2LDU3MjA1My4wOTIzMDA1MTUzLDc4MzU5MC42NzM4MjYwMDIzLDEuNTk4MjIwOTc1NDI1MTY1NUU3LDgxODYzNjcuMjI5NzY2Nzg2LDEyMTE1MjQuNDAzNjc2MTUwNCwyOTI2MjkxLjg3Mjc5OTUyNjQsMTI5MzkzOS4xMDM3MTc2NTMsMS4yNDE5MTYyMTEzNDgzMjQ4RTcsNjA4MDQxOC43OTM3MzMzMDQsMjY4ODM4OC4wNjU4NjA3MTU3LDQwNDE3MjQuNjk0NzU3NTQ5LDQ0Njg5MjcuNTY4MDU1OTU5LDYzNDkwMjkuMzUwNTc2Nzk2LDUyOTY0MjkuNDIwNDA5OTkwNSwxMjc0OTA5LjE1Njk1MTA1OTEsOTkzODMzNy44MDEzNDMxNDUsNDkxOTQyNy4wODIyMzAxMjgsNTU5NTE1MS40MjIzOTgwMTgsMjg0NDYyNi42MjU4ODU3MjksOTAyMTg1LjMxMTg3Mzg3MjYsODA0OTIyNy40ODc0ODYzMTEsNjQyMTkzLjA0NDIxMzAwMywxNzExMjQ0LjU3MDg2MjI5MTgsMTIzNTc3Mi43NDA3NDY2MTc2LDg0MTQyNjAuMzEzNTUwMzY0LDE4MTkwMjYuNTE4OTQ3MTYzMSwxOTk4MjM2LjMyNDcwMjk5NjMsMS44OTc2MjU0NzI0OTYxODM2RTcsMS4xMzUzMDE4MjU0OTkwMjMzRTcsMzQ1MDYxNi42MDI5NDk5OTksMzQyMTM2Mi41NDUwNzg2ODUsMS4yMjgwOTIyNDQxMzczOTE4RTcsMTA0ODMwNy44NTc3NzcxMTQxLDQwMTE5NjguMjg4NjU2MzE2LDc1NDgzNS43ODk3NTE1MDIyLDU2ODkyMjIuMjU2NDE0MTI5LDIuMDg1MTU5ODkzMzQ2ODJFNywyMjMzMTQ1LjU2MDMzOTIwNzMsNzA3ODQ0MC41NzQxNDI3Niw2MDg4MjAuNDE3ODcwMDcxNyw1ODk0MDU4LjQ2MjMyNDE0NCw1MzYzNjE2Ljg3MzgzNTk3NiwxODA4MzIzLjcxNTIwNzMzOTcsNDkzNzc2LjY0NDM5Mzk5MDkKKzMyLEZyaSAyNSBGZWIgMTEsNjI2OTI3LjU4MTYxNzM2NDIsNDQ0NzA2Ny4zMzc1NDY4MTIsMjY3MzM4MC40NDYxNDg3Njg1LDUxMzA1OTUuODgyMjgwNTU1LDMuMzg3MTQ0NTIzNzU5MTYyNEU3LDQzMDEyMzAuODQzODQyNTMzLDM0MDU1NDAuMjY3MTE1Nzg0LDU3MjA1NS4wMzkxNjMyOTk4LDc4MzU5My43NDg0OTU4MzkxLDEuNTk4MjI2NTIzMDMxMzMyOUU3LDgxODYzOTUuNTA5OTI0MDA2LDEyMTE1MjguNTU2MzQ2NTQxMywyOTI2MzAyLjQ2NTUzNzkyNTMsMTI5Mzk0My42ODU3OTI5MzQsMS4yNDE5MjA1MjcxMjQxNTc3RTcsNjA4MDQ0MC42MjMyOTg3MzgsMjY4ODM5Ny45MzUxNzY0NzU0LDQwNDE3MzkuMzAyODEyMDA3Nyw0NDY4OTQzLjUzNzI5Mjk3Myw2MzQ5MDUxLjY1NzIxNDIzNCw1Mjk2NDQ4LjA3NjgyOTc0MywxMjc0OTEzLjcyMTMyNzc4MjEsOTkzODM3Mi44MTkwMTg4MTEsNDkxOTQ0NC4yMDEzODYzNjEsNTU5NTE3MS4wNjc0NTQ4MiwyODQ0NjM2Ljk3MDE5Mzc0Nyw5MDIxODguNTA2Mzc4MTczOCw4MDQ5MjU1LjY4NDMyMjI2OSw2NDIxOTUuMzM3NzE1OTMxLDE3MTEyNTAuNjQ3NTI4NTYsMTIzNTc3Ny4xMTI3ODE4OTI1LDg0MTQyODkuODg2NjM4Njc3LDE4MTkwMzIuOTQyNTUyNDQ5LDE5OTgyNDMuMTM5MzQ1MzY0OSwxLjg5NzYzMjE0MjI4NTUxMTZFNywxLjEzNTMwNTgzOTg1OTExMjJFNywzNDUwNjI4LjkzMzcwMjI3MywzNDIxMzc0LjU2NTY3OTUwNSwxLjIyODA5NjU4MjA5NzAwNTFFNywxMDQ4MzExLjUzMTgwNTYxNzIsNDAxMTk4Mi43MDExNTYyMzA2LDc1NDgzOC40OTY4NDc4NDgsNTY4OTI0Mi4yODU4NzY4MDYsMi4wODUxNjcxODI3NzMzMjc1RTcsMjIzMzE1My4yODg5OTc2NTQsNzA3ODQ2NS40NDQ5NzA0NzEsNjA4ODIyLjU4ODE4MDc4NjUsNTg5NDA3OS4wODM0NDc2NTYsNTM2MzYzNi4wMzk1MDQ1MTUsMTgwODMzMC40MDMwMjk1MzMzLDQ5Mzc3OC40MTAyNjgzOTAyNgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTSVJTdGF0ZXNPbmx5X1JLX1JlZmVyZW5jZS9UZXN0U0lSL2h1bWFuL1NfMC5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNJUlN0YXRlc09ubHlfUktfUmVmZXJlbmNlL1Rlc3RTSVIvaHVtYW4vU18wLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NTUwMjhkCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTSVJTdGF0ZXNPbmx5X1JLX1JlZmVyZW5jZS9UZXN0U0lSL2h1bWFuL1NfMC5jc3YKQEAgLTAsMCArMSwzMyBAQAoraXRlcmF0aW9uLHRpbWUsc3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vbm9kZS90cmFuc3BvcnQvcGlwZS9VU0EKKzEsVHVlIDI1IEphbiAxMSw5NDMyMTEuMAorMixXZWQgMjYgSmFuIDExLDY0ODI0OC42NjQ0NTY0MDQzCiszLFRodSAyNyBKYW4gMTEsMTIuMTA5MTk1ODI4MDMxMTI2Cis0LEZyaSAyOCBKYW4gMTEsNC44MzA3OTAwNDcwNTIyNzRFLTUKKzUsU2F0IDI5IEphbiAxMSw4LjE5MDMyNDgxODAxNzc3NEUtOQorNixTdW4gMzAgSmFuIDExLDIuMzk5ODQyODc2MDQ3ODA3RS0xMQorNyxNb24gMzEgSmFuIDExLDUuMDQ5Mjg4NDQ3NzU2OTY4RS0xMworOCxUdWUgMSBGZWIgMTEsMy45NzEwMjYzNjgwMTcwMDlFLTE0Cis5LFdlZCAyIEZlYiAxMSw3LjQ0MDkxNzY3MzQ2OTkxOEUtMTUKKzEwLFRodSAzIEZlYiAxMSwyLjQ2NDM1MTQ3NTgwMjUxMDJFLTE1CisxMSxGcmkgNCBGZWIgMTEsMS4xODQ2Mjc2NzA5MDEyMjQ4RS0xNQorMTIsU2F0IDUgRmViIDExLDcuMjk4MTQwNjU1MjE5MzNFLTE2CisxMyxTdW4gNiBGZWIgMTEsNS4yNjUwNjI4OTM2Nzk3MzRFLTE2CisxNCxNb24gNyBGZWIgMTEsNC4yNDAwODgzMDA4NTQ5MTJFLTE2CisxNSxUdWUgOCBGZWIgMTEsMy42NjkxNTMzMjk0NzE5MTI1RS0xNgorMTYsV2VkIDkgRmViIDExLDMuMzMxNTc3ODAzMzEwNDMxRS0xNgorMTcsVGh1IDEwIEZlYiAxMSwzLjEyMzY0MzE2NzAxNTU1MTVFLTE2CisxOCxGcmkgMTEgRmViIDExLDIuOTkyMTExMTAzNTkxMjU3RS0xNgorMTksU2F0IDEyIEZlYiAxMSwyLjkwNzQ3Nzc3MzA2MjE0NUUtMTYKKzIwLFN1biAxMyBGZWIgMTEsMi44NTI0NTkzOTUzNzUxMTg1RS0xNgorMjEsTW9uIDE0IEZlYiAxMSwyLjgxNjUwODczNDQ5Mjg4OEUtMTYKKzIyLFR1ZSAxNSBGZWIgMTEsMi43OTI5OTgyMDc3OTc5OTY2RS0xNgorMjMsV2VkIDE2IEZlYiAxMSwyLjc3NzY3NjQwMzY1MTUzNkUtMTYKKzI0LFRodSAxNyBGZWIgMTEsMi43Njc3NzY3ODUwNzY2MjhFLTE2CisyNSxGcmkgMTggRmViIDExLDIuNzYxNDgxMjU0NDM0MTU1RS0xNgorMjYsU2F0IDE5IEZlYiAxMSwyLjc1NzU4Njk1ODcwNzcwMDdFLTE2CisyNyxTdW4gMjAgRmViIDExLDIuNzU1Mjk0NDY3MTc0NjU1RS0xNgorMjgsTW9uIDIxIEZlYiAxMSwyLjc1NDA3MDg0MjI2Njk5OTdFLTE2CisyOSxUdWUgMjIgRmViIDExLDIuNzUzNTYwMDc3NTEzNjc1NUUtMTYKKzMwLFdlZCAyMyBGZWIgMTEsMi43NTM1MjQwMzc3Njg1MjY3RS0xNgorMzEsVGh1IDI0IEZlYiAxMSwyLjc1MzgwMzI5NTE1NzE3NEUtMTYKKzMyLEZyaSAyNSBGZWIgMTEsMi43NTQyOTEwNTkzNTA3MjdFLTE2CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNJUlN0YXRlc09ubHlfUktfUmVmZXJlbmNlL1Rlc3RTSVIvaHVtYW4vU18xLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0lSU3RhdGVzT25seV9SS19SZWZlcmVuY2UvVGVzdFNJUi9odW1hbi9TXzEuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM4MmJjMTEKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNJUlN0YXRlc09ubHlfUktfUmVmZXJlbmNlL1Rlc3RTSVIvaHVtYW4vU18xLmNzdgpAQCAtMCwwICsxLDMzIEBACitpdGVyYXRpb24sdGltZSxVUy1BSyxVUy1BTCxVUy1BUixVUy1BWixVUy1DQSxVUy1DTyxVUy1DVCxVUy1EQyxVUy1ERSxVUy1GTCxVUy1HQSxVUy1ISSxVUy1JQSxVUy1JRCxVUy1JTCxVUy1JTixVUy1LUyxVUy1LWSxVUy1MQSxVUy1NQSxVUy1NRCxVUy1NRSxVUy1NSSxVUy1NTixVUy1NTyxVUy1NUyxVUy1NVCxVUy1OQyxVUy1ORCxVUy1ORSxVUy1OSCxVUy1OSixVUy1OTSxVUy1OVixVUy1OWSxVUy1PSCxVUy1PSyxVUy1PUixVUy1QQSxVUy1SSSxVUy1TQyxVUy1TRCxVUy1UTixVUy1UWCxVUy1VVCxVUy1WQSxVUy1WVCxVUy1XQSxVUy1XSSxVUy1XVixVUy1XWQorMSxUdWUgMjUgSmFuIDExLDYyNjkzMi4wLDQ0NDcxMDAuMCwyNjczNDAwLjAsNTEzMDYzMi4wLDMuMzg3MTY0N0U3LDQzMDEyNjEuMCwzNDA1NTY1LjAsNTcyMDU5LjAsNzgzNjAwLjAsMS41OTgyMzc4RTcsODE4NjQ1My4wLDEyMTE1MzcuMCwyOTI2MzI0LjAsMTI5Mzk1My4wLDEuMjQxOTI5M0U3LDYwODA0ODUuMCwyNjg4NDE4LjAsNDA0MTc2OS4wLDQ0Njg5NzYuMCw2MzQ5MDk3LjAsNTI5NjQ4Ni4wLDEyNzQ5MjMuMCw5OTM4NDQ0LjAsNDkxOTQ3OS4wLDU1OTUyMTEuMCwyODQ0NjU4LjAsOTAyMTk1LjAsODA0OTMxMy4wLDY0MjIwMC4wLDE3MTEyNjMuMCwxMjM1Nzg2LjAsODQxNDM1MC4wLDE4MTkwNDYuMCwxOTk4MjU3LjAsMS44OTc2NDU3RTcsMS4xMzUzMTRFNywzNDUwNjU0LjAsMzQyMTM5OS4wLDEuMjI4MTA1NEU3LDEwNDgzMTkuMCw0MDEyMDEyLjAsNzU0ODQ0LjAsNTY4OTI4My4wLDIuMDg1MTgyRTcsMjIzMzE2OS4wLDcwNzg1MTYuMCw2MDg4MjcuMCw1ODk0MTIxLjAsNTM2MzY3NS4wLDE4MDgzNDQuMCw0OTM3ODIuMAorMixXZWQgMjYgSmFuIDExLDYyNjMyMi4wMjc3MjQyMTYsNDQ0NjQ4Ni43NzE5MDA3NDEsMjY3Mjk1Mi41MTQxMjY3MzYsNTEyNTMzNS43MDg3NzIwODIsMzMwMzY3Ny4xNDA2ODIxODQsNDI5NTcyMC4xNjgxMjMwMjUsMzQwNDc3Mi4wODI5NzU2NDQ2LDU3MDAwNS44MDc3NTM0MjAyLDc4MzU5Ny45ODA1NzAwMDYsMS41OTY3NzM0NTcxMjA2NTcyRTcsODE3NjgzMS43MTc4MTU4MTEsMTIwOTI3OS42OTMzMjE0OTIzLDI5MjU5NTUuMzgwOTgxMTA3NywxMjkzNDk3Ljk1MTM0ODcxMywxLjI0MDg1NTE3MjczNzMzNjdFNyw2MDc5MzU3LjkxNjM2MDkzMywyNjg4MjQzLjg0Njg0Mjg4Myw0MDQxMjIxLjg4NjYwMDcwNSw0NDY3OTQ1LjU3MzA0ODY2MDUsNjM0NTg2NS42MzkwNjE3NDEsNTI5NDA5OC40MTU0MTEzMzEsMTI3NDY1My44NjAyMDg5ODIxLDk5MzQwMjUuNzA4NzkzNzI0LDQ5MTU1MDcuNDI2MDM0MDA1LDU1OTIyNzMuNDIxNjc4NDM0LDI4NDQzNjkuMTEzMDk0NDQ1Myw5MDE4NzYuMzMyNDQyMzA5NSw4MDQ0NjAwLjY5NTc4Mjc2LDY0MjA0Ny45NDQxOTQwNDcsMTcxMDczNC4yNDg3MzM3NTE3LDEyMzUzMzIuMTQzMzEyNjYyLDg0MTAxMzguNjY2MjUzMjg0LDE4MTgzMTcuNDI0OTg4MjE2NSwxOTkyNzA0LjQwOTAzMTM2MywxLjg5NjY5ODA5MzAxNjgxRTcsMS4xMzQ4ODYxMzIyMzkxNDM3RTcsMzQ0OTg1OS4zOTY2NzgyOTY0LDM0MTk2NTcuNzQzMjIyMTcxNCwxLjIyNzYxOTU1NTAwOTEzMTdFNywxMDQ3NzE5LjEwNDIwMTUwMzcsNDAxMTI4OS42NDkxMDM1MzksNzU0Njk2Ljk3NzM2MDU4NDUsNTY4NjY1NC4wNDU5OTIyNDEsMi4wODM4MzUwMDYwMTU5M0U3LDIyMzA3ODcuNjg2MzAyOTY0Niw3MDc0OTIzLjUzMzUzMzk1OSw2MDg2NjkuOTA1MDg4ODQ5Nyw1ODkwNDU1LjYxMjk2OTgzOCw1MzYyNDM2LjMzNTU2ODA2NSwxODA4MjYxLjcxNTYyMjQwNjcsNDkzNjcyLjMyODA2MjcyMTY0CiszLFRodSAyNyBKYW4gMTEsNi43MTU3MDI0MzM4MDM5MTYsMjI5LjAxMzM5MzQzOTM5MjcsMTE3LjQ5MDk1MTQ5NjQyNTUyLDUyLjQ2MDM4OTMzMTU2MTc2LDEuODQ4OTQ4NjI4MTQ1OTU5NSwzNi45Nzk4MDIwNDkzODg2NDUsMTE0LjQyMTc1MzQ4NTQ5MzI4LDIuMjYwOTc1NTU4NzcwMjI3NiwxMjAyLjE4ODQyMDcwMzY5OTIsMTc5LjQ5NDc3NzMzODg1OTU0LDc1LjYxMjI1ODAxMjkyNDk0LDcuODI2NTAyMTI4Mzg3MTM1LDE2Mi4zMDUxNjM1MDM1MzkyNiwzMS4xNTc4MzQwMzgwODA0MTYsMTQ1Ljk2NjUzMTYyMDgzODQsMjQ1Ljg5NDYwNjE3MjY1Njc4LDI1OC4zMzc3NTUxNzkxNDA4LDIxMS4zMjE5ODkxNDI3OTg1LDE1MS4zNDE0OTQ3MDI4NzMxLDExMy42ODI1ODE2MDM4MTE0OSwxMDQuNDk3MTE4MTY4OTg1MDUsNDYuMzgxMjU3NzA0NDUyNDQsMTk4LjI3NDI4NjIxOTQyNDY1LDYxLjA1MjEzMDc1NDk2ODY5NCw5Ny43Mjg4NjM3NDA4MTgwNCwxODguMzY5Mjg1MDk1MTk3MywyMS42NDgyMjM4MTMzOTEsMTI4LjkwMzEwNTQ4NDU1MTQ3LDIxLjI4NTA1NTY1MTczNDYyNyw0NS43MzM5NDE5NzUxOTk3ODQsMjguNzM3MjY1OTIxNjA5OTgyLDE1Mi42OTA1MDIwODkxMDcyLDM5LjQ1NTMzODIxNzQ2MTAzLDkuNTMzNTM4OTcxNzAwMDA2LDM0NC45ODAxODEzNzQxNjE5MywyNTguNTg1MTkwNDE1NjAwOCwxMTYuOTc4NDUzMzE0OTUyNTMsNjEuMjYyODUwMTMzNzg5NjMsMjY5LjAzMzE4OTQ1OTk1MDg1LDE3LjA5NTI0ODIyNTg1ODM0NSwxNjYuMTM3MzI1MjQ3MDQwNSwyOS4zMTkyNjI5OTA4ODI1LDExMC4wNDQyOTM4NDUyNDQ0LDMwOC43ODIwNTE2ODI0NzU2NCwyMi4yNTk2MTgxNzYzMDgwNjMsMTI3LjAyODM3ODg0NTI4NTIsMTguODIxNDQ4MTMyODc1MTk0LDg5Ljk2MTY2MjU2MTQ5Mjc3LDE4MS40MDkxNTM1NTUzNTI2LDIzMy4zNjQ2MzQ3NzIzNTQyNiwxNy4yMzczODMyMjQzODc2NQorNCxGcmkgMjggSmFuIDExLDIuMDQ2OTA0MDUwOTk4MzA1N0UtNSw0LjEyMDE1MzY2Mjc5NDQyOUUtNCwyLjIyNzQ3NTkyMzc1MDA3MjhFLTQsMS42MjU0MDg4MTA0NjYzOUUtNCw3LjA1NjkwMTQ5ODQ1NTc4N0UtNSwxLjIxOTM1NTgwMTM1NjA3NjlFLTQsMi4zNzA5NTg4NjYzMTI1NTAzRS00LDEuMDM3NDc2MzQxMzQ3OTAxNkUtNSw3LjA2OTA0MjEwMjQxMzk1NEUtNCw1LjM4MTAwNDk1MjgzMzM4OUUtNCwyLjQyOTI3NDU1MzE0Njc1MTRFLTQsMi44NzYxNzAzMzU5NzIyMTQ4RS01LDIuODQ5MzAzNTU4ODI3MjU2RS00LDcuMjExOTcwNzQ2OTM0MjlFLTUsNC4zMDcxMzI0MjMxNTg2ODJFLTQsNC43OTE5MTM3NTI2OTYxOTJFLTQsMy43ODI4Mzg0NzY5NzY1NDdFLTQsMy43ODI4NTg4MjI0MTU3N0UtNCwzLjEyNzc4MTI1NzcwMDk4MkUtNCwyLjkwNTc0NTc3NDc5NzE1NDVFLTQsMi41ODUzMTM5ODY4MDg2NDAzRS00LDkuMzYwODI4NTMwNjEzNjNFLTUsNC44ODcxNTAzOTkyOTAxNTFFLTQsMS43Njc4ODU3Nzk1ODEwMzhFLTQsMi41MTg5Mjk1MjEzMDM5MzVFLTQsMy4xMTg4OTMzNjkwMjg4NzNFLTQsNS4wMTY2OTc3NjQyNjY0RS01LDMuNDIxMjk5NTAzMDM0MjAxRS00LDQuNDMwNDgxODY4MzYwNDg0RS01LDEuMDIyNDczNTEwODc4OTE3RS00LDYuNzI5NTAyNTMzMTk2MTExRS01LDMuODg1MjY0OTg5NzQwNzA4RS00LDkuNDU2NzMxMjQyNTkzODQxRS01LDMuOTg1OTA4NjEzMzg5ODU3RS01LDguNzcyNzkxNzA0MjA2OTg3RS00LDYuMDk3NDY0NTEzODY0MTE1RS00LDIuNDE2NzYwNDQzMTY5MzA5NUUtNCwxLjU2NTg3NDcxNDI1ODM5NUUtNCw2LjQyNjg5NzI5Nzg0MTc5M0UtNCw0LjUwOTU5NDIyOTEzNzcyNUUtNSwzLjIxMjMzODEyMzY1NzMzODVFLTQsNS43OTA0MTIyMjk3MTAzNjFFLTUsMi43NDA3MTE0ODk5MTU2MTdFLTQsOC40MTYyMzA5MDYxMjIyNTVFLTQsNi45NTkzODA4NTI4OTY1MDJFLTUsMy4yNDQ0MDk4Nzk3MzM4OTE0RS00LDQuMDA5MjI0NzI5ODA4NDg5RS01LDIuNDI2OTQ1NDk1MDM0MjM0RS00LDMuNzUwNzc0MjA3NzIyODU4RS00LDMuMTAwNDg4MTcyNDcxNjNFLTQsMy41MjY3OTM4MDYxMDM2MjY1RS01Cis1LFNhdCAyOSBKYW4gMTEsNC4xMTgzNzcyMTE5ODQ5NTFFLTksNS44MDk4MTU2NTE0NjM2Njk3RS04LDMuMjUzNTg4NDcyMzYwOTczNUUtOCwzLjMwNjcyNzY3MTY5MDA5N0UtOCw2LjE5Mjc3NzU4NzA0Njc4MUUtOCwyLjU4NjgxOTA0NzgzMzg0ODJFLTgsMy42NzY2NDE2OTIxMjAzNTNFLTgsMi43MjIyNzkwNTMwNzUwODA3RS05LDQuNzAyMzg2Mzc1NjY3NTUxRS04LDEuMDcwNjE5NzAxMzQ1Mjk4NkUtNyw1LjA2NDM4OTU4ODc3OTQ2RS04LDYuNTU4OTA0NDg2ODEzMzQ3RS05LDMuOTUyMTM1NjA1NTEwNTM4RS04LDEuMjA0OTUzMDg0NjIzMTU3NEUtOCw4LjQ3ODQzODE3MjIwMjI5MUUtOCw3LjEzMDEzMjU5NzQzNjU2MUUtOCw0LjY0NTEwNjgxMzc3ODQ2NkUtOCw1LjMxNjI1Mjc4ODcyNjc3MUUtOCw0Ljg0MTcwMzEwODg0NTUyNkUtOCw1LjE5MDkxNjk0NzY5MzcyMUUtOCw0LjUxNzk2MzkwNTk0ODc2MjZFLTgsMS40MjYwNjI0Njc1NDE2OTQ5RS04LDguNTE5MDYzOTIwNjMyNjQzRS04LDMuNDM2MDExMzU2OTI4NjM0RS04LDQuNTI1MzY2MTEzNDY2OTUyRS04LDQuMTU5MjU0ODI0MDg1MjIzRS04LDguMzg4MzY1MzE2MTUwOThFLTksNi4yNjk0NzU1NDYyNTkyMkUtOCw2Ljg5MTI1NTQ0OTUyNDAxN0UtOSwxLjY2ODgwOTA0MzUxNzY3NzVFLTgsMS4xMzMxOTY4NjczNjQxOTY2RS04LDYuOTE5NjkzMDIxMjMwNTRFLTgsMS42MTc2MTQ5Mzk3MDM1NjkyRS04LDkuODc5NTQ3MTMxNTcwMDQ2RS05LDEuNTYxNzk4Nzk0OTczNEUtNywxLjAzMTU3NDU3MDgwMTYyMzJFLTcsMy43NDAxOTI3NDEzODAxODA2RS04LDIuNzk3MzExNjkwNTUyMzYzRS04LDEuMDk2ODkyNTE2NDI3NjA2OUUtNyw4LjIyOTU2MDg4NjcwMzE2N0UtOSw0Ljc1NDY1MDkyNzkzNDM4NDRFLTgsOC42OTM1NjQ4MTkzNDQ4OTFFLTksNC44MTEwNjg1NTM1MjQ2MTM3RS04LDEuNTcwMTk1NzkwODAwODA4RS03LDEuNDI0NDYyMjczMTM0Njg0NkUtOCw1Ljc5Mjk1NTM0NjcwMDg0MzVFLTgsNi4zMzM3NzUxNDcxMDc4MzJFLTksNC40OTY1NTk4MTEyNDYxMTRFLTgsNS44MDc3MjY0MzQ3MDY4MDVFLTgsMy41NjY1OTczNTE2MDUzMjVFLTgsNS40MjI1MDk2OTc3MzQ3MzNFLTkKKzYsU3VuIDMwIEphbiAxMSwxLjM3MDkwNTA0NjE3NTkwOEUtMTEsMS41MjQxNTUyODMwOTAwNjY0RS0xMCw4LjczOTc4NDA3NTMxODY0M0UtMTEsMS4xMDg4MzE4NTA5ODg1NDQ5RS0xMCw1LjM4ODAzOTE5MDIyNzE3OUUtMTAsOC45MTczNDU0ODkxMzc2NkUtMTEsMS4wMjgwODY2NTE5NzYwNTMzRS0xMCwxLjA3MTgzNTE0NzU4Njc2NkUtMTEsNy40NTM1NDMzNTc0MDkzNzhFLTExLDMuNTM3NDY1MTQ5NzgwMzQ1NkUtMTAsMS43MjU4NjY4OTYxODYwMTU4RS0xMCwyLjM2OTU3MjI4OTIyMzQ2MThFLTExLDEuMDI1NDA1MDY4OTEzMDYzOUUtMTAsMy41NDIzMzc3OTg4MTE0ODFFLTExLDIuNzgxNTM4Mzk0MDU3NjhFLTEwLDEuOTM5MjQ0NjU1NzQ4ODgwN0UtMTAsMS4xMTA1ODAyNTk1MDc3Mjk0RS0xMCwxLjM5MTUyMjIyMDUwMjY0MzRFLTEwLDEuMzUyMjY3NTcwNjYxNTEyNUUtMTAsMS41OTYwOTYyMDc0ODQ4Mjk1RS0xMCwxLjM2ODgzODMzNTAyMzIzODZFLTEwLDMuOTQwNDQ2MDQ4NjQzNjgyM0UtMTEsMi41NzY3MjU5NTg0MDY0NTIzRS0xMCwxLjExNzc0Nzc2NTQ5NDY2NTRFLTEwLDEuMzk2NzI0ODU2NDU2NjI0NUUtMTAsMS4wNTEwMzQzMTY3MjQwMzAyRS0xMCwyLjQ2NzMzMTQyMjgyNDk4MDJFLTExLDEuOTYwODY3MzM2NzMxNTE0OEUtMTAsMS45MzA5MTQ0MzAyNzA0NTg2RS0xMSw0LjgyOTU0ODYwMDI5NDgwN0UtMTEsMy4zNDg5NjY5NDQzNzQ0NzVFLTExLDIuMTIzMzI4NDIzMDExNzkxNUUtMTAsNC44MzExNTExMDczNzEzNzg2RS0xMSwzLjc2MDMzMTQ4ODQ2NTk1NUUtMTEsNC43OTExMDMzNDY1NzE1MTFFLTEwLDMuMDU4MjExMTYyNjIxOTExNkUtMTAsMS4wNDQ0NTY1NjA4OTk1Nzk2RS0xMCw4LjYwMTEwMTg5NTA4ODczNkUtMTEsMy4yNzEwNTU1MzE5MDIyNjJFLTEwLDIuNTY2Nzc3ODEzODgxNzgzRS0xMSwxLjI4ODU5MTk2NjA2MTYyMUUtMTAsMi4zNzg3NjIzNDM0NDQ2OTU1RS0xMSwxLjQ2MjAzMzk2MzEyNDAwMUUtMTAsNC45NzAzMzQ2ODc5Nzc1MzVFLTEwLDQuNzk1ODgxMDQ1ODM1MzU4RS0xMSwxLjc4MDYwMDIyNzQ3NTQ0MzVFLTEwLDEuNzkzMzM4MjU2NjIxMjY5NEUtMTEsMS40MTY3NTc2MTg3ODYyNjc1RS0xMCwxLjYyMjM4MzQ1MzIyOTA5OEUtMTAsOC4xNjE4MjYxOTA4MzM0N0UtMTEsMS41MDc2MTMzNTExMDU3MjM1RS0xMQorNyxNb24gMzEgSmFuIDExLDIuOTkzNjg3NzU1NTQ3NTExRS0xMywyLjgzNzM1MTA0NzE1MzQ0MDVFLTEyLDEuNjUzMDI1MjQ5OTg3OTU0NUUtMTIsMi40MzMyMjk4NzE1NzMxNTA3RS0xMiwyLjIyNTM1NDk5NzA0OTEwMzdFLTExLDEuOTkyOTgwMjA4MDA0NDk1RS0xMiwxLjk5NzY0MDEzNzUxNzI2MDZFLTEyLDIuNjA2NTY3MTE2MzIxODI5N0UtMTMsOS44OTY4Mjc1NTY2NDEyNjZFLTEzLDcuNjg2Nzg1NTA5MjE3NjA3RS0xMiwzLjgyODAzOTIxOTg0Mzk5MDVFLTEyLDUuNDYwOTE3NDA5NjgzMzFFLTEzLDEuODk0NzY0NTA2ODM2MTU2N0UtMTIsNy4xMTgyNDM5Njc2MDM2ODlFLTEzLDYuMDE1NjEwODQ3NzgxMzQ1RS0xMiwzLjY5ODU3NTkwODE2MjM1NkUtMTIsMS45NDI1ODg1NTY3NDc2MjI1RS0xMiwyLjU4NjUxMjY3MTYzMjc1MUUtMTIsMi42MjU0NTgyODM4MTk2ODQzRS0xMiwzLjMwNTM3MTM3NDI0NjczNkUtMTIsMi44MDY4NDE5MzY1NDE1ODJFLTEyLDcuNTk1NTc4MDU1MTkzMzQ3RS0xMyw1LjI3NzY3MTI0OTUyNDE5MkUtMTIsMi40MDM3MTY0NzQ4MDUzNjE1RS0xMiwyLjg5OTgzMjAzNDkxMDM1N0UtMTIsMS45MDgwMjMyMjg4MzIzMTY1RS0xMiw0Ljk1OTgwOTE4NTI5Nzg2OEUtMTMsNC4xMDc0MjQ2MDY4ODQ4MTA1RS0xMiwzLjc1NzAzNzk3NDA2MjMyNUUtMTMsOS42MDMxMDM5ODEyMDA5M0UtMTMsNi43NTM0ODI0NDIwNDU0MzZFLTEzLDQuMzkxMjIxMDExNjUyMTkyRS0xMiw5LjgxMTQ3Mzk2MDU1NjU2N0UtMTMsOC45NTgxNzcwODg4NzQ5NjlFLTEzLDkuOTA2NTY5MzA4ODIxMjA0RS0xMiw2LjE4MDEzNTM2ODkyNTc0OUUtMTIsMi4wMjc2MjI3OTI5NjU4MTc0RS0xMiwxLjc4MTIwNTg1Mjg1OTg4MjNFLTEyLDYuNjM2NDI2ODA4NDkyNzQyRS0xMiw1LjM2NjYzNjk3OTg4Nzc5OEUtMTMsMi40NTE3OTc5MzczOTA4ODg2RS0xMiw0LjU1NTIzNDE5MDg1MzMzN0UtMTMsMy4wMDM5OTczNjk4NjkyMjlFLTEyLDEuMDQ5NTM5MTMzODA1NjU3M0UtMTEsMS4wNTUyMzI3MzUzNDAxMjkzRS0xMiwzLjY4NjYxNjAxODc3MjA1N0UtMTIsMy41MTM4OTk4OTMzMDY2Nzc1RS0xMywyLjk4MjM1MDE4OTY2MTM2MzRFLTEyLDMuMTUwMjk4MDIyNzU0OTEyNEUtMTIsMS4zODYzMDI3NDA5NjkxOTI5RS0xMiwyLjkxODE0MzE2MzY3MDIwNjVFLTEzCis4LFR1ZSAxIEZlYiAxMSwyLjMwNzUyMzg1ODQ3Njk2NjhFLTE0LDEuOTY0NDc4Mjg5MTUzMjUyNUUtMTMsMS4xNTY3Njg1ODQ1ODA4NkUtMTMsMS44ODE2NjYyMjM0OTQxOTI3RS0xMywyLjYxOTkyNDk0MTA1MjQ4MUUtMTIsMS41NjAxODk2MDc2NDIwNzI2RS0xMywxLjQyMzQ5MjAyNTk3Nzk0OUUtMTMsMi4xNTQ3Njk5MTkyNTg1ODRFLTE0LDUuNDYyNTQ3Nzk3OTUzNjA3NEUtMTQsNS45MDUzMzY4NzQ2MzY5NDhFLTEzLDIuOTgxNTk0OTgxMTIyNjk5RS0xMyw0LjM2Mjg0MzExNTI2NDI1NUUtMTQsMS4zMDUzMzk3NzMwNDg0MTgxRS0xMyw1LjE4ODMzMjc5MTg0MjkyMDRFLTE0LDQuNjA2Nzg5ODA3NDkyNjM0RS0xMywyLjYwMjc3NDc5NjU1NjMzNEUtMTMsMS4yODk4ODE3MTkwNzU4MzIzRS0xMywxLjc4ODk4MTI1MzQwNTQ4MUUtMTMsMS44Njk4Njc3NzUzMzYxNjJFLTEzLDIuNDU4NTMwMTQyMDkxMTJFLTEzLDIuMDczODc2MDMzMjQzOTk5N0UtMTMsNS4zODM0OTMxNDM5NTM0ODdFLTE0LDMuODk2NTE0NDk5MzA0ODgzNEUtMTMsMS44MzM4MDQzNTUwMzg5MjQ2RS0xMywyLjE2MDU3MjM4OTU1MjU4NjNFLTEzLDEuMjk4OTI4NDMyNTQzNzA5M0UtMTMsMy42MTU5NjI2MTEwNDEzMjA1RS0xNCwzLjA3ODY2MzkyMjU4MzMzNzdFLTEzLDIuNjc5NjgzMjkwNjQyNTczRS0xNCw2Ljk1MDAzMjA5NDg3NzgxMkUtMTQsNC45MzQxNzg2MjgxMzcwODhFLTE0LDMuMjYzMTgzNDcyMjUzODExRS0xMyw3LjIwMjUyNjQwMjM4NjI2MkUtMTQsNy4zMTE3ODkyNDY3NzU5OTlFLTE0LDcuMzYwODA2MzM4NDM2OTY3RS0xMyw0LjUyMTY3OTc5MTQ4MzE4NkUtMTMsMS40NDM5ODM0MjA2NDUzOThFLTEzLDEuMzI0ODU1NzYwMzQ4MjMyRS0xMyw0Ljg2ODQ0OTc5NDEwNTYyMUUtMTMsNC4wMTc0NjEwMTIxNzcyMDA2RS0xNCwxLjcyMjYzMjUyODQwOTQ2NTZFLTEzLDMuMjE0MzU4MDYxMTU0NzA2RS0xNCwyLjIyMjU2Mjg5Nzc5MDQ3NzRFLTEzLDcuOTA5MzM2MjYxOTk4NDAyRS0xMyw4LjE3NDk3MTQyMDMxMDM2NEUtMTQsMi43NDE2NzU3MDYxMjE2MThFLTEzLDIuNTE4MTA5OTE3MzI2MzYxRS0xNCwyLjI0MjgwNzgwNTAxMjYwMThFLTEzLDIuMjQzODU1MjExNDM4ODg1N0UtMTMsOS4wMjUzNTgyMjE0MDY0MTVFLTE0LDIuMDc0MDU3OTgzNjA3NTZFLTE0Cis5LFdlZCAyIEZlYiAxMSw0LjE0MzI5NDc2OTUyNTQ3NzVFLTE1LDMuMjgwNzUxODg1NTQ1NzI3NUUtMTQsMS45NDU3NjcyOTA5Nzg5NjYyRS0xNCwzLjM4NjEyMTUxMjE3Mjg0NjZFLTE0LDYuMjMxNDc5NjI2Nzc2ODg5RS0xMywyLjgzMDkxNTMyODE4NDkxNzRFLTE0LDIuNDIzODI5MTgyNjU1MjIyRS0xNCw0LjA1MTM4MzU4OTY0NTg0OEUtMTUsNy44MzU1NDAyOTk2NjU2OThFLTE1LDEuMDU3OTYyMDA2ODU1NzA5NkUtMTMsNS4zOTE1MzI1MDEwODk3MTA1RS0xNCw4LjAyNDkwMzgwODU1NzQxNEUtMTUsMi4xNzI2NjQxNDQxNjA1NTlFLTE0LDguOTcwMTMwMzM1NzA4NjA3RS0xNSw4LjIzNTQ3OTkyMTg3NTU5NUUtMTQsNC4zOTQ2MTQ3NTE2MDc3NTJFLTE0LDIuMDk0NDI2NzYwNTU5ODYwOEUtMTQsMi45ODU2MTU1MzM5NjQxNTNFLTE0LDMuMTgyNzQyMjM0NDc5NTQ1RS0xNCw0LjMwOTE4MDI3NDA5MTMwNEUtMTQsMy42MTg2NTUxOTMwMzY4ODhFLTE0LDkuMTMzNTEwMTQ4NzE0MDkxRS0xNSw2Ljc5NTQzMTA0NDYxNzE4MkUtMTQsMy4yNjk4NDU4MzE5NDYyMDFFLTE0LDMuNzkxMzA3NTI3MTcwOTgzN0UtMTQsMi4xNDQ3NjQ2Mjg3NzIyMDY1RS0xNCw2LjI1MjY2NDEzOTg3MTExOEUtMTUsNS40MjQyNDc1ODcyMjI4NzM2RS0xNCw0LjU2NTYyNDI4NzQwMjE1NUUtMTUsMS4xOTU4NTQ3MDAzMjAwOTI4RS0xNCw4LjU0NDQyNjU0MjU2MzgxNkUtMTUsNS43MTU5Nzk2OTMwNTUzOTdFLTE0LDEuMjUxMjU4NTQzMzEyMDkzNEUtMTQsMS4zNjM4OTY0MDYwODI1MjA4RS0xNCwxLjI4OTI1MjUyOTY5MzEyOThFLTEzLDcuODM3NjAwNDAyNzc4NzE3RS0xNCwyLjQ1NzcxODA1MzYzODQ2NDhFLTE0LDIuMzIyMTMzNTI5OTAxOTYwN0UtMTQsOC40NTM4NDExMTM5NzA3NzdFLTE0LDcuMDcyMzA5NzAxNzY1NzY0RS0xNSwyLjkwNTQyMzEzNjYzNDY2ODRFLTE0LDUuNDM3MTg3NjA3NDU4ODk1RS0xNSwzLjg4MTY1NzEzMDA4MTcxMUUtMTQsMS4zOTg2NDMzNTI5NDY4MDE0RS0xMywxLjQ3Mjg5Nzc1MDIyNjcxODhFLTE0LDQuODA0OTYwNTEyMzUwMTE4RS0xNCw0LjMwMzk5Njk5MTIyNjkxNjRFLTE1LDMuOTYwNDQ4NzE4NjA5OTUxNkUtMTQsMy44MTk1MzYxMTgxOTYwODNFLTE0LDEuNDQ2MjA1NTM2NjIwOTY3RS0xNCwzLjUyNTQxNzUyNjc2MjAwNjVFLTE1CisxMCxUaHUgMyBGZWIgMTEsMS4zMTE2MjMzODEzMjA4MzI2RS0xNSw5Ljg4NjE2NTY3NzQ0MzQ3OUUtMTUsNS44OTE4MjY1ODUwOTA2MjJFLTE1LDEuMDczNTU3MzI3NDY5MzA2M0UtMTQsMi4zNzU3NTczMzI5ODM3M0UtMTMsOS4wMjYzODc1OTMyNDMzMzhFLTE1LDcuNDAwMjQ1NzQ2Njc0ODM4RS0xNSwxLjMyMjY4MDgyNTAzNDI4NTRFLTE1LDIuMTMxOTQxMzUwOTIwMjY5NkUtMTUsMy4zNDM5ODcxNjA3MTkzOTFFLTE0LDEuNzE1MDYwNDUxMzQzNDc5NkUtMTQsMi41ODI2OTI4MzA5Mjg5OTZFLTE1LDYuNTMyMjc0OTUzNTM1OTE4RS0xNSwyLjc2NzE2NjU4NDE0MTc0MUUtMTUsMi41OTkyMTMwNzc0ODQzMjYzRS0xNCwxLjMzNDA5NzY4NjA5MTUwNDFFLTE0LDYuMTkyOTQ1NTIyODcxNjEwNUUtMTUsOC45OTI2NDI2Nzc1NzA3NzNFLTE1LDkuNzE0OTMxMTQ2ODcxNTE3RS0xNSwxLjM0MTc4MDkwNjE3NTUyMDRFLTE0LDEuMTIzMzE0MTcxOTg1Njg5M0UtMTQsMi43ODE3NDM4MzkxNzE3ODZFLTE1LDIuMTA4NzE4NTg1MDU4NjUzMkUtMTQsMS4wMzAxODM0Njk2ODkzNDhFLTE0LDEuMTgxNDU3MDMyNzA5MjgxN0UtMTQsNi40MTM3MjE5NjA4MDk1NDlFLTE1LDEuOTI5MDc2MjIwNDU2MTk5NUUtMTUsMS42OTQ5OTU1MzU4Nzc3MDAyRS0xNCwxLjM5NDUyNjk0MjI1NTIwNzdFLTE1LDMuNjc3MDc4MTM2MDI1ODIzNEUtMTUsMi42Mzg3MjAwODQ3MzU4M0UtMTUsMS43NzkwNzE2NDk5MTAzMjZFLTE0LDMuODcyNjI3NzE0NDAyMzUyRS0xNSw0LjQzMDcwOTYyMDAzNDg1OEUtMTUsNC4wMTI1MDY5MjkxNTYwMDZFLTE0LDIuNDIyMDA5NzQwNjk5MjMyNkUtMTQsNy41MDE2NDEzMzYzMzU1M0UtMTUsNy4yMzA1OTA1NDIyMjk1NDdFLTE1LDIuNjE1NjM3MTAzNTg0NDQ5RS0xNCwyLjIwODcxMjAyOTg3MDc2NkUtMTUsOC44MTM3NDIwNjQ1NTI3NjNFLTE1LDEuNjUyNjQzMDIzMzcyMTkzOEUtMTUsMS4yMDU3MTAxNzgyNzUwOTQ1RS0xNCw0LjM4MTUwMzcwMDAwODQyNEUtMTQsNC42NzM2NTYzOTg3NDYxNzA0RS0xNSwxLjQ5NjA0ODkyNzUzMzAwOUUtMTQsMS4zMTc0NDg4MTkyNDUwMzA3RS0xNSwxLjIzOTQ4MTc2OTg0MTY5OEUtMTQsMS4xNjU5MTI0ODU5ODIyNEUtMTQsNC4yMzgzNTc3MTk5ODUzODI1RS0xNSwxLjA3NTA4MzMzMjU5MjM0NDdFLTE1CisxMSxGcmkgNCBGZWIgMTEsNi4wNzI0Mjg5OTkwODAxOUUtMTYsNC40MjQ5MzI3Mzk0NjMwMDJFLTE1LDIuNjQ1NzgxMjQwMTE4MDgyRS0xNSw0Ljk3NTUxMDYxNjAxNjIxNkUtMTUsMS4yNDMxMDQ2Mzc1OTc2MTg4RS0xMyw0LjE5OTk0NjcxNzQ2NTE0NUUtMTUsMy4zNDE4Mjk3OTM3ODg5NDZFLTE1LDYuMjUzMjgxMzk5ODA3MDE1RS0xNiw4LjkwOTUzNjM0NzYwMTI2OUUtMTYsMS41NDY1MDkyOTE3ODE4NjY2RS0xNCw3Ljk2NzA2NTEzMTgwNTYxN0UtMTUsMS4yMDk1MjA4ODQyNDUyNzg4RS0xNSwyLjkxOTI5OTMxMjA4NTM5MkUtMTUsMS4yNTg0NTYyNzExMDY5MDI4RS0xNSwxLjIwMDgzNjEwOTUwODIzNDhFLTE0LDYuMDAxMjY1MzY3MTQ0MzUzRS0xNSwyLjczNjY5ODkwODcyNDQ5NzhFLTE1LDQuMDIzNzQxODQzMDA1Mjg4RS0xNSw0LjM4NjM3NjM3OTQ1NTg1OEUtMTUsNi4xNDEzNjA0MzIyMTc3MTZFLTE1LDUuMTMwNTkwNDYyMjg5NDI4RS0xNSwxLjI1NDA5Nzk0NjQzOTYwNUUtMTUsOS42Mjg5NzQxMDY4NzYyNEUtMTUsNC43NTM2MjA5NDQwODM3MjVFLTE1LDUuNDEwNDg4MzgyMTU4Nzc1RS0xNSwyLjg1NTg5NjcwMjY4Nzc4OEUtMTUsOC43NzM3NDIzNDQxNjY4NUUtMTYsNy43NzcwNDg5MzU1OTEyNDZFLTE1LDYuMjk5MjU3MDI5Njg3MTA3RS0xNiwxLjY2ODU1NDU1MjYwNDM5ODdFLTE1LDEuMjAwOTM3NzQ5NDQ1ODc1OUUtMTUsOC4xNDA0NzIzNDY3ODYwMTlFLTE1LDEuNzY1MTU0NDY0MDI5NDUwNUUtMTUsMi4wODgxNjQ0NzQ1Mzg0NjI3RS0xNSwxLjgzNTkyNDM0MjAyMDIxNzNFLTE0LDEuMTAyNzk5MjA4MjIzNDM3NkUtMTQsMy4zODY5ODIyODMyMzU5MTg1RS0xNSwzLjMwOTQ1NTEyNDQ5MTg1MzNFLTE1LDEuMTkxOTYwMDQzMjc1MzIwNkUtMTQsMS4wMTMwMDU4NjUwOTQ5NjU5RS0xNSwzLjk2Mjc5MTczMzU0OTA2OEUtMTUsNy40NDA0NTIwOTQ1MzE4NzdFLTE2LDUuNTA5MjkxOTI2NDYwMzY0RS0xNSwyLjAxMzgyMDE4MDk2NzExOTRFLTE0LDIuMTY3MzA5ODEwNTMwNjY3N0UtMTUsNi44NDcxMTIyODc3NTM2MzFFLTE1LDUuOTU5ODE0NTM2MzM0NDQzRS0xNiw1LjY5MzA3NTYyNzQ4MzgzN0UtMTUsNS4yNjQzMzc2MDUxODY2MzhFLTE1LDEuODYxNzcyNDY1Mzc2ODY0RS0xNSw0Ljg1MTAwNTEyMzY3ODU5NEUtMTYKKzEyLFNhdCA1IEZlYiAxMSwzLjYyNzYxMzU0NDczOTAzRS0xNiwyLjU4MjA0OTcxODMwOTUxOEUtMTUsMS41NDczMjg5NTI4MjgwNTlFLTE1LDIuOTc0NTcwMjIyMjA0NTU3RS0xNSw4LjA0Mjg1OTkwNzc5NTQ5NEUtMTQsMi41MTgwMjY1MDQ3MzAyMjY4RS0xNSwxLjk2MTkwNjQzNTU5NDg5OUUtMTUsMy43OTA1MzQ4OTMxMTI0NzlFLTE2LDQuOTY0MzcxMjkwMDk2MTUxRS0xNiw5LjIzMTY0NTM4ODE2MDQ2RS0xNSw0Ljc3MDk1NTE0NzQzNTg3MDVFLTE1LDcuMjg1MTkyNDY1MjMxNTIzRS0xNiwxLjcwMTcwNjc2NjEzNTYzMzlFLTE1LDcuNDI0MTE3MTI3MzYyODI3RS0xNiw3LjE2Mjk2MDc5NjA3NTkyRS0xNSwzLjUxMzg1OTc3OTQ3ODQ0MDZFLTE1LDEuNTgzMTY0MTY3MjY3NTI4RS0xNSwyLjM0NzQ0NTUzNTcwMTU3MDZFLTE1LDIuNTc0ODQxMTcxMjI2NTIzM0UtMTUsMy42MzkyMTMzMzM3NDgzNDFFLTE1LDMuMDM1NzczOTMyMDM3OTEzOEUtMTUsNy4zNTQwOTQwMDU3MDYzNzhFLTE2LDUuNjk2NTEyNDU4MjA0NjI4RS0xNSwyLjgzMzA1NjE1NjkxNTczNDNFLTE1LDMuMjA3MzM1NzQ1OTM1NTg4RS0xNSwxLjY2MDYzODk4NjI1MTM5M0UtMTUsNS4xNzYyMzc0OTk2MDk5OEUtMTYsNC42MTY0MDU0ODg5NzYyNjlFLTE1LDMuNjk4ODY1Njg1NjIzMjk2RS0xNiw5LjgyODMyMzA0MDA4MTc5NkUtMTYsNy4wODg0NjIzMjE1Mzg3MjFFLTE2LDQuODIyODUwMDIwNjMwOTI4NEUtMTUsMS4wNDI5NTQ4Njk5OTAyMzk1RS0xNSwxLjI2MzI5Mzg0NTQ0NDEyNzdFLTE1LDEuMDg3NjY5MzkwMzkzMTIwNUUtMTQsNi41MTEyMTcwNjE1Nzk5ODlFLTE1LDEuOTg4MTU4MTY2NjM2NzA3RS0xNSwxLjk2MTA5Nzc4NDIyMjkzNUUtMTUsNy4wNDE3NDA0NTk1NzU4OTJFLTE1LDYuMDExNDQ4OTAzNjg3RS0xNiwyLjMxOTUxMTEwNzg5MjA3NTZFLTE1LDQuMzU5MDM2MjUzODc0MDE2M0UtMTYsMy4yNjA4MzAzMjc0NzM1MDU0RS0xNSwxLjE5Njg0Nzk0MTAwNTkwMjJFLTE0LDEuMjk2MjQ2NTk5MDkxMjk4NEUtMTUsNC4wNTcyODQzNDgyNzYzNDdFLTE1LDMuNTAzMDc0MjgxMTI2MDUyRS0xNiwzLjM4MTg5NjIzNzc1NjgyM0UtMTUsMy4wOTAyNjg3NTU0MDA5MTQ3RS0xNSwxLjA3MjY4MzMyMjc1NDE1MzFFLTE1LDIuODQ2MzM4OTEzNDExOTIwN0UtMTYKKzEzLFN1biA2IEZlYiAxMSwyLjU3MDQ2NjQ1ODk3MzQ1MkUtMTYsMS43OTk3NTY0MDM3OTcxODFFLTE1LDEuMDgwMTc5MzkyMTUyMTc0NUUtMTUsMi4xMDg4Nzg3NzA2NzAyNDY1RS0xNSw2LjAwMTMzMzg0NDEzOTc0M0UtMTQsMS43ODg4NjE1NTQ1ODAwNDkzRS0xNSwxLjM3MzIwODYyODY4NzcwNzVFLTE1LDIuNzEzNzI4MDA2Mjc4ODk4RS0xNiwzLjM1NDMzNzY5NDEwOTQxOUUtMTYsNi41Mzc3OTEzMTMzNjc1N0UtMTUsMy4zODY1MTU2Nzk1MTg1ODFFLTE1LDUuMTkyOTE0OTcwNzY0MDg1RS0xNiwxLjE4NTI5MjM4ODIxNzkzMzRFLTE1LDUuMjEzOTcyMjY0NjkzMzMyRS0xNiw1LjA3MDA5NTU1MDY0MzgzNzZFLTE1LDIuNDU0OTg4NTQ1Mzg5ODAyNUUtMTUsMS4wOTcwMzU3NDUxMDg2MDU4RS0xNSwxLjYzNTk5MzE0NTgyMDc4MkUtMTUsMS44MDIwODIxMzQyNDIwMjVFLTE1LDIuNTYzODM1MTMzMDU5MjQxRS0xNSwyLjEzNjQ4ODQyMzMxNTE2NjNFLTE1LDUuMTQzMzQxMzkyMzg5NjI1RS0xNiw0LjAwODU2NDAxMjA4ODAxN0UtMTUsMi4wMDQwNDQ4MDkwMDc1MTZFLTE1LDIuMjYwMTgyNzQxMTY0MjdFLTE1LDEuMTU0NzQyMzYzNDY3Mjk0OEUtMTUsMy42MzU0MTQxMDMwNDM5MDdFLTE2LDMuMjU2MjI1NjAzNTQ0Njg4NkUtMTUsMi41ODkzMTk1MTc4NzA0MDU3RS0xNiw2Ljg5NTA2NTEzNzg2MjE3M0UtMTYsNC45ODAwNDA5NDQwNDYxMDJFLTE2LDMuMzk3MjIwMTE2ODYwMTRFLTE1LDcuMzMyNjY4NTU3MDE0MzYzRS0xNiw5LjAzMjgyOTQ5NTA2ODk3NUUtMTYsNy42NjE0MDM4MjQ4MDQxNTJFLTE1LDQuNTc1NDgxNzc4NzUxNzkwNUUtMTUsMS4zOTE0NTk0NDQ4NjE5ODk4RS0xNSwxLjM4MTU5ODAyNjU5NjI4OUUtMTUsNC45NTAyOTg1NzUzMDU2MTFFLTE1LDQuMjM5Mzg4OTkwNjQ0MDZFLTE2LDEuNjIwMTcxNTk0MTEyNzM4M0UtMTUsMy4wNDY2ODA4OTIwMTU3NzE0RS0xNiwyLjI5NTM2MDk2OTM0ODkzMDNFLTE1LDguNDQ5MzkxMzM0Nzg3NTUxRS0xNSw5LjE5MjczOTc0Mzc1NTM5OEUtMTYsMi44NTgyOTc4NjM1MDQ4Njc1RS0xNSwyLjQ1Mzk2Njc4Mjk3NzU0NjNFLTE2LDIuMzg2NzE3Mjg4ODg3NTkzM0UtMTUsMi4xNjI4NDc0MjYwMjczNTZFLTE1LDcuNDEyNzc4NDY5MTQ0MDg5RS0xNiwxLjk5MTQ5ODMyNDIwMTA4MjZFLTE2CisxNCxNb24gNyBGZWIgMTEsMi4wNDIxMDMxODEyNTk0OTNFLTE2LDEuNDEzMTk2Mjk5NzkxNTg2NUUtMTUsOC40OTA2NzcyMTA2MDI2MUUtMTYsMS42NzYwNjg2NTY0NDA2MDc2RS0xNSw0LjkyNzUzMDAyMDM3OTk3MUUtMTQsMS40MjM4ODUwMjc1OTQwMTc5RS0xNSwxLjA4MTM3Nzk5MTc3MDQ3OTRFLTE1LDIuMTcxOTQzNDMxMzQ3NTYxM0UtMTYsMi41NzkxNzE3ODQ1Mjk5MzU1RS0xNiw1LjE5MTgzNDA0NjU4Nzc0NkUtMTUsMi42OTM4NzkwODAxNTcxMDY1RS0xNSw0LjE0MzY3MDcyMzYzMzQ4NzNFLTE2LDkuMzAyNTU5MDgwNTc3NjQ1RS0xNiw0LjExNTY1NTYyMDMyMzc5MjRFLTE2LDQuMDI0NzQyMDExMTA5NDMxNUUtMTUsMS45MzA4MDg3NjQ5NTQwOTdFLTE1LDguNTc5NTY0NzYyMzA1NTJFLTE2LDEuMjg0NDc4NDI4MjE2NDU2M0UtMTUsMS40MTkwMzA3NjgwNzQ3NDIzRS0xNSwyLjAyODI4NTI4NjkwNTQwOEUtMTUsMS42ODg5NDY4NTQyNjc1MDUzRS0xNSw0LjA0ODA3MTY3MTM2NTQ4NUUtMTYsMy4xNjg2MDExNTQ4NjYzMzQzRS0xNSwxLjU5MDEyMTcwNDI4ODUxOTZFLTE1LDEuNzg4NDA2Njk5NjAxMDI2RS0xNSw5LjA1MjM1MzE4NzU2NTU2NEUtMTYsMi44Njk2OTI1Njg3NzE5MjNFLTE2LDIuNTc4MzAyNTIyOTE4NTgxNUUtMTUsMi4wMzkyMzY5NzU2MjQ4MzRFLTE2LDUuNDM4NTE3Mjc2MzcwMDY2RS0xNiwzLjkzMjAwNzk3MzI5ODAzMjdFLTE2LDIuNjg3MzA5MjEwODgzMDc4RS0xNSw1Ljc5MjUyMTQ0NDc4NzQwMUUtMTYsNy4yMjM4MDUyOTU2MjA5NTlFLTE2LDYuMDYwMzI5MjI5ODg1Njc3RS0xNSwzLjYxMzE0MDE1MjQ4NzcxNjRFLTE1LDEuMDk1NjgyMjc2OTUxMzVFLTE1LDEuMDkzMDAxMDAzNzQyODQ1M0UtMTUsMy45MTAyNTMxODc5MTYwNDZFLTE1LDMuMzU2Mjk1NzA1MzEzMDQxNUUtMTYsMS4yNzQwMzQ2MjM3MTYzNDA2RS0xNSwyLjM5NjgyMDk1NDY2MDAyM0UtMTYsMS44MTQ4MTM0NTAxMDc5MjAzRS0xNSw2LjY5NDQ4MzQ3NTMyNDM4MkUtMTUsNy4zMDc3MDcyNzMyNDI2NDNFLTE2LDIuMjYxMTk5Mzg0MDY0NTkzNEUtMTUsMS45MzM1Nzg5MjQ0MDgxOTE1RS0xNiwxLjg5MDU0NDYxNzE0OTYxRS0xNSwxLjcwMzEyNjY1OTAxNTIyNjZFLTE1LDUuNzg2NTgyNjMxODM1NTg2RS0xNiwxLjU2Nzg1NTU0ODQ2OTExNjJFLTE2CisxNSxUdWUgOCBGZWIgMTEsMS43NTE2MzQ3MTc0NzQzNDA4RS0xNiwxLjIwMTkxMjE0Njc3OTkwMkUtMTUsNy4yMjY1NjMyMDM4OTI5MTVFLTE2LDEuNDM4MTA1OTUyMDE1Njg0M0UtMTUsNC4zMTM5OTIzMDEwNjkzMzFFLTE0LDEuMjIzMTQ3MDQzODc1MDA5RS0xNSw5LjIxNTY2MzYwODQ2MDkxMkUtMTYsMS44NzMzMDM3Mjc1MDk5ODZFLTE2LDIuMTYyNjE5MjczMDAzODM3NkUtMTYsNC40NTE5NzM2NDc4NDczMzFFLTE1LDIuMzEyOTgwNTE1MjM5OUUtMTUsMy41NjYyNzkzMTg0MTEzNjhFLTE2LDcuOTA5MDczMTM2NDIxMjU4RS0xNiwzLjUxMzM3OTU3MTY2Njg2MkUtMTYsMy40NTAxODQxNzY5ODE5NDc2RS0xNSwxLjY0Mzk5MDcwODcxNzE3NTdFLTE1LDcuMjc2NzAwODIyNzg0NzE4RS0xNiwxLjA5MjM2MjY5NDMwMzE3OThFLTE1LDEuMjA5MjcyMTM5NTY3MDgxRS0xNSwxLjczNDI5NDA1NDI2OTc0MDdFLTE1LDEuNDQzMzUwMjkzNTc1MTQwMUUtMTUsMy40NDg0ODgzNTI0NjUwMDdFLTE2LDIuNzA3Njc0NTA1MDI5MDk5NkUtMTUsMS4zNjI2NDg0ODAzNzc1RS0xNSwxLjUyOTQwMjc2MDI4MjkzMjVFLTE1LDcuNjkwMjE3MDUxNTMyNjAyRS0xNiwyLjQ0OTc5MzYyMzQ0NTcxNTNFLTE2LDIuMjA2MDE5ODk4Nzk4MDgwOEUtMTUsMS43Mzc5ODQ1MDkzNzAzMDY0RS0xNiw0LjY0MDEyODMwOTQwODk2OEUtMTYsMy4zNTcyMjg2OTMyNTM5MTMzRS0xNiwyLjI5NzYxOTcxMDU3NDMwNDNFLTE1LDQuOTQ3NjI3ODgwOTUwMTkyRS0xNiw2LjIyNzUzNTg4MDE0ODg1RS0xNiw1LjE4MTQ2MTAyODk0OTk4NDVFLTE1LDMuMDg1MzE1NTI2Mjg2ODg0OEUtMTUsOS4zMzcxNTY1NzI2NTU2OEUtMTYsOS4zNDU3NTA2NTM3OTAwNTdFLTE2LDMuMzM5NzI2MzE5NDgwNzIzNEUtMTUsMi44NzEzNzEzMzY5Nzk3NTM1RS0xNiwxLjA4NDY1NzE0MTg5MzI3MjRFLTE1LDIuMDQxMTcwMzMxNzAyODAxRS0xNiwxLjU1MTA4NTg1MTc5MTUxNDJFLTE1LDUuNzMwNTQxNjQxMzc2MzY4RS0xNSw2LjI3MTI0MzIwMTA0MzMxNUUtMTYsMS45MzM0MjMzNzk1ODA5NDg0RS0xNSwxLjY0ODUwNDg4NDk2MzU0OUUtMTYsMS42MTgwMzAwMTQ3ODQ3MzY0RS0xNSwxLjQ1MTM4MjU1MzAxOTk1NUUtMTUsNC45MDE2NzI2NjE1Mzk2MjhFLTE2LDEuMzM1ODk5MzczMzc0NjA5RS0xNgorMTYsV2VkIDkgRmViIDExLDEuNTgxNzEyMjQyNTE5MTM5NUUtMTYsMS4wNzg0MjM4NjI0MDA5Mjg1RS0xNSw2LjQ4NzQ2MjM4NDczNTI2MkUtMTYsMS4yOTg5MTM2MTA4OTgyMTQ2RS0xNSwzLjk0Mjk3MjIyMTE0OTg0OTVFLTE0LDEuMTA1NzgxNzgyNjc5MzA4NUUtMTUsOC4yODA3ODQzMjI4ODEyMTU1RS0xNiwxLjY5ODc3MDMwODQxNzQ2NjZFLTE2LDEuOTIxNzcxMDI1MzgwMjc0OUUtMTYsNC4wMTkxMTcwNTU3NjAyNTdFLTE1LDIuMDkwMjM2OTYwODUzMDQ5M0UtMTUsMy4yMjg5NzI5NDEyOTMxMTM3RS0xNiw3LjA5NDc3Njk5MDc3NzQwOEUtMTYsMy4xNjA4OTc4OTIxNjM2MUUtMTYsMy4xMTQwMDk0MjMyNTM2MDZFLTE1LDEuNDc2MjY0NTM3OTE3NDU5MUUtMTUsNi41MTY1MDkyMjgzMjYxMDNFLTE2LDkuODAwODE4MDY5OTgyNTczRS0xNiwxLjA4NjU2NzQ4MTA5NTAyNjRFLTE1LDEuNTYyMjEzMzk4OTM2NjE1M0UtMTUsMS4yOTk1OTc3ODIxMTQ1MTNFLTE1LDMuMDk3Nzg5Mzg1NDg3MzgyM0UtMTYsMi40Mzc4ODU5Mzg1MzMyNDhFLTE1LDEuMjI5NTQxNDExOTgwNjI2NEUtMTUsMS4zNzc4MDE1MDMxODI5OTYzRS0xNSw2Ljg5NDYwNTY2MDE1ODYwM0UtMTYsMi4yMDQwNDcyNDgwNjQ1NjFFLTE2LDEuOTg4MTIwMTA1NDc0MzgzRS0xNSwxLjU2MTc1MTI1MDY2NTc4OTdFLTE2LDQuMTcyOTIzMDI1MjMzNThFLTE2LDMuMDIwODI5NDEwMTQyOTE2NUUtMTYsMi4wNjk1MjQyNTUzNzg4MDE3RS0xNSw0LjQ1MzExNTUxODEyMDM4NUUtMTYsNS42NDU3MTUyNjYxNjcxMDRFLTE2LDQuNjY3MDM2NDcyOTg5MTYzRS0xNSwyLjc3NjM5MjI3MzAyMjM1OTRFLTE1LDguMzg5Njg1NTMzNTMzNzE3RS0xNiw4LjQxODQ0Mjc1MDc0MTE4NEUtMTYsMy4wMDU4MDE1NTExNzQyMjYzRS0xNSwyLjU4NzUzOTExMTkwMzg2NUUtMTYsOS43MzkxNzk3NDc5OTE1NUUtMTYsMS44MzMxNzUwNjY2MDYyOTI5RS0xNiwxLjM5NjcyMDEzOTA5MDU1OTdFLTE1LDUuMTY2MzY4MjY5Mjg3MTY5RS0xNSw1LjY2NTAxNzQ0MzE5ODQxNEUtMTYsMS43NDE1Njc1OTc1Nzc4ODhFLTE1LDEuNDgxNzE3MjA3MzcyNzk0MkUtMTYsMS40NTg1Mjk3NDM2MzUxNzhFLTE1LDEuMzA0MTE2ODkyNzg3Mzg2N0UtMTUsNC4zODU4MDc5MzkxNzUwMTlFLTE2LDEuMjAwMjE2ODc1NDQyODNFLTE2CisxNyxUaHUgMTAgRmViIDExLDEuNDc4MzIxMDE1NTA5NTU3RS0xNiwxLjAwMjk3MDQzNTY4ODQ4NDhFLTE1LDYuMDM1ODM1MTAwOTE1NzY5RS0xNiwxLjIxNDI1MDMxNDMzODU2OUUtMTUsMy43MDk0Mzk4ODAxNDk3NjNFLTE0LDEuMDM0NDk2MDQyMjgwNDQyM0UtMTUsNy43MDk1NjQxNTI0Nzc1NzFFLTE2LDEuNTkzMTEwMzYwMzUyOTUzNkUtMTYsMS43NzU1Mzc1ODgzMzk1ODQ1RS0xNiwzLjc1NTY1MDE4Mzc4NzgzMjZFLTE1LDEuOTU0ODY0Mjk1ODYwOTE1RS0xNSwzLjAyNDYwMDEzMzM1Mzc0M0UtMTYsNi41OTcyNTAzNzA0ODA5NjFFLTE2LDIuOTQ1NjI0NDY2MDU5OTc5RS0xNiwyLjkwOTMyNTM0Njc0NDc4MDRFLTE1LDEuMzczNzc1MjQ2NDUzNTg5N0UtMTUsNi4wNTIzMjM3ODY4NTE2OTZFLTE2LDkuMTE0NzY4NDc1NDA5MjI1RS0xNiwxLjAxMTU5MzM3MTc0NzE3MjRFLTE1LDEuNDU3MjA3OTI2MTc0NjY4RS0xNSwxLjIxMTg0ODc2MzI5MTMwNTJFLTE1LDIuODgzNDk5Nzk3MzcwMjYyNkUtMTYsMi4yNzMxOTY1NTA1ODI0MTU4RS0xNSwxLjE0ODQ2ODU0ODM4MzY4NTFFLTE1LDEuMjg1MzAxNjcxODAxMDMxN0UtMTUsNi40MDg1NjcyNjkwMTcxODJFLTE2LDIuMDUzOTYyMDc1ODcyNzg3NEUtMTYsMS44NTUyMTcwNzAwNDYyNzI1RS0xNSwxLjQ1NDA3MjA3MTg0NDc0MTRFLTE2LDMuODg3NTI5MDE3MTM2OTQzNEUtMTYsMi44MTUzOTM3MDkxMTg5NTc0RS0xNiwxLjkzMDMzMDk2NDMzNzcyM0UtMTUsNC4xNTExNzMzMjcyMTU2NzVFLTE2LDUuMjkzNzQ5MTY4OTM1RS0xNiw0LjM1MzExMTIwMTkwODMxMkUtMTUsMi41ODc3NDUwMDg5ODQ5OTk1RS0xNSw3LjgxMDc2ODI2ODg4Mzk5MkUtMTYsNy44NTI1ODk0MDUwODIyMjFFLTE2LDIuODAxOTA2NTYzOTkwNDE0RS0xNSwyLjQxNDQwODAyMzE4NzcwMTRFLTE2LDkuMDYyNTA1ODU3Mjc0MThFLTE2LDEuNzA2MDgwMDIwMDA2MjY3RS0xNiwxLjMwMjQ5ODcwNDk0OTMxNkUtMTUsNC44MjIzOTMxOTI4NjcyMTJFLTE1LDUuMjk2MzU1ODE2NzM0NTg4RS0xNiwxLjYyNDQ5NDEzMjM5NjQxOTJFLTE1LDEuMzc5ODE1MzU3ODg1MjU4OEUtMTYsMS4zNjEyNjgxNzYwMjk0NjAyRS0xNSwxLjIxNDEzNTc3MjkxNDAwNDdFLTE1LDQuMDcwOTYwNjUzNzAyOTUxN0UtMTYsMS4xMTczMTE2NDUwMjgzNTM2RS0xNgorMTgsRnJpIDExIEZlYiAxMSwxLjQxMzk0NzU1Njc1OTM2MThFLTE2LDkuNTU1MDA4ODQ3NzQ1ODI3RS0xNiw1Ljc1MTc4MDI2MDExMjQ3NEUtMTYsMS4xNjE1NzM0MjM2MjM0MzhFLTE1LDMuNTU3OTkzNTUwNTk2NDQ1RS0xNCw5LjkwMjYzODIwMjQ5OTAyMkUtMTYsNy4zNTA1NDIzOTU2ODUzNjFFLTE2LDEuNTI4MDAzNjQ2MzE5MTk3RS0xNiwxLjY4MzgwMTczNjg1MjU3NzdFLTE2LDMuNTkxNDk5OTQ2NjA1NTAzRS0xNSwxLjg3MDc2OTAzMTU0MDUxOEUtMTUsMi44OTgzODE4Njg1NjgzN0UtMTYsNi4yODQyMTU4ODk5OTM1NzFFLTE2LDIuODEwNTIwMzcwMzg0NDY3RS0xNiwyLjc4MTcxOTY3OTIwODIyNjRFLTE1LDEuMzA5MzI1MzA4NzE0NDAzNkUtMTUsNS43NjAyMDQ0OTU1ODQzNTZFLTE2LDguNjgzMTQ5NTgxMzI4NTU3RS0xNiw5LjY0NDY5NjE5ODI2NzE0MkUtMTYsMS4zOTE0NDM3Mjc4MDc1ODg4RS0xNSwxLjE1Njg0OTcxMTMzMDMzN0UtMTUsMi43NDg3ODE5MTg2MTEyMTE1RS0xNiwyLjE2OTk2NDU0ODQwNDI0NUUtMTUsMS4wOTc4ODk0ODAzMzcxODdFLTE1LDEuMjI3MzgyMDI4MDc2NTQ0NEUtMTUsNi4xMDI3MTUzNjI5NjQwNzdFLTE2LDEuOTU5NzcxNTQ4Nzg0NTk4M0UtMTYsMS43NzIwNjUxMTc2Mzc0Mjk1RS0xNSwxLjM4NjM5Njk0MjgwNjQ5NTdFLTE2LDMuNzA4MzE5OTU0NDY1OUUtMTYsMi42ODY0ODk3NzA2NTI2ODE1RS0xNiwxLjg0MzE0NTM4MzgxNDIxM0UtMTUsMy45NjE3OTcyNzc5ODg4MzI0RS0xNiw1LjA3NzA3NjczNDg4MzAzOUUtMTYsNC4xNTY0NzY5NDMwODM3OUUtMTUsMi40NjkzOTAwNzMyNjgxODA2RS0xNSw3LjQ0Njg5ODAzMTU1ODczNUUtMTYsNy40OTgxOTkzMDQ4NDA4NzdFLTE2LDIuNjc0MDE2Nzc0MDgwNjU0RS0xNSwyLjMwNjA2ODE3MTU0NTYzNDNFLTE2LDguNjM2OTU5MzM5OTgyMDlFLTE2LDEuNjI2MTY0NzQyNjU3OTM5OEUtMTYsMS4yNDM0NTE3NDQyNTM5MzUyRS0xNSw0LjYwNzM1MzI0NjYxOTY5MkUtMTUsNS4wNjcwNjU2NDA5MTExNDlFLTE2LDEuNTUxMTcwNDQwNDQ4MTk5NEUtMTUsMS4zMTU3ODczMTg4NzQ2Njk4RS0xNiwxLjMwMDQ0NDc5OTQzNTg4M0UtMTUsMS4xNTc1Nzk4NDU4MjkwNTM0RS0xNSwzLjg3Mjg0NTczODI0NDg2RS0xNiwxLjA2NTE5Nzg3MjA4NjExMzlFLTE2CisxOSxTYXQgMTIgRmViIDExLDEuMzczNDUzMTkwNzkxOTA1NUUtMTYsOS4yNTA3MDI4NDA5MzQ4MDNFLTE2LDUuNTY5ODAxNjAzNDk2NzhFLTE2LDEuMTI4NDc1OTY1NDEwMDA4OEUtMTUsMy40NTczNjQwMjkxODczOTFFLTE0LDkuNjI2MDI3NjEzMTAzMTY1RS0xNiw3LjEyMDg3OTAxODMzMDExNUUtMTYsMS40ODc3ODMwMTU2OTU5MDQ0RS0xNiwxLjYyNDk4MjM4NDUxNTQ0MzZFLTE2LDMuNDg4MTIwODE3MTk2NjY4RS0xNSwxLjgxODA3NDA4MTY4MTUzMDRFLTE1LDIuODIwMDg1NDIzOTI2MzYzRS0xNiw2LjA4MzQ5MzY2NDI5MDQ1N0UtMTYsMi43MjQzMzgwNDkyODU1NTdFLTE2LDIuNzAxMjY5Mzg1OTY3MzI0NEUtMTUsMS4yNjgwNTIyNzAxMTMyODM1RS0xNSw1LjU3MjY4NjQzMjY4MTUzOUUtMTYsOC40MDY0NDMzMzQ1NTQ5NDVFLTE2LDkuMzQzMjMzNDY0OTk5NjY5RS0xNiwxLjM0OTY0OTQ0MDEyNDQ5OTlFLTE1LDEuMTIxODQ4Nzg5MTk5NTI3NEUtMTUsMi42NjI1NjA2MjI3ODU1ODE1RS0xNiwyLjEwNDI1ODg5MTAxNjkyMDhFLTE1LDEuMDY1OTYyMTMyNzE5NzM0RS0xNSwxLjE5MDU4Njk3ODAxNTA4NTRFLTE1LDUuOTA2NTAzODk4MTkwNDgzRS0xNiwxLjg5OTY5MDAyNDg2MjQyM0UtMTYsMS43MTkzMTQ4NTAwMjQ5NjA2RS0xNSwxLjM0MzEwOTY3NDQ0NjQ5RS0xNiwzLjU5Mzg4NjkzNzk2MTgzNkUtMTYsMi42MDQyOTMwNzk4NTA4Njc0RS0xNiwxLjc4NzcyNjQxMDYyMDI2ODVFLTE1LDMuODQxMTM1ODA4NTU1OTExRS0xNiw0Ljk0MzQyMjY2MjEyODQxRS0xNiw0LjAzMTQ4NDI1NTAxNjQ4RS0xNSwyLjM5MzkzNzM0NjkxMjI1OUUtMTUsNy4yMTQxMTkyOTUzNDM0MDFFLTE2LDcuMjcyOTc4MTY1NDgzMTk1RS0xNiwyLjU5MjUyMTg4Mzk2MDMyMkUtMTUsMi4yMzczMTgwOTk5ODk5ODJFLTE2LDguMzY0NDExNDMxMzUwNDgzRS0xNiwxLjU3NDk5ODc2NzIxNTEzMTVFLTE2LDEuMjA1ODg0ODM3MTAwNjc2NUUtMTUsNC40NzExMjQ5MDA1NzczOUUtMTUsNC45MjMwOTU2Nzg0OTkyNzFFLTE2LDEuNTA0NTcwMzk0ODMwMDk5N0UtMTUsMS4yNzQ4NTMyMjgyNTY5MzQzRS0xNiwxLjI2MTg5MTgwMDAxMDY0OThFLTE1LDEuMTIxMzk5ODcyODE2MDk5NEUtMTUsMy43NDU2NDI5MTM1MjMwNTdFLTE2LDEuMDMxODUyODA1NzM4MTkzNkUtMTYKKzIwLFN1biAxMyBGZWIgMTEsMS4zNDgwMTE2MTk0ODYwNDEzRS0xNiw5LjA1MzM4MTI5NzI0ODI4RS0xNiw1LjQ1MTkzNTI2NjczOTU3OUUtMTYsMS4xMDc3MjI2Mjg0NTg5ODg3RS0xNSwzLjM4ODk5MzQ5NDk2MzY5MzdFLTE0LDkuNDUzOTQ1MTIzNjI2MDU2RS0xNiw2Ljk3MjUxMDIxMDAxMzQ5OUUtMTYsMS40NjMyNzI0MzM0NzgyMUUtMTYsMS41ODY3MTM1MDMyNjExNTM1RS0xNiwzLjQyMzA0NDgzNTU2NDEyNjNFLTE1LDEuNzg1MTgxODUyMDEwMTA2M0UtMTUsMi43NzIwMzgyMzYxMzU3MDg0RS0xNiw1Ljk1MzI3OTk2OTY3ODMxNEUtMTYsMi42Njg5MjQ0ODcyMTcwNThFLTE2LDIuNjUwNTM2MzU5NTgwNjY5N0UtMTUsMS4yNDEzMzg3NzU0NDMyMDZFLTE1LDUuNDUwNzY5MTk1ODgxODUzRS0xNiw4LjIyNzAwMDk5NDc2MDM5N0UtMTYsOS4xNDg0NjI4OTQ1ODQzNDdFLTE2LDEuMzIyOTQyNDU3ODY1MjEwOEUtMTUsMS4wOTk0MzE5MTUxNzg5NDUzRS0xNSwyLjYwNjgxMTQwMjQyNDQ5NUUtMTYsMi4wNjIxNjY0MDgzNzUxNzlFLTE1LDEuMDQ1Nzg3MTUzMDUzMzYwNEUtMTUsMS4xNjcwODkyMjcwOTU3NTg0RS0xNSw1Ljc3OTEwMDI4NDEyNjY5RS0xNiwxLjg2MTA2MTEzNDM5Mjk5MTRFLTE2LDEuNjg1NzA2MjA4Mjc0ODcwOUUtMTUsMS4zMTUxNDkyOTA3MDc3Mjk3RS0xNiwzLjUyMDE4MzY0MTY0MDYzMzdFLTE2LDIuNTUxNDc0OTE2MzE2NDMxRS0xNiwxLjc1MjMwMTQ1NzY3OTc3NDNFLTE1LDMuNzYzNzAzMDA0NzEyOTQ4M0UtMTYsNC44NjIxODY0Mjk5NjI2MjNFLTE2LDMuOTUxNTgyODEyNTE5Nzg1NUUtMTUsMi4zNDU0NzEyMjM0MTE1MjNFLTE1LDcuMDYzNzIyNjU4MjIyMTY1RS0xNiw3LjEyOTA1OTQzMjYxMDI1OEUtMTYsMi41NDAyMTM0OTY5NTgxOThFLTE1LDIuMTkzNDkzNDEyOTY3NzEzN0UtMTYsOC4xODc5NzEyNDE4MzA3NThFLTE2LDEuNTQxODk0NDIwNzE0NDgzNUUtMTYsMS4xODE4MzUyMTI0ODM2NTQ2RS0xNSw0LjM4NDUyOTQwODQ2OTI0N0UtMTUsNC44MzI5MjExMTAzODU0NjZFLTE2LDEuNDc0NzkwODI1NjEyMzkyNEUtMTUsMS4yNDg0MzUxMzQwNDYwMDU2RS0xNiwxLjIzNzM2MjY5NDI5MTcyMThFLTE1LDEuMDk4MDI0ODY4MjEzMzcyRS0xNSwzLjY2Mjg4OTg4ODA3MzMwMzNFLTE2LDEuMDEwMzAxODMwNjM1MTRFLTE2CisyMSxNb24gMTQgRmViIDExLDEuMzMyMjUzMTkxMDU3NDA5RS0xNiw4LjkyNDY2OTkxMzM0NDY4RS0xNiw1LjM3NTE5NDc1NDU1OTcyNEUtMTYsMS4wOTQ5MTA3ODcwNDExMTM0RS0xNSwzLjM0MTQ1ODUyMjQ0NjcyM0UtMTQsOS4zNDkxMzIzNzg2NTE1NjlFLTE2LDYuODc2MzEyMTM0NjgwMDIxRS0xNiwxLjQ0ODg2Nzg1NjcxNDQxNTNFLTE2LDEuNTYxNTcxMDMzMDk4ODk5OEUtMTYsMy4zODI2MDU5MTY3NTQ3NjZFLTE1LDEuNzY1MDMyMTQzNjA1MTc2MkUtMTUsMi43NDM0NjQzNTkzMjY4MjRFLTE2LDUuODY4Mjc5MTE4NDgxMDEyRS0xNiwyLjYzMzI2ODkxMTU0ODU5MzNFLTE2LDIuNjE4OTE1OTIyMDkyNjA2NUUtMTUsMS4yMjM5NjU5NjA4MjQwNjUyRS0xNSw1LjM3MDg4NjMyMjIxMTg0N0UtMTYsOC4xMDk5MzM1MTk3MjczMjM1RS0xNiw5LjAyMjE2MTAxMDE1MjAyN0UtMTYsMS4zMDU5Mjk2NjQ3MTI1OTEzRS0xNSwxLjA4NTA5OTEwNTY3NDg3NUUtMTUsMi41NzA2MTQ5NjIzNDg1NzJFLTE2LDIuMDM1MjQyODA4MzAzMzc5RS0xNSwxLjAzMzE2OTc1NjA3MzEwOUUtMTUsMS4xNTIxMzU5Nzg1NTk4MTM3RS0xNSw1LjY5NTgwNzgzNjg0MTUxMzVFLTE2LDEuODM2MjA4MDI3ODM5ODQ5MUUtMTYsMS42NjQzOTk4NDcyNDMzNDJFLTE1LDEuMjk3MDI1MTU3MDU0NTkwMUUtMTYsMy40NzI2Mjk0NDU1NTUxMjNFLTE2LDIuNTE3NTIzMzEzNTMwMTA0RS0xNiwxLjcyOTcyMzA3ODQzODQzMjJFLTE1LDMuNzE0MDM1MDcwODY4MDAxRS0xNiw0LjgxNDY4NjgwNzAxMzI5NkUtMTYsMy45MDA2NTMzMTg4ODU3NTE1RS0xNSwyLjMxNDMzNjMxMzkzNDU0OTRFLTE1LDYuOTY2MTkzODU4MTk5OTY3RS0xNiw3LjAzNzM4MDcwMTIyODQwM0UtMTYsMi41MDY2NTA2MTIxNzczNjE1RS0xNSwyLjE2NTY4NzU2NzM0MTc4MDFFLTE2LDguMDczMTg2NjM2MDk1MDc0RS0xNiwxLjUyMDM3ODI3OTM4MzM4M0UtMTYsMS4xNjY0Njk1MzIzODMwNjIxRS0xNSw0LjMyOTgzODQ2MTIzNzQ5NUUtMTUsNC43NzczNTcyMjIxMTM3NjRFLTE2LDEuNDU1ODE5MDIzMzcxNzJFLTE1LDEuMjMxMzM0MDM1MTUyMDU0OEUtMTYsMS4yMjE4NDc2ODYyOTQ3OTQyRS0xNSwxLjA4Mjg2NzM0OTAwMzQxMDhFLTE1LDMuNjA4NjA4MDA2MDY2MjU0N0UtMTYsOS45NjMxOTIwNzUzNzMxMTNFLTE3CisyMixUdWUgMTUgRmViIDExLDEuMzIyODA5NjU3NTI1ODA2RS0xNiw4Ljg0MDU5OTgyNzEyNTIxMkUtMTYsNS4zMjUyMTc4NDYyOTUxNzFFLTE2LDEuMDg3Mjc4Mjk2Mjg2NjcxRS0xNSwzLjMwNzU0MTkxMDI0OTU2N0UtMTQsOS4yODgxOTgwMjczNTk1OTdFLTE2LDYuODE0MDc3MjAyNTQ0NzQ0RS0xNiwxLjQ0MTA0MjMzNTAyMDUwNTZFLTE2LDEuNTQ0OTQ0OTY2NDc0NDY2NEUtMTYsMy4zNTgyMzMxNzg2NzE5OTJFLTE1LDEuNzUzMTkzNzMwMjU0MDAwNUUtMTUsMi43Mjc1OTA2MzEwNjQxMDE0RS0xNiw1LjgxMjY5MzU5NTgzNzg4NEUtMTYsMi42MTA0ODIwNjY0MDk4NEUtMTYsMi41OTk3NTgzMDEzNjQwODE1RS0xNSwxLjIxMjY3MjQ0NDI4NzU3NjhFLTE1LDUuMzE4MzM1NTM3MDA4MzI4RS0xNiw4LjAzMzQ0OTYzMzY0MjE4OUUtMTYsOC45NDA0MzE3NTM4NjQzNUUtMTYsMS4yOTUyMzM5MTUxMTkyNDg2RS0xNSwxLjA3NjAzMzI4MDYxMjg0OTdFLTE1LDIuNTQ3MTQ2MDE3OTQyMDI5NUUtMTYsMi4wMTgyMDE5NjAwMTY4NDI2RS0xNSwxLjAyNTQ4MDA2OTY3NzExMkUtMTUsMS4xNDI3NTA4MzI1NTE4Mzk1RS0xNSw1LjY0MTIwODQ2ODQ2NzE2NUUtMTYsMS44MjAzMjczODU0MzAyNzY1RS0xNiwxLjY1MTExMTU0NzM1NDYyNDRFLTE1LDEuMjg1MzA0NTQxMTk2NzU5OEUtMTYsMy40NDIxMDM5MDY4NzkxNTFFLTE2LDIuNDk1ODYwNTEyNjkzNzEyRS0xNiwxLjcxNTUxNTc0OTkyNjg5MDRFLTE1LDMuNjgyNDUzODk1MDEwMjc3RS0xNiw0Ljc4OTE2OTcxODYxNzkwOUUtMTYsMy44Njg2MDIzOTM0ODYzMDdFLTE1LDIuMjk0NDkwNTI0MDkyODIxNkUtMTUsNi45MDMwODE1OTU0MDM1NTRFLTE2LDYuOTc5NzQzMjIzNDk2NDk4RS0xNiwyLjQ4NTI5ODgzOTY2OTQzNUUtMTUsMi4xNDgzMjE3NDg3NDQ0MjA3RS0xNiw3Ljk5ODUyODgxNzI5NzYxNEUtMTYsMS41MDY0MDQ2MDYxNzU5MTI1RS0xNiwxLjE1Njc2MTg2MDA0MjY3MDJFLTE1LDQuMjk1OTQ0MTQyMDg3MTgyRS0xNSw0Ljc0NDM2NjYxNTU1NTc3NEUtMTYsMS40NDM4ODk4ODExMTQwODM3RS0xNSwxLjIyMDI5OTAwMzEyNjg5OTRFLTE2LDEuMjEyMjA4MTI0NDgzNDA1N0UtMTUsMS4wNzMwNTkzNjM3MDQ4MTQ1RS0xNSwzLjU3MjgzNDAxMzI2OTA4MjZFLTE2LDkuODcyNjMzMjUwMTgyMTJFLTE3CisyMyxXZWQgMTYgRmViIDExLDEuMzE3NTIyMDU1NDA1NjAyMkUtMTYsOC43ODU4NjI1MTQ5NDU1NTFFLTE2LDUuMjkyODI5MzA5NjExODg0RS0xNiwxLjA4MzA1NDQwODU2MDE3MThFLTE1LDMuMjgyNTk5OTQzNTA3ODg5NUUtMTQsOS4yNTYxMzcxNTY4NzUyMDNFLTE2LDYuNzc0MTY4MTk5MTk5MzQxRS0xNiwxLjQzNzUyODczNjUwOTk2MzVFLTE2LDEuNTMzOTAzMzY4Mjk0MTAyOEUtMTYsMy4zNDQ0MzM3NjYwNDUzMDJFLTE1LDEuNzQ2ODI0ODM4MzQ3ODYyN0UtMTUsMi43MjAwNjc3MDg5NTQ0OThFLTE2LDUuNzc2NDM0OTMyNTI4MTI0RS0xNiwyLjU5NjE1Nzg0OTE5NTU2MjRFLTE2LDIuNTg4ODAyNDY0MDYzODU4RS0xNSwxLjIwNTM3NDQyMDQwNjk4NDNFLTE1LDUuMjgzNzM1MTA2MDY5MjE5RS0xNiw3Ljk4MzYzMTkyODUwNjg3NEUtMTYsOC44ODgwMDIzOTg0OTg0OTVFLTE2LDEuMjg4NjkzODIzMTg3NjI2N0UtMTUsMS4wNzA0MzE5Mjk1NzExNDNFLTE1LDIuNTMyMDQyODcyNDMyNDI4NUUtMTYsMi4wMDc2NjE2MTk0Mjk2NjlFLTE1LDEuMDIxMDMzMjE5MDc3NjI0RS0xNSwxLjEzNzAyODc2MTEyNTU0OThFLTE1LDUuNjA1NDU4NTk1NzgxOThFLTE2LDEuODEwMzQ3MTY1NzA5NDExM0UtMTYsMS42NDMwOTg1ODkxNzI4NjUyRS0xNSwxLjI3Nzc5MzM4OTA3NTQxMDJFLTE2LDMuNDIyNzc1MjExNjE1OTQ4RS0xNiwyLjQ4MjI3OTMxNDgxNzg2OUUtMTYsMS43MDY4MTUyMTczOTAwOTE4RS0xNSwzLjY2Mjc2ODMwMDc4NjI4MkUtMTYsNC43NzgwODA3MzQ1NDU5NjRFLTE2LDMuODQ4OTcwNDgyNDkwMTkxRS0xNSwyLjI4MjA2OTA5NDY1MzY5NTRFLTE1LDYuODYyNTkzMDgyMjM4ODMxRS0xNiw2Ljk0NDQ5OTczMjg4NzE0RS0xNiwyLjQ3MTk3ODE2NDY4NDUzMjVFLTE1LDIuMTM3ODI0NjI0MjA2MTU1RS0xNiw3Ljk1MDI0Mjg2ODczODUyOUUtMTYsMS40OTczODgyNjc3Nzg1NTA0RS0xNiwxLjE1MDc3NTk1NTQxNTUxOTdFLTE1LDQuMjc1NzMzNzE3MzQyNDk4RS0xNSw0LjcyNjIzMTcwOTc1ODE5OUUtMTYsMS40MzY1OTM3Mjk4OTExMTM2RS0xNSwxLjIxMzI1MTkxNTQ3NDYyM0UtMTYsMS4yMDY0MzQ0MDY2MDU4RS0xNSwxLjA2Njc2NzkwOTQ3MTI1MjVFLTE1LDMuNTQ5MjEyNjYwNjMyNjcyRS0xNiw5LjgxNDQ1OTM4MDUxMzc2RS0xNworMjQsVGh1IDE3IEZlYiAxMSwxLjMxNDk4NTU5MDMzOTU3MzJFLTE2LDguNzUwNTI3NzI0MzgxOTg0RS0xNiw1LjI3MjA3NjIyMDgyNzI1MkUtMTYsMS4wODEwODY3NjY2NjAxNTE0RS0xNSwzLjI2MzYwNjc3MjQ5NDc4OTVFLTE0LDkuMjQzMTc5NDQ0OTE1MjkyRS0xNiw2Ljc0OTAzMjAzNzI4MzkxRS0xNiwxLjQzNjg0ODMxNzc1NjQ5MUUtMTYsMS41MjY1NTAxMjM0NDY3MjdFLTE2LDMuMzM3NjM0MTAyNjM2NzcyNUUtMTUsMS43NDQwNzU1MDk1MzU0MzQ2RS0xNSwyLjcxODA2MDg3ODc2Mzc1NUUtMTYsNS43NTI5NTk1NzIxMjkyMDRFLTE2LDIuNTg3NDM0OTIyODY1NTU5M0UtMTYsMi41ODMyNzY2MTQ5NDYzNjg0RS0xNSwxLjIwMDcxOTc1OTY1MjQ5NDdFLTE1LDUuMjYxMDAzNDUxNDg0ODc2RS0xNiw3Ljk1MTQ1MjY5ODY2Nzc3NUUtMTYsOC44NTQ5NjAzNTgzMzUxMTRFLTE2LDEuMjg0OTA0OTM2Mzk5MDk2NEUtMTUsMS4wNjcxMjQwNDAyMTczMTY1RS0xNSwyLjUyMjQ3NDkxMjg3MjE5MTZFLTE2LDIuMDAxNDI0NTQxMTE3MzQwN0UtMTUsMS4wMTg3MzMzNjgxOTk2NDQ4RS0xNSwxLjEzMzczMTgyMjA1OTk4RS0xNSw1LjU4MjE3NDc4NDIxNTI2OEUtMTYsMS44MDQyNzIzNjIzNDEyNzY2RS0xNiwxLjYzODU3ODMxMjExNjI3NkUtMTUsMS4yNzMwNjc2Mjk2Mjc2MzU0RS0xNiwzLjQxMDg1Njg1OTc3NjkzNDdFLTE2LDIuNDc0MDQ3Mzc1MTQ2ODU2RS0xNiwxLjcwMTc2MDM2NDcwMDQ1MUUtMTUsMy42NTA5NTY5MjI2NDg0NzJFLTE2LDQuNzc2NDkyNjAwNjI4MTYzRS0xNiwzLjgzNzU2MDM1NzQzMzAwNUUtMTUsMi4yNzQ1NjE5Nzg0ODI2NzIzRS0xNSw2LjgzNzA3NDM1OTE3MzkxN0UtMTYsNi45MjQwODE5MjI0ODIxNzJFLTE2LDIuNDYzOTczNTg3NjAxMTMwMkUtMTUsMi4xMzE4NzUwNjc1NjM4Mjk1RS0xNiw3LjkxOTQwMzg1MTQ3ODU3NEUtMTYsMS40OTE2NTE3NDI5OTg3OTY2RS0xNiwxLjE0NzI1Mzg3NTQwNTM0MTFFLTE1LDQuMjY0NTgzMjkxODExMDUxRS0xNSw0LjcxNzkyOTY5NTM2OTA4NUUtMTYsMS40MzIzNjQ3OTI1NTg5NTEyRS0xNSwxLjIwODg0MzgwMzM3MDQ4NTRFLTE2LDEuMjAzMjIwMjE1ODU3MjU4NUUtMTUsMS4wNjI4MDMyOTQ5MDA4OTVFLTE1LDMuNTMzNjI1NDA4NTIwOTg4RS0xNiw5Ljc3NzcxMzU5OTA1MDgzOEUtMTcKKzI1LEZyaSAxOCBGZWIgMTEsMS4zMTQyNzY2OTczODI4NTY4RS0xNiw4LjcyODA4NDczMzMxODA1RS0xNiw1LjI1OTA1NDk0NjgyMjU3OEUtMTYsMS4wODA2MTc2NjU4NDQ2NjY1RS0xNSwzLjI0ODU3MzU5OTMyOTQxOTZFLTE0LDkuMjQyODk3MzEyMjUwODA0RS0xNiw2LjczMzcxNDIzNzk3NTQ5NkUtMTYsMS40MzgwMjY5NzM1NTkwMjI1RS0xNiwxLjUyMTY0NDc3MjI4OTI0RS0xNiwzLjMzNTQ4NTA5NjkzMzA3MjdFLTE1LDEuNzQzNzI4OTgxMTU4OTM4RS0xNSwyLjcxOTcwMzY4NzY5ODMxM0UtMTYsNS43Mzc5Nzc1NjYxMTI5RS0xNiwyLjU4MjQzNTQ5MTY2OTY0NkUtMTYsMi41ODEzNTg5NDA4Mzk1NTVFLTE1LDEuMTk3ODIxNzIyMDIyNjc0OEUtMTUsNS4yNDYxNTUzMDY5ODYwNzFFLTE2LDcuOTMwOTkzMDU5MTc0MTc4RS0xNiw4LjgzNDgwMzQ5NjQzOTU5RS0xNiwxLjI4Mjk0NTA2OTI0NjM5NjhFLTE1LDEuMDY1MzQwODUyNDA2MjMyNkUtMTUsMi41MTY1ODU1NjgyNDc0NjA1RS0xNiwxLjk5ODA0ODI4MTA4MTg2NzZFLTE1LDEuMDE3ODYwMzYzMTM4NzI4NUUtMTUsMS4xMzIwNDcxMjIwNzIxMjE3RS0xNSw1LjU2NzE3MjcyMzIwOTI0N0UtMTYsMS44MDA3OTM3MTQ4MTY5NDMxRS0xNiwxLjYzNjM3OTkxODQyNTk3MUUtMTUsMS4yNzAxOTMxMjE0NDk0ODY2RS0xNiwzLjQwMzg2NDMwMzI5NDkxMkUtMTYsMi40NjkzNzE0NDkzMzk1MDdFLTE2LDEuNjk5MTI5MTg2NjU5Mzk2M0UtMTUsMy42NDQzODAyMTc2OTc5NDAzRS0xNiw0Ljc4MTE1OTIxMzAyOTM2NEUtMTYsMy44MzE2MTYxMzYzMDI0ODU1RS0xNSwyLjI3MDMyMTc2ODg4MTMwMDRFLTE1LDYuODIxNTA0ODM2MzE0MTE2RS0xNiw2LjkxMzUyMDMyMzc1OTgzOUUtMTYsMi40NTk1MDMwNjgyNzU1NTM3RS0xNSwyLjEyODk0ODY5MzMzNTg5MjJFLTE2LDcuOTAwMTU4ODU1NTA2NjM2RS0xNiwxLjQ4ODA5NDg0NjU3MTgwMkUtMTYsMS4xNDUzNjk3NTk2NzI2NDAyRS0xNSw0LjI1OTQ1NTQ5MzUxMTU2M0UtMTUsNC43MTYxNTc2OTg4MTg0MzNFLTE2LDEuNDMwMTc0OTU5OTkyMzE1NUUtMTUsMS4yMDYxODk3MDk1Mzc4NjMyRS0xNiwxLjIwMTcwNzUxMDY1NDY2NzhFLTE1LDEuMDYwMzg1MTQzNTEyMjYyNUUtMTUsMy41MjMzNzM5MzY3MDQ3MTQzRS0xNiw5Ljc1NTIwOTA0NTY0NjI3RS0xNworMjYsU2F0IDE5IEZlYiAxMSwxLjMxNDc4Mzg5ODYzOTU0ODRFLTE2LDguNzE0MjMzNTQ0NDg4NjQyRS0xNiw1LjI1MTE4Njk5MTk2MjE3MUUtMTYsMS4wODExNDUzNzkxNzkzODE0RS0xNSwzLjIzNjE4NTUxMTQ3NjczMzVFLTE0LDkuMjUxMDMyNTg5OTE1MTk2RS0xNiw2LjcyNDk0MTMxMDQ2MzJFLTE2LDEuNDQwNDE4ODA1NTIyOTE2RS0xNiwxLjUxODM2OTM2NzU4MjY3MThFLTE2LDMuMzM2NDMxNjQ0OTM0NTM1N0UtMTUsMS43NDQ5NzkzMjg0NTI1NTA3RS0xNSwyLjcyMzc1ODcxMDk2MDQ2MkUtMTYsNS43Mjg2NTU3ODg3NzI1NjZFLTE2LDIuNTc5OTE4MzQ4MzA2Njc0RS0xNiwyLjU4MTg0MzUzNzUwNTI1NDVFLTE1LDEuMTk2MDk0NTM3NTY5NzY5N0UtMTUsNS4yMzY1NTk3MTE1NjAwNjhFLTE2LDcuOTE4MzQzOTM4MTY5Nzc3RS0xNiw4LjgyMzIzNTgwMDY0NjczNEUtMTYsMS4yODIyMDQzNjc1MTg1MDkzRS0xNSwxLjA2NDU3NDA2MjM1NDEzNDRFLTE1LDIuNTEzMTQ4MjgxMDMxNDYwNEUtMTYsMS45OTY1NzkxMTQyNTM0MTY1RS0xNSwxLjAxNzkzNzU4MDI2ODE1NkUtMTUsMS4xMzE0MzcwNTgzODA3MDI5RS0xNSw1LjU1NzY4OTQwNjM2MDc3M0UtMTYsMS43OTkwNDU4MDg0NjcyNjdFLTE2LDEuNjM1NzI4OTc0OTA0NzYwNUUtMTUsMS4yNjg1NTI2NTU0NTg5NDhFLTE2LDMuNDAwMTU1NTEzOTEyNjg0RS0xNiwyLjQ2NzA2NjE1NzExNjM3OTdFLTE2LDEuNjk4MTEzNTc0MDczODg0MkUtMTUsMy42NDEyOTMxOTQwMzMzNThFLTE2LDQuNzg5OTI3NjE4NzEwNzY4RS0xNiwzLjgyOTMxNTM2NjgxMTE4NUUtMTUsMi4yNjgyNTk0NTM5NjI4MTc1RS0xNSw2LjgxMjU2NzM3NDg3MjYwM0UtMTYsNi45MDk1Mjg1NTc2NDQxNzNFLTE2LDIuNDU3Mzg4NTI1MDczMDY0RS0xNSwyLjEyODAzNzIyMTk0ODQ4MTRFLTE2LDcuODg4NjQxNjA0Mjg0MjQxRS0xNiwxLjQ4NTk5MDc4MDc4OTkxRS0xNiwxLjE0NDU3NzUzMTEwODMwOTVFLTE1LDQuMjU4MzQwODk5MzUzOTYzNUUtMTUsNC43MTg3Mjg1MTU2MTk3NTZFLTE2LDEuNDI5MzQ0MzMyMDQ1MzQ4NEUtMTUsMS4yMDQ3MDQ4NzU0NTkwNDlFLTE2LDEuMjAxMzI4Njc2MjM3MTQzN0UtMTUsMS4wNTg5OTc4NTM4MTAyNTcyRS0xNSwzLjUxNjY3NzE3MjE0Mzk4NDVFLTE2LDkuNzQyMTk3NDYxNzk1NjdFLTE3CisyNyxTdW4gMjAgRmViIDExLDEuMzE2MTAwNDA5MjI3MjU0NUUtMTYsOC43MDYxMjAxMTk5NDYxNDlFLTE2LDUuMjQ2NzYwNzMxNTQ5NDUyRS0xNiwxLjA4MjMzNjA5NDg3OTczOUUtMTUsMy4yMjU1Njk2NTMzMDM3OTNFLTE0LDkuMjY0NzUwOTY4Mjc3ODY1RS0xNiw2LjcyMDUzOTc3MzA1ODk2NUUtMTYsMS40NDM1OTM3NTA0Njc3ODNFLTE2LDEuNTE2MTgxNjY0NDg4MzY5N0UtMTYsMy4zMzk0MzkzMzUyMTE2OTVFLTE1LDEuNzQ3MjkwMjExMzU1NTgwMkUtMTUsMi43Mjk0MDE3NzE5NjM1ODlFLTE2LDUuNzIzMTEzOTAyNDkwMDRFLTE2LDIuNTc5MDU5MDU4MzI4NTc1M0UtMTYsMi41ODM5MjgzNTg2MzU2ODVFLTE1LDEuMTk1MTQ5MzQxNTcwMDUyNUUtMTUsNS4yMzA0NzEwMjIyNTE1MTZFLTE2LDcuOTEwOTEwNzkzNjU4NDE0RS0xNiw4LjgxNzQwNDg5MzU4MjIxOEUtMTYsMS4yODIyNzc1Njk3MzE1NjQ5RS0xNSwxLjA2NDQ4NTk0NTg5MjE4MTJFLTE1LDIuNTExMzQ4NzIyMzc3MTYwNEUtMTYsMS45OTYzODMzODM1NTMzNTNFLTE1LDEuMDE4NjQ4MDU3NjU2NzkwN0UtMTUsMS4xMzE1NDQzNjY1Mjg2MjdFLTE1LDUuNTUxODkxMjMyMTU2MjlFLTE2LDEuNzk4NDUzODE1MDM2MDk2NkUtMTYsMS42MzYxMTA3NDg2MjY2MTI0RS0xNSwxLjI2NzczNjQyMTE4NjAzNkUtMTYsMy4zOTg2Mzk5NjkxMTY4MTFFLTE2LDIuNDY2MzQ0MTA4MDg5MzU4RS0xNiwxLjY5ODE3NjUzMzE0Mjg1NkUtMTUsMy42NDA1MzY2MjMzNTkyMjFFLTE2LDQuODAxMzYzNjI4OTM0NTM0RS0xNiwzLjgyOTQ0NzAyMTM3NjY2NUUtMTUsMi4yNjc2NTE2MzUyMTk5MjU1RS0xNSw2LjgwODA1OTUzMTg1MjA3OEUtMTYsNi45MDk5MjI3NTMzNDIzNzlFLTE2LDIuNDU2ODQ3MzQ5MzcxMjQxN0UtMTUsMi4xMjg0NzA1MTU4MDU5MjQ2RS0xNiw3Ljg4MjI4NTUxMTg3NTEwNUUtMTYsMS40ODQ4NTcwNDI2ODc4OTA2RS0xNiwxLjE0NDUxNDM1Njc4ODAyNTJFLTE1LDQuMjU5OTAzNzI0NDI0MzI4RS0xNSw0LjcyNDE4Njg0OTU1OTY5MUUtMTYsMS40Mjk0MjExMDE5NDY4MzZFLTE1LDEuMjA0MDAxMDA5MDU3NTAyNUUtMTYsMS4yMDE3MDY0MDc3NDMxNDAyRS0xNSwxLjA1ODI5OTA4Njk0MTUwMjNFLTE1LDMuNTEyMzUzNTE4ODY0MzY4N0UtMTYsOS43MzU1MjYyODk2Mzc3NDRFLTE3CisyOCxNb24gMjEgRmViIDExLDEuMzE3OTU0NzQ2NDIyODYzOEUtMTYsOC43MDE4NDM3ODc1NjEyODVFLTE2LDUuMjQ0NjM2MTc0ODA0OTdFLTE2LDEuMDgzOTY3MDA3ODI5MzEyNEUtMTUsMy4yMTYxNDUwMzc2MzI2MzA2RS0xNCw5LjI4MjE1OTkyNjMwMTU1NkUtMTYsNi43MTkwNjE3MTE4NTg4MDZFLTE2LDEuNDQ3MjY0NzYxNDQzNjI5M0UtMTYsMS41MTQ3MjA4ODQ2ODcwMTdFLTE2LDMuMzQzODE3ODg5MzgxNDk3NUUtMTUsMS43NTAzMDM1NjI3NDM4Njg3RS0xNSwyLjczNjA4MjI3OTY3MjE4OUUtMTYsNS43MjAwOTk3MzQ2NDk0OTZFLTE2LDIuNTc5MzA4MjA4NjAxOTU0NkUtMTYsMi41ODcwNzgyNDA4MzM2NjQ4RS0xNSwxLjE5NDcyNzEyMzE5MDE3MDZFLTE1LDUuMjI2NzI3MDU4NzQwNjgzRS0xNiw3LjkwNjk2NTc4MzEwNjQyNkUtMTYsOC44MTU0MTA2MTMzMTY3NTlFLTE2LDEuMjgyODk0NDg4MjMzMTM3MkUtMTUsMS4wNjQ4NTEzNzcxOTg5OTY2RS0xNSwyLjUxMDY0NDQ0NjY4NjE5OEUtMTYsMS45OTcwMzg3MDIzNzE5MTIzRS0xNSwxLjAxOTc4MDMyODM2NjUyMkUtMTUsMS4xMzIxMzA4NDg1NTEyNzRFLTE1LDUuNTQ4NTU3MjY2MDc0ODUxRS0xNiwxLjc5ODYzNDY2MDI4NTIyNkUtMTYsMS42MzcxODIwMDA3NTA2MDA3RS0xNSwxLjI2NzQ3MTQxMDcxMTc5OTlFLTE2LDMuMzk4NTkxMDIyNDgwODU0RS0xNiwyLjQ2NjY4MDU1MjIzMjE4N0UtMTYsMS42OTg5NjAwNTgyMzQ1OUUtMTUsMy42NDEzMzc4NzQ2Mjg2MjE3RS0xNiw0LjgxNDUwOTI3MjYyNTA1OEUtMTYsMy44MzEyMDM3Mjg2NTU2MTc1RS0xNSwyLjI2ODAxNjE5NjMwNTg1NEUtMTUsNi44MDY1MTQxMTIwNjIwOTRFLTE2LDYuOTEzMjQ2OTI1MjI0NzlFLTE2LDIuNDU3MzU3OTM2MDY5MTEzN0UtMTUsMi4xMjk4MDE3MjIzNzAwNTU0RS0xNiw3Ljg3OTM4MTA4NDk3NjYwOEUtMTYsMS40ODQzNzIyNDE3NzA5OTQ2RS0xNiwxLjE0NDkzODM2NjExNDU2MDZFLTE1LDQuMjYzMjUzMDk3ODE4Njk3RS0xNSw0LjczMTU2MTI5NTkxOTYxRS0xNiwxLjQzMDEwNDA1MTQ0NDMxNjNFLTE1LDEuMjAzODE5NDIwMjk2MTA5RS0xNiwxLjIwMjU4OTA4NDkzNjM1NDZFLTE1LDEuMDU4MDYwNzg3NTI1MjQ1RS0xNSwzLjUwOTYxNjM5NTYwMDU4RS0xNiw5LjczMzA5NTQ1MzY2MTgzM0UtMTcKKzI5LFR1ZSAyMiBGZWIgMTEsMS4zMjAxNjUzMzc1NTA5ODIyRS0xNiw4LjcwMDEzNTkxMTM2NjAyRS0xNiw1LjI0NDA1MjM0MjA3RS0xNiwxLjA4NTg4OTA4NzY3MzM0MzNFLTE1LDMuMjA3NTI0MjM2ODY3OTIxRS0xNCw5LjMwMTk5MzE2ODE2Njk5N0UtMTYsNi43MTk1NDA0MDI0NTI2MDdFLTE2LDEuNDUxMjQwMDQyMzQ3NjU3N0UtMTYsMS41MTM3NDYzOTkyNDcxNzA0RS0xNiwzLjM0OTEwNTY4MTI3MTM3NzJFLTE1LDEuNzUzNzc5ODI5NjE3NDA5M0UtMTUsMi43NDM0MzE3MTcyNzI0ODhFLTE2LDUuNzE4Nzc3NTM0OTQwNjI3RS0xNiwyLjU4MDI5ODg0ODI0Njc4MDNFLTE2LDIuNTkwOTM1MzI0OTE5MzM1M0UtMTUsMS4xOTQ2NTQ5NzQ2ODY3MzI4RS0xNSw1LjIyNDU1MjMwOTk4OTA4NEUtMTYsNy45MDUzNTU2MzgzNjIwMThFLTE2LDguODE1OTg0MjkyOTY4NjVFLTE2LDEuMjgzODc0NTkxMDU1MTE0MUUtMTUsMS4wNjU1MTk5NTU2NDgyODk5RS0xNSwyLjUxMDY3MzMwNDgzNDYwODRFLTE2LDEuOTk4MjYyODg5OTE1NTYzNkUtMTUsMS4wMjExOTMwMDE4MzQxNzI0RS0xNSwxLjEzMzAzNzM0MDc2NjQwMTFFLTE1LDUuNTQ2ODcyNjc2ODI0Mjk3RS0xNiwxLjc5OTMzMjQ4OTM0MDE0NTNFLTE2LDEuNjM4NzEzMzQ1OTA4NDA4RS0xNSwxLjI2NzU3NTM0MzQ4MDU3NUUtMTYsMy4zOTk1MjM0MDc5MDk3MzZFLTE2LDIuNDY3NzI0OTk2MDAxMTU0RS0xNiwxLjcwMDIyNDk0NDg3OTEwOEUtMTUsMy42NDMxODA4NDE4NjM0NDMzRS0xNiw0LjgyODcyMzczMjMyMzY5M0UtMTYsMy44MzQwNDYwMzgyNDAzMjZFLTE1LDIuMjY5MDMxMTExMzA5NTExNEUtMTUsNi44MDY5NTE1MjUxNTk0NDNFLTE2LDYuOTE4NTI4MjIzNzI2MTg4RS0xNiwyLjQ1ODU3MTg2NTM3MDk5MjdFLTE1LDIuMTMxNzMyMjIwOTMwN0UtMTYsNy44Nzg3ODcxMzcwNjEzMzVFLTE2LDEuNDg0MzIxODIxMjEwNDg1NkUtMTYsMS4xNDU2ODc5NjY5OTY0NjIzRS0xNSw0LjI2Nzc5MzU3MDI0MTIwNDVFLTE1LDQuNzQwMjAyMDY1OTc4OTQ4RS0xNiwxLjQzMTE5MTkxNTQ5NDA0NUUtMTUsMS4yMDM5ODczNzczNzI2NzQ3RS0xNiwxLjIwMzgwODUzNjU3NDY2NjJFLTE1LDEuMDU4MTMwNjkxMzY3MTUzRS0xNSwzLjUwNzk0MDk2OTAyMzQyMkUtMTYsOS43MzM1MDI4NDgxNTQwNjhFLTE3CiszMCxXZWQgMjMgRmViIDExLDEuMzIyNjEwNTcxMzU0MDY1MkUtMTYsOC43MDAxNDg0MjY2NzU5NTFFLTE2LDUuMjQ0NTAwNDgyOTMyNzA5RS0xNiwxLjA4ODAwMjUxMDgzMjE4OTRFLTE1LDMuMTk5NDQ4NTcyMDIyMjk5M0UtMTQsOS4zMjM0MDIyODQ3NDY5OTZFLTE2LDYuNzIxMzI5NDE4MzY5NTU0RS0xNiwxLjQ1NTM5MTQ1MTgxMDk0ODNFLTE2LDEuNTEzMDk3NDUwOTQ4OTAyMUUtMTYsMy4zNTQ5OTM1NTU0MDc4MjMyRS0xNSwxLjc1NzU1ODUyODQ2MTUyNDJFLTE1LDIuNzUxMjAzMTY5MjIyNzI3NUUtMTYsNS43MTg1ODg2Mzc2MDcxN0UtMTYsMi41ODE3ODU1MjQwNTMzOTRFLTE2LDIuNTk1MjU5OTY5MDA1OTUyM0UtMTUsMS4xOTQ4MTcyOTI4NTQzMjAzRS0xNSw1LjIyMzQyODQ4NTE2MjUxMUUtMTYsNy45MDUzMDk0MjI2MDQ5ODZFLTE2LDguODE4Mjc3NjA5NjI0NjA2RS0xNiwxLjI4NTA5NzA3MjExODY0MDZFLTE1LDEuMDY2MzkxMDUyNDM3NjYzMkUtMTUsMi41MTExOTMxNTE0MjA2NjlFLTE2LDEuOTk5ODY3MTQ5OTU1MjE4NEUtMTUsMS4wMjI3OTE0MDQ3MTk0MzAzRS0xNSwxLjEzNDE1NzMzMTk2OTg4NjJFLTE1LDUuNTQ2MjkyODI1NDkyODg1RS0xNiwxLjgwMDM3NjE2MDMzMDEwOTZFLTE2LDEuNjQwNTUxMjU5NjA0NDI3NkUtMTUsMS4yNjc5MjYzMzEyNjM1Mzk2RS0xNiwzLjQwMTExMjU2OTAwMjI5NDRFLTE2LDIuNDY5MjQyOTg0NzE0NDIyNkUtMTYsMS43MDE4MTExMjg1NDA1MDE2RS0xNSwzLjY0NTcyMDI1NzUwMTAyM0UtMTYsNC44NDM1NzgxNDM0MDY5NTFFLTE2LDMuODM3NjEyOTc1OTMwNTc4RS0xNSwyLjI3MDQ4MDk2MjgzNDU1MUUtMTUsNi44MDg3MTY3NDYzODg1ODdFLTE2LDYuOTI1MTE1NjQ5ODE0MzU0RS0xNiwyLjQ2MDI1NjA1MjM3NDMxODVFLTE1LDIuMTM0MDYyMTU0NjkzMDkyNEUtMTYsNy44Nzk3NDA3MDIyODAyOTRFLTE2LDEuNDg0NTYyMzI3ODcwNDIxN0UtMTYsMS4xNDY2NTUwMzk2ODU0NTM4RS0xNSw0LjI3MzEyNjU2MjY5MTMxMjVFLTE1LDQuNzQ5NjczODk5MzI3OTI1RS0xNiwxLjQzMjU1MDAxNDU4NTEzNEUtMTUsMS4yMDQzODkzNzAwOTM0MTY0RS0xNiwxLjIwNTI1MjE5ODg0ODg4MDhFLTE1LDEuMDU4NDA2OTgzNDQ5MzE2M0UtMTUsMy41MDY5NzY1MDc2MzczNDkzRS0xNiw5LjczNTgxMDk0NjQ5NDE1MUUtMTcKKzMxLFRodSAyNCBGZWIgMTEsMS4zMjUyMDg5MjIxNDUzMzNFLTE2LDguNzAxMzEzODMxMzE5NjM4RS0xNiw1LjI0NTY0MDEyNDk2Mjc0OEUtMTYsMS4wOTAyNDAzNTM1MDMxNzVFLTE1LDMuMTkxNzQ1MTc2MjY5NTY4RS0xNCw5LjM0NTgxODM5ODQ2MTg0M0UtMTYsNi43MjM5OTYwNjcyNjk2MThFLTE2LDEuNDU5NjMzNDgyNTQ1MDM4RS0xNiwxLjUxMjY2NjUyMzU3MzYyMjJFLTE2LDMuMzYxMjc0Mjc0NDM0MTc2RS0xNSwxLjc2MTUzMjA1NjE4OTgwOThFLTE1LDIuNzU5MjMxMTI1ODY4MDI4NEUtMTYsNS43MTkxNTkyMTIxNzAwNTZFLTE2LDIuNTgzNjAzODg1NzM4OTY1RS0xNiwyLjU5OTg5MTU0NDE2OTU0MjdFLTE1LDEuMTk1MTM2NzA4MTIyMDY2OEUtMTUsNS4yMjMwMDg4Mzg3Mjk0MDRFLTE2LDcuOTA2MzExMjQ5NTUxMTc4RS0xNiw4LjgyMTcyMjczMzEwMjQzNUUtMTYsMS4yODY0ODEwMTA3NDIwNDE2RS0xNSwxLjA2NzM5NzI3MTcxNjM3NzRFLTE1LDIuNTEyMDQxOTE0MDAxNjM2N0UtMTYsMi4wMDE3MjUwMzg2NzkxOTMyRS0xNSwxLjAyNDUxMjA4NDE0ODAzMzZFLTE1LDEuMTM1NDE5NDc0MTI2ODQzOUUtMTUsNS41NDY0NTMyOTU0NDk1NTNFLTE2LDEuODAxNjUxMDc5ODEwMDczRS0xNiwxLjY0MjU5Mjg4NzYwMTk2OEUtMTUsMS4yNjg0NDI3ODU5Nzg4MTNFLTE2LDMuNDAzMTQxMjE0NDU2NTUxNUUtMTYsMi40NzEwNzc1MjYwNjM0Nzk2RS0xNiwxLjcwMzYxMTM5Mzc3MjM1NEUtMTUsMy42NDg3MjQ5MDg0NzMwMDFFLTE2LDQuODU4Nzg1NjEzOTk0MDAzRS0xNiwzLjg0MTY2Mjc1MjMyODMxRS0xNSwyLjI3MjIyMTUwMjQ2MTMyMUUtMTUsNi44MTEzNzEzMzEyNTU4MDNFLTE2LDYuOTMyNTczMTM4NjQ5NjQ5RS0xNiwyLjQ2MjI1NDQxMDU5MDc0NTNFLTE1LDIuMTM2NjU3NjMyNzM2ODcyRS0xNiw3Ljg4MTczMTE1OTcxNTExNUUtMTYsMS40ODQ5OTc3NTA0NDkzNzQ1RS0xNiwxLjE0Nzc2NzE2OTMwOTUyNzRFLTE1LDQuMjc4OTg1MDEyNTU2MDQxRS0xNSw0Ljc1OTY4NDk3OTMxNjUwNUUtMTYsMS40MzQwODgxMzUzNjE0NjU3RS0xNSwxLjIwNDk0ODA3NDk4MjA5OTRFLTE2LDEuMjA2ODQ0NjUzNTI2NTk1MkUtMTUsMS4wNTg4MjE1MTMxODk5ODlFLTE1LDMuNTA2NDg4MzgxODg2MzM3RS0xNiw5LjczOTM5MjIyNDY3Nzc5N0UtMTcKKzMyLEZyaSAyNSBGZWIgMTEsMS4zMjc5MDU3MDYwMzk5OTJFLTE2LDguNzAzMjUyMTAzNjk2NTA3RS0xNiw1LjI0NzI0MzI1NDQyNDU1OUUtMTYsMS4wOTI1NTc3MjQ1NDkyNTIxRS0xNSwzLjE4NDI5ODQ1NTQzMTU1NUUtMTQsOS4zNjg4NTk5MTY2OTc2MTRFLTE2LDYuNzI3MjUwNTIwODY5MzlFLTE2LDEuNDYzOTA5MjIyMTg3NTIxOEUtMTYsMS41MTIzODE2NTU1NzgzMzA4RS0xNiwzLjM2NzgwODgzODgwOTA2NkUtMTUsMS43NjU2MjgyMzI1NzcyOTZFLTE1LDIuNzY3NDA0NjYwNDIzNTkwNEUtMTYsNS43MjAyMzg5MzYyMDQ3MTNFLTE2LDIuNTg1NjQzODExNjgxMjUxRS0xNiwyLjYwNDcyMjMxNzgyMTQyNUUtMTUsMS4xOTU1NjE0MDM0OTIxNTY5RS0xNSw1LjIyMzA2MTIyOTIyNjAyN0UtMTYsNy45MDgwMTU2NjQyNTI5RS0xNiw4LjgyNTkzOTMxODgxMTkwOEUtMTYsMS4yODc5NzIxNjYxMjI1Njg3RS0xNSwxLjA2ODQ5MzQ0NDMxNTYyODhFLTE1LDIuNTEzMTExMDM5MTAzNjhFLTE2LDIuMDAzNzUxODEzODExMzY5NkUtMTUsMS4wMjYzMTI0ODU2NDI0OTA0RS0xNSwxLjEzNjc3NTk0MTI2NDQ4MjdFLTE1LDUuNTQ3MTEwMDg2MjMwMjY2RS0xNiwxLjgwMzA4MDQ2NTAzMDkxRS0xNiwxLjY0NDc2OTI3NjA3Njg0ODRFLTE1LDEuMjY5MDcwMDU3MjUxOTQyNkUtMTYsMy40MDU0NjM3NjYzNzM1NzM3RS0xNiwyLjQ3MzEyMzQyNDM0Nzk0MkUtMTYsMS43MDU1NTM4NzU4NDQwODc2RS0xNSwzLjY1MjAzOTg1MzAzMjIwMzVFLTE2LDQuODc0MTU0NDkxNTQ4NzM1RS0xNiwzLjg0NjAzMzMwMDQzMTE2RS0xNSwyLjI3NDE1NjA3MTQwNTk3NDdFLTE1LDYuODE0NjIxNjAwNjcyODE4RS0xNiw2Ljk0MDYwODM5Nzc2MDIwMUUtMTYsMi40NjQ0NjIzNDM3ODMyNTFFLTE1LDIuMTM5NDI4ODk2NTEyODg0RS0xNiw3Ljg4NDQxNjUzNDczNDkxM0UtMTYsMS40ODU1NjM3ODUxODkyODQ3RS0xNiwxLjE0ODk3NTgyMTYzMTEyNjlFLTE1LDQuMjg1MTg5ODU5NjM3OTQxRS0xNSw0Ljc3MDAzOTU1ODQ0NDE4OUUtMTYsMS40MzU3NDU4MDgzNjkzODk3RS0xNSwxLjIwNTYxMTY5NTEzODQ5MDVFLTE2LDEuMjA4NTM1MzM2NDE2MjkzNEUtMTUsMS4wNTkzMjg2MzE4NTAxMDM1RS0xNSwzLjUwNjMxOTUyMDUxMzgxMkUtMTYsOS43NDM4MjYzNjQwOTY3ODNFLTE3CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNJUlN0YXRlc09ubHlfUktfUmVmZXJlbmNlL1Rlc3RTSVIvcnVucGFyYW1ldGVycy5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNJUlN0YXRlc09ubHlfUktfUmVmZXJlbmNlL1Rlc3RTSVIvcnVucGFyYW1ldGVycy5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWVhMmY1ZAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0lSU3RhdGVzT25seV9SS19SZWZlcmVuY2UvVGVzdFNJUi9ydW5wYXJhbWV0ZXJzLmNzdgpAQCAtMCwwICsxLDIgQEAKK2Rpc2Vhc2VOYW1lLHBvcHVsYXRpb25JZGVudGlmaWVyLHRpbWVQZXJpb2QsZnJlcXVlbmN5RGVwZW5kZW50LHJlZmVyZW5jZVBvcHVsYXRpb25EZW5zaXR5LHJvYWROZXR3b3JrSW5mZWN0aW91c1Byb3BvcnRpb24sY2hhcmFjdGVyaXN0aWNNaXhpbmdEaXN0YW5jZSx0cmFuc21pc3Npb25SYXRlLG5vbkxpbmVhcml0eUNvZWZmaWNpZW50LHJlY292ZXJ5UmF0ZSxpbmZlY3Rpb3VzTW9ydGFsaXR5UmF0ZSxpbW11bml0eUxvc3NSYXRlCitUZXN0U0lSLGh1bWFuLDg2NDAwMDAwLHRydWUsMTAwLjAsMC4wMSwyLjI1LDIwLjAsMS4wLDAuNCwwLjAsMC4wClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTSVJTdGF0ZXNPbmx5X1JLX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL2h1bWFuL0JpcnRoc18wLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0lSU3RhdGVzT25seV9SS19SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9odW1hbi9CaXJ0aHNfMC5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTEyZThiOAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0lSU3RhdGVzT25seV9SS19SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9odW1hbi9CaXJ0aHNfMC5jc3YKQEAgLTAsMCArMSwzMyBAQAoraXRlcmF0aW9uLHRpbWUsc3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vbm9kZS90cmFuc3BvcnQvcGlwZS9VU0EKKzEsVHVlIDI1IEphbiAxMSwwLjAKKzIsV2VkIDI2IEphbiAxMSwwLjAKKzMsVGh1IDI3IEphbiAxMSwwLjAKKzQsRnJpIDI4IEphbiAxMSwwLjAKKzUsU2F0IDI5IEphbiAxMSwwLjAKKzYsU3VuIDMwIEphbiAxMSwwLjAKKzcsTW9uIDMxIEphbiAxMSwwLjAKKzgsVHVlIDEgRmViIDExLDAuMAorOSxXZWQgMiBGZWIgMTEsMC4wCisxMCxUaHUgMyBGZWIgMTEsMC4wCisxMSxGcmkgNCBGZWIgMTEsMC4wCisxMixTYXQgNSBGZWIgMTEsMC4wCisxMyxTdW4gNiBGZWIgMTEsMC4wCisxNCxNb24gNyBGZWIgMTEsMC4wCisxNSxUdWUgOCBGZWIgMTEsMC4wCisxNixXZWQgOSBGZWIgMTEsMC4wCisxNyxUaHUgMTAgRmViIDExLDAuMAorMTgsRnJpIDExIEZlYiAxMSwwLjAKKzE5LFNhdCAxMiBGZWIgMTEsMC4wCisyMCxTdW4gMTMgRmViIDExLDAuMAorMjEsTW9uIDE0IEZlYiAxMSwwLjAKKzIyLFR1ZSAxNSBGZWIgMTEsMC4wCisyMyxXZWQgMTYgRmViIDExLDAuMAorMjQsVGh1IDE3IEZlYiAxMSwwLjAKKzI1LEZyaSAxOCBGZWIgMTEsMC4wCisyNixTYXQgMTkgRmViIDExLDAuMAorMjcsU3VuIDIwIEZlYiAxMSwwLjAKKzI4LE1vbiAyMSBGZWIgMTEsMC4wCisyOSxUdWUgMjIgRmViIDExLDAuMAorMzAsV2VkIDIzIEZlYiAxMSwwLjAKKzMxLFRodSAyNCBGZWIgMTEsMC4wCiszMixGcmkgMjUgRmViIDExLDAuMApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTSVJTdGF0ZXNPbmx5X1JLX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL2h1bWFuL0JpcnRoc18xLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0lSU3RhdGVzT25seV9SS19SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9odW1hbi9CaXJ0aHNfMS5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDdhODQzZgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0lSU3RhdGVzT25seV9SS19SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9odW1hbi9CaXJ0aHNfMS5jc3YKQEAgLTAsMCArMSwzMyBAQAoraXRlcmF0aW9uLHRpbWUsVVMtQUssVVMtQUwsVVMtQVIsVVMtQVosVVMtQ0EsVVMtQ08sVVMtQ1QsVVMtREMsVVMtREUsVVMtRkwsVVMtR0EsVVMtSEksVVMtSUEsVVMtSUQsVVMtSUwsVVMtSU4sVVMtS1MsVVMtS1ksVVMtTEEsVVMtTUEsVVMtTUQsVVMtTUUsVVMtTUksVVMtTU4sVVMtTU8sVVMtTVMsVVMtTVQsVVMtTkMsVVMtTkQsVVMtTkUsVVMtTkgsVVMtTkosVVMtTk0sVVMtTlYsVVMtTlksVVMtT0gsVVMtT0ssVVMtT1IsVVMtUEEsVVMtUkksVVMtU0MsVVMtU0QsVVMtVE4sVVMtVFgsVVMtVVQsVVMtVkEsVVMtVlQsVVMtV0EsVVMtV0ksVVMtV1YsVVMtV1kKKzEsVHVlIDI1IEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMixXZWQgMjYgSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCiszLFRodSAyNyBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzQsRnJpIDI4IEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorNSxTYXQgMjkgSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCis2LFN1biAzMCBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzcsTW9uIDMxIEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorOCxUdWUgMSBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzksV2VkIDIgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxMCxUaHUgMyBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzExLEZyaSA0IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTIsU2F0IDUgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxMyxTdW4gNiBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzE0LE1vbiA3IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTUsVHVlIDggRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxNixXZWQgOSBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzE3LFRodSAxMCBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzE4LEZyaSAxMSBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzE5LFNhdCAxMiBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzIwLFN1biAxMyBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzIxLE1vbiAxNCBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzIyLFR1ZSAxNSBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzIzLFdlZCAxNiBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzI0LFRodSAxNyBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzI1LEZyaSAxOCBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzI2LFNhdCAxOSBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzI3LFN1biAyMCBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzI4LE1vbiAyMSBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzI5LFR1ZSAyMiBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzMwLFdlZCAyMyBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzMxLFRodSAyNCBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzMyLEZyaSAyNSBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0lSU3RhdGVzT25seV9SS19SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9odW1hbi9Db3VudF8wLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0lSU3RhdGVzT25seV9SS19SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9odW1hbi9Db3VudF8wLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMjUwMDJiCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTSVJTdGF0ZXNPbmx5X1JLX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL2h1bWFuL0NvdW50XzAuY3N2CkBAIC0wLDAgKzEsMzMgQEAKK2l0ZXJhdGlvbix0aW1lLHN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL25vZGUvdHJhbnNwb3J0L3BpcGUvVVNBCisxLFR1ZSAyNSBKYW4gMTEsOTQzMjExLjAKKzIsV2VkIDI2IEphbiAxMSw5NDMyMTEuMAorMyxUaHUgMjcgSmFuIDExLDk0MzIxMS4wCis0LEZyaSAyOCBKYW4gMTEsOTQzMjExLjAKKzUsU2F0IDI5IEphbiAxMSw5NDMyMTEuMAorNixTdW4gMzAgSmFuIDExLDk0MzIxMS4wCis3LE1vbiAzMSBKYW4gMTEsOTQzMjExLjAKKzgsVHVlIDEgRmViIDExLDk0MzIxMS4wCis5LFdlZCAyIEZlYiAxMSw5NDMyMTEuMAorMTAsVGh1IDMgRmViIDExLDk0MzIxMS4wCisxMSxGcmkgNCBGZWIgMTEsOTQzMjExLjAKKzEyLFNhdCA1IEZlYiAxMSw5NDMyMTEuMAorMTMsU3VuIDYgRmViIDExLDk0MzIxMS4wCisxNCxNb24gNyBGZWIgMTEsOTQzMjExLjAKKzE1LFR1ZSA4IEZlYiAxMSw5NDMyMTEuMAorMTYsV2VkIDkgRmViIDExLDk0MzIxMS4wCisxNyxUaHUgMTAgRmViIDExLDk0MzIxMS4wCisxOCxGcmkgMTEgRmViIDExLDk0MzIxMS4wCisxOSxTYXQgMTIgRmViIDExLDk0MzIxMS4wCisyMCxTdW4gMTMgRmViIDExLDk0MzIxMS4wCisyMSxNb24gMTQgRmViIDExLDk0MzIxMS4wCisyMixUdWUgMTUgRmViIDExLDk0MzIxMS4wCisyMyxXZWQgMTYgRmViIDExLDk0MzIxMS4wCisyNCxUaHUgMTcgRmViIDExLDk0MzIxMS4wCisyNSxGcmkgMTggRmViIDExLDk0MzIxMS4wCisyNixTYXQgMTkgRmViIDExLDk0MzIxMS4wCisyNyxTdW4gMjAgRmViIDExLDk0MzIxMS4wCisyOCxNb24gMjEgRmViIDExLDk0MzIxMS4wCisyOSxUdWUgMjIgRmViIDExLDk0MzIxMS4wCiszMCxXZWQgMjMgRmViIDExLDk0MzIxMS4wCiszMSxUaHUgMjQgRmViIDExLDk0MzIxMS4wCiszMixGcmkgMjUgRmViIDExLDk0MzIxMS4wCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNJUlN0YXRlc09ubHlfUktfUmVmZXJlbmNlL2F1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwvaHVtYW4vQ291bnRfMS5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNJUlN0YXRlc09ubHlfUktfUmVmZXJlbmNlL2F1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwvaHVtYW4vQ291bnRfMS5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDU5MGU2YQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0lSU3RhdGVzT25seV9SS19SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9odW1hbi9Db3VudF8xLmNzdgpAQCAtMCwwICsxLDMzIEBACitpdGVyYXRpb24sdGltZSxVUy1BSyxVUy1BTCxVUy1BUixVUy1BWixVUy1DQSxVUy1DTyxVUy1DVCxVUy1EQyxVUy1ERSxVUy1GTCxVUy1HQSxVUy1ISSxVUy1JQSxVUy1JRCxVUy1JTCxVUy1JTixVUy1LUyxVUy1LWSxVUy1MQSxVUy1NQSxVUy1NRCxVUy1NRSxVUy1NSSxVUy1NTixVUy1NTyxVUy1NUyxVUy1NVCxVUy1OQyxVUy1ORCxVUy1ORSxVUy1OSCxVUy1OSixVUy1OTSxVUy1OVixVUy1OWSxVUy1PSCxVUy1PSyxVUy1PUixVUy1QQSxVUy1SSSxVUy1TQyxVUy1TRCxVUy1UTixVUy1UWCxVUy1VVCxVUy1WQSxVUy1WVCxVUy1XQSxVUy1XSSxVUy1XVixVUy1XWQorMSxUdWUgMjUgSmFuIDExLDYyNjkzMi4wLDQ0NDcxMDAuMCwyNjczNDAwLjAsNTEzMDYzMi4wLDMuMzg3MTY0OEU3LDQzMDEyNjEuMCwzNDA1NTY1LjAsNTcyMDU5LjAsNzgzNjAwLjAsMS41OTgyMzc4RTcsODE4NjQ1My4wLDEyMTE1MzcuMCwyOTI2MzI0LjAsMTI5Mzk1My4wLDEuMjQxOTI5M0U3LDYwODA0ODUuMCwyNjg4NDE4LjAsNDA0MTc2OS4wLDQ0Njg5NzYuMCw2MzQ5MDk3LjAsNTI5NjQ4Ni4wLDEyNzQ5MjMuMCw5OTM4NDQ0LjAsNDkxOTQ3OS4wLDU1OTUyMTEuMCwyODQ0NjU4LjAsOTAyMTk1LjAsODA0OTMxMy4wLDY0MjIwMC4wLDE3MTEyNjMuMCwxMjM1Nzg2LjAsODQxNDM1MC4wLDE4MTkwNDYuMCwxOTk4MjU3LjAsMS44OTc2NDU3RTcsMS4xMzUzMTRFNywzNDUwNjU0LjAsMzQyMTM5OS4wLDEuMjI4MTA1NEU3LDEwNDgzMTkuMCw0MDEyMDEyLjAsNzU0ODQ0LjAsNTY4OTI4My4wLDIuMDg1MTgyRTcsMjIzMzE2OS4wLDcwNzg1MTYuMCw2MDg4MjcuMCw1ODk0MTIxLjAsNTM2MzY3NS4wLDE4MDgzNDQuMCw0OTM3ODIuMAorMixXZWQgMjYgSmFuIDExLDYyNjkzMi4wLDQ0NDcxMDAuMCwyNjczNDAwLjAsNTEzMDYzMi4wLDMuMzg3MTY0OEU3LDQzMDEyNjEuMCwzNDA1NTY1LjAsNTcyMDU5LjAsNzgzNjAwLjAsMS41OTgyMzc4RTcsODE4NjQ1My4wLDEyMTE1MzcuMCwyOTI2MzI0LjAsMTI5Mzk1My4wLDEuMjQxOTI5M0U3LDYwODA0ODUuMCwyNjg4NDE4LjAsNDA0MTc2OS4wLDQ0Njg5NzYuMCw2MzQ5MDk3LjAsNTI5NjQ4Ni4wLDEyNzQ5MjMuMCw5OTM4NDQ0LjAsNDkxOTQ3OS4wLDU1OTUyMTEuMCwyODQ0NjU4LjAsOTAyMTk1LjAsODA0OTMxMy4wLDY0MjIwMC4wLDE3MTEyNjMuMCwxMjM1Nzg2LjAsODQxNDM1MC4wLDE4MTkwNDYuMCwxOTk4MjU3LjAsMS44OTc2NDU3RTcsMS4xMzUzMTRFNywzNDUwNjU0LjAsMzQyMTM5OS4wLDEuMjI4MTA1NEU3LDEwNDgzMTkuMCw0MDEyMDEyLjAsNzU0ODQ0LjAsNTY4OTI4My4wLDIuMDg1MTgyRTcsMjIzMzE2OS4wLDcwNzg1MTYuMCw2MDg4MjcuMCw1ODk0MTIxLjAsNTM2MzY3NS4wLDE4MDgzNDQuMCw0OTM3ODIuMAorMyxUaHUgMjcgSmFuIDExLDYyNjkzMi4wLDQ0NDcxMDAuMCwyNjczNDAwLjAsNTEzMDYzMi4wLDMuMzg3MTY0OEU3LDQzMDEyNjEuMCwzNDA1NTY1LjAsNTcyMDU5LjAsNzgzNjAwLjAsMS41OTgyMzc4RTcsODE4NjQ1My4wLDEyMTE1MzcuMCwyOTI2MzI0LjAsMTI5Mzk1My4wLDEuMjQxOTI5M0U3LDYwODA0ODUuMCwyNjg4NDE4LjAsNDA0MTc2OS4wLDQ0Njg5NzYuMCw2MzQ5MDk3LjAsNTI5NjQ4Ni4wLDEyNzQ5MjMuMCw5OTM4NDQ0LjAsNDkxOTQ3OS4wLDU1OTUyMTEuMCwyODQ0NjU4LjAsOTAyMTk1LjAsODA0OTMxMy4wLDY0MjIwMC4wLDE3MTEyNjMuMCwxMjM1Nzg2LjAsODQxNDM1MC4wLDE4MTkwNDYuMCwxOTk4MjU3LjAsMS44OTc2NDU3RTcsMS4xMzUzMTRFNywzNDUwNjU0LjAsMzQyMTM5OS4wLDEuMjI4MTA1NEU3LDEwNDgzMTkuMCw0MDEyMDEyLjAsNzU0ODQ0LjAsNTY4OTI4My4wLDIuMDg1MTgyRTcsMjIzMzE2OS4wLDcwNzg1MTYuMCw2MDg4MjcuMCw1ODk0MTIxLjAsNTM2MzY3NS4wLDE4MDgzNDQuMCw0OTM3ODIuMAorNCxGcmkgMjggSmFuIDExLDYyNjkzMi4wLDQ0NDcxMDAuMCwyNjczNDAwLjAsNTEzMDYzMi4wLDMuMzg3MTY0OEU3LDQzMDEyNjEuMCwzNDA1NTY1LjAsNTcyMDU5LjAsNzgzNjAwLjAsMS41OTgyMzc4RTcsODE4NjQ1My4wLDEyMTE1MzcuMCwyOTI2MzI0LjAsMTI5Mzk1My4wLDEuMjQxOTI5M0U3LDYwODA0ODUuMCwyNjg4NDE4LjAsNDA0MTc2OS4wLDQ0Njg5NzYuMCw2MzQ5MDk3LjAsNTI5NjQ4Ni4wLDEyNzQ5MjMuMCw5OTM4NDQ0LjAsNDkxOTQ3OS4wLDU1OTUyMTEuMCwyODQ0NjU4LjAsOTAyMTk1LjAsODA0OTMxMy4wLDY0MjIwMC4wLDE3MTEyNjMuMCwxMjM1Nzg2LjAsODQxNDM1MC4wLDE4MTkwNDYuMCwxOTk4MjU3LjAsMS44OTc2NDU3RTcsMS4xMzUzMTRFNywzNDUwNjU0LjAsMzQyMTM5OS4wLDEuMjI4MTA1NEU3LDEwNDgzMTkuMCw0MDEyMDEyLjAsNzU0ODQ0LjAsNTY4OTI4My4wLDIuMDg1MTgyRTcsMjIzMzE2OS4wLDcwNzg1MTYuMCw2MDg4MjcuMCw1ODk0MTIxLjAsNTM2MzY3NS4wLDE4MDgzNDQuMCw0OTM3ODIuMAorNSxTYXQgMjkgSmFuIDExLDYyNjkzMi4wLDQ0NDcxMDAuMCwyNjczNDAwLjAsNTEzMDYzMi4wLDMuMzg3MTY0OEU3LDQzMDEyNjEuMCwzNDA1NTY1LjAsNTcyMDU5LjAsNzgzNjAwLjAsMS41OTgyMzc4RTcsODE4NjQ1My4wLDEyMTE1MzcuMCwyOTI2MzI0LjAsMTI5Mzk1My4wLDEuMjQxOTI5M0U3LDYwODA0ODUuMCwyNjg4NDE4LjAsNDA0MTc2OS4wLDQ0Njg5NzYuMCw2MzQ5MDk3LjAsNTI5NjQ4Ni4wLDEyNzQ5MjMuMCw5OTM4NDQ0LjAsNDkxOTQ3OS4wLDU1OTUyMTEuMCwyODQ0NjU4LjAsOTAyMTk1LjAsODA0OTMxMy4wLDY0MjIwMC4wLDE3MTEyNjMuMCwxMjM1Nzg2LjAsODQxNDM1MC4wLDE4MTkwNDYuMCwxOTk4MjU3LjAsMS44OTc2NDU3RTcsMS4xMzUzMTRFNywzNDUwNjU0LjAsMzQyMTM5OS4wLDEuMjI4MTA1NEU3LDEwNDgzMTkuMCw0MDEyMDEyLjAsNzU0ODQ0LjAsNTY4OTI4My4wLDIuMDg1MTgyRTcsMjIzMzE2OS4wLDcwNzg1MTYuMCw2MDg4MjcuMCw1ODk0MTIxLjAsNTM2MzY3NS4wLDE4MDgzNDQuMCw0OTM3ODIuMAorNixTdW4gMzAgSmFuIDExLDYyNjkzMi4wLDQ0NDcxMDAuMCwyNjczNDAwLjAsNTEzMDYzMi4wLDMuMzg3MTY0OEU3LDQzMDEyNjEuMCwzNDA1NTY1LjAsNTcyMDU5LjAsNzgzNjAwLjAsMS41OTgyMzc4RTcsODE4NjQ1My4wLDEyMTE1MzcuMCwyOTI2MzI0LjAsMTI5Mzk1My4wLDEuMjQxOTI5M0U3LDYwODA0ODUuMCwyNjg4NDE4LjAsNDA0MTc2OS4wLDQ0Njg5NzYuMCw2MzQ5MDk3LjAsNTI5NjQ4Ni4wLDEyNzQ5MjMuMCw5OTM4NDQ0LjAsNDkxOTQ3OS4wLDU1OTUyMTEuMCwyODQ0NjU4LjAsOTAyMTk1LjAsODA0OTMxMy4wLDY0MjIwMC4wLDE3MTEyNjMuMCwxMjM1Nzg2LjAsODQxNDM1MC4wLDE4MTkwNDYuMCwxOTk4MjU3LjAsMS44OTc2NDU3RTcsMS4xMzUzMTRFNywzNDUwNjU0LjAsMzQyMTM5OS4wLDEuMjI4MTA1NEU3LDEwNDgzMTkuMCw0MDEyMDEyLjAsNzU0ODQ0LjAsNTY4OTI4My4wLDIuMDg1MTgyRTcsMjIzMzE2OS4wLDcwNzg1MTYuMCw2MDg4MjcuMCw1ODk0MTIxLjAsNTM2MzY3NS4wLDE4MDgzNDQuMCw0OTM3ODIuMAorNyxNb24gMzEgSmFuIDExLDYyNjkzMi4wLDQ0NDcxMDAuMCwyNjczNDAwLjAsNTEzMDYzMi4wLDMuMzg3MTY0OEU3LDQzMDEyNjEuMCwzNDA1NTY1LjAsNTcyMDU5LjAsNzgzNjAwLjAsMS41OTgyMzc4RTcsODE4NjQ1My4wLDEyMTE1MzcuMCwyOTI2MzI0LjAsMTI5Mzk1My4wLDEuMjQxOTI5M0U3LDYwODA0ODUuMCwyNjg4NDE4LjAsNDA0MTc2OS4wLDQ0Njg5NzYuMCw2MzQ5MDk3LjAsNTI5NjQ4Ni4wLDEyNzQ5MjMuMCw5OTM4NDQ0LjAsNDkxOTQ3OS4wLDU1OTUyMTEuMCwyODQ0NjU4LjAsOTAyMTk1LjAsODA0OTMxMy4wLDY0MjIwMC4wLDE3MTEyNjMuMCwxMjM1Nzg2LjAsODQxNDM1MC4wLDE4MTkwNDYuMCwxOTk4MjU3LjAsMS44OTc2NDU3RTcsMS4xMzUzMTRFNywzNDUwNjU0LjAsMzQyMTM5OS4wLDEuMjI4MTA1NEU3LDEwNDgzMTkuMCw0MDEyMDEyLjAsNzU0ODQ0LjAsNTY4OTI4My4wLDIuMDg1MTgyRTcsMjIzMzE2OS4wLDcwNzg1MTYuMCw2MDg4MjcuMCw1ODk0MTIxLjAsNTM2MzY3NS4wLDE4MDgzNDQuMCw0OTM3ODIuMAorOCxUdWUgMSBGZWIgMTEsNjI2OTMyLjAsNDQ0NzEwMC4wLDI2NzM0MDAuMCw1MTMwNjMyLjAsMy4zODcxNjQ4RTcsNDMwMTI2MS4wLDM0MDU1NjUuMCw1NzIwNTkuMCw3ODM2MDAuMCwxLjU5ODIzNzhFNyw4MTg2NDUzLjAsMTIxMTUzNy4wLDI5MjYzMjQuMCwxMjkzOTUzLjAsMS4yNDE5MjkzRTcsNjA4MDQ4NS4wLDI2ODg0MTguMCw0MDQxNzY5LjAsNDQ2ODk3Ni4wLDYzNDkwOTcuMCw1Mjk2NDg2LjAsMTI3NDkyMy4wLDk5Mzg0NDQuMCw0OTE5NDc5LjAsNTU5NTIxMS4wLDI4NDQ2NTguMCw5MDIxOTUuMCw4MDQ5MzEzLjAsNjQyMjAwLjAsMTcxMTI2My4wLDEyMzU3ODYuMCw4NDE0MzUwLjAsMTgxOTA0Ni4wLDE5OTgyNTcuMCwxLjg5NzY0NTdFNywxLjEzNTMxNEU3LDM0NTA2NTQuMCwzNDIxMzk5LjAsMS4yMjgxMDU0RTcsMTA0ODMxOS4wLDQwMTIwMTIuMCw3NTQ4NDQuMCw1Njg5MjgzLjAsMi4wODUxODJFNywyMjMzMTY5LjAsNzA3ODUxNi4wLDYwODgyNy4wLDU4OTQxMjEuMCw1MzYzNjc1LjAsMTgwODM0NC4wLDQ5Mzc4Mi4wCis5LFdlZCAyIEZlYiAxMSw2MjY5MzIuMCw0NDQ3MTAwLjAsMjY3MzQwMC4wLDUxMzA2MzIuMCwzLjM4NzE2NDhFNyw0MzAxMjYxLjAsMzQwNTU2NS4wLDU3MjA1OS4wLDc4MzYwMC4wLDEuNTk4MjM3OEU3LDgxODY0NTMuMCwxMjExNTM3LjAsMjkyNjMyNC4wLDEyOTM5NTMuMCwxLjI0MTkyOTNFNyw2MDgwNDg1LjAsMjY4ODQxOC4wLDQwNDE3NjkuMCw0NDY4OTc2LjAsNjM0OTA5Ny4wLDUyOTY0ODYuMCwxMjc0OTIzLjAsOTkzODQ0NC4wLDQ5MTk0NzkuMCw1NTk1MjExLjAsMjg0NDY1OC4wLDkwMjE5NS4wLDgwNDkzMTMuMCw2NDIyMDAuMCwxNzExMjYzLjAsMTIzNTc4Ni4wLDg0MTQzNTAuMCwxODE5MDQ2LjAsMTk5ODI1Ny4wLDEuODk3NjQ1N0U3LDEuMTM1MzE0RTcsMzQ1MDY1NC4wLDM0MjEzOTkuMCwxLjIyODEwNTRFNywxMDQ4MzE5LjAsNDAxMjAxMi4wLDc1NDg0NC4wLDU2ODkyODMuMCwyLjA4NTE4MkU3LDIyMzMxNjkuMCw3MDc4NTE2LjAsNjA4ODI3LjAsNTg5NDEyMS4wLDUzNjM2NzUuMCwxODA4MzQ0LjAsNDkzNzgyLjAKKzEwLFRodSAzIEZlYiAxMSw2MjY5MzIuMCw0NDQ3MTAwLjAsMjY3MzQwMC4wLDUxMzA2MzIuMCwzLjM4NzE2NDhFNyw0MzAxMjYxLjAsMzQwNTU2NS4wLDU3MjA1OS4wLDc4MzYwMC4wLDEuNTk4MjM3OEU3LDgxODY0NTMuMCwxMjExNTM3LjAsMjkyNjMyNC4wLDEyOTM5NTMuMCwxLjI0MTkyOTNFNyw2MDgwNDg1LjAsMjY4ODQxOC4wLDQwNDE3NjkuMCw0NDY4OTc2LjAsNjM0OTA5Ny4wLDUyOTY0ODYuMCwxMjc0OTIzLjAsOTkzODQ0NC4wLDQ5MTk0NzkuMCw1NTk1MjExLjAsMjg0NDY1OC4wLDkwMjE5NS4wLDgwNDkzMTMuMCw2NDIyMDAuMCwxNzExMjYzLjAsMTIzNTc4Ni4wLDg0MTQzNTAuMCwxODE5MDQ2LjAsMTk5ODI1Ny4wLDEuODk3NjQ1N0U3LDEuMTM1MzE0RTcsMzQ1MDY1NC4wLDM0MjEzOTkuMCwxLjIyODEwNTRFNywxMDQ4MzE5LjAsNDAxMjAxMi4wLDc1NDg0NC4wLDU2ODkyODMuMCwyLjA4NTE4MkU3LDIyMzMxNjkuMCw3MDc4NTE2LjAsNjA4ODI3LjAsNTg5NDEyMS4wLDUzNjM2NzUuMCwxODA4MzQ0LjAsNDkzNzgyLjAKKzExLEZyaSA0IEZlYiAxMSw2MjY5MzIuMCw0NDQ3MTAwLjAsMjY3MzQwMC4wLDUxMzA2MzIuMCwzLjM4NzE2NDhFNyw0MzAxMjYxLjAsMzQwNTU2NS4wLDU3MjA1OS4wLDc4MzYwMC4wLDEuNTk4MjM3OEU3LDgxODY0NTMuMCwxMjExNTM3LjAsMjkyNjMyNC4wLDEyOTM5NTMuMCwxLjI0MTkyOTNFNyw2MDgwNDg1LjAsMjY4ODQxOC4wLDQwNDE3NjkuMCw0NDY4OTc2LjAsNjM0OTA5Ny4wLDUyOTY0ODYuMCwxMjc0OTIzLjAsOTkzODQ0NC4wLDQ5MTk0NzkuMCw1NTk1MjExLjAsMjg0NDY1OC4wLDkwMjE5NS4wLDgwNDkzMTMuMCw2NDIyMDAuMCwxNzExMjYzLjAsMTIzNTc4Ni4wLDg0MTQzNTAuMCwxODE5MDQ2LjAsMTk5ODI1Ny4wLDEuODk3NjQ1N0U3LDEuMTM1MzE0RTcsMzQ1MDY1NC4wLDM0MjEzOTkuMCwxLjIyODEwNTRFNywxMDQ4MzE5LjAsNDAxMjAxMi4wLDc1NDg0NC4wLDU2ODkyODMuMCwyLjA4NTE4MkU3LDIyMzMxNjkuMCw3MDc4NTE2LjAsNjA4ODI3LjAsNTg5NDEyMS4wLDUzNjM2NzUuMCwxODA4MzQ0LjAsNDkzNzgyLjAKKzEyLFNhdCA1IEZlYiAxMSw2MjY5MzIuMCw0NDQ3MTAwLjAsMjY3MzQwMC4wLDUxMzA2MzIuMCwzLjM4NzE2NDhFNyw0MzAxMjYxLjAsMzQwNTU2NS4wLDU3MjA1OS4wLDc4MzYwMC4wLDEuNTk4MjM3OEU3LDgxODY0NTMuMCwxMjExNTM3LjAsMjkyNjMyNC4wLDEyOTM5NTMuMCwxLjI0MTkyOTNFNyw2MDgwNDg1LjAsMjY4ODQxOC4wLDQwNDE3NjkuMCw0NDY4OTc2LjAsNjM0OTA5Ny4wLDUyOTY0ODYuMCwxMjc0OTIzLjAsOTkzODQ0NC4wLDQ5MTk0NzkuMCw1NTk1MjExLjAsMjg0NDY1OC4wLDkwMjE5NS4wLDgwNDkzMTMuMCw2NDIyMDAuMCwxNzExMjYzLjAsMTIzNTc4Ni4wLDg0MTQzNTAuMCwxODE5MDQ2LjAsMTk5ODI1Ny4wLDEuODk3NjQ1N0U3LDEuMTM1MzE0RTcsMzQ1MDY1NC4wLDM0MjEzOTkuMCwxLjIyODEwNTRFNywxMDQ4MzE5LjAsNDAxMjAxMi4wLDc1NDg0NC4wLDU2ODkyODMuMCwyLjA4NTE4MkU3LDIyMzMxNjkuMCw3MDc4NTE2LjAsNjA4ODI3LjAsNTg5NDEyMS4wLDUzNjM2NzUuMCwxODA4MzQ0LjAsNDkzNzgyLjAKKzEzLFN1biA2IEZlYiAxMSw2MjY5MzIuMCw0NDQ3MTAwLjAsMjY3MzQwMC4wLDUxMzA2MzIuMCwzLjM4NzE2NDhFNyw0MzAxMjYxLjAsMzQwNTU2NS4wLDU3MjA1OS4wLDc4MzYwMC4wLDEuNTk4MjM3OEU3LDgxODY0NTMuMCwxMjExNTM3LjAsMjkyNjMyNC4wLDEyOTM5NTMuMCwxLjI0MTkyOTNFNyw2MDgwNDg1LjAsMjY4ODQxOC4wLDQwNDE3NjkuMCw0NDY4OTc2LjAsNjM0OTA5Ny4wLDUyOTY0ODYuMCwxMjc0OTIzLjAsOTkzODQ0NC4wLDQ5MTk0NzkuMCw1NTk1MjExLjAsMjg0NDY1OC4wLDkwMjE5NS4wLDgwNDkzMTMuMCw2NDIyMDAuMCwxNzExMjYzLjAsMTIzNTc4Ni4wLDg0MTQzNTAuMCwxODE5MDQ2LjAsMTk5ODI1Ny4wLDEuODk3NjQ1N0U3LDEuMTM1MzE0RTcsMzQ1MDY1NC4wLDM0MjEzOTkuMCwxLjIyODEwNTRFNywxMDQ4MzE5LjAsNDAxMjAxMi4wLDc1NDg0NC4wLDU2ODkyODMuMCwyLjA4NTE4MkU3LDIyMzMxNjkuMCw3MDc4NTE2LjAsNjA4ODI3LjAsNTg5NDEyMS4wLDUzNjM2NzUuMCwxODA4MzQ0LjAsNDkzNzgyLjAKKzE0LE1vbiA3IEZlYiAxMSw2MjY5MzIuMCw0NDQ3MTAwLjAsMjY3MzQwMC4wLDUxMzA2MzIuMCwzLjM4NzE2NDhFNyw0MzAxMjYxLjAsMzQwNTU2NS4wLDU3MjA1OS4wLDc4MzYwMC4wLDEuNTk4MjM3OEU3LDgxODY0NTMuMCwxMjExNTM3LjAsMjkyNjMyNC4wLDEyOTM5NTMuMCwxLjI0MTkyOTNFNyw2MDgwNDg1LjAsMjY4ODQxOC4wLDQwNDE3NjkuMCw0NDY4OTc2LjAsNjM0OTA5Ny4wLDUyOTY0ODYuMCwxMjc0OTIzLjAsOTkzODQ0NC4wLDQ5MTk0NzkuMCw1NTk1MjExLjAsMjg0NDY1OC4wLDkwMjE5NS4wLDgwNDkzMTMuMCw2NDIyMDAuMCwxNzExMjYzLjAsMTIzNTc4Ni4wLDg0MTQzNTAuMCwxODE5MDQ2LjAsMTk5ODI1Ny4wLDEuODk3NjQ1N0U3LDEuMTM1MzE0RTcsMzQ1MDY1NC4wLDM0MjEzOTkuMCwxLjIyODEwNTRFNywxMDQ4MzE5LjAsNDAxMjAxMi4wLDc1NDg0NC4wLDU2ODkyODMuMCwyLjA4NTE4MkU3LDIyMzMxNjkuMCw3MDc4NTE2LjAsNjA4ODI3LjAsNTg5NDEyMS4wLDUzNjM2NzUuMCwxODA4MzQ0LjAsNDkzNzgyLjAKKzE1LFR1ZSA4IEZlYiAxMSw2MjY5MzIuMCw0NDQ3MTAwLjAsMjY3MzQwMC4wLDUxMzA2MzIuMCwzLjM4NzE2NDhFNyw0MzAxMjYxLjAsMzQwNTU2NS4wLDU3MjA1OS4wLDc4MzYwMC4wLDEuNTk4MjM3OEU3LDgxODY0NTMuMCwxMjExNTM3LjAsMjkyNjMyNC4wLDEyOTM5NTMuMCwxLjI0MTkyOTNFNyw2MDgwNDg1LjAsMjY4ODQxOC4wLDQwNDE3NjkuMCw0NDY4OTc2LjAsNjM0OTA5Ny4wLDUyOTY0ODYuMCwxMjc0OTIzLjAsOTkzODQ0NC4wLDQ5MTk0NzkuMCw1NTk1MjExLjAsMjg0NDY1OC4wLDkwMjE5NS4wLDgwNDkzMTMuMCw2NDIyMDAuMCwxNzExMjYzLjAsMTIzNTc4Ni4wLDg0MTQzNTAuMCwxODE5MDQ2LjAsMTk5ODI1Ny4wLDEuODk3NjQ1N0U3LDEuMTM1MzE0RTcsMzQ1MDY1NC4wLDM0MjEzOTkuMCwxLjIyODEwNTRFNywxMDQ4MzE5LjAsNDAxMjAxMi4wLDc1NDg0NC4wLDU2ODkyODMuMCwyLjA4NTE4MkU3LDIyMzMxNjkuMCw3MDc4NTE2LjAsNjA4ODI3LjAsNTg5NDEyMS4wLDUzNjM2NzUuMCwxODA4MzQ0LjAsNDkzNzgyLjAKKzE2LFdlZCA5IEZlYiAxMSw2MjY5MzIuMCw0NDQ3MTAwLjAsMjY3MzQwMC4wLDUxMzA2MzIuMCwzLjM4NzE2NDhFNyw0MzAxMjYxLjAsMzQwNTU2NS4wLDU3MjA1OS4wLDc4MzYwMC4wLDEuNTk4MjM3OEU3LDgxODY0NTMuMCwxMjExNTM3LjAsMjkyNjMyNC4wLDEyOTM5NTMuMCwxLjI0MTkyOTNFNyw2MDgwNDg1LjAsMjY4ODQxOC4wLDQwNDE3NjkuMCw0NDY4OTc2LjAsNjM0OTA5Ny4wLDUyOTY0ODYuMCwxMjc0OTIzLjAsOTkzODQ0NC4wLDQ5MTk0NzkuMCw1NTk1MjExLjAsMjg0NDY1OC4wLDkwMjE5NS4wLDgwNDkzMTMuMCw2NDIyMDAuMCwxNzExMjYzLjAsMTIzNTc4Ni4wLDg0MTQzNTAuMCwxODE5MDQ2LjAsMTk5ODI1Ny4wLDEuODk3NjQ1N0U3LDEuMTM1MzE0RTcsMzQ1MDY1NC4wLDM0MjEzOTkuMCwxLjIyODEwNTRFNywxMDQ4MzE5LjAsNDAxMjAxMi4wLDc1NDg0NC4wLDU2ODkyODMuMCwyLjA4NTE4MkU3LDIyMzMxNjkuMCw3MDc4NTE2LjAsNjA4ODI3LjAsNTg5NDEyMS4wLDUzNjM2NzUuMCwxODA4MzQ0LjAsNDkzNzgyLjAKKzE3LFRodSAxMCBGZWIgMTEsNjI2OTMyLjAsNDQ0NzEwMC4wLDI2NzM0MDAuMCw1MTMwNjMyLjAsMy4zODcxNjQ4RTcsNDMwMTI2MS4wLDM0MDU1NjUuMCw1NzIwNTkuMCw3ODM2MDAuMCwxLjU5ODIzNzhFNyw4MTg2NDUzLjAsMTIxMTUzNy4wLDI5MjYzMjQuMCwxMjkzOTUzLjAsMS4yNDE5MjkzRTcsNjA4MDQ4NS4wLDI2ODg0MTguMCw0MDQxNzY5LjAsNDQ2ODk3Ni4wLDYzNDkwOTcuMCw1Mjk2NDg2LjAsMTI3NDkyMy4wLDk5Mzg0NDQuMCw0OTE5NDc5LjAsNTU5NTIxMS4wLDI4NDQ2NTguMCw5MDIxOTUuMCw4MDQ5MzEzLjAsNjQyMjAwLjAsMTcxMTI2My4wLDEyMzU3ODYuMCw4NDE0MzUwLjAsMTgxOTA0Ni4wLDE5OTgyNTcuMCwxLjg5NzY0NTdFNywxLjEzNTMxNEU3LDM0NTA2NTQuMCwzNDIxMzk5LjAsMS4yMjgxMDU0RTcsMTA0ODMxOS4wLDQwMTIwMTIuMCw3NTQ4NDQuMCw1Njg5MjgzLjAsMi4wODUxODJFNywyMjMzMTY5LjAsNzA3ODUxNi4wLDYwODgyNy4wLDU4OTQxMjEuMCw1MzYzNjc1LjAsMTgwODM0NC4wLDQ5Mzc4Mi4wCisxOCxGcmkgMTEgRmViIDExLDYyNjkzMi4wLDQ0NDcxMDAuMCwyNjczNDAwLjAsNTEzMDYzMi4wLDMuMzg3MTY0OEU3LDQzMDEyNjEuMCwzNDA1NTY1LjAsNTcyMDU5LjAsNzgzNjAwLjAsMS41OTgyMzc4RTcsODE4NjQ1My4wLDEyMTE1MzcuMCwyOTI2MzI0LjAsMTI5Mzk1My4wLDEuMjQxOTI5M0U3LDYwODA0ODUuMCwyNjg4NDE4LjAsNDA0MTc2OS4wLDQ0Njg5NzYuMCw2MzQ5MDk3LjAsNTI5NjQ4Ni4wLDEyNzQ5MjMuMCw5OTM4NDQ0LjAsNDkxOTQ3OS4wLDU1OTUyMTEuMCwyODQ0NjU4LjAsOTAyMTk1LjAsODA0OTMxMy4wLDY0MjIwMC4wLDE3MTEyNjMuMCwxMjM1Nzg2LjAsODQxNDM1MC4wLDE4MTkwNDYuMCwxOTk4MjU3LjAsMS44OTc2NDU3RTcsMS4xMzUzMTRFNywzNDUwNjU0LjAsMzQyMTM5OS4wLDEuMjI4MTA1NEU3LDEwNDgzMTkuMCw0MDEyMDEyLjAsNzU0ODQ0LjAsNTY4OTI4My4wLDIuMDg1MTgyRTcsMjIzMzE2OS4wLDcwNzg1MTYuMCw2MDg4MjcuMCw1ODk0MTIxLjAsNTM2MzY3NS4wLDE4MDgzNDQuMCw0OTM3ODIuMAorMTksU2F0IDEyIEZlYiAxMSw2MjY5MzIuMCw0NDQ3MTAwLjAsMjY3MzQwMC4wLDUxMzA2MzIuMCwzLjM4NzE2NDhFNyw0MzAxMjYxLjAsMzQwNTU2NS4wLDU3MjA1OS4wLDc4MzYwMC4wLDEuNTk4MjM3OEU3LDgxODY0NTMuMCwxMjExNTM3LjAsMjkyNjMyNC4wLDEyOTM5NTMuMCwxLjI0MTkyOTNFNyw2MDgwNDg1LjAsMjY4ODQxOC4wLDQwNDE3NjkuMCw0NDY4OTc2LjAsNjM0OTA5Ny4wLDUyOTY0ODYuMCwxMjc0OTIzLjAsOTkzODQ0NC4wLDQ5MTk0NzkuMCw1NTk1MjExLjAsMjg0NDY1OC4wLDkwMjE5NS4wLDgwNDkzMTMuMCw2NDIyMDAuMCwxNzExMjYzLjAsMTIzNTc4Ni4wLDg0MTQzNTAuMCwxODE5MDQ2LjAsMTk5ODI1Ny4wLDEuODk3NjQ1N0U3LDEuMTM1MzE0RTcsMzQ1MDY1NC4wLDM0MjEzOTkuMCwxLjIyODEwNTRFNywxMDQ4MzE5LjAsNDAxMjAxMi4wLDc1NDg0NC4wLDU2ODkyODMuMCwyLjA4NTE4MkU3LDIyMzMxNjkuMCw3MDc4NTE2LjAsNjA4ODI3LjAsNTg5NDEyMS4wLDUzNjM2NzUuMCwxODA4MzQ0LjAsNDkzNzgyLjAKKzIwLFN1biAxMyBGZWIgMTEsNjI2OTMyLjAsNDQ0NzEwMC4wLDI2NzM0MDAuMCw1MTMwNjMyLjAsMy4zODcxNjQ4RTcsNDMwMTI2MS4wLDM0MDU1NjUuMCw1NzIwNTkuMCw3ODM2MDAuMCwxLjU5ODIzNzhFNyw4MTg2NDUzLjAsMTIxMTUzNy4wLDI5MjYzMjQuMCwxMjkzOTUzLjAsMS4yNDE5MjkzRTcsNjA4MDQ4NS4wLDI2ODg0MTguMCw0MDQxNzY5LjAsNDQ2ODk3Ni4wLDYzNDkwOTcuMCw1Mjk2NDg2LjAsMTI3NDkyMy4wLDk5Mzg0NDQuMCw0OTE5NDc5LjAsNTU5NTIxMS4wLDI4NDQ2NTguMCw5MDIxOTUuMCw4MDQ5MzEzLjAsNjQyMjAwLjAsMTcxMTI2My4wLDEyMzU3ODYuMCw4NDE0MzUwLjAsMTgxOTA0Ni4wLDE5OTgyNTcuMCwxLjg5NzY0NTdFNywxLjEzNTMxNEU3LDM0NTA2NTQuMCwzNDIxMzk5LjAsMS4yMjgxMDU0RTcsMTA0ODMxOS4wLDQwMTIwMTIuMCw3NTQ4NDQuMCw1Njg5MjgzLjAsMi4wODUxODJFNywyMjMzMTY5LjAsNzA3ODUxNi4wLDYwODgyNy4wLDU4OTQxMjEuMCw1MzYzNjc1LjAsMTgwODM0NC4wLDQ5Mzc4Mi4wCisyMSxNb24gMTQgRmViIDExLDYyNjkzMi4wLDQ0NDcxMDAuMCwyNjczNDAwLjAsNTEzMDYzMi4wLDMuMzg3MTY0OEU3LDQzMDEyNjEuMCwzNDA1NTY1LjAsNTcyMDU5LjAsNzgzNjAwLjAsMS41OTgyMzc4RTcsODE4NjQ1My4wLDEyMTE1MzcuMCwyOTI2MzI0LjAsMTI5Mzk1My4wLDEuMjQxOTI5M0U3LDYwODA0ODUuMCwyNjg4NDE4LjAsNDA0MTc2OS4wLDQ0Njg5NzYuMCw2MzQ5MDk3LjAsNTI5NjQ4Ni4wLDEyNzQ5MjMuMCw5OTM4NDQ0LjAsNDkxOTQ3OS4wLDU1OTUyMTEuMCwyODQ0NjU4LjAsOTAyMTk1LjAsODA0OTMxMy4wLDY0MjIwMC4wLDE3MTEyNjMuMCwxMjM1Nzg2LjAsODQxNDM1MC4wLDE4MTkwNDYuMCwxOTk4MjU3LjAsMS44OTc2NDU3RTcsMS4xMzUzMTRFNywzNDUwNjU0LjAsMzQyMTM5OS4wLDEuMjI4MTA1NEU3LDEwNDgzMTkuMCw0MDEyMDEyLjAsNzU0ODQ0LjAsNTY4OTI4My4wLDIuMDg1MTgyRTcsMjIzMzE2OS4wLDcwNzg1MTYuMCw2MDg4MjcuMCw1ODk0MTIxLjAsNTM2MzY3NS4wLDE4MDgzNDQuMCw0OTM3ODIuMAorMjIsVHVlIDE1IEZlYiAxMSw2MjY5MzIuMCw0NDQ3MTAwLjAsMjY3MzQwMC4wLDUxMzA2MzIuMCwzLjM4NzE2NDhFNyw0MzAxMjYxLjAsMzQwNTU2NS4wLDU3MjA1OS4wLDc4MzYwMC4wLDEuNTk4MjM3OEU3LDgxODY0NTMuMCwxMjExNTM3LjAsMjkyNjMyNC4wLDEyOTM5NTMuMCwxLjI0MTkyOTNFNyw2MDgwNDg1LjAsMjY4ODQxOC4wLDQwNDE3NjkuMCw0NDY4OTc2LjAsNjM0OTA5Ny4wLDUyOTY0ODYuMCwxMjc0OTIzLjAsOTkzODQ0NC4wLDQ5MTk0NzkuMCw1NTk1MjExLjAsMjg0NDY1OC4wLDkwMjE5NS4wLDgwNDkzMTMuMCw2NDIyMDAuMCwxNzExMjYzLjAsMTIzNTc4Ni4wLDg0MTQzNTAuMCwxODE5MDQ2LjAsMTk5ODI1Ny4wLDEuODk3NjQ1N0U3LDEuMTM1MzE0RTcsMzQ1MDY1NC4wLDM0MjEzOTkuMCwxLjIyODEwNTRFNywxMDQ4MzE5LjAsNDAxMjAxMi4wLDc1NDg0NC4wLDU2ODkyODMuMCwyLjA4NTE4MkU3LDIyMzMxNjkuMCw3MDc4NTE2LjAsNjA4ODI3LjAsNTg5NDEyMS4wLDUzNjM2NzUuMCwxODA4MzQ0LjAsNDkzNzgyLjAKKzIzLFdlZCAxNiBGZWIgMTEsNjI2OTMyLjAsNDQ0NzEwMC4wLDI2NzM0MDAuMCw1MTMwNjMyLjAsMy4zODcxNjQ4RTcsNDMwMTI2MS4wLDM0MDU1NjUuMCw1NzIwNTkuMCw3ODM2MDAuMCwxLjU5ODIzNzhFNyw4MTg2NDUzLjAsMTIxMTUzNy4wLDI5MjYzMjQuMCwxMjkzOTUzLjAsMS4yNDE5MjkzRTcsNjA4MDQ4NS4wLDI2ODg0MTguMCw0MDQxNzY5LjAsNDQ2ODk3Ni4wLDYzNDkwOTcuMCw1Mjk2NDg2LjAsMTI3NDkyMy4wLDk5Mzg0NDQuMCw0OTE5NDc5LjAsNTU5NTIxMS4wLDI4NDQ2NTguMCw5MDIxOTUuMCw4MDQ5MzEzLjAsNjQyMjAwLjAsMTcxMTI2My4wLDEyMzU3ODYuMCw4NDE0MzUwLjAsMTgxOTA0Ni4wLDE5OTgyNTcuMCwxLjg5NzY0NTdFNywxLjEzNTMxNEU3LDM0NTA2NTQuMCwzNDIxMzk5LjAsMS4yMjgxMDU0RTcsMTA0ODMxOS4wLDQwMTIwMTIuMCw3NTQ4NDQuMCw1Njg5MjgzLjAsMi4wODUxODJFNywyMjMzMTY5LjAsNzA3ODUxNi4wLDYwODgyNy4wLDU4OTQxMjEuMCw1MzYzNjc1LjAsMTgwODM0NC4wLDQ5Mzc4Mi4wCisyNCxUaHUgMTcgRmViIDExLDYyNjkzMi4wLDQ0NDcxMDAuMCwyNjczNDAwLjAsNTEzMDYzMi4wLDMuMzg3MTY0OEU3LDQzMDEyNjEuMCwzNDA1NTY1LjAsNTcyMDU5LjAsNzgzNjAwLjAsMS41OTgyMzc4RTcsODE4NjQ1My4wLDEyMTE1MzcuMCwyOTI2MzI0LjAsMTI5Mzk1My4wLDEuMjQxOTI5M0U3LDYwODA0ODUuMCwyNjg4NDE4LjAsNDA0MTc2OS4wLDQ0Njg5NzYuMCw2MzQ5MDk3LjAsNTI5NjQ4Ni4wLDEyNzQ5MjMuMCw5OTM4NDQ0LjAsNDkxOTQ3OS4wLDU1OTUyMTEuMCwyODQ0NjU4LjAsOTAyMTk1LjAsODA0OTMxMy4wLDY0MjIwMC4wLDE3MTEyNjMuMCwxMjM1Nzg2LjAsODQxNDM1MC4wLDE4MTkwNDYuMCwxOTk4MjU3LjAsMS44OTc2NDU3RTcsMS4xMzUzMTRFNywzNDUwNjU0LjAsMzQyMTM5OS4wLDEuMjI4MTA1NEU3LDEwNDgzMTkuMCw0MDEyMDEyLjAsNzU0ODQ0LjAsNTY4OTI4My4wLDIuMDg1MTgyRTcsMjIzMzE2OS4wLDcwNzg1MTYuMCw2MDg4MjcuMCw1ODk0MTIxLjAsNTM2MzY3NS4wLDE4MDgzNDQuMCw0OTM3ODIuMAorMjUsRnJpIDE4IEZlYiAxMSw2MjY5MzIuMCw0NDQ3MTAwLjAsMjY3MzQwMC4wLDUxMzA2MzIuMCwzLjM4NzE2NDhFNyw0MzAxMjYxLjAsMzQwNTU2NS4wLDU3MjA1OS4wLDc4MzYwMC4wLDEuNTk4MjM3OEU3LDgxODY0NTMuMCwxMjExNTM3LjAsMjkyNjMyNC4wLDEyOTM5NTMuMCwxLjI0MTkyOTNFNyw2MDgwNDg1LjAsMjY4ODQxOC4wLDQwNDE3NjkuMCw0NDY4OTc2LjAsNjM0OTA5Ny4wLDUyOTY0ODYuMCwxMjc0OTIzLjAsOTkzODQ0NC4wLDQ5MTk0NzkuMCw1NTk1MjExLjAsMjg0NDY1OC4wLDkwMjE5NS4wLDgwNDkzMTMuMCw2NDIyMDAuMCwxNzExMjYzLjAsMTIzNTc4Ni4wLDg0MTQzNTAuMCwxODE5MDQ2LjAsMTk5ODI1Ny4wLDEuODk3NjQ1N0U3LDEuMTM1MzE0RTcsMzQ1MDY1NC4wLDM0MjEzOTkuMCwxLjIyODEwNTRFNywxMDQ4MzE5LjAsNDAxMjAxMi4wLDc1NDg0NC4wLDU2ODkyODMuMCwyLjA4NTE4MkU3LDIyMzMxNjkuMCw3MDc4NTE2LjAsNjA4ODI3LjAsNTg5NDEyMS4wLDUzNjM2NzUuMCwxODA4MzQ0LjAsNDkzNzgyLjAKKzI2LFNhdCAxOSBGZWIgMTEsNjI2OTMyLjAsNDQ0NzEwMC4wLDI2NzM0MDAuMCw1MTMwNjMyLjAsMy4zODcxNjQ4RTcsNDMwMTI2MS4wLDM0MDU1NjUuMCw1NzIwNTkuMCw3ODM2MDAuMCwxLjU5ODIzNzhFNyw4MTg2NDUzLjAsMTIxMTUzNy4wLDI5MjYzMjQuMCwxMjkzOTUzLjAsMS4yNDE5MjkzRTcsNjA4MDQ4NS4wLDI2ODg0MTguMCw0MDQxNzY5LjAsNDQ2ODk3Ni4wLDYzNDkwOTcuMCw1Mjk2NDg2LjAsMTI3NDkyMy4wLDk5Mzg0NDQuMCw0OTE5NDc5LjAsNTU5NTIxMS4wLDI4NDQ2NTguMCw5MDIxOTUuMCw4MDQ5MzEzLjAsNjQyMjAwLjAsMTcxMTI2My4wLDEyMzU3ODYuMCw4NDE0MzUwLjAsMTgxOTA0Ni4wLDE5OTgyNTcuMCwxLjg5NzY0NTdFNywxLjEzNTMxNEU3LDM0NTA2NTQuMCwzNDIxMzk5LjAsMS4yMjgxMDU0RTcsMTA0ODMxOS4wLDQwMTIwMTIuMCw3NTQ4NDQuMCw1Njg5MjgzLjAsMi4wODUxODJFNywyMjMzMTY5LjAsNzA3ODUxNi4wLDYwODgyNy4wLDU4OTQxMjEuMCw1MzYzNjc1LjAsMTgwODM0NC4wLDQ5Mzc4Mi4wCisyNyxTdW4gMjAgRmViIDExLDYyNjkzMi4wLDQ0NDcxMDAuMCwyNjczNDAwLjAsNTEzMDYzMi4wLDMuMzg3MTY0OEU3LDQzMDEyNjEuMCwzNDA1NTY1LjAsNTcyMDU5LjAsNzgzNjAwLjAsMS41OTgyMzc4RTcsODE4NjQ1My4wLDEyMTE1MzcuMCwyOTI2MzI0LjAsMTI5Mzk1My4wLDEuMjQxOTI5M0U3LDYwODA0ODUuMCwyNjg4NDE4LjAsNDA0MTc2OS4wLDQ0Njg5NzYuMCw2MzQ5MDk3LjAsNTI5NjQ4Ni4wLDEyNzQ5MjMuMCw5OTM4NDQ0LjAsNDkxOTQ3OS4wLDU1OTUyMTEuMCwyODQ0NjU4LjAsOTAyMTk1LjAsODA0OTMxMy4wLDY0MjIwMC4wLDE3MTEyNjMuMCwxMjM1Nzg2LjAsODQxNDM1MC4wLDE4MTkwNDYuMCwxOTk4MjU3LjAsMS44OTc2NDU3RTcsMS4xMzUzMTRFNywzNDUwNjU0LjAsMzQyMTM5OS4wLDEuMjI4MTA1NEU3LDEwNDgzMTkuMCw0MDEyMDEyLjAsNzU0ODQ0LjAsNTY4OTI4My4wLDIuMDg1MTgyRTcsMjIzMzE2OS4wLDcwNzg1MTYuMCw2MDg4MjcuMCw1ODk0MTIxLjAsNTM2MzY3NS4wLDE4MDgzNDQuMCw0OTM3ODIuMAorMjgsTW9uIDIxIEZlYiAxMSw2MjY5MzIuMCw0NDQ3MTAwLjAsMjY3MzQwMC4wLDUxMzA2MzIuMCwzLjM4NzE2NDhFNyw0MzAxMjYxLjAsMzQwNTU2NS4wLDU3MjA1OS4wLDc4MzYwMC4wLDEuNTk4MjM3OEU3LDgxODY0NTMuMCwxMjExNTM3LjAsMjkyNjMyNC4wLDEyOTM5NTMuMCwxLjI0MTkyOTNFNyw2MDgwNDg1LjAsMjY4ODQxOC4wLDQwNDE3NjkuMCw0NDY4OTc2LjAsNjM0OTA5Ny4wLDUyOTY0ODYuMCwxMjc0OTIzLjAsOTkzODQ0NC4wLDQ5MTk0NzkuMCw1NTk1MjExLjAsMjg0NDY1OC4wLDkwMjE5NS4wLDgwNDkzMTMuMCw2NDIyMDAuMCwxNzExMjYzLjAsMTIzNTc4Ni4wLDg0MTQzNTAuMCwxODE5MDQ2LjAsMTk5ODI1Ny4wLDEuODk3NjQ1N0U3LDEuMTM1MzE0RTcsMzQ1MDY1NC4wLDM0MjEzOTkuMCwxLjIyODEwNTRFNywxMDQ4MzE5LjAsNDAxMjAxMi4wLDc1NDg0NC4wLDU2ODkyODMuMCwyLjA4NTE4MkU3LDIyMzMxNjkuMCw3MDc4NTE2LjAsNjA4ODI3LjAsNTg5NDEyMS4wLDUzNjM2NzUuMCwxODA4MzQ0LjAsNDkzNzgyLjAKKzI5LFR1ZSAyMiBGZWIgMTEsNjI2OTMyLjAsNDQ0NzEwMC4wLDI2NzM0MDAuMCw1MTMwNjMyLjAsMy4zODcxNjQ4RTcsNDMwMTI2MS4wLDM0MDU1NjUuMCw1NzIwNTkuMCw3ODM2MDAuMCwxLjU5ODIzNzhFNyw4MTg2NDUzLjAsMTIxMTUzNy4wLDI5MjYzMjQuMCwxMjkzOTUzLjAsMS4yNDE5MjkzRTcsNjA4MDQ4NS4wLDI2ODg0MTguMCw0MDQxNzY5LjAsNDQ2ODk3Ni4wLDYzNDkwOTcuMCw1Mjk2NDg2LjAsMTI3NDkyMy4wLDk5Mzg0NDQuMCw0OTE5NDc5LjAsNTU5NTIxMS4wLDI4NDQ2NTguMCw5MDIxOTUuMCw4MDQ5MzEzLjAsNjQyMjAwLjAsMTcxMTI2My4wLDEyMzU3ODYuMCw4NDE0MzUwLjAsMTgxOTA0Ni4wLDE5OTgyNTcuMCwxLjg5NzY0NTdFNywxLjEzNTMxNEU3LDM0NTA2NTQuMCwzNDIxMzk5LjAsMS4yMjgxMDU0RTcsMTA0ODMxOS4wLDQwMTIwMTIuMCw3NTQ4NDQuMCw1Njg5MjgzLjAsMi4wODUxODJFNywyMjMzMTY5LjAsNzA3ODUxNi4wLDYwODgyNy4wLDU4OTQxMjEuMCw1MzYzNjc1LjAsMTgwODM0NC4wLDQ5Mzc4Mi4wCiszMCxXZWQgMjMgRmViIDExLDYyNjkzMi4wLDQ0NDcxMDAuMCwyNjczNDAwLjAsNTEzMDYzMi4wLDMuMzg3MTY0OEU3LDQzMDEyNjEuMCwzNDA1NTY1LjAsNTcyMDU5LjAsNzgzNjAwLjAsMS41OTgyMzc4RTcsODE4NjQ1My4wLDEyMTE1MzcuMCwyOTI2MzI0LjAsMTI5Mzk1My4wLDEuMjQxOTI5M0U3LDYwODA0ODUuMCwyNjg4NDE4LjAsNDA0MTc2OS4wLDQ0Njg5NzYuMCw2MzQ5MDk3LjAsNTI5NjQ4Ni4wLDEyNzQ5MjMuMCw5OTM4NDQ0LjAsNDkxOTQ3OS4wLDU1OTUyMTEuMCwyODQ0NjU4LjAsOTAyMTk1LjAsODA0OTMxMy4wLDY0MjIwMC4wLDE3MTEyNjMuMCwxMjM1Nzg2LjAsODQxNDM1MC4wLDE4MTkwNDYuMCwxOTk4MjU3LjAsMS44OTc2NDU3RTcsMS4xMzUzMTRFNywzNDUwNjU0LjAsMzQyMTM5OS4wLDEuMjI4MTA1NEU3LDEwNDgzMTkuMCw0MDEyMDEyLjAsNzU0ODQ0LjAsNTY4OTI4My4wLDIuMDg1MTgyRTcsMjIzMzE2OS4wLDcwNzg1MTYuMCw2MDg4MjcuMCw1ODk0MTIxLjAsNTM2MzY3NS4wLDE4MDgzNDQuMCw0OTM3ODIuMAorMzEsVGh1IDI0IEZlYiAxMSw2MjY5MzIuMCw0NDQ3MTAwLjAsMjY3MzQwMC4wLDUxMzA2MzIuMCwzLjM4NzE2NDhFNyw0MzAxMjYxLjAsMzQwNTU2NS4wLDU3MjA1OS4wLDc4MzYwMC4wLDEuNTk4MjM3OEU3LDgxODY0NTMuMCwxMjExNTM3LjAsMjkyNjMyNC4wLDEyOTM5NTMuMCwxLjI0MTkyOTNFNyw2MDgwNDg1LjAsMjY4ODQxOC4wLDQwNDE3NjkuMCw0NDY4OTc2LjAsNjM0OTA5Ny4wLDUyOTY0ODYuMCwxMjc0OTIzLjAsOTkzODQ0NC4wLDQ5MTk0NzkuMCw1NTk1MjExLjAsMjg0NDY1OC4wLDkwMjE5NS4wLDgwNDkzMTMuMCw2NDIyMDAuMCwxNzExMjYzLjAsMTIzNTc4Ni4wLDg0MTQzNTAuMCwxODE5MDQ2LjAsMTk5ODI1Ny4wLDEuODk3NjQ1N0U3LDEuMTM1MzE0RTcsMzQ1MDY1NC4wLDM0MjEzOTkuMCwxLjIyODEwNTRFNywxMDQ4MzE5LjAsNDAxMjAxMi4wLDc1NDg0NC4wLDU2ODkyODMuMCwyLjA4NTE4MkU3LDIyMzMxNjkuMCw3MDc4NTE2LjAsNjA4ODI3LjAsNTg5NDEyMS4wLDUzNjM2NzUuMCwxODA4MzQ0LjAsNDkzNzgyLjAKKzMyLEZyaSAyNSBGZWIgMTEsNjI2OTMyLjAsNDQ0NzEwMC4wLDI2NzM0MDAuMCw1MTMwNjMyLjAsMy4zODcxNjQ4RTcsNDMwMTI2MS4wLDM0MDU1NjUuMCw1NzIwNTkuMCw3ODM2MDAuMCwxLjU5ODIzNzhFNyw4MTg2NDUzLjAsMTIxMTUzNy4wLDI5MjYzMjQuMCwxMjkzOTUzLjAsMS4yNDE5MjkzRTcsNjA4MDQ4NS4wLDI2ODg0MTguMCw0MDQxNzY5LjAsNDQ2ODk3Ni4wLDYzNDkwOTcuMCw1Mjk2NDg2LjAsMTI3NDkyMy4wLDk5Mzg0NDQuMCw0OTE5NDc5LjAsNTU5NTIxMS4wLDI4NDQ2NTguMCw5MDIxOTUuMCw4MDQ5MzEzLjAsNjQyMjAwLjAsMTcxMTI2My4wLDEyMzU3ODYuMCw4NDE0MzUwLjAsMTgxOTA0Ni4wLDE5OTgyNTcuMCwxLjg5NzY0NTdFNywxLjEzNTMxNEU3LDM0NTA2NTQuMCwzNDIxMzk5LjAsMS4yMjgxMDU0RTcsMTA0ODMxOS4wLDQwMTIwMTIuMCw3NTQ4NDQuMCw1Njg5MjgzLjAsMi4wODUxODJFNywyMjMzMTY5LjAsNzA3ODUxNi4wLDYwODgyNy4wLDU4OTQxMjEuMCw1MzYzNjc1LjAsMTgwODM0NC4wLDQ5Mzc4Mi4wCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNJUlN0YXRlc09ubHlfUktfUmVmZXJlbmNlL2F1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwvaHVtYW4vRGVhdGhzXzAuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTSVJTdGF0ZXNPbmx5X1JLX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL2h1bWFuL0RlYXRoc18wLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMTJlOGI4Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTSVJTdGF0ZXNPbmx5X1JLX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL2h1bWFuL0RlYXRoc18wLmNzdgpAQCAtMCwwICsxLDMzIEBACitpdGVyYXRpb24sdGltZSxzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9ub2RlL3RyYW5zcG9ydC9waXBlL1VTQQorMSxUdWUgMjUgSmFuIDExLDAuMAorMixXZWQgMjYgSmFuIDExLDAuMAorMyxUaHUgMjcgSmFuIDExLDAuMAorNCxGcmkgMjggSmFuIDExLDAuMAorNSxTYXQgMjkgSmFuIDExLDAuMAorNixTdW4gMzAgSmFuIDExLDAuMAorNyxNb24gMzEgSmFuIDExLDAuMAorOCxUdWUgMSBGZWIgMTEsMC4wCis5LFdlZCAyIEZlYiAxMSwwLjAKKzEwLFRodSAzIEZlYiAxMSwwLjAKKzExLEZyaSA0IEZlYiAxMSwwLjAKKzEyLFNhdCA1IEZlYiAxMSwwLjAKKzEzLFN1biA2IEZlYiAxMSwwLjAKKzE0LE1vbiA3IEZlYiAxMSwwLjAKKzE1LFR1ZSA4IEZlYiAxMSwwLjAKKzE2LFdlZCA5IEZlYiAxMSwwLjAKKzE3LFRodSAxMCBGZWIgMTEsMC4wCisxOCxGcmkgMTEgRmViIDExLDAuMAorMTksU2F0IDEyIEZlYiAxMSwwLjAKKzIwLFN1biAxMyBGZWIgMTEsMC4wCisyMSxNb24gMTQgRmViIDExLDAuMAorMjIsVHVlIDE1IEZlYiAxMSwwLjAKKzIzLFdlZCAxNiBGZWIgMTEsMC4wCisyNCxUaHUgMTcgRmViIDExLDAuMAorMjUsRnJpIDE4IEZlYiAxMSwwLjAKKzI2LFNhdCAxOSBGZWIgMTEsMC4wCisyNyxTdW4gMjAgRmViIDExLDAuMAorMjgsTW9uIDIxIEZlYiAxMSwwLjAKKzI5LFR1ZSAyMiBGZWIgMTEsMC4wCiszMCxXZWQgMjMgRmViIDExLDAuMAorMzEsVGh1IDI0IEZlYiAxMSwwLjAKKzMyLEZyaSAyNSBGZWIgMTEsMC4wCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNJUlN0YXRlc09ubHlfUktfUmVmZXJlbmNlL2F1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwvaHVtYW4vRGVhdGhzXzEuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTSVJTdGF0ZXNPbmx5X1JLX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL2h1bWFuL0RlYXRoc18xLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40N2E4NDNmCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTSVJTdGF0ZXNPbmx5X1JLX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL2h1bWFuL0RlYXRoc18xLmNzdgpAQCAtMCwwICsxLDMzIEBACitpdGVyYXRpb24sdGltZSxVUy1BSyxVUy1BTCxVUy1BUixVUy1BWixVUy1DQSxVUy1DTyxVUy1DVCxVUy1EQyxVUy1ERSxVUy1GTCxVUy1HQSxVUy1ISSxVUy1JQSxVUy1JRCxVUy1JTCxVUy1JTixVUy1LUyxVUy1LWSxVUy1MQSxVUy1NQSxVUy1NRCxVUy1NRSxVUy1NSSxVUy1NTixVUy1NTyxVUy1NUyxVUy1NVCxVUy1OQyxVUy1ORCxVUy1ORSxVUy1OSCxVUy1OSixVUy1OTSxVUy1OVixVUy1OWSxVUy1PSCxVUy1PSyxVUy1PUixVUy1QQSxVUy1SSSxVUy1TQyxVUy1TRCxVUy1UTixVUy1UWCxVUy1VVCxVUy1WQSxVUy1WVCxVUy1XQSxVUy1XSSxVUy1XVixVUy1XWQorMSxUdWUgMjUgSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyLFdlZCAyNiBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzMsVGh1IDI3IEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorNCxGcmkgMjggSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCis1LFNhdCAyOSBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzYsU3VuIDMwIEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorNyxNb24gMzEgSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCis4LFR1ZSAxIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorOSxXZWQgMiBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzEwLFRodSAzIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTEsRnJpIDQgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxMixTYXQgNSBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzEzLFN1biA2IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTQsTW9uIDcgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxNSxUdWUgOCBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzE2LFdlZCA5IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTcsVGh1IDEwIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTgsRnJpIDExIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTksU2F0IDEyIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjAsU3VuIDEzIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjEsTW9uIDE0IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjIsVHVlIDE1IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjMsV2VkIDE2IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjQsVGh1IDE3IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjUsRnJpIDE4IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjYsU2F0IDE5IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjcsU3VuIDIwIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjgsTW9uIDIxIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjksVHVlIDIyIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMzAsV2VkIDIzIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMzEsVGh1IDI0IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMzIsRnJpIDI1IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTSVJTdGF0ZXNPbmx5X1JLX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL2h1bWFuL0RlbnNpdHlfMC5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNJUlN0YXRlc09ubHlfUktfUmVmZXJlbmNlL2F1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwvaHVtYW4vRGVuc2l0eV8wLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMTJlOGI4Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTSVJTdGF0ZXNPbmx5X1JLX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL2h1bWFuL0RlbnNpdHlfMC5jc3YKQEAgLTAsMCArMSwzMyBAQAoraXRlcmF0aW9uLHRpbWUsc3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vbm9kZS90cmFuc3BvcnQvcGlwZS9VU0EKKzEsVHVlIDI1IEphbiAxMSwwLjAKKzIsV2VkIDI2IEphbiAxMSwwLjAKKzMsVGh1IDI3IEphbiAxMSwwLjAKKzQsRnJpIDI4IEphbiAxMSwwLjAKKzUsU2F0IDI5IEphbiAxMSwwLjAKKzYsU3VuIDMwIEphbiAxMSwwLjAKKzcsTW9uIDMxIEphbiAxMSwwLjAKKzgsVHVlIDEgRmViIDExLDAuMAorOSxXZWQgMiBGZWIgMTEsMC4wCisxMCxUaHUgMyBGZWIgMTEsMC4wCisxMSxGcmkgNCBGZWIgMTEsMC4wCisxMixTYXQgNSBGZWIgMTEsMC4wCisxMyxTdW4gNiBGZWIgMTEsMC4wCisxNCxNb24gNyBGZWIgMTEsMC4wCisxNSxUdWUgOCBGZWIgMTEsMC4wCisxNixXZWQgOSBGZWIgMTEsMC4wCisxNyxUaHUgMTAgRmViIDExLDAuMAorMTgsRnJpIDExIEZlYiAxMSwwLjAKKzE5LFNhdCAxMiBGZWIgMTEsMC4wCisyMCxTdW4gMTMgRmViIDExLDAuMAorMjEsTW9uIDE0IEZlYiAxMSwwLjAKKzIyLFR1ZSAxNSBGZWIgMTEsMC4wCisyMyxXZWQgMTYgRmViIDExLDAuMAorMjQsVGh1IDE3IEZlYiAxMSwwLjAKKzI1LEZyaSAxOCBGZWIgMTEsMC4wCisyNixTYXQgMTkgRmViIDExLDAuMAorMjcsU3VuIDIwIEZlYiAxMSwwLjAKKzI4LE1vbiAyMSBGZWIgMTEsMC4wCisyOSxUdWUgMjIgRmViIDExLDAuMAorMzAsV2VkIDIzIEZlYiAxMSwwLjAKKzMxLFRodSAyNCBGZWIgMTEsMC4wCiszMixGcmkgMjUgRmViIDExLDAuMApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTSVJTdGF0ZXNPbmx5X1JLX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL2h1bWFuL0RlbnNpdHlfMS5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNJUlN0YXRlc09ubHlfUktfUmVmZXJlbmNlL2F1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwvaHVtYW4vRGVuc2l0eV8xLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NDE4YjcyCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTSVJTdGF0ZXNPbmx5X1JLX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL2h1bWFuL0RlbnNpdHlfMS5jc3YKQEAgLTAsMCArMSwzMyBAQAoraXRlcmF0aW9uLHRpbWUsVVMtQUssVVMtQUwsVVMtQVIsVVMtQVosVVMtQ0EsVVMtQ08sVVMtQ1QsVVMtREMsVVMtREUsVVMtRkwsVVMtR0EsVVMtSEksVVMtSUEsVVMtSUQsVVMtSUwsVVMtSU4sVVMtS1MsVVMtS1ksVVMtTEEsVVMtTUEsVVMtTUQsVVMtTUUsVVMtTUksVVMtTU4sVVMtTU8sVVMtTVMsVVMtTVQsVVMtTkMsVVMtTkQsVVMtTkUsVVMtTkgsVVMtTkosVVMtTk0sVVMtTlYsVVMtTlksVVMtT0gsVVMtT0ssVVMtT1IsVVMtUEEsVVMtUkksVVMtU0MsVVMtU0QsVVMtVE4sVVMtVFgsVVMtVVQsVVMtVkEsVVMtVlQsVVMtV0EsVVMtV0ksVVMtV1YsVVMtV1kKKzEsVHVlIDI1IEphbiAxMSwwLjk0NTIxNzc2OTM4MDAyMzMsODQuODM3NTI2NTMxNDAwMjQsNTAuMjcyMDgzMDI4ODU2MzMsNDUuMDA2MjE1MDA0OTYwNiwyMDYuOTE4NTM3ODY4ODAxMiw0MS4zMjExMDE3NzQxMDU3MzUsNjE0LjM1MzY0NjYzNDc4NDUsODM3MC43Nzg0NjA2Mzc5ODYsMzE0Ljc5MTA4MzMyOTY1MDg2LDI0My4wNjEwMjQzMzMwNTQxOCwxMzcuNzYxNjI3MDExNzY2MywxMTAuODM1MTY3NTY5NjA0OTIsNTIuMDAzNjE0NjE1MjAwNzUsMTUuNDgzNDQ4MTQzMTYzMiwyMTQuNDQyMzAyNTg1Mjk5MjIsMTY2Ljk2NDk2NDU5Mjc5NTg3LDMyLjY3NTI3MDQ2NDkzMjc4LDEwMC4wMjE0NTU2MDU3MDM4OCw4Ni4yMDc1OTc2NTE5OTI1OSw2MDEuNTQ5NTY1NzMzMTM3NSw0MjYuOTA1OTg5MzU0MTIyMTQsMzYuMDMwMzk3MzYxNTY3OCwxMDIuNzU4OTMwMjM0MDYzMzksNTYuNTg1NDk1MDcyNTcyMjYsODAuMjcwNjYwNDUxMjY5MDgsNTguNzM3Mjg3NjI5ODg1NDEsNi4xMzU2MTEyMjUwNjE2MTU1LDE0OS41NjQwMjU0NjI2MTUsOS4wODM0NzgxODI4OTEzNSwyMi4xMjI1NjYwMzUyNzcxNjMsMTMyLjE3MDQ3MzgyMTIyMjM3LDk2NC44MDQ1NTg5NTMzNjcyLDE0Ljk2MDU1NDE1MzIwNDcwMiwxOC4wNzM4NDM3NzMyNTM2MjUsMzQ3LjgzNDQ2MzY3MDM1NzEsMjUzLjI3NzUzMTAxNTEyNzc1LDQ5LjM2Njg1NzcxMTE5Mzk1LDM0Ljc3NzE1NzM3NTY3ODc5LDI2Ni42NTkyMTE4NTA4MTIyLDY3OC41MDE2NjY2MTI3MzEsMTI1LjI5NjI4MTcyMjE2Mjg5LDkuNzg4MzYwNDQwMTYwMDc1LDEzNC45OTg2MTMwNjQ0MzQ3Miw3Ny42MzcwNDA1MDA1MDkzLDI2LjMwMzg4NDI4MjAzMzA5NiwxNjUuNDg1NjQzMjE0ODM1MTQsNjMuMzI1NDE0NTQwNDg0NjUsODIuNjY2OTExMDgxMTc3OTcsODEuODkwODkzNDY3OTA0NzMsNzQuNjMzMTc4MzcyMzgxNzQsNS4wNDgxOTU3NzE2MjkyMQorMixXZWQgMjYgSmFuIDExLDAuOTQ1MjE3NzY5MzgwMDIzMyw4NC44Mzc1MjY1MzE0MDAyNCw1MC4yNzIwODMwMjg4NTYzMyw0NS4wMDYyMTUwMDQ5NjA2LDIwNi45MTg1Mzc4Njg4MDEyLDQxLjMyMTEwMTc3NDEwNTczNSw2MTQuMzUzNjQ2NjM0Nzg0NSw4MzcwLjc3ODQ2MDYzNzk4NiwzMTQuNzkxMDgzMzI5NjUwODYsMjQzLjA2MTAyNDMzMzA1NDE4LDEzNy43NjE2MjcwMTE3NjYzLDExMC44MzUxNjc1Njk2MDQ5Miw1Mi4wMDM2MTQ2MTUyMDA3NSwxNS40ODM0NDgxNDMxNjMyLDIxNC40NDIzMDI1ODUyOTkyMiwxNjYuOTY0OTY0NTkyNzk1ODcsMzIuNjc1MjcwNDY0OTMyNzgsMTAwLjAyMTQ1NTYwNTcwMzg4LDg2LjIwNzU5NzY1MTk5MjU5LDYwMS41NDk1NjU3MzMxMzc1LDQyNi45MDU5ODkzNTQxMjIxNCwzNi4wMzAzOTczNjE1Njc4LDEwMi43NTg5MzAyMzQwNjMzOSw1Ni41ODU0OTUwNzI1NzIyNiw4MC4yNzA2NjA0NTEyNjkwOCw1OC43MzcyODc2Mjk4ODU0MSw2LjEzNTYxMTIyNTA2MTYxNTUsMTQ5LjU2NDAyNTQ2MjYxNSw5LjA4MzQ3ODE4Mjg5MTM1LDIyLjEyMjU2NjAzNTI3NzE2MywxMzIuMTcwNDczODIxMjIyMzcsOTY0LjgwNDU1ODk1MzM2NzIsMTQuOTYwNTU0MTUzMjA0NzAyLDE4LjA3Mzg0Mzc3MzI1MzYyNSwzNDcuODM0NDYzNjcwMzU3MSwyNTMuMjc3NTMxMDE1MTI3NzUsNDkuMzY2ODU3NzExMTkzOTUsMzQuNzc3MTU3Mzc1Njc4NzksMjY2LjY1OTIxMTg1MDgxMjIsNjc4LjUwMTY2NjYxMjczMSwxMjUuMjk2MjgxNzIyMTYyODksOS43ODgzNjA0NDAxNjAwNzUsMTM0Ljk5ODYxMzA2NDQzNDcyLDc3LjYzNzA0MDUwMDUwOTMsMjYuMzAzODg0MjgyMDMzMDk2LDE2NS40ODU2NDMyMTQ4MzUxNCw2My4zMjU0MTQ1NDA0ODQ2NSw4Mi42NjY5MTEwODExNzc5Nyw4MS44OTA4OTM0Njc5MDQ3Myw3NC42MzMxNzgzNzIzODE3NCw1LjA0ODE5NTc3MTYyOTIxCiszLFRodSAyNyBKYW4gMTEsMC45NDUyMTc3NjkzODAwMjMzLDg0LjgzNzUyNjUzMTQwMDI0LDUwLjI3MjA4MzAyODg1NjMzLDQ1LjAwNjIxNTAwNDk2MDYsMjA2LjkxODUzNzg2ODgwMTIsNDEuMzIxMTAxNzc0MTA1NzM1LDYxNC4zNTM2NDY2MzQ3ODQ1LDgzNzAuNzc4NDYwNjM3OTg2LDMxNC43OTEwODMzMjk2NTA4NiwyNDMuMDYxMDI0MzMzMDU0MTgsMTM3Ljc2MTYyNzAxMTc2NjMsMTEwLjgzNTE2NzU2OTYwNDkyLDUyLjAwMzYxNDYxNTIwMDc1LDE1LjQ4MzQ0ODE0MzE2MzIsMjE0LjQ0MjMwMjU4NTI5OTIyLDE2Ni45NjQ5NjQ1OTI3OTU4NywzMi42NzUyNzA0NjQ5MzI3OCwxMDAuMDIxNDU1NjA1NzAzODgsODYuMjA3NTk3NjUxOTkyNTksNjAxLjU0OTU2NTczMzEzNzUsNDI2LjkwNTk4OTM1NDEyMjE0LDM2LjAzMDM5NzM2MTU2NzgsMTAyLjc1ODkzMDIzNDA2MzM5LDU2LjU4NTQ5NTA3MjU3MjI2LDgwLjI3MDY2MDQ1MTI2OTA4LDU4LjczNzI4NzYyOTg4NTQxLDYuMTM1NjExMjI1MDYxNjE1NSwxNDkuNTY0MDI1NDYyNjE1LDkuMDgzNDc4MTgyODkxMzUsMjIuMTIyNTY2MDM1Mjc3MTYzLDEzMi4xNzA0NzM4MjEyMjIzNyw5NjQuODA0NTU4OTUzMzY3MiwxNC45NjA1NTQxNTMyMDQ3MDIsMTguMDczODQzNzczMjUzNjI1LDM0Ny44MzQ0NjM2NzAzNTcxLDI1My4yNzc1MzEwMTUxMjc3NSw0OS4zNjY4NTc3MTExOTM5NSwzNC43NzcxNTczNzU2Nzg3OSwyNjYuNjU5MjExODUwODEyMiw2NzguNTAxNjY2NjEyNzMxLDEyNS4yOTYyODE3MjIxNjI4OSw5Ljc4ODM2MDQ0MDE2MDA3NSwxMzQuOTk4NjEzMDY0NDM0NzIsNzcuNjM3MDQwNTAwNTA5MywyNi4zMDM4ODQyODIwMzMwOTYsMTY1LjQ4NTY0MzIxNDgzNTE0LDYzLjMyNTQxNDU0MDQ4NDY1LDgyLjY2NjkxMTA4MTE3Nzk3LDgxLjg5MDg5MzQ2NzkwNDczLDc0LjYzMzE3ODM3MjM4MTc0LDUuMDQ4MTk1NzcxNjI5MjEKKzQsRnJpIDI4IEphbiAxMSwwLjk0NTIxNzc2OTM4MDAyMzMsODQuODM3NTI2NTMxNDAwMjQsNTAuMjcyMDgzMDI4ODU2MzMsNDUuMDA2MjE1MDA0OTYwNiwyMDYuOTE4NTM3ODY4ODAxMiw0MS4zMjExMDE3NzQxMDU3MzUsNjE0LjM1MzY0NjYzNDc4NDUsODM3MC43Nzg0NjA2Mzc5ODYsMzE0Ljc5MTA4MzMyOTY1MDg2LDI0My4wNjEwMjQzMzMwNTQxOCwxMzcuNzYxNjI3MDExNzY2MywxMTAuODM1MTY3NTY5NjA0OTIsNTIuMDAzNjE0NjE1MjAwNzUsMTUuNDgzNDQ4MTQzMTYzMiwyMTQuNDQyMzAyNTg1Mjk5MjIsMTY2Ljk2NDk2NDU5Mjc5NTg3LDMyLjY3NTI3MDQ2NDkzMjc4LDEwMC4wMjE0NTU2MDU3MDM4OCw4Ni4yMDc1OTc2NTE5OTI1OSw2MDEuNTQ5NTY1NzMzMTM3NSw0MjYuOTA1OTg5MzU0MTIyMTQsMzYuMDMwMzk3MzYxNTY3OCwxMDIuNzU4OTMwMjM0MDYzMzksNTYuNTg1NDk1MDcyNTcyMjYsODAuMjcwNjYwNDUxMjY5MDgsNTguNzM3Mjg3NjI5ODg1NDEsNi4xMzU2MTEyMjUwNjE2MTU1LDE0OS41NjQwMjU0NjI2MTUsOS4wODM0NzgxODI4OTEzNSwyMi4xMjI1NjYwMzUyNzcxNjMsMTMyLjE3MDQ3MzgyMTIyMjM3LDk2NC44MDQ1NTg5NTMzNjcyLDE0Ljk2MDU1NDE1MzIwNDcwMiwxOC4wNzM4NDM3NzMyNTM2MjUsMzQ3LjgzNDQ2MzY3MDM1NzEsMjUzLjI3NzUzMTAxNTEyNzc1LDQ5LjM2Njg1NzcxMTE5Mzk1LDM0Ljc3NzE1NzM3NTY3ODc5LDI2Ni42NTkyMTE4NTA4MTIyLDY3OC41MDE2NjY2MTI3MzEsMTI1LjI5NjI4MTcyMjE2Mjg5LDkuNzg4MzYwNDQwMTYwMDc1LDEzNC45OTg2MTMwNjQ0MzQ3Miw3Ny42MzcwNDA1MDA1MDkzLDI2LjMwMzg4NDI4MjAzMzA5NiwxNjUuNDg1NjQzMjE0ODM1MTQsNjMuMzI1NDE0NTQwNDg0NjUsODIuNjY2OTExMDgxMTc3OTcsODEuODkwODkzNDY3OTA0NzMsNzQuNjMzMTc4MzcyMzgxNzQsNS4wNDgxOTU3NzE2MjkyMQorNSxTYXQgMjkgSmFuIDExLDAuOTQ1MjE3NzY5MzgwMDIzMyw4NC44Mzc1MjY1MzE0MDAyNCw1MC4yNzIwODMwMjg4NTYzMyw0NS4wMDYyMTUwMDQ5NjA2LDIwNi45MTg1Mzc4Njg4MDEyLDQxLjMyMTEwMTc3NDEwNTczNSw2MTQuMzUzNjQ2NjM0Nzg0NSw4MzcwLjc3ODQ2MDYzNzk4NiwzMTQuNzkxMDgzMzI5NjUwODYsMjQzLjA2MTAyNDMzMzA1NDE4LDEzNy43NjE2MjcwMTE3NjYzLDExMC44MzUxNjc1Njk2MDQ5Miw1Mi4wMDM2MTQ2MTUyMDA3NSwxNS40ODM0NDgxNDMxNjMyLDIxNC40NDIzMDI1ODUyOTkyMiwxNjYuOTY0OTY0NTkyNzk1ODcsMzIuNjc1MjcwNDY0OTMyNzgsMTAwLjAyMTQ1NTYwNTcwMzg4LDg2LjIwNzU5NzY1MTk5MjU5LDYwMS41NDk1NjU3MzMxMzc1LDQyNi45MDU5ODkzNTQxMjIxNCwzNi4wMzAzOTczNjE1Njc4LDEwMi43NTg5MzAyMzQwNjMzOSw1Ni41ODU0OTUwNzI1NzIyNiw4MC4yNzA2NjA0NTEyNjkwOCw1OC43MzcyODc2Mjk4ODU0MSw2LjEzNTYxMTIyNTA2MTYxNTUsMTQ5LjU2NDAyNTQ2MjYxNSw5LjA4MzQ3ODE4Mjg5MTM1LDIyLjEyMjU2NjAzNTI3NzE2MywxMzIuMTcwNDczODIxMjIyMzcsOTY0LjgwNDU1ODk1MzM2NzIsMTQuOTYwNTU0MTUzMjA0NzAyLDE4LjA3Mzg0Mzc3MzI1MzYyNSwzNDcuODM0NDYzNjcwMzU3MSwyNTMuMjc3NTMxMDE1MTI3NzUsNDkuMzY2ODU3NzExMTkzOTUsMzQuNzc3MTU3Mzc1Njc4NzksMjY2LjY1OTIxMTg1MDgxMjIsNjc4LjUwMTY2NjYxMjczMSwxMjUuMjk2MjgxNzIyMTYyODksOS43ODgzNjA0NDAxNjAwNzUsMTM0Ljk5ODYxMzA2NDQzNDcyLDc3LjYzNzA0MDUwMDUwOTMsMjYuMzAzODg0MjgyMDMzMDk2LDE2NS40ODU2NDMyMTQ4MzUxNCw2My4zMjU0MTQ1NDA0ODQ2NSw4Mi42NjY5MTEwODExNzc5Nyw4MS44OTA4OTM0Njc5MDQ3Myw3NC42MzMxNzgzNzIzODE3NCw1LjA0ODE5NTc3MTYyOTIxCis2LFN1biAzMCBKYW4gMTEsMC45NDUyMTc3NjkzODAwMjMzLDg0LjgzNzUyNjUzMTQwMDI0LDUwLjI3MjA4MzAyODg1NjMzLDQ1LjAwNjIxNTAwNDk2MDYsMjA2LjkxODUzNzg2ODgwMTIsNDEuMzIxMTAxNzc0MTA1NzM1LDYxNC4zNTM2NDY2MzQ3ODQ1LDgzNzAuNzc4NDYwNjM3OTg2LDMxNC43OTEwODMzMjk2NTA4NiwyNDMuMDYxMDI0MzMzMDU0MTgsMTM3Ljc2MTYyNzAxMTc2NjMsMTEwLjgzNTE2NzU2OTYwNDkyLDUyLjAwMzYxNDYxNTIwMDc1LDE1LjQ4MzQ0ODE0MzE2MzIsMjE0LjQ0MjMwMjU4NTI5OTIyLDE2Ni45NjQ5NjQ1OTI3OTU4NywzMi42NzUyNzA0NjQ5MzI3OCwxMDAuMDIxNDU1NjA1NzAzODgsODYuMjA3NTk3NjUxOTkyNTksNjAxLjU0OTU2NTczMzEzNzUsNDI2LjkwNTk4OTM1NDEyMjE0LDM2LjAzMDM5NzM2MTU2NzgsMTAyLjc1ODkzMDIzNDA2MzM5LDU2LjU4NTQ5NTA3MjU3MjI2LDgwLjI3MDY2MDQ1MTI2OTA4LDU4LjczNzI4NzYyOTg4NTQxLDYuMTM1NjExMjI1MDYxNjE1NSwxNDkuNTY0MDI1NDYyNjE1LDkuMDgzNDc4MTgyODkxMzUsMjIuMTIyNTY2MDM1Mjc3MTYzLDEzMi4xNzA0NzM4MjEyMjIzNyw5NjQuODA0NTU4OTUzMzY3MiwxNC45NjA1NTQxNTMyMDQ3MDIsMTguMDczODQzNzczMjUzNjI1LDM0Ny44MzQ0NjM2NzAzNTcxLDI1My4yNzc1MzEwMTUxMjc3NSw0OS4zNjY4NTc3MTExOTM5NSwzNC43NzcxNTczNzU2Nzg3OSwyNjYuNjU5MjExODUwODEyMiw2NzguNTAxNjY2NjEyNzMxLDEyNS4yOTYyODE3MjIxNjI4OSw5Ljc4ODM2MDQ0MDE2MDA3NSwxMzQuOTk4NjEzMDY0NDM0NzIsNzcuNjM3MDQwNTAwNTA5MywyNi4zMDM4ODQyODIwMzMwOTYsMTY1LjQ4NTY0MzIxNDgzNTE0LDYzLjMyNTQxNDU0MDQ4NDY1LDgyLjY2NjkxMTA4MTE3Nzk3LDgxLjg5MDg5MzQ2NzkwNDczLDc0LjYzMzE3ODM3MjM4MTc0LDUuMDQ4MTk1NzcxNjI5MjEKKzcsTW9uIDMxIEphbiAxMSwwLjk0NTIxNzc2OTM4MDAyMzMsODQuODM3NTI2NTMxNDAwMjQsNTAuMjcyMDgzMDI4ODU2MzMsNDUuMDA2MjE1MDA0OTYwNiwyMDYuOTE4NTM3ODY4ODAxMiw0MS4zMjExMDE3NzQxMDU3MzUsNjE0LjM1MzY0NjYzNDc4NDUsODM3MC43Nzg0NjA2Mzc5ODYsMzE0Ljc5MTA4MzMyOTY1MDg2LDI0My4wNjEwMjQzMzMwNTQxOCwxMzcuNzYxNjI3MDExNzY2MywxMTAuODM1MTY3NTY5NjA0OTIsNTIuMDAzNjE0NjE1MjAwNzUsMTUuNDgzNDQ4MTQzMTYzMiwyMTQuNDQyMzAyNTg1Mjk5MjIsMTY2Ljk2NDk2NDU5Mjc5NTg3LDMyLjY3NTI3MDQ2NDkzMjc4LDEwMC4wMjE0NTU2MDU3MDM4OCw4Ni4yMDc1OTc2NTE5OTI1OSw2MDEuNTQ5NTY1NzMzMTM3NSw0MjYuOTA1OTg5MzU0MTIyMTQsMzYuMDMwMzk3MzYxNTY3OCwxMDIuNzU4OTMwMjM0MDYzMzksNTYuNTg1NDk1MDcyNTcyMjYsODAuMjcwNjYwNDUxMjY5MDgsNTguNzM3Mjg3NjI5ODg1NDEsNi4xMzU2MTEyMjUwNjE2MTU1LDE0OS41NjQwMjU0NjI2MTUsOS4wODM0NzgxODI4OTEzNSwyMi4xMjI1NjYwMzUyNzcxNjMsMTMyLjE3MDQ3MzgyMTIyMjM3LDk2NC44MDQ1NTg5NTMzNjcyLDE0Ljk2MDU1NDE1MzIwNDcwMiwxOC4wNzM4NDM3NzMyNTM2MjUsMzQ3LjgzNDQ2MzY3MDM1NzEsMjUzLjI3NzUzMTAxNTEyNzc1LDQ5LjM2Njg1NzcxMTE5Mzk1LDM0Ljc3NzE1NzM3NTY3ODc5LDI2Ni42NTkyMTE4NTA4MTIyLDY3OC41MDE2NjY2MTI3MzEsMTI1LjI5NjI4MTcyMjE2Mjg5LDkuNzg4MzYwNDQwMTYwMDc1LDEzNC45OTg2MTMwNjQ0MzQ3Miw3Ny42MzcwNDA1MDA1MDkzLDI2LjMwMzg4NDI4MjAzMzA5NiwxNjUuNDg1NjQzMjE0ODM1MTQsNjMuMzI1NDE0NTQwNDg0NjUsODIuNjY2OTExMDgxMTc3OTcsODEuODkwODkzNDY3OTA0NzMsNzQuNjMzMTc4MzcyMzgxNzQsNS4wNDgxOTU3NzE2MjkyMQorOCxUdWUgMSBGZWIgMTEsMC45NDUyMTc3NjkzODAwMjMzLDg0LjgzNzUyNjUzMTQwMDI0LDUwLjI3MjA4MzAyODg1NjMzLDQ1LjAwNjIxNTAwNDk2MDYsMjA2LjkxODUzNzg2ODgwMTIsNDEuMzIxMTAxNzc0MTA1NzM1LDYxNC4zNTM2NDY2MzQ3ODQ1LDgzNzAuNzc4NDYwNjM3OTg2LDMxNC43OTEwODMzMjk2NTA4NiwyNDMuMDYxMDI0MzMzMDU0MTgsMTM3Ljc2MTYyNzAxMTc2NjMsMTEwLjgzNTE2NzU2OTYwNDkyLDUyLjAwMzYxNDYxNTIwMDc1LDE1LjQ4MzQ0ODE0MzE2MzIsMjE0LjQ0MjMwMjU4NTI5OTIyLDE2Ni45NjQ5NjQ1OTI3OTU4NywzMi42NzUyNzA0NjQ5MzI3OCwxMDAuMDIxNDU1NjA1NzAzODgsODYuMjA3NTk3NjUxOTkyNTksNjAxLjU0OTU2NTczMzEzNzUsNDI2LjkwNTk4OTM1NDEyMjE0LDM2LjAzMDM5NzM2MTU2NzgsMTAyLjc1ODkzMDIzNDA2MzM5LDU2LjU4NTQ5NTA3MjU3MjI2LDgwLjI3MDY2MDQ1MTI2OTA4LDU4LjczNzI4NzYyOTg4NTQxLDYuMTM1NjExMjI1MDYxNjE1NSwxNDkuNTY0MDI1NDYyNjE1LDkuMDgzNDc4MTgyODkxMzUsMjIuMTIyNTY2MDM1Mjc3MTYzLDEzMi4xNzA0NzM4MjEyMjIzNyw5NjQuODA0NTU4OTUzMzY3MiwxNC45NjA1NTQxNTMyMDQ3MDIsMTguMDczODQzNzczMjUzNjI1LDM0Ny44MzQ0NjM2NzAzNTcxLDI1My4yNzc1MzEwMTUxMjc3NSw0OS4zNjY4NTc3MTExOTM5NSwzNC43NzcxNTczNzU2Nzg3OSwyNjYuNjU5MjExODUwODEyMiw2NzguNTAxNjY2NjEyNzMxLDEyNS4yOTYyODE3MjIxNjI4OSw5Ljc4ODM2MDQ0MDE2MDA3NSwxMzQuOTk4NjEzMDY0NDM0NzIsNzcuNjM3MDQwNTAwNTA5MywyNi4zMDM4ODQyODIwMzMwOTYsMTY1LjQ4NTY0MzIxNDgzNTE0LDYzLjMyNTQxNDU0MDQ4NDY1LDgyLjY2NjkxMTA4MTE3Nzk3LDgxLjg5MDg5MzQ2NzkwNDczLDc0LjYzMzE3ODM3MjM4MTc0LDUuMDQ4MTk1NzcxNjI5MjEKKzksV2VkIDIgRmViIDExLDAuOTQ1MjE3NzY5MzgwMDIzMyw4NC44Mzc1MjY1MzE0MDAyNCw1MC4yNzIwODMwMjg4NTYzMyw0NS4wMDYyMTUwMDQ5NjA2LDIwNi45MTg1Mzc4Njg4MDEyLDQxLjMyMTEwMTc3NDEwNTczNSw2MTQuMzUzNjQ2NjM0Nzg0NSw4MzcwLjc3ODQ2MDYzNzk4NiwzMTQuNzkxMDgzMzI5NjUwODYsMjQzLjA2MTAyNDMzMzA1NDE4LDEzNy43NjE2MjcwMTE3NjYzLDExMC44MzUxNjc1Njk2MDQ5Miw1Mi4wMDM2MTQ2MTUyMDA3NSwxNS40ODM0NDgxNDMxNjMyLDIxNC40NDIzMDI1ODUyOTkyMiwxNjYuOTY0OTY0NTkyNzk1ODcsMzIuNjc1MjcwNDY0OTMyNzgsMTAwLjAyMTQ1NTYwNTcwMzg4LDg2LjIwNzU5NzY1MTk5MjU5LDYwMS41NDk1NjU3MzMxMzc1LDQyNi45MDU5ODkzNTQxMjIxNCwzNi4wMzAzOTczNjE1Njc4LDEwMi43NTg5MzAyMzQwNjMzOSw1Ni41ODU0OTUwNzI1NzIyNiw4MC4yNzA2NjA0NTEyNjkwOCw1OC43MzcyODc2Mjk4ODU0MSw2LjEzNTYxMTIyNTA2MTYxNTUsMTQ5LjU2NDAyNTQ2MjYxNSw5LjA4MzQ3ODE4Mjg5MTM1LDIyLjEyMjU2NjAzNTI3NzE2MywxMzIuMTcwNDczODIxMjIyMzcsOTY0LjgwNDU1ODk1MzM2NzIsMTQuOTYwNTU0MTUzMjA0NzAyLDE4LjA3Mzg0Mzc3MzI1MzYyNSwzNDcuODM0NDYzNjcwMzU3MSwyNTMuMjc3NTMxMDE1MTI3NzUsNDkuMzY2ODU3NzExMTkzOTUsMzQuNzc3MTU3Mzc1Njc4NzksMjY2LjY1OTIxMTg1MDgxMjIsNjc4LjUwMTY2NjYxMjczMSwxMjUuMjk2MjgxNzIyMTYyODksOS43ODgzNjA0NDAxNjAwNzUsMTM0Ljk5ODYxMzA2NDQzNDcyLDc3LjYzNzA0MDUwMDUwOTMsMjYuMzAzODg0MjgyMDMzMDk2LDE2NS40ODU2NDMyMTQ4MzUxNCw2My4zMjU0MTQ1NDA0ODQ2NSw4Mi42NjY5MTEwODExNzc5Nyw4MS44OTA4OTM0Njc5MDQ3Myw3NC42MzMxNzgzNzIzODE3NCw1LjA0ODE5NTc3MTYyOTIxCisxMCxUaHUgMyBGZWIgMTEsMC45NDUyMTc3NjkzODAwMjMzLDg0LjgzNzUyNjUzMTQwMDI0LDUwLjI3MjA4MzAyODg1NjMzLDQ1LjAwNjIxNTAwNDk2MDYsMjA2LjkxODUzNzg2ODgwMTIsNDEuMzIxMTAxNzc0MTA1NzM1LDYxNC4zNTM2NDY2MzQ3ODQ1LDgzNzAuNzc4NDYwNjM3OTg2LDMxNC43OTEwODMzMjk2NTA4NiwyNDMuMDYxMDI0MzMzMDU0MTgsMTM3Ljc2MTYyNzAxMTc2NjMsMTEwLjgzNTE2NzU2OTYwNDkyLDUyLjAwMzYxNDYxNTIwMDc1LDE1LjQ4MzQ0ODE0MzE2MzIsMjE0LjQ0MjMwMjU4NTI5OTIyLDE2Ni45NjQ5NjQ1OTI3OTU4NywzMi42NzUyNzA0NjQ5MzI3OCwxMDAuMDIxNDU1NjA1NzAzODgsODYuMjA3NTk3NjUxOTkyNTksNjAxLjU0OTU2NTczMzEzNzUsNDI2LjkwNTk4OTM1NDEyMjE0LDM2LjAzMDM5NzM2MTU2NzgsMTAyLjc1ODkzMDIzNDA2MzM5LDU2LjU4NTQ5NTA3MjU3MjI2LDgwLjI3MDY2MDQ1MTI2OTA4LDU4LjczNzI4NzYyOTg4NTQxLDYuMTM1NjExMjI1MDYxNjE1NSwxNDkuNTY0MDI1NDYyNjE1LDkuMDgzNDc4MTgyODkxMzUsMjIuMTIyNTY2MDM1Mjc3MTYzLDEzMi4xNzA0NzM4MjEyMjIzNyw5NjQuODA0NTU4OTUzMzY3MiwxNC45NjA1NTQxNTMyMDQ3MDIsMTguMDczODQzNzczMjUzNjI1LDM0Ny44MzQ0NjM2NzAzNTcxLDI1My4yNzc1MzEwMTUxMjc3NSw0OS4zNjY4NTc3MTExOTM5NSwzNC43NzcxNTczNzU2Nzg3OSwyNjYuNjU5MjExODUwODEyMiw2NzguNTAxNjY2NjEyNzMxLDEyNS4yOTYyODE3MjIxNjI4OSw5Ljc4ODM2MDQ0MDE2MDA3NSwxMzQuOTk4NjEzMDY0NDM0NzIsNzcuNjM3MDQwNTAwNTA5MywyNi4zMDM4ODQyODIwMzMwOTYsMTY1LjQ4NTY0MzIxNDgzNTE0LDYzLjMyNTQxNDU0MDQ4NDY1LDgyLjY2NjkxMTA4MTE3Nzk3LDgxLjg5MDg5MzQ2NzkwNDczLDc0LjYzMzE3ODM3MjM4MTc0LDUuMDQ4MTk1NzcxNjI5MjEKKzExLEZyaSA0IEZlYiAxMSwwLjk0NTIxNzc2OTM4MDAyMzMsODQuODM3NTI2NTMxNDAwMjQsNTAuMjcyMDgzMDI4ODU2MzMsNDUuMDA2MjE1MDA0OTYwNiwyMDYuOTE4NTM3ODY4ODAxMiw0MS4zMjExMDE3NzQxMDU3MzUsNjE0LjM1MzY0NjYzNDc4NDUsODM3MC43Nzg0NjA2Mzc5ODYsMzE0Ljc5MTA4MzMyOTY1MDg2LDI0My4wNjEwMjQzMzMwNTQxOCwxMzcuNzYxNjI3MDExNzY2MywxMTAuODM1MTY3NTY5NjA0OTIsNTIuMDAzNjE0NjE1MjAwNzUsMTUuNDgzNDQ4MTQzMTYzMiwyMTQuNDQyMzAyNTg1Mjk5MjIsMTY2Ljk2NDk2NDU5Mjc5NTg3LDMyLjY3NTI3MDQ2NDkzMjc4LDEwMC4wMjE0NTU2MDU3MDM4OCw4Ni4yMDc1OTc2NTE5OTI1OSw2MDEuNTQ5NTY1NzMzMTM3NSw0MjYuOTA1OTg5MzU0MTIyMTQsMzYuMDMwMzk3MzYxNTY3OCwxMDIuNzU4OTMwMjM0MDYzMzksNTYuNTg1NDk1MDcyNTcyMjYsODAuMjcwNjYwNDUxMjY5MDgsNTguNzM3Mjg3NjI5ODg1NDEsNi4xMzU2MTEyMjUwNjE2MTU1LDE0OS41NjQwMjU0NjI2MTUsOS4wODM0NzgxODI4OTEzNSwyMi4xMjI1NjYwMzUyNzcxNjMsMTMyLjE3MDQ3MzgyMTIyMjM3LDk2NC44MDQ1NTg5NTMzNjcyLDE0Ljk2MDU1NDE1MzIwNDcwMiwxOC4wNzM4NDM3NzMyNTM2MjUsMzQ3LjgzNDQ2MzY3MDM1NzEsMjUzLjI3NzUzMTAxNTEyNzc1LDQ5LjM2Njg1NzcxMTE5Mzk1LDM0Ljc3NzE1NzM3NTY3ODc5LDI2Ni42NTkyMTE4NTA4MTIyLDY3OC41MDE2NjY2MTI3MzEsMTI1LjI5NjI4MTcyMjE2Mjg5LDkuNzg4MzYwNDQwMTYwMDc1LDEzNC45OTg2MTMwNjQ0MzQ3Miw3Ny42MzcwNDA1MDA1MDkzLDI2LjMwMzg4NDI4MjAzMzA5NiwxNjUuNDg1NjQzMjE0ODM1MTQsNjMuMzI1NDE0NTQwNDg0NjUsODIuNjY2OTExMDgxMTc3OTcsODEuODkwODkzNDY3OTA0NzMsNzQuNjMzMTc4MzcyMzgxNzQsNS4wNDgxOTU3NzE2MjkyMQorMTIsU2F0IDUgRmViIDExLDAuOTQ1MjE3NzY5MzgwMDIzMyw4NC44Mzc1MjY1MzE0MDAyNCw1MC4yNzIwODMwMjg4NTYzMyw0NS4wMDYyMTUwMDQ5NjA2LDIwNi45MTg1Mzc4Njg4MDEyLDQxLjMyMTEwMTc3NDEwNTczNSw2MTQuMzUzNjQ2NjM0Nzg0NSw4MzcwLjc3ODQ2MDYzNzk4NiwzMTQuNzkxMDgzMzI5NjUwODYsMjQzLjA2MTAyNDMzMzA1NDE4LDEzNy43NjE2MjcwMTE3NjYzLDExMC44MzUxNjc1Njk2MDQ5Miw1Mi4wMDM2MTQ2MTUyMDA3NSwxNS40ODM0NDgxNDMxNjMyLDIxNC40NDIzMDI1ODUyOTkyMiwxNjYuOTY0OTY0NTkyNzk1ODcsMzIuNjc1MjcwNDY0OTMyNzgsMTAwLjAyMTQ1NTYwNTcwMzg4LDg2LjIwNzU5NzY1MTk5MjU5LDYwMS41NDk1NjU3MzMxMzc1LDQyNi45MDU5ODkzNTQxMjIxNCwzNi4wMzAzOTczNjE1Njc4LDEwMi43NTg5MzAyMzQwNjMzOSw1Ni41ODU0OTUwNzI1NzIyNiw4MC4yNzA2NjA0NTEyNjkwOCw1OC43MzcyODc2Mjk4ODU0MSw2LjEzNTYxMTIyNTA2MTYxNTUsMTQ5LjU2NDAyNTQ2MjYxNSw5LjA4MzQ3ODE4Mjg5MTM1LDIyLjEyMjU2NjAzNTI3NzE2MywxMzIuMTcwNDczODIxMjIyMzcsOTY0LjgwNDU1ODk1MzM2NzIsMTQuOTYwNTU0MTUzMjA0NzAyLDE4LjA3Mzg0Mzc3MzI1MzYyNSwzNDcuODM0NDYzNjcwMzU3MSwyNTMuMjc3NTMxMDE1MTI3NzUsNDkuMzY2ODU3NzExMTkzOTUsMzQuNzc3MTU3Mzc1Njc4NzksMjY2LjY1OTIxMTg1MDgxMjIsNjc4LjUwMTY2NjYxMjczMSwxMjUuMjk2MjgxNzIyMTYyODksOS43ODgzNjA0NDAxNjAwNzUsMTM0Ljk5ODYxMzA2NDQzNDcyLDc3LjYzNzA0MDUwMDUwOTMsMjYuMzAzODg0MjgyMDMzMDk2LDE2NS40ODU2NDMyMTQ4MzUxNCw2My4zMjU0MTQ1NDA0ODQ2NSw4Mi42NjY5MTEwODExNzc5Nyw4MS44OTA4OTM0Njc5MDQ3Myw3NC42MzMxNzgzNzIzODE3NCw1LjA0ODE5NTc3MTYyOTIxCisxMyxTdW4gNiBGZWIgMTEsMC45NDUyMTc3NjkzODAwMjMzLDg0LjgzNzUyNjUzMTQwMDI0LDUwLjI3MjA4MzAyODg1NjMzLDQ1LjAwNjIxNTAwNDk2MDYsMjA2LjkxODUzNzg2ODgwMTIsNDEuMzIxMTAxNzc0MTA1NzM1LDYxNC4zNTM2NDY2MzQ3ODQ1LDgzNzAuNzc4NDYwNjM3OTg2LDMxNC43OTEwODMzMjk2NTA4NiwyNDMuMDYxMDI0MzMzMDU0MTgsMTM3Ljc2MTYyNzAxMTc2NjMsMTEwLjgzNTE2NzU2OTYwNDkyLDUyLjAwMzYxNDYxNTIwMDc1LDE1LjQ4MzQ0ODE0MzE2MzIsMjE0LjQ0MjMwMjU4NTI5OTIyLDE2Ni45NjQ5NjQ1OTI3OTU4NywzMi42NzUyNzA0NjQ5MzI3OCwxMDAuMDIxNDU1NjA1NzAzODgsODYuMjA3NTk3NjUxOTkyNTksNjAxLjU0OTU2NTczMzEzNzUsNDI2LjkwNTk4OTM1NDEyMjE0LDM2LjAzMDM5NzM2MTU2NzgsMTAyLjc1ODkzMDIzNDA2MzM5LDU2LjU4NTQ5NTA3MjU3MjI2LDgwLjI3MDY2MDQ1MTI2OTA4LDU4LjczNzI4NzYyOTg4NTQxLDYuMTM1NjExMjI1MDYxNjE1NSwxNDkuNTY0MDI1NDYyNjE1LDkuMDgzNDc4MTgyODkxMzUsMjIuMTIyNTY2MDM1Mjc3MTYzLDEzMi4xNzA0NzM4MjEyMjIzNyw5NjQuODA0NTU4OTUzMzY3MiwxNC45NjA1NTQxNTMyMDQ3MDIsMTguMDczODQzNzczMjUzNjI1LDM0Ny44MzQ0NjM2NzAzNTcxLDI1My4yNzc1MzEwMTUxMjc3NSw0OS4zNjY4NTc3MTExOTM5NSwzNC43NzcxNTczNzU2Nzg3OSwyNjYuNjU5MjExODUwODEyMiw2NzguNTAxNjY2NjEyNzMxLDEyNS4yOTYyODE3MjIxNjI4OSw5Ljc4ODM2MDQ0MDE2MDA3NSwxMzQuOTk4NjEzMDY0NDM0NzIsNzcuNjM3MDQwNTAwNTA5MywyNi4zMDM4ODQyODIwMzMwOTYsMTY1LjQ4NTY0MzIxNDgzNTE0LDYzLjMyNTQxNDU0MDQ4NDY1LDgyLjY2NjkxMTA4MTE3Nzk3LDgxLjg5MDg5MzQ2NzkwNDczLDc0LjYzMzE3ODM3MjM4MTc0LDUuMDQ4MTk1NzcxNjI5MjEKKzE0LE1vbiA3IEZlYiAxMSwwLjk0NTIxNzc2OTM4MDAyMzMsODQuODM3NTI2NTMxNDAwMjQsNTAuMjcyMDgzMDI4ODU2MzMsNDUuMDA2MjE1MDA0OTYwNiwyMDYuOTE4NTM3ODY4ODAxMiw0MS4zMjExMDE3NzQxMDU3MzUsNjE0LjM1MzY0NjYzNDc4NDUsODM3MC43Nzg0NjA2Mzc5ODYsMzE0Ljc5MTA4MzMyOTY1MDg2LDI0My4wNjEwMjQzMzMwNTQxOCwxMzcuNzYxNjI3MDExNzY2MywxMTAuODM1MTY3NTY5NjA0OTIsNTIuMDAzNjE0NjE1MjAwNzUsMTUuNDgzNDQ4MTQzMTYzMiwyMTQuNDQyMzAyNTg1Mjk5MjIsMTY2Ljk2NDk2NDU5Mjc5NTg3LDMyLjY3NTI3MDQ2NDkzMjc4LDEwMC4wMjE0NTU2MDU3MDM4OCw4Ni4yMDc1OTc2NTE5OTI1OSw2MDEuNTQ5NTY1NzMzMTM3NSw0MjYuOTA1OTg5MzU0MTIyMTQsMzYuMDMwMzk3MzYxNTY3OCwxMDIuNzU4OTMwMjM0MDYzMzksNTYuNTg1NDk1MDcyNTcyMjYsODAuMjcwNjYwNDUxMjY5MDgsNTguNzM3Mjg3NjI5ODg1NDEsNi4xMzU2MTEyMjUwNjE2MTU1LDE0OS41NjQwMjU0NjI2MTUsOS4wODM0NzgxODI4OTEzNSwyMi4xMjI1NjYwMzUyNzcxNjMsMTMyLjE3MDQ3MzgyMTIyMjM3LDk2NC44MDQ1NTg5NTMzNjcyLDE0Ljk2MDU1NDE1MzIwNDcwMiwxOC4wNzM4NDM3NzMyNTM2MjUsMzQ3LjgzNDQ2MzY3MDM1NzEsMjUzLjI3NzUzMTAxNTEyNzc1LDQ5LjM2Njg1NzcxMTE5Mzk1LDM0Ljc3NzE1NzM3NTY3ODc5LDI2Ni42NTkyMTE4NTA4MTIyLDY3OC41MDE2NjY2MTI3MzEsMTI1LjI5NjI4MTcyMjE2Mjg5LDkuNzg4MzYwNDQwMTYwMDc1LDEzNC45OTg2MTMwNjQ0MzQ3Miw3Ny42MzcwNDA1MDA1MDkzLDI2LjMwMzg4NDI4MjAzMzA5NiwxNjUuNDg1NjQzMjE0ODM1MTQsNjMuMzI1NDE0NTQwNDg0NjUsODIuNjY2OTExMDgxMTc3OTcsODEuODkwODkzNDY3OTA0NzMsNzQuNjMzMTc4MzcyMzgxNzQsNS4wNDgxOTU3NzE2MjkyMQorMTUsVHVlIDggRmViIDExLDAuOTQ1MjE3NzY5MzgwMDIzMyw4NC44Mzc1MjY1MzE0MDAyNCw1MC4yNzIwODMwMjg4NTYzMyw0NS4wMDYyMTUwMDQ5NjA2LDIwNi45MTg1Mzc4Njg4MDEyLDQxLjMyMTEwMTc3NDEwNTczNSw2MTQuMzUzNjQ2NjM0Nzg0NSw4MzcwLjc3ODQ2MDYzNzk4NiwzMTQuNzkxMDgzMzI5NjUwODYsMjQzLjA2MTAyNDMzMzA1NDE4LDEzNy43NjE2MjcwMTE3NjYzLDExMC44MzUxNjc1Njk2MDQ5Miw1Mi4wMDM2MTQ2MTUyMDA3NSwxNS40ODM0NDgxNDMxNjMyLDIxNC40NDIzMDI1ODUyOTkyMiwxNjYuOTY0OTY0NTkyNzk1ODcsMzIuNjc1MjcwNDY0OTMyNzgsMTAwLjAyMTQ1NTYwNTcwMzg4LDg2LjIwNzU5NzY1MTk5MjU5LDYwMS41NDk1NjU3MzMxMzc1LDQyNi45MDU5ODkzNTQxMjIxNCwzNi4wMzAzOTczNjE1Njc4LDEwMi43NTg5MzAyMzQwNjMzOSw1Ni41ODU0OTUwNzI1NzIyNiw4MC4yNzA2NjA0NTEyNjkwOCw1OC43MzcyODc2Mjk4ODU0MSw2LjEzNTYxMTIyNTA2MTYxNTUsMTQ5LjU2NDAyNTQ2MjYxNSw5LjA4MzQ3ODE4Mjg5MTM1LDIyLjEyMjU2NjAzNTI3NzE2MywxMzIuMTcwNDczODIxMjIyMzcsOTY0LjgwNDU1ODk1MzM2NzIsMTQuOTYwNTU0MTUzMjA0NzAyLDE4LjA3Mzg0Mzc3MzI1MzYyNSwzNDcuODM0NDYzNjcwMzU3MSwyNTMuMjc3NTMxMDE1MTI3NzUsNDkuMzY2ODU3NzExMTkzOTUsMzQuNzc3MTU3Mzc1Njc4NzksMjY2LjY1OTIxMTg1MDgxMjIsNjc4LjUwMTY2NjYxMjczMSwxMjUuMjk2MjgxNzIyMTYyODksOS43ODgzNjA0NDAxNjAwNzUsMTM0Ljk5ODYxMzA2NDQzNDcyLDc3LjYzNzA0MDUwMDUwOTMsMjYuMzAzODg0MjgyMDMzMDk2LDE2NS40ODU2NDMyMTQ4MzUxNCw2My4zMjU0MTQ1NDA0ODQ2NSw4Mi42NjY5MTEwODExNzc5Nyw4MS44OTA4OTM0Njc5MDQ3Myw3NC42MzMxNzgzNzIzODE3NCw1LjA0ODE5NTc3MTYyOTIxCisxNixXZWQgOSBGZWIgMTEsMC45NDUyMTc3NjkzODAwMjMzLDg0LjgzNzUyNjUzMTQwMDI0LDUwLjI3MjA4MzAyODg1NjMzLDQ1LjAwNjIxNTAwNDk2MDYsMjA2LjkxODUzNzg2ODgwMTIsNDEuMzIxMTAxNzc0MTA1NzM1LDYxNC4zNTM2NDY2MzQ3ODQ1LDgzNzAuNzc4NDYwNjM3OTg2LDMxNC43OTEwODMzMjk2NTA4NiwyNDMuMDYxMDI0MzMzMDU0MTgsMTM3Ljc2MTYyNzAxMTc2NjMsMTEwLjgzNTE2NzU2OTYwNDkyLDUyLjAwMzYxNDYxNTIwMDc1LDE1LjQ4MzQ0ODE0MzE2MzIsMjE0LjQ0MjMwMjU4NTI5OTIyLDE2Ni45NjQ5NjQ1OTI3OTU4NywzMi42NzUyNzA0NjQ5MzI3OCwxMDAuMDIxNDU1NjA1NzAzODgsODYuMjA3NTk3NjUxOTkyNTksNjAxLjU0OTU2NTczMzEzNzUsNDI2LjkwNTk4OTM1NDEyMjE0LDM2LjAzMDM5NzM2MTU2NzgsMTAyLjc1ODkzMDIzNDA2MzM5LDU2LjU4NTQ5NTA3MjU3MjI2LDgwLjI3MDY2MDQ1MTI2OTA4LDU4LjczNzI4NzYyOTg4NTQxLDYuMTM1NjExMjI1MDYxNjE1NSwxNDkuNTY0MDI1NDYyNjE1LDkuMDgzNDc4MTgyODkxMzUsMjIuMTIyNTY2MDM1Mjc3MTYzLDEzMi4xNzA0NzM4MjEyMjIzNyw5NjQuODA0NTU4OTUzMzY3MiwxNC45NjA1NTQxNTMyMDQ3MDIsMTguMDczODQzNzczMjUzNjI1LDM0Ny44MzQ0NjM2NzAzNTcxLDI1My4yNzc1MzEwMTUxMjc3NSw0OS4zNjY4NTc3MTExOTM5NSwzNC43NzcxNTczNzU2Nzg3OSwyNjYuNjU5MjExODUwODEyMiw2NzguNTAxNjY2NjEyNzMxLDEyNS4yOTYyODE3MjIxNjI4OSw5Ljc4ODM2MDQ0MDE2MDA3NSwxMzQuOTk4NjEzMDY0NDM0NzIsNzcuNjM3MDQwNTAwNTA5MywyNi4zMDM4ODQyODIwMzMwOTYsMTY1LjQ4NTY0MzIxNDgzNTE0LDYzLjMyNTQxNDU0MDQ4NDY1LDgyLjY2NjkxMTA4MTE3Nzk3LDgxLjg5MDg5MzQ2NzkwNDczLDc0LjYzMzE3ODM3MjM4MTc0LDUuMDQ4MTk1NzcxNjI5MjEKKzE3LFRodSAxMCBGZWIgMTEsMC45NDUyMTc3NjkzODAwMjMzLDg0LjgzNzUyNjUzMTQwMDI0LDUwLjI3MjA4MzAyODg1NjMzLDQ1LjAwNjIxNTAwNDk2MDYsMjA2LjkxODUzNzg2ODgwMTIsNDEuMzIxMTAxNzc0MTA1NzM1LDYxNC4zNTM2NDY2MzQ3ODQ1LDgzNzAuNzc4NDYwNjM3OTg2LDMxNC43OTEwODMzMjk2NTA4NiwyNDMuMDYxMDI0MzMzMDU0MTgsMTM3Ljc2MTYyNzAxMTc2NjMsMTEwLjgzNTE2NzU2OTYwNDkyLDUyLjAwMzYxNDYxNTIwMDc1LDE1LjQ4MzQ0ODE0MzE2MzIsMjE0LjQ0MjMwMjU4NTI5OTIyLDE2Ni45NjQ5NjQ1OTI3OTU4NywzMi42NzUyNzA0NjQ5MzI3OCwxMDAuMDIxNDU1NjA1NzAzODgsODYuMjA3NTk3NjUxOTkyNTksNjAxLjU0OTU2NTczMzEzNzUsNDI2LjkwNTk4OTM1NDEyMjE0LDM2LjAzMDM5NzM2MTU2NzgsMTAyLjc1ODkzMDIzNDA2MzM5LDU2LjU4NTQ5NTA3MjU3MjI2LDgwLjI3MDY2MDQ1MTI2OTA4LDU4LjczNzI4NzYyOTg4NTQxLDYuMTM1NjExMjI1MDYxNjE1NSwxNDkuNTY0MDI1NDYyNjE1LDkuMDgzNDc4MTgyODkxMzUsMjIuMTIyNTY2MDM1Mjc3MTYzLDEzMi4xNzA0NzM4MjEyMjIzNyw5NjQuODA0NTU4OTUzMzY3MiwxNC45NjA1NTQxNTMyMDQ3MDIsMTguMDczODQzNzczMjUzNjI1LDM0Ny44MzQ0NjM2NzAzNTcxLDI1My4yNzc1MzEwMTUxMjc3NSw0OS4zNjY4NTc3MTExOTM5NSwzNC43NzcxNTczNzU2Nzg3OSwyNjYuNjU5MjExODUwODEyMiw2NzguNTAxNjY2NjEyNzMxLDEyNS4yOTYyODE3MjIxNjI4OSw5Ljc4ODM2MDQ0MDE2MDA3NSwxMzQuOTk4NjEzMDY0NDM0NzIsNzcuNjM3MDQwNTAwNTA5MywyNi4zMDM4ODQyODIwMzMwOTYsMTY1LjQ4NTY0MzIxNDgzNTE0LDYzLjMyNTQxNDU0MDQ4NDY1LDgyLjY2NjkxMTA4MTE3Nzk3LDgxLjg5MDg5MzQ2NzkwNDczLDc0LjYzMzE3ODM3MjM4MTc0LDUuMDQ4MTk1NzcxNjI5MjEKKzE4LEZyaSAxMSBGZWIgMTEsMC45NDUyMTc3NjkzODAwMjMzLDg0LjgzNzUyNjUzMTQwMDI0LDUwLjI3MjA4MzAyODg1NjMzLDQ1LjAwNjIxNTAwNDk2MDYsMjA2LjkxODUzNzg2ODgwMTIsNDEuMzIxMTAxNzc0MTA1NzM1LDYxNC4zNTM2NDY2MzQ3ODQ1LDgzNzAuNzc4NDYwNjM3OTg2LDMxNC43OTEwODMzMjk2NTA4NiwyNDMuMDYxMDI0MzMzMDU0MTgsMTM3Ljc2MTYyNzAxMTc2NjMsMTEwLjgzNTE2NzU2OTYwNDkyLDUyLjAwMzYxNDYxNTIwMDc1LDE1LjQ4MzQ0ODE0MzE2MzIsMjE0LjQ0MjMwMjU4NTI5OTIyLDE2Ni45NjQ5NjQ1OTI3OTU4NywzMi42NzUyNzA0NjQ5MzI3OCwxMDAuMDIxNDU1NjA1NzAzODgsODYuMjA3NTk3NjUxOTkyNTksNjAxLjU0OTU2NTczMzEzNzUsNDI2LjkwNTk4OTM1NDEyMjE0LDM2LjAzMDM5NzM2MTU2NzgsMTAyLjc1ODkzMDIzNDA2MzM5LDU2LjU4NTQ5NTA3MjU3MjI2LDgwLjI3MDY2MDQ1MTI2OTA4LDU4LjczNzI4NzYyOTg4NTQxLDYuMTM1NjExMjI1MDYxNjE1NSwxNDkuNTY0MDI1NDYyNjE1LDkuMDgzNDc4MTgyODkxMzUsMjIuMTIyNTY2MDM1Mjc3MTYzLDEzMi4xNzA0NzM4MjEyMjIzNyw5NjQuODA0NTU4OTUzMzY3MiwxNC45NjA1NTQxNTMyMDQ3MDIsMTguMDczODQzNzczMjUzNjI1LDM0Ny44MzQ0NjM2NzAzNTcxLDI1My4yNzc1MzEwMTUxMjc3NSw0OS4zNjY4NTc3MTExOTM5NSwzNC43NzcxNTczNzU2Nzg3OSwyNjYuNjU5MjExODUwODEyMiw2NzguNTAxNjY2NjEyNzMxLDEyNS4yOTYyODE3MjIxNjI4OSw5Ljc4ODM2MDQ0MDE2MDA3NSwxMzQuOTk4NjEzMDY0NDM0NzIsNzcuNjM3MDQwNTAwNTA5MywyNi4zMDM4ODQyODIwMzMwOTYsMTY1LjQ4NTY0MzIxNDgzNTE0LDYzLjMyNTQxNDU0MDQ4NDY1LDgyLjY2NjkxMTA4MTE3Nzk3LDgxLjg5MDg5MzQ2NzkwNDczLDc0LjYzMzE3ODM3MjM4MTc0LDUuMDQ4MTk1NzcxNjI5MjEKKzE5LFNhdCAxMiBGZWIgMTEsMC45NDUyMTc3NjkzODAwMjMzLDg0LjgzNzUyNjUzMTQwMDI0LDUwLjI3MjA4MzAyODg1NjMzLDQ1LjAwNjIxNTAwNDk2MDYsMjA2LjkxODUzNzg2ODgwMTIsNDEuMzIxMTAxNzc0MTA1NzM1LDYxNC4zNTM2NDY2MzQ3ODQ1LDgzNzAuNzc4NDYwNjM3OTg2LDMxNC43OTEwODMzMjk2NTA4NiwyNDMuMDYxMDI0MzMzMDU0MTgsMTM3Ljc2MTYyNzAxMTc2NjMsMTEwLjgzNTE2NzU2OTYwNDkyLDUyLjAwMzYxNDYxNTIwMDc1LDE1LjQ4MzQ0ODE0MzE2MzIsMjE0LjQ0MjMwMjU4NTI5OTIyLDE2Ni45NjQ5NjQ1OTI3OTU4NywzMi42NzUyNzA0NjQ5MzI3OCwxMDAuMDIxNDU1NjA1NzAzODgsODYuMjA3NTk3NjUxOTkyNTksNjAxLjU0OTU2NTczMzEzNzUsNDI2LjkwNTk4OTM1NDEyMjE0LDM2LjAzMDM5NzM2MTU2NzgsMTAyLjc1ODkzMDIzNDA2MzM5LDU2LjU4NTQ5NTA3MjU3MjI2LDgwLjI3MDY2MDQ1MTI2OTA4LDU4LjczNzI4NzYyOTg4NTQxLDYuMTM1NjExMjI1MDYxNjE1NSwxNDkuNTY0MDI1NDYyNjE1LDkuMDgzNDc4MTgyODkxMzUsMjIuMTIyNTY2MDM1Mjc3MTYzLDEzMi4xNzA0NzM4MjEyMjIzNyw5NjQuODA0NTU4OTUzMzY3MiwxNC45NjA1NTQxNTMyMDQ3MDIsMTguMDczODQzNzczMjUzNjI1LDM0Ny44MzQ0NjM2NzAzNTcxLDI1My4yNzc1MzEwMTUxMjc3NSw0OS4zNjY4NTc3MTExOTM5NSwzNC43NzcxNTczNzU2Nzg3OSwyNjYuNjU5MjExODUwODEyMiw2NzguNTAxNjY2NjEyNzMxLDEyNS4yOTYyODE3MjIxNjI4OSw5Ljc4ODM2MDQ0MDE2MDA3NSwxMzQuOTk4NjEzMDY0NDM0NzIsNzcuNjM3MDQwNTAwNTA5MywyNi4zMDM4ODQyODIwMzMwOTYsMTY1LjQ4NTY0MzIxNDgzNTE0LDYzLjMyNTQxNDU0MDQ4NDY1LDgyLjY2NjkxMTA4MTE3Nzk3LDgxLjg5MDg5MzQ2NzkwNDczLDc0LjYzMzE3ODM3MjM4MTc0LDUuMDQ4MTk1NzcxNjI5MjEKKzIwLFN1biAxMyBGZWIgMTEsMC45NDUyMTc3NjkzODAwMjMzLDg0LjgzNzUyNjUzMTQwMDI0LDUwLjI3MjA4MzAyODg1NjMzLDQ1LjAwNjIxNTAwNDk2MDYsMjA2LjkxODUzNzg2ODgwMTIsNDEuMzIxMTAxNzc0MTA1NzM1LDYxNC4zNTM2NDY2MzQ3ODQ1LDgzNzAuNzc4NDYwNjM3OTg2LDMxNC43OTEwODMzMjk2NTA4NiwyNDMuMDYxMDI0MzMzMDU0MTgsMTM3Ljc2MTYyNzAxMTc2NjMsMTEwLjgzNTE2NzU2OTYwNDkyLDUyLjAwMzYxNDYxNTIwMDc1LDE1LjQ4MzQ0ODE0MzE2MzIsMjE0LjQ0MjMwMjU4NTI5OTIyLDE2Ni45NjQ5NjQ1OTI3OTU4NywzMi42NzUyNzA0NjQ5MzI3OCwxMDAuMDIxNDU1NjA1NzAzODgsODYuMjA3NTk3NjUxOTkyNTksNjAxLjU0OTU2NTczMzEzNzUsNDI2LjkwNTk4OTM1NDEyMjE0LDM2LjAzMDM5NzM2MTU2NzgsMTAyLjc1ODkzMDIzNDA2MzM5LDU2LjU4NTQ5NTA3MjU3MjI2LDgwLjI3MDY2MDQ1MTI2OTA4LDU4LjczNzI4NzYyOTg4NTQxLDYuMTM1NjExMjI1MDYxNjE1NSwxNDkuNTY0MDI1NDYyNjE1LDkuMDgzNDc4MTgyODkxMzUsMjIuMTIyNTY2MDM1Mjc3MTYzLDEzMi4xNzA0NzM4MjEyMjIzNyw5NjQuODA0NTU4OTUzMzY3MiwxNC45NjA1NTQxNTMyMDQ3MDIsMTguMDczODQzNzczMjUzNjI1LDM0Ny44MzQ0NjM2NzAzNTcxLDI1My4yNzc1MzEwMTUxMjc3NSw0OS4zNjY4NTc3MTExOTM5NSwzNC43NzcxNTczNzU2Nzg3OSwyNjYuNjU5MjExODUwODEyMiw2NzguNTAxNjY2NjEyNzMxLDEyNS4yOTYyODE3MjIxNjI4OSw5Ljc4ODM2MDQ0MDE2MDA3NSwxMzQuOTk4NjEzMDY0NDM0NzIsNzcuNjM3MDQwNTAwNTA5MywyNi4zMDM4ODQyODIwMzMwOTYsMTY1LjQ4NTY0MzIxNDgzNTE0LDYzLjMyNTQxNDU0MDQ4NDY1LDgyLjY2NjkxMTA4MTE3Nzk3LDgxLjg5MDg5MzQ2NzkwNDczLDc0LjYzMzE3ODM3MjM4MTc0LDUuMDQ4MTk1NzcxNjI5MjEKKzIxLE1vbiAxNCBGZWIgMTEsMC45NDUyMTc3NjkzODAwMjMzLDg0LjgzNzUyNjUzMTQwMDI0LDUwLjI3MjA4MzAyODg1NjMzLDQ1LjAwNjIxNTAwNDk2MDYsMjA2LjkxODUzNzg2ODgwMTIsNDEuMzIxMTAxNzc0MTA1NzM1LDYxNC4zNTM2NDY2MzQ3ODQ1LDgzNzAuNzc4NDYwNjM3OTg2LDMxNC43OTEwODMzMjk2NTA4NiwyNDMuMDYxMDI0MzMzMDU0MTgsMTM3Ljc2MTYyNzAxMTc2NjMsMTEwLjgzNTE2NzU2OTYwNDkyLDUyLjAwMzYxNDYxNTIwMDc1LDE1LjQ4MzQ0ODE0MzE2MzIsMjE0LjQ0MjMwMjU4NTI5OTIyLDE2Ni45NjQ5NjQ1OTI3OTU4NywzMi42NzUyNzA0NjQ5MzI3OCwxMDAuMDIxNDU1NjA1NzAzODgsODYuMjA3NTk3NjUxOTkyNTksNjAxLjU0OTU2NTczMzEzNzUsNDI2LjkwNTk4OTM1NDEyMjE0LDM2LjAzMDM5NzM2MTU2NzgsMTAyLjc1ODkzMDIzNDA2MzM5LDU2LjU4NTQ5NTA3MjU3MjI2LDgwLjI3MDY2MDQ1MTI2OTA4LDU4LjczNzI4NzYyOTg4NTQxLDYuMTM1NjExMjI1MDYxNjE1NSwxNDkuNTY0MDI1NDYyNjE1LDkuMDgzNDc4MTgyODkxMzUsMjIuMTIyNTY2MDM1Mjc3MTYzLDEzMi4xNzA0NzM4MjEyMjIzNyw5NjQuODA0NTU4OTUzMzY3MiwxNC45NjA1NTQxNTMyMDQ3MDIsMTguMDczODQzNzczMjUzNjI1LDM0Ny44MzQ0NjM2NzAzNTcxLDI1My4yNzc1MzEwMTUxMjc3NSw0OS4zNjY4NTc3MTExOTM5NSwzNC43NzcxNTczNzU2Nzg3OSwyNjYuNjU5MjExODUwODEyMiw2NzguNTAxNjY2NjEyNzMxLDEyNS4yOTYyODE3MjIxNjI4OSw5Ljc4ODM2MDQ0MDE2MDA3NSwxMzQuOTk4NjEzMDY0NDM0NzIsNzcuNjM3MDQwNTAwNTA5MywyNi4zMDM4ODQyODIwMzMwOTYsMTY1LjQ4NTY0MzIxNDgzNTE0LDYzLjMyNTQxNDU0MDQ4NDY1LDgyLjY2NjkxMTA4MTE3Nzk3LDgxLjg5MDg5MzQ2NzkwNDczLDc0LjYzMzE3ODM3MjM4MTc0LDUuMDQ4MTk1NzcxNjI5MjEKKzIyLFR1ZSAxNSBGZWIgMTEsMC45NDUyMTc3NjkzODAwMjMzLDg0LjgzNzUyNjUzMTQwMDI0LDUwLjI3MjA4MzAyODg1NjMzLDQ1LjAwNjIxNTAwNDk2MDYsMjA2LjkxODUzNzg2ODgwMTIsNDEuMzIxMTAxNzc0MTA1NzM1LDYxNC4zNTM2NDY2MzQ3ODQ1LDgzNzAuNzc4NDYwNjM3OTg2LDMxNC43OTEwODMzMjk2NTA4NiwyNDMuMDYxMDI0MzMzMDU0MTgsMTM3Ljc2MTYyNzAxMTc2NjMsMTEwLjgzNTE2NzU2OTYwNDkyLDUyLjAwMzYxNDYxNTIwMDc1LDE1LjQ4MzQ0ODE0MzE2MzIsMjE0LjQ0MjMwMjU4NTI5OTIyLDE2Ni45NjQ5NjQ1OTI3OTU4NywzMi42NzUyNzA0NjQ5MzI3OCwxMDAuMDIxNDU1NjA1NzAzODgsODYuMjA3NTk3NjUxOTkyNTksNjAxLjU0OTU2NTczMzEzNzUsNDI2LjkwNTk4OTM1NDEyMjE0LDM2LjAzMDM5NzM2MTU2NzgsMTAyLjc1ODkzMDIzNDA2MzM5LDU2LjU4NTQ5NTA3MjU3MjI2LDgwLjI3MDY2MDQ1MTI2OTA4LDU4LjczNzI4NzYyOTg4NTQxLDYuMTM1NjExMjI1MDYxNjE1NSwxNDkuNTY0MDI1NDYyNjE1LDkuMDgzNDc4MTgyODkxMzUsMjIuMTIyNTY2MDM1Mjc3MTYzLDEzMi4xNzA0NzM4MjEyMjIzNyw5NjQuODA0NTU4OTUzMzY3MiwxNC45NjA1NTQxNTMyMDQ3MDIsMTguMDczODQzNzczMjUzNjI1LDM0Ny44MzQ0NjM2NzAzNTcxLDI1My4yNzc1MzEwMTUxMjc3NSw0OS4zNjY4NTc3MTExOTM5NSwzNC43NzcxNTczNzU2Nzg3OSwyNjYuNjU5MjExODUwODEyMiw2NzguNTAxNjY2NjEyNzMxLDEyNS4yOTYyODE3MjIxNjI4OSw5Ljc4ODM2MDQ0MDE2MDA3NSwxMzQuOTk4NjEzMDY0NDM0NzIsNzcuNjM3MDQwNTAwNTA5MywyNi4zMDM4ODQyODIwMzMwOTYsMTY1LjQ4NTY0MzIxNDgzNTE0LDYzLjMyNTQxNDU0MDQ4NDY1LDgyLjY2NjkxMTA4MTE3Nzk3LDgxLjg5MDg5MzQ2NzkwNDczLDc0LjYzMzE3ODM3MjM4MTc0LDUuMDQ4MTk1NzcxNjI5MjEKKzIzLFdlZCAxNiBGZWIgMTEsMC45NDUyMTc3NjkzODAwMjMzLDg0LjgzNzUyNjUzMTQwMDI0LDUwLjI3MjA4MzAyODg1NjMzLDQ1LjAwNjIxNTAwNDk2MDYsMjA2LjkxODUzNzg2ODgwMTIsNDEuMzIxMTAxNzc0MTA1NzM1LDYxNC4zNTM2NDY2MzQ3ODQ1LDgzNzAuNzc4NDYwNjM3OTg2LDMxNC43OTEwODMzMjk2NTA4NiwyNDMuMDYxMDI0MzMzMDU0MTgsMTM3Ljc2MTYyNzAxMTc2NjMsMTEwLjgzNTE2NzU2OTYwNDkyLDUyLjAwMzYxNDYxNTIwMDc1LDE1LjQ4MzQ0ODE0MzE2MzIsMjE0LjQ0MjMwMjU4NTI5OTIyLDE2Ni45NjQ5NjQ1OTI3OTU4NywzMi42NzUyNzA0NjQ5MzI3OCwxMDAuMDIxNDU1NjA1NzAzODgsODYuMjA3NTk3NjUxOTkyNTksNjAxLjU0OTU2NTczMzEzNzUsNDI2LjkwNTk4OTM1NDEyMjE0LDM2LjAzMDM5NzM2MTU2NzgsMTAyLjc1ODkzMDIzNDA2MzM5LDU2LjU4NTQ5NTA3MjU3MjI2LDgwLjI3MDY2MDQ1MTI2OTA4LDU4LjczNzI4NzYyOTg4NTQxLDYuMTM1NjExMjI1MDYxNjE1NSwxNDkuNTY0MDI1NDYyNjE1LDkuMDgzNDc4MTgyODkxMzUsMjIuMTIyNTY2MDM1Mjc3MTYzLDEzMi4xNzA0NzM4MjEyMjIzNyw5NjQuODA0NTU4OTUzMzY3MiwxNC45NjA1NTQxNTMyMDQ3MDIsMTguMDczODQzNzczMjUzNjI1LDM0Ny44MzQ0NjM2NzAzNTcxLDI1My4yNzc1MzEwMTUxMjc3NSw0OS4zNjY4NTc3MTExOTM5NSwzNC43NzcxNTczNzU2Nzg3OSwyNjYuNjU5MjExODUwODEyMiw2NzguNTAxNjY2NjEyNzMxLDEyNS4yOTYyODE3MjIxNjI4OSw5Ljc4ODM2MDQ0MDE2MDA3NSwxMzQuOTk4NjEzMDY0NDM0NzIsNzcuNjM3MDQwNTAwNTA5MywyNi4zMDM4ODQyODIwMzMwOTYsMTY1LjQ4NTY0MzIxNDgzNTE0LDYzLjMyNTQxNDU0MDQ4NDY1LDgyLjY2NjkxMTA4MTE3Nzk3LDgxLjg5MDg5MzQ2NzkwNDczLDc0LjYzMzE3ODM3MjM4MTc0LDUuMDQ4MTk1NzcxNjI5MjEKKzI0LFRodSAxNyBGZWIgMTEsMC45NDUyMTc3NjkzODAwMjMzLDg0LjgzNzUyNjUzMTQwMDI0LDUwLjI3MjA4MzAyODg1NjMzLDQ1LjAwNjIxNTAwNDk2MDYsMjA2LjkxODUzNzg2ODgwMTIsNDEuMzIxMTAxNzc0MTA1NzM1LDYxNC4zNTM2NDY2MzQ3ODQ1LDgzNzAuNzc4NDYwNjM3OTg2LDMxNC43OTEwODMzMjk2NTA4NiwyNDMuMDYxMDI0MzMzMDU0MTgsMTM3Ljc2MTYyNzAxMTc2NjMsMTEwLjgzNTE2NzU2OTYwNDkyLDUyLjAwMzYxNDYxNTIwMDc1LDE1LjQ4MzQ0ODE0MzE2MzIsMjE0LjQ0MjMwMjU4NTI5OTIyLDE2Ni45NjQ5NjQ1OTI3OTU4NywzMi42NzUyNzA0NjQ5MzI3OCwxMDAuMDIxNDU1NjA1NzAzODgsODYuMjA3NTk3NjUxOTkyNTksNjAxLjU0OTU2NTczMzEzNzUsNDI2LjkwNTk4OTM1NDEyMjE0LDM2LjAzMDM5NzM2MTU2NzgsMTAyLjc1ODkzMDIzNDA2MzM5LDU2LjU4NTQ5NTA3MjU3MjI2LDgwLjI3MDY2MDQ1MTI2OTA4LDU4LjczNzI4NzYyOTg4NTQxLDYuMTM1NjExMjI1MDYxNjE1NSwxNDkuNTY0MDI1NDYyNjE1LDkuMDgzNDc4MTgyODkxMzUsMjIuMTIyNTY2MDM1Mjc3MTYzLDEzMi4xNzA0NzM4MjEyMjIzNyw5NjQuODA0NTU4OTUzMzY3MiwxNC45NjA1NTQxNTMyMDQ3MDIsMTguMDczODQzNzczMjUzNjI1LDM0Ny44MzQ0NjM2NzAzNTcxLDI1My4yNzc1MzEwMTUxMjc3NSw0OS4zNjY4NTc3MTExOTM5NSwzNC43NzcxNTczNzU2Nzg3OSwyNjYuNjU5MjExODUwODEyMiw2NzguNTAxNjY2NjEyNzMxLDEyNS4yOTYyODE3MjIxNjI4OSw5Ljc4ODM2MDQ0MDE2MDA3NSwxMzQuOTk4NjEzMDY0NDM0NzIsNzcuNjM3MDQwNTAwNTA5MywyNi4zMDM4ODQyODIwMzMwOTYsMTY1LjQ4NTY0MzIxNDgzNTE0LDYzLjMyNTQxNDU0MDQ4NDY1LDgyLjY2NjkxMTA4MTE3Nzk3LDgxLjg5MDg5MzQ2NzkwNDczLDc0LjYzMzE3ODM3MjM4MTc0LDUuMDQ4MTk1NzcxNjI5MjEKKzI1LEZyaSAxOCBGZWIgMTEsMC45NDUyMTc3NjkzODAwMjMzLDg0LjgzNzUyNjUzMTQwMDI0LDUwLjI3MjA4MzAyODg1NjMzLDQ1LjAwNjIxNTAwNDk2MDYsMjA2LjkxODUzNzg2ODgwMTIsNDEuMzIxMTAxNzc0MTA1NzM1LDYxNC4zNTM2NDY2MzQ3ODQ1LDgzNzAuNzc4NDYwNjM3OTg2LDMxNC43OTEwODMzMjk2NTA4NiwyNDMuMDYxMDI0MzMzMDU0MTgsMTM3Ljc2MTYyNzAxMTc2NjMsMTEwLjgzNTE2NzU2OTYwNDkyLDUyLjAwMzYxNDYxNTIwMDc1LDE1LjQ4MzQ0ODE0MzE2MzIsMjE0LjQ0MjMwMjU4NTI5OTIyLDE2Ni45NjQ5NjQ1OTI3OTU4NywzMi42NzUyNzA0NjQ5MzI3OCwxMDAuMDIxNDU1NjA1NzAzODgsODYuMjA3NTk3NjUxOTkyNTksNjAxLjU0OTU2NTczMzEzNzUsNDI2LjkwNTk4OTM1NDEyMjE0LDM2LjAzMDM5NzM2MTU2NzgsMTAyLjc1ODkzMDIzNDA2MzM5LDU2LjU4NTQ5NTA3MjU3MjI2LDgwLjI3MDY2MDQ1MTI2OTA4LDU4LjczNzI4NzYyOTg4NTQxLDYuMTM1NjExMjI1MDYxNjE1NSwxNDkuNTY0MDI1NDYyNjE1LDkuMDgzNDc4MTgyODkxMzUsMjIuMTIyNTY2MDM1Mjc3MTYzLDEzMi4xNzA0NzM4MjEyMjIzNyw5NjQuODA0NTU4OTUzMzY3MiwxNC45NjA1NTQxNTMyMDQ3MDIsMTguMDczODQzNzczMjUzNjI1LDM0Ny44MzQ0NjM2NzAzNTcxLDI1My4yNzc1MzEwMTUxMjc3NSw0OS4zNjY4NTc3MTExOTM5NSwzNC43NzcxNTczNzU2Nzg3OSwyNjYuNjU5MjExODUwODEyMiw2NzguNTAxNjY2NjEyNzMxLDEyNS4yOTYyODE3MjIxNjI4OSw5Ljc4ODM2MDQ0MDE2MDA3NSwxMzQuOTk4NjEzMDY0NDM0NzIsNzcuNjM3MDQwNTAwNTA5MywyNi4zMDM4ODQyODIwMzMwOTYsMTY1LjQ4NTY0MzIxNDgzNTE0LDYzLjMyNTQxNDU0MDQ4NDY1LDgyLjY2NjkxMTA4MTE3Nzk3LDgxLjg5MDg5MzQ2NzkwNDczLDc0LjYzMzE3ODM3MjM4MTc0LDUuMDQ4MTk1NzcxNjI5MjEKKzI2LFNhdCAxOSBGZWIgMTEsMC45NDUyMTc3NjkzODAwMjMzLDg0LjgzNzUyNjUzMTQwMDI0LDUwLjI3MjA4MzAyODg1NjMzLDQ1LjAwNjIxNTAwNDk2MDYsMjA2LjkxODUzNzg2ODgwMTIsNDEuMzIxMTAxNzc0MTA1NzM1LDYxNC4zNTM2NDY2MzQ3ODQ1LDgzNzAuNzc4NDYwNjM3OTg2LDMxNC43OTEwODMzMjk2NTA4NiwyNDMuMDYxMDI0MzMzMDU0MTgsMTM3Ljc2MTYyNzAxMTc2NjMsMTEwLjgzNTE2NzU2OTYwNDkyLDUyLjAwMzYxNDYxNTIwMDc1LDE1LjQ4MzQ0ODE0MzE2MzIsMjE0LjQ0MjMwMjU4NTI5OTIyLDE2Ni45NjQ5NjQ1OTI3OTU4NywzMi42NzUyNzA0NjQ5MzI3OCwxMDAuMDIxNDU1NjA1NzAzODgsODYuMjA3NTk3NjUxOTkyNTksNjAxLjU0OTU2NTczMzEzNzUsNDI2LjkwNTk4OTM1NDEyMjE0LDM2LjAzMDM5NzM2MTU2NzgsMTAyLjc1ODkzMDIzNDA2MzM5LDU2LjU4NTQ5NTA3MjU3MjI2LDgwLjI3MDY2MDQ1MTI2OTA4LDU4LjczNzI4NzYyOTg4NTQxLDYuMTM1NjExMjI1MDYxNjE1NSwxNDkuNTY0MDI1NDYyNjE1LDkuMDgzNDc4MTgyODkxMzUsMjIuMTIyNTY2MDM1Mjc3MTYzLDEzMi4xNzA0NzM4MjEyMjIzNyw5NjQuODA0NTU4OTUzMzY3MiwxNC45NjA1NTQxNTMyMDQ3MDIsMTguMDczODQzNzczMjUzNjI1LDM0Ny44MzQ0NjM2NzAzNTcxLDI1My4yNzc1MzEwMTUxMjc3NSw0OS4zNjY4NTc3MTExOTM5NSwzNC43NzcxNTczNzU2Nzg3OSwyNjYuNjU5MjExODUwODEyMiw2NzguNTAxNjY2NjEyNzMxLDEyNS4yOTYyODE3MjIxNjI4OSw5Ljc4ODM2MDQ0MDE2MDA3NSwxMzQuOTk4NjEzMDY0NDM0NzIsNzcuNjM3MDQwNTAwNTA5MywyNi4zMDM4ODQyODIwMzMwOTYsMTY1LjQ4NTY0MzIxNDgzNTE0LDYzLjMyNTQxNDU0MDQ4NDY1LDgyLjY2NjkxMTA4MTE3Nzk3LDgxLjg5MDg5MzQ2NzkwNDczLDc0LjYzMzE3ODM3MjM4MTc0LDUuMDQ4MTk1NzcxNjI5MjEKKzI3LFN1biAyMCBGZWIgMTEsMC45NDUyMTc3NjkzODAwMjMzLDg0LjgzNzUyNjUzMTQwMDI0LDUwLjI3MjA4MzAyODg1NjMzLDQ1LjAwNjIxNTAwNDk2MDYsMjA2LjkxODUzNzg2ODgwMTIsNDEuMzIxMTAxNzc0MTA1NzM1LDYxNC4zNTM2NDY2MzQ3ODQ1LDgzNzAuNzc4NDYwNjM3OTg2LDMxNC43OTEwODMzMjk2NTA4NiwyNDMuMDYxMDI0MzMzMDU0MTgsMTM3Ljc2MTYyNzAxMTc2NjMsMTEwLjgzNTE2NzU2OTYwNDkyLDUyLjAwMzYxNDYxNTIwMDc1LDE1LjQ4MzQ0ODE0MzE2MzIsMjE0LjQ0MjMwMjU4NTI5OTIyLDE2Ni45NjQ5NjQ1OTI3OTU4NywzMi42NzUyNzA0NjQ5MzI3OCwxMDAuMDIxNDU1NjA1NzAzODgsODYuMjA3NTk3NjUxOTkyNTksNjAxLjU0OTU2NTczMzEzNzUsNDI2LjkwNTk4OTM1NDEyMjE0LDM2LjAzMDM5NzM2MTU2NzgsMTAyLjc1ODkzMDIzNDA2MzM5LDU2LjU4NTQ5NTA3MjU3MjI2LDgwLjI3MDY2MDQ1MTI2OTA4LDU4LjczNzI4NzYyOTg4NTQxLDYuMTM1NjExMjI1MDYxNjE1NSwxNDkuNTY0MDI1NDYyNjE1LDkuMDgzNDc4MTgyODkxMzUsMjIuMTIyNTY2MDM1Mjc3MTYzLDEzMi4xNzA0NzM4MjEyMjIzNyw5NjQuODA0NTU4OTUzMzY3MiwxNC45NjA1NTQxNTMyMDQ3MDIsMTguMDczODQzNzczMjUzNjI1LDM0Ny44MzQ0NjM2NzAzNTcxLDI1My4yNzc1MzEwMTUxMjc3NSw0OS4zNjY4NTc3MTExOTM5NSwzNC43NzcxNTczNzU2Nzg3OSwyNjYuNjU5MjExODUwODEyMiw2NzguNTAxNjY2NjEyNzMxLDEyNS4yOTYyODE3MjIxNjI4OSw5Ljc4ODM2MDQ0MDE2MDA3NSwxMzQuOTk4NjEzMDY0NDM0NzIsNzcuNjM3MDQwNTAwNTA5MywyNi4zMDM4ODQyODIwMzMwOTYsMTY1LjQ4NTY0MzIxNDgzNTE0LDYzLjMyNTQxNDU0MDQ4NDY1LDgyLjY2NjkxMTA4MTE3Nzk3LDgxLjg5MDg5MzQ2NzkwNDczLDc0LjYzMzE3ODM3MjM4MTc0LDUuMDQ4MTk1NzcxNjI5MjEKKzI4LE1vbiAyMSBGZWIgMTEsMC45NDUyMTc3NjkzODAwMjMzLDg0LjgzNzUyNjUzMTQwMDI0LDUwLjI3MjA4MzAyODg1NjMzLDQ1LjAwNjIxNTAwNDk2MDYsMjA2LjkxODUzNzg2ODgwMTIsNDEuMzIxMTAxNzc0MTA1NzM1LDYxNC4zNTM2NDY2MzQ3ODQ1LDgzNzAuNzc4NDYwNjM3OTg2LDMxNC43OTEwODMzMjk2NTA4NiwyNDMuMDYxMDI0MzMzMDU0MTgsMTM3Ljc2MTYyNzAxMTc2NjMsMTEwLjgzNTE2NzU2OTYwNDkyLDUyLjAwMzYxNDYxNTIwMDc1LDE1LjQ4MzQ0ODE0MzE2MzIsMjE0LjQ0MjMwMjU4NTI5OTIyLDE2Ni45NjQ5NjQ1OTI3OTU4NywzMi42NzUyNzA0NjQ5MzI3OCwxMDAuMDIxNDU1NjA1NzAzODgsODYuMjA3NTk3NjUxOTkyNTksNjAxLjU0OTU2NTczMzEzNzUsNDI2LjkwNTk4OTM1NDEyMjE0LDM2LjAzMDM5NzM2MTU2NzgsMTAyLjc1ODkzMDIzNDA2MzM5LDU2LjU4NTQ5NTA3MjU3MjI2LDgwLjI3MDY2MDQ1MTI2OTA4LDU4LjczNzI4NzYyOTg4NTQxLDYuMTM1NjExMjI1MDYxNjE1NSwxNDkuNTY0MDI1NDYyNjE1LDkuMDgzNDc4MTgyODkxMzUsMjIuMTIyNTY2MDM1Mjc3MTYzLDEzMi4xNzA0NzM4MjEyMjIzNyw5NjQuODA0NTU4OTUzMzY3MiwxNC45NjA1NTQxNTMyMDQ3MDIsMTguMDczODQzNzczMjUzNjI1LDM0Ny44MzQ0NjM2NzAzNTcxLDI1My4yNzc1MzEwMTUxMjc3NSw0OS4zNjY4NTc3MTExOTM5NSwzNC43NzcxNTczNzU2Nzg3OSwyNjYuNjU5MjExODUwODEyMiw2NzguNTAxNjY2NjEyNzMxLDEyNS4yOTYyODE3MjIxNjI4OSw5Ljc4ODM2MDQ0MDE2MDA3NSwxMzQuOTk4NjEzMDY0NDM0NzIsNzcuNjM3MDQwNTAwNTA5MywyNi4zMDM4ODQyODIwMzMwOTYsMTY1LjQ4NTY0MzIxNDgzNTE0LDYzLjMyNTQxNDU0MDQ4NDY1LDgyLjY2NjkxMTA4MTE3Nzk3LDgxLjg5MDg5MzQ2NzkwNDczLDc0LjYzMzE3ODM3MjM4MTc0LDUuMDQ4MTk1NzcxNjI5MjEKKzI5LFR1ZSAyMiBGZWIgMTEsMC45NDUyMTc3NjkzODAwMjMzLDg0LjgzNzUyNjUzMTQwMDI0LDUwLjI3MjA4MzAyODg1NjMzLDQ1LjAwNjIxNTAwNDk2MDYsMjA2LjkxODUzNzg2ODgwMTIsNDEuMzIxMTAxNzc0MTA1NzM1LDYxNC4zNTM2NDY2MzQ3ODQ1LDgzNzAuNzc4NDYwNjM3OTg2LDMxNC43OTEwODMzMjk2NTA4NiwyNDMuMDYxMDI0MzMzMDU0MTgsMTM3Ljc2MTYyNzAxMTc2NjMsMTEwLjgzNTE2NzU2OTYwNDkyLDUyLjAwMzYxNDYxNTIwMDc1LDE1LjQ4MzQ0ODE0MzE2MzIsMjE0LjQ0MjMwMjU4NTI5OTIyLDE2Ni45NjQ5NjQ1OTI3OTU4NywzMi42NzUyNzA0NjQ5MzI3OCwxMDAuMDIxNDU1NjA1NzAzODgsODYuMjA3NTk3NjUxOTkyNTksNjAxLjU0OTU2NTczMzEzNzUsNDI2LjkwNTk4OTM1NDEyMjE0LDM2LjAzMDM5NzM2MTU2NzgsMTAyLjc1ODkzMDIzNDA2MzM5LDU2LjU4NTQ5NTA3MjU3MjI2LDgwLjI3MDY2MDQ1MTI2OTA4LDU4LjczNzI4NzYyOTg4NTQxLDYuMTM1NjExMjI1MDYxNjE1NSwxNDkuNTY0MDI1NDYyNjE1LDkuMDgzNDc4MTgyODkxMzUsMjIuMTIyNTY2MDM1Mjc3MTYzLDEzMi4xNzA0NzM4MjEyMjIzNyw5NjQuODA0NTU4OTUzMzY3MiwxNC45NjA1NTQxNTMyMDQ3MDIsMTguMDczODQzNzczMjUzNjI1LDM0Ny44MzQ0NjM2NzAzNTcxLDI1My4yNzc1MzEwMTUxMjc3NSw0OS4zNjY4NTc3MTExOTM5NSwzNC43NzcxNTczNzU2Nzg3OSwyNjYuNjU5MjExODUwODEyMiw2NzguNTAxNjY2NjEyNzMxLDEyNS4yOTYyODE3MjIxNjI4OSw5Ljc4ODM2MDQ0MDE2MDA3NSwxMzQuOTk4NjEzMDY0NDM0NzIsNzcuNjM3MDQwNTAwNTA5MywyNi4zMDM4ODQyODIwMzMwOTYsMTY1LjQ4NTY0MzIxNDgzNTE0LDYzLjMyNTQxNDU0MDQ4NDY1LDgyLjY2NjkxMTA4MTE3Nzk3LDgxLjg5MDg5MzQ2NzkwNDczLDc0LjYzMzE3ODM3MjM4MTc0LDUuMDQ4MTk1NzcxNjI5MjEKKzMwLFdlZCAyMyBGZWIgMTEsMC45NDUyMTc3NjkzODAwMjMzLDg0LjgzNzUyNjUzMTQwMDI0LDUwLjI3MjA4MzAyODg1NjMzLDQ1LjAwNjIxNTAwNDk2MDYsMjA2LjkxODUzNzg2ODgwMTIsNDEuMzIxMTAxNzc0MTA1NzM1LDYxNC4zNTM2NDY2MzQ3ODQ1LDgzNzAuNzc4NDYwNjM3OTg2LDMxNC43OTEwODMzMjk2NTA4NiwyNDMuMDYxMDI0MzMzMDU0MTgsMTM3Ljc2MTYyNzAxMTc2NjMsMTEwLjgzNTE2NzU2OTYwNDkyLDUyLjAwMzYxNDYxNTIwMDc1LDE1LjQ4MzQ0ODE0MzE2MzIsMjE0LjQ0MjMwMjU4NTI5OTIyLDE2Ni45NjQ5NjQ1OTI3OTU4NywzMi42NzUyNzA0NjQ5MzI3OCwxMDAuMDIxNDU1NjA1NzAzODgsODYuMjA3NTk3NjUxOTkyNTksNjAxLjU0OTU2NTczMzEzNzUsNDI2LjkwNTk4OTM1NDEyMjE0LDM2LjAzMDM5NzM2MTU2NzgsMTAyLjc1ODkzMDIzNDA2MzM5LDU2LjU4NTQ5NTA3MjU3MjI2LDgwLjI3MDY2MDQ1MTI2OTA4LDU4LjczNzI4NzYyOTg4NTQxLDYuMTM1NjExMjI1MDYxNjE1NSwxNDkuNTY0MDI1NDYyNjE1LDkuMDgzNDc4MTgyODkxMzUsMjIuMTIyNTY2MDM1Mjc3MTYzLDEzMi4xNzA0NzM4MjEyMjIzNyw5NjQuODA0NTU4OTUzMzY3MiwxNC45NjA1NTQxNTMyMDQ3MDIsMTguMDczODQzNzczMjUzNjI1LDM0Ny44MzQ0NjM2NzAzNTcxLDI1My4yNzc1MzEwMTUxMjc3NSw0OS4zNjY4NTc3MTExOTM5NSwzNC43NzcxNTczNzU2Nzg3OSwyNjYuNjU5MjExODUwODEyMiw2NzguNTAxNjY2NjEyNzMxLDEyNS4yOTYyODE3MjIxNjI4OSw5Ljc4ODM2MDQ0MDE2MDA3NSwxMzQuOTk4NjEzMDY0NDM0NzIsNzcuNjM3MDQwNTAwNTA5MywyNi4zMDM4ODQyODIwMzMwOTYsMTY1LjQ4NTY0MzIxNDgzNTE0LDYzLjMyNTQxNDU0MDQ4NDY1LDgyLjY2NjkxMTA4MTE3Nzk3LDgxLjg5MDg5MzQ2NzkwNDczLDc0LjYzMzE3ODM3MjM4MTc0LDUuMDQ4MTk1NzcxNjI5MjEKKzMxLFRodSAyNCBGZWIgMTEsMC45NDUyMTc3NjkzODAwMjMzLDg0LjgzNzUyNjUzMTQwMDI0LDUwLjI3MjA4MzAyODg1NjMzLDQ1LjAwNjIxNTAwNDk2MDYsMjA2LjkxODUzNzg2ODgwMTIsNDEuMzIxMTAxNzc0MTA1NzM1LDYxNC4zNTM2NDY2MzQ3ODQ1LDgzNzAuNzc4NDYwNjM3OTg2LDMxNC43OTEwODMzMjk2NTA4NiwyNDMuMDYxMDI0MzMzMDU0MTgsMTM3Ljc2MTYyNzAxMTc2NjMsMTEwLjgzNTE2NzU2OTYwNDkyLDUyLjAwMzYxNDYxNTIwMDc1LDE1LjQ4MzQ0ODE0MzE2MzIsMjE0LjQ0MjMwMjU4NTI5OTIyLDE2Ni45NjQ5NjQ1OTI3OTU4NywzMi42NzUyNzA0NjQ5MzI3OCwxMDAuMDIxNDU1NjA1NzAzODgsODYuMjA3NTk3NjUxOTkyNTksNjAxLjU0OTU2NTczMzEzNzUsNDI2LjkwNTk4OTM1NDEyMjE0LDM2LjAzMDM5NzM2MTU2NzgsMTAyLjc1ODkzMDIzNDA2MzM5LDU2LjU4NTQ5NTA3MjU3MjI2LDgwLjI3MDY2MDQ1MTI2OTA4LDU4LjczNzI4NzYyOTg4NTQxLDYuMTM1NjExMjI1MDYxNjE1NSwxNDkuNTY0MDI1NDYyNjE1LDkuMDgzNDc4MTgyODkxMzUsMjIuMTIyNTY2MDM1Mjc3MTYzLDEzMi4xNzA0NzM4MjEyMjIzNyw5NjQuODA0NTU4OTUzMzY3MiwxNC45NjA1NTQxNTMyMDQ3MDIsMTguMDczODQzNzczMjUzNjI1LDM0Ny44MzQ0NjM2NzAzNTcxLDI1My4yNzc1MzEwMTUxMjc3NSw0OS4zNjY4NTc3MTExOTM5NSwzNC43NzcxNTczNzU2Nzg3OSwyNjYuNjU5MjExODUwODEyMiw2NzguNTAxNjY2NjEyNzMxLDEyNS4yOTYyODE3MjIxNjI4OSw5Ljc4ODM2MDQ0MDE2MDA3NSwxMzQuOTk4NjEzMDY0NDM0NzIsNzcuNjM3MDQwNTAwNTA5MywyNi4zMDM4ODQyODIwMzMwOTYsMTY1LjQ4NTY0MzIxNDgzNTE0LDYzLjMyNTQxNDU0MDQ4NDY1LDgyLjY2NjkxMTA4MTE3Nzk3LDgxLjg5MDg5MzQ2NzkwNDczLDc0LjYzMzE3ODM3MjM4MTc0LDUuMDQ4MTk1NzcxNjI5MjEKKzMyLEZyaSAyNSBGZWIgMTEsMC45NDUyMTc3NjkzODAwMjMzLDg0LjgzNzUyNjUzMTQwMDI0LDUwLjI3MjA4MzAyODg1NjMzLDQ1LjAwNjIxNTAwNDk2MDYsMjA2LjkxODUzNzg2ODgwMTIsNDEuMzIxMTAxNzc0MTA1NzM1LDYxNC4zNTM2NDY2MzQ3ODQ1LDgzNzAuNzc4NDYwNjM3OTg2LDMxNC43OTEwODMzMjk2NTA4NiwyNDMuMDYxMDI0MzMzMDU0MTgsMTM3Ljc2MTYyNzAxMTc2NjMsMTEwLjgzNTE2NzU2OTYwNDkyLDUyLjAwMzYxNDYxNTIwMDc1LDE1LjQ4MzQ0ODE0MzE2MzIsMjE0LjQ0MjMwMjU4NTI5OTIyLDE2Ni45NjQ5NjQ1OTI3OTU4NywzMi42NzUyNzA0NjQ5MzI3OCwxMDAuMDIxNDU1NjA1NzAzODgsODYuMjA3NTk3NjUxOTkyNTksNjAxLjU0OTU2NTczMzEzNzUsNDI2LjkwNTk4OTM1NDEyMjE0LDM2LjAzMDM5NzM2MTU2NzgsMTAyLjc1ODkzMDIzNDA2MzM5LDU2LjU4NTQ5NTA3MjU3MjI2LDgwLjI3MDY2MDQ1MTI2OTA4LDU4LjczNzI4NzYyOTg4NTQxLDYuMTM1NjExMjI1MDYxNjE1NSwxNDkuNTY0MDI1NDYyNjE1LDkuMDgzNDc4MTgyODkxMzUsMjIuMTIyNTY2MDM1Mjc3MTYzLDEzMi4xNzA0NzM4MjEyMjIzNyw5NjQuODA0NTU4OTUzMzY3MiwxNC45NjA1NTQxNTMyMDQ3MDIsMTguMDczODQzNzczMjUzNjI1LDM0Ny44MzQ0NjM2NzAzNTcxLDI1My4yNzc1MzEwMTUxMjc3NSw0OS4zNjY4NTc3MTExOTM5NSwzNC43NzcxNTczNzU2Nzg3OSwyNjYuNjU5MjExODUwODEyMiw2NzguNTAxNjY2NjEyNzMxLDEyNS4yOTYyODE3MjIxNjI4OSw5Ljc4ODM2MDQ0MDE2MDA3NSwxMzQuOTk4NjEzMDY0NDM0NzIsNzcuNjM3MDQwNTAwNTA5MywyNi4zMDM4ODQyODIwMzMwOTYsMTY1LjQ4NTY0MzIxNDgzNTE0LDYzLjMyNTQxNDU0MDQ4NDY1LDgyLjY2NjkxMTA4MTE3Nzk3LDgxLjg5MDg5MzQ2NzkwNDczLDc0LjYzMzE3ODM3MjM4MTc0LDUuMDQ4MTk1NzcxNjI5MjEKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0lSU3RhdGVzT25seV9SS19SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9odW1hbi9JbmNpZGVuY2VfMC5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNJUlN0YXRlc09ubHlfUktfUmVmZXJlbmNlL2F1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwvaHVtYW4vSW5jaWRlbmNlXzAuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjExMmU4YjgKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNJUlN0YXRlc09ubHlfUktfUmVmZXJlbmNlL2F1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwvaHVtYW4vSW5jaWRlbmNlXzAuY3N2CkBAIC0wLDAgKzEsMzMgQEAKK2l0ZXJhdGlvbix0aW1lLHN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL25vZGUvdHJhbnNwb3J0L3BpcGUvVVNBCisxLFR1ZSAyNSBKYW4gMTEsMC4wCisyLFdlZCAyNiBKYW4gMTEsMC4wCiszLFRodSAyNyBKYW4gMTEsMC4wCis0LEZyaSAyOCBKYW4gMTEsMC4wCis1LFNhdCAyOSBKYW4gMTEsMC4wCis2LFN1biAzMCBKYW4gMTEsMC4wCis3LE1vbiAzMSBKYW4gMTEsMC4wCis4LFR1ZSAxIEZlYiAxMSwwLjAKKzksV2VkIDIgRmViIDExLDAuMAorMTAsVGh1IDMgRmViIDExLDAuMAorMTEsRnJpIDQgRmViIDExLDAuMAorMTIsU2F0IDUgRmViIDExLDAuMAorMTMsU3VuIDYgRmViIDExLDAuMAorMTQsTW9uIDcgRmViIDExLDAuMAorMTUsVHVlIDggRmViIDExLDAuMAorMTYsV2VkIDkgRmViIDExLDAuMAorMTcsVGh1IDEwIEZlYiAxMSwwLjAKKzE4LEZyaSAxMSBGZWIgMTEsMC4wCisxOSxTYXQgMTIgRmViIDExLDAuMAorMjAsU3VuIDEzIEZlYiAxMSwwLjAKKzIxLE1vbiAxNCBGZWIgMTEsMC4wCisyMixUdWUgMTUgRmViIDExLDAuMAorMjMsV2VkIDE2IEZlYiAxMSwwLjAKKzI0LFRodSAxNyBGZWIgMTEsMC4wCisyNSxGcmkgMTggRmViIDExLDAuMAorMjYsU2F0IDE5IEZlYiAxMSwwLjAKKzI3LFN1biAyMCBGZWIgMTEsMC4wCisyOCxNb24gMjEgRmViIDExLDAuMAorMjksVHVlIDIyIEZlYiAxMSwwLjAKKzMwLFdlZCAyMyBGZWIgMTEsMC4wCiszMSxUaHUgMjQgRmViIDExLDAuMAorMzIsRnJpIDI1IEZlYiAxMSwwLjAKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0lSU3RhdGVzT25seV9SS19SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9odW1hbi9JbmNpZGVuY2VfMS5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNJUlN0YXRlc09ubHlfUktfUmVmZXJlbmNlL2F1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwvaHVtYW4vSW5jaWRlbmNlXzEuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ3YTg0M2YKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNJUlN0YXRlc09ubHlfUktfUmVmZXJlbmNlL2F1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwvaHVtYW4vSW5jaWRlbmNlXzEuY3N2CkBAIC0wLDAgKzEsMzMgQEAKK2l0ZXJhdGlvbix0aW1lLFVTLUFLLFVTLUFMLFVTLUFSLFVTLUFaLFVTLUNBLFVTLUNPLFVTLUNULFVTLURDLFVTLURFLFVTLUZMLFVTLUdBLFVTLUhJLFVTLUlBLFVTLUlELFVTLUlMLFVTLUlOLFVTLUtTLFVTLUtZLFVTLUxBLFVTLU1BLFVTLU1ELFVTLU1FLFVTLU1JLFVTLU1OLFVTLU1PLFVTLU1TLFVTLU1ULFVTLU5DLFVTLU5ELFVTLU5FLFVTLU5ILFVTLU5KLFVTLU5NLFVTLU5WLFVTLU5ZLFVTLU9ILFVTLU9LLFVTLU9SLFVTLVBBLFVTLVJJLFVTLVNDLFVTLVNELFVTLVROLFVTLVRYLFVTLVVULFVTLVZBLFVTLVZULFVTLVdBLFVTLVdJLFVTLVdWLFVTLVdZCisxLFR1ZSAyNSBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzIsV2VkIDI2IEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMyxUaHUgMjcgSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCis0LEZyaSAyOCBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzUsU2F0IDI5IEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorNixTdW4gMzAgSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCis3LE1vbiAzMSBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzgsVHVlIDEgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCis5LFdlZCAyIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTAsVGh1IDMgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxMSxGcmkgNCBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzEyLFNhdCA1IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTMsU3VuIDYgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxNCxNb24gNyBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzE1LFR1ZSA4IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTYsV2VkIDkgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxNyxUaHUgMTAgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxOCxGcmkgMTEgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxOSxTYXQgMTIgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyMCxTdW4gMTMgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyMSxNb24gMTQgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyMixUdWUgMTUgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyMyxXZWQgMTYgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyNCxUaHUgMTcgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyNSxGcmkgMTggRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyNixTYXQgMTkgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyNyxTdW4gMjAgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyOCxNb24gMjEgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyOSxUdWUgMjIgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCiszMCxXZWQgMjMgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCiszMSxUaHUgMjQgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCiszMixGcmkgMjUgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNJUlN0YXRlc09ubHlfUktfUmVmZXJlbmNlL2F1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwvcnVucGFyYW1ldGVycy5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNJUlN0YXRlc09ubHlfUktfUmVmZXJlbmNlL2F1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwvcnVucGFyYW1ldGVycy5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDY4NTViNQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0lSU3RhdGVzT25seV9SS19SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9ydW5wYXJhbWV0ZXJzLmNzdgpAQCAtMCwwICsxLDIgQEAKK3BvcHVsYXRpb25JZGVudGlmaWVyLG5hbWUsdGFyZ2V0SVNPS2V5LGJpcnRoUmF0ZSxkZWF0aFJhdGUsdGltZVBlcmlvZAoraHVtYW4sYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbCwsMC4wLDAuMCw4NjQwMDAwMApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0lTdGF0ZXNPbmx5X0ZEX1JlZmVyZW5jZS9UZXN0U0kvaHVtYW4vRGlzZWFzZSBEZWF0aHNfMC5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNJU3RhdGVzT25seV9GRF9SZWZlcmVuY2UvVGVzdFNJL2h1bWFuL0Rpc2Vhc2UgRGVhdGhzXzAuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjExMmU4YjgKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNJU3RhdGVzT25seV9GRF9SZWZlcmVuY2UvVGVzdFNJL2h1bWFuL0Rpc2Vhc2UgRGVhdGhzXzAuY3N2CkBAIC0wLDAgKzEsMzMgQEAKK2l0ZXJhdGlvbix0aW1lLHN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL25vZGUvdHJhbnNwb3J0L3BpcGUvVVNBCisxLFR1ZSAyNSBKYW4gMTEsMC4wCisyLFdlZCAyNiBKYW4gMTEsMC4wCiszLFRodSAyNyBKYW4gMTEsMC4wCis0LEZyaSAyOCBKYW4gMTEsMC4wCis1LFNhdCAyOSBKYW4gMTEsMC4wCis2LFN1biAzMCBKYW4gMTEsMC4wCis3LE1vbiAzMSBKYW4gMTEsMC4wCis4LFR1ZSAxIEZlYiAxMSwwLjAKKzksV2VkIDIgRmViIDExLDAuMAorMTAsVGh1IDMgRmViIDExLDAuMAorMTEsRnJpIDQgRmViIDExLDAuMAorMTIsU2F0IDUgRmViIDExLDAuMAorMTMsU3VuIDYgRmViIDExLDAuMAorMTQsTW9uIDcgRmViIDExLDAuMAorMTUsVHVlIDggRmViIDExLDAuMAorMTYsV2VkIDkgRmViIDExLDAuMAorMTcsVGh1IDEwIEZlYiAxMSwwLjAKKzE4LEZyaSAxMSBGZWIgMTEsMC4wCisxOSxTYXQgMTIgRmViIDExLDAuMAorMjAsU3VuIDEzIEZlYiAxMSwwLjAKKzIxLE1vbiAxNCBGZWIgMTEsMC4wCisyMixUdWUgMTUgRmViIDExLDAuMAorMjMsV2VkIDE2IEZlYiAxMSwwLjAKKzI0LFRodSAxNyBGZWIgMTEsMC4wCisyNSxGcmkgMTggRmViIDExLDAuMAorMjYsU2F0IDE5IEZlYiAxMSwwLjAKKzI3LFN1biAyMCBGZWIgMTEsMC4wCisyOCxNb24gMjEgRmViIDExLDAuMAorMjksVHVlIDIyIEZlYiAxMSwwLjAKKzMwLFdlZCAyMyBGZWIgMTEsMC4wCiszMSxUaHUgMjQgRmViIDExLDAuMAorMzIsRnJpIDI1IEZlYiAxMSwwLjAKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0lTdGF0ZXNPbmx5X0ZEX1JlZmVyZW5jZS9UZXN0U0kvaHVtYW4vRGlzZWFzZSBEZWF0aHNfMS5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNJU3RhdGVzT25seV9GRF9SZWZlcmVuY2UvVGVzdFNJL2h1bWFuL0Rpc2Vhc2UgRGVhdGhzXzEuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ3YTg0M2YKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNJU3RhdGVzT25seV9GRF9SZWZlcmVuY2UvVGVzdFNJL2h1bWFuL0Rpc2Vhc2UgRGVhdGhzXzEuY3N2CkBAIC0wLDAgKzEsMzMgQEAKK2l0ZXJhdGlvbix0aW1lLFVTLUFLLFVTLUFMLFVTLUFSLFVTLUFaLFVTLUNBLFVTLUNPLFVTLUNULFVTLURDLFVTLURFLFVTLUZMLFVTLUdBLFVTLUhJLFVTLUlBLFVTLUlELFVTLUlMLFVTLUlOLFVTLUtTLFVTLUtZLFVTLUxBLFVTLU1BLFVTLU1ELFVTLU1FLFVTLU1JLFVTLU1OLFVTLU1PLFVTLU1TLFVTLU1ULFVTLU5DLFVTLU5ELFVTLU5FLFVTLU5ILFVTLU5KLFVTLU5NLFVTLU5WLFVTLU5ZLFVTLU9ILFVTLU9LLFVTLU9SLFVTLVBBLFVTLVJJLFVTLVNDLFVTLVNELFVTLVROLFVTLVRYLFVTLVVULFVTLVZBLFVTLVZULFVTLVdBLFVTLVdJLFVTLVdWLFVTLVdZCisxLFR1ZSAyNSBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzIsV2VkIDI2IEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMyxUaHUgMjcgSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCis0LEZyaSAyOCBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzUsU2F0IDI5IEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorNixTdW4gMzAgSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCis3LE1vbiAzMSBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzgsVHVlIDEgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCis5LFdlZCAyIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTAsVGh1IDMgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxMSxGcmkgNCBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzEyLFNhdCA1IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTMsU3VuIDYgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxNCxNb24gNyBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzE1LFR1ZSA4IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTYsV2VkIDkgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxNyxUaHUgMTAgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxOCxGcmkgMTEgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxOSxTYXQgMTIgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyMCxTdW4gMTMgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyMSxNb24gMTQgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyMixUdWUgMTUgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyMyxXZWQgMTYgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyNCxUaHUgMTcgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyNSxGcmkgMTggRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyNixTYXQgMTkgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyNyxTdW4gMjAgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyOCxNb24gMjEgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyOSxUdWUgMjIgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCiszMCxXZWQgMjMgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCiszMSxUaHUgMjQgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCiszMixGcmkgMjUgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNJU3RhdGVzT25seV9GRF9SZWZlcmVuY2UvVGVzdFNJL2h1bWFuL0lfMC5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNJU3RhdGVzT25seV9GRF9SZWZlcmVuY2UvVGVzdFNJL2h1bWFuL0lfMC5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDhlMmM5MwotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0lTdGF0ZXNPbmx5X0ZEX1JlZmVyZW5jZS9UZXN0U0kvaHVtYW4vSV8wLmNzdgpAQCAtMCwwICsxLDMzIEBACitpdGVyYXRpb24sdGltZSxzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9ub2RlL3RyYW5zcG9ydC9waXBlL1VTQQorMSxUdWUgMjUgSmFuIDExLDAuMAorMixXZWQgMjYgSmFuIDExLDAuMDAzMTY3NTQ1OTA3NDIwODYxNQorMyxUaHUgMjcgSmFuIDExLDAuMTI3MzI1MzEwMDQ4MTcxNDQKKzQsRnJpIDI4IEphbiAxMSwzLjgzOTM1NjQ1NTQwNjQ1NjUKKzUsU2F0IDI5IEphbiAxMSwxMDIuOTI4OTcxMjYyOTQzMTEKKzYsU3VuIDMwIEphbiAxMSwyNTg3LjEzNTcyODE2ODA0MQorNyxNb24gMzEgSmFuIDExLDYyMjQ1LjA5NTUzMzQzNzQKKzgsVHVlIDEgRmViIDExLDk0MzIxMS4wMDAwMDAwMDA4Cis5LFdlZCAyIEZlYiAxMSwwLjAKKzEwLFRodSAzIEZlYiAxMSwxMzIwNjMuMDE2ODI0OTcwMTcKKzExLEZyaSA0IEZlYiAxMSw5NDMyMTEuMDAwMDAwMDAwOAorMTIsU2F0IDUgRmViIDExLDU0MTI2Ni41MDYzNDA4NjY3CisxMyxTdW4gNiBGZWIgMTEsOTQzMjExLjAwMDAwMDAwMTMKKzE0LE1vbiA3IEZlYiAxMSw1NDEzMjYuNzI3NTM3MDIzNQorMTUsVHVlIDggRmViIDExLDk0MzIxMS4wMDAwMDAwMDE2CisxNixXZWQgOSBGZWIgMTEsNTQxMzI2Ljc4OTE4NTc0NDYKKzE3LFRodSAxMCBGZWIgMTEsOTQzMjExLjAwMDAwMDAwMgorMTgsRnJpIDExIEZlYiAxMSw1NDEzMjYuNzg5MjQ4ODU0OQorMTksU2F0IDEyIEZlYiAxMSw5NDMyMTEuMDAwMDAwMDAyMworMjAsU3VuIDEzIEZlYiAxMSw1NDEzMjYuNzg5MjQ4OTE5NworMjEsTW9uIDE0IEZlYiAxMSw5NDMyMTEuMDAwMDAwMDAyOAorMjIsVHVlIDE1IEZlYiAxMSw1NDEzMjYuNzg5MjQ4OTIKKzIzLFdlZCAxNiBGZWIgMTEsOTQzMjExLjAwMDAwMDAwMzEKKzI0LFRodSAxNyBGZWIgMTEsNTQxMzI2Ljc4OTI0ODkyMDIKKzI1LEZyaSAxOCBGZWIgMTEsOTQzMjExLjAwMDAwMDAwMzUKKzI2LFNhdCAxOSBGZWIgMTEsNTQxMzI2Ljc4OTI0ODkyMDQKKzI3LFN1biAyMCBGZWIgMTEsOTQzMjExLjAwMDAwMDAwNAorMjgsTW9uIDIxIEZlYiAxMSw1NDEzMjYuNzg5MjQ4OTIwNworMjksVHVlIDIyIEZlYiAxMSw5NDMyMTEuMDAwMDAwMDA0MworMzAsV2VkIDIzIEZlYiAxMSw1NDEzMjYuNzg5MjQ4OTIwOQorMzEsVGh1IDI0IEZlYiAxMSw5NDMyMTEuMDAwMDAwMDA0NworMzIsRnJpIDI1IEZlYiAxMSw1NDEzMjYuNzg5MjQ4OTIxMQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTSVN0YXRlc09ubHlfRkRfUmVmZXJlbmNlL1Rlc3RTSS9odW1hbi9JXzEuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTSVN0YXRlc09ubHlfRkRfUmVmZXJlbmNlL1Rlc3RTSS9odW1hbi9JXzEuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM2ODE2OTYKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNJU3RhdGVzT25seV9GRF9SZWZlcmVuY2UvVGVzdFNJL2h1bWFuL0lfMS5jc3YKQEAgLTAsMCArMSwzMyBAQAoraXRlcmF0aW9uLHRpbWUsVVMtQUssVVMtQUwsVVMtQVIsVVMtQVosVVMtQ0EsVVMtQ08sVVMtQ1QsVVMtREMsVVMtREUsVVMtRkwsVVMtR0EsVVMtSEksVVMtSUEsVVMtSUQsVVMtSUwsVVMtSU4sVVMtS1MsVVMtS1ksVVMtTEEsVVMtTUEsVVMtTUQsVVMtTUUsVVMtTUksVVMtTU4sVVMtTU8sVVMtTVMsVVMtTVQsVVMtTkMsVVMtTkQsVVMtTkUsVVMtTkgsVVMtTkosVVMtTk0sVVMtTlYsVVMtTlksVVMtT0gsVVMtT0ssVVMtT1IsVVMtUEEsVVMtUkksVVMtU0MsVVMtU0QsVVMtVE4sVVMtVFgsVVMtVVQsVVMtVkEsVVMtVlQsVVMtV0EsVVMtV0ksVVMtV1YsVVMtV1kKKzEsVHVlIDI1IEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMS4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMixXZWQgMjYgSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwyMC41OTY4MzE4NjM2MjgyNSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzMsVGh1IDI3IEphbiAxMSwxLjIxOTcxOTMxMzY3OTgyMDNFLTUsMS4yMjQwODUwNDkxMDg3NDAyRS01LDguOTMyOTY2MzM5MTc0ODk1RS02LDEuMDU5MTk0NTgwMjE2NDUxOUUtNCw0MjQuMjI5NjA0Nzk1MzkxNjUsMS4xMDg2OTUzMDM0NjQzNjA5RS00LDEuNTgzMDgyODMxNjg2ODU5RS01LDQuMTI4MzA2NTg2NzQ3MjU0NkUtNSw0LjAyOTkwOTYyNjY5NTQ0MUUtOCwyLjkyNzc5NjUwODk1NDY4M0UtNCwxLjkyNDcxODQyMDI4OTk2NTJFLTQsNC41MjIyMzAyNTI3NTY3MzRFLTUsNy4zNTc5NDMzMjY3NDE0MjdFLTYsOS4wODc0NDYyMDgxOTgyMkUtNiwyLjE0NzM3MDkyNzE2NDg4ODRFLTQsMi4yNTAwMzI4NzQ5MDQ5NTQ3RS01LDMuNDc1Nzk3MDUzMDI0ODE4RS02LDEuMDkyMTA1NTA4ODM0NDY0N0UtNSwyLjA1NzI2ODg2NDQyODAyMjdFLTUsNi40NTUyNDM1NzAzNjE2NDhFLTUsNC43NjkwNjIyMTczOTE4M0UtNSw1LjM3MzIxMjgzNTU5MzkyMTRFLTYsOC44MjUxNjYyNTY2NjA3OTFFLTUsNy45Mzg5MjE5NjQ1OTAwMTlFLTUsNS44Njg1NTU4OTM4NzUyMzdFLTUsNS43NjYxMjkwMjQxOTY3MjdFLTYsNi4zNjM4OTg5NTIxNTY1NUUtNiw5LjQxNTIxMjE5MTE2OTQ1RS01LDMuMDM1ODY1MjUyMTEwNTY1NUUtNiwxLjA1NTgzNjMyMjE5NDIwNTZFLTUsOS4wNjM5Mzg0MDIwNDI0OTZFLTYsOC40MTI3NzIxNzE1Mjg5NTdFLTUsMS40NTUxMzMyMDEwMzkyNzg4RS01LDEuMTE0NTM4NjcyNDIzMDY5RS00LDEuODkyOTgyODgxOTc5NzM4NkUtNCw4LjU0NTA4NzUzNzYwNTQ1OEUtNSwxLjU4NjQ0MTA4OTcwOTEwNTRFLTUsMy40Nzg0ODM2NTk0NDI2MTQ1RS01LDkuNzAzMzUwNzI5NDc4MTczRS01LDEuMTk4NTYyMjg4MTM5NjY5MkUtNSwxLjQ0MjAzNTk5NDc1MjUxODZFLTUsMi45MzUxMTc1MTE0NDMxOEUtNiw1LjI1MTMwODA2OTM4NjM4NEUtNSwyLjY5MTY0MzgwNDgzMDMzRS00LDQuNzYyNjgxNTI3MTQ5NTYyRS01LDcuMTc2NTk3MzkzNTQwMTMxRS01LDMuMTM2NjEyOTkyNzc3OTUxOEUtNiw3LjMyNDAyNDkyMDcxNjczOUUtNSwyLjQ3MzAyMTIwNzU4MjEwMjVFLTUsMS42NDIxODgxNzI4NzgzOTIyRS02LDIuMTg5NTg0MjMwNTA0NTIzM0UtNgorNCxGcmkgMjggSmFuIDExLDcuNDE0ODAwMzc2MjM0NTMyRS00LDcuNDQxOTQ4OTUzMTg4NDc4RS00LDUuNDMwODcxNjM3NzQ0NDU0RS00LDAuMDA2NDM4OTE2MzQ0OTY4MDUxLDg3MzcuNjk0MzA4OTQzNTkyLDAuMDA2NzM5NjY1MjE3MTYzMTE1LDkuNjI0NDIyOTMyNjY2MzEyRS00LDAuMDAyNTA4OTkyNDc3OTgyMjkzOCwyLjQ1MDA1Njc2MDE1MzY5MTVFLTYsMC4wMTc3OTg0NzgxMTAxMDg4NzYsMC4wMTE3MDAzMzA3MTgzMzk4NTEsMC4wMDI3NDg4NzAwODMwMTYxNTYsNC40NzMzNDEzMzc1NzMzMzRFLTQsNS41MjQ2ODkzNDMxMDA3NDZFLTQsMC4wMTMwNTQyMjkyOTMxMDAyNywwLjAwMTM2NzkyMzkwOTUyNjk3LDIuMTEzMTYxMTA2NjIzNTQyRS00LDYuNjM5NTY3NjIxODQzMDg4RS00LDAuMDAxMjUwNzI2MDkwMzk2NjU2NSwwLjAwMzkyNDM4ODE0MTkwNjAzLDAuMDAyODk5MzEwODY1OTE1NzMyMywzLjI2NjY3NTczNzA5MTg0RS00LDAuMDA1MzY1MTg4MTMxODMyOTk1LDAuMDA0ODI2MjMxNTM3MzIxNjAxNSwwLjAwMzU2NzcxMjc2ODU0MjYzNSwzLjUwNTU4ODk2MDM3MTc3NTZFLTQsMy44Njg5MTUyNzIyMDc0NTFFLTQsMC4wMDU3MjM4MjI3ODQ0NDI0NzgsMS44NDU2NjcxNTYxOTM4OTI2RS00LDYuNDE4OTU2MzQ2MDY5NzFFLTQsNS41MTAzODk0MjQ4MTUzNjlFLTQsMC4wMDUxMTQ0NDg0ODM1MDIwMjMsOC44NDY0MDIyMzExNTc1NzFFLTQsMC4wMDY3NzQxOTA5NDA5ODM0MzcsMC4wMTE1MDgxNzM4OTE5NDQ0NywwLjAwNTE5NDk1MDk4MjAwNDkwMSw5LjY0NDg0MjAyMjI5MDc5OUUtNCwwLjAwMjExNDcwMjU1MTMwMTI3MywwLjAwNTg5OTEwMTUyNzk5NTc3NSw3LjI4NjQ3MDkzMjYzNTQ1OEUtNCw4Ljc2Njk2NzY0MjY0NzI4N0UtNCwxLjc4NDQyNDQ3MjA0OTU5NTdFLTQsMC4wMDMxOTI0ODQ2MDE3OTQ1NzYsMC4wMTYzNjMzMDY5NTQ2MjQ2MDYsMC4wMDI4OTUyNTcwMTc0MDA5NTgsMC4wMDQzNjI5MjcxODQ5NzM2NDEsMS45MDY5MTMyMDY2MTkzNzlFLTQsMC4wMDQ0NTI1MDQxMTM0OTA4NiwwLjAwMTUwMzQ4NDU5MDc4MzEzNjIsOS45ODM5Mzk0MDU1MzE5NzFFLTUsMS4zMzExNjg5Mjk5MzUyMDEzRS00Cis1LFNhdCAyOSBKYW4gMTEsMC4wMzAwNTQzMTEwNjU4MTAxNiwwLjAzMDE2NjgzOTUxMjgzMDI5NiwwLjAyMjAxNDYzMDU1NDMzMDcyNywwLjI2MDk4NjIwMTcwNTAwNDAzLDE3OTkyNC4xODIwODM2MDcyNCwwLjI3MzE2OTQyMzMwMTQ0MywwLjAzOTAxMzM5NjM4Mjk0NTIsMC4xMDE2NzAxOTUwNTI3MzE5MSw5LjkzMTczMzYzMTU1Nzc4OEUtNSwwLjcyMTQyNzM3NzM0MTM2NjEsMC40NzQyMzg0NDI1MzM2NTM1NSwwLjExMTQwOTc1Mjk5MzgwNTc2LDAuMDE4MTMzMjUxMDc3ODgyMTY2LDAuMDIyMzk0NTIzODE0NTUzMDMyLDAuNTI5MTMwOTgyNjgxMjExNywwLjA1NTQ1MDE4OTQ1NjEwOTA0LDAuMDA4NTY2MDE1NjcwNTU2NjI5LDAuMDI2OTE0Mjk2NTIwNjYyMTIyLDAuMDUwNjk5MjMwNDE2NDIyNzYsMC4xNTkwNzM5OTMyMTk5NjEzOCwwLjExNzUyMzQ0MjczOTM2NDE2LDAuMDEzMjQxNzY5MzMzMDc0ODk4LDAuMjE3NDc3ODA2NDU5MTQ5OCwwLjE5NTYyNDIwMDY4MDEyMjc2LDAuMTQ0NjE2MDI1Njk3MDA1NjgsMC4wMTQyMTAzNzk0MzYwMzQsMC4wMTU2ODI3ODI2MjM4MTM0OTMsMC4yMzIwMTE4Mjg5ODk3NTk5MiwwLjAwNzQ4MTU2MTk0NDczNjEwMSwwLjAyNjAxOTU3NjM1MTEyODM0NCwwLjAyMjMzNjUyNDIzNDQ5NTM3OCwwLjIwNzMxMjkzNDY1NTg3MzcsMC4wMzU4NTkwMzE3Mjc5OTA1NiwwLjI3NDUyODE0MzczOTUzMzUsMC40NjY0ODExMDI5MTc3MDIxLDAuMjEwNTc4NjUzMzg4NDIsMC4wMzkwOTYxNzY3MDEzNTE4MDYsMC4wODU3MTg4ODYwMjg4MTc5OCwwLjIzOTEyMTEzMjAxNTIxMDU0LDAuMDI5NTM1MzI0Nzc3OTY5MjQzLDAuMDM1NTM3ODE1MjI4MTI3NDM0LDAuMDA3MjMzMzM5NzAxMDY5MDY5LDAuMTI5NDA3MDgzMjk0MzU0OSwwLjY2MzI3MzE2NzMwNzM1NiwwLjExNzM1MTk4MDU5MTY4NjcsMC4xNzY4NTAwNzc2MjA4MjM0MSwwLjAwNzcyOTgxMTU4ODIzMzI4NCwwLjE4MDQ3OTAxNjEzODAwMzkzLDAuMDYwOTQ1MDA1OTEwNTA0MTIsMC4wMDQwNDcxNDczNTYwMzk2NTQsMC4wMDUzOTYwMDkzMzk5NjgxMDUKKzYsU3VuIDMwIEphbiAxMSwxLjAxNTI5MDc4OTM4OTc5MjcsMS4wMTkxNzY5Mjc0NjgyNzEsMC43NDM3NTUwMDE1NzY0ODYyLDguODE2NTQ5NDE0ODEyMjM1LDM2ODY3NjUuMDA5NjE2NTEwNSw5LjIyNzg4MzMxNDkxOTgwNiwxLjMxODA0MjU1NjExOTQ1MjIsMy40MzM3MDg0NDM2MTM5MDc2LDAuMDAzMzU1NDQ5MjMxMjc5NDkwMywyNC4zNzEzMDI3NTM0MTU0MjgsMTYuMDIwMzM3NDQwMjM5NTcsMy43NjMyOTQ5NDc2Nzc4ODQ3LDAuNjEyNjI2NzU1Nzk1NDYzLDAuNzU2NTc1NjcyMjE1NzYwMywxNy44NzUyMjU5MzgzNjQ5OSwxLjg3MzM1Nzg5OTg0NjQ5NzUsMC4yODk0MDIxNzQ1ODM4NTcwMywwLjkwOTI5MTA0MTc1MTIyNjIsMS43MTI4NDEzNDI2MzA4Mjk4LDUuMzc0MDY1MTU1MzQ4NzYxLDMuOTcwMzY4MDExMzU4MDM3NywwLjQ0NzM2NTY0Mzk2NzM5MDE1LDcuMzQ3MTkzMzc5NDEwMDE5LDYuNjA4NjYwMTY4NDY0MzE0LDQuODg1NjE3NjA0MzYyNjYxLDAuNDgwMDk0ODEyMTc1NDMwNywwLjUyOTgyNjQwMjQ4MTgwNyw3LjgzODA5NTc3MDMwOTMzMiwwLjI1Mjc1OTY2OTE4MzM1NDM1LDAuODc5MDQ4MDMwMzExODE5MywwLjc1NDYxNTA0Njc1MDkzLDcuMDAzNzQ3OTYxNjkwNDEyLDEuMjExNDU0MTY3MTM4NzI3Myw5LjI3MjM5NzY5MzU2OTA3LDE1Ljc1OTM0Njg0NTMzNjE4Miw3LjExNDE2Mjc0MDc5MjMwNSwxLjMyMDgzOTU3MTM2MzQxMiwyLjg5NTg3ODAxMjU2ODQ5MTgsOC4wNzg0MjMxOTQyMjc4NDksMC45OTc3OTgyOTc5NDIzNTY3LDEuMjAwNjI4NTc3MDMzNTg1LDAuMjQ0Mzc0NjYzNjA0NDk4NjQsNC4zNzE4MzU1NjAxODU5NjEsMjIuNDA3MzM3MDkxNzg2NzksMy45NjQzMzIyNzExNTc1MzM1LDUuOTc0NjAzMTEzOTYyMDM3LDAuMjYxMTQ2MDY4OTAwMDE1MSw2LjA5NzEzMTcxMjY3ODA5OCwyLjA1ODk4ODI5NDkzNjYsMC4xMzY3MzI4MjExNDQ0NTUyNiwwLjE4MjMwMDkwNjQ3ODcwNDM3Cis3LE1vbiAzMSBKYW4gMTEsMjMzLjgxNjE3MzMzMjUwNzMsMjM0Ljc1Mjc2ODgzMTU2ODcsMTcxLjMxMjIxMjA0MzMsMjAzMC4zNzk3MDY4NTYwNTA1LDIuNjYzNTgwODg3ODI4Nzg3RTcsMjEyNC45OTA3NzEwMzAxMTM2LDMwMy41ODYwNjA4ODY0NTIsNzkwLjMyMjgwNjgwNDAzMjIsMC43NzI5MDE3MTY4OTY3OTk0LDU2MTIuNjUxNjQ0NDI1NDYzLDM2ODkuMjQxMjcyMDA4ODMsODY2LjUwMjc2NDAzNjg1MDMsMTQxLjExMDEzMjE4ODM5OTM1LDE3NC4yNTg0MzY5NjQ1ODk3NSw0MTE2LjY2NTkzMzg4MTAzOCw0MzEuNDk2NzQ0Nzg3MzcyOCw2Ni42NjA2NjgyODY1Mjc3LDIwOS40NDIyNDU0NjUwMTMzLDM5NC41MjA2NDkzMDk3MzAxLDEyMzcuNzQxMjU2NjM0ODkzNyw5MTQuNDU2NTMyOTQwNTA2OSwxMDMuMDQyNjUxMzk3NjUxMDcsMTY5Mi4yMTAzNTQzMjYxMDMsMTUyMS45OTM1ODc4MjY5OTQsMTEyNS4yMzkzOTcxMDA5MDMsMTEwLjU4Mzc5NzUyMDQ3ODI0LDEyMi4wMzIzMjc5Nzg5NDkyOCwxODA1LjIyMTMwMjM5NTY5NzYsNTguMjE4MzM4ODI2MjA5ODEsMjAyLjQ2ODc0MDgwMTAwMzYzLDE3My44MDYyODA0Mzg5MDY5NSwxNjEzLjA4ODYyNDE4NDU2ODMsMjc5LjAyNTUyMDA4MzQ5NDcsMjEzNC41NjE1OTk5MzI3MzUsMzYyOS42NjA3NzQxMjE5Njg2LDE2MzguNTYyMTM0ODkyMDMyMiwzMDQuMjMwNDY1MDI4NzE3Nyw2NjYuOTcxMzg5MzY0MDA0NSwxODYwLjY0NzAyMTU3Njk2NTIsMjI5LjgwNzMyMDY0NzEyMzM2LDI3Ni41NDUwNzgwNDIyOTk1Niw1Ni4yODc1MTUyNDQ0MTk3OSwxMDA2LjkyMDI2MTAxOTIzNjksNTE2MC42NTE2NDE5MTgyNDksOTEyLjk0NjkwMDU2MTYxNjgsMTM3Ni4wNTYwNzY3Nzk0Mjc3LDYwLjE0OTcxMzc4OTMxOTk4LDE0MDQuMjQyNDUyODQxNTY1LDQ3NC4yNDkwMjQ5MjE3OTA0LDMxLjQ5NTA1ODcyNTE5MzY3LDQxLjk4OTY0NTc0Mjc2OTE4Cis4LFR1ZSAxIEZlYiAxMSw2MTM5NTAuNzY4MzQyMjEzLDQzNDAzNDQuNTY4MDIyMDI3LDI2MDE0NjAuMjQ3MTIyNTgsNTAyNDc0Ny4zNTIwNzg0OTEsMy4zMTkzMjMyNTc0MzI5MzM1RTcsNDIxNDI2NC45MDI2MDczOTEsMzMyNjEzNC41OTkzODY4ODc2LDU2MDU2OC42OTQ1NDkzOTk5LDExMDA2OC4xMjA0MjAxMDAzMSwxLjU2NTA4OTc3MTYwMzI4MjJFNyw4MDE5MzU5LjU3Mjg2MTAwNywxMTg3NjAxLjE0NTkxMjQ4NTcsMjg2NDk3NC4yNDU3MDEyNjQsMTI3MDYxMi4yOTc1ODIwMjEsMS4yMTYxODAzMDMxNjExNjE0RTcsNTkxODY4Mi43NDc4NTM0MTksMjY4Mzc4Ni4yNTc2MTAwMTUsMzk0NjkyMi42NTYwOTY5Mjc0LDQzNjM5NjguNDU2OTkwNDE0LDYyMzA3OTQuODQzMTExNTkzLDUyMDA4OTUuNzcyMDA2NCwxMjQzMDUwLjc2NDQzNjQ1Nyw5NzU5NTc5LjU0MzM3OTQ3OCw0ODE3ODE5Ljk4MjczMjI2MSw1NDg5OTcwLjkwMzAxMTY1MywyODEzODg3LjA3MjE1NjM3OCw4ODU5MzguODc1MzM2ODI1Niw3ODkyODQxLjYzMDI4NzAzNCw2Mjc0MTMuOTM4NTgzNjEyMSwxNjc4NzI5LjcxNzk0NTcyMjksMTIxMzY5My43MTUyNTEwMDksODI1ODM0MC40MTE5MDc2NiwxNzg2NzAyLjUwNzg2MDU0NjIsMTk1ODQyMC43ODYwNzE2NTE4LDEuODYyNDg0OTQ3OTEzMTc0RTcsMS4xMTUwODQ4MTYxMzk2MzQ3RTcsMzM2OTQ5NC45MTU2NzA4ODg1LDMzNTc2NDkuMDA5ODM5MjU5NiwxLjIwNjI3MzEwODQzMjI1NjRFNywxMDI4MDc2LjcyMDY4MjE4MjIsMzkwNDQ4My45Mzg5ODkxMTYsNzM1MTI1LjM0MzgxMTcxNjEsNTU4NjAzMi43NDYzODA3MDIsMi4wNDM1NzEzOTk2NzQxOTY1RTcsMjE4NzE5MC40NTEzNjk2OTYzLDY5NDY3MzMuMzA4NTY0ODA2LDU5NTcyNC4xNjQ3NDkxNTIxLDU3Nzc2MTQuMzI2MDA3Nzc5LDUyMzc3OTQuMzk4NTcyNzA0LDE3MzgwMTkuMTQwMTQyNDU1Nyw0ODE4NTUuMjE2MTAwNzgzODQKKzksV2VkIDIgRmViIDExLDYxNDUxOS4zMDE3OTM5MjUzLDQzNjI5NzkuMzIwOTU4MTcsMjYyNDc1MS4zMTk5MTYwOTUsNTAyODk1MS45NjgzMjM3NzY1LDMuMzE5NDUwMzQyMTEwMjM0RTcsNDIxNTUxNi4xOTU3Njk3MDUsMzM0MDU0Ni4yNTAwOTY2MzU0LDU2MDYzMy4wNDMxOTA0ODExLDc3NTYwMi43NTMxOTg3NDQ0LDEuNTY2NjA5Mzk3NDA4NzEwNkU3LDgwMjM2ODguNDQwMzIzNjY3LDExODcyMjEuOTUyMjgyMTM2OCwyODY4NTkyLjA0MjkxNzY4ODQsMTI2NzMzMS4zMTEyNzc1MzIzLDEuMjE3MzQ5NDE0MjY4NzU5NkU3LDU5Njk0MDIuNzc4OTI5ODYxLDI2MTY4ODYuNjYyODI2Mjc1LDM5NjQ3NTEuOTE5MjAwMzk1Nyw0MzgzODU2Ljc1NzkxMTUxOCw2MjE5NTkzLjA5OTA0NzgwOCw1MTg3NTI5Ljg0NDUxNDYyOSwxMjUxMTI4LjgxNjk0NDI4ODYsOTczMzg0NS4zMjQxNDMwOSw0ODIyMDE4Ljk1MzQ1NTA0NCw1NDgxMzc0Ljg2NTQzNjE0LDI3NzkzODEuOTk0NTU3MjE3Nyw4ODM2MjcuOTIyNjcwMTYyNiw3ODg3MDI5LjEzMjQ5ODUyOSw2Mjk4ODguNjU3OTc4NjMxOCwxNjc2NTQ5LjE2MDU3MzY4MDIsMTIxMDMwMS4wNjcwNzEwNDM0LDgyNDI0OTEuNTMzNzI4NjgxLDE3ODE0NzkuNTI4MzQxNDQ1LDE5NTgyNTYuODUwNTY2Nzc3NCwxLjg1ODg4MDQyNjU4OTg2OUU3LDEuMTExODgwODExMTMxODM2MUU3LDMzODQ5NTEuMDAzOTg5ODU0NCwzMzUxNjExLjc5OTkwOTA4NjQsMS4yMDI3NDE2OTg2MDQ3MTg0RTcsMTAyNzE0NC4xMTA5MzAyLDM5Mzg5MDEuNTc2ODI0OTE3LDc0MDk2NS4yNjcwODEzMzc3LDU1NzI0MTcuNDAzODEyMjI3LDIuMDQzNDUyMzI4NDExNTUyRTcsMjE4ODg4MC45MTA5NzIwMjU3LDY5MzQxMDEuMjU5MTk3MTk5LDU5NjkwOS41MzE1ODUxMDc3LDU3NzU4NDUuNzE4ODM1NDk1LDUyNjE0NzUuNzE1NjYxMTA4LDE3Nzk4NTEuMDM1Mzc5MzU2NSw0ODQ0NjAuODAxMzg5OTMxCisxMCxUaHUgMyBGZWIgMTEsNjE0MjI5LjQzNjc1NTY1OCw0MzUxOTcyLjEwMjU2MDA2MiwyNjEzNzg0LjM0OTU0OTgwNDMsNTAyNjgwNC4zMzQyNjgyMjUsMy4zMTkzODI3Nzk5Mzk3MDE4RTcsNDIxNDg2Ni42NjkxNTg1OSwzMzMzNDc3LjgxNzQ5MzI0Myw1NjA1OTYuMjAwMjcxMTMzOSw3NTg5MTUuNDM5OTIzMDExMywxLjU2NTgzNTU0Nzk0NjY5MTNFNyw4MDIxNDYyLjY2NzQxODYyOSwxMTg3NDE0Ljc5NTI4MjA5MzgsMjg2Njc3MS40NTg1OTA2MjEsMTI2OTAzOS42Njk2OTE1Nzc2LDEuMjE2NzU0MzUyODA3MTUzRTcsNTk0NTQzNi42MjA0MzA5NzE1LDI2NTg0OTIuNTQ2MDMyMTkxNywzOTU2MDI5LjE1ODQ0MjYzNTYsNDM3NDEyMS40MjQ0MzI5MDksNjIyNTM5Mi4xNDc4ODg5MjIsNTE5NDQ5My42NjUyODU4MTEsMTI0NzI0MS40NDk0NDkwMTksOTc0NzI2MC4zNjU3MDczMzIsNDgxOTg4MC45NzgzNTAyMzMsNTQ4NTgxNi4wODM1OTQxNCwyNzk4ODI0LjU2NTQxNTM0MTQsODg0ODMxLjQ4NzE4MTQzMjksNzg5MDAwOC40Mjg4MzAzMDQsNjI4NjcwLjc0MTc1OTU5ODQsMTY3NzY3MS40NDM0NzE2NjM2LDEyMTIwNzEuMDMwNjQwMDkzMSw4MjUwNzA0LjgwNTEzMDIyNywxNzg0MjA4LjA4MzA3MzQzLDE5NTgzMzMuNzA4MzIwNzM4LDEuODYwNzQ4NjMxNTgyMzA2N0U3LDEuMTEzNTUzNjA1OTM2MjA2OUU3LDMzNzczODcuMjExODM3MDk3NSwzMzU0NzM3LjIxOTI3MjUzNTMsMS4yMDQ1ODY1NTQwNDIyODg1RTcsMTAyNzYyMy4wMTc2NDM1MjI2LDM5MjI2NzQuMTE5MDczNjIyLDczODE5MC40ODcwMzUzMzM5LDU1Nzk1MDMuNTcxMDU5MjY0LDIuMDQzNTExMTQ1NzUzMzA1RTcsMjE4ODAxNi4zNTEwMTAzODUsNjk0MDY0MS45MTE5ODA5MTgsNTk2MzE2LjAwODkwNzU5ODYsNTc3Njc0NS44MTc3MzY5MzMsNTI0OTg4MC4wMTg4NjExMTMsMTc2MjYwOC41ODQ2NjQxNTc4LDQ4MzE5NC44NDkxODExMTgzNgorMTEsRnJpIDQgRmViIDExLDYxNDUyNC43MzQ0NDUwNzQ5LDQzNjMwMTQuODUxNjczNzY0LDI2MjQ3MTAuMjM0MTEwMDY5NSw1MDI4OTk0LjM1MDU4MjM0MiwzLjMxOTQ1NDAwMTI1MTUwM0U3LDQyMTU1MzYuMjY1MzAxOTgsMzM0MDU4NC45NDI2MDIxNzQsNTYwNjM3LjE1Mjk2Njg3MjMsNzc0MTkxLjUzOTE3NDk3NTUsMS41NjY2MjMzODMyNDE2ODIzRTcsODAyMzc0MS4yNjUzMjQ0MzEsMTE4NzIyMC44ODc3Nzk5NDEzLDI4Njg2MTIuNjUxOTYzMjc3NywxMjY3Mjk3LjM3NTkyNTQ1MTUsMS4yMTczNTk5NjE5OTQ1ODk1RTcsNTk2OTMzMi4wODM3MDg4MTcsMjYxMzkwMC43NDcyNjE3MTQsMzk2NDc5MS45OTUzODk5NDMsNDM4MzkwNS41NDA2Mzk5MzYsNjIxOTQ4NS44NTU2NDMyMTcsNTE4NzM4OS4xNjEyNDkzMzgsMTI1MTEzMy4wODE3NDg1MjE3LDk3MzM1NzIuNDkzOTY1MjgzLDQ4MjIwNTYuODM2OTA2MTQyLDU0ODEyOTUuMjg4MDQ2NTk5LDI3Nzg1ODIuNDEwOTAyOTQzLDg4MzYwMy45MzQxNzY5OTUyLDc4ODY5ODQuMTcwMDk4MjAyLDYyOTg5Ni4zMDgzNzE5MjI2LDE2NzY1MzAuNTM4NDYzOTIsMTIxMDI2NC45Mjc3NDAxMjgsODI0MjMzNy4yODk3NDk3MiwxNzgxNDIyLjY1OTE1ODEzOSwxOTU4MjYyLjkzMTA5NzM5MzQsMS44NTg4NDUyNzE2NzcxNDg3RTcsMS4xMTE4NDYyOTE5MTc2OTgzRTcsMzM4NDk4OC40NDM4MjYyMDIzLDMzNTE1NTMuOTk4ODQ1OTU1NCwxLjIwMjcwMzI2NDIzMDU4NDRFNywxMDI3MTM2LjUxMDIzNjQ0NDEsMzkzODg0NS45MDg0ODI0OTk0LDc0MDk2MC40NTE3NzA0NDU4LDU1NzIyNzYuMjAwMTU0MjY3LDIuMDQzNDUzMzI2MTc4ODc4RTcsMjE4ODg5OC41ODk2MDI1NTQ3LDY5MzM5NzkuOTc4NzQ1MzE3LDU5NjkxNS43ODA2MzQxNDMzLDU3NzU4MzYuMDUzNzE5MjgyLDUyNjE1MzQuNjgzMDc3NzczLDE3NzkzNTUuODIwMTYzNjksNDg0NDY0Ljk1MjEzNjI2ODEKKzEyLFNhdCA1IEZlYiAxMSw2MTQwNTEuNDk1NDI1NzY2Niw0MzQ1NjY4Ljk0MDgzNTkyNywyNjA3NjQwLjQ5OTk2NjEzMDYsNTAyNTQ3Ny44NzY5Nzc5MDksMy4zMTkzMjk0Mzk5Nzk4NTk0RTcsNDIxNDQzMy4yNDYwNzQ4NDksMzMyOTM5Ni44NTMyOTc4ODk3LDU2MDU1Ny41MzQ4MTY3NjQsNzUxOTQ4LjQ4Nzk5ODYyNjgsMS41NjUzNjI0MDk4MzMxNzg1RTcsODAyMDA1MS4xMDUyODI2NywxMTg3NTE2Ljk0OTkzNDU2MSwyODY1NzAxLjYyODk2OTIxNywxMjcwMDY3LjI5NDc3NjU0NTEsMS4yMTYzOTEyOTExNjg4Mzc4RTcsNTkzMTk3My41NDI3ODI2NDEsMjY4Njc3NC41MTgxMTQzODI0LDM5NTEwMTIuNzMxODE0Mzk5LDQzNjg1MDkuMTUxNTA2MjcyLDYyMjg4NjMuMjk3NDk1MjQsNTE5ODY4Ny43Mjk4NDk1ODcsMTI0NTAyOC42NDIwMzQ3MTEzLDk3NTUzNDMuMzYyNjI5OTQ2LDQ4MTg1NzYuNjYxMzE1MDE0LDU0ODg0NjguMTg2NzkyNDc1LDI4MTEyMDcuODIyNjM4MTY2LDg4NTU1NS42MjMyNTYxNzgzLDc4OTE3NjAuNzY3ODkxODE1LDYyNzk2NS43MzAyNDA5Mjk5LDE2NzgzMzguNzk5OTU1MTgwNCwxMjEzMTM3LjY0MTIxMjE0MTQsODI1NTYyNi41MjExMjkwOCwxNzg1ODU0LjY5OTI2Mjk5MTUsMTk1ODM0MS4wNTczMzc2MzY4LDEuODYxODY4Mjk0MjI3Nzc0NEU3LDEuMTE0NTYyMzgwODUxMzIxM0U3LDMzNzMwMjcuNjYxMjE4NDY4NiwzMzU2NjA4LjAxMjgzNTcxODcsMS4yMDU2OTk4MzU0ODQwMDVFNywxMDI3OTA2LjA2MjU4NDIyOTQsMzkxMzU3Mi44Njk3MDg1NTA2LDczNjYyNS41MDEyMzYwMjQ1LDU1ODM3NjcuMzk1OTMyNjQ2LDIuMDQzNTM2NTQzOTc1ODQzNUU3LDIxODc0NzkuOTUxODkzODQ3NCw2OTQ0NTU3LjcyNjQ3NDgyNSw1OTU5NjcuNTEzNzY1ODczNSw1Nzc3MjU3Ljk1OTEzMTU2NSw1MjQzMTkzLjY2Mzc5NTgyNCwxNzUzNzM1Ljg0MzA0MjkzOTcsNDgyNDY5LjEyNDMxNzc5MjEKKzEzLFN1biA2IEZlYiAxMSw2MTQxODguMjY0NDAzMDYwNSw0MzUwODU3LjgwNDAzMTU3MSwyNjEyNzQxLjU4NzM5OTg3ODUsNTAyNjQ4OC4zNjI1NDM4MjUsMy4zMTkzNTQwNjk1NDE5NjEzRTcsNDIxNDcyMi4zNTQ0MTM2MzksMzMzMjczOS41MzMwNTk0MDMzLDU2MDU2Ni4xNjcxOTg2ODgsNzU4NjUwLjkxODM1MTA4NzEsMS41NjU3MjgxMjQ3MzQ1MzA4RTcsODAyMTA4MS44ODYzNjU5NzE1LDExODc0MTMuMzAzNTQ1Nzg0NywyODY2NTcyLjA3ODk4NDc1MywxMjY5MjMyLjg1MTI5MjEyNTIsMS4yMTY2NzI3MDI3Njk4NTVFNyw1OTQzMTM2LjA3MDk5NDMxNCwyNjY0MDMzLjExNjI4OTAzMiwzOTU1MTM1LjMyMTM0MzEwNzYsNDM3MzEwOS4yNzcwNDg2NzM1LDYyMjYwMzEuMjYyOTgyMzc2LDUxOTUyODIuNzgzMTIyNDM4LDEyNDY4NTIuNjIyOTA1OTU1Niw5NzQ4NzgzLjEzNzc5ODEzOCw0ODE5NTg3LjQxNzEwMDI3Myw1NDg2Mjk5LjI1ODUyMTIyNywyODAxMjk2LjQ2NTE4MTM5LDg4NDk2Ny42ODIzNzEwNDgxLDc4OTAyOTguNTA1MzEwMTE1LDYyODU0Mi40OTIzMDc0MTQ0LDE2Nzc3OTIuNzM4NDIzNTI2MywxMjEyMjcyLjMyMjQ5NzI4OCw4MjUxNjE1LjEwOTIzNDA4MSwxNzg0NTE5LjY4MDAzMDcxMDUsMTk1ODI3OC42ODQ5ODQ0NTM3LDEuODYwOTU1ODM2OTg1NTY3MkU3LDEuMTEzNzQ0MjU5OTIyMDI2NUU3LDMzNzY2MDEuMzA5MDM3ODUsMzM1NTA4MS42NzY5MDIyMjE1LDEuMjA0Nzk3MjIwMzA4MTY1M0U3LDEwMjc2NzEuNTQ4OTgwOTczOSwzOTIxMTI0LjQ5NzcwOTI0NCw3Mzc5MjAuNzQxNDUzMjg1OSw1NTgwMzAzLjYwNjA5Mjg4MDUsMi4wNDM1MDIyMjAxNTcwNjI2RTcsMjE4Nzg4NS43OTE5MzY5MDMzLDY5NDEzNjMuNDgzOTI0MDc2LDU5NjI1MC40MjQwNTcxNzQ2LDU3NzY4MDcuMDMxNDg0ODk4LDUyNDg2NzMuNTYyODc1NzYzLDE3NjEzOTcuMTE2NjY2NDY3NCw0ODMwNjUuNDY3OTc0MDQyMgorMTQsTW9uIDcgRmViIDExLDYxNDQ1OC4xNTA5ODY3MDk5LDQzNjAzNjMuODY2NDk5OTIzLDI2MjIwNzUuODk2OTgwMjYzMyw1MDI4NTA1LjMwNTMyODk5NSwzLjMxOTQ0NzIxODU5NTkxOUU3LDQyMTU0MDkuNTE0NDIwMTUzLDMzMzg4ODQuMjkxMTU4NTUzLDU2MDYzOS41NTM1MTI2NjMsNzcwMzY4LjMwMTc3NTA0NDgsMS41NjY0NDQ2OTg2Mjc2MDM0RTcsODAyMzI1Ni43NTgyNjY1Nzc1LDExODcyNzkuMjEwODMwNDY0MywyODY4MTc0LjE2NTk4Nzc3MywxMjY3NzEzLjkzNDcwNDc4MywxLjIxNzIyMjI0MDYxNzY2MzRFNyw1OTYzNTc0Ljg0OTU3MzUyOSwyNjI0NDY2LjQ1MTc5MTgzMDQsMzk2MjY5MC4zNTI0Njc3NzMsNDM4MTU2My4yOTQzMDk1NTY1LDYyMjA5MDYuNTM3OTIzNTYwNSw1MTg5MDg5LjAxNTcwMTk4NSwxMjUwMTk4LjM2MDExMTg1MSw5NzM2ODQ2LjQzNDYwODE3Niw0ODIxNTYyLjQxMDc5NjE3Miw1NDgyMzg1LjQ1NzM2ODc4NywyNzgzMzYwLjMwNjY5OTc4MDcsODgzODk3LjQwMDQ1MzYyOSw3ODg3NzI5LjI1Mzg2ODAwNCw2Mjk2MDMuMjc4NTMwNjg5NywxNjc2ODA1LjE1NzY5MzE0NDIsMTIxMDY5Ni40NjAyNjg5NDMzLDgyNDQzNDcuNzk0NTE2ODksMTc4MjA4OC4wMDY4Nzg3MjY5LDE5NTgzMTEuMTc2NDU3MTM1MiwxLjg1OTMwMjUzOTM3MDAxNzVFNywxLjExMjI1NDEzNDY1MDc1MjNFNywzMzgzMTY4LjY2MTIxNjYzNCwzMzUyMzE5LjY3OTYwNzA0NzcsMS4yMDMxNTMxMDQxMjY0NzI4RTcsMTAyNzI1NS40NjkxOTI0ODA3LDM5MzQ5NDguMDk3MTY0NzEyNCw3NDAyOTMuNjg5MDAxMjkxMSw1NTc0MDA2LjY1NjU3ODg3NCwyLjA0MzQ3NDY2NDExMDg0ODdFNywyMTg4NzAzLjA3NTMyMjQ3LDY5MzU1ODIuMTA4NTczOTk2LDU5Njc3My4yMTEwNzExMTM5LDU3NzYwNzIuOTA3NzA0OTg3LDUyNTg3NDQuODM0MzA5MDUyLDE3NzUyNTMuOTY0MTc1NzM1MSw0ODQxNjAuNDMyMTA0Mzk5NQorMTUsVHVlIDggRmViIDExLDYxNDQ0OS42Mjg0MTAyMzk2LDQzNTk4NjYuODk4MDc1ODQyLDI2MjE1NzMuNjQ1MjE1OTkwNSw1MDI4NDQ3LjkwMzcwMDE0NywzLjMxOTQ1NzM2ODk4NTk3MThFNyw0MjE1NDIxLjE2NDAyMDEyNywzMzM4NTY4Ljk5OTE3MzI1NSw1NjA2NTMuMjQ0MjAwMzQyOCw3Njk2MTIuMDM2MzY2NzUxOCwxLjU2NjQyMDczNTEzMTMyODZFNyw4MDIzMjI3Ljc1NjEzMjUxOCwxMTg3MzA0LjQzNjc5NjIxMywyODY4MDk1LjI3MjU4MTY0MTYsMTI2Nzc5Mi4yMDI4ODI0MjI4LDEuMjE3MjAzNDM0NjA5Mjc4M0U3LDU5NjI0NzkuMzk0MDA2MDY0LDI2MjU5MTYuNDk1MjA0NzY5NSwzOTYyMjk3Ljk5NjQyOTI0NzMsNDM4MTEyOC4yMTU1Njg0MjA1LDYyMjExODUuNzkwMTU4MjY0LDUxODk0MTEuOTc1MzQ0MjMsMTI1MDAyMi4zOTAyMzIwMzk0LDk3Mzc0NjcuMDA3MjU1Nzc4LDQ4MjE0OTUuNzA4Nzg1MTgyLDU0ODI2MDIuOTgxMjUyMzM5LDI3ODQxNTAuNzg1MTU2MDMyLDg4Mzk1Mi41MTg3OTgzNzgyLDc4ODc4OTUuODQ5NTc2NzY1LDYyOTU0OS4xNDg5MTM3MTk5LDE2NzY4NTguNjMyODY4MTE1LDEyMTA3NzcuMzE3MjEyODA4OSw4MjQ0NzQwLjM2NDk3MjcyMSwxNzgyMjEyLjc2Njc2NDM2ODksMTk1ODM1NS44MjI5NTM2NTg5LDEuODU5MzkxNzUwNTk0MTAxRTcsMS4xMTIzMzA1MDc5NjY2MDkzRTcsMzM4MjgzMC41NDgwNjk5MTMsMzM1MjQ3MC4xODEyNzk1ODk0LDEuMjAzMjM3NDA2Mzg1NjkzNUU3LDEwMjcyODEuMDc2NDU1MDU4LDM5MzQyMDUuNTkyMzAxODgzLDc0MDE2Ny4xOTczNjMxNTc4LDU1NzQzMzcuMDA4NTA2MjY1LDIuMDQzNDg3MTIyMDkxODE4RTcsMjE4ODY4MS44MDg5MTQxODk3LDY5MzU4OTYuNjU1MzY5NjA5LDU5Njc0Ny42NjA4MjE1Njc2LDU3NzYxMzkuNzExNjUwOTMsNTI1ODIyNi43NjkzMDgxODcsMTc3NDQ0NC41NTM5MTAzNjI4LDQ4NDEwMy40OTk2MTA3MDExCisxNixXZWQgOSBGZWIgMTEsNjE0MDg3LjA0MDc1ODYxODQsNDM0OTkzNi44OTgwMDA1NjgsMjYxMTk2Mi4yNTA5NDM0NSw1MDI1NjQ0LjMyNjkwNTE1MSwzLjMxOTEzNjE2MDE0NTExNDdFNyw0MjEzOTk4Ljc4NTMwMTYyNywzMzMyMDczLjk2MDQzMjQzNSw1NjAzMTMuOTI2MjQ3Njg4Niw3NTkyNDguNDIxODEzMjExOSwxLjU2NTQ3Nzk4MTYxODM4OEU3LDgwMTk3MTMuMDA0OTAzMTEyLDExODcxNjguNzY2NTUxMTA3LDI4NjYzNjYuMjY4ODIxNDEzNiwxMjY5MzU4LjczODM3ODU5MTQsMS4yMTY0ODY5MDIxMjcxMzc0RTcsNTk0MTM4My44NDA0MDQxNjYsMjY2OTcwNi40Nzk3MzQ3MjY3LDM5NTQzNzkuODY4NTU2Mzg4LDQzNzIyMDYuODk4Mzg3MzkzLDYyMjYyNTguODQwMjg0NDg4LDUxOTU3NDIuODY3OTIwNTg5LDEyNDY1MzMuMTA3NTgyMDk0MSw5NzQ5NjkyLjQwMTc1OTA2LDQ4MTg5MDcuOTE1OTUyMTc4LDU0ODY0MTYuOTIwNzg5MDMxLDI4MDM3NjkuMjU0NTU1MTExOCw4ODUwNTYuNzIzOTY4NjY3NCw3ODkwMDUwLjQwODgzMDI1NCw2Mjg0MjQuNDYzMjYwNzE2MiwxNjc3ODQzLjI2NTA0MzgxMzUsMTIxMjQwNi40MDU2MzQ0NTg5LDgyNTE5ODIuNTMyMDc2NiwxNzg0NzI1LjM4NTYyNTc0OTEsMTk1NzYyNS42NjM3MDA0NjgsMS44NjEwNDA2ODkyMzg2OTU0RTcsMS4xMTM4NzE3NTE0NDkxNzYzRTcsMzM3NTkwMS42NDAxODg0NzkzLDMzNTUyMDQuMzY3MTY3NDI5LDEuMjA0OTM2OTk0NjA1MTk1NUU3LDEwMjc2NTAuMzI0NjQxMTM1OCwzOTE5OTU1LjQ2MDA4OTY1NCw3Mzc3MTAuNTIwNTU3MjUyNiw1NTgwNzQ2LjQ4MTE2NzgyNSwyLjA0MzM1MDIyMTgwNjYyM0U3LDIxODc1MTYuMDIyOTEyNTI4LDY5NDE2MjYuNTg1MzIxNTM2LDU5NjE3OS4zNjEyMDExNTY2LDU3NzY0NjguNDM1MDg5MjU0LDUyNDc1OTYuMDU5OTAxMjI1LDE3NjA5MDQuMzgyMzM5MDc0NSw0ODI5NTQuNDQxMjM0ODUwODUKKzE3LFRodSAxMCBGZWIgMTEsNjE0NTgwLjU2OTg2NTg3MDQsNDM2MjAyMy4yNjQ5ODY5ODM1LDI2MjM3MzYuMTc5MDc0NzUyNiw1MDI5NTE0LjgwODgzODUxNjUsMy4zMTk2ODk1MjM4NzE3NTFFNyw0MjE2MjI5LjQzNzY1Mjk1OTUsMzM0MDAwNC40MTM3MDkwNTIsNTYwOTIwLjQ5Mzc2MDQyODYsNzcyNTgzLjcyNzUxNjU3ODMsMS41NjY3NDk2MzYwMzg0NzI3RTcsODAyNDg0NC4wODM3MDUwMTgsMTE4NzU0NC4xMTIzOTc2MjY1LDI4Njg0NzYuMTkxOTI3MDU3NywxMjY3NTM3LjcyOTg5MjYxNCwxLjIxNzQ0OTU0NjU0MzMwMTZFNyw1OTY3MjIzLjA3MTkwNjIxNywyNjIxODQ1LjYxNjI0OTAwNDQsMzk2NDAwOC4zNDU0MTI1MTEsNDM4MzA5OS41ODY4NDE1NjEsNjIyMDUwOC45MjU4NzA3NTg1LDUxODg0MzEuNjcxNTIyMjM1NSwxMjUwNzk3LjkzNzk5MTE4NTgsOTczNTU1OS4xMTMxMzAzOCw0ODIyMzkxLjU5NjMyNzI3Myw1NDgyMTM4LjM2MzQzMTEyMSwyNzgxMTk1Ljc5NjA3MjY0NzQsODgzNzczLjA0MzE1MDc2NzcsNzg4NzkxMS45NTcwNDY2Nyw2Mjk3OTcuOTMxOTEzODIwMSwxNjc2NzE3LjM3NjA1MjIxMzEsMTIxMDUxMS45MjU5MTQxNDI1LDgyNDM3MzkuNzc0NzM4MjYzLDE3ODE4MDYuODE4MDE4MjY0NiwxOTU5MDMyLjY3Mzc0NjExNDQsMS44NTkxNjI5NzY3MzI0NTkzRTcsMS4xMTIwNzk2MjQ1ODc3NTcxRTcsMzM4NDM2MS42NTI0ODg3NTc0LDMzNTIxMDUuMzQ4NDE2MjY3LDEuMjAyOTYyMjI0ODIwMzcxNUU3LDEwMjcyNjQuNjczNzQ2NTcxNSwzOTM3NDEzLjkyMjQ4MzQ4MjQsNzQwNzE3LjYzODk1NDIzNDcsNTU3MzM2MS4xMjU3NTgzMDQsMi4wNDM2NDAxMzM4NzkzMTFFNywyMTg5MTQyLjIwMTc4MjY3MTMsNjkzNTEyNy4yMjU2MjA2NjgsNTk2ODc3LjgxMzMyMjk5NzcsNTc3NjQxNi43MTg2OTg4MDcsNTI2MDU3NS44Nzk1MzE4NzgsMTc3Nzc5Mi4wMzE3NzA0Mjk4LDQ4NDM1Ny43NTkzMTM3MTQ5CisxOCxGcmkgMTEgRmViIDExLDYxNDYzMS44NTMyODgwMjIyLDQzNjE4NDkuODI5NTM1ODk1LDI2MjM2MTYuNzMzOTQzNTUwNCw1MDI5OTcwLjEwODgwOTgzNCwzLjMxOTg1ODY5NjU2MTM3NDVFNyw0MjE2NzQ4LjA3NzEzMTY3NCwzMzM5OTIzLjQ5NjM1NTY5NDMsNTYxMTI4LjY2NzIwNDY5OCw3NzMxMDEuODU0Mzc0ODY3MiwxLjU2Njg3MDUwNTQ4OTIxMDJFNyw4MDI1NzE1LjQ2MDEwNzY0NywxMTg3NzY5LjAzNjk1MTIwMzgsMjg2ODQ1OS44ODIzNzg3OTY2LDEyNjc2MzkuMjY4MDk3ODQwMiwxLjIxNzUzNzI0ODEwMjM2NTZFNyw1OTY2OTY0LjIxMjk1NDM0OCwyNjI0NzA0LjIyNjMxNjQzNTMsMzk2Mzg2Ni4xNDgwNTk0MDM1LDQzODI5ODYuMDEzMzM2ODk2LDYyMjEwMDEuNjM4MjY2NzkxLDUxODg4OTMuNTk3NTIwMzM2LDEyNTA3NTEuNTkxODE0NTU0OCw5NzM2NDMzLjgyMTI4MTY1OCw0ODIyNzE1Ljk3ODQ4MzEwMSw1NDgyNTU3LjM4OTA1NTc2OCwyNzgyMjUyLjI5MzMyNDM0NzYsODgzODQ0LjQ1MTc0NTc2ODUsNzg4ODQ0OC4xMTQ3NTg0ODcsNjI5Nzg0LjY0MTYzODM5NDIsMTY3NjgwMy4xNzk4MjQwNzI5LDEyMTA2MTYuMTAwNzg5OTgzLDgyNDQ0MDUuMTI1MDM0NTc3LDE3ODE5NzAuNTMyMTc3NjgwNCwxOTU5NTg3Ljc1ODQwNDM4NTgsMS44NTkzMTM0MDYzNTY2NUU3LDEuMTEyMTc4MTc5NjM2NTQwOEU3LDMzODQyNzMuMjI2Mjk2ODEzNywzMzUyMzcwLjg3MTA2MzY5OTUsMS4yMDMwNzIzMjEwNDUwODk5RTcsMTAyNzMzNi4wNjE4NTQ5MzE5LDM5MzcyNDAuNTcyNTMxNjI4LDc0MDY4Ni42MTIwNzk3NjQsNTU3Mzg0Ny45NzQzNTk3MzksMi4wNDM3Njk4OTMwNTM3NDM2RTcsMjE4OTM0OS41OTk2MTQ3ODksNjkzNTY3OC4yOTUwNzQ4MzgsNTk2ODc3LjE1MjczMDA5NzMsNTc3Njc5MC45OTE4NTk0MDksNTI2MDQ0MC45NjUzMjI0NzksMTc3Nzg2MC4yNjMzMzYyNTA2LDQ4NDM0Mi40OTE2NTQ1NzIxNAorMTksU2F0IDEyIEZlYiAxMSw2MTQ1MjcuMjEzODI4Mzg0OCw0MzU5Njk5Ljc4NjA2MjQyMSwyNjIxNDg3LjIzMDE1NzQyNiw1MDI5MTMzLjUxMzk3ODYyNiwzLjMxOTcwNjMyOTAxOTY0N0U3LDQyMTYxODguNjAyODAwMzczLDMzMzg1MDYuMDQzMjY2ODA2Myw1NjA5NjAuNjc1MDA3NTU0Miw3NzA0NTEuNDIxNzMyODE3LDEuNTY2NjA0MjY2NzExNzE5NUU3LDgwMjQ1MjUuNjcxNDcyNDMzLDExODc2MzMuODU2MjAxMTUzNywyODY4MDg0Ljc3NzM4NTc0NSwxMjY3OTMwLjQ2OTMzMjYyODksMS4yMTczMzY4MzczOTQzODNFNyw1OTYyMjkzLjc2OTAwNDA5MSwyNjMxMTQxLjE0MDEwNTAxMywzOTYyMTU4LjAyMTYwNzI3MDUsNDM4MTAzOC41OTgxNjUxMjksNjIyMTg3MC41NTY5OTQ1OTksNTE5MDA0NS44NTQxMzk2NzcsMTI0OTk4NS42NzEyNjI0MDUsOTczODY2Ni4yNTE3ODQ4MjIsNDgyMTk4OC41MTcxNDIxODgsNTQ4MzE4OC4yNTI2MTc3NzQ1LDI3ODU3MjIuMTI3MzEzOTMwNSw4ODQwNDkuNzU1NTk1NzI3NSw3ODg4NjYyLjI3NzY2OTI5Myw2Mjk1MzkuMjA4NDg5MDgyMiwxNjc2OTc3LjAwODIyMzQxODQsMTIxMDkxOS4yMDY5MTkyMDEyLDgyNDU2NjIuODczMTU1MjU5NSwxNzgyNDM2LjE5NjIyNTg1MjcsMTk1OTE3Mi45NjkyNDgwOTUsMS44NTk2MDAyNTc3ODczODgyRTcsMS4xMTI0NjQ4MDE5NjgxMDZFNywzMzgyNzYwLjY2ODM2MTQzNzUsMzM1MjgzOS4yMDAyMjY3NywxLjIwMzM4NzYwNTEyODIzMDVFNywxMDI3MzgyLjU2ODAyNTU1MiwzOTM0MDgyLjc0MjUxNTM2NTYsNzQwMTQ0LjEzMzcwMzYyMDksNTU3NTAwNi4zMTM1NzUyMzcsMi4wNDM2NzcyOTk4NDQzMTM0RTcsMjE4ODk5My4yNTg0MDU2NjYsNjkzNjY2Mi4yMDkzMTQ4MDMsNTk2NzUxLjE5MDU3NjIyODMsNTc3NjY4Mi45NzkyNjk4NTcsNTI1ODEyMC41MTg5NjQwNSwxNzc0NjY5Ljk2NzU0MjA4MDcsNDg0MDkxLjIwMzE2MDMyODczCisyMCxTdW4gMTMgRmViIDExLDYxNDEwMS4xOTc4ODMxODU2LDQzNTU1MDMuMDQxNDM3MjQzLDI2MTcyMjguMjc4ODI3NjY1LDUwMjU1NjEuMzc3MjY4NjM4LDMuMzE4NzUwNDE4MTg4NDkzN0U3LDQyMTMwMTUuODExNTczMjE1LDMzMzU2MDMuMTQxNjQ4ODA1Nyw1NTk3ODAuMzQ3NzM1ODQ3Nyw3NjI3MjYuMjk5NzEwNDY1OCwxLjU2NTU1NTY5ODIyODgyOEU3LDgwMTg2MjUuODE4NjA4NjE3LDExODY0OTcuOTI2MTUxOTQ1LDI4NjcyODMuMTMyNTM1OTMyLDEyNjgyNTcuMDgxMTkyNTg5LDEuMjE2NTU5NzMwNTIzOTc1NEU3LDU5NTI5MjMuNTUzNzA0NTIyLDI2Mzk4NzIuODEwMDI3NzEzLDM5NTg4MjQuOTM0MTIxOTQyLDQzNzcwNjQuNDM4NDEwMDcsNjIyMjE1Ny4yNDU0ODU5Nyw1MTkxMTI0LjEzMDc1OTUxNSwxMjQ4NDQ2LjI1NTQ0MzEwNzgsOTc0MDgzMC4xODAzNjc2OTksNDgxOTE0Ny4wMjQ3MTYyODUsNTQ4MzE3NS4zMzc2NzkwOTQsMjc5MDkxMi43NzU4ODc5NTksODg0MjgwLjc1ODk4MzIxNzIsNzg4NzI1MC4yMzYwODYxMjksNjI5MDMyLjc3NTAyMTU4NTMsMTY3NzA3OC41MDA0NzM3ODU3LDEyMTEyNjUuNzY3NDExNTUwNSw4MjQ2MjUxLjA1ODA5NDcyMywxNzgyOTU2LjcyNDUxMTQ5MjgsMTk1NjE0MC44MzUxMzcwMDIsMS44NTk3MzkxNzI2OTUxNDU0RTcsMS4xMTI3OTI3Nzk3MzUwNDgzRTcsMzM3OTY3NS4yNjE4NzA0NjM0LDMzNTI5OTMuODYwNzcwNDExMywxLjIwMzc0MjcyMDU1MjE0MjNFNywxMDI3MjM2LjY5MTY4MDIzNDMsMzkyNzc0OC45Mzk5OTM4NDA2LDczOTA1NS43ODUwMDQyMDE5LDU1NzYwMDcuNDA3MjY3MTAxLDIuMDQyOTk5MjI1MjU2ODU2RTcsMjE4NzQyMi4zOTA4NjY0ODE3LDY5MzcwMTEuNjEwMzM1MzA3LDU5NjQ2NS45ODYxODk3OTM0LDU3NzUwOTYuNjQ1ODU1ODc2LDUyNTMzODIuNTY5MjMyNzYyLDE3Njc2NzAuMjcxMzAwNjk1LDQ4MzU4My4xOTA3MjA2NDUKKzIxLE1vbiAxNCBGZWIgMTEsNjE1MDE4LjU5NzY1MzU4NDQsNDM2MjkxNy40MDUzNTI5OTksMjYyNDgwMS44MjI3NTM1ODM1LDUwMzMzMTMuNTczODg5MjksMy4zMjA5MTkxMTU3ODA2NDc1RTcsNDIyMDE2OS42MDgzMTc5MzcsMzM0MDgzNS44Mjk2MzU2Nyw1NjI1MzkuOTM4NTY1NTA2MSw3Nzg2NjQuNDMxODYzNjI1OSwxLjU2NzgwMDg2MTUwODUzMDZFNyw4MDMxNzA5Ljc2NDU3OTM3NywxMTg5MTU5Ljk4MDk1OTA2MTUsMjg2ODc1NS4xMzAxMzE4MzA1LDEyNjc4NDMuMzY1NDA0NTk2LDEuMjE4MjE4ODc1NTE4NTIyNEU3LDU5Njk2MTMuMzQzMDI4Nzc0LDI2MjYxNjcuMDc5MDY2MjI3NywzOTY0NzE3LjA1ODY2Niw0Mzg0MjE2LjgzODE4MDc2OCw2MjIyNjM4LjU3MjY4MzM1NSw1MTkwMDIwLjA0Nzk2NzExMiwxMjUxMTk1LjIwNzU2ODM2NjMsOTczODUwNC4wNzgzOTEzNjYsNDgyNTIxOS41Mzc4Mjc1MzgsNTQ4NDA3NS45MzIxNTk5MjgsMjc4MjU2NC40OTMyODkwNDYsODgzOTg3LjIyNjUwOTYxOTYsNzg5MTA2Mi40MDYzMzY1NzQsNjI5OTQ4LjYyMjc2MjQ1NzQsMTY3NzA2NS4wMjQ5MDExMjg2LDEyMTA4MTguNDA5MDU0ODYxNCw4MjQ2NTE1Ljc3NzkyNjU4OSwxNzgyMjk4Ljc0MzgwNTIzMTgsMTk2MzIxMi45NzA3NDYzODYsMS44NTk3ODc2NTAyNjE4NzA4RTcsMS4xMTIzNjg5ODA2NjIxNjA3RTcsMzM4NTIyNy4wNjg4NjUzMDcsMzM1MzI1Mi45MzM1MzMzNzQsMS4yMDMyOTA1Mzg0MDM0MDI2RTcsMTAyNzY2NC4xMzE0MjI5NzM5LDM5MzkwMjYuODM0MzE0NjQyLDc0MDk5NS4zMzMyODM3Mzg2LDU1NzUxMDQuNTU0NDc5OTEsMi4wNDQ1NjAwNzU2NDM0NzJFNywyMTkwODQ4LjM0Njc4Mjc1OSw2OTM3NDk0Ljg2MjkwNjMyOSw1OTY5OTkuOTEyNTg0ODgzMyw1Nzc4ODk4LjI5ODE5MDEzOSw1MjYxOTExLjYzOTk0MDAyMiwxNzgwNDk4LjgwMDIxODkxNzIsNDg0NDkzLjM4MzcxODgzOTczCisyMixUdWUgMTUgRmViIDExLDYxNDg5MC41ODQ4MDg3NDgsNDM2MTIwMi42NDY3NzAzNjMsMjYyMzA1NC41OTEwNTcwOTI0LDUwMzIyNTcuMTk4NzA3NzUzLDMuMzIwNjYwMjc1MDQxNTU5N0U3LDQyMTkzMDguMjM3MDMzNzcsMzMzOTY4MC4wNDE0Njg2NjgsNTYyMjY0LjQzOTkxNzk4NTMsNzc2MTYyLjE5Mzg1OTQzOTksMS41Njc0ODIxMTMxMDM4NDA5RTcsODAzMDA0NC45OTU3NTkxMSwxMTg4ODgzLjA4MjY0NDkyNzMsMjg2ODQ0Ni4yODA4NTU1MTEsMTI2ODAxNS4zNjM5NjQzNTYyLDEuMjE3OTgxMjY1MDI0OTcwNUU3LDU5NjU3ODAuNDg4OTk5ODE4LDI2Mjk4MDguNTQwNTQ4MzAzLDM5NjMzNTkuMTkzMTQzMTYwNSw0MzgyNjMwLjQxNDQ0NzI0MDUsNjIyMzAwOS4zMDI5NzEwMjcsNTE5MDY1Ni4xMDQ5NzY1MTIsMTI1MDU3MS4yMzYyMTM5MTA2LDk3Mzk3NTEuNjQ1MjQ5NDc1LDQ4MjQzNTIuMDUwMjE4NDE1LDU0ODQyOTguODAwODA4ODUsMjc4NDc2MS43NDYxMTQyODc1LDg4NDEwOC42Mjk1NjY2MDgyLDc4OTA4NDAuMzU5MTQwMDksNjI5NzQ4LjAxNzc5ODMyNDgsMTY3NzE0OC4zNjk4NTQ2OTM1LDEyMTA5OTguNjUyMDM0NDU3LDgyNDcwODguNTI1ODE4MTk3LDE3ODI1NzMuMDI2NjU1ODUsMTk2MjQ4MS45MDI3NTM4NDQ0LDEuODU5OTE5MjY4MTc0NjE3NEU3LDEuMTEyNTM5NDE4NjkwNjAxRTcsMzM4Mzk5NS4wMjA2Nzc3MDc2LDMzNTM0NTIuNzc4OTk0ODM1NCwxLjIwMzQ3Njc5OTQ1NzM5NDNFNywxMDI3NjQ5Ljk1NzI2NTczNDksMzkzNjQzMy4yNTAxOTU2MTMsNzQwNTUxLjIzMDQyMDUwMDYsNTU3NTcyNy4wMjg5NjI1MzgsMi4wNDQzODI3NDU4MDk2ODQzRTcsMjE5MDM4OC42MDU1MDMwNzMsNjkzNzkxOS44Mjg4ODM5Nzk1LDU5Njg5Mi4zOTkwMTI4MzMxLDU3Nzg1MjIuOTQ3MDY0MDc3NSw1MjYwMDIxLjA4MzIxMTQ2ODUsMTc3NzYzNy44MTYxNDk0MTk2LDQ4NDI4OC45NjYzMjEyMjE5CisyMyxXZWQgMTYgRmViIDExLDYxNDc1MC41MTUyNDM0MjcyLDQzNTk5MjcuOTYwMDQxMjE0LDI2MjE3NDIuNTgxMzQ4OTg1NCw1MDMxMDc5LjEwODU2MzI4OSwzLjMyMDMzNzc5NzUwODcxNkU3LDQyMTgyNDYuNDE5NzM3OTM5LDMzMzg3OTIuMTUzNDk0NjAxNiw1NjE4NzUuNzM0NjQyMjkyNiw3NzM1NzguNzQxNjI3Nzg3NywxLjU2NzEzODE0MTA1NTUzMDVFNyw4MDI4MDgyLjc4MzI0MTE0MiwxMTg4NDk5LjAwMzM1MzAwNDgsMjg2ODIwMS4zNzMxNjgxNzEsMTI2ODA5OS43NjE4ODYyODU5LDEuMjE3NzI2NjM1MDczNjAyMkU3LDU5NjI4OTQuNjc4OTU4MDg2LDI2MzIxMjAuMzgzNTgzNzMsMzk2MjM0OC42OTY5NTIwMjYsNDM4MTQxNC45MzIzNTQzMzMsNjIyMzAxOS45MjE3MjM3OTA1LDUxOTA5MTUuMzI5NTExMDgxLDEyNTAwOTkuMzg3NTcyODgzLDk3NDAyODAuMDQ3NTQwNDI4LDQ4MjM0MjAuNTYyNzQ0MjcsNTQ4NDIyOC42NTIwNDE5NjgsMjc4NjE5My4zODY3OTc5NDQsODg0MTY4LjM4ODY1MzY1NTEsNzg5MDMxOS41MTMyMjI0NTIsNjI5NTkzLjA2ODg1MDk3MjIsMTY3NzE2NS44MzA5MjYyNzYsMTIxMTA4OC44MDI1NzI0NDE4LDgyNDcxNjQuODM4MDE0NzksMTc4MjcwNy4zNzk4ODc5MTIyLDE5NjE0NzAuNjQzMzEyMDU3MiwxLjg1OTkzODM0OTcyNDUzNDVFNywxLjExMjYyNDc1ODE2NDk3MjZFNywzMzgzMDUxLjM2MDg2NTA2MjYsMzM1MzQ1OC41NTIwNDg5MjgsMS4yMDM1Njg3MDA0NjAzMzYyRTcsMTAyNzU5My42MzUxNzk2NjM4LDM5MzQ0ODEuNTQ1MzQ3NDgzNCw3NDAyMTYuNTUzMDA2MjE4Myw1NTc1OTU4LjYwOTQ4MjgzNCwyLjA0NDE1MjU2MTg0Mjc0NDRFNywyMTg5ODY5LjUyNjc2NjI4NjcsNjkzNzk0MC41NzExMDA2NTEsNTk2ODA0LjI0NDkwNTY1NCw1Nzc3OTczLjQ4MTExNzM4OSw1MjU4NTcxLjk5NTIxNjQzOSwxNzc1MzczLjk5ODUzODcwMjcsNDg0MTMzLjUxNzkzMzIxODc0CisyNCxUaHUgMTcgRmViIDExLDYxNDU2MC4wMzU0Mzg0NzM4LDQzNTg4MjguNjI4MTQzNjMsMjYyMDYxMi42MDE0Njk4NzIsNTAyOTQ1My4xODk4OTE5NDIsMy4zMTk4NTkwNzYyODI2NzJFNyw0MjE2NjczLjIyNjYxMDAyMSwzMzM3OTgxLjE5Mzk3NjQ2MjQsNTYxMjM1LjU5MzE0MDc3ODYsNzcwMzkzLjQ1NDY3NjYzMjIsMS41NjY2NzU1MDEzMzc3ODI1RTcsODAyNTI2Mi43MDc0NjE3NzYsMTE4Nzg4Ni4wOTcwNTM3NzQsMjg2Nzk2My4yOTU4NDY4MDY0LDEyNjgxMTAuNzIwOTc2MzAyLDEuMjE3Mzg2MDg0NTQ4NjYxOUU3LDU5NjAzOTMuODc3NTgwNzAxLDI2MzM3OTAuMTQ0MDM0ODczLDM5NjE0NzIuNTEyNTkwOTk4LDQzODAzMTAuNTUxMTgwMzExLDYyMjI2MzMuOTkyNDQxNTI1LDUxOTA4MjguOTQ5ODk4NzM0LDEyNDk2ODMuNDg0MTg1NDk3Nyw5NzQwMTU4LjQ4MDM1MjUzMiw0ODIyMTcyLjc2NDQ0MTQ5NCw1NDgzODE0LjIwOTY5OTQ2NCwyNzg3MjM1LjQ2MTAxODA1LDg4NDE3Ni41NzU4NTcwMjAyLDc4ODkzMjYuMzU4MjYzMzEsNjI5NDUwLjA3OTQ5Njc3MzksMTY3NzExNS4zMTc1MDExODgzLDEyMTExMDQuNDAxODQ5NTc2Nyw4MjQ2NzExLjUyMTQxNjkwMzUsMTc4MjcyNC4zMjk3MzkyMzYsMTk1OTg0Mi40MTc5Njc2MjI2LDEuODU5ODM3ODY0MDU2MDE0RTcsMS4xMTI2Mzk3Mzk1OTI1NDhFNywzMzgyMTk0LjUxNzk3MzM4NSwzMzUzMjUwLjYzMDEwODI3MTcsMS4yMDM1ODE4MDY5NDEzMzIxRTcsMTAyNzQ3NS4yODE2OTgyMDY5LDM5MzI3OTMuNjM3NzM3OTM5Niw3Mzk5MjUuMjM0NzAyMzQ4LDU1NzU4MjEuMTA2MTE2MTk3LDIuMDQzODAyMjI4Mzk5MTIyRTcsMjE4OTE0Ni40MDc5NjQ2MjA3LDY5Mzc1MTguNjIyNTU0MjE1LDU5NjcxNC44NjEwNDcxMTcyLDU3NzcwODMuMzg5NDIzNzA3NSw1MjU3MjU0LjI5NDc0NzYxMTUsMTc3MzM3MS43ODM3NjE3NDYsNDgzOTk0LjUyNDAxODU4OQorMjUsRnJpIDE4IEZlYiAxMSw2MTQwNjIuNTkwNTI1MDA2MSw0MzU3MDQyLjI2MzY5MzI5NywyNjE4ODA5LjYxNTUwMTM4MDUsNTAyNTE2NC43NjY3MjI0MjQsMy4zMTg1NDIyMDU5MTQwODNFNyw0MjEyMzMyLjk1OTY2NjY3OCwzMzM2NTQxLjk3OTE3Mzg3Myw1NTkzMTkuOTg1MzA5NDIwMyw3NjMwNzcuNTQ5OTA1NTI5NCwxLjU2NTQ3NjM2NjY1MTI4NDdFNyw4MDE3NjI3LjQyMzEwMzAyNywxMTg2MTE2LjQzOTE5MjkwMzIsMjg2NzUwMC40OTM5NDc1NTQ0LDEyNjc5NjguMjc4NDY4OTA1LDEuMjE2NTA2ODUxMzEzMDE5MkU3LDU5NTYzNTcuNzQxODk3NTIyLDI2MzU5MzAuMTU1MDgwMTc3NCwzOTYwMDMyLjQwMTA5NTQ3MjMsNDM3ODM2Ni40NjUyNzU3NzksNjIyMDk1OC45Njc4NDUxMjA1LDUxODk4NzYuNjI2NTM3NTY0LDEyNDg5ODguMzgyODU3NjM0Miw5NzM4NDUwLjczMTUzMTAzLDQ4MTg5NDcuOTY0MDE4MjA4LDU0ODIxOTkuMjk2MTg2Mjc1LDI3ODg1NDIuNTA4Mzc2NDU1LDg4NDA3Ny41NDM2NDgyODAyLDc4ODYyNTQuNDkzNjgyNSw2MjkxOTIuMzQ3NjM2NDE4NCwxNjc2ODYwLjY4MjY4NTYwODcsMTIxMDk2OC44NzI0MDczOTIsODI0NDYwMC4yMzAzODU4MzYsMTc4MjQ5NS4yNTAxMjA5NDU1LDE5NTUwNzcuMTMxNzIyMDc1LDEuODU5MzY0OTgyODc2NTgxM0U3LDEuMTEyNTEyMzQwNDg4NTY4N0U3LDMzODA2ODcuNzM5ODI3ODY2LDMzNTIzNDguMDgyMTI1NDI3NywxLjIwMzQzMTYwMTYwODMzRTcsMTAyNzA5Ni4xNjMxMDk0NzU5LDM5MzAwODAuOTc4MTE5MTQsNzM5NDUwLjUyMDEwMzQzMDYsNTU3NDcxMS45OTIxODc1NDQsMi4wNDI4MjQ1ODE0NDk4MDU2RTcsMjE4NzIyNy4zNzAxMzk1ODg2LDY5MzU2NjYuNjkwNTIzNTUsNTk2NTMzLjA3NzM4OTI0LDU3NzQ1MTguNTkwNTI4OTM4LDUyNTQ5MzEuNzQ1NTczNTI4LDE3NzAyMjUuNjkwNDkwODU0Nyw0ODM3NTYuMTc5NDQwNDU5NjQKKzI2LFNhdCAxOSBGZWIgMTEsNjE1MzU0LjA5MDA3NzQ4OTQsNDM2MTAwNS4yNTUzNjA2NDEsMjYyMjc2OS42NTQ2MjkwNTUsNTAzNjMyOC4wMzk4MjM0OTQsMy4zMjE5OTQ1ODE1MTY1MzRFNyw0MjIzNzYzLjY3Mzc4MDY2OCwzMzM5ODU0LjE4MDY5NzEzMSw1NjQ1NDkuNTU1MDAwNDczNSw3ODE5ODQuNzY2NTA3ODM4OSwxLjU2ODU4MzE5NjQ4MzUyMzhFNyw4MDM3NjM4LjU2MjIyMzc3OSwxMTkwODQwLjA2NzM4NzEyMjcsMjg2ODYwMi4xOTUyMTE5ODE0LDEyNjg0MzkuNDk2MTkzNzc5OSwxLjIxODc4MjE1NDE2NTI4MTRFNyw1OTY1MjcwLjA3ODgxNDk1LDI2MzE2NjUuNzczNjk4NjQwNSwzOTYzMjQ0LjE1ODQ5NjI4NjMsNDM4MjgyNi4wNTM3MDUzMzIsNjIyNTcwMC44NjU1OTY4NzQsNTE5Mjc3OS44NzQ1Nzc1MjQsMTI1MDU0OC4yODI4NzczMDkyLDk3NDM3MDguODQ1NzIwMzgyLDQ4MjcyOTIuOTUwODUzNDE3LDU0ODY3MDQuOTM5MzQ4NzIxLDI3ODU5ODUuMzU3MjY3OTM4LDg4NDQwNi4wNDM4ODE5Nzg0LDc4OTQ1MDUuMzcwNzUyOTU3LDYyOTc4OS4xMDkzMjEzMTY3LDE2Nzc1OTMuNDA3MDg1NDk1OCwxMjExNDI1LjMzNTU3NzcsODI1MDYyOC44MzU0ODc5MDEsMTc4MzI1Mi4yODE4MjMzNjk3LDE5Njc5MjIuNDE4OTUwODM1LDEuODYwNzE2ODg1NzAyMDY1OEU3LDEuMTEyOTQxOTQ1NTk1MzM5N0U3LDMzODQxNDIuNzM4Njc0NjE5NywzMzU0OTAzLjE4NTQ2OTk2NjQsMS4yMDM5MzEwNzEzOTI2MDE0RTcsMTAyODEyMS4wNDIxNTM4MTczLDM5MzYwNTguODA2MjM0NjQ3LDc0MDUwMy41NTg4ODYxNjU2LDU1NzgwMzUuNzc3MTc2MzQ1LDIuMDQ1Mzk3MDgyMDY1Nzc4MkU3LDIxOTIyMzAuOTI1Mzk5MDcyLDY5NDA5MTYuNzk2Mjk0Mzc3LDU5Njk3Mi4zMzIxMTk1MjExLDU3ODEzMTIuNTM2MDY0OTYsNTI2MDI2Mi4yMjQ0NDEzNDksMTc3NzAzNC4wMDE0MzcxNzE4LDQ4NDI5Ny4wNDQ2ODEyMDMxNAorMjcsU3VuIDIwIEZlYiAxMSw2MTUxMzQuNzQ1MTUwNzQ5Niw0MzYwMDQzLjU3Mjg4NjAxOCwyNjIxNzg0LjIzMDY3ODc5Miw1MDM0NDQ1LjUyNTgxMzI1NCwzLjMyMTQyMTU1Mjk5MzgzNkU3LDQyMjE4OTcuNDgyNTYxNzM0LDMzMzkxMDkuNDI0OTI1NDUzLDU2MzgxMy44OTAxNDU2MTY0LDc3ODkxNy4yNzQxMzY4ODMxLDEuNTY4MDUyNTk1MTg3OTI2OUU3LDgwMzQzMjYuMzQ5NTE4MDI3LDExOTAxMDAuOTczMjI2NTg0LDI4NjgzNzIuNjkxMjM1NDM1LDEyNjg0MDEuODI4MzQ1NzAwNiwxLjIxODM5MjMxMjQ1NTc4ODNFNyw1OTYzMDc2Ljc4NDcyMTAxMSwyNjMyOTA1LjE5MDAyNjA2MzUsMzk2MjQ3My43NDMxNjMzNzMsNDM4MTgxNi4xNjM1MTYwNTEsNjIyNTA2MC44NTkxMzgzNjYsNTE5MjQ2Ny41NTk3NDUwNzksMTI1MDE3Ny43MzQ4NjI4MTE2LDk3NDMxNjEuNjQxMDkwNDMsNDgyNTg2Mi43NzYyODk0OCw1NDg2MDcxLjM2NzI5NjMzNCwyNzg2NzU5LjU0NDc0MDIxMTcsODg0MzgwLjA3NzgwMDExODIsNzg5MzIxOS43NTgxOTI4MjEsNjI5NjU2LjY5OTg2MzMzMDgsMTY3NzQ5OC43NTk3NTMxMzI1LDEyMTEzOTEuNTMzMzQwODg5NSw4MjQ5ODM1LjAzNzk2NTExOCwxNzgzMTkxLjY0MDIzODc0MzMsMTk2NTk5OC4xMjE4MDY5NzczLDEuODYwNTM5NTAwNDQ5MDZFNywxLjExMjkxMDMxNjcwNjQzMUU3LDMzODMzNTkuNjMwNzkwMTU0NCwzMzU0NTU4LjM0MzQ0NTk4NzQsMS4yMDM4OTIwNjgwODY0NDY0RTcsMTAyNzk2NC4wNDA2NjExMjE4LDM5MzQ1ODEuMjY5NDU3MDMxNSw3NDAyNDYuOTg0Nzc2NDU4Miw1NTc3NjU3Ljc5MzM2Nzg1OSwyLjA0NDk3NDM1NzAxOTE2NUU3LDIxOTEzOTAuODQzMDc4OTY5NSw2OTQwMjExLjA0MjkxNTc3OSw1OTY4ODMuNzAwMDQ5NDIzNSw1NzgwMjE1LjA0MzYzMTA2NzUsNTI1OTA1Ni40NjM0NzcyMTMsMTc3NTI1NC40NzIxMDQxMDEyLDQ4NDE3MS42NDM4NTM1NTkwNAorMjgsTW9uIDIxIEZlYiAxMSw2MTQ5NjEuNDU3NTkwMDI0Nyw0MzU5NDA4LjM2MDg1NjIwNiwyNjIxMTM3LjYxMzU5NDE3Niw1MDMyOTUyLjM4ODY3NDcyLDMuMzIwOTY0NjU3OTYyNjY5NEU3LDQyMjAzOTAuODM0NTk3NTg4LDMzMzg1OTkuNjEwOTQ2ODg1Myw1NjMxNzMuODkwODc3Mjg5Niw3NzYyOTIuMTcxMjIzMzA2NCwxLjU2NzYzNDc0NTA1NTQyODdFNyw4MDMxNjcyLjIyOTgwNzE3OCwxMTg5NDkwLjAyNzQ5MzE3MSwyODY4MjEwLjM1ODMyNTI3MSwxMjY4MzU0LjIyMzI2NzAxNDQsMS4yMTgwODU5MjIxNDY1ODhFNyw1OTYxNjMwLjY1NjE0NTY4MSwyNjMzNjQ1Ljk2MDEwNjYxOCwzOTYxOTYyLjU2ODA4Njg1MzMsNDM4MTEyNy4wMjAyNTYxMTksNjIyNDQ4Ny43MjI3MjY5NTIsNTE5MjE0NS41ODIyMjc2ODksMTI0OTkyOS45Njc0Mjc4NjEyLDk3NDI1ODUuMTY2NjM4MjQyLDQ4MjQ3MzkuMzczNzI2NjA2LDU0ODU1MTcuNDQ1NjM3NTY1LDI3ODcyMTcuMzQ3ODIzMDg1LDg4NDM0Ni45OTczMTczMjcsNzg5MjE1OC45MTgxMDI0MjEsNjI5NTY1LjUxOTQ5ODA4OTksMTY3NzQxMS42ODYzNDExNjgsMTIxMTM0Ni4zOTgwNTQ2NDc3LDgyNDkxMTMuNjUzMDg2NDg4LDE3ODMxMTUuMTcwMjUyMDYwNSwxOTY0MzY5Ljc0MTcwMDE1NDcsMS44NjAzNzc5NTg3Mjc4NTA4RTcsMS4xMTI4Njc5MTAyODU1NTM1RTcsMzM4MjgyNS40NTU4NzY3MTE4LDMzNTQyNDkuNTIzMDkwMDk1LDEuMjAzODQxOTc0OTY5OTAxRTcsMTAyNzgzMy4yNzQyMjI4ODQsMzkzMzYwOC43NjU0OTM4MTU4LDc0MDA3Ny4xNTM0NDI5MzU0LDU1NzcyODEuNzc5NTM3MDUxLDIuMDQ0NjM1MzE5MjI0NzkxMkU3LDIxOTA3MjIuOTA5NzcyOTQ2NSw2OTM5NTc3LjUyMzA0NzExNyw1OTY4MTkuODgxNTY0OTAzNyw1Nzc5MzI2Ljg2NzkzODIzOSw1MjU4MjMzLjI1NDgxMzk3OCwxNzc0MDkwLjA5Mzc0NTcwOTQsNDg0MDg2Ljk0MDM4NTg5OTMKKzI5LFR1ZSAyMiBGZWIgMTEsNjE0Nzg1LjM1Mjk0NTA1MjQsNDM1ODkxMi41MTg2NTcxNDcsMjYyMDY0My43MTQxNDk3MTAzLDUwMzE0MjguMTI5MDk4NDAxLDMuMzIwNDkyODU0NDcwMTAwNkU3LDQyMTg4MjEuMjAyMTI0ODYxLDMzMzgxNzUuOTU1NTU0MzA0LDU2MjQ0Ny4wMDI2NTEwMTksNzczNTcwLjQyODgyODgzMjIsMS41NjcyMTE1OTEyNzU4MDI4RTcsODAyODkzMC43Mjg5NjA1NzEsMTE4ODgzNy4wNTE5MDM4MzIyLDI4NjgwNjcuMTI5MDgzODQ0NCwxMjY4MjgzLjcxNjk5MDY0MDksMS4yMTc3NzYyNTkxOTY1OTgzRTcsNTk2MDUxNS41MjU1OTk3LDI2MzQxMzYuNjE3NTg3MDQyLDM5NjE1NTkuNjE2NzA2Mzc1LDQzODA1NTcuNTk3Mjc4MTE1LDYyMjM4MTguMjY0NDkwNTAxLDUxOTE3MjMuNzE0MzY3ODU3LDEyNDk3MzMuMTEzNzM2MDAwMSw5NzQxODE4LjMwNTg2NDQ0Niw0ODIzNjAzLjk5Nzc1MzM5OCw1NDg0ODg1LjExNzExODY0MywyNzg3NTA4LjQ4NTQwNTY3OCw4ODQyOTcuODAxMDk2ODU2NCw3ODkxMDE5LjI0MDc4MzI1Nyw2Mjk0ODguOTQwNjgxMzI4NiwxNjc3MzA3LjUzMDk0MDQ0NzcsMTIxMTI3Ny42OTkyMTI0NDA1LDgyNDgyNTkuNTc0MjM1MzksMTc4MzAwMS45NzE2MTMzNjk0LDE5NjI1ODUuNjcyMzc3MjUyNywxLjg2MDE4NjM0MDIyNzc2MkU3LDEuMTEyODAzMjMxODM0NzQ0NUU3LDMzODIzODQuNDAyMzI4OTQ0MywzMzUzODg4Ljc5MjczODA3NCwxLjIwMzc2NzEzMjYwMTI4OUU3LDEwMjc2OTEuMzIzNzUxNTkyMiwzOTMyODYxLjY0MjQyMDk3ODgsNzM5OTQ1LjA3NDE0OTc2NTEsNTU3NjgwMS45MDg2NjExODMsMi4wNDQyODMwNTEzNjc0MTAzRTcsMjE5MDAzOS4xNTk4MjQ0MTksNjkzODgzNS44OTI2NDA3NzIsNTk2NzYyLjIzOTY4NjYzNzUsNTc3ODM5My45MjQ0NDQ4MzMsNTI1NzU1Mi40NDU3ODM1NDIsMTc3MzIzOC40NTMzODk1Mjc3LDQ4NDAxOC4yNzg3MzkwMTQyCiszMCxXZWQgMjMgRmViIDExLDYxNDU2NC4wMTYyMzk0NDA4LDQzNTg0NDguMTAxODgyODAyLDI2MjAxOTguNzk5ODAxOTU4Nyw1MDI5NTA1LjA1MTY0MDM2MiwzLjMxOTg5MDcxNTM3MTU0NDdFNyw0MjE2ODA2LjQ1MzE5MzQyMTUsMzMzNzc0My44OTMyMzM1ODUsNTYxNDM2LjcwNjI0MTk5MjIsNzcwMjYzLjQ3NzU3NzA1NTMsMS41NjY2ODEzMDU4ODAyMjg4RTcsODAyNTQzNy4xODE0OTA1MjksMTE4Nzk4MC43NTE0OTI3Njc0LDI4Njc5MDkuNjMzOTE3NDQsMTI2ODE3MS4yNjQ1OTM0NzksMS4yMTczODg4MDU2MTA4MjZFNyw1OTU5NDk1Ljg4OTQyMTEzLDI2MzQ0ODguNTk3MTM5ODg0LDM5NjExNzYuNDMzOTY4Mjg3NCw0Mzc5OTgxLjIzMDY3MDA0Myw2MjIyODgxLjE5NjM4MjQyMyw1MTkxMDkwLjYyODM0MTU1MiwxMjQ5NTQ0LjU0NzgzOTQyMDEsOTc0MDY1Ny45Njg1MDQ5Niw0ODIyMTgzLjA3MTAxMjcxNSw1NDg0MDEzLjc1OTAzNTIwNCwyNzg3Njk1Ljc5MTU1NzcyMTMsODg0MjE5LjE4ODMxNDQ2NSw3ODg5NTE3LjQ0NDQzNTA3Nyw2Mjk0MDkuNzYzNjg0ODAxMiwxNjc3MTU5LjU3MDYwNDg4OCwxMjExMTY2Ljc2MzI0MTcyNjQsODI0NzA1My4zODc0NzI1MjIsMTc4MjgyMS4zOTMyMDY1OTUsMTk2MDE5My44NjMxODIwMDg3LDEuODU5OTE1MzkwNDMyMjkwNEU3LDEuMTEyNjk4Njg0MjIzNDgxNkU3LDMzODE5MzguNDA1MjY5OTYyNywzMzUzMzgzLjg1NDk0MDY2NTQsMS4yMDM2NDcyNDIyNTMwNzM3RTcsMTAyNzUwMi43NjI0NTMwMTkyLDM5MzIxODIuNTgyNTcyODUxMyw3Mzk4MjIuNjQ3MjAyNDU1OSw1NTc2MDkyLjM1ODYxMTk2MSwyLjA0MzgzMTI1MzIyODg1MTRFNywyMTg5MTc0LjQ3MjU4MjU4Miw2OTM3Nzk2LjI2OTUzMTQyLDU5NjY5Ny4zNDU5MjczNDY0LDU3NzcxODYuNTAyMzY1MjMsNTI1Njg2Mi41MTIwMDAxNjYsMTc3MjU0My45Nzk2MzU3OTYsNDgzOTUwLjU3MzQ4OTQ1OTMKKzMxLFRodSAyNCBGZWIgMTEsNjE0MjExLjUxOTAzNTIzNTYsNDM1Nzg4My42MzA1OTExMDIsMjYxOTY4Ni4xNzE5OTIzNTQsNTAyNjQzMy44Nzk1Mjc4MDgsMy4zMTg5MjEzOTExNjAzMzU4RTcsNDIxMzU0OC4wNTgxNjM4NDgsMzMzNzE2Ny4xMTY1ODUwMjMyLDU1OTY4NS4xMDU5NTQzNzI3LDc2NTM3MS42MjkxNDM5MjUzLDEuNTY1ODM4NTcyNzM0MjMzNEU3LDgwMTk4MTcuMDk0MTUyNjU0NSwxMTg2NTczLjAwMzk0NzQ2NiwyODY3NjgzLjQ0NTAzMzg3ODYsMTI2Nzk2NS44MTk4NTQyNDMyLDEuMjE2NzczNzUzMzU3MjIzOEU3LDU5NTgyOTcuODA3NDI4NzU4LDI2MzQ3NjcuNzM3ODU4MzAyLDM5NjA3MDEuOTQ4NDg1MTc3NSw0Mzc5MjE3LjgxNDQ5MjE1OSw2MjIxMjgxLjcwNjQ3NDQ5Miw1MTg5OTY3Ljg1NjIzNTE2MSwxMjQ5MzA5LjY3NzU2OTEwNDgsOTczODU5MS4zNTk1NDI1NDMsNDgxOTkyNy4wMTQ0NzY2OTgsNTQ4MjU0MC4wOTczMjg4MDYsMjc4NzgwMi4xODk5MTExMjMsODg0MDc1LjQzNjQyMzIzMDcsNzg4NzA0Ny4zMjE5MTcyMjYsNjI5MzAyLjU4Mzg0MzEwNDIsMTY3NjkwNS4wODM5MDE4NiwxMjEwOTYyLjg3OTM4MzQwNzgsODI0NDk4My45MTA4NDkyMjYsMTc4MjQ5MS4zMzY1NTI2MjEsMTk1NjE4NC42MzM1MzM2ODg1LDEuODU5NDUwMTg4ODYwMjk4M0U3LDEuMTEyNTA2NDM4MTEzMTQ0NkU3LDMzODEzNDguMjcxMjM1NDU1OCwzMzUyNTIxLjk2MzQxNDk5OCwxLjIwMzQyNzY4MzczMTUwNzFFNywxMDI3MTkxLjAxNDQyMDcwNjEsMzkzMTM5MC45ODA2OTczMTgsNzM5Njc2LjIyMDA4MjczMzIsNTU3NDg0My43MTc2MzMzODQsMi4wNDMxMDE0MTg5MzY5NzJFNywyMTg3NzkxLjE4MzE2NjI5LDY5MzYwMjAuMjA0NTI3NjA1LDU5NjYwMi4zNDQ3MjMzOTQ4LDU3NzUyMjQuMDI4Mjg0NDk1LDUyNTU5NDcuNTMwNDEwODc2LDE3NzE4NzAuMTA3NjY1NDcwOCw0ODM4NjMuMzg5Mzg3MDI2MQorMzIsRnJpIDI1IEZlYiAxMSw2MTQ1MTguOTEyODQ4OTU5Niw0MzU4MzM0Ljc2MjMzNDczNCwyNjIwMDg3LjM0MzQyMTQzOTYsNTAyOTExNC42NDExNTQ5MTgsMy4zMTk3Njc4MjYzMjMyNDY2RTcsNDIxNjQwNC41ODA1NTkzNjcsMzMzNzY0My41MjQxMDE3Mzg0LDU2MTI3NS4wODk2NDEwNjUzLDc2OTYzMS41NjU2NzIwODkyLDEuNTY2NTcyOTExMjc3NzI2MUU3LDgwMjQ3MzQuOTE4NDU2Mjc1LDExODc4MTUuNjcwNDQ5NTYzOCwyODY3ODc0LjU4MTI5MDIxLDEyNjgxNTAuNjE5MTA4MzcxNywxLjIxNzMwOTQ0MDAyMjA3NzRFNyw1OTU5MjQyLjc1NzY5OTczNywyNjM0NTg3Ljk5OTU0NjUxMTYsMzk2MTA4My43ODQwMDM5MTUzLDQzNzk4NDYuNzQ0NjM1NzY1LDYyMjI2OTguOTM4NzAyOTY4LDUxOTA5NzEuNDYzMTcwMDE2LDEyNDk0OTkuMDY3MzE3MTM4Miw5NzQwNDQwLjM4MDg1Mjg3Niw0ODIxODkxLjY3MzYzNzYyLDU0ODM4NDIuOTk1MDQ3NzA2LDI3ODc3NTIuODEwNDc2NjgxNyw4ODQyMDQuNzY5MDgzOTQ0MSw3ODg5MjE2LjYwNjkyNjAzMiw2MjkzOTEuNTE3NjE3Njk2MiwxNjc3MTMwLjgyMTU5NDg4MDIsMTIxMTE0Ni41MjU3Njk0OTk2LDgyNDY4MTkuNzg4MDY3MjAxLDE3ODI3ODguMzExOTIxNDYyOSwxOTU5NzYyLjIzMjAxNjQ0NzUsMS44NTk4NjI5NDcxMzAzMjlFNywxLjExMjY3OTYyODgzNjM5NzVFNywzMzgxODM0LjI3OTA1MzMxMSwzMzUzMjg1LjY0NjQ3MjU3NSwxLjIwMzYyNTMxNjc4ODkyMzRFNywxMDI3NDY1LjEzOTMwNjQ1NCwzOTMyMDEzLjM3MTg3NTQ4MDcsNzM5NzkyLjUxMTkzMTY5MzgsNTU3NTk1Ny44ODU2NjYzODEsMi4wNDM3Mzk1NDA0MDk5Njk1RTcsMjE4ODk5OS4zMzE4ODI0Mzk2LDY5Mzc1OTQuMjA4NjIzMjEzLDU5NjY4My4wOTgyMjMwMDc1LDU3NzY5NDIuNDc5NjQzNTI2LDUyNTY3MDEuNjQwMTIxNzEsMTc3MjM1Ni4zNTE4MDkyODE2LDQ4MzkzNC41Mjc4NzY4MzQ1NgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTSVN0YXRlc09ubHlfRkRfUmVmZXJlbmNlL1Rlc3RTSS9odW1hbi9JbmNpZGVuY2VfMC5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNJU3RhdGVzT25seV9GRF9SZWZlcmVuY2UvVGVzdFNJL2h1bWFuL0luY2lkZW5jZV8wLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YzgzNzJmCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTSVN0YXRlc09ubHlfRkRfUmVmZXJlbmNlL1Rlc3RTSS9odW1hbi9JbmNpZGVuY2VfMC5jc3YKQEAgLTAsMCArMSwzMyBAQAoraXRlcmF0aW9uLHRpbWUsc3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vbm9kZS90cmFuc3BvcnQvcGlwZS9VU0EKKzEsVHVlIDI1IEphbiAxMSwwLjAKKzIsV2VkIDI2IEphbiAxMSwwLjAKKzMsVGh1IDI3IEphbiAxMSwwLjA2MzM1MDkxNzkzNTY2ODUxCis0LEZyaSAyOCBKYW4gMTEsMi41NDY1MDU4NTcyMDcxNjMKKzUsU2F0IDI5IEphbiAxMSw3Ni43ODY4MTY1NDQ4MTEwMgorNixTdW4gMzAgSmFuIDExLDIwNTguMzU0NzgwNDQxODQzNgorNyxNb24gMzEgSmFuIDExLDUxNjAwLjc4OTM0NjcxMzM2Cis4LFR1ZSAxIEZlYiAxMSw4NjU5MzUuNTQ2MjMwODcyCis5LFdlZCAyIEZlYiAxMSwwLjAKKzEwLFRodSAzIEZlYiAxMSwwLjAKKzExLEZyaSA0IEZlYiAxMSw3MTExODAuMTI1OTQ5MDIyCisxMixTYXQgNSBGZWIgMTEsMC4wCisxMyxTdW4gNiBGZWIgMTEsNDE3MTAzLjI4NTYwMjI5MDUzCisxNCxNb24gNyBGZWIgMTEsMC4wCisxNSxUdWUgOCBGZWIgMTEsNDE3MDQ5LjQ5ODM1ODk4MzY2CisxNixXZWQgOSBGZWIgMTEsMC4wCisxNyxUaHUgMTAgRmViIDExLDQxNzA0OS40NDMxMDMxNzQwNAorMTgsRnJpIDExIEZlYiAxMSwwLjAKKzE5LFNhdCAxMiBGZWIgMTEsNDE3MDQ5LjQ0MzA0NjYwODY1CisyMCxTdW4gMTMgRmViIDExLDAuMAorMjEsTW9uIDE0IEZlYiAxMSw0MTcwNDkuNDQzMDQ2NTUwOQorMjIsVHVlIDE1IEZlYiAxMSwwLjAKKzIzLFdlZCAxNiBGZWIgMTEsNDE3MDQ5LjQ0MzA0NjU1MTEKKzI0LFRodSAxNyBGZWIgMTEsMC4wCisyNSxGcmkgMTggRmViIDExLDQxNzA0OS40NDMwNDY1NTEzCisyNixTYXQgMTkgRmViIDExLDAuMAorMjcsU3VuIDIwIEZlYiAxMSw0MTcwNDkuNDQzMDQ2NTUxNDMKKzI4LE1vbiAyMSBGZWIgMTEsMC4wCisyOSxUdWUgMjIgRmViIDExLDQxNzA0OS40NDMwNDY1NTE1NQorMzAsV2VkIDIzIEZlYiAxMSwwLjAKKzMxLFRodSAyNCBGZWIgMTEsNDE3MDQ5LjQ0MzA0NjU1MTgKKzMyLEZyaSAyNSBGZWIgMTEsMC4wCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNJU3RhdGVzT25seV9GRF9SZWZlcmVuY2UvVGVzdFNJL2h1bWFuL0luY2lkZW5jZV8xLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0lTdGF0ZXNPbmx5X0ZEX1JlZmVyZW5jZS9UZXN0U0kvaHVtYW4vSW5jaWRlbmNlXzEuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAxY2M3MGMKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNJU3RhdGVzT25seV9GRF9SZWZlcmVuY2UvVGVzdFNJL2h1bWFuL0luY2lkZW5jZV8xLmNzdgpAQCAtMCwwICsxLDMzIEBACitpdGVyYXRpb24sdGltZSxVUy1BSyxVUy1BTCxVUy1BUixVUy1BWixVUy1DQSxVUy1DTyxVUy1DVCxVUy1EQyxVUy1ERSxVUy1GTCxVUy1HQSxVUy1ISSxVUy1JQSxVUy1JRCxVUy1JTCxVUy1JTixVUy1LUyxVUy1LWSxVUy1MQSxVUy1NQSxVUy1NRCxVUy1NRSxVUy1NSSxVUy1NTixVUy1NTyxVUy1NUyxVUy1NVCxVUy1OQyxVUy1ORCxVUy1ORSxVUy1OSCxVUy1OSixVUy1OTSxVUy1OVixVUy1OWSxVUy1PSCxVUy1PSyxVUy1PUixVUy1QQSxVUy1SSSxVUy1TQyxVUy1TRCxVUy1UTixVUy1UWCxVUy1VVCxVUy1WQSxVUy1WVCxVUy1XQSxVUy1XSSxVUy1XVixVUy1XWQorMSxUdWUgMjUgSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyLFdlZCAyNiBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDE5Ljk5OTk5OTQwOTUzNTY3LDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMyxUaHUgMjcgSmFuIDExLDAuMCwwLjAsMC4wLDAuMCw0MTEuOTM2Mzg2NzgwMTg2OSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzQsRnJpIDI4IEphbiAxMSwyLjQzOTQzODYyNzMxMjE4MDNFLTQsMi40NDgxNzAwOTgyMTA3NDE3RS00LDEuNzg2NTkzMjY3ODI5MDA5NEUtNCwwLjAwMjExODM4OTE2MDM4OTE3MDcsODQ4NC40ODU4Mjk1OTQ3MywwLjAwMjIxNzM5MDYwNjg3MTU2NjUsMy4xNjYxNjU2NjMzNTlFLTQsOC4yNTY2MTMxNzI4OTg2NjRFLTQsOC4wNTk4MTkyNTMzOTA0NjhFLTcsMC4wMDU4NTU1OTMwMTc4MDIwOTc2LDAuMDAzODQ5NDM2ODQwNDg5NDI2LDkuMDQ0NDYwNTA1MTc1ODdFLTQsMS40NzE1ODg2NjUzNDQ1ODUyRS00LDEuODE3NDg5MjQxNjI2ODc5N0UtNCwwLjAwNDI5NDc0MTg1NDI1NTUxOCw0LjUwMDA2NTc0OTc5MzI1N0UtNCw2Ljk1MTU5NDEwNjA0MDY0OEUtNSwyLjE4NDIxMTAxNzY2MzAyNzdFLTQsNC4xMTQ1Mzc3Mjg4MzcxMDRFLTQsMC4wMDEyOTEwNDg3MTQwNTkyMDMyLDkuNTM4MTI0NDM0Njk3Nzc3RS00LDEuMDc0NjQyNTY3MTE0MjU1MUUtNCwwLjAwMTc2NTAzMzI1MTMxNjQ4NDgsMC4wMDE1ODc3ODQzOTI4OTIzODA0LDAuMDAxMTczNzExMTc4NzYyNzM3LDEuMTUzMjI1ODA0ODM3MDA3NkUtNCwxLjI3Mjc3OTc5MDQyMjMzMkUtNCwwLjAwMTg4MzA0MjQzODIxMTg2NDUsNi4wNzE3MzA1MDQxOTI0Mjg1RS01LDIuMTExNjcyNjQ0Mzc1MzgyNUUtNCwxLjgxMjc4NzY4MDM5NTIwMzVFLTQsMC4wMDE2ODI1NTQ0MzQyODg5Njg5LDIuOTEwMjY2NDAyMDU1Mjc3RS00LDAuMDAyMjI5MDc3MzQ0NzIxODEsMC4wMDM3ODU5NjU3NjM5MjE3MTA3LDAuMDAxNzA5MDE3NTA3NTA4MjI4NSwzLjE3Mjg4MjE3OTQwMzYyM0UtNCw2Ljk1Njk2NzMxODgxNDQ5OUUtNCwwLjAwMTk0MDY3MDE0NTg4MDMwMTQsMi4zOTcxMjQ1NzYyNTE5MzE0RS00LDIuODg0MDcxOTg5NDk0NjcxNkUtNCw1Ljg3MDIzNTAyMjg2MzUzNTRFLTUsMC4wMDEwNTAyNjE2MTM4Njc1ODI3LDAuMDA1MzgzMjg3NjA5NTkxMTcwNiw5LjUyNTM2MzA1NDA5NTk3NUUtNCwwLjAwMTQzNTMxOTQ3ODY5MzQ3NDIsNi4yNzMyMjU5ODU1MjM1ODVFLTUsMC4wMDE0NjQ4MDQ5ODQxMjUxNDYzLDQuOTQ2MDQyNDE1MTQxNEUtNCwzLjI4NDM3NjM0NTc1MzgwMkUtNSw0LjM3OTE2ODQ2MDk4OTYyNzRFLTUKKzUsU2F0IDI5IEphbiAxMSwwLjAxNDgyOTYwMDczNDkyOTkxNywwLjAxNDg4Mzg5NzkwMzg4NjIzLDAuMDEwODYxNzQzMjczMjgyNDAyLDAuMTI4Nzc4MzI2NzM3NzQ0OSwxNzQ3MDguODA1ODIwMzE1NiwwLjEzNDc5MzMwNDEzMjA1NDEsMC4wMTkyNDg4NDU4NTk4OTI3MzQsMC4wNTAxNzk4NDkzMzk1NjIxNyw0LjkwMDExMzUyMDI5MjA2MkUtNSwwLjM1NTk2OTU2MTgwNTc1ODY3LDAuMjM0MDA2NjE0MDMyMzQ3NTcsMC4wNTQ5Nzc0MDE1MzU1ODQyNzQsMC4wMDg5NDY2ODI2NzM3NzkwMjgsMC4wMTEwNDkzNzg2ODE0ODM4MjYsMC4yNjEwODQ1ODU1ODc1NzI5LDAuMDI3MzU4NDc4MTg0Mzg0NTc2LDAuMDA0MjI2MzIyMjEyOTE0ODg1LDAuMDEzMjc5MTM1MjQxNTA0NzYyLDAuMDI1MDE0NTIxODAwOTMyMzUzLDAuMDc4NDg3NzYyNzg5NjA3MTcsMC4wNTc5ODYyMTcyODY1NzI4MzUsMC4wMDY1MzMzNTE0NzI1MDk2NjksMC4xMDczMDM3NjI1Nzg3MzI4NCwwLjA5NjUyNDYzMDY1MTczNywwLjA3MTM1NDI1NTMyNTM1NDYxLDAuMDA3MDExMTc3OTE5ODc5NTM1LDAuMDA3NzM3ODMwNTQxMDk2NjU5LDAuMTE0NDc2NDU1NjA3NDQ1OTcsMC4wMDM2OTEzMzQzMTEzMjY5MDUsMC4wMTI4Mzc5MTI2ODczMjM5MTEsMC4wMTEwMjA3Nzg4NDQ3MTY1NTYsMC4xMDIyODg5Njk2MDc4NjY3MSwwLjAxNzY5MjgwNDQ1MzcxMDc2LDAuMTM1NDgzODE4MzYwMzcxODIsMC4yMzAxNjM0Nzc2OTkzMDc5OCwwLjEwMzg5OTAxOTU5MjU1NjA4LDAuMDE5Mjg5Njg0MDM5MTg5OTgzLDAuMDQyMjk0MDUwOTk5ODg0MjksMC4xMTc5ODIwMzA1MDMyNDM4MiwwLjAxNDU3Mjk0MTg1NTE0MTgxNCwwLjAxNzUzMzkzNTI4MTQ2MzA5MywwLjAwMzU2ODg0ODk0MzI1NTUyOCwwLjA2Mzg0OTY5MjAwMDA2MjkxLDAuMzI3MjY2MTM4ODM1NjcyNSwwLjA1NzkwNTE0MDI3Mjk0NjM2LDAuMDg3MjU4NTQzNjQ1NjksMC4wMDM4MTM4MjY0MTIwNDQyMjU4LDAuMDg5MDUwMDgyMjAyNTQ3NSwwLjAzMDA2OTY5MTgwNzIzMzkzLDAuMDAxOTk2Nzg3ODgwOTk2MTUxLDAuMDAyNjYyMzM3ODU5MTUyNjcyNQorNixTdW4gMzAgSmFuIDExLDAuNjAxMDg2MTkyNTAwOTA1MywwLjYwMzMzNjc4NjE2Mzg3OTQsMC40NDAyOTI2MDc0NjA5Mzk3Myw1LjIxOTcyMzc2ODU4MTkyNCwzNTc5MzY4LjcxMDMyOTg4NzUsNS40NjMzODgxMTkwNTM3MTEsMC43ODAyNjc5MTg3MjAzMjgsMi4wMzM0MDM1Mzk2NjQzNDI0LDAuMDAxOTg2MzQ2NzI2MDU5Nzk4LDE0LjQyODU0Njg5NTUzODE4MSw5LjQ4NDc2ODMwMTIyMzYzMywyLjIyODE5NDg1NDk3NzE2MywwLjM2MjY2NTAxOTMxMDM1NDMsMC40NDc4OTA0Njg1MzkzOTI4LDEwLjU4MjYxOTIwMjc0NTc1NywxLjEwOTAwMzc3OTAwODc2NTUsMC4xNzEzMjAzMTI4NjUyNjA0MiwwLjUzODI4NTkyNjgyODc3NTQsMS4wMTM5ODQ1OTY4MjUwOTUzLDMuMTgxNDc5Nzg0Njg4NTY4MywyLjM1MDQ2ODgwMjYzMjg1NiwwLjI2NDgzNTM4MzkxMDgzMDYsNC4zNDk1NTYwMzQwMDM5MTksMy45MTI0ODM4NTgwMjE2MzksMi44OTIzMjA0MzkxODQwNTksMC4yODQyMDc1ODczMDA5MzE5MywwLjMxMzY1NTY0NzAyNDAxOTA1LDQuNjQwMjM2NDQ2MDQ1OTI0LDAuMTQ5NjMxMjM3MTUxNTMzOTUsMC41MjAzOTE1MTkxMTAwNjc4LDAuNDQ2NzMwNDc2NjE1MzY1MjUsNC4xNDYyNTg1OTA5NjE4NjQsMC43MTcxODA2MjA0MjE5NTkyLDUuNDkwNTYyMTIwNDc2MjY4LDkuMzI5NjIxODI5MDEyMzcsNC4yMTE1NzI5ODk2NTE5MTUsMC43ODE5MjM1MjUxNjc3ODIxLDEuNzE0Mzc3Njc3NjI0NzYzNyw0Ljc4MjQyMjU0NzE4NjkzMywwLjU5MDcwNjQ3ODkxNjgyODMsMC43MTA3NTYyOTgyNjY3NzMzLDAuMTQ0NjY2NzkyNjM1MTAyODIsMi41ODgxNDE2MDcwMTc4NDA3LDEzLjI2NTQ2MjkyNDE4NzUwOCwyLjM0NzAzOTQ4ODQ5NzkwNjIsMy41MzcwMDE0NjQwNDc4MDQ3LDAuMTU0NTk2MjI5ODAxODc1MzUsMy42MDk1ODAyMTIyMzQwOTcsMS4yMTg5MDAxMDQzNjAyNzM0LDAuMDgwOTQyOTQ2OTM5NjM5NDgsMC4xMDc5MjAxODU2MjAwMTkxNAorNyxNb24gMzEgSmFuIDExLDIxOC41MTA4MzEwNDQ5NzI4MywyMTkuMzc2NTUyMDE4MDcyOTQsMTYwLjA5MTU3MzY1Njk3OTg1LDE4OTcuNDc5MjM2ODIyMjc2OCwzLjA4MzI5NTY1NzI1MjhFNywxOTg1LjkyNDAzOTQzNDA5MTgsMjgzLjcwMjY5NDE0Njc0MDYsNzM4LjY5MDczNTk4MTY0NjUsMC43MjIyNzE4NTUwMjc3NzU3LDUyNDUuMjM4MjU1NjUxNTQ3LDM0NDcuNzg0MjA2NDAzNTMxMiw4MDkuODIwMjM5ODM3NDc1MiwxMzEuODY3MzkwMzU2OTE4NDYsMTYyLjg0NjM5MTU0MzE4MjIyLDM4NDcuMTcxODk4ODYxNzQzLDQwMy4yMzQ4NzA1NzYzNTEyLDYyLjI5NDE4MjUxNDM1NzQ1LDE5NS43MjM4MzI0NzAyMjc4OCwzNjguNjgxNDc5MDA4NzM2NDYsMTE1Ni42OTIwNjgyNzA2MDQsODU0LjU3MzkyNzUwMDEyMSw5Ni4yOTM3NjQ2MTk0OTM0MiwxNTgxLjM5NjUyMDIyNDI3ODIsMTQyMi4zNTMyOTEzNTYzNzIyLDEwNTEuNTU3ODg0NTU0NjI1OCwxMDMuMzQwNDA1MTg5MDI5NDEsMTE0LjA0MDUzNzc1NzM4MjEsMTY4Ny4wMTkzOTA4ODkyMDU2LDU0LjQwNTM0MDM1ODkzNzg2LDE4OS4yMDg4MDM3NTkwMzA0NywxNjIuNDIzOTc4NDk5MzIwOCwxNTA3LjQ2MDQ1MTQ1MTQxNTMsMjYwLjc1MzAyNzA1MTc0MDksMTk5NS4wMjQ2NTk3NTE5ODU0LDMzOTEuOTgzMzQzNTg4NTA5LDE1MzEuMjU2MDI2ODc2NjQ0MiwyODQuMzA0ODU1MTc5OTcwMDUsNjIzLjI5NzA4MzMxNjA1MTcsMTczOC43OTg3MjUwMDI0MjAzLDIxNC43NTk4OTYwMTA0ODk2NSwyNTguNDMyMDQ4OTEyNzQzNzcsNTIuNjAwODYwNDY0OTAzNDg0LDk0MC45ODMyODIxOTUwMzU1LDQ4MjIuNzU4ODAxNDc3MzUyLDg1My4xOTA1OTY4NTMxMTY3LDEyODUuOTQ5NzI2NjAyMjQwNCw1Ni4yMTAyODI2MjEwODY2NCwxMzEyLjI5ODI1MDE2NzY1NjUsNDQzLjE4ODA0NDg3NjkzMjA1LDI5LjQzMjAwMjY0NTk5MTUxNywzOS4yMzk1MTIyNjk0OTU5Cis4LFR1ZSAxIEZlYiAxMSw2OTgyOTEuODE4NDkwNTIsNDY2NzEwOS40MzA1MjE5MDksMjgxNDMzOS44NDQ3NjY2NjUzLDU3MjQzNzQuNjQ3OTAxMjEsMS45NzA5MTQyMjE4NDY3NTNFNyw0ODMwMTQ1LjMzMjMwMDM5LDM2MzIzNDIuMTc3MDA0ODMxNCw2NjAwNDAuNTY0Njk2MzE1MSwxMTI0MjUuMDE1NzAxMzkwNDcsMS43NzcxMjIxNDI5MDcxOTVFNyw5MTY4NDU2Ljk2NzM1NTY0OCwxMzc0NzMzLjI5MTQ2MjcwNTUsMzA3MTQ5OS4wMDE3NzU5OTc3LDE0MDM1MzcuNTg5MDgzMjEyNCwxLjM3ODcxNzE2OTE2MTk2ODlFNyw2NDIyMzE2LjY4MjM1NTkwMiwyODE2Mjg0LjIxNDY1NzU5Myw0MjQxNTA5LjYwOTgzMjMzOCw0NzY0NDQzLjMwMzcwNDQ1Miw2OTU2NTcyLjMxMjY1NDAwNCw1Nzg2MTkzLjI1OTg5Njg2MiwxMzUzODExLjk2Nzk3NDM0MzMsMS4wODUzNTEzMTE1MTc3MjE4RTcsNTQ1MTEwNy41NTcyMDUxNDYsNjEzNTAyMC4zNTA1NzAwOTIsMjk5NDgzMi42ODEzMzIxNDU0LDk3ODc0Mi44Njk4MjYxNjQxLDg4NDgyNjUuMDUxNzAwMTc3LDY4NTQ5MC43MDg4OTExNzU3LDE4NDc2MTYuNjU4MTkwMjAxNywxMzQyMzE5Ljc3MjI0MDg1MDYsOTIxNTc4My4xOTA4OTg1ODgsMTk4MDk3Ni4yNzk1NjA0NDM3LDIyOTEwMDUuODY3NDU1MTE5LDIuMDc4Mjc3MTEzODc5Mjc4RTcsMS4yMzQxNzExODA2MDUzNzdFNywzNjc4NTc3Ljc3NzA2NDM2MzUsMzc0ODc1Mi4xNDA1MjM5MTc1LDEuMzM2OTU4Nzc3MDkxNDk0MkU3LDExNTE3NjEuMDI3MjA4MzM4Nyw0MjMzMTQwLjU2ODQ0MzExNyw3OTg4MTMuOTI0Njk3MTIsNjIxOTE1NS42NzY2MjkyNDEsMi4yOTc0OTI3MDMzMzc3NjZFNywyNDkzOTUxLjg1MTg0NjA0OCw3NzU1MjY3LjI5NDA3ODExNSw2NTI0MDMuOTYyMzAxMTUxLDY0ODgzNTcuMzYxMTQzMjkzLDU3MTg3MDYuMTQyNDk2OTE2LDE4MDg0MTQuNDc1NzU5NDg4LDUyNTUzMS42MzQ0MTY3NTQ3Cis5LFdlZCAyIEZlYiAxMSwyNDYzMTEuMTM4ODA2NDExMywxNzY1NDAzLjcwNjg2NDc5ODIsMTA3MDczOS41NDgxODAyODkzLDIwMTUzMDEuNTgyOTY5NzEzLDEuMzI3ODkxMTU0NzcwMDI5OUU3LDE2ODczMDcuNzIzODc0MjYwMiwxMzQ5MDczLjcwNjg2NzQyNjksMjI0MzA3LjI4MjczMjcyMTksOTIzMTkxLjMxOTM4ODgyMDksNjI3OTg5OS43NzUxNjQwODcsMzIxMzI5OC4wNDExNzU5ODY2LDQ3NDU1Mi4xODQzODY1NTU2MywxMTUwNjU5Ljg4NzY4OTUxMDEsNTA0MDE5LjA2MDUyMDUxNjc3LDQ4Nzk3NTguMTYxMjIxMTM0NSwyNDMzMTI2Ljg0MTE3NzkyOTcsOTg4MDg2LjUzMjA2ODA2MTgsMTYwMTgxNS4zODM4NzQwMzU3LDE3NzEyODUuNjgwNDE0NjIsMjQ3Nzg5Mi42NTI0NzQ3MiwyMDYzMTQ5LjE2ODE5NjY0NzcsNTA3NjY3LjE5MjE4OTg1OTEsMzg3MDY5OC4zMzE5NjgzNzk3LDE5MzI1MjkuNTQ2OTAyOTQ0MywyMTg0OTE3Ljc4OTc3ODEyODcsMTA4MTI1NS43NTgzNTIyMDI0LDM1MTM5OS4xMzE1NjU3MzUxNSwzMTQ5NjQ3LjI5NTk1NTgyNSwyNTQxNjIuMzUzNTczNTUyMjcsNjY4NjgxLjE3OTYzMDQzNzIsNDgxMTA4LjQ3NDM4NTg3MTMsMzI4MjkyNy4xNTc0OTY4MjI1LDcwNzk1Ni4xMDMwNzY1NDYsNzgzMTUzLjIxNTA0NjQwNTMsNzQwMzUyMy42NTU4OTIzMjY1LDQ0MTkwODEuMzQ0MzAyODk1LDEzNjc3NjkuNTI4NjM0NzMwNSwxMzM1Mjg1LjA1ODY5MTk2MDgsNDc3OTYyMi42OTQ1MTM3NjEsNDEwMDI5LjIxMjgxMTkxMzEsMTYwNjM1MC4xNjQ1ODUxNDY2LDMwMTYwNy4zOTQ4NDUxODcxNCwyMjE2ODgyLjQzMTMyOTA5MDYsODE3MjczOC4zMjA5NTQxNzQsODc3MDQ3LjY5OTQ5NDU1NDQsMjc2MjQyNi4yMzM1MTg1Nzc2LDIzOTgxOS40NzUyNTYzNzMxNSwyMzA4NzY0LjQ5ODM3MTQxMywyMTI1NzE2LjYzNjAwODgzMiw3NDk2OTcuNjg3NjE2NTEyMSwxOTYxMTAuMTIwMjk4NDkyNDMKKzEwLFRodSAzIEZlYiAxMSwyNDU0NzQuMjkxMTMxMDk4MjYsMTczMjQ3Mi44ODQ1Njc4MTQ2LDEwMzcyMTUuMDAxOTk2MDA3NSwyMDA5MTExLjI0OTc1NDE3OTMsMS4zMjc3MDMyMjIzNTY0NDE2RTcsMTY4NTQ2Mi4yOTYzNzM4NTY3LDEzMjgwNTUuNDI1NjM0MTM2NywyMjQyMTIuMTY2MDM1MjYzOTQsMjkwNjcyLjk0MDQ3OTMwODk1LDYyNTc1MzMuNzE4NTU4ODg0LDMyMDY5MTkuMzczMjYzNzkzLDQ3NTExMS4zNzkwMzQ0ODQ0NSwxMTQ1MzM1LjgxMzM0NTA1ODgsNTA4OTAwLjc0NDU0NTAzNTY1LDQ4NjI1NDkuNzIxMDU2NzY5LDIzNjAwNDMuODg4MjczMjY5NCwxMDk0MzE5Ljg0NzU4ODI3ODgsMTU3NTgyMy43Mzg0MTEzMzY3LDE3NDIyOTguODQyMjQ1MjQsMjQ5NDUxOC4yMjQyMzY1NzI2LDIwODMwMzMuMjIwMzEwNzkxNCw0OTU5NTguODM0ODcyMjQ2MiwzOTA4OTkwLjA2OTIxMTY1MzQsMTkyNjM0Ni45NjI0NTMwNDU5LDIxOTc2NjcuMDE2NjU1NDY1NiwxMTM0MDg4LjE1NTA0Njk5MTUsMzU0ODM3Ljc5MTAwMzI0NDksMzE1ODI0Ni4xNTc1Mjg0MzUsMjUwNTQ5LjEyODc1MDE0OTE2LDY3MTkxMy40ODQ4MjY4ODU0LDQ4NjE1OS4zODE0NDk4NzkzLDMzMDY0NTguNjIwNjQyMTg0Myw3MTU3MzQuNjM4MDk0OTk3LDc4MzM5My42NjUyODU4NTg0LDc0NTcwNDQuMDQ2ODYwNDI0LDQ0NjY3OTIuNDE4OTAyNzUyLDEzNDUyNDQuNDgwNjYzNzQ4LDEzNDQyNDUuNDYxNjcxNzMxNCw0ODMyMjE2LjU3NjYzMTE5Myw0MTE0MDkuNjI5MjIxNzI4OTQsMTU1Njc5MS43MDM5MzI2MDMxLDI5MzE3Ny43MDg1NTA2MDE1LDIyMzcxMjkuMzkxNTI5MzY0LDgxNzQ0OTMuOTY2MTUxMzg1LDg3NDU1OC40NTkxNDg1ODAzLDI3ODExNzUuODI3MDI0Mzk4LDIzODA3OC45NzMzODc3MTg1OCwyMzExMzc3LjEzMzU1MTE5MTUsMjA5MTE5Ny45NTk4NjgxNjI2LDY5MTkxMS40Nzk0NDc1NDE4LDE5MjMyMS43NzcxMDUwNDgzCisxMSxGcmkgNCBGZWIgMTEsMjQ2MDQ1LjE0OTg5Mzc1Mjk3LDE3NTQwNjIuMjk3NDExMTIzOCwxMDU4NjQ4LjM2NTMzMjQyNSwyMDEzMzQxLjIzMDIzODE0MjIsMS4zMjc4MzY4NTA3Mjc4NzRFNywxNjg2NzQzLjEzNjM4MTQ1MzgsMTM0MTkzMC42MTY2OTMyMzA2LDIyNDI4NS4yMDU0MTEwMDk3NSwzMjE5OTAuMzc5MzYwOTY1MDUsNjI3Mjc3My4yNjg3MDI4MywzMjExMzA1LjI5OTc5MDAxNjQsNDc0NzMxLjk2NzUzMzc2NjEsMTE0ODkyMS4wNDc0OTY3NTUsNTA1NTIzLjM3NDU3ODM2Myw0ODc0MjY4LjcyODY2MjYwNSwyNDA2ODk4LjM5MDkzMTQ3NjQsMTAwOTg1Ni44NTMzODcxOTExLDE1OTI5NDQuMjY3NDg0ODY1LDE3NjE0MDQuODU2ODgwODcwNCwyNDgzMDY0LjkxODI1NTM1MiwyMDY5MjY3LjA1NTQ0NDc0NzQsNTAzNTczLjU2MjU3MDMyMiwzODgyNDY4Ljk3NTM1MTI4NzUsMTkzMDU1OC4wMTg3MjE3NzA3LDIxODg4OTcuODcwNTI5Mjk2LDEwOTUyMTcuMzIzMTkwODAxNSwzNTI0NTguMzE1NzkxMjkxMSwzMTUyMzY5LjcwNTA0NTcyMTUsMjUyOTQwLjc5ODU1MDIyNjkzLDY2OTY5Ny44NTA4ODI5OTc5LDQ4MjY1OS40MzExOTM1NDczLDMyOTAyMzQuODQyMjczMDIzLDcxMDMzOC41MDc0OTg5Njk0LDc4MzI0My43OTAwNDY5MTk1LDc0MjAxNDAuNDU5NzkyMTEzLDQ0MzM3MTEuNjkzNDQ2NzQ3LDEzNjAwODguMzE1ODAwMTU2MiwxMzM4MDcyLjY1NzIxNzY1NDIsNDc5NTczMS40NzU0Njk2NDcsNDEwNDY0Ljc5OTgwNTE1MDY2LDE1ODg1MDkuNzAyODE4NTY2NywyOTg2MDUuNjI3NTc1NDg3NjYsMjIyMzEyMy41Mzc5NzU1NjEsODE3MzMzNy44Mjg5NzcwNDYsODc2MjYxLjQzOTIxNjg1ODQsMjc2ODI1Ny41MTcyMDQ5NDAzLDIzOTI0Ni44MTU2MTg5Nzk0OCwyMzA5NjAzLjE2MzgzOTg0NCwyMTEzOTU1LjgzMTgzMDgxNyw3MjUxOTkuODI2MDc3NDYyMiwxOTQ4MDQuMTkwNjQyNjEzNQorMTIsU2F0IDUgRmViIDExLDI0NTI5NS4wNzI1NzE5NzExLDE3MjYyNjMuMzY5ODg4MzE1NywxMDMxMjM2LjU0NTYyMDY0NjMsMjAwNzc3My45MzE4MDYzMTMzLDEuMzI3NjQ4NTQ5ODQ5NjQxNUU3LDE2ODUwMjEuNzM3Njg0NzgxLDEzMjQwMjAuMDE4OTU5NDQ3NSwyMjQxNzEuNjU2MjAxMDMwNjgsMjg1MjY4LjIwNDUyNjY0MzczLDYyNTI3NzEuNzk0ODYxMzgyLDMyMDU0OTEuMzM1MTYzMzA0Niw0NzUyMTMuOTIwMDI0OTUwNSwxMTQ0MjY3LjgzODYwMDg1NDIsNTA5OTQwLjc0ODkyNzY0NTYsNDg1ODg5Ny4xMTk0NTk0NTUsMjM0NjkyNC4zMTk2MTM5OTY0LDExMjQ4NTcuNTEzMTEyNTQwMSwxNTcwODcwLjM1MDkyNzMwOTYsMTczNjc1My41MDQxOTAzNTEzLDI0OTgwMjUuMDg0MDIyNjMsMjA4NzI4MC4xOTYxODQ2OTM0LDQ5Mzc4Ni45NjMyNzQwNjQ2LDM5MTcxNzYuNTY0MDEzMTUzMywxOTI1MDM0LjgyMDk5NTYyNzcsMjIwMDM0NC40MTg3ODk0NDA4LDExNDY5OTAuMTAzMDIzMDI5OSwzNTU1NzAuNzIxNDkyMjc5MiwzMTYwMDA5LjU5MjM3MzQ4NDcsMjQ5ODUxLjA1NTA4ODY5MDcxLDY3MjU4NS43MzU4NTQ0ODg3LDQ4NzIzOS43MDk2MTg4NjA1NiwzMzExNDMyLjg0NTY0NTk4MzcsNzE3NDAzLjQ3OTMzODIyMzMsNzgzMzk4LjU0NTg1NjkxMTcsNzQ2ODM2MC42OTI3NDc0NDk1LDQ0NzcwMTMuMTUyMDkzODMzLDEzNDA5MzcuMzYzNzA2MzAyNCwxMzQ2MTM1LjUwMjg1ODI0MzQsNDg0MzQ5OS40NzQ2MzMyMzU1LDQxMTY5NC42OTIwNjI3Nzc5MywxNTQ3OTMwLjM4NzA5MDExOTgsMjkxNjQ5LjMyMjc3Mjg1MywyMjQxNDQ1LjM3ODQ4MDM5OCw4MTc0NzQxLjYzMzg1Mzc4Miw4NzQwMTcuMjk5OTQ4ODY5NywyNzg1MTMyLjE4MTU2MDMzLDIzNzczMS41NTg0NDk4MDI3MiwyMzExODkwLjU5MzU0NTAwMywyMDg0NTkwLjUyODYyODkzNyw2ODM3MDkuNTU1OTAzNzksMTkxNjA2Ljc5OTQ4MDIzMjEyCisxMyxTdW4gNiBGZWIgMTEsMjQ1ODg2LjE0MzYyMzA4NDc2LDE3NDgzMTcuODA2MzczMzM3NywxMDUyOTMxLjE2NjU5OTc1OSwyMDEyMTU0LjM0NDc4NzgxNzQsMS4zMjc3ODMwOTI0NTM4MDIyRTcsMTY4NjM0Mi43MzU5NzcwMjU3LDEzMzgyMzIuNjYwODcyNDE2OCwyMjQyNDMuNzEzMjkzNTc0NDYsMzEzNjAyLjY1NzUzNjEwNTgzLDYyNjg1NDcuOTc2NTQ5MzkzLDMyMTAwMzAuODExMjkzNzQxLDQ3NDgxMS41NTQ5NDQwODE5MywxMTQ3OTY3LjU5MjkyNjI2MjYsNTA2NDEyLjU0NTY0NDczNjAzLDQ4NzEwMjYuOTQ1NTc5OTg2LDIzOTQzOTguNzI0MTY1MTU0NiwxMDMxMTUwLjQ1NzY5MDIwNjcsMTU4ODM5MC43MTYzOTY3Njk1LDE3NTYzMTIuNzExMTMxMzczLDI0ODYwNzEuOTA3MjAwODkzNCwyMDcyODkwLjU3NTAzNTQ1OTQsNTAxNTQzLjIzMzE4MDQ3MjE2LDM4ODk0NTAuNTg0NDY2MTgxNywxOTI5MzkyLjk0NDIzODU4NiwyMTkxMTk2LjUyMzUwNjMwNSwxMTA1MzI0LjA0MTA3Mjg4NTUsMzUzMDg0Ljc4MTAwOTg1NjUsMzE1Mzg4NC45MTY1Mjg1MjU4LDI1MjMwMy4zODM0MzIxMTAyNSw2NzAyNzkuMzQ3Mzg5NzcwOSw0ODM1ODEuMDEyMzgxMjYwMzQsMzI5NDQ5Ni45NTQ4NzA0MjcsNzExNzU5LjQ3OTU1MjI4MzIsNzgzMjI3LjcyMDQ3NTk0NzgsNzQyOTgzNi4wNDgzNzYxNTYsNDQ0MjQyMi42NjUyNzA0OTgsMTM1NjEzMi4xMTYwMDAyNDc3LDEzMzk2OTMuMjg4MDAzMjksNDgwNTMzOS4xOTA2MTg4MDgsNDEwNzA5LjkyNzU1NDUzOTksMTU4MDA0Ny44NjQzNDIyMjk0LDI5NzE1Ny43OTA3Njg4OTksMjIyNjgwOS4yMTU5OTQzODksODE3MzUwOS41NjgwNDc1NzQsODc1NzgwLjg5NTcxNTk2NCwyNzcxNjQ5LjUyMTkzMTkzMywyMzg5MzUuMTQ3NDQxNDg0MjcsMjMxMDAzOC4zMjE3ODY5MTg3LDIxMDc4OTAuNDEzMDY1NjQ0LDcxNjI5MC43MTU4NDM0NDkzLDE5NDE0Mi40ODI0MjI3NTg0MgorMTQsTW9uIDcgRmViIDExLDI0NjAxNS44OTIxNTY2MTk3NSwxNzUyNTUwLjQyNDM1ODc2OTgsMTA1NzA4My4xMDk5NDkzMTAzLDIwMTMxMzMuOTQwODAxMTQ3NCwxLjMyNzg0NjA3MzI4NTc4M0U3LDE2ODY3MjEuODc0NTA3NjMzLDEzNDA5ODAuNjQ1Mzg4MzQxNywyMjQzMDIuNTM3Mzk3MzExMTYsMzE4NTIxLjI4Mzc3MTI0Myw2MjcxOTcwLjIxOTU0Njg1NywzMjExMTM2LjA5MTkzNTk4MjUsNDc0Nzc1LjM0NDU0NTE0MzksMTE0ODY4NC4xMDkxNDIzNzczLDUwNTczOS4zNjQ1NzY2NTMsNDg3MzY0Mi41Mzg5NDU0NjksMjQwMzQ5Ny41NzMzOTAwNTk2LDEwMTQ3MjMuMjc1MjcyMDM2NCwxNTkxNzU1LjYzNDg2ODQ1NzcsMTc2MDA5Mi4zMTU0MTM0OTQ0LDI0ODM4MTAuMzA0OTM0Nzc4LDIwNzAxNDQuNTQ3NTczMjQ0Miw1MDMwMzUuODcwMzAyNTA1NzMsMzg4NDE1Ny4zMDMwMjc3NDIsMTkzMDMzMi45NjY2MDMwNjc1LDIxODk0NzMuOTMxODgzNzUzLDEwOTc0NjQuMDQ5NTcxMDI2MSwzNTI2MTAuMzk3NjEzNjMzMjUsMzE1Mjc4NC41OTEyMjU3MTM1LDI1Mjc3OC4wMzQ1MDI1NTI2Miw2Njk4NDQuNjUzMTQyMDgzOSw0ODI4ODIuMTY1OTEzNzU4MywzMjkxMjg2LjMyOTczMTY3OSw3MTA2ODAuNTY0MjcyODgzOCw3ODMzMDYuNjkzMDc1OTA2NSw3NDIyNTMwLjk5MDk5Mjk0Nyw0NDM1ODEyLjg1NzYyNzQyMiwxMzU5MDY4LjEyNDQ5MDQ5ODgsMTMzODQ3NC4zODI3OTE1ODQ0LDQ3OTgwNDQuNTM5MTMxNTY0LDQxMDUyOS44OTU5NDA5OTc0LDE1ODYxOTkuNzk0MDgyNDc1NiwyOTgyMTQuOTAxNjE0MjI1NCwyMjI0MDE4Ljc5NjIxOTQ0Nyw4MTczNTQzLjA5NzM2NTA0OCw4NzYxODAuODg4NjkwNjQ0NSwyNzY5MDk3LjYyOTM0NTUwODMsMjM5MTcwLjIwMjI5MDkyNzAzLDIzMDk3NTAuNzIwNDMzMTEzNiwyMTEyMzkzLjI2MjA5MDk0Myw3MjIzNjUuMTkzODk1NDA5MSwxOTQ2MzEuNTMyMTA2NjQ3OQorMTUsVHVlIDggRmViIDExLDI0NTc1MS45MzU4OTAwOTQxNywxNzQyNzY5Ljk3ODQ1MDMyOTUsMTA0NzQ2Ny44MTA4MTc2MzQ5LDIwMTExNzYuOTAwOTA2MDUyLDEuMzI3Nzg2NDQwNDk2NzA2NEU3LDE2ODYxMzAuOTQ4OTAzNDEwMiwxMzM0NjcyLjA0NDk0MjgzOSwyMjQyNjkuODU2ODc2MTcyNDIsMzA2MzU1LjIxNTg4MDYwNzY2LDYyNjQ5MjguMTM2NzU5MzYsMzIwOTEwNi4xMTg4NTgzNzgsNDc0OTU2LjY5MjkzMzMzMjQsMTE0NzA0My4xMTg0OTg5NTYsNTA3MzA2LjUwMjEzNDY4NzYsNDg2ODIzMC4zNjcyNDk4NDEsMjM4MjQ1MS4wMjI1OTY2NTM2LDEwNTQ5MDQuOTg0MzczMzgxLDE1ODM5ODUuMzAxNjEzNjM0NywxNzUxNDEwLjkyNDI4Mzk5NzQsMjQ4OTEyNy43NjkyNzI2NTUyLDIwNzY1NDEuNDA4NzQzMDQxNiw0OTk1OTQuOTA0NjUxMDAwODYsMzg5NjQ4MS45MTkyNDYwMzE0LDE5MjgzODkuMzkyNzQxMDUzLDIxOTM1NDQuMjQ1MTMzNzYxMywxMTE1ODEyLjEyNjgwNzU5MywzNTM3MTQuNTk0OTQ2Mjg5NSwzMTU1NTExLjg2NDU5MDQ3NSwyNTE2ODkuNDMxNTM2OTA1OCw2NzA4NjkuMDQ2MjU2NTUwOSw0ODQ1MDcuMzc5OTM4MTU4OTYsMzI5ODgxOS42MTYxMzM2NTA4LDcxMzE4OC4yNjY2MDA5OTYzLDc4MzM4NC44MDk4NjY5MjU1LDc0Mzk2NjYuOTc1NjI2MDQ0LDQ0NTExNzkuMDM1NDUxNjU2LDEzNTIzMjMuOTQ3MTg3Njg5OCwxMzQxMzQwLjI1MTk0MDE0MjYsNDgxNDk5OC45MjU1ODQwNDMsNDEwOTY4LjMyMzc2MjE2OTA1LDE1NzE5NjIuOTIwODQ2NTc5NCwyOTU3NzIuMjc3MDM5NzEzNCwyMjMwNTI2LjExODg2ODQ2ODMsODE3NDA5My43Mjc2MjY2MjcsODc1MzkyLjc3NTMzOTgyMjgsMjc3NTA5NS4zOTEyNDk2MTYsMjM4NjM1Ljc3NDY4MzkyOTYzLDIzMTA1NzYuMTIxMzM3MDE3NSwyMTAyMDUxLjQ4NTU1MDcsNzA4MDI3LjMwODE2MDgyMzksMTkzNTA2LjI4MjYzMTQwMDUKKzE2LFdlZCA5IEZlYiAxMSwyNDU0MDguMTMzMTA0ODYwNCwxNzMzNTMzLjI3NTQzNzQ0NiwxMDM4NTQ4LjQwNDQzOTg4ODUsMjAwODUxMy4yMDk1NzMyODIyLDEuMzI3NDcxMDMyMDQ4OTU2RTcsMTY4NDc1NC4zMzM2MDM2OTYyLDEzMjg2MjIuNTQ2Nzk1ODcxNiwyMjM5MzQuNzAzNDAyNjk3MjgsMjk2OTY0LjUxMzA3MjEzMjcsNjI1NjAwMC41MzEwMjUwMTk1LDMyMDU3MzkuOTkzNzMxNzQxMyw0NzQ4MTAuODEyOTk4NzU2OSwxMTQ1NDI4LjUyOTQ5MTQwNzYsNTA4NzY2Ljk2NzY0NjMwMTUsNDg2MTQ0OC44ODg2MTI5MzQsMjM2Mjg2Ny44NzEzMTA5MzYsMTA5NjM2Mi4zNzY0NDIzMTkyLDE1NzY2MTYuMzIzNzM1NzgsMTc0MzEwMy4zMDU4NDc3ODYxLDI0OTM4NDEuMjk1MDMyMDAxNiwyMDgyNDQwLjE0MzU2MzcxMDIsNDk2MzUwLjg1MTA4MTgxNzQsMzkwNzg3NC44MDY5NTA1Mjg2LDE5MjU5MzkuNTM4NTA2OTM4LDIxOTcwODMuMDgzNDgzNTAzLDExMzQyNTguNzE1NTMyNTg2LDM1NDc0NC4wNzQzMjYzODM3LDMxNTc0ODMuODgzNTM5MTgzLDI1MDY0MS41MDIxMzAzOTQsNjcxNzg0LjAyNDcxMjkwMDQsNDg2MDI2LjYwMjExMzQwOSwzMzA1NTUyLjQyMzc4ODA0OTcsNzE1NTMxLjU2MjIwMTU0NzksNzgyNjU0LjY0MjU1NTI0NDIsNzQ1NDk5Ny43MjI1OTM5MjcsNDQ2NTU1My4yNDczNzE2MSwxMzQ1ODcxLjg1MzY1OTY2OTQsMTM0Mzg4MC42NzA2NjgwODQ2LDQ4MzA4NDkuOTQ2NTU3MjcsNDExMzA4LjEwNTAxNDM0NzIsMTU1ODczNi44MjExNzE3NzQ4LDI5MzQ5MC42OTc1MzczMjcxLDIyMzY0OTUuODU1MjU1MzIzLDgxNzI2OTkuNTA2NTI5NTc3LDg3NDI4My41MjQ4Nzc3MjY2LDI3ODA0MTkuNzk1NDA3MjQ2LDIzODEwNC44NzU3MTYwMjk1NSwyMzEwODUxLjU4MzExNDE1OCwyMDkyMTUxLjczODA3NDIwNiw2OTU1NjUuOTE5MTAyNjU3MSwxOTI0MzcuMDU1MTA2Njc1NTQKKzE3LFRodSAxMCBGZWIgMTEsMjQ2MTkzLjQ0ODQxNjc2NzIzLDE3NTUwNDEuODU4MjQzMjgsMTA1OTQ1MS42MDE1NTk1OTAzLDIwMTQ1ODkuMDE1Mzg1NTAzLDEuMzI4MTc1MTIzNzY2OTU5RTcsMTY4Nzg1Ni41MzUyMzIzNTIzLDEzNDI2NzguNzIyODQ1MDQ5OCwyMjQ2ODIuMDAxNTYyNjM3MSwzMjAxNzQuMzUxNjExMjcyOCw2Mjc2NDExLjM5MTEzMzY3MzUsMzIxMzM3Ni43MDQyNTM4MTcsNDc1MTIwLjM3NjE5NTQ3MzYsMTE0OTE1Ni44OTE3MjkxMzI3LDUwNTQxMy43MDg4MTMzOTE3LDQ4NzY5NTguODg3NTY3NTA0LDI0MDg3MzAuMDU2NDY2Njc4NiwxMDA2NzUzLjg3MDg2MDMzNTMsMTU5Mzc1My4zNjAxODY0MDc2LDE3NjI0MTUuMTI0OTY0OTY4NSwyNDgyOTgzLjExNzg3ODc2LDIwNjg4OTMuMjE3MzQ2Mzc2Nyw1MDM5MjAuMjAwNDgzNDEwNDQsMzg4MTcxNS45NTAwMjI3NzgsMTkzMTU0MS4wNDYxOTI5OTk1LDIxODg5MjAuODA5OTk2MTM1NSwxMDkyOTM0LjAwNDM3MjAxMTYsMzUyMzgwLjU0MzY5Njc1MTQ3LDMxNTI4ODkuODM1NTM0OCwyNTMwNzQuNDI2NzE5NjIyOTUsNjY5NjczLjk1NTgwNjQwMTksNDgyNTQwLjQ5ODkyOTE5MTUsMzI5MDA1MS4zNzU3Njk0NTYsNzEwMTU2LjE5OTE0MDQwOTcsNzg0MjcwLjQyNzYwMDM2NTUsNzQxOTcwNC4wNTY3MDUzNDQsNDQzMjU3Ni4xNjE5MTE4MjUsMTM2MDg3MS4yMzU1OTQ2MTIzLDEzMzgwMjguNTE1NTUwNDkzLDQ3OTQ0ODkuNDY0MzgwNzQ0LDQxMDUxOS40Mzg3ODQ1MzQ0LDE1ODk3MjQuNTMxOTAxNDk5MywyOTg4MjguMTUzMDg0MTU4MjYsMjIyMjc3OS42MTk1MzE1MjksODE3NTc0My4wMDUyMTA4Niw4NzY4MTEuMTEwMTk2NTY4NSwyNzY4MTU1LjYwODIxMjI5OSwyMzkzMzEuNzMyNzM5NTEyMTcsMjMxMDE3MS45OTIxNTkzOSwyMTE1MTYyLjkyMDg2NTg3NCw3MjUzNjMuMTY1OTcyOTExLDE5NDkyNi43NTIyMTYzNzcyCisxOCxGcmkgMTEgRmViIDExLDI0NTg0Ni42NDM0NjczNjQyLDE3NDMxMzAuNTQyNDk1OTExMiwxMDQ3ODgwLjY0NTM0OTI5MDEsMjAxMTk5Mi43NTA3MjUyNDUzLDEuMzI4MDQ3Nzg1NDk4MTE2NUU3LDE2ODY5NTUuMjg4NDMyNjk1LDEzMzQ5NTIuODE0ODAyNjQ1NywyMjQ1ODQuOTE3NzU5NDY2NjgsMzA3NjQwLjM0MTA5OTEyODEsNjI2NzIxMy44OTIyMzI3OTE1LDMyMTA1NTcuNDE3NDc1MzU1Myw0NzUyODYuMTQyMTc3MzUxNjMsMTE0NzEyNi4zNjc4Mjg0NTUzLDUwNzM1Ni4xMzI4NzI5MzY3LDQ4Njk5MDkuMjYzMTA3MDk5LDIzODMzNjEuNTQ0ODQ3MDMyLDEwNTY2MDAuNjQxODI4OTUzMywxNTg0MjY3Ljg1NDk2ODM5NjUsMTc1MTc5Mi45NzM2MTkxOTM4LDI0ODk1MjUuNDAyODM5MTcyNiwyMDc2ODE3LjY5MzMwMzkyNTcsNDk5NzQxLjA2MTg4MTkyMTU1LDM4OTY5OTAuNDY0MDM1MTU2NiwxOTI5MDA3LjE2NzE0MjU3OTMsMjE5MzkxMi45MTA4NzY4MjUsMTExNjEzNy44MjM1Mjc4NjM3LDM1Mzc0OS4zNTEwMDkxOTA1LDMxNTYxNDguODc4Mzg4ODMyMywyNTE3MzkuMTA4NTk1MDczNiw2NzA5MzEuNTUxNjIwODAwNCw0ODQ1NTcuMDQ2OTA0MzIyOCwzMjk5MzMyLjY2NDk0MDcyNzQsNzEzMjY5LjQ4MDU3MjIwMzksNzg0MjE4LjAwMTE4NjQwNDEsNzQ0MDgxOS44NzUxMTQxNDUsNDQ1MTY0OS4zNjEwNjA2NzIsMTM1MjYyMC4zNDg1NjQwMjIyLDEzNDE1NTQuNTE3MTA0MTY0Nyw0ODE1NTM4LjgxNDI0OTExMyw0MTEwNDguMTU5MDMyNDUyMTUsMTU3MjU3OS45NDY4MzkyNDY3LDI5NTg3Ny4xNzEyNzM0MzY2MywyMjMwODMzLjUwMTM3ODYxLDgxNzYwMzEuNzkxNjMwNTE1LDg3NTc1Ny43NTg2MDU2MDU5LDI3NzU1MzYuNzAxODgwOTQ3NywyMzg2NjkuNTg1OTUzMjYxNzYsMjMxMTA5MS42NjM0ODMwNTEsMjEwMjUwNy4zNjU4NzEzNjQ3LDcwODkyMS42MzIxNDgyMTYyLDE5MzU1NC41MDYxNjQxNzU2NgorMTksU2F0IDEyIEZlYiAxMSwyNDU3MDQuMzkzMTk1ODE2NCwxNzQxMjA1LjY3MzcxMDc5MzUsMTA0NTkyMC45MTI4OTcxMjQ0LDIwMTA4MTguNDk2MzM4NTA3NCwxLjMyNzc2MzUzMDY1MTUyOTNFNywxNjg1OTk1LjYwNDI4NTAxMSwxMzMzNjU3LjQwODk5NDM5MTYsMjI0MjU0Ljc4MTMyNTI2OTk5LDMwNDUzOC4xMDQzNjYzNzgsNjI2MzY3My4xOTUyODI0MDE1LDMyMDg3MDUuMDIxMjY1OTIxNiw0NzQ5NzMuNDY4Njg0NDIyNTUsMTE0Njc4MS4xMTY3MTAyMjk4LDUwNzU0OS44OTAzOTc0ODU4Nyw0ODY3MjcxLjA1ODg2NTc5MywyMzc5MDYyLjY1ODY4MjIzNzQsMTA2MDE0NC40MjM4NDY0MDksMTU4Mjc0My44MjQ0NTEyMTc0LDE3NTAwMTQuNjQ3MDI1MDEyMiwyNDg5OTQ5Ljg0MzU2Mjk4LDIwNzc1MzUuNjkzMDI5ODM1MSw0OTkwNDEuMTU1MDE1MTc5LDM4OTgzOTcuODQwMDI0Mjc2LDE5MjgwNDQuNzcwMjY5ODA3NCwyMTk0MTcxLjEyOTEwOTk1OTYsMTExODUxNS4yNDk1OTg3MTUsMzUzODg2LjA5NDQzMTM3MjA3LDMxNTU5MTQuMjY3MDE3NjI1LDI1MTUxNC4zMzk5MjQzMDYzMiw2NzEwMjYuODM5NDc4MjIxNCw0ODQ3NTkuODk0NTg4MzIwNSwzMjk5OTg1Ljk0NDgyNjk3OTcsNzEzNTc4LjA5ODIwNTE5ODUsNzgzMzY5LjE2ODIzNjQ2MTYsNzQ0MjMyMC40ODA2MTA2ODUsNDQ1MzU2Ni45NTQyMTQwMjcsMTM1MTIzOS4yMzk1Njg0NTA3LDEzNDE3ODMuMzEzNjcwODEzNiw0ODE3NjM0LjM4NzkwOTUxOCw0MTEwMzQuMDgzMzc1NTI0MjYsMTU2OTY3MS4xMDUwMjg4NDc3LDI5NTM3OS4wMjk2MDU1MDQ2NSwyMjMxNTM3LjE2Nzk5ODI0OSw4MTc0MDg0LjAwMjcxNDA0Niw4NzUyNDYuNjE0MzExNTY0NywyNzc2MDIyLjg4NzkzNDg5MSwyMzg1NDkuNDk5NjI3ODA2ODMsMjMxMDY4MS45NTE4MzE1ODQsMjEwMDM4OC4xNjQ3MTk0MjA1LDcwNTczNS45MTEwMjQ3NzA5LDE5MzMyNS4yNjc2NDk4NDg5CisyMCxTdW4gMTMgRmViIDExLDI0NTM2Ni42ODQ1MTQ2MzI0LDE3MzkxNzcuNTM2NjQzODQ5NSwxMDQzODE3Ljk5NDIzOTUyNTIsMjAwNzk0MC4xMjkwNjI2MTU4LDEuMzI2OTA5OTc5NzE0NDc1NkU3LDE2ODMyMjguODEzMDQ0NTczOSwxMzMyMTcxLjg3NzQ5NTEwNiwyMjMxODQuNDA5MzUxODI3OTgsMjk5NTY5Ljg2NDM0MTYxNSw2MjU1NDYwLjA3OTg0MjAxNSwzMjAzNzMxLjE0NjQ1MzMyMiw0NzM5MDkuMTE2NTE0OTc5MiwxMTQ2MzQ5LjU3MTg0MTMwMjMsNTA3NTY4LjYxNzQwNjAwMjc3LDQ4NjEyMTkuMDc0MDc3NTYxLDIzNzQ0MTUuNzI4NTE2ODc1MywxMDYyNDAzLjk0MzYzOTQ2NTQsMTU4MTEzMS4zMzA0ODczNzQ0LDE3NDc5ODkuNzE2NzM4MTY2OCwyNDg5MjY0LjEyMTA3MDg3NjMsMjA3NzM3OS4yNzk4MDMyOTM1LDQ5ODI3My4wNzAwMTk4NDc2LDM4OTgxNzUuNjE5Nzc5MjczNCwxOTI1ODI1LjI4OTc1MjM3NDYsMjE5MzQzNS4xNDYzNjgyNjYsMTEyMDE5Ni43MTQzNzcwMjIzLDM1MzkwMC4wOTc3MDY2NjYxLDMxNTQxNDkuNzQxODAzNjkxNywyNTEyNTIuODQ5NjI4MzYwNSw2NzA5MzYuOTg4MTU4NTc3NSw0ODQ3ODYuNjA2MzIxMzM1NiwzMjk5MTgwLjAzMDUzMzg2NTYsNzEzNjA2LjQzNTcxMzE4Miw3ODA1OTUuMzMyMTcxNjYxNCw3NDQwNTMzLjg1NjMwNjkyNCw0NDUzODIyLjc5NDk2NDc5MywxMzQ5NjY3Ljk4ODgyMjgyMzksMTM0MTQxMy44NzU4MzIzNzA1LDQ4MTc4NTUuMTgyNjkzMDQ5LDQxMDgyMy44NTgwODI2NTY3NSwxNTY2NTMyLjQyOTIxMjI1MzMsMjk0ODM4LjY1Mzg5MjYxNSwyMjMxMjkwLjQ0NTEzMjQ0MDQsODE2Nzg1Mi43Mzk5MjQxNjksODczOTY3LjYwMTA3OTM0NTIsMjc3NTI3My4xMDY1NzU4MTEsMjM4Mzg3LjU5NTcxMTAzNTA0LDIzMDkwOTkuNDEwODQ3NzUxNCwyMDk3OTcyLjQ2NjMwNDM0NzQsNzAyMDA0Ljk2Njg5NzE5MywxOTMwNjkuNTYwNTk3NTE4OTgKKzIxLE1vbiAxNCBGZWIgMTEsMjQ2NjA5LjU5MDAwNTU5ODQ0LDE3NTA0NzcuNTU5Nzg5MzMyLDEwNTUzNTMuNDkwNDk4Njg3OCwyMDE4Mzk4LjE5MjA0NTA0MDIsMS4zMjk3NTg4NDA2MTE1NTg4RTcsMTY5MjY3OC45MDQyNjc5MjYyLDEzNDAwNDUuNzYxOTU1Mjk2NCwyMjY3ODEuNTEzNTc0OTgwMzIsMzIyNzQyLjcxMDkyNzY3OCw2Mjg1OTcyLjQzNjIxMzkwOCwzMjIxMTcyLjM4MDM0ODY5MDMsNDc3MzU1LjgwNjk2NTE1NDUsMTE0ODUzMy41MTA1NTc3NDEsNTA2NzkxLjM1OTkxMjc2MDgsNDg4MzgwMC41NzkyNjk3MTUsMjM5OTgwNC4xOTE5MDUzNTIzLDEwNDA0MTMuMTEyNDA0NDM0MSwxNTkwMTAyLjQ1NTU1ODEwNTgsMTc1ODc2NC42NzY1NzQ2OTIsMjQ4OTA4MS4yMzYwMTk5MTk2LDIwNzQ5NjcuNzE4MjQxNzQ4LDUwMjQ0MC45NjcyNjQ4MTQ0LDM4OTMyNzEuMDM3NDU3NjEzMywxOTM0MDgzLjc4OTY2MjA0ODIsMjE5Mzk4OS41OTQ1MTA3MDQsMTEwNjkwNS4yODU0MTQ1Mzg4LDM1MzM0OS44MzE1MjU5ODIsMzE1ODcxNi40NDY4OTMxNTk4LDI1MjYyNy44MDg0MzQ5OTc0Miw2NzA3NjMuMjc2ODY1NTkwMSw0ODM5NTcuMDY2MTM0MTk1LDMyOTgzNzYuOTQ5Njk2MjUxLDcxMjM2OC44MTE2MzI3NjUzLDc4OTgwMS4zMzM1OTUyNjk2LDc0Mzg1NTQuMDcyMTIxMjIzLDQ0NDU5NzAuMTEyMDM0MTI5LDEzNTgwMzIuODg0OTE3OTI4NiwxMzQxMzE0Ljg2NTA3MzA2NzgsNDgwOTM5Mi40NjIyNDMxNzcsNDExMzE1LjQ3MDk4MTc3MjQsMTU4MzY5NS4wNjI2ODA4MzQsMjk3Nzg2LjU5NTY0NDAyMzMsMjIyOTEyMy41MDI2MTg1NzI3LDgxODgxOTguNTgwMTE1MjcsODc4NTc2Ljc3MTg4OTU5MTUsMjc3NDk4OS4wMjA0MjM4ODg3LDIzOTE3MS4zNzg4MzQyMTg5MiwyMzEzOTQ2LjkyNzI4NjIwMiwyMTEwODE5LjA3NjYyNDQwMiw3MjE0MTguMTY2MzgxNjY0MSwxOTQ0NDUuNDkxMzg5OTM3MzgKKzIyLFR1ZSAxNSBGZWIgMTEsMjQ1NzMxLjE1NTA3NDI3LDE3NDE2ODIuNDUwMjg4NTA5MywxMDQ2MzM0LjE2MzI0ODAxNjgsMjAxMTAzNS4zNTgwMTI2NzQ0LDEuMzI3ODAzMDIyMzIyMTU2RTcsMTY4NjE1Ni4yMzQ3NTA5NDY1LDEzMzM5NzcuNzEyNjEyOTc0LDIyNDMzNy4xNTgzNzQ3MzI2NSwzMDQ2NzguNDY4NjMxMzk4MDUsNjI2NDM0OC4yMTE4Mzg5OTQsMzIwOTAyOC45MjA3MDc1NTA0LDQ3NTAyNC44ODMxMDQ2ODQ3LDExNDY4NzUuMDU3OTMyNjI1Myw1MDc0NjkuMTM4ODE2NjE1NTcsNDg2Nzc3Ny4xNTc1NjQ0NTMsMjM3OTk3OS42NDgwNzQ1NTQsMTA1NzQ0NS4xOTI5NjYxMjcsMTU4MzEzMS40NTA1NjQwMzYxLDE3NTA0NTEuNTkyMDUxMDcyLDI0ODk3MTguNzM0OTI3ODk3MywyMDc3MjE5LjU2ODIwMDQ3MDksNDk5MjAyLjQ3MDI0NzAyOTksMzg5Nzc4My43ODcyODcxNTcsMTkyODIyOC41OTI1MDA5MTg1LDIxOTQwMDUuMTYxODU4OTY1LDExMTcyOTguNTU1MTQyMjA1NCwzNTM4MjkuMTMxNzU3ODA4ODUsMzE1NTg2Mi45ODc4MTkxMDAzLDI1MTU3MC40Nzk5MTQ5MjI4OCw2NzA5NzkuOTMyNzgzNzQ1OSw0ODQ2NzUuNDk0MjI2ODU5MiwzMjk5NjQ5LjY1MjkyNDM5NDcsNzEzNDQ4LjQwOTE3MDEzMDQsNzgzNTQ3LjM2NTA0NTQ5MTQsNzQ0MTU1Mi45ODI1Nzg0NDUsNDQ1Mjc2Ny45MzE2MjcyNjcsMTM1MTU3OC4yOTUyMTAyNDY1LDEzNDE2NTguNzQ5NTY1NDUzMyw0ODE2NzU1Ljc4NTc0ODcyOTUsNDExMDIyLjQ3NjI5MzgzNjI1LDE1NzAyODYuMDIxNjIzMzU2NywyOTU0ODcuODM1MjkwNzYxMjYsMjIzMTIyMC45ODUyMDI0MzI2LDgxNzQzMzIuNjkzMTQ4OTU2LDg3NTMzOS44NzY4NTQ0NjQ1LDI3NzU3NjAuOTU0OTA4MTM1LDIzODU4MC4wNDA5MTQ3MjQ4LDIzMTA3MTMuMTg2NDI5MTM3LDIxMDA5MDkuNDA0OTA4MTM4Myw3MDYwNzMuNzgyMTczNjg2MywxOTMzODAuMTMwNDYxODIxNDgKKzIzLFdlZCAxNiBGZWIgMTEsMjQ1Njk4LjA5NDk5Nzg2NzIsMTc0MjA5MS45Mzg3OTM2MjYxLDEwNDY3NDQuNDY5MjcxMDkxLDIwMTA3MzEuNTU5NTkyMDczMywxLjMyNzY3OTE2MTkzNDg3NTNFNywxNjg1NzY2LjkxNzg3MDMwOSwxMzM0MjEyLjEzMjk0MDg5OTYsMjI0MTUxLjI3NjIwMjEyNzU0LDMwNDYwMS40OTE1MTQ4Nzc3Nyw2MjYzNTkxLjQxMzA5NTM5NSwzMjA4NDAyLjM0OTA4ODYxNSw0NzQ4NDAuODgwMTUwNjI1NywxMTQ2OTI1LjA3Njc2NDQ5NzQsNTA3MzY4LjM2NTY1OTMwMjc0LDQ4NjcyMzcuMDU3MjY3MTQ4LDIzODA4NjYuODM2MDAwMDI2LDEwNTYxNDEuMDI4Nzc3NTU3NCwxNTgzNDUyLjUyOTgyNTU1MjQsMTc1MDc3OC41MDA3OTU4NzIsMjQ4OTI1OC4yNTY2ODcyMzUsMjA3Njc3MS43MjY2OTE0NzEyLDQ5OTM0MS44NTU4NDYwMDc2LDM4OTY5MzMuODEyMzM3NzIsMTkyODAyOC4xODAyNzQ5NzYyLDIxOTM2MTkuODc5MzIxMjE2LDExMTY1NDEuMTMwNDc1NjE1OCwzNTM3NTguMjcyNDU0MDQ4MTYsMzE1NTQxMC44NDI2MDAxOTcsMjUxNjA5Ljg0ODEyNTI2OTIsNjcwODk3LjczODk5MTQ3NjgsNDg0NTcyLjM1NTMyMTE3MzAzLDMyOTkwMjMuMjA4MjE5NzM0LDcxMzI4Ny40NjA0Mjg1ODE1LDc4MzA3NC4wMjQ0OTQyOTEzLDc0NDAxMzUuMzIzODA3ODA2LDQ0NTE3OTQuMDk2MjIwMDc2LDEzNTE4MzIuNjc0Mzc1MjQ2MywxMzQxNDEwLjU5NDAzMTc4NDUsNDgxNTY3Mi4yNjM3NDM3ODcsNDEwOTYwLjkzOTExMjcwMzk2LDE1NzA4ODguODQxNTcyNjEzNSwyOTU1ODkuNzQxOTE0ODcxMSwyMjMwNzUxLjI0MDkzMzYxMjUsODE3MzM1NC43Njg4Mjc2MjYsODc1MTk4Ljc2MjY4NjQ2MjgsMjc3NTI0NS4yNjI1MDI1NCwyMzg1OTMuNTY2NDMyOTE0NTgsMjMxMDQxNy44NDg4MTY2OTMzLDIxMDEyOTguMDQ0MDM4ODE0LDcwNjY1OC4yNDc2NzM5NDU3LDE5MzQyNC4xOTc0NTQ1ODY3NworMjQsVGh1IDE3IEZlYiAxMSwyNDU2MjYuMDc5MDQ4NDkxNTUsMTc0MjI0MC45ODI2ODI3NTk0LDEwNDY5MDUuOTM3MDkyNTU4NCwyMDEwMDk2LjE0MDk0NTc2MiwxLjMyNzQ2MDUwMTE3MDI1MzJFNywxNjg1MDU5LjU2ODIwOTY1MTQsMTMzNDI1OC4wNDExODI3NTA0LDIyMzgyMy4xNjcyODk3NzM4NSwzMDQwMTQuMjA2NTA3MDQ5MjcsNjI2MTg4Ni4yODIyNDkxNTgsMzIwNzIwNC4wMDkwMTM1OTcsNDc0NTMxLjY4Njg2MzI4MSwxMTQ2OTE4LjM5NTA0NzkyMTIsNTA3MjgwLjI5ODM0MTAyMTMsNDg2NTk5Ny45NTg2MDAzOTEsMjM4MTIwMS40NzU4OTYxMDE0LDEwNTU1MDguMDk5MTcxMTg5MSwxNTgzNTYzLjg4Mjc2ODA2MTcsMTc1MDg0OS4wMTY0MDc4NTMsMjQ4ODc1NC4wNDg2ODQ1Nzg0LDIwNzYzNDguMzE4MDIyNjQ3Miw0OTkzODYuNTYwOTgyNTI4MjYsMzg5NjE0MC4xODg2MzgwNDQ1LDE5Mjc1NzEuNzMyMTg0NTc5LDIxOTMxNzcuMTM5NDA2ODI0LDExMTYxNTAuNTI5OTE2Mzc2LDM1MzY5Ni40NjEyMTY5NTg2LDMxNTQ3NzcuNTYyMjIzODY2LDI1MTYxNS45MjgyMTk1ODg2LDY3MDgxMi4yMzgwNjg1NjE0LDQ4NDQ4My4yNjE3NTIzMzk4NCwzMjk4MzUzLjcxMzkzMTk4MzMsNzEzMTQ2LjY2OTIxMjUwNzEsNzgyMjU0LjI1ODg3NzczNDgsNzQzODYyNS4wNzA2NDUzOTMsNDQ1MDk1My40OTIyMDg5MDQsMTM1MTg4OC4xNjYzODg3ODk0LDEzNDExMzguODg1NTYzOTUwOCw0ODE0NzI4LjQ5MTA2NzUxMSw0MTA4NzguNDkxOTU0MzIwNywxNTcxMTIwLjAxMTg2MjY2ODIsMjk1NjI2LjY3NTQzNDY1OTcsMjIzMDI5Ni4xMjMxMzY1NDUsODE3MTY4Ni42MTcxNzI0NjcsODc0OTEwLjM5MjA5MzQ5NTcsMjc3NDY4Mi45NDQ1MzI0NTEsMjM4NTg2LjYwOTM4NDM5MzksMjMwOTk1MC44NzM1ODI4OTQsMjEwMTM4MC42OTc0NzQ1MTc0LDcwNjkxMy4wMzE5NTE4MDk4LDE5MzQzNi4yMjAzNjk3MDcwNAorMjUsRnJpIDE4IEZlYiAxMSwyNDUyOTYuNDEyNDcxMTE5ODcsMTc0MTUzOS4yMDk3MjA2ODE3LDEwNDYyMjUuNDA1NjAzMTUxLDIwMDcyMzYuMDYwMjQ5ODI4NSwxLjMyNjU1NTQ4Njc3Njg3NzRFNywxNjgyMDgzLjgyNDQ4NTI3ODcsMTMzMzYwNS4zNDgxMDMwMDg3LDIyMjQ2Ni4zNjA2NjE4MTAzLDI5OTk3MS4xNjM1OTUwNTk2NSw2MjUzOTc3LjQ3OTc3NDM1MSwzMjAyMDI3Ljg3ODc4NDg0MzcsNDczMjg4LjY3MzE1ODAzNDA0LDExNDY2ODEuMjI5MTU0NzA5NSw1MDcxMDkuMjM0MjAyODg3ODYsNDg2MDIxMi44MzIxNTkzMTMsMjM3OTY0My44ODAyMTUzMDg2LDEwNTU5NjIuMTkzNDI0NjgsMTU4Mjk4NS44NjU2NDkzNDUsMTc0OTk3Ny45ODg4NDk5MDUzLDI0ODczNDIuMjk0MDY0NjI0MiwyMDc1MzkwLjU5NzYxMDUxOCw0OTkxMDAuMzIyMjA1MTgxOSwzODk0MzgzLjk0NTg5NDk2NDUsMTkyNTQ0Ny42MjU0NTAyNTcyLDIxOTE4NjUuNTE4MzM5Mzg0MywxMTE2Mzk3Ljc4Nzc2MjM0NzYsMzUzNTc2Ljg2OTc4MzU3NjIsMzE1MjUyMi4zNDMxMjY2MTcsMjUxNDk2LjM5MjYwMzcwMTUzLDY3MDU4OC4wMDI3Njk5Mzk2LDQ4NDMxNC40ODk5MTI4MTc5NSwzMjk2NTM1LjU5OTc4MTY3Niw3MTI4NzIuMzcyODc3Mjc1Myw3Nzg5MDAuOTA0MjA0OTg5Miw3NDM0NTQwLjY5MzI1MDczLDQ0NDkzNjMuMzU0MzA4MDkxLDEzNTEyMTQuMTIxOTM1MzY3MSwxMzQwMzc4LjE2Mjg4NTI4NTQsNDgxMjkwNi43NjMyOTA0NzYsNDEwNTk1LjIxMzQ3OTExMTEsMTU3MDA4MS44MTkzMDg1MzgsMjk1NDQwLjAzNzcxODE4NjksMjIyOTIyMy43MDYyNzg0OTYsODE2NDkxMi4yODQ2MTAxNjI1LDg3MzYyNS41MTgwMDY0MTUzLDI3NzMxMTYuNTU0MzA5NDI1NCwyMzg0ODguNzgwOTk2NTQyMzcsMjMwODEzOS40NzU5ODkzMzI0LDIxMDAzMzguMTEwNzE1NzY4LDcwNTc4OS42OTE2Mjg1MzU0LDE5MzMzMy43MjQxOTg3MjkxMgorMjYsU2F0IDE5IEZlYiAxMSwyNDY5NzkuMDkyMTcwMDk1ODMsMTc0NzEwMi41NDM1NDE2ODQ1LDEwNTE4MjAuMDU3MDQyNDkzLDIwMjE3NjUuNDQxNTM4OTM2LDEuMzMxMDI1MzU5NDUzNzIyNUU3LDE2OTY4OTIuNDAyMDExOTQ4NiwxMzM4MTcwLjg0MjUzOTk2NTksMjI5MjAwLjIxMDc0MzI3NTI3LDMyNTY1Mi43ODg5NjE2NzU3LDYyOTQ0ODcuNDAyNTMyNTE2LDMyMjgwMDIuMDcyNTk1NzAzNCw0NzkzODIuNTc3ODM4ODExOSwxMTQ4MTcyLjk5OTE3ODA1NzMsNTA3NjYwLjEyNzcxNTA4MTUsNDg4OTg5MS4zNTM2MTc1MjgsMjM5MjIwMC4yNjg0NjUyMDEsMTA0OTY3MC41MDcwODk2ODcsMTU4NzQ4MS42NDYxNDk4MjUzLDE3NTYxMzUuMzA3NDQzNjA0LDI0OTMyNjguNjAzMzI0MjI0NywyMDc4OTAyLjkwNTIzNDEyNTIsNTAxMjc4LjkzNTExNjEwNzM0LDM5MDA3MTguMjQyNzUyNzEwNCwxOTM2MzMwLjI3MjU1MzcxMSwyMTk3NTMzLjc4NjgyOTA1OSwxMTEyNTgxLjYyNzMxNTUyMTIsMzUzOTYwLjQ5MjgzMjU2MDIsMzE2MzA4Ni4zMTE1MTAzMDM1LDI1MjMxNi40MDY1Mjk5MDExLDY3MTQ5Ni43MDk2Njg3MDY2LDQ4NDg0NC4yOTEyNTYwNjgwNCwzMzA0MDQwLjk2MjQzNTY3Niw3MTM3NTcuODUwNTQyMTI2NSw3OTU0NjUuNjYwMDQ4OTM2NCw3NDUxMzYyLjIzMDA3OTMyOSw0NDU0MzQ3LjI1NzQzNjk5MSwxMzU1OTg1LjQzNDUzMDg5MzgsMTM0MzU3MS40NDU1NzgxOTkzLDQ4MTg3MzQuMTYxNDcwMzA3LDQxMTkwMy40NDkzNDk5NTQzLDE1Nzg1MTIuOTg1NDUxNDAyOCwyOTY5MTkuOTYxNzY4MDQzMSwyMjMzMjc0LjU4MDk0Njk1MSw4MTk4MTc0LjA1OTI2OTYxNSw4ODAxMzMuNjAzMzUxMzg5NCwyNzc5NjczLjg1MTExNDQzODQsMjM5MDc5LjYyODc3MjM5ODcyLDIzMTY4OTUuNjMzMjY1MDA1LDIxMDc2OTUuOTI0MDg5MzQzMyw3MTU1MzEuNjU0MjgyMzgzNiwxOTQwODQuNjkyODcwNzgyNDMKKzI3LFN1biAyMCBGZWIgMTEsMjQ1NjcxLjcxMDU5MTg0NjQsMTc0MjQ0Ny45NjM2NjU4ODU2LDEwNDcxMDAuODY1MTU2Mjg1NiwyMDEwNDg4LjI2OTc0NTU1NzYsMS4zMjc1ODE4NTY0NDY3MDAyRTcsMTY4NTQ1My42NDY1MTY0Njg0LDEzMzQ0MTYuMjgzNDk2Njg2NSwyMjQwMTkuOTk0NzUzMjY3OTQsMzA0MTIwLjkzOTU1NTM5MDMzLDYyNjI5OTAuMDY5MzkzNjA1LDMyMDc4OTguNDk5Mzg5Mzg4Niw0NzQ2OTMuNjE4NTE3NTU1MDYsMTE0Njk2OS43NzMyNjkzMDU1LDUwNzI4Ni4wMDkwNDY2MzAwNiw0ODY2ODA5Ljg1NzgxNDEzNiwyMzgxNjM2Ljg0MDA5OTU3NiwxMDU1MTA3LjgzMDY2MzI3OSwxNTgzNzMxLjczMTI1NzA3NTcsMTc1MTA2Mi45OTA2NzY0NzU3LDI0ODg4ODYuODE5NDg0NDU0NiwyMDc2NDA4LjA2MjI1Mjg4MjksNDk5NDYyLjgzMjcxMDI5MjI1LDM4OTYyNDMuMTkxNzM5NjE0LDE5Mjc4NzAuNDE2NDA2MzUwMiwyMTkzMzA5Ljc4MTkzNTA2OTcsMTExNTkyMS45MjA3ODgwMDIyLDM1MzcwMC4zNjM4MDY2MjA3NiwzMTU1MDUwLjI3MTQxMjcyMSwyNTE2NDQuMTg5NjY4Nzc5NSw2NzA4MzAuOTUzNjQ3MDk0LDQ4NDQ4OC4wOTg2MDQ4MTE3NiwzMjk4NTE3LjM0MDU1NjI1Myw3MTMxNTYuMjIwMzQ3NDg0MSw3ODI3MDYuMTE3MTE4OTgyNiw3NDM4OTkwLjM2ODI2NzAzOCw0NDUwOTk4Ljg4ODcyODg2NywxMzUyMDU0LjAyNjk5NDQwMTEsMTM0MTIxMC40MjMwMDE1ODk1LDQ4MTQ3ODguNDUzMjIzODAxLDQxMDkxMS43NjI4NzQ0MDg2LDE1NzE0MTIuMTI2MTA3NDk1NywyOTU2NzguMTczMTQ5MjE5NCwyMjMwMzcwLjIyMjkwMDU2NjYsODE3MjU4MS44NDgzNzQwMDUsODc1MDg1LjU4OTc0MjIxNiwyNzc0ODI5LjIwODk1ODcyMjcsMjM4NjA1Ljc4ODAxNDY4MDg3LDIzMTAxODMuNjQ0MjQwMjQ5LDIxMDE2MzYuMjkwNjEzOTcxLDcwNzE0My42ODQwNzg3MDg2LDE5MzQ2Mi40Nzk1NDc3NTEwNQorMjgsTW9uIDIxIEZlYiAxMSwyNDU2ODkuMTc1NzA5NTQ0NjgsMTc0Mjc0MC40OTcwMTg0MjM5LDEwNDc0MTIuNTUxOTc0MDQ5MiwyMDEwNjI5LjA4ODg0MTc4NjQsMS4zMjc2MTU2ODIyODM0Mzg0RTcsMTY4NTU1Mi4wMjM0NjA2MTczLDEzMzQ2MTEuMTA4OTY0MjIzLDIyNDAwOS41NzA0ODUzMDkzNSwzMDQ1NTcuOTA1MDk4NzMyMiw2MjYzNDMyLjIwNjEwNTcwMzUsMzIwODEwNC4wMDcwODQ2NjMsNDc0NzEzLjQ4NTE3MzczMSwxMTQ3MDE5LjQyNjQwNTA4MjUsNTA3MjU2LjQ2Mjk5NDI5NjQsNDg2NzE0Mi41NzQwODI5MzUsMjM4MjMxNy44NjQyMDc4NTE3LDEwNTQ2MTIuNTAxNDA1NTQwNCwxNTgzOTYxLjQxMTU2MDI2MDUsMTc1MTMzMS4yNTM2MDEwNDEyLDI0ODg4MTAuMzMwNzAwMTE1MywyMDc2Mjk0LjI0MzQyNzI2LDQ5OTU3MS4wMjg4Mzc2NjIxLDM4OTYwMjEuNTA4MjczNjI0LDE5Mjc5OTIuMjAxMTU3MjM2NSwyMTkzMjU4LjUxNzI4ODMzNiwxMTE1NjAwLjAwMjkzMjQ4MiwzNTM2NzkuNTIxMjUwODMyMDcsMzE1NTA2MS44MzMwNjU4ODMzLDI1MTY3Ny44MTMxMjUxMjcxLDY3MDgxNS4yNzQxMzAzMzM4LDQ4NDQ1Ny4yNDE3MDEzMTUwNCwzMjk4NDAzLjM3MTc3Mzk0MDUsNzEzMTA4Ljk3NzM1MzM1OTcsNzgyNzI0Ljg4NTc1MzM4NzQsNzQzODcyOS41NTgwMzA2MjMsNDQ1MDcwNy4wNjE2MjU5NTksMTM1MjI2Mi40NTEyNjQyMjgyLDEzNDExNjkuMTk0NDUzMDQyLDQ4MTQ0NjguMjIxOTA2MjYxLDQxMDkxMC45MzcxNzM0NzEyLDE1NzE4NzQuMjE4ODU2Mzk2LDI5NTc1Ni41MTc3MzA5NTI5LDIyMzAyNTcuMTM4NzkxNjM2Niw4MTcyODAyLjA3Mzc3MDgyNSw4NzUxNDUuOTE2OTQzMDYzNSwyNzc0NzQyLjEyODQ3NDcwMDcsMjM4NjIzLjE1NTI5ODA1ODE4LDIzMTAyMjUuODc0MTA4MTU5NCwyMTAxOTU1LjgyMTAyNzE3MjcsNzA3NzQzLjAxNTEzNjczODEsMTkzNDk3LjQ0MjQ4NDcwMDM4CisyOSxUdWUgMjIgRmViIDExLDI0NTY2NC4yNDEzNTE3MDE0LDE3NDI4NTUuMjMyNzIxNDE2NSwxMDQ3NTQ2LjA0ODk0NjI2OTIsMjAxMDQwNS42MTk1NDE2NzY1LDEuMzI3NTM2OTUyNDM4NzI0OEU3LDE2ODUyODYuNTQ4Mzc2MDEwMywxMzM0NjY3LjI3ODcxOTE2OSwyMjM4MzkuNzA2MTkzMDU1NTgsMzA0NDY1Ljk5MTI0MzE1NjEsNjI2Mjg0OS4xNTU0NjA1MjEsMzIwNzY2Ni4wMDY1NzAzOSw0NzQ1ODcuMzAwMjQ5NzQyNjQsMTE0NzAyNS4yMDE3ODk1MDksNTA3MjE4LjEwMDQ5MTI0ODQsNDg2NjcyMS44NDIxMjg5ODMsMjM4MjYwMS41NDI5MDc2NzUsMTA1NDM2MS44Mjc4Mzg4MTk1LDE1ODQwNDguMDI4Mjg0NDU1MiwxNzUxNDExLjgyMTI2NDczMTcsMjQ4ODYwMS44ODMwODQ1NDAzLDIwNzYxMTIuNDg5MTgxNzY3LDQ5OTYxMS4yNjQ3ODk4Mjc5LDM4OTU2NzkuODEzMzA0NTQzLDE5Mjc4MzcuMTcxODQ5OTgsMjE5MzA3Ny44NDc1ODcyMTUyLDExMTU0MjYuOTk4Njg4NjQyNiwzNTM2NTIuNTc5ODc3MzIzNCwzMTU0ODE3LjEyNjkxNTI1ODQsMjUxNjg2LjcwODc4OTc2NTQ2LDY3MDc3OS45OTA1MjU4Mjg4LDQ4NDQxOC4yNzI2OTcxNjMzLDMyOTgxMjQuODAxNDI0NzM3Niw3MTMwNDcuNDcyOTQzMjY0OCw3ODIzNTMuMjc1NTUwMDk1MSw3NDM4MTAwLjYyNTY1NzM1LDQ0NTAzMzkuMDk5NjU2MDQ5LDEzNTIzMjUuMzYxODM4OTM2OCwxMzQxMDU2Ljg2NDM2NzAwNjMsNDgxNDA1NS42MDExMzc2OTEsNDEwODc4LjY4NDQ1NTYzNTE0LDE1NzIwNjguOTkyMzIzOTI3LDI5NTc4OC4yMTQ5MTI4MTI3NSwyMjMwMDYyLjkzNzg5Nzg5Niw4MTcyMTkxLjQyMzYzNjczMSw4NzUwNDMuNTQ0Njc4OTI2NCwyNzc0NTA5LjM5ODU2OTg4MywyMzg2MjMuNjQ4NjAyOTU3NTUsMjMxMDA1MS4zNjI2Mzc2MjgzLDIxMDIwNTEuMTkxMDUyNzIyNyw3MDgwNDYuNjUwMTk5MTIwMywxOTM1MDkuMjQwNzA1NzM3OTYKKzMwLFdlZCAyMyBGZWIgMTEsMjQ1NTk1Ljk2Njg5MDMxNjA4LDE3NDI4NjIuNTQwMzcyNzQ0NCwxMDQ3NTc2Ljc0NTkyMDczNjMsMjAwOTgwNi4zNjAwMzcwNzEyLDEuMzI3MzM5ODY3ODg1MjI2NEU3LDE2ODQ2MzAuMTM5MjIyMDg1NSwxMzM0NjI4LjYxNDc4NzM4ODQsMjIzNDY5LjQ2MDY3Mzk5ODI4LDMwMzg5NS4xMDE4NjcxNjk1NSw2MjYxMjI1LjcyMjQyOTE0OSwzMjA2NTQ4LjMwNTM0MjQ3NDUsNDc0Mjk2LjA3NjQ2NDQ1OTI0LDExNDY5OTcuMjMyMDI1MTQ3Niw1MDcxNTkuNzE1NjI4ODYxNDUsNDg2NTUzOS43Mjk2MDE0MDY1LDIzODI2NTEuNTM1NTE5OTc1NywxMDU0MjE5LjY2MjE1MDU3NSwxNTg0MDQ2LjQ3OTY3NTE1NSwxNzUxMzY1LjQ2MDgwMzYxNjgsMjQ4ODIxNS45ODUyMDY2NCwyMDc1ODE0LjQ5NDQyNzA4Miw0OTk2MDkuMDE2MzcwOTIzMSwzODk1MTI1Ljg3MDAyMjEyOTcsMTkyNzQwMi41NDI3ODU4OTI1LDIxOTI3MzEuMDcxOTc3NTIxLDExMTUzMTQuNTkwMjg3ODcxMiwzNTM2MTEuNjUyMTQ3MzIwMiwzMTU0MjgwLjk3MzUwMTg2MTYsMjUxNjc4LjMzMjM0MDE0MjM3LDY3MDcxNi45NjUyNTc5NDk3LDQ4NDM1OS42NDUxMDI0MjU2LDMyOTc2MTguNjk0MjgyNzQ0LDcxMjk1My43NDUxNzExMTQsNzgxNTIwLjA2NTQ1OTc5MSw3NDM2OTYwLjg0MjY2MTg0NSw0NDQ5Nzg1Ljg2NTE4MTI1LDEzNTIyOTAuMDEyNDc3NzQwOSwxMzQwODQ4LjkxNjE3NDEwNjMsNDgxMzQyOS40ODExMTYxMzEsNDEwODA5Ljk0OTY0ODc5MDkzLDE1NzIxMDcuNzQ2OTEyMDMzMywyOTU3OTEuOTkzODExMjkyNDYsMjIyOTczNy41ODA1MDU1MjQzLDgxNzA2OTUuNzYzNTc5NzkxLDg3NDc3Mi4zOTM2NTY5NzMsMjc3NDA3OS45MjI0NzEwMTEsMjM4NjEwLjU0MDAzNjc2MDE4LDIzMDk2NDEuMDIzMDE3Njc0NywyMTAxOTk0LjcwMjYzODEwNyw3MDgxOTcuNTU1NjY5MzY4MSwxOTM1MDUuOTYxMDExOTEyMgorMzEsVGh1IDI0IEZlYiAxMSwyNDU0MzcuMjYwNDU0Nzc4ODgsMTc0MjczNS4wMjc4ODA4ODgsMTA0NzQ4OC43NTAwNzEzNzI1LDIwMDg0MTguNjE4NDIwMzU2LDEuMzI2ODkyNjA5NjE5NTAyNEU3LDE2ODMxMzMuNjgwMjU3NTI4NiwxMzM0NDQ4LjU5OTEwMDkzNzEsMjIyNjI0LjcxNjU1MzA3MTE2LDMwMjM0Ni43OTYwMzE1MDY0LDYyNTc0NDEuMjM3MzgxMjA0LDMyMDM5ODQuMzk2NzUyMDcwNiw0NzM2MzkuNDYyNzE3NTk0NSwxMTQ2OTEyLjMwMzYzNzI2MzYsNTA3MDQ2Ljc2MDM0NjgzMjQ1LDQ4NjI3ODAuNTAwNDA4MzU2LDIzODI0MjIuMTQ2MjQ0NzcyMiwxMDU0MTQwLjE5ODQwMzY0NTMsMTU4MzkzMC43NDcyMzM5Njg1LDE3NTExMzIuNTA0MzU2MTEyMywyNDg3NDEwLjczMjkyMjA1NDQsMjA3NTIxOS42NTc1MDg3NTYsNDk5NTUwLjY0NTAxOTc4NjQzLDM4OTQwMjUuMDg1MzMyMzA3NSwxOTI2Mzg5LjEyNTYxMTgwOTUsMjE5MTk5OC43OTA2NzcwMjM2LDExMTUyMjEuNzIxMTA4ODg0MywzNTM1MzIuNTMzMDQ5OTExNDQsMzE1MzEwMy4zNjg3NTk0ODI2LDI1MTY0My41Njc2NzkwNTk0Niw2NzA1ODcuMjEzNjM3NDQ5NCw0ODQyNDYuNzgzMTIxMjM1MSwzMjk2NTY5LjM1ODE4NDUyMiw3MTI3NzIuMjY0ODExODM4NCw3Nzk2MzMuNTc2MDkyMDIwNSw3NDM0NTk5LjcyNjAzMTAyMSw0NDQ4NzIxLjEwMDU3NzI5NiwxMzUyMTEwLjQ3MTY1MjYwODYsMTM0MDQxNC45OTY2NDUyMTksNDgxMjIxOS40MzkxNDUzMTIsNDEwNjYwLjE0MTgwOTIyMDcsMTU3MTk2Mi41MTQ4NjcxMjE4LDI5NTc2MS4zNjYxNTYyNjczNSwyMjI5MDgyLjYyOTQxODA1NSw4MTY3MzE1LjE1Njg1ODE1OCw4NzQxNDUuOTIxOTg0MzQ0MSwyNzczMTg0LjcwMzIzNzY4NTQsMjM4NTczLjQ4NDA5NzY3MzE4LDIzMDg3MjIuODQ3NjAyMTgwNywyMTAxNzE0LjQ3NjgxMTI0NDYsNzA4MjEzLjgyNDE1MTEwNywxOTM0ODEuNTgzMDEyMjMwNgorMzIsRnJpIDI1IEZlYiAxMSwyNDYwMzcuNjI1MzAxOTQ1MDUsMTc0MzY4NS4xMzg3MjQ3MDksMTA0ODM1MS4wNzk3NDE4NDM0LDIwMTM2NTIuMTM0OTQ0MjkyNSwxLjMyODUzNzk4MDY5NTk0MkU3LDE2ODg2OTkuMTc0ODU3ODA5NCwxMzM1NDIyLjIwOTIzNTAwNjUsMjI1NzEyLjYxOTYzMjA1MTEsMzExMzA3LjM2ODY2NzIwMTksNjI3MTc4Ny4zMjE5MDcyMzIsMzIxMzU3My44NTY2MDczMzksNDc2MDU3LjUwMTc5MDUxNTksMTE0NzI5NC4zMDE0NjcyMDE0LDUwNzM5NS43Mjk0OTc5NzI5Myw0ODczMjQ2LjEwODE4NDU4MywyMzg0NDM4LjczNzUyNzY1LDEwNTM2NzguMjE3NTY5MzI0LDE1ODQ3MjkuNjgwODAyNDgwOCwxNzUyNDIwLjk0OTkwMzgyODYsMjQ5MDEyNy42MjYwNTczMjEsMjA3NzEyNy4xMzcxOTY5NDYyLDQ5OTk0Ni41MTI0NzYyMjUwMywzODk3NTM2LjEzMjAwMzY2ODcsMTkzMDIyNi4xNzQ4OTU0NTE5LDIxOTQ1MDEuODkyNTMzODU0NiwxMTE1MDQ4LjMwNjMwMjIyNjgsMzUzNzc2LjcxNjE2NzUxNzUsMzE1NzI5OS4xNTg1NjA5OTI3LDI1MTgyNC41NDI5NDEzMzg4NSw2NzEwMTguOTYyNjY2MDYyOSw0ODQ1OTMuMTY0OTY0ODExNjQsMzMwMDA4NC42MzMyNTAyODU0LDcxMzMzMy4wNzIwOTQ3MjA2LDc4NjU5OS40NTI3OTA2OTc1LDc0NDI1MDEuODAwNDU4MTk2LDQ0NTE5ODcuNDIwODQ4MDA2LDEzNTMxMDYuNDQwNzI1Nzk1NSwxMzQxODc5LjAwNTQxMDA0OTYsNDgxNTk1MC4wMDYwMjUwMjcsNDExMTg5LjY2OTYxNzc3OTI2LDE1NzMyOTQuNjQ1NDg5Njg0NSwyOTYwMDcuOTM2Njc2NTMzNSwyMjMxMjAzLjg1OTMzODU2NCw4MTc5NzE0LjgwNjIzNDY4ODUsODc2NTAzLjg3NjcwMDczOTUsMjc3NjIwMS41MzUxMzA0NzMsMjM4NzM0LjE1NTcxNzU3NTc1LDIzMTIwNTYuNjkzMDUwMDU2NywyMTAzMjU4Ljc2NjIxMDc1Niw3MDkzNDQuMjM5NzcwMDgyNCwxOTM2MjguNjM3MTY5MTY1MzMKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0lTdGF0ZXNPbmx5X0ZEX1JlZmVyZW5jZS9UZXN0U0kvaHVtYW4vUG9wdWxhdGlvbiBDb3VudF8wLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0lTdGF0ZXNPbmx5X0ZEX1JlZmVyZW5jZS9UZXN0U0kvaHVtYW4vUG9wdWxhdGlvbiBDb3VudF8wLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NGU0YTE3Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTSVN0YXRlc09ubHlfRkRfUmVmZXJlbmNlL1Rlc3RTSS9odW1hbi9Qb3B1bGF0aW9uIENvdW50XzAuY3N2CkBAIC0wLDAgKzEsMzMgQEAKK2l0ZXJhdGlvbix0aW1lLHN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL25vZGUvdHJhbnNwb3J0L3BpcGUvVVNBCisxLFR1ZSAyNSBKYW4gMTEsOTQzMjExLjAKKzIsV2VkIDI2IEphbiAxMSw5NDMyMTEuMAorMyxUaHUgMjcgSmFuIDExLDk0MzIxMS4wCis0LEZyaSAyOCBKYW4gMTEsOTQzMjEwLjk5OTk5OTk5OTkKKzUsU2F0IDI5IEphbiAxMSw5NDMyMTAuOTk5OTk5OTk5OAorNixTdW4gMzAgSmFuIDExLDk0MzIxMS4wMDAwMDAwMDAyCis3LE1vbiAzMSBKYW4gMTEsOTQzMjExLjAwMDAwMDAwMDUKKzgsVHVlIDEgRmViIDExLDk0MzIxMS4wMDAwMDAwMDA4Cis5LFdlZCAyIEZlYiAxMSw5NDMyMTEuMDAwMDAwMDAxMgorMTAsVGh1IDMgRmViIDExLDk0MzIxMS4wMDAwMDAwMDA5CisxMSxGcmkgNCBGZWIgMTEsOTQzMjExLjAwMDAwMDAwMDgKKzEyLFNhdCA1IEZlYiAxMSw5NDMyMTEuMDAwMDAwMDAwOAorMTMsU3VuIDYgRmViIDExLDk0MzIxMS4wMDAwMDAwMDEzCisxNCxNb24gNyBGZWIgMTEsOTQzMjExLjAwMDAwMDAwMTMKKzE1LFR1ZSA4IEZlYiAxMSw5NDMyMTEuMDAwMDAwMDAxNgorMTYsV2VkIDkgRmViIDExLDk0MzIxMS4wMDAwMDAwMDE2CisxNyxUaHUgMTAgRmViIDExLDk0MzIxMS4wMDAwMDAwMDIKKzE4LEZyaSAxMSBGZWIgMTEsOTQzMjExLjAwMDAwMDAwMgorMTksU2F0IDEyIEZlYiAxMSw5NDMyMTEuMDAwMDAwMDAyMworMjAsU3VuIDEzIEZlYiAxMSw5NDMyMTEuMDAwMDAwMDAyMworMjEsTW9uIDE0IEZlYiAxMSw5NDMyMTEuMDAwMDAwMDAyOAorMjIsVHVlIDE1IEZlYiAxMSw5NDMyMTEuMDAwMDAwMDAyOAorMjMsV2VkIDE2IEZlYiAxMSw5NDMyMTEuMDAwMDAwMDAzMQorMjQsVGh1IDE3IEZlYiAxMSw5NDMyMTEuMDAwMDAwMDAzCisyNSxGcmkgMTggRmViIDExLDk0MzIxMS4wMDAwMDAwMDM1CisyNixTYXQgMTkgRmViIDExLDk0MzIxMS4wMDAwMDAwMDM1CisyNyxTdW4gMjAgRmViIDExLDk0MzIxMS4wMDAwMDAwMDQKKzI4LE1vbiAyMSBGZWIgMTEsOTQzMjExLjAwMDAwMDAwNAorMjksVHVlIDIyIEZlYiAxMSw5NDMyMTEuMDAwMDAwMDA0MworMzAsV2VkIDIzIEZlYiAxMSw5NDMyMTEuMDAwMDAwMDA0MgorMzEsVGh1IDI0IEZlYiAxMSw5NDMyMTEuMDAwMDAwMDA0NworMzIsRnJpIDI1IEZlYiAxMSw5NDMyMTEuMDAwMDAwMDA0NwpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTSVN0YXRlc09ubHlfRkRfUmVmZXJlbmNlL1Rlc3RTSS9odW1hbi9Qb3B1bGF0aW9uIENvdW50XzEuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTSVN0YXRlc09ubHlfRkRfUmVmZXJlbmNlL1Rlc3RTSS9odW1hbi9Qb3B1bGF0aW9uIENvdW50XzEuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE0ODI5ZTAKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNJU3RhdGVzT25seV9GRF9SZWZlcmVuY2UvVGVzdFNJL2h1bWFuL1BvcHVsYXRpb24gQ291bnRfMS5jc3YKQEAgLTAsMCArMSwzMyBAQAoraXRlcmF0aW9uLHRpbWUsVVMtQUssVVMtQUwsVVMtQVIsVVMtQVosVVMtQ0EsVVMtQ08sVVMtQ1QsVVMtREMsVVMtREUsVVMtRkwsVVMtR0EsVVMtSEksVVMtSUEsVVMtSUQsVVMtSUwsVVMtSU4sVVMtS1MsVVMtS1ksVVMtTEEsVVMtTUEsVVMtTUQsVVMtTUUsVVMtTUksVVMtTU4sVVMtTU8sVVMtTVMsVVMtTVQsVVMtTkMsVVMtTkQsVVMtTkUsVVMtTkgsVVMtTkosVVMtTk0sVVMtTlYsVVMtTlksVVMtT0gsVVMtT0ssVVMtT1IsVVMtUEEsVVMtUkksVVMtU0MsVVMtU0QsVVMtVE4sVVMtVFgsVVMtVVQsVVMtVkEsVVMtVlQsVVMtV0EsVVMtV0ksVVMtV1YsVVMtV1kKKzEsVHVlIDI1IEphbiAxMSw2MjY5MzIuMCw0NDQ3MTAwLjAsMjY3MzQwMC4wLDUxMzA2MzIuMCwzLjM4NzE2NDhFNyw0MzAxMjYxLjAsMzQwNTU2NS4wLDU3MjA1OS4wLDc4MzYwMC4wLDEuNTk4MjM3OEU3LDgxODY0NTMuMCwxMjExNTM3LjAsMjkyNjMyNC4wLDEyOTM5NTMuMCwxLjI0MTkyOTNFNyw2MDgwNDg1LjAsMjY4ODQxOC4wLDQwNDE3NjkuMCw0NDY4OTc2LjAsNjM0OTA5Ny4wLDUyOTY0ODYuMCwxMjc0OTIzLjAsOTkzODQ0NC4wLDQ5MTk0NzkuMCw1NTk1MjExLjAsMjg0NDY1OC4wLDkwMjE5NS4wLDgwNDkzMTMuMCw2NDIyMDAuMCwxNzExMjYzLjAsMTIzNTc4Ni4wLDg0MTQzNTAuMCwxODE5MDQ2LjAsMTk5ODI1Ny4wLDEuODk3NjQ1N0U3LDEuMTM1MzE0RTcsMzQ1MDY1NC4wLDM0MjEzOTkuMCwxLjIyODEwNTRFNywxMDQ4MzE5LjAsNDAxMjAxMi4wLDc1NDg0NC4wLDU2ODkyODMuMCwyLjA4NTE4MkU3LDIyMzMxNjkuMCw3MDc4NTE2LjAsNjA4ODI3LjAsNTg5NDEyMS4wLDUzNjM2NzUuMCwxODA4MzQ0LjAsNDkzNzgyLjAKKzIsV2VkIDI2IEphbiAxMSw2MjY5MzIuMCw0NDQ3MTAwLjAsMjY3MzQwMC4wLDUxMzA2MzIuMCwzLjM4NzE2NDhFNyw0MzAxMjYxLjAsMzQwNTU2NS4wLDU3MjA1OS4wLDc4MzYwMC4wLDEuNTk4MjM3OEU3LDgxODY0NTMuMCwxMjExNTM3LjAsMjkyNjMyNC4wLDEyOTM5NTMuMCwxLjI0MTkyOTNFNyw2MDgwNDg1LjAsMjY4ODQxOC4wLDQwNDE3NjkuMCw0NDY4OTc2LjAsNjM0OTA5Ny4wLDUyOTY0ODYuMCwxMjc0OTIzLjAsOTkzODQ0NC4wLDQ5MTk0NzkuMCw1NTk1MjExLjAsMjg0NDY1OC4wLDkwMjE5NS4wLDgwNDkzMTMuMCw2NDIyMDAuMCwxNzExMjYzLjAsMTIzNTc4Ni4wLDg0MTQzNTAuMCwxODE5MDQ2LjAsMTk5ODI1Ny4wLDEuODk3NjQ1N0U3LDEuMTM1MzE0RTcsMzQ1MDY1NC4wLDM0MjEzOTkuMCwxLjIyODEwNTRFNywxMDQ4MzE5LjAsNDAxMjAxMi4wLDc1NDg0NC4wLDU2ODkyODMuMCwyLjA4NTE4MkU3LDIyMzMxNjkuMCw3MDc4NTE2LjAsNjA4ODI3LjAsNTg5NDEyMS4wLDUzNjM2NzUuMCwxODA4MzQ0LjAsNDkzNzgyLjAKKzMsVGh1IDI3IEphbiAxMSw2MjY5MzIuMCw0NDQ3MTAwLjAsMjY3MzQwMC4wLDUxMzA2MzIuMCwzLjM4NzE2NDhFNyw0MzAxMjYxLjAsMzQwNTU2NS4wLDU3MjA1OS4wLDc4MzYwMC4wLDEuNTk4MjM3OEU3LDgxODY0NTMuMCwxMjExNTM3LjAsMjkyNjMyNC4wLDEyOTM5NTMuMCwxLjI0MTkyOTNFNyw2MDgwNDg1LjAsMjY4ODQxOC4wLDQwNDE3NjkuMCw0NDY4OTc2LjAsNjM0OTA5Ny4wLDUyOTY0ODYuMCwxMjc0OTIzLjAsOTkzODQ0NC4wLDQ5MTk0NzkuMCw1NTk1MjExLjAsMjg0NDY1OC4wLDkwMjE5NS4wLDgwNDkzMTMuMCw2NDIyMDAuMCwxNzExMjYzLjAsMTIzNTc4Ni4wLDg0MTQzNTAuMCwxODE5MDQ2LjAsMTk5ODI1Ny4wLDEuODk3NjQ1N0U3LDEuMTM1MzE0RTcsMzQ1MDY1NC4wLDM0MjEzOTkuMCwxLjIyODEwNTRFNywxMDQ4MzE5LjAsNDAxMjAxMi4wLDc1NDg0NC4wLDU2ODkyODMuMCwyLjA4NTE4MkU3LDIyMzMxNjkuMCw3MDc4NTE2LjAsNjA4ODI3LjAsNTg5NDEyMS4wLDUzNjM2NzUuMCwxODA4MzQ0LjAsNDkzNzgyLjAKKzQsRnJpIDI4IEphbiAxMSw2MjY5MzIuMCw0NDQ3MDk5Ljk5OTk5OTk5OSwyNjczNDAwLjAwMDAwMDAwMDUsNTEzMDYzMi4wLDMuMzg3MTY0OEU3LDQzMDEyNjEuMCwzNDA1NTY1LjAsNTcyMDU5LjAsNzgzNjAwLjAsMS41OTgyMzc4RTcsODE4NjQ1My4wLDEyMTE1MzcuMCwyOTI2MzI0LjAsMTI5Mzk1My4wLDEuMjQxOTI5M0U3LDYwODA0ODQuOTk5OTk5OTk5LDI2ODg0MTguMCw0MDQxNzY4Ljk5OTk5OTk5OTUsNDQ2ODk3Ni4wLDYzNDkwOTcuMCw1Mjk2NDg2LjAsMTI3NDkyMy4wLDk5Mzg0NDMuOTk5OTk5OTk4LDQ5MTk0NzkuMCw1NTk1MjExLjAsMjg0NDY1Ny45OTk5OTk5OTk1LDkwMjE5NS4wMDAwMDAwMDAxLDgwNDkzMTMuMCw2NDIyMDAuMCwxNzExMjYzLjAsMTIzNTc4Ni4wLDg0MTQzNTAuMCwxODE5MDQ2LjAwMDAwMDAwMDIsMTk5ODI1Ny4wLDEuODk3NjQ1N0U3LDEuMTM1MzE0RTcsMzQ1MDY1NC4wLDM0MjEzOTkuMCwxLjIyODEwNTRFNywxMDQ4MzE5LjAsNDAxMjAxMi4wMDAwMDAwMDA1LDc1NDg0NC4wMDAwMDAwMDAxLDU2ODkyODMuMCwyLjA4NTE4MkU3LDIyMzMxNjkuMCw3MDc4NTE2LjAsNjA4ODI3LjAsNTg5NDEyMS4wLDUzNjM2NzUuMCwxODA4MzQ0LjAsNDkzNzgyLjAKKzUsU2F0IDI5IEphbiAxMSw2MjY5MzIuMCw0NDQ3MDk5Ljk5OTk5OTk5OSwyNjczNDAwLjAwMDAwMDAwMDUsNTEzMDYzMi4wLDMuMzg3MTY0OEU3LDQzMDEyNjEuMDAwMDAwMDAxLDM0MDU1NjUuMCw1NzIwNTkuMCw3ODM1OTkuOTk5OTk5OTk5OSwxLjU5ODIzNzhFNyw4MTg2NDUzLjAsMTIxMTUzNy4wMDAwMDAwMDAyLDI5MjYzMjQuMCwxMjkzOTUzLjAsMS4yNDE5MjkzRTcsNjA4MDQ4NS4wLDI2ODg0MTguMCw0MDQxNzY5LjAsNDQ2ODk3Ni4wLDYzNDkwOTcuMCw1Mjk2NDg2LjAwMDAwMDAwMSwxMjc0OTIyLjk5OTk5OTk5OTgsOTkzODQ0My45OTk5OTk5OTgsNDkxOTQ3OS4wLDU1OTUyMTEuMCwyODQ0NjU3Ljk5OTk5OTk5OTUsOTAyMTk1LjAwMDAwMDAwMDEsODA0OTMxMi45OTk5OTk5OTksNjQyMjAwLjAsMTcxMTI2Mi45OTk5OTk5OTk4LDEyMzU3ODYuMCw4NDE0MzQ5Ljk5OTk5OTk5OCwxODE5MDQ2LjAwMDAwMDAwMDIsMTk5ODI1Ni45OTk5OTk5OTk4LDEuODk3NjQ1N0U3LDEuMTM1MzE0RTcsMzQ1MDY1NC4wLDM0MjEzOTkuMCwxLjIyODEwNTRFNywxMDQ4MzE5LjAsNDAxMjAxMi4wMDAwMDAwMDA1LDc1NDg0NC4wMDAwMDAwMDAxLDU2ODkyODMuMDAwMDAwMDAxLDIuMDg1MTgyRTcsMjIzMzE2OS4wLDcwNzg1MTYuMCw2MDg4MjcuMCw1ODk0MTIxLjAsNTM2MzY3NS4wLDE4MDgzNDQuMCw0OTM3ODIuMAorNixTdW4gMzAgSmFuIDExLDYyNjkzMi4wMDAwMDAwMDAxLDQ0NDcwOTkuOTk5OTk5OTk5LDI2NzM0MDAuMDAwMDAwMDAwNSw1MTMwNjMyLjAsMy4zODcxNjQ4RTcsNDMwMTI2MS4wMDAwMDAwMDEsMzQwNTU2NS4wLDU3MjA1OS4wMDAwMDAwMDAxLDc4MzU5OS45OTk5OTk5OTk5LDEuNTk4MjM3OEU3LDgxODY0NTMuMCwxMjExNTM3LjAsMjkyNjMyNC4wLDEyOTM5NTMuMCwxLjI0MTkyOTNFNyw2MDgwNDg0Ljk5OTk5OTk5OSwyNjg4NDE4LjAsNDA0MTc2OC45OTk5OTk5OTk1LDQ0Njg5NzYuMCw2MzQ5MDk2Ljk5OTk5OTk5OSw1Mjk2NDg2LjAsMTI3NDkyMi45OTk5OTk5OTk4LDk5Mzg0NDMuOTk5OTk5OTk4LDQ5MTk0NzkuMCw1NTk1MjExLjAsMjg0NDY1OC4wLDkwMjE5NS4wMDAwMDAwMDAxLDgwNDkzMTIuOTk5OTk5OTk5LDY0MjIwMC4wLDE3MTEyNjMuMCwxMjM1Nzg2LjAsODQxNDM1MC4wLDE4MTkwNDYuMCwxOTk4MjU2Ljk5OTk5OTk5OTgsMS44OTc2NDU3RTcsMS4xMzUzMTRFNywzNDUwNjU0LjAsMzQyMTM5OS4wLDEuMjI4MTA1NEU3LDEwNDgzMTkuMCw0MDEyMDEyLjAwMDAwMDAwMSw3NTQ4NDQuMDAwMDAwMDAwMSw1Njg5MjgzLjAwMDAwMDAwMSwyLjA4NTE4MkU3LDIyMzMxNjkuMDAwMDAwMDAwNSw3MDc4NTE2LjAsNjA4ODI3LjAsNTg5NDEyMS4wLDUzNjM2NzQuOTk5OTk5OTk5LDE4MDgzNDMuOTk5OTk5OTk5OCw0OTM3ODEuOTk5OTk5OTk5OTQKKzcsTW9uIDMxIEphbiAxMSw2MjY5MzIuMDAwMDAwMDAwMSw0NDQ3MDk5Ljk5OTk5OTk5OSwyNjczNDAwLjAwMDAwMDAwMDUsNTEzMDYzMi4wLDMuMzg3MTY0OEU3LDQzMDEyNjEuMDAwMDAwMDAxLDM0MDU1NjUuMCw1NzIwNTkuMCw3ODM2MDAuMCwxLjU5ODIzNzhFNyw4MTg2NDUzLjAsMTIxMTUzNy4wMDAwMDAwMDAyLDI5MjYzMjQuMDAwMDAwMDAwNSwxMjkzOTUzLjAsMS4yNDE5MjkzRTcsNjA4MDQ4NC45OTk5OTk5OTksMjY4ODQxNy45OTk5OTk5OTk1LDQwNDE3NjkuMCw0NDY4OTc2LjAsNjM0OTA5Ni45OTk5OTk5OTksNTI5NjQ4Ni4wLDEyNzQ5MjIuOTk5OTk5OTk5OCw5OTM4NDQzLjk5OTk5OTk5OCw0OTE5NDc5LjAwMDAwMDAwMSw1NTk1MjExLjAsMjg0NDY1OC4wLDkwMjE5NS4wMDAwMDAwMDAyLDgwNDkzMTMuMCw2NDIxOTkuOTk5OTk5OTk5OSwxNzExMjYzLjAwMDAwMDAwMDIsMTIzNTc4Ni4wLDg0MTQzNTAuMCwxODE5MDQ2LjAwMDAwMDAwMDIsMTk5ODI1Ny4wLDEuODk3NjQ1N0U3LDEuMTM1MzEzOTk5OTk5OTk5OEU3LDM0NTA2NTQuMCwzNDIxMzk5LjAsMS4yMjgxMDU0RTcsMTA0ODMxOS4wLDQwMTIwMTIuMDAwMDAwMDAxLDc1NDg0NC4wMDAwMDAwMDAyLDU2ODkyODMuMCwyLjA4NTE4MkU3LDIyMzMxNjkuMDAwMDAwMDAwNSw3MDc4NTE2LjAsNjA4ODI3LjAsNTg5NDEyMS4wLDUzNjM2NzQuOTk5OTk5OTk5LDE4MDgzNDMuOTk5OTk5OTk5NSw0OTM3ODEuOTk5OTk5OTk5OTQKKzgsVHVlIDEgRmViIDExLDYyNjkzMi4wMDAwMDAwMDAyLDQ0NDcxMDAuMCwyNjczNDAwLjAsNTEzMDYzMi4wLDMuMzg3MTY0OEU3LDQzMDEyNjEuMDAwMDAwMDAyLDM0MDU1NjUuMDAwMDAwMDAwNSw1NzIwNTkuMDAwMDAwMDAwMiw3ODM1OTkuOTk5OTk5OTk5OSwxLjU5ODIzNzc5OTk5OTk5OThFNyw4MTg2NDUzLjAsMTIxMTUzNy4wMDAwMDAwMDAyLDI5MjYzMjQuMDAwMDAwMDAwNSwxMjkzOTUzLjAwMDAwMDAwMDUsMS4yNDE5MjkzRTcsNjA4MDQ4NC45OTk5OTk5OTksMjY4ODQxNy45OTk5OTk5OTg2LDQwNDE3NjguOTk5OTk5OTk5NSw0NDY4OTc2LjAsNjM0OTA5Ny4wLDUyOTY0ODYuMCwxMjc0OTIzLjAsOTkzODQ0My45OTk5OTk5OTgsNDkxOTQ3OS4wMDAwMDAwMDIsNTU5NTIxMS4wMDAwMDAwMDIsMjg0NDY1OC4wLDkwMjE5NS4wMDAwMDAwMDAzLDgwNDkzMTIuOTk5OTk5OTk5LDY0MjE5OS45OTk5OTk5OTk4LDE3MTEyNjMuMCwxMjM1Nzg2LjAwMDAwMDAwMDIsODQxNDM0OS45OTk5OTk5OTgsMTgxOTA0Ni4wMDAwMDAwMDAyLDE5OTgyNTYuOTk5OTk5OTk5OCwxLjg5NzY0NTcwMDAwMDAwMDRFNywxLjEzNTMxMzk5OTk5OTk5OThFNywzNDUwNjU0LjAsMzQyMTM5OS4wMDAwMDAwMDA1LDEuMjI4MTA1NEU3LDEwNDgzMTguOTk5OTk5OTk5OSw0MDEyMDEyLjAwMDAwMDAwMSw3NTQ4NDQuMDAwMDAwMDAwMSw1Njg5MjgzLjAsMi4wODUxODJFNywyMjMzMTY5LjAsNzA3ODUxNS45OTk5OTk5OTgsNjA4ODI3LjAsNTg5NDEyMS4wMDAwMDAwMDEsNTM2MzY3NC45OTk5OTk5OTksMTgwODM0My45OTk5OTk5OTkzLDQ5Mzc4MS45OTk5OTk5OTk5NAorOSxXZWQgMiBGZWIgMTEsNjI2OTMyLjAwMDAwMDAwMDIsNDQ0NzA5OS45OTk5OTk5OTksMjY3MzM5OS45OTk5OTk5OTk1LDUxMzA2MzIuMDAwMDAwMDAyLDMuMzg3MTY0OEU3LDQzMDEyNjEuMDAwMDAwMDAxLDM0MDU1NjUuMDAwMDAwMDAxLDU3MjA1OS4wMDAwMDAwMDAzLDc4MzYwMC4wLDEuNTk4MjM3OEU3LDgxODY0NTMuMCwxMjExNTM3LjAwMDAwMDAwMDIsMjkyNjMyNC4wMDAwMDAwMDA1LDEyOTM5NTMuMDAwMDAwMDAwNywxLjI0MTkyOTMwMDAwMDAwMDJFNyw2MDgwNDg0Ljk5OTk5OTk5OSwyNjg4NDE3Ljk5OTk5OTk5OCw0MDQxNzY5LjAsNDQ2ODk3Ni4wLDYzNDkwOTYuOTk5OTk5OTk5LDUyOTY0ODYuMDAwMDAwMDAxLDEyNzQ5MjMuMCw5OTM4NDQ0LjAsNDkxOTQ3OS4wMDAwMDAwMDIsNTU5NTIxMS4wMDAwMDAwMDIsMjg0NDY1OC4wMDAwMDAwMDA1LDkwMjE5NS4wMDAwMDAwMDA1LDgwNDkzMTIuOTk5OTk5OTk5LDY0MjE5OS45OTk5OTk5OTk3LDE3MTEyNjMuMCwxMjM1Nzg2LjAwMDAwMDAwMDUsODQxNDM0OS45OTk5OTk5OTgsMTgxOTA0Ni4wLDE5OTgyNTYuOTk5OTk5OTk5NSwxLjg5NzY0NTcwMDAwMDAwMDRFNywxLjEzNTMxMzk5OTk5OTk5OThFNywzNDUwNjUzLjk5OTk5OTk5OTUsMzQyMTM5OS4wMDAwMDAwMDA1LDEuMjI4MTA1Mzk5OTk5OTk5OEU3LDEwNDgzMTguOTk5OTk5OTk5OSw0MDEyMDEyLjAwMDAwMDAwMSw3NTQ4NDQuMDAwMDAwMDAwMSw1Njg5MjgyLjk5OTk5OTk5OCwyLjA4NTE4MjAwMDAwMDAwMDRFNywyMjMzMTY5LjAwMDAwMDAwMDUsNzA3ODUxNi4wLDYwODgyNy4wMDAwMDAwMDAxLDU4OTQxMjEuMCw1MzYzNjc0Ljk5OTk5OTk5OCwxODA4MzQzLjk5OTk5OTk5OSw0OTM3ODEuOTk5OTk5OTk5OQorMTAsVGh1IDMgRmViIDExLDYyNjkzMi4wMDAwMDAwMDAzLDQ0NDcwOTkuOTk5OTk5OTk4LDI2NzM0MDAuMDAwMDAwMDAwNSw1MTMwNjMyLjAwMDAwMDAwMywzLjM4NzE2NDhFNyw0MzAxMjYxLjAsMzQwNTU2NS4wMDAwMDAwMDE0LDU3MjA1OS4wMDAwMDAwMDA1LDc4MzYwMC4wLDEuNTk4MjM3ODAwMDAwMDAwMkU3LDgxODY0NTMuMCwxMjExNTM3LjAwMDAwMDAwMDIsMjkyNjMyNC4wMDAwMDAwMDA1LDEyOTM5NTMuMDAwMDAwMDAxLDEuMjQxOTI5MzAwMDAwMDAwNEU3LDYwODA0ODQuOTk5OTk5OTk5LDI2ODg0MTcuOTk5OTk5OTk4LDQwNDE3NjguOTk5OTk5OTk5NSw0NDY4OTc2LjAsNjM0OTA5Ny4wLDUyOTY0ODYuMDAwMDAwMDAyLDEyNzQ5MjMuMCw5OTM4NDQ0LjAwMDAwMDAwMiw0OTE5NDc5LjAwMDAwMDAwMSw1NTk1MjExLjAwMDAwMDAwMiwyODQ0NjU4LjAsOTAyMTk1LjAwMDAwMDAwMDYsODA0OTMxMi45OTk5OTk5OTksNjQyMTk5Ljk5OTk5OTk5OTgsMTcxMTI2My4wLDEyMzU3ODYuMDAwMDAwMDAwNyw4NDE0MzQ5Ljk5OTk5OTk5OCwxODE5MDQ2LjAsMTk5ODI1Ni45OTk5OTk5OTkzLDEuODk3NjQ1NzAwMDAwMDAwN0U3LDEuMTM1MzE0RTcsMzQ1MDY1My45OTk5OTk5OTk1LDM0MjEzOTkuMDAwMDAwMDAwNSwxLjIyODEwNTM5OTk5OTk5OTZFNywxMDQ4MzE4Ljk5OTk5OTk5OTksNDAxMjAxMi4wMDAwMDAwMDEsNzU0ODQ0LjAwMDAwMDAwMDIsNTY4OTI4Mi45OTk5OTk5OTgsMi4wODUxODE5OTk5OTk5OTk2RTcsMjIzMzE2OS4wMDAwMDAwMDA1LDcwNzg1MTUuOTk5OTk5OTk4LDYwODgyNy4wMDAwMDAwMDAyLDU4OTQxMjEuMCw1MzYzNjc0Ljk5OTk5OTk5OSwxODA4MzQzLjk5OTk5OTk5OTMsNDkzNzgxLjk5OTk5OTk5OTc3CisxMSxGcmkgNCBGZWIgMTEsNjI2OTMyLjAwMDAwMDAwMDEsNDQ0NzA5OS45OTk5OTk5OTksMjY3MzQwMC4wMDAwMDAwMDA1LDUxMzA2MzIuMDAwMDAwMDAzLDMuMzg3MTY0ODAwMDAwMDAxRTcsNDMwMTI2MS4wLDM0MDU1NjUuMDAwMDAwMDAxLDU3MjA1OS4wMDAwMDAwMDA2LDc4MzYwMC4wLDEuNTk4MjM3ODAwMDAwMDAwMkU3LDgxODY0NTIuOTk5OTk5OTk5LDEyMTE1MzcuMDAwMDAwMDAwMiwyOTI2MzI0LjAwMDAwMDAwMDUsMTI5Mzk1My4wMDAwMDAwMDEyLDEuMjQxOTI5MzAwMDAwMDAwNEU3LDYwODA0ODQuOTk5OTk5OTk5LDI2ODg0MTcuOTk5OTk5OTk3Nyw0MDQxNzY5LjAsNDQ2ODk3Ni4wLDYzNDkwOTcuMDAwMDAwMDAyLDUyOTY0ODYuMDAwMDAwMDAyLDEyNzQ5MjMuMDAwMDAwMDAwMiw5OTM4NDQ0LjAwMDAwMDAwNCw0OTE5NDc5LjAwMDAwMDAwMiw1NTk1MjExLjAwMDAwMDAwNCwyODQ0NjU4LjAwMDAwMDAwMDUsOTAyMTk1LjAwMDAwMDAwMDcsODA0OTMxMy4wLDY0MjE5OS45OTk5OTk5OTk5LDE3MTEyNjMuMCwxMjM1Nzg2LjAwMDAwMDAwMDcsODQxNDM1MC4wLDE4MTkwNDYuMCwxOTk4MjU2Ljk5OTk5OTk5ODgsMS44OTc2NDU3MDAwMDAwMDA3RTcsMS4xMzUzMTM5OTk5OTk5OTk4RTcsMzQ1MDY1My45OTk5OTk5OTksMzQyMTM5OS4wMDAwMDAwMDA1LDEuMjI4MTA1NEU3LDEwNDgzMTkuMDAwMDAwMDAwMSw0MDEyMDEyLjAwMDAwMDAwMTQsNzU0ODQ0LjAwMDAwMDAwMDEsNTY4OTI4Mi45OTk5OTk5OTksMi4wODUxODE5OTk5OTk5OTk2RTcsMjIzMzE2OS4wMDAwMDAwMDA1LDcwNzg1MTUuOTk5OTk5OTk5LDYwODgyNy4wLDU4OTQxMjEuMCw1MzYzNjc0Ljk5OTk5OTk5OSwxODA4MzQzLjk5OTk5OTk5OTgsNDkzNzgxLjk5OTk5OTk5OTgKKzEyLFNhdCA1IEZlYiAxMSw2MjY5MzIuMDAwMDAwMDAwMSw0NDQ3MDk5Ljk5OTk5OTk5OSwyNjczNDAwLjAwMDAwMDAwMSw1MTMwNjMyLjAwMDAwMDAwNSwzLjM4NzE2NDgwMDAwMDAwMUU3LDQzMDEyNjEuMDAwMDAwMDAxLDM0MDU1NjUuMCw1NzIwNTkuMDAwMDAwMDAwNiw3ODM2MDAuMDAwMDAwMDAwMSwxLjU5ODIzNzc5OTk5OTk5OThFNyw4MTg2NDUyLjk5OTk5OTk5OCwxMjExNTM2Ljk5OTk5OTk5OTgsMjkyNjMyNC4wLDEyOTM5NTMuMDAwMDAwMDAxNCwxLjI0MTkyOTMwMDAwMDAwMDdFNyw2MDgwNDg0Ljk5OTk5OTk5OSwyNjg4NDE3Ljk5OTk5OTk5OCw0MDQxNzY5LjAwMDAwMDAwMDUsNDQ2ODk3NS45OTk5OTk5OTksNjM0OTA5Ny4wMDAwMDAwMDIsNTI5NjQ4Ni4wMDAwMDAwMDMsMTI3NDkyMy4wMDAwMDAwMDA1LDk5Mzg0NDQuMDAwMDAwMDAyLDQ5MTk0NzkuMDAwMDAwMDAyLDU1OTUyMTEuMDAwMDAwMDAyLDI4NDQ2NTguMCw5MDIxOTUuMDAwMDAwMDAwOCw4MDQ5MzEzLjAsNjQyMTk5Ljk5OTk5OTk5OTgsMTcxMTI2Mi45OTk5OTk5OTk4LDEyMzU3ODYuMDAwMDAwMDAwNSw4NDE0MzUwLjAwMDAwMDAwMiwxODE5MDQ2LjAsMTk5ODI1Ni45OTk5OTk5OTg2LDEuODk3NjQ1NzAwMDAwMDAxRTcsMS4xMzUzMTRFNywzNDUwNjUzLjk5OTk5OTk5OSwzNDIxMzk4Ljk5OTk5OTk5OTUsMS4yMjgxMDU0MDAwMDAwMDAyRTcsMTA0ODMxOS4wLDQwMTIwMTIuMDAwMDAwMDAxLDc1NDg0NC4wMDAwMDAwMDAxLDU2ODkyODIuOTk5OTk5OTk5LDIuMDg1MTgxOTk5OTk5OTk5M0U3LDIyMzMxNjkuMCw3MDc4NTE2LjAsNjA4ODI3LjAwMDAwMDAwMDEsNTg5NDEyMC45OTk5OTk5OTksNTM2MzY3NC45OTk5OTk5OTksMTgwODM0My45OTk5OTk5OTkzLDQ5Mzc4MS45OTk5OTk5OTk5CisxMyxTdW4gNiBGZWIgMTEsNjI2OTMyLjAwMDAwMDAwMDEsNDQ0NzA5OS45OTk5OTk5OTksMjY3MzQwMC4wMDAwMDAwMDE0LDUxMzA2MzIuMDAwMDAwMDA2LDMuMzg3MTY0ODAwMDAwMDAxRTcsNDMwMTI2MC45OTk5OTk5OTksMzQwNTU2NS4wLDU3MjA1OS4wMDAwMDAwMDA3LDc4MzYwMC4wMDAwMDAwMDAxLDEuNTk4MjM3Nzk5OTk5OTk5OEU3LDgxODY0NTIuOTk5OTk5OTk3LDEyMTE1MzYuOTk5OTk5OTk5OCwyOTI2MzIzLjk5OTk5OTk5OTUsMTI5Mzk1My4wMDAwMDAwMDEyLDEuMjQxOTI5MzAwMDAwMDAwNkU3LDYwODA0ODQuOTk5OTk5OTk5LDI2ODg0MTcuOTk5OTk5OTk4LDQwNDE3NjkuMCw0NDY4OTc2LjAsNjM0OTA5Ny4wMDAwMDAwMDMsNTI5NjQ4Ni4wMDAwMDAwMDMsMTI3NDkyMy4wMDAwMDAwMDEsOTkzODQ0My45OTk5OTk5OTgsNDkxOTQ3OS4wMDAwMDAwMDIsNTU5NTIxMS4wMDAwMDAwMDIsMjg0NDY1OC4wLDkwMjE5NS4wMDAwMDAwMDA3LDgwNDkzMTMuMCw2NDIxOTkuOTk5OTk5OTk5OSwxNzExMjYyLjk5OTk5OTk5OTUsMTIzNTc4Ni4wMDAwMDAwMDA1LDg0MTQzNTAuMDAwMDAwMDAyLDE4MTkwNDYuMCwxOTk4MjU2Ljk5OTk5OTk5ODgsMS44OTc2NDU3MDAwMDAwMDFFNywxLjEzNTMxNDAwMDAwMDAwMDRFNywzNDUwNjUzLjk5OTk5OTk5OSwzNDIxMzk4Ljk5OTk5OTk5OSwxLjIyODEwNTM5OTk5OTk5OThFNywxMDQ4MzE4Ljk5OTk5OTk5OTgsNDAxMjAxMi4wMDAwMDAwMDA1LDc1NDg0NC4wMDAwMDAwMDAxLDU2ODkyODMuMCwyLjA4NTE4MTk5OTk5OTk5OTNFNywyMjMzMTY5LjAsNzA3ODUxNi4wLDYwODgyNy4wLDU4OTQxMjEuMCw1MzYzNjc0Ljk5OTk5OTk5OSwxODA4MzQzLjk5OTk5OTk5OTMsNDkzNzgxLjk5OTk5OTk5OTk0CisxNCxNb24gNyBGZWIgMTEsNjI2OTMyLjAwMDAwMDAwMDIsNDQ0NzEwMC4wLDI2NzM0MDAuMDAwMDAwMDAwNSw1MTMwNjMyLjAwMDAwMDAwNiwzLjM4NzE2NDhFNyw0MzAxMjYxLjAsMzQwNTU2NS4wMDAwMDAwMDA1LDU3MjA1OS4wMDAwMDAwMDA3LDc4MzYwMC4wLDEuNTk4MjM3OEU3LDgxODY0NTIuOTk5OTk5OTk3LDEyMTE1MzcuMCwyOTI2MzIzLjk5OTk5OTk5OSwxMjkzOTUzLjAwMDAwMDAwMTQsMS4yNDE5MjkzMDAwMDAwMDA0RTcsNjA4MDQ4NC45OTk5OTk5OTksMjY4ODQxNy45OTk5OTk5OTg2LDQwNDE3NjkuMCw0NDY4OTc2LjAsNjM0OTA5Ny4wMDAwMDAwMDQsNTI5NjQ4Ni4wMDAwMDAwMDMsMTI3NDkyMy4wMDAwMDAwMDEsOTkzODQ0My45OTk5OTk5OTgsNDkxOTQ3OS4wMDAwMDAwMDMsNTU5NTIxMS4wMDAwMDAwMDQsMjg0NDY1OC4wLDkwMjE5NS4wMDAwMDAwMDA5LDgwNDkzMTIuOTk5OTk5OTk5LDY0MjE5OS45OTk5OTk5OTk5LDE3MTEyNjIuOTk5OTk5OTk5OCwxMjM1Nzg2LjAwMDAwMDAwMDUsODQxNDM1MC4wLDE4MTkwNDYuMDAwMDAwMDAwNSwxOTk4MjU2Ljk5OTk5OTk5ODgsMS44OTc2NDU3MDAwMDAwMDA3RTcsMS4xMzUzMTQwMDAwMDAwMDA0RTcsMzQ1MDY1My45OTk5OTk5OTg2LDM0MjEzOTguOTk5OTk5OTk5LDEuMjI4MTA1Mzk5OTk5OTk5OEU3LDEwNDgzMTguOTk5OTk5OTk5OSw0MDEyMDEyLjAwMDAwMDAwMSw3NTQ4NDQuMDAwMDAwMDAwMiw1Njg5MjgzLjAsMi4wODUxODE5OTk5OTk5OTkzRTcsMjIzMzE2OC45OTk5OTk5OTk1LDcwNzg1MTUuOTk5OTk5OTk5LDYwODgyNi45OTk5OTk5OTk4LDU4OTQxMjAuOTk5OTk5OTk5LDUzNjM2NzUuMCwxODA4MzQzLjk5OTk5OTk5OTMsNDkzNzgxLjk5OTk5OTk5OTk0CisxNSxUdWUgOCBGZWIgMTEsNjI2OTMyLjAwMDAwMDAwMDMsNDQ0NzA5OS45OTk5OTk5OTgsMjY3MzQwMC4wMDAwMDAwMDA1LDUxMzA2MzIuMDAwMDAwMDA2LDMuMzg3MTY0ODAwMDAwMDAxRTcsNDMwMTI2MS4wMDAwMDAwMDEsMzQwNTU2NS4wLDU3MjA1OS4wMDAwMDAwMDA3LDc4MzU5OS45OTk5OTk5OTk5LDEuNTk4MjM3ODAwMDAwMDAwMkU3LDgxODY0NTIuOTk5OTk5OTk3LDEyMTE1MzcuMDAwMDAwMDAwMiwyOTI2MzIzLjk5OTk5OTk5ODYsMTI5Mzk1My4wMDAwMDAwMDE2LDEuMjQxOTI5MzAwMDAwMDAwMkU3LDYwODA0ODUuMCwyNjg4NDE3Ljk5OTk5OTk5ODYsNDA0MTc2OS4wLDQ0Njg5NzYuMCw2MzQ5MDk3LjAwMDAwMDAwNSw1Mjk2NDg2LjAwMDAwMDAwMywxMjc0OTIzLjAwMDAwMDAwMSw5OTM4NDQzLjk5OTk5OTk5OCw0OTE5NDc5LjAwMDAwMDAwNCw1NTk1MjExLjAwMDAwMDAwNCwyODQ0NjU4LjAsOTAyMTk1LjAwMDAwMDAwMTIsODA0OTMxMi45OTk5OTk5OTksNjQyMTk5Ljk5OTk5OTk5OTgsMTcxMTI2Mi45OTk5OTk5OTk4LDEyMzU3ODYuMDAwMDAwMDAwMiw4NDE0MzUwLjAsMTgxOTA0Ni4wMDAwMDAwMDA1LDE5OTgyNTYuOTk5OTk5OTk4OCwxLjg5NzY0NTcwMDAwMDAwMDdFNywxLjEzNTMxNDAwMDAwMDAwMDRFNywzNDUwNjUzLjk5OTk5OTk5OCwzNDIxMzk4Ljk5OTk5OTk5OCwxLjIyODEwNTM5OTk5OTk5OThFNywxMDQ4MzE5LjAsNDAxMjAxMi4wMDAwMDAwMDEsNzU0ODQ0LjAwMDAwMDAwMDUsNTY4OTI4My4wLDIuMDg1MTgxOTk5OTk5OTk5M0U3LDIyMzMxNjguOTk5OTk5OTk5LDcwNzg1MTUuOTk5OTk5OTk4LDYwODgyNi45OTk5OTk5OTk5LDU4OTQxMjEuMCw1MzYzNjc1LjAsMTgwODM0My45OTk5OTk5OTksNDkzNzgyLjAwMDAwMDAwMDA2CisxNixXZWQgOSBGZWIgMTEsNjI2OTMyLjAwMDAwMDAwMDMsNDQ0NzA5OS45OTk5OTk5OTksMjY3MzQwMC4wLDUxMzA2MzIuMDAwMDAwMDA1LDMuMzg3MTY0OEU3LDQzMDEyNjEuMDAwMDAwMDAyLDM0MDU1NjUuMCw1NzIwNTkuMDAwMDAwMDAwNyw3ODM1OTkuOTk5OTk5OTk5OSwxLjU5ODIzNzhFNyw4MTg2NDUyLjk5OTk5OTk5NywxMjExNTM3LjAsMjkyNjMyMy45OTk5OTk5OTgsMTI5Mzk1My4wMDAwMDAwMDE2LDEuMjQxOTI5MzAwMDAwMDAwMkU3LDYwODA0ODUuMCwyNjg4NDE3Ljk5OTk5OTk5OSw0MDQxNzY5LjAsNDQ2ODk3NS45OTk5OTk5OTksNjM0OTA5Ny4wMDAwMDAwMDYsNTI5NjQ4Ni4wMDAwMDAwMDIsMTI3NDkyMy4wMDAwMDAwMDEsOTkzODQ0My45OTk5OTk5OTgsNDkxOTQ3OS4wMDAwMDAwMDQsNTU5NTIxMS4wMDAwMDAwMDUsMjg0NDY1OC4wLDkwMjE5NS4wMDAwMDAwMDEzLDgwNDkzMTIuOTk5OTk5OTk5LDY0MjE5OS45OTk5OTk5OTk5LDE3MTEyNjMuMCwxMjM1Nzg2LjAwMDAwMDAwMDIsODQxNDM1MC4wLDE4MTkwNDYuMDAwMDAwMDAwNSwxOTk4MjU2Ljk5OTk5OTk5ODYsMS44OTc2NDU3MDAwMDAwMDA0RTcsMS4xMzUzMTQwMDAwMDAwMDA0RTcsMzQ1MDY1My45OTk5OTk5OTksMzQyMTM5OC45OTk5OTk5OTc3LDEuMjI4MTA1Mzk5OTk5OTk5OEU3LDEwNDgzMTguOTk5OTk5OTk5OSw0MDEyMDEyLjAwMDAwMDAwMTQsNzU0ODQ0LjAwMDAwMDAwMDUsNTY4OTI4Mi45OTk5OTk5OTksMi4wODUxODE5OTk5OTk5OTk2RTcsMjIzMzE2OC45OTk5OTk5OTksNzA3ODUxNS45OTk5OTk5OTksNjA4ODI2Ljk5OTk5OTk5OTksNTg5NDEyMS4wLDUzNjM2NzUuMCwxODA4MzQzLjk5OTk5OTk5OTMsNDkzNzgyLjAwMDAwMDAwMDEKKzE3LFRodSAxMCBGZWIgMTEsNjI2OTMyLjAwMDAwMDAwMDMsNDQ0NzA5OS45OTk5OTk5OTgsMjY3MzQwMC4wMDAwMDAwMDA1LDUxMzA2MzIuMDAwMDAwMDA2LDMuMzg3MTY0OEU3LDQzMDEyNjEuMDAwMDAwMDAxLDM0MDU1NjUuMCw1NzIwNTkuMDAwMDAwMDAwNiw3ODM2MDAuMCwxLjU5ODIzNzgwMDAwMDAwMDJFNyw4MTg2NDUyLjk5OTk5OTk5NywxMjExNTM2Ljk5OTk5OTk5OTgsMjkyNjMyMy45OTk5OTk5OTc3LDEyOTM5NTMuMDAwMDAwMDAxNiwxLjI0MTkyOTMwMDAwMDAwMDJFNyw2MDgwNDg1LjAwMDAwMDAwMSwyNjg4NDE3Ljk5OTk5OTk5OTUsNDA0MTc2OC45OTk5OTk5OTk1LDQ0Njg5NzYuMCw2MzQ5MDk3LjAwMDAwMDAwNCw1Mjk2NDg2LjAwMDAwMDAwMSwxMjc0OTIzLjAwMDAwMDAwMSw5OTM4NDQzLjk5OTk5OTk5Niw0OTE5NDc5LjAwMDAwMDAwMiw1NTk1MjExLjAwMDAwMDAwNSwyODQ0NjU3Ljk5OTk5OTk5OTUsOTAyMTk1LjAwMDAwMDAwMTMsODA0OTMxMi45OTk5OTk5OTksNjQyMTk5Ljk5OTk5OTk5OTksMTcxMTI2Mi45OTk5OTk5OTk4LDEyMzU3ODYuMDAwMDAwMDAwMiw4NDE0MzQ5Ljk5OTk5OTk5OCwxODE5MDQ2LjAwMDAwMDAwMDcsMTk5ODI1Ni45OTk5OTk5OTg2LDEuODk3NjQ1NzAwMDAwMDAwNEU3LDEuMTM1MzE0MDAwMDAwMDAwNEU3LDM0NTA2NTMuOTk5OTk5OTk4LDM0MjEzOTguOTk5OTk5OTk4LDEuMjI4MTA1Mzk5OTk5OTk5OEU3LDEwNDgzMTkuMCw0MDEyMDEyLjAwMDAwMDAwMTQsNzU0ODQ0LjAwMDAwMDAwMDMsNTY4OTI4My4wLDIuMDg1MTgxOTk5OTk5OTk5M0U3LDIyMzMxNjguOTk5OTk5OTk5LDcwNzg1MTUuOTk5OTk5OTk5LDYwODgyNy4wLDU4OTQxMjEuMCw1MzYzNjc1LjAsMTgwODM0My45OTk5OTk5OTk1LDQ5Mzc4Mi4wMDAwMDAwMDAxCisxOCxGcmkgMTEgRmViIDExLDYyNjkzMi4wMDAwMDAwMDA1LDQ0NDcwOTkuOTk5OTk5OTk3LDI2NzM0MDAuMDAwMDAwMDAwNSw1MTMwNjMyLjAwMDAwMDAwNSwzLjM4NzE2NDhFNyw0MzAxMjYxLjAwMDAwMDAwMSwzNDA1NTY1LjAsNTcyMDU5LjAwMDAwMDAwMDYsNzgzNjAwLjAsMS41OTgyMzc4MDAwMDAwMDAyRTcsODE4NjQ1Mi45OTk5OTk5OTYsMTIxMTUzNi45OTk5OTk5OTk4LDI5MjYzMjMuOTk5OTk5OTk4LDEyOTM5NTMuMDAwMDAwMDAxNCwxLjI0MTkyOTMwMDAwMDAwMDJFNyw2MDgwNDg1LjAwMDAwMDAwMSwyNjg4NDE3Ljk5OTk5OTk5OTUsNDA0MTc2OS4wLDQ0Njg5NzYuMCw2MzQ5MDk3LjAwMDAwMDAwNCw1Mjk2NDg2LjAwMDAwMDAwMiwxMjc0OTIzLjAwMDAwMDAwMTIsOTkzODQ0My45OTk5OTk5OTYsNDkxOTQ3OS4wMDAwMDAwMDEsNTU5NTIxMS4wMDAwMDAwMDQsMjg0NDY1OC4wLDkwMjE5NS4wMDAwMDAwMDEzLDgwNDkzMTIuOTk5OTk5OTk5LDY0MjE5OS45OTk5OTk5OTk5LDE3MTEyNjIuOTk5OTk5OTk5NSwxMjM1Nzg2LjAwMDAwMDAwMDIsODQxNDM0OS45OTk5OTk5OTgsMTgxOTA0Ni4wMDAwMDAwMDA3LDE5OTgyNTYuOTk5OTk5OTk4NiwxLjg5NzY0NTdFNywxLjEzNTMxNDAwMDAwMDAwMDRFNywzNDUwNjUzLjk5OTk5OTk5NzcsMzQyMTM5OC45OTk5OTk5OTg2LDEuMjI4MTA1Mzk5OTk5OTk5NEU3LDEwNDgzMTkuMCw0MDEyMDEyLjAwMDAwMDAwMTQsNzU0ODQ0LjAwMDAwMDAwMDMsNTY4OTI4My4wMDAwMDAwMDIsMi4wODUxODE5OTk5OTk5OTk2RTcsMjIzMzE2OC45OTk5OTk5OTgsNzA3ODUxNS45OTk5OTk5OTksNjA4ODI3LjAsNTg5NDEyMS4wMDAwMDAwMDEsNTM2MzY3NS4wLDE4MDgzNDMuOTk5OTk5OTk5OCw0OTM3ODIuMDAwMDAwMDAwMDYKKzE5LFNhdCAxMiBGZWIgMTEsNjI2OTMyLjAwMDAwMDAwMDYsNDQ0NzA5OS45OTk5OTk5OTcsMjY3MzQwMC4wLDUxMzA2MzIuMDAwMDAwMDA1LDMuMzg3MTY0OEU3LDQzMDEyNjEuMDAwMDAwMDAxLDM0MDU1NjUuMCw1NzIwNTkuMDAwMDAwMDAwNSw3ODM2MDAuMCwxLjU5ODIzNzhFNyw4MTg2NDUyLjk5OTk5OTk5NywxMjExNTM3LjAsMjkyNjMyMy45OTk5OTk5OTgsMTI5Mzk1My4wMDAwMDAwMDE0LDEuMjQxOTI5M0U3LDYwODA0ODUuMDAwMDAwMDAyLDI2ODg0MTguMCw0MDQxNzY5LjAsNDQ2ODk3Ni4wLDYzNDkwOTcuMDAwMDAwMDA1LDUyOTY0ODYuMDAwMDAwMDAxLDEyNzQ5MjMuMDAwMDAwMDAxLDk5Mzg0NDMuOTk5OTk5OTk4LDQ5MTk0NzkuMDAwMDAwMDAxLDU1OTUyMTEuMDAwMDAwMDA1LDI4NDQ2NTguMCw5MDIxOTUuMDAwMDAwMDAxMyw4MDQ5MzEzLjAsNjQyMTk5Ljk5OTk5OTk5OTksMTcxMTI2Mi45OTk5OTk5OTkzLDEyMzU3ODYuMDAwMDAwMDAwNSw4NDE0MzQ5Ljk5OTk5OTk5OCwxODE5MDQ2LjAwMDAwMDAwMDcsMTk5ODI1Ni45OTk5OTk5OTg2LDEuODk3NjQ1N0U3LDEuMTM1MzE0MDAwMDAwMDAwNkU3LDM0NTA2NTMuOTk5OTk5OTk4LDM0MjEzOTguOTk5OTk5OTk4NiwxLjIyODEwNTM5OTk5OTk5OThFNywxMDQ4MzE4Ljk5OTk5OTk5OTksNDAxMjAxMi4wMDAwMDAwMDIsNzU0ODQ0LjAwMDAwMDAwMDIsNTY4OTI4My4wMDAwMDAwMDEsMi4wODUxODE5OTk5OTk5OTk2RTcsMjIzMzE2OC45OTk5OTk5OTg2LDcwNzg1MTUuOTk5OTk5OTk4LDYwODgyNi45OTk5OTk5OTk5LDU4OTQxMjEuMCw1MzYzNjc1LjAwMDAwMDAwMSwxODA4MzQzLjk5OTk5OTk5OTUsNDkzNzgxLjk5OTk5OTk5OTk0CisyMCxTdW4gMTMgRmViIDExLDYyNjkzMi4wMDAwMDAwMDAzLDQ0NDcwOTkuOTk5OTk5OTk2LDI2NzM0MDAuMCw1MTMwNjMyLjAwMDAwMDAwNiwzLjM4NzE2NDhFNyw0MzAxMjYxLjAwMDAwMDAwMiwzNDA1NTY1LjAwMDAwMDAwMSw1NzIwNTkuMDAwMDAwMDAwNSw3ODM2MDAuMCwxLjU5ODIzNzgwMDAwMDAwMDJFNyw4MTg2NDUyLjk5OTk5OTk5NywxMjExNTM2Ljk5OTk5OTk5OTgsMjkyNjMyMy45OTk5OTk5OTgsMTI5Mzk1My4wMDAwMDAwMDE2LDEuMjQxOTI5MzAwMDAwMDAwMkU3LDYwODA0ODUuMDAwMDAwMDAyLDI2ODg0MTcuOTk5OTk5OTk5NSw0MDQxNzY5LjAwMDAwMDAwMDUsNDQ2ODk3Ni4wLDYzNDkwOTcuMDAwMDAwMDA1LDUyOTY0ODYuMDAwMDAwMDAyLDEyNzQ5MjMuMDAwMDAwMDAxNCw5OTM4NDQ0LjAsNDkxOTQ3OS4wLDU1OTUyMTEuMDAwMDAwMDA2LDI4NDQ2NTguMDAwMDAwMDAwNSw5MDIxOTUuMDAwMDAwMDAxMiw4MDQ5MzEyLjk5OTk5OTk5OSw2NDIxOTkuOTk5OTk5OTk5OCwxNzExMjYyLjk5OTk5OTk5OTUsMTIzNTc4Ni4wLDg0MTQzNDkuOTk5OTk5OTk4LDE4MTkwNDYuMDAwMDAwMDAwNywxOTk4MjU2Ljk5OTk5OTk5ODYsMS44OTc2NDU3MDAwMDAwMDA0RTcsMS4xMzUzMTQwMDAwMDAwMDFFNywzNDUwNjUzLjk5OTk5OTk5NywzNDIxMzk4Ljk5OTk5OTk5OCwxLjIyODEwNTM5OTk5OTk5OThFNywxMDQ4MzE4Ljk5OTk5OTk5OTksNDAxMjAxMi4wMDAwMDAwMDIsNzU0ODQ0LjAwMDAwMDAwMDEsNTY4OTI4My4wMDAwMDAwMDEsMi4wODUxODE5OTk5OTk5OTkzRTcsMjIzMzE2OC45OTk5OTk5OTg2LDcwNzg1MTUuOTk5OTk5OTk4LDYwODgyNi45OTk5OTk5OTk5LDU4OTQxMjEuMDAwMDAwMDAxLDUzNjM2NzUuMDAwMDAwMDAyLDE4MDgzNDMuOTk5OTk5OTk5NSw0OTM3ODIuMAorMjEsTW9uIDE0IEZlYiAxMSw2MjY5MzIuMDAwMDAwMDAwMyw0NDQ3MDk5Ljk5OTk5OTk5NiwyNjczNDAwLjAwMDAwMDAwMDUsNTEzMDYzMi4wMDAwMDAwMDUsMy4zODcxNjQ4RTcsNDMwMTI2MS4wMDAwMDAwMDEsMzQwNTU2NS4wMDAwMDAwMDA1LDU3MjA1OS4wMDAwMDAwMDA2LDc4MzYwMC4wLDEuNTk4MjM3ODAwMDAwMDAwNEU3LDgxODY0NTIuOTk5OTk5OTk2LDEyMTE1MzYuOTk5OTk5OTk5NSwyOTI2MzIzLjk5OTk5OTk5OCwxMjkzOTUzLjAwMDAwMDAwMTQsMS4yNDE5MjkzMDAwMDAwMDA0RTcsNjA4MDQ4NS4wMDAwMDAwMDEsMjY4ODQxNy45OTk5OTk5OTksNDA0MTc2OS4wLDQ0Njg5NzYuMCw2MzQ5MDk3LjAwMDAwMDAwNiw1Mjk2NDg2LjAwMDAwMDAwMSwxMjc0OTIzLjAwMDAwMDAwMSw5OTM4NDQ0LjAwMDAwMDAwMiw0OTE5NDc5LjAsNTU5NTIxMS4wMDAwMDAwMDYsMjg0NDY1OC4wMDAwMDAwMDA1LDkwMjE5NS4wMDAwMDAwMDEsODA0OTMxMi45OTk5OTk5OTgsNjQyMTk5Ljk5OTk5OTk5OTgsMTcxMTI2Mi45OTk5OTk5OTk4LDEyMzU3ODYuMCw4NDE0MzQ5Ljk5OTk5OTk5NiwxODE5MDQ2LjAwMDAwMDAwMDcsMTk5ODI1Ni45OTk5OTk5OTg2LDEuODk3NjQ1NzAwMDAwMDAwNEU3LDEuMTM1MzE0MDAwMDAwMDAxMUU3LDM0NTA2NTMuOTk5OTk5OTk4LDM0MjEzOTguOTk5OTk5OTk4NiwxLjIyODEwNTM5OTk5OTk5OTZFNywxMDQ4MzE5LjAsNDAxMjAxMi4wMDAwMDAwMDIsNzU0ODQ0LjAwMDAwMDAwMDEsNTY4OTI4My4wMDAwMDAwMDEsMi4wODUxODE5OTk5OTk5OTlFNywyMjMzMTY4Ljk5OTk5OTk5OCw3MDc4NTE1Ljk5OTk5OTk5OCw2MDg4MjYuOTk5OTk5OTk5OSw1ODk0MTIxLjAsNTM2MzY3NS4wMDAwMDAwMDMsMTgwODM0My45OTk5OTk5OTkzLDQ5Mzc4Mi4wMDAwMDAwMDAwNgorMjIsVHVlIDE1IEZlYiAxMSw2MjY5MzIuMDAwMDAwMDAwNSw0NDQ3MDk5Ljk5OTk5OTk5NiwyNjczNDAwLjAwMDAwMDAwMSw1MTMwNjMyLjAwMDAwMDAwNCwzLjM4NzE2NDhFNyw0MzAxMjYxLjAsMzQwNTU2NS4wMDAwMDAwMDA1LDU3MjA1OS4wMDAwMDAwMDA2LDc4MzYwMC4wMDAwMDAwMDAxLDEuNTk4MjM3ODAwMDAwMDAwNEU3LDgxODY0NTIuOTk5OTk5OTk2LDEyMTE1MzYuOTk5OTk5OTk5MywyOTI2MzIzLjk5OTk5OTk5OSwxMjkzOTUzLjAwMDAwMDAwMTIsMS4yNDE5MjkzMDAwMDAwMDA0RTcsNjA4MDQ4NS4wMDAwMDAwMDIsMjY4ODQxNy45OTk5OTk5OTksNDA0MTc2OS4wLDQ0Njg5NzUuOTk5OTk5OTk5LDYzNDkwOTcuMDAwMDAwMDA2LDUyOTY0ODYuMCwxMjc0OTIzLjAwMDAwMDAwMSw5OTM4NDQ0LjAwMDAwMDAwNCw0OTE5NDc5LjAsNTU5NTIxMS4wMDAwMDAwMDYsMjg0NDY1OC4wLDkwMjE5NS4wMDAwMDAwMDA5LDgwNDkzMTIuOTk5OTk5OTk2LDY0MjE5OS45OTk5OTk5OTk5LDE3MTEyNjIuOTk5OTk5OTk5OCwxMjM1Nzg2LjAsODQxNDM0OS45OTk5OTk5OTYsMTgxOTA0Ni4wMDAwMDAwMDAyLDE5OTgyNTYuOTk5OTk5OTk4NCwxLjg5NzY0NTcwMDAwMDAwMDRFNywxLjEzNTMxNDAwMDAwMDAwMTFFNywzNDUwNjUzLjk5OTk5OTk5NzcsMzQyMTM5OC45OTk5OTk5OTgsMS4yMjgxMDUzOTk5OTk5OTk0RTcsMTA0ODMxOS4wLDQwMTIwMTIuMDAwMDAwMDAxNCw3NTQ4NDQuMDAwMDAwMDAwMiw1Njg5MjgzLjAwMDAwMDAwMSwyLjA4NTE4MTk5OTk5OTk5ODVFNywyMjMzMTY4Ljk5OTk5OTk5ODYsNzA3ODUxNS45OTk5OTk5OTcsNjA4ODI3LjAwMDAwMDAwMDEsNTg5NDEyMS4wMDAwMDAwMDIsNTM2MzY3NS4wMDAwMDAwMDIsMTgwODM0My45OTk5OTk5OTkzLDQ5Mzc4Mi4wMDAwMDAwMDAwNgorMjMsV2VkIDE2IEZlYiAxMSw2MjY5MzIuMDAwMDAwMDAwNSw0NDQ3MDk5Ljk5OTk5OTk5NiwyNjczNDAwLjAwMDAwMDAwMTQsNTEzMDYzMi4wMDAwMDAwMDQsMy4zODcxNjQ4RTcsNDMwMTI2MS4wLDM0MDU1NjUuMDAwMDAwMDAxLDU3MjA1OS4wMDAwMDAwMDA1LDc4MzYwMC4wMDAwMDAwMDAxLDEuNTk4MjM3ODAwMDAwMDAwNEU3LDgxODY0NTIuOTk5OTk5OTk4LDEyMTE1MzYuOTk5OTk5OTk5MywyOTI2MzI0LjAsMTI5Mzk1My4wMDAwMDAwMDE2LDEuMjQxOTI5MzAwMDAwMDAwNkU3LDYwODA0ODUuMDAwMDAwMDAyLDI2ODg0MTcuOTk5OTk5OTk5NSw0MDQxNzY4Ljk5OTk5OTk5OTUsNDQ2ODk3Ni4wLDYzNDkwOTcuMDAwMDAwMDA2NSw1Mjk2NDg2LjAsMTI3NDkyMy4wMDAwMDAwMDE0LDk5Mzg0NDQuMDAwMDAwMDAyLDQ5MTk0NzkuMCw1NTk1MjExLjAwMDAwMDAwNiwyODQ0NjU4LjAsOTAyMTk1LjAwMDAwMDAwMTIsODA0OTMxMi45OTk5OTk5OTcsNjQyMTk5Ljk5OTk5OTk5OTksMTcxMTI2Mi45OTk5OTk5OTk4LDEyMzU3ODYuMCw4NDE0MzQ5Ljk5OTk5OTk5NCwxODE5MDQ2LjAwMDAwMDAwMDUsMTk5ODI1Ni45OTk5OTk5OTg0LDEuODk3NjQ1NzAwMDAwMDAwN0U3LDEuMTM1MzE0MDAwMDAwMDAxRTcsMzQ1MDY1My45OTk5OTk5OTc3LDM0MjEzOTguOTk5OTk5OTk4NiwxLjIyODEwNTM5OTk5OTk5OTRFNywxMDQ4MzE5LjAwMDAwMDAwMDEsNDAxMjAxMi4wMDAwMDAwMDEsNzU0ODQ0LjAwMDAwMDAwMDEsNTY4OTI4Mi45OTk5OTk5OTksMi4wODUxODE5OTk5OTk5OThFNywyMjMzMTY4Ljk5OTk5OTk5ODYsNzA3ODUxNS45OTk5OTk5OTUsNjA4ODI3LjAwMDAwMDAwMDEsNTg5NDEyMS4wLDUzNjM2NzUuMDAwMDAwMDAyLDE4MDgzNDMuOTk5OTk5OTk5LDQ5Mzc4Mi4wMDAwMDAwMDAwNgorMjQsVGh1IDE3IEZlYiAxMSw2MjY5MzIuMDAwMDAwMDAwMyw0NDQ3MDk5Ljk5OTk5OTk5NywyNjczNDAwLjAwMDAwMDAwMiw1MTMwNjMyLjAwMDAwMDAwMywzLjM4NzE2NDhFNyw0MzAxMjYwLjk5OTk5OTk5OCwzNDA1NTY1LjAwMDAwMDAwMDUsNTcyMDU5LjAwMDAwMDAwMDMsNzgzNjAwLjAwMDAwMDAwMDEsMS41OTgyMzc4MDAwMDAwMDAyRTcsODE4NjQ1Mi45OTk5OTk5OTgsMTIxMTUzNi45OTk5OTk5OTksMjkyNjMyMy45OTk5OTk5OTk1LDEyOTM5NTMuMDAwMDAwMDAxNCwxLjI0MTkyOTMwMDAwMDAwMDdFNyw2MDgwNDg1LjAwMDAwMDAwMiwyNjg4NDE3Ljk5OTk5OTk5OSw0MDQxNzY4Ljk5OTk5OTk5OTUsNDQ2ODk3Ni4wLDYzNDkwOTcuMDAwMDAwMDA3LDUyOTY0ODYuMDAwMDAwMDAxLDEyNzQ5MjMuMDAwMDAwMDAxMiw5OTM4NDQ0LjAwMDAwMDAwMiw0OTE5NDc5LjAwMDAwMDAwMSw1NTk1MjExLjAwMDAwMDAwNSwyODQ0NjU4LjAsOTAyMTk1LjAwMDAwMDAwMSw4MDQ5MzEyLjk5OTk5OTk5Nyw2NDIyMDAuMCwxNzExMjYyLjk5OTk5OTk5OTUsMTIzNTc4NS45OTk5OTk5OTk4LDg0MTQzNDkuOTk5OTk5OTk0LDE4MTkwNDYuMDAwMDAwMDAwNSwxOTk4MjU2Ljk5OTk5OTk5ODQsMS44OTc2NDU3MDAwMDAwMDA0RTcsMS4xMzUzMTQwMDAwMDAwMDExRTcsMzQ1MDY1My45OTk5OTk5OTcsMzQyMTM5OC45OTk5OTk5OTksMS4yMjgxMDUzOTk5OTk5OTk0RTcsMTA0ODMxOS4wMDAwMDAwMDAyLDQwMTIwMTIuMDAwMDAwMDAwNSw3NTQ4NDQuMDAwMDAwMDAwMiw1Njg5MjgzLjAwMDAwMDAwMSwyLjA4NTE4MTk5OTk5OTk5OEU3LDIyMzMxNjguOTk5OTk5OTk4LDcwNzg1MTUuOTk5OTk5OTk2LDYwODgyNy4wMDAwMDAwMDAyLDU4OTQxMjAuOTk5OTk5OTk5LDUzNjM2NzUuMDAwMDAwMDAyLDE4MDgzNDMuOTk5OTk5OTk5Myw0OTM3ODIuMDAwMDAwMDAwMDYKKzI1LEZyaSAxOCBGZWIgMTEsNjI2OTMyLjAwMDAwMDAwMDMsNDQ0NzA5OS45OTk5OTk5OTYsMjY3MzQwMC4wMDAwMDAwMDE0LDUxMzA2MzIuMDAwMDAwMDAzLDMuMzg3MTY0OEU3LDQzMDEyNjEuMCwzNDA1NTY1LjAwMDAwMDAwMDUsNTcyMDU5LjAwMDAwMDAwMDUsNzgzNjAwLjAwMDAwMDAwMDEsMS41OTgyMzc4MDAwMDAwMDA0RTcsODE4NjQ1Mi45OTk5OTk5OTgsMTIxMTUzNi45OTk5OTk5OTkzLDI5MjYzMjQuMCwxMjkzOTUzLjAwMDAwMDAwMTksMS4yNDE5MjkzMDAwMDAwMDFFNyw2MDgwNDg1LjAwMDAwMDAwMiwyNjg4NDE3Ljk5OTk5OTk5ODYsNDA0MTc2OC45OTk5OTk5OTk1LDQ0Njg5NzYuMCw2MzQ5MDk3LjAwMDAwMDAwNiw1Mjk2NDg2LjAsMTI3NDkyMy4wMDAwMDAwMDEsOTkzODQ0NC4wMDAwMDAwMDIsNDkxOTQ3OS4wMDAwMDAwMDIsNTU5NTIxMS4wMDAwMDAwMDYsMjg0NDY1Ny45OTk5OTk5OTk1LDkwMjE5NS4wMDAwMDAwMDEsODA0OTMxMi45OTk5OTk5OTcsNjQyMjAwLjAsMTcxMTI2Mi45OTk5OTk5OTk4LDEyMzU3ODUuOTk5OTk5OTk5OCw4NDE0MzQ5Ljk5OTk5OTk5NCwxODE5MDQ2LjAwMDAwMDAwMDUsMTk5ODI1Ni45OTk5OTk5OTg0LDEuODk3NjQ1NzAwMDAwMDAwN0U3LDEuMTM1MzE0MDAwMDAwMDAxM0U3LDM0NTA2NTMuOTk5OTk5OTk3LDM0MjEzOTguOTk5OTk5OTk5NSwxLjIyODEwNTM5OTk5OTk5OTNFNywxMDQ4MzE5LjAwMDAwMDAwMDIsNDAxMjAxMi4wMDAwMDAwMDEsNzU0ODQ0LjAwMDAwMDAwMDMsNTY4OTI4My4wMDAwMDAwMDEsMi4wODUxODE5OTk5OTk5OThFNywyMjMzMTY4Ljk5OTk5OTk5OCw3MDc4NTE1Ljk5OTk5OTk5Niw2MDg4MjcuMDAwMDAwMDAwMiw1ODk0MTIwLjk5OTk5OTk5OSw1MzYzNjc1LjAwMDAwMDAwMiwxODA4MzQzLjk5OTk5OTk5ODgsNDkzNzgyLjAwMDAwMDAwMDEKKzI2LFNhdCAxOSBGZWIgMTEsNjI2OTMyLjAwMDAwMDAwMDYsNDQ0NzA5OS45OTk5OTk5OTcsMjY3MzQwMC4wMDAwMDAwMDE0LDUxMzA2MzIuMDAwMDAwMDA0LDMuMzg3MTY0OEU3LDQzMDEyNjAuOTk5OTk5OTk4LDM0MDU1NjUuMDAwMDAwMDAwNSw1NzIwNTkuMDAwMDAwMDAwMiw3ODM2MDAuMDAwMDAwMDAwMSwxLjU5ODIzNzgwMDAwMDAwMDJFNyw4MTg2NDUyLjk5OTk5OTk5NywxMjExNTM2Ljk5OTk5OTk5OTMsMjkyNjMyMy45OTk5OTk5OTk1LDEyOTM5NTMuMDAwMDAwMDAxNiwxLjI0MTkyOTMwMDAwMDAwMDdFNyw2MDgwNDg1LjAwMDAwMDAwMiwyNjg4NDE3Ljk5OTk5OTk5OSw0MDQxNzY5LjAsNDQ2ODk3Ni4wLDYzNDkwOTcuMDAwMDAwMDA2NSw1Mjk2NDg2LjAsMTI3NDkyMy4wMDAwMDAwMDA3LDk5Mzg0NDQuMCw0OTE5NDc5LjAwMDAwMDAwMiw1NTk1MjExLjAwMDAwMDAwNiwyODQ0NjU3Ljk5OTk5OTk5OTUsOTAyMTk1LjAwMDAwMDAwMSw4MDQ5MzEyLjk5OTk5OTk5Nyw2NDIyMDAuMCwxNzExMjYyLjk5OTk5OTk5OTgsMTIzNTc4NS45OTk5OTk5OTk1LDg0MTQzNDkuOTk5OTk5OTk0LDE4MTkwNDYuMDAwMDAwMDAwNSwxOTk4MjU2Ljk5OTk5OTk5ODgsMS44OTc2NDU3MDAwMDAwMDA3RTcsMS4xMzUzMTQwMDAwMDAwMDEzRTcsMzQ1MDY1My45OTk5OTk5OTcsMzQyMTM5OS4wLDEuMjI4MTA1Mzk5OTk5OTk5RTcsMTA0ODMxOS4wMDAwMDAwMDAzLDQwMTIwMTIuMCw3NTQ4NDQuMDAwMDAwMDAwMyw1Njg5MjgzLjAwMDAwMDAwMSwyLjA4NTE4MTk5OTk5OTk5OUU3LDIyMzMxNjguOTk5OTk5OTk4LDcwNzg1MTUuOTk5OTk5OTk2LDYwODgyNy4wMDAwMDAwMDAyLDU4OTQxMjEuMCw1MzYzNjc1LjAwMDAwMDAwMiwxODA4MzQzLjk5OTk5OTk5OTMsNDkzNzgyLjAwMDAwMDAwMDIKKzI3LFN1biAyMCBGZWIgMTEsNjI2OTMyLjAwMDAwMDAwMDYsNDQ0NzA5OS45OTk5OTk5OTcsMjY3MzQwMC4wMDAwMDAwMDEsNTEzMDYzMi4wMDAwMDAwMDMsMy4zODcxNjQ4RTcsNDMwMTI2MC45OTk5OTk5OTgsMzQwNTU2NS4wMDAwMDAwMDEsNTcyMDU5LjAwMDAwMDAwMDMsNzgzNjAwLjAwMDAwMDAwMDEsMS41OTgyMzc4MDAwMDAwMDA0RTcsODE4NjQ1Mi45OTk5OTk5OTcsMTIxMTUzNi45OTk5OTk5OTk1LDI5MjYzMjMuOTk5OTk5OTk5LDEyOTM5NTMuMDAwMDAwMDAxNiwxLjI0MTkyOTMwMDAwMDAwMDdFNyw2MDgwNDg1LjAwMDAwMDAwMiwyNjg4NDE3Ljk5OTk5OTk5OSw0MDQxNzY5LjAsNDQ2ODk3Ni4wMDAwMDAwMDEsNjM0OTA5Ny4wMDAwMDAwMDY1LDUyOTY0ODYuMCwxMjc0OTIzLjAwMDAwMDAwMDcsOTkzODQ0NC4wMDAwMDAwMDQsNDkxOTQ3OS4wMDAwMDAwMDIsNTU5NTIxMS4wMDAwMDAwMDYsMjg0NDY1OC4wLDkwMjE5NS4wMDAwMDAwMDEsODA0OTMxMi45OTk5OTk5OTYsNjQyMTk5Ljk5OTk5OTk5OTksMTcxMTI2My4wLDEyMzU3ODUuOTk5OTk5OTk5NSw4NDE0MzQ5Ljk5OTk5OTk5NCwxODE5MDQ2LjAwMDAwMDAwMDcsMTk5ODI1Ni45OTk5OTk5OTksMS44OTc2NDU3MDAwMDAwMDA0RTcsMS4xMzUzMTQwMDAwMDAwMDEzRTcsMzQ1MDY1My45OTk5OTk5OTcsMzQyMTM5OC45OTk5OTk5OTksMS4yMjgxMDUzOTk5OTk5OTg3RTcsMTA0ODMxOS4wMDAwMDAwMDA1LDQwMTIwMTIuMCw3NTQ4NDQuMDAwMDAwMDAwMyw1Njg5MjgzLjAsMi4wODUxODE5OTk5OTk5OTg1RTcsMjIzMzE2OC45OTk5OTk5OTgsNzA3ODUxNS45OTk5OTk5OTgsNjA4ODI3LjAwMDAwMDAwMDIsNTg5NDEyMC45OTk5OTk5OTksNTM2MzY3NS4wMDAwMDAwMDEsMTgwODM0My45OTk5OTk5OTkzLDQ5Mzc4Mi4wMDAwMDAwMDAyMworMjgsTW9uIDIxIEZlYiAxMSw2MjY5MzIuMDAwMDAwMDAwOCw0NDQ3MDk5Ljk5OTk5OTk5OCwyNjczNDAwLjAwMDAwMDAwMSw1MTMwNjMyLjAwMDAwMDAwMiwzLjM4NzE2NDc5OTk5OTk5OUU3LDQzMDEyNjAuOTk5OTk5OTk4LDM0MDU1NjUuMDAwMDAwMDAxNCw1NzIwNTkuMDAwMDAwMDAwMyw3ODM2MDAuMDAwMDAwMDAwMSwxLjU5ODIzNzgwMDAwMDAwMDJFNyw4MTg2NDUyLjk5OTk5OTk5NywxMjExNTM2Ljk5OTk5OTk5OTUsMjkyNjMyMy45OTk5OTk5OTksMTI5Mzk1My4wMDAwMDAwMDE2LDEuMjQxOTI5MzAwMDAwMDAwNkU3LDYwODA0ODUuMDAwMDAwMDAyLDI2ODg0MTcuOTk5OTk5OTk5LDQwNDE3NjkuMDAwMDAwMDAwNSw0NDY4OTc2LjAwMDAwMDAwMSw2MzQ5MDk3LjAwMDAwMDAwNjUsNTI5NjQ4Ni4wLDEyNzQ5MjMuMDAwMDAwMDAwNyw5OTM4NDQ0LjAwMDAwMDAwMiw0OTE5NDc5LjAwMDAwMDAwMiw1NTk1MjExLjAwMDAwMDAwNiwyODQ0NjU4LjAsOTAyMTk1LjAwMDAwMDAwMSw4MDQ5MzEyLjk5OTk5OTk5NCw2NDIxOTkuOTk5OTk5OTk5NSwxNzExMjYzLjAsMTIzNTc4NS45OTk5OTk5OTkzLDg0MTQzNDkuOTk5OTk5OTk0LDE4MTkwNDYuMDAwMDAwMDAwNywxOTk4MjU2Ljk5OTk5OTk5ODgsMS44OTc2NDU3MDAwMDAwMDA0RTcsMS4xMzUzMTQwMDAwMDAwMDEzRTcsMzQ1MDY1My45OTk5OTk5OTY3LDM0MjEzOTguOTk5OTk5OTk4NiwxLjIyODEwNTM5OTk5OTk5ODlFNywxMDQ4MzE5LjAwMDAwMDAwMDYsNDAxMjAxMi4wLDc1NDg0NC4wMDAwMDAwMDA1LDU2ODkyODMuMCwyLjA4NTE4MTk5OTk5OTk5OUU3LDIyMzMxNjguOTk5OTk5OTk4LDcwNzg1MTUuOTk5OTk5OTk3LDYwODgyNy4wMDAwMDAwMDAzLDU4OTQxMjAuOTk5OTk5OTk5LDUzNjM2NzUuMCwxODA4MzQzLjk5OTk5OTk5OTMsNDkzNzgyLjAwMDAwMDAwMDIKKzI5LFR1ZSAyMiBGZWIgMTEsNjI2OTMyLjAwMDAwMDAwMDcsNDQ0NzA5OS45OTk5OTk5OTksMjY3MzQwMC4wMDAwMDAwMDE0LDUxMzA2MzIuMDAwMDAwMDAzLDMuMzg3MTY0OEU3LDQzMDEyNjAuOTk5OTk5OTk4LDM0MDU1NjUuMDAwMDAwMDAwNSw1NzIwNTkuMDAwMDAwMDAwMyw3ODM2MDAuMCwxLjU5ODIzNzgwMDAwMDAwMDRFNyw4MTg2NDUyLjk5OTk5OTk5NywxMjExNTM3LjAsMjkyNjMyMy45OTk5OTk5OTksMTI5Mzk1My4wMDAwMDAwMDE2LDEuMjQxOTI5MzAwMDAwMDAwNEU3LDYwODA0ODUuMDAwMDAwMDAxLDI2ODg0MTcuOTk5OTk5OTk4Niw0MDQxNzY5LjAwMDAwMDAwMDUsNDQ2ODk3Ni4wMDAwMDAwMDEsNjM0OTA5Ny4wMDAwMDAwMDY1LDUyOTY0ODUuOTk5OTk5OTk5LDEyNzQ5MjMuMDAwMDAwMDAwNyw5OTM4NDQ0LjAwMDAwMDAwNCw0OTE5NDc5LjAwMDAwMDAwMiw1NTk1MjExLjAwMDAwMDAwNiwyODQ0NjU4LjAwMDAwMDAwMDUsOTAyMTk1LjAwMDAwMDAwMTIsODA0OTMxMi45OTk5OTk5OTM1LDY0MjE5OS45OTk5OTk5OTk0LDE3MTEyNjMuMCwxMjM1Nzg1Ljk5OTk5OTk5OTUsODQxNDM0OS45OTk5OTk5OTQsMTgxOTA0Ni4wMDAwMDAwMDA3LDE5OTgyNTYuOTk5OTk5OTk4OCwxLjg5NzY0NTY5OTk5OTk5OTZFNywxLjEzNTMxNDAwMDAwMDAwMTNFNywzNDUwNjUzLjk5OTk5OTk5NywzNDIxMzk4Ljk5OTk5OTk5OCwxLjIyODEwNTM5OTk5OTk5ODlFNywxMDQ4MzE5LjAwMDAwMDAwMDcsNDAxMjAxMi4wLDc1NDg0NC4wMDAwMDAwMDA1LDU2ODkyODMuMDAwMDAwMDAxLDIuMDg1MTgxOTk5OTk5OTk4NUU3LDIyMzMxNjguOTk5OTk5OTk4LDcwNzg1MTUuOTk5OTk5OTk3LDYwODgyNy4wMDAwMDAwMDA1LDU4OTQxMjAuOTk5OTk5OTk4LDUzNjM2NzQuOTk5OTk5OTk5LDE4MDgzNDMuOTk5OTk5OTk5LDQ5Mzc4Mi4wMDAwMDAwMDAyCiszMCxXZWQgMjMgRmViIDExLDYyNjkzMi4wMDAwMDAwMDA1LDQ0NDcwOTkuOTk5OTk5OTk5LDI2NzM0MDAuMDAwMDAwMDAxLDUxMzA2MzIuMDAwMDAwMDA1LDMuMzg3MTY0OEU3LDQzMDEyNjAuOTk5OTk5OTk3LDM0MDU1NjUuMCw1NzIwNTkuMDAwMDAwMDAwMyw3ODM2MDAuMDAwMDAwMDAwMSwxLjU5ODIzNzgwMDAwMDAwMDRFNyw4MTg2NDUyLjk5OTk5OTk5NywxMjExNTM2Ljk5OTk5OTk5OTUsMjkyNjMyMy45OTk5OTk5OTksMTI5Mzk1My4wMDAwMDAwMDE0LDEuMjQxOTI5MzAwMDAwMDAwMkU3LDYwODA0ODUuMDAwMDAwMDAxLDI2ODg0MTcuOTk5OTk5OTk4Niw0MDQxNzY5LjAwMDAwMDAwMDUsNDQ2ODk3Ni4wLDYzNDkwOTcuMDAwMDAwMDA2LDUyOTY0ODUuOTk5OTk5OTk5LDEyNzQ5MjMuMDAwMDAwMDAwNyw5OTM4NDQ0LjAwMDAwMDAwMiw0OTE5NDc5LjAwMDAwMDAwMiw1NTk1MjExLjAwMDAwMDAwNiwyODQ0NjU4LjAwMDAwMDAwMDUsOTAyMTk1LjAwMDAwMDAwMSw4MDQ5MzEyLjk5OTk5OTk5Myw2NDIxOTkuOTk5OTk5OTk5MywxNzExMjYzLjAsMTIzNTc4NS45OTk5OTk5OTk1LDg0MTQzNDkuOTk5OTk5OTk0LDE4MTkwNDYuMDAwMDAwMDAwNSwxOTk4MjU2Ljk5OTk5OTk5ODgsMS44OTc2NDU3RTcsMS4xMzUzMTQwMDAwMDAwMDEzRTcsMzQ1MDY1My45OTk5OTk5OTYzLDM0MjEzOTguOTk5OTk5OTk4NiwxLjIyODEwNTM5OTk5OTk5ODdFNywxMDQ4MzE5LjAwMDAwMDAwMDYsNDAxMjAxMi4wLDc1NDg0NC4wMDAwMDAwMDA2LDU2ODkyODMuMCwyLjA4NTE4MTk5OTk5OTk5ODVFNywyMjMzMTY4Ljk5OTk5OTk5OCw3MDc4NTE1Ljk5OTk5OTk5Nyw2MDg4MjcuMDAwMDAwMDAwNSw1ODk0MTIwLjk5OTk5OTk5Nyw1MzYzNjc0Ljk5OTk5OTk5OCwxODA4MzQzLjk5OTk5OTk5OTMsNDkzNzgyLjAwMDAwMDAwMDEKKzMxLFRodSAyNCBGZWIgMTEsNjI2OTMyLjAwMDAwMDAwMDUsNDQ0NzA5OS45OTk5OTk5OTksMjY3MzQwMC4wLDUxMzA2MzIuMDAwMDAwMDA1LDMuMzg3MTY0ODAwMDAwMDAxRTcsNDMwMTI2MC45OTk5OTk5OTUsMzQwNTU2NS4wMDAwMDAwMDEsNTcyMDU5LjAwMDAwMDAwMDUsNzgzNjAwLjAwMDAwMDAwMDEsMS41OTgyMzc4MDAwMDAwMDAyRTcsODE4NjQ1Mi45OTk5OTk5OTgsMTIxMTUzNi45OTk5OTk5OTk4LDI5MjYzMjMuOTk5OTk5OTk5LDEyOTM5NTMuMDAwMDAwMDAxNiwxLjI0MTkyOTNFNyw2MDgwNDg1LjAwMDAwMDAwMiwyNjg4NDE3Ljk5OTk5OTk5OSw0MDQxNzY5LjAwMDAwMDAwMSw0NDY4OTc1Ljk5OTk5OTk5OSw2MzQ5MDk3LjAwMDAwMDAwNjUsNTI5NjQ4NS45OTk5OTk5OTksMTI3NDkyMy4wMDAwMDAwMDA1LDk5Mzg0NDQuMDAwMDAwMDA2LDQ5MTk0NzkuMDAwMDAwMDAzLDU1OTUyMTEuMDAwMDAwMDA2NSwyODQ0NjU4LjAwMDAwMDAwMSw5MDIxOTUuMDAwMDAwMDAxLDgwNDkzMTIuOTk5OTk5OTkzNSw2NDIxOTkuOTk5OTk5OTk5NCwxNzExMjYzLjAsMTIzNTc4NS45OTk5OTk5OTkzLDg0MTQzNDkuOTk5OTk5OTkzLDE4MTkwNDYuMDAwMDAwMDAwNSwxOTk4MjU2Ljk5OTk5OTk5ODgsMS44OTc2NDU2OTk5OTk5OTk2RTcsMS4xMzUzMTQwMDAwMDAwMDEzRTcsMzQ1MDY1My45OTk5OTk5OTYzLDM0MjEzOTguOTk5OTk5OTk4LDEuMjI4MTA1Mzk5OTk5OTk4N0U3LDEwNDgzMTkuMDAwMDAwMDAwNiw0MDEyMDExLjk5OTk5OTk5OTUsNzU0ODQ0LjAwMDAwMDAwMDcsNTY4OTI4My4wLDIuMDg1MTgxOTk5OTk5OTk4RTcsMjIzMzE2OC45OTk5OTk5OTc3LDcwNzg1MTUuOTk5OTk5OTk4LDYwODgyNy4wMDAwMDAwMDAzLDU4OTQxMjAuOTk5OTk5OTk4LDUzNjM2NzQuOTk5OTk5OTk4LDE4MDgzNDMuOTk5OTk5OTk5Myw0OTM3ODIuMDAwMDAwMDAwMQorMzIsRnJpIDI1IEZlYiAxMSw2MjY5MzIuMDAwMDAwMDAwNiw0NDQ3MTAwLjAsMjY3MzM5OS45OTk5OTk5OTk1LDUxMzA2MzIuMDAwMDAwMDA0LDMuMzg3MTY0OEU3LDQzMDEyNjAuOTk5OTk5OTk2LDM0MDU1NjUuMDAwMDAwMDAxLDU3MjA1OS4wMDAwMDAwMDA1LDc4MzYwMC4wMDAwMDAwMDAxLDEuNTk4MjM3ODAwMDAwMDAwMkU3LDgxODY0NTIuOTk5OTk5OTk3LDEyMTE1MzcuMCwyOTI2MzIzLjk5OTk5OTk5OSwxMjkzOTUzLjAwMDAwMDAwMTYsMS4yNDE5MjkzRTcsNjA4MDQ4NS4wMDAwMDAwMDEsMjY4ODQxNy45OTk5OTk5OTgsNDA0MTc2OS4wMDAwMDAwMDA1LDQ0Njg5NzYuMCw2MzQ5MDk3LjAwMDAwMDAwNiw1Mjk2NDg1Ljk5OTk5OTk5OSwxMjc0OTIzLjAwMDAwMDAwMDcsOTkzODQ0NC4wMDAwMDAwMDYsNDkxOTQ3OS4wMDAwMDAwMDIsNTU5NTIxMS4wMDAwMDAwMDY1LDI4NDQ2NTguMDAwMDAwMDAxLDkwMjE5NS4wMDAwMDAwMDEsODA0OTMxMi45OTk5OTk5OTM1LDY0MjE5OS45OTk5OTk5OTk0LDE3MTEyNjIuOTk5OTk5OTk5OCwxMjM1Nzg1Ljk5OTk5OTk5ODgsODQxNDM0OS45OTk5OTk5OTQsMTgxOTA0Ni4wMDAwMDAwMDA1LDE5OTgyNTYuOTk5OTk5OTk4OCwxLjg5NzY0NTdFNywxLjEzNTMxNDAwMDAwMDAwMTNFNywzNDUwNjUzLjk5OTk5OTk5NjcsMzQyMTM5OC45OTk5OTk5OTc3LDEuMjI4MTA1Mzk5OTk5OTk4M0U3LDEwNDgzMTkuMDAwMDAwMDAwNiw0MDEyMDExLjk5OTk5OTk5OTUsNzU0ODQ0LjAwMDAwMDAwMDYsNTY4OTI4Mi45OTk5OTk5OTksMi4wODUxODE5OTk5OTk5OTg1RTcsMjIzMzE2OC45OTk5OTk5OTcsNzA3ODUxNS45OTk5OTk5OTgsNjA4ODI3LjAwMDAwMDAwMDMsNTg5NDEyMC45OTk5OTk5OTYsNTM2MzY3NC45OTk5OTk5OTgsMTgwODM0My45OTk5OTk5OTkzLDQ5Mzc4Mi4wMDAwMDAwMDAyCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNJU3RhdGVzT25seV9GRF9SZWZlcmVuY2UvVGVzdFNJL2h1bWFuL1NfMC5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNJU3RhdGVzT25seV9GRF9SZWZlcmVuY2UvVGVzdFNJL2h1bWFuL1NfMC5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjQ4ZThjMQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0lTdGF0ZXNPbmx5X0ZEX1JlZmVyZW5jZS9UZXN0U0kvaHVtYW4vU18wLmNzdgpAQCAtMCwwICsxLDMzIEBACitpdGVyYXRpb24sdGltZSxzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9ub2RlL3RyYW5zcG9ydC9waXBlL1VTQQorMSxUdWUgMjUgSmFuIDExLDk0MzIxMS4wCisyLFdlZCAyNiBKYW4gMTEsOTQzMjEwLjk5NjgzMjQ1NDEKKzMsVGh1IDI3IEphbiAxMSw5NDMyMTAuODcyNjc0NjkKKzQsRnJpIDI4IEphbiAxMSw5NDMyMDcuMTYwNjQzNTQ0NQorNSxTYXQgMjkgSmFuIDExLDk0MzEwOC4wNzEwMjg3MzY4Cis2LFN1biAzMCBKYW4gMTEsOTQwNjIzLjg2NDI3MTgzMjIKKzcsTW9uIDMxIEphbiAxMSw4ODA5NjUuOTA0NDY2NTYzCis4LFR1ZSAxIEZlYiAxMSwwLjAKKzksV2VkIDIgRmViIDExLDk0MzIxMS4wMDAwMDAwMDEyCisxMCxUaHUgMyBGZWIgMTEsODExMTQ3Ljk4MzE3NTAzMDgKKzExLEZyaSA0IEZlYiAxMSwwLjAKKzEyLFNhdCA1IEZlYiAxMSw0MDE5NDQuNDkzNjU5MTM0MTQKKzEzLFN1biA2IEZlYiAxMSwwLjAKKzE0LE1vbiA3IEZlYiAxMSw0MDE4ODQuMjcyNDYyOTc3OAorMTUsVHVlIDggRmViIDExLDAuMAorMTYsV2VkIDkgRmViIDExLDQwMTg4NC4yMTA4MTQyNTcwNAorMTcsVGh1IDEwIEZlYiAxMSwwLjAKKzE4LEZyaSAxMSBGZWIgMTEsNDAxODg0LjIxMDc1MTE0NzEKKzE5LFNhdCAxMiBGZWIgMTEsMC4wCisyMCxTdW4gMTMgRmViIDExLDQwMTg4NC4yMTA3NTEwODI2MworMjEsTW9uIDE0IEZlYiAxMSwwLjAKKzIyLFR1ZSAxNSBGZWIgMTEsNDAxODg0LjIxMDc1MTA4MjcKKzIzLFdlZCAxNiBGZWIgMTEsMC4wCisyNCxUaHUgMTcgRmViIDExLDQwMTg4NC4yMTA3NTEwODI5CisyNSxGcmkgMTggRmViIDExLDAuMAorMjYsU2F0IDE5IEZlYiAxMSw0MDE4ODQuMjEwNzUxMDgzMDQKKzI3LFN1biAyMCBGZWIgMTEsMC4wCisyOCxNb24gMjEgRmViIDExLDQwMTg4NC4yMTA3NTEwODMxNgorMjksVHVlIDIyIEZlYiAxMSwwLjAKKzMwLFdlZCAyMyBGZWIgMTEsNDAxODg0LjIxMDc1MTA4MzQKKzMxLFRodSAyNCBGZWIgMTEsMC4wCiszMixGcmkgMjUgRmViIDExLDQwMTg4NC4yMTA3NTEwODM1CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNJU3RhdGVzT25seV9GRF9SZWZlcmVuY2UvVGVzdFNJL2h1bWFuL1NfMS5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNJU3RhdGVzT25seV9GRF9SZWZlcmVuY2UvVGVzdFNJL2h1bWFuL1NfMS5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWZkZWM5NQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0lTdGF0ZXNPbmx5X0ZEX1JlZmVyZW5jZS9UZXN0U0kvaHVtYW4vU18xLmNzdgpAQCAtMCwwICsxLDMzIEBACitpdGVyYXRpb24sdGltZSxVUy1BSyxVUy1BTCxVUy1BUixVUy1BWixVUy1DQSxVUy1DTyxVUy1DVCxVUy1EQyxVUy1ERSxVUy1GTCxVUy1HQSxVUy1ISSxVUy1JQSxVUy1JRCxVUy1JTCxVUy1JTixVUy1LUyxVUy1LWSxVUy1MQSxVUy1NQSxVUy1NRCxVUy1NRSxVUy1NSSxVUy1NTixVUy1NTyxVUy1NUyxVUy1NVCxVUy1OQyxVUy1ORCxVUy1ORSxVUy1OSCxVUy1OSixVUy1OTSxVUy1OVixVUy1OWSxVUy1PSCxVUy1PSyxVUy1PUixVUy1QQSxVUy1SSSxVUy1TQyxVUy1TRCxVUy1UTixVUy1UWCxVUy1VVCxVUy1WQSxVUy1WVCxVUy1XQSxVUy1XSSxVUy1XVixVUy1XWQorMSxUdWUgMjUgSmFuIDExLDYyNjkzMi4wLDQ0NDcxMDAuMCwyNjczNDAwLjAsNTEzMDYzMi4wLDMuMzg3MTY0N0U3LDQzMDEyNjEuMCwzNDA1NTY1LjAsNTcyMDU5LjAsNzgzNjAwLjAsMS41OTgyMzc4RTcsODE4NjQ1My4wLDEyMTE1MzcuMCwyOTI2MzI0LjAsMTI5Mzk1My4wLDEuMjQxOTI5M0U3LDYwODA0ODUuMCwyNjg4NDE4LjAsNDA0MTc2OS4wLDQ0Njg5NzYuMCw2MzQ5MDk3LjAsNTI5NjQ4Ni4wLDEyNzQ5MjMuMCw5OTM4NDQ0LjAsNDkxOTQ3OS4wLDU1OTUyMTEuMCwyODQ0NjU4LjAsOTAyMTk1LjAsODA0OTMxMy4wLDY0MjIwMC4wLDE3MTEyNjMuMCwxMjM1Nzg2LjAsODQxNDM1MC4wLDE4MTkwNDYuMCwxOTk4MjU3LjAsMS44OTc2NDU3RTcsMS4xMzUzMTRFNywzNDUwNjU0LjAsMzQyMTM5OS4wLDEuMjI4MTA1NEU3LDEwNDgzMTkuMCw0MDEyMDEyLjAsNzU0ODQ0LjAsNTY4OTI4My4wLDIuMDg1MTgyRTcsMjIzMzE2OS4wLDcwNzg1MTYuMCw2MDg4MjcuMCw1ODk0MTIxLjAsNTM2MzY3NS4wLDE4MDgzNDQuMCw0OTM3ODIuMAorMixXZWQgMjYgSmFuIDExLDYyNjkzMi4wLDQ0NDcxMDAuMCwyNjczNDAwLjAsNTEzMDYzMi4wLDMuMzg3MTYyNzQwMzE2ODEzNEU3LDQzMDEyNjEuMCwzNDA1NTY1LjAsNTcyMDU5LjAsNzgzNjAwLjAsMS41OTgyMzc4RTcsODE4NjQ1My4wLDEyMTE1MzcuMCwyOTI2MzI0LjAsMTI5Mzk1My4wLDEuMjQxOTI5M0U3LDYwODA0ODUuMCwyNjg4NDE4LjAsNDA0MTc2OS4wLDQ0Njg5NzYuMCw2MzQ5MDk3LjAsNTI5NjQ4Ni4wLDEyNzQ5MjMuMCw5OTM4NDQ0LjAsNDkxOTQ3OS4wLDU1OTUyMTEuMCwyODQ0NjU4LjAsOTAyMTk1LjAsODA0OTMxMy4wLDY0MjIwMC4wLDE3MTEyNjMuMCwxMjM1Nzg2LjAsODQxNDM1MC4wLDE4MTkwNDYuMCwxOTk4MjU3LjAsMS44OTc2NDU3RTcsMS4xMzUzMTRFNywzNDUwNjU0LjAsMzQyMTM5OS4wLDEuMjI4MTA1NEU3LDEwNDgzMTkuMCw0MDEyMDEyLjAsNzU0ODQ0LjAsNTY4OTI4My4wLDIuMDg1MTgyRTcsMjIzMzE2OS4wLDcwNzg1MTYuMCw2MDg4MjcuMCw1ODk0MTIxLjAsNTM2MzY3NS4wLDE4MDgzNDQuMCw0OTM3ODIuMAorMyxUaHUgMjcgSmFuIDExLDYyNjkzMS45OTk5ODc4MDI4LDQ0NDcwOTkuOTk5OTg3NzU5LDI2NzMzOTkuOTk5OTkxMDY3LDUxMzA2MzEuOTk5ODk0MDgxLDMuMzg3MTIyMzc3MDM5NTIwNEU3LDQzMDEyNjAuOTk5ODg5MTMxLDM0MDU1NjQuOTk5OTg0MTY5NCw1NzIwNTguOTk5OTU4NzE2OSw3ODM1OTkuOTk5OTk5OTU5NywxLjU5ODIzNzc5OTk3MDcyMkU3LDgxODY0NTIuOTk5ODA3NTI4LDEyMTE1MzYuOTk5OTU0Nzc3OCwyOTI2MzIzLjk5OTk5MjY0MiwxMjkzOTUyLjk5OTk5MDkxMjYsMS4yNDE5MjkyOTk5Nzg1MjYzRTcsNjA4MDQ4NC45OTk5Nzc0OTksMjY4ODQxNy45OTk5OTY1MjQzLDQwNDE3NjguOTk5OTg5MDc5LDQ0Njg5NzUuOTk5OTc5NDI3LDYzNDkwOTYuOTk5OTM1NDQ3LDUyOTY0ODUuOTk5OTUyMzEsMTI3NDkyMi45OTk5OTQ2MjY3LDk5Mzg0NDMuOTk5OTExNzQ4LDQ5MTk0NzguOTk5OTIwNjEsNTU5NTIxMC45OTk5NDEzMTUsMjg0NDY1Ny45OTk5OTQyMzM3LDkwMjE5NC45OTk5OTM2MzYyLDgwNDkzMTIuOTk5OTA1ODQ4LDY0MjE5OS45OTk5OTY5NjQxLDE3MTEyNjIuOTk5OTg5NDQxNiwxMjM1Nzg1Ljk5OTk5MDkzNjEsODQxNDM0OS45OTk5MTU4NzIsMTgxOTA0NS45OTk5ODU0NDg4LDE5OTgyNTYuOTk5ODg4NTQ2LDEuODk3NjQ1Njk5OTgxMDcwM0U3LDEuMTM1MzEzOTk5OTkxNDU1RTcsMzQ1MDY1My45OTk5ODQxMzU0LDM0MjEzOTguOTk5OTY1MjE1LDEuMjI4MTA1Mzk5OTkwMjk2N0U3LDEwNDgzMTguOTk5OTg4MDE0Myw0MDEyMDExLjk5OTk4NTU4LDc1NDg0My45OTk5OTcwNjQ5LDU2ODkyODIuOTk5OTQ3NDg3LDIuMDg1MTgxOTk5OTczMDgzN0U3LDIyMzMxNjguOTk5OTUyMzczLDcwNzg1MTUuOTk5OTI4MjM0LDYwODgyNi45OTk5OTY4NjM0LDU4OTQxMjAuOTk5OTI2NzYsNTM2MzY3NC45OTk5NzUyNywxODA4MzQzLjk5OTk5ODM1NzgsNDkzNzgxLjk5OTk5NzgxMDQKKzQsRnJpIDI4IEphbiAxMSw2MjY5MzEuOTk5MjU4NTIsNDQ0NzA5OS45OTkyNTU4MDQsMjY3MzM5OS45OTk0NTY5MTMsNTEzMDYzMS45OTM1NjEwODMsMy4zODYyOTEwMzA1NjkxMDU2RTcsNDMwMTI2MC45OTMyNjAzMzUsMzQwNTU2NC45OTkwMzc1NTc3LDU3MjA1OC45OTc0OTEwMDc2LDc4MzU5OS45OTk5OTc1NDk5LDEuNTk4MjM3Nzk4MjIwMTUyMkU3LDgxODY0NTIuOTg4Mjk5NjcsMTIxMTUzNi45OTcyNTExMywyOTI2MzIzLjk5OTU1MjY2NTcsMTI5Mzk1Mi45OTk0NDc1MzEsMS4yNDE5MjkyOTg2OTQ1NzdFNyw2MDgwNDg0Ljk5ODYzMjA3NSwyNjg4NDE3Ljk5OTc4ODY4NCw0MDQxNzY4Ljk5OTMzNjA0Myw0NDY4OTc1Ljk5ODc0OTI3NCw2MzQ5MDk2Ljk5NjA3NTYxMiw1Mjk2NDg1Ljk5NzEwMDY4OSwxMjc0OTIyLjk5OTY3MzMzMjMsOTkzODQ0My45OTQ2MzQ4MSw0OTE5NDc4Ljk5NTE3Mzc2OCw1NTk1MjEwLjk5NjQzMjI4OCwyODQ0NjU3Ljk5OTY0OTQ0MSw5MDIxOTQuOTk5NjEzMTA4Niw4MDQ5MzEyLjk5NDI3NjE3Nyw2NDIxOTkuOTk5ODE1NDMzMywxNzExMjYyLjk5OTM1ODEwNDMsMTIzNTc4NS45OTk0NDg5NjEsODQxNDM0OS45OTQ4ODU1NSwxODE5MDQ1Ljk5OTExNTM2LDE5OTgyNTYuOTkzMjI1ODA5LDEuODk3NjQ1Njk4ODQ5MTgyNkU3LDEuMTM1MzEzOTk5NDgwNTA1RTcsMzQ1MDY1My45OTkwMzU1MTYsMzQyMTM5OC45OTc4ODUyOTc1LDEuMjI4MTA1Mzk5NDEwMDg5OUU3LDEwNDgzMTguOTk5MjcxMzUyOSw0MDEyMDExLjk5OTEyMzMwMzcsNzU0ODQzLjk5OTgyMTU1NzcsNTY4OTI4Mi45OTY4MDc1MTYsMi4wODUxODE5OTgzNjM2NjkyRTcsMjIzMzE2OC45OTcxMDQ3NDMsNzA3ODUxNS45OTU2MzcwNzMsNjA4ODI2Ljk5OTgwOTMwODcsNTg5NDEyMC45OTU1NDc0OTYsNTM2MzY3NC45OTg0OTY1MTYsMTgwODM0My45OTk5MDAxNjA2LDQ5Mzc4MS45OTk4NjY4ODMxCis1LFNhdCAyOSBKYW4gMTEsNjI2OTMxLjk2OTk0NTY4OSw0NDQ3MDk5Ljk2OTgzMzE2LDI2NzMzOTkuOTc3OTg1MzcsNTEzMDYzMS43MzkwMTM3OTksMy4zNjkxNzIzODE3OTE2MzlFNyw0MzAxMjYwLjcyNjgzMDU3NzUsMzQwNTU2NC45NjA5ODY2MDM1LDU3MjA1OC44OTgzMjk4MDUsNzgzNTk5Ljk5OTkwMDY4MjYsMS41OTgyMzc3Mjc4NTcyNjIzRTcsODE4NjQ1Mi41MjU3NjE1NTgsMTIxMTUzNi44ODg1OTAyNDcxLDI5MjYzMjMuOTgxODY2NzQ5LDEyOTM5NTIuOTc3NjA1NDc2MywxLjI0MTkyOTI0NzA4NjkwMThFNyw2MDgwNDg0Ljk0NDU0OTgxLDI2ODg0MTcuOTkxNDMzOTg0LDQwNDE3NjguOTczMDg1NzAzMyw0NDY4OTc1Ljk0OTMwMDc3LDYzNDkwOTYuODQwOTI2MDA2LDUyOTY0ODUuODgyNDc2NTU4LDEyNzQ5MjIuOTg2NzU4MjMwNSw5OTM4NDQzLjc4MjUyMjE5Miw0OTE5NDc4LjgwNDM3NTc5OSw1NTk1MjEwLjg1NTM4Mzk3NDUsMjg0NDY1Ny45ODU3ODk2MjAzLDkwMjE5NC45ODQzMTcyMTc1LDgwNDkzMTIuNzY3OTg4MTcwNSw2NDIxOTkuOTkyNTE4NDM4LDE3MTEyNjIuOTczOTgwNDIzNSwxMjM1Nzg1Ljk3NzY2MzQ3NTgsODQxNDM0OS43OTI2ODcwNjQsMTgxOTA0NS45NjQxNDA5Njg0LDE5OTgyNTYuNzI1NDcxODU2LDEuODk3NjQ1NjUzMzUxODg5NkU3LDEuMTM1MzEzOTc4OTQyMTM0NkU3LDM0NTA2NTMuOTYwOTAzODIzNCwzNDIxMzk4LjkxNDI4MTExNCwxLjIyODEwNTM3NjA4Nzg4NjhFNywxMDQ4MzE4Ljk3MDQ2NDY3NTIsNDAxMjAxMS45NjQ0NjIxODUzLDc1NDg0My45OTI3NjY2NjA0LDU2ODkyODIuODcwNTkyOTE3LDIuMDg1MTgxOTMzNjcyNjgzM0U3LDIyMzMxNjguODgyNjQ4MDE5Niw3MDc4NTE1LjgyMzE0OTkyMiw2MDg4MjYuOTkyMjcwMTg4NCw1ODk0MTIwLjgxOTUyMDk4NCw1MzYzNjc0LjkzOTA1NDk5NCwxODA4MzQzLjk5NTk1Mjg1MjUsNDkzNzgxLjk5NDYwMzk5MDY0Cis2LFN1biAzMCBKYW4gMTEsNjI2OTMwLjk4NDcwOTIxMDcsNDQ0NzA5OC45ODA4MjMwNzIsMjY3MzM5OS4yNTYyNDQ5OTksNTEzMDYyMy4xODM0NTA1ODUsMy4wMTg0ODgyOTkwMzgzNDlFNyw0MzAxMjUxLjc3MjExNjY4NiwzNDA1NTYzLjY4MTk1NzQ0MzcsNTcyMDU1LjU2NjI5MTU1NjUsNzgzNTk5Ljk5NjY0NDU1MDcsMS41OTgyMzUzNjI4Njk3MjQ2RTcsODE4NjQzNi45Nzk2NjI1NiwxMjExNTMzLjIzNjcwNTA1MjQsMjkyNjMyMy4zODczNzMyNDQ0LDEyOTM5NTIuMjQzNDI0MzI3OCwxLjI0MTkyNzUxMjQ3NzQwNjFFNyw2MDgwNDgzLjEyNjY0MjEsMjY4ODQxNy43MTA1OTc4MjUyLDQwNDE3NjguMDkwNzA4OTU4LDQ0Njg5NzQuMjg3MTU4NjU4LDYzNDkwOTEuNjI1OTM0ODQ0LDUyOTY0ODIuMDI5NjMxOTg5LDEyNzQ5MjIuNTUyNjM0MzU1OCw5OTM4NDM2LjY1MjgwNjYyLDQ5MTk0NzIuMzkxMzM5ODMyLDU1OTUyMDYuMTE0MzgyMzk1NSwyODQ0NjU3LjUxOTkwNTE4NzcsOTAyMTk0LjQ3MDE3MzU5NzcsODA0OTMwNS4xNjE5MDQyMjksNjQyMTk5Ljc0NzI0MDMzMDgsMTcxMTI2Mi4xMjA5NTE5Njk2LDEyMzU3ODUuMjQ1Mzg0OTUzMiw4NDE0MzQyLjk5NjI1MjAzOCwxODE5MDQ0Ljc4ODU0NTgzMywxOTk4MjQ3LjcyNzYwMjMwNjMsMS44OTc2NDQxMjQwNjUzMTU0RTcsMS4xMzUzMTMyODg1ODM3MjU5RTcsMzQ1MDY1Mi42NzkxNjA0Mjg3LDM0MjEzOTYuMTA0MTIxOTg3MiwxLjIyODEwNDU5MjE1NzY4MDVFNywxMDQ4MzE4LjAwMjIwMTcwMjEsNDAxMjAxMC43OTkzNzE0MjM3LDc1NDg0My43NTU2MjUzMzY1LDU2ODkyNzguNjI4MTY0NDQsMi4wODUxNzk3NTkyNjYyOTA4RTcsMjIzMzE2NS4wMzU2Njc3MjksNzA3ODUxMC4wMjUzOTY4ODYsNjA4ODI2LjczODg1MzkzMTEsNTg5NDExNC45MDI4NjgyODgsNTM2MzY3Mi45NDEwMTE3MDQ1LDE4MDgzNDMuODYzMjY3MTc4Niw0OTM3ODEuODE3Njk5MDkzNQorNyxNb24gMzEgSmFuIDExLDYyNjY5OC4xODM4MjY2Njc2LDQ0NDY4NjUuMjQ3MjMxMTY4LDI2NzMyMjguNjg3Nzg3OTU3LDUxMjg2MDEuNjIwMjkzMTQ0LDcyMzU4MzkuMTIxNzEyMTI5LDQyOTkxMzYuMDA5MjI4OTcxLDM0MDUyNjEuNDEzOTM5MTEzNyw1NzEyNjguNjc3MTkzMTk2LDc4MzU5OS4yMjcwOTgyODMxLDEuNTk3Njc2NTM0ODM1NTU3NUU3LDgxODI3NjMuNzU4NzI3OTkxLDEyMTA2NzAuNDk3MjM1OTYzNCwyOTI2MTgyLjg4OTg2NzgxMiwxMjkzNzc4Ljc0MTU2MzAzNTQsMS4yNDE1MTc2MzM0MDY2MTE5RTcsNjA4MDA1My41MDMyNTUyMTIsMjY4ODM1MS4zMzkzMzE3MTMsNDA0MTU1OS41NTc3NTQ1MzQ4LDQ0Njg1ODEuNDc5MzUwNjkxLDYzNDc4NTkuMjU4NzQzMzY0LDUyOTU1NzEuNTQzNDY3MDYsMTI3NDgxOS45NTczNDg2MDIxLDk5MzY3NTEuNzg5NjQ1NjcyLDQ5MTc5NTcuMDA2NDEyMTc0LDU1OTQwODUuNzYwNjAyODk5LDI4NDQ1NDcuNDE2MjAyNDc5NSw5MDIwNzIuOTY3NjcyMDIxMiw4MDQ3NTA3Ljc3ODY5NzYwNCw2NDIxNDEuNzgxNjYxMTczNywxNzExMDYwLjUzMTI1OTE5OTEsMTIzNTYxMi4xOTM3MTk1NjEsODQxMjczNi45MTEzNzU4MTUsMTgxODc2Ni45NzQ0Nzk5MTY3LDE5OTYxMjIuNDM4NDAwMDY3MiwxLjg5NzI4MjczMzkyMjU4NzdFNywxLjEzNTE1MDE0Mzc4NjUxMDZFNywzNDUwMzQ5Ljc2OTUzNDk3MSwzNDIwNzMyLjAyODYxMDYzNiwxLjIyNzkxOTMzNTI5Nzg0MjNFNywxMDQ4MDg5LjE5MjY3OTM1MjgsNDAxMTczNS40NTQ5MjE5NTg1LDc1NDc4Ny43MTI0ODQ3NTU4LDU2ODgyNzYuMDc5NzM4OTgxLDIuMDg0NjY1OTM0ODM1ODA4NEU3LDIyMzIyNTYuMDUzMDk5NDM5LDcwNzcxMzkuOTQzOTIzMjIxLDYwODc2Ni44NTAyODYyMTA3LDU4OTI3MTYuNzU3NTQ3MTU5LDUzNjMyMDAuNzUwOTc1MDc3LDE4MDgzMTIuNTA0OTQxMjc0NCw0OTM3NDAuMDEwMzU0MjU3MgorOCxUdWUgMSBGZWIgMTEsMTI5ODEuMjMxNjU3Nzg3MjIsMTA2NzU1LjQzMTk3Nzk3MzA5LDcxOTM5Ljc1Mjg3NzQxOTcxLDEwNTg4NC42NDc5MjE1MDk0Nyw2Nzg0MTUuNDI1NjcwNjY0Myw4Njk5Ni4wOTczOTI2MTA5OSw3OTQzMC40MDA2MTMxMTI5MywxMTQ5MC4zMDU0NTA2MDAzNDUsNjczNTMxLjg3OTU3OTg5OTYsMzMxNDgwLjI4Mzk2NzE3NjMsMTY3MDkzLjQyNzEzODk5MjMsMjM5MzUuODU0MDg3NTE0NTgsNjEzNDkuNzU0Mjk4NzM2MTUsMjMzNDAuNzAyNDE3OTc5NTYzLDI1NzQ4OS45NjgzODgzODY2OCwxNjE4MDIuMjUyMTQ2NTgwNDMsNDYzMS43NDIzODk5ODM2NzQsOTQ4NDYuMzQzOTAzMDcyMzIsMTA1MDA3LjU0MzAwOTU4NTUzLDExODMwMi4xNTY4ODg0MDY1Niw5NTU5MC4yMjc5OTM2MDA1LDMxODcyLjIzNTU2MzU0MjkzLDE3ODg2NC40NTY2MjA1MjA2NSwxMDE2NTkuMDE3MjY3NzQxMjYsMTA1MjQwLjA5Njk4ODM0OTE5LDMwNzcwLjkyNzg0MzYyMTk4LDE2MjU2LjEyNDY2MzE3NDcwNSwxNTY0NzEuMzY5NzEyOTY0NzIsMTQ3ODYuMDYxNDE2Mzg3NjE4LDMyNTMzLjI4MjA1NDI3NzE0LDIyMDkyLjI4NDc0ODk5MTI0LDE1NjAwOS41ODgwOTIzMzg4MiwzMjM0My40OTIxMzk0NTM5MiwzOTgzNi4yMTM5MjgzNDc4MiwzNTE2MDcuNTIwODY4MjYyOSwyMDIyOTEuODM4NjAzNjUyMDIsODExNTkuMDg0MzI5MTExNzIsNjM3NDkuOTkwMTYwNzQwNjk0LDIxODMyMi45MTU2Nzc0MzU0NiwyMDI0Mi4yNzkzMTc4MTc2NDMsMTA3NTI4LjA2MTAxMDg4NTI5LDE5NzE4LjY1NjE4ODI4NDAxNCwxMDMyNTAuMjUzNjE5Mjk4MDgsNDE2MTA2LjAwMzI1ODAzMzQsNDU5NzguNTQ4NjMwMzAzODg1LDEzMTc4Mi42OTE0MzUxOTIwNywxMzEwMi44MzUyNTA4NDc4NSwxMTY1MDYuNjczOTkyMjIyNDUsMTI1ODgwLjYwMTQyNzI5NTE2LDcwMzI0Ljg1OTg1NzU0MzcsMTE5MjYuNzgzODk5MjE2MDcKKzksV2VkIDIgRmViIDExLDEyNDEyLjY5ODIwNjA3NDk0LDg0MTIwLjY3OTA0MTgyODUyLDQ4NjQ4LjY4MDA4MzkwNDU3NSwxMDE2ODAuMDMxNjc2MjI1MDcsNjc3MTQ0LjU3ODg5NzY1OTcsODU3NDQuODA0MjMwMjk1NzgsNjUwMTguNzQ5OTAzMzY1NjA2LDExNDI1Ljk1NjgwOTUxOTIxLDc5OTcuMjQ2ODAxMjU1NjIsMzE2Mjg0LjAyNTkxMjg5MzMsMTYyNzY0LjU1OTY3NjMzMzA3LDI0MzE1LjA0NzcxNzg2MzQyLDU3NzMxLjk1NzA4MjMxMjMxLDI2NjIxLjY4ODcyMjQ2ODQ0LDI0NTc5OC44NTczMTI0MDYyNCwxMTEwODIuMjIxMDcwMTM4MSw3MTUzMS4zMzcxNzM3MjMwNSw3NzAxNy4wODA3OTk2MDQxLDg1MTE5LjI0MjA4ODQ4MTk2LDEyOTUwMy45MDA5NTIxOTE0NywxMDg5NTYuMTU1NDg1MzcyMTMsMjM3OTQuMTgzMDU1NzExNDA4LDIwNDU5OC42NzU4NTY5MTA4OCw5NzQ2MC4wNDY1NDQ5NTc0NCwxMTM4MzYuMTM0NTYzODYxMDcsNjUyNzYuMDA1NDQyNzgyNTQ1LDE4NTY3LjA3NzMyOTgzNzg2LDE2MjI4My44Njc1MDE0NywxMjMxMS4zNDIwMjEzNjc4OTMsMzQ3MTMuODM5NDI2MzE5ODY0LDI1NDg0LjkzMjkyODk1NzExOCwxNzE4NTguNDY2MjcxMzE4MTUsMzc1NjYuNDcxNjU4NTU1MDksNDAwMDAuMTQ5NDMzMjIyMTcsMzg3NjUyLjczNDEwMTMxNDMzLDIzNDMzMS44ODg2ODE2Mzc0Nyw2NTcwMi45OTYwMTAxNDUyMyw2OTc4Ny4yMDAwOTA5MTM5OCwyNTM2MzcuMDEzOTUyODE0NywyMTE3NC44ODkwNjk3OTk5LDczMTEwLjQyMzE3NTA4NDA0LDEzODc4LjczMjkxODY2MjM3MiwxMTY4NjUuNTk2MTg3NzcxNDEsNDE3Mjk2LjcxNTg4NDQ4NDgsNDQyODguMDg5MDI3OTc0ODgsMTQ0NDE0Ljc0MDgwMjgwMDc4LDExOTE3LjQ2ODQxNDg5MjQxMywxMTgyNzUuMjgxMTY0NTA1MDQsMTAyMTk5LjI4NDMzODg5MDg4LDI4NDkyLjk2NDYyMDY0MjYzMyw5MzIxLjE5ODYxMDA2ODg4NgorMTAsVGh1IDMgRmViIDExLDEyNzAyLjU2MzI0NDM0MjMzNSw5NTEyNy44OTc0Mzk5MzY1MSw1OTYxNS42NTA0NTAxOTYwMTUsMTAzODI3LjY2NTczMTc3NzE4LDY3NzgyMC4yMDA2MDI5ODIzLDg2Mzk0LjMzMDg0MTQxMDI1LDcyMDg3LjE4MjUwNjc1ODE1LDExNDYyLjc5OTcyODg2NjU1NiwyNDY4NC41NjAwNzY5ODg2ODQsMzI0MDIyLjUyMDUzMzA4ODIsMTY0OTkwLjMzMjU4MTM3MTUzLDI0MTIyLjIwNDcxNzkwNjM1LDU5NTUyLjU0MTQwOTM3OTEyNiwyNDkxMy4zMzAzMDg0MjMzMiwyNTE3NDkuNDcxOTI4NDczNzQsMTM1MDQ4LjM3OTU2OTAyNzQsMjk5MjUuNDUzOTY3ODA2NTYzLDg1NzM5Ljg0MTU1NzM2NDIsOTQ4NTQuNTc1NTY3MDkwOSwxMjM3MDQuODUyMTExMDc3ODgsMTAxOTkyLjMzNDcxNDE5MTQzLDI3NjgxLjU1MDU1MDk4MDk3NCwxOTExODMuNjM0MjkyNjY5ODMsOTk1OTguMDIxNjQ5NzY3OTQsMTA5Mzk0LjkxNjQwNTg2MjQ0LDQ1ODMzLjQzNDU4NDY1ODM5LDE3MzYzLjUxMjgxODU2NzY4NCwxNTkzMDQuNTcxMTY5Njk1MTUsMTM1MjkuMjU4MjQwNDAxNDQzLDMzNTkxLjU1NjUyODMzNjQxLDIzNzE0Ljk2OTM1OTkwNzU4LDE2MzY0NS4xOTQ4Njk3NzE2NiwzNDgzNy45MTY5MjY1NzAwMDQsMzk5MjMuMjkxNjc5MjYxMTgsMzY4OTcwLjY4NDE3Njk0MTQsMjE3NjAzLjk0MDYzNzkzMDgyLDczMjY2Ljc4ODE2MjkwMTgsNjY2NjEuNzgwNzI3NDY1MTQsMjM1MTg4LjQ1OTU3NzExMjQ2LDIwNjk1Ljk4MjM1NjQ3NzMsODkzMzcuODgwOTI2Mzc5MDUsMTY2NTMuNTEyOTY0NjY2MywxMDk3NzkuNDI4OTQwNzM0MTEsNDE2NzA4LjU0MjQ2Njk0NDcsNDUxNTIuNjQ4OTg5NjE1NTc2LDEzNzg3NC4wODgwMTkwODA1OCwxMjUxMC45OTEwOTI0MDE2MTUsMTE3Mzc1LjE4MjI2MzA2NzIsMTEzNzk0Ljk4MTEzODg4NTY5LDQ1NzM1LjQxNTMzNTg0MTUzNSwxMDU4Ny4xNTA4MTg4ODE0MjgKKzExLEZyaSA0IEZlYiAxMSwxMjQwNy4yNjU1NTQ5MjUyNDcsODQwODUuMTQ4MzI2MjM1MTEsNDg2ODkuNzY1ODg5OTMxMDg1LDEwMTYzNy42NDk0MTc2NjEzOSw2NzcxMDcuOTg3NDg0OTczNiw4NTcyNC43MzQ2OTgwMTk4NSw2NDk4MC4wNTczOTc4MjcxMSwxMTQyMS44NDcwMzMxMjgyMzcsOTQwOC40NjA4MjUwMjQ1NzYsMzE2MTQ0LjE2NzU4MzE3ODEsMTYyNzExLjczNDY3NTU2ODgsMjQzMTYuMTEyMjIwMDU4OTA1LDU3NzExLjM0ODAzNjcyMjcyNCwyNjY1NS42MjQwNzQ1NDk3MywyNDU2OTMuMzgwMDU0MTA4NCwxMTExNTIuOTE2MjkxMTgxNTIsNzQ1MTcuMjUyNzM4MjgzNjQsNzY5NzcuMDA0NjEwMDU3MTksODUwNzAuNDU5MzYwMDYzNzksMTI5NjExLjE0NDM1Njc4NDE4LDEwOTA5Ni44Mzg3NTA2NjM2OCwyMzc4OS45MTgyNTE0Nzg1NTcsMjA0ODcxLjUwNjAzNDcyMDYsOTc0MjIuMTYzMDkzODU5OTQsMTEzOTE1LjcxMTk1MzQwNDUsNjYwNzUuNTg5MDk3MDU3MzgsMTg1OTEuMDY1ODIzMDA1NTA1LDE2MjMyOC44Mjk5MDE3OTc5MywxMjMwMy42OTE2MjgwNzczMjYsMzQ3MzIuNDYxNTM2MDgwMTU0LDI1NTIxLjA3MjI1OTg3MjYxLDE3MjAxMi43MTAyNTAyNzk1MiwzNzYyMy4zNDA4NDE4NjA5NCwzOTk5NC4wNjg5MDI2MDU1MDQsMzg4MDA0LjI4MzIyODUyMTIsMjM0Njc3LjA4MDgyMzAxNjMsNjU2NjUuNTU2MTczNzk2OCw2OTg0NS4wMDExNTQwNDQ5MiwyNTQwMjEuMzU3Njk0MTU2MjQsMjExODIuNDg5NzYzNTU2MDEyLDczMTY2LjA5MTUxNzUwMTkzLDEzODgzLjU0ODIyOTU1NDM0NiwxMTcwMDYuNzk5ODQ1NzMyMSw0MTcyODYuNzM4MjExMjE0NTQsNDQyNzAuNDEwMzk3NDQ1OTIsMTQ0NTM2LjAyMTI1NDY4MjI0LDExOTExLjIxOTM2NTg1Njc3LDExODI4NC45NDYyODA3MTc3LDEwMjE0MC4zMTY5MjIyMjYzMSwyODk4OC4xNzk4MzYzMDk3MSw5MzE3LjA0Nzg2MzczMTc2NQorMTIsU2F0IDUgRmViIDExLDEyODgwLjUwNDU3NDIzMzU5NSwxMDE0MzEuMDU5MTY0MDcyMiw2NTc1OS41MDAwMzM4NzAxNCwxMDUxNTQuMTIzMDIyMDk1MDgsNjc4MzUzLjYwMDIwMTQxMTIsODY4MjcuNzUzOTI1MTUxNzIsNzYxNjguMTQ2NzAyMTEwMjcsMTE1MDEuNDY1MTgzMjM2NjA1LDMxNjUxLjUxMjAwMTM3MzMzLDMyODc1My45MDE2NjgyMTQsMTY2NDAxLjg5NDcxNzMyODM3LDI0MDIwLjA1MDA2NTQzODc5NCw2MDYyMi4zNzEwMzA3ODI4NDQsMjM4ODUuNzA1MjIzNDU2MjM2LDI1NTM4MC4wODgzMTE2Mjk3LDE0ODUxMS40NTcyMTczNTgxNywxNjQzLjQ4MTg4NTYxNTg1MjcsOTA3NTYuMjY4MTg1NjAxNjEsMTAwNDY2Ljg0ODQ5MzcyNjY5LDEyMDIzMy43MDI1MDQ3NjE1OCw5Nzc5OC4yNzAxNTA0MTUyLDI5ODk0LjM1Nzk2NTI4OTEyOCwxODMxMDAuNjM3MzcwMDU1MTMsMTAwOTAyLjMzODY4NDk4ODIxLDEwNjc0Mi44MTMyMDc1MjcwNywzMzQ1MC4xNzczNjE4MzM5MywxNjYzOS4zNzY3NDM4MjI0NiwxNTc1NTIuMjMyMTA4MTg1MzYsMTQyMzQuMjY5NzU5MDY5OTU0LDMyOTI0LjIwMDA0NDgxOTM1LDIyNjQ4LjM1ODc4Nzg1OTA2NiwxNTg3MjMuNDc4ODcwOTIxMSwzMzE5MS4zMDA3MzcwMDgzNywzOTkxNS45NDI2NjIzNjE3ODQsMzU3Nzc0LjA1NzcyMjI2NjMsMjA3NTE2LjE5MTQ4Njc4NzI1LDc3NjI2LjMzODc4MTUzMDI3LDY0NzkwLjk4NzE2NDI4MDk2LDIyNDA1NS42NDUxNTk5NTE4OCwyMDQxMi45Mzc0MTU3NzA2Myw5ODQzOS4xMzAyOTE0NTAzNiwxODIxOC40OTg3NjM5NzU2MDcsMTA1NTE1LjYwNDA2NzM1MzE0LDQxNjQ1NC41NjAyNDE1NTc2LDQ1Njg5LjA0ODEwNjE1MjM2LDEzMzk1OC4yNzM1MjUxNzQ3NywxMjg1OS40ODYyMzQxMjY1NzQsMTE2ODYzLjA0MDg2ODQzNDUyLDEyMDQ4MS4zMzYyMDQxNzQ2LDU0NjA4LjE1Njk1NzA1OTYwNCwxMTMxMi44NzU2ODIyMDc3NTQKKzEzLFN1biA2IEZlYiAxMSwxMjc0My43MzU1OTY5Mzk1NzQsOTYyNDIuMTk1OTY4NDI3OCw2MDY1OC40MTI2MDAxMjI2NCwxMDQxNDMuNjM3NDU2MTgwNDQsNjc4MTA3LjMwNDU4MDM5NDksODY1MzguNjQ1NTg2MzYwNTEsNzI4MjUuNDY2OTQwNTk2NTUsMTE0OTIuODMyODAxMzEyNjQ4LDI0OTQ5LjA4MTY0ODkxMywzMjUwOTYuNzUyNjU0NjkxMTcsMTY1MzcxLjExMzYzNDAyNjEsMjQxMjMuNjk2NDU0MjE1MDcsNTk3NTEuOTIxMDE1MjQ2MzM1LDI0NzIwLjE0ODcwNzg3NjA0NywyNTI1NjUuOTcyMzAxNDU0NTIsMTM3MzQ4LjkyOTAwNTY4NTU4LDI0Mzg0Ljg4MzcxMDk2NjExLDg2NjMzLjY3ODY1Njg5MjYyLDk1ODY2LjcyMjk1MTMyNjU1LDEyMzA2NS43MzcwMTc2MjY5NSwxMDEyMDMuMjE2ODc3NTY0NzIsMjgwNzAuMzc3MDk0MDQ1MTk4LDE4OTY2MC44NjIyMDE4NjA5Myw5OTg5MS41ODI4OTk3Mjg2NCwxMDg5MTEuNzQxNDc4Nzc1MDUsNDMzNjEuNTM0ODE4NjEwMTQsMTcyMjcuMzE3NjI4OTUyNjE2LDE1OTAxNC40OTQ2ODk4ODQ3NywxMzY1Ny41MDc2OTI1ODU0NTQsMzM0NzAuMjYxNTc2NDczMzMsMjM1MTMuNjc3NTAyNzEyNTgsMTYyNzM0Ljg5MDc2NTkyMTMsMzQ1MjYuMzE5OTY5Mjg5NTE0LDM5OTc4LjMxNTAxNTU0NTAzLDM2Njg5OC42MzAxNDQzMzczNywyMTU2OTcuNDAwNzc5NzM4MjQsNzQwNTIuNjkwOTYyMTQ5MjcsNjYzMTcuMzIzMDk3Nzc3NzYsMjMzMDgxLjc5NjkxODM0NjEsMjA2NDcuNDUxMDE5MDI1OTI4LDkwODg3LjUwMjI5MDc1NjY1LDE2OTIzLjI1ODU0NjcxNDIzOCwxMDg5NzkuMzkzOTA3MTE5NzgsNDE2Nzk3Ljc5ODQyOTM2Nyw0NTI4My4yMDgwNjMwOTY5NCwxMzcxNTIuNTE2MDc1OTI0NDgsMTI1NzYuNTc1OTQyODI1NDQ2LDExNzMxMy45Njg1MTUxMDE4NSwxMTUwMDEuNDM3MTI0MjM2NCw0Njk0Ni44ODMzMzM1MzE4MSwxMDcxNi41MzIwMjU5NTc3MDIKKzE0LE1vbiA3IEZlYiAxMSwxMjQ3My44NDkwMTMyOTAzNTcsODY3MzYuMTMzNTAwMDc2NjMsNTEzMjQuMTAzMDE5NzM3MzQsMTAyMTI2LjY5NDY3MTAxMDksNjc3MTc1LjgxNDA0MDgxMjUsODU4NTEuNDg1NTc5ODQ3NTksNjY2ODAuNzA4ODQxNDQ3MDUsMTE0MTkuNDQ2NDg3MzM3NjcxLDEzMjMxLjY5ODIyNDk1NTIzMywzMTc5MzEuMDEzNzIzOTY1MTUsMTYzMTk2LjI0MTczMzQxOTksMjQyNTcuNzg5MTY5NTM1ODUyLDU4MTQ5LjgzNDAxMjIyNjE3LDI2MjM5LjA2NTI5NTIxODUsMjQ3MDcwLjU5MzgyMzM2OTk0LDExNjkxMC4xNTA0MjY0Njk2LDYzOTUxLjU0ODIwODE2ODM0LDc5MDc4LjY0NzUzMjIyNzExLDg3NDEyLjcwNTY5MDQ0MzMxLDEyODE5MC40NjIwNzY0NDM1OCwxMDczOTYuOTg0Mjk4MDE3NTUsMjQ3MjQuNjM5ODg4MTUwMDA2LDIwMTU5Ny41NjUzOTE4MjA5Nyw5NzkxNi41ODkyMDM4MzA4OCwxMTI4MjUuNTQyNjMxMjE2NzQsNjEyOTcuNjkzMzAwMjE5Mjc1LDE4Mjk3LjU5OTU0NjM3MTkxNSwxNjE1ODMuNzQ2MTMxOTk0NywxMjU5Ni43MjE0NjkzMTAyNzIsMzQ0NTcuODQyMzA2ODU1Njk1LDI1MDg5LjUzOTczMTA1NzA5NSwxNzAwMDIuMjA1NDgzMTA5MywzNjk1Ny45OTMxMjEyNzM0OSwzOTk0NS44MjM1NDI4NjM1MiwzODM0MzEuNjA2Mjk5ODMyNDYsMjMwNTk4LjY1MzQ5MjQ4MDAyLDY3NDg1LjMzODc4MzM2NDgzLDY5MDc5LjMyMDM5Mjk1MTE1LDI0OTUyMi45NTg3MzUyNzEwNywyMTA2My41MzA4MDc1MTkxNjQsNzcwNjMuOTAyODM1Mjg4NTIsMTQ1NTAuMzEwOTk4NzA5MjI4LDExNTI3Ni4zNDM0MjExMjUzOCw0MTcwNzMuMzU4ODkxNTA3LDQ0NDY1LjkyNDY3NzUyOTQyLDE0MjkzMy44OTE0MjYwMDI2LDEyMDUzLjc4ODkyODg4NTg3LDExODA0OC4wOTIyOTUwMTI4NiwxMDQ5MzAuMTY1NjkwOTQ4MDEsMzMwOTAuMDM1ODI0MjY0MTYsOTYyMS41Njc4OTU2MDA0MzgKKzE1LFR1ZSA4IEZlYiAxMSwxMjQ4Mi4zNzE1ODk3NjA3MzgsODcyMzMuMTAxOTI0MTU2MTYsNTE4MjYuMzU0Nzg0MDA5ODYsMTAyMTg0LjA5NjI5OTg1OTEzLDY3NzA3NC4zMTAxNDAyODY4LDg1ODM5LjgzNTk3OTg3MzgsNjY5OTYuMDAwODI2NzQ0OTQsMTE0MDUuNzU1Nzk5NjU3ODk2LDEzOTg3Ljk2MzYzMzI0ODE0MiwzMTgxNzAuNjQ4Njg2NzE2OCwxNjMyMjUuMjQzODY3NDc5NDQsMjQyMzIuNTYzMjAzNzg3MTUsNTgyMjguNzI3NDE4MzU2OTQ2LDI2MTYwLjc5NzExNzU3ODg1NSwyNDcyNTguNjUzOTA3MjE5NjgsMTE4MDA1LjYwNTk5MzkzNTU4LDYyNTAxLjUwNDc5NTIyODg0LDc5NDcxLjAwMzU3MDc1MjUxLDg3ODQ3Ljc4NDQzMTU3OTMsMTI3OTExLjIwOTg0MTc0MDYxLDEwNzA3NC4wMjQ2NTU3NzIwNCwyNDkwMC42MDk3Njc5NjE2LDIwMDk3Ni45OTI3NDQyMjAyNSw5Nzk4My4yOTEyMTQ4MjE1MywxMTI2MDguMDE4NzQ3NjY0OTQsNjA1MDcuMjE0ODQzOTY4MDQsMTgyNDIuNDgxMjAxNjIyOTksMTYxNDE3LjE1MDQyMzIzNDIsMTI2NTAuODUxMDg2Mjc5ODg3LDM0NDA0LjM2NzEzMTg4NDY1LDI1MDA4LjY4Mjc4NzE5MTI4MywxNjk2MDkuNjM1MDI3Mjc5NCwzNjgzMy4yMzMyMzU2MzE2NCwzOTkwMS4xNzcwNDYzMzk4ODYsMzgyNTM5LjQ5NDA1ODk5NzcsMjI5ODM0LjkyMDMzMzkxMDQsNjc4MjMuNDUxOTMwMDg1NDIsNjg5MjguODE4NzIwNDA4NjYsMjQ4Njc5LjkzNjE0MzA2Mjc1LDIxMDM3LjkyMzU0NDk0MjA0LDc3ODA2LjQwNzY5ODExODE5LDE0Njc2LjgwMjYzNjg0Mjc1NSwxMTQ5NDUuOTkxNDkzNzM1MzUsNDE2OTQ4Ljc3OTA4MTgxMjYsNDQ0ODcuMTkxMDg1ODA5MzcsMTQyNjE5LjM0NDYzMDM4OTUzLDEyMDc5LjMzOTE3ODQzMjIxNiwxMTc5ODEuMjg4MzQ5MDY5MzUsMTA1NDQ4LjIzMDY5MTgxMzE1LDMzODk5LjQ0NjA4OTYzNjM2LDk2NzguNTAwMzg5Mjk4OTIKKzE2LFdlZCA5IEZlYiAxMSwxMjg0NC45NTkyNDEzODE5NTcsOTcxNjMuMTAxOTk5NDMxMTQsNjE0MzcuNzQ5MDU2NTUwNCwxMDQ5ODcuNjczMDk0ODUzODYsNjgwMjg2LjM5ODU0ODg1NTIsODcyNjIuMjE0Njk4Mzc0OCw3MzQ5MS4wMzk1Njc1NjUyNSwxMTc0NS4wNzM3NTIzMTIwOTcsMjQzNTEuNTc4MTg2Nzg4MDM2LDMyNzU5OC4xODM4MTYxMjA1NSwxNjY3MzkuOTk1MDk2ODg1OTUsMjQzNjguMjMzNDQ4ODkzMDIsNTk5NTcuNzMxMTc4NTg0NTMsMjQ1OTQuMjYxNjIxNDEwMjIsMjU0NDIzLjk3ODcyODYyNzUyLDEzOTEwMS4xNTk1OTU4MzM4NiwxODcxMS41MjAyNjUyNzIyNDcsODczODkuMTMxNDQzNjExNjcsOTY3NjkuMTAxNjEyNjA2NTIsMTIyODM4LjE1OTcxNTUxNzA1LDEwMDc0My4xMzIwNzk0MTI4NywyODM4OS44OTI0MTc5MDY4OTMsMTg4NzUxLjU5ODI0MDkzNzU3LDEwMDU3MS4wODQwNDc4MjYwNywxMDg3OTQuMDc5MjEwOTczMiw0MDg4OC43NDU0NDQ4ODgxNCwxNzEzOC4yNzYwMzEzMzM4NDgsMTU5MjYyLjU5MTE2OTc0NDczLDEzNzc1LjUzNjczOTI4MzcyMiwzMzQxOS43MzQ5NTYxODY2MTQsMjMzNzkuNTk0MzY1NTQxMywxNjIzNjcuNDY3OTIzMzk5NjQsMzQzMjAuNjE0Mzc0MjUxMzMsNDA2MzEuMzM2Mjk5NTMwNjk2LDM2NjA1MC4xMDc2MTMwNTA2LDIxNDQyMi40ODU1MDgyNDA4Miw3NDc1Mi4zNTk4MTE1MTk1Miw2NjE5NC42MzI4MzI1Njg1OSwyMzE2ODQuMDUzOTQ4MDQzMjMsMjA2NjguNjc1MzU4ODY0MTczLDkyMDU2LjUzOTkxMDM0NzI0LDE3MTMzLjQ3OTQ0Mjc0Nzg5NiwxMDg1MzYuNTE4ODMyMTc0NTgsNDE4MzE3Ljc4MTkzMzc2NDcsNDU2NTIuOTc3MDg3NDcxMTIsMTM2ODg5LjQxNDY3ODQ2Mjg0LDEyNjQ3LjYzODc5ODg0MzI0MiwxMTc2NTIuNTY0OTEwNzQ2MzMsMTE2MDc4Ljk0MDA5ODc3NDUsNDc0MzkuNjE3NjYwOTI0ODEsMTA4MjcuNTU4NzY1MTQ5MjQKKzE3LFRodSAxMCBGZWIgMTEsMTIzNTEuNDMwMTM0MTI5OTA1LDg1MDc2LjczNTAxMzAxNDkxLDQ5NjYzLjgyMDkyNTI0NzY1LDEwMTExNy4xOTExNjE0ODg3OCw2NzQ3NTIuNzYxMjgyNDg4OSw4NTAzMS41NjIzNDcwNDE2NSw2NTU2MC41ODYyOTA5NDgwMywxMTEzOC41MDYyMzk1NzE5OSwxMTAxNi4yNzI0ODM0MjE2ODQsMzE0ODgxLjYzOTYxNTI3NDI3LDE2MTYwOC45MTYyOTQ5Nzg4NywyMzk5Mi44ODc2MDIzNzMzNTQsNTc4NDcuODA4MDcyOTQwMDc1LDI2NDE1LjI3MDEwNzM4NzU1OCwyNDQ3OTcuNTM0NTY2OTg1MTIsMTEzMjYxLjkyODA5Mzc4MzUzLDY2NTcyLjM4Mzc1MDk5NTI0LDc3NzYwLjY1NDU4NzQ4ODc1LDg1ODc2LjQxMzE1ODQzOTQyLDEyODU4OC4wNzQxMjkyNDU2MiwxMDgwNTQuMzI4NDc3NzY1MjIsMjQxMjUuMDYyMDA4ODE1MTc3LDIwMjg4NC44ODY4Njk2MTcxLDk3MDg3LjQwMzY3MjcyOTEsMTEzMDcyLjYzNjU2ODg4MzgxLDYzNDYyLjIwMzkyNzM1MjI0NiwxODQyMS45NTY4NDkyMzM2MywxNjE0MDEuMDQyOTUzMzI5NTcsMTI0MDIuMDY4MDg2MTc5Nzg4LDM0NTQ1LjYyMzk0Nzc4NjYzLDI1Mjc0LjA3NDA4NTg1NzYzLDE3MDYxMC4yMjUyNjE3MzQ4LDM3MjM5LjE4MTk4MTczNjA3NCwzOTIyNC4zMjYyNTM4ODQyNzYsMzg0ODI3LjIzMjY3NTQwOTQsMjMyMzQzLjc1NDEyMjQzMjgyLDY2MjkyLjM0NzUxMTI0MDYyLDY5MjkzLjY1MTU4MzczMTE3LDI1MTQzMS43NTE3OTYyODMxMiwyMTA1NC4zMjYyNTM0Mjg0MTUsNzQ1OTguMDc3NTE2NTE4OSwxNDEyNi4zNjEwNDU3NjU2ODEsMTE1OTIxLjg3NDI0MTY5NTc3LDQxNTQxOC42NjEyMDY4ODM2LDQ0MDI2Ljc5ODIxNzMyNzU5LDE0MzM4OC43NzQzNzkzMzA3MiwxMTk0OS4xODY2NzcwMDIzMjgsMTE3NzA0LjI4MTMwMTE5MjU5LDEwMzA5OS4xMjA0NjgxMjE4NywzMDU1MS45NjgyMjk1Njk4MTUsOTQyNC4yNDA2ODYyODUxNzMKKzE4LEZyaSAxMSBGZWIgMTEsMTIzMDAuMTQ2NzExOTc4MjYxLDg1MjUwLjE3MDQ2NDEwMjUsNDk3ODMuMjY2MDU2NDQ5OTUsMTAwNjYxLjg5MTE5MDE3MDY1LDY3MzA2MS4wMzQzODYyNTU5LDg0NTEyLjkyMjg2ODMyNzAzLDY1NjQxLjUwMzY0NDMwNTc2LDEwOTMwLjMzMjc5NTMwMjYsMTA0OTguMTQ1NjI1MTMyODQsMzEzNjcyLjk0NTEwNzg5OTMsMTYwNzM3LjUzOTg5MjM0OTYsMjM3NjcuOTYzMDQ4Nzk1OTYsNTc4NjQuMTE3NjIxMjAxNywyNjMxMy43MzE5MDIxNjExNywyNDM5MjAuNTE4OTc2MzQ1MDgsMTEzNTIwLjc4NzA0NTY1MzQxLDYzNzEzLjc3MzY4MzU2NDEyLDc3OTAyLjg1MTk0MDU5NjU2LDg1OTg5Ljk4NjY2MzEwMzc5LDEyODA5NS4zNjE3MzMyMTMwMiwxMDc1OTIuNDAyNDc5NjY2MzEsMjQxNzEuNDA4MTg1NDQ2MzIsMjAyMDEwLjE3ODcxODMzODIzLDk2NzYzLjAyMTUxNjg5OTY0LDExMjY1My42MTA5NDQyMzU3Myw2MjQwNS43MDY2NzU2NTIyOCwxODM1MC41NDgyNTQyMzI3LDE2MDg2NC44ODUyNDE1MTIyNCwxMjQxNS4zNTgzNjE2MDU2MzMsMzQ0NTkuODIwMTc1OTI2Nzc2LDI1MTY5Ljg5OTIxMDAxNzE4LDE2OTk0NC44NzQ5NjU0MjEyNywzNzA3NS40Njc4MjIzMjAzMSwzODY2OS4yNDE1OTU2MTI4MywzODMzMjIuOTM2NDMzNTAyMSwyMzEzNTguMjAzNjM0NTk2MDgsNjYzODAuNzczNzAzMTgzOCw2OTAyOC4xMjg5MzYyOTkwOCwyNTAzMzAuNzg5NTQ5MDk2MDUsMjA5ODIuOTM4MTQ1MDY4MDc0LDc0NzcxLjQyNzQ2ODM3MzI0LDE0MTU3LjM4NzkyMDIzNjMyNiwxMTU0MzUuMDI1NjQwMjYyOSw0MTQxMjEuMDY5NDYyNTU4NDMsNDM4MTkuNDAwMzg1MjA5MzksMTQyODM3LjcwNDkyNTE2MDUsMTE5NDkuODQ3MjY5OTAyNjc5LDExNzMzMC4wMDgxNDA1OTE2LDEwMzIzNC4wMzQ2Nzc1MjE0MywzMDQ4My43MzY2NjM3NDkxNDcsOTQzOS41MDgzNDU0Mjc5NDEKKzE5LFNhdCAxMiBGZWIgMTEsMTI0MDQuNzg2MTcxNjE1NzgsODc0MDAuMjEzOTM3NTc1Niw1MTkxMi43Njk4NDI1NzM3NTQsMTAxNDk4LjQ4NjAyMTM3OTI2LDY3NDU4NC43MDk4MDM1MjY1LDg1MDcyLjM5NzE5OTYyNzkzLDY3MDU4Ljk1NjczMzE5MzksMTEwOTguMzI0OTkyNDQ2Mjg1LDEzMTQ4LjU3ODI2NzE4MzA2MiwzMTYzMzUuMzMyODgyODA0MiwxNjE5MjcuMzI4NTI3NTYzNzgsMjM5MDMuMTQzNzk4ODQ2Mzg4LDU4MjM5LjIyMjYxNDI1MzE1LDI2MDIyLjUzMDY2NzM3MjM5NywyNDU5MjQuNjI2MDU2MTcwMTgsMTE4MTkxLjIzMDk5NTkxMTEzLDU3Mjc2Ljg1OTg5NDk4NzExLDc5NjEwLjk3ODM5MjcyOTQ2LDg3OTM3LjQwMTgzNDg3MTA0LDEyNzIyNi40NDMwMDU0MDQ5NiwxMDY0NDAuMTQ1ODYwMzIzNzcsMjQ5MzcuMzI4NzM3NTk1ODk3LDE5OTc3Ny43NDgyMTUxNzY1Nyw5NzQ5MC40ODI4NTc4MTMxLDExMjAyMi43NDczODIyMjk3LDU4OTM1Ljg3MjY4NjA2OTY1LDE4MTQ1LjI0NDQwNDI3Mzg0MywxNjA2NTAuNzIyMzMwNzA3LDEyNjYwLjc5MTUxMDkxNzY5LDM0Mjg1Ljk5MTc3NjU4MDgzNSwyNDg2Ni43OTMwODA3OTkxOCwxNjg2ODcuMTI2ODQ0NzM4NzMsMzY2MDkuODAzNzc0MTQ3ODksMzkwODQuMDMwNzUxOTAzNTgsMzgwNDU0LjQyMjEyNjExOTQsMjI4NDkxLjk4MDMxODk0NTA4LDY3ODkzLjMzMTYzODU2MDQsNjg1NTkuNzk5NzczMjI4NjMsMjQ3MTc3Ljk0ODcxNzY5MjU4LDIwOTM2LjQzMTk3NDQ0Nzg3OCw3NzkyOS4yNTc0ODQ2MzYxOCwxNDY5OS44NjYyOTYzNzkzODMsMTE0Mjc2LjY4NjQyNDc2Mzg2LDQxNTA0Ny4wMDE1NTY4NjA2LDQ0MTc1Ljc0MTU5NDMzMjYyLDE0MTg1My43OTA2ODUxOTUxMywxMjA3NS44MDk0MjM3NzE1MzYsMTE3NDM4LjAyMDczMDE0MzUxLDEwNTU1NC40ODEwMzU5NTA1OCwzMzY3NC4wMzI0NTc5MTg4NDUsOTY5MC43OTY4Mzk2NzEyMzUKKzIwLFN1biAxMyBGZWIgMTEsMTI4MzAuODAyMTE2ODE0NzMsOTE1OTYuOTU4NTYyNzUzNiw1NjE3MS43MjExNzIzMzUzLDEwNTA3MC42MjI3MzEzNjY3NSw2ODQxNDMuODE4MTE1MDYwOSw4ODI0NS4xODg0MjY3ODY3MSw2OTk2MS44NTgzNTExOTUwNCwxMjI3OC42NTIyNjQxNTI4MjMsMjA4NzMuNzAwMjg5NTM0MTYsMzI2ODIxLjAxNzcxMTcyMSwxNjc4MjcuMTgxMzkxMzc5NzcsMjUwMzkuMDczODQ4MDU0ODUsNTkwNDAuODY3NDY0MDY2MTYsMjU2OTUuOTE4ODA3NDEyNjgzLDI1MzY5NS42OTQ3NjAyNDgxMiwxMjc1NjEuNDQ2Mjk1NDc5OTQsNDg1NDUuMTg5OTcyMjg2NDIsODI5NDQuMDY1ODc4MDU4MTEsOTE5MTEuNTYxNTg5OTMwMDUsMTI2OTM5Ljc1NDUxNDAzNTA0LDEwNTM2MS44NjkyNDA0ODY1OSwyNjQ3Ni43NDQ1NTY4OTM0OTMsMTk3NjEzLjgxOTYzMjMwMDIsMTAwMzMxLjk3NTI4MzcxNDcsMTEyMDM1LjY2MjMyMDkxMjA3LDUzNzQ1LjIyNDExMjA0MTM4LDE3OTE0LjI0MTAxNjc4Mzk4LDE2MjA2Mi43NjM5MTM4Njk2OCwxMzE2Ny4yMjQ5Nzg0MTQ0OTcsMzQxODQuNDk5NTI2MjEzOTM1LDI0NTIwLjIzMjU4ODQ0OTUyMiwxNjgwOTguOTQxOTA1Mjc0MTQsMzYwODkuMjc1NDg4NTA3OSw0MjExNi4xNjQ4NjI5OTY2NDQsMzc5MDY1LjI3MzA0ODU1MDUzLDIyNTIxMi4yMDI2NDk1MjYwNCw3MDk3OC43MzgxMjk1MzM5NCw2ODQwNS4xMzkyMjk1ODY5OSwyNDM2MjYuNzk0NDc4NTc0MzYsMjEwODIuMzA4MzE5NzY1NjYsODQyNjMuMDYwMDA2MTYxMSwxNTc4OC4yMTQ5OTU3OTgyMDIsMTEzMjc1LjU5MjczMjkwMDA4LDQyMTgyNy43NDc0MzE0MjkxNiw0NTc0Ni42MDkxMzM1MTY3MSwxNDE1MDQuMzg5NjY0NjkxMjYsMTIzNjEuMDEzODEwMjA2NDE2LDExOTAyNC4zNTQxNDQxMjUyNSwxMTAyOTIuNDMwNzY3MjQsNDA2NzMuNzI4Njk5MzA0NTM1LDEwMTk4LjgwOTI3OTM1NDk3OQorMjEsTW9uIDE0IEZlYiAxMSwxMTkxMy40MDIzNDY0MTU4ODUsODQxODIuNTk0NjQ2OTk2NjEsNDg1OTguMTc3MjQ2NDE2OTUsOTczMTguNDI2MTEwNzE1MTEsNjYyNDU2Ljg0MjE5MzUyNDcsODEwOTEuMzkxNjgyMDY0MSw2NDcyOS4xNzAzNjQzMzA1NDUsOTUxOS4wNjE0MzQ0OTQ0ODIsNDkzNS41NjgxMzYzNzQxMTQsMzA0MzY5LjM4NDkxNDY5ODU0LDE1NDc0My4yMzU0MjA2MTkxNCwyMjM3Ny4wMTkwNDA5MzgwNSw1NzU2OC44Njk4NjgxNjc4MSwyNjEwOS42MzQ1OTU0MDU0MTYsMjM3MTA0LjI0NDgxNDc4MDEzLDExMDg3MS42NTY5NzEyMjczLDYyMjUwLjkyMDkzMzc3MTQ0LDc3MDUxLjk0MTMzNDAwMDA2LDg0NzU5LjE2MTgxOTIzMTc4LDEyNjQ1OC40MjczMTY2NTA0NywxMDY0NjUuOTUyMDMyODg4ODksMjM3MjcuNzkyNDMxNjM0NywxOTk5MzkuOTIxNjA4NjM2NCw5NDI1OS40NjIxNzI0NjE4NSwxMTExMzUuMDY3ODQwMDc3NDYsNjIwOTMuNTA2NzEwOTU0NTQsMTgyMDcuNzczNDkwMzgxNDMsMTU4MjUwLjU5MzY2MzQyNDY2LDEyMjUxLjM3NzIzNzU0MjQyMSwzNDE5Ny45NzUwOTg4NzEyNywyNDk2Ny41OTA5NDUxMzg2NCwxNjc4MzQuMjIyMDczNDA2MjcsMzY3NDcuMjU2MTk0NzY4OSwzNTA0NC4wMjkyNTM2MTI0MSwzNzg1ODAuNDk3MzgxMjk0ODQsMjI5NDUwLjE5MzM3ODQwMjk0LDY1NDI2LjkzMTEzNDY5MDgxLDY4MTQ2LjA2NjQ2NjYyNDQxLDI0ODE0OC42MTU5NjU5NzAwNCwyMDY1NC44Njg1NzcwMjYwNyw3Mjk4NS4xNjU2ODUzNTk5NCwxMzg0OC42NjY3MTYyNjE1NTQsMTE0MTc4LjQ0NTUyMDA5MDYsNDA2MjE5LjI0MzU2NTI3MDIsNDIzMjAuNjUzMjE3MjM5NTQsMTQxMDIxLjEzNzA5MzY2ODQsMTE4MjcuMDg3NDE1MTE2NTksMTE1MjIyLjcwMTgwOTg2MDgxLDEwMTc2My4zNjAwNTk5ODA4NiwyNzg0NS4xOTk3ODEwODIxNzQsOTI4OC42MTYyODExNjAzNDMKKzIyLFR1ZSAxNSBGZWIgMTEsMTIwNDEuNDE1MTkxMjUyNDQ1LDg1ODk3LjM1MzIyOTYzMzY5LDUwMzQ1LjQwODk0MjkwODMxLDk4Mzc0LjgwMTI5MjI1MDk3LDY2NTA0NS4yNDk1ODQ0MDIsODE5NTIuNzYyOTY2MjI5MjIsNjU4ODQuOTU4NTMxMzMyNTgsOTc5NC41NjAwODIwMTUyNTQsNzQzNy44MDYxNDA1NjAxNTEsMzA3NTU2Ljg2ODk2MTU5NDksMTU2NDA4LjAwNDI0MDg4NjY2LDIyNjUzLjkxNzM1NTA3MjA5LDU3ODc3LjcxOTE0NDQ4ODI4LDI1OTM3LjYzNjAzNTY0NTAyLDIzOTQ4MC4zNDk3NTAyOTg5LDExNDcwNC41MTEwMDAxODM1OSw1ODYwOS40NTk0NTE2OTU5OSw3ODQwOS44MDY4NTY4Mzk2MSw4NjM0NS41ODU1NTI3NTg3LDEyNjA4Ny42OTcwMjg5Nzg5MiwxMDU4MjkuODk1MDIzNDg4NSwyNDM1MS43NjM3ODYwOTAzNjcsMTk4NjkyLjM1NDc1MDUyOTQ4LDk1MTI2Ljk0OTc4MTU4NDkyLDExMDkxMi4xOTkxOTExNTU1MSw1OTg5Ni4yNTM4ODU3MTI1MSwxODA4Ni4zNzA0MzMzOTI3NTYsMTU4NDcyLjY0MDg1OTkwNjc3LDEyNDUxLjk4MjIwMTY3NTA2MiwzNDExNC42MzAxNDUzMDYyOCwyNDc4Ny4zNDc5NjU1NDI5OTUsMTY3MjYxLjQ3NDE4MTc5ODU1LDM2NDcyLjk3MzM0NDE1MDEyLDM1Nzc1LjA5NzI0NjE1Mzg5LDM3NzI2NC4zMTgyNTM4MzAxMywyMjc3NDUuODEzMDk0MDAwNDgsNjY2NTguOTc5MzIyMjg5OTMsNjc5NDYuMjIxMDA1MTYyOTIsMjQ2Mjg2LjAwNTQyNjA1MTcsMjA2NjkuMDQyNzM0MjY1MTQsNzU1NzguNzQ5ODA0Mzg4MjIsMTQyOTIuNzY5NTc5NDk5NTgsMTEzNTU1Ljk3MTAzNzQ2MzExLDQwNzk5Mi41NDE5MDMxNDI1LDQyNzgwLjM5NDQ5NjkyNTc1LDE0MDU5Ni4xNzExMTYwMTc3NywxMTkzNC42MDA5ODcxNjY5NCwxMTU1OTguMDUyOTM1OTIzOTksMTAzNjUzLjkxNjc4ODUzMzAxLDMwNzA2LjE4Mzg1MDU3OTY3Nyw5NDkzLjAzMzY3ODc3ODE1MworMjMsV2VkIDE2IEZlYiAxMSwxMjE4MS40ODQ3NTY1NzMxOTIsODcxNzIuMDM5OTU4NzgyMzIsNTE2NTcuNDE4NjUxMDE2MDIsOTk1NTIuODkxNDM2NzE0NDMsNjY4MjcwLjAyNDkxMjg0MzcsODMwMTQuNTgwMjYyMDYwODksNjY3NzIuODQ2NTA1Mzk5MTQsMTAxODMuMjY1MzU3NzA3OSwxMDAyMS4yNTgzNzIyMTI0LDMxMDk5Ni41ODk0NDQ2OTg5NCwxNTgzNzAuMjE2NzU4ODU2OTYsMjMwMzcuOTk2NjQ2OTk0NDIzLDU4MTIyLjYyNjgzMTgyODk5NSwyNTg1My4yMzgxMTM3MTU3NTQsMjQyMDI2LjY0OTI2Mzk4MzE2LDExNzU5MC4zMjEwNDE5MTU1Nyw1NjI5Ny42MTY0MTYyNjk0OCw3OTQyMC4zMDMwNDc5NzM3NCw4NzU2MS4wNjc2NDU2NjY5LDEyNjA3Ny4wNzgyNzYyMTYxMywxMDU1NzAuNjcwNDg4OTE5NTQsMjQ4MjMuNjEyNDI3MTE4MzUsMTk4MTYzLjk1MjQ1OTU3MzM0LDk2MDU4LjQzNzI1NTczMDMxLDExMDk4Mi4zNDc5NTgwMzc3LDU4NDY0LjYxMzIwMjA1NjA5LDE4MDI2LjYxMTM0NjM0NjA4NiwxNTg5OTMuNDg2Nzc3NTQ0NjYsMTI2MDYuOTMxMTQ5MDI3NzA1LDM0MDk3LjE2OTA3MzcyMzcsMjQ2OTcuMTk3NDI3NTU4MTMsMTY3MTg1LjE2MTk4NTIwNDMyLDM2MzM4LjYyMDExMjA4ODE3LDM2Nzg2LjM1NjY4Nzk0MTA0LDM3NzA3My41MDI3NTQ2NjEzLDIyNjg5Mi40MTgzNTAyODM5Niw2NzYwMi42MzkxMzQ5MzUwMiw2Nzk0MC40NDc5NTEwNzA2NywyNDUzNjYuOTk1Mzk2NjMyNzMsMjA3MjUuMzY0ODIwMzM2MzUsNzc1MzAuNDU0NjUyNTE3NTQsMTQ2MjcuNDQ2OTkzNzgxODYxLDExMzMyNC4zOTA1MTcxNjU0LDQxMDI5NC4zODE1NzI1MzgsNDMyOTkuNDczMjMzNzExNzI0LDE0MDU3NS40Mjg4OTkzNDQyNiwxMjAyMi43NTUwOTQzNDYxMSwxMTYxNDcuNTE4ODgyNjEwOTcsMTA1MTAzLjAwNDc4MzU2Mjk3LDMyOTcwLjAwMTQ2MTI5NjQxNSw5NjQ4LjQ4MjA2Njc4MTM0NAorMjQsVGh1IDE3IEZlYiAxMSwxMjM3MS45NjQ1NjE1MjY1MjksODgyNzEuMzcxODU2MzY3MTYsNTI3ODcuMzk4NTMwMTI5NywxMDExNzguODEwMTA4MDYwODIsNjczMDU3LjIzNzE3MzI4LDg0NTg3Ljc3MzM4OTk3Nzg3LDY3NTgzLjgwNjAyMzUzOCwxMDgyMy40MDY4NTkyMjE3MywxMzIwNi41NDUzMjMzNjc5NjUsMzE1NjIyLjk4NjYyMjE3NzI0LDE2MTE5MC4yOTI1MzgyMjE5OCwyMzY1MC45MDI5NDYyMjUyMzcsNTgzNjAuNzA0MTUzMTkzMTksMjU4NDIuMjc5MDIzNjk5NSwyNDU0MzIuMTU0NTEzMzg4NTUsMTIwMDkxLjEyMjQxOTMwMDc3LDU0NjI3Ljg1NTk2NTEyNTkxLDgwMjk2LjQ4NzQwOTAwMTY1LDg4NjY1LjQ0ODgxOTY4OTEsMTI2NDYzLjAwNzU1ODQ4MjIzLDEwNTY1Ny4wNTAxMDEyNjY4MSwyNTIzOS41MTU4MTQ1MDM0MzMsMTk4Mjg1LjUxOTY0NzQ2OTQyLDk3MzA2LjIzNTU1ODUwNzE4LDExMTM5Ni43OTAzMDA1NDA3Myw1NzQyMi41Mzg5ODE5NDk5NTQsMTgwMTguNDI0MTQyOTgwODY0LDE1OTk4Ni42NDE3MzY2ODc2LDEyNzQ5LjkyMDUwMzIyNjEyMiwzNDE0Ny42ODI0OTg4MTEyODYsMjQ2ODEuNTk4MTUwNDIyOTQsMTY3NjM4LjQ3ODU4MzA5MTM4LDM2MzIxLjY3MDI2MDc2NDUzNSwzODQxNC41ODIwMzIzNzU2NSwzNzgwNzguMzU5NDM5ODY2NTYsMjI2NzQyLjYwNDA3NDUzMDE2LDY4NDU5LjQ4MjAyNjYxMjM5LDY4MTQ4LjM2OTg5MTcyNzQzLDI0NTIzNS45MzA1ODY2NzM0NiwyMDg0My43MTgzMDE3OTMzNSw3OTIxOC4zNjIyNjIwNjEwMywxNDkxOC43NjUyOTc2NTIyNjIsMTEzNDYxLjg5Mzg4MzgwMzk5LDQxMzc5Ny43MTYwMDg3NjE0Myw0NDAyMi41OTIwMzUzNzczNSwxNDA5OTcuMzc3NDQ1NzgxMjUsMTIxMTIuMTM4OTUyODgzMDQsMTE3MDM3LjYxMDU3NjI5MTk5LDEwNjQyMC43MDUyNTIzOTA1NywzNDk3Mi4yMTYyMzgyNTMxNzUsOTc4Ny40NzU5ODE0MTEwNAorMjUsRnJpIDE4IEZlYiAxMSwxMjg2OS40MDk0NzQ5OTQyNDksOTAwNTcuNzM2MzA2Njk5MjcsNTQ1OTAuMzg0NDk4NjIxMDcsMTA1NDY3LjIzMzI3NzU3ODc3LDY4NjIyNS45NDA4NTkxNjc3LDg4OTI4LjA0MDMzMzMyMjQsNjkwMjMuMDIwODI2MTI3NTcsMTI3MzkuMDE0NjkwNTgwMTkyLDIwNTIyLjQ1MDA5NDQ3MDcyLDMyNzYxNC4zMzM0ODcxNTcyNCwxNjg4MjUuNTc2ODk2OTcwODYsMjU0MjAuNTYwODA3MDk2MTEsNTg4MjMuNTA2MDUyNDQ1MzksMjU5ODQuNzIxNTMxMDk2NzMsMjU0MjI0LjQ4Njg2OTgxNzA4LDEyNDEyNy4yNTgxMDI0ODAwNSw1MjQ4Ny44NDQ5MTk4MjE0NCw4MTczNi41OTg5MDQ1MjczOSw5MDYwOS41MzQ3MjQyMjA4NCwxMjgxMzguMDMyMTU0ODg1NSwxMDY2MDkuMzczNDYyNDM1NjMsMjU5MzQuNjE3MTQyMzY2NzcsMTk5OTkzLjI2ODQ2ODk3MjUsMTAwNTMxLjAzNTk4MTc5MzkzLDExMzAxMS43MDM4MTM3MzAzMyw1NjExNS40OTE2MjM1NDQ3NDUsMTgxMTcuNDU2MzUxNzIwNzksMTYzMDU4LjUwNjMxNzQ5NzIsMTMwMDcuNjUyMzYzNTgxNjA1LDM0NDAyLjMxNzMxNDM5MSwyNDgxNy4xMjc1OTI2MDc3OSwxNjk3NDkuNzY5NjE0MTU4NjYsMzY1NTAuNzQ5ODc5MDU0ODYsNDMxNzkuODY4Mjc3OTIzNTEsMzgyODA3LjE3MTIzNDE5MzEsMjI4MDE2LjU5NTExNDMyNjAyLDY5OTY2LjI2MDE3MjEzMTIxLDY5MDUwLjkxNzg3NDU3MTgyLDI0NjczNy45ODM5MTY2OTMwMiwyMTIyMi44MzY4OTA1MjQzODgsODE5MzEuMDIxODgwODYwODMsMTUzOTMuNDc5ODk2NTY5NzA2LDExNDU3MS4wMDc4MTI0NTc2MSw0MjM1NzQuMTg1NTAxOTI2LDQ1OTQxLjYyOTg2MDQwOTY1LDE0Mjg0OS4zMDk0NzY0NDY0OCwxMjI5My45MjI2MTA3NjAyMSwxMTk2MDIuNDA5NDcxMDYxMzYsMTA4NzQzLjI1NDQyNjQ3MzcxLDM4MTE4LjMwOTUwOTE0NDI2LDEwMDI1LjgyMDU1OTU0MDQ3NAorMjYsU2F0IDE5IEZlYiAxMSwxMTU3Ny45MDk5MjI1MTExNiw4NjA5NC43NDQ2MzkzNTY3MSw1MDYzMC4zNDUzNzA5NDY0Nyw5NDMwMy45NjAxNzY1MDk0Nyw2NTE3MDIuMTg0ODM0NjU4NCw3NzQ5Ny4zMjYyMTkzMzA5Niw2NTcxMC44MTkzMDI4Njk0OCw3NTA5LjQ0NDk5OTUyNjc2NiwxNjE1LjIzMzQ5MjE2MTI5MjgsMjk2NTQ2LjAzNTE2NDc2NDczLDE0ODgxNC40Mzc3NzYyMTg0NiwyMDY5Ni45MzI2MTI4NzY2NDQsNTc3MjEuODA0Nzg4MDE4MDc1LDI1NTEzLjUwMzgwNjIyMTc1NCwyMzE0NzEuNDU4MzQ3MTk0NjgsMTE1MjE0LjkyMTE4NTA1MjM5LDU2NzUyLjIyNjMwMTM1ODM2NSw3ODUyNC44NDE1MDM3MTM3OSw4NjE0OS45NDYyOTQ2NjgxNywxMjMzOTYuMTM0NDAzMTMyNDYsMTAzNzA2LjEyNTQyMjQ3NTgsMjQzNzQuNzE3MTIyNjkxNTU2LDE5NDczNS4xNTQyNzk2MTgxNSw5MjE4Ni4wNDkxNDY1ODQ4NSwxMDg1MDYuMDYwNjUxMjg0NDQsNTg2NzIuNjQyNzMyMDYxMzgsMTc3ODguOTU2MTE4MDIyNjgsMTU0ODA3LjYyOTI0NzA0MDA4LDEyNDEwLjg5MDY3ODY4MzI2NSwzMzY2OS41OTI5MTQ1MDQwMiwyNDM2MC42NjQ0MjIyOTk1OCwxNjM3MjEuMTY0NTEyMDkyMzMsMzU3OTMuNzE4MTc2NjMwODIsMzAzMzQuNTgxMDQ5MTYzOTM1LDM2OTI4OC4xNDI5NzkzNDgyNSwyMjM3MjAuNTQ0MDQ2NjE1NCw2NjUxMS4yNjEzMjUzNzc1NSw2NjQ5NS44MTQ1MzAwMzMzOSwyNDE3NDMuMjg2MDczOTc2MjUsMjAxOTcuOTU3ODQ2MTgzMDgyLDc1OTUzLjE5Mzc2NTM1MzA2LDE0MzQwLjQ0MTExMzgzNDc3MywxMTEyNDcuMjIyODIzNjU2MDgsMzk3ODQ5LjE3OTM0MjIwNDc2LDQwOTM4LjA3NDYwMDkyNjM2LDEzNzU5OS4yMDM3MDU2MTkzOCwxMTg1NC42Njc4ODA0NzkwOTIsMTEyODA4LjQ2MzkzNTA0MDE4LDEwMzQxMi43NzU1NTg2NTM3NCwzMTMwOS45OTg1NjI4Mjc0ODgsOTQ4NC45NTUzMTg3OTcwMTQKKzI3LFN1biAyMCBGZWIgMTEsMTE3OTcuMjU0ODQ5MjUxMDU0LDg3MDU2LjQyNzExMzk3OTEyLDUxNjE1Ljc2OTMyMTIwODgyLDk2MTg2LjQ3NDE4Njc0ODg1LDY1NzQzMi40NzAwNjE2Mzc5LDc5MzYzLjUxNzQzODI2NDUsNjY0NTUuNTc1MDc0NTQ3OTksODI0NS4xMDk4NTQzODM5NzgsNDY4Mi43MjU4NjMxMTcwNjYsMzAxODUyLjA0ODEyMDczNDgsMTUyMTI2LjY1MDQ4MTk2OTk2LDIxNDM2LjAyNjc3MzQxNTUwNiw1Nzk1MS4zMDg3NjQ1NjM5NiwyNTU1MS4xNzE2NTQzMDEwNSwyMzUzNjkuODc1NDQyMTI1MiwxMTc0MDguMjE1Mjc4OTkwNTUsNTU1MTIuODA5OTczOTM1NjIsNzkyOTUuMjU2ODM2NjI3MTksODcxNTkuODM2NDgzOTQ5NzEsMTI0MDM2LjE0MDg2MTY0MDYxLDEwNDAxOC40NDAyNTQ5MjEzLDI0NzQ1LjI2NTEzNzE4OTE3LDE5NTI4Mi4zNTg5MDk1NzMxNyw5MzYxNi4yMjM3MTA1MjIxNCwxMDkxMzkuNjMyNzAzNjcwOCw1Nzg5OC40NTUyNTk3ODgzNDUsMTc4MTQuOTIyMTk5ODgyODE4LDE1NjA5My4yNDE4MDcxNzQ5LDEyNTQzLjMwMDEzNjY2OTAzOSwzMzc2NC4yNDAyNDY4Njc1NCwyNDM5NC40NjY2NTkxMTAwMiwxNjQ1MTQuOTYyMDM0ODc2MjUsMzU4NTQuMzU5NzYxMjU3NDIsMzIyNTguODc4MTkzMDIxNjY1LDM3MTA2MS45OTU1MDk0MDQ0LDIyNDAzNi44MzI5MzU3MDQ1LDY3Mjk0LjM2OTIwOTg0MjU1LDY2ODQwLjY1NjU1NDAxMTY3LDI0MjEzMy4zMTkxMzU1MjI2NCwyMDM1NC45NTkzMzg4Nzg2OSw3NzQzMC43MzA1NDI5NjgyNywxNDU5Ny4wMTUyMjM1NDIxNDYsMTExNjI1LjIwNjYzMjE0MTMsNDAyMDc2LjQyOTgwODMzNTIsNDE3NzguMTU2OTIxMDI4ODUsMTM4MzA0Ljk1NzA4NDIxODY1LDExOTQzLjI5OTk1MDU3NjcxNSwxMTM5MDUuOTU2MzY4OTMxOTgsMTA0NjE4LjUzNjUyMjc4ODMyLDMzMDg5LjUyNzg5NTg5ODEzLDk2MTAuMzU2MTQ2NDQxMTc0CisyOCxNb24gMjEgRmViIDExLDExOTcwLjU0MjQwOTk3NjE1LDg3NjkxLjYzOTE0Mzc5MjEsNTIyNjIuMzg2NDA1ODI1MTg2LDk3Njc5LjYxMTMyNTI4MTc3LDY2MjAwMS40MjAzNzMzMDAyLDgwODcwLjE2NTQwMjQxMDYxLDY2OTY1LjM4OTA1MzExNTg3LDg4ODUuMTA5MTIyNzEwNzk0LDczMDcuODI4Nzc2NjkzNjQ1LDMwNjAzMC41NDk0NDU3MTU2LDE1NDc4MC43NzAxOTI4MTk1MywyMjA0Ni45NzI1MDY4Mjg2NjQsNTgxMTMuNjQxNjc0NzI4MTUsMjU1OTguNzc2NzMyOTg3MTk3LDIzODQzMy43Nzg1MzQxMjUzMywxMTg4NTQuMzQzODU0MzIxMjcsNTQ3NzIuMDM5ODkzMzgxMjI1LDc5ODA2LjQzMTkxMzE0NzAzLDg3ODQ4Ljk3OTc0Mzg4MjIsMTI0NjA5LjI3NzI3MzA1NDM4LDEwNDM0MC40MTc3NzIzMTA1NCwyNDk5My4wMzI1NzIxMzk2LDE5NTg1OC44MzMzNjE3NTk0Niw5NDczOS42MjYyNzMzOTUzNSwxMDk2OTMuNTU0MzYyNDQwMDIsNTc0NDAuNjUyMTc2OTE1MDEsMTc4NDguMDAyNjgyNjc0MTIsMTU3MTU0LjA4MTg5NzU3MzksMTI2MzQuNDgwNTAxOTA5NjQsMzM4NTEuMzEzNjU4ODMyMDEsMjQ0MzkuNjAxOTQ1MzUxNDk2LDE2NTIzNi4zNDY5MTM1MDY0NSwzNTkzMC44Mjk3NDc5NDAxLDMzODg3LjI1ODI5OTg0NDIxNiwzNzI2NzcuNDEyNzIxNDk0NywyMjQ0NjAuODk3MTQ0NDc4MjIsNjc4MjguNTQ0MTIzMjg1MTksNjcxNDkuNDc2OTA5OTAzODgsMjQyNjM0LjI1MDMwMDk3ODksMjA0ODUuNzI1Nzc3MTE2NTYsNzg0MDMuMjM0NTA2MTg0MDYsMTQ3NjYuODQ2NTU3MDY0OTgyLDExMjAwMS4yMjA0NjI5NDg2Miw0MDU0NjYuODA3NzUyMDc2NCw0MjQ0Ni4wOTAyMjcwNTE4NCwxMzg5MzguNDc2OTUyODgwOCwxMjAwNy4xMTg0MzUwOTY3MDksMTE0Nzk0LjEzMjA2MTc1OTU4LDEwNTQ0MS43NDUxODYwMjE1NSwzNDI1My45MDYyNTQyODk5MSw5Njk1LjA1OTYxNDEwMDkyNQorMjksVHVlIDIyIEZlYiAxMSwxMjE0Ni42NDcwNTQ5NDgyMTgsODgxODcuNDgxMzQyODUyMTMsNTI3NTYuMjg1ODUwMjkxMjM1LDk5MjAzLjg3MDkwMTYwMTE2LDY2NjcxOS40NTUyOTg5OTI2LDgyNDM5Ljc5Nzg3NTEzNzMyLDY3Mzg5LjA0NDQ0NTY5NjMyLDk2MTEuOTk3MzQ4OTgxMzYyLDEwMDI5LjU3MTE3MTE2Nzc5NiwzMTAyNjIuMDg3MjQxOTc2MywxNTc1MjIuMjcxMDM5NDI2MjQsMjI2OTkuOTQ4MDk2MTY3NjUzLDU4MjU2Ljg3MDkxNjE1NDYyLDI1NjY5LjI4MzAwOTM2MDY3LDI0MTUzMC40MDgwMzQwMjEyNCwxMTk5NjkuNDc0NDAwMzAwNzIsNTQyODEuMzgyNDEyOTU2Niw4MDIwOS4zODMyOTM2MjU0Miw4ODQxOC40MDI3MjE4ODU2LDEyNTI3OC43MzU1MDk1MDUwNywxMDQ3NjIuMjg1NjMyMTQxODEsMjUxODkuODg2MjY0MDAwNiwxOTY2MjUuNjk0MTM1NTU3MjgsOTU4NzUuMDAyMjQ2NjA0MTMsMTEwMzI1Ljg4Mjg4MTM2MjQ5LDU3MTQ5LjUxNDU5NDMyMjc1NCwxNzg5Ny4xOTg5MDMxNDQ3OTIsMTU4MjkzLjc1OTIxNjczNjI1LDEyNzExLjA1OTMxODY3MDcyNiwzMzk1NS40NjkwNTk1NTIyOCwyNDUwOC4zMDA3ODc1NTg5NzYsMTY2MDkwLjQyNTc2NDYwNDIsMzYwNDQuMDI4Mzg2NjMxMjIsMzU2NzEuMzI3NjIyNzQ2MjIsMzc0NTkzLjU5NzcyMjM3ODg1LDIyNTEwNy42ODE2NTI1Njc1OCw2ODI2OS41OTc2NzEwNTI3Niw2NzUxMC4yMDcyNjE5MjQzMywyNDMzODIuNjczOTg3MDk4NTMsMjA2MjcuNjc2MjQ4NDA4NDg3LDc5MTUwLjM1NzU3OTAyMTQxLDE0ODk4LjkyNTg1MDIzNTMzNSwxMTI0ODEuMDkxMzM4ODE4MDUsNDA4OTg5LjQ4NjMyNTg4MzU0LDQzMTI5Ljg0MDE3NTU3OTA4LDEzOTY4MC4xMDczNTkyMjQ4NywxMjA2NC43NjAzMTMzNjI5MTUsMTE1NzI3LjA3NTU1NTE2NDk5LDEwNjEyMi41NTQyMTY0NTc2MywzNTEwNS41NDY2MTA0NzE0MSw5NzYzLjcyMTI2MDk4NTk3NgorMzAsV2VkIDIzIEZlYiAxMSwxMjM2Ny45ODM3NjA1NTk3NTcsODg2NTEuODk4MTE3MTk2NCw1MzIwMS4yMDAxOTgwNDIwNTQsMTAxMTI2Ljk0ODM1OTY0Mjc2LDY3Mjc0MC44NDYyODQ1NTU0LDg0NDU0LjU0NjgwNjU3NTU0LDY3ODIxLjEwNjc2NjQxNDk3LDEwNjIyLjI5Mzc1ODAwODIxLDEzMzM2LjUyMjQyMjk0NDcyMywzMTU1NjQuOTQxMTk3NzE1NDcsMTYxMDE1LjgxODUwOTQ2NzYsMjM1NTYuMjQ4NTA3MjMyMjY3LDU4NDE0LjM2NjA4MjU1ODksMjU3ODEuNzM1NDA2NTIyNTA0LDI0NTQwNC45NDM4OTE3NDE5OCwxMjA5ODkuMTEwNTc4ODcxNiw1MzkyOS40MDI4NjAxMTQ5NTUsODA1OTIuNTY2MDMxNzEzMDUsODg5OTQuNzY5MzI5OTU2NDEsMTI2MjE1LjgwMzYxNzU4MjIzLDEwNTM5NS4zNzE2NTg0NDc1NiwyNTM3OC40NTIxNjA1ODA1MSwxOTc3ODYuMDMxNDk1MDQyNjQsOTcyOTUuOTI4OTg3Mjg3MzMsMTExMTk3LjI0MDk2NDgwMTY1LDU2OTYyLjIwODQ0MjI3OTA0LDE3OTc1LjgxMTY4NTUzNjAxNywxNTk3OTUuNTU1NTY0OTE2MDgsMTI3OTAuMjM2MzE1MTk4MTQ0LDM0MTAzLjQyOTM5NTExMTk0LDI0NjE5LjIzNjc1ODI3MzEwMiwxNjcyOTYuNjEyNTI3NDcxNSwzNjIyNC42MDY3OTM0MDU1OSwzODA2My4xMzY4MTc5OTAyMSwzNzczMDMuMDk1Njc3MDk2MywyMjYxNTMuMTU3NzY1MTk1OTcsNjg3MTUuNTk0NzMwMDMzNjEsNjgwMTUuMTQ1MDU5MzMyOTYsMjQ0NTgxLjU3NzQ2OTI0OTc4LDIwODE2LjIzNzU0Njk4MTQ3Niw3OTgyOS40MTc0MjcxNDg5LDE1MDIxLjM1Mjc5NzU0NDYyNywxMTMxOTAuNjQxMzg4MDM5NTcsNDEzNTA3LjQ2NzcxMTQ2OTgsNDM5OTQuNTI3NDE3NDE2MTEsMTQwNzE5LjczMDQ2ODU3NjYzLDEyMTI5LjY1NDA3MjY1NDAzOSwxMTY5MzQuNDk3NjM0NzY3NTcsMTA2ODEyLjQ4Nzk5OTgzMjYsMzU4MDAuMDIwMzY0MjAzMTcsOTgzMS40MjY1MTA1NDA4MzIKKzMxLFRodSAyNCBGZWIgMTEsMTI3MjAuNDgwOTY0NzY0ODc4LDg5MjE2LjM2OTQwODg5NzU1LDUzNzEzLjgyODAwNzY0NTczLDEwNDE5OC4xMjA0NzIxOTYzNiw2ODI0MzQuMDg4Mzk2NjQ2Nyw4NzcxMi45NDE4MzYxNDc4Nyw2ODM5Ny44ODM0MTQ5Nzc1NSwxMjM3My44OTQwNDU2Mjc3ODksMTgyMjguMzcwODU2MDc0ODk2LDMyMzk5Mi4yNzI2NTc2NjgzMywxNjY2MzUuOTA1ODQ3MzQzMzUsMjQ5NjMuOTk2MDUyNTMzOTIzLDU4NjQwLjU1NDk2NjEyMDM4NCwyNTk4Ny4xODAxNDU3NTgzNjQsMjUxNTU1LjQ2NjQyNzc2MjczLDEyMjE4Ny4xOTI1NzEyNDQyOCw1MzY1MC4yNjIxNDE2OTY5OCw4MTA2Ny4wNTE1MTQ4MjMzMSw4OTc1OC4xODU1MDc4NDAxMSwxMjc4MTUuMjkzNTI1NTEzODksMTA2NTE4LjE0Mzc2NDgzNzQ3LDI1NjEzLjMyMjQzMDg5NTY1NiwxOTk4NTIuNjQwNDU3NDYyMjYsOTk1NTEuOTg1NTIzMzA0NjcsMTEyNjcwLjkwMjY3MTIwMDY2LDU2ODU1LjgxMDA4ODg3Nzg3LDE4MTE5LjU2MzU3Njc3MDM4LDE2MjI2NS42NzgwODI3NjgsMTI4OTcuNDE2MTU2ODk1MjA4LDM0MzU3LjkxNjA5ODEzOTk2LDI0ODIzLjEyMDYxNjU5MTUxLDE2OTM2Ni4wODkxNTA3Njc0OCwzNjU1NC42NjM0NDczNzkzNzUsNDIwNzIuMzY2NDY2MzEwNCwzODE5NTUuMTExMzk3MDE0NDcsMjI4MDc1LjYxODg2ODU2NzI4LDY5MzA1LjcyODc2NDU0MDM0LDY4ODc3LjAzNjU4NTAwMDI3LDI0Njc3Ny4xNjI2ODQ5MTQ3NCwyMTEyNy45ODU1NzkyOTQ1NDIsODA2MjEuMDE5MzAyNjgxNjcsMTUxNjcuNzc5OTE3MjY3NDczLDExNDQzOS4yODIzNjY2MTU1LDQyMDgwNS44MTA2MzAyNjMxLDQ1Mzc3LjgxNjgzMzcwNzQsMTQyNDk1Ljc5NTQ3MjM5MjM1LDEyMjI0LjY1NTI3NjYwNTUwOCwxMTg4OTYuOTcxNzE1NTAzMywxMDc3MjcuNDY5NTg5MTIyNDgsMzY0NzMuODkyMzM0NTI4NSw5OTE4LjYxMDYxMjk3NDA0MgorMzIsRnJpIDI1IEZlYiAxMSwxMjQxMy4wODcxNTEwNDA5ODUsODg3NjUuMjM3NjY1MjY1NSw1MzMxMi42NTY1Nzg1NTk3MywxMDE1MTcuMzU4ODQ1MDg1ODEsNjczOTY5LjczNjc2NzUzNTMsODQ4NTYuNDE5NDQwNjI5MjUsNjc5MjEuNDc1ODk4MjYyNCwxMDc4My45MTAzNTg5MzUxMDcsMTM5NjguNDM0MzI3OTEwODkzLDMxNjY0OC44ODcyMjI3NDAxNiwxNjE3MTguMDgxNTQzNzIxOTMsMjM3MjEuMzI5NTUwNDM2MzM4LDU4NDQ5LjQxODcwOTc4OTAyNCwyNTgwMi4zODA4OTE2Mjk5NDIsMjQ2MTk4LjU5OTc3OTIyNTgzLDEyMTI0Mi4yNDIzMDAyNjM4LDUzODMwLjAwMDQ1MzQ4NjgsODA2ODUuMjE1OTk2MDg1LDg5MTI5LjI1NTM2NDIzNDExLDEyNjM5OC4wNjEyOTcwMzczNiwxMDU1MTQuNTM2ODI5OTgzMywyNTQyMy45MzI2ODI4NjI1NjQsMTk4MDAzLjYxOTE0NzEyODcsOTc1ODcuMzI2MzYyMzgxODUsMTExMzY4LjAwNDk1MjMwMDQ5LDU2OTA1LjE4OTUyMzMxOTA2NiwxNzk5MC4yMzA5MTYwNTY5LDE2MDA5Ni4zOTMwNzM5NjExNCwxMjgwOC40ODIzODIzMDMyNjQsMzQxMzIuMTc4NDA1MTE5NTM1LDI0NjM5LjQ3NDIzMDQ5OTE1NiwxNjc1MzAuMjExOTMyNzkyOSwzNjI1Ny42ODgwNzg1Mzc1NTQsMzg0OTQuNzY3OTgzNTUxMzA0LDM3NzgyNy41Mjg2OTY3MDczMywyMjYzNDMuNzExNjM2MDM5MTcsNjg4MTkuNzIwOTQ2Njg1ODUsNjgxMTMuMzUzNTI3NDIyNTcsMjQ0ODAwLjgzMjExMDc1LDIwODUzLjg2MDY5MzU0NjYzOCw3OTk5OC42MjgxMjQ1MTg3NywxNTA1MS40ODgwNjgzMDY4NSwxMTMzMjUuMTE0MzMzNjE4NDMsNDE0NDI0LjU5NTkwMDI4OTM3LDQ0MTY5LjY2ODExNzU1NzY2LDE0MDkyMS43OTEzNzY3ODU1NSwxMjE0My45MDE3NzY5OTI3OCwxMTcxNzguNTIwMzU2NDcwMywxMDY5NzMuMzU5ODc4Mjg4OSwzNTk4Ny42NDgxOTA3MTc3Niw5ODQ3LjQ3MjEyMzE2NTYzNQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTSVN0YXRlc09ubHlfRkRfUmVmZXJlbmNlL1Rlc3RTSS9ydW5wYXJhbWV0ZXJzLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0lTdGF0ZXNPbmx5X0ZEX1JlZmVyZW5jZS9UZXN0U0kvcnVucGFyYW1ldGVycy5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDQ0NWFkZQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0lTdGF0ZXNPbmx5X0ZEX1JlZmVyZW5jZS9UZXN0U0kvcnVucGFyYW1ldGVycy5jc3YKQEAgLTAsMCArMSwyIEBACitkaXNlYXNlTmFtZSxwb3B1bGF0aW9uSWRlbnRpZmllcix0aW1lUGVyaW9kLGZyZXF1ZW5jeURlcGVuZGVudCxyZWZlcmVuY2VQb3B1bGF0aW9uRGVuc2l0eSxyb2FkTmV0d29ya0luZmVjdGlvdXNQcm9wb3J0aW9uLGNoYXJhY3RlcmlzdGljTWl4aW5nRGlzdGFuY2UsdHJhbnNtaXNzaW9uUmF0ZSxub25MaW5lYXJpdHlDb2VmZmljaWVudCxyZWNvdmVyeVJhdGUsaW5mZWN0aW91c01vcnRhbGl0eVJhdGUKK1Rlc3RTSSxodW1hbiw4NjQwMDAwMCx0cnVlLDEwMC4wLDAuMDEsMi4yNSwyMC4wLDEuMCwwLjQsMC4wClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTSVN0YXRlc09ubHlfRkRfUmVmZXJlbmNlL2F1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwvaHVtYW4vQmlydGhzXzAuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTSVN0YXRlc09ubHlfRkRfUmVmZXJlbmNlL2F1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwvaHVtYW4vQmlydGhzXzAuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjExMmU4YjgKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNJU3RhdGVzT25seV9GRF9SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9odW1hbi9CaXJ0aHNfMC5jc3YKQEAgLTAsMCArMSwzMyBAQAoraXRlcmF0aW9uLHRpbWUsc3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vbm9kZS90cmFuc3BvcnQvcGlwZS9VU0EKKzEsVHVlIDI1IEphbiAxMSwwLjAKKzIsV2VkIDI2IEphbiAxMSwwLjAKKzMsVGh1IDI3IEphbiAxMSwwLjAKKzQsRnJpIDI4IEphbiAxMSwwLjAKKzUsU2F0IDI5IEphbiAxMSwwLjAKKzYsU3VuIDMwIEphbiAxMSwwLjAKKzcsTW9uIDMxIEphbiAxMSwwLjAKKzgsVHVlIDEgRmViIDExLDAuMAorOSxXZWQgMiBGZWIgMTEsMC4wCisxMCxUaHUgMyBGZWIgMTEsMC4wCisxMSxGcmkgNCBGZWIgMTEsMC4wCisxMixTYXQgNSBGZWIgMTEsMC4wCisxMyxTdW4gNiBGZWIgMTEsMC4wCisxNCxNb24gNyBGZWIgMTEsMC4wCisxNSxUdWUgOCBGZWIgMTEsMC4wCisxNixXZWQgOSBGZWIgMTEsMC4wCisxNyxUaHUgMTAgRmViIDExLDAuMAorMTgsRnJpIDExIEZlYiAxMSwwLjAKKzE5LFNhdCAxMiBGZWIgMTEsMC4wCisyMCxTdW4gMTMgRmViIDExLDAuMAorMjEsTW9uIDE0IEZlYiAxMSwwLjAKKzIyLFR1ZSAxNSBGZWIgMTEsMC4wCisyMyxXZWQgMTYgRmViIDExLDAuMAorMjQsVGh1IDE3IEZlYiAxMSwwLjAKKzI1LEZyaSAxOCBGZWIgMTEsMC4wCisyNixTYXQgMTkgRmViIDExLDAuMAorMjcsU3VuIDIwIEZlYiAxMSwwLjAKKzI4LE1vbiAyMSBGZWIgMTEsMC4wCisyOSxUdWUgMjIgRmViIDExLDAuMAorMzAsV2VkIDIzIEZlYiAxMSwwLjAKKzMxLFRodSAyNCBGZWIgMTEsMC4wCiszMixGcmkgMjUgRmViIDExLDAuMApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTSVN0YXRlc09ubHlfRkRfUmVmZXJlbmNlL2F1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwvaHVtYW4vQmlydGhzXzEuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTSVN0YXRlc09ubHlfRkRfUmVmZXJlbmNlL2F1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwvaHVtYW4vQmlydGhzXzEuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ3YTg0M2YKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNJU3RhdGVzT25seV9GRF9SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9odW1hbi9CaXJ0aHNfMS5jc3YKQEAgLTAsMCArMSwzMyBAQAoraXRlcmF0aW9uLHRpbWUsVVMtQUssVVMtQUwsVVMtQVIsVVMtQVosVVMtQ0EsVVMtQ08sVVMtQ1QsVVMtREMsVVMtREUsVVMtRkwsVVMtR0EsVVMtSEksVVMtSUEsVVMtSUQsVVMtSUwsVVMtSU4sVVMtS1MsVVMtS1ksVVMtTEEsVVMtTUEsVVMtTUQsVVMtTUUsVVMtTUksVVMtTU4sVVMtTU8sVVMtTVMsVVMtTVQsVVMtTkMsVVMtTkQsVVMtTkUsVVMtTkgsVVMtTkosVVMtTk0sVVMtTlYsVVMtTlksVVMtT0gsVVMtT0ssVVMtT1IsVVMtUEEsVVMtUkksVVMtU0MsVVMtU0QsVVMtVE4sVVMtVFgsVVMtVVQsVVMtVkEsVVMtVlQsVVMtV0EsVVMtV0ksVVMtV1YsVVMtV1kKKzEsVHVlIDI1IEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMixXZWQgMjYgSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCiszLFRodSAyNyBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzQsRnJpIDI4IEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorNSxTYXQgMjkgSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCis2LFN1biAzMCBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzcsTW9uIDMxIEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorOCxUdWUgMSBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzksV2VkIDIgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxMCxUaHUgMyBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzExLEZyaSA0IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTIsU2F0IDUgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxMyxTdW4gNiBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzE0LE1vbiA3IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTUsVHVlIDggRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxNixXZWQgOSBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzE3LFRodSAxMCBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzE4LEZyaSAxMSBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzE5LFNhdCAxMiBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzIwLFN1biAxMyBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzIxLE1vbiAxNCBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzIyLFR1ZSAxNSBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzIzLFdlZCAxNiBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzI0LFRodSAxNyBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzI1LEZyaSAxOCBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzI2LFNhdCAxOSBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzI3LFN1biAyMCBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzI4LE1vbiAyMSBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzI5LFR1ZSAyMiBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzMwLFdlZCAyMyBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzMxLFRodSAyNCBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzMyLEZyaSAyNSBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0lTdGF0ZXNPbmx5X0ZEX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL2h1bWFuL0NvdW50XzAuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTSVN0YXRlc09ubHlfRkRfUmVmZXJlbmNlL2F1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwvaHVtYW4vQ291bnRfMC5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDI1MDAyYgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0lTdGF0ZXNPbmx5X0ZEX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL2h1bWFuL0NvdW50XzAuY3N2CkBAIC0wLDAgKzEsMzMgQEAKK2l0ZXJhdGlvbix0aW1lLHN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL25vZGUvdHJhbnNwb3J0L3BpcGUvVVNBCisxLFR1ZSAyNSBKYW4gMTEsOTQzMjExLjAKKzIsV2VkIDI2IEphbiAxMSw5NDMyMTEuMAorMyxUaHUgMjcgSmFuIDExLDk0MzIxMS4wCis0LEZyaSAyOCBKYW4gMTEsOTQzMjExLjAKKzUsU2F0IDI5IEphbiAxMSw5NDMyMTEuMAorNixTdW4gMzAgSmFuIDExLDk0MzIxMS4wCis3LE1vbiAzMSBKYW4gMTEsOTQzMjExLjAKKzgsVHVlIDEgRmViIDExLDk0MzIxMS4wCis5LFdlZCAyIEZlYiAxMSw5NDMyMTEuMAorMTAsVGh1IDMgRmViIDExLDk0MzIxMS4wCisxMSxGcmkgNCBGZWIgMTEsOTQzMjExLjAKKzEyLFNhdCA1IEZlYiAxMSw5NDMyMTEuMAorMTMsU3VuIDYgRmViIDExLDk0MzIxMS4wCisxNCxNb24gNyBGZWIgMTEsOTQzMjExLjAKKzE1LFR1ZSA4IEZlYiAxMSw5NDMyMTEuMAorMTYsV2VkIDkgRmViIDExLDk0MzIxMS4wCisxNyxUaHUgMTAgRmViIDExLDk0MzIxMS4wCisxOCxGcmkgMTEgRmViIDExLDk0MzIxMS4wCisxOSxTYXQgMTIgRmViIDExLDk0MzIxMS4wCisyMCxTdW4gMTMgRmViIDExLDk0MzIxMS4wCisyMSxNb24gMTQgRmViIDExLDk0MzIxMS4wCisyMixUdWUgMTUgRmViIDExLDk0MzIxMS4wCisyMyxXZWQgMTYgRmViIDExLDk0MzIxMS4wCisyNCxUaHUgMTcgRmViIDExLDk0MzIxMS4wCisyNSxGcmkgMTggRmViIDExLDk0MzIxMS4wCisyNixTYXQgMTkgRmViIDExLDk0MzIxMS4wCisyNyxTdW4gMjAgRmViIDExLDk0MzIxMS4wCisyOCxNb24gMjEgRmViIDExLDk0MzIxMS4wCisyOSxUdWUgMjIgRmViIDExLDk0MzIxMS4wCiszMCxXZWQgMjMgRmViIDExLDk0MzIxMS4wCiszMSxUaHUgMjQgRmViIDExLDk0MzIxMS4wCiszMixGcmkgMjUgRmViIDExLDk0MzIxMS4wCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNJU3RhdGVzT25seV9GRF9SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9odW1hbi9Db3VudF8xLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0lTdGF0ZXNPbmx5X0ZEX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL2h1bWFuL0NvdW50XzEuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ1OTBlNmEKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNJU3RhdGVzT25seV9GRF9SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9odW1hbi9Db3VudF8xLmNzdgpAQCAtMCwwICsxLDMzIEBACitpdGVyYXRpb24sdGltZSxVUy1BSyxVUy1BTCxVUy1BUixVUy1BWixVUy1DQSxVUy1DTyxVUy1DVCxVUy1EQyxVUy1ERSxVUy1GTCxVUy1HQSxVUy1ISSxVUy1JQSxVUy1JRCxVUy1JTCxVUy1JTixVUy1LUyxVUy1LWSxVUy1MQSxVUy1NQSxVUy1NRCxVUy1NRSxVUy1NSSxVUy1NTixVUy1NTyxVUy1NUyxVUy1NVCxVUy1OQyxVUy1ORCxVUy1ORSxVUy1OSCxVUy1OSixVUy1OTSxVUy1OVixVUy1OWSxVUy1PSCxVUy1PSyxVUy1PUixVUy1QQSxVUy1SSSxVUy1TQyxVUy1TRCxVUy1UTixVUy1UWCxVUy1VVCxVUy1WQSxVUy1WVCxVUy1XQSxVUy1XSSxVUy1XVixVUy1XWQorMSxUdWUgMjUgSmFuIDExLDYyNjkzMi4wLDQ0NDcxMDAuMCwyNjczNDAwLjAsNTEzMDYzMi4wLDMuMzg3MTY0OEU3LDQzMDEyNjEuMCwzNDA1NTY1LjAsNTcyMDU5LjAsNzgzNjAwLjAsMS41OTgyMzc4RTcsODE4NjQ1My4wLDEyMTE1MzcuMCwyOTI2MzI0LjAsMTI5Mzk1My4wLDEuMjQxOTI5M0U3LDYwODA0ODUuMCwyNjg4NDE4LjAsNDA0MTc2OS4wLDQ0Njg5NzYuMCw2MzQ5MDk3LjAsNTI5NjQ4Ni4wLDEyNzQ5MjMuMCw5OTM4NDQ0LjAsNDkxOTQ3OS4wLDU1OTUyMTEuMCwyODQ0NjU4LjAsOTAyMTk1LjAsODA0OTMxMy4wLDY0MjIwMC4wLDE3MTEyNjMuMCwxMjM1Nzg2LjAsODQxNDM1MC4wLDE4MTkwNDYuMCwxOTk4MjU3LjAsMS44OTc2NDU3RTcsMS4xMzUzMTRFNywzNDUwNjU0LjAsMzQyMTM5OS4wLDEuMjI4MTA1NEU3LDEwNDgzMTkuMCw0MDEyMDEyLjAsNzU0ODQ0LjAsNTY4OTI4My4wLDIuMDg1MTgyRTcsMjIzMzE2OS4wLDcwNzg1MTYuMCw2MDg4MjcuMCw1ODk0MTIxLjAsNTM2MzY3NS4wLDE4MDgzNDQuMCw0OTM3ODIuMAorMixXZWQgMjYgSmFuIDExLDYyNjkzMi4wLDQ0NDcxMDAuMCwyNjczNDAwLjAsNTEzMDYzMi4wLDMuMzg3MTY0OEU3LDQzMDEyNjEuMCwzNDA1NTY1LjAsNTcyMDU5LjAsNzgzNjAwLjAsMS41OTgyMzc4RTcsODE4NjQ1My4wLDEyMTE1MzcuMCwyOTI2MzI0LjAsMTI5Mzk1My4wLDEuMjQxOTI5M0U3LDYwODA0ODUuMCwyNjg4NDE4LjAsNDA0MTc2OS4wLDQ0Njg5NzYuMCw2MzQ5MDk3LjAsNTI5NjQ4Ni4wLDEyNzQ5MjMuMCw5OTM4NDQ0LjAsNDkxOTQ3OS4wLDU1OTUyMTEuMCwyODQ0NjU4LjAsOTAyMTk1LjAsODA0OTMxMy4wLDY0MjIwMC4wLDE3MTEyNjMuMCwxMjM1Nzg2LjAsODQxNDM1MC4wLDE4MTkwNDYuMCwxOTk4MjU3LjAsMS44OTc2NDU3RTcsMS4xMzUzMTRFNywzNDUwNjU0LjAsMzQyMTM5OS4wLDEuMjI4MTA1NEU3LDEwNDgzMTkuMCw0MDEyMDEyLjAsNzU0ODQ0LjAsNTY4OTI4My4wLDIuMDg1MTgyRTcsMjIzMzE2OS4wLDcwNzg1MTYuMCw2MDg4MjcuMCw1ODk0MTIxLjAsNTM2MzY3NS4wLDE4MDgzNDQuMCw0OTM3ODIuMAorMyxUaHUgMjcgSmFuIDExLDYyNjkzMi4wLDQ0NDcxMDAuMCwyNjczNDAwLjAsNTEzMDYzMi4wLDMuMzg3MTY0OEU3LDQzMDEyNjEuMCwzNDA1NTY1LjAsNTcyMDU5LjAsNzgzNjAwLjAsMS41OTgyMzc4RTcsODE4NjQ1My4wLDEyMTE1MzcuMCwyOTI2MzI0LjAsMTI5Mzk1My4wLDEuMjQxOTI5M0U3LDYwODA0ODUuMCwyNjg4NDE4LjAsNDA0MTc2OS4wLDQ0Njg5NzYuMCw2MzQ5MDk3LjAsNTI5NjQ4Ni4wLDEyNzQ5MjMuMCw5OTM4NDQ0LjAsNDkxOTQ3OS4wLDU1OTUyMTEuMCwyODQ0NjU4LjAsOTAyMTk1LjAsODA0OTMxMy4wLDY0MjIwMC4wLDE3MTEyNjMuMCwxMjM1Nzg2LjAsODQxNDM1MC4wLDE4MTkwNDYuMCwxOTk4MjU3LjAsMS44OTc2NDU3RTcsMS4xMzUzMTRFNywzNDUwNjU0LjAsMzQyMTM5OS4wLDEuMjI4MTA1NEU3LDEwNDgzMTkuMCw0MDEyMDEyLjAsNzU0ODQ0LjAsNTY4OTI4My4wLDIuMDg1MTgyRTcsMjIzMzE2OS4wLDcwNzg1MTYuMCw2MDg4MjcuMCw1ODk0MTIxLjAsNTM2MzY3NS4wLDE4MDgzNDQuMCw0OTM3ODIuMAorNCxGcmkgMjggSmFuIDExLDYyNjkzMi4wLDQ0NDcxMDAuMCwyNjczNDAwLjAsNTEzMDYzMi4wLDMuMzg3MTY0OEU3LDQzMDEyNjEuMCwzNDA1NTY1LjAsNTcyMDU5LjAsNzgzNjAwLjAsMS41OTgyMzc4RTcsODE4NjQ1My4wLDEyMTE1MzcuMCwyOTI2MzI0LjAsMTI5Mzk1My4wLDEuMjQxOTI5M0U3LDYwODA0ODUuMCwyNjg4NDE4LjAsNDA0MTc2OS4wLDQ0Njg5NzYuMCw2MzQ5MDk3LjAsNTI5NjQ4Ni4wLDEyNzQ5MjMuMCw5OTM4NDQ0LjAsNDkxOTQ3OS4wLDU1OTUyMTEuMCwyODQ0NjU4LjAsOTAyMTk1LjAsODA0OTMxMy4wLDY0MjIwMC4wLDE3MTEyNjMuMCwxMjM1Nzg2LjAsODQxNDM1MC4wLDE4MTkwNDYuMCwxOTk4MjU3LjAsMS44OTc2NDU3RTcsMS4xMzUzMTRFNywzNDUwNjU0LjAsMzQyMTM5OS4wLDEuMjI4MTA1NEU3LDEwNDgzMTkuMCw0MDEyMDEyLjAsNzU0ODQ0LjAsNTY4OTI4My4wLDIuMDg1MTgyRTcsMjIzMzE2OS4wLDcwNzg1MTYuMCw2MDg4MjcuMCw1ODk0MTIxLjAsNTM2MzY3NS4wLDE4MDgzNDQuMCw0OTM3ODIuMAorNSxTYXQgMjkgSmFuIDExLDYyNjkzMi4wLDQ0NDcxMDAuMCwyNjczNDAwLjAsNTEzMDYzMi4wLDMuMzg3MTY0OEU3LDQzMDEyNjEuMCwzNDA1NTY1LjAsNTcyMDU5LjAsNzgzNjAwLjAsMS41OTgyMzc4RTcsODE4NjQ1My4wLDEyMTE1MzcuMCwyOTI2MzI0LjAsMTI5Mzk1My4wLDEuMjQxOTI5M0U3LDYwODA0ODUuMCwyNjg4NDE4LjAsNDA0MTc2OS4wLDQ0Njg5NzYuMCw2MzQ5MDk3LjAsNTI5NjQ4Ni4wLDEyNzQ5MjMuMCw5OTM4NDQ0LjAsNDkxOTQ3OS4wLDU1OTUyMTEuMCwyODQ0NjU4LjAsOTAyMTk1LjAsODA0OTMxMy4wLDY0MjIwMC4wLDE3MTEyNjMuMCwxMjM1Nzg2LjAsODQxNDM1MC4wLDE4MTkwNDYuMCwxOTk4MjU3LjAsMS44OTc2NDU3RTcsMS4xMzUzMTRFNywzNDUwNjU0LjAsMzQyMTM5OS4wLDEuMjI4MTA1NEU3LDEwNDgzMTkuMCw0MDEyMDEyLjAsNzU0ODQ0LjAsNTY4OTI4My4wLDIuMDg1MTgyRTcsMjIzMzE2OS4wLDcwNzg1MTYuMCw2MDg4MjcuMCw1ODk0MTIxLjAsNTM2MzY3NS4wLDE4MDgzNDQuMCw0OTM3ODIuMAorNixTdW4gMzAgSmFuIDExLDYyNjkzMi4wLDQ0NDcxMDAuMCwyNjczNDAwLjAsNTEzMDYzMi4wLDMuMzg3MTY0OEU3LDQzMDEyNjEuMCwzNDA1NTY1LjAsNTcyMDU5LjAsNzgzNjAwLjAsMS41OTgyMzc4RTcsODE4NjQ1My4wLDEyMTE1MzcuMCwyOTI2MzI0LjAsMTI5Mzk1My4wLDEuMjQxOTI5M0U3LDYwODA0ODUuMCwyNjg4NDE4LjAsNDA0MTc2OS4wLDQ0Njg5NzYuMCw2MzQ5MDk3LjAsNTI5NjQ4Ni4wLDEyNzQ5MjMuMCw5OTM4NDQ0LjAsNDkxOTQ3OS4wLDU1OTUyMTEuMCwyODQ0NjU4LjAsOTAyMTk1LjAsODA0OTMxMy4wLDY0MjIwMC4wLDE3MTEyNjMuMCwxMjM1Nzg2LjAsODQxNDM1MC4wLDE4MTkwNDYuMCwxOTk4MjU3LjAsMS44OTc2NDU3RTcsMS4xMzUzMTRFNywzNDUwNjU0LjAsMzQyMTM5OS4wLDEuMjI4MTA1NEU3LDEwNDgzMTkuMCw0MDEyMDEyLjAsNzU0ODQ0LjAsNTY4OTI4My4wLDIuMDg1MTgyRTcsMjIzMzE2OS4wLDcwNzg1MTYuMCw2MDg4MjcuMCw1ODk0MTIxLjAsNTM2MzY3NS4wLDE4MDgzNDQuMCw0OTM3ODIuMAorNyxNb24gMzEgSmFuIDExLDYyNjkzMi4wLDQ0NDcxMDAuMCwyNjczNDAwLjAsNTEzMDYzMi4wLDMuMzg3MTY0OEU3LDQzMDEyNjEuMCwzNDA1NTY1LjAsNTcyMDU5LjAsNzgzNjAwLjAsMS41OTgyMzc4RTcsODE4NjQ1My4wLDEyMTE1MzcuMCwyOTI2MzI0LjAsMTI5Mzk1My4wLDEuMjQxOTI5M0U3LDYwODA0ODUuMCwyNjg4NDE4LjAsNDA0MTc2OS4wLDQ0Njg5NzYuMCw2MzQ5MDk3LjAsNTI5NjQ4Ni4wLDEyNzQ5MjMuMCw5OTM4NDQ0LjAsNDkxOTQ3OS4wLDU1OTUyMTEuMCwyODQ0NjU4LjAsOTAyMTk1LjAsODA0OTMxMy4wLDY0MjIwMC4wLDE3MTEyNjMuMCwxMjM1Nzg2LjAsODQxNDM1MC4wLDE4MTkwNDYuMCwxOTk4MjU3LjAsMS44OTc2NDU3RTcsMS4xMzUzMTRFNywzNDUwNjU0LjAsMzQyMTM5OS4wLDEuMjI4MTA1NEU3LDEwNDgzMTkuMCw0MDEyMDEyLjAsNzU0ODQ0LjAsNTY4OTI4My4wLDIuMDg1MTgyRTcsMjIzMzE2OS4wLDcwNzg1MTYuMCw2MDg4MjcuMCw1ODk0MTIxLjAsNTM2MzY3NS4wLDE4MDgzNDQuMCw0OTM3ODIuMAorOCxUdWUgMSBGZWIgMTEsNjI2OTMyLjAsNDQ0NzEwMC4wLDI2NzM0MDAuMCw1MTMwNjMyLjAsMy4zODcxNjQ4RTcsNDMwMTI2MS4wLDM0MDU1NjUuMCw1NzIwNTkuMCw3ODM2MDAuMCwxLjU5ODIzNzhFNyw4MTg2NDUzLjAsMTIxMTUzNy4wLDI5MjYzMjQuMCwxMjkzOTUzLjAsMS4yNDE5MjkzRTcsNjA4MDQ4NS4wLDI2ODg0MTguMCw0MDQxNzY5LjAsNDQ2ODk3Ni4wLDYzNDkwOTcuMCw1Mjk2NDg2LjAsMTI3NDkyMy4wLDk5Mzg0NDQuMCw0OTE5NDc5LjAsNTU5NTIxMS4wLDI4NDQ2NTguMCw5MDIxOTUuMCw4MDQ5MzEzLjAsNjQyMjAwLjAsMTcxMTI2My4wLDEyMzU3ODYuMCw4NDE0MzUwLjAsMTgxOTA0Ni4wLDE5OTgyNTcuMCwxLjg5NzY0NTdFNywxLjEzNTMxNEU3LDM0NTA2NTQuMCwzNDIxMzk5LjAsMS4yMjgxMDU0RTcsMTA0ODMxOS4wLDQwMTIwMTIuMCw3NTQ4NDQuMCw1Njg5MjgzLjAsMi4wODUxODJFNywyMjMzMTY5LjAsNzA3ODUxNi4wLDYwODgyNy4wLDU4OTQxMjEuMCw1MzYzNjc1LjAsMTgwODM0NC4wLDQ5Mzc4Mi4wCis5LFdlZCAyIEZlYiAxMSw2MjY5MzIuMCw0NDQ3MTAwLjAsMjY3MzQwMC4wLDUxMzA2MzIuMCwzLjM4NzE2NDhFNyw0MzAxMjYxLjAsMzQwNTU2NS4wLDU3MjA1OS4wLDc4MzYwMC4wLDEuNTk4MjM3OEU3LDgxODY0NTMuMCwxMjExNTM3LjAsMjkyNjMyNC4wLDEyOTM5NTMuMCwxLjI0MTkyOTNFNyw2MDgwNDg1LjAsMjY4ODQxOC4wLDQwNDE3NjkuMCw0NDY4OTc2LjAsNjM0OTA5Ny4wLDUyOTY0ODYuMCwxMjc0OTIzLjAsOTkzODQ0NC4wLDQ5MTk0NzkuMCw1NTk1MjExLjAsMjg0NDY1OC4wLDkwMjE5NS4wLDgwNDkzMTMuMCw2NDIyMDAuMCwxNzExMjYzLjAsMTIzNTc4Ni4wLDg0MTQzNTAuMCwxODE5MDQ2LjAsMTk5ODI1Ny4wLDEuODk3NjQ1N0U3LDEuMTM1MzE0RTcsMzQ1MDY1NC4wLDM0MjEzOTkuMCwxLjIyODEwNTRFNywxMDQ4MzE5LjAsNDAxMjAxMi4wLDc1NDg0NC4wLDU2ODkyODMuMCwyLjA4NTE4MkU3LDIyMzMxNjkuMCw3MDc4NTE2LjAsNjA4ODI3LjAsNTg5NDEyMS4wLDUzNjM2NzUuMCwxODA4MzQ0LjAsNDkzNzgyLjAKKzEwLFRodSAzIEZlYiAxMSw2MjY5MzIuMCw0NDQ3MTAwLjAsMjY3MzQwMC4wLDUxMzA2MzIuMCwzLjM4NzE2NDhFNyw0MzAxMjYxLjAsMzQwNTU2NS4wLDU3MjA1OS4wLDc4MzYwMC4wLDEuNTk4MjM3OEU3LDgxODY0NTMuMCwxMjExNTM3LjAsMjkyNjMyNC4wLDEyOTM5NTMuMCwxLjI0MTkyOTNFNyw2MDgwNDg1LjAsMjY4ODQxOC4wLDQwNDE3NjkuMCw0NDY4OTc2LjAsNjM0OTA5Ny4wLDUyOTY0ODYuMCwxMjc0OTIzLjAsOTkzODQ0NC4wLDQ5MTk0NzkuMCw1NTk1MjExLjAsMjg0NDY1OC4wLDkwMjE5NS4wLDgwNDkzMTMuMCw2NDIyMDAuMCwxNzExMjYzLjAsMTIzNTc4Ni4wLDg0MTQzNTAuMCwxODE5MDQ2LjAsMTk5ODI1Ny4wLDEuODk3NjQ1N0U3LDEuMTM1MzE0RTcsMzQ1MDY1NC4wLDM0MjEzOTkuMCwxLjIyODEwNTRFNywxMDQ4MzE5LjAsNDAxMjAxMi4wLDc1NDg0NC4wLDU2ODkyODMuMCwyLjA4NTE4MkU3LDIyMzMxNjkuMCw3MDc4NTE2LjAsNjA4ODI3LjAsNTg5NDEyMS4wLDUzNjM2NzUuMCwxODA4MzQ0LjAsNDkzNzgyLjAKKzExLEZyaSA0IEZlYiAxMSw2MjY5MzIuMCw0NDQ3MTAwLjAsMjY3MzQwMC4wLDUxMzA2MzIuMCwzLjM4NzE2NDhFNyw0MzAxMjYxLjAsMzQwNTU2NS4wLDU3MjA1OS4wLDc4MzYwMC4wLDEuNTk4MjM3OEU3LDgxODY0NTMuMCwxMjExNTM3LjAsMjkyNjMyNC4wLDEyOTM5NTMuMCwxLjI0MTkyOTNFNyw2MDgwNDg1LjAsMjY4ODQxOC4wLDQwNDE3NjkuMCw0NDY4OTc2LjAsNjM0OTA5Ny4wLDUyOTY0ODYuMCwxMjc0OTIzLjAsOTkzODQ0NC4wLDQ5MTk0NzkuMCw1NTk1MjExLjAsMjg0NDY1OC4wLDkwMjE5NS4wLDgwNDkzMTMuMCw2NDIyMDAuMCwxNzExMjYzLjAsMTIzNTc4Ni4wLDg0MTQzNTAuMCwxODE5MDQ2LjAsMTk5ODI1Ny4wLDEuODk3NjQ1N0U3LDEuMTM1MzE0RTcsMzQ1MDY1NC4wLDM0MjEzOTkuMCwxLjIyODEwNTRFNywxMDQ4MzE5LjAsNDAxMjAxMi4wLDc1NDg0NC4wLDU2ODkyODMuMCwyLjA4NTE4MkU3LDIyMzMxNjkuMCw3MDc4NTE2LjAsNjA4ODI3LjAsNTg5NDEyMS4wLDUzNjM2NzUuMCwxODA4MzQ0LjAsNDkzNzgyLjAKKzEyLFNhdCA1IEZlYiAxMSw2MjY5MzIuMCw0NDQ3MTAwLjAsMjY3MzQwMC4wLDUxMzA2MzIuMCwzLjM4NzE2NDhFNyw0MzAxMjYxLjAsMzQwNTU2NS4wLDU3MjA1OS4wLDc4MzYwMC4wLDEuNTk4MjM3OEU3LDgxODY0NTMuMCwxMjExNTM3LjAsMjkyNjMyNC4wLDEyOTM5NTMuMCwxLjI0MTkyOTNFNyw2MDgwNDg1LjAsMjY4ODQxOC4wLDQwNDE3NjkuMCw0NDY4OTc2LjAsNjM0OTA5Ny4wLDUyOTY0ODYuMCwxMjc0OTIzLjAsOTkzODQ0NC4wLDQ5MTk0NzkuMCw1NTk1MjExLjAsMjg0NDY1OC4wLDkwMjE5NS4wLDgwNDkzMTMuMCw2NDIyMDAuMCwxNzExMjYzLjAsMTIzNTc4Ni4wLDg0MTQzNTAuMCwxODE5MDQ2LjAsMTk5ODI1Ny4wLDEuODk3NjQ1N0U3LDEuMTM1MzE0RTcsMzQ1MDY1NC4wLDM0MjEzOTkuMCwxLjIyODEwNTRFNywxMDQ4MzE5LjAsNDAxMjAxMi4wLDc1NDg0NC4wLDU2ODkyODMuMCwyLjA4NTE4MkU3LDIyMzMxNjkuMCw3MDc4NTE2LjAsNjA4ODI3LjAsNTg5NDEyMS4wLDUzNjM2NzUuMCwxODA4MzQ0LjAsNDkzNzgyLjAKKzEzLFN1biA2IEZlYiAxMSw2MjY5MzIuMCw0NDQ3MTAwLjAsMjY3MzQwMC4wLDUxMzA2MzIuMCwzLjM4NzE2NDhFNyw0MzAxMjYxLjAsMzQwNTU2NS4wLDU3MjA1OS4wLDc4MzYwMC4wLDEuNTk4MjM3OEU3LDgxODY0NTMuMCwxMjExNTM3LjAsMjkyNjMyNC4wLDEyOTM5NTMuMCwxLjI0MTkyOTNFNyw2MDgwNDg1LjAsMjY4ODQxOC4wLDQwNDE3NjkuMCw0NDY4OTc2LjAsNjM0OTA5Ny4wLDUyOTY0ODYuMCwxMjc0OTIzLjAsOTkzODQ0NC4wLDQ5MTk0NzkuMCw1NTk1MjExLjAsMjg0NDY1OC4wLDkwMjE5NS4wLDgwNDkzMTMuMCw2NDIyMDAuMCwxNzExMjYzLjAsMTIzNTc4Ni4wLDg0MTQzNTAuMCwxODE5MDQ2LjAsMTk5ODI1Ny4wLDEuODk3NjQ1N0U3LDEuMTM1MzE0RTcsMzQ1MDY1NC4wLDM0MjEzOTkuMCwxLjIyODEwNTRFNywxMDQ4MzE5LjAsNDAxMjAxMi4wLDc1NDg0NC4wLDU2ODkyODMuMCwyLjA4NTE4MkU3LDIyMzMxNjkuMCw3MDc4NTE2LjAsNjA4ODI3LjAsNTg5NDEyMS4wLDUzNjM2NzUuMCwxODA4MzQ0LjAsNDkzNzgyLjAKKzE0LE1vbiA3IEZlYiAxMSw2MjY5MzIuMCw0NDQ3MTAwLjAsMjY3MzQwMC4wLDUxMzA2MzIuMCwzLjM4NzE2NDhFNyw0MzAxMjYxLjAsMzQwNTU2NS4wLDU3MjA1OS4wLDc4MzYwMC4wLDEuNTk4MjM3OEU3LDgxODY0NTMuMCwxMjExNTM3LjAsMjkyNjMyNC4wLDEyOTM5NTMuMCwxLjI0MTkyOTNFNyw2MDgwNDg1LjAsMjY4ODQxOC4wLDQwNDE3NjkuMCw0NDY4OTc2LjAsNjM0OTA5Ny4wLDUyOTY0ODYuMCwxMjc0OTIzLjAsOTkzODQ0NC4wLDQ5MTk0NzkuMCw1NTk1MjExLjAsMjg0NDY1OC4wLDkwMjE5NS4wLDgwNDkzMTMuMCw2NDIyMDAuMCwxNzExMjYzLjAsMTIzNTc4Ni4wLDg0MTQzNTAuMCwxODE5MDQ2LjAsMTk5ODI1Ny4wLDEuODk3NjQ1N0U3LDEuMTM1MzE0RTcsMzQ1MDY1NC4wLDM0MjEzOTkuMCwxLjIyODEwNTRFNywxMDQ4MzE5LjAsNDAxMjAxMi4wLDc1NDg0NC4wLDU2ODkyODMuMCwyLjA4NTE4MkU3LDIyMzMxNjkuMCw3MDc4NTE2LjAsNjA4ODI3LjAsNTg5NDEyMS4wLDUzNjM2NzUuMCwxODA4MzQ0LjAsNDkzNzgyLjAKKzE1LFR1ZSA4IEZlYiAxMSw2MjY5MzIuMCw0NDQ3MTAwLjAsMjY3MzQwMC4wLDUxMzA2MzIuMCwzLjM4NzE2NDhFNyw0MzAxMjYxLjAsMzQwNTU2NS4wLDU3MjA1OS4wLDc4MzYwMC4wLDEuNTk4MjM3OEU3LDgxODY0NTMuMCwxMjExNTM3LjAsMjkyNjMyNC4wLDEyOTM5NTMuMCwxLjI0MTkyOTNFNyw2MDgwNDg1LjAsMjY4ODQxOC4wLDQwNDE3NjkuMCw0NDY4OTc2LjAsNjM0OTA5Ny4wLDUyOTY0ODYuMCwxMjc0OTIzLjAsOTkzODQ0NC4wLDQ5MTk0NzkuMCw1NTk1MjExLjAsMjg0NDY1OC4wLDkwMjE5NS4wLDgwNDkzMTMuMCw2NDIyMDAuMCwxNzExMjYzLjAsMTIzNTc4Ni4wLDg0MTQzNTAuMCwxODE5MDQ2LjAsMTk5ODI1Ny4wLDEuODk3NjQ1N0U3LDEuMTM1MzE0RTcsMzQ1MDY1NC4wLDM0MjEzOTkuMCwxLjIyODEwNTRFNywxMDQ4MzE5LjAsNDAxMjAxMi4wLDc1NDg0NC4wLDU2ODkyODMuMCwyLjA4NTE4MkU3LDIyMzMxNjkuMCw3MDc4NTE2LjAsNjA4ODI3LjAsNTg5NDEyMS4wLDUzNjM2NzUuMCwxODA4MzQ0LjAsNDkzNzgyLjAKKzE2LFdlZCA5IEZlYiAxMSw2MjY5MzIuMCw0NDQ3MTAwLjAsMjY3MzQwMC4wLDUxMzA2MzIuMCwzLjM4NzE2NDhFNyw0MzAxMjYxLjAsMzQwNTU2NS4wLDU3MjA1OS4wLDc4MzYwMC4wLDEuNTk4MjM3OEU3LDgxODY0NTMuMCwxMjExNTM3LjAsMjkyNjMyNC4wLDEyOTM5NTMuMCwxLjI0MTkyOTNFNyw2MDgwNDg1LjAsMjY4ODQxOC4wLDQwNDE3NjkuMCw0NDY4OTc2LjAsNjM0OTA5Ny4wLDUyOTY0ODYuMCwxMjc0OTIzLjAsOTkzODQ0NC4wLDQ5MTk0NzkuMCw1NTk1MjExLjAsMjg0NDY1OC4wLDkwMjE5NS4wLDgwNDkzMTMuMCw2NDIyMDAuMCwxNzExMjYzLjAsMTIzNTc4Ni4wLDg0MTQzNTAuMCwxODE5MDQ2LjAsMTk5ODI1Ny4wLDEuODk3NjQ1N0U3LDEuMTM1MzE0RTcsMzQ1MDY1NC4wLDM0MjEzOTkuMCwxLjIyODEwNTRFNywxMDQ4MzE5LjAsNDAxMjAxMi4wLDc1NDg0NC4wLDU2ODkyODMuMCwyLjA4NTE4MkU3LDIyMzMxNjkuMCw3MDc4NTE2LjAsNjA4ODI3LjAsNTg5NDEyMS4wLDUzNjM2NzUuMCwxODA4MzQ0LjAsNDkzNzgyLjAKKzE3LFRodSAxMCBGZWIgMTEsNjI2OTMyLjAsNDQ0NzEwMC4wLDI2NzM0MDAuMCw1MTMwNjMyLjAsMy4zODcxNjQ4RTcsNDMwMTI2MS4wLDM0MDU1NjUuMCw1NzIwNTkuMCw3ODM2MDAuMCwxLjU5ODIzNzhFNyw4MTg2NDUzLjAsMTIxMTUzNy4wLDI5MjYzMjQuMCwxMjkzOTUzLjAsMS4yNDE5MjkzRTcsNjA4MDQ4NS4wLDI2ODg0MTguMCw0MDQxNzY5LjAsNDQ2ODk3Ni4wLDYzNDkwOTcuMCw1Mjk2NDg2LjAsMTI3NDkyMy4wLDk5Mzg0NDQuMCw0OTE5NDc5LjAsNTU5NTIxMS4wLDI4NDQ2NTguMCw5MDIxOTUuMCw4MDQ5MzEzLjAsNjQyMjAwLjAsMTcxMTI2My4wLDEyMzU3ODYuMCw4NDE0MzUwLjAsMTgxOTA0Ni4wLDE5OTgyNTcuMCwxLjg5NzY0NTdFNywxLjEzNTMxNEU3LDM0NTA2NTQuMCwzNDIxMzk5LjAsMS4yMjgxMDU0RTcsMTA0ODMxOS4wLDQwMTIwMTIuMCw3NTQ4NDQuMCw1Njg5MjgzLjAsMi4wODUxODJFNywyMjMzMTY5LjAsNzA3ODUxNi4wLDYwODgyNy4wLDU4OTQxMjEuMCw1MzYzNjc1LjAsMTgwODM0NC4wLDQ5Mzc4Mi4wCisxOCxGcmkgMTEgRmViIDExLDYyNjkzMi4wLDQ0NDcxMDAuMCwyNjczNDAwLjAsNTEzMDYzMi4wLDMuMzg3MTY0OEU3LDQzMDEyNjEuMCwzNDA1NTY1LjAsNTcyMDU5LjAsNzgzNjAwLjAsMS41OTgyMzc4RTcsODE4NjQ1My4wLDEyMTE1MzcuMCwyOTI2MzI0LjAsMTI5Mzk1My4wLDEuMjQxOTI5M0U3LDYwODA0ODUuMCwyNjg4NDE4LjAsNDA0MTc2OS4wLDQ0Njg5NzYuMCw2MzQ5MDk3LjAsNTI5NjQ4Ni4wLDEyNzQ5MjMuMCw5OTM4NDQ0LjAsNDkxOTQ3OS4wLDU1OTUyMTEuMCwyODQ0NjU4LjAsOTAyMTk1LjAsODA0OTMxMy4wLDY0MjIwMC4wLDE3MTEyNjMuMCwxMjM1Nzg2LjAsODQxNDM1MC4wLDE4MTkwNDYuMCwxOTk4MjU3LjAsMS44OTc2NDU3RTcsMS4xMzUzMTRFNywzNDUwNjU0LjAsMzQyMTM5OS4wLDEuMjI4MTA1NEU3LDEwNDgzMTkuMCw0MDEyMDEyLjAsNzU0ODQ0LjAsNTY4OTI4My4wLDIuMDg1MTgyRTcsMjIzMzE2OS4wLDcwNzg1MTYuMCw2MDg4MjcuMCw1ODk0MTIxLjAsNTM2MzY3NS4wLDE4MDgzNDQuMCw0OTM3ODIuMAorMTksU2F0IDEyIEZlYiAxMSw2MjY5MzIuMCw0NDQ3MTAwLjAsMjY3MzQwMC4wLDUxMzA2MzIuMCwzLjM4NzE2NDhFNyw0MzAxMjYxLjAsMzQwNTU2NS4wLDU3MjA1OS4wLDc4MzYwMC4wLDEuNTk4MjM3OEU3LDgxODY0NTMuMCwxMjExNTM3LjAsMjkyNjMyNC4wLDEyOTM5NTMuMCwxLjI0MTkyOTNFNyw2MDgwNDg1LjAsMjY4ODQxOC4wLDQwNDE3NjkuMCw0NDY4OTc2LjAsNjM0OTA5Ny4wLDUyOTY0ODYuMCwxMjc0OTIzLjAsOTkzODQ0NC4wLDQ5MTk0NzkuMCw1NTk1MjExLjAsMjg0NDY1OC4wLDkwMjE5NS4wLDgwNDkzMTMuMCw2NDIyMDAuMCwxNzExMjYzLjAsMTIzNTc4Ni4wLDg0MTQzNTAuMCwxODE5MDQ2LjAsMTk5ODI1Ny4wLDEuODk3NjQ1N0U3LDEuMTM1MzE0RTcsMzQ1MDY1NC4wLDM0MjEzOTkuMCwxLjIyODEwNTRFNywxMDQ4MzE5LjAsNDAxMjAxMi4wLDc1NDg0NC4wLDU2ODkyODMuMCwyLjA4NTE4MkU3LDIyMzMxNjkuMCw3MDc4NTE2LjAsNjA4ODI3LjAsNTg5NDEyMS4wLDUzNjM2NzUuMCwxODA4MzQ0LjAsNDkzNzgyLjAKKzIwLFN1biAxMyBGZWIgMTEsNjI2OTMyLjAsNDQ0NzEwMC4wLDI2NzM0MDAuMCw1MTMwNjMyLjAsMy4zODcxNjQ4RTcsNDMwMTI2MS4wLDM0MDU1NjUuMCw1NzIwNTkuMCw3ODM2MDAuMCwxLjU5ODIzNzhFNyw4MTg2NDUzLjAsMTIxMTUzNy4wLDI5MjYzMjQuMCwxMjkzOTUzLjAsMS4yNDE5MjkzRTcsNjA4MDQ4NS4wLDI2ODg0MTguMCw0MDQxNzY5LjAsNDQ2ODk3Ni4wLDYzNDkwOTcuMCw1Mjk2NDg2LjAsMTI3NDkyMy4wLDk5Mzg0NDQuMCw0OTE5NDc5LjAsNTU5NTIxMS4wLDI4NDQ2NTguMCw5MDIxOTUuMCw4MDQ5MzEzLjAsNjQyMjAwLjAsMTcxMTI2My4wLDEyMzU3ODYuMCw4NDE0MzUwLjAsMTgxOTA0Ni4wLDE5OTgyNTcuMCwxLjg5NzY0NTdFNywxLjEzNTMxNEU3LDM0NTA2NTQuMCwzNDIxMzk5LjAsMS4yMjgxMDU0RTcsMTA0ODMxOS4wLDQwMTIwMTIuMCw3NTQ4NDQuMCw1Njg5MjgzLjAsMi4wODUxODJFNywyMjMzMTY5LjAsNzA3ODUxNi4wLDYwODgyNy4wLDU4OTQxMjEuMCw1MzYzNjc1LjAsMTgwODM0NC4wLDQ5Mzc4Mi4wCisyMSxNb24gMTQgRmViIDExLDYyNjkzMi4wLDQ0NDcxMDAuMCwyNjczNDAwLjAsNTEzMDYzMi4wLDMuMzg3MTY0OEU3LDQzMDEyNjEuMCwzNDA1NTY1LjAsNTcyMDU5LjAsNzgzNjAwLjAsMS41OTgyMzc4RTcsODE4NjQ1My4wLDEyMTE1MzcuMCwyOTI2MzI0LjAsMTI5Mzk1My4wLDEuMjQxOTI5M0U3LDYwODA0ODUuMCwyNjg4NDE4LjAsNDA0MTc2OS4wLDQ0Njg5NzYuMCw2MzQ5MDk3LjAsNTI5NjQ4Ni4wLDEyNzQ5MjMuMCw5OTM4NDQ0LjAsNDkxOTQ3OS4wLDU1OTUyMTEuMCwyODQ0NjU4LjAsOTAyMTk1LjAsODA0OTMxMy4wLDY0MjIwMC4wLDE3MTEyNjMuMCwxMjM1Nzg2LjAsODQxNDM1MC4wLDE4MTkwNDYuMCwxOTk4MjU3LjAsMS44OTc2NDU3RTcsMS4xMzUzMTRFNywzNDUwNjU0LjAsMzQyMTM5OS4wLDEuMjI4MTA1NEU3LDEwNDgzMTkuMCw0MDEyMDEyLjAsNzU0ODQ0LjAsNTY4OTI4My4wLDIuMDg1MTgyRTcsMjIzMzE2OS4wLDcwNzg1MTYuMCw2MDg4MjcuMCw1ODk0MTIxLjAsNTM2MzY3NS4wLDE4MDgzNDQuMCw0OTM3ODIuMAorMjIsVHVlIDE1IEZlYiAxMSw2MjY5MzIuMCw0NDQ3MTAwLjAsMjY3MzQwMC4wLDUxMzA2MzIuMCwzLjM4NzE2NDhFNyw0MzAxMjYxLjAsMzQwNTU2NS4wLDU3MjA1OS4wLDc4MzYwMC4wLDEuNTk4MjM3OEU3LDgxODY0NTMuMCwxMjExNTM3LjAsMjkyNjMyNC4wLDEyOTM5NTMuMCwxLjI0MTkyOTNFNyw2MDgwNDg1LjAsMjY4ODQxOC4wLDQwNDE3NjkuMCw0NDY4OTc2LjAsNjM0OTA5Ny4wLDUyOTY0ODYuMCwxMjc0OTIzLjAsOTkzODQ0NC4wLDQ5MTk0NzkuMCw1NTk1MjExLjAsMjg0NDY1OC4wLDkwMjE5NS4wLDgwNDkzMTMuMCw2NDIyMDAuMCwxNzExMjYzLjAsMTIzNTc4Ni4wLDg0MTQzNTAuMCwxODE5MDQ2LjAsMTk5ODI1Ny4wLDEuODk3NjQ1N0U3LDEuMTM1MzE0RTcsMzQ1MDY1NC4wLDM0MjEzOTkuMCwxLjIyODEwNTRFNywxMDQ4MzE5LjAsNDAxMjAxMi4wLDc1NDg0NC4wLDU2ODkyODMuMCwyLjA4NTE4MkU3LDIyMzMxNjkuMCw3MDc4NTE2LjAsNjA4ODI3LjAsNTg5NDEyMS4wLDUzNjM2NzUuMCwxODA4MzQ0LjAsNDkzNzgyLjAKKzIzLFdlZCAxNiBGZWIgMTEsNjI2OTMyLjAsNDQ0NzEwMC4wLDI2NzM0MDAuMCw1MTMwNjMyLjAsMy4zODcxNjQ4RTcsNDMwMTI2MS4wLDM0MDU1NjUuMCw1NzIwNTkuMCw3ODM2MDAuMCwxLjU5ODIzNzhFNyw4MTg2NDUzLjAsMTIxMTUzNy4wLDI5MjYzMjQuMCwxMjkzOTUzLjAsMS4yNDE5MjkzRTcsNjA4MDQ4NS4wLDI2ODg0MTguMCw0MDQxNzY5LjAsNDQ2ODk3Ni4wLDYzNDkwOTcuMCw1Mjk2NDg2LjAsMTI3NDkyMy4wLDk5Mzg0NDQuMCw0OTE5NDc5LjAsNTU5NTIxMS4wLDI4NDQ2NTguMCw5MDIxOTUuMCw4MDQ5MzEzLjAsNjQyMjAwLjAsMTcxMTI2My4wLDEyMzU3ODYuMCw4NDE0MzUwLjAsMTgxOTA0Ni4wLDE5OTgyNTcuMCwxLjg5NzY0NTdFNywxLjEzNTMxNEU3LDM0NTA2NTQuMCwzNDIxMzk5LjAsMS4yMjgxMDU0RTcsMTA0ODMxOS4wLDQwMTIwMTIuMCw3NTQ4NDQuMCw1Njg5MjgzLjAsMi4wODUxODJFNywyMjMzMTY5LjAsNzA3ODUxNi4wLDYwODgyNy4wLDU4OTQxMjEuMCw1MzYzNjc1LjAsMTgwODM0NC4wLDQ5Mzc4Mi4wCisyNCxUaHUgMTcgRmViIDExLDYyNjkzMi4wLDQ0NDcxMDAuMCwyNjczNDAwLjAsNTEzMDYzMi4wLDMuMzg3MTY0OEU3LDQzMDEyNjEuMCwzNDA1NTY1LjAsNTcyMDU5LjAsNzgzNjAwLjAsMS41OTgyMzc4RTcsODE4NjQ1My4wLDEyMTE1MzcuMCwyOTI2MzI0LjAsMTI5Mzk1My4wLDEuMjQxOTI5M0U3LDYwODA0ODUuMCwyNjg4NDE4LjAsNDA0MTc2OS4wLDQ0Njg5NzYuMCw2MzQ5MDk3LjAsNTI5NjQ4Ni4wLDEyNzQ5MjMuMCw5OTM4NDQ0LjAsNDkxOTQ3OS4wLDU1OTUyMTEuMCwyODQ0NjU4LjAsOTAyMTk1LjAsODA0OTMxMy4wLDY0MjIwMC4wLDE3MTEyNjMuMCwxMjM1Nzg2LjAsODQxNDM1MC4wLDE4MTkwNDYuMCwxOTk4MjU3LjAsMS44OTc2NDU3RTcsMS4xMzUzMTRFNywzNDUwNjU0LjAsMzQyMTM5OS4wLDEuMjI4MTA1NEU3LDEwNDgzMTkuMCw0MDEyMDEyLjAsNzU0ODQ0LjAsNTY4OTI4My4wLDIuMDg1MTgyRTcsMjIzMzE2OS4wLDcwNzg1MTYuMCw2MDg4MjcuMCw1ODk0MTIxLjAsNTM2MzY3NS4wLDE4MDgzNDQuMCw0OTM3ODIuMAorMjUsRnJpIDE4IEZlYiAxMSw2MjY5MzIuMCw0NDQ3MTAwLjAsMjY3MzQwMC4wLDUxMzA2MzIuMCwzLjM4NzE2NDhFNyw0MzAxMjYxLjAsMzQwNTU2NS4wLDU3MjA1OS4wLDc4MzYwMC4wLDEuNTk4MjM3OEU3LDgxODY0NTMuMCwxMjExNTM3LjAsMjkyNjMyNC4wLDEyOTM5NTMuMCwxLjI0MTkyOTNFNyw2MDgwNDg1LjAsMjY4ODQxOC4wLDQwNDE3NjkuMCw0NDY4OTc2LjAsNjM0OTA5Ny4wLDUyOTY0ODYuMCwxMjc0OTIzLjAsOTkzODQ0NC4wLDQ5MTk0NzkuMCw1NTk1MjExLjAsMjg0NDY1OC4wLDkwMjE5NS4wLDgwNDkzMTMuMCw2NDIyMDAuMCwxNzExMjYzLjAsMTIzNTc4Ni4wLDg0MTQzNTAuMCwxODE5MDQ2LjAsMTk5ODI1Ny4wLDEuODk3NjQ1N0U3LDEuMTM1MzE0RTcsMzQ1MDY1NC4wLDM0MjEzOTkuMCwxLjIyODEwNTRFNywxMDQ4MzE5LjAsNDAxMjAxMi4wLDc1NDg0NC4wLDU2ODkyODMuMCwyLjA4NTE4MkU3LDIyMzMxNjkuMCw3MDc4NTE2LjAsNjA4ODI3LjAsNTg5NDEyMS4wLDUzNjM2NzUuMCwxODA4MzQ0LjAsNDkzNzgyLjAKKzI2LFNhdCAxOSBGZWIgMTEsNjI2OTMyLjAsNDQ0NzEwMC4wLDI2NzM0MDAuMCw1MTMwNjMyLjAsMy4zODcxNjQ4RTcsNDMwMTI2MS4wLDM0MDU1NjUuMCw1NzIwNTkuMCw3ODM2MDAuMCwxLjU5ODIzNzhFNyw4MTg2NDUzLjAsMTIxMTUzNy4wLDI5MjYzMjQuMCwxMjkzOTUzLjAsMS4yNDE5MjkzRTcsNjA4MDQ4NS4wLDI2ODg0MTguMCw0MDQxNzY5LjAsNDQ2ODk3Ni4wLDYzNDkwOTcuMCw1Mjk2NDg2LjAsMTI3NDkyMy4wLDk5Mzg0NDQuMCw0OTE5NDc5LjAsNTU5NTIxMS4wLDI4NDQ2NTguMCw5MDIxOTUuMCw4MDQ5MzEzLjAsNjQyMjAwLjAsMTcxMTI2My4wLDEyMzU3ODYuMCw4NDE0MzUwLjAsMTgxOTA0Ni4wLDE5OTgyNTcuMCwxLjg5NzY0NTdFNywxLjEzNTMxNEU3LDM0NTA2NTQuMCwzNDIxMzk5LjAsMS4yMjgxMDU0RTcsMTA0ODMxOS4wLDQwMTIwMTIuMCw3NTQ4NDQuMCw1Njg5MjgzLjAsMi4wODUxODJFNywyMjMzMTY5LjAsNzA3ODUxNi4wLDYwODgyNy4wLDU4OTQxMjEuMCw1MzYzNjc1LjAsMTgwODM0NC4wLDQ5Mzc4Mi4wCisyNyxTdW4gMjAgRmViIDExLDYyNjkzMi4wLDQ0NDcxMDAuMCwyNjczNDAwLjAsNTEzMDYzMi4wLDMuMzg3MTY0OEU3LDQzMDEyNjEuMCwzNDA1NTY1LjAsNTcyMDU5LjAsNzgzNjAwLjAsMS41OTgyMzc4RTcsODE4NjQ1My4wLDEyMTE1MzcuMCwyOTI2MzI0LjAsMTI5Mzk1My4wLDEuMjQxOTI5M0U3LDYwODA0ODUuMCwyNjg4NDE4LjAsNDA0MTc2OS4wLDQ0Njg5NzYuMCw2MzQ5MDk3LjAsNTI5NjQ4Ni4wLDEyNzQ5MjMuMCw5OTM4NDQ0LjAsNDkxOTQ3OS4wLDU1OTUyMTEuMCwyODQ0NjU4LjAsOTAyMTk1LjAsODA0OTMxMy4wLDY0MjIwMC4wLDE3MTEyNjMuMCwxMjM1Nzg2LjAsODQxNDM1MC4wLDE4MTkwNDYuMCwxOTk4MjU3LjAsMS44OTc2NDU3RTcsMS4xMzUzMTRFNywzNDUwNjU0LjAsMzQyMTM5OS4wLDEuMjI4MTA1NEU3LDEwNDgzMTkuMCw0MDEyMDEyLjAsNzU0ODQ0LjAsNTY4OTI4My4wLDIuMDg1MTgyRTcsMjIzMzE2OS4wLDcwNzg1MTYuMCw2MDg4MjcuMCw1ODk0MTIxLjAsNTM2MzY3NS4wLDE4MDgzNDQuMCw0OTM3ODIuMAorMjgsTW9uIDIxIEZlYiAxMSw2MjY5MzIuMCw0NDQ3MTAwLjAsMjY3MzQwMC4wLDUxMzA2MzIuMCwzLjM4NzE2NDhFNyw0MzAxMjYxLjAsMzQwNTU2NS4wLDU3MjA1OS4wLDc4MzYwMC4wLDEuNTk4MjM3OEU3LDgxODY0NTMuMCwxMjExNTM3LjAsMjkyNjMyNC4wLDEyOTM5NTMuMCwxLjI0MTkyOTNFNyw2MDgwNDg1LjAsMjY4ODQxOC4wLDQwNDE3NjkuMCw0NDY4OTc2LjAsNjM0OTA5Ny4wLDUyOTY0ODYuMCwxMjc0OTIzLjAsOTkzODQ0NC4wLDQ5MTk0NzkuMCw1NTk1MjExLjAsMjg0NDY1OC4wLDkwMjE5NS4wLDgwNDkzMTMuMCw2NDIyMDAuMCwxNzExMjYzLjAsMTIzNTc4Ni4wLDg0MTQzNTAuMCwxODE5MDQ2LjAsMTk5ODI1Ny4wLDEuODk3NjQ1N0U3LDEuMTM1MzE0RTcsMzQ1MDY1NC4wLDM0MjEzOTkuMCwxLjIyODEwNTRFNywxMDQ4MzE5LjAsNDAxMjAxMi4wLDc1NDg0NC4wLDU2ODkyODMuMCwyLjA4NTE4MkU3LDIyMzMxNjkuMCw3MDc4NTE2LjAsNjA4ODI3LjAsNTg5NDEyMS4wLDUzNjM2NzUuMCwxODA4MzQ0LjAsNDkzNzgyLjAKKzI5LFR1ZSAyMiBGZWIgMTEsNjI2OTMyLjAsNDQ0NzEwMC4wLDI2NzM0MDAuMCw1MTMwNjMyLjAsMy4zODcxNjQ4RTcsNDMwMTI2MS4wLDM0MDU1NjUuMCw1NzIwNTkuMCw3ODM2MDAuMCwxLjU5ODIzNzhFNyw4MTg2NDUzLjAsMTIxMTUzNy4wLDI5MjYzMjQuMCwxMjkzOTUzLjAsMS4yNDE5MjkzRTcsNjA4MDQ4NS4wLDI2ODg0MTguMCw0MDQxNzY5LjAsNDQ2ODk3Ni4wLDYzNDkwOTcuMCw1Mjk2NDg2LjAsMTI3NDkyMy4wLDk5Mzg0NDQuMCw0OTE5NDc5LjAsNTU5NTIxMS4wLDI4NDQ2NTguMCw5MDIxOTUuMCw4MDQ5MzEzLjAsNjQyMjAwLjAsMTcxMTI2My4wLDEyMzU3ODYuMCw4NDE0MzUwLjAsMTgxOTA0Ni4wLDE5OTgyNTcuMCwxLjg5NzY0NTdFNywxLjEzNTMxNEU3LDM0NTA2NTQuMCwzNDIxMzk5LjAsMS4yMjgxMDU0RTcsMTA0ODMxOS4wLDQwMTIwMTIuMCw3NTQ4NDQuMCw1Njg5MjgzLjAsMi4wODUxODJFNywyMjMzMTY5LjAsNzA3ODUxNi4wLDYwODgyNy4wLDU4OTQxMjEuMCw1MzYzNjc1LjAsMTgwODM0NC4wLDQ5Mzc4Mi4wCiszMCxXZWQgMjMgRmViIDExLDYyNjkzMi4wLDQ0NDcxMDAuMCwyNjczNDAwLjAsNTEzMDYzMi4wLDMuMzg3MTY0OEU3LDQzMDEyNjEuMCwzNDA1NTY1LjAsNTcyMDU5LjAsNzgzNjAwLjAsMS41OTgyMzc4RTcsODE4NjQ1My4wLDEyMTE1MzcuMCwyOTI2MzI0LjAsMTI5Mzk1My4wLDEuMjQxOTI5M0U3LDYwODA0ODUuMCwyNjg4NDE4LjAsNDA0MTc2OS4wLDQ0Njg5NzYuMCw2MzQ5MDk3LjAsNTI5NjQ4Ni4wLDEyNzQ5MjMuMCw5OTM4NDQ0LjAsNDkxOTQ3OS4wLDU1OTUyMTEuMCwyODQ0NjU4LjAsOTAyMTk1LjAsODA0OTMxMy4wLDY0MjIwMC4wLDE3MTEyNjMuMCwxMjM1Nzg2LjAsODQxNDM1MC4wLDE4MTkwNDYuMCwxOTk4MjU3LjAsMS44OTc2NDU3RTcsMS4xMzUzMTRFNywzNDUwNjU0LjAsMzQyMTM5OS4wLDEuMjI4MTA1NEU3LDEwNDgzMTkuMCw0MDEyMDEyLjAsNzU0ODQ0LjAsNTY4OTI4My4wLDIuMDg1MTgyRTcsMjIzMzE2OS4wLDcwNzg1MTYuMCw2MDg4MjcuMCw1ODk0MTIxLjAsNTM2MzY3NS4wLDE4MDgzNDQuMCw0OTM3ODIuMAorMzEsVGh1IDI0IEZlYiAxMSw2MjY5MzIuMCw0NDQ3MTAwLjAsMjY3MzQwMC4wLDUxMzA2MzIuMCwzLjM4NzE2NDhFNyw0MzAxMjYxLjAsMzQwNTU2NS4wLDU3MjA1OS4wLDc4MzYwMC4wLDEuNTk4MjM3OEU3LDgxODY0NTMuMCwxMjExNTM3LjAsMjkyNjMyNC4wLDEyOTM5NTMuMCwxLjI0MTkyOTNFNyw2MDgwNDg1LjAsMjY4ODQxOC4wLDQwNDE3NjkuMCw0NDY4OTc2LjAsNjM0OTA5Ny4wLDUyOTY0ODYuMCwxMjc0OTIzLjAsOTkzODQ0NC4wLDQ5MTk0NzkuMCw1NTk1MjExLjAsMjg0NDY1OC4wLDkwMjE5NS4wLDgwNDkzMTMuMCw2NDIyMDAuMCwxNzExMjYzLjAsMTIzNTc4Ni4wLDg0MTQzNTAuMCwxODE5MDQ2LjAsMTk5ODI1Ny4wLDEuODk3NjQ1N0U3LDEuMTM1MzE0RTcsMzQ1MDY1NC4wLDM0MjEzOTkuMCwxLjIyODEwNTRFNywxMDQ4MzE5LjAsNDAxMjAxMi4wLDc1NDg0NC4wLDU2ODkyODMuMCwyLjA4NTE4MkU3LDIyMzMxNjkuMCw3MDc4NTE2LjAsNjA4ODI3LjAsNTg5NDEyMS4wLDUzNjM2NzUuMCwxODA4MzQ0LjAsNDkzNzgyLjAKKzMyLEZyaSAyNSBGZWIgMTEsNjI2OTMyLjAsNDQ0NzEwMC4wLDI2NzM0MDAuMCw1MTMwNjMyLjAsMy4zODcxNjQ4RTcsNDMwMTI2MS4wLDM0MDU1NjUuMCw1NzIwNTkuMCw3ODM2MDAuMCwxLjU5ODIzNzhFNyw4MTg2NDUzLjAsMTIxMTUzNy4wLDI5MjYzMjQuMCwxMjkzOTUzLjAsMS4yNDE5MjkzRTcsNjA4MDQ4NS4wLDI2ODg0MTguMCw0MDQxNzY5LjAsNDQ2ODk3Ni4wLDYzNDkwOTcuMCw1Mjk2NDg2LjAsMTI3NDkyMy4wLDk5Mzg0NDQuMCw0OTE5NDc5LjAsNTU5NTIxMS4wLDI4NDQ2NTguMCw5MDIxOTUuMCw4MDQ5MzEzLjAsNjQyMjAwLjAsMTcxMTI2My4wLDEyMzU3ODYuMCw4NDE0MzUwLjAsMTgxOTA0Ni4wLDE5OTgyNTcuMCwxLjg5NzY0NTdFNywxLjEzNTMxNEU3LDM0NTA2NTQuMCwzNDIxMzk5LjAsMS4yMjgxMDU0RTcsMTA0ODMxOS4wLDQwMTIwMTIuMCw3NTQ4NDQuMCw1Njg5MjgzLjAsMi4wODUxODJFNywyMjMzMTY5LjAsNzA3ODUxNi4wLDYwODgyNy4wLDU4OTQxMjEuMCw1MzYzNjc1LjAsMTgwODM0NC4wLDQ5Mzc4Mi4wCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNJU3RhdGVzT25seV9GRF9SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9odW1hbi9EZWF0aHNfMC5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNJU3RhdGVzT25seV9GRF9SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9odW1hbi9EZWF0aHNfMC5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTEyZThiOAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0lTdGF0ZXNPbmx5X0ZEX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL2h1bWFuL0RlYXRoc18wLmNzdgpAQCAtMCwwICsxLDMzIEBACitpdGVyYXRpb24sdGltZSxzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9ub2RlL3RyYW5zcG9ydC9waXBlL1VTQQorMSxUdWUgMjUgSmFuIDExLDAuMAorMixXZWQgMjYgSmFuIDExLDAuMAorMyxUaHUgMjcgSmFuIDExLDAuMAorNCxGcmkgMjggSmFuIDExLDAuMAorNSxTYXQgMjkgSmFuIDExLDAuMAorNixTdW4gMzAgSmFuIDExLDAuMAorNyxNb24gMzEgSmFuIDExLDAuMAorOCxUdWUgMSBGZWIgMTEsMC4wCis5LFdlZCAyIEZlYiAxMSwwLjAKKzEwLFRodSAzIEZlYiAxMSwwLjAKKzExLEZyaSA0IEZlYiAxMSwwLjAKKzEyLFNhdCA1IEZlYiAxMSwwLjAKKzEzLFN1biA2IEZlYiAxMSwwLjAKKzE0LE1vbiA3IEZlYiAxMSwwLjAKKzE1LFR1ZSA4IEZlYiAxMSwwLjAKKzE2LFdlZCA5IEZlYiAxMSwwLjAKKzE3LFRodSAxMCBGZWIgMTEsMC4wCisxOCxGcmkgMTEgRmViIDExLDAuMAorMTksU2F0IDEyIEZlYiAxMSwwLjAKKzIwLFN1biAxMyBGZWIgMTEsMC4wCisyMSxNb24gMTQgRmViIDExLDAuMAorMjIsVHVlIDE1IEZlYiAxMSwwLjAKKzIzLFdlZCAxNiBGZWIgMTEsMC4wCisyNCxUaHUgMTcgRmViIDExLDAuMAorMjUsRnJpIDE4IEZlYiAxMSwwLjAKKzI2LFNhdCAxOSBGZWIgMTEsMC4wCisyNyxTdW4gMjAgRmViIDExLDAuMAorMjgsTW9uIDIxIEZlYiAxMSwwLjAKKzI5LFR1ZSAyMiBGZWIgMTEsMC4wCiszMCxXZWQgMjMgRmViIDExLDAuMAorMzEsVGh1IDI0IEZlYiAxMSwwLjAKKzMyLEZyaSAyNSBGZWIgMTEsMC4wCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNJU3RhdGVzT25seV9GRF9SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9odW1hbi9EZWF0aHNfMS5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNJU3RhdGVzT25seV9GRF9SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9odW1hbi9EZWF0aHNfMS5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDdhODQzZgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0lTdGF0ZXNPbmx5X0ZEX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL2h1bWFuL0RlYXRoc18xLmNzdgpAQCAtMCwwICsxLDMzIEBACitpdGVyYXRpb24sdGltZSxVUy1BSyxVUy1BTCxVUy1BUixVUy1BWixVUy1DQSxVUy1DTyxVUy1DVCxVUy1EQyxVUy1ERSxVUy1GTCxVUy1HQSxVUy1ISSxVUy1JQSxVUy1JRCxVUy1JTCxVUy1JTixVUy1LUyxVUy1LWSxVUy1MQSxVUy1NQSxVUy1NRCxVUy1NRSxVUy1NSSxVUy1NTixVUy1NTyxVUy1NUyxVUy1NVCxVUy1OQyxVUy1ORCxVUy1ORSxVUy1OSCxVUy1OSixVUy1OTSxVUy1OVixVUy1OWSxVUy1PSCxVUy1PSyxVUy1PUixVUy1QQSxVUy1SSSxVUy1TQyxVUy1TRCxVUy1UTixVUy1UWCxVUy1VVCxVUy1WQSxVUy1WVCxVUy1XQSxVUy1XSSxVUy1XVixVUy1XWQorMSxUdWUgMjUgSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyLFdlZCAyNiBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzMsVGh1IDI3IEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorNCxGcmkgMjggSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCis1LFNhdCAyOSBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzYsU3VuIDMwIEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorNyxNb24gMzEgSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCis4LFR1ZSAxIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorOSxXZWQgMiBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzEwLFRodSAzIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTEsRnJpIDQgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxMixTYXQgNSBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzEzLFN1biA2IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTQsTW9uIDcgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxNSxUdWUgOCBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzE2LFdlZCA5IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTcsVGh1IDEwIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTgsRnJpIDExIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTksU2F0IDEyIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjAsU3VuIDEzIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjEsTW9uIDE0IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjIsVHVlIDE1IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjMsV2VkIDE2IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjQsVGh1IDE3IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjUsRnJpIDE4IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjYsU2F0IDE5IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjcsU3VuIDIwIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjgsTW9uIDIxIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjksVHVlIDIyIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMzAsV2VkIDIzIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMzEsVGh1IDI0IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMzIsRnJpIDI1IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTSVN0YXRlc09ubHlfRkRfUmVmZXJlbmNlL2F1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwvaHVtYW4vRGVuc2l0eV8wLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0lTdGF0ZXNPbmx5X0ZEX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL2h1bWFuL0RlbnNpdHlfMC5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTEyZThiOAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0lTdGF0ZXNPbmx5X0ZEX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL2h1bWFuL0RlbnNpdHlfMC5jc3YKQEAgLTAsMCArMSwzMyBAQAoraXRlcmF0aW9uLHRpbWUsc3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vbm9kZS90cmFuc3BvcnQvcGlwZS9VU0EKKzEsVHVlIDI1IEphbiAxMSwwLjAKKzIsV2VkIDI2IEphbiAxMSwwLjAKKzMsVGh1IDI3IEphbiAxMSwwLjAKKzQsRnJpIDI4IEphbiAxMSwwLjAKKzUsU2F0IDI5IEphbiAxMSwwLjAKKzYsU3VuIDMwIEphbiAxMSwwLjAKKzcsTW9uIDMxIEphbiAxMSwwLjAKKzgsVHVlIDEgRmViIDExLDAuMAorOSxXZWQgMiBGZWIgMTEsMC4wCisxMCxUaHUgMyBGZWIgMTEsMC4wCisxMSxGcmkgNCBGZWIgMTEsMC4wCisxMixTYXQgNSBGZWIgMTEsMC4wCisxMyxTdW4gNiBGZWIgMTEsMC4wCisxNCxNb24gNyBGZWIgMTEsMC4wCisxNSxUdWUgOCBGZWIgMTEsMC4wCisxNixXZWQgOSBGZWIgMTEsMC4wCisxNyxUaHUgMTAgRmViIDExLDAuMAorMTgsRnJpIDExIEZlYiAxMSwwLjAKKzE5LFNhdCAxMiBGZWIgMTEsMC4wCisyMCxTdW4gMTMgRmViIDExLDAuMAorMjEsTW9uIDE0IEZlYiAxMSwwLjAKKzIyLFR1ZSAxNSBGZWIgMTEsMC4wCisyMyxXZWQgMTYgRmViIDExLDAuMAorMjQsVGh1IDE3IEZlYiAxMSwwLjAKKzI1LEZyaSAxOCBGZWIgMTEsMC4wCisyNixTYXQgMTkgRmViIDExLDAuMAorMjcsU3VuIDIwIEZlYiAxMSwwLjAKKzI4LE1vbiAyMSBGZWIgMTEsMC4wCisyOSxUdWUgMjIgRmViIDExLDAuMAorMzAsV2VkIDIzIEZlYiAxMSwwLjAKKzMxLFRodSAyNCBGZWIgMTEsMC4wCiszMixGcmkgMjUgRmViIDExLDAuMApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTSVN0YXRlc09ubHlfRkRfUmVmZXJlbmNlL2F1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwvaHVtYW4vRGVuc2l0eV8xLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0lTdGF0ZXNPbmx5X0ZEX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL2h1bWFuL0RlbnNpdHlfMS5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjQxOGI3MgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0lTdGF0ZXNPbmx5X0ZEX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL2h1bWFuL0RlbnNpdHlfMS5jc3YKQEAgLTAsMCArMSwzMyBAQAoraXRlcmF0aW9uLHRpbWUsVVMtQUssVVMtQUwsVVMtQVIsVVMtQVosVVMtQ0EsVVMtQ08sVVMtQ1QsVVMtREMsVVMtREUsVVMtRkwsVVMtR0EsVVMtSEksVVMtSUEsVVMtSUQsVVMtSUwsVVMtSU4sVVMtS1MsVVMtS1ksVVMtTEEsVVMtTUEsVVMtTUQsVVMtTUUsVVMtTUksVVMtTU4sVVMtTU8sVVMtTVMsVVMtTVQsVVMtTkMsVVMtTkQsVVMtTkUsVVMtTkgsVVMtTkosVVMtTk0sVVMtTlYsVVMtTlksVVMtT0gsVVMtT0ssVVMtT1IsVVMtUEEsVVMtUkksVVMtU0MsVVMtU0QsVVMtVE4sVVMtVFgsVVMtVVQsVVMtVkEsVVMtVlQsVVMtV0EsVVMtV0ksVVMtV1YsVVMtV1kKKzEsVHVlIDI1IEphbiAxMSwwLjk0NTIxNzc2OTM4MDAyMzMsODQuODM3NTI2NTMxNDAwMjQsNTAuMjcyMDgzMDI4ODU2MzMsNDUuMDA2MjE1MDA0OTYwNiwyMDYuOTE4NTM3ODY4ODAxMiw0MS4zMjExMDE3NzQxMDU3MzUsNjE0LjM1MzY0NjYzNDc4NDUsODM3MC43Nzg0NjA2Mzc5ODYsMzE0Ljc5MTA4MzMyOTY1MDg2LDI0My4wNjEwMjQzMzMwNTQxOCwxMzcuNzYxNjI3MDExNzY2MywxMTAuODM1MTY3NTY5NjA0OTIsNTIuMDAzNjE0NjE1MjAwNzUsMTUuNDgzNDQ4MTQzMTYzMiwyMTQuNDQyMzAyNTg1Mjk5MjIsMTY2Ljk2NDk2NDU5Mjc5NTg3LDMyLjY3NTI3MDQ2NDkzMjc4LDEwMC4wMjE0NTU2MDU3MDM4OCw4Ni4yMDc1OTc2NTE5OTI1OSw2MDEuNTQ5NTY1NzMzMTM3NSw0MjYuOTA1OTg5MzU0MTIyMTQsMzYuMDMwMzk3MzYxNTY3OCwxMDIuNzU4OTMwMjM0MDYzMzksNTYuNTg1NDk1MDcyNTcyMjYsODAuMjcwNjYwNDUxMjY5MDgsNTguNzM3Mjg3NjI5ODg1NDEsNi4xMzU2MTEyMjUwNjE2MTU1LDE0OS41NjQwMjU0NjI2MTUsOS4wODM0NzgxODI4OTEzNSwyMi4xMjI1NjYwMzUyNzcxNjMsMTMyLjE3MDQ3MzgyMTIyMjM3LDk2NC44MDQ1NTg5NTMzNjcyLDE0Ljk2MDU1NDE1MzIwNDcwMiwxOC4wNzM4NDM3NzMyNTM2MjUsMzQ3LjgzNDQ2MzY3MDM1NzEsMjUzLjI3NzUzMTAxNTEyNzc1LDQ5LjM2Njg1NzcxMTE5Mzk1LDM0Ljc3NzE1NzM3NTY3ODc5LDI2Ni42NTkyMTE4NTA4MTIyLDY3OC41MDE2NjY2MTI3MzEsMTI1LjI5NjI4MTcyMjE2Mjg5LDkuNzg4MzYwNDQwMTYwMDc1LDEzNC45OTg2MTMwNjQ0MzQ3Miw3Ny42MzcwNDA1MDA1MDkzLDI2LjMwMzg4NDI4MjAzMzA5NiwxNjUuNDg1NjQzMjE0ODM1MTQsNjMuMzI1NDE0NTQwNDg0NjUsODIuNjY2OTExMDgxMTc3OTcsODEuODkwODkzNDY3OTA0NzMsNzQuNjMzMTc4MzcyMzgxNzQsNS4wNDgxOTU3NzE2MjkyMQorMixXZWQgMjYgSmFuIDExLDAuOTQ1MjE3NzY5MzgwMDIzMyw4NC44Mzc1MjY1MzE0MDAyNCw1MC4yNzIwODMwMjg4NTYzMyw0NS4wMDYyMTUwMDQ5NjA2LDIwNi45MTg1Mzc4Njg4MDEyLDQxLjMyMTEwMTc3NDEwNTczNSw2MTQuMzUzNjQ2NjM0Nzg0NSw4MzcwLjc3ODQ2MDYzNzk4NiwzMTQuNzkxMDgzMzI5NjUwODYsMjQzLjA2MTAyNDMzMzA1NDE4LDEzNy43NjE2MjcwMTE3NjYzLDExMC44MzUxNjc1Njk2MDQ5Miw1Mi4wMDM2MTQ2MTUyMDA3NSwxNS40ODM0NDgxNDMxNjMyLDIxNC40NDIzMDI1ODUyOTkyMiwxNjYuOTY0OTY0NTkyNzk1ODcsMzIuNjc1MjcwNDY0OTMyNzgsMTAwLjAyMTQ1NTYwNTcwMzg4LDg2LjIwNzU5NzY1MTk5MjU5LDYwMS41NDk1NjU3MzMxMzc1LDQyNi45MDU5ODkzNTQxMjIxNCwzNi4wMzAzOTczNjE1Njc4LDEwMi43NTg5MzAyMzQwNjMzOSw1Ni41ODU0OTUwNzI1NzIyNiw4MC4yNzA2NjA0NTEyNjkwOCw1OC43MzcyODc2Mjk4ODU0MSw2LjEzNTYxMTIyNTA2MTYxNTUsMTQ5LjU2NDAyNTQ2MjYxNSw5LjA4MzQ3ODE4Mjg5MTM1LDIyLjEyMjU2NjAzNTI3NzE2MywxMzIuMTcwNDczODIxMjIyMzcsOTY0LjgwNDU1ODk1MzM2NzIsMTQuOTYwNTU0MTUzMjA0NzAyLDE4LjA3Mzg0Mzc3MzI1MzYyNSwzNDcuODM0NDYzNjcwMzU3MSwyNTMuMjc3NTMxMDE1MTI3NzUsNDkuMzY2ODU3NzExMTkzOTUsMzQuNzc3MTU3Mzc1Njc4NzksMjY2LjY1OTIxMTg1MDgxMjIsNjc4LjUwMTY2NjYxMjczMSwxMjUuMjk2MjgxNzIyMTYyODksOS43ODgzNjA0NDAxNjAwNzUsMTM0Ljk5ODYxMzA2NDQzNDcyLDc3LjYzNzA0MDUwMDUwOTMsMjYuMzAzODg0MjgyMDMzMDk2LDE2NS40ODU2NDMyMTQ4MzUxNCw2My4zMjU0MTQ1NDA0ODQ2NSw4Mi42NjY5MTEwODExNzc5Nyw4MS44OTA4OTM0Njc5MDQ3Myw3NC42MzMxNzgzNzIzODE3NCw1LjA0ODE5NTc3MTYyOTIxCiszLFRodSAyNyBKYW4gMTEsMC45NDUyMTc3NjkzODAwMjMzLDg0LjgzNzUyNjUzMTQwMDI0LDUwLjI3MjA4MzAyODg1NjMzLDQ1LjAwNjIxNTAwNDk2MDYsMjA2LjkxODUzNzg2ODgwMTIsNDEuMzIxMTAxNzc0MTA1NzM1LDYxNC4zNTM2NDY2MzQ3ODQ1LDgzNzAuNzc4NDYwNjM3OTg2LDMxNC43OTEwODMzMjk2NTA4NiwyNDMuMDYxMDI0MzMzMDU0MTgsMTM3Ljc2MTYyNzAxMTc2NjMsMTEwLjgzNTE2NzU2OTYwNDkyLDUyLjAwMzYxNDYxNTIwMDc1LDE1LjQ4MzQ0ODE0MzE2MzIsMjE0LjQ0MjMwMjU4NTI5OTIyLDE2Ni45NjQ5NjQ1OTI3OTU4NywzMi42NzUyNzA0NjQ5MzI3OCwxMDAuMDIxNDU1NjA1NzAzODgsODYuMjA3NTk3NjUxOTkyNTksNjAxLjU0OTU2NTczMzEzNzUsNDI2LjkwNTk4OTM1NDEyMjE0LDM2LjAzMDM5NzM2MTU2NzgsMTAyLjc1ODkzMDIzNDA2MzM5LDU2LjU4NTQ5NTA3MjU3MjI2LDgwLjI3MDY2MDQ1MTI2OTA4LDU4LjczNzI4NzYyOTg4NTQxLDYuMTM1NjExMjI1MDYxNjE1NSwxNDkuNTY0MDI1NDYyNjE1LDkuMDgzNDc4MTgyODkxMzUsMjIuMTIyNTY2MDM1Mjc3MTYzLDEzMi4xNzA0NzM4MjEyMjIzNyw5NjQuODA0NTU4OTUzMzY3MiwxNC45NjA1NTQxNTMyMDQ3MDIsMTguMDczODQzNzczMjUzNjI1LDM0Ny44MzQ0NjM2NzAzNTcxLDI1My4yNzc1MzEwMTUxMjc3NSw0OS4zNjY4NTc3MTExOTM5NSwzNC43NzcxNTczNzU2Nzg3OSwyNjYuNjU5MjExODUwODEyMiw2NzguNTAxNjY2NjEyNzMxLDEyNS4yOTYyODE3MjIxNjI4OSw5Ljc4ODM2MDQ0MDE2MDA3NSwxMzQuOTk4NjEzMDY0NDM0NzIsNzcuNjM3MDQwNTAwNTA5MywyNi4zMDM4ODQyODIwMzMwOTYsMTY1LjQ4NTY0MzIxNDgzNTE0LDYzLjMyNTQxNDU0MDQ4NDY1LDgyLjY2NjkxMTA4MTE3Nzk3LDgxLjg5MDg5MzQ2NzkwNDczLDc0LjYzMzE3ODM3MjM4MTc0LDUuMDQ4MTk1NzcxNjI5MjEKKzQsRnJpIDI4IEphbiAxMSwwLjk0NTIxNzc2OTM4MDAyMzMsODQuODM3NTI2NTMxNDAwMjQsNTAuMjcyMDgzMDI4ODU2MzMsNDUuMDA2MjE1MDA0OTYwNiwyMDYuOTE4NTM3ODY4ODAxMiw0MS4zMjExMDE3NzQxMDU3MzUsNjE0LjM1MzY0NjYzNDc4NDUsODM3MC43Nzg0NjA2Mzc5ODYsMzE0Ljc5MTA4MzMyOTY1MDg2LDI0My4wNjEwMjQzMzMwNTQxOCwxMzcuNzYxNjI3MDExNzY2MywxMTAuODM1MTY3NTY5NjA0OTIsNTIuMDAzNjE0NjE1MjAwNzUsMTUuNDgzNDQ4MTQzMTYzMiwyMTQuNDQyMzAyNTg1Mjk5MjIsMTY2Ljk2NDk2NDU5Mjc5NTg3LDMyLjY3NTI3MDQ2NDkzMjc4LDEwMC4wMjE0NTU2MDU3MDM4OCw4Ni4yMDc1OTc2NTE5OTI1OSw2MDEuNTQ5NTY1NzMzMTM3NSw0MjYuOTA1OTg5MzU0MTIyMTQsMzYuMDMwMzk3MzYxNTY3OCwxMDIuNzU4OTMwMjM0MDYzMzksNTYuNTg1NDk1MDcyNTcyMjYsODAuMjcwNjYwNDUxMjY5MDgsNTguNzM3Mjg3NjI5ODg1NDEsNi4xMzU2MTEyMjUwNjE2MTU1LDE0OS41NjQwMjU0NjI2MTUsOS4wODM0NzgxODI4OTEzNSwyMi4xMjI1NjYwMzUyNzcxNjMsMTMyLjE3MDQ3MzgyMTIyMjM3LDk2NC44MDQ1NTg5NTMzNjcyLDE0Ljk2MDU1NDE1MzIwNDcwMiwxOC4wNzM4NDM3NzMyNTM2MjUsMzQ3LjgzNDQ2MzY3MDM1NzEsMjUzLjI3NzUzMTAxNTEyNzc1LDQ5LjM2Njg1NzcxMTE5Mzk1LDM0Ljc3NzE1NzM3NTY3ODc5LDI2Ni42NTkyMTE4NTA4MTIyLDY3OC41MDE2NjY2MTI3MzEsMTI1LjI5NjI4MTcyMjE2Mjg5LDkuNzg4MzYwNDQwMTYwMDc1LDEzNC45OTg2MTMwNjQ0MzQ3Miw3Ny42MzcwNDA1MDA1MDkzLDI2LjMwMzg4NDI4MjAzMzA5NiwxNjUuNDg1NjQzMjE0ODM1MTQsNjMuMzI1NDE0NTQwNDg0NjUsODIuNjY2OTExMDgxMTc3OTcsODEuODkwODkzNDY3OTA0NzMsNzQuNjMzMTc4MzcyMzgxNzQsNS4wNDgxOTU3NzE2MjkyMQorNSxTYXQgMjkgSmFuIDExLDAuOTQ1MjE3NzY5MzgwMDIzMyw4NC44Mzc1MjY1MzE0MDAyNCw1MC4yNzIwODMwMjg4NTYzMyw0NS4wMDYyMTUwMDQ5NjA2LDIwNi45MTg1Mzc4Njg4MDEyLDQxLjMyMTEwMTc3NDEwNTczNSw2MTQuMzUzNjQ2NjM0Nzg0NSw4MzcwLjc3ODQ2MDYzNzk4NiwzMTQuNzkxMDgzMzI5NjUwODYsMjQzLjA2MTAyNDMzMzA1NDE4LDEzNy43NjE2MjcwMTE3NjYzLDExMC44MzUxNjc1Njk2MDQ5Miw1Mi4wMDM2MTQ2MTUyMDA3NSwxNS40ODM0NDgxNDMxNjMyLDIxNC40NDIzMDI1ODUyOTkyMiwxNjYuOTY0OTY0NTkyNzk1ODcsMzIuNjc1MjcwNDY0OTMyNzgsMTAwLjAyMTQ1NTYwNTcwMzg4LDg2LjIwNzU5NzY1MTk5MjU5LDYwMS41NDk1NjU3MzMxMzc1LDQyNi45MDU5ODkzNTQxMjIxNCwzNi4wMzAzOTczNjE1Njc4LDEwMi43NTg5MzAyMzQwNjMzOSw1Ni41ODU0OTUwNzI1NzIyNiw4MC4yNzA2NjA0NTEyNjkwOCw1OC43MzcyODc2Mjk4ODU0MSw2LjEzNTYxMTIyNTA2MTYxNTUsMTQ5LjU2NDAyNTQ2MjYxNSw5LjA4MzQ3ODE4Mjg5MTM1LDIyLjEyMjU2NjAzNTI3NzE2MywxMzIuMTcwNDczODIxMjIyMzcsOTY0LjgwNDU1ODk1MzM2NzIsMTQuOTYwNTU0MTUzMjA0NzAyLDE4LjA3Mzg0Mzc3MzI1MzYyNSwzNDcuODM0NDYzNjcwMzU3MSwyNTMuMjc3NTMxMDE1MTI3NzUsNDkuMzY2ODU3NzExMTkzOTUsMzQuNzc3MTU3Mzc1Njc4NzksMjY2LjY1OTIxMTg1MDgxMjIsNjc4LjUwMTY2NjYxMjczMSwxMjUuMjk2MjgxNzIyMTYyODksOS43ODgzNjA0NDAxNjAwNzUsMTM0Ljk5ODYxMzA2NDQzNDcyLDc3LjYzNzA0MDUwMDUwOTMsMjYuMzAzODg0MjgyMDMzMDk2LDE2NS40ODU2NDMyMTQ4MzUxNCw2My4zMjU0MTQ1NDA0ODQ2NSw4Mi42NjY5MTEwODExNzc5Nyw4MS44OTA4OTM0Njc5MDQ3Myw3NC42MzMxNzgzNzIzODE3NCw1LjA0ODE5NTc3MTYyOTIxCis2LFN1biAzMCBKYW4gMTEsMC45NDUyMTc3NjkzODAwMjMzLDg0LjgzNzUyNjUzMTQwMDI0LDUwLjI3MjA4MzAyODg1NjMzLDQ1LjAwNjIxNTAwNDk2MDYsMjA2LjkxODUzNzg2ODgwMTIsNDEuMzIxMTAxNzc0MTA1NzM1LDYxNC4zNTM2NDY2MzQ3ODQ1LDgzNzAuNzc4NDYwNjM3OTg2LDMxNC43OTEwODMzMjk2NTA4NiwyNDMuMDYxMDI0MzMzMDU0MTgsMTM3Ljc2MTYyNzAxMTc2NjMsMTEwLjgzNTE2NzU2OTYwNDkyLDUyLjAwMzYxNDYxNTIwMDc1LDE1LjQ4MzQ0ODE0MzE2MzIsMjE0LjQ0MjMwMjU4NTI5OTIyLDE2Ni45NjQ5NjQ1OTI3OTU4NywzMi42NzUyNzA0NjQ5MzI3OCwxMDAuMDIxNDU1NjA1NzAzODgsODYuMjA3NTk3NjUxOTkyNTksNjAxLjU0OTU2NTczMzEzNzUsNDI2LjkwNTk4OTM1NDEyMjE0LDM2LjAzMDM5NzM2MTU2NzgsMTAyLjc1ODkzMDIzNDA2MzM5LDU2LjU4NTQ5NTA3MjU3MjI2LDgwLjI3MDY2MDQ1MTI2OTA4LDU4LjczNzI4NzYyOTg4NTQxLDYuMTM1NjExMjI1MDYxNjE1NSwxNDkuNTY0MDI1NDYyNjE1LDkuMDgzNDc4MTgyODkxMzUsMjIuMTIyNTY2MDM1Mjc3MTYzLDEzMi4xNzA0NzM4MjEyMjIzNyw5NjQuODA0NTU4OTUzMzY3MiwxNC45NjA1NTQxNTMyMDQ3MDIsMTguMDczODQzNzczMjUzNjI1LDM0Ny44MzQ0NjM2NzAzNTcxLDI1My4yNzc1MzEwMTUxMjc3NSw0OS4zNjY4NTc3MTExOTM5NSwzNC43NzcxNTczNzU2Nzg3OSwyNjYuNjU5MjExODUwODEyMiw2NzguNTAxNjY2NjEyNzMxLDEyNS4yOTYyODE3MjIxNjI4OSw5Ljc4ODM2MDQ0MDE2MDA3NSwxMzQuOTk4NjEzMDY0NDM0NzIsNzcuNjM3MDQwNTAwNTA5MywyNi4zMDM4ODQyODIwMzMwOTYsMTY1LjQ4NTY0MzIxNDgzNTE0LDYzLjMyNTQxNDU0MDQ4NDY1LDgyLjY2NjkxMTA4MTE3Nzk3LDgxLjg5MDg5MzQ2NzkwNDczLDc0LjYzMzE3ODM3MjM4MTc0LDUuMDQ4MTk1NzcxNjI5MjEKKzcsTW9uIDMxIEphbiAxMSwwLjk0NTIxNzc2OTM4MDAyMzMsODQuODM3NTI2NTMxNDAwMjQsNTAuMjcyMDgzMDI4ODU2MzMsNDUuMDA2MjE1MDA0OTYwNiwyMDYuOTE4NTM3ODY4ODAxMiw0MS4zMjExMDE3NzQxMDU3MzUsNjE0LjM1MzY0NjYzNDc4NDUsODM3MC43Nzg0NjA2Mzc5ODYsMzE0Ljc5MTA4MzMyOTY1MDg2LDI0My4wNjEwMjQzMzMwNTQxOCwxMzcuNzYxNjI3MDExNzY2MywxMTAuODM1MTY3NTY5NjA0OTIsNTIuMDAzNjE0NjE1MjAwNzUsMTUuNDgzNDQ4MTQzMTYzMiwyMTQuNDQyMzAyNTg1Mjk5MjIsMTY2Ljk2NDk2NDU5Mjc5NTg3LDMyLjY3NTI3MDQ2NDkzMjc4LDEwMC4wMjE0NTU2MDU3MDM4OCw4Ni4yMDc1OTc2NTE5OTI1OSw2MDEuNTQ5NTY1NzMzMTM3NSw0MjYuOTA1OTg5MzU0MTIyMTQsMzYuMDMwMzk3MzYxNTY3OCwxMDIuNzU4OTMwMjM0MDYzMzksNTYuNTg1NDk1MDcyNTcyMjYsODAuMjcwNjYwNDUxMjY5MDgsNTguNzM3Mjg3NjI5ODg1NDEsNi4xMzU2MTEyMjUwNjE2MTU1LDE0OS41NjQwMjU0NjI2MTUsOS4wODM0NzgxODI4OTEzNSwyMi4xMjI1NjYwMzUyNzcxNjMsMTMyLjE3MDQ3MzgyMTIyMjM3LDk2NC44MDQ1NTg5NTMzNjcyLDE0Ljk2MDU1NDE1MzIwNDcwMiwxOC4wNzM4NDM3NzMyNTM2MjUsMzQ3LjgzNDQ2MzY3MDM1NzEsMjUzLjI3NzUzMTAxNTEyNzc1LDQ5LjM2Njg1NzcxMTE5Mzk1LDM0Ljc3NzE1NzM3NTY3ODc5LDI2Ni42NTkyMTE4NTA4MTIyLDY3OC41MDE2NjY2MTI3MzEsMTI1LjI5NjI4MTcyMjE2Mjg5LDkuNzg4MzYwNDQwMTYwMDc1LDEzNC45OTg2MTMwNjQ0MzQ3Miw3Ny42MzcwNDA1MDA1MDkzLDI2LjMwMzg4NDI4MjAzMzA5NiwxNjUuNDg1NjQzMjE0ODM1MTQsNjMuMzI1NDE0NTQwNDg0NjUsODIuNjY2OTExMDgxMTc3OTcsODEuODkwODkzNDY3OTA0NzMsNzQuNjMzMTc4MzcyMzgxNzQsNS4wNDgxOTU3NzE2MjkyMQorOCxUdWUgMSBGZWIgMTEsMC45NDUyMTc3NjkzODAwMjMzLDg0LjgzNzUyNjUzMTQwMDI0LDUwLjI3MjA4MzAyODg1NjMzLDQ1LjAwNjIxNTAwNDk2MDYsMjA2LjkxODUzNzg2ODgwMTIsNDEuMzIxMTAxNzc0MTA1NzM1LDYxNC4zNTM2NDY2MzQ3ODQ1LDgzNzAuNzc4NDYwNjM3OTg2LDMxNC43OTEwODMzMjk2NTA4NiwyNDMuMDYxMDI0MzMzMDU0MTgsMTM3Ljc2MTYyNzAxMTc2NjMsMTEwLjgzNTE2NzU2OTYwNDkyLDUyLjAwMzYxNDYxNTIwMDc1LDE1LjQ4MzQ0ODE0MzE2MzIsMjE0LjQ0MjMwMjU4NTI5OTIyLDE2Ni45NjQ5NjQ1OTI3OTU4NywzMi42NzUyNzA0NjQ5MzI3OCwxMDAuMDIxNDU1NjA1NzAzODgsODYuMjA3NTk3NjUxOTkyNTksNjAxLjU0OTU2NTczMzEzNzUsNDI2LjkwNTk4OTM1NDEyMjE0LDM2LjAzMDM5NzM2MTU2NzgsMTAyLjc1ODkzMDIzNDA2MzM5LDU2LjU4NTQ5NTA3MjU3MjI2LDgwLjI3MDY2MDQ1MTI2OTA4LDU4LjczNzI4NzYyOTg4NTQxLDYuMTM1NjExMjI1MDYxNjE1NSwxNDkuNTY0MDI1NDYyNjE1LDkuMDgzNDc4MTgyODkxMzUsMjIuMTIyNTY2MDM1Mjc3MTYzLDEzMi4xNzA0NzM4MjEyMjIzNyw5NjQuODA0NTU4OTUzMzY3MiwxNC45NjA1NTQxNTMyMDQ3MDIsMTguMDczODQzNzczMjUzNjI1LDM0Ny44MzQ0NjM2NzAzNTcxLDI1My4yNzc1MzEwMTUxMjc3NSw0OS4zNjY4NTc3MTExOTM5NSwzNC43NzcxNTczNzU2Nzg3OSwyNjYuNjU5MjExODUwODEyMiw2NzguNTAxNjY2NjEyNzMxLDEyNS4yOTYyODE3MjIxNjI4OSw5Ljc4ODM2MDQ0MDE2MDA3NSwxMzQuOTk4NjEzMDY0NDM0NzIsNzcuNjM3MDQwNTAwNTA5MywyNi4zMDM4ODQyODIwMzMwOTYsMTY1LjQ4NTY0MzIxNDgzNTE0LDYzLjMyNTQxNDU0MDQ4NDY1LDgyLjY2NjkxMTA4MTE3Nzk3LDgxLjg5MDg5MzQ2NzkwNDczLDc0LjYzMzE3ODM3MjM4MTc0LDUuMDQ4MTk1NzcxNjI5MjEKKzksV2VkIDIgRmViIDExLDAuOTQ1MjE3NzY5MzgwMDIzMyw4NC44Mzc1MjY1MzE0MDAyNCw1MC4yNzIwODMwMjg4NTYzMyw0NS4wMDYyMTUwMDQ5NjA2LDIwNi45MTg1Mzc4Njg4MDEyLDQxLjMyMTEwMTc3NDEwNTczNSw2MTQuMzUzNjQ2NjM0Nzg0NSw4MzcwLjc3ODQ2MDYzNzk4NiwzMTQuNzkxMDgzMzI5NjUwODYsMjQzLjA2MTAyNDMzMzA1NDE4LDEzNy43NjE2MjcwMTE3NjYzLDExMC44MzUxNjc1Njk2MDQ5Miw1Mi4wMDM2MTQ2MTUyMDA3NSwxNS40ODM0NDgxNDMxNjMyLDIxNC40NDIzMDI1ODUyOTkyMiwxNjYuOTY0OTY0NTkyNzk1ODcsMzIuNjc1MjcwNDY0OTMyNzgsMTAwLjAyMTQ1NTYwNTcwMzg4LDg2LjIwNzU5NzY1MTk5MjU5LDYwMS41NDk1NjU3MzMxMzc1LDQyNi45MDU5ODkzNTQxMjIxNCwzNi4wMzAzOTczNjE1Njc4LDEwMi43NTg5MzAyMzQwNjMzOSw1Ni41ODU0OTUwNzI1NzIyNiw4MC4yNzA2NjA0NTEyNjkwOCw1OC43MzcyODc2Mjk4ODU0MSw2LjEzNTYxMTIyNTA2MTYxNTUsMTQ5LjU2NDAyNTQ2MjYxNSw5LjA4MzQ3ODE4Mjg5MTM1LDIyLjEyMjU2NjAzNTI3NzE2MywxMzIuMTcwNDczODIxMjIyMzcsOTY0LjgwNDU1ODk1MzM2NzIsMTQuOTYwNTU0MTUzMjA0NzAyLDE4LjA3Mzg0Mzc3MzI1MzYyNSwzNDcuODM0NDYzNjcwMzU3MSwyNTMuMjc3NTMxMDE1MTI3NzUsNDkuMzY2ODU3NzExMTkzOTUsMzQuNzc3MTU3Mzc1Njc4NzksMjY2LjY1OTIxMTg1MDgxMjIsNjc4LjUwMTY2NjYxMjczMSwxMjUuMjk2MjgxNzIyMTYyODksOS43ODgzNjA0NDAxNjAwNzUsMTM0Ljk5ODYxMzA2NDQzNDcyLDc3LjYzNzA0MDUwMDUwOTMsMjYuMzAzODg0MjgyMDMzMDk2LDE2NS40ODU2NDMyMTQ4MzUxNCw2My4zMjU0MTQ1NDA0ODQ2NSw4Mi42NjY5MTEwODExNzc5Nyw4MS44OTA4OTM0Njc5MDQ3Myw3NC42MzMxNzgzNzIzODE3NCw1LjA0ODE5NTc3MTYyOTIxCisxMCxUaHUgMyBGZWIgMTEsMC45NDUyMTc3NjkzODAwMjMzLDg0LjgzNzUyNjUzMTQwMDI0LDUwLjI3MjA4MzAyODg1NjMzLDQ1LjAwNjIxNTAwNDk2MDYsMjA2LjkxODUzNzg2ODgwMTIsNDEuMzIxMTAxNzc0MTA1NzM1LDYxNC4zNTM2NDY2MzQ3ODQ1LDgzNzAuNzc4NDYwNjM3OTg2LDMxNC43OTEwODMzMjk2NTA4NiwyNDMuMDYxMDI0MzMzMDU0MTgsMTM3Ljc2MTYyNzAxMTc2NjMsMTEwLjgzNTE2NzU2OTYwNDkyLDUyLjAwMzYxNDYxNTIwMDc1LDE1LjQ4MzQ0ODE0MzE2MzIsMjE0LjQ0MjMwMjU4NTI5OTIyLDE2Ni45NjQ5NjQ1OTI3OTU4NywzMi42NzUyNzA0NjQ5MzI3OCwxMDAuMDIxNDU1NjA1NzAzODgsODYuMjA3NTk3NjUxOTkyNTksNjAxLjU0OTU2NTczMzEzNzUsNDI2LjkwNTk4OTM1NDEyMjE0LDM2LjAzMDM5NzM2MTU2NzgsMTAyLjc1ODkzMDIzNDA2MzM5LDU2LjU4NTQ5NTA3MjU3MjI2LDgwLjI3MDY2MDQ1MTI2OTA4LDU4LjczNzI4NzYyOTg4NTQxLDYuMTM1NjExMjI1MDYxNjE1NSwxNDkuNTY0MDI1NDYyNjE1LDkuMDgzNDc4MTgyODkxMzUsMjIuMTIyNTY2MDM1Mjc3MTYzLDEzMi4xNzA0NzM4MjEyMjIzNyw5NjQuODA0NTU4OTUzMzY3MiwxNC45NjA1NTQxNTMyMDQ3MDIsMTguMDczODQzNzczMjUzNjI1LDM0Ny44MzQ0NjM2NzAzNTcxLDI1My4yNzc1MzEwMTUxMjc3NSw0OS4zNjY4NTc3MTExOTM5NSwzNC43NzcxNTczNzU2Nzg3OSwyNjYuNjU5MjExODUwODEyMiw2NzguNTAxNjY2NjEyNzMxLDEyNS4yOTYyODE3MjIxNjI4OSw5Ljc4ODM2MDQ0MDE2MDA3NSwxMzQuOTk4NjEzMDY0NDM0NzIsNzcuNjM3MDQwNTAwNTA5MywyNi4zMDM4ODQyODIwMzMwOTYsMTY1LjQ4NTY0MzIxNDgzNTE0LDYzLjMyNTQxNDU0MDQ4NDY1LDgyLjY2NjkxMTA4MTE3Nzk3LDgxLjg5MDg5MzQ2NzkwNDczLDc0LjYzMzE3ODM3MjM4MTc0LDUuMDQ4MTk1NzcxNjI5MjEKKzExLEZyaSA0IEZlYiAxMSwwLjk0NTIxNzc2OTM4MDAyMzMsODQuODM3NTI2NTMxNDAwMjQsNTAuMjcyMDgzMDI4ODU2MzMsNDUuMDA2MjE1MDA0OTYwNiwyMDYuOTE4NTM3ODY4ODAxMiw0MS4zMjExMDE3NzQxMDU3MzUsNjE0LjM1MzY0NjYzNDc4NDUsODM3MC43Nzg0NjA2Mzc5ODYsMzE0Ljc5MTA4MzMyOTY1MDg2LDI0My4wNjEwMjQzMzMwNTQxOCwxMzcuNzYxNjI3MDExNzY2MywxMTAuODM1MTY3NTY5NjA0OTIsNTIuMDAzNjE0NjE1MjAwNzUsMTUuNDgzNDQ4MTQzMTYzMiwyMTQuNDQyMzAyNTg1Mjk5MjIsMTY2Ljk2NDk2NDU5Mjc5NTg3LDMyLjY3NTI3MDQ2NDkzMjc4LDEwMC4wMjE0NTU2MDU3MDM4OCw4Ni4yMDc1OTc2NTE5OTI1OSw2MDEuNTQ5NTY1NzMzMTM3NSw0MjYuOTA1OTg5MzU0MTIyMTQsMzYuMDMwMzk3MzYxNTY3OCwxMDIuNzU4OTMwMjM0MDYzMzksNTYuNTg1NDk1MDcyNTcyMjYsODAuMjcwNjYwNDUxMjY5MDgsNTguNzM3Mjg3NjI5ODg1NDEsNi4xMzU2MTEyMjUwNjE2MTU1LDE0OS41NjQwMjU0NjI2MTUsOS4wODM0NzgxODI4OTEzNSwyMi4xMjI1NjYwMzUyNzcxNjMsMTMyLjE3MDQ3MzgyMTIyMjM3LDk2NC44MDQ1NTg5NTMzNjcyLDE0Ljk2MDU1NDE1MzIwNDcwMiwxOC4wNzM4NDM3NzMyNTM2MjUsMzQ3LjgzNDQ2MzY3MDM1NzEsMjUzLjI3NzUzMTAxNTEyNzc1LDQ5LjM2Njg1NzcxMTE5Mzk1LDM0Ljc3NzE1NzM3NTY3ODc5LDI2Ni42NTkyMTE4NTA4MTIyLDY3OC41MDE2NjY2MTI3MzEsMTI1LjI5NjI4MTcyMjE2Mjg5LDkuNzg4MzYwNDQwMTYwMDc1LDEzNC45OTg2MTMwNjQ0MzQ3Miw3Ny42MzcwNDA1MDA1MDkzLDI2LjMwMzg4NDI4MjAzMzA5NiwxNjUuNDg1NjQzMjE0ODM1MTQsNjMuMzI1NDE0NTQwNDg0NjUsODIuNjY2OTExMDgxMTc3OTcsODEuODkwODkzNDY3OTA0NzMsNzQuNjMzMTc4MzcyMzgxNzQsNS4wNDgxOTU3NzE2MjkyMQorMTIsU2F0IDUgRmViIDExLDAuOTQ1MjE3NzY5MzgwMDIzMyw4NC44Mzc1MjY1MzE0MDAyNCw1MC4yNzIwODMwMjg4NTYzMyw0NS4wMDYyMTUwMDQ5NjA2LDIwNi45MTg1Mzc4Njg4MDEyLDQxLjMyMTEwMTc3NDEwNTczNSw2MTQuMzUzNjQ2NjM0Nzg0NSw4MzcwLjc3ODQ2MDYzNzk4NiwzMTQuNzkxMDgzMzI5NjUwODYsMjQzLjA2MTAyNDMzMzA1NDE4LDEzNy43NjE2MjcwMTE3NjYzLDExMC44MzUxNjc1Njk2MDQ5Miw1Mi4wMDM2MTQ2MTUyMDA3NSwxNS40ODM0NDgxNDMxNjMyLDIxNC40NDIzMDI1ODUyOTkyMiwxNjYuOTY0OTY0NTkyNzk1ODcsMzIuNjc1MjcwNDY0OTMyNzgsMTAwLjAyMTQ1NTYwNTcwMzg4LDg2LjIwNzU5NzY1MTk5MjU5LDYwMS41NDk1NjU3MzMxMzc1LDQyNi45MDU5ODkzNTQxMjIxNCwzNi4wMzAzOTczNjE1Njc4LDEwMi43NTg5MzAyMzQwNjMzOSw1Ni41ODU0OTUwNzI1NzIyNiw4MC4yNzA2NjA0NTEyNjkwOCw1OC43MzcyODc2Mjk4ODU0MSw2LjEzNTYxMTIyNTA2MTYxNTUsMTQ5LjU2NDAyNTQ2MjYxNSw5LjA4MzQ3ODE4Mjg5MTM1LDIyLjEyMjU2NjAzNTI3NzE2MywxMzIuMTcwNDczODIxMjIyMzcsOTY0LjgwNDU1ODk1MzM2NzIsMTQuOTYwNTU0MTUzMjA0NzAyLDE4LjA3Mzg0Mzc3MzI1MzYyNSwzNDcuODM0NDYzNjcwMzU3MSwyNTMuMjc3NTMxMDE1MTI3NzUsNDkuMzY2ODU3NzExMTkzOTUsMzQuNzc3MTU3Mzc1Njc4NzksMjY2LjY1OTIxMTg1MDgxMjIsNjc4LjUwMTY2NjYxMjczMSwxMjUuMjk2MjgxNzIyMTYyODksOS43ODgzNjA0NDAxNjAwNzUsMTM0Ljk5ODYxMzA2NDQzNDcyLDc3LjYzNzA0MDUwMDUwOTMsMjYuMzAzODg0MjgyMDMzMDk2LDE2NS40ODU2NDMyMTQ4MzUxNCw2My4zMjU0MTQ1NDA0ODQ2NSw4Mi42NjY5MTEwODExNzc5Nyw4MS44OTA4OTM0Njc5MDQ3Myw3NC42MzMxNzgzNzIzODE3NCw1LjA0ODE5NTc3MTYyOTIxCisxMyxTdW4gNiBGZWIgMTEsMC45NDUyMTc3NjkzODAwMjMzLDg0LjgzNzUyNjUzMTQwMDI0LDUwLjI3MjA4MzAyODg1NjMzLDQ1LjAwNjIxNTAwNDk2MDYsMjA2LjkxODUzNzg2ODgwMTIsNDEuMzIxMTAxNzc0MTA1NzM1LDYxNC4zNTM2NDY2MzQ3ODQ1LDgzNzAuNzc4NDYwNjM3OTg2LDMxNC43OTEwODMzMjk2NTA4NiwyNDMuMDYxMDI0MzMzMDU0MTgsMTM3Ljc2MTYyNzAxMTc2NjMsMTEwLjgzNTE2NzU2OTYwNDkyLDUyLjAwMzYxNDYxNTIwMDc1LDE1LjQ4MzQ0ODE0MzE2MzIsMjE0LjQ0MjMwMjU4NTI5OTIyLDE2Ni45NjQ5NjQ1OTI3OTU4NywzMi42NzUyNzA0NjQ5MzI3OCwxMDAuMDIxNDU1NjA1NzAzODgsODYuMjA3NTk3NjUxOTkyNTksNjAxLjU0OTU2NTczMzEzNzUsNDI2LjkwNTk4OTM1NDEyMjE0LDM2LjAzMDM5NzM2MTU2NzgsMTAyLjc1ODkzMDIzNDA2MzM5LDU2LjU4NTQ5NTA3MjU3MjI2LDgwLjI3MDY2MDQ1MTI2OTA4LDU4LjczNzI4NzYyOTg4NTQxLDYuMTM1NjExMjI1MDYxNjE1NSwxNDkuNTY0MDI1NDYyNjE1LDkuMDgzNDc4MTgyODkxMzUsMjIuMTIyNTY2MDM1Mjc3MTYzLDEzMi4xNzA0NzM4MjEyMjIzNyw5NjQuODA0NTU4OTUzMzY3MiwxNC45NjA1NTQxNTMyMDQ3MDIsMTguMDczODQzNzczMjUzNjI1LDM0Ny44MzQ0NjM2NzAzNTcxLDI1My4yNzc1MzEwMTUxMjc3NSw0OS4zNjY4NTc3MTExOTM5NSwzNC43NzcxNTczNzU2Nzg3OSwyNjYuNjU5MjExODUwODEyMiw2NzguNTAxNjY2NjEyNzMxLDEyNS4yOTYyODE3MjIxNjI4OSw5Ljc4ODM2MDQ0MDE2MDA3NSwxMzQuOTk4NjEzMDY0NDM0NzIsNzcuNjM3MDQwNTAwNTA5MywyNi4zMDM4ODQyODIwMzMwOTYsMTY1LjQ4NTY0MzIxNDgzNTE0LDYzLjMyNTQxNDU0MDQ4NDY1LDgyLjY2NjkxMTA4MTE3Nzk3LDgxLjg5MDg5MzQ2NzkwNDczLDc0LjYzMzE3ODM3MjM4MTc0LDUuMDQ4MTk1NzcxNjI5MjEKKzE0LE1vbiA3IEZlYiAxMSwwLjk0NTIxNzc2OTM4MDAyMzMsODQuODM3NTI2NTMxNDAwMjQsNTAuMjcyMDgzMDI4ODU2MzMsNDUuMDA2MjE1MDA0OTYwNiwyMDYuOTE4NTM3ODY4ODAxMiw0MS4zMjExMDE3NzQxMDU3MzUsNjE0LjM1MzY0NjYzNDc4NDUsODM3MC43Nzg0NjA2Mzc5ODYsMzE0Ljc5MTA4MzMyOTY1MDg2LDI0My4wNjEwMjQzMzMwNTQxOCwxMzcuNzYxNjI3MDExNzY2MywxMTAuODM1MTY3NTY5NjA0OTIsNTIuMDAzNjE0NjE1MjAwNzUsMTUuNDgzNDQ4MTQzMTYzMiwyMTQuNDQyMzAyNTg1Mjk5MjIsMTY2Ljk2NDk2NDU5Mjc5NTg3LDMyLjY3NTI3MDQ2NDkzMjc4LDEwMC4wMjE0NTU2MDU3MDM4OCw4Ni4yMDc1OTc2NTE5OTI1OSw2MDEuNTQ5NTY1NzMzMTM3NSw0MjYuOTA1OTg5MzU0MTIyMTQsMzYuMDMwMzk3MzYxNTY3OCwxMDIuNzU4OTMwMjM0MDYzMzksNTYuNTg1NDk1MDcyNTcyMjYsODAuMjcwNjYwNDUxMjY5MDgsNTguNzM3Mjg3NjI5ODg1NDEsNi4xMzU2MTEyMjUwNjE2MTU1LDE0OS41NjQwMjU0NjI2MTUsOS4wODM0NzgxODI4OTEzNSwyMi4xMjI1NjYwMzUyNzcxNjMsMTMyLjE3MDQ3MzgyMTIyMjM3LDk2NC44MDQ1NTg5NTMzNjcyLDE0Ljk2MDU1NDE1MzIwNDcwMiwxOC4wNzM4NDM3NzMyNTM2MjUsMzQ3LjgzNDQ2MzY3MDM1NzEsMjUzLjI3NzUzMTAxNTEyNzc1LDQ5LjM2Njg1NzcxMTE5Mzk1LDM0Ljc3NzE1NzM3NTY3ODc5LDI2Ni42NTkyMTE4NTA4MTIyLDY3OC41MDE2NjY2MTI3MzEsMTI1LjI5NjI4MTcyMjE2Mjg5LDkuNzg4MzYwNDQwMTYwMDc1LDEzNC45OTg2MTMwNjQ0MzQ3Miw3Ny42MzcwNDA1MDA1MDkzLDI2LjMwMzg4NDI4MjAzMzA5NiwxNjUuNDg1NjQzMjE0ODM1MTQsNjMuMzI1NDE0NTQwNDg0NjUsODIuNjY2OTExMDgxMTc3OTcsODEuODkwODkzNDY3OTA0NzMsNzQuNjMzMTc4MzcyMzgxNzQsNS4wNDgxOTU3NzE2MjkyMQorMTUsVHVlIDggRmViIDExLDAuOTQ1MjE3NzY5MzgwMDIzMyw4NC44Mzc1MjY1MzE0MDAyNCw1MC4yNzIwODMwMjg4NTYzMyw0NS4wMDYyMTUwMDQ5NjA2LDIwNi45MTg1Mzc4Njg4MDEyLDQxLjMyMTEwMTc3NDEwNTczNSw2MTQuMzUzNjQ2NjM0Nzg0NSw4MzcwLjc3ODQ2MDYzNzk4NiwzMTQuNzkxMDgzMzI5NjUwODYsMjQzLjA2MTAyNDMzMzA1NDE4LDEzNy43NjE2MjcwMTE3NjYzLDExMC44MzUxNjc1Njk2MDQ5Miw1Mi4wMDM2MTQ2MTUyMDA3NSwxNS40ODM0NDgxNDMxNjMyLDIxNC40NDIzMDI1ODUyOTkyMiwxNjYuOTY0OTY0NTkyNzk1ODcsMzIuNjc1MjcwNDY0OTMyNzgsMTAwLjAyMTQ1NTYwNTcwMzg4LDg2LjIwNzU5NzY1MTk5MjU5LDYwMS41NDk1NjU3MzMxMzc1LDQyNi45MDU5ODkzNTQxMjIxNCwzNi4wMzAzOTczNjE1Njc4LDEwMi43NTg5MzAyMzQwNjMzOSw1Ni41ODU0OTUwNzI1NzIyNiw4MC4yNzA2NjA0NTEyNjkwOCw1OC43MzcyODc2Mjk4ODU0MSw2LjEzNTYxMTIyNTA2MTYxNTUsMTQ5LjU2NDAyNTQ2MjYxNSw5LjA4MzQ3ODE4Mjg5MTM1LDIyLjEyMjU2NjAzNTI3NzE2MywxMzIuMTcwNDczODIxMjIyMzcsOTY0LjgwNDU1ODk1MzM2NzIsMTQuOTYwNTU0MTUzMjA0NzAyLDE4LjA3Mzg0Mzc3MzI1MzYyNSwzNDcuODM0NDYzNjcwMzU3MSwyNTMuMjc3NTMxMDE1MTI3NzUsNDkuMzY2ODU3NzExMTkzOTUsMzQuNzc3MTU3Mzc1Njc4NzksMjY2LjY1OTIxMTg1MDgxMjIsNjc4LjUwMTY2NjYxMjczMSwxMjUuMjk2MjgxNzIyMTYyODksOS43ODgzNjA0NDAxNjAwNzUsMTM0Ljk5ODYxMzA2NDQzNDcyLDc3LjYzNzA0MDUwMDUwOTMsMjYuMzAzODg0MjgyMDMzMDk2LDE2NS40ODU2NDMyMTQ4MzUxNCw2My4zMjU0MTQ1NDA0ODQ2NSw4Mi42NjY5MTEwODExNzc5Nyw4MS44OTA4OTM0Njc5MDQ3Myw3NC42MzMxNzgzNzIzODE3NCw1LjA0ODE5NTc3MTYyOTIxCisxNixXZWQgOSBGZWIgMTEsMC45NDUyMTc3NjkzODAwMjMzLDg0LjgzNzUyNjUzMTQwMDI0LDUwLjI3MjA4MzAyODg1NjMzLDQ1LjAwNjIxNTAwNDk2MDYsMjA2LjkxODUzNzg2ODgwMTIsNDEuMzIxMTAxNzc0MTA1NzM1LDYxNC4zNTM2NDY2MzQ3ODQ1LDgzNzAuNzc4NDYwNjM3OTg2LDMxNC43OTEwODMzMjk2NTA4NiwyNDMuMDYxMDI0MzMzMDU0MTgsMTM3Ljc2MTYyNzAxMTc2NjMsMTEwLjgzNTE2NzU2OTYwNDkyLDUyLjAwMzYxNDYxNTIwMDc1LDE1LjQ4MzQ0ODE0MzE2MzIsMjE0LjQ0MjMwMjU4NTI5OTIyLDE2Ni45NjQ5NjQ1OTI3OTU4NywzMi42NzUyNzA0NjQ5MzI3OCwxMDAuMDIxNDU1NjA1NzAzODgsODYuMjA3NTk3NjUxOTkyNTksNjAxLjU0OTU2NTczMzEzNzUsNDI2LjkwNTk4OTM1NDEyMjE0LDM2LjAzMDM5NzM2MTU2NzgsMTAyLjc1ODkzMDIzNDA2MzM5LDU2LjU4NTQ5NTA3MjU3MjI2LDgwLjI3MDY2MDQ1MTI2OTA4LDU4LjczNzI4NzYyOTg4NTQxLDYuMTM1NjExMjI1MDYxNjE1NSwxNDkuNTY0MDI1NDYyNjE1LDkuMDgzNDc4MTgyODkxMzUsMjIuMTIyNTY2MDM1Mjc3MTYzLDEzMi4xNzA0NzM4MjEyMjIzNyw5NjQuODA0NTU4OTUzMzY3MiwxNC45NjA1NTQxNTMyMDQ3MDIsMTguMDczODQzNzczMjUzNjI1LDM0Ny44MzQ0NjM2NzAzNTcxLDI1My4yNzc1MzEwMTUxMjc3NSw0OS4zNjY4NTc3MTExOTM5NSwzNC43NzcxNTczNzU2Nzg3OSwyNjYuNjU5MjExODUwODEyMiw2NzguNTAxNjY2NjEyNzMxLDEyNS4yOTYyODE3MjIxNjI4OSw5Ljc4ODM2MDQ0MDE2MDA3NSwxMzQuOTk4NjEzMDY0NDM0NzIsNzcuNjM3MDQwNTAwNTA5MywyNi4zMDM4ODQyODIwMzMwOTYsMTY1LjQ4NTY0MzIxNDgzNTE0LDYzLjMyNTQxNDU0MDQ4NDY1LDgyLjY2NjkxMTA4MTE3Nzk3LDgxLjg5MDg5MzQ2NzkwNDczLDc0LjYzMzE3ODM3MjM4MTc0LDUuMDQ4MTk1NzcxNjI5MjEKKzE3LFRodSAxMCBGZWIgMTEsMC45NDUyMTc3NjkzODAwMjMzLDg0LjgzNzUyNjUzMTQwMDI0LDUwLjI3MjA4MzAyODg1NjMzLDQ1LjAwNjIxNTAwNDk2MDYsMjA2LjkxODUzNzg2ODgwMTIsNDEuMzIxMTAxNzc0MTA1NzM1LDYxNC4zNTM2NDY2MzQ3ODQ1LDgzNzAuNzc4NDYwNjM3OTg2LDMxNC43OTEwODMzMjk2NTA4NiwyNDMuMDYxMDI0MzMzMDU0MTgsMTM3Ljc2MTYyNzAxMTc2NjMsMTEwLjgzNTE2NzU2OTYwNDkyLDUyLjAwMzYxNDYxNTIwMDc1LDE1LjQ4MzQ0ODE0MzE2MzIsMjE0LjQ0MjMwMjU4NTI5OTIyLDE2Ni45NjQ5NjQ1OTI3OTU4NywzMi42NzUyNzA0NjQ5MzI3OCwxMDAuMDIxNDU1NjA1NzAzODgsODYuMjA3NTk3NjUxOTkyNTksNjAxLjU0OTU2NTczMzEzNzUsNDI2LjkwNTk4OTM1NDEyMjE0LDM2LjAzMDM5NzM2MTU2NzgsMTAyLjc1ODkzMDIzNDA2MzM5LDU2LjU4NTQ5NTA3MjU3MjI2LDgwLjI3MDY2MDQ1MTI2OTA4LDU4LjczNzI4NzYyOTg4NTQxLDYuMTM1NjExMjI1MDYxNjE1NSwxNDkuNTY0MDI1NDYyNjE1LDkuMDgzNDc4MTgyODkxMzUsMjIuMTIyNTY2MDM1Mjc3MTYzLDEzMi4xNzA0NzM4MjEyMjIzNyw5NjQuODA0NTU4OTUzMzY3MiwxNC45NjA1NTQxNTMyMDQ3MDIsMTguMDczODQzNzczMjUzNjI1LDM0Ny44MzQ0NjM2NzAzNTcxLDI1My4yNzc1MzEwMTUxMjc3NSw0OS4zNjY4NTc3MTExOTM5NSwzNC43NzcxNTczNzU2Nzg3OSwyNjYuNjU5MjExODUwODEyMiw2NzguNTAxNjY2NjEyNzMxLDEyNS4yOTYyODE3MjIxNjI4OSw5Ljc4ODM2MDQ0MDE2MDA3NSwxMzQuOTk4NjEzMDY0NDM0NzIsNzcuNjM3MDQwNTAwNTA5MywyNi4zMDM4ODQyODIwMzMwOTYsMTY1LjQ4NTY0MzIxNDgzNTE0LDYzLjMyNTQxNDU0MDQ4NDY1LDgyLjY2NjkxMTA4MTE3Nzk3LDgxLjg5MDg5MzQ2NzkwNDczLDc0LjYzMzE3ODM3MjM4MTc0LDUuMDQ4MTk1NzcxNjI5MjEKKzE4LEZyaSAxMSBGZWIgMTEsMC45NDUyMTc3NjkzODAwMjMzLDg0LjgzNzUyNjUzMTQwMDI0LDUwLjI3MjA4MzAyODg1NjMzLDQ1LjAwNjIxNTAwNDk2MDYsMjA2LjkxODUzNzg2ODgwMTIsNDEuMzIxMTAxNzc0MTA1NzM1LDYxNC4zNTM2NDY2MzQ3ODQ1LDgzNzAuNzc4NDYwNjM3OTg2LDMxNC43OTEwODMzMjk2NTA4NiwyNDMuMDYxMDI0MzMzMDU0MTgsMTM3Ljc2MTYyNzAxMTc2NjMsMTEwLjgzNTE2NzU2OTYwNDkyLDUyLjAwMzYxNDYxNTIwMDc1LDE1LjQ4MzQ0ODE0MzE2MzIsMjE0LjQ0MjMwMjU4NTI5OTIyLDE2Ni45NjQ5NjQ1OTI3OTU4NywzMi42NzUyNzA0NjQ5MzI3OCwxMDAuMDIxNDU1NjA1NzAzODgsODYuMjA3NTk3NjUxOTkyNTksNjAxLjU0OTU2NTczMzEzNzUsNDI2LjkwNTk4OTM1NDEyMjE0LDM2LjAzMDM5NzM2MTU2NzgsMTAyLjc1ODkzMDIzNDA2MzM5LDU2LjU4NTQ5NTA3MjU3MjI2LDgwLjI3MDY2MDQ1MTI2OTA4LDU4LjczNzI4NzYyOTg4NTQxLDYuMTM1NjExMjI1MDYxNjE1NSwxNDkuNTY0MDI1NDYyNjE1LDkuMDgzNDc4MTgyODkxMzUsMjIuMTIyNTY2MDM1Mjc3MTYzLDEzMi4xNzA0NzM4MjEyMjIzNyw5NjQuODA0NTU4OTUzMzY3MiwxNC45NjA1NTQxNTMyMDQ3MDIsMTguMDczODQzNzczMjUzNjI1LDM0Ny44MzQ0NjM2NzAzNTcxLDI1My4yNzc1MzEwMTUxMjc3NSw0OS4zNjY4NTc3MTExOTM5NSwzNC43NzcxNTczNzU2Nzg3OSwyNjYuNjU5MjExODUwODEyMiw2NzguNTAxNjY2NjEyNzMxLDEyNS4yOTYyODE3MjIxNjI4OSw5Ljc4ODM2MDQ0MDE2MDA3NSwxMzQuOTk4NjEzMDY0NDM0NzIsNzcuNjM3MDQwNTAwNTA5MywyNi4zMDM4ODQyODIwMzMwOTYsMTY1LjQ4NTY0MzIxNDgzNTE0LDYzLjMyNTQxNDU0MDQ4NDY1LDgyLjY2NjkxMTA4MTE3Nzk3LDgxLjg5MDg5MzQ2NzkwNDczLDc0LjYzMzE3ODM3MjM4MTc0LDUuMDQ4MTk1NzcxNjI5MjEKKzE5LFNhdCAxMiBGZWIgMTEsMC45NDUyMTc3NjkzODAwMjMzLDg0LjgzNzUyNjUzMTQwMDI0LDUwLjI3MjA4MzAyODg1NjMzLDQ1LjAwNjIxNTAwNDk2MDYsMjA2LjkxODUzNzg2ODgwMTIsNDEuMzIxMTAxNzc0MTA1NzM1LDYxNC4zNTM2NDY2MzQ3ODQ1LDgzNzAuNzc4NDYwNjM3OTg2LDMxNC43OTEwODMzMjk2NTA4NiwyNDMuMDYxMDI0MzMzMDU0MTgsMTM3Ljc2MTYyNzAxMTc2NjMsMTEwLjgzNTE2NzU2OTYwNDkyLDUyLjAwMzYxNDYxNTIwMDc1LDE1LjQ4MzQ0ODE0MzE2MzIsMjE0LjQ0MjMwMjU4NTI5OTIyLDE2Ni45NjQ5NjQ1OTI3OTU4NywzMi42NzUyNzA0NjQ5MzI3OCwxMDAuMDIxNDU1NjA1NzAzODgsODYuMjA3NTk3NjUxOTkyNTksNjAxLjU0OTU2NTczMzEzNzUsNDI2LjkwNTk4OTM1NDEyMjE0LDM2LjAzMDM5NzM2MTU2NzgsMTAyLjc1ODkzMDIzNDA2MzM5LDU2LjU4NTQ5NTA3MjU3MjI2LDgwLjI3MDY2MDQ1MTI2OTA4LDU4LjczNzI4NzYyOTg4NTQxLDYuMTM1NjExMjI1MDYxNjE1NSwxNDkuNTY0MDI1NDYyNjE1LDkuMDgzNDc4MTgyODkxMzUsMjIuMTIyNTY2MDM1Mjc3MTYzLDEzMi4xNzA0NzM4MjEyMjIzNyw5NjQuODA0NTU4OTUzMzY3MiwxNC45NjA1NTQxNTMyMDQ3MDIsMTguMDczODQzNzczMjUzNjI1LDM0Ny44MzQ0NjM2NzAzNTcxLDI1My4yNzc1MzEwMTUxMjc3NSw0OS4zNjY4NTc3MTExOTM5NSwzNC43NzcxNTczNzU2Nzg3OSwyNjYuNjU5MjExODUwODEyMiw2NzguNTAxNjY2NjEyNzMxLDEyNS4yOTYyODE3MjIxNjI4OSw5Ljc4ODM2MDQ0MDE2MDA3NSwxMzQuOTk4NjEzMDY0NDM0NzIsNzcuNjM3MDQwNTAwNTA5MywyNi4zMDM4ODQyODIwMzMwOTYsMTY1LjQ4NTY0MzIxNDgzNTE0LDYzLjMyNTQxNDU0MDQ4NDY1LDgyLjY2NjkxMTA4MTE3Nzk3LDgxLjg5MDg5MzQ2NzkwNDczLDc0LjYzMzE3ODM3MjM4MTc0LDUuMDQ4MTk1NzcxNjI5MjEKKzIwLFN1biAxMyBGZWIgMTEsMC45NDUyMTc3NjkzODAwMjMzLDg0LjgzNzUyNjUzMTQwMDI0LDUwLjI3MjA4MzAyODg1NjMzLDQ1LjAwNjIxNTAwNDk2MDYsMjA2LjkxODUzNzg2ODgwMTIsNDEuMzIxMTAxNzc0MTA1NzM1LDYxNC4zNTM2NDY2MzQ3ODQ1LDgzNzAuNzc4NDYwNjM3OTg2LDMxNC43OTEwODMzMjk2NTA4NiwyNDMuMDYxMDI0MzMzMDU0MTgsMTM3Ljc2MTYyNzAxMTc2NjMsMTEwLjgzNTE2NzU2OTYwNDkyLDUyLjAwMzYxNDYxNTIwMDc1LDE1LjQ4MzQ0ODE0MzE2MzIsMjE0LjQ0MjMwMjU4NTI5OTIyLDE2Ni45NjQ5NjQ1OTI3OTU4NywzMi42NzUyNzA0NjQ5MzI3OCwxMDAuMDIxNDU1NjA1NzAzODgsODYuMjA3NTk3NjUxOTkyNTksNjAxLjU0OTU2NTczMzEzNzUsNDI2LjkwNTk4OTM1NDEyMjE0LDM2LjAzMDM5NzM2MTU2NzgsMTAyLjc1ODkzMDIzNDA2MzM5LDU2LjU4NTQ5NTA3MjU3MjI2LDgwLjI3MDY2MDQ1MTI2OTA4LDU4LjczNzI4NzYyOTg4NTQxLDYuMTM1NjExMjI1MDYxNjE1NSwxNDkuNTY0MDI1NDYyNjE1LDkuMDgzNDc4MTgyODkxMzUsMjIuMTIyNTY2MDM1Mjc3MTYzLDEzMi4xNzA0NzM4MjEyMjIzNyw5NjQuODA0NTU4OTUzMzY3MiwxNC45NjA1NTQxNTMyMDQ3MDIsMTguMDczODQzNzczMjUzNjI1LDM0Ny44MzQ0NjM2NzAzNTcxLDI1My4yNzc1MzEwMTUxMjc3NSw0OS4zNjY4NTc3MTExOTM5NSwzNC43NzcxNTczNzU2Nzg3OSwyNjYuNjU5MjExODUwODEyMiw2NzguNTAxNjY2NjEyNzMxLDEyNS4yOTYyODE3MjIxNjI4OSw5Ljc4ODM2MDQ0MDE2MDA3NSwxMzQuOTk4NjEzMDY0NDM0NzIsNzcuNjM3MDQwNTAwNTA5MywyNi4zMDM4ODQyODIwMzMwOTYsMTY1LjQ4NTY0MzIxNDgzNTE0LDYzLjMyNTQxNDU0MDQ4NDY1LDgyLjY2NjkxMTA4MTE3Nzk3LDgxLjg5MDg5MzQ2NzkwNDczLDc0LjYzMzE3ODM3MjM4MTc0LDUuMDQ4MTk1NzcxNjI5MjEKKzIxLE1vbiAxNCBGZWIgMTEsMC45NDUyMTc3NjkzODAwMjMzLDg0LjgzNzUyNjUzMTQwMDI0LDUwLjI3MjA4MzAyODg1NjMzLDQ1LjAwNjIxNTAwNDk2MDYsMjA2LjkxODUzNzg2ODgwMTIsNDEuMzIxMTAxNzc0MTA1NzM1LDYxNC4zNTM2NDY2MzQ3ODQ1LDgzNzAuNzc4NDYwNjM3OTg2LDMxNC43OTEwODMzMjk2NTA4NiwyNDMuMDYxMDI0MzMzMDU0MTgsMTM3Ljc2MTYyNzAxMTc2NjMsMTEwLjgzNTE2NzU2OTYwNDkyLDUyLjAwMzYxNDYxNTIwMDc1LDE1LjQ4MzQ0ODE0MzE2MzIsMjE0LjQ0MjMwMjU4NTI5OTIyLDE2Ni45NjQ5NjQ1OTI3OTU4NywzMi42NzUyNzA0NjQ5MzI3OCwxMDAuMDIxNDU1NjA1NzAzODgsODYuMjA3NTk3NjUxOTkyNTksNjAxLjU0OTU2NTczMzEzNzUsNDI2LjkwNTk4OTM1NDEyMjE0LDM2LjAzMDM5NzM2MTU2NzgsMTAyLjc1ODkzMDIzNDA2MzM5LDU2LjU4NTQ5NTA3MjU3MjI2LDgwLjI3MDY2MDQ1MTI2OTA4LDU4LjczNzI4NzYyOTg4NTQxLDYuMTM1NjExMjI1MDYxNjE1NSwxNDkuNTY0MDI1NDYyNjE1LDkuMDgzNDc4MTgyODkxMzUsMjIuMTIyNTY2MDM1Mjc3MTYzLDEzMi4xNzA0NzM4MjEyMjIzNyw5NjQuODA0NTU4OTUzMzY3MiwxNC45NjA1NTQxNTMyMDQ3MDIsMTguMDczODQzNzczMjUzNjI1LDM0Ny44MzQ0NjM2NzAzNTcxLDI1My4yNzc1MzEwMTUxMjc3NSw0OS4zNjY4NTc3MTExOTM5NSwzNC43NzcxNTczNzU2Nzg3OSwyNjYuNjU5MjExODUwODEyMiw2NzguNTAxNjY2NjEyNzMxLDEyNS4yOTYyODE3MjIxNjI4OSw5Ljc4ODM2MDQ0MDE2MDA3NSwxMzQuOTk4NjEzMDY0NDM0NzIsNzcuNjM3MDQwNTAwNTA5MywyNi4zMDM4ODQyODIwMzMwOTYsMTY1LjQ4NTY0MzIxNDgzNTE0LDYzLjMyNTQxNDU0MDQ4NDY1LDgyLjY2NjkxMTA4MTE3Nzk3LDgxLjg5MDg5MzQ2NzkwNDczLDc0LjYzMzE3ODM3MjM4MTc0LDUuMDQ4MTk1NzcxNjI5MjEKKzIyLFR1ZSAxNSBGZWIgMTEsMC45NDUyMTc3NjkzODAwMjMzLDg0LjgzNzUyNjUzMTQwMDI0LDUwLjI3MjA4MzAyODg1NjMzLDQ1LjAwNjIxNTAwNDk2MDYsMjA2LjkxODUzNzg2ODgwMTIsNDEuMzIxMTAxNzc0MTA1NzM1LDYxNC4zNTM2NDY2MzQ3ODQ1LDgzNzAuNzc4NDYwNjM3OTg2LDMxNC43OTEwODMzMjk2NTA4NiwyNDMuMDYxMDI0MzMzMDU0MTgsMTM3Ljc2MTYyNzAxMTc2NjMsMTEwLjgzNTE2NzU2OTYwNDkyLDUyLjAwMzYxNDYxNTIwMDc1LDE1LjQ4MzQ0ODE0MzE2MzIsMjE0LjQ0MjMwMjU4NTI5OTIyLDE2Ni45NjQ5NjQ1OTI3OTU4NywzMi42NzUyNzA0NjQ5MzI3OCwxMDAuMDIxNDU1NjA1NzAzODgsODYuMjA3NTk3NjUxOTkyNTksNjAxLjU0OTU2NTczMzEzNzUsNDI2LjkwNTk4OTM1NDEyMjE0LDM2LjAzMDM5NzM2MTU2NzgsMTAyLjc1ODkzMDIzNDA2MzM5LDU2LjU4NTQ5NTA3MjU3MjI2LDgwLjI3MDY2MDQ1MTI2OTA4LDU4LjczNzI4NzYyOTg4NTQxLDYuMTM1NjExMjI1MDYxNjE1NSwxNDkuNTY0MDI1NDYyNjE1LDkuMDgzNDc4MTgyODkxMzUsMjIuMTIyNTY2MDM1Mjc3MTYzLDEzMi4xNzA0NzM4MjEyMjIzNyw5NjQuODA0NTU4OTUzMzY3MiwxNC45NjA1NTQxNTMyMDQ3MDIsMTguMDczODQzNzczMjUzNjI1LDM0Ny44MzQ0NjM2NzAzNTcxLDI1My4yNzc1MzEwMTUxMjc3NSw0OS4zNjY4NTc3MTExOTM5NSwzNC43NzcxNTczNzU2Nzg3OSwyNjYuNjU5MjExODUwODEyMiw2NzguNTAxNjY2NjEyNzMxLDEyNS4yOTYyODE3MjIxNjI4OSw5Ljc4ODM2MDQ0MDE2MDA3NSwxMzQuOTk4NjEzMDY0NDM0NzIsNzcuNjM3MDQwNTAwNTA5MywyNi4zMDM4ODQyODIwMzMwOTYsMTY1LjQ4NTY0MzIxNDgzNTE0LDYzLjMyNTQxNDU0MDQ4NDY1LDgyLjY2NjkxMTA4MTE3Nzk3LDgxLjg5MDg5MzQ2NzkwNDczLDc0LjYzMzE3ODM3MjM4MTc0LDUuMDQ4MTk1NzcxNjI5MjEKKzIzLFdlZCAxNiBGZWIgMTEsMC45NDUyMTc3NjkzODAwMjMzLDg0LjgzNzUyNjUzMTQwMDI0LDUwLjI3MjA4MzAyODg1NjMzLDQ1LjAwNjIxNTAwNDk2MDYsMjA2LjkxODUzNzg2ODgwMTIsNDEuMzIxMTAxNzc0MTA1NzM1LDYxNC4zNTM2NDY2MzQ3ODQ1LDgzNzAuNzc4NDYwNjM3OTg2LDMxNC43OTEwODMzMjk2NTA4NiwyNDMuMDYxMDI0MzMzMDU0MTgsMTM3Ljc2MTYyNzAxMTc2NjMsMTEwLjgzNTE2NzU2OTYwNDkyLDUyLjAwMzYxNDYxNTIwMDc1LDE1LjQ4MzQ0ODE0MzE2MzIsMjE0LjQ0MjMwMjU4NTI5OTIyLDE2Ni45NjQ5NjQ1OTI3OTU4NywzMi42NzUyNzA0NjQ5MzI3OCwxMDAuMDIxNDU1NjA1NzAzODgsODYuMjA3NTk3NjUxOTkyNTksNjAxLjU0OTU2NTczMzEzNzUsNDI2LjkwNTk4OTM1NDEyMjE0LDM2LjAzMDM5NzM2MTU2NzgsMTAyLjc1ODkzMDIzNDA2MzM5LDU2LjU4NTQ5NTA3MjU3MjI2LDgwLjI3MDY2MDQ1MTI2OTA4LDU4LjczNzI4NzYyOTg4NTQxLDYuMTM1NjExMjI1MDYxNjE1NSwxNDkuNTY0MDI1NDYyNjE1LDkuMDgzNDc4MTgyODkxMzUsMjIuMTIyNTY2MDM1Mjc3MTYzLDEzMi4xNzA0NzM4MjEyMjIzNyw5NjQuODA0NTU4OTUzMzY3MiwxNC45NjA1NTQxNTMyMDQ3MDIsMTguMDczODQzNzczMjUzNjI1LDM0Ny44MzQ0NjM2NzAzNTcxLDI1My4yNzc1MzEwMTUxMjc3NSw0OS4zNjY4NTc3MTExOTM5NSwzNC43NzcxNTczNzU2Nzg3OSwyNjYuNjU5MjExODUwODEyMiw2NzguNTAxNjY2NjEyNzMxLDEyNS4yOTYyODE3MjIxNjI4OSw5Ljc4ODM2MDQ0MDE2MDA3NSwxMzQuOTk4NjEzMDY0NDM0NzIsNzcuNjM3MDQwNTAwNTA5MywyNi4zMDM4ODQyODIwMzMwOTYsMTY1LjQ4NTY0MzIxNDgzNTE0LDYzLjMyNTQxNDU0MDQ4NDY1LDgyLjY2NjkxMTA4MTE3Nzk3LDgxLjg5MDg5MzQ2NzkwNDczLDc0LjYzMzE3ODM3MjM4MTc0LDUuMDQ4MTk1NzcxNjI5MjEKKzI0LFRodSAxNyBGZWIgMTEsMC45NDUyMTc3NjkzODAwMjMzLDg0LjgzNzUyNjUzMTQwMDI0LDUwLjI3MjA4MzAyODg1NjMzLDQ1LjAwNjIxNTAwNDk2MDYsMjA2LjkxODUzNzg2ODgwMTIsNDEuMzIxMTAxNzc0MTA1NzM1LDYxNC4zNTM2NDY2MzQ3ODQ1LDgzNzAuNzc4NDYwNjM3OTg2LDMxNC43OTEwODMzMjk2NTA4NiwyNDMuMDYxMDI0MzMzMDU0MTgsMTM3Ljc2MTYyNzAxMTc2NjMsMTEwLjgzNTE2NzU2OTYwNDkyLDUyLjAwMzYxNDYxNTIwMDc1LDE1LjQ4MzQ0ODE0MzE2MzIsMjE0LjQ0MjMwMjU4NTI5OTIyLDE2Ni45NjQ5NjQ1OTI3OTU4NywzMi42NzUyNzA0NjQ5MzI3OCwxMDAuMDIxNDU1NjA1NzAzODgsODYuMjA3NTk3NjUxOTkyNTksNjAxLjU0OTU2NTczMzEzNzUsNDI2LjkwNTk4OTM1NDEyMjE0LDM2LjAzMDM5NzM2MTU2NzgsMTAyLjc1ODkzMDIzNDA2MzM5LDU2LjU4NTQ5NTA3MjU3MjI2LDgwLjI3MDY2MDQ1MTI2OTA4LDU4LjczNzI4NzYyOTg4NTQxLDYuMTM1NjExMjI1MDYxNjE1NSwxNDkuNTY0MDI1NDYyNjE1LDkuMDgzNDc4MTgyODkxMzUsMjIuMTIyNTY2MDM1Mjc3MTYzLDEzMi4xNzA0NzM4MjEyMjIzNyw5NjQuODA0NTU4OTUzMzY3MiwxNC45NjA1NTQxNTMyMDQ3MDIsMTguMDczODQzNzczMjUzNjI1LDM0Ny44MzQ0NjM2NzAzNTcxLDI1My4yNzc1MzEwMTUxMjc3NSw0OS4zNjY4NTc3MTExOTM5NSwzNC43NzcxNTczNzU2Nzg3OSwyNjYuNjU5MjExODUwODEyMiw2NzguNTAxNjY2NjEyNzMxLDEyNS4yOTYyODE3MjIxNjI4OSw5Ljc4ODM2MDQ0MDE2MDA3NSwxMzQuOTk4NjEzMDY0NDM0NzIsNzcuNjM3MDQwNTAwNTA5MywyNi4zMDM4ODQyODIwMzMwOTYsMTY1LjQ4NTY0MzIxNDgzNTE0LDYzLjMyNTQxNDU0MDQ4NDY1LDgyLjY2NjkxMTA4MTE3Nzk3LDgxLjg5MDg5MzQ2NzkwNDczLDc0LjYzMzE3ODM3MjM4MTc0LDUuMDQ4MTk1NzcxNjI5MjEKKzI1LEZyaSAxOCBGZWIgMTEsMC45NDUyMTc3NjkzODAwMjMzLDg0LjgzNzUyNjUzMTQwMDI0LDUwLjI3MjA4MzAyODg1NjMzLDQ1LjAwNjIxNTAwNDk2MDYsMjA2LjkxODUzNzg2ODgwMTIsNDEuMzIxMTAxNzc0MTA1NzM1LDYxNC4zNTM2NDY2MzQ3ODQ1LDgzNzAuNzc4NDYwNjM3OTg2LDMxNC43OTEwODMzMjk2NTA4NiwyNDMuMDYxMDI0MzMzMDU0MTgsMTM3Ljc2MTYyNzAxMTc2NjMsMTEwLjgzNTE2NzU2OTYwNDkyLDUyLjAwMzYxNDYxNTIwMDc1LDE1LjQ4MzQ0ODE0MzE2MzIsMjE0LjQ0MjMwMjU4NTI5OTIyLDE2Ni45NjQ5NjQ1OTI3OTU4NywzMi42NzUyNzA0NjQ5MzI3OCwxMDAuMDIxNDU1NjA1NzAzODgsODYuMjA3NTk3NjUxOTkyNTksNjAxLjU0OTU2NTczMzEzNzUsNDI2LjkwNTk4OTM1NDEyMjE0LDM2LjAzMDM5NzM2MTU2NzgsMTAyLjc1ODkzMDIzNDA2MzM5LDU2LjU4NTQ5NTA3MjU3MjI2LDgwLjI3MDY2MDQ1MTI2OTA4LDU4LjczNzI4NzYyOTg4NTQxLDYuMTM1NjExMjI1MDYxNjE1NSwxNDkuNTY0MDI1NDYyNjE1LDkuMDgzNDc4MTgyODkxMzUsMjIuMTIyNTY2MDM1Mjc3MTYzLDEzMi4xNzA0NzM4MjEyMjIzNyw5NjQuODA0NTU4OTUzMzY3MiwxNC45NjA1NTQxNTMyMDQ3MDIsMTguMDczODQzNzczMjUzNjI1LDM0Ny44MzQ0NjM2NzAzNTcxLDI1My4yNzc1MzEwMTUxMjc3NSw0OS4zNjY4NTc3MTExOTM5NSwzNC43NzcxNTczNzU2Nzg3OSwyNjYuNjU5MjExODUwODEyMiw2NzguNTAxNjY2NjEyNzMxLDEyNS4yOTYyODE3MjIxNjI4OSw5Ljc4ODM2MDQ0MDE2MDA3NSwxMzQuOTk4NjEzMDY0NDM0NzIsNzcuNjM3MDQwNTAwNTA5MywyNi4zMDM4ODQyODIwMzMwOTYsMTY1LjQ4NTY0MzIxNDgzNTE0LDYzLjMyNTQxNDU0MDQ4NDY1LDgyLjY2NjkxMTA4MTE3Nzk3LDgxLjg5MDg5MzQ2NzkwNDczLDc0LjYzMzE3ODM3MjM4MTc0LDUuMDQ4MTk1NzcxNjI5MjEKKzI2LFNhdCAxOSBGZWIgMTEsMC45NDUyMTc3NjkzODAwMjMzLDg0LjgzNzUyNjUzMTQwMDI0LDUwLjI3MjA4MzAyODg1NjMzLDQ1LjAwNjIxNTAwNDk2MDYsMjA2LjkxODUzNzg2ODgwMTIsNDEuMzIxMTAxNzc0MTA1NzM1LDYxNC4zNTM2NDY2MzQ3ODQ1LDgzNzAuNzc4NDYwNjM3OTg2LDMxNC43OTEwODMzMjk2NTA4NiwyNDMuMDYxMDI0MzMzMDU0MTgsMTM3Ljc2MTYyNzAxMTc2NjMsMTEwLjgzNTE2NzU2OTYwNDkyLDUyLjAwMzYxNDYxNTIwMDc1LDE1LjQ4MzQ0ODE0MzE2MzIsMjE0LjQ0MjMwMjU4NTI5OTIyLDE2Ni45NjQ5NjQ1OTI3OTU4NywzMi42NzUyNzA0NjQ5MzI3OCwxMDAuMDIxNDU1NjA1NzAzODgsODYuMjA3NTk3NjUxOTkyNTksNjAxLjU0OTU2NTczMzEzNzUsNDI2LjkwNTk4OTM1NDEyMjE0LDM2LjAzMDM5NzM2MTU2NzgsMTAyLjc1ODkzMDIzNDA2MzM5LDU2LjU4NTQ5NTA3MjU3MjI2LDgwLjI3MDY2MDQ1MTI2OTA4LDU4LjczNzI4NzYyOTg4NTQxLDYuMTM1NjExMjI1MDYxNjE1NSwxNDkuNTY0MDI1NDYyNjE1LDkuMDgzNDc4MTgyODkxMzUsMjIuMTIyNTY2MDM1Mjc3MTYzLDEzMi4xNzA0NzM4MjEyMjIzNyw5NjQuODA0NTU4OTUzMzY3MiwxNC45NjA1NTQxNTMyMDQ3MDIsMTguMDczODQzNzczMjUzNjI1LDM0Ny44MzQ0NjM2NzAzNTcxLDI1My4yNzc1MzEwMTUxMjc3NSw0OS4zNjY4NTc3MTExOTM5NSwzNC43NzcxNTczNzU2Nzg3OSwyNjYuNjU5MjExODUwODEyMiw2NzguNTAxNjY2NjEyNzMxLDEyNS4yOTYyODE3MjIxNjI4OSw5Ljc4ODM2MDQ0MDE2MDA3NSwxMzQuOTk4NjEzMDY0NDM0NzIsNzcuNjM3MDQwNTAwNTA5MywyNi4zMDM4ODQyODIwMzMwOTYsMTY1LjQ4NTY0MzIxNDgzNTE0LDYzLjMyNTQxNDU0MDQ4NDY1LDgyLjY2NjkxMTA4MTE3Nzk3LDgxLjg5MDg5MzQ2NzkwNDczLDc0LjYzMzE3ODM3MjM4MTc0LDUuMDQ4MTk1NzcxNjI5MjEKKzI3LFN1biAyMCBGZWIgMTEsMC45NDUyMTc3NjkzODAwMjMzLDg0LjgzNzUyNjUzMTQwMDI0LDUwLjI3MjA4MzAyODg1NjMzLDQ1LjAwNjIxNTAwNDk2MDYsMjA2LjkxODUzNzg2ODgwMTIsNDEuMzIxMTAxNzc0MTA1NzM1LDYxNC4zNTM2NDY2MzQ3ODQ1LDgzNzAuNzc4NDYwNjM3OTg2LDMxNC43OTEwODMzMjk2NTA4NiwyNDMuMDYxMDI0MzMzMDU0MTgsMTM3Ljc2MTYyNzAxMTc2NjMsMTEwLjgzNTE2NzU2OTYwNDkyLDUyLjAwMzYxNDYxNTIwMDc1LDE1LjQ4MzQ0ODE0MzE2MzIsMjE0LjQ0MjMwMjU4NTI5OTIyLDE2Ni45NjQ5NjQ1OTI3OTU4NywzMi42NzUyNzA0NjQ5MzI3OCwxMDAuMDIxNDU1NjA1NzAzODgsODYuMjA3NTk3NjUxOTkyNTksNjAxLjU0OTU2NTczMzEzNzUsNDI2LjkwNTk4OTM1NDEyMjE0LDM2LjAzMDM5NzM2MTU2NzgsMTAyLjc1ODkzMDIzNDA2MzM5LDU2LjU4NTQ5NTA3MjU3MjI2LDgwLjI3MDY2MDQ1MTI2OTA4LDU4LjczNzI4NzYyOTg4NTQxLDYuMTM1NjExMjI1MDYxNjE1NSwxNDkuNTY0MDI1NDYyNjE1LDkuMDgzNDc4MTgyODkxMzUsMjIuMTIyNTY2MDM1Mjc3MTYzLDEzMi4xNzA0NzM4MjEyMjIzNyw5NjQuODA0NTU4OTUzMzY3MiwxNC45NjA1NTQxNTMyMDQ3MDIsMTguMDczODQzNzczMjUzNjI1LDM0Ny44MzQ0NjM2NzAzNTcxLDI1My4yNzc1MzEwMTUxMjc3NSw0OS4zNjY4NTc3MTExOTM5NSwzNC43NzcxNTczNzU2Nzg3OSwyNjYuNjU5MjExODUwODEyMiw2NzguNTAxNjY2NjEyNzMxLDEyNS4yOTYyODE3MjIxNjI4OSw5Ljc4ODM2MDQ0MDE2MDA3NSwxMzQuOTk4NjEzMDY0NDM0NzIsNzcuNjM3MDQwNTAwNTA5MywyNi4zMDM4ODQyODIwMzMwOTYsMTY1LjQ4NTY0MzIxNDgzNTE0LDYzLjMyNTQxNDU0MDQ4NDY1LDgyLjY2NjkxMTA4MTE3Nzk3LDgxLjg5MDg5MzQ2NzkwNDczLDc0LjYzMzE3ODM3MjM4MTc0LDUuMDQ4MTk1NzcxNjI5MjEKKzI4LE1vbiAyMSBGZWIgMTEsMC45NDUyMTc3NjkzODAwMjMzLDg0LjgzNzUyNjUzMTQwMDI0LDUwLjI3MjA4MzAyODg1NjMzLDQ1LjAwNjIxNTAwNDk2MDYsMjA2LjkxODUzNzg2ODgwMTIsNDEuMzIxMTAxNzc0MTA1NzM1LDYxNC4zNTM2NDY2MzQ3ODQ1LDgzNzAuNzc4NDYwNjM3OTg2LDMxNC43OTEwODMzMjk2NTA4NiwyNDMuMDYxMDI0MzMzMDU0MTgsMTM3Ljc2MTYyNzAxMTc2NjMsMTEwLjgzNTE2NzU2OTYwNDkyLDUyLjAwMzYxNDYxNTIwMDc1LDE1LjQ4MzQ0ODE0MzE2MzIsMjE0LjQ0MjMwMjU4NTI5OTIyLDE2Ni45NjQ5NjQ1OTI3OTU4NywzMi42NzUyNzA0NjQ5MzI3OCwxMDAuMDIxNDU1NjA1NzAzODgsODYuMjA3NTk3NjUxOTkyNTksNjAxLjU0OTU2NTczMzEzNzUsNDI2LjkwNTk4OTM1NDEyMjE0LDM2LjAzMDM5NzM2MTU2NzgsMTAyLjc1ODkzMDIzNDA2MzM5LDU2LjU4NTQ5NTA3MjU3MjI2LDgwLjI3MDY2MDQ1MTI2OTA4LDU4LjczNzI4NzYyOTg4NTQxLDYuMTM1NjExMjI1MDYxNjE1NSwxNDkuNTY0MDI1NDYyNjE1LDkuMDgzNDc4MTgyODkxMzUsMjIuMTIyNTY2MDM1Mjc3MTYzLDEzMi4xNzA0NzM4MjEyMjIzNyw5NjQuODA0NTU4OTUzMzY3MiwxNC45NjA1NTQxNTMyMDQ3MDIsMTguMDczODQzNzczMjUzNjI1LDM0Ny44MzQ0NjM2NzAzNTcxLDI1My4yNzc1MzEwMTUxMjc3NSw0OS4zNjY4NTc3MTExOTM5NSwzNC43NzcxNTczNzU2Nzg3OSwyNjYuNjU5MjExODUwODEyMiw2NzguNTAxNjY2NjEyNzMxLDEyNS4yOTYyODE3MjIxNjI4OSw5Ljc4ODM2MDQ0MDE2MDA3NSwxMzQuOTk4NjEzMDY0NDM0NzIsNzcuNjM3MDQwNTAwNTA5MywyNi4zMDM4ODQyODIwMzMwOTYsMTY1LjQ4NTY0MzIxNDgzNTE0LDYzLjMyNTQxNDU0MDQ4NDY1LDgyLjY2NjkxMTA4MTE3Nzk3LDgxLjg5MDg5MzQ2NzkwNDczLDc0LjYzMzE3ODM3MjM4MTc0LDUuMDQ4MTk1NzcxNjI5MjEKKzI5LFR1ZSAyMiBGZWIgMTEsMC45NDUyMTc3NjkzODAwMjMzLDg0LjgzNzUyNjUzMTQwMDI0LDUwLjI3MjA4MzAyODg1NjMzLDQ1LjAwNjIxNTAwNDk2MDYsMjA2LjkxODUzNzg2ODgwMTIsNDEuMzIxMTAxNzc0MTA1NzM1LDYxNC4zNTM2NDY2MzQ3ODQ1LDgzNzAuNzc4NDYwNjM3OTg2LDMxNC43OTEwODMzMjk2NTA4NiwyNDMuMDYxMDI0MzMzMDU0MTgsMTM3Ljc2MTYyNzAxMTc2NjMsMTEwLjgzNTE2NzU2OTYwNDkyLDUyLjAwMzYxNDYxNTIwMDc1LDE1LjQ4MzQ0ODE0MzE2MzIsMjE0LjQ0MjMwMjU4NTI5OTIyLDE2Ni45NjQ5NjQ1OTI3OTU4NywzMi42NzUyNzA0NjQ5MzI3OCwxMDAuMDIxNDU1NjA1NzAzODgsODYuMjA3NTk3NjUxOTkyNTksNjAxLjU0OTU2NTczMzEzNzUsNDI2LjkwNTk4OTM1NDEyMjE0LDM2LjAzMDM5NzM2MTU2NzgsMTAyLjc1ODkzMDIzNDA2MzM5LDU2LjU4NTQ5NTA3MjU3MjI2LDgwLjI3MDY2MDQ1MTI2OTA4LDU4LjczNzI4NzYyOTg4NTQxLDYuMTM1NjExMjI1MDYxNjE1NSwxNDkuNTY0MDI1NDYyNjE1LDkuMDgzNDc4MTgyODkxMzUsMjIuMTIyNTY2MDM1Mjc3MTYzLDEzMi4xNzA0NzM4MjEyMjIzNyw5NjQuODA0NTU4OTUzMzY3MiwxNC45NjA1NTQxNTMyMDQ3MDIsMTguMDczODQzNzczMjUzNjI1LDM0Ny44MzQ0NjM2NzAzNTcxLDI1My4yNzc1MzEwMTUxMjc3NSw0OS4zNjY4NTc3MTExOTM5NSwzNC43NzcxNTczNzU2Nzg3OSwyNjYuNjU5MjExODUwODEyMiw2NzguNTAxNjY2NjEyNzMxLDEyNS4yOTYyODE3MjIxNjI4OSw5Ljc4ODM2MDQ0MDE2MDA3NSwxMzQuOTk4NjEzMDY0NDM0NzIsNzcuNjM3MDQwNTAwNTA5MywyNi4zMDM4ODQyODIwMzMwOTYsMTY1LjQ4NTY0MzIxNDgzNTE0LDYzLjMyNTQxNDU0MDQ4NDY1LDgyLjY2NjkxMTA4MTE3Nzk3LDgxLjg5MDg5MzQ2NzkwNDczLDc0LjYzMzE3ODM3MjM4MTc0LDUuMDQ4MTk1NzcxNjI5MjEKKzMwLFdlZCAyMyBGZWIgMTEsMC45NDUyMTc3NjkzODAwMjMzLDg0LjgzNzUyNjUzMTQwMDI0LDUwLjI3MjA4MzAyODg1NjMzLDQ1LjAwNjIxNTAwNDk2MDYsMjA2LjkxODUzNzg2ODgwMTIsNDEuMzIxMTAxNzc0MTA1NzM1LDYxNC4zNTM2NDY2MzQ3ODQ1LDgzNzAuNzc4NDYwNjM3OTg2LDMxNC43OTEwODMzMjk2NTA4NiwyNDMuMDYxMDI0MzMzMDU0MTgsMTM3Ljc2MTYyNzAxMTc2NjMsMTEwLjgzNTE2NzU2OTYwNDkyLDUyLjAwMzYxNDYxNTIwMDc1LDE1LjQ4MzQ0ODE0MzE2MzIsMjE0LjQ0MjMwMjU4NTI5OTIyLDE2Ni45NjQ5NjQ1OTI3OTU4NywzMi42NzUyNzA0NjQ5MzI3OCwxMDAuMDIxNDU1NjA1NzAzODgsODYuMjA3NTk3NjUxOTkyNTksNjAxLjU0OTU2NTczMzEzNzUsNDI2LjkwNTk4OTM1NDEyMjE0LDM2LjAzMDM5NzM2MTU2NzgsMTAyLjc1ODkzMDIzNDA2MzM5LDU2LjU4NTQ5NTA3MjU3MjI2LDgwLjI3MDY2MDQ1MTI2OTA4LDU4LjczNzI4NzYyOTg4NTQxLDYuMTM1NjExMjI1MDYxNjE1NSwxNDkuNTY0MDI1NDYyNjE1LDkuMDgzNDc4MTgyODkxMzUsMjIuMTIyNTY2MDM1Mjc3MTYzLDEzMi4xNzA0NzM4MjEyMjIzNyw5NjQuODA0NTU4OTUzMzY3MiwxNC45NjA1NTQxNTMyMDQ3MDIsMTguMDczODQzNzczMjUzNjI1LDM0Ny44MzQ0NjM2NzAzNTcxLDI1My4yNzc1MzEwMTUxMjc3NSw0OS4zNjY4NTc3MTExOTM5NSwzNC43NzcxNTczNzU2Nzg3OSwyNjYuNjU5MjExODUwODEyMiw2NzguNTAxNjY2NjEyNzMxLDEyNS4yOTYyODE3MjIxNjI4OSw5Ljc4ODM2MDQ0MDE2MDA3NSwxMzQuOTk4NjEzMDY0NDM0NzIsNzcuNjM3MDQwNTAwNTA5MywyNi4zMDM4ODQyODIwMzMwOTYsMTY1LjQ4NTY0MzIxNDgzNTE0LDYzLjMyNTQxNDU0MDQ4NDY1LDgyLjY2NjkxMTA4MTE3Nzk3LDgxLjg5MDg5MzQ2NzkwNDczLDc0LjYzMzE3ODM3MjM4MTc0LDUuMDQ4MTk1NzcxNjI5MjEKKzMxLFRodSAyNCBGZWIgMTEsMC45NDUyMTc3NjkzODAwMjMzLDg0LjgzNzUyNjUzMTQwMDI0LDUwLjI3MjA4MzAyODg1NjMzLDQ1LjAwNjIxNTAwNDk2MDYsMjA2LjkxODUzNzg2ODgwMTIsNDEuMzIxMTAxNzc0MTA1NzM1LDYxNC4zNTM2NDY2MzQ3ODQ1LDgzNzAuNzc4NDYwNjM3OTg2LDMxNC43OTEwODMzMjk2NTA4NiwyNDMuMDYxMDI0MzMzMDU0MTgsMTM3Ljc2MTYyNzAxMTc2NjMsMTEwLjgzNTE2NzU2OTYwNDkyLDUyLjAwMzYxNDYxNTIwMDc1LDE1LjQ4MzQ0ODE0MzE2MzIsMjE0LjQ0MjMwMjU4NTI5OTIyLDE2Ni45NjQ5NjQ1OTI3OTU4NywzMi42NzUyNzA0NjQ5MzI3OCwxMDAuMDIxNDU1NjA1NzAzODgsODYuMjA3NTk3NjUxOTkyNTksNjAxLjU0OTU2NTczMzEzNzUsNDI2LjkwNTk4OTM1NDEyMjE0LDM2LjAzMDM5NzM2MTU2NzgsMTAyLjc1ODkzMDIzNDA2MzM5LDU2LjU4NTQ5NTA3MjU3MjI2LDgwLjI3MDY2MDQ1MTI2OTA4LDU4LjczNzI4NzYyOTg4NTQxLDYuMTM1NjExMjI1MDYxNjE1NSwxNDkuNTY0MDI1NDYyNjE1LDkuMDgzNDc4MTgyODkxMzUsMjIuMTIyNTY2MDM1Mjc3MTYzLDEzMi4xNzA0NzM4MjEyMjIzNyw5NjQuODA0NTU4OTUzMzY3MiwxNC45NjA1NTQxNTMyMDQ3MDIsMTguMDczODQzNzczMjUzNjI1LDM0Ny44MzQ0NjM2NzAzNTcxLDI1My4yNzc1MzEwMTUxMjc3NSw0OS4zNjY4NTc3MTExOTM5NSwzNC43NzcxNTczNzU2Nzg3OSwyNjYuNjU5MjExODUwODEyMiw2NzguNTAxNjY2NjEyNzMxLDEyNS4yOTYyODE3MjIxNjI4OSw5Ljc4ODM2MDQ0MDE2MDA3NSwxMzQuOTk4NjEzMDY0NDM0NzIsNzcuNjM3MDQwNTAwNTA5MywyNi4zMDM4ODQyODIwMzMwOTYsMTY1LjQ4NTY0MzIxNDgzNTE0LDYzLjMyNTQxNDU0MDQ4NDY1LDgyLjY2NjkxMTA4MTE3Nzk3LDgxLjg5MDg5MzQ2NzkwNDczLDc0LjYzMzE3ODM3MjM4MTc0LDUuMDQ4MTk1NzcxNjI5MjEKKzMyLEZyaSAyNSBGZWIgMTEsMC45NDUyMTc3NjkzODAwMjMzLDg0LjgzNzUyNjUzMTQwMDI0LDUwLjI3MjA4MzAyODg1NjMzLDQ1LjAwNjIxNTAwNDk2MDYsMjA2LjkxODUzNzg2ODgwMTIsNDEuMzIxMTAxNzc0MTA1NzM1LDYxNC4zNTM2NDY2MzQ3ODQ1LDgzNzAuNzc4NDYwNjM3OTg2LDMxNC43OTEwODMzMjk2NTA4NiwyNDMuMDYxMDI0MzMzMDU0MTgsMTM3Ljc2MTYyNzAxMTc2NjMsMTEwLjgzNTE2NzU2OTYwNDkyLDUyLjAwMzYxNDYxNTIwMDc1LDE1LjQ4MzQ0ODE0MzE2MzIsMjE0LjQ0MjMwMjU4NTI5OTIyLDE2Ni45NjQ5NjQ1OTI3OTU4NywzMi42NzUyNzA0NjQ5MzI3OCwxMDAuMDIxNDU1NjA1NzAzODgsODYuMjA3NTk3NjUxOTkyNTksNjAxLjU0OTU2NTczMzEzNzUsNDI2LjkwNTk4OTM1NDEyMjE0LDM2LjAzMDM5NzM2MTU2NzgsMTAyLjc1ODkzMDIzNDA2MzM5LDU2LjU4NTQ5NTA3MjU3MjI2LDgwLjI3MDY2MDQ1MTI2OTA4LDU4LjczNzI4NzYyOTg4NTQxLDYuMTM1NjExMjI1MDYxNjE1NSwxNDkuNTY0MDI1NDYyNjE1LDkuMDgzNDc4MTgyODkxMzUsMjIuMTIyNTY2MDM1Mjc3MTYzLDEzMi4xNzA0NzM4MjEyMjIzNyw5NjQuODA0NTU4OTUzMzY3MiwxNC45NjA1NTQxNTMyMDQ3MDIsMTguMDczODQzNzczMjUzNjI1LDM0Ny44MzQ0NjM2NzAzNTcxLDI1My4yNzc1MzEwMTUxMjc3NSw0OS4zNjY4NTc3MTExOTM5NSwzNC43NzcxNTczNzU2Nzg3OSwyNjYuNjU5MjExODUwODEyMiw2NzguNTAxNjY2NjEyNzMxLDEyNS4yOTYyODE3MjIxNjI4OSw5Ljc4ODM2MDQ0MDE2MDA3NSwxMzQuOTk4NjEzMDY0NDM0NzIsNzcuNjM3MDQwNTAwNTA5MywyNi4zMDM4ODQyODIwMzMwOTYsMTY1LjQ4NTY0MzIxNDgzNTE0LDYzLjMyNTQxNDU0MDQ4NDY1LDgyLjY2NjkxMTA4MTE3Nzk3LDgxLjg5MDg5MzQ2NzkwNDczLDc0LjYzMzE3ODM3MjM4MTc0LDUuMDQ4MTk1NzcxNjI5MjEKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0lTdGF0ZXNPbmx5X0ZEX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL2h1bWFuL0luY2lkZW5jZV8wLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0lTdGF0ZXNPbmx5X0ZEX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL2h1bWFuL0luY2lkZW5jZV8wLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMTJlOGI4Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTSVN0YXRlc09ubHlfRkRfUmVmZXJlbmNlL2F1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwvaHVtYW4vSW5jaWRlbmNlXzAuY3N2CkBAIC0wLDAgKzEsMzMgQEAKK2l0ZXJhdGlvbix0aW1lLHN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL25vZGUvdHJhbnNwb3J0L3BpcGUvVVNBCisxLFR1ZSAyNSBKYW4gMTEsMC4wCisyLFdlZCAyNiBKYW4gMTEsMC4wCiszLFRodSAyNyBKYW4gMTEsMC4wCis0LEZyaSAyOCBKYW4gMTEsMC4wCis1LFNhdCAyOSBKYW4gMTEsMC4wCis2LFN1biAzMCBKYW4gMTEsMC4wCis3LE1vbiAzMSBKYW4gMTEsMC4wCis4LFR1ZSAxIEZlYiAxMSwwLjAKKzksV2VkIDIgRmViIDExLDAuMAorMTAsVGh1IDMgRmViIDExLDAuMAorMTEsRnJpIDQgRmViIDExLDAuMAorMTIsU2F0IDUgRmViIDExLDAuMAorMTMsU3VuIDYgRmViIDExLDAuMAorMTQsTW9uIDcgRmViIDExLDAuMAorMTUsVHVlIDggRmViIDExLDAuMAorMTYsV2VkIDkgRmViIDExLDAuMAorMTcsVGh1IDEwIEZlYiAxMSwwLjAKKzE4LEZyaSAxMSBGZWIgMTEsMC4wCisxOSxTYXQgMTIgRmViIDExLDAuMAorMjAsU3VuIDEzIEZlYiAxMSwwLjAKKzIxLE1vbiAxNCBGZWIgMTEsMC4wCisyMixUdWUgMTUgRmViIDExLDAuMAorMjMsV2VkIDE2IEZlYiAxMSwwLjAKKzI0LFRodSAxNyBGZWIgMTEsMC4wCisyNSxGcmkgMTggRmViIDExLDAuMAorMjYsU2F0IDE5IEZlYiAxMSwwLjAKKzI3LFN1biAyMCBGZWIgMTEsMC4wCisyOCxNb24gMjEgRmViIDExLDAuMAorMjksVHVlIDIyIEZlYiAxMSwwLjAKKzMwLFdlZCAyMyBGZWIgMTEsMC4wCiszMSxUaHUgMjQgRmViIDExLDAuMAorMzIsRnJpIDI1IEZlYiAxMSwwLjAKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0lTdGF0ZXNPbmx5X0ZEX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL2h1bWFuL0luY2lkZW5jZV8xLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0lTdGF0ZXNPbmx5X0ZEX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL2h1bWFuL0luY2lkZW5jZV8xLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40N2E4NDNmCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTSVN0YXRlc09ubHlfRkRfUmVmZXJlbmNlL2F1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwvaHVtYW4vSW5jaWRlbmNlXzEuY3N2CkBAIC0wLDAgKzEsMzMgQEAKK2l0ZXJhdGlvbix0aW1lLFVTLUFLLFVTLUFMLFVTLUFSLFVTLUFaLFVTLUNBLFVTLUNPLFVTLUNULFVTLURDLFVTLURFLFVTLUZMLFVTLUdBLFVTLUhJLFVTLUlBLFVTLUlELFVTLUlMLFVTLUlOLFVTLUtTLFVTLUtZLFVTLUxBLFVTLU1BLFVTLU1ELFVTLU1FLFVTLU1JLFVTLU1OLFVTLU1PLFVTLU1TLFVTLU1ULFVTLU5DLFVTLU5ELFVTLU5FLFVTLU5ILFVTLU5KLFVTLU5NLFVTLU5WLFVTLU5ZLFVTLU9ILFVTLU9LLFVTLU9SLFVTLVBBLFVTLVJJLFVTLVNDLFVTLVNELFVTLVROLFVTLVRYLFVTLVVULFVTLVZBLFVTLVZULFVTLVdBLFVTLVdJLFVTLVdWLFVTLVdZCisxLFR1ZSAyNSBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzIsV2VkIDI2IEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMyxUaHUgMjcgSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCis0LEZyaSAyOCBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzUsU2F0IDI5IEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorNixTdW4gMzAgSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCis3LE1vbiAzMSBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzgsVHVlIDEgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCis5LFdlZCAyIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTAsVGh1IDMgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxMSxGcmkgNCBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzEyLFNhdCA1IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTMsU3VuIDYgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxNCxNb24gNyBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzE1LFR1ZSA4IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTYsV2VkIDkgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxNyxUaHUgMTAgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxOCxGcmkgMTEgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxOSxTYXQgMTIgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyMCxTdW4gMTMgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyMSxNb24gMTQgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyMixUdWUgMTUgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyMyxXZWQgMTYgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyNCxUaHUgMTcgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyNSxGcmkgMTggRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyNixTYXQgMTkgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyNyxTdW4gMjAgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyOCxNb24gMjEgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyOSxUdWUgMjIgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCiszMCxXZWQgMjMgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCiszMSxUaHUgMjQgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCiszMixGcmkgMjUgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNJU3RhdGVzT25seV9GRF9SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9ydW5wYXJhbWV0ZXJzLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0lTdGF0ZXNPbmx5X0ZEX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL3J1bnBhcmFtZXRlcnMuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA2ODU1YjUKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNJU3RhdGVzT25seV9GRF9SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9ydW5wYXJhbWV0ZXJzLmNzdgpAQCAtMCwwICsxLDIgQEAKK3BvcHVsYXRpb25JZGVudGlmaWVyLG5hbWUsdGFyZ2V0SVNPS2V5LGJpcnRoUmF0ZSxkZWF0aFJhdGUsdGltZVBlcmlvZAoraHVtYW4sYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbCwsMC4wLDAuMCw4NjQwMDAwMApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0lTdGF0ZXNPbmx5X1JLX1JlZmVyZW5jZS9UZXN0U0kvaHVtYW4vRGlzZWFzZSBEZWF0aHNfMC5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNJU3RhdGVzT25seV9SS19SZWZlcmVuY2UvVGVzdFNJL2h1bWFuL0Rpc2Vhc2UgRGVhdGhzXzAuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjExMmU4YjgKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNJU3RhdGVzT25seV9SS19SZWZlcmVuY2UvVGVzdFNJL2h1bWFuL0Rpc2Vhc2UgRGVhdGhzXzAuY3N2CkBAIC0wLDAgKzEsMzMgQEAKK2l0ZXJhdGlvbix0aW1lLHN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL25vZGUvdHJhbnNwb3J0L3BpcGUvVVNBCisxLFR1ZSAyNSBKYW4gMTEsMC4wCisyLFdlZCAyNiBKYW4gMTEsMC4wCiszLFRodSAyNyBKYW4gMTEsMC4wCis0LEZyaSAyOCBKYW4gMTEsMC4wCis1LFNhdCAyOSBKYW4gMTEsMC4wCis2LFN1biAzMCBKYW4gMTEsMC4wCis3LE1vbiAzMSBKYW4gMTEsMC4wCis4LFR1ZSAxIEZlYiAxMSwwLjAKKzksV2VkIDIgRmViIDExLDAuMAorMTAsVGh1IDMgRmViIDExLDAuMAorMTEsRnJpIDQgRmViIDExLDAuMAorMTIsU2F0IDUgRmViIDExLDAuMAorMTMsU3VuIDYgRmViIDExLDAuMAorMTQsTW9uIDcgRmViIDExLDAuMAorMTUsVHVlIDggRmViIDExLDAuMAorMTYsV2VkIDkgRmViIDExLDAuMAorMTcsVGh1IDEwIEZlYiAxMSwwLjAKKzE4LEZyaSAxMSBGZWIgMTEsMC4wCisxOSxTYXQgMTIgRmViIDExLDAuMAorMjAsU3VuIDEzIEZlYiAxMSwwLjAKKzIxLE1vbiAxNCBGZWIgMTEsMC4wCisyMixUdWUgMTUgRmViIDExLDAuMAorMjMsV2VkIDE2IEZlYiAxMSwwLjAKKzI0LFRodSAxNyBGZWIgMTEsMC4wCisyNSxGcmkgMTggRmViIDExLDAuMAorMjYsU2F0IDE5IEZlYiAxMSwwLjAKKzI3LFN1biAyMCBGZWIgMTEsMC4wCisyOCxNb24gMjEgRmViIDExLDAuMAorMjksVHVlIDIyIEZlYiAxMSwwLjAKKzMwLFdlZCAyMyBGZWIgMTEsMC4wCiszMSxUaHUgMjQgRmViIDExLDAuMAorMzIsRnJpIDI1IEZlYiAxMSwwLjAKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0lTdGF0ZXNPbmx5X1JLX1JlZmVyZW5jZS9UZXN0U0kvaHVtYW4vRGlzZWFzZSBEZWF0aHNfMS5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNJU3RhdGVzT25seV9SS19SZWZlcmVuY2UvVGVzdFNJL2h1bWFuL0Rpc2Vhc2UgRGVhdGhzXzEuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ3YTg0M2YKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNJU3RhdGVzT25seV9SS19SZWZlcmVuY2UvVGVzdFNJL2h1bWFuL0Rpc2Vhc2UgRGVhdGhzXzEuY3N2CkBAIC0wLDAgKzEsMzMgQEAKK2l0ZXJhdGlvbix0aW1lLFVTLUFLLFVTLUFMLFVTLUFSLFVTLUFaLFVTLUNBLFVTLUNPLFVTLUNULFVTLURDLFVTLURFLFVTLUZMLFVTLUdBLFVTLUhJLFVTLUlBLFVTLUlELFVTLUlMLFVTLUlOLFVTLUtTLFVTLUtZLFVTLUxBLFVTLU1BLFVTLU1ELFVTLU1FLFVTLU1JLFVTLU1OLFVTLU1PLFVTLU1TLFVTLU1ULFVTLU5DLFVTLU5ELFVTLU5FLFVTLU5ILFVTLU5KLFVTLU5NLFVTLU5WLFVTLU5ZLFVTLU9ILFVTLU9LLFVTLU9SLFVTLVBBLFVTLVJJLFVTLVNDLFVTLVNELFVTLVROLFVTLVRYLFVTLVVULFVTLVZBLFVTLVZULFVTLVdBLFVTLVdJLFVTLVdWLFVTLVdZCisxLFR1ZSAyNSBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzIsV2VkIDI2IEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMyxUaHUgMjcgSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCis0LEZyaSAyOCBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzUsU2F0IDI5IEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorNixTdW4gMzAgSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCis3LE1vbiAzMSBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzgsVHVlIDEgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCis5LFdlZCAyIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTAsVGh1IDMgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxMSxGcmkgNCBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzEyLFNhdCA1IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTMsU3VuIDYgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxNCxNb24gNyBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzE1LFR1ZSA4IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTYsV2VkIDkgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxNyxUaHUgMTAgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxOCxGcmkgMTEgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxOSxTYXQgMTIgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyMCxTdW4gMTMgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyMSxNb24gMTQgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyMixUdWUgMTUgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyMyxXZWQgMTYgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyNCxUaHUgMTcgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyNSxGcmkgMTggRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyNixTYXQgMTkgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyNyxTdW4gMjAgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyOCxNb24gMjEgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyOSxUdWUgMjIgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCiszMCxXZWQgMjMgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCiszMSxUaHUgMjQgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCiszMixGcmkgMjUgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNJU3RhdGVzT25seV9SS19SZWZlcmVuY2UvVGVzdFNJL2h1bWFuL0lfMC5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNJU3RhdGVzT25seV9SS19SZWZlcmVuY2UvVGVzdFNJL2h1bWFuL0lfMC5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzkzMDBhZgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0lTdGF0ZXNPbmx5X1JLX1JlZmVyZW5jZS9UZXN0U0kvaHVtYW4vSV8wLmNzdgpAQCAtMCwwICsxLDMzIEBACitpdGVyYXRpb24sdGltZSxzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9ub2RlL3RyYW5zcG9ydC9waXBlL1VTQQorMSxUdWUgMjUgSmFuIDExLDAuMAorMixXZWQgMjYgSmFuIDExLDI4NjM4Mi42MjMyMjcwMTM4NgorMyxUaHUgMjcgSmFuIDExLDkyNDM0NC4yMzYxMzgzNjM3Cis0LEZyaSAyOCBKYW4gMTEsOTI0MzQ2Ljc3ODUwODc3NDIKKzUsU2F0IDI5IEphbiAxMSw5MjQzNDYuNzc0NzU3NTc2MQorNixTdW4gMzAgSmFuIDExLDkyNDM0Ni43Nzc0NjE5NTUzCis3LE1vbiAzMSBKYW4gMTEsOTI0MzQ2Ljc3Mjc4NzQ5MDIKKzgsVHVlIDEgRmViIDExLDkyNDM0Ni43Nzc4NTMyNzE4Cis5LFdlZCAyIEZlYiAxMSw5MjQzNDYuNzc1MjkyODMwNQorMTAsVGh1IDMgRmViIDExLDkyNDM0Ni43Nzg3NDk5ODU5CisxMSxGcmkgNCBGZWIgMTEsOTI0MzQ2Ljc3NTk2MTE5MjQKKzEyLFNhdCA1IEZlYiAxMSw5MjQzNDYuNzc3Njk0NTQwOQorMTMsU3VuIDYgRmViIDExLDkyNDM0Ni43NzYzNzU4MTYKKzE0LE1vbiA3IEZlYiAxMSw5MjQzNDYuNzc5MDYzOTcyOAorMTUsVHVlIDggRmViIDExLDkyNDM0Ni43NzgwNDU3MDQ3CisxNixXZWQgOSBGZWIgMTEsOTI0MzQ2Ljc3NzA5OTIwMzQKKzE3LFRodSAxMCBGZWIgMTEsOTI0MzQ2Ljc3NzAwNTIwNzgKKzE4LEZyaSAxMSBGZWIgMTEsOTI0MzQ2Ljc2OTMyMjcyNTcKKzE5LFNhdCAxMiBGZWIgMTEsOTI0MzQ2Ljc3ODA0MjI1NzMKKzIwLFN1biAxMyBGZWIgMTEsOTI0MzQ2Ljc3MjQ3NTkwODMKKzIxLE1vbiAxNCBGZWIgMTEsOTI0MzQ2Ljc3NjA1NDE0MDQKKzIyLFR1ZSAxNSBGZWIgMTEsOTI0MzQ2Ljc3NDAxMjA3NQorMjMsV2VkIDE2IEZlYiAxMSw5MjQzNDYuNzc4NjcyMjEwMworMjQsVGh1IDE3IEZlYiAxMSw5MjQzNDYuNzczOTA5NjA1MQorMjUsRnJpIDE4IEZlYiAxMSw5MjQzNDYuNzc3OTI2Mzg0NAorMjYsU2F0IDE5IEZlYiAxMSw5MjQzNDYuNzcxMDgyMjM5OAorMjcsU3VuIDIwIEZlYiAxMSw5MjQzNDYuNzc1OTEzNzY2NworMjgsTW9uIDIxIEZlYiAxMSw5MjQzNDYuNzcyODA0NDMyMgorMjksVHVlIDIyIEZlYiAxMSw5MjQzNDYuNzc5MTQzODY3MQorMzAsV2VkIDIzIEZlYiAxMSw5MjQzNDYuNzc2MTAwMjU5CiszMSxUaHUgMjQgRmViIDExLDkyNDM0Ni43NzYxNjA1MTI1CiszMixGcmkgMjUgRmViIDExLDkyNDM0Ni43NzM3NDgxMzkyCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNJU3RhdGVzT25seV9SS19SZWZlcmVuY2UvVGVzdFNJL2h1bWFuL0lfMS5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNJU3RhdGVzT25seV9SS19SZWZlcmVuY2UvVGVzdFNJL2h1bWFuL0lfMS5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjM1NGNkYwotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0lTdGF0ZXNPbmx5X1JLX1JlZmVyZW5jZS9UZXN0U0kvaHVtYW4vSV8xLmNzdgpAQCAtMCwwICsxLDMzIEBACitpdGVyYXRpb24sdGltZSxVUy1BSyxVUy1BTCxVUy1BUixVUy1BWixVUy1DQSxVUy1DTyxVUy1DVCxVUy1EQyxVUy1ERSxVUy1GTCxVUy1HQSxVUy1ISSxVUy1JQSxVUy1JRCxVUy1JTCxVUy1JTixVUy1LUyxVUy1LWSxVUy1MQSxVUy1NQSxVUy1NRCxVUy1NRSxVUy1NSSxVUy1NTixVUy1NTyxVUy1NUyxVUy1NVCxVUy1OQyxVUy1ORCxVUy1ORSxVUy1OSCxVUy1OSixVUy1OTSxVUy1OVixVUy1OWSxVUy1PSCxVUy1PSyxVUy1PUixVUy1QQSxVUy1SSSxVUy1TQyxVUy1TRCxVUy1UTixVUy1UWCxVUy1VVCxVUy1WQSxVUy1WVCxVUy1XQSxVUy1XSSxVUy1XVixVUy1XWQorMSxUdWUgMjUgSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwxLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyLFdlZCAyNiBKYW4gMTEsNTY3LjE0MDE4MTAxMjM5MDMsNTcwLjExODc3NjUwNzA3NzMsNDE2LjAyOTMxNTYwMzYxMzA0LDQ5MjQuNDE2ODc0ODY4NTg3LDMuMDEwMTIyMTY2MTUyNDEwMkU3LDUxNTEuOTIxOTY3NjE2Mjg2LDczNy4xODI4OTI1Nzg4MTg4LDE5MDkuNTI4MTY3MTIyNzIyNCwxLjg3NzQ0MDE1NTY0NzgzOTUsMTM2MTUuMDkyMTYwNjc5Nzc2LDg5NDUuODYzMDg3Nzg0NDgzLDIwOTguOTkwMDU3MzU2MTExLDM0Mi43MDUwNTI5NDU3NTksNDIzLjA2ODQxNjk0NzE4ODQsOTk4Ni45MTMwNDg3NDQyMDMsMTA0Ny44NTU4NjE2MDY2MTA3LDE2MS45MDkxNTU5OTI3NTY2LDUwOC42NTE3NDI2MDY3MjksOTU3Ljk5ODAyNzkxOTc4NjIsMzAwNC4zMTMyNzc4NzU5MTE0LDIyMTkuODEwNjcxMDQ5NDk5LDI1MC4yMjE0MDIyMDcyNjc1LDQxMDcuODE4MzMwNjA0NjA1LDM2OTIuNjI4NjE4OTE5NTA1MiwyNzMxLjE3NzQyMDg3NjEwNCwyNjguNTc3NDQ4NTk1NTQ3OTMsMjk2LjI3MjA1NzkwMjE0OTc1LDQzODEuMjM0MDgwMTQzMDI3LDE0MS4zNjc4NjEzNzc2MzQwMyw0OTEuNTg5MTY0NzI5NTE5MjcsNDIxLjk2MDg5NDExMTQ3LDM5MTUuNDI2MTA1NDM1OTExLDY3Ny4zNzUwNzQyNjkxNTQ5LDUxNjMuNjQyMTczMDU1MTgzLDg4MTAuMjM2NjQ0NTczNjk1LDM5NzcuOTg3ODc3NjMxMjgxLDczOC43NTA0Njc1NDc0OTE3LDE2MTguOTA5NDc3Njk2MjE5LDQ1MTcuMDI0NTQ5OTQzMDc0LDU1Ny43NDg0NTEzMjU3NzQ2LDY3MS41NzMyMzkzMjk0MTM0LDEzNi42ODc4ODgyMzEwMjUxNywyNDQ0LjIyMjA0ODA2NDY4ODQsMTI1MjMuNjY2MDQ4MDUzNzM0LDIyMTQuMTE5NTg0MjEyNzQwNCwzMzQwLjA0NTY3NTM1MDY3OCwxNDYuMDUzMDg2NjU2NzYwNDgsMzQwNy44ODIzMzk2MjcwMzksMTE1MS41OTg0OTU1NTA3NDAyLDc2LjQ5OTE0NjcyMzkwNzIyLDEwMS45NjI5ODYwMTUxNTkxNQorMyxUaHUgMjcgSmFuIDExLDYxNDM5MS41NzQ4MjY2NTkyLDQzNTgwNjguMjE0MDYxNzQ1LDI2MTk4ODcuNTQ1NjA2ODU0NCw1MDI4MDA1LjU5Mjk2NjQ4MiwzLjMxOTQyMTQ4NzY0NDU2NUU3LDQyMTUyMjYuNTM2MTM1ODYsMzMzNzQxMy4wMTA0MTU3NTMsNTYwNjE3LjM3Mjg5MjAzLDc2NzA4MS4xMzU1MjQ1MTQ4LDEuNTY2MjY4MjEwMzYyOTE2M0U3LDgwMjI3MDQuNjUyNDUwODIyLDExODczMDQuNDU5MzM1ODU1NCwyODY3NzMyLjgzNzExNjA1MSwxMjY4MDYzLjcxMzU4OTAwMDcsMS4yMTcwODY3MzQyNDk3MDdFNyw1OTU4Nzg0LjAxMDUxMjM0NTUsMjYzNDUzNC4wMjA4NDMyNzc3LDM5NjA4NTAuNDkxMTM1NDczLDQzNzk1NDIuNTYxMzE1NjUyLDYyMjIwODAuNDIzNzQ0NDU0LDUxOTA1MjMuNjQ2MTQ0NTYzLDEyNDk0MDcuNzM2NTQ4Mzg3Nyw5NzM5NjEzLjAyNTczMjkyLDQ4MjEwNzIuNTI3NDMwNTc1LDU0ODMyNzcuMTkzNDk1NDU0LDI3ODc2ODYuODMwMDE4MDIxNiw4ODQxNDQuMDAwOTE2MzkzNiw3ODg4Mjg4LjU4MjM0NDg4LDYyOTM0OC40NTUwNDUxOCwxNjc3MDIyLjM0MjEyMzMzMzEsMTIxMTA2MC45Mjg4NzE2MTY3LDgyNDYwMTYuMzE5MzkxNzgyLDE3ODI2NTIuNDYxNDQ4NTEzNCwxOTU4Mjg5Ljg1OTQyMzQ5MTIsMS44NTk2ODIyMzQzNTc0NUU3LDEuMTEyNTk5MzQ4NzY1OTcyOEU3LDMzODE1OTkuMjMzNjQzOTk3LDMzNTI5NTIuMzU0NjA2Mjk4NywxLjIwMzUzNDY2NjQ5NDk5MDFFNywxMDI3MzQ3LjUzNTU4NTI1OTEsMzkzMTcwOS43NDUxMDg5NzIsNzM5NzM2LjMzNTU4MDQ5NTUsNTU3NTQ2My4xNDU4Mzg3MywyLjA0MzQ2OTQwNDc3ODQzODhFNywyMTg4NDk5LjgxOTYyNzE1Myw2OTM2OTA2Ljk1NTMwNTc5MDUsNTk2NjQzLjg5NzQ1NDc3NDEsNTc3NjIxMi4yODE2NjgzNDMsNTI1NjMzNi44ODg0MDgzODEsMTc3MjA2Ni4zODI5ODQ0NDkyLDQ4MzkwMC4xNzQ5MjYyNzI2Cis0LEZyaSAyOCBKYW4gMTEsNjE0MzkzLjM1OTI3NzQzODYsNDM1ODE1Ny45NjM3Mjc2NDIsMjYxOTkzMS45ODIwNDM0MjgzLDUwMjgwMTkuMzU0NDI0NDUzLDMuMzE5NDIxNTAzOTc2NDY3NkU3LDQyMTUyMzUuNzc2MjQ0Mzc2LDMzMzc0NTMuNjgzNTY4MTgzLDU2MDYxNy44MTk4MDQ1MTQ4LDc2NzkyNy42NTcyNzcyNjA2LDEuNTY2MjczMDQyMDQ0NTMzNEU3LDgwMjI3MjMuOTMyMTc1ODM2LDExODczMDYuMjU5MjYwMjk3MywyODY3Nzk3LjQ5Mzg2NzQwNCwxMjY4MDczLjkzNTg3MTI5NDUsMS4yMTcwOTA3MTIzOTA2MzE2RTcsNTk1ODg3NS4yNjMxMjc5NjksMjYzNDY0OS41OTMyNzIxNzU2LDM5NjA5MzMuNTg2NDE2Niw0Mzc5NTk2LjQ1ODIyNTY3NSw2MjIyMTE1LjA0NjAxNTkyNiw1MTkwNTU2LjI2NjgyNTE1NywxMjQ5NDI0LjUzMzIxMzcwNzYsOTczOTY3NS4wOTQ5MzE1NTQsNDgyMTA4OS40MTMxNzE1ODYsNTQ4MzMwNi43NjgwNTQ0MDIsMjc4Nzc2NC44MDg0NzkwMTM0LDg4NDE1MS4wOTcxMzM4OTQ3LDc4ODgzMjYuNzI0NTkxNjU3NSw2MjkzNTUuOTk2OTUzMTMyMSwxNjc3MDM3LjczMzc4MzAxODgsMTIxMTA3MC4yNzYyMjQ3MzI0LDgyNDYwNjIuOTgxMTUzMzU1LDE3ODI2NjUuMDc0OTA1NzAxMiwxOTU4MjkxLjg1OTE1NDc5NSwxLjg1OTY5Mjc4MTczOTkyODZFNywxLjExMjYwNzcxNjYyMDM2NTJFNywzMzgxNjQwLjkwMzE2NTUxOSwzMzUyOTcxLjAxMjQ2NDAxODUsMS4yMDM1NDMyODg1MTc3NDczRTcsMTAyNzM1Mi42MTc5NDY5NDg2LDM5MzE3NzEuNzM0OTUxNTA5LDczOTc0Ny4xMTU2NDQzMDk3LDU1NzU0OTcuMzI2MTk1MTM4LDIuMDQzNDc4MzU2MzgzMDkxRTcsMjE4ODUwNS42MTc2NTAwNDYsNjkzNjk0NS42NjQzNjUyOTEsNTk2NjUwLjQ1NzM1MDAyMjMsNTc3NjIzOC41NjkzNzkzMzksNTI1NjQwMS40NzM5MDc1MjEsMTc3MjE3Ny4wNzUyMzkzMDEyLDQ4MzkwNi4zNTc1MDIxNzI5Cis1LFNhdCAyOSBKYW4gMTEsNjE0MzkzLjM1NzQ5MDc2NTYsNDM1ODE1Ny44NzQwNzQ3MjcsMjYxOTkzMS45Mzc2NjE1MzQ2LDUwMjgwMTkuMzQwNjM2NTE0LDMuMzE5NDIxNTAzOTEyMDU5MkU3LDQyMTUyMzUuNzY2OTUyMjQsMzMzNzQ1My42NDI5NTU5MTgsNTYwNjE3LjgxOTMxNTY3MDUsNzY3OTI2LjgxMDMwODQwNTcsMS41NjYyNzMwMzcyMDk2NjM3RTcsODAyMjcyMy45MTI4MjIwODQsMTE4NzMwNi4yNTc0MjcwMDg4LDI4Njc3OTcuNDI5Mjc2MTE4LDEyNjgwNzMuOTI1NjY3MTI4NSwxLjIxNzA5MDcwODQxMTc2MDZFNyw1OTU4ODc1LjE3MTk5NDg4NiwyNjM0NjQ5LjQ3Nzc3MjA4ODMsMzk2MDkzMy41MDM0MDk3NjMzLDQzNzk1OTYuNDA0NDA5MDIzLDYyMjIxMTUuMDExNDUzMDMyNSw1MTkwNTU2LjIzNDI2MjkzNSwxMjQ5NDI0LjUxNjQ0MDg0MSw5NzM5Njc1LjAzMjk3Mzg2LDQ4MjEwODkuMzk2MjkwNzM4LDU0ODMzMDYuNzM4NTI5NTk0LDI3ODc3NjQuNzMwNTY4MzEyLDg4NDE1MS4wOTAwNTAyNjU5LDc4ODgzMjYuNjg2NTA3MTYsNjI5MzU1Ljk4OTQyMjYxNjQsMTY3NzAzNy43MTg0MTc2MDE0LDEyMTEwNzAuMjY2ODk0MDkyLDgyNDYwNjIuOTM0NTcyMzMzNSwxNzgyNjY1LjA2MjMxNTAyMSwxOTU4MjkxLjg1NzA1MTM1MywxLjg1OTY5Mjc3MTIxMDgxNzJFNywxLjExMjYwNzcwODI2NzUzMzhFNywzMzgxNjQwLjg2MTU1ODAwNDMsMzM1Mjk3MC45OTM4MzgxNjEsMS4yMDM1NDMyNzk5MTEyODMyRTcsMTAyNzM1Mi42MTI4NzI0OTkzLDM5MzE3NzEuNjczMDQxMzk4Niw3Mzk3NDcuMTA0ODc4ODA0Niw1NTc1NDk3LjI5MjA3NTY5OSwyLjA0MzQ3ODM0NzQ0Mjg5NTVFNywyMTg4NTA1LjYxMTgzODQyOTIsNjkzNjk0NS42MjU3MjI3MjIsNTk2NjUwLjQ1MDgwMDQ4MDcsNTc3NjIzOC41NDMxMjc4NjQsNTI1NjQwMS40MDk0MTgyNzgsMTc3MjE3Ni45NjQ2MDAzMzE0LDQ4MzkwNi4zNTEzMjg2MTQ4Cis2LFN1biAzMCBKYW4gMTEsNjE0MzkzLjM1ODc5NDEyOTMsNDM1ODE1Ny45Mzk0OTgwMzcsMjYxOTkzMS45NzAwNDkxMDUsNTAyODAxOS4zNTA2OTM5NDcsMy4zMTk0MjE1MDM5NTU0ODRFNyw0MjE1MjM1Ljc3MzcyNzU0LDMzMzc0NTMuNjcyNTkzMTQwNSw1NjA2MTcuODE5NjY5MTQ0NSw3Njc5MjcuNDI4NTg4OTExNSwxLjU2NjI3MzA0MDczNjg5NTJFNyw4MDIyNzIzLjkyNjkzNjQ2NiwxMTg3MzA2LjI1ODc2MTk0NzcsMjg2Nzc5Ny40NzY0MTA3NDksMTI2ODA3My45MzMxMTM4MTg1LDEuMjE3MDkwNzExMzE0NjY0NEU3LDU5NTg4NzUuMjM4NDk5Mzg4LDI2MzQ2NDkuNTYyMDU0ODIzLDM5NjA5MzMuNTYzOTgzMTA5LDQzNzk1OTYuNDQzNjgyMjY1NSw2MjIyMTE1LjAzNjY3NTM0OCw1MTkwNTU2LjI1ODAyNTYxMywxMjQ5NDI0LjUyODY4MDk1MjMsOTczOTY3NS4wNzgxODgyOTYsNDgyMTA4OS40MDg2MDczMzcsNTQ4MzMwNi43NjAwNzUyNDcsMjc4Nzc2NC43ODc0MjIwNzQ1LDg4NDE1MS4wOTUyMTk2ODI4LDc4ODgzMjYuNzE0Mjk4NTQ4LDYyOTM1NS45OTQ5MTgwOTMyLDE2NzcwMzcuNzI5NjMwNzk5NSwxMjExMDcwLjI3MzcwMzMwNzQsODI0NjA2Mi45Njg1NjQ5ODQsMTc4MjY2NS4wNzE1MDMyOTIsMTk1ODI5MS44NTg1NzgwNDgyLDEuODU5NjkyNzc4ODk0NDcyNUU3LDEuMTEyNjA3NzE0MzYzMTcxNUU3LDMzODE2NDAuODkxOTIxNTA0NCwzMzUyOTcxLjAwNzQzMDQwNSwxLjIwMzU0MzI4NjE5MjAwNTdFNywxMDI3MzUyLjYxNjU3NTQ5NzcsMzkzMTc3MS43MTgyMjAzMjA1LDczOTc0Ny4xMTI3MzQ5NjkyLDU1NzU0OTcuMzE2OTc0NzE2LDIuMDQzNDc4MzUzOTY2NjE1RTcsMjE4ODUwNS42MTYwNzc0NDAzLDY5MzY5NDUuNjUzOTIyMTk5LDU5NjY1MC40NTU1ODAxMDAxLDU3NzYyMzguNTYyMjgzOTk3LDUyNTY0MDEuNDU2NDc5OTU0NSwxNzcyMTc3LjA0NTMzNTQ4Myw0ODM5MDYuMzU1ODMzODIyMDUKKzcsTW9uIDMxIEphbiAxMSw2MTQzOTMuMzU2NTYyOTk1Miw0MzU4MTU3LjgyNzUzODY4OCwyNjE5OTMxLjkxNDYyNDM1NSw1MDI4MDE5LjMzMzQ3NjI0NDUsMy4zMTk0MjE1MDM4NzU5Njg2RTcsNDIxNTIzNS43NjIxMjQ2NjksMzMzNzQ1My42MjE4NzU2MjEsNTYwNjE3LjgxOTA1OTQ5Nyw3Njc5MjYuMzcxNzQ5NzI1MSwxLjU2NjI3MzAzNDY5OTIyMkU3LDgwMjI3MjMuOTAyNzY5MiwxMTg3MzA2LjI1NjQ3MzIyMTQsMjg2Nzc5Ny4zOTU3NDg3NjMzLDEyNjgwNzMuOTIwMzcwNTU0OCwxLjIxNzA5MDcwNjM0NTkwMzFFNyw1OTU4ODc1LjEyNDY5MDgyOCwyNjM0NjQ5LjQxNzgyMDU5NywzOTYwOTMzLjQ2MDMyMzQ4NjUsNDM3OTU5Ni4zNzY0NzQ4MTksNjIyMjExNC45OTM1MTIyNTA1LDUxOTA1NTYuMjE3MzYwOTQ0NSwxMjQ5NDI0LjUwNzczNDY1MzMsOTczOTY3NS4wMDA4MTM2OCw0ODIxMDg5LjM4NzUyNjU5MSw1NDgzMzA2LjcyMzIwMzg3MiwyNzg3NzY0LjY5MDEyNzI4OCw4ODQxNTEuMDg2MzczNDM3OCw3ODg4MzI2LjY2NjczNzc1MSw2MjkzNTUuOTg1NTEzODExMiwxNjc3MDM3LjcxMDQ0MjAzNTcsMTIxMTA3MC4yNjIwNTA5MjUzLDgyNDYwNjIuOTEwMzkzMjk3LDE3ODI2NjUuMDU1Nzc5NjcxMywxOTU4MjkxLjg1NTk1MzMyNzYsMS44NTk2OTI3NjU3NDU0MjJFNywxLjExMjYwNzcwMzkzMTkwNTVFNywzMzgxNjQwLjgzOTk2MTEwNCwzMzUyOTcwLjk4NDE2OTkxOCwxLjIwMzU0MzI3NTQ0Mzk5NEU3LDEwMjczNTIuNjEwMjM4NDAzNCwzOTMxNzcxLjY0MDkwNTk1Nyw3Mzk3NDcuMDk5MjkwODA3OCw1NTc1NDk3LjI3NDM2NTM1OCwyLjA0MzQ3ODM0MjgwMTk0RTcsMjE4ODUwNS42MDg4MjAyMjgsNjkzNjk0NS42MDU2NjQyODksNTk2NjUwLjQ0NzQwMDg2OTYsNTc3NjIzOC41Mjk1MDA2MzEsNTI1NjQwMS4zNzU5NDQzMzQsMTc3MjE3Ni45MDcxNzM4NzMsNDgzOTA2LjM0ODEyNDE0OTEKKzgsVHVlIDEgRmViIDExLDYxNDM5My4zNTg5OTMyMjc1LDQzNTgxNTcuOTQ5NTEwNjE3LDI2MTk5MzEuOTc1MDA2MDU5LDUwMjgwMTkuMzUyMjI5NjYxLDMuMzE5NDIxNTAzOTU5MTk4N0U3LDQyMTUyMzUuNzc0NzU5ODQzLDMzMzc0NTMuNjc3MTI5NTY4NSw1NjA2MTcuODE5NzIwNTY5Niw3Njc5MjcuNTIzMzgzNzc0OCwxLjU2NjI3MzA0MTI3NTg5NzJFNyw4MDIyNzIzLjkyOTA4OTIxNCwxMTg3MzA2LjI1ODk2Mzg2ODUsMjg2Nzc5Ny40ODM2MjQyMDgsMTI2ODA3My45MzQyNTM3MTY2LDEuMjE3MDkwNzExNzU4MzkyNUU3LDU5NTg4NzUuMjQ4Njc4MjczNSwyNjM0NjQ5LjU3NDk1MTg3MywzOTYwOTMzLjU3MzI1MzM5MSw0Mzc5NTk2LjQ0OTY5MzYxNyw2MjIyMTE1LjA0MDUzNTY4Nyw1MTkwNTU2LjI2MTY2Mjg1MSwxMjQ5NDI0LjUzMDU1NDQzODUsOTczOTY3NS4wODUxMDkwOTgsNDgyMTA4OS40MTA0OTA1NjksNTQ4MzMwNi43NjMzNzI3NjcsMjc4Nzc2NC43OTYxMjI1MTcsODg0MTUxLjA5NjAxMDk4ODUsNzg4ODMyNi43MTg1NTEzOTYsNjI5MzU1Ljk5NTc1OTI2MywxNjc3MDM3LjczMTM0NzI0NDcsMTIxMTA3MC4yNzQ3NDU2MjEzLDgyNDYwNjIuOTczNzY3NzE5LDE3ODI2NjUuMDcyOTA5NzU3NywxOTU4MjkxLjg1ODgwNDg5NzIsMS44NTk2OTI3ODAwNzA0OTM3RTcsMS4xMTI2MDc3MTUyOTYyNTI4RTcsMzM4MTY0MC44OTY1NjkwODYyLDMzNTI5NzEuMDA5NTEwNzMyNywxLjIwMzU0MzI4NzE1MzQxMDJFNywxMDI3MzUyLjYxNzE0MjE3NywzOTMxNzcxLjcyNTEzNTE0OSw3Mzk3NDcuMTEzOTM3NDE2MSw1NTc1NDk3LjMyMDc4NTgzOCwyLjA0MzQ3ODM1NDk2NDc1MTRFNywyMTg4NTA1LjYxNjcyNDU1MjYsNjkzNjk0NS42NTgyMzgyMTEsNTk2NjUwLjQ1NjMxMTcxMTgsNTc3NjIzOC41NjUyMTUxMjQsNTI1NjQwMS40NjM2ODM0NDQsMTc3MjE3Ny4wNTc2ODk0MTMsNDgzOTA2LjM1NjUyMzQwNAorOSxXZWQgMiBGZWIgMTEsNjE0MzkzLjM1NzgwMjIwNTcsNDM1ODE1Ny44ODk4MDExNiwyNjE5OTMxLjk0NTQ0ODE0Nyw1MDI4MDE5LjM0MzAzNjYwOCwzLjMxOTQyMTUwMzkwNzg0NEU3LDQyMTUyMzUuNzY4NTU3ODQ3NSwzMzM3NDUzLjY1MDA4MzM2MSw1NjA2MTcuODE5Mzg3Mjg0MSw3Njc5MjYuOTU5OTAxMjk2NSwxLjU2NjI3MzAzODA1MzQ1OTVFNyw4MDIyNzIzLjkxNjE3ODExOCwxMTg3MzA2LjI1NzczNTk5NSwyODY3Nzk3LjQ0MDYwNTUwNDQsMTI2ODA3My45Mjc0NTgzMjI2LDEuMjE3MDkwNzA5MTA2ODU0N0U3LDU5NTg4NzUuMTg3OTg1MzUsMjYzNDY0OS40OTgwMjMwOSwzOTYwOTMzLjUxNzk3MDE0MTUsNDM3OTU5Ni40MTM4NTM3NTMsNjIyMjExNS4wMTc1MTcxMzU1LDUxOTA1NTYuMjM5OTc3NjEsMTI0OTQyNC41MTkzODQyMTY4LDk3Mzk2NzUuMDQzODQ3NjkxLDQ4MjEwODkuMzk5MjQyNzExLDU0ODMzMDYuNzQzNzA5MjUsMjc4Nzc2NC43NDQyMzE3MjQsODg0MTUxLjA5MTI5MzY5NDUsNzg4ODMyNi42OTMxODU0Nyw2MjkzNTUuOTkwNzQ0MjM5MiwxNjc3MDM3LjcyMTExNDczLDEyMTEwNzAuMjY4NTMxOTM2Nyw4MjQ2MDYyLjk0Mjc0NTQyNiwxNzgyNjY1LjA2NDUyNTAwODIsMTk1ODI5MS44NTczODQzNDcsMS44NTk2OTI3NzMwNTgyNjI1RTcsMS4xMTI2MDc3MDk3MzM3MjU5RTcsMzM4MTY0MC44Njg4NjAwNDMsMzM1Mjk3MC45OTcxMDYwOTIsMS4yMDM1NDMyODE0MjE5NTI5RTcsMTAyNzM1Mi42MTM3NjI0MjcxLDM5MzE3NzEuNjgzOTA0MDE2NCw3Mzk3NDcuMTA2NzY3ODM5Niw1NTc1NDk3LjI5ODA2MzM5OSwyLjA0MzQ3ODM0OTAwOTY5MzRFNywyMTg4NTA1LjYxMjg0OTIxMSw2OTM2OTQ1LjYzMjUwMjY2NCw1OTY2NTAuNDUxOTUwMDE5Miw1Nzc2MjM4LjU0NzcyOTY1OSw1MjU2NDAxLjQyMDczNjA0NCwxNzcyMTc2Ljk4Mzk5Nzg2NjcsNDgzOTA2LjM1MjQxMjAyNzgzCisxMCxUaHUgMyBGZWIgMTEsNjE0MzkzLjM1OTQzMDQ4MDMsNDM1ODE1Ny45NzE0Nzk1NzA1LDI2MTk5MzEuOTg1ODgyMDMzNiw1MDI4MDE5LjM1NTYwMzA0NSwzLjMxOTQyMTUwMzk3MDY0NDZFNyw0MjE1MjM1Ljc3NzAyOTkxOCwzMzM3NDUzLjY4NzA4MjQzNjQsNTYwNjE3LjgxOTgzNjQwNTksNzY3OTI3LjczMDc5ODA5NiwxLjU2NjI3MzA0MjQ1OTQyMzhFNyw4MDIyNzIzLjkzMzgyMDY5MiwxMTg3MzA2LjI1OTQwOTU1MzQsMjg2Nzc5Ny40OTk0NTE2NTk2LDEyNjgwNzMuOTM2NzU0NTU2NiwxLjIxNzA5MDcxMjczMjU3NUU3LDU5NTg4NzUuMjcxMDExMzA1LDI2MzQ2NDkuNjAzMjUwODIyLDM5NjA5MzMuNTkzNTkzNjgyNiw0Mzc5NTk2LjQ2Mjg4MjQ2OCw2MjIyMTE1LjA0OTAwNTUsNTE5MDU1Ni4yNjk2NDI4NTksMTI0OTQyNC41MzQ2NjQ4OTc3LDk3Mzk2NzUuMTAwMjkzMTExLDQ4MjEwODkuNDE0NjI0NDk2LDU0ODMzMDYuNzcwNjA3ODIzNSwyNzg3NzY0LjgxNTIxMjk3OTQsODg0MTUxLjA5Nzc0NzA0NjIsNzg4ODMyNi43Mjc4ODMxMzMsNjI5MzU1Ljk5NzYwNDc3NTgsMTY3NzAzNy43MzUxMTI5OTU4LDEyMTEwNzAuMjc3MDMyMzcyNSw4MjQ2MDYyLjk4NTE4Mjc1MSwxNzgyNjY1LjA3NTk5NTQ0NTUsMTk1ODI5MS44NTkzMTAyNDMzLDEuODU5NjkyNzgyNjUwNzM1NkU3LDEuMTEyNjA3NzE3MzQzMzU4RTcsMzM4MTY0MC45MDY3NjU4NCwzMzUyOTcxLjAxNDA3NTA5NSwxLjIwMzU0MzI4OTI2MjY2MkU3LDEwMjczNTIuNjE4Mzg1NTgzLDM5MzE3NzEuNzQwMzA2NzIwNiw3Mzk3NDcuMTE2NTc1NjMyOCw1NTc1NDk3LjMyOTE0NzM5MSwyLjA0MzQ3ODM1NzE1NTA4RTcsMjE4ODUwNS42MTgxNDYxOTE0LDY5MzY5NDUuNjY3NzA3Nzg1LDU5NjY1MC40NTc5MTY4Mzg1LDU3NzYyMzguNTcxNjQ3MDA2LDUyNTY0MDEuNDc5NDg3ODMyLDE3NzIxNzcuMDg0Nzk2MTAzMiw0ODM5MDYuMzU4MDM2MzQ3ODQKKzExLEZyaSA0IEZlYiAxMSw2MTQzOTMuMzU4MTcwNTc3OSw0MzU4MTU3LjkwODQyODY1OCwyNjE5OTMxLjk1NDY3MTYzNjcsNTAyODAxOS4zNDU4NzQ2MzUsMy4zMTk0MjE1MDM4OTkzODA2RTcsNDIxNTIzNS43NzA0NTM1NjUsMzMzNzQ1My42NTg1MjY2MzIsNTYwNjE3LjgxOTQ2ODk0MjksNzY3OTI3LjEzNTcxNjc5MjUsMS41NjYyNzMwMzkwNTE3NTQ0RTcsODAyMjcyMy45MjAxNDMzOTIsMTE4NzMwNi4yNTgwOTg5ODM3LDI4Njc3OTcuNDU0MDI0NDg0LDEyNjgwNzMuOTI5NTgwMjQxLDEuMjE3MDkwNzA5OTI5MzkxMkU3LDU5NTg4NzUuMjA2OTI3MDIzLDI2MzQ2NDkuNTIyMDAzNzMwOCwzOTYwOTMzLjUzNTIxNjM5NDMsNDM3OTU5Ni40MjUwNDIwOTcsNjIyMjExNS4wMjQ2OTk5MDcsNTE5MDU1Ni4yNDY3NDY5ODQsMTI0OTQyNC41MjI4NzA5Miw5NzM5Njc1LjA1NjcyODQ3NSw0ODIxMDg5LjQwMjczNjY2Miw1NDgzMzA2Ljc0OTg0NDI3LDI3ODc3NjQuNzYwNDE0MTQ4LDg4NDE1MS4wOTI3NjY3MDczLDc4ODgzMjYuNzAxMDk0NzE1LDYyOTM1NS45OTIzMDk4NTY2LDE2NzcwMzcuNzI0MzA5ODcyOCwxMjExMDcwLjI3MDQ3MjE4MDMsODI0NjA2Mi45NTI0MjYzNTMsMTc4MjY2NS4wNjcxNDI5ODI1LDE5NTgyOTEuODU3NzcwNTMyLDEuODU5NjkyNzc1MjQ2NTQzOEU3LDEuMTEyNjA3NzExNDcwNjE1N0U3LDMzODE2NDAuODc3NTEwMTI4LDMzNTI5NzEuMDAwOTc2ODcwMywxLjIwMzU0MzI4MzIxMTUxMzhFNywxMDI3MzUyLjYxNDgxNjQxMTcsMzkzMTc3MS42OTY3NzEzNTc3LDczOTc0Ny4xMDkwMDU1NDAzLDU1NzU0OTcuMzA1MTU2MDk3LDIuMDQzNDc4MzUwODY1MDM0OEU3LDIxODg1MDUuNjE0MDQ0MjE1NSw2OTM2OTQ1LjY0MDUzMzM0Nyw1OTY2NTAuNDUzMzExNzk4Niw1Nzc2MjM4LjU1MzE3OTIyNyw1MjU2NDAxLjQzNDE0MzIxNiwxNzcyMTc3LjAwNjk2NDE3MSw0ODM5MDYuMzUzNjk1NDQzOTUKKzEyLFNhdCA1IEZlYiAxMSw2MTQzOTMuMzU4OTU4NTYwMiw0MzU4MTU3Ljk0Nzg4NTY1NSwyNjE5OTMxLjk3NDIwMzI2NCw1MDI4MDE5LjM1MTk1ODM0NywzLjMxOTQyMTUwMzk0MDU4NjdFNyw0MjE1MjM1Ljc3NDU2MzQ4OSwzMzM3NDUzLjY3NjM5NzQ0MjQsNTYwNjE3LjgxOTY5NTgxMTQsNzY3OTI3LjUwODI0MTc5NCwxLjU2NjI3MzA0MTE4MzI0NDNFNyw4MDIyNzIzLjkyODY5MzcwMSwxMTg3MzA2LjI1ODkxNjMyNywyODY3Nzk3LjQ4MjQ1MjQzMzYsMTI2ODA3My45MzQwNzAxMzMsMS4yMTcwOTA3MTE2ODI5MzExRTcsNTk1ODg3NS4yNDcwMzE2MTUsMjYzNDY0OS41NzI4NDU2NTY0LDM5NjA5MzMuNTcxNzQ4NjA3LDQzNzk1OTYuNDQ4NzIzMzY2LDYyMjIxMTUuMDM5OTEwMjkzLDUxOTA1NTYuMjYxMDc1NTU4LDEyNDk0MjQuNTMwMjUxNzgzNiw5NzM5Njc1LjA4Mzk5MTkyNiw0ODIxMDg5LjQxMDE3Mzc5NSw1NDgzMzA2Ljc2MjgzNzkzNCwyNzg3NzY0Ljc5NDcwNjMxMzQsODg0MTUxLjA5NTg4MzU0NTMsNzg4ODMyNi43MTc4NTc5ODUsNjI5MzU1Ljk5NTYyMzUyOTksMTY3NzAzNy43MzEwNzA3NzgzLDEyMTEwNzAuMjc0NTc3NzMsODI0NjA2Mi45NzI5MjUzMjcsMTc4MjY2NS4wNzI2ODMwNjcsMTk1ODI5MS44NTg3MjYxNjQ4LDEuODU5NjkyNzc5ODgwMDk1RTcsMS4xMTI2MDc3MTUxNDU5MzU1RTcsMzM4MTY0MC44OTU4MTg5NDIsMzM1Mjk3MS4wMDkxNzM3MDk0LDEuMjAzNTQzMjg2OTk4NDcyMkU3LDEwMjczNTIuNjE3MDQ5ODk5MSwzOTMxNzcxLjcyNDAxNjE2NjMsNzM5NzQ3LjExMzc0Mjk5OSw1NTc1NDk3LjMyMDE3MDEzMywyLjA0MzQ3ODM1NDgwMDkxOEU3LDIxODg1MDUuNjE2NjA5MjE3LDY5MzY5NDUuNjU3NTM5MDYzLDU5NjY1MC40NTYxOTM3NDU1LDU3NzYyMzguNTY0NzM1MzcyLDUyNTY0MDEuNDYyNTIwNzk2LDE3NzIxNzcuMDU1NjY4NTY1Miw0ODM5MDYuMzU2NDEyMDYyMzYKKzEzLFN1biA2IEZlYiAxMSw2MTQzOTMuMzU4MzY3NjE0Nyw0MzU4MTU3LjkxODM0MDMyMiwyNjE5OTMxLjk1OTU3ODU3NSw1MDI4MDE5LjM0NzM5NDQzMiwzLjMxOTQyMTUwMzkwMzA5MzJFNyw0MjE1MjM1Ljc3MTQ3NTExOCwzMzM3NDUzLjY2MzAxNzE3MjQsNTYwNjE3LjgxOTUxOTg5LDc2NzkyNy4yMjk1NjY5NzQ4LDEuNTY2MjczMDM5NTg1MTg0M0U3LDgwMjI3MjMuOTIyMjczNzYzLDExODczMDYuMjU4Mjk4Nzk5NiwyODY3Nzk3LjQ2MTE2NTI3MywxMjY4MDczLjkzMDcwODU1ODUsMS4yMTcwOTA3MTAzNjg1MzhFNyw1OTU4ODc1LjIxNzAwMzEzLDI2MzQ2NDkuNTM0NzcxMTc0LDM5NjA5MzMuNTQ0MzkzMjUyLDQzNzk1OTYuNDMwOTkyNjQ4LDYyMjIxMTUuMDI4NTIwODEyLDUxOTA1NTYuMjUwMzQ3MTQyLDEyNDk0MjQuNTI0NzI1NDcxLDk3Mzk2NzUuMDYzNTc4NzM4LDQ4MjEwODkuNDA0NjAwNDgyLDU0ODMzMDYuNzUzMTA4MDg4LDI3ODc3NjQuNzY5MDI3MDI2NCw4ODQxNTEuMDkzNTQ5OTczMSw3ODg4MzI2LjcwNTMwNDAxMSw2MjkzNTUuOTkzMTQyNTE2OCwxNjc3MDM3LjcyNjAwODkwNywxMjExMDcwLjI3MTUwMzg5OTIsODI0NjA2Mi45NTc1NzU5NTUsMTc4MjY2NS4wNjg1MzUxMzQ3LDE5NTgyOTEuODU3OTk1MDk1LDEuODU5NjkyNzc2NDEwNTU3RTcsMS4xMTI2MDc3MTIzOTQyMDg2RTcsMzM4MTY0MC44ODIxMTA3MDMzLDMzNTI5NzEuMDAzMDM1OTQ2MywxLjIwMzU0MzI4NDE2MzEzNTdFNywxMDI3MzUyLjYxNTM3NzI5MDIsMzkzMTc3MS43MDM2MTYzODA3LDczOTc0Ny4xMTAxOTU4NDE0LDU1NzU0OTcuMzA4OTI4MzQ4LDIuMDQzNDc4MzUxODUyOTI5MkU3LDIxODg1MDUuNjE0Njg0NjE1LDY5MzY5NDUuNjQ0ODA1MjczLDU5NjY1MC40NTQwMzYwMDI3LDU3NzYyMzguNTU2MDgwMyw1MjU2NDAxLjQ0MTI3Mzg0NywxNzcyMTc3LjAxOTE5NDA1OSw0ODM5MDYuMzU0Mzc4MDUzNDUKKzE0LE1vbiA3IEZlYiAxMSw2MTQzOTMuMzU5NTgyNjk3NSw0MzU4MTU3Ljk3OTE1NTE5OCwyNjE5OTMxLjk4OTY4MjI2MDQsNTAyODAxOS4zNTY3NzY1MzMsMy4zMTk0MjE1MDM5NzA3NzI0RTcsNDIxNTIzNS43Nzc4MTY1NDMsMzMzNzQ1My42OTA1NjA1ODE2LDU2MDYxNy44MTk4NzMzNjc5LDc2NzkyNy44MDMzMTg1NzExLDEuNTY2MjczMDQyODcxNzAxRTcsODAyMjcyMy45MzU0NjMyODYsMTE4NzMwNi4yNTk1NjIwMjExLDI4Njc3OTcuNTA0OTgxMzI3LDEyNjgwNzMuOTM3NjI4NTQ4LDEuMjE3MDkwNzEzMDcyMTA4OEU3LDU5NTg4NzUuMjc4ODE1MTQsMjYzNDY0OS42MTMxMzU0ODgyLDM5NjA5MzMuNjAwNzAwMjI0LDQzNzk1OTYuNDY3NDkxNDUsNjIyMjExNS4wNTE5NjQ1Niw1MTkwNTU2LjI3MjQzMTI3NiwxMjQ5NDI0LjUzNjEwMTI5MzMsOTczOTY3NS4xMDU1OTg4NzMsNDgyMTA4OS40MTYwNjYwODEsNTQ4MzMwNi43NzMxMzUzNTUsMjc4Nzc2NC44MjE4ODIwOTA1LDg4NDE1MS4wOTgzNTM3NjE1LDc4ODgzMjYuNzMxMTQyMjc0LDYyOTM1NS45OTgyNDk3MTU5LDE2NzcwMzcuNzM2NDI5MDYyMiwxMjExMDcwLjI3NzgzMTUzNDQsODI0NjA2Mi45ODkxNzA4ODEsMTc4MjY2NS4wNzcwNzM3NzE1LDE5NTgyOTEuODU5NDc3NzUxNywxLjg1OTY5Mjc4MzU1MjIxMjNFNywxLjExMjYwNzcxODA1ODc2MjNFNywzMzgxNjQwLjkxMDMyOTIwMTcsMzM1Mjk3MS4wMTU2Njk3MjM1LDEuMjAzNTQzMjg5OTk5NzY3NkU3LDEwMjczNTIuNjE4ODE5ODc0MSwzOTMxNzcxLjc0NTYwODA2LDczOTc0Ny4xMTc0OTc1MjQ4LDU1NzU0OTcuMzMyMDY5MDQ1LDIuMDQzNDc4MzU3OTE5ODA3N0U3LDIxODg1MDUuNjE4NjQwNTEsNjkzNjk0NS42NzEwMTYxNDMsNTk2NjUwLjQ1ODQ3Nzc4NjksNTc3NjIzOC41NzM4OTI5MzcsNTI1NjQwMS40ODUwMTA4NDUsMTc3MjE3Ny4wOTQyNjM2NjM1LDQ4MzkwNi4zNTg1NjUwNTQ4MworMTUsVHVlIDggRmViIDExLDYxNDM5My4zNTkxMjk2NzE0LDQzNTgxNTcuOTU2NTM1OTMzLDI2MTk5MzEuOTc4NDg2MzExNiw1MDI4MDE5LjM1MzI3NjgwMywzLjMxOTQyMTUwMzkzNzYyNUU3LDQyMTUyMzUuNzc1NDQ0ODQxLDMzMzc0NTMuNjgwMzE3ODg0Myw1NjA2MTcuODE5NzM0NjYwOSw3Njc5MjcuNTg5OTc3MzE3OCwxLjU2NjI3MzA0MTY0NjkwNjVFNyw4MDIyNzIzLjkzMDUzNjU0NywxMTg3MzA2LjI1OTA4NTU2NjUsMjg2Nzc5Ny40ODg2ODQwNzksMTI2ODA3My45MzUwNTUzMDY5LDEuMjE3MDkwNzEyMDY0OTI4RTcsNTk1ODg3NS4yNTU4MjcyMjUsMjYzNDY0OS41ODM5ODMyNjksMzk2MDkzMy41Nzk3NTc0ODkzLDQzNzk1OTYuNDUzOTE4NDMzLDYyMjIxMTUuMDQzMjQ1MDM2LDUxOTA1NTYuMjY0MjE4Mzc0LDEyNDk0MjQuNTMxODcwNzkzLDk3Mzk2NzUuMDg5OTcyMDksNDgyMTA4OS40MTE3OTYyOTMsNTQ4MzMwNi43NjU2ODYyNDcsMjc4Nzc2NC44MDIyMjE1Nzc2LDg4NDE1MS4wOTY1Njc0NDIzLDc4ODgzMjYuNzIxNTMwMDg1LDYyOTM1NS45OTYzNTA0ODY0LDE2NzcwMzcuNzMyNTU0MjczLDEyMTEwNzAuMjc1NDc4NTQ4Niw4MjQ2MDYyLjk3NzQxOTg4NSwxNzgyNjY1LjA3Mzg5ODUyNzUsMTk1ODI5MS44NTg5MDc3MTIyLDEuODU5NjkyNzgwODk2MDQ2NEU3LDEuMTEyNjA3NzE1OTUyMzM3MkU3LDMzODE2NDAuODk5ODM1NDI0NSwzMzUyOTcxLjAxMDk3MDc5NDYsMS4yMDM1NDMyODc4MjkzMjJFNywxMDI3MzUyLjYxNzUzOTIzOTgsMzkzMTc3MS43Mjk5OTExODcsNzM5NzQ3LjExNDc4MjA2ODYsNTU3NTQ5Ny4zMjM0NjMwNTQsMi4wNDM0NzgzNTU2NjIzNDRFNywyMTg4NTA1LjYxNzE2NDQyMzcsNjkzNjk0NS42NjEyNjc0NjUsNTk2NjUwLjQ1NjgyNjA0MTgsNTc3NjIzOC41NjcyNjU1NDIsNTI1NjQwMS40Njg3NDYxMjUsMTc3MjE3Ny4wNjYzMzU1ODYsNDgzOTA2LjM1NzAwNzk5NDQKKzE2LFdlZCA5IEZlYiAxMSw2MTQzOTMuMzU4NzEzMzY5Niw0MzU4MTU3LjkzNTgxNDg3MiwyNjE5OTMxLjk2ODIzMDc2MzUsNTAyODAxOS4zNTAwNTg3MzIsMy4zMTk0MjE1MDM4OTc5MTE3RTcsNDIxNTIzNS43NzMyNTY3NDMsMzMzNzQ1My42NzA5MzY3NTIsNTYwNjE3LjgxOTU5OTE1NjQsNzY3OTI3LjM5NDQ2MjA3NTMsMS41NjYyNzMwNDA1MjIwMjk2RTcsODAyMjcyMy45MjU5OTgzOTMsMTE4NzMwNi4yNTg2NDEzMzEsMjg2Nzc5Ny40NzM3NTM5NDEsMTI2ODA3My45MzI2OTg2NTYsMS4yMTcwOTA3MTExNDAzNDEzRTcsNTk1ODg3NS4yMzQ3NzEwNzgsMjYzNDY0OS41NTcyNzA1MDczLDM5NjA5MzMuNTYwNTcyMTE2Niw0Mzc5NTk2LjQ0MTQ4NzA2OCw2MjIyMTE1LjAzNTI1NzI0NSw1MTkwNTU2LjI1NjY5NTgwNiwxMjQ5NDI0LjUyNzk5NjAwMjIsOTczOTY3NS4wNzU2NTg5OTYsNDgyMTA4OS40MDc4Nzg1MDMsNTQ4MzMwNi43NTg4NjE5MTMsMjc4Nzc2NC43ODQyMDg4MTIsODg0MTUxLjA5NDkzMTQ3NjUsNzg4ODMyNi43MTI3MjIwODksNjI5MzU1Ljk5NDYxMTAyMDcsMTY3NzAzNy43MjkwMDU2NDMsMTIxMTA3MC4yNzMzMjM1OTM3LDgyNDYwNjIuOTY2NjU1Mjg4LDE3ODI2NjUuMDcwOTkwNDIxNiwxOTU4MjkxLjg1ODM2Mzc3OTcsMS44NTk2OTI3Nzg0NjI4NTE4RTcsMS4xMTI2MDc3MTQwMjMxNzc1RTcsMzM4MTY0MC44OTAyMjQyOTQ3LDMzNTI5NzEuMDA2NjY2MTk1LDEuMjAzNTQzMjg1ODQxNDkxM0U3LDEwMjczNTIuNjE2MzY1ODEyNywzOTMxNzcxLjcxNTY4NjQ5LDczOTc0Ny4xMTIyOTQ4NTQ0LDU1NzU0OTcuMzE1NTgwMjQ0LDIuMDQzNDc4MzUzNTkzMTU1RTcsMjE4ODUwNS42MTU4MDY2MDQzLDY5MzY5NDUuNjUyMzM2OTI0LDU5NjY1MC40NTUzMTMyODE5LDU3NzYyMzguNTYxMTkxNjE2LDUyNTY0MDEuNDUzODQ5NDcxLDE3NzIxNzcuMDQwNzQyNDQwNCw0ODM5MDYuMzU1NTgxODgyMgorMTcsVGh1IDEwIEZlYiAxMSw2MTQzOTMuMzU4NjcyODQ3NSw0MzU4MTU3LjkzMzgxNDMzNSwyNjE5OTMxLjk2NzI0MDgxNCw1MDI4MDE5LjM0OTc0NDk3NywzLjMxOTQyMTUwMzg5MTczOTZFNyw0MjE1MjM1Ljc3MzA0MTU5ODUsMzMzNzQ1My42NzAwMzE0ODQsNTYwNjE3LjgxOTU4Mzk3MDYsNzY3OTI3LjM3NTcwMzM4MzcsMS41NjYyNzMwNDA0MTI2OTMxRTcsODAyMjcyMy45MjU1NTM5NjMsMTE4NzMwNi4yNTg1OTY0OTQ4LDI4Njc3OTcuNDcyMzEyMzc2NCwxMjY4MDczLjkzMjQ3MTI3LDEuMjE3MDkwNzExMDUwNTgwM0U3LDU5NTg4NzUuMjMyNzM4NzcsMjYzNDY0OS41NTQ2OTAxNjEsMzk2MDkzMy41NTg3MTk4MTI0LDQzNzk1OTYuNDQwMjg3NDQ4NSw2MjIyMTE1LjAzNDQ4NTk1ODUsNTE5MDU1Ni4yNTU5Njk3MjY1LDEyNDk0MjQuNTI3NjIyMDU4OCw5NzM5Njc1LjA3NDI3NzUzOSw0ODIxMDg5LjQwNzQ5ODYxOCw1NDgzMzA2Ljc1ODIwMjg4MSwyNzg3NzY0Ljc4MjQ2OTMsODg0MTUxLjA5NDc3MzYyNjcsNzg4ODMyNi43MTE4NzA5ODUsNjI5MzU1Ljk5NDQ0MzE2NjUsMTY3NzAzNy43Mjg2NjMyNTM2LDEyMTEwNzAuMjczMTE1NjYyOSw4MjQ2MDYyLjk2NTYxNTk0NiwxNzgyNjY1LjA3MDcwOTc5MzYsMTk1ODI5MS44NTgzMDU4MzczLDEuODU5NjkyNzc4MjI3OTI1RTcsMS4xMTI2MDc3MTM4MzcwMjk2RTcsMzM4MTY0MC44ODkyOTY4MjQ2LDMzNTI5NzEuMDA2MjUwNTUwNSwxLjIwMzU0MzI4NTY0OTY3MkU3LDEwMjczNTIuNjE2MjUyNDQyMiwzOTMxNzcxLjcxNDMwNTc4Miw3Mzk3NDcuMTEyMDU0ODAzNCw1NTc1NDk3LjMxNDgxOTM0NCwyLjA0MzQ3ODM1MzM5MzA2MjJFNywyMTg4NTA1LjYxNTY3NDA4OSw2OTM2OTQ1LjY1MTQ3NDYxOCw1OTY2NTAuNDU1MTY3MzEzLDU3NzYyMzguNTYwNjA0NDQ2LDUyNTY0MDEuNDUyNDExOTUzLDE3NzIxNzcuMDM4MjcwMDMyNSw0ODM5MDYuMzU1NDQ0MjU4ODQKKzE4LEZyaSAxMSBGZWIgMTEsNjE0MzkzLjM1NTI3Njk3NTMsNDM1ODE1Ny43NjQ2MTE3MTgsMjYxOTkzMS44ODM0OTQzNTA2LDUwMjgwMTkuMzIzNTAwMDI1LDMuMzE5NDIxNTAzNTkzMjQ1RTcsNDIxNTIzNS43NTUyMTY1NzIsMzMzNzQ1My41OTM0MjE5NDIsNTYwNjE3LjgxODUwMDgzOTksNzY3OTI1Ljc3OTgyNzkwMDMsMS41NjYyNzMwMzEyMzUwNzUyRTcsODAyMjcyMy44ODg1NjQ4NjUsMTE4NzMwNi4yNTQ5OTAzOTg3LDI4Njc3OTcuMzUwMzk4NDcyNSwxMjY4MDczLjkxMzIyNTYyNCwxLjIxNzA5MDcwMzUwNTkwNTlFNyw1OTU4ODc1LjA2MDc5MjQsMjYzNDY0OS4zMzY1ODE2MTEsMzk2MDkzMy40MDIwNTc2NDQsNDM3OTU5Ni4zMzg3Njg3OTIsNjIyMjExNC45NjkyNTk0MDU1LDUxOTA1NTYuMTk0NTM5MDI0NSwxMjQ5NDI0LjQ5NTk3OTU5LDk3Mzk2NzQuOTU3MzkzNjQzLDQ4MjEwODkuMzc1NTI0MTUyLDU0ODMzMDYuNzAyNDc3ODAzLDI3ODc3NjQuNjM1Mzg4MTY3Niw4ODQxNTEuMDgxNDEzNDc1Nyw3ODg4MzI2LjYzOTk1MzUyOCw2MjkzNTUuOTgwMjM4MDYzOCwxNjc3MDM3LjY5OTY4MzI0OTIsMTIxMTA3MC4yNTU1MTcyMjM4LDgyNDYwNjIuODc3NzEzODU5LDE3ODI2NjUuMDQ2OTYwOTk5NywxOTU4MjkxLjg1MzkyNDMwMjgsMS44NTk2OTI3NTgzNTg4MDFFNywxLjExMjYwNzY5ODA4MjU4NDdFNywzMzgxNjQwLjgxMDgwOTE1MiwzMzUyOTcwLjk3MTEwMDEyNSwxLjIwMzU0MzI2OTQxNjE5M0U3LDEwMjczNTIuNjA2NjcxMjA5OCwzOTMxNzcxLjU5NzQ5Mjg0NTcsNzM5NzQ3LjA5MTc0Mzg0MjYsNTU3NTQ5Ny4yNTA0NDczNzgsMi4wNDM0NzgzMzY0OTk3MjA4RTcsMjE4ODUwNS42MDQ2MDE4NTk2LDY5MzY5NDUuNTc4NTQ5NjY4LDU5NjY1MC40NDI4MTM0NTYyLDU3NzYyMzguNTExMDEzNDcxLDUyNTY0MDEuMzMwNzYwODkyNSwxNzcyMTc2LjgyOTMwOTg3LDQ4MzkwNi4zNDM3OTgyMDcwNgorMTksU2F0IDEyIEZlYiAxMSw2MTQzOTMuMzU5MTM1OTg0Myw0MzU4MTU3Ljk1Njk5NzA2MiwyNjE5OTMxLjk3ODcxNjM5MTYsNTAyODAxOS4zNTMzMjA5NzQsMy4zMTk0MjE1MDM5MTczMjhFNyw0MjE1MjM1Ljc3NTQ1ODQ2NywzMzM3NDUzLjY4MDUzMTA2ODcsNTYwNjE3LjgxOTcxODYzMTEsNzY3OTI3LjU5NDM1ODgwMDcsMS41NjYyNzMwNDE2NjUzODg4RTcsODAyMjcyMy45MzA1ODA5NjYsMTE4NzMwNi4yNTkwNzc4NTUyLDI4Njc3OTcuNDg5MDE1MTIxNSwxMjY4MDczLjkzNTEwOTE2LDEuMjE3MDkwNzEyMDgxMDkwN0U3LDU5NTg4NzUuMjU2MzAxNjE1LDI2MzQ2NDkuNTg0NTYyNTg3NiwzOTYwOTMzLjU4MDE4NDEyMDcsNDM3OTU5Ni40NTQyMDA4NDE1LDYyMjIxMTUuMDQzNDIyNTI1LDUxOTA1NTYuMjY0Mzg4MDc5LDEyNDk0MjQuNTMxOTU4NTQwNCw5NzM5Njc1LjA5MDI5NTQwMiw0ODIxMDg5LjQxMTg2ODk3Nyw1NDgzMzA2Ljc2NTgzNzA5MywyNzg3NzY0LjgwMjYxNzcwMzYsODg0MTUxLjA5NjYwNDgyMzUsNzg4ODMyNi43MjE3MjAyMDgsNjI5MzU1Ljk5NjM5MDAzNzEsMTY3NzAzNy43MzI2MzU0MTUsMTIxMTA3MC4yNzU1Mjc3NDQ4LDgyNDYwNjIuOTc3NjU5Njg3LDE3ODI2NjUuMDczOTY0Njk0NywxOTU4MjkxLjg1ODg3MDY4ODgsMS44NTk2OTI3ODA5NTAyNjlFNywxLjExMjYwNzcxNTk5NjM0NDRFNywzMzgxNjQwLjkwMDA1Mzc1NCwzMzUyOTcxLjAxMTA2NjQ0NCwxLjIwMzU0MzI4Nzg3NDU3ODdFNywxMDI3MzUyLjYxNzU2NDcxNSwzOTMxNzcxLjczMDMxMzA4NCw3Mzk3NDcuMTE0ODM4MjE3NCw1NTc1NDk3LjMyMzY0MDQ0MiwyLjA0MzQ3ODM1NTcwNTY1NTdFNywyMTg4NTA1LjYxNzE4MTg2OSw2OTM2OTQ1LjY2MTQ2NTk5MSw1OTY2NTAuNDU2ODYwNTI0OCw1Nzc2MjM4LjU2NzM5NDM2MSw1MjU2NDAxLjQ2OTA4NDU1NiwxNzcyMTc3LjA2Njg4NjM3MzYsNDgzOTA2LjM1NzA0MDM0OTg2CisyMCxTdW4gMTMgRmViIDExLDYxNDM5My4zNTY2Nzk3MDQ2LDQzNTgxNTcuODM0NzU5NDI5LDI2MTk5MzEuOTE4MjE2OTczNSw1MDI4MDE5LjMzNDMzMjk4NiwzLjMxOTQyMTUwMzY4MDM5M0U3LDQyMTUyMzUuNzYyNTQ1NzEsMzMzNzQ1My42MjUxOTAxMjc2LDU2MDYxNy44MTg5MTcxMDA2LDc2NzkyNi40NDE1NTYxNzMzLDEuNTY2MjczMDM1MDI4NTI5MkU3LDgwMjI3MjMuOTAzODAxNywxMTg3MzA2LjI1NjQ1NTAwMzcsMjg2Nzc5Ny40MDA5MzkyMzM2LDEyNjgwNzMuOTIxMjA2ODM0NSwxLjIxNzA5MDcwNjYyNjA4NTZFNyw1OTU4ODc1LjEzMjA4NzUzNiwyNjM0NjQ5LjQyNjk3ODc3NCwzOTYwOTMzLjQ2NzAwNTgwNjUsNDM3OTU5Ni4zODA4NjYwNDksNjIyMjExNC45OTYzMDAxNzk1LDUxOTA1NTYuMjIwMDEwNjA5LDEyNDk0MjQuNTA5MTAwNDU5Nyw5NzM5Njc1LjAwNTg1OTAyOSw0ODIxMDg5LjM4ODc1NDc5OCw1NDgzMzA2LjcyNTU3ODIwNSwyNzg3NzY0LjY5NjM1NjY5Nyw4ODQxNTEuMDg2OTUzOTUzNiw3ODg4MzI2LjY2OTc1ODQxNSw2MjkzNTUuOTg2MTI4NjI0NiwxNjc3MDM3LjcxMTcwMTQyMDEsMTIxMTA3MC4yNjI4MTUyNDk2LDgyNDYwNjIuOTE0MTU2MjI1NSwxNzgyNjY1LjA1NjgwOTE2NzQsMTk1ODI5MS44NTU2NTYwOTc5LDEuODU5NjkyNzY2NTk2MTU1MkU3LDEuMTEyNjA3NzA0NjE1ODQ5NEU3LDMzODE2NDAuODQzMzU2MDE1NiwzMzUyOTcwLjk4NTY3MjMyOTYsMS4yMDM1NDMyNzYxNDc5NTI3RTcsMTAyNzM1Mi42MTA2NDIyMzE1LDM5MzE3NzEuNjQ1OTI3MDI0NSw3Mzk3NDcuMTAwMTY1Njg3Niw1NTc1NDk3LjI3NzEzNzc1MywyLjA0MzQ3ODM0MzQ5ODUxNDJFNywyMTg4NTA1LjYwOTE3MDAxLDY5MzY5NDUuNjA4NzgyMDk0LDU5NjY1MC40NDc5MzY0OTEzLDU3NzYyMzguNTMxNTYxNTc4LDUyNTY0MDEuMzgxMjA2NTg1LDE3NzIxNzYuOTE1OTA4MjE4OCw0ODM5MDYuMzQ4NjI3NDYyNzUKKzIxLE1vbiAxNCBGZWIgMTEsNjE0MzkzLjM1ODI1OTExMTIsNDM1ODE1Ny45MTMzODEzMjQsMjYxOTkzMS45NTcxMjk3NDQzLDUwMjgwMTkuMzQ2NTQxNzI5LDMuMzE5NDIxNTAzODI5NjkwNEU3LDQyMTUyMzUuNzcwODQ1ODU0LDMzMzc0NTMuNjYwNzg1MzMyMyw1NjA2MTcuODE5NDI5ODc0NCw3Njc5MjcuMTgzMzMwNTcyMiwxLjU2NjI3MzAzOTI5NjI4OTNFNyw4MDIyNzIzLjkyMTAxNzQwNjUsMTE4NzMwNi4yNTgxMzk0MTIyLDI4Njc3OTcuNDU3NTg4NTM2LDEyNjgwNzMuOTMwMTQ4ODE0MywxLjIxNzA5MDcxMDEzNDAwOTZFNyw1OTU4ODc1LjIxMTk4MTMzNzUsMjYzNDY0OS41MjgzMzM2MzA0LDM5NjA5MzMuNTM5ODAwODExLDQzNzk1OTYuNDI4MDM0ODYsNjIyMjExNS4wMjY2MDg1MDUsNTE5MDU1Ni4yNDg1NTM4NjIsMTI0OTQyNC41MjM4MDI3MDM1LDk3Mzk2NzUuMDYwMTY3OTI3LDQ4MjEwODkuNDAzNjE5MzQsNTQ4MzMwNi43NTE0NzE5NDcsMjc4Nzc2NC43NjQ3MDIxMDY0LDg4NDE1MS4wOTMxNjEzOTUzLDc4ODgzMjYuNzAzMTc4NTYsNjI5MzU1Ljk5MjcyODc1MTQsMTY3NzAzNy43MjUxNjYxODY3LDEyMTEwNzAuMjcwOTkxOTIyMSw4MjQ2MDYyLjk1NTAwMDcxMSwxNzgyNjY1LjA2Nzg0MzU1OTcsMTk1ODI5MS44NTc3MTY1MzQsMS44NTk2OTI3NzU4Mjg1MTFFNywxLjExMjYwNzcxMTkzNTc3NEU3LDMzODE2NDAuODc5ODIzOTAwMywzMzUyOTcxLjAwMjAwNTQxLDEuMjAzNTQzMjgzNjkwNDkzN0U3LDEwMjczNTIuNjE1MDk0NTcwOCwzOTMxNzcxLjcwMDIwMzYyMSw3Mzk3NDcuMTA5NjAyOTkwMyw1NTc1NDk3LjMwNzA0Nzg2MywyLjA0MzQ3ODM1MTM0OTU1MjdFNywyMTg4NTA1LjYxNDMyMTIzNjUsNjkzNjk0NS42NDI2Njc1MzIsNTk2NjUwLjQ1MzY3NjQyNzgsNTc3NjIzOC41NTQ2MDc3MjYsNTI1NjQwMS40Mzc3Mjk1NDQsMTc3MjE3Ny4wMTMwMTQ1MDM4LDQ4MzkwNi4zNTQwMzg2MTE5CisyMixUdWUgMTUgRmViIDExLDYxNDM5My4zNTczNTgxNDQ2LDQzNTgxNTcuODY4NTUyMzEyLDI2MTk5MzEuOTM0OTQyMzkxNyw1MDI4MDE5LjMzOTU3NjY4OSwzLjMxOTQyMTUwMzc0MTc5RTcsNDIxNTIzNS43NjYxMDg1MDcsMzMzNzQ1My42NDA0ODk3OTk0LDU2MDYxNy44MTkxMzUwMjEzLDc2NzkyNi43NjEwNjc3MzYyLDEuNTY2MjczMDM2ODYxOTQ4NUU3LDgwMjI3MjMuOTExMTkzNTczLDExODczMDYuMjU3MTc2NjYxOSwyODY3Nzk3LjQyNTI4Nzg5OSwxMjY4MDczLjkyNTA1MDMxNjQsMS4yMTcwOTA3MDgxMzMyMDkzRTcsNTk1ODg3NS4xNjY0Mjc0OTMsMjYzNDY0OS40NzA1NDI2NzM1LDM5NjA5MzMuNDk4Mjk0MTg0NSw0Mzc5NTk2LjQwMTE0MDMyODUsNjIyMjExNS4wMDkzMjY3MDMsNTE5MDU1Ni4yMzIyNzg4NiwxMjQ5NDI0LjUxNTQxOTgxMjksOTczOTY3NS4wMjkyMDE3MzcsNDgyMTA4OS4zOTUxNDE2NjUsNTQ4MzMwNi43MzY3MDcyMjksMjc4Nzc2NC43MjU3MzI0MDcsODg0MTUxLjA4OTYyMjA2MzQsNzg4ODMyNi42ODQxMjE2Mzk1LDYyOTM1NS45ODg5NjU1MTkxLDE2NzcwMzcuNzE3NDg4OTI3NSwxMjExMDcwLjI2NjMyOTc3NDYsODI0NjA2Mi45MzE3MTEyNzYsMTc4MjY2NS4wNjE1NTE5NzA3LDE5NTgyOTEuODU2NTM1MjgxMywxLjg1OTY5Mjc3MDU2NDI0NDNFNywxLjExMjYwNzcwNzc2MjExODJFNywzMzgxNjQwLjg1OTAzMDc4MDQsMzM1Mjk3MC45OTI2OTIyODk0LDEuMjAzNTQzMjc5Mzg5ODkyN0U3LDEwMjczNTIuNjEyNTU1NzY2MSwzOTMxNzcxLjY2OTI1NjE2NDcsNzM5NzQ3LjEwNDIyMjAzOCw1NTc1NDk3LjI4OTk5MzQzMiwyLjA0MzQ3ODM0Njg3MjUzMjdFNywyMTg4NTA1LjYxMTM4MjMyNTYsNjkzNjk0NS42MjMzNDYwNzIsNTk2NjUwLjQ1MDQwMzY2MTEsNTc3NjIzOC41NDE0NjU5ODUsNTI1NjQwMS40MDU1MDE1MDEsMTc3MjE3Ni45NTc2NDcwMDMsNDgzOTA2LjM1MDk1MzMwMDQKKzIzLFdlZCAxNiBGZWIgMTEsNjE0MzkzLjM1OTQxNDg4Miw0MzU4MTU3Ljk3MDkzMTY3MjUsMjYxOTkzMS45ODU2MTM3MjY1LDUwMjgwMTkuMzU1NDc1MjQ1LDMuMzE5NDIxNTAzOTM2NTAyM0U3LDQyMTUyMzUuNzc2OTE3NDE4LDMzMzc0NTMuNjg2ODQxMjQ2Nyw1NjA2MTcuODE5ODAzMDMyMiw3Njc5MjcuNzI1OTg3MzA0NywxLjU2NjI3MzA0MjQxOTQ5NjZFNyw4MDIyNzIzLjkzMzYxMjU5MjUsMTE4NzMwNi4yNTkzNzAzNDQsMjg2Nzc5Ny40OTkwNTUwMDgsMTI2ODA3My45MzY2OTQ0NDYsMS4yMTcwOTA3MTI3MDEyNzE3RTcsNTk1ODg3NS4yNzA0NjM1NCwyNjM0NjQ5LjYwMjUyMTU2NTcsMzk2MDkzMy41OTMwODU4OTA2LDQzNzk1OTYuNDYyNTYyNzE1LDYyMjIxMTUuMDQ4NzkzOTcyLDUxOTA1NTYuMjY5NDQ3NjAyLDEyNDk0MjQuNTM0NTY0Nzk2OCw5NzM5Njc1LjA5OTkyMjI0Miw0ODIxMDg5LjQxNDQ5ODM5Myw1NDgzMzA2Ljc3MDQyNTg3OCwyNzg3NzY0LjgxNDcyOTQzNTQsODg0MTUxLjA5NzcwNTMxMzQsNzg4ODMyNi43Mjc2NDEyMDI1LDYyOTM1NS45OTc1NjAwODg5LDE2NzcwMzcuNzM1MDIyNTUyLDEyMTEwNzAuMjc2OTc3MzM0Niw4MjQ2MDYyLjk4NDg5ODYzNSwxNzgyNjY1LjA3NTkyMDgzMDIsMTk1ODI5MS44NTkyMTkwODQ1LDEuODU5NjkyNzgyNTg2NTQzNkU3LDEuMTEyNjA3NzE3Mjk0MDM0MkU3LDMzODE2NDAuOTA2NTE4NjExNiwzMzUyOTcxLjAxMzk2MTEwMTQsMS4yMDM1NDMyODkyMTE3MDE2RTcsMTAyNzM1Mi42MTgzNTM1Nzk1LDM5MzE3NzEuNzM5OTMzOTkzLDczOTc0Ny4xMTY1MTExMDQ0LDU1NzU0OTcuMzI4OTQyMDk1LDIuMDQzNDc4MzU3MDk2MTQyM0U3LDIxODg1MDUuNjE4MDkwNDEsNjkzNjk0NS42Njc0NzE0MjUsNTk2NjUwLjQ1Nzg3ODExMjEsNTc3NjIzOC41NzE0NzY2MTQsNTI1NjQwMS40NzkxMDQ2OTUsMTc3MjE3Ny4wODQwOTE0Mzc1LDQ4MzkwNi4zNTc5OTk2MDAxCisyNCxUaHUgMTcgRmViIDExLDYxNDM5My4zNTczMTYwMTEsNDM1ODE1Ny44NjY2NDE3NjYsMjYxOTkzMS45MzM5OTkwNjIsNTAyODAxOS4zMzkyNDUxNjcsMy4zMTk0MjE1MDM3MTE1MDdFNyw0MjE1MjM1Ljc2NTg2MjQ5NzUsMzMzNzQ1My42Mzk2MzAyMTQzLDU2MDYxNy44MTkwOTg4NTMsNzY3OTI2Ljc0MzI1MTExODcsMS41NjYyNzMwMzY3NDk4OTE2RTcsODAyMjcyMy45MTA3MDM2MiwxMTg3MzA2LjI1NzExMzYxNjQsMjg2Nzc5Ny40MjM5MDk4MDU3LDEyNjgwNzMuOTI0ODM0NzEyMiwxLjIxNzA5MDcwODA0MjMyODhFNyw1OTU4ODc1LjE2NDQ5MzE0NDUsMjYzNDY0OS40NjgwNjEzMjQ3LDM5NjA5MzMuNDk2NTI0ODM3LDQzNzk1OTYuNDAwMDAxMTQyLDYyMjIxMTUuMDA4NTg5NDExLDUxOTA1NTYuMjMxNTg3Nzc1LDEyNDk0MjQuNTE1MDY0Mzk3NCw5NzM5Njc1LjAyNzg4NzM1Miw0ODIxMDg5LjM5NDc2MTg2LDU0ODMzMDYuNzM2MDc2MzIyLDI3ODc3NjQuNzI0MDY1Nzk4Myw4ODQxNTEuMDg5NDcyMzg5LDc4ODgzMjYuNjgzMzAxNTMzLDYyOTM1NS45ODg4MDYxNTk1LDE2NzcwMzcuNzE3MTY0MzU3NCwxMjExMDcwLjI2NjEzMjU1ODcsODI0NjA2Mi45MzA3MTg0NTgsMTc4MjY2NS4wNjEyODU1MzUsMTk1ODI5MS44NTY0MjM4MTIyLDEuODU5NjkyNzcwMzM5ODU1RTcsMS4xMTI2MDc3MDc1ODU1MjA3RTcsMzM4MTY0MC44NTgxNTAwMjMsMzM1Mjk3MC45OTIyOTQ5NjUsMS4yMDM1NDMyNzkyMDc4MDY1RTcsMTAyNzM1Mi42MTI0NDY2OTQ0LDM5MzE3NzEuNjY3OTQxNTc2Myw3Mzk3NDcuMTAzOTkzNjgzOSw1NTc1NDk3LjI4OTI2ODY4NCwyLjA0MzQ3ODM0NjY3ODE1ODNFNywyMTg4NTA1LjYxMTI0MDk0Nyw2OTM2OTQ1LjYyMjUyMTg3Miw1OTY2NTAuNDUwMjY1MTc1NSw1Nzc2MjM4LjU0MDg5NzUzOSw1MjU2NDAxLjQwNDEzNjQyMSwxNzcyMTc2Ljk1NTI2NDc0NjIsNDgzOTA2LjM1MDgyMjU2MzE3CisyNSxGcmkgMTggRmViIDExLDYxNDM5My4zNTkwODYyODQ0LDQzNTgxNTcuOTU0NjE2MjA0LDI2MTk5MzEuOTc3NTM5MDYyNSw1MDI4MDE5LjM1MjkzMzkxMSwzLjMxOTQyMTUwMzg5OTYyNUU3LDQyMTUyMzUuNzc1MTg1MTI1LDMzMzc0NTMuNjc5NDU1NjYyLDU2MDYxNy44MTk2OTEzODI1LDc2NzkyNy41NzI0Mzc3MDczLDEuNTY2MjczMDQxNTMxOTgwNkU3LDgwMjI3MjMuOTMwMDI0MDU1LDExODczMDYuMjU5MDE1ODk3MywyODY3Nzk3LjQ4NzI5ODk2ODIsMTI2ODA3My45MzQ4MzkxNDksMS4yMTcwOTA3MTE5NzIwNDE0RTcsNTk1ODg3NS4yNTM4ODU1MiwyNjM0NjQ5LjU4MTQ4NTUyNiwzOTYwOTMzLjU3Nzk3OTUzMjUsNDM3OTU5Ni40NTI3NzU3MjA1LDYyMjIxMTUuMDQyNTA0MDc2LDUxOTA1NTYuMjYzNTI0NzQ2LDEyNDk0MjQuNTMxNTE0MTgwNiw5NzM5Njc1LjA4ODY1MzAxMSw0ODIxMDg5LjQxMTQwOTUxLDU0ODMzMDYuNzY1MDUxOTE3LDI3ODc3NjQuODAwNTQ1NDU4LDg4NDE1MS4wOTY0MTczODE5LDc4ODgzMjYuNzIwNzAzOTI1LDYyOTM1NS45OTYxOTA2NDU4LDE2NzcwMzcuNzMyMjI4ODg0NywxMjExMDcwLjI3NTI4MDgwOTUsODI0NjA2Mi45NzY0MjIzNDEsMTc4MjY2NS4wNzM2MzEzMDY5LDE5NTgyOTEuODU4Nzc3OTI1LDEuODU5NjkyNzgwNjcwNTk1RTcsMS4xMTI2MDc3MTU3NzUyNTk2RTcsMzM4MTY0MC44OTg5NTE5MzY1LDMzNTI5NzEuMDEwNTcxNDkxNCwxLjIwMzU0MzI4NzY0NjcxRTcsMTAyNzM1Mi42MTc0Mjk0MTQzLDM5MzE3NzEuNzI4NjcxNDY5LDczOTc0Ny4xMTQ1NTI4ODUsNTU3NTQ5Ny4zMjI3MzU0NzksMi4wNDM0NzgzNTU0NjYwNjAzRTcsMjE4ODUwNS42MTcwMTc4MTUsNjkzNjk0NS42NjA0MzkxOTQsNTk2NjUwLjQ1NjY4NzE2ODUsNTc3NjIzOC41NjY2OTIwOTksNTI1NjQwMS40NjczNzY4MjYsMTc3MjE3Ny4wNjM5MzY4NTIyLDQ4MzkwNi4zNTY4NzY4Mzc5CisyNixTYXQgMTkgRmViIDExLDYxNDM5My4zNTYwNzA0NzYxLDQzNTgxNTcuODA0ODE2MjU2LDI2MTk5MzEuOTAzNDAxMjU1LDUwMjgwMTkuMzI5NjExODEzLDMuMzE5NDIxNTAzNTY5MzJFNyw0MjE1MjM1Ljc1OTI5NDA2NiwzMzM3NDUzLjYxMTY0MzgyNSw1NjA2MTcuODE4NjczNjAxOCw3Njc5MjYuMTYxNjY3MzE0OCwxLjU2NjI3MzAzMzM4NTk2NTJFNyw4MDIyNzIzLjg5NzA5ODYxMSwxMTg3MzA2LjI1NTc2ODQ0NjcsMjg2Nzc5Ny4zNzkzNjE2MDI1LDEyNjgwNzMuOTE3ODA0NDA0NiwxLjIxNzA5MDcwNTI3ODQ1OThFNyw1OTU4ODc1LjEwMTY3MzI0NCwyNjM0NjQ5LjM4ODM0Njg0NCwzOTYwOTMzLjQzOTI4MTA3NSw0Mzc5NTk2LjM2MjkxNTAyMyw2MjIyMTE0Ljk4NDc1NDM3Niw1MTkwNTU2LjIwOTE0MzkxMTUsMTI0OTQyNC41MDM1MDQ1ODg3LDk3Mzk2NzQuOTg1MTg0MTg3LDQ4MjEwODkuMzgzMDU1MTIsNTQ4MzMwNi43MTU3MTIwNTMsMjc4Nzc2NC42NzAzMTY5NDgsODg0MTUxLjA4NDU5MjAwODYsNzg4ODMyNi42NTcwMTI2MzksNjI5MzU1Ljk4MzYxNjg5NSwxNjc3MDM3LjcwNjU3ODI4MSwxMjExMDcwLjI1OTcwMzg4MDksODI0NjA2Mi44OTg1OTgzMjcsMTc4MjY2NS4wNTI2MDk3NjgsMTk1ODI5MS44NTQ3NDY0NjI1LDEuODU5NjkyNzYzMDc5NTQ2RTcsMS4xMTI2MDc3MDE4MzAzOTEyRTcsMzM4MTY0MC44Mjk0Nzc0MTY0LDMzNTI5NzAuOTc5NDUwMzI1LDEuMjAzNTQzMjczMjc3NTM0N0U3LDEwMjczNTIuNjA4OTQ0NTc3MiwzOTMxNzcxLjYyNTI2MzkwMzgsNzM5NzQ3LjA5NjU3MzMxNzEsNTU3NTQ5Ny4yNjU3NDk1MDQsMi4wNDM0NzgzNDA1MDA3ODczRTcsMjE4ODUwNS42MDcxNzQ5NTg2LDY5MzY5NDUuNTk1ODczODM2LDU5NjY1MC40NDU3NTIzMTA5LDU3NzYyMzguNTIyNzY2MzAyLDUyNTY0MDEuMzU5Njk1NjkyLDE3NzIxNzYuODc4ODkwNTk5NCw0ODM5MDYuMzQ2NTY4MDQ1OTYKKzI3LFN1biAyMCBGZWIgMTEsNjE0MzkzLjM1ODE5OTU3NzgsNDM1ODE1Ny45MTA1OTQ3NjIsMjYxOTkzMS45NTU3NTI1Myw1MDI4MDE5LjM0NjA3NjA2ODUsMy4zMTk0MjE1MDM3OTk0MDJFNyw0MjE1MjM1Ljc3MDUwOTk0MiwzMzM3NDUzLjY1OTUyODQzNzUsNTYwNjE3LjgxOTM4OTQ5ODcsNzY3OTI3LjE1ODE5MzM5OTEsMS41NjYyNzMwMzkxMzcxMDVFNyw4MDIyNzIzLjkyMDMzOTcwNywxMTg3MzA2LjI1ODA1ODk0OTYsMjg2Nzc5Ny40NTU1Nzk0NzY0LDEyNjgwNzMuOTI5ODMzMzMzNywxLjIxNzA5MDcxMDAwNDMxN0U3LDU5NTg4NzUuMjA5MTU1ODQ1LDI2MzQ2NDkuNTI0NzI2OTYxMywzOTYwOTMzLjUzNzIyMDQzMSw0Mzc5NTk2LjQyNjM2OTE5NSw2MjIyMTE1LjAyNTUzMjk5Miw1MTkwNTU2LjI0NzU0NDA3NywxMjQ5NDI0LjUyMzI4MzIyOTcsOTczOTY3NS4wNTgyNDcxMjUsNDgyMTA4OS40MDMwNzQ3NDYsNTQ4MzMwNi43NTA1NTIxMzUsMjc4Nzc2NC43NjIyNzQ5NTQ1LDg4NDE1MS4wOTI5NDIzODcxLDc4ODgzMjYuNzAxOTg1OTEzLDYyOTM1NS45OTI0OTU3MTg5LDE2NzcwMzcuNzI0NjkxMjM2NCwxMjExMDcwLjI3MDcwMzM3NzQsODI0NjA2Mi45NTM1NTIwNDksMTc4MjY2NS4wNjc0NTM4ODUyLDE5NTgyOTEuODU3NTg1OTU3NSwxLjg1OTY5Mjc3NTUwMTA4MjVFNywxLjExMjYwNzcxMTY3NzQxOEU3LDMzODE2NDAuODc4NTM2MTA1LDMzNTI5NzEuMDAxNDI1ODE3NiwxLjIwMzU0MzI4MzQyNDE2NjRFNywxMDI3MzUyLjYxNDkzNTg1NywzOTMxNzcxLjY5ODI4MzY4NDQsNzM5NzQ3LjEwOTI2OTM1NDUsNTU3NTQ5Ny4zMDU5ODkxNzcsMi4wNDM0NzgzNTEwNjc3NjNFNywyMTg4NTA1LjYxNDEyMzM1NSw2OTM2OTQ1LjY0MTQ2NTE4NCw1OTY2NTAuNDUzNDczODU3NCw1Nzc2MjM4LjU1Mzc4MjU1MSw1MjU2NDAxLjQzNTczMzU3OCwxNzcyMTc3LjAwOTU1NjU3MTMsNDgzOTA2LjM1Mzg0NzQ4NDM0CisyOCxNb24gMjEgRmViIDExLDYxNDM5My4zNTY4Mjk1Nzk2LDQzNTgxNTcuODQyNTYxNzkzNSwyNjE5OTMxLjkyMjA4MjI3ODQsNTAyODAxOS4zMzU0ODA5ODYsMy4zMTk0MjE1MDM2NDcxMTA2RTcsNDIxNTIzNS43NjMyODg5NzYsMzMzNzQ1My42Mjg3MzEzMjg1LDU2MDYxNy44MTg5MjUyNDQ0LDc2NzkyNi41MTgwODkwMzU0LDEuNTY2MjczMDM1NDM2NzQ5M0U3LDgwMjI3MjMuOTA1Mzc5OTY5LDExODczMDYuMjU2NTgyMTgxLDI4Njc3OTcuNDA2NTU4NzIyNywxMjY4MDczLjkyMjA5NjkxMzQsMS4yMTcwOTA3MDY5NjM4MzkyRTcsNTk1ODg3NS4xNDAwMjc1ODUsMjYzNDY0OS40MzcwMTE1MDUsMzk2MDkzMy40NzQyMjkyODc0LDQzNzk1OTYuMzg1NTU4NDczLDYyMjIxMTQuOTk5MzA1MDQxLDUxOTA1NTYuMjIyODQ2NDQ3LDEyNDk0MjQuNTEwNTYyNTA1OCw5NzM5Njc1LjAxMTI1NTcxMyw0ODIxMDg5LjM5MDE5NTU2NCw1NDgzMzA2LjcyODE0MzU1NiwyNzg3NzY0LjcwMzEzMDQwNyw4ODQxNTEuMDg3NTcxODMwNCw3ODg4MzI2LjY3MzA1ODg2Nyw2MjkzNTUuOTg2Nzg1MjgzOSwxNjc3MDM3LjcxMzA0MTg5NjcsMTIxMTA3MC4yNjM2MjkwMjQ2LDgyNDYwNjIuOTE4MjA3MDk3LDE3ODI2NjUuMDU3OTA2ODAwMiwxOTU4MjkxLjg1NTc0OTc3OTgsMS44NTk2OTI3Njc1MTE4NDRFNywxLjExMjYwNzcwNTM0NDI2OTZFNywzMzgxNjQwLjg0Njk4Mzg3NSwzMzUyOTcwLjk4NzI5MTY0MiwxLjIwMzU0MzI3Njg5ODMwNDZFNywxMDI3MzUyLjYxMTA4MjI2NSwzOTMxNzcxLjY1MTMyMDQwMDYsNzM5NzQ3LjEwMTEwMzgxNTYsNTU3NTQ5Ny4yODAxMDgzNDIsMi4wNDM0NzgzNDQyNzA3NDY0RTcsMjE4ODUwNS42MDk2NTE2NzksNjkzNjk0NS42MTIxNDE4MDMsNTk2NjUwLjQ0ODUwNzczOSw1Nzc2MjM4LjUzMzgzMjI2LDUyNTY0MDEuMzg2ODI5NjA5LDE3NzIxNzYuOTI1NTE3Mjc2Miw0ODM5MDYuMzQ5MTY1Njg4MTUKKzI5LFR1ZSAyMiBGZWIgMTEsNjE0MzkzLjM1OTYyMjg5MTksNDM1ODE1Ny45ODEzMDY0MzMsMjYxOTkzMS45OTA3NDg3Nzg1LDUwMjgwMTkuMzU3MDgyNTM1NSwzLjMxOTQyMTUwMzk1MzM3NzVFNyw0MjE1MjM1Ljc3ODAwNzk2NSwzMzM3NDUzLjY5MTUzODgyMTQsNTYwNjE3LjgxOTg2ODIzMDYsNzY3OTI3LjgyNDAxNjkwNTQsMS41NjYyNzMwNDI5ODE3NTYzRTcsODAyMjcyMy45MzU4NzY2ODMsMTE4NzMwNi4yNTk1OTAyNzksMjg2Nzc5Ny41MDY1MzAxNzczLDEyNjgwNzMuOTM3ODc0NTY1MSwxLjIxNzA5MDcxMzE2MzU1NjdFNyw1OTU4ODc1LjI4MTAwNjgxNSwyNjM0NjQ5LjYxNTg5NDU0OSwzOTYwOTMzLjYwMjY5MTcxMSw0Mzc5NTk2LjQ2ODc4NzY3MSw2MjIyMTE1LjA1Mjc5MzIwMSw1MTkwNTU2LjI3MzIxNDI4MywxMjQ5NDI0LjUzNjUwNTA0NzcsOTczOTY3NS4xMDcwODkxMTUsNDgyMTA4OS40MTY0NTc4NDksNTQ4MzMwNi43NzM4NDI0ODgsMjc4Nzc2NC44MjM3NDc2MDUsODg0MTUxLjA5ODUyNDU0MDcsNzg4ODMyNi43MzIwNTAyNzcsNjI5MzU1Ljk5ODQzMTEyNDEsMTY3NzAzNy43MzY3OTk1Nzg2LDEyMTEwNzAuMjc4MDU2NDQ0Niw4MjQ2MDYyLjk5MDI4ODIwOCwxNzgyNjY1LjA3NzM3NzA1MjMsMTk1ODI5MS44NTk0ODQ1NDcsMS44NTk2OTI3ODM4MDQ3ODg4RTcsMS4xMTI2MDc3MTgyNjAwN0U3LDMzODE2NDAuOTExMzMxMzQ2LDMzNTI5NzEuMDE2MTE2Mjc2LDEuMjAzNTQzMjkwMjA3MTAzNUU3LDEwMjczNTIuNjE4OTQwOTkwMiwzOTMxNzcxLjc0NzA5NjYxOTYsNzM5NzQ3LjExNzc1NjUyMTcsNTU3NTQ5Ny4zMzI4ODkwODYsMi4wNDM0NzgzNTgxMzE3MzQ3RTcsMjE4ODUwNS42MTg3Njg0MTU0LDY5MzY5NDUuNjcxOTQyNjczLDU5NjY1MC40NTg2MzU2MzU4LDU3NzYyMzguNTc0NTE2NzQ5LDUyNTY0MDEuNDg2NTY0MTQsMTc3MjE3Ny4wOTY5MDM2MTczLDQ4MzkwNi4zNTg3MTM3MTQ5MworMzAsV2VkIDIzIEZlYiAxMSw2MTQzOTMuMzU4MjgyMjY1Nyw0MzU4MTU3LjkxNDg0MzUzNCwyNjE5OTMxLjk1Nzg1Njk3NSw1MDI4MDE5LjM0NjcxMTEyOCwzLjMxOTQyMTUwMzc4ODYzNzdFNyw0MjE1MjM1Ljc3MDkyNzE1MzUsMzMzNzQ1My42NjE0NTU3NjcsNTYwNjE3LjgxOTQwMDYzMzMsNzY3OTI3LjE5ODUxNzM0NjYsMS41NjYyNzMwMzkzNjE4MDUxRTcsODAyMjcyMy45MjEyMTkzNjgsMTE4NzMwNi4yNTgxMzQzOTc0LDI4Njc3OTcuNDU4NjM5Nzk5NiwxMjY4MDczLjkzMDMxNzcyNTMsMS4yMTcwOTA3MTAxODk4NzczRTcsNTk1ODg3NS4yMTM0NzgyOSwyNjM0NjQ5LjUzMDE5MTU2NjMsMzk2MDkzMy41NDExNTQwMzY4LDQzNzk1OTYuNDI4OTIzMTEsNjIyMjExNS4wMjcxNzAxNDcsNTE5MDU1Ni4yNDkwODgyMiwxMjQ5NDI0LjUyNDA3OTAzNjcsOTczOTY3NS4wNjExODU1MjYsNDgyMTA4OS40MDM4NjQ3ODQsNTQ4MzMwNi43NTE5NTAxMTUsMjc4Nzc2NC43NjU5NjQzNjcsODg0MTUxLjA5MzI3ODY0NDUsNzg4ODMyNi43MDM3ODYxMDYsNjI5MzU1Ljk5Mjg1MzEwNjEsMTY3NzAzNy43MjU0MjA2OTc2LDEyMTEwNzAuMjcxMTQ2MjY1Myw4MjQ2MDYyLjk1NTc1ODg4OCwxNzgyNjY1LjA2ODA1MTM0OCwxOTU4MjkxLjg1NzY1NDIzMjMsMS44NTk2OTI3NzU5OTk5MjdFNywxLjExMjYwNzcxMjA3Mzg2NjVFNywzMzgxNjQwLjg4MDUxMDYxOSwzMzUyOTcxLjAwMjMwODA3NywxLjIwMzU0MzI4MzgzMjU4NzFFNywxMDI3MzUyLjYxNTE3NTgxNiwzOTMxNzcxLjcwMTIxOTg0OTgsNzM5NzQ3LjEwOTc4MDAzMDIsNTU3NTQ5Ny4zMDc2MDY4NTcsMi4wNDM0NzgzNTE0ODk0NDYzRTcsMjE4ODUwNS42MTQzOTAyNDgsNjkzNjk0NS42NDMyOTU2NDQsNTk2NjUwLjQ1Mzc4NDczODgsNTc3NjIzOC41NTUwMjE4NzksNTI1NjQwMS40Mzg3OTM5ODA1LDE3NzIxNzcuMDE0Nzg4ODUyOCw0ODM5MDYuMzU0MTQwNDMwOQorMzEsVGh1IDI0IEZlYiAxMSw2MTQzOTMuMzU4MzA4Nzk1NSw0MzU4MTU3LjkxNjE2OTczMiwyNjE5OTMxLjk1ODUxMzM5Myw1MDI4MDE5LjM0NjkxNjAzOSwzLjMxOTQyMTUwMzc5MDQwNUU3LDQyMTUyMzUuNzcxMDY1ODg1LDMzMzc0NTMuNjYyMDU2MjgxLDU2MDYxNy44MTk0MDg2MzE5LDc2NzkyNy4yMTExODc3NzM1LDEuNTY2MjczMDM5NDMzNTQyNkU3LDgwMjI3MjMuOTIxNTA3Njg1LDExODczMDYuMjU4MTYyMTg3MiwyODY3Nzk3LjQ1OTU5NTM0MjYsMTI2ODA3My45MzA0Njg1ODMyLDEuMjE3MDkwNzEwMjQ4ODc3MUU3LDU5NTg4NzUuMjE0ODI2MDU4LDI2MzQ2NDkuNTMxOTAxMTYzNSwzOTYwOTMzLjU0MjM4MTk0MDQsNDM3OTU5Ni40Mjk3MTg4NzQsNjIyMjExNS4wMjc2ODEyNyw1MTkwNTU2LjI0OTU2OTY3NiwxMjQ5NDI0LjUyNDMyNzA2Niw5NzM5Njc1LjA2MjEwMTU5OSw0ODIxMDg5LjQwNDExNDkzOSw1NDgzMzA2Ljc1MjM4Njc2MSwyNzg3NzY0Ljc2NzExNzE1NTcsODg0MTUxLjA5MzM4MzM2ODgsNzg4ODMyNi43MDQzNDk1LDYyOTM1NS45OTI5NjQ0NTQ4LDE2NzcwMzcuNzI1NjQ3ODY0NiwxMjExMDcwLjI3MTI4NDIwOTgsODI0NjA2Mi45NTY0NDc3MTcsMTc4MjY2NS4wNjgyMzc0OTM1LDE5NTgyOTEuODU3Njg3Mjg1MiwxLjg1OTY5Mjc3NjE1NTYyODNFNywxLjExMjYwNzcxMjE5NzM1NTRFNywzMzgxNjQwLjg4MTEyNTg1MywzMzUyOTcxLjAwMjU4MzUyLDEuMjAzNTQzMjgzOTU5ODI3NkU3LDEwMjczNTIuNjE1MjUwODc4NSwzOTMxNzcxLjcwMjEzNTQ2MDUsNzM5NzQ3LjEwOTkzOTIzNTQsNTU3NTQ5Ny4zMDgxMTEzNDksMi4wNDM0NzgzNTE2MjE3NDg1RTcsMjE4ODUwNS42MTQ0NzY2NjQsNjkzNjk0NS42NDM4NjcwOTQsNTk2NjUwLjQ1Mzg4MTU3NzIsNTc3NjIzOC41NTU0MTAzMDUsNTI1NjQwMS40Mzk3NDc1NTYsMTc3MjE3Ny4wMTY0MjY5OTU0LDQ4MzkwNi4zNTQyMzE3MTkzCiszMixGcmkgMjUgRmViIDExLDYxNDM5My4zNTcyNDYxNTUzLDQzNTgxNTcuODYzNTU2NjY4LDI2MTk5MzEuOTMyNDc2NTI0Myw1MDI4MDE5LjMzODY5MzA4MiwzLjMxOTQyMTUwMzY1MDI3NEU3LDQyMTUyMzUuNzY1NDQ0NDE5LDMzMzc0NTMuNjM4MjQzOTU5LDU2MDYxNy44MTkwMjk5NjIsNzY3OTI2LjcxNjI1NzM3MjUsMS41NjYyNzMwMzY1NjQ4NTc5RTcsODAyMjcyMy45MDk4Nzg1MjYsMTE4NzMwNi4yNTcwMDE2NTc3LDI4Njc3OTcuNDIxNjg0MDU3NSwxMjY4MDczLjkyNDQ4NzA1MzksMS4yMTcwOTA3MDc4OTI3ODUyRTcsNTk1ODg3NS4xNjEzNzE5MTcsMjYzNDY0OS40NjQwNTExMjIzLDM5NjA5MzMuNDkzNjY3NjIzNSw0Mzc5NTk2LjM5ODE2MzkzNSw2MjIyMTE1LjAwNzM5NzIxMiw1MTkwNTU2LjIzMDQ3MTg5MywxMjQ5NDI0LjUxNDQ5MTA5MzMsOTczOTY3NS4wMjU3NjUyOTQsNDgyMTA4OS4zOTQxMzkxODY1LDU0ODMzMDYuNzM1MDU1NjYyLDI3ODc3NjQuNzIxMzczMDQzNSw4ODQxNTEuMDg5MjMxMDM4Niw3ODg4MzI2LjY4MTk3MjAyOSw2MjkzNTUuOTg4NTQ5MTY4OSwxNjc3MDM3LjcxNjY0MTA4MDgsMTIxMTA3MC4yNjU4MTQ1MTI1LDgyNDYwNjIuOTI5MTEzNDUyLDE3ODI2NjUuMDYwODU1Njk0OCwxOTU4MjkxLjg1NjIxNjIyNCwxLjg1OTY5Mjc2OTk3NzExNUU3LDEuMTEyNjA3NzA3MzAwNjk3M0U3LDMzODE2NDAuODU2NzI5NTksMzM1Mjk3MC45OTE2NTI0OTI0LDEuMjAzNTQzMjc4OTE0MDY3M0U3LDEwMjczNTIuNjEyMjY5OTYxNSwzOTMxNzcxLjY2NTgyMDIyNCw3Mzk3NDcuMTAzNjI1MjYzMiw1NTc1NDk3LjI4ODA5ODE1MywyLjA0MzQ3ODM0NjM2MjI0OTZFNywyMTg4NTA1LjYxMTAwNDg5Niw2OTM2OTQ1LjYyMTE4OTE5OCw1OTY2NTAuNDUwMDQxODgwOCw1Nzc2MjM4LjUzOTk3NDY0OSw1MjU2NDAxLjQwMTkzNDkxOSwxNzcyMTc2Ljk1MTQxNjI1NSw0ODM5MDYuMzUwNjExNzAxOQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTSVN0YXRlc09ubHlfUktfUmVmZXJlbmNlL1Rlc3RTSS9odW1hbi9JbmNpZGVuY2VfMC5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNJU3RhdGVzT25seV9SS19SZWZlcmVuY2UvVGVzdFNJL2h1bWFuL0luY2lkZW5jZV8wLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NTYyYWFjCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTSVN0YXRlc09ubHlfUktfUmVmZXJlbmNlL1Rlc3RTSS9odW1hbi9JbmNpZGVuY2VfMC5jc3YKQEAgLTAsMCArMSwzMyBAQAoraXRlcmF0aW9uLHRpbWUsc3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vbm9kZS90cmFuc3BvcnQvcGlwZS9VU0EKKzEsVHVlIDI1IEphbiAxMSwwLjAKKzIsV2VkIDI2IEphbiAxMSwyOTM1MDMuNDI3MTc3MzM2OAorMyxUaHUgMjcgSmFuIDExLDEwNTIwNTIuNjA2NTg2MTc0NgorNCxGcmkgMjggSmFuIDExLDM2OTc0Mi4yMDc1NDExMDc0MworNSxTYXQgMjkgSmFuIDExLDM2OTczOC43MDg0MzM0NzkzNgorNixTdW4gMzAgSmFuIDExLDM2OTczOC43MTQ5Nzk4MDE0NAorNyxNb24gMzEgSmFuIDExLDM2OTczOC43MDc1Njc4OTkxCis4LFR1ZSAxIEZlYiAxMSwzNjk3MzguNzE3Mzk0MTMwNzcKKzksV2VkIDIgRmViIDExLDM2OTczOC43MDk1OTYxMDI2CisxMCxUaHUgMyBGZWIgMTEsMzY5NzM4LjcxNTU5OTYwNzkKKzExLEZyaSA0IEZlYiAxMSwzNjk3MzguNzA5MzAzMjQ5CisxMixTYXQgNSBGZWIgMTEsMzY5NzM4LjcxMzc5NDA5NTMKKzEzLFN1biA2IEZlYiAxMSwzNjk3MzguNzEwNzU4NzU5MQorMTQsTW9uIDcgRmViIDExLDM2OTczOC43MTQ3MDUxMzQ3NAorMTUsVHVlIDggRmViIDExLDM2OTczOC43MTEwMTQyMzgyCisxNixXZWQgOSBGZWIgMTEsMzY5NzM4LjcxMTA5NTgxOTYKKzE3LFRodSAxMCBGZWIgMTEsMzY5NzM4LjcxMTkzMzE1NjYKKzE4LEZyaSAxMSBGZWIgMTEsMzY5NzM4LjcwNDQ5ODM5MjgKKzE5LFNhdCAxMiBGZWIgMTEsMzY5NzM4LjcyMDYxMjA3ODUKKzIwLFN1biAxMyBGZWIgMTEsMzY5NzM4LjcwNjU1NjQ2NzIKKzIxLE1vbiAxNCBGZWIgMTEsMzY5NzM4LjcxNTUzOTc4OTA2CisyMixUdWUgMTUgRmViIDExLDM2OTczOC43MTAwMTY5NDE5NAorMjMsV2VkIDE2IEZlYiAxMSwzNjk3MzguNzE2NTkxMzUyNAorMjQsVGh1IDE3IEZlYiAxMSwzNjk3MzguNzA3MzM4Nzg1NjQKKzI1LEZyaSAxOCBGZWIgMTEsMzY5NzM4LjcxNTk1NDQzNjg2CisyNixTYXQgMTkgRmViIDExLDM2OTczOC43MDUzMDE4NjIxCisyNyxTdW4gMjAgRmViIDExLDM2OTczOC43MTY3NjAxNjQxCisyOCxNb24gMjEgRmViIDExLDM2OTczOC43MDg5NjYwOTQ5NAorMjksVHVlIDIyIEZlYiAxMSwzNjk3MzguNzE4MjMxMTM1MzQKKzMwLFdlZCAyMyBGZWIgMTEsMzY5NzM4LjcwOTAyMDQwMzMKKzMxLFRodSAyNCBGZWIgMTEsMzY5NzM4LjcxMjA2NzcyMTYKKzMyLEZyaSAyNSBGZWIgMTEsMzY5NzM4LjcwOTY0NTI5NjU2CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNJU3RhdGVzT25seV9SS19SZWZlcmVuY2UvVGVzdFNJL2h1bWFuL0luY2lkZW5jZV8xLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0lTdGF0ZXNPbmx5X1JLX1JlZmVyZW5jZS9UZXN0U0kvaHVtYW4vSW5jaWRlbmNlXzEuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE3ZmFkNmEKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNJU3RhdGVzT25seV9SS19SZWZlcmVuY2UvVGVzdFNJL2h1bWFuL0luY2lkZW5jZV8xLmNzdgpAQCAtMCwwICsxLDMzIEBACitpdGVyYXRpb24sdGltZSxVUy1BSyxVUy1BTCxVUy1BUixVUy1BWixVUy1DQSxVUy1DTyxVUy1DVCxVUy1EQyxVUy1ERSxVUy1GTCxVUy1HQSxVUy1ISSxVUy1JQSxVUy1JRCxVUy1JTCxVUy1JTixVUy1LUyxVUy1LWSxVUy1MQSxVUy1NQSxVUy1NRCxVUy1NRSxVUy1NSSxVUy1NTixVUy1NTyxVUy1NUyxVUy1NVCxVUy1OQyxVUy1ORCxVUy1ORSxVUy1OSCxVUy1OSixVUy1OTSxVUy1OVixVUy1OWSxVUy1PSCxVUy1PSyxVUy1PUixVUy1QQSxVUy1SSSxVUy1TQyxVUy1TRCxVUy1UTixVUy1UWCxVUy1VVCxVUy1WQSxVUy1WVCxVUy1XQSxVUy1XSSxVUy1XVixVUy1XWQorMSxUdWUgMjUgSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyLFdlZCAyNiBKYW4gMTEsNTc4Ljc5ODQ5ODY4NDExNzIsNTgxLjgzMzkzMjA1NjA0MzIsNDI0LjU3ODI1ODA3NzI5Nzk2LDUwMjUuNjQ3NDgzNzQ0MSwzLjE3MDk0NzY3MzYwNjUyMTZFNyw1MjU3Ljg0MTU0MDIyODUzLDc1Mi4zMzE2MzA3NDk2NjI3LDE5NDguODI3MjQwNTY1NTYzLDEuOTE2MDE2NjIzMjA2MjUxLDEzODk0Ljk2MTI4NzYyMjA4Miw5MTI5Ljc3Mzg1OTg2MDUyNSwyMTQyLjE1NDgzNDYzNjc1MTMsMzQ5Ljc0NzEzMjA0NzQ4MTA1LDQzMS43NjI3MjM5ODUzMzEwNCwxMDE5Mi4xOTczMTYxOTIwMjksMTA2OS4zODgzMTQ2OTU3NzkyLDE2NS4yMzYwNTcwMTE5NTExNSw1MTkuMTAzODIzNDE4NDg4OCw5NzcuNjg0Mzg2MjgyNjE5MiwzMDY2LjA1ODA1NTk2MjUzMTQsMjI2NS40MzExMjY1MDkwMDUsMjU1LjM2MzI3NjIyMTkxNTM4LDQxOTIuMjM5OTUzODEzMjQ0LDM3NjguNTI5ODQ3NTk0MDg0NSwyNzg3LjMwOTEwMzYyMDQyMzIsMjc0LjA5NjI1NTI0ODU1NDIsMzAyLjM2MDYyODcyMjY5NDUsNDQ3MS4yODA0ODU0NDgxNzMsMTQ0LjI3MjkwNTA2MjMyOTQsNTAxLjY5MTQyMDI5NzYzNyw0MzAuNjMyNTAxNTQ5NTUxMywzOTk1Ljg5NTgwODk4NjMxMDQsNjkxLjI5NTgzOTE3MjU5MDcsNTI2OS44NzM4NDQ5NjQzNzEsODk5MS4zMDQyMzQ4NzQ4MDQsNDA1OS43Mzg4MTM1NDkwMzQ2LDc1My45MzE0MDEyMDQ1OTcxLDE2NTIuMTgxMzc1OTQzNjk5Myw0NjA5Ljg1MzkxNDkxMDg1OSw1NjkuMjExNjQ3NTQ2MzYzMSw2ODUuMzczNDA1Mjk3Mjc1MSwxMzkuNDk2NzA3NzIxOTEyMzQsMjQ5NC40NTQ3NTAzNjU4OTMyLDEyNzgxLjA2ODgxMDk0NzA2OCwyMjU5LjYzNTY1MzYzNTE2OCwzNDA4LjY5MDM5NjI4ODM2NDQsMTQ5LjA1NDQzODE1ODgzMDUyLDM0NzcuOTI0ODM2MjYwOTA2NCwxMTc1LjI2MzI0NjEwMTg5ODQsNzguMDcxMDMzNjY5MjcyNzgsMTA0LjA1ODI2NDA4MzQ0NzE0CiszLFRodSAyNyBKYW4gMTEsNzczMDAwLjQyNjczNDg1OTQsNTMxNjU4MC4xNzI4NDA4MTUsMzIwNjMxOS40ODQ1MDE4MTAzLDYzMzE0ODIuNTc3NDkzNDMxLDEuNjM2OTgxNDQ5Nzc5NzEyOEU3LDUzMjQ4MzkuMjc0OTgzMTY0LDQxMDY1MTIuMTc3OTk1NjY0NSw3MTcyMTkuMDE0MjE3MDE5MSw4NzM4MDQuNTgwNTU0OTUzNCwxLjk2ODg3MDEwNjQ2ODY5RTcsMS4wMTIxNDMyMzg3NzU1Nzc0RTcsMTUwNzM4MC4zNjQwMTYzMjQzLDM0OTMyMzEuNDkwNDk1NDU0NSwxNTcwNjY1LjAyMzIzNjYyMTQsMS41Mjg2Mjc2MjA0NjQxMjA4RTcsNzMwNDc4OS43OTI1MjA5NTcsMzE3MzcyMC4wMzIwNzg2NjMsNDgzMDUyMS4zMDE3NjI0MjQsNTM4Nzk0Ni43Njk3MzgyNyw3NzUxODc3LjU3MTQxODM1OSw2NDU0NDM5LjkxOTA0MTczNywxNTM0ODg1LjM5MDQzMDU0NSwxLjIxMDg2MTEwOTc2NTQ5MUU3LDYwNDg5MTkuMzUxMTQ0MDI3LDY4MzQ3MzEuMDg2MjAwMjYsMzM4MzU5OS45MTQ5ODQ3NDY0LDEwOTUyMDUuNzUyNTg1NjkxLDk4NDkwODUuNTU4ODY3MTgzLDc3NDU5MS4yODI1MTI3OTE1LDIwNzI5MjUuMjM5MDg1Njc4NSwxNTAxMDk0LjQ0NTg1MDM4NywxLjAyNzA3NDk4NjcxMjE4NTNFNywyMjEyNjEyLjU2NDQ3ODUwNSwyNDk4NDMzLjY0NDAxMjQ0NywyLjMxNjIyODE0ODkxNjU3M0U3LDEuMzc5NjE4MDk4NDA4MTM0RTcsNDE2MDEzNi41OTcxNzA0MTI1LDQxNzczMjYuNzA2ODIzMTk3LDEuNDkzNTI0Njg2NjY3NzYyMUU3LDEyODIyNjUuNDUyMDAxNTk3NSw0ODE3NTM0LjEwNDYwODAyNCw5MDc1NjYuNzE5NTcxMDU1Myw2OTM1ODA2LjkzOTM2MDkwOSwyLjU1NTI3MzE3NjAzMTM4MTZFNywyNzU3MTUxLjI4MzAyNjEzMTMsODY0MjA3Ni41OTU0NzY3NTgsNzM1MzYxLjMwNTYxOTI2OCw3MjE4NzA2LjkzNjA2Njc5Niw2NDY2NzkwLjY4MzQ5NzA0OSwyMTIyMDMyLjczOTkxODU5MjQsNTk0OTU4LjIxNzkyNDQwMQorNCxGcmkgMjggSmFuIDExLDI0NTc1OS4wOTM0NTg1MzQwNywxNzQzMzUxLjA1NzU1MTYyNDUsMTA0ODAxNi4yOTQ3MTM0NDg1LDIwMTEyMjEuMjQyMDQ1OTUsMS4zMjc3Njg2NTE2NDcxMTgzRTcsMTY4NjEwMy4zOTg5OTY4NTcsMTMzNTAyMS4yODI5MzQ2NjEzLDIyNDI0Ny41OTUyNTQzMDEzNiwzMDgwMDAuNDIzNTkwNzA5NDYsNjI2NTEzOS41MjU4OTc3NjcsMzIwOTEwOC41MTIyNTQ2MDgsNDc0OTI0LjI5MDM0MTgwMjEsMTE0NzE4Mi4zMDQ3NTQ5NzUzLDUwNzIzOS41NzczMzYxNjE4Niw0ODY4NDAxLjgyODMyMjExMywyMzgzNjM5LjQzMzEyMjYxOCwxMDUzOTczLjAyOTQ1MzA1MzgsMTU4NDQ1NC43OTIyODgzOTUzLDE3NTE4OTEuMzM2MDg5MzEsMjQ4ODg3OS44OTgxOTcxMzk2LDIwNzYyNTQuNDI2NDc3MzE0LDQ5OTc4Ni4yNTQzMTYyNjc3LDM4OTU5MzAuNzczMzU2MDY3NSwxOTI4NDUyLjMwNDg2MDczNjcsMjE5MzM1MS42NDgxMzU2NjY3LDExMTUxODIuMjgyMzkwOTE0MiwzNTM2NjcuMzgyODI3NTI5NSwzMTU1MzY4LjAxODkyNDcyMSwyNTE3NDkuNzgwNDY3ODM4Miw2NzA4MzAuMTU1ODQ5NTUxOSw0ODQ0MzcuMjU3MTgzNDY3NzQsMzI5ODQ3MC44NTMxMzI1OTI1LDcxMzA3OC4zNzIzOTk2OTM0LDc4MzMxOC43NzU1MjIwMTg4LDc0Mzg4NzQuMzM3ODA5MTc5LDQ0NTA1MTIuNzQ4MDk1Njk3LDEzNTI2OTcuMTQ2MjcwMTUwNiwxMzQxMjA2LjY2MjcyMTkzMSw0ODE0MjU3LjUyMTg4OTk1NCw0MTA5NDYuMDIxMDQ5NTMwNjUsMTU3Mjc2OS4zNzc0MDI1NzM2LDI5NTkwOS4zOTg2MTQ4OTAzLDIyMzAyMzIuMzc2NTQ0MTc0Nyw4MTc0MDAxLjA0NzIwMzE4Miw4NzU0MDcuOTM2NzI1MzIxOSwyNzc0ODE2LjE0NDYyMTI4MzcsMjM4NjY2LjYwMzEzMzczMjA1LDIzMTA1MjEuMTU3MzUyNzI1NSwyMTAyNjIzLjgwMzk5MzU0NSw3MDg5NzkuMjUzMzg0MjU3LDE5MzU2OC41OTQ0NzgwMTU4NQorNSxTYXQgMjkgSmFuIDExLDI0NTc1Ny4zNDIyNTE1MTExNSwxNzQzMjYzLjExMjE1MzQ2NjgsMTA0Nzk3Mi43NTY1MTA2Mjg2LDIwMTEyMDcuNzMwNTEwNDIyNSwxLjMyNzc2ODYwMTU1NDAyMTJFNywxNjg2MDk0LjMwMjkyMjE0NCwxMzM0OTgxLjQ0MDIwMTg0NDMsMjI0MjQ3LjEyNzUzNjYwNTQ2LDMwNzE3MC4zNzAzMTA3NSw2MjY1MDkyLjEyODY3MzI5MSwzMjA5MDg5LjU1NzA3OTM5MjUsNDc0OTIyLjUwMjIxNzYxMzMsMTE0NzExOC45NDQ3MTEyNTUsNTA3MjI5LjU2NTk5OTk2ODA0LDQ4NjgzNjIuODE3MDQ0NjU3LDIzODM1NTAuMDMwNjk3NzM0LDEwNTM4NTkuNzQyODQxMDk2LDE1ODQzNzMuMzY2NjY1OTMyMywxNzUxODM4LjUzOTI2MjI0NTIsMjQ4ODg0NS45OTAxMzE4NDQsMjA3NjIyMi40ODAwOTA1MDA4LDQ5OTc2OS43OTk1NjM2NjI5NiwzODk1ODY5Ljk4NzI4Mzk4NywxOTI4NDM1Ljc1MTQ2OTQyNCwyMTkzMzIyLjY4MzA2OTIzMywxMTE1MTA1Ljg1OTY2MzQzMjIsMzUzNjYwLjQzMzA1ODA3OTg2LDMxNTUzMzAuNjU4Njg1MTQ1NCwyNTE3NDIuMzkyNjIwNDE4Myw2NzA4MTUuMDgwOTQyMDIxMiw0ODQ0MjguMTAyODU2MDM2MzMsMzI5ODQyNS4xNTQzNTQ4NDQyLDcxMzA2Ni4wMTk2NjEzNDA2LDc4MzMxNi43NDE5Nzg3MTQ1LDc0Mzg3NzEuMDQwODI0MTgsNDQ1MDQzMC43OTgxNDI5OTMsMTM1MjY1Ni4zMjcyMjY2Mjc0LDEzNDExODguMzg5NzQ4NTM0Nyw0ODE0MTczLjA4MzY1NzkwMiw0MTA5NDEuMDQzMDI3OTkwMSwxNTcyNzA4LjY0MzMzMzk5NDgsMjk1ODk4LjgzNzQ1MDY2MjQsMjIzMDE5OC45MDI1NjQ4MDMsODE3MzkxMy4zNTI0MTQ5Niw4NzU0MDIuMjQyMzE1MDk3NSwyNzc0Nzc4LjIzNDEzNDExMDYsMjM4NjYwLjE3NzU4MTYzOTczLDIzMTA0OTUuNDA2MjgwNzYxLDIxMDI1NjAuNTM2ODAzNTk3LDcwODg3MC43Mzk2MDc4OTQzLDE5MzU2Mi41Mzc5NTAyNDkxCis2LFN1biAzMCBKYW4gMTEsMjQ1NzU3LjM0NTI4MjkxMjIzLDE3NDMyNjMuMjY0MDA3NTMyLDEwNDc5NzIuODMxNjgwNzk4OSwyMDExMjA3Ljc1MzkxMjU5NDYsMS4zMjc3Njg2MDE3MDI0NTczRTcsMTY4NjA5NC4zMTg3MjQxMDgyLDEzMzQ5ODEuNTA4OTgxNTM5NCwyMjQyNDcuMTI4NDAwNDM5NCwzMDcxNzEuODA1NjQzNzUyMiw2MjY1MDkyLjIxMDY3OTA4MywzMjA5MDg5LjU4OTk2MTUxMjUsNDc0OTIyLjUwNTM1NTExMTgsMTE0NzExOS4wNTQxMTg0ODEsNTA3MjI5LjU4MzI4MDU2NzIsNDg2ODM2Mi44ODQ1MTM3OTEsMjM4MzU1MC4xODUwNDY3NzU3LDEwNTM4NTkuOTM4NTA3MzE0OCwxNTg0MzczLjUwNzI2MzU1MDUsMTc1MTgzOC42MzA0MDQ2OTIxLDI0ODg4NDYuMDQ4NjcxNjE3NiwyMDc2MjIyLjUzNTIzNzQxMzEsNDk5NzY5LjgyNzk3MDM0NzgsMzg5NTg3MC4wOTIyMTM5NzgsMTkyODQzNS43ODAwODYzODYzLDIxOTMzMjIuNzMzMDc3MjY3NywxMTE1MTA1Ljk5MTYzODQzMzcsMzUzNjYwLjQ0NTA1NDA5OTU1LDMxNTUzMzAuNzIzMTk5MjI2LDI1MTc0Mi40MDUzNzM4MjE4LDY3MDgxNS4xMDY5NjMxOTEzLDQ4NDQyOC4xMTg2NTczODQ3LDMyOTg0MjUuMjMzMjQ4ODg3LDcxMzA2Ni4wNDA5ODM4NDU2LDc4MzMxNi43NDU2MzMwNzM2LDc0Mzg3NzEuMjE5MTU0OTAxLDQ0NTA0MzAuOTM5NTk3ODIxLDEzNTI2NTYuMzk3NjkyMDI2NiwxMzQxMTg4LjQyMTI5NTQ3MzgsNDgxNDE3My4yMjk0MDkyNDksNDEwOTQxLjA1MTYyMzcxMDEsMTU3MjcwOC43NDgxODk4ODA3LDI5NTg5OC44NTU2ODM1OTg5NiwyMjMwMTk4Ljk2MDM0OTcyNiw4MTczOTEzLjUwMzg4MzI3Niw4NzU0MDIuMjUyMTgxMzIsMjc3NDc3OC4yOTk1ODM1NTE1LDIzODY2MC4xODg2NzM1MDMsMjMxMDQ5NS40NTA3NTQwNjk3LDIxMDI1NjAuNjQ2MDIwODE5LDcwODg3MC45MjcwNDkwNzQ4LDE5MzU2Mi41NDg0MDU3MTQ1NAorNyxNb24gMzEgSmFuIDExLDI0NTc1Ny4zNDE4MTczOTg0NCwxNzQzMjYzLjA5MDI4Njg1MjYsMTA0Nzk3Mi43NDU2ODQzOTYxLDIwMTEyMDcuNzI3MTYzMTAxNSwxLjMyNzc2ODYwMTU1MTAyODdFNywxNjg2MDk0LjMwMDY3NjE2MjQsMTMzNDk4MS40MzAyOTMxNjUxLDIyNDI0Ny4xMjc0Mjg5NDMxMiwzMDcxNzAuMTY0NzE5NjkwNyw2MjY1MDkyLjExNjkxNzM3NywzMjA5MDg5LjU1MjM5MTU5NzUsNDc0OTIyLjUwMTc4MDkxOTU2LDExNDcxMTguOTI4OTU4MTU1NCw1MDcyMjkuNTYzNTEwMDM5NjUsNDg2ODM2Mi44MDczNjQzMTIsMjM4MzU1MC4wMDg0NjU4Njg0LDEwNTM4NTkuNzE0NjgyNzQwOSwxNTg0MzczLjM0NjQyMDU1NywxNzUxODM4LjUyNjEzMTk5NjQsMjQ4ODg0NS45ODE3MDA3NTQzLDIwNzYyMjIuNDcyMTQ2MDQwNSw0OTk3NjkuNzk1NDcxNjA0NTYsMzg5NTg2OS45NzIxNjc0NjAyLDE5Mjg0MzUuNzQ3MzU5OTMzNiwyMTkzMzIyLjY3NTg2NzU0OTYsMTExNTEwNS44NDA2NjQzOTQsMzUzNjYwLjQzMTMyOTU5Nzg0LDMxNTUzMzAuNjQ5Mzk4MTg1LDI1MTc0Mi4zOTA3ODMwODg0Niw2NzA4MTUuMDc3MTkyNzE1Niw0ODQ0MjguMTAwNTc5Mjc0OCwzMjk4NDI1LjE0Mjk5MTc3NSw3MTMwNjYuMDE2NTg5MjAxNiw3ODMzMTYuNzQxNDk1Mjc0LDc0Mzg3NzEuMDE1MTM5MTQ2LDQ0NTA0MzAuNzc3NzYxNDY4LDEzNTI2NTYuMzE3MDc1MTg2LDEzNDExODguMzg1MjA1MDQxLDQ4MTQxNzMuMDYyNjU3OTA4LDQxMDk0MS4wNDE3OTA0OTQ0NiwxNTcyNzA4LjYyODIzMTMzNTcsMjk1ODk4LjgzNDgyNDM0MTksMjIzMDE5OC44OTQyNDA2NTU1LDgxNzM5MTMuMzMwNjIxOTUyLDg3NTQwMi4yNDA5MDQ5MTY5LDI3NzQ3NzguMjI0NzA3Nzk4LDIzODY2MC4xNzU5ODM1ODU1MywyMzEwNDk1LjM5OTg4MDYxOSwyMTAyNTYwLjUyMTA2OTQyMzgsNzA4ODcwLjcxMjYzOTU1OTQsMTkzNTYyLjUzNjQ0NDA0ODQ2Cis4LFR1ZSAxIEZlYiAxMSwyNDU3NTcuMzQ2Mzg5MTM2MTYsMTc0MzI2My4zMTkzNzIzOTY1LDEwNDc5NzIuODU5MDg2NzYwNywyMDExMjA3Ljc2MjQ1NDEzNiwxLjMyNzc2ODYwMTc2MzgyODhFNywxNjg2MDk0LjMyNDQ5NzI4ODYsMTMzNDk4MS41MzQwNTY3OTU4LDIyNDI0Ny4xMjg3MjE5OTM3NywzMDcxNzIuMzI4MTA2NDcyNCw2MjY1MDkyLjI0MDU5OTkyMSwzMjA5MDg5LjYwMTk2OTI1OSw0NzQ5MjIuNTA2NTA1MDMzNywxMTQ3MTE5LjA5NDAwNzg2NTMsNTA3MjI5LjU4OTU4MDUxNjIsNDg2ODM2Mi45MDkxMjc0NDMsMjM4MzU1MC4yNDEzMTk2MjEsMTA1Mzg2MC4wMDk4NDg3MjE4LDE1ODQzNzMuNTU4NTI0NDg0MywxNzUxODM4LjY2MzYzMjg0NDYsMjQ4ODg0Ni4wNzAwMTQ5NzIsMjA3NjIyMi41NTUzNDI5MDQ4LDQ5OTc2OS44MzgzMjY3NjkyLDM4OTU4NzAuMTMwNDY5Mjc2NiwxOTI4NDM1Ljc5MDUyNDgxOTIsMjE5MzMyMi43NTEzMTAyNDY1LDExMTUxMDYuMDM5NzU2NzExLDM1MzY2MC40NDk0Mjc0NjIzLDMxNTUzMzAuNzQ2NzIyNjM5LDI1MTc0Mi40MTAwMjMzNjgxNCw2NzA4MTUuMTE2NDQ5NjU3MSw0ODQ0MjguMTI0NDE4MDYxMzQsMzI5ODQyNS4yNjIwMTMxMTksNzEzMDY2LjA0ODc1NzQzNDQsNzgzMzE2Ljc0Njk4MjM1ODUsNzQzODc3MS4yODQxNzMwMTEsNDQ1MDQzMC45OTExNjc5MzMsMTM1MjY1Ni40MjMzODE4NzEsMTM0MTE4OC40MzI3OTczNTQ0LDQ4MTQxNzMuMjgyNTQ2MDIyLDQxMDk0MS4wNTQ3NTc4NzE1NSwxNTcyNzA4Ljc4NjQxODUzOSwyOTU4OTguODYyMzMwOTYxLDIyMzAxOTguOTgxNDE3MTMxLDgxNzM5MTMuNTU5MTE2ODQyLDg3NTQwMi4yNTU3ODI3OTM1LDI3NzQ3NzguMzIzNDQ2MTExMywyMzg2NjAuMTkyNzE3MjY4NywyMzEwNDk1LjQ2Njk3MDg5MTcsMjEwMjU2MC42ODU4Mzg1NTU1LDcwODg3MC45OTUzOTExOTM1LDE5MzU2Mi41NTIyMTc1MTcwMgorOSxXZWQgMiBGZWIgMTEsMjQ1NzU3LjM0MjgzNTg1NzcsMTc0MzI2My4xNDE0NzY4OTQzLDEwNDc5NzIuNzcxMDI3MDI4OSwyMDExMjA3LjczNTAxOTcxNjcsMS4zMjc3Njg2MDE1NzQwMzJFNywxNjg2MDk0LjMwNTk2MDQ0NTQsMTMzNDk4MS40NTM0ODU1MTY4LDIyNDI0Ny4xMjc2OTU1MTMyMiwzMDcxNzAuNjQ4MDA5NjgwMTUsNjI2NTA5Mi4xNDQ0ODY2MzYsMzIwOTA4OS41NjM0MDgyNzA1LDQ3NDkyMi41MDI4MTY1NjM5NCwxMTQ3MTE4Ljk2NTgzNzU1NzMsNTA3MjI5LjU2OTMzNzY5ODQsNDg2ODM2Mi44MzAwNTg2MTgsMjM4MzU1MC4wNjA1MDU2MjM1LDEwNTM4NTkuNzgwNjE5MDI0LDE1ODQzNzMuMzkzODE1NTY3NywxNzUxODM4LjU1Njg2NDg2NjUsMjQ4ODg0Ni4wMDE0MzczODk4LDIwNzYyMjIuNDkwNzQxNTkxNCw0OTk3NjkuODA1MDQ5Nzg2NSwzODk1ODcwLjAwNzU1MDMxNDUsMTkyODQzNS43NTY5OTA4ODM1LDIxOTMzMjIuNjkyNzI2ODE5LDExMTUxMDUuODg1MTQ2MTgxOCwzNTM2NjAuNDM1Mzc1MDk5NCwzMTU1MzMwLjY3MTE0MjU4NjUsMjUxNzQyLjM5NTA4MzU0MTU3LDY3MDgxNS4wODU5Njc5MjM2LDQ4NDQyOC4xMDU5MDgwNDk5LDMyOTg0MjUuMTY5NTkxNTI2NSw3MTMwNjYuMDIzNzc5NzIyMyw3ODMzMTYuNzQyNjY0NDAxOCw3NDM4NzcxLjA3NTI2NDk2NCw0NDUwNDMwLjgyNTQ2NDgwNiwxMzUyNjU2LjM0MDgzNTgyMTgsMTM0MTE4OC4zOTU4NDEwNjU4LDQ4MTQxNzMuMTExODA5NDIyLDQxMDk0MS4wNDQ2ODc4NDQyMywxNTcyNzA4LjY2MzU4MzU3OTIsMjk1ODk4Ljg0MDk3MTg2MjUsMjIzMDE5OC45MTM3MjUyNyw4MTczOTEzLjM4MTY1ODE0NCw4NzU0MDIuMjQ0MjE1NzIwMywyNzc0Nzc4LjI0Njc3NDEyMDMsMjM4NjYwLjE3OTcyMzkxMzMyLDIzMTA0OTUuNDE0ODY3NTkwNiwyMTAyNTYwLjU1Nzg5NzA2NSw3MDg4NzAuNzc1Nzk2OTcyNCwxOTM1NjIuNTM5OTY5NTIyNworMTAsVGh1IDMgRmViIDExLDI0NTc1Ny4zNDU2MDA3MTY3NywxNzQzMjYzLjI3OTk0MTI3MDEsMTA0Nzk3Mi44Mzk1Njg4NDkyLDIwMTEyMDcuNzU2MzY1Mzc0LDEuMzI3NzY4NjAxNzE0ODA0OEU3LDE2ODYwOTQuMzIwMzc3OTQ5MiwxMzM0OTgxLjUxNjE5OTg5OTgsMjI0MjQ3LjEyODQ4ODA5ODg1LDMwNzE3MS45NTUxNDgyNzU1Myw2MjY1MDkyLjIxOTI3ODMyMjUsMzIwOTA4OS41OTM0MDUzMzgsNDc0OTIyLjUwNTY4MTg4NjYsMTE0NzExOS4wNjU1OTc5NSw1MDcyMjkuNTg1MDk0MzYxMzMsNDg2ODM2Mi44OTE1OTAwMDUsMjM4MzU1MC4yMDEyNDQxNzQ1LDEwNTM4NTkuOTU5MDMxODY1MiwxNTg0MzczLjUyMjAxNjA2NSwxNzUxODM4LjYzOTk2OTk2NjQsMjQ4ODg0Ni4wNTQ4MTU4ODkzLDIwNzYyMjIuNTQxMDI1NzUxNSw0OTk3NjkuODMwOTUxNDk0LDM4OTU4NzAuMTAzMjI3Njc0NSwxOTI4NDM1Ljc4MzA4ODMwOCwyMTkzMzIyLjczODMyNTk4OSwxMTE1MTA2LjAwNTQ4NDYyODMsMzUzNjYwLjQ0NjMxMzIxODMzLDMxNTUzMzAuNzI5OTcwMDEzMywyNTE3NDIuNDA2NzEyMjg2Nyw2NzA4MTUuMTA5Njk0MzMwNyw0ODQ0MjguMTIwMzE1OTI1NTcsMzI5ODQyNS4yNDE1Mjk1NzIzLDcxMzA2Ni4wNDMyMjE5MTQ4LDc4MzMxNi43NDYwMDkxMzg1LDc0Mzg3NzEuMjM3ODcyNDMsNDQ1MDQzMC45NTQ0NDUyNDcsMTM1MjY1Ni40MDUwODcyNjk4LDEzNDExODguNDI0NjA2NjA3LDQ4MTQxNzMuMjQ0NzA3NzAzLDQxMDk0MS4wNTI1MjU4NTA5LDE1NzI3MDguNzU5MTkzMzQwMywyOTU4OTguODU3NTk3MDAwNywyMjMwMTk4Ljk2NjQxNDkzMiw4MTczOTEzLjUxOTc3ODQ1NCw4NzU0MDIuMjUzMjE1MjMwMiwyNzc0Nzc4LjMwNjQ1MzA2MTgsMjM4NjYwLjE4OTgzNzYyNDM4LDIzMTA0OTUuNDU1NDIxMzE4OCwyMTAyNTYwLjY1NzQ4MzAyMyw3MDg4NzAuOTQ2NzA3NTQ5OSwxOTM1NjIuNTQ5NTAyOTg2NDMKKzExLEZyaSA0IEZlYiAxMSwyNDU3NTcuMzQyNzY3MzU0NTQsMTc0MzI2My4xMzgyMTc3NDUzLDEwNDc5NzIuNzY5NDE2Mjk0LDIwMTEyMDcuNzM0NDg1MTI1LDEuMzI3NzY4NjAxNTQ0MjAzNkU3LDE2ODYwOTQuMzA1NTc4OTE0NywxMzM0OTgxLjQ1MjAxNTY2MywyMjQyNDcuMTI3NjUyNjYzOTcsMzA3MTcwLjYxNzA1ODg4Njg2LDYyNjUwOTIuMTQyNjUxMTA2LDMyMDkwODkuNTYyNjM0NzkxMiw0NzQ5MjIuNTAyNzI3NDIxNiwxMTQ3MTE4Ljk2MzQ4NzcyNjQsNTA3MjI5LjU2ODk2OTAxNDksNDg2ODM2Mi44Mjg1NjA0MzYsMjM4MzU1MC4wNTcyMDEwOTk2LDEwNTM4NTkuNzc2Mzk4NTE3MiwxNTg0MzczLjM5MDc5NzU1ODIsMTc1MTgzOC41NTQ5MTY5NzA0LDI0ODg4NDYuMDAwMTgzMTQxLDIwNzYyMjIuNDg5NTYyODg3NSw0OTk3NjkuODA0NDQyMjY1NTQsMzg5NTg3MC4wMDUzMDc5OTgsMTkyODQzNS43NTYzNjA1NzMyLDIxOTMzMjIuNjkxNjU0NDY0LDExMTUxMDUuODgyMzA3MTE5LDM1MzY2MC40MzUxMTkxNjE1NiwzMTU1MzMwLjY2OTc1Mzg0OSwyNTE3NDIuMzk0ODExMDI4NjEsNjcwODE1LjA4NTQxMjY5NTcsNDg0NDI4LjEwNTU3MDg5NTQsMzI5ODQyNS4xNjc5MDE4NzIsNzEzMDY2LjAyMzMyNDU2MjYsNzgzMzE2Ljc0MjUyMzk1NjgsNzQzODc3MS4wNzE0NDU5MDYsNDQ1MDQzMC44MjI0NDYyOSwxMzUyNjU2LjMzOTMyOTgyMTMsMTM0MTE4OC4zOTUxNjUxNTQ1LDQ4MTQxNzMuMTA4Njk4NDE1LDQxMDk0MS4wNDQ1MDI5ODMzNCwxNTcyNzA4LjY2MTMzODEyNiwyOTU4OTguODQwNTgxNjY3MSwyMjMwMTk4LjkxMjQ4OTY5Nyw4MTczOTEzLjM3ODM4MTYwMSw4NzU0MDIuMjQzOTg4ODUzOCwyNzc0Nzc4LjI0NTM3MTkyNjYsMjM4NjYwLjE3OTQ4NzA0MDY3LDIzMTA0OTUuNDEzOTA3NTQ1NiwyMTAyNTYwLjU1NTU2MjkwMiw3MDg4NzAuNzcxNzQ3NzkyOCwxOTM1NjIuNTM5NzQ2MDA1MzgKKzEyLFNhdCA1IEZlYiAxMSwyNDU3NTcuMzQ0Nzc2OTIyNjYsMTc0MzI2My4yMzg1OTM3MTUsMTA0Nzk3Mi44MTkxMDAxNDI3LDIwMTEyMDcuNzUwMDA4MjM4LDEuMzI3NzY4NjAxNjg1NTMyNkU3LDE2ODYwOTQuMzE2MDk0MTgzMSwxMzM0OTgxLjQ5NzQ2OTg5MDYsMjI0MjQ3LjEyODI2Mjg4MTEsMzA3MTcxLjU2NDkwODkzMTksNjI2NTA5Mi4xOTY5ODUyOTEsMzIwOTA4OS41ODQ0ODI1ODgzLDQ3NDkyMi41MDQ4MzY5NTYzLDExNDcxMTkuMDM1ODA4NzA3OCw1MDcyMjkuNTgwMzg4NDA4OCw0ODY4MzYyLjg3MzI0MzQ4NiwyMzgzNTUwLjE1OTIxNDEzNCwxMDUzODU5LjkwNTc2NDIzMSwxNTg0MzczLjQ4MzczMzY0OTQsMTc1MTgzOC42MTUxNTAyMDQ2LDI0ODg4NDYuMDM4ODc2ODkxNiwyMDc2MjIyLjUyNjAwOTExODcsNDk5NzY5LjgyMzIxNTk3MzQsMzg5NTg3MC4wNzQ2NTQ3NTgsMTkyODQzNS43NzUzMDQzODgsMjE5MzMyMi43MjQ3MTA0MTkzLDExMTUxMDUuOTY5NTUyNTYyNiwzNTM2NjAuNDQzMDQ2Mzk1LDMxNTUzMzAuNzEyNDA3NDMzLDI1MTc0Mi40MDMyMzkyODM0NSw2NzA4MTUuMTAyNjA4MDQ0OSw0ODQ0MjguMTE2MDEyODQyLDMyOTg0MjUuMjIwMDQ4MjQ1LDcxMzA2Ni4wMzc0MTU0MjMsNzgzMzE2Ljc0NTA0MDAyMDcsNzQzODc3MS4xODkzMTYzMTIsNDQ1MDQzMC45MTU5MjM5NDEsMTM1MjY1Ni4zODU4OTgyNTMsMTM0MTE4OC40MTYwMTcxMjAyLDQ4MTQxNzMuMjA1MDE2ODk2LDQxMDk0MS4wNTAxODU3Njk1LDE1NzI3MDguNzMwNjQwNzQ0OCwyOTU4OTguODUyNjMyMDE5MTQsMjIzMDE5OC45NTA2ODAyMTM1LDgxNzM5MTMuNDc4NTUxODE1LDg3NTQwMi4yNTA1MzU3Mzg0LDI3NzQ3NzguMjg4NjMyNjc1NSwyMzg2NjAuMTg2ODE3MDQ4NTUsMjMxMDQ5NS40NDMzMTU2NjMsMjEwMjU2MC42Mjc3NDExNTk0LDcwODg3MC44OTU2ODI1NTgyLDE5MzU2Mi41NDY2NTU3OTI0MgorMTMsU3VuIDYgRmViIDExLDI0NTc1Ny4zNDM0MjM5ODg1OCwxNzQzMjYzLjE3MTAyNDYyMjYsMTA0Nzk3Mi43ODU2NTUwNzYsMjAxMTIwNy43Mzk1NTcwNjg2LDEuMzI3NzY4NjAxNTg5MDIzM0U3LDE2ODYwOTQuMzA5MDEzNTY3NiwxMzM0OTgxLjQ2Njg3MjIxMzksMjI0MjQ3LjEyNzg1MDgxODgzLDMwNzE3MC45MjcwMDQ2Mzc3LDYyNjUwOTIuMTYwNDA1OTA0LDMyMDkwODkuNTY5NzcyMDg4NCw0NzQ5MjIuNTAzNDE1Nzc2NywxMTQ3MTE4Ljk4NzEyNTA0MjQsNTA3MjI5LjU3MjcwMTQzNTcsNDg2ODM2Mi44NDMxNjIxMzcsMjM4MzU1MC4wOTA1NDM0MDI0LDEwNTM4NTkuODE4Njc5NzMwMiwxNTg0MzczLjQyMTE3Mjc2NzIsMTc1MTgzOC41NzQ2MDM5NzkyLDI0ODg4NDYuMDEyODI5OTE3NSwyMDc2MjIyLjUwMTQ3NTIxNSw0OTk3NjkuODEwNTc4MzYxOTcsMzg5NTg3MC4wMjc5NzM3NzUsMTkyODQzNS43NjI1NTEzNjY2LDIxOTMzMjIuNzAyNDU4NTIzNywxMTE1MTA1LjkxMDgyMjE1OTQsMzUzNjYwLjQzNzcxMDE3MjAzLDMxNTUzMzAuNjgzNjk0NTUxMiwyNTE3NDIuMzk3NTY1Nzc1MDYsNjcwODE1LjA5MTAzMjk3ODMsNDg0NDI4LjEwODk4MzgzNywzMjk4NDI1LjE4NDk0NTU3Nyw3MTMwNjYuMDI3OTMwMTQsNzgzMzE2Ljc0MzM0MzA1Nyw3NDM4NzcxLjEwOTk3MTA5Nyw0NDUwNDMwLjg1Mjk5OTM3MiwxMzUyNjU2LjM1NDU1MDUzOTcsMTM0MTE4OC40MDE5ODA0NzEsNDgxNDE3My4xNDAxNzk5ODYsNDEwOTQxLjA0NjM2MDMyNzcsMTU3MjcwOC42ODM5ODkyMTQ1LDI5NTg5OC44NDQ1MjAyNTQ2LDIyMzAxOTguOTI0OTcyMTE1LDgxNzM5MTMuNDExMTE5OTc4LDg3NTQwMi4yNDYxMjc4NzQsMjc3NDc3OC4yNTk1MTEzOTk1LDIzODY2MC4xODE4ODI4MzU3MiwyMzEwNDk1LjQyMzUxOTAyNjUsMjEwMjU2MC41NzkxNTQwOTksNzA4ODcwLjgxMjI1NDAxMzQsMTkzNTYyLjU0MjAwNDQ0MDQ3CisxNCxNb24gNyBGZWIgMTEsMjQ1NzU3LjM0NTE5NDgxNjI0LDE3NDMyNjMuMjU5NTIyMDYxOCwxMDQ3OTcyLjgyOTQ2MDA0OTYsMjAxMTIwNy43NTMyMzQ0OTY2LDEuMzI3NzY4NjAxNzA2NzI5RTcsMTY4NjA5NC4zMTgyNzMyMTI1LDEzMzQ5ODEuNTA2OTQ5MDg5NSwyMjQyNDcuMTI4MzgyNTY3MiwzMDcxNzEuNzYyMDMwNDYzMjYsNjI2NTA5Mi4yMDgyODk3MjYsMzIwOTA4OS41ODkwMTYzNjIsNDc0OTIyLjUwNTI2OTk1ODIzLDExNDcxMTkuMDUwODg3MDM2Niw1MDcyMjkuNTgyNzcwMDI0NTQsNDg2ODM2Mi44ODI1NDM3MzQsMjM4MzU1MC4xODA0ODY0NSwxMDUzODU5LjkzMjcyOTI5NjksMTU4NDM3My41MDMxMTA2MzU2LDE3NTE4MzguNjI3NzExNDMxNCwyNDg4ODQ2LjA0Njk0NTAzNiwyMDc2MjIyLjUzMzYwOTU2MTksNDk5NzY5LjgyNzEzMDk3MzcsMzg5NTg3MC4wODkxMTYzNzczLDE5Mjg0MzUuNzc5MjQ4OTQwNSwyMTkzMzIyLjczMTYwMjcxNzcsMTExNTEwNS45ODc3NDA5NiwzNTM2NjAuNDQ0Njk5Njg5MTYsMzE1NTMzMC43MjEyOTkxNTgsMjUxNzQyLjQwNDk5Njk1NDIyLDY3MDgxNS4xMDYxOTQyODAzLDQ4NDQyOC4xMTgxOTA1ODk1LDMyOTg0MjUuMjMwOTIxNjYzLDcxMzA2Ni4wNDAzNTQxMDc2LDc4MzMxNi43NDU1NDUzMDQzLDc0Mzg3NzEuMjEzODk0MzkwNSw0NDUwNDMwLjkzNTQxOTMxMiwxMzUyNjU2LjM5NTYwOTc3NSwxMzQxMTg4LjQyMDM2NTAyMzIsNDgxNDE3My4yMjUxMDQ0NTQsNDEwOTQxLjA1MTM3MDQ3OTYsMTU3MjcwOC43NDUwOTE5MzMsMjk1ODk4Ljg1NTE0NDg3NTUsMjIzMDE5OC45NTg2NDQyNDU4LDgxNzM5MTMuNDk5NDI4NTQyLDg3NTQwMi4yNTE4OTU5NTAxLDI3NzQ3NzguMjk3NjUzMTMwMywyMzg2NjAuMTg4MzQ1NzI2NiwyMzEwNDk1LjQ0OTQ0NTMyMDgsMjEwMjU2MC42NDI3OTM0NDcsNzA4ODcwLjkyMTUxMjcyODcsMTkzNTYyLjU0ODA5Njc2MTY2CisxNSxUdWUgOCBGZWIgMTEsMjQ1NzU3LjM0MzU1NzQwMDM0LDE3NDMyNjMuMTc3ODI5MTgxNSwxMDQ3OTcyLjc4OTAyNTA4NiwyMDExMjA3Ljc0MDU4MzEwMDEsMS4zMjc3Njg2MDE1Nzc5MTg0RTcsMTY4NjA5NC4zMDk2OTI1MjQsMTMzNDk4MS40Njk5NTgxNTEsMjI0MjQ3LjEyNzg3MzQwMTM2LDMwNzE3MC45OTEwMDkxNTg4LDYyNjUwOTIuMTY0MDI2OTQsMzIwOTA4OS41NzExOTg2NzY3LDQ3NDkyMi41MDM1NDE2MzM3LDExNDcxMTguOTkyMDI2NDc3OCw1MDcyMjkuNTczNDc3MDY0MSw0ODY4MzYyLjg0NjE0OTQ0NywyMzgzNTUwLjA5NzQ2NDkxNCwxMDUzODU5LjgyNzQzMzYwMzQsMTU4NDM3My40Mjc0NzI2MzczLDE3NTE4MzguNTc4NjkzMTgzLDI0ODg4NDYuMDE1NDUzNDAwNiwyMDc2MjIyLjUwMzk0ODcyMzQsNDk5NzY5LjgxMTg1MjYwOTQ1LDM4OTU4NzAuMDMyNjgwNTQxLDE5Mjg0MzUuNzYzODIxOTQyMywyMTkzMzIyLjcwNDY5OTAwNywxMTE1MTA1LjkxNjczMTY4OCwzNTM2NjAuNDM4MjQ4NjAzNjYsMzE1NTMzMC42ODY1ODExNzk1LDI1MTc0Mi4zOTgxMzgwMDE1Myw2NzA4MTUuMDkyMjAwOTM4OCw0ODQ0MjguMTA5NjkzMDM2MiwzMjk4NDI1LjE4ODQ4MTc0Niw3MTMwNjYuMDI4ODg2OTY4OSw3ODMzMTYuNzQzNDY1Mzk4Niw3NDM4NzcxLjExNzk2NDMzOSw0NDUwNDMwLjg1OTM0NzkxMiwxMzUyNjU2LjM1NzcxMjAzNjcsMTM0MTE4OC40MDMzOTQyNTkzLDQ4MTQxNzMuMTQ2NzIwNjY1NSw0MTA5NDEuMDQ2NzQ1MDU2NSwxNTcyNzA4LjY4ODY5MDk1MiwyOTU4OTguODQ1MzM3OTc4NSwyMjMwMTk4LjkyNzU2MzU4NjMsODE3MzkxMy40MTc4ODYxMjcsODc1NDAyLjI0NjU1OTQzNzgsMjc3NDc3OC4yNjI0NDQ2MTM1LDIzODY2MC4xODIzODA1OTA4LDIzMTA0OTUuNDI1NTA3MDU0NywyMTAyNTYwLjU4NDA1NDI2Myw3MDg4NzAuODIwNjM1NTQwNCwxOTM1NjIuNTQyNDczNDk4NDQKKzE2LFdlZCA5IEZlYiAxMSwyNDU3NTcuMzQzNTk0NjYyOCwxNzQzMjYzLjE3OTY3NDM2NiwxMDQ3OTcyLjc4OTkzODIxMzksMjAxMTIwNy43NDA4NzE0MzUsMS4zMjc3Njg2MDE1ODI3NzQ5RTcsMTY4NjA5NC4zMDk4ODk1OTQsMTMzNDk4MS40NzA3OTMyNjEyLDIyNDI0Ny4xMjc4ODY2MDI0NSwzMDcxNzEuMDA4NDY4NDUxMDQsNjI2NTA5Mi4xNjUwMzI5MDMsMzIwOTA4OS41NzE2MDY0MDIsNDc0OTIyLjUwMzU4MjI4MzgsMTE0NzExOC45OTMzNTYwNjU2LDUwNzIyOS41NzM2ODY4NDEyNCw0ODY4MzYyLjg0Njk3NTY4LDIzODM1NTAuMDk5MzM5NTc4OCwxMDUzODU5LjgyOTgxMzM4NDUsMTU4NDM3My40MjkxODEwOTEsMTc1MTgzOC41Nzk3OTk4MywyNDg4ODQ2LjAxNjE2NDc4MiwyMDc2MjIyLjUwNDYxODUwMiw0OTk3NjkuODEyMTk3NTYxNTUsMzg5NTg3MC4wMzM5NTQ4OTE0LDE5Mjg0MzUuNzY0MTcxNzgwNiwyMTkzMzIyLjcwNTMwNjgyNTcsMTExNTEwNS45MTgzMzYwMTE3LDM1MzY2MC40MzgzOTQyMjk0LDMxNTUzMzAuNjg3MzY1OTc1LDI1MTc0Mi4zOTgyOTI4NDc4OCw2NzA4MTUuMDkyNTE2ODEzMSw0ODQ0MjguMTA5ODg0ODYzMiwzMjk4NDI1LjE4OTQ0MDM4NTQsNzEzMDY2LjAyOTE0NTg1NTYsNzgzMzE2Ljc0MzUxNjgxMyw3NDM4NzcxLjEyMDEzMTIwNiw0NDUwNDMwLjg2MTA2NTIxNSwxMzUyNjU2LjM1ODU2NzYyNTcsMTM0MTE4OC40MDM3Nzc2MjE1LDQ4MTQxNzMuMTQ4NDkwMjYxLDQxMDk0MS4wNDY4NDk1OTk3NSwxNTcyNzA4LjY4OTk2NDU0NjEsMjk1ODk4Ljg0NTU1OTQxMjU2LDIyMzAxOTguOTI4MjY1NDcsODE3MzkxMy40MTk3MzA2NTksODc1NDAyLjI0NjY4MTE3MDgsMjc3NDc3OC4yNjMyMzk5NDksMjM4NjYwLjE4MjUxNTI1MTA0LDIzMTA0OTUuNDI2MDQ4MzkyLDIxMDI1NjAuNTg1MzgwMzcwNyw3MDg4NzAuODIyOTE1OTQ1NCwxOTM1NjIuNTQyNjAwNDU0MTgKKzE3LFRodSAxMCBGZWIgMTEsMjQ1NzU3LjM0Mzk2Mzk4MzMsMTc0MzI2My4xOTc5OTk3OTcsMTA0Nzk3Mi43OTkwMDczNDY5LDIwMTEyMDcuNzQzNzI4MTIxMywxLjMyNzc2ODYwMTYyNjA1ODlFNywxNjg2MDk0LjMxMTgzODI3NzgsMTMzNDk4MS40NzkwODgwNzU3LDIyNDI0Ny4xMjgwMTM2MzA0NiwzMDcxNzEuMTgxNjE0NTk3NSw2MjY1MDkyLjE3NTAwNjcwOCwzMjA5MDg5LjU3NTY0MTc5OTcsNDc0OTIyLjUwMzk4MTkxMTQ2LDExNDcxMTkuMDA2NTYwNTczOCw1MDcyMjkuNTc1NzcwNDkwMDUsNDg2ODM2Mi44NTUxNjk4NCwyMzgzNTUwLjExNzk1OTA1MzMsMTA1Mzg1OS44NTM0NDQyNDgyLDE1ODQzNzMuNDQ2MTQ4NTA5NiwxNzUxODM4LjU5MDc5MTcwMDYsMjQ4ODg0Ni4wMjMyMjkyNTA3LDIwNzYyMjIuNTExMjcwNTE2OCw0OTk3NjkuODE1NjIzNzc2OSwzODk1ODcwLjA0NjYxMTQyOSwxOTI4NDM1Ljc2NzY0MjMwMzQsMjE5MzMyMi43MTEzNDI2MzM3LDExMTUxMDUuOTM0MjY4MjAxNywzNTM2NjAuNDM5ODQwNjgwNzQsMzE1NTMzMC42OTUxNTgwMzIyLDI1MTc0Mi4zOTk4MzA4Nzg2LDY3MDgxNS4wOTU2NTQzMzIyLDQ4NDQyOC4xMTE3OTAyMDA2LDMyOTg0MjUuMTk4OTYwNDQzNSw3MTMwNjYuMDMxNzE3MTk0NCw3ODMzMTYuNzQ0MDE2NTM3OSw3NDM4NzcxLjE0MTY0OTk2Niw0NDUwNDMwLjg3ODEyMjMzLDEzNTI2NTYuMzY3MDY1ODM1MywxMzQxMTg4LjQwNzU4NDY0NTYsNDgxNDE3My4xNjYwNjY0OTMsNDEwOTQxLjA0Nzg4NzYyMzU0LDE1NzI3MDguNzAyNjE0MDE3OCwyOTU4OTguODQ3NzU4NzU2MywyMjMwMTk4LjkzNTIzNjIxMiw4MTczOTEzLjQzODA0MTE2NTUsODc1NDAyLjI0Nzg4Njk2NzUsMjc3NDc3OC4yNzExMzgxNiwyMzg2NjAuMTgzODUyNzk2LDIzMTA0OTUuNDMxNDIyNjMxMywyMTAyNTYwLjU5ODU1MjA1NTcsNzA4ODcwLjg0NTU1ODUzMzcsMTkzNTYyLjU0Mzg2MTQ0NTQyCisxOCxGcmkgMTEgRmViIDExLDI0NTc1Ny4zNDA2NzcyMzIwMiwxNzQzMjYzLjAzNDIwODc1NTIsMTA0Nzk3Mi43MTc5MzkwMzU2LDIwMTEyMDcuNzE4MzI3Mjk4LDEuMzI3NzY4NjAxMzQwNzI0M0U3LDE2ODYwOTQuMjk0NTg5MzYzNywxMzM0OTgxLjQwNDkyODAxNzksMjI0MjQ3LjEyNjk2ODM0NzY3LDMwNzE2OS42MzY2ODM3MjY0LDYyNjUwOTIuMDg2MTc3MTczLDMyMDkwODkuNTM5ODQ1NDQ3NSw0NzQ5MjIuNTAwNDk0MTQ1MSwxMTQ3MTE4Ljg4ODU0NjAxMSw1MDcyMjkuNTU3MTQwMTU1NDYsNDg2ODM2Mi43ODIxNDM3OTUsMjM4MzU0OS45NTE1MTEwODUsMTA1Mzg1OS42NDIzMTM3MSwxNTg0MzczLjI5NDQ5Njg4ODMsMTc1MTgzOC40OTI1MTg5NzgsMjQ4ODg0NS45NjAwODg5NzcsMjA3NjIyMi40NTE4MDQyMzkzLDQ5OTc2OS43ODQ5OTMwODEyNCwzODk1ODY5LjkzMzQ2NTE1OCwxOTI4NDM1LjczNjY5MzAxNDYsMjE5MzMyMi42NTc0MDAwNjg0LDExMTUxMDUuNzkxODkxODc2NiwzNTM2NjAuNDI2OTA3NjczOCwzMTU1MzMwLjYyNTU0MTgzLDI1MTc0Mi4zODYwNzk5NjEwNiw2NzA4MTUuMDY3NjAwODQ3Myw0ODQ0MjguMDk0NzU0NDE4NCwzMjk4NDI1LjExMzg2OTgxLDcxMzA2Ni4wMDg3Mjc3MzY4LDc4MzMxNi43Mzk3ODM0NDc2LDc0Mzg3NzAuOTQ5MzEzNjE4LDQ0NTA0MzAuNzI1NjE0OTQ5LDEzNTI2NTYuMjkxMDg3NzEwOCwxMzQxMTg4LjM3MzU1ODUxMDYsNDgxNDE3My4wMDg5MjIwOTIsNDEwOTQxLjAzODYxMjk1MTUsMTU3MjcwOC41ODk1MzY1MTkzLDI5NTg5OC44MjgwOTcyNjk4LDIyMzAxOTguODcyOTIyODAxNCw4MTczOTEzLjI3NDUxNTcxMSw4NzU0MDIuMjM3MTcxMDYzMiwyNzc0Nzc4LjIwMDU0NTcwODYsMjM4NjYwLjE3MTg5MzkyMDA4LDIzMTA0OTUuMzgzNDE4ODkxLDIxMDI1NjAuNDgwNzkwNjMzMiw3MDg4NzAuNjQzMjg0MjA5NCwxOTM1NjIuNTMyNTg3NzY4NDUKKzE5LFNhdCAxMiBGZWIgMTEsMjQ1NzU3LjM0Nzc5MzgyMzI4LDE3NDMyNjMuMzg4MzEwNzE1NiwxMDQ3OTcyLjg5MzE5NDgwMzIsMjAxMTIwNy43NzMzNDMxMDI4LDEuMzI3NzY4NjAyMDM1NDEyMkU3LDE2ODYwOTQuMzMyMDA5MTYxOCwxMzM0OTgxLjU2NTIzOTM2NjYsMjI0MjQ3LjEyOTI5NzIyMTAyLDMwNzE3Mi45Nzc0NjYyMjA0LDYyNjUwOTIuMjc4NDYxNjQzLDMyMDkwODkuNjE3NDQyNjY2Niw0NzQ5MjIuNTA4MDk4ODcwNiwxMTQ3MTE5LjE0MzY4Nzc0ODgsNTA3MjI5LjU5NzQxMjIwODEsNDg2ODM2Mi45NDAxODM1LDIzODM1NTAuMzExMzM1NjQ4LDEwNTM4NjAuMDk4ODE3MjQxOCwxNTg0MzczLjYyMjM1NTY4NTMsMTc1MTgzOC43MDQ5NTQ4NjQ3LDI0ODg4NDYuMDk2NTk0Mzc5NywyMDc2MjIyLjU4MDM1NzE1NjcsNDk5NzY5Ljg1MTIwODM4NjYsMzg5NTg3MC4xNzgwNjA3NzYsMTkyODQzNS44MDM2NTY2MTQ5LDIxOTMzMjIuNzc0MDIzNTI1NCwxMTE1MTA2LjA5OTcxNDgzMiwzNTM2NjAuNDU0ODY0MTczNCwzMTU1MzMwLjc3NjA2ODU1NCwyNTE3NDIuNDE1ODA1MTU3NSw2NzA4MTUuMTI4MjQyMTE3LDQ4NDQyOC4xMzE1Nzk4MDg2LDMyOTg0MjUuMjk3ODI4MjYsNzEzMDY2LjA1ODQyMzczNzYsNzgzMzE2Ljc0OTExMzk3NzksNzQzODc3MS4zNjUxMjcxNzQsNDQ1MDQzMS4wNTUyODM3ODcsMTM1MjY1Ni40NTUzMjk0NTY4LDEzNDExODguNDQ3MTIwOTI4Miw0ODE0MTczLjM0ODYxNzk3Nyw0MTA5NDEuMDU4NjY2NDQ3OTMsMTU3MjcwOC44MzM5ODcwNjUsMjk1ODk4Ljg3MDYwMDc0NTksMjIzMDE5OS4wMDc2MzIyNDg2LDgxNzM5MTMuNjI4MTQ2NTM4LDg3NTQwMi4yNjAzODUwOTQ0LDI3NzQ3NzguMzUzMTYxOTM4NSwyMzg2NjAuMTk3NzQ0OTY2NDgsMjMxMDQ5NS40ODcyMjI4NDIsMjEwMjU2MC43MzUzNTUxMjM0LDcwODg3MS4wODA2NTY0NDc3LDE5MzU2Mi41NTY5NTgxOTkwNworMjAsU3VuIDEzIEZlYiAxMSwyNDU3NTcuMzQxNTk2MzQxMDIsMTc0MzI2My4wODAyMjk5MjMsMTA0Nzk3Mi43NDA3MTk5NDczLDIwMTEyMDcuNzI1NDIzNTE3MiwxLjMyNzc2ODYwMTM4OTQ4MzJFNywxNjg2MDk0LjI5OTM4Mzc5OTgsMTMzNDk4MS40MjU3NzE2ODQ0LDIyNDI0Ny4xMjcyMzM3OTE5MiwzMDcxNzAuMDcwNzE3NjQ0NzYsNjI2NTA5Mi4xMTEwMzg2NzU1LDMyMDkwODkuNTQ5ODE5MzAzNyw0NzQ5MjIuNTAxNDQ4MDAwOSwxMTQ3MTE4LjkyMTcwMzMyNjMsNTA3MjI5LjU2MjM3Njg5NTA1LDQ4NjgzNjIuODAyNTk2Njc1LDIzODM1NDkuOTk4Mjg3NDA1NCwxMDUzODU5LjcwMTYxMzM4OTcsMTU4NDM3My4zMzcxMDY3MDIyLDE3NTE4MzguNTIwMTM5NjkyNiwyNDg4ODQ1Ljk3NzgyOTM1NzYsMjA3NjIyMi40Njg1MTYxNDQ0LDQ5OTc2OS43OTM2MDE3ODk4LDM4OTU4NjkuOTY1MjYzNDU3NSwxOTI4NDM1Ljc0NTM2NzQxOTQsMjE5MzMyMi42NzI1NTUwMTU0LDExMTUxMDUuODMxODg4OTg2OCwzNTM2NjAuNDMwNTQyOTY2MDYsMzE1NTMzMC42NDUwOTM0MjY2LDI1MTc0Mi4zODk5NDQ4NzA3LDY3MDgxNS4wNzU0ODYzODg0LDQ4NDQyOC4wOTk1NDI4Nzk3MywzMjk4NDI1LjEzNzc3ODQ0Niw3MTMwNjYuMDE1MTg5MzM5Miw3ODMzMTYuNzQwODk5OTQ2Miw3NDM4NzcxLjAwMzM1NjI1Nyw0NDUwNDMwLjc2ODQ4MTU5NiwxMzUyNjU2LjMxMjQ0MjI0ODcsMTM0MTE4OC4zODMxMTg3NTc1LDQ4MTQxNzMuMDUzMDkwNzc2LDQxMDk0MS4wNDEyMTc5NDUxNywxNTcyNzA4LjYyMTMxMzc0MjgsMjk1ODk4LjgzMzYyMjgzODcsMjIzMDE5OC44OTA0MzQxODA0LDgxNzM5MTMuMzIwNDIxNDc3LDg3NTQwMi4yNDAxNjI5ODk3LDI3NzQ3NzguMjIwMzgwMDM5NCwyMzg2NjAuMTc1MjU1Mjc3MywyMzEwNDk1LjM5Njg5NzI1OSwyMTAyNTYwLjUxMzg4ODkwNDQsNzA4ODcwLjcwMDA4OTk2MDUsMTkzNTYyLjUzNTc1NjMwNjcKKzIxLE1vbiAxNCBGZWIgMTEsMjQ1NzU3LjM0NTU1Njc1MjcsMTc0MzI2My4yNzY5MTMyNzM0LDEwNDc5NzIuODM4MDU5Nzc2NywyMDExMjA3Ljc1NjA1MTc5NzcsMS4zMjc3Njg2MDE4MjkxNzg0RTcsMTY4NjA5NC4zMjAyNTc2NzQ3LDEzMzQ5ODEuNTE0ODA0Mjg4MywyMjQyNDcuMTI4NTc1MTQ3MjIsMzA3MTcxLjkyNjYxMTk2NjA1LDYyNjUwOTIuMjE4MDA5NTY3LDMyMDkwODkuNTkzMDY0Mzk2LDQ3NDkyMi41MDU3MTY1OTM1LDExNDcxMTkuMDYzNDIzMDUxLDUwNzIyOS41ODQ3NDIxOTg3LDQ4NjgzNjIuODkwNDkxOTM1LDIzODM1NTAuMTk4MTM0NjAxLDEwNTM4NTkuOTU1MjE0MTY4LDE1ODQzNzMuNTE5MjE0MzA1LDE3NTE4MzguNjM4MTIxMDksMjQ4ODg0Ni4wNTM2NTE0NjEsMjA3NjIyMi41Mzk5MTQ0NDUsNDk5NzY5LjgzMDM3Njc1NTE2LDM4OTU4NzAuMTAxMTEwODExLDE5Mjg0MzUuNzgyNTk5MTY3NCwyMTkzMzIyLjczNzMzNTY5NSwxMTE1MTA2LjAwMjg3OTEzNTUsMzUzNjYwLjQ0NjA2ODc2Nzg3LDMxNTUzMzAuNzI4NzE4MDM5LDI1MTc0Mi40MDY0NTMzODk1Myw2NzA4MTUuMTA5MTYzNjg4NSw0ODQ0MjguMTE5OTk0MTg3NSwzMjk4NDI1LjIzOTk1NjgyNSw3MTMwNjYuMDQyNzg5MDQyLDc4MzMxNi43NDYyMDYzNTI3LDc0Mzg3NzEuMjM0MzE2NDAxLDQ0NTA0MzAuOTUxNTY3MDM0LDEzNTI2NTYuNDAzNjU3ODkyMywxMzQxMTg4LjQyMzk3OTA5NjYsNDgxNDE3My4yNDE3NDcxOTksNDEwOTQxLjA1MjM1ODIyMjcsMTU3MjcwOC43NTcwODI5NzksMjk1ODk4Ljg1NzIyOTA2MDcsMjIzMDE5OC45NjUyNTI5NjQ4LDgxNzM5MTMuNTE2OTE0NDgxLDg3NTQwMi4yNTMwODk2ODIsMjc3NDc3OC4zMDUxNTA2OTksMjM4NjYwLjE4OTYxMTk4NzgyLDIzMTA0OTUuNDU0NTcxMDU4LDIxMDI1NjAuNjU1MjY3Mzk0Niw3MDg4NzAuOTQzMDc0MjkxMSwxOTM1NjIuNTQ5MjkxMTE5MQorMjIsVHVlIDE1IEZlYiAxMSwyNDU3NTcuMzQzMTIyNDQzOTcsMTc0MzI2My4xNTYwMzEzMDEyLDEwNDc5NzIuNzc4MjM0NTk4OSwyMDExMjA3LjczNzIyNTQ1ODMsMS4zMjc3Njg2MDE1NTczNjg4RTcsMTY4NjA5NC4zMDc0MjU4NzM4LDEzMzQ5ODEuNDYwMDg0ODY0NCwyMjQyNDcuMTI3NzQ5MzEyNzMsMzA3MTcwLjc4NjM0MTg3MDgsNjI2NTA5Mi4xNTIyNTk4NDI1LDMyMDkwODkuNTY2NDgxNTMyLDQ3NDkyMi41MDMwOTE3ODIzMywxMTQ3MTE4Ljk3NjMyMTc5MDgsNTA3MjI5LjU3MDk5NjQ5MTc2LDQ4NjgzNjIuODM2NDY3Nzg1LDIzODM1NTAuMDc1MzA4MzU4OCwxMDUzODU5Ljc5OTM1MDU5LDE1ODQzNzMuNDA3MjkwNjA0NCwxNzUxODM4LjU2NTYwOTczODIsMjQ4ODg0Ni4wMDcwNTA4MTcsMjA3NjIyMi40OTYwMzI4OTEzLDQ5OTc2OS44MDc3NzQ4NTMzLDM4OTU4NzAuMDE3NjE4NzU5LDE5Mjg0MzUuNzU5NzE1MjcsMjE5MzMyMi42OTc1MjExMDQ1LDExMTUxMDUuODk3Nzg4MTM2LDM1MzY2MC40MzY1MjY2MTU3NSwzMTU1MzMwLjY3NzMyMTUwOTUsMjUxNzQyLjM5NjMwNzI1NzYsNjcwODE1LjA4ODQ2NTY0MzgsNDg0NDI4LjEwNzQyNDgxNywzMjk4NDI1LjE3NzE1NzUzMDYsNzEzMDY2LjAyNTgyNjI0ODksNzgzMzE2Ljc0Mjk0MTMzMDksNzQzODc3MS4wOTIzNjcyNjMsNDQ1MDQzMC44MzkwNDI3MiwxMzUyNjU2LjM0NzU5Njc2ODgsMTM0MTE4OC4zOTg4NjYxMjgsNDgxNDE3My4xMjU3OTg4NzgsNDEwOTQxLjA0NTUxMTMwNjgsMTU3MjcwOC42NzM2MzkwODM1LDI5NTg5OC44NDI3MjA2NjM0LDIyMzAxOTguOTE5MjY5MTM5LDgxNzM5MTMuMzk2MTQ2ODgxLDg3NTQwMi4yNDUxNDM5MjEsMjc3NDc3OC4yNTMwNTAyMzQ2LDIzODY2MC4xODA3ODgzNjA1NCwyMzEwNDk1LjQxOTEyMzk4NiwyMTAyNTYwLjU2ODM3NjE5MzMsNzA4ODcwLjc5MzczNjExMzcsMTkzNTYyLjU0MDk3MjYyMzI1CisyMyxXZWQgMTYgRmViIDExLDI0NTc1Ny4zNDYwMjIzODcsMTc0MzI2My4zMDAyMDcxODY3LDEwNDc5NzIuODQ5NTkwNDExNSwyMDExMjA3Ljc1OTY0NzQ4MDcsMS4zMjc3Njg2MDE4NTY3MTYzRTcsMTY4NjA5NC4zMjI2ODkzMDE4LDEzMzQ5ODEuNTI1MzU0MjEyOCwyMjQyNDcuMTI4NzEyMjcxMjgsMzA3MTcyLjE0NTIwODU4ODQsNjI2NTA5Mi4yMzA2MDI4MjksMzIwOTA4OS41OTgxMjA2NTA3LDQ3NDkyMi41MDYyMDE4NTI4NywxMTQ3MTE5LjA4MDIwNTg2Myw1MDcyMjkuNTg3MzkyNzQ0Myw0ODY4MzYyLjkwMDg1MDc0OSwyMzgzNTUwLjIyMTgxMDQ4MzQsMTA1Mzg1OS45ODUyMjc5OTc5LDE1ODQzNzMuNTQwNzgxNTQ2NCwxNzUxODM4LjY1MjEwMTE5MjIsMjQ4ODg0Ni4wNjI2MzEzNiwyMDc2MjIyLjU0ODM3MzQwMDIsNDk5NzY5LjgzNDczNDAzMzcsMzg5NTg3MC4xMTcyMDU4ODk0LDE5Mjg0MzUuNzg2OTkxOTQyNywyMTkzMzIyLjc0NTAwNjk5NTMsMTExNTEwNi4wMjMxMjM5MTMsMzUzNjYwLjQ0NzkwODc1MDU2LDMxNTUzMzAuNzM4NjE1NDk5LDI1MTc0Mi40MDg0MDk1OTQxMiw2NzA4MTUuMTEzMTU0ODkxLDQ4NDQyOC4xMjI0MTc4NDc3NCwzMjk4NDI1LjI1MjA1ODkxNjcsNzEzMDY2LjA0NjA1OTU4OTgsNzgzMzE2Ljc0Njc3ODQ3Nyw3NDM4NzcxLjI2MTY3MTcyMiw0NDUwNDMwLjk3MzI2Mzg2OSwxMzUyNjU2LjQxNDQ2NjM5OCwxMzQxMTg4LjQyODgxODM0MjcsNDgxNDE3My4yNjQxMDMxOTIsNDEwOTQxLjA1MzY3NjkwOTgsMTU3MjcwOC43NzMxNjcwNzU2LDI5NTg5OC44NjAwMjU4MjY0LDIyMzAxOTguOTc0MTE2NjQ1LDgxNzM5MTMuNTQwMTU0ODMyLDg3NTQwMi4yNTQ2MDU4NjczLDI3NzQ3NzguMzE1MTkwNTExOCwyMzg2NjAuMTkxMzEzMzE2MDksMjMxMDQ5NS40NjEzOTQ0MTg1LDIxMDI1NjAuNjcyMDE5OTM1Nyw3MDg4NzAuOTcxODIzOTgwMSwxOTM1NjIuNTUwODk0ODYzNgorMjQsVGh1IDE3IEZlYiAxMSwyNDU3NTcuMzQxOTQ1NjUzOTMsMTc0MzI2My4wOTc4MjAxNTQ5LDEwNDc5NzIuNzQ5NDI4MzQ5LDIwMTEyMDcuNzI4MTE3NDEwOCwxLjMyNzc2ODYwMTM5NDE5NjJFNywxNjg2MDk0LjMwMTE5MzAzNSwxMzM0OTgxLjQzMzc0MTEyODUsMjI0MjQ3LjEyNzMyMjkxMjIsMzA3MTcwLjIzNzMxNTEwMTQzLDYyNjUwOTIuMTIwNDk2ODc0LDMyMDkwODkuNTUzNTkzNzk2Nyw0NzQ5MjIuNTAxODAxMDE2NSwxMTQ3MTE4LjkzNDM3NjAzODEsNTA3MjI5LjU2NDM3OTI2ODQsNDg2ODM2Mi44MTAzODQxMjQsMjM4MzU1MC4wMTYxNjk2NDA3LDEwNTM4NTkuNzI0MjcxMTM4NCwxNTg0MzczLjM1MzM5Mjg1ODUsMTc1MTgzOC41MzA3MDAyNDU0LDI0ODg4NDUuOTg0NjA5MjU2LDIwNzYyMjIuNDc0OTA0NzIzNyw0OTk3NjkuNzk2ODkzMDk2OSwzODk1ODY5Ljk3NzQxOTUwMzUsMTkyODQzNS43NDg2NzI5ODY2LDIxOTMzMjIuNjc4MzQ2Mjk4LDExMTUxMDUuODQ3MTc0MDY5OCwzNTM2NjAuNDMxOTMyOTkxMywzMTU1MzMwLjY1MjU2MTc3MDMsMjUxNzQyLjM5MTQyMjYwNzEsNjcwODE1LjA3ODUwMTY0NDUsNDg0NDI4LjEwMTM3MzgwODE3LDMyOTg0MjUuMTQ2OTE2MTAwOCw3MTMwNjYuMDE3NjU5ODUyMyw3ODMzMTYuNzQxMjk0NjgxMiw3NDM4NzcxLjAyNDAxMDk2OSw0NDUwNDMwLjc4NDg3MTk0MDUsMTM1MjY1Ni4zMjA2MDY5NzUxLDEzNDExODguMzg2NzcyNDI4Miw0ODE0MTczLjA2OTk3ODMxNyw0MTA5NDEuMDQyMjEzMTAxNzUsMTU3MjcwOC42MzM0NjE3MTE1LDI5NTg5OC44MzU3MzUyODc4NywyMjMwMTk4Ljg5NzEyODA3NjgsODE3MzkxMy4zMzc5NDc2MDMsODc1NDAyLjI0MTI5ODAwNzMsMjc3NDc3OC4yMjc5NjAyNDk0LDIzODY2MC4xNzY1NDA1MzE0NSwyMzEwNDk1LjQwMjA0NDIxMjQsMjEwMjU2MC41MjY1NDM3NjYsNzA4ODcwLjcyMTc5MzU4NDgsMTkzNTYyLjUzNjk2Nzc0NjgzCisyNSxGcmkgMTggRmViIDExLDI0NTc1Ny4zNDU3NDE5MDI4NiwxNzQzMjYzLjI4NjA5NTA3ODYsMTA0Nzk3Mi44NDI2MDM5NjUyLDIwMTEyMDcuNzU3NDg0MDA3LDEuMzI3NzY4NjAxODUxMjYxRTcsMTY4NjA5NC4zMjEyMzQ4ODg0LDEzMzQ5ODEuNTE4OTYwNzEzLDIyNDI0Ny4xMjg2Mzg4MjcyNCwzMDcxNzIuMDEyMjQ0Nzk4NTMsNjI2NTA5Mi4yMjMwMDk0NTEsMzIwOTA4OS41OTUwODc4MjUsNDc0OTIyLjUwNTkxNzA5MjksMTE0NzExOS4wNzAwMzg5MjIsNTA3MjI5LjU4NTc4NjM1MDIsNDg2ODM2Mi44OTQ1OTk1MDMsMjM4MzU1MC4yMDc0NjQyNTgsMTA1Mzg1OS45NjcwNTExMzc3LDE1ODQzNzMuNTI3NzE1NjU0LDE3NTE4MzguNjQzNjI4OTY3LDI0ODg4NDYuMDU3MTkxODYwNCwyMDc2MjIyLjU0MzI0ODAzNzgsNDk5NzY5LjgzMjA5MzU2MzEsMzg5NTg3MC4xMDc0NTM0OTQzLDE5Mjg0MzUuNzg0MzM4Nzg5NSwyMTkzMzIyLjc0MDM2MDYwMSwxMTE1MTA2LjAxMDg2MTE4NzcsMzUzNjYwLjQ0Njc5MzYwOTQsMzE1NTMzMC43MzI2MjMyNDcsMjUxNzQyLjQwNzIyNDA3ODc1LDY3MDgxNS4xMTA3MzU5MjE0LDQ4NDQyOC4xMjA5NDg5OTEsMzI5ODQyNS4yNDQ3Mjc4MzY1LDcxMzA2Ni4wNDQwNzc2MTIzLDc4MzMxNi43NDY0NTcxMDA0LDc0Mzg3NzEuMjQ1MTAwNTk3LDQ0NTA0MzAuOTYwMTE0NzQyLDEzNTI2NTYuNDA3OTE2MjI5MiwxMzQxMTg4LjQyNTg4NzAwODcsNDgxNDE3My4yNTA1NTUxMjQsNDEwOTQxLjA1Mjg3ODQ1MzIsMTU3MjcwOC43NjM0MjEyMTY1LDI5NTg5OC44NTgzMzEwOTQ1LDIyMzAxOTguOTY4NzQ2MzA0NSw4MTczOTEzLjUyNjA5MTY1ODUsODc1NDAyLjI1MzY5NDIzMDksMjc3NDc3OC4zMDkxMDg5MjgsMjM4NjYwLjE5MDI4MjIyMzkyLDIzMTA0OTUuNDU3MjY0NTY4LDIxMDI1NjAuNjYxODY3NTQ4Miw3MDg4NzAuOTU0NDEzNzY1MiwxOTM1NjIuNTQ5OTIyOTgxMworMjYsU2F0IDE5IEZlYiAxMSwyNDU3NTcuMzQxMDQ4MzgwMjQsMTc0MzI2My4wNTMyMjg2MjMyLDEwNDc5NzIuNzI3MzU5MDU5MiwyMDExMjA3LjcyMTE3OTI2OTUsMS4zMjc3Njg2MDEyOTkyMzQ5RTcsMTY4NjA5NC4yOTY0NjgxMzkyLDEzMzQ5ODEuNDEzNTU0Mzk3LDIyNDI0Ny4xMjcwMjI4MzQyLDMwNzE2OS44MTgwMTM5MzEzLDYyNjUwOTIuMDk2MjU4MzI0LDMyMDkwODkuNTQzODAxNTM4Niw0NzQ5MjIuNTAwODM3MDY5NiwxMTQ3MTE4LjkwMjI0NjE4MzMsNTA3MjI5LjU1OTMwODE3MDgsNDg2ODM2Mi43OTA0NjU3NjksMjM4MzU0OS45NzA4NTg3ODM1LDEwNTM4NTkuNjY2NzgzMDg5MywxNTg0MzczLjMxMjEwNjAyNCwxNzUxODM4LjUwMzk0OTg2MywyNDg4ODQ1Ljk2NzQxODQ0NywyMDc2MjIyLjQ1ODcxNjM0ODcsNDk5NzY5Ljc4ODU1NTA1NDYsMzg5NTg2OS45NDY2MTgyODg4LDE5Mjg0MzUuNzQwMjM0Nzk0NiwyMTkzMzIyLjY2MzY1OTAzNjYsMTExNTEwNS44MDg0MDk1OTMsMzUzNjYwLjQyODQxMjY3OTIzLDMxNTUzMzAuNjMzNjAzMTcwNSwyNTE3NDIuMzg3Njc5NTU1MTMsNjcwODE1LjA3MDg2NTY3ODQsNDg0NDI4LjA5NjczNjY5NjEsMzI5ODQyNS4xMjM3NDk1MTUsNzEzMDY2LjAxMTQwMTk2MTgsNzgzMzE2Ljc0MDEwMjE2Myw3NDM4NzcwLjk3MTY0NjA1Niw0NDUwNDMwLjc0MzM1OTM3LDEzNTI2NTYuMjk5OTI1Mjk5NCwxMzQxMTg4LjM3NzUwODM0NDQsNDgxNDE3My4wMjcyMDI3NTcsNDEwOTQxLjAzOTY4NzQ0ODQsMTU3MjcwOC42MDI2NzkyMTgyLDI5NTg5OC44MzAzODMwNzEwNCwyMjMwMTk4Ljg4MDE2NDI1OCw4MTczOTEzLjI5MzQwMzUyOSw4NzU0MDIuMjM4MzcwMDIyLDI3NzQ3NzguMjA4NzQwNTU2LDIzODY2MC4xNzMyODUzNDA2LDIzMTA0OTUuMzg4OTY5NDUsMjEwMjU2MC40OTQ0ODg0NjMsNzA4ODcwLjY2NjcxNjQwMzIsMTkzNTYyLjUzMzg5ODk1OTUKKzI3LFN1biAyMCBGZWIgMTEsMjQ1NzU3LjM0NjA5NzAxMDksMTc0MzI2My4zMDM0OTY4OTg5LDEwNDc5NzIuODUxMjEzNDMwOCwyMDExMjA3Ljc2MDIzNzUxODcsMS4zMjc3Njg2MDE5MjM0NDA4RTcsMTY4NjA5NC4zMjMxMzcwMzg5LDEzMzQ5ODEuNTI2ODMxMzM3NywyMjQyNDcuMTI4Nzg2NjMyNzMsMzA3MTcyLjE3NjE2MDUyNjYsNjI2NTA5Mi4yMzI1Nzg2MzEsMzIwOTA4OS41OTkwMDM0Nzg0LDQ3NDkyMi41MDYzMjIyMjc2LDExNDcxMTkuMDgyNTc5NjA2Nyw1MDcyMjkuNTg3NzYzMDg4NSw0ODY4MzYyLjkwMjQ0NywyMzgzNTUwLjIyNTEzNzIyMywxMDUzODU5Ljk4OTUxMTU1NzYsMTU4NDM3My41NDM4MjgzNTcyLDE3NTE4MzguNjU0MDU4ODQ3LDI0ODg4NDYuMDYzOTAxNTg5LDIwNzYyMjIuNTQ5NTYyMTY3OCw0OTk3NjkuODM1MzQ0OTg1OTQsMzg5NTg3MC4xMTk0NjY1MiwxOTI4NDM1Ljc4NzY1NjMzMDcsMjE5MzMyMi43NDYwOTQ1MDYsMTExNTEwNi4wMjU5OTY5MzE4LDM1MzY2MC40NDgxNjU4NDkzLDMxNTUzMzAuNzQwMDMyMzgzLDI1MTc0Mi40MDg2ODM0MjU5OCw2NzA4MTUuMTEzNzEyMzM5Miw0ODQ0MjguMTIyNzU2NjQ1ODQsMzI5ODQyNS4yNTM3Njg5MjM3LDcxMzA2Ni4wNDY1MTc0NzgyLDc4MzMxNi43NDcwMDIzOTQyLDc0Mzg3NzEuMjY1NTM2NDM2LDQ0NTA0MzAuOTc2Mjk3OTM0LDEzNTI2NTYuNDE1OTc5OTU4LDEzNDExODguNDI5NTAyODYzNCw0ODE0MTczLjI2NzIzMjI0NSw0MTA5NDEuMDUzODY1MjQ4MDUsMTU3MjcwOC43NzU0MjgxOTQ4LDI5NTg5OC44NjA0MTg0Nzk5NSwyMjMwMTk4Ljk3NTM2MzY0NDMsODE3MzkxMy41NDM1MjI0MTYsODc1NDAyLjI1NDg1ODIxNTcsMjc3NDc3OC4zMTY2MTAzOTksMjM4NjYwLjE5MTU1MTIyNDIsMjMxMDQ5NS40NjIzNzgxMSwyMTAyNTYwLjY3NDM2NTc3MDUsNzA4ODcwLjk3NTkzOTk4OTQsMTkzNTYyLjU1MTExOTU1ODcyCisyOCxNb24gMjEgRmViIDExLDI0NTc1Ny4zNDI2NjMxNjYzMiwxNzQzMjYzLjEzMzI5OTE4NCwxMDQ3OTcyLjc2Njk4NTA4NjUsMjAxMTIwNy43MzM2NzEyMDcsMS4zMjc3Njg2MDE0OTU3MzVFNywxNjg2MDk0LjMwNDk5NTEzNTYsMTMzNDk4MS40NDk3OTY1ODEsMjI0MjQ3LjEyNzU4NDI2OTg4LDMwNzE3MC41NzI5NDU3MjQzNiw2MjY1MDkyLjEzOTg2MjAzMywzMjA5MDg5LjU2MTQ1Mzk4OTcsNDc0OTIyLjUwMjU4OTMwMDc0LDExNDcxMTguOTU5OTQxNzQ1NSw1MDcyMjkuNTY4NDEyMTQ3NjQsNDg2ODM2Mi44MjYyODU4MDIsMjM4MzU1MC4wNTIyMTI5NzIsMTA1Mzg1OS43NzAwMzU1ODczLDE1ODQzNzMuMzg2MjQyOTgzNCwxNzUxODM4LjU1MTk3NjE5NzksMjQ4ODg0NS45OTgyODY4MTMsMjA3NjIyMi40ODc3ODE1Mzk4LDQ5OTc2OS44MDM1MjUxMzkzLDM4OTU4NzAuMDAxOTE5MzgwNCwxOTI4NDM1Ljc1NTQwNDQxMTYsMjE5MzMyMi42OTAwMzI5MzEsMTExNTEwNS44NzgwMjM4MzQ0LDM1MzY2MC40MzQ3MzI1ODQ1LDMxNTUzMzAuNjY3NjUyNzY2LDI1MTc0Mi4zOTQzOTk2MDI3Miw2NzA4MTUuMDg0NTc0MjIzNiw0ODQ0MjguMTA1MDYxNjEwNSwzMjk4NDI1LjE2NTM0NzQxMzYsNzEzMDY2LjAyMjYzNjkwNDYsNzgzMzE2Ljc0MjMwMjM3ODQsNzQzODc3MS4wNjU2NzIyMTksNDQ1MDQzMC44MTc4ODY0OSwxMzUyNjU2LjMzNzA1NjE4NjMsMTM0MTE4OC4zOTQxNDMyMjgyLDQ4MTQxNzMuMTAzOTk4NDE2LDQxMDk0MS4wNDQyMjMzMzQyLDE1NzI3MDguNjU3OTQ4NzE2OCwyOTU4OTguODM5OTkyNjUzLDIyMzAxOTguOTEwNjIyMjU3Myw4MTczOTEzLjM3MzQyMTI2OTUsODc1NDAyLjI0MzY0MzIzNDYsMjc3NDc3OC4yNDMyNTE5NDM1LDIzODY2MC4xNzkxMjkzOTcwMywyMzEwNDk1LjQxMjQ1NDUyMSwyMTAyNTYwLjU1MjAzODk3MDQsNzA4ODcwLjc2NTY0ODYxNTQsMTkzNTYyLjUzOTQwODU2Njc4CisyOSxUdWUgMjIgRmViIDExLDI0NTc1Ny4zNDY3NDU0NzEzNSwxNzQzMjYzLjMzNTgxNDAxNjIsMTA0Nzk3Mi44NjcyMDkxMjU4LDIwMTEyMDcuNzY1MjQ4ODUwMiwxLjMyNzc2ODYwMTk3OTEwOTNFNywxNjg2MDk0LjMyNjUzOTYzMywxMzM0OTgxLjU0MTQ2NDM4MSwyMjQyNDcuMTI4OTkyNTA0MTUsMzA3MTcyLjQ3OTI1Mzg2MTc2LDYyNjUwOTIuMjUwMTA0Njc5LDMyMDkwODkuNjA2MDY1MjUzMyw0NzQ5MjIuNTA3MDA5OTc4MiwxMTQ3MTE5LjEwNTg2NDQzNDcsNTA3MjI5LjU5MTQzOTI0NzEsNDg2ODM2Mi45MTY4NTUzLDIzODM1NTAuMjU3OTc5NjIxLDEwNTM4NjAuMDMxMTYzNTczMywxNTg0MzczLjU3Mzc1MDIxMzMsMTc1MTgzOC42NzM0NDk3MTY4LDI0ODg4NDYuMDc2MzYwNDUyNSwyMDc2MjIyLjU2MTI5NjEyOTQsNDk5NzY5Ljg0MTM4ODg5ODcsMzg5NTg3MC4xNDE3OTI2OTM2LDE5Mjg0MzUuNzkzNzYyODU0OCwyMTkzMzIyLjc1NjczODQ1NjQsMTExNTEwNi4wNTQwODc1NjA2LDM1MzY2MC40NTA3MTc4MDQ5NSwzMTU1MzMwLjc1Mzc2ODkzNjcsMjUxNzQyLjQxMTM5NjcxOTcsNjcwODE1LjExOTI0Nzg2MDMsNDg0NDI4LjEyNjExODE2ODcsMzI5ODQyNS4yNzA1NTkwNTU3LDcxMzA2Ni4wNTEwNTM3OTIxLDc4MzMxNi43NDc4MzY1NDQ1LDc0Mzg3NzEuMzAzNDg4MzYxLDQ0NTA0MzEuMDA2MzkwOSwxMzUyNjU2LjQzMDk3MTcyNSwxMzQxMTg4LjQzNjIxNjkxNCw0ODE0MTczLjI5ODI0MDIxMiw0MTA5NDEuMDU1Njk1MzE1LDE1NzI3MDguNzk3NzM5ODI3NSwyOTU4OTguODY0Mjk3OTcwMjYsMjIzMDE5OC45ODc2NTkzOTgsODE3MzkxMy41NzU3ODg2MTI1LDg3NTQwMi4yNTY5NzIzMjQ4LDI3NzQ3NzguMzMwNTM5NzMzLDIzODY2MC4xOTM5MTA5MzA2NSwyMzEwNDk1LjQ3MTg1MDA2NiwyMTAyNTYwLjY5NzYwMjA5MjMsNzA4ODcxLjAxNTg0MDgwNjEsMTkzNTYyLjU1MzM0NDAzOTUKKzMwLFdlZCAyMyBGZWIgMTEsMjQ1NzU3LjM0MjY4NzgyMjg4LDE3NDMyNjMuMTM0ODgxNzIwNiwxMDQ3OTcyLjc2Nzc3MjgwNywyMDExMjA3LjczMzg1MDcyNDgsMS4zMjc3Njg2MDE0NDgwMTI5RTcsMTY4NjA5NC4zMDUwNzgwNTYsMTMzNDk4MS40NTA1MjM2MDkzLDIyNDI0Ny4xMjc1NTAwNDI0NywzMDcxNzAuNTg3MjYyNzMwOCw2MjY1MDkyLjE0MDU2MjM4MSwzMjA5MDg5LjU2MTY2NDQ3NzUsNDc0OTIyLjUwMjU4MTMyMDMsMTE0NzExOC45NjEwNzkwNDgsNTA3MjI5LjU2ODU5NTQzNjQsNDg2ODM2Mi44MjY4ODQ3NjQsMjM4MzU1MC4wNTM4MzUwNjk4LDEwNTM4NTkuNzcyMDM3ODg2LDE1ODQzNzMuMzg3NzA3NDQ4LDE3NTE4MzguNTUyOTM5Mzk5OCwyNDg4ODQ1Ljk5ODg5NTYwMiwyMDc2MjIyLjQ4ODM2MTEyNDksNDk5NzY5LjgwMzgyNDcwODc0LDM4OTU4NzAuMDAzMDIzMTY5NSwxOTI4NDM1Ljc1NTY2ODI5MSwyMTkzMzIyLjY5MDU1MTEyNCwxMTE1MTA1Ljg3OTM4NzkyOCwzNTM2NjAuNDM0ODU5ODE0MywzMTU1MzMwLjY2ODMxMDQ3MzcsMjUxNzQyLjM5NDUzNDQ2MDYyLDY3MDgxNS4wODQ4NTAzODA0LDQ4NDQyOC4xMDUyMjkwODk3LDMyOTg0MjUuMTY2MTY5MzM0LDcxMzA2Ni4wMjI4NjIzNTM4LDc4MzMxNi43NDIyMjgwNDk0LDc0Mzg3NzEuMDY3NTMwNTA3LDQ0NTA0MzAuODE5Mzg0OTEzLDEzNTI2NTYuMzM3ODAwODQ5NSwxMzQxMTg4LjM5NDQ3MTMwMzgsNDgxNDE3My4xMDU1NDAxNjMsNDEwOTQxLjA0NDMxMTMxMDUsMTU3MjcwOC42NTkwNDk3ODUsMjk1ODk4Ljg0MDE4NDUyNzcsMjIzMDE5OC45MTEyMjg1MDY0LDgxNzM5MTMuMzc0OTMzNjQ3LDg3NTQwMi4yNDM3MTYxMjk5LDI3NzQ3NzguMjQzOTMyNzk3NiwyMzg2NjAuMTc5MjQ2ODgyMSwyMzEwNDk1LjQxMjkwMjUyLDIxMDI1NjAuNTUzMTkzMjI5Myw3MDg4NzAuNzY3NTU1MzYwMywxOTM1NjIuNTM5NTE4OTY1MTUKKzMxLFRodSAyNCBGZWIgMTEsMjQ1NzU3LjM0NDAzMDk1MjA1LDE3NDMyNjMuMjAxMjQ1NTQ1NCwxMDQ3OTcyLjgwMDYxMjczNjUsMjAxMTIwNy43NDQyNDg0NDM3LDEuMzI3NzY4NjAxNjQ0NTEyNkU3LDE2ODYwOTQuMzEyMjAxMzIsMTMzNDk4MS40ODA1NTUxMTcsMjI0MjQ3LjEyODA0NDczMzUsMzA3MTcxLjIxMjM5OTM5MDQsNjI2NTA5Mi4xNzY4MDgwODgsMzIwOTA4OS41NzYzODU2ODU3LDQ3NDkyMi41MDQwNjEzNDgyLDExNDcxMTkuMDA4ODk5OTI1Myw1MDcyMjkuNTc2MTM4OTIwNDQsNDg2ODM2Mi44NTY2NDQ4NjgsMjM4MzU1MC4xMjEyNTQwNTIsMTA1Mzg1OS44NTc2Mzc0OTEsMTU4NDM3My40NDkxNTM4OTEzLDE3NTE4MzguNTkyNzM1NzkxLDI0ODg4NDYuMDI0NDgxMjcxLDIwNzYyMjIuNTEyNDQ4MDMwOCw0OTk3NjkuODE2MjI5ODg1OSwzODk1ODcwLjA0ODg1MTYwNTUsMTkyODQzNS43NjgyNjQ4OTE2LDIxOTMzMjIuNzEyNDEyNzczNiwxMTE1MTA1LjkzNzA5MjQ1MTEsMzUzNjYwLjQ0MDA5NjQ0MzksMzE1NTMzMC42OTY1NDIwMDEzLDI1MTc0Mi40MDAxMDI4ODg3LDY3MDgxNS4wOTYyMDkwNDUzLDQ4NDQyOC4xMTIxMjcxMzQ0NiwzMjk4NDI1LjIwMDY0NzMyNDMsNzEzMDY2LjAzMjE3MjAzOTcsNzgzMzE2Ljc0NDEyODExNiw3NDM4NzcxLjE0NTQ2MjgzMSw0NDUwNDMwLjg4MTEzODg3OSwxMzUyNjU2LjM2ODU2ODg4NTYsMTM0MTE4OC40MDgyNTkzNTUyLDQ4MTQxNzMuMTY5MTc1MzkzLDQxMDk0MS4wNDgwNzE5MTE5LDE1NzI3MDguNzA0ODUyNzE4MiwyOTU4OTguODQ4MTQ3OTEwMjYsMjIzMDE5OC45MzY0NzAzOTEsODE3MzkxMy40NDEzMDA0NjQsODc1NDAyLjI0ODEwNzE4OTgsMjc3NDc3OC4yNzI1Mzc4OTQ1LDIzODY2MC4xODQwODkzMTEsMjMxMDQ5NS40MzIzNzgzNzY0LDIxMDI1NjAuNjAwODgxNjc0LDcwODg3MC44NDk1Nzg4MTk5LDE5MzU2Mi41NDQwODQ0OTEzCiszMixGcmkgMjUgRmViIDExLDI0NTc1Ny4zNDI5NjM5MzQzOCwxNzQzMjYzLjE0ODQwNzkzMTQsMTA0Nzk3Mi43NzQ0NjQ2ODksMjAxMTIwNy43MzU5OTE4NDQ3LDEuMzI3NzY4NjAxNTA0ODUxNUU3LDE2ODYwOTQuMzA2NTU3NjYzNywxMzM0OTgxLjQ1NjY0MTAyODQsMjI0MjQ3LjEyNzY2NTM2MjI2LDMwNzE3MC43MTUxNTgwOTg0NCw2MjY1MDkyLjE0ODAwMjM1OCwzMjA5MDg5LjU2NDcwOTgzMDYsNDc0OTIyLjUwMjg5Njc0NDksMTE0NzExOC45NzA4MjY4Njc1LDUwNzIyOS41NzAxMzE4MjU2Myw0ODY4MzYyLjgzMjk4NTgyNCwyMzgzNTUwLjA2NzU3MTU5NzYsMTA1Mzg1OS43ODk0OTgwMjQsMTU4NDM3My40MDAyMzE2NzIsMTc1MTgzOC41NjEwNDU5OTg3LDI0ODg4NDYuMDA0MTEwODA1LDIwNzYyMjIuNDkzMjY4NzU1LDQ5OTc2OS44MDYzNTE4ODY5LDM4OTU4NzAuMDEyMzYwMjI2NCwxOTI4NDM1Ljc1ODI0NzM4MiwyMTkzMzIyLjY5NTAwNzg4NzcsMTExNTEwNS44OTExNTMyMDk2LDM1MzY2MC40MzU5MjYzNjY2NiwzMTU1MzMwLjY3NDA2OTQ5OTYsMjUxNzQyLjM5NTY2ODczMjUzLDY3MDgxNS4wODcxNjM3NTgsNDg0NDI4LjEwNjYzNDA2MjgzLDMyOTg0MjUuMTczMTk2NTg3Nyw3MTMwNjYuMDI0NzU4NzEsNzgzMzE2Ljc0MjY1MzE3MzMsNzQzODc3MS4wODM0MTQ0MTQsNDQ1MDQzMC44MzE5NjMwNjcsMTM1MjY1Ni4zNDQwNjgzNjI4LDEzNDExODguMzk3MjgxNzYzMSw0ODE0MTczLjExODUwMjI0NCw0MTA5NDEuMDQ1MDc4MzI4MDUsMTU3MjcwOC42NjgzODIzODMsMjk1ODk4Ljg0MTgwNjk2NTk0LDIyMzAxOTguOTE2MzcxODIxNCw4MTczOTEzLjM4ODQ4MjgxNCw4NzU0MDIuMjQ0NjIxMjc3NiwyNzc0Nzc4LjI0OTc2MzM4OSwyMzg2NjAuMTgwMjMzMjAxODksMjMxMDQ5NS40MTY4NzcyODc0LDIxMDI1NjAuNTYyOTA3NDM5Nyw3MDg4NzAuNzg0MjkwNTI2NSwxOTM1NjIuNTQwNDQ5MDA0NjgKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0lTdGF0ZXNPbmx5X1JLX1JlZmVyZW5jZS9UZXN0U0kvaHVtYW4vUG9wdWxhdGlvbiBDb3VudF8wLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0lTdGF0ZXNPbmx5X1JLX1JlZmVyZW5jZS9UZXN0U0kvaHVtYW4vUG9wdWxhdGlvbiBDb3VudF8wLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYmE4MzRhCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTSVN0YXRlc09ubHlfUktfUmVmZXJlbmNlL1Rlc3RTSS9odW1hbi9Qb3B1bGF0aW9uIENvdW50XzAuY3N2CkBAIC0wLDAgKzEsMzMgQEAKK2l0ZXJhdGlvbix0aW1lLHN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL25vZGUvdHJhbnNwb3J0L3BpcGUvVVNBCisxLFR1ZSAyNSBKYW4gMTEsOTQzMjExLjAKKzIsV2VkIDI2IEphbiAxMSw5NDMyMTAuOTk5OTk5OTk5OQorMyxUaHUgMjcgSmFuIDExLDk0MzIxMC45OTk5OTk5OTk5Cis0LEZyaSAyOCBKYW4gMTEsOTQzMjExLjAKKzUsU2F0IDI5IEphbiAxMSw5NDMyMTEuMAorNixTdW4gMzAgSmFuIDExLDk0MzIxMS4wMDAwMDAwMDAyCis3LE1vbiAzMSBKYW4gMTEsOTQzMjExLjAwMDAwMDAwMDIKKzgsVHVlIDEgRmViIDExLDk0MzIxMS4wMDAwMDAwMDAyCis5LFdlZCAyIEZlYiAxMSw5NDMyMTEuMDAwMDAwMDAwMworMTAsVGh1IDMgRmViIDExLDk0MzIxMS4wMDAwMDAwMDAyCisxMSxGcmkgNCBGZWIgMTEsOTQzMjExLjAwMDAwMDAwMDMKKzEyLFNhdCA1IEZlYiAxMSw5NDMyMTEuMDAwMDAwMDAwNQorMTMsU3VuIDYgRmViIDExLDk0MzIxMS4wMDAwMDAwMDA2CisxNCxNb24gNyBGZWIgMTEsOTQzMjExLjAwMDAwMDAwMDYKKzE1LFR1ZSA4IEZlYiAxMSw5NDMyMTEuMDAwMDAwMDAwNQorMTYsV2VkIDkgRmViIDExLDk0MzIxMS4wMDAwMDAwMDA2CisxNyxUaHUgMTAgRmViIDExLDk0MzIxMS4wMDAwMDAwMDA1CisxOCxGcmkgMTEgRmViIDExLDk0MzIxMS4wMDAwMDAwMDAzCisxOSxTYXQgMTIgRmViIDExLDk0MzIxMS4wMDAwMDAwMDA1CisyMCxTdW4gMTMgRmViIDExLDk0MzIxMS4wMDAwMDAwMDAzCisyMSxNb24gMTQgRmViIDExLDk0MzIxMS4wMDAwMDAwMDAzCisyMixUdWUgMTUgRmViIDExLDk0MzIxMS4wMDAwMDAwMDAzCisyMyxXZWQgMTYgRmViIDExLDk0MzIxMS4wMDAwMDAwMDA2CisyNCxUaHUgMTcgRmViIDExLDk0MzIxMS4wMDAwMDAwMDAzCisyNSxGcmkgMTggRmViIDExLDk0MzIxMS4wMDAwMDAwMDAzCisyNixTYXQgMTkgRmViIDExLDk0MzIxMS4wMDAwMDAwMDAzCisyNyxTdW4gMjAgRmViIDExLDk0MzIxMS4wMDAwMDAwMDAzCisyOCxNb24gMjEgRmViIDExLDk0MzIxMS4wMDAwMDAwMDA1CisyOSxUdWUgMjIgRmViIDExLDk0MzIxMS4wMDAwMDAwMDA3CiszMCxXZWQgMjMgRmViIDExLDk0MzIxMS4wMDAwMDAwMDA2CiszMSxUaHUgMjQgRmViIDExLDk0MzIxMS4wMDAwMDAwMDA3CiszMixGcmkgMjUgRmViIDExLDk0MzIxMS4wMDAwMDAwMDA5CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNJU3RhdGVzT25seV9SS19SZWZlcmVuY2UvVGVzdFNJL2h1bWFuL1BvcHVsYXRpb24gQ291bnRfMS5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNJU3RhdGVzT25seV9SS19SZWZlcmVuY2UvVGVzdFNJL2h1bWFuL1BvcHVsYXRpb24gQ291bnRfMS5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzFlYmIyNAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0lTdGF0ZXNPbmx5X1JLX1JlZmVyZW5jZS9UZXN0U0kvaHVtYW4vUG9wdWxhdGlvbiBDb3VudF8xLmNzdgpAQCAtMCwwICsxLDMzIEBACitpdGVyYXRpb24sdGltZSxVUy1BSyxVUy1BTCxVUy1BUixVUy1BWixVUy1DQSxVUy1DTyxVUy1DVCxVUy1EQyxVUy1ERSxVUy1GTCxVUy1HQSxVUy1ISSxVUy1JQSxVUy1JRCxVUy1JTCxVUy1JTixVUy1LUyxVUy1LWSxVUy1MQSxVUy1NQSxVUy1NRCxVUy1NRSxVUy1NSSxVUy1NTixVUy1NTyxVUy1NUyxVUy1NVCxVUy1OQyxVUy1ORCxVUy1ORSxVUy1OSCxVUy1OSixVUy1OTSxVUy1OVixVUy1OWSxVUy1PSCxVUy1PSyxVUy1PUixVUy1QQSxVUy1SSSxVUy1TQyxVUy1TRCxVUy1UTixVUy1UWCxVUy1VVCxVUy1WQSxVUy1WVCxVUy1XQSxVUy1XSSxVUy1XVixVUy1XWQorMSxUdWUgMjUgSmFuIDExLDYyNjkzMi4wLDQ0NDcxMDAuMCwyNjczNDAwLjAsNTEzMDYzMi4wLDMuMzg3MTY0OEU3LDQzMDEyNjEuMCwzNDA1NTY1LjAsNTcyMDU5LjAsNzgzNjAwLjAsMS41OTgyMzc4RTcsODE4NjQ1My4wLDEyMTE1MzcuMCwyOTI2MzI0LjAsMTI5Mzk1My4wLDEuMjQxOTI5M0U3LDYwODA0ODUuMCwyNjg4NDE4LjAsNDA0MTc2OS4wLDQ0Njg5NzYuMCw2MzQ5MDk3LjAsNTI5NjQ4Ni4wLDEyNzQ5MjMuMCw5OTM4NDQ0LjAsNDkxOTQ3OS4wLDU1OTUyMTEuMCwyODQ0NjU4LjAsOTAyMTk1LjAsODA0OTMxMy4wLDY0MjIwMC4wLDE3MTEyNjMuMCwxMjM1Nzg2LjAsODQxNDM1MC4wLDE4MTkwNDYuMCwxOTk4MjU3LjAsMS44OTc2NDU3RTcsMS4xMzUzMTRFNywzNDUwNjU0LjAsMzQyMTM5OS4wLDEuMjI4MTA1NEU3LDEwNDgzMTkuMCw0MDEyMDEyLjAsNzU0ODQ0LjAsNTY4OTI4My4wLDIuMDg1MTgyRTcsMjIzMzE2OS4wLDcwNzg1MTYuMCw2MDg4MjcuMCw1ODk0MTIxLjAsNTM2MzY3NS4wLDE4MDgzNDQuMCw0OTM3ODIuMAorMixXZWQgMjYgSmFuIDExLDYyNjkzMS45OTk5OTk5OTk4LDQ0NDcwOTkuOTk5OTk5OTk5LDI2NzM0MDAuMCw1MTMwNjMxLjk5OTk5OTk5OSwzLjM4NzE2NDgwMDAwMDAwMUU3LDQzMDEyNjEuMCwzNDA1NTY1LjAsNTcyMDU4Ljk5OTk5OTk5OTgsNzgzNTk5Ljk5OTk5OTk5OTksMS41OTgyMzc4RTcsODE4NjQ1My4wLDEyMTE1MzcuMDAwMDAwMDAwMiwyOTI2MzIzLjk5OTk5OTk5OTUsMTI5Mzk1My4wMDAwMDAwMDA1LDEuMjQxOTI5Mjk5OTk5OTk5OEU3LDYwODA0ODUuMDAwMDAwMDAxLDI2ODg0MTguMDAwMDAwMDAwNSw0MDQxNzY4Ljk5OTk5OTk5OTUsNDQ2ODk3NS45OTk5OTk5OTksNjM0OTA5Ny4wMDAwMDAwMDEsNTI5NjQ4NS45OTk5OTk5OTgsMTI3NDkyMi45OTk5OTk5OTk4LDk5Mzg0NDMuOTk5OTk5OTk2LDQ5MTk0NzguOTk5OTk5OTk4LDU1OTUyMTAuOTk5OTk5OTk3LDI4NDQ2NTcuOTk5OTk5OTk5LDkwMjE5NS4wMDAwMDAwMDAzLDgwNDkzMTMuMDAwMDAwMDAxLDY0MjE5OS45OTk5OTk5OTk4LDE3MTEyNjMuMDAwMDAwMDAwNSwxMjM1Nzg1Ljk5OTk5OTk5OTgsODQxNDM1MC4wMDAwMDAwMDIsMTgxOTA0Ni4wMDAwMDAwMDAyLDE5OTgyNTYuOTk5OTk5OTk5MywxLjg5NzY0NTY5OTk5OTk5OTNFNywxLjEzNTMxNDAwMDAwMDAwMDRFNywzNDUwNjU0LjAwMDAwMDAwMTQsMzQyMTM5OS4wMDAwMDAwMDEsMS4yMjgxMDUzOTk5OTk5OTk4RTcsMTA0ODMxOS4wMDAwMDAwMDAxLDQwMTIwMTIuMDAwMDAwMDAwNSw3NTQ4NDQuMCw1Njg5MjgyLjk5OTk5OTk5OSwyLjA4NTE4MkU3LDIyMzMxNjkuMDAwMDAwMDAwNSw3MDc4NTE2LjAsNjA4ODI2Ljk5OTk5OTk5OTgsNTg5NDEyMS4wMDAwMDAwMDEsNTM2MzY3NS4wMDAwMDAwMDEsMTgwODM0NC4wMDAwMDAwMDAyLDQ5Mzc4Mi4wCiszLFRodSAyNyBKYW4gMTEsNjI2OTMxLjk5OTk5OTk5OTgsNDQ0NzA5OS45OTk5OTk5OTksMjY3MzM5OS45OTk5OTk5OTk1LDUxMzA2MzEuOTk5OTk5OTk5LDMuMzg3MTY0OEU3LDQzMDEyNjEuMDAwMDAwMDAxLDM0MDU1NjQuOTk5OTk5OTk5LDU3MjA1OC45OTk5OTk5OTk3LDc4MzYwMC4wLDEuNTk4MjM3ODAwMDAwMDAwNEU3LDgxODY0NTIuOTk5OTk5OTk4LDEyMTE1MzcuMCwyOTI2MzIzLjk5OTk5OTk5OTUsMTI5Mzk1Mi45OTk5OTk5OTk4LDEuMjQxOTI5Mjk5OTk5OTk5OEU3LDYwODA0ODQuOTk5OTk5OTk3LDI2ODg0MTguMCw0MDQxNzY4Ljk5OTk5OTk5OSw0NDY4OTc2LjAwMDAwMDAwMSw2MzQ5MDk3LjAsNTI5NjQ4NS45OTk5OTk5OTksMTI3NDkyMy4wLDk5Mzg0NDMuOTk5OTk5OTk2LDQ5MTk0NzguOTk5OTk5OTk4LDU1OTUyMTAuOTk5OTk5OTk5LDI4NDQ2NTcuOTk5OTk5OTk4Niw5MDIxOTUuMDAwMDAwMDAwMiw4MDQ5MzEyLjk5OTk5OTk5OSw2NDIxOTkuOTk5OTk5OTk5NSwxNzExMjYzLjAwMDAwMDAwMDUsMTIzNTc4Ni4wLDg0MTQzNDkuOTk5OTk5OTk4LDE4MTkwNDYuMDAwMDAwMDAwNSwxOTk4MjU2Ljk5OTk5OTk5OTUsMS44OTc2NDU3RTcsMS4xMzUzMTQwMDAwMDAwMDA2RTcsMzQ1MDY1NC4wMDAwMDAwMDE0LDM0MjEzOTkuMDAwMDAwMDAxLDEuMjI4MTA1NEU3LDEwNDgzMTkuMCw0MDEyMDEyLjAsNzU0ODQ0LjAwMDAwMDAwMDIsNTY4OTI4My4wMDAwMDAwMDEsMi4wODUxODJFNywyMjMzMTY5LjAwMDAwMDAwMSw3MDc4NTE2LjAsNjA4ODI2Ljk5OTk5OTk5OTksNTg5NDEyMS4wMDAwMDAwMDEsNTM2MzY3NS4wMDAwMDAwMDIsMTgwODM0NC4wMDAwMDAwMDA1LDQ5Mzc4Mi4wMDAwMDAwMDAxCis0LEZyaSAyOCBKYW4gMTEsNjI2OTMxLjk5OTk5OTk5OTgsNDQ0NzA5OS45OTk5OTk5OTgsMjY3MzM5OS45OTk5OTk5OTk1LDUxMzA2MzEuOTk5OTk5OTk5LDMuMzg3MTY0ODAwMDAwMDAxRTcsNDMwMTI2MS4wLDM0MDU1NjQuOTk5OTk5OTk4LDU3MjA1OC45OTk5OTk5OTk3LDc4MzYwMC4wLDEuNTk4MjM3ODAwMDAwMDAwNkU3LDgxODY0NTIuOTk5OTk5OTk5LDEyMTE1MzcuMCwyOTI2MzIzLjk5OTk5OTk5OSwxMjkzOTUzLjAsMS4yNDE5MjkyOTk5OTk5OTk4RTcsNjA4MDQ4NC45OTk5OTk5OTcsMjY4ODQxOC4wMDAwMDAwMDA1LDQwNDE3NjguOTk5OTk5OTk4Niw0NDY4OTc2LjAwMDAwMDAwMSw2MzQ5MDk2Ljk5OTk5OTk5OCw1Mjk2NDg2LjAwMDAwMDAwMiwxMjc0OTIyLjk5OTk5OTk5OTgsOTkzODQ0My45OTk5OTk5OTYsNDkxOTQ3OC45OTk5OTk5OTgsNTU5NTIxMC45OTk5OTk5OTksMjg0NDY1Ny45OTk5OTk5OTg2LDkwMjE5NS4wMDAwMDAwMDAyLDgwNDkzMTIuOTk5OTk5OTk5LDY0MjE5OS45OTk5OTk5OTk1LDE3MTEyNjMuMDAwMDAwMDAwNSwxMjM1Nzg2LjAwMDAwMDAwMDIsODQxNDM0OS45OTk5OTk5OTYsMTgxOTA0Ni4wMDAwMDAwMDA3LDE5OTgyNTYuOTk5OTk5OTk5MywxLjg5NzY0NTdFNywxLjEzNTMxNDAwMDAwMDAwMDZFNywzNDUwNjU0LjAwMDAwMDAwMiwzNDIxMzk5LjAwMDAwMDAwMSwxLjIyODEwNTM5OTk5OTk5OThFNywxMDQ4MzE5LjAsNDAxMjAxMi4wMDAwMDAwMDEsNzU0ODQ0LjAwMDAwMDAwMDIsNTY4OTI4My4wMDAwMDAwMDEsMi4wODUxODE5OTk5OTk5OTk2RTcsMjIzMzE2OS4wMDAwMDAwMDEsNzA3ODUxNi4wLDYwODgyNi45OTk5OTk5OTk5LDU4OTQxMjEuMCw1MzYzNjc1LjAwMDAwMDAwMSwxODA4MzQ0LjAwMDAwMDAwMDUsNDkzNzgyLjAwMDAwMDAwMDIKKzUsU2F0IDI5IEphbiAxMSw2MjY5MzEuOTk5OTk5OTk5OCw0NDQ3MDk5Ljk5OTk5OTk5NiwyNjczMzk5Ljk5OTk5OTk5OTUsNTEzMDYzMS45OTk5OTk5OTksMy4zODcxNjQ4MDAwMDAwMDFFNyw0MzAxMjYxLjAsMzQwNTU2NC45OTk5OTk5OTg2LDU3MjA1OC45OTk5OTk5OTk1LDc4MzYwMC4wLDEuNTk4MjM3ODAwMDAwMDAwNkU3LDgxODY0NTIuOTk5OTk5OTk5LDEyMTE1MzcuMCwyOTI2MzIzLjk5OTk5OTk5OSwxMjkzOTUzLjAsMS4yNDE5MjkyOTk5OTk5OTk4RTcsNjA4MDQ4NC45OTk5OTk5OTcsMjY4ODQxOC4wLDQwNDE3NjguOTk5OTk5OTk5LDQ0Njg5NzYuMDAwMDAwMDAxLDYzNDkwOTYuOTk5OTk5OTk4LDUyOTY0ODYuMDAwMDAwMDAxLDEyNzQ5MjIuOTk5OTk5OTk5NSw5OTM4NDQzLjk5OTk5OTk5OCw0OTE5NDc4Ljk5OTk5OTk5OSw1NTk1MjEwLjk5OTk5OTk5OCwyODQ0NjU3Ljk5OTk5OTk5OCw5MDIxOTUuMDAwMDAwMDAwMyw4MDQ5MzEyLjk5OTk5OTk5OSw2NDIxOTkuOTk5OTk5OTk5NCwxNzExMjYzLjAwMDAwMDAwMDUsMTIzNTc4Ni4wMDAwMDAwMDAyLDg0MTQzNDkuOTk5OTk5OTk4LDE4MTkwNDYuMDAwMDAwMDAwNSwxOTk4MjU2Ljk5OTk5OTk5OTUsMS44OTc2NDU3RTcsMS4xMzUzMTQwMDAwMDAwMDA2RTcsMzQ1MDY1NC4wMDAwMDAwMDIsMzQyMTM5OS4wMDAwMDAwMDIsMS4yMjgxMDUzOTk5OTk5OTk4RTcsMTA0ODMxOS4wLDQwMTIwMTIuMDAwMDAwMDAxLDc1NDg0NC4wMDAwMDAwMDAxLDU2ODkyODMuMDAwMDAwMDAyLDIuMDg1MTgyRTcsMjIzMzE2OS4wMDAwMDAwMDEsNzA3ODUxNi4wLDYwODgyNi45OTk5OTk5OTk5LDU4OTQxMjEuMCw1MzYzNjc1LjAwMDAwMDAwMSwxODA4MzQ0LjAwMDAwMDAwMDcsNDkzNzgyLjAwMDAwMDAwMDEKKzYsU3VuIDMwIEphbiAxMSw2MjY5MzEuOTk5OTk5OTk5OCw0NDQ3MDk5Ljk5OTk5OTk5NywyNjczMzk5Ljk5OTk5OTk5OSw1MTMwNjMyLjAsMy4zODcxNjQ4MDAwMDAwMDFFNyw0MzAxMjYxLjAwMDAwMDAwMSwzNDA1NTY0Ljk5OTk5OTk5OCw1NzIwNTguOTk5OTk5OTk5NSw3ODM1OTkuOTk5OTk5OTk5OSwxLjU5ODIzNzgwMDAwMDAwMDdFNyw4MTg2NDUzLjAsMTIxMTUzNy4wMDAwMDAwMDAyLDI5MjYzMjMuOTk5OTk5OTk5NSwxMjkzOTUzLjAsMS4yNDE5MjkzRTcsNjA4MDQ4NC45OTk5OTk5OTgsMjY4ODQxOC4wMDAwMDAwMDA1LDQwNDE3NjguOTk5OTk5OTk4Niw0NDY4OTc2LjAwMDAwMDAwMSw2MzQ5MDk2Ljk5OTk5OTk5Nyw1Mjk2NDg2LjAwMDAwMDAwMSwxMjc0OTIyLjk5OTk5OTk5OTUsOTkzODQ0My45OTk5OTk5OTgsNDkxOTQ3OC45OTk5OTk5OTgsNTU5NTIxMC45OTk5OTk5OTgsMjg0NDY1Ny45OTk5OTk5OTc3LDkwMjE5NS4wMDAwMDAwMDAzLDgwNDkzMTIuOTk5OTk5OTk5LDY0MjE5OS45OTk5OTk5OTk1LDE3MTEyNjMuMDAwMDAwMDAwNywxMjM1Nzg2LjAwMDAwMDAwMDIsODQxNDM1MC4wLDE4MTkwNDYuMDAwMDAwMDAwNSwxOTk4MjU2Ljk5OTk5OTk5OTUsMS44OTc2NDU3RTcsMS4xMzUzMTQwMDAwMDAwMDA3RTcsMzQ1MDY1NC4wMDAwMDAwMDIzLDM0MjEzOTkuMDAwMDAwMDAxNCwxLjIyODEwNTQwMDAwMDAwMDJFNywxMDQ4MzE5LjAwMDAwMDAwMDEsNDAxMjAxMi4wMDAwMDAwMDEsNzU0ODQ0LjAwMDAwMDAwMDIsNTY4OTI4My4wMDAwMDAwMDIsMi4wODUxODE5OTk5OTk5OTkzRTcsMjIzMzE2OS4wMDAwMDAwMDEsNzA3ODUxNi4wLDYwODgyNi45OTk5OTk5OTk5LDU4OTQxMjEuMDAwMDAwMDAxLDUzNjM2NzUuMDAwMDAwMDAxLDE4MDgzNDQuMDAwMDAwMDAwNyw0OTM3ODIuMDAwMDAwMDAwMQorNyxNb24gMzEgSmFuIDExLDYyNjkzMS45OTk5OTk5OTk4LDQ0NDcwOTkuOTk5OTk5OTk2LDI2NzMzOTkuOTk5OTk5OTk5LDUxMzA2MzEuOTk5OTk5OTk5LDMuMzg3MTY0ODAwMDAwMDAxRTcsNDMwMTI2MS4wMDAwMDAwMDEsMzQwNTU2NC45OTk5OTk5OTg2LDU3MjA1OC45OTk5OTk5OTk0LDc4MzU5OS45OTk5OTk5OTk4LDEuNTk4MjM3ODAwMDAwMDAwNkU3LDgxODY0NTIuOTk5OTk5OTk5LDEyMTE1MzcuMDAwMDAwMDAwNSwyOTI2MzIzLjk5OTk5OTk5OTUsMTI5Mzk1My4wLDEuMjQxOTI5M0U3LDYwODA0ODQuOTk5OTk5OTk4LDI2ODg0MTguMDAwMDAwMDAxLDQwNDE3NjguOTk5OTk5OTk4Niw0NDY4OTc2LjAwMDAwMDAwMiw2MzQ5MDk2Ljk5OTk5OTk5OCw1Mjk2NDg2LjAsMTI3NDkyMi45OTk5OTk5OTk4LDk5Mzg0NDMuOTk5OTk5OTk2LDQ5MTk0NzguOTk5OTk5OTk4LDU1OTUyMTAuOTk5OTk5OTk4LDI4NDQ2NTcuOTk5OTk5OTk3LDkwMjE5NS4wMDAwMDAwMDAzLDgwNDkzMTMuMCw2NDIxOTkuOTk5OTk5OTk5NCwxNzExMjYzLjAwMDAwMDAwMDUsMTIzNTc4Ni4wMDAwMDAwMDAyLDg0MTQzNTAuMCwxODE5MDQ2LjAwMDAwMDAwMDUsMTk5ODI1Ni45OTk5OTk5OTk1LDEuODk3NjQ1N0U3LDEuMTM1MzE0MDAwMDAwMDAxRTcsMzQ1MDY1NC4wMDAwMDAwMDIsMzQyMTM5OS4wMDAwMDAwMDE0LDEuMjI4MTA1NDAwMDAwMDAwMkU3LDEwNDgzMTkuMDAwMDAwMDAwMiw0MDEyMDEyLjAwMDAwMDAwMDUsNzU0ODQ0LjAwMDAwMDAwMDIsNTY4OTI4My4wMDAwMDAwMDEsMi4wODUxODE5OTk5OTk5OTlFNywyMjMzMTY5LjAwMDAwMDAwMSw3MDc4NTE2LjAsNjA4ODI3LjAsNTg5NDEyMS4wMDAwMDAwMDEsNTM2MzY3NS4wMDAwMDAwMDEsMTgwODM0NC4wMDAwMDAwMDA3LDQ5Mzc4Mi4wMDAwMDAwMDAxCis4LFR1ZSAxIEZlYiAxMSw2MjY5MzEuOTk5OTk5OTk5OCw0NDQ3MDk5Ljk5OTk5OTk5NiwyNjczMzk5Ljk5OTk5OTk5OCw1MTMwNjMxLjk5OTk5OTk5OCwzLjM4NzE2NDgwMDAwMDAwMUU3LDQzMDEyNjEuMDAwMDAwMDAyLDM0MDU1NjQuOTk5OTk5OTk4Niw1NzIwNTguOTk5OTk5OTk5NCw3ODM1OTkuOTk5OTk5OTk5OCwxLjU5ODIzNzgwMDAwMDAwMDZFNyw4MTg2NDUyLjk5OTk5OTk5OSwxMjExNTM3LjAwMDAwMDAwMDUsMjkyNjMyMy45OTk5OTk5OTk1LDEyOTM5NTMuMCwxLjI0MTkyOTNFNyw2MDgwNDg0Ljk5OTk5OTk5NywyNjg4NDE4LjAwMDAwMDAwMDUsNDA0MTc2OC45OTk5OTk5OTgsNDQ2ODk3Ni4wMDAwMDAwMDEsNjM0OTA5Ni45OTk5OTk5OTcsNTI5NjQ4Ni4wLDEyNzQ5MjIuOTk5OTk5OTk5OCw5OTM4NDQzLjk5OTk5OTk5NCw0OTE5NDc4Ljk5OTk5OTk5Nyw1NTk1MjEwLjk5OTk5OTk5OCwyODQ0NjU3Ljk5OTk5OTk5Nyw5MDIxOTUuMDAwMDAwMDAwMyw4MDQ5MzEzLjAsNjQyMTk5Ljk5OTk5OTk5OTUsMTcxMTI2My4wMDAwMDAwMDA1LDEyMzU3ODYuMCw4NDE0MzUwLjAsMTgxOTA0Ni4wMDAwMDAwMDA1LDE5OTgyNTYuOTk5OTk5OTk5MywxLjg5NzY0NTY5OTk5OTk5OTZFNywxLjEzNTMxNDAwMDAwMDAwMUU3LDM0NTA2NTQuMDAwMDAwMDAyLDM0MjEzOTkuMDAwMDAwMDAyLDEuMjI4MTA1NEU3LDEwNDgzMTkuMDAwMDAwMDAwMiw0MDEyMDEyLjAwMDAwMDAwMDUsNzU0ODQ0LjAwMDAwMDAwMDIsNTY4OTI4My4wMDAwMDAwMDEsMi4wODUxODE5OTk5OTk5OTkzRTcsMjIzMzE2OS4wMDAwMDAwMDEsNzA3ODUxNi4wLDYwODgyNy4wMDAwMDAwMDAxLDU4OTQxMjEuMDAwMDAwMDAzLDUzNjM2NzUuMDAwMDAwMDAxLDE4MDgzNDQuMDAwMDAwMDAwNyw0OTM3ODIuMDAwMDAwMDAwMQorOSxXZWQgMiBGZWIgMTEsNjI2OTMxLjk5OTk5OTk5OTgsNDQ0NzA5OS45OTk5OTk5OTcsMjY3MzM5OS45OTk5OTk5OTc3LDUxMzA2MzEuOTk5OTk5OTk3LDMuMzg3MTY0ODAwMDAwMDAxRTcsNDMwMTI2MS4wLDM0MDU1NjQuOTk5OTk5OTk4Niw1NzIwNTguOTk5OTk5OTk5Myw3ODM1OTkuOTk5OTk5OTk5OSwxLjU5ODIzNzgwMDAwMDAwMDdFNyw4MTg2NDUyLjk5OTk5OTk5OCwxMjExNTM3LjAwMDAwMDAwMDUsMjkyNjMyMy45OTk5OTk5OTksMTI5Mzk1My4wLDEuMjQxOTI5MzAwMDAwMDAwMkU3LDYwODA0ODQuOTk5OTk5OTk3LDI2ODg0MTguMDAwMDAwMDAxLDQwNDE3NjguOTk5OTk5OTk3Nyw0NDY4OTc2LjAwMDAwMDAwMSw2MzQ5MDk2Ljk5OTk5OTk5OCw1Mjk2NDg2LjAsMTI3NDkyMi45OTk5OTk5OTk4LDk5Mzg0NDMuOTk5OTk5OTk2LDQ5MTk0NzguOTk5OTk5OTk2LDU1OTUyMTAuOTk5OTk5OTk4LDI4NDQ2NTcuOTk5OTk5OTk3Nyw5MDIxOTUuMDAwMDAwMDAwNSw4MDQ5MzEyLjk5OTk5OTk5OSw2NDIxOTkuOTk5OTk5OTk5NSwxNzExMjYzLjAwMDAwMDAwMDcsMTIzNTc4Ni4wMDAwMDAwMDAyLDg0MTQzNTAuMCwxODE5MDQ2LjAwMDAwMDAwMDcsMTk5ODI1Ni45OTk5OTk5OTk1LDEuODk3NjQ1Njk5OTk5OTk5NkU3LDEuMTM1MzE0MDAwMDAwMDAxMUU3LDM0NTA2NTQuMDAwMDAwMDAxNCwzNDIxMzk5LjAwMDAwMDAwMjMsMS4yMjgxMDU0RTcsMTA0ODMxOS4wMDAwMDAwMDAxLDQwMTIwMTIuMDAwMDAwMDAwNSw3NTQ4NDQuMDAwMDAwMDAwMyw1Njg5MjgzLjAwMDAwMDAwMiwyLjA4NTE4MTk5OTk5OTk5OTZFNywyMjMzMTY5LjAwMDAwMDAwMTQsNzA3ODUxNS45OTk5OTk5OTksNjA4ODI3LjAwMDAwMDAwMDIsNTg5NDEyMS4wMDAwMDAwMDMsNTM2MzY3NS4wLDE4MDgzNDQuMDAwMDAwMDAxLDQ5Mzc4Mi4wMDAwMDAwMDAxCisxMCxUaHUgMyBGZWIgMTEsNjI2OTMxLjk5OTk5OTk5OTgsNDQ0NzA5OS45OTk5OTk5OTcsMjY3MzM5OS45OTk5OTk5OTcsNTEzMDYzMS45OTk5OTk5OTcsMy4zODcxNjQ4MDAwMDAwMDFFNyw0MzAxMjYxLjAwMDAwMDAwMSwzNDA1NTY0Ljk5OTk5OTk5ODYsNTcyMDU4Ljk5OTk5OTk5OTQsNzgzNTk5Ljk5OTk5OTk5OTgsMS41OTgyMzc4MDAwMDAwMDA3RTcsODE4NjQ1Mi45OTk5OTk5OTgsMTIxMTUzNy4wMDAwMDAwMDA1LDI5MjYzMjMuOTk5OTk5OTk5NSwxMjkzOTUyLjk5OTk5OTk5OTgsMS4yNDE5MjkzRTcsNjA4MDQ4NC45OTk5OTk5OTcsMjY4ODQxOC4wMDAwMDAwMDA1LDQwNDE3NjguOTk5OTk5OTk3Nyw0NDY4OTc2LjAwMDAwMDAwMSw2MzQ5MDk2Ljk5OTk5OTk5OCw1Mjk2NDg2LjAwMDAwMDAwMSwxMjc0OTIzLjAsOTkzODQ0My45OTk5OTk5OTQsNDkxOTQ3OC45OTk5OTk5OTUsNTU5NTIxMC45OTk5OTk5OTgsMjg0NDY1Ny45OTk5OTk5OTc3LDkwMjE5NS4wMDAwMDAwMDA1LDgwNDkzMTIuOTk5OTk5OTk5LDY0MjE5OS45OTk5OTk5OTk3LDE3MTEyNjMuMDAwMDAwMDAwNywxMjM1Nzg2LjAwMDAwMDAwMDUsODQxNDM1MC4wLDE4MTkwNDYuMDAwMDAwMDAwNywxOTk4MjU2Ljk5OTk5OTk5OTUsMS44OTc2NDU3RTcsMS4xMzUzMTQwMDAwMDAwMDFFNywzNDUwNjU0LjAwMDAwMDAwMiwzNDIxMzk5LjAwMDAwMDAwMywxLjIyODEwNTQwMDAwMDAwMDJFNywxMDQ4MzE5LjAwMDAwMDAwMDEsNDAxMjAxMS45OTk5OTk5OTk1LDc1NDg0NC4wMDAwMDAwMDAzLDU2ODkyODMuMDAwMDAwMDAxLDIuMDg1MTgxOTk5OTk5OTk5M0U3LDIyMzMxNjkuMDAwMDAwMDAxLDcwNzg1MTYuMCw2MDg4MjcuMDAwMDAwMDAwMSw1ODk0MTIxLjAwMDAwMDAwMyw1MzYzNjc1LjAwMDAwMDAwMiwxODA4MzQ0LjAwMDAwMDAwMDcsNDkzNzgyLjAwMDAwMDAwMDEKKzExLEZyaSA0IEZlYiAxMSw2MjY5MzEuOTk5OTk5OTk5OSw0NDQ3MDk5Ljk5OTk5OTk5NiwyNjczMzk5Ljk5OTk5OTk5NzcsNTEzMDYzMS45OTk5OTk5OTYsMy4zODcxNjQ4MDAwMDAwMDFFNyw0MzAxMjYxLjAwMDAwMDAwMSwzNDA1NTY0Ljk5OTk5OTk5ODYsNTcyMDU4Ljk5OTk5OTk5OTIsNzgzNTk5Ljk5OTk5OTk5OTcsMS41OTgyMzc4MDAwMDAwMDFFNyw4MTg2NDUyLjk5OTk5OTk5OCwxMjExNTM3LjAwMDAwMDAwMDUsMjkyNjMyNC4wLDEyOTM5NTIuOTk5OTk5OTk5OCwxLjI0MTkyOTNFNyw2MDgwNDg0Ljk5OTk5OTk5NiwyNjg4NDE4LjAwMDAwMDAwMSw0MDQxNzY4Ljk5OTk5OTk5NzcsNDQ2ODk3Ni4wLDYzNDkwOTYuOTk5OTk5OTk5LDUyOTY0ODYuMDAwMDAwMDAxLDEyNzQ5MjIuOTk5OTk5OTk5OCw5OTM4NDQzLjk5OTk5OTk5NCw0OTE5NDc4Ljk5OTk5OTk5NCw1NTk1MjEwLjk5OTk5OTk5OSwyODQ0NjU3Ljk5OTk5OTk5Nyw5MDIxOTUuMDAwMDAwMDAwNSw4MDQ5MzEzLjAsNjQyMTk5Ljk5OTk5OTk5OTcsMTcxMTI2My4wMDAwMDAwMDEsMTIzNTc4Ni4wMDAwMDAwMDA1LDg0MTQzNTAuMCwxODE5MDQ2LjAwMDAwMDAwMDUsMTk5ODI1Ni45OTk5OTk5OTkzLDEuODk3NjQ1N0U3LDEuMTM1MzE0MDAwMDAwMDAxRTcsMzQ1MDY1NC4wMDAwMDAwMDIsMzQyMTM5OS4wMDAwMDAwMDMsMS4yMjgxMDU0MDAwMDAwMDA0RTcsMTA0ODMxOS4wMDAwMDAwMDAzLDQwMTIwMTEuOTk5OTk5OTk5NSw3NTQ4NDQuMDAwMDAwMDAwMyw1Njg5MjgzLjAsMi4wODUxODE5OTk5OTk5OTkzRTcsMjIzMzE2OS4wMDAwMDAwMDE0LDcwNzg1MTYuMCw2MDg4MjcuMDAwMDAwMDAwMiw1ODk0MTIxLjAwMDAwMDAwNCw1MzYzNjc1LjAwMDAwMDAwMiwxODA4MzQ0LjAwMDAwMDAwMDcsNDkzNzgyLjAwMDAwMDAwMDA2CisxMixTYXQgNSBGZWIgMTEsNjI2OTMxLjk5OTk5OTk5OTgsNDQ0NzA5OS45OTk5OTk5OTYsMjY3MzM5OS45OTk5OTk5OTgsNTEzMDYzMS45OTk5OTk5OTYsMy4zODcxNjQ4MDAwMDAwMDFFNyw0MzAxMjYxLjAwMDAwMDAwMSwzNDA1NTY0Ljk5OTk5OTk5OCw1NzIwNTguOTk5OTk5OTk5Miw3ODM1OTkuOTk5OTk5OTk5NywxLjU5ODIzNzgwMDAwMDAwMUU3LDgxODY0NTIuOTk5OTk5OTk4LDEyMTE1MzcuMDAwMDAwMDAwNSwyOTI2MzIzLjk5OTk5OTk5OTUsMTI5Mzk1Mi45OTk5OTk5OTk4LDEuMjQxOTI5MzAwMDAwMDAwMkU3LDYwODA0ODQuOTk5OTk5OTk2LDI2ODg0MTguMDAwMDAwMDAxLDQwNDE3NjguOTk5OTk5OTk3LDQ0Njg5NzYuMDAwMDAwMDAxLDYzNDkwOTYuOTk5OTk5OTk5LDUyOTY0ODYuMCwxMjc0OTIyLjk5OTk5OTk5OTgsOTkzODQ0My45OTk5OTk5OTQsNDkxOTQ3OC45OTk5OTk5OTQsNTU5NTIxMC45OTk5OTk5OTksMjg0NDY1Ny45OTk5OTk5OTcsOTAyMTk1LjAwMDAwMDAwMDMsODA0OTMxMy4wLDY0MjE5OS45OTk5OTk5OTk4LDE3MTEyNjMuMDAwMDAwMDAxLDEyMzU3ODYuMDAwMDAwMDAwNSw4NDE0MzUwLjAsMTgxOTA0Ni4wMDAwMDAwMDAyLDE5OTgyNTYuOTk5OTk5OTk5NSwxLjg5NzY0NTcwMDAwMDAwMDdFNywxLjEzNTMxNDAwMDAwMDAwMUU3LDM0NTA2NTQuMDAwMDAwMDAyMywzNDIxMzk5LjAwMDAwMDAwMjMsMS4yMjgxMDU0MDAwMDAwMDAyRTcsMTA0ODMxOS4wMDAwMDAwMDAzLDQwMTIwMTEuOTk5OTk5OTk5LDc1NDg0NC4wMDAwMDAwMDAzLDU2ODkyODIuOTk5OTk5OTk5LDIuMDg1MTgxOTk5OTk5OTk5M0U3LDIyMzMxNjkuMDAwMDAwMDAxNCw3MDc4NTE2LjAwMDAwMDAwMSw2MDg4MjcuMDAwMDAwMDAwMiw1ODk0MTIxLjAwMDAwMDAwNCw1MzYzNjc1LjAwMDAwMDAwMiwxODA4MzQ0LjAwMDAwMDAwMDcsNDkzNzgyLjAwMDAwMDAwMDIKKzEzLFN1biA2IEZlYiAxMSw2MjY5MzEuOTk5OTk5OTk5Nyw0NDQ3MDk5Ljk5OTk5OTk5NSwyNjczMzk5Ljk5OTk5OTk5ODYsNTEzMDYzMS45OTk5OTk5OTYsMy4zODcxNjQ4MDAwMDAwMDFFNyw0MzAxMjYxLjAwMDAwMDAwMSwzNDA1NTY0Ljk5OTk5OTk5OCw1NzIwNTguOTk5OTk5OTk5Miw3ODM1OTkuOTk5OTk5OTk5NywxLjU5ODIzNzgwMDAwMDAwMTFFNyw4MTg2NDUyLjk5OTk5OTk5OCwxMjExNTM3LjAwMDAwMDAwMDIsMjkyNjMyMy45OTk5OTk5OTk1LDEyOTM5NTMuMCwxLjI0MTkyOTMwMDAwMDAwMDJFNyw2MDgwNDg0Ljk5OTk5OTk5NiwyNjg4NDE4LjAwMDAwMDAwMDUsNDA0MTc2OC45OTk5OTk5OTcsNDQ2ODk3Ni4wLDYzNDkwOTYuOTk5OTk5OTk5LDUyOTY0ODYuMCwxMjc0OTIzLjAsOTkzODQ0My45OTk5OTk5OTQsNDkxOTQ3OC45OTk5OTk5OTYsNTU5NTIxMS4wLDI4NDQ2NTcuOTk5OTk5OTk3LDkwMjE5NS4wMDAwMDAwMDAzLDgwNDkzMTMuMCw2NDIxOTkuOTk5OTk5OTk5OSwxNzExMjYzLjAwMDAwMDAwMSwxMjM1Nzg2LjAwMDAwMDAwMDUsODQxNDM1MC4wLDE4MTkwNDYuMDAwMDAwMDAwNSwxOTk4MjU2Ljk5OTk5OTk5OTUsMS44OTc2NDU3MDAwMDAwMDA3RTcsMS4xMzUzMTQwMDAwMDAwMDA3RTcsMzQ1MDY1NC4wMDAwMDAwMDIzLDM0MjEzOTkuMDAwMDAwMDAyLDEuMjI4MTA1NEU3LDEwNDgzMTkuMDAwMDAwMDAwMyw0MDEyMDExLjk5OTk5OTk5OTUsNzU0ODQ0LjAwMDAwMDAwMDIsNTY4OTI4Mi45OTk5OTk5OTgsMi4wODUxODE5OTk5OTk5OTlFNywyMjMzMTY5LjAwMDAwMDAwMSw3MDc4NTE2LjAwMDAwMDAwMSw2MDg4MjcuMDAwMDAwMDAwMiw1ODk0MTIxLjAwMDAwMDAwNCw1MzYzNjc1LjAwMDAwMDAwMiwxODA4MzQ0LjAwMDAwMDAwMDcsNDkzNzgyLjAwMDAwMDAwMDEKKzE0LE1vbiA3IEZlYiAxMSw2MjY5MzEuOTk5OTk5OTk5Nyw0NDQ3MDk5Ljk5OTk5OTk5NSwyNjczMzk5Ljk5OTk5OTk5OCw1MTMwNjMxLjk5OTk5OTk5NiwzLjM4NzE2NDgwMDAwMDAwMUU3LDQzMDEyNjEuMCwzNDA1NTY0Ljk5OTk5OTk5NzcsNTcyMDU4Ljk5OTk5OTk5OTIsNzgzNTk5Ljk5OTk5OTk5OTcsMS41OTgyMzc4MDAwMDAwMDFFNyw4MTg2NDUyLjk5OTk5OTk5NywxMjExNTM3LjAsMjkyNjMyMy45OTk5OTk5OTksMTI5Mzk1Mi45OTk5OTk5OTk4LDEuMjQxOTI5MzAwMDAwMDAwNEU3LDYwODA0ODQuOTk5OTk5OTk1LDI2ODg0MTguMDAwMDAwMDAxLDQwNDE3NjguOTk5OTk5OTk2Nyw0NDY4OTc2LjAwMDAwMDAwMSw2MzQ5MDk2Ljk5OTk5OTk5OSw1Mjk2NDg2LjAsMTI3NDkyMi45OTk5OTk5OTk1LDk5Mzg0NDMuOTk5OTk5OTk0LDQ5MTk0NzguOTk5OTk5OTk1LDU1OTUyMTEuMDAwMDAwMDAxLDI4NDQ2NTcuOTk5OTk5OTk3LDkwMjE5NS4wMDAwMDAwMDA1LDgwNDkzMTMuMCw2NDIyMDAuMCwxNzExMjYzLjAwMDAwMDAwMDcsMTIzNTc4Ni4wMDAwMDAwMDA1LDg0MTQzNTAuMCwxODE5MDQ2LjAwMDAwMDAwMDUsMTk5ODI1Ni45OTk5OTk5OTksMS44OTc2NDU3MDAwMDAwMDA0RTcsMS4xMzUzMTQwMDAwMDAwMDA2RTcsMzQ1MDY1NC4wMDAwMDAwMDIzLDM0MjEzOTkuMDAwMDAwMDAyLDEuMjI4MTA1NDAwMDAwMDAwMkU3LDEwNDgzMTkuMDAwMDAwMDAwMiw0MDEyMDEyLjAsNzU0ODQ0LjAwMDAwMDAwMDMsNTY4OTI4Mi45OTk5OTk5OTgsMi4wODUxODE5OTk5OTk5OTg1RTcsMjIzMzE2OS4wMDAwMDAwMDEsNzA3ODUxNi4wMDAwMDAwMDEsNjA4ODI3LjAwMDAwMDAwMDUsNTg5NDEyMS4wMDAwMDAwMDUsNTM2MzY3NS4wMDAwMDAwMDIsMTgwODM0NC4wMDAwMDAwMDA3LDQ5Mzc4Mi4wMDAwMDAwMDAxCisxNSxUdWUgOCBGZWIgMTEsNjI2OTMxLjk5OTk5OTk5OTgsNDQ0NzA5OS45OTk5OTk5OTYsMjY3MzM5OS45OTk5OTk5OTg2LDUxMzA2MzEuOTk5OTk5OTk2LDMuMzg3MTY0ODAwMDAwMDAxRTcsNDMwMTI2MC45OTk5OTk5OTksMzQwNTU2NC45OTk5OTk5OTc3LDU3MjA1OC45OTk5OTk5OTkxLDc4MzU5OS45OTk5OTk5OTk3LDEuNTk4MjM3ODAwMDAwMDAxRTcsODE4NjQ1Mi45OTk5OTk5OTcsMTIxMTUzNi45OTk5OTk5OTk4LDI5MjYzMjMuOTk5OTk5OTk4NiwxMjkzOTUyLjk5OTk5OTk5OTUsMS4yNDE5MjkzMDAwMDAwMDAyRTcsNjA4MDQ4NC45OTk5OTk5OTYsMjY4ODQxOC4wLDQwNDE3NjguOTk5OTk5OTk3LDQ0Njg5NzYuMDAwMDAwMDAxLDYzNDkwOTYuOTk5OTk5OTk5LDUyOTY0ODYuMDAwMDAwMDAxLDEyNzQ5MjIuOTk5OTk5OTk5OCw5OTM4NDQzLjk5OTk5OTk5Myw0OTE5NDc4Ljk5OTk5OTk5NSw1NTk1MjExLjAwMDAwMDAwMSwyODQ0NjU3Ljk5OTk5OTk5Nyw5MDIxOTUuMDAwMDAwMDAwNiw4MDQ5MzEzLjAsNjQyMjAwLjAwMDAwMDAwMDEsMTcxMTI2My4wMDAwMDAwMDA1LDEyMzU3ODYuMDAwMDAwMDAwNSw4NDE0MzUwLjAsMTgxOTA0Ni4wMDAwMDAwMDA3LDE5OTgyNTYuOTk5OTk5OTk5MywxLjg5NzY0NTcwMDAwMDAwMDRFNywxLjEzNTMxNDAwMDAwMDAwMDZFNywzNDUwNjU0LjAwMDAwMDAwMjMsMzQyMTM5OS4wMDAwMDAwMDIzLDEuMjI4MTA1NDAwMDAwMDAwMkU3LDEwNDgzMTkuMDAwMDAwMDAwMiw0MDEyMDEyLjAsNzU0ODQ0LjAwMDAwMDAwMDMsNTY4OTI4Mi45OTk5OTk5OTgsMi4wODUxODE5OTk5OTk5OTg1RTcsMjIzMzE2OS4wMDAwMDAwMDA1LDcwNzg1MTYuMCw2MDg4MjcuMDAwMDAwMDAwNSw1ODk0MTIxLjAwMDAwMDAwNCw1MzYzNjc1LjAwMDAwMDAwMSwxODA4MzQ0LjAwMDAwMDAwMDUsNDkzNzgyLjAwMDAwMDAwMDEKKzE2LFdlZCA5IEZlYiAxMSw2MjY5MzEuOTk5OTk5OTk5Nyw0NDQ3MDk5Ljk5OTk5OTk5NiwyNjczMzk5Ljk5OTk5OTk5ODYsNTEzMDYzMS45OTk5OTk5OTcsMy4zODcxNjQ4MDAwMDAwMDE1RTcsNDMwMTI2MS4wLDM0MDU1NjQuOTk5OTk5OTk4LDU3MjA1OC45OTk5OTk5OTksNzgzNTk5Ljk5OTk5OTk5OTcsMS41OTgyMzc4MDAwMDAwMDA3RTcsODE4NjQ1Mi45OTk5OTk5OTcsMTIxMTUzNy4wLDI5MjYzMjMuOTk5OTk5OTk4NiwxMjkzOTUyLjk5OTk5OTk5OTUsMS4yNDE5MjkzMDAwMDAwMDAyRTcsNjA4MDQ4NC45OTk5OTk5OTUsMjY4ODQxOC4wLDQwNDE3NjguOTk5OTk5OTk2Nyw0NDY4OTc2LjAsNjM0OTA5Ni45OTk5OTk5OTgsNTI5NjQ4Ni4wMDAwMDAwMDEsMTI3NDkyMi45OTk5OTk5OTk1LDk5Mzg0NDMuOTk5OTk5OTkzLDQ5MTk0NzguOTk5OTk5OTk2LDU1OTUyMTEuMDAwMDAwMDAxLDI4NDQ2NTcuOTk5OTk5OTk2Nyw5MDIxOTUuMDAwMDAwMDAwNiw4MDQ5MzEyLjk5OTk5OTk5OCw2NDIyMDAuMDAwMDAwMDAwMiwxNzExMjYzLjAwMDAwMDAwMDUsMTIzNTc4Ni4wMDAwMDAwMDAyLDg0MTQzNTAuMCwxODE5MDQ2LjAwMDAwMDAwMDcsMTk5ODI1Ni45OTk5OTk5OTkzLDEuODk3NjQ1NzAwMDAwMDAwNEU3LDEuMTM1MzE0MDAwMDAwMDAwNkU3LDM0NTA2NTQuMDAwMDAwMDAyMywzNDIxMzk5LjAwMDAwMDAwMywxLjIyODEwNTQwMDAwMDAwMDJFNywxMDQ4MzE5LjAwMDAwMDAwMDIsNDAxMjAxMi4wLDc1NDg0NC4wMDAwMDAwMDA1LDU2ODkyODIuOTk5OTk5OTk3LDIuMDg1MTgxOTk5OTk5OTk4NUU3LDIyMzMxNjkuMDAwMDAwMDAxLDcwNzg1MTYuMCw2MDg4MjcuMDAwMDAwMDAwNiw1ODk0MTIxLjAwMDAwMDAwNSw1MzYzNjc1LjAwMDAwMDAwMiwxODA4MzQ0LjAwMDAwMDAwMDIsNDkzNzgyLjAwMDAwMDAwMDEKKzE3LFRodSAxMCBGZWIgMTEsNjI2OTMxLjk5OTk5OTk5OTgsNDQ0NzA5OS45OTk5OTk5OTYsMjY3MzM5OS45OTk5OTk5OTgsNTEzMDYzMS45OTk5OTk5OTYsMy4zODcxNjQ4MDAwMDAwMDE1RTcsNDMwMTI2MS4wMDAwMDAwMDEsMzQwNTU2NC45OTk5OTk5OTc3LDU3MjA1OC45OTk5OTk5OTksNzgzNTk5Ljk5OTk5OTk5OTcsMS41OTgyMzc4MDAwMDAwMDFFNyw4MTg2NDUyLjk5OTk5OTk5NywxMjExNTM2Ljk5OTk5OTk5OTgsMjkyNjMyMy45OTk5OTk5OTksMTI5Mzk1Mi45OTk5OTk5OTk4LDEuMjQxOTI5MzAwMDAwMDAwNEU3LDYwODA0ODQuOTk5OTk5OTk1LDI2ODg0MTguMDAwMDAwMDAwNSw0MDQxNzY4Ljk5OTk5OTk5NjcsNDQ2ODk3Ni4wMDAwMDAwMDEsNjM0OTA5Ni45OTk5OTk5OTcsNTI5NjQ4Ni4wMDAwMDAwMDIsMTI3NDkyMi45OTk5OTk5OTk4LDk5Mzg0NDMuOTk5OTk5OTk0LDQ5MTk0NzguOTk5OTk5OTk2LDU1OTUyMTEuMDAwMDAwMDAxLDI4NDQ2NTcuOTk5OTk5OTk2Nyw5MDIxOTUuMDAwMDAwMDAwNSw4MDQ5MzEyLjk5OTk5OTk5OCw2NDIyMDAuMDAwMDAwMDAwMSwxNzExMjYzLjAwMDAwMDAwMDIsMTIzNTc4Ni4wMDAwMDAwMDAyLDg0MTQzNTAuMCwxODE5MDQ2LjAwMDAwMDAwMDUsMTk5ODI1Ni45OTk5OTk5OTksMS44OTc2NDU3MDAwMDAwMDA3RTcsMS4xMzUzMTQwMDAwMDAwMDA3RTcsMzQ1MDY1NC4wMDAwMDAwMDMsMzQyMTM5OS4wMDAwMDAwMDIzLDEuMjI4MTA1NDAwMDAwMDAwNEU3LDEwNDgzMTkuMDAwMDAwMDAwMiw0MDEyMDEyLjAsNzU0ODQ0LjAwMDAwMDAwMDUsNTY4OTI4Mi45OTk5OTk5OTgsMi4wODUxODE5OTk5OTk5OThFNywyMjMzMTY5LjAwMDAwMDAwMSw3MDc4NTE2LjAwMDAwMDAwMSw2MDg4MjcuMDAwMDAwMDAwNSw1ODk0MTIxLjAwMDAwMDAwNCw1MzYzNjc1LjAwMDAwMDAwMiwxODA4MzQ0LjAwMDAwMDAwMDIsNDkzNzgyLjAwMDAwMDAwMDEKKzE4LEZyaSAxMSBGZWIgMTEsNjI2OTMxLjk5OTk5OTk5OTcsNDQ0NzA5OS45OTk5OTk5OTUsMjY3MzM5OS45OTk5OTk5OTgsNTEzMDYzMS45OTk5OTk5OTUsMy4zODcxNjQ4MDAwMDAwMDFFNyw0MzAxMjYxLjAsMzQwNTU2NC45OTk5OTk5OTc3LDU3MjA1OC45OTk5OTk5OTkxLDc4MzU5OS45OTk5OTk5OTk3LDEuNTk4MjM3ODAwMDAwMDAxMUU3LDgxODY0NTIuOTk5OTk5OTk3LDEyMTE1MzcuMCwyOTI2MzIzLjk5OTk5OTk5OSwxMjkzOTUyLjk5OTk5OTk5OTgsMS4yNDE5MjkzRTcsNjA4MDQ4NC45OTk5OTk5OTUsMjY4ODQxOC4wMDAwMDAwMDEsNDA0MTc2OC45OTk5OTk5OTYzLDQ0Njg5NzYuMDAwMDAwMDAxLDYzNDkwOTYuOTk5OTk5OTk3LDUyOTY0ODYuMDAwMDAwMDAxLDEyNzQ5MjIuOTk5OTk5OTk5OCw5OTM4NDQzLjk5OTk5OTk5NCw0OTE5NDc4Ljk5OTk5OTk5Niw1NTk1MjExLjAsMjg0NDY1Ny45OTk5OTk5OTY3LDkwMjE5NS4wMDAwMDAwMDAzLDgwNDkzMTIuOTk5OTk5OTk4LDY0MjIwMC4wMDAwMDAwMDAxLDE3MTEyNjMuMDAwMDAwMDAwMiwxMjM1Nzg2LjAwMDAwMDAwMDIsODQxNDM1MC4wLDE4MTkwNDYuMDAwMDAwMDAwNywxOTk4MjU2Ljk5OTk5OTk5ODgsMS44OTc2NDU3MDAwMDAwMDFFNywxLjEzNTMxNDAwMDAwMDAwMUU3LDM0NTA2NTQuMDAwMDAwMDAzLDM0MjEzOTkuMDAwMDAwMDAyMywxLjIyODEwNTQwMDAwMDAwMDZFNywxMDQ4MzE5LjAwMDAwMDAwMDMsNDAxMjAxMi4wLDc1NDg0NC4wMDAwMDAwMDA1LDU2ODkyODIuOTk5OTk5OTk3LDIuMDg1MTgxOTk5OTk5OTk3OEU3LDIyMzMxNjkuMDAwMDAwMDAxNCw3MDc4NTE2LjAwMDAwMDAwMSw2MDg4MjcuMDAwMDAwMDAwMyw1ODk0MTIxLjAwMDAwMDAwNCw1MzYzNjc1LjAwMDAwMDAwMywxODA4MzQ0LjAwMDAwMDAwMDUsNDkzNzgyLjAwMDAwMDAwMDEKKzE5LFNhdCAxMiBGZWIgMTEsNjI2OTMxLjk5OTk5OTk5OTcsNDQ0NzA5OS45OTk5OTk5OTQsMjY3MzM5OS45OTk5OTk5OTc3LDUxMzA2MzEuOTk5OTk5OTk2LDMuMzg3MTY0ODAwMDAwMDAxRTcsNDMwMTI2MS4wMDAwMDAwMDEsMzQwNTU2NC45OTk5OTk5OTgsNTcyMDU4Ljk5OTk5OTk5OTEsNzgzNTk5Ljk5OTk5OTk5OTQsMS41OTgyMzc4MDAwMDAwMDEzRTcsODE4NjQ1Mi45OTk5OTk5OTUsMTIxMTUzNy4wMDAwMDAwMDAyLDI5MjYzMjMuOTk5OTk5OTk5LDEyOTM5NTIuOTk5OTk5OTk5NSwxLjI0MTkyOTI5OTk5OTk5OThFNyw2MDgwNDg0Ljk5OTk5OTk5NSwyNjg4NDE4LjAwMDAwMDAwMSw0MDQxNzY4Ljk5OTk5OTk5NjcsNDQ2ODk3Ni4wMDAwMDAwMDIsNjM0OTA5Ni45OTk5OTk5OTgsNTI5NjQ4Ni4wLDEyNzQ5MjIuOTk5OTk5OTk5OCw5OTM4NDQzLjk5OTk5OTk5NCw0OTE5NDc4Ljk5OTk5OTk5Nyw1NTk1MjExLjAsMjg0NDY1Ny45OTk5OTk5OTY3LDkwMjE5NS4wMDAwMDAwMDA1LDgwNDkzMTIuOTk5OTk5OTk5LDY0MjIwMC4wMDAwMDAwMDAxLDE3MTEyNjMuMDAwMDAwMDAwMiwxMjM1Nzg2LjAwMDAwMDAwMDIsODQxNDM1MC4wLDE4MTkwNDYuMDAwMDAwMDAwNSwxOTk4MjU2Ljk5OTk5OTk5OSwxLjg5NzY0NTcwMDAwMDAwMDRFNywxLjEzNTMxNDAwMDAwMDAwMDdFNywzNDUwNjU0LjAwMDAwMDAwMjMsMzQyMTM5OS4wMDAwMDAwMDMsMS4yMjgxMDU0MDAwMDAwMDA2RTcsMTA0ODMxOS4wMDAwMDAwMDAyLDQwMTIwMTIuMCw3NTQ4NDQuMDAwMDAwMDAwNSw1Njg5MjgyLjk5OTk5OTk5NywyLjA4NTE4MTk5OTk5OTk5NzRFNywyMjMzMTY5LjAwMDAwMDAwMTQsNzA3ODUxNi4wMDAwMDAwMDIsNjA4ODI3LjAwMDAwMDAwMDIsNTg5NDEyMS4wMDAwMDAwMDUsNTM2MzY3NS4wMDAwMDAwMDMsMTgwODM0NC4wMDAwMDAwMDAyLDQ5Mzc4Mi4wMDAwMDAwMDAyCisyMCxTdW4gMTMgRmViIDExLDYyNjkzMS45OTk5OTk5OTk3LDQ0NDcwOTkuOTk5OTk5OTk0LDI2NzMzOTkuOTk5OTk5OTk3Nyw1MTMwNjMxLjk5OTk5OTk5NSwzLjM4NzE2NDgwMDAwMDAwMUU3LDQzMDEyNjEuMDAwMDAwMDAxLDM0MDU1NjQuOTk5OTk5OTk4LDU3MjA1OC45OTk5OTk5OTkyLDc4MzU5OS45OTk5OTk5OTk0LDEuNTk4MjM3ODAwMDAwMDAxM0U3LDgxODY0NTIuOTk5OTk5OTk2LDEyMTE1MzcuMDAwMDAwMDAwMiwyOTI2MzIzLjk5OTk5OTk5ODYsMTI5Mzk1Mi45OTk5OTk5OTk4LDEuMjQxOTI5Mjk5OTk5OTk5OEU3LDYwODA0ODQuOTk5OTk5OTk0LDI2ODg0MTguMDAwMDAwMDAwNSw0MDQxNzY4Ljk5OTk5OTk5NjcsNDQ2ODk3Ni4wMDAwMDAwMDIsNjM0OTA5Ni45OTk5OTk5OTksNTI5NjQ4Ni4wLDEyNzQ5MjIuOTk5OTk5OTk5OCw5OTM4NDQzLjk5OTk5OTk5Niw0OTE5NDc4Ljk5OTk5OTk5OCw1NTk1MjExLjAwMDAwMDAwMSwyODQ0NjU3Ljk5OTk5OTk5NjcsOTAyMTk1LjAwMDAwMDAwMDUsODA0OTMxMi45OTk5OTk5OTksNjQyMjAwLjAwMDAwMDAwMDEsMTcxMTI2My4wMDAwMDAwMDA3LDEyMzU3ODYuMDAwMDAwMDAwNSw4NDE0MzUwLjAsMTgxOTA0Ni4wMDAwMDAwMDA3LDE5OTgyNTYuOTk5OTk5OTk5MywxLjg5NzY0NTcwMDAwMDAwMDRFNywxLjEzNTMxNDAwMDAwMDAwMUU3LDM0NTA2NTQuMDAwMDAwMDAyMywzNDIxMzk5LjAwMDAwMDAwMjMsMS4yMjgxMDU0MDAwMDAwMDA3RTcsMTA0ODMxOS4wMDAwMDAwMDAxLDQwMTIwMTIuMCw3NTQ4NDQuMDAwMDAwMDAwNSw1Njg5MjgyLjk5OTk5OTk5NiwyLjA4NTE4MTk5OTk5OTk5N0U3LDIyMzMxNjkuMDAwMDAwMDAxNCw3MDc4NTE2LjAwMDAwMDAwMyw2MDg4MjcuMDAwMDAwMDAwMSw1ODk0MTIxLjAwMDAwMDAwNSw1MzYzNjc1LjAwMDAwMDAwMywxODA4MzQ0LjAsNDkzNzgyLjAwMDAwMDAwMDIKKzIxLE1vbiAxNCBGZWIgMTEsNjI2OTMxLjk5OTk5OTk5OTUsNDQ0NzA5OS45OTk5OTk5OTQsMjY3MzM5OS45OTk5OTk5OTcsNTEzMDYzMS45OTk5OTk5OTUsMy4zODcxNjQ4MDAwMDAwMDFFNyw0MzAxMjYxLjAwMDAwMDAwMSwzNDA1NTY0Ljk5OTk5OTk5OCw1NzIwNTguOTk5OTk5OTk5MSw3ODM1OTkuOTk5OTk5OTk5NywxLjU5ODIzNzgwMDAwMDAwMTNFNyw4MTg2NDUyLjk5OTk5OTk5NiwxMjExNTM3LjAwMDAwMDAwMDIsMjkyNjMyMy45OTk5OTk5OTg2LDEyOTM5NTIuOTk5OTk5OTk5OCwxLjI0MTkyOTNFNyw2MDgwNDg0Ljk5OTk5OTk5NCwyNjg4NDE4LjAwMDAwMDAwMDUsNDA0MTc2OC45OTk5OTk5OTY3LDQ0Njg5NzYuMDAwMDAwMDAyLDYzNDkwOTYuOTk5OTk5OTk5LDUyOTY0ODYuMCwxMjc0OTIyLjk5OTk5OTk5OTUsOTkzODQ0My45OTk5OTk5OTQsNDkxOTQ3OC45OTk5OTk5OTksNTU5NTIxMS4wLDI4NDQ2NTcuOTk5OTk5OTk3LDkwMjE5NS4wMDAwMDAwMDAzLDgwNDkzMTIuOTk5OTk5OTk5LDY0MjIwMC4wMDAwMDAwMDAyLDE3MTEyNjMuMDAwMDAwMDAwNSwxMjM1Nzg2LjAwMDAwMDAwMDUsODQxNDM1MC4wLDE4MTkwNDYuMDAwMDAwMDAwNSwxOTk4MjU2Ljk5OTk5OTk5OTMsMS44OTc2NDU3RTcsMS4xMzUzMTQwMDAwMDAwMDExRTcsMzQ1MDY1NC4wMDAwMDAwMDIzLDM0MjEzOTkuMDAwMDAwMDAyMywxLjIyODEwNTQwMDAwMDAwMDdFNywxMDQ4MzE5LjAwMDAwMDAwMDIsNDAxMjAxMi4wLDc1NDg0NC4wMDAwMDAwMDA1LDU2ODkyODIuOTk5OTk5OTk2LDIuMDg1MTgxOTk5OTk5OTk3RTcsMjIzMzE2OS4wMDAwMDAwMDE0LDcwNzg1MTYuMDAwMDAwMDAyLDYwODgyNy4wMDAwMDAwMDAxLDU4OTQxMjEuMDAwMDAwMDA1LDUzNjM2NzUuMDAwMDAwMDAzLDE4MDgzNDQuMCw0OTM3ODIuMDAwMDAwMDAwMgorMjIsVHVlIDE1IEZlYiAxMSw2MjY5MzEuOTk5OTk5OTk5Nyw0NDQ3MDk5Ljk5OTk5OTk5NCwyNjczMzk5Ljk5OTk5OTk5NzcsNTEzMDYzMS45OTk5OTk5OTUsMy4zODcxNjQ4MDAwMDAwMDFFNyw0MzAxMjYxLjAwMDAwMDAwMiwzNDA1NTY0Ljk5OTk5OTk5OCw1NzIwNTguOTk5OTk5OTk5MSw3ODM1OTkuOTk5OTk5OTk5OCwxLjU5ODIzNzgwMDAwMDAwMTNFNyw4MTg2NDUyLjk5OTk5OTk5NiwxMjExNTM3LjAwMDAwMDAwMDIsMjkyNjMyMy45OTk5OTk5OTg2LDEyOTM5NTIuOTk5OTk5OTk5OCwxLjI0MTkyOTMwMDAwMDAwMDJFNyw2MDgwNDg0Ljk5OTk5OTk5NCwyNjg4NDE4LjAwMDAwMDAwMSw0MDQxNzY4Ljk5OTk5OTk5NjMsNDQ2ODk3Ni4wMDAwMDAwMDMsNjM0OTA5Ny4wLDUyOTY0ODYuMDAwMDAwMDAxLDEyNzQ5MjIuOTk5OTk5OTk5NSw5OTM4NDQzLjk5OTk5OTk5NCw0OTE5NDc4Ljk5OTk5OTk5OSw1NTk1MjEwLjk5OTk5OTk5OSwyODQ0NjU3Ljk5OTk5OTk5NzcsOTAyMTk1LjAwMDAwMDAwMDMsODA0OTMxMi45OTk5OTk5OTksNjQyMjAwLjAwMDAwMDAwMDMsMTcxMTI2My4wMDAwMDAwMDA1LDEyMzU3ODYuMDAwMDAwMDAwNSw4NDE0MzUwLjAsMTgxOTA0Ni4wMDAwMDAwMDAyLDE5OTgyNTYuOTk5OTk5OTk5MywxLjg5NzY0NTdFNywxLjEzNTMxNDAwMDAwMDAwMTFFNywzNDUwNjU0LjAwMDAwMDAwMjMsMzQyMTM5OS4wMDAwMDAwMDIsMS4yMjgxMDU0MDAwMDAwMDA3RTcsMTA0ODMxOS4wMDAwMDAwMDAxLDQwMTIwMTIuMCw3NTQ4NDQuMDAwMDAwMDAwNSw1Njg5MjgyLjk5OTk5OTk5NiwyLjA4NTE4MTk5OTk5OTk5NzRFNywyMjMzMTY5LjAwMDAwMDAwMTQsNzA3ODUxNi4wMDAwMDAwMDIsNjA4ODI3LjAsNTg5NDEyMS4wMDAwMDAwMDUsNTM2MzY3NS4wMDAwMDAwMDMsMTgwODM0NC4wLDQ5Mzc4Mi4wMDAwMDAwMDAyMworMjMsV2VkIDE2IEZlYiAxMSw2MjY5MzEuOTk5OTk5OTk5Nyw0NDQ3MDk5Ljk5OTk5OTk5NiwyNjczMzk5Ljk5OTk5OTk5NzcsNTEzMDYzMS45OTk5OTk5OTQsMy4zODcxNjQ4MDAwMDAwMDFFNyw0MzAxMjYxLjAwMDAwMDAwMywzNDA1NTY0Ljk5OTk5OTk5OCw1NzIwNTguOTk5OTk5OTk5Myw3ODM1OTkuOTk5OTk5OTk5OCwxLjU5ODIzNzgwMDAwMDAwMTFFNyw4MTg2NDUyLjk5OTk5OTk5OCwxMjExNTM3LjAwMDAwMDAwMDUsMjkyNjMyMy45OTk5OTk5OTg2LDEyOTM5NTMuMCwxLjI0MTkyOTNFNyw2MDgwNDg0Ljk5OTk5OTk5NiwyNjg4NDE4LjAwMDAwMDAwMDUsNDA0MTc2OC45OTk5OTk5OTYzLDQ0Njg5NzYuMDAwMDAwMDAzLDYzNDkwOTcuMDAwMDAwMDAxLDUyOTY0ODYuMDAwMDAwMDAxLDEyNzQ5MjIuOTk5OTk5OTk5OCw5OTM4NDQzLjk5OTk5OTk5NCw0OTE5NDc4Ljk5OTk5OTk5OSw1NTk1MjEwLjk5OTk5OTk5OSwyODQ0NjU3Ljk5OTk5OTk5NzcsOTAyMTk1LjAwMDAwMDAwMDMsODA0OTMxMy4wLDY0MjIwMC4wMDAwMDAwMDAyLDE3MTEyNjMuMDAwMDAwMDAwNywxMjM1Nzg2LjAwMDAwMDAwMDIsODQxNDM1MC4wLDE4MTkwNDYuMDAwMDAwMDAwNywxOTk4MjU2Ljk5OTk5OTk5OTMsMS44OTc2NDU3MDAwMDAwMDA0RTcsMS4xMzUzMTQwMDAwMDAwMDFFNywzNDUwNjU0LjAwMDAwMDAwMywzNDIxMzk5LjAwMDAwMDAwMjMsMS4yMjgxMDU0MDAwMDAwMDA2RTcsMTA0ODMxOS4wMDAwMDAwMDAyLDQwMTIwMTEuOTk5OTk5OTk5NSw3NTQ4NDQuMDAwMDAwMDAwNyw1Njg5MjgyLjk5OTk5OTk5NywyLjA4NTE4MTk5OTk5OTk5NzRFNywyMjMzMTY5LjAwMDAwMDAwMTQsNzA3ODUxNi4wLDYwODgyNy4wLDU4OTQxMjEuMDAwMDAwMDA1LDUzNjM2NzUuMDAwMDAwMDA0LDE4MDgzNDQuMDAwMDAwMDAwMiw0OTM3ODIuMDAwMDAwMDAwMgorMjQsVGh1IDE3IEZlYiAxMSw2MjY5MzEuOTk5OTk5OTk5NSw0NDQ3MDk5Ljk5OTk5OTk5NSwyNjczMzk5Ljk5OTk5OTk5Nyw1MTMwNjMxLjk5OTk5OTk5NSwzLjM4NzE2NDgwMDAwMDAwMUU3LDQzMDEyNjEuMDAwMDAwMDAzLDM0MDU1NjQuOTk5OTk5OTk4LDU3MjA1OC45OTk5OTk5OTkyLDc4MzU5OS45OTk5OTk5OTk4LDEuNTk4MjM3ODAwMDAwMDAxRTcsODE4NjQ1Mi45OTk5OTk5OTgsMTIxMTUzNy4wMDAwMDAwMDA1LDI5MjYzMjMuOTk5OTk5OTk4LDEyOTM5NTMuMCwxLjI0MTkyOTMwMDAwMDAwMDJFNyw2MDgwNDg0Ljk5OTk5OTk5NSwyNjg4NDE4LjAwMDAwMDAwMSw0MDQxNzY4Ljk5OTk5OTk5NjMsNDQ2ODk3Ni4wMDAwMDAwMDMsNjM0OTA5Ny4wMDAwMDAwMDIsNTI5NjQ4Ni4wMDAwMDAwMDEsMTI3NDkyMi45OTk5OTk5OTk1LDk5Mzg0NDMuOTk5OTk5OTk0LDQ5MTk0NzguOTk5OTk5OTk5LDU1OTUyMTEuMCwyODQ0NjU3Ljk5OTk5OTk5NzcsOTAyMTk1LjAwMDAwMDAwMDMsODA0OTMxMy4wMDAwMDAwMDEsNjQyMjAwLjAwMDAwMDAwMDIsMTcxMTI2My4wMDAwMDAwMDA3LDEyMzU3ODYuMDAwMDAwMDAwNSw4NDE0MzUwLjAsMTgxOTA0Ni4wMDAwMDAwMDA3LDE5OTgyNTYuOTk5OTk5OTk5NSwxLjg5NzY0NTcwMDAwMDAwMDdFNywxLjEzNTMxNDAwMDAwMDAwMTFFNywzNDUwNjU0LjAwMDAwMDAwMjMsMzQyMTM5OS4wMDAwMDAwMDIsMS4yMjgxMDU0MDAwMDAwMDA2RTcsMTA0ODMxOS4wMDAwMDAwMDAyLDQwMTIwMTIuMCw3NTQ4NDQuMDAwMDAwMDAwNyw1Njg5MjgyLjk5OTk5OTk5NiwyLjA4NTE4MTk5OTk5OTk5N0U3LDIyMzMxNjkuMDAwMDAwMDAyLDcwNzg1MTYuMCw2MDg4MjYuOTk5OTk5OTk5OSw1ODk0MTIxLjAwMDAwMDAwNCw1MzYzNjc1LjAwMDAwMDAwNCwxODA4MzQ0LjAwMDAwMDAwMDIsNDkzNzgyLjAwMDAwMDAwMDEKKzI1LEZyaSAxOCBGZWIgMTEsNjI2OTMxLjk5OTk5OTk5OTUsNDQ0NzA5OS45OTk5OTk5OTUsMjY3MzM5OS45OTk5OTk5OTY3LDUxMzA2MzEuOTk5OTk5OTk0LDMuMzg3MTY0ODAwMDAwMDAxRTcsNDMwMTI2MS4wMDAwMDAwMDMsMzQwNTU2NC45OTk5OTk5OTc3LDU3MjA1OC45OTk5OTk5OTkyLDc4MzU5OS45OTk5OTk5OTk4LDEuNTk4MjM3ODAwMDAwMDAxMUU3LDgxODY0NTIuOTk5OTk5OTk4LDEyMTE1MzcuMDAwMDAwMDAwNSwyOTI2MzIzLjk5OTk5OTk5ODYsMTI5Mzk1My4wLDEuMjQxOTI5MzAwMDAwMDAwMkU3LDYwODA0ODQuOTk5OTk5OTk0LDI2ODg0MTguMDAwMDAwMDAxNCw0MDQxNzY4Ljk5OTk5OTk5NjcsNDQ2ODk3Ni4wMDAwMDAwMDEsNjM0OTA5Ny4wMDAwMDAwMDIsNTI5NjQ4Ni4wMDAwMDAwMDIsMTI3NDkyMi45OTk5OTk5OTk4LDk5Mzg0NDMuOTk5OTk5OTk0LDQ5MTk0NzguOTk5OTk5OTk4LDU1OTUyMTAuOTk5OTk5OTk5LDI4NDQ2NTcuOTk5OTk5OTk4LDkwMjE5NS4wMDAwMDAwMDAyLDgwNDkzMTMuMCw2NDIyMDAuMDAwMDAwMDAwMiwxNzExMjYzLjAwMDAwMDAwMDUsMTIzNTc4Ni4wMDAwMDAwMDAyLDg0MTQzNTAuMCwxODE5MDQ2LjAwMDAwMDAwMDcsMTk5ODI1Ni45OTk5OTk5OTkzLDEuODk3NjQ1NzAwMDAwMDAwN0U3LDEuMTM1MzE0MDAwMDAwMDAxM0U3LDM0NTA2NTQuMDAwMDAwMDAyMywzNDIxMzk5LjAwMDAwMDAwMiwxLjIyODEwNTQwMDAwMDAwMDZFNywxMDQ4MzE5LjAwMDAwMDAwMDIsNDAxMjAxMi4wLDc1NDg0NC4wMDAwMDAwMDA3LDU2ODkyODIuOTk5OTk5OTk2LDIuMDg1MTgxOTk5OTk5OTk2NkU3LDIyMzMxNjkuMDAwMDAwMDAyLDcwNzg1MTYuMDAwMDAwMDAxLDYwODgyNy4wLDU4OTQxMjEuMDAwMDAwMDAzLDUzNjM2NzUuMDAwMDAwMDAzLDE4MDgzNDQuMCw0OTM3ODIuMDAwMDAwMDAwMjMKKzI2LFNhdCAxOSBGZWIgMTEsNjI2OTMxLjk5OTk5OTk5OTQsNDQ0NzA5OS45OTk5OTk5OTUsMjY3MzM5OS45OTk5OTk5OTY3LDUxMzA2MzEuOTk5OTk5OTkzNSwzLjM4NzE2NDgwMDAwMDAwMUU3LDQzMDEyNjEuMDAwMDAwMDAzLDM0MDU1NjQuOTk5OTk5OTk3Nyw1NzIwNTguOTk5OTk5OTk5Miw3ODM1OTkuOTk5OTk5OTk5OSwxLjU5ODIzNzgwMDAwMDAwMUU3LDgxODY0NTIuOTk5OTk5OTk4LDEyMTE1MzcuMDAwMDAwMDAwNSwyOTI2MzIzLjk5OTk5OTk5OSwxMjkzOTUzLjAwMDAwMDAwMDIsMS4yNDE5MjkzMDAwMDAwMDAyRTcsNjA4MDQ4NC45OTk5OTk5OTUsMjY4ODQxOC4wMDAwMDAwMDIsNDA0MTc2OC45OTk5OTk5OTYzLDQ0Njg5NzYuMDAwMDAwMDAyLDYzNDkwOTcuMDAwMDAwMDAxLDUyOTY0ODYuMDAwMDAwMDAyLDEyNzQ5MjIuOTk5OTk5OTk5NSw5OTM4NDQzLjk5OTk5OTk5Niw0OTE5NDc4Ljk5OTk5OTk5OSw1NTk1MjEwLjk5OTk5OTk5OSwyODQ0NjU3Ljk5OTk5OTk5NzcsOTAyMTk1LjAwMDAwMDAwMDIsODA0OTMxMy4wMDAwMDAwMDIsNjQyMjAwLjAwMDAwMDAwMDMsMTcxMTI2My4wMDAwMDAwMDAyLDEyMzU3ODYuMDAwMDAwMDAwMiw4NDE0MzQ5Ljk5OTk5OTk5OCwxODE5MDQ2LjAwMDAwMDAwMDcsMTk5ODI1Ni45OTk5OTk5OTg4LDEuODk3NjQ1NzAwMDAwMDAwN0U3LDEuMTM1MzE0MDAwMDAwMDAxM0U3LDM0NTA2NTQuMDAwMDAwMDAyMywzNDIxMzk5LjAwMDAwMDAwMiwxLjIyODEwNTQwMDAwMDAwMDRFNywxMDQ4MzE5LjAwMDAwMDAwMDIsNDAxMjAxMi4wLDc1NDg0NC4wMDAwMDAwMDA3LDU2ODkyODIuOTk5OTk5OTk1LDIuMDg1MTgxOTk5OTk5OTk3RTcsMjIzMzE2OS4wMDAwMDAwMDIsNzA3ODUxNi4wMDAwMDAwMDIsNjA4ODI2Ljk5OTk5OTk5OTksNTg5NDEyMS4wMDAwMDAwMDQsNTM2MzY3NS4wMDAwMDAwMDMsMTgwODM0My45OTk5OTk5OTk4LDQ5Mzc4Mi4wMDAwMDAwMDAyMworMjcsU3VuIDIwIEZlYiAxMSw2MjY5MzEuOTk5OTk5OTk5NCw0NDQ3MDk5Ljk5OTk5OTk5NCwyNjczMzk5Ljk5OTk5OTk5NjMsNTEzMDYzMS45OTk5OTk5OTMsMy4zODcxNjQ4MDAwMDAwMDFFNyw0MzAxMjYxLjAwMDAwMDAwNSwzNDA1NTY0Ljk5OTk5OTk5NzcsNTcyMDU4Ljk5OTk5OTk5OTIsNzgzNTk5Ljk5OTk5OTk5OTgsMS41OTgyMzc4MDAwMDAwMDFFNyw4MTg2NDUyLjk5OTk5OTk5OCwxMjExNTM3LjAwMDAwMDAwMDIsMjkyNjMyMy45OTk5OTk5OTksMTI5Mzk1My4wMDAwMDAwMDA1LDEuMjQxOTI5MzAwMDAwMDAwMkU3LDYwODA0ODQuOTk5OTk5OTk1LDI2ODg0MTguMDAwMDAwMDAyLDQwNDE3NjguOTk5OTk5OTk3LDQ0Njg5NzYuMDAwMDAwMDAyLDYzNDkwOTcuMDAwMDAwMDAzLDUyOTY0ODYuMDAwMDAwMDAyLDEyNzQ5MjIuOTk5OTk5OTk5NSw5OTM4NDQzLjk5OTk5OTk5NCw0OTE5NDc4Ljk5OTk5OTk5OCw1NTk1MjEwLjk5OTk5OTk5OCwyODQ0NjU3Ljk5OTk5OTk5NzcsOTAyMTk1LjAwMDAwMDAwMDIsODA0OTMxMy4wMDAwMDAwMDIsNjQyMjAwLjAwMDAwMDAwMDIsMTcxMTI2My4wMDAwMDAwMDAyLDEyMzU3ODYuMDAwMDAwMDAwMiw4NDE0MzQ5Ljk5OTk5OTk5OCwxODE5MDQ2LjAwMDAwMDAwMDcsMTk5ODI1Ni45OTk5OTk5OTksMS44OTc2NDU3MDAwMDAwMDA0RTcsMS4xMzUzMTQwMDAwMDAwMDExRTcsMzQ1MDY1NC4wMDAwMDAwMDIsMzQyMTM5OS4wMDAwMDAwMDIzLDEuMjI4MTA1NDAwMDAwMDAwNEU3LDEwNDgzMTkuMDAwMDAwMDAwMiw0MDEyMDExLjk5OTk5OTk5OTUsNzU0ODQ0LjAwMDAwMDAwMDYsNTY4OTI4Mi45OTk5OTk5OTQsMi4wODUxODE5OTk5OTk5OTY2RTcsMjIzMzE2OS4wMDAwMDAwMDIsNzA3ODUxNi4wMDAwMDAwMDIsNjA4ODI3LjAsNTg5NDEyMS4wMDAwMDAwMDQsNTM2MzY3NS4wMDAwMDAwMDQsMTgwODM0NC4wLDQ5Mzc4Mi4wMDAwMDAwMDAzCisyOCxNb24gMjEgRmViIDExLDYyNjkzMS45OTk5OTk5OTk0LDQ0NDcwOTkuOTk5OTk5OTk2LDI2NzMzOTkuOTk5OTk5OTk2Nyw1MTMwNjMxLjk5OTk5OTk5MywzLjM4NzE2NDgwMDAwMDAwMUU3LDQzMDEyNjEuMDAwMDAwMDA1LDM0MDU1NjQuOTk5OTk5OTk3LDU3MjA1OC45OTk5OTk5OTkyLDc4MzU5OS45OTk5OTk5OTk5LDEuNTk4MjM3ODAwMDAwMDAxRTcsODE4NjQ1Mi45OTk5OTk5OTgsMTIxMTUzNy4wLDI5MjYzMjMuOTk5OTk5OTk5LDEyOTM5NTMuMDAwMDAwMDAwMiwxLjI0MTkyOTMwMDAwMDAwMDJFNyw2MDgwNDg0Ljk5OTk5OTk5NSwyNjg4NDE4LjAwMDAwMDAwMTQsNDA0MTc2OC45OTk5OTk5OTcsNDQ2ODk3Ni4wMDAwMDAwMDIsNjM0OTA5Ny4wMDAwMDAwMDIsNTI5NjQ4Ni4wMDAwMDAwMDIsMTI3NDkyMi45OTk5OTk5OTk1LDk5Mzg0NDMuOTk5OTk5OTk0LDQ5MTk0NzguOTk5OTk5OTk4LDU1OTUyMTEuMCwyODQ0NjU3Ljk5OTk5OTk5NzcsOTAyMTk1LjAwMDAwMDAwMDMsODA0OTMxMy4wMDAwMDAwMDIsNjQyMjAwLjAwMDAwMDAwMDMsMTcxMTI2My4wLDEyMzU3ODYuMDAwMDAwMDAwMiw4NDE0MzQ5Ljk5OTk5OTk5OCwxODE5MDQ2LjAwMDAwMDAwMSwxOTk4MjU2Ljk5OTk5OTk5OSwxLjg5NzY0NTcwMDAwMDAwMDdFNywxLjEzNTMxNDAwMDAwMDAwMUU3LDM0NTA2NTQuMDAwMDAwMDAyLDM0MjEzOTkuMDAwMDAwMDAzLDEuMjI4MTA1NDAwMDAwMDAwNEU3LDEwNDgzMTkuMDAwMDAwMDAwMyw0MDEyMDExLjk5OTk5OTk5OTUsNzU0ODQ0LjAwMDAwMDAwMDUsNTY4OTI4Mi45OTk5OTk5OTQsMi4wODUxODE5OTk5OTk5OTZFNywyMjMzMTY5LjAwMDAwMDAwMTQsNzA3ODUxNi4wMDAwMDAwMDIsNjA4ODI3LjAsNTg5NDEyMS4wMDAwMDAwMDUsNTM2MzY3NS4wMDAwMDAwMDQsMTgwODM0My45OTk5OTk5OTk1LDQ5Mzc4Mi4wMDAwMDAwMDAyMworMjksVHVlIDIyIEZlYiAxMSw2MjY5MzEuOTk5OTk5OTk5NCw0NDQ3MDk5Ljk5OTk5OTk5NywyNjczMzk5Ljk5OTk5OTk5NjcsNTEzMDYzMS45OTk5OTk5OTMsMy4zODcxNjQ4MDAwMDAwMDFFNyw0MzAxMjYxLjAwMDAwMDAwNCwzNDA1NTY0Ljk5OTk5OTk5NzcsNTcyMDU4Ljk5OTk5OTk5OTEsNzgzNjAwLjAsMS41OTgyMzc4MDAwMDAwMDA3RTcsODE4NjQ1Mi45OTk5OTk5OTgsMTIxMTUzNy4wLDI5MjYzMjMuOTk5OTk5OTk5LDEyOTM5NTMuMDAwMDAwMDAwMiwxLjI0MTkyOTMwMDAwMDAwMDRFNyw2MDgwNDg0Ljk5OTk5OTk5NSwyNjg4NDE4LjAwMDAwMDAwMTQsNDA0MTc2OC45OTk5OTk5OTcsNDQ2ODk3Ni4wMDAwMDAwMDEsNjM0OTA5Ny4wMDAwMDAwMDIsNTI5NjQ4Ni4wMDAwMDAwMDMsMTI3NDkyMi45OTk5OTk5OTk1LDk5Mzg0NDMuOTk5OTk5OTk2LDQ5MTk0NzguOTk5OTk5OTk5LDU1OTUyMTEuMCwyODQ0NjU3Ljk5OTk5OTk5OCw5MDIxOTUuMDAwMDAwMDAwMiw4MDQ5MzEzLjAwMDAwMDAwMSw2NDIyMDAuMDAwMDAwMDAwMiwxNzExMjYzLjAsMTIzNTc4Ni4wMDAwMDAwMDA1LDg0MTQzNDkuOTk5OTk5OTk4LDE4MTkwNDYuMDAwMDAwMDAxMiwxOTk4MjU2Ljk5OTk5OTk5ODgsMS44OTc2NDU3MDAwMDAwMDA3RTcsMS4xMzUzMTQwMDAwMDAwMDFFNywzNDUwNjU0LjAwMDAwMDAwMTQsMzQyMTM5OS4wMDAwMDAwMDIzLDEuMjI4MTA1NDAwMDAwMDAwNEU3LDEwNDgzMTkuMDAwMDAwMDAwMSw0MDEyMDExLjk5OTk5OTk5OTUsNzU0ODQ0LjAwMDAwMDAwMDUsNTY4OTI4Mi45OTk5OTk5OTQsMi4wODUxODE5OTk5OTk5OTYzRTcsMjIzMzE2OS4wMDAwMDAwMDIsNzA3ODUxNi4wMDAwMDAwMDIsNjA4ODI2Ljk5OTk5OTk5OTksNTg5NDEyMS4wMDAwMDAwMDYsNTM2MzY3NS4wMDAwMDAwMDMsMTgwODM0My45OTk5OTk5OTk1LDQ5Mzc4Mi4wMDAwMDAwMDAyCiszMCxXZWQgMjMgRmViIDExLDYyNjkzMS45OTk5OTk5OTk0LDQ0NDcwOTkuOTk5OTk5OTk3LDI2NzMzOTkuOTk5OTk5OTk3LDUxMzA2MzEuOTk5OTk5OTkzLDMuMzg3MTY0OEU3LDQzMDEyNjEuMDAwMDAwMDA0LDM0MDU1NjQuOTk5OTk5OTk3LDU3MjA1OC45OTk5OTk5OTkxLDc4MzYwMC4wLDEuNTk4MjM3ODAwMDAwMDAwNkU3LDgxODY0NTIuOTk5OTk5OTk4LDEyMTE1MzcuMCwyOTI2MzIzLjk5OTk5OTk5ODYsMTI5Mzk1My4wMDAwMDAwMDAyLDEuMjQxOTI5MzAwMDAwMDAwNEU3LDYwODA0ODQuOTk5OTk5OTk2LDI2ODg0MTguMDAwMDAwMDAyLDQwNDE3NjguOTk5OTk5OTk3LDQ0Njg5NzYuMDAwMDAwMDAxLDYzNDkwOTcuMDAwMDAwMDAyLDUyOTY0ODYuMDAwMDAwMDAzLDEyNzQ5MjIuOTk5OTk5OTk5OCw5OTM4NDQzLjk5OTk5OTk5NCw0OTE5NDc4Ljk5OTk5OTk5OSw1NTk1MjExLjAwMDAwMDAwMSwyODQ0NjU3Ljk5OTk5OTk5OSw5MDIxOTUuMDAwMDAwMDAwMiw4MDQ5MzEzLjAwMDAwMDAwMyw2NDIyMDAuMDAwMDAwMDAwMiwxNzExMjYzLjAsMTIzNTc4Ni4wMDAwMDAwMDA3LDg0MTQzNDkuOTk5OTk5OTk2LDE4MTkwNDYuMDAwMDAwMDAxLDE5OTgyNTYuOTk5OTk5OTk4OCwxLjg5NzY0NTcwMDAwMDAwMUU3LDEuMTM1MzE0MDAwMDAwMDAxMUU3LDM0NTA2NTQuMDAwMDAwMDAxNCwzNDIxMzk5LjAwMDAwMDAwMywxLjIyODEwNTQwMDAwMDAwMDRFNywxMDQ4MzE5LjAwMDAwMDAwMDEsNDAxMjAxMi4wLDc1NDg0NC4wMDAwMDAwMDA2LDU2ODkyODIuOTk5OTk5OTk1LDIuMDg1MTgxOTk5OTk5OTk2M0U3LDIyMzMxNjkuMDAwMDAwMDAyMyw3MDc4NTE2LjAwMDAwMDAwMyw2MDg4MjcuMCw1ODk0MTIxLjAwMDAwMDAwNSw1MzYzNjc1LjAwMDAwMDAwMywxODA4MzQ0LjAsNDkzNzgyLjAwMDAwMDAwMDEKKzMxLFRodSAyNCBGZWIgMTEsNjI2OTMxLjk5OTk5OTk5OTMsNDQ0NzA5OS45OTk5OTk5OTcsMjY3MzM5OS45OTk5OTk5OTcsNTEzMDYzMS45OTk5OTk5OTMsMy4zODcxNjQ4RTcsNDMwMTI2MS4wMDAwMDAwMDQsMzQwNTU2NC45OTk5OTk5OTcsNTcyMDU4Ljk5OTk5OTk5OSw3ODM2MDAuMCwxLjU5ODIzNzgwMDAwMDAwMDdFNyw4MTg2NDUyLjk5OTk5OTk5OCwxMjExNTM3LjAwMDAwMDAwMDIsMjkyNjMyMy45OTk5OTk5OTg2LDEyOTM5NTMuMCwxLjI0MTkyOTMwMDAwMDAwMDZFNyw2MDgwNDg0Ljk5OTk5OTk5NSwyNjg4NDE4LjAwMDAwMDAwMiw0MDQxNzY4Ljk5OTk5OTk5Nyw0NDY4OTc2LjAsNjM0OTA5Ny4wMDAwMDAwMDIsNTI5NjQ4Ni4wMDAwMDAwMDUsMTI3NDkyMi45OTk5OTk5OTk4LDk5Mzg0NDMuOTk5OTk5OTk0LDQ5MTk0NzguOTk5OTk5OTk3LDU1OTUyMTEuMDAwMDAwMDAyLDI4NDQ2NTcuOTk5OTk5OTk4Niw5MDIxOTUuMDAwMDAwMDAwMiw4MDQ5MzEzLjAwMDAwMDAwMyw2NDIyMDAuMDAwMDAwMDAwMSwxNzExMjYzLjAsMTIzNTc4Ni4wMDAwMDAwMDA3LDg0MTQzNDkuOTk5OTk5OTk2LDE4MTkwNDYuMDAwMDAwMDAxLDE5OTgyNTYuOTk5OTk5OTk4OCwxLjg5NzY0NTcwMDAwMDAwMUU3LDEuMTM1MzE0MDAwMDAwMDAxRTcsMzQ1MDY1NC4wMDAwMDAwMDEsMzQyMTM5OS4wMDAwMDAwMDMsMS4yMjgxMDU0MDAwMDAwMDAyRTcsMTA0ODMxOS4wMDAwMDAwMDAxLDQwMTIwMTEuOTk5OTk5OTk5NSw3NTQ4NDQuMDAwMDAwMDAwNiw1Njg5MjgyLjk5OTk5OTk5NCwyLjA4NTE4MTk5OTk5OTk5NTVFNywyMjMzMTY5LjAwMDAwMDAwMyw3MDc4NTE2LjAwMDAwMDAwMyw2MDg4MjcuMCw1ODk0MTIxLjAwMDAwMDAwNCw1MzYzNjc1LjAwMDAwMDAwMiwxODA4MzQzLjk5OTk5OTk5OTgsNDkzNzgyLjAwMDAwMDAwMDA2CiszMixGcmkgMjUgRmViIDExLDYyNjkzMS45OTk5OTk5OTk0LDQ0NDcwOTkuOTk5OTk5OTk2LDI2NzMzOTkuOTk5OTk5OTk2Nyw1MTMwNjMxLjk5OTk5OTk5MywzLjM4NzE2NDhFNyw0MzAxMjYxLjAwMDAwMDAwNSwzNDA1NTY0Ljk5OTk5OTk5NjcsNTcyMDU4Ljk5OTk5OTk5ODcsNzgzNjAwLjAsMS41OTgyMzc4MDAwMDAwMDA3RTcsODE4NjQ1Mi45OTk5OTk5OTksMTIxMTUzNy4wLDI5MjYzMjMuOTk5OTk5OTk5LDEyOTM5NTMuMCwxLjI0MTkyOTMwMDAwMDAwMDZFNyw2MDgwNDg0Ljk5OTk5OTk5MzUsMjY4ODQxOC4wMDAwMDAwMDE0LDQwNDE3NjguOTk5OTk5OTk3LDQ0Njg5NzYuMCw2MzQ5MDk3LjAwMDAwMDAwMiw1Mjk2NDg2LjAwMDAwMDAwNiwxMjc0OTIzLjAsOTkzODQ0My45OTk5OTk5OTQsNDkxOTQ3OC45OTk5OTk5OTYsNTU5NTIxMS4wMDAwMDAwMDIsMjg0NDY1Ny45OTk5OTk5OTksOTAyMTk1LjAwMDAwMDAwMDIsODA0OTMxMy4wMDAwMDAwMDQsNjQyMjAwLjAwMDAwMDAwMDIsMTcxMTI2Mi45OTk5OTk5OTk4LDEyMzU3ODYuMDAwMDAwMDAxLDg0MTQzNDkuOTk5OTk5OTk2LDE4MTkwNDYuMDAwMDAwMDAwNSwxOTk4MjU2Ljk5OTk5OTk5OSwxLjg5NzY0NTcwMDAwMDAwMTVFNywxLjEzNTMxNDAwMDAwMDAwMDdFNywzNDUwNjU0LjAwMDAwMDAwMDUsMzQyMTM5OS4wMDAwMDAwMDMsMS4yMjgxMDU0MDAwMDAwMDAyRTcsMTA0ODMxOS4wMDAwMDAwMDAyLDQwMTIwMTIuMCw3NTQ4NDQuMDAwMDAwMDAwOCw1Njg5MjgyLjk5OTk5OTk5MzUsMi4wODUxODE5OTk5OTk5OTVFNywyMjMzMTY5LjAwMDAwMDAwMjMsNzA3ODUxNi4wMDAwMDAwMDMsNjA4ODI2Ljk5OTk5OTk5OTgsNTg5NDEyMS4wMDAwMDAwMDUsNTM2MzY3NS4wMDAwMDAwMDMsMTgwODM0NC4wLDQ5Mzc4Mi4wMDAwMDAwMDAxCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNJU3RhdGVzT25seV9SS19SZWZlcmVuY2UvVGVzdFNJL2h1bWFuL1NfMC5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNJU3RhdGVzT25seV9SS19SZWZlcmVuY2UvVGVzdFNJL2h1bWFuL1NfMC5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTVmYTE4ZAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0lTdGF0ZXNPbmx5X1JLX1JlZmVyZW5jZS9UZXN0U0kvaHVtYW4vU18wLmNzdgpAQCAtMCwwICsxLDMzIEBACitpdGVyYXRpb24sdGltZSxzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9ub2RlL3RyYW5zcG9ydC9waXBlL1VTQQorMSxUdWUgMjUgSmFuIDExLDk0MzIxMS4wCisyLFdlZCAyNiBKYW4gMTEsNjU2ODI4LjM3Njc3Mjk4NgorMyxUaHUgMjcgSmFuIDExLDE4ODY2Ljc2Mzg2MTYzNjIyCis0LEZyaSAyOCBKYW4gMTEsMTg4NjQuMjIxNDkxMjI1Nzg0Cis1LFNhdCAyOSBKYW4gMTEsMTg4NjQuMjI1MjQyNDIzOTM4Cis2LFN1biAzMCBKYW4gMTEsMTg4NjQuMjIyNTM4MDQ0OTM0Cis3LE1vbiAzMSBKYW4gMTEsMTg4NjQuMjI3MjEyNTEwMDY4Cis4LFR1ZSAxIEZlYiAxMSwxODg2NC4yMjIxNDY3Mjg0MjUKKzksV2VkIDIgRmViIDExLDE4ODY0LjIyNDcwNzE2OTc5NworMTAsVGh1IDMgRmViIDExLDE4ODY0LjIyMTI1MDAxNDQzOAorMTEsRnJpIDQgRmViIDExLDE4ODY0LjIyNDAzODgwNzk2MworMTIsU2F0IDUgRmViIDExLDE4ODY0LjIyMjMwNTQ1OTU2MworMTMsU3VuIDYgRmViIDExLDE4ODY0LjIyMzYyNDE4NDY2CisxNCxNb24gNyBGZWIgMTEsMTg4NjQuMjIwOTM2MDI3ODYKKzE1LFR1ZSA4IEZlYiAxMSwxODg2NC4yMjE5NTQyOTU3ODYKKzE2LFdlZCA5IEZlYiAxMSwxODg2NC4yMjI5MDA3OTcxNTUKKzE3LFRodSAxMCBGZWIgMTEsMTg4NjQuMjIyOTk0NzkyNTk1CisxOCxGcmkgMTEgRmViIDExLDE4ODY0LjIzMDY3NzI3NDU5CisxOSxTYXQgMTIgRmViIDExLDE4ODY0LjIyMTk1Nzc0MzEyCisyMCxTdW4gMTMgRmViIDExLDE4ODY0LjIyNzUyNDA5MjExNQorMjEsTW9uIDE0IEZlYiAxMSwxODg2NC4yMjM5NDU4NTk5MjUKKzIyLFR1ZSAxNSBGZWIgMTEsMTg4NjQuMjI1OTg3OTI1MzEKKzIzLFdlZCAxNiBGZWIgMTEsMTg4NjQuMjIxMzI3NzkwMjkyCisyNCxUaHUgMTcgRmViIDExLDE4ODY0LjIyNjA5MDM5NTIxCisyNSxGcmkgMTggRmViIDExLDE4ODY0LjIyMjA3MzYxNjAwNQorMjYsU2F0IDE5IEZlYiAxMSwxODg2NC4yMjg5MTc3NjA1MTMKKzI3LFN1biAyMCBGZWIgMTEsMTg4NjQuMjI0MDg2MjMzNworMjgsTW9uIDIxIEZlYiAxMSwxODg2NC4yMjcxOTU1NjgyNQorMjksVHVlIDIyIEZlYiAxMSwxODg2NC4yMjA4NTYxMzM2MgorMzAsV2VkIDIzIEZlYiAxMSwxODg2NC4yMjM4OTk3NDE1MjYKKzMxLFRodSAyNCBGZWIgMTEsMTg4NjQuMjIzODM5NDg4MjUKKzMyLEZyaSAyNSBGZWIgMTEsMTg4NjQuMjI2MjUxODYxNzkKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0lTdGF0ZXNPbmx5X1JLX1JlZmVyZW5jZS9UZXN0U0kvaHVtYW4vU18xLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0lTdGF0ZXNPbmx5X1JLX1JlZmVyZW5jZS9UZXN0U0kvaHVtYW4vU18xLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MjhhMzQ2Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTSVN0YXRlc09ubHlfUktfUmVmZXJlbmNlL1Rlc3RTSS9odW1hbi9TXzEuY3N2CkBAIC0wLDAgKzEsMzMgQEAKK2l0ZXJhdGlvbix0aW1lLFVTLUFLLFVTLUFMLFVTLUFSLFVTLUFaLFVTLUNBLFVTLUNPLFVTLUNULFVTLURDLFVTLURFLFVTLUZMLFVTLUdBLFVTLUhJLFVTLUlBLFVTLUlELFVTLUlMLFVTLUlOLFVTLUtTLFVTLUtZLFVTLUxBLFVTLU1BLFVTLU1ELFVTLU1FLFVTLU1JLFVTLU1OLFVTLU1PLFVTLU1TLFVTLU1ULFVTLU5DLFVTLU5ELFVTLU5FLFVTLU5ILFVTLU5KLFVTLU5NLFVTLU5WLFVTLU5ZLFVTLU9ILFVTLU9LLFVTLU9SLFVTLVBBLFVTLVJJLFVTLVNDLFVTLVNELFVTLVROLFVTLVRYLFVTLVVULFVTLVZBLFVTLVZULFVTLVdBLFVTLVdJLFVTLVdWLFVTLVdZCisxLFR1ZSAyNSBKYW4gMTEsNjI2OTMyLjAsNDQ0NzEwMC4wLDI2NzM0MDAuMCw1MTMwNjMyLjAsMy4zODcxNjQ3RTcsNDMwMTI2MS4wLDM0MDU1NjUuMCw1NzIwNTkuMCw3ODM2MDAuMCwxLjU5ODIzNzhFNyw4MTg2NDUzLjAsMTIxMTUzNy4wLDI5MjYzMjQuMCwxMjkzOTUzLjAsMS4yNDE5MjkzRTcsNjA4MDQ4NS4wLDI2ODg0MTguMCw0MDQxNzY5LjAsNDQ2ODk3Ni4wLDYzNDkwOTcuMCw1Mjk2NDg2LjAsMTI3NDkyMy4wLDk5Mzg0NDQuMCw0OTE5NDc5LjAsNTU5NTIxMS4wLDI4NDQ2NTguMCw5MDIxOTUuMCw4MDQ5MzEzLjAsNjQyMjAwLjAsMTcxMTI2My4wLDEyMzU3ODYuMCw4NDE0MzUwLjAsMTgxOTA0Ni4wLDE5OTgyNTcuMCwxLjg5NzY0NTdFNywxLjEzNTMxNEU3LDM0NTA2NTQuMCwzNDIxMzk5LjAsMS4yMjgxMDU0RTcsMTA0ODMxOS4wLDQwMTIwMTIuMCw3NTQ4NDQuMCw1Njg5MjgzLjAsMi4wODUxODJFNywyMjMzMTY5LjAsNzA3ODUxNi4wLDYwODgyNy4wLDU4OTQxMjEuMCw1MzYzNjc1LjAsMTgwODM0NC4wLDQ5Mzc4Mi4wCisyLFdlZCAyNiBKYW4gMTEsNjI2MzY0Ljg1OTgxODk4NzQsNDQ0NjUyOS44ODEyMjM0OTIsMjY3Mjk4My45NzA2ODQzOTY2LDUxMjU3MDcuNTgzMTI1MTMsMzc3MDQyNi4zMzg0NzU5MDIsNDI5NjEwOS4wNzgwMzIzODQsMzQwNDgyNy44MTcxMDc0MjEzLDU3MDE0OS40NzE4MzI4NzcsNzgzNTk4LjEyMjU1OTg0NDMsMS41OTY4NzYyOTA3ODM5MzJFNyw4MTc3NTA3LjEzNjkxMjIxNTUsMTIwOTQzOC4wMDk5NDI2NDQsMjkyNTk4MS4yOTQ5NDcwNTQsMTI5MzUyOS45MzE1ODMwNTMyLDEuMjQwOTMwNjA4Njk1MTI1NEU3LDYwNzk0MzcuMTQ0MTM4Mzk0LDI2ODgyNTYuMDkwODQ0MDA3Nyw0MDQxMjYwLjM0ODI1NzM5MjYsNDQ2ODAxOC4wMDE5NzIwNzksNjM0NjA5Mi42ODY3MjIxMjUsNTI5NDI2Ni4xODkzMjg5NDksMTI3NDY3Mi43Nzg1OTc3OTI2LDk5MzQzMzYuMTgxNjY5MzkyLDQ5MTU3ODYuMzcxMzgxMDc5LDU1OTI0NzkuODIyNTc5MTIxLDI4NDQzODkuNDIyNTUxNDAzOCw5MDE4OTguNzI3OTQyMDk4Miw4MDQ0OTMxLjc2NTkxOTg1OCw2NDIwNTguNjMyMTM4NjIyMSwxNzEwNzcxLjQxMDgzNTI3MSwxMjM1MzY0LjAzOTEwNTg4ODIsODQxMDQzNC41NzM4OTQ1NjYsMTgxODM2OC42MjQ5MjU3MzEsMTk5MzA5My4zNTc4MjY5NDQyLDEuODk2NzY0Njc2MzM1NTQyRTcsMS4xMzQ5MTYyMDEyMTIyMzcyRTcsMzQ0OTkxNS4yNDk1MzI0NTM3LDM0MTk3ODAuMDkwNTIyMzA0NiwxLjIyNzY1MzY5NzU0NTAwNTZFNywxMDQ3NzYxLjI1MTU0ODY3NDMsNDAxMTM0MC40MjY3NjA2NzEsNzU0NzA3LjMxMjExMTc2OSw1Njg2ODM4Ljc3Nzk1MTkzNCwyLjA4MzkyOTYzMzM5NTE5NDZFNywyMjMwOTU0Ljg4MDQxNTc4OCw3MDc1MTc1Ljk1NDMyNDY1LDYwODY4MC45NDY5MTMzNDMsNTg5MDcxMy4xMTc2NjAzNzMsNTM2MjUyMy40MDE1MDQ0NTA1LDE4MDgyNjcuNTAwODUzMjc2Myw0OTM2ODAuMDM3MDEzOTg0ODcKKzMsVGh1IDI3IEphbiAxMSwxMjU0MC40MjUxNzMzNDA2MDksODkwMzEuNzg1OTM4MjUzNDgsNTM1MTIuNDU0MzkzMTQ1MjUsMTAyNjI2LjQwNzAzMzUxNzExLDY3NzQzMy4xMjM1NTQzNTIyLDg2MDM0LjQ2Mzg2NDE0MTEsNjgxNTEuOTg5NTg0MjQ2MjcsMTE0NDEuNjI3MTA3OTY5NjAzLDE2NTE4Ljg2NDQ3NTQ4NTE0NSwzMTk2OTUuODk2MzcwODQxODMsMTYzNzQ4LjM0NzU0OTE3NTQ0LDI0MjMyLjU0MDY2NDE0NDU2LDU4NTkxLjE2Mjg4Mzk0ODQxLDI1ODg5LjI4NjQxMDk5ODk2LDI0ODQyNS42NTc1MDI5MjgyOCwxMjE3MDAuOTg5NDg3NjUxODIsNTM4ODMuOTc5MTU2NzIyMjYsODA5MTguNTA4ODY0NTI2MjcsODk0MzMuNDM4Njg0MzQ4OTksMTI3MDE2LjU3NjI1NTU0NTY5LDEwNTk2Mi4zNTM4NTU0MzYwNCwyNTUxNS4yNjM0NTE2MTIyNTMsMTk4ODMwLjk3NDI2NzA3NjYsOTg0MDYuNDcyNTY5NDIyOTQsMTExOTMzLjgwNjUwNDU0NDczLDU2OTcxLjE2OTk4MTk3NzA5NSwxODA1MC45OTkwODM2MDY2NiwxNjEwMjQuNDE3NjU1MTE4ODMsMTI4NTEuNTQ0OTU0ODE5NTE3LDM0MjQwLjY1Nzg3NjY2NzQyLDI0NzI1LjA3MTEyODM4MzI0LDE2ODMzMy42ODA2MDgyMTU2OCwzNjM5My41Mzg1NTE0ODcwNjUsMzk5NjcuMTQwNTc2NTA4MzI1LDM3OTYzNC42NTY0MjU0OTY2LDIyNzE0Ni41MTIzNDAyNzc1OCw2OTA1NC43NjYzNTYwMDQzMSw2ODQ0Ni42NDUzOTM3MDIxNiwyNDU3MDcuMzM1MDUwMDk4NjMsMjA5NzEuNDY0NDE0NzQwOTIsODAzMDIuMjU0ODkxMDI4MjYsMTUxMDcuNjY0NDE5NTA0Njg4LDExMzgxOS44NTQxNjEyNzEsNDE3MTI1Ljk1MjIxNTYxMTUsNDQ2NjkuMTgwMzcyODQ3ODA0LDE0MTYwOS4wNDQ2OTQyMDk0LDEyMTgzLjEwMjU0NTIyNTcxNiwxMTc5MDguNzE4MzMxNjU3OTgsMTA3MzM4LjExMTU5MTYyMDk0LDM2Mjc3LjYxNzAxNTU1MTI5LDk4ODEuODI1MDczNzI3NTIzCis0LEZyaSAyOCBKYW4gMTEsMTI1MzguNjQwNzIyNTYxMTczLDg4OTQyLjAzNjI3MjM1NTksNTM0NjguMDE3OTU2NTcxMDcsMTAyNjEyLjY0NTU3NTU0NjEyLDY3NzQzMi45NjAyMzUzMjk5LDg2MDI1LjIyMzc1NTYyNDA5LDY4MTExLjMxNjQzMTgxNTQ5LDExNDQxLjE4MDE5NTQ4NDg1NiwxNTY3Mi4zNDI3MjI3Mzk0OTUsMzE5NjQ3LjU3OTU1NDY3MTMsMTYzNzI5LjA2NzgyNDE2MzI0LDI0MjMwLjc0MDczOTcwMjcwMiw1ODUyNi41MDYxMzI1OTU0NDUsMjU4NzkuMDY0MTI4NzA1NDE3LDI0ODM4NS44NzYwOTM2ODExMiwxMjE2MDkuNzM2ODcyMDI4Miw1Mzc2OC40MDY3Mjc4MjQ2NjYsODA4MzUuNDEzNTgzMzk4OTYsODkzNzkuNTQxNzc0MzI1ODMsMTI2OTgxLjk1Mzk4NDA3Mjg0LDEwNTkyOS43MzMxNzQ4NDQxOCwyNTQ5OC40NjY3ODYyOTIwNDMsMTk4NzY4LjkwNTA2ODQ0MTY0LDk4Mzg5LjU4NjgyODQxMjk1LDExMTkwNC4yMzE5NDU1OTY3Nyw1Njg5My4xOTE1MjA5ODUxOTQsMTgwNDMuOTAyODY2MTA1NTQ1LDE2MDk4Ni4yNzU0MDgzNDE2NywxMjg0NC4wMDMwNDY4Njc0MjcsMzQyMjUuMjY2MjE2OTgxNjgsMjQ3MTUuNzIzNzc1MjY3NzUsMTY4Mjg3LjAxODg0NjY0MTcsMzYzODAuOTI1MDk0Mjk5NDA0LDM5OTY1LjE0MDg0NTIwNDI5LDM3OTUyOS4xODI2MDA3MTM3NCwyMjcwNjIuODMzNzk2MzUzNyw2OTAxMy4wOTY4MzQ0ODI5Myw2ODQyNy45ODc1MzU5ODI1MiwyNDU2MjEuMTE0ODIyNTI2MSwyMDk2Ni4zODIwNTMwNTEzMiw4MDI0MC4yNjUwNDg0OTE3LDE1MDk2Ljg4NDM1NTY5MDUyMSwxMTM3ODUuNjczODA0ODYyOTYsNDE3MDM2LjQzNjE2OTA4ODUsNDQ2NjMuMzgyMzQ5OTU1MDEsMTQxNTcwLjMzNTYzNDcwOTM2LDEyMTc2LjU0MjY0OTk3NzYxMywxMTc4ODIuNDMwNjIwNjYxMjQsMTA3MjczLjUyNjA5MjQ4MDM2LDM2MTY2LjkyNDc2MDY5OTMsOTg3NS42NDI0OTc4MjczMgorNSxTYXQgMjkgSmFuIDExLDEyNTM4LjY0MjUwOTIzNDA4Myw4ODk0Mi4xMjU5MjUyNjk0MSw1MzQ2OC4wNjIzMzg0NjQ2OCwxMDI2MTIuNjU5MzYzNDg1MzYsNjc3NDMyLjk2MDg3OTQxNjIsODYwMjUuMjMzMDQ3NzYwMzgsNjgxMTEuMzU3MDQ0MDgwNTYsMTE0NDEuMTgwNjg0MzI5MDMsMTU2NzMuMTg5NjkxNTk0MzYyLDMxOTY0Ny42Mjc5MDMzNjgyNywxNjM3MjkuMDg3MTc3OTE1MjcsMjQyMzAuNzQyNTcyOTkxMjQsNTg1MjYuNTcwNzIzODgxMTc0LDI1ODc5LjA3NDMzMjg3MTU0NywyNDgzODUuOTE1ODgyMzkyNCwxMjE2MDkuODI4MDA1MTEwNzMsNTM3NjguNTIyMjI3OTExNTI2LDgwODM1LjQ5NjU5MDIzNTUsODkzNzkuNTk1NTkwOTc3OTQsMTI2OTgxLjk4ODU0Njk2NTgyLDEwNTkyOS43NjU3MzcwNjY0NywyNTQ5OC40ODM1NTkxNTg2OTYsMTk4NzY4Ljk2NzAyNjEzOTE0LDk4Mzg5LjYwMzcwOTI2MDg5LDExMTkwNC4yNjE0NzA0MDQ0MSw1Njg5My4yNjk0MzE2ODU5NSwxODA0My45MDk5NDk3MzQ0MDcsMTYwOTg2LjMxMzQ5MjgzOTQ2LDEyODQ0LjAxMDU3NzM4MzAwNCwzNDIyNS4yODE1ODIzOTkxMywyNDcxNS43MzMxMDU5MDgxOCwxNjgyODcuMDY1NDI3NjY0NjQsMzYzODAuOTM3Njg0OTc5NTY2LDM5OTY1LjE0Mjk0ODY0NjQ2LDM3OTUyOS4yODc4OTE4MjkyLDIyNzA2Mi45MTczMjQ2NjcwNyw2OTAxMy4xMzg0NDE5OTc4MSw2ODQyOC4wMDYxNjE4NDA1MiwyNDU2MjEuMjAwODg3MTY2OCwyMDk2Ni4zODcxMjc1MDA3NjYsODAyNDAuMzI2OTU4NjAyMjIsMTUwOTYuODk1MTIxMTk1NTA1LDExMzc4NS43MDc5MjQzMDIyMiw0MTcwMzYuNTI1NTcxMDQzNjYsNDQ2NjMuMzg4MTYxNTcxOSwxNDE1NzAuMzc0Mjc3Mjc3NTYsMTIxNzYuNTQ5MTk5NTE5MjIyLDExNzg4Mi40NTY4NzIxMzY0LDEwNzI3My41OTA1ODE3MjI5NiwzNjE2Ny4wMzUzOTk2NjkyMSw5ODc1LjY0ODY3MTM4NTMyCis2LFN1biAzMCBKYW4gMTEsMTI1MzguNjQxMjA1ODcwNDEyLDg4OTQyLjA2MDUwMTk1OTY3LDUzNDY4LjAyOTk1MDg5NDE3NSwxMDI2MTIuNjQ5MzA2MDUzNSw2Nzc0MzIuOTYwNDQ1MTY3Myw4NjAyNS4yMjYyNzI0NjA4Myw2ODExMS4zMjc0MDY4NTc2NCwxMTQ0MS4xODAzMzA4NTUwMiwxNTY3Mi41NzE0MTEwODgzMzYsMzE5NjQ3LjU5MjYzMTA1NDUsMTYzNzI5LjA3MzA2MzUzMzc1LDI0MjMwLjc0MTIzODA1MjU0LDU4NTI2LjUyMzU4OTI1MDU5LDI1ODc5LjA2Njg4NjE4MTQyMywyNDgzODUuODg2ODUzMzU1MjcsMTIxNjA5Ljc2MTUwMDYwOTYsNTM3NjguNDM3OTQ1MTc3MTQsODA4MzUuNDM2MDE2ODg5NTUsODkzNzkuNTU2MzE3NzM1NjEsMTI2OTgxLjk2MzMyNDY0OTU0LDEwNTkyOS43NDE5NzQzODg2NywyNTQ5OC40NzEzMTkwNDczOCwxOTg3NjguOTIxODExNzAxNiw5ODM4OS41OTEzOTI2NjE3MiwxMTE5MDQuMjM5OTI0NzUxMiw1Njg5My4yMTI1Nzc5MjMxMiwxODA0My45MDQ3ODAzMTc1NSwxNjA5ODYuMjg1NzAxNDUwOTIsMTI4NDQuMDA1MDgxOTA2MzA5LDM0MjI1LjI3MDM2OTIwMTEwNSwyNDcxNS43MjYyOTY2OTI4NzYsMTY4Mjg3LjAzMTQzNTAxNTE3LDM2MzgwLjkyODQ5NjcwODM5LDM5OTY1LjE0MTQyMTk1MTMyLDM3OTUyOS4yMTEwNTUyNzY3NCwyMjcwNjIuODU2MzY4MjkxOTIsNjkwMTMuMTA4MDc4NDk3ODQsNjg0MjcuOTkyNTY5NTk2MywyNDU2MjEuMTM4MDc5OTQ0OTcsMjA5NjYuMzgzNDI0NTAyNDE1LDgwMjQwLjI4MTc3OTY4MDQ2LDE1MDk2Ljg4NzI2NTAzMDk1MywxMTM3ODUuNjgzMDI1Mjg1NTQsNDE3MDM2LjQ2MDMzMzg0Mzk1LDQ0NjYzLjM4MzkyMjU2MDYzLDE0MTU3MC4zNDYwNzc4MDAzMiwxMjE3Ni41NDQ0MTk4OTk4MDcsMTE3ODgyLjQzNzcxNjAwMzQsMTA3MjczLjU0MzUyMDA0NjcyLDM2MTY2Ljk1NDY2NDUxNzcyLDk4NzUuNjQ0MTY2MTc4MDYKKzcsTW9uIDMxIEphbiAxMSwxMjUzOC42NDM0MzcwMDQ1MjMsODg5NDIuMTcyNDYxMzA4NjEsNTM0NjguMDg1Mzc1NjQ0MDYsMTAyNjEyLjY2NjUyMzc1NDQxLDY3NzQzMi45NjEyNDAzMjE1LDg2MDI1LjIzNzg3NTMzMjU1LDY4MTExLjM3ODEyNDM3NzU0LDExNDQxLjE4MDk0MDUwMjM4NywxNTY3My42MjgyNTAyNzQ3MSwzMTk2NDcuNjUzMDA3Nzg1NywxNjM3MjkuMDk3MjMwNzk5NDQsMjQyMzAuNzQzNTI2Nzc5MDA2LDU4NTI2LjYwNDI1MTIzNiwyNTg3OS4wNzk2Mjk0NDUyNiwyNDgzODUuOTM2NTQwOTY3OCwxMjE2MDkuODc1MzA5MTY5OCw1Mzc2OC41ODIxNzk0MDM2NDYsODA4MzUuNTM5Njc2NTEyMDUsODkzNzkuNjIzNTI1MTgyMzIsMTI2OTgyLjAwNjQ4Nzc0NzQsMTA1OTI5Ljc4MjYzOTA1NTkzLDI1NDk4LjQ5MjI2NTM0NjQ2NywxOTg3NjguOTk5MTg2MzE2OCw5ODM4OS42MTI0NzM0MDcyNywxMTE5MDQuMjc2Nzk2MTI1NjksNTY4OTMuMzA5ODcyNzA5MDI2LDE4MDQzLjkxMzYyNjU2MjU1NywxNjA5ODYuMzMzMjYyMjQ4NiwxMjg0NC4wMTQ0ODYxODgyLDM0MjI1LjI4OTU1Nzk2NDc4LDI0NzE1LjczNzk0OTA3NTAwMywxNjgyODcuMDg5NjA2NzAyMzYsMzYzODAuOTQ0MjIwMzI5MTA0LDM5OTY1LjE0NDA0NjY3MTgwNSwzNzk1MjkuMzQyNTQ1NzgyMDQsMjI3MDYyLjk2MDY4MDk1MzQzLDY5MDEzLjE2MDAzODg5Nzg3LDY4NDI4LjAxNTgzMDA4MzI4LDI0NTYyMS4yNDU1NjAwNjAzNCwyMDk2Ni4zODk3NjE1OTY3NSw4MDI0MC4zNTkwOTQwNDMyMiwxNTA5Ni45MDA3MDkxOTIzNjksMTEzNzg1LjcyNTYzNDY0MjgyLDQxNzAzNi41NzE5ODA1ODgyLDQ0NjYzLjM5MTE3OTc3MjgxLDE0MTU3MC4zOTQzMzU3MTE1LDEyMTc2LjU1MjU5OTEzMDQ2OCwxMTc4ODIuNDcwNDk5MzcwMzUsMTA3MjczLjYyNDA1NTY2Njk4LDM2MTY3LjA5MjgyNjEyNzY5LDk4NzUuNjUxODc1ODUxMDMKKzgsVHVlIDEgRmViIDExLDEyNTM4LjY0MTAwNjc3MjI4Niw4ODk0Mi4wNTA0ODkzNzk1Miw1MzQ2OC4wMjQ5OTM5Mzk1NSwxMDI2MTIuNjQ3NzcwMzM2NzksNjc3NDMyLjk2MDQwODAyMiw4NjAyNS4yMjUyNDAxNTg0OCw2ODExMS4zMjI4NzA0MywxMTQ0MS4xODAyNzk0Mjk3MzYsMTU2NzIuNDc2NjE2MjI0OTk4LDMxOTY0Ny41ODcyNDEwMzM5LDE2MzcyOS4wNzA5MTA3ODUwOSwyNDIzMC43NDEwMzYxMzE5NCw1ODUyNi41MTYzNzU3OTE2NzQsMjU4NzkuMDY1NzQ2MjgzMzM3LDI0ODM4NS44ODI0MTYwNzUxNSwxMjE2MDkuNzUxMzIxNzI0MDYsNTM3NjguNDI1MDQ4MTI3Myw4MDgzNS40MjY3NDY2MDc0MSw4OTM3OS41NTAzMDYzODM2OCwxMjY5ODEuOTU5NDY0MzEwODksMTA1OTI5LjczODMzNzE0ODgyLDI1NDk4LjQ2OTQ0NTU2MTI5LDE5ODc2OC45MTQ4OTA4OTY2Miw5ODM4OS41ODk1MDk0Mjg5MywxMTE5MDQuMjM2NjI3MjMxMTYsNTY4OTMuMjAzODc3NDgwMjUsMTgwNDMuOTAzOTg5MDExOTQyLDE2MDk4Ni4yODE0NDg2MDMyLDEyODQ0LjAwNDI0MDczNjQ2MiwzNDIyNS4yNjg2NTI3NTU4OCwyNDcxNS43MjUyNTQzNzg3MzMsMTY4Mjg3LjAyNjIzMjI4MDMzLDM2MzgwLjkyNzA5MDI0MjYzNiwzOTk2NS4xNDExOTUxMDIxNiwzNzk1MjkuMTk5Mjk1MDU5OCwyMjcwNjIuODQ3MDM3NDgwMjcsNjkwMTMuMTAzNDMwOTE1NjcsNjg0MjcuOTkwNDg5MjY5MTYsMjQ1NjIxLjEyODQ2NTg5OTEyLDIwOTY2LjM4Mjg1NzgyMzI5Nyw4MDI0MC4yNzQ4NjQ4NTEzMiwxNTA5Ni44ODYwNjI1ODQwODMsMTEzNzg1LjY3OTIxNDE2Mjc3LDQxNzAzNi40NTAzNTI0ODAzNCw0NDY2My4zODMyNzU0NDg1NSwxNDE1NzAuMzQxNzYxNzg5MDgsMTIxNzYuNTQzNjg4Mjg4MzM5LDExNzg4Mi40MzQ3ODQ4Nzg3MywxMDcyNzMuNTM2MzE2NTU2NjgsMzYxNjYuOTQyMzEwNTg3NzksOTg3NS42NDM0NzY1OTYxCis5LFdlZCAyIEZlYiAxMSwxMjUzOC42NDIxOTc3OTQwNjgsODg5NDIuMTEwMTk4ODM2NjcsNTM0NjguMDU0NTUxODUwNzUsMTAyNjEyLjY1Njk2MzM4OTczLDY3NzQzMi45NjA5MjE1Njc3LDg2MDI1LjIzMTQ0MjE1MjkzLDY4MTExLjM0OTkxNjYzNzU4LDExNDQxLjE4MDYxMjcxNTE5NCwxNTY3My4wNDAwOTg3MDMzLDMxOTY0Ny42MTk0NjU0MTIsMTYzNzI5LjA4MzgyMTg3OTY0LDI0MjMwLjc0MjI2NDAwNTMwNSw1ODUyNi41NTkzOTQ0OTQ3OCwyNTg3OS4wNzI1NDE2NzcyOTUsMjQ4Mzg1LjkwODkzMTQ1NDc2LDEyMTYwOS44MTIwMTQ2NDY3Niw1Mzc2OC41MDE5NzY5MTA4ODQsODA4MzUuNDgyMDI5ODU2MzcsODkzNzkuNTg2MTQ2MjQ3MzQsMTI2OTgxLjk4MjQ4Mjg2MjcsMTA1OTI5Ljc2MDAyMjM4OTg2LDI1NDk4LjQ4MDYxNTc4MzA1LDE5ODc2OC45NTYxNTIzMDQzNyw5ODM4OS42MDA3NTcyODQ4LDExMTkwNC4yNTYyOTA3NDgwNSw1Njg5My4yNTU3NjgyNzM1NywxODA0My45MDg3MDYzMDU5OSwxNjA5ODYuMzA2ODE0NTI5MzIsMTI4NDQuMDA5MjU1NzYwMzc4LDM0MjI1LjI3ODg4NTI3MDYxNCwyNDcxNS43MzE0NjgwNjM1NCwxNjgyODcuMDU3MjU0NTczNjUsMzYzODAuOTM1NDc0OTkyNDYsMzk5NjUuMTQyNjE1NjUyNTQsMzc5NTI5LjI2OTQxNzM3MTIsMjI3MDYyLjkwMjY2Mjc1MTQsNjkwMTMuMTMxMTM5OTU4NDUsNjg0MjguMDAyODkzOTEwMSwyNDU2MjEuMTg1NzgwNDcxNDIsMjA5NjYuMzg2MjM3NTczMDQsODAyNDAuMzE2MDk1OTgzOTQsMTUwOTYuODkzMjMyMTYwNjk5LDExMzc4NS43MDE5MzY2MDI0Niw0MTcwMzYuNTA5OTAzMDYwNTYsNDQ2NjMuMzg3MTUwNzkwNDksMTQxNTcwLjM2NzQ5NzMzNTA0LDEyMTc2LjU0ODA0OTk4MDk1LDExNzg4Mi40NTIyNzAzNDQwMywxMDcyNzMuNTc5MjYzOTU2MjYsMzYxNjcuMDE2MDAyMTM0MDcsOTg3NS42NDc1ODc5NzIyOTgKKzEwLFRodSAzIEZlYiAxMSwxMjUzOC42NDA1Njk1MTk1NDMsODg5NDIuMDI4NTIwNDI2MzgsNTM0NjguMDE0MTE3OTYzODMsMTAyNjEyLjY0NDM5Njk1Miw2Nzc0MzIuOTYwMjkzNTU5Nyw4NjAyNS4yMjI5NzAwODM1OSw2ODExMS4zMTI5MTc1NjI0MiwxMTQ0MS4xODAxNjM1OTM0NDMsMTU2NzIuMjY5MjAxOTAzNjgyLDMxOTY0Ny41NzU0MDU3Njg3LDE2MzcyOS4wNjYxNzkzMDYwNCwyNDIzMC43NDA1OTA0NDcwNjUsNTg1MjYuNTAwNTQ4MzQwMSwyNTg3OS4wNjMyNDU0NDMyNzQsMjQ4Mzg1Ljg3MjY3NDI0OTY3LDEyMTYwOS43Mjg5ODg2OTE4Niw1Mzc2OC4zOTY3NDkxNzg0NjQsODA4MzUuNDA2NDA2MzE1MjUsODkzNzkuNTM3MTE3NTMzNTMsMTI2OTgxLjk1MDk5NDQ5Nzk1LDEwNTkyOS43MzAzNTcxNDI1LDI1NDk4LjQ2NTMzNTEwMjIxMywxOTg3NjguODk5NzA2ODgzNCw5ODM4OS41ODUzNzU0OTkzLDExMTkwNC4yMjkzOTIxNzQ5OCw1Njg5My4xODQ3ODcwMTgwOCwxODA0My45MDIyNTI5NTQzMzMsMTYwOTg2LjI3MjExNjg2NiwxMjg0NC4wMDIzOTUyMjM4NDMsMzQyMjUuMjY0ODg3MDA0ODYsMjQ3MTUuNzIyOTY3NjI3ODU1LDE2ODI4Ny4wMTQ4MTcyNDk1MiwzNjM4MC45MjQwMDQ1NTUxMDUsMzk5NjUuMTQwNjg5NzU2MjcsMzc5NTI5LjE3MzQ5MjY0MzksMjI3MDYyLjgyNjU2NjQzMDMsNjkwMTMuMDkzMjM0MTYxOTYsNjg0MjcuOTg1OTI0OTA3ODMsMjQ1NjIxLjEwNzM3MzM4MTg1LDIwOTY2LjM4MTYxNDQxNzEwNyw4MDI0MC4yNTk2OTMyNzkxMywxNTA5Ni44ODM0MjQzNjc0NzYsMTEzNzg1LjY3MDg1MjYwOTY1LDQxNzAzNi40Mjg0NDkxOTE0NCw0NDY2My4zODE4NTM4MDk2MiwxNDE1NzAuMzMyMjkyMjE0OCwxMjE3Ni41NDIwODMxNjE2ODMsMTE3ODgyLjQyODM1Mjk5NjY5LDEwNzI3My41MjA1MTIxNjk3NCwzNjE2Ni45MTUyMDM4OTc1NDQsOTg3NS42NDE5NjM2NTIyOTMKKzExLEZyaSA0IEZlYiAxMSwxMjUzOC42NDE4Mjk0MjE5NDIsODg5NDIuMDkxNTcxMzM4NTIsNTM0NjguMDQ1MzI4MzYxMTg2LDEwMjYxMi42NTQxMjUzNjIxMyw2Nzc0MzIuOTYxMDA2MjAzMiw4NjAyNS4yMjk1NDY0MzY1LDY4MTExLjM0MTQ3MzM2NjQ1LDExNDQxLjE4MDUzMTA1NjI5NiwxNTY3Mi44NjQyODMyMDcxMywzMTk2NDcuNjA5NDgyNDY0OTYsMTYzNzI5LjA3OTg1NjYwNjAzLDI0MjMwLjc0MTkwMTAxNjgsNTg1MjYuNTQ1OTc1NTE1ODcsMjU4NzkuMDcwNDE5NzU4ODIsMjQ4Mzg1LjkwMDcwNjA4NzM4LDEyMTYwOS43OTMwNzI5NzM0NCw1Mzc2OC40Nzc5OTYyNzAxNiw4MDgzNS40NjQ3ODM2MDMzLDg5Mzc5LjU3NDk1NzkwMjY1LDEyNjk4MS45NzUzMDAwOTIwNiwxMDU5MjkuNzUzMjUzMDE2NCwyNTQ5OC40NzcxMjkwNzk4NCwxOTg3NjguOTQzMjcxNTE5NTYsOTgzODkuNTk3MjYzMzMyMzgsMTExOTA0LjI1MDE1NTcyOTM5LDU2ODkzLjIzOTU4NTg0OTEzNiwxODA0My45MDcyMzMyOTMxNiwxNjA5ODYuMjk4OTA1Mjg0NzYsMTI4NDQuMDA3NjkwMTQzMDQ2LDM0MjI1LjI3NTY5MDEyODA5NSwyNDcxNS43Mjk1Mjc4MjAxMjcsMTY4Mjg3LjA0NzU3MzY0NzQ2LDM2MzgwLjkzMjg1NzAxODAxLDM5OTY1LjE0MjIyOTQ2NzQ4NSwzNzk1MjkuMjQ3NTM0NTYzMDcsMjI3MDYyLjg4NTI5Mzg1MjMzLDY5MDEzLjEyMjQ4OTg3NDAyLDY4NDI3Ljk5OTAyMzEzMjQ4LDI0NTYyMS4xNjc4ODQ4NjUwMiwyMDk2Ni4zODUxODM1ODg1NTQsODAyNDAuMzAzMjI4NjQxODUsMTUwOTYuODkwOTk0NDYwMDUzLDExMzc4NS42OTQ4NDM5MDM1Miw0MTcwMzYuNDkxMzQ5NjQ1NSw0NDY2My4zODU5NTU3ODU2NTYsMTQxNTcwLjM1OTQ2NjY1MzUyLDEyMTc2LjU0NjY4ODIwMTU4LDExNzg4Mi40NDY4MjA3NzY4MiwxMDcyNzMuNTY1ODU2Nzg1NjMsMzYxNjYuOTkzMDM1ODI5NjUsOTg3NS42NDYzMDQ1NTYxMTQKKzEyLFNhdCA1IEZlYiAxMSwxMjUzOC42NDEwNDE0Mzk2MDcsODg5NDIuMDUyMTE0MzQxMSw1MzQ2OC4wMjU3OTY3MzQzNSwxMDI2MTIuNjQ4MDQxNjQ5NjYsNjc3NDMyLjk2MDU5NDEzODcsODYwMjUuMjI1NDM2NTEyMDgsNjgxMTEuMzIzNjAyNTU1NzYsMTE0NDEuMTgwMzA0MTg3ODEsMTU2NzIuNDkxNzU4MjA1NzA4LDMxOTY0Ny41ODgxNjc1NjYzLDE2MzcyOS4wNzEzMDYyOTcxOCwyNDIzMC43NDEwODM2NzM0MTMsNTg1MjYuNTE3NTQ3NTY2MTEsMjU4NzkuMDY1OTI5ODY2OTUsMjQ4Mzg1Ljg4MzE3MDY4OTg2LDEyMTYwOS43NTI5NjgzODExNCw1Mzc2OC40MjcxNTQzNDQ1LDgwODM1LjQyODI1MTM5MDMzLDg5Mzc5LjU1MTI3NjYzNTE3LDEyNjk4MS45NjAwODk3MDU5MSwxMDU5MjkuNzM4OTI0NDQxOSwyNTQ5OC40Njk3NDgyMTYzMywxOTg3NjguOTE2MDA4MDY3NTIsOTgzODkuNTg5ODI2MTk5MiwxMTE5MDQuMjM3MTYyMDY0NzIsNTY4OTMuMjA1MjkzNjgzODYsMTgwNDMuOTA0MTE2NDU1MDU0LDE2MDk4Ni4yODIxNDIwMTQ4LDEyODQ0LjAwNDM3NjQ2OTg1NSwzNDIyNS4yNjg5MjkyMjI0OCwyNDcxNS43MjU0MjIyNzAzMiwxNjgyODcuMDI3MDc0NjczNCwzNjM4MC45MjczMTY5MzMyNiwzOTk2NS4xNDEyNzM4MzQ3NCwzNzk1MjkuMjAxMTk5MDU2NzYsMjI3MDYyLjg0ODU0MDY1NDM4LDY5MDEzLjEwNDE4MTA2MDAzLDY4NDI3Ljk5MDgyNjI5Mjg3LDI0NTYyMS4xMzAwMTUyODAzLDIwOTY2LjM4Mjk1MDEwMTMzLDgwMjQwLjI3NTk4MzgzMjk3LDE1MDk2Ljg4NjI1NzAwMTMzMywxMTM3ODUuNjc5ODI5ODY1NDMsNDE3MDM2LjQ1MTk5MDgxMjI2LDQ0NjYzLjM4MzM5MDc4NDA3NCwxNDE1NzAuMzQyNDYwOTM3NDIsMTIxNzYuNTQzODA2MjU0NzE4LDExNzg4Mi40MzUyNjQ2MzI0MSwxMDcyNzMuNTM3NDc5MjA2MDIsMzYxNjYuOTQ0MzMxNDM1NDY1LDk4NzUuNjQzNTg3OTM3Nzk5CisxMyxTdW4gNiBGZWIgMTEsMTI1MzguNjQxNjMyMzg0OTU1LDg4OTQyLjA4MTY1OTY3MzQsNTM0NjguMDQwNDIxNDIzMzMsMTAyNjEyLjY1MjYwNTU2NDYxLDY3NzQzMi45NjA5NjkwNzY0LDg2MDI1LjIyODUyNDg4MzAyLDY4MTExLjMzNjk4MjgyNTg0LDExNDQxLjE4MDQ4MDEwOTE3MSwxNTY3Mi43NzA0MzMwMjQ4NTgsMzE5NjQ3LjYwNDE0ODE2NzYsMTYzNzI5LjA3NzcyNjIzNDcsMjQyMzAuNzQxNzAxMjAwNjY2LDU4NTI2LjUzODgzNDcyNjM0LDI1ODc5LjA2OTI5MTQ0MTQxNCwyNDgzODUuODk2MzE0NjIxMzUsMTIxNjA5Ljc4Mjk5Njg2NTU3LDUzNzY4LjQ2NTIyODgyNjQyNiw4MDgzNS40NTU2MDY3NDUwNSw4OTM3OS41NjkwMDczNTIsMTI2OTgxLjk3MTQ3OTE4Njk2LDEwNTkyOS43NDk2NTI4NTgzLDI1NDk4LjQ3NTI3NDUyOTA1MywxOTg3NjguOTM2NDIxMjU1NjcsOTgzODkuNTk1Mzk5NTEzNTIsMTExOTA0LjI0Njg5MTkxMTY0LDU2ODkzLjIzMDk3Mjk3MDk2LDE4MDQzLjkwNjQ1MDAyNzI1OCwxNjA5ODYuMjk0Njk1OTg5NDMsMTI4NDQuMDA2ODU3NDgzMDg4LDM0MjI1LjI3Mzk5MTA5MzkzLDI0NzE1LjcyODQ5NjEwMTE1NywxNjgyODcuMDQyNDI0MDQ0MzQsMzYzODAuOTMxNDY0ODY1OCwzOTk2NS4xNDIwMDQ5MDQ1LDM3OTUyOS4yMzU4OTQ0Mzg4LDIyNzA2Mi44NzYwNTc5MjA2Myw2OTAxMy4xMTc4ODkyOTg4NSw2ODQyNy45OTY5NjQwNTU4LDI0NTYyMS4xNTgzNjg2NDQyOCwyMDk2Ni4zODQ2MjI3MTAxOSw4MDI0MC4yOTYzODM2MTg4NCwxNTA5Ni44ODk4MDQxNTg4NDUsMTEzNzg1LjY5MTA3MTY0OTYsNDE3MDM2LjQ4MTQ3MDY5NDgsNDQ2NjMuMzg1MzE1Mzg2MjUsMTQxNTcwLjM1NTE5NDcyODE1LDEyMTc2LjU0NTk2Mzk5NzUyMiwxMTc4ODIuNDQzOTE5NzAzNzcsMTA3MjczLjU1ODcyNjE1NTE3LDM2MTY2Ljk4MDgwNTk0MTY3LDk4NzUuNjQ1NjIxOTQ2NjY5CisxNCxNb24gNyBGZWIgMTEsMTI1MzguNjQwNDE3MzAyMTUsODg5NDIuMDIwODQ0Nzk4MDMsNTM0NjguMDEwMzE3NzM3NzIsMTAyNjEyLjY0MzIyMzQ2MzQ4LDY3NzQzMi45NjAyOTIyODIsODYwMjUuMjIyMTgzNDU2NDcsNjgxMTEuMzA5NDM5NDE2MDEsMTE0NDEuMTgwMTI2NjMxMzI1LDE1NjcyLjE5NjY4MTQyODYzMywzMTk2NDcuNTcxMjgyOTk5OCwxNjM3MjkuMDY0NTM2NzEwODIsMjQyMzAuNzQwNDM3OTc4OTMsNTg1MjYuNDk1MDE4NjcyMTIsMjU4NzkuMDYyMzcxNDUxODIyLDI0ODM4NS44NjkyNzg5MTQ4NSwxMjE2MDkuNzIxMTg0ODU1NDYsNTM3NjguMzg2ODY0NTEyNDYsODA4MzUuMzk5Mjk5NzcyOSw4OTM3OS41MzI1MDg1NTA3MiwxMjY5ODEuOTQ4MDM1NDM5NzUsMTA1OTI5LjcyNzU2ODcyNDA4LDI1NDk4LjQ2Mzg5ODcwNjM1NSwxOTg3NjguODk0NDAxMTIxNDUsOTgzODkuNTgzOTMzOTE0MzYsMTExOTA0LjIyNjg2NDY0NTc4LDU2ODkzLjE3ODExNzkwNjg2LDE4MDQzLjkwMTY0NjIzOTAzNSwxNjA5ODYuMjY4ODU3NzI1NywxMjg0NC4wMDE3NTAyODQxNDYsMzQyMjUuMjYzNTcwOTM4NTEsMjQ3MTUuNzIyMTY4NDY1OTYzLDE2ODI4Ny4wMTA4MjkxMTk0OCwzNjM4MC45MjI5MjYyMjkwNTQsMzk5NjUuMTQwNTIyMjQ3NTIsMzc5NTI5LjE2NDQ3Nzg4MTc0LDIyNzA2Mi44MTk0MTIzODI0Nyw2OTAxMy4wODk2NzA4MDA1OSw2ODQyNy45ODQzMzAyNzg1LDI0NTYyMS4xMDAwMDIzMjUzMSwyMDk2Ni4zODExODAxMjYxMDcsODAyNDAuMjU0MzkxOTM5NjcsMTUwOTYuODgyNTAyNDc1NTAyLDExMzc4NS42Njc5MzA5NTI4Niw0MTcwMzYuNDIwODAxOTA5Myw0NDY2My4zODEzNTk0OTA4LDE0MTU3MC4zMjg5ODM4NTgxLDEyMTc2LjU0MTUyMjIxMzU2MiwxMTc4ODIuNDI2MTA3MDY3MTYsMTA3MjczLjUxNDk4OTE1NzA4LDM2MTY2LjkwNTczNjMzNzEsOTg3NS42NDE0MzQ5NDUyODQKKzE1LFR1ZSA4IEZlYiAxMSwxMjUzOC42NDA4NzAzMjgzOTIsODg5NDIuMDQzNDY0MDYzMjIsNTM0NjguMDIxNTEzNjg2ODY1LDEwMjYxMi42NDY3MjMxOTI3LDY3NzQzMi45NjA2MjM3NTM1LDg2MDI1LjIyNDU1NTE1ODI2LDY4MTExLjMxOTY4MjExMzQ1LDExNDQxLjE4MDI2NTMzODE3MSwxNTY3Mi40MTAwMjI2ODE4MSwzMTk2NDcuNTgzNTMwOTQyOTcsMTYzNzI5LjA2OTQ2MzQ1MDMsMjQyMzAuNzQwOTE0NDMzMzMyLDU4NTI2LjUxMTMxNTkxOTMxLDI1ODc5LjA2NDk0NDY5MjY5NSwyNDgzODUuODc5MzUwNzIyNzQsMTIxNjA5Ljc0NDE3Mjc3MTAxLDUzNzY4LjQxNjAxNjczMDk4LDgwODM1LjQyMDI0MjUwNzk2LDg5Mzc5LjU0NjA4MTU2NzcsMTI2OTgxLjk1Njc1NDk2MjY3LDEwNTkyOS43MzU3ODE2MjYzOCwyNTQ5OC40NjgxMjkyMDY2MjMsMTk4NzY4LjkxMDAyNzkwMjQsOTgzODkuNTg4MjAzNzAyNTcsMTExOTA0LjIzNDMxMzc1NDQ4LDU2ODkzLjE5Nzc3ODQxOTU1LDE4MDQzLjkwMzQzMjU1ODI4NywxNjA5ODYuMjc4NDY5OTE0MTMsMTI4NDQuMDAzNjQ5NTEzNjc3LDM0MjI1LjI2NzQ0NTcyNzUzLDI0NzE1LjcyNDUyMTQ1MTk0MywxNjgyODcuMDIyNTgwMTE1OSwzNjM4MC45MjYxMDE0NzMyNywzOTk2NS4xNDEwOTIyODcwNSwzNzk1MjkuMTkxMDM5NTM5NjQsMjI3MDYyLjg0MDQ3NjYzNDc0LDY5MDEzLjEwMDE2NDU3ODAzLDY4NDI3Ljk4OTAyOTIwNzY2LDI0NTYyMS4xMjE3MDY3ODIzNywyMDk2Ni4zODI0NjA3NjAzNyw4MDI0MC4yNzAwMDg4MTMwMiwxNTA5Ni44ODUyMTc5MzE2ODcsMTEzNzg1LjY3NjUzNjk0MzU1LDQxNzAzNi40NDMzNzY1NDQ3LDQ0NjYzLjM4MjgzNTU3Njk2NiwxNDE1NzAuMzM4NzMyNTM1MjUsMTIxNzYuNTQzMTczOTU4NjY2LDExNzg4Mi40MzI3MzQ0NjE4NCwxMDcyNzMuNTMxMjUzODc2NSwzNjE2Ni45MzM2NjQ0MTQ1Nyw5ODc1LjY0Mjk5MjAwNTc1CisxNixXZWQgOSBGZWIgMTEsMTI1MzguNjQxMjg2NjMwMTEzLDg4OTQyLjA2NDE4NTEyNDIzLDUzNDY4LjAzMTc2OTIzNTIwNCwxMDI2MTIuNjQ5OTQxMjY1MzYsNjc3NDMyLjk2MTAyMDg5NzUsODYwMjUuMjI2NzQzMjU3MSw2ODExMS4zMjkwNjMyNDU4OCwxMTQ0MS4xODA0MDA4NDI2MTMsMTU2NzIuNjA1NTM3OTI0MzEzLDMxOTY0Ny41OTQ3Nzk3MTIwMywxNjM3MjkuMDc0MDAxNjAzNjQsMjQyMzAuNzQxMzU4NjY4OTQ0LDU4NTI2LjUyNjI0NjA1Nzk0LDI1ODc5LjA2NzMwMTM0MzUsMjQ4Mzg1Ljg4ODU5NjU4ODMsMTIxNjA5Ljc2NTIyODkxNzI3LDUzNzY4LjQ0MjcyOTQ5MjY0LDgwODM1LjQzOTQyNzg4MDE4LDg5Mzc5LjU1ODUxMjkzMTc5LDEyNjk4MS45NjQ3NDI3NTI2OCwxMDU5MjkuNzQzMzA0MTk1MTYsMjU0OTguNDcyMDAzOTk3MzUsMTk4NzY4LjkyNDM0MDk5NzUsOTgzODkuNTkyMTIxNDkyNzcsMTExOTA0LjI0MTEzODA4NzQ4LDU2ODkzLjIxNTc5MTE4NDg5LDE4MDQzLjkwNTA2ODUyNDAxLDE2MDk4Ni4yODcyNzc5MDg2OCwxMjg0NC4wMDUzODg5Nzk1NzMsMzQyMjUuMjcwOTk0MzU3NDc0LDI0NzE1LjcyNjY3NjQwNjU4NiwxNjgyODcuMDMzMzQ0NzEyNzIsMzYzODAuOTI5MDA5NTc5MDEsMzk5NjUuMTQxNjM2MjE5NDcsMzc5NTI5LjIxNTM3MTQ4NDc1LDIyNzA2Mi44NTk3NjgyMzA1Myw2OTAxMy4xMDk3NzU3MDc3NCw2ODQyNy45OTMzMzM4MDc0NSwyNDU2MjEuMTQxNTg1MDg4ODMsMjA5NjYuMzgzNjM0MTg3NTY1LDgwMjQwLjI4NDMxMzUxMDAzLDE1MDk2Ljg4NzcwNTE0NjE0NCwxMTM3ODUuNjg0NDE5NzUyODMsNDE3MDM2LjQ2NDA2ODQzNDI2LDQ0NjYzLjM4NDE5MzM5NjQ3LDE0MTU3MC4zNDc2NjMwNzU5LDEyMTc2LjU0NDY4NjcxODc1LDExNzg4Mi40Mzg4MDgzODkxLDEwNzI3My41NDYxNTA1MzA1OSwzNjE2Ni45NTkyNTc1NTk4Niw5ODc1LjY0NDQxODExNzkyMworMTcsVGh1IDEwIEZlYiAxMSwxMjUzOC42NDEzMjcxNTIyNjksODg5NDIuMDY2MTg1NjYxMjMsNTM0NjguMDMyNzU5MTg0MTMsMTAyNjEyLjY1MDI1NTAxODg3LDY3NzQzMi45NjEwODI2MTgsODYwMjUuMjI2OTU4NDAyNTUsNjgxMTEuMzI5OTY4NTEzNTMsMTE0NDEuMTgwNDE2MDI4MzY1LDE1NjcyLjYyNDI5NjYxNTk0OCwzMTk2NDcuNTk1ODczMDc3NSwxNjM3MjkuMDc0NDQ2MDM0MzMsMjQyMzAuNzQxNDAzNTA1MDQsNTg1MjYuNTI3Njg3NjIyNTI1LDI1ODc5LjA2NzUyODcyOTgxNSwyNDgzODUuODg5NDk0MjAwMzgsMTIxNjA5Ljc2NzI2MTIyNTcsNTM3NjguNDQ1MzA5ODM5ODcsODA4MzUuNDQxMjgwMTg0MTcsODkzNzkuNTU5NzEyNTUyMTMsMTI2OTgxLjk2NTUxNDAzODk3LDEwNTkyOS43NDQwMzAyNzU2NywyNTQ5OC40NzIzNzc5NDA5NDMsMTk4NzY4LjkyNTcyMjQ1NTM3LDk4Mzg5LjU5MjUwMTM3ODIxLDExMTkwNC4yNDE3OTcxMjA3Niw1Njg5My4yMTc1MzA2OTY3MiwxODA0My45MDUyMjYzNzM4NjcsMTYwOTg2LjI4ODEyOTAxMzIsMTI4NDQuMDA1NTU2ODMzNjM2LDM0MjI1LjI3MTMzNjc0NjYwNiwyNDcxNS43MjY4ODQzMzc0OCwxNjgyODcuMDM0Mzg0MDU0MzYsMzYzODAuOTI5MjkwMjA2OTIsMzk5NjUuMTQxNjk0MTYxNjksMzc5NTI5LjIxNzcyMDc1ODc1LDIyNzA2Mi44NjE2Mjk3MTEsNjkwMTMuMTEwNzAzMTc3OTgsNjg0MjcuOTkzNzQ5NDUxODUsMjQ1NjIxLjE0MzUwMzI4NDQ2LDIwOTY2LjM4Mzc0NzU1ODAzLDgwMjQwLjI4NTY5NDIxNzU5LDE1MDk2Ljg4Nzk0NTE5NzEwNCwxMTM3ODUuNjg1MTgwNjUzNjYsNDE3MDM2LjQ2NjA2OTM2LDQ0NjYzLjM4NDMyNTkxMTkxLDE0MTU3MC4zNDg1MjUzODI5LDEyMTc2LjU0NDgzMjY4NzQ4NSwxMTc4ODIuNDM5Mzk1NTU4MjgsMTA3MjczLjU0NzU4ODA0ODU2LDM2MTY2Ljk2MTcyOTk2NzczNCw5ODc1LjY0NDU1NTc0MTMwMworMTgsRnJpIDExIEZlYiAxMSwxMjUzOC42NDQ3MjMwMjQzODcsODg5NDIuMjM1Mzg4Mjc3NDMsNTM0NjguMTE2NTA1NjQ3NDgsMTAyNjEyLjY3NjQ5OTk3MDUyLDY3NzQzMi45NjQwNjc1NTc0LDg2MDI1LjI0NDc4MzQyNzk2LDY4MTExLjQwNjU3ODA1NTQ1LDExNDQxLjE4MTQ5OTE1OTIyMiwxNTY3NC4yMjAxNzIwOTkyNzgsMzE5NjQ3LjY4NzY0OTI1OTYzLDE2MzcyOS4xMTE0MzUxMzE5LDI0MjMwLjc0NTAwOTYwMTM2Nyw1ODUyNi42NDk2MDE1MjY2MywyNTg3OS4wODY3NzQzNzU3MiwyNDgzODUuOTY0OTQwOTQxNiwxMjE2MDkuOTM5MjA3NTk2MTcsNTM3NjguNjYzNDE4Mzg5ODM1LDgwODM1LjU5Nzk0MjM1MjQ1LDg5Mzc5LjY2MTIzMTIwODk5LDEyNjk4Mi4wMzA3NDA1OTE2OCwxMDU5MjkuODA1NDYwOTc2MTksMjU0OTguNTA0MDIwNDA5NTUsMTk4NzY5LjA0MjYwNjM1MTMyLDk4Mzg5LjYyNDQ3NTg0NDEyLDExMTkwNC4yOTc1MjIxOTY2LDU2ODkzLjM2NDYxMTgyOTI2LDE4MDQzLjkxODU4NjUyNDcsMTYwOTg2LjM2MDA0NjQ3MDc3LDEyODQ0LjAxOTc2MTkzNjI4NiwzNDIyNS4zMDAzMTY3NTEwNywyNDcxNS43NDQ0ODI3NzY0MiwxNjgyODcuMTIyMjg2MTQwNDUsMzYzODAuOTUzMDM5MDAwOTksMzk5NjUuMTQ2MDc1Njk1OTg2LDM3OTUyOS40MTY0MTE5OTg3NCwyMjcwNjMuMDE5MTc0MTYxNCw2OTAxMy4xODkxOTA4NTA0Myw2ODQyOC4wMjg4OTk4Nzc0LDI0NTYyMS4zMDU4MzgwNzY0NiwyMDk2Ni4zOTMzMjg3OTA1MSw4MDI0MC40MDI1MDcxNTQ0NywxNTA5Ni45MDgyNTYxNTc4OTYsMTEzNzg1Ljc0OTU1MjYxOTkzLDQxNzAzNi42MzUwMDI3NjgzLDQ0NjYzLjM5NTM5ODE0MTYwNSwxNDE1NzAuNDIxNDUwMzMzMTIsMTIxNzYuNTU3MTg2NTQ0MjIsMTE3ODgyLjQ4ODk4NjUzMzQ0LDEwNzI3My42NjkyMzkxMDk5NCwzNjE2Ny4xNzA2OTAxMzA0NSw5ODc1LjY1NjIwMTc5MzA1NgorMTksU2F0IDEyIEZlYiAxMSwxMjUzOC42NDA4NjQwMTUzMjIsODg5NDIuMDQzMDAyOTMxODgsNTM0NjguMDIxMjgzNjA2Mjg2LDEwMjYxMi42NDY2NzkwMjIxMiw2Nzc0MzIuOTYwODI2NzI2LDg2MDI1LjIyNDU0MTUzMzUyLDY4MTExLjMxOTQ2ODkyOTM3LDExNDQxLjE4MDI4MTM2Nzk4NiwxNTY3Mi40MDU2NDExOTg3OCwzMTk2NDcuNTgzMzQ2MTI0NTYsMTYzNzI5LjA2OTQxOTAyOSwyNDIzMC43NDA5MjIxNDUwMzMsNTg1MjYuNTEwOTg0ODc3NzQsMjU4NzkuMDY0ODkwODM5NzA1LDI0ODM4NS44NzkxODkwOTE1MywxMjE2MDkuNzQzNjk4Mzc5NjcsNTM3NjguNDE1NDM3NDEzNDE2LDgwODM1LjQxOTgxNTg3NTk1LDg5Mzc5LjU0NTc5OTE1OTk0LDEyNjk4MS45NTY1Nzc0NzM1OCwxMDU5MjkuNzM1NjExOTIxMSwyNTQ5OC40NjgwNDE0NTk0NCwxOTg3NjguOTA5NzA0NTkyLDk4Mzg5LjU4ODEzMTAxOTQsMTExOTA0LjIzNDE2MjkwNzUxLDU2ODkzLjE5NzM4MjI5MzM1LDE4MDQzLjkwMzM5NTE3Njk4LDE2MDk4Ni4yNzgyNzk3OTAzNiwxMjg0NC4wMDM2MDk5NjI5NTYsMzQyMjUuMjY3MzY0NTg1NDEsMjQ3MTUuNzI0NDcyMjU1NDIsMTY4Mjg3LjAyMjM0MDMxMTksMzYzODAuOTI2MDM1MzA1ODA1LDM5OTY1LjE0MTEyOTMxMDIzLDM3OTUyOS4xOTA0OTczMTM3NCwyMjcwNjIuODQwMDM2NTY0Miw2OTAxMy4wOTk5NDYyNDg1LDY4NDI3Ljk4ODkzMzU1ODc1LDI0NTYyMS4xMjEyNTQyMTk2NCwyMDk2Ni4zODI0MzUyODUyOCw4MDI0MC4yNjk2ODY5MTU3MiwxNTA5Ni44ODUxNjE3ODMwNCwxMTM3ODUuNjc2MzU5NTU0ODEsNDE3MDM2LjQ0Mjk0MzQxNDczLDQ0NjYzLjM4MjgxODEzMjE2LDE0MTU3MC4zMzg1MzQwMTAzNCwxMjE3Ni41NDMxMzk0NzUzNjUsMTE3ODgyLjQzMjYwNTY0NDA5LDEwNzI3My41MzA5MTU0NDY0OCwzNjE2Ni45MzMxMTM2MjY2OCw5ODc1LjY0Mjk1OTY1MDMKKzIwLFN1biAxMyBGZWIgMTEsMTI1MzguNjQzMzIwMjk0OTg1LDg4OTQyLjE2NTI0MDU2NTI0LDUzNDY4LjA4MTc4MzAyNDE2LDEwMjYxMi42NjU2NjcwMDk5Niw2Nzc0MzIuOTYzMTk2MDc2Myw4NjAyNS4yMzc0NTQyOTA4OCw2ODExMS4zNzQ4MDk4NzA0OCwxMTQ0MS4xODEwODI4OTg2NTMsMTU2NzMuNTU4NDQzODI2MjAxLDMxOTY0Ny42NDk3MTQ3MjA3LDE2MzcyOS4wOTYxOTgyOTYwMywyNDIzMC43NDM1NDQ5OTY0NDcsNTg1MjYuNTk5MDYwNzY1MTgsMjU4NzkuMDc4NzkzMTY1MzA3LDI0ODM4NS45MzM3MzkxNDI3NSwxMjE2MDkuODY3OTEyNDU4NjMsNTM3NjguNTczMDIxMjI2NzgsODA4MzUuNTMyOTk0MTkwMjcsODkzNzkuNjE5MTMzOTUyNjQsMTI2OTgyLjAwMzY5OTgxOTUzLDEwNTkyOS43Nzk5ODkzOTA5MywyNTQ5OC40OTA4OTk1Mzk5OCwxOTg3NjguOTk0MTQwOTY2ODIsOTgzODkuNjExMjQ1MjAwMTEsMTExOTA0LjI3NDQyMTc5NjE2LDU2ODkzLjMwMzY0MzI5OTc3LDE4MDQzLjkxMzA0NjA0NjgsMTYwOTg2LjMzMDI0MTU4NDU3LDEyODQ0LjAxMzg3MTM3NTUwMiwzNDIyNS4yODgyOTg1ODA1LDI0NzE1LjczNzE4NDc1MDg2MiwxNjgyODcuMDg1ODQzNzczNywzNjM4MC45NDMxOTA4MzMyNSwzOTk2NS4xNDQzNDM5MDE0MDQsMzc5NTI5LjMzNDAzODQ1MTg0LDIyNzA2Mi45NTM4NDE1MTUzOCw2OTAxMy4xNTY2NDM5ODY5Miw2ODQyOC4wMTQzMjc2NzI3NiwyNDU2MjEuMjM4NTIwNDc5ODIsMjA5NjYuMzg5MzU3NzY4NjI1LDgwMjQwLjM1NDA3Mjk3NTMzLDE1MDk2Ljg5OTgzNDMxMjc5MywxMTM3ODUuNzIyODYyMjQ0MTIsNDE3MDM2LjU2NTAxNDgyNzYsNDQ2NjMuMzkwODI5OTkxNiwxNDE1NzAuMzkxMjE3OTA4NjgsMTIxNzYuNTUyMDYzNTA4ODE4LDExNzg4Mi40Njg0Mzg0MjY4MywxMDcyNzMuNjE4NzkzNDE3ODUsMzYxNjcuMDg0MDkxNzgxMjUsOTg3NS42NTEzNzI1Mzc0MDgKKzIxLE1vbiAxNCBGZWIgMTEsMTI1MzguNjQxNzQwODg4MzY0LDg4OTQyLjA4NjYxODY3MDEyLDUzNDY4LjA0Mjg3MDI1MjczNSwxMDI2MTIuNjUzNDU4MjY2MjMsNjc3NDMyLjk2MTcwMzEwNDcsODYwMjUuMjI5MTU0MTQ3LDY4MTExLjMzOTIxNDY2NTg0LDExNDQxLjE4MDU3MDEyNDY3MiwxNTY3Mi44MTY2Njk0Mjc0NTcsMzE5NjQ3LjYwNzAzNzEyMDAzLDE2MzcyOS4wNzg5ODI1OTAxLDI0MjMwLjc0MTg2MDU4ODA1LDU4NTI2LjU0MjQxMTQ2MjI1LDI1ODc5LjA2OTg1MTE4NTM4OCwyNDgzODUuODk4NjU5OTAzMywxMjE2MDkuNzg4MDE4NjU2Nyw1Mzc2OC40NzE2NjYzNzAyNCw4MDgzNS40NjAxOTkxODU1Myw4OTM3OS41NzE5NjUxNDI0OSwxMjY5ODEuOTczMzkxNDkzODMsMTA1OTI5Ljc1MTQ0NjEzODU3LDI1NDk4LjQ3NjE5NzI5NjA5NSwxOTg3NjguOTM5ODMyMDY2OTQsOTgzODkuNTk2MzgwNjU5LDExMTkwNC4yNDg1MjgwNTI4OSw1Njg5My4yMzUyOTc4OTA3OTUsMTgwNDMuOTA2ODM4NjA1MDI0LDE2MDk4Ni4yOTY4MjE0Mzg3NywxMjg0NC4wMDcyNzEyNDg3OSwzNDIyNS4yNzQ4MzM4MTM3NywyNDcxNS43MjkwMDgwNzg0MjYsMTY4Mjg3LjA0NDk5OTI4ODkyLDM2MzgwLjkzMjE1NjQ0MDc5LDM5OTY1LjE0MjI4MzQ2NTI0LDM3OTUyOS4yNDE3MTQ4OTI4LDIyNzA2Mi44ODA2NDIyNzEsNjkwMTMuMTIwMTc2MTAyLDY4NDI3Ljk5Nzk5NDU5MjIxLDI0NTYyMS4xNjMwOTUwNjk1MywyMDk2Ni4zODQ5MDU0Mjk0Myw4MDI0MC4yOTk3OTYzNzkzNSwxNTA5Ni44OTAzOTcwMTAxMDcsMTEzNzg1LjY5Mjk1MjEzNDE0LDQxNzAzNi40ODY1MDQ0NDQ0LDQ0NjYzLjM4NTY3ODc2NTA0NCwxNDE1NzAuMzU3MzMyNDcwMDcsMTIxNzYuNTQ2MzIzNTcyMzAyLDExNzg4Mi40NDUzOTIyNzkzMiwxMDcyNzMuNTYyMjcwNDU4NjcsMzYxNjYuOTg2OTg1NDk2MTUsOTg3NS42NDU5NjEzODgyMjcKKzIyLFR1ZSAxNSBGZWIgMTEsMTI1MzguNjQyNjQxODU1MDA5LDg4OTQyLjEzMTQ0NzY4MjUyLDUzNDY4LjA2NTA1NzYwNjA2LDEwMjYxMi42NjA0MjMzMDYzNyw2Nzc0MzIuOTYyNTgyMTA4LDg2MDI1LjIzMzg5MTQ5NDc1LDY4MTExLjM1OTUxMDE5ODUxLDExNDQxLjE4MDg2NDk3Nzc4NSwxNTY3My4yMzg5MzIyNjM2MDgsMzE5NjQ3LjYzMTM4MDUyNzgsMTYzNzI5LjA4ODgwNjQyMzYyLDI0MjMwLjc0MjgyMzMzODQyMyw1ODUyNi41NzQ3MTIwOTk0MzUsMjU4NzkuMDc0OTQ5NjgzNDU0LDI0ODM4NS45MTg2Njc5MDc4NiwxMjE2MDkuODMzNTcyNTAxNTgsNTM3NjguNTI5NDU3MzI3Mzg2LDgwODM1LjUwMTcwNTgxMTYsODkzNzkuNTk4ODU5Njc0NTksMTI2OTgxLjk5MDY3MzI5NzE5LDEwNTkyOS43Njc3MjExNDEwMywyNTQ5OC40ODQ1ODAxODY2ODcsMTk4NzY4Ljk3MDc5ODI1NzQyLDk4Mzg5LjYwNDg1ODMzNDMyLDExMTkwNC4yNjMyOTI3Njk5NSw1Njg5My4yNzQyNjc1OTA0MSwxODA0My45MTAzNzc5MzY5NCwxNjA5ODYuMzE1ODc4MzYwMDQsMTI4NDQuMDExMDM0NDgxMjIyLDM0MjI1LjI4MjUxMTA3MzAyLDI0NzE1LjczMzY3MDIyNTgyNSwxNjgyODcuMDY4Mjg4NzI0MDMsMzYzODAuOTM4NDQ4MDI5NjY1LDM5OTY1LjE0MzQ2NDcxNzk5LDM3OTUyOS4yOTQzNTc1NTc3LDIyNzA2Mi45MjIzNzg4Mjc5LDY5MDEzLjE0MDk2OTIyMjA1LDY4NDI4LjAwNzMwNzcxMjU2LDI0NTYyMS4yMDYxMDEwNzk5NCwyMDk2Ni4zODc0NDQyMzQwNDIsODAyNDAuMzMwNzQzODM1NDUsMTUwOTYuODk1Nzc3OTYyNTI1LDExMzc4NS43MTAwMDY1NjQxMSw0MTcwMzYuNTMxMjc0NjQ3NCw0NDY2My4zODg2MTc2NzU4NCwxNDE1NzAuMzc2NjUzOTMwMywxMjE3Ni41NDk1OTYzMzg4NzgsMTE3ODgyLjQ1ODUzNDAyMDM5LDEwNzI3My41OTQ0OTg1MDI0NCwzNjE2Ny4wNDIzNTI5OTcxMSw5ODc1LjY0OTA0NjY5OTc5NworMjMsV2VkIDE2IEZlYiAxMSwxMjUzOC42NDA1ODUxMTc2NTUsODg5NDIuMDI5MDY4MzIzMzUsNTM0NjguMDE0Mzg2MjcxMDksMTAyNjEyLjY0NDUyNDc0OTUzLDY3NzQzMi45NjA2MzQ5ODU5LDg2MDI1LjIyMzA4MjU4NDMsNjgxMTEuMzEzMTU4NzUxNSwxMTQ0MS4xODAxOTY5NjcwNTgsMTU2NzIuMjc0MDEyNjk1MDY3LDMxOTY0Ny41NzU4MDUwNDYxLDE2MzcyOS4wNjYzODc0MDUxNSwyNDIzMC43NDA2Mjk2NTY0NzMsNTg1MjYuNTAwOTQ0OTkwNywyNTg3OS4wNjMzMDU1NTM5MTUsMjQ4Mzg1Ljg3Mjk4NzI4MzM2LDEyMTYwOS43Mjk1MzY0NTU3LDUzNzY4LjM5NzQ3ODQzNDg3Niw4MDgzNS40MDY5MTQxMDU1OCw4OTM3OS41Mzc0MzcyODgzLDEyNjk4MS45NTEyMDYwMjkzOCwxMDU5MjkuNzMwNTUyMzk4NCwyNTQ5OC40NjU0MzUyMDI4NTIsMTk4NzY4LjkwMDA3Nzc1MzIzLDk4Mzg5LjU4NTUwMTYwNiwxMTE5MDQuMjI5NTc0MTIwNzUsNTY4OTMuMTg1MjcwNTYyMzQ2LDE4MDQzLjkwMjI5NDY4Njk2MywxNjA5ODYuMjcyMzU4Nzk3MDIsMTI4NDQuMDAyNDM5OTExNDE1LDM0MjI1LjI2NDk3NzQ0ODY5LDI0NzE1LjcyMzAyMjY2NTY3LDE2ODI4Ny4wMTUxMDEzNjQ1MiwzNjM4MC45MjQwNzkxNzA0NSwzOTk2NS4xNDA3ODA5MTQ4LDM3OTUyOS4xNzQxMzQ1NjU2MywyMjcwNjIuODI3MDU5NjY4MzQsNjkwMTMuMDkzNDgxMzkxMzIsNjg0MjcuOTg2MDM4OTAwOTMsMjQ1NjIxLjEwNzg4Mjk4OTY2LDIwOTY2LjM4MTY0NjQyMDcxNiw4MDI0MC4yNjAwNjYwMDY1NCwxNTA5Ni44ODM0ODg4OTYyNSwxMTM3ODUuNjcxMDU3OTAxOSw0MTcwMzYuNDI5MDM4NTQ5MzcsNDQ2NjMuMzgxOTA5NTkxNTMsMTQxNTcwLjMzMjUyODU3NTYsMTIxNzYuNTQyMTIxODg3OTI3LDExNzg4Mi40Mjg1MjMzOTA5MywxMDcyNzMuNTIwODk1MzA4NDEsMzYxNjYuOTE1OTA4NTYyODIsOTg3NS42NDIwMDA0MDAwODEKKzI0LFRodSAxNyBGZWIgMTEsMTI1MzguNjQyNjgzOTg4NTgzLDg4OTQyLjEzMzM1ODIyOTE2LDUzNDY4LjA2NjAwMDkzNTA1NCwxMDI2MTIuNjYwNzU0ODI4NDgsNjc3NDMyLjk2Mjg4NDkzNjIsODYwMjUuMjM0MTM3NTA0OTYsNjgxMTEuMzYwMzY5NzgzOTMsMTE0NDEuMTgwOTAxMTQ2MTY4LDE1NjczLjI1Njc0ODg4MTA0LDMxOTY0Ny42MzI1MDEwOTQyNSwxNjM3MjkuMDg5Mjk2Mzc4NCwyNDIzMC43NDI4ODYzODQwNTQsNTg1MjYuNTc2MDkwMTkyNTEsMjU4NzkuMDc1MTY1Mjg3ODM1LDI0ODM4NS45MTk1NzY3MTMsMTIxNjA5LjgzNTUwNjg1MDk0LDUzNzY4LjUzMTkzODY3NjMxNSw4MDgzNS41MDM0NzUxNTk1MSw4OTM3OS41OTk5OTg4NjA3NywxMjY5ODEuOTkxNDEwNTkwNSwxMDU5MjkuNzY4NDEyMjI1NTMsMjU0OTguNDg0OTM1NjAyMjAyLDE5ODc2OC45NzIxMTI2NDM0Miw5ODM4OS42MDUyMzgxMzgyOCwxMTE5MDQuMjYzOTIzNjc3NTksNTY4OTMuMjc1OTM0MTk5MzYsMTgwNDMuOTEwNTI3NjExMzYsMTYwOTg2LjMxNjY5ODQ2ODE3LDEyODQ0LjAxMTE5Mzg0MDc2LDM0MjI1LjI4MjgzNTY0MzM0LDI0NzE1LjczMzg2NzQ0MTY1NywxNjgyODcuMDY5MjgxNTQxMDQsMzYzODAuOTM4NzE0NDY1NjM2LDM5OTY1LjE0MzU3NjE4NzM2NSwzNzk1MjkuMjk2NjAxNDU0NTUsMjI3MDYyLjkyNDE0NDgwNDk0LDY5MDEzLjE0MTg0OTk3OTQ1LDY4NDI4LjAwNzcwNTAzNzEyLDI0NTYyMS4yMDc5MjE5NDA0OCwyMDk2Ni4zODc1NTMzMDU4MTYsODAyNDAuMzMyMDU4NDIzNTUsMTUwOTYuODk2MDA2MzE2NzQxLDExMzc4NS43MTA3MzEzMTI5NSw0MTcwMzYuNTMzMjE4Mzg1Nyw0NDY2My4zODg3NTkwNTQ1NiwxNDE1NzAuMzc3NDc4MTI4NjgsMTIxNzYuNTQ5NzM0ODI0MzE5LDExNzg4Mi40NTkxMDI0NjUyMywxMDcyNzMuNTk1ODYzNTgyMSwzNjE2Ny4wNDQ3MzUyNTQsOTg3NS42NDkxNzc0MzY5NworMjUsRnJpIDE4IEZlYiAxMSwxMjUzOC42NDA5MTM3MTUxNzEsODg5NDIuMDQ1MzgzNzkxMDgsNTM0NjguMDIyNDYwOTM0MzEsMTAyNjEyLjY0NzA2NjA4NCw2Nzc0MzIuOTYxMDAzNzU4NCw4NjAyNS4yMjQ4MTQ4Nzc2Niw2ODExMS4zMjA1NDQzMzU2NiwxMTQ0MS4xODAzMDg2MTY2OTUsMTU2NzIuNDI3NTYyMjkyNDYsMzE5NjQ3LjU4NDY4MDIwNDksMTYzNzI5LjA2OTk3NTk0MzYsMjQyMzAuNzQwOTg0MTAzMjA2LDU4NTI2LjUxMjcwMTAzMDM1LDI1ODc5LjA2NTE2MDg1MDk1LDI0ODM4NS44ODAyNzk1ODgwMiwxMjE2MDkuNzQ2MTE0NDc0NDQsNTM3NjguNDE4NTE0NDc1MTksODA4MzUuNDIyMDIwNDY0MDQsODkzNzkuNTQ3MjI0MjgwODYsMTI2OTgxLjk1NzQ5NTkyNjA0LDEwNTkyOS43MzY0NzUyNTYzLDI1NDk4LjQ2ODQ4NTgxOTA4LDE5ODc2OC45MTEzNDY5ODM0LDk4Mzg5LjU4ODU5MDQ4ODExLDExMTkwNC4yMzQ5NDgwODIwOCw1Njg5My4xOTk0NTQ1Mzk2OTYsMTgwNDMuOTAzNTgyNjE4MzcsMTYwOTg2LjI3OTI5NjA3NTI2LDEyODQ0LjAwMzgwOTM1NDQyLDM0MjI1LjI2Nzc3MTExNTc1LDI0NzE1LjcyNDcxOTE5MDgyLDE2ODI4Ny4wMjM1Nzc2NTg3NSwzNjM4MC45MjYzNjg2OTM3MiwzOTk2NS4xNDEyMjIwNzQyODYsMzc5NTI5LjE5MzI5NDA1NiwyMjcwNjIuODQyMjQ3NDE2ODgsNjkwMTMuMTAxMDQ4MDY1NzYsNjg0MjcuOTg5NDI4NTEwMjYsMjQ1NjIxLjEyMzUzMjkwNjMsMjA5NjYuMzgyNTcwNTg1OTE2LDgwMjQwLjI3MTMyODUzMTEsMTUwOTYuODg1NDQ3MTE1NzAxLDExMzc4NS42NzcyNjQ1MTcxMSw0MTcwMzYuNDQ1MzM5MzY0NzYsNDQ2NjMuMzgyOTgyMTg2OCwxNDE1NzAuMzM5NTYwODA2NCwxMjE3Ni41NDMzMTI4MzE1NzgsMTE3ODgyLjQzMzMwNzkwNDIxLDEwNzI3My41MzI2MjMxNzY1MiwzNjE2Ni45MzYwNjMxNDc3NSw5ODc1LjY0MzEyMzE2MjMxNAorMjYsU2F0IDE5IEZlYiAxMSwxMjUzOC42NDM5Mjk1MjMzNDMsODg5NDIuMTk1MTgzNzM4ODgsNTM0NjguMDk2NTk4NzQxMzk1LDEwMjYxMi42NzAzODgxODA2Miw2Nzc0MzIuOTY0MzA2ODExOCw4NjAyNS4yNDA3MDU5Mzc1NSw2ODExMS4zODgzNTYxNzI2LDExNDQxLjE4MTMyNjM5NzM2MiwxNTY3My44MzgzMzI2ODUwMTQsMzE5NjQ3LjY2NjE0MDM1NzEsMTYzNzI5LjEwMjkwMTM4Njk3LDI0MjMwLjc0NDIzMTU1MzY2NSw1ODUyNi42MjA2MzgzOTYzOTQsMjU4NzkuMDgyMTk1NTk1NTksMjQ4Mzg1Ljk0NzIxNTQwNDU3LDEyMTYwOS44OTgzMjY3NTE4Niw1Mzc2OC42MTE2NTMxNTc4MSw4MDgzNS41NjA3MTg5MjE1NSw4OTM3OS42MzcwODQ5NzgxOCwxMjY5ODIuMDE1MjQ1NjI1MTUsMTA1OTI5Ljc5MDg1NjA5MDIxLDI1NDk4LjQ5NjQ5NTQxMDgyLDE5ODc2OS4wMTQ4MTU4MDg0NSw5ODM4OS42MTY5NDQ4Nzk0LDExMTkwNC4yODQyODc5NDYyNCw1Njg5My4zMjk2ODMwNDk2MiwxODA0My45MTU0MDc5OTE2NiwxNjA5ODYuMzQyOTg3MzYyOCwxMjg0NC4wMTYzODMxMDUyNzYsMzQyMjUuMjkzNDIxNzE5MjgsMjQ3MTUuNzQwMjk2MTE5NDY0LDE2ODI4Ny4xMDE0MDE2NzE2MiwzNjM4MC45NDczOTAyMzI3MywzOTk2NS4xNDUyNTM1MzYzMzUsMzc5NTI5LjM2OTIwNDU0NTU3LDIyNzA2Mi45ODE2OTYxMDA1Myw2OTAxMy4xNzA1MjI1ODU5LDY4NDI4LjAyMDU0OTY3NjkzLDI0NTYyMS4yNjcyMjQ2NTY3LDIwOTY2LjM5MTA1NTQyMzA2NCw4MDI0MC4zNzQ3MzYwOTYzOCwxNTA5Ni45MDM0MjY2ODM1OSwxMTM3ODUuNzM0MjUwNDkxMzQsNDE3MDM2LjU5NDk5MjA5NzgsNDQ2NjMuMzkyODI1MDQzMiwxNDE1NzAuNDA0MTI2MTY1MDYsMTIxNzYuNTU0MjQ3Njg5MDIsMTE3ODgyLjQ3NzIzMzcwMTUyLDEwNzI3My42NDAzMDQzMTA4LDM2MTY3LjEyMTEwOTQwMDUyLDk4NzUuNjUzNDMxOTU0MjgyCisyNyxTdW4gMjAgRmViIDExLDEyNTM4LjY0MTgwMDQyMTYzMiw4ODk0Mi4wODk0MDUyMzIyNSw1MzQ2OC4wNDQyNDc0NjYxMSwxMDI2MTIuNjUzOTIzOTI0NTMsNjc3NDMyLjk2MjAwNTk4NzEsODYwMjUuMjI5NDkwMDYxOCw2ODExMS4zNDA0NzE1NjAxNiwxMTQ0MS4xODA2MTA1MDA1NDcsMTU2NzIuODQxODA2NjAwNzI1LDMxOTY0Ny42MDg2Mjg5NTg0LDE2MzcyOS4wNzk2NjAyOTExNywyNDIzMC43NDE5NDEwNTA1NjQsNTg1MjYuNTQ0NDIwNTIyNDM0LDI1ODc5LjA3MDE2NjY2NjY0NiwyNDgzODUuODk5OTU2ODMxMTgsMTIxNjA5Ljc5MDg0NDE0OTg0LDUzNzY4LjQ3NTI3MzA0MDUyLDgwODM1LjQ2Mjc3OTU2NjA2LDg5Mzc5LjU3MzYzMDgwNjYzLDEyNjk4MS45NzQ0NjcwMTA4OCwxMDU5MjkuNzUyNDU1OTI1MDMsMjU0OTguNDc2NzE2NzY5OTU0LDE5ODc2OC45NDE3NTI4NzAxNiw5ODM4OS41OTY5MjUyNTI0MSwxMTE5MDQuMjQ5NDQ3ODYzOTYsNTY4OTMuMjM3NzI1MDQzMDYsMTgwNDMuOTA3MDU3NjEzMTU2LDE2MDk4Ni4yOTgwMTQwODgxOCwxMjg0NC4wMDc1MDQyODEzNTEsMzQyMjUuMjc1MzA4NzYzODEsMjQ3MTUuNzI5Mjk2NjIyODIsMTY4Mjg3LjA0NjQ0Nzk1MDI0LDM2MzgwLjkzMjU0NjExNTUsMzk5NjUuMTQyNDE0MDQxNTcsMzc5NTI5LjI0NDk4OTE4MDY1LDIyNzA2Mi44ODMyMjU4Mjk5LDY5MDEzLjEyMTQ2Mzg5NjgsNjg0MjcuOTk4NTc0MTg0ODgsMjQ1NjIxLjE2NTc1ODMzODk2LDIwOTY2LjM4NTA2NDE0MzIyMiw4MDI0MC4zMDE3MTYzMTUyOCwxNTA5Ni44OTA3MzA2NDYwOTEsMTEzNzg1LjY5NDAxMDgxNzMsNDE3MDM2LjQ4OTMyMjMzODcsNDQ2NjMuMzg1ODc2NjQ2NiwxNDE1NzAuMzU4NTM0ODE3MjMsMTIxNzYuNTQ2NTI2MTQyNjMsMTE3ODgyLjQ0NjIxNzQ1MjkzLDEwNzI3My41NjQyNjY0MjU5MiwzNjE2Ni45OTA0NDM0Mjg4NSw5ODc1LjY0NjE1MjUxNTk0OAorMjgsTW9uIDIxIEZlYiAxMSwxMjUzOC42NDMxNzA0MTk4MzMsODg5NDIuMTU3NDM4MjAyNjksNTM0NjguMDc3OTE3NzE4Mzk0LDEwMjYxMi42NjQ1MTkwMDYxOCw2Nzc0MzIuOTYzNTI4OTAxMyw4NjAyNS4yMzY3MTEwMjg3OSw2ODExMS4zNzEyNjg2Njg4LDExNDQxLjE4MTA3NDc1NDc5MywxNTY3My40ODE5MTA5NjQ0OTQsMzE5NjQ3LjY0NTYzMjUxNTk1LDE2MzcyOS4wOTQ2MjAwMjk4LDI0MjMwLjc0MzQxNzgxOTA0NSw1ODUyNi41OTM0NDEyNzY0MSwyNTg3OS4wNzc5MDMwODY3MDUsMjQ4Mzg1LjkzMDM2MTYwOTMsMTIxNjA5Ljg1OTk3MjQwOTUsNTM3NjguNTYyOTg4NDk2NTYsODA4MzUuNTI1NzcwNzA5ODUsODkzNzkuNjE0NDQxNTI4NTcsMTI2OTgyLjAwMDY5NDk2MTI0LDEwNTkyOS43NzcxNTM1NTU2NywyNTQ5OC40ODk0Mzc0OTM4MzgsMTk4NzY4Ljk4ODc0NDI4MTYsOTgzODkuNjA5ODA0NDM0MDYsMTExOTA0LjI3MTg1NjQ0MzU2LDU2ODkzLjI5Njg2OTU5MDgsMTgwNDMuOTEyNDI4MTY5OTMzLDE2MDk4Ni4zMjY5NDExMzQzMiwxMjg0NC4wMTMyMTQ3MTY0MSwzNDIyNS4yODY5NTgxMDMzLDI0NzE1LjczNjM3MDk3NTY0LDE2ODI4Ny4wODE3OTI5MDE3LDM2MzgwLjk0MjA5MzIwMDY1NCwzOTk2NS4xNDQyNTAyMTkxNjQsMzc5NTI5LjMyNDg4MTU2NzU2LDIyNzA2Mi45NDY1NTczMTI4Myw2OTAxMy4xNTMwMTYxMjY1NCw2ODQyOC4wMTI3MDgzNjA5OCwyNDU2MjEuMjMxMDE2OTU4MjIsMjA5NjYuMzg4OTE3NzM1MjU4LDgwMjQwLjM0ODY3OTU5ODgxLDE1MDk2Ljg5ODg5NjE4NDg2NCwxMTM3ODUuNzE5ODkxNjUyMjksNDE3MDM2LjU1NzI5MjQ5NSw0NDY2My4zOTAzNDgzMjIzODQsMTQxNTcwLjM4Nzg1ODE5ODk4LDEyMTc2LjU1MTQ5MjI2MDk3NiwxMTc4ODIuNDY2MTY3NzQ0MTgsMTA3MjczLjYxMzE3MDM5NDQzLDM2MTY3LjA3NDQ4MjcyMzM2NSw5ODc1LjY1MDgzNDMxMjA2OAorMjksVHVlIDIyIEZlYiAxMSwxMjUzOC42NDAzNzcxMDc1LDg4OTQyLjAxODY5MzU2NDMzLDUzNDY4LjAwOTI1MTIxODMxLDEwMjYxMi42NDI5MTc0NTcwOCw2Nzc0MzIuOTYwNDY2MjI4OSw4NjAyNS4yMjE5OTIwMzkwOCw2ODExMS4zMDg0NjExNzYwNywxMTQ0MS4xODAxMzE3Njg0NTEsMTU2NzIuMTc1OTgzMDk0NTY3LDMxOTY0Ny41NzAxODI0NDQxLDE2MzcyOS4wNjQxMjMzMTUwNCwyNDIzMC43NDA0MDk3MjEwMjcsNTg1MjYuNDkzNDY5ODIxOTUsMjU4NzkuMDYyMTI1NDM1MDIsMjQ4Mzg1Ljg2ODM2NDQzNTk0LDEyMTYwOS43MTg5OTMxODA1OSw1Mzc2OC4zODQxMDU0NTI1Miw4MDgzNS4zOTczMDgyODY0Miw4OTM3OS41MzEyMTIzMjk5NCwxMjY5ODEuOTQ3MjA2ODAwNiwxMDU5MjkuNzI2Nzg1NzE5MTgsMjU0OTguNDYzNDk0OTUxOTQsMTk4NzY4Ljg5MjkxMDg4MDM2LDk4Mzg5LjU4MzU0MjE1MDE3LDExMTkwNC4yMjYxNTc1MTE0LDU2ODkzLjE3NjI1MjM5MywxODA0My45MDE0NzU0NTk1NTIsMTYwOTg2LjI2Nzk0OTcyMzY3LDEyODQ0LjAwMTU2ODg3NjA1MiwzNDIyNS4yNjMyMDA0MjEzNywyNDcxNS43MjE5NDM1NTU5NTMsMTY4Mjg3LjAwOTcxMTc4OTA4LDM2MzgwLjkyMjYyMjk0ODg1LDM5OTY1LjE0MDUxNTQ1MTgyLDM3OTUyOS4xNjE5NTIxMTg0NSwyMjcwNjIuODE3Mzk5MzEwNTMsNjkwMTMuMDg4NjY4NjU1OCw2ODQyNy45ODM4ODM3MjY1OSwyNDU2MjEuMDk3OTI4OTY5OCwyMDk2Ni4zODEwNTkwMDk4ODcsODAyNDAuMjUyOTAzMzgwMSwxNTA5Ni44ODIyNDM0Nzg3ODcsMTEzNzg1LjY2NzExMDkwODkyLDQxNzAzNi40MTg2ODI2MTY5LDQ0NjYzLjM4MTIzMTU4NjQ1LDE0MTU3MC4zMjgwNTczMjk1NSwxMjE3Ni41NDEzNjQzNjQxNDIsMTE3ODgyLjQyNTQ4MzI1NjEzLDEwNzI3My41MTM0MzU4NjI4OSwzNjE2Ni45MDMwOTYzODIzMiw5ODc1LjY0MTI4NjI4NTI0MworMzAsV2VkIDIzIEZlYiAxMSwxMjUzOC42NDE3MTc3MzM2NDgsODg5NDIuMDg1MTU2NDYzMDQsNTM0NjguMDQyMTQzMDIyMzgsMTAyNjEyLjY1MzI4ODg2NDQxLDY3NzQzMi45NjIxMTM2MjUxLDg2MDI1LjIyOTA3Mjg0OTk4LDY4MTExLjMzODU0NDIyOTc5LDExNDQxLjE4MDU5OTM2NTcxLDE1NjcyLjgwMTQ4MjY1MzMwNywzMTk2NDcuNjA2MzgxOTU1MTUsMTYzNzI5LjA3ODc4MDYyOTgyLDI0MjMwLjc0MTg2NTYwMjY1LDU4NTI2LjU0MTM2MDE5ODk2LDI1ODc5LjA2OTY4MjI3NDkzOCwyNDgzODUuODk4MTAxMjMxNTgsMTIxNjA5Ljc4NjUyMTcwNjQ3LDUzNzY4LjQ2OTgwODQzNTQ2LDgwODM1LjQ1ODg0NTk2MDYyLDg5Mzc5LjU3MTA3Njg5MTE1LDEyNjk4MS45NzI4Mjk4NTQ2MywxMDU5MjkuNzUwOTExNzgyODMsMjU0OTguNDc1OTIwOTYzMTY3LDE5ODc2OC45Mzg4MTQ0Njg0OCw5ODM4OS41OTYxMzUyMTQ4NywxMTE5MDQuMjQ4MDQ5ODg1NzUsNTY4OTMuMjM0MDM1NjMxOTA0LDE4MDQzLjkwNjcyMTM1NTczNSwxNjA5ODYuMjk2MjEzODk2OSwxMjg0NC4wMDcxNDY4OTQxMjQsMzQyMjUuMjc0NTc5MzAyMzUsMjQ3MTUuNzI4ODUzNzM1MzM0LDE2ODI4Ny4wNDQyNDExMDc5NywzNjM4MC45MzE5NDg2NTI5LDM5OTY1LjE0MjM0NTc2NjQ4NiwzNzk1MjkuMjQwMDAwNzQwODYsMjI3MDYyLjg3OTI2MTM0NTcyLDY5MDEzLjExOTQ4OTM4MjQsNjg0MjcuOTk3NjkxOTI1NDMsMjQ1NjIxLjE2MTY3NDEzMjE2LDIwOTY2LjM4NDgyNDE4NDE2Niw4MDI0MC4yOTg3ODAxNTAwNywxNTA5Ni44OTAyMTk5NzAzNDYsMTEzNzg1LjY5MjM5MzEzNzc0LDQxNzAzNi40ODUxMDU0OTg3NSw0NDY2My4zODU2MDk3NTQ0NSwxNDE1NzAuMzU2NzA0MzU4OTQsMTIxNzYuNTQ2MjE1MjYxMjMsMTE3ODgyLjQ0NDk3ODEyNTEzLDEwNzI3My41NjEyMDYwMjIzLDM2MTY2Ljk4NTIxMTE0NzE2LDk4NzUuNjQ1ODU5NTY5MTczCiszMSxUaHUgMjQgRmViIDExLDEyNTM4LjY0MTY5MTIwMzg0OCw4ODk0Mi4wODM4MzAyNjUxLDUzNDY4LjA0MTQ4NjYwMzk0LDEwMjYxMi42NTMwODM5NTQsNjc3NDMyLjk2MjA5NTk0OTcsODYwMjUuMjI4OTM0MTE4MzUsNjgxMTEuMzM3OTQzNzE2MTMsMTE0NDEuMTgwNTkxMzY3MDUyLDE1NjcyLjc4ODgxMjIyNjQ2LDMxOTY0Ny42MDU2NjQ1ODA3NywxNjM3MjkuMDc4NDkyMzEzMTMsMjQyMzAuNzQxODM3ODEyOTk1LDU4NTI2LjU0MDQwNDY1NjAxNCwyNTg3OS4wNjk1MzE0MTY3MDIsMjQ4Mzg1Ljg5NzUxMTIzMzg3LDEyMTYwOS43ODUxNzM5Mzc0Miw1Mzc2OC40NjgwOTg4MzgxNSw4MDgzNS40NTc2MTgwNTY2MSw4OTM3OS41NzAyODExMjU2LDEyNjk4MS45NzIzMTg3MzE3MywxMDU5MjkuNzUwNDMwMzI4NjYsMjU0OTguNDc1NjcyOTMzNzEsMTk4NzY4LjkzNzg5ODM5NTUsOTgzODkuNTk1ODg1MDU4MzYsMTExOTA0LjI0NzYxMzI0MDUzLDU2ODkzLjIzMjg4Mjg0Mjk5LDE4MDQzLjkwNjYxNjYzMTQ4NCwxNjA5ODYuMjk1NjUwNTAzLDEyODQ0LjAwNzAzNTU0NTM2LDM0MjI1LjI3NDM1MjEzNTM2LDI0NzE1LjcyODcxNTc5MDkzOCwxNjgyODcuMDQzNTUyMjc5MDQsMzYzODAuOTMxNzYyNTA3MzUsMzk5NjUuMTQyMzEyNzEzNTgsMzc5NTI5LjIzODQ0MzcyNzIsMjI3MDYyLjg3ODAyNjQ1NTQ3LDY5MDEzLjExODg3NDE0NzksNjg0MjcuOTk3NDE2NDgyNiwyNDU2MjEuMTYwNDAxNzI1NjUsMjA5NjYuMzg0NzQ5MTIxNjM3LDgwMjQwLjI5Nzg2NDUzODk4LDE1MDk2Ljg5MDA2MDc2NTI1OCwxMTM3ODUuNjkxODg4NjQ1NTIsNDE3MDM2LjQ4Mzc4MjQ3MDcsNDQ2NjMuMzg1NTIzMzM4ODQ2LDE0MTU3MC4zNTYxMzI5MDgzLDEyMTc2LjU0NjExODQyMjcxOSwxMTc4ODIuNDQ0NTg5Njk4OTIsMTA3MjczLjU2MDI1MjQ0NjE3LDM2MTY2Ljk4MzU3MzAwNDQ2LDk4NzUuNjQ1NzY4MjgwOAorMzIsRnJpIDI1IEZlYiAxMSwxMjUzOC42NDI3NTM4NDQxNCw4ODk0Mi4xMzY0NDMzMjgyNiw1MzQ2OC4wNjc1MjM0NzI1ODYsMTAyNjEyLjY2MTMwNjkwOTc3LDY3NzQzMi45NjM0OTcyNjEyLDg2MDI1LjIzNDU1NTU4NTIxLDY4MTExLjM2MTc1NjAzODEyLDExNDQxLjE4MDk3MDAzNjgzLDE1NjczLjI4Mzc0MjYyNzQ0NywzMTk2NDcuNjM0MzUxNDI4MTMsMTYzNzI5LjA5MDEyMTQ3MjgsMjQyMzAuNzQyOTk4MzQyMzI0LDU4NTI2LjU3ODMxNTk0MTUyLDI1ODc5LjA3NTUxMjk0NjA2LDI0ODM4NS45MjEwNzIxNTI4MiwxMjE2MDkuODM4NjI4MDc2MzIsNTM3NjguNTM1OTQ4ODc5MDMsODA4MzUuNTA2MzMyMzczOCw4OTM3OS42MDE4MzYwNjUyNSwxMjY5ODEuOTkyNjAyNzg5NjcsMTA1OTI5Ljc2OTUyODExMjExLDI1NDk4LjQ4NTUwODkwNjU2NCwxOTg3NjguOTc0MjM0NzAwMjMsOTgzODkuNjA1ODYwODEwMSwxMTE5MDQuMjY0OTQ0MzQwMjYsNTY4OTMuMjc4NjI2OTU1NjQsMTgwNDMuOTEwNzY4OTYxNjE4LDE2MDk4Ni4zMTgwMjc5NzQ3MiwxMjg0NC4wMTE0NTA4MzEyODksMzQyMjUuMjgzMzU4OTE5LDI0NzE1LjczNDE4NTQ4ODM1NiwxNjgyODcuMDcwODg2NTQzMjgsMzYzODAuOTM5MTQ0MzA1NzEsMzk5NjUuMTQzNzgzNzc1MDQsMzc5NTI5LjMwMDIyODg2MjU2LDIyNzA2Mi45MjY5OTMwMzQ5OCw2OTAxMy4xNDMyNzA0MTA4Miw2ODQyOC4wMDgzNDc1MTAzNSwyNDU2MjEuMjEwODU5MzI4NjIsMjA5NjYuMzg3NzMwMDM4NzQsODAyNDAuMzM0MTc5Nzc1NzIsMTUwOTYuODk2Mzc0NzM3NTgyLDExMzc4NS43MTE5MDE4NDA1OCw0MTcwMzYuNTM2Mzc3NDU3Myw0NDY2My4zODg5OTUxMDYxMiwxNDE1NzAuMzc4ODEwODA0MzQsMTIxNzYuNTQ5OTU4MTE4OTgzLDExNzg4Mi40NjAwMjUzNTUwOSwxMDcyNzMuNTk4MDY1MDgzNzYsMzYxNjcuMDQ4NTgzNzQ0OTksOTg3NS42NDkzODgyOTgyMTgKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0lTdGF0ZXNPbmx5X1JLX1JlZmVyZW5jZS9UZXN0U0kvcnVucGFyYW1ldGVycy5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNJU3RhdGVzT25seV9SS19SZWZlcmVuY2UvVGVzdFNJL3J1bnBhcmFtZXRlcnMuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA0NDVhZGUKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNJU3RhdGVzT25seV9SS19SZWZlcmVuY2UvVGVzdFNJL3J1bnBhcmFtZXRlcnMuY3N2CkBAIC0wLDAgKzEsMiBAQAorZGlzZWFzZU5hbWUscG9wdWxhdGlvbklkZW50aWZpZXIsdGltZVBlcmlvZCxmcmVxdWVuY3lEZXBlbmRlbnQscmVmZXJlbmNlUG9wdWxhdGlvbkRlbnNpdHkscm9hZE5ldHdvcmtJbmZlY3Rpb3VzUHJvcG9ydGlvbixjaGFyYWN0ZXJpc3RpY01peGluZ0Rpc3RhbmNlLHRyYW5zbWlzc2lvblJhdGUsbm9uTGluZWFyaXR5Q29lZmZpY2llbnQscmVjb3ZlcnlSYXRlLGluZmVjdGlvdXNNb3J0YWxpdHlSYXRlCitUZXN0U0ksaHVtYW4sODY0MDAwMDAsdHJ1ZSwxMDAuMCwwLjAxLDIuMjUsMjAuMCwxLjAsMC40LDAuMApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0lTdGF0ZXNPbmx5X1JLX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL2h1bWFuL0JpcnRoc18wLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0lTdGF0ZXNPbmx5X1JLX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL2h1bWFuL0JpcnRoc18wLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMTJlOGI4Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTSVN0YXRlc09ubHlfUktfUmVmZXJlbmNlL2F1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwvaHVtYW4vQmlydGhzXzAuY3N2CkBAIC0wLDAgKzEsMzMgQEAKK2l0ZXJhdGlvbix0aW1lLHN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL25vZGUvdHJhbnNwb3J0L3BpcGUvVVNBCisxLFR1ZSAyNSBKYW4gMTEsMC4wCisyLFdlZCAyNiBKYW4gMTEsMC4wCiszLFRodSAyNyBKYW4gMTEsMC4wCis0LEZyaSAyOCBKYW4gMTEsMC4wCis1LFNhdCAyOSBKYW4gMTEsMC4wCis2LFN1biAzMCBKYW4gMTEsMC4wCis3LE1vbiAzMSBKYW4gMTEsMC4wCis4LFR1ZSAxIEZlYiAxMSwwLjAKKzksV2VkIDIgRmViIDExLDAuMAorMTAsVGh1IDMgRmViIDExLDAuMAorMTEsRnJpIDQgRmViIDExLDAuMAorMTIsU2F0IDUgRmViIDExLDAuMAorMTMsU3VuIDYgRmViIDExLDAuMAorMTQsTW9uIDcgRmViIDExLDAuMAorMTUsVHVlIDggRmViIDExLDAuMAorMTYsV2VkIDkgRmViIDExLDAuMAorMTcsVGh1IDEwIEZlYiAxMSwwLjAKKzE4LEZyaSAxMSBGZWIgMTEsMC4wCisxOSxTYXQgMTIgRmViIDExLDAuMAorMjAsU3VuIDEzIEZlYiAxMSwwLjAKKzIxLE1vbiAxNCBGZWIgMTEsMC4wCisyMixUdWUgMTUgRmViIDExLDAuMAorMjMsV2VkIDE2IEZlYiAxMSwwLjAKKzI0LFRodSAxNyBGZWIgMTEsMC4wCisyNSxGcmkgMTggRmViIDExLDAuMAorMjYsU2F0IDE5IEZlYiAxMSwwLjAKKzI3LFN1biAyMCBGZWIgMTEsMC4wCisyOCxNb24gMjEgRmViIDExLDAuMAorMjksVHVlIDIyIEZlYiAxMSwwLjAKKzMwLFdlZCAyMyBGZWIgMTEsMC4wCiszMSxUaHUgMjQgRmViIDExLDAuMAorMzIsRnJpIDI1IEZlYiAxMSwwLjAKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0lTdGF0ZXNPbmx5X1JLX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL2h1bWFuL0JpcnRoc18xLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0lTdGF0ZXNPbmx5X1JLX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL2h1bWFuL0JpcnRoc18xLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40N2E4NDNmCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTSVN0YXRlc09ubHlfUktfUmVmZXJlbmNlL2F1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwvaHVtYW4vQmlydGhzXzEuY3N2CkBAIC0wLDAgKzEsMzMgQEAKK2l0ZXJhdGlvbix0aW1lLFVTLUFLLFVTLUFMLFVTLUFSLFVTLUFaLFVTLUNBLFVTLUNPLFVTLUNULFVTLURDLFVTLURFLFVTLUZMLFVTLUdBLFVTLUhJLFVTLUlBLFVTLUlELFVTLUlMLFVTLUlOLFVTLUtTLFVTLUtZLFVTLUxBLFVTLU1BLFVTLU1ELFVTLU1FLFVTLU1JLFVTLU1OLFVTLU1PLFVTLU1TLFVTLU1ULFVTLU5DLFVTLU5ELFVTLU5FLFVTLU5ILFVTLU5KLFVTLU5NLFVTLU5WLFVTLU5ZLFVTLU9ILFVTLU9LLFVTLU9SLFVTLVBBLFVTLVJJLFVTLVNDLFVTLVNELFVTLVROLFVTLVRYLFVTLVVULFVTLVZBLFVTLVZULFVTLVdBLFVTLVdJLFVTLVdWLFVTLVdZCisxLFR1ZSAyNSBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzIsV2VkIDI2IEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMyxUaHUgMjcgSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCis0LEZyaSAyOCBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzUsU2F0IDI5IEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorNixTdW4gMzAgSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCis3LE1vbiAzMSBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzgsVHVlIDEgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCis5LFdlZCAyIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTAsVGh1IDMgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxMSxGcmkgNCBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzEyLFNhdCA1IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTMsU3VuIDYgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxNCxNb24gNyBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzE1LFR1ZSA4IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTYsV2VkIDkgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxNyxUaHUgMTAgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxOCxGcmkgMTEgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxOSxTYXQgMTIgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyMCxTdW4gMTMgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyMSxNb24gMTQgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyMixUdWUgMTUgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyMyxXZWQgMTYgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyNCxUaHUgMTcgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyNSxGcmkgMTggRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyNixTYXQgMTkgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyNyxTdW4gMjAgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyOCxNb24gMjEgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyOSxUdWUgMjIgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCiszMCxXZWQgMjMgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCiszMSxUaHUgMjQgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCiszMixGcmkgMjUgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNJU3RhdGVzT25seV9SS19SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9odW1hbi9Db3VudF8wLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0lTdGF0ZXNPbmx5X1JLX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL2h1bWFuL0NvdW50XzAuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQyNTAwMmIKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNJU3RhdGVzT25seV9SS19SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9odW1hbi9Db3VudF8wLmNzdgpAQCAtMCwwICsxLDMzIEBACitpdGVyYXRpb24sdGltZSxzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9ub2RlL3RyYW5zcG9ydC9waXBlL1VTQQorMSxUdWUgMjUgSmFuIDExLDk0MzIxMS4wCisyLFdlZCAyNiBKYW4gMTEsOTQzMjExLjAKKzMsVGh1IDI3IEphbiAxMSw5NDMyMTEuMAorNCxGcmkgMjggSmFuIDExLDk0MzIxMS4wCis1LFNhdCAyOSBKYW4gMTEsOTQzMjExLjAKKzYsU3VuIDMwIEphbiAxMSw5NDMyMTEuMAorNyxNb24gMzEgSmFuIDExLDk0MzIxMS4wCis4LFR1ZSAxIEZlYiAxMSw5NDMyMTEuMAorOSxXZWQgMiBGZWIgMTEsOTQzMjExLjAKKzEwLFRodSAzIEZlYiAxMSw5NDMyMTEuMAorMTEsRnJpIDQgRmViIDExLDk0MzIxMS4wCisxMixTYXQgNSBGZWIgMTEsOTQzMjExLjAKKzEzLFN1biA2IEZlYiAxMSw5NDMyMTEuMAorMTQsTW9uIDcgRmViIDExLDk0MzIxMS4wCisxNSxUdWUgOCBGZWIgMTEsOTQzMjExLjAKKzE2LFdlZCA5IEZlYiAxMSw5NDMyMTEuMAorMTcsVGh1IDEwIEZlYiAxMSw5NDMyMTEuMAorMTgsRnJpIDExIEZlYiAxMSw5NDMyMTEuMAorMTksU2F0IDEyIEZlYiAxMSw5NDMyMTEuMAorMjAsU3VuIDEzIEZlYiAxMSw5NDMyMTEuMAorMjEsTW9uIDE0IEZlYiAxMSw5NDMyMTEuMAorMjIsVHVlIDE1IEZlYiAxMSw5NDMyMTEuMAorMjMsV2VkIDE2IEZlYiAxMSw5NDMyMTEuMAorMjQsVGh1IDE3IEZlYiAxMSw5NDMyMTEuMAorMjUsRnJpIDE4IEZlYiAxMSw5NDMyMTEuMAorMjYsU2F0IDE5IEZlYiAxMSw5NDMyMTEuMAorMjcsU3VuIDIwIEZlYiAxMSw5NDMyMTEuMAorMjgsTW9uIDIxIEZlYiAxMSw5NDMyMTEuMAorMjksVHVlIDIyIEZlYiAxMSw5NDMyMTEuMAorMzAsV2VkIDIzIEZlYiAxMSw5NDMyMTEuMAorMzEsVGh1IDI0IEZlYiAxMSw5NDMyMTEuMAorMzIsRnJpIDI1IEZlYiAxMSw5NDMyMTEuMApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTSVN0YXRlc09ubHlfUktfUmVmZXJlbmNlL2F1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwvaHVtYW4vQ291bnRfMS5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNJU3RhdGVzT25seV9SS19SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9odW1hbi9Db3VudF8xLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NTkwZTZhCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTSVN0YXRlc09ubHlfUktfUmVmZXJlbmNlL2F1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwvaHVtYW4vQ291bnRfMS5jc3YKQEAgLTAsMCArMSwzMyBAQAoraXRlcmF0aW9uLHRpbWUsVVMtQUssVVMtQUwsVVMtQVIsVVMtQVosVVMtQ0EsVVMtQ08sVVMtQ1QsVVMtREMsVVMtREUsVVMtRkwsVVMtR0EsVVMtSEksVVMtSUEsVVMtSUQsVVMtSUwsVVMtSU4sVVMtS1MsVVMtS1ksVVMtTEEsVVMtTUEsVVMtTUQsVVMtTUUsVVMtTUksVVMtTU4sVVMtTU8sVVMtTVMsVVMtTVQsVVMtTkMsVVMtTkQsVVMtTkUsVVMtTkgsVVMtTkosVVMtTk0sVVMtTlYsVVMtTlksVVMtT0gsVVMtT0ssVVMtT1IsVVMtUEEsVVMtUkksVVMtU0MsVVMtU0QsVVMtVE4sVVMtVFgsVVMtVVQsVVMtVkEsVVMtVlQsVVMtV0EsVVMtV0ksVVMtV1YsVVMtV1kKKzEsVHVlIDI1IEphbiAxMSw2MjY5MzIuMCw0NDQ3MTAwLjAsMjY3MzQwMC4wLDUxMzA2MzIuMCwzLjM4NzE2NDhFNyw0MzAxMjYxLjAsMzQwNTU2NS4wLDU3MjA1OS4wLDc4MzYwMC4wLDEuNTk4MjM3OEU3LDgxODY0NTMuMCwxMjExNTM3LjAsMjkyNjMyNC4wLDEyOTM5NTMuMCwxLjI0MTkyOTNFNyw2MDgwNDg1LjAsMjY4ODQxOC4wLDQwNDE3NjkuMCw0NDY4OTc2LjAsNjM0OTA5Ny4wLDUyOTY0ODYuMCwxMjc0OTIzLjAsOTkzODQ0NC4wLDQ5MTk0NzkuMCw1NTk1MjExLjAsMjg0NDY1OC4wLDkwMjE5NS4wLDgwNDkzMTMuMCw2NDIyMDAuMCwxNzExMjYzLjAsMTIzNTc4Ni4wLDg0MTQzNTAuMCwxODE5MDQ2LjAsMTk5ODI1Ny4wLDEuODk3NjQ1N0U3LDEuMTM1MzE0RTcsMzQ1MDY1NC4wLDM0MjEzOTkuMCwxLjIyODEwNTRFNywxMDQ4MzE5LjAsNDAxMjAxMi4wLDc1NDg0NC4wLDU2ODkyODMuMCwyLjA4NTE4MkU3LDIyMzMxNjkuMCw3MDc4NTE2LjAsNjA4ODI3LjAsNTg5NDEyMS4wLDUzNjM2NzUuMCwxODA4MzQ0LjAsNDkzNzgyLjAKKzIsV2VkIDI2IEphbiAxMSw2MjY5MzIuMCw0NDQ3MTAwLjAsMjY3MzQwMC4wLDUxMzA2MzIuMCwzLjM4NzE2NDhFNyw0MzAxMjYxLjAsMzQwNTU2NS4wLDU3MjA1OS4wLDc4MzYwMC4wLDEuNTk4MjM3OEU3LDgxODY0NTMuMCwxMjExNTM3LjAsMjkyNjMyNC4wLDEyOTM5NTMuMCwxLjI0MTkyOTNFNyw2MDgwNDg1LjAsMjY4ODQxOC4wLDQwNDE3NjkuMCw0NDY4OTc2LjAsNjM0OTA5Ny4wLDUyOTY0ODYuMCwxMjc0OTIzLjAsOTkzODQ0NC4wLDQ5MTk0NzkuMCw1NTk1MjExLjAsMjg0NDY1OC4wLDkwMjE5NS4wLDgwNDkzMTMuMCw2NDIyMDAuMCwxNzExMjYzLjAsMTIzNTc4Ni4wLDg0MTQzNTAuMCwxODE5MDQ2LjAsMTk5ODI1Ny4wLDEuODk3NjQ1N0U3LDEuMTM1MzE0RTcsMzQ1MDY1NC4wLDM0MjEzOTkuMCwxLjIyODEwNTRFNywxMDQ4MzE5LjAsNDAxMjAxMi4wLDc1NDg0NC4wLDU2ODkyODMuMCwyLjA4NTE4MkU3LDIyMzMxNjkuMCw3MDc4NTE2LjAsNjA4ODI3LjAsNTg5NDEyMS4wLDUzNjM2NzUuMCwxODA4MzQ0LjAsNDkzNzgyLjAKKzMsVGh1IDI3IEphbiAxMSw2MjY5MzIuMCw0NDQ3MTAwLjAsMjY3MzQwMC4wLDUxMzA2MzIuMCwzLjM4NzE2NDhFNyw0MzAxMjYxLjAsMzQwNTU2NS4wLDU3MjA1OS4wLDc4MzYwMC4wLDEuNTk4MjM3OEU3LDgxODY0NTMuMCwxMjExNTM3LjAsMjkyNjMyNC4wLDEyOTM5NTMuMCwxLjI0MTkyOTNFNyw2MDgwNDg1LjAsMjY4ODQxOC4wLDQwNDE3NjkuMCw0NDY4OTc2LjAsNjM0OTA5Ny4wLDUyOTY0ODYuMCwxMjc0OTIzLjAsOTkzODQ0NC4wLDQ5MTk0NzkuMCw1NTk1MjExLjAsMjg0NDY1OC4wLDkwMjE5NS4wLDgwNDkzMTMuMCw2NDIyMDAuMCwxNzExMjYzLjAsMTIzNTc4Ni4wLDg0MTQzNTAuMCwxODE5MDQ2LjAsMTk5ODI1Ny4wLDEuODk3NjQ1N0U3LDEuMTM1MzE0RTcsMzQ1MDY1NC4wLDM0MjEzOTkuMCwxLjIyODEwNTRFNywxMDQ4MzE5LjAsNDAxMjAxMi4wLDc1NDg0NC4wLDU2ODkyODMuMCwyLjA4NTE4MkU3LDIyMzMxNjkuMCw3MDc4NTE2LjAsNjA4ODI3LjAsNTg5NDEyMS4wLDUzNjM2NzUuMCwxODA4MzQ0LjAsNDkzNzgyLjAKKzQsRnJpIDI4IEphbiAxMSw2MjY5MzIuMCw0NDQ3MTAwLjAsMjY3MzQwMC4wLDUxMzA2MzIuMCwzLjM4NzE2NDhFNyw0MzAxMjYxLjAsMzQwNTU2NS4wLDU3MjA1OS4wLDc4MzYwMC4wLDEuNTk4MjM3OEU3LDgxODY0NTMuMCwxMjExNTM3LjAsMjkyNjMyNC4wLDEyOTM5NTMuMCwxLjI0MTkyOTNFNyw2MDgwNDg1LjAsMjY4ODQxOC4wLDQwNDE3NjkuMCw0NDY4OTc2LjAsNjM0OTA5Ny4wLDUyOTY0ODYuMCwxMjc0OTIzLjAsOTkzODQ0NC4wLDQ5MTk0NzkuMCw1NTk1MjExLjAsMjg0NDY1OC4wLDkwMjE5NS4wLDgwNDkzMTMuMCw2NDIyMDAuMCwxNzExMjYzLjAsMTIzNTc4Ni4wLDg0MTQzNTAuMCwxODE5MDQ2LjAsMTk5ODI1Ny4wLDEuODk3NjQ1N0U3LDEuMTM1MzE0RTcsMzQ1MDY1NC4wLDM0MjEzOTkuMCwxLjIyODEwNTRFNywxMDQ4MzE5LjAsNDAxMjAxMi4wLDc1NDg0NC4wLDU2ODkyODMuMCwyLjA4NTE4MkU3LDIyMzMxNjkuMCw3MDc4NTE2LjAsNjA4ODI3LjAsNTg5NDEyMS4wLDUzNjM2NzUuMCwxODA4MzQ0LjAsNDkzNzgyLjAKKzUsU2F0IDI5IEphbiAxMSw2MjY5MzIuMCw0NDQ3MTAwLjAsMjY3MzQwMC4wLDUxMzA2MzIuMCwzLjM4NzE2NDhFNyw0MzAxMjYxLjAsMzQwNTU2NS4wLDU3MjA1OS4wLDc4MzYwMC4wLDEuNTk4MjM3OEU3LDgxODY0NTMuMCwxMjExNTM3LjAsMjkyNjMyNC4wLDEyOTM5NTMuMCwxLjI0MTkyOTNFNyw2MDgwNDg1LjAsMjY4ODQxOC4wLDQwNDE3NjkuMCw0NDY4OTc2LjAsNjM0OTA5Ny4wLDUyOTY0ODYuMCwxMjc0OTIzLjAsOTkzODQ0NC4wLDQ5MTk0NzkuMCw1NTk1MjExLjAsMjg0NDY1OC4wLDkwMjE5NS4wLDgwNDkzMTMuMCw2NDIyMDAuMCwxNzExMjYzLjAsMTIzNTc4Ni4wLDg0MTQzNTAuMCwxODE5MDQ2LjAsMTk5ODI1Ny4wLDEuODk3NjQ1N0U3LDEuMTM1MzE0RTcsMzQ1MDY1NC4wLDM0MjEzOTkuMCwxLjIyODEwNTRFNywxMDQ4MzE5LjAsNDAxMjAxMi4wLDc1NDg0NC4wLDU2ODkyODMuMCwyLjA4NTE4MkU3LDIyMzMxNjkuMCw3MDc4NTE2LjAsNjA4ODI3LjAsNTg5NDEyMS4wLDUzNjM2NzUuMCwxODA4MzQ0LjAsNDkzNzgyLjAKKzYsU3VuIDMwIEphbiAxMSw2MjY5MzIuMCw0NDQ3MTAwLjAsMjY3MzQwMC4wLDUxMzA2MzIuMCwzLjM4NzE2NDhFNyw0MzAxMjYxLjAsMzQwNTU2NS4wLDU3MjA1OS4wLDc4MzYwMC4wLDEuNTk4MjM3OEU3LDgxODY0NTMuMCwxMjExNTM3LjAsMjkyNjMyNC4wLDEyOTM5NTMuMCwxLjI0MTkyOTNFNyw2MDgwNDg1LjAsMjY4ODQxOC4wLDQwNDE3NjkuMCw0NDY4OTc2LjAsNjM0OTA5Ny4wLDUyOTY0ODYuMCwxMjc0OTIzLjAsOTkzODQ0NC4wLDQ5MTk0NzkuMCw1NTk1MjExLjAsMjg0NDY1OC4wLDkwMjE5NS4wLDgwNDkzMTMuMCw2NDIyMDAuMCwxNzExMjYzLjAsMTIzNTc4Ni4wLDg0MTQzNTAuMCwxODE5MDQ2LjAsMTk5ODI1Ny4wLDEuODk3NjQ1N0U3LDEuMTM1MzE0RTcsMzQ1MDY1NC4wLDM0MjEzOTkuMCwxLjIyODEwNTRFNywxMDQ4MzE5LjAsNDAxMjAxMi4wLDc1NDg0NC4wLDU2ODkyODMuMCwyLjA4NTE4MkU3LDIyMzMxNjkuMCw3MDc4NTE2LjAsNjA4ODI3LjAsNTg5NDEyMS4wLDUzNjM2NzUuMCwxODA4MzQ0LjAsNDkzNzgyLjAKKzcsTW9uIDMxIEphbiAxMSw2MjY5MzIuMCw0NDQ3MTAwLjAsMjY3MzQwMC4wLDUxMzA2MzIuMCwzLjM4NzE2NDhFNyw0MzAxMjYxLjAsMzQwNTU2NS4wLDU3MjA1OS4wLDc4MzYwMC4wLDEuNTk4MjM3OEU3LDgxODY0NTMuMCwxMjExNTM3LjAsMjkyNjMyNC4wLDEyOTM5NTMuMCwxLjI0MTkyOTNFNyw2MDgwNDg1LjAsMjY4ODQxOC4wLDQwNDE3NjkuMCw0NDY4OTc2LjAsNjM0OTA5Ny4wLDUyOTY0ODYuMCwxMjc0OTIzLjAsOTkzODQ0NC4wLDQ5MTk0NzkuMCw1NTk1MjExLjAsMjg0NDY1OC4wLDkwMjE5NS4wLDgwNDkzMTMuMCw2NDIyMDAuMCwxNzExMjYzLjAsMTIzNTc4Ni4wLDg0MTQzNTAuMCwxODE5MDQ2LjAsMTk5ODI1Ny4wLDEuODk3NjQ1N0U3LDEuMTM1MzE0RTcsMzQ1MDY1NC4wLDM0MjEzOTkuMCwxLjIyODEwNTRFNywxMDQ4MzE5LjAsNDAxMjAxMi4wLDc1NDg0NC4wLDU2ODkyODMuMCwyLjA4NTE4MkU3LDIyMzMxNjkuMCw3MDc4NTE2LjAsNjA4ODI3LjAsNTg5NDEyMS4wLDUzNjM2NzUuMCwxODA4MzQ0LjAsNDkzNzgyLjAKKzgsVHVlIDEgRmViIDExLDYyNjkzMi4wLDQ0NDcxMDAuMCwyNjczNDAwLjAsNTEzMDYzMi4wLDMuMzg3MTY0OEU3LDQzMDEyNjEuMCwzNDA1NTY1LjAsNTcyMDU5LjAsNzgzNjAwLjAsMS41OTgyMzc4RTcsODE4NjQ1My4wLDEyMTE1MzcuMCwyOTI2MzI0LjAsMTI5Mzk1My4wLDEuMjQxOTI5M0U3LDYwODA0ODUuMCwyNjg4NDE4LjAsNDA0MTc2OS4wLDQ0Njg5NzYuMCw2MzQ5MDk3LjAsNTI5NjQ4Ni4wLDEyNzQ5MjMuMCw5OTM4NDQ0LjAsNDkxOTQ3OS4wLDU1OTUyMTEuMCwyODQ0NjU4LjAsOTAyMTk1LjAsODA0OTMxMy4wLDY0MjIwMC4wLDE3MTEyNjMuMCwxMjM1Nzg2LjAsODQxNDM1MC4wLDE4MTkwNDYuMCwxOTk4MjU3LjAsMS44OTc2NDU3RTcsMS4xMzUzMTRFNywzNDUwNjU0LjAsMzQyMTM5OS4wLDEuMjI4MTA1NEU3LDEwNDgzMTkuMCw0MDEyMDEyLjAsNzU0ODQ0LjAsNTY4OTI4My4wLDIuMDg1MTgyRTcsMjIzMzE2OS4wLDcwNzg1MTYuMCw2MDg4MjcuMCw1ODk0MTIxLjAsNTM2MzY3NS4wLDE4MDgzNDQuMCw0OTM3ODIuMAorOSxXZWQgMiBGZWIgMTEsNjI2OTMyLjAsNDQ0NzEwMC4wLDI2NzM0MDAuMCw1MTMwNjMyLjAsMy4zODcxNjQ4RTcsNDMwMTI2MS4wLDM0MDU1NjUuMCw1NzIwNTkuMCw3ODM2MDAuMCwxLjU5ODIzNzhFNyw4MTg2NDUzLjAsMTIxMTUzNy4wLDI5MjYzMjQuMCwxMjkzOTUzLjAsMS4yNDE5MjkzRTcsNjA4MDQ4NS4wLDI2ODg0MTguMCw0MDQxNzY5LjAsNDQ2ODk3Ni4wLDYzNDkwOTcuMCw1Mjk2NDg2LjAsMTI3NDkyMy4wLDk5Mzg0NDQuMCw0OTE5NDc5LjAsNTU5NTIxMS4wLDI4NDQ2NTguMCw5MDIxOTUuMCw4MDQ5MzEzLjAsNjQyMjAwLjAsMTcxMTI2My4wLDEyMzU3ODYuMCw4NDE0MzUwLjAsMTgxOTA0Ni4wLDE5OTgyNTcuMCwxLjg5NzY0NTdFNywxLjEzNTMxNEU3LDM0NTA2NTQuMCwzNDIxMzk5LjAsMS4yMjgxMDU0RTcsMTA0ODMxOS4wLDQwMTIwMTIuMCw3NTQ4NDQuMCw1Njg5MjgzLjAsMi4wODUxODJFNywyMjMzMTY5LjAsNzA3ODUxNi4wLDYwODgyNy4wLDU4OTQxMjEuMCw1MzYzNjc1LjAsMTgwODM0NC4wLDQ5Mzc4Mi4wCisxMCxUaHUgMyBGZWIgMTEsNjI2OTMyLjAsNDQ0NzEwMC4wLDI2NzM0MDAuMCw1MTMwNjMyLjAsMy4zODcxNjQ4RTcsNDMwMTI2MS4wLDM0MDU1NjUuMCw1NzIwNTkuMCw3ODM2MDAuMCwxLjU5ODIzNzhFNyw4MTg2NDUzLjAsMTIxMTUzNy4wLDI5MjYzMjQuMCwxMjkzOTUzLjAsMS4yNDE5MjkzRTcsNjA4MDQ4NS4wLDI2ODg0MTguMCw0MDQxNzY5LjAsNDQ2ODk3Ni4wLDYzNDkwOTcuMCw1Mjk2NDg2LjAsMTI3NDkyMy4wLDk5Mzg0NDQuMCw0OTE5NDc5LjAsNTU5NTIxMS4wLDI4NDQ2NTguMCw5MDIxOTUuMCw4MDQ5MzEzLjAsNjQyMjAwLjAsMTcxMTI2My4wLDEyMzU3ODYuMCw4NDE0MzUwLjAsMTgxOTA0Ni4wLDE5OTgyNTcuMCwxLjg5NzY0NTdFNywxLjEzNTMxNEU3LDM0NTA2NTQuMCwzNDIxMzk5LjAsMS4yMjgxMDU0RTcsMTA0ODMxOS4wLDQwMTIwMTIuMCw3NTQ4NDQuMCw1Njg5MjgzLjAsMi4wODUxODJFNywyMjMzMTY5LjAsNzA3ODUxNi4wLDYwODgyNy4wLDU4OTQxMjEuMCw1MzYzNjc1LjAsMTgwODM0NC4wLDQ5Mzc4Mi4wCisxMSxGcmkgNCBGZWIgMTEsNjI2OTMyLjAsNDQ0NzEwMC4wLDI2NzM0MDAuMCw1MTMwNjMyLjAsMy4zODcxNjQ4RTcsNDMwMTI2MS4wLDM0MDU1NjUuMCw1NzIwNTkuMCw3ODM2MDAuMCwxLjU5ODIzNzhFNyw4MTg2NDUzLjAsMTIxMTUzNy4wLDI5MjYzMjQuMCwxMjkzOTUzLjAsMS4yNDE5MjkzRTcsNjA4MDQ4NS4wLDI2ODg0MTguMCw0MDQxNzY5LjAsNDQ2ODk3Ni4wLDYzNDkwOTcuMCw1Mjk2NDg2LjAsMTI3NDkyMy4wLDk5Mzg0NDQuMCw0OTE5NDc5LjAsNTU5NTIxMS4wLDI4NDQ2NTguMCw5MDIxOTUuMCw4MDQ5MzEzLjAsNjQyMjAwLjAsMTcxMTI2My4wLDEyMzU3ODYuMCw4NDE0MzUwLjAsMTgxOTA0Ni4wLDE5OTgyNTcuMCwxLjg5NzY0NTdFNywxLjEzNTMxNEU3LDM0NTA2NTQuMCwzNDIxMzk5LjAsMS4yMjgxMDU0RTcsMTA0ODMxOS4wLDQwMTIwMTIuMCw3NTQ4NDQuMCw1Njg5MjgzLjAsMi4wODUxODJFNywyMjMzMTY5LjAsNzA3ODUxNi4wLDYwODgyNy4wLDU4OTQxMjEuMCw1MzYzNjc1LjAsMTgwODM0NC4wLDQ5Mzc4Mi4wCisxMixTYXQgNSBGZWIgMTEsNjI2OTMyLjAsNDQ0NzEwMC4wLDI2NzM0MDAuMCw1MTMwNjMyLjAsMy4zODcxNjQ4RTcsNDMwMTI2MS4wLDM0MDU1NjUuMCw1NzIwNTkuMCw3ODM2MDAuMCwxLjU5ODIzNzhFNyw4MTg2NDUzLjAsMTIxMTUzNy4wLDI5MjYzMjQuMCwxMjkzOTUzLjAsMS4yNDE5MjkzRTcsNjA4MDQ4NS4wLDI2ODg0MTguMCw0MDQxNzY5LjAsNDQ2ODk3Ni4wLDYzNDkwOTcuMCw1Mjk2NDg2LjAsMTI3NDkyMy4wLDk5Mzg0NDQuMCw0OTE5NDc5LjAsNTU5NTIxMS4wLDI4NDQ2NTguMCw5MDIxOTUuMCw4MDQ5MzEzLjAsNjQyMjAwLjAsMTcxMTI2My4wLDEyMzU3ODYuMCw4NDE0MzUwLjAsMTgxOTA0Ni4wLDE5OTgyNTcuMCwxLjg5NzY0NTdFNywxLjEzNTMxNEU3LDM0NTA2NTQuMCwzNDIxMzk5LjAsMS4yMjgxMDU0RTcsMTA0ODMxOS4wLDQwMTIwMTIuMCw3NTQ4NDQuMCw1Njg5MjgzLjAsMi4wODUxODJFNywyMjMzMTY5LjAsNzA3ODUxNi4wLDYwODgyNy4wLDU4OTQxMjEuMCw1MzYzNjc1LjAsMTgwODM0NC4wLDQ5Mzc4Mi4wCisxMyxTdW4gNiBGZWIgMTEsNjI2OTMyLjAsNDQ0NzEwMC4wLDI2NzM0MDAuMCw1MTMwNjMyLjAsMy4zODcxNjQ4RTcsNDMwMTI2MS4wLDM0MDU1NjUuMCw1NzIwNTkuMCw3ODM2MDAuMCwxLjU5ODIzNzhFNyw4MTg2NDUzLjAsMTIxMTUzNy4wLDI5MjYzMjQuMCwxMjkzOTUzLjAsMS4yNDE5MjkzRTcsNjA4MDQ4NS4wLDI2ODg0MTguMCw0MDQxNzY5LjAsNDQ2ODk3Ni4wLDYzNDkwOTcuMCw1Mjk2NDg2LjAsMTI3NDkyMy4wLDk5Mzg0NDQuMCw0OTE5NDc5LjAsNTU5NTIxMS4wLDI4NDQ2NTguMCw5MDIxOTUuMCw4MDQ5MzEzLjAsNjQyMjAwLjAsMTcxMTI2My4wLDEyMzU3ODYuMCw4NDE0MzUwLjAsMTgxOTA0Ni4wLDE5OTgyNTcuMCwxLjg5NzY0NTdFNywxLjEzNTMxNEU3LDM0NTA2NTQuMCwzNDIxMzk5LjAsMS4yMjgxMDU0RTcsMTA0ODMxOS4wLDQwMTIwMTIuMCw3NTQ4NDQuMCw1Njg5MjgzLjAsMi4wODUxODJFNywyMjMzMTY5LjAsNzA3ODUxNi4wLDYwODgyNy4wLDU4OTQxMjEuMCw1MzYzNjc1LjAsMTgwODM0NC4wLDQ5Mzc4Mi4wCisxNCxNb24gNyBGZWIgMTEsNjI2OTMyLjAsNDQ0NzEwMC4wLDI2NzM0MDAuMCw1MTMwNjMyLjAsMy4zODcxNjQ4RTcsNDMwMTI2MS4wLDM0MDU1NjUuMCw1NzIwNTkuMCw3ODM2MDAuMCwxLjU5ODIzNzhFNyw4MTg2NDUzLjAsMTIxMTUzNy4wLDI5MjYzMjQuMCwxMjkzOTUzLjAsMS4yNDE5MjkzRTcsNjA4MDQ4NS4wLDI2ODg0MTguMCw0MDQxNzY5LjAsNDQ2ODk3Ni4wLDYzNDkwOTcuMCw1Mjk2NDg2LjAsMTI3NDkyMy4wLDk5Mzg0NDQuMCw0OTE5NDc5LjAsNTU5NTIxMS4wLDI4NDQ2NTguMCw5MDIxOTUuMCw4MDQ5MzEzLjAsNjQyMjAwLjAsMTcxMTI2My4wLDEyMzU3ODYuMCw4NDE0MzUwLjAsMTgxOTA0Ni4wLDE5OTgyNTcuMCwxLjg5NzY0NTdFNywxLjEzNTMxNEU3LDM0NTA2NTQuMCwzNDIxMzk5LjAsMS4yMjgxMDU0RTcsMTA0ODMxOS4wLDQwMTIwMTIuMCw3NTQ4NDQuMCw1Njg5MjgzLjAsMi4wODUxODJFNywyMjMzMTY5LjAsNzA3ODUxNi4wLDYwODgyNy4wLDU4OTQxMjEuMCw1MzYzNjc1LjAsMTgwODM0NC4wLDQ5Mzc4Mi4wCisxNSxUdWUgOCBGZWIgMTEsNjI2OTMyLjAsNDQ0NzEwMC4wLDI2NzM0MDAuMCw1MTMwNjMyLjAsMy4zODcxNjQ4RTcsNDMwMTI2MS4wLDM0MDU1NjUuMCw1NzIwNTkuMCw3ODM2MDAuMCwxLjU5ODIzNzhFNyw4MTg2NDUzLjAsMTIxMTUzNy4wLDI5MjYzMjQuMCwxMjkzOTUzLjAsMS4yNDE5MjkzRTcsNjA4MDQ4NS4wLDI2ODg0MTguMCw0MDQxNzY5LjAsNDQ2ODk3Ni4wLDYzNDkwOTcuMCw1Mjk2NDg2LjAsMTI3NDkyMy4wLDk5Mzg0NDQuMCw0OTE5NDc5LjAsNTU5NTIxMS4wLDI4NDQ2NTguMCw5MDIxOTUuMCw4MDQ5MzEzLjAsNjQyMjAwLjAsMTcxMTI2My4wLDEyMzU3ODYuMCw4NDE0MzUwLjAsMTgxOTA0Ni4wLDE5OTgyNTcuMCwxLjg5NzY0NTdFNywxLjEzNTMxNEU3LDM0NTA2NTQuMCwzNDIxMzk5LjAsMS4yMjgxMDU0RTcsMTA0ODMxOS4wLDQwMTIwMTIuMCw3NTQ4NDQuMCw1Njg5MjgzLjAsMi4wODUxODJFNywyMjMzMTY5LjAsNzA3ODUxNi4wLDYwODgyNy4wLDU4OTQxMjEuMCw1MzYzNjc1LjAsMTgwODM0NC4wLDQ5Mzc4Mi4wCisxNixXZWQgOSBGZWIgMTEsNjI2OTMyLjAsNDQ0NzEwMC4wLDI2NzM0MDAuMCw1MTMwNjMyLjAsMy4zODcxNjQ4RTcsNDMwMTI2MS4wLDM0MDU1NjUuMCw1NzIwNTkuMCw3ODM2MDAuMCwxLjU5ODIzNzhFNyw4MTg2NDUzLjAsMTIxMTUzNy4wLDI5MjYzMjQuMCwxMjkzOTUzLjAsMS4yNDE5MjkzRTcsNjA4MDQ4NS4wLDI2ODg0MTguMCw0MDQxNzY5LjAsNDQ2ODk3Ni4wLDYzNDkwOTcuMCw1Mjk2NDg2LjAsMTI3NDkyMy4wLDk5Mzg0NDQuMCw0OTE5NDc5LjAsNTU5NTIxMS4wLDI4NDQ2NTguMCw5MDIxOTUuMCw4MDQ5MzEzLjAsNjQyMjAwLjAsMTcxMTI2My4wLDEyMzU3ODYuMCw4NDE0MzUwLjAsMTgxOTA0Ni4wLDE5OTgyNTcuMCwxLjg5NzY0NTdFNywxLjEzNTMxNEU3LDM0NTA2NTQuMCwzNDIxMzk5LjAsMS4yMjgxMDU0RTcsMTA0ODMxOS4wLDQwMTIwMTIuMCw3NTQ4NDQuMCw1Njg5MjgzLjAsMi4wODUxODJFNywyMjMzMTY5LjAsNzA3ODUxNi4wLDYwODgyNy4wLDU4OTQxMjEuMCw1MzYzNjc1LjAsMTgwODM0NC4wLDQ5Mzc4Mi4wCisxNyxUaHUgMTAgRmViIDExLDYyNjkzMi4wLDQ0NDcxMDAuMCwyNjczNDAwLjAsNTEzMDYzMi4wLDMuMzg3MTY0OEU3LDQzMDEyNjEuMCwzNDA1NTY1LjAsNTcyMDU5LjAsNzgzNjAwLjAsMS41OTgyMzc4RTcsODE4NjQ1My4wLDEyMTE1MzcuMCwyOTI2MzI0LjAsMTI5Mzk1My4wLDEuMjQxOTI5M0U3LDYwODA0ODUuMCwyNjg4NDE4LjAsNDA0MTc2OS4wLDQ0Njg5NzYuMCw2MzQ5MDk3LjAsNTI5NjQ4Ni4wLDEyNzQ5MjMuMCw5OTM4NDQ0LjAsNDkxOTQ3OS4wLDU1OTUyMTEuMCwyODQ0NjU4LjAsOTAyMTk1LjAsODA0OTMxMy4wLDY0MjIwMC4wLDE3MTEyNjMuMCwxMjM1Nzg2LjAsODQxNDM1MC4wLDE4MTkwNDYuMCwxOTk4MjU3LjAsMS44OTc2NDU3RTcsMS4xMzUzMTRFNywzNDUwNjU0LjAsMzQyMTM5OS4wLDEuMjI4MTA1NEU3LDEwNDgzMTkuMCw0MDEyMDEyLjAsNzU0ODQ0LjAsNTY4OTI4My4wLDIuMDg1MTgyRTcsMjIzMzE2OS4wLDcwNzg1MTYuMCw2MDg4MjcuMCw1ODk0MTIxLjAsNTM2MzY3NS4wLDE4MDgzNDQuMCw0OTM3ODIuMAorMTgsRnJpIDExIEZlYiAxMSw2MjY5MzIuMCw0NDQ3MTAwLjAsMjY3MzQwMC4wLDUxMzA2MzIuMCwzLjM4NzE2NDhFNyw0MzAxMjYxLjAsMzQwNTU2NS4wLDU3MjA1OS4wLDc4MzYwMC4wLDEuNTk4MjM3OEU3LDgxODY0NTMuMCwxMjExNTM3LjAsMjkyNjMyNC4wLDEyOTM5NTMuMCwxLjI0MTkyOTNFNyw2MDgwNDg1LjAsMjY4ODQxOC4wLDQwNDE3NjkuMCw0NDY4OTc2LjAsNjM0OTA5Ny4wLDUyOTY0ODYuMCwxMjc0OTIzLjAsOTkzODQ0NC4wLDQ5MTk0NzkuMCw1NTk1MjExLjAsMjg0NDY1OC4wLDkwMjE5NS4wLDgwNDkzMTMuMCw2NDIyMDAuMCwxNzExMjYzLjAsMTIzNTc4Ni4wLDg0MTQzNTAuMCwxODE5MDQ2LjAsMTk5ODI1Ny4wLDEuODk3NjQ1N0U3LDEuMTM1MzE0RTcsMzQ1MDY1NC4wLDM0MjEzOTkuMCwxLjIyODEwNTRFNywxMDQ4MzE5LjAsNDAxMjAxMi4wLDc1NDg0NC4wLDU2ODkyODMuMCwyLjA4NTE4MkU3LDIyMzMxNjkuMCw3MDc4NTE2LjAsNjA4ODI3LjAsNTg5NDEyMS4wLDUzNjM2NzUuMCwxODA4MzQ0LjAsNDkzNzgyLjAKKzE5LFNhdCAxMiBGZWIgMTEsNjI2OTMyLjAsNDQ0NzEwMC4wLDI2NzM0MDAuMCw1MTMwNjMyLjAsMy4zODcxNjQ4RTcsNDMwMTI2MS4wLDM0MDU1NjUuMCw1NzIwNTkuMCw3ODM2MDAuMCwxLjU5ODIzNzhFNyw4MTg2NDUzLjAsMTIxMTUzNy4wLDI5MjYzMjQuMCwxMjkzOTUzLjAsMS4yNDE5MjkzRTcsNjA4MDQ4NS4wLDI2ODg0MTguMCw0MDQxNzY5LjAsNDQ2ODk3Ni4wLDYzNDkwOTcuMCw1Mjk2NDg2LjAsMTI3NDkyMy4wLDk5Mzg0NDQuMCw0OTE5NDc5LjAsNTU5NTIxMS4wLDI4NDQ2NTguMCw5MDIxOTUuMCw4MDQ5MzEzLjAsNjQyMjAwLjAsMTcxMTI2My4wLDEyMzU3ODYuMCw4NDE0MzUwLjAsMTgxOTA0Ni4wLDE5OTgyNTcuMCwxLjg5NzY0NTdFNywxLjEzNTMxNEU3LDM0NTA2NTQuMCwzNDIxMzk5LjAsMS4yMjgxMDU0RTcsMTA0ODMxOS4wLDQwMTIwMTIuMCw3NTQ4NDQuMCw1Njg5MjgzLjAsMi4wODUxODJFNywyMjMzMTY5LjAsNzA3ODUxNi4wLDYwODgyNy4wLDU4OTQxMjEuMCw1MzYzNjc1LjAsMTgwODM0NC4wLDQ5Mzc4Mi4wCisyMCxTdW4gMTMgRmViIDExLDYyNjkzMi4wLDQ0NDcxMDAuMCwyNjczNDAwLjAsNTEzMDYzMi4wLDMuMzg3MTY0OEU3LDQzMDEyNjEuMCwzNDA1NTY1LjAsNTcyMDU5LjAsNzgzNjAwLjAsMS41OTgyMzc4RTcsODE4NjQ1My4wLDEyMTE1MzcuMCwyOTI2MzI0LjAsMTI5Mzk1My4wLDEuMjQxOTI5M0U3LDYwODA0ODUuMCwyNjg4NDE4LjAsNDA0MTc2OS4wLDQ0Njg5NzYuMCw2MzQ5MDk3LjAsNTI5NjQ4Ni4wLDEyNzQ5MjMuMCw5OTM4NDQ0LjAsNDkxOTQ3OS4wLDU1OTUyMTEuMCwyODQ0NjU4LjAsOTAyMTk1LjAsODA0OTMxMy4wLDY0MjIwMC4wLDE3MTEyNjMuMCwxMjM1Nzg2LjAsODQxNDM1MC4wLDE4MTkwNDYuMCwxOTk4MjU3LjAsMS44OTc2NDU3RTcsMS4xMzUzMTRFNywzNDUwNjU0LjAsMzQyMTM5OS4wLDEuMjI4MTA1NEU3LDEwNDgzMTkuMCw0MDEyMDEyLjAsNzU0ODQ0LjAsNTY4OTI4My4wLDIuMDg1MTgyRTcsMjIzMzE2OS4wLDcwNzg1MTYuMCw2MDg4MjcuMCw1ODk0MTIxLjAsNTM2MzY3NS4wLDE4MDgzNDQuMCw0OTM3ODIuMAorMjEsTW9uIDE0IEZlYiAxMSw2MjY5MzIuMCw0NDQ3MTAwLjAsMjY3MzQwMC4wLDUxMzA2MzIuMCwzLjM4NzE2NDhFNyw0MzAxMjYxLjAsMzQwNTU2NS4wLDU3MjA1OS4wLDc4MzYwMC4wLDEuNTk4MjM3OEU3LDgxODY0NTMuMCwxMjExNTM3LjAsMjkyNjMyNC4wLDEyOTM5NTMuMCwxLjI0MTkyOTNFNyw2MDgwNDg1LjAsMjY4ODQxOC4wLDQwNDE3NjkuMCw0NDY4OTc2LjAsNjM0OTA5Ny4wLDUyOTY0ODYuMCwxMjc0OTIzLjAsOTkzODQ0NC4wLDQ5MTk0NzkuMCw1NTk1MjExLjAsMjg0NDY1OC4wLDkwMjE5NS4wLDgwNDkzMTMuMCw2NDIyMDAuMCwxNzExMjYzLjAsMTIzNTc4Ni4wLDg0MTQzNTAuMCwxODE5MDQ2LjAsMTk5ODI1Ny4wLDEuODk3NjQ1N0U3LDEuMTM1MzE0RTcsMzQ1MDY1NC4wLDM0MjEzOTkuMCwxLjIyODEwNTRFNywxMDQ4MzE5LjAsNDAxMjAxMi4wLDc1NDg0NC4wLDU2ODkyODMuMCwyLjA4NTE4MkU3LDIyMzMxNjkuMCw3MDc4NTE2LjAsNjA4ODI3LjAsNTg5NDEyMS4wLDUzNjM2NzUuMCwxODA4MzQ0LjAsNDkzNzgyLjAKKzIyLFR1ZSAxNSBGZWIgMTEsNjI2OTMyLjAsNDQ0NzEwMC4wLDI2NzM0MDAuMCw1MTMwNjMyLjAsMy4zODcxNjQ4RTcsNDMwMTI2MS4wLDM0MDU1NjUuMCw1NzIwNTkuMCw3ODM2MDAuMCwxLjU5ODIzNzhFNyw4MTg2NDUzLjAsMTIxMTUzNy4wLDI5MjYzMjQuMCwxMjkzOTUzLjAsMS4yNDE5MjkzRTcsNjA4MDQ4NS4wLDI2ODg0MTguMCw0MDQxNzY5LjAsNDQ2ODk3Ni4wLDYzNDkwOTcuMCw1Mjk2NDg2LjAsMTI3NDkyMy4wLDk5Mzg0NDQuMCw0OTE5NDc5LjAsNTU5NTIxMS4wLDI4NDQ2NTguMCw5MDIxOTUuMCw4MDQ5MzEzLjAsNjQyMjAwLjAsMTcxMTI2My4wLDEyMzU3ODYuMCw4NDE0MzUwLjAsMTgxOTA0Ni4wLDE5OTgyNTcuMCwxLjg5NzY0NTdFNywxLjEzNTMxNEU3LDM0NTA2NTQuMCwzNDIxMzk5LjAsMS4yMjgxMDU0RTcsMTA0ODMxOS4wLDQwMTIwMTIuMCw3NTQ4NDQuMCw1Njg5MjgzLjAsMi4wODUxODJFNywyMjMzMTY5LjAsNzA3ODUxNi4wLDYwODgyNy4wLDU4OTQxMjEuMCw1MzYzNjc1LjAsMTgwODM0NC4wLDQ5Mzc4Mi4wCisyMyxXZWQgMTYgRmViIDExLDYyNjkzMi4wLDQ0NDcxMDAuMCwyNjczNDAwLjAsNTEzMDYzMi4wLDMuMzg3MTY0OEU3LDQzMDEyNjEuMCwzNDA1NTY1LjAsNTcyMDU5LjAsNzgzNjAwLjAsMS41OTgyMzc4RTcsODE4NjQ1My4wLDEyMTE1MzcuMCwyOTI2MzI0LjAsMTI5Mzk1My4wLDEuMjQxOTI5M0U3LDYwODA0ODUuMCwyNjg4NDE4LjAsNDA0MTc2OS4wLDQ0Njg5NzYuMCw2MzQ5MDk3LjAsNTI5NjQ4Ni4wLDEyNzQ5MjMuMCw5OTM4NDQ0LjAsNDkxOTQ3OS4wLDU1OTUyMTEuMCwyODQ0NjU4LjAsOTAyMTk1LjAsODA0OTMxMy4wLDY0MjIwMC4wLDE3MTEyNjMuMCwxMjM1Nzg2LjAsODQxNDM1MC4wLDE4MTkwNDYuMCwxOTk4MjU3LjAsMS44OTc2NDU3RTcsMS4xMzUzMTRFNywzNDUwNjU0LjAsMzQyMTM5OS4wLDEuMjI4MTA1NEU3LDEwNDgzMTkuMCw0MDEyMDEyLjAsNzU0ODQ0LjAsNTY4OTI4My4wLDIuMDg1MTgyRTcsMjIzMzE2OS4wLDcwNzg1MTYuMCw2MDg4MjcuMCw1ODk0MTIxLjAsNTM2MzY3NS4wLDE4MDgzNDQuMCw0OTM3ODIuMAorMjQsVGh1IDE3IEZlYiAxMSw2MjY5MzIuMCw0NDQ3MTAwLjAsMjY3MzQwMC4wLDUxMzA2MzIuMCwzLjM4NzE2NDhFNyw0MzAxMjYxLjAsMzQwNTU2NS4wLDU3MjA1OS4wLDc4MzYwMC4wLDEuNTk4MjM3OEU3LDgxODY0NTMuMCwxMjExNTM3LjAsMjkyNjMyNC4wLDEyOTM5NTMuMCwxLjI0MTkyOTNFNyw2MDgwNDg1LjAsMjY4ODQxOC4wLDQwNDE3NjkuMCw0NDY4OTc2LjAsNjM0OTA5Ny4wLDUyOTY0ODYuMCwxMjc0OTIzLjAsOTkzODQ0NC4wLDQ5MTk0NzkuMCw1NTk1MjExLjAsMjg0NDY1OC4wLDkwMjE5NS4wLDgwNDkzMTMuMCw2NDIyMDAuMCwxNzExMjYzLjAsMTIzNTc4Ni4wLDg0MTQzNTAuMCwxODE5MDQ2LjAsMTk5ODI1Ny4wLDEuODk3NjQ1N0U3LDEuMTM1MzE0RTcsMzQ1MDY1NC4wLDM0MjEzOTkuMCwxLjIyODEwNTRFNywxMDQ4MzE5LjAsNDAxMjAxMi4wLDc1NDg0NC4wLDU2ODkyODMuMCwyLjA4NTE4MkU3LDIyMzMxNjkuMCw3MDc4NTE2LjAsNjA4ODI3LjAsNTg5NDEyMS4wLDUzNjM2NzUuMCwxODA4MzQ0LjAsNDkzNzgyLjAKKzI1LEZyaSAxOCBGZWIgMTEsNjI2OTMyLjAsNDQ0NzEwMC4wLDI2NzM0MDAuMCw1MTMwNjMyLjAsMy4zODcxNjQ4RTcsNDMwMTI2MS4wLDM0MDU1NjUuMCw1NzIwNTkuMCw3ODM2MDAuMCwxLjU5ODIzNzhFNyw4MTg2NDUzLjAsMTIxMTUzNy4wLDI5MjYzMjQuMCwxMjkzOTUzLjAsMS4yNDE5MjkzRTcsNjA4MDQ4NS4wLDI2ODg0MTguMCw0MDQxNzY5LjAsNDQ2ODk3Ni4wLDYzNDkwOTcuMCw1Mjk2NDg2LjAsMTI3NDkyMy4wLDk5Mzg0NDQuMCw0OTE5NDc5LjAsNTU5NTIxMS4wLDI4NDQ2NTguMCw5MDIxOTUuMCw4MDQ5MzEzLjAsNjQyMjAwLjAsMTcxMTI2My4wLDEyMzU3ODYuMCw4NDE0MzUwLjAsMTgxOTA0Ni4wLDE5OTgyNTcuMCwxLjg5NzY0NTdFNywxLjEzNTMxNEU3LDM0NTA2NTQuMCwzNDIxMzk5LjAsMS4yMjgxMDU0RTcsMTA0ODMxOS4wLDQwMTIwMTIuMCw3NTQ4NDQuMCw1Njg5MjgzLjAsMi4wODUxODJFNywyMjMzMTY5LjAsNzA3ODUxNi4wLDYwODgyNy4wLDU4OTQxMjEuMCw1MzYzNjc1LjAsMTgwODM0NC4wLDQ5Mzc4Mi4wCisyNixTYXQgMTkgRmViIDExLDYyNjkzMi4wLDQ0NDcxMDAuMCwyNjczNDAwLjAsNTEzMDYzMi4wLDMuMzg3MTY0OEU3LDQzMDEyNjEuMCwzNDA1NTY1LjAsNTcyMDU5LjAsNzgzNjAwLjAsMS41OTgyMzc4RTcsODE4NjQ1My4wLDEyMTE1MzcuMCwyOTI2MzI0LjAsMTI5Mzk1My4wLDEuMjQxOTI5M0U3LDYwODA0ODUuMCwyNjg4NDE4LjAsNDA0MTc2OS4wLDQ0Njg5NzYuMCw2MzQ5MDk3LjAsNTI5NjQ4Ni4wLDEyNzQ5MjMuMCw5OTM4NDQ0LjAsNDkxOTQ3OS4wLDU1OTUyMTEuMCwyODQ0NjU4LjAsOTAyMTk1LjAsODA0OTMxMy4wLDY0MjIwMC4wLDE3MTEyNjMuMCwxMjM1Nzg2LjAsODQxNDM1MC4wLDE4MTkwNDYuMCwxOTk4MjU3LjAsMS44OTc2NDU3RTcsMS4xMzUzMTRFNywzNDUwNjU0LjAsMzQyMTM5OS4wLDEuMjI4MTA1NEU3LDEwNDgzMTkuMCw0MDEyMDEyLjAsNzU0ODQ0LjAsNTY4OTI4My4wLDIuMDg1MTgyRTcsMjIzMzE2OS4wLDcwNzg1MTYuMCw2MDg4MjcuMCw1ODk0MTIxLjAsNTM2MzY3NS4wLDE4MDgzNDQuMCw0OTM3ODIuMAorMjcsU3VuIDIwIEZlYiAxMSw2MjY5MzIuMCw0NDQ3MTAwLjAsMjY3MzQwMC4wLDUxMzA2MzIuMCwzLjM4NzE2NDhFNyw0MzAxMjYxLjAsMzQwNTU2NS4wLDU3MjA1OS4wLDc4MzYwMC4wLDEuNTk4MjM3OEU3LDgxODY0NTMuMCwxMjExNTM3LjAsMjkyNjMyNC4wLDEyOTM5NTMuMCwxLjI0MTkyOTNFNyw2MDgwNDg1LjAsMjY4ODQxOC4wLDQwNDE3NjkuMCw0NDY4OTc2LjAsNjM0OTA5Ny4wLDUyOTY0ODYuMCwxMjc0OTIzLjAsOTkzODQ0NC4wLDQ5MTk0NzkuMCw1NTk1MjExLjAsMjg0NDY1OC4wLDkwMjE5NS4wLDgwNDkzMTMuMCw2NDIyMDAuMCwxNzExMjYzLjAsMTIzNTc4Ni4wLDg0MTQzNTAuMCwxODE5MDQ2LjAsMTk5ODI1Ny4wLDEuODk3NjQ1N0U3LDEuMTM1MzE0RTcsMzQ1MDY1NC4wLDM0MjEzOTkuMCwxLjIyODEwNTRFNywxMDQ4MzE5LjAsNDAxMjAxMi4wLDc1NDg0NC4wLDU2ODkyODMuMCwyLjA4NTE4MkU3LDIyMzMxNjkuMCw3MDc4NTE2LjAsNjA4ODI3LjAsNTg5NDEyMS4wLDUzNjM2NzUuMCwxODA4MzQ0LjAsNDkzNzgyLjAKKzI4LE1vbiAyMSBGZWIgMTEsNjI2OTMyLjAsNDQ0NzEwMC4wLDI2NzM0MDAuMCw1MTMwNjMyLjAsMy4zODcxNjQ4RTcsNDMwMTI2MS4wLDM0MDU1NjUuMCw1NzIwNTkuMCw3ODM2MDAuMCwxLjU5ODIzNzhFNyw4MTg2NDUzLjAsMTIxMTUzNy4wLDI5MjYzMjQuMCwxMjkzOTUzLjAsMS4yNDE5MjkzRTcsNjA4MDQ4NS4wLDI2ODg0MTguMCw0MDQxNzY5LjAsNDQ2ODk3Ni4wLDYzNDkwOTcuMCw1Mjk2NDg2LjAsMTI3NDkyMy4wLDk5Mzg0NDQuMCw0OTE5NDc5LjAsNTU5NTIxMS4wLDI4NDQ2NTguMCw5MDIxOTUuMCw4MDQ5MzEzLjAsNjQyMjAwLjAsMTcxMTI2My4wLDEyMzU3ODYuMCw4NDE0MzUwLjAsMTgxOTA0Ni4wLDE5OTgyNTcuMCwxLjg5NzY0NTdFNywxLjEzNTMxNEU3LDM0NTA2NTQuMCwzNDIxMzk5LjAsMS4yMjgxMDU0RTcsMTA0ODMxOS4wLDQwMTIwMTIuMCw3NTQ4NDQuMCw1Njg5MjgzLjAsMi4wODUxODJFNywyMjMzMTY5LjAsNzA3ODUxNi4wLDYwODgyNy4wLDU4OTQxMjEuMCw1MzYzNjc1LjAsMTgwODM0NC4wLDQ5Mzc4Mi4wCisyOSxUdWUgMjIgRmViIDExLDYyNjkzMi4wLDQ0NDcxMDAuMCwyNjczNDAwLjAsNTEzMDYzMi4wLDMuMzg3MTY0OEU3LDQzMDEyNjEuMCwzNDA1NTY1LjAsNTcyMDU5LjAsNzgzNjAwLjAsMS41OTgyMzc4RTcsODE4NjQ1My4wLDEyMTE1MzcuMCwyOTI2MzI0LjAsMTI5Mzk1My4wLDEuMjQxOTI5M0U3LDYwODA0ODUuMCwyNjg4NDE4LjAsNDA0MTc2OS4wLDQ0Njg5NzYuMCw2MzQ5MDk3LjAsNTI5NjQ4Ni4wLDEyNzQ5MjMuMCw5OTM4NDQ0LjAsNDkxOTQ3OS4wLDU1OTUyMTEuMCwyODQ0NjU4LjAsOTAyMTk1LjAsODA0OTMxMy4wLDY0MjIwMC4wLDE3MTEyNjMuMCwxMjM1Nzg2LjAsODQxNDM1MC4wLDE4MTkwNDYuMCwxOTk4MjU3LjAsMS44OTc2NDU3RTcsMS4xMzUzMTRFNywzNDUwNjU0LjAsMzQyMTM5OS4wLDEuMjI4MTA1NEU3LDEwNDgzMTkuMCw0MDEyMDEyLjAsNzU0ODQ0LjAsNTY4OTI4My4wLDIuMDg1MTgyRTcsMjIzMzE2OS4wLDcwNzg1MTYuMCw2MDg4MjcuMCw1ODk0MTIxLjAsNTM2MzY3NS4wLDE4MDgzNDQuMCw0OTM3ODIuMAorMzAsV2VkIDIzIEZlYiAxMSw2MjY5MzIuMCw0NDQ3MTAwLjAsMjY3MzQwMC4wLDUxMzA2MzIuMCwzLjM4NzE2NDhFNyw0MzAxMjYxLjAsMzQwNTU2NS4wLDU3MjA1OS4wLDc4MzYwMC4wLDEuNTk4MjM3OEU3LDgxODY0NTMuMCwxMjExNTM3LjAsMjkyNjMyNC4wLDEyOTM5NTMuMCwxLjI0MTkyOTNFNyw2MDgwNDg1LjAsMjY4ODQxOC4wLDQwNDE3NjkuMCw0NDY4OTc2LjAsNjM0OTA5Ny4wLDUyOTY0ODYuMCwxMjc0OTIzLjAsOTkzODQ0NC4wLDQ5MTk0NzkuMCw1NTk1MjExLjAsMjg0NDY1OC4wLDkwMjE5NS4wLDgwNDkzMTMuMCw2NDIyMDAuMCwxNzExMjYzLjAsMTIzNTc4Ni4wLDg0MTQzNTAuMCwxODE5MDQ2LjAsMTk5ODI1Ny4wLDEuODk3NjQ1N0U3LDEuMTM1MzE0RTcsMzQ1MDY1NC4wLDM0MjEzOTkuMCwxLjIyODEwNTRFNywxMDQ4MzE5LjAsNDAxMjAxMi4wLDc1NDg0NC4wLDU2ODkyODMuMCwyLjA4NTE4MkU3LDIyMzMxNjkuMCw3MDc4NTE2LjAsNjA4ODI3LjAsNTg5NDEyMS4wLDUzNjM2NzUuMCwxODA4MzQ0LjAsNDkzNzgyLjAKKzMxLFRodSAyNCBGZWIgMTEsNjI2OTMyLjAsNDQ0NzEwMC4wLDI2NzM0MDAuMCw1MTMwNjMyLjAsMy4zODcxNjQ4RTcsNDMwMTI2MS4wLDM0MDU1NjUuMCw1NzIwNTkuMCw3ODM2MDAuMCwxLjU5ODIzNzhFNyw4MTg2NDUzLjAsMTIxMTUzNy4wLDI5MjYzMjQuMCwxMjkzOTUzLjAsMS4yNDE5MjkzRTcsNjA4MDQ4NS4wLDI2ODg0MTguMCw0MDQxNzY5LjAsNDQ2ODk3Ni4wLDYzNDkwOTcuMCw1Mjk2NDg2LjAsMTI3NDkyMy4wLDk5Mzg0NDQuMCw0OTE5NDc5LjAsNTU5NTIxMS4wLDI4NDQ2NTguMCw5MDIxOTUuMCw4MDQ5MzEzLjAsNjQyMjAwLjAsMTcxMTI2My4wLDEyMzU3ODYuMCw4NDE0MzUwLjAsMTgxOTA0Ni4wLDE5OTgyNTcuMCwxLjg5NzY0NTdFNywxLjEzNTMxNEU3LDM0NTA2NTQuMCwzNDIxMzk5LjAsMS4yMjgxMDU0RTcsMTA0ODMxOS4wLDQwMTIwMTIuMCw3NTQ4NDQuMCw1Njg5MjgzLjAsMi4wODUxODJFNywyMjMzMTY5LjAsNzA3ODUxNi4wLDYwODgyNy4wLDU4OTQxMjEuMCw1MzYzNjc1LjAsMTgwODM0NC4wLDQ5Mzc4Mi4wCiszMixGcmkgMjUgRmViIDExLDYyNjkzMi4wLDQ0NDcxMDAuMCwyNjczNDAwLjAsNTEzMDYzMi4wLDMuMzg3MTY0OEU3LDQzMDEyNjEuMCwzNDA1NTY1LjAsNTcyMDU5LjAsNzgzNjAwLjAsMS41OTgyMzc4RTcsODE4NjQ1My4wLDEyMTE1MzcuMCwyOTI2MzI0LjAsMTI5Mzk1My4wLDEuMjQxOTI5M0U3LDYwODA0ODUuMCwyNjg4NDE4LjAsNDA0MTc2OS4wLDQ0Njg5NzYuMCw2MzQ5MDk3LjAsNTI5NjQ4Ni4wLDEyNzQ5MjMuMCw5OTM4NDQ0LjAsNDkxOTQ3OS4wLDU1OTUyMTEuMCwyODQ0NjU4LjAsOTAyMTk1LjAsODA0OTMxMy4wLDY0MjIwMC4wLDE3MTEyNjMuMCwxMjM1Nzg2LjAsODQxNDM1MC4wLDE4MTkwNDYuMCwxOTk4MjU3LjAsMS44OTc2NDU3RTcsMS4xMzUzMTRFNywzNDUwNjU0LjAsMzQyMTM5OS4wLDEuMjI4MTA1NEU3LDEwNDgzMTkuMCw0MDEyMDEyLjAsNzU0ODQ0LjAsNTY4OTI4My4wLDIuMDg1MTgyRTcsMjIzMzE2OS4wLDcwNzg1MTYuMCw2MDg4MjcuMCw1ODk0MTIxLjAsNTM2MzY3NS4wLDE4MDgzNDQuMCw0OTM3ODIuMApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTSVN0YXRlc09ubHlfUktfUmVmZXJlbmNlL2F1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwvaHVtYW4vRGVhdGhzXzAuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTSVN0YXRlc09ubHlfUktfUmVmZXJlbmNlL2F1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwvaHVtYW4vRGVhdGhzXzAuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjExMmU4YjgKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNJU3RhdGVzT25seV9SS19SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9odW1hbi9EZWF0aHNfMC5jc3YKQEAgLTAsMCArMSwzMyBAQAoraXRlcmF0aW9uLHRpbWUsc3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vbm9kZS90cmFuc3BvcnQvcGlwZS9VU0EKKzEsVHVlIDI1IEphbiAxMSwwLjAKKzIsV2VkIDI2IEphbiAxMSwwLjAKKzMsVGh1IDI3IEphbiAxMSwwLjAKKzQsRnJpIDI4IEphbiAxMSwwLjAKKzUsU2F0IDI5IEphbiAxMSwwLjAKKzYsU3VuIDMwIEphbiAxMSwwLjAKKzcsTW9uIDMxIEphbiAxMSwwLjAKKzgsVHVlIDEgRmViIDExLDAuMAorOSxXZWQgMiBGZWIgMTEsMC4wCisxMCxUaHUgMyBGZWIgMTEsMC4wCisxMSxGcmkgNCBGZWIgMTEsMC4wCisxMixTYXQgNSBGZWIgMTEsMC4wCisxMyxTdW4gNiBGZWIgMTEsMC4wCisxNCxNb24gNyBGZWIgMTEsMC4wCisxNSxUdWUgOCBGZWIgMTEsMC4wCisxNixXZWQgOSBGZWIgMTEsMC4wCisxNyxUaHUgMTAgRmViIDExLDAuMAorMTgsRnJpIDExIEZlYiAxMSwwLjAKKzE5LFNhdCAxMiBGZWIgMTEsMC4wCisyMCxTdW4gMTMgRmViIDExLDAuMAorMjEsTW9uIDE0IEZlYiAxMSwwLjAKKzIyLFR1ZSAxNSBGZWIgMTEsMC4wCisyMyxXZWQgMTYgRmViIDExLDAuMAorMjQsVGh1IDE3IEZlYiAxMSwwLjAKKzI1LEZyaSAxOCBGZWIgMTEsMC4wCisyNixTYXQgMTkgRmViIDExLDAuMAorMjcsU3VuIDIwIEZlYiAxMSwwLjAKKzI4LE1vbiAyMSBGZWIgMTEsMC4wCisyOSxUdWUgMjIgRmViIDExLDAuMAorMzAsV2VkIDIzIEZlYiAxMSwwLjAKKzMxLFRodSAyNCBGZWIgMTEsMC4wCiszMixGcmkgMjUgRmViIDExLDAuMApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTSVN0YXRlc09ubHlfUktfUmVmZXJlbmNlL2F1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwvaHVtYW4vRGVhdGhzXzEuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTSVN0YXRlc09ubHlfUktfUmVmZXJlbmNlL2F1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwvaHVtYW4vRGVhdGhzXzEuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ3YTg0M2YKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNJU3RhdGVzT25seV9SS19SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9odW1hbi9EZWF0aHNfMS5jc3YKQEAgLTAsMCArMSwzMyBAQAoraXRlcmF0aW9uLHRpbWUsVVMtQUssVVMtQUwsVVMtQVIsVVMtQVosVVMtQ0EsVVMtQ08sVVMtQ1QsVVMtREMsVVMtREUsVVMtRkwsVVMtR0EsVVMtSEksVVMtSUEsVVMtSUQsVVMtSUwsVVMtSU4sVVMtS1MsVVMtS1ksVVMtTEEsVVMtTUEsVVMtTUQsVVMtTUUsVVMtTUksVVMtTU4sVVMtTU8sVVMtTVMsVVMtTVQsVVMtTkMsVVMtTkQsVVMtTkUsVVMtTkgsVVMtTkosVVMtTk0sVVMtTlYsVVMtTlksVVMtT0gsVVMtT0ssVVMtT1IsVVMtUEEsVVMtUkksVVMtU0MsVVMtU0QsVVMtVE4sVVMtVFgsVVMtVVQsVVMtVkEsVVMtVlQsVVMtV0EsVVMtV0ksVVMtV1YsVVMtV1kKKzEsVHVlIDI1IEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMixXZWQgMjYgSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCiszLFRodSAyNyBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzQsRnJpIDI4IEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorNSxTYXQgMjkgSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCis2LFN1biAzMCBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzcsTW9uIDMxIEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorOCxUdWUgMSBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzksV2VkIDIgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxMCxUaHUgMyBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzExLEZyaSA0IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTIsU2F0IDUgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxMyxTdW4gNiBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzE0LE1vbiA3IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTUsVHVlIDggRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxNixXZWQgOSBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzE3LFRodSAxMCBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzE4LEZyaSAxMSBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzE5LFNhdCAxMiBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzIwLFN1biAxMyBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzIxLE1vbiAxNCBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzIyLFR1ZSAxNSBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzIzLFdlZCAxNiBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzI0LFRodSAxNyBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzI1LEZyaSAxOCBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzI2LFNhdCAxOSBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzI3LFN1biAyMCBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzI4LE1vbiAyMSBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzI5LFR1ZSAyMiBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzMwLFdlZCAyMyBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzMxLFRodSAyNCBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzMyLEZyaSAyNSBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0lTdGF0ZXNPbmx5X1JLX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL2h1bWFuL0RlbnNpdHlfMC5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNJU3RhdGVzT25seV9SS19SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9odW1hbi9EZW5zaXR5XzAuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjExMmU4YjgKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNJU3RhdGVzT25seV9SS19SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9odW1hbi9EZW5zaXR5XzAuY3N2CkBAIC0wLDAgKzEsMzMgQEAKK2l0ZXJhdGlvbix0aW1lLHN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL25vZGUvdHJhbnNwb3J0L3BpcGUvVVNBCisxLFR1ZSAyNSBKYW4gMTEsMC4wCisyLFdlZCAyNiBKYW4gMTEsMC4wCiszLFRodSAyNyBKYW4gMTEsMC4wCis0LEZyaSAyOCBKYW4gMTEsMC4wCis1LFNhdCAyOSBKYW4gMTEsMC4wCis2LFN1biAzMCBKYW4gMTEsMC4wCis3LE1vbiAzMSBKYW4gMTEsMC4wCis4LFR1ZSAxIEZlYiAxMSwwLjAKKzksV2VkIDIgRmViIDExLDAuMAorMTAsVGh1IDMgRmViIDExLDAuMAorMTEsRnJpIDQgRmViIDExLDAuMAorMTIsU2F0IDUgRmViIDExLDAuMAorMTMsU3VuIDYgRmViIDExLDAuMAorMTQsTW9uIDcgRmViIDExLDAuMAorMTUsVHVlIDggRmViIDExLDAuMAorMTYsV2VkIDkgRmViIDExLDAuMAorMTcsVGh1IDEwIEZlYiAxMSwwLjAKKzE4LEZyaSAxMSBGZWIgMTEsMC4wCisxOSxTYXQgMTIgRmViIDExLDAuMAorMjAsU3VuIDEzIEZlYiAxMSwwLjAKKzIxLE1vbiAxNCBGZWIgMTEsMC4wCisyMixUdWUgMTUgRmViIDExLDAuMAorMjMsV2VkIDE2IEZlYiAxMSwwLjAKKzI0LFRodSAxNyBGZWIgMTEsMC4wCisyNSxGcmkgMTggRmViIDExLDAuMAorMjYsU2F0IDE5IEZlYiAxMSwwLjAKKzI3LFN1biAyMCBGZWIgMTEsMC4wCisyOCxNb24gMjEgRmViIDExLDAuMAorMjksVHVlIDIyIEZlYiAxMSwwLjAKKzMwLFdlZCAyMyBGZWIgMTEsMC4wCiszMSxUaHUgMjQgRmViIDExLDAuMAorMzIsRnJpIDI1IEZlYiAxMSwwLjAKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0lTdGF0ZXNPbmx5X1JLX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL2h1bWFuL0RlbnNpdHlfMS5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNJU3RhdGVzT25seV9SS19SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9odW1hbi9EZW5zaXR5XzEuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY0MThiNzIKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNJU3RhdGVzT25seV9SS19SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9odW1hbi9EZW5zaXR5XzEuY3N2CkBAIC0wLDAgKzEsMzMgQEAKK2l0ZXJhdGlvbix0aW1lLFVTLUFLLFVTLUFMLFVTLUFSLFVTLUFaLFVTLUNBLFVTLUNPLFVTLUNULFVTLURDLFVTLURFLFVTLUZMLFVTLUdBLFVTLUhJLFVTLUlBLFVTLUlELFVTLUlMLFVTLUlOLFVTLUtTLFVTLUtZLFVTLUxBLFVTLU1BLFVTLU1ELFVTLU1FLFVTLU1JLFVTLU1OLFVTLU1PLFVTLU1TLFVTLU1ULFVTLU5DLFVTLU5ELFVTLU5FLFVTLU5ILFVTLU5KLFVTLU5NLFVTLU5WLFVTLU5ZLFVTLU9ILFVTLU9LLFVTLU9SLFVTLVBBLFVTLVJJLFVTLVNDLFVTLVNELFVTLVROLFVTLVRYLFVTLVVULFVTLVZBLFVTLVZULFVTLVdBLFVTLVdJLFVTLVdWLFVTLVdZCisxLFR1ZSAyNSBKYW4gMTEsMC45NDUyMTc3NjkzODAwMjMzLDg0LjgzNzUyNjUzMTQwMDI0LDUwLjI3MjA4MzAyODg1NjMzLDQ1LjAwNjIxNTAwNDk2MDYsMjA2LjkxODUzNzg2ODgwMTIsNDEuMzIxMTAxNzc0MTA1NzM1LDYxNC4zNTM2NDY2MzQ3ODQ1LDgzNzAuNzc4NDYwNjM3OTg2LDMxNC43OTEwODMzMjk2NTA4NiwyNDMuMDYxMDI0MzMzMDU0MTgsMTM3Ljc2MTYyNzAxMTc2NjMsMTEwLjgzNTE2NzU2OTYwNDkyLDUyLjAwMzYxNDYxNTIwMDc1LDE1LjQ4MzQ0ODE0MzE2MzIsMjE0LjQ0MjMwMjU4NTI5OTIyLDE2Ni45NjQ5NjQ1OTI3OTU4NywzMi42NzUyNzA0NjQ5MzI3OCwxMDAuMDIxNDU1NjA1NzAzODgsODYuMjA3NTk3NjUxOTkyNTksNjAxLjU0OTU2NTczMzEzNzUsNDI2LjkwNTk4OTM1NDEyMjE0LDM2LjAzMDM5NzM2MTU2NzgsMTAyLjc1ODkzMDIzNDA2MzM5LDU2LjU4NTQ5NTA3MjU3MjI2LDgwLjI3MDY2MDQ1MTI2OTA4LDU4LjczNzI4NzYyOTg4NTQxLDYuMTM1NjExMjI1MDYxNjE1NSwxNDkuNTY0MDI1NDYyNjE1LDkuMDgzNDc4MTgyODkxMzUsMjIuMTIyNTY2MDM1Mjc3MTYzLDEzMi4xNzA0NzM4MjEyMjIzNyw5NjQuODA0NTU4OTUzMzY3MiwxNC45NjA1NTQxNTMyMDQ3MDIsMTguMDczODQzNzczMjUzNjI1LDM0Ny44MzQ0NjM2NzAzNTcxLDI1My4yNzc1MzEwMTUxMjc3NSw0OS4zNjY4NTc3MTExOTM5NSwzNC43NzcxNTczNzU2Nzg3OSwyNjYuNjU5MjExODUwODEyMiw2NzguNTAxNjY2NjEyNzMxLDEyNS4yOTYyODE3MjIxNjI4OSw5Ljc4ODM2MDQ0MDE2MDA3NSwxMzQuOTk4NjEzMDY0NDM0NzIsNzcuNjM3MDQwNTAwNTA5MywyNi4zMDM4ODQyODIwMzMwOTYsMTY1LjQ4NTY0MzIxNDgzNTE0LDYzLjMyNTQxNDU0MDQ4NDY1LDgyLjY2NjkxMTA4MTE3Nzk3LDgxLjg5MDg5MzQ2NzkwNDczLDc0LjYzMzE3ODM3MjM4MTc0LDUuMDQ4MTk1NzcxNjI5MjEKKzIsV2VkIDI2IEphbiAxMSwwLjk0NTIxNzc2OTM4MDAyMzMsODQuODM3NTI2NTMxNDAwMjQsNTAuMjcyMDgzMDI4ODU2MzMsNDUuMDA2MjE1MDA0OTYwNiwyMDYuOTE4NTM3ODY4ODAxMiw0MS4zMjExMDE3NzQxMDU3MzUsNjE0LjM1MzY0NjYzNDc4NDUsODM3MC43Nzg0NjA2Mzc5ODYsMzE0Ljc5MTA4MzMyOTY1MDg2LDI0My4wNjEwMjQzMzMwNTQxOCwxMzcuNzYxNjI3MDExNzY2MywxMTAuODM1MTY3NTY5NjA0OTIsNTIuMDAzNjE0NjE1MjAwNzUsMTUuNDgzNDQ4MTQzMTYzMiwyMTQuNDQyMzAyNTg1Mjk5MjIsMTY2Ljk2NDk2NDU5Mjc5NTg3LDMyLjY3NTI3MDQ2NDkzMjc4LDEwMC4wMjE0NTU2MDU3MDM4OCw4Ni4yMDc1OTc2NTE5OTI1OSw2MDEuNTQ5NTY1NzMzMTM3NSw0MjYuOTA1OTg5MzU0MTIyMTQsMzYuMDMwMzk3MzYxNTY3OCwxMDIuNzU4OTMwMjM0MDYzMzksNTYuNTg1NDk1MDcyNTcyMjYsODAuMjcwNjYwNDUxMjY5MDgsNTguNzM3Mjg3NjI5ODg1NDEsNi4xMzU2MTEyMjUwNjE2MTU1LDE0OS41NjQwMjU0NjI2MTUsOS4wODM0NzgxODI4OTEzNSwyMi4xMjI1NjYwMzUyNzcxNjMsMTMyLjE3MDQ3MzgyMTIyMjM3LDk2NC44MDQ1NTg5NTMzNjcyLDE0Ljk2MDU1NDE1MzIwNDcwMiwxOC4wNzM4NDM3NzMyNTM2MjUsMzQ3LjgzNDQ2MzY3MDM1NzEsMjUzLjI3NzUzMTAxNTEyNzc1LDQ5LjM2Njg1NzcxMTE5Mzk1LDM0Ljc3NzE1NzM3NTY3ODc5LDI2Ni42NTkyMTE4NTA4MTIyLDY3OC41MDE2NjY2MTI3MzEsMTI1LjI5NjI4MTcyMjE2Mjg5LDkuNzg4MzYwNDQwMTYwMDc1LDEzNC45OTg2MTMwNjQ0MzQ3Miw3Ny42MzcwNDA1MDA1MDkzLDI2LjMwMzg4NDI4MjAzMzA5NiwxNjUuNDg1NjQzMjE0ODM1MTQsNjMuMzI1NDE0NTQwNDg0NjUsODIuNjY2OTExMDgxMTc3OTcsODEuODkwODkzNDY3OTA0NzMsNzQuNjMzMTc4MzcyMzgxNzQsNS4wNDgxOTU3NzE2MjkyMQorMyxUaHUgMjcgSmFuIDExLDAuOTQ1MjE3NzY5MzgwMDIzMyw4NC44Mzc1MjY1MzE0MDAyNCw1MC4yNzIwODMwMjg4NTYzMyw0NS4wMDYyMTUwMDQ5NjA2LDIwNi45MTg1Mzc4Njg4MDEyLDQxLjMyMTEwMTc3NDEwNTczNSw2MTQuMzUzNjQ2NjM0Nzg0NSw4MzcwLjc3ODQ2MDYzNzk4NiwzMTQuNzkxMDgzMzI5NjUwODYsMjQzLjA2MTAyNDMzMzA1NDE4LDEzNy43NjE2MjcwMTE3NjYzLDExMC44MzUxNjc1Njk2MDQ5Miw1Mi4wMDM2MTQ2MTUyMDA3NSwxNS40ODM0NDgxNDMxNjMyLDIxNC40NDIzMDI1ODUyOTkyMiwxNjYuOTY0OTY0NTkyNzk1ODcsMzIuNjc1MjcwNDY0OTMyNzgsMTAwLjAyMTQ1NTYwNTcwMzg4LDg2LjIwNzU5NzY1MTk5MjU5LDYwMS41NDk1NjU3MzMxMzc1LDQyNi45MDU5ODkzNTQxMjIxNCwzNi4wMzAzOTczNjE1Njc4LDEwMi43NTg5MzAyMzQwNjMzOSw1Ni41ODU0OTUwNzI1NzIyNiw4MC4yNzA2NjA0NTEyNjkwOCw1OC43MzcyODc2Mjk4ODU0MSw2LjEzNTYxMTIyNTA2MTYxNTUsMTQ5LjU2NDAyNTQ2MjYxNSw5LjA4MzQ3ODE4Mjg5MTM1LDIyLjEyMjU2NjAzNTI3NzE2MywxMzIuMTcwNDczODIxMjIyMzcsOTY0LjgwNDU1ODk1MzM2NzIsMTQuOTYwNTU0MTUzMjA0NzAyLDE4LjA3Mzg0Mzc3MzI1MzYyNSwzNDcuODM0NDYzNjcwMzU3MSwyNTMuMjc3NTMxMDE1MTI3NzUsNDkuMzY2ODU3NzExMTkzOTUsMzQuNzc3MTU3Mzc1Njc4NzksMjY2LjY1OTIxMTg1MDgxMjIsNjc4LjUwMTY2NjYxMjczMSwxMjUuMjk2MjgxNzIyMTYyODksOS43ODgzNjA0NDAxNjAwNzUsMTM0Ljk5ODYxMzA2NDQzNDcyLDc3LjYzNzA0MDUwMDUwOTMsMjYuMzAzODg0MjgyMDMzMDk2LDE2NS40ODU2NDMyMTQ4MzUxNCw2My4zMjU0MTQ1NDA0ODQ2NSw4Mi42NjY5MTEwODExNzc5Nyw4MS44OTA4OTM0Njc5MDQ3Myw3NC42MzMxNzgzNzIzODE3NCw1LjA0ODE5NTc3MTYyOTIxCis0LEZyaSAyOCBKYW4gMTEsMC45NDUyMTc3NjkzODAwMjMzLDg0LjgzNzUyNjUzMTQwMDI0LDUwLjI3MjA4MzAyODg1NjMzLDQ1LjAwNjIxNTAwNDk2MDYsMjA2LjkxODUzNzg2ODgwMTIsNDEuMzIxMTAxNzc0MTA1NzM1LDYxNC4zNTM2NDY2MzQ3ODQ1LDgzNzAuNzc4NDYwNjM3OTg2LDMxNC43OTEwODMzMjk2NTA4NiwyNDMuMDYxMDI0MzMzMDU0MTgsMTM3Ljc2MTYyNzAxMTc2NjMsMTEwLjgzNTE2NzU2OTYwNDkyLDUyLjAwMzYxNDYxNTIwMDc1LDE1LjQ4MzQ0ODE0MzE2MzIsMjE0LjQ0MjMwMjU4NTI5OTIyLDE2Ni45NjQ5NjQ1OTI3OTU4NywzMi42NzUyNzA0NjQ5MzI3OCwxMDAuMDIxNDU1NjA1NzAzODgsODYuMjA3NTk3NjUxOTkyNTksNjAxLjU0OTU2NTczMzEzNzUsNDI2LjkwNTk4OTM1NDEyMjE0LDM2LjAzMDM5NzM2MTU2NzgsMTAyLjc1ODkzMDIzNDA2MzM5LDU2LjU4NTQ5NTA3MjU3MjI2LDgwLjI3MDY2MDQ1MTI2OTA4LDU4LjczNzI4NzYyOTg4NTQxLDYuMTM1NjExMjI1MDYxNjE1NSwxNDkuNTY0MDI1NDYyNjE1LDkuMDgzNDc4MTgyODkxMzUsMjIuMTIyNTY2MDM1Mjc3MTYzLDEzMi4xNzA0NzM4MjEyMjIzNyw5NjQuODA0NTU4OTUzMzY3MiwxNC45NjA1NTQxNTMyMDQ3MDIsMTguMDczODQzNzczMjUzNjI1LDM0Ny44MzQ0NjM2NzAzNTcxLDI1My4yNzc1MzEwMTUxMjc3NSw0OS4zNjY4NTc3MTExOTM5NSwzNC43NzcxNTczNzU2Nzg3OSwyNjYuNjU5MjExODUwODEyMiw2NzguNTAxNjY2NjEyNzMxLDEyNS4yOTYyODE3MjIxNjI4OSw5Ljc4ODM2MDQ0MDE2MDA3NSwxMzQuOTk4NjEzMDY0NDM0NzIsNzcuNjM3MDQwNTAwNTA5MywyNi4zMDM4ODQyODIwMzMwOTYsMTY1LjQ4NTY0MzIxNDgzNTE0LDYzLjMyNTQxNDU0MDQ4NDY1LDgyLjY2NjkxMTA4MTE3Nzk3LDgxLjg5MDg5MzQ2NzkwNDczLDc0LjYzMzE3ODM3MjM4MTc0LDUuMDQ4MTk1NzcxNjI5MjEKKzUsU2F0IDI5IEphbiAxMSwwLjk0NTIxNzc2OTM4MDAyMzMsODQuODM3NTI2NTMxNDAwMjQsNTAuMjcyMDgzMDI4ODU2MzMsNDUuMDA2MjE1MDA0OTYwNiwyMDYuOTE4NTM3ODY4ODAxMiw0MS4zMjExMDE3NzQxMDU3MzUsNjE0LjM1MzY0NjYzNDc4NDUsODM3MC43Nzg0NjA2Mzc5ODYsMzE0Ljc5MTA4MzMyOTY1MDg2LDI0My4wNjEwMjQzMzMwNTQxOCwxMzcuNzYxNjI3MDExNzY2MywxMTAuODM1MTY3NTY5NjA0OTIsNTIuMDAzNjE0NjE1MjAwNzUsMTUuNDgzNDQ4MTQzMTYzMiwyMTQuNDQyMzAyNTg1Mjk5MjIsMTY2Ljk2NDk2NDU5Mjc5NTg3LDMyLjY3NTI3MDQ2NDkzMjc4LDEwMC4wMjE0NTU2MDU3MDM4OCw4Ni4yMDc1OTc2NTE5OTI1OSw2MDEuNTQ5NTY1NzMzMTM3NSw0MjYuOTA1OTg5MzU0MTIyMTQsMzYuMDMwMzk3MzYxNTY3OCwxMDIuNzU4OTMwMjM0MDYzMzksNTYuNTg1NDk1MDcyNTcyMjYsODAuMjcwNjYwNDUxMjY5MDgsNTguNzM3Mjg3NjI5ODg1NDEsNi4xMzU2MTEyMjUwNjE2MTU1LDE0OS41NjQwMjU0NjI2MTUsOS4wODM0NzgxODI4OTEzNSwyMi4xMjI1NjYwMzUyNzcxNjMsMTMyLjE3MDQ3MzgyMTIyMjM3LDk2NC44MDQ1NTg5NTMzNjcyLDE0Ljk2MDU1NDE1MzIwNDcwMiwxOC4wNzM4NDM3NzMyNTM2MjUsMzQ3LjgzNDQ2MzY3MDM1NzEsMjUzLjI3NzUzMTAxNTEyNzc1LDQ5LjM2Njg1NzcxMTE5Mzk1LDM0Ljc3NzE1NzM3NTY3ODc5LDI2Ni42NTkyMTE4NTA4MTIyLDY3OC41MDE2NjY2MTI3MzEsMTI1LjI5NjI4MTcyMjE2Mjg5LDkuNzg4MzYwNDQwMTYwMDc1LDEzNC45OTg2MTMwNjQ0MzQ3Miw3Ny42MzcwNDA1MDA1MDkzLDI2LjMwMzg4NDI4MjAzMzA5NiwxNjUuNDg1NjQzMjE0ODM1MTQsNjMuMzI1NDE0NTQwNDg0NjUsODIuNjY2OTExMDgxMTc3OTcsODEuODkwODkzNDY3OTA0NzMsNzQuNjMzMTc4MzcyMzgxNzQsNS4wNDgxOTU3NzE2MjkyMQorNixTdW4gMzAgSmFuIDExLDAuOTQ1MjE3NzY5MzgwMDIzMyw4NC44Mzc1MjY1MzE0MDAyNCw1MC4yNzIwODMwMjg4NTYzMyw0NS4wMDYyMTUwMDQ5NjA2LDIwNi45MTg1Mzc4Njg4MDEyLDQxLjMyMTEwMTc3NDEwNTczNSw2MTQuMzUzNjQ2NjM0Nzg0NSw4MzcwLjc3ODQ2MDYzNzk4NiwzMTQuNzkxMDgzMzI5NjUwODYsMjQzLjA2MTAyNDMzMzA1NDE4LDEzNy43NjE2MjcwMTE3NjYzLDExMC44MzUxNjc1Njk2MDQ5Miw1Mi4wMDM2MTQ2MTUyMDA3NSwxNS40ODM0NDgxNDMxNjMyLDIxNC40NDIzMDI1ODUyOTkyMiwxNjYuOTY0OTY0NTkyNzk1ODcsMzIuNjc1MjcwNDY0OTMyNzgsMTAwLjAyMTQ1NTYwNTcwMzg4LDg2LjIwNzU5NzY1MTk5MjU5LDYwMS41NDk1NjU3MzMxMzc1LDQyNi45MDU5ODkzNTQxMjIxNCwzNi4wMzAzOTczNjE1Njc4LDEwMi43NTg5MzAyMzQwNjMzOSw1Ni41ODU0OTUwNzI1NzIyNiw4MC4yNzA2NjA0NTEyNjkwOCw1OC43MzcyODc2Mjk4ODU0MSw2LjEzNTYxMTIyNTA2MTYxNTUsMTQ5LjU2NDAyNTQ2MjYxNSw5LjA4MzQ3ODE4Mjg5MTM1LDIyLjEyMjU2NjAzNTI3NzE2MywxMzIuMTcwNDczODIxMjIyMzcsOTY0LjgwNDU1ODk1MzM2NzIsMTQuOTYwNTU0MTUzMjA0NzAyLDE4LjA3Mzg0Mzc3MzI1MzYyNSwzNDcuODM0NDYzNjcwMzU3MSwyNTMuMjc3NTMxMDE1MTI3NzUsNDkuMzY2ODU3NzExMTkzOTUsMzQuNzc3MTU3Mzc1Njc4NzksMjY2LjY1OTIxMTg1MDgxMjIsNjc4LjUwMTY2NjYxMjczMSwxMjUuMjk2MjgxNzIyMTYyODksOS43ODgzNjA0NDAxNjAwNzUsMTM0Ljk5ODYxMzA2NDQzNDcyLDc3LjYzNzA0MDUwMDUwOTMsMjYuMzAzODg0MjgyMDMzMDk2LDE2NS40ODU2NDMyMTQ4MzUxNCw2My4zMjU0MTQ1NDA0ODQ2NSw4Mi42NjY5MTEwODExNzc5Nyw4MS44OTA4OTM0Njc5MDQ3Myw3NC42MzMxNzgzNzIzODE3NCw1LjA0ODE5NTc3MTYyOTIxCis3LE1vbiAzMSBKYW4gMTEsMC45NDUyMTc3NjkzODAwMjMzLDg0LjgzNzUyNjUzMTQwMDI0LDUwLjI3MjA4MzAyODg1NjMzLDQ1LjAwNjIxNTAwNDk2MDYsMjA2LjkxODUzNzg2ODgwMTIsNDEuMzIxMTAxNzc0MTA1NzM1LDYxNC4zNTM2NDY2MzQ3ODQ1LDgzNzAuNzc4NDYwNjM3OTg2LDMxNC43OTEwODMzMjk2NTA4NiwyNDMuMDYxMDI0MzMzMDU0MTgsMTM3Ljc2MTYyNzAxMTc2NjMsMTEwLjgzNTE2NzU2OTYwNDkyLDUyLjAwMzYxNDYxNTIwMDc1LDE1LjQ4MzQ0ODE0MzE2MzIsMjE0LjQ0MjMwMjU4NTI5OTIyLDE2Ni45NjQ5NjQ1OTI3OTU4NywzMi42NzUyNzA0NjQ5MzI3OCwxMDAuMDIxNDU1NjA1NzAzODgsODYuMjA3NTk3NjUxOTkyNTksNjAxLjU0OTU2NTczMzEzNzUsNDI2LjkwNTk4OTM1NDEyMjE0LDM2LjAzMDM5NzM2MTU2NzgsMTAyLjc1ODkzMDIzNDA2MzM5LDU2LjU4NTQ5NTA3MjU3MjI2LDgwLjI3MDY2MDQ1MTI2OTA4LDU4LjczNzI4NzYyOTg4NTQxLDYuMTM1NjExMjI1MDYxNjE1NSwxNDkuNTY0MDI1NDYyNjE1LDkuMDgzNDc4MTgyODkxMzUsMjIuMTIyNTY2MDM1Mjc3MTYzLDEzMi4xNzA0NzM4MjEyMjIzNyw5NjQuODA0NTU4OTUzMzY3MiwxNC45NjA1NTQxNTMyMDQ3MDIsMTguMDczODQzNzczMjUzNjI1LDM0Ny44MzQ0NjM2NzAzNTcxLDI1My4yNzc1MzEwMTUxMjc3NSw0OS4zNjY4NTc3MTExOTM5NSwzNC43NzcxNTczNzU2Nzg3OSwyNjYuNjU5MjExODUwODEyMiw2NzguNTAxNjY2NjEyNzMxLDEyNS4yOTYyODE3MjIxNjI4OSw5Ljc4ODM2MDQ0MDE2MDA3NSwxMzQuOTk4NjEzMDY0NDM0NzIsNzcuNjM3MDQwNTAwNTA5MywyNi4zMDM4ODQyODIwMzMwOTYsMTY1LjQ4NTY0MzIxNDgzNTE0LDYzLjMyNTQxNDU0MDQ4NDY1LDgyLjY2NjkxMTA4MTE3Nzk3LDgxLjg5MDg5MzQ2NzkwNDczLDc0LjYzMzE3ODM3MjM4MTc0LDUuMDQ4MTk1NzcxNjI5MjEKKzgsVHVlIDEgRmViIDExLDAuOTQ1MjE3NzY5MzgwMDIzMyw4NC44Mzc1MjY1MzE0MDAyNCw1MC4yNzIwODMwMjg4NTYzMyw0NS4wMDYyMTUwMDQ5NjA2LDIwNi45MTg1Mzc4Njg4MDEyLDQxLjMyMTEwMTc3NDEwNTczNSw2MTQuMzUzNjQ2NjM0Nzg0NSw4MzcwLjc3ODQ2MDYzNzk4NiwzMTQuNzkxMDgzMzI5NjUwODYsMjQzLjA2MTAyNDMzMzA1NDE4LDEzNy43NjE2MjcwMTE3NjYzLDExMC44MzUxNjc1Njk2MDQ5Miw1Mi4wMDM2MTQ2MTUyMDA3NSwxNS40ODM0NDgxNDMxNjMyLDIxNC40NDIzMDI1ODUyOTkyMiwxNjYuOTY0OTY0NTkyNzk1ODcsMzIuNjc1MjcwNDY0OTMyNzgsMTAwLjAyMTQ1NTYwNTcwMzg4LDg2LjIwNzU5NzY1MTk5MjU5LDYwMS41NDk1NjU3MzMxMzc1LDQyNi45MDU5ODkzNTQxMjIxNCwzNi4wMzAzOTczNjE1Njc4LDEwMi43NTg5MzAyMzQwNjMzOSw1Ni41ODU0OTUwNzI1NzIyNiw4MC4yNzA2NjA0NTEyNjkwOCw1OC43MzcyODc2Mjk4ODU0MSw2LjEzNTYxMTIyNTA2MTYxNTUsMTQ5LjU2NDAyNTQ2MjYxNSw5LjA4MzQ3ODE4Mjg5MTM1LDIyLjEyMjU2NjAzNTI3NzE2MywxMzIuMTcwNDczODIxMjIyMzcsOTY0LjgwNDU1ODk1MzM2NzIsMTQuOTYwNTU0MTUzMjA0NzAyLDE4LjA3Mzg0Mzc3MzI1MzYyNSwzNDcuODM0NDYzNjcwMzU3MSwyNTMuMjc3NTMxMDE1MTI3NzUsNDkuMzY2ODU3NzExMTkzOTUsMzQuNzc3MTU3Mzc1Njc4NzksMjY2LjY1OTIxMTg1MDgxMjIsNjc4LjUwMTY2NjYxMjczMSwxMjUuMjk2MjgxNzIyMTYyODksOS43ODgzNjA0NDAxNjAwNzUsMTM0Ljk5ODYxMzA2NDQzNDcyLDc3LjYzNzA0MDUwMDUwOTMsMjYuMzAzODg0MjgyMDMzMDk2LDE2NS40ODU2NDMyMTQ4MzUxNCw2My4zMjU0MTQ1NDA0ODQ2NSw4Mi42NjY5MTEwODExNzc5Nyw4MS44OTA4OTM0Njc5MDQ3Myw3NC42MzMxNzgzNzIzODE3NCw1LjA0ODE5NTc3MTYyOTIxCis5LFdlZCAyIEZlYiAxMSwwLjk0NTIxNzc2OTM4MDAyMzMsODQuODM3NTI2NTMxNDAwMjQsNTAuMjcyMDgzMDI4ODU2MzMsNDUuMDA2MjE1MDA0OTYwNiwyMDYuOTE4NTM3ODY4ODAxMiw0MS4zMjExMDE3NzQxMDU3MzUsNjE0LjM1MzY0NjYzNDc4NDUsODM3MC43Nzg0NjA2Mzc5ODYsMzE0Ljc5MTA4MzMyOTY1MDg2LDI0My4wNjEwMjQzMzMwNTQxOCwxMzcuNzYxNjI3MDExNzY2MywxMTAuODM1MTY3NTY5NjA0OTIsNTIuMDAzNjE0NjE1MjAwNzUsMTUuNDgzNDQ4MTQzMTYzMiwyMTQuNDQyMzAyNTg1Mjk5MjIsMTY2Ljk2NDk2NDU5Mjc5NTg3LDMyLjY3NTI3MDQ2NDkzMjc4LDEwMC4wMjE0NTU2MDU3MDM4OCw4Ni4yMDc1OTc2NTE5OTI1OSw2MDEuNTQ5NTY1NzMzMTM3NSw0MjYuOTA1OTg5MzU0MTIyMTQsMzYuMDMwMzk3MzYxNTY3OCwxMDIuNzU4OTMwMjM0MDYzMzksNTYuNTg1NDk1MDcyNTcyMjYsODAuMjcwNjYwNDUxMjY5MDgsNTguNzM3Mjg3NjI5ODg1NDEsNi4xMzU2MTEyMjUwNjE2MTU1LDE0OS41NjQwMjU0NjI2MTUsOS4wODM0NzgxODI4OTEzNSwyMi4xMjI1NjYwMzUyNzcxNjMsMTMyLjE3MDQ3MzgyMTIyMjM3LDk2NC44MDQ1NTg5NTMzNjcyLDE0Ljk2MDU1NDE1MzIwNDcwMiwxOC4wNzM4NDM3NzMyNTM2MjUsMzQ3LjgzNDQ2MzY3MDM1NzEsMjUzLjI3NzUzMTAxNTEyNzc1LDQ5LjM2Njg1NzcxMTE5Mzk1LDM0Ljc3NzE1NzM3NTY3ODc5LDI2Ni42NTkyMTE4NTA4MTIyLDY3OC41MDE2NjY2MTI3MzEsMTI1LjI5NjI4MTcyMjE2Mjg5LDkuNzg4MzYwNDQwMTYwMDc1LDEzNC45OTg2MTMwNjQ0MzQ3Miw3Ny42MzcwNDA1MDA1MDkzLDI2LjMwMzg4NDI4MjAzMzA5NiwxNjUuNDg1NjQzMjE0ODM1MTQsNjMuMzI1NDE0NTQwNDg0NjUsODIuNjY2OTExMDgxMTc3OTcsODEuODkwODkzNDY3OTA0NzMsNzQuNjMzMTc4MzcyMzgxNzQsNS4wNDgxOTU3NzE2MjkyMQorMTAsVGh1IDMgRmViIDExLDAuOTQ1MjE3NzY5MzgwMDIzMyw4NC44Mzc1MjY1MzE0MDAyNCw1MC4yNzIwODMwMjg4NTYzMyw0NS4wMDYyMTUwMDQ5NjA2LDIwNi45MTg1Mzc4Njg4MDEyLDQxLjMyMTEwMTc3NDEwNTczNSw2MTQuMzUzNjQ2NjM0Nzg0NSw4MzcwLjc3ODQ2MDYzNzk4NiwzMTQuNzkxMDgzMzI5NjUwODYsMjQzLjA2MTAyNDMzMzA1NDE4LDEzNy43NjE2MjcwMTE3NjYzLDExMC44MzUxNjc1Njk2MDQ5Miw1Mi4wMDM2MTQ2MTUyMDA3NSwxNS40ODM0NDgxNDMxNjMyLDIxNC40NDIzMDI1ODUyOTkyMiwxNjYuOTY0OTY0NTkyNzk1ODcsMzIuNjc1MjcwNDY0OTMyNzgsMTAwLjAyMTQ1NTYwNTcwMzg4LDg2LjIwNzU5NzY1MTk5MjU5LDYwMS41NDk1NjU3MzMxMzc1LDQyNi45MDU5ODkzNTQxMjIxNCwzNi4wMzAzOTczNjE1Njc4LDEwMi43NTg5MzAyMzQwNjMzOSw1Ni41ODU0OTUwNzI1NzIyNiw4MC4yNzA2NjA0NTEyNjkwOCw1OC43MzcyODc2Mjk4ODU0MSw2LjEzNTYxMTIyNTA2MTYxNTUsMTQ5LjU2NDAyNTQ2MjYxNSw5LjA4MzQ3ODE4Mjg5MTM1LDIyLjEyMjU2NjAzNTI3NzE2MywxMzIuMTcwNDczODIxMjIyMzcsOTY0LjgwNDU1ODk1MzM2NzIsMTQuOTYwNTU0MTUzMjA0NzAyLDE4LjA3Mzg0Mzc3MzI1MzYyNSwzNDcuODM0NDYzNjcwMzU3MSwyNTMuMjc3NTMxMDE1MTI3NzUsNDkuMzY2ODU3NzExMTkzOTUsMzQuNzc3MTU3Mzc1Njc4NzksMjY2LjY1OTIxMTg1MDgxMjIsNjc4LjUwMTY2NjYxMjczMSwxMjUuMjk2MjgxNzIyMTYyODksOS43ODgzNjA0NDAxNjAwNzUsMTM0Ljk5ODYxMzA2NDQzNDcyLDc3LjYzNzA0MDUwMDUwOTMsMjYuMzAzODg0MjgyMDMzMDk2LDE2NS40ODU2NDMyMTQ4MzUxNCw2My4zMjU0MTQ1NDA0ODQ2NSw4Mi42NjY5MTEwODExNzc5Nyw4MS44OTA4OTM0Njc5MDQ3Myw3NC42MzMxNzgzNzIzODE3NCw1LjA0ODE5NTc3MTYyOTIxCisxMSxGcmkgNCBGZWIgMTEsMC45NDUyMTc3NjkzODAwMjMzLDg0LjgzNzUyNjUzMTQwMDI0LDUwLjI3MjA4MzAyODg1NjMzLDQ1LjAwNjIxNTAwNDk2MDYsMjA2LjkxODUzNzg2ODgwMTIsNDEuMzIxMTAxNzc0MTA1NzM1LDYxNC4zNTM2NDY2MzQ3ODQ1LDgzNzAuNzc4NDYwNjM3OTg2LDMxNC43OTEwODMzMjk2NTA4NiwyNDMuMDYxMDI0MzMzMDU0MTgsMTM3Ljc2MTYyNzAxMTc2NjMsMTEwLjgzNTE2NzU2OTYwNDkyLDUyLjAwMzYxNDYxNTIwMDc1LDE1LjQ4MzQ0ODE0MzE2MzIsMjE0LjQ0MjMwMjU4NTI5OTIyLDE2Ni45NjQ5NjQ1OTI3OTU4NywzMi42NzUyNzA0NjQ5MzI3OCwxMDAuMDIxNDU1NjA1NzAzODgsODYuMjA3NTk3NjUxOTkyNTksNjAxLjU0OTU2NTczMzEzNzUsNDI2LjkwNTk4OTM1NDEyMjE0LDM2LjAzMDM5NzM2MTU2NzgsMTAyLjc1ODkzMDIzNDA2MzM5LDU2LjU4NTQ5NTA3MjU3MjI2LDgwLjI3MDY2MDQ1MTI2OTA4LDU4LjczNzI4NzYyOTg4NTQxLDYuMTM1NjExMjI1MDYxNjE1NSwxNDkuNTY0MDI1NDYyNjE1LDkuMDgzNDc4MTgyODkxMzUsMjIuMTIyNTY2MDM1Mjc3MTYzLDEzMi4xNzA0NzM4MjEyMjIzNyw5NjQuODA0NTU4OTUzMzY3MiwxNC45NjA1NTQxNTMyMDQ3MDIsMTguMDczODQzNzczMjUzNjI1LDM0Ny44MzQ0NjM2NzAzNTcxLDI1My4yNzc1MzEwMTUxMjc3NSw0OS4zNjY4NTc3MTExOTM5NSwzNC43NzcxNTczNzU2Nzg3OSwyNjYuNjU5MjExODUwODEyMiw2NzguNTAxNjY2NjEyNzMxLDEyNS4yOTYyODE3MjIxNjI4OSw5Ljc4ODM2MDQ0MDE2MDA3NSwxMzQuOTk4NjEzMDY0NDM0NzIsNzcuNjM3MDQwNTAwNTA5MywyNi4zMDM4ODQyODIwMzMwOTYsMTY1LjQ4NTY0MzIxNDgzNTE0LDYzLjMyNTQxNDU0MDQ4NDY1LDgyLjY2NjkxMTA4MTE3Nzk3LDgxLjg5MDg5MzQ2NzkwNDczLDc0LjYzMzE3ODM3MjM4MTc0LDUuMDQ4MTk1NzcxNjI5MjEKKzEyLFNhdCA1IEZlYiAxMSwwLjk0NTIxNzc2OTM4MDAyMzMsODQuODM3NTI2NTMxNDAwMjQsNTAuMjcyMDgzMDI4ODU2MzMsNDUuMDA2MjE1MDA0OTYwNiwyMDYuOTE4NTM3ODY4ODAxMiw0MS4zMjExMDE3NzQxMDU3MzUsNjE0LjM1MzY0NjYzNDc4NDUsODM3MC43Nzg0NjA2Mzc5ODYsMzE0Ljc5MTA4MzMyOTY1MDg2LDI0My4wNjEwMjQzMzMwNTQxOCwxMzcuNzYxNjI3MDExNzY2MywxMTAuODM1MTY3NTY5NjA0OTIsNTIuMDAzNjE0NjE1MjAwNzUsMTUuNDgzNDQ4MTQzMTYzMiwyMTQuNDQyMzAyNTg1Mjk5MjIsMTY2Ljk2NDk2NDU5Mjc5NTg3LDMyLjY3NTI3MDQ2NDkzMjc4LDEwMC4wMjE0NTU2MDU3MDM4OCw4Ni4yMDc1OTc2NTE5OTI1OSw2MDEuNTQ5NTY1NzMzMTM3NSw0MjYuOTA1OTg5MzU0MTIyMTQsMzYuMDMwMzk3MzYxNTY3OCwxMDIuNzU4OTMwMjM0MDYzMzksNTYuNTg1NDk1MDcyNTcyMjYsODAuMjcwNjYwNDUxMjY5MDgsNTguNzM3Mjg3NjI5ODg1NDEsNi4xMzU2MTEyMjUwNjE2MTU1LDE0OS41NjQwMjU0NjI2MTUsOS4wODM0NzgxODI4OTEzNSwyMi4xMjI1NjYwMzUyNzcxNjMsMTMyLjE3MDQ3MzgyMTIyMjM3LDk2NC44MDQ1NTg5NTMzNjcyLDE0Ljk2MDU1NDE1MzIwNDcwMiwxOC4wNzM4NDM3NzMyNTM2MjUsMzQ3LjgzNDQ2MzY3MDM1NzEsMjUzLjI3NzUzMTAxNTEyNzc1LDQ5LjM2Njg1NzcxMTE5Mzk1LDM0Ljc3NzE1NzM3NTY3ODc5LDI2Ni42NTkyMTE4NTA4MTIyLDY3OC41MDE2NjY2MTI3MzEsMTI1LjI5NjI4MTcyMjE2Mjg5LDkuNzg4MzYwNDQwMTYwMDc1LDEzNC45OTg2MTMwNjQ0MzQ3Miw3Ny42MzcwNDA1MDA1MDkzLDI2LjMwMzg4NDI4MjAzMzA5NiwxNjUuNDg1NjQzMjE0ODM1MTQsNjMuMzI1NDE0NTQwNDg0NjUsODIuNjY2OTExMDgxMTc3OTcsODEuODkwODkzNDY3OTA0NzMsNzQuNjMzMTc4MzcyMzgxNzQsNS4wNDgxOTU3NzE2MjkyMQorMTMsU3VuIDYgRmViIDExLDAuOTQ1MjE3NzY5MzgwMDIzMyw4NC44Mzc1MjY1MzE0MDAyNCw1MC4yNzIwODMwMjg4NTYzMyw0NS4wMDYyMTUwMDQ5NjA2LDIwNi45MTg1Mzc4Njg4MDEyLDQxLjMyMTEwMTc3NDEwNTczNSw2MTQuMzUzNjQ2NjM0Nzg0NSw4MzcwLjc3ODQ2MDYzNzk4NiwzMTQuNzkxMDgzMzI5NjUwODYsMjQzLjA2MTAyNDMzMzA1NDE4LDEzNy43NjE2MjcwMTE3NjYzLDExMC44MzUxNjc1Njk2MDQ5Miw1Mi4wMDM2MTQ2MTUyMDA3NSwxNS40ODM0NDgxNDMxNjMyLDIxNC40NDIzMDI1ODUyOTkyMiwxNjYuOTY0OTY0NTkyNzk1ODcsMzIuNjc1MjcwNDY0OTMyNzgsMTAwLjAyMTQ1NTYwNTcwMzg4LDg2LjIwNzU5NzY1MTk5MjU5LDYwMS41NDk1NjU3MzMxMzc1LDQyNi45MDU5ODkzNTQxMjIxNCwzNi4wMzAzOTczNjE1Njc4LDEwMi43NTg5MzAyMzQwNjMzOSw1Ni41ODU0OTUwNzI1NzIyNiw4MC4yNzA2NjA0NTEyNjkwOCw1OC43MzcyODc2Mjk4ODU0MSw2LjEzNTYxMTIyNTA2MTYxNTUsMTQ5LjU2NDAyNTQ2MjYxNSw5LjA4MzQ3ODE4Mjg5MTM1LDIyLjEyMjU2NjAzNTI3NzE2MywxMzIuMTcwNDczODIxMjIyMzcsOTY0LjgwNDU1ODk1MzM2NzIsMTQuOTYwNTU0MTUzMjA0NzAyLDE4LjA3Mzg0Mzc3MzI1MzYyNSwzNDcuODM0NDYzNjcwMzU3MSwyNTMuMjc3NTMxMDE1MTI3NzUsNDkuMzY2ODU3NzExMTkzOTUsMzQuNzc3MTU3Mzc1Njc4NzksMjY2LjY1OTIxMTg1MDgxMjIsNjc4LjUwMTY2NjYxMjczMSwxMjUuMjk2MjgxNzIyMTYyODksOS43ODgzNjA0NDAxNjAwNzUsMTM0Ljk5ODYxMzA2NDQzNDcyLDc3LjYzNzA0MDUwMDUwOTMsMjYuMzAzODg0MjgyMDMzMDk2LDE2NS40ODU2NDMyMTQ4MzUxNCw2My4zMjU0MTQ1NDA0ODQ2NSw4Mi42NjY5MTEwODExNzc5Nyw4MS44OTA4OTM0Njc5MDQ3Myw3NC42MzMxNzgzNzIzODE3NCw1LjA0ODE5NTc3MTYyOTIxCisxNCxNb24gNyBGZWIgMTEsMC45NDUyMTc3NjkzODAwMjMzLDg0LjgzNzUyNjUzMTQwMDI0LDUwLjI3MjA4MzAyODg1NjMzLDQ1LjAwNjIxNTAwNDk2MDYsMjA2LjkxODUzNzg2ODgwMTIsNDEuMzIxMTAxNzc0MTA1NzM1LDYxNC4zNTM2NDY2MzQ3ODQ1LDgzNzAuNzc4NDYwNjM3OTg2LDMxNC43OTEwODMzMjk2NTA4NiwyNDMuMDYxMDI0MzMzMDU0MTgsMTM3Ljc2MTYyNzAxMTc2NjMsMTEwLjgzNTE2NzU2OTYwNDkyLDUyLjAwMzYxNDYxNTIwMDc1LDE1LjQ4MzQ0ODE0MzE2MzIsMjE0LjQ0MjMwMjU4NTI5OTIyLDE2Ni45NjQ5NjQ1OTI3OTU4NywzMi42NzUyNzA0NjQ5MzI3OCwxMDAuMDIxNDU1NjA1NzAzODgsODYuMjA3NTk3NjUxOTkyNTksNjAxLjU0OTU2NTczMzEzNzUsNDI2LjkwNTk4OTM1NDEyMjE0LDM2LjAzMDM5NzM2MTU2NzgsMTAyLjc1ODkzMDIzNDA2MzM5LDU2LjU4NTQ5NTA3MjU3MjI2LDgwLjI3MDY2MDQ1MTI2OTA4LDU4LjczNzI4NzYyOTg4NTQxLDYuMTM1NjExMjI1MDYxNjE1NSwxNDkuNTY0MDI1NDYyNjE1LDkuMDgzNDc4MTgyODkxMzUsMjIuMTIyNTY2MDM1Mjc3MTYzLDEzMi4xNzA0NzM4MjEyMjIzNyw5NjQuODA0NTU4OTUzMzY3MiwxNC45NjA1NTQxNTMyMDQ3MDIsMTguMDczODQzNzczMjUzNjI1LDM0Ny44MzQ0NjM2NzAzNTcxLDI1My4yNzc1MzEwMTUxMjc3NSw0OS4zNjY4NTc3MTExOTM5NSwzNC43NzcxNTczNzU2Nzg3OSwyNjYuNjU5MjExODUwODEyMiw2NzguNTAxNjY2NjEyNzMxLDEyNS4yOTYyODE3MjIxNjI4OSw5Ljc4ODM2MDQ0MDE2MDA3NSwxMzQuOTk4NjEzMDY0NDM0NzIsNzcuNjM3MDQwNTAwNTA5MywyNi4zMDM4ODQyODIwMzMwOTYsMTY1LjQ4NTY0MzIxNDgzNTE0LDYzLjMyNTQxNDU0MDQ4NDY1LDgyLjY2NjkxMTA4MTE3Nzk3LDgxLjg5MDg5MzQ2NzkwNDczLDc0LjYzMzE3ODM3MjM4MTc0LDUuMDQ4MTk1NzcxNjI5MjEKKzE1LFR1ZSA4IEZlYiAxMSwwLjk0NTIxNzc2OTM4MDAyMzMsODQuODM3NTI2NTMxNDAwMjQsNTAuMjcyMDgzMDI4ODU2MzMsNDUuMDA2MjE1MDA0OTYwNiwyMDYuOTE4NTM3ODY4ODAxMiw0MS4zMjExMDE3NzQxMDU3MzUsNjE0LjM1MzY0NjYzNDc4NDUsODM3MC43Nzg0NjA2Mzc5ODYsMzE0Ljc5MTA4MzMyOTY1MDg2LDI0My4wNjEwMjQzMzMwNTQxOCwxMzcuNzYxNjI3MDExNzY2MywxMTAuODM1MTY3NTY5NjA0OTIsNTIuMDAzNjE0NjE1MjAwNzUsMTUuNDgzNDQ4MTQzMTYzMiwyMTQuNDQyMzAyNTg1Mjk5MjIsMTY2Ljk2NDk2NDU5Mjc5NTg3LDMyLjY3NTI3MDQ2NDkzMjc4LDEwMC4wMjE0NTU2MDU3MDM4OCw4Ni4yMDc1OTc2NTE5OTI1OSw2MDEuNTQ5NTY1NzMzMTM3NSw0MjYuOTA1OTg5MzU0MTIyMTQsMzYuMDMwMzk3MzYxNTY3OCwxMDIuNzU4OTMwMjM0MDYzMzksNTYuNTg1NDk1MDcyNTcyMjYsODAuMjcwNjYwNDUxMjY5MDgsNTguNzM3Mjg3NjI5ODg1NDEsNi4xMzU2MTEyMjUwNjE2MTU1LDE0OS41NjQwMjU0NjI2MTUsOS4wODM0NzgxODI4OTEzNSwyMi4xMjI1NjYwMzUyNzcxNjMsMTMyLjE3MDQ3MzgyMTIyMjM3LDk2NC44MDQ1NTg5NTMzNjcyLDE0Ljk2MDU1NDE1MzIwNDcwMiwxOC4wNzM4NDM3NzMyNTM2MjUsMzQ3LjgzNDQ2MzY3MDM1NzEsMjUzLjI3NzUzMTAxNTEyNzc1LDQ5LjM2Njg1NzcxMTE5Mzk1LDM0Ljc3NzE1NzM3NTY3ODc5LDI2Ni42NTkyMTE4NTA4MTIyLDY3OC41MDE2NjY2MTI3MzEsMTI1LjI5NjI4MTcyMjE2Mjg5LDkuNzg4MzYwNDQwMTYwMDc1LDEzNC45OTg2MTMwNjQ0MzQ3Miw3Ny42MzcwNDA1MDA1MDkzLDI2LjMwMzg4NDI4MjAzMzA5NiwxNjUuNDg1NjQzMjE0ODM1MTQsNjMuMzI1NDE0NTQwNDg0NjUsODIuNjY2OTExMDgxMTc3OTcsODEuODkwODkzNDY3OTA0NzMsNzQuNjMzMTc4MzcyMzgxNzQsNS4wNDgxOTU3NzE2MjkyMQorMTYsV2VkIDkgRmViIDExLDAuOTQ1MjE3NzY5MzgwMDIzMyw4NC44Mzc1MjY1MzE0MDAyNCw1MC4yNzIwODMwMjg4NTYzMyw0NS4wMDYyMTUwMDQ5NjA2LDIwNi45MTg1Mzc4Njg4MDEyLDQxLjMyMTEwMTc3NDEwNTczNSw2MTQuMzUzNjQ2NjM0Nzg0NSw4MzcwLjc3ODQ2MDYzNzk4NiwzMTQuNzkxMDgzMzI5NjUwODYsMjQzLjA2MTAyNDMzMzA1NDE4LDEzNy43NjE2MjcwMTE3NjYzLDExMC44MzUxNjc1Njk2MDQ5Miw1Mi4wMDM2MTQ2MTUyMDA3NSwxNS40ODM0NDgxNDMxNjMyLDIxNC40NDIzMDI1ODUyOTkyMiwxNjYuOTY0OTY0NTkyNzk1ODcsMzIuNjc1MjcwNDY0OTMyNzgsMTAwLjAyMTQ1NTYwNTcwMzg4LDg2LjIwNzU5NzY1MTk5MjU5LDYwMS41NDk1NjU3MzMxMzc1LDQyNi45MDU5ODkzNTQxMjIxNCwzNi4wMzAzOTczNjE1Njc4LDEwMi43NTg5MzAyMzQwNjMzOSw1Ni41ODU0OTUwNzI1NzIyNiw4MC4yNzA2NjA0NTEyNjkwOCw1OC43MzcyODc2Mjk4ODU0MSw2LjEzNTYxMTIyNTA2MTYxNTUsMTQ5LjU2NDAyNTQ2MjYxNSw5LjA4MzQ3ODE4Mjg5MTM1LDIyLjEyMjU2NjAzNTI3NzE2MywxMzIuMTcwNDczODIxMjIyMzcsOTY0LjgwNDU1ODk1MzM2NzIsMTQuOTYwNTU0MTUzMjA0NzAyLDE4LjA3Mzg0Mzc3MzI1MzYyNSwzNDcuODM0NDYzNjcwMzU3MSwyNTMuMjc3NTMxMDE1MTI3NzUsNDkuMzY2ODU3NzExMTkzOTUsMzQuNzc3MTU3Mzc1Njc4NzksMjY2LjY1OTIxMTg1MDgxMjIsNjc4LjUwMTY2NjYxMjczMSwxMjUuMjk2MjgxNzIyMTYyODksOS43ODgzNjA0NDAxNjAwNzUsMTM0Ljk5ODYxMzA2NDQzNDcyLDc3LjYzNzA0MDUwMDUwOTMsMjYuMzAzODg0MjgyMDMzMDk2LDE2NS40ODU2NDMyMTQ4MzUxNCw2My4zMjU0MTQ1NDA0ODQ2NSw4Mi42NjY5MTEwODExNzc5Nyw4MS44OTA4OTM0Njc5MDQ3Myw3NC42MzMxNzgzNzIzODE3NCw1LjA0ODE5NTc3MTYyOTIxCisxNyxUaHUgMTAgRmViIDExLDAuOTQ1MjE3NzY5MzgwMDIzMyw4NC44Mzc1MjY1MzE0MDAyNCw1MC4yNzIwODMwMjg4NTYzMyw0NS4wMDYyMTUwMDQ5NjA2LDIwNi45MTg1Mzc4Njg4MDEyLDQxLjMyMTEwMTc3NDEwNTczNSw2MTQuMzUzNjQ2NjM0Nzg0NSw4MzcwLjc3ODQ2MDYzNzk4NiwzMTQuNzkxMDgzMzI5NjUwODYsMjQzLjA2MTAyNDMzMzA1NDE4LDEzNy43NjE2MjcwMTE3NjYzLDExMC44MzUxNjc1Njk2MDQ5Miw1Mi4wMDM2MTQ2MTUyMDA3NSwxNS40ODM0NDgxNDMxNjMyLDIxNC40NDIzMDI1ODUyOTkyMiwxNjYuOTY0OTY0NTkyNzk1ODcsMzIuNjc1MjcwNDY0OTMyNzgsMTAwLjAyMTQ1NTYwNTcwMzg4LDg2LjIwNzU5NzY1MTk5MjU5LDYwMS41NDk1NjU3MzMxMzc1LDQyNi45MDU5ODkzNTQxMjIxNCwzNi4wMzAzOTczNjE1Njc4LDEwMi43NTg5MzAyMzQwNjMzOSw1Ni41ODU0OTUwNzI1NzIyNiw4MC4yNzA2NjA0NTEyNjkwOCw1OC43MzcyODc2Mjk4ODU0MSw2LjEzNTYxMTIyNTA2MTYxNTUsMTQ5LjU2NDAyNTQ2MjYxNSw5LjA4MzQ3ODE4Mjg5MTM1LDIyLjEyMjU2NjAzNTI3NzE2MywxMzIuMTcwNDczODIxMjIyMzcsOTY0LjgwNDU1ODk1MzM2NzIsMTQuOTYwNTU0MTUzMjA0NzAyLDE4LjA3Mzg0Mzc3MzI1MzYyNSwzNDcuODM0NDYzNjcwMzU3MSwyNTMuMjc3NTMxMDE1MTI3NzUsNDkuMzY2ODU3NzExMTkzOTUsMzQuNzc3MTU3Mzc1Njc4NzksMjY2LjY1OTIxMTg1MDgxMjIsNjc4LjUwMTY2NjYxMjczMSwxMjUuMjk2MjgxNzIyMTYyODksOS43ODgzNjA0NDAxNjAwNzUsMTM0Ljk5ODYxMzA2NDQzNDcyLDc3LjYzNzA0MDUwMDUwOTMsMjYuMzAzODg0MjgyMDMzMDk2LDE2NS40ODU2NDMyMTQ4MzUxNCw2My4zMjU0MTQ1NDA0ODQ2NSw4Mi42NjY5MTEwODExNzc5Nyw4MS44OTA4OTM0Njc5MDQ3Myw3NC42MzMxNzgzNzIzODE3NCw1LjA0ODE5NTc3MTYyOTIxCisxOCxGcmkgMTEgRmViIDExLDAuOTQ1MjE3NzY5MzgwMDIzMyw4NC44Mzc1MjY1MzE0MDAyNCw1MC4yNzIwODMwMjg4NTYzMyw0NS4wMDYyMTUwMDQ5NjA2LDIwNi45MTg1Mzc4Njg4MDEyLDQxLjMyMTEwMTc3NDEwNTczNSw2MTQuMzUzNjQ2NjM0Nzg0NSw4MzcwLjc3ODQ2MDYzNzk4NiwzMTQuNzkxMDgzMzI5NjUwODYsMjQzLjA2MTAyNDMzMzA1NDE4LDEzNy43NjE2MjcwMTE3NjYzLDExMC44MzUxNjc1Njk2MDQ5Miw1Mi4wMDM2MTQ2MTUyMDA3NSwxNS40ODM0NDgxNDMxNjMyLDIxNC40NDIzMDI1ODUyOTkyMiwxNjYuOTY0OTY0NTkyNzk1ODcsMzIuNjc1MjcwNDY0OTMyNzgsMTAwLjAyMTQ1NTYwNTcwMzg4LDg2LjIwNzU5NzY1MTk5MjU5LDYwMS41NDk1NjU3MzMxMzc1LDQyNi45MDU5ODkzNTQxMjIxNCwzNi4wMzAzOTczNjE1Njc4LDEwMi43NTg5MzAyMzQwNjMzOSw1Ni41ODU0OTUwNzI1NzIyNiw4MC4yNzA2NjA0NTEyNjkwOCw1OC43MzcyODc2Mjk4ODU0MSw2LjEzNTYxMTIyNTA2MTYxNTUsMTQ5LjU2NDAyNTQ2MjYxNSw5LjA4MzQ3ODE4Mjg5MTM1LDIyLjEyMjU2NjAzNTI3NzE2MywxMzIuMTcwNDczODIxMjIyMzcsOTY0LjgwNDU1ODk1MzM2NzIsMTQuOTYwNTU0MTUzMjA0NzAyLDE4LjA3Mzg0Mzc3MzI1MzYyNSwzNDcuODM0NDYzNjcwMzU3MSwyNTMuMjc3NTMxMDE1MTI3NzUsNDkuMzY2ODU3NzExMTkzOTUsMzQuNzc3MTU3Mzc1Njc4NzksMjY2LjY1OTIxMTg1MDgxMjIsNjc4LjUwMTY2NjYxMjczMSwxMjUuMjk2MjgxNzIyMTYyODksOS43ODgzNjA0NDAxNjAwNzUsMTM0Ljk5ODYxMzA2NDQzNDcyLDc3LjYzNzA0MDUwMDUwOTMsMjYuMzAzODg0MjgyMDMzMDk2LDE2NS40ODU2NDMyMTQ4MzUxNCw2My4zMjU0MTQ1NDA0ODQ2NSw4Mi42NjY5MTEwODExNzc5Nyw4MS44OTA4OTM0Njc5MDQ3Myw3NC42MzMxNzgzNzIzODE3NCw1LjA0ODE5NTc3MTYyOTIxCisxOSxTYXQgMTIgRmViIDExLDAuOTQ1MjE3NzY5MzgwMDIzMyw4NC44Mzc1MjY1MzE0MDAyNCw1MC4yNzIwODMwMjg4NTYzMyw0NS4wMDYyMTUwMDQ5NjA2LDIwNi45MTg1Mzc4Njg4MDEyLDQxLjMyMTEwMTc3NDEwNTczNSw2MTQuMzUzNjQ2NjM0Nzg0NSw4MzcwLjc3ODQ2MDYzNzk4NiwzMTQuNzkxMDgzMzI5NjUwODYsMjQzLjA2MTAyNDMzMzA1NDE4LDEzNy43NjE2MjcwMTE3NjYzLDExMC44MzUxNjc1Njk2MDQ5Miw1Mi4wMDM2MTQ2MTUyMDA3NSwxNS40ODM0NDgxNDMxNjMyLDIxNC40NDIzMDI1ODUyOTkyMiwxNjYuOTY0OTY0NTkyNzk1ODcsMzIuNjc1MjcwNDY0OTMyNzgsMTAwLjAyMTQ1NTYwNTcwMzg4LDg2LjIwNzU5NzY1MTk5MjU5LDYwMS41NDk1NjU3MzMxMzc1LDQyNi45MDU5ODkzNTQxMjIxNCwzNi4wMzAzOTczNjE1Njc4LDEwMi43NTg5MzAyMzQwNjMzOSw1Ni41ODU0OTUwNzI1NzIyNiw4MC4yNzA2NjA0NTEyNjkwOCw1OC43MzcyODc2Mjk4ODU0MSw2LjEzNTYxMTIyNTA2MTYxNTUsMTQ5LjU2NDAyNTQ2MjYxNSw5LjA4MzQ3ODE4Mjg5MTM1LDIyLjEyMjU2NjAzNTI3NzE2MywxMzIuMTcwNDczODIxMjIyMzcsOTY0LjgwNDU1ODk1MzM2NzIsMTQuOTYwNTU0MTUzMjA0NzAyLDE4LjA3Mzg0Mzc3MzI1MzYyNSwzNDcuODM0NDYzNjcwMzU3MSwyNTMuMjc3NTMxMDE1MTI3NzUsNDkuMzY2ODU3NzExMTkzOTUsMzQuNzc3MTU3Mzc1Njc4NzksMjY2LjY1OTIxMTg1MDgxMjIsNjc4LjUwMTY2NjYxMjczMSwxMjUuMjk2MjgxNzIyMTYyODksOS43ODgzNjA0NDAxNjAwNzUsMTM0Ljk5ODYxMzA2NDQzNDcyLDc3LjYzNzA0MDUwMDUwOTMsMjYuMzAzODg0MjgyMDMzMDk2LDE2NS40ODU2NDMyMTQ4MzUxNCw2My4zMjU0MTQ1NDA0ODQ2NSw4Mi42NjY5MTEwODExNzc5Nyw4MS44OTA4OTM0Njc5MDQ3Myw3NC42MzMxNzgzNzIzODE3NCw1LjA0ODE5NTc3MTYyOTIxCisyMCxTdW4gMTMgRmViIDExLDAuOTQ1MjE3NzY5MzgwMDIzMyw4NC44Mzc1MjY1MzE0MDAyNCw1MC4yNzIwODMwMjg4NTYzMyw0NS4wMDYyMTUwMDQ5NjA2LDIwNi45MTg1Mzc4Njg4MDEyLDQxLjMyMTEwMTc3NDEwNTczNSw2MTQuMzUzNjQ2NjM0Nzg0NSw4MzcwLjc3ODQ2MDYzNzk4NiwzMTQuNzkxMDgzMzI5NjUwODYsMjQzLjA2MTAyNDMzMzA1NDE4LDEzNy43NjE2MjcwMTE3NjYzLDExMC44MzUxNjc1Njk2MDQ5Miw1Mi4wMDM2MTQ2MTUyMDA3NSwxNS40ODM0NDgxNDMxNjMyLDIxNC40NDIzMDI1ODUyOTkyMiwxNjYuOTY0OTY0NTkyNzk1ODcsMzIuNjc1MjcwNDY0OTMyNzgsMTAwLjAyMTQ1NTYwNTcwMzg4LDg2LjIwNzU5NzY1MTk5MjU5LDYwMS41NDk1NjU3MzMxMzc1LDQyNi45MDU5ODkzNTQxMjIxNCwzNi4wMzAzOTczNjE1Njc4LDEwMi43NTg5MzAyMzQwNjMzOSw1Ni41ODU0OTUwNzI1NzIyNiw4MC4yNzA2NjA0NTEyNjkwOCw1OC43MzcyODc2Mjk4ODU0MSw2LjEzNTYxMTIyNTA2MTYxNTUsMTQ5LjU2NDAyNTQ2MjYxNSw5LjA4MzQ3ODE4Mjg5MTM1LDIyLjEyMjU2NjAzNTI3NzE2MywxMzIuMTcwNDczODIxMjIyMzcsOTY0LjgwNDU1ODk1MzM2NzIsMTQuOTYwNTU0MTUzMjA0NzAyLDE4LjA3Mzg0Mzc3MzI1MzYyNSwzNDcuODM0NDYzNjcwMzU3MSwyNTMuMjc3NTMxMDE1MTI3NzUsNDkuMzY2ODU3NzExMTkzOTUsMzQuNzc3MTU3Mzc1Njc4NzksMjY2LjY1OTIxMTg1MDgxMjIsNjc4LjUwMTY2NjYxMjczMSwxMjUuMjk2MjgxNzIyMTYyODksOS43ODgzNjA0NDAxNjAwNzUsMTM0Ljk5ODYxMzA2NDQzNDcyLDc3LjYzNzA0MDUwMDUwOTMsMjYuMzAzODg0MjgyMDMzMDk2LDE2NS40ODU2NDMyMTQ4MzUxNCw2My4zMjU0MTQ1NDA0ODQ2NSw4Mi42NjY5MTEwODExNzc5Nyw4MS44OTA4OTM0Njc5MDQ3Myw3NC42MzMxNzgzNzIzODE3NCw1LjA0ODE5NTc3MTYyOTIxCisyMSxNb24gMTQgRmViIDExLDAuOTQ1MjE3NzY5MzgwMDIzMyw4NC44Mzc1MjY1MzE0MDAyNCw1MC4yNzIwODMwMjg4NTYzMyw0NS4wMDYyMTUwMDQ5NjA2LDIwNi45MTg1Mzc4Njg4MDEyLDQxLjMyMTEwMTc3NDEwNTczNSw2MTQuMzUzNjQ2NjM0Nzg0NSw4MzcwLjc3ODQ2MDYzNzk4NiwzMTQuNzkxMDgzMzI5NjUwODYsMjQzLjA2MTAyNDMzMzA1NDE4LDEzNy43NjE2MjcwMTE3NjYzLDExMC44MzUxNjc1Njk2MDQ5Miw1Mi4wMDM2MTQ2MTUyMDA3NSwxNS40ODM0NDgxNDMxNjMyLDIxNC40NDIzMDI1ODUyOTkyMiwxNjYuOTY0OTY0NTkyNzk1ODcsMzIuNjc1MjcwNDY0OTMyNzgsMTAwLjAyMTQ1NTYwNTcwMzg4LDg2LjIwNzU5NzY1MTk5MjU5LDYwMS41NDk1NjU3MzMxMzc1LDQyNi45MDU5ODkzNTQxMjIxNCwzNi4wMzAzOTczNjE1Njc4LDEwMi43NTg5MzAyMzQwNjMzOSw1Ni41ODU0OTUwNzI1NzIyNiw4MC4yNzA2NjA0NTEyNjkwOCw1OC43MzcyODc2Mjk4ODU0MSw2LjEzNTYxMTIyNTA2MTYxNTUsMTQ5LjU2NDAyNTQ2MjYxNSw5LjA4MzQ3ODE4Mjg5MTM1LDIyLjEyMjU2NjAzNTI3NzE2MywxMzIuMTcwNDczODIxMjIyMzcsOTY0LjgwNDU1ODk1MzM2NzIsMTQuOTYwNTU0MTUzMjA0NzAyLDE4LjA3Mzg0Mzc3MzI1MzYyNSwzNDcuODM0NDYzNjcwMzU3MSwyNTMuMjc3NTMxMDE1MTI3NzUsNDkuMzY2ODU3NzExMTkzOTUsMzQuNzc3MTU3Mzc1Njc4NzksMjY2LjY1OTIxMTg1MDgxMjIsNjc4LjUwMTY2NjYxMjczMSwxMjUuMjk2MjgxNzIyMTYyODksOS43ODgzNjA0NDAxNjAwNzUsMTM0Ljk5ODYxMzA2NDQzNDcyLDc3LjYzNzA0MDUwMDUwOTMsMjYuMzAzODg0MjgyMDMzMDk2LDE2NS40ODU2NDMyMTQ4MzUxNCw2My4zMjU0MTQ1NDA0ODQ2NSw4Mi42NjY5MTEwODExNzc5Nyw4MS44OTA4OTM0Njc5MDQ3Myw3NC42MzMxNzgzNzIzODE3NCw1LjA0ODE5NTc3MTYyOTIxCisyMixUdWUgMTUgRmViIDExLDAuOTQ1MjE3NzY5MzgwMDIzMyw4NC44Mzc1MjY1MzE0MDAyNCw1MC4yNzIwODMwMjg4NTYzMyw0NS4wMDYyMTUwMDQ5NjA2LDIwNi45MTg1Mzc4Njg4MDEyLDQxLjMyMTEwMTc3NDEwNTczNSw2MTQuMzUzNjQ2NjM0Nzg0NSw4MzcwLjc3ODQ2MDYzNzk4NiwzMTQuNzkxMDgzMzI5NjUwODYsMjQzLjA2MTAyNDMzMzA1NDE4LDEzNy43NjE2MjcwMTE3NjYzLDExMC44MzUxNjc1Njk2MDQ5Miw1Mi4wMDM2MTQ2MTUyMDA3NSwxNS40ODM0NDgxNDMxNjMyLDIxNC40NDIzMDI1ODUyOTkyMiwxNjYuOTY0OTY0NTkyNzk1ODcsMzIuNjc1MjcwNDY0OTMyNzgsMTAwLjAyMTQ1NTYwNTcwMzg4LDg2LjIwNzU5NzY1MTk5MjU5LDYwMS41NDk1NjU3MzMxMzc1LDQyNi45MDU5ODkzNTQxMjIxNCwzNi4wMzAzOTczNjE1Njc4LDEwMi43NTg5MzAyMzQwNjMzOSw1Ni41ODU0OTUwNzI1NzIyNiw4MC4yNzA2NjA0NTEyNjkwOCw1OC43MzcyODc2Mjk4ODU0MSw2LjEzNTYxMTIyNTA2MTYxNTUsMTQ5LjU2NDAyNTQ2MjYxNSw5LjA4MzQ3ODE4Mjg5MTM1LDIyLjEyMjU2NjAzNTI3NzE2MywxMzIuMTcwNDczODIxMjIyMzcsOTY0LjgwNDU1ODk1MzM2NzIsMTQuOTYwNTU0MTUzMjA0NzAyLDE4LjA3Mzg0Mzc3MzI1MzYyNSwzNDcuODM0NDYzNjcwMzU3MSwyNTMuMjc3NTMxMDE1MTI3NzUsNDkuMzY2ODU3NzExMTkzOTUsMzQuNzc3MTU3Mzc1Njc4NzksMjY2LjY1OTIxMTg1MDgxMjIsNjc4LjUwMTY2NjYxMjczMSwxMjUuMjk2MjgxNzIyMTYyODksOS43ODgzNjA0NDAxNjAwNzUsMTM0Ljk5ODYxMzA2NDQzNDcyLDc3LjYzNzA0MDUwMDUwOTMsMjYuMzAzODg0MjgyMDMzMDk2LDE2NS40ODU2NDMyMTQ4MzUxNCw2My4zMjU0MTQ1NDA0ODQ2NSw4Mi42NjY5MTEwODExNzc5Nyw4MS44OTA4OTM0Njc5MDQ3Myw3NC42MzMxNzgzNzIzODE3NCw1LjA0ODE5NTc3MTYyOTIxCisyMyxXZWQgMTYgRmViIDExLDAuOTQ1MjE3NzY5MzgwMDIzMyw4NC44Mzc1MjY1MzE0MDAyNCw1MC4yNzIwODMwMjg4NTYzMyw0NS4wMDYyMTUwMDQ5NjA2LDIwNi45MTg1Mzc4Njg4MDEyLDQxLjMyMTEwMTc3NDEwNTczNSw2MTQuMzUzNjQ2NjM0Nzg0NSw4MzcwLjc3ODQ2MDYzNzk4NiwzMTQuNzkxMDgzMzI5NjUwODYsMjQzLjA2MTAyNDMzMzA1NDE4LDEzNy43NjE2MjcwMTE3NjYzLDExMC44MzUxNjc1Njk2MDQ5Miw1Mi4wMDM2MTQ2MTUyMDA3NSwxNS40ODM0NDgxNDMxNjMyLDIxNC40NDIzMDI1ODUyOTkyMiwxNjYuOTY0OTY0NTkyNzk1ODcsMzIuNjc1MjcwNDY0OTMyNzgsMTAwLjAyMTQ1NTYwNTcwMzg4LDg2LjIwNzU5NzY1MTk5MjU5LDYwMS41NDk1NjU3MzMxMzc1LDQyNi45MDU5ODkzNTQxMjIxNCwzNi4wMzAzOTczNjE1Njc4LDEwMi43NTg5MzAyMzQwNjMzOSw1Ni41ODU0OTUwNzI1NzIyNiw4MC4yNzA2NjA0NTEyNjkwOCw1OC43MzcyODc2Mjk4ODU0MSw2LjEzNTYxMTIyNTA2MTYxNTUsMTQ5LjU2NDAyNTQ2MjYxNSw5LjA4MzQ3ODE4Mjg5MTM1LDIyLjEyMjU2NjAzNTI3NzE2MywxMzIuMTcwNDczODIxMjIyMzcsOTY0LjgwNDU1ODk1MzM2NzIsMTQuOTYwNTU0MTUzMjA0NzAyLDE4LjA3Mzg0Mzc3MzI1MzYyNSwzNDcuODM0NDYzNjcwMzU3MSwyNTMuMjc3NTMxMDE1MTI3NzUsNDkuMzY2ODU3NzExMTkzOTUsMzQuNzc3MTU3Mzc1Njc4NzksMjY2LjY1OTIxMTg1MDgxMjIsNjc4LjUwMTY2NjYxMjczMSwxMjUuMjk2MjgxNzIyMTYyODksOS43ODgzNjA0NDAxNjAwNzUsMTM0Ljk5ODYxMzA2NDQzNDcyLDc3LjYzNzA0MDUwMDUwOTMsMjYuMzAzODg0MjgyMDMzMDk2LDE2NS40ODU2NDMyMTQ4MzUxNCw2My4zMjU0MTQ1NDA0ODQ2NSw4Mi42NjY5MTEwODExNzc5Nyw4MS44OTA4OTM0Njc5MDQ3Myw3NC42MzMxNzgzNzIzODE3NCw1LjA0ODE5NTc3MTYyOTIxCisyNCxUaHUgMTcgRmViIDExLDAuOTQ1MjE3NzY5MzgwMDIzMyw4NC44Mzc1MjY1MzE0MDAyNCw1MC4yNzIwODMwMjg4NTYzMyw0NS4wMDYyMTUwMDQ5NjA2LDIwNi45MTg1Mzc4Njg4MDEyLDQxLjMyMTEwMTc3NDEwNTczNSw2MTQuMzUzNjQ2NjM0Nzg0NSw4MzcwLjc3ODQ2MDYzNzk4NiwzMTQuNzkxMDgzMzI5NjUwODYsMjQzLjA2MTAyNDMzMzA1NDE4LDEzNy43NjE2MjcwMTE3NjYzLDExMC44MzUxNjc1Njk2MDQ5Miw1Mi4wMDM2MTQ2MTUyMDA3NSwxNS40ODM0NDgxNDMxNjMyLDIxNC40NDIzMDI1ODUyOTkyMiwxNjYuOTY0OTY0NTkyNzk1ODcsMzIuNjc1MjcwNDY0OTMyNzgsMTAwLjAyMTQ1NTYwNTcwMzg4LDg2LjIwNzU5NzY1MTk5MjU5LDYwMS41NDk1NjU3MzMxMzc1LDQyNi45MDU5ODkzNTQxMjIxNCwzNi4wMzAzOTczNjE1Njc4LDEwMi43NTg5MzAyMzQwNjMzOSw1Ni41ODU0OTUwNzI1NzIyNiw4MC4yNzA2NjA0NTEyNjkwOCw1OC43MzcyODc2Mjk4ODU0MSw2LjEzNTYxMTIyNTA2MTYxNTUsMTQ5LjU2NDAyNTQ2MjYxNSw5LjA4MzQ3ODE4Mjg5MTM1LDIyLjEyMjU2NjAzNTI3NzE2MywxMzIuMTcwNDczODIxMjIyMzcsOTY0LjgwNDU1ODk1MzM2NzIsMTQuOTYwNTU0MTUzMjA0NzAyLDE4LjA3Mzg0Mzc3MzI1MzYyNSwzNDcuODM0NDYzNjcwMzU3MSwyNTMuMjc3NTMxMDE1MTI3NzUsNDkuMzY2ODU3NzExMTkzOTUsMzQuNzc3MTU3Mzc1Njc4NzksMjY2LjY1OTIxMTg1MDgxMjIsNjc4LjUwMTY2NjYxMjczMSwxMjUuMjk2MjgxNzIyMTYyODksOS43ODgzNjA0NDAxNjAwNzUsMTM0Ljk5ODYxMzA2NDQzNDcyLDc3LjYzNzA0MDUwMDUwOTMsMjYuMzAzODg0MjgyMDMzMDk2LDE2NS40ODU2NDMyMTQ4MzUxNCw2My4zMjU0MTQ1NDA0ODQ2NSw4Mi42NjY5MTEwODExNzc5Nyw4MS44OTA4OTM0Njc5MDQ3Myw3NC42MzMxNzgzNzIzODE3NCw1LjA0ODE5NTc3MTYyOTIxCisyNSxGcmkgMTggRmViIDExLDAuOTQ1MjE3NzY5MzgwMDIzMyw4NC44Mzc1MjY1MzE0MDAyNCw1MC4yNzIwODMwMjg4NTYzMyw0NS4wMDYyMTUwMDQ5NjA2LDIwNi45MTg1Mzc4Njg4MDEyLDQxLjMyMTEwMTc3NDEwNTczNSw2MTQuMzUzNjQ2NjM0Nzg0NSw4MzcwLjc3ODQ2MDYzNzk4NiwzMTQuNzkxMDgzMzI5NjUwODYsMjQzLjA2MTAyNDMzMzA1NDE4LDEzNy43NjE2MjcwMTE3NjYzLDExMC44MzUxNjc1Njk2MDQ5Miw1Mi4wMDM2MTQ2MTUyMDA3NSwxNS40ODM0NDgxNDMxNjMyLDIxNC40NDIzMDI1ODUyOTkyMiwxNjYuOTY0OTY0NTkyNzk1ODcsMzIuNjc1MjcwNDY0OTMyNzgsMTAwLjAyMTQ1NTYwNTcwMzg4LDg2LjIwNzU5NzY1MTk5MjU5LDYwMS41NDk1NjU3MzMxMzc1LDQyNi45MDU5ODkzNTQxMjIxNCwzNi4wMzAzOTczNjE1Njc4LDEwMi43NTg5MzAyMzQwNjMzOSw1Ni41ODU0OTUwNzI1NzIyNiw4MC4yNzA2NjA0NTEyNjkwOCw1OC43MzcyODc2Mjk4ODU0MSw2LjEzNTYxMTIyNTA2MTYxNTUsMTQ5LjU2NDAyNTQ2MjYxNSw5LjA4MzQ3ODE4Mjg5MTM1LDIyLjEyMjU2NjAzNTI3NzE2MywxMzIuMTcwNDczODIxMjIyMzcsOTY0LjgwNDU1ODk1MzM2NzIsMTQuOTYwNTU0MTUzMjA0NzAyLDE4LjA3Mzg0Mzc3MzI1MzYyNSwzNDcuODM0NDYzNjcwMzU3MSwyNTMuMjc3NTMxMDE1MTI3NzUsNDkuMzY2ODU3NzExMTkzOTUsMzQuNzc3MTU3Mzc1Njc4NzksMjY2LjY1OTIxMTg1MDgxMjIsNjc4LjUwMTY2NjYxMjczMSwxMjUuMjk2MjgxNzIyMTYyODksOS43ODgzNjA0NDAxNjAwNzUsMTM0Ljk5ODYxMzA2NDQzNDcyLDc3LjYzNzA0MDUwMDUwOTMsMjYuMzAzODg0MjgyMDMzMDk2LDE2NS40ODU2NDMyMTQ4MzUxNCw2My4zMjU0MTQ1NDA0ODQ2NSw4Mi42NjY5MTEwODExNzc5Nyw4MS44OTA4OTM0Njc5MDQ3Myw3NC42MzMxNzgzNzIzODE3NCw1LjA0ODE5NTc3MTYyOTIxCisyNixTYXQgMTkgRmViIDExLDAuOTQ1MjE3NzY5MzgwMDIzMyw4NC44Mzc1MjY1MzE0MDAyNCw1MC4yNzIwODMwMjg4NTYzMyw0NS4wMDYyMTUwMDQ5NjA2LDIwNi45MTg1Mzc4Njg4MDEyLDQxLjMyMTEwMTc3NDEwNTczNSw2MTQuMzUzNjQ2NjM0Nzg0NSw4MzcwLjc3ODQ2MDYzNzk4NiwzMTQuNzkxMDgzMzI5NjUwODYsMjQzLjA2MTAyNDMzMzA1NDE4LDEzNy43NjE2MjcwMTE3NjYzLDExMC44MzUxNjc1Njk2MDQ5Miw1Mi4wMDM2MTQ2MTUyMDA3NSwxNS40ODM0NDgxNDMxNjMyLDIxNC40NDIzMDI1ODUyOTkyMiwxNjYuOTY0OTY0NTkyNzk1ODcsMzIuNjc1MjcwNDY0OTMyNzgsMTAwLjAyMTQ1NTYwNTcwMzg4LDg2LjIwNzU5NzY1MTk5MjU5LDYwMS41NDk1NjU3MzMxMzc1LDQyNi45MDU5ODkzNTQxMjIxNCwzNi4wMzAzOTczNjE1Njc4LDEwMi43NTg5MzAyMzQwNjMzOSw1Ni41ODU0OTUwNzI1NzIyNiw4MC4yNzA2NjA0NTEyNjkwOCw1OC43MzcyODc2Mjk4ODU0MSw2LjEzNTYxMTIyNTA2MTYxNTUsMTQ5LjU2NDAyNTQ2MjYxNSw5LjA4MzQ3ODE4Mjg5MTM1LDIyLjEyMjU2NjAzNTI3NzE2MywxMzIuMTcwNDczODIxMjIyMzcsOTY0LjgwNDU1ODk1MzM2NzIsMTQuOTYwNTU0MTUzMjA0NzAyLDE4LjA3Mzg0Mzc3MzI1MzYyNSwzNDcuODM0NDYzNjcwMzU3MSwyNTMuMjc3NTMxMDE1MTI3NzUsNDkuMzY2ODU3NzExMTkzOTUsMzQuNzc3MTU3Mzc1Njc4NzksMjY2LjY1OTIxMTg1MDgxMjIsNjc4LjUwMTY2NjYxMjczMSwxMjUuMjk2MjgxNzIyMTYyODksOS43ODgzNjA0NDAxNjAwNzUsMTM0Ljk5ODYxMzA2NDQzNDcyLDc3LjYzNzA0MDUwMDUwOTMsMjYuMzAzODg0MjgyMDMzMDk2LDE2NS40ODU2NDMyMTQ4MzUxNCw2My4zMjU0MTQ1NDA0ODQ2NSw4Mi42NjY5MTEwODExNzc5Nyw4MS44OTA4OTM0Njc5MDQ3Myw3NC42MzMxNzgzNzIzODE3NCw1LjA0ODE5NTc3MTYyOTIxCisyNyxTdW4gMjAgRmViIDExLDAuOTQ1MjE3NzY5MzgwMDIzMyw4NC44Mzc1MjY1MzE0MDAyNCw1MC4yNzIwODMwMjg4NTYzMyw0NS4wMDYyMTUwMDQ5NjA2LDIwNi45MTg1Mzc4Njg4MDEyLDQxLjMyMTEwMTc3NDEwNTczNSw2MTQuMzUzNjQ2NjM0Nzg0NSw4MzcwLjc3ODQ2MDYzNzk4NiwzMTQuNzkxMDgzMzI5NjUwODYsMjQzLjA2MTAyNDMzMzA1NDE4LDEzNy43NjE2MjcwMTE3NjYzLDExMC44MzUxNjc1Njk2MDQ5Miw1Mi4wMDM2MTQ2MTUyMDA3NSwxNS40ODM0NDgxNDMxNjMyLDIxNC40NDIzMDI1ODUyOTkyMiwxNjYuOTY0OTY0NTkyNzk1ODcsMzIuNjc1MjcwNDY0OTMyNzgsMTAwLjAyMTQ1NTYwNTcwMzg4LDg2LjIwNzU5NzY1MTk5MjU5LDYwMS41NDk1NjU3MzMxMzc1LDQyNi45MDU5ODkzNTQxMjIxNCwzNi4wMzAzOTczNjE1Njc4LDEwMi43NTg5MzAyMzQwNjMzOSw1Ni41ODU0OTUwNzI1NzIyNiw4MC4yNzA2NjA0NTEyNjkwOCw1OC43MzcyODc2Mjk4ODU0MSw2LjEzNTYxMTIyNTA2MTYxNTUsMTQ5LjU2NDAyNTQ2MjYxNSw5LjA4MzQ3ODE4Mjg5MTM1LDIyLjEyMjU2NjAzNTI3NzE2MywxMzIuMTcwNDczODIxMjIyMzcsOTY0LjgwNDU1ODk1MzM2NzIsMTQuOTYwNTU0MTUzMjA0NzAyLDE4LjA3Mzg0Mzc3MzI1MzYyNSwzNDcuODM0NDYzNjcwMzU3MSwyNTMuMjc3NTMxMDE1MTI3NzUsNDkuMzY2ODU3NzExMTkzOTUsMzQuNzc3MTU3Mzc1Njc4NzksMjY2LjY1OTIxMTg1MDgxMjIsNjc4LjUwMTY2NjYxMjczMSwxMjUuMjk2MjgxNzIyMTYyODksOS43ODgzNjA0NDAxNjAwNzUsMTM0Ljk5ODYxMzA2NDQzNDcyLDc3LjYzNzA0MDUwMDUwOTMsMjYuMzAzODg0MjgyMDMzMDk2LDE2NS40ODU2NDMyMTQ4MzUxNCw2My4zMjU0MTQ1NDA0ODQ2NSw4Mi42NjY5MTEwODExNzc5Nyw4MS44OTA4OTM0Njc5MDQ3Myw3NC42MzMxNzgzNzIzODE3NCw1LjA0ODE5NTc3MTYyOTIxCisyOCxNb24gMjEgRmViIDExLDAuOTQ1MjE3NzY5MzgwMDIzMyw4NC44Mzc1MjY1MzE0MDAyNCw1MC4yNzIwODMwMjg4NTYzMyw0NS4wMDYyMTUwMDQ5NjA2LDIwNi45MTg1Mzc4Njg4MDEyLDQxLjMyMTEwMTc3NDEwNTczNSw2MTQuMzUzNjQ2NjM0Nzg0NSw4MzcwLjc3ODQ2MDYzNzk4NiwzMTQuNzkxMDgzMzI5NjUwODYsMjQzLjA2MTAyNDMzMzA1NDE4LDEzNy43NjE2MjcwMTE3NjYzLDExMC44MzUxNjc1Njk2MDQ5Miw1Mi4wMDM2MTQ2MTUyMDA3NSwxNS40ODM0NDgxNDMxNjMyLDIxNC40NDIzMDI1ODUyOTkyMiwxNjYuOTY0OTY0NTkyNzk1ODcsMzIuNjc1MjcwNDY0OTMyNzgsMTAwLjAyMTQ1NTYwNTcwMzg4LDg2LjIwNzU5NzY1MTk5MjU5LDYwMS41NDk1NjU3MzMxMzc1LDQyNi45MDU5ODkzNTQxMjIxNCwzNi4wMzAzOTczNjE1Njc4LDEwMi43NTg5MzAyMzQwNjMzOSw1Ni41ODU0OTUwNzI1NzIyNiw4MC4yNzA2NjA0NTEyNjkwOCw1OC43MzcyODc2Mjk4ODU0MSw2LjEzNTYxMTIyNTA2MTYxNTUsMTQ5LjU2NDAyNTQ2MjYxNSw5LjA4MzQ3ODE4Mjg5MTM1LDIyLjEyMjU2NjAzNTI3NzE2MywxMzIuMTcwNDczODIxMjIyMzcsOTY0LjgwNDU1ODk1MzM2NzIsMTQuOTYwNTU0MTUzMjA0NzAyLDE4LjA3Mzg0Mzc3MzI1MzYyNSwzNDcuODM0NDYzNjcwMzU3MSwyNTMuMjc3NTMxMDE1MTI3NzUsNDkuMzY2ODU3NzExMTkzOTUsMzQuNzc3MTU3Mzc1Njc4NzksMjY2LjY1OTIxMTg1MDgxMjIsNjc4LjUwMTY2NjYxMjczMSwxMjUuMjk2MjgxNzIyMTYyODksOS43ODgzNjA0NDAxNjAwNzUsMTM0Ljk5ODYxMzA2NDQzNDcyLDc3LjYzNzA0MDUwMDUwOTMsMjYuMzAzODg0MjgyMDMzMDk2LDE2NS40ODU2NDMyMTQ4MzUxNCw2My4zMjU0MTQ1NDA0ODQ2NSw4Mi42NjY5MTEwODExNzc5Nyw4MS44OTA4OTM0Njc5MDQ3Myw3NC42MzMxNzgzNzIzODE3NCw1LjA0ODE5NTc3MTYyOTIxCisyOSxUdWUgMjIgRmViIDExLDAuOTQ1MjE3NzY5MzgwMDIzMyw4NC44Mzc1MjY1MzE0MDAyNCw1MC4yNzIwODMwMjg4NTYzMyw0NS4wMDYyMTUwMDQ5NjA2LDIwNi45MTg1Mzc4Njg4MDEyLDQxLjMyMTEwMTc3NDEwNTczNSw2MTQuMzUzNjQ2NjM0Nzg0NSw4MzcwLjc3ODQ2MDYzNzk4NiwzMTQuNzkxMDgzMzI5NjUwODYsMjQzLjA2MTAyNDMzMzA1NDE4LDEzNy43NjE2MjcwMTE3NjYzLDExMC44MzUxNjc1Njk2MDQ5Miw1Mi4wMDM2MTQ2MTUyMDA3NSwxNS40ODM0NDgxNDMxNjMyLDIxNC40NDIzMDI1ODUyOTkyMiwxNjYuOTY0OTY0NTkyNzk1ODcsMzIuNjc1MjcwNDY0OTMyNzgsMTAwLjAyMTQ1NTYwNTcwMzg4LDg2LjIwNzU5NzY1MTk5MjU5LDYwMS41NDk1NjU3MzMxMzc1LDQyNi45MDU5ODkzNTQxMjIxNCwzNi4wMzAzOTczNjE1Njc4LDEwMi43NTg5MzAyMzQwNjMzOSw1Ni41ODU0OTUwNzI1NzIyNiw4MC4yNzA2NjA0NTEyNjkwOCw1OC43MzcyODc2Mjk4ODU0MSw2LjEzNTYxMTIyNTA2MTYxNTUsMTQ5LjU2NDAyNTQ2MjYxNSw5LjA4MzQ3ODE4Mjg5MTM1LDIyLjEyMjU2NjAzNTI3NzE2MywxMzIuMTcwNDczODIxMjIyMzcsOTY0LjgwNDU1ODk1MzM2NzIsMTQuOTYwNTU0MTUzMjA0NzAyLDE4LjA3Mzg0Mzc3MzI1MzYyNSwzNDcuODM0NDYzNjcwMzU3MSwyNTMuMjc3NTMxMDE1MTI3NzUsNDkuMzY2ODU3NzExMTkzOTUsMzQuNzc3MTU3Mzc1Njc4NzksMjY2LjY1OTIxMTg1MDgxMjIsNjc4LjUwMTY2NjYxMjczMSwxMjUuMjk2MjgxNzIyMTYyODksOS43ODgzNjA0NDAxNjAwNzUsMTM0Ljk5ODYxMzA2NDQzNDcyLDc3LjYzNzA0MDUwMDUwOTMsMjYuMzAzODg0MjgyMDMzMDk2LDE2NS40ODU2NDMyMTQ4MzUxNCw2My4zMjU0MTQ1NDA0ODQ2NSw4Mi42NjY5MTEwODExNzc5Nyw4MS44OTA4OTM0Njc5MDQ3Myw3NC42MzMxNzgzNzIzODE3NCw1LjA0ODE5NTc3MTYyOTIxCiszMCxXZWQgMjMgRmViIDExLDAuOTQ1MjE3NzY5MzgwMDIzMyw4NC44Mzc1MjY1MzE0MDAyNCw1MC4yNzIwODMwMjg4NTYzMyw0NS4wMDYyMTUwMDQ5NjA2LDIwNi45MTg1Mzc4Njg4MDEyLDQxLjMyMTEwMTc3NDEwNTczNSw2MTQuMzUzNjQ2NjM0Nzg0NSw4MzcwLjc3ODQ2MDYzNzk4NiwzMTQuNzkxMDgzMzI5NjUwODYsMjQzLjA2MTAyNDMzMzA1NDE4LDEzNy43NjE2MjcwMTE3NjYzLDExMC44MzUxNjc1Njk2MDQ5Miw1Mi4wMDM2MTQ2MTUyMDA3NSwxNS40ODM0NDgxNDMxNjMyLDIxNC40NDIzMDI1ODUyOTkyMiwxNjYuOTY0OTY0NTkyNzk1ODcsMzIuNjc1MjcwNDY0OTMyNzgsMTAwLjAyMTQ1NTYwNTcwMzg4LDg2LjIwNzU5NzY1MTk5MjU5LDYwMS41NDk1NjU3MzMxMzc1LDQyNi45MDU5ODkzNTQxMjIxNCwzNi4wMzAzOTczNjE1Njc4LDEwMi43NTg5MzAyMzQwNjMzOSw1Ni41ODU0OTUwNzI1NzIyNiw4MC4yNzA2NjA0NTEyNjkwOCw1OC43MzcyODc2Mjk4ODU0MSw2LjEzNTYxMTIyNTA2MTYxNTUsMTQ5LjU2NDAyNTQ2MjYxNSw5LjA4MzQ3ODE4Mjg5MTM1LDIyLjEyMjU2NjAzNTI3NzE2MywxMzIuMTcwNDczODIxMjIyMzcsOTY0LjgwNDU1ODk1MzM2NzIsMTQuOTYwNTU0MTUzMjA0NzAyLDE4LjA3Mzg0Mzc3MzI1MzYyNSwzNDcuODM0NDYzNjcwMzU3MSwyNTMuMjc3NTMxMDE1MTI3NzUsNDkuMzY2ODU3NzExMTkzOTUsMzQuNzc3MTU3Mzc1Njc4NzksMjY2LjY1OTIxMTg1MDgxMjIsNjc4LjUwMTY2NjYxMjczMSwxMjUuMjk2MjgxNzIyMTYyODksOS43ODgzNjA0NDAxNjAwNzUsMTM0Ljk5ODYxMzA2NDQzNDcyLDc3LjYzNzA0MDUwMDUwOTMsMjYuMzAzODg0MjgyMDMzMDk2LDE2NS40ODU2NDMyMTQ4MzUxNCw2My4zMjU0MTQ1NDA0ODQ2NSw4Mi42NjY5MTEwODExNzc5Nyw4MS44OTA4OTM0Njc5MDQ3Myw3NC42MzMxNzgzNzIzODE3NCw1LjA0ODE5NTc3MTYyOTIxCiszMSxUaHUgMjQgRmViIDExLDAuOTQ1MjE3NzY5MzgwMDIzMyw4NC44Mzc1MjY1MzE0MDAyNCw1MC4yNzIwODMwMjg4NTYzMyw0NS4wMDYyMTUwMDQ5NjA2LDIwNi45MTg1Mzc4Njg4MDEyLDQxLjMyMTEwMTc3NDEwNTczNSw2MTQuMzUzNjQ2NjM0Nzg0NSw4MzcwLjc3ODQ2MDYzNzk4NiwzMTQuNzkxMDgzMzI5NjUwODYsMjQzLjA2MTAyNDMzMzA1NDE4LDEzNy43NjE2MjcwMTE3NjYzLDExMC44MzUxNjc1Njk2MDQ5Miw1Mi4wMDM2MTQ2MTUyMDA3NSwxNS40ODM0NDgxNDMxNjMyLDIxNC40NDIzMDI1ODUyOTkyMiwxNjYuOTY0OTY0NTkyNzk1ODcsMzIuNjc1MjcwNDY0OTMyNzgsMTAwLjAyMTQ1NTYwNTcwMzg4LDg2LjIwNzU5NzY1MTk5MjU5LDYwMS41NDk1NjU3MzMxMzc1LDQyNi45MDU5ODkzNTQxMjIxNCwzNi4wMzAzOTczNjE1Njc4LDEwMi43NTg5MzAyMzQwNjMzOSw1Ni41ODU0OTUwNzI1NzIyNiw4MC4yNzA2NjA0NTEyNjkwOCw1OC43MzcyODc2Mjk4ODU0MSw2LjEzNTYxMTIyNTA2MTYxNTUsMTQ5LjU2NDAyNTQ2MjYxNSw5LjA4MzQ3ODE4Mjg5MTM1LDIyLjEyMjU2NjAzNTI3NzE2MywxMzIuMTcwNDczODIxMjIyMzcsOTY0LjgwNDU1ODk1MzM2NzIsMTQuOTYwNTU0MTUzMjA0NzAyLDE4LjA3Mzg0Mzc3MzI1MzYyNSwzNDcuODM0NDYzNjcwMzU3MSwyNTMuMjc3NTMxMDE1MTI3NzUsNDkuMzY2ODU3NzExMTkzOTUsMzQuNzc3MTU3Mzc1Njc4NzksMjY2LjY1OTIxMTg1MDgxMjIsNjc4LjUwMTY2NjYxMjczMSwxMjUuMjk2MjgxNzIyMTYyODksOS43ODgzNjA0NDAxNjAwNzUsMTM0Ljk5ODYxMzA2NDQzNDcyLDc3LjYzNzA0MDUwMDUwOTMsMjYuMzAzODg0MjgyMDMzMDk2LDE2NS40ODU2NDMyMTQ4MzUxNCw2My4zMjU0MTQ1NDA0ODQ2NSw4Mi42NjY5MTEwODExNzc5Nyw4MS44OTA4OTM0Njc5MDQ3Myw3NC42MzMxNzgzNzIzODE3NCw1LjA0ODE5NTc3MTYyOTIxCiszMixGcmkgMjUgRmViIDExLDAuOTQ1MjE3NzY5MzgwMDIzMyw4NC44Mzc1MjY1MzE0MDAyNCw1MC4yNzIwODMwMjg4NTYzMyw0NS4wMDYyMTUwMDQ5NjA2LDIwNi45MTg1Mzc4Njg4MDEyLDQxLjMyMTEwMTc3NDEwNTczNSw2MTQuMzUzNjQ2NjM0Nzg0NSw4MzcwLjc3ODQ2MDYzNzk4NiwzMTQuNzkxMDgzMzI5NjUwODYsMjQzLjA2MTAyNDMzMzA1NDE4LDEzNy43NjE2MjcwMTE3NjYzLDExMC44MzUxNjc1Njk2MDQ5Miw1Mi4wMDM2MTQ2MTUyMDA3NSwxNS40ODM0NDgxNDMxNjMyLDIxNC40NDIzMDI1ODUyOTkyMiwxNjYuOTY0OTY0NTkyNzk1ODcsMzIuNjc1MjcwNDY0OTMyNzgsMTAwLjAyMTQ1NTYwNTcwMzg4LDg2LjIwNzU5NzY1MTk5MjU5LDYwMS41NDk1NjU3MzMxMzc1LDQyNi45MDU5ODkzNTQxMjIxNCwzNi4wMzAzOTczNjE1Njc4LDEwMi43NTg5MzAyMzQwNjMzOSw1Ni41ODU0OTUwNzI1NzIyNiw4MC4yNzA2NjA0NTEyNjkwOCw1OC43MzcyODc2Mjk4ODU0MSw2LjEzNTYxMTIyNTA2MTYxNTUsMTQ5LjU2NDAyNTQ2MjYxNSw5LjA4MzQ3ODE4Mjg5MTM1LDIyLjEyMjU2NjAzNTI3NzE2MywxMzIuMTcwNDczODIxMjIyMzcsOTY0LjgwNDU1ODk1MzM2NzIsMTQuOTYwNTU0MTUzMjA0NzAyLDE4LjA3Mzg0Mzc3MzI1MzYyNSwzNDcuODM0NDYzNjcwMzU3MSwyNTMuMjc3NTMxMDE1MTI3NzUsNDkuMzY2ODU3NzExMTkzOTUsMzQuNzc3MTU3Mzc1Njc4NzksMjY2LjY1OTIxMTg1MDgxMjIsNjc4LjUwMTY2NjYxMjczMSwxMjUuMjk2MjgxNzIyMTYyODksOS43ODgzNjA0NDAxNjAwNzUsMTM0Ljk5ODYxMzA2NDQzNDcyLDc3LjYzNzA0MDUwMDUwOTMsMjYuMzAzODg0MjgyMDMzMDk2LDE2NS40ODU2NDMyMTQ4MzUxNCw2My4zMjU0MTQ1NDA0ODQ2NSw4Mi42NjY5MTEwODExNzc5Nyw4MS44OTA4OTM0Njc5MDQ3Myw3NC42MzMxNzgzNzIzODE3NCw1LjA0ODE5NTc3MTYyOTIxCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNJU3RhdGVzT25seV9SS19SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9odW1hbi9JbmNpZGVuY2VfMC5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNJU3RhdGVzT25seV9SS19SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9odW1hbi9JbmNpZGVuY2VfMC5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTEyZThiOAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0lTdGF0ZXNPbmx5X1JLX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL2h1bWFuL0luY2lkZW5jZV8wLmNzdgpAQCAtMCwwICsxLDMzIEBACitpdGVyYXRpb24sdGltZSxzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9ub2RlL3RyYW5zcG9ydC9waXBlL1VTQQorMSxUdWUgMjUgSmFuIDExLDAuMAorMixXZWQgMjYgSmFuIDExLDAuMAorMyxUaHUgMjcgSmFuIDExLDAuMAorNCxGcmkgMjggSmFuIDExLDAuMAorNSxTYXQgMjkgSmFuIDExLDAuMAorNixTdW4gMzAgSmFuIDExLDAuMAorNyxNb24gMzEgSmFuIDExLDAuMAorOCxUdWUgMSBGZWIgMTEsMC4wCis5LFdlZCAyIEZlYiAxMSwwLjAKKzEwLFRodSAzIEZlYiAxMSwwLjAKKzExLEZyaSA0IEZlYiAxMSwwLjAKKzEyLFNhdCA1IEZlYiAxMSwwLjAKKzEzLFN1biA2IEZlYiAxMSwwLjAKKzE0LE1vbiA3IEZlYiAxMSwwLjAKKzE1LFR1ZSA4IEZlYiAxMSwwLjAKKzE2LFdlZCA5IEZlYiAxMSwwLjAKKzE3LFRodSAxMCBGZWIgMTEsMC4wCisxOCxGcmkgMTEgRmViIDExLDAuMAorMTksU2F0IDEyIEZlYiAxMSwwLjAKKzIwLFN1biAxMyBGZWIgMTEsMC4wCisyMSxNb24gMTQgRmViIDExLDAuMAorMjIsVHVlIDE1IEZlYiAxMSwwLjAKKzIzLFdlZCAxNiBGZWIgMTEsMC4wCisyNCxUaHUgMTcgRmViIDExLDAuMAorMjUsRnJpIDE4IEZlYiAxMSwwLjAKKzI2LFNhdCAxOSBGZWIgMTEsMC4wCisyNyxTdW4gMjAgRmViIDExLDAuMAorMjgsTW9uIDIxIEZlYiAxMSwwLjAKKzI5LFR1ZSAyMiBGZWIgMTEsMC4wCiszMCxXZWQgMjMgRmViIDExLDAuMAorMzEsVGh1IDI0IEZlYiAxMSwwLjAKKzMyLEZyaSAyNSBGZWIgMTEsMC4wCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNJU3RhdGVzT25seV9SS19SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9odW1hbi9JbmNpZGVuY2VfMS5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNJU3RhdGVzT25seV9SS19SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9odW1hbi9JbmNpZGVuY2VfMS5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDdhODQzZgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0lTdGF0ZXNPbmx5X1JLX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL2h1bWFuL0luY2lkZW5jZV8xLmNzdgpAQCAtMCwwICsxLDMzIEBACitpdGVyYXRpb24sdGltZSxVUy1BSyxVUy1BTCxVUy1BUixVUy1BWixVUy1DQSxVUy1DTyxVUy1DVCxVUy1EQyxVUy1ERSxVUy1GTCxVUy1HQSxVUy1ISSxVUy1JQSxVUy1JRCxVUy1JTCxVUy1JTixVUy1LUyxVUy1LWSxVUy1MQSxVUy1NQSxVUy1NRCxVUy1NRSxVUy1NSSxVUy1NTixVUy1NTyxVUy1NUyxVUy1NVCxVUy1OQyxVUy1ORCxVUy1ORSxVUy1OSCxVUy1OSixVUy1OTSxVUy1OVixVUy1OWSxVUy1PSCxVUy1PSyxVUy1PUixVUy1QQSxVUy1SSSxVUy1TQyxVUy1TRCxVUy1UTixVUy1UWCxVUy1VVCxVUy1WQSxVUy1WVCxVUy1XQSxVUy1XSSxVUy1XVixVUy1XWQorMSxUdWUgMjUgSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyLFdlZCAyNiBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzMsVGh1IDI3IEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorNCxGcmkgMjggSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCis1LFNhdCAyOSBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzYsU3VuIDMwIEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorNyxNb24gMzEgSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCis4LFR1ZSAxIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorOSxXZWQgMiBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzEwLFRodSAzIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTEsRnJpIDQgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxMixTYXQgNSBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzEzLFN1biA2IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTQsTW9uIDcgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxNSxUdWUgOCBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzE2LFdlZCA5IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTcsVGh1IDEwIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTgsRnJpIDExIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTksU2F0IDEyIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjAsU3VuIDEzIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjEsTW9uIDE0IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjIsVHVlIDE1IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjMsV2VkIDE2IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjQsVGh1IDE3IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjUsRnJpIDE4IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjYsU2F0IDE5IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjcsU3VuIDIwIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjgsTW9uIDIxIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjksVHVlIDIyIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMzAsV2VkIDIzIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMzEsVGh1IDI0IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMzIsRnJpIDI1IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTSVN0YXRlc09ubHlfUktfUmVmZXJlbmNlL2F1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwvcnVucGFyYW1ldGVycy5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNJU3RhdGVzT25seV9SS19SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9ydW5wYXJhbWV0ZXJzLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNjg1NWI1Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTSVN0YXRlc09ubHlfUktfUmVmZXJlbmNlL2F1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwvcnVucGFyYW1ldGVycy5jc3YKQEAgLTAsMCArMSwyIEBACitwb3B1bGF0aW9uSWRlbnRpZmllcixuYW1lLHRhcmdldElTT0tleSxiaXJ0aFJhdGUsZGVhdGhSYXRlLHRpbWVQZXJpb2QKK2h1bWFuLGF1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwsLDAuMCwwLjAsODY0MDAwMDAKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0RlbW9ncmFwaGljU0VJUkRpc2Vhc2VfRkRfUmVmZXJlbmNlL0RlbW9ncmFwaGljTW9kZWwvbWVuL0JpcnRoc18yLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvRGVtb2dyYXBoaWNTRUlSRGlzZWFzZV9GRF9SZWZlcmVuY2UvRGVtb2dyYXBoaWNNb2RlbC9tZW4vQmlydGhzXzIuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM5Yjk0YWQKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0RlbW9ncmFwaGljU0VJUkRpc2Vhc2VfRkRfUmVmZXJlbmNlL0RlbW9ncmFwaGljTW9kZWwvbWVuL0JpcnRoc18yLmNzdgpAQCAtMCwwICsxLDMzIEBACitpdGVyYXRpb24sdGltZSxFRy1GUkctRzIxMDAwMSxFRy1GUkctRzIxMDAwMixFRy1GUkctRzIxMDAwMyxFRy1GUkctRzIxMDAwNCxFRy1GUkctRzIxMDAwNSxFRy1MT0UtRzI0MDAwMSxFRy1MT0UtRzI0MDAwMixFRy1MT0UtRzI0MDAwMyxFRy1MT0UtRzI0MDAwNCxFRy1MT0UtRzI0MDAwNSxFRy1MT0UtRzI0MDAwNixFRy1MT0UtRzI0MDAwNyxFRy1MT0UtRzI0MDAwOCxFRy1MT0UtRzI0MDAwOSxFRy1VUEUtRzI5MDAwMSxFRy1VUEUtRzI5MDAwMixFRy1VUEUtRzI5MDAwMyxFRy1VUEUtRzI5MDAwNCxFRy1VUEUtRzI5MDAwNSxFRy1VUEUtRzI5MDAwNixFRy1VUEUtRzI5MDAwNyxFRy1VUEUtRzI5MDAwOCxFRy1VUkctRzMwMDAwMSxFRy1VUkctRzMwMDAwMixFRy1VUkctRzMwMDAwMyxFRy1VUkctRzMwMDAwNAorMSxUdWUgMjUgSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzIsV2VkIDI2IEphbiAxMSw1LjkxMjI2NzQxOTcxOTg2Myw1LjI3ODc5MTU5MDgwMjgzNSwzLjA3MjY4NjM2OTgwNDU5MSw2LjM1MjA0OTgzOTAyOTcwMiw2LjQwMjgwMjQ0MTM0MDE0MSwxMDMuNTAzODExMjQzNTYyNzgsMTEyLjQ3NzQ4NDQ1MDczMzk4LDkyLjE4NjA0MTAzODAxLDgwLjA3Mjg3OTU3NTQ4MjI4LDEwMC4xMTEyNjEyNTYxOTY0NywyMC4zMjk2NTMxMjk1MDQ4ODcsMTE4Ljg0MzM5OTU4ODE0NDU5LDIzLjUxOTc5MzgwNDM4MDA3LDYyLjQzNTk5OTYzMjgzMzYxNCw1NS44MDY0MDMzODc0ODU2NCwxMjguMTA4NDg0NTAwMDE0OTgsOTIuODA5NTM4NjYwODY2NzgsMjYuMTAxNDg0MzExNzIyMjQsNzUuOTY3MTY4MzY2NjI1NDYsNTAuNTkyMDA5Mjk1MjMyMjQ1LDc0Ljc0MDI2OTc4ODk0MDg2LDgyLjk5NzE3NTE5NDExNzg2LDczLjgzMzUxNTM0MDYzNDkzLDE2OC4zMDE5MDA3MDQxNzk4LDEwLjczMjkwMzA2NzIwMjMzLDAuMTM0Mzg1MTk2ODc5NjM0CiszLFRodSAyNyBKYW4gMTEsMTEuODI0NTQwNzUxNzA3MTQ3LDEwLjU1NzU4ODQ2MDM5NzI2Myw2LjE0NTM3NTgxMjI5NTU1MiwxMi43MDQxMDYwMzAxMDkyNCwxMi44MDU2MTEyODU0ODI3MjMsMjA3LjAwNzcyNTk5MDkzNjgyLDIyNC45NTUwODEzNzg5NTI0MywxODQuMzcyMTc0MjYyMDYxMDQsMTYwLjE0NTgzOTIyMzg0NDEyLDIwMC4yMjI2MjI2MjM2NTQyLDQwLjY1OTMyNjU4ODY2MjkxLDIzNy42ODY5MTgwMTk2ODg4LDQ3LjAzOTYxMTEyODU1Mzk0LDEyNC44NzIwNjE3MDE2NjY4NywxMTEuNjEyODYyNTgxMzc0NjYsMjU2LjIxNzA5NzEwODUxNDQ1LDE4NS42MTkxNzAxMzEyNzIyLDUyLjIwMjk5NDcyNDkyODc4NiwxNTEuOTM0NDEyNzAwNDE5MjcsMTAxLjE4NDA2OTE4MjQ3Mzc5LDE0OS40ODA2MTQzMTgxNTE1LDE2NS45OTQ0MzMzODU0MTA5LDE0Ny42NjcxMDQ1MTQ3ODUyLDMzNi42MDM5Njk3MTAyNjAzLDIxLjQ2NTgxNjg2NzMwNzcyMywwLjI2ODc3MDUyODE0NDQ2NDkKKzQsRnJpIDI4IEphbiAxMSwxNy43MzY4MTk5OTU5Njc3NjQsMTUuODM2MzkwNjA4Nzg4NTU5LDkuMjE4MDY4MzI3NDc1OTU2LDE5LjA1NjE2ODU3MzI0NDk3NSwxOS4yMDg0MjY1MzI0MzQxNSwzMTAuNTExNzQ0MjQyMjI1NjMsMzM3LjQzMjc5MDc4NDc2NzgsMjc2LjU1ODM5OTY3MjI0NTMsMjQwLjIxODg3ODk0NTE2NTYsMzAwLjMzNDA4NDEwMjQ3MzMsNjAuOTg5MDIwMzc3NDk0Mzg0LDM1Ni41MzA1NTUyOTQ3NTE0LDcwLjU1OTQ1MTk3MjU0NTEzLDE4Ny4zMDgxODYyMDY1NjIyLDE2Ny40MTkzNzc1ODE3MjI4NywzODQuMzI1ODM3ODI1NjI2NTQsMjc4LjQyODg5NDQxMTMwOTEsNzguMzA0NTMxMjM5NjQ1NzUsMjI3LjkwMTczMzAwMTQ1NzQ0LDE1MS43NzYxNzk2NjE3NzUyMiwyMjQuMjIxMDMzNTg3NzA2NywyNDguOTkxNzc0NTczOTYyMTUsMjIxLjUwMDc2NzUyMjUyNDY1LDUwNC45MDYyMDcwMTg0MDk3NiwzMi4xOTg3NDE0MDAzMjY5MiwwLjQwMzE1NTk5Mzc5NDYyNzEKKzUsU2F0IDI5IEphbiAxMSwyMy42NDkxMDUxNTI1MDc2MjMsMjEuMTE1MTk4MDM1OTgyMDA0LDEyLjI5MDc2MzkxNTM0ODg3NiwyNS40MDgyMzc0Njg0NDMyNSwyNS42MTEyNDgxODIyMDA4MjUsNDE0LjAxNTg2NTk5NzUzMjY3LDQ0OS45MTA2MTI2NjgyOTI2LDM2OC43NDQ3MTcyNjg2NTUsMzIwLjI5MTk5ODczOTUyNjgzLDQwMC40NDU2NDU2OTI3NTM5LDgxLjMxODczNDQ5NjAxOTY2LDQ3NS4zNzQzMTE0MTM0NTEzLDk0LjA3OTMxNjMzNjM3NzE4LDI0OS43NDQzNzMxNDc1ODIwMiwyMjMuMjI1OTQ4Mzg4NTg2MSw1MTIuNDM0NzA2NjUxNDc5NCwzNzEuMjM4NzExNTAxMDcwMjcsMTA0LjQwNjA5Mzg1NTg5OTIzLDMwMy44NjkxMjkyNjk4MTU5LDIwMi4zNjgzNDA3MzMxODcxMywyOTguOTYxNTI3NTk3NjgxMTQsMzMxLjk4OTE5ODc1OTg1NDU2LDI5NS4zMzQ1MDQzNjM5MjcxLDY3My4yMDg2MTI2Mjg3OTY2LDQyLjkzMTY3NjY2NjI3MDY1LDAuNTM3NTQxNTkzODMwMjU0OQorNixTdW4gMzAgSmFuIDExLDI5LjU2MTM5NjIyMTMzMjY0LDI2LjM5NDAxMDc0MTk4Mjg3NSwxNS4zNjM0NjI1NzU5MTczODIsMzEuNzYwMzEyNzE1NzEwNDIsMzIuMDE0MDc2MjM0Nzg5MTUsNTE3LjUyMDA5MTI1Njk2MTUsNTYyLjM4ODU0NzAyOTYzOTIsNDYwLjkzMTEyNzA1MTM4MjMsNDAwLjM2NTE5ODYwNzAwNzg3LDUwMC41NTczMDczOTQ1OTYsMTAxLjY0ODQ2ODk0NDI1OTA0LDU5NC4yMTgxODYzNzU5MDczLDExNy41OTkyMDQyMjAwNzM1NywzMTIuMTgwNjIyNTI0Nzg4NzYsMjc5LjAzMjU3NTAwMjAyMDEsNjQwLjU0MzcwMzU4NjIwMSw0NjQuMDQ4NjIxNDAwNjQ4NSwxMzAuNTA3NjgyNTczNzE1MzMsMzc5LjgzNjYwMTUwNTU3MDcsMjUyLjk2MDU1MjM5Njc2MDEsMzczLjcwMjA5NjM0ODE0OTYsNDE0Ljk4NjcwNTk0MzE3MTE2LDM2OS4xNjgzMTUwMzkwNjY0NCw4NDEuNTExMTg2NTQxNTg5LDUzLjY2NDYyMjY2NTE0OTY0LDAuNjcxOTI3MzI4MjUxNDgyNworNyxNb24gMzEgSmFuIDExLDM1LjQ3MzY5MzIwMjQ0ODcyLDMxLjY3MjgyODcyNjc5NjQ1MywxOC40MzYxNjQzMDkxODQ1NDgsMzguMTEyMzk0MzE1MDUyODQsMzguNDE2OTEwNjkwMjA1NTI2LDYyMS4wMjQ0MjAwMjA2MTU1LDY3NC44NjY1OTM4Njg5MjAyLDU1My4xMTc2MjkwMjA1MTk0LDQ4MC40Mzg0Nzg1NDc2ODg3Niw2MDAuNjY5MDY5MjA4MDk5OSwxMjEuOTc4MjIzNzIyMjMyODcsNzEzLjA2MjE4MDE4MjIzODMsMTQxLjExOTExNTYyMzY1Nzg4LDM3NC42MTY5MzQzMzgyNDQ5LDMzNC44MzkyNTc0MjIwODA4LDc2OC42NTI4Mjg2Mjk5MTk2LDU1Ni44NTg2MjQxMTAxMzY3LDE1Ni42MDkyOTczOTMxMjAxMyw0NTUuODA0MTQ5NzA4Nzk3NjQsMzAzLjU1MjgxNDY1MjU0NDcsNDQ4LjQ0MjczOTgzOTE4NjgsNDk3Ljk4NDI5NjEyMzk5NDk3LDQ0My4wMDIxOTk1NDgwMTY0LDEwMDkuODEzOTI4NzU2OTU1NCw2NC4zOTc1NzkzOTY5NzQ2MywwLjgwNjMxMzE5NzA1ODQ0NQorOCxUdWUgMSBGZWIgMTEsNDEuMzg1OTk2MDk1ODYxNzg1LDM2Ljk1MTY1MTk5MDQyODAxLDIxLjUwODg2OTExNTE1MzQ1LDQ0LjQ2NDQ4MjI2NjQ3Njg2LDQ0LjgxOTc1MTU0ODQ1NjM2LDcyNC41Mjg4NTIyODg1OTgzLDc4Ny4zNDQ3NTMxODYyNDgsNjQ1LjMwNDIyMzE3NjE1ODQsNTYwLjUxMTgzODU2MTY0OTYsNzAwLjc4MDkzMTEzMzM2NTYsMTQyLjMwNzk5ODgyOTk2MTUsODMxLjkwNjI5MjgzMjU2MywxNjQuNjM5MDUwNTQ3MTUzNTcsNDM3LjA1MzMwODU4ODAxMjg0LDM5MC42NDU5OTU2NDg4MjM4LDg5Ni43NjIwODE3ODI3NjMyLDY0OS42Njg3MTk2Mjk2Mjc2LDE4Mi43MTA5MzgzMTQxMzk3NSw1MzEuNzcxNzczODc5NTcyOCwzNTQuMTQ1MTI3NTAwNTkxNiw1MjMuMTgzNDU4MDcwODY3NSw1ODAuOTgxOTY5MzAyNDA5LDUxNi44MzYxNTc4OTA4NTA5LDExNzguMTE2ODM5Mjc1MDY0LDc1LjEzMDU0Njg2MTc1NjM2LDAuOTQwNjk5MjAwMjUxMjc2Cis5LFdlZCAyIEZlYiAxMSw0Ny4yOTgzMDQ5MDE1Nzc3NDQsNDIuMjMwNDgwNTMyODgyODQsMjQuNTgxNTc2OTkzODI3MTU2LDUwLjgxNjU3NjU2OTk4ODgyNSw1MS4yMjI1OTg4MDk1NDgwNSw4MjguMDMzMzg4MDYxMDEzMyw4OTkuODIzMDI0OTgxNzM1Miw3MzcuNDkwOTA5NTE4MzkxNiw2NDAuNTg1Mjc4NjQ4OTcwNCw4MDAuODkyODkzMTcwNDkzMiwxNjIuNjM3Nzk0MjY3NDY1Miw5NTAuNzUwNTI0MzI3MDAwNCwxODguMTU5MDA4OTkwNTg0Miw0OTkuNDg5NzQ1Mjc0MTU1MDQsNDQ2LjQ1Mjc4OTY4MjMwNTE0LDEwMjQuODcxNDYzMDQ0ODU5OSw3NDIuNDc4OTA3OTU5MjE0LDIwOC44MTI2MDUzMzY4MDAzMiw2MDcuNzM5NDc0MDE3OTcyMiw0MDQuNzM3NDkwOTQwOTUxNCw1OTcuOTI0MjUxMDQzMjY2NCw2NjMuOTc5NzI1NDc4NDk2MSw1OTAuNjcwMTkwMDY3NjQzNywxMzQ2LjQxOTkxODA5NjA4Myw4NS44NjM1MjUwNTk1MDU1NSwxLjA3NTA4NTMzNzgzMDExMDIKKzEwLFRodSAzIEZlYiAxMSw1My4yMTA2MTk2MTk2MDI1MSw0Ny41MDkzMTQzNTQxNjYyMSwyNy42NTQyODc5NDUyMDg3NDMsNTcuMTY4Njc3MjI1NTk1MSw1Ny42MjU0NTI0NzM0ODcwMSw5MzEuNTM4MDI3MzM3OTY0MiwxMDEyLjMwMTQwOTI1NTQ5NDEsODI5LjY3NzY4ODA0NzMxMTEsNzIwLjY1ODc5ODgwOTczMTQsOTAxLjAwNDk1NTMxOTU4MjgsMTgyLjk2NzYxMDAzNDc2NDM2LDEwNjkuNTk0ODc0NjY1NjY5MywyMTEuNjc4OTkwOTUzOTczMjUsNTYxLjkyNjI0NDM5NjczNCw1MDIuMjU5NjM5NTIyNTgwNDcsMTE1Mi45ODA5NzI0MTYzMzc5LDgzNS4yODkxODkwOTg5ODg3LDIzNC45MTQyOTg0NjExMjc4OCw2ODMuNzA3MjUwMTI0MDcxNiw0NTUuMzI5OTA0OTczNjc0NTYsNjcyLjY2NTExODc1NjQ1ODIsNzQ2Ljk3NzU2NDY1MjMzOTQsNjY0LjUwNDI5NjA3ODQ2ODgsMTUxNC43MjMxNjUyMjAxODA4LDk2LjU5NjUxMzk5MDIzMjk0LDEuMjA5NDcxNjA5Nzk1MDgyCisxMSxGcmkgNCBGZWIgMTEsNTkuMTIyOTQwMjQ5OTQxOTksNTIuNzg4MTUzNDU0MjgzMzk2LDMwLjcyNzAwMTk2OTMwMTI4LDYzLjUyMDc4NDIzMzMwMjAyNCw2NC4wMjgzMTI1NDAyNzk2MywxMDM1LjA0Mjc3MDExOTU1NDIsMTEyNC43Nzk5MDYwMDc2Mzc1LDkyMS44NjQ1NTg3NjMwMDkyLDgwMC43MzIzOTkwNDQwMTI1LDEwMDEuMTE3MTE3NTgwNzM0NSwyMDMuMjk3NDQ2MTMxODc5MywxMTg4LjQzOTM0Mzg0ODY4ODYsMjM1LjE5ODk5NjQzNzM0NDI4LDYyNC4zNjI4MDU5NTU4MTIsNTU4LjA2NjU0NTE2OTcwNTYsMTI4MS4wOTA2MDk4OTczMjUzLDkyOC4wOTk1NjMwNDkwNDQ1LDI2MS4wMTYwMTc2ODcxNDg2LDc1OS42NzUxMDIxOTc5NDcxLDUwNS45MjIzNjk1OTg4MTE3Nyw3NDcuNDA2MDYxMjEwNTE3OSw4MjkuOTc1NDg2ODI0MDIxOSw3MzguMzM4NDc1OTIzMzk5OCwxNjgzLjAyNjU4MDY0NzUyNTksMTA3LjMyOTUxMzY1Mzk0OTI1LDEuMzQzODU4MDE2MTQ2MzI1NgorMTIsU2F0IDUgRmViIDExLDY1LjAzNTI2Njc5MjYwMjEsNTguMDY2OTk3ODMzMjM5NjgsMzMuNzk5NzE5MDY2MTA3ODQsNjkuODcyODk3NTkzMTE1OTcsNzAuNDMxMTc5MDA5OTMyMzIsMTEzOC41NDc2MTY0MDU4ODcsMTIzNy4yNTg1MTUyMzgyNzc0LDEwMTQuMDUxNTIxNjY1NTc4LDg4MC44MDYwNzkzNTE4OTM4LDExMDEuMjI5Mzc5OTU0MDQ4NywyMjMuNjI3MzAyNTU4ODMwMywxMzA3LjI4MzkzMTg3NjE3NzEsMjU4LjcxOTAyNTQ0MDcyMDc3LDY4Ni43OTk0Mjk5NTE0NTE1LDYxMy44NzM1MDY2MjM3MzY0LDE0MDkuMjAwMzc1NDg3OTUwMiwxMDIwLjkxMDAyOTgwOTQ3NDMsMjg3LjExNzc2MzAxNDg4ODUsODM1LjY0MzAzMDIzOTY3NDgsNTU2LjUxNDg4NDgxNjQxMzcsODIyLjE0NzA3ODQwNTUyLDkxMi45NzM0OTE5OTM2MjY2LDgxMi4xNzI3Mjk2MDI1MTA2LDE4NTEuMzMwMTY0Mzc4Mjg2MywxMTguMDYyNTI0MDUwNjY1MjMsMS40NzgyNDQ1NTY4ODM5NzU3CisxMyxTdW4gNiBGZWIgMTEsNzAuOTQ3NTk5MjQ3NTg4NzYsNjMuMzQ1ODQ3NDkxMDQwMzUsMzYuODcyNDM5MjM1NjMxNSw3Ni4yMjUwMTczMDUwNDMyNyw3Ni44MzQwNTE4ODI0NTE0OCwxMjQyLjA1MjU2NjE5NzA2NjIsMTM0OS43MzcyMzY5NDc1MjY1LDExMDYuMjM4NTc2NzU1MTA5OCw5NjAuODc5ODM5NzMzNDU1NSwxMjAxLjM0MTc0MjQzOTYyNSwyNDMuOTU3MTc5MzE1NjM3NzUsMTQyNi4xMjg2Mzg3NDgyNTM3LDI4Mi4yMzkwNzc5NjQxMjYzLDc0OS4yMzYxMTYzODM3MTUxLDY2OS42ODA1MjM4ODQ3Mjg2LDE1MzcuMzEwMjY5MTg4MzQwNywxMTEzLjcyMDU4OTM4MDM3MSwzMTMuMjE5NTM0NDQ0MzczOCw5MTEuNjExMDM0MjQ5MzMwNSw2MDcuMTA3NDUwNjI2NTMwNyw4OTYuODg4MTcwMzQxNTM5Myw5OTUuOTcxNTgwMTYxMjM2NCw4ODYuMDA3MDU3MTE1ODc1MSwyMDE5LjYzMzkxNjQxMjYzMDUsMTI4Ljc5NTU0NTE4MDM5MTYsMS42MTI2MzEyMzIwMDgxNjY2CisxNCxNb24gNyBGZWIgMTEsNzYuODU5OTM3NjE0OTA3ODYsNjguNjI0NzAyNDI3NjkwNjgsMzkuOTQ1MTYyNDc3ODc1MzIsODIuNTc3MTQzMzY5MDkwMjgsODMuMjM2OTMxMTU3ODQzNSwxMzQ1LjU1NzYxOTQ5MzE5NTMsMTQ2Mi4yMTYwNzExMzU0OTc1LDExOTguNDI1NzI0MDMxNjk2NSwxMDQwLjk1MzY4MDE4ODc3NzUsMTMwMS40NTQyMDUwMzc1NjQsMjY0LjI4NzA3NjQwMjMyMTkzLDE1NDQuOTczNDY0NDY1MDM3LDMwNS43NTkxNTQwMDc1ODQzNiw4MTEuNjcyODY1MjUyNjY1LDcyNS40ODc1OTY5NTI3MzgyLDE2NjUuNDIwMjkwOTk4NjI1LDEyMDYuNTMxMjQxNzYxODI3LDMzOS4zMjEzMzE5NzU2MzA0Nyw5ODcuNTc5MTE0MjI2OTkwMiw2NTcuNzAwMDY3MDI5MjEzNiw5NzEuNjI5MzM3MDE4NjUwNSwxMDc4Ljk2OTc1MTMyNjkzNDMsOTU5Ljg0MTQ1ODQ2MzU2NzIsMjE4Ny45Mzc4MzY3NTA3MjY1LDEzOS41Mjg1NzcwNDMxMzkxLDEuNzQ3MDE4MDQxNTE5MDMyNgorMTUsVHVlIDggRmViIDExLDgyLjc3MjI4MTg5NDU2NTM0LDczLjkwMzU2MjY0MzE5NTk0LDQzLjAxNzg4ODc5Mjg0MjM5LDg4LjkyOTI3NTc4NTI2MzM2LDg5LjYzOTgxNjgzNjExNDgsMTQ0OS4wNjI3NzYyOTQzNzc1LDE1NzQuNjk1MDE3ODAyMzAyNiwxMjkwLjYxMjk2MzQ5NTQzMDQsMTEyMS4wMjc2MDA3MTc5NCwxNDAxLjU2Njc2Nzc0Nzk2NTUsMjg0LjYxNjk5MzgxODkwMzIsMTY2My44MTg0MDkwMjY2NDYxLDMyOS4yNzkyNTM1NzExMTg0Myw4NzQuMTA5Njc2NTU4MzYzOCw3ODEuMjk0NzI1ODI3ODIwOCwxNzkzLjUzMDQ0MDkxODkzMSwxMjk5LjM0MTk4Njk1MzkzNTUsMzY1LjQyMzE1NTYwODY4NDcsMTA2My41NDcyNzAxNzI3Myw3MDguMjkyNzM0MDI0NTEyOSwxMDQ2LjM3MDU3ODQzNjkyODMsMTE2MS45NjgwMDU0OTA4MDM1LDEwMzMuNjc1OTMzNjQ1NjYwNSwyMzU2LjI0MTkyNTM5Mjc0MzMsMTUwLjI2MTYxOTYzODkxODUsMS44ODE0MDQ5ODU0MTY3MDgKKzE2LFdlZCA5IEZlYiAxMSw4OC42ODQ2MzIwODY1NjcwOSw3OS4xODI0MjgxMzc1NjE0Miw0Ni4wOTA2MTgxODA1MzU3OCw5NS4yODE0MTQ1NTM1Njg4NSw5Ni4wNDI3MDg5MTcyNzE3OCwxNTUyLjU2ODAzNjYwMDcxNjYsMTY4Ny4xNzQwNzY5NDgwNTQzLDEzODIuODAwMjk1MTQ2NDAzOSwxMjAxLjEwMTYwMTMyMTAyMywxNTAxLjY3OTQzMDU3MDkyOTgsMzA0Ljk0NjkzMTU2NTQwMTk0LDE3ODIuNjYzNDcyNDMzMTk5OCwzNTIuNzk5Mzc2NjU0NzUyMDUsOTM2LjU0NjU1MDMwMDg3NDEsODM3LjEwMTkxMDUxMDAzMjIsMTkyMS42NDA3MTg5NDkzODY4LDEzOTIuMTUyODI0OTU2Nzg5MSwzOTEuNTI1MDA1MzQzNTYyNTUsMTEzOS41MTU1MDIwODY2MjU1LDc1OC44ODU0NTE2MTI0NzkyLDExMjEuMTExODk0NTk2NDQ3NywxMjQ0Ljk2NjM0MjY1MjkyNjksMTEwNy41MTA0ODI2NjIyMjkyLDI1MjQuNTQ2MTgyMzM4ODQ4NywxNjAuOTk0NjcyOTY3NzQwNDYsMi4wMTU3OTIwNjM3MDEzMjc2CisxNyxUaHUgMTAgRmViIDExLDk0LjU5Njk4ODE5MDkxOTAzLDg0LjQ2MTI5ODkxMDc5MjQsNDkuMTYzMzUwNjQwOTU4NTUsMTAxLjYzMzU1OTY3NDAxMzEsMTAyLjQ0NTYwNzQwMTMyMDg0LDE2NTYuMDczNDAwNDEyMzE2LDE3OTkuNjUzMjQ4NTcyODY1MywxNDc0Ljk4NzcxODk4NDcwOSwxMjgxLjE3NTY4MTk5ODEwNjcsMTYwMS43OTIxOTM1MDY1NTY3LDMyNS4yNzY4ODk2NDE4Mzg0LDE5MDEuNTA4NjU0Njg0ODE2NywzNzYuMzE5NTIzMjU4NTA4NzUsOTk4Ljk4MzQ4NjQ4MDI1OCw4OTIuOTA5MTUwOTk5NDI4MywyMDQ5Ljc1MTEyNTA5MDEyMDcsMTQ4NC45NjM3NTU3NzA0ODEsNDE3LjYyNjg4MTE4MDI5MDEsMTIxNS40ODM4MDk5Njg3NTMxLDgwOS40NzgyMTk3OTMxNjMsMTE5NS44NTMyODU0OTcyODMyLDEzMjcuOTY0NzYyODEzMzg3MywxMTgxLjM0NTEwNTUxMzM0NjcsMjY5Mi44NTA2MDc1ODkyMTEsMTcxLjcyNzczNzAyOTYxNTc1LDIuMTUwMTc5Mjc2MzczMDI1NAorMTgsRnJpIDExIEZlYiAxMSwxMDAuNTA5MzUwMjA3NjI3MSw4OS43NDAxNzQ5NjI4OTQxNCw1Mi4yMzYwODYxNzQxMTM3OCwxMDcuOTg1NzExMTQ2NjAyNDcsMTA4Ljg0ODUxMjI4ODI2ODQsMTc1OS41Nzg4Njc3MjkyNzkyLDE5MTIuMTMyNTMyNjc2ODQ3OSwxNTY3LjE3NTIzNTAxMDQzOCwxMzYxLjI0OTg0Mjc0OTI3MSwxNzAxLjkwNTA1NjU1NDk0NjcsMzQ1LjYwNjg2ODA0ODIzMjk3LDIwMjAuMzUzOTU1NzgxNjE2LDM5OS44Mzk2OTMzODI0MTIwNywxMDYxLjQyMDQ4NTA5NjU3OCw5NDguNzE2NDQ3Mjk2MDY1LDIxNzcuODYxNjU5MzQxMjYwNywxNTc3Ljc3NDc3OTM5NTEwMzUsNDQzLjcyODc4MzExODg5MzU1LDEyOTEuNDUyMTkzODE5MTg4Niw4NjAuMDcxMDM4NTY2NjE1LDEyNzAuNTk0NzUxMTM5NTA5NSwxNDEwLjk2MzI2NTk3MjI2OCwxMjU1LjE3OTgwMjE5OTA4NzEsMjg2MS4xNTUyMDExNDM5OTg1LDE4Mi40NjA4MTE4MjQ1NTUxMiwyLjI4NDU2NjYyMzQzMTkzNTcKKzE5LFNhdCAxMiBGZWIgMTEsMTA2LjQyMTcxODEzNjY5NzE3LDk1LjAxOTA1NjI5Mzg3MTk0LDU1LjMwODgyNDc4MDAwNDU0LDExNC4zMzc4Njg5NzEzNDMzMSwxMTUuMjUxNDIzNTc4MTIwODQsMTg2My4wODQ0Mzg1NTE3MDk4LDIwMjQuNjExOTI5MjYwMTE0NSwxNjU5LjM2Mjg0MzIyMzY4MywxNDQxLjMyNDA4MzU3NDU5NiwxODAyLjAxODAxOTcxNjE5OTcsMzY1LjkzNjg2Njc4NDYwNTksMjEzOS4xOTkzNzU3MjM3MTY1LDQyMy4zNTk4ODcwMjY0ODU1LDExMjMuODU3NTQ2MTQ5ODk2NywxMDA0LjUyMzc5OTM5OTk5NzksMjMwNS45NzIzMjE3MDI5MzUsMTY3MC41ODU4OTU4MzA3NDk3LDQ2OS44MzA3MTExNTkzOTg5LDEzNjcuNDIwNjUzNjM4MDA4LDkxMC42NjM5MDc5MzI4ODU5LDEzNDUuMzM2MjkxNTIzMjAxNSwxNDkzLjk2MTg1MjEyOTY1MTgsMTMyOS4wMTQ1NzI3MTk1MjQzLDMwMjkuNDU5OTYzMDAzMzc5NSwxOTMuMTkzODk3MzUyNTY5MjgsMi40MTg5NTQxMDQ4NzgxOTMKKzIwLFN1biAxMyBGZWIgMTEsMTEyLjMzNDA5MTk3ODEzNTE2LDEwMC4yOTc5NDI5MDM3MzEwNyw1OC4zODE1NjY0NTg2MzM5MSwxMjAuNjkwMDMzMTQ4MjQxOTgsMTIxLjY1NDM0MTI3MDg4NDU2LDE5NjYuNTkwMTEyODc5NzExMSwyMTM3LjA5MTQzODMyMjc3OCwxNzUxLjU1MDU0MzYyNDUzNjIsMTUyMS4zOTg0MDQ0NzQxNjIsMTkwMi4xMzEwODI5OTA0MTYsMzg2LjI2Njg4NTg1MDk3NzYsMjI1OC4wNDQ5MTQ1MTEyMzY2LDQ0Ni44ODAxMDQxOTA3NTI2LDExODYuMjk0NjY5NjQwMjc2NCwxMDYwLjMzMTIwNzMxMTI4MywyNDM0LjA4MzExMjE3NTI3MTcsMTc2My4zOTcxMDUwNzc1MTIyLDQ5NS45MzI2NjUzMDE4MzIzLDE0NDMuMzg5MTg5NDI1Mjg3LDk2MS4yNTY4Mjc4OTIwMjYxLDE0MjAuMDc3OTA2NjQ4NDMzOCwxNTc2Ljk2MDUyMTI4NTYyMTgsMTQwMi44NDk0MTcwNzQ3MzIsMzE5Ny43NjQ4OTMxNjc1MjIsMjAzLjkyNjk5MzYxMzY2ODk3LDIuNTUzMzQxNzIwNzExOTMyCisyMSxNb24gMTQgRmViIDExLDExOC4yNDY0NzE3MzE5NDcsMTA1LjU3NjgzNDc5MjQ3NjgsNjEuNDU0MzExMjEwMDA0OTYsMTI3LjA0MjIwMzY3NzMwNDgzLDEyOC4wNTcyNjUzNjY1NjU5OSwyMDcwLjA5NTg5MDcxMzM4NywyMjQ5LjU3MTA1OTg2NDk1MDMsMTg0My43MzgzMzYyMTMwOSwxNjAxLjQ3MjgwNTQ0ODA0ODYsMjAwMi4yNDQyNDYzNzc2OTU0LDQwNi41OTY5MjUyNDczNjgzNSwyMzc2Ljg5MDU3MjE0NDI5NTcsNDcwLjQwMDM0NDg3NTIzNjg0LDEyNDguNzMxODU1NTY3Nzc5NiwxMTE2LjEzODY3MTAyOTk3NiwyNTYyLjE5NDAzMDc1ODM5OSwxODU2LjIwODQwNzEzNTQ4MzksNTIyLjAzNDY0NTU0NjIxOTgsMTUxOS4zNTc4MDExODExMDE5LDEwMTEuODQ5Nzk4NDQ0MDg2MiwxNDk0LjgxOTU5NjUxNTI4MTMsMTY1OS45NTkyNzM0NDAyNjA5LDE0NzYuNjg0MzM1MjY0NzgzOCwzMzY2LjA2OTk5MTYzNjU5NSwyMTQuNjYwMTAwNjA3ODY0OSwyLjY4NzcyOTQ3MDkzMzI4NjYKKzIyLFR1ZSAxNSBGZWIgMTEsMTI0LjE1ODg1NzM5ODEzODYsMTEwLjg1NTczMTk2MDExNDQzLDY0LjUyNzA1OTAzNDEyMDc3LDEzMy4zOTQzODA1NTg1MzgyMiwxMzQuNDYwMTk1ODY1MTcxNSwyMTczLjYwMTc3MjA1Mjg0MDMsMjM2Mi4wNTA3OTM4ODY3NDQsMTkzNS45MjYyMjA5ODk0MzYyLDE2ODEuNTQ3Mjg2NDk2MzM2MywyMTAyLjM1NzUwOTg3ODEzODQsNDI2LjkyNjk4NDk3Mzc5ODUsMjQ5NS43MzYzNDg2MjMwMTI0LDQ5My45MjA2MDkwNzk5NjE3NiwxMzExLjE2OTEwMzkzMjQ2ODcsMTE3MS45NDYxOTA1NTYxMzI3LDI2OTAuMzA1MDc3NDUyNDQ1LDE5NDkuMDE5ODAyMDA0NzU3OCw1NDguMTM2NjUxODkyNTg3NywxNTk1LjMyNjQ4ODkwNTUyODUsMTA2Mi40NDI4MTk1ODkxMTY5LDE1NjkuNTYxMzYxMTIzODE4NiwxNzQyLjk1ODEwODU5MzY1MjIsMTU1MC41MTkzMjcyODk3NTQsMzUzNC4zNzUyNTg0MTA3NjY1LDIyNS4zOTMyMTgzMzUxNjc4MywyLjgyMjExNzM1NTU0MjM5MTUKKzIzLFdlZCAxNiBGZWIgMTEsMTMwLjA3MTI0ODk3NjcxNTg1LDExNi4xMzQ2MzQ0MDY2NDkyMyw2Ny41OTk4MDk5MzA5ODQzOSwxMzkuNzQ2NTYzNzkxOTQ4NSwxNDAuODYzMTMyNzY2NzA3NSwyMjc3LjEwNzc1Njg5ODE3NSwyNDc0LjUzMDY0MDM4ODI3MiwyMDI4LjExNDE5Nzk1MzY2NzEsMTc2MS42MjE4NDc2MTkxMDUsMjIwMi40NzA4NzM0OTE4NDUsNDQ3LjI1NzA2NTAzMDI4ODM1LDI2MTQuNTgyMjQzOTQ3NTA1NSw1MTcuNDQwODk2ODA0OTUxLDEzNzMuNjA2NDE0NzM0NDA2MSwxMjI3Ljc1Mzc2NTg4OTgwODgsMjgxOC40MTYyNTIyNTc1Mzc1LDIwNDEuODMxMjg5Njg1NDI2Niw1NzQuMjM4Njg0MzQwOTYxOCwxNjcxLjI5NTI1MjU5ODY0MywxMTEzLjAzNTg5MTMyNzE2ODcsMTY0NC4zMDMyMDA0NzQxMjA2LDE4MjUuOTU3MDI2NzQ1ODc4NywxNjI0LjM1NDM5MzE0OTcxNjMsMzcwMi42ODA2OTM0OTAyMDQ3LDIzNi4xMjYzNDY3OTU1ODg1LDIuOTU2NTA1Mzc0NTM5MzgxMgorMjQsVGh1IDE3IEZlYiAxMSwxMzUuOTgzNjQ2NDY3Njg0NjgsMTIxLjQxMzU0MjEzMjA4NjQ2LDcwLjY3MjU2MzkwMDU5ODkyLDE0Ni4wOTg3NTMzNzc1NDE5OCwxNDcuMjY2MDc2MDcxMTgwNDQsMjM4MC42MTM4NDUyNDk0OTQ3LDI1ODcuMDEwNTk5MzY5NjQ2LDIxMjAuMzAyMjY3MTA1ODc1LDE4NDEuNjk2NDg4ODE2NDM0OCwyMzAyLjU4NDMzNzIxODkxNDcsNDY3LjU4NzE2NTQxNjg1ODMsMjczMy40MjgyNTgxMTc4OTQsNTQwLjk2MTIwODA1MDIyNzgsMTQzNi4wNDM3ODc5NzM2NTQ0LDEyODMuNTYxMzk3MDMxMDYwMywyOTQ2LjUyNzU1NTE3MzgwNSwyMTM0LjY0Mjg3MDE3NzU4Myw2MDAuMzQwNzQyODkxMzY4MywxNzQ3LjI2NDA5MjI2MDUyMSwxMTYzLjYyOTAxMzY1ODI5MjMsMTcxOS4wNDUxMTQ1NjYyNjE5LDE5MDguOTU2MDI3ODk3MDIzMiwxNjk4LjE4OTUzMjg0NDc0NDUsMzg3MC45ODYyOTY4NzUwNzgsMjQ2Ljg1OTQ4NTk4OTEzNzYyLDMuMDkwODkzNTI3OTI0MzkKKzI1LEZyaSAxOCBGZWIgMTEsMTQxLjg5NjA0OTg3MTA1MTAyLDEyNi42OTI0NTUxMzY0MzE0Myw3My43NDUzMjA5NDI5Njc0MSwxNTIuNDUwOTQ5MzE1MzI1MDYsMTUzLjY2OTAyNTc3ODU5NjY1LDI0ODQuMTIwMDM3MTA2OTAyNiwyNjk5LjQ5MDY3MDgzMDk3OTUsMjIxMi40OTA0Mjg0NDYxNTIyLDE5MjEuNzcxMjEwMDg4NDA2LDI0MDIuNjk3OTAxMDU5NDQ4LDQ4Ny45MTcyODYxMzM1Mjg2LDI4NTIuMjc0MzkxMTM0Mjk3LDU2NC40ODE1NDI4MTU4MTU5LDE0OTguNDgxMjIzNjUwMjc2LDEzMzkuMzY5MDgzOTc5OTQzLDMwNzQuNjM4OTg2MjAxMzc1MiwyMjI3LjQ1NDU0MzQ4MTMyLDYyNi40NDI4Mjc1NDM4MzM1LDE4MjMuMjMzMDA3ODkxMjM4NywxMjE0LjIyMjE4NjU4MjUzODEsMTc5My43ODcxMDM0MDAzMTc0LDE5OTEuOTU1MTEyMDQ3MTY5LDE3NzIuMDI0NzQ2Mzc0OTEyMiw0MDM5LjI5MjA2ODU2NTU1NSwyNTcuNTkyNjM1OTE1ODI1OTUsMy4yMjUyODE4MTU2OTc1NTIKKzI2LFNhdCAxOSBGZWIgMTEsMTQ3LjgwODQ1OTE4NjgyMDc2LDEzMS45NzEzNzM0MTk2ODk0LDc2LjgxODA4MTA1ODA5Mjk0LDE1OC44MDMxNTE2MDUzMDQwNywxNjAuMDcxOTgxODg4OTYyNTcsMjU4Ny42MjYzMzI0NzA1MDIzLDI4MTEuOTcwODU0NzcyMzg0NCwyMzA0LjY3ODY4MTk3NDU5MDcsMjAwMS44NDYwMTE0MzUwOTgzLDI1MDIuODExNTY1MDEzNTQ1NSw1MDguMjQ3NDI3MTgwMzE5NiwyOTcxLjEyMDY0Mjk5NjgzMjQsNTg4LjAwMTkwMTEwMTczODgsMTU2MC45MTg3MjE3NjQzMzMyLDEzOTUuMTc2ODI2NzM2NTEyOCwzMjAyLjc1MDU0NTM0MDM3NjQsMjMyMC4yNjYzMDk1OTY3Myw2NTIuNTQ0OTM4Mjk4MzgzMywxODk5LjIwMTk5OTQ5MDg3MiwxMjY0LjgxNTQxMDA5OTk1NywxODY4LjUyOTE2Njk3NjM2MTcsMjA3NC45NTQyNzkxOTYzOTksMTg0NS44NjAwMzM3NDAyOTM0LDQyMDcuNTk4MDA4NTYxODAzLDI2OC4zMjU3OTY1NzU2NjQyLDMuMzU5NjcwMjM3ODU5MDAxOAorMjcsU3VuIDIwIEZlYiAxMSwxNTMuNzIwODc0NDE0OTk5OCwxMzcuMjUwMjk2OTgxODY1NjYsNzkuODkwODQ0MjQ1OTc4NiwxNjUuMTU1MzYwMjQ3NDg1MzYsMTY2LjQ3NDk0NDQwMjI4NDYsMjY5MS4xMzI3MzEzNDAzOTc2LDI5MjQuNDUxMTUxMTkzOTczLDIzOTYuODY3MDI3NjkxMjgyNiwyMDgxLjkyMDg5Mjg1NjU5MiwyNjAyLjkyNTMyOTA4MTMwNyw1MjguNTc3NTg4NTU3MjUxNywzMDg5Ljk2NzAxMzcwNTYyLDYxMS41MjIyODI5MDgwMiwxNjIzLjM1NjI4MjMxNTg4ODYsMTQ1MC45ODQ2MjUzMDA4MjUyLDMzMzAuODYyMjMyNTkwOTM3LDI0MTMuMDc4MTY4NTIzOTA2Miw2NzguNjQ3MDc1MTU1MDQzOCwxOTc1LjE3MTA2NzA1OTQ5NjksMTMxNS40MDg2ODQyMTA1OTk0LDE5NDMuMjcxMzA1Mjk0NDY5NiwyMTU3Ljk1MzUyOTM0NDc5NiwxOTE5LjY5NTM5NDk0MDk2Miw0Mzc1LjkwNDExNjg2Mzk5MTUsMjc5LjA1ODk2Nzk2ODY2MzA3LDMuNDk0MDU4Nzk0NDA4ODczNworMjgsTW9uIDIxIEZlYiAxMSwxNTkuNjMzMjk1NTU1NTk0MSwxNDIuNTI5MjI1ODIyOTY1NSw4Mi45NjM2MTA1MDY2Mjc0MywxNzEuNTA3NTc1MjQxODc1MzIsMTcyLjg3NzkxMzMxODU2OTE0LDI3OTQuNjM5MjMzNzE2NjkxNywzMDM2LjkzMTU2MDA5NTg1ODUsMjQ4OS4wNTU0NjU1OTYzMiwyMTYxLjk5NTg1NDM1Mjk2NzQsMjcwMy4wMzkxOTMyNjI4MzI3LDU0OC45MDc3NzAyNjQzNDUxLDMyMDguODEzNTAzMjYwNzc4NCw2MzUuMDQyNjg4MjM0NjgyOSwxNjg1Ljc5MzkwNTMwNTAwNDUsMTUwNi43OTI0Nzk2NzI5MzYyLDM0NTguOTc0MDQ3OTUzMTg0MywyNTA1Ljg5MDEyMDI2Mjk0MTMsNzA0Ljc0OTIzODExMzg0MTIsMjA1MS4xNDAyMTA1OTcxODkzLDEzNjYuMDAyMDA4OTE0NTE2LDIwMTguMDEzNTE4MzU0NzE1NiwyMjQwLjk1Mjg2MjQ5MjQ0MzMsMTk5My41MzA4Mjk5NzY5OTE4LDQ1NDQuMjEwMzkzNDcyMjg4LDI4OS43OTIxNTAwOTQ4MzMzNSwzLjYyODQ0NzQ4NTM0NzMwMgorMjksVHVlIDIyIEZlYiAxMSwxNjUuNTQ1NzIyNjA4NjA5NSwxNDcuODA4MTU5OTQyOTk0MTQsODYuMDM2Mzc5ODQwMDQyNTMsMTc3Ljg1OTc5NjU4ODQ4MDI2LDE3OS4yODA4ODg2Mzc4MjI2LDI4OTguMTQ1ODM5NTk5NDg4LDMxNDkuNDEyMDgxNDc4MTUyNywyNTgxLjI0Mzk5NTY4OTc5NTYsMjI0Mi4wNzA4OTU5MjQzMDQsMjgwMy4xNTMxNTc1NTgyMjI2LDU2OS4yMzc5NzIzMDE2MjAzLDMzMjcuNjYwMTExNjYyNDI2LDY1OC41NjMxMTcwODE3NTEyLDE3NDguMjMxNTkwNzMxNzQzNCwxNTYyLjYwMDM4OTg1MjkwMTYsMzU4Ny4wODU5OTE0MjcyNDczLDI1OTguNzAyMTY0ODEzOTI4NCw3MzAuODUxNDI3MTc0ODAxNSwyMTI3LjEwOTQzMDEwNDAyNTMsMTQxNi41OTUzODQyMTE3NTcyLDIwOTIuNzU1ODA2MTU3MTc1LDIzMjMuOTUyMjc4NjM5NDIzNiwyMDY3LjM2NjMzODg0ODQ1NjUsNDcxMi41MTY4MzgzODY4NjEsMzAwLjUyNTM0Mjk1NDE4NTc2LDMuNzYyODM2MzEwNjc0NDIxNAorMzAsV2VkIDIzIEZlYiAxMSwxNzEuNDU4MTU1NTc0MDUxOTcsMTUzLjA4NzA5OTM0MTk1NjkzLDg5LjEwOTE1MjI0NjIyNjk2LDE4NC4yMTIwMjQyODczMDY1NSwxODUuNjgzODcwMzYwMDUxNCwzMDAxLjY1MjU0ODk4ODg5MDQsMzI2MS44OTI3MTUzNDA5NjgsMjY3My40MzI2MTc5NzE4MDE0LDIzMjIuMTQ2MDE3NTcwNjgyLDI5MDMuMjY3MjIxOTY3NTc2NSw1ODkuNTY4MTk0NjY5MDk3NSwzNDQ2LjUwNjgzODkxMDY4MjMsNjgyLjA4MzU2OTQ0OTI0ODMsMTgxMC42NjkzMzg1OTYxNjc4LDE2MTguNDA4MzU1ODQwNzc3LDM3MTUuMTk4MDYzMDEzMjU0LDI2OTEuNTE0MzAyMTc2OTYsNzU2Ljk1MzY0MjMzNzk1MDksMjIwMy4wNzg3MjU1ODAwODA2LDE0NjcuMTg4ODEwMTAyMzczNSwyMTY3LjQ5ODE2ODcwMTkyMTcsMjQwNi45NTE3Nzc3ODU4MiwyMTQxLjIwMTkyMTU1NTQzLDQ4ODAuODIzNDUxNjA3ODc5LDMxMS4yNTg1NDY1NDY3MzEwNSwzLjg5NzIyNTI3MDM5MDM2NgorMzEsVGh1IDI0IEZlYiAxMSwxNzcuMzcwNTk0NDUxOTI3NDIsMTU4LjM2NjA0NDAxOTg1OTEyLDkyLjE4MTkyNzcyNTE4MzgsMTkwLjU2NDI1ODMzODM2MDUzLDE5Mi4wODY4NTg0ODUyNjE5LDMxMDUuMTU5MzYxODg1MDAyLDMzNzQuMzczNDYxNjg0NDE3NiwyNzY1LjYyMTMzMjQ0MjQyOTMsMjQwMi4yMjEyMTkyOTIxODIsMzAwMy4zODEzODY0OTA5OTUsNjA5Ljg5ODQzNzM2Njc5NywzNTY1LjM1MzY4NTAwNTY2NTcsNzA1LjYwNDA0NTMzNzE5NzgsMTg3My4xMDcxNDg4OTgzNCwxNjc0LjIxNjM3NzYzNjYxODUsMzg0My4zMTAyNjI3MTEzMzE3LDI3ODQuMzI2NTMyMzUyMTI5LDc4My4wNTU4ODM2MDMzMTU1LDIyNzkuMDQ4MDk3MDI1NDMxNiwxNTE3Ljc4MjI4NjU4NjQxNiwyMjQyLjI0MDYwNTk4OTAzMTMsMjQ4OS45NTEzNTk5MzE3MTU2LDIyMTUuMDM3NTc4MDk3OTg2Niw1MDQ5LjEzMDIzMzEzNTUxMSwzMjEuOTkxNzYwODcyNDc5OSw0LjAzMTYxNDM2NDQ5NTI3CiszMixGcmkgMjUgRmViIDExLDE4My4yODMwMzkyNDIyNDE3MywxNjMuNjQ0OTkzOTc2NzA1OTYsOTUuMjU0NzA2Mjc2OTE2MTEsMTk2LjkxNjQ5ODc0MTY0ODU4LDE5OC40ODk4NTMwMTM0NjA1MywzMjA4LjY2NjI3ODI4NzkyNjYsMzQ4Ni44NTQzMjA1MDg2MTM1LDI4NTcuODEwMTM5MTAxNzcxNywyNDgyLjI5NjUwMTA4ODg4MzQsMzEwMy40OTU2NTExMjg1Nzc3LDYzMC4yMjg3MDAzOTQ3MzkyLDM2ODQuMjAwNjQ5OTQ3NDk1NSw3MjkuMTI0NTQ0NzQ1NjIzMiwxOTM1LjU0NTAyMTYzODMyMjYsMTczMC4wMjQ0NTUyNDA0ODE4LDM5NzEuNDIyNTkwNTIxNjA5NCwyODc3LjEzODg1NTMzOTUyOCw4MDkuMTU4MTUwOTcwOTIxMywyMzU1LjAxNzU0NDQ0MDE1NCwxNTY4LjM3NTgxMzY2MzkzNDcsMjMxNi45ODMxMTgwMTg1Nzg0LDI1NzIuOTUxMDI1MDc3MTkzLDIyODguODczMzA4NDc2Miw1MjE3LjQzNzE4Mjk2OTkyNCwzMzIuNzI0OTg1OTMxNDQzMTQsNC4xNjYwMDM1OTI5ODkyNjgKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvRGVtb2dyYXBoaWNTRUlSRGlzZWFzZV9GRF9SZWZlcmVuY2UvRGVtb2dyYXBoaWNNb2RlbC9tZW4vQ291bnRfMi5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0RlbW9ncmFwaGljU0VJUkRpc2Vhc2VfRkRfUmVmZXJlbmNlL0RlbW9ncmFwaGljTW9kZWwvbWVuL0NvdW50XzIuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFmYTc2YTIKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0RlbW9ncmFwaGljU0VJUkRpc2Vhc2VfRkRfUmVmZXJlbmNlL0RlbW9ncmFwaGljTW9kZWwvbWVuL0NvdW50XzIuY3N2CkBAIC0wLDAgKzEsMzMgQEAKK2l0ZXJhdGlvbix0aW1lLEVHLUZSRy1HMjEwMDAxLEVHLUZSRy1HMjEwMDAyLEVHLUZSRy1HMjEwMDAzLEVHLUZSRy1HMjEwMDA0LEVHLUZSRy1HMjEwMDA1LEVHLUxPRS1HMjQwMDAxLEVHLUxPRS1HMjQwMDAyLEVHLUxPRS1HMjQwMDAzLEVHLUxPRS1HMjQwMDA0LEVHLUxPRS1HMjQwMDA1LEVHLUxPRS1HMjQwMDA2LEVHLUxPRS1HMjQwMDA3LEVHLUxPRS1HMjQwMDA4LEVHLUxPRS1HMjQwMDA5LEVHLVVQRS1HMjkwMDAxLEVHLVVQRS1HMjkwMDAyLEVHLVVQRS1HMjkwMDAzLEVHLVVQRS1HMjkwMDA0LEVHLVVQRS1HMjkwMDA1LEVHLVVQRS1HMjkwMDA2LEVHLVVQRS1HMjkwMDA3LEVHLVVQRS1HMjkwMDA4LEVHLVVSRy1HMzAwMDAxLEVHLVVSRy1HMzAwMDAyLEVHLVVSRy1HMzAwMDAzLEVHLVVSRy1HMzAwMDA0CisxLFR1ZSAyNSBKYW4gMTEsMTQ3ODA2LjY4NTQ5Mjk5NjU2LDEzMTk2OS43ODk3NzAwNzA4Nyw3NjgxNy4xNTkyNDUxMTQ3NywxNTg4MDEuMjQ1OTc1NzQyNTIsMTYwMDcwLjA2MTAzMzUwMzUsMjU4NzU5NS4yODEwODkwNjkzLDI4MTE5MzcuMTExMjY4MzQ5NSwyMzA0NjUxLjAyNTk1MDI0OTgsMjAwMTgyMS45ODkzODcwNTY4LDI1MDI3ODEuNTMxNDA0OTExNSw1MDgyNDEuMzI4MjM3NjIyMTYsMjk3MTA4NC45ODk3MDM2MTQ3LDU4Nzk5NC44NDUxMDk1MDE2LDE1NjA4OTkuOTkwODIwODQwMiwxMzk1MTYwLjA4NDY4NzE0MDgsMzIwMjcxMi4xMTI1MDAzNzQsMjMyMDIzOC40NjY1MjE2NjksNjUyNTM3LjEwNzc5MzA1NTksMTg5OTE3OS4yMDkxNjU2MzY1LDEyNjQ4MDAuMjMyMzgwODA2LDE4Njg1MDYuNzQ0NzIzNTIxNCwyMDc0OTI5LjM3OTg1Mjk0NjQsMTg0NTgzNy44ODM1MTU4NzMyLDQyMDc1NDcuNTE3NjA0NDk0NSwyNjgzMjIuNTc2NjgwMDU4MiwzMzU5LjYyOTkyMTk5MDg0OTcKKzIsV2VkIDI2IEphbiAxMSwxNDc4MDYuODMzMjk5NjgyMDcsMTMxOTY5LjkyMTczOTg2MDY0LDc2ODE3LjIzNjA2MjI3NDAyLDE1ODgwMS40MDQ3NzY5ODg1LDE2MDA3MC4yMjExMDM1NjQ1NSwyNTg3NTk3Ljg2ODY4NDM1MDUsMjgxMTkzOS45MjMyMDU0NjEsMjMwNDY1My4zMzA2MDEyNzYsMjAwMTgyMy45OTEyMDkwNDYyLDI1MDI3ODQuMDM0MTg2NDQzLDUwODI0MS44MzY0Nzg5NTA0LDI5NzEwODcuOTYwNzg4NjA0Myw1ODc5OTUuNDMzMTA0MzQ2NywxNTYwOTAxLjU1MTcyMDgzMSwxMzk1MTYxLjQ3OTg0NzIyNTQsMzIwMjcxNS4zMTUyMTI0ODcsMjMyMDI0MC43ODY3NjAxMzU2LDY1MjUzNy43NjAzMzAxNjM4LDE4OTkxODEuMTA4MzQ0ODQ1NywxMjY0ODAxLjQ5NzE4MTAzODQsMTg2ODUwOC42MTMyMzAyNjYxLDIwNzQ5MzEuNDU0NzgyMzI2MiwxODQ1ODM5LjcyOTM1Mzc1NjYsNDIwNzU1MS43MjUxNTIwMTIsMjY4MzIyLjg0NTAwMjYzNDg2LDMzNTkuNjMzMjgxNjIwNzcyCiszLFRodSAyNyBKYW4gMTEsMTQ3ODA2Ljk4MTEwNjUxNTM2LDEzMTk3MC4wNTM3MDk3ODIzNyw3NjgxNy4zMTI4Nzk1MTAxLDE1ODgwMS41NjM1NzgzOTMyOCwxNjAwNzAuMzgxMTczNzg1NjYsMjU4NzYwMC40NTYyODIyMTk0LDI4MTE5NDIuNzM1MTQ1Mzg0LDIzMDQ2NTUuNjM1MjU0NjA2NiwyMDAxODI1Ljk5MzAzMzAzNzUsMjUwMjc4Ni41MzY5NzA0NzcsNTA4MjQyLjM0NDcyMDc4NjksMjk3MTA5MC45MzE4NzY1NjUzLDU4Nzk5Ni4wMjEwOTk3Nzk5LDE1NjA5MDMuMTEyNjIyMzgyOCwxMzk1MTYyLjg3NTAwODcwNTMsMzIwMjcxOC41MTc5Mjc4MDIsMjMyMDI0My4xMDcwMDA5MjIzLDY1MjUzOC40MTI4Njc5MjQxLDE4OTkxODMuMDA3NTI1OTU0MiwxMjY0ODAyLjc2MTk4MjUzNTUsMTg2ODUxMC40ODE3Mzg4NzkzLDIwNzQ5MzMuNTI5NzEzNzgxLDE4NDU4NDEuNTc1MTkzNDg2LDQyMDc1NTUuOTMyNzAzNzM3LDI2ODMyMy4xMTMzMjU0Nzk4NSwzMzU5LjYzNjY0MTI1NDA1MzMKKzQsRnJpIDI4IEphbiAxMSwxNDc4MDcuMTI4OTEzNDk2NDgsMTMxOTcwLjE4NTY3OTgzNjA4LDc2ODE3LjM4OTY5NjgyMjk3LDE1ODgwMS43MjIzNzk5NTY4NiwxNjAwNzAuNTQxMjQ0MTY2ODQsMjU4NzYwMy4wNDM4ODI2NzU1LDI4MTE5NDUuNTQ3MDg4MTE5LDIzMDQ2NTcuOTM5OTEwMjQyLDIwMDE4MjcuOTk0ODU5MDMwNSwyNTAyNzg5LjAzOTc1NzAxNDMsNTA4MjQyLjg1Mjk2MzEzMTYsMjk3MTA5My45MDI5Njc0OTcyLDU4Nzk5Ni42MDkwOTU4MDEsMTU2MDkwNC42NzM1MjU0OTU1LDEzOTUxNjQuMjcwMTcxNTgwNCwzMjAyNzIxLjcyMDY0NjMyLDIzMjAyNDUuNDI3MjQ0MDI5NSw2NTI1MzkuMDY1NDA2MzM2OSwxODk5MTg0LjkwNjcwODk2MTYsMTI2NDgwNC4wMjY3ODUyOTc2LDE4Njg1MTIuMzUwMjQ5MzYxLDIwNzQ5MzUuNjA0NjQ3MzEwNywxODQ1ODQzLjQyMTAzNTA2MTEsNDIwNzU2MC4xNDAyNTk2NywyNjgzMjMuMzgxNjQ4NTkzMiwzMzU5LjY0MDAwMDg5MDY5NDQKKzUsU2F0IDI5IEphbiAxMSwxNDc4MDcuMjc2NzIwNjI1MzgsMTMxOTcwLjMxNzY1MDAyMTc1LDc2ODE3LjQ2NjUxNDIxMjY2LDE1ODgwMS44ODExODE2NzkyMywxNjAwNzAuNzAxMzE0NzA4MSwyNTg3NjA1LjYzMTQ4NTcxOTIsMjgxMTk0OC4zNTkwMzM2NjYsMjMwNDY2MC4yNDQ1NjgxODE3LDIwMDE4MjkuOTk2Njg3MDI1MywyNTAyNzkxLjU0MjU0NjA1NCw1MDgyNDMuMzYxMjA1OTg0NiwyOTcxMDk2Ljg3NDA2MTQsNTg3OTk3LjE5NzA5MjQxMDEsMTU2MDkwNi4yMzQ0MzAxNjksMTM5NTE2NS42NjUzMzU4NTA2LDMyMDI3MjQuOTIzMzY4MDQwNSwyMzIwMjQ3Ljc0NzQ4OTQ1NjYsNjUyNTM5LjcxNzk0NTQwMjQsMTg5OTE4Ni44MDU4OTM4NjgyLDEyNjQ4MDUuMjkxNTg5MzI0NCwxODY4NTE0LjIxODc2MTcxMTEsMjA3NDkzNy42Nzk1ODI5MTUzLDE4NDU4NDUuMjY2ODc4NDgyMiw0MjA3NTY0LjM0NzgxOTgxMSwyNjgzMjMuNjQ5OTcxOTc0ODQsMzM1OS42NDMzNjA1MzA2OTUKKzYsU3VuIDMwIEphbiAxMSwxNDc4MDcuNDI0NTI3OTAyMSwxMzE5NzAuNDQ5NjIwMzM5NCw3NjgxNy41NDMzMzE2NzkxOCwxNTg4MDIuMDM5OTgzNTYwNDIsMTYwMDcwLjg2MTM4NTQwOTQzLDI1ODc2MDguMjE5MDkxMzUwNywyODExOTUxLjE3MDk4MjAyNSwyMzA0NjYyLjU0OTIyODQyNiwyMDAxODMxLjk5ODUxNzAyMiwyNTAyNzk0LjA0NTMzNzU5NjQsNTA4MjQzLjg2OTQ0OTM0NTgsMjk3MTA5OS44NDUxNTgyNzQzLDU4Nzk5Ny43ODUwODk2MDcxLDE1NjA5MDcuNzk1MzM2NDAzNCwxMzk1MTY3LjA2MDUwMTUxNTksMzIwMjcyOC4xMjYwOTI5NjQsMjMyMDI1MC4wNjc3MzcyMDQsNjUyNTQwLjM3MDQ4NTEyMDMsMTg5OTE4OC43MDUwODA2NzQsMTI2NDgwNi41NTYzOTQ2MTYsMTg2ODUxNi4wODcyNzU5MywyMDc0OTM5Ljc1NDUyMDU5NDgsMTg0NTg0Ny4xMTI3MjM3NDkxLDQyMDc1NjguNTU1Mzg0MTU4LDI2ODMyMy45MTgyOTU2MjQ4LDMzNTkuNjQ2NzIwMTc0MDU1NgorNyxNb24gMzEgSmFuIDExLDE0NzgwNy41NzIzMzUzMjY2NCwxMzE5NzAuNTgxNTkwNzg5MDIsNzY4MTcuNjIwMTQ5MjIyNTEsMTU4ODAyLjE5ODc4NTYwMDQsMTYwMDcxLjAyMTQ1NjI3MDgzLDI1ODc2MTAuODA2Njk5NTcsMjgxMTk1My45ODI5MzMxOTYyLDIzMDQ2NjQuODUzODkwOTc1NSwyMDAxODM0LjAwMDM0OTAyMDYsMjUwMjc5Ni41NDgxMzE2NDIsNTA4MjQ0LjM3NzY5MzIxNTI3LDI5NzExMDIuODE2MjU4MTE5NCw1ODc5OTguMzczMDg3MzkyMiwxNTYwOTA5LjM1NjI0NDE5ODcsMTM5NTE2OC40NTU2Njg1NzYzLDMyMDI3MzEuMzI4ODIxMDksMjMyMDI1Mi4zODc5ODcyNzIsNjUyNTQxLjAyMzAyNTQ5MDgsMTg5OTE5MC42MDQyNjkzNzksMTI2NDgwNy44MjEyMDExNzIyLDE4Njg1MTcuOTU1NzkyMDE3MywyMDc0OTQxLjgyOTQ2MDM0OTQsMTg0NTg0OC45NTg1NzA4NjIsNDIwNzU3Mi43NjI5NTI3MTMsMjY4MzI0LjE4NjYxOTU0MzA2LDMzNTkuNjUwMDc5ODIwNzc1OAorOCxUdWUgMSBGZWIgMTEsMTQ3ODA3LjcyMDE0Mjg5ODk2LDEzMTk3MC43MTM1NjEzNzA2Miw3NjgxNy42OTY5NjY4NDI2NiwxNTg4MDIuMzU3NTg3Nzk5MiwxNjAwNzEuMTgxNTI3MjkyMywyNTg3NjEzLjM5NDMxMDM3NjYsMjgxMTk1Ni43OTQ4ODcxNzksMjMwNDY2Ny4xNTg1NTU4Mjk0LDIwMDE4MzYuMDAyMTgzMDIxLDI1MDI3OTkuMDUwOTI4MTksNTA4MjQ0Ljg4NTkzNzU5Mjk1LDI5NzExMDUuNzg3MzYwOTM1NSw1ODc5OTguOTYxMDg1NzY1MywxNTYwOTEwLjkxNzE1MzU1NSwxMzk1MTY5Ljg1MDgzNzAzMiwzMjAyNzM0LjUzMTU1MjQxOSwyMzIwMjU0LjcwODIzOTY1OTcsNjUyNTQxLjY3NTU2NjUxMzgsMTg5OTE5Mi41MDM0NTk5ODMzLDEyNjQ4MDkuMDg2MDA4OTkzNCwxODY4NTE5LjgyNDMwOTk3MywyMDc0OTQzLjkwNDQwMjE3OSwxODQ1ODUwLjgwNDQxOTgyMDQsNDIwNzU3Ni45NzA1MjU0NzYsMjY4MzI0LjQ1NDk0MzcyOTcsMzM1OS42NTM0Mzk0NzA4NTU2Cis5LFdlZCAyIEZlYiAxMSwxNDc4MDcuODY3OTUwNjE5MSwxMzE5NzAuODQ1NTMyMDg0MTcsNzY4MTcuNzczNzg0NTM5NjMsMTU4ODAyLjUxNjM5MDE1NjgsMTYwMDcxLjM0MTU5ODQ3Mzg0LDI1ODc2MTUuOTgxOTIzNzcxLDI4MTE5NTkuNjA2ODQzOTc0LDIzMDQ2NjkuNDYzMjIyOTg4LDIwMDE4MzguMDA0MDE5MDIzMiwyNTAyODAxLjU1MzcyNzI0MSw1MDgyNDUuMzk0MTgyNDc4OSwyOTcxMTA4Ljc1ODQ2NjcyMyw1ODc5OTkuNTQ5MDg0NzI2NCwxNTYwOTEyLjQ3ODA2NDQ3MiwxMzk1MTcxLjI0NjAwNjg4MywzMjAyNzM3LjczNDI4Njk1MDQsMjMyMDI1Ny4wMjg0OTQzNjgsNjUyNTQyLjMyODEwODE4OTQsMTg5OTE5NC40MDI2NTI0ODY3LDEyNjQ4MTAuMzUwODE4MDc5NCwxODY4NTIxLjY5MjgyOTc5NzMsMjA3NDk0NS45NzkzNDYwODMyLDE4NDU4NTIuNjUwMjcwNjI0OCw0MjA3NTgxLjE3ODEwMjQ0NywyNjgzMjQuNzIzMjY4MTg0NjQsMzM1OS42NTY3OTkxMjQyOTUKKzEwLFRodSAzIEZlYiAxMSwxNDc4MDguMDE1NzU4NDg3MDgsMTMxOTcwLjk3NzUwMjkyOTcyLDc2ODE3Ljg1MDYwMjMxMzQxLDE1ODgwMi42NzUxOTI2NzMxNywxNjAwNzEuNTAxNjY5ODE1NDUsMjU4NzYxOC41Njk1Mzk3NTMsMjgxMTk2Mi40MTg4MDM1ODEsMjMwNDY3MS43Njc4OTI0NTEsMjAwMTg0MC4wMDU4NTcwMjcxLDI1MDI4MDQuMDU2NTI4Nzk0Niw1MDgyNDUuOTAyNDI3ODczMDUsMjk3MTExMS43Mjk1NzU0ODEzLDU4ODAwMC4xMzcwODQyNzU1LDE1NjA5MTQuMDM4OTc2OTUsMTM5NTE3Mi42NDExNzgxMjksMzIwMjc0MC45MzcwMjQ2ODQ2LDIzMjAyNTkuMzQ4NzUxMzk2NCw2NTI1NDIuOTgwNjUwNTE3NSwxODk5MTk2LjMwMTg0Njg4OTMsMTI2NDgxMS42MTU2Mjg0MzAyLDE4Njg1MjMuNTYxMzUxNDkwMiwyMDc0OTQ4LjA1NDI5MjA2MjUsMTg0NTg1NC40OTYxMjMyNzUsNDIwNzU4NS4zODU2ODM2MjUsMjY4MzI0Ljk5MTU5MjkwNzksMzM1OS42NjAxNTg3ODEwOTQKKzExLEZyaSA0IEZlYiAxMSwxNDc4MDguMTYzNTY2NTAyODMsMTMxOTcxLjEwOTQ3MzkwNzIsNzY4MTcuOTI3NDIwMTY0MDEsMTU4ODAyLjgzMzk5NTM0ODM3LDE2MDA3MS42NjE3NDEzMTcxMywyNTg3NjIxLjE1NzE1ODMyMiwyODExOTY1LjIzMDc2NTk5OTgsMjMwNDY3NC4wNzI1NjQyMTksMjAwMTg0Mi4wMDc2OTcwMzMsMjUwMjgwNi41NTkzMzI4NTEzLDUwODI0Ni40MTA2NzM3NzU1LDI5NzExMTQuNzAwNjg3MjExLDU4ODAwMC43MjUwODQ0MTI2LDE1NjA5MTUuNTk5ODkwOTg5LDEzOTUxNzQuMDM2MzUwNzcwMiwzMjAyNzQ0LjEzOTc2NTYyMTYsMjMyMDI2MS42NjkwMTA3NDU0LDY1MjU0My42MzMxOTM0OTgxLDE4OTkxOTguMjAxMDQzMTkxMSwxMjY0ODEyLjg4MDQ0MDA0NTgsMTg2ODUyNS40Mjk4NzUwNTE2LDIwNzQ5NTAuMTI5MjQwMTE2OCwxODQ1ODU2LjM0MTk3Nzc3MTEsNDIwNzU4OS41OTMyNjkwMTEsMjY4MzI1LjI1OTkxNzg5OTUsMzM1OS42NjM1MTg0NDEyNTMKKzEyLFNhdCA1IEZlYiAxMSwxNDc4MDguMzExMzc0NjY2NCwxMzE5NzEuMjQxNDQ1MDE2Nyw3NjgxOC4wMDQyMzgwOTE0MiwxNTg4MDIuOTkyNzk4MTgyMzYsMTYwMDcxLjgyMTgxMjk3ODksMjU4NzYyMy43NDQ3Nzk0NzksMjgxMTk2OC4wNDI3MzEyMzA2LDIzMDQ2NzYuMzc3MjM4MjkyLDIwMDE4NDQuMDA5NTM5MDQwNywyNTAyODA5LjA2MjEzOTQxMDUsNTA4MjQ2LjkxODkyMDE4NjIsMjk3MTExNy42NzE4MDE5MTE3LDU4ODAwMS4zMTMwODUxMzc4LDE1NjA5MTcuMTYwODA2NTg4OCwxMzk1MTc1LjQzMTUyNDgwNjQsMzIwMjc0Ny4zNDI1MDk3NjE1LDIzMjAyNjMuOTg5MjcyNDE0Miw2NTI1NDQuMjg1NzM3MTMxNCwxODk5MjAwLjEwMDI0MTM5MjIsMTI2NDgxNC4xNDUyNTI5MjYzLDE4Njg1MjcuMjk4NDAwNDgxNSwyMDc0OTUyLjIwNDE5MDI0NiwxODQ1ODU4LjE4NzgzNDExMzEsNDIwNzU5My44MDA4NTg2MDUsMjY4MzI1LjUyODI0MzE1OTQsMzM1OS42NjY4NzgxMDQ3NzE1CisxMyxTdW4gNiBGZWIgMTEsMTQ3ODA4LjQ1OTE4Mjk3Nzc2LDEzMTk3MS4zNzM0MTYyNTgxNCw3NjgxOC4wODEwNTYwOTU2NiwxNTg4MDMuMTUxNjAxMTc1MTcsMTYwMDcxLjk4MTg4NDgwMDcsMjU4NzYyNi4zMzI0MDMyMjQsMjgxMTk3MC44NTQ2OTkyNzMsMjMwNDY3OC42ODE5MTQ2NjksMjAwMTg0Ni4wMTEzODMwNTA0LDI1MDI4MTEuNTY0OTQ4NDcyNyw1MDgyNDcuNDI3MTY3MTA1MSwyOTcxMTIwLjY0MjkxOTU4MzIsNTg4MDAxLjkwMTA4NjQ1MDgsMTU2MDkxOC43MjE3MjM3NDk1LDEzOTUxNzYuODI2NzAwMjM4LDMyMDI3NTAuNTQ1MjU3MTA0LDIzMjAyNjYuMzA5NTM2NDAzNSw2NTI1NDQuOTM4MjgxNDE3MSwxODk5MjAxLjk5OTQ0MTQ5MjQsMTI2NDgxNS40MTAwNjcwNzE0LDE4Njg1MjkuMTY2OTI3Nzc5OCwyMDc0OTU0LjI3OTE0MjQ1MDMsMTg0NTg2MC4wMzM2OTIzMDEsNDIwNzU5OC4wMDg0NTI0MDUsMjY4MzI1Ljc5NjU2ODY4NzY2LDMzNTkuNjcwMjM3NzcxNjQ5NworMTQsTW9uIDcgRmViIDExLDE0NzgwOC42MDY5OTE0MzY5NCwxMzE5NzEuNTA1Mzg3NjMxNTcsNzY4MTguMTU3ODc0MTc2NzIsMTU4ODAzLjMxMDQwNDMyNjc3LDE2MDA3Mi4xNDE5NTY3ODI2LDI1ODc2MjguOTIwMDI5NTU2NCwyODExOTczLjY2NjY3MDEyOCwyMzA0NjgwLjk4NjU5MzM1MSwyMDAxODQ4LjAxMzIyOTA2MTgsMjUwMjgxNC4wNjc3NjAwMzc3LDUwODI0Ny45MzU0MTQ1MzIyNiwyOTcxMTIzLjYxNDA0MDIyNiw1ODgwMDIuNDg5MDg4MzUxOCwxNTYwOTIwLjI4MjY0MjQ3MTQsMTM5NTE3OC4yMjE4NzcwNjQ4LDMyMDI3NTMuNzQ4MDA3NjQ5NiwyMzIwMjY4LjYyOTgwMjcxMyw2NTI1NDUuNTkwODI2MzU1NCwxODk5MjAzLjg5ODY0MzQ5MTgsMTI2NDgxNi42NzQ4ODI0ODE2LDE4Njg1MzEuMDM1NDU2OTQ2OCwyMDc0OTU2LjM1NDA5NjcyOTUsMTg0NTg2MS44Nzk1NTIzMzQ4LDQyMDc2MDIuMjE2MDUwNDEzLDI2ODMyNi4wNjQ4OTQ0ODQyNCwzMzU5LjY3MzU5NzQ0MTg4NzUKKzE1LFR1ZSA4IEZlYiAxMSwxNDc4MDguNzU0ODAwMDQzOTQsMTMxOTcxLjYzNzM1OTEzNjk1LDc2ODE4LjIzNDY5MjMzNDU5LDE1ODgwMy40NjkyMDc2MzcxNiwxNjAwNzIuMzAyMDI4OTI0NTgsMjU4NzYzMS41MDc2NTg0NzY1LDI4MTE5NzYuNDc4NjQzNzk0NSwyMzA0NjgzLjI5MTI3NDMzNzYsMjAwMTg1MC4wMTUwNzcwNzUsMjUwMjgxNi41NzA1NzQxMDUzLDUwODI0OC40NDM2NjI0Njc2NSwyOTcxMTI2LjU4NTE2Mzg0LDU4ODAwMy4wNzcwOTA4NDA5LDE1NjA5MjEuODQzNTYyNzU0LDEzOTUxNzkuNjE3MDU1Mjg2NywzMjAyNzU2Ljk1MDc2MTM5NzQsMjMyMDI3MC45NTAwNzEzNDI4LDY1MjU0Ni4yNDMzNzE5NDYyLDE4OTkyMDUuNzk3ODQ3MzkwNCwxMjY0ODE3LjkzOTY5OTE1NjQsMTg2ODUzMi45MDM5ODc5ODIzLDIwNzQ5NTguNDI5MDUzMDgzNSwxODQ1ODYzLjcyNTQxNDIxNDQsNDIwNzYwNi40MjM2NTI2MjksMjY4MzI2LjMzMzIyMDU0OTE2LDMzNTkuNjc2OTU3MTE1NDg1CisxNixXZWQgOSBGZWIgMTEsMTQ3ODA4LjkwMjYwODc5ODczLDEzMTk3MS43NjkzMzA3NzQzMiw3NjgxOC4zMTE1MTA1NjkyOSwxNTg4MDMuNjI4MDExMTA2MzcsMTYwMDcyLjQ2MjEwMTIyNjYsMjU4NzYzNC4wOTUyODk5ODQzLDI4MTE5NzkuMjkwNjIwMjczLDIzMDQ2ODUuNTk1OTU3NjI5LDIwMDE4NTIuMDE2OTI3MDksMjUwMjgxOS4wNzMzOTA2NzU3LDUwODI0OC45NTE5MTA5MTEzLDI5NzExMjkuNTU2MjkwNDI1NCw1ODgwMDMuNjY1MDkzOTE4LDE1NjA5MjMuNDA0NDg0NTk3NywxMzk1MTgxLjAxMjIzNDkwMzYsMzIwMjc2MC4xNTM1MTgzNDgsMjMyMDI3My4yNzAzNDIyOTI3LDY1MjU0Ni44OTU5MTgxODk1LDE4OTkyMDcuNjk3MDUzMTg4MiwxMjY0ODE5LjIwNDUxNzA5NiwxODY4NTM0Ljc3MjUyMDg4NjMsMjA3NDk2MC41MDQwMTE1MTI1LDE4NDU4NjUuNTcxMjc3OTQsNDIwNzYxMC42MzEyNTkwNTMsMjY4MzI2LjYwMTU0Njg4MjM2LDMzNTkuNjgwMzE2NzkyNDQyCisxNyxUaHUgMTAgRmViIDExLDE0NzgwOS4wNTA0MTc3MDEzNCwxMzE5NzEuOTAxMzAyNTQzNjQsNzY4MTguMzg4MzI4ODgwOCwxNTg4MDMuNzg2ODE0NzM0MzcsMTYwMDcyLjYyMjE3MzY4ODcyLDI1ODc2MzYuNjgyOTI0MDc5NywyODExOTgyLjEwMjU5OTU2MzUsMjMwNDY4Ny45MDA2NDMyMjUsMjAwMTg1NC4wMTg3NzkxMDcsMjUwMjgyMS41NzYyMDk3NDksNTA4MjQ5LjQ2MDE1OTg2MzIsMjk3MTEzMi41Mjc0MTk5ODE1LDU4ODAwNC4yNTMwOTc1ODMxLDE1NjA5MjQuOTY1NDA4MDAyMywxMzk1MTgyLjQwNzQxNTkxNiwzMjAyNzYzLjM1NjI3ODUwMTUsMjMyMDI3NS41OTA2MTU1NjMsNjUyNTQ3LjU0ODQ2NTA4NTQsMTg5OTIwOS41OTYyNjA4ODUyLDEyNjQ4MjAuNDY5MzM2MzAwNiwxODY4NTM2LjY0MTA1NTY1ODcsMjA3NDk2Mi41Nzg5NzIwMTY1LDE4NDU4NjcuNDE3MTQzNTExMSw0MjA3NjE0LjgzODg2OTY4NCwyNjgzMjYuODY5ODczNDgzOSwzMzU5LjY4MzY3NjQ3Mjc1OQorMTgsRnJpIDExIEZlYiAxMSwxNDc4MDkuMTk4MjI2NzUxNzYsMTMxOTcyLjAzMzI3NDQ0NDk2LDc2ODE4LjQ2NTE0NzI2OTEzLDE1ODgwMy45NDU2MTg1MjEyLDE2MDA3Mi43ODIyNDYzMTA5LDI1ODc2MzkuMjcwNTYwNzYzLDI4MTE5ODQuOTE0NTgxNjY2MiwyMzA0NjkwLjIwNTMzMTEyNTMsMjAwMTg1Ni4wMjA2MzMxMjU3LDI1MDI4MjQuMDc5MDMxMzI1NCw1MDgyNDkuOTY4NDA5MzIzMzcsMjk3MTEzNS40OTg1NTI1MDksNTg4MDA0Ljg0MTEwMTgzNjIsMTU2MDkyNi41MjYzMzI5Njc3LDEzOTUxODMuODAyNTk4MzIzNCwzMjAyNzY2LjU1OTA0MTg1NzcsMjMyMDI3Ny45MTA4OTExNTQsNjUyNTQ4LjIwMTAxMjYzMzksMTg5OTIxMS40OTU0NzA0ODE1LDEyNjQ4MjEuNzM0MTU2NzcsMTg2ODUzOC41MDk1OTIyOTk4LDIwNzQ5NjQuNjUzOTM0NTk1NCwxODQ1ODY5LjI2MzAxMDkyODIsNDIwNzYxOS4wNDY0ODQ1MjMsMjY4MzI3LjEzODIwMDM1MzgsMzM1OS42ODcwMzYxNTY0MzU2CisxOSxTYXQgMTIgRmViIDExLDE0NzgwOS4zNDYwMzU5NDk5NywxMzE5NzIuMTY1MjQ2NDc4MjIsNzY4MTguNTQxOTY1NzM0MjksMTU4ODA0LjEwNDQyMjQ2NjgsMTYwMDcyLjk0MjMxOTA5MzE2LDI1ODc2NDEuODU4MjAwMDMzLDI4MTE5ODcuNzI2NTY2NTgwNiwyMzA0NjkyLjUxMDAyMTMzMSwyMDAxODU4LjAyMjQ4OTE0NjMsMjUwMjgyNi41ODE4NTU0MDQ3LDUwODI1MC40NzY2NTkyOTE4LDI5NzExMzguNDY5Njg4MDA3Niw1ODgwMDUuNDI5MTA2Njc3MywxNTYwOTI4LjA4NzI1OTQ5NCwxMzk1MTg1LjE5Nzc4MjEyNiwzMjAyNzY5Ljc2MTgwODQxNywyMzIwMjgwLjIzMTE2OTA2NDUsNjUyNTQ4Ljg1MzU2MDgzNDksMTg5OTIxMy4zOTQ2ODE5NzY5LDEyNjQ4MjIuOTk4OTc4NTA0LDE4Njg1NDAuMzc4MTMwODA5NCwyMDc0OTY2LjcyODg5OTI0OTMsMTg0NTg3MS4xMDg4ODAxOTEsNDIwNzYyMy4yNTQxMDM1NywyNjgzMjcuNDA2NTI3NDkyLDMzNTkuNjkwMzk1ODQzNDcyCisyMCxTdW4gMTMgRmViIDExLDE0NzgwOS40OTM4NDUyOTYsMTMxOTcyLjI5NzIxODY0MzQ4LDc2ODE4LjYxODc4NDI3NjI2LDE1ODgwNC4yNjMyMjY1NzEyMywxNjAwNzMuMTAyMzkyMDM1NDgsMjU4NzY0NC40NDU4NDE4OTEsMjgxMTk5MC41Mzg1NTQzMDcsMjMwNDY5NC44MTQ3MTM4NDEsMjAwMTg2MC4wMjQzNDcxNjg5LDI1MDI4MjkuMDg0NjgxOTg2NCw1MDgyNTAuOTg0OTA5NzY4NDUsMjk3MTE0MS40NDA4MjY0Nzc1LDU4ODAwNi4wMTcxMTIxMDY0LDE1NjA5MjkuNjQ4MTg3NTgxMiwxMzk1MTg2LjU5Mjk2NzMyMzcsMzIwMjc3Mi45NjQ1NzgxNzg3LDIzMjAyODIuNTUxNDQ5Mjk1Niw2NTI1NDkuNTA2MTA5Njg4NCwxODk5MjE1LjI5Mzg5NTM3MTUsMTI2NDgyNC4yNjM4MDE1MDMsMTg2ODU0Mi4yNDY2NzExODc1LDIwNzQ5NjguODAzODY1OTc4MywxODQ1ODcyLjk1NDc1MTMsNDIwNzYyNy40NjE3MjY4MjUsMjY4MzI3LjY3NDg1NDg5ODUzLDMzNTkuNjkzNzU1NTMzODY3NworMjEsTW9uIDE0IEZlYiAxMSwxNDc4MDkuNjQxNjU0Nzg5ODYsMTMxOTcyLjQyOTE5MDk0MDcsNzY4MTguNjk1NjAyODk1MDQsMTU4ODA0LjQyMjAzMDgzNDQ1LDE2MDA3My4yNjI0NjUxMzc4NywyNTg3NjQ3LjAzMzQ4NjMzNywyODExOTkzLjM1MDU0NDg0NTcsMjMwNDY5Ny4xMTk0MDg2NTU0LDIwMDE4NjIuMDI2MjA3MTkzMywyNTAyODMxLjU4NzUxMTA3MSw1MDgyNTEuNDkzMTYwNzUzMzQsMjk3MTE0NC40MTE5Njc5MTgzLDU4ODAwNi42MDUxMTgxMjM2LDE1NjA5MzEuMjA5MTE3MjI5MywxMzk1MTg3Ljk4ODE1MzkxNjgsMzIwMjc3Ni4xNjczNTExNDM0LDIzMjAyODQuODcxNzMxODQ3LDY1MjU1MC4xNTg2NTkxOTQ2LDE4OTkyMTcuMTkzMTEwNjY1MywxMjY0ODI1LjUyODYyNTc2NjcsMTg2ODU0NC4xMTUyMTM0MzQyLDIwNzQ5NzAuODc4ODM0NzgyMiwxODQ1ODc0LjgwMDYyNDI1NDYsNDIwNzYzMS42NjkzNTQyODYsMjY4MzI3Ljk0MzE4MjU3MzM2LDMzNTkuNjk3MTE1MjI3NjIzMworMjIsVHVlIDE1IEZlYiAxMSwxNDc4MDkuNzg5NDY0NDMxNTIsMTMxOTcyLjU2MTE2MzM2OTksNzY4MTguNzcyNDIxNTkwNjMsMTU4ODA0LjU4MDgzNTI1NjUsMTYwMDczLjQyMjUzODQwMDM0LDI1ODc2NDkuNjIxMTMzMzcwMywyODExOTk2LjE2MjUzODE5NjQsMjMwNDY5OS40MjQxMDU3NzUsMjAwMTg2NC4wMjgwNjkyMTk2LDI1MDI4MzQuMDkwMzQyNjU4Niw1MDgyNTIuMDAxNDEyMjQ2NSwyOTcxMTQ3LjM4MzExMjMzMDUsNTg4MDA3LjE5MzEyNDcyODcsMTU2MDkzMi43NzAwNDg0MzgzLDEzOTUxODkuMzgzMzQxOTA1LDMyMDI3NzkuMzcwMTI3MzExLDIzMjAyODcuMTkyMDE2NzE5LDY1MjU1MC44MTEyMDkzNTMzLDE4OTkyMTkuMDkyMzI3ODU4MywxMjY0ODI2Ljc5MzQ1MTI5NTUsMTg2ODU0NS45ODM3NTc1NDk0LDIwNzQ5NzIuOTUzODA1NjYxLDE4NDU4NzYuNjQ2NDk5MDU1Miw0MjA3NjM1Ljg3Njk4NTk1NSwyNjgzMjguMjExNTEwNTE2NSwzMzU5LjcwMDQ3NDkyNDczODUKKzIzLFdlZCAxNiBGZWIgMTEsMTQ3ODA5LjkzNzI3NDIyMDk4LDEzMTk3Mi42OTMxMzU5MzEwNCw3NjgxOC44NDkyNDAzNjMwNSwxNTg4MDQuNzM5NjM5ODM3MzIsMTYwMDczLjU4MjYxMTgyMjg3LDI1ODc2NTIuMjA4NzgyOTkxNCwyODExOTk4Ljk3NDUzNDM1OSwyMzA0NzAxLjcyODgwNTE5OTMsMjAwMTg2Ni4wMjk5MzMyNDc3LDI1MDI4MzYuNTkzMTc2NzQ5LDUwODI1Mi41MDk2NjQyNDc5LDI5NzExNTAuMzU0MjU5NzEzNiw1ODgwMDcuNzgxMTMxOTIxOSwxNTYwOTM0LjMzMDk4MTIwODUsMTM5NTE5MC43Nzg1MzEyODgzLDMyMDI3ODIuNTcyOTA2NjgxMywyMzIwMjg5LjUxMjMwMzkxMSw2NTI1NTEuNDYzNzYwMTY0NCwxODk5MjIwLjk5MTU0Njk1MDUsMTI2NDgyOC4wNTgyNzgwODksMTg2ODU0Ny44NTIzMDM1MzMsMjA3NDk3NS4wMjg3Nzg2MTUsMTg0NTg3OC40OTIzNzU3MDE3LDQyMDc2NDAuMDg0NjIxODMyLDI2ODMyOC40Nzk4Mzg3MjgwMywzMzU5LjcwMzgzNDYyNTIxMzQKKzI0LFRodSAxNyBGZWIgMTEsMTQ3ODEwLjA4NTA4NDE1ODI2LDEzMTk3Mi44MjUxMDg2MjQxOCw3NjgxOC45MjYwNTkyMTIyOSwxNTg4MDQuODk4NDQ0NTc2OTcsMTYwMDczLjc0MjY4NTQwNTQ4LDI1ODc2NTQuNzk2NDM1MiwyODEyMDAxLjc4NjUzMzMzMzQsMjMwNDcwNC4wMzM1MDY5MjgsMjAwMTg2OC4wMzE3OTkyNzc4LDI1MDI4MzkuMDk2MDEzMzQyLDUwODI1My4wMTc5MTY3NTc1NiwyOTcxMTUzLjMyNTQxMDA2OCw1ODgwMDguMzY5MTM5NzAzMSwxNTYwOTM1Ljg5MTkxNTUzOTUsMTM5NTE5Mi4xNzM3MjIwNjY3LDMyMDI3ODUuNzc1Njg5MjU0LDIzMjAyOTEuODMyNTkzNDIzMyw2NTI1NTIuMTE2MzExNjI4MywxODk5MjIyLjg5MDc2Nzk0MjIsMTI2NDgyOS4zMjMxMDYxNDcsMTg2ODU0OS43MjA4NTEzODU1LDIwNzQ5NzcuMTAzNzUzNjQzOCwxODQ1ODgwLjMzODI1NDE5NCw0MjA3NjQ0LjI5MjI2MTkxNiwyNjgzMjguNzQ4MTY3MjA3OSwzMzU5LjcwNzE5NDMyOTA0OAorMjUsRnJpIDE4IEZlYiAxMSwxNDc4MTAuMjMyODk0MjQzMzUsMTMxOTcyLjk1NzA4MTQ0OTI4LDc2ODE5LjAwMjg3ODEzODM0LDE1ODgwNS4wNTcyNDk0NzU0MiwxNjAwNzMuOTAyNzU5MTQ4MTYsMjU4NzY1Ny4zODQwODk5OTY2LDI4MTIwMDQuNTk4NTM1MTIsMjMwNDcwNi4zMzgyMTA5NjEzLDIwMDE4NzAuMDMzNjY3MzA5NCwyNTAyODQxLjU5ODg1MjQzOCw1MDgyNTMuNTI2MTY5Nzc1NDYsMjk3MTE1Ni4yOTY1NjMzOTM0LDU4ODAwOC45NTcxNDgwNzIyLDE1NjA5MzcuNDUyODUxNDMxNCwxMzk1MTkzLjU2ODkxNDI0MDUsMzIwMjc4OC45Nzg0NzUwMjk2LDIzMjAyOTQuMTUyODg1MjU2LDY1MjU1Mi43Njg4NjM3NDQ2LDE4OTkyMjQuNzg5OTkwODMzLDEyNjQ4MzAuNTg3OTM1NDcwMywxODY4NTUxLjU4OTQwMTEwNjQsMjA3NDk3OS4xNzg3MzA3NDc3LDE4NDU4ODIuMTg0MTM0NTMyMiw0MjA3NjQ4LjQ5OTkwNjIwOCwyNjgzMjkuMDE2NDk1OTU2MDUsMzM1OS43MTA1NTQwMzYyNDIyCisyNixTYXQgMTkgRmViIDExLDE0NzgxMC4zODA3MDQ0NzYyNCwxMzE5NzMuMDg5MDU0NDA2MzYsNzY4MTkuMDc5Njk3MTQxMjIsMTU4ODA1LjIxNjA1NDUzMjY4LDE2MDA3NC4wNjI4MzMwNTA5LDI1ODc2NTkuOTcxNzQ3MzgwNywyODEyMDA3LjQxMDUzOTcxODMsMjMwNDcwOC42NDI5MTcyOTk2LDIwMDE4NzIuMDM1NTM3MzQzLDI1MDI4NDQuMTAxNjk0MDM2Nyw1MDgyNTQuMDM0NDIzMzAxNjQsMjk3MTE1OS4yNjc3MTk2OSw1ODgwMDkuNTQ1MTU3MDI5MywxNTYwOTM5LjAxMzc4ODg4NDMsMTM5NTE5NC45NjQxMDc4MDk0LDMyMDI3OTIuMTgxMjY0MDA4LDIzMjAyOTYuNDczMTc5NDA5LDY1MjU1My40MjE0MTY1MTM0LDE4OTkyMjYuNjg5MjE1NjIzLDEyNjQ4MzEuODUyNzY2MDU4MiwxODY4NTUzLjQ1Nzk1MjY5NTcsMjA3NDk4MS4yNTM3MDk5MjY1LDE4NDU4ODQuMDMwMDE2NzE2Myw0MjA3NjUyLjcwNzU1NDcwOCwyNjgzMjkuMjg0ODI0OTcyNTYsMzM1OS43MTM5MTM3NDY3OTYKKzI3LFN1biAyMCBGZWIgMTEsMTQ3ODEwLjUyODUxNDg1Njk0LDEzMTk3My4yMjEwMjc0OTU0Myw3NjgxOS4xNTY1MTYyMjA5MiwxNTg4MDUuMzc0ODU5NzQ4NzMsMTYwMDc0LjIyMjkwNzExMzczLDI1ODc2NjIuNTU5NDA3MzUyNSwyODEyMDEwLjIyMjU0NzEyOSwyMzA0NzEwLjk0NzYyNTk0MjUsMjAwMTg3NC4wMzc0MDkzNzg0LDI1MDI4NDYuNjA0NTM4MTM4NSw1MDgyNTQuNTQyNjc3MzM2MSwyOTcxMTYyLjIzODg3ODk1OCw1ODgwMTAuMTMzMTY2NTc0NCwxNTYwOTQwLjU3NDcyNzg5OCwxMzk1MTk2LjM1OTMwMjc3MzQsMzIwMjc5NS4zODQwNTYxODksMjMyMDI5OC43OTM0NzU4ODIsNjUyNTU0LjA3Mzk2OTkzNDgsMTg5OTIyOC41ODg0NDIzMTIzLDEyNjQ4MzMuMTE3NTk3OTExLDE4Njg1NTUuMzI2NTA2MTUzNywyMDc0OTgzLjMyODY5MTE4LDE4NDU4ODUuODc1OTAwNzQ2Myw0MjA3NjU2LjkxNTIwNzQxNiwyNjgzMjkuNTUzMTU0MjU3NCwzMzU5LjcxNzI3MzQ2MDcwOTcKKzI4LE1vbiAyMSBGZWIgMTEsMTQ3ODEwLjY3NjMyNTM4NTQ2LDEzMTk3My4zNTMwMDA3MTY0NSw3NjgxOS4yMzMzMzUzNzc0MywxNTg4MDUuNTMzNjY1MTIzNiwxNjAwNzQuMzgyOTgxMzM2NjUsMjU4NzY2NS4xNDcwNjk5MTIsMjgxMjAxMy4wMzQ1NTczNTE0LDIzMDQ3MTMuMjUyMzM2ODksMjAwMTg3Ni4wMzkyODM0MTU4LDI1MDI4NDkuMTA3Mzg0NzQzLDUwODI1NS4wNTA5MzE4Nzg3NCwyOTcxMTY1LjIxMDA0MTE5Nyw1ODgwMTAuNzIxMTc2NzA3NSwxNTYwOTQyLjEzNTY2ODQ3MjYsMTM5NTE5Ny43NTQ0OTkxMzI3LDMyMDI3OTguNTg2ODUxNTczLDIzMjAzMDEuMTEzNzc0Njc1NCw2NTI1NTQuNzI2NTI0MDA4OCwxODk5MjMwLjQ4NzY3MDkwMDgsMTI2NDgzNC4zODI0MzEwMjg2LDE4Njg1NTcuMTk1MDYxNDgwMiwyMDc0OTg1LjQwMzY3NDUwODcsMTg0NTg4Ny43MjE3ODY2MjIyLDQyMDc2NjEuMTIyODY0MzMxLDI2ODMyOS44MjE0ODM4MTA1NSwzMzU5LjcyMDYzMzE3Nzk4MworMjksVHVlIDIyIEZlYiAxMSwxNDc4MTAuODI0MTM2MDYxOCwxMzE5NzMuNDg0OTc0MDY5NDYsNzY4MTkuMzEwMTU0NjEwNzYsMTU4ODA1LjY5MjQ3MDY1NzI2LDE2MDA3NC41NDMwNTU3MTk2NCwyNTg3NjY3LjczNDczNTA1OSwyODEyMDE1Ljg0NjU3MDM4NiwyMzA0NzE1LjU1NzA1MDE0MjQsMjAwMTg3OC4wNDExNTk0NTUsMjUwMjg1MS42MTAyMzM4NTEsNTA4MjU1LjU1OTE4NjkyOTY2LDI5NzExNjguMTgxMjA2NDA3LDU4ODAxMS4zMDkxODc0Mjg3LDE1NjA5NDMuNjk2NjEwNjA4NCwxMzk1MTk5LjE0OTY5Njg4NzIsMzIwMjgwMS43ODk2NTAxNiwyMzIwMzAzLjQzNDA3NTc4OSw2NTI1NTUuMzc5MDc4NzM1NCwxODk5MjMyLjM4NjkwMTM4ODQsMTI2NDgzNS42NDcyNjU0MTEsMTg2ODU1OS4wNjM2MTg2NzUsMjA3NDk4Ny40Nzg2NTk5MTIyLDE4NDU4ODkuNTY3Njc0MzQ0LDQyMDc2NjUuMzMwNTI1NDU0LDI2ODMzMC4wODk4MTM2MzIsMzM1OS43MjM5OTI4OTg2MTY0CiszMCxXZWQgMjMgRmViIDExLDE0NzgxMC45NzE5NDY4ODU5MywxMzE5NzMuNjE2OTQ3NTU0NDMsNzY4MTkuMzg2OTczOTIwOTIsMTU4ODA1Ljg1MTI3NjM0OTc0LDE2MDA3NC43MDMxMzAyNjI3LDI1ODc2NzAuMzIyNDAyNzk0LDI4MTIwMTguNjU4NTg2MjMyNSwyMzA0NzE3Ljg2MTc2NTY5OTUsMjAwMTg4MC4wNDMwMzc0OTYsMjUwMjg1NC4xMTMwODU0NjEsNTA4MjU2LjA2NzQ0MjQ4ODg2LDI5NzExNzEuMTUyMzc0NTg4NCw1ODgwMTEuODk3MTk4NzM3OCwxNTYwOTQ1LjI1NzU1NDMwNSwxMzk1MjAwLjU0NDg5NjAzNjksMzIwMjgwNC45OTI0NTE5NDk1LDIzMjAzMDUuNzU0Mzc5MjIzLDY1MjU1Ni4wMzE2MzQxMTQ0LDE4OTkyMzQuMjg2MTMzNzc1MywxMjY0ODM2LjkxMjEwMTA1ODMsMTg2ODU2MC45MzIxNzc3Mzg4LDIwNzQ5ODkuNTUzNjQ3MzkwOCwxODQ1ODkxLjQxMzU2MzkxMTYsNDIwNzY2OS41MzgxOTA3ODUsMjY4MzMwLjM1ODE0MzcyMTgsMzM1OS43MjczNTI2MjI2MDk1CiszMSxUaHUgMjQgRmViIDExLDE0NzgxMS4xMTk3NTc4NTc4NywxMzE5NzMuNzQ4OTIxMTcxMzgsNzY4MTkuNDYzNzkzMzA3ODksMTU4ODA2LjAxMDA4MjIwMSwxNjAwNzQuODYzMjA0OTY1ODMsMjU4NzY3Mi45MTAwNzMxMTY0LDI4MTIwMjEuNDcwNjA0ODkxLDIzMDQ3MjAuMTY2NDgzNTYxLDIwMDE4ODIuMDQ0OTE3NTM5LDI1MDI4NTYuNjE1OTM5NTc0LDUwODI1Ni41NzU2OTg1NTYzLDI5NzExNzQuMTIzNTQ1NzQwNyw1ODgwMTIuNDg1MjEwNjM1LDE1NjA5NDYuODE4NDk5NTYyNiwxMzk1MjAxLjk0MDA5NjU4MTgsMzIwMjgwOC4xOTUyNTY5NDIsMjMyMDMwOC4wNzQ2ODQ5Nzc1LDY1MjU1Ni42ODQxOTAxNDYsMTg5OTIzNi4xODUzNjgwNjEzLDEyNjQ4MzguMTc2OTM3OTcwMywxODY4NTYyLjgwMDczODY3MDksMjA3NDk5MS42Mjg2MzY5NDQzLDE4NDU4OTMuMjU5NDU1MzI1LDQyMDc2NzMuNzQ1ODYwMzIzLDI2ODMzMC42MjY0NzQwNzk5NywzMzU5LjczMDcxMjM0OTk2MjIKKzMyLEZyaSAyNSBGZWIgMTEsMTQ3ODExLjI2NzU2ODk3NzY0LDEzMTk3My44ODA4OTQ5MjAzLDc2ODE5LjU0MDYxMjc3MTY5LDE1ODgwNi4xNjg4ODgyMTExLDE2MDA3NS4wMjMyNzk4MjkwNCwyNTg3Njc1LjQ5Nzc0NjAyNjYsMjgxMjAyNC4yODI2MjYzNjE2LDIzMDQ3MjIuNDcxMjAzNzI3NiwyMDAxODg0LjA0Njc5OTU4MzgsMjUwMjg1OS4xMTg3OTYxOSw1MDgyNTcuMDgzOTU1MTMyLDI5NzExNzcuMDk0NzE5ODY0NCw1ODgwMTMuMDczMjIzMTIwMiwxNTYwOTQ4LjM3OTQ0NjM4MSwxMzk1MjAzLjMzNTI5ODUyMiwzMjAyODExLjM5ODA2NTEzNywyMzIwMzEwLjM5NDk5MzA1MjQsNjUyNTU3LjMzNjc0NjgzMDMsMTg5OTIzOC4wODQ2MDQyNDY4LDEyNjQ4MzkuNDQxNzc2MTQ3MywxODY4NTY0LjY2OTMwMTQ3MTcsMjA3NDk5My43MDM2Mjg1NzI5LDE4NDU4OTUuMTA1MzQ4NTg0NSw0MjA3Njc3Ljk1MzUzNDA2OTUsMjY4MzMwLjg5NDgwNDcwNjQ1LDMzNTkuNzM0MDcyMDgwNjc0NwpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9EZW1vZ3JhcGhpY1NFSVJEaXNlYXNlX0ZEX1JlZmVyZW5jZS9EZW1vZ3JhcGhpY01vZGVsL21lbi9EZWF0aHNfMi5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0RlbW9ncmFwaGljU0VJUkRpc2Vhc2VfRkRfUmVmZXJlbmNlL0RlbW9ncmFwaGljTW9kZWwvbWVuL0RlYXRoc18yLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42Nzg5OTM2Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9EZW1vZ3JhcGhpY1NFSVJEaXNlYXNlX0ZEX1JlZmVyZW5jZS9EZW1vZ3JhcGhpY01vZGVsL21lbi9EZWF0aHNfMi5jc3YKQEAgLTAsMCArMSwzMyBAQAoraXRlcmF0aW9uLHRpbWUsRUctRlJHLUcyMTAwMDEsRUctRlJHLUcyMTAwMDIsRUctRlJHLUcyMTAwMDMsRUctRlJHLUcyMTAwMDQsRUctRlJHLUcyMTAwMDUsRUctTE9FLUcyNDAwMDEsRUctTE9FLUcyNDAwMDIsRUctTE9FLUcyNDAwMDMsRUctTE9FLUcyNDAwMDQsRUctTE9FLUcyNDAwMDUsRUctTE9FLUcyNDAwMDYsRUctTE9FLUcyNDAwMDcsRUctTE9FLUcyNDAwMDgsRUctTE9FLUcyNDAwMDksRUctVVBFLUcyOTAwMDEsRUctVVBFLUcyOTAwMDIsRUctVVBFLUcyOTAwMDMsRUctVVBFLUcyOTAwMDQsRUctVVBFLUcyOTAwMDUsRUctVVBFLUcyOTAwMDYsRUctVVBFLUcyOTAwMDcsRUctVVBFLUcyOTAwMDgsRUctVVJHLUczMDAwMDEsRUctVVJHLUczMDAwMDIsRUctVVJHLUczMDAwMDMsRUctVVJHLUczMDAwMDQKKzEsVHVlIDI1IEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyLFdlZCAyNiBKYW4gMTEsNS43NjQ0NjA3MzQyMjY4NjYsNS4xNDY4MjE4MDEwMzI3NjQsMi45OTU4NjkyMTA1NTk0NzYsNi4xOTMyNDg1OTMwNTM5NTg1LDYuMjQyNzMyMzgwMzA2NjM2LDEwMC45MTYyMTU5NjI0NzM3LDEwOS42NjU1NDczMzk0NjU2Myw4OS44ODEzOTAwMTIwNTk3NCw3OC4wNzEwNTc1ODYwOTUyMSw5Ny42MDg0Nzk3MjQ3OTE1NSwxOS44MjE0MTE4MDEyNjcyNjQsMTE1Ljg3MjMxNDU5ODQ0MDk3LDIyLjkzMTc5ODk1OTI3MDU2Miw2MC44NzUwOTk2NDIwMTI3Nyw1NC40MTEyNDMzMDI3OTg0OSwxMjQuOTA1NzcyMzg3NTE0NTksOTAuNDg5MzAwMTk0MzQ1MDksMjUuNDQ4OTQ3MjAzOTI5MTgsNzQuMDY3OTg5MTU3NDU5ODIsNDkuMzI3MjA5MDYyODUxNDMsNzIuODcxNzYzMDQ0MjE3MzMsODAuOTIyMjQ1ODE0MjY0OTEsNzEuOTg3Njc3NDU3MTE5MDUsMTY0LjA5NDM1MzE4NjU3NTMsMTAuNDY0NTgwNDkwNTIyMjcsMC4xMzEwMjU1NjY5NTc2NDMxNAorMyxUaHUgMjcgSmFuIDExLDExLjUyODkyNzIzMjkxNDQ2NiwxMC4yOTM2NDg3NDg4ODczMjgsNS45OTE3NDE0MTY5ODgxNjIsMTIuMzg2NTAzMzc5MzU2NTEsMTIuNDg1NDcxMDAzMzQ1NjUzLDIwMS44MzI1MzI4NDExNjMzNiwyMTkuMzMxMjA0MzQ0NDc4NiwxNzkuNzYyODY5OTA1NTA5NSwxNTYuMTQyMTkzMjQzMjQ4MDIsMTk1LjIxNzA1NzA1ODA2Mjg0LDM5LjY0Mjg0MzQyMzk0NjMzLDIzMS43NDQ3NDUwNjkxOTY1NCw0NS44NjM2MjA4NTAzNDAwODQsMTIxLjc1MDI2MDE1OTEyNTE5LDEwOC44MjI1NDEwMTY4NDAyOCwyNDkuODExNjY5NjgwODAxNTcsMTgwLjk3ODY5MDg3Nzk5MDM3LDUwLjg5NzkxOTg1NjgwNTU2NSwxNDguMTM2MDUyMzgyOTA4ODIsOTguNjU0NDY3NDUyOTExOTIsMTQ1Ljc0MzU5ODk2MDE5NzcyLDE2MS44NDQ1NzI1NTA3NzU2NCwxNDMuOTc1NDI2OTAxOTE1NTcsMzI4LjE4ODg3MDQ2NzUwMzc2LDIwLjkyOTE3MTQ0NTYyNTAzLDAuMjYyMDUxMjY0OTQwODUzMjMKKzQsRnJpIDI4IEphbiAxMSwxNy4yOTMzOTk0OTYwNjg1NjcsMTUuNDQwNDgwODQzNTY4ODQsOC45ODc2MTY2MTkyODkwNTcsMTguNTc5NzY0MzU4OTEzODUsMTguNzI4MjE1ODY5MTIzMjkzLDMwMi43NDg5NTA2MzYxNjk5LDMyOC45OTY5NzEwMTUxNDg2LDI2OS42NDQ0Mzk2ODA0MzkyLDIzNC4yMTM0MDY5NzE1MzY0NywyOTIuODI1NzMxOTk5OTExNDUsNTkuNDY0Mjk0ODY4MDU3MDI0LDM0Ny42MTcyOTE0MTIzODI2LDY4Ljc5NTQ2NTY3MzIzMTQ5LDE4Mi42MjU0ODE1NTEzOTgxLDE2My4yMzM4OTMxNDIxNzk4LDM3NC43MTc2OTE4Nzk5ODU4NiwyNzEuNDY4MTcyMDUxMDI2MzMsNzYuMzQ2OTE3OTU4NjU0NiwyMjIuMjA0MTg5Njc2NDIxMDQsMTQ3Ljk4MTc3NTE3MDIzMDgsMjE4LjYxNTUwNzc0ODAxNCwyNDIuNzY2OTgwMjA5NjEzMSwyMTUuOTYzMjQ4MzM0NDYxNTMsNDkyLjI4MzU1MTg0Mjk0OTUsMzEuMzkzNzcyODY1MzE4NzQ1LDAuMzkzMDc3MDkzOTQ5NzYxMworNSxTYXQgMjkgSmFuIDExLDIzLjA1Nzg3NzUyMzY5NDkyNywyMC41ODczMTgwODUwODI0NDgsMTEuOTgzNDk0ODE3NDY1MTUyLDI0Ljc3MzAzMTUzMTczMjE2NSwyNC45NzA5NjY5Nzc2NDU4LDQwMy42NjU0NjkzNDc1OTQyNCw0MzguNjYyODQ3MzUxNTg1MjQsMzU5LjUyNjA5OTMzNjkzODYsMzEyLjI4NDY5ODc3MTAzODcsMzkwLjQzNDUwNDU1MDQzNSw3OS4yODU3NjYxMzM2MTkxNSw0NjMuNDg5OTUzNjI4MTE1LDkxLjcyNzMzMzQyNzk2NzcyLDI0My41MDA3NjM4MTg4OTI0NCwyMTcuNjQ1Mjk5Njc4ODcxNDIsNDk5LjYyMzgzODk4NTE5MjMsMzYxLjk1Nzc0MzcxMzU0MzUsMTAxLjc5NTk0MTUwOTUwMTc0LDI5Ni4yNzI0MDEwMzgwNzA1NCwxOTcuMzA5MTMyMjE0ODU3NCwyOTEuNDg3NDg5NDA3NzM5MSwzMjMuNjg5NDY4NzkwODU4MiwyODcuOTUxMTQxNzU0ODI4OSw2NTYuMzc4Mzk3MzEzMDc2Nyw0MS44NTgzODQ3NDk2MTM4NzYsMC41MjQxMDMwNTM5ODQ0OTg0Cis2LFN1biAzMCBKYW4gMTEsMjguODIyMzYxMzE1Nzk5MzE2LDI1LjczNDE2MDQ3MzQzMzI5NSwxNC45NzkzNzYwMTE1MTk0NDUsMzAuOTY2MzA0ODk3ODE3NjU0LDMxLjIxMzcyNDMyODkxOTQyLDUwNC41ODIwODg5NzU1MzczLDU0OC4zMjg4MzMzNTM4OTgyLDQ0OS40MDc4NDg4NzUwOTc2NywzOTAuMzU2MDY4NjQxODMyNyw0ODguMDQzMzc0NzA5NzMxMSw5OS4xMDcyNTcyMjA2NTI1NCw1NzkuMzYyNzMxNzE2NTA5NiwxMTQuNjU5MjI0MTE0NTcxNzEsMzA0LjM3NjEwNjk2MTY2OTA1LDI3Mi4wNTY3NjA2MjY5Njk2LDYyNC41MzAxMTA5OTY1NDU5LDQ1Mi40NDc0MDU4NjU2MzIzLDEyNy4yNDQ5OTA1MDkzNzI0MywzNzAuMzQwNjg2NDY3OTMxNCwyNDYuNjM2NTM4NTg2ODQxMDYsMzY0LjM1OTU0MzkzOTQ0NTgsNDA0LjYxMjAzODI5NDU5MTksMzU5LjkzOTEwNzE2MzA4OTcsODIwLjQ3MzQwNjg3ODA0OTMsNTIuMzIzMDA3MDk4NTIwOSwwLjY1NTEyOTE0NTA0NTE5NTUKKzcsTW9uIDMxIEphbiAxMSwzNC41ODY4NTA4NzIzODc1LDMwLjg4MTAwODAwODYyNjUzLDE3Ljk3NTI2MDIwMTQ1NDkzMywzNy4xNTk1ODQ0NTcxNzY1MSwzNy40NTY0ODc5MjI5NTAzOSw2MDUuNDk4ODA5NTIwMDk5OSw2NTcuOTk0OTI5MDIyMTk3Miw1MzkuMjg5Njg4Mjk1MDA2Myw0NjguNDI3NTE2NTgzOTk2NSw1ODUuNjUyMzQyNDc3ODk3NCwxMTguOTI4NzY4MTI5MTc3MDMsNjk1LjIzNTYyNTY3NzY4MjQsMTM3LjU5MTEzNzczMzA2NjM4LDM2NS4yNTE1MTA5Nzk3ODg4LDMyNi40NjgyNzU5ODY1Mjg3NCw3NDkuNDM2NTA3OTE0MTcxNCw1NDIuOTM3MTU4NTA3MzgzMiwxNTIuNjk0MDY0OTU4MjkyMTMsNDQ0LjQwOTA0NTk2NjA3NzY2LDI5NS45NjM5OTQyODYyMzEwNyw0MzcuMjMxNjcxMzQzMjA3MSw0ODUuNTM0Njg4NzIwODk1MTMsNDMxLjkyNzE0NDU1OTMxNTkzLDk4NC41Njg1ODA1MzgwMzE1LDYyLjc4NzYzOTkxMjA1MDI3LDAuNzg2MTU1MzY3MTMxOTgzNgorOCxUdWUgMSBGZWIgMTEsNDAuMzUxMzQ2MTkzNDY1MjQsMzYuMDI3ODYwNjkwNjY3MywyMC45NzExNDczODcyNzQ2MTMsNDMuMzUyODcwMjA5ODE0OTI0LDQzLjY5OTI1Nzc1OTc0NDk1LDcwNi40MTU2MzA5ODEzODMyLDc2Ny42NjExMzQzNTY1OTE5LDYyOS4xNzE2MTc1OTY3NTQzLDU0Ni40OTkwNDI1OTc2MDgzLDY4My4yNjE0MDc4NTUwMzE0LDEzOC43NTAyOTg4NTkyMTI0Miw4MTEuMTA4NjM1NTExNzQ5MSwxNjAuNTIzMDc0MjgzNDc0NjcsNDI2LjEyNjk3NTg3MzMxMjYsMzgwLjg3OTg0NTc1NzYwMzIsODc0LjM0MzAyOTczODE5NCw2MzMuNDI3MDAxNjM4ODg2NywxNzguMTQzMTY0ODU2Mjg2MjYsNTE4LjQ3NzQ3OTUzMjU4MzQsMzQ1LjI5MTQ5OTMxMzA3Njc3LDUxMC4xMDM4NzE2MTkwOTU4LDU2Ni40NTc0MjAwNjk4NDg3LDUwMy45MTUyNTM5NDM1Nzk1NiwxMTQ4LjY2MzkxODI5MzE4NzIsNzMuMjUyMjgzMTkwMjEyNDUsMC45MTcxODE3MjAyNDQ5OTM5Cis5LFdlZCAyIEZlYiAxMSw0Ni4xMTU4NDcyNzkwMzgzLDQxLjE3NDcxODUxOTU2MDc1NiwyMy45NjcwMzc1Njg5ODE0NzUsNDkuNTQ2MTYyMTU1NzM5MDksNDkuOTQyMDMzODM5MzA5MzUsODA3LjMzMjU1MzM1OTQ4NzksODc3LjMyNzQ0OTM1NzE5MTksNzE5LjA1MzYzNjc4MDQzMTcsNjI0LjU3MDY0NjY4Mjc0NjEsNzgwLjg3MDU3MDg0MTIzMDgsMTU4LjU3MTg0OTQxMDc3ODU1LDkyNi45ODE3NjEyMTg4MjU2LDE4My40NTUwMzM3NjU4MTk1LDQ4Ny4wMDI1MDE2NDIzMDEyNCw0MzUuMjkxNDY5OTQwMjQ3NDUsOTk5LjI0OTY3NjQ2ODczODQsNzIzLjkxNjkzNTI2MDIzMzUsMjAzLjU5MjI5MDIwMzM4MDMsNTkyLjU0NTk4NzE2NzUyMjgsMzk0LjYxOTA1MzY2NzQyNzUsNTgyLjk3NjE0NDc2NzE4NDgsNjQ3LjM4MDIzMjM0MTUzMzcsNTc1LjkwMzQzNTMxNTk1MjUsMTMxMi43NTk0MjAxNDM2ODA3LDgzLjcxNjkzNjkzMzAxNzksMS4wNDgyMDgyMDQzODQzNTcyCisxMCxUaHUgMyBGZWIgMTEsNTEuODgwMzU0MTI5MTEyNDUsNDYuMzIxNTgxNDk1MzEyMDQsMjYuOTYyOTMwNzQ2NTc4NTIsNTUuNzM5NDYwMjk0OTU1MjEsNTYuMTg0ODE2MTYxNjQ5ODM0LDkwOC4yNDk1NzY2NTQ1MTUsOTg2Ljk5Mzg3NDAyNDEwNjgsODA4LjkzNTc0NTg0NjEyODMsNzAyLjY0MjMyODgzOTQ4OCw4NzguNDc5ODMxNDM2NTkzMSwxNzguMzkzNDE5NzgzODk1MjQsMTA0Mi44NTUwMDI3OTkwMjc3LDIwNi4zODcwMTYxODAxMjM4NSw1NDcuODc4MDg4Mjg2ODE1Nyw0ODkuNzAzMTQ4NTM0NTE1OSwxMTI0LjE1NjQ0ODEwNTkyOTUsODE0LjQwNjk1OTM3MTUxMzgsMjI5LjA0MTQ0MDk5OTU5OTY3LDY2Ni42MTQ1Njg4NzA5Njk3LDQ0My45NDY2NTczNDkzMzI2LDY1NS44NDg0OTA3ODc1NDY5LDcyOC4zMDMxMjU1MzYwMzA4LDY0Ny44OTE2ODg2NzY1MDY5LDE0NzYuODU1MDg2MDg5Njc2Miw5NC4xODE2MDExNDA0NzcxMSwxLjE3OTIzNDgxOTU1MDIwNDcKKzExLEZyaSA0IEZlYiAxMSw1Ny42NDQ4NjY3NDM2OTM0NCw1MS40Njg0NDk2MTc5MjYzLDI5Ljk1ODgyNjkyMDA2ODc0NSw2MS45MzI3NjQ2Mjc0Njk0Niw2Mi40Mjc2MDQ3MjY3NzI2MzYsMTAwOS4xNjY3MDA4NjY1NjUzLDEwOTYuNjYwNDA4MzU3NDQ2Niw4OTguODE3OTQ0NzkzOTMzOSw3ODAuNzE0MDg5MDY3OTEyLDk3Ni4wODkxODk2NDEyMTYxLDE5OC4yMTUwMDk5Nzg1ODIzLDExNTguNzI4MzYwMjUyNDcxNSwyMjkuMzE5MDIxNTI2NDEwNiw2MDguNzUzNzM1ODA2OTE2OCw1NDQuMTE0ODgxNTQwNDYyOSwxMjQ5LjA2MzM0NDY0OTg5Miw5MDQuODk3MDczOTcyODE4MiwyNTQuNDkwNjE3MjQ0OTY5ODUsNzQwLjY4MzIyNDY0Mjk5ODQsNDkzLjI3NDMxMDM1ODg0MTQsNzI4LjcyMDkwOTY4MDI1NSw4MDkuMjI2MDk5NjUzNDIxMyw3MTkuODgwMDE0MDI1MzE0NiwxNjQwLjk1MDkxNjEzMTMzNzYsMTA0LjY0NjI3NTgxMjYwMDUyLDEuMzEwMjYxNTY1NzQyNjY3NQorMTIsU2F0IDUgRmViIDExLDYzLjQwOTM4NTEyMjc4NzA1LDU2LjYxNTMyMjg4NzQwODY4LDMyLjk1NDcyNjA4OTQ1NTE0LDY4LjEyNjA3NTE1MzI4ODA0LDY4LjY3MDM5OTUzNDY4NDAxLDExMTAuMDgzOTI1OTk1NzQsMTIwNi4zMjcwNTIzNTczMjA2LDk4OC43MDAyMzM2MjM5Mzg0LDg1OC43ODU5MjczNjgwOTYzLDEwNzMuNjk4NjQ1NDU1MTk3MywyMTguMDM2NjE5OTk0ODU5NTQsMTI3NC42MDE4MzM1NzkyNzI4LDI1Mi4yNTEwNDk4MDQ3MDI3LDY2OS42Mjk0NDQyMDI2NjU0LDU5OC41MjY2Njg5NTgxNDI5LDEzNzMuOTcwMzY2MTAwNzUxMyw5OTUuMzg3Mjc5MDY0MjM3MywyNzkuOTM5ODE4OTM5NTE2Myw4MTQuNzUxOTU0NDgzNjgyOSw1NDIuNjAyMDEyNjk2MDAzMiw4MDEuNTkzNDAxNDQ1MzgyLDg5MC4xNDkxNTQ2OTM3ODU5LDc5MS44Njg0MTEzNjI0NDc3LDE4MDUuMDQ2OTEwMjY4ODI5MiwxMTUuMTEwOTYwOTQ5Mzk4NiwxLjQ0MTI4ODQ0Mjk2MTg3NjQKKzEzLFN1biA2IEZlYiAxMSw2OS4xNzM5MDkyNjYzOTkwNCw2MS43NjIyMDEzMDM3NjQzMywzNS45NTA2MjgyNTQ3NDA3MSw3NC4zMTkzOTE4NzI0MTcxNiw3NC45MTMyMDA1ODUzOTAxOSwxMjExLjAwMTI1MjA0MjEzOTYsMTMxNS45OTM4MDYwMjM4Mzg1LDEwNzguNTgyNjEyMzM2MjMxNyw5MzYuODU3ODQzNzQwMTE4OCwxMTcxLjMwODE5ODg3ODYzNDQsMjM3Ljg1ODI0OTgzMjc0NjgsMTM5MC40NzU0MjI3Nzk1NDc0LDI3NS4xODMxMDEwMTUwMjMwNiw3MzAuNTA1MjEzNDc0MTIyMyw2NTIuOTM4NTEwNzg3NjEwMywxNDk4Ljg3NzUxMjQ1ODYzMiwxMDg1Ljg3NzU3NDY0NTg2MTQsMzA1LjM4OTA0NjA4MzI2NDQsODg4LjgyMDc1ODM5MzA5NzIsNTkxLjkyOTc2NDM2MDg2NzIsODc0LjQ2NTk2NjA4MzAwMDgsOTcxLjA3MjI5MDY1NzIwNTUsODYzLjg1Njg4MDY4Nzk3ODEsMTk2OS4xNDMwNjg1MDIzMTQ3LDEyNS41NzU2NTY1NTA4ODE4MiwxLjU3MjMxNTQ1MTIwNzk2MjUKKzE0LE1vbiA3IEZlYiAxMSw3NC45Mzg0MzkxNzQ1MzUxOCw2Ni45MDkwODQ4NjY5OTg0LDM4Ljk0NjUzMzQxNTkyODQzNSw4MC41MTI3MTQ3ODQ4NjMsODEuMTU2MDA3ODc4ODk3NDEsMTMxMS45MTg2NzkwMDU4NjU0LDE0MjUuNjYwNjY5MzU3MTEwMiwxMTY4LjQ2NTA4MDkzMDkwMzcsMTAxNC45Mjk4MzgxODQwNTc4LDEyNjguOTE3ODQ5OTExNjI0NywyNTcuNjc5ODk5NDkyMjYzODcsMTUwNi4zNDkxMjc4NTM0MTExLDI5OC4xMTUxNzUxNTczOTQ2LDc5MS4zODEwNDM2MjEzNDg2LDcwNy4zNTA0MDcwMjg5MTk2LDE2MjMuNzg0NzgzNzIzNjU5LDExNzYuMzY3OTYwNzE3NzgxMiwzMzAuODM4Mjk4Njc2MjM5Nyw5NjIuODg5NjM2MzcxMzE1NCw2NDEuMjU3NTY1MzUzNDgzMSw5NDcuMzM4NjAzNTkzMTg0MiwxMDUxLjk5NTUwNzU0Mzc2MSw5MzUuODQ1NDIyMDAxOTc3OCwyMTMzLjIzOTM5MDgzMTk1ODYsMTM2LjA0MDM2MjYxNzA2MDYyLDEuNzAzMzQyNTkwNDgxMDU2OQorMTUsVHVlIDggRmViIDExLDgwLjcwMjk3NDg0NzIwMTIyLDcyLjA1NTk3MzU3NzExNjAzLDQxLjk0MjQ0MTU3MzAyMTMzLDg2LjcwNjA0Mzg5MDYzMTczLDg3LjM5ODgyMTQxNTIxMTkzLDE0MTIuODM2MjA2ODg3MDE4LDE1MzUuMzI3NjQyMzU3MjQ1MiwxMjU4LjM0NzYzOTQwODA0NDQsMTA5My4wMDE5MTA2OTk5OTEyLDEzNjYuNTI3NTk4NTU0MjY2MiwyNzcuNTAxNTY4OTczNDMwNiwxNjIyLjIyMjk0ODgwMDk4LDMyMS4wNDcyNzIyMzE4NDAzNCw4NTIuMjU2OTM0NjQ0NDA1LDc2MS43NjIzNTc2ODIxMjUxLDE3NDguNjkyMTc5ODk1OTU3NSwxMjY2Ljg1ODQzNzI4MDA4NywzNTYuMjg3NTc2NzE4NDY3NTYsMTAzNi45NTg1ODg0MTg0MTE2LDY5MC41ODU0MTU2NzM4OTk5LDEwMjAuMjExMzEzOTc2MDA1MiwxMTMyLjkxODgwNTM1MzUzMzYsMTAwNy44MzQwMzUzMDQ1MTg4LDIyOTcuMzM1ODc3MjU3OTI1LDE0Ni41MDUwNzkxNDc5NDU1LDEuODM0MzY5ODYwNzgxMjkwNAorMTYsV2VkIDkgRmViIDExLDg2LjQ2NzUxNjI4NDQwMjkzLDc3LjIwMjg2NzQzNDEyMjM4LDQ0LjkzODM1MjcyNjAyMjM3LDkyLjg5OTM3OTE4OTcyOTU5LDkzLjY0MTY0MTE5NDMzOTk4LDE1MTMuNzUzODM1Njg1Njk4NywxNjQ0Ljk5NDcyNTAyNDM1MywxMzQ4LjIzMDI4Nzc2Nzc0MzcsMTE3MS4wNzQwNjEyODc5OTcyLDE0NjQuMTM3NDQ0ODA2NjU2MywyOTcuMzIzMjU4Mjc2MjY2ODcsMTczOC4wOTY4ODU2MjIzNjk5LDM0My45NzkzOTIyMzgzODMxLDkxMy4xMzI4ODY1NDMzNTI0LDgxNi4xNzQzNjI3NDcyODEzLDE4NzMuNTk5NzAwOTc1NjUyLDEzNTcuMzQ5MDA0MzMyODY5MywzODEuNzM2ODgwMjA5OTczNSwxMTExLjAyNzYxNDUzNDQ1OTksNzM5LjkxMzMxNTMyMjE2NywxMDkzLjA4NDA5NzIzMTUzNjQsMTIxMy44NDIxODQwODY2MDM4LDEwNzkuODIyNzIwNTk1NjczMiwyNDYxLjQzMjUyNzc4MDM3NzMsMTU2Ljk2OTgwNjE0MzU0NjkyLDEuOTY1Mzk3MjYyMTA4Nzk0MworMTcsVGh1IDEwIEZlYiAxMSw5Mi4yMzIwNjM0ODYxNDYwOSw4Mi4zNDk3NjY0MzgwMjI1OCw0Ny45MzQyNjY4NzQ5MzQ1Nyw5OS4wOTI3MjA2ODIxNjI3NCw5OS44ODQ0NjcyMTYyODc4MiwxNjE0LjY3MTU2NTQwMjAwODEsMTc1NC42NjE5MTczNTg1NDM2LDE0MzguMTEzMDI2MDEwMDkxMywxMjQ5LjE0NjI4OTk0ODE1MzcsMTU2MS43NDczODg2Njg4OTI3LDMxNy4xNDQ5Njc0MDA3OTI0NCwxODUzLjk3MDkzODMxNzY5NjQsMzY2LjkxMTUzNTE3NzA0NTk1LDk3NC4wMDg4OTkzMTgyNTE3LDg3MC41ODY0MjIyMjQ0NDI2LDE5OTguNTA3MzQ2OTYyODY3NiwxNDQ3LjgzOTY2MTg3NjIxODgsNDA3LjE4NjIwOTE1MDc4MjksMTE4NS4wOTY3MTQ3MTk1MzQyLDc4OS4yNDEyNjQyOTgzMzM4LDExNjUuOTU2OTUzMzU5ODUxLDEyOTQuNzY1NjQzNzQzMDUyOCwxMTUxLjgxMTQ3Nzg3NTUxMywyNjI1LjUyOTM0MjM5OTQ4MDQsMTY3LjQzNDU0MzYwMzg3NTM0LDIuMDk2NDI0Nzk0NDYzNjk5NgorMTgsRnJpIDExIEZlYiAxMSw5Ny45OTY2MTY0NTI0MzY0NCw4Ny40OTY2NzA1ODg4MjE3OSw1MC45MzAxODQwMTk3NjA5MiwxMDUuMjg2MDY4MzY3OTM3MzgsMTA2LjEyNzI5OTQ4MTA2MTY4LDE3MTUuNTg5Mzk2MDM2MDQ3MiwxODY0LjMyOTIxOTM1OTkyNjYsMTUyNy45OTU4NTQxMzUxNzcsMTMyNy4yMTg1OTY2ODA1MzksMTY1OS4zNTc0MzAxNDEwNzI5LDMzNi45NjY2OTYzNDcwMjcxLDE5NjkuODQ1MTA2ODg3MDc1NiwzODkuODQzNzAxMDQ3ODUxNywxMDM0Ljg4NDk3Mjk2OTE2MzgsOTI0Ljk5ODUzNjExMzY2MzIsMjEyMy40MTUxMTc4NTc3MjksMTUzOC4zMzA0MDk5MTAyMjU2LDQzMi42MzU1NjM1NDA5MjEyLDEyNTkuMTY1ODg4OTczNzA4Nyw4MzguNTY5MjYyNjAyNDQ5NSwxMjM4LjgyOTg4MjM2MTAyMTYsMTM3NS42ODkxODQzMjI5NjE0LDEyMjMuODAwMzA3MTQ0MTA5OSwyNzg5LjYyNjMyMTExNTM5ODIsMTc3Ljg5OTI5MTUyODk0MTIsMi4yMjc0NTI0NTc4NDYxMzcKKzE5LFNhdCAxMiBGZWIgMTEsMTAzLjc2MTE3NTE4MzI3OTc2LDkyLjY0MzU3OTg4NjUyNTE1LDUzLjkyNjEwNDE2MDUwNDQxNiwxMTEuNDc5NDIyMjQ3MDU5NywxMTIuMzcwMTM3OTg4NjY3OCwxODE2LjUwNzMyNzU4NzkxNywxOTczLjk5NjYzMTAyODYxMTUsMTYxNy44Nzg3NzIxNDMwOTEsMTQwNS4yOTA5ODE0ODUyMzA4LDE3NTYuOTY3NTY5MjIzMjk0NSwzNTYuNzg4NDQ1MTE0OTkwNzQsMjA4NS43MTkzOTEzMzA2MjM3LDQxMi43NzU4ODk4NTA4MjMzLDEwOTUuNzYxMTA3NDk2MTQ5NCw5NzkuNDEwNzA0NDE0OTk3OSwyMjQ4LjMyMzAxMzY2MDM2MTUsMTYyOC44MjEyNDg0MzQ5ODA2LDQ1OC4wODQ5NDMzODA0MTM5NiwxMzMzLjIzNTEzNzI5NzA1NzUsODg3Ljg5NzMxMDIzNDU2MzUsMTMxMS43MDI4ODQyMzUxMjEyLDE0NTYuNjEyODA1ODI2NDEwNywxMjk1Ljc4OTIwODQwMTUzNjEsMjk1My43MjM0NjM5MjgyOTQ3LDE4OC4zNjQwNDk5MTg3NTUsMi4zNTg0ODAyNTIyNTYyMzgKKzIwLFN1biAxMyBGZWIgMTEsMTA5LjUyNTczOTY3ODY4MTgyLDk3Ljc5MDQ5NDMzMTEzNzgsNTYuOTIyMDI3Mjk3MTY4MDUsMTE3LjY3Mjc4MjMxOTUzNTkxLDExOC42MTI5ODI3MzkxMTI0NCwxOTE3LjQyNTM2MDA1NzcxODMsMjA4My42NjQxNTIzNjQ3MDgsMTcwNy43NjE3ODAwMzM5MjMsMTQ4My4zNjM0NDQzNjIzMDc1LDE4NTQuNTc3ODA1OTE1NjU1MywzNzYuNjEwMjEzNzA0NzAzMTQsMjIwMS41OTM3OTE2NDg0NTYsNDM1LjcwODEwMTU4NTk4Mzc0LDExNTYuNjM3MzAyODk5MjY5NiwxMDMzLjgyMjkyNzEyODUwMDksMjM3My4yMzEwMzQzNzA4ODk2LDE3MTkuMzEyMTc3NDUwNTc0Miw0ODMuNTM0MzQ4NjY5Mjg2NTQsMTQwNy4zMDQ0NTk2ODk2NTQ1LDkzNy4yMjU0MDcxOTQ3MjUyLDEzODQuNTc1OTU4OTgyMjIyOCwxNTM3LjUzNjUwODI1MzQ4MTUsMTM2Ny43NzgxODE2NDc4NjM3LDMxMTcuODIwNzcwODM4MzM0LDE5OC44Mjg4MTg3NzMzMjcxOSwyLjQ4OTUwODE3NzY5NDEzMworMjEsTW9uIDE0IEZlYiAxMSwxMTUuMjkwMzA5OTM4NjQ4MzYsMTAyLjkzNzQxMzkyMjY2NDg5LDU5LjkxNzk1MzQyOTc1NDgyNCwxMjMuODY2MTQ4NTg1MzcyMTksMTI0Ljg1NTgzMzczMjQwMTgyLDIwMTguMzQzNDkzNDQ1NTUyLDIxOTMuMzMxNzgzMzY4MzI2LDE3OTcuNjQ0ODc3ODA3NzYzLDE1NjEuNDM1OTg1MzExODQ3MiwxOTUyLjE4ODE0MDIxODI1MjgsMzk2LjQzMjAwMjExNjE4NDEsMjMxNy40NjgzMDc4NDA2ODgzLDQ1OC42NDAzMzYyNTMzNTU5LDEyMTcuNTEzNTU5MTc4NTg1MiwxMDg4LjIzNTIwNDI1NDIyNjYsMjQ5OC4xMzkxNzk5ODk0Mzg2LDE4MDkuODAzMTk2OTU3MDk2Niw1MDguOTgzNzc5NDA3NTY0NCwxNDgxLjM3Mzg1NjE1MTU3NCw5ODYuNTUzNTUzNDgyOTgzOCwxNDU3LjQ0OTEwNjYwMjM5OSwxNjE4LjQ2MDI5MTYwNDI1NDcsMTQzOS43NjcyMjY4ODMxNjQzLDMyODEuOTE4MjQxODQ1NjgsMjA5LjI5MzU5ODA5MjY2ODIyLDIuNjIwNTM2MjM0MTU5OTU0CisyMixUdWUgMTUgRmViIDExLDEyMS4wNTQ4ODU5NjMxODUxNywxMDguMDg0MzM4NjYxMTExNTcsNjIuOTEzODgyNTU4MjY3NzMsMTMwLjA1OTUyMTA0NDU3NDcyLDEzMS4wOTg2OTA5Njg1NDIyLDIxMTkuMjYxNzI3NzUxNTE5LDIzMDIuOTk5NTI0MDM5NTc0NywxODg3LjUyODA2NTQ2NDcwMDQsMTYzOS41MDg2MDQzMzM5Mjc3LDIwNDkuNzk4NTcyMTMxMTg0OCw0MTYuMjUzODEwMzQ5NDUzNSwyNDMzLjM0MjkzOTkwNzQzNyw0ODEuNTcyNTkzODUyOTYyNywxMjc4LjM4OTg3NjMzNDE1NzIsMTE0Mi42NDc1MzU3OTIyMjkzLDI2MjMuMDQ3NDUwNTE2MTMzMywxOTAwLjI5NDMwNjk1NDYzODYsNTM0LjQzMzIzNTU5NTI3MywxNTU1LjQ0MzMyNjY4Mjg5LDEwMzUuODgxNzQ5MDk5Mzg4OCwxNTMwLjMyMjMyNzA5NTcyMywxNjk5LjM4NDE1NTg3ODgxMTMsMTUxMS43NTYzNDQxMDc1MTA0LDM0NDYuMDE1ODc2OTUwNDk3LDIxOS43NTgzODc4NzY3ODg2LDIuNzUxNTY0NDIxNjUzODMxNQorMjMsV2VkIDE2IEZlYiAxMSwxMjYuODE5NDY3NzUyMjk4LDExMy4yMzEyNjg1NDY0ODMsNjUuOTA5ODE0NjgyNzA5NzcsMTM2LjI1Mjg5OTY5NzE0OTczLDEzNy4zNDE1NTQ0NDc1Mzk4LDIyMjAuMTgwMDYyOTc1NzIxLDI0MTIuNjY3Mzc0Mzc4NTY0NSwxOTc3LjQxMTM0MzAwNDgyNTUsMTcxNy41ODEzMDE0Mjg2MjczLDIxNDcuNDA5MTAxNjU0NTQ4NSw0MzYuMDc1NjM4NDA0NTMxMSwyNTQ5LjIxNzY4Nzg0ODgxOCw1MDQuNTA0ODc0Mzg0ODI3MTMsMTMzOS4yNjYyNTQzNjYwNDYzLDExOTcuMDU5OTIxNzQyNTYzNiwyNzQ3Ljk1NTg0NTk1MTA5ODYsMTk5MC43ODU1MDc0NDMyOTA3LDU1OS44ODI3MTcyMzI0Mzc4LDE2MjkuNTEyODcxMjgzNjc2NSwxMDg1LjIwOTk5NDA0Mzk4OTQsMTYwMy4xOTU2MjA0NjIyNjc1LDE3ODAuMzA4MTAxMDc3MjMyLDE1ODMuNzQ1NTMzMzIwOTczNCwzNjEwLjExMzY3NjE1Mjk0OSwyMzAuMjIzMTg4MTI1Njk4NzMsMi44ODI1OTI3NDAxNzU4OTY0CisyNCxUaHUgMTcgRmViIDExLDEzMi41ODQwNTUzMDU5OTI2MiwxMTguMzc4MjAzNTc4Nzg0MzEsNjguOTA1NzQ5ODAzMDgzOTIsMTQyLjQ0NjI4NDU0MzEwMzQsMTQzLjU4NDQyNDE2OTQwMDksMjMyMS4wOTg0OTkxMTgyNTc3LDI1MjIuMzM1MzM0Mzg1NDA0NiwyMDY3LjI5NDcxMDQyODIyODQsMTc5NS42NTQwNzY1OTYwMjQsMjI0NS4wMTk3Mjg3ODg0NDE2LDQ1NS44OTc0ODYyODE0MzY4LDI2NjUuMDkyNTUxNjY0OTQ2OCw1MjcuNDM3MTc3ODQ4OTcyLDE0MDAuMTQyNjkzMjc0MzEzNCwxMjUxLjQ3MjM2MjEwNTI4MzgsMjg3Mi44NjQzNjYyOTQ0NTksMjA4MS4yNzY3OTg0MjMxNDMsNTg1LjMzMjIyNDMxOTA4NDMsMTcwMy41ODI0ODk5NTQwMDc1LDExMzQuNTM4Mjg4MzE2ODM0NywxNjc2LjA2ODk4NjcwMjEwNTMsMTg2MS4yMzIxMjcxOTk1OTgyLDE2NTUuNzM0Nzk0NTIzNjI1OSwzNzc0LjIxMTYzOTQ1MzIwMSwyNDAuNjg3OTk4ODM5NDA5MTIsMy4wMTM2MjExODk3MjYyNzk3CisyNSxGcmkgMTggRmViIDExLDEzOC4zNDg2NDg2MjQyNzQ4LDEyMy41MjUxNDM3NTgwMjA2NSw3MS45MDE2ODc5MTkzOTMyLDE0OC42Mzk2NzU1ODI0NDE5LDE0OS44MjczMDAxMzQxMzE3MiwyNDIyLjAxNzAzNjE3OTIzMDcsMjYzMi4wMDM0MDQwNjAyMDQ1LDIxNTcuMTc4MTY3NzM0OTk4NiwxODczLjcyNjkyOTgzNjE5NTcsMjM0Mi42MzA0NTM1MzI5NjIsNDc1LjcxOTM1Mzk4MDE5MDMsMjc4MC45Njc1MzEzNTU5Mzk2LDU1MC4zNjk1MDQyNDU0MjA0LDE0NjEuMDE5MTkzMDU5MDE5NSwxMzA1Ljg4NDg1Njg4MDQ0NDQsMjk5Ny43NzMwMTE1NDYzNCwyMTcxLjc2ODE3OTg5NDI4NjcsNjEwLjc4MTc1Njg1NTIzNzcsMTc3Ny42NTIxODI2OTM5NTcyLDExODMuODY2NjMxOTE3OTc0NSwxNzQ4Ljk0MjQyNTgxNTMwOTQsMTk0Mi4xNTYyMzQyNDU5OTAyLDE3MjcuNzI0MTI3NzE1NTM5NSwzOTM4LjMwOTc2Njg1MTQxNTYsMjUxLjE1MjgyMDAxNzkzMDIyLDMuMTQ0NjQ5NzcwMzA1MTEyNAorMjYsU2F0IDE5IEZlYiAxMSwxNDQuMTEzMjQ3NzA3MTUwMywxMjguNjcyMDg5MDg0MTk3MTgsNzQuODk3NjI5MDMxNjQwNTksMTU0LjgzMzA3MjgxNTE3MTQ1LDE1Ni4wNzAxODIzNDE3Mzg1LDI1MjIuOTM1Njc0MTU4NzQwOCwyNzQxLjY3MTU4MzQwMzA3NDIsMjI0Ny4wNjE3MTQ5MjUyMjYsMTk1MS43OTk4NjExNDkyMjA4LDI0NDAuMjQxMjc1ODg4MjA3LDQ5NS41NDEyNDE1MDA4MTE1NywyODk2Ljg0MjYyNjkyMTkxMiw1NzMuMzAxODUzNTc0MTk1MiwxNTIxLjg5NTc1MzcyMDIyNTIsMTM2MC4yOTc0MDYwNjgxLDMxMjIuNjgxNzgxNzA2ODY2MywyMjYyLjI1OTY1MTg1NjgxMTYsNjM2LjIzMTMxNDg0MDkyMzgsMTg1MS43MjE5NDk1MDM1OTk3LDEyMzMuMTk1MDI0ODQ3NDU3NywxODIxLjgxNTkzNzgwMTk1MjUsMjAyMy4wODA0MjIyMTY0ODkzLDE3OTkuNzEzNTMyODk2Nzg2LDQxMDIuNDA4MDU4MzQ3NzU4LDI2MS42MTc2NTE2NjEyNzI1MywzLjI3NTY3ODQ4MTkxMjUyNgorMjcsU3VuIDIwIEZlYiAxMSwxNDkuODc3ODUyNTU0NjI0ODcsMTMzLjgxOTAzOTU1NzMxOTAzLDc3Ljg5MzU3MzEzOTgyOTEsMTYxLjAyNjQ3NjI0MTI5ODIsMTYyLjMxMzA3MDc5MjIyNzQ4LDI2MjMuODU0NDEzMDU2ODg4NSwyODUxLjMzOTg3MjQxNDEyMzQsMjMzNi45NDUzNTE5OTkwMDA2LDIwMjkuODcyODcwNTM1MTc3LDI1MzcuODUyMTk1ODU0Mjc0LDUxNS4zNjMxNDg4NDMzMjAzLDMwMTIuNzE3ODM4MzYyOTgwMyw1OTYuMjM0MjI1ODM1MzE5MywxNTgyLjc3MjM3NTI1Nzk5MTgsMTQxNC43MTAwMDk2NjgzMDQ2LDMyNDcuNTkwNjc2Nzc2MTYyNiwyMzUyLjc1MTIxNDMxMDgwOSw2NjEuNjgwODk4Mjc2MTY3OCwxOTI1Ljc5MTc5MDM4MzAwOSwxMjgyLjUyMzQ2NzEwNTMzNCwxODk0LjY4OTUyMjY2MjEwNzcsMjEwNC4wMDQ2OTExMTExNzYzLDE4NzEuNzAzMDEwMDY3NDM4LDQyNjYuNTA2NTEzOTQyMzkxLDI3Mi4wODI0OTM3Njk0NDY0NCwzLjQwNjcwNzMyNDU0ODY1MQorMjgsTW9uIDIxIEZlYiAxMSwxNTUuNjQyNDYzMTY2NzA0MywxMzguOTY1OTk1MTc3MzkxMzYsODAuODg5NTIwMjQzOTYxNzEsMTY3LjIxOTg4NTg2MDgyODQsMTY4LjU1NTk2NTQ4NTYwNDksMjcyNC43NzMyNTI4NzM3NzUsMjk2MS4wMDgyNzEwOTM0NjE2LDI0MjYuODI5MDc4OTU2NDEyNiwyMTA3Ljk0NTk1Nzk5NDE0MjYsMjYzNS40NjMyMTM0MzEyNjE1LDUzNS4xODUwNzYwMDc3MzY1LDMxMjguNTkzMTY1Njc5MjU5NSw2MTkuMTY2NjIxMDI4ODE1NywxNjQzLjY0OTA1NzY3MjM3OTcsMTQ2OS4xMjI2Njc2ODExMTI3LDMzNzIuNDk5Njk2NzU0MzU0LDI0NDMuMjQyODY3MjU2MzY4Myw2ODcuMTMwNTA3MTYwOTk1MywxOTk5Ljg2MTcwNTMzMjI1OTEsMTMzMS44NTE5NTg2OTE2NTI1LDE5NjcuNTYzMTgwMzk1ODQ3NywyMTg0LjkyOTA0MDkzMDEzMjUsMTk0My42OTI1NTkyMjc1NjcyLDQ0MzAuNjA1MTMzNjM1NDgsMjgyLjU0NzM0NjM0MjQ2MjUsMy41Mzc3MzYyOTgyMTM2MTkKKzI5LFR1ZSAyMiBGZWIgMTEsMTYxLjQwNzA3OTU0MzM5NDMzLDE0NC4xMTI5NTU5NDQ0MTkzLDgzLjg4NTQ3MDM0NDA0MTQ0LDE3My40MTMzMDE2NzM3NjgyNSwxNzQuNzk4ODY2NDIxODc3MDIsMjgyNS42OTIxOTM2MDk1MDIsMzA3MC42NzY3Nzk0NDExOTg1LDI1MTYuNzEyODk1Nzk3NTUxNSwyMTg2LjAxOTEyMzUyNjE5NiwyNzMzLjA3NDMyODYxOTI2NjUsNTU1LjAwNzAyMjk5NDA3OTgsMzI0NC40Njg2MDg4NzA4NjYzLDY0Mi4wOTkwMzkxNTQ3MDczLDE3MDQuNTI1ODAwOTYzNDUwMSwxNTIzLjUzNTM4MDEwNjU3OSwzNDk3LjQwODg0MTY0MTU2NTIsMjUzMy43MzQ2MTA2OTM1ODA2LDcxMi41ODAxNDE0OTU0MzE3LDIwNzMuOTMxNjk0MzUxNDI0LDEzODEuMTgwNDk5NjA2NDYyNywyMDQwLjQzNjkxMTAwMzI0NTMsMjI2NS44NTM0NzE2NzM0Mzg0LDIwMTUuNjgyMTgwMzc3MjQ1NSw0NTk0LjcwMzkxNzQyNzE4OTUsMjkzLjAxMjIwOTM4MDMzMTEsMy42Njg3NjU0MDI5MDc1NjAzCiszMCxXZWQgMjMgRmViIDExLDE2Ny4xNzE3MDE2ODQ3MDA3NCwxNDkuMjU5OTIxODU4NDA4LDg2Ljg4MTQyMzQ0MDA3MTI2LDE3OS42MDY3MjM2ODAxMjM4OCwxODEuMDQxNzczNjAxMDUwMSwyOTI2LjYxMTIzNTI2NDE2OSwzMTgwLjM0NTM5NzQ1NzQ0MzYsMjYwNi41OTY4MDI1MjI1MDcsMjI2NC4wOTIzNjcxMzE0MTQ0LDI4MzAuNjg1NTQxNDE4Mzg2NSw1NzQuODI4OTg5ODAyMzcsMzM2MC4zNDQxNjc5Mzc5MTYsNjY1LjAzMTQ4MDIxMzAxNywxNzY1LjQwMjYwNTEzMTI2NCwxNTc3Ljk0ODE0Njk0NDc1NzYsMzYyMi4zMTgxMTE0Mzc5MjEzLDI2MjQuMjI2NDQ0NjIyNTM2Myw3MzguMDI5ODAxMjc5NTAyNCwyMTQ4LjAwMTc1NzQ0MDU3ODMsMTQzMC41MDkwODk4NDk4MTM4LDIxMTMuMzEwNzE0NDg0MzczNCwyMzQ2Ljc3Nzk4MzM0MTE3NSwyMDg3LjY3MTg3MzUxNjU0NSw0NzU4LjgwMjg2NTMxNzY4MjUsMzAzLjQ3NzA4Mjg4MzA2Mjc0LDMuNzk5Nzk0NjM4NjMwNjA2NQorMzEsVGh1IDI0IEZlYiAxMSwxNzIuOTM2MzI5NTkwNjI5MywxNTQuNDA2ODkyOTE5MzYyNjMsODkuODc3Mzc5NTMyMDU0MTgsMTg1LjgwMDE1MTg3OTkwMTUsMTg3LjI4NDY4NzAyMzEzMDM1LDMwMjcuNTMwMzc3ODM3ODc4LDMyOTAuMDE0MTI1MTQyMzA2NSwyNjk2LjQ4MDc5OTEzMTM2OSwyMzQyLjE2NTY4ODgwOTg3NywyOTI4LjI5Njg1MTgyODcxOTQsNTk0LjY1MDk3NjQzMjYyNywzNDc2LjIxOTg0Mjg4MDUyNSw2ODcuOTYzOTQ0MjAzNzY3NywxODI2LjI3OTQ3MDE3NTg4MiwxNjMyLjM2MDk2ODE5NTcwMywzNzQ3LjIyNzUwNjE0MzU0NzUsMjcxNC43MTgzNjkwNDMzMjU4LDc2My40Nzk0ODY1MTMyMzI4LDIyMjIuMDcxODk0NTk5Nzk1NSwxNDc5LjgzNzcyOTQyMTc1NSwyMTg2LjE4NDU5MDgzOTMwNSwyNDI3LjcwMjU3NTkzMzQyMzMsMjE1OS42NjE2Mzg2NDU1Mzc2LDQ5MjIuOTAxOTc3MzA3MTIzLDMxMy45NDE5NjY4NTA2Njc5LDMuOTMwODI0MDA1MzgyODg4MgorMzIsRnJpIDI1IEZlYiAxMSwxNzguNzAwOTYzMjYxMTg1NzYsMTU5LjU1Mzg2OTEyNzI4ODMyLDkyLjg3MzMzODYxOTk5MzE5LDE5MS45OTM1ODYyNzMxMDczNSwxOTMuNTI3NjA2Njg4MTI0MDIsMzEyOC40NDk2MjEzMzA3MjkzLDMzOTkuNjgyOTYyNDk1ODk3MywyNzg2LjM2NDg4NTYyNDIyOCwyNDIwLjIzOTA4ODU2MTY2MSwzMDI1LjkwODI1OTg1MDM2Myw2MTQuNDcyOTgyODg0ODcwNywzNTkyLjA5NTYzMzY5ODgwOSw3MTAuODk2NDMxMTI2OTgyNSwxODg3LjE1NjM5NjA5NzM2NSwxNjg2Ljc3Mzg0Mzg1OTQ2OTcsMzg3Mi4xMzcwMjU3NTg1NjgsMjgwNS4yMTAzODM5NTYwNCw3ODguOTI5MTk3MTk2NjQ4NSwyMjk2LjE0MjEwNTgyOTE1LDE1MjkuMTY2NDE4MzIyMzM1OSwyMjU5LjA1ODU0MDA2ODExMzQsMjUwOC42MjcyNDk0NTAyNjQsMjIzMS42NTE0NzU3NjQyOTU0LDUwODcuMDAxMjUzMzk1Njc2LDMyNC40MDY4NjEyODMxNTcsNC4wNjE4NTM1MDMxNjQ1MzcKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvRGVtb2dyYXBoaWNTRUlSRGlzZWFzZV9GRF9SZWZlcmVuY2UvRGVtb2dyYXBoaWNNb2RlbC9tZW4vRGVuc2l0eV8yLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvRGVtb2dyYXBoaWNTRUlSRGlzZWFzZV9GRF9SZWZlcmVuY2UvRGVtb2dyYXBoaWNNb2RlbC9tZW4vRGVuc2l0eV8yLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YWU2ZDAxCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9EZW1vZ3JhcGhpY1NFSVJEaXNlYXNlX0ZEX1JlZmVyZW5jZS9EZW1vZ3JhcGhpY01vZGVsL21lbi9EZW5zaXR5XzIuY3N2CkBAIC0wLDAgKzEsMzMgQEAKK2l0ZXJhdGlvbix0aW1lLEVHLUZSRy1HMjEwMDAxLEVHLUZSRy1HMjEwMDAyLEVHLUZSRy1HMjEwMDAzLEVHLUZSRy1HMjEwMDA0LEVHLUZSRy1HMjEwMDA1LEVHLUxPRS1HMjQwMDAxLEVHLUxPRS1HMjQwMDAyLEVHLUxPRS1HMjQwMDAzLEVHLUxPRS1HMjQwMDA0LEVHLUxPRS1HMjQwMDA1LEVHLUxPRS1HMjQwMDA2LEVHLUxPRS1HMjQwMDA3LEVHLUxPRS1HMjQwMDA4LEVHLUxPRS1HMjQwMDA5LEVHLVVQRS1HMjkwMDAxLEVHLVVQRS1HMjkwMDAyLEVHLVVQRS1HMjkwMDAzLEVHLVVQRS1HMjkwMDA0LEVHLVVQRS1HMjkwMDA1LEVHLVVQRS1HMjkwMDA2LEVHLVVQRS1HMjkwMDA3LEVHLVVQRS1HMjkwMDA4LEVHLVVSRy1HMzAwMDAxLEVHLVVSRy1HMzAwMDAyLEVHLVVSRy1HMzAwMDAzLEVHLVVSRy1HMzAwMDA0CisxLFR1ZSAyNSBKYW4gMTEsMC44NTcwNzQ5MjkxNTgyMjkxLDAuMjkxMjk2NzEwMDY1OTg5MSwyLjY2NjY1MTM2NjE4Mzk1NzMsMS4wMDE2NTY2Njg5NDgzOTgsNS44MzEwOTgyNDUwMDY3MDMsMjE0LjQyMzIzNTY2OTUyMDIsNzUzLjIyNDM0MTM4NzY0MzIsMTE5MS42NDk5NjE3MTE2MDc4LDEzNTkuNTYzOTY5OTcyMTkyOCwyNjcwLjIwMzI3Njg2NDMwMzUsOTAuMTUzNjcyNDE0NjU1ODIsNTcwLjAwMzI1OTQ3ODA5MzYsNzkwLjMxNTY1MjAyODksNDE2LjI2MjE5ODIwMjc5NDksMjIyLjE2Mjc4Njc3Nzk5NjYsODUuMTY5NDUzMDUwMjE3MzcsMTE2LjI5MjE4NzQ5Nzk1MzUzLDQwLjUzNDUzNTE4NjUxMzg2LDc3Mi43NDY1NTUzODMzNDA3LDI1My44MjMwNDQ4Mjg1NzgzNiw0ODQuNzcyNDAxNTk5MDg3MSw3ODcuOTI3OTE4MjI0NzA4Miw3NjAuMjkyMzk3ODU2NDQzNCwxMzMyLjA1MDM3NDM5NTk1MjMsMzAuNTU3MTc3NjE5ODY3NjksOC42Mjk5MjUzMDY5Mzc3MDcKKzIsV2VkIDI2IEphbiAxMSwwLjg1NzA3NTc4NjIzMzE1ODQsMC4yOTEyOTcwMDEzNjI2OTkyLDIuNjY2NjU0MDMyODM1MzIzLDEuMDAxNjU3NjcwNjA1MDY3LDUuODMxMTA0MDc2MTA0OTQ5LDIxNC40MjM0NTAwOTI3NTU5LDc1My4yMjUwOTQ2MTE5ODQ3LDExOTEuNjUxMTUzMzYxNTY5NiwxMzU5LjU2NTMyOTUzNjE2MjgsMjY3MC4yMDU5NDcwNjc1ODA0LDkwLjE1Mzc2MjU2ODMyODIzLDU3MC4wMDM4Mjk0ODEzNTMsNzkwLjMxNjQ0MjM0NDU1MjEsNDE2LjI2MjYxNDQ2NDk5MzEsMjIyLjE2MzAwODk0MDc4MzM2LDg1LjE2OTUzODIxOTY3MDQzLDExNi4yOTIzMDM3OTAxNDEwMiw0MC41MzQ1NzU3MjEwNDkwNDUsNzcyLjc0NzMyODEyOTg5NjIsMjUzLjgyMzI5ODY1MTYyMzIsNDg0Ljc3Mjg4NjM3MTQ4ODcsNzg3LjkyODcwNjE1MjYyNjMsNzYwLjI5MzE1ODE0ODg0MTEsMTMzMi4wNTE3MDY0NDYzMjY4LDMwLjU1NzIwODE3NzA0NTMwNyw4LjYyOTkzMzkzNjg2MzAxNQorMyxUaHUgMjcgSmFuIDExLDAuODU3MDc2NjQzMzA4OTQ0NSwwLjI5MTI5NzI5MjY1OTcwMDUsMi42NjY2NTY2OTk0ODkzNTY0LDEuMDAxNjU4NjcyMjYyNzM3OSw1LjgzMTEwOTkwNzIwOTAyNSwyMTQuNDIzNjY0NTE2MjA2LDc1My4yMjU4NDc4MzcwNzkyLDExOTEuNjUyMzQ1MDEyNzIzMSwxMzU5LjU2NjY4OTEwMTQ5MjMsMjY3MC4yMDg2MTcyNzM1Mjc2LDkwLjE1Mzg1MjcyMjA5MDgsNTcwLjAwNDM5OTQ4NTE4MjYsNzkwLjMxNzIzMjY2MDk5NDUsNDE2LjI2MzAzMDcyNzYwNzU0LDIyMi4xNjMyMzExMDM3OTIzMyw4NS4xNjk2MjMzODkyMDg2NSwxMTYuMjkyNDIwMDgyNDQ0OCw0MC41MzQ2MTYyNTU2MjQ3Niw3NzIuNzQ4MTAwODc3MjI0NCwyNTMuODIzNTUyNDc0OTIxODMsNDg0Ljc3MzM3MTE0NDM3NTA2LDc4Ny45Mjk0OTQwODEzMzI1LDc2MC4yOTM5MTg0NDE5OTkzLDEzMzIuMDUzMDM4NDk4MDMzMiwzMC41NTcyMzg3MzQyNTM0ODUsOC42Mjk5NDI1NjY3OTY5NTIKKzQsRnJpIDI4IEphbiAxMSwwLjg1NzA3NzUwMDM4NTU4NzksMC4yOTEyOTc1ODM5NTY5OTMyLDIuNjY2NjU5MzY2MTQ2MDU2LDEuMDAxNjU5NjczOTIxNDEsNS44MzExMTU3MzgzMTg5MzMsMjE0LjQyMzg3ODkzOTg3MDUyLDc1My4yMjY2MDEwNjI5MjcxLDExOTEuNjUzNTM2NjY1MDY4MywxMzU5LjU2ODA0ODY2ODE4MTUsMjY3MC4yMTEyODc0ODIxNDUsOTAuMTUzOTQyODc1OTQzNTMsNTcwLjAwNDk2OTQ4OTU4MjEsNzkwLjMxODAyMjk3ODIyNzIsNDE2LjI2MzQ0Njk5MDYzODMsMjIyLjE2MzQ1MzI2NzAyMzQ0LDg1LjE2OTcwODU1ODgzMjA0LDExNi4yOTI1MzYzNzQ4NjQ5MSw0MC41MzQ2NTY3OTAyNDEwMTYsNzcyLjc0ODg3MzYyNTMyNTIsMjUzLjgyMzgwNjI5ODQ3NDMyLDQ4NC43NzM4NTU5MTc3NDYyMyw3ODcuOTMwMjgyMDEwODI2NSw3NjAuMjk0Njc4NzM1OTE3NywxMzMyLjA1NDM3MDU1MTA3MTgsMzAuNTU3MjY5MjkxNDkyMjIsOC42Mjk5NTExOTY3Mzk1MTcKKzUsU2F0IDI5IEphbiAxMSwwLjg1NzA3ODM1NzQ2MzA4ODIsMC4yOTEyOTc4NzUyNTQ1NzcxLDIuNjY2NjYyMDMyODA1NDIyLDEuMDAxNjYwNjc1NTgxMDg0LDUuODMxMTIxNTY5NDM0NjcxLDIxNC40MjQwOTMzNjM3NDk0NSw3NTMuMjI3MzU0Mjg5NTI4MSwxMTkxLjY1NDcyODMxODYwNDgsMTM1OS41Njk0MDgyMzYyMzAyLDI2NzAuMjEzOTU3NjkzNDMyMyw5MC4xNTQwMzMwMjk4ODY0LDU3MC4wMDU1Mzk0OTQ1NTE1LDc5MC4zMTg4MTMyOTYyNSw0MTYuMjYzODYzMjU0MDg1MjcsMjIyLjE2MzY3NTQzMDQ3NjcsODUuMTY5NzkzNzI4NTQwNiwxMTYuMjkyNjUyNjY3NDAxMjcsNDAuNTM0Njk3MzI0ODk3ODA2LDc3Mi43NDk2NDYzNzQxOTg3LDI1My44MjQwNjAxMjIyODA2Myw0ODQuNzc0MzQwNjkxNjAyMSw3ODcuOTMxMDY5OTQxMTA4NSw3NjAuMjk1NDM5MDMwNTk2NCwxMzMyLjA1NTcwMjYwNTQ0MjMsMzAuNTU3Mjk5ODQ4NzYxNTEzLDguNjI5OTU5ODI2NjkwNzE0Cis2LFN1biAzMCBKYW4gMTEsMC44NTcwNzkyMTQ1NDE0NDU2LDAuMjkxMjk4MTY2NTUyNDUyNCwyLjY2NjY2NDY5OTQ2NzQ1NDUsMS4wMDE2NjE2NzcyNDE3NTk1LDUuODMxMTI3NDAwNTU2MjQxLDIxNC40MjQzMDc3ODc4NDI4LDc1My4yMjgxMDc1MTY4ODIzLDExOTEuNjU1OTE5OTczMzMzLDEzNTkuNTcwNzY3ODA1NjM4MywyNjcwLjIxNjYyNzkwNzM5LDkwLjE1NDEyMzE4MzkxOTQ0LDU3MC4wMDYxMDk1MDAwOTEsNzkwLjMxOTYwMzYxNTA2MzMsNDE2LjI2NDI3OTUxNzk0ODUsMjIyLjE2Mzg5NzU5NDE1MjEzLDg1LjE2OTg3ODg5ODMzNDMyLDExNi4yOTI3Njg5NjAwNTM5Myw0MC41MzQ3Mzc4NTk1OTUxMyw3NzIuNzUwNDE5MTIzODQ1MiwyNTMuODI0MzEzOTQ2MzQwNzQsNDg0Ljc3NDgyNTQ2NTk0MjgsNzg3LjkzMTg1Nzg3MjE3ODUsNzYwLjI5NjE5OTMyNjAzNTUsMTMzMi4wNTcwMzQ2NjExNDQ4LDMwLjU1NzMzMDQwNjA2MTM1Nyw4LjYyOTk2ODQ1NjY1MDU0MQorNyxNb24gMzEgSmFuIDExLDAuODU3MDgwMDcxNjIwNjYwMiwwLjI5MTI5ODQ1Nzg1MDYxODksMi42NjY2NjczNjYxMzIxNTQzLDEuMDAxNjYyNjc4OTAzNDM2Niw1LjgzMTEzMzIzMTY4MzY0MiwyMTQuNDI0NTIyMjEyMTUwNTgsNzUzLjIyODg2MDc0NDk4OTksMTE5MS42NTcxMTE2MjkyNTMsMTM1OS41NzIxMjczNzY0MDYxLDI2NzAuMjE5Mjk4MTI0MDE3OCw5MC4xNTQyMTMzMzgwNDI2Miw1NzAuMDA2Njc5NTA2MjAwNSw3OTAuMzIwMzkzOTM0NjY2OSw0MTYuMjY0Njk1NzgyMjI4MDUsMjIyLjE2NDExOTc1ODA0OTcsODUuMTY5OTY0MDY4MjEzMjIsMTE2LjI5Mjg4NTI1MjgyMjksNDAuNTM0Nzc4Mzk0MzMyOTk2LDc3Mi43NTExOTE4NzQyNjQyLDI1My44MjQ1Njc3NzA2NTQ2NSw0ODQuNzc1MzEwMjQwNzY4MjUsNzg3LjkzMjY0NTgwNDAzNjQsNzYwLjI5Njk1OTYyMjIzNDksMTMzMi4wNTgzNjY3MTgxNzk1LDMwLjU1NzM2MDk2MzM5MTc2Miw4LjYyOTk3NzA4NjYxODk5NworOCxUdWUgMSBGZWIgMTEsMC44NTcwODA5Mjg3MDA3MzE4LDAuMjkxMjk4NzQ5MTQ5MDc2OCwyLjY2NjY3MDAzMjc5OTUyMDMsMS4wMDE2NjM2ODA1NjYxMTU3LDUuODMxMTM5MDYyODE2ODc1LDIxNC40MjQ3MzY2MzY2NzI4LDc1My4yMjk2MTM5NzM4NTA2LDExOTEuNjU4MzAzMjg2MzY0OCwxMzU5LjU3MzQ4Njk0ODUzMzYsMjY3MC4yMjE5NjgzNDMzMTYsOTAuMTU0MzAzNDkyMjU1OTUsNTcwLjAwNzI0OTUxMjg4LDc5MC4zMjExODQyNTUwNjA5LDQxNi4yNjUxMTIwNDY5MjM4MywyMjIuMTY0MzQxOTIyMTY5NDgsODUuMTcwMDQ5MjM4MTc3MywxMTYuMjkzMDAxNTQ1NzA4MTUsNDAuNTM0ODE4OTI5MTExMzksNzcyLjc1MTk2NDYyNTQ1NiwyNTMuODI0ODIxNTk1MjIyNDMsNDg0Ljc3NTc5NTAxNjA3ODUsNzg3LjkzMzQzMzczNjY4MjIsNzYwLjI5NzcxOTkxOTE5NDUsMTMzMi4wNTk2OTg3NzY1NDYyLDMwLjU1NzM5MTUyMDc1MjcyNCw4LjYyOTk4NTcxNjU5NjA4MworOSxXZWQgMiBGZWIgMTEsMC44NTcwODE3ODU3ODE2NjA2LDAuMjkxMjk5MDQwNDQ3ODI1OSwyLjY2NjY3MjY5OTQ2OTU1MzUsMS4wMDE2NjQ2ODIyMjk3OTYzLDUuODMxMTQ0ODkzOTU1OTM4LDIxNC40MjQ5NTEwNjE0MDk0Nyw3NTMuMjMwMzY3MjAzNDY0NywxMTkxLjY1OTQ5NDk0NDY2OCwxMzU5LjU3NDg0NjUyMjAyMDYsMjY3MC4yMjQ2Mzg1NjUyODQzLDkwLjE1NDM5MzY0NjU1OTQ2LDU3MC4wMDc4MTk1MjAxMjk1LDc5MC4zMjE5NzQ1NzYyNDUxLDQxNi4yNjU1MjgzMTIwMzU4LDIyMi4xNjQ1NjQwODY1MTE0Myw4NS4xNzAxMzQ0MDgyMjY1MywxMTYuMjkzMTE3ODM4NzA5NjksNDAuNTM0ODU5NDYzOTMwMzIsNzcyLjc1MjczNzM3NzQyMDcsMjUzLjgyNTA3NTQyMDA0NDA0LDQ4NC43NzYyNzk3OTE4NzM1LDc4Ny45MzQyMjE2NzAxMTU5LDc2MC4yOTg0ODAyMTY5MTQzLDEzMzIuMDYxMDMwODM2MjQ1LDMwLjU1NzQyMjA3ODE0NDI1LDguNjI5OTk0MzQ2NTgxODAxCisxMCxUaHUgMyBGZWIgMTEsMC44NTcwODI2NDI4NjM0NDY1LDAuMjkxMjk5MzMxNzQ2ODY2NCwyLjY2NjY3NTM2NjE0MjI1MjYsMS4wMDE2NjU2ODM4OTQ0Nzg0LDUuODMxMTUwNzI1MTAwODMzLDIxNC40MjUxNjU0ODYzNjA1LDc1My4yMzExMjA0MzM4MzE4LDExOTEuNjYwNjg2NjA0MTYzLDEzNTkuNTc2MjA2MDk2ODY3LDI2NzAuMjI3MzA4Nzg5OTIzLDkwLjE1NDQ4MzgwMDk1MzA5LDU3MC4wMDgzODk1Mjc5NDksNzkwLjMyMjc2NDg5ODIxOTcsNDE2LjI2NTk0NDU3NzU2NDE0LDIyMi4xNjQ3ODYyNTEwNzU1LDg1LjE3MDIxOTU3ODM2MDk0LDExNi4yOTMyMzQxMzE4Mjc1Myw0MC41MzQ4OTk5OTg3ODk3OCw3NzIuNzUzNTEwMTMwMTU4LDI1My44MjUzMjkyNDUxMTk0Myw0ODQuNzc2NzY0NTY4MTUzMzQsNzg3LjkzNTAwOTYwNDMzNzYsNzYwLjI5OTI0MDUxNTM5NDYsMTMzMi4wNjIzNjI4OTcyNzU4LDMwLjU1NzQ1MjYzNTU2NjMyOCw4LjYzMDAwMjk3NjU3NjE0NworMTEsRnJpIDQgRmViIDExLDAuODU3MDgzNDk5OTQ2MDg5MywwLjI5MTI5OTYyMzA0NjE5ODEsMi42NjY2NzgwMzI4MTc2MTg1LDEuMDAxNjY2Njg1NTYwMTYyNCw1LjgzMTE1NjU1NjI1MTU1OCwyMTQuNDI1Mzc5OTExNTI1OTcsNzUzLjIzMTg3MzY2NDk1MjMsMTE5MS42NjE4NzgyNjQ4NDk1LDEzNTkuNTc3NTY1NjczMDczMiwyNjcwLjIyOTk3OTAxNzIzMiw5MC4xNTQ1NzM5NTU0MzY4OSw1NzAuMDA4OTU5NTM2MzM4Niw3OTAuMzIzNTU1MjIwOTg0Niw0MTYuMjY2MzYwODQzNTA4NywyMjIuMTY1MDA4NDE1ODYxNzYsODUuMTcwMzA0NzQ4NTgwNTIsMTE2LjI5MzM1MDQyNTA2MTY3LDQwLjUzNDk0MDUzMzY4OTc4LDc3Mi43NTQyODI4ODM2NjgyLDI1My44MjU1ODMwNzA0NDg3LDQ4NC43NzcyNDkzNDQ5MTc5LDc4Ny45MzU3OTc1MzkzNDcyLDc2MC4zMDAwMDA4MTQ2MzUsMTMzMi4wNjM2OTQ5NTk2MzksMzAuNTU3NDgzMTkzMDE4OTYsOC42MzAwMTE2MDY1NzkxMjQKKzEyLFNhdCA1IEZlYiAxMSwwLjg1NzA4NDM1NzAyOTU4OTMsMC4yOTEyOTk5MTQzNDU4MjEyLDIuNjY2NjgwNjk5NDk1NjUxLDEuMDAxNjY3Njg3MjI2ODQ4LDUuODMxMTYyMzg3NDA4MTE0LDIxNC40MjU1OTQzMzY5MDU4Nyw3NTMuMjMyNjI2ODk2ODI2LDExOTEuNjYzMDY5OTI2NzI4LDEzNTkuNTc4OTI1MjUwNjM4OCwyNjcwLjIzMjY0OTI0NzIxMDcsOTAuMTU0NjY0MTEwMDEwODYsNTcwLjAwOTUyOTU0NTI5ODIsNzkwLjMyNDM0NTU0NDUzOTksNDE2LjI2Njc3NzEwOTg2OTUsMjIyLjE2NTIzMDU4MDg3MDE0LDg1LjE3MDM4OTkxODg4NTI2LDExNi4yOTM0NjY3MTg0MTIwOSw0MC41MzQ5ODEwNjg2MzAzMTYsNzcyLjc1NTA1NTYzNzk1MSwyNTMuODI1ODM2ODk2MDMxNzcsNDg0Ljc3NzczNDEyMjE2NzI2LDc4Ny45MzY1ODU0NzUxNDQ2LDc2MC4zMDA3NjExMTQ2MzU5LDEzMzIuMDY1MDI3MDIzMzMzOSwzMC41NTc1MTM3NTA1MDIxNTMsOC42MzAwMjAyMzY1OTA3MzEKKzEzLFN1biA2IEZlYiAxMSwwLjg1NzA4NTIxNDExMzk0NjIsMC4yOTEzMDAyMDU2NDU3MzU1NSwyLjY2NjY4MzM2NjE3NjM1MDUsMS4wMDE2Njg2ODg4OTQ1MzUyLDUuODMxMTY4MjE4NTcwNTAzLDIxNC40MjU4MDg3NjI1MDAyMiw3NTMuMjMzMzgwMTI5NDUyOCwxMTkxLjY2NDI2MTU4OTc5OCwxMzU5LjU4MDI4NDgyOTU2NCwyNjcwLjIzNTMxOTQ3OTg2LDkwLjE1NDc1NDI2NDY3NDk2LDU3MC4wMTAwOTk1NTQ4Mjc3LDc5MC4zMjUxMzU4Njg4ODU1LDQxNi4yNjcxOTMzNzY2NDY2LDIyMi4xNjU0NTI3NDYxMDA3NSw4NS4xNzA0NzUwODkyNzUxOSwxMTYuMjkzNTgzMDExODc4ODEsNDAuNTM1MDIxNjAzNjExMzgsNzcyLjc1NTgyODM5MzAwNjcsMjUzLjgyNjA5MDcyMTg2ODY0LDQ4NC43NzgyMTg4OTk5MDEzMyw3ODcuOTM3MzczNDExNzMwMiw3NjAuMzAxNTIxNDE1Mzk3LDEzMzIuMDY2MzU5MDg4MzYxLDMwLjU1NzU0NDMwODAxNTkwMyw4LjYzMDAyODg2NjYxMDk2NworMTQsTW9uIDcgRmViIDExLDAuODU3MDg2MDcxMTk5MTYwNCwwLjI5MTMwMDQ5Njk0NTk0MTIsMi42NjY2ODYwMzI4NTk3MTcsMS4wMDE2Njk2OTA1NjMyMjQsNS44MzExNzQwNDk3Mzg3MjEsMjE0LjQyNjAyMzE4ODMwOSw3NTMuMjM0MTMzMzYyODMzLDExOTEuNjY1NDUzMjU0MDU5MiwxMzU5LjU4MTY0NDQwOTg0OSwyNjcwLjIzNzk4OTcxNTE3OTUsOTAuMTU0ODQ0NDE5NDI5MjIsNTcwLjAxMDY2OTU2NDkyNzIsNzkwLjMyNTkyNjE5NDAyMTIsNDE2LjI2NzYwOTY0Mzg0LDIyMi4xNjU2NzQ5MTE1NTM1LDg1LjE3MDU2MDI1OTc1MDI3LDExNi4yOTM2OTkzMDU0NjE4Myw0MC41MzUwNjIxMzg2MzI5OSw3NzIuNzU2NjAxMTQ4ODM1MSwyNTMuODI2MzQ0NTQ3OTU5MzcsNDg0Ljc3ODcwMzY3ODEyMDMsNzg3LjkzODE2MTM0OTEwMzcsNzYwLjMwMjI4MTcxNjkxODUsMTMzMi4wNjc2OTExNTQ3MTk4LDMwLjU1NzU3NDg2NTU2MDIxMyw4LjYzMDAzNzQ5NjYzOTgzNQorMTUsVHVlIDggRmViIDExLDAuODU3MDg2OTI4Mjg1MjMxNiwwLjI5MTMwMDc4ODI0NjQzODEsMi42NjY2ODg2OTk1NDU3NSwxLjAwMTY3MDY5MjIzMjkxNDYsNS44MzExNzk4ODA5MTI3NzIsMjE0LjQyNjIzNzYxNDMzMjE3LDc1My4yMzQ4ODY1OTY5NjY0LDExOTEuNjY2NjQ0OTE5NTEyNywxMzU5LjU4MzAwMzk5MTQ5MzMsMjY3MC4yNDA2NTk5NTMxNjksOTAuMTU0OTM0NTc0MjczNjQsNTcwLjAxMTIzOTU3NTU5NjcsNzkwLjMyNjcxNjUxOTk0NzUsNDE2LjI2ODAyNTkxMTQ0OTcsMjIyLjE2NTg5NzA3NzIyODQsODUuMTcwNjQ1NDMwMzEwNTMsMTE2LjI5MzgxNTU5OTE2MTEyLDQwLjUzNTEwMjY3MzY5NTEyLDc3Mi43NTczNzM5MDU0MzYyLDI1My44MjY1OTgzNzQzMDM5Myw0ODQuNzc5MTg4NDU2ODIzOTMsNzg3LjkzODk0OTI4NzI2NDksNzYwLjMwMzA0MjAxOTIwMDIsMTMzMi4wNjkwMjMyMjI0MTEsMzAuNTU3NjA1NDIzMTM1MDgzLDguNjMwMDQ2MTI2Njc3MzMyCisxNixXZWQgOSBGZWIgMTEsMC44NTcwODc3ODUzNzIxNTk4LDAuMjkxMzAxMDc5NTQ3MjI2NCwyLjY2NjY5MTM2NjIzNDQ0OTYsMS4wMDE2NzE2OTM5MDM2MDY4LDUuODMxMTg1NzEyMDkyNjUzLDIxNC40MjY0NTIwNDA1Njk3OSw3NTMuMjM1NjM5ODMxODUyOCwxMTkxLjY2NzgzNjU4NjE1NzYsMTM1OS41ODQzNjM1NzQ0OTczLDI2NzAuMjQzMzMwMTkzODI5LDkwLjE1NTAyNDcyOTIwODIxLDU3MC4wMTE4MDk1ODY4MzYzLDc5MC4zMjc1MDY4NDY2NjM5LDQxNi4yNjg0NDIxNzk0NzU2NCwyMjIuMTY2MTE5MjQzMTI1NDgsODUuMTcwNzMwNjAwOTU1OTYsMTE2LjI5MzkzMTg5Mjk3NjcyLDQwLjUzNTE0MzIwODc5NzgsNzcyLjc1ODE0NjY2MjgxMDEsMjUzLjgyNjg1MjIwMDkwMjI3LDQ4NC43Nzk2NzMyMzYwMTI0LDc4Ny45Mzk3MzcyMjYyMTQyLDc2MC4zMDM4MDIzMjIyNDIzLDEzMzIuMDcwMzU1MjkxNDM0MiwzMC41NTc2MzU5ODA3NDA1MDMsOC42MzAwNTQ3NTY3MjM0NTgKKzE3LFRodSAxMCBGZWIgMTEsMC44NTcwODg2NDI0NTk5NDUxLDAuMjkxMzAxMzcwODQ4MzA1OTMsMi42NjY2OTQwMzI5MjU4MTU1LDEuMDAxNjcyNjk1NTc1MzAwNiw1LjgzMTE5MTU0MzI3ODM2NSwyMTQuNDI2NjY2NDY3MDIxODUsNzUzLjIzNjM5MzA2NzQ5MjcsMTE5MS42NjkwMjgyNTM5OTQyLDEzNTkuNTg1NzIzMTU4ODYxLDI2NzAuMjQ2MDAwNDM3MTU5LDkwLjE1NTExNDg4NDIzMjk0LDU3MC4wMTIzNzk1OTg2NDU5LDc5MC4zMjgyOTcxNzQxNzA4LDQxNi4yNjg4NTg0NDc5MTc4LDIyMi4xNjYzNDE0MDkyNDQ3NSw4NS4xNzA4MTU3NzE2ODY1NiwxMTYuMjk0MDQ4MTg2OTA4NjEsNDAuNTM1MTgzNzQzOTQxMDA1LDc3Mi43NTg5MTk0MjA5NTY4LDI1My44MjcxMDYwMjc3NTQ1LDQ4NC43ODAxNTgwMTU2ODU2Myw3ODcuOTQwNTI1MTY1OTUxNCw3NjAuMzA0NTYyNjI2MDQ0NiwxMzMyLjA3MTY4NzM2MTc4OTYsMzAuNTU3NjY2NTM4Mzc2NDg0LDguNjMwMDYzMzg2Nzc4MjE1CisxOCxGcmkgMTEgRmViIDExLDAuODU3MDg5NDk5NTQ4NTg3NiwwLjI5MTMwMTY2MjE0OTY3NjgsMi42NjY2OTY2OTk2MTk4NDg3LDEuMDAxNjczNjk3MjQ3OTk2Myw1LjgzMTE5NzM3NDQ2OTkwOSwyMTQuNDI2ODgwODkzNjg4MzIsNzUzLjIzNzE0NjMwMzg4NTgsMTE5MS42NzAyMTk5MjMwMjI0LDEzNTkuNTg3MDgyNzQ0NTg0LDI2NzAuMjQ4NjcwNjgzMTU5Niw5MC4xNTUyMDUwMzkzNDc4Miw1NzAuMDEyOTQ5NjExMDI1NSw3OTAuMzI5MDg3NTAyNDY3OSw0MTYuMjY5Mjc0NzE2Nzc2MjQsMjIyLjE2NjU2MzU3NTU4NjE3LDg1LjE3MDkwMDk0MjUwMjMzLDExNi4yOTQxNjQ0ODA5NTY4MSw0MC41MzUyMjQyNzkxMjQ3NSw3NzIuNzU5NjkyMTc5ODc2MiwyNTMuODI3MzU5ODU0ODYwNSw0ODQuNzgwNjQyNzk1ODQzNyw3ODcuOTQxMzEzMTA2NDc2NSw3NjAuMzA1MzIyOTMwNjA3MiwxMzMyLjA3MzAxOTQzMzQ3NywzMC41NTc2OTcwOTYwNDMwMiw4LjYzMDA3MjAxNjg0MTYwMgorMTksU2F0IDEyIEZlYiAxMSwwLjg1NzA5MDM1NjYzODA4NzEsMC4yOTEzMDE5NTM0NTEzMzg5NywyLjY2NjY5OTM2NjMxNjU0ODYsMS4wMDE2NzQ2OTg5MjE2OTM2LDUuODMxMjAzMjA1NjY3Mjg0LDIxNC40MjcwOTUzMjA1NjkyLDc1My4yMzc4OTk1NDEwMzIsMTE5MS42NzE0MTE1OTMyNDIzLDEzNTkuNTg4NDQyMzMxNjY2OCwyNjcwLjI1MTM0MDkzMTgzMDMsOTAuMTU1Mjk1MTk0NTUyODYsNTcwLjAxMzUxOTYyMzk3NTEsNzkwLjMyOTg3NzgzMTU1NTYsNDE2LjI2OTY5MDk4NjA1MSwyMjIuMTY2Nzg1NzQyMTQ5NzMsODUuMTcwOTg2MTEzNDAzMjcsMTE2LjI5NDI4MDc3NTEyMTI4LDQwLjUzNTI2NDgxNDM0OTAzLDc3Mi43NjA0NjQ5Mzk1Njg0LDI1My44Mjc2MTM2ODIyMjAzNSw0ODQuNzgxMTI3NTc2NDg2NCw3ODcuOTQyMTAxMDQ3Nzg5Niw3NjAuMzA2MDgzMjM1OTMsMTMzMi4wNzQzNTE1MDY0OTY0LDMwLjU1NzcyNzY1Mzc0MDEyLDguNjMwMDgwNjQ2OTEzNjE5CisyMCxTdW4gMTMgRmViIDExLDAuODU3MDkxMjEzNzI4NDQzOCwwLjI5MTMwMjI0NDc1MzI5MjQsMi42NjY3MDIwMzMwMTU5MTUyLDEuMDAxNjc1NzAwNTk2MzkyNSw1LjgzMTIwOTAzNjg3MDQ4OSwyMTQuNDI3MzA5NzQ3NjY0NSw3NTMuMjM4NjUyNzc4OTMxNSwxMTkxLjY3MjYwMzI2NDY1NCwxMzU5LjU4OTgwMTkyMDEwOTMsMjY3MC4yNTQwMTExODMxNzEzLDkwLjE1NTM4NTM0OTg0ODA2LDU3MC4wMTQwODk2Mzc0OTQ3LDc5MC4zMzA2NjgxNjE0MzMzLDQxNi4yNzAxMDcyNTU3NDE5NSwyMjIuMTY3MDA3OTA4OTM1NDYsODUuMTcxMDcxMjg0Mzg5NCwxMTYuMjk0Mzk3MDY5NDAyMDQsNDAuNTM1MzA1MzQ5NjEzODM2LDc3Mi43NjEyMzc3MDAwMzMyLDI1My44Mjc4Njc1MDk4MzQwMiw0ODQuNzgxNjEyMzU3NjE0LDc4Ny45NDI4ODg5ODk4OTA3LDc2MC4zMDY4NDM1NDIwMTMyLDEzMzIuMDc1NjgzNTgwODQ4MSwzMC41NTc3NTgyMTE0Njc3NzUsOC42MzAwODkyNzY5OTQyNjYKKzIxLE1vbiAxNCBGZWIgMTEsMC44NTcwOTIwNzA4MTk2NTc0LDAuMjkxMzAyNTM2MDU1NTM3MTMsMi42NjY3MDQ2OTk3MTc5NDgsMS4wMDE2NzY3MDIyNzIwOTMsNS44MzEyMTQ4NjgwNzk1MjYsMjE0LjQyNzUyNDE3NDk3NDI1LDc1My4yMzk0MDYwMTc1ODQzLDExOTEuNjczNzk0OTM3MjU3MywxMzU5LjU5MTE2MTUwOTkxMTIsMjY3MC4yNTY2ODE0MzcxODI2LDkwLjE1NTQ3NTUwNTIzMzQxLDU3MC4wMTQ2NTk2NTE1ODQzLDc5MC4zMzE0NTg0OTIxMDE1LDQxNi4yNzA1MjM1MjU4NDkxNywyMjIuMTY3MjMwMDc1OTQzNCw4NS4xNzExNTY0NTU0NjA2OCwxMTYuMjk0NTEzMzYzNzk5MTEsNDAuNTM1MzQ1ODg0OTE5MTk1LDc3Mi43NjIwMTA0NjEyNzA4LDI1My44MjgxMjEzMzc3MDE1Myw0ODQuNzgyMDk3MTM5MjI2NCw3ODcuOTQzNjc2OTMyNzc5Nyw3NjAuMzA3NjAzODQ4ODU2NywxMzMyLjA3NzAxNTY1NjUzMTYsMzAuNTU3Nzg4NzY5MjI1OTgzLDguNjMwMDk3OTA3MDgzNTQ0CisyMixUdWUgMTUgRmViIDExLDAuODU3MDkyOTI3OTExNzI4NCwwLjI5MTMwMjgyNzM1ODA3MzIsMi42NjY3MDczNjY0MjI2NDc1LDEuMDAxNjc3NzAzOTQ4Nzk1NCw1LjgzMTIyMDY5OTI5NDM5NCwyMTQuNDI3NzM4NjAyNDk4NCw3NTMuMjQwMTU5MjU2OTkwNCwxMTkxLjY3NDk4NjYxMTA1MjIsMTM1OS41OTI1MjExMDEwNzI2LDI2NzAuMjU5MzUxNjkzODY0LDkwLjE1NTU2NTY2MDcwODkyLDU3MC4wMTUyMjk2NjYyNDQxLDc5MC4zMzIyNDg4MjM1NjAxLDQxNi4yNzA5Mzk3OTYzNzI2NiwyMjIuMTY3NDUyMjQzMTczNDcsODUuMTcxMjQxNjI2NjE3MTUsMTE2LjI5NDYyOTY1ODMxMjQ5LDQwLjUzNTM4NjQyMDI2NTA4LDc3Mi43NjI3ODMyMjMyODEzLDI1My44MjgzNzUxNjU4MjI5LDQ4NC43ODI1ODE5MjEzMjM1LDc4Ny45NDQ0NjQ4NzY0NTY3LDc2MC4zMDgzNjQxNTY0NjA2LDEzMzIuMDc4MzQ3NzMzNTQ3MiwzMC41NTc4MTkzMjcwMTQ3NSw4LjYzMDEwNjUzNzE4MTQ1CisyMyxXZWQgMTYgRmViIDExLDAuODU3MDkzNzg1MDA0NjU2MywwLjI5MTMwMzExODY2MDkwMDUzLDIuNjY2NzEwMDMzMTMwMDE0LDEuMDAxNjc4NzA1NjI2NDk5Myw1LjgzMTIyNjUzMDUxNTA5MywyMTQuNDI3OTUzMDMwMjM3LDc1My4yNDA5MTI0OTcxNDk2LDExOTEuNjc2MTc4Mjg2MDM5LDEzNTkuNTkzODgwNjkzNTkzNywyNjcwLjI2MjAyMTk1MzIxNiw5MC4xNTU2NTU4MTYyNzQ1Nyw1NzAuMDE1Nzk5NjgxNDczNyw3OTAuMzMzMDM5MTU1ODA5LDQxNi4yNzEzNTYwNjczMTI1LDIyMi4xNjc2NzQ0MTA2MjU3LDg1LjE3MTMyNjc5Nzg1ODc3LDExNi4yOTQ3NDU5NTI5NDIxNSw0MC41MzU0MjY5NTU2NTE0OTUsNzcyLjc2MzU1NTk4NjA2NDUsMjUzLjgyODYyODk5NDE5ODA2LDQ4NC43ODMwNjY3MDM5MDU0Myw3ODcuOTQ1MjUyODIwOTIxNiw3NjAuMzA5MTI0NDY0ODI0OCwxMzMyLjA3OTY3OTgxMTg5NDcsMzAuNTU3ODQ5ODg0ODM0MDc3LDguNjMwMTE1MTY3Mjg3OTg2CisyNCxUaHUgMTcgRmViIDExLDAuODU3MDk0NjQyMDk4NDQxMiwwLjI5MTMwMzQwOTk2NDAxOTIsMi42NjY3MTI2OTk4NDAwNDY4LDEuMDAxNjc5NzA3MzA1MjA1LDUuODMxMjMyMzYxNzQxNjI0LDIxNC40MjgxNjc0NTgxOTAwNSw3NTMuMjQxNjY1NzM4MDYyMSwxMTkxLjY3NzM2OTk2MjIxNzIsMTM1OS41OTUyNDAyODc0NzQ2LDI2NzAuMjY0NjkyMjE1MjM3Niw5MC4xNTU3NDU5NzE5MzAzOSw1NzAuMDE2MzY5Njk3MjczNSw3OTAuMzMzODI5NDg4ODQ4Miw0MTYuMjcxNzcyMzM4NjY4NiwyMjIuMTY3ODk2NTc4MzAwMSw4NS4xNzE0MTE5NjkxODU1NywxMTYuMjk0ODYyMjQ3Njg4MSw0MC41MzU0Njc0OTEwNzg0Niw3NzIuNzY0MzI4NzQ5NjIwNSwyNTMuODI4ODgyODIyODI3MDQsNDg0Ljc4MzU1MTQ4Njk3MjE2LDc4Ny45NDYwNDA3NjYxNzQ0LDc2MC4zMDk4ODQ3NzM5NDkyLDEzMzIuMDgxMDExODkxNTc0NSwzMC41NTc4ODA0NDI2ODM5NjMsOC42MzAxMjM3OTc0MDMxNTQKKzI1LEZyaSAxOCBGZWIgMTEsMC44NTcwOTU0OTkxOTMwODM0LDAuMjkxMzAzNzAxMjY3NDI5MTYsMi42NjY3MTUzNjY1NTI3NDYzLDEuMDAxNjgwNzA4OTg0OTEyMiw1LjgzMTIzODE5Mjk3Mzk4NSwyMTQuNDI4MzgxODg2MzU3NSw3NTMuMjQyNDE4OTc5NzI3OSwxMTkxLjY3ODU2MTYzOTU4NywxMzU5LjU5NjU5OTg4MjcxNDgsMjY3MC4yNjczNjI0Nzk5Mjk1LDkwLjE1NTgzNjEyNzY3NjM1LDU3MC4wMTY5Mzk3MTM2NDMyLDc5MC4zMzQ2MTk4MjI2Nzc3LDQxNi4yNzIxODg2MTA0NDA5NCwyMjIuMTY4MTE4NzQ2MTk2NjgsODUuMTcxNDk3MTQwNTk3NTQsMTE2LjI5NDk3ODU0MjU1MDM0LDQwLjUzNTUwODAyNjU0NTk1LDc3Mi43NjUxMDE1MTM5NDkzLDI1My44MjkxMzY2NTE3MDk4Niw0ODQuNzg0MDM2MjcwNTIzNjQsNzg3Ljk0NjgyODcxMjIxNTMsNzYwLjMxMDY0NTA4MzgzNCwxMzMyLjA4MjM0Mzk3MjU4NjQsMzAuNTU3OTExMDAwNTY0NDA2LDguNjMwMTMyNDI3NTI2OTUKKzI2LFNhdCAxOSBGZWIgMTEsMC44NTcwOTYzNTYyODg1ODI2LDAuMjkxMzAzOTkyNTcxMTMwNDMsMi42NjY3MTgwMzMyNjgxMTMsMS4wMDE2ODE3MTA2NjU2MjEzLDUuODMxMjQ0MDI0MjEyMTc4LDIxNC40Mjg1OTYzMTQ3Mzk0LDc1My4yNDMxNzIyMjIxNDY4LDExOTEuNjc5NzUzMzE4MTQ4NiwxMzU5LjU5Nzk1OTQ3OTMxNDYsMjY3MC4yNzAwMzI3NDcyOTIsOTAuMTU1OTI2MjgzNTEyNDksNTcwLjAxNzUwOTczMDU4MjksNzkwLjMzNTQxMDE1NzI5NzUsNDE2LjI3MjYwNDg4MjYyOTU0LDIyMi4xNjgzNDA5MTQzMTU0Miw4NS4xNzE1ODIzMTIwOTQ2NywxMTYuMjk1MDk0ODM3NTI4OSw0MC41MzU1NDg1NjIwNTM5Nyw3NzIuNzY1ODc0Mjc5MDUwOSwyNTMuODI5MzkwNDgwODQ2NSw0ODQuNzg0NTIxMDU0NTU5OSw3ODcuOTQ3NjE2NjU5MDQ0LDc2MC4zMTE0MDUzOTQ0NzksMTMzMi4wODM2NzYwNTQ5MzAzLDMwLjU1Nzk0MTU1ODQ3NTQxLDguNjMwMTQxMDU3NjU5Mzc4CisyNyxTdW4gMjAgRmViIDExLDAuODU3MDk3MjEzMzg0OTM4OCwwLjI5MTMwNDI4Mzg3NTEyMywyLjY2NjcyMDY5OTk4NjE0NiwxLjAwMTY4MjcxMjM0NzMzMiw1LjgzMTI0OTg1NTQ1NjIwMiwyMTQuNDI4ODEwNzQzMzM1Nyw3NTMuMjQzOTI1NDY1MzE5LDExOTEuNjgwOTQ0OTk3OTAyLDEzNTkuNTk5MzE5MDc3Mjc0LDI2NzAuMjcyNzAzMDE3MzI1LDkwLjE1NjAxNjQzOTQzODc3LDU3MC4wMTgwNzk3NDgwOTI2LDc5MC4zMzYyMDA0OTI3MDc2LDQxNi4yNzMwMjExNTUyMzQ0LDIyMi4xNjg1NjMwODI2NTYzMyw4NS4xNzE2Njc0ODM2NzY5OCwxMTYuMjk1MjExMTMyNjIzNzMsNDAuNTM1NTg5MDk3NjAyNTMsNzcyLjc2NjY0NzA0NDkyNTEsMjUzLjgyOTY0NDMxMDIzNyw0ODQuNzg1MDA1ODM5MDgwOTUsNzg3Ljk0ODQwNDYwNjY2MDYsNzYwLjMxMjE2NTcwNTg4NDUsMTMzMi4wODUwMDgxMzg2MDYzLDMwLjU1Nzk3MjExNjQxNjk3LDguNjMwMTQ5Njg3ODAwNDM2CisyOCxNb24gMjEgRmViIDExLDAuODU3MDk4MDcwNDgyMTUyMywwLjI5MTMwNDU3NTE3OTQwNjksMi42NjY3MjMzNjY3MDY4NDYsMS4wMDE2ODM3MTQwMzAwNDQzLDUuODMxMjU1Njg2NzA2MDU4LDIxNC40MjkwMjUxNzIxNDY0NSw3NTMuMjQ0Njc4NzA5MjQ0NSwxMTkxLjY4MjEzNjY3ODg0NywxMzU5LjYwMDY3ODY3NjU5MzEsMjY3MC4yNzUzNzMyOTAwMjgzLDkwLjE1NjEwNjU5NTQ1NTIxLDU3MC4wMTg2NDk3NjYxNzI0LDc5MC4zMzY5OTA4Mjg5MDgsNDE2LjI3MzQzNzQyODI1NTUzLDIyMi4xNjg3ODUyNTEyMTk0Miw4NS4xNzE3NTI2NTUzNDQ0NiwxMTYuMjk1MzI3NDI3ODM0ODYsNDAuNTM1NjI5NjMzMTkxNjMsNzcyLjc2NzQxOTgxMTU3MjIsMjUzLjgyOTg5ODEzOTg4MTMyLDQ4NC43ODU0OTA2MjQwODY4LDc4Ny45NDkxOTI1NTUwNjUxLDc2MC4zMTI5MjYwMTgwNTAxLDEzMzIuMDg2MzQwMjIzNjE0NiwzMC41NTgwMDI2NzQzODkwODMsOC42MzAxNTgzMTc5NTAxMjMKKzI5LFR1ZSAyMiBGZWIgMTEsMC44NTcwOTg5Mjc1ODAyMjI4LDAuMjkxMzA0ODY2NDgzOTgyMTMsMi42NjY3MjYwMzM0MzAyMTMsMS4wMDE2ODQ3MTU3MTM3NTgzLDUuODMxMjYxNTE3OTYxNzQ0LDIxNC40MjkyMzk2MDExNzE2NCw3NTMuMjQ1NDMxOTUzOTIzMiwxMTkxLjY4MzMyODM2MDk4MzgsMTM1OS42MDIwMzgyNzcyNzE3LDI2NzAuMjc4MDQzNTY1NDAxNyw5MC4xNTYxOTY3NTE1NjE4MSw1NzAuMDE5MjE5Nzg0ODIyMiw3OTAuMzM3NzgxMTY1ODk4Nyw0MTYuMjczODUzNzAxNjkzLDIyMi4xNjkwMDc0MjAwMDQ2OCw4NS4xNzE4Mzc4MjcwOTcxMSwxMTYuMjk1NDQzNzIzMTYyMjgsNDAuNTM1NjcwMTY4ODIxMjcsNzcyLjc2ODE5MjU3ODk5MiwyNTMuODMwMTUxOTY5Nzc5NDUsNDg0Ljc4NTk3NTQwOTU3NzM2LDc4Ny45NDk5ODA1MDQyNTc3LDc2MC4zMTM2ODYzMzA5NzYxLDEzMzIuMDg3NjcyMzA5OTU0OCwzMC41NTgwMzMyMzIzOTE3NTcsOC42MzAxNjY5NDgxMDg0NDIKKzMwLFdlZCAyMyBGZWIgMTEsMC44NTcwOTk3ODQ2NzkxNTA0LDAuMjkxMzA1MTU3Nzg4ODQ4NiwyLjY2NjcyODcwMDE1NjI0NjMsMS4wMDE2ODU3MTczOTg0NzQxLDUuODMxMjY3MzQ5MjIzMjYzLDIxNC40Mjk0NTQwMzA0MTEyNSw3NTMuMjQ2MTg1MTk5MzU1MiwxMTkxLjY4NDUyMDA0NDMxMiwxMzU5LjYwMzM5Nzg3OTMxLDI2NzAuMjgwNzEzODQzNDQ1LDkwLjE1NjI4NjkwNzc1ODU2LDU3MC4wMTk3ODk4MDQwNDIsNzkwLjMzODU3MTUwMzY3OTksNDE2LjI3NDI2OTk3NTU0NjcsMjIyLjE2OTIyOTU4OTAxMjA4LDg1LjE3MTkyMjk5ODkzNDk1LDExNi4yOTU1NjAwMTg2MDYsNDAuNTM1NzEwNzA0NDkxNDM2LDc3Mi43Njg5NjUzNDcxODQ2LDI1My44MzA0MDU3OTk5MzE0LDQ4NC43ODY0NjAxOTU1NTI4LDc4Ny45NTA3Njg0NTQyMzgyLDc2MC4zMTQ0NDY2NDQ2NjI0LDEzMzIuMDg5MDA0Mzk3NjI3MSwzMC41NTgwNjM3OTA0MjQ5OSw4LjYzMDE3NTU3ODI3NTM5CiszMSxUaHUgMjQgRmViIDExLDAuODU3MTAwNjQxNzc4OTM1LDAuMjkxMzA1NDQ5MDk0MDA2MzUsMi42NjY3MzEzNjY4ODQ5NDY0LDEuMDAxNjg2NzE5MDg0MTkxNiw1LjgzMTI3MzE4MDQ5MDYxMiwyMTQuNDI5NjY4NDU5ODY1MjcsNzUzLjI0NjkzODQ0NTU0MDMsMTE5MS42ODU3MTE3Mjg4MzIsMTM1OS42MDQ3NTc0ODI3MDc4LDI2NzAuMjgzMzg0MTI0MTU4Niw5MC4xNTYzNzcwNjQwNDU0Nyw1NzAuMDIwMzU5ODIzODMxOCw3OTAuMzM5MzYxODQyMjUxNCw0MTYuMjc0Njg2MjQ5ODE2NywyMjIuMTY5NDUxNzU4MjQxNjgsODUuMTcyMDA4MTcwODU3OTQsMTE2LjI5NTY3NjMxNDE2NjAyLDQwLjUzNTc1MTI0MDIwMjE0LDc3Mi43Njk3MzgxMTYxNDk4LDI1My44MzA2NTk2MzAzMzcyLDQ4NC43ODY5NDQ5ODIwMTMsNzg3Ljk1MTU1NjQwNTAwNjYsNzYwLjMxNTIwNjk1OTEwOSwxMzMyLjA5MDMzNjQ4NjYzMTcsMzAuNTU4MDk0MzQ4NDg4NzgsOC42MzAxODQyMDg0NTA5NjgKKzMyLEZyaSAyNSBGZWIgMTEsMC44NTcxMDE0OTg4Nzk1NzY5LDAuMjkxMzA1NzQwMzk5NDU1NDUsMi42NjY3MzQwMzM2MTYzMTMyLDEuMDAxNjg3NzIwNzcwOTEwNyw1LjgzMTI3OTAxMTc2Mzc5MywyMTQuNDI5ODgyODg5NTMzNzYsNzUzLjI0NzY5MTY5MjQ3ODcsMTE5MS42ODY5MDM0MTQ1NDM4LDEzNTkuNjA2MTE3MDg3NDY1MiwyNjcwLjI4NjA1NDQwNzU0Myw5MC4xNTY0NjcyMjA0MjI1Myw1NzAuMDIwOTI5ODQ0MTkxNiw3OTAuMzQwMTUyMTgxNjEzMSw0MTYuMjc1MTAyNTI0NTAyODcsMjIyLjE2OTY3MzkyNzY5MzQyLDg1LjE3MjA5MzM0Mjg2NjEsMTE2LjI5NTc5MjYwOTg0MjM0LDQwLjUzNTc5MTc3NTk1MzM4LDc3Mi43NzA1MTA4ODU4ODgsMjUzLjgzMDkxMzQ2MDk5Njg3LDQ4NC43ODc0Mjk3Njg5NTc5Niw3ODcuOTUyMzQ0MzU2NTYyOSw3NjAuMzE1OTY3Mjc0MzE2LDEzMzIuMDkxNjY4NTc2OTY4MiwzMC41NTgxMjQ5MDY1ODMxMjgsOC42MzAxOTI4Mzg2MzUxNzYKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvRGVtb2dyYXBoaWNTRUlSRGlzZWFzZV9GRF9SZWZlcmVuY2UvRGVtb2dyYXBoaWNNb2RlbC9ydW5wYXJhbWV0ZXJzLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvRGVtb2dyYXBoaWNTRUlSRGlzZWFzZV9GRF9SZWZlcmVuY2UvRGVtb2dyYXBoaWNNb2RlbC9ydW5wYXJhbWV0ZXJzLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYzE5ZTFjCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9EZW1vZ3JhcGhpY1NFSVJEaXNlYXNlX0ZEX1JlZmVyZW5jZS9EZW1vZ3JhcGhpY01vZGVsL3J1bnBhcmFtZXRlcnMuY3N2CkBAIC0wLDAgKzEsMiBAQAorcG9wdWxhdGlvbklkZW50aWZpZXIsbmFtZSx0YXJnZXRJU09LZXksYmlydGhSYXRlLGRlYXRoUmF0ZSx0aW1lUGVyaW9kLHBvcHVsYXRpb25Hcm91cHMKK2h1bWFuLERlbW9ncmFwaGljTW9kZWwsLDQuMEUtNSwzLjlFLTUsODY0MDAwMDAsW29yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5pbXBsLlBvcHVsYXRpb25Hcm91cEltcGxANWVmNGI2NWQgKGlkZW50aWZpZXI6IG1lbiAgZnJhY3Rpb246IDAuNSkgIG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5pbXBsLlBvcHVsYXRpb25Hcm91cEltcGxAMTNmMGM0NWYgKGlkZW50aWZpZXI6IHdvbWVuICBmcmFjdGlvbjogMC41KV0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0RlbW9ncmFwaGljU0VJUkRpc2Vhc2VfRkRfUmVmZXJlbmNlL0RlbW9ncmFwaGljTW9kZWwvd29tZW4vQmlydGhzXzIuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9EZW1vZ3JhcGhpY1NFSVJEaXNlYXNlX0ZEX1JlZmVyZW5jZS9EZW1vZ3JhcGhpY01vZGVsL3dvbWVuL0JpcnRoc18yLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zOWI5NGFkCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9EZW1vZ3JhcGhpY1NFSVJEaXNlYXNlX0ZEX1JlZmVyZW5jZS9EZW1vZ3JhcGhpY01vZGVsL3dvbWVuL0JpcnRoc18yLmNzdgpAQCAtMCwwICsxLDMzIEBACitpdGVyYXRpb24sdGltZSxFRy1GUkctRzIxMDAwMSxFRy1GUkctRzIxMDAwMixFRy1GUkctRzIxMDAwMyxFRy1GUkctRzIxMDAwNCxFRy1GUkctRzIxMDAwNSxFRy1MT0UtRzI0MDAwMSxFRy1MT0UtRzI0MDAwMixFRy1MT0UtRzI0MDAwMyxFRy1MT0UtRzI0MDAwNCxFRy1MT0UtRzI0MDAwNSxFRy1MT0UtRzI0MDAwNixFRy1MT0UtRzI0MDAwNyxFRy1MT0UtRzI0MDAwOCxFRy1MT0UtRzI0MDAwOSxFRy1VUEUtRzI5MDAwMSxFRy1VUEUtRzI5MDAwMixFRy1VUEUtRzI5MDAwMyxFRy1VUEUtRzI5MDAwNCxFRy1VUEUtRzI5MDAwNSxFRy1VUEUtRzI5MDAwNixFRy1VUEUtRzI5MDAwNyxFRy1VUEUtRzI5MDAwOCxFRy1VUkctRzMwMDAwMSxFRy1VUkctRzMwMDAwMixFRy1VUkctRzMwMDAwMyxFRy1VUkctRzMwMDAwNAorMSxUdWUgMjUgSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzIsV2VkIDI2IEphbiAxMSw1LjkxMjI2NzQxOTcxOTg2Myw1LjI3ODc5MTU5MDgwMjgzNSwzLjA3MjY4NjM2OTgwNDU5MSw2LjM1MjA0OTgzOTAyOTcwMiw2LjQwMjgwMjQ0MTM0MDE0MSwxMDMuNTAzODExMjQzNTYyNzgsMTEyLjQ3NzQ4NDQ1MDczMzk4LDkyLjE4NjA0MTAzODAxLDgwLjA3Mjg3OTU3NTQ4MjI4LDEwMC4xMTEyNjEyNTYxOTY0NywyMC4zMjk2NTMxMjk1MDQ4ODcsMTE4Ljg0MzM5OTU4ODE0NDU5LDIzLjUxOTc5MzgwNDM4MDA3LDYyLjQzNTk5OTYzMjgzMzYxNCw1NS44MDY0MDMzODc0ODU2NCwxMjguMTA4NDg0NTAwMDE0OTgsOTIuODA5NTM4NjYwODY2NzgsMjYuMTAxNDg0MzExNzIyMjQsNzUuOTY3MTY4MzY2NjI1NDYsNTAuNTkyMDA5Mjk1MjMyMjQ1LDc0Ljc0MDI2OTc4ODk0MDg2LDgyLjk5NzE3NTE5NDExNzg2LDczLjgzMzUxNTM0MDYzNDkzLDE2OC4zMDE5MDA3MDQxNzk4LDEwLjczMjkwMzA2NzIwMjMzLDAuMTM0Mzg1MTk2ODc5NjM0CiszLFRodSAyNyBKYW4gMTEsMTEuODI0NTQwNzUxNzA3MTQ3LDEwLjU1NzU4ODQ2MDM5NzI2Myw2LjE0NTM3NTgxMjI5NTU1MiwxMi43MDQxMDYwMzAxMDkyNCwxMi44MDU2MTEyODU0ODI3MjMsMjA3LjAwNzcyNTk5MDkzNjgyLDIyNC45NTUwODEzNzg5NTI0MywxODQuMzcyMTc0MjYyMDYxMDQsMTYwLjE0NTgzOTIyMzg0NDEyLDIwMC4yMjI2MjI2MjM2NTQyLDQwLjY1OTMyNjU4ODY2MjkxLDIzNy42ODY5MTgwMTk2ODg4LDQ3LjAzOTYxMTEyODU1Mzk0LDEyNC44NzIwNjE3MDE2NjY4NywxMTEuNjEyODYyNTgxMzc0NjYsMjU2LjIxNzA5NzEwODUxNDQ1LDE4NS42MTkxNzAxMzEyNzIyLDUyLjIwMjk5NDcyNDkyODc4NiwxNTEuOTM0NDEyNzAwNDE5MjcsMTAxLjE4NDA2OTE4MjQ3Mzc5LDE0OS40ODA2MTQzMTgxNTE1LDE2NS45OTQ0MzMzODU0MTA5LDE0Ny42NjcxMDQ1MTQ3ODUyLDMzNi42MDM5Njk3MTAyNjAzLDIxLjQ2NTgxNjg2NzMwNzcyMywwLjI2ODc3MDUyODE0NDQ2NDkKKzQsRnJpIDI4IEphbiAxMSwxNy43MzY4MTk5OTU5Njc3NjQsMTUuODM2MzkwNjA4Nzg4NTU5LDkuMjE4MDY4MzI3NDc1OTU2LDE5LjA1NjE2ODU3MzI0NDk3NSwxOS4yMDg0MjY1MzI0MzQxNSwzMTAuNTExNzQ0MjQyMjI1NjMsMzM3LjQzMjc5MDc4NDc2NzgsMjc2LjU1ODM5OTY3MjI0NTMsMjQwLjIxODg3ODk0NTE2NTYsMzAwLjMzNDA4NDEwMjQ3MzMsNjAuOTg5MDIwMzc3NDk0Mzg0LDM1Ni41MzA1NTUyOTQ3NTE0LDcwLjU1OTQ1MTk3MjU0NTEzLDE4Ny4zMDgxODYyMDY1NjIyLDE2Ny40MTkzNzc1ODE3MjI4NywzODQuMzI1ODM3ODI1NjI2NTQsMjc4LjQyODg5NDQxMTMwOTEsNzguMzA0NTMxMjM5NjQ1NzUsMjI3LjkwMTczMzAwMTQ1NzQ0LDE1MS43NzYxNzk2NjE3NzUyMiwyMjQuMjIxMDMzNTg3NzA2NywyNDguOTkxNzc0NTczOTYyMTUsMjIxLjUwMDc2NzUyMjUyNDY1LDUwNC45MDYyMDcwMTg0MDk3NiwzMi4xOTg3NDE0MDAzMjY5MiwwLjQwMzE1NTk5Mzc5NDYyNzEKKzUsU2F0IDI5IEphbiAxMSwyMy42NDkxMDUxNTI1MDc2MjMsMjEuMTE1MTk4MDM1OTgyMDA0LDEyLjI5MDc2MzkxNTM0ODg3NiwyNS40MDgyMzc0Njg0NDMyNSwyNS42MTEyNDgxODIyMDA4MjUsNDE0LjAxNTg2NTk5NzUzMjY3LDQ0OS45MTA2MTI2NjgyOTI2LDM2OC43NDQ3MTcyNjg2NTUsMzIwLjI5MTk5ODczOTUyNjgzLDQwMC40NDU2NDU2OTI3NTM5LDgxLjMxODczNDQ5NjAxOTY2LDQ3NS4zNzQzMTE0MTM0NTEzLDk0LjA3OTMxNjMzNjM3NzE4LDI0OS43NDQzNzMxNDc1ODIwMiwyMjMuMjI1OTQ4Mzg4NTg2MSw1MTIuNDM0NzA2NjUxNDc5NCwzNzEuMjM4NzExNTAxMDcwMjcsMTA0LjQwNjA5Mzg1NTg5OTIzLDMwMy44NjkxMjkyNjk4MTU5LDIwMi4zNjgzNDA3MzMxODcxMywyOTguOTYxNTI3NTk3NjgxMTQsMzMxLjk4OTE5ODc1OTg1NDU2LDI5NS4zMzQ1MDQzNjM5MjcxLDY3My4yMDg2MTI2Mjg3OTY2LDQyLjkzMTY3NjY2NjI3MDY1LDAuNTM3NTQxNTkzODMwMjU0OQorNixTdW4gMzAgSmFuIDExLDI5LjU2MTM5NjIyMTMzMjY0LDI2LjM5NDAxMDc0MTk4Mjg3NSwxNS4zNjM0NjI1NzU5MTczODIsMzEuNzYwMzEyNzE1NzEwNDIsMzIuMDE0MDc2MjM0Nzg5MTUsNTE3LjUyMDA5MTI1Njk2MTUsNTYyLjM4ODU0NzAyOTYzOTIsNDYwLjkzMTEyNzA1MTM4MjMsNDAwLjM2NTE5ODYwNzAwNzg3LDUwMC41NTczMDczOTQ1OTYsMTAxLjY0ODQ2ODk0NDI1OTA0LDU5NC4yMTgxODYzNzU5MDczLDExNy41OTkyMDQyMjAwNzM1NywzMTIuMTgwNjIyNTI0Nzg4NzYsMjc5LjAzMjU3NTAwMjAyMDEsNjQwLjU0MzcwMzU4NjIwMSw0NjQuMDQ4NjIxNDAwNjQ4NSwxMzAuNTA3NjgyNTczNzE1MzMsMzc5LjgzNjYwMTUwNTU3MDcsMjUyLjk2MDU1MjM5Njc2MDEsMzczLjcwMjA5NjM0ODE0OTYsNDE0Ljk4NjcwNTk0MzE3MTE2LDM2OS4xNjgzMTUwMzkwNjY0NCw4NDEuNTExMTg2NTQxNTg5LDUzLjY2NDYyMjY2NTE0OTY0LDAuNjcxOTI3MzI4MjUxNDgyNworNyxNb24gMzEgSmFuIDExLDM1LjQ3MzY5MzIwMjQ0ODcyLDMxLjY3MjgyODcyNjc5NjQ1MywxOC40MzYxNjQzMDkxODQ1NDgsMzguMTEyMzk0MzE1MDUyODQsMzguNDE2OTEwNjkwMjA1NTI2LDYyMS4wMjQ0MjAwMjA2MTU1LDY3NC44NjY1OTM4Njg5MjAyLDU1My4xMTc2MjkwMjA1MTk0LDQ4MC40Mzg0Nzg1NDc2ODg3Niw2MDAuNjY5MDY5MjA4MDk5OSwxMjEuOTc4MjIzNzIyMjMyODcsNzEzLjA2MjE4MDE4MjIzODMsMTQxLjExOTExNTYyMzY1Nzg4LDM3NC42MTY5MzQzMzgyNDQ5LDMzNC44MzkyNTc0MjIwODA4LDc2OC42NTI4Mjg2Mjk5MTk2LDU1Ni44NTg2MjQxMTAxMzY3LDE1Ni42MDkyOTczOTMxMjAxMyw0NTUuODA0MTQ5NzA4Nzk3NjQsMzAzLjU1MjgxNDY1MjU0NDcsNDQ4LjQ0MjczOTgzOTE4NjgsNDk3Ljk4NDI5NjEyMzk5NDk3LDQ0My4wMDIxOTk1NDgwMTY0LDEwMDkuODEzOTI4NzU2OTU1NCw2NC4zOTc1NzkzOTY5NzQ2MywwLjgwNjMxMzE5NzA1ODQ0NQorOCxUdWUgMSBGZWIgMTEsNDEuMzg1OTk2MDk1ODYxNzg1LDM2Ljk1MTY1MTk5MDQyODAxLDIxLjUwODg2OTExNTE1MzQ1LDQ0LjQ2NDQ4MjI2NjQ3Njg2LDQ0LjgxOTc1MTU0ODQ1NjM2LDcyNC41Mjg4NTIyODg1OTgzLDc4Ny4zNDQ3NTMxODYyNDgsNjQ1LjMwNDIyMzE3NjE1ODQsNTYwLjUxMTgzODU2MTY0OTYsNzAwLjc4MDkzMTEzMzM2NTYsMTQyLjMwNzk5ODgyOTk2MTUsODMxLjkwNjI5MjgzMjU2MywxNjQuNjM5MDUwNTQ3MTUzNTcsNDM3LjA1MzMwODU4ODAxMjg0LDM5MC42NDU5OTU2NDg4MjM4LDg5Ni43NjIwODE3ODI3NjMyLDY0OS42Njg3MTk2Mjk2Mjc2LDE4Mi43MTA5MzgzMTQxMzk3NSw1MzEuNzcxNzczODc5NTcyOCwzNTQuMTQ1MTI3NTAwNTkxNiw1MjMuMTgzNDU4MDcwODY3NSw1ODAuOTgxOTY5MzAyNDA5LDUxNi44MzYxNTc4OTA4NTA5LDExNzguMTE2ODM5Mjc1MDY0LDc1LjEzMDU0Njg2MTc1NjM2LDAuOTQwNjk5MjAwMjUxMjc2Cis5LFdlZCAyIEZlYiAxMSw0Ny4yOTgzMDQ5MDE1Nzc3NDQsNDIuMjMwNDgwNTMyODgyODQsMjQuNTgxNTc2OTkzODI3MTU2LDUwLjgxNjU3NjU2OTk4ODgyNSw1MS4yMjI1OTg4MDk1NDgwNSw4MjguMDMzMzg4MDYxMDEzMyw4OTkuODIzMDI0OTgxNzM1Miw3MzcuNDkwOTA5NTE4MzkxNiw2NDAuNTg1Mjc4NjQ4OTcwNCw4MDAuODkyODkzMTcwNDkzMiwxNjIuNjM3Nzk0MjY3NDY1Miw5NTAuNzUwNTI0MzI3MDAwNCwxODguMTU5MDA4OTkwNTg0Miw0OTkuNDg5NzQ1Mjc0MTU1MDQsNDQ2LjQ1Mjc4OTY4MjMwNTE0LDEwMjQuODcxNDYzMDQ0ODU5OSw3NDIuNDc4OTA3OTU5MjE0LDIwOC44MTI2MDUzMzY4MDAzMiw2MDcuNzM5NDc0MDE3OTcyMiw0MDQuNzM3NDkwOTQwOTUxNCw1OTcuOTI0MjUxMDQzMjY2NCw2NjMuOTc5NzI1NDc4NDk2MSw1OTAuNjcwMTkwMDY3NjQzNywxMzQ2LjQxOTkxODA5NjA4Myw4NS44NjM1MjUwNTk1MDU1NSwxLjA3NTA4NTMzNzgzMDExMDIKKzEwLFRodSAzIEZlYiAxMSw1My4yMTA2MTk2MTk2MDI1MSw0Ny41MDkzMTQzNTQxNjYyMSwyNy42NTQyODc5NDUyMDg3NDMsNTcuMTY4Njc3MjI1NTk1MSw1Ny42MjU0NTI0NzM0ODcwMSw5MzEuNTM4MDI3MzM3OTY0MiwxMDEyLjMwMTQwOTI1NTQ5NDEsODI5LjY3NzY4ODA0NzMxMTEsNzIwLjY1ODc5ODgwOTczMTQsOTAxLjAwNDk1NTMxOTU4MjgsMTgyLjk2NzYxMDAzNDc2NDM2LDEwNjkuNTk0ODc0NjY1NjY5MywyMTEuNjc4OTkwOTUzOTczMjUsNTYxLjkyNjI0NDM5NjczNCw1MDIuMjU5NjM5NTIyNTgwNDcsMTE1Mi45ODA5NzI0MTYzMzc5LDgzNS4yODkxODkwOTg5ODg3LDIzNC45MTQyOTg0NjExMjc4OCw2ODMuNzA3MjUwMTI0MDcxNiw0NTUuMzI5OTA0OTczNjc0NTYsNjcyLjY2NTExODc1NjQ1ODIsNzQ2Ljk3NzU2NDY1MjMzOTQsNjY0LjUwNDI5NjA3ODQ2ODgsMTUxNC43MjMxNjUyMjAxODA4LDk2LjU5NjUxMzk5MDIzMjk0LDEuMjA5NDcxNjA5Nzk1MDgyCisxMSxGcmkgNCBGZWIgMTEsNTkuMTIyOTQwMjQ5OTQxOTksNTIuNzg4MTUzNDU0MjgzMzk2LDMwLjcyNzAwMTk2OTMwMTI4LDYzLjUyMDc4NDIzMzMwMjAyNCw2NC4wMjgzMTI1NDAyNzk2MywxMDM1LjA0Mjc3MDExOTU1NDIsMTEyNC43Nzk5MDYwMDc2Mzc1LDkyMS44NjQ1NTg3NjMwMDkyLDgwMC43MzIzOTkwNDQwMTI1LDEwMDEuMTE3MTE3NTgwNzM0NSwyMDMuMjk3NDQ2MTMxODc5MywxMTg4LjQzOTM0Mzg0ODY4ODYsMjM1LjE5ODk5NjQzNzM0NDI4LDYyNC4zNjI4MDU5NTU4MTIsNTU4LjA2NjU0NTE2OTcwNTYsMTI4MS4wOTA2MDk4OTczMjUzLDkyOC4wOTk1NjMwNDkwNDQ1LDI2MS4wMTYwMTc2ODcxNDg2LDc1OS42NzUxMDIxOTc5NDcxLDUwNS45MjIzNjk1OTg4MTE3Nyw3NDcuNDA2MDYxMjEwNTE3OSw4MjkuOTc1NDg2ODI0MDIxOSw3MzguMzM4NDc1OTIzMzk5OCwxNjgzLjAyNjU4MDY0NzUyNTksMTA3LjMyOTUxMzY1Mzk0OTI1LDEuMzQzODU4MDE2MTQ2MzI1NgorMTIsU2F0IDUgRmViIDExLDY1LjAzNTI2Njc5MjYwMjEsNTguMDY2OTk3ODMzMjM5NjgsMzMuNzk5NzE5MDY2MTA3ODQsNjkuODcyODk3NTkzMTE1OTcsNzAuNDMxMTc5MDA5OTMyMzIsMTEzOC41NDc2MTY0MDU4ODcsMTIzNy4yNTg1MTUyMzgyNzc0LDEwMTQuMDUxNTIxNjY1NTc4LDg4MC44MDYwNzkzNTE4OTM4LDExMDEuMjI5Mzc5OTU0MDQ4NywyMjMuNjI3MzAyNTU4ODMwMywxMzA3LjI4MzkzMTg3NjE3NzEsMjU4LjcxOTAyNTQ0MDcyMDc3LDY4Ni43OTk0Mjk5NTE0NTE1LDYxMy44NzM1MDY2MjM3MzY0LDE0MDkuMjAwMzc1NDg3OTUwMiwxMDIwLjkxMDAyOTgwOTQ3NDMsMjg3LjExNzc2MzAxNDg4ODUsODM1LjY0MzAzMDIzOTY3NDgsNTU2LjUxNDg4NDgxNjQxMzcsODIyLjE0NzA3ODQwNTUyLDkxMi45NzM0OTE5OTM2MjY2LDgxMi4xNzI3Mjk2MDI1MTA2LDE4NTEuMzMwMTY0Mzc4Mjg2MywxMTguMDYyNTI0MDUwNjY1MjMsMS40NzgyNDQ1NTY4ODM5NzU3CisxMyxTdW4gNiBGZWIgMTEsNzAuOTQ3NTk5MjQ3NTg4NzYsNjMuMzQ1ODQ3NDkxMDQwMzUsMzYuODcyNDM5MjM1NjMxNSw3Ni4yMjUwMTczMDUwNDMyNyw3Ni44MzQwNTE4ODI0NTE0OCwxMjQyLjA1MjU2NjE5NzA2NjIsMTM0OS43MzcyMzY5NDc1MjY1LDExMDYuMjM4NTc2NzU1MTA5OCw5NjAuODc5ODM5NzMzNDU1NSwxMjAxLjM0MTc0MjQzOTYyNSwyNDMuOTU3MTc5MzE1NjM3NzUsMTQyNi4xMjg2Mzg3NDgyNTM3LDI4Mi4yMzkwNzc5NjQxMjYzLDc0OS4yMzYxMTYzODM3MTUxLDY2OS42ODA1MjM4ODQ3Mjg2LDE1MzcuMzEwMjY5MTg4MzQwNywxMTEzLjcyMDU4OTM4MDM3MSwzMTMuMjE5NTM0NDQ0MzczOCw5MTEuNjExMDM0MjQ5MzMwNSw2MDcuMTA3NDUwNjI2NTMwNyw4OTYuODg4MTcwMzQxNTM5Myw5OTUuOTcxNTgwMTYxMjM2NCw4ODYuMDA3MDU3MTE1ODc1MSwyMDE5LjYzMzkxNjQxMjYzMDUsMTI4Ljc5NTU0NTE4MDM5MTYsMS42MTI2MzEyMzIwMDgxNjY2CisxNCxNb24gNyBGZWIgMTEsNzYuODU5OTM3NjE0OTA3ODYsNjguNjI0NzAyNDI3NjkwNjgsMzkuOTQ1MTYyNDc3ODc1MzIsODIuNTc3MTQzMzY5MDkwMjgsODMuMjM2OTMxMTU3ODQzNSwxMzQ1LjU1NzYxOTQ5MzE5NTMsMTQ2Mi4yMTYwNzExMzU0OTc1LDExOTguNDI1NzI0MDMxNjk2NSwxMDQwLjk1MzY4MDE4ODc3NzUsMTMwMS40NTQyMDUwMzc1NjQsMjY0LjI4NzA3NjQwMjMyMTkzLDE1NDQuOTczNDY0NDY1MDM3LDMwNS43NTkxNTQwMDc1ODQzNiw4MTEuNjcyODY1MjUyNjY1LDcyNS40ODc1OTY5NTI3MzgyLDE2NjUuNDIwMjkwOTk4NjI1LDEyMDYuNTMxMjQxNzYxODI3LDMzOS4zMjEzMzE5NzU2MzA0Nyw5ODcuNTc5MTE0MjI2OTkwMiw2NTcuNzAwMDY3MDI5MjEzNiw5NzEuNjI5MzM3MDE4NjUwNSwxMDc4Ljk2OTc1MTMyNjkzNDMsOTU5Ljg0MTQ1ODQ2MzU2NzIsMjE4Ny45Mzc4MzY3NTA3MjY1LDEzOS41Mjg1NzcwNDMxMzkxLDEuNzQ3MDE4MDQxNTE5MDMyNgorMTUsVHVlIDggRmViIDExLDgyLjc3MjI4MTg5NDU2NTM0LDczLjkwMzU2MjY0MzE5NTk0LDQzLjAxNzg4ODc5Mjg0MjM5LDg4LjkyOTI3NTc4NTI2MzM2LDg5LjYzOTgxNjgzNjExNDgsMTQ0OS4wNjI3NzYyOTQzNzc1LDE1NzQuNjk1MDE3ODAyMzAyNiwxMjkwLjYxMjk2MzQ5NTQzMDQsMTEyMS4wMjc2MDA3MTc5NCwxNDAxLjU2Njc2Nzc0Nzk2NTUsMjg0LjYxNjk5MzgxODkwMzIsMTY2My44MTg0MDkwMjY2NDYxLDMyOS4yNzkyNTM1NzExMTg0Myw4NzQuMTA5Njc2NTU4MzYzOCw3ODEuMjk0NzI1ODI3ODIwOCwxNzkzLjUzMDQ0MDkxODkzMSwxMjk5LjM0MTk4Njk1MzkzNTUsMzY1LjQyMzE1NTYwODY4NDcsMTA2My41NDcyNzAxNzI3Myw3MDguMjkyNzM0MDI0NTEyOSwxMDQ2LjM3MDU3ODQzNjkyODMsMTE2MS45NjgwMDU0OTA4MDM1LDEwMzMuNjc1OTMzNjQ1NjYwNSwyMzU2LjI0MTkyNTM5Mjc0MzMsMTUwLjI2MTYxOTYzODkxODUsMS44ODE0MDQ5ODU0MTY3MDgKKzE2LFdlZCA5IEZlYiAxMSw4OC42ODQ2MzIwODY1NjcwOSw3OS4xODI0MjgxMzc1NjE0Miw0Ni4wOTA2MTgxODA1MzU3OCw5NS4yODE0MTQ1NTM1Njg4NSw5Ni4wNDI3MDg5MTcyNzE3OCwxNTUyLjU2ODAzNjYwMDcxNjYsMTY4Ny4xNzQwNzY5NDgwNTQzLDEzODIuODAwMjk1MTQ2NDAzOSwxMjAxLjEwMTYwMTMyMTAyMywxNTAxLjY3OTQzMDU3MDkyOTgsMzA0Ljk0NjkzMTU2NTQwMTk0LDE3ODIuNjYzNDcyNDMzMTk5OCwzNTIuNzk5Mzc2NjU0NzUyMDUsOTM2LjU0NjU1MDMwMDg3NDEsODM3LjEwMTkxMDUxMDAzMjIsMTkyMS42NDA3MTg5NDkzODY4LDEzOTIuMTUyODI0OTU2Nzg5MSwzOTEuNTI1MDA1MzQzNTYyNTUsMTEzOS41MTU1MDIwODY2MjU1LDc1OC44ODU0NTE2MTI0NzkyLDExMjEuMTExODk0NTk2NDQ3NywxMjQ0Ljk2NjM0MjY1MjkyNjksMTEwNy41MTA0ODI2NjIyMjkyLDI1MjQuNTQ2MTgyMzM4ODQ4NywxNjAuOTk0NjcyOTY3NzQwNDYsMi4wMTU3OTIwNjM3MDEzMjc2CisxNyxUaHUgMTAgRmViIDExLDk0LjU5Njk4ODE5MDkxOTAzLDg0LjQ2MTI5ODkxMDc5MjQsNDkuMTYzMzUwNjQwOTU4NTUsMTAxLjYzMzU1OTY3NDAxMzEsMTAyLjQ0NTYwNzQwMTMyMDg0LDE2NTYuMDczNDAwNDEyMzE2LDE3OTkuNjUzMjQ4NTcyODY1MywxNDc0Ljk4NzcxODk4NDcwOSwxMjgxLjE3NTY4MTk5ODEwNjcsMTYwMS43OTIxOTM1MDY1NTY3LDMyNS4yNzY4ODk2NDE4Mzg0LDE5MDEuNTA4NjU0Njg0ODE2NywzNzYuMzE5NTIzMjU4NTA4NzUsOTk4Ljk4MzQ4NjQ4MDI1OCw4OTIuOTA5MTUwOTk5NDI4MywyMDQ5Ljc1MTEyNTA5MDEyMDcsMTQ4NC45NjM3NTU3NzA0ODEsNDE3LjYyNjg4MTE4MDI5MDEsMTIxNS40ODM4MDk5Njg3NTMxLDgwOS40NzgyMTk3OTMxNjMsMTE5NS44NTMyODU0OTcyODMyLDEzMjcuOTY0NzYyODEzMzg3MywxMTgxLjM0NTEwNTUxMzM0NjcsMjY5Mi44NTA2MDc1ODkyMTEsMTcxLjcyNzczNzAyOTYxNTc1LDIuMTUwMTc5Mjc2MzczMDI1NAorMTgsRnJpIDExIEZlYiAxMSwxMDAuNTA5MzUwMjA3NjI3MSw4OS43NDAxNzQ5NjI4OTQxNCw1Mi4yMzYwODYxNzQxMTM3OCwxMDcuOTg1NzExMTQ2NjAyNDcsMTA4Ljg0ODUxMjI4ODI2ODQsMTc1OS41Nzg4Njc3MjkyNzkyLDE5MTIuMTMyNTMyNjc2ODQ3OSwxNTY3LjE3NTIzNTAxMDQzOCwxMzYxLjI0OTg0Mjc0OTI3MSwxNzAxLjkwNTA1NjU1NDk0NjcsMzQ1LjYwNjg2ODA0ODIzMjk3LDIwMjAuMzUzOTU1NzgxNjE2LDM5OS44Mzk2OTMzODI0MTIwNywxMDYxLjQyMDQ4NTA5NjU3OCw5NDguNzE2NDQ3Mjk2MDY1LDIxNzcuODYxNjU5MzQxMjYwNywxNTc3Ljc3NDc3OTM5NTEwMzUsNDQzLjcyODc4MzExODg5MzU1LDEyOTEuNDUyMTkzODE5MTg4Niw4NjAuMDcxMDM4NTY2NjE1LDEyNzAuNTk0NzUxMTM5NTA5NSwxNDEwLjk2MzI2NTk3MjI2OCwxMjU1LjE3OTgwMjE5OTA4NzEsMjg2MS4xNTUyMDExNDM5OTg1LDE4Mi40NjA4MTE4MjQ1NTUxMiwyLjI4NDU2NjYyMzQzMTkzNTcKKzE5LFNhdCAxMiBGZWIgMTEsMTA2LjQyMTcxODEzNjY5NzE3LDk1LjAxOTA1NjI5Mzg3MTk0LDU1LjMwODgyNDc4MDAwNDU0LDExNC4zMzc4Njg5NzEzNDMzMSwxMTUuMjUxNDIzNTc4MTIwODQsMTg2My4wODQ0Mzg1NTE3MDk4LDIwMjQuNjExOTI5MjYwMTE0NSwxNjU5LjM2Mjg0MzIyMzY4MywxNDQxLjMyNDA4MzU3NDU5NiwxODAyLjAxODAxOTcxNjE5OTcsMzY1LjkzNjg2Njc4NDYwNTksMjEzOS4xOTkzNzU3MjM3MTY1LDQyMy4zNTk4ODcwMjY0ODU1LDExMjMuODU3NTQ2MTQ5ODk2NywxMDA0LjUyMzc5OTM5OTk5NzksMjMwNS45NzIzMjE3MDI5MzUsMTY3MC41ODU4OTU4MzA3NDk3LDQ2OS44MzA3MTExNTkzOTg5LDEzNjcuNDIwNjUzNjM4MDA4LDkxMC42NjM5MDc5MzI4ODU5LDEzNDUuMzM2MjkxNTIzMjAxNSwxNDkzLjk2MTg1MjEyOTY1MTgsMTMyOS4wMTQ1NzI3MTk1MjQzLDMwMjkuNDU5OTYzMDAzMzc5NSwxOTMuMTkzODk3MzUyNTY5MjgsMi40MTg5NTQxMDQ4NzgxOTMKKzIwLFN1biAxMyBGZWIgMTEsMTEyLjMzNDA5MTk3ODEzNTE2LDEwMC4yOTc5NDI5MDM3MzEwNyw1OC4zODE1NjY0NTg2MzM5MSwxMjAuNjkwMDMzMTQ4MjQxOTgsMTIxLjY1NDM0MTI3MDg4NDU2LDE5NjYuNTkwMTEyODc5NzExMSwyMTM3LjA5MTQzODMyMjc3OCwxNzUxLjU1MDU0MzYyNDUzNjIsMTUyMS4zOTg0MDQ0NzQxNjIsMTkwMi4xMzEwODI5OTA0MTYsMzg2LjI2Njg4NTg1MDk3NzYsMjI1OC4wNDQ5MTQ1MTEyMzY2LDQ0Ni44ODAxMDQxOTA3NTI2LDExODYuMjk0NjY5NjQwMjc2NCwxMDYwLjMzMTIwNzMxMTI4MywyNDM0LjA4MzExMjE3NTI3MTcsMTc2My4zOTcxMDUwNzc1MTIyLDQ5NS45MzI2NjUzMDE4MzIzLDE0NDMuMzg5MTg5NDI1Mjg3LDk2MS4yNTY4Mjc4OTIwMjYxLDE0MjAuMDc3OTA2NjQ4NDMzOCwxNTc2Ljk2MDUyMTI4NTYyMTgsMTQwMi44NDk0MTcwNzQ3MzIsMzE5Ny43NjQ4OTMxNjc1MjIsMjAzLjkyNjk5MzYxMzY2ODk3LDIuNTUzMzQxNzIwNzExOTMyCisyMSxNb24gMTQgRmViIDExLDExOC4yNDY0NzE3MzE5NDcsMTA1LjU3NjgzNDc5MjQ3NjgsNjEuNDU0MzExMjEwMDA0OTYsMTI3LjA0MjIwMzY3NzMwNDgzLDEyOC4wNTcyNjUzNjY1NjU5OSwyMDcwLjA5NTg5MDcxMzM4NywyMjQ5LjU3MTA1OTg2NDk1MDMsMTg0My43MzgzMzYyMTMwOSwxNjAxLjQ3MjgwNTQ0ODA0ODYsMjAwMi4yNDQyNDYzNzc2OTU0LDQwNi41OTY5MjUyNDczNjgzNSwyMzc2Ljg5MDU3MjE0NDI5NTcsNDcwLjQwMDM0NDg3NTIzNjg0LDEyNDguNzMxODU1NTY3Nzc5NiwxMTE2LjEzODY3MTAyOTk3NiwyNTYyLjE5NDAzMDc1ODM5OSwxODU2LjIwODQwNzEzNTQ4MzksNTIyLjAzNDY0NTU0NjIxOTgsMTUxOS4zNTc4MDExODExMDE5LDEwMTEuODQ5Nzk4NDQ0MDg2MiwxNDk0LjgxOTU5NjUxNTI4MTMsMTY1OS45NTkyNzM0NDAyNjA5LDE0NzYuNjg0MzM1MjY0NzgzOCwzMzY2LjA2OTk5MTYzNjU5NSwyMTQuNjYwMTAwNjA3ODY0OSwyLjY4NzcyOTQ3MDkzMzI4NjYKKzIyLFR1ZSAxNSBGZWIgMTEsMTI0LjE1ODg1NzM5ODEzODYsMTEwLjg1NTczMTk2MDExNDQzLDY0LjUyNzA1OTAzNDEyMDc3LDEzMy4zOTQzODA1NTg1MzgyMiwxMzQuNDYwMTk1ODY1MTcxNSwyMTczLjYwMTc3MjA1Mjg0MDMsMjM2Mi4wNTA3OTM4ODY3NDQsMTkzNS45MjYyMjA5ODk0MzYyLDE2ODEuNTQ3Mjg2NDk2MzM2MywyMTAyLjM1NzUwOTg3ODEzODQsNDI2LjkyNjk4NDk3Mzc5ODUsMjQ5NS43MzYzNDg2MjMwMTI0LDQ5My45MjA2MDkwNzk5NjE3NiwxMzExLjE2OTEwMzkzMjQ2ODcsMTE3MS45NDYxOTA1NTYxMzI3LDI2OTAuMzA1MDc3NDUyNDQ1LDE5NDkuMDE5ODAyMDA0NzU3OCw1NDguMTM2NjUxODkyNTg3NywxNTk1LjMyNjQ4ODkwNTUyODUsMTA2Mi40NDI4MTk1ODkxMTY5LDE1NjkuNTYxMzYxMTIzODE4NiwxNzQyLjk1ODEwODU5MzY1MjIsMTU1MC41MTkzMjcyODk3NTQsMzUzNC4zNzUyNTg0MTA3NjY1LDIyNS4zOTMyMTgzMzUxNjc4MywyLjgyMjExNzM1NTU0MjM5MTUKKzIzLFdlZCAxNiBGZWIgMTEsMTMwLjA3MTI0ODk3NjcxNTg1LDExNi4xMzQ2MzQ0MDY2NDkyMyw2Ny41OTk4MDk5MzA5ODQzOSwxMzkuNzQ2NTYzNzkxOTQ4NSwxNDAuODYzMTMyNzY2NzA3NSwyMjc3LjEwNzc1Njg5ODE3NSwyNDc0LjUzMDY0MDM4ODI3MiwyMDI4LjExNDE5Nzk1MzY2NzEsMTc2MS42MjE4NDc2MTkxMDUsMjIwMi40NzA4NzM0OTE4NDUsNDQ3LjI1NzA2NTAzMDI4ODM1LDI2MTQuNTgyMjQzOTQ3NTA1NSw1MTcuNDQwODk2ODA0OTUxLDEzNzMuNjA2NDE0NzM0NDA2MSwxMjI3Ljc1Mzc2NTg4OTgwODgsMjgxOC40MTYyNTIyNTc1Mzc1LDIwNDEuODMxMjg5Njg1NDI2Niw1NzQuMjM4Njg0MzQwOTYxOCwxNjcxLjI5NTI1MjU5ODY0MywxMTEzLjAzNTg5MTMyNzE2ODcsMTY0NC4zMDMyMDA0NzQxMjA2LDE4MjUuOTU3MDI2NzQ1ODc4NywxNjI0LjM1NDM5MzE0OTcxNjMsMzcwMi42ODA2OTM0OTAyMDQ3LDIzNi4xMjYzNDY3OTU1ODg1LDIuOTU2NTA1Mzc0NTM5MzgxMgorMjQsVGh1IDE3IEZlYiAxMSwxMzUuOTgzNjQ2NDY3Njg0NjgsMTIxLjQxMzU0MjEzMjA4NjQ2LDcwLjY3MjU2MzkwMDU5ODkyLDE0Ni4wOTg3NTMzNzc1NDE5OCwxNDcuMjY2MDc2MDcxMTgwNDQsMjM4MC42MTM4NDUyNDk0OTQ3LDI1ODcuMDEwNTk5MzY5NjQ2LDIxMjAuMzAyMjY3MTA1ODc1LDE4NDEuNjk2NDg4ODE2NDM0OCwyMzAyLjU4NDMzNzIxODkxNDcsNDY3LjU4NzE2NTQxNjg1ODMsMjczMy40MjgyNTgxMTc4OTQsNTQwLjk2MTIwODA1MDIyNzgsMTQzNi4wNDM3ODc5NzM2NTQ0LDEyODMuNTYxMzk3MDMxMDYwMywyOTQ2LjUyNzU1NTE3MzgwNSwyMTM0LjY0Mjg3MDE3NzU4Myw2MDAuMzQwNzQyODkxMzY4MywxNzQ3LjI2NDA5MjI2MDUyMSwxMTYzLjYyOTAxMzY1ODI5MjMsMTcxOS4wNDUxMTQ1NjYyNjE5LDE5MDguOTU2MDI3ODk3MDIzMiwxNjk4LjE4OTUzMjg0NDc0NDUsMzg3MC45ODYyOTY4NzUwNzgsMjQ2Ljg1OTQ4NTk4OTEzNzYyLDMuMDkwODkzNTI3OTI0MzkKKzI1LEZyaSAxOCBGZWIgMTEsMTQxLjg5NjA0OTg3MTA1MTAyLDEyNi42OTI0NTUxMzY0MzE0Myw3My43NDUzMjA5NDI5Njc0MSwxNTIuNDUwOTQ5MzE1MzI1MDYsMTUzLjY2OTAyNTc3ODU5NjY1LDI0ODQuMTIwMDM3MTA2OTAyNiwyNjk5LjQ5MDY3MDgzMDk3OTUsMjIxMi40OTA0Mjg0NDYxNTIyLDE5MjEuNzcxMjEwMDg4NDA2LDI0MDIuNjk3OTAxMDU5NDQ4LDQ4Ny45MTcyODYxMzM1Mjg2LDI4NTIuMjc0MzkxMTM0Mjk3LDU2NC40ODE1NDI4MTU4MTU5LDE0OTguNDgxMjIzNjUwMjc2LDEzMzkuMzY5MDgzOTc5OTQzLDMwNzQuNjM4OTg2MjAxMzc1MiwyMjI3LjQ1NDU0MzQ4MTMyLDYyNi40NDI4Mjc1NDM4MzM1LDE4MjMuMjMzMDA3ODkxMjM4NywxMjE0LjIyMjE4NjU4MjUzODEsMTc5My43ODcxMDM0MDAzMTc0LDE5OTEuOTU1MTEyMDQ3MTY5LDE3NzIuMDI0NzQ2Mzc0OTEyMiw0MDM5LjI5MjA2ODU2NTU1NSwyNTcuNTkyNjM1OTE1ODI1OTUsMy4yMjUyODE4MTU2OTc1NTIKKzI2LFNhdCAxOSBGZWIgMTEsMTQ3LjgwODQ1OTE4NjgyMDc2LDEzMS45NzEzNzM0MTk2ODk0LDc2LjgxODA4MTA1ODA5Mjk0LDE1OC44MDMxNTE2MDUzMDQwNywxNjAuMDcxOTgxODg4OTYyNTcsMjU4Ny42MjYzMzI0NzA1MDIzLDI4MTEuOTcwODU0NzcyMzg0NCwyMzA0LjY3ODY4MTk3NDU5MDcsMjAwMS44NDYwMTE0MzUwOTgzLDI1MDIuODExNTY1MDEzNTQ1NSw1MDguMjQ3NDI3MTgwMzE5NiwyOTcxLjEyMDY0Mjk5NjgzMjQsNTg4LjAwMTkwMTEwMTczODgsMTU2MC45MTg3MjE3NjQzMzMyLDEzOTUuMTc2ODI2NzM2NTEyOCwzMjAyLjc1MDU0NTM0MDM3NjQsMjMyMC4yNjYzMDk1OTY3Myw2NTIuNTQ0OTM4Mjk4MzgzMywxODk5LjIwMTk5OTQ5MDg3MiwxMjY0LjgxNTQxMDA5OTk1NywxODY4LjUyOTE2Njk3NjM2MTcsMjA3NC45NTQyNzkxOTYzOTksMTg0NS44NjAwMzM3NDAyOTM0LDQyMDcuNTk4MDA4NTYxODAzLDI2OC4zMjU3OTY1NzU2NjQyLDMuMzU5NjcwMjM3ODU5MDAxOAorMjcsU3VuIDIwIEZlYiAxMSwxNTMuNzIwODc0NDE0OTk5OCwxMzcuMjUwMjk2OTgxODY1NjYsNzkuODkwODQ0MjQ1OTc4NiwxNjUuMTU1MzYwMjQ3NDg1MzYsMTY2LjQ3NDk0NDQwMjI4NDYsMjY5MS4xMzI3MzEzNDAzOTc2LDI5MjQuNDUxMTUxMTkzOTczLDIzOTYuODY3MDI3NjkxMjgyNiwyMDgxLjkyMDg5Mjg1NjU5MiwyNjAyLjkyNTMyOTA4MTMwNyw1MjguNTc3NTg4NTU3MjUxNywzMDg5Ljk2NzAxMzcwNTYyLDYxMS41MjIyODI5MDgwMiwxNjIzLjM1NjI4MjMxNTg4ODYsMTQ1MC45ODQ2MjUzMDA4MjUyLDMzMzAuODYyMjMyNTkwOTM3LDI0MTMuMDc4MTY4NTIzOTA2Miw2NzguNjQ3MDc1MTU1MDQzOCwxOTc1LjE3MTA2NzA1OTQ5NjksMTMxNS40MDg2ODQyMTA1OTk0LDE5NDMuMjcxMzA1Mjk0NDY5NiwyMTU3Ljk1MzUyOTM0NDc5NiwxOTE5LjY5NTM5NDk0MDk2Miw0Mzc1LjkwNDExNjg2Mzk5MTUsMjc5LjA1ODk2Nzk2ODY2MzA3LDMuNDk0MDU4Nzk0NDA4ODczNworMjgsTW9uIDIxIEZlYiAxMSwxNTkuNjMzMjk1NTU1NTk0MSwxNDIuNTI5MjI1ODIyOTY1NSw4Mi45NjM2MTA1MDY2Mjc0MywxNzEuNTA3NTc1MjQxODc1MzIsMTcyLjg3NzkxMzMxODU2OTE0LDI3OTQuNjM5MjMzNzE2NjkxNywzMDM2LjkzMTU2MDA5NTg1ODUsMjQ4OS4wNTU0NjU1OTYzMiwyMTYxLjk5NTg1NDM1Mjk2NzQsMjcwMy4wMzkxOTMyNjI4MzI3LDU0OC45MDc3NzAyNjQzNDUxLDMyMDguODEzNTAzMjYwNzc4NCw2MzUuMDQyNjg4MjM0NjgyOSwxNjg1Ljc5MzkwNTMwNTAwNDUsMTUwNi43OTI0Nzk2NzI5MzYyLDM0NTguOTc0MDQ3OTUzMTg0MywyNTA1Ljg5MDEyMDI2Mjk0MTMsNzA0Ljc0OTIzODExMzg0MTIsMjA1MS4xNDAyMTA1OTcxODkzLDEzNjYuMDAyMDA4OTE0NTE2LDIwMTguMDEzNTE4MzU0NzE1NiwyMjQwLjk1Mjg2MjQ5MjQ0MzMsMTk5My41MzA4Mjk5NzY5OTE4LDQ1NDQuMjEwMzkzNDcyMjg4LDI4OS43OTIxNTAwOTQ4MzMzNSwzLjYyODQ0NzQ4NTM0NzMwMgorMjksVHVlIDIyIEZlYiAxMSwxNjUuNTQ1NzIyNjA4NjA5NSwxNDcuODA4MTU5OTQyOTk0MTQsODYuMDM2Mzc5ODQwMDQyNTMsMTc3Ljg1OTc5NjU4ODQ4MDI2LDE3OS4yODA4ODg2Mzc4MjI2LDI4OTguMTQ1ODM5NTk5NDg4LDMxNDkuNDEyMDgxNDc4MTUyNywyNTgxLjI0Mzk5NTY4OTc5NTYsMjI0Mi4wNzA4OTU5MjQzMDQsMjgwMy4xNTMxNTc1NTgyMjI2LDU2OS4yMzc5NzIzMDE2MjAzLDMzMjcuNjYwMTExNjYyNDI2LDY1OC41NjMxMTcwODE3NTEyLDE3NDguMjMxNTkwNzMxNzQzNCwxNTYyLjYwMDM4OTg1MjkwMTYsMzU4Ny4wODU5OTE0MjcyNDczLDI1OTguNzAyMTY0ODEzOTI4NCw3MzAuODUxNDI3MTc0ODAxNSwyMTI3LjEwOTQzMDEwNDAyNTMsMTQxNi41OTUzODQyMTE3NTcyLDIwOTIuNzU1ODA2MTU3MTc1LDIzMjMuOTUyMjc4NjM5NDIzNiwyMDY3LjM2NjMzODg0ODQ1NjUsNDcxMi41MTY4MzgzODY4NjEsMzAwLjUyNTM0Mjk1NDE4NTc2LDMuNzYyODM2MzEwNjc0NDIxNAorMzAsV2VkIDIzIEZlYiAxMSwxNzEuNDU4MTU1NTc0MDUxOTcsMTUzLjA4NzA5OTM0MTk1NjkzLDg5LjEwOTE1MjI0NjIyNjk2LDE4NC4yMTIwMjQyODczMDY1NSwxODUuNjgzODcwMzYwMDUxNCwzMDAxLjY1MjU0ODk4ODg5MDQsMzI2MS44OTI3MTUzNDA5NjgsMjY3My40MzI2MTc5NzE4MDE0LDIzMjIuMTQ2MDE3NTcwNjgyLDI5MDMuMjY3MjIxOTY3NTc2NSw1ODkuNTY4MTk0NjY5MDk3NSwzNDQ2LjUwNjgzODkxMDY4MjMsNjgyLjA4MzU2OTQ0OTI0ODMsMTgxMC42NjkzMzg1OTYxNjc4LDE2MTguNDA4MzU1ODQwNzc3LDM3MTUuMTk4MDYzMDEzMjU0LDI2OTEuNTE0MzAyMTc2OTYsNzU2Ljk1MzY0MjMzNzk1MDksMjIwMy4wNzg3MjU1ODAwODA2LDE0NjcuMTg4ODEwMTAyMzczNSwyMTY3LjQ5ODE2ODcwMTkyMTcsMjQwNi45NTE3Nzc3ODU4MiwyMTQxLjIwMTkyMTU1NTQzLDQ4ODAuODIzNDUxNjA3ODc5LDMxMS4yNTg1NDY1NDY3MzEwNSwzLjg5NzIyNTI3MDM5MDM2NgorMzEsVGh1IDI0IEZlYiAxMSwxNzcuMzcwNTk0NDUxOTI3NDIsMTU4LjM2NjA0NDAxOTg1OTEyLDkyLjE4MTkyNzcyNTE4MzgsMTkwLjU2NDI1ODMzODM2MDUzLDE5Mi4wODY4NTg0ODUyNjE5LDMxMDUuMTU5MzYxODg1MDAyLDMzNzQuMzczNDYxNjg0NDE3NiwyNzY1LjYyMTMzMjQ0MjQyOTMsMjQwMi4yMjEyMTkyOTIxODIsMzAwMy4zODEzODY0OTA5OTUsNjA5Ljg5ODQzNzM2Njc5NywzNTY1LjM1MzY4NTAwNTY2NTcsNzA1LjYwNDA0NTMzNzE5NzgsMTg3My4xMDcxNDg4OTgzNCwxNjc0LjIxNjM3NzYzNjYxODUsMzg0My4zMTAyNjI3MTEzMzE3LDI3ODQuMzI2NTMyMzUyMTI5LDc4My4wNTU4ODM2MDMzMTU1LDIyNzkuMDQ4MDk3MDI1NDMxNiwxNTE3Ljc4MjI4NjU4NjQxNiwyMjQyLjI0MDYwNTk4OTAzMTMsMjQ4OS45NTEzNTk5MzE3MTU2LDIyMTUuMDM3NTc4MDk3OTg2Niw1MDQ5LjEzMDIzMzEzNTUxMSwzMjEuOTkxNzYwODcyNDc5OSw0LjAzMTYxNDM2NDQ5NTI3CiszMixGcmkgMjUgRmViIDExLDE4My4yODMwMzkyNDIyNDE3MywxNjMuNjQ0OTkzOTc2NzA1OTYsOTUuMjU0NzA2Mjc2OTE2MTEsMTk2LjkxNjQ5ODc0MTY0ODU4LDE5OC40ODk4NTMwMTM0NjA1MywzMjA4LjY2NjI3ODI4NzkyNjYsMzQ4Ni44NTQzMjA1MDg2MTM1LDI4NTcuODEwMTM5MTAxNzcxNywyNDgyLjI5NjUwMTA4ODg4MzQsMzEwMy40OTU2NTExMjg1Nzc3LDYzMC4yMjg3MDAzOTQ3MzkyLDM2ODQuMjAwNjQ5OTQ3NDk1NSw3MjkuMTI0NTQ0NzQ1NjIzMiwxOTM1LjU0NTAyMTYzODMyMjYsMTczMC4wMjQ0NTUyNDA0ODE4LDM5NzEuNDIyNTkwNTIxNjA5NCwyODc3LjEzODg1NTMzOTUyOCw4MDkuMTU4MTUwOTcwOTIxMywyMzU1LjAxNzU0NDQ0MDE1NCwxNTY4LjM3NTgxMzY2MzkzNDcsMjMxNi45ODMxMTgwMTg1Nzg0LDI1NzIuOTUxMDI1MDc3MTkzLDIyODguODczMzA4NDc2Miw1MjE3LjQzNzE4Mjk2OTkyNCwzMzIuNzI0OTg1OTMxNDQzMTQsNC4xNjYwMDM1OTI5ODkyNjgKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvRGVtb2dyYXBoaWNTRUlSRGlzZWFzZV9GRF9SZWZlcmVuY2UvRGVtb2dyYXBoaWNNb2RlbC93b21lbi9Db3VudF8yLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvRGVtb2dyYXBoaWNTRUlSRGlzZWFzZV9GRF9SZWZlcmVuY2UvRGVtb2dyYXBoaWNNb2RlbC93b21lbi9Db3VudF8yLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZmE3NmEyCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9EZW1vZ3JhcGhpY1NFSVJEaXNlYXNlX0ZEX1JlZmVyZW5jZS9EZW1vZ3JhcGhpY01vZGVsL3dvbWVuL0NvdW50XzIuY3N2CkBAIC0wLDAgKzEsMzMgQEAKK2l0ZXJhdGlvbix0aW1lLEVHLUZSRy1HMjEwMDAxLEVHLUZSRy1HMjEwMDAyLEVHLUZSRy1HMjEwMDAzLEVHLUZSRy1HMjEwMDA0LEVHLUZSRy1HMjEwMDA1LEVHLUxPRS1HMjQwMDAxLEVHLUxPRS1HMjQwMDAyLEVHLUxPRS1HMjQwMDAzLEVHLUxPRS1HMjQwMDA0LEVHLUxPRS1HMjQwMDA1LEVHLUxPRS1HMjQwMDA2LEVHLUxPRS1HMjQwMDA3LEVHLUxPRS1HMjQwMDA4LEVHLUxPRS1HMjQwMDA5LEVHLVVQRS1HMjkwMDAxLEVHLVVQRS1HMjkwMDAyLEVHLVVQRS1HMjkwMDAzLEVHLVVQRS1HMjkwMDA0LEVHLVVQRS1HMjkwMDA1LEVHLVVQRS1HMjkwMDA2LEVHLVVQRS1HMjkwMDA3LEVHLVVQRS1HMjkwMDA4LEVHLVVSRy1HMzAwMDAxLEVHLVVSRy1HMzAwMDAyLEVHLVVSRy1HMzAwMDAzLEVHLVVSRy1HMzAwMDA0CisxLFR1ZSAyNSBKYW4gMTEsMTQ3ODA2LjY4NTQ5Mjk5NjU2LDEzMTk2OS43ODk3NzAwNzA4Nyw3NjgxNy4xNTkyNDUxMTQ3NywxNTg4MDEuMjQ1OTc1NzQyNTIsMTYwMDcwLjA2MTAzMzUwMzUsMjU4NzU5NS4yODEwODkwNjkzLDI4MTE5MzcuMTExMjY4MzQ5NSwyMzA0NjUxLjAyNTk1MDI0OTgsMjAwMTgyMS45ODkzODcwNTY4LDI1MDI3ODEuNTMxNDA0OTExNSw1MDgyNDEuMzI4MjM3NjIyMTYsMjk3MTA4NC45ODk3MDM2MTQ3LDU4Nzk5NC44NDUxMDk1MDE2LDE1NjA4OTkuOTkwODIwODQwMiwxMzk1MTYwLjA4NDY4NzE0MDgsMzIwMjcxMi4xMTI1MDAzNzQsMjMyMDIzOC40NjY1MjE2NjksNjUyNTM3LjEwNzc5MzA1NTksMTg5OTE3OS4yMDkxNjU2MzY1LDEyNjQ4MDAuMjMyMzgwODA2LDE4Njg1MDYuNzQ0NzIzNTIxNCwyMDc0OTI5LjM3OTg1Mjk0NjQsMTg0NTgzNy44ODM1MTU4NzMyLDQyMDc1NDcuNTE3NjA0NDk0NSwyNjgzMjIuNTc2NjgwMDU4MiwzMzU5LjYyOTkyMTk5MDg0OTcKKzIsV2VkIDI2IEphbiAxMSwxNDc4MDYuODMzMjk5NjgyMDcsMTMxOTY5LjkyMTczOTg2MDY0LDc2ODE3LjIzNjA2MjI3NDAyLDE1ODgwMS40MDQ3NzY5ODg1LDE2MDA3MC4yMjExMDM1NjQ1NSwyNTg3NTk3Ljg2ODY4NDM1MDUsMjgxMTkzOS45MjMyMDU0NjEsMjMwNDY1My4zMzA2MDEyNzYsMjAwMTgyMy45OTEyMDkwNDYyLDI1MDI3ODQuMDM0MTg2NDQzLDUwODI0MS44MzY0Nzg5NTA0LDI5NzEwODcuOTYwNzg4NjA0Myw1ODc5OTUuNDMzMTA0MzQ2NywxNTYwOTAxLjU1MTcyMDgzMSwxMzk1MTYxLjQ3OTg0NzIyNTQsMzIwMjcxNS4zMTUyMTI0ODcsMjMyMDI0MC43ODY3NjAxMzU2LDY1MjUzNy43NjAzMzAxNjM4LDE4OTkxODEuMTA4MzQ0ODQ1NywxMjY0ODAxLjQ5NzE4MTAzODQsMTg2ODUwOC42MTMyMzAyNjYxLDIwNzQ5MzEuNDU0NzgyMzI2MiwxODQ1ODM5LjcyOTM1Mzc1NjYsNDIwNzU1MS43MjUxNTIwMTIsMjY4MzIyLjg0NTAwMjYzNDg2LDMzNTkuNjMzMjgxNjIwNzcyCiszLFRodSAyNyBKYW4gMTEsMTQ3ODA2Ljk4MTEwNjUxNTM2LDEzMTk3MC4wNTM3MDk3ODIzNyw3NjgxNy4zMTI4Nzk1MTAxLDE1ODgwMS41NjM1NzgzOTMyOCwxNjAwNzAuMzgxMTczNzg1NjYsMjU4NzYwMC40NTYyODIyMTk0LDI4MTE5NDIuNzM1MTQ1Mzg0LDIzMDQ2NTUuNjM1MjU0NjA2NiwyMDAxODI1Ljk5MzAzMzAzNzUsMjUwMjc4Ni41MzY5NzA0NzcsNTA4MjQyLjM0NDcyMDc4NjksMjk3MTA5MC45MzE4NzY1NjUzLDU4Nzk5Ni4wMjEwOTk3Nzk5LDE1NjA5MDMuMTEyNjIyMzgyOCwxMzk1MTYyLjg3NTAwODcwNTMsMzIwMjcxOC41MTc5Mjc4MDIsMjMyMDI0My4xMDcwMDA5MjIzLDY1MjUzOC40MTI4Njc5MjQxLDE4OTkxODMuMDA3NTI1OTU0MiwxMjY0ODAyLjc2MTk4MjUzNTUsMTg2ODUxMC40ODE3Mzg4NzkzLDIwNzQ5MzMuNTI5NzEzNzgxLDE4NDU4NDEuNTc1MTkzNDg2LDQyMDc1NTUuOTMyNzAzNzM3LDI2ODMyMy4xMTMzMjU0Nzk4NSwzMzU5LjYzNjY0MTI1NDA1MzMKKzQsRnJpIDI4IEphbiAxMSwxNDc4MDcuMTI4OTEzNDk2NDgsMTMxOTcwLjE4NTY3OTgzNjA4LDc2ODE3LjM4OTY5NjgyMjk3LDE1ODgwMS43MjIzNzk5NTY4NiwxNjAwNzAuNTQxMjQ0MTY2ODQsMjU4NzYwMy4wNDM4ODI2NzU1LDI4MTE5NDUuNTQ3MDg4MTE5LDIzMDQ2NTcuOTM5OTEwMjQyLDIwMDE4MjcuOTk0ODU5MDMwNSwyNTAyNzg5LjAzOTc1NzAxNDMsNTA4MjQyLjg1Mjk2MzEzMTYsMjk3MTA5My45MDI5Njc0OTcyLDU4Nzk5Ni42MDkwOTU4MDEsMTU2MDkwNC42NzM1MjU0OTU1LDEzOTUxNjQuMjcwMTcxNTgwNCwzMjAyNzIxLjcyMDY0NjMyLDIzMjAyNDUuNDI3MjQ0MDI5NSw2NTI1MzkuMDY1NDA2MzM2OSwxODk5MTg0LjkwNjcwODk2MTYsMTI2NDgwNC4wMjY3ODUyOTc2LDE4Njg1MTIuMzUwMjQ5MzYxLDIwNzQ5MzUuNjA0NjQ3MzEwNywxODQ1ODQzLjQyMTAzNTA2MTEsNDIwNzU2MC4xNDAyNTk2NywyNjgzMjMuMzgxNjQ4NTkzMiwzMzU5LjY0MDAwMDg5MDY5NDQKKzUsU2F0IDI5IEphbiAxMSwxNDc4MDcuMjc2NzIwNjI1MzgsMTMxOTcwLjMxNzY1MDAyMTc1LDc2ODE3LjQ2NjUxNDIxMjY2LDE1ODgwMS44ODExODE2NzkyMywxNjAwNzAuNzAxMzE0NzA4MSwyNTg3NjA1LjYzMTQ4NTcxOTIsMjgxMTk0OC4zNTkwMzM2NjYsMjMwNDY2MC4yNDQ1NjgxODE3LDIwMDE4MjkuOTk2Njg3MDI1MywyNTAyNzkxLjU0MjU0NjA1NCw1MDgyNDMuMzYxMjA1OTg0NiwyOTcxMDk2Ljg3NDA2MTQsNTg3OTk3LjE5NzA5MjQxMDEsMTU2MDkwNi4yMzQ0MzAxNjksMTM5NTE2NS42NjUzMzU4NTA2LDMyMDI3MjQuOTIzMzY4MDQwNSwyMzIwMjQ3Ljc0NzQ4OTQ1NjYsNjUyNTM5LjcxNzk0NTQwMjQsMTg5OTE4Ni44MDU4OTM4NjgyLDEyNjQ4MDUuMjkxNTg5MzI0NCwxODY4NTE0LjIxODc2MTcxMTEsMjA3NDkzNy42Nzk1ODI5MTUzLDE4NDU4NDUuMjY2ODc4NDgyMiw0MjA3NTY0LjM0NzgxOTgxMSwyNjgzMjMuNjQ5OTcxOTc0ODQsMzM1OS42NDMzNjA1MzA2OTUKKzYsU3VuIDMwIEphbiAxMSwxNDc4MDcuNDI0NTI3OTAyMSwxMzE5NzAuNDQ5NjIwMzM5NCw3NjgxNy41NDMzMzE2NzkxOCwxNTg4MDIuMDM5OTgzNTYwNDIsMTYwMDcwLjg2MTM4NTQwOTQzLDI1ODc2MDguMjE5MDkxMzUwNywyODExOTUxLjE3MDk4MjAyNSwyMzA0NjYyLjU0OTIyODQyNiwyMDAxODMxLjk5ODUxNzAyMiwyNTAyNzk0LjA0NTMzNzU5NjQsNTA4MjQzLjg2OTQ0OTM0NTgsMjk3MTA5OS44NDUxNTgyNzQzLDU4Nzk5Ny43ODUwODk2MDcxLDE1NjA5MDcuNzk1MzM2NDAzNCwxMzk1MTY3LjA2MDUwMTUxNTksMzIwMjcyOC4xMjYwOTI5NjQsMjMyMDI1MC4wNjc3MzcyMDQsNjUyNTQwLjM3MDQ4NTEyMDMsMTg5OTE4OC43MDUwODA2NzQsMTI2NDgwNi41NTYzOTQ2MTYsMTg2ODUxNi4wODcyNzU5MywyMDc0OTM5Ljc1NDUyMDU5NDgsMTg0NTg0Ny4xMTI3MjM3NDkxLDQyMDc1NjguNTU1Mzg0MTU4LDI2ODMyMy45MTgyOTU2MjQ4LDMzNTkuNjQ2NzIwMTc0MDU1NgorNyxNb24gMzEgSmFuIDExLDE0NzgwNy41NzIzMzUzMjY2NCwxMzE5NzAuNTgxNTkwNzg5MDIsNzY4MTcuNjIwMTQ5MjIyNTEsMTU4ODAyLjE5ODc4NTYwMDQsMTYwMDcxLjAyMTQ1NjI3MDgzLDI1ODc2MTAuODA2Njk5NTcsMjgxMTk1My45ODI5MzMxOTYyLDIzMDQ2NjQuODUzODkwOTc1NSwyMDAxODM0LjAwMDM0OTAyMDYsMjUwMjc5Ni41NDgxMzE2NDIsNTA4MjQ0LjM3NzY5MzIxNTI3LDI5NzExMDIuODE2MjU4MTE5NCw1ODc5OTguMzczMDg3MzkyMiwxNTYwOTA5LjM1NjI0NDE5ODcsMTM5NTE2OC40NTU2Njg1NzYzLDMyMDI3MzEuMzI4ODIxMDksMjMyMDI1Mi4zODc5ODcyNzIsNjUyNTQxLjAyMzAyNTQ5MDgsMTg5OTE5MC42MDQyNjkzNzksMTI2NDgwNy44MjEyMDExNzIyLDE4Njg1MTcuOTU1NzkyMDE3MywyMDc0OTQxLjgyOTQ2MDM0OTQsMTg0NTg0OC45NTg1NzA4NjIsNDIwNzU3Mi43NjI5NTI3MTMsMjY4MzI0LjE4NjYxOTU0MzA2LDMzNTkuNjUwMDc5ODIwNzc1OAorOCxUdWUgMSBGZWIgMTEsMTQ3ODA3LjcyMDE0Mjg5ODk2LDEzMTk3MC43MTM1NjEzNzA2Miw3NjgxNy42OTY5NjY4NDI2NiwxNTg4MDIuMzU3NTg3Nzk5MiwxNjAwNzEuMTgxNTI3MjkyMywyNTg3NjEzLjM5NDMxMDM3NjYsMjgxMTk1Ni43OTQ4ODcxNzksMjMwNDY2Ny4xNTg1NTU4Mjk0LDIwMDE4MzYuMDAyMTgzMDIxLDI1MDI3OTkuMDUwOTI4MTksNTA4MjQ0Ljg4NTkzNzU5Mjk1LDI5NzExMDUuNzg3MzYwOTM1NSw1ODc5OTguOTYxMDg1NzY1MywxNTYwOTEwLjkxNzE1MzU1NSwxMzk1MTY5Ljg1MDgzNzAzMiwzMjAyNzM0LjUzMTU1MjQxOSwyMzIwMjU0LjcwODIzOTY1OTcsNjUyNTQxLjY3NTU2NjUxMzgsMTg5OTE5Mi41MDM0NTk5ODMzLDEyNjQ4MDkuMDg2MDA4OTkzNCwxODY4NTE5LjgyNDMwOTk3MywyMDc0OTQzLjkwNDQwMjE3OSwxODQ1ODUwLjgwNDQxOTgyMDQsNDIwNzU3Ni45NzA1MjU0NzYsMjY4MzI0LjQ1NDk0MzcyOTcsMzM1OS42NTM0Mzk0NzA4NTU2Cis5LFdlZCAyIEZlYiAxMSwxNDc4MDcuODY3OTUwNjE5MSwxMzE5NzAuODQ1NTMyMDg0MTcsNzY4MTcuNzczNzg0NTM5NjMsMTU4ODAyLjUxNjM5MDE1NjgsMTYwMDcxLjM0MTU5ODQ3Mzg0LDI1ODc2MTUuOTgxOTIzNzcxLDI4MTE5NTkuNjA2ODQzOTc0LDIzMDQ2NjkuNDYzMjIyOTg4LDIwMDE4MzguMDA0MDE5MDIzMiwyNTAyODAxLjU1MzcyNzI0MSw1MDgyNDUuMzk0MTgyNDc4OSwyOTcxMTA4Ljc1ODQ2NjcyMyw1ODc5OTkuNTQ5MDg0NzI2NCwxNTYwOTEyLjQ3ODA2NDQ3MiwxMzk1MTcxLjI0NjAwNjg4MywzMjAyNzM3LjczNDI4Njk1MDQsMjMyMDI1Ny4wMjg0OTQzNjgsNjUyNTQyLjMyODEwODE4OTQsMTg5OTE5NC40MDI2NTI0ODY3LDEyNjQ4MTAuMzUwODE4MDc5NCwxODY4NTIxLjY5MjgyOTc5NzMsMjA3NDk0NS45NzkzNDYwODMyLDE4NDU4NTIuNjUwMjcwNjI0OCw0MjA3NTgxLjE3ODEwMjQ0NywyNjgzMjQuNzIzMjY4MTg0NjQsMzM1OS42NTY3OTkxMjQyOTUKKzEwLFRodSAzIEZlYiAxMSwxNDc4MDguMDE1NzU4NDg3MDgsMTMxOTcwLjk3NzUwMjkyOTcyLDc2ODE3Ljg1MDYwMjMxMzQxLDE1ODgwMi42NzUxOTI2NzMxNywxNjAwNzEuNTAxNjY5ODE1NDUsMjU4NzYxOC41Njk1Mzk3NTMsMjgxMTk2Mi40MTg4MDM1ODEsMjMwNDY3MS43Njc4OTI0NTEsMjAwMTg0MC4wMDU4NTcwMjcxLDI1MDI4MDQuMDU2NTI4Nzk0Niw1MDgyNDUuOTAyNDI3ODczMDUsMjk3MTExMS43Mjk1NzU0ODEzLDU4ODAwMC4xMzcwODQyNzU1LDE1NjA5MTQuMDM4OTc2OTUsMTM5NTE3Mi42NDExNzgxMjksMzIwMjc0MC45MzcwMjQ2ODQ2LDIzMjAyNTkuMzQ4NzUxMzk2NCw2NTI1NDIuOTgwNjUwNTE3NSwxODk5MTk2LjMwMTg0Njg4OTMsMTI2NDgxMS42MTU2Mjg0MzAyLDE4Njg1MjMuNTYxMzUxNDkwMiwyMDc0OTQ4LjA1NDI5MjA2MjUsMTg0NTg1NC40OTYxMjMyNzUsNDIwNzU4NS4zODU2ODM2MjUsMjY4MzI0Ljk5MTU5MjkwNzksMzM1OS42NjAxNTg3ODEwOTQKKzExLEZyaSA0IEZlYiAxMSwxNDc4MDguMTYzNTY2NTAyODMsMTMxOTcxLjEwOTQ3MzkwNzIsNzY4MTcuOTI3NDIwMTY0MDEsMTU4ODAyLjgzMzk5NTM0ODM3LDE2MDA3MS42NjE3NDEzMTcxMywyNTg3NjIxLjE1NzE1ODMyMiwyODExOTY1LjIzMDc2NTk5OTgsMjMwNDY3NC4wNzI1NjQyMTksMjAwMTg0Mi4wMDc2OTcwMzMsMjUwMjgwNi41NTkzMzI4NTEzLDUwODI0Ni40MTA2NzM3NzU1LDI5NzExMTQuNzAwNjg3MjExLDU4ODAwMC43MjUwODQ0MTI2LDE1NjA5MTUuNTk5ODkwOTg5LDEzOTUxNzQuMDM2MzUwNzcwMiwzMjAyNzQ0LjEzOTc2NTYyMTYsMjMyMDI2MS42NjkwMTA3NDU0LDY1MjU0My42MzMxOTM0OTgxLDE4OTkxOTguMjAxMDQzMTkxMSwxMjY0ODEyLjg4MDQ0MDA0NTgsMTg2ODUyNS40Mjk4NzUwNTE2LDIwNzQ5NTAuMTI5MjQwMTE2OCwxODQ1ODU2LjM0MTk3Nzc3MTEsNDIwNzU4OS41OTMyNjkwMTEsMjY4MzI1LjI1OTkxNzg5OTUsMzM1OS42NjM1MTg0NDEyNTMKKzEyLFNhdCA1IEZlYiAxMSwxNDc4MDguMzExMzc0NjY2NCwxMzE5NzEuMjQxNDQ1MDE2Nyw3NjgxOC4wMDQyMzgwOTE0MiwxNTg4MDIuOTkyNzk4MTgyMzYsMTYwMDcxLjgyMTgxMjk3ODksMjU4NzYyMy43NDQ3Nzk0NzksMjgxMTk2OC4wNDI3MzEyMzA2LDIzMDQ2NzYuMzc3MjM4MjkyLDIwMDE4NDQuMDA5NTM5MDQwNywyNTAyODA5LjA2MjEzOTQxMDUsNTA4MjQ2LjkxODkyMDE4NjIsMjk3MTExNy42NzE4MDE5MTE3LDU4ODAwMS4zMTMwODUxMzc4LDE1NjA5MTcuMTYwODA2NTg4OCwxMzk1MTc1LjQzMTUyNDgwNjQsMzIwMjc0Ny4zNDI1MDk3NjE1LDIzMjAyNjMuOTg5MjcyNDE0Miw2NTI1NDQuMjg1NzM3MTMxNCwxODk5MjAwLjEwMDI0MTM5MjIsMTI2NDgxNC4xNDUyNTI5MjYzLDE4Njg1MjcuMjk4NDAwNDgxNSwyMDc0OTUyLjIwNDE5MDI0NiwxODQ1ODU4LjE4NzgzNDExMzEsNDIwNzU5My44MDA4NTg2MDUsMjY4MzI1LjUyODI0MzE1OTQsMzM1OS42NjY4NzgxMDQ3NzE1CisxMyxTdW4gNiBGZWIgMTEsMTQ3ODA4LjQ1OTE4Mjk3Nzc2LDEzMTk3MS4zNzM0MTYyNTgxNCw3NjgxOC4wODEwNTYwOTU2NiwxNTg4MDMuMTUxNjAxMTc1MTcsMTYwMDcxLjk4MTg4NDgwMDcsMjU4NzYyNi4zMzI0MDMyMjQsMjgxMTk3MC44NTQ2OTkyNzMsMjMwNDY3OC42ODE5MTQ2NjksMjAwMTg0Ni4wMTEzODMwNTA0LDI1MDI4MTEuNTY0OTQ4NDcyNyw1MDgyNDcuNDI3MTY3MTA1MSwyOTcxMTIwLjY0MjkxOTU4MzIsNTg4MDAxLjkwMTA4NjQ1MDgsMTU2MDkxOC43MjE3MjM3NDk1LDEzOTUxNzYuODI2NzAwMjM4LDMyMDI3NTAuNTQ1MjU3MTA0LDIzMjAyNjYuMzA5NTM2NDAzNSw2NTI1NDQuOTM4MjgxNDE3MSwxODk5MjAxLjk5OTQ0MTQ5MjQsMTI2NDgxNS40MTAwNjcwNzE0LDE4Njg1MjkuMTY2OTI3Nzc5OCwyMDc0OTU0LjI3OTE0MjQ1MDMsMTg0NTg2MC4wMzM2OTIzMDEsNDIwNzU5OC4wMDg0NTI0MDUsMjY4MzI1Ljc5NjU2ODY4NzY2LDMzNTkuNjcwMjM3NzcxNjQ5NworMTQsTW9uIDcgRmViIDExLDE0NzgwOC42MDY5OTE0MzY5NCwxMzE5NzEuNTA1Mzg3NjMxNTcsNzY4MTguMTU3ODc0MTc2NzIsMTU4ODAzLjMxMDQwNDMyNjc3LDE2MDA3Mi4xNDE5NTY3ODI2LDI1ODc2MjguOTIwMDI5NTU2NCwyODExOTczLjY2NjY3MDEyOCwyMzA0NjgwLjk4NjU5MzM1MSwyMDAxODQ4LjAxMzIyOTA2MTgsMjUwMjgxNC4wNjc3NjAwMzc3LDUwODI0Ny45MzU0MTQ1MzIyNiwyOTcxMTIzLjYxNDA0MDIyNiw1ODgwMDIuNDg5MDg4MzUxOCwxNTYwOTIwLjI4MjY0MjQ3MTQsMTM5NTE3OC4yMjE4NzcwNjQ4LDMyMDI3NTMuNzQ4MDA3NjQ5NiwyMzIwMjY4LjYyOTgwMjcxMyw2NTI1NDUuNTkwODI2MzU1NCwxODk5MjAzLjg5ODY0MzQ5MTgsMTI2NDgxNi42NzQ4ODI0ODE2LDE4Njg1MzEuMDM1NDU2OTQ2OCwyMDc0OTU2LjM1NDA5NjcyOTUsMTg0NTg2MS44Nzk1NTIzMzQ4LDQyMDc2MDIuMjE2MDUwNDEzLDI2ODMyNi4wNjQ4OTQ0ODQyNCwzMzU5LjY3MzU5NzQ0MTg4NzUKKzE1LFR1ZSA4IEZlYiAxMSwxNDc4MDguNzU0ODAwMDQzOTQsMTMxOTcxLjYzNzM1OTEzNjk1LDc2ODE4LjIzNDY5MjMzNDU5LDE1ODgwMy40NjkyMDc2MzcxNiwxNjAwNzIuMzAyMDI4OTI0NTgsMjU4NzYzMS41MDc2NTg0NzY1LDI4MTE5NzYuNDc4NjQzNzk0NSwyMzA0NjgzLjI5MTI3NDMzNzYsMjAwMTg1MC4wMTUwNzcwNzUsMjUwMjgxNi41NzA1NzQxMDUzLDUwODI0OC40NDM2NjI0Njc2NSwyOTcxMTI2LjU4NTE2Mzg0LDU4ODAwMy4wNzcwOTA4NDA5LDE1NjA5MjEuODQzNTYyNzU0LDEzOTUxNzkuNjE3MDU1Mjg2NywzMjAyNzU2Ljk1MDc2MTM5NzQsMjMyMDI3MC45NTAwNzEzNDI4LDY1MjU0Ni4yNDMzNzE5NDYyLDE4OTkyMDUuNzk3ODQ3MzkwNCwxMjY0ODE3LjkzOTY5OTE1NjQsMTg2ODUzMi45MDM5ODc5ODIzLDIwNzQ5NTguNDI5MDUzMDgzNSwxODQ1ODYzLjcyNTQxNDIxNDQsNDIwNzYwNi40MjM2NTI2MjksMjY4MzI2LjMzMzIyMDU0OTE2LDMzNTkuNjc2OTU3MTE1NDg1CisxNixXZWQgOSBGZWIgMTEsMTQ3ODA4LjkwMjYwODc5ODczLDEzMTk3MS43NjkzMzA3NzQzMiw3NjgxOC4zMTE1MTA1NjkyOSwxNTg4MDMuNjI4MDExMTA2MzcsMTYwMDcyLjQ2MjEwMTIyNjYsMjU4NzYzNC4wOTUyODk5ODQzLDI4MTE5NzkuMjkwNjIwMjczLDIzMDQ2ODUuNTk1OTU3NjI5LDIwMDE4NTIuMDE2OTI3MDksMjUwMjgxOS4wNzMzOTA2NzU3LDUwODI0OC45NTE5MTA5MTEzLDI5NzExMjkuNTU2MjkwNDI1NCw1ODgwMDMuNjY1MDkzOTE4LDE1NjA5MjMuNDA0NDg0NTk3NywxMzk1MTgxLjAxMjIzNDkwMzYsMzIwMjc2MC4xNTM1MTgzNDgsMjMyMDI3My4yNzAzNDIyOTI3LDY1MjU0Ni44OTU5MTgxODk1LDE4OTkyMDcuNjk3MDUzMTg4MiwxMjY0ODE5LjIwNDUxNzA5NiwxODY4NTM0Ljc3MjUyMDg4NjMsMjA3NDk2MC41MDQwMTE1MTI1LDE4NDU4NjUuNTcxMjc3OTQsNDIwNzYxMC42MzEyNTkwNTMsMjY4MzI2LjYwMTU0Njg4MjM2LDMzNTkuNjgwMzE2NzkyNDQyCisxNyxUaHUgMTAgRmViIDExLDE0NzgwOS4wNTA0MTc3MDEzNCwxMzE5NzEuOTAxMzAyNTQzNjQsNzY4MTguMzg4MzI4ODgwOCwxNTg4MDMuNzg2ODE0NzM0MzcsMTYwMDcyLjYyMjE3MzY4ODcyLDI1ODc2MzYuNjgyOTI0MDc5NywyODExOTgyLjEwMjU5OTU2MzUsMjMwNDY4Ny45MDA2NDMyMjUsMjAwMTg1NC4wMTg3NzkxMDcsMjUwMjgyMS41NzYyMDk3NDksNTA4MjQ5LjQ2MDE1OTg2MzIsMjk3MTEzMi41Mjc0MTk5ODE1LDU4ODAwNC4yNTMwOTc1ODMxLDE1NjA5MjQuOTY1NDA4MDAyMywxMzk1MTgyLjQwNzQxNTkxNiwzMjAyNzYzLjM1NjI3ODUwMTUsMjMyMDI3NS41OTA2MTU1NjMsNjUyNTQ3LjU0ODQ2NTA4NTQsMTg5OTIwOS41OTYyNjA4ODUyLDEyNjQ4MjAuNDY5MzM2MzAwNiwxODY4NTM2LjY0MTA1NTY1ODcsMjA3NDk2Mi41Nzg5NzIwMTY1LDE4NDU4NjcuNDE3MTQzNTExMSw0MjA3NjE0LjgzODg2OTY4NCwyNjgzMjYuODY5ODczNDgzOSwzMzU5LjY4MzY3NjQ3Mjc1OQorMTgsRnJpIDExIEZlYiAxMSwxNDc4MDkuMTk4MjI2NzUxNzYsMTMxOTcyLjAzMzI3NDQ0NDk2LDc2ODE4LjQ2NTE0NzI2OTEzLDE1ODgwMy45NDU2MTg1MjEyLDE2MDA3Mi43ODIyNDYzMTA5LDI1ODc2MzkuMjcwNTYwNzYzLDI4MTE5ODQuOTE0NTgxNjY2MiwyMzA0NjkwLjIwNTMzMTEyNTMsMjAwMTg1Ni4wMjA2MzMxMjU3LDI1MDI4MjQuMDc5MDMxMzI1NCw1MDgyNDkuOTY4NDA5MzIzMzcsMjk3MTEzNS40OTg1NTI1MDksNTg4MDA0Ljg0MTEwMTgzNjIsMTU2MDkyNi41MjYzMzI5Njc3LDEzOTUxODMuODAyNTk4MzIzNCwzMjAyNzY2LjU1OTA0MTg1NzcsMjMyMDI3Ny45MTA4OTExNTQsNjUyNTQ4LjIwMTAxMjYzMzksMTg5OTIxMS40OTU0NzA0ODE1LDEyNjQ4MjEuNzM0MTU2NzcsMTg2ODUzOC41MDk1OTIyOTk4LDIwNzQ5NjQuNjUzOTM0NTk1NCwxODQ1ODY5LjI2MzAxMDkyODIsNDIwNzYxOS4wNDY0ODQ1MjMsMjY4MzI3LjEzODIwMDM1MzgsMzM1OS42ODcwMzYxNTY0MzU2CisxOSxTYXQgMTIgRmViIDExLDE0NzgwOS4zNDYwMzU5NDk5NywxMzE5NzIuMTY1MjQ2NDc4MjIsNzY4MTguNTQxOTY1NzM0MjksMTU4ODA0LjEwNDQyMjQ2NjgsMTYwMDcyLjk0MjMxOTA5MzE2LDI1ODc2NDEuODU4MjAwMDMzLDI4MTE5ODcuNzI2NTY2NTgwNiwyMzA0NjkyLjUxMDAyMTMzMSwyMDAxODU4LjAyMjQ4OTE0NjMsMjUwMjgyNi41ODE4NTU0MDQ3LDUwODI1MC40NzY2NTkyOTE4LDI5NzExMzguNDY5Njg4MDA3Niw1ODgwMDUuNDI5MTA2Njc3MywxNTYwOTI4LjA4NzI1OTQ5NCwxMzk1MTg1LjE5Nzc4MjEyNiwzMjAyNzY5Ljc2MTgwODQxNywyMzIwMjgwLjIzMTE2OTA2NDUsNjUyNTQ4Ljg1MzU2MDgzNDksMTg5OTIxMy4zOTQ2ODE5NzY5LDEyNjQ4MjIuOTk4OTc4NTA0LDE4Njg1NDAuMzc4MTMwODA5NCwyMDc0OTY2LjcyODg5OTI0OTMsMTg0NTg3MS4xMDg4ODAxOTEsNDIwNzYyMy4yNTQxMDM1NywyNjgzMjcuNDA2NTI3NDkyLDMzNTkuNjkwMzk1ODQzNDcyCisyMCxTdW4gMTMgRmViIDExLDE0NzgwOS40OTM4NDUyOTYsMTMxOTcyLjI5NzIxODY0MzQ4LDc2ODE4LjYxODc4NDI3NjI2LDE1ODgwNC4yNjMyMjY1NzEyMywxNjAwNzMuMTAyMzkyMDM1NDgsMjU4NzY0NC40NDU4NDE4OTEsMjgxMTk5MC41Mzg1NTQzMDcsMjMwNDY5NC44MTQ3MTM4NDEsMjAwMTg2MC4wMjQzNDcxNjg5LDI1MDI4MjkuMDg0NjgxOTg2NCw1MDgyNTAuOTg0OTA5NzY4NDUsMjk3MTE0MS40NDA4MjY0Nzc1LDU4ODAwNi4wMTcxMTIxMDY0LDE1NjA5MjkuNjQ4MTg3NTgxMiwxMzk1MTg2LjU5Mjk2NzMyMzcsMzIwMjc3Mi45NjQ1NzgxNzg3LDIzMjAyODIuNTUxNDQ5Mjk1Niw2NTI1NDkuNTA2MTA5Njg4NCwxODk5MjE1LjI5Mzg5NTM3MTUsMTI2NDgyNC4yNjM4MDE1MDMsMTg2ODU0Mi4yNDY2NzExODc1LDIwNzQ5NjguODAzODY1OTc4MywxODQ1ODcyLjk1NDc1MTMsNDIwNzYyNy40NjE3MjY4MjUsMjY4MzI3LjY3NDg1NDg5ODUzLDMzNTkuNjkzNzU1NTMzODY3NworMjEsTW9uIDE0IEZlYiAxMSwxNDc4MDkuNjQxNjU0Nzg5ODYsMTMxOTcyLjQyOTE5MDk0MDcsNzY4MTguNjk1NjAyODk1MDQsMTU4ODA0LjQyMjAzMDgzNDQ1LDE2MDA3My4yNjI0NjUxMzc4NywyNTg3NjQ3LjAzMzQ4NjMzNywyODExOTkzLjM1MDU0NDg0NTcsMjMwNDY5Ny4xMTk0MDg2NTU0LDIwMDE4NjIuMDI2MjA3MTkzMywyNTAyODMxLjU4NzUxMTA3MSw1MDgyNTEuNDkzMTYwNzUzMzQsMjk3MTE0NC40MTE5Njc5MTgzLDU4ODAwNi42MDUxMTgxMjM2LDE1NjA5MzEuMjA5MTE3MjI5MywxMzk1MTg3Ljk4ODE1MzkxNjgsMzIwMjc3Ni4xNjczNTExNDM0LDIzMjAyODQuODcxNzMxODQ3LDY1MjU1MC4xNTg2NTkxOTQ2LDE4OTkyMTcuMTkzMTEwNjY1MywxMjY0ODI1LjUyODYyNTc2NjcsMTg2ODU0NC4xMTUyMTM0MzQyLDIwNzQ5NzAuODc4ODM0NzgyMiwxODQ1ODc0LjgwMDYyNDI1NDYsNDIwNzYzMS42NjkzNTQyODYsMjY4MzI3Ljk0MzE4MjU3MzM2LDMzNTkuNjk3MTE1MjI3NjIzMworMjIsVHVlIDE1IEZlYiAxMSwxNDc4MDkuNzg5NDY0NDMxNTIsMTMxOTcyLjU2MTE2MzM2OTksNzY4MTguNzcyNDIxNTkwNjMsMTU4ODA0LjU4MDgzNTI1NjUsMTYwMDczLjQyMjUzODQwMDM0LDI1ODc2NDkuNjIxMTMzMzcwMywyODExOTk2LjE2MjUzODE5NjQsMjMwNDY5OS40MjQxMDU3NzUsMjAwMTg2NC4wMjgwNjkyMTk2LDI1MDI4MzQuMDkwMzQyNjU4Niw1MDgyNTIuMDAxNDEyMjQ2NSwyOTcxMTQ3LjM4MzExMjMzMDUsNTg4MDA3LjE5MzEyNDcyODcsMTU2MDkzMi43NzAwNDg0MzgzLDEzOTUxODkuMzgzMzQxOTA1LDMyMDI3NzkuMzcwMTI3MzExLDIzMjAyODcuMTkyMDE2NzE5LDY1MjU1MC44MTEyMDkzNTMzLDE4OTkyMTkuMDkyMzI3ODU4MywxMjY0ODI2Ljc5MzQ1MTI5NTUsMTg2ODU0NS45ODM3NTc1NDk0LDIwNzQ5NzIuOTUzODA1NjYxLDE4NDU4NzYuNjQ2NDk5MDU1Miw0MjA3NjM1Ljg3Njk4NTk1NSwyNjgzMjguMjExNTEwNTE2NSwzMzU5LjcwMDQ3NDkyNDczODUKKzIzLFdlZCAxNiBGZWIgMTEsMTQ3ODA5LjkzNzI3NDIyMDk4LDEzMTk3Mi42OTMxMzU5MzEwNCw3NjgxOC44NDkyNDAzNjMwNSwxNTg4MDQuNzM5NjM5ODM3MzIsMTYwMDczLjU4MjYxMTgyMjg3LDI1ODc2NTIuMjA4NzgyOTkxNCwyODExOTk4Ljk3NDUzNDM1OSwyMzA0NzAxLjcyODgwNTE5OTMsMjAwMTg2Ni4wMjk5MzMyNDc3LDI1MDI4MzYuNTkzMTc2NzQ5LDUwODI1Mi41MDk2NjQyNDc5LDI5NzExNTAuMzU0MjU5NzEzNiw1ODgwMDcuNzgxMTMxOTIxOSwxNTYwOTM0LjMzMDk4MTIwODUsMTM5NTE5MC43Nzg1MzEyODgzLDMyMDI3ODIuNTcyOTA2NjgxMywyMzIwMjg5LjUxMjMwMzkxMSw2NTI1NTEuNDYzNzYwMTY0NCwxODk5MjIwLjk5MTU0Njk1MDUsMTI2NDgyOC4wNTgyNzgwODksMTg2ODU0Ny44NTIzMDM1MzMsMjA3NDk3NS4wMjg3Nzg2MTUsMTg0NTg3OC40OTIzNzU3MDE3LDQyMDc2NDAuMDg0NjIxODMyLDI2ODMyOC40Nzk4Mzg3MjgwMywzMzU5LjcwMzgzNDYyNTIxMzQKKzI0LFRodSAxNyBGZWIgMTEsMTQ3ODEwLjA4NTA4NDE1ODI2LDEzMTk3Mi44MjUxMDg2MjQxOCw3NjgxOC45MjYwNTkyMTIyOSwxNTg4MDQuODk4NDQ0NTc2OTcsMTYwMDczLjc0MjY4NTQwNTQ4LDI1ODc2NTQuNzk2NDM1MiwyODEyMDAxLjc4NjUzMzMzMzQsMjMwNDcwNC4wMzM1MDY5MjgsMjAwMTg2OC4wMzE3OTkyNzc4LDI1MDI4MzkuMDk2MDEzMzQyLDUwODI1My4wMTc5MTY3NTc1NiwyOTcxMTUzLjMyNTQxMDA2OCw1ODgwMDguMzY5MTM5NzAzMSwxNTYwOTM1Ljg5MTkxNTUzOTUsMTM5NTE5Mi4xNzM3MjIwNjY3LDMyMDI3ODUuNzc1Njg5MjU0LDIzMjAyOTEuODMyNTkzNDIzMyw2NTI1NTIuMTE2MzExNjI4MywxODk5MjIyLjg5MDc2Nzk0MjIsMTI2NDgyOS4zMjMxMDYxNDcsMTg2ODU0OS43MjA4NTEzODU1LDIwNzQ5NzcuMTAzNzUzNjQzOCwxODQ1ODgwLjMzODI1NDE5NCw0MjA3NjQ0LjI5MjI2MTkxNiwyNjgzMjguNzQ4MTY3MjA3OSwzMzU5LjcwNzE5NDMyOTA0OAorMjUsRnJpIDE4IEZlYiAxMSwxNDc4MTAuMjMyODk0MjQzMzUsMTMxOTcyLjk1NzA4MTQ0OTI4LDc2ODE5LjAwMjg3ODEzODM0LDE1ODgwNS4wNTcyNDk0NzU0MiwxNjAwNzMuOTAyNzU5MTQ4MTYsMjU4NzY1Ny4zODQwODk5OTY2LDI4MTIwMDQuNTk4NTM1MTIsMjMwNDcwNi4zMzgyMTA5NjEzLDIwMDE4NzAuMDMzNjY3MzA5NCwyNTAyODQxLjU5ODg1MjQzOCw1MDgyNTMuNTI2MTY5Nzc1NDYsMjk3MTE1Ni4yOTY1NjMzOTM0LDU4ODAwOC45NTcxNDgwNzIyLDE1NjA5MzcuNDUyODUxNDMxNCwxMzk1MTkzLjU2ODkxNDI0MDUsMzIwMjc4OC45Nzg0NzUwMjk2LDIzMjAyOTQuMTUyODg1MjU2LDY1MjU1Mi43Njg4NjM3NDQ2LDE4OTkyMjQuNzg5OTkwODMzLDEyNjQ4MzAuNTg3OTM1NDcwMywxODY4NTUxLjU4OTQwMTEwNjQsMjA3NDk3OS4xNzg3MzA3NDc3LDE4NDU4ODIuMTg0MTM0NTMyMiw0MjA3NjQ4LjQ5OTkwNjIwOCwyNjgzMjkuMDE2NDk1OTU2MDUsMzM1OS43MTA1NTQwMzYyNDIyCisyNixTYXQgMTkgRmViIDExLDE0NzgxMC4zODA3MDQ0NzYyNCwxMzE5NzMuMDg5MDU0NDA2MzYsNzY4MTkuMDc5Njk3MTQxMjIsMTU4ODA1LjIxNjA1NDUzMjY4LDE2MDA3NC4wNjI4MzMwNTA5LDI1ODc2NTkuOTcxNzQ3MzgwNywyODEyMDA3LjQxMDUzOTcxODMsMjMwNDcwOC42NDI5MTcyOTk2LDIwMDE4NzIuMDM1NTM3MzQzLDI1MDI4NDQuMTAxNjk0MDM2Nyw1MDgyNTQuMDM0NDIzMzAxNjQsMjk3MTE1OS4yNjc3MTk2OSw1ODgwMDkuNTQ1MTU3MDI5MywxNTYwOTM5LjAxMzc4ODg4NDMsMTM5NTE5NC45NjQxMDc4MDk0LDMyMDI3OTIuMTgxMjY0MDA4LDIzMjAyOTYuNDczMTc5NDA5LDY1MjU1My40MjE0MTY1MTM0LDE4OTkyMjYuNjg5MjE1NjIzLDEyNjQ4MzEuODUyNzY2MDU4MiwxODY4NTUzLjQ1Nzk1MjY5NTcsMjA3NDk4MS4yNTM3MDk5MjY1LDE4NDU4ODQuMDMwMDE2NzE2Myw0MjA3NjUyLjcwNzU1NDcwOCwyNjgzMjkuMjg0ODI0OTcyNTYsMzM1OS43MTM5MTM3NDY3OTYKKzI3LFN1biAyMCBGZWIgMTEsMTQ3ODEwLjUyODUxNDg1Njk0LDEzMTk3My4yMjEwMjc0OTU0Myw3NjgxOS4xNTY1MTYyMjA5MiwxNTg4MDUuMzc0ODU5NzQ4NzMsMTYwMDc0LjIyMjkwNzExMzczLDI1ODc2NjIuNTU5NDA3MzUyNSwyODEyMDEwLjIyMjU0NzEyOSwyMzA0NzEwLjk0NzYyNTk0MjUsMjAwMTg3NC4wMzc0MDkzNzg0LDI1MDI4NDYuNjA0NTM4MTM4NSw1MDgyNTQuNTQyNjc3MzM2MSwyOTcxMTYyLjIzODg3ODk1OCw1ODgwMTAuMTMzMTY2NTc0NCwxNTYwOTQwLjU3NDcyNzg5OCwxMzk1MTk2LjM1OTMwMjc3MzQsMzIwMjc5NS4zODQwNTYxODksMjMyMDI5OC43OTM0NzU4ODIsNjUyNTU0LjA3Mzk2OTkzNDgsMTg5OTIyOC41ODg0NDIzMTIzLDEyNjQ4MzMuMTE3NTk3OTExLDE4Njg1NTUuMzI2NTA2MTUzNywyMDc0OTgzLjMyODY5MTE4LDE4NDU4ODUuODc1OTAwNzQ2Myw0MjA3NjU2LjkxNTIwNzQxNiwyNjgzMjkuNTUzMTU0MjU3NCwzMzU5LjcxNzI3MzQ2MDcwOTcKKzI4LE1vbiAyMSBGZWIgMTEsMTQ3ODEwLjY3NjMyNTM4NTQ2LDEzMTk3My4zNTMwMDA3MTY0NSw3NjgxOS4yMzMzMzUzNzc0MywxNTg4MDUuNTMzNjY1MTIzNiwxNjAwNzQuMzgyOTgxMzM2NjUsMjU4NzY2NS4xNDcwNjk5MTIsMjgxMjAxMy4wMzQ1NTczNTE0LDIzMDQ3MTMuMjUyMzM2ODksMjAwMTg3Ni4wMzkyODM0MTU4LDI1MDI4NDkuMTA3Mzg0NzQzLDUwODI1NS4wNTA5MzE4Nzg3NCwyOTcxMTY1LjIxMDA0MTE5Nyw1ODgwMTAuNzIxMTc2NzA3NSwxNTYwOTQyLjEzNTY2ODQ3MjYsMTM5NTE5Ny43NTQ0OTkxMzI3LDMyMDI3OTguNTg2ODUxNTczLDIzMjAzMDEuMTEzNzc0Njc1NCw2NTI1NTQuNzI2NTI0MDA4OCwxODk5MjMwLjQ4NzY3MDkwMDgsMTI2NDgzNC4zODI0MzEwMjg2LDE4Njg1NTcuMTk1MDYxNDgwMiwyMDc0OTg1LjQwMzY3NDUwODcsMTg0NTg4Ny43MjE3ODY2MjIyLDQyMDc2NjEuMTIyODY0MzMxLDI2ODMyOS44MjE0ODM4MTA1NSwzMzU5LjcyMDYzMzE3Nzk4MworMjksVHVlIDIyIEZlYiAxMSwxNDc4MTAuODI0MTM2MDYxOCwxMzE5NzMuNDg0OTc0MDY5NDYsNzY4MTkuMzEwMTU0NjEwNzYsMTU4ODA1LjY5MjQ3MDY1NzI2LDE2MDA3NC41NDMwNTU3MTk2NCwyNTg3NjY3LjczNDczNTA1OSwyODEyMDE1Ljg0NjU3MDM4NiwyMzA0NzE1LjU1NzA1MDE0MjQsMjAwMTg3OC4wNDExNTk0NTUsMjUwMjg1MS42MTAyMzM4NTEsNTA4MjU1LjU1OTE4NjkyOTY2LDI5NzExNjguMTgxMjA2NDA3LDU4ODAxMS4zMDkxODc0Mjg3LDE1NjA5NDMuNjk2NjEwNjA4NCwxMzk1MTk5LjE0OTY5Njg4NzIsMzIwMjgwMS43ODk2NTAxNiwyMzIwMzAzLjQzNDA3NTc4OSw2NTI1NTUuMzc5MDc4NzM1NCwxODk5MjMyLjM4NjkwMTM4ODQsMTI2NDgzNS42NDcyNjU0MTEsMTg2ODU1OS4wNjM2MTg2NzUsMjA3NDk4Ny40Nzg2NTk5MTIyLDE4NDU4ODkuNTY3Njc0MzQ0LDQyMDc2NjUuMzMwNTI1NDU0LDI2ODMzMC4wODk4MTM2MzIsMzM1OS43MjM5OTI4OTg2MTY0CiszMCxXZWQgMjMgRmViIDExLDE0NzgxMC45NzE5NDY4ODU5MywxMzE5NzMuNjE2OTQ3NTU0NDMsNzY4MTkuMzg2OTczOTIwOTIsMTU4ODA1Ljg1MTI3NjM0OTc0LDE2MDA3NC43MDMxMzAyNjI3LDI1ODc2NzAuMzIyNDAyNzk0LDI4MTIwMTguNjU4NTg2MjMyNSwyMzA0NzE3Ljg2MTc2NTY5OTUsMjAwMTg4MC4wNDMwMzc0OTYsMjUwMjg1NC4xMTMwODU0NjEsNTA4MjU2LjA2NzQ0MjQ4ODg2LDI5NzExNzEuMTUyMzc0NTg4NCw1ODgwMTEuODk3MTk4NzM3OCwxNTYwOTQ1LjI1NzU1NDMwNSwxMzk1MjAwLjU0NDg5NjAzNjksMzIwMjgwNC45OTI0NTE5NDk1LDIzMjAzMDUuNzU0Mzc5MjIzLDY1MjU1Ni4wMzE2MzQxMTQ0LDE4OTkyMzQuMjg2MTMzNzc1MywxMjY0ODM2LjkxMjEwMTA1ODMsMTg2ODU2MC45MzIxNzc3Mzg4LDIwNzQ5ODkuNTUzNjQ3MzkwOCwxODQ1ODkxLjQxMzU2MzkxMTYsNDIwNzY2OS41MzgxOTA3ODUsMjY4MzMwLjM1ODE0MzcyMTgsMzM1OS43MjczNTI2MjI2MDk1CiszMSxUaHUgMjQgRmViIDExLDE0NzgxMS4xMTk3NTc4NTc4NywxMzE5NzMuNzQ4OTIxMTcxMzgsNzY4MTkuNDYzNzkzMzA3ODksMTU4ODA2LjAxMDA4MjIwMSwxNjAwNzQuODYzMjA0OTY1ODMsMjU4NzY3Mi45MTAwNzMxMTY0LDI4MTIwMjEuNDcwNjA0ODkxLDIzMDQ3MjAuMTY2NDgzNTYxLDIwMDE4ODIuMDQ0OTE3NTM5LDI1MDI4NTYuNjE1OTM5NTc0LDUwODI1Ni41NzU2OTg1NTYzLDI5NzExNzQuMTIzNTQ1NzQwNyw1ODgwMTIuNDg1MjEwNjM1LDE1NjA5NDYuODE4NDk5NTYyNiwxMzk1MjAxLjk0MDA5NjU4MTgsMzIwMjgwOC4xOTUyNTY5NDIsMjMyMDMwOC4wNzQ2ODQ5Nzc1LDY1MjU1Ni42ODQxOTAxNDYsMTg5OTIzNi4xODUzNjgwNjEzLDEyNjQ4MzguMTc2OTM3OTcwMywxODY4NTYyLjgwMDczODY3MDksMjA3NDk5MS42Mjg2MzY5NDQzLDE4NDU4OTMuMjU5NDU1MzI1LDQyMDc2NzMuNzQ1ODYwMzIzLDI2ODMzMC42MjY0NzQwNzk5NywzMzU5LjczMDcxMjM0OTk2MjIKKzMyLEZyaSAyNSBGZWIgMTEsMTQ3ODExLjI2NzU2ODk3NzY0LDEzMTk3My44ODA4OTQ5MjAzLDc2ODE5LjU0MDYxMjc3MTY5LDE1ODgwNi4xNjg4ODgyMTExLDE2MDA3NS4wMjMyNzk4MjkwNCwyNTg3Njc1LjQ5Nzc0NjAyNjYsMjgxMjAyNC4yODI2MjYzNjE2LDIzMDQ3MjIuNDcxMjAzNzI3NiwyMDAxODg0LjA0Njc5OTU4MzgsMjUwMjg1OS4xMTg3OTYxOSw1MDgyNTcuMDgzOTU1MTMyLDI5NzExNzcuMDk0NzE5ODY0NCw1ODgwMTMuMDczMjIzMTIwMiwxNTYwOTQ4LjM3OTQ0NjM4MSwxMzk1MjAzLjMzNTI5ODUyMiwzMjAyODExLjM5ODA2NTEzNywyMzIwMzEwLjM5NDk5MzA1MjQsNjUyNTU3LjMzNjc0NjgzMDMsMTg5OTIzOC4wODQ2MDQyNDY4LDEyNjQ4MzkuNDQxNzc2MTQ3MywxODY4NTY0LjY2OTMwMTQ3MTcsMjA3NDk5My43MDM2Mjg1NzI5LDE4NDU4OTUuMTA1MzQ4NTg0NSw0MjA3Njc3Ljk1MzUzNDA2OTUsMjY4MzMwLjg5NDgwNDcwNjQ1LDMzNTkuNzM0MDcyMDgwNjc0NwpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9EZW1vZ3JhcGhpY1NFSVJEaXNlYXNlX0ZEX1JlZmVyZW5jZS9EZW1vZ3JhcGhpY01vZGVsL3dvbWVuL0RlYXRoc18yLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvRGVtb2dyYXBoaWNTRUlSRGlzZWFzZV9GRF9SZWZlcmVuY2UvRGVtb2dyYXBoaWNNb2RlbC93b21lbi9EZWF0aHNfMi5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjc4OTkzNgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvRGVtb2dyYXBoaWNTRUlSRGlzZWFzZV9GRF9SZWZlcmVuY2UvRGVtb2dyYXBoaWNNb2RlbC93b21lbi9EZWF0aHNfMi5jc3YKQEAgLTAsMCArMSwzMyBAQAoraXRlcmF0aW9uLHRpbWUsRUctRlJHLUcyMTAwMDEsRUctRlJHLUcyMTAwMDIsRUctRlJHLUcyMTAwMDMsRUctRlJHLUcyMTAwMDQsRUctRlJHLUcyMTAwMDUsRUctTE9FLUcyNDAwMDEsRUctTE9FLUcyNDAwMDIsRUctTE9FLUcyNDAwMDMsRUctTE9FLUcyNDAwMDQsRUctTE9FLUcyNDAwMDUsRUctTE9FLUcyNDAwMDYsRUctTE9FLUcyNDAwMDcsRUctTE9FLUcyNDAwMDgsRUctTE9FLUcyNDAwMDksRUctVVBFLUcyOTAwMDEsRUctVVBFLUcyOTAwMDIsRUctVVBFLUcyOTAwMDMsRUctVVBFLUcyOTAwMDQsRUctVVBFLUcyOTAwMDUsRUctVVBFLUcyOTAwMDYsRUctVVBFLUcyOTAwMDcsRUctVVBFLUcyOTAwMDgsRUctVVJHLUczMDAwMDEsRUctVVJHLUczMDAwMDIsRUctVVJHLUczMDAwMDMsRUctVVJHLUczMDAwMDQKKzEsVHVlIDI1IEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyLFdlZCAyNiBKYW4gMTEsNS43NjQ0NjA3MzQyMjY4NjYsNS4xNDY4MjE4MDEwMzI3NjQsMi45OTU4NjkyMTA1NTk0NzYsNi4xOTMyNDg1OTMwNTM5NTg1LDYuMjQyNzMyMzgwMzA2NjM2LDEwMC45MTYyMTU5NjI0NzM3LDEwOS42NjU1NDczMzk0NjU2Myw4OS44ODEzOTAwMTIwNTk3NCw3OC4wNzEwNTc1ODYwOTUyMSw5Ny42MDg0Nzk3MjQ3OTE1NSwxOS44MjE0MTE4MDEyNjcyNjQsMTE1Ljg3MjMxNDU5ODQ0MDk3LDIyLjkzMTc5ODk1OTI3MDU2Miw2MC44NzUwOTk2NDIwMTI3Nyw1NC40MTEyNDMzMDI3OTg0OSwxMjQuOTA1NzcyMzg3NTE0NTksOTAuNDg5MzAwMTk0MzQ1MDksMjUuNDQ4OTQ3MjAzOTI5MTgsNzQuMDY3OTg5MTU3NDU5ODIsNDkuMzI3MjA5MDYyODUxNDMsNzIuODcxNzYzMDQ0MjE3MzMsODAuOTIyMjQ1ODE0MjY0OTEsNzEuOTg3Njc3NDU3MTE5MDUsMTY0LjA5NDM1MzE4NjU3NTMsMTAuNDY0NTgwNDkwNTIyMjcsMC4xMzEwMjU1NjY5NTc2NDMxNAorMyxUaHUgMjcgSmFuIDExLDExLjUyODkyNzIzMjkxNDQ2NiwxMC4yOTM2NDg3NDg4ODczMjgsNS45OTE3NDE0MTY5ODgxNjIsMTIuMzg2NTAzMzc5MzU2NTEsMTIuNDg1NDcxMDAzMzQ1NjUzLDIwMS44MzI1MzI4NDExNjMzNiwyMTkuMzMxMjA0MzQ0NDc4NiwxNzkuNzYyODY5OTA1NTA5NSwxNTYuMTQyMTkzMjQzMjQ4MDIsMTk1LjIxNzA1NzA1ODA2Mjg0LDM5LjY0Mjg0MzQyMzk0NjMzLDIzMS43NDQ3NDUwNjkxOTY1NCw0NS44NjM2MjA4NTAzNDAwODQsMTIxLjc1MDI2MDE1OTEyNTE5LDEwOC44MjI1NDEwMTY4NDAyOCwyNDkuODExNjY5NjgwODAxNTcsMTgwLjk3ODY5MDg3Nzk5MDM3LDUwLjg5NzkxOTg1NjgwNTU2NSwxNDguMTM2MDUyMzgyOTA4ODIsOTguNjU0NDY3NDUyOTExOTIsMTQ1Ljc0MzU5ODk2MDE5NzcyLDE2MS44NDQ1NzI1NTA3NzU2NCwxNDMuOTc1NDI2OTAxOTE1NTcsMzI4LjE4ODg3MDQ2NzUwMzc2LDIwLjkyOTE3MTQ0NTYyNTAzLDAuMjYyMDUxMjY0OTQwODUzMjMKKzQsRnJpIDI4IEphbiAxMSwxNy4yOTMzOTk0OTYwNjg1NjcsMTUuNDQwNDgwODQzNTY4ODQsOC45ODc2MTY2MTkyODkwNTcsMTguNTc5NzY0MzU4OTEzODUsMTguNzI4MjE1ODY5MTIzMjkzLDMwMi43NDg5NTA2MzYxNjk5LDMyOC45OTY5NzEwMTUxNDg2LDI2OS42NDQ0Mzk2ODA0MzkyLDIzNC4yMTM0MDY5NzE1MzY0NywyOTIuODI1NzMxOTk5OTExNDUsNTkuNDY0Mjk0ODY4MDU3MDI0LDM0Ny42MTcyOTE0MTIzODI2LDY4Ljc5NTQ2NTY3MzIzMTQ5LDE4Mi42MjU0ODE1NTEzOTgxLDE2My4yMzM4OTMxNDIxNzk4LDM3NC43MTc2OTE4Nzk5ODU4NiwyNzEuNDY4MTcyMDUxMDI2MzMsNzYuMzQ2OTE3OTU4NjU0NiwyMjIuMjA0MTg5Njc2NDIxMDQsMTQ3Ljk4MTc3NTE3MDIzMDgsMjE4LjYxNTUwNzc0ODAxNCwyNDIuNzY2OTgwMjA5NjEzMSwyMTUuOTYzMjQ4MzM0NDYxNTMsNDkyLjI4MzU1MTg0Mjk0OTUsMzEuMzkzNzcyODY1MzE4NzQ1LDAuMzkzMDc3MDkzOTQ5NzYxMworNSxTYXQgMjkgSmFuIDExLDIzLjA1Nzg3NzUyMzY5NDkyNywyMC41ODczMTgwODUwODI0NDgsMTEuOTgzNDk0ODE3NDY1MTUyLDI0Ljc3MzAzMTUzMTczMjE2NSwyNC45NzA5NjY5Nzc2NDU4LDQwMy42NjU0NjkzNDc1OTQyNCw0MzguNjYyODQ3MzUxNTg1MjQsMzU5LjUyNjA5OTMzNjkzODYsMzEyLjI4NDY5ODc3MTAzODcsMzkwLjQzNDUwNDU1MDQzNSw3OS4yODU3NjYxMzM2MTkxNSw0NjMuNDg5OTUzNjI4MTE1LDkxLjcyNzMzMzQyNzk2NzcyLDI0My41MDA3NjM4MTg4OTI0NCwyMTcuNjQ1Mjk5Njc4ODcxNDIsNDk5LjYyMzgzODk4NTE5MjMsMzYxLjk1Nzc0MzcxMzU0MzUsMTAxLjc5NTk0MTUwOTUwMTc0LDI5Ni4yNzI0MDEwMzgwNzA1NCwxOTcuMzA5MTMyMjE0ODU3NCwyOTEuNDg3NDg5NDA3NzM5MSwzMjMuNjg5NDY4NzkwODU4MiwyODcuOTUxMTQxNzU0ODI4OSw2NTYuMzc4Mzk3MzEzMDc2Nyw0MS44NTgzODQ3NDk2MTM4NzYsMC41MjQxMDMwNTM5ODQ0OTg0Cis2LFN1biAzMCBKYW4gMTEsMjguODIyMzYxMzE1Nzk5MzE2LDI1LjczNDE2MDQ3MzQzMzI5NSwxNC45NzkzNzYwMTE1MTk0NDUsMzAuOTY2MzA0ODk3ODE3NjU0LDMxLjIxMzcyNDMyODkxOTQyLDUwNC41ODIwODg5NzU1MzczLDU0OC4zMjg4MzMzNTM4OTgyLDQ0OS40MDc4NDg4NzUwOTc2NywzOTAuMzU2MDY4NjQxODMyNyw0ODguMDQzMzc0NzA5NzMxMSw5OS4xMDcyNTcyMjA2NTI1NCw1NzkuMzYyNzMxNzE2NTA5NiwxMTQuNjU5MjI0MTE0NTcxNzEsMzA0LjM3NjEwNjk2MTY2OTA1LDI3Mi4wNTY3NjA2MjY5Njk2LDYyNC41MzAxMTA5OTY1NDU5LDQ1Mi40NDc0MDU4NjU2MzIzLDEyNy4yNDQ5OTA1MDkzNzI0MywzNzAuMzQwNjg2NDY3OTMxNCwyNDYuNjM2NTM4NTg2ODQxMDYsMzY0LjM1OTU0MzkzOTQ0NTgsNDA0LjYxMjAzODI5NDU5MTksMzU5LjkzOTEwNzE2MzA4OTcsODIwLjQ3MzQwNjg3ODA0OTMsNTIuMzIzMDA3MDk4NTIwOSwwLjY1NTEyOTE0NTA0NTE5NTUKKzcsTW9uIDMxIEphbiAxMSwzNC41ODY4NTA4NzIzODc1LDMwLjg4MTAwODAwODYyNjUzLDE3Ljk3NTI2MDIwMTQ1NDkzMywzNy4xNTk1ODQ0NTcxNzY1MSwzNy40NTY0ODc5MjI5NTAzOSw2MDUuNDk4ODA5NTIwMDk5OSw2NTcuOTk0OTI5MDIyMTk3Miw1MzkuMjg5Njg4Mjk1MDA2Myw0NjguNDI3NTE2NTgzOTk2NSw1ODUuNjUyMzQyNDc3ODk3NCwxMTguOTI4NzY4MTI5MTc3MDMsNjk1LjIzNTYyNTY3NzY4MjQsMTM3LjU5MTEzNzczMzA2NjM4LDM2NS4yNTE1MTA5Nzk3ODg4LDMyNi40NjgyNzU5ODY1Mjg3NCw3NDkuNDM2NTA3OTE0MTcxNCw1NDIuOTM3MTU4NTA3MzgzMiwxNTIuNjk0MDY0OTU4MjkyMTMsNDQ0LjQwOTA0NTk2NjA3NzY2LDI5NS45NjM5OTQyODYyMzEwNyw0MzcuMjMxNjcxMzQzMjA3MSw0ODUuNTM0Njg4NzIwODk1MTMsNDMxLjkyNzE0NDU1OTMxNTkzLDk4NC41Njg1ODA1MzgwMzE1LDYyLjc4NzYzOTkxMjA1MDI3LDAuNzg2MTU1MzY3MTMxOTgzNgorOCxUdWUgMSBGZWIgMTEsNDAuMzUxMzQ2MTkzNDY1MjQsMzYuMDI3ODYwNjkwNjY3MywyMC45NzExNDczODcyNzQ2MTMsNDMuMzUyODcwMjA5ODE0OTI0LDQzLjY5OTI1Nzc1OTc0NDk1LDcwNi40MTU2MzA5ODEzODMyLDc2Ny42NjExMzQzNTY1OTE5LDYyOS4xNzE2MTc1OTY3NTQzLDU0Ni40OTkwNDI1OTc2MDgzLDY4My4yNjE0MDc4NTUwMzE0LDEzOC43NTAyOTg4NTkyMTI0Miw4MTEuMTA4NjM1NTExNzQ5MSwxNjAuNTIzMDc0MjgzNDc0NjcsNDI2LjEyNjk3NTg3MzMxMjYsMzgwLjg3OTg0NTc1NzYwMzIsODc0LjM0MzAyOTczODE5NCw2MzMuNDI3MDAxNjM4ODg2NywxNzguMTQzMTY0ODU2Mjg2MjYsNTE4LjQ3NzQ3OTUzMjU4MzQsMzQ1LjI5MTQ5OTMxMzA3Njc3LDUxMC4xMDM4NzE2MTkwOTU4LDU2Ni40NTc0MjAwNjk4NDg3LDUwMy45MTUyNTM5NDM1Nzk1NiwxMTQ4LjY2MzkxODI5MzE4NzIsNzMuMjUyMjgzMTkwMjEyNDUsMC45MTcxODE3MjAyNDQ5OTM5Cis5LFdlZCAyIEZlYiAxMSw0Ni4xMTU4NDcyNzkwMzgzLDQxLjE3NDcxODUxOTU2MDc1NiwyMy45NjcwMzc1Njg5ODE0NzUsNDkuNTQ2MTYyMTU1NzM5MDksNDkuOTQyMDMzODM5MzA5MzUsODA3LjMzMjU1MzM1OTQ4NzksODc3LjMyNzQ0OTM1NzE5MTksNzE5LjA1MzYzNjc4MDQzMTcsNjI0LjU3MDY0NjY4Mjc0NjEsNzgwLjg3MDU3MDg0MTIzMDgsMTU4LjU3MTg0OTQxMDc3ODU1LDkyNi45ODE3NjEyMTg4MjU2LDE4My40NTUwMzM3NjU4MTk1LDQ4Ny4wMDI1MDE2NDIzMDEyNCw0MzUuMjkxNDY5OTQwMjQ3NDUsOTk5LjI0OTY3NjQ2ODczODQsNzIzLjkxNjkzNTI2MDIzMzUsMjAzLjU5MjI5MDIwMzM4MDMsNTkyLjU0NTk4NzE2NzUyMjgsMzk0LjYxOTA1MzY2NzQyNzUsNTgyLjk3NjE0NDc2NzE4NDgsNjQ3LjM4MDIzMjM0MTUzMzcsNTc1LjkwMzQzNTMxNTk1MjUsMTMxMi43NTk0MjAxNDM2ODA3LDgzLjcxNjkzNjkzMzAxNzksMS4wNDgyMDgyMDQzODQzNTcyCisxMCxUaHUgMyBGZWIgMTEsNTEuODgwMzU0MTI5MTEyNDUsNDYuMzIxNTgxNDk1MzEyMDQsMjYuOTYyOTMwNzQ2NTc4NTIsNTUuNzM5NDYwMjk0OTU1MjEsNTYuMTg0ODE2MTYxNjQ5ODM0LDkwOC4yNDk1NzY2NTQ1MTUsOTg2Ljk5Mzg3NDAyNDEwNjgsODA4LjkzNTc0NTg0NjEyODMsNzAyLjY0MjMyODgzOTQ4OCw4NzguNDc5ODMxNDM2NTkzMSwxNzguMzkzNDE5NzgzODk1MjQsMTA0Mi44NTUwMDI3OTkwMjc3LDIwNi4zODcwMTYxODAxMjM4NSw1NDcuODc4MDg4Mjg2ODE1Nyw0ODkuNzAzMTQ4NTM0NTE1OSwxMTI0LjE1NjQ0ODEwNTkyOTUsODE0LjQwNjk1OTM3MTUxMzgsMjI5LjA0MTQ0MDk5OTU5OTY3LDY2Ni42MTQ1Njg4NzA5Njk3LDQ0My45NDY2NTczNDkzMzI2LDY1NS44NDg0OTA3ODc1NDY5LDcyOC4zMDMxMjU1MzYwMzA4LDY0Ny44OTE2ODg2NzY1MDY5LDE0NzYuODU1MDg2MDg5Njc2Miw5NC4xODE2MDExNDA0NzcxMSwxLjE3OTIzNDgxOTU1MDIwNDcKKzExLEZyaSA0IEZlYiAxMSw1Ny42NDQ4NjY3NDM2OTM0NCw1MS40Njg0NDk2MTc5MjYzLDI5Ljk1ODgyNjkyMDA2ODc0NSw2MS45MzI3NjQ2Mjc0Njk0Niw2Mi40Mjc2MDQ3MjY3NzI2MzYsMTAwOS4xNjY3MDA4NjY1NjUzLDEwOTYuNjYwNDA4MzU3NDQ2Niw4OTguODE3OTQ0NzkzOTMzOSw3ODAuNzE0MDg5MDY3OTEyLDk3Ni4wODkxODk2NDEyMTYxLDE5OC4yMTUwMDk5Nzg1ODIzLDExNTguNzI4MzYwMjUyNDcxNSwyMjkuMzE5MDIxNTI2NDEwNiw2MDguNzUzNzM1ODA2OTE2OCw1NDQuMTE0ODgxNTQwNDYyOSwxMjQ5LjA2MzM0NDY0OTg5Miw5MDQuODk3MDczOTcyODE4MiwyNTQuNDkwNjE3MjQ0OTY5ODUsNzQwLjY4MzIyNDY0Mjk5ODQsNDkzLjI3NDMxMDM1ODg0MTQsNzI4LjcyMDkwOTY4MDI1NSw4MDkuMjI2MDk5NjUzNDIxMyw3MTkuODgwMDE0MDI1MzE0NiwxNjQwLjk1MDkxNjEzMTMzNzYsMTA0LjY0NjI3NTgxMjYwMDUyLDEuMzEwMjYxNTY1NzQyNjY3NQorMTIsU2F0IDUgRmViIDExLDYzLjQwOTM4NTEyMjc4NzA1LDU2LjYxNTMyMjg4NzQwODY4LDMyLjk1NDcyNjA4OTQ1NTE0LDY4LjEyNjA3NTE1MzI4ODA0LDY4LjY3MDM5OTUzNDY4NDAxLDExMTAuMDgzOTI1OTk1NzQsMTIwNi4zMjcwNTIzNTczMjA2LDk4OC43MDAyMzM2MjM5Mzg0LDg1OC43ODU5MjczNjgwOTYzLDEwNzMuNjk4NjQ1NDU1MTk3MywyMTguMDM2NjE5OTk0ODU5NTQsMTI3NC42MDE4MzM1NzkyNzI4LDI1Mi4yNTEwNDk4MDQ3MDI3LDY2OS42Mjk0NDQyMDI2NjU0LDU5OC41MjY2Njg5NTgxNDI5LDEzNzMuOTcwMzY2MTAwNzUxMyw5OTUuMzg3Mjc5MDY0MjM3MywyNzkuOTM5ODE4OTM5NTE2Myw4MTQuNzUxOTU0NDgzNjgyOSw1NDIuNjAyMDEyNjk2MDAzMiw4MDEuNTkzNDAxNDQ1MzgyLDg5MC4xNDkxNTQ2OTM3ODU5LDc5MS44Njg0MTEzNjI0NDc3LDE4MDUuMDQ2OTEwMjY4ODI5MiwxMTUuMTEwOTYwOTQ5Mzk4NiwxLjQ0MTI4ODQ0Mjk2MTg3NjQKKzEzLFN1biA2IEZlYiAxMSw2OS4xNzM5MDkyNjYzOTkwNCw2MS43NjIyMDEzMDM3NjQzMywzNS45NTA2MjgyNTQ3NDA3MSw3NC4zMTkzOTE4NzI0MTcxNiw3NC45MTMyMDA1ODUzOTAxOSwxMjExLjAwMTI1MjA0MjEzOTYsMTMxNS45OTM4MDYwMjM4Mzg1LDEwNzguNTgyNjEyMzM2MjMxNyw5MzYuODU3ODQzNzQwMTE4OCwxMTcxLjMwODE5ODg3ODYzNDQsMjM3Ljg1ODI0OTgzMjc0NjgsMTM5MC40NzU0MjI3Nzk1NDc0LDI3NS4xODMxMDEwMTUwMjMwNiw3MzAuNTA1MjEzNDc0MTIyMyw2NTIuOTM4NTEwNzg3NjEwMywxNDk4Ljg3NzUxMjQ1ODYzMiwxMDg1Ljg3NzU3NDY0NTg2MTQsMzA1LjM4OTA0NjA4MzI2NDQsODg4LjgyMDc1ODM5MzA5NzIsNTkxLjkyOTc2NDM2MDg2NzIsODc0LjQ2NTk2NjA4MzAwMDgsOTcxLjA3MjI5MDY1NzIwNTUsODYzLjg1Njg4MDY4Nzk3ODEsMTk2OS4xNDMwNjg1MDIzMTQ3LDEyNS41NzU2NTY1NTA4ODE4MiwxLjU3MjMxNTQ1MTIwNzk2MjUKKzE0LE1vbiA3IEZlYiAxMSw3NC45Mzg0MzkxNzQ1MzUxOCw2Ni45MDkwODQ4NjY5OTg0LDM4Ljk0NjUzMzQxNTkyODQzNSw4MC41MTI3MTQ3ODQ4NjMsODEuMTU2MDA3ODc4ODk3NDEsMTMxMS45MTg2NzkwMDU4NjU0LDE0MjUuNjYwNjY5MzU3MTEwMiwxMTY4LjQ2NTA4MDkzMDkwMzcsMTAxNC45Mjk4MzgxODQwNTc4LDEyNjguOTE3ODQ5OTExNjI0NywyNTcuNjc5ODk5NDkyMjYzODcsMTUwNi4zNDkxMjc4NTM0MTExLDI5OC4xMTUxNzUxNTczOTQ2LDc5MS4zODEwNDM2MjEzNDg2LDcwNy4zNTA0MDcwMjg5MTk2LDE2MjMuNzg0NzgzNzIzNjU5LDExNzYuMzY3OTYwNzE3NzgxMiwzMzAuODM4Mjk4Njc2MjM5Nyw5NjIuODg5NjM2MzcxMzE1NCw2NDEuMjU3NTY1MzUzNDgzMSw5NDcuMzM4NjAzNTkzMTg0MiwxMDUxLjk5NTUwNzU0Mzc2MSw5MzUuODQ1NDIyMDAxOTc3OCwyMTMzLjIzOTM5MDgzMTk1ODYsMTM2LjA0MDM2MjYxNzA2MDYyLDEuNzAzMzQyNTkwNDgxMDU2OQorMTUsVHVlIDggRmViIDExLDgwLjcwMjk3NDg0NzIwMTIyLDcyLjA1NTk3MzU3NzExNjAzLDQxLjk0MjQ0MTU3MzAyMTMzLDg2LjcwNjA0Mzg5MDYzMTczLDg3LjM5ODgyMTQxNTIxMTkzLDE0MTIuODM2MjA2ODg3MDE4LDE1MzUuMzI3NjQyMzU3MjQ1MiwxMjU4LjM0NzYzOTQwODA0NDQsMTA5My4wMDE5MTA2OTk5OTEyLDEzNjYuNTI3NTk4NTU0MjY2MiwyNzcuNTAxNTY4OTczNDMwNiwxNjIyLjIyMjk0ODgwMDk4LDMyMS4wNDcyNzIyMzE4NDAzNCw4NTIuMjU2OTM0NjQ0NDA1LDc2MS43NjIzNTc2ODIxMjUxLDE3NDguNjkyMTc5ODk1OTU3NSwxMjY2Ljg1ODQzNzI4MDA4NywzNTYuMjg3NTc2NzE4NDY3NTYsMTAzNi45NTg1ODg0MTg0MTE2LDY5MC41ODU0MTU2NzM4OTk5LDEwMjAuMjExMzEzOTc2MDA1MiwxMTMyLjkxODgwNTM1MzUzMzYsMTAwNy44MzQwMzUzMDQ1MTg4LDIyOTcuMzM1ODc3MjU3OTI1LDE0Ni41MDUwNzkxNDc5NDU1LDEuODM0MzY5ODYwNzgxMjkwNAorMTYsV2VkIDkgRmViIDExLDg2LjQ2NzUxNjI4NDQwMjkzLDc3LjIwMjg2NzQzNDEyMjM4LDQ0LjkzODM1MjcyNjAyMjM3LDkyLjg5OTM3OTE4OTcyOTU5LDkzLjY0MTY0MTE5NDMzOTk4LDE1MTMuNzUzODM1Njg1Njk4NywxNjQ0Ljk5NDcyNTAyNDM1MywxMzQ4LjIzMDI4Nzc2Nzc0MzcsMTE3MS4wNzQwNjEyODc5OTcyLDE0NjQuMTM3NDQ0ODA2NjU2MywyOTcuMzIzMjU4Mjc2MjY2ODcsMTczOC4wOTY4ODU2MjIzNjk5LDM0My45NzkzOTIyMzgzODMxLDkxMy4xMzI4ODY1NDMzNTI0LDgxNi4xNzQzNjI3NDcyODEzLDE4NzMuNTk5NzAwOTc1NjUyLDEzNTcuMzQ5MDA0MzMyODY5MywzODEuNzM2ODgwMjA5OTczNSwxMTExLjAyNzYxNDUzNDQ1OTksNzM5LjkxMzMxNTMyMjE2NywxMDkzLjA4NDA5NzIzMTUzNjQsMTIxMy44NDIxODQwODY2MDM4LDEwNzkuODIyNzIwNTk1NjczMiwyNDYxLjQzMjUyNzc4MDM3NzMsMTU2Ljk2OTgwNjE0MzU0NjkyLDEuOTY1Mzk3MjYyMTA4Nzk0MworMTcsVGh1IDEwIEZlYiAxMSw5Mi4yMzIwNjM0ODYxNDYwOSw4Mi4zNDk3NjY0MzgwMjI1OCw0Ny45MzQyNjY4NzQ5MzQ1Nyw5OS4wOTI3MjA2ODIxNjI3NCw5OS44ODQ0NjcyMTYyODc4MiwxNjE0LjY3MTU2NTQwMjAwODEsMTc1NC42NjE5MTczNTg1NDM2LDE0MzguMTEzMDI2MDEwMDkxMywxMjQ5LjE0NjI4OTk0ODE1MzcsMTU2MS43NDczODg2Njg4OTI3LDMxNy4xNDQ5Njc0MDA3OTI0NCwxODUzLjk3MDkzODMxNzY5NjQsMzY2LjkxMTUzNTE3NzA0NTk1LDk3NC4wMDg4OTkzMTgyNTE3LDg3MC41ODY0MjIyMjQ0NDI2LDE5OTguNTA3MzQ2OTYyODY3NiwxNDQ3LjgzOTY2MTg3NjIxODgsNDA3LjE4NjIwOTE1MDc4MjksMTE4NS4wOTY3MTQ3MTk1MzQyLDc4OS4yNDEyNjQyOTgzMzM4LDExNjUuOTU2OTUzMzU5ODUxLDEyOTQuNzY1NjQzNzQzMDUyOCwxMTUxLjgxMTQ3Nzg3NTUxMywyNjI1LjUyOTM0MjM5OTQ4MDQsMTY3LjQzNDU0MzYwMzg3NTM0LDIuMDk2NDI0Nzk0NDYzNjk5NgorMTgsRnJpIDExIEZlYiAxMSw5Ny45OTY2MTY0NTI0MzY0NCw4Ny40OTY2NzA1ODg4MjE3OSw1MC45MzAxODQwMTk3NjA5MiwxMDUuMjg2MDY4MzY3OTM3MzgsMTA2LjEyNzI5OTQ4MTA2MTY4LDE3MTUuNTg5Mzk2MDM2MDQ3MiwxODY0LjMyOTIxOTM1OTkyNjYsMTUyNy45OTU4NTQxMzUxNzcsMTMyNy4yMTg1OTY2ODA1MzksMTY1OS4zNTc0MzAxNDEwNzI5LDMzNi45NjY2OTYzNDcwMjcxLDE5NjkuODQ1MTA2ODg3MDc1NiwzODkuODQzNzAxMDQ3ODUxNywxMDM0Ljg4NDk3Mjk2OTE2MzgsOTI0Ljk5ODUzNjExMzY2MzIsMjEyMy40MTUxMTc4NTc3MjksMTUzOC4zMzA0MDk5MTAyMjU2LDQzMi42MzU1NjM1NDA5MjEyLDEyNTkuMTY1ODg4OTczNzA4Nyw4MzguNTY5MjYyNjAyNDQ5NSwxMjM4LjgyOTg4MjM2MTAyMTYsMTM3NS42ODkxODQzMjI5NjE0LDEyMjMuODAwMzA3MTQ0MTA5OSwyNzg5LjYyNjMyMTExNTM5ODIsMTc3Ljg5OTI5MTUyODk0MTIsMi4yMjc0NTI0NTc4NDYxMzcKKzE5LFNhdCAxMiBGZWIgMTEsMTAzLjc2MTE3NTE4MzI3OTc2LDkyLjY0MzU3OTg4NjUyNTE1LDUzLjkyNjEwNDE2MDUwNDQxNiwxMTEuNDc5NDIyMjQ3MDU5NywxMTIuMzcwMTM3OTg4NjY3OCwxODE2LjUwNzMyNzU4NzkxNywxOTczLjk5NjYzMTAyODYxMTUsMTYxNy44Nzg3NzIxNDMwOTEsMTQwNS4yOTA5ODE0ODUyMzA4LDE3NTYuOTY3NTY5MjIzMjk0NSwzNTYuNzg4NDQ1MTE0OTkwNzQsMjA4NS43MTkzOTEzMzA2MjM3LDQxMi43NzU4ODk4NTA4MjMzLDEwOTUuNzYxMTA3NDk2MTQ5NCw5NzkuNDEwNzA0NDE0OTk3OSwyMjQ4LjMyMzAxMzY2MDM2MTUsMTYyOC44MjEyNDg0MzQ5ODA2LDQ1OC4wODQ5NDMzODA0MTM5NiwxMzMzLjIzNTEzNzI5NzA1NzUsODg3Ljg5NzMxMDIzNDU2MzUsMTMxMS43MDI4ODQyMzUxMjEyLDE0NTYuNjEyODA1ODI2NDEwNywxMjk1Ljc4OTIwODQwMTUzNjEsMjk1My43MjM0NjM5MjgyOTQ3LDE4OC4zNjQwNDk5MTg3NTUsMi4zNTg0ODAyNTIyNTYyMzgKKzIwLFN1biAxMyBGZWIgMTEsMTA5LjUyNTczOTY3ODY4MTgyLDk3Ljc5MDQ5NDMzMTEzNzgsNTYuOTIyMDI3Mjk3MTY4MDUsMTE3LjY3Mjc4MjMxOTUzNTkxLDExOC42MTI5ODI3MzkxMTI0NCwxOTE3LjQyNTM2MDA1NzcxODMsMjA4My42NjQxNTIzNjQ3MDgsMTcwNy43NjE3ODAwMzM5MjMsMTQ4My4zNjM0NDQzNjIzMDc1LDE4NTQuNTc3ODA1OTE1NjU1MywzNzYuNjEwMjEzNzA0NzAzMTQsMjIwMS41OTM3OTE2NDg0NTYsNDM1LjcwODEwMTU4NTk4Mzc0LDExNTYuNjM3MzAyODk5MjY5NiwxMDMzLjgyMjkyNzEyODUwMDksMjM3My4yMzEwMzQzNzA4ODk2LDE3MTkuMzEyMTc3NDUwNTc0Miw0ODMuNTM0MzQ4NjY5Mjg2NTQsMTQwNy4zMDQ0NTk2ODk2NTQ1LDkzNy4yMjU0MDcxOTQ3MjUyLDEzODQuNTc1OTU4OTgyMjIyOCwxNTM3LjUzNjUwODI1MzQ4MTUsMTM2Ny43NzgxODE2NDc4NjM3LDMxMTcuODIwNzcwODM4MzM0LDE5OC44Mjg4MTg3NzMzMjcxOSwyLjQ4OTUwODE3NzY5NDEzMworMjEsTW9uIDE0IEZlYiAxMSwxMTUuMjkwMzA5OTM4NjQ4MzYsMTAyLjkzNzQxMzkyMjY2NDg5LDU5LjkxNzk1MzQyOTc1NDgyNCwxMjMuODY2MTQ4NTg1MzcyMTksMTI0Ljg1NTgzMzczMjQwMTgyLDIwMTguMzQzNDkzNDQ1NTUyLDIxOTMuMzMxNzgzMzY4MzI2LDE3OTcuNjQ0ODc3ODA3NzYzLDE1NjEuNDM1OTg1MzExODQ3MiwxOTUyLjE4ODE0MDIxODI1MjgsMzk2LjQzMjAwMjExNjE4NDEsMjMxNy40NjgzMDc4NDA2ODgzLDQ1OC42NDAzMzYyNTMzNTU5LDEyMTcuNTEzNTU5MTc4NTg1MiwxMDg4LjIzNTIwNDI1NDIyNjYsMjQ5OC4xMzkxNzk5ODk0Mzg2LDE4MDkuODAzMTk2OTU3MDk2Niw1MDguOTgzNzc5NDA3NTY0NCwxNDgxLjM3Mzg1NjE1MTU3NCw5ODYuNTUzNTUzNDgyOTgzOCwxNDU3LjQ0OTEwNjYwMjM5OSwxNjE4LjQ2MDI5MTYwNDI1NDcsMTQzOS43NjcyMjY4ODMxNjQzLDMyODEuOTE4MjQxODQ1NjgsMjA5LjI5MzU5ODA5MjY2ODIyLDIuNjIwNTM2MjM0MTU5OTU0CisyMixUdWUgMTUgRmViIDExLDEyMS4wNTQ4ODU5NjMxODUxNywxMDguMDg0MzM4NjYxMTExNTcsNjIuOTEzODgyNTU4MjY3NzMsMTMwLjA1OTUyMTA0NDU3NDcyLDEzMS4wOTg2OTA5Njg1NDIyLDIxMTkuMjYxNzI3NzUxNTE5LDIzMDIuOTk5NTI0MDM5NTc0NywxODg3LjUyODA2NTQ2NDcwMDQsMTYzOS41MDg2MDQzMzM5Mjc3LDIwNDkuNzk4NTcyMTMxMTg0OCw0MTYuMjUzODEwMzQ5NDUzNSwyNDMzLjM0MjkzOTkwNzQzNyw0ODEuNTcyNTkzODUyOTYyNywxMjc4LjM4OTg3NjMzNDE1NzIsMTE0Mi42NDc1MzU3OTIyMjkzLDI2MjMuMDQ3NDUwNTE2MTMzMywxOTAwLjI5NDMwNjk1NDYzODYsNTM0LjQzMzIzNTU5NTI3MywxNTU1LjQ0MzMyNjY4Mjg5LDEwMzUuODgxNzQ5MDk5Mzg4OCwxNTMwLjMyMjMyNzA5NTcyMywxNjk5LjM4NDE1NTg3ODgxMTMsMTUxMS43NTYzNDQxMDc1MTA0LDM0NDYuMDE1ODc2OTUwNDk3LDIxOS43NTgzODc4NzY3ODg2LDIuNzUxNTY0NDIxNjUzODMxNQorMjMsV2VkIDE2IEZlYiAxMSwxMjYuODE5NDY3NzUyMjk4LDExMy4yMzEyNjg1NDY0ODMsNjUuOTA5ODE0NjgyNzA5NzcsMTM2LjI1Mjg5OTY5NzE0OTczLDEzNy4zNDE1NTQ0NDc1Mzk4LDIyMjAuMTgwMDYyOTc1NzIxLDI0MTIuNjY3Mzc0Mzc4NTY0NSwxOTc3LjQxMTM0MzAwNDgyNTUsMTcxNy41ODEzMDE0Mjg2MjczLDIxNDcuNDA5MTAxNjU0NTQ4NSw0MzYuMDc1NjM4NDA0NTMxMSwyNTQ5LjIxNzY4Nzg0ODgxOCw1MDQuNTA0ODc0Mzg0ODI3MTMsMTMzOS4yNjYyNTQzNjYwNDYzLDExOTcuMDU5OTIxNzQyNTYzNiwyNzQ3Ljk1NTg0NTk1MTA5ODYsMTk5MC43ODU1MDc0NDMyOTA3LDU1OS44ODI3MTcyMzI0Mzc4LDE2MjkuNTEyODcxMjgzNjc2NSwxMDg1LjIwOTk5NDA0Mzk4OTQsMTYwMy4xOTU2MjA0NjIyNjc1LDE3ODAuMzA4MTAxMDc3MjMyLDE1ODMuNzQ1NTMzMzIwOTczNCwzNjEwLjExMzY3NjE1Mjk0OSwyMzAuMjIzMTg4MTI1Njk4NzMsMi44ODI1OTI3NDAxNzU4OTY0CisyNCxUaHUgMTcgRmViIDExLDEzMi41ODQwNTUzMDU5OTI2MiwxMTguMzc4MjAzNTc4Nzg0MzEsNjguOTA1NzQ5ODAzMDgzOTIsMTQyLjQ0NjI4NDU0MzEwMzQsMTQzLjU4NDQyNDE2OTQwMDksMjMyMS4wOTg0OTkxMTgyNTc3LDI1MjIuMzM1MzM0Mzg1NDA0NiwyMDY3LjI5NDcxMDQyODIyODQsMTc5NS42NTQwNzY1OTYwMjQsMjI0NS4wMTk3Mjg3ODg0NDE2LDQ1NS44OTc0ODYyODE0MzY4LDI2NjUuMDkyNTUxNjY0OTQ2OCw1MjcuNDM3MTc3ODQ4OTcyLDE0MDAuMTQyNjkzMjc0MzEzNCwxMjUxLjQ3MjM2MjEwNTI4MzgsMjg3Mi44NjQzNjYyOTQ0NTksMjA4MS4yNzY3OTg0MjMxNDMsNTg1LjMzMjIyNDMxOTA4NDMsMTcwMy41ODI0ODk5NTQwMDc1LDExMzQuNTM4Mjg4MzE2ODM0NywxNjc2LjA2ODk4NjcwMjEwNTMsMTg2MS4yMzIxMjcxOTk1OTgyLDE2NTUuNzM0Nzk0NTIzNjI1OSwzNzc0LjIxMTYzOTQ1MzIwMSwyNDAuNjg3OTk4ODM5NDA5MTIsMy4wMTM2MjExODk3MjYyNzk3CisyNSxGcmkgMTggRmViIDExLDEzOC4zNDg2NDg2MjQyNzQ4LDEyMy41MjUxNDM3NTgwMjA2NSw3MS45MDE2ODc5MTkzOTMyLDE0OC42Mzk2NzU1ODI0NDE5LDE0OS44MjczMDAxMzQxMzE3MiwyNDIyLjAxNzAzNjE3OTIzMDcsMjYzMi4wMDM0MDQwNjAyMDQ1LDIxNTcuMTc4MTY3NzM0OTk4NiwxODczLjcyNjkyOTgzNjE5NTcsMjM0Mi42MzA0NTM1MzI5NjIsNDc1LjcxOTM1Mzk4MDE5MDMsMjc4MC45Njc1MzEzNTU5Mzk2LDU1MC4zNjk1MDQyNDU0MjA0LDE0NjEuMDE5MTkzMDU5MDE5NSwxMzA1Ljg4NDg1Njg4MDQ0NDQsMjk5Ny43NzMwMTE1NDYzNCwyMTcxLjc2ODE3OTg5NDI4NjcsNjEwLjc4MTc1Njg1NTIzNzcsMTc3Ny42NTIxODI2OTM5NTcyLDExODMuODY2NjMxOTE3OTc0NSwxNzQ4Ljk0MjQyNTgxNTMwOTQsMTk0Mi4xNTYyMzQyNDU5OTAyLDE3MjcuNzI0MTI3NzE1NTM5NSwzOTM4LjMwOTc2Njg1MTQxNTYsMjUxLjE1MjgyMDAxNzkzMDIyLDMuMTQ0NjQ5NzcwMzA1MTEyNAorMjYsU2F0IDE5IEZlYiAxMSwxNDQuMTEzMjQ3NzA3MTUwMywxMjguNjcyMDg5MDg0MTk3MTgsNzQuODk3NjI5MDMxNjQwNTksMTU0LjgzMzA3MjgxNTE3MTQ1LDE1Ni4wNzAxODIzNDE3Mzg1LDI1MjIuOTM1Njc0MTU4NzQwOCwyNzQxLjY3MTU4MzQwMzA3NDIsMjI0Ny4wNjE3MTQ5MjUyMjYsMTk1MS43OTk4NjExNDkyMjA4LDI0NDAuMjQxMjc1ODg4MjA3LDQ5NS41NDEyNDE1MDA4MTE1NywyODk2Ljg0MjYyNjkyMTkxMiw1NzMuMzAxODUzNTc0MTk1MiwxNTIxLjg5NTc1MzcyMDIyNTIsMTM2MC4yOTc0MDYwNjgxLDMxMjIuNjgxNzgxNzA2ODY2MywyMjYyLjI1OTY1MTg1NjgxMTYsNjM2LjIzMTMxNDg0MDkyMzgsMTg1MS43MjE5NDk1MDM1OTk3LDEyMzMuMTk1MDI0ODQ3NDU3NywxODIxLjgxNTkzNzgwMTk1MjUsMjAyMy4wODA0MjIyMTY0ODkzLDE3OTkuNzEzNTMyODk2Nzg2LDQxMDIuNDA4MDU4MzQ3NzU4LDI2MS42MTc2NTE2NjEyNzI1MywzLjI3NTY3ODQ4MTkxMjUyNgorMjcsU3VuIDIwIEZlYiAxMSwxNDkuODc3ODUyNTU0NjI0ODcsMTMzLjgxOTAzOTU1NzMxOTAzLDc3Ljg5MzU3MzEzOTgyOTEsMTYxLjAyNjQ3NjI0MTI5ODIsMTYyLjMxMzA3MDc5MjIyNzQ4LDI2MjMuODU0NDEzMDU2ODg4NSwyODUxLjMzOTg3MjQxNDEyMzQsMjMzNi45NDUzNTE5OTkwMDA2LDIwMjkuODcyODcwNTM1MTc3LDI1MzcuODUyMTk1ODU0Mjc0LDUxNS4zNjMxNDg4NDMzMjAzLDMwMTIuNzE3ODM4MzYyOTgwMyw1OTYuMjM0MjI1ODM1MzE5MywxNTgyLjc3MjM3NTI1Nzk5MTgsMTQxNC43MTAwMDk2NjgzMDQ2LDMyNDcuNTkwNjc2Nzc2MTYyNiwyMzUyLjc1MTIxNDMxMDgwOSw2NjEuNjgwODk4Mjc2MTY3OCwxOTI1Ljc5MTc5MDM4MzAwOSwxMjgyLjUyMzQ2NzEwNTMzNCwxODk0LjY4OTUyMjY2MjEwNzcsMjEwNC4wMDQ2OTExMTExNzYzLDE4NzEuNzAzMDEwMDY3NDM4LDQyNjYuNTA2NTEzOTQyMzkxLDI3Mi4wODI0OTM3Njk0NDY0NCwzLjQwNjcwNzMyNDU0ODY1MQorMjgsTW9uIDIxIEZlYiAxMSwxNTUuNjQyNDYzMTY2NzA0MywxMzguOTY1OTk1MTc3MzkxMzYsODAuODg5NTIwMjQzOTYxNzEsMTY3LjIxOTg4NTg2MDgyODQsMTY4LjU1NTk2NTQ4NTYwNDksMjcyNC43NzMyNTI4NzM3NzUsMjk2MS4wMDgyNzEwOTM0NjE2LDI0MjYuODI5MDc4OTU2NDEyNiwyMTA3Ljk0NTk1Nzk5NDE0MjYsMjYzNS40NjMyMTM0MzEyNjE1LDUzNS4xODUwNzYwMDc3MzY1LDMxMjguNTkzMTY1Njc5MjU5NSw2MTkuMTY2NjIxMDI4ODE1NywxNjQzLjY0OTA1NzY3MjM3OTcsMTQ2OS4xMjI2Njc2ODExMTI3LDMzNzIuNDk5Njk2NzU0MzU0LDI0NDMuMjQyODY3MjU2MzY4Myw2ODcuMTMwNTA3MTYwOTk1MywxOTk5Ljg2MTcwNTMzMjI1OTEsMTMzMS44NTE5NTg2OTE2NTI1LDE5NjcuNTYzMTgwMzk1ODQ3NywyMTg0LjkyOTA0MDkzMDEzMjUsMTk0My42OTI1NTkyMjc1NjcyLDQ0MzAuNjA1MTMzNjM1NDgsMjgyLjU0NzM0NjM0MjQ2MjUsMy41Mzc3MzYyOTgyMTM2MTkKKzI5LFR1ZSAyMiBGZWIgMTEsMTYxLjQwNzA3OTU0MzM5NDMzLDE0NC4xMTI5NTU5NDQ0MTkzLDgzLjg4NTQ3MDM0NDA0MTQ0LDE3My40MTMzMDE2NzM3NjgyNSwxNzQuNzk4ODY2NDIxODc3MDIsMjgyNS42OTIxOTM2MDk1MDIsMzA3MC42NzY3Nzk0NDExOTg1LDI1MTYuNzEyODk1Nzk3NTUxNSwyMTg2LjAxOTEyMzUyNjE5NiwyNzMzLjA3NDMyODYxOTI2NjUsNTU1LjAwNzAyMjk5NDA3OTgsMzI0NC40Njg2MDg4NzA4NjYzLDY0Mi4wOTkwMzkxNTQ3MDczLDE3MDQuNTI1ODAwOTYzNDUwMSwxNTIzLjUzNTM4MDEwNjU3OSwzNDk3LjQwODg0MTY0MTU2NTIsMjUzMy43MzQ2MTA2OTM1ODA2LDcxMi41ODAxNDE0OTU0MzE3LDIwNzMuOTMxNjk0MzUxNDI0LDEzODEuMTgwNDk5NjA2NDYyNywyMDQwLjQzNjkxMTAwMzI0NTMsMjI2NS44NTM0NzE2NzM0Mzg0LDIwMTUuNjgyMTgwMzc3MjQ1NSw0NTk0LjcwMzkxNzQyNzE4OTUsMjkzLjAxMjIwOTM4MDMzMTEsMy42Njg3NjU0MDI5MDc1NjAzCiszMCxXZWQgMjMgRmViIDExLDE2Ny4xNzE3MDE2ODQ3MDA3NCwxNDkuMjU5OTIxODU4NDA4LDg2Ljg4MTQyMzQ0MDA3MTI2LDE3OS42MDY3MjM2ODAxMjM4OCwxODEuMDQxNzczNjAxMDUwMSwyOTI2LjYxMTIzNTI2NDE2OSwzMTgwLjM0NTM5NzQ1NzQ0MzYsMjYwNi41OTY4MDI1MjI1MDcsMjI2NC4wOTIzNjcxMzE0MTQ0LDI4MzAuNjg1NTQxNDE4Mzg2NSw1NzQuODI4OTg5ODAyMzcsMzM2MC4zNDQxNjc5Mzc5MTYsNjY1LjAzMTQ4MDIxMzAxNywxNzY1LjQwMjYwNTEzMTI2NCwxNTc3Ljk0ODE0Njk0NDc1NzYsMzYyMi4zMTgxMTE0Mzc5MjEzLDI2MjQuMjI2NDQ0NjIyNTM2Myw3MzguMDI5ODAxMjc5NTAyNCwyMTQ4LjAwMTc1NzQ0MDU3ODMsMTQzMC41MDkwODk4NDk4MTM4LDIxMTMuMzEwNzE0NDg0MzczNCwyMzQ2Ljc3Nzk4MzM0MTE3NSwyMDg3LjY3MTg3MzUxNjU0NSw0NzU4LjgwMjg2NTMxNzY4MjUsMzAzLjQ3NzA4Mjg4MzA2Mjc0LDMuNzk5Nzk0NjM4NjMwNjA2NQorMzEsVGh1IDI0IEZlYiAxMSwxNzIuOTM2MzI5NTkwNjI5MywxNTQuNDA2ODkyOTE5MzYyNjMsODkuODc3Mzc5NTMyMDU0MTgsMTg1LjgwMDE1MTg3OTkwMTUsMTg3LjI4NDY4NzAyMzEzMDM1LDMwMjcuNTMwMzc3ODM3ODc4LDMyOTAuMDE0MTI1MTQyMzA2NSwyNjk2LjQ4MDc5OTEzMTM2OSwyMzQyLjE2NTY4ODgwOTg3NywyOTI4LjI5Njg1MTgyODcxOTQsNTk0LjY1MDk3NjQzMjYyNywzNDc2LjIxOTg0Mjg4MDUyNSw2ODcuOTYzOTQ0MjAzNzY3NywxODI2LjI3OTQ3MDE3NTg4MiwxNjMyLjM2MDk2ODE5NTcwMywzNzQ3LjIyNzUwNjE0MzU0NzUsMjcxNC43MTgzNjkwNDMzMjU4LDc2My40Nzk0ODY1MTMyMzI4LDIyMjIuMDcxODk0NTk5Nzk1NSwxNDc5LjgzNzcyOTQyMTc1NSwyMTg2LjE4NDU5MDgzOTMwNSwyNDI3LjcwMjU3NTkzMzQyMzMsMjE1OS42NjE2Mzg2NDU1Mzc2LDQ5MjIuOTAxOTc3MzA3MTIzLDMxMy45NDE5NjY4NTA2Njc5LDMuOTMwODI0MDA1MzgyODg4MgorMzIsRnJpIDI1IEZlYiAxMSwxNzguNzAwOTYzMjYxMTg1NzYsMTU5LjU1Mzg2OTEyNzI4ODMyLDkyLjg3MzMzODYxOTk5MzE5LDE5MS45OTM1ODYyNzMxMDczNSwxOTMuNTI3NjA2Njg4MTI0MDIsMzEyOC40NDk2MjEzMzA3MjkzLDMzOTkuNjgyOTYyNDk1ODk3MywyNzg2LjM2NDg4NTYyNDIyOCwyNDIwLjIzOTA4ODU2MTY2MSwzMDI1LjkwODI1OTg1MDM2Myw2MTQuNDcyOTgyODg0ODcwNywzNTkyLjA5NTYzMzY5ODgwOSw3MTAuODk2NDMxMTI2OTgyNSwxODg3LjE1NjM5NjA5NzM2NSwxNjg2Ljc3Mzg0Mzg1OTQ2OTcsMzg3Mi4xMzcwMjU3NTg1NjgsMjgwNS4yMTAzODM5NTYwNCw3ODguOTI5MTk3MTk2NjQ4NSwyMjk2LjE0MjEwNTgyOTE1LDE1MjkuMTY2NDE4MzIyMzM1OSwyMjU5LjA1ODU0MDA2ODExMzQsMjUwOC42MjcyNDk0NTAyNjQsMjIzMS42NTE0NzU3NjQyOTU0LDUwODcuMDAxMjUzMzk1Njc2LDMyNC40MDY4NjEyODMxNTcsNC4wNjE4NTM1MDMxNjQ1MzcKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvRGVtb2dyYXBoaWNTRUlSRGlzZWFzZV9GRF9SZWZlcmVuY2UvRGVtb2dyYXBoaWNNb2RlbC93b21lbi9EZW5zaXR5XzIuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9EZW1vZ3JhcGhpY1NFSVJEaXNlYXNlX0ZEX1JlZmVyZW5jZS9EZW1vZ3JhcGhpY01vZGVsL3dvbWVuL0RlbnNpdHlfMi5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2FlNmQwMQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvRGVtb2dyYXBoaWNTRUlSRGlzZWFzZV9GRF9SZWZlcmVuY2UvRGVtb2dyYXBoaWNNb2RlbC93b21lbi9EZW5zaXR5XzIuY3N2CkBAIC0wLDAgKzEsMzMgQEAKK2l0ZXJhdGlvbix0aW1lLEVHLUZSRy1HMjEwMDAxLEVHLUZSRy1HMjEwMDAyLEVHLUZSRy1HMjEwMDAzLEVHLUZSRy1HMjEwMDA0LEVHLUZSRy1HMjEwMDA1LEVHLUxPRS1HMjQwMDAxLEVHLUxPRS1HMjQwMDAyLEVHLUxPRS1HMjQwMDAzLEVHLUxPRS1HMjQwMDA0LEVHLUxPRS1HMjQwMDA1LEVHLUxPRS1HMjQwMDA2LEVHLUxPRS1HMjQwMDA3LEVHLUxPRS1HMjQwMDA4LEVHLUxPRS1HMjQwMDA5LEVHLVVQRS1HMjkwMDAxLEVHLVVQRS1HMjkwMDAyLEVHLVVQRS1HMjkwMDAzLEVHLVVQRS1HMjkwMDA0LEVHLVVQRS1HMjkwMDA1LEVHLVVQRS1HMjkwMDA2LEVHLVVQRS1HMjkwMDA3LEVHLVVQRS1HMjkwMDA4LEVHLVVSRy1HMzAwMDAxLEVHLVVSRy1HMzAwMDAyLEVHLVVSRy1HMzAwMDAzLEVHLVVSRy1HMzAwMDA0CisxLFR1ZSAyNSBKYW4gMTEsMC44NTcwNzQ5MjkxNTgyMjkxLDAuMjkxMjk2NzEwMDY1OTg5MSwyLjY2NjY1MTM2NjE4Mzk1NzMsMS4wMDE2NTY2Njg5NDgzOTgsNS44MzEwOTgyNDUwMDY3MDMsMjE0LjQyMzIzNTY2OTUyMDIsNzUzLjIyNDM0MTM4NzY0MzIsMTE5MS42NDk5NjE3MTE2MDc4LDEzNTkuNTYzOTY5OTcyMTkyOCwyNjcwLjIwMzI3Njg2NDMwMzUsOTAuMTUzNjcyNDE0NjU1ODIsNTcwLjAwMzI1OTQ3ODA5MzYsNzkwLjMxNTY1MjAyODksNDE2LjI2MjE5ODIwMjc5NDksMjIyLjE2Mjc4Njc3Nzk5NjYsODUuMTY5NDUzMDUwMjE3MzcsMTE2LjI5MjE4NzQ5Nzk1MzUzLDQwLjUzNDUzNTE4NjUxMzg2LDc3Mi43NDY1NTUzODMzNDA3LDI1My44MjMwNDQ4Mjg1NzgzNiw0ODQuNzcyNDAxNTk5MDg3MSw3ODcuOTI3OTE4MjI0NzA4Miw3NjAuMjkyMzk3ODU2NDQzNCwxMzMyLjA1MDM3NDM5NTk1MjMsMzAuNTU3MTc3NjE5ODY3NjksOC42Mjk5MjUzMDY5Mzc3MDcKKzIsV2VkIDI2IEphbiAxMSwwLjg1NzA3NTc4NjIzMzE1ODQsMC4yOTEyOTcwMDEzNjI2OTkyLDIuNjY2NjU0MDMyODM1MzIzLDEuMDAxNjU3NjcwNjA1MDY3LDUuODMxMTA0MDc2MTA0OTQ5LDIxNC40MjM0NTAwOTI3NTU5LDc1My4yMjUwOTQ2MTE5ODQ3LDExOTEuNjUxMTUzMzYxNTY5NiwxMzU5LjU2NTMyOTUzNjE2MjgsMjY3MC4yMDU5NDcwNjc1ODA0LDkwLjE1Mzc2MjU2ODMyODIzLDU3MC4wMDM4Mjk0ODEzNTMsNzkwLjMxNjQ0MjM0NDU1MjEsNDE2LjI2MjYxNDQ2NDk5MzEsMjIyLjE2MzAwODk0MDc4MzM2LDg1LjE2OTUzODIxOTY3MDQzLDExNi4yOTIzMDM3OTAxNDEwMiw0MC41MzQ1NzU3MjEwNDkwNDUsNzcyLjc0NzMyODEyOTg5NjIsMjUzLjgyMzI5ODY1MTYyMzIsNDg0Ljc3Mjg4NjM3MTQ4ODcsNzg3LjkyODcwNjE1MjYyNjMsNzYwLjI5MzE1ODE0ODg0MTEsMTMzMi4wNTE3MDY0NDYzMjY4LDMwLjU1NzIwODE3NzA0NTMwNyw4LjYyOTkzMzkzNjg2MzAxNQorMyxUaHUgMjcgSmFuIDExLDAuODU3MDc2NjQzMzA4OTQ0NSwwLjI5MTI5NzI5MjY1OTcwMDUsMi42NjY2NTY2OTk0ODkzNTY0LDEuMDAxNjU4NjcyMjYyNzM3OSw1LjgzMTEwOTkwNzIwOTAyNSwyMTQuNDIzNjY0NTE2MjA2LDc1My4yMjU4NDc4MzcwNzkyLDExOTEuNjUyMzQ1MDEyNzIzMSwxMzU5LjU2NjY4OTEwMTQ5MjMsMjY3MC4yMDg2MTcyNzM1Mjc2LDkwLjE1Mzg1MjcyMjA5MDgsNTcwLjAwNDM5OTQ4NTE4MjYsNzkwLjMxNzIzMjY2MDk5NDUsNDE2LjI2MzAzMDcyNzYwNzU0LDIyMi4xNjMyMzExMDM3OTIzMyw4NS4xNjk2MjMzODkyMDg2NSwxMTYuMjkyNDIwMDgyNDQ0OCw0MC41MzQ2MTYyNTU2MjQ3Niw3NzIuNzQ4MTAwODc3MjI0NCwyNTMuODIzNTUyNDc0OTIxODMsNDg0Ljc3MzM3MTE0NDM3NTA2LDc4Ny45Mjk0OTQwODEzMzI1LDc2MC4yOTM5MTg0NDE5OTkzLDEzMzIuMDUzMDM4NDk4MDMzMiwzMC41NTcyMzg3MzQyNTM0ODUsOC42Mjk5NDI1NjY3OTY5NTIKKzQsRnJpIDI4IEphbiAxMSwwLjg1NzA3NzUwMDM4NTU4NzksMC4yOTEyOTc1ODM5NTY5OTMyLDIuNjY2NjU5MzY2MTQ2MDU2LDEuMDAxNjU5NjczOTIxNDEsNS44MzExMTU3MzgzMTg5MzMsMjE0LjQyMzg3ODkzOTg3MDUyLDc1My4yMjY2MDEwNjI5MjcxLDExOTEuNjUzNTM2NjY1MDY4MywxMzU5LjU2ODA0ODY2ODE4MTUsMjY3MC4yMTEyODc0ODIxNDUsOTAuMTUzOTQyODc1OTQzNTMsNTcwLjAwNDk2OTQ4OTU4MjEsNzkwLjMxODAyMjk3ODIyNzIsNDE2LjI2MzQ0Njk5MDYzODMsMjIyLjE2MzQ1MzI2NzAyMzQ0LDg1LjE2OTcwODU1ODgzMjA0LDExNi4yOTI1MzYzNzQ4NjQ5MSw0MC41MzQ2NTY3OTAyNDEwMTYsNzcyLjc0ODg3MzYyNTMyNTIsMjUzLjgyMzgwNjI5ODQ3NDMyLDQ4NC43NzM4NTU5MTc3NDYyMyw3ODcuOTMwMjgyMDEwODI2NSw3NjAuMjk0Njc4NzM1OTE3NywxMzMyLjA1NDM3MDU1MTA3MTgsMzAuNTU3MjY5MjkxNDkyMjIsOC42Mjk5NTExOTY3Mzk1MTcKKzUsU2F0IDI5IEphbiAxMSwwLjg1NzA3ODM1NzQ2MzA4ODIsMC4yOTEyOTc4NzUyNTQ1NzcxLDIuNjY2NjYyMDMyODA1NDIyLDEuMDAxNjYwNjc1NTgxMDg0LDUuODMxMTIxNTY5NDM0NjcxLDIxNC40MjQwOTMzNjM3NDk0NSw3NTMuMjI3MzU0Mjg5NTI4MSwxMTkxLjY1NDcyODMxODYwNDgsMTM1OS41Njk0MDgyMzYyMzAyLDI2NzAuMjEzOTU3NjkzNDMyMyw5MC4xNTQwMzMwMjk4ODY0LDU3MC4wMDU1Mzk0OTQ1NTE1LDc5MC4zMTg4MTMyOTYyNSw0MTYuMjYzODYzMjU0MDg1MjcsMjIyLjE2MzY3NTQzMDQ3NjcsODUuMTY5NzkzNzI4NTQwNiwxMTYuMjkyNjUyNjY3NDAxMjcsNDAuNTM0Njk3MzI0ODk3ODA2LDc3Mi43NDk2NDYzNzQxOTg3LDI1My44MjQwNjAxMjIyODA2Myw0ODQuNzc0MzQwNjkxNjAyMSw3ODcuOTMxMDY5OTQxMTA4NSw3NjAuMjk1NDM5MDMwNTk2NCwxMzMyLjA1NTcwMjYwNTQ0MjMsMzAuNTU3Mjk5ODQ4NzYxNTEzLDguNjI5OTU5ODI2NjkwNzE0Cis2LFN1biAzMCBKYW4gMTEsMC44NTcwNzkyMTQ1NDE0NDU2LDAuMjkxMjk4MTY2NTUyNDUyNCwyLjY2NjY2NDY5OTQ2NzQ1NDUsMS4wMDE2NjE2NzcyNDE3NTk1LDUuODMxMTI3NDAwNTU2MjQxLDIxNC40MjQzMDc3ODc4NDI4LDc1My4yMjgxMDc1MTY4ODIzLDExOTEuNjU1OTE5OTczMzMzLDEzNTkuNTcwNzY3ODA1NjM4MywyNjcwLjIxNjYyNzkwNzM5LDkwLjE1NDEyMzE4MzkxOTQ0LDU3MC4wMDYxMDk1MDAwOTEsNzkwLjMxOTYwMzYxNTA2MzMsNDE2LjI2NDI3OTUxNzk0ODUsMjIyLjE2Mzg5NzU5NDE1MjEzLDg1LjE2OTg3ODg5ODMzNDMyLDExNi4yOTI3Njg5NjAwNTM5Myw0MC41MzQ3Mzc4NTk1OTUxMyw3NzIuNzUwNDE5MTIzODQ1MiwyNTMuODI0MzEzOTQ2MzQwNzQsNDg0Ljc3NDgyNTQ2NTk0MjgsNzg3LjkzMTg1Nzg3MjE3ODUsNzYwLjI5NjE5OTMyNjAzNTUsMTMzMi4wNTcwMzQ2NjExNDQ4LDMwLjU1NzMzMDQwNjA2MTM1Nyw4LjYyOTk2ODQ1NjY1MDU0MQorNyxNb24gMzEgSmFuIDExLDAuODU3MDgwMDcxNjIwNjYwMiwwLjI5MTI5ODQ1Nzg1MDYxODksMi42NjY2NjczNjYxMzIxNTQzLDEuMDAxNjYyNjc4OTAzNDM2Niw1LjgzMTEzMzIzMTY4MzY0MiwyMTQuNDI0NTIyMjEyMTUwNTgsNzUzLjIyODg2MDc0NDk4OTksMTE5MS42NTcxMTE2MjkyNTMsMTM1OS41NzIxMjczNzY0MDYxLDI2NzAuMjE5Mjk4MTI0MDE3OCw5MC4xNTQyMTMzMzgwNDI2Miw1NzAuMDA2Njc5NTA2MjAwNSw3OTAuMzIwMzkzOTM0NjY2OSw0MTYuMjY0Njk1NzgyMjI4MDUsMjIyLjE2NDExOTc1ODA0OTcsODUuMTY5OTY0MDY4MjEzMjIsMTE2LjI5Mjg4NTI1MjgyMjksNDAuNTM0Nzc4Mzk0MzMyOTk2LDc3Mi43NTExOTE4NzQyNjQyLDI1My44MjQ1Njc3NzA2NTQ2NSw0ODQuNzc1MzEwMjQwNzY4MjUsNzg3LjkzMjY0NTgwNDAzNjQsNzYwLjI5Njk1OTYyMjIzNDksMTMzMi4wNTgzNjY3MTgxNzk1LDMwLjU1NzM2MDk2MzM5MTc2Miw4LjYyOTk3NzA4NjYxODk5NworOCxUdWUgMSBGZWIgMTEsMC44NTcwODA5Mjg3MDA3MzE4LDAuMjkxMjk4NzQ5MTQ5MDc2OCwyLjY2NjY3MDAzMjc5OTUyMDMsMS4wMDE2NjM2ODA1NjYxMTU3LDUuODMxMTM5MDYyODE2ODc1LDIxNC40MjQ3MzY2MzY2NzI4LDc1My4yMjk2MTM5NzM4NTA2LDExOTEuNjU4MzAzMjg2MzY0OCwxMzU5LjU3MzQ4Njk0ODUzMzYsMjY3MC4yMjE5NjgzNDMzMTYsOTAuMTU0MzAzNDkyMjU1OTUsNTcwLjAwNzI0OTUxMjg4LDc5MC4zMjExODQyNTUwNjA5LDQxNi4yNjUxMTIwNDY5MjM4MywyMjIuMTY0MzQxOTIyMTY5NDgsODUuMTcwMDQ5MjM4MTc3MywxMTYuMjkzMDAxNTQ1NzA4MTUsNDAuNTM0ODE4OTI5MTExMzksNzcyLjc1MTk2NDYyNTQ1NiwyNTMuODI0ODIxNTk1MjIyNDMsNDg0Ljc3NTc5NTAxNjA3ODUsNzg3LjkzMzQzMzczNjY4MjIsNzYwLjI5NzcxOTkxOTE5NDUsMTMzMi4wNTk2OTg3NzY1NDYyLDMwLjU1NzM5MTUyMDc1MjcyNCw4LjYyOTk4NTcxNjU5NjA4MworOSxXZWQgMiBGZWIgMTEsMC44NTcwODE3ODU3ODE2NjA2LDAuMjkxMjk5MDQwNDQ3ODI1OSwyLjY2NjY3MjY5OTQ2OTU1MzUsMS4wMDE2NjQ2ODIyMjk3OTYzLDUuODMxMTQ0ODkzOTU1OTM4LDIxNC40MjQ5NTEwNjE0MDk0Nyw3NTMuMjMwMzY3MjAzNDY0NywxMTkxLjY1OTQ5NDk0NDY2OCwxMzU5LjU3NDg0NjUyMjAyMDYsMjY3MC4yMjQ2Mzg1NjUyODQzLDkwLjE1NDM5MzY0NjU1OTQ2LDU3MC4wMDc4MTk1MjAxMjk1LDc5MC4zMjE5NzQ1NzYyNDUxLDQxNi4yNjU1MjgzMTIwMzU4LDIyMi4xNjQ1NjQwODY1MTE0Myw4NS4xNzAxMzQ0MDgyMjY1MywxMTYuMjkzMTE3ODM4NzA5NjksNDAuNTM0ODU5NDYzOTMwMzIsNzcyLjc1MjczNzM3NzQyMDcsMjUzLjgyNTA3NTQyMDA0NDA0LDQ4NC43NzYyNzk3OTE4NzM1LDc4Ny45MzQyMjE2NzAxMTU5LDc2MC4yOTg0ODAyMTY5MTQzLDEzMzIuMDYxMDMwODM2MjQ1LDMwLjU1NzQyMjA3ODE0NDI1LDguNjI5OTk0MzQ2NTgxODAxCisxMCxUaHUgMyBGZWIgMTEsMC44NTcwODI2NDI4NjM0NDY1LDAuMjkxMjk5MzMxNzQ2ODY2NCwyLjY2NjY3NTM2NjE0MjI1MjYsMS4wMDE2NjU2ODM4OTQ0Nzg0LDUuODMxMTUwNzI1MTAwODMzLDIxNC40MjUxNjU0ODYzNjA1LDc1My4yMzExMjA0MzM4MzE4LDExOTEuNjYwNjg2NjA0MTYzLDEzNTkuNTc2MjA2MDk2ODY3LDI2NzAuMjI3MzA4Nzg5OTIzLDkwLjE1NDQ4MzgwMDk1MzA5LDU3MC4wMDgzODk1Mjc5NDksNzkwLjMyMjc2NDg5ODIxOTcsNDE2LjI2NTk0NDU3NzU2NDE0LDIyMi4xNjQ3ODYyNTEwNzU1LDg1LjE3MDIxOTU3ODM2MDk0LDExNi4yOTMyMzQxMzE4Mjc1Myw0MC41MzQ4OTk5OTg3ODk3OCw3NzIuNzUzNTEwMTMwMTU4LDI1My44MjUzMjkyNDUxMTk0Myw0ODQuNzc2NzY0NTY4MTUzMzQsNzg3LjkzNTAwOTYwNDMzNzYsNzYwLjI5OTI0MDUxNTM5NDYsMTMzMi4wNjIzNjI4OTcyNzU4LDMwLjU1NzQ1MjYzNTU2NjMyOCw4LjYzMDAwMjk3NjU3NjE0NworMTEsRnJpIDQgRmViIDExLDAuODU3MDgzNDk5OTQ2MDg5MywwLjI5MTI5OTYyMzA0NjE5ODEsMi42NjY2NzgwMzI4MTc2MTg1LDEuMDAxNjY2Njg1NTYwMTYyNCw1LjgzMTE1NjU1NjI1MTU1OCwyMTQuNDI1Mzc5OTExNTI1OTcsNzUzLjIzMTg3MzY2NDk1MjMsMTE5MS42NjE4NzgyNjQ4NDk1LDEzNTkuNTc3NTY1NjczMDczMiwyNjcwLjIyOTk3OTAxNzIzMiw5MC4xNTQ1NzM5NTU0MzY4OSw1NzAuMDA4OTU5NTM2MzM4Niw3OTAuMzIzNTU1MjIwOTg0Niw0MTYuMjY2MzYwODQzNTA4NywyMjIuMTY1MDA4NDE1ODYxNzYsODUuMTcwMzA0NzQ4NTgwNTIsMTE2LjI5MzM1MDQyNTA2MTY3LDQwLjUzNDk0MDUzMzY4OTc4LDc3Mi43NTQyODI4ODM2NjgyLDI1My44MjU1ODMwNzA0NDg3LDQ4NC43NzcyNDkzNDQ5MTc5LDc4Ny45MzU3OTc1MzkzNDcyLDc2MC4zMDAwMDA4MTQ2MzUsMTMzMi4wNjM2OTQ5NTk2MzksMzAuNTU3NDgzMTkzMDE4OTYsOC42MzAwMTE2MDY1NzkxMjQKKzEyLFNhdCA1IEZlYiAxMSwwLjg1NzA4NDM1NzAyOTU4OTMsMC4yOTEyOTk5MTQzNDU4MjEyLDIuNjY2NjgwNjk5NDk1NjUxLDEuMDAxNjY3Njg3MjI2ODQ4LDUuODMxMTYyMzg3NDA4MTE0LDIxNC40MjU1OTQzMzY5MDU4Nyw3NTMuMjMyNjI2ODk2ODI2LDExOTEuNjYzMDY5OTI2NzI4LDEzNTkuNTc4OTI1MjUwNjM4OCwyNjcwLjIzMjY0OTI0NzIxMDcsOTAuMTU0NjY0MTEwMDEwODYsNTcwLjAwOTUyOTU0NTI5ODIsNzkwLjMyNDM0NTU0NDUzOTksNDE2LjI2Njc3NzEwOTg2OTUsMjIyLjE2NTIzMDU4MDg3MDE0LDg1LjE3MDM4OTkxODg4NTI2LDExNi4yOTM0NjY3MTg0MTIwOSw0MC41MzQ5ODEwNjg2MzAzMTYsNzcyLjc1NTA1NTYzNzk1MSwyNTMuODI1ODM2ODk2MDMxNzcsNDg0Ljc3NzczNDEyMjE2NzI2LDc4Ny45MzY1ODU0NzUxNDQ2LDc2MC4zMDA3NjExMTQ2MzU5LDEzMzIuMDY1MDI3MDIzMzMzOSwzMC41NTc1MTM3NTA1MDIxNTMsOC42MzAwMjAyMzY1OTA3MzEKKzEzLFN1biA2IEZlYiAxMSwwLjg1NzA4NTIxNDExMzk0NjIsMC4yOTEzMDAyMDU2NDU3MzU1NSwyLjY2NjY4MzM2NjE3NjM1MDUsMS4wMDE2Njg2ODg4OTQ1MzUyLDUuODMxMTY4MjE4NTcwNTAzLDIxNC40MjU4MDg3NjI1MDAyMiw3NTMuMjMzMzgwMTI5NDUyOCwxMTkxLjY2NDI2MTU4OTc5OCwxMzU5LjU4MDI4NDgyOTU2NCwyNjcwLjIzNTMxOTQ3OTg2LDkwLjE1NDc1NDI2NDY3NDk2LDU3MC4wMTAwOTk1NTQ4Mjc3LDc5MC4zMjUxMzU4Njg4ODU1LDQxNi4yNjcxOTMzNzY2NDY2LDIyMi4xNjU0NTI3NDYxMDA3NSw4NS4xNzA0NzUwODkyNzUxOSwxMTYuMjkzNTgzMDExODc4ODEsNDAuNTM1MDIxNjAzNjExMzgsNzcyLjc1NTgyODM5MzAwNjcsMjUzLjgyNjA5MDcyMTg2ODY0LDQ4NC43NzgyMTg4OTk5MDEzMyw3ODcuOTM3MzczNDExNzMwMiw3NjAuMzAxNTIxNDE1Mzk3LDEzMzIuMDY2MzU5MDg4MzYxLDMwLjU1NzU0NDMwODAxNTkwMyw4LjYzMDAyODg2NjYxMDk2NworMTQsTW9uIDcgRmViIDExLDAuODU3MDg2MDcxMTk5MTYwNCwwLjI5MTMwMDQ5Njk0NTk0MTIsMi42NjY2ODYwMzI4NTk3MTcsMS4wMDE2Njk2OTA1NjMyMjQsNS44MzExNzQwNDk3Mzg3MjEsMjE0LjQyNjAyMzE4ODMwOSw3NTMuMjM0MTMzMzYyODMzLDExOTEuNjY1NDUzMjU0MDU5MiwxMzU5LjU4MTY0NDQwOTg0OSwyNjcwLjIzNzk4OTcxNTE3OTUsOTAuMTU0ODQ0NDE5NDI5MjIsNTcwLjAxMDY2OTU2NDkyNzIsNzkwLjMyNTkyNjE5NDAyMTIsNDE2LjI2NzYwOTY0Mzg0LDIyMi4xNjU2NzQ5MTE1NTM1LDg1LjE3MDU2MDI1OTc1MDI3LDExNi4yOTM2OTkzMDU0NjE4Myw0MC41MzUwNjIxMzg2MzI5OSw3NzIuNzU2NjAxMTQ4ODM1MSwyNTMuODI2MzQ0NTQ3OTU5MzcsNDg0Ljc3ODcwMzY3ODEyMDMsNzg3LjkzODE2MTM0OTEwMzcsNzYwLjMwMjI4MTcxNjkxODUsMTMzMi4wNjc2OTExNTQ3MTk4LDMwLjU1NzU3NDg2NTU2MDIxMyw4LjYzMDAzNzQ5NjYzOTgzNQorMTUsVHVlIDggRmViIDExLDAuODU3MDg2OTI4Mjg1MjMxNiwwLjI5MTMwMDc4ODI0NjQzODEsMi42NjY2ODg2OTk1NDU3NSwxLjAwMTY3MDY5MjIzMjkxNDYsNS44MzExNzk4ODA5MTI3NzIsMjE0LjQyNjIzNzYxNDMzMjE3LDc1My4yMzQ4ODY1OTY5NjY0LDExOTEuNjY2NjQ0OTE5NTEyNywxMzU5LjU4MzAwMzk5MTQ5MzMsMjY3MC4yNDA2NTk5NTMxNjksOTAuMTU0OTM0NTc0MjczNjQsNTcwLjAxMTIzOTU3NTU5NjcsNzkwLjMyNjcxNjUxOTk0NzUsNDE2LjI2ODAyNTkxMTQ0OTcsMjIyLjE2NTg5NzA3NzIyODQsODUuMTcwNjQ1NDMwMzEwNTMsMTE2LjI5MzgxNTU5OTE2MTEyLDQwLjUzNTEwMjY3MzY5NTEyLDc3Mi43NTczNzM5MDU0MzYyLDI1My44MjY1OTgzNzQzMDM5Myw0ODQuNzc5MTg4NDU2ODIzOTMsNzg3LjkzODk0OTI4NzI2NDksNzYwLjMwMzA0MjAxOTIwMDIsMTMzMi4wNjkwMjMyMjI0MTEsMzAuNTU3NjA1NDIzMTM1MDgzLDguNjMwMDQ2MTI2Njc3MzMyCisxNixXZWQgOSBGZWIgMTEsMC44NTcwODc3ODUzNzIxNTk4LDAuMjkxMzAxMDc5NTQ3MjI2NCwyLjY2NjY5MTM2NjIzNDQ0OTYsMS4wMDE2NzE2OTM5MDM2MDY4LDUuODMxMTg1NzEyMDkyNjUzLDIxNC40MjY0NTIwNDA1Njk3OSw3NTMuMjM1NjM5ODMxODUyOCwxMTkxLjY2NzgzNjU4NjE1NzYsMTM1OS41ODQzNjM1NzQ0OTczLDI2NzAuMjQzMzMwMTkzODI5LDkwLjE1NTAyNDcyOTIwODIxLDU3MC4wMTE4MDk1ODY4MzYzLDc5MC4zMjc1MDY4NDY2NjM5LDQxNi4yNjg0NDIxNzk0NzU2NCwyMjIuMTY2MTE5MjQzMTI1NDgsODUuMTcwNzMwNjAwOTU1OTYsMTE2LjI5MzkzMTg5Mjk3NjcyLDQwLjUzNTE0MzIwODc5NzgsNzcyLjc1ODE0NjY2MjgxMDEsMjUzLjgyNjg1MjIwMDkwMjI3LDQ4NC43Nzk2NzMyMzYwMTI0LDc4Ny45Mzk3MzcyMjYyMTQyLDc2MC4zMDM4MDIzMjIyNDIzLDEzMzIuMDcwMzU1MjkxNDM0MiwzMC41NTc2MzU5ODA3NDA1MDMsOC42MzAwNTQ3NTY3MjM0NTgKKzE3LFRodSAxMCBGZWIgMTEsMC44NTcwODg2NDI0NTk5NDUxLDAuMjkxMzAxMzcwODQ4MzA1OTMsMi42NjY2OTQwMzI5MjU4MTU1LDEuMDAxNjcyNjk1NTc1MzAwNiw1LjgzMTE5MTU0MzI3ODM2NSwyMTQuNDI2NjY2NDY3MDIxODUsNzUzLjIzNjM5MzA2NzQ5MjcsMTE5MS42NjkwMjgyNTM5OTQyLDEzNTkuNTg1NzIzMTU4ODYxLDI2NzAuMjQ2MDAwNDM3MTU5LDkwLjE1NTExNDg4NDIzMjk0LDU3MC4wMTIzNzk1OTg2NDU5LDc5MC4zMjgyOTcxNzQxNzA4LDQxNi4yNjg4NTg0NDc5MTc4LDIyMi4xNjYzNDE0MDkyNDQ3NSw4NS4xNzA4MTU3NzE2ODY1NiwxMTYuMjk0MDQ4MTg2OTA4NjEsNDAuNTM1MTgzNzQzOTQxMDA1LDc3Mi43NTg5MTk0MjA5NTY4LDI1My44MjcxMDYwMjc3NTQ1LDQ4NC43ODAxNTgwMTU2ODU2Myw3ODcuOTQwNTI1MTY1OTUxNCw3NjAuMzA0NTYyNjI2MDQ0NiwxMzMyLjA3MTY4NzM2MTc4OTYsMzAuNTU3NjY2NTM4Mzc2NDg0LDguNjMwMDYzMzg2Nzc4MjE1CisxOCxGcmkgMTEgRmViIDExLDAuODU3MDg5NDk5NTQ4NTg3NiwwLjI5MTMwMTY2MjE0OTY3NjgsMi42NjY2OTY2OTk2MTk4NDg3LDEuMDAxNjczNjk3MjQ3OTk2Myw1LjgzMTE5NzM3NDQ2OTkwOSwyMTQuNDI2ODgwODkzNjg4MzIsNzUzLjIzNzE0NjMwMzg4NTgsMTE5MS42NzAyMTk5MjMwMjI0LDEzNTkuNTg3MDgyNzQ0NTg0LDI2NzAuMjQ4NjcwNjgzMTU5Niw5MC4xNTUyMDUwMzkzNDc4Miw1NzAuMDEyOTQ5NjExMDI1NSw3OTAuMzI5MDg3NTAyNDY3OSw0MTYuMjY5Mjc0NzE2Nzc2MjQsMjIyLjE2NjU2MzU3NTU4NjE3LDg1LjE3MDkwMDk0MjUwMjMzLDExNi4yOTQxNjQ0ODA5NTY4MSw0MC41MzUyMjQyNzkxMjQ3NSw3NzIuNzU5NjkyMTc5ODc2MiwyNTMuODI3MzU5ODU0ODYwNSw0ODQuNzgwNjQyNzk1ODQzNyw3ODcuOTQxMzEzMTA2NDc2NSw3NjAuMzA1MzIyOTMwNjA3MiwxMzMyLjA3MzAxOTQzMzQ3NywzMC41NTc2OTcwOTYwNDMwMiw4LjYzMDA3MjAxNjg0MTYwMgorMTksU2F0IDEyIEZlYiAxMSwwLjg1NzA5MDM1NjYzODA4NzEsMC4yOTEzMDE5NTM0NTEzMzg5NywyLjY2NjY5OTM2NjMxNjU0ODYsMS4wMDE2NzQ2OTg5MjE2OTM2LDUuODMxMjAzMjA1NjY3Mjg0LDIxNC40MjcwOTUzMjA1NjkyLDc1My4yMzc4OTk1NDEwMzIsMTE5MS42NzE0MTE1OTMyNDIzLDEzNTkuNTg4NDQyMzMxNjY2OCwyNjcwLjI1MTM0MDkzMTgzMDMsOTAuMTU1Mjk1MTk0NTUyODYsNTcwLjAxMzUxOTYyMzk3NTEsNzkwLjMyOTg3NzgzMTU1NTYsNDE2LjI2OTY5MDk4NjA1MSwyMjIuMTY2Nzg1NzQyMTQ5NzMsODUuMTcwOTg2MTEzNDAzMjcsMTE2LjI5NDI4MDc3NTEyMTI4LDQwLjUzNTI2NDgxNDM0OTAzLDc3Mi43NjA0NjQ5Mzk1Njg0LDI1My44Mjc2MTM2ODIyMjAzNSw0ODQuNzgxMTI3NTc2NDg2NCw3ODcuOTQyMTAxMDQ3Nzg5Niw3NjAuMzA2MDgzMjM1OTMsMTMzMi4wNzQzNTE1MDY0OTY0LDMwLjU1NzcyNzY1Mzc0MDEyLDguNjMwMDgwNjQ2OTEzNjE5CisyMCxTdW4gMTMgRmViIDExLDAuODU3MDkxMjEzNzI4NDQzOCwwLjI5MTMwMjI0NDc1MzI5MjQsMi42NjY3MDIwMzMwMTU5MTUyLDEuMDAxNjc1NzAwNTk2MzkyNSw1LjgzMTIwOTAzNjg3MDQ4OSwyMTQuNDI3MzA5NzQ3NjY0NSw3NTMuMjM4NjUyNzc4OTMxNSwxMTkxLjY3MjYwMzI2NDY1NCwxMzU5LjU4OTgwMTkyMDEwOTMsMjY3MC4yNTQwMTExODMxNzEzLDkwLjE1NTM4NTM0OTg0ODA2LDU3MC4wMTQwODk2Mzc0OTQ3LDc5MC4zMzA2NjgxNjE0MzMzLDQxNi4yNzAxMDcyNTU3NDE5NSwyMjIuMTY3MDA3OTA4OTM1NDYsODUuMTcxMDcxMjg0Mzg5NCwxMTYuMjk0Mzk3MDY5NDAyMDQsNDAuNTM1MzA1MzQ5NjEzODM2LDc3Mi43NjEyMzc3MDAwMzMyLDI1My44Mjc4Njc1MDk4MzQwMiw0ODQuNzgxNjEyMzU3NjE0LDc4Ny45NDI4ODg5ODk4OTA3LDc2MC4zMDY4NDM1NDIwMTMyLDEzMzIuMDc1NjgzNTgwODQ4MSwzMC41NTc3NTgyMTE0Njc3NzUsOC42MzAwODkyNzY5OTQyNjYKKzIxLE1vbiAxNCBGZWIgMTEsMC44NTcwOTIwNzA4MTk2NTc0LDAuMjkxMzAyNTM2MDU1NTM3MTMsMi42NjY3MDQ2OTk3MTc5NDgsMS4wMDE2NzY3MDIyNzIwOTMsNS44MzEyMTQ4NjgwNzk1MjYsMjE0LjQyNzUyNDE3NDk3NDI1LDc1My4yMzk0MDYwMTc1ODQzLDExOTEuNjczNzk0OTM3MjU3MywxMzU5LjU5MTE2MTUwOTkxMTIsMjY3MC4yNTY2ODE0MzcxODI2LDkwLjE1NTQ3NTUwNTIzMzQxLDU3MC4wMTQ2NTk2NTE1ODQzLDc5MC4zMzE0NTg0OTIxMDE1LDQxNi4yNzA1MjM1MjU4NDkxNywyMjIuMTY3MjMwMDc1OTQzNCw4NS4xNzExNTY0NTU0NjA2OCwxMTYuMjk0NTEzMzYzNzk5MTEsNDAuNTM1MzQ1ODg0OTE5MTk1LDc3Mi43NjIwMTA0NjEyNzA4LDI1My44MjgxMjEzMzc3MDE1Myw0ODQuNzgyMDk3MTM5MjI2NCw3ODcuOTQzNjc2OTMyNzc5Nyw3NjAuMzA3NjAzODQ4ODU2NywxMzMyLjA3NzAxNTY1NjUzMTYsMzAuNTU3Nzg4NzY5MjI1OTgzLDguNjMwMDk3OTA3MDgzNTQ0CisyMixUdWUgMTUgRmViIDExLDAuODU3MDkyOTI3OTExNzI4NCwwLjI5MTMwMjgyNzM1ODA3MzIsMi42NjY3MDczNjY0MjI2NDc1LDEuMDAxNjc3NzAzOTQ4Nzk1NCw1LjgzMTIyMDY5OTI5NDM5NCwyMTQuNDI3NzM4NjAyNDk4NCw3NTMuMjQwMTU5MjU2OTkwNCwxMTkxLjY3NDk4NjYxMTA1MjIsMTM1OS41OTI1MjExMDEwNzI2LDI2NzAuMjU5MzUxNjkzODY0LDkwLjE1NTU2NTY2MDcwODkyLDU3MC4wMTUyMjk2NjYyNDQxLDc5MC4zMzIyNDg4MjM1NjAxLDQxNi4yNzA5Mzk3OTYzNzI2NiwyMjIuMTY3NDUyMjQzMTczNDcsODUuMTcxMjQxNjI2NjE3MTUsMTE2LjI5NDYyOTY1ODMxMjQ5LDQwLjUzNTM4NjQyMDI2NTA4LDc3Mi43NjI3ODMyMjMyODEzLDI1My44MjgzNzUxNjU4MjI5LDQ4NC43ODI1ODE5MjEzMjM1LDc4Ny45NDQ0NjQ4NzY0NTY3LDc2MC4zMDgzNjQxNTY0NjA2LDEzMzIuMDc4MzQ3NzMzNTQ3MiwzMC41NTc4MTkzMjcwMTQ3NSw4LjYzMDEwNjUzNzE4MTQ1CisyMyxXZWQgMTYgRmViIDExLDAuODU3MDkzNzg1MDA0NjU2MywwLjI5MTMwMzExODY2MDkwMDUzLDIuNjY2NzEwMDMzMTMwMDE0LDEuMDAxNjc4NzA1NjI2NDk5Myw1LjgzMTIyNjUzMDUxNTA5MywyMTQuNDI3OTUzMDMwMjM3LDc1My4yNDA5MTI0OTcxNDk2LDExOTEuNjc2MTc4Mjg2MDM5LDEzNTkuNTkzODgwNjkzNTkzNywyNjcwLjI2MjAyMTk1MzIxNiw5MC4xNTU2NTU4MTYyNzQ1Nyw1NzAuMDE1Nzk5NjgxNDczNyw3OTAuMzMzMDM5MTU1ODA5LDQxNi4yNzEzNTYwNjczMTI1LDIyMi4xNjc2NzQ0MTA2MjU3LDg1LjE3MTMyNjc5Nzg1ODc3LDExNi4yOTQ3NDU5NTI5NDIxNSw0MC41MzU0MjY5NTU2NTE0OTUsNzcyLjc2MzU1NTk4NjA2NDUsMjUzLjgyODYyODk5NDE5ODA2LDQ4NC43ODMwNjY3MDM5MDU0Myw3ODcuOTQ1MjUyODIwOTIxNiw3NjAuMzA5MTI0NDY0ODI0OCwxMzMyLjA3OTY3OTgxMTg5NDcsMzAuNTU3ODQ5ODg0ODM0MDc3LDguNjMwMTE1MTY3Mjg3OTg2CisyNCxUaHUgMTcgRmViIDExLDAuODU3MDk0NjQyMDk4NDQxMiwwLjI5MTMwMzQwOTk2NDAxOTIsMi42NjY3MTI2OTk4NDAwNDY4LDEuMDAxNjc5NzA3MzA1MjA1LDUuODMxMjMyMzYxNzQxNjI0LDIxNC40MjgxNjc0NTgxOTAwNSw3NTMuMjQxNjY1NzM4MDYyMSwxMTkxLjY3NzM2OTk2MjIxNzIsMTM1OS41OTUyNDAyODc0NzQ2LDI2NzAuMjY0NjkyMjE1MjM3Niw5MC4xNTU3NDU5NzE5MzAzOSw1NzAuMDE2MzY5Njk3MjczNSw3OTAuMzMzODI5NDg4ODQ4Miw0MTYuMjcxNzcyMzM4NjY4NiwyMjIuMTY3ODk2NTc4MzAwMSw4NS4xNzE0MTE5NjkxODU1NywxMTYuMjk0ODYyMjQ3Njg4MSw0MC41MzU0Njc0OTEwNzg0Niw3NzIuNzY0MzI4NzQ5NjIwNSwyNTMuODI4ODgyODIyODI3MDQsNDg0Ljc4MzU1MTQ4Njk3MjE2LDc4Ny45NDYwNDA3NjYxNzQ0LDc2MC4zMDk4ODQ3NzM5NDkyLDEzMzIuMDgxMDExODkxNTc0NSwzMC41NTc4ODA0NDI2ODM5NjMsOC42MzAxMjM3OTc0MDMxNTQKKzI1LEZyaSAxOCBGZWIgMTEsMC44NTcwOTU0OTkxOTMwODM0LDAuMjkxMzAzNzAxMjY3NDI5MTYsMi42NjY3MTUzNjY1NTI3NDYzLDEuMDAxNjgwNzA4OTg0OTEyMiw1LjgzMTIzODE5Mjk3Mzk4NSwyMTQuNDI4MzgxODg2MzU3NSw3NTMuMjQyNDE4OTc5NzI3OSwxMTkxLjY3ODU2MTYzOTU4NywxMzU5LjU5NjU5OTg4MjcxNDgsMjY3MC4yNjczNjI0Nzk5Mjk1LDkwLjE1NTgzNjEyNzY3NjM1LDU3MC4wMTY5Mzk3MTM2NDMyLDc5MC4zMzQ2MTk4MjI2Nzc3LDQxNi4yNzIxODg2MTA0NDA5NCwyMjIuMTY4MTE4NzQ2MTk2NjgsODUuMTcxNDk3MTQwNTk3NTQsMTE2LjI5NDk3ODU0MjU1MDM0LDQwLjUzNTUwODAyNjU0NTk1LDc3Mi43NjUxMDE1MTM5NDkzLDI1My44MjkxMzY2NTE3MDk4Niw0ODQuNzg0MDM2MjcwNTIzNjQsNzg3Ljk0NjgyODcxMjIxNTMsNzYwLjMxMDY0NTA4MzgzNCwxMzMyLjA4MjM0Mzk3MjU4NjQsMzAuNTU3OTExMDAwNTY0NDA2LDguNjMwMTMyNDI3NTI2OTUKKzI2LFNhdCAxOSBGZWIgMTEsMC44NTcwOTYzNTYyODg1ODI2LDAuMjkxMzAzOTkyNTcxMTMwNDMsMi42NjY3MTgwMzMyNjgxMTMsMS4wMDE2ODE3MTA2NjU2MjEzLDUuODMxMjQ0MDI0MjEyMTc4LDIxNC40Mjg1OTYzMTQ3Mzk0LDc1My4yNDMxNzIyMjIxNDY4LDExOTEuNjc5NzUzMzE4MTQ4NiwxMzU5LjU5Nzk1OTQ3OTMxNDYsMjY3MC4yNzAwMzI3NDcyOTIsOTAuMTU1OTI2MjgzNTEyNDksNTcwLjAxNzUwOTczMDU4MjksNzkwLjMzNTQxMDE1NzI5NzUsNDE2LjI3MjYwNDg4MjYyOTU0LDIyMi4xNjgzNDA5MTQzMTU0Miw4NS4xNzE1ODIzMTIwOTQ2NywxMTYuMjk1MDk0ODM3NTI4OSw0MC41MzU1NDg1NjIwNTM5Nyw3NzIuNzY1ODc0Mjc5MDUwOSwyNTMuODI5MzkwNDgwODQ2NSw0ODQuNzg0NTIxMDU0NTU5OSw3ODcuOTQ3NjE2NjU5MDQ0LDc2MC4zMTE0MDUzOTQ0NzksMTMzMi4wODM2NzYwNTQ5MzAzLDMwLjU1Nzk0MTU1ODQ3NTQxLDguNjMwMTQxMDU3NjU5Mzc4CisyNyxTdW4gMjAgRmViIDExLDAuODU3MDk3MjEzMzg0OTM4OCwwLjI5MTMwNDI4Mzg3NTEyMywyLjY2NjcyMDY5OTk4NjE0NiwxLjAwMTY4MjcxMjM0NzMzMiw1LjgzMTI0OTg1NTQ1NjIwMiwyMTQuNDI4ODEwNzQzMzM1Nyw3NTMuMjQzOTI1NDY1MzE5LDExOTEuNjgwOTQ0OTk3OTAyLDEzNTkuNTk5MzE5MDc3Mjc0LDI2NzAuMjcyNzAzMDE3MzI1LDkwLjE1NjAxNjQzOTQzODc3LDU3MC4wMTgwNzk3NDgwOTI2LDc5MC4zMzYyMDA0OTI3MDc2LDQxNi4yNzMwMjExNTUyMzQ0LDIyMi4xNjg1NjMwODI2NTYzMyw4NS4xNzE2Njc0ODM2NzY5OCwxMTYuMjk1MjExMTMyNjIzNzMsNDAuNTM1NTg5MDk3NjAyNTMsNzcyLjc2NjY0NzA0NDkyNTEsMjUzLjgyOTY0NDMxMDIzNyw0ODQuNzg1MDA1ODM5MDgwOTUsNzg3Ljk0ODQwNDYwNjY2MDYsNzYwLjMxMjE2NTcwNTg4NDUsMTMzMi4wODUwMDgxMzg2MDYzLDMwLjU1Nzk3MjExNjQxNjk3LDguNjMwMTQ5Njg3ODAwNDM2CisyOCxNb24gMjEgRmViIDExLDAuODU3MDk4MDcwNDgyMTUyMywwLjI5MTMwNDU3NTE3OTQwNjksMi42NjY3MjMzNjY3MDY4NDYsMS4wMDE2ODM3MTQwMzAwNDQzLDUuODMxMjU1Njg2NzA2MDU4LDIxNC40MjkwMjUxNzIxNDY0NSw3NTMuMjQ0Njc4NzA5MjQ0NSwxMTkxLjY4MjEzNjY3ODg0NywxMzU5LjYwMDY3ODY3NjU5MzEsMjY3MC4yNzUzNzMyOTAwMjgzLDkwLjE1NjEwNjU5NTQ1NTIxLDU3MC4wMTg2NDk3NjYxNzI0LDc5MC4zMzY5OTA4Mjg5MDgsNDE2LjI3MzQzNzQyODI1NTUzLDIyMi4xNjg3ODUyNTEyMTk0Miw4NS4xNzE3NTI2NTUzNDQ0NiwxMTYuMjk1MzI3NDI3ODM0ODYsNDAuNTM1NjI5NjMzMTkxNjMsNzcyLjc2NzQxOTgxMTU3MjIsMjUzLjgyOTg5ODEzOTg4MTMyLDQ4NC43ODU0OTA2MjQwODY4LDc4Ny45NDkxOTI1NTUwNjUxLDc2MC4zMTI5MjYwMTgwNTAxLDEzMzIuMDg2MzQwMjIzNjE0NiwzMC41NTgwMDI2NzQzODkwODMsOC42MzAxNTgzMTc5NTAxMjMKKzI5LFR1ZSAyMiBGZWIgMTEsMC44NTcwOTg5Mjc1ODAyMjI4LDAuMjkxMzA0ODY2NDgzOTgyMTMsMi42NjY3MjYwMzM0MzAyMTMsMS4wMDE2ODQ3MTU3MTM3NTgzLDUuODMxMjYxNTE3OTYxNzQ0LDIxNC40MjkyMzk2MDExNzE2NCw3NTMuMjQ1NDMxOTUzOTIzMiwxMTkxLjY4MzMyODM2MDk4MzgsMTM1OS42MDIwMzgyNzcyNzE3LDI2NzAuMjc4MDQzNTY1NDAxNyw5MC4xNTYxOTY3NTE1NjE4MSw1NzAuMDE5MjE5Nzg0ODIyMiw3OTAuMzM3NzgxMTY1ODk4Nyw0MTYuMjczODUzNzAxNjkzLDIyMi4xNjkwMDc0MjAwMDQ2OCw4NS4xNzE4Mzc4MjcwOTcxMSwxMTYuMjk1NDQzNzIzMTYyMjgsNDAuNTM1NjcwMTY4ODIxMjcsNzcyLjc2ODE5MjU3ODk5MiwyNTMuODMwMTUxOTY5Nzc5NDUsNDg0Ljc4NTk3NTQwOTU3NzM2LDc4Ny45NDk5ODA1MDQyNTc3LDc2MC4zMTM2ODYzMzA5NzYxLDEzMzIuMDg3NjcyMzA5OTU0OCwzMC41NTgwMzMyMzIzOTE3NTcsOC42MzAxNjY5NDgxMDg0NDIKKzMwLFdlZCAyMyBGZWIgMTEsMC44NTcwOTk3ODQ2NzkxNTA0LDAuMjkxMzA1MTU3Nzg4ODQ4NiwyLjY2NjcyODcwMDE1NjI0NjMsMS4wMDE2ODU3MTczOTg0NzQxLDUuODMxMjY3MzQ5MjIzMjYzLDIxNC40Mjk0NTQwMzA0MTEyNSw3NTMuMjQ2MTg1MTk5MzU1MiwxMTkxLjY4NDUyMDA0NDMxMiwxMzU5LjYwMzM5Nzg3OTMxLDI2NzAuMjgwNzEzODQzNDQ1LDkwLjE1NjI4NjkwNzc1ODU2LDU3MC4wMTk3ODk4MDQwNDIsNzkwLjMzODU3MTUwMzY3OTksNDE2LjI3NDI2OTk3NTU0NjcsMjIyLjE2OTIyOTU4OTAxMjA4LDg1LjE3MTkyMjk5ODkzNDk1LDExNi4yOTU1NjAwMTg2MDYsNDAuNTM1NzEwNzA0NDkxNDM2LDc3Mi43Njg5NjUzNDcxODQ2LDI1My44MzA0MDU3OTk5MzE0LDQ4NC43ODY0NjAxOTU1NTI4LDc4Ny45NTA3Njg0NTQyMzgyLDc2MC4zMTQ0NDY2NDQ2NjI0LDEzMzIuMDg5MDA0Mzk3NjI3MSwzMC41NTgwNjM3OTA0MjQ5OSw4LjYzMDE3NTU3ODI3NTM5CiszMSxUaHUgMjQgRmViIDExLDAuODU3MTAwNjQxNzc4OTM1LDAuMjkxMzA1NDQ5MDk0MDA2MzUsMi42NjY3MzEzNjY4ODQ5NDY0LDEuMDAxNjg2NzE5MDg0MTkxNiw1LjgzMTI3MzE4MDQ5MDYxMiwyMTQuNDI5NjY4NDU5ODY1MjcsNzUzLjI0NjkzODQ0NTU0MDMsMTE5MS42ODU3MTE3Mjg4MzIsMTM1OS42MDQ3NTc0ODI3MDc4LDI2NzAuMjgzMzg0MTI0MTU4Niw5MC4xNTYzNzcwNjQwNDU0Nyw1NzAuMDIwMzU5ODIzODMxOCw3OTAuMzM5MzYxODQyMjUxNCw0MTYuMjc0Njg2MjQ5ODE2NywyMjIuMTY5NDUxNzU4MjQxNjgsODUuMTcyMDA4MTcwODU3OTQsMTE2LjI5NTY3NjMxNDE2NjAyLDQwLjUzNTc1MTI0MDIwMjE0LDc3Mi43Njk3MzgxMTYxNDk4LDI1My44MzA2NTk2MzAzMzcyLDQ4NC43ODY5NDQ5ODIwMTMsNzg3Ljk1MTU1NjQwNTAwNjYsNzYwLjMxNTIwNjk1OTEwOSwxMzMyLjA5MDMzNjQ4NjYzMTcsMzAuNTU4MDk0MzQ4NDg4NzgsOC42MzAxODQyMDg0NTA5NjgKKzMyLEZyaSAyNSBGZWIgMTEsMC44NTcxMDE0OTg4Nzk1NzY5LDAuMjkxMzA1NzQwMzk5NDU1NDUsMi42NjY3MzQwMzM2MTYzMTMyLDEuMDAxNjg3NzIwNzcwOTEwNyw1LjgzMTI3OTAxMTc2Mzc5MywyMTQuNDI5ODgyODg5NTMzNzYsNzUzLjI0NzY5MTY5MjQ3ODcsMTE5MS42ODY5MDM0MTQ1NDM4LDEzNTkuNjA2MTE3MDg3NDY1MiwyNjcwLjI4NjA1NDQwNzU0Myw5MC4xNTY0NjcyMjA0MjI1Myw1NzAuMDIwOTI5ODQ0MTkxNiw3OTAuMzQwMTUyMTgxNjEzMSw0MTYuMjc1MTAyNTI0NTAyODcsMjIyLjE2OTY3MzkyNzY5MzQyLDg1LjE3MjA5MzM0Mjg2NjEsMTE2LjI5NTc5MjYwOTg0MjM0LDQwLjUzNTc5MTc3NTk1MzM4LDc3Mi43NzA1MTA4ODU4ODgsMjUzLjgzMDkxMzQ2MDk5Njg3LDQ4NC43ODc0Mjk3Njg5NTc5Niw3ODcuOTUyMzQ0MzU2NTYyOSw3NjAuMzE1OTY3Mjc0MzE2LDEzMzIuMDkxNjY4NTc2OTY4MiwzMC41NTgxMjQ5MDY1ODMxMjgsOC42MzAxOTI4Mzg2MzUxNzYKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvRGVtb2dyYXBoaWNTRUlSRGlzZWFzZV9GRF9SZWZlcmVuY2UvRmx1L21lbi9EaXNlYXNlIERlYXRoc18yLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvRGVtb2dyYXBoaWNTRUlSRGlzZWFzZV9GRF9SZWZlcmVuY2UvRmx1L21lbi9EaXNlYXNlIERlYXRoc18yLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YWQxYTViCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9EZW1vZ3JhcGhpY1NFSVJEaXNlYXNlX0ZEX1JlZmVyZW5jZS9GbHUvbWVuL0Rpc2Vhc2UgRGVhdGhzXzIuY3N2CkBAIC0wLDAgKzEsMzMgQEAKK2l0ZXJhdGlvbix0aW1lLEVHLUZSRy1HMjEwMDAxLEVHLUZSRy1HMjEwMDAyLEVHLUZSRy1HMjEwMDAzLEVHLUZSRy1HMjEwMDA0LEVHLUZSRy1HMjEwMDA1LEVHLUxPRS1HMjQwMDAxLEVHLUxPRS1HMjQwMDAyLEVHLUxPRS1HMjQwMDAzLEVHLUxPRS1HMjQwMDA0LEVHLUxPRS1HMjQwMDA1LEVHLUxPRS1HMjQwMDA2LEVHLUxPRS1HMjQwMDA3LEVHLUxPRS1HMjQwMDA4LEVHLUxPRS1HMjQwMDA5LEVHLVVQRS1HMjkwMDAxLEVHLVVQRS1HMjkwMDAyLEVHLVVQRS1HMjkwMDAzLEVHLVVQRS1HMjkwMDA0LEVHLVVQRS1HMjkwMDA1LEVHLVVQRS1HMjkwMDA2LEVHLVVQRS1HMjkwMDA3LEVHLVVQRS1HMjkwMDA4LEVHLVVSRy1HMzAwMDAxLEVHLVVSRy1HMzAwMDAyLEVHLVVSRy1HMzAwMDAzLEVHLVVSRy1HMzAwMDA0CisxLFR1ZSAyNSBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMixXZWQgMjYgSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzMsVGh1IDI3IEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCis0LEZyaSAyOCBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorNSxTYXQgMjkgSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzYsU3VuIDMwIEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCis3LE1vbiAzMSBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorOCxUdWUgMSBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorOSxXZWQgMiBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTAsVGh1IDMgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzExLEZyaSA0IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxMixTYXQgNSBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTMsU3VuIDYgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzE0LE1vbiA3IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxNSxUdWUgOCBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTYsV2VkIDkgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzE3LFRodSAxMCBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTgsRnJpIDExIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxOSxTYXQgMTIgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzIwLFN1biAxMyBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjEsTW9uIDE0IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyMixUdWUgMTUgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzIzLFdlZCAxNiBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjQsVGh1IDE3IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyNSxGcmkgMTggRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzI2LFNhdCAxOSBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjcsU3VuIDIwIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyOCxNb24gMjEgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzI5LFR1ZSAyMiBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMzAsV2VkIDIzIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCiszMSxUaHUgMjQgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzMyLEZyaSAyNSBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9EZW1vZ3JhcGhpY1NFSVJEaXNlYXNlX0ZEX1JlZmVyZW5jZS9GbHUvbWVuL0VfMi5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0RlbW9ncmFwaGljU0VJUkRpc2Vhc2VfRkRfUmVmZXJlbmNlL0ZsdS9tZW4vRV8yLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YmE0YTgyCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9EZW1vZ3JhcGhpY1NFSVJEaXNlYXNlX0ZEX1JlZmVyZW5jZS9GbHUvbWVuL0VfMi5jc3YKQEAgLTAsMCArMSwzMyBAQAoraXRlcmF0aW9uLHRpbWUsRUctRlJHLUcyMTAwMDEsRUctRlJHLUcyMTAwMDIsRUctRlJHLUcyMTAwMDMsRUctRlJHLUcyMTAwMDQsRUctRlJHLUcyMTAwMDUsRUctTE9FLUcyNDAwMDEsRUctTE9FLUcyNDAwMDIsRUctTE9FLUcyNDAwMDMsRUctTE9FLUcyNDAwMDQsRUctTE9FLUcyNDAwMDUsRUctTE9FLUcyNDAwMDYsRUctTE9FLUcyNDAwMDcsRUctTE9FLUcyNDAwMDgsRUctTE9FLUcyNDAwMDksRUctVVBFLUcyOTAwMDEsRUctVVBFLUcyOTAwMDIsRUctVVBFLUcyOTAwMDMsRUctVVBFLUcyOTAwMDQsRUctVVBFLUcyOTAwMDUsRUctVVBFLUcyOTAwMDYsRUctVVBFLUcyOTAwMDcsRUctVVBFLUcyOTAwMDgsRUctVVJHLUczMDAwMDEsRUctVVJHLUczMDAwMDIsRUctVVJHLUczMDAwMDMsRUctVVJHLUczMDAwMDQKKzEsVHVlIDI1IEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyLFdlZCAyNiBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMTYxMS4yMjYxODE4NzQwMzA1LDEzMTkuOTk4NDM4NDQ0MjY4NSwxNzQ0LjY2NDMzMDY0MzQ2MzIsMC4wLDAuMCwwLjAsMTY4MS4yNzgwNTY0NTQxNTQyLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCw0Njc2My4zMDE0ODE4NDkwOSwxMDk5LjgwNTA4NDQ0MjE2MTYsMC4wCiszLFRodSAyNyBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMTc3MS42MDA4MDU5ODU3NDQsMTQ0OS44Mzg0ODc0NTkwNDg2LDE5MTguMzgwMDI1MDkzNjAwOCwwLjAsMC4wLDAuMCwxODQ4Ljc0NTIwMDY5NzkyNjcsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDUxMTI0LjE2NDE1MDc2OTgxLDEyMDYuOTk1MjQ2ODY5OTg5LDAuMAorNCxGcmkgMjggSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDE0NjUuMTAwMTIwMTY2NjA4NiwxMTk4LjAyNzk1MTgzMjA0MjgsMTU4Ni41MjI4MzYxNDM0NzcsMC4wLDAuMCwwLjAsMTUyOC45NzM3MzU4OTcyNjM0LDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCw0MjA5NC42MjI5NzU5NjY3ODQsOTk2LjczNjgyMTIyMjkwNDQsMC4wCis1LFNhdCAyOSBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMTA4MC4wMTEwNzc1NzkzMjY0LDg4Mi41ODI2MDgxMTEyNzksMTE2OS41NDAxMDk2MDAyMDgzLDAuMCwwLjAsMC4wLDExMjcuMTM5MDU5NDU0NjQzNSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMzA5MjYuMDY3MDgyNzI5NzU4LDczMy45Mzc4OTk0MDc4Mjg4LDAuMAorNixTdW4gMzAgSmFuIDExLDkuNzc3Mzk5NjEzODMyMjM0LDAuMDQxMzYxNjk1ODY1OTc2MywyMi40ODY0NDEwODAyMjI3NjgsOC40MTExMjIwOTA1NzMxNzEsNTUuMTI5NzA5Njg1MDMzNTYsMjEuNjAwNzM1OTk1NTQ0NTMyLDE1Mi44MzcxNjQ2MTA4MTE3LDEwMS4yNTY0NzA0ODQ2ODg3OCwxMTguOTQ0NDgxMjQ5Njc5MDcsMjIxMi40MjgzNDE4ODI3MjI2LDE2MjUuNjc4MzQyNDUzMzAxOSwyNTc5LjUwNjczMDg3Mzk0NTMsMS43OTEwMjEyNTAyMjQ4MzQ2LDMuNTQ3OTI3MTEyNzIzNzY5LDIwLjIyNjM5MjQxNzI3NzM4NSwyNDIwLjIzMjgxMDA5OTA4MDMsMTkuODYwNjgxNzY4OTI5MjgsMC4wMjQ2OTc0MjU1NjQ3MDM5NjYsMC4xMzE1MDg5NjkxMzQzMDU2LDE5LjQ3NzExNTAxOTU4MDc1NCwwLjAyNTg3MDM5MTc4MDkwNzg1NSwwLjAyNTQwNzU0MjkxNzMzMjYyNSwwLjE1MDM1ODI0ODg5ODE0MDQ4LDM2NzM0LjAxMjc2MTg3NTQ4NSwxMjM5LjI0MzAyMjM3MDY4MjksMC43NTE1MTE5MDA1MDgzMgorNyxNb24gMzEgSmFuIDExLDMzLjE2NTI4Njk2NDkxODczLDAuMTQwNjA2MjY4MDMzMzgwNjcsNzYuMjM2MDI2NzM0NDk1OTEsMjguNTYyOTQwMjAzMTI3MjA1LDE4Ni45NTc0MjEyNTA4NjMyMyw3My4zNzczNDMwMjcwMTE4Miw1MTkuMDU3OTk5OTk3OTI4OCwzNDMuODg3MjAwNzI0NDg4MjUsNDAzLjk1MDM4MDU5MjgwNzk2LDU0NTguOTY2MDY4NjY0OTM4LDM4MzUuNjY3MzcyMjQ4OTgzLDY1MzQuNzY0Mzg0NjUwMDU0LDYuMDg4MjU1NDI3MDYwNDc5LDEyLjA2MDU2NDY4MTcwNjA4OCw2OC43MDAyNDA1NzYxOTYxLDYwNzUuMjcxNDE4NzEwNjU1LDY3LjQ1ODIyNjUwMDczNTgyLDAuMDgzOTI0NzA1NjgxNDE4OTQsMC40NDcwMjMxNjAwMDIxNjU4LDY2LjE1NDg5OTkxNTY1OTcxLDAuMDg3OTEwNTgyMjExNjUxOTMsMC4wODYzMzc3NjgzNzk5NjkxMiwwLjUxMTEzMzEyMDM0MTU5MTksNjU5MTguMTIzMjQxOTQxODEsMjgwNS45MDcyMjQzMjAxNTEzLDIuNTQ4MDgzMjc3MTkxNjExCis4LFR1ZSAxIEZlYiAxMSw2NS43NTI4ODU0ODEyOTYyNiwwLjI3OTUxMzY2OTkwMjI3MywxNTAuOTk5MTU5NDA2MzM1Nyw1Ni43MTQxMDU4MzA1ODM3NSwzNzAuNDEwMTY1OTk4MDAzMiwxNDUuNzU2NzI2NzgwNDQyMjgsMTAzMC43MTA4ODIzNTQyNTEyLDY4Mi44ODk2NjA2NjEyNDU0LDgwMi4xMjgwMTU0NzU2NDUsMTAxMzYuNDg3NzY2NTQ5NzIsNzAxNC42MTk3MTkzODYzNTIsMTIyMTIuMTk4OTY1MjE1NDM5LDEyLjEwMjQ1MzUxOTk2MjA4NiwyMy45NzQ1MjUwNTEyMjAyMzMsMTM2LjQ0NzM5Mzk3MDk5NjAyLDExMzMwLjc0MzMxMDI3MjczNywxMzMuOTgyMDQ3MDg4MzgwMjgsMC4xNjY3NzU0MDYzNTIyMzk1OSwwLjg4ODU4NjM0MDEyMjY2NTksMTMxLjM5MTA5MDAwNjgzMTYzLDAuMTc0Njk2MTYwNzMxMjg1NDcsMC4xNzE1NzA2NjEyMDY1Mjc2LDEuMDE2MDkyMjE3ODI1NTIwNywxMTAzMjYuMDI0NTg4Nzc1NjgsNTA2NS4xNzQ1Njk5MjI3OTgsNS4wNDc5Nzg0MzYyMTUwNDcKKzksV2VkIDIgRmViIDExLDk5LjUzNDM2NDQ4MTc1OTIxLDAuNDI0NDE1NDA4NjkyODE3MzUsMjI4LjI1NDQwNzQwNDQ3ODQsODYuMDA1MDQ0OTM3NzU0MzYsNTYwLjA3MjA2NTQ5NDQzNjQsMjIxLjE0MzQwMzUyODcxOTYsMTU2My4xMzk3ODA5ODY0NjE2LDEwMzUuNjk3NDkxNjgxMTgsMTIxNi40NTYzNDg5NjU5NDM2LDE1MDE0LjE1OTY1NTUxMTc3LDEwMjgxLjY4Njk4ODIyNzgzOSwxODEyNy4wMzk5OTYzOTc1OTQsMTguMzc1NTYwMDM3NzcxMTQ4LDM2LjQwMTU1MTI3MDQ4NDI1LDIwNi45ODgzMTE1MjQ1ODIzMSwxNjgxMi40MzAzNzUwMDUzNTUsMjAzLjI1MjYxOTk3NjcwNjU3LDAuMjUzMTQ4NDk2OTkwMjUyNzcsMS4zNDkxNTQ0MDczNjE2MzIsMTk5LjMxNjI2MjY2ODQ4MTQ0LDAuMjY1MTcxNDQwMDE3OTg4NzYsMC4yNjA0MjcyNDM0NTM1MTAzLDEuNTQyODQ0NzUzMzUwNjE4OSwxNTU4OTguMzYyMjgwOTkwMTQsNzM3MS4yMjgzNDU4NjM5MDMsNy42MzMxNzI4NjM0NzQwMTE1CisxMCxUaHUgMyBGZWIgMTEsMTMzLjUzNjg5ODg5MjE4MTQsMC42NDQxNDkxNjY3MDQ0OTAyLDMxMS4wODc1NjY5NjQ2MjkwNSwxMTcuMjEwNjQyODA3ODE0MjcsNzYzLjc3OTI4NjY4NjE4MjYsMzE0LjMwODYzNDE4MTU5NTIsMjE2Mi45MTExMzMxODYzNzU1LDE0MzQuMjc2MDk3OTU5ODM2NSwxNjgwLjgxOTIwMjI4MzA1MzgsMTk3NDcuMTgxMTA2MzE3OTEyLDEzMzA0LjQ4NzU2NzEyMDQ1NywyMzkzNi43MDY4MDM4MDk5OTMsMjkuMDE5NzUyMjczNjI3NjQyLDU3LjY0MzcyMTExNTMxMzksMjg4LjQ1NzgxNTQwMTg4OSwyMjE3NS40NDE4NDg0MTgwODIsMjgzLjA3MzExMTg5NDY2MTMsMC4zNzY3MjQwNzQyMzEzMjg2LDIuMTQ3MDI3MzE3Mzc1Mzc1LDI3Ny41MTAyNTI2NTMxMTU4LDAuMzk3MjI0MTU2MzQ0OTk4NiwwLjM5ODI5NjM4Njk5MjUwNjcsMi42MDAwMTk4MDUwMzQxNjI1LDE5NTU0OC45ODQ1MjI0Mzk4Myw5NDQ3LjU5NTgzNjkxMDA4LDEwLjIzMDgxODMzNDQxMDQ3NAorMTEsRnJpIDQgRmViIDExLDE3OS45NTAxMjY3MzMwMjI2NCwxLjE4NzcxNzY2MzIyOTQ0Nyw0NDEuNjE0MTkwODMyMzUxNjUsMTY1LjIzODc2MjgwNjcxNjc4LDEwODUuNTg0MzA5OTk1NTg5OCw0OTguMDU2NjY4ODI0MzQ5LDMxODguNDQ0MjY5ODk3NDc3LDIxMTkuMTQ0NDIyMzg4NzI1NiwyNDY3LjgxMzk3MjcyMDkwNzcsMjU2NTcuNDAyMjE5NDE1NDE3LDE2NzUyLjUwNzI1MzYxOTcwOCwzMTQzMi42MTk5NDYxMTYzMTIsNTcuODY1MDc5MTk2MjM3LDExNS41MTk4MjExNTI1NDU4Myw0MzMuNjUwNzI2MzQ1NDc1OSwyOTAwOC4yNTk0MTIwMTYxOCw0MjQuNzkwMjI4OTQ0NDc4MywwLjY2NTkzMDUwMDg2NjkzMjMsNC4zNDE4ODMwMTQ2Nzk5NzksNDE2LjEyNjgwMzk0OTcxNjUzLDAuNzEyNDEwOTgxNDExMTAxOSwwLjc0NjI2NTA2OTk1MDI1MTMsNS43ODk3NTI4MDU3OTI3MzcsMjM0NjczLjgwODc5MDQ2NDgzLDExNjg0LjYzNTExMDQ0NzUwMywxMy43Nzk1NTcwMDk0ODA2NDgKKzEyLFNhdCA1IEZlYiAxMSwyNTkuOTY1Njg1MTYxOTY4NDUsMi40MjQxOTkwNzc3MzA1NjIsNjg3LjA1MDE2MzMzOTA0MSwyNTQuNzUwMTkyMDM1Nzk5MywxNjkxLjI2MzUyMjIzNTg2OCw4ODQuNDA0MDIwNjc2OTQ2LDUyMTAuMjkwNTM4OTAzMzUxLDM0NzIuODk4Nzk1ODA5MDMxLDQwMTIuNTg3MDU5ODM4NjUxLDM1MTgzLjI4MDQ4NjI4NDI2LDIxODkyLjQ0ODg5MjY2MTU2Myw0MzgyMy45MTUwMDcwOTcyLDEyNS4xNTg5ODk3NzYyNzMxOSwyNTAuNzM4NTYyMTc0NjM1MjYsNzI1LjgxODA5MTc3MDgyMjEsNDAxOTkuMDY1ODMwNDk3NjMsNzA5LjQ4MzQ5MjI4MDMwNTcsMS4zMTIwMzgyOTcyMjU0MTY1LDkuNDgzMjQ2ODUxODgxMjIzLDY5NC4zNjUwNDk0MjA4MzM3LDEuNDIwOTUwOTgwNjM2MTYwMiwxLjU0MTgwMzM5NjU4MjA1NiwxMy40MzMyMTcyNTkwNTg5MTcsMjg1Njg3LjAzNjE2MDA4OTcsMTQ4NTMuODU1MDIyOTUsMTkuODkwODYyMDIzNjAyNzUKKzEzLFN1biA2IEZlYiAxMSwzOTIuNzI1MzE1MDAxMDMxNiw0LjY4NDk5NDc0MjE5MDM3NSwxMTA0LjE1NTc1NjUzMTg5MDgsNDA4LjMyNDExOTY5NTA4MDQsMjcyMC4wMjkyMzI1NTIyMjg3LDE1NzQuNjEwMjUwNDQ2ODA3OSw4NzQ0LjUxMzAyMTMyMTI3NCw1ODQyLjM2NzM5NDAyNjIzMiw2NzA5LjAxNjY3MzYyNTAyMiw1MDQ2NC44NzUyODE2MjMzNiwyOTY2Ni43MjU5NTQ2MzI2MDIsNjM4OTcuMjE2MjY4OTM5MDUsMjQ4Ljk0ODE4Nzk2MDg4MDAzLDQ5OS41OTgxMzI5ODI2NTg2LDEyNDAuNjc5NTQzNDE2Njg5NSw1ODI5NC42MzY5MDAyODY3NywxMjExLjAwNjAxNTM3NDMxODIsMi40ODU5NjU4NTI3OTE2MTEsMTguOTU0NTY1NDYwNjUxODg1LDExODQuMjc0OTk0MDkyOTQxMSwyLjcxMDUzNjMwODMyNzcwNiwyLjk5NjU0MTI3MjYzNzU5NjYsMjcuNTk2ODU2Njc1MjI0NDk0LDM1NzAxOS4wNTUzNzYwOCwxOTQ5Mi44NDAxNzMwMjU0MDgsMjkuOTY5Mjg3NjE0Mjk1Mjg2CisxNCxNb24gNyBGZWIgMTEsNTg3LjQzMTk4ODEwODI0MTMsOC4yMDA0ODI0NTAwNjkzMDksMTcxNS4yNzU5MTY0Njk3OTQ1LDYzOC42NDY3ODMzMTgyMjc5LDQyMjQuMDM4NzA5MDE4NDg5LDI2MzUuNTYxMzY3MTI1MzIyMiwxNDA5NC4yNzQ2NDU3NTEwNyw5NDM0LjMzMjEyMzYzMzM1NiwxMDc4Ny4wMzQ2NTA3MTIwNDMsNzIyODguOTIwODU5NDQ1ODksNDAwMDEuNjgxNDAyNTUzNzEsOTI2NTguNzIyNjM4NzE5ODYsNDQyLjQ0MzkxNzk0NDE4MTQsODg4Ljg5Mjc1NDQwODc0MTIsMjAyNS41NTY1NzE5ODI5NzY3LDg0Mjg2LjYwMDE1MjE5MjExLDE5NzUuNTk5MjgwMTYwMDYzMiw0LjMwMDA1NzcxNDAzNjI1MiwzMy44MDc3NDU5ODI2ODI1OSwxOTMwLjY2OTQ4MzU3MDI5ODMsNC43MDcyMzcxMDkwOTIwOTEsNS4yNjQ1NTM1NzU0OTQ5MjQsNDkuOTk1OTc4NTQ1ODI5MDA0LDQ0NTUxNy43NDc3OTA1ODE2NiwyNTQ1Ni45MzcyNzYzMjcwMDQsNDQuNTg4NTAzNzcxMzg0NTkKKzE1LFR1ZSA4IEZlYiAxMSw4NDYuMTI2Nzc2Mjg3MDQ2MywxMy4yOTM4NTQyMDYzNzA5NTIsMjUyMS4yOTQ1NTMxODczMjQ3LDk1My42Nzg1NzU1OTMzNTcsNjE5OC4xMDQwMTc0NjEzNjYsNDE1MC4xMTczOTMyNTcwNjksMjE1MTkuNTgyMTU2NTU3MDM3LDE0NDMzLjEyODE0ODgzNDYxNCwxNjQzNy43NjYwMTY5Mzc2NzYsMTAwMjg4LjM3NzIxMDgwOTg1LDUxODY5LjY1Njk0ODk2NjY5LDEyOTY0NC4wNzM1ODYxMTU0MSw3MjcuMDY0ODYzMDAxNDQwNiwxNDYyLjY5NTUzMTAwOTc5NywzMTI4LjgxOTk4Nzk0MzU3OCwxMTc4ODAuOTExOTAzMTAzOSwzMDUwLjMwMDc5NTMwMzkyMSw2Ljg5NDYyNzc4NTI1MTk5NzUsNTUuODYyNzA1Mzc5MTc1NDI0LDI5NzguNTU1MDE0ODA1OTE1Niw3LjU3ODgwMjQzNDg4MjQ0Niw4LjU5NDc0NjIxNDAzNzMwMiw4NC4wNzY3NzM4MDA2ODMzNiw1Mzc3MDcuODUxNTU2ODk1NCwzMTk3Mi43ODA5MDgzMTk5NzUsNjMuNzE3MzM1MjQ5MjEyMjQKKzE2LFdlZCA5IEZlYiAxMSwxMTc0Ljg3NTExNzQwNTcxOTMsMjAuNzgxOTU4NzU2MDQ5NTM3LDM1NDAuMzk0OTQ0MDU0NzUxNywxMzcyLjI4NTE0OTczODMzNzQsODY3MS42MTk0MTEyMjU1OCw2MzI2LjI0MzU4NzU0Mjg5OCwzMTY2NS4yMzU4Mzk4Mjk1NjIsMjEyOTQuMTYwMjQ0NTgyNTIzLDI0MTM0LjE2ODk2NjMzNzcsMTM0MDk0Ljk0NTgwNDc5NDUsNjM5MDguMzMyNDc1NzI0ODksMTc0NDY5LjQ2MTUxNzIzMjU2LDExNTcuNjg5NTY1NDk2MzY2OSwyMzM0LjAxMDcyODg2NzM3ODUsNDY2OS43NzEyNzQ2NzYwOTksMTU4ODk2LjE0NTYzMTE2MTA4LDQ1NTAuNzc2OTY0NTg0MDA1LDEwLjYyNDQ1NjQ0ODQ1NTgsODkuNzk5NjU1ODY1ODI0NDksNDQzOC43NzA3MzM4MTY0NDEsMTEuNzUxMzc3OTQwNjcyNTU2LDEzLjYyNzE5ODIwODM1Mzg5MiwxMzguNzc0NTQxNDQyNDM0OTIsNjE3MzM0Ljk3NDU0MjM0NTUsMzgwNjIuNTM3MTYzOTc1MTEsODcuNTc3NjAyMTIyODYxNjYKKzE3LFRodSAxMCBGZWIgMTEsMTU5My4wNjk5NDA2MTU1MzYzLDMyLjMzMDA0NjU5Njk4NTY0LDQ4MjkuODIxMTY4NjQ5NjI1LDE5MzcuNTQ2MzU3NDAzOTg0NSwxMTc1NS41ODc1MDUwNzM0MDEsOTU5MC41OTQ4MDkwNTIyMTIsNDU5MDguNTE1MTk3MzAyNjYsMzA5ODcuNTYzOTQ5NTkyOTk0LDM0ODkyLjE2MzQxNjAwNzA4LDE3NDE1OS4wMjY2MjU4ODU5Miw3NDg3OC44MzgwNTYyMTc5LDIyNzg0NS44NDg2NzczMzg4LDE4NDMuODY0MzYwMzE4ODQ4NCwzNzI4LjM5NTI5NTM0NTIwNyw2ODk5LjIyNjYwODM3NTk3MiwyMDgyNTkuMzM1ODQ0NzgxMjUsNjcyMC44OTQwNjE5OTQ0NDcsMTYuMjIyOTAzODMwODcyODUyLDE0NC45NjAzNTA4NDkxMjkzLDY1NDQuODk0MzE2MDExOTA2LDE4LjA5ODg4NjgxOTgyMjgsMjEuNjQ2ODUzOTA5MTA3NTk4LDIzMS42Nzk4NDgwMjk1NjQ3Nyw2NzE1OTcuNjA4MTY0OTE5LDQyODg3LjczMzUyODQ1ODA5LDExNy4yNDkxNTc1MzgzNzY5OAorMTgsRnJpIDExIEZlYiAxMSwyMTMxLjY5NDAxMDkxMTQ5Nyw1MC41MzY2MjAyMTY5MDEzNCw2NDU0LjM1NDAzNTU2MjkzNzUsMjcxNS40MTgzMjI4NTg4ODMsMTU1NTUuMzQwODQ1NzE5MTk4LDE0NTk5LjI3NTgzMjk0MjMyLDY2MzAxLjkzMTY1MTgxMjk4LDQ0OTc2LjQ5NzAzMjg3NTE3LDUwMjI2LjYyOTE1NDczMDczNCwyMjExNjMuNzc2MjE5NjcwOCw4MzU2MS45MjkwODc4Njc2NSwyOTA1NzYuMjMwODUzNDYzMDYsMjk1Mi43NzM3NzQ0MDU2NTY3LDU5OTEuMTUwNDEwNjU0Mjg1LDEwMjA0LjYwMDc3OTcxNjcyOCwyNjcyOTAuMTcwNDgyMTg0NTYsOTkzOS45MTY2NjYyOTM4MzksMjQuODM0MzY1MzEwOTk0MzQzLDIzNS44MDcyOTc3MTg1Mzc0LDk2NTcuNjY3NDMzNzc0NDk3LDI3Ljk4MTk0MTE4NjQ5NDg1OCwzNC42NDMzMDI3NzEzNTQ3MywzODkuODc0ODE5MzYwMjk5NzQsNjkyMjU3LjczMDUwMjQzOTgsNDU3NzcuODUyODg2MDI3MzE1LDE1NC4yOTIyMDc5NDY1MjU2OAorMTksU2F0IDEyIEZlYiAxMSwyODIwLjY5OTk0NTIzNzc1Niw3OC44MDM0OTQ3MDMxOTI5MSw4NDA4LjQ3MzY0Mzg3NDc1LDM3NzcuNTE1OTg1MjkzNjg3NywxOTk3Mi41Mjk1NDc4Mjg5OSwyMjE3NS4xNDMzOTMxODQ3MDYsOTUwODcuNDI2Njc5NjA3MjMsNjQ5MTguMjQzODcyMjM1MzYsNzE3ODEuNDUyODE4OTA2MDEsMjc0MjIyLjMzMjQ3MDI2MjYsODg1MDMuODU3MjM5NDc0NjYsMzYwODUxLjg5NjkzMzczMTMsNDY5Ny44ODM5NTE4ODE3OTksOTU2Ny4xMzMwNzQzOTQwMDksMTUwNjEuNTE1NjQxNzA5OTcyLDMzNTQ0MS44OTQ1MzUzMjgsMTQ2NzkuOTkyMDI1MTYxNjc5LDM3LjkzNTIwNjc5MDY1NzU0NiwzODEuNTg5NDQ0MjMxOTIyMSwxNDIxOC4zNzYzOTQzNDQ0NDEsNDMuMTY3OTg1MzcwNzM4Nzc2LDU1LjI1ODUwMjk2NzgwMzk1LDY0OS43OTQ5NTQyNjA3MTg3LDY3NDkzNS4xMzE0OTIxOTk2LDQ2MTc1LjIyNjY0MTI5OTgxLDE5OS41MzkxMDg1NDAzMDUyMgorMjAsU3VuIDEzIEZlYiAxMSwzNjc0LjcxMTU2OTI4ODQ4MDQsMTIxLjMzNTM4MzA3NDI4MDIyLDEwNTQzLjIyMDc4NjcwNDI3OCw1MTc4LjU2ODA3NTYyNjAxNCwyNDUzNy42MTQ3OTEwODI2OCwzMzI1OC42MDEwOTYzMDgxNywxMzQwNzEuMzgxNjQ3Mzk1MTQsOTIyODYuNTgzMjYxNTEzNTMsMTAwODQ3LjQ5MDM0NzY5NTMsMzI5MjI2LjE5ODM1NTQ4MjEzLDg4MzExLjYzODc4MjYwNzIyLDQzMTg5OC40NzE4MjEzNDkyLDczMzQuOTk2MzI1NTY1MzU4LDE0OTk5LjI5NTY1Nzc5MjE3NiwyMTk4My42OTE2NDYxODUzOTgsNDA4MDk0LjgwMzcxMzIzMzU2LDIxNDY1LjIwMjk4MTU4MjkxNiw1Ny4yOTc5MDM2MTM2NjU3MSw2MDcuMzgzNDY5NzgyMTA2LDIwNjk5LjI5NDAyOTA5NjcyNCw2NS44MjQwMTMyODA5MjAzNyw4Ni45Mzg1OTAwMTM0ODY4NywxMDYwLjUyNDg0OTcxNDcyODQsNjIwNjIwLjM1NTI1NTIyNSw0MzgwNy44MzQwNTIxNDYzMiwyNTIuMDIzNjQ0MTYyOTE2NDQKKzIxLE1vbiAxNCBGZWIgMTEsNDY4Ni42MTIxNDY4MzMxNzMsMTgzLjYyMDMzMTI0Mjc5NTk3LDEyNTUzLjkzOTIyMDYwMDI1OCw2OTQwLjU2NTQxMzEyNzcyNCwyODQyOS4xMjIwNTYzMjI0MTYsNDg5NTMuMzUyNjIyNDg2MDMsMTg0MTU1Ljc3ODg2MjIxMjkzLDEyODExMi43NjA1NzExNDQyNCwxMzc5OTAuMDc5NjQ5NDc1MzIsMzc4NzUzLjk0NjcwMDUwNjcsODI1MDkuNTk5MTMyODA5NzcsNDkyMTQ2LjcxODg3NDgyNDY0LDExMTg0LjE3NTk3MjU2ODQzOSwyMjk4Ni4yODkwNDk0OTEzMzcsMzE1MjIuODg0MzIxODgzMjYzLDQ3NjEyOS42NTAzMjQyODczLDMwODg1LjIwNjk1Nzg0MTI3LDg1LjE2MTg1NDA5NTA5NzE3LDk0OC42NDU3NDIxOTYxNTE3LDI5NTk5LjUzNjk0NDQ3MjIyNCw5OC43ODAxMjU5NTA4OTY4NiwxMzQuNjAwMjgzMDg2MTU5ODMsMTY5NC42MzY0NDQyNDk0OTczLDUzNzgwNC42NTI4ODMzMTYsMzg5ODcuMjUzODIwMDg4OTIsMzA4Ljk1NDIzMTcyMDc1MzQ2CisyMixUdWUgMTUgRmViIDExLDU4MzAuMjI0NTcyMzc4NjY1NSwyNzMuNDA4MDI0NTE1NTUzMywxNDA0Ni40OTYzNDQ2NTEzODMsOTA0NS41MjkwMjQ1MTU2NTQsMzA3MjEuMTI2OTM0ODI2MDU4LDcwNjQxLjgyNTg5MzA2MTgsMjQ0OTc2LjczNjYwNTUxNjE0LDE3Mjc5NS4yNTY2OTQxMTc2MiwxODI3NTYuOTE1ODcyNDI1MjgsNDEzODUzLjYyODYxMjI2OTUzLDcyMTE4LjQzODQyNTQ0MjEyLDUyODQ2NC4yMDgyNDMzMDQsMTY2NjYuMzkxNzUxODg5MjYsMzQ0ODAuNDQwNzMyMjAyMTMsNDQzMTAuOTg4NDU0NDM5NzksNTI3ODAzLjM5NTI3NTIxODgsNDM2NjIuMzUwNDUyMjM2NDQsMTI0LjYzNjA2MjU3NTk2MDIyLDE0NTkuNDM2NjM3OTgxNjY4LDQxNDc5LjM0Nzk5NzMwOTQ5LDE0Ni4wOTIzMTU2NTQ2OTUyLDIwNS44NDU3MDcxMDE2OTUzMywyNjY2LjUwMDE5MzM1OTA2MDYsNDQwODcyLjU5NTA3NzA0MzYsMzI2MzAuNjcwMjk5NjM4NDQsMzY2LjY3MTYxMzMwMzU4ODMKKzIzLFdlZCAxNiBGZWIgMTEsNzA2NS4yODU4OTMxNTU5NjcsNDAxLjc5MTUwMDQ3MzQ3MDI1LDE0NjU4LjEyOTc4MzM3Mjk4NCwxMTQyOC42MjQ3MzEwNDEwODcsMzA3NTMuMzUyMDAyMTk4OTI4LDEwMDAxNC40MDI2MzU5MzE1LDMxNDI3Ni4xMzU2MzA5NjE4NiwyMjU2NzMuMzQ2NTc3NjQ5MzUsMjMzMjAyLjMzNjI4MDMyOTc2LDQyNjg2NS42MzgzMDk2NTkxLDU5Mjg1LjcwNDUzOTY0MDQ3LDUzMTA0Ny45ODcyNjA2MDU5LDI0MzA2LjUzNzUyODQzOTYzLDUwNzMzLjA5MTQxMTQwMzY0LDYxMDY0Ljk5MDQ3NDg0ODE2NCw1NTIxNDQuNTM3MzMxOTY1OCw2MDcwNi4xMzI4OTU5NjEwNywxODAuMTk1MzA4ODgyMTU5MDUsMjIyMi4yNDI3NTkzOTc2NDEzLDU2OTU5Ljc2OTY0MjE5ODk5LDIxMy43MzgzMTY2MDY1NzYwMywzMTIuNDY5ODY4MzA0NjkxLDQxNTMuNDM4MDQ5MTI3NDQwNSwzNDQ3MDguMzkzNTYwNTA4MTUsMjU4ODYuOTEwMDg2MDk2MjQzLDQyMS41ODYxOTgzMzk0NjE3CisyNCxUaHUgMTcgRmViIDExLDgzMzguODUzMTQzNDE0NDIsNTgzLjg3NDY3NTg3NDk0MjUsMTQxOTUuMjkxNjMxODE4OCwxMzk2Ni4zNjU0MTAzMzU1OCwyODQ0My4yNDI2MDE4MzIwNjYsMTM4ODE0LjIwMzMyNTUwMywzODY4MzIuNjM5MDcwMzE4MSwyODQxMzkuMDI1NTM5NDIwNjYsMjg1MTI1LjQ0MDc3MTE3MjQsNDE0MTMzLjM4NjM0NTQxNjgzLDQ2Mjg5LjI1NjMwMzM1ODc2LDQ5NzcwNC45NDExODM3MzYyNiwzNDYzOS40Mzc5NTgwNTU5NzYsNzMxNjIuMDA5MDc3OTkwMTQsODI0NTcuOTY2NjA5NjIxNjIsNTQyNjcwLjcwNzUzNzIzMDUsODMwNzIuMzY1NzA0NTcyMDIsMjU4LjEwMDY1Mjg2NzgwOTEsMzM1Ny4wNzg0Nzk4NTc2MDk2LDc2NTk5LjU4NzcwOTE5NjYsMzEwLjI1ODQ3MDk0NTI4NDU2LDQ3Mi4wMzYwMDYzODc1MzU5LDY0MTQuNzU2NTcxOTEzMDI1LDI1OTgwNC4wMjgzMDEyNzE3MywxOTY4My44NDY5NjI5NzM3MSw0NzAuMTI2MTIyMDE0NzAzNDcKKzI1LEZyaSAxOCBGZWIgMTEsOTU4NS40OTcxMjg4OTkwMjQsODM4Ljc4ODg2MjIyNjI5MzMsMTI3MzYuMDc5NDcyOTA3MzE3LDE2NDY5LjY4NTY4MzI1NzYxMiwyNDM1OC4xODc5ODQ1MDE5NzIsMTg4MTg5LjY4MjMwNjA1NjIsNDUzNTg5LjAzNTM5NTU2NTk3LDM0MjU4Ny45NTE5NDg0ODM5LDMzMTUzNi44MDE4ODAxMjYzLDM3NzU5Mi4xNTM1MjI5NTQ0LDM0NzMyLjY1MzA2NTYxOTI1NSw0MzUzMDUuMjUzMDE4Mzk1NSw0Nzk3OS4yMjI1NTIyOTA3MjUsMTAyOTUyLjIzMzYzOTA5NjA3LDEwODgxNS42MzU4ODg1OTIxNyw1MDAxNzEuODc3NDkxMTM5OCwxMTE3ODkuNTkwMDY1NDY2NDEsMzY2LjcyMTAxNjIxNzAzNjU1LDUwMjkuODkzODcyMTQxNzA3LDEwMDYxNS44NTY4MTk1MTksNDQ3LjM1Njc4OTU0NDc2MDY2LDcwOS43MjIyNjE5MTE2NTMyLDk4MDguNDg5NDk5MDYxMTc2LDE5MDgwNy40MDQyNjk3MjE4MiwxNDUxNi4xNzMxNTE4NjAyMDYsNTA3Ljc2MjU0ODI2NDI0MDQKKzI2LFNhdCAxOSBGZWIgMTEsMTA3MzMuNzcwNDkzMzg0NDYzLDExODkuMjIyOTYwMjk3NDM2NywxMDYyMS4yMTIzNjU5ODc3MTQsMTg3MDAuNTA3OTczODcyMTcyLDE5NDYyLjYyMjM2NTUzMTg1NCwyNDc3MTEuMjQxNzkzMTY1OSw1MDIzNjguMjE1MzI3MjEyMzUsMzkyMTU3LjE2MDk3ODIwNTQ0LDM2MzQxNS4wNjUzNjc2NTE1LDMyNDM0Ny41MjM5MjI2MTgxMywyNTMzMy42MzY3NzUwNjUwODIsMzU3MTQ3LjUzMjg3ODM2OTIsNjQwNjkuMTQxNDg1MTA0Mjk0LDE0MDM4NC44MDY2NDUzMDIxNiwxMzk2ODEuNzQ4MzY1MjY5Myw0MzMwMTYuMjMwODU1MzQ1OSwxNDc1NzAuODM0NDg2MzM4NDMsNTE2LjkzNzUwNzU5MjM0Nyw3NDYzLjI1MDY5MzMxOTQxMiwxMjg0OTQuNTQ5MjAzODU1MTIsNjQwLjc1MTUyNjQwODgwNzYsMTA2MS4xNjg1MDkyNjg2MDIsMTQ4MTAuNjcyMjQwMDkzMTIsMTM3ODYxLjYxNTM5NDA2ODQ3LDEwNDk0LjQ0NTM3NjM3MDEwNiw1MjguMzU4ODg1OTIyNjIwNQorMjcsU3VuIDIwIEZlYiAxMSwxMTcyMS4wMjcyODM2NTE4NSwxNjYwLjcwMTUwODY2NTE4NTksODMwNS45MTcyOTc3NjUxNTYsMjA0MTcuNjQ0ODg5OTU4MTk2LDE0Njg2LjkxMDE0NzYyMzYxNywzMTQyNjQuMjQyNzkzNTM5LDUyMTIyNy4zMTg4NDY2MjczLDQyMjMzNi4yNzU0NjU2MDQyNywzNzI0NTQuMTU0NzI0MTU3OTQsMjY0MDg0LjgyOTE5NjYxNTgsMTgxMzkuNzc4NjczMTU4MzI2LDI3NzQ1OS43MDEwMzI5MTM1LDgxNzA1LjQ0NTMzMDQ3NjcxLDE4Mzk4Ni45NTU4ODg2NjY5LDE3MzM1MS4yOTE5NzAxNTg4NywzNTQxMjMuMzMxMDMyMDI4MiwxOTA0MzIuMTc2OTc2NzAzMDUsNzIyLjkwNDYzNzg5NDgzMTEsMTA5NTIuNjU5NDI3NTU2NzExLDE1ODU5MC41NjQ1ODUzMzY0OCw5MTEuNjg3MzI4NDkyNDMsMTU3Ny4yNDc4MTI2NTgwNjQsMjIwMzkuOTM1NzAwMTA3NTk1LDk4NzM1Ljk3NTExNTAzNTMxLDc1MDIuNDEyODgyNzM1OTExLDUyNS4zNDE2MDY3Mzg3ODI2CisyOCxNb24gMjEgRmViIDExLDEyNTA3Ljk3NDUwMzMyNTQ5MSwyMjgwLjM4ODA4NjE1MTUyMyw2MTY5LjMwMjg5MDU3MzA2MjUsMjE0MzMuMjgyOTgxODMxMjc1LDEwNjE3LjE1NzAwODk1NzM2NSwzODExOTguMjEyNTI5OTA5NSw1MDM2MzYuMzM1OTE4MzgxMDUsNDI0NjU3LjIzMDU3MjE0MTQsMzU0OTQzLjM1OTE1MTg2NDMsMjA1NjQ3LjE5NDE0NDAwODc0LDEyODUwLjA3OTgxMzM4MTU4OCwyMDY1NDIuMzEwNTcxNTg5OCw5ODUyNC4yMTAzNDMwNzk5NiwyMjk3MzkuMDYzMTM4NzAyMDcsMjA2NTE1LjM0MDcwNjMxMjYyLDI3NjA5Mi45Mjc0NTA2Nzc4NSwyMzkyMDAuNTM1MzYyOTM2MywxMDAzLjM1NTI4Mjg0MDA1NywxNTg4OC40ODgxMDc1MDg3MjksMTg3ODUzLjU3NTI1NTU5NjA1LDEyODkuNDEyMjM4OTY5NTU5NCwyMzMxLjQwOTMyMzgyNzc4OCwzMjI3OC40MzAwMjk3Njc0NjQsNzA0ODEuNjQyNzM4MjIzMTksNTMzNy44NjMyNzUxNzgyMSw0OTQuOTA4MjI0MzEyMzIxNAorMjksVHVlIDIyIEZlYiAxMSwxMzA4MS4zMTY3NzAwNDIwNTYsMzA3NC41MDg1MTc5OTQ2MTYzLDQ0MTMuNTc1NTA0MDM2NzA4LDIxNjUxLjg5NzEwNTY2MzA5LDc0NTMuNDYyMTg2MjE4ODcxLDQzODM3NS4wNDYwNzcwNjEzLDQ1MjQxNS42MTUyNjAyODkwNSwzOTY5MTMuOTExNDE3MjA1MywzMTQyNTguNTY5MTg3NjUwNDYsMTU0NzUyLjAxNDMyNTg3MjM1LDkwNTcuNTEzNjExODkzMjQ0LDE0OTEzNS4wNDM5OTI3Njg1NywxMTEyMzQuNTY0OTM5NzcwMTUsMjcwODIxLjMyMDkzNTE2NSwyMzQyNzIuODk4NzM2MzUwOCwyMDc1MDYuMDYyMDA0NjAzMSwyOTA5MTUuNTIwMzQzNDY2ODQsMTM4My40NjE3MDEwNjkwMDgsMjI3NzcuNjM3NjEyMDEyMTkzLDIxMTkwMy4wMDIzMzI3MDUxMywxODE0LjcyMjk2NTAwNDEyMiwzNDI5Ljc5OTI2NDYxMDgzMzIsNDY0NjQuNDI2NjY5OTAxNTUsNTAzMzIuMjc5Njg0MDQ5Mjk2LDM3OTYuMzcwMTA1OTYzMTM1LDQzOS4zMTU0NDg2NTY4MDk4NQorMzAsV2VkIDIzIEZlYiAxMSwxMzQ0Mi4wNzgyMTc4MDg2Niw0MDYzLjIwNjMyNzUwNDE1MiwzMDgwLjI5NTQ0ODIyMjY4LDIxMDc5LjAwMjYzMTE3OTU1LDUxMzkuODY0OTg1MDc4Njg4LDQ3Mzk2MS4xNzc3MTQwMDgxNCwzNzkxNTcuODIzNTE4NTEyMiwzNDUwMTguMzQwODgxODI3MywyNTk3MTAuNjg0MjgwMDk0MSwxMTM2NjcuOTE3ODE3NjY2MzcsNjM3OC4zNDE1NDg1MTQ4NjQsMTA1NTkyLjY1MDYyMTA3MDM3LDExNjU0NC4wMTE4MjAxMDE5OCwyOTg2MjkuODUwNDMzMzAxMiwyNTA5MDguMzEwMzk4NTkxNjUsMTUyMDQ4Ljc2NzI5NjgwODA0LDM0MDMyMS43NzgxNzY3NjQ3LDE4OTcuMTYzOTM1OTI4NTMyMywzMjI1NC41MzMyMzY3NTY2NjMsMjI1Nzc2LjQ1OTI1MzQzNzA2LDI1NDQuNjI1NTI2NjU4MzYyLDUwMjQuMjU3MjM0MDMyNTY4LDY1NjIzLjM4ODc4MzkxNzczLDM2MDQxLjQwNDg4ODY5MzI4LDI3MDYuNjM2NTY1MTA4NzkyLDM2Ny4zMTQ1MzM1NDQ2MTQ0CiszMSxUaHUgMjQgRmViIDExLDEzNTg5LjEyMzIyODAyODUzMyw1MjUyLjMzMjk5Mjc3MzI2NzUsMjExOS4wMzgwODU2NjU5MDAzLDE5ODA3LjkzMTA3NzYwNjE2NSwzNTEyLjQyNTU0MjMxMDQxNzgsNDc4MzE2LjA4NDk1MDYyNjIsMjk5MDEwLjY4NzQ4MjU5OTIsMjgwNTkzLjUxODQwNzk2NDQsMjAyMjc5Ljg0NzQwMzMyMTEsODIxOTUuMjUzOTUyMDc2MjcsNDUwMC4xOTE4NTI2ODQxMTYsNzM5NTMuNDE5NDk1NzcwMTgsMTEyNjIxLjYzNzY3NzEwNjQsMzA1NTM4LjA2ODY5MzU2MjYsMjUxNjkyLjIyOTEwNjYzNTY3LDEwOTczNS43NTc3MjQ0MTc5MywzNzk5NjcuNTQ2MDA3Nzk0MSwyNTg5LjkzMzkwMzQ0NDc0NDQsNDUwNjkuMzA5OTY0MTgwNzYsMjI1NTIyLjg1NTI0Mzg3NTk0LDM1NTguMzY0MjQ2OTA4NzkxOCw3MzI4LjY3OTY1MTE0MDE5Miw5MDcwOS40NDA2NTA3NzMzOCwyNTkxNi43MjI0NzQyMjc3OTQsMTkzNy44NTQzMjAyMzY2MDQ1LDI5MC43ODQ4NjQ4NjY0Nzc1CiszMixGcmkgMjUgRmViIDExLDEzNTEwLjkwNTUwMDU3MTUwMiw2NjIzLjUzNzQxNzQ3MjU1OCwxNDQ4LjEyOTAxNjE2NDcxNTcsMTc5OTguMTUwMTE4NTYzODg0LDIzOTMuNzg2MTI2MTU5NTQ3LDQ0ODY0Mi4zMjUyMzQ3MTA4LDIyNDU1NC4yODk4NzEyNjQ5OCwyMTU3NjkuNTc5NzIzNzAyNzQsMTUwMzY0LjE2NDM4OTc2NzUsNTg5MDMuNTU0OTk0MDMxMzY1LDMxODcuNDg1Mzc0ODU0OTAzLDUxNTY1LjUwNTU1OTQ4ODI0LDEwMDI1MS42ODM3NTMzMjcyOSwyODg1OTMuMjc3MTgwNjY0MjQsMjM1MTg4LjcyMjkzMzQ3OTYsNzg2NzMuMzA2NDI3NDcyODQsNDAxNTczLjcyNDA1NDkwMDA2LDM1MjIuMDk1OTM5NTQ3Njg4LDYyMDQxLjE4NDc2NjQ5NjM3LDIxMDEzOS44MTA0OTY1OTcyLDQ5NjUuNDM2NjI3MjkwNjcxLDEwNjM5LjcwNjQ3ODAxNjUzOCwxMjIzNDIuMTk2ODc1MzkwNDUsMTg3MzMuNzQzNzUxNjc1MDI1LDEzOTQuOTU3MjMyMjA0MzExLDIyMC4wMDMxMTY0MzA5NTc2OApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9EZW1vZ3JhcGhpY1NFSVJEaXNlYXNlX0ZEX1JlZmVyZW5jZS9GbHUvbWVuL0lfMi5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0RlbW9ncmFwaGljU0VJUkRpc2Vhc2VfRkRfUmVmZXJlbmNlL0ZsdS9tZW4vSV8yLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MjQ4M2MxCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9EZW1vZ3JhcGhpY1NFSVJEaXNlYXNlX0ZEX1JlZmVyZW5jZS9GbHUvbWVuL0lfMi5jc3YKQEAgLTAsMCArMSwzMyBAQAoraXRlcmF0aW9uLHRpbWUsRUctRlJHLUcyMTAwMDEsRUctRlJHLUcyMTAwMDIsRUctRlJHLUcyMTAwMDMsRUctRlJHLUcyMTAwMDQsRUctRlJHLUcyMTAwMDUsRUctTE9FLUcyNDAwMDEsRUctTE9FLUcyNDAwMDIsRUctTE9FLUcyNDAwMDMsRUctTE9FLUcyNDAwMDQsRUctTE9FLUcyNDAwMDUsRUctTE9FLUcyNDAwMDYsRUctTE9FLUcyNDAwMDcsRUctTE9FLUcyNDAwMDgsRUctTE9FLUcyNDAwMDksRUctVVBFLUcyOTAwMDEsRUctVVBFLUcyOTAwMDIsRUctVVBFLUcyOTAwMDMsRUctVVBFLUcyOTAwMDQsRUctVVBFLUcyOTAwMDUsRUctVVBFLUcyOTAwMDYsRUctVVBFLUcyOTAwMDcsRUctVVBFLUcyOTAwMDgsRUctVVJHLUczMDAwMDEsRUctVVJHLUczMDAwMDIsRUctVVJHLUczMDAwMDMsRUctVVJHLUczMDAwMDQKKzEsVHVlIDI1IEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyLFdlZCAyNiBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMyxUaHUgMjcgSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDgwNS42MTMwOTA5MzcwMTUzLDY1OS45OTkyMTkyMjIxMzQyLDg3Mi4zMzIxNjUzMjE3MzE2LDAuMCwwLjAsMC4wLDg0MC42MzkwMjgyMjcwNzcxLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwyMzM4MS42NTA3NDA5MjQ1NDYsNTQ5LjkwMjU0MjIyMTA4MDgsMC4wCis0LEZyaSAyOCBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMTQ0OS42OTgxNDc3MzgyMzYsMTE4Ni44OTI5NTcyMTU0Njg0LDE1NjkuNzg4NTA3MzE3NTY1LDAuMCwwLjAsMC4wLDE1MTIuNzg3MTM1MTg1ODE2NiwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsNDE5MjguMzI1NzA5NjUzMTksOTg4LjQwNzk1Njc5MDYwNDQsMC4wCis1LFNhdCAyOSBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMTc0Ny4yODIyMjUyNzIzMDc2LDE0MjkuNzkyNzU3MTQxNTE4LDE4OTIuMDUyMTUxNDQyMjQ4NywwLjAsMC4wLDAuMCwxODIzLjM3ODg2Mzg4MDQzMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsNTAzOTUuNTA0MjgwMDM3OTQ1LDExOTAuMjE1NDMyNDU0NTYwNCwwLjAKKzYsU3VuIDMwIEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwxNzYzLjAzNDk1MjQ3MzQ5MywxNDQyLjA5MDQ3MjEzNzE3MzUsMTkwOS4xMzI3NzA3NzU3NzIsMC4wLDAuMCwwLjAsMTgzOS44NjM2MjI2Njc5MzIsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDUwNzM3LjkyMTExMjcyNDUyLDEyMDAuMDczMzM0MDIwMjQxLDAuMAorNyxNb24gMzEgSmFuIDExLDQuODg4Njk5ODA2OTE2MTE3LDAuMDIwNjgwODQ3OTMyOTg4MTUsMTEuMjQzMjIwNTQwMTExMzg0LDQuMjA1NTYxMDQ1Mjg2NTg1NSwyNy41NjQ4NTQ4NDI1MTY3OCwxMC44MDAzNjc5OTc3NzIyNjYsNzYuNDE4NTgyMzA1NDA1ODUsNTAuNjI4MjM1MjQyMzQ0MzksNTkuNDcyMjQwNjI0ODM5NTM2LDIzNDAuMjY5ODc5MzA5NjU5NywxODIyLjI0NjI2MDE5NDI1OSwyNjI2LjA3MTg0ODgwMTk1MywwLjg5NTUxMDYyNTExMjQxNzMsMS43NzM5NjM1NTYzNjE4ODQ1LDEwLjExMzE5NjIwODYzODY5MiwyNDk3Ljk0OTE4NjIzNTgwODYsOS45MzAzNDA4ODQ0NjQ2NCwwLjAxMjM0ODcxMjc4MjM1MTk4MywwLjA2NTc1NDQ4NDU2NzE1MjgsOS43Mzg1NTc1MDk3OTAzNzcsMC4wMTI5MzUxOTU4OTA0NTM5MjgsMC4wMTI3MDM3NzE0NTg2NjYzMTIsMC4wNzUxNzkxMjQ0NDkwNzAyNCw1Mzg4MS41NzIzODA5MjE1MSwxNDU5LjYyNjA0MjEzOTQ4MzQsMC4zNzU3NTU5NTAyNTQxNgorOCxUdWUgMSBGZWIgMTEsMjAuMDA0NTQyNjg4MDA4MTc2LDAuMDg0Nzc4OTIxMDE2NzEyNjUsNDUuOTg3ODI5MjU5NzI0ODYsMTcuMjI1MTk4ODE2MzgzNDQ3LDExMi43NzMwMzM5ODU4NTQ1LDQ0LjI0ODUwNzg5NzU5NDU5LDMxMy4wMTkwMjcyODgwMzg2LDIwNy4zODEzOTA1MzA3MTA3NSwyNDMuNjAzNDM5MzE2NDA3Myw0MzY3LjU4MDY3OTMyMzkzNywzMTkzLjMzNTAwMDY1NjMyNSw1MTA1LjUzMDA2OTY4NDI5MSwzLjY3MDk1MDIyNjE5NDU1MjQsNy4yNzE5ODc2NDU3Mjc2NjUsNDEuNDI4OTYzMjE5NDkyOTksNDc4Ni4xMDI3MTk3MDIxMyw0MC42Nzk5NjQ1ODYxOTg2NjUsMC4wNTA2MDU5NzAxODg1NTczNSwwLjI2OTUzNzE1NDc3MzE5MTczLDM5Ljg5NDA2MDQxMDk0MDI0LDAuMDUzMDA5NDIzNzU2NTAzOTksMC4wNTIwNjEwMjg3NjM5NjQwOTYsMC4zMDgxODkwMTUyOTkyOTE1NSw3MDY3NC4wNjA5MDYyOTMxLDI0MjQuNjM0OTE2MjQyMDcwNiwxLjUzNzA1NjE0OTI5MTY1OAorOSxXZWQgMiBGZWIgMTEsNDYuODc4ODQyNDQ1MDg5MDIsMC4xOTkwOTg3NzMyODQ5MTU3LDEwNy42ODkyNjY2NTk2MzQxMyw0MC40MTQwMjAzMDQwMDY0NSwyNjQuMTQxODA4NjQwNzc0MzQsMTAzLjg1MDU5MzIyNjcyOTM2LDczNC40NTY1NTI1MzY2ODg0LDQ4Ni42MDM3MTU4Mjc4ODk2LDU3MS41NzY5MTQ3MjUxNzQzLDgxMjUuMzgwMDIzMTU1MTIzLDU3NDIuNTE5ODIwMDg3NTc4LDk2NzkuNzcxNDE1NzE0MDA1LDguNjIwNzQ4NzUxMjU4NDA3LDE3LjA3NzM3MDI3MDEwMTI5OCw5Ny4yMjIzNTU1MDk1Nzc1NCw5MDE1LjQ1NjkwMDkyMTc5Miw5NS40NjU0MTIyMzU5MTAzNSwwLjExODgwOTkwODY3NTI3MjU4LDAuNjMyOTU4NjY2NDUzNTMwOSw5My42MTk4MzE0MjI3MTc5NywwLjEyNDQ1MjYwOTYyNzY2OTAyLDAuMTIyMjI2MDIwMzU3OTE2ODgsMC43MjM3NjY0MDAyNTA2Njc5LDEwNDYzMi4wOTg2NDA0MTc2NSw0MjI5LjczNzE2NTU2OTExNSwzLjU5OTg2ODU3NzQyMTg2MTcKKzEwLFRodSAzIEZlYiAxMSw4Mi41ODA1NDM2Nzc1ODY1NiwwLjM1MTU2OTA4MDc5MzY5MTU0LDE4OS41MDU0OTA0ODI1ODMzNSw3MS4yOTA3NjA1MzQ4ODk4NCw0NjQuOTI0OTk3MjY1MjIzMywxODMuMjYzMDY2ODQ5OTM0NTIsMTI5NS42NjA4MzM0NjMzNjM4LDg1OC40NTIzNjkzNzUxOTU1LDEwMDguMzA5NzIzMjkwOTE5NSwxMzE5NC41Mjg5NTQxNDM1NjcsOTE2MC4zODM0MDk5MDIyNCwxNTgzOC45ODI0NzgxMTMzODgsMTUuMjIxOTY3OTM1NTY1MTYsMzAuMTU0MjY4ODA2ODcyNSwxNzEuNTQ2MDEyOTQ3MTMwNTgsMTQ3MTYuNjgzNDE1MzI4Nzk2LDE2OC40NDgzNzU0MDI0MTMzMiwwLjIwOTczNjU1MDk4MTM3ODg2LDEuMTE3NjIzNTg0ODEwMjk2LDE2NS4xODgzNjIxNTY3MTc4LDAuMjE5Njk3NjkzMDk2NTg3MiwwLjIxNTc2NzA2OTE2MjUwMzAyLDEuMjc4MDMwNjI5OTYxMTY3LDE1MTE4Ny41Njk1MzY5NDA0Niw2NjQ2LjI2NTIyOTA4MDg3NSw2LjMzNjM1NDA0MTA1Nzc5CisxMSxGcmkgNCBGZWIgMTEsMTI0LjU3MTYwOTM3OTE5Nzg3LDAuNTY4MTU5MjI4NzEzNjc4MywyODguMTkwMjM2MTA1OTk0MSwxMDguNTA2MDczNDM4NjY5MTYsNzA3LjMxOTAwOTM1Mzg1NDIsMjg1LjQzMTMxNjYyNjE0NDYsMTk4OC4zNjc2MTkyNDUwMzc1LDEzMTguMDIxMjI3OTAwMTQ5NiwxNTQ2LjE4NzA4MzM2NTk2MjMsMTkxMDkuMjQ2MjM0NDMwMjQsMTMwNjQuMTU0OTE1NTM4ODExLDIzMDU1LjAyMzQxNjI2NzcyMiwyNS4xNjQ2NjAwMzQ5NTk5NDcsNDkuOTI4NjcyNzA1OTg0MjMsMjY0LjMwNDQyNjQ2OTQzMDk1LDIxMzg4LjgyNTM2NDI4NiwyNTkuNDQzODQ5MjQyMzc5MjYsMC4zMzUxNjk0NDMwNzcxNDEyNSwxLjg1NTgwNjU4MDczNTA4NywyNTQuMzgwNTM3NDkwMTM2MjUsMC4zNTIzOTE4OTUxMzAwNzk1NywwLjM1MDE3NjcyNjk5NDMwODEzLDIuMTk0NTgxNTAwMjk1MzMsMjAzNTk5Ljg5NDYyMTg2NjMsOTM3NS45MjQzNzQ0Njc3MTksOS41NTA2MDk4NzgxMzgwODgKKzEyLFNhdCA1IEZlYiAxMSwxNzcuMTcwMzMxNjM5MTg0MDQsMC45OTE1NDgxMzM1MDQzNzg1LDQyMi41MjkwMjEyNzExNjM1LDE1OC41Njk0MDEwNzM1NjI3LDEwMzcuODg3ODc2MTA0MTI4LDQ0OC44MTkxMjQyMjkxMjczLDI5ODYuMDAxOTIyMDgzMTE0NiwxOTgyLjEzNTY2Nzg5NjU3OTQsMjMxNi4xNzc2NDM0MjAzNzYsMjYyMDQuNDI4MjEzMjA1NzM0LDE3NTIwLjY1MjU2NTY0NTMxNiwzMTg1My45MjcyMTg1MzIzMjgsNDYuNTQ2ODIwMjAwODQ5MSw5Mi43MDgwMzQyNTIyMjYzNCw0MDEuODI4MTUzODI4NzA3MywyOTQ3NS40NzMyOTY4MTkwODQsMzkzLjk5NTY5MDYzMTc4NDIsMC41Njc1NzA3ODg5NzkxODUsMy40Njk5MzM3MzczOTc5MDIsMzg2LjExOTg1NzM3Njk5MTUsMC42MDI4NjYwNzQwMTI2OTY1LDAuNjE4MjQyNTg2OTc4Nzg4Niw0LjQzMDk5Nzg2NDQyNDU4OCwyNTk4NDguODkwMjM0NjQ4NTcsMTI0MDUuMDk4OTU2MzAwNTUxLDEzLjU3NDgzMjk0NTY1MTczOQorMTMsU3VuIDYgRmViIDExLDI1My45OTUxNjUwODU0NzkxMywxLjkwNjE0NDU2MTk0MTEzOTUsNjM5LjI3ODkxNzkyNzUwNTQsMjM4LjM2NzQ5MjU2Mjc1MTcsMTU3Mi4xMTI3OTY3NjM2NTU4LDc1Ni4zNTc4OTMzNTMwMTcyLDQ2OTUuMjMwMTYwODM0ODk0LDMxMjMuODY3MDYyMTQxMDczMywzNjI3LjUyNzU0OTM4NTQ5NSwzNTkzMy43MTgwMTk2ODU4MywyMzIwOS45OTc5MzY4MzI0NDIsNDQyMDguNDY0MjUzMzU5NzEsOTUuMTYwNDUzNzAyNzQzMTMsMTkwLjI2MTI4OTQ1MDU0MDIzLDY0NC4xNzMwODIyNjc1MDY5LDQwNzMxLjIxNDY3OTU2MzYsNjMwLjUyMzM2Mzc1MDQ2NzIsMS4wNTMyOTY1NjU2MzczNjc2LDcuMTcwNDQxNzE0NzAzMzg0LDYxNy40NTEzNjYxOTk4NzMyLDEuMTMyNDU4MjMwMzUwMDgxMiwxLjIwMzY0NzM5NzcxNTI4OCw5LjgxODEzNDMyNTcwOTk2LDMyNDcyNy42MDcxMzc1Nzk3LDE2MTEwLjAxMjk4MjAyNjA5LDE5LjQ0NzI4NDY1NTI3MjcxCisxNCxNb24gNyBGZWIgMTEsMzc0LjE0OTM2NzI0ODkxMjksMy42NzY3MjQyMjQ4MTYwNjksOTk5LjU0ODE4ODkzNzQsMzcxLjAxMDAwODMwOTI1NjUsMjQ2MC40MzIyNjE2MTE1OTk2LDEzMTYuNzI2MTUyNjEyNjc1Miw3NjU4LjczNDUwOTI2ODc5LDUxMDcuNzY4ODA5Njk2NDQ0LDU4OTMuNjM2MTQ3ODA3OTMyLDUwMzg0LjYzODgzOTU4ODk5NSwzMTA3OS40NTYzNDMxNzk0NzQsNjI4OTIuODA4OTgxNzE1NDQsMTkxLjA4MjcwMDMxNDY2NTgsMzgyLjk3NDU0ODkxNjQxODk0LDEwNzEuMjM1ODA2NTQ1MzkxMSw1NzY1Ny41ODAyMDg0NjU0LDEwNDYuODQ0NzcxOTAxMjk5NywxLjk4MDI0OTQ0Mzc3NTkwMjgsMTQuNDk2MzEyMjgzMzkxNDM2LDEwMjQuMzI5MzcyNzgzMSwyLjE0Nzk0NDc0OTUzNzkyNjIsMi4zNDA3NzY4NzI0NzA5ODg4LDIwLjY3MDczOTQ1ODM3MDUxNiw0MDU4MDYuMTg4MzA3NjY3NCwyMTAyMi44MDA4ODM0MjQ2NywyOC41OTY5ODQ2MjE3MzY5ODYKKzE1LFR1ZSA4IEZlYiAxMSw1NTUuNjA1OTU5MzAzMDM3LDYuNjczODA0NzkwMTYxMTM1LDE1NTcuMjgyNzA4MTExNzA4OSw1NzkuMDE1OTI4MDg1MjY5NSwzODM0LjIyNTk4MDc3OTE2MSwyMjM5LjQzNzYzODA3MTU4MTcsMTI0MDcuOTUyNzg4NzE3ODI2LDgyOTIuNDA1MDI1NjIwNjEsOTUxOC44MzI3NzcwMTE4MDksNzE0MTEuNzQyNjE2NTIwNSw0MTc1NS4yNDgwNDI3MDUxMDUsOTAzNTEuODc0Nzg3MDEwNDYsMzU0Ljk3MjM5Njk2NzA0NDQ2LDcxMi41MTM2MjU0Mzg0NTYxLDE3NjIuNjAxNTcyMzc2ODA2OSw4MjUwMS4zNTc1NzYzOTM3MSwxNzIwLjU1MDE1MzQ2NDgzNzQsMy41MzYxMjYyMzc5MzI5NTEsMjcuMDUwNzI2MjMzNTM2MjUsMTY4Mi4zMjUzNTM4ODc3ODA3LDMuODU3MDk2MTA5Mzc3MzYxNyw0LjI3MDcyOTMwODE3OTEyOCwzOS40NjY3MDA3MzQ5MzQ5OSw1MDY4MDcuMzc5MjY5MzE0LDI3NDQzLjYwOTM2NzMyNjMxNyw0Mi4zMTEwMjU4Mzg1MDc5NAorMTYsV2VkIDkgRmViIDExLDgxMS45NjU4OTEwMjMyMzYzLDExLjMxODMzMDE3NzkxMTQ1NCwyMzUwLjY4NDQzODI0NjI0MjMsODgyLjEyNzg1NTgzNTE3MTksNTc4Mi44NjA2NjA0NjI4NDYsMzY0Mi41Nzc3MDUyMTA3NTcsMTk0NDQuODc0MTIwMjIyMjM3LDEzMDIwLjkyNDE4ODU1NTczNSwxNDg4MS42OTQ3MTc4OTg4MDEsMTAwMTI5LjYyMzM3OTAwNzIzLDU1MTYxLjg3MzY0OTcwMzI1LDEyODA2NC44MjU0MjA4NDgzMyw2MTEuOTk5MjY1NDU0MTY5NywxMjMwLjA3OTUxNTI4MDQyNTgsMjc5OC4xNjIzNTMxNzQyMzEsMTE2Njg4LjE4ODcwMjA4MjA3LDI3MjkuNDY4NDAzNjIxMzYxNiw1LjkyMjQ2NDM1MDI1NTc4NSw0Ni44NjU4MDYwNzQ3Mzk5OCwyNjY2LjgzOTY0NDQzNTYwMjYsNi40ODkyMTgwNjcyNTcxMSw3LjI4NjcxNzA2NDMwMTAyMiw2OS42NjM1MzgyMTM0Njc1Miw2MjM1OTkuMzI1Nzc5MTc2LDM1MTk1Ljg0NjcxMDUyMzA4LDYxLjQ3NDczNTU4MTU1Mzk3CisxNyxUaHUgMTAgRmViIDExLDExNTUuNzgyMDE1NzQ5Mzc1MiwxOC4zMTMzNjkwODc2ODU4NSwzNDE1LjU4NDkwMjEwNjY1NCwxMzAzLjU5NzY3MDk2NzQxMTQsODM4My41ODY2MzYzNzEwMjUsNTcxMi43ODQxMjY4ODg0NzUsMjk0NDMuMjcxNDUzOTc5NjU4LDE5NzYxLjIxOTIzODIzNjkyLDIyNDgzLjY5MDM5OTYwNDAxMywxMzcxMzQuMzA0MjEyMzkwNTMsNzA1NjUuMzI2NDc5NTgyMzgsMTc2ODc1LjExNDAyNTAxODcsMTAwNy4yMjA0MDA1OTQ3NDk1LDIwMjguMDEzMDUyMDI4ODkxMyw0MjkzLjQ5MDE1NjIyODIzNzUsMTYxMTI1LjI1NDA2NzY3ODYyLDQxODUuOTA5OTE1NTU5MjE1LDkuNDU3NzIyMjkzMjk3MjksNzcuNzA0MDY0NDE4NzkzMzIsNDA4Ni4wNjkxMTEyNjcwMDkyLDEwLjQxNzg4ODUzNzkxMTYzMywxMS45MTQwMTY4NjcyMjIxNTIsMTE4LjE0OTAzMDU5MjY1NDQsNzQ1MTYyLjY5NDk0Mjg5MDYsNDM2NjYuOTg4NjQxMzMyMDA1LDg2LjgxODcxODQ1MzgzMDk0CisxOCxGcmkgMTEgRmViIDExLDE2MDUuNTM3MzA1ODMzNzE2NiwyOC45ODM2Njc0Mzg0Nzg0OTUsNDgwNS42ODY4MDc5ODgyODksMTg4MS4yNDA3MDgwNzAwMTI3LDExNzQ1Ljk3NzQzODExNzYsODc5NC4wMjM0OTQ3NjcwOSw0MzU2My4zOTkzMjg4NTAzODQsMjkzMjUuODY0NzU0MDEyMDUsMzMxODMuNzg4MTIzODAwNzcsMTgzMDY4LjE3ODAyMzc1MjA2LDg2ODMyLjM5NTUxNjA4MzkxLDIzNzcyOC42MDYwMjY3MzU1LDE2MjYuOTQ3MTc4OTgwMTI1NywzMjgzLjcyNzY5MTU4Mzc5ODMsNjQ1NC44ODg5Njc0MzE2NiwyMTY5MTEuMDYxODg0ODU3MDIsNjI5MC40MjA3MjE0MDE5NjcsMTQuNzMxNDg4NjY5NTc1MDkxLDEyNi44Njk5OTAwNTkyMDc2NSw2MTMyLjUzNjE3OTE5NzUyLDE2LjM0MTU1OTA4ODc5NjU2NSwxOS4xNjI3NzQxMTQ5NTE0ODIsMTk4LjUzOTYzNzYxNzQ0NzM0LDg1NzM4My42MjkxOTczOCw1MjAwOS4wNTU4MDA2MDQ0NCwxMTkuMzk0Mjk1NzU2ODUwNDUKKzE5LFNhdCAxMiBGZWIgMTEsMjE4OS42NjA1MDM1ODQ0MjI3LDQ1LjU1NTc0Njk1MjM1NTUyLDY1OTAuOTcwMzYxNTg3NzYsMjY3NC41MDQyODg2OTA4MzYsMTU5OTkuMzk2NTM2NDIxODMxLDEzNDU1LjExMTM5NTg5MTgyNyw2MzY0My42NDYzODM1Mjc5MzYsNDMwMTUuMjEwMTM1NTIwNjIsNDgzNDAuNjcyMDk2Mjg5MDc2LDIzODcyMi40NzMwNjc1MTg5LDEwMjU2MC4yNTQ5NDE3Njc0MywzMTE2ODguODY4MjI5ODExMywyNjE1LjE4NjQ2MTU0ODkzNiw1Mjk0LjA1NjUyNDA1NTgzLDk2MjAuNDcwOTI2MzkwNzk3LDI4NTQ3NC4zNjkwMjkwNzg3LDkzNzMuMDA3NTExNzIwMTYxLDIyLjcyODY1MDE5NjE0MTYyMiwyMDYuNzA3NjkzOTcxMTAxNzUsOTEyMS4zNjk4NzM0MTQ1MjQsMjUuNDI5NDI0NjM0NjAwNTYsMzAuNzM0ODQ1OTE3OTUyOTIsMzMzLjkwNzQxMjk2NjQ5NTk0LDk0NjI2My45Njc3Mjc4NDcyLDU5MjkzLjIzNzE1MDI2MDU0LDE2MC43MTc0NTQ2MjU1MjM2NgorMjAsU3VuIDEzIEZlYiAxMSwyOTQzLjAyNjkyODM2ODMzMzgsNzEuMjg4OTkzNTQ0MTE0MTgsODgxNy42NTkwMjcyMDQ3MDUsMzc2MC44MDY2ODkwNjMxNywyMTE4NS4yMTgzNzI5NDQ4NiwyMDUwNS42MjQ5MjQzNzIxOSw5MjA5MS43ODM3MDYwNjQyMiw2MjU2OC4wOTE0Mzc3ODY4MjUsNjk3MjcuMzExNTkwNjQzNiwzMDQyMDcuNTg3MjA1OTQ0OTMsMTE2MDQwLjEwNzIyOTAzMTgsMzk4NTk2LjAwMDM2MTg3MjYsNDE3OS40NzA1MDY3NTMxNTQsODQ4OS4xOTk2MzU4MzE2NDYsMTQyNjQuNzEyMjcwOTYyNDE1LDM2NzU0MS44NzIwODc2MjY5NSwxMzkwMC43MzU3MjM0OTE5OTUsMzQuODc2NzcyMTE1MjcwMjU2LDMzNS40ODIwNDYyOTU2Njc0LDEzNDkzLjc5MTM3NTEzNzMyMywzOS4zODM1OTgxODIwMjkwMyw0OS4xNDI0NDQ5Njc0NzgyMiw1NTguNjE5NjQzODE3ODAwOCw5OTk4MTUuNDM4ODYwODUxNSw2NDU5MC41NjY4ODk1ODM0MjQsMjEyLjI2NTUwNDUyNzI4ODc4CisyMSxNb24gMTQgRmViIDExLDM4OTcuMzU5ODU2NDUxODY3NSwxMTAuNTY3MjA2NzQ3MjcxODEsMTE0NDMuNjI3ODIzNjkzMzcyLDUyMjEuNzAyMDQ4Njk2MzUzLDI3MDk3LjYzNDAzMzA4NjE5NywzMDk4Mi40MzgyNzU4NDI1NjcsMTMxNDk2LjM0NzgzODM3OCw4OTkzOC41MTU0ODE2NDE0Nyw5OTIzMC4xNDM5MjIxNDYxMywzNzc1NDYuNTQ2MTI2MDAxNSwxMjUzNzkuMzY4ODg3NDQzOTQsNDk0OTUwLjg5MDkxOTk3MTMsNjU5Mi45NjQ1MTgxNjAxMjQsMTM0NDEuNzU2NDk1MTkyNDQzLDIwOTc2LjU4ODA4ODk4NzgyLDQ2MTMxMi4zNzgxODQ5NDQyLDIwNDYyLjU3NDM2ODU0MjY0LDUzLjA2MTMzMjA5MzQwOTUzLDUzOC41MTYwODM0OTgyMTQ2LDE5Nzk0Ljc3NDcxOTI4MDg2LDYwLjQ3ODk4OTQwNzU1MTQxLDc3Ljg2NzA4OTkyODYyNDQ3LDkyMS4yNzQzODkzNjM3MTU4LDEwMTAxNDEuOTkyMDI4MDkzLDY3MTE0Ljc5NDgxNjY3Mjg2LDI3NC41ODkzOTY4OTU4ODM4CisyMixUdWUgMTUgRmViIDExLDUwNzEuMzA1OTc1ODk4NDkzLDE2OS4yMDI4OTgyMjM0MjUxLDE0Mjg3LjA2Mjc4NTQwMDM2NSw3MTI1LjI3MDQ5NDI3MTQxLDMzMTgxLjg0ODA0MzU5NDI1NSw0NjE2My4xNzQ3ODkyNDAwNiwxODQxMjAuMjA0NTYwNDA1MzQsMTI3MDA5LjgzMzUyMDYxNzM3LDEzODQ1Mi4yNzA1OTQ2MjY5OSw0NTM2NDQuODMxMzIzMTU1NTUsMTI5MDE1LjQ2Nzk5MjIyOTA0LDU5MjUxOS42Nzk5OTY2NDY0LDEwMjA2LjkwNjAyMzM4MDA5NywyMDkwMS44NDk4NDI4NzcwNjUsMzA0NDQuMjM1NzM2Mjk3NjMzLDU2MDk2NS40OTg3MDg4NTU0LDI5NzY1LjYwNzQ5NjUwMDExLDc5LjcyMTc5MDEyMDk4MzYxLDg1MS4yNjMxMjc0MTk1Njk2LDI4NjU1LjMzODc3OTUxODY2NSw5MS43MjI5OTY4ODAxNDc1MiwxMjEuODA0MDY3Njc2NjA5ODMsMTQ5Mi4xNzQzNjQ5NzgxNjQ3LDk3NTk2Mi4zMjUzMjM2MzQxLDY2NDcxLjM2NTgwNDcxNzYxLDM0Ni42Nzg5ODQ3MDEwMTY1CisyMyxXZWQgMTYgRmViIDExLDY0NjQuODI4Njg4Mzg1MjE4LDI1NS4xMzk0NDIxMDExNDM1MiwxNzAyMy42MzQ5MjY2NTczMTYsOTUxMC4xNzU5NzI2OTg1MzYsMzg1ODYuNTYzMDA1ODU1MzEsNjc2MzMuMzM0OTM1MTgyMTcsMjUxMzY1LjMzMDgwNzA2Mzk2LDE3NTI5OS41NTg0Mjc5ODM2NiwxODgyODkuNjQ3NzEzODk4MzMsNTI0NDYwLjUwNDA4MzkyMiwxMjYzNjUuMDE1MjA0MDI5Nyw2Nzg5NzIuNzcxODUxNzg0NywxNTQ3Ny42MzIwMjI5NzU3ODYsMzE4NzAuNzAwMDgzOTcxMTQsNDM0NjUuMjcxOTE3NDM0NTIsNjU2NTU1LjY2OTA3OTM1ODUsNDI2NjUuOTM5NjE0OTc1OTM0LDExOC4xMjAxNzUyMjI4NTM5MywxMzI1LjU2OTMwODkyMjU2MzMsNDA3OTcuMjkzNTg2MTA1NDEsMTM3LjI0ODY3ODQ0NjU3MjU0LDE4OC4xODA5NTA1NjU4MzUxNiwyMzc3LjcxMzk1NzM2NDAxMTUsOTAzNTcxLjg2MjczNDM3ODEsNjI4NDIuNjk4ODI5ODU1MTY2LDQyNS45OTc1NzU0NjIxMDIzCisyNCxUaHUgMTcgRmViIDExLDgwNTcuNzcwOTAwMTI4Nzg5LDM3OS40ODM0MDkyNjkyOTM2NSwxOTI0NC45NDU0MTg1ODQ0NzMsMTIzNzEuMDY0NjQ5NTQ2NTg0LDQyMzg1Ljc2NTIyOTI0MDk1LDk3MzQ3Ljg5ODA3MjUzMDgsMzMzMDgzLjk5NjEzMjUyNDIsMjM1NTM5LjUyNzUwNTYzNDU2LDI0ODM5Ni41NzgyNDM2MzI4Niw1ODA1MzQuNzE4MDUzOTE1NywxMTgwOTMuNDM0Njc3MDQ4MDYsNzQwNzc4LjQ1Mzk4ODQ1LDIyOTg3LjAwNzU1MjY1Mzk3LDQ3Njc0Ljc5MjgwNzE3ODM0Niw2MDk1Ni40OTA0MzQwMjM0NjQsNzM1NjM1LjYzMTM1MDQzOTcsNjAyMTcuNTYwMjA2ODE4NywxNzIuNzc3MTcwNDEwMjQzNiwyMDM4Ljk2ODE5ODc0MTU2Nyw1NzAzNi4zOTkyMzY5MjM0MiwyMDIuOTM3ODgwNTE3NDI5NCwyODcuOTU0MjYwNDkxMzU4LDM3NDEuMDI2MDYzODc0MTkxLDgwNDgxOS4yNjEzOTE2NzIxLDU2OTMwLjg5MzM1ODY5MjM3NCw1MDguOTc0Nzg4MDg3NzU5NDYKKzI1LEZyaSAxOCBGZWIgMTEsOTgwOS41NTE5NDg3MzIyNTgsNTU3LjU2MDkyNDU3MzAxNTIsMjA1NjguMzU3MDU2MDQ3MjA3LDE1NjQyLjQ0NTQ4ODMyOTA2Nyw0Mzg5MC4wMDM5MTY1NDA3NiwxMzc1NDYuODMzNzQ1NDk4MjQsNDI2NTYyLjEyNjU1MjA3Njg0LDMwNjkzNy45OTU5ODIwODE4LDMxNjQzMC42Mzc2ODk1Nzc3LDYxMzQxOC4zNTQ5NTY0NDUzLDEwNTgwNS40MjY3ODE2NjA2Miw3NjczNjguNDk4MDI0MDc3NiwzMzQwOS43Mjc3NzI1OTEyMSw2OTk1MS41MDAxODcxMDA0NCw4Mzg5Ni4xNDkzMDU1MDAzMSw3ODYyNTEuNjA1OTI0MzAwNCw4MzY4Ni4xMjY1MTIyMTEwMywyNDkuOTg3NjA3NDExNDI5MDgsMzEwNS43Mzc0NTkyODgxNTEsNzgyMjMuMDQ4OTAwODc0NDUsMjk3LjE3NzgzNzI1NzUwMjcsNDM3LjU3NDc1NTMyMTU1OTQsNTgyNS45NTA2MzA2NTE5NTYsNjkzMjQ0LjEwOTE3MzYxMjEsNDk2OTEuMzI4NTI3NzMwNTI2LDU5MS4zMjU1NjI2NTIwNDc5CisyNixTYXQgMTkgRmViIDExLDExNjU5LjA1MjM1NjAzNjA5Myw4MDkuNjY1MzMzNDM4MTk5LDIwNzY1LjA4NzUwOTc2MTUxNywxOTE4My45NDQ2MjgwODUxMDgsNDI5MDAuMzg1MDIzNjc2Nzc2LDE5MDM3Mi4yNjA0NDgzNjA4Miw1MjUzNzEuMzcwMzYxMzAxMiwzODYxMzguNjAyNTc5ODU1OTQsMzg3MjU3LjUwNjUyNzg5NzY3LDYxODE2NS4wMDE5MTUxNDU1LDkxNDI1Ljk5ODg2ODMyNzU3LDc1NDc4MC42NDc3NTQ2MjkxLDQ3Mzc1LjExNzczNzU3NjA4LDEwMDQzOS40Mzg4NDIwMTEwNSwxMTMxMzEuODUwNTA4MzIzMzgsODAwNDMxLjM5OTA3OTk0OTEsMTE0NDcxLjgxOTgzMjM0Njk2LDM1OC4zNDIwODM3Nzk4Mjk2LDQ2ODguODQyMDMzODExNjQ3LDEwNTA2MS4wMTE5NDE0NjQ0OSw0MzEuNjkxMjkwOTE2OTc5Miw2NjEuMTQ2Mzk0MjY1NDYwNiw4OTgyLjE4Mjk3ODkxMjM2Miw1ODA2NDcuNTQyMDM2MTMxNiw0MjA0MC4wNzg1ODM1Mjg4OSw2NjcuNzg2MTA2MjkxNjEwMworMjcsU3VuIDIwIEZlYiAxMSwxMzUyNy43NjcxOTI4NzU2MTIsMTE2MS4zNDU2MzY2MDc0NTM2LDE5ODQ1LjM1NzYwMTQxNDAzOCwyMjc3OC4yNjcwNTI3NTUxNjcsMzk3NTkuOTA3NTg0MzIzNzQ0LDI1NzEwOC43Nzg2OTIyNzgwMiw2MTg5MjMuNTc3NDMzMDczLDQ2NjM2MC41NDI4ODk1MDEyNiw0NTI3NzIuNjg0MjEwNTk5Niw1OTQ4NjUuMTU0ODY2ODM2Myw3NjY2MS40NTE5ODE0MDU5Nyw3MDY4OTAuNzgzNDIyMTYyNSw2NTE5NS4zMDU1MjkyNjM2NCwxNDA0OTYuMDkzMzczOTQzOTYsMTQ5MDI4Ljc1NzM5NjI5MTE4LDc3Njc3OC44Nzc5NTkwNzMzLDE1MzkxMS4yMjY3MjQ4Mzg2LDUwOS4yOTQyMzcxMDA3ODY3NSw3MDEzLjYzMTkwNTQ4ODUzOSwxMzc3ODUuODg1NTgxNDg2OTcsNjIyLjU0MjgzMDg4NTk0MzUsOTkzLjM2MDk0NTkxMDc0NzEsMTM2OTIuNTEzOTAwMTQ5MDM1LDQ3NTM2MS40NDE4NjgxODY5LDM0NjczLjYzODEzMzU5MDUyLDczMS42MDM2NzM3MDcyOTIKKzI4LE1vbiAyMSBGZWIgMTEsMTUzMjkuNDIzMDkzOTE4MzMzLDE2NDMuMjQ3NDA3NDc3OTgyNywxODA0My45MzUwMDA5MjU5NSwyNjE1Mi43MjEwMjk0OTI2NiwzNTE3My44Mzk3NDY0NDI2NCwzMzcwOTguMjM5MjM4OTk1MSw2OTM4MzYuMDI1NjA2OTQ0OCw1Mzc2MDIuMzI5Njk0MjgwMyw1MDMxNTAuMjk4MTc0ODE0NDQsNTQ4NDI0LjgyMzI2NDA1MzQsNjI3MjkuOTE1OTI2OTM2MDcsNjMzNTI1LjgzMDE3MTQxNzEsODY0ODYuODkzOTE4ODA3MjcsMTkwMzM1LjI2Mzk1ODQ1MjY1LDE5MDk4OS45NjQwNDA5NDQ4Miw3MjA3NzYuNTg1NzExMTI1LDIwMjk0Ny45NDQ2NTc4OTYzLDcxNy45Mzg0MjI0NDI3MTkzLDEwMzg1LjU5ODUxNTk3NjAxOCwxNzU3NDAuMDI4NTUwMTcxNDQsODkxLjU5OTM2NjY5NTk3MSwxNDgzLjkzNzgyNzM4OTY2NDYsMjA2MDQuMTkzNTcyMTE2MDIsMzgyMTAyLjQ1Nzc2OTAxNTcsMjgwMjEuNDAwODYyOTk0MTEsNzc0Ljc2NDg0MjQyMTIyMTEKKzI5LFR1ZSAyMiBGZWIgMTEsMTY5ODMuOTg1NTY5OTA0OTE1LDIyOTAuNDAzMTQxNjYxNDU4LDE1NzE0LjcwMjIzMjQ2OTY2LDI5MDIyLjUyNjI1NTQ0MDM1LDI5OTI4Ljg5NDU0NzIzODQyLDQyNjU1NC43MjY5MDA5MjEsNzM3NDc2LjMyNjI3OTA1MzIsNTg4NjI5LjI3OTU4MTIwODgsNTI5NjU3LjI2NTQzNjY3MzQsNDg2Njk5LjU4NDc4ODczNDQ0LDUwMzMzLjUzNDU4ODgyNDg5LDU0NjcxNC41Mjg4OTg0MTAxLDEwOTc5OS41NTc5MjU4NDIyNCwyNDgwOTYuNzkzMjY0OTczNSwyMzY5NDMuMTk2NTczMjIwMDgsNjQyNTYxLjk2MzQzNjI4MzgsMjYxNjU1LjkxMzk3MjE1MzksMTAwNC4yMDY1Mzc1MzE0NTY4LDE1MjEzLjc1Nzk3NjU5NTQ1NCwyMTY5MzcuOTUzNzUxODA0NTcsMTI2OC43OTA5MDM3OTY2NTgzLDIyMDQuNDAzMjY3NTExMzkxLDMwNTYxLjM0Njk1MTgxNTYzNCwzMDI2OTcuNjM5ODExNTY5NiwyMjI4Mi44MTk0MDcwNTEzMjcsNzg5Ljc1OTI4NjAyMjE2MTEKKzMwLFdlZCAyMyBGZWIgMTEsMTg0MjguNzg1OTA4NTE3MjQyLDMxNDAuNDQ3MTMyNDM3ODA0LDEzMjA2LjQ2NjQ0MTM2MDA1MSwzMTE0MC41ODUwNTMxMTU4MywyNDY3NS43OTAwNDkyODg5ODYsNTE3NzU5LjE5NjIzNDgyNjIzLDc0MjQxMi40NzQ0NDg3NTY5LDYxMDQ3NC40OTQ4NzM1NDUxLDUyNzg2OC43MTM3NjYxNDQ2LDQxODA0Ni43MzUyMzEyNDM1NCwzOTc2MC4yNjgwMTAyNzUwOCw0NTcyNDYuMzcwMzU4NjQ0MzQsMTMyNDcyLjY5MDgzNTIxNTUzLDMwOTA2OC43Mzk5NzgxMjY2LDI4Mjk4Ny40NDYxODQ3NjMxLDU1MzUyMS4zNDU0OTExMjYyLDMyODYwNi42OTUzNzE1OTYyNiwxMzk0LjYzNjI2Mjc1MTU2LDIyMDM3Ljg1NjA1MzA2MTgyNywyNTc3OTkuNjA4MjEyNDE5NDQsMTc5NS40NjU2MzIzMTQ0NzM2LDMyNTcuODk1OTQ3ODM1OTU3NSw0NDYyMy45NjQzMDg2OTA2LDIzNzA0Mi42ODI1MDIxNzA3LDE3NDk1LjI4OTYwNzk2MDYyLDc3Mi40NTg0MjM5MzE3NjI4CiszMSxUaHUgMjQgRmViIDExLDE5NjIwLjQ3MDUyMjIxNTk3LDQyMjkuNzkzNjc5MDIwMzc0LDEwNzg0LjE1OTE4MDg3MjE2NCwzMjMzNi42OTYzNjk5NTM3OCwxOTg0Mi4wMjMxNzEyMjk3MTQsNTk5MzkxLjgzMzYxMjcyOTMsNzA5MjM4LjY4OTc4Njg4MjUsNTk5ODE3LjUwODM0NzA5NTIsNDk5MzQyLjg1NDg5NjUxMTQsMzQ5NDUwLjM2OTc0ODAyOTYsMzEwMTkuODA3NzMwOTk3NTkyLDM3Mjg1MC45NTE5NTMxNDIyNCwxNTA5OTcuNzIzMDU5NzU5MywzNjU2NTAuOTg5NTIwNDgwMDQsMzIzNTM0LjMzMTAxODIyODgsNDYzNDY3LjczODE1OTcxODIsNDAwMTcyLjc2MDE4NzM4MDI1LDE5MjQuNzcyOTYxMDc2MTEwNywzMTU1Mi45MDYzNzkxMzU1NDQsMjkzMzM3LjkwMTE5MDY5MTg2LDI1MjkuMDY4NjgyNzg5NjUyNSw0NzkyLjUyODcyMjU1OTQ4OCw2NDA0Ni43MjkwNzM0MzQyNDYsMTgzOTQxLjMzNTUzMTI0ODU0LDEzNTk5LjMzODY5MTgzMjEyMSw3MjQuMzQ4MDM3NjQ2MDA3OAorMzIsRnJpIDI1IEZlYiAxMSwyMDUyOC4xMjU3ODEyMTUwOCw1NTg2Ljg1NzEwOTc0NzQxNCw4NjA4LjAwOTg4NzIzNTQxLDMyNTM4LjM5MTg2NjYxMjMsMTU2NDQuODU1MTUyMTEyMzMsNjU4NzA4Ljk0OTcyMjcxMjcsNjQ1OTQ0Ljc2NjI4MzIxNTcsNTYwMTQ1LjYyMjE2NDEyMzMsNDUwNjYwLjQ0Nzc1Nzg3NzYsMjg1Njk5LjI1NzIzNTIzODcsMjM5NjIuNzUxNTY1NTM4ODYzLDI5Nzk1Ny44MzQ5Mjc5NTg1LDE2MjAwMy4zMzYwNjkxODUzNyw0MDg3MTAuNDY2NjIyNTI2MDYsMzUyMzA3LjUyODQyNzE2ODI2LDM3OTI3Ny4yMjAzMzIyMjM1LDQ3MDA4OS4wOTgzOTc0MTU5NSwyNjQyLjIzMjk1ODMzMDE2OCw0NDYyMC40NTg4ODQxMzY0NzUsMzE4MDg2LjUxODI3NzI3NTg0LDM1NDkuNDMxNTY3NzI4NTI0LDcwMTguOTIzMDIyNzQxNTU3LDkwMTg0LjkzMjg1NDM1NjgsMTQxNzEwLjEyMjM5NjkwMjE1LDEwNDg3LjkzMzg3MDE5MTgwNiw2NTIuNDA3ODA5MjExOTc2MQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9EZW1vZ3JhcGhpY1NFSVJEaXNlYXNlX0ZEX1JlZmVyZW5jZS9GbHUvbWVuL0luY2lkZW5jZV8yLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvRGVtb2dyYXBoaWNTRUlSRGlzZWFzZV9GRF9SZWZlcmVuY2UvRmx1L21lbi9JbmNpZGVuY2VfMi5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDg0N2ExNQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvRGVtb2dyYXBoaWNTRUlSRGlzZWFzZV9GRF9SZWZlcmVuY2UvRmx1L21lbi9JbmNpZGVuY2VfMi5jc3YKQEAgLTAsMCArMSwzMyBAQAoraXRlcmF0aW9uLHRpbWUsRUctRlJHLUcyMTAwMDEsRUctRlJHLUcyMTAwMDIsRUctRlJHLUcyMTAwMDMsRUctRlJHLUcyMTAwMDQsRUctRlJHLUcyMTAwMDUsRUctTE9FLUcyNDAwMDEsRUctTE9FLUcyNDAwMDIsRUctTE9FLUcyNDAwMDMsRUctTE9FLUcyNDAwMDQsRUctTE9FLUcyNDAwMDUsRUctTE9FLUcyNDAwMDYsRUctTE9FLUcyNDAwMDcsRUctTE9FLUcyNDAwMDgsRUctTE9FLUcyNDAwMDksRUctVVBFLUcyOTAwMDEsRUctVVBFLUcyOTAwMDIsRUctVVBFLUcyOTAwMDMsRUctVVBFLUcyOTAwMDQsRUctVVBFLUcyOTAwMDUsRUctVVBFLUcyOTAwMDYsRUctVVBFLUcyOTAwMDcsRUctVVBFLUcyOTAwMDgsRUctVVJHLUczMDAwMDEsRUctVVJHLUczMDAwMDIsRUctVVJHLUczMDAwMDMsRUctVVJHLUczMDAwMDQKKzEsVHVlIDI1IEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyLFdlZCAyNiBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMTYxMS4yMjYxODE4NzQwMzA1LDEzMTkuOTk4NDM4NDQ0MjY4NSwxNzQ0LjY2NDMzMDY0MzQ2MzIsMC4wLDAuMCwwLjAsMTY4MS4yNzgwNTY0NTQxNTQyLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCw0Njc2My4zMDE0ODE4NDkwOSwxMDk5LjgwNTA4NDQ0MjE2MTYsMC4wCiszLFRodSAyNyBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsOTY2LjA1MDU1Mjg2OTgyMTksNzg5Ljg5MDc0ODE3NjAxMzcsMTA0Ni4xMTU5MDE2ODA3NjQyLDAuMCwwLjAsMC4wLDEwMDguMTcxNzQyMzE1MDUxMywwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMjc3NDQuMzM3MTc4NjAzMDU1LDY1Ny4xMzU1OTcwNDcyMDEzLDAuMAorNCxGcmkgMjggSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDU3OS4zNjg4MDk2MDUxNjk5LDQ3My4xNjUyNTE4MDM1Mjk0LDYyNy40MDc2NDA0MTc2NTUxLDAuMCwwLjAsMC4wLDYwNC42NzMyMzY2MTExMjcyLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwxNjUzNC41MzQ3NDI5ODM3NiwzOTMuMjg2MjcwNjAyNTM3ODUsMC4wCis1LFNhdCAyOSBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMzQ3LjUxODE1NjQwMDcwODYsMjgzLjYxNTM1NTI4NTM3OTA1LDM3Ni4zNDA1NjU5MTkwNzk1NSwwLjAsMC4wLDAuMCwzNjIuNzExODIxNDgxNzExNzUsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDk4ODAuMzk3Mjg1MDQyNDI5LDIzNS42MDgzNjE1MzI0MDQyNSwwLjAKKzYsU3VuIDMwIEphbiAxMSw5Ljc3NzM5OTYxMzgzMjIzNCwwLjA0MTM2MTY5NTg2NTk3NjMsMjIuNDg2NDQxMDgwMjIyNzY4LDguNDExMTIyMDkwNTczMTcxLDU1LjEyOTcwOTY4NTAzMzU2LDIxLjYwMDczNTk5NTU0NDUzMiwxNTIuODM3MTY0NjEwODExNywxMDEuMjU2NDcwNDg0Njg4NzgsMTE4Ljk0NDQ4MTI0OTY3OTA3LDE2NzIuNDY0OTIzNTI1MDg0NywxMTg0LjQyMTQ1OTExOTM3ODgsMTk5NC43ODIyODgxMzgxMTUzLDEuNzkxMDIxMjUwMjI0ODM0NiwzLjU0NzkyNzExMjcyMzc2OSwyMC4yMjYzOTI0MTcyNzczODUsMTg1Ni43MDcyMzg3OTUwNzc1LDE5Ljg2MDY4MTc2ODkyOTI4LDAuMDI0Njk3NDI1NTY0NzAzOTY2LDAuMTMxNTA4OTY5MTM0MzA1NiwxOS40NzcxMTUwMTk1ODA3NTQsMC4wMjU4NzAzOTE3ODA5MDc4NTUsMC4wMjU0MDc1NDI5MTczMzI2MjUsMC4xNTAzNTgyNDg4OTgxNDA0OCwyMTI3Mi4xODUzMzcxMjY4Myw4NzIuMzAyNjk2MjQ0ODQ1NSwwLjc1MTUxMTkwMDUwODMyCis3LE1vbiAzMSBKYW4gMTEsMjguMjc2OTY4NDc2NTg3NTUsMC4xMTk5MjcwMzMyMDY1MzEzLDY0Ljk5MzY4MzE2NTU4NjY1LDI0LjM1NzcwNzE5MTYwMjE1MiwxNTkuMzk0NzE2NDY3MDI0MTgsNjIuNTc3ODE3NDU3OTQzMzc1LDQ0Mi42NDUzNzgzNDE5NDI4LDI5My4yNjI5MTQ0ODQ0OTI3NCwzNDQuNDgyNzc4ODAyNzM3MTMsNDM1Mi44MzgxODI0Mjg5MSwzMDIyLjg5MTYwMjQ3NzY4OCw1MjQ1LjExMTYxOTk3NTU4NSw1LjE5MjgxNDY1MTc3NjgyLDEwLjI4NjczOTQ5NDUwMTYsNTguNTg3ODMzMTk2ODYxNjcsNDg2NS4yNDk0MDI3NDA3MDgsNTcuNTI4NjYwMTgyODYwMTcsMC4wNzE1NzY5NTYwOTg2NjM5OCwwLjM4MTI3MzgwNDI4NDgwOTMsNTYuNDE3MTAyMDEzMzU1MDksMC4wNzQ5NzYzOTUyNjY0Nzc0NywwLjA3MzYzNDk4NzgxNTQ3NjU5LDAuNDM1OTU5ODU5ODY0MjI4NjQsNDc1NTIuNTQ5NDg3NTAxNzgsMjE4Ni4zMzQwNDM2MTI2ODIzLDIuMTcyMzU2NjM1OTAxNTcxCis4LFR1ZSAxIEZlYiAxMSw0OS4xNzE1MzU0NDUwMjg1MjUsMC4yMDkyMTYwMTk1MzAwMzU5NiwxMTIuODg0MTE5MjQ0MTMwMzksNDIuNDMzNzQ5NjgzNjg4MDcsMjc2LjkzODc0NjcxMjAwMDM1LDEwOS4wNzA5MTY5ODMzMTQ0Miw3NzEuMjAyMTI1NjE3Mjg2Niw1MTAuOTU5NDcxODk5ODI5NSw2MDAuMTY4NTc5MjQ0MDg0Miw3NDA3LjIxNzYzMTg5MzkyOSw1MDk2LjkzNTYyNDI4OTM3Nyw4OTQ1LjA3MTYyODcwMTQxMyw5LjA1ODU2MzI0ODM5MzUsMTcuOTQ0NzEzMDcyMzg5Nzc0LDEwMi4wOTk5NTI5OTIyODA0NSw4MjkzLjM0NDUzNjUwMjczOCwxMDAuMjU1NTY0NzA4ODQ1OSwwLjEyNDgxNjMyNjU3NTA1MTY4LDAuNjY1MDkyMTk0MDI0ODIzMSw5OC4zMTYyMjAwOTAwOTg0NywwLjEzMDc0NDI5ODEzODE2NTc0LDAuMTI4NDA1MTQ0MTg5NTA5ODgsMC43NjA1NDU1OTE4NDY0MTgsNzczNjkuNTMzNzc0NjExMiwzNjYyLjMzMDM4ODE0NDQ3MSwzLjc3NDAzNjE3Mjg2NzA1MjQKKzksV2VkIDIgRmViIDExLDY2LjY2MDQ4NjEwMzY0NDg2LDAuMjg0NjY5NDc0Nzc0ODA3MDMsMTUyLjc2MDcxNjY2ODUyNzQsNTcuNjUwMjAzODcyNTg5ODg0LDM3NC44ODE0Mjg0OTE5MDg3LDE0OC4yNzA3MjQ2NTA4NDI5LDEwNDcuODI0NTM3NTMzNzQ3OCw2OTQuMjc5Mjk0MDQ3MzIzMiw4MTUuNDIzNjI0MjIwNzI0Niw5OTQ2LjMxMTA5NTI1OTgwNSw2Nzc0LjY1MDY5ODcwMzcxOSwxMjAyMS40MTY3ODk1NDk1MiwxMi4zMjQ4MDUyNzM0NzczODQsMjQuNDE1MjIzNzUxMzUxMTI1LDEzOC43Njk5MzU5ODc0NDkxNywxMTE0Ny41MDA2MTg4NTgwODgsMTM2LjI2NjgyMTczMjM1MjksMC4xNjk3NjcyOTgwNTQ5ODA3MywwLjkwNDg5NTg5MjE2NzU2MzcsMTMzLjYyNTg0MTkxNzU3NTksMC4xNzc4MzAxNzI4MDI2MTQ1NCwwLjE3NDY0ODYwNDEwNjAzMzU2LDEuMDM0ODM4MjcyMDM0MzUzOSwxMDA3MzkuNjUyNzAxNTYxMjcsNDgzOC44Mzg2MDI3MTA3MzEsNS4xMDkzODA1MTY1MjU1CisxMCxUaHUgMyBGZWIgMTEsODMuNzczNTk4NDkxNTE2NTcsMC40MzE5NTgwMTQ1NTkwMjA1LDE5Ni45NjkyNjUxODQyNzg2LDc0LjIxMTQ3NDUzNTY4OTY2LDQ4My43NjUwOTY3NDk1MTg3LDIwMy43NDU1NTcwMDk5NzMwMywxMzgxLjQwMjIwNTE0NDYwMzIsOTE2LjQ2Nzc0NDMyMTQyMiwxMDcyLjYzODQ2OTU5NzY5MTcsMTIyNDAuNjg2ODMwNzg4NTkyLDgxNjQuMDQ1MDU4Nzk5MDc4LDE0ODczLjg5Mzc2MDE3MTA1NywxOS44MzI2ODg5MDE1ODM1NCwzOS40NDQzNjUxNDA1NzEzMywxODQuOTcxNzMyMTgzNzQ3MjYsMTM3NjkuODgyMzQ1NzAwMDI5LDE4MS40NTQ3Mjg3NTg0ODcxLDAuMjUwMTU5Njk4NTI3NTg0OCwxLjQ3MjUwMjczMDcxNjQ0NiwxNzcuODU5ODk0NjUzMTE5MTcsMC4yNjQ2NDg3NzgwMjIxNjQ5LDAuMjY4MDkyOTIxOTI4MjQ2MiwxLjgyODY1NzU5OTMwNDIzNCwxMTc2MDUuODgzNDE4MDczNyw1NzYyLjI2OTE0MTg4MzYxNzUsNi40MTQ1Mjk1OTY0MTUxNDMKKzExLEZyaSA0IEZlYiAxMSwxMTMuMTg2ODg1MjI1OTg4NzMsMC44NjU2NjgyMDE2OTQ3MDM0LDI4Ni4wODI1Mzk3NjUxNDg3NCwxMDYuNjM4MDEyNjE3ODc5MTQsNzAzLjcyNDQ1NDA0NDY3OTMsMzQwLjkxNDYwOTc3MDI4NDQ3LDIxMDcuMDczMDU2ODM4NDgzNCwxNDAyLjA2MjMxMDE3NjYyNzgsMTYyNy40Njk5MjM1MjgyNjk5LDE1Nzg0LjU4MTgwNjMxOTYwNywxMDEwMC43ODIzNDUwNzQ1OTYsMTk0NjUuMjAwMDc1Nzc2NjY1LDQzLjM1NjMzNDgyOTc2MTg1LDg2LjcwMDIwODcwMDAxMjM4LDI4OS40MzMwNjg0OTkzMzIxLDE3OTIxLjQwMzMzMDAzOTIzLDI4My4yNjQ3MTI4NDg1MTE2LDAuNDc3NTgzMTU1OTkwMTYzLDMuMjY4NDUzMDkwMDU3NjY4NSwyNzcuMzgyNTAwNTIzMDEyMTQsMC41MTM4MTQzOTQ5ODA3LDAuNTQ3MTMyNDEwMDEzMDkwOCw0LjQ4OTg0NDMwNDA0ODA1MywxMzY5MDYuOTQyOTM5NjQxMyw2OTYxLjIwNTY0ODIzMDEwMiw4LjY2NDU0Njg0NDE5MDQ1MgorMTIsU2F0IDUgRmViIDExLDE2OS45OTc2Mzk4NTAzOTk3LDEuODMwMzg2NTY3MTA0NzA0OCw0NjYuMjYwMjkwODc2MzA3NjQsMTcyLjEzNzI1NDk0NDE5MDM3LDExNDguNTEzNzA1MDI2MTYzLDYzNS4zOTUxMTA0NzQ4NTU2LDM2MTYuMTkyNzUzMjgxMTM4NywyNDEzLjQwOTIzMTI0NzE0MSwyNzc4Ljc3NjMxODIyMzEzMzMsMjIzNTUuNTgwMDE1MjYzMTEzLDEzNTE2Ljg0ODYxMzYzNDYsMjgxMDguODMwOTA2MjE2OTQ2LDk2LjIyODcwNjkxNjI0MzMzLDE5Mi45ODMxNTY4NzEzODczLDUwOS4wMDk2NDA5NzY0MTE1NiwyNTY5Ni4wNjc0NDY2MDY2MTIsNDk3LjEwNDk0NDYyNjk5NTQsMC45NzkwOTkwMTgwODE0ODQzLDcuMzEyNDc0Njc3OTc4ODA1LDQ4Ni4zMTc4NzYzOTEzMjk1LDEuMDY0NzczMjczOTU4ODg0NCwxLjE2ODY5OTk2NTk0NDY1ODQsMTAuNTM4NTY2NjU2NTIxOTc2LDE2ODM1OS4yODQwNDM0MDAxLDkwMTEuOTkzMTY4NDk1NTU1LDEzLjAwMTYyMDkyMTU4NTc5NworMTMsU3VuIDYgRmViIDExLDI2Mi43NTI2MTEwODE3Njg3LDMuNDcyOTg5NzQ3MDg5MTI1Myw3NjAuNjU3NDY5ODE4NzQwNywyODAuOTU4OTU4OTM0NjcwMTQsMTg3NC40NjM0MzA3MTE2NjIsMTEzMi40NDI3MzE4NjUxNDEyLDYxMzkuNTcwOTUzMjAwNjE2LDQxMDYuMDUzNDM5MTc0NzUzLDQ3MDIuODc5NjM0NjAxMDMsMzI4NzQuNjA3MTg2NDIwMTk1LDE4NzIxLjM1NTMxMzgwODYzNSw0MTk4Ni45Njc4OTgwNzU3MywxODYuMzczNTc0MjczMzQ0NywzNzQuMjM4NjMwNjk5MjY1OCw4NzcuNzk4ODA0NDM2ODU3NSwzODE5Ni42NzE3NDg2MDUzNDYsODU2LjI5MTkzOTA5MDM2NDMsMS44Mjk5OTc4NzM2NzI0OTQyLDE0LjIxMzMxMTg4MTMzODQ5OCw4MzcuMTE5NTQ5NjE5NDUxNiwyLjAwMDExNjIzNTA5Nzg3MDMsMi4yMjU2OTk3MDQ2NzkwMzUsMjAuODgwNzcxOTQxMTY4MTQsMjE0MTg2LjY3OTA5MDQ0NTM3LDEyMDY2LjQ5MTk2MTg5NjMwMywyMC4wMjQ2MzIzNDYxMTI4MworMTQsTW9uIDcgRmViIDExLDM5MS4wODQ2NDY4OTUwMTA1Niw1Ljg1ODE2Nzc5Mzc2OTA2NiwxMTYzLjI0MTEwMDI3ODM1NCw0MzQuNTAwNjQ4MTExMzU1OCwyODY0LjEzMDE3Mzg4MjQ0NCwxODQ4LjMxNzY1MTcwMTY4Niw5NzIyLjM1OTE3MTA5ODI2NCw2NTEzLjM3NjI3ODk0ODYwNyw3NDMyLjc4Nzk2NTU0OTgwMyw0NzA1OC40NTEzNDg3NzAxOSwyNTE2OS40NzU0Mjc1NDk2NCw2MDcxMi42MDY0OTU2ODQ4MiwzMTcuOTc5NTMyOTQzMDcxOSw2MzkuMTEzMTcyMjQ0NTk4MiwxNDA1LjI2NTE4Njc3NjgyNTIsNTUxNDEuNTU1MTkyODg3ODM0LDEzNzAuMTQzNTAxNzA3NTA0LDMuMDU3MTcxNzQwMzA4NzA1OCwyNC4zMzEyMDI0ODA0MDk2MTIsMTMzOC41NzgxNzMyNDg1OTc1LDMuMzUyMDc0NjY1ODQ0MjYzMywzLjc2NjM5OTgwNDI4NTc1OSwzNi4xOTg2MjY0ODU2MjcwOTUsMjY3MDIyLjE0Mzg0NTcwMTM2LDE1NzExLjI3NzQxMDU4MTA0OCwyOS42MDUwMjg3NjY0NTM5MDIKKzE1LFR1ZSA4IEZlYiAxMSw1NTIuNDMzNjkyMDgwNDYxOCw5LjE5MzkzMjgwMDE1MTg0OSwxNjYzLjcyMzQ5MDcxMzE2OTcsNjM0LjM4MDA5MTE1ODc5MjQsNDA4Ni4yNDk0MDA0NjE3NzQzLDI4MzIuNDM5NDk2NTg3NzI1NCwxNDQ3Mi45OTQ1MTAzOTI2ODYsOTcxNi4zMzAwMjU5NzA3NTgsMTEwNDQuNjY5Mzg1OTMzMDMzLDY0MTQ2LjczNjA0OTAwMDQzLDMxODcwLjM3NjMxMzI2NDUzLDgzMzE4LjMyNTk1NjkzODM4LDUwNS44NjAxNTkzNDIxNDk3LDEwMTguMjgzODIwNjIyODQ4MiwyMTE2LjEyMDY5ODY1ODM5NjYsNzU3NDAuODk5MDA0NDEzNzgsMjA2Mi41NzgyMDM1OTU4MTU1LDQuNzQ0NzY2NjMwNDg0NzE5LDM4Ljk2MDE1MDg4OTkyNzQ1NSwyMDEzLjI5NTU2OTEzMDYyNTYsNS4yMjUzNjc0NjI1ODM2NTUsNS45NjI2NzQ3NDM4NzkyODQsNTkuMDgwNzM0MzcwOTMyMTM0LDMxNDk2Ni4zNTI4NTM3Njg0NSwxOTI0NS4zMDUwOTA3MTAyNSw0MS40MjQ4MjIzMTUxNjcwMzUKKzE2LFdlZCA5IEZlYiAxMSw3NTEuODQ0NzI4MjA2NDcxNCwxNC4xMzU1NTAxMTMxNzgxMDksMjI3OS44NDU5OTc5NDg2NjQsODk1LjQ4MzA1NTQwNjEwNyw1NTcyLjgwOTEyODU1MTU3OCw0MjUxLjM0Njc0NTQ5MjcwMSwyMDkwNi4yODQwMjUyNTUxNSwxNDA3OC4xNTkwNjIxNjMwMiwxNTkxNS45MjcwMzA3NDM1MjIsODM5NTQuNjY4NDQ2MTAwNzgsMzc5NzUuNTI2OTE3ODYyNTYsMTA5NjUyLjQ4MDg0MzA0NDcyLDc5NC4xODU0ODk1MjUzMDM1LDE2MDIuNzIwMDA4NDg4MTg5MywzMTA1LjQ4MzMwNDY4MzgzOTQsOTk5NjAuMjg3MDM1MTczMzQsMzAyNS43NDU1Mjg2NjMwNjE2LDcuMTc3NDExNDQ2MzEzNDI3LDYxLjg3MDQ4MTgyMTc0NjU2NiwyOTQ5LjYwOTM5MDA1OTA2MSw3Ljk2MjI3MjI5NjUyNjI5NCw5LjMzMDE2MDI5NjQzNzU4OCw5Ni43Mzk0MzM1MzYyNzE0NiwzNDg1MDIuMDE5MzcwMTA4NSwyMjA3Ny4zOTM2NDgyNzA1NDMsNTUuNzIxNDE5NDc0MzMwMjYKKzE3LFRodSAxMCBGZWIgMTEsMTAwNS42NzgyMDIwNDIyNTU2LDIxLjkzOTg3NzcxNTM1MjM1NiwzMDU5Ljc2MTc3MjAyNTA2NzMsMTI1MS40NTczMDE2NTU2NTU2LDc0MjAuMTE1OTkyNjE3NjQ5LDY0MjcuNzE5NzM4NzgwNjc3LDMwMDc3LjEzMjIyMTU4NTYzLDIwMzQxLjMxNDI5OTU1MTI3LDIyODI2LjAyMDE2NTQyNzkyLDEwNzExNi43ODM0MjYzNzUwNiw0MjkyNy4xNjQyNDMzMjIsMTQwNjE3LjkyMjIyNzcyMTcsMTI2NS4wNjQ3Mjc0NjM3MTkyLDI1NjEuNDgwOTU3MzI5OTQ0LDQ1NjQuNTIzMDkyMTE3NjM1LDEyODgxNy40NTk5Nzg4ODAzMyw0NDQ1LjY4MzA2MDAwNDA2MywxMC45MTEwODk5NjA0NDY0NDMsMTAwLjA2NDAyNTEwMjc5NTgyLDQzMjUuNjgyMDYxMTYyMzA0LDEyLjIyMzY1NjE1MzIyNjIwNywxNC44MzM3ODYyNjU2NjA3OCwxNjIuMjk3OTg5NTE1NDYzNTcsMzYyOTU0LjE5Njk1Nzc1MzQsMjM4NTcuOTQ5Mzg1NDE5OTMsNzMuNDYzNzcyMDAzNDI4OTMKKzE4LEZyaSAxMSBGZWIgMTEsMTMzNS4yMjExNzAzMzE0MTMsMzQuMzcyODU3NzkwMjI1OCw0MDM5LjYzMTgxNDI2MzcwMiwxNzQ2LjcyMDcwODQ2NDgyOTYsOTY3OC4wMDU1NjEwOTUxOTUsOTgwNC4zNTI0NjE2MTM3NjYsNDMzNDkuNDY0NDg1MjU0MzUsMjk0ODMuOTIzNTczMDcyNzEyLDMyNzgxLjkwODI0MTEwMDQyLDEzNDA5MS4wNTUxMDg3NjYyNSw0NjEyNS40MzAzMzQ0NDI5MDYsMTc2NjYyLjE5MjUwMjg5MjA4LDIwMzAuOTEzNTA0OTU2Mjg1LDQxMjcuMDk4MTcwMzk4Miw2NzU1LjI1NjU0NTM2NjQ2OCwxNjMxNjguNjI0NjczODkxODcsNjU3OS43MzE3NTAxNjUwMzMsMTYuNzIzNTQ2MDg4ODA3MzIsMTYzLjMzMjc3NTc0NzY1NTg2LDYzODUuNDc1NTI2NjQ2ODY4LDE4LjkzMzIwMzYzMzE2OTQzLDIzLjgyMDcyMDA0NDEwMzM5LDI3NC4wNDM5MzA4NTk1OTA1NSwzNTY0ODUuMTE4NzI2Njk4NzQsMjQzMzUuNjU4NzQzNDA1ODgsOTUuNjcyMjAxODk0NDgxMTgKKzE5LFNhdCAxMiBGZWIgMTEsMTc1NC45MzYwNzU4NDg0MzMxLDUzLjUzNzE1NTUyMjkzMDY5Niw1MTgxLjU0ODM0NTkwMDY2NywyNDE5LjkxMjcyNTE3ODgzNzMsMTIxOTUuNDY1NzgzMjYyMzc0LDE0ODc2LjA3NDg0ODQ3MTAzLDYxOTM5LjA0NjYyOTAzNTE3LDQyNDMxLjc0OTQzOTE4MjA2LDQ2NjcwLjA5NzA4MDA3NzY4LDE2MzY0OS4wNjk3NDc2OTk3Nyw0NjcyNi4xNTE2MTA3NzUyNTQsMjE1NTc1LjExMzk4MDAwMzA1LDMyMjEuNjEyMjIyODU2MTcxNyw2NTcxLjc5MTUyMzkzMjg4MSw5OTU5LjYxMzIzMTI4MjAxNSwyMDE4MDcuMjMzNjEwODg0NTgsOTcxMC40MjEzNDg3NjQ3NDUsMjUuNTE4OTkyNjc1NDA3NTA3LDI2My42OTQ5OTE4NTcyNjQzNyw5Mzg5LjkxOTMyNjQ4NzExLDI5LjE3ODEwNjA3MzE5NzYyLDM3LjkzODIwMjY3MDkzNDY2NSw0NTQuODcyNzQ5Njk4NTIzOTMsMzI4ODMzLjI2NDI5MjQ2OTM2LDIzMjg4LjA4NTUzNDU0ODcwNywxMjIuMzk5MDIxOTYzMTUyMworMjAsU3VuIDEzIEZlYiAxMSwyMjY0LjQ3MTYwMzk2NzQ2NjgsODEuOTM2NzA5MDU4OTc3MTksNjMzOS4zMTE4OTUyMzkwMTMsMzI4OS45NTc0MDYxMDI1OTcsMTQ1NTIuMTI4OTQ1ODIwNTUsMjIxNzEuODk0MjMwMzA4MTUzLDg2NTMxLjM3NjcxNzIzMjAyLDU5ODI5Ljk5MzEzNjkwNjg2NSw2NDk1OS41NjM0MTQ5MDIyMywxOTIxMjUuNzI2NzkxMzE3Miw0NDA2My4xNjE4MTMzMDIyMiwyNTE0ODYuNTk2NTc4NDYzOTQsNDk4Ni4yMzc1NjcwOTg1ODMsMTAyMTYuMTAyMjM4Nzg1MDcyLDE0NDUzLjUyMTIyNDQ0MDQ0LDI0MDM4Ni45Mzg2Nzk0NTY0MiwxNDEyNS43Nzk0ODg2OTEwNTYsMzguMzMxNzc5NjkxNDAxNzgsNDE2LjYwMzYyOTY1NDQ2OTk2LDEzNTkwLjY2MDM0ODYwMzg4Miw0NC4yNDE3MDQxNDY5ODA0NCw1OS4zMTE0OTM2MTEyMDA2NDYsNzM1LjY1MjcxNDU4NzU4NTEsMjgzMTc5LjExMTk3OTI1MzQsMjA3MjIuMDIxNTY1MzM1NDI4LDE1Mi4yNjE4NzE5MTc5OTY5CisyMSxNb24gMTQgRmViIDExLDI4NDkuMzk5Njc1OTQwMTM1MiwxMjIuOTU3MzcxNzg1NTk1NzcsNzI4Mi43NDAwMTI4NTg4LDQzNTEuNDgzMzM5NDY5NjY2LDE2MTYxLjI3MTYyNzc1NzkyNywzMjMyNS4zNDkxNTk3NzQ3MDUsMTE3MTI1LjMxNjgyMjM5OTYsODE5NzMuMDY4MTE3MTM0NjgsODc1NzAuMjY3NTI3NzUxMjIsMjE0MTUzLjY4NzM0NDUwMTUyLDM4MzU3LjIyMzg5NTQxODY5LDI3NjIxNC4zMjcwMDQ1NTExLDc1MTYuOTYzODc0NjQyNDU3LDE1NDg3LjIyNjE5MzEyNTkwMiwyMDUzMS44OTU4NjI3NjQ3NjMsMjcyMDk4LjE2NDE2NTAxNTMzLDIwMTUzLjQ0MjYwOTk2NjA5Miw1Ni41MTUxMzY5MDY1MDUyNTUsNjQ0Ljk3NzY5NTI2MDQyMDIsMTkyNTAuNjk3MjAyMzkwOTk1LDY1Ljg3MDY4NjQ0Njk1NDYyLDkxLjEzNDM3ODY4NDQyNjkzLDExNjQuNDE1Mzc5ODYxMjcyMiwyMjc1MTguNjc5NDQ5NTU4NDYsMTcwODUuMDQ1Mjk5NTQzNzksMTgyLjk1MjIzODU2MTQxNzU3CisyMixUdWUgMTUgRmViIDExLDM0ODcuMTAxMjc2ODM1ODA1LDE4MS42MDUwMjAwODcwNzM4LDc3NzAuMDE2MzM3OTgwODU4LDU1NzUuNTE3MDAwMDAyOTAzLDE2NTA3LjY3NDY0MjQyNTA0NSw0NjE2Ny4wNTg3NjI1NzEwNywxNTI5MDYuMDI5MjQ5Nzg1MywxMDg3NDMuODcyODA2MjA3NzksMTEzNzY3LjI1NzY2MDc5Mzk0LDIyNDQ5MS40MjY2NjU5Mzc1LDMwODY2Ljg1NjczMzQwMzQxMiwyODI0MTAuMDQyNTI3OTI3OSwxMTA3NC43Mzk5NDg0Njc5NywyMjk4OC4xOTI2NzI3MjkzODcsMjg1NTAuNzc1Njg1OTg2NzA4LDI4OTc1Ny4xMzkxNjk0Mzc3NSwyODIyMC45NTE0OTYzODcxNjIsODIuMDU4NDU2ODQwNzIxMzUsOTg1LjE1MDc2NDA2NzUzNzcsMjY2ODAuNzMzOTA3MDE0MjA4LDk2LjcwNjEwNTEwNDE1ODg3LDEzOC41NTA4MTQ5Njk2NTU3NiwxODE5LjI0ODA2MjA1NTYzNzUsMTcxOTkxLjI0MzAxNjg0ODAyLDEzMTM4LjU2Mzg5MjQ5Mjk2NCwyMTIuMjA2NTQ2NjU4MjQ4NworMjMsV2VkIDE2IEZlYiAxMSw0MTUwLjQwMDk4NTcyNDk1NywyNjUuMDk4MTUxMTI4NjQ5Nyw3NjM1LjQyOTQyNDQwNDczMyw2OTA2LjIxMjk5NDQxNTIxNiwxNTM5My45ODY2NTg3MzYzNTgsNjQ2OTYuMjQ0NzIwNjEwNDI2LDE5MTc5Ny4zMjE0MjA5MzE0MywxMzkyODIuNDU3MjQ1NjAxNiwxNDE4MzEuMDA1ODYzODM2MTUsMjE5OTU0Ljk2NDI5NTA0MDIsMjMyMjkuMjk3OTQ2MDE4MDAzLDI2NjgzNi40OTMyNDMwNzUzLDE1OTczLjk5MTY0MTc3MzMyMiwzMzQ5NC4yMTU3ODI0OTExMzQsMzg5MTEuMjI0Mzc2MTc3OTksMjg4MjYzLjQyNDAyNjc3MjEsMzg4NzYuNjYwNTAxNTEwNDksMTE3Ljg4MjEzODQwMDYxOTQxLDE0OTIuNTgxMzU4NDM1Njg4OCwzNjIyMS43MTMzMzgxMTYxNCwxNDAuNjk3ODU2Mzc5NTM4OTYsMjA5LjU1NTA0MjczNjQyMDI2LDI4MjAuMjkxOTQ1OTU1NDUxLDEyNDI4OS4yOTAwNTMxOTQzOSw5NTcyLjg0NzUzMjQxODcxLDIzOC4yNjQ2OTE4ODA1ODY0CisyNCxUaHUgMTcgRmViIDExLDQ4MDYuNDg1NzQyOTg2MjcsMzgyLjk5NDU5NTUwNjcyNTgsNjg2Ni43OTg0MDcxOTM4Niw4MjUyLjQ5ODc2MTE3OTU0OCwxMzA2Ny43NjU5ODE0NjA2ODcsODg4MTAuOTAyNTY5MjQwMDYsMjI5NzA2LjgyODAyNDEyNjgsMTcxMzExLjE1MzUxMTExMjUzLDE2ODUzMy4zNjc1MjIxMjI0MywyMDA3MTcuMjE0OTUwNDgxMzcsMTY2NDguNzE2MTc2MDE1NTY1LDIzMjIwMS42NTg0MjQ5MzY0NywyMjQ4Ny4xMTcxNDg3OTk3NjcsNDc3OTcuNDQxOTYyODUzMzYsNTE5MjcuODUyOTA2ODI2MDcsMjY2NjE5Ljk3MjUwODIwMzUzLDUyNzIxLjY2Njc5NTc3NDQzLDE2OC4wMTAwMjYwNDM3NzU5OCwyMjQ2LjA0Mzc2NzYyNjQwNTUsNDgxMjEuOTI0MzE5MTEzMTQ2LDIwMy4zOTc2NDg0MzYzNDQxOCwzMTUuODEzMjU4NTYwMDU0Myw0MzM4LjE5OTUzMTQzMzIyMSw4NzQ2My4yNzUxNDgzNjY1LDY3NDEuNDAxNTA5NDE4OTQzLDI1OS4zNDk0NjQ3MDY3MDc4NgorMjUsRnJpIDE4IEZlYiAxMSw1NDE2LjM5NTc3MjQ2NDQwNyw1NDYuODc0Mjk1NDAxMTgxMyw1NjM4Ljk4NzI3MzM3MTU1OCw5NDg3LjA0NzY2NjM0MDgyNiwxMDEzNy42NzU5NzAwNDc0MTIsMTE4Nzg3Ljk5NDM5NzIzNDM4LDI2MDE4Ny44MDIzMzMzMzA2OCwyMDA1MjkuNTIwNjAwNzY5NTgsMTg4OTg1LjIwMTM4NjczMDIsMTcwNTQxLjYxMTU1MjMxMzQ0LDExNTg5LjgzMDE5NDkzNTcxLDE4NjQ3Mi4xOTI5MTkyMzM1NSwzMDY2MC44NTQ1MTEzNDMxLDY2Mzc0LjA4MjQxODQ1NTA0LDY3NTg5Ljg2ODQ0NDQ3OTEzLDIyODg1Ny42ODc4ODAxMTg1NSw3MDI1Ni42NDcwMzU0NDI4OSwyMzcuNjgwNzU1NzA4NTkzOCwzMzUxLjQ4NTU1ODI3MzYxNzIsNjIzMTkuMDUwMzQ4ODQxMzcsMjkyLjIzOTY1NDE1MjQ4NTMsNDczLjcyMjY2ODEyMjEzNDM0LDY2MDEuMzYxMzg4NjEwOTY4LDYwOTE1LjUyMjQ3NjE4OTcwNCw0Njc1LjAxNzM0MDQwNDkwNywyNzIuNzE3ODIyMTc1NjQ3MjYKKzI2LFNhdCAxOSBGZWIgMTEsNTk0MS4zOTU3NjMzMjI5NzksNzY5Ljg2MTI0MTk0OTkxNjgsNDI1My42NjkzMzY2MzM1LDEwNDY2LjMwNzQ0OTk4NTAxMiw3Mjg0LjQ3ODM0MjYxMjI2NSwxNTM2MjMuNzQwMDM3NzQ3NzIsMjc1NTkxLjM4NzYwMTgwOTgsMjIwODc2LjU0NTkzNDA4OTUyLDE5NzY1OS41OTQzNjI4NjE2OCwxMzU1NjYuMTczMjU1MTI4MzUsNzk2OC42NjQ4MTU3MjUwMTIsMTM5NTExLjg4MzI3NDAzOTE0LDQwMDgxLjQwMTM5ODYzODQ3LDg4OTEyLjcwNDk2Mjg2NjA2LDg1Mjc4LjE3NDIzMDc3Mjg3LDE4Mjk0OS43OTg4MTI5OTgxNyw5MTY4MC4zOTkyNDc2MTc3OCwzMzMuNTkxMzAxNjAzNDYxMSw0OTQ4LjQ5OTkyMzEwOTU3Miw3ODE5MC41NDQ4MTI1MTE1OCw0MTcuMDkwNTc4NTUxMjE5NTUsNzA2LjMzNTA1NzQ4MDk5MDEsOTkwNi44MTAwMjE2NTI5OTUsNDI0NjUuMzU0NzQ3OTc0MDksMzIzNi45MjQ5MzExOTI5MjQ4LDI3NC40OTc0MTQ1Mjk4ODI2CisyNyxTdW4gMjAgRmViIDExLDYzNTQuNTYwNjU0MDA4ODYxLDEwNjYuMTM2NDA4MjExOTE5MiwyOTk1LjcyNTM0MjA1MzU3MiwxMTA2OC4xMjAyMjI4MzMwOTEsNDk1Ni4zNTgwMDcxMjk5NDc1LDE5MDQxOC4yODI2MzUzODYsMjcwMDYyLjgwMzU0MzQxODksMjI2MjcyLjk4OTEwNTc3OTY4LDE5MDc2MC43OTUyMjc4ODE1LDEwMTkyMy43MTY3ODg3Mzk2OCw1NDczLjk0ODI5NzQ2MDAxMSw5ODg5OS44NjMzNDc1MTExOSw0OTY3My4zNzMyODQ0NDI0OCwxMTM4MDAuMDI3NTczNDc0OTksMTAzNTE1Ljg2NTM3NTcxMDQ4LDEzNzYzMi4xMDMyMzczNTg2MiwxMTY2NTIuNTE0OTk2MDc4ODEsNDY0LjQ1NjA0NDY2MTQ1Mzc1LDcyMjEuMzI1MTQ3Njc0MDQ0LDk0MzQ4LjMwMTI3MDgyNzg3LDU5MS4zMzY1NTQ1OTc1NTYxLDEwNDYuNzA0OTQzNTk1NjI0NiwxNDYzNS4xNzcxOTYyNzgzOTksMjk4MTAuNTQ0MDIxMDAxNDUsMjI1NS41OTk0Nzc5MjA1MzY2LDI2MS4xODI3Njk3NzQwMjMzCisyOCxNb24gMjEgRmViIDExLDY2NDcuOTE3OTgxNTYzNjI4LDE0NTAuMTAyMDk5MTc3NzY4MiwyMDE2LjY2ODE3MjQ2NTA5NywxMTIyNS4yNTY4MjUwMDI4ODcsMzI3NC4yNzQ3MjQ2NDEzMTQsMjI0MDc4LjM0NzQzODYwODk0LDI0MzA0My4wMDQzNjA1MDI0LDIxMzUwNS41NjM5NTQwODI0NiwxNjg3MzAuODA3NTAxODE5NTcsNzM2MTUuMDc4ODU0MDM5NTMsMzc4MC44OTc5MjgxNzA2NzcsNjc4MjMuMjgwOTgzNDczMyw1NzY3NC42NzQxOTAyMDk0OSwxMzc3NTIuNzYwNjg1NjQ4MjcsMTE5ODQ2LjQ1NTQyMTYyMDAzLDk5MDQ1LjA3Mjc0NDU3Mzk4LDE0Mzk5MS44NzM3Mjk0ODY4Niw2NDEuOTMxMTU3MTczNTE5MywxMDQxMi41ODU1NDc0NDgwNDksMTA4NTY0LjQ3Nzk5NDk0NjYzLDgzMy42MDQxMzA1MjkxNTU3LDE1NDIuODQ2OTMwMTYzNDQ5MywyMTI1OS4zMjE3MzcyMDU5NywyMTExNy41MDU4ODM3MzUwMTUsMTU4Ni45NDk0Mjc5MTI2ODE0LDIzMi4yNTc5MDkyNjU1OTI5CisyOSxUdWUgMjIgRmViIDExLDY4MjcuODE3MzI5Mzg0OTM5NSwxOTM0LjQwMzQxMDA1NDIxNDQsMTMyOS4xNjQ2NjE1NjI5MDg4LDEwOTM2LjA5MTUxMjc4Mzc0NSwyMTQ1LjI5Nzc1MDg2MzUzNzcsMjQ3NzkwLjgwNjU0MjM5NTI2LDIwMDYxNy4wODkxMTgxOTkzNCwxODQ2MDEuODU3NzYzMTI2OSwxMzY4MDAuNzMyNDAyNzI1MjMsNTE5MzYuNDM3NDk0NDM5NjEsMjYzMi45NzQ4NTgzMTUxNzI3LDQ1ODcxLjk0Mzg1NzA4NTk2LDYxOTc2LjMwMjIxMjQzMzU0LDE1NTk2MC43NDkxODkyNzYzNiwxMzEwMjMuMjgyNDgxNDgyMDMsNjk0NzAuMzY1OTAzNDM0NzcsMTcxMzI0LjU4MTQ4Mjg3Nzg0LDg4MS44MjMxOTA1MDUwMTA0LDE0ODM0LjAxMzIwOTI5NDAyMiwxMTc5ODMuNTQwOTk0MzQyMDgsMTE3MC4wNjcxMzI1OTY2NjIsMjI2NC4xODU1Mjc2NjA1Njg0LDMwMzI2LjQ3MDUxMzc4ODk4LDE1MDk0LjIwNzA5OTAwNDQ4NywxMTI3LjY0NjY0NTA0MTc2MjIsMTkxLjg4MDYzNzkyMTM5NzM1CiszMCxXZWQgMjMgRmViIDExLDY5MDEuOTMwMDA0MTQxNjYyLDI1MjYuMDcxOTc0MzM5MDQ1NSw4NzMuNjc5ODI1NjQ4OTgzNiwxMDI1My44OTg1MDIzMzUxMjMsMTQxMy40MjQ1NzY5OTQ1MTQ0LDI1NDc5MC43NTEzMDIyNzQ1LDE1Mjk2Ny42NjAwOTczNjI4LDE0NjU3Ni44NjQ4MTU3Njk5MiwxMDI1OTMuNjU1NzcwNDY3MjIsMzYyOTcuOTQ1OTgzMjg4OSwxODQ5LjkzNzk4NTU5OTEwNiwzMTAzMC45NDQ4OTE0MDE3OTYsNjA5MzEuMDY3NDk4MjQ5NTYsMTYzMjI5Ljc1MTk5NzIzNTE3LDEzMzc4MC45OTc2NzM0NjY5OCw0ODMwMy44MjkwMzA5MjQ2OCwxOTQ4NzUuMzYzNzEwMzI0NywxMjA1LjQ4NzA0MDQwMDM2OTgsMjA4NjYuNjAyNzU4NjE3NDM1LDExOTgzMy4yMjIzMDQxNzU0NiwxNjM3LjMzNDgxODM1MTkzNjMsMzMwOS40OTEzNjM4OTg0NzEzLDQyMzkyLjk4NzU2MTYwNzA4NiwxMDg3Ny4yMjgwMDU1NzYzMTEsODA4LjU5OTU3MDU2MTM1NzMsMTQ3LjY3Mzk0MjUxODcwNzA3CiszMSxUaHUgMjQgRmViIDExLDY4NjguNjA4MzYwMTc0Njk4LDMyMjAuODg4Mjk0MDY3OTY0LDU3OS4wMTA0OTMwNzcwNDA4LDkyNjkuMjUxODQzMTE5MDA3LDk0Mi42OTM1MDQ1MDU0OTE4LDI0MTM1My45ODA1Nzk1NTI5NywxMDk0NDYuNTYyODc4NDYwMzYsMTA4MDk3LjgwMzY4MjM0NTEsNzI0MzQuNjMzOTc5OTYwOTcsMjUzNjUuNzI4MDkyMDM3OTc0LDEzMTEuMjY5ODMzNzQ3MDc1OCwyMTE2MS4yMTIyOTg2MDkyMyw1NDM1NC4xNzY5ODM1MTYzOTQsMTU2MjM0Ljc5MDA0MTA3ODg3LDEyNjI0Ny44NTkzMzE0NDUzOCwzMzcxNy4zMDM5Nzc5Mzg0NywyMDk4MTkuOTI5NDY4NzYwNjIsMTY0MS40MjU5MjQ4NzM5NzkzLDI4OTQzLjMwMTI3MjU5ODY2LDExMjY0My40MzA4OTkwNjgyOSwyMjg2LjE1MDcyMzk3NTE1MDQsNDgxNi43NDY5ODAxNTYwMzU1LDU3OTAwLjMwNTU3MDk3NzA5LDc4OTcuNDI1NjQ0NjcxODE0LDU4NC42NDE1OTY1MDgyNDc1LDEwNy4xNDE5MjMzNjA5Nzg1MgorMzIsRnJpIDI1IEZlYiAxMSw2NzE2Ljg3Mzg2MjM2MzEyOCwzOTk3LjU3NTc2MjA3MjY0MjYsMzg4LjY5MjYxNTgxNzEwNjQ2LDgwOTQuOTU3MDg5MDcyODI4LDYzNy43MTAzMzk2MDA0ODg3LDIwOTUwMi45MzcwODY3MTA4Miw3NTA2MC42MDc1NDY3NzcxOSw3NTQ4My43NjM2NjY5Mzg0Nyw0OTIzMi4xMjk2MDIxNTU2OSwxNzgwOS4xMzM2MzI4OTczNjcsOTM3LjU2NDk1NTk5NTA5OTksMTQ1OTEuNjc5OTk0OTYzNDg4LDQzOTQ1LjI1NzE1ODY0MzUsMTM1ODM2LjE1ODgxODU2MiwxMDkzNTIuNDI0Mzc3MDk2OTUsMjM4MDkuNzA3MjU5ODE1MTI4LDIxMTYwNC43Njk3ODUyOTczLDIyMjcuMjI5OTk1MjQ3NTUsMzk1MDguMjg3NDg3NDk0NTksOTczODcuMTc4MjY2MDEzNzQsMzE4Ni4zOTMyODAwNDE5MDQ3LDY5NzUuNjUyNDcwOTUyODM4LDc2OTkxLjAxNDIxODE4OTE0LDU3NzYuMzkzMjY2NzM3NjI0LDQyNi4xMDU2NDg0MDQ0OTc3LDc0LjYyMjAyNDYwNzQ0ODcxCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0RlbW9ncmFwaGljU0VJUkRpc2Vhc2VfRkRfUmVmZXJlbmNlL0ZsdS9tZW4vUG9wdWxhdGlvbiBDb3VudF8yLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvRGVtb2dyYXBoaWNTRUlSRGlzZWFzZV9GRF9SZWZlcmVuY2UvRmx1L21lbi9Qb3B1bGF0aW9uIENvdW50XzIuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZjNWMyMTYKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0RlbW9ncmFwaGljU0VJUkRpc2Vhc2VfRkRfUmVmZXJlbmNlL0ZsdS9tZW4vUG9wdWxhdGlvbiBDb3VudF8yLmNzdgpAQCAtMCwwICsxLDMzIEBACitpdGVyYXRpb24sdGltZSxFRy1GUkctRzIxMDAwMSxFRy1GUkctRzIxMDAwMixFRy1GUkctRzIxMDAwMyxFRy1GUkctRzIxMDAwNCxFRy1GUkctRzIxMDAwNSxFRy1MT0UtRzI0MDAwMSxFRy1MT0UtRzI0MDAwMixFRy1MT0UtRzI0MDAwMyxFRy1MT0UtRzI0MDAwNCxFRy1MT0UtRzI0MDAwNSxFRy1MT0UtRzI0MDAwNixFRy1MT0UtRzI0MDAwNyxFRy1MT0UtRzI0MDAwOCxFRy1MT0UtRzI0MDAwOSxFRy1VUEUtRzI5MDAwMSxFRy1VUEUtRzI5MDAwMixFRy1VUEUtRzI5MDAwMyxFRy1VUEUtRzI5MDAwNCxFRy1VUEUtRzI5MDAwNSxFRy1VUEUtRzI5MDAwNixFRy1VUEUtRzI5MDAwNyxFRy1VUEUtRzI5MDAwOCxFRy1VUkctRzMwMDAwMSxFRy1VUkctRzMwMDAwMixFRy1VUkctRzMwMDAwMyxFRy1VUkctRzMwMDAwNAorMSxUdWUgMjUgSmFuIDExLDE0NzgwNi42ODU0OTI5OTY1NiwxMzE5NjkuNzg5NzcwMDcwODcsNzY4MTcuMTU5MjQ1MTE0NzcsMTU4ODAxLjI0NTk3NTc0MjUyLDE2MDA3MC4wNjEwMzM1MDM1LDI1ODc1OTUuMjgxMDg5MDY5MywyODExOTM3LjExMTI2ODM0OTUsMjMwNDY1MS4wMjU5NTAyNDk4LDIwMDE4MjEuOTg5Mzg3MDU2OCwyNTAyNzgxLjUzMTQwNDkxMTUsNTA4MjQxLjMyODIzNzYyMjE2LDI5NzEwODQuOTg5NzAzNjE0Nyw1ODc5OTQuODQ1MTA5NTAxNiwxNTYwODk5Ljk5MDgyMDg0MDIsMTM5NTE2MC4wODQ2ODcxNDA4LDMyMDI3MTIuMTEyNTAwMzc0LDIzMjAyMzguNDY2NTIxNjY5LDY1MjUzNy4xMDc3OTMwNTU5LDE4OTkxNzkuMjA5MTY1NjM2NSwxMjY0ODAwLjIzMjM4MDgwNiwxODY4NTA2Ljc0NDcyMzUyMTQsMjA3NDkyOS4zNzk4NTI5NDY0LDE4NDU4MzcuODgzNTE1ODczMiw0MjA3NTQ3LjUxNzYwNDQ5NDUsMjY4MzIyLjU3NjY4MDA1ODIsMzM1OS42Mjk5MjE5OTA4NDk3CisyLFdlZCAyNiBKYW4gMTEsMTQ3ODA2LjgzMzI5OTY4MjA3LDEzMTk2OS45MjE3Mzk4NjA2NCw3NjgxNy4yMzYwNjIyNzQwMiwxNTg4MDEuNDA0Nzc2OTg4NSwxNjAwNzAuMjIxMTAzNTY0NTUsMjU4NzU5Ny44Njg2ODQzNTA1LDI4MTE5MzkuOTIzMjA1NDYxLDIzMDQ2NTMuMzMwNjAxMjc2LDIwMDE4MjMuOTkxMjA5MDQ2MiwyNTAyNzg0LjAzNDE4NjQ0Myw1MDgyNDEuODM2NDc4OTUwNCwyOTcxMDg3Ljk2MDc4ODYwNSw1ODc5OTUuNDMzMTA0MzQ2NywxNTYwOTAxLjU1MTcyMDgzMSwxMzk1MTYxLjQ3OTg0NzIyNTQsMzIwMjcxNS4zMTUyMTI0ODcsMjMyMDI0MC43ODY3NjAxMzU2LDY1MjUzNy43NjAzMzAxNjM4LDE4OTkxODEuMTA4MzQ0ODQ1NywxMjY0ODAxLjQ5NzE4MTAzODQsMTg2ODUwOC42MTMyMzAyNjYxLDIwNzQ5MzEuNDU0NzgyMzI2MiwxODQ1ODM5LjcyOTM1Mzc1NjYsNDIwNzU1MS43MjUxNTIwMTIsMjY4MzIyLjg0NTAwMjYzNDg2LDMzNTkuNjMzMjgxNjIwNzcyCiszLFRodSAyNyBKYW4gMTEsMTQ3ODA2Ljk4MTEwNjUxNTM2LDEzMTk3MC4wNTM3MDk3ODIzNyw3NjgxNy4zMTI4Nzk1MTAxLDE1ODgwMS41NjM1NzgzOTMyOCwxNjAwNzAuMzgxMTczNzg1NjYsMjU4NzYwMC40NTYyODIyMTk0LDI4MTE5NDIuNzM1MTQ1Mzg0LDIzMDQ2NTUuNjM1MjU0NjA2NiwyMDAxODI1Ljk5MzAzMzAzNzUsMjUwMjc4Ni41MzY5NzA0NzcsNTA4MjQyLjM0NDcyMDc4Njg0LDI5NzEwOTAuOTMxODc2NTY1Myw1ODc5OTYuMDIxMDk5Nzc5OSwxNTYwOTAzLjExMjYyMjM4MjgsMTM5NTE2Mi44NzUwMDg3MDUzLDMyMDI3MTguNTE3OTI3ODAxNywyMzIwMjQzLjEwNzAwMDkyMjMsNjUyNTM4LjQxMjg2NzkyNDEsMTg5OTE4My4wMDc1MjU5NTQyLDEyNjQ4MDIuNzYxOTgyNTM1NSwxODY4NTEwLjQ4MTczODg3OTMsMjA3NDkzMy41Mjk3MTM3ODEsMTg0NTg0MS41NzUxOTM0ODYsNDIwNzU1NS45MzI3MDM3MzcsMjY4MzIzLjExMzMyNTQ3OTg1LDMzNTkuNjM2NjQxMjU0MDUzMworNCxGcmkgMjggSmFuIDExLDE0NzgwNy4xMjg5MTM0OTY0OCwxMzE5NzAuMTg1Njc5ODM2MDgsNzY4MTcuMzg5Njk2ODIyOTcsMTU4ODAxLjcyMjM3OTk1Njg2LDE2MDA3MC41NDEyNDQxNjY4NCwyNTg3NjAzLjA0Mzg4MjY3NTUsMjgxMTk0NS41NDcwODgxMTksMjMwNDY1Ny45Mzk5MTAyNDIsMjAwMTgyNy45OTQ4NTkwMzA1LDI1MDI3ODkuMDM5NzU3MDE0Nyw1MDgyNDIuODUyOTYzMTMxNiwyOTcxMDkzLjkwMjk2NzQ5NzcsNTg3OTk2LjYwOTA5NTgwMSwxNTYwOTA0LjY3MzUyNTQ5NTUsMTM5NTE2NC4yNzAxNzE1ODA0LDMyMDI3MjEuNzIwNjQ2MzE5NCwyMzIwMjQ1LjQyNzI0NDAyOTUsNjUyNTM5LjA2NTQwNjMzNjksMTg5OTE4NC45MDY3MDg5NjE2LDEyNjQ4MDQuMDI2Nzg1Mjk3NiwxODY4NTEyLjM1MDI0OTM2MSwyMDc0OTM1LjYwNDY0NzMxMDcsMTg0NTg0My40MjEwMzUwNjExLDQyMDc1NjAuMTQwMjU5NjY5LDI2ODMyMy4zODE2NDg1OTMxLDMzNTkuNjQwMDAwODkwNjk0NAorNSxTYXQgMjkgSmFuIDExLDE0NzgwNy4yNzY3MjA2MjUzOCwxMzE5NzAuMzE3NjUwMDIxNzUsNzY4MTcuNDY2NTE0MjEyNjYsMTU4ODAxLjg4MTE4MTY3OTIzLDE2MDA3MC43MDEzMTQ3MDgxLDI1ODc2MDUuNjMxNDg1NzE5MiwyODExOTQ4LjM1OTAzMzY2NiwyMzA0NjYwLjI0NDU2ODE4MTcsMjAwMTgyOS45OTY2ODcwMjUzLDI1MDI3OTEuNTQyNTQ2MDU0LDUwODI0My4zNjEyMDU5ODQ1LDI5NzEwOTYuODc0MDYxNCw1ODc5OTcuMTk3MDkyNDEwMSwxNTYwOTA2LjIzNDQzMDE2OSwxMzk1MTY1LjY2NTMzNTg1MDYsMzIwMjcyNC45MjMzNjgwNDA1LDIzMjAyNDcuNzQ3NDg5NDU2Niw2NTI1MzkuNzE3OTQ1NDAyNCwxODk5MTg2LjgwNTg5Mzg2ODIsMTI2NDgwNS4yOTE1ODkzMjQ0LDE4Njg1MTQuMjE4NzYxNzExMSwyMDc0OTM3LjY3OTU4MjkxNTMsMTg0NTg0NS4yNjY4Nzg0ODIyLDQyMDc1NjQuMzQ3ODE5ODExLDI2ODMyMy42NDk5NzE5NzQ4LDMzNTkuNjQzMzYwNTMwNjk1Cis2LFN1biAzMCBKYW4gMTEsMTQ3ODA3LjQyNDUyNzkwMjEsMTMxOTcwLjQ0OTYyMDMzOTM4LDc2ODE3LjU0MzMzMTY3OTE4LDE1ODgwMi4wMzk5ODM1NjA0LDE2MDA3MC44NjEzODU0MDk0MywyNTg3NjA4LjIxOTA5MTM1MDcsMjgxMTk1MS4xNzA5ODIwMjUsMjMwNDY2Mi41NDkyMjg0MjYsMjAwMTgzMS45OTg1MTcwMjIsMjUwMjc5NC4wNDUzMzc1OTcsNTA4MjQzLjg2OTQ0OTM0NTc0LDI5NzEwOTkuODQ1MTU4Mjc0OCw1ODc5OTcuNzg1MDg5NjA3MSwxNTYwOTA3Ljc5NTMzNjQwMzQsMTM5NTE2Ny4wNjA1MDE1MTU5LDMyMDI3MjguMTI2MDkyOTY0LDIzMjAyNTAuMDY3NzM3MjA0LDY1MjU0MC4zNzA0ODUxMjAzLDE4OTkxODguNzA1MDgwNjc0MywxMjY0ODA2LjU1NjM5NDYxNjEsMTg2ODUxNi4wODcyNzU5MywyMDc0OTM5Ljc1NDUyMDU5NDgsMTg0NTg0Ny4xMTI3MjM3NDkxLDQyMDc1NjguNTU1Mzg0MTU3LDI2ODMyMy45MTgyOTU2MjQ4LDMzNTkuNjQ2NzIwMTc0MDU1NgorNyxNb24gMzEgSmFuIDExLDE0NzgwNy41NzIzMzUzMjY2LDEzMTk3MC41ODE1OTA3ODkwMiw3NjgxNy42MjAxNDkyMjI1MSwxNTg4MDIuMTk4Nzg1NjAwNCwxNjAwNzEuMDIxNDU2MjcwODMsMjU4NzYxMC44MDY2OTk1NywyODExOTUzLjk4MjkzMzE5NjIsMjMwNDY2NC44NTM4OTA5NzUsMjAwMTgzNC4wMDAzNDkwMjA2LDI1MDI3OTYuNTQ4MTMxNjQyLDUwODI0NC4zNzc2OTMyMTUyLDI5NzExMDIuODE2MjU4MTE5NCw1ODc5OTguMzczMDg3MzkyMiwxNTYwOTA5LjM1NjI0NDE5ODcsMTM5NTE2OC40NTU2Njg1NzYzLDMyMDI3MzEuMzI4ODIxMDksMjMyMDI1Mi4zODc5ODcyNzE0LDY1MjU0MS4wMjMwMjU0OTA4LDE4OTkxOTAuNjA0MjY5Mzc5MywxMjY0ODA3LjgyMTIwMTE3MjQsMTg2ODUxNy45NTU3OTIwMTczLDIwNzQ5NDEuODI5NDYwMzQ5NCwxODQ1ODQ4Ljk1ODU3MDg2Miw0MjA3NTcyLjc2Mjk1MjcxMywyNjgzMjQuMTg2NjE5NTQzMSwzMzU5LjY1MDA3OTgyMDc3NgorOCxUdWUgMSBGZWIgMTEsMTQ3ODA3LjcyMDE0Mjg5ODk0LDEzMTk3MC43MTM1NjEzNzA2LDc2ODE3LjY5Njk2Njg0MjY2LDE1ODgwMi4zNTc1ODc3OTkyLDE2MDA3MS4xODE1MjcyOTIyNywyNTg3NjEzLjM5NDMxMDM3NiwyODExOTU2Ljc5NDg4NzE3OSwyMzA0NjY3LjE1ODU1NTgyOSwyMDAxODM2LjAwMjE4MzAyMDYsMjUwMjc5OS4wNTA5MjgxOTEsNTA4MjQ0Ljg4NTkzNzU5MjgzLDI5NzExMDUuNzg3MzYwOTM2LDU4Nzk5OC45NjEwODU3NjUyLDE1NjA5MTAuOTE3MTUzNTU1LDEzOTUxNjkuODUwODM3MDMyLDMyMDI3MzQuNTMxNTUyNDE4NiwyMzIwMjU0LjcwODIzOTY2LDY1MjU0MS42NzU1NjY1MTM5LDE4OTkxOTIuNTAzNDU5OTgzMywxMjY0ODA5LjA4NjAwODk5MzQsMTg2ODUxOS44MjQzMDk5NzMsMjA3NDk0My45MDQ0MDIxNzksMTg0NTg1MC44MDQ0MTk4MjA0LDQyMDc1NzYuOTcwNTI1NDc2LDI2ODMyNC40NTQ5NDM3Mjk3LDMzNTkuNjUzNDM5NDcwODU2Cis5LFdlZCAyIEZlYiAxMSwxNDc4MDcuODY3OTUwNjE5MDgsMTMxOTcwLjg0NTUzMjA4NDE1LDc2ODE3Ljc3Mzc4NDUzOTY1LDE1ODgwMi41MTYzOTAxNTY4LDE2MDA3MS4zNDE1OTg0NzM3OCwyNTg3NjE1Ljk4MTkyMzc3MDYsMjgxMTk1OS42MDY4NDM5NzQ0LDIzMDQ2NjkuNDYzMjIyOTg3NSwyMDAxODM4LjAwNDAxOTAyMjcsMjUwMjgwMS41NTM3MjcyNDEsNTA4MjQ1LjM5NDE4MjQ3ODgsMjk3MTEwOC43NTg0NjY3MjQsNTg3OTk5LjU0OTA4NDcyNjMsMTU2MDkxMi40NzgwNjQ0NzIsMTM5NTE3MS4yNDYwMDY4ODI3LDMyMDI3MzcuNzM0Mjg2OTUsMjMyMDI1Ny4wMjg0OTQzNjgsNjUyNTQyLjMyODEwODE4OTMsMTg5OTE5NC40MDI2NTI0ODY3LDEyNjQ4MTAuMzUwODE4MDc5NCwxODY4NTIxLjY5MjgyOTc5NzUsMjA3NDk0NS45NzkzNDYwODM1LDE4NDU4NTIuNjUwMjcwNjI0OCw0MjA3NTgxLjE3ODEwMjQ0NywyNjgzMjQuNzIzMjY4MTg0NjQsMzM1OS42NTY3OTkxMjQyOTYKKzEwLFRodSAzIEZlYiAxMSwxNDc4MDguMDE1NzU4NDg3MDIsMTMxOTcwLjk3NzUwMjkyOTcyLDc2ODE3Ljg1MDYwMjMxMzQzLDE1ODgwMi42NzUxOTI2NzMyMiwxNjAwNzEuNTAxNjY5ODE1MzYsMjU4NzYxOC41Njk1Mzk3NTMsMjgxMTk2Mi40MTg4MDM1ODE1LDIzMDQ2NzEuNzY3ODkyNDUxLDIwMDE4NDAuMDA1ODU3MDI2NywyNTAyODA0LjA1NjUyODc5NSw1MDgyNDUuOTAyNDI3ODczLDI5NzExMTEuNzI5NTc1NDgxNyw1ODgwMDAuMTM3MDg0Mjc1NSwxNTYwOTE0LjAzODk3Njk1LDEzOTUxNzIuNjQxMTc4MTI4OCwzMjAyNzQwLjkzNzAyNDY4NCwyMzIwMjU5LjM0ODc1MTM5NjQsNjUyNTQyLjk4MDY1MDUxNzUsMTg5OTE5Ni4zMDE4NDY4ODk1LDEyNjQ4MTEuNjE1NjI4NDMwNCwxODY4NTIzLjU2MTM1MTQ5MDIsMjA3NDk0OC4wNTQyOTIwNjI4LDE4NDU4NTQuNDk2MTIzMjc1NSw0MjA3NTg1LjM4NTY4MzYyNCwyNjgzMjQuOTkxNTkyOTA3OSwzMzU5LjY2MDE1ODc4MTA5NAorMTEsRnJpIDQgRmViIDExLDE0NzgwOC4xNjM1NjY1MDI4LDEzMTk3MS4xMDk0NzM5MDcyLDc2ODE3LjkyNzQyMDE2NDAyLDE1ODgwMi44MzM5OTUzNDg0LDE2MDA3MS42NjE3NDEzMTcwMiwyNTg3NjIxLjE1NzE1ODMyMjYsMjgxMTk2NS4yMzA3NjU5OTk4LDIzMDQ2NzQuMDcyNTY0MjE4NywyMDAxODQyLjAwNzY5NzAzMjMsMjUwMjgwNi41NTkzMzI4NTIsNTA4MjQ2LjQxMDY3Mzc3NTUsMjk3MTExNC43MDA2ODcyMTE1LDU4ODAwMC43MjUwODQ0MTI1LDE1NjA5MTUuNTk5ODkwOTg5MywxMzk1MTc0LjAzNjM1MDc3LDMyMDI3NDQuMTM5NzY1NjIxNiwyMzIwMjYxLjY2OTAxMDc0NSw2NTI1NDMuNjMzMTkzNDk4MSwxODk5MTk4LjIwMTA0MzE5MTQsMTI2NDgxMi44ODA0NDAwNDU4LDE4Njg1MjUuNDI5ODc1MDUxNCwyMDc0OTUwLjEyOTI0MDExNywxODQ1ODU2LjM0MTk3Nzc3MTYsNDIwNzU4OS41OTMyNjkwMDksMjY4MzI1LjI1OTkxNzg5OTUsMzM1OS42NjM1MTg0NDEyNTMKKzEyLFNhdCA1IEZlYiAxMSwxNDc4MDguMzExMzc0NjY2MzQsMTMxOTcxLjI0MTQ0NTAxNjY3LDc2ODE4LjAwNDIzODA5MTQ1LDE1ODgwMi45OTI3OTgxODI0LDE2MDA3MS44MjE4MTI5Nzg4LDI1ODc2MjMuNzQ0Nzc5NDc5LDI4MTE5NjguMDQyNzMxMjMxLDIzMDQ2NzYuMzc3MjM4MjkyLDIwMDE4NDQuMDA5NTM5MDQwMywyNTAyODA5LjA2MjEzOTQxMDUsNTA4MjQ2LjkxODkyMDE4NjEsMjk3MTExNy42NzE4MDE5MTIsNTg4MDAxLjMxMzA4NTEzNzUsMTU2MDkxNy4xNjA4MDY1ODksMTM5NTE3NS40MzE1MjQ4MDY0LDMyMDI3NDcuMzQyNTA5NzYxNSwyMzIwMjYzLjk4OTI3MjQxNDIsNjUyNTQ0LjI4NTczNzEzMTQsMTg5OTIwMC4xMDAyNDEzOTI0LDEyNjQ4MTQuMTQ1MjUyOTI2LDE4Njg1MjcuMjk4NDAwNDgxNSwyMDc0OTUyLjIwNDE5MDI0NiwxODQ1ODU4LjE4NzgzNDExMzQsNDIwNzU5My44MDA4NTg2MDMsMjY4MzI1LjUyODI0MzE1OTQsMzM1OS42NjY4NzgxMDQ3NzIKKzEzLFN1biA2IEZlYiAxMSwxNDc4MDguNDU5MTgyOTc3NzMsMTMxOTcxLjM3MzQxNjI1ODEsNzY4MTguMDgxMDU2MDk1NjcsMTU4ODAzLjE1MTYwMTE3NTE3LDE2MDA3MS45ODE4ODQ4MDA2LDI1ODc2MjYuMzMyNDAzMjI0LDI4MTE5NzAuODU0Njk5MjczNiwyMzA0Njc4LjY4MTkxNDY2OTUsMjAwMTg0Ni4wMTEzODMwNDk3LDI1MDI4MTEuNTY0OTQ4NDczLDUwODI0Ny40MjcxNjcxMDUsMjk3MTEyMC42NDI5MTk1ODQsNTg4MDAxLjkwMTA4NjQ1MDYsMTU2MDkxOC43MjE3MjM3NDk4LDEzOTUxNzYuODI2NzAwMjM3OCwzMjAyNzUwLjU0NTI1NzEwMywyMzIwMjY2LjMwOTUzNjQwNCw2NTI1NDQuOTM4MjgxNDE3MSwxODk5MjAxLjk5OTQ0MTQ5MjYsMTI2NDgxNS40MTAwNjcwNzE0LDE4Njg1MjkuMTY2OTI3Nzc5OCwyMDc0OTU0LjI3OTE0MjQ1MDMsMTg0NTg2MC4wMzM2OTIzMDEsNDIwNzU5OC4wMDg0NTI0MDMsMjY4MzI1Ljc5NjU2ODY4NzY2LDMzNTkuNjcwMjM3NzcxNjQ5NworMTQsTW9uIDcgRmViIDExLDE0NzgwOC42MDY5OTE0MzY4OSwxMzE5NzEuNTA1Mzg3NjMxNTcsNzY4MTguMTU3ODc0MTc2NzQsMTU4ODAzLjMxMDQwNDMyNjgsMTYwMDcyLjE0MTk1Njc4MjUsMjU4NzYyOC45MjAwMjk1NTY0LDI4MTE5NzMuNjY2NjcwMTI4MiwyMzA0NjgwLjk4NjU5MzM1MTcsMjAwMTg0OC4wMTMyMjkwNjEyLDI1MDI4MTQuMDY3NzYwMDM3Nyw1MDgyNDcuOTM1NDE0NTMyMTQsMjk3MTEyMy42MTQwNDAyMjcsNTg4MDAyLjQ4OTA4ODM1MTYsMTU2MDkyMC4yODI2NDI0NzE2LDEzOTUxNzguMjIxODc3MDY0NiwzMjAyNzUzLjc0ODAwNzY0OSwyMzIwMjY4LjYyOTgwMjcxMjcsNjUyNTQ1LjU5MDgyNjM1NTUsMTg5OTIwMy44OTg2NDM0OTIsMTI2NDgxNi42NzQ4ODI0ODE4LDE4Njg1MzEuMDM1NDU2OTQ2NiwyMDc0OTU2LjM1NDA5NjcyOTMsMTg0NTg2MS44Nzk1NTIzMzQ4LDQyMDc2MDIuMjE2MDUwNDEyNSwyNjgzMjYuMDY0ODk0NDg0MjQsMzM1OS42NzM1OTc0NDE4ODc1CisxNSxUdWUgOCBGZWIgMTEsMTQ3ODA4Ljc1NDgwMDA0Mzg4LDEzMTk3MS42MzczNTkxMzY5Miw3NjgxOC4yMzQ2OTIzMzQ2MywxNTg4MDMuNDY5MjA3NjM3MiwxNjAwNzIuMzAyMDI4OTI0NDMsMjU4NzYzMS41MDc2NTg0NzYsMjgxMTk3Ni40Nzg2NDM3OTU1LDIzMDQ2ODMuMjkxMjc0MzM3NiwyMDAxODUwLjAxNTA3NzA3NDUsMjUwMjgxNi41NzA1NzQxMDUzLDUwODI0OC40NDM2NjI0Njc2LDI5NzExMjYuNTg1MTYzODQxNSw1ODgwMDMuMDc3MDkwODQwNywxNTYwOTIxLjg0MzU2Mjc1NDMsMTM5NTE3OS42MTcwNTUyODY0LDMyMDI3NTYuOTUwNzYxMzk3LDIzMjAyNzAuOTUwMDcxMzQzLDY1MjU0Ni4yNDMzNzE5NDY0LDE4OTkyMDUuNzk3ODQ3MzkwNCwxMjY0ODE3LjkzOTY5OTE1NjQsMTg2ODUzMi45MDM5ODc5ODIsMjA3NDk1OC40MjkwNTMwODM1LDE4NDU4NjMuNzI1NDE0MjE0NCw0MjA3NjA2LjQyMzY1MjYyOSwyNjgzMjYuMzMzMjIwNTQ5MSwzMzU5LjY3Njk1NzExNTQ4NQorMTYsV2VkIDkgRmViIDExLDE0NzgwOC45MDI2MDg3OTg3LDEzMTk3MS43NjkzMzA3NzQzLDc2ODE4LjMxMTUxMDU2OTMzLDE1ODgwMy42MjgwMTExMDYzNywxNjAwNzIuNDYyMTAxMjI2NSwyNTg3NjM0LjA5NTI4OTk4NCwyODExOTc5LjI5MDYyMDI3NCwyMzA0Njg1LjU5NTk1NzYyOTQsMjAwMTg1Mi4wMTY5MjcwODk1LDI1MDI4MTkuMDczMzkwNjc2LDUwODI0OC45NTE5MTA5MTEyNCwyOTcxMTI5LjU1NjI5MDQyNjgsNTg4MDAzLjY2NTA5MzkxNzcsMTU2MDkyMy40MDQ0ODQ1OTgsMTM5NTE4MS4wMTIyMzQ5MDMyLDMyMDI3NjAuMTUzNTE4MzQ4LDIzMjAyNzMuMjcwMzQyMjkzLDY1MjU0Ni44OTU5MTgxODk4LDE4OTkyMDcuNjk3MDUzMTg4NSwxMjY0ODE5LjIwNDUxNzA5NjMsMTg2ODUzNC43NzI1MjA4ODYsMjA3NDk2MC41MDQwMTE1MTI1LDE4NDU4NjUuNTcxMjc3OTM5Nyw0MjA3NjEwLjYzMTI1OTA1MywyNjgzMjYuNjAxNTQ2ODgyMzYsMzM1OS42ODAzMTY3OTI0NDE4CisxNyxUaHUgMTAgRmViIDExLDE0NzgwOS4wNTA0MTc3MDEzNCwxMzE5NzEuOTAxMzAyNTQzNjQsNzY4MTguMzg4MzI4ODgwODMsMTU4ODAzLjc4NjgxNDczNDM3LDE2MDA3Mi42MjIxNzM2ODg2LDI1ODc2MzYuNjgyOTI0MDc5MiwyODExOTgyLjEwMjU5OTU2NSwyMzA0Njg3LjkwMDY0MzIyNTMsMjAwMTg1NC4wMTg3NzkxMDYyLDI1MDI4MjEuNTc2MjA5NzQ5Niw1MDgyNDkuNDYwMTU5ODYzMSwyOTcxMTMyLjUyNzQxOTk4MzQsNTg4MDA0LjI1MzA5NzU4MjgsMTU2MDkyNC45NjU0MDgwMDIzLDEzOTUxODIuNDA3NDE1OTE1NSwzMjAyNzYzLjM1NjI3ODUwMTUsMjMyMDI3NS41OTA2MTU1NjI2LDY1MjU0Ny41NDg0NjUwODU4LDE4OTkyMDkuNTk2MjYwODg1MiwxMjY0ODIwLjQ2OTMzNjMwMDYsMTg2ODUzNi42NDEwNTU2NTg3LDIwNzQ5NjIuNTc4OTcyMDE2NSwxODQ1ODY3LjQxNzE0MzUxMTEsNDIwNzYxNC44Mzg4Njk2ODMsMjY4MzI2Ljg2OTg3MzQ4Mzg0LDMzNTkuNjgzNjc2NDcyNzU4NgorMTgsRnJpIDExIEZlYiAxMSwxNDc4MDkuMTk4MjI2NzUxNzYsMTMxOTcyLjAzMzI3NDQ0NDkzLDc2ODE4LjQ2NTE0NzI2OTE2LDE1ODgwMy45NDU2MTg1MjEyMiwxNjAwNzIuNzgyMjQ2MzEwOCwyNTg3NjM5LjI3MDU2MDc2MiwyODExOTg0LjkxNDU4MTY2NjcsMjMwNDY5MC4yMDUzMzExMjUzLDIwMDE4NTYuMDIwNjMzMTI1NCwyNTAyODI0LjA3OTAzMTMyNTQsNTA4MjQ5Ljk2ODQwOTMyMzMsMjk3MTEzNS40OTg1NTI1MTEsNTg4MDA0Ljg0MTEwMTgzNjEsMTU2MDkyNi41MjYzMzI5Njc3LDEzOTUxODMuODAyNTk4MzIzLDMyMDI3NjYuNTU5MDQxODU4LDIzMjAyNzcuOTEwODkxMTU0LDY1MjU0OC4yMDEwMTI2MzQxLDE4OTkyMTEuNDk1NDcwNDgxNSwxMjY0ODIxLjczNDE1Njc3LDE4Njg1MzguNTA5NTkyMjk5OCwyMDc0OTY0LjY1MzkzNDU5NTIsMTg0NTg2OS4yNjMwMTA5MjgyLDQyMDc2MTkuMDQ2NDg0NTIyNSwyNjgzMjcuMTM4MjAwMzUzNywzMzU5LjY4NzAzNjE1NjQzNQorMTksU2F0IDEyIEZlYiAxMSwxNDc4MDkuMzQ2MDM1OTQ5OTcsMTMxOTcyLjE2NTI0NjQ3ODIyLDc2ODE4LjU0MTk2NTczNDMsMTU4ODA0LjEwNDQyMjQ2NjgzLDE2MDA3Mi45NDIzMTkwOTMwNCwyNTg3NjQxLjg1ODIwMDAzMjMsMjgxMTk4Ny43MjY1NjY1ODE1LDIzMDQ2OTIuNTEwMDIxMzMxMywyMDAxODU4LjAyMjQ4OTE0NTYsMjUwMjgyNi41ODE4NTU0MDQsNTA4MjUwLjQ3NjY1OTI5MTcsMjk3MTEzOC40Njk2ODgwMDksNTg4MDA1LjQyOTEwNjY3NzEsMTU2MDkyOC4wODcyNTk0OTM4LDEzOTUxODUuMTk3NzgyMTI1NiwzMjAyNzY5Ljc2MTgwODQxNywyMzIwMjgwLjIzMTE2OTA2NDUsNjUyNTQ4Ljg1MzU2MDgzNTIsMTg5OTIxMy4zOTQ2ODE5NzY5LDEyNjQ4MjIuOTk4OTc4NTA0MiwxODY4NTQwLjM3ODEzMDgwOTYsMjA3NDk2Ni43Mjg4OTkyNDk2LDE4NDU4NzEuMTA4ODgwMTkxMyw0MjA3NjIzLjI1NDEwMzU2OCwyNjgzMjcuNDA2NTI3NDkxOSwzMzU5LjY5MDM5NTg0MzQ3MTQKKzIwLFN1biAxMyBGZWIgMTEsMTQ3ODA5LjQ5Mzg0NTI5NjAzLDEzMTk3Mi4yOTcyMTg2NDM0OCw3NjgxOC42MTg3ODQyNzYyNiwxNTg4MDQuMjYzMjI2NTcxMjMsMTYwMDczLjEwMjM5MjAzNTM2LDI1ODc2NDQuNDQ1ODQxODkxLDI4MTE5OTAuNTM4NTU0MzA4NSwyMzA0Njk0LjgxNDcxMzg0MTMsMjAwMTg2MC4wMjQzNDcxNjgyLDI1MDI4MjkuMDg0NjgxOTg2NCw1MDgyNTAuOTg0OTA5NzY4NCwyOTcxMTQxLjQ0MDgyNjQ3OSw1ODgwMDYuMDE3MTEyMTA2MywxNTYwOTI5LjY0ODE4NzU4MSwxMzk1MTg2LjU5Mjk2NzMyMzUsMzIwMjc3Mi45NjQ1NzgxNzg3LDIzMjAyODIuNTUxNDQ5Mjk2LDY1MjU0OS41MDYxMDk2ODg4LDE4OTkyMTUuMjkzODk1MzcxNywxMjY0ODI0LjI2MzgwMTUwMywxODY4NTQyLjI0NjY3MTE4NzcsMjA3NDk2OC44MDM4NjU5NzgzLDE4NDU4NzIuOTU0NzUxMzAwMiw0MjA3NjI3LjQ2MTcyNjgyMywyNjgzMjcuNjc0ODU0ODk4NCwzMzU5LjY5Mzc1NTUzMzg2NworMjEsTW9uIDE0IEZlYiAxMSwxNDc4MDkuNjQxNjU0Nzg5ODgsMTMxOTcyLjQyOTE5MDk0MDcsNzY4MTguNjk1NjAyODk1MDUsMTU4ODA0LjQyMjAzMDgzNDQ1LDE2MDA3My4yNjI0NjUxMzc3NiwyNTg3NjQ3LjAzMzQ4NjMzNjUsMjgxMTk5My4zNTA1NDQ4NDY2LDIzMDQ2OTcuMTE5NDA4NjU2LDIwMDE4NjIuMDI2MjA3MTkyNiwyNTAyODMxLjU4NzUxMTA3MSw1MDgyNTEuNDkzMTYwNzUzMywyOTcxMTQ0LjQxMTk2NzkxOTcsNTg4MDA2LjYwNTExODEyMzMsMTU2MDkzMS4yMDkxMTcyMjkzLDEzOTUxODcuOTg4MTUzOTE2NiwzMjAyNzc2LjE2NzM1MTE0NCwyMzIwMjg0Ljg3MTczMTg0NzUsNjUyNTUwLjE1ODY1OTE5NDgsMTg5OTIxNy4xOTMxMTA2NjU1LDEyNjQ4MjUuNTI4NjI1NzY3LDE4Njg1NDQuMTE1MjEzNDM0NCwyMDc0OTcwLjg3ODgzNDc4MiwxODQ1ODc0LjgwMDYyNDI1NSw0MjA3NjMxLjY2OTM1NDI4NSwyNjgzMjcuOTQzMTgyNTczMywzMzU5LjY5NzExNTIyNzYyMworMjIsVHVlIDE1IEZlYiAxMSwxNDc4MDkuNzg5NDY0NDMxNTUsMTMxOTcyLjU2MTE2MzM2OTg2LDc2ODE4Ljc3MjQyMTU5MDY1LDE1ODgwNC41ODA4MzUyNTY1LDE2MDA3My40MjI1Mzg0MDAyMiwyNTg3NjQ5LjYyMTEzMzM3LDI4MTE5OTYuMTYyNTM4MTk4LDIzMDQ2OTkuNDI0MTA1Nzc1NSwyMDAxODY0LjAyODA2OTIxODYsMjUwMjgzNC4wOTAzNDI2NTg2LDUwODI1Mi4wMDE0MTIyNDY0LDI5NzExNDcuMzgzMTEyMzMxNCw1ODgwMDcuMTkzMTI0NzI4NCwxNTYwOTMyLjc3MDA0ODQzODMsMTM5NTE4OS4zODMzNDE5MDQ3LDMyMDI3NzkuMzcwMTI3MzExLDIzMjAyODcuMTkyMDE2NzE5LDY1MjU1MC44MTEyMDkzNTM1LDE4OTkyMTkuMDkyMzI3ODU4NiwxMjY0ODI2Ljc5MzQ1MTI5NTUsMTg2ODU0NS45ODM3NTc1NDk0LDIwNzQ5NzIuOTUzODA1NjYxLDE4NDU4NzYuNjQ2NDk5MDU1Nyw0MjA3NjM1Ljg3Njk4NTk1NCwyNjgzMjguMjExNTEwNTE2NDcsMzM1OS43MDA0NzQ5MjQ3MzgKKzIzLFdlZCAxNiBGZWIgMTEsMTQ3ODA5LjkzNzI3NDIyMDk4LDEzMTk3Mi42OTMxMzU5MzEwNyw3NjgxOC44NDkyNDAzNjMwOCwxNTg4MDQuNzM5NjM5ODM3MzIsMTYwMDczLjU4MjYxMTgyMjc2LDI1ODc2NTIuMjA4NzgyOTkxLDI4MTE5OTguOTc0NTM0MzYsMjMwNDcwMS43Mjg4MDUxOTk3LDIwMDE4NjYuMDI5OTMzMjQ3LDI1MDI4MzYuNTkzMTc2NzQ5LDUwODI1Mi41MDk2NjQyNDc4NiwyOTcxMTUwLjM1NDI1OTcxNDUsNTg4MDA3Ljc4MTEzMTkyMTcsMTU2MDkzNC4zMzA5ODEyMDg1LDEzOTUxOTAuNzc4NTMxMjg3OCwzMjAyNzgyLjU3MjkwNjY4MSwyMzIwMjg5LjUxMjMwMzkxMSw2NTI1NTEuNDYzNzYwMTY0NywxODk5MjIwLjk5MTU0Njk1MSwxMjY0ODI4LjA1ODI3ODA4OSwxODY4NTQ3Ljg1MjMwMzUzMywyMDc0OTc1LjAyODc3ODYxNDcsMTg0NTg3OC40OTIzNzU3MDIxLDQyMDc2NDAuMDg0NjIxODMxLDI2ODMyOC40Nzk4Mzg3MjgwMywzMzU5LjcwMzgzNDYyNTIxMworMjQsVGh1IDE3IEZlYiAxMSwxNDc4MTAuMDg1MDg0MTU4MywxMzE5NzIuODI1MTA4NjI0Miw3NjgxOC45MjYwNTkyMTIzMiwxNTg4MDQuODk4NDQ0NTc2OTUsMTYwMDczLjc0MjY4NTQwNTM2LDI1ODc2NTQuNzk2NDM1MTk5NywyODEyMDAxLjc4NjUzMzMzNDMsMjMwNDcwNC4wMzM1MDY5Mjg1LDIwMDE4NjguMDMxNzk5Mjc2OCwyNTAyODM5LjA5NjAxMzM0Miw1MDgyNTMuMDE3OTE2NzU3NSwyOTcxMTUzLjMyNTQxMDA2ODUsNTg4MDA4LjM2OTEzOTcwMjgsMTU2MDkzNS44OTE5MTU1Mzk3LDEzOTUxOTIuMTczNzIyMDY2NywzMjAyNzg1Ljc3NTY4OTI1NCwyMzIwMjkxLjgzMjU5MzQyNCw2NTI1NTIuMTE2MzExNjI4NSwxODk5MjIyLjg5MDc2Nzk0MjQsMTI2NDgyOS4zMjMxMDYxNDcsMTg2ODU0OS43MjA4NTEzODU1LDIwNzQ5NzcuMTAzNzUzNjQzOCwxODQ1ODgwLjMzODI1NDE5NDUsNDIwNzY0NC4yOTIyNjE5MTYsMjY4MzI4Ljc0ODE2NzIwNzgsMzM1OS43MDcxOTQzMjkwNDgKKzI1LEZyaSAxOCBGZWIgMTEsMTQ3ODEwLjIzMjg5NDI0MzM4LDEzMTk3Mi45NTcwODE0NDkyOCw3NjgxOS4wMDI4NzgxMzgzOSwxNTg4MDUuMDU3MjQ5NDc1NDIsMTYwMDczLjkwMjc1OTE0ODA0LDI1ODc2NTcuMzg0MDg5OTk1NiwyODEyMDA0LjU5ODUzNTEyMDUsMjMwNDcwNi4zMzgyMTA5NjIsMjAwMTg3MC4wMzM2NjczMDg1LDI1MDI4NDEuNTk4ODUyNDM4LDUwODI1My41MjYxNjk3NzUzNCwyOTcxMTU2LjI5NjU2MzM5NDQsNTg4MDA4Ljk1NzE0ODA3MTgsMTU2MDkzNy40NTI4NTE0MzE3LDEzOTUxOTMuNTY4OTE0MjQwMiwzMjAyNzg4Ljk3ODQ3NTAyOTYsMjMyMDI5NC4xNTI4ODUyNTYzLDY1MjU1Mi43Njg4NjM3NDQ4LDE4OTkyMjQuNzg5OTkwODMzLDEyNjQ4MzAuNTg3OTM1NDcwMywxODY4NTUxLjU4OTQwMTEwNjQsMjA3NDk3OS4xNzg3MzA3NDc0LDE4NDU4ODIuMTg0MTM0NTMzLDQyMDc2NDguNDk5OTA2MjA4LDI2ODMyOS4wMTY0OTU5NTYsMzM1OS43MTA1NTQwMzYyNDIKKzI2LFNhdCAxOSBGZWIgMTEsMTQ3ODEwLjM4MDcwNDQ3NjI0LDEzMTk3My4wODkwNTQ0MDYzNiw3NjgxOS4wNzk2OTcxNDEyNSwxNTg4MDUuMjE2MDU0NTMyNjgsMTYwMDc0LjA2MjgzMzA1MDgyLDI1ODc2NTkuOTcxNzQ3MzgsMjgxMjAwNy40MTA1Mzk3MTkzLDIzMDQ3MDguNjQyOTE3Mjk5NiwyMDAxODcyLjAzNTUzNzM0MjUsMjUwMjg0NC4xMDE2OTQwMzY3LDUwODI1NC4wMzQ0MjMzMDE2LDI5NzExNTkuMjY3NzE5NjkwNyw1ODgwMDkuNTQ1MTU3MDI5MSwxNTYwOTM5LjAxMzc4ODg4NDUsMTM5NTE5NC45NjQxMDc4MDk0LDMyMDI3OTIuMTgxMjY0MDA3NSwyMzIwMjk2LjQ3MzE3OTQwOTMsNjUyNTUzLjQyMTQxNjUxMzcsMTg5OTIyNi42ODkyMTU2MjMsMTI2NDgzMS44NTI3NjYwNTgyLDE4Njg1NTMuNDU3OTUyNjk1NywyMDc0OTgxLjI1MzcwOTkyNiwxODQ1ODg0LjAzMDAxNjcxNjgsNDIwNzY1Mi43MDc1NTQ3MDgsMjY4MzI5LjI4NDgyNDk3MjQ1LDMzNTkuNzEzOTEzNzQ2Nzk2CisyNyxTdW4gMjAgRmViIDExLDE0NzgxMC41Mjg1MTQ4NTY5NywxMzE5NzMuMjIxMDI3NDk1NDMsNzY4MTkuMTU2NTE2MjIwOTYsMTU4ODA1LjM3NDg1OTc0ODczLDE2MDA3NC4yMjI5MDcxMTM2NCwyNTg3NjYyLjU1OTQwNzM1MTUsMjgxMjAxMC4yMjI1NDcxMjk3LDIzMDQ3MTAuOTQ3NjI1OTQzLDIwMDE4NzQuMDM3NDA5Mzc3OCwyNTAyODQ2LjYwNDUzODEzODUsNTA4MjU0LjU0MjY3NzMzNTk2LDI5NzExNjIuMjM4ODc4OTU5LDU4ODAxMC4xMzMxNjY1NzQyLDE1NjA5NDAuNTc0NzI3ODk4NSwxMzk1MTk2LjM1OTMwMjc3MzQsMzIwMjc5NS4zODQwNTYxODksMjMyMDI5OC43OTM0NzU4ODI2LDY1MjU1NC4wNzM5Njk5MzUxLDE4OTkyMjguNTg4NDQyMzEyMywxMjY0ODMzLjExNzU5NzkxMDgsMTg2ODU1NS4zMjY1MDYxNTM3LDIwNzQ5ODMuMzI4NjkxMTc5NiwxODQ1ODg1Ljg3NTkwMDc0NzMsNDIwNzY1Ni45MTUyMDc0MTYsMjY4MzI5LjU1MzE1NDI1NzMsMzM1OS43MTcyNzM0NjA3MQorMjgsTW9uIDIxIEZlYiAxMSwxNDc4MTAuNjc2MzI1Mzg1NSwxMzE5NzMuMzUzMDAwNzE2NDgsNzY4MTkuMjMzMzM1Mzc3NDcsMTU4ODA1LjUzMzY2NTEyMzU3LDE2MDA3NC4zODI5ODEzMzY1LDI1ODc2NjUuMTQ3MDY5OTExLDI4MTIwMTMuMDM0NTU3MzUyMywyMzA0NzEzLjI1MjMzNjg5MDQsMjAwMTg3Ni4wMzkyODM0MTUzLDI1MDI4NDkuMTA3Mzg0NzQzLDUwODI1NS4wNTA5MzE4Nzg3LDI5NzExNjUuMjEwMDQxMTk3NSw1ODgwMTAuNzIxMTc2NzA3MywxNTYwOTQyLjEzNTY2ODQ3MjksMTM5NTE5Ny43NTQ0OTkxMzI3LDMyMDI3OTguNTg2ODUxNTczLDIzMjAzMDEuMTEzNzc0Njc2LDY1MjU1NC43MjY1MjQwMDkxLDE4OTkyMzAuNDg3NjcwOTAxLDEyNjQ4MzQuMzgyNDMxMDI4NCwxODY4NTU3LjE5NTA2MTQ4MDIsMjA3NDk4NS40MDM2NzQ1MDg0LDE4NDU4ODcuNzIxNzg2NjIzMSw0MjA3NjYxLjEyMjg2NDMzMSwyNjgzMjkuODIxNDgzODEwNDMsMzM1OS43MjA2MzMxNzc5ODM1CisyOSxUdWUgMjIgRmViIDExLDE0NzgxMC44MjQxMzYwNjE4LDEzMTk3My40ODQ5NzQwNjk0Niw3NjgxOS4zMTAxNTQ2MTA4MSwxNTg4MDUuNjkyNDcwNjU3MjMsMTYwMDc0LjU0MzA1NTcxOTUyLDI1ODc2NjcuNzM0NzM1MDU4LDI4MTIwMTUuODQ2NTcwMzg2NiwyMzA0NzE1LjU1NzA1MDE0MywyMDAxODc4LjA0MTE1OTQ1NDMsMjUwMjg1MS42MTAyMzM4NTEsNTA4MjU1LjU1OTE4NjkyOTU1LDI5NzExNjguMTgxMjA2NDA3NSw1ODgwMTEuMzA5MTg3NDI4NiwxNTYwOTQzLjY5NjYxMDYwODYsMTM5NTE5OS4xNDk2OTY4ODcsMzIwMjgwMS43ODk2NTAxNiwyMzIwMzAzLjQzNDA3NTc4OTUsNjUyNTU1LjM3OTA3ODczNTYsMTg5OTIzMi4zODY5MDEzODg5LDEyNjQ4MzUuNjQ3MjY1NDExLDE4Njg1NTkuMDYzNjE4Njc1MywyMDc0OTg3LjQ3ODY1OTkxMiwxODQ1ODg5LjU2NzY3NDM0NDYsNDIwNzY2NS4zMzA1MjU0NTQsMjY4MzMwLjA4OTgxMzYzMTk2LDMzNTkuNzIzOTkyODk4NjE2NAorMzAsV2VkIDIzIEZlYiAxMSwxNDc4MTAuOTcxOTQ2ODg1OTMsMTMxOTczLjYxNjk0NzU1NDQzLDc2ODE5LjM4Njk3MzkyMDk2LDE1ODgwNS44NTEyNzYzNDk3LDE2MDA3NC43MDMxMzAyNjI1NSwyNTg3NjcwLjMyMjQwMjc5MywyODEyMDE4LjY1ODU4NjIzMzQsMjMwNDcxNy44NjE3NjU3LDIwMDE4ODAuMDQzMDM3NDk1NiwyNTAyODU0LjExMzA4NTQ2MSw1MDgyNTYuMDY3NDQyNDg4NywyOTcxMTcxLjE1MjM3NDU4OSw1ODgwMTEuODk3MTk4NzM3NywxNTYwOTQ1LjI1NzU1NDMwNTMsMTM5NTIwMC41NDQ4OTYwMzY5LDMyMDI4MDQuOTkyNDUxOTUsMjMyMDMwNS43NTQzNzkyMjQsNjUyNTU2LjAzMTYzNDExNDYsMTg5OTIzNC4yODYxMzM3NzU3LDEyNjQ4MzYuOTEyMTAxMDU4MywxODY4NTYwLjkzMjE3NzczOSwyMDc0OTg5LjU1MzY0NzM5MDYsMTg0NTg5MS40MTM1NjM5MTI1LDQyMDc2NjkuNTM4MTkwNzg1LDI2ODMzMC4zNTgxNDM3MjE3NywzMzU5LjcyNzM1MjYyMjYwOQorMzEsVGh1IDI0IEZlYiAxMSwxNDc4MTEuMTE5NzU3ODU3ODcsMTMxOTczLjc0ODkyMTE3MTM1LDc2ODE5LjQ2Mzc5MzMwNzk1LDE1ODgwNi4wMTAwODIyMDA5OCwxNjAwNzQuODYzMjA0OTY1NywyNTg3NjcyLjkxMDA3MzExNTUsMjgxMjAyMS40NzA2MDQ4OTIsMjMwNDcyMC4xNjY0ODM1NjE1LDIwMDE4ODIuMDQ0OTE3NTM4NSwyNTAyODU2LjYxNTkzOTU3NCw1MDgyNTYuNTc1Njk4NTU2MiwyOTcxMTc0LjEyMzU0NTc0MSw1ODgwMTIuNDg1MjEwNjM0OSwxNTYwOTQ2LjgxODQ5OTU2MjgsMTM5NTIwMS45NDAwOTY1ODE4LDMyMDI4MDguMTk1MjU2OTQyNCwyMzIwMzA4LjA3NDY4NDk3ODUsNjUyNTU2LjY4NDE5MDE0NjMsMTg5OTIzNi4xODUzNjgwNjE4LDEyNjQ4MzguMTc2OTM3OTcwMywxODY4NTYyLjgwMDczODY3MSwyMDc0OTkxLjYyODYzNjk0NDMsMTg0NTg5My4yNTk0NTUzMjYsNDIwNzY3My43NDU4NjAzMjIsMjY4MzMwLjYyNjQ3NDA3OTksMzM1OS43MzA3MTIzNDk5NjIyCiszMixGcmkgMjUgRmViIDExLDE0NzgxMS4yNjc1Njg5Nzc2NCwxMzE5NzMuODgwODk0OTIwMyw3NjgxOS41NDA2MTI3NzE3NCwxNTg4MDYuMTY4ODg4MjExMDUsMTYwMDc1LjAyMzI3OTgyODksMjU4NzY3NS40OTc3NDYwMjUsMjgxMjAyNC4yODI2MjYzNjI1LDIzMDQ3MjIuNDcxMjAzNzI4NiwyMDAxODg0LjA0Njc5OTU4MzQsMjUwMjg1OS4xMTg3OTYxOSw1MDgyNTcuMDgzOTU1MTMxOSwyOTcxMTc3LjA5NDcxOTg2NSw1ODgwMTMuMDczMjIzMTIwMiwxNTYwOTQ4LjM3OTQ0NjM4MTIsMTM5NTIwMy4zMzUyOTg1MjIsMzIwMjgxMS4zOTgwNjUxMzgsMjMyMDMxMC4zOTQ5OTMwNTMsNjUyNTU3LjMzNjc0NjgzMDQsMTg5OTIzOC4wODQ2MDQyNDcyLDEyNjQ4MzkuNDQxNzc2MTQ3LDE4Njg1NjQuNjY5MzAxNDcyLDIwNzQ5OTMuNzAzNjI4NTcyOSwxODQ1ODk1LjEwNTM0ODU4NTQsNDIwNzY3Ny45NTM1MzQwNjksMjY4MzMwLjg5NDgwNDcwNjQsMzM1OS43MzQwNzIwODA2NzQKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvRGVtb2dyYXBoaWNTRUlSRGlzZWFzZV9GRF9SZWZlcmVuY2UvRmx1L21lbi9SXzIuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9EZW1vZ3JhcGhpY1NFSVJEaXNlYXNlX0ZEX1JlZmVyZW5jZS9GbHUvbWVuL1JfMi5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDczODJjZgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvRGVtb2dyYXBoaWNTRUlSRGlzZWFzZV9GRF9SZWZlcmVuY2UvRmx1L21lbi9SXzIuY3N2CkBAIC0wLDAgKzEsMzMgQEAKK2l0ZXJhdGlvbix0aW1lLEVHLUZSRy1HMjEwMDAxLEVHLUZSRy1HMjEwMDAyLEVHLUZSRy1HMjEwMDAzLEVHLUZSRy1HMjEwMDA0LEVHLUZSRy1HMjEwMDA1LEVHLUxPRS1HMjQwMDAxLEVHLUxPRS1HMjQwMDAyLEVHLUxPRS1HMjQwMDAzLEVHLUxPRS1HMjQwMDA0LEVHLUxPRS1HMjQwMDA1LEVHLUxPRS1HMjQwMDA2LEVHLUxPRS1HMjQwMDA3LEVHLUxPRS1HMjQwMDA4LEVHLUxPRS1HMjQwMDA5LEVHLVVQRS1HMjkwMDAxLEVHLVVQRS1HMjkwMDAyLEVHLVVQRS1HMjkwMDAzLEVHLVVQRS1HMjkwMDA0LEVHLVVQRS1HMjkwMDA1LEVHLVVQRS1HMjkwMDA2LEVHLVVQRS1HMjkwMDA3LEVHLVVQRS1HMjkwMDA4LEVHLVVSRy1HMzAwMDAxLEVHLVVSRy1HMzAwMDAyLEVHLVVSRy1HMzAwMDAzLEVHLVVSRy1HMzAwMDA0CisxLFR1ZSAyNSBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMixXZWQgMjYgSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzMsVGh1IDI3IEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCis0LEZyaSAyOCBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMjQxLjY4MzkyNzI4MTEwNDU2LDE5Ny45OTk3NjU3NjY2NDAyNSwyNjEuNjk5NjQ5NTk2NTE5NDYsMC4wLDAuMCwwLjAsMjUyLjE5MTcwODQ2ODEyMzEyLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCw3MDE0LjQ5NTIyMjI3NzM2NCwxNjQuOTcwNzYyNjY2MzI0MjUsMC4wCis1LFNhdCAyOSBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsNjc2LjM0MjI2MjAwMjEzMDQsNTUzLjg2MTkzMTE3NDY0OTIsNzMyLjM2NDI5NTg1NTg1ODIsMC4wLDAuMCwwLjAsNzA1Ljc2NTgyMTgzODc2OTcsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDE5NTg1LjcwNDg3NDYzNzM3Myw0NjEuMzIxNzQ1MDgxMDk1MywwLjAKKzYsU3VuIDMwIEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwxMTk5LjgyNDIwOTk3MzYwMjYsOTgyLjIyNDI5NTc3MDYxNCwxMjk5LjIxOTAxNDc4NTEzODYsMC4wLDAuMCwwLjAsMTI1Mi4wNDYxOTAzMTQwMDg1LDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwzNDY4NC4wMDY2MTEyODQwMSw4MTcuOTA3MDYxNTI0MzI0MSwwLjAKKzcsTW9uIDMxIEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwxNzI3LjQ4ODA3ODM2MTQ4NzksMTQxMy44MzA5MDYzNjg0NjA1LDE4NzAuNjA4OTU3NDYxNTA4NSwwLjAsMC4wLDAuMCwxODAyLjcwNDQwMTEyMjY1MiwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsNDk4NjkuMzQ2MjYyMjMyMjQsMTE3Ny4wNzkyNTYyOTM0NzI2LDAuMAorOCxUdWUgMSBGZWIgMTEsMS40NjY2MDk5NDIwNzQ4MzUsMC4wMDYyMDQyNTQzNzk4OTY0NDUsMy4zNzI5NjYxNjIwMzM0MTUsMS4yNjE2NjgzMTM1ODU5NzU2LDguMjY5NDU2NDUyNzU1MDMzLDMuMjQwMTEwMzk5MzMxNjc5OCwyMi45MjU1NzQ2OTE2MjE3NTUsMTUuMTg4NDcwNTcyNzAzMzE2LDE3Ljg0MTY3MjE4NzQ1MTg2LDI0MjcuNzc0MTgyMDQwOTY4MywxOTU5LjAzNTgxNDExNTAyMTQsMjY1Ni40ODY5NDkzOTUyOTIsMC4yNjg2NTMxODc1MzM3MjUyLDAuNTMyMTg5MDY2OTA4NTY1NCwzLjAzMzk1ODg2MjU5MTYwNzYsMjU1MC4yMTYxNDcxMjA2MjgsMi45NzkxMDIyNjUzMzkzOTIsMC4wMDM3MDQ2MTM4MzQ3MDU1OTUsMC4wMTk3MjYzNDUzNzAxNDU4NCwyLjkyMTU2NzI1MjkzNzExMywwLjAwMzg4MDU1ODc2NzEzNjE3OCwwLjAwMzgxMTEzMTQzNzU5OTg5MzUsMC4wMjI1NTM3MzczMzQ3MjEwNyw2NTk4Mi4wMDM3MjU3NDIyNCwxNjEzLjc0NDA4MzU4ODAyODYsMC4xMTI3MjY3ODUwNzYyNDc5OQorOSxXZWQgMiBGZWIgMTEsNy40NjY0NDg5NDA3NDc0NzIsMC4wMzE2MzE0ODQ0NjQ2MDk1MjYsMTcuMTY1ODEwNDI4MTA4NTIsNi40Mjc5MTcwODUxMjMxOTMsNDIuMDkyNzc0NjgzMjU2OTYsMTYuNTExMjk2MjkzOTA1MTUsMTE2LjgwNzQ2MzIwNTkyODc0LDc3LjM4NzEwNjkxMDk5MTQ5LDkwLjkwNDE2NjQ4NDk3MTI3LDM3MzUuNTI1OTI4NDYzMDA4OCwyOTE1LjAwMDg3NjEwMTA1Myw0MTg1LjM4NTg4MDM2MDE1OCwxLjM2OTY1OTEyNDczMDI0MzQsMi43MTMyMzI0MTYxODYzNDY0LDE1LjQ1OTQ5NTU0NTE4MTI3MSwzOTgzLjM5NzI4ODQ1NDQwOSwxNS4xNzk5OTYzNTM5NDUzMDQsMC4wMTg4ODI1NTU3OTc0OTg1MzgsMC4xMDA1NjY5OTYxMjkyNjM3NywxNC44ODY3NDk4Njc4NDMzODUsMC4wMTk3NzkzNTM5OTM1MjgzMiwwLjAxOTQyNTQ4MDMwMTIyNTQ1NiwwLjExNDk4NzAwODU5MTQxNzc2LDg3MTE1LjY2NjY5NTc1OTEyLDIzMzkuNDU3ODc4MzU3ODAxNywwLjU3MzcyNjUwNjczNDA1MTEKKzEwLFRodSAzIEZlYiAxMSwyMS41MjIzNDQwMzM4MjQ3NCwwLjA5MTMyODI1MTMzNzcyNTUsNDkuNDU0NzU1MTQ4OTYzOTU1LDE4LjU0NTQ0NDU3MDQ3MzY4NCwxMjEuMjkxNTgyODgyNTkzMzYsNDcuNjQ5MzE5MDI1MDc0NTksMzM3LjAyMzA2NjAxMjY2NDMsMjIzLjI4NzgxNjQ1NTI3NzgzLDI2Mi4yODI3OTE0NzM1NDU3LDYxNjkuMjU4NzIzOTY5ODcyLDQ2MzQuNzI4MTM2MjE3MDU4LDcwODQuOTY4Njg5MTQ0NjY1LDMuOTU0NDYwNjc0Mjc3MTcxLDcuODMzNjI0NDQ4NzM2MzE4LDQ0LjYxMDEzOTc4MjE4MzA5LDY2ODMuODk1NjA4OTQ4MjQzLDQzLjgwMzg0ODAwODUwNjY1NSwwLjA1NDUwNTkwOTQyNDYwNjcxNiwwLjI5MDM1MDEwNjk1NjM0NDcsNDIuOTU3MjMxOTYxNTQ2MDg2LDAuMDU3MDk0NTg2MTMzMDI5NzUsMC4wNTYwNzMxMDMzMzQ1Njc1NDYsMC4zMzE5OTc0NTcxNjQ2OTE2NSwxMTg0MTQuNzgzMTEwMTg3NTIsMzYwNS45NDgzMzEyOTI5MjI0LDEuNjUzMDkwOTc4MTIwMTEyOQorMTEsRnJpIDQgRmViIDExLDQ2LjI3NDE0NTQyMTY0OTU2NCwwLjE5NjcwNDA4NTUyMjY5MzA2LDEwNi4yNTUwMTg4MDMxMzkyLDM5LjkxMzQwNDAxNDAzMTkxLDI2MC42NDMwNjAxMDc1NDUzNSwxMDIuNTc4NzMxNDM3NTg3ODksNzI1LjM3MTE0OTA4NjA4NjIsNDgwLjU5MTUzMTIyNjUzOTQsNTY0LjUwMzE5NjY0MDQ4MDUsMTAxMjEuMjA3NTUwMzk4NzM2LDczNzguMDI3Njc2NjU0MjAxLDExODI5LjMwMjE1MDExMDY2LDguNTE2OTQyMzcwMzA2MTQ3LDE2Ljg3MTc2NTk1NDk5NTgzLDk2LjAyNzU5MzczMTA4ODU3LDExMDkxLjk1NjA2NjAwOTE4NSw5NC4yOTI4NDg0MzExNDk4LDAuMTE3MzcwMjQzMDc5MTI4MjIsMC42MjUzMzU1MDg2MzgzMDU5LDkyLjQ2OTEwODA0NDU1MzM4LDAuMTIyOTQ0NTcyNzg3MDEzNywwLjEyMDc0NDk2NDEyODk1MzgzLDAuNzE1MDYxNzAwNzk1MDQ3NywxNjM2NDguMDIxMDExNjE4MTcsNTU5Ni4wODEzMTk3MDA5NzEsMy41NTIyNzk2Mjg5MTExODMKKzEyLFNhdCA1IEZlYiAxMSw4My41OTc1NDkzOTgzMTU4MywwLjM2Njk0NzQ3ODU5MTkzODQ0LDE5Mi42MDE2OTA2NzA0MDA5Niw3Mi40MjM3NTYwMTg4NjIxLDQ3Mi41Njc5NTQ3NzQyNDk4NywxODguMTAxNTQ3MTIzNDY3NjQsMTMyMS4xMjc3NzQyMzU2OTcsODc1LjQ5ODU2NDk5NTYzOTksMTAyNy43NzI4MDI4Mjg5NTk4LDE1ODQzLjQ2NTQ4NjA4Mjk0MywxMTI4OS42MDgzODA1NTk4MDEsMTg3MzMuNTE4NTMwMDU3MDEyLDE2LjA1NzQ5MTI3NzY3MTM4LDMxLjgzMjgzODAwMTk2Mzg1NywxNzUuMjE5MTQ5MDAyMDMxMjYsMTc0OTcuMDc5MTMyOTQyNDAzLDE3Mi4wMjgwMzI5MzQzNDM2MywwLjIxNzc5OTEyODMxOTcxMTM4LDEuMTgxNDI3NzU5MjY1MzU2OCwxNjguNjg3MTkzODg4MzM1OTcsMC4yMjg1MzQ0MDE5MTQ5MTE4NywwLjIyNTY3MjUyODIwOTUxNjI4LDEuMzcyNjkzMjAxNzc2NTIwOCwyMjQ1NTcuOTU5MTA0MzQ2OTgsODQwMy4wNDQzMDM1NTAxMTgsNi40MTM3NzE3NzM4MTgxNzEKKzEzLFN1biA2IEZlYiAxMSwxMzYuNjYxNzkxMDM2MjQ2MiwwLjY2NDAzMDY2MDIxMjk5NSwzMTkuMTYwMjgzODk1MTQzNDQsMTE5LjkxOTMyODA1ODQyNzMsNzgzLjQ0MzMxOTUwMDQ3NzksMzIyLjU1MTg0Njg4NDc0NDUsMjIxNS41NTU2OTkxMDMyMDA0LDE0NjkuMjI5NjIyMzU1NTgzMiwxNzIxLjU1ODIzOTkxMjkzMzUsMjM2ODguMzMyNTg5NDA0NjIsMTY1MzQuMDc0MjQ3MTQ1OTkzLDI4MjcwLjIzMjU2OTg2Mzk4MywzMC4wMDQ4NTM2MDQ0ODg2MSw1OS42MTIxNzM5NTg5NDc3MiwyOTUuNTg1NTQyNDU0ODMwMywyNjMyMS41NDE2NTY3NjkwMDQsMjkwLjA0ODAwMjk5NzY2MDEsMC4zODc4NDQwNzE3MTkxNDI3LDIuMjIxMTgwMzc3MDQyODUwNywyODQuMzQ3ODg1MTA2OTgzNCwwLjQwOTE1Njc3Njg3NTEzMTIsMC40MTA5MTA4MzA1NDYzNDMxNCwyLjcwMDU2NjMzMjg2NzI1MTMsMzAyMjc5LjMxMDQ1NTIzMjE2LDEyMTE1Ljg0MzIyNzQwODg5NCwxMC40Nzk1NTc3NDg2NDA2OTYKKzE0LE1vbiA3IEZlYiAxMSwyMTIuNzE4MzQ4OTYxMDAzMywxLjIzNTE4NDEwMDkzOTM3NTQsNTEwLjYxMjM1MTczODQyOCwxOTEuMzA0OTc5NjQ1NDAwMSwxMjU0LjI2MzE2MDkyMDYxMzcsNTQ5LjEyNDA4MzUyMTczNjMsMzYyMS44MjI3ODQ5ODIzMDA2LDI0MDQuODYzMjExNDIwMjc4LDI4MDguMDI3ODA1NzE3MzEyNywzNDQ0My44MzU4MTc3NDk5NzYsMjM0NzkuODk0NzI1MDUyOTM4LDQxNTAzLjM5OTA3NDIzMTgwNiw1OC41MjE4MTQ2NzI0MTY0OCwxMTYuNjI4NjIzNzQ1MzY2NDQsNDg4LjUzMDM1Mzc1NjQ3MTc1LDM4NTEzLjU1Nzk3ODg1NjcsNDc4LjkwMzY1MjI0NzY4NTY3LDAuNzAzNDMwMDcxNDE5ODM2Nyw0LjM3MDAwNTA4NTA0MjExOCw0NjkuMjg3ODU3NTE0MzE5MTcsMC43NDg0NjkxMzIwODg5ODIyLDAuNzcxNTc4MTEzNTA3OTkxOCw1LjY0MzIwMDc0MjE2MDM5LDM5OTM4My41MjQzOTI5NDMxMywxNjkzNi4yNTg3NjA5MDM0NCwxNi4zMDI4NTQ4ODQ3MjE2NzIKKzE1LFR1ZSA4IEZlYiAxMSwzMjQuNzQyMTQ0NzcxMTA2NjcsMi4zMzY5MTgwMTIxMDMzMiw4MDkuOTQ2MjgyMTg2MTkxOSwzMDIuNDA5MjE2MjY0MzI1NDQsMTk5MS4wODk2NTk5Nzk4OTcsOTQzLjU3MTM4OTM4Mjc1OTgsNTkxNS42ODAwNjM4ODkzNDEsMzkzNC42OTUyMDE0NTI1NDU1LDQ1NzMuMjAxMTA5MTY5NTUxLDQ5NTIzLjQ0MDMyNDIxMjAzLDMyNzc5LjMzNjAxNzM4NzQ1LDYwMzI4LjExOTczNzEwODMxLDExNS43ODU4MjA2MDEzNzE1NywyMzEuMzk5ODExMjgwMjIwNjYsODA5LjM5MzUxMjY4MjUzNjEsNTU3NzAuODE2NDU0NjU2MjgsNzkyLjQ1OTUwMjkyMzM5MDIsMS4yOTY3NzQwNDA3MDg0MDI1LDguNzE0MzU4MzM0Nzc2MTksNzc2LjA5OTA3OTI2NTI5MTgsMS4zOTIwNzQ4OTc1MjIxMTk4LDEuNDczMDA5NTA1NTg5MzUzNSwxMS44Mzg1NTkyOTQxMDA0NCw1MjA3MTAuNDIxNDAzMzk5MSwyMzIyNS41MDIyNTMwNzgyNjMsMjQuODY1MDExNjA1MDE3NTQzCisxNixXZWQgOSBGZWIgMTEsNDkxLjA4NjUyNTQ3MzYwMDU1LDQuMzM2NjMxMzkxMzM3MDg1LDEyNzYuMjg5NTYwNDMyNTEzLDQ3NS43OTk3OTE1MTQyMDc2NCwzMTM5LjI4ODcxMjA1NjkyNiwxNjE0LjQyMjMxMDEzMDY2NTcsOTYzMS45MTk1MDg5MTgzMDksNjQxOC4zMjg1NjA4MjQ0MTksNzQyNC4wOTkzODYzMjA2NjYsNzA4OTUuNTA4MjU0NjcxMzIsNDUyNzEuODUyNzAwMDc2OTIsODczNzEuMDAxMjU2ODA0NiwyMjIuMTU3MjM4MjIzODgwMDksNDQ0LjkxMzQ3NDUwNzgzNzM1LDEzMzcuMzMzMDI0NTM1OTAxMSw4MDQ2My4yNzc4NDkyNzgsMTMwNy44MDExODM1MzkzMDQsMi4zNTYyNjQ1NjM4NTk5OTIsMTYuODIwNTIxOTg2NTI3MjMzLDEyNzkuOTkwMzE4NDg4MjY5NCwyLjU0Nzc1NzM2NDUxNjgwMzIsMi43NTI2OTc4NDExNjY3ODQ2LDIzLjY2NjI2OTI1MTQ3NDM2OCw2NzIyMTEuNjE3MDU2MzU1MSwzMTQzNC40NTM3NjY0MzUyMSwzNy41MzI0ODQ2MDk1MTIzMQorMTcsVGh1IDEwIEZlYiAxMSw3MzQuMTY2MDUzODgwNjA0Myw3LjcyNzYyNDY4NDY5NDkyMiwxOTgwLjE2ODgyNzA1MzA5NjMsNzM5Ljk0Mzc5MjI4MTM3Niw0ODcwLjg4NTE4OTIyMzk1MywyNzA1LjUxODIzNjkxMzY2NywxNTQ1NS4zNzQxODA2MTUyMTQsMTAzMTcuOTM3MTc0MDE2NDQyLDExODgwLjg5NDE2MjQyNzkxOCwxMDA4NjAuNzM0ODM1Mjk2ODgsNjE3NzMuMzc3MzQwMDMyNTE1LDEyNTY5OS42NzA0MTI3NTMyNyw0MDUuNTI2MTk2NDg5NjE2NCw4MTMuNDc1MDYzOTkxOTUxNCwyMTc1LjM5MjI0MTQ3NTY3NzYsMTE1Mzg2LjEzMzExNDIxNzIzLDIxMjUuMjgyODk5MTk2MDE1LDQuMTMwNTU1NzEwMDU0ODc2LDMwLjg2Mjc4NzI4NjYwNTIyMiwyMDc4LjcxMjMwMTg3ODA0MDgsNC40OTE4NzU2NjQ3OTIyMDQsNC45MzU4NTI5MDc0MDAxMTgsNDQuNTQwNzQxNDYxNzYyMzQsODU4NTkyLjk4NjkxOTk4NjMsNDE5NjAuNTQ3MzgyMTI4ODEsNTUuOTM1OTA5MDMyNDY5MjEKKzE4LEZyaSAxMSBGZWIgMTEsMTA4MC4xMzc4NjAwNzU0MzUsMTMuMjEzNjA2NDA4OTUzMjc5LDMwMDIuNzg2OTAyMjczNzg0LDExMzAuMjU0MjkxOTcxNDE5LDczODAuOTAwMzMwNDIzNjU2LDQ0MTYuNTQyNDQxNTMyMDU2LDI0MjcyLjI5NzQ4MzAzNTQ1LDE2MjM1LjU4MjYwODc2MzcxNiwxODYxMy42NTcwMzMyNzQzNTgsMTQxODk2LjIzMTc5NTUyMDE3LDgyODc4Ljc5Mjc0NDg1MDkzLDE3ODYzMS42MDI2NjI3MDAwMiw3MDcuMjcwOTc0OTQ5ODg4NiwxNDIxLjAzMzc3OTAwOTEzMTIsMzQ2MS4xNzkwNTU4MDUyNTUzLDE2MzYwMy44MjMxNDIyMTUxNCwzMzc4Ljg0NzcwNDkzMTUxNDcsNi45NjM1ODA3NTA2NjEzMTY1LDU0LjE0MTk0MDE3NjI1MjQzLDMzMDIuMzczMjUzMTc2NDkxNyw3LjYxMjU3NTE2NzM0OTk3NSw4LjUwNDkyOTYxNjM5NTk3NSw3OS45MzkxNzI4MDkxNzk5LDEwODEyNDkuNzE3Mjg5NDQzNiw1NTAxNy4wNDY5NjU3OTgzOCw4MS45MjM0MDcxNTkxMzM3NgorMTksU2F0IDEyIEZlYiAxMSwxNTYwLjY3Njc4ODU4ODkzMTUsMjEuODk0OTc3NzAzNDM3OTI0LDQ0NDEuMzczMDQ5MDc4ODA4LDE2OTMuNDUyMTcwMTgzMDY0NSwxMDg5Ny4wMjQ4MDY0MTU2MjYsNzA1MC4xNjA3MDIzNjU0MzE1LDM3MzE2LjA5ODM2NDYwNTY5LDI1MDE2LjQ3MzI2NDYzNjgyNSwyODU0OS40NTM4ODA3NTcwMTMsMTk2NjY5LjI1NTAxNzgxMDI0LDEwODg0Mi40MDAzMzQwMTQyMSwyNDk3NjQuNTg2MjM1NTU0MTMsMTE5NC42MjAyNzQxMDA5NTMzLDI0MDQuNjc1NjMyMzg3ODgsNTM5NC4wNDk1ODA5OTU3NzEsMjI4NTA3LjE1NzMzNTQyNzQ3LDUyNjIuNDYzMjk4NTg2NjgxLDExLjM3NTc5MjE5MTEzMzkwNyw5Mi4xNDY2ODM3MTgxNzE2LDUxMzguNzAyOTQxMTI1Njk3LDEyLjUwNzEzMzQyODM5MDA2OCwxNC4yNDQ5MjUyMjkwMDk5ODUsMTM5LjQxODAwNzI5Mzg2NTM0LDEzMzczNDEuMzg3NTkyMzk0LDcwNTYyLjYwMDk5NDE4MjI0LDExNy42NTY1Nzc0NjYxNTA1NworMjAsU3VuIDEzIEZlYiAxMSwyMjE1Ljk1MzM5NjQ4MDkxNDMsMzUuNTM4OTUyOTA3MzEwNzEsNjQxNC4wNDk1NzA5NTcxNDMsMjQ5NC4wNDM5NTk5ODU0OTUsMTU2ODUuNTIxNzU4NTY4MzEsMTEwNzkuMzY5MDA0MTYzMjIyLDU2MzcwLjQyMDg1MzQ2MzI1LDM3ODk1LjA0NDE4OTU3MTA1NCw0MzAyMS45OTI2MjcwNjE2MywyNjgwODEuNjU3NTgyMTAyNCwxMzk0OTcuMzg5NTYyNTk3MzgsMzQzMDExLjc0MTI5OTM5ODc3LDE5NzcuOTM1MDAyMTAwODQzMSwzOTkwLjM5NDEzMTYyMjU3OCw4Mjc0LjU4NjQ0MTM5ODM1NiwzMTM5MTIuMDQ5MTA3Njc5Niw4MDY4Ljg5Nzg1MjczNTQ5NzUsMTguMTgyNTY3ODAxODg5ODA3LDE1NC4wNjMyNTE1MDUxMTg5Niw3ODY5Ljc3NDc5MDc5NDIyNSwyMC4xMjI5NjU5MDcxMzgxMzgsMjMuNDUwNTc4NTI3MDgyOTE4LDIzOS40NDUzNzU4NzQyMzU4LDE2MTk4MzEuMDgwMjA5MDM5Niw4ODI3Ny4yNTc1OTY4Mjc0NSwxNjUuNzQ5NTY4NjY5ODIwMzIKKzIxLE1vbiAxNCBGZWIgMTEsMzA5Ni41NTkwOTk0MTI0NzA1LDU2Ljg4ODcyNTk5ODQ3NDI3LDkwNTIuNjgzMDgxNjE0MzMsMzYxOS42OTQ2NTUwMzAwMjEsMjIwMjQuNzkwMDEzMzQ0NjE2LDE3MjE5LjU0NTAxNzA3OTU1Miw4MzkzOS4zODcwOTgwMTU3Nyw1NjYyNi4wOTg2Njk5OTQxMzUsNjM4OTUuNDg2MjUzOTE1MTksMzU5MDY1LjM5NjkwMTY1ODA0LDE3NDE2NC40ODM5NDM1NTEzNyw0NjIyMzQuMTUyMjA4NzUwNSwzMjI5LjcyMTA3OTY1OTYwNjQsNjUzMy4wMDgwMDI4NjkzMTU1LDEyNTQ1LjQwMjgyNzM3NDQ2OCw0MjM4NDguNDU2MTE0OTQ0NzcsMTIyMzAuNzM0OTg0OTE0MTA1LDI4LjYyNjcwNzc0ODUyNDcyLDI1NC41NDc3OTM2NzU1MDUzNSwxMTkwOS43MzU1MDczMjc3ODcsMzEuOTE3MTM3NjAwMTY5MzMsMzguMTY4OTQ2ODY2MjM2NzQ1LDQwNi43ODI0ODUyNzQwNDI3LDE5MTgwOTIuNzA3Mzc0OTU3OSwxMDc1NjIuNzA3NTkzMDU5MzcsMjI5LjI1NzAwNjIyNjE1OQorMjIsVHVlIDE1IEZlYiAxMSw0MjYyLjU0OTczMTQ0Mzc0Miw4OS45OTk3ODA2MzYzNDMzOSwxMjQ3Ni4zNjU2OTEwMDA1NDUsNTE4Mi40NDQ0MDY4OTIzNSwzMDEzMS4xOTY0NjY0NDY2MSwyNjQ5Ni4zODUzOTI1NTk1NzYsMTIzMzAxLjA3ODQyNjMzNDM0LDgzNTQ4LjgxODc5Nzk2ODQ0LDkzNTk4LjE0MjAyMDM0MTIxLDQ3MTk1Ni4yOTE3OTIwNzc2NSwyMTE1OTcuMzM3NzEwOTY3Miw2MTAyMzkuMTU4MjAwNTk2OSw1MjA0LjI1NDc1NDkwNTg3NywxMDU1OC43NDcxNTYxMTIwNjcsMTg4MjUuMzQ0NTgwNTMzMTcyLDU2MTgwMS43OTEwMjQ1MjQ2LDE4MzU2Ljc5OTU2MTgyNzU3LDQ0LjUxNTM2NDIyNzE5Njg2LDQxNS44MzgxNDM1NjczNDA4NiwxNzgzNS43OTM3MDc5MTk5Myw1MC4wMjc2NzI1MTY0NjgxOCw2MS40ODk0MTYzMDkwMzAwNiw2ODIuNzQyMTU1MDgwOTU3NywyMjE5MTQyLjQwNjY2MDQyMywxMjc1ODUuMzg4Mzg0ODcyMDQsMzExLjM5NTYyNzI2NTQ1NTEKKzIzLFdlZCAxNiBGZWIgMTEsNTc3OS41MTI3MzUwNDIzMTksMTQwLjY2NzE0MDMzMTI4OTc3LDE2NzQ5LjUyMTU4MjY2NzcwNSw3MzE0LjY0MDk5NTQzNTAxMiw0MDA1NC40NDQ1NjYzOTYyNSw0MDMxNy44MDgwODQ5MDg3MywxNzg0MDkuMDI5OTczOTcxLDEyMTU2NC45NjE2MzE0MjI1NywxMzUwMzYuNTc0NzI5MTcwMTgsNjA3NTU5LjM3ODYwMTg1MjMsMjUwMDgyLjEyODQ3NDc1NDIyLDc4NzM2MS4wMjM3MTQyMjA0LDgyNjAuOTE5MzQxMjI5NTU5LDE2ODE4LjMzMTU3MDY3OTk4NCwyNzkzOS4wNTU3Njg0MDMyOSw3Mjk1MDcuNzI4NTc2MzA2NywyNzI2Ny40MDkwOTYwMzI4NjUsNjguMzg1NjQ5ODAwMDU5ODgsNjcwLjc4NTAyNTk2MjA0NTMsMjY0MTMuODYzOTUyMTEzLDc3LjQ5MjU5MjgyODc2NzgzLDk3Ljk2Njc0OTEwODQ2NzkyLDExMjkuNjg1MDk1NDc1Mjc4LDI1MDk2MjUuNDE1Mjk2OTkzLDE0NzM5NC4yMzY5MDc3NTU0Myw0MTUuMDc1NzgyNjE5MDMxMjYKKzI0LFRodSAxNyBGZWIgMTEsNzcxMi45NTY0Mjc4MjYxNzUsMjE3LjA2MjgxOTgwMjgyODYsMjE4MzkuMjA5MzA3NzQwNTA4LDEwMTYwLjA5Mzg3NTI1MDMxNSw1MTU4OC43OTY5MDAyNDgzNSw2MDU2NS45MTgzNjI4NjMxNiwyNTM2MzMuMjYyMjMzOTQ3MjMsMTc0MDI4LjUyMzE2NDY4MjYsMTkxMzgzLjE2NjA0MjE5NjA3LDc2NDI2Ni4yNzU2MzI2NjE3LDI4NzczMS43OTc3MDQ0Nzc4NSw5OTAyMzQuNzg3MTY2MTE2OCwxMjg5NS42MjU4NTI5MjY3NTgsMjYzNjIuMDY3MzQ5MzY5MzksNDA5NDkuNjA4NjY0NjkwMjcsOTI1NzE2LjQ3MDc3MDEyMzQsNDAwMzguODYwMTQyNDc0ODYsMTAzLjc1MDY0OTY3Njc3MzgsMTA2Ny43NTg4NzI5OTY4Mzk3LDM4NjI1LjYwODAyMzI5ODM3LDExOC41ODY2ODE1NTg3OTA1LDE1NC4zMTkyNDY4MjU4OTQ3NywxODQxLjgyNTUzOTg3MDI4MjcsMjc3ODA4OS40NzMzMTA4MTMzLDE2NjA5My45MDM5NDQ1NjQ4LDU0Mi40NDM3OTE1MTk1MjA4CisyNSxGcmkgMTggRmViIDExLDEwMTIyLjI3MzkzNjEzNjMsMzMwLjY4MjMxNDMxMzg0MTYsMjc1OTAuMDAxOTk0ODQ1MTA4LDEzODYwLjg1NjkzMjU3NzkwNiw2NDI1MC45MjU3MDkwNDEyNyw4OTcwNy4zNTk3OTU0NDM0LDM1MzI5NC45MzYxMTQyNDM0LDI0NDUwOS41NjU3ODA4MDQ4NywyNjU3MDMuMjkyNDA1NzY4MDYsOTM3NjMyLjYxODM4ODQ1NCwzMjI4NjAuODc0NzY5Nzc3MywxMjExNDM5LjQ2OTQxODc4NjIsMTk3NzguMzI5NTYzNDYxNzU3LDQwNjM3LjExNTAwMzU0NjksNTkxOTQuMDA5MTUxNDk0NywxMTQ1NDQ1LjM0MDc2MjEyNSw1ODA2Mi41Mjc4Mjg4MzI0NCwxNTUuNDc2MDAzODc0ODMyNywxNjc4LjMzOTkzMTE1MDI2Niw1NTY5Ni4zOTU3ODc2MzkxOTQsMTc5LjM0NDgzNDE1MTg3OTc1LDI0MC41NDUxODcyNzU4NTAwNSwyOTYyLjIxOTcwMjI5NjYxNDcsMzAxNjY0OC44MTY3NjU1NDUsMTgzMDAwLjYwMDM4NTk3NDEsNjk0LjU3MjYyODg0NjQ1OTgKKzI2LFNhdCAxOSBGZWIgMTEsMTMwNTQuNjIyNDc4MTM2MzMsNDk3LjYwNzAxMjc2MTE3NCwzMzczMS44NDMwOTk1ODY2MywxODUzOS4xODkxNDg3MjM2OCw3NzM1MS4xNzAxNzIxOTE4LDEzMDg3OC4yMDM5NzIyNjUzOSw0ODA4OTYuNTAwNjQxMjQzNzcsMzM2MzM2LjkxOTEzNjU4MzE2LDM2MDM1Ni40MTc5OTE4MzE4LDExMjA2ODMuOTI0NTg0ODgxOSwzNTQyNjcuMDUwMzU1Mzg5NjYsMTQ0MDM5MS4zMzMyMTcyODM1LDI5NzgwLjY5ODIxMDgyMjY4NCw2MTU4MC4zNDMwOTcxODgzNSw4NDMwMS4zNTEzNjc2MzYzOCwxMzgwMTMwLjcwNDgzMDM2MzQsODMxMDguMDM4ODE2MDgxNiwyMzAuMzEwNzQ2NTMwMjM1NDYsMjYwOC4zMTczNzM3NDgyNDYsNzkxMDUuNDQxOTAyNjc4MTcsMjY4LjMxMTg0NjA0NjQ0Njc2LDM3MS41Njc2ODc0MjI3MzgzLDQ3MDYuOTI3MTQ1MjIxNTE1LDMyMjE0ODcuNzUxMzk3MDA5LDE5NzcxNy44NjEzMjA0OTIyMyw4NzEuMjQ4NjM2NjgwNzAyNworMjcsU3VuIDIwIEZlYiAxMSwxNjUzOC43NzQ0MzIxOTIzNzUsNzM5Ljk4OTU5OTEwNjM3NDgsMzk5MjYuMzIxOTY3NTM0NjEsMjQyNzUuMTEwMzE5NjIzNjg3LDkwMTQwLjkxNzgxMzQ4NTkyLDE4Nzg1My44OTk2NTI4NDY0NSw2MzgwMDguMjYwMjg1NDY3OCw0NTE4MjkuMDQ1ODUxNTU3MDUsNDc2MTU5LjI1OTYzMTkwNzU3LDEzMDQ5NjkuMDM0NTYxNzgyLDM4MTMyNi43NjY1NTA1Njg3LDE2NjUzMjguOTYwOTQ4NDU5Myw0Mzk2Mi4yOTEzODY2NTQ0Niw5MTY0OC4xOTI3NzMzMTM2OCwxMTgxNTMuMzE3NDE2MDYyNDMsMTYxODgyNi4xNjg3NTIwMjkzLDExNzM2My4yMzU1MTM0NTU3NiwzMzcuNTc0MDc4Nzk4NTM5NCw0MDEyLjI1OTk0MjE0MDQxNTcsMTEwNTQxLjU1NDkzMDk4MDY0LDM5Ny41NDA0NTczMTM0OTgyLDU2OS41MjU1NDY4NzUxNDQzLDczOTYuNjkxNTQxNTkxMzM5LDMzOTIzMzQuODg4MjM0MTQ3LDIxMDEyNC40NTYwMzc2Mzg5LDEwNzAuNjc5MjQxMjM0Njc0NQorMjgsTW9uIDIxIEZlYiAxMSwyMDU3OS45MjA4MDM0MjAwMSwxMDg3LjYyNDQ0MDg5NTEzOTMsNDU4MzguNDQ1Nzk5NDM0NTYsMzEwODMuMzY4NTk1ODI4MTUsMTAxOTc1LjIzMzY3NTE3NDg0LDI2NDc5MS4zNTMwNTg3OTA1Niw4MjMwMjIuNDQyOTMyOTUzMSw1OTEyNjcuNzU4MzM5NzY3Nyw2MTE0OTYuMzM1NDI0MzI5OSwxNDgyMDcyLjcxODE5NDkyMzEsNDAzOTI5LjAwMzYzNDU0NDQ0LDE4NzU2NjUuOTE5MTg0NjgyNyw2MzQ3NS4yMDYyMjQ2ODI4MiwxMzM3MDEuNzk4MzEzMjA1NCwxNjI3MzkuMTgzMzM4MTU0NTEsMTg1MDE3Ny44NzE3NTA0MTc5LDE2MzQxNC42NjMxMjkyMDg4Nyw0OTAuMDExNjEwNDYwOTAzNzQsNjExMi4xODA3NzU3MDcwOTQsMTUxNzYyLjQ2NzkyOTg1MzQ1LDU4My44OTAyNjIwNDQxMzI2LDg2Ni45NDIwOTM2MDUxNjUyLDExNDk2Ljc2MDU0OTEyNDMzNiwzNTMxNDE4LjY4NDg0NTcyOCwyMjAzMDguMjI4MTY3ODkyOTYsMTI4OS4wNDc5MDc2MTUyMTkyCisyOSxUdWUgMjIgRmViIDExLDI1MTU3LjM2NTE5Mzg4MDc1NiwxNTc5LjQ2ODYyMTM0NDQ0NCw1MTIwNC4wMDAxNTQ1MjY3MywzODg5Ni44ODkyODQ3MDQ4ODUsMTEyNDIxLjQzMzMzMTMxOTEyLDM2NTY0NS43MDY2MTQ2NjEwMywxMDMwMzE4LjEzMDI5NjgyOTIsNzUxOTM0LjEzMDA0NzEzNjcsNzYxODA2LjA4MDE4NDI2ODMsMTY0NTA2MC4yOTE2MTk5MzQ2LDQyMjMyOC4yOTYxNzc4NDg5NCwyMDYzNzc0Ljg1MTM0NjA3NDgsODkzNTUuMzIzNjYxMDU3NTYsMTkwNjYzLjQ2MTMzMjI5Mzc1LDIxOTg2Ny4wODY1Mzg5NDk2MywyMDY0NDg4LjUxMjY1NTAwNjcsMjI0MTI5LjI1ODY5MTU4NjUsNzA0Ljg4NDAxNTEzMDQ1MDYsOTIyMS41MDk3NzQ2NzM5NCwyMDQzMjYuNzk1MjkwNzI1NzcsODUwLjc2MzQxMDA3MDY2LDEzMTEuMjIyNjg4OTg2ODA4OSwxNzY2Ni4wNzM0ODY1NDg2LDM2NDIzODAuMjc4MTYyODc4LDIyODQ4NS43NDgxNzc3MjQ3NCwxNTIwLjEzODAzOTU2NTU3MzMKKzMwLFdlZCAyMyBGZWIgMTEsMzAyMjYuNDIyMzYyNDE1NzksMjI2NC45NDg0OTU5NDUzMDUsNTU4NjUuMjA5ODY4MTA3MDgsNDc1NjMuMjMzMjkzMzcwMTg0LDEyMTI4My4yOTU4MjYyNTk0LDQ5MzIzMi4yMTg3OTU3NjQ3LDEyNTA0OTAuNTI3NjQzMTY2Nyw5Mjc3NDEuNjU0MzYwMzgwNCw5MTk5MTEuNzQzMjk3OTU4OSwxNzg5MzYwLjk0OTQxMzU2MTcsNDM2OTg5LjU1NzQ1NDc2NzY0LDIyMjU2NDQuOTQ3OTQ1MDQ5NSwxMjIyMDIuMzUwODU3NTI2MzgsMjY0ODk0LjM5OTk3NTQ2MTU0LDI5MDcyMS42MDM2MDgwMDE2NiwyMjU1MTEyLjA5ODEyMTI0MzUsMzAyMzkzLjE2MjU4MzQ1MjEsMTAwNS40MTM2MDE4OTgxNjcxLDEzNzc2LjA1NjAxODk5NjY4OSwyNjkxOTUuODg1ODc1OTYwMDYsMTIzMC41MTY3MzgwMjY1OTQsMTk3MS4xODEzMDg4NjYzNjksMjY4MTYuMTIyNTIxNzQwNzY2LDM3Mjk0MDUuMTM2OTk3MzM3NSwyMzQ5MzMuMTk3MzA3NDgzNSwxNzU1LjQ4NjQwMTk0OTExMjkKKzMxLFRodSAyNCBGZWIgMTEsMzU3MjMuNjUyODgyMTM2NDEsMzIwNC43MjkzNTQxODkzNTg3LDU5NzY5LjEwNTg0NzQ2MjEzLDU2ODU1Ljk5MDYwOTkxMzEyLDEyODU2MC4wMTk0OTY2ODI2MSw2NDgwNDcuNTA5MzkwODgzOCwxNDcxOTE1LjAxMDMxOTU3MjQsMTEwOTkyMC4wNzkyNDM1NjM2LDEwNzczMTYuNTY5MTI2NTE1NiwxOTEyOTE1LjgyMzk1NjQ5NCw0NDg0NjMuNjA1NzA3NjU0NywyMzYwNTA2LjQxMzk1MTcyOCwxNjE4MTcuMTg5ODY1NTUwMDgsMzU3MzM5Ljc5NjY4NzMyNSwzNzUzMTUuNzc3NzE3MjgxOSwyNDE4ODI1LjQ0MDI5ODYzMzYsNDAwNjYwLjk4NDY5OTAwNjgsMTQyMi43NTk4NTU5OTEyNjMsMjAzNzMuMDk5NTEyNzExNTAyLDM0NjI1Ni4wNzM4MTQyNjA4LDE3NjcuODc3OTIwODMwMTI2NiwyOTQ2LjUwMjAzNTgzNzI0NCw0MDE3NS40NDk4NjMwNDc4NTYsMzc5NjY0My4wODk4MTA2NDg1LDIzOTkzNy42ODg1OTc4NjkyMiwxOTg1LjM5OTk3ODc1NzAxNjUKKzMyLEZyaSAyNSBGZWIgMTEsNDE1NzIuNjc3MTYzNDU2NjYsNDQ3MC4zMzc3NDQwOTY0NjgsNjI5NDIuMjUzNTAwNzQ4MjY2LDY2NDk3LjkyNjE0NjY1NTU1LDEzNDM3OS4wNTI1ODc3OTQ0Niw4MjcxOTEuNzM4MTEyNDQ1NSwxNjgzMTU3LjI5NzU1OTkxNSwxMjg4NzEyLjEyNDc4NTM1OCwxMjI2MDAwLjA5MzY4MDE0NjYsMjAxNTc2My40MTUzMzk4MTIyLDQ1NzMwMy41OTQzNDA2MjM3LDI0Njk5MDkuMTMzMzczNTc1LDIwNjk0OC4zNzg3MjMyMDc1Nyw0NjY2NjMuODE3NDk0NzEwODUsNDcxOTg2LjEyMzkyOTcwMjI3LDI1NTUzNTIuNjAyMTE0MDc5LDUyMDI5Ni41MjU5OTIxMTg2LDE5OTguNzEzNDk2ODIzNzIxNSwyOTgxNy44MDM3NzYwNTg0NTYsNDMzODk3LjY4NDExMDc3NTMsMjUyNC43NjE3MDA1MDcyOCw0MzgxLjE5OTIzNjk4OTg1NSw1OTM0Ny43MjYyOTI2NzA0MiwzODQ3ODgwLjc3ODI5OTcxLDI0Mzc2OC4xOTQ5NDY5NjU2NywyMjAwLjY0MTU1OTQ3Mjg5CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0RlbW9ncmFwaGljU0VJUkRpc2Vhc2VfRkRfUmVmZXJlbmNlL0ZsdS9tZW4vU18yLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvRGVtb2dyYXBoaWNTRUlSRGlzZWFzZV9GRF9SZWZlcmVuY2UvRmx1L21lbi9TXzIuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM0MmIzOTgKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0RlbW9ncmFwaGljU0VJUkRpc2Vhc2VfRkRfUmVmZXJlbmNlL0ZsdS9tZW4vU18yLmNzdgpAQCAtMCwwICsxLDMzIEBACitpdGVyYXRpb24sdGltZSxFRy1GUkctRzIxMDAwMSxFRy1GUkctRzIxMDAwMixFRy1GUkctRzIxMDAwMyxFRy1GUkctRzIxMDAwNCxFRy1GUkctRzIxMDAwNSxFRy1MT0UtRzI0MDAwMSxFRy1MT0UtRzI0MDAwMixFRy1MT0UtRzI0MDAwMyxFRy1MT0UtRzI0MDAwNCxFRy1MT0UtRzI0MDAwNSxFRy1MT0UtRzI0MDAwNixFRy1MT0UtRzI0MDAwNyxFRy1MT0UtRzI0MDAwOCxFRy1MT0UtRzI0MDAwOSxFRy1VUEUtRzI5MDAwMSxFRy1VUEUtRzI5MDAwMixFRy1VUEUtRzI5MDAwMyxFRy1VUEUtRzI5MDAwNCxFRy1VUEUtRzI5MDAwNSxFRy1VUEUtRzI5MDAwNixFRy1VUEUtRzI5MDAwNyxFRy1VUEUtRzI5MDAwOCxFRy1VUkctRzMwMDAwMSxFRy1VUkctRzMwMDAwMixFRy1VUkctRzMwMDAwMyxFRy1VUkctRzMwMDAwNAorMSxUdWUgMjUgSmFuIDExLDE0NzgwNi42ODU0OTI5OTY1NiwxMzE5NjkuNzg5NzcwMDcwODcsNzY4MTcuMTU5MjQ1MTE0NzcsMTU4ODAxLjI0NTk3NTc0MjUyLDE2MDA3MC4wNjEwMzM1MDM1LDI1ODc1OTUuMjgxMDg5MDY5MywyODExOTM3LjExMTI2ODM0OTUsMjMwNDY1MS4wMjU5NTAyNDk4LDIwMDE4MjEuOTg5Mzg3MDU2OCwyNTAyNzgxLjUzMTQwNDkxMTUsNTA4MjQxLjMyODIzNzYyMjE2LDI5NzEwODQuOTg5NzAzNjE0Nyw1ODc5OTQuODQ1MTA5NTAxNiwxNTYwODk5Ljk5MDgyMDg0MDIsMTM5NTE2MC4wODQ2ODcxNDA4LDMyMDI3MTIuMTEyNTAwMzc0LDIzMjAyMzguNDY2NTIxNjY5LDY1MjUzNy4xMDc3OTMwNTU5LDE4OTkxNzkuMjA5MTY1NjM2NSwxMjY0ODAwLjIzMjM4MDgwNiwxODY4NTA2Ljc0NDcyMzUyMTQsMjA3NDkyOS4zNzk4NTI5NDY0LDE4NDU4MzcuODgzNTE1ODczMiw0MjA3NTQ3LjUxNzYwNDQ5NDUsMjY4MzIyLjU3NjY4MDA1ODIsMzM1OS42Mjk5MjE5OTA4NDk3CisyLFdlZCAyNiBKYW4gMTEsMTQ3ODA2LjgzMzI5OTY4MjA3LDEzMTk2OS45MjE3Mzk4NjA2NCw3NjgxNy4yMzYwNjIyNzQwMiwxNTg4MDEuNDA0Nzc2OTg4NSwxNjAwNzAuMjIxMTAzNTY0NTUsMjU4NzU5Ny44Njg2ODQzNTA1LDI4MTE5MzkuOTIzMjA1NDYxLDIzMDQ2NTMuMzMwNjAxMjc2LDIwMDE4MjMuOTkxMjA5MDQ2MiwyNTAxMTcyLjgwODAwNDU2OSw1MDY5MjEuODM4MDQwNTA2MSwyOTY5MzQzLjI5NjQ1Nzk2MSw1ODc5OTUuNDMzMTA0MzQ2NywxNTYwOTAxLjU1MTcyMDgzMSwxMzk1MTYxLjQ3OTg0NzIyNTQsMzIwMTAzNC4wMzcxNTYwMzI0LDIzMjAyNDAuNzg2NzYwMTM1Niw2NTI1MzcuNzYwMzMwMTYzOCwxODk5MTgxLjEwODM0NDg0NTcsMTI2NDgwMS40OTcxODEwMzg0LDE4Njg1MDguNjEzMjMwMjY2MSwyMDc0OTMxLjQ1NDc4MjMyNjIsMTg0NTgzOS43MjkzNTM3NTY2LDQxNjA3ODguNDIzNjcwMTYzLDI2NzIyMy4wMzk5MTgxOTI3LDMzNTkuNjMzMjgxNjIwNzcyCiszLFRodSAyNyBKYW4gMTEsMTQ3ODA2Ljk4MTEwNjUxNTM2LDEzMTk3MC4wNTM3MDk3ODIzNyw3NjgxNy4zMTI4Nzk1MTAxLDE1ODgwMS41NjM1NzgzOTMyOCwxNjAwNzAuMzgxMTczNzg1NjYsMjU4NzYwMC40NTYyODIyMTk0LDI4MTE5NDIuNzM1MTQ1Mzg0LDIzMDQ2NTUuNjM1MjU0NjA2NiwyMDAxODI1Ljk5MzAzMzAzNzUsMjUwMDIwOS4zMjMwNzM1NTQzLDUwNjEzMi41MDcwMTQxMDU3LDI5NjgzMDAuMjE5Njg2MTUsNTg3OTk2LjAyMTA5OTc3OTksMTU2MDkwMy4xMTI2MjIzODI4LDEzOTUxNjIuODc1MDA4NzA1MywzMjAwMDI5LjEzMzY5ODg3NywyMzIwMjQzLjEwNzAwMDkyMjMsNjUyNTM4LjQxMjg2NzkyNDEsMTg5OTE4My4wMDc1MjU5NTQyLDEyNjQ4MDIuNzYxOTgyNTM1NSwxODY4NTEwLjQ4MTczODg3OTMsMjA3NDkzMy41Mjk3MTM3ODEsMTg0NTg0MS41NzUxOTM0ODYsNDEzMzA1MC4xMTc4MTIwNDI2LDI2NjU2Ni4yMTU1MzYzODg4LDMzNTkuNjM2NjQxMjU0MDUzMworNCxGcmkgMjggSmFuIDExLDE0NzgwNy4xMjg5MTM0OTY0OCwxMzE5NzAuMTg1Njc5ODM2MDgsNzY4MTcuMzg5Njk2ODIyOTcsMTU4ODAxLjcyMjM3OTk1Njg2LDE2MDA3MC41NDEyNDQxNjY4NCwyNTg3NjAzLjA0Mzg4MjY3NTUsMjgxMTk0NS41NDcwODgxMTksMjMwNDY1Ny45Mzk5MTAyNDIsMjAwMTgyNy45OTQ4NTkwMzA1LDI0OTk2MzIuNTU3NTYxODI4Myw1MDU2NTkuOTMyMjg4MzE3NCwyOTY3Njc1Ljg5MTk3NDQ0LDU4Nzk5Ni42MDkwOTU4MDEsMTU2MDkwNC42NzM1MjU0OTU1LDEzOTUxNjQuMjcwMTcxNTgwNCwzMTk5NDI3Ljc2ODA2Njc2ODUsMjMyMDI0NS40MjcyNDQwMjk1LDY1MjUzOS4wNjU0MDYzMzY5LDE4OTkxODQuOTA2NzA4OTYxNiwxMjY0ODA0LjAyNjc4NTI5NzYsMTg2ODUxMi4zNTAyNDkzNjEsMjA3NDkzNS42MDQ2NDczMTA3LDE4NDU4NDMuNDIxMDM1MDYxMSw0MTE2NTIyLjY5NjM1MTc3MiwyNjYxNzMuMjY2MTA3OTEzMzQsMzM1OS42NDAwMDA4OTA2OTQ0Cis1LFNhdCAyOSBKYW4gMTEsMTQ3ODA3LjI3NjcyMDYyNTM4LDEzMTk3MC4zMTc2NTAwMjE3NSw3NjgxNy40NjY1MTQyMTI2NiwxNTg4MDEuODgxMTgxNjc5MjMsMTYwMDcwLjcwMTMxNDcwODEsMjU4NzYwNS42MzE0ODU3MTkyLDI4MTE5NDguMzU5MDMzNjY2LDIzMDQ2NjAuMjQ0NTY4MTgxNywyMDAxODI5Ljk5NjY4NzAyNTMsMjQ5OTI4Ny45MDY5ODEyMDA0LDUwNTM3Ny4xMjM5MDk1NTcwNiwyOTY3MzAyLjkxNzUwNDUwMiw1ODc5OTcuMTk3MDkyNDEwMSwxNTYwOTA2LjIzNDQzMDE2OSwxMzk1MTY1LjY2NTMzNTg1MDYsMzE5OTA2OC42Mzk2MjI4NjY2LDIzMjAyNDcuNzQ3NDg5NDU2Niw2NTI1MzkuNzE3OTQ1NDAyNCwxODk5MTg2LjgwNTg5Mzg2ODIsMTI2NDgwNS4yOTE1ODkzMjQ0LDE4Njg1MTQuMjE4NzYxNzExMSwyMDc0OTM3LjY3OTU4MjkxNTMsMTg0NTg0NS4yNjY4Nzg0ODIyLDQxMDY2NTcuMDcxNTgyNDA1LDI2NTkzOC4xNzQ4OTUwMzEzLDMzNTkuNjQzMzYwNTMwNjk1Cis2LFN1biAzMCBKYW4gMTEsMTQ3Nzk3LjY0NzEyODI4ODI2LDEzMTk3MC40MDgyNTg2NDM1Myw3Njc5NS4wNTY4OTA1OTg5NSwxNTg3OTMuNjI4ODYxNDY5ODMsMTYwMDE1LjczMTY3NTcyNDM4LDI1ODc1ODYuNjE4MzU1MzU1LDI4MTE3OTguMzMzODE3NDE0NSwyMzA0NTYxLjI5Mjc1Nzk0MTQsMjAwMTcxMy4wNTQwMzU3NzIzLDI0OTc2MTguNzU3ODMzMjY3LDUwNDE5My44NzYzMzg5ODQ2NCwyOTY1MzExLjk4NjY0MTgzOTYsNTg3OTk1Ljk5NDA2ODM1NjksMTU2MDkwNC4yNDc0MDkyOTA2LDEzOTUxNDYuODM0MTA5MDk4NywzMTk3MjE1Ljk4MzQ2OTg4MywyMzIwMjMwLjIwNzA1NTQzNSw2NTI1NDAuMzQ1Nzg3Njk0OCwxODk5MTg4LjU3MzU3MTcwNSwxMjY0Nzg3LjA3OTI3OTU5NjUsMTg2ODUxNi4wNjE0MDU1MzgsMjA3NDkzOS43MjkxMTMwNTIsMTg0NTg0Ni45NjIzNjU1MDAyLDQwODU0MTIuNjE0ODk4MjczNywyNjUwNjYuNjk0ODc3NzA5NTUsMzM1OC44OTUyMDgyNzM1NDczCis3LE1vbiAzMSBKYW4gMTEsMTQ3NzY5LjUxODM0ODU1NDgsMTMxOTcwLjQyMDMwMzY3MzA1LDc2NzMwLjE0MDkwMTk0NzksMTU4NzY5LjQzMDI4NDM1MTk4LDE1OTg1Ni40OTkxODAxNzc0MywyNTg3NTI2LjYyODk4ODU0NSwyODExMzU4LjUwNjM1MDg5MywyMzA0MjcwLjMzODQ1NTAwODMsMjAwMTM3MC41Nzc3Mjc4MDI4LDI0OTMyNjkuODI0MTA1MzA2LDUwMTE3Mi42MzMxNTQ0MDM1LDI5NjAwNzEuMzcxMDY3MjA2LDU4Nzk5MS4zODkzMjEzNCwxNTYwODk1LjUyMTcxNTk2MDcsMTM5NTA4OS42NDIyMzE3OTE1LDMxOTIzNTUuNDAzODE1MDIxLDIzMjAxNzQuOTk5NDE5ODg2Niw2NTI1NDAuOTI2NzUyMDcyNCwxODk5MTkwLjA5MTQ5MTczNDYsMTI2NDczMS45Mjc3NDM3NDcsMTg2ODUxNy44NTQ5NDYyMzkyLDIwNzQ5NDEuNzMwNDE4ODA5NSwxODQ1ODQ4LjM3MjI1ODYxNyw0MDM3OTAzLjcyMTA2NzYxNzYsMjYyODgxLjU3NDA5Njc5LDMzNTYuNzI2MjQwNTkzMzMKKzgsVHVlIDEgRmViIDExLDE0NzcyMC40OTYxMDQ3ODc1NywxMzE5NzAuMzQzMDY0NTI1Myw3NjYxNy4zMzcwMTIwMTQ1NywxNTg3MjcuMTU2NjE0ODM4NjMsMTU5NTc5LjcyODg3MDg1NTY0LDI1ODc0MjAuMTQ4OTY1Mjk5LDI4MTA1OTAuMTM5NDAyODQ1NCwyMzAzNzYxLjY5OTAzNDA2NDUsMjAwMDc3Mi40MjkwNTYwNDEyLDI0ODU4NjcuMjA4MzAwMjc1Nyw0OTYwNzcuODk1NDAzNDM1MTYsMjk1MTEzMS41NzEzNzY2NDEsNTg3OTgyLjkxOTAyODgzMTUsMTU2MDg3OS4xMzg0NTE3OTExLDEzOTQ5ODguOTQwNTIwOTc5LDMxODQwNjcuNDY5Mzc1MzIzLDIzMjAwNzcuMDY3MTI1NzIsNjUyNTQxLjQ1NDQ4MDUyMzUsMTg5OTE5MS4zMjU2MTAxNDMxLDEyNjQ2MzQuODc5MjkxMzIyOCwxODY4NTE5LjU5MjcyMzgzLDIwNzQ5NDMuNjc2OTU5MzU3NSwxODQ1ODQ5LjQ1NzU4NDg1LDM5NjA1OTQuODgxMzA0NjY1LDI1OTIyMC45MDEzNzM5NzY4LDMzNTIuOTU1Njc4MTAwMjczCis5LFdlZCAyIEZlYiAxMSwxNDc2NTMuOTg4Mjk0NzUxNSwxMzE5NzAuMTkwMzg2NDE3NzMsNzY0NjQuNjY0MzAwMDQ3NDEsMTU4NjY5LjY2OTQwNzgyOTksMTU5MjA1LjAzNDk0OTY1NTMyLDI1ODcyNzQuNDc2NjMwNzIxMiwyODA5NTQ1LjIwMzA0NzI0NTMsMjMwMzA2OS43NzQ5MDg1NjgsMTk5OTk1OS4wNjY1ODg4NDY3LDI0NzU5MjYuNDg4MTIwMTExLDQ4OTMwNi4xODY0OTgwNjIzNCwyOTM5MTE2LjU2MTE3NDI1MTYsNTg3OTcxLjE4MzExNjgxMjUsMTU2MDg1Ni4yODU5MTA1MTUzLDEzOTQ4NTEuNTc1ODQ0MzAzNSwzMTcyOTI2LjQ0OTcyMjU2ODUsMjMxOTk0My4xMzA0NjU4MDEzLDY1MjU0MS45MzcyNjcyMjc5LDE4OTkxOTIuMzE5OTcyNDE2OSwxMjY0NTAyLjUyNzk3NDEyMDMsMTg2ODUyMS4yODM0MjYzOTM4LDIwNzQ5NDUuNTc3MjY3MzM5MiwxODQ1ODUwLjI2ODY3MjQ2MjgsMzg1OTkzNS4wNTA0ODUyNzk0LDI1NDM4NC4yOTk4NzgzOTM4MiwzMzQ3Ljg1MDAzMTE3NjY2NTcKKzEwLFRodSAzIEZlYiAxMSwxNDc1NzAuMzc1OTcxODgzNDUsMTMxOTY5Ljg5MDQ1NjQzMDg4LDc2MjY3LjgwMjc4OTcxNzI0LDE1ODU5NS42MjgzNDQ3NiwxNTg3MjEuNTA1ODAyOTgxMzgsMjU4NzA3My4zNDg1MTk2OTYsMjgwODE2Ni44MjM3NzA5MTksMjMwMjE1NS43NTE2MDg2NjEsMTk5ODg4OC41OTQxMzk5NzkyLDI0NjM2OTMuMDg3NzQ0MzYzNiw0ODExNDYuMzAzMzE0NjMzMjYsMjkyNDI1MS4wNzE2MDQ0MTQsNTg3OTUxLjk0MDkwMzM5MTksMTU2MDgxOC40MDczNjI1Nzk0LDEzOTQ2NjguMDI3MjA5OTk3NiwzMTU5MTY0LjkxNjE1MTk4OTMsMjMxOTc2NC4wMjM0MTYwOTA4LDY1MjU0Mi4zMzk2ODM5ODI5LDE4OTkxOTIuNzQ2ODQ1ODgwMywxMjY0MzI1Ljk1OTc4MTY1ODgsMTg2ODUyMi44ODczMzUwNTQ2LDIwNzQ5NDcuMzg0MTU1NTAzMiwxODQ1ODUwLjI4NjA3NTM4MzIsMzc0MjQzNC4wNDg1MTQwNTY1LDI0ODYyNS4xODIxOTU2MjQwNSwzMzQxLjQzOTg5NTQyNzUwNgorMTEsRnJpIDQgRmViIDExLDE0NzQ1Ny4zNjc2ODQ5Njg5MiwxMzE5NjkuMTU2ODkyOTI5NzUsNzU5ODEuODY3OTc0NDIyNTQsMTU4NDg5LjE3NTc1NTA4ODk3LDE1ODAxOC4xMTUzNjE4NjAwNSwyNTg2NzM1LjA5MDQ0MTQzNCwyODA2MDYzLjA0NzcyNzc3MTYsMjMwMDc1Ni4zMTUzODI3MDM3LDE5OTcyNjMuNTAzNDQ0MzA1MiwyNDQ3OTE4LjcwMzMyODYwNyw0NzEwNTEuNzIwODI3OTYyNzQsMjkwNDc5Ny43NTUxNzQ3MTcsNTg3OTA5LjE3ODQwMjgxMDksMTU2MDczMy4yNzk2MzExNzU4LDEzOTQzODAuMDUzNjA0MjI0LDMxNDEyNTUuMDk4OTIzMzEsMjMxOTQ4My4xNDIwODQxMjczLDY1MjU0Mi41MTQ3MjMzMTEyLDE4OTkxOTEuMzc4MDE4MDg3MiwxMjY0MDQ5LjkwMzk5MDU2MTQsMTg2ODUyNC4yNDIxMjc2MDIyLDIwNzQ5NDguOTEyMDUzMzU2LDE4NDU4NDcuNjQyNTgxNzY0NiwzNjA1NjY3Ljg2ODg0NTA2MDUsMjQxNjY4LjYxOTExMzI4MzMyLDMzMzIuNzgxMDcxOTI0NzIzCisxMixTYXQgNSBGZWIgMTEsMTQ3Mjg3LjU3NzgwODQ2NjksMTMxOTY3LjQ1ODc1MDMyNjg2LDc1NTE1LjgyMzM2MjgxMDg0LDE1ODMxNy4yNDk0NDkwNTQxNiwxNTY4NzAuMTAyNDU5ODY0NTUsMjU4NjEwMi40MjAwODc0NDk3LDI4MDI0NTAuNjIyNDk2MDA5LDIyOTgzNDUuODQ0MjA5NTkwNSwxOTk0NDg3LjQ3MjAzMjk1MjEsMjQyNTU3Ny44ODc5NTM4MzgsNDU3NTQ0LjIwOTA4MTMxOTQ1LDI4NzY3MDYuMzExMDQ2MjI2LDU4NzgxMy41NDk3ODM4ODI3LDE1NjA1NDEuODgxMzcyMTYwMywxMzkzODcyLjU2NjEzMDIwNDgsMzExNTU3NS43MjQyNDk1MDIsMjMxODk4OC40ODIwNTY1NjgsNjUyNTQyLjE4ODMyODkxNjksMTg5OTE4NS45NjU2MzMwNDM4LDEyNjM1NjQuOTczMTUyMjQsMTg2ODUyNS4wNDYwNDkwMjUsMjA3NDk0OS44MTg0NzE3MzQ0LDE4NDU4MzguOTUwOTI1Nzg4MSwzNDM3NDk5LjkxNTM1OTUxNzYsMjMyNjYzLjUyOTk2MDM1ODc1LDMzMTkuNzg3NDExMzYxNjk5CisxMyxTdW4gNiBGZWIgMTEsMTQ3MDI1LjA3NjkxMTg1NDk3LDEzMTk2NC4xMTgyNDYyOTM3Nyw3NDc1NS40ODYwOTc3NDExNCwxNTgwMzYuNTQwNjYwODU4OSwxNTQ5OTYuMzk2NTM1OTg0MjQsMjU4NDk3Mi44MTI0MTI1Mzk1LDI3OTYzMTUuNTU1ODE4MDE0MywyMjk0MjQzLjIxNzgzNjE0NjIsMTk4OTc4Ny45MDg5MjAxMjYzLDIzOTI3MjQuNjM5MDU3NzU5LDQzODgzNi42MjkwMjg0OTQsMjgzNDc0NC43Mjk4Mjc0MjE3LDU4NzYyNy43ODc1OTExODI0LDE1NjAxNjkuMjUwMTI3MzU3NywxMzkyOTk2LjM4ODUzMjA5ODgsMzA3NzQwMy4xNTIwMjA0ODQsMjMxODEzNC43MzIxNTQyODEzLDY1MjU0MS4wMTExNzQ5MjcsMTg5OTE3My42NTMyNTM5NDAyLDEyNjI3MjkuMzM1ODIxNjcxNiwxODY4NTI0LjkxNDc3NjQ2NDIsMjA3NDk0OS42NjgwNDI5NDk0LDE4NDU4MTkuOTE4MTM0OTY3MywzMjIzNTcyLjAzNTQ4MzUxMiwyMjA2MDcuMTAwMTg2MjI3MjcsMzI5OS43NzQxMDc3NTM0NDEKKzE0LE1vbiA3IEZlYiAxMSwxNDY2MzQuMzA3Mjg3MTE4NzUsMTMxOTU4LjM5Mjk5Njg1NTcyLDczNTkyLjcyMTQxNzAzMTEyLDE1NzYwMi4zNDg2MzMwNTM5LDE1MjEzMy40MDc4MjUyMzE3OCwyNTgzMTI3LjUwODQyNjI5NjUsMjc4NjU5OC44MzQ3MzAxMjY0LDIyODc3MzQuMDIyNDQ4NjAxLDE5ODIzNTkuMzE0NjI0ODIzOSwyMzQ1Njk2LjY3MjI0MzI1Myw0MTM2ODYuOTAyOTQzNzQ2MDcsMjc3NDA2OC42ODMzNDU1NjA1LDU4NzMxMC40NDA2NTU0MjAzLDE1NTk1MzEuNzg2NzE1NDAxLDEzOTE1OTIuODk5MTQ0Nzc5NywzMDIyMjk2LjAwOTY2ODEzNDYsMjMxNjc2Ny4yODIwOTg0MDQsNjUyNTM4LjYwNzA4OTEyNjIsMTg5OTE1MS4yMjQ1ODAxNDA4LDEyNjEzOTIuMzg4MTY4NjE0LDE4Njg1MjMuNDMxODA1OTU2LDIwNzQ5NDcuOTc3MTg4MTY3OSwxODQ1Nzg1LjU2OTYzMzU4ODQsMjk1Njg5NC43NTU1NTkyMjA0LDIwNDkxMC4wNjc5NzM4MjkxLDMyNzAuMTg1MjU0MTY0MDQ0CisxNSxUdWUgOCBGZWIgMTEsMTQ2MDgyLjI3OTkxOTY4MjcsMTMxOTQ5LjMzMjc4MjEyODMsNzE5MjkuNzExMTQ4ODQ5NCwxNTY5NjguMzY1NDg3Njk0MjIsMTQ4MDQ4Ljg4MjM3MDcwNDAzLDI1ODAyOTguMzgxMjM3NzY1LDI3NzIxMzMuMjYzNjM0NjMxLDIyNzgwMjMuMDYyODk4NDMsMTk3MTMyMC4yMTUxNzM5NTUzLDIyODE1OTMuMDEwNDIyNTYzLDM4MTg0NC4yMDI2NTM0MDgzNCwyNjkwODAyLjUxNzA1MzYwNzQsNTg2ODA1LjI1NDAxMDI3MDgsMTU1ODUxNS4yMzQ1OTUwMjYsMTM4OTQ3OC44MDE5ODIyODM0LDI5NDY2MDMuODY0ODI3MjQzLDIzMTQ3MDcuNjM5NjE5NjUxLDY1MjUzNC41MTU4NDM4ODI1LDE4OTkxMTQuMTcwMDU3NDQzLDEyNTkzODAuOTYwMjUxMTk3NSwxODY4NTIwLjA3NjAxNDU0MDQsMjA3NDk0NC4wOTA1NjgwNTU2LDE4NDU3MjguMzQzMzgwMzg0NiwyNjQyMzgwLjc3MTQyMzAyMDQsMTg1Njg0LjQ0MDY5MTgyNDU3LDMyMjguNzgzNTg0NDIyNzQ3CisxNixXZWQgOSBGZWIgMTEsMTQ1MzMwLjk3NTA3NDg5NjE1LDEzMTkzNS4zMzI0MTA0NDksNjk2NTAuOTQyNTY3ODM1ODEsMTU2MDczLjQxNTIxNDAxODY2LDE0MjQ3OC42OTMzMTc0ODExNCwyNTc2MDUwLjg1MTY4NzEsMjc1MTIzNy4yNjExNTEzMDM1LDIyNjM5NTIuMTgyOTYzNjY2NSwxOTU1NDEyLjA1Mzg1NjUzMjMsMjE5NzY5OC45OTU5NTIyMDMsMzQzOTA2Ljg5MzA4NTQwNjE2LDI1ODEyMjQuMjY4MDk1NTQxMyw1ODYwMTEuODE5MDI0NzQzNCwxNTU2OTE0LjQwMDc2NTk0MjIsMTM4NjM3NS43NDU1ODI1MTcsMjg0NjcxMi41NDEzMzU4MjY3LDIzMTE2ODUuMjIzNzkwNTQ4Myw2NTI1MjcuOTkyNzMyODI3MiwxODk5MDU0LjIxMTA2OTI2MTIsMTI1NjQzMy42MDM4MjAzNTU4LDE4Njg1MTMuOTg0MTY3NTEzNywyMDc0OTM2LjgzNzM5ODM5ODcsMTg0NTYzMy40NjY5MjkwMzI1LDIyOTQ0NjQuNzEzODgxMTc2LDE2MzYzMy43NjM5MDU5NDg5MywzMTczLjA5NTQ5NDQ3ODUxNAorMTcsVGh1IDEwIEZlYiAxMSwxNDQzMjYuMDMyNDA3NDU1ODIsMTMxOTEzLjUzMDI2MjE3NDI2LDY2NTkyLjgxMzQzMTA3MTQ1LDE1NDgyMi42OTg5OTQwODE2LDEzNTA2Mi41NjI4NDMwMjAyMiwyNTY5NjI3Ljc4NTc1MTIyNSwyNzIxMTc0Ljk0MTc2NzY2NywyMjQzNjIxLjE4MDI4MTM3OSwxOTMyNTk3LjI3MDgwMTA2NzQsMjA5MDY2Ny41MTA1MzYxNzYyLDMwMTAzMS45MTgyODQwMzAzNCwyNDQwNzExLjg5NDMwNDg3MjUsNTg0NzQ3LjY0MjE0MDE3OTYsMTU1NDM1NS4wODE5OTY2MzYyLDEzODE4MTQuMjk4NDA5ODM1NywyNzE3OTkyLjYzMzI1MTgyNDQsMjMwNzI0My41MDM3Mzg4MTM2LDY1MjUxNy43MzcyODMyNTE1LDE4OTg5NTYuMDY5MDU4MzMwNywxMjUyMTEwLjc5MzYwNzE0MzcsMTg2ODUwMy42MzI0MDQ2MzYxLDIwNzQ5MjQuMDgyMjQ4MzMyNywxODQ1NDczLjA0NzUyMzQyNywxOTMyMjYxLjU0ODg0MTg4NzksMTM5ODExLjYwMDMyMTU2NDk3LDMwOTkuNjc5ODkxNDQ4MDgxNAorMTgsRnJpIDExIEZlYiAxMSwxNDI5OTEuODI5MDQ5OTMxMSwxMzE4NzkuMjk5MzgwMzgwNiw2MjU1NS42Mzc0MDE0NDQxNDYsMTUzMDc3LjAzMjI5NTYyMDg4LDEyNTM5MC41NjM2MzIwNTAzMywyNTU5ODI5LjQyODc5MTUyMDcsMjY3Nzg0Ny4yODYxMTc5NjgsMjIxNDE1Mi4yNjA5MzU0NzQ3LDE4OTk4MzEuOTQ2MzIxMzE5MywxOTU2Njk1Ljg5Mjk5MjM4MjYsMjU0OTc2Ljg1MTA2MDUyMDgsMjI2NDE5OS4wNTkwMDk2MTIsNTgyNzE3Ljg0OTE3MzUwMDMsMTU1MDIzMC42MTQ0NTE3MjA0LDEzNzUwNjMuMTMzNzk1MzY5NCwyNTU0OTYxLjUwMzUzMjYwMSwyMzAwNjY4LjcyNTc5ODUyNjMsNjUyNTAxLjY3MTU3NzkwMywxODk4Nzk0LjY3NjI0MjUyNzYsMTI0NTcyOS4xNTcyOTA2MjE0LDE4Njg0ODYuNTczNTE2ODU3LDIwNzQ5MDIuMzQyOTI4MDkyNywxODQ1MjAwLjkwOTM4MTE0MTIsMTU3NjcyNy45Njk0OTUyNTksMTE1NTIzLjE4MjU0NzkyMzYxLDMwMDQuMDc3MTI1MjkzOTI1MworMTksU2F0IDEyIEZlYiAxMSwxNDEyMzguMzA4Nzk4NTM4ODcsMTMxODI1LjkxMTAyNzExOTIzLDU3Mzc3LjcyNDkxMTE5Mjk4NSwxNTA2NTguNjMxOTc4Mjk5MjQsMTEzMjAzLjk5MTQyODQyNjU4LDI1NDQ5NjEuNDQyNzA4NTkwNSwyNjE1OTQwLjU1NTEzODg0MSwyMTcxNzQyLjU4Mjc0ODkzODQsMTg1MzE4Ni40NDM2OTMxOTM2LDE3OTMyMTIuNTIxMjk5ODEzLDIwODM0My45NjQxNDQwMzU0MiwyMDQ4ODMzLjExODI4ODkxMjMsNTc5NDk3LjczODQxOTE0NTUsMTU0MzY2Mi4yMjIwMjg2NTYyLDEzNjUxMDkuMTYxNjMzMDI5LDIzNTMzNDYuMzQwOTA4NTgzLDIyOTA5NjQuNzY4MzMzNTk2LDY1MjQ3Ni44MTM5MTE2NTczLDE4OTg1MzIuOTUwODYwMDU1OSwxMjM2MzQ0LjU0OTc2OTYxOTUsMTg2ODQ1OS4yNzM1ODczNzU2LDIwNzQ4NjYuNDkwNjI1MTM0NywxODQ0NzQ3Ljk4ODUwNTY3LDEyNDkwODIuNzY3MjkxMTI4Miw5MjI5Ni4zNDE3NDE3NDkzNSwyODgxLjc3NzI1NTIxMTQ5MgorMjAsU3VuIDEzIEZlYiAxMSwxMzg5NzUuODAxOTUxMTU4MywxMzE3NDQuMTMzODg5MTE3NzcsNTEwNDMuNjg5Mzk5NDEwMTQsMTQ3MzcwLjg0NDUwMTg5NjU2LDk4NjY0Ljc0NzQ2OTQzOTUsMjUyMjgwMC44NTA4MTcwNDcsMjUyOTQ1Ni45NTIzNDczODU3LDIxMTE5NDUuMDk1ODI0OTcsMTc4ODI2My4yMjk3ODE3Njc2LDE2MDEzMTMuNjQxNTM4NDU3LDE2NDQwMS44NDkzMzU1MzE5NywxNzk3NjM1LjIyNzM0Mzg1ODIsNTc0NTEzLjYxNTI3NzY4NjksMTUzMzQ1MC43NTg3NjIzMzQ3LDEzNTA2NjMuNjAyNjA4Nzc3MywyMTEzMjI0LjIzOTY2OTYzODcsMjI3Njg0Ny43MTQ4OTE0ODU0LDY1MjQzOS4xNDg4NjYxNTgsMTg5ODExOC4zNjUxMjc3ODg5LDEyMjI3NjEuNDAzNjA2NDc0OSwxODY4NDE2LjkxNjA5MzgxNzQsMjA3NDgwOS4yNzIyNTI0NzAzLDE4NDQwMTQuMzY0ODgxODkzNCw5NjczNjAuNTg3NDAxNzA3LDcxNjUyLjAxNjMxNjM0MTI3LDI3MjkuNjU1MDM4MTczODQxNgorMjEsTW9uIDE0IEZlYiAxMSwxMzYxMjkuMTEwNTUyMDkyMzcsMTMxNjIxLjM1MjkyNjk1MjE1LDQzNzY4LjQ0NTQ3Njk4NzA5LDE0MzAyMi40NTk5MTM5ODAzNiw4MjUyMS43MTYzNjIzODQ1MywyNDkwNDkxLjY5NzU3MDkyODQsMjQxMjQwMS44MzY3NDYyNCwyMDMwMDE5Ljc0NDY4NTg3NjIsMTcwMDc0Ni4zMTYzODE2NTU5LDEzODc0NjUuNjk3NzgyOTA0OCwxMjYxOTguMDQxMTk2OTQ4MTgsMTUyMTgxMi42NDk5NjQzNzMsNTY2OTk5Ljc0MzU0NzczNTIsMTUxNzk3MC4xNTU1Njk2NzYzLDEzMzAxNDMuMTEyOTE1NjcxLDE4NDE0ODUuNjgyNzI2OTY3MSwyMjU2NzA2LjM1NTQyMDU0OTQsNjUyMzgzLjMwODc2NTI1NzgsMTg5NzQ3NS40ODM0OTEyOTU3LDEyMDM1MjEuNDgxNDU0Njg2LDE4NjgzNTIuOTM4OTYwNDc1NiwyMDc0NzIwLjI0MjUxNDkwMSwxODQyODUyLjEwNzMwNTM2NzcsNzQxNTkyLjMxNzA2NzkxNzksNTQ2NjMuMTg2OTUyNzUyMTYsMjU0Ni44OTY0ODAzODQ4MjY2CisyMixUdWUgMTUgRmViIDExLDEzMjY0NS43MDkxODQ3MTA2MywxMzE0MzkuOTUwNDU5OTk0NTUsMzYwMDguODQ3NjAwNTM4MzYsMTM3NDUxLjMzNjkwOTU3NzA4LDY2MDM5LjI1MTA5MzUzMzMsMjQ0NDM0OC4yMzUwNTg1MDgzLDIyNTk1OTguMTQyOTQ1OTQxNSwxOTIxMzQ1LjUxNTA5MzA3MiwxNTg3MDU2LjY5OTU4MTgyNTIsMTE2MzM3OS4zMzg2MTUxNTYsOTU1MjAuNzU3MjgzNjA4MDcsMTIzOTkyNC4zMzY2NzE3ODQsNTU1OTI5LjY0MDU5NDU1MzIsMTQ5NDk5MS43MzIzMTcyNDcyLDEzMDE2MDguODE0NTcwNjM0MiwxNTUyMjA4LjY4NTExODcxMiwyMjI4NTAyLjQzNDUwNjE1NSw2NTIzMDEuOTM3OTkyNDI5NCwxODk2NDkyLjU1NDQxODg5LDExNzY4NTYuMzEyOTY2NTQ3NCwxODY4MjU4LjE0MDc3MjQ5ODIsMjA3NDU4My44MTQ2MTQ1NzM3LDE4NDEwMzUuMjI5Nzg1NjM3NSw1NzE2NTguNTQ5OTI0ODUzNCw0MTY0MC43ODcwMjEyODg0LDIzMzQuOTU0MjQ5NjU0Njc4MworMjMsV2VkIDE2IEZlYiAxMSwxMjg1MDAuMzA5OTU3NjM3NSwxMzExNzUuMDk1MDUzMDI1MTQsMjgzODcuNTYyOTQ3NjY1MDcyLDEzMDU1MS4yOTc5NDA2NjI2OCw1MDY3OS4yMjMwMzczNzIyNywyMzc5Njg2LjY2MzEyNjk2ODMsMjA2Nzk0OC40NzgxMjIzNjMsMTc4MjE2My44NjIxNjgxNDQsMTQ0NTMzNy40NzEyMDk4NDg1LDk0Mzk1MS4wNzIxODEzMTU2LDcyNTE5LjY2MTQ0NTgyMzQ1LDk3Mzc2OC41NzE0MzMxMDM2LDUzOTk2Mi42OTIyMzkyNzY2LDE0NjE1MTIuMjA3OTE1MTUzOCwxMjYyNzIxLjQ2MDM3MDYwMiwxMjY0NTc0LjYzNzkxOTA1LDIxODk2NTAuMDMwNjk2OTQxNSw2NTIxODQuNzYyNjI2MjU5NiwxODk1MDAyLjM5NDQ1MjY2ODcsMTE0MDY1Ny4xMzEwOTc2NzE2LDE4NjgxMTkuMzcyNzE1NjUxMywyMDc0Mzc2LjQxMTIxMDYzNiwxODM4MjE3LjY1NTI3MzczNTUsNDQ5NzM0LjQxMzAyOTk1MTgsMzIyMDQuNjM0MDE1MDIxMTU0LDIwOTcuMDQ0Mjc4MjA0NjE4CisyNCxUaHUgMTcgRmViIDExLDEyMzcwMC41MDQ2MTI3ODg4OSwxMzA3OTIuNDA0MjAzNjc3MTEsMjE1MzkuNDc5NzAxMDY4NTM2LDEyMjMwNy4zNzQ1MDk0NDQ0NywzNzY1NS45Mzc5NTQwODM5OTUsMjI5MDkyNi43NzY2NzQzMDIzLDE4Mzg0NTEuODg5MDk2NTQ0OCwxNjEwOTk2Ljk1NzI5NzE5MDYsMTI3Njk2Mi44NDY3NDIyNzU0LDc0MzkwNC43MTU5ODEzNDgxLDU2MTM4LjUyOTIzMTg3MjgyNCw3NDI0MzUuMTQzMDcxNzY1OSw1MTc0ODYuMjk3Nzc2MDY2LDE0MTM3MzcuMDIyNjgxMDAxOCwxMjEwODI4LjEwODAxMzczMTIsOTk4NzYyLjk2NjAzMTQ2MDEsMjEzNjk2My4wNDY1Mzk1NTgsNjUyMDE3LjQ4NzgzODY3MzYsMTg5Mjc1OS4wODUyMTYzNDY0LDEwOTI1NjcuNzI4MTM2NzI4OCwxODY3OTE3LjkzNzgxODM2NCwyMDc0MDYyLjc5NDIzOTkzOSwxODMzODgyLjczMDA3ODUzNywzNjQ5MzEuNTI5MjU4MTU5LDI1NjIwLjEwMzkwMDk3NjkzLDE4MzguMTYyNDkyNzA3MDY0MworMjUsRnJpIDE4IEZlYiAxMSwxMTgyOTIuOTA5ODgwNDc1NzgsMTMwMjQ1LjkyNDk4MDMzNjEzLDE1OTI0LjU2NDM1NDMzODc0NSwxMTI4MzIuMDY5MTQ1MzEwODIsMjc1NzQuNzg1MTQ5MDY0MDQsMjE3MjIxMy41MDgyNDI5OTgsMTU3ODU1OC41MDA0NzMyMzQ2LDE0MTA2NzAuODI0NDk5NTkxMywxMDg4MTk5LjMwMTY5MTgzNjQsNTc0MTk4LjQ3MTk4NDU4NDYsNDQ4NTQuNTcxNTUyNzE4MjIsNTU3MDQzLjA3NjEwMjEzNSw0ODY4NDEuNjc3MjU5NzI4MTQsMTM0NzM5Ni42MDQwMjE2ODgyLDExNDMyODcuNzc0NTY4NjUzMiw3NzA5MjAuMTU0Mjk3NDY0MSwyMDY2NzU1LjkwODQ3ODc0NjQsNjUxNzgwLjU4NDIzNjI0MTUsMTg4OTQxMC44MTg3MjgyNTMsMTAzMDI5NS4yODY0Mjc0Mzc2LDE4Njc2MjcuNzA5OTQwMTUyMiwyMDczNTkxLjMzNjUyNjIzODQsMTgyNzI4NS41MjQzMDI1MjMxLDMwNjk0OC4xNjk2OTczMjk1LDIxMTIwLjkxNDQzMDM5MTEzOCwxNTY2LjA0OTgxNDI3MzQ5NDEKKzI2LFNhdCAxOSBGZWIgMTEsMTEyMzYyLjkzNTM3NjkxOTM3LDEyOTQ3Ni41OTM3NDc5MDk1NiwxMTcwMC45MzY3MjE4MDUzOTYsMTAyMzgxLjU3NDMwMzg1MTcsMjAzNTkuODg1MjcxNjUwMzY4LDIwMTg2OTguMjY1NTMzNTg3NywxMzAzMzcxLjMyNDIwOTk2MiwxMTkwMDc1Ljk2MDIyMjY1NTQsODkwODQzLjA0NTY0OTk2MTIsNDM5NjQ3LjY1MTI3MTM5MTQsMzcyMjcuMzQ4NDI0NTE5MjE2LDQxODgzOS43NTM4Njk0MDkyLDQ0Njc4NC41ODc3MjM1MjU5NCwxMjU4NTM0LjQyNTIwNDM4MywxMDU4MDgwLjAxMzg2NjU4MDMsNTg5MjEzLjg0NjQ5ODM0OTQsMTk3NTE0NS43ODAwNDQ2NDIzLDY1MTQ0Ny44MzEwNzg2MTEzLDE4ODQ0NjYuMjc5MTE0NzQ0LDk1MjE3MC44NDk3MTgwNjAzLDE4NjcyMTIuNzAzMjg5MzIzNSwyMDcyODg3LjM3MTExODk2OTMsMTgxNzM4NC4yNDc2NTI0OSwyNjc2NTUuNzk4NzI3NDk5MDMsMTgwNzYuODk5NTQ0NTgxMjQsMTI5Mi4zMjAyODQ4NTE4NjI5CisyNyxTdW4gMjAgRmViIDExLDEwNjAyMi45NTk2MDYxMzcxMywxMjg0MTEuMTg0MjgzMTE2NDEsODc0MS41NTk2NDk1MDcxNDYsOTEzMzQuMzUyNTk3NDExNjYsMTU0ODYuNDg3MzYxNjgwMzQsMTgyODQzNS42MzgyNjg2ODgsMTAzMzg1MS4wNjU5ODE5NjE4LDk2NDE4NS4wODM0MTkyODA0LDcwMDQ4Ny45Mzg4NDI3MTI3LDMzODkyNy41ODU5MTI5MDQ4LDMyMTI2LjU0NTQ3MjIwMjk2OCwzMjE0ODIuNzkzNDc1NDIzMiwzOTcxNDcuMDkwOTIwMTc5MywxMTQ0ODA5LjMzMjY5MTk3MzgsOTU0NjYyLjk5MjUyMDI2MSw0NTMwNjcuMDA2MzEzMDU4MywxODU4NTkyLjE1NDI2MDg4NSw2NTA5ODQuMzAxMDE2MTQxLDE4NzcyNTAuMDM3MTY3MTI2OCw4NTc5MTUuMTEyNTAwMTA2OCwxODY2NjIzLjU1NTg4OTQ2MiwyMDcxODQzLjE5NDM4NTczNTgsMTgwMjc1Ni43MzQ3NTg4OTksMjQxMjI0LjYwOTk5MDA0NjQyLDE2MDI5LjA0NjEwMDI5MTk1NiwxMDMyLjA5Mjc1MTc3OTk2MQorMjgsTW9uIDIxIEZlYiAxMSw5OTM5My4zNTc5MjQ3MjE2NCwxMjY5NjIuMDkzMDY2MTkxODEsNjc2Ny41NDk2NDQ0NDM5MDEsODAxMzYuMTYxMDU3OTcxNDksMTIzMDguMTUyNTUwNzYxNjksMTYwNDU3Ny4zNDIyNDIyMTU4LDc5MTUxOC4yMzAwOTkwNzM0LDc1MTE4NS45MzM3MzA3MDEyLDUzMjI4Ni4wNDY1MzI0MDY1LDI2NjcwNC4zNzE3ODE3NTgsMjg3NDYuMDUxNTU3MDE2NTM3LDI1NTQzMS4xNTAxMTM1MDc5NiwzMzk1MjQuNDEwNjkwMTM3MywxMDA3MTY2LjAxMDI1ODExMjksODM0OTUzLjI2NjQxMzcyMDgsMzU1NzUxLjIwMTkzOTM1MjQ0LDE3MTQ3MzcuOTcwNjI0NjM0NSw2NTAzNDMuNDIxMjA4MjY1NCwxODY2ODQ0LjIyMDI3MTcwOTEsNzQ5NDc4LjMxMDY5NTQwNzYsMTg2NTc5Mi4yOTMxOTM3NzA2LDIwNzAzMDMuMTE0NDI5Njg1OCwxNzgxNTA4LjMzNzYzNTYxNTEsMjIzNjU4LjMzNzUxMTM2NDIzLDE0NjYyLjMyOTE3Nzc0NTE3Miw4MDAuOTk5NjU4ODI5MjIxNworMjksVHVlIDIyIEZlYiAxMSw5MjU4OC4xNTY2MDIyMzQwNywxMjUwMjkuMTA0NjkzMDY4OTMsNTQ4Ny4wMzIyNjM1Nzc3MDksNjkyMzQuMzc5ODI0ODQ4OTIsMTAyNzAuNzUyOTkwOTQzMTAxLDEzNTcwOTIuMjU1MTQyNDE0Nyw1OTE4MDUuNzc0NzM0MjE1Myw1NjcyMzguMjM2MDA0NTkyLDM5NjE1Ni4xMjYzNTA4NjIxNSwyMTYzMzkuNzE5NDk5MzA5MiwyNjUzNi4yMTQ4MDgzNjI0NiwyMTE1NDMuNzU2OTY5MTUzOSwyNzc2MjEuODYyNjYwNzU4Niw4NTEzNjIuMTIxMDc4MTc2NCw3MDQxMTUuOTY3ODQ4MzY2NywyODgyNDUuMjUxNTU0MjY2NTUsMTU0MzYwMi43NDEwNjg1ODI1LDY0OTQ2Mi44MjY4MjUwMDQ3LDE4NTIwMTkuNDgxNTM4MTA3Miw2MzE2NjcuODk1ODkwMTc1NSwxODY0NjI0Ljc4NjMzOTgwMzgsMjA2ODA0Mi4wNTM0Mzg4MDMsMTc1MTE5Ny43MjA1NjYwNzksMjEyMjU1LjEzMjg2Njk1NzEsMTM3NjUuMTUyMTIyODkyNzIzLDYxMC41MTEyMTg2NTQwNzIzCiszMCxXZWQgMjMgRmViIDExLDg1NzEzLjY4NTQ1ODE0NDI1LDEyMjUwNS4wMTQ5OTE2NjcxNyw0NjY3LjQxNTIxNjIzMTE1NzUsNTkwMjMuMDMwMjk4Njg0MTU2LDg5NzUuNzUyMjY5NjM1NDg4LDExMDI3MTcuNzI5NjU4MTkzNyw0Mzk5NTcuODMyOTc1Nzk3Niw0MjE0ODMuMzcxNjQ5OTQ3MSwyOTQzODguOTAxNjkzMjk3OSwxODE3NzguNTEwNjIyOTg5MTIsMjUxMjcuOTAwNDI4OTMxMTUyLDE4MjY4Ny4xODM0NDk4MjQ2NiwyMTY3OTIuODQzNjg1ODkzODQsNjg4MzUyLjI2NzE2NzQxNTksNTcwNTgzLjE4NDcwNDY4MDUsMjQyMTIyLjc4MTU0Mjc3MjI1LDEzNDg5ODQuMTE4MjQ3NDEwNyw2NDgyNTguODE3ODMzNTM2NCwxODMxMTY1Ljg0MDgyNDk2MDUsNTEyMDY0Ljk1ODc1OTI0MTYsMTg2Mjk5MC4zMjQyODA3Mzk1LDIwNjQ3MzYuMjE5MTU2NjU1NywxNzA4ODI3LjkzNzk0OTU2MzQsMjA1MTgwLjMxMzgwMjU4Mjg4LDEzMTk1LjIzNDY2MzE2ODg0Myw0NjQuNDY3OTkzMTk3MTE5MjYKKzMxLFRodSAyNCBGZWIgMTEsNzg4NzcuODczMTI1NDc2OTcsMTE5Mjg2Ljg5Mjg5NTE4ODM3LDQxNDcuMTYwNjc5MzA3NzQ4LDQ5ODA1LjM5MjAyNDcyNzkyNCw4MTYwLjM5NDk5NDc0Mjk1LDg2MTkxNy40ODIxMTg4NzYsMzMxODU3LjA4MzAxNTgzNzgsMzE0Mzg5LjA2MDQ4NDkzODYsMjIyOTQyLjc3MzQ5MTE5MDM0LDE1ODI5NS4xNjgyODI5NzM4NCwyNDI3Mi45NzA0MDcyMTk4MTUsMTYzODYzLjMzODE0NTEwMDkyLDE2MjU3NS45MzQ2MDgyMTkxNiw1MzI0MTcuOTYzNTk4MTk1MSw0NDQ2NTkuNjAyMjU0NDM1NSwyMTA3NzkuMjU5MDc0MTcyOTQsMTEzOTUwNi43ODM3OTA3OTcsNjQ2NjE5LjIxNzQ2OTYzNDEsMTgwMjI0MC44Njk1MTIwMzQsMzk5NzIxLjM0NjY4OTE0MTcsMTg2MDcwNy40ODk4ODgxNDI2LDIwNTk5MjMuOTE4MjI3NDA3NCwxNjUwOTYxLjYzOTg2ODA3MDYsMjAxMTcyLjU5ODA0NDE5Nzc0LDEyODU1Ljc0NDg2NDE0MTk2NSwzNTkuMTk3ODMxMDgwNDYwMDUKKzMyLEZyaSAyNSBGZWIgMTEsNzIxOTkuNTU5MTIzNzM0MzksMTE1MjkzLjE0ODYyMzYwMzg1LDM4MjEuMTQ4MjA4NjIzMzQzLDQxNzcxLjcwMDc1NjM3OTMzLDc2NTcuMzI5NDEzNzYyNTQ3LDY1MzEzMi40ODQ2NzYxNTYzLDI1ODM2Ny45Mjg5MTE5NjY4LDI0MDA5NS4xNDQ1MzA1NDQxMiwxNzQ4NTkuMzQwOTcxNzkxNywxNDI0OTIuODkxMjI3MTA3NTIsMjM4MDMuMjUyNjc0MTE0NDMsMTUxNzQ0LjYyMDg1ODg0MzMyLDExODgwOS42NzQ2NzczOTk5MiwzOTY5ODAuODE4MTQ4NDgwMSwzMzU3MjAuOTYwMDA4MTcxNzQsMTg5NTA4LjI2OTE5MTM2Mjg0LDkyODM1MS4wNDY1NDg2MTgyLDY0NDM5NC4yOTQzNTIxMjg5LDE3NjI3NTguNjM3MTc3NTU2LDMwMjcxNS40Mjg4OTE0OTg5LDE4NTc1MjUuMDM5NDA1OTQ1NSwyMDUyOTUzLjg3NDg5MDgyNSwxNTc0MDIwLjI0OTMyNjE2NzksMTk5MzUzLjMwOTA4NTc4MTQ1LDEyNjc5LjgwODc1NTM0NDU5OCwyODYuNjgxNTg2OTY0ODUwMgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9EZW1vZ3JhcGhpY1NFSVJEaXNlYXNlX0ZEX1JlZmVyZW5jZS9GbHUvcnVucGFyYW1ldGVycy5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0RlbW9ncmFwaGljU0VJUkRpc2Vhc2VfRkRfUmVmZXJlbmNlL0ZsdS9ydW5wYXJhbWV0ZXJzLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iOTgxODU3Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9EZW1vZ3JhcGhpY1NFSVJEaXNlYXNlX0ZEX1JlZmVyZW5jZS9GbHUvcnVucGFyYW1ldGVycy5jc3YKQEAgLTAsMCArMSwyIEBACitkaXNlYXNlTmFtZSxwb3B1bGF0aW9uSWRlbnRpZmllcix0aW1lUGVyaW9kLGZyZXF1ZW5jeURlcGVuZGVudCxyZWZlcmVuY2VQb3B1bGF0aW9uRGVuc2l0eSxyb2FkTmV0d29ya0luZmVjdGlvdXNQcm9wb3J0aW9uLGNoYXJhY3RlcmlzdGljTWl4aW5nRGlzdGFuY2UscG9wdWxhdGlvbkdyb3Vwcyx0cmFuc21pc3Npb25SYXRlLHJlY292ZXJ5UmF0ZSxpbmZlY3Rpb3VzTW9ydGFsaXR5UmF0ZSxpbW11bml0eUxvc3NSYXRlLGluY3ViYXRpb25SYXRlCitGbHUsaHVtYW4sODY0MDAwMDAsdHJ1ZSwxMDAuMCwwLjAxLDIuMjUsb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5pbXBsLlN0cmluZ1ZhbHVlTGlzdEltcGxANDM0NDQzNDQsb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5pbXBsLkRvdWJsZVZhbHVlTWF0cml4SW1wbEA0MzgxNDM4MSxvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLmltcGwuRG91YmxlVmFsdWVMaXN0SW1wbEA0NDMwNDQzMCAoaWRlbnRpZmllcjogbnVsbCksb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5pbXBsLkRvdWJsZVZhbHVlTGlzdEltcGxANDQ4NzQ0ODcgKGlkZW50aWZpZXI6IG51bGwpLG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uaW1wbC5Eb3VibGVWYWx1ZUxpc3RJbXBsQDQ0YzY0NGM2IChpZGVudGlmaWVyOiBudWxsKSxvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLmltcGwuRG91YmxlVmFsdWVMaXN0SW1wbEA0NTBiNDUwYiAoaWRlbnRpZmllcjogbnVsbCkKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0RlbW9ncmFwaGljU0VJUkRpc2Vhc2VfRkRfUmVmZXJlbmNlL0ZsdS93b21lbi9EaXNlYXNlIERlYXRoc18yLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvRGVtb2dyYXBoaWNTRUlSRGlzZWFzZV9GRF9SZWZlcmVuY2UvRmx1L3dvbWVuL0Rpc2Vhc2UgRGVhdGhzXzIuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRhZDFhNWIKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0RlbW9ncmFwaGljU0VJUkRpc2Vhc2VfRkRfUmVmZXJlbmNlL0ZsdS93b21lbi9EaXNlYXNlIERlYXRoc18yLmNzdgpAQCAtMCwwICsxLDMzIEBACitpdGVyYXRpb24sdGltZSxFRy1GUkctRzIxMDAwMSxFRy1GUkctRzIxMDAwMixFRy1GUkctRzIxMDAwMyxFRy1GUkctRzIxMDAwNCxFRy1GUkctRzIxMDAwNSxFRy1MT0UtRzI0MDAwMSxFRy1MT0UtRzI0MDAwMixFRy1MT0UtRzI0MDAwMyxFRy1MT0UtRzI0MDAwNCxFRy1MT0UtRzI0MDAwNSxFRy1MT0UtRzI0MDAwNixFRy1MT0UtRzI0MDAwNyxFRy1MT0UtRzI0MDAwOCxFRy1MT0UtRzI0MDAwOSxFRy1VUEUtRzI5MDAwMSxFRy1VUEUtRzI5MDAwMixFRy1VUEUtRzI5MDAwMyxFRy1VUEUtRzI5MDAwNCxFRy1VUEUtRzI5MDAwNSxFRy1VUEUtRzI5MDAwNixFRy1VUEUtRzI5MDAwNyxFRy1VUEUtRzI5MDAwOCxFRy1VUkctRzMwMDAwMSxFRy1VUkctRzMwMDAwMixFRy1VUkctRzMwMDAwMyxFRy1VUkctRzMwMDAwNAorMSxUdWUgMjUgSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzIsV2VkIDI2IEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCiszLFRodSAyNyBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorNCxGcmkgMjggSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzUsU2F0IDI5IEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCis2LFN1biAzMCBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorNyxNb24gMzEgSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzgsVHVlIDEgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzksV2VkIDIgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzEwLFRodSAzIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxMSxGcmkgNCBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTIsU2F0IDUgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzEzLFN1biA2IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxNCxNb24gNyBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTUsVHVlIDggRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzE2LFdlZCA5IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxNyxUaHUgMTAgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzE4LEZyaSAxMSBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTksU2F0IDEyIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyMCxTdW4gMTMgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzIxLE1vbiAxNCBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjIsVHVlIDE1IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyMyxXZWQgMTYgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzI0LFRodSAxNyBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjUsRnJpIDE4IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyNixTYXQgMTkgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzI3LFN1biAyMCBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjgsTW9uIDIxIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyOSxUdWUgMjIgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzMwLFdlZCAyMyBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMzEsVGh1IDI0IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCiszMixGcmkgMjUgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvRGVtb2dyYXBoaWNTRUlSRGlzZWFzZV9GRF9SZWZlcmVuY2UvRmx1L3dvbWVuL0VfMi5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0RlbW9ncmFwaGljU0VJUkRpc2Vhc2VfRkRfUmVmZXJlbmNlL0ZsdS93b21lbi9FXzIuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdlOTVlYzgKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0RlbW9ncmFwaGljU0VJUkRpc2Vhc2VfRkRfUmVmZXJlbmNlL0ZsdS93b21lbi9FXzIuY3N2CkBAIC0wLDAgKzEsMzMgQEAKK2l0ZXJhdGlvbix0aW1lLEVHLUZSRy1HMjEwMDAxLEVHLUZSRy1HMjEwMDAyLEVHLUZSRy1HMjEwMDAzLEVHLUZSRy1HMjEwMDA0LEVHLUZSRy1HMjEwMDA1LEVHLUxPRS1HMjQwMDAxLEVHLUxPRS1HMjQwMDAyLEVHLUxPRS1HMjQwMDAzLEVHLUxPRS1HMjQwMDA0LEVHLUxPRS1HMjQwMDA1LEVHLUxPRS1HMjQwMDA2LEVHLUxPRS1HMjQwMDA3LEVHLUxPRS1HMjQwMDA4LEVHLUxPRS1HMjQwMDA5LEVHLVVQRS1HMjkwMDAxLEVHLVVQRS1HMjkwMDAyLEVHLVVQRS1HMjkwMDAzLEVHLVVQRS1HMjkwMDA0LEVHLVVQRS1HMjkwMDA1LEVHLVVQRS1HMjkwMDA2LEVHLVVQRS1HMjkwMDA3LEVHLVVQRS1HMjkwMDA4LEVHLVVSRy1HMzAwMDAxLEVHLVVSRy1HMzAwMDAyLEVHLVVSRy1HMzAwMDAzLEVHLVVSRy1HMzAwMDA0CisxLFR1ZSAyNSBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMixXZWQgMjYgSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzMsVGh1IDI3IEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCis0LEZyaSAyOCBKYW4gMTEsOC40MDAwOTk0NTc2NDU3NzUsMC4wLDE1LjQzMzY2MzU5ODA4Mjg4NCw2LjAzNDMxODUwMzk1OTczLDM3LjQ3NDI0Nzg0MDg2OTA0LDEwLjkyNzQ1NjcxNzA0MjEzNSw5NS4zMzUzNjU4ODA3OTgwNCw2Mi45MDU2MjQ2NTcwMTUwOSw3NC45Njc4Njg1ODY1MjY5LDE4NDMuMDczMjg4MjAxNjY4MiwxMzg5LjI1MDM2NTg3ODIyODksMjExNy43NTIxNTE0MDE1MzY2LDAuMCwwLjAsMTIuMDEyODg0ODAyOTEwODQ3LDE5OTkuNDMyNjQ0NTI4NjgzMywxMS44Mzg1NDM1NTMwODEzNjcsMC4wLDAuMCwxMS42MjcwOTE1OTUyNzIzNTIsMC4wLDAuMCwwLjAsMjgwMjQuOTE1NTg2NDY1MzQ0LDEwNzEuOTUwMzg3MDg1MjcyNywwLjY5NDg2NTE5NDU1MDYwMDgKKzUsU2F0IDI5IEphbiAxMSwxOS4zMDUwNTUyNTQ4MTM4NDQsMC4wLDM1LjQ1MTQ5MTc2MDM3NjE4LDEzLjg3NTY3ODA0NzA3MjA4Niw4Ni4wOTcyNDE3NTk1MDY0NiwyNS4xMjc5MjEwOTg2MjE1NzcsMjE5LjIxNDg0ODU3MzU5NDM0LDE0NC42NDU3MzcwNzQ4OTgzNiwxNzIuMzgxMTUwOTgwNjEzNzcsNDIyOS41Mzk3MDg4NDkwODMsMzE4Mi4wMzM1NTkzNTM3MTY2LDQ4NjAuMzc5MjkyMTI1NzQ5LDAuMCwwLjAsMjcuNjIzNzkxNDE2NzMzMTMsNDU4OS4wNDU3MDI5MDAyMDUsMjcuMjIyOTY2MDg3MjAzNzY2LDAuMCwwLjAsMjYuNzM2NjQyNTIwNDg0MDc1LDAuMCwwLjAsMC4wLDYzOTI5LjUyOTE0OTIxNjg0LDI0NTIuMjM2OTQyMjM4ODIzOCwxLjU5Njc0MDM1MjUyMjg0MworNixTdW4gMzAgSmFuIDExLDI3Ljg0NjY2ODI3ODMxMjE1LDAuMCw1MS4xMTAzOTEzOTQzNjU4NiwyMC4wMjQ1Nzc5MDYzMTExMjMsMTI0LjE0NTQ4NzM1NTU3MzQ0LDM2LjI2NDc4MDQ4MzA0ODE3LDMxNi4zNTI5MDIzMjk3MDA0NCwyMDguNzQxODc0MDkyMjY2MSwyNDguNzY1MTMxNDIyNDY2NjIsNjA5MC42ODgwMjM4NzUwODgsNDU2OC45MDExNTc2Nzc5NDYsNjk5OS44MzE5MTk3OTEwNDA1LDAuMCwwLjAsMzkuODY2NjA2MzE3MDI1MzE1LDY2MDkuNzEwNTU1MjE0NzE2LDM5LjI4ODMxNzYwNzkzNjM5LDAuMCwwLjAsMzguNTg2MjQ0OTkyNDAxNzIsMC4wLDAuMCwwLjAsOTEyMzkuMDk0ODg2MDgwMzgsMzUxNC40NDc5NTM4ODA2NjYzLDIuMzAyNzYxNjQwNDY5NTc4Cis3LE1vbiAzMSBKYW4gMTEsMzIuMjcxNDUwMDE3OTYxODEsMC4wLDU5LjIwMTExMDk2Nzk4OTg4LDIzLjIxNjAxODgyMTY4OTgwNCwxNDMuODEzODcyMDA0NzE1NTYsNDIuMDQ2ODM5NDMxMzQ2MjUsMzY2Ljc2NzU4NTI4OTgzNiwyNDIuMDA5MjM4NzIzNTQyOCwyODguNDA3MTU5NzM4NzYxNTUsNzA0Ni4wMjQ3NTk0OTU1NTQ1LDUyNjcuMTIyMTg2Nzc2Mjc2LDgwOTguNTYzODY1NjYxNCwwLjAsMC4wLDQ2LjIyMjYwOTgyNjk4ODg5LDc2NDguMTg5NTIzNDUxNzkyLDQ1LjU1MjM4NDE4MDI4OTE1LDAuMCwwLjAsNDQuNzM4MDc1NzMxOTIzMjc0LDAuMCwwLjAsMC4wLDEwNDQzMS45NTU1MjMyODAwOCw0MDQyLjUwNTYxNDI0MzcyNywyLjY2ODAwNDc3ODI4ODU2NAorOCxUdWUgMSBGZWIgMTEsNDEuNTE0NDg2MjU1NDcyNTcsMC4wODMyNTAxNDk4MTE1NTU1MSw4NC4wNjU3NDUyODY5OTAzMiwzMi4yNzMyMzIyOTQwNTg0MjQsMjA1LjA4MTYzMTAxODk2NDIsNzIuNTAzMjcyNTg5OTE3NjYsNTUwLjc3Njg0OTQyNDA4NDUsMzY0LjQ3NjM0MjI2MDU1ODYsNDMwLjMwOTAxODI0NjY0NDIsODI4Mi4wNTQzNTI4ODU3MjksNjA0My44NTk2OTc2NDczOTEsOTY0NC44MjU1OTU0NTA3NzEsNC4xMDA0MDAzMDA2OTA0MDU1LDguMTgwOTQxNjEzOTY5MzI0LDcxLjY0MDQ0Njc3MTc2NDgsOTA2Mi42MTQ4ODk3NTE0NzQsNzAuNDE2MTYyMTMwNjkwOTUsMC4wNDYyOTM4ODg4MjU4OTY4MTUsMC4zMDU1Nzk1MDY0NjMwMjIwNyw2OS4wODUzMDAyMjI2NTAyOSwwLjA0OTU5MzE5Mzk1MTAwNDI0LDAuMDUxNjY0MTA3MjQ1NTM5MzEsMC40MDQzOTUyNzkzMDYwMTY0LDExMzg0My45ODQyMTQxNjA5OCw0NTY1LjA0NjUwNzAxMjc3NzUsMy4zNzQ2MTA0Njg2Nzk1Mjc3Cis5LFdlZCAyIEZlYiAxMSw3MC4zNzYyMjM2ODQzMTIyOCwwLjM4MjY3OTQxMzIxMTk1MjQsMTY1LjM1OTY3Mjk3Mjc4ODg3LDYxLjY5OTAyNDgzMDc2MDYyLDQwNS42NzQyODY3NjcyNzA3LDE3Ni4zNDI4ODMzMDg4NzczMywxMTYyLjc4MTA3MjEzMjk5Nyw3NzIuMDkzNzgzNzgwMzkwNiw5MDEuNTE3ODUyMzI0MjU5NSwxMTgwMy40OTg4MjY4ODI4NDQsODE4Mi40ODA2NjU0NDM4NjQsMTQxNDAuNjMzNzUyMTUwNzI1LDE4Ljg0ODc1NzU1ODYwODEsMzcuNjA2NTk5ODEyMzUwMjA0LDE1Ni43OTAzNTU2MTAyMjAyMiwxMzE0Mi44MzkzNDE1NjY0NTgsMTUzLjY2NDk5MjY5MjE5MzMyLDAuMjEyNjcxNzg2MjA2NTYzNTIsMS40MDQ2NTgxNDkyODUxNjgsMTUwLjU4NTU1OTg5MjIyNjc0LDAuMjI3ODMzMTM2NTg5NjgwMDcsMC4yMzczNjI2NzY0MzY1MzM3NSwxLjg1OTE2NTQwODYwNTIyOTYsMTM2NzMwLjAzMTAyNTkxMDY2LDU5NjMuMTc5ODU5ODg2NSw1LjU1MzkwOTg0NjIyMzEyCisxMCxUaHUgMyBGZWIgMTEsMTI5LjM1MDYyNzc4NjA1ODc0LDAuOTkxNzQ0NDAxNjU2OTYyMiwzMzAuNTIzMDk2ODQ3NTI3NzcsMTIxLjgzOTAwMjM0NjA3OTQ3LDgxMy4yNTM4OTkxODM0NzQ5LDM4OC4xMDcxNTA4OTU3OTQ2LDI0MTEuODMyNTg0MDcyOTU1LDE2MDQuMDc5MzU0NTUzMjc2NSwxODYzLjI5OTUzNzg3MzQyNTQsMTkwMzUuOTQ0MTAzNzg2MTksMTI1NTAuMDMzOTAzNjg0ODA1LDIzMzU4LjU4ODMyMDkyNzEzNCw0OC44NDY1NjA4NTI5MzEwOCw5Ny40NTkzODg3MzQ0OTczMSwzMzAuNTkwMzQxNDU5MTIwMywyMTUxOC44Mzg3ODY5OTExMSwzMjMuNTk3OTUwNTE3MDg2NiwwLjU1MDczNTQ4Nzk5MDQ4MTgsMy42NDAxOTM1NDQ5ODM1NTUsMzE2Ljk0MDk2NjA0NTIxOTQsMC41OTAwMTE3NTEzMzQ3NTg5LDAuNjE0NzM3MDkzOTMyNjczNCw0LjgxODg5Nzk2MDQ3MzgyNSwxODQzOTQuNjE3OTU3MDExNDIsODgxOS40MzM0Mjk4OTcyNywxMC4wMDE4OTUyMTI2NDI4NjMKKzExLEZyaSA0IEZlYiAxMSwyMTguNDUyMzUwNDM3ODcwMjIsMS45MDgyNDA0ODMxNDMxMzA2LDU3Ny43Nzc4ODc4NDQ4NTk2LDIxMi44MjY4MTY2NDgzNzE0OCwxNDIzLjMyNzk4OTQ5NDI0Myw3MDcuNzQzMTk1OTYyMjI3LDQyOTguMTE3NzM0MDg3ODU3LDI4NjAuNzg3NjEwODM3ODIxNCwzMzE1Ljg3NTk4NjY3Mjk1MDYsMjk5ODUuNDk1MzUyMTAzMTQsMTkwMzguMTI1NTU0MDA4MjAyLDM3Mjg2LjY4MTAwODgwMTU4NSw5My45Nzg1MTU0ODM5NzEyNiwxODcuNTEzMzEyNDQ2ODM5NDgsNTkzLjE5MjY1OTI2MjA5ODIsMzQyMDEuMDMyODYwNzE0NTksNTgwLjM5NjU3MDQxNzY2OTQsMS4wNTg3NDgzNjE2Mzg2ODQ4LDcuMDAzOTM1MTY1ODA3ODAxNSw1NjguMzAxNzc5NDM4MTQ2LDEuMTM0Mjg1OTQ0MjgwNDA1NiwxLjE4MTkxOTgxMTc4MzMxMiw5LjI3MzYwNzE5Mjc1ODQ5LDI1NTAyMS40NzYwNjYwNzg1MywxMzAzMy4xODI3NzQyODg1OCwxNi43MDIyNTEwNDg2MTE0OAorMTIsU2F0IDUgRmViIDExLDMzMS45MjAwNzEzNjM0MjgzLDMuMTQwMjU4MjEzNjU1MzI4Myw4OTIuNTU5Mzc1OTEwNjk2MiwzMzAuMjUwNDkwMTg0NDc5NjQsMjE5OS40Nzc3ODg3MjYzMjksMTEzMS4zMDE4Njg2NDE0NjQsNjc1NC4zOTMyNjI5NjUzNzIsNDQ5OC45ODIxMTI3NzY4NDMsNTIwNS40NTI4MzM0NTEwNTIsNDM3ODQuNjUxNDEzMzEwMjIsMjY4NzIuNDk3MjQ3MjEyOTQ1LDU0ODU2LjYzNDIwOTYxODU0LDE1NS43MTE5NzgzODY2MTU0NCwzMTAuODg1Nzg0NTU3NDg2MTUsOTM3LjI5ODkwMTgzMDMzMjQsNTAyMjcuNjI2ODg3NjUyMDA0LDkxNi44MDMwMDE1NDIxOTE5LDEuNzM0MjExNDczNzcxOTY0LDExLjYzMzQ2NjI2MzAyNTkyLDg5Ny40Mzk1ODAxNjcwNjgyLDEuODYwOTE0NjYzNTQ1NzYzNCwxLjk1MDQ2Njc1NzIwMjYxMjYsMTUuNTY3MjgwNTcyNTExOTk5LDMzNzM5MS44ODU1MzE1MzI3LDE4MDIzLjA4NjM0MzE0NTkxNSwyNS4xOTk1OTM3NzMzMzEzNzYKKzEzLFN1biA2IEZlYiAxMSw0NzAuNTIyMDU5NDE4NzIxNSw0Ljk0MjQ4ODk1ODc2Nzg5NCwxMjg3LjQzNDA1MjYxMDQzNjMsNDc5LjQ2NTc2MjIzNzE4OSwzMTcxLjQwNzIxMTA0OTQ3NzYsMTcyMS41NjUzNDE0NzczMjYyLDk5ODcuMjQ2OTYzMDI1MTksNjY2MS4zMDcwODY0MTI5NjksNzY4My41NDQ0ODE2MjYzMjgsNjAxNzQuMzU1NzQ1MDQ2NjMsMzU0NjkuODg1MjIwMjY1OSw3NTg4NS43MTkxNDcyMTU4NiwyNTAuNzcyNjA5MDczODcxOTMsNTAxLjY3NzM4MDcxNjA2NDIsMTM5OC44MjMxMTgwMzI4MzQsNjk0MDYuOTEwMDQ0MTQ5MjYsMTM2Ny4zNjE2MTYyNDA5ODA1LDIuNjkyNTYzNjU1NzY0ODcwMiwxOC44ODQ0NDUxNzk1ODA3NzMsMTMzNy44MDYxODkxMzU0MDksMi45MDQ5NTcwNDgwMzU0OCwzLjEwNDk1MzI3Mjk5MDM4MDYsMjYuMTIyOTI1Mjc1Mzc1MjEsNDIxMDE5Ljc3ODE4NjEzNDc2LDIzMjkwLjY1MDQ2NzgzNDQ4NiwzNS41NTczMTEzNDQwODg5OTQKKzE0LE1vbiA3IEZlYiAxMSw2NTEuMDk3OTU0MjQwNjQwNSw3Ljk5ODMwMjA2NzY0MTM4NSwxODI5Ljg4ODIzNDA3NzE3NDcsNjg2LjkwNjc1OTk1ODA0MjgsNDUwMi4zNzIwODQ2MjA3NTI1LDI2NjIuNjQ0NjE4MTc3MzksMTQ3NDEuMjI1MzUwOTMwMzAxLDk4NTQuNjIyNTk0NjQ2MjUxLDExMzA3Ljk3NzQ1ODcxMjg2Nyw4MDU5NC41NTIyMzE1MDE1Nyw0NDk4MS44MjIzMjM1Mjk5LDEwMjQ4MS44NTkwMjUxNzcwMSw0MjEuNDY5NDkwNDY5OTY5OTcsODQ1Ljg0NzgwMzY4NzA5MTMsMjA5Ni41MDcwNjg3NDM1NCw5MzYwNi43NDkyMjUxNjE4MiwyMDQ3LjA0MjIzODA4MDk0OTgsNC4yNTgzMzg3ODk0OTQ5MywzMi4xNDEzNTkxODYxOTE1OSwyMDAxLjEzNDA2MDU1NDI5MDUsNC42Mzc3OTczMTExMDc1NzYsNS4xMjM3NTA0OTcxODUwNTksNDYuNzMwMzI4MDExNjM4MTEsNTAyNDkyLjU3MTU0MzQxNzMsMjg3NzAuODc3NDk3NTM0MzksNDkuMDU5OTExODc4NjkxNTk0CisxNSxUdWUgOCBGZWIgMTEsOTA1LjAyODU2MTA1Njg1OTIsMTMuMzgzOTE3NzUxODE2NSwyNjI4LjYxMTM3OTI3MjU2MSw5OTguNTUxMDI1Mjk1MzEyMiw2NDUyLjU5NzcxMTA2MDgxNyw0MjQ5LjUzNjUzODk2ODc5NiwyMjI0Ni45ODE0NzgwNjg4NTQsMTQ5MTcuNDAxMjcxOTE3ODE3LDE3MDA0LjE3NDExMzI3ODA0OCwxMDc4NTcuMTI3NDYzMTgxMTEsNTU5NTUuNTU4MDE1NTM3ODcsMTM4NTM5LjUzMzU5NTU0NzMsNzMzLjA0MzMyNzU1MjUxMDIsMTQ3NS45MDQwNjc3Njk2NzIsMzIyNS41NTU5MjQxMjkyODMsMTI2Mzc5Ljk0ODU0NTYxMjU3LDMxNDUuNDE5NjE5MjA0MDQ0NSw2Ljk0NjY0MTE3Mjc0MjY3Myw1Ni42MTgwMTE1MTA4MTM2LDMwNzEuNDQ2NzkzNjkzMTk2LDcuNjQ1NTA1NzkxNTE5MjU1NSw4Ljc0OTczNjAwMzUzMzEyNiw4Ni4xODM2MzA4Mjk0OTk3OSw1ODIzODIuNjgxODIyNDc0OCwzNDYyMS4yNTUwMDgyOTM2Miw2Ny45OTIwOTI5NDE4ODEyNAorMTYsV2VkIDkgRmViIDExLDEyNjYuNzUxMDE3ODcxMzU0NCwyMi4zNzIzMjYyNDAxNDM2OCwzNzgzLjAxOTUwOTExMzA2OCwxNDY2Ljg4MzU2ODE0ODg1OTUsOTI0OS40NTQyMzA5MzcyNDYsNjgyNy40Nzc1OTI4NzQ3MjYsMzM4OTcuNDY4NDMyMjI4ODk2LDIyODA3LjMyODY2NzY2NTI1NywyNTgxOC43ODkxMjYxMjU5NzIsMTQ0NTU4LjYyNjA5NjYwNjE0LDY4MzYxLjM2MjY2NzUyODkzLDE4NzUzMy40NjM0MDgwMTM3MiwxMjYyLjAzNzkwMTA5MzQ2NDEsMjU0Ny43MjYzOTAyNzUzMDQ4LDUwMTMuNjA2Mzc3Nzc5OTc0NSwxNzEwOTguNDMzMTAyNjUxNCw0ODg0LjQ4Nzk4MjY0MzkxNTUsMTEuMzYwNDUzNjMzMjAxNjA4LDk4LjUwODc4MDA5MzE0NzM1LDQ3NjMuMTcwNzg0NTMzMTg4LDEyLjYxNTU0MTc2ODc2NTY1NiwxNC44NjIzMjA0NDg0MjA5NzQsMTU1LjAwMDY2NDg1MTg3MTMsNjU2ODI4Ljg0ODMwNzUxNjIsNDA2NTUuNTk2MzQ0OTk3MjgsOTQuNjA0NzQzODQwNzk3MTgKKzE3LFRodSAxMCBGZWIgMTEsMTc2MS45MjUyMDk2MDcwMDIyLDM2LjM1ODU1MDYxNTM0NDg5Niw1MzMyLjIyOTM5NzYxMTc5LDIxMzguMjIxOTI1MDY4NjczNSwxMjk1My42NjkwODQ3NDU3ODgsMTA3NTkuNDQ1ODUzOTA1NTcsNTA5NjcuODMxOTg0MzQ2MzgsMzQ0MjQuMTgxODI1MDUyNjg1LDM4NzAyLjI5OTQ1ODcyOTc0LDE5MTM5OC44MjcyNTAxNjA5OCw4MDgzMS42MDIyNjQwNjkwOCwyNTAxODcuMjcwODA3MTI1NDYsMjA5My42MjE0NjkzMjg1NzIsNDIzNi4yODI3MzI1ODk2MzA1LDc2ODkuNTg2NzMzMjA1ODM5LDIyODk2NC4yNzE1Mzk5NjMyLDc0ODkuMTQ2NDc2MTk0NzY1LDE4LjEzNjE4NDE1MjYzODI1OCwxNjQuOTk3NTc2NTY3MjQzNzgsNzI5MC44NTU5NDI2NjkwMzMsMjAuMjg2NzA1OTEzMDcxNDEyLDI0LjQ2ODIyMjc5MjI2NjA1NCwyNjUuOTk1NzYyODkwNDg0LDcxMjk2Ni43MDI0MzAyNjU4LDQ1OTc5Ljk1NzU2NjgxOTU4LDEzMC4wNzgwOTAzMDE5MTIwMworMTgsRnJpIDExIEZlYiAxMSwyNDA0LjUyNDYyNDc0MTc4OTUsNTcuMTc3NjE4NjM1NTk3MTksNzIzNy4yODMyMDgzMTIwMzIsMzA1MS44NzcwMDU2MzY2NzEsMTc0MDcuMTk5NTM5NzgwMjU3LDE2NDk1LjgxMzAwMDM0MTAyMiw3NDY3NC44ODcyMTc2NDU5Nyw1MDY3MC44NTE1ODM5OTg4MjUsNTY1NDMuMTE5Mzk4NzI5OTMsMjQ2NTIyLjY2Njc4ODE2MzksOTA4MzAuMTQ1NjA4NTQxNTMsMzIzNTM3LjIyNzUwNzgxMDcsMzM0NC40MTQ5NTIxNTIyOTIyLDY3ODQuMzA0MzAwOTg4NTE1LDExNTEzLjg4NTIxNDQwMjk2NiwyOTgyMTEuMjU0MTYzMzY3NiwxMTIxNy42ODI1NTYwODUwNTYsMjguMDY0OTAxMTkyMDUzNjA0LDI2Ni41NDA3MjAzMTI1MTMyNiwxMDg5Ni4wMzc1MjAzNDkwODIsMzEuNjEwMzU4MjM1NzM2ODY4LDM5LjAxNDAyMzY5ODU4NDY3LDQzOS4yNTE0MzEyODIwMjUsNzMzNjA0LjU4MjY2OTE5NDksNDkyMzIuMzQwMTEzOTc2MzgsMTc0LjI1MTg4ODE4MTA5NDczCisxOSxTYXQgMTIgRmViIDExLDMyMDIuOTgyMjM0NjU0NjkyLDg3LjgwODQ1MDE1MDM1NDU3LDkzOTEuNzU5MzU5OTY1NTgzLDQyNTAuNDY5MTMzMDkzMTM3LDIyMjU1Ljk5NjQ5NDAzNzg4LDI0NzM3Ljk0NDY0MTA4MjY5MywxMDY1MjIuMzEyOTM2MzI3MDQsNzI3MjEuMjYzNTM5ODYzMDEsODA0MTQuNTIzNTM0NTQ0OTYsMzA1OTMyLjU2Njg2OTA3NjE3LDk1NzAzLjcwMDE1NDkzMjAxLDQwMTQzOS40NDc4NzAzMTc4LDUyMDcuODg4MTAwOTg2NjYsMTA1OTguNTc1OTEyMzc3NTI0LDE2ODY2LjIxNDE2MDAyMjA4NiwzNzQ1MjcuNzY4MjQwMjc5NCwxNjQ1MC4zMTAwNjAzMDkyOSw0Mi4zODc2MjYxNTI2MzA0Myw0MjEuMzExMTA2Mjc3MjY4NywxNTkyNy44OTczOTM5OTgxNyw0OC4xMTgzNzM5NDk0NDk0MDYsNjEuMDAyNTgyNjAyNTEwODMsNzExLjEyNzc0ODAxMjM5MjQsNzA3NTU0LjUyNDUwNjUyOCw0OTI4Ni44NjE5MzUwODkwNiwyMjYuMTAyMDAzMDgzMDM5MgorMjAsU3VuIDEzIEZlYiAxMSw0MTY2LjM4MDE5MzkxNDI5OTUsMTMzLjE0NjQxNTY2MjgyMSwxMTYyMS42NzA2OTYxNzk2MzIsNTc4Ny4yMzgzNzQwODM1NzksMjY5NjIuNDIxMjgxNTkyMjg0LDM2NTk0LjQzNzk0NTk0MywxNDg0NzkuNDk4NzM3MzAwODYsMTAyMTk1LjUyMDc3NDkxNjY0LDExMTY5Ny4xNDM4NDMyMTk0NiwzNjQwMzguMTAyNDgxNTUzNyw5Mzg4OS4wMjI0NzU0NjkxOSw0NzUyNTMuNzY4MTc3NDIxNiw3OTk3LjE5NjY2NjQzMjgzLDE2MzQ0LjExNjAyNDY0MTkzNywyNDMyOC41NDk2NTY1Mzk5NDQsNDUxNTM3LjU1NDA4MjUzMzgsMjM3NzguNDE0MTU0NzE1NDE0LDYzLjEyMTU5NzkxMjk0MDAyLDY2MC4wNjc0ODQyMTcyODA2LDIyOTE4Ljg5NjU5MTkwMzY5Myw3Mi4zMjg0NjEzODcyMjY2Nyw5NC42NjcyMjM5MjI2NzA1OSwxMTQzLjk2MDMwNTM2NzUzMjYsNjM2ODkxLjUwNDU3MTU5NDEsNDU4NzkuNDc3NTMyNzEyMDE1LDI4NC4yMDQ4NjAzOTQ0Njg2CisyMSxNb24gMTQgRmViIDExLDUzMDEuNTYwNjcyODY1Mzg4LDIwMC40ODgwNTE4Mjk4ODYzMywxMzY1NS4yMzg4MDM5ODc5MzksNzcxNC4zMTQzNTgyNjc3NDEsMzA3ODAuMjQwNjMxODk3MTcsNTM2MTAuNjUxNDcxMzk1OTYsMjAyNDcwLjk0MDcyMzIxODYsMTQwODg2LjE1MTc5MDYwMjQ4LDE1MTY4NS4zMjQyODA1OTU3Myw0MTM3MDcuMTU3NzIwMDI4LDg1NTg0LjQ5MjQ5Mzg5ODksNTM0MDE1LjU0MTE4Mzk3ODgsMTIxNTUuODI1Nzk4MDIwMjk4LDI0OTc4Ljk5NzE2OTA5NjU4MywzNDY4OC43MTg1MzYzODUyLDUyMDUzMi44NTI0OTU4OTA0LDM0MDI3LjMxOTA4NjI1Njc4LDkzLjI1OTQzMDk5Njc3NDMzLDEwMjkuNzYwNjM4ODQyMTU5NiwzMjU4NS4yODY4ODg5NDEzMywxMDguMDA3NzM1NjE4MjA3LDE0Ni40ODA0MzQ5MTEwODI4OCwxODMzLjQ5OTI4ODM1NzMxNjEsNTM2MDY3LjYzNzQ5NDA1NTIsMzk3MzYuODA0OTc1NTEwODYsMzQ2LjU2NTcyOTI5NjEwMDgKKzIyLFR1ZSAxNSBGZWIgMTEsNjYwMC44NTMxNzYzNDk4MzgsMjk5LjY3NzEzMzgyOTAwNDA1LDE1MTEwLjE2MDk2OTA5NTM4MSwxMDA0OC45ODA0MDM2OTU4NTgsMzI4MjEuODk2NjI2MjM0ODI2LDc3NjI4LjQ3NzQ2MjA5ODA2LDI2OTAzMi4xMTQwODg0NzksMTg5OTA5Ljc5NDM3NDI2ODY4LDIwMDU2OS45ODUyNzk0Njk5LDQ0NjUxNC42MzgzMjk4MDM1NCw3MjY0Mi41NjE5OTg0Nzg0OSw1NjU0MTQuNjQzODAxMjQ0MiwxODIyMy44NDcwNDI0NTIyMywzNzcxMC4zODgwMzkyOTE1Niw0ODgzOC40NDEwMzQ0OTkyOTQsNTcwMzc2LjMyNjg0OTUxMjksNDgxOTMuMTQ2NTEyMDg5OTc0LDEzNi44MjY0NDM4NzQyMjcyNywxNTk2LjMwMTU1NjcxNTM4Myw0NTcyNy41NjgyNzc3OTg4NiwxNjAuMjk4MjkzNDk1NTc5OTcsMjI1LjYwMDg0Mjk0NTI5NDA2LDI5MTUuNjEyNzQzMzIzMDAxNyw0MjQ4NDcuODgwMjI3MjgwMTQsMzIyMDUuMDY1MTc0ODY2NjU3LDQxMC4wMTYzMDkyMTYwNTkyNgorMjMsV2VkIDE2IEZlYiAxMSw4MDI5LjAyMTE1ODY4NzUyLDQ0My4yNDY3MjgxOTgzMjg3LDE1NTgxLjE1MTY4ODcwODI1OCwxMjczMi45OTA3MzU0OTE5MywzMjM3Mi4xNDk1MDU4MTMwMDYsMTEwNTI2LjI0OTQzMjY3NzgxLDM0NTU2NC43Mjk3MTE1NDMwNywyNDg1MDQuMzk0MTkzNTI1MjUsMjU2MTMxLjM0NTA0MzQ0NTg1LDQ1NDU0MC42NDM3NDY0OTczNCw1Nzc4My44ODU1NjIyNDU0Myw1NTk0OTIuMjk0Nzc1NjE5MywyNjc2Ny4xMDY1Mzg0NDQwMyw1NTg5My43ODc3NDgxNzA2NCw2NzYwMi4yMDg0MzIyMzgwOCw1ODk1MjUuNjA0NjY1MjQzMiw2NzMzNS44Njc0NjA3NDk5LDE5OC45NjUwMjQ2NTY0MjQyLDI0NDkuNDE3OTQzNDc4MjUxLDYzMDY1LjE0MDU5MjU0NDczLDIzNS45MzY2OTU2MTAxNjA3LDM0NC43NDMzNzI1Njk3MjM0LDQ1NzguNjc2NjMzODMxMjUsMzIwNDI4LjQwMzE5Mjc3NzMsMjQ2NjYuMjQ3NjY0NzY1MDEsNDY5Ljg3ODI0MjA2ODU2MzYKKzI0LFRodSAxNyBGZWIgMTEsOTUxOS4xMDExNzQ1MDQ3ODUsNjQ2Ljk2NjI2OTQ5NjYwODEsMTQ4MzcuMDE4Nzc2MDI4NDQzLDE1NjA4LjMwNDcwMDAyMTYyMSwyOTMzOS4yNzcxMzQzODQzOSwxNTM4ODcuNjUyMDQwMTI3OTMsNDI1MDA2LjA4MTUzMDY2MjY2LDMxMjkwNC4yMzEwOTk1OTM2LDMxMjc4Mi4zMTQ5ODQ2NTUyLDQzMzc3Ni45OTc5MDk5NjkzNiw0MzUzNS4xMjU0MDE4OTQ2LDUxNDE5OS44ODAxNzc1MDk2LDM4MjcwLjIwODg5MTQ4MjU5LDgwODgyLjE3NDAzODc4NDg0LDkxNTQ1LjA1NDE0NTY4MzY1LDU3MDY2OS4xNjQ4ODIyNDk4LDkyNDgyLjk1NDU5NTc3MTMzLDI4Ni4yNzI1NjYzMjkwNDYsMzcxMi45OTMyNzQ4MzkyMzkzLDg1MDUyLjEyNDQ0MjY0NDgxLDM0My44NjY2OTE2MzY2NDQ0LDUyMi4wNDYzODk1NDUxODQ2LDcwODguMTc4MzAyMDY1MTYyLDIzMjk3Mi4xMzQ5MDMwMDA2LDE4MDg0LjQyNzkxNjEzMDU5LDUyMC4xODU3MzQ3MDc3MDg3CisyNSxGcmkgMTggRmViIDExLDEwOTgwLjc3NDAyNjU4MDEyOCw5MzAuODE4NDM5MDg0MzQ4OSwxMjk5NS41MzA1NDA1Mjk3LDE4NDI1LjI4NDY0NDcwMDEzLDI0NDQxLjI2MDk4MzYyMzA2MiwyMDg1MjYuNDE4NTk0NzA2NDMsNDk1NzU5LjI0NzA4MDY0NDYsMzc1NzQ5LjQ1NDA3Njk0ODA1LDM2MTY0OS4wMzg3NjA5NjMsMzg2OTgzLjcyNDc2NDE3MTgsMzE0ODQuNjQzNDM5OTg2Mzg3LDQzODM3NS4yOTE0MjUwMzI2LDUyOTU3LjU4MzkxMTk3MzI5LDExMzc0NC40MjEzNjUxOTc3OCwxMjA3NDkuNDc4MjYwNjM5OTgsNTE1MzQ5LjY3OTU0MjIxMTEsMTI0NTM4Ljk4MjM3MDUxNjIxLDQwNy40OTczMzM2ODc5NjI4NSw1NTYxLjg3NTYxODIwNzUwMSwxMTE2NzAuNTYyNTU3NzE3Niw0OTYuMzg4MjgxNTg2NjE4OCw3ODQuMjEzNjI0MDA5NTg0OSwxMDgyMy41NDQxOTUwNzQ2NjgsMTY1NTAyLjk3OTcxMDI4MjczLDEyODcxLjc4MTM2NDg0NTAzNiw1NTQuMTkxODY0MDAzMzc1NgorMjYsU2F0IDE5IEZlYiAxMSwxMjMxOC4wNzk4Njk0MTI3MjQsMTMxOS44NTM2ODk2NTE4OTksMTA1MDQuOTM5NjQyMTQzNTU2LDIwODgzLjc5ODI3Mzk0MzgxNiwxODg3MS4wOTIxNzg3MDE0NzgsMjczNjc4LjEzMDMxOTUwNTksNTQzNTc2Ljk3MDU0Mzg2LDQyNjUyOC44OTE1NzY1MjUzLDM5MjIzMy45MzkyMDc3MTA0NCwzMjMzNjcuNDYxNzY4Mzk0MiwyMjE2OS45ODc0MTE1NTM3OTcsMzQ4NTAwLjIzMDA3NjkyODUsNzA0ODQuMTUwMTAyMTQ0MSwxNTQ2ODguODIwNTM1MjQ0NDUsMTU0NDg2LjM5ODY2OTI2NDgsNDM0NjIwLjQ0Njc5NTQ1NTksMTY0MTExLjQyOTc1NTg4OTM0LDU3NC41MTMxNzQzMzk5NzY4LDgyNDIuNjY0Nzk4MTczNDI0LDE0MjE0MC4wNzI1MzM2NDY3LDcxMC43NjQzNjI4MjYyOTg4LDExNzAuODMzNzAyOTgyNzc1NSwxNjMxOC4wMzI2MDM4MzI1ODQsMTE2MzQ3LjM2NTQ0ODY4NzQzLDkwMTYuNTY2Mjk0OTI0MDYzLDU2NS4xMDczMDc1OTkxNTY4CisyNyxTdW4gMjAgRmViIDExLDEzNDQ5LjQ0ODY3NTY4MTY1NSwxODQ0LjA0OTE1MzczMDAzMzYsNzkyMC41NDk0MDk2MjU0NDgsMjI2OTQuNDgzMjM3Mjc0NTI2LDEzNzA0LjA0MDc1MjYwNzI0MSwzNDU3ODUuMzQyOTA5NTExNzYsNTU1NzIwLjc3MjYzODQ1NjQsNDUzNjgzLjE2MDg2NjA0NTEsMzk1Nzk0Ljk0MDAxNDMxODEsMjU0ODM2Ljk5NzUzMzc5MTcsMTU0MDYuMzE0MDg4NzAwNTAxLDI2MTIxNC41Mzg2NzI2MzYzOCw4OTUwNi42MzUzMTY5NTQwMSwyMDIwOTYuNzg5Mzg0MTAzNzYsMTkwNzM2LjQxNjcxNjAwNDE0LDM0NDUxNS42Mzg0NDIyNzE0LDIxMTEyOC42MzY4Nzk4MzQ2NCw4MDMuNDMyMDM1MTcwODQyMywxMjA5NC4zNTMyOTU0MDA2MTMsMTc0NTEzLjc1NTQ2NTY2NDIzLDEwMTEuMTU5ODMyODQ3NzMyMSwxNzM5Ljc4MzAzMjg2ODA0OTMsMjQyODcuMTYzNzk0MjQyMTQ4LDgxODM1LjIyMzE5MDI1NzIxLDYyOTIuMDcyNjEzODI3NDUzLDU0Ny42NzQ0OTU5MjcwMzQ1CisyOCxNb24gMjEgRmViIDExLDE0MzIxLjk0MzgwMDU2NzczNSwyNTM2LjQyMzM3MjkzMDkxMDMsNTY1OC41Mzg5MjQxMjExMzcsMjM2NDAuNzM0NjQ4ODEyNzksOTUyOC4wNzg4MjYyMTExNTEsNDE3MjgyLjY3Mzc3MTY1NDk1LDUyNjUwMy45MTg3MzQ5NDg0LDQ0ODYyMS45NzI5NTE2ODUxLDM2OTQ3MS4xOTY5NTkxOTEsMTkxNDQ3LjIzNDg3NDYyOTEyLDEwNjkwLjg3ODAwOTg5MzE2NiwxODczMjIuNzQwMTg1NjQ3NSwxMDczNTEuMDY2NjkyOTQ0NTQsMjUxNDE0LjMwODA4MzUwMjQzLDIyNTcwNy45MDA3MzcyNTQ0LDI1OTQ5My42NjIxMDk1Mzc1NywyNjQxOTIuNDUwNzczNjIzMywxMTE1Ljg0NDAwODM5OTAwMywxNzU2NS45NjM3NTI1NDQwNjMsMjA1Mjk5LjczNDAyNzM3MzgsMTQzMS4wMTA5MjI1NjE5Njg4LDI1NzQuMTYxOTE5MDcyMjUwNCwzNTYzMS45NTA1NDk3NTI0OTUsNTgwOTYuNDE3NTI4NzMyNDYsNDQxOC4xMzgwMTg5NDY3MjIsNTAwLjg1NzgzMzkxNjQyNTIKKzI5LFR1ZSAyMiBGZWIgMTEsMTQ5MTMuNTk3NTI3MjI2OTI2LDM0MjguOTc0MDAzMTQzMTI3NCwzODk4LjQ4NzYzOTk2Njk5NjUsMjM2MjIuMjIyMTYyMjI1ODA0LDY0NTYuMjMxMTc0NTAyODE1LDQ3NjQ1OS4wMTAxOTM2NTE2Niw0NjEyMjIuOTc0ODQ1MzAzMzQsNDEwMjg1Ljg5NjI2OTE1MjM1LDMxODY0Ny4yMzg3NzM5NDc5LDEzODg3Mi45NDM1ODY2Nzg4Myw3NDc4Ljk1MjA4MjQ0MDk5OCwxMzA1NTMuMTE5NTQ5NzM2ODIsMTIwMjI1LjQxODcxMTY3NjE2LDI5NDY5Mi45MTk1MTMyMTI2MywyNTM3ODkuOTg1NDEyOTg5ODYsMTg4MjM4LjgxOTc5MTk1NTY0LDMxOTc4MS41MTQxNTQ3NDMxNywxNTQwLjM4ODI2NjQxMDU5NzcsMjUyMzAuMTMwOTQ0NjcwMjk0LDIyOTQ5NC4zODMxNDcxODQ3LDIwMTYuMjY1NjgzOTM4Mzg3LDM3OTEuOTU0OTQzNDk3OTIxLDUxNDA1LjEwMDM3MTY2MjU1LDQxODgxLjUyODg4Mzk2Mzk3NiwzMTQ0Ljg4NjkyMzgwMTU1MjMsNDMwLjE4NzgyNTAyODc4NDgKKzMwLFdlZCAyMyBGZWIgMTEsMTUyMjMuNzQ3MzMyMDAwMSw0NTQ2LjE2MjU2OTgzODUzMywyNjM0LjI5Njg1MjU2NjAzNDQsMjI2NjguODIyMTIyNDUyMDU3LDQzMzEuNjAzNDU2MDc4NzQ5LDUwOTcyMS44MTMyODY2ODA4NCwzNzQ4NDcuMzQ3OTg2OTk5MiwzNDY5NzcuMTY4NDAwNjM2MSwyNTUxMDQuMjIzNDAyODA2OTcsOTg1NTMuNTk0NTY1NjMwOTYsNTMxMC45MDA4NTQ5OTMwMDk1LDg5NzQwLjk2NzkwNjczMDg2LDEyNDM3NS45Mjc1MTcyMTEwOCwzMjE4OTkuOTA0NzA0MzM2NSwyNjg1NDAuNzE1OTg4NDQxOCwxMzMzNzMuMjkxMjkyMDY1NzgsMzcxNjc4Ljg5NzU0Njk0NTE0LDIxMTQuOTcxMjA0MDIzMDcsMzU3ODkuODg4NjU0MzE0MzksMjQxNTI0LjQ5MTkzMzU2MDEyLDI4MzAuMTQ5MjkxNzYxNjY0Miw1NTU5Ljk1MDM0MzY0Mzk4Myw3MjcyMy41ODc4ODczNDMwOSwzMDc1OS45NTg5MjA3MDE0OCwyMjc5LjgyNzM5NzgwODAyLDM0Ny4xNDAzMTMzNzYyOTQzMworMzEsVGh1IDI0IEZlYiAxMSwxNTI1OC41MDEwMTExNTM2NjcsNTg5NS44MjMyNzY0MzkzMjE1LDE3NzEuNzE1MjM1MTg3NTAzNiwyMDkyNS45Njc4MDg3MDE2OTUsMjkxNS41NTM2NDU0NDQ2MzM3LDUwNjU4Mi40NzI2OTg3MTA5LDI4NTMzMS4xMjg4MDQ0OTQzNCwyNzMwNDYuODM3MjEyNjg0NSwxOTE2NDYuNDMxMjIwNTU4OTcsNjkyNjMuOTkzMTM5NTg1MTcsMzg0My42ODQwMTg2MDA1OTc1LDYxNjIxLjUxNDkwMzAyMDkxNCwxMTc5NDIuMDAzOTA3NDExMTgsMzI0NTIwLjk0OTU2OTAwODQzLDI2NDk1OS40NTI3NTczODk4LDkzNTMxLjk0NDE5MzMyMSw0MTEyNjEuMzc3NzM0Mjk0NiwyODg5Ljg3NDk1MTMwOTY5Miw1MDA2OC44NjU2MTc5NDQ5OCwyMzcyNDkuNzU1OTU2OTA0NSwzOTYwLjA3NzQyNTYyNjA0NTYsODExMy4wNjE2OTkxNzIwNDM1LDEwMDU5OC40MzA1NTI1NTk3NiwyMzAzMi4yMzE5Njk2NjQ0MSwxNjg2LjMyMTg5MjY5Njk0NjYsMjY0Ljg4ODc5NDM3MTMyOTEKKzMyLEZyaSAyNSBGZWIgMTEsMTUwMjEuMzYzNzk1ODEzODM1LDc0NTguMzIwOTExMDI2MDcwNSwxMjAwLjIwOTUxNDk1MTM2MjMsMTg2MjAuNTA0MjIzMDE1NiwxOTg4Ljc3ODE4NDkxMDMyNCw0NjUyODIuNjM2MzA1MzgyMSwyMDYzMDcuNjg0NDc0Mjk4MzIsMjAyMzcyLjMyNDYyNTEyMjk0LDEzNzE0NC4xMzE4MDY4MjIxNCw0ODcxNS44MTM5MTg4Nzg3NywyODM4Ljc3MzcyNjg3OTk4LDQyNzAwLjEzNTM2Mzc2MTEyLDEwMjMwNy4zNjcyODMwNzc4MSwzMDAxMTIuMDIxNzM5NjAxMDQsMjQyMjE3Ljg3MTg2NDA0NDM0LDY1Njc1LjgzNDUxNDY3MDA0LDQyOTMxNy45MDk4OTI0NDg1LDM5MzEuODEyNDI1NTYzNDYwNyw2ODk2NS4yNzg5OTc5NDU1NiwyMTYyNDcuOTM3MjMwOTI2OSw1NTI3LjE4ODkwMTUzMTI5NCwxMTc3OS4yMzc1Mjk1ODEyOTYsMTM1NjQyLjA1ODM0MjY4MDk1LDE3NTU3LjkzODU5MDMyNjg3OCwxMjcyLjAzNDYwMjQzNDEwMDIsMTkzLjMzODg2NTEyMDU1NjAyCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0RlbW9ncmFwaGljU0VJUkRpc2Vhc2VfRkRfUmVmZXJlbmNlL0ZsdS93b21lbi9JXzIuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9EZW1vZ3JhcGhpY1NFSVJEaXNlYXNlX0ZEX1JlZmVyZW5jZS9GbHUvd29tZW4vSV8yLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNGE4OTMxCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9EZW1vZ3JhcGhpY1NFSVJEaXNlYXNlX0ZEX1JlZmVyZW5jZS9GbHUvd29tZW4vSV8yLmNzdgpAQCAtMCwwICsxLDMzIEBACitpdGVyYXRpb24sdGltZSxFRy1GUkctRzIxMDAwMSxFRy1GUkctRzIxMDAwMixFRy1GUkctRzIxMDAwMyxFRy1GUkctRzIxMDAwNCxFRy1GUkctRzIxMDAwNSxFRy1MT0UtRzI0MDAwMSxFRy1MT0UtRzI0MDAwMixFRy1MT0UtRzI0MDAwMyxFRy1MT0UtRzI0MDAwNCxFRy1MT0UtRzI0MDAwNSxFRy1MT0UtRzI0MDAwNixFRy1MT0UtRzI0MDAwNyxFRy1MT0UtRzI0MDAwOCxFRy1MT0UtRzI0MDAwOSxFRy1VUEUtRzI5MDAwMSxFRy1VUEUtRzI5MDAwMixFRy1VUEUtRzI5MDAwMyxFRy1VUEUtRzI5MDAwNCxFRy1VUEUtRzI5MDAwNSxFRy1VUEUtRzI5MDAwNixFRy1VUEUtRzI5MDAwNyxFRy1VUEUtRzI5MDAwOCxFRy1VUkctRzMwMDAwMSxFRy1VUkctRzMwMDAwMixFRy1VUkctRzMwMDAwMyxFRy1VUkctRzMwMDAwNAorMSxUdWUgMjUgSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsNDIwNzUuNDc1MTc2MDQ0OTQsMC4wLDAuMAorMixXZWQgMjYgSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMjUyNDMuNjQ0MTYyMDk1MDk3LDAuMCwwLjAKKzMsVGh1IDI3IEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDE1MTQ1LjIwMTk5NTEzNDczNywwLjAsMC4wCis0LEZyaSAyOCBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCw5MDg2LjUzMDUzNDIwMzAzMSwwLjAsMC4wCis1LFNhdCAyOSBKYW4gMTEsNC4yMDAwNDk3Mjg4MjI4ODcsMC4wLDcuNzE2ODMxNzk5MDQxNDQyLDMuMDE3MTU5MjUxOTc5ODY1LDE4LjczNzEyMzkyMDQzNDUyLDUuNDYzNzI4MzU4NTIxMDY4LDQ3LjY2NzY4Mjk0MDM5OTAyLDMxLjQ1MjgxMjMyODUwNzU0NCwzNy40ODM5MzQyOTMyNjM0NSw5MjEuNTM2NjQ0MTAwODM0MSw2OTQuNjI1MTgyOTM5MTE0NCwxMDU4Ljg3NjA3NTcwMDc2ODMsMC4wLDAuMCw2LjAwNjQ0MjQwMTQ1NTQyMyw5OTkuNzE2MzIyMjY0MzQxNyw1LjkxOTI3MTc3NjU0MDY4MzUsMC4wLDAuMCw1LjgxMzU0NTc5NzYzNjE3NiwwLjAsMC4wLDAuMCwxOTQ2NC4wMjE3MzkwNjM2NTcsNTM1Ljk3NTE5MzU0MjYzNjQsMC4zNDc0MzI1OTcyNzUzMDA0Cis2LFN1biAzMCBKYW4gMTEsMTIuMTcyMzkzNjYyNzYxMjMsMC4wLDIyLjM1NTU0NDAwMzE3Mjc5Miw4Ljc0ODAxNjkwNTUxMzEzNCw1NC4yOTAxNjQ0ODQxODEwNSwxNS44NDE5ODQ0NzkwMTc0NDQsMTM4LjIwNjE3NTAxMTQwMTksOTEuMTkzMzI5Mjc0ODcyOSwxMDguNjc5NDc0MTkyODI3NTEsMjY2Ny42NTU5MDA5NTU5MjIsMjAwNy43NjQ3OTkwNTgxOTIyLDMwNjUuNDczOTk1MzE2MzgzLDAuMCwwLjAsMTcuNDE1NTI2ODk3OTg2MTYsMjg5NC4zMTM2NTU4NzIxMzksMTcuMTYyODE1MjU3OTI3MDA4LDAuMCwwLjAsMTYuODU2MjIyMDEwNTM3NjM1LDAuMCwwLjAsMC4wLDQzNjQyLjQxODUyMTE5ODc5LDE1NDcuNjgyNjg0MjEyNDQ1NiwxLjAwNjgxNjE4NDc1NTMwOAorNyxNb24gMzEgSmFuIDExLDIxLjIyNjI5NTYxMzQ1OTk2NCwwLjAsMzguOTY3NjUwMjMyODcwNDgsMTUuMjYwNzU3OTIzODA0MTI2LDk0LjY0NDcyNTA1MTg4MDQ3LDI3LjYzNjk2MzA5MTUzOTg3LDI0MS4wOTQ3NjYxMzA4NjU5MywxNTkuMDgzMzc4MDcxMjE1MDcsMTg5LjU4NjAxMTcyNzQzNjMsNDY0NS44MzM1MTM5MzA5NiwzNDg5LjAzMTE1NTQ0NjcyNTMsNTMzOS4wODA4MDM1OTk1MzIsMC4wLDAuMCwzMC4zODE5NDAwOTE3NTUzMzIsNTA0MS4zMzA1OTI4OTgwNjMsMjkuOTQxMTc4NjA4OTI5MzQsMC4wLDAuMCwyOS40MDYxOTgzMDk4NjUwMywwLjAsMC4wLDAuMCw3MTgwMy4yOTY1MDE0MzcxNCwyNjg1Ljc3MzIyNzg0MzExNjMsMS43NTU0MzEyNjUyNTY3NjgzCis4LFR1ZSAxIEZlYiAxMSwyOC44NzA2NzQ1NTE1Mjc5NiwwLjAsNTIuOTc5NjI1ODg1MzU4MTQ2LDIwLjc2Mzg2ODk5NTU2ODM0OCwxMjguNjkwMDc5ODg5MjA5MDQsMzcuNjA0NTE5NzI5MDM2NDc1LDMyOC4wMzEyNDk2Mjc1NTg0NSwyMTYuNDQ4NDQxOTUyNzU1NjcsMjU3Ljk0Nzc5MzA1MTM4NTIsNjMxMC4zMzEzMDA1OTkzMDk1LDQ3MjYuODQzNzE0NDQxMTExLDcyNTIuNTIyMTkwODM5MDc5NSwwLjAsMC4wLDQxLjMzOTI4NDA3Mjg4NDA2LDY4NDguNjk2NTA1NTcxNjExLDQwLjczOTczMTU0OTUzNjQzLDAuMCwwLjAsNDAuMDExNjEwMDEwMTQ2NTcsMC4wLDAuMCwwLjAsOTUyOTUuMTU1MzMzOTM4NzgsMzYzMi42MTE5OTg2NzE4NDcyLDIuMzg3MTkyNjg2NDc4OTk4Cis5LFdlZCAyIEZlYiAxMSwzOC4wNzg1MjE5MDIzNDU1NSwwLjA0MTYyNTA3NDkwNTc3Nzc1Niw3My44MTg1ODE5NjkzMDA1MSwyOC41OTQxMjc3NTM0NzkzOSwxNzkuNzQ5ODQ0NTI5ODkxODUsNTguODEyODgxNTU2MTExMjgsNDcyLjE5NDM4MTI2OTg0MTg3LDMxMi4wOTg3OTQ4MTI2OTY1NSwzNjkuOTEzMTI0OTkwMjI0Miw3OTI2Ljk3OTg1Mzg4MTcyNyw1ODU3Ljg1MTczMDU4MzQ5OSw5MTczLjY0MzI2Mzg2MzM5LDIuMDUwMjAwMTUwMzQ1MjAyOCw0LjA5MDQ3MDgwNjk4NDY2Miw2MC42MjIxODE1OTc1MzM5OTUsODY0MC4yNTgyNDkwNTQ5ODcsNTkuNjUwMzMxMTQ1NTM2ODk2LDAuMDIzMTQ2OTQ0NDEyOTQ4NDA3LDAuMTUyNzg5NzUzMjMxNTExMDMsNTguNTQ4MDU1NjY0NjIyNjksMC4wMjQ3OTY1OTY5NzU1MDIxMiwwLjAyNTgzMjA1MzYyMjc2OTY1NiwwLjIwMjE5NzYzOTY1MzAwODIsMTE0MDk1LjM2ODc5NjM4NTc0LDQ0NjEuOTQ4NzgwODQxNTQ5LDMuMTE5NTI3NzQ1NzEyMzg5OAorMTAsVGh1IDMgRmViIDExLDU4LjAzMzczOTkyMTIwOTI3NSwwLjIxNjMxMzEyODE3MTUyMTU0LDEyNi45NjgxMDY3NDMyNzc5NCw0OC4wMDQ4NzM4OTY0ODU1NiwzMTAuNjgwMDM5ODU3NjMzOCwxMjMuNDU2ODc2ODg1NzI0NzUsODY0LjY4ODc0OTI0NzUzNDEsNTczLjI5Mzk5NjkyNDgxNTUsNjcyLjY5MjM3NDU0NDM4OTYsMTA2NTcuNjI4MTczNTU2MTU3LDc2MDUuNzIyOTE0ODU0NTM5LDEyNTc0LjE0NTA2MjMwNjEwNiwxMC42NTQ0MTg5MTE3MDUzMDcsMjEuMjU3NDIyODYyMDA0NDMsMTE0Ljc2NjEyMjQ5ODU0ODIsMTE3NTUuMjM3NjUwMTQ0NTA3LDExMi42MjAzNjg2NzA1MDQxMiwwLjEyMDIyMzE1NzAyMDIxODcxLDAuNzkzOTk2OTY3NzgxMTE0NSwxMTAuNDE5MzI5OTcwNzE2MDYsMC4xMjg3OTM1NTk0MTI4NTkyNSwwLjEzNDE3OTU2Mjk0MTgzNzM2LDEuMDUwODkzNDAyMzg2NDczMywxMzY4MTcuNzg3MDcxNDAzNzMsNTY1OC41ODUxODI0NDU3MjYsNC42NDg1NDk5MDg5NTY5MTEKKzExLEZyaSA0IEZlYiAxMSw5OS40OTMyOTQ1Mjk4OTgwMSwwLjYyNTY1MTY0MTUxOTM5NTMsMjQxLjQzNzQ2MDcxMzU2NzY3LDg5LjcyMDU1MzMyMDg0OTEyLDU5My4wMjI4NTY5ODQ3NjMzLDI2OC4xMjI4ODY3NjExMzM2LDE3MjQuNjk1ODE4NzIzNzc3MiwxMTQ1Ljk5MzcxNjk2NTY0NzMsMTMzNS4yMzg5NTg2NjA3MzkyLDE1OTEyLjEzMzMwODUyODAyLDEwODM4LjE1NDA3NzU2MTQ0NywxOTIyMy4yOTA4MDYxODk4LDMwLjgxNTUxNjI1MTE1MTE2Niw2MS40ODMzMTkwNDQ5NTk2ODYsMjM0LjE1MDM2ODM0OTkxMTYyLDE3ODEyLjEwMzUyOTMxMzkwMywyMjkuMzY2ODA0MjY2NDY3NjIsMC4zNDc0OTY5NDk1MDQyNDgzNiwyLjI5NjQ2Mzk4NzI3ODcwMywyMjQuNzE3Nzc0NjUxMTcwNSwwLjM3MjI3Njk4ODM2NjI3NzksMC4zODc4NzEwNTE3Mjg0ODQzNSwzLjAzOTk0NDAzNjgyNjEwMzMsMTc0MjgyLjY0NTMyNzY1MjE2LDc4MDQuNjQ3MTM5NTkzOTU1LDcuNzg5ODk2MjU4MjQ5MTI4CisxMixTYXQgNSBGZWIgMTEsMTY4LjkxODI3MTY5ODM4NzIzLDEuMzI5NDg2ODI2MDY5MTgzMiw0MzMuNzQyMDA0Mjg5NjAyNTYsMTYwLjI0MjI0MTIxNTExNTcsMTA2Ny40NTQ1ODEwNDY1NTcsNTE0LjczNDg3MzI0NTIxLDMxODMuODA5MDk1MTQxMjY0LDIxMTcuOTQ1MzQxODQzMzM3MiwyNDU5LjAyOTI5NDIxMzUzMSwyNDUzOS40MDcwODc5NjkzNDYsMTYwMjEuNTMyNTM1NTMxOTQ0LDMwMTc2LjU2NTI3OTc3MzIzMyw2NS40NzczNjU2ODc1NDI1NCwxMzAuNjQ0MjQ5ODAwOTUyOCw0MzcuMDc3NDE4Nzc2NjMwNDUsMjc3ODcuMDgzODc1OTA3OTkyLDQyNy44MDk0MjI0NjMzNDg5NCwwLjczNzg1ODc5ODE0MDg2MDYsNC44Nzk3NTY0MTMxNzU2MTksNDE4Ljk3Mjc5MDUxNjU2MzksMC43OTA0OTQ2NDYzNTc0MjMyLDAuODIzNjY3NDA5OTU3NzI5Miw2LjQ2MDY1MTQ2MDY1NzQ3MSwyMzIwNzMuNTI4MjA2NDYyOCwxMTE5OS4wNzUyODk2NjIyMTgsMTMuMDI0NzU5NDczMzAxMTQ0CisxMyxTdW4gNiBGZWIgMTEsMjY3LjMwNDQxMDg4ODE1MDI0LDIuMzY3NzY5MzUyNDgyOTU3NSw3MDYuNTA3OTc0NTkwOTQyNCwyNjEuMjY0MzQwMzczOTAxODYsMTc0MC4xNzAwMTIyNjI0MzgsODc0LjQ3MTc4MzYwNzgwMTQsNTI4Ny4zNTc5MjAwMTI3MzMsMzUyMC4xNzU2NjE2MjYwOTIsNDA3OC4wNDgwOTExMTExNzA0LDM2NjE1LjAxMjkyMjU2MDI5LDIzMDQ4LjU0MzMwNTE1Njc1Miw0NTUzMy4wNzkzODY2MjczLDExNy4xMzk4NTQ5ODg1NzE0MywyMzMuODI0MzQ3MDMzNTcyNSw3MzAuODc4ODU2MTYxODEyMiw0MTc4NC45ODAwNzMwOTk2MzYsNzE1LjA3MDQ2OTY4MTYyOTIsMS4zMDk3OTIyMzkyNzczNzA5LDguNzQ0Mzk2NjY4OTE4MjE3LDcwMC4wODcxMjQ0NTQ2NDIzLDEuNDA0NzIzMjkwMjk2MTI3NywxLjQ2OTQwMTcwMTU0Njk1NTYsMTEuNjU5Nzc5MTk3MjQzNTE2LDMwNzkzMS4wMDg4MjIwNDQsMTU3MzAuNTUxNTgxNDMzOTksMjAuNDE0MTQ0NjA1MDI2OTE2CisxNCxNb24gNyBGZWIgMTEsMzk1LjYzMzI1MTM3MDIyNjMsMy44OTE4MTM3NDc4Njg5NzQ3LDEwNjcuNTk0MjU3MjQ4Nzc0NSwzOTYuNDgxMjk2MDMzNjYxLDI2MjkuNzM3NzQ2MjUxNzIzNCwxMzg1LjQzMTYzNjUwMzc4MzIsODE2NS44MzIwMjY1NjEzNTUsNTQ0Mi42MjE2NTMzMzEzMzYsNjI4OC40NDIwNTE2MDQzMTMsNTIwNTQuNzU3NjQwNTU1NTEsMzE1NjMuMTY5NzAwMDM4MTAzLDY1MjYwLjkzMTQxNTQ4ODIzLDE5NS42NjU2NDkwNzU3MzQyOCwzOTEuMTI0MTc5NDI4NjQxMjQsMTEzNy45MTAzNjg0MzgxMTQsNTk3NzIuODEzNDUxNzExNTYsMTExMi42OTUyMDIxODExNTAzLDIuMTMyMTA2MDg5NTUxNTI1NiwxNC42ODg1MTk1NTk2NzEyMjgsMTA4OC45MjgwNjU4NDI2MzYyLDIuMjk1MjU3NzEzOTg3MDk1LDIuNDM0MDYwMzUwNzU3MDAzNiwyMC4wNTY4NzU0MjQ2NDUwMiwzOTUyNTYuNDg1MDc2OTQ5NywyMTA4My4wNDI2OTEyNjU5NiwzMC4wMjYzNDYyODM0MjEwNQorMTUsVHVlIDggRmViIDExLDU2Mi45MTM0OTgyNDU2NTI2LDYuMzM0MDg3NTAxODA1OTEsMTU1NS40NTkwMzUyMTE4MTk0LDU4MS4zMjY2OTQ4Mjg2NzI3LDM4MjguOTI2MTMwMjg5MzA2NSwyMTYyLjUyNzI1OTE1NzE0MSwxMjI2OS43OTM0MjM5NTI5MjgsODE5Mi42NzIwMjcwNzc0NDgsOTQyNi44MDg3MTEwNzkwMDcsNzE1MjguMTAwNTY0NTM2MTEsNDE0MjcuNTgyMDE4MTY5NTEsOTAzOTQuOTQzMTg1NTU2MjQsMzI4LjEyNjUwMzcyMDExMTYsNjU3LjU4MzE1NTY1NzczMjcsMTczMC45NTUzNzY5MzAyNjkzLDgyNjY0LjczMTU0Mzg4MzIzLDE2OTEuMDk0ODQ1MjM2MjgsMy40MDgzNDk4OTYzNDA4ODgsMjQuODgzMjE4NDc2NjM1NzA1LDE2NTMuODgxNDAxNTg4MTU5MiwzLjY5NTk2Mzc2ODg5NTE5OTQsNC4wMjIyMTY1MzA2OTMwNTIsMzUuMzk4NTA3MDQyNDY0NSw0ODgzODQuNzYxODE0OTYwNDUsMjcwMzQuNDQyMTI0ODYxODEzLDQyLjU0NDU5MjY4MTg5MzM3CisxNixXZWQgOSBGZWIgMTEsNzkwLjI0MDQyNTg0OTM4OTYsMTAuNDkyMTY0MzQ3NTc5MjI3LDIyNDcuNTIwNDQ3ODYwOTk5LDg0OC4wNDg4NTc4MDM3NjE0LDU1MjMuNTA1MjA1NTg0OTExLDM0MjIuMjAwMjg2NDE1NTc1NiwxODQ4NC44ODgyNzE0NjI2NSwxMjM3My45ODQzMzc5OTYzMiwxNDE1Ny44MDQ2Mzc3NDY2OTYsOTY4NDIuNjM0NDc0MzkwMiw1MjgzMi43MTI1NDI5NzE5MywxMjM1MDMuMjA3MzA2MzIzMTcsNTYzLjM4NDc2OTA3NDY3NjksMTEzMi40NzYyODE1MzY0MDUyLDI2NTEuMjgzNjgwOTYzMTAyNiwxMTI3ODUuNTg5Mjc0NjA2MDEsMjU4Ny4zMDA3NjQwNDQ4MjYsNS41MTgxOTc1OTg1Mjk5MTI1LDQzLjIzNzk2NjM5NTg2NzYzLDI1MjcuOTg3NzM2NDI0ODMxNCw2LjA0MDE4NzAxNDUwOTc2LDYuNzg4MDQxMDUzNzM3Njk4LDY0LjMyOTUzOTA5ODQ1Mzk0LDU4NDIwMy4xNTA5OTQ1MDI4LDMzNTMwLjIzODQzNTgyMTAyNiw1OS41MjExNDI4NDA5NjIwNAorMTcsVGh1IDEwIEZlYiAxMSwxMTA3LjQ4ODk0NTA2ODcwMjgsMTcuNDgxMDUyNTM0MjA5ODIsMzIzOS45MzQzNjk5NzU2NjcsMTI0Mi4yMzgwMjQ4NTEyMzIyLDc5MzguNjE0ODIyMTE2NTUxLDU0NjYuOTI1NTAyNDc1NTM4LDI4MDM4Ljk0NjI2ODM0OTQ1LDE4ODI3LjU3MjM1MTI0MTIzNywyMTQwMy41MjUxOTEzMzAxMzMsMTMwMzgxLjExNjg3MDE5MjcsNjU4NzguMjQ4MzgzNzU4NDQsMTY3ODYzLjgzOTQ2MjcxNTgsOTY5LjAyNzgzOTk4NTU0NDIsMTk1My4zMDQ3OTc0ODQ1MTU2LDQwOTcuNDY5OTk3NDA0MjkxNSwxNTMyMTYuMTcxNDc4MTA3NiwzOTk0LjUyMzU0NTAxOTA1NTcsOC45OTA5MzAxNjYwMTI0MDgsNzUuMTk1NDgzNjAzNDA0ODIsMzg5OC4yNzk0NDI1OTk3NzIsOS45MzE2NDc1MjU3OTUxMTgsMTEuNTAzNzIwMTIyODUyMDA5LDExNi4wOTU1NDcwMzI5ODMxOCw2Nzg5MTMuNTMwODI3NTcwOSw0MDQ0NC42MzM1NTQ2OTIyNiw4My4wMTI3MzYzMDA0MDUwMgorMTgsRnJpIDExIEZlYiAxMSwxNTQ1LjQxMjc3OTc3NTg2NTEsMjguNjY3MjI1MDY3MTQ5NTA2LDQ2MDkuOTQ4OTYzMzUwODY2LDE4MTQuNDA1MzMwMTYyMTA3LDExMjM5LjY5MzgyOTY2NDc2Miw4NjU5LjY2NTAxODM0MzUxMiw0MjMwNi4xOTAyMzQyNzgzOTQsMjg1MDcuOTAwMDQ3OTQ5Mzg0LDMyMTkyLjQzMDEwNjY4MDQ5LDE3MzkyMi45OTg4ODM2MzgxNSw3OTk0MC4xODA5MTA2MDI2MywyMjU4MDUuMzkyMzkxNDUzMTgsMTYyOC4xODk2NDY1Njk4NTMzLDMyOTAuMDQ4MDY1ODk4NDIyNSw2MzAzLjExNTU2MzcxNTU5NSwyMDY0MDUuODYzMjI2MTU4NTIsNjE0MS4xMzE1Nzg2OTA1NiwxNC40NjIyOTk1Mjk2NTAxLDEyNy42MTMxNDU4MjE4MDQyNSw1OTg0LjI0MzYwMzk5NjExOCwxNi4xMDE5NTQxMzc3NTkyNywxOS4xMzU4OTQ4MjQ3NTk0NCwyMDIuNjUwNjgxOTM4Njk3NjMsNzYzODA0Ljk5MjA4Mzk3MzMsNDcyNTUuMTgxNTc1NTE2NTE1LDExNC44NDM0NDk0MzQ0ODMzCisxOSxTYXQgMTIgRmViIDExLDIxMjkuNDQ5NzA5MTM4MDAyNiw0NS43ODgwMjYzMzYzMTA2OCw2Mzg0LjQzMTE5NDE1Njk2NSwyNjE0LjUxMDkzOTEwNzcyMzUsMTU0NDYuOTc3NzE5NjI5NjI3LDEzNDQzLjM2Nzc4NDI0MDkwMyw2MjcxOS41MDc4MDc5NzA4ODQsNDI0MzkuMDU0MDEyNjY3MTcsNDc1ODUuNzYyMjU4NTk5MSwyMjc2MDguMzQ5NzI3MzA4MzgsOTMzNzYuMDYzNjgzNTc2ODIsMjk3MjQzLjA0Mjc3ODQ3NCwyNjQ5LjA1Nzc2NDYyMTg0MTcsNTM2Ni4wNTI2NzgxNTg3NDEsOTUzOC41NjYxMjM5MjM4NTQsMjcyOTQxLjA5NTE4ODcxMzA1LDkyOTMuMjgwNzIxMTI1Mjk1LDIyLjcwOTI2NjI4NDEzNTIwNCwyMDkuODMzMjcwNzM2NjUyMTQsOTAzOC4zMzE1MzcwNzE2NTUsMjUuNDY1NzIzNjI0MzEyNjIzLDMwLjk4NzgwMjQ0NDI0OTgzNCwzNDEuMjA4MjIxNDI3NjM1NDYsODI1MDU1LjQ5ODE5MDI5MDEsNTI5NjcuNDM2MDUwMjE2NjUsMTU2LjAyNzUzNDg1NjcwOTQKKzIwLFN1biAxMyBGZWIgMTEsMjg3OS4wNzc4OTQyNzE0OTE1LDcxLjM3NTI1NTE0MzkzNjU4LDg1MjYuMjg5NDAzNjYwMzk4LDM2OTMuODM5MTY0MDg0NTc3NSwyMDM5NS41ODI0NDY2NjU2NTIsMjA0MzQuNDY4Njk5NzQyMzA1LDkwODkwLjQxNTA5MjE0MTU0LDYxODIyLjQwOTA1NDQyNTMxLDY4NzU2Ljg2MzI3NzcwMzg2LDI4OTUyMi40MTY1NDUyODM3NSwxMDM4NzMuODQ2NjIxMTI4NDQsMzc5MDUzLjk1NzEyMzU3NDksNDE5My4yNzUzOTYwMTM2MTQsODUxOC43MTAyODcwMjk1NTgsMTQxNTUuODc0NzUwMjg2NTIzLDM1MTAxNy44OTY1MzA2NTUxNSwxMzgwMC43NjEwMjQ4ODE2OTgsMzQuODE4NDg3MTg1NDExMjYsMzM2LjU0NzMzMjA4MzA2NjksMTMzODYuNTk1MTI0MzEyMTMzLDM5LjMzNzYyNzk4NjA5MDkzLDQ5LjA5Mjc2NDI0MzUwOTk5LDU2MC4yNzU0OTk3NDIxNDE4LDg0ODc3OC4zODQwMDMwMDg2LDU2NDIxLjgyNjg2NzY2ODU2LDIwNi42NjE0MzczODE2ODU4MworMjEsTW9uIDE0IEZlYiAxMSwzODEwLjUyNDU0OTQ4MjE2OCwxMDkuMzk1NTc3MjgyODIxODUsMTA5MjYuMjc2NDY0OTk5MzExLDUxMDkuNzc4NjI1NzY1MTM3LDI1NzE3Ljc2NDY4MTA4MDExMiwzMDU1Ny4xMDMyNDg1Mzc1OSwxMjg3NzAuNDUzNjk3NzQ2NzcsODgxODguNzk0NzQ2MTYwMzksOTcxMDAuMDA4MzcwNTY0MiwzNTU3MjEuMjA5NzkzNzAxOCwxMDkyNjQuNzY4MTMwMzkzNDQsNDY1MDQ0LjQ3NTI1ODUyNzksNjUxNC40MDAwMzMwODQxMzksMTMyODIuOTUxOTU0ODM3NTA4LDIwNjU3LjI0NzU5OTMyNjYyMyw0MzYzNjUuODI1MjYxNjk1MywyMDE2OS4xMjU0NjI2MDY3NTMsNTIuNDUwNTMzMzQ2NzE2NTI2LDUzMS45NDkwMTYwMTI1MjkyLDE5NDkwLjg4MzI5MzMyOTI3Niw1OS43NjUyNzMzMTc3NzY0Myw3Ni43ODczNTU4ODk2MzU3OSw5MDguMTIzNjAxNzg0NTYxNCw4Mjc2NzkuNjgwMzMwNjI2MSw1Njc5MC42MzQ0MzU3MDkzMDQsMjY2LjA5MTIzMjgzMDE4NzkKKzIyLFR1ZSAxNSBGZWIgMTEsNDkzNi45NDY0NTU2NjQ1NjUsMTY1Ljg3NzEwNTg1NzEyMjI1LDEzMzgyLjk1OTE1NjIxMTQyMiw2OTIyLjgyNTA3MzIyNjU0OCwzMDgxOS43NzYxMzE3NzQwODgsNDUxMzguMzk1OTU3NzkzODQ0LDE3ODQ5Mi43MjA1MzI1NjMxNCwxMjMzNTIuOTEzMzgwMDAyMzcsMTM0MDk4Ljg4MDI2MjMwOTkyLDQyMDI3Mi40MzE2MDkwNTMxNiwxMDgzNDYuODQ1Nzk5MjI4NDIsNTQ2MDE2LjMxOTAxMjU3MSw5OTg2LjI5ODg1NzI1OTM0MiwyMDQ1OC43NTE3MjIzMjQ1NiwyOTczNy45MDIxOTUxMzIyLDUyMjA2OC45MDMxMzc3NzcyLDI5MTE0LjM0ODIyNDc5OTQsNzguMDk3OTg5OTM1NjE2NTUsODM0LjAyODk4MzAxNjk3MjgsMjc5ODYuNDEzMjc2MDE5NzksODkuODYwNzAwOTU0MTA5OTYsMTE5LjMwOTYzNjI4MjQ0MzIyLDE0NjEuNTg4Mzg4NDI4OTI1Myw3NjQ2MDkuMzQ3NDM3ODcwMyw1Mzk0MC41NjgzMTQ0MzgwMiwzMzIuOTI3MjI2Nzg4MDgyNzUKKzIzLFdlZCAxNiBGZWIgMTEsNjI2Mi40MDE5MjA2NjE4ODcsMjQ5LjM1ODM2MTIyMTY0NjkzLDE1NTg0LjMzNDA0Mjg2NzQ1MSw5MTc3LjkxNTI1NTYwNjAwMiwzNDkwMS42MTIwMjA5MTI3MjYsNjU4OTUuNTE1OTA4MjgyOTgsMjQxNjA0LjcyODE0NzY3NjYyLDE2ODk2MS44MzQ0NTE1MTM5NSwxODA3MzkuMDkwOTQwNzkwNjYsNDc1NDA0LjM4NzUwNTUwMDksMTAxMzI1LjE2Mjk1MTc5MDEzLDYxMDI5NS44MTg2NzE3MjMyLDE1MTAzLjMxMzM2OTkyNjI4NywzMTEyOS42NDcxNjE3MjMzNDcsNDIyNjAuODAyMDU2MTQzMzUsNTk4NDA5LjE0NDYyMDIwMDQsNDE1NjQuMDQ2NzMxMzQzODYsMTE1LjI2ODk3MDA3Njg3NjA3LDEyOTguNTM1NjQxMDM3NTM3NSwzOTY1NC41NDA2MzQzOTM1NCwxMzQuMDYyMDYyNzUyOTE4NzMsMTg0LjM4MTU1MDE2NjI5Nzk2LDIzMzQuNzAyNDAyNzcxNzA3LDY3MTE1OS43Mjg4MTE4MTIyLDQ4NDY0Ljc2OTg5MzkzMTg3LDQwNC43NTE1MDY1MTkwMzQ1NAorMjQsVGh1IDE3IEZlYiAxMSw3NzcxLjcwNzQ5ODA2NTk4NiwzNzEuMjI4NjU1ODU2MDY0ODUsMTcxNDAuNTY4NDgxMDQ2OTMsMTE4NzIuODg2NTgyNDE0NTk4LDM3MTI1LjY4MDgwMjU4NTMyNCw5NDc5Ny44NjQzMzYxODgyNywzMTc3MzUuNzc5MTU5OTc5NywyMjU2MjIuNzA4MjU2MTI3MzcsMjM2NTAyLjA3ODI2MTY1MDYzLDUxMjQ5NC40MTM2MDU0MzY1LDg5NjgzLjA4ODg3MDg0MTY4LDY0NTg5OS44MzcwNTM5MTU0LDIyNDQ0Ljk1MjI2MTk1NjM1OCw0NjYyMy40NjgxMTQ4ODAwMTUsNTkxNTUuOTM3Mjc4NTI0ODU2LDY1Mzc4NC45NTExNDgxMDE2LDU4NjA0Ljc0MDc3MTM1ODc0LDE2OC42MzkzOTg4ODQ1MDQ3NCwyMDAzLjc3OTcxMzQ3MTY0NzUsNTUzMjMuNzQ4MTQ5ODIzNzUsMTk4LjQwMDM1NzAzNjM4NDI0LDI4Mi45OTM0MjU1MDQxODM5NiwzNjkwLjA2ODcwNTE4NDk0MSw1NjI4ODMuODYzNjU0MDUyNCw0MTQxMC4wOTU2NDI3MTU3NjUsNDc3Ljc3NDIzOTYzNjk0ODI3CisyNSxGcmkgMTggRmViIDExLDk0MjIuMjcxOTg5NDk5NTYsNTQ2LjIwNTg1MDM0NDM2NDUsMTc3MDIuMTgxOTk0NDcxNjE1LDE0OTI3LjQyMTI1Njg4Mjg1NSwzNjk0My41OTkxNDcxOTIwODYsMTMzODE4Ljg0NzUwNTA2NzgyLDQwMzEzMi4xMTY1NjU5MzE5NCwyOTE4MTYuOTQxMjE3ODUxMjQsMjk4MjgzLjE4MDg2ODI2NTc0LDUyNDM2NS4xNTk4MzYxMTU5LDc1NTczLjkxODM4Mjk4NjM1LDY0NDYxNC42NTIyMjc0NTg5LDMyNjAxLjIwMDQ0OTc3Njg5LDY4NDEzLjM0OTU3MzA2Mzk2LDgxMjYzLjc4MjM1ODQwMjg4LDY3NzU4MC4wNTU1MTY4OTExLDgxNDAyLjAzNjE3NTgxMDgyLDI0NC4zMTMzNDU1NTg2NjkzNywzMDU4LjY4NjMxODA5Mzc4MjYsNzU3MTguMTUzNDg1MDM4ODEsMjkwLjk2NTgyMjQyNjIyODMsNDMwLjgwODIxMzMzMTUwOCw1NzU3Ljk4NjQ2MTQ2NDA0Myw0NTQxOTQuNDMzMTczMjQ5MjQsMzM4ODYuNjU2MzQ5OTY0NjksNTQ2LjczODc3Nzk0MDY3NzQKKzI2LFNhdCAxOSBGZWIgMTEsMTExNDMuMzgyNzM4MzgyMjEsNzkzLjExMTQyNzcyMDYyOTgsMTcxMTguMzg0MDgxODUwMDM2LDE4MTY4LjUxMjkwNzA1MDc1NywzNDM4NS4zNDkxNzk3NjAwNCwxODQ1NDkuMjk4ODY1MzQxMiw0ODk3NDMuMTcxMzI3MzM1NCwzNjI5NTMuNTEwOTA4NDc3MjQsMzU5NzgyLjc5NDg1NzM4NzEsNTA4MDkwLjUwODA0MjUyMTgzLDYxMDgzLjcyNTM2Njk2ODA2NSw2MDU5MzEuMjk3MDc3NTU0Nyw0NjAzOC4yNDA3NzkwMzUyNCw5NzkxNy41NTIzMDU4MDM5MSwxMDkxMjkuODM5MjU3ODQ5NzQsNjY0MTk2LjQ0NzQ1OTA3NSwxMTExMDcuNTM4MjExMzMzNzQsMzUwLjMyNzE0NTk1ODcwNjI0LDQ2MTYuMDMwMzExMTkzNjE1LDEwMTI2My4yMjAzNjE4OTYxNiw0MjIuNzYyMjg2NTgxOTcxNzUsNjUwLjU3NDkzODQ4MzM3NzMsODg2Ni4zMzk0MTI5NDM3NjIsMzU1MjUwLjQzNjE3NjE5NzE0LDI2NzY2LjU2MjkxMjgwMzY4LDYwNS4xMTc4NzU5NTM3NTQ2CisyNyxTdW4gMjAgRmViIDExLDEyODQ0LjYzNDk4NTgwODg5LDExMzUuNzYyNzcwMTEyNjQ2MiwxNTUyMi44MzI2NTMyMDI2MDgsMjEzNDIuMjk4MzA5MTk4OTg4LDMwMDY1LjQxNDU2ODU4ODc1MiwyNDc1NjEuNDQ3MDU2MzAxOSw1NjU2MTUuMjg4MDg0NjQ5NSw0MzEwMjIuMzk3MTQ2NDIzNiw0MTE5NzIuNjE0OTg5Mjg4MDMsNDY2NTE4LjIyMDE3OTg5NjU3LDQ3NzMyLjg0NjY2MDY2ODQyLDUzNzc4NS4yNjE5NjQ0MTEsNjI4NjMuMjI0MDI3MTAyODEsMTM2MDkxLjEyMjg2NjU2NDYzLDE0MjcxNi44NDY4MjU2MTEyLDYxNTgwMi4xODgyMTE3MjIxLDE0ODcxNS45MDQ2MTA3NTQ3LDQ5Ny40MzkyMTE5ODY1MTk3NSw2ODkwLjc3MDU2MDYyMDc0NCwxMzE4MjQuMDE5MjE4MzY2OTQsNjA5LjAyMzA2NTYzMzE1NTcsOTc1LjczNjQ0MjE1ODgxMzQsMTM0NzguNDc0MTYyNDQ1NDQ0LDI3MTMxMC4wODk2NjMwNTExLDIwNTY3LjE3Njk5OTE5MDY0LDY0NS42MDA3Nzk3NzQ2Njg5CisyOCxNb24gMjEgRmViIDExLDE0NDMxLjAwNDM4ODU2MTcxNiwxNjAzLjQzNzk0NDE4NDU3MDEsMTMyNzMuMzY4OTA2MjYwODE0LDI0MTUxLjc4ODI1NDUyMjU5NSwyNDg5MC4wOTY1NjYyODg2OTYsMzIxNDE5Ljg4NDc5MjEwMTgsNjE3MjA3LjUwMDE3Mzc4MjYsNDg1NDM4LjIwODg0NzM4OCw0NDUwNjQuOTcyMDY4NzQ3Myw0MDczMTEuMjM2NjY0MjQ2NzcsMzYzNDEuMDAzNDU5NzMxNTQsNDUzMjU3LjQ1Mjg4OTc0ODE1LDgyNDY4LjgwMDQwOTAwMTYzLDE4MjY5Ny43NjA4NTgxOTg4NiwxODA5OTIuNzUwNDk2MzQyNTcsNTQxNzE1LjExNTg2MjgyODcsMTk0Nzg4LjA2MTI4NjA5MDMyLDcwMC4xNjAxNDQ2NDgwNjU1LDEwMTgxLjM3MDI0NDAyMDg4NywxNjYzNDYuMTQ4MTI3MTAyNzYsODcwLjk3MDAwMzkwNDE5OTgsMTQ1NS4yOTUzMjgwMDgwNjg1LDIwMjMwLjE0MDczNDA5NjAwMywyMDM2OTMuMDg0Mjk5NDYyNCwxNTQ4NS41NDAzODY1MjUxNDMsNjYxLjE3MjUzNzM5NzkwNzQKKzI5LFR1ZSAyMiBGZWIgMTEsMTU4MTkuMDExNzI0MjQ5NzQ0LDIyMzAuMjExOTE4ODk2Mzc0LDEwNzkyLjc3MzE0NDQyOTcxMywyNjMxMC40OTgzNTczNzgwMjYsMTk2OTcuMTI2NjM5MTEyNzA2LDQwMTQ4MC43MzIzODU1ODE2NSw2MzM1NTIuMzg4Mzc5MjM2OSw1MTU1NTQuOTc5Njk0MTMwMjUsNDUxNzU3LjIyNDE4NjkzMzIsMzQwMDk0LjQ3NDI5NzYzMjcsMjcxNDguNjIzNzgxNjUwNTc1LDM2NTU5OC4xNjQ3ODYwMDk5MywxMDMxNTMuNTk3MzA4NjU3MywyMzUzMTguNjg1MzQzOTk3MDYsMjIxNDQyLjU0MTk0OTE2MzM3LDQ1NDc1NC43NzM2ODI5NDczLDI0ODk2MS40NjU0MjQwNzU2Niw5NzcuOTkwNzg0NzQyNjk5NiwxNDg5MS40MDY5NDkyNDUwNDcsMjAyNDUxLjA2ODM5MDE3MTYsMTIzOC4wNTM0OTU3OTMzNTE5LDIxNjAuMjAxMzk5ODIzMTc0LDI5OTUzLjI3MDczOTg0NTIyLDE1MTI1Ni4xMTUzMTM3NTYsMTE0OTkuNzg5MzA1MzEzMzcsNjQ3LjEwNjY1MzY2Nzk5ODQKKzMwLFdlZCAyMyBGZWIgMTEsMTY5NDcuNTg4ODU2NzA2MDY1LDMwNTIuNTI3MTc0NjQ0NTUxLDg0MjQuNDg2Nzg4NDg4NjkzLDI3NTk2LjM4Mzk4NjEwMzc3OCwxNTA0NS42MjMzODI3ODAxMDQsNDc5MTAyLjI4Njc3OTYxMTgsNjEwNzE4LjIxMTkwNzA0Nyw1MTQ0NTUuODI5MzA2ODQ2MjUsNDMwMzYwLjMzNTM2NzM5MDU0LDI3MzQ3OS44OTI2ODc0MjE0LDIwMDI3LjU5MTUxMzg4MzM2LDI4NDYyMS4yMDAzMTgwNDc3LDEyMjAwMC44NDQ3NTA3Mzc0MiwyODg1MjguNDkzNTM0Mjc2MTUsMjU5NzUxLjg4MTYxNjg1NjkzLDM2Njk1NC41Mzg2Njk1NzI1NiwzMDkyNTcuOTI2ODM0NjY1NCwxMzU2Ljk1MDQ2MjQxMDMxMzUsMjE1NDkuMzI4ODc3MDExMTU0LDIzNjIwOS45MzcwMTYwMjgxLDE3NTAuOTE2NjU1MzU4ODY4NiwzMTkyLjAxNDA2Mzc4ODI3MTQsNDM2NzMuMzQ0NDUyMTc5NTUsMTExNjg4LjUzNDY0MTczODM0LDg0NzEuODY4NTUzMzA1ODksNjAzLjMzMjY2NzU1NTY5ODQKKzMxLFRodSAyNCBGZWIgMTEsMTc3NzkuNzY2MDI0MDU4Mjc3LDQxMDQuNDc4NTQxMTQ2MTg2LDYzNzEuNTExOTQ0MzkxNDgzLDI3ODkxLjE2NTE5MzkxMjgzNSwxMTE5Mi41ODg5NzgzOTU1MSw1NDIzMDMuNTkzNzIxOTIzMSw1NTM4MzAuNzgzMTI3NDYzNCw0ODIxNDIuMDE4MDA3MDgyOCwzODU3NTEuNTI4ODY4NzU4NDcsMjEzMzU0LjA2NzE3OTQ1MzUsMTQ2NzEuMjI0MjU5NzU3NDc3LDIxNTYzMi4xMDM5MTczODE2NywxMzUzODMuNzEyNTc2MTAyNywzMzQwNTUuNzk1ODYxNDg2MSwyOTAxMTEuMzU2NjQwOTUyLDI4Njg0NS4wNTc2MjA3NjgzLDM3MTM4Mi4xNDM4MTUxMjUzLDE4NzEuNjAyOTU4Mzg5Njg5MywzMDgyMy43MDEyMjk1Mzc2ODQsMjYyNDc4Ljk5NTk4ODg1MzMsMjQ2NS41NTYzNTMzNDY1OTQzLDQ2OTUuMDU5MTIxNTQ2NDY2NSw2MjU2NC4wOTczNTQ1NDU2NCw4MjM4OC43NDQzOTI1NDI3LDYyMjIuNzA0NDI4MDEzOTY1LDUzNS41NDYyMjcyNDc1MzE1CiszMixGcmkgMjUgRmViIDExLDE4Mjk2LjQxNjcwOTEzNjg2LDU0MTAuNDM4Njg4MjQ0MjY4LDQ3MDguNTE2Mjk1MjYyODExLDI3MTk2LjU5NTI2NTI1NTk4Myw4MTcyLjg5MzY5ODc4OTQ2NSw1Nzg2NTIuMjQyNzQyMzU0Miw0NzQ5NDIuNDM0ODc4MTgzMjQsNDI1Nzg5LjgyNTg3MTg4OTY1LDMyNzI1OS4wODg2MjE5MDg3LDE2MjYzNi4xMTYwNjg4NDQ2OCwxMDcyNC4wMDQzODc0MDg2NTUsMTYwMTgxLjYxMDE0OTg4NjcsMTQwMTk1Ljk0OTUzNDU3Njc0LDM2MjY4MC45MjQxMjUzNTczLDMwNjUzNS4yMjYwMjAzNTcxLDIxODg2MS44MTk3MTE4NzQyNyw0Mjg0NDUuNDkxMjUyNjEzNjYsMjU2Ny44MjYyNTgxNzMyODI0LDQzNTI3LjQ1MTQyMjM0NzE1LDI3NjEwMi4wMzg4OTA5MjA2NCwzNDU5LjI3NjM2ODEyMzE5OSw2ODczLjM4MzIxNTIwODE2MSw4NzgzNS4yMzM2ODkyMTA0NCw2MDk0Ni4xNDk0NTkzMjY1Miw0NTc2LjU0MDkxNzY4NDE1OTUsNDUzLjc1MTI0NzIzMTMyMDgKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvRGVtb2dyYXBoaWNTRUlSRGlzZWFzZV9GRF9SZWZlcmVuY2UvRmx1L3dvbWVuL0luY2lkZW5jZV8yLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvRGVtb2dyYXBoaWNTRUlSRGlzZWFzZV9GRF9SZWZlcmVuY2UvRmx1L3dvbWVuL0luY2lkZW5jZV8yLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zOGU3NmJhCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9EZW1vZ3JhcGhpY1NFSVJEaXNlYXNlX0ZEX1JlZmVyZW5jZS9GbHUvd29tZW4vSW5jaWRlbmNlXzIuY3N2CkBAIC0wLDAgKzEsMzMgQEAKK2l0ZXJhdGlvbix0aW1lLEVHLUZSRy1HMjEwMDAxLEVHLUZSRy1HMjEwMDAyLEVHLUZSRy1HMjEwMDAzLEVHLUZSRy1HMjEwMDA0LEVHLUZSRy1HMjEwMDA1LEVHLUxPRS1HMjQwMDAxLEVHLUxPRS1HMjQwMDAyLEVHLUxPRS1HMjQwMDAzLEVHLUxPRS1HMjQwMDA0LEVHLUxPRS1HMjQwMDA1LEVHLUxPRS1HMjQwMDA2LEVHLUxPRS1HMjQwMDA3LEVHLUxPRS1HMjQwMDA4LEVHLUxPRS1HMjQwMDA5LEVHLVVQRS1HMjkwMDAxLEVHLVVQRS1HMjkwMDAyLEVHLVVQRS1HMjkwMDAzLEVHLVVQRS1HMjkwMDA0LEVHLVVQRS1HMjkwMDA1LEVHLVVQRS1HMjkwMDA2LEVHLVVQRS1HMjkwMDA3LEVHLVVQRS1HMjkwMDA4LEVHLVVSRy1HMzAwMDAxLEVHLVVSRy1HMzAwMDAyLEVHLVVSRy1HMzAwMDAzLEVHLVVSRy1HMzAwMDA0CisxLFR1ZSAyNSBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMixXZWQgMjYgSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzMsVGh1IDI3IEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCis0LEZyaSAyOCBKYW4gMTEsOC40MDAwOTk0NTc2NDU3NzUsMC4wLDE1LjQzMzY2MzU5ODA4Mjg4NCw2LjAzNDMxODUwMzk1OTczLDM3LjQ3NDI0Nzg0MDg2OTA0LDEwLjkyNzQ1NjcxNzA0MjEzNSw5NS4zMzUzNjU4ODA3OTgwNCw2Mi45MDU2MjQ2NTcwMTUwOSw3NC45Njc4Njg1ODY1MjY5LDE4NDMuMDczMjg4MjAxNjY4MiwxMzg5LjI1MDM2NTg3ODIyODksMjExNy43NTIxNTE0MDE1MzY2LDAuMCwwLjAsMTIuMDEyODg0ODAyOTEwODQ3LDE5OTkuNDMyNjQ0NTI4NjgzMywxMS44Mzg1NDM1NTMwODEzNjcsMC4wLDAuMCwxMS42MjcwOTE1OTUyNzIzNTIsMC4wLDAuMCwwLjAsMjgwMjQuOTE1NTg2NDY1MzQ0LDEwNzEuOTUwMzg3MDg1MjcyNywwLjY5NDg2NTE5NDU1MDYwMDgKKzUsU2F0IDI5IEphbiAxMSwxNS4xMDUzMzMxMjk4Njk4MDcsMC4wLDI3LjczNTI2MTg3NDIxNTA2LDEwLjg1ODc1NDEzMzUxMzg3NSw2Ny4zNjE1NzkzMzQ3Mzc3MywxOS42NjQ2MTg5MTA5MTI0NzMsMTcxLjU1MDg4MzcxMjQ2NDY3LDExMy4xOTUzNzgwNjU3NTI0NCwxMzQuOTAwMTQwNDM0MjI1MiwzMzA4LjA3NDk0NDYwNjQ4ODMsMjQ4Ny40NjI1NTcxNzg4NzE1LDM4MDEuNTg1ODA4NzU4ODg2LDAuMCwwLjAsMjEuNjE3ODE3NTE3Nzg1MDIsMzU4OS40MDczNTg1MDksMjEuMzA0MTU2MDEzODYxNjU0LDAuMCwwLjAsMjAuOTIzNTUwMTc5NDIwMTE1LDAuMCwwLjAsMC4wLDQ5OTE4LjE2NDMyNzY5MjA0LDE5MTYuMzAzNTU0NzYxMjg0LDEuMjQ5MzM0ODU0OTkwMTMwMgorNixTdW4gMzAgSmFuIDExLDE4LjE5NDg5MzU0ODA2MDE2NSwwLjAsMzMuMzg2MDI4MTIyMzU2NDMsMTMuMDg3MjgwMDM0MjE4OTE3LDgxLjEwMDIyNDI2ODI0ODg0LDIzLjcwMTc5OTkyMjY2MDIyNSwyMDYuNzU0MDI3NDIxOTk3NjUsMTM2LjQyNDY0NjczODU2Mjg0LDE2Mi41ODEyNzg3OTcwNDgsMzk3Ni4wODMxMjE0OTkxOTE3LDI5NzguMDA4NDc3MzA5OTAyLDQ1NjkuODMxODI4NTIwNTU5LDAuMCwwLjAsMjYuMDU1Nzg3OTM2NTI0MDA1LDQzMTUuMzY2Njc2NTQ3MDI3LDI1LjY3Nzg5NjI2MDAxMTkxMywwLjAsMC4wLDI1LjIxODk2NjQ2MTIxNzk4LDAuMCwwLjAsMC4wLDU5Mjc2LjgyMzU2MzEwODc4LDIyODguNDI1MTIwMDAyMDAxNywxLjUwNDQ1MzczNzA4MTkwNDkKKzcsTW9uIDMxIEphbiAxMSwxOC4zNDkyMDE4OTg4Njg1OSwwLjAsMzMuNjQ3OTA4NTc2MDcxMzIsMTMuMjA0NTEwODI3MDcyNTg5LDgxLjc0NTk3MDAwMDkzNTcsMjMuOTE1ODYzNTE2MjYxMDA1LDIwOC42MDM0NzE4ODgxNzY2NywxMzcuNjQ2NDQyNjEwNDk5MzUsMTY0LjAzNDI5NTg2NzY1MzcsNDAwMC45MTgyODQzOTA5NDEsMjk4Mi44NDk3OTUwODI0NTIsNDU5OC45MjA4OTkyMTA3NTE1LDAuMCwwLjAsMjYuMjkwODYxNDY2MTIyNTkzLDQzNDMuNTkyMDI0NTU2MDg4LDI1LjkwOTc1NzYyMDcwNzY3LDAuMCwwLjAsMjUuNDQ2NDU4MDk5Mjc3MTE2LDAuMCwwLjAsMC4wLDU4ODE1Ljk2NjQwNDk0MDQ0NSwyMjg1LjQxODcwMDc3MzU5NSwxLjUxNjcxMzc2NTc1Nzc1MzIKKzgsVHVlIDEgRmViIDExLDI1LjM4MDAxOTgzMzA0MjM2NSwwLjA4MzI1MDE0OTgxMTU1NTUxLDU0LjQ2NzQ5ODY0NjMyMzEzLDIwLjY2NjEyODMwNzk0NzU2NywxMzMuMTgwMzAzNzU3NjE0Niw1MS40ODE0OTI3MDA5ODIzNiwzNjcuNDA3MzYwNzE0OTkyNzYsMjQzLjQ4MTE2MTI1OTA5NzQzLDI4Ni4xMTY2ODYyNTY0OTMyNyw0NzU5LjMxNjc2ODEwMzU3MiwzNDEwLjUwNDAyMjAyNDUzNzMsNTU5NS44NTk1MDY2MTA4MzMsNC4xMDA0MDAzMDA2OTA0MDU1LDguMTgwOTQxNjEzOTY5MzI0LDQ4LjUzMDk0NDU0MDA1MzYyLDUyMzguODE4NDA3NDE2OTkyLDQ3LjY0MTc0NjU4MzUyOTQwNCwwLjA0NjI5Mzg4ODgyNTg5NjgxNSwwLjMwNTU3OTUwNjQ2MzAyMjA3LDQ2LjcxODAwNzE0MTY0MjIwNCwwLjA0OTU5MzE5Mzk1MTAwNDI0LDAuMDUxNjY0MTA3MjQ1NTM5MzEsMC40MDQzOTUyNzkzMDYwMTY0LDYxNjMyLjA3OTI5ODc4NjM1LDI1NDMuOTUxMzU3NjA5ODY5MywyLjA0MDcxMjEzMTcyMTU5OQorOSxXZWQgMiBGZWIgMTEsNDkuNjIwNTk5NjIxNTM5OTYsMC4zNDEwNTc1ODUwNjIwMTczLDEyMy4zMzAwNzg4OTMzNTk4OCw0NS41NjM2NjczMzk3OTA4NzUsMzAzLjE0MTQ2OTQ0MTM5ODMsMTQwLjA5NDA3NDY0MTU0OTUzLDg4Ny40MTQxMjc3MTgwODIyLDU4OS44Njk4MjcyMjc0NTk0LDY4Ni4zODAxMjUyNTI2NDksNzY2Mi43OTQ2NTA1NTk3NDIsNTE2MC43ODY1MjcxNDgzNzcsOTMxOC41OTcxMDI2MjM1NjIsMTYuNzk4NzE3MzIzODc0NjIzLDMzLjUxNjQ0ODA2MjA4ODQ4NiwxMjAuOTcyOTI2MjAxNzYxOTEsODYxMS44ODUzMzg2NzE0MiwxMTguNDU5NjU3ODU3MTcwOTUsMC4xODk1MjY2NDcyNTUyNzkzLDEuMjUxODgwMzEzNjU0NDA5LDExNi4wNDU2MDQxMDc2MTAyNiwwLjIwMzAzODQ3Mzc0ODc0MjA0LDAuMjExNTMyNjM3NzEzOTQ2NjgsMS42NTY5ODM1NDAzNjgxMTQzLDc5ODEyLjQ3ODgzNDIxNDUyLDM2ODAuODM0NjQzMTkzODg0NCwzLjg2NjczNjIyMTY5MTYzNQorMTAsVGh1IDMgRmViIDExLDk0LjE2NTI2MDYxNjYyNjMsMC44MDA0MTk2MTk1NDgxMDEzLDI0Ny44NDk3MDkzODgzNzkzLDkwLjk5MTg5NjE5MjY2NzU3LDYxMC40MzI1NzcwOTcwMjM2LDI5OS45NDI1ODY2MTM4MDQ5NiwxODMwLjQ4NzM5NjQ2ODI2OTUsMTIxOC4wNjI1NzQzMjA2NDg4LDE0MTIuNTc1NzcwOTA3NTM2MywxMzEzNC42NTUwMjY3OTkwMTcsODQ1OS4xMTI2ODc3MDg4MjYsMTYyODguODIyOTI5NTY4MTA3LDM5LjQyMjkxNzE3NTE3MTgxLDc4LjY1NzU1NTQ4NTcxNDksMjUyLjIwMTI3ODQ3Nzg3ODk2LDE0OTQ3LjkzMTY4Njk0MjIwNCwyNDYuNzcxNDQ3MTA1NzA0OSwwLjQ0NDQwNzg4OTA4Njg2MjEsMi45Mzc5MTkyNTIwMDg3OTMsMjQxLjY1NDA1ODkzNTk0MTgsMC40NzYxMDQwNjg1MzIyNDU4LDAuNDk2MDY1MDEyODU4Nzg3NTcsMy44ODkzODc3NjM2MjIxNDUyLDExNjAzNC45MzQ5MTUyNjYwOSw1ODM4LjA3NjA2Mzk2ODU1NSw3LjIyNTE1Njg5MjAxNTMwNQorMTEsRnJpIDQgRmViIDExLDE1My43ODIwODEyMTkzMjQ1LDEuNDEyNDA2OTYwMzQ2MzEzOSw0MTIuNTI5MjI5ODIxODcyODMsMTUxLjkxMjA2NzE5NjQyMzI0LDEwMTYuNzMyNzU2ODA0NTczOCw1MTMuNzA0NzU2NjkzMjE0NywzMDkyLjI5NTUwMzUyMjE1OCwyMDU4LjgxMDQ5MjY1NjAxMSwyMzg0LjI5ODg4NjQxODIxNTMsMjA0NjguMjY1NzAyMDMwMDksMTI3NjMuNTk4MDUzNDg4MDQyLDI1NjA4LjI5NzgzMzI4MjUzMyw2OS41NTcxNDAwNzMzNzg5OSwxMzguNzg3NDE4OTk1NzUxNDcsNDI3LjkxMDM4MTU1NTg1NTA1LDIzNDQyLjQ1MjcwMTkzMTczMiw0MTguNjEwMjE1NDc5MTk2MywwLjc4MzQwMjA5NjMyNzQ3NTYsNS4xODM5ODAzNjA4NjQyNzgsNDA5Ljg0MzY1NzExMzIxMjAzLDAuODM5MzAzMDc5MDcxMzI4MywwLjg3NDU3NTIzOTU2MzYzODcsNi44NjQzNDYxNDk1NDIwMzcsMTYyODMxLjM1ODQ3NzY3MzE0LDg2MjMuODEwMDE3MjQzNzEyLDExLjcwMTY5MzUxNjIwMzM0CisxMixTYXQgNSBGZWIgMTEsMjIyLjcwMjQxNTc4NjE2MDIzLDIuMTg2MjEyMzkzNDYyNjA1NCw2MDMuNjkyOTY1MzI1ODkyNCwyMjMuODQ1MzgyMTA2MTQzMTgsMTQ4Ny44NjkzMDM3NzA3OTc2LDc3Ny40NTc4NzI2NDQ5OTI4LDQ2MDUuNTAyMDIyNTEzMDczLDMwNjguNjk5ODc4MDc0NzU0NSwzNTQ3LjY0NDE1OTI3ODA1NzUsMjg3OTMuMDczMTcxNTc3Mzg0LDE3MzU0LjE3Njk1NzEwNTQ1LDM2MjE0Ljc0Nzg4NTc3NzA5LDEwOC43MjYzODU4MDY3MzM2NywyMTcuMTM2NDQxMzUzMjUxODMsNjQwLjcyNTcwNjcxMjk5NDYsMzMxMjguNDQ0Mjk3NTc2MjgsNjI2LjYyNzM1MTc5OTYwMzQsMS4yMDQ4Nzg1ODQxMzg3MjU1LDguMTMxNzcxODMzNTkzNDg2LDYxMy4zMTA4NTQyMTczOTMzLDEuMjkzODE1OTI4NTU3Mzg3NCwxLjM1OTU1Mjk0NjE4MzYxNiwxMC45MzA4Mzg2NDY4MTMyNzEsMjA5ODkxLjA5MzMzNjA2LDExNTA3LjAwMzI1MDEyOTgyMSwxNi44NDkxMTk2MzY4MTY1MzIKKzEzLFN1biA2IEZlYiAxMSwzMDQuNTc0OTY4NjE5NzkwNDcsMy4zNzI0ODIzMjIwMTA1NjI0LDg0MS4xODkxNzQ0NzA3NDg4LDMxNC4zNTMzOTY5MTQwNjYzNywyMDcxLjc1NDA5NjMyMDA3MzYsMTE1NS45NTg1Mjc5Mjk0NzEzLDY2MTAuMzEzNzUyODc5NzYsNDQxMS45OTE0OTAzMjY5NDU1LDUwODEuMDIxMDc3NTYxMzA3LDM4MjgzLjczNzYzOTc5NjY0LDIyMDM0LjY4NDYyNDA1MjA2OCw0ODQ1OS41NDE0NTExNDA3NjUsMTcyLjkyMjY5MjY0NzcyMTI4LDM0Ni4yNDY2MTI5ODI5MTg4Niw5MzAuMjEwMjIxNzc0ODM5LDQ0Mjk1LjA1NTQ3Nzc3MTg4LDkwOC45OTU4NzA3ODY5NDQ4LDEuODI1NTI1NTUzMTI2MzY1MiwxMy4wNjgxNjU3NTMyNTIwNzEsODg5LjEyMTM5OTE5NTUwMTUsMS45NzQ1NzIyOTE5MzQ0NzY2LDIuMTI5Nzk1OTYyNTkyNjA1MywxOC4zMzk4OTIxMTMwNjE1MzQsMjUyMzM2Ljk5MzcwMzkwNDEzLDE0Mjc5LjgxMDE5NjYyODkxMiwyMi45NTg0OTcyNDE1ODA0NjQKKzE0LE1vbiA3IEZlYiAxMSw0MTUuODU1Mjc0ODkxNTk3MTYsNS41MjcyNTAzNDUzMjY4MjksMTE4Ni4yMjE0MTc3MDAwMDg1LDQ0Ny4xOTI1NzgwMDQxNzU1LDI5MTYuNzkyMTYzOTc3MjQ1LDE4MDEuOTI5MDg4NDg3MDQ0Myw5NzQ3Ljk5MTM3MjA0OTI2NCw2NTI0LjIyODg0MjQxNjEzNyw3NDY2LjUwNDg3NjEzNDQ4Niw1MDUwOS43MjExNTg4NTIzMSwyNzI0OC4yNjMwMzg5MjA1NCw2NDU0MS45NTg5OTQ2MTU4MTYsMjk2LjA5Mjk2NjA2NDc4NzksNTk1LjAyODY3ODc0NjkwNzEsMTM5Ny4xNTAwNjM4Mjg3MjYyLDU4OTA2LjAwMTA3MjU3ODkyLDEzNjMuNDE0NzU3MDYzNDkzLDIuOTEyMTYxOTcxNTk1MDY5NSwyMi42OTk4NzMwODk3NjMyMTIsMTMzMi4yODMxNDA0Mjc5NjIzLDMuMTg1NDMyMDgwNDE0NzA5LDMuNTcxMzk0OTUzODY3NTE1NCwzMy42Njk4ODQxNjgwMzYyNCwyOTE5OTkuMTAyMjIxNjk5MiwxNzEyNi40NjA1OTg5ODUzOSwzMS4yODI2NDI5NDE3ODk1MgorMTUsVHVlIDggRmViIDExLDU3OS41MDQ5NzY3NTY3NTQzLDkuMzg1MDc4NjUxNzc2NDQ0LDE3MTMuNzM4NjI3ODc1MTAyOCw2NTUuMTI0NDM0Njc5OTI5Miw0MjAxLjU4NzI2MTI2MTc0MSwyOTE4LjMxODA3MzAyMDIxMDIsMTQ4NzYuOTQzNzEwMzkyMzkyLDk5OTAuNDc0MzA0ODc1ODgzLDExMzUwLjYyNjM5NTA0MjUwNSw2NzU2Mi45OTQ1MzQ5NjczNSwzMzQ2Ni40MDExNDQ4NDM1NCw4NzMwMi42MDA4NzU0NjA3OSw1MjIuMzI1MDE5NjI3NjUzNCwxMDUzLjAxMzE1Mzk5MDQ3MDMsMjE3Ny4zODQxNTM1MzMxOTQ0LDc5NTgwLjIyNDU5NjI1MTQ0LDIxMjEuOTc4MzM0ODEwODU1LDQuODE3NjM3ODUzMjA3OTk4LDQwLjU0ODU4NTQzMDcyNjA3LDIwNzAuOTU3ODA3NjQ0NDEyNyw1LjMyNjc4ODAxMDA2MDYsNi4xODgwNjA1ODEyMDk5ODYsNjIuODIwMjg5MzA2NDczMTksMzMxMTU1Ljk5MzI2MTA1NjMsMjAyMzYuOTM4MzIzNzQ4ODI1LDQzLjQ2NDA1MDMzOTA5ODcxCisxNixXZWQgOSBGZWIgMTEsODE0LjI3MjAzMzQ1NjgwNiwxNS42ODA4ODkzMzcwMjc3NDcsMjQ2OC44MTYzMzUzMjA1Nzk2LDk2Ny42NDY5OTg5OTExODk5LDYwMjMuNDA3MDI2NzE3NTY5LDQ3MDIuODc1MDU1MzE1MzQ4LDIyNzc0Ljg0NTMyNTQ3MjExLDE1MzQ5LjIwOTgxMDM1NTk1MSwxNzMxNy4zNjUyMzIyNzczNjcsOTA2MzQuMjY4NzkyOTg2NjUsNDAzODUuNzY1OTI2NTIyNiwxMTgyNjkuMDk5NjUyMDUwMjgsODk1LjU0NDgyNjAwNjk4MzYsMTgwOS44MzE5MTY2NDkxMTIsMzQwMC45NTQyMTIzOTYzNzQsMTA3OTEzLjM4NzY0NzgzODQsMzMxMS45MDA4NDQ0MDcwNDI4LDcuODg3NDAzOTY1ODM2MDA4NCw3MC4yMDE5ODI0NDAxODk0NywzMjI3LjU2NzE3NDExMTU0NSw4Ljc5MzA4NzA0NzczMTg5NywxMC40ODc3OTM2ODYzNTg1NDksMTExLjkxMjIxMDU5ODcyMzc2LDM2NTY2MC4yMjAzMjA4Njk5LDIzMzQ2LjMxOTA2OTc5NTc4Nyw2MC42MTEzNDkwNjE0ODEzCisxNyxUaHUgMTAgRmViIDExLDExMjguNTk5MTAzOTYxMDIyLDI1LjE3MzI2MDAxNTk5NjQyNiwzNDQwLjg2NzE4MDgxNjExMSwxNDA0LjgzNzM0OTQ1MzQwMTcsODMyOS4zMDI2OTc5OTIxNzIsNzM0NS45NzMzMjkwOTQzMjksMzQwMjAuNDE5NzY5NTAwOCwyMzAyMS40MDY5NzcwMzgwOTIsMjU3OTMuOTExODI4NDQyNjczLDExOTEyNS4xNTE5ODgyNzU2Nyw0NjY1My41ODcwMjM0NDg2NSwxNTY0MjcuODUyOTA4MTkxNSwxNDYyLjY1MTczODI1OTk4MjMsMjk2Mi41MTg4OTg3ODExOTksNTE4Mi45NzkwNzQ5NjQ1ODUsMTQzNDIxLjcyNzgyNzUyODUsNTA0Ny4wOTI5Nzk5MDQxMywxMi40NTY0MDAzOTM3MjkxNSwxMTUuNzQ3MDI4MzYzMDkzNzUsNDkwOS40NTYzMTQwNjMwMzUsMTMuOTc5NDI3MDM0ODE3NTY3LDE3LjAzNzY0MjE5ODU1MzA2LDE4OC41MDE0NzU0OTA0Nzc2LDM4NDU3Ny44OTQ2MDE1OTE3LDI1NjUzLjc0NDk2MjU3ODQsODIuNzc5NDA3OTY2NTIzMjQKKzE4LEZyaSAxMSBGZWIgMTEsMTUyMy42MzA3MzUwMjE0NjMxLDM4Ljk5OTc2MTMxMTM5ODc0LDQ1NzEuMzc2NDY2NDUyNjQ0LDE5ODIuODQ5NDMzNzU3NDExOCwxMDkzMC44NzAxOTA1MDE2NjgsMTExMTYuNTA5NjkxNzc2NTM5LDQ5MTkyLjk1ODk3MDkyMDE2LDMzNDYwLjEwMzIxNDU2MzY2LDM3MTkzLjQ3OTA1OTA0Mzk0NCwxNTA4MzAuNzE3NzE3MzQ2MTUsNTA0MTcuNDk2OTA4OTk1Mjk0LDE5ODQ1My4zNDk0MDc4MDk0LDIyOTcuNjg1ODY4NzI1MzEwMiw0NjY2LjMyODE0OTcyMDI3MSw3NjY5LjM5MTc0MTY4MjY0MSwxODM3MzguMDQ3OTk5OTc2MDYsNzQ3My40MDEzOTQ3MDAyNDYsMTguOTk3NTE2NDI2OTE2NDI3LDE4NC4wNDgzNjY5MzQzNzc1LDcyNTAuODkzODkyMzk2MzMxLDIxLjQ2Nzc5NjQ2MDczMTc3MywyNi43ODA4NjY1NjMxNDA1NDIsMzA2LjI2MzkyMzY3MTUzNTc0LDM3NzE0OS4wMzcxNTU0NTY3LDI2MjQ0LjE1NDU0ODkxMTY5NCwxMDkuMjE3OTE2MDc1NjYwNQorMTksU2F0IDEyIEZlYiAxMSwyMDAwLjgxMzY5ODc0NDE2MjEsNTkuMjIxODcwNzU5NjgyNzY2LDU3NzMuNDAwMDA5ODU0NjkxLDI3MjQuNjQ5NjUzNDc4MDIxMywxMzU1My4wNzU2MDQ5Mjk4MDUsMTY0OTAuNjgxNDc3NjE5MTkzLDY5MTg3Ljc4MTY0ODEwNTU1LDQ3Mzg3LjgxMzkxMTA3NTM4LDUyMTQ1LjE2OTAxNjgzNjU1LDE4MjY4MC44NDc4NTg5OTg5NSw1MDI5Mi4xNjk3MjYzMzk5OCwyMzk2ODMuNDUyMDY4Mjg1MjMsMzUzNS44MTEwNTcwOTM2NDgsNzIwNi42ODgzNDk3NTEwMDQsMTExMDkuNzIwNTk0MzQzOTYyLDIyNTQzMy43NzEzOTc1MDc5NSwxMDg0MS45MDYyNzE4ODY0NDgsMjguMzU2MjcwMDg3NzUwMTIyLDI4OC4wNTExNDEyMDkxMDQzLDEwNDgwLjMwMzU3OTI4NjkyMywzMi4zMTQ0Mjc2MzU1NTIxNyw0MS40OTcwOTIzMDAxNDI3Myw0OTEuNTE5MTYzMTc3MTk5OSwzNDA3ODAuODQzNzUwNjU0NjYsMjQ2NzIuNjExOTM5MzY1MzEzLDEzOC45ODI4NTQ4MTYxMzA5CisyMCxTdW4gMTMgRmViIDExLDI1NjUuMDEzOTkyODk0MTA1LDg5LjI0NTYxNTExNzE5OTU4LDY5MjYuMTU3Mjk0ODExODc4LDM2NjIuMTY5NTc1ODMzMjAxNiwxNTgzNS4yOTEwMTg0MzY2MTIsMjQyMjYuNDMwNDA1MjQyNjU2LDk1MjIyLjQ5NjYzOTM0MTg3LDY1ODM3LjcyNTEzNDI2MzIsNzE0OTMuMDE4MjQyMzY0ODIsMjExMDgzLjc1MDQxNzEyMzUsNDYwNDAuOTA0ODQyMzA5MjIsMjc0NTQ5LjcwMDM4MDcyOTYsNTM5My40NTU3MjM1NzU0MzksMTEwNDUuMjQxNDEyOTEzNzU4LDE1ODk2LjEwMDM1ODg4MTE0MiwyNjQyODguMjc2NTQ1MzU1NSwxNTU1My45MDA2ODY2NTMxMjIsNDEuOTI5NDM3OTU0MDQ0NzYsNDQ5LjQyODM2MjIxMTc5MSwxNDk1NS41NjkwODI5MDI5NzQsNDguMjcxMTUxMDI5MDg1OTg1LDY0LjE2ODMxMTcyMjEzNjY4LDc4OC40MjQxNjUzNDM1MDg5LDI4MzE0MS44MzY5NDQ3ODU4NCwyMTIzNy45Njg3NTI3ODI5NTIsMTcxLjE2MjY3NjgzMTA2OTI2CisyMSxNb24gMTQgRmViIDExLDMyMTguNTMzMDY0NzM1ODAxNCwxMzMuOTIwMDM2NzA4Njg2Nyw3ODQ0Ljg1NjcwMTA1NTI3Myw0ODIwLjkyMDg3MzUyMjU0MSwxNzMwMC4wODE1MjU1MzEwMDgsMzUzMTQuODU5NjgxNTA0MzYsMTI4MjM2Ljk4MjA1NTAxODk1LDg5NzkyLjM3NzAyODQ1NDM5LDk1ODQxLjEwODU0NzU5NTg4LDIzMTcwMi4zMDM5NjUyNDc5MywzODY0My42NDI5MjgwNDA4NCwyOTY0MDcuMTkxOTkyMjI2OTMsODE1Ny41MzkzNTU0NzM4NzUsMTY4MDcuNTc2NTc3MzAwNTc3LDIyNTI1LjM5MjUyMTU1MTgzMiwyOTQ3ODEuNjg1NDE5MjMyNywyMjEzOS4wMzkzNjcwNTExMDQsNjEuNzAxMDkzNzgyNjIyOTIsNjk5Ljc1MjYzOTM2NTQwMzgsMjExMjYuNzMyNDI5OTU2NTcsNzEuODQ2MzI1NzM0NTg3NzcsOTkuMTUwNTE0OTcxNDgwNTgsMTI2MS41NjM3NTAxMjU0NTkxLDIxNzY0Ni43MjM5NzY5MzY0MiwxNjc5OC44NTU1MDg3Nzg2MjYsMjA0LjQ3NDM4MzA4ODQyMTkyCisyMixUdWUgMTUgRmViIDExLDM5NTAuMjc5NjAwNzgzMzg1NCwxOTkuNDQwOTI2OTQ4MDgyMjUsODI4My4wNzQxMjE0MTQ3NjcsNjE5Mi4xMjQwODI4MjE5NiwxNzQzMi45NzY3Mzk2NzA4ODUsNTA4MjUuMjQyNTQxODA3NDU2LDE2NzgwNC41NDAwOTM1NTc5LDExOTQ3Mi4yMTMwMzg4ODcyNiwxMjQ3MzMuMjM4ODY2ODE4OTcsMjM5Njc3LjE5NDA0ODk0MDYsMjk4NTMuNjUzNTQ2NzM2Mjk2LDI5ODQyNy42OTk4MTUzNjEsMTIxNDYuNDA4MjIwNjQ4MjA1LDI1MjIxLjg2MzYzNTYzMjg2LDMxNDk1LjQzNDYyNjMyOTYxLDMxMDEzMC4yMDEzODI4MTQ5NiwzMTE4MC44MTQwMzQ0MDU5NSw5MC4yMDAzNjU0OTM2NDg5OSwxMDgxLjQ2MTM5Nzk1OTIxODIsMjk0MzYuMTk1NjU5NTE2ODY3LDEwNi4yOTg2Mzc5ODgxNjU1NywxNTIuMzY2MzM4MjI2NzE0MTMsMTk5OC45MzQ2MDU2MTY1ODk4LDE1NjgzNC45NjgxMTgxMTQ4LDEyMzM4LjIxMjQyMjUwNTI3MiwyMzYuNzQ2OTYwNjMxNDUxNAorMjMsV2VkIDE2IEZlYiAxMSw0NzI4Ljg1MjAwMzc4NjQ3OSwyOTMuNDE5ODQ4NjkyMDQ2LDgwMjYuNjYwNTAwNDM4MzYyLDc3MDguODkyNDQzODc5NzQ1LDE1OTYyLjQ4MTI0NjY2NDAxOCw3MTcxNS4wMzgyMTIyNDk4LDIxMTA1OS4xNjQ5MTk3NTMsMTUzNTU2LjkwMzQ4ODM3MTUyLDE1NTg1NC4xNzQ2MzMxMzY4LDIzMTMwMC43Mzg2NTI0OTA0NiwyMTQ2NS40Mzc2MjI5MjQxMjQsMjc2ODA3LjAyNDA0NjEwNTQsMTc2NTUuODkzNzQ3MjUyNTcyLDM3MDQwLjA2NDQzMzY1ODM5NCw0MzE4NC44OTI2MTQxODg3OCwzMDQzNTkuNjg1OTE3MjMzOSw0MzI0MS4xNzM3Mzc0MTg4OCwxMzAuNTU3MTM4OTUwNjIxNjYsMTY1MS4zMjk0MjA4ODEyNzEsNDAyMDMuMTM5ODI4ODA4MTQsMTU1Ljc5MzgwMDQ5NTgxNzA3LDIzMS45NTE3NDk1Mjk5NTEyNiwzMTIwLjk4Mzk3MTA2NjczODQsMTA4MDIxLjAzMjE0NjQ2NjEsODU2NC45NzEwNzQ4NzM1MDMsMjY0Ljg4NjA3ODA5NjU5MzQKKzI0LFRodSAxNyBGZWIgMTEsNTUwNC45MDM3MjY5ODYyMTUsNDI1LjM2MDE5MjAxOTg0MzQ1LDcwNDcuMDUwNTk2NTkwMTc0LDkyNDIuMzA1OTE4OTE0MzQsMTMxNTQuNDY0ODk1MzA4NjEzLDk4NjI4LjgzNzg0NzUxNjksMjUyMjM3LjE5MzY5OTM0OTg4LDE4ODY2MS43MjU2NzQyMDQ1NiwxODQ3MjYuNjMxNTg1Mzg4OTQsMjA2NTI0LjQwMzEyMTgyNjgyLDE0NjQ1LjQzNjE5MjMwODgwOSwyMzQ0NzUuNTUyOTg5MTk2MiwyNDg4Ny42OTk1Mzk0MTU1NjcsNTI5MzcuNDYwMDIyNDIxNjksNTc3NDYuNTg2NDE1NjkzNDYsMjc1OTI5LjM1NDA0ODIxMDE0LDU4ODE3LjY0Njk2NDIyNzM1LDE4Ni43OTc4MTM2MzY3OTU1MiwyNDg4LjM3OTgzMDM5OTkwOSw1MzUyMi4wMTM2ODY4NTU1NSwyMjUuOTA3NTQ1MzYyNjkyODQsMzQ5LjY4ODE0ODI1MTg1MzEsNDc5OS4wMTg1NTM1MzgyNTYsNzI3NzAuNDMwMDE0MzM2NDcsNTc1Mi4yNjYwNjc0MDcwMSwyODUuMjY0OTM4OTI0ODY3NgorMjUsRnJpIDE4IEZlYiAxMSw2MjIxLjU5NDY4NDI3MzU0MSw2MDcuMzYwNTM2MDIwNTU1Miw1NTc3LjU5OTc5NjI0Nzc0NCwxMDYyMS43NDEwMTg1NzI2Miw5NzcyLjc2NjY0ODIzOTEwOSwxMzE1ODguNTk0MTkzMDcyMDMsMjgzMjcyLjc4MTU1MjQ5MywyMTkzMDkuNTQxNzkyMTY0MTIsMjA1MjcwLjA3OTc3ODkxOTg0LDE3MDExMi4xNDMxMTIxMDU2LDk3MTguNzc4NjA4OTI5NzU5LDE4MTI5NS40MDUxMzE2MDQ3MywzMzgyMy45NzIwMDQzNzg3Nyw3MzMwNi40ODg3NTA1OTI4OCw3NDk4MC41MjE0NDQ5MDk4NCwyMzAwMzcuMzUzMTk4NTE2NjUsNzgzMDEuMTExOTA3ODU5NzgsMjY0LjM3MjIxNTE1MzUyNjY3LDM3MDUuNTIzNzg3NTI1NjAwNyw2OTE0Ny44MTczNjkyNDg0NiwzMjQuNDY4MzQ2NTY5MjcwNCw1MjMuMjEwNzg5MDQ2MTg0OSw3Mjc5LjczMTQ4Mjk5NTg2OCw0OTAyNS45OTgxNzIwNDM2NTUsMzgzMC4yNzI2OTk0Njg0Njk1LDI5NC4xMTkyODM4OTMxNzQ4NAorMjYsU2F0IDE5IEZlYiAxMSw2ODI4LjEyMTEwNjMwOTY5Nyw4NTQuNDgwNzcyMDI4ODQ5LDQwMDcuNjgxMTk3NTY5Nzg3NCwxMTY3MS44NzQ1Mzc2OTQ4OTQsNjY1MS40MTQ4OTYwNjgzMDcsMTY5NDIzLjA1MzU1MjQ3Nzg1LDI5NTcxNi42ODE2MTQxNzM4NywyMzg2NjguODE4NzY2NzYwMywyMTE0MjMuNTI0MTM5NzQwNiwxMjk4OTAuNjkxNzUxNTc0MTEsNjQyOC44OTM1OTI2NTQ3NjYsMTI5MzI5LjY4MTAwMDc3Nzc4LDQ0MDA3LjQyMzQ5MTkzMDAzLDk3ODIxLjA0NTg4NTA3ODgsOTQxMTYuMzY4NzY4NTk2OTgsMTc2OTY1LjcwNTY2MTg1MjQ0LDEwMTg0Ni43OTU1OTA5NDM3LDM3MC43ODAzOTk4OTIwMDkyLDU0NjEuOTQzOTAyMjE4NzgzLDg2MzA5LjE0NjQwNjcyNzY0LDQ2Mi41ODk1ODExNzU5NzEyLDc3OC43NTc0NzUzMDkzMTk1LDEwOTA2LjY4MjYyNDUxODg1OSwzMzYwMi4zMzAyMDk3NTQ3NiwyNTgxLjE3NzYxMTk3NDc3NDcsMjg4LjAzMjk4OTA4MDE2NTIKKzI3LFN1biAyMCBGZWIgMTEsNzI5MC44ODkxNDYwOTAyMDA1LDExODQuMTczNzgzMTk3OTgwNiwyNjY4LjQ4OTI4MTE5OTcxNDIsMTIyNTMuMzk4NTY4NDM1MzAxLDQyNjkuMjMwNjM1ODUxNDcyLDIwODk1Ni45NTExOTY4NDEzLDI4Mzk1My40ODY4NjgzNzc2LDI0MDQzNS4zNDk3MDQ1NTM5NiwxOTk2OTMuMjY3NTM0MDkxOTgsOTMxNjUuODc3OTgwNjAzNTUsNDMyMi4xODUwMTI0MzI2NTMsODY5NzguMDE1MTQzMTQ1MTQsNTQyNjcuMzA5MTQ3NzM1OTQsMTI0NzU4LjQxMTk4MDQ4MjQxLDExMzQ5OS4yNDIzNTA5MTk4MywxMjcyMjIuMzY1MjQxOTY4NDQsMTI5MDc5LjMyMjM0NzY1MDQ1LDUxNi4xOTc4NTQwMTQ2NTMxLDc5NzMuMzQyMzYwMjQxMDI5LDEwMzQ0OS4yNjI2NjE2Njk3LDY1NS44MDUzNzEyNDQ3MzMsMTE1NC40MTE4NDM4OTEwNzgsMTYxMjguNzgzODk1NTk3NDA0LDIzNjY2LjA3ODAxMzE2NTk4LDE3ODQuMTQxMTEyNDUwOTI0MywyNjUuMTQyODgxMzEyNDUyNDYKKzI4LE1vbiAyMSBGZWIgMTEsNzU5Ny43NDM5OTEyMjUyNTksMTYxNC40NzA3MTM5ODI4ODksMTY5OC41NzMxMjA3MzUzODg2LDEyMjk0LjM3ODExNTAyMTc4MiwyNjc2LjU5MjkwNzQ5Njg4MTcsMjQ0NDAzLjQ4Nzk0NTI3MjU2LDI0ODY2NS4yMDU1MjU4NTMxLDIyMTc5OC4wODYxNjE5MzYyOCwxNzE1ODkuMTYyOTU0NjkyNSw2NDAzOC42NzQ3NTA2MzcwOCwyOTg4LjMyMTgxMTc5MjM3NSw1NjcyNS42NTgyMTYzMzc1Miw2MjYwMS4yMzk3OTMyNDQ5LDE1MDM3My43OTUxNjYyMzY1MiwxMzAzNDcuMTMxMDk5NTA0MjQsODcyNDkuMjc4OTk4MzAxMTMsMTU4NjM2LjM2NjM1MDU0NDMsNzE0LjE1OTMyNDY2Mjk1MzcsMTE1MTkuMjU4Nzg0NjIyMjc4LDExODA0OS42NjIzMzEwMDQ4NSw5MjUuNDcwNDQxMzcxNTgzOCwxNzA0LjMzODI1NDE3NjUwNzUsMjM0ODkuMzE1ODUyMDE5Mzk3LDE3MTgxLjk5NzUwNzMwODI4LDEyNzIuMzQ3MTAyODY0OTM0LDIyNy4wNDE5NDUyNTgyNDkxCisyOSxUdWUgMjIgRmViIDExLDc3NTMuMTg0MTgyNzUxMjgyLDIxNjAuODYxMjM3MTg5MjE2NCwxMDY5LjQzODg2MDkyNDQ2ODYsMTE4MDIuNzc2ODI2NDcwNzEsMTY5Mi41NjMzNTY0NzE0NjEsMjY3ODMzLjk0NzMzMjEwMTMsMTk3OTkxLjU0OTEzMDY1OTg0LDE4NTk5Mi40MDYwNTAyNTQ5LDEzMzkyNi4wNDk2NzEwMzM4LDQzMTU2Ljc5MjU5MTUyNDM3NiwyMTMzLjkzMDAyMTczNjgwMTMsMzY4OTkuMDU1MDQzNzgwMjk2LDY2NTU0LjA3MjA1NjgwNDkxLDE2ODk5NS41NzA2Mjk0NzY2NiwxNDA5NDQuODM3NjUyNDkxNDMsNTg1MDIuMTA4OTkwMDA5MTIsMTg3Njk1LjU5MjI3MzUxMTcsOTgyLjUwOTc4MDEyNzQyMzYsMTY0NDcuODM0MTQwOTg0NjE0LDEyNjg1Mi41MjI4MjMxMjQ4OCwxMzAwLjgxNjAzMjA4MzM4MjQsMjUwNC45NzQzNzYyNzY2Mzk4LDMzNTkwLjUxNDc0Mjg1Nzc0LDEyODM1LjU4NTg3OTg4MTM2OCw5MzUuOTkwMjIxNzEwOTMwMywxNzkuNzc4NDQxNTI2MDk0OTUKKzMwLFdlZCAyMyBGZWIgMTEsNzc2Ny41MzAxOTg2OTAxOTk1LDI4MzEuODA5Mjk4MjUzMDkyLDY4NS4yMDUwNzM2MDA0OTUsMTA4NTguNjMyMzA4MDAzNDgyLDExMDMuNzM5NjYxODQzMTQ3OCwyNzE1MTAuODkwMDkxMjUyNiwxNDQyNTMuODQ4MjYwMzY2NTMsMTQxODUwLjIyMTQxNjAxNDQyLDk1NzkzLjAzMTI1ODE0NTIzLDI5MTIyLjUzODgxNzA5MTQzLDE1NzEuNzE2NDkyOTAzNzI1OCwyNDQ2OS40OTk3MDM1MjQ4OTYsNjQyNjcuOTA2OTUyNzAyNzUsMTc0NTY0LjkzNzk3MTU5MTIsMTQxNjU1LjYyMTA5MTM3Nzk4LDM5MjYxLjIyMjcxMDA1OTg1LDIxMTgwMC42MTE5NDg2MjU1NiwxMzQ0LjgzNzE0NTk2MDE2MTUsMjMxNzUuODA3MTU3MDg2MDksMTI2Nzg2LjI1MDY0MDkxMDUsMTgyMi4wOTUwODQxNTQxNDQ0LDM2NjQuMTIwNzU4MTM3ODE5LDQ3MDIzLjA0MjUwMDQyNjMxNiw5ODIwLjgyNzg1ODM0NTk2NSw3MDcuNTA2NTg2NDk3MjcyMSwxMzIuMDYzMTc4MTg3MDc4MDUKKzMxLFRodSAyNCBGZWIgMTEsNzY0Ny4yMjEwNzEyOTk1NjQsMzYyMi45MTkyOTE4NjAyNzksNDU0LjY2OTU0NjQ4MTczNjQ2LDk1OTIuNDQwODMxNTM4NDQzLDc0OS45MjA4NDk5NDAwNDYyLDI1MTc0MS40NDUyMDYwODg2NSw5NzkyMi4wNzM4NTc1NjYyNCw5OTU3MS43ODUxMjE5MzQwNSw2NDEwNC4yNjg1ODM4NjgxOTQsMTk5OTEuMDM5NDQ2OTU3NzQ4LDExODguNDQwNzE2MjM3NDM3NSwxNjc1NC41MzA4NDc0MDM4NDMsNTU3NTguODkwODA5OTc4ODEsMTYzNTgzLjU1MTMxMzEyMzY0LDEzMDY5OS41Njc4NTEwOTI0OSwyNjg1MC41MDAxMDU2NDg1MSwyMjU0MzYuNDI0NDM3ODI2MzgsMTgzMi40NzE4MzMxNzUxMTM1LDMyMTc1LjMxNzA5NjQ0NTMwNiwxMTY0OTYuOTI5NDQ1MzA5ODQsMjU0NS4xMTMxNTU1Njc1OTI1LDUzMzMuMzAzMzY1NDEzNDU0LDY0MjM5LjQ3MjgyODgxNTgxNSw3NjUzLjQ1MjE0NzcxMTU3OTUsNTQ2LjQ5NzEwNzA2MTQ1MTEsOTEuMzMyMTc2MTU1NDAzNTcKKzMyLEZyaSAyNSBGZWIgMTEsNzM5Mi43MDgzNzE3NzY0MzYsNDUxMC42MzkyMDk5MTQxOTEsMzE0LjQyMDk5NDI1MTc4Mjc2LDgxNTguMzM2NDMxNDA5MjkyLDUzMS4xMTUwNjg3ODAxNzk0LDIxMjAxMS4xNTY2NzI0NjE5Miw2MzY1My4yNDc5ODYwNzQ1NSw2NTg1OS41NTQ4NDU0MzIsNDEzMjguMzkwNDA3MzYwMjYsMTQwODYuNTE4NjQ0ODE4NjI1LDkxNy4wODE2MjEyNTY0MDY4LDExODkxLjc4MTE1MTMzMTg3Nyw0MzM0MC45NjUwNjc1MjQ2MSwxMzc4NjQuMjAzMjcyMTMwMDIsMTA5NzQ4LjQ3ODkwNDAwNjk3LDE4OTEzLjUxMDE2MzgzMzA4NSwyMjM3MDMuMjYwMjE5MDMyODIsMjQ4Ni45ODc2NTUwMzE3MTYsNDM5MzIuNzk4ODc0NzMyMTY1LDk3NjMyLjMxMTk5Mjk1Njk4LDM1NDcuMzA0NjMxNzM3ODcwMyw3NzIzLjAyMzA4OTQwMTU0MSw4NTM0Ni43NjY0MDUxOTI2MSw2MDQyLjcyMDg2MjU0MTQ4OCw0MjguOTM5NDIyNjM5NDQyLDYwLjkwNDc5ODU5Nzg3MTk0CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0RlbW9ncmFwaGljU0VJUkRpc2Vhc2VfRkRfUmVmZXJlbmNlL0ZsdS93b21lbi9Qb3B1bGF0aW9uIENvdW50XzIuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9EZW1vZ3JhcGhpY1NFSVJEaXNlYXNlX0ZEX1JlZmVyZW5jZS9GbHUvd29tZW4vUG9wdWxhdGlvbiBDb3VudF8yLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMTNmZDlmCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9EZW1vZ3JhcGhpY1NFSVJEaXNlYXNlX0ZEX1JlZmVyZW5jZS9GbHUvd29tZW4vUG9wdWxhdGlvbiBDb3VudF8yLmNzdgpAQCAtMCwwICsxLDMzIEBACitpdGVyYXRpb24sdGltZSxFRy1GUkctRzIxMDAwMSxFRy1GUkctRzIxMDAwMixFRy1GUkctRzIxMDAwMyxFRy1GUkctRzIxMDAwNCxFRy1GUkctRzIxMDAwNSxFRy1MT0UtRzI0MDAwMSxFRy1MT0UtRzI0MDAwMixFRy1MT0UtRzI0MDAwMyxFRy1MT0UtRzI0MDAwNCxFRy1MT0UtRzI0MDAwNSxFRy1MT0UtRzI0MDAwNixFRy1MT0UtRzI0MDAwNyxFRy1MT0UtRzI0MDAwOCxFRy1MT0UtRzI0MDAwOSxFRy1VUEUtRzI5MDAwMSxFRy1VUEUtRzI5MDAwMixFRy1VUEUtRzI5MDAwMyxFRy1VUEUtRzI5MDAwNCxFRy1VUEUtRzI5MDAwNSxFRy1VUEUtRzI5MDAwNixFRy1VUEUtRzI5MDAwNyxFRy1VUEUtRzI5MDAwOCxFRy1VUkctRzMwMDAwMSxFRy1VUkctRzMwMDAwMixFRy1VUkctRzMwMDAwMyxFRy1VUkctRzMwMDAwNAorMSxUdWUgMjUgSmFuIDExLDE0NzgwNi42ODU0OTI5OTY1NiwxMzE5NjkuNzg5NzcwMDcwODcsNzY4MTcuMTU5MjQ1MTE0NzcsMTU4ODAxLjI0NTk3NTc0MjUyLDE2MDA3MC4wNjEwMzM1MDM1LDI1ODc1OTUuMjgxMDg5MDY5MywyODExOTM3LjExMTI2ODM0OTUsMjMwNDY1MS4wMjU5NTAyNDk4LDIwMDE4MjEuOTg5Mzg3MDU2OCwyNTAyNzgxLjUzMTQwNDkxMTUsNTA4MjQxLjMyODIzNzYyMjE2LDI5NzEwODQuOTg5NzAzNjE0Nyw1ODc5OTQuODQ1MTA5NTAxNiwxNTYwODk5Ljk5MDgyMDg0MDIsMTM5NTE2MC4wODQ2ODcxNDA4LDMyMDI3MTIuMTEyNTAwMzc0LDIzMjAyMzguNDY2NTIxNjY5LDY1MjUzNy4xMDc3OTMwNTU5LDE4OTkxNzkuMjA5MTY1NjM2NSwxMjY0ODAwLjIzMjM4MDgwNiwxODY4NTA2Ljc0NDcyMzUyMTQsMjA3NDkyOS4zNzk4NTI5NDY0LDE4NDU4MzcuODgzNTE1ODczMiw0MjA3NTQ3LjUxNzYwNDQ5NDUsMjY4MzIyLjU3NjY4MDA1ODIsMzM1OS42Mjk5MjE5OTA4NDk3CisyLFdlZCAyNiBKYW4gMTEsMTQ3ODA2LjgzMzI5OTY4MjA3LDEzMTk2OS45MjE3Mzk4NjA2NCw3NjgxNy4yMzYwNjIyNzQwMiwxNTg4MDEuNDA0Nzc2OTg4NSwxNjAwNzAuMjIxMTAzNTY0NTUsMjU4NzU5Ny44Njg2ODQzNTA1LDI4MTE5MzkuOTIzMjA1NDYxLDIzMDQ2NTMuMzMwNjAxMjc2LDIwMDE4MjMuOTkxMjA5MDQ2MiwyNTAyNzg0LjAzNDE4NjQ0Myw1MDgyNDEuODM2NDc4OTUwNCwyOTcxMDg3Ljk2MDc4ODYwNDMsNTg3OTk1LjQzMzEwNDM0NjcsMTU2MDkwMS41NTE3MjA4MzEsMTM5NTE2MS40Nzk4NDcyMjU0LDMyMDI3MTUuMzE1MjEyNDg3LDIzMjAyNDAuNzg2NzYwMTM1Niw2NTI1MzcuNzYwMzMwMTYzOCwxODk5MTgxLjEwODM0NDg0NTcsMTI2NDgwMS40OTcxODEwMzg0LDE4Njg1MDguNjEzMjMwMjY2MSwyMDc0OTMxLjQ1NDc4MjMyNjIsMTg0NTgzOS43MjkzNTM3NTY2LDQyMDc1NTEuNzI1MTUyMDEyLDI2ODMyMi44NDUwMDI2MzQ4NiwzMzU5LjYzMzI4MTYyMDc3MgorMyxUaHUgMjcgSmFuIDExLDE0NzgwNi45ODExMDY1MTUzNiwxMzE5NzAuMDUzNzA5NzgyMzcsNzY4MTcuMzEyODc5NTEwMSwxNTg4MDEuNTYzNTc4MzkzMjgsMTYwMDcwLjM4MTE3Mzc4NTY2LDI1ODc2MDAuNDU2MjgyMjE5NCwyODExOTQyLjczNTE0NTM4NCwyMzA0NjU1LjYzNTI1NDYwNjYsMjAwMTgyNS45OTMwMzMwMzc1LDI1MDI3ODYuNTM2OTcwNDc3LDUwODI0Mi4zNDQ3MjA3ODY5LDI5NzEwOTAuOTMxODc2NTY1Myw1ODc5OTYuMDIxMDk5Nzc5OSwxNTYwOTAzLjExMjYyMjM4MjgsMTM5NTE2Mi44NzUwMDg3MDUzLDMyMDI3MTguNTE3OTI3ODAyLDIzMjAyNDMuMTA3MDAwOTIyMyw2NTI1MzguNDEyODY3OTI0MSwxODk5MTgzLjAwNzUyNTk1NDIsMTI2NDgwMi43NjE5ODI1MzU1LDE4Njg1MTAuNDgxNzM4ODc5MywyMDc0OTMzLjUyOTcxMzc4MSwxODQ1ODQxLjU3NTE5MzQ4Niw0MjA3NTU1LjkzMjcwMzczNywyNjgzMjMuMTEzMzI1NDc5ODUsMzM1OS42MzY2NDEyNTQwNTMzCis0LEZyaSAyOCBKYW4gMTEsMTQ3ODA3LjEyODkxMzQ5NjQ4LDEzMTk3MC4xODU2Nzk4MzYwOCw3NjgxNy4zODk2OTY4MjI5OCwxNTg4MDEuNzIyMzc5OTU2ODYsMTYwMDcwLjU0MTI0NDE2Njg0LDI1ODc2MDMuMDQzODgyNjc1NSwyODExOTQ1LjU0NzA4ODExOSwyMzA0NjU3LjkzOTkxMDI0MiwyMDAxODI3Ljk5NDg1OTAzMDUsMjUwMjc4OS4wMzk3NTcwMTQzLDUwODI0Mi44NTI5NjMxMzE2LDI5NzEwOTMuOTAyOTY3NDk3Miw1ODc5OTYuNjA5MDk1ODAxLDE1NjA5MDQuNjczNTI1NDk1NSwxMzk1MTY0LjI3MDE3MTU4MDQsMzIwMjcyMS43MjA2NDYzMjA0LDIzMjAyNDUuNDI3MjQ0MDI5LDY1MjUzOS4wNjU0MDYzMzY5LDE4OTkxODQuOTA2NzA4OTYxNiwxMjY0ODA0LjAyNjc4NTI5NzMsMTg2ODUxMi4zNTAyNDkzNjEsMjA3NDkzNS42MDQ2NDczMTA3LDE4NDU4NDMuNDIxMDM1MDYxMSw0MjA3NTYwLjE0MDI1OTY3LDI2ODMyMy4zODE2NDg1OTMyLDMzNTkuNjQwMDAwODkwNjk0NAorNSxTYXQgMjkgSmFuIDExLDE0NzgwNy4yNzY3MjA2MjUzOCwxMzE5NzAuMzE3NjUwMDIxNzUsNzY4MTcuNDY2NTE0MjEyNjgsMTU4ODAxLjg4MTE4MTY3OTI2LDE2MDA3MC43MDEzMTQ3MDgwNywyNTg3NjA1LjYzMTQ4NTcxOTcsMjgxMTk0OC4zNTkwMzM2NjY2LDIzMDQ2NjAuMjQ0NTY4MTgxNywyMDAxODI5Ljk5NjY4NzAyNTUsMjUwMjc5MS41NDI1NDYwNTQsNTA4MjQzLjM2MTIwNTk4NDYsMjk3MTA5Ni44NzQwNjE0LDU4Nzk5Ny4xOTcwOTI0MTAxLDE1NjA5MDYuMjM0NDMwMTY5LDEzOTUxNjUuNjY1MzM1ODUwNiwzMjAyNzI0LjkyMzM2ODA0MSwyMzIwMjQ3Ljc0NzQ4OTQ1Niw2NTI1MzkuNzE3OTQ1NDAyNCwxODk5MTg2LjgwNTg5Mzg2ODIsMTI2NDgwNS4yOTE1ODkzMjQxLDE4Njg1MTQuMjE4NzYxNzExMSwyMDc0OTM3LjY3OTU4MjkxNTMsMTg0NTg0NS4yNjY4Nzg0ODIyLDQyMDc1NjQuMzQ3ODE5ODEsMjY4MzIzLjY0OTk3MTk3NDg0LDMzNTkuNjQzMzYwNTMwNjk1Cis2LFN1biAzMCBKYW4gMTEsMTQ3ODA3LjQyNDUyNzkwMjEsMTMxOTcwLjQ0OTYyMDMzOTQsNzY4MTcuNTQzMzMxNjc5MTksMTU4ODAyLjAzOTk4MzU2MDQyLDE2MDA3MC44NjEzODU0MDkzNywyNTg3NjA4LjIxOTA5MTM1MTYsMjgxMTk1MS4xNzA5ODIwMjUsMjMwNDY2Mi41NDkyMjg0MjY1LDIwMDE4MzEuOTk4NTE3MDIyMiwyNTAyNzk0LjA0NTMzNzU5Nyw1MDgyNDMuODY5NDQ5MzQ1NzQsMjk3MTA5OS44NDUxNTgyNzQsNTg3OTk3Ljc4NTA4OTYwNzEsMTU2MDkwNy43OTUzMzY0MDM0LDEzOTUxNjcuMDYwNTAxNTE1OSwzMjAyNzI4LjEyNjA5Mjk2NTIsMjMyMDI1MC4wNjc3MzcyMDM2LDY1MjU0MC4zNzA0ODUxMjAzLDE4OTkxODguNzA1MDgwNjc0LDEyNjQ4MDYuNTU2Mzk0NjE1NywxODY4NTE2LjA4NzI3NTkzLDIwNzQ5MzkuNzU0NTIwNTk0OCwxODQ1ODQ3LjExMjcyMzc0OTEsNDIwNzU2OC41NTUzODQxNTgsMjY4MzIzLjkxODI5NTYyNDgsMzM1OS42NDY3MjAxNzQwNTYKKzcsTW9uIDMxIEphbiAxMSwxNDc4MDcuNTcyMzM1MzI2NiwxMzE5NzAuNTgxNTkwNzg5MDIsNzY4MTcuNjIwMTQ5MjIyNTEsMTU4ODAyLjE5ODc4NTYwMDQzLDE2MDA3MS4wMjE0NTYyNzA3NywyNTg3NjEwLjgwNjY5OTU3LDI4MTE5NTMuOTgyOTMzMTk2LDIzMDQ2NjQuODUzODkwOTc2NCwyMDAxODM0LjAwMDM0OTAyMDQsMjUwMjc5Ni41NDgxMzE2NDIsNTA4MjQ0LjM3NzY5MzIxNTIsMjk3MTEwMi44MTYyNTgxMTk0LDU4Nzk5OC4zNzMwODczOTIyLDE1NjA5MDkuMzU2MjQ0MTk4NywxMzk1MTY4LjQ1NTY2ODU3NjUsMzIwMjczMS4zMjg4MjEwOTEsMjMyMDI1Mi4zODc5ODcyNzIzLDY1MjU0MS4wMjMwMjU0OTA4LDE4OTkxOTAuNjA0MjY5Mzc5LDEyNjQ4MDcuODIxMjAxMTcyMiwxODY4NTE3Ljk1NTc5MjAxNzMsMjA3NDk0MS44Mjk0NjAzNDk0LDE4NDU4NDguOTU4NTcwODYyLDQyMDc1NzIuNzYyOTUyNzEzLDI2ODMyNC4xODY2MTk1NDMxLDMzNTkuNjUwMDc5ODIwNzc2Cis4LFR1ZSAxIEZlYiAxMSwxNDc4MDcuNzIwMTQyODk4OTYsMTMxOTcwLjcxMzU2MTM3MDYyLDc2ODE3LjY5Njk2Njg0MjY4LDE1ODgwMi4zNTc1ODc3OTkyMywxNjAwNzEuMTgxNTI3MjkyMiwyNTg3NjEzLjM5NDMxMDM3NjYsMjgxMTk1Ni43OTQ4ODcxNzksMjMwNDY2Ny4xNTg1NTU4MywyMDAxODM2LjAwMjE4MzAyMDgsMjUwMjc5OS4wNTA5MjgxOSw1MDgyNDQuODg1OTM3NTkyOSwyOTcxMTA1Ljc4NzM2MDkzNSw1ODc5OTguOTYxMDg1NzY1MywxNTYwOTEwLjkxNzE1MzU1NSwxMzk1MTY5Ljg1MDgzNzAzMjMsMzIwMjczNC41MzE1NTI0MTk1LDIzMjAyNTQuNzA4MjM5NjYsNjUyNTQxLjY3NTU2NjUxMzgsMTg5OTE5Mi41MDM0NTk5ODM1LDEyNjQ4MDkuMDg2MDA4OTkzNCwxODY4NTE5LjgyNDMwOTk3MywyMDc0OTQzLjkwNDQwMjE3OSwxODQ1ODUwLjgwNDQxOTgyMDQsNDIwNzU3Ni45NzA1MjU0NzYsMjY4MzI0LjQ1NDk0MzcyOTc0LDMzNTkuNjUzNDM5NDcwODU2Cis5LFdlZCAyIEZlYiAxMSwxNDc4MDcuODY3OTUwNjE5MSwxMzE5NzAuODQ1NTMyMDg0MTcsNzY4MTcuNzczNzg0NTM5NjMsMTU4ODAyLjUxNjM5MDE1NjgyLDE2MDA3MS4zNDE1OTg0NzM3MiwyNTg3NjE1Ljk4MTkyMzc3MSwyODExOTU5LjYwNjg0Mzk3NCwyMzA0NjY5LjQ2MzIyMjk4OSwyMDAxODM4LjAwNDAxOTAyMzIsMjUwMjgwMS41NTM3MjcyNDAzLDUwODI0NS4zOTQxODI0Nzg4MywyOTcxMTA4Ljc1ODQ2NjcyMyw1ODc5OTkuNTQ5MDg0NzI2NCwxNTYwOTEyLjQ3ODA2NDQ3MjMsMTM5NTE3MS4yNDYwMDY4ODMyLDMyMDI3MzcuNzM0Mjg2OTUxLDIzMjAyNTcuMDI4NDk0MzY4Myw2NTI1NDIuMzI4MTA4MTg5NCwxODk5MTk0LjQwMjY1MjQ4NjcsMTI2NDgxMC4zNTA4MTgwNzkyLDE4Njg1MjEuNjkyODI5Nzk3NSwyMDc0OTQ1Ljk3OTM0NjA4MzIsMTg0NTg1Mi42NTAyNzA2MjUsNDIwNzU4MS4xNzgxMDI0NDYsMjY4MzI0LjcyMzI2ODE4NDY0LDMzNTkuNjU2Nzk5MTI0Mjk1CisxMCxUaHUgMyBGZWIgMTEsMTQ3ODA4LjAxNTc1ODQ4NzA4LDEzMTk3MC45Nzc1MDI5Mjk3Miw3NjgxNy44NTA2MDIzMTM0MSwxNTg4MDIuNjc1MTkyNjczMiwxNjAwNzEuNTAxNjY5ODE1MzMsMjU4NzYxOC41Njk1Mzk3NTMsMjgxMTk2Mi40MTg4MDM1ODA2LDIzMDQ2NzEuNzY3ODkyNDUyLDIwMDE4NDAuMDA1ODU3MDI3MSwyNTAyODA0LjA1NjUyODc5NCw1MDgyNDUuOTAyNDI3ODczLDI5NzExMTEuNzI5NTc1NDgxMyw1ODgwMDAuMTM3MDg0Mjc1NSwxNTYwOTE0LjAzODk3Njk1MDMsMTM5NTE3Mi42NDExNzgxMjksMzIwMjc0MC45MzcwMjQ2ODUsMjMyMDI1OS4zNDg3NTEzOTczLDY1MjU0Mi45ODA2NTA1MTc0LDE4OTkxOTYuMzAxODQ2ODg5NSwxMjY0ODExLjYxNTYyODQzLDE4Njg1MjMuNTYxMzUxNDkwMiwyMDc0OTQ4LjA1NDI5MjA2MjUsMTg0NTg1NC40OTYxMjMyNzUzLDQyMDc1ODUuMzg1NjgzNjI0LDI2ODMyNC45OTE1OTI5MDc5LDMzNTkuNjYwMTU4NzgxMDk0CisxMSxGcmkgNCBGZWIgMTEsMTQ3ODA4LjE2MzU2NjUwMjgzLDEzMTk3MS4xMDk0NzM5MDcxOSw3NjgxNy45Mjc0MjAxNjQwMiwxNTg4MDIuODMzOTk1MzQ4NCwxNjAwNzEuNjYxNzQxMzE3MDIsMjU4NzYyMS4xNTcxNTgzMjIsMjgxMTk2NS4yMzA3NjU5OTkzLDIzMDQ2NzQuMDcyNTY0MjE5NiwyMDAxODQyLjAwNzY5NzAzMywyNTAyODA2LjU1OTMzMjg1MDQsNTA4MjQ2LjQxMDY3Mzc3NTM2LDI5NzExMTQuNzAwNjg3MjExLDU4ODAwMC43MjUwODQ0MTI2LDE1NjA5MTUuNTk5ODkwOTg5NSwxMzk1MTc0LjAzNjM1MDc3MDIsMzIwMjc0NC4xMzk3NjU2MjIsMjMyMDI2MS42NjkwMTA3NDU0LDY1MjU0My42MzMxOTM0OTgxLDE4OTkxOTguMjAxMDQzMTkxMSwxMjY0ODEyLjg4MDQ0MDA0NTYsMTg2ODUyNS40Mjk4NzUwNTE2LDIwNzQ5NTAuMTI5MjQwMTE2OCwxODQ1ODU2LjM0MTk3Nzc3MTQsNDIwNzU4OS41OTMyNjkwMSwyNjgzMjUuMjU5OTE3ODk5NSwzMzU5LjY2MzUxODQ0MTI1MworMTIsU2F0IDUgRmViIDExLDE0NzgwOC4zMTEzNzQ2NjYzNywxMzE5NzEuMjQxNDQ1MDE2NjQsNzY4MTguMDA0MjM4MDkxNDQsMTU4ODAyLjk5Mjc5ODE4MjM2LDE2MDA3MS44MjE4MTI5Nzg3NywyNTg3NjIzLjc0NDc3OTQ3ODgsMjgxMTk2OC4wNDI3MzEyMzEsMjMwNDY3Ni4zNzcyMzgyOTIyLDIwMDE4NDQuMDA5NTM5MDQwNywyNTAyODA5LjA2MjEzOTQwOTYsNTA4MjQ2LjkxODkyMDE4NjEsMjk3MTExNy42NzE4MDE5MTIsNTg4MDAxLjMxMzA4NTEzNzUsMTU2MDkxNy4xNjA4MDY1ODkzLDEzOTUxNzUuNDMxNTI0ODA2NywzMjAyNzQ3LjM0MjUwOTc2MiwyMzIwMjYzLjk4OTI3MjQxNCw2NTI1NDQuMjg1NzM3MTMxMywxODk5MjAwLjEwMDI0MTM5MjQsMTI2NDgxNC4xNDUyNTI5MjYzLDE4Njg1MjcuMjk4NDAwNDgxNSwyMDc0OTUyLjIwNDE5MDI0NjMsMTg0NTg1OC4xODc4MzQxMTM0LDQyMDc1OTMuODAwODU4NjAzLDI2ODMyNS41MjgyNDMxNTk0LDMzNTkuNjY2ODc4MTA0NzcxNQorMTMsU3VuIDYgRmViIDExLDE0NzgwOC40NTkxODI5Nzc3NiwxMzE5NzEuMzczNDE2MjU4MSw3NjgxOC4wODEwNTYwOTU2OSwxNTg4MDMuMTUxNjAxMTc1MiwxNjAwNzEuOTgxODg0ODAwNTcsMjU4NzYyNi4zMzI0MDMyMjQsMjgxMTk3MC44NTQ2OTkyNzMsMjMwNDY3OC42ODE5MTQ2Njk1LDIwMDE4NDYuMDExMzgzMDUwNCwyNTAyODExLjU2NDk0ODQ3Miw1MDgyNDcuNDI3MTY3MTA0OTYsMjk3MTEyMC42NDI5MTk1ODQsNTg4MDAxLjkwMTA4NjQ1MDcsMTU2MDkxOC43MjE3MjM3NSwxMzk1MTc2LjgyNjcwMDIzODMsMzIwMjc1MC41NDUyNTcxMDQ2LDIzMjAyNjYuMzA5NTM2NDAzNSw2NTI1NDQuOTM4MjgxNDE3MSwxODk5MjAxLjk5OTQ0MTQ5MjQsMTI2NDgxNS40MTAwNjcwNzEyLDE4Njg1MjkuMTY2OTI3NzgsMjA3NDk1NC4yNzkxNDI0NTA1LDE4NDU4NjAuMDMzNjkyMzAxMyw0MjA3NTk4LjAwODQ1MjQwMywyNjgzMjUuNzk2NTY4Njg3NjYsMzM1OS42NzAyMzc3NzE2NTA2CisxNCxNb24gNyBGZWIgMTEsMTQ3ODA4LjYwNjk5MTQzNjksMTMxOTcxLjUwNTM4NzYzMTU0LDc2ODE4LjE1Nzg3NDE3Njc0LDE1ODgwMy4zMTA0MDQzMjY4LDE2MDA3Mi4xNDE5NTY3ODI0MywyNTg3NjI4LjkyMDAyOTU1NjQsMjgxMTk3My42NjY2NzAxMjgsMjMwNDY4MC45ODY1OTMzNTEyLDIwMDE4NDguMDEzMjI5MDYxNiwyNTAyODE0LjA2Nzc2MDAzNzMsNTA4MjQ3LjkzNTQxNDUzMjIsMjk3MTEyMy42MTQwNDAyMjY3LDU4ODAwMi40ODkwODgzNTE4LDE1NjA5MjAuMjgyNjQyNDcxOCwxMzk1MTc4LjIyMTg3NzA2NDYsMzIwMjc1My43NDgwMDc2NSwyMzIwMjY4LjYyOTgwMjcxMyw2NTI1NDUuNTkwODI2MzU1MywxODk5MjAzLjg5ODY0MzQ5MiwxMjY0ODE2LjY3NDg4MjQ4MTMsMTg2ODUzMS4wMzU0NTY5NDY4LDIwNzQ5NTYuMzU0MDk2NzI5NSwxODQ1ODYxLjg3OTU1MjMzNDgsNDIwNzYwMi4yMTYwNTA0MTIsMjY4MzI2LjA2NDg5NDQ4NDI0LDMzNTkuNjczNTk3NDQxODg4CisxNSxUdWUgOCBGZWIgMTEsMTQ3ODA4Ljc1NDgwMDA0MzksMTMxOTcxLjYzNzM1OTEzNjksNzY4MTguMjM0NjkyMzM0NjIsMTU4ODAzLjQ2OTIwNzYzNzIyLDE2MDA3Mi4zMDIwMjg5MjQzNywyNTg3NjMxLjUwNzY1ODQ3NiwyODExOTc2LjQ3ODY0Mzc5NDUsMjMwNDY4My4yOTEyNzQzMzc2LDIwMDE4NTAuMDE1MDc3MDc0OCwyNTAyODE2LjU3MDU3NDEwNTMsNTA4MjQ4LjQ0MzY2MjQ2NzYsMjk3MTEyNi41ODUxNjM4NDEsNTg4MDAzLjA3NzA5MDg0MDgsMTU2MDkyMS44NDM1NjI3NTQzLDEzOTUxNzkuNjE3MDU1Mjg2NCwzMjAyNzU2Ljk1MDc2MTM5OCwyMzIwMjcwLjk1MDA3MTM0Myw2NTI1NDYuMjQzMzcxOTQ2MiwxODk5MjA1Ljc5Nzg0NzM5MDQsMTI2NDgxNy45Mzk2OTkxNTYyLDE4Njg1MzIuOTAzOTg3OTgyMywyMDc0OTU4LjQyOTA1MzA4NCwxODQ1ODYzLjcyNTQxNDIxNDQsNDIwNzYwNi40MjM2NTI2MjgsMjY4MzI2LjMzMzIyMDU0OTE2LDMzNTkuNjc2OTU3MTE1NDg1NQorMTYsV2VkIDkgRmViIDExLDE0NzgwOC45MDI2MDg3OTg3LDEzMTk3MS43NjkzMzA3NzQyNiw3NjgxOC4zMTE1MTA1NjkzMSwxNTg4MDMuNjI4MDExMTA2NCwxNjAwNzIuNDYyMTAxMjI2NDQsMjU4NzYzNC4wOTUyODk5ODQsMjgxMTk3OS4yOTA2MjAyNzMsMjMwNDY4NS41OTU5NTc2MjksMjAwMTg1Mi4wMTY5MjcwODk4LDI1MDI4MTkuMDczMzkwNjc1Nyw1MDgyNDguOTUxOTEwOTExMjQsMjk3MTEyOS41NTYyOTA0MjYzLDU4ODAwMy42NjUwOTM5MTc5LDE1NjA5MjMuNDA0NDg0NTk4MiwxMzk1MTgxLjAxMjIzNDkwMzYsMzIwMjc2MC4xNTM1MTgzNDksMjMyMDI3My4yNzAzNDIyOTI3LDY1MjU0Ni44OTU5MTgxODk1LDE4OTkyMDcuNjk3MDUzMTg4NywxMjY0ODE5LjIwNDUxNzA5NjMsMTg2ODUzNC43NzI1MjA4ODYsMjA3NDk2MC41MDQwMTE1MTMyLDE4NDU4NjUuNTcxMjc3OTQsNDIwNzYxMC42MzEyNTkwNTIsMjY4MzI2LjYwMTU0Njg4MjM2LDMzNTkuNjgwMzE2NzkyNDQyCisxNyxUaHUgMTAgRmViIDExLDE0NzgwOS4wNTA0MTc3MDEzNCwxMzE5NzEuOTAxMzAyNTQzNiw3NjgxOC4zODgzMjg4ODA4MywxNTg4MDMuNzg2ODE0NzM0NDMsMTYwMDcyLjYyMjE3MzY4ODU1LDI1ODc2MzYuNjgyOTI0MDc5MiwyODExOTgyLjEwMjU5OTU2MzUsMjMwNDY4Ny45MDA2NDMyMjQ0LDIwMDE4NTQuMDE4Nzc5MTA3LDI1MDI4MjEuNTc2MjA5NzQ5LDUwODI0OS40NjAxNTk4NjMwNSwyOTcxMTMyLjUyNzQxOTk4MjUsNTg4MDA0LjI1MzA5NzU4MywxNTYwOTI0Ljk2NTQwODAwMjMsMTM5NTE4Mi40MDc0MTU5MTYsMzIwMjc2My4zNTYyNzg1MDI0LDIzMjAyNzUuNTkwNjE1NTYzLDY1MjU0Ny41NDg0NjUwODUzLDE4OTkyMDkuNTk2MjYwODg1NywxMjY0ODIwLjQ2OTMzNjMwMDYsMTg2ODUzNi42NDEwNTU2NTg3LDIwNzQ5NjIuNTc4OTcyMDE3LDE4NDU4NjcuNDE3MTQzNTExMSw0MjA3NjE0LjgzODg2OTY4MywyNjgzMjYuODY5ODczNDgzOSwzMzU5LjY4MzY3NjQ3Mjc1OQorMTgsRnJpIDExIEZlYiAxMSwxNDc4MDkuMTk4MjI2NzUxNywxMzE5NzIuMDMzMjc0NDQ0OSw3NjgxOC40NjUxNDcyNjkxNSwxNTg4MDMuOTQ1NjE4NTIxMjUsMTYwMDcyLjc4MjI0NjMxMDczLDI1ODc2MzkuMjcwNTYwNzYyLDI4MTE5ODQuOTE0NTgxNjY2MiwyMzA0NjkwLjIwNTMzMTEyNSwyMDAxODU2LjAyMDYzMzEyNTcsMjUwMjgyNC4wNzkwMzEzMjU0LDUwODI0OS45Njg0MDkzMjMyNSwyOTcxMTM1LjQ5ODU1MjUxLDU4ODAwNC44NDExMDE4MzYyLDE1NjA5MjYuNTI2MzMyOTY3NywxMzk1MTgzLjgwMjU5ODMyMzIsMzIwMjc2Ni41NTkwNDE4NTg3LDIzMjAyNzcuOTEwODkxMTU0LDY1MjU0OC4yMDEwMTI2MzQsMTg5OTIxMS40OTU0NzA0ODE3LDEyNjQ4MjEuNzM0MTU2NzcsMTg2ODUzOC41MDk1OTIyOTk2LDIwNzQ5NjQuNjUzOTM0NTk1OSwxODQ1ODY5LjI2MzAxMDkyODQsNDIwNzYxOS4wNDY0ODQ1MjI1LDI2ODMyNy4xMzgyMDAzNTM4LDMzNTkuNjg3MDM2MTU2NDM1CisxOSxTYXQgMTIgRmViIDExLDE0NzgwOS4zNDYwMzU5NDk5MSwxMzE5NzIuMTY1MjQ2NDc4Miw3NjgxOC41NDE5NjU3MzQzLDE1ODgwNC4xMDQ0MjI0NjY4NiwxNjAwNzIuOTQyMzE5MDkyOTUsMjU4NzY0MS44NTgyMDAwMzIzLDI4MTE5ODcuNzI2NTY2NTgwNiwyMzA0NjkyLjUxMDAyMTMzMDMsMjAwMTg1OC4wMjI0ODkxNDYsMjUwMjgyNi41ODE4NTU0MDQsNTA4MjUwLjQ3NjY1OTI5MTY2LDI5NzExMzguNDY5Njg4MDA4NSw1ODgwMDUuNDI5MTA2Njc3MiwxNTYwOTI4LjA4NzI1OTQ5NCwxMzk1MTg1LjE5Nzc4MjEyNTYsMzIwMjc2OS43NjE4MDg0MTc3LDIzMjAyODAuMjMxMTY5MDY0NSw2NTI1NDguODUzNTYwODM0OCwxODk5MjEzLjM5NDY4MTk3NywxMjY0ODIyLjk5ODk3ODUwNDIsMTg2ODU0MC4zNzgxMzA4MDkyLDIwNzQ5NjYuNzI4ODk5MjQ5OCwxODQ1ODcxLjEwODg4MDE5MTMsNDIwNzYyMy4yNTQxMDM1NjksMjY4MzI3LjQwNjUyNzQ5MiwzMzU5LjY5MDM5NTg0MzQ3MTQKKzIwLFN1biAxMyBGZWIgMTEsMTQ3ODA5LjQ5Mzg0NTI5NTk4LDEzMTk3Mi4yOTcyMTg2NDM0NSw3NjgxOC42MTg3ODQyNzYyNiwxNTg4MDQuMjYzMjI2NTcxMjYsMTYwMDczLjEwMjM5MjAzNTI3LDI1ODc2NDQuNDQ1ODQxODkwMywyODExOTkwLjUzODU1NDMwNywyMzA0Njk0LjgxNDcxMzg0MDQsMjAwMTg2MC4wMjQzNDcxNjg0LDI1MDI4MjkuMDg0NjgxOTg2NCw1MDgyNTAuOTg0OTA5NzY4MzMsMjk3MTE0MS40NDA4MjY0Nzg0LDU4ODAwNi4wMTcxMTIxMDYzLDE1NjA5MjkuNjQ4MTg3NTgxNCwxMzk1MTg2LjU5Mjk2NzMyMzUsMzIwMjc3Mi45NjQ1NzgxNzksMjMyMDI4Mi41NTE0NDkyOTYsNjUyNTQ5LjUwNjEwOTY4ODQsMTg5OTIxNS4yOTM4OTUzNzE3LDEyNjQ4MjQuMjYzODAxNTAzMiwxODY4NTQyLjI0NjY3MTE4NzIsMjA3NDk2OC44MDM4NjU5Nzg3LDE4NDU4NzIuOTU0NzUxMzAwNCw0MjA3NjI3LjQ2MTcyNjgyMywyNjgzMjcuNjc0ODU0ODk4NSwzMzU5LjY5Mzc1NTUzMzg2NzMKKzIxLE1vbiAxNCBGZWIgMTEsMTQ3ODA5LjY0MTY1NDc4OTgsMTMxOTcyLjQyOTE5MDk0MDY2LDc2ODE4LjY5NTYwMjg5NTA1LDE1ODgwNC40MjIwMzA4MzQ1LDE2MDA3My4yNjI0NjUxMzc2NywyNTg3NjQ3LjAzMzQ4NjMzNywyODExOTkzLjM1MDU0NDg0NTcsMjMwNDY5Ny4xMTk0MDg2NTUsMjAwMTg2Mi4wMjYyMDcxOTI4LDI1MDI4MzEuNTg3NTExMDcwNSw1MDgyNTEuNDkzMTYwNzUzMiwyOTcxMTQ0LjQxMTk2NzkxODcsNTg4MDA2LjYwNTExODEyMzUsMTU2MDkzMS4yMDkxMTcyMjksMTM5NTE4Ny45ODgxNTM5MTYzLDMyMDI3NzYuMTY3MzUxMTQ0LDIzMjAyODQuODcxNzMxODQ3NSw2NTI1NTAuMTU4NjU5MTk0NSwxODk5MjE3LjE5MzExMDY2NTUsMTI2NDgyNS41Mjg2MjU3NjcsMTg2ODU0NC4xMTUyMTM0MzQsMjA3NDk3MC44Nzg4MzQ3ODI2LDE4NDU4NzQuODAwNjI0MjU1LDQyMDc2MzEuNjY5MzU0Mjg1LDI2ODMyNy45NDMxODI1NzMzNiwzMzU5LjY5NzExNTIyNzYyMjQKKzIyLFR1ZSAxNSBGZWIgMTEsMTQ3ODA5Ljc4OTQ2NDQzMTQ3LDEzMTk3Mi41NjExNjMzNjk4Niw3NjgxOC43NzI0MjE1OTA2NSwxNTg4MDQuNTgwODM1MjU2NTUsMTYwMDczLjQyMjUzODQwMDEsMjU4NzY0OS42MjExMzMzNzAzLDI4MTE5OTYuMTYyNTM4MTk2LDIzMDQ2OTkuNDI0MTA1Nzc0LDIwMDE4NjQuMDI4MDY5MjE5MywyNTAyODM0LjA5MDM0MjY1ODYsNTA4MjUyLjAwMTQxMjI0NjQsMjk3MTE0Ny4zODMxMTIzMzEsNTg4MDA3LjE5MzEyNDcyODUsMTU2MDkzMi43NzAwNDg0Mzg4LDEzOTUxODkuMzgzMzQxOTA0NSwzMjAyNzc5LjM3MDEyNzMxMSwyMzIwMjg3LjE5MjAxNjcxOTQsNjUyNTUwLjgxMTIwOTM1MzMsMTg5OTIxOS4wOTIzMjc4NTg2LDEyNjQ4MjYuNzkzNDUxMjk1NSwxODY4NTQ1Ljk4Mzc1NzU0OTQsMjA3NDk3Mi45NTM4MDU2NjE1LDE4NDU4NzYuNjQ2NDk5MDU1Nyw0MjA3NjM1Ljg3Njk4NTk1NCwyNjgzMjguMjExNTEwNTE2NSwzMzU5LjcwMDQ3NDkyNDczOAorMjMsV2VkIDE2IEZlYiAxMSwxNDc4MDkuOTM3Mjc0MjIwOTIsMTMxOTcyLjY5MzEzNTkzMSw3NjgxOC44NDkyNDAzNjMwOCwxNTg4MDQuNzM5NjM5ODM3MzgsMTYwMDczLjU4MjYxMTgyMjY0LDI1ODc2NTIuMjA4NzgyOTkyLDI4MTE5OTguOTc0NTM0MzU5LDIzMDQ3MDEuNzI4ODA1MTk4MywyMDAxODY2LjAyOTkzMzI0NzUsMjUwMjgzNi41OTMxNzY3NDg2LDUwODI1Mi41MDk2NjQyNDc4NiwyOTcxMTUwLjM1NDI1OTcxNCw1ODgwMDcuNzgxMTMxOTIxOCwxNTYwOTM0LjMzMDk4MTIwODUsMTM5NTE5MC43Nzg1MzEyODc4LDMyMDI3ODIuNTcyOTA2NjgxMywyMzIwMjg5LjUxMjMwMzkxMiw2NTI1NTEuNDYzNzYwMTY0NCwxODk5MjIwLjk5MTU0Njk1MSwxMjY0ODI4LjA1ODI3ODA4OSwxODY4NTQ3Ljg1MjMwMzUzMywyMDc0OTc1LjAyODc3ODYxNTQsMTg0NTg3OC40OTIzNzU3MDI0LDQyMDc2NDAuMDg0NjIxODMyLDI2ODMyOC40Nzk4Mzg3MjgwMywzMzU5LjcwMzgzNDYyNTIxMworMjQsVGh1IDE3IEZlYiAxMSwxNDc4MTAuMDg1MDg0MTU4MiwxMzE5NzIuODI1MTA4NjI0MSw3NjgxOC45MjYwNTkyMTIzMiwxNTg4MDQuODk4NDQ0NTc3LDE2MDA3My43NDI2ODU0MDUyOCwyNTg3NjU0Ljc5NjQzNTIwMSwyODEyMDAxLjc4NjUzMzMzMzQsMjMwNDcwNC4wMzM1MDY5MjcsMjAwMTg2OC4wMzE3OTkyNzc1LDI1MDI4MzkuMDk2MDEzMzQyLDUwODI1My4wMTc5MTY3NTc1NiwyOTcxMTUzLjMyNTQxMDA2ODUsNTg4MDA4LjM2OTEzOTcwMjksMTU2MDkzNS44OTE5MTU1Mzk1LDEzOTUxOTIuMTczNzIyMDY2NSwzMjAyNzg1Ljc3NTY4OTI1NCwyMzIwMjkxLjgzMjU5MzQyNCw2NTI1NTIuMTE2MzExNjI4MSwxODk5MjIyLjg5MDc2Nzk0MjQsMTI2NDgyOS4zMjMxMDYxNDcsMTg2ODU0OS43MjA4NTEzODUzLDIwNzQ5NzcuMTAzNzUzNjQzOCwxODQ1ODgwLjMzODI1NDE5NDcsNDIwNzY0NC4yOTIyNjE5MTYsMjY4MzI4Ljc0ODE2NzIwNzksMzM1OS43MDcxOTQzMjkwNDY2CisyNSxGcmkgMTggRmViIDExLDE0NzgxMC4yMzI4OTQyNDMzLDEzMTk3Mi45NTcwODE0NDkyNSw3NjgxOS4wMDI4NzgxMzgzNywxNTg4MDUuMDU3MjQ5NDc1NDIsMTYwMDczLjkwMjc1OTE0Nzk1LDI1ODc2NTcuMzg0MDg5OTk3LDI4MTIwMDQuNTk4NTM1MTIsMjMwNDcwNi4zMzgyMTA5NjEsMjAwMTg3MC4wMzM2NjczMDkyLDI1MDI4NDEuNTk4ODUyNDM4LDUwODI1My41MjYxNjk3NzU0NiwyOTcxMTU2LjI5NjU2MzM5NCw1ODgwMDguOTU3MTQ4MDcyLDE1NjA5MzcuNDUyODUxNDMxNCwxMzk1MTkzLjU2ODkxNDI0LDMyMDI3ODguOTc4NDc1MDI5NiwyMzIwMjk0LjE1Mjg4NTI1Nyw2NTI1NTIuNzY4ODYzNzQ0NSwxODk5MjI0Ljc4OTk5MDgzMywxMjY0ODMwLjU4NzkzNTQ3MDMsMTg2ODU1MS41ODk0MDExMDYxLDIwNzQ5NzkuMTc4NzMwNzQ4LDE4NDU4ODIuMTg0MTM0NTMyNyw0MjA3NjQ4LjQ5OTkwNjIwOCwyNjgzMjkuMDE2NDk1OTU2MDUsMzM1OS43MTA1NTQwMzYyNDIKKzI2LFNhdCAxOSBGZWIgMTEsMTQ3ODEwLjM4MDcwNDQ3NjIsMTMxOTczLjA4OTA1NDQwNjMzLDc2ODE5LjA3OTY5NzE0MTI1LDE1ODgwNS4yMTYwNTQ1MzI2OCwxNjAwNzQuMDYyODMzMDUwNywyNTg3NjU5Ljk3MTc0NzM4MTYsMjgxMjAwNy40MTA1Mzk3MTgsMjMwNDcwOC42NDI5MTcyOTg3LDIwMDE4NzIuMDM1NTM3MzQyNSwyNTAyODQ0LjEwMTY5NDAzNyw1MDgyNTQuMDM0NDIzMzAxNjQsMjk3MTE1OS4yNjc3MTk2OTA3LDU4ODAwOS41NDUxNTcwMjkyLDE1NjA5MzkuMDEzNzg4ODg0LDEzOTUxOTQuOTY0MTA3ODA5LDMyMDI3OTIuMTgxMjY0MDA4NCwyMzIwMjk2LjQ3MzE3OTQwOTMsNjUyNTUzLjQyMTQxNjUxMzMsMTg5OTIyNi42ODkyMTU2MjMsMTI2NDgzMS44NTI3NjYwNTgyLDE4Njg1NTMuNDU3OTUyNjk1NywyMDc0OTgxLjI1MzcwOTkyNjUsMTg0NTg4NC4wMzAwMTY3MTcsNDIwNzY1Mi43MDc1NTQ3MDgsMjY4MzI5LjI4NDgyNDk3MjU2LDMzNTkuNzEzOTEzNzQ2Nzk1MgorMjcsU3VuIDIwIEZlYiAxMSwxNDc4MTAuNTI4NTE0ODU2OSwxMzE5NzMuMjIxMDI3NDk1MzcsNzY4MTkuMTU2NTE2MjIwOTQsMTU4ODA1LjM3NDg1OTc0ODc2LDE2MDA3NC4yMjI5MDcxMTM1NSwyNTg3NjYyLjU1OTQwNzM1MjUsMjgxMjAxMC4yMjI1NDcxMjksMjMwNDcxMC45NDc2MjU5NDE2LDIwMDE4NzQuMDM3NDA5Mzc4NCwyNTAyODQ2LjYwNDUzODEzODUsNTA4MjU0LjU0MjY3NzMzNjEsMjk3MTE2Mi4yMzg4Nzg5NTgsNTg4MDEwLjEzMzE2NjU3NDMsMTU2MDk0MC41NzQ3Mjc4OTgsMTM5NTE5Ni4zNTkzMDI3NzMxLDMyMDI3OTUuMzg0MDU2MTg5NiwyMzIwMjk4Ljc5MzQ3NTg4MjYsNjUyNTU0LjA3Mzk2OTkzNDcsMTg5OTIyOC41ODg0NDIzMTI2LDEyNjQ4MzMuMTE3NTk3OTExLDE4Njg1NTUuMzI2NTA2MTUzNCwyMDc0OTgzLjMyODY5MTE4LDE4NDU4ODUuODc1OTAwNzQ2OCw0MjA3NjU2LjkxNTIwNzQxNiwyNjgzMjkuNTUzMTU0MjU3NCwzMzU5LjcxNzI3MzQ2MDcwOTcKKzI4LE1vbiAyMSBGZWIgMTEsMTQ3ODEwLjY3NjMyNTM4NTQzLDEzMTk3My4zNTMwMDA3MTY0LDc2ODE5LjIzMzMzNTM3NzQ2LDE1ODgwNS41MzM2NjUxMjM2LDE2MDA3NC4zODI5ODEzMzY0NCwyNTg3NjY1LjE0NzA2OTkxMjQsMjgxMjAxMy4wMzQ1NTczNTEsMjMwNDcxMy4yNTIzMzY4ODk1LDIwMDE4NzYuMDM5MjgzNDE1OCwyNTAyODQ5LjEwNzM4NDc0MjcsNTA4MjU1LjA1MDkzMTg3ODc0LDI5NzExNjUuMjEwMDQxMTk3LDU4ODAxMC43MjExNzY3MDc0LDE1NjA5NDIuMTM1NjY4NDcyNiwxMzk1MTk3Ljc1NDQ5OTEzMjMsMzIwMjc5OC41ODY4NTE1NzM1LDIzMjAzMDEuMTEzNzc0Njc2LDY1MjU1NC43MjY1MjQwMDg4LDE4OTkyMzAuNDg3NjcwOTAwOCwxMjY0ODM0LjM4MjQzMTAyODYsMTg2ODU1Ny4xOTUwNjE0OCwyMDc0OTg1LjQwMzY3NDUwOSwxODQ1ODg3LjcyMTc4NjYyMyw0MjA3NjYxLjEyMjg2NDMzMSwyNjgzMjkuODIxNDgzODEwNTUsMzM1OS43MjA2MzMxNzc5ODMKKzI5LFR1ZSAyMiBGZWIgMTEsMTQ3ODEwLjgyNDEzNjA2MTc0LDEzMTk3My40ODQ5NzQwNjk0LDc2ODE5LjMxMDE1NDYxMDgxLDE1ODgwNS42OTI0NzA2NTczLDE2MDA3NC41NDMwNTU3MTk0MywyNTg3NjY3LjczNDczNTA1OSwyODEyMDE1Ljg0NjU3MDM4NTYsMjMwNDcxNS41NTcwNTAxNDE1LDIwMDE4NzguMDQxMTU5NDU1LDI1MDI4NTEuNjEwMjMzODUwMyw1MDgyNTUuNTU5MTg2OTI5NjYsMjk3MTE2OC4xODEyMDY0MDcsNTg4MDExLjMwOTE4NzQyODcsMTU2MDk0My42OTY2MTA2MDgxLDEzOTUxOTkuMTQ5Njk2ODg3LDMyMDI4MDEuNzg5NjUwMTYxLDIzMjAzMDMuNDM0MDc1Nzg5NSw2NTI1NTUuMzc5MDc4NzM1MiwxODk5MjMyLjM4NjkwMTM4ODksMTI2NDgzNS42NDcyNjU0MTEyLDE4Njg1NTkuMDYzNjE4Njc1LDIwNzQ5ODcuNDc4NjU5OTEyNSwxODQ1ODg5LjU2NzY3NDM0NDYsNDIwNzY2NS4zMzA1MjU0NTQsMjY4MzMwLjA4OTgxMzYzMiwzMzU5LjcyMzk5Mjg5ODYxNjQKKzMwLFdlZCAyMyBGZWIgMTEsMTQ3ODEwLjk3MTk0Njg4NTg3LDEzMTk3My42MTY5NDc1NTQ0LDc2ODE5LjM4Njk3MzkyMDk2LDE1ODgwNS44NTEyNzYzNDk3NCwxNjAwNzQuNzAzMTMwMjYyNDcsMjU4NzY3MC4zMjI0MDI3OTQsMjgxMjAxOC42NTg1ODYyMzIsMjMwNDcxNy44NjE3NjU2OTg1LDIwMDE4ODAuMDQzMDM3NDk2NSwyNTAyODU0LjExMzA4NTQ2MDQsNTA4MjU2LjA2NzQ0MjQ4ODgsMjk3MTE3MS4xNTIzNzQ1ODg0LDU4ODAxMS44OTcxOTg3Mzc4LDE1NjA5NDUuMjU3NTU0MzA1LDEzOTUyMDAuNTQ0ODk2MDM2NiwzMjAyODA0Ljk5MjQ1MTk1MDQsMjMyMDMwNS43NTQzNzkyMjQsNjUyNTU2LjAzMTYzNDExNDMsMTg5OTIzNC4yODYxMzM3NzU1LDEyNjQ4MzYuOTEyMTAxMDU4MywxODY4NTYwLjkzMjE3NzczODgsMjA3NDk4OS41NTM2NDczOTEzLDE4NDU4OTEuNDEzNTYzOTEyMyw0MjA3NjY5LjUzODE5MDc4NSwyNjgzMzAuMzU4MTQzNzIxOCwzMzU5LjcyNzM1MjYyMjYwOQorMzEsVGh1IDI0IEZlYiAxMSwxNDc4MTEuMTE5NzU3ODU3OCwxMzE5NzMuNzQ4OTIxMTcxMzUsNzY4MTkuNDYzNzkzMzA3OTIsMTU4ODA2LjAxMDA4MjIwMDk4LDE2MDA3NC44NjMyMDQ5NjU2MywyNTg3NjcyLjkxMDA3MzExNjQsMjgxMjAyMS40NzA2MDQ4OTA1LDIzMDQ3MjAuMTY2NDgzNTYwNiwyMDAxODgyLjA0NDkxNzUzOTIsMjUwMjg1Ni42MTU5Mzk1NzM0LDUwODI1Ni41NzU2OTg1NTYyNiwyOTcxMTc0LjEyMzU0NTc0MDcsNTg4MDEyLjQ4NTIxMDYzNSwxNTYwOTQ2LjgxODQ5OTU2MjMsMTM5NTIwMS45NDAwOTY1ODE0LDMyMDI4MDguMTk1MjU2OTQzLDIzMjAzMDguMDc0Njg0OTc4NSw2NTI1NTYuNjg0MTkwMTQ1OCwxODk5MjM2LjE4NTM2ODA2MTgsMTI2NDgzOC4xNzY5Mzc5NzA2LDE4Njg1NjIuODAwNzM4NjcxLDIwNzQ5OTEuNjI4NjM2OTQ0OCwxODQ1ODkzLjI1OTQ1NTMyNTgsNDIwNzY3My43NDU4NjAzMjMsMjY4MzMwLjYyNjQ3NDA3OTk3LDMzNTkuNzMwNzEyMzQ5OTYxMworMzIsRnJpIDI1IEZlYiAxMSwxNDc4MTEuMjY3NTY4OTc3NTgsMTMxOTczLjg4MDg5NDkyMDI2LDc2ODE5LjU0MDYxMjc3MTczLDE1ODgwNi4xNjg4ODgyMTExLDE2MDA3NS4wMjMyNzk4Mjg4MywyNTg3Njc1LjQ5Nzc0NjAyNjYsMjgxMjAyNC4yODI2MjYzNjEsMjMwNDcyMi40NzEyMDM3MjY3LDIwMDE4ODQuMDQ2Nzk5NTg0MywyNTAyODU5LjExODc5NjE4OTMsNTA4MjU3LjA4Mzk1NTEzMTk0LDI5NzExNzcuMDk0NzE5ODY0NCw1ODgwMTMuMDczMjIzMTIwMiwxNTYwOTQ4LjM3OTQ0NjM4MTIsMTM5NTIwMy4zMzUyOTg1MjE3LDMyMDI4MTEuMzk4MDY1MTM4NiwyMzIwMzEwLjM5NDk5MzA1MzMsNjUyNTU3LjMzNjc0NjgzMDEsMTg5OTIzOC4wODQ2MDQyNDcyLDEyNjQ4MzkuNDQxNzc2MTQ3NiwxODY4NTY0LjY2OTMwMTQ3MTcsMjA3NDk5My43MDM2Mjg1NzMsMTg0NTg5NS4xMDUzNDg1ODU0LDQyMDc2NzcuOTUzNTM0MDY5LDI2ODMzMC44OTQ4MDQ3MDY0NSwzMzU5LjczNDA3MjA4MDY3MzcKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvRGVtb2dyYXBoaWNTRUlSRGlzZWFzZV9GRF9SZWZlcmVuY2UvRmx1L3dvbWVuL1JfMi5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0RlbW9ncmFwaGljU0VJUkRpc2Vhc2VfRkRfUmVmZXJlbmNlL0ZsdS93b21lbi9SXzIuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU0OTUyM2EKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0RlbW9ncmFwaGljU0VJUkRpc2Vhc2VfRkRfUmVmZXJlbmNlL0ZsdS93b21lbi9SXzIuY3N2CkBAIC0wLDAgKzEsMzMgQEAKK2l0ZXJhdGlvbix0aW1lLEVHLUZSRy1HMjEwMDAxLEVHLUZSRy1HMjEwMDAyLEVHLUZSRy1HMjEwMDAzLEVHLUZSRy1HMjEwMDA0LEVHLUZSRy1HMjEwMDA1LEVHLUxPRS1HMjQwMDAxLEVHLUxPRS1HMjQwMDAyLEVHLUxPRS1HMjQwMDAzLEVHLUxPRS1HMjQwMDA0LEVHLUxPRS1HMjQwMDA1LEVHLUxPRS1HMjQwMDA2LEVHLUxPRS1HMjQwMDA3LEVHLUxPRS1HMjQwMDA4LEVHLUxPRS1HMjQwMDA5LEVHLVVQRS1HMjkwMDAxLEVHLVVQRS1HMjkwMDAyLEVHLVVQRS1HMjkwMDAzLEVHLVVQRS1HMjkwMDA0LEVHLVVQRS1HMjkwMDA1LEVHLVVQRS1HMjkwMDA2LEVHLVVQRS1HMjkwMDA3LEVHLVVQRS1HMjkwMDA4LEVHLVVSRy1HMzAwMDAxLEVHLVVSRy1HMzAwMDAyLEVHLVVSRy1HMzAwMDAzLEVHLVVSRy1HMzAwMDA0CisxLFR1ZSAyNSBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMixXZWQgMjYgSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMTY4MzAuMTkwMDcwNDE3OTgsMC4wLDAuMAorMyxUaHUgMjcgSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMjY4OTMuMzMwOTc3NzAyNDMzLDAuMCwwLjAKKzQsRnJpIDI4IEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDMyODk2LjU3NjI3Mzg5Mjc5NSwwLjAsMC4wCis1LFNhdCAyOSBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwzNjQ2NC4xMTIzNjg1NTE1NCwwLjAsMC4wCis2LFN1biAzMCBKYW4gMTEsMS42ODAwMTk4OTE1MjkxNTUsMC4wLDMuMDg2NzMyNzE5NjE2NTc3LDEuMjA2ODYzNzAwNzkxOTQ2LDcuNDk0ODQ5NTY4MTczODA5LDIuMTg1NDkxMzQzNDA4NDI3MywxOS4wNjcwNzMxNzYxNTk2MDcsMTIuNTgxMTI0OTMxNDAzMDE4LDE0Ljk5MzU3MzcxNzMwNTM4MSwzNjguNjE0NjU3NjQwMzMzNywyNzcuODUwMDczMTc1NjQ1OCw0MjMuNTUwNDMwMjgwMzA3MzUsMC4wLDAuMCwyLjQwMjU3Njk2MDU4MjE2OTYsMzk5Ljg4NjUyODkwNTczNjY3LDIuMzY3NzA4NzEwNjE2MjczMywwLjAsMC4wLDIuMzI1NDE4MzE5MDU0NDcwNCwwLjAsMC4wLDAuMCw0NDE3NS4zNzA3MzkwNTc1MywyMTQuMzkwMDc3NDE3MDU0NTYsMC4xMzg5NzMwMzg5MTAxMjAxNworNyxNb24gMzEgSmFuIDExLDYuNTQ1NTUxNzk2MDc0ODIsMC4wLDEyLjAyMjY1NjQ3Mjg3MDM5Nyw0LjcwMzYwOTY2NzkxMTI4NTUsMjkuMTk1NjMzMzYzNTc2NzI1LDguNTE3ODI4OTE4MTY2MTk1LDc0LjMxMDY2NTQxODUxNDE4LDQ5LjAzMjgwMzcyNzYxNzA0LDU4LjQzNDc5MTQ5NzYyNjgwNCwxNDM0LjkyNTQxMjczNTc3MzgsMTA4MC4zODk0NTY0OTk3MTc3LDE2NDguODc2NDA5MDc5NTE5LDAuMCwwLjAsOS4zNjM4ODg4NjUzNTQwMDgsMTU1Ni43OTY2MjI2MjIxNTM2LDkuMjI4MDA3MDU1NzI2MTMsMC4wLDAuMCw5LjA2MzE2NTU5NTMxNjk3MiwwLjAsMC4wLDAuMCw2MTU0Mi4yNjQ1NjY2MDAxMDQsODMzLjAyNjAwOTczNDE3OTMsMC41NDE0MTYxNDY3ODU5MDU3Cis4LFR1ZSAxIEZlYiAxMSwxNS4wMjI3MjM2NjEzNDY2MSwwLjAsMjcuNTg1MjAyMzY5NDcwNDEsMTAuNzk4MzIyMTc3MzIwMDY1LDY2Ljk5Mzk5MzQ4NzkwMDU4LDE5LjU1NTI0NjMwMTYxODAwMiwxNzAuNTk3MDUyNDI0MDcyMjIsMTEyLjU2NjE3NzA2OTMwMjQ2LDEzNC4xNTAwNDc2NDg3Mzc2NSwzMjkwLjMzMzAwNTM5MTU4OTcsMjQ3My43OTkwMDQ1NzY2MDUsMzc4MS4xNDY2NzE1MjEyMTg3LDAuMCwwLjAsMjEuNDk3NTcxOTMyNjU5Njg1LDM1NzAuMTU0NTUxNDY3ODUyLDIxLjE4NTY2MjU5MjkxMTI0MywwLjAsMC4wLDIwLjgwNzE2NTEyNDYxNDEzLDAuMCwwLjAsMC4wLDkwMTM4LjA5ODQ4OTcyMzY2LDE5MDUuNjM2NzYwODM3NTc3OSwxLjI0MjQ4NDcwNTM2NTMxNjUKKzksV2VkIDIgRmViIDExLDI2LjU0MDM2MjE0ODQxMjMwNiwwLjAsNDguNzIwODA2NDk1OTgyMzE2LDE5LjA4MTg1MTk5NjYyNzg1LDExOC4zMzM0MjQ2OTA4NjIzNywzNC41NTcxODEwNDYwMjM1OTQsMzAxLjQ2MTcwNDg4NTIwMjk1LDE5OC45MTYwMzE0MTUzNjA0LDIzNy4wNTU2MzI5MjIxMzU5NCw1ODA3Ljc1NjUzNjYzMzMyLDQzNTkuNDkyNDE0MTgyNzE4LDY2NzQuNDQ1Nzg5NzkzNjE5LDAuMCwwLjAsMzcuOTg5NDUyMDEyNjQyNjE2LDYzMDIuMzUzNjA4NTY2MDUzNSwzNy40MzgzNTc2NDY2OTg4NywwLjAsMC4wLDM2Ljc2OTM4MzMxODk4MzY3LDAuMCwwLjAsMC4wLDEyODA3Mi4zNjkwNDA0Nzg2MywzMzU0Ljc5NTk2Njk1MDk2OSwyLjE5NDgyODM1MzY0MjY3NgorMTAsVGh1IDMgRmViIDExLDQxLjcxNzY1NTExMDkyOTkxLDAuMDE2NjUwMDI5OTYyMzExMTAzLDc4LjE0ODg5NzU1OTI1NzIyLDMwLjQ4MDU5NTIwMTc5ODQ4NiwxODkuOTkyMDgwNjQ5ODc0NDUsNTguMDExODcxNTc2MzE1MjYsNDg5LjcyNDc3Njk3Njg3ODgsMzIzLjM0OTk1OTU1MjM4MzEsMzg0LjUzNzUyNjQ4MjY5NzQsODk2Ni43MDY0NjI2MDc4MTUsNjY5My43NDQxMDEzODM2LDEwMzMwLjI5MzkwMDM3MzU4NiwwLjgyMDA4MDA2MDEzODA4MTEsMS42MzYxODgzMjI3OTM4NjUsNjIuMTYwODY0MTU5MDAyNDM2LDk3NDUuNjA2NDA5MTgwMTgyLDYxLjIyMjE1MzI5MzY3MjAxLDAuMDA5MjU4Nzc3NzY1MTc5MzY0LDAuMDYxMTE1OTAxMjkyNjA0NDEsNjAuMTEzNjMyODEyMjQ1MzQsMC4wMDk5MTg2Mzg3OTAyMDA4NSwwLjAxMDMzMjgyMTQ0OTEwNzg2MywwLjA4MDg3OTA1NTg2MTIwMzI4LDE3MzQ0OS4zNzY5OTg1NTk0LDUxMzIuNzM1MDUwMzEwOTc2LDMuNDM4MTY0MTk2OTE0NTU0NAorMTEsRnJpIDQgRmViIDExLDY0Ljg0NjA4ODc4MDY0MjQ1LDAuMTAzMTQxMzMxODE5ODI2NTcsMTI4Ljc3Njc5NDY1NDQ0NTA3LDQ5LjYyMDM5NDgyNjc3NjI1LDMxMy44NzY3MDI3NDA0ODI4NywxMDcuMjc2MzM2MTI0NDYxMDUsODM0LjYwMTcyNzg1NTYzNjcsNTUyLjAwODI0Nzc1NDc4Miw2NTIuODMwNDA0MjgzOTU1LDEzMjExLjQ3NDYxNzU1MzAyLDk3MjIuMzg0NzIzMTAyNjk0LDE1MzM4Ljg4ODQ1NjAzMzE2OCw1LjA4MDE3NTQ4MTU3NzU4MywxMC4xMzU4MjEyNzk2MDU0NiwxMDcuOTQwNTY3MTU2NDAxNTEsMTQ0MjcuODMwMTc3NzY5NjY1LDEwNi4xNDU0Njg3OTEzMDc4NSwwLjA1NzMyOTE2MTkyNTQwMzY0NiwwLjM3ODU5MDA3MzA4MjMxNDYsMTA0LjE1ODc5MzEwMzIyNzYsMC4wNjE0MTU4Mzg0NTA4NTEzMywwLjA2Mzk4MzU3ODAwMjkwODA4LDAuNTAxMDcxNTA0NDIwODkxNywyMjc4MjIuODI4NTQ3NDIwODIsNzM4NS43MDM0NzY1MjE2ODEsNS4yOTA1NzM3NDM2OTk4MQorMTIsU2F0IDUgRmViIDExLDEwNC41MTExODU0MTc1Nzc5MiwwLjM1MzE5MTY4MzI1MjAwNDEsMjI1LjA4OTIwMzA1NTU3MTc0LDg1LjQwNzQ0MDE3MDA2NDA5LDU1MC40NDU4NTA5Mzc1MDA0LDIxNC4zMDY3NTQzNzk1NTY3LDE1MjIuNzc4MzAyNDIyMDQ5OCwxMDA5LjI4MDE4OTcyMzg2OSwxMTg1LjU5NDg2NjU1MzkxNTgsMTk1NDkuMzg5NzQ0MjE5MDM1LDE0MDM3LjgyMjQxMTY3Njg2NSwyMjk5Ni45Mjg3ODQ5NDcyNCwxNy4zOTYwMjM1MDQyMzExMTMsMzQuNzA4NDgxOTU4MDAwMjIsMjAxLjM4MDYyMzY3OTkzNDI3LDIxNTIzLjI1MzI0Mzc2Mjc1NiwxOTcuNjc1NzU5ODg3MDI5NDEsMC4xOTYyMTEwNDc1NjU5MzcxLDEuMjk2NDAzNzIyODM0NzgxLDE5My44MzM1MjMxODQ1NTgzMiwwLjIxMDIwMTQwNjkwMjc2MTIsMC4yMTkwMDE1MzYxNzg3NTM5LDEuNzE2MDI3NDM0MzUzODE4NywyOTcwNzEuMzU1OTMxMDczNTQsMTA0OTIuNTAyODgyOTcwNjM1LDguMzk1NzQ0NzY3MTM2MDU4CisxMyxTdW4gNiBGZWIgMTEsMTcxLjg2NTM5NTc4OTg2NjM3LDAuODg0MjY2MjU1ODM3NTI2NiwzOTguMTI3MDQ3ODg2MzgyNDYsMTQ5LjMzMDE5MDg4NTYwMzYzLDk3Ni4zMDUzMjQyNjYwNjE3LDQxOS43NjM3MzIyMDU0NjA4LDI3OTMuMTk2OTk1NTE5OTE3LDE4NTQuNDAwNDA0MTU0MzU3LDIxNjYuNzg5MTU2MzA2NDI1LDI5MzI1LjI5MTM3MzcxODMxLDIwNDE3LjgxMjMwNTk5MjIzNiwzNTAyMC42NjQxNTkwNjQwMiw0My41NTE0OTkyODczMjMwMDQsODYuODk1NDExMjgzNjY4OTgsMzc1LjgwMDk3NjA5ODkwMzEsMzI1OTQuMjAwODgwNzYxOTIsMzY4LjM5NjQ2Nzk5Nzk1OTM1LDAuNDkwOTU0NDkyNDk2Mjk0NCwzLjI0NTY2MjkyMDkxNDE2ODMsMzYxLjAyNzQxMjgzNzQxMDU3LDAuNTI1OTcwNjY0Nzc3MDU1OCwwLjU0ODAyMTk1NjAyOTU3NzIsNC4yOTY3ODkwMzg2NzgxNiwzODkyOTUuMDM4NzE4OTE1MiwxNDk1MC43Mzg3ODU0NTcxNDYsMTMuNTg4NTI5NjMyODc2MzI1CisxNCxNb24gNyBGZWIgMTEsMjc4LjQzNjcyNjYwMzExMDk3LDEuODI5NTcwOTc3OTM1MDU2OSw2NzkuOTE4NDU2NjcyMTE5LDI1My41MzE0NDI3NzU5NDg2MiwxNjcwLjM4MjY0MjYxNDg1ODUsNzY4LjY5NjU0NzM5ODYxNDUsNDkwMi40NDQ4MzQ4NTExNDUsMzI1OC42ODk1NDYzODA3MjMsMzc5My41OTAzMDk2NjExODQ2LDQzOTExLjUwMjI3MzYzMTQxLDI5NTk1LjU5NzcwODc2MzAyLDUzMTYyLjQ4ODc3OTQ5NDYxLDkwLjMxODYzOTc3NTcwNDcyLDE4MC4yNDc5NzAzNTM0OTA2LDY2Ny4zODYyNjAzNzMzNjIzLDQ5MjQxLjczMzMzNDQwNTksNjUzLjY3MzQ5NTQ3MjM2MzEsMS4wMTM4NzAzMzE5OTcwNDI4LDYuNzM2ODAzNjgxNzg1NzExNSw2NDAuMzI2MTI3NzI0NDkyLDEuMDg2Nzg3NTI2NzEwMDI2NCwxLjEzNDY2NTIxOTg4MDAxNTEsOC45NTE5Mzk1NjQ3MjU3MDIsNTExNjczLjY2OTY2Mzc4NDksMjEyMTIuNDc0ODYxNjQ3MTk1LDIxLjcyNjQ4MDQ2Mjk2NTY1NAorMTUsVHVlIDggRmViIDExLDQzNi4xMjIyOTQ2NjU2NTc3NiwzLjM4MjU2NTk4MTg1ODYzNzUsMTEwNS41Njk4MDU4Mzg0NzQ0LDQxMS42MDcwMTA1Nzc1OTI4NiwyNzE4Ljg3MTgzMDkwNzI1NiwxMzIxLjMwMTgyOTczOTk4Miw4MTU4Ljc4MTU2MDQ1NzQyNiw1NDI5LjA5MzczOTcyODE4Nyw2MzAxLjIzMTk5OTY2MTUxMTUsNjQ2NDMuODY5Nzc2NzE3NjgsNDIxNjAuNTIwMTY1MDUwMSw3OTE1OC40NjMwMzEwNjg1MiwxNjguNDAwNzM5Njk5NDk1NzcsMzM2LjMzMDExNjUxMzM5NjMsMTEyMS4xODk2MDcxNjM3MDY2LDczMDUwLjQ1NDgyMDgyMTY3LDEwOTcuNDE4NzM2MDg3NTU1LDEuODY0NjQ1NDg2MjEwNzExMSwxMi41OTg0NzUxNjI5NDcwNDMsMTA3NC41OTE3MjkwODcxMTY0LDIuMDAyNjc0NjUyNTM3OTAyNywyLjEwNTk3NTc3Nzc5OTQ4MSwxNi45NTY0MzY3Mjk4MTEyMzcsNjY4NzMyLjk2MTA4MjEyMDQsMjk2MDIuNDM5NzAxOTEwNjgsMzMuNjkyNzE4NjgyNjcwMDkKKzE2LFdlZCA5IEZlYiAxMSw2NjAuMzk4NDQwNjA1MDk1NSw1LjkwOTMwMzkzMDU0Mzk5MiwxNzI1LjQ5OTE2MzA4OTA5NzcsNjQzLjI5ODQyMTgxNDQ5NDIsNDI0NC44OTg1MDMzNTk3NTksMjE4My42MTg1OTg5NzE5OTksMTMwNTAuMDYzMTc0NDM2ODI2LDg2OTUuMDkyNjI4NDIzODYsMTAwNTkuMTA3MjcyMDQ1ODA1LDkzMTIzLjMwMTE1MjA1NzQsNTg2NDUuNTg3NjcxNzAxMzYsMTE1MTU1LjAzNjE5OTE3MDY2LDI5OS4zMDc5NzIwNzkyOTMxNyw1OTguNjc3NjAxNjY4OTE4NiwxODExLjI4NTY1MjMyNjgwNzQsMTA1OTY3LjM5NzU2MDk5NTMsMTc3MS42MTkwMzczNzkxODQ2LDMuMjI0MTgzNDMyNjAwNjgzLDIyLjUyNjA3NDI2Mjc0NDA3NSwxNzMzLjk1MzE5NzE4Njc3MTQsMy40NzY5NzY3MDY0Nzk0NTc3LDMuNzEwNTY4MzA1NDY1NzY5LDMxLjA4MTI2NTM3MjMwNDk1NSw4NjI3MjMuMzE5MzAwNDU4Miw0MDM1NS44NTcxNzczMDMyMSw1MC42NDE4NTYzMDIwMzM0NzQKKzE3LFRodSAxMCBGZWIgMTEsOTc1LjE0ODA1ODUyNDQ1NzYsMTAuMDk0MTIwNTk4ODYxMzA0LDI2MjAuOTg5MDQ5NDM5OTU4OCw5ODEuMjA2Mjc5NDUzOTE5LDY0NDUuNjQ1MjM3NTQ1Mzc0LDM1NDguMDQ2MzE1MjE0OTI1LDIwNDE3LjQwOTQwNDIwOTIxLDEzNjI2Ljk1NzA2OTc1MzAzMywxNTcwMS43MTg2MDc0MTY3ODIsMTMxNjcwLjQ3NjUzMDc2NDQzLDc5NjU5LjA5NDMzNTYyNzU0LDE2NDMyMS41MTgwMDI4ODk4Miw1MjQuMDUxNTkwNzU0MDk0MywxMDUwLjQ0NzQxMDY1MzY3NzcsMjg2OC4xMDU5MTMyNjY5NTQzLDE1MDg2NS41NjU3NDcyMTA4NCwyODAyLjkyNzAxMTc3OTg5ODcsNS40MjQ4ODgzNjE5OTM1NzUsMzkuNzc1MzMwMTU1NjY5Mzk0LDI3NDEuNjEyNzYxMTg3NjQsNS44ODU5NjE5NTY3Nzg4NSw2LjQxODIxODg3ODE4NjAwMzUsNTYuNzQ5NzA2MzExNTkyNDA1LDEwOTQ2NDUuNDg2ODUwMjA1OCw1MzY4NS42NjY5NTg4NDcxLDc0LjM0NzA1NDY5MzQxODQ0CisxOCxGcmkgMTEgRmViIDExLDE0MTYuMTU1MzA5NjYwNjA3NCwxNy4wNjU5NTk3MDA2NDQxNTQsMzkxMS42MTg2MDA3NTg0MTc0LDE0NzYuMTAwODA5NzkwNjA1NCw5NjA3Ljk0ODQ5NTc1MjYzOCw1NzI3LjU4MjA0OTc2ODQxOCwzMTU5MS4zNTY4MTM3NzM4MSwyMTEzMC4yMDA2NDQ3ODQzLDI0MjMxLjExMjg3OTcwODMxLDE4MzU1NC40NDcxNzcxOTUyOCwxMDU4NDcuOTY4Nzk1NzgwNTcsMjMxMTMyLjAwMjIxMjc2ODI1LDkxMC41OTQxODU1NTQ3NjQ0LDE4MjkuNjI3NDY3Mzc3MTYxLDQ1MDEuMjQ1ODQ0MjcxNTIsMjExODQ0LjQxOTQ0OTg5NTMzLDQzOTUuMDIxMjYxNjEwNTAyLDkuMDEwMTk5MDgxMDI4NDM0LDY5Ljc3MjQyMTY5ODg0MzkxLDQyOTUuMzM0Mzg5ODA3NDg3LDkuODQ2NjE5NDkwNjY3MDI0LDExLjAwNjYyMDE3OTAzNDE4NiwxMDMuMDcyMjEyNDczNjE2MzMsMTM2Mzk3OC45MTcwMzM1NDY2LDY5NzU0LjA1NTMwNTc5NDkxLDEwNy40MDA1NTU1NjkwNjA1NworMTksU2F0IDEyIEZlYiAxMSwyMDMxLjQzMjg4MDg5NDU1NTYsMjguNDk4MDUyMjM1Njc0MzQ0LDU3NDcuNjIyMzk1NzcxODE3NSwyMTk4Ljg1MzE3MjMwNDI4NSwxNDA4NC4yMzU0MjA2MzU3MDUsOTE3OS43Njk1MTczMDYzNDYsNDg0NDkuNDE4MTMwOTQxODg1LDMyNDkwLjI3NjE4NDg0OTM0LDM3MDU4LjY3NzY4MzIxODc4LDI1Mjc0OS4zNzkyMTI4NTYyMywxMzc2MDguMjE3MTUxNjQ3MDMsMzIwOTgyLjg4MTAxNjgzNzY3LDE1NjAuMDEzMzQyNjM4MzU5NSwzMTQxLjkxNjA4MzMzMDU0OCw3MDEzLjMxNDAyOTQ4MTI4OCwyOTM5NzQuODEzOTY5MTAwNCw2ODQyLjUxMjQ0NDczNDMwMiwxNC43NzY3NDcwOTY5NjIyNTcsMTIwLjY3NTQxNDA1OTcyMTY3LDY2ODAuMjczNjQ0NTg1MTE3LDE2LjI2NzMyMzg4ODYyOTI2NCwxOC42Mzg1MzU2MTAzOTI5MTQsMTgzLjkyMjMyMTAwNzg2MTY4LDE2NjY3MTkuNzYwODU1MzA0NSw4ODUxMy44OTk0MTcyMzMwMSwxNTMuMTE4OTQ1NjEwMDQ4NTcKKzIwLFN1biAxMyBGZWIgMTEsMjg3OS4wNzA2NzI5MDU2MTMsNDYuNzU1MTU1MjQxNjkwMDc2LDgyODkuNjc1NDcxMzY5NjI1LDMyNDAuMTc0MDg2MzI5MDQ2LDIwMjM0LjMwODc1MjQ2NDg4LDE0NTM4LjM5OTA4MDk1NjkxOSw3MzQzOC40MzI4OTA1NjEyNSw0OTM5OS42NTAxMTY3NzUzLDU2MDE3LjQxOTk0Mjg2MjM0LDM0MzI3Ny4zNjMxMTk1NjQ2LDE3NDY3OC4wNTk0NzAzMDU1Nyw0MzkyMjUuNjE0MDMzODMzOTYsMjYxNi40NTU1ODEyODE0NTY1LDUyODEuOTMwNzg3NzAwMTM0LDEwODE0LjQ0MDMzMTc0NDcxOCw0MDI1NTEuODM3Mzk4OTAyNjMsMTA1NDUuODcyODUwMzA5NjA2LDIzLjgzMDMyMzgyMzI4NTYzLDIwNC4zNjI2NjUxODUxMTQ3NiwxMDI4MS45ODUxODE0NTI0NywyNi40MjA0NDQyNjQ5NDU0MDIsMzAuOTk1NjUyNjEzOTgzMjU3LDMyMC4wMzA1OTE5NjYzODA4LDE5OTMzNDMuNTE4NTM5MDM2NiwxMDk1MjAuMzkzOTk2NDA3OTMsMjE1LjIxNzc1MDAyMjYzMzQyCisyMSxNb24gMTQgRmViIDExLDQwMjQuODMxNDA1NTEyMTU0Niw3NS4yMDk5MjM1Mzc3MjY5LDExNjgzLjI4ODU4NDU0NzY2MSw0NzExLjEwMzAzNzAwMDg1MiwyODM1MS4yODM5NzU1ODQ4NjUsMjI2ODIuNTQyNzY1MTI3NzcsMTA5NjQ0Ljg1Nzk2Mjc1NCw3NDAyNy44ODc4NTE5NTczMiw4MzQwNS45NDU3MzQ2ODAzOCw0NTgzODYuMzg3MTk0Mjc3MywyMTU4NzEuNDI5NTU1NDk3LDU4OTk1MS42MTU4NTYyNDksNDI4OC40MzA3ODY3NTY2Njk1LDg2NzguNjQ1MDQ1NjM1ODM2LDE2NDU0LjczOTU4ODAyMjksNTQyMTM4LjE5MjgxNDcwODMsMTYwNDQuNjc0MjI1NTIwNTA0LDM3LjcwOTEyODY2NzE3NDQ1NCwzMzguNTY0OTAyNTQ0MDI5MSwxNTYxNS42NTgyNjMzOTIzNDMsNDIuMTAxNjI0MTczNTI1NTUsNTAuNTY5NTU4MTc1NzA3MzQsNTQzLjQ4ODI0OTQ4NjIxODEsMjMyODc5MC40NDQ3MDU5MzksMTMxODY1LjgxMjY2MDExNjY3LDI5Ny40NDM0OTU5ODMwMTE2NAorMjIsVHVlIDE1IEZlYiAxMSw1NTQwLjgzNDU5NDA2OTE4MjUsMTE4LjgxNDgwMTQxNjc2MjIxLDE2MDI5Ljk3Njk0NTEyMzQ5Myw2NzQ1LjQwODU0ODIxNDQ2MiwzODU4MC41ODE1Nzk5OTA2OSwzNDg1OS4xMzQzNTk4NDQ3MSwxNjA5MjkuNDczNTc2NDY2NjcsMTA5MTUyLjQ2Mjg4NzA5MTMzLDEyMjA3NS44ODQzNTk1NTMwNSw1OTk3NDAuMjIxMjY4MjY5LDI1OTEzNy4xNzQ5NjI3OTA3LDc3NDc2Ni40OTQ2MTQ5MjkzLDY4ODUuNDQ2Njg5NjE2MTI4LDEzOTc0LjEzMDA3MDMyMjc4OCwyNDY4NC4wODc0MTM3MzM1Nyw3MTU1NzkuMTAzMTQ0MjM3MywyNDA3OS42MDkzMTk4MTczNyw1OC42MTI0NTMwOTI1MDg2OTQsNTUwLjY1NDE3NTExMjc1MzUsMjMzODAuMTcxMjUzNTI0OTk3LDY1LjkyMTg4ODI4ODk0NjMsODEuMTgxMzg5MjAyNDQxNCw5MDUuNjI5NTE3NjU5MzQwMywyNjU1MTEzLjkxMzEyMTQzNCwxNTQzMTMuMTkyMDQyMzg2NDIsNDAzLjI3MzUwMTgyNjc3NzQKKzIzLFdlZCAxNiBGZWIgMTEsNzUwNC4zMTU0MTQ1OTc3MDEsMTg0LjkyMzM4MDM3OTUyMjM0LDIxMzUwLjQ3NTQ4NDYxNjk1Niw5NTAwLjc4NDY4OTQ3NTI3Myw1MDgyOS44MjYyMjY4NTg3Myw1Mjg0My40MTQ5NjgwMDI1MywyMzE5OTguNDI2NTkyODY5NSwxNTgyNzEuMDY2MzY3MjY1NSwxNzU0NjYuNTIzNzM2MjY3ODcsNzY2NjI2LjMyMzYwMDcyNDMsMzAxOTQ3LjUzMjU4MjczMjk3LDk5MTU5My4yNzMzMzc0Mzc5LDEwODY1LjkyNjgwNjcxOTczNywyMjEyOS4xMzc1MDgwMzkyMjQsMzY1MjguOTE3NDM3NTQ5ODUsOTIyOTQ3LjU5ODYwODAzNzEsMzU2NzYuMjUwMjg2MzM0MDIsODkuNzMyMTM4Mjc0ODk5NjgsODgzLjE0Mjk4NDQ1NjQ4NzcsMzQ1MjcuMDY0Mzk0NzQ2OTgsMTAxLjczMTc1Mzk0MDM2OTEyLDEyOC43Mzk3MTQ4NjI4MzQ5MiwxNDg4LjQxODI5NDQ0NDQwMywyOTU1NTQzLjg3NDgyNzcyNzcsMTc1NTc0Ljc3NDc2OTU4NzIsNTM1LjYyMjExNzg3MTc4NTcKKzI0LFRodSAxNyBGZWIgMTEsOTk5My45NzQ4ODM3MzIwOTEsMjg0LjI4OTY2NjA5NTU4NzMsMjc1NDAuNjc1NDgyMjUwOCwxMzE1Mi41Nzg2OTE3MzU4MzUsNjQ2ODYuODI5MDE5NTQ3MjUsNzkwOTMuODczNjA4MTk1OTcsMzI4MTY3LjI3MzA2MDExNzMsMjI1NTMzLjA4NTQ0MzU0ODI1LDI0NzQwNC4zODM4NzA2ODU4OCw5NTUyMjQuOTI3NTI5MTAyOSwzNDE4NjEuOTI2NzQ0NTEyOCwxMjMzNjg5Ljc0MjEyMTc5MjIsMTY4ODUuMDk2NTI5OTMxMzUsMzQ1MzUuODc1MDYxMzQ5Njc0LDUzMzU4Ljc1NTc5NzM1MjAzLDExNjA0MjkuMzY2MzAyNTU1NCw1MjIyOS4xMjUxMDQ1Mzc3MywxMzUuNjU2NzYyNDc1NzA3NTgsMTQwMC43NTY1MTIzMjYxOTYxLDUwMzE4LjQ3OTk2NDIwMzUxLDE1NS4xNDkxNDc5OTUyNTIyLDIwMi4yMjk4MzQ2NTA3NDg3OCwyNDE5LjI2NDM3MDY1MDcxMzgsMzIxNzk4MS40MTIzOTE2NzksMTk0NjAyLjY4NTc2MTQwNDc4LDY5Ni40MzA1ODY5ODEwNTg5CisyNSxGcmkgMTggRmViIDExLDEzMDgyLjI4MDE2ODE3MDU1Nyw0MzIuMjAxNDYxODA4ODQ0MzMsMzQzNDAuNzQ3NDM3MzYxMjY0LDE3ODc0LjkxNTIxNjc0OTIyNSw3OTQwNS4yMDQ4OTYyMTA1MiwxMTY4NTEuNzQ2OTM0Mzg0MTcsNDU0NTkyLjQ1MTY1NDMzOTYsMzE1MzIyLjMwNjc4NDc3OTgsMzQxNTAwLjc1NzYzNjYzMzgsMTE1ODI3NC45ODkzNDQwNDU4LDM3NzAzOC4xMDU4MjQyMTc0MywxNDg5NTM0LjE4MzU1OTE3MiwyNTgyOC42NDg3MjI4ODkzNjQsNTMxMTQuODQzNjU4MDUxNTg0LDc2OTEyLjMzMjIwNTY5MTE3LDE0MTk1NzcuMjMxMjgzOTA1Miw3NTU2NC41MjYyMjY5OTMwNywyMDIuODM1OTE3ODkwODIxNTIsMjE5OS40MTIyNTUxODYyMjIsNzIzNDUuMzc5ODQzNDg2LDIzNC4xOTI5NDE2OTcwNDM1OCwzMTUuMDE0ODU4MjE5NTY5NSwzODkwLjM1ODk3MjY3MjkzMzMsMzQzNjU3My40OTM3NTM0MzMsMjEwNzY5LjkyOTE0MjIyMzU4LDg4Ni4xMjAyNjA4Njg5ODM5CisyNixTYXQgMTkgRmViIDExLDE2ODI0LjUxNDE5NDcwNzQ4LDY0OS44MDI1NDMxNjU5NjE5LDQxMzUxLjU5OTQ1MTEyNTEzNCwyMzgwOS40MzY3NjczNzU0MTcsOTQwMjAuNzM3MzQyMzAzOTgsMTcwMTQxLjAyNTIyNDQxMjEsNjE0OTE4LjM4NDI3MTc4OTEsNDMxNDA2LjE0MTA4ODM4NjIsNDYwMTE3LjcwOTkzOTExOTA2LDEzNjU2NTkuMzMwNTc1MjE5Niw0MDY0OTguODkyNDc5NjM2NCwxNzQ0MzQyLjg4NDI0OTg3ODYsMzg4MTYuNDY0Mjg4MDU0MTUsODAzNzEuODgyMzIxMDU4NCwxMDkyNjEuMDIwOTAzNjg0OTMsMTY4NzcxNC43MzU1MTYwNzM2LDEwNzk3MS4yNjQ2MjgzNDA1NiwzMDAuMTQ3NjczNjc3NzA5OSwzNDE4LjQwMjE4MDgzNTQxLDEwMjQ4NS4xMjkwMDgwMDA2NiwzNTAuMTAxNzUxMjU5NDE0NjQsNDg2LjY5NTgyODI1NjI2Myw2MTg1LjYyMTExNTMxMzI3LDM2MTEyNDQuMDkzNjY4OTcsMjIzODk0LjgzMTc5NjY4ODQ2LDExMDMuMDA4OTcyODMzMzQzCisyNyxTdW4gMjAgRmViIDExLDIxMjQ3LjU2MjEwNTYxNzM1NSw5NjUuNzIyMTY2ODY4Njk4NCw0ODExNC42MzcxNzI1ODQzMDYsMzEwMjguMjk0NDg4NjI3MDQsMTA3NTgzLjE2ODczMDc2NzA0LDI0MzYxMy44MjcyMjAxMTYsODA5NTYxLjgzNDIxNzE5MzEsNTc1NzA3LjkwODMzMDA5NzgsNjAzMDkyLjY0Nzg3MTUwOCwxNTY2MTEwLjk1NDQxNzE4NTQsNDMwMTAzLjUzMTM4NDY1NzY2LDE5ODMxNTguNjg3OTM5OTE0OSw1NzE1Mi42MTM4Mjg5ODQ5MDQsMTE5Mzc1LjAyNDk3NTMyNzMyLDE1MjY5MC4xNzMzODUyMDIyMiwxOTQ5OTUyLjA2NDE1Mzk4NjMsMTUyMTk0LjEyNjUwNDI5Njg3LDQzOS42NjY1MzA5NTQ1NjM1NCw1MjU3Ljg0NDE4MzI2NjEzMywxNDI3ODEuNDQ5OTc0NzExOCw1MTguNDkyODA4NDIxMzg1NSw3NDUuOTMzNDMwODU1Nzk5Myw5NzE5LjU0NDM5OTAzNjY1MSwzNzQ1OTgwLjk0MTQzMjQ1NzQsMjM0MTQ0LjkzNTM5OTc3NjUsMTM0Mi44MDcwODc5MTkyMzc4CisyOCxNb24gMjEgRmViIDExLDI2MzQyLjA5MjMyMDgwNzU2LDE0MTguMDU4MTY3NDE1NTExNyw1NDIyNS42NjQ0ODg2NzA0NDUsMzk1MDEuOTQ3MTE5ODQ0MzMsMTE5Mzg5Ljk3MjQ3NzE2MDUxLDM0MjE0MS42Nzc0NDg5MzUsMTAzNDE1Ny4yNTI4NzEwODQsNzQ2OTQyLjk5ODc2MzU4MjIsNzY2NjUxLjk4Nzk1ODIxMzIsMTc0OTUyNC45NDIyNTMwODc0LDQ0ODMxOS42ODg5NDg0MzE3LDIxOTQyMjkuMTMyMTYwOTcsODIxODEuMzY5MjYwMjI4NzMsMTczNTY4LjA2ODQ0NjAyODQ4LDIwOTQ2NS41NzY4NTE5MTQzLDIxOTIyOTYuOTg3MTc5ODY1LDIxMTM3MC4xNjQ1MjQ2NTY1LDYzNy43NDU3MzU2OTI1NTUxLDgwMDMuNDMxNjYzMjI0NzUxLDE5NTIxOS45MjYyODU1NjAxNiw3NjEuMDQ0ODI3ODM4Mjc2NSwxMTM0LjcwNzA0OTQ1MzgwOTgsMTUwOTEuMTE1OTEyOTg1MTkzLDM4NDY4NjYuOTIyMTU4MDk3LDI0MTg5NC4zODQ2NzYxNzI2LDE1OTguMzA5NDE2MTc2ODM4CisyOSxUdWUgMjIgRmViIDExLDMyMDYwLjc4MjU0OTk5MDEyLDIwNTYuNTQxOTI0NDg1OTc5NSw1OTQyNC40NDU5MjEyODIzNyw0OTA4Mi4xMTc5NTE0NzYsMTI5MTAyLjU3NDk0OTc5NTA2LDQ3MDAxMi4wMDQ0ODU0NTczLDEyNzg5MzEuNjA2MzAxOTkzLDkzOTU5NS4yNjU1MjgwNTg0LDk0MzExNC43NzMzODIyNjU0LDE5MDg4ODIuMTU1NTYxNTMyMSw0NjE5NDEuOTY2NDg2NTU4NDMsMjM3MTA1OC4wODAxMTYzOTMsMTE1MDAxLjMyMTYxMTkwNzc3LDI0NjI5My4yNjc0OTc3NDY1NiwyODE0MzUuNTc2NzM5MjUwMywyNDA0NTEyLjkzOTk2ODEzNywyODg4NTQuNDA1MjczNjI2ODUsOTE2LjUwOTQyOTk5NjcwNDIsMTIwNTkuNjYwNzYzNjcxNzksMjYxMzYwLjMzMjEwNjcwNSwxMTA3Ljg4MTA1ODk5NTk5NDIsMTcxNC41MTE1MTI5ODMyMDA5LDIzMTUyLjQwMTQyMTI3NzAyLDM5MjA1MDAuMzk0MjIzNjAxNiwyNDc1OTUuMzc4MTgwNDI3OTQsMTg1OS41MTk0NzgyMzY0MTY1CiszMCxXZWQgMjMgRmViIDExLDM4MzIzLjAxNTMwNDA3MDU4NSwyOTQ0LjQzMzQwMzA2MDUwMjMsNjM2MjAuMzg4NzMzODIwNzY0LDU5NTA2LjIzODg1NTkyNDE1LDEzNjcxOC4xODU0NTUxMTc1Miw2Mjk2NDUuOTQyOTYyNTQ0MiwxNTI5NzQ0LjgyMDEwODQzOCwxMTQzOTAxLjQyMjY1OTI5ODksMTEyMTg5NC42NTIwMzQxMTIzLDIwNDEwMjcuNzM0NTY1Mzk1Miw0NzE4NTkuNTE2MzI5NTUyNTcsMjUxMjQ2Mi43NTg2MDU0Mzk3LDE1NjAyOC4yNzI4NDA2MDQsMzM5OTE4LjU0OTY2MjkxNzUsMzY5NDM4Ljc0NjM3Nzk0NDMsMjU4MTUxMi4wNDc1NTY3MjEsMzg3ODUwLjAxNzMxMDkwNDIsMTMwNS44MzY5ODExNjYwMjA3LDE3OTkxLjYzMzg5NTA3MjY4MiwzNDE4MDcuODQ1NzQ1NjA4MSwxNjAwLjg0MzQ4NzgzNDA0MjIsMjU3NS4wOTYxODM5Mzc0OTc3LDM1MDg2LjUwMTk3MDcxNzEyLDM5NzMwMDguOTQwMDQ1MjgyMiwyNTE2OTAuNDQ2OTI2NDQzNCwyMTE0LjU3MDU3OTQ4NzQ5MTYKKzMxLFRodSAyNCBGZWIgMTEsNDUwMjMuOTEwMjE4NTQ4MDE1LDQxNTkuNDQwNTczMjA5NDgyLDY2ODYwLjQ2MTQ3NjU4Nzk4LDcwNDIzLjQ1OTIyOTMzODQzLDE0MjQ1Ny42NjY0MjgwODY1OCw4MjAwMDMuMDA5NTk2Njg4MiwxNzcwOTEyLjk1NTE4MzA1NTcsMTM0NzM1MS4zMzkzODEyMzUyLDEyOTE3NTEuMjQyOTg1NTcwOCwyMTQ2MjU4LjAzNjA4OTU4NDcsNDc4OTA4LjQzMTM4MTMwOTksMjYyMTE4OC4zMjcxNjc4NjIsMjA0NTEwLjQ2OTA5MjU3Nyw0NTQ2MzYuODUzMTUzODY1Myw0NzI1ODYuMjEzNDIwODIyNDYsMjcyMzAzMC4xNTk5NTk1ODIsNTEwNzYyLjM2MTg1OTQ3MzQ2LDE4NDUuOTU0NTY0NTI1NTQ4NCwyNjU3NC42ODA1MDQzNjUwOSw0MzU1OTQuODc0MzU0NTQ0MDQsMjI5Ny45NDYwMzAxMDU4OTYsMzg0Ni42NTExODgzMzM3NTgsNTI0ODQuMjk4Mzc0MDcwNjU1LDQwMDk1ODMuMzg4NjczMjI1NCwyNTQ1NjUuOTk3NTI2NDgyNzQsMjM1MS41OTIwMzcwOTgxOTU4CiszMixGcmkgMjUgRmViIDExLDUyMDQ0LjAxMjg3NTIzNTcwNSw1NzkyLjc1MDg5MDMzOTE4Myw2OTI3Mi43Mzc3NzMzOTM4LDgxNDM2LjMzMTg3MzUzNDk1LDE0NjY0NC4yMzA4Mzc1OTc5MiwxMDM1MjUyLjQ2MDk0ODg4OTgsMTk4ODgzNC4zNzY5MTg0MjI4LDE1Mzc0NjAuODk3MjAzMDY5OSwxNDQzNDE3Ljk3Mzc0ODYyNjcsMjIyNzIyMy40NDI4MjU3NzkzLDQ4MzgwMC40MjY3OTM2MjY0NSwyNzAyMDk2LjU2NTczNTcxOTYsMjU4MjQ2Ljk1NzI3NjUzODMsNTg3MzMyLjE2Njk1NDg3OTEsNTg3NjY3LjE1Mjc4ODAzODIsMjgzMjIxNS45MjQ1MTE3MzIsNjU4MjczLjc3NDkyOTY5MjIsMjU5MC44MzE4NDY1MjQzNTY1LDM4ODQ5Ljk3NTIyMjYzMTc2NSw1Mzk2OTguMjk0ODAxMjc2NCwzMjc5LjQ4MzA1OTQ4OTE0OCw1NzE2LjgzMTUxNTE3OTMzMiw3NzQwMi45MjE4MzE1MDQxOCw0MDM0MzYzLjM0NTkwMDczNzcsMjU2NTM2LjAxOTIyODczMTg0LDI1NjEuMDE1NjMxODMzNTY1MwpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9EZW1vZ3JhcGhpY1NFSVJEaXNlYXNlX0ZEX1JlZmVyZW5jZS9GbHUvd29tZW4vU18yLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvRGVtb2dyYXBoaWNTRUlSRGlzZWFzZV9GRF9SZWZlcmVuY2UvRmx1L3dvbWVuL1NfMi5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjk1YWFhYwotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvRGVtb2dyYXBoaWNTRUlSRGlzZWFzZV9GRF9SZWZlcmVuY2UvRmx1L3dvbWVuL1NfMi5jc3YKQEAgLTAsMCArMSwzMyBAQAoraXRlcmF0aW9uLHRpbWUsRUctRlJHLUcyMTAwMDEsRUctRlJHLUcyMTAwMDIsRUctRlJHLUcyMTAwMDMsRUctRlJHLUcyMTAwMDQsRUctRlJHLUcyMTAwMDUsRUctTE9FLUcyNDAwMDEsRUctTE9FLUcyNDAwMDIsRUctTE9FLUcyNDAwMDMsRUctTE9FLUcyNDAwMDQsRUctTE9FLUcyNDAwMDUsRUctTE9FLUcyNDAwMDYsRUctTE9FLUcyNDAwMDcsRUctTE9FLUcyNDAwMDgsRUctTE9FLUcyNDAwMDksRUctVVBFLUcyOTAwMDEsRUctVVBFLUcyOTAwMDIsRUctVVBFLUcyOTAwMDMsRUctVVBFLUcyOTAwMDQsRUctVVBFLUcyOTAwMDUsRUctVVBFLUcyOTAwMDYsRUctVVBFLUcyOTAwMDcsRUctVVBFLUcyOTAwMDgsRUctVVJHLUczMDAwMDEsRUctVVJHLUczMDAwMDIsRUctVVJHLUczMDAwMDMsRUctVVJHLUczMDAwMDQKKzEsVHVlIDI1IEphbiAxMSwxNDc4MDYuNjg1NDkyOTk2NTYsMTMxOTY5Ljc4OTc3MDA3MDg3LDc2ODE3LjE1OTI0NTExNDc3LDE1ODgwMS4yNDU5NzU3NDI1MiwxNjAwNzAuMDYxMDMzNTAzNSwyNTg3NTk1LjI4MTA4OTA2OTMsMjgxMTkzNy4xMTEyNjgzNDk1LDIzMDQ2NTEuMDI1OTUwMjQ5OCwyMDAxODIxLjk4OTM4NzA1NjgsMjUwMjc4MS41MzE0MDQ5MTE1LDUwODI0MS4zMjgyMzc2MjIxNiwyOTcxMDg0Ljk4OTcwMzYxNDcsNTg3OTk0Ljg0NTEwOTUwMTYsMTU2MDg5OS45OTA4MjA4NDAyLDEzOTUxNjAuMDg0Njg3MTQwOCwzMjAyNzEyLjExMjUwMDM3NCwyMzIwMjM4LjQ2NjUyMTY2OSw2NTI1MzcuMTA3NzkzMDU1OSwxODk5MTc5LjIwOTE2NTYzNjUsMTI2NDgwMC4yMzIzODA4MDYsMTg2ODUwNi43NDQ3MjM1MjE0LDIwNzQ5MjkuMzc5ODUyOTQ2NCwxODQ1ODM3Ljg4MzUxNTg3MzIsNDE2NTQ3Mi4wNDI0Mjg0NDkzLDI2ODMyMi41NzY2ODAwNTgyLDMzNTkuNjI5OTIxOTkwODQ5NworMixXZWQgMjYgSmFuIDExLDE0NzgwNi44MzMyOTk2ODIwNywxMzE5NjkuOTIxNzM5ODYwNjQsNzY4MTcuMjM2MDYyMjc0MDIsMTU4ODAxLjQwNDc3Njk4ODUsMTYwMDcwLjIyMTEwMzU2NDU1LDI1ODc1OTcuODY4Njg0MzUwNSwyODExOTM5LjkyMzIwNTQ2MSwyMzA0NjUzLjMzMDYwMTI3NiwyMDAxODIzLjk5MTIwOTA0NjIsMjUwMjc4NC4wMzQxODY0NDMsNTA4MjQxLjgzNjQ3ODk1MDQsMjk3MTA4Ny45NjA3ODg2MDQzLDU4Nzk5NS40MzMxMDQzNDY3LDE1NjA5MDEuNTUxNzIwODMxLDEzOTUxNjEuNDc5ODQ3MjI1NCwzMjAyNzE1LjMxNTIxMjQ4NywyMzIwMjQwLjc4Njc2MDEzNTYsNjUyNTM3Ljc2MDMzMDE2MzgsMTg5OTE4MS4xMDgzNDQ4NDU3LDEyNjQ4MDEuNDk3MTgxMDM4NCwxODY4NTA4LjYxMzIzMDI2NjEsMjA3NDkzMS40NTQ3ODIzMjYyLDE4NDU4MzkuNzI5MzUzNzU2Niw0MTY1NDc3Ljg5MDkxOTQ5ODYsMjY4MzIyLjg0NTAwMjYzNDg2LDMzNTkuNjMzMjgxNjIwNzcyCiszLFRodSAyNyBKYW4gMTEsMTQ3ODA2Ljk4MTEwNjUxNTM2LDEzMTk3MC4wNTM3MDk3ODIzNyw3NjgxNy4zMTI4Nzk1MTAxLDE1ODgwMS41NjM1NzgzOTMyOCwxNjAwNzAuMzgxMTczNzg1NjYsMjU4NzYwMC40NTYyODIyMTk0LDI4MTE5NDIuNzM1MTQ1Mzg0LDIzMDQ2NTUuNjM1MjU0NjA2NiwyMDAxODI1Ljk5MzAzMzAzNzUsMjUwMjc4Ni41MzY5NzA0NzcsNTA4MjQyLjM0NDcyMDc4NjksMjk3MTA5MC45MzE4NzY1NjUzLDU4Nzk5Ni4wMjEwOTk3Nzk5LDE1NjA5MDMuMTEyNjIyMzgyOCwxMzk1MTYyLjg3NTAwODcwNTMsMzIwMjcxOC41MTc5Mjc4MDIsMjMyMDI0My4xMDcwMDA5MjIzLDY1MjUzOC40MTI4Njc5MjQxLDE4OTkxODMuMDA3NTI1OTU0MiwxMjY0ODAyLjc2MTk4MjUzNTUsMTg2ODUxMC40ODE3Mzg4NzkzLDIwNzQ5MzMuNTI5NzEzNzgxLDE4NDU4NDEuNTc1MTkzNDg2LDQxNjU1MTcuMzk5NzMwOSwyNjgzMjMuMTEzMzI1NDc5ODUsMzM1OS42MzY2NDEyNTQwNTMzCis0LEZyaSAyOCBKYW4gMTEsMTQ3Nzk4LjcyODgxNDAzODgzLDEzMTk3MC4xODU2Nzk4MzYwOCw3NjgwMS45NTYwMzMyMjQ5LDE1ODc5NS42ODgwNjE0NTI5LDE2MDAzMy4wNjY5OTYzMjU5NywyNTg3NTkyLjExNjQyNTk1ODUsMjgxMTg1MC4yMTE3MjIyMzg1LDIzMDQ1OTUuMDM0Mjg1NTg1LDIwMDE3NTMuMDI2OTkwNDQ0LDI1MDA5NDUuOTY2NDY4ODEyNCw1MDY4NTMuNjAyNTk3MjUzNCwyOTY4OTc2LjE1MDgxNjA5NTUsNTg3OTk2LjYwOTA5NTgwMSwxNTYwOTA0LjY3MzUyNTQ5NTUsMTM5NTE1Mi4yNTcyODY3Nzc1LDMyMDA3MjIuMjg4MDAxNzkxNiwyMzIwMjMzLjU4ODcwMDQ3Niw2NTI1MzkuMDY1NDA2MzM2OSwxODk5MTg0LjkwNjcwODk2MTYsMTI2NDc5Mi4zOTk2OTM3MDIsMTg2ODUxMi4zNTAyNDkzNjEsMjA3NDkzNS42MDQ2NDczMTA3LDE4NDU4NDMuNDIxMDM1MDYxMSw0MTM3NTUyLjExNzg2NTEwODQsMjY3MjUxLjQzMTI2MTUwNzksMzM1OC45NDUxMzU2OTYxNDQKKzUsU2F0IDI5IEphbiAxMSwxNDc3ODMuNzcxNjE1NjQxNzQsMTMxOTcwLjMxNzY1MDAyMTc1LDc2Nzc0LjI5ODE5MDY1MzI1LDE1ODc4NC45ODgzNDQzODAyLDE1OTk2NS44NjY5NDkwMjgxMywyNTg3NTc1LjAzOTgzNjI2MjQsMjgxMTY4MS40NzY1MDIxNTIsMjMwNDQ4NC4xNDYwMTg3Nzg0LDIwMDE2MjAuMTMxNjAxNzUxNSwyNDk3NjQwLjQ2NjE5MzEwNCw1MDQzNjYuNzAyNDYzNjkxNzYsMjk2NTE3Ny42MTg2OTM1NzM0LDU4Nzk5Ny4xOTcwOTI0MTAxLDE1NjA5MDYuMjM0NDMwMTY5LDEzOTUxMzIuMDM1MTAyMDMyNCwzMTk3MTM2LjE2MTM0Mjg3NjUsMjMyMDIxNC42MDUyNTE1OTI2LDY1MjUzOS43MTc5NDU0MDI0LDE4OTkxODYuODA1ODkzODY4MiwxMjY0NzcyLjc0MTQwMTAwNiwxODY4NTE0LjIxODc2MTcxMTEsMjA3NDkzNy42Nzk1ODI5MTUzLDE4NDU4NDUuMjY2ODc4NDgyMiw0MDg3NzA2LjY4NDU2Mjk3OCwyNjUzMzUuNDM3ODM2MTkzMzYsMzM1Ny42OTkxODc1ODA4OTcKKzYsU3VuIDMwIEphbiAxMSwxNDc3NjUuNzI1NDQ2MDY5NSwxMzE5NzAuNDQ5NjIwMzM5NCw3Njc0MC45OTA2NjM1NjIwMywxNTg3NzIuMDYwNTI1MDQ3ODMsMTU5ODg0LjkzMDg4NDAwMTQ2LDI1ODc1NTMuOTI2ODM1MDQ1NywyODExNDc3LjU0NDgzMTUwOCwyMzA0MzUwLjAzMjkwMDEyOCwyMDAxNDU5LjU2MDMzNzY4OTUsMjQ5MzY2Ny4wODY3NTUxMjUzLDUwMTM4OS4zNTM0MTk0MzQsMjk2MDYxMC45ODg4MTI4ODYsNTg3OTk3Ljc4NTA4OTYwNzEsMTU2MDkwNy43OTUzMzY0MDM0LDEzOTUxMDcuMzc1NzkxMzQwNCwzMTkyODI0LjIxNTM1Mjk3MiwyMzIwMTkxLjI0ODg5NTYyNzQsNjUyNTQwLjM3MDQ4NTEyMDMsMTg5OTE4OC43MDUwODA2NzQsMTI2NDc0OC43ODg1MDkyOTM3LDE4Njg1MTYuMDg3Mjc1OTMsMjA3NDkzOS43NTQ1MjA1OTQ4LDE4NDU4NDcuMTEyNzIzNzQ5MSw0MDI4NTExLjY3MTIzNzgyMSwyNjMwNDcuMzk3NTgwMTE0NiwzMzU2LjE5ODE2OTMwOTkyMQorNyxNb24gMzEgSmFuIDExLDE0Nzc0Ny41MjkwMzc4OTkxMywxMzE5NzAuNTgxNTkwNzg5MDIsNzY3MDcuNDI4NzMxNTQ4NzksMTU4NzU5LjAxODM5OTE4NywxNTk4MDMuMzY3MjI1ODUwNTgsMjU4NzUzMi42MDUwNjgxMjksMjgxMTI3MS44MDk5MTYzNTcsMjMwNDIxNC43Mjg0NzA0NTM1LDIwMDEyOTcuNTcyMzg2MDU2NywyNDg5NjY5Ljc2NDQ0NTQ3OTUsNDk4NDA3LjgzNDg5NDQ5MjUsMjk1NjAxNi4yOTUxNzk3Nzg3LDU4Nzk5OC4zNzMwODczOTIyLDE1NjA5MDkuMzU2MjQ0MTk4NywxMzk1MDgyLjQ4NzIyOTc5MjQsMzE4ODQ4NS4wMTIwODIxMTg1LDIzMjAxNjcuNjY2NDE3NDI3LDY1MjU0MS4wMjMwMjU0OTA4LDE4OTkxOTAuNjA0MjY5Mzc5LDEyNjQ3MjQuNjEzNzYxNTM1LDE4Njg1MTcuOTU1NzkyMDE3MywyMDc0OTQxLjgyOTQ2MDM0OTQsMTg0NTg0OC45NTg1NzA4NjIsMzk2OTc5NS4yNDYzNjEzOTYsMjYwNzYyLjg4MTc2NzcyMjA1LDMzNTQuNjg1MjI3NjMwNDQ1Cis4LFR1ZSAxIEZlYiAxMSwxNDc3MjIuMzEyMjU4NDMwNiwxMzE5NzAuNjMwMzExMjIwOCw3NjY1My4wNjYzOTMzMDA4NSwxNTg3MzguNTIyMTY0MzMyMjcsMTU5NjcwLjQxNTgyMjg5NjE1LDI1ODc0ODMuNzMxMjcxNzU2MywyODEwOTA3LjM4OTczNTcwMzQsMjMwMzk3My42Njc1OTQ1NDc0LDIwMDEwMTMuNTk1MzI0MDc0MiwyNDg0OTE2LjMzMjI2OTMxMzMsNDk1MDAwLjM4MzUyMDkyNzgsMjk1MDQyNy4yOTI5MDMxMjQ0LDU4Nzk5NC44NjA2ODU0NjQ2LDE1NjA5MDIuNzM2MjExOTQxLDEzOTUwMzUuMzczNTM0MjU1LDMxODMyNTMuMDY1NjA1NjI4MywyMzIwMTIyLjM2NjY4MzM4NjcsNjUyNTQxLjYyOTI3MjYyNSwxODk5MTkyLjE5Nzg4MDQ3NywxMjY0Njc5LjE4MTkzMzYzNTgsMTg2ODUxOS43NzQ3MTY3NzkxLDIwNzQ5NDMuODUyNzM4MDcxNywxODQ1ODUwLjQwMDAyNDU0MTIsMzkwODI5OS43MzI0ODc2NTI1LDI1ODIyMS4xNTk2NzcyMDc1LDMzNTIuNjQ5MTUxNjEwMzMyCis5LFdlZCAyIEZlYiAxMSwxNDc2NzIuODcyODQyODg0MDQsMTMxOTcwLjQyMTIyNzU5NjA2LDc2NTI5Ljg3NDcyMzEwMTU2LDE1ODY5My4xNDEzODU1NzU5MywxNTkzNjcuNTg0MDQyNDg1NzIsMjU4NzM0Ni4yNjg5Nzc4NiwyODEwMDIzLjE2OTY4NTY4NiwyMzAzMzg2LjM1NDYxMjk4LDIwMDAzMjkuNTE3NDA4Nzg2NiwyNDc3MjYzLjMxODUwOTg0MjcsNDg5ODQ1LjU2OTM3MjI2ODc0LDI5NDExMjAuMDM1NjYwOTE1LDU4Nzk3OC42NTAxMjcwMTc0LDE1NjA4NzAuNzgwOTkzODUzLDEzOTQ5MTUuODQ0MDE3NjYyOCwzMTc0NjUyLjI4MzA4Nzc2MzUsMjMyMDAwNi4yNzQ4MTI4ODM3LDY1MjU0Mi4wOTIyODk0NTg3LDE4OTkxOTIuODQ1MjA0NTg0MywxMjY0NTY0LjQ0NzgxOTIwMzQsMTg2ODUyMS40NDAyMDAwNjM5LDIwNzQ5NDUuNzE2MTUxMzUzMiwxODQ1ODUwLjU4ODkwNzU3NjYsMzgyODY4My40MDkyMzk2NzEsMjU0NTQ0Ljc5ODY2MDUwNTYyLDMzNDguNzg4NTMzMTc4NzE3CisxMCxUaHUgMyBGZWIgMTEsMTQ3NTc4LjkxMzczNTY2ODg3LDEzMTk2OS43NTI3OTUzNjk5Miw3NjI4Mi4yMTA1MDExNjMzNSwxNTg2MDIuMzUwNzIxMjI4ODQsMTU4NzU3LjU3NTY1MDEyNDM0LDI1ODcwNDguOTkzNjQwMzk1LDI4MDgxOTYuMTcyNjkzMjgzMywyMzAyMTcxLjA0NDU4MTQyMSwxOTk4OTE5LjQ3NjQxODEyNjYsMjQ2NDE0My43Nzc3ODg4NDQsNDgxMzk2LjQwMTUwNzk1MDA0LDI5MjQ4NDguNzAyMjkxODc0Nyw1ODc5MzkuODE2MDI0NDUwNywxNTYwNzkzLjY4NTk3NzAzMSwxMzk0NjY1LjEyMzg1MDAxMjQsMzE1OTcyMS4yNTQxNzgzNjk0LDIzMTk3NjEuOTA4Mjc4OTE1Niw2NTI1NDIuMzAwNDMzMDk0NywxODk5MTkxLjgwNjU0MDQ3NTUsMTI2NDMyNC4xNDE2OTk2MDIsMTg2ODUyMi44MzI2Mjc1NDA3LDIwNzQ5NDcuMjk1MDQyNTg0MiwxODQ1ODQ4LjU0NTQ1Mjg1NjUsMzcxMjkyMy42MDM2NTY2NDk2LDI0ODcxNC4yMzc5MzAyNTM5MywzMzQxLjU3MTU0OTQ2MjU4CisxMSxGcmkgNCBGZWIgMTEsMTQ3NDI1LjM3MTgzMjc1NDQsMTMxOTY4LjQ3MjQ0MDQ1MDcsNzU4NjkuOTM1Mjc2OTUxMTUsMTU4NDUwLjY2NjIzMDU1MjQsMTU3NzQxLjQzNDE5MjA5NzUsMjU4NjUzOC4wMTQ3Mzk0NzQzLDI4MDUxMDcuODE1NDg1MzMyLDIzMDAxMTUuMjgyOTg4NjYxNCwxOTk2NTM4LjA2MjM0NzQxNTQsMjQ0MzY5Ny40NTYwNTQ2NjY1LDQ2ODY0Ny43NDYzMTkxMDMwNSwyODk5MjY1Ljg0MDQxNjE4NjUsNTg3ODcwLjg1MDg3NzE5NTgsMTU2MDY1Ni40Njc0MzgyMTgsMTM5NDIzOC43NTI3NTYwMDIsMzEzNjMwMy4xNzMxOTc4MjQsMjMxOTM0NS43NjAxNjcyNyw2NTI1NDIuMTY5NjE5MDI1MSwxODk5MTg4LjUyMjA1Mzk2NTEsMTI2MzkxNS43MDIwOTI4NTMxLDE4Njg1MjMuODYxODk2MjgwNCwyMDc0OTQ4LjQ5NTQ2NTY3NTQsMTg0NTg0My41MjczNTUwMzc0LDM1NTA0NjIuNjQzMzI3ODU4MywyNDAxMDEuNzI2NTI3NDk1MjgsMzMyOS44ODA3OTczOTA2OTMKKzEyLFNhdCA1IEZlYiAxMSwxNDcyMDIuOTYxODQ2MTg2OTgsMTMxOTY2LjQxODUwODI5MzcsNzUyNjYuNjEzNjU0ODM1NTcsMTU4MjI3LjA5MjYyNjYxMjcyLDE1NjI1NC40NDM1OTIyNjgzNiwyNTg1NzYzLjQwMTI4MzIxMywyODAwNTA3LjA2MjA3MDcwMTcsMjI5NzA1MC4xNjk1OTM5NDg0LDE5OTI5OTMuOTMyNTQ0ODIyLDI0MTQ5MzUuNjEzODkzOTExMiw0NTEzMTUuMDY2NzI1NzY0MywyODYzMDg3LjU0MzUyNzU3Myw1ODc3NjIuNzI3NzE3NTU5MiwxNTYwNDQwLjkyMjI5MDI3MjgsMTM5MzU5OS42NzQ1ODA1MTk4LDMxMDMyMDkuMzc4NTAyNDM5MiwyMzE4NzIxLjcwMTA4ODUyMTYsNjUyNTQxLjYxNzQ1NTgxMTgsMTg5OTE4Mi4yOTA2MTQ5OTMzLDEyNjMzMDMuODk5MzU5MDU4LDE4Njg1MjQuNDM2Nzg5NzY0NiwyMDc0OTQ5LjIxMTA1NDU0MjgsMTg0NTgzNC40NDM4NzQ2NDU3LDMzNDEwNTcuMDMxMTg5NTM0LDIyODYxMC44NjM3MjczODA2NCwzMzEzLjA0Njc4MDA5MTAwMzMKKzEzLFN1biA2IEZlYiAxMSwxNDY4OTguNzY3MzE2ODgxLDEzMTk2My4xNzg4OTE2OTEwMyw3NDQyNi4wMTE5ODEwMDc5MiwxNTc5MTMuMDkxMzA3Njc4NSwxNTQxODQuMDk5MzM3MjIyNTgsMjU4NDYxMC41MzE1NDU5MzMzLDI3OTM5MDMuMDUyODIwNzE1LDIyOTI2NDIuNzk4NzYyNDc2LDE5ODc5MTcuNjI5NjU0MDA2MywyMzc2Njk2LjkwNDkwNzE0Nyw0MjkzMTEuMTg2MzM1NjkwMSwyODE0NjgxLjE4MDIyNjY3NjYsNTg3NTkwLjQzNzEyMzEwMDksMTU2MDA5Ni4zMjQ1ODQ3MTY3LDEzOTI2NzEuMzIzNzQ5OTQ0NiwzMDU4OTY0LjQ1NDI1OTA5NCwyMzE3ODE1LjQ4MDk4MjQ4Myw2NTI1NDAuNDQ0OTcxMDI5NSwxODk5MTcxLjEyNDkzNjcyMzIsMTI2MjQxNi40ODkzNDA2NDM5LDE4Njg1MjQuMzMxMjc2Nzc2NywyMDc0OTQ5LjE1Njc2NTUxOTksMTg0NTgxNy45NTQxOTg3ODk4LDMwODkzNTIuMTgyNzI1MzEsMjE0MzUzLjg1NTczMzk2MjAzLDMyOTAuMTEwMjUyMTg5NjU4CisxNCxNb24gNyBGZWIgMTEsMTQ2NDgzLjQzOTA1OTIyMjk2LDEzMTk1Ny43ODU3MDA4MzgwOCw3MzI0MC43NTY5MjYxNzg2NywxNTc0NjYuMzkwOTA1NTU5MTUsMTUxMjY5LjY0OTQ4MzI5NTEsMjU4MjgxMi4xNDcyMjc0NzY0LDI3ODQxNjQuMTY0NDU3Nzg1LDIyODYxMjUuMDUyNzk4OTkzLDE5ODA0NTguMDAzNDA5MDgzMiwyMzI2MjUzLjI1NTYxNDM0ODcsNDAyMTA3LjM0NTY4MjIwMTE1LDI3NTAyMTguMzM0ODIwMDY3LDU4NzI5NS4wMzUzMDkwMzAzLDE1NTk1MDMuMDYyNjg5MDAyNiwxMzkxMjc2LjQxODE3OTUwOTcsMzAwMDEzMi40NTE5OTYzNzA3LDIzMTY0NTUuMjE4ODY2OTc5LDY1MjUzOC4xODY1MTExNDQzLDE4OTkxNTAuMzMxOTYxMDY0NCwxMjYxMDg2LjI4NjYyODM2LDE4Njg1MjMuMDE1NjE0Mzk1LDIwNzQ5NDcuNjYxNjIwNjYxOCwxODQ1Nzg2LjE0MDQwOTMzMzksMjc5ODE3OS40ODk3NjYyNiwxOTcyNTkuNjY5ODQ0MDM2NywzMjU4Ljg2MDg1ODgxNjgwOTUKKzE1LFR1ZSA4IEZlYiAxMSwxNDU5MDQuNjkwNDQ2MDc1NzUsMTMxOTQ4LjUzNjc4NzkwMTQyLDcxNTI4LjU5NDQ3MjAxMTc1LDE1NjgxMS45ODQ0NzY5MzU2NCwxNDcwNzEuOTA2MzU2NjY3MDIsMjU3OTg5OC4xNDIwMzA2MTAyLDI3NjkzMDAuOTIyMTgxMzE1MywyMjc2MTQ0LjEyNDIzNTYxNCwxOTY5MTE3LjgwMDI1MzA1NjIsMjI1ODc4Ny40NzI3Njk2NywzNjg3MDQuNzgzNDYzNzEwMSwyNjYzMDMzLjY0NTM1MTY2OSw1ODY3NzMuNTA2NTE5ODY4NywxNTU4NDUyLjAyNjIyMjgxMzYsMTM4OTEwMS45MTYxNDcwNjMzLDI5MjA2NjEuODE1ODUxMDgwNywyMzE0MzM3LjAxNjg3MDgxNTMsNjUyNTM0LjAyMzczNTM5MDksMTg5OTExMS42OTgxNDIyNDAzLDEyNTkwMTguMDE5Nzc0Nzg3OCwxODY4NTE5LjU1OTg0Mzc2OTMsMjA3NDk0My41NTExMjQ3NzE4LDE4NDU3MjUuMTg2ODM5NjEyNywyNDY4MTA2LjAxODkzMzA3MjcsMTc3MDY4LjE5NjM4NTQ4MzAyLDMyMTUuNDQ3NTUyODA5MDQwNgorMTYsV2VkIDkgRmViIDExLDE0NTA5MS41MTI3MjQ0NzI4OCwxMzE5MzIuOTk1NTM2MjU2LDY5MDYyLjI3MjM5MDUwNjE0LDE1NTg0NS4zOTcxNjMzMzkzLDE0MTA1NC42MDQxNjEzNDQ1MywyNTc1MjAwLjc5ODgxMTcyMTYsMjc0NjU0Ni44NzA3NDIxNDQ1LDIyNjA4MDkuMTkwMzIzNTQzMywxOTUxODE2LjMxNTg5MTE3MTMsMjE2ODI5NC41MTE2Njc2MjIsMzI4NDA5LjI4OTAyODcwOSwyNTQ0OTM3Ljg0OTM3NjkxODcsNTg1ODc4LjkzNDQ1MTY3MDUsMTU1NjY0NC41MjQyMTExMTczLDEzODU3MDQuODM2NTIzODMzNywyODEyOTA4LjczMzU4MDA5NiwyMzExMDI5Ljg2MjU1ODIyNSw2NTI1MjYuNzkzMDgzNTI1MSwxODk5MDQzLjQyNDIzMjQzNjgsMTI1NTc5NC4wOTI3OTg5NTEzLDE4Njg1MTIuNjM5ODE1Mzk2NCwyMDc0OTM1LjE0MzA4MTcwNTMsMTg0NTYxNS4xNTk4MDg2MTczLDIxMDM4NTUuMzEyNjU2NTc1LDE1Mzc4NC45MDk1ODg3NjA4NCwzMTU0LjkxMjU3MzgwODY0OTUKKzE3LFRodSAxMCBGZWIgMTEsMTQzOTY0LjQ4ODIwNDUwMTE2LDEzMTkwNy45Njc1Nzg3OTUyLDY1NjI1LjIzNTUxMTg1MzQsMTU0NDQyLjEyMDU4NTM2MDYyLDEzMjczNC42OTMwMjkyODA4NCwyNTY3ODYyLjI2NTI1MjQ4MywyNzEyNTU3LjkxNDk0MjY1ODUsMjIzNzgwOS4xODkzOTcxNzc3LDE5MjYwNDYuNDc1NTIxNjMwMSwyMDQ5MzcxLjE1NTU1ODYzMDgsMjgxODgwLjUxNTE3NjQwODA1LDIzODg3NTkuODk5MTQ3MjUxNiw1ODQ0MTcuNTUyMTk3NTE0OCwxNTUzNjg0LjkzMDQ2NzI3NDUsMTM4MDUyNy4yNDQ3NzIwMzg3LDI2Njk3MTcuMzQ3NTEzMjIwNywyMzA1OTg4Ljk5MzU4MjU2OTUsNjUyNTE0Ljk5NjQ2MjQwNDcsMTg5ODkyOS42Mjc4NzA1NTkyLDEyNTA4ODkuNzIxMTg5ODQ0MiwxODY4NTAwLjUzNjc0MDI2MywyMDc0OTIwLjE4ODgxMDIyMzcsMTg0NTQyOC41NzYxMjcyNzYsMTcyMTA4OS4xMTg3NjE2NDEsMTI4MjE2LjYxMTc5MzEyNDk2LDMwNzIuMjQ1Nzk1MTc3MDIzNAorMTgsRnJpIDExIEZlYiAxMSwxNDI0NDMuMTA1NTEyNTczNDcsMTMxODY5LjEyMjQ3MTA0MTUsNjEwNTkuNjE0Mzc0ODQ3ODM1LDE1MjQ2MS41NjI0NzI5MzE4NywxMjE4MTcuOTQwMzgxMTEzMDYsMjU1Njc1Ni4yMTA0OTIzMDksMjY2MzQxMi40ODAzMTU5NjgsMjIwNDM4MS4yNTMwNTQzOTI1LDE4ODg4ODkuMzU4MjQ4MDA2OCwxODk4ODIzLjk2NjE4MjMyNzgsMjMxNjMxLjY3MzA5NDM5ODUyLDIxOTA2NjAuODc2NDQwNDc4LDU4MjEyMS42NDIzMTc1NTkyLDE1NDkwMjIuNTQ2NDk4NzAzNSwxMzcyODY1LjU1NTk3NTkzMywyNDg2MzA1LjAyMjIwMjQzNzMsMjI5ODUyNC4wNzU0OTQ3Njc2LDY1MjQ5Ni42NjM2MTI4MzEyLDE4OTg3NDcuNTY5MTgyNjQ4NiwxMjQzNjQ2LjExODY0MjYxNzIsMTg2ODQ4MC45NTA2NjA0MzU1LDIwNzQ4OTUuNDk3Mzk1ODkzNiwxODQ1MTI0LjI4ODY4NTIzNCwxMzQ2MjMwLjU1NDY5NzgwNzksMTAyMDg1LjU2MTIwNTA2NTk3LDI5NjMuMTkxMTQyOTcxNzk2NgorMTksU2F0IDEyIEZlYiAxMSwxNDA0NDUuNDgxMjExMjYyNywxMzE4MTAuMDcwNzE3NzU1ODUsNTUyOTQuNzI5MDE1ODM5OTM0LDE0OTc0MC4yNzExNzc5NjE3MiwxMDgyODUuNzMyNjg0Nzg5NzUsMjU0MDI4MC43NzYyNTc0MDI3LDI1OTQyOTYuNDg3NjkxMzQxLDIxNTcwNDEuOTE2MjgzOTUwNywxODM2Nzk5LjA1OTAxMjc4MzIsMTcxNjUzNi4yODYwNDYxNjM0LDE4MTU2Mi40OTU2NjkxMzU4LDE5NTE0NzMuMDk4MDIyMzc5Miw1Nzg1ODguNDY5ODk4NDMwNCwxNTQxODIxLjU0MjU4NTYyNzIsMTM2MTc2Ny4xMDM0Njg2OTg0LDIyNjEzMjYuMDg0NDEwMzI0NywyMjg3Njk0LjEyNzk0Mjg5Niw2NTI0NjguOTc5OTIxMzAxMSwxODk4NDYxLjU3NDg5MDkwMzQsMTIzMzE3Ni40OTY0MDI4NDkyLDE4Njg0NTAuNTI2NzA5MzQ2OCwyMDc0ODU2LjA5OTk3ODU5MjcsMTg0NDYzNC44NTA1ODk3NDM2LDEwMDgyOTMuNDcwNTUxNDQ2NSw3NzU1OS4yMDkxMjQ5NTMyNSwyODI0LjQ0MTkxMjI5MzY3NDIKKzIwLFN1biAxMyBGZWIgMTEsMTM3ODg0Ljk2NTA4NDIwNDU3LDEzMTcyMS4wMjAzOTI1OTQ5OCw0ODM4MC45ODMyMTMwNjY2MSwxNDYwODMuMDExNjAyMDc0MDgsOTI0ODAuNzg5OTExMzEyNDYsMjUxNjA3Ny4xNDAxMTUyNDg1LDI0OTkxODIuMTkxODM0MzAzNiwyMDkxMjc3LjIzNDc2NzcyMywxNzY1Mzg4LjU5NzI4MzM4MywxNTA1OTkxLjIwMjUzNTU4NCwxMzU4MTAuMDU2MzQyODY1MTQsMTY3NzYwOC4xMDE0OTE2NDc4LDU3MzE5OS4wODk0NjgzNzg1LDE1MzA3ODQuODkxMDg4MjA5NiwxMzQ1ODg3LjcyODIyODc1MjMsMTk5NzY2NS42NzY1NjYwODc2LDIyNzIxNTcuNTAzNDE5Mzg5NSw2NTI0MjcuNzM1NzAwNzY2OCwxODk4MDE0LjMxNjQxMzg4NjQsMTIxODIzNi43ODY5MDM4MzUsMTg2ODQwNC4xNjAxMzc1NDksMjA3NDc5NC4wNDgyMjUxOTg2LDE4NDM4NDguNjg4MzU0MjI0Miw3Mjg2MTQuMDU0NjEzMTg0LDU2NTA1Ljk3NjQ1ODExLDI2NTMuNjA5NzA3NzM1MDc5CisyMSxNb24gMTQgRmViIDExLDEzNDY3Mi43MjUwMjY5MzAxLDEzMTU4Ny4zMzU2MzgyOTAyLDQwNTUzLjg5MTc0OTM2MDE0LDE0MTI2OS4yMjYwMDk4MDA3Nyw3NTIyMy45NzMxNzY1NzU1MSwyNDgwNzk2LjczNjAwMTI3NTUsMjM3MTEwNy4wOTgxNjExMjY1LDIwMDE1OTQuMjg1MDE5OTM0NiwxNjY5NjcwLjc0NzgyMTM1MjcsMTI3NTAxNi44MzI4MDMwNjM2LDk3NTMwLjgwMjk4MDk2MzkzLDEzODIxMzIuNzc5NjY5MTYzMyw1NjUwNDcuOTQ4NTAwMjYyMywxNTEzOTkwLjYxNDk0NzY1OTQsMTMyMzM4Ny4yODI0MzAxODE3LDE3MDM3MzkuMjk2Nzc4ODQ5OCwyMjUwMDQzLjc1Mjk1NzQ2MzcsNjUyMzY2LjczOTU2NjE4MzksMTg5NzMxNi45MTg1NTMyNjcsMTE5NzEzMy43MDAxODAxMDQsMTg2ODMzNC4yNDA1ODAzMjQ1LDIwNzQ2OTcuMDQxNDg1ODA2MiwxODQyNTg5LjY4OTQ4NDYyNyw1MTUwOTMuOTA2ODIzNjY0OCwzOTkzNC42OTExMTEyMzY1MiwyNDQ5LjU5NjY1NzExODMyMgorMjIsVHVlIDE1IEZlYiAxMSwxMzA3MzEuMTU1MjM4MzQ3ODgsMTMxMzg4LjE5MjEyMjI2Njk1LDMyMjk1LjY3NTM1MTE2MDM2LDEzNTA4Ny4zNjY4MTAxMTk2NSw1Nzg1MS4xNjgyMDA0MDA1MSwyNDMwMDIzLjYxMzM1MzYzNCwyMjAzNTQxLjg1NDM0MDY4NzQsMTg4MjI4NC4yNTM0NjQ0MTIsMTU0NTExOS4yNzgxNjc4ODY0LDEwMzYzMDYuNzk5MTM1NTMyNyw2ODEyNS40MTg2NTE3NDg4LDEwODQ5NDkuOTI1NjgzNTg2NCw1NTI5MTEuNjAwNTM1NDAwOSwxNDg4Nzg5LjUwMDIxNjQ5OTcsMTI5MTkyOC45NTI2OTg1Mzk1LDEzOTQ3NTUuMDM2OTk1Nzg0LDIyMTg5MDAuMDg3OTYwMDEyNyw2NTIyNzcuMjc0MzIyNDUwOSwxODk2MjM4LjEwNzYxMzAxMzYsMTE2NzczMi42NDA2NDM5NTIsMTg2ODIyOS45MDI4NzQ4MTA2LDIwNzQ1NDYuODYxOTM3MjMxNCwxODQwNTkzLjgxNTg0OTY0NDQsMzYzMDY0LjczNjE5OTM2OTksMjc4NjkuMzg1OTc4ODI1NDQ1LDIyMTMuNDgzNDM3MDkzODE4MworMjMsV2VkIDE2IEZlYiAxMSwxMjYwMTQuMTk4NzgwMjczODMsMTMxMDk1LjE2NDY2NjEzMTUsMjQzMDIuODg4MDI0MTcwNDE0LDEyNzM5My4wNDg5NTkyNjQxNSw0MTk2OS45OTQ4NTgyMzgxOSwyMzU4Mzg3LjAyODQ3NDAyOCwxOTkyODMxLjA5MDA4MjI2OTYsMTcyODk2NC40MzM3OTI4OTM4LDEzODk1MjkuMDcwMjEyNzQzLDgwNjI2NS4yMzgzMjQwMjYxLDQ3MTk1LjkyODU2NzQ3OTMzLDgwOTc2OC45Njc0NzQ5MzM3LDUzNTI3MS40MzQ0MTY4MzE3LDE0NTE3ODEuNzU4NTYzMjc1NCwxMjQ4Nzk4Ljg1MDYwNTM1NjUsMTA5MTkwMC4yMjUwMTMyMDA3LDIxNzU3MTMuMzQ3ODI1NDg0LDY1MjE0Ny40OTc2MjcxNTYyLDE4OTQ1ODkuODk0OTc3OTc4NywxMTI3NTgxLjMxMjY1NjQwMzgsMTg2ODA3Ni4xMjE3OTEyMjk2LDIwNzQzMTcuMTY0MTQxMDE2NSwxODM3NDc2LjY5NTA0NDY1NSwyNjA1MDguMDc3Nzg5NTE0MzMsMTk2MjIuNjg3NTEwNDQzOTYsMTk0OS40NTE5NjgxNjU4MjkKKzI0LFRodSAxNyBGZWIgMTEsMTIwNTI1LjMwMTUyNzg1NTM1LDEzMDY3MC4zNDA1MTcxNzU4NiwxNzMwMC42NjMzMTk4ODYxNDUsMTE4MTcxLjEyODQ3MDQwNDk1LDI4OTIxLjk1NTcyODg4ODMsMjI1OTg3NS40MDY0NTA2ODg0LDE3NDEwOTIuNjUyNzgyNTczNiwxNTQwNjQ0LjAwODcwNzY1OCwxMjA1MTc5LjI1NDY4MjI4NTcsNjAxMzQyLjc1Njk2ODgzMzIsMzMxNzIuODc2ODk5NTA4NDI1LDU3NzM2My44NjYwNTY4NTEyLDUxMDQwOC4xMTE0NTYzMzI2LDEzOTg4OTQuMzc0NzAwNTI1LDExOTExMzIuNDI2NTAwNTA1OCw4MTc5MDIuMjkzMzU2MzQ3NCwyMTE2OTc1LjAxMjEyMTc1Niw2NTE5NjEuNTQ3NTgzOTM4OSwxODkyMTA1LjM2MTI2NzMwNTQsMTA3NDEzNC45NzA1NDk0NzUyLDE4Njc4NTIuMzA0NjU0NzE3LDIwNzM5NjkuODM0MTAzOTQ0LDE4MzI2ODIuODI2ODc2MjkzOSwxOTM4MDYuODgxMzEzMTg0NCwxNDIzMS41Mzg4NDY5NTY3NjYsMTY2NS4zMTY2MzMwMDMzMzE0CisyNSxGcmkgMTggRmViIDExLDExNDMyNC45MDY3MDk5OTMwNSwxMzAwNjMuNzMxMzMwMjExNjgsMTE3ODAuNTQyOTA1Nzc1Nzk2LDEwNzU3Ny40MzYxMzExNDMyMywxOTI4My44Mzc3MzIxMjIyNzYsMjEyODQ2MC4zNzEwNTU4Mzg3LDE0NTg1MjAuNzgzMjM0MjAzNywxMzIxODE3LjYzNjEzMTM4MTYsMTAwMDQzNy4wNTY0MDE0NDY2LDQzMzIxNy43MjQ5MDgxMDQ1LDI0MTU2Ljg1ODUyMjU4NTI4LDM5ODYzMi4xNjkzNTE3MzAyNiw0NzY2MjEuNTI0MDYzNDMyNSwxMzI1NjY0LjgzODI1NTExOCwxMTE2MjY3Ljk3NjA4OTUwNiw1OTAyODIuMDEyMTMyMDIyNSwyMDM4Nzg4LjYwODExMTkzNjQsNjUxNjk4LjEyMjI2NjYwNywxODg4NDA0LjgxNTc5OTM0NTcsMTAwNTA5Ni40OTIwNDkyMjc5LDE4Njc1MzAuMDQyMzU1Mzk2MywyMDczNDQ5LjE0MjAzNTE4NzIsMTgyNTQxMC4yOTQ1MDUzMjEyLDE1MTM3Ny41OTMyNjkyNDMzNywxMDgwMC42NDk2Mzg5MjI3NjMsMTM3Mi42NTk2NTEyMjMyMDQ3CisyNixTYXQgMTkgRmViIDExLDEwNzUyNC40MDM5MDE5NzM3OCwxMjkyMTAuMzIxMzkzODY3ODIsNzg0NC4xNTY1MjIwMjI1MzEsOTU5NDMuNDY4MTA2MTYyNywxMjc5Ni44ODQxMzIyODUyMDIsMTk1OTI5MS41MTczMzgxMjIsMTE2Mzc2OC44ODQzOTY3MzM3LDEwODM4MjAuMDk5MzQzOTEsNzg5NzM3LjU5MTUzMzEyNjMsMzA1NzI2LjgwMTMwNzkwMTE2LDE4NTAxLjQyOTE2NTE0MzM2LDI3MjM4NC44NTYzMTUzMjg2LDQzMjY3MC42ODk5ODc3OTU2NiwxMjI3OTYwLjc1ODYyNjc3NzQsMTAyMjMxNy43MDUyNzcwMDk0LDQxNjI2MC41NTE0OTM0MDM3MywxOTM3MTA2LjI0MDU4Mzg0NTYsNjUxMzI4LjQzMzQyMjUzNjksMTg4Mjk0OS41OTE5MjU0MjA4LDkxODk0My40MzA4NjI1MTQ4LDE4NjcwNjkuODI5NTUyMDI3OSwyMDcyNjczLjE0OTI0MDIwNDEsMTgxNDUxNC4wMzY4ODQ2MjczLDEyNDgxMC44MTIyNjA4NTQyMyw4NjUxLjMyMzgyMDU1NjM1NiwxMDg2LjQ3OTc1NzM2MDU0MTMKKzI3LFN1biAyMCBGZWIgMTEsMTAwMjY4Ljg4Mjc0Nzc0OSwxMjgwMjcuNjg2OTM2Nzg0LDUyNjEuMTM3MjgwODA4NTk0LDgzNzQwLjI5ODgyNDY0ODIsODcyMS41OTg4NTUxNTA1MDIsMTc1MDcwMS45NDIyMjE0MjMxLDg4MTExMi4zMjc2MDY4Mjk4LDg0NDI5Ny40ODEyODMzNzUyLDU5MTAxMy44MzQ1MzQyNjQzLDIxNTM4MC40MzI0MDcyNjQ4LDE1MDExLjg1MDU0MzMwOTQ3LDE4OTAwMy43NTAzMDE5OTU3MiwzNzg0ODcuNjU5OTkzNTMyNiwxMTAzMzc3LjYzNzUwMTkwMjIsOTA5MDUyLjkyMjM3NTk1NTUsMjkyNTI1LjQ5MzI0ODIwOTc2LDE4MDgyNjAuMTI1NDgwOTk2Miw2NTA4MTMuNTM2MTkxODIyOCwxODc0OTg1LjYyMDQwMzAyNSw4MTU3MTMuODkyOTM5MTY4LDE4NjY0MTYuNjUwNzk5MjUxMiwyMDcxNTIxLjg3NTc4NTI5NzUsMTc5ODQwMC42OTM1NDUwMjI3LDEwODUzMC42NjA5MjE2NTAyMSw3MzI1LjM2ODE0MTQ2MjgwNSw4MjMuNjM0OTA5ODM5NzY4NAorMjgsTW9uIDIxIEZlYiAxMSw5MjcxNS42MzU4MTU0NDg0LDEyNjQxNS40MzM1MTYxODU0MSwzNjYxLjY2MTAxNjMyNTA3MTYsNzE1MTEuMDYzNjQxOTQzOSw2MjY2LjIzNTExMTY3NjA4NywxNTA2ODIwLjkxMTA1NzIyMDUsNjM0MTQ0LjM2Mjc3NzUzNjMsNjIzNzEwLjA3MTc3NDIzNDEsNDIwNjg3Ljg4MjI5NzI2NDM1LDE1NDU2NS42OTM1OTI3Nzk3NSwxMjkwMy40ODA1MTM4MjIzMTUsMTM2MzU1Ljg4NDgwNDgzMTQsMzE2MDA5LjQ4NDgxNDUzMjU3LDk1MzI2MS45OTgyODA3NDI5LDc3OTAzMS41MjY0MTM2MjExLDIwOTI5Mi44MjE2OTkzNDIxNywxNjQ5OTUwLjQzNzE5MDMwNiw2NTAxMDAuOTc2NjM1MjY5MSwxODYzNDc5LjcyMjAxMTExMTIsNjk3OTY4LjU3Mzk5MDk5MTksMTg2NTQ5NC4xNjkzMDcxNzU2LDIwNjk4MjEuMjM5Mzc3OTc0OCwxNzc0OTM0LjUxNDU4OTc4OSw5OTAwNC42OTg4NzgwMzkyLDY1MzEuNzU4NDAyMTY2MDc4LDU5OS4zODA4NDU2ODY4MTI0CisyOSxUdWUgMjIgRmViIDExLDg1MDE3LjQzMjMzNDU5NDk1LDEyNDI1Ny43NTcxMjc1NDM5MywyNzAzLjYwMzQ0ODkzMTcyMiw1OTc5MC44NTM5OTk1Nzc0NSw0ODE4LjYxMDI5MjMwODg0NiwxMjM5NzE1Ljk4NzY3MDM2ODcsNDM4MzA4Ljg3NzA0Mzg1MjYsNDM5Mjc5LjQxNTU1ODgwMDU3LDI4ODM1OC44MDQ4MTYzMDg3LDExNTAwMi4wMzY3ODgwMDY4MSwxMTY4Ni4wMTY4MzYyNzk2MTIsMTAzOTU4LjgxNjc1NDI2NzMyLDI0OTYzMC45NzE1NTUxODc0Myw3ODQ2MzguODI0MjU1NjUyLDYzODUzMS4wNDU1OTU0ODM0LDE1NTI5NS4yNTYyMDcxMjA1NSwxNDYyNzA2LjA0OTIyMzM0NCw2NDkxMjAuNDkwNTk3NTg1MiwxODQ3MDUxLjE4ODI0MzgwMTUsNTcxNTI5Ljg2MzYyMTM0OTgsMTg2NDE5Ni44NjMzNzk5NDc0LDIwNjczMjAuODEwODAzNjA4MywxNzQxMzc4Ljc5NTE0MTU1OTgsOTQwMjcuMjkyMTA0MTMyMzYsNjA5MC4wMzU0MDQwODkxNjEsNDIyLjkxMDAzNTk2NTQxNjQ1CiszMCxXZWQgMjMgRmViIDExLDc3MzE2LjYyMDQ1NDEwOTEzLDEyMTQzMC40OTM4MDAwMTA4LDIxNDAuMjE0NTk5MDQ1NDY4LDQ5MDM0LjQwNjMxMTg2OTc2LDM5NzkuMjkwODM2Mjg2MTE2Nyw5NjkyMDAuMjc5MzczOTU3MywyOTY3MDguMjc4NTgzNzQ4MTUsMjk5MzgzLjQ0MTM5ODkxNzQ2LDE5NDUyMC44MzIyMzMxODY1OCw4OTc5Mi44OTEyNjcwMTMwNywxMTA1OC4wNTg3NDQwNTk4NjUsODQzNDYuMjI1NTQ0MzcwMDQsMTg1NjA2Ljg1MjA5MDE4NTMzLDYxMDU5OC4zMDk2NTI3NzQ4LDQ5NzQ2OS4yMDA5MTI3OTM2LDEyMDk2NS4xMTQ5MzM1OTA5LDEyNTE1MTguOTEyNjg2NzA5LDY0Nzc3OC4yNzI5ODY1MTQ4LDE4MjM5MDMuNDM0NzA3Mzc3Myw0NDUyOTQuNjM3NDA1ODYyMSwxODYyMzc5LjAyMjc0Mjc4NDEsMjA2MzY2Mi40OTMwNTYwMjE0LDE2OTQ0MDcuOTc5MjUzNjcyNSw5MjIxMi4xMDQ1ODMwNjI1NSw1ODg4LjIxNTI2NjE2NDUzMDUsMjk0LjY4Mzc5MjIwMzEyNDU0CiszMSxUaHUgMjQgRmViIDExLDY5NzQ4Ljk0MjUwNDA5Nzg3LDExNzgxNC4wMDY1MzAzNzYzNCwxODE1Ljc3NTEzNzE0MDk2NywzOTU2NS40MTc4NTAyNDgwNiwzNTA5LjA1NDE1MzAzODkwMSw3MTg3ODMuODM0MDU1Nzk0MywyMDE5NDYuNjAzNDg5ODc3NDgsMjAyMTc5Ljk3MTg4MjU1ODA4LDEzMjczMi44NDE4NDI2NTEwMiw3Mzk4MC41MTk1MzA5NTAxMSwxMDgzMy4yMzYwMzg4ODgyMTMsNzI3MzIuMTc3NTU3NDc1ODQsMTMwMTc2LjI5OTYzNDU0NDE2LDQ0NzczMy4yMTk5MTUyMDI3LDM2NzU0NC45MTcyNzc0MTcyLDk5NDAxLjAzMzQ4MzI3MTUsMTAyNjkwMi4xOTEyNzYwODQ5LDY0NTk0OS4yNTE3MTU5MjEsMTc5MTc2OC45MzgwMTYyMTQsMzI5NTE0LjU1MDYzNzY2ODcsMTg1OTgzOS4yMjA5Mjk1OTI0LDIwNTgzMzYuODU2NjI3ODkyNSwxNjMwMjQ2LjQzMzE3NDE0OTgsOTI2NjkuMzgwODI0ODkwNDIsNTg1NS42MDI2MjY4ODYzMzQsMjA3LjcwMzY1MzYzMjkwNDk1CiszMixGcmkgMjUgRmViIDExLDYyNDQ5LjQ3NDE4ODc5MTE4LDExMzMxMi4zNzA0MDUzMTA3NCwxNjM4LjA3NzAyOTE2Mzc0NCwzMTU1Mi43Mzc1MjY0MDQ1NywzMjY5LjEyMDU1ODUzMTEyNSw1MDg0ODguMTU3NzQ5NDAwNSwxNDE5MzkuNzg2MzU1NDU3MTIsMTM5MDk5LjQyMzUwMzY0NDQ3LDk0MDYyLjg1MjYyMjIyNjcyLDY0MjgzLjc0NTk4MjY4NjU0LDEwODkzLjg3OTA0NzIxNjg1MSw2NjE5OC43ODM0NzA0OTY3Nyw4NzI2Mi43OTkxMjg5MjczOCwzMTA4MjMuMjY2NjI2NTQzNywyNTg3ODMuMDg0NjI2MDgxOTIsODYwNTcuODE5MzI2ODYyMDEsODA0MjczLjIxODkxODI5ODYsNjQzNDY2Ljg2NjIxNjU2OSwxNzQ3ODk1LjM3ODk2MTMyMjYsMjMyNzkxLjE3MDg1MzAyMzQ4LDE4NTYyOTguNzIwOTcyMzI4LDIwNTA2MjQuMjUxMzY4NjA0NiwxNTQ1MDE0Ljg5MTQ4NTE4OTgsOTQ4MTAuNTE5NTgzNjc3NjMsNTk0Ni4zMDAwNTU4NTYzNzMsMTUxLjYyODMyNzg5NTIzMTczCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0RlbW9ncmFwaGljU0VJUkRpc2Vhc2VfUktfUmVmZXJlbmNlL0RlbW9ncmFwaGljTW9kZWwvbWVuL0JpcnRoc18yLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvRGVtb2dyYXBoaWNTRUlSRGlzZWFzZV9SS19SZWZlcmVuY2UvRGVtb2dyYXBoaWNNb2RlbC9tZW4vQmlydGhzXzIuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFhNTIyZTUKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0RlbW9ncmFwaGljU0VJUkRpc2Vhc2VfUktfUmVmZXJlbmNlL0RlbW9ncmFwaGljTW9kZWwvbWVuL0JpcnRoc18yLmNzdgpAQCAtMCwwICsxLDMzIEBACitpdGVyYXRpb24sdGltZSxFRy1GUkctRzIxMDAwMSxFRy1GUkctRzIxMDAwMixFRy1GUkctRzIxMDAwMyxFRy1GUkctRzIxMDAwNCxFRy1GUkctRzIxMDAwNSxFRy1MT0UtRzI0MDAwMSxFRy1MT0UtRzI0MDAwMixFRy1MT0UtRzI0MDAwMyxFRy1MT0UtRzI0MDAwNCxFRy1MT0UtRzI0MDAwNSxFRy1MT0UtRzI0MDAwNixFRy1MT0UtRzI0MDAwNyxFRy1MT0UtRzI0MDAwOCxFRy1MT0UtRzI0MDAwOSxFRy1VUEUtRzI5MDAwMSxFRy1VUEUtRzI5MDAwMixFRy1VUEUtRzI5MDAwMyxFRy1VUEUtRzI5MDAwNCxFRy1VUEUtRzI5MDAwNSxFRy1VUEUtRzI5MDAwNixFRy1VUEUtRzI5MDAwNyxFRy1VUEUtRzI5MDAwOCxFRy1VUkctRzMwMDAwMSxFRy1VUkctRzMwMDAwMixFRy1VUkctRzMwMDAwMyxFRy1VUkctRzMwMDAwNAorMSxUdWUgMjUgSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzIsV2VkIDI2IEphbiAxMSw1LjkxMjI3MDM3NTg1NDU1Niw1LjI3ODc5NDIzMDE5OTUwNiwzLjA3MjY4NzkwNjE0ODI4OSw2LjM1MjA1MzAxNTA1NTY3Niw2LjQwMjgwNTY0Mjc0MjQyOCwxMDMuNTAzODYyOTk1NDg1NjYsMTEyLjQ3NzU0MDY4OTQ5NDk0LDkyLjE4NjA4NzEzMTA0NTgxLDgwLjA3MjkxOTYxMTkzNTQsMTAwLjExMTMxMTMxMTg0Mzc0LDIwLjMyOTY2MzI5NDMzNDg0LDExOC44NDM0NTkwMDk4NjQxNSwyMy41MTk4MDU1NjQyODA4NzYsNjIuNDM2MDMwODUwODQzNzY0LDU1LjgwNjQzMTI5MDY5NjYzNiwxMjguMTA4NTQ4NTU0Mjc4NDYsOTIuODA5NTg1MDY1NjUxNSwyNi4xMDE0OTczNjI0Njg3Myw3NS45NjcyMDYzNTAyMjIyOCw1MC41OTIwMzQ1OTEyNDUzLDc0Ljc0MDMwNzE1OTA4ODE4LDgyLjk5NzIxNjY5MjcxOTI4LDczLjgzMzU1MjI1NzQwNDkyLDE2OC4zMDE5ODQ4NTUxNTgxLDEwLjczMjkwODQzMzY1NTY0LDAuMTM0Mzg1MjY0MDcyMjU0NjgKKzMsVGh1IDI3IEphbiAxMSwxMS44MjQ1NDY2NjM5ODI0NDQsMTAuNTU3NTkzNzM5MTk1ODc5LDYuMTQ1Mzc4ODg0OTg2MDIxLDEyLjcwNDExMjM4MjE2NzU1NSwxMi44MDU2MTc2ODgyOTM3MDYsMjA3LjAwNzgyOTQ5NDg4NjE4LDIyNC45NTUxOTM4NTY1ODY4MiwxODQuMzcyMjY2NDQ4MjI0OTMsMTYwLjE0NTkxOTI5NjgzMDU2LDIwMC4yMjI3MjI3MzUwNDg4NSw0MC42NTkzNDY5MTgzNDMxNCwyMzcuNjg3MDM2ODYzMjQ2NzYsNDcuMDM5NjM0NjQ4Mzc5MDcsMTI0Ljg3MjEyNDEzNzc0OTY3LDExMS42MTI5MTgzODc4NTI1MiwyNTYuMjE3MjI1MjE3MTY5NjQsMTg1LjYxOTI2Mjk0MDkzNDQyLDUyLjIwMzAyMDgyNjQ0NzkwNCwxNTEuOTM0NDg4NjY3Njg4OTgsMTAxLjE4NDExOTc3NDU1MDU0LDE0OS40ODA2ODkwNTg1MjA5NywxNjUuOTk0NTE2MzgyNjk2OCwxNDcuNjY3MTc4MzQ4Mzk5LDMzNi42MDQxMzgwMTIzODUzLDIxLjQ2NTgyNzYwMDIyNTA4MywwLjI2ODc3MDY2MjUyOTg0MDcKKzQsRnJpIDI4IEphbiAxMSwxNy43MzY4Mjg4NjQzODk1OCwxNS44MzYzOTg1MjY5OTQ0MDUsOS4yMTgwNzI5MzY1MTYyNjcsMTkuMDU2MTc4MTAxMzQxOTY3LDE5LjIwODQzNjEzNjY2MDIzMiwzMTAuNTExODk5NDk4MzA1LDMzNy40MzI5NTk1MDEzODgxLDI3Ni41NTg1Mzc5NTE2Mjk0MywyNDAuMjE4OTk5MDU0NzY1NDUsMzAwLjMzNDIzNDI2OTcxNTUsNjAuOTg5MDUwODcyMDQ1MjQsMzU2LjUzMDczMzU2MDI2NjcsNzAuNTU5NDg3MjUyMzE4MTIsMTg3LjMwODI3OTg2MDc4MDA2LDE2Ny40MTk0NjEyOTE1MjM0LDM4NC4zMjYwMjk5ODg4MDE1NywyNzguNDI5MDMzNjI1OTQxNjYsNzguMzA0NTcwMzkxOTYzNjEsMjI3LjkwMTg0Njk1MjQ3NTkyLDE1MS43NzYyNTU1NDk5NjYyNCwyMjQuMjIxMTQ1Njk4MzczMDUsMjQ4Ljk5MTg5OTA3MDAxNTQ4LDIyMS41MDA4NzgyNzMwNTYwNiw1MDQuOTA2NDU5NDcxODQ5OCwzMi4xOTg3NTc0OTk3MTkwNSwwLjQwMzE1NjE5NTM3Mjg5MjIKKzUsU2F0IDI5IEphbiAxMSwyMy42NDkxMTY5NzcwODE4NzQsMjEuMTE1MjA4NTkzNjAwMzU0LDEyLjI5MDc3MDA2MDc0MjEwMywyNS40MDgyNTAxNzI1ODUyNjYsMjUuNjExMjYwOTg3ODQ4NDA0LDQxNC4wMTYwNzMwMDU4NDU0LDQ0OS45MTA4Mzc2MjQwMTEyNiwzNjguNzQ0OTAxNjQxMzUxMzYsMzIwLjI5MjE1ODg4NTgyMDEsNDAwLjQ0NTg0NTkxNTk0MzcsODEuMzE4Nzc1MTU1NDYxNDcsNDc1LjM3NDU0OTEwMTA0Mjc2LDk0LjA3OTM2MzM3NjEyMTUyLDI0OS43NDQ0OTgwMTk5OTczNCwyMjMuMjI2MDYwMDAxNzY1MTIsNTEyLjQzNDk2Mjg2OTMwMjIsMzcxLjIzODg5NzEyMDc2NTksMTA0LjQwNjE0NjA1OTA0MTg5LDMwMy44NjkyODEyMDQ2NTkwNSwyMDIuMzY4NDQxOTE3NTQyOTUsMjk4Ljk2MTY3NzA3ODcxOTE2LDMzMS45ODkzNjQ3NTQ3NTg0LDI5NS4zMzQ2NTIwMzE0NTAxLDY3My4yMDg5NDkyMzM3MjAyLDQyLjkzMTY5ODEzMjE0ODI4LDAuNTM3NTQxODYyNjAxNTQzNworNixTdW4gMzAgSmFuIDExLDI5LjU2MTQxMTAwMjA2NTIzLDI2LjM5NDAyMzkzOTAxOTAxNCwxNS4zNjM0NzAyNTc2NjY2LDMxLjc2MDMyODU5NTkwMzgxNSwzMi4wMTQwOTIyNDE4NjQ2Myw1MTcuNTIwMzUwMDE3NjExMiw1NjIuMzg4ODI4MjI0NTY4OCw0NjAuOTMxMzU3NTE3NDgzMTUsNDAwLjM2NTM5ODc5MDA3NDU1LDUwMC41NTc1NTc2NzM4MzM3NCwxMDEuNjQ4NTE5NzY4NjEyMTMsNTk0LjIxODQ4MzQ4NTY5MzcsMTE3LjU5OTI2MzAxOTgxMjgsMzEyLjE4MDc3ODYxNTQ2NCwyNzkuMDMyNzE0NTE4NjMzNCw2NDAuNTQ0MDIzODU4OCw0NjQuMDQ4ODUzNDI1NTAwMDYsMTMwLjUwNzc0NzgyNzcwODkzLDM3OS44MzY3OTE0MjQzMTQ0NywyNTIuOTYwNjc4ODc3MzMxNDUsMzczLjcwMjI4MzE5OTYzNDA1LDQxNC45ODY5MTM0MzcwMDg1LDM2OS4xNjg0OTk2MjM2NTQ3LDg0MS41MTE2MDcyOTgxNjQ2LDUzLjY2NDY0OTQ5NzUyMzUwNiwwLjY3MTkyNzY2NDIxNTkyOTkKKzcsTW9uIDMxIEphbiAxMSwzNS40NzM3MTA5MzkzNDU1OCwzMS42NzI4NDQ1NjMyNTU2NjIsMTguNDM2MTczNTI3MjkyODMsMzguMTEyNDEzMzcxMzAzOTgsMzguNDE2OTI5ODk4NzE1MzIsNjIxLjAyNDczMDUzMzcwNTYsNjc0Ljg2NjkzMTMwMzE3MzQsNTUzLjExNzkwNTU4MDExNjksNDgwLjQzODcxODc2NzYwOTEsNjAwLjY2OTM2OTU0MzQ4NTYsMTIxLjk3ODI4NDcxMTUxNzU5LDcxMy4wNjI1MzY3MTQzMzg2LDE0MS4xMTkxODYxODM0MTU0NSwzNzQuNjE3MTIxNjQ3MjQyNDcsMzM0LjgzOTQyNDg0MjE4NDE0LDc2OC42NTMyMTI5NTc0MjI3LDU1Ni44NTg5MDI1NDAyMzcsMTU2LjYwOTM3NTY5Nzk5MDc0LDQ1NS44MDQzNzc2MTE1MTgxMywzMDMuNTUyOTY2NDI5MzgyMiw0NDguNDQyOTY0MDYxMTkyNCw0OTcuOTg0NTQ1MTE2ODQ4ODQsNDQzLjAwMjQyMTA0OTc0MzkzLDEwMDkuODE0NDMzNjY1MzUxMiw2NC4zOTc2MTE1OTU4NTU0OCwwLjgwNjMxMzYwMDIxNjE4NDcKKzgsVHVlIDEgRmViIDExLDQxLjM4NjAxNjc4ODkyODgyLDM2Ljk1MTY3MDQ2NjMxNTU3LDIxLjUwODg3OTg2OTYyMzg2NSw0NC40NjQ1MDQ0OTg3OTIwNyw0NC44MTk3NzM5NTg0MDY4NSw3MjQuNTI5MjE0NTU0MjMyNSw3ODcuMzQ1MTQ2ODU5OTM3LDY0NS4zMDQ1NDU4MjkzNDQ4LDU2MC41MTIxMTg4MTg1MDM1LDcwMC43ODEyODE1MjQ5OTk0LDE0Mi4zMDgwNjk5ODQxOTgxLDgzMS45MDY3MDg3ODcwOTYsMTY0LjYzOTEzMjg2Njk1MzA4LDQzNy4wNTM1MjcxMTUzOTUxLDM5MC42NDYxOTA5NzI0NzMsODk2Ljc2MjUzMDE2NTI5ODQsNjQ5LjY2OTA0NDQ2NTA2OTEsMTgyLjcxMTAyOTY2OTkxMzQ3LDUzMS43NzIwMzk3NjYzNDYsMzU0LjE0NTMwNDU3Mzc0NTcsNTIzLjE4MzcxOTY2MzQ2ODksNTgwLjk4MjI1OTc5NDM2MjEsNTE2LjgzNjQxNjMwOTc5MTMsMTE3OC4xMTc0MjgzMzU0NDc4LDc1LjEzMDU4NDQyNzE1NDkxLDAuOTQwNjk5NjcwNjAyNDQyNgorOSxXZWQgMiBGZWIgMTEsNDcuMjk4MzI4NTUwODIwODUsNDIuMjMwNTAxNjQ4MjA0MDEsMjQuNTgxNTg5Mjg0NjYyNzgsNTAuODE2NjAxOTc4Mzc0NDcsNTEuMjIyNjI0NDIwOTQ1NjM1LDgyOC4wMzM4MDIwNzkyOTUsODk5LjgyMzQ3NDg5NDk3MjUsNzM3LjQ5MTI3ODI2NTI1ODgsNjQwLjU4NTU5ODk0MjgzNzksODAwLjg5MzI5MzYxODQ3NDksMTYyLjYzNzg3NTU4NjY3NDA4LDk1MC43NTA5OTk3MDQwODQ1LDE4OC4xNTkxMDMwNzA0NDkxLDQ5OS40ODk5OTUwMTk5ODQ1LDQ0Ni40NTMwMTI5MDk1NTYsMTAyNC44NzE5NzU0ODI1NTUyLDc0Mi40NzkyNzkyMDAwODk4LDIwOC44MTI3MDk3NDM1MDMyMyw2MDcuNzM5Nzc3ODg4ODc0LDQwNC43Mzc2OTMzMTA0NzI2LDU5Ny45MjQ1NTAwMDY1MzgzLDY2My45ODAwNTc0Njk2MzE0LDU5MC42NzA0ODU0MDM4NzA3LDEzNDYuNDIwNTkxMzA4NjIzMiw4NS44NjM1Njc5OTE0MzI1MywxLjA3NTA4NTg3NTM3NDgzODIKKzEwLFRodSAzIEZlYiAxMSw1My4yMTA2NDYyMjUwMjc1OCw0Ny41MDkzMzgxMDg5MjYyNjUsMjcuNjU0MzAxNzcyNDEyNjMsNTcuMTY4NzA1ODEwMDU3NSw1Ny42MjU0ODEyODYzMzgwNjUsOTMxLjUzODQ5MzEwODk5NjQsMTAxMi4zMDE5MTU0MDgzOTE3LDgyOS42NzgxMDI4ODc5NTEsNzIwLjY1OTE1OTE0MDY5MjQsOTAxLjAwNTQwNTgyNDAxMjQsMTgyLjk2NzcwMTUxODk2NTc4LDEwNjkuNTk1NDA5NDY1NDIzMiwyMTEuNjc5MDk2NzkzOTI2OTYsNTYxLjkyNjUyNTM2MTA3MjgsNTAyLjI1OTg5MDY1MzQ4ODUsMTE1Mi45ODE1NDg5MDkzMjEsODM1LjI4OTYwNjc0NTM5MTIsMjM0LjkxNDQxNTkxODc4NTk4LDY4My43MDc1OTE5NzkxNzc3LDQ1NS4zMzAxMzI2Mzk2MTM0LDY3Mi42NjU0NTUwOTA0NzUxLDc0Ni45Nzc5MzgxNDI3NCw2NjQuNTA0NjI4MzMyMDU2MiwxNTE0LjcyMzkyMjU4NTA0NSw5Ni41OTY1NjIyODg2OTkwNiwxLjIwOTQ3MjIxNDUzMzUwNDgKKzExLEZyaSA0IEZlYiAxMSw1OS4xMjI5Njk4MTE1NTQ5NzQsNTIuNzg4MTc5ODQ4NDg3NjUsMzAuNzI3MDE3MzMyODc2NTI1LDYzLjUyMDgxNTk5Mzg0NzU4LDY0LjAyODM0NDU1NDU5MDYyLDEwMzUuMDQzMjg3NjQzNDQxMywxMTI0Ljc4MDQ2ODQwMDMwODMsOTIxLjg2NTAxOTY5NzUxNDgsODAwLjczMjc5OTQxMjE0NzUsMTAwMS4xMTc2MTgxNDE3MTMxLDIwMy4yOTc1NDc3ODEwOTM3LDExODguNDM5OTM4MDcxMjMyNSwyMzUuMTk5MTE0MDM3NDEwNiw2MjQuMzYzMTE4MTM4NzIzLDU1OC4wNjY4MjQyMDQzMjcsMTI4MS4wOTEyNTA0NDU3MjU2LDkyOC4xMDAwMjcxMDEwNjcyLDI2MS4wMTYxNDgxOTU3ODgyLDc1OS42NzU0ODIwMzczMzQxLDUwNS45MjI2MjI1NjEyMTkzLDc0Ny40MDY0MzQ5MTUzNTUsODI5Ljk3NTkwMTgxMzc3MTEsNzM4LjMzODg0NTA5NDQyMTksMTY4My4wMjc0MjIxNjQ4ODQsMTA3LjMyOTU2NzMxODk2NTMzLDEuMzQzODU4Njg4MDc4NTc5MgorMTIsU2F0IDUgRmViIDExLDY1LjAzNTI5OTMxMDQwODkyLDU4LjA2NzAyNjg2Njg5MzQxLDMzLjc5OTczNTk2NjA1NzUwNCw2OS44NzI5MzI1Mjk3NTEwMSw3MC40MzEyMTQyMjU3MDk2LDExMzguNTQ4MTg1NjgyNzMyLDEyMzcuMjU5MTMzODcwODM0MSwxMDE0LjA1MjAyODY5NDA0MTMsODgwLjgwNjUxOTc1NzI4MjgsMTEwMS4yMjk5MzA1NzE2NzU2LDIyMy42Mjc0MTQzNzMwNzc5OCwxMzA3LjI4NDU4NTUyMTYyOSwyNTguNzE5MTU0ODAwOTIzMTUsNjg2Ljc5OTc3MzM1Mjk5NzIsNjEzLjg3MzgxMzU2MjEyNjgsMTQwOS4yMDEwODAwOTE4OTUyLDEwMjAuOTEwNTQwMjY3MjA5NywyODcuMTE3OTA2NTc0NTM1NjUsODM1LjY0MzQ0ODA2MzQxODIsNTU2LjUxNTE2MzA3NTM0MDMsODIyLjE0NzQ4OTQ4MTI1MTksOTEyLjk3Mzk0ODQ4MjgwNzEsODEyLjE3MzEzNTY5MTA0MTIsMTg1MS4zMzEwOTAwNDgzMDYxLDExOC4wNjI1ODMwODIyNDE5NywxLjQ3ODI0NTI5NjAxMDE5NDIKKzEzLFN1biA2IEZlYiAxMSw3MC45NDc2MzQ3MjE1OTUzMiw2My4zNDU4NzkxNjQxNDg4MDUsMzYuODcyNDU3NjcxOTU4NjY0LDc2LjIyNTA1NTQxNzc3NDEzLDc2LjgzNDA5MDI5OTcwMTQ2LDEyNDIuMDUzMTg3MjI2OTczLDEzNDkuNzM3OTExODIwMDgxNSwxMTA2LjIzOTEyOTg3NzYyMjYsOTYwLjg4MDMyMDE3NjE3ODIsMTIwMS4zNDIzNDMxMTQwMDA5LDI0My45NTczMDEyOTQ5Mzg5NiwxNDI2LjEyOTM1MTgxNjczMTcsMjgyLjIzOTIxOTA4NDQ4ODI0LDc0OS4yMzY0OTEwMDM5NTc2LDY2OS42ODA4NTg3MjY5NDM5LDE1MzcuMzExMDM3ODQ3OTU4MiwxMTEzLjcyMTE0NjI0MzkxMiwzMTMuMjE5NjkxMDU1MDU0NCw5MTEuNjExNDkwMDU3NTA2NCw2MDcuMTA3NzU0MTgyMDI3LDg5Ni44ODg2MTg3ODgyNDA3LDk5NS45NzIwNzgxNDk5MzE1LDg4Ni4wMDc1MDAxMjE5ODgyLDIwMTkuNjM0OTI2MjM1NDc5NywxMjguNzk1NjA5NTc4NTM5NywxLjYxMjYzMjAzODMyODQ4MzYKKzE0LE1vbiA3IEZlYiAxMSw3Ni44NTk5NzYwNDUxMjAwNiw2OC42MjQ3MzY3NDAyNTkxNSwzOS45NDUxODI0NTA1ODMwNiw4Mi41NzcxODQ2NTc5MjMzNCw4My4yMzY5NzI3NzY1NzI2LDEzNDUuNTU4MjkyMjc2MjY3NiwxNDYyLjIxNjgwMjI0ODE2MzcsMTE5OC40MjYzMjMyNDgzNTEzLDEwNDAuOTU0MjAwNjY4OTE0NCwxMzAxLjQ1NDg1NTc2ODc4OTIsMjY0LjI4NzIwODU0NjY5NzEsMTU0NC45NzQyMzY5NTY2NjExLDMwNS43NTkzMDY4ODgxMjk0Niw4MTEuNjczMjcxMDkxNjY3NCw3MjUuNDg3OTU5Njk4ODM0MywxNjY1LjQyMTEyMzcxNDA0MzcsMTIwNi41MzE4NDUwMzEyNjczLDMzOS4zMjE1MDE2MzczNzA4LDk4Ny41Nzk2MDgwMTk2NzQ4LDY1Ny43MDAzOTU4ODEzMzAxLDk3MS42Mjk4MjI4MzYzOTYzLDEwNzguOTcwMjkwODE1MjI3MSw5NTkuODQxOTM4Mzg3MzM2NSwyMTg3LjkzODkzMDcyNjU3NCwxMzkuNTI4NjQ2ODA3ODY5MzYsMS43NDcwMTg5MTUwMzM1ODMKKzE1LFR1ZSA4IEZlYiAxMSw4Mi43NzIzMjMyODA5ODkxMSw3My45MDM1OTk1OTUyMjk3MSw0My4wMTc5MTAzMDE5MzM3NzUsODguOTI5MzIwMjUwMjA0OTUsODkuNjM5ODYxNjU2MzI5NDQsMTQ0OS4wNjM1MDA4MzA3MTg2LDE1NzQuNjk1ODA1MTU1MTkyMSwxMjkwLjYxMzYwODgwNjMxOTUsMTEyMS4wMjgxNjEyMzU1NzExLDE0MDEuNTY3NDY4NTM2MTM5NiwyODQuNjE3MTM2MTI4MzcyNywxNjYzLjgxOTI0MDk0MTUzNDYsMzI5LjI3OTQxODIxMTg3MDEsODc0LjExMDExMzYxNjE4ODMsNzgxLjI5NTExNjQ3Nzg1MzQsMTc5My41MzEzMzc2OTAyNzg2LDEyOTkuMzQyNjM2NjI5MzY3NSwzNjUuNDIzMzM4MzIxNTEwOSwxMDYzLjU0NzgwMTk0OTk5OTQsNzA4LjI5MzA4ODE3MzMwMDQsMTA0Ni4zNzExMDE2MjU3OTMsMTE2MS45Njg1ODY0Nzg3NzY2LDEwMzMuNjc2NDUwNDg3MTU5OSwyMzU2LjI0MzEwMzUyMTc1NywxNTAuMjYxNjk0NzcwMjQxNTgsMS44ODE0MDU5MjYxMjU2MjY2CisxNixXZWQgOSBGZWIgMTEsODguNjg0Njc2NDI5MjA4MzIsNzkuMTgyNDY3NzI5MDY1NzUsNDYuMDkwNjQxMjI2MDEzODcsOTUuMjgxNDYyMTk0NjI1MzMsOTYuMDQyNzU2OTM4OTc4MzMsMTU1Mi41Njg4MTI4OTA0Mjk0LDE2ODcuMTc0OTIwNTQxMjc5LDEzODIuODAwOTg2NTUxNjE5LDEyMDEuMTAyMjAxODc2MjI4MywxNTAxLjY4MDE4MTQxNjE1MjcsMzA0Ljk0NzA4NDAzOTk4NTk1LDE3ODIuNjY0MzYzNzcxNDcxMiwzNTIuNzk5NTUzMDU1NzMzOCw5MzYuNTQ3MDE4NTc3NTgyNyw4MzcuMTAyMzI5MDY0MDU3MSwxOTIxLjY0MTY3OTc3Njc5MSwxMzkyLjE1MzUyMTAzODMwNTEsMzkxLjUyNTIwMTEwNzUwMDY2LDExMzkuNTE2MDcxODQ4NTU1Miw3NTguODg1ODMxMDU3OTg3OCwxMTIxLjExMjQ1NTE1NjUwNiwxMjQ0Ljk2Njk2NTE0MDY2MjgsMTEwNy41MTEwMzY0MjE1MzIzLDI1MjQuNTQ3NDQ0NjIxMTk1NiwxNjAuOTk0NzUzNDY1NjY3MTcsMi4wMTU3OTMwNzE2MDQ3NDc0CisxNyxUaHUgMTAgRmViIDExLDk0LjU5NzAzNTQ4OTc4MzY1LDg0LjQ2MTM0MTE0MTc3MjYsNDkuMTYzMzc1MjIyODI2NDQsMTAxLjYzMzYxMDQ5MTE5MDg1LDEwMi40NDU2NTg2MjQ1MjU3MywxNjU2LjA3NDIyODQ1NTUwNDIsMTc5OS42NTQxNDg0MDY1Mzg1LDE0NzQuOTg4NDU2NDg0MzQyNiwxMjgxLjE3NjMyMjU5MDk2NjMsMTYwMS43OTI5OTQ0MDg5MjkyLDMyNS4yNzcwNTIyODE1NTcyNSwxOTAxLjUwOTYwNTQ0NjU5MDUsMzc2LjMxOTcxMTQxOTc0NDEsOTk4Ljk4Mzk4NTk3NTkxMzQsODkyLjkwOTU5NzQ1NzUwMTYsMjA0OS43NTIxNDk5NzM3MTA0LDE0ODQuOTY0NDk4MjU4MTczOCw0MTcuNjI3MDg5OTk1MzY2MywxMjE1LjQ4NDQxNzcxNTQxOSw4MDkuNDc4NjI0NTM1NDQzNywxMTk1Ljg1Mzg4MzQyODYxLDEzMjcuOTY1NDI2ODAwOTY5NSwxMTgxLjM0NTY5NjE5MDUyNzQsMjY5Mi44NTE5NTQwMjUwNiwxNzEuNzI3ODIyODk0MTU2OCwyLjE1MDE4MDM1MTQ3MTA4MTMKKzE4LEZyaSAxMSBGZWIgMTEsMTAwLjUwOTQwMDQ2MjcyMTAzLDg5Ljc0MDIxOTgzMzM1NTUyLDUyLjIzNjExMjI5MjM3NDU2LDEwNy45ODU3NjUxMzk5MDc4NywxMDguODQ4NTY2NzEyOTc4MDQsMTc1OS41Nzk3NDc1MjYwNDcyLDE5MTIuMTMzNDg4NzUxMDgyNywxNTY3LjE3NjAxODYwNDU4MjYsMTM2MS4yNTA1MjMzNzk4NjU5LDE3MDEuOTA1OTA3NTE0NTY5MiwzNDUuNjA3MDQwODUzMTA3MiwyMDIwLjM1NDk2NTk2NzAxMiwzOTkuODM5ODkzMzAzOTI0ODQsMTA2MS40MjEwMTU4MTEyNDI4LDk0OC43MTY5MjE2NTgyNDI3LDIxNzcuODYyNzQ4MjgxMTY0NCwxNTc3Ljc3NTU2ODI4OTA2NjUsNDQzLjcyOTAwNDk4NTEzNCwxMjkxLjQ1MjgzOTU1MDY2NzUsODYwLjA3MTQ2ODYwNTcxODcsMTI3MC41OTUzODY0NDIxODAxLDE0MTAuOTYzOTcxNDU5NzgsMTI1NS4xODA0Mjk3OTQyMiwyODYxLjE1NjYzMTczMzUxOTYsMTgyLjQ2MDkwMzA1NTcyMTMzLDIuMjg0NTY3NzY1NzI0NzYyNworMTksU2F0IDEyIEZlYiAxMSwxMDYuNDIxNzcxMzQ4MDI2MzMsOTUuMDE5MTAzODAzODE5NzcsNTUuMzA4ODUyNDM0NjYxMjgsMTE0LjMzNzkyNjE0MDc4MjcxLDExNS4yNTE0ODEyMDQzNDE2NCwxODYzLjA4NTM3MDEwMjE2MDYsMjAyNC42MTI5NDE1NzUwMjMsMTY1OS4zNjM2NzI5MTI0MzA3LDE0NDEuMzI0ODA0MjQzMDA1NywxODAyLjAxODkyMDczMzE3MiwzNjUuOTM3MDQ5NzU0NjU1OCwyMTM5LjIwMDQ0NTMzMjg1MjcsNDIzLjM2MDA5ODcwODI5OSwxMTIzLjg1ODEwODA4MzYzMzYsMTAwNC41MjQzMDE2NjYzMzU4LDIzMDUuOTczNDc0Njk5MjgsMTY3MC41ODY3MzExMzEwNzYsNDY5LjgzMDk0NjA3NjgyOTcsMTM2Ny40MjEzMzczNTQzNzUzLDkxMC42NjQzNjMyNjg4NjMsMTM0NS4zMzY5NjQxOTcyOTA2LDE0OTMuOTYyNTk5MTE3MTc3LDEzMjkuMDE1MjM3MjMyNjgyNywzMDI5LjQ2MTQ3Nzc0Njc0MSwxOTMuMTkzOTkzOTUwMzcxMzIsMi40MTg5NTUzMTQzNjU5MjYKKzIwLFN1biAxMyBGZWIgMTEsMTEyLjMzNDE0ODE0NTcwNTQ0LDEwMC4yOTc5OTMwNTMxNzA2LDU4LjM4MTU5NTY0OTY4OTY3LDEyMC42OTAwOTM0OTM4MjE3LDEyMS42NTQ0MDIwOTg2MjI5MSwxOTY2LjU5MTA5NjE4Mzk0ODEsMjEzNy4wOTI1MDY4Nzg0NzEsMTc1MS41NTE0MTk0MDc5OCwxNTIxLjM5OTE2NTE4MDQ2NTgsMTkwMi4xMzIwMzQwNjQ4Mzc5LDM4Ni4yNjcwNzg5ODYyMjMzLDIyNTguMDQ2MDQzNTQ0MjMyNCw0NDYuODgwMzI3NjMyODkwMiwxMTg2LjI5NTI2Mjc5MzE0NzUsMTA2MC4zMzE3Mzc0ODE4MzY2LDI0MzQuMDg0MzI5MjI4MTg2NiwxNzYzLjM5Nzk4Njc4NDI5NCw0OTUuOTMyOTEzMjcwNDc5NDUsMTQ0My4zODk5MTExMjY2MTg3LDk2MS4yNTczMDg1MjQ5MjcxLDE0MjAuMDc4NjE2Njk0MDE1NiwxNTc2Ljk2MTMwOTc3MzI0MjYsMTQwMi44NTAxMTg1MDU5ODk1LDMxOTcuNzY2NDkyMDY0ODkxMywyMDMuOTI3MDk1NTc4MTE3NTMsMi41NTMzNDI5OTczOTQ3MDUKKzIxLE1vbiAxNCBGZWIgMTEsMTE4LjI0NjUzMDg1NTc2NDMyLDEwNS41NzY4ODc1ODE0MTMzMiw2MS40NTQzNDE5Mzc0NjI4MSwxMjcuMDQyMjY3MTk5MDMxMjMsMTI4LjA1NzMyOTM5NTgyODI4LDIwNzAuMDk2OTI1NzcxNTEzMywyMjQ5LjU3MjE4NDY2MTU0MTUsMTg0My43MzkyNTgwOTEzMjEsMTYwMS40NzM2MDYxOTIzMjc1LDIwMDIuMjQ1MjQ3NTA5NjY3LDQwNi41OTcxMjg1NDc4MzAyNywyMzc2Ljg5MTc2MDYwMTI2ODcsNDcwLjQwMDU4MDA3NzcyMjE3LDEyNDguNzMyNDc5OTM5ODQ3NSwxMTE2LjEzOTIyOTEwNDgwMTQsMjU2Mi4xOTUzMTE4NjgwMTEyLDE4NTYuMjA5MzM1MjQ4ODE0Niw1MjIuMDM0OTA2NTY2MTA5NSwxNTE5LjM1ODU2MDg2NzQ3NCwxMDExLjg1MDMwNDM3Mzk2MTYsMTQ5NC44MjAzNDM5MzI0MzEsMTY1OS45NjAxMDM0MjgwNjA0LDE0NzYuNjg1MDczNjE0MjE0NiwzMzY2LjA3MTY3NDY4ODE0MDMsMjE0LjY2MDIwNzkzODk3MDczLDIuNjg3NzMwODE0ODExMjMzOAorMjIsVHVlIDE1IEZlYiAxMSwxMjQuMTU4OTE5NDc4MjA4ODcsMTEwLjg1NTc4NzM4ODU1MzIyLDY0LjUyNzA5MTI5Nzk4Mzc2LDEzMy4zOTQ0NDcyNTY0MTc1OCwxMzQuNDYwMjYzMDk1OTY0MTQsMjE3My42MDI4NTg4NjQ5NTk3LDIzNjIuMDUxOTc0OTI0MzQ2NywxOTM1LjkyNzE4ODk2MjU0NywxNjgxLjU0ODEyNzI3ODY3LDIxMDIuMzU4NTYxMDY3NzYsNDI2LjkyNzE5ODQzOTQ5NywyNDk1LjczNzU5NjUwNDA4MjQsNDkzLjkyMDg1NjA0MjgxODM0LDEzMTEuMTY5NzU5NTIzNzk2LDExNzEuOTQ2Nzc2NTM1Mjg1MiwyNjkwLjMwNjQyMjYxODg4MjYsMTk0OS4wMjA3NzY1MjQ3Mjk0LDU0OC4xMzY5MjU5NjM3NDU5LDE1OTUuMzI3Mjg2NTc3MDE2OCwxMDYyLjQ0MzM1MDgxNjAxNzUsMTU2OS41NjIxNDU5MTI2MTA1LDE3NDIuOTU4OTgwMDgxNzEzMiwxNTUwLjUyMDEwMjU1NzQzMTUsMzUzNC4zNzcwMjU2MTY2NTYsMjI1LjM5MzMzMTAzMjk0MTcsMi44MjIxMTg3NjY2MTU2NDc1CisyMyxXZWQgMTYgRmViIDExLDEzMC4wNzEzMTQwMTMwNDUsMTE2LjEzNDY5MjQ3NDU5NTU1LDY3LjU5OTg0MzczMTI1NTYsMTM5Ljc0NjYzMzY2NTk4NzIsMTQwLjg2MzIwMzE5OTAzNjksMjI3Ny4xMDg4OTU0NjQzOTA2LDI0NzQuNTMxODc3NjY2OTk3NCwyMDI4LjExNTIxMjAyMTc0OTgsMTc2MS42MjI3Mjg0Mzk1NzM0LDIyMDIuNDcxOTc0NzM5MjE2NCw0NDcuMjU3Mjg4NjYxMjQzNzYsMjYxNC41ODM1NTEyNTI3OTA2LDUxNy40NDExNTU1MjgyMDIyLDEzNzMuNjA3MTAxNTQ1MDU1LDEyMjcuNzU0Mzc5NzczMzQ0NSwyODE4LjQxNzY2MTQ4MDkyOSwyMDQxLjgzMjMxMDYxMjEzMTgsNTc0LjIzODk3MTQ2MzQxNDYsMTY3MS4yOTYwODgyNTUzMjM2LDExMTMuMDM2NDQ3ODUxMTQ0OSwxNjQ0LjMwNDAyMjYzNDYyOTcsMTgyNS45NTc5Mzk3MzQyODQsMTYyNC4zNTUyMDUzMzU3MTQxLDM3MDIuNjgyNTQ0ODUwNjA3LDIzNi4xMjY0NjQ4NjAwNDEwNywyLjk1NjUwNjg1MjgwODA4CisyNCxUaHUgMTcgRmViIDExLDEzNS45ODM3MTQ0NjAyNzg2LDEyMS40MTM2MDI4Mzk1NDU2LDcwLjY3MjU5OTIzNzI4MTQ1LDE0Ni4wOTg4MjY0Mjc3NDY0MiwxNDcuMjY2MTQ5NzA1MDUyOTUsMjM4MC42MTUwMzU1Njk5MTA2LDI1ODcuMDExODkyODg5NjA4LDIxMjAuMzAzMzI3MjY5MDIyLDE4NDEuNjk3NDA5Njc1MTE4LDIzMDIuNTg1NDg4NTI0MTM3LDQ2Ny41ODczOTkyMTMwOTA4NiwyNzMzLjQyOTYyNDg0NzUxMzQsNTQwLjk2MTQ3ODUzMzg5NzQsMTQzNi4wNDQ1MDYwMDM2ODcsMTI4My41NjIwMzg4MTkwMzQ4LDI5NDYuNTI5MDI4NDU0Mjc4LDIxMzQuNjQzOTM3NTExMTE0NSw2MDAuMzQxMDQzMDY1MTQxOSwxNzQ3LjI2NDk2NTkwMjQ3LDExNjMuNjI5NTk1NDc5Mzk0OCwxNzE5LjA0NTk3NDA5ODU2MjcsMTkwOC45NTY5ODIzODU4NTU4LDE2OTguMTkwMzgxOTQ5MTM2NywzODcwLjk4ODIzMjM5MDE2MSwyNDYuODU5NjA5NDIwMjc5NjQsMy4wOTA4OTUwNzMzODg2NjU1CisyNSxGcmkgMTggRmViIDExLDE0MS44OTYxMjA4MTk5MTU2LDEyNi42OTI1MTg0ODM0MDg2OCw3My43NDUzNTc4MTYwNjQzMSwxNTIuNDUxMDI1NTQxNzAxNiwxNTMuNjY5MTAyNjE0MDE4NzMsMjQ4NC4xMjEyNzkxODE2MjIsMjY5OS40OTIwMjA1OTIyOTEsMjIxMi40OTE1MzQ3MDQ0NTU3LDE5MjEuNzcyMTcwOTg1Mzg0NSwyNDAyLjY5OTEwMjQyMjYyMSw0ODcuOTE3NTMwMDk1MDU4NzQsMjg1Mi4yNzU4MTcyODgzNjk2LDU2NC40ODE4MjUwNTk5Mjc1LDE0OTguNDgxOTcyODk5NzU1MiwxMzM5LjM2OTc1MzY3MjQxMjMsMzA3NC42NDA1MjM1MzkwNTg0LDIyMjcuNDU1NjU3MjIxNzcwNyw2MjYuNDQzMTQwNzY4OTUzOSwxODIzLjIzMzkxOTUxODUzMTgsMTIxNC4yMjI3OTM3MDA4MTc2LDE3OTMuNzg4MDAwMzA0NDg1LDE5OTEuOTU2MTA4MDM2NTEyMiwxNzcyLjAyNTYzMjM5Nzc3Myw0MDM5LjI5NDA4ODIzNTQ4NzQsMjU3LjU5Mjc2NDcxMzY2ODIsMy4yMjUyODM0MjgzNTc1Mzg1CisyNixTYXQgMTkgRmViIDExLDE0Ny44MDg1MzMwOTE5NjE5NSwxMzEuOTcxNDM5NDA2MTg5OTcsNzYuODE4MTE5NDY3NjA3MjksMTU4LjgwMzIzMTAwNzg1OTA0LDE2MC4wNzIwNjE5MjU5NDA2LDI1ODcuNjI3NjI2Mjk5NjI5NCwyODExLjk3MjI2MDc3NTE1NiwyMzA0LjY3OTgzNDMyODE0MjUsMjAwMS44NDcwMTIzNzA0NTIsMjUwMi44MTI4MTY0MzQ3NjksNTA4LjI0NzY4MTMwNzE2NzYsMjk3MS4xMjIxMjg1NzU0NzczLDU4OC4wMDIxOTUxMDYzMTU2LDE1NjAuOTE5NTAyMjMzMzIxLDEzOTUuMTc3NTI0MzMzNTMyMywzMjAyLjc1MjE0NjczNTM5OCwyMzIwLjI2NzQ2OTc0NDE5Myw2NTIuNTQ1MjY0NTc0ODc2NiwxODk5LjIwMjk0OTEwMzU4NSwxMjY0LjgxNjA0MjUxNTQ2NCwxODY4LjUzMDEwMTI1MjQ3MDYsMjA3NC45NTUzMTY2ODYzMzU3LDE4NDUuODYwOTU2NjgxNjk2NSw0MjA3LjYwMDExMjM4Njc1MywyNjguMzI1OTMwNzQwMjE3NCwzLjM1OTY3MTkxNzcxNDgzNDQKKzI3LFN1biAyMCBGZWIgMTEsMTUzLjcyMDk1MTI3NjQyMzUzLDEzNy4yNTAzNjU2MDc4OTQ5LDc5Ljg5MDg4NDE5MTkxMzQ0LDE2NS4xNTU0NDI4MjYyMjUyLDE2Ni40NzUwMjc2NDA4MjQ5NSwyNjkxLjEzNDA3NjkyNDAzNTUsMjkyNC40NTI2MTM0MzgzMTg2LDIzOTYuODY4MjI2MTQwMTc0NiwyMDgxLjkyMTkzMzgzMDQwMSwyNjAyLjkyNjYzMDU2MDY4MjUsNTI4LjU3Nzg1Mjg0OTQzNzksMzA4OS45Njg1NTg3MDg5NTU3LDYxMS41MjI1ODg2NzMwODU3LDE2MjMuMzU3MDk0MDA0NDQ3NiwxNDUwLjk4NTM1MDgwMjQ1MTIsMzMzMC44NjM4OTgwNDM0MjUsMjQxMy4wNzkzNzUwNzg0NzQ2LDY3OC42NDc0MTQ0ODI5MzYzLDE5NzUuMTcyMDU0NjU3NzA2NCwxMzE1LjQwOTM0MTkyMzM4NDUsMTk0My4yNzIyNzY5NDI1OTQ1LDIxNTcuOTU0NjA4MzM1NDEsMTkxOS42OTYzNTQ4MDA5ODEyLDQzNzUuOTA2MzA0ODQ0MTI4LDI3OS4wNTkxMDc0OTk5MzgsMy40OTQwNjA1NDE0NjA2ODcKKzI4LE1vbiAyMSBGZWIgMTEsMTU5LjYzMzM3NTM3MzMwNjI1LDE0Mi41MjkyOTcwODg1Mjg2LDgyLjk2MzY1MTk4ODk4NTg3LDE3MS41MDc2NjA5OTY4MDYyLDE3Mi44Nzc5OTk3NTg2NzgyNywyNzk0LjY0MDYzMTA1NDk0MzcsMzAzNi45MzMwNzg1ODE4ODg0LDI0ODkuMDU2NzEwMTQwNjQ0NiwyMTYxLjk5NjkzNTM2NTMxMDUsMjcwMy4wNDA1NDQ4MDA0NTg1LDU0OC45MDgwNDQ3MjE4ODk4LDMyMDguODE1MTA3Njg4OTIzLDYzNS4wNDMwMDU3NjAyNjA4LDE2ODUuNzk0NzQ4MjEzMTk3LDE1MDYuNzkzMjMzMDc5MjI0MSwzNDU4Ljk3NTc3NzQ2MzI2NywyNTA1Ljg5MTM3MzIyNDcwNjUsNzA0Ljc0OTU5MDQ5MzE1ODcsMjA1MS4xNDEyMzYxODA5NzA3LDEzNjYuMDAyNjkxOTI0NjI5NSwyMDE4LjAxNDUyNzM3NDkzMTMsMjI0MC45NTM5ODI5ODM4MTcsMTk5My41MzE4MjY3NTU3MDA0LDQ1NDQuMjEyNjY1NjA3Nzc4LDI4OS43OTIyOTQ5OTI4NDA2LDMuNjI4NDQ5Mjk5NTk1MjI5OAorMjksVHVlIDIyIEZlYiAxMSwxNjUuNTQ1ODA1MzgyNjE1OTUsMTQ3LjgwODIzMzg0ODA5NjUsODYuMDM2NDIyODU4ODI3NjMsMTc3Ljg1OTg4NTUxOTYwODY0LDE3OS4yODA5NzgyNzk1MDY5LDI4OTguMTQ3Mjg4NjkyNDU3LDMxNDkuNDEzNjU2MjA1OTgwMywyNTgxLjI0NTI4NjMyOTY0NSwyMjQyLjA3MjAxNjk3NTI2MjYsMjgwMy4xNTQ1NTkxNTQxOTg1LDU2OS4yMzgyNTY5MjQ1NDQsMzMyNy42NjE3NzU1MTU0OTksNjU4LjU2MzQ0NjM2Nzg2NSwxNzQ4LjIzMjQ2NDg1OTYzMiwxNTYyLjYwMTE3MTE2MzkwNzMsMzU4Ny4wODc3ODQ5OTUwNTMsMjU5OC43MDM0NjQxODI5ODQ2LDczMC44NTE3OTI2MDU1NzA0LDIxMjcuMTEwNDkzNjczNDU1LDE0MTYuNTk2MDkyNTE5MjQ5NiwyMDkyLjc1Njg1MjU0OTU1NTMsMjMyMy45NTM0NDA2MzE2Mzk4LDIwNjcuMzY3MzcyNTQ1OTI5NCw0NzEyLjUxOTE5NDY3Nzg3NCwzMDAuNTI1NDkzMjE4OTM2MDUsMy43NjI4MzgxOTIxMTg1OTg3CiszMCxXZWQgMjMgRmViIDExLDE3MS40NTgyNDEzMDQzNTg2NCwxNTMuMDg3MTc1ODg2NjAzNzUsODkuMTA5MTk2ODAxNDQxOCwxODQuMjEyMTE2Mzk0NjM4NzcsMTg1LjY4Mzk2MzIwMzMxNzMsMzAwMS42NTQwNDk4MzY2OCwzMjYxLjg5NDM0NjMxMDcwNTcsMjY3My40MzM5NTQ3MDcyNjc3LDIzMjIuMTQ3MTc4NjYwMzM2LDI5MDMuMjY4NjczNjIyMDAyLDU4OS41Njg0ODk0NTc0MjAyLDM0NDYuNTA4NTYyMTg4ODAyNCw2ODIuMDgzOTEwNDk1OTIxNSwxODEwLjY3MDI0Mzk0MzgxNDcsMTYxOC40MDkxNjUwNTY1NTY1LDM3MTUuMTk5OTIwNjM4OTA5LDI2OTEuNTE1NjQ3OTUzNCw3NTYuOTU0MDIwODIwMTk3MSwyMjAzLjA3OTgyNzEzNTIzNCwxNDY3LjE4OTU0MzcwNzI5NTYsMjE2Ny40OTkyNTI0NjY1NDI3LDI0MDYuOTUyOTgxMjc4OTYxNSwyMTQxLjIwMjk5MjE3MTc0MDMsNDg4MC44MjU4OTIwNTQ1ODIsMzExLjI1ODcwMjE3ODIzNTIsMy44OTcyMjcyMTkwMzA5MjcKKzMxLFRodSAyNCBGZWIgMTEsMTc3LjM3MDY4MzEzODU0MDI0LDE1OC4zNjYxMjMyMDQwNTU3LDkyLjE4MTk3MzgxNjgzMTQ3LDE5MC41NjQzNTM2MjE5MDI5LDE5Mi4wODY5NTQ1MzAxMTU3MiwzMTA1LjE2MDkxNDQ4NzcxNTcsMzM3NC4zNzUxNDg4OTYxNzgsMjc2NS42MjI3MTUyNzM2MDUsMjQwMi4yMjI0MjA0MjA2MTEzLDMwMDMuMzgyODg4MjAzOTcyLDYwOS44OTg3NDIzMjA1MzkzLDM1NjUuMzU1NDY3NzA4OTUyMyw3MDUuNjA0Mzk4MTQ0NDU0LDE4NzMuMTA4MDg1NDY1ODA4LDE2NzQuMjE3MjE0NzU3MjI3MywzODQzLjMxMjE4NDM5NDk2NTIsMjc4NC4zMjc5MjQ1MzYwNDUsNzgzLjA1NjI3NTEzNzA2NTMsMjI3OS4wNDkyMzY1NjYzODYsMTUxNy43ODMwNDU0ODg4MTg1LDIyNDIuMjQxNzI3MTI1OTY3LDI0ODkuOTUyNjA0OTI1ODY1LDIyMTUuMDM4Njg1NjMzMjA4LDUwNDkuMTMyNzU3NzM4MDcyNSwzMjEuOTkxOTIxODcwNzQ4Nyw0LjAzMTYxNjM4MDMzMjM0OQorMzIsRnJpIDI1IEZlYiAxMSwxODMuMjgzMTMwODg1MTY2NjMsMTYzLjY0NTA3NTgwMDQ1NzYsOTUuMjU0NzUzOTA0OTk5NjYsMTk2LjkxNjU5NzIwMTQwNzUsMTk4LjQ4OTk1MjI1OTkwODY4LDMyMDguNjY3ODgyNjQ1NjY4NywzNDg2Ljg1NjA2Mzk2MjUwOTMsMjg1Ny44MTE1NjgwMjg3NDg4LDI0ODIuMjk3NzQyMjU2MTY4LDMxMDMuNDk3MjAyOTAwMjA1Niw2MzAuMjI5MDE1NTEzOTIxMiwzNjg0LjIwMjQ5MjA3NjA2NjQsNzI5LjEyNDkwOTMxMzQ4NTcsMTkzNS41NDU5ODk0MjU2NzM3LDE3MzAuMDI1MzIwMjY1OTc1NiwzOTcxLjQyNDU3NjI2MzM0OSwyODc3LjE0MDI5MzkzMTAxMzMsODA5LjE1ODU1NTU1NjIwMDcsMjM1NS4wMTg3MjE5NjY5ODQyLDE1NjguMzc2NTk3ODYzODY4LDIzMTYuOTg0Mjc2NTI3OTAzLDI1NzIuOTUyMzExNTcyNDM0NiwyMjg4Ljg3NDQ1MjkzMDQwNiw1MjE3LjQzOTc5MTcyODUxMywzMzIuNzI1MTUyMjk2NDg3Miw0LjE2NjAwNTY3NjAyMwpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9EZW1vZ3JhcGhpY1NFSVJEaXNlYXNlX1JLX1JlZmVyZW5jZS9EZW1vZ3JhcGhpY01vZGVsL21lbi9Db3VudF8yLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvRGVtb2dyYXBoaWNTRUlSRGlzZWFzZV9SS19SZWZlcmVuY2UvRGVtb2dyYXBoaWNNb2RlbC9tZW4vQ291bnRfMi5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTY2YzYzMAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvRGVtb2dyYXBoaWNTRUlSRGlzZWFzZV9SS19SZWZlcmVuY2UvRGVtb2dyYXBoaWNNb2RlbC9tZW4vQ291bnRfMi5jc3YKQEAgLTAsMCArMSwzMyBAQAoraXRlcmF0aW9uLHRpbWUsRUctRlJHLUcyMTAwMDEsRUctRlJHLUcyMTAwMDIsRUctRlJHLUcyMTAwMDMsRUctRlJHLUcyMTAwMDQsRUctRlJHLUcyMTAwMDUsRUctTE9FLUcyNDAwMDEsRUctTE9FLUcyNDAwMDIsRUctTE9FLUcyNDAwMDMsRUctTE9FLUcyNDAwMDQsRUctTE9FLUcyNDAwMDUsRUctTE9FLUcyNDAwMDYsRUctTE9FLUcyNDAwMDcsRUctTE9FLUcyNDAwMDgsRUctTE9FLUcyNDAwMDksRUctVVBFLUcyOTAwMDEsRUctVVBFLUcyOTAwMDIsRUctVVBFLUcyOTAwMDMsRUctVVBFLUcyOTAwMDQsRUctVVBFLUcyOTAwMDUsRUctVVBFLUcyOTAwMDYsRUctVVBFLUcyOTAwMDcsRUctVVBFLUcyOTAwMDgsRUctVVJHLUczMDAwMDEsRUctVVJHLUczMDAwMDIsRUctVVJHLUczMDAwMDMsRUctVVJHLUczMDAwMDQKKzEsVHVlIDI1IEphbiAxMSwxNDc4MDYuNjg1NDkyOTk2NTYsMTMxOTY5Ljc4OTc3MDA3MDg3LDc2ODE3LjE1OTI0NTExNDc3LDE1ODgwMS4yNDU5NzU3NDI1MiwxNjAwNzAuMDYxMDMzNTAzNSwyNTg3NTk1LjI4MTA4OTA2OTMsMjgxMTkzNy4xMTEyNjgzNDk1LDIzMDQ2NTEuMDI1OTUwMjQ5OCwyMDAxODIxLjk4OTM4NzA1NjgsMjUwMjc4MS41MzE0MDQ5MTE1LDUwODI0MS4zMjgyMzc2MjIxNiwyOTcxMDg0Ljk4OTcwMzYxNDcsNTg3OTk0Ljg0NTEwOTUwMTYsMTU2MDg5OS45OTA4MjA4NDAyLDEzOTUxNjAuMDg0Njg3MTQwOCwzMjAyNzEyLjExMjUwMDM3NCwyMzIwMjM4LjQ2NjUyMTY2OSw2NTI1MzcuMTA3NzkzMDU1OSwxODk5MTc5LjIwOTE2NTYzNjUsMTI2NDgwMC4yMzIzODA4MDYsMTg2ODUwNi43NDQ3MjM1MjE0LDIwNzQ5MjkuMzc5ODUyOTQ2NCwxODQ1ODM3Ljg4MzUxNTg3MzIsNDIwNzU0Ny41MTc2MDQ0OTQ1LDI2ODMyMi41NzY2ODAwNTgyLDMzNTkuNjI5OTIxOTkwODQ5NworMixXZWQgMjYgSmFuIDExLDE0NzgwNi44MzMyOTk3NTU5MywxMzE5NjkuOTIxNzM5OTI2NSw3NjgxNy4yMzYwNjIzMTI0NCwxNTg4MDEuNDA0Nzc3MDY3OSwxNjAwNzAuMjIxMTAzNjQ0NjQsMjU4NzU5Ny44Njg2ODU2NDYsMjgxMTkzOS45MjMyMDY4Njc3LDIzMDQ2NTMuMzMwNjAyNDI3NSwyMDAxODIzLjk5MTIxMDA0NzksMjUwMjc4NC4wMzQxODc2OTQsNTA4MjQxLjgzNjQ3OTIwNDYsMjk3MTA4Ny45NjA3OTAwODksNTg3OTk1LjQzMzEwNDY0MDMsMTU2MDkwMS41NTE3MjE2MTA2LDEzOTUxNjEuNDc5ODQ3OTI0LDMyMDI3MTUuMzE1MjE0MDg2MywyMzIwMjQwLjc4Njc2MTI5MzcsNjUyNTM3Ljc2MDMzMDQ5MDEsMTg5OTE4MS4xMDgzNDU3OTU0LDEyNjQ4MDEuNDk3MTgxNjcxMiwxODY4NTA4LjYxMzIzMTIwMSwyMDc0OTMxLjQ1NDc4MzM2MzUsMTg0NTgzOS43MjkzNTQ2ODAzLDQyMDc1NTEuNzI1MTU0MTE2LDI2ODMyMi44NDUwMDI3Njg3NCwzMzU5LjYzMzI4MTYyMjQ0OTQKKzMsVGh1IDI3IEphbiAxMSwxNDc4MDYuOTgxMTA2NjYzMSwxMzE5NzAuMDUzNzA5OTE0MjcsNzY4MTcuMzEyODc5NTg2OSwxNTg4MDEuNTYzNTc4NTUyMiwxNjAwNzAuMzgxMTczOTQ1OCwyNTg3NjAwLjQ1NjI4NDgwOSwyODExOTQyLjczNTE0ODE5NiwyMzA0NjU1LjYzNTI1NjkwOTgsMjAwMTgyNS45OTMwMzUwNDA4LDI1MDI3ODYuNTM2OTcyOTgxLDUwODI0Mi4zNDQ3MjEyOTUyMywyOTcxMDkwLjkzMTg3OTUzNjIsNTg3OTk2LjAyMTEwMDM2NzMsMTU2MDkwMy4xMTI2MjM5NDI4LDEzOTUxNjIuODc1MDEwMTAxNiwzMjAyNzE4LjUxNzkzMTAwNCwyMzIwMjQzLjEwNzAwMzI0LDY1MjUzOC40MTI4Njg1NzY4LDE4OTkxODMuMDA3NTI3ODUzMSwxMjY0ODAyLjc2MTk4MzgwMDQsMTg2ODUxMC40ODE3NDA3NDgsMjA3NDkzMy41Mjk3MTU4NTU0LDE4NDU4NDEuNTc1MTk1MzMxOCw0MjA3NTU1LjkzMjcwNzk0NCwyNjgzMjMuMTEzMzI1NzQ3OSwzMzU5LjYzNjY0MTI1NzQxMDIKKzQsRnJpIDI4IEphbiAxMSwxNDc4MDcuMTI4OTEzNzE4MTMsMTMxOTcwLjE4NTY4MDAzMzkzLDc2ODE3LjM4OTY5NjkzODE5LDE1ODgwMS43MjIzODAxOTUxLDE2MDA3MC41NDEyNDQ0MDcsMjU4NzYwMy4wNDM4ODY1NTk1LDI4MTE5NDUuNTQ3MDkyMzM3NiwyMzA0NjU3LjkzOTkxMzY5NzUsMjAwMTgyNy45OTQ4NjIwMzQyLDI1MDI3ODkuMDM5NzYwNzY5Myw1MDgyNDIuODUyOTYzODk0MSwyOTcxMDkzLjkwMjk3MTk1Myw1ODc5OTYuNjA5MDk2NjgyNiwxNTYwOTA0LjY3MzUyNzgzNTYsMTM5NTE2NC4yNzAxNzM2NzQyLDMyMDI3MjEuNzIwNjUxMTIzLDIzMjAyNDUuNDI3MjQ3NTA3LDY1MjUzOS4wNjU0MDczMTU5LDE4OTkxODQuOTA2NzExODEwNSwxMjY0ODA0LjAyNjc4NzE5NTEsMTg2ODUxMi4zNTAyNTIxNjQsMjA3NDkzNS42MDQ2NTA0MjI1LDE4NDU4NDMuNDIxMDM3ODMwNCw0MjA3NTYwLjE0MDI2NTk4MzUsMjY4MzIzLjM4MTY0ODk5NTMsMzM1OS42NDAwMDA4OTU3MzAzCis1LFNhdCAyOSBKYW4gMTEsMTQ3ODA3LjI3NjcyMDkyMDkzLDEzMTk3MC4zMTc2NTAyODU1OCw3NjgxNy40NjY1MTQzNjYzMywxNTg4MDEuODgxMTgxOTk2OCwxNjAwNzAuNzAxMzE1MDI4MjQsMjU4NzYwNS42MzE0OTA4OTgsMjgxMTk0OC4zNTkwMzkyOTEsMjMwNDY2MC4yNDQ1NzI3ODksMjAwMTgyOS45OTY2OTEwMzA1LDI1MDI3OTEuNTQyNTUxMDYsNTA4MjQzLjM2MTIwNzAwMTMsMjk3MTA5Ni44NzQwNjczNDIsNTg3OTk3LjE5NzA5MzU4NTcsMTU2MDkwNi4yMzQ0MzMyODk0LDEzOTUxNjUuNjY1MzM4NjQyLDMyMDI3MjQuOTIzMzc0NDQ1LDIzMjAyNDcuNzQ3NDk0MDk0LDY1MjUzOS43MTc5NDY3MDc2LDE4OTkxODYuODA1ODk3NjY2OCwxMjY0ODA1LjI5MTU5MTg1NDUsMTg2ODUxNC4yMTg3NjU0NDksMjA3NDkzNy42Nzk1ODcwNjQ4LDE4NDU4NDUuMjY2ODgyMTc0Miw0MjA3NTY0LjM0NzgyODIyNywyNjgzMjMuNjQ5OTcyNTExMTYsMzM1OS42NDMzNjA1Mzc0MTEKKzYsU3VuIDMwIEphbiAxMSwxNDc4MDcuNDI0NTI4MjcxNiwxMzE5NzAuNDQ5NjIwNjY5Miw3NjgxNy41NDMzMzE4NzEyNywxNTg4MDIuMDM5OTgzOTU3MzcsMTYwMDcwLjg2MTM4NTgwOTU1LDI1ODc2MDguMjE5MDk3ODIzNCwyODExOTUxLjE3MDk4OTA1NiwyMzA0NjYyLjU0OTIzNDE4NSwyMDAxODMxLjk5ODUyMjAyODMsMjUwMjc5NC4wNDUzNDM4NTQ1LDUwODI0My44Njk0NTA2MTY2NSwyOTcxMDk5Ljg0NTE2NTcwMTYsNTg3OTk3Ljc4NTA5MTA3NjcsMTU2MDkwNy43OTUzNDAzMDQzLDEzOTUxNjcuMDYwNTA1MDA0OCwzMjAyNzI4LjEyNjEwMDk3LDIzMjAyNTAuMDY3NzQzMDAyLDY1MjU0MC4zNzA0ODY3NTE4LDE4OTkxODguNzA1MDg1NDIyNiwxMjY0ODA2LjU1NjM5Nzc3OSwxODY4NTE2LjA4NzI4MDYwMiwyMDc0OTM5Ljc1NDUyNTc4MjMsMTg0NTg0Ny4xMTI3MjgzNjQzLDQyMDc1NjguNTU1Mzk0Njc5LDI2ODMyMy45MTgyOTYyOTU0LDMzNTkuNjQ2NzIwMTgyNDUxCis3LE1vbiAzMSBKYW4gMTEsMTQ3ODA3LjU3MjMzNTc3MDA2LDEzMTk3MC41ODE1OTExODQ4LDc2ODE3LjYyMDE0OTQ1MywxNTg4MDIuMTk4Nzg2MDc2NywxNjAwNzEuMDIxNDU2NzUwOTUsMjU4NzYxMC44MDY3MDczMzY2LDI4MTE5NTMuOTgyOTQxNjMzLDIzMDQ2NjQuODUzODk3ODg3LDIwMDE4MzQuMDAwMzU1MDI3OCwyNTAyNzk2LjU0ODEzOTE1Miw1MDgyNDQuMzc3Njk0NzQwMiwyOTcxMTAyLjgxNjI2NzAzMiw1ODc5OTguMzczMDg5MTU1OSwxNTYwOTA5LjM1NjI0ODg4LDEzOTUxNjguNDU1NjcyNzYyNiwzMjAyNzMxLjMyODgzMDY5NzYsMjMyMDI1Mi4zODc5OTQyMyw2NTI1NDEuMDIzMDI3NDQ4NiwxODk5MTkwLjYwNDI3NTA3NywxMjY0ODA3LjgyMTIwNDk2OCwxODY4NTE3Ljk1NTc5NzYyMzYsMjA3NDk0MS44Mjk0NjY1NzQxLDE4NDU4NDguOTU4NTc2NDAwMyw0MjA3NTcyLjc2Mjk2NTMzOCwyNjgzMjQuMTg2NjIwMzQ3ODQsMzM1OS42NTAwNzk4MzA4NTE2Cis4LFR1ZSAxIEZlYiAxMSwxNDc4MDcuNzIwMTQzNDE2MywxMzE5NzAuNzEzNTYxODMyNCw3NjgxNy42OTY5NjcxMTE1NywxNTg4MDIuMzU3NTg4MzU0ODUsMTYwMDcxLjE4MTUyNzg1MjQ2LDI1ODc2MTMuMzk0MzE5NDM2NSwyODExOTU2Ljc5NDg5NzAyMTMsMjMwNDY2Ny4xNTg1NjM4OTMsMjAwMTgzNi4wMDIxOTAwMjksMjUwMjc5OS4wNTA5MzY5NTIsNTA4MjQ0Ljg4NTkzOTM3MTk1LDI5NzExMDUuNzg3MzcxMzMzLDU4Nzk5OC45NjEwODc4MjI3LDE1NjA5MTAuOTE3MTU5MDE2NywxMzk1MTY5Ljg1MDg0MTkxNjIsMzIwMjczNC41MzE1NjM2MjcsMjMyMDI1NC43MDgyNDc3NzcsNjUyNTQxLjY3NTU2ODc5NzksMTg5OTE5Mi41MDM0NjY2MzA2LDEyNjQ4MDkuMDg2MDEzNDIxNiwxODY4NTE5LjgyNDMxNjUxNDQsMjA3NDk0My45MDQ0MDk0NDEyLDE4NDU4NTAuODA0NDI2MjgxNyw0MjA3NTc2Ljk3MDU0MDIwNSwyNjgzMjQuNDU0OTQ0NjY4NzUsMzM1OS42NTM0Mzk0ODI2MTE3Cis5LFdlZCAyIEZlYiAxMSwxNDc4MDcuODY3OTUxMjEwMzMsMTMxOTcwLjg0NTUzMjYxMTk3LDc2ODE3Ljc3Mzc4NDg0Njk0LDE1ODgwMi41MTYzOTA3OTE4LDE2MDA3MS4zNDE1OTkxMTQsMjU4NzYxNS45ODE5MzQxMjQ2LDI4MTE5NTkuNjA2ODU1MjIxNiwyMzA0NjY5LjQ2MzIzMjIwMywyMDAxODM4LjAwNDAyNzAzMjMsMjUwMjgwMS41NTM3MzcyNTQsNTA4MjQ1LjM5NDE4NDUxMjEsMjk3MTEwOC43NTg0Nzg2MDYsNTg3OTk5LjU0OTA4NzA3NzcsMTU2MDkxMi40NzgwNzA3MTQ1LDEzOTUxNzEuMjQ2MDEyNDY1LDMyMDI3MzcuNzM0Mjk5NzYsMjMyMDI1Ny4wMjg1MDM2NDU3LDY1MjU0Mi4zMjgxMTA3OTk1LDE4OTkxOTQuNDAyNjYwMDg0LDEyNjQ4MTAuMzUwODIzMTQsMTg2ODUyMS42OTI4MzcyNzMsMjA3NDk0NS45NzkzNTQzODMsMTg0NTg1Mi42NTAyNzgwMDkyLDQyMDc1ODEuMTc4MTE5Mjc4NSwyNjgzMjQuNzIzMjY5MjU3OSwzMzU5LjY1Njc5OTEzNzczMQorMTAsVGh1IDMgRmViIDExLDE0NzgwOC4wMTU3NTkxNTIxNiwxMzE5NzAuOTc3NTAzNTIzNSw3NjgxNy44NTA2MDI2NTkxNiwxNTg4MDIuNjc1MTkzMzg3NTUsMTYwMDcxLjUwMTY3MDUzNTYyLDI1ODc2MTguNTY5NTUxNDAwNCwyODExOTYyLjQxODgxNjIzNDUsMjMwNDY3MS43Njc5MDI4MTgsMjAwMTg0MC4wMDU4NjYwMzcyLDI1MDI4MDQuMDU2NTQwMDYsNTA4MjQ1LjkwMjQzMDE2MDQsMjk3MTExMS43Mjk1ODg4NSw1ODgwMDAuMTM3MDg2OTIwOSwxNTYwOTE0LjAzODk4Mzk3MzIsMTM5NTE3Mi42NDExODQ0MDg3LDMyMDI3NDAuOTM3MDM5MDk2NCwyMzIwMjU5LjM0ODc2MTgzNDcsNjUyNTQyLjk4MDY1MzQ1NCwxODk5MTk2LjMwMTg1NTQzNiwxMjY0ODExLjYxNTYzNDEyMywxODY4NTIzLjU2MTM1OTkwMDMsMjA3NDk0OC4wNTQzMDEzOTk1LDE4NDU4NTQuNDk2MTMxNTgyNCw0MjA3NTg1LjM4NTcwMjU2MiwyNjgzMjQuOTkxNTk0MTE1NCwzMzU5LjY2MDE1ODc5NjIxMDUKKzExLEZyaSA0IEZlYiAxMSwxNDc4MDguMTYzNTY3MjQxOCwxMzE5NzEuMTA5NDc0NTY3MDMsNzY4MTcuOTI3NDIwNTQ4MTgsMTU4ODAyLjgzMzk5NjE0MjE3LDE2MDA3MS42NjE3NDIxMTczLDI1ODc2MjEuMTU3MTcxMjY0MywyODExOTY1LjIzMDc4MDA1OTUsMjMwNDY3NC4wNzI1NzU3MzgsMjAwMTg0Mi4wMDc3MDcwNDMzLDI1MDI4MDYuNTU5MzQ1MzY4Myw1MDgyNDYuNDEwNjc2MzE2OTQsMjk3MTExNC43MDA3MDIwNjUsNTg4MDAwLjcyNTA4NzM1MTksMTU2MDkxNS41OTk4OTg3OTI2LDEzOTUxNzQuMDM2MzU3NzQ3NiwzMjAyNzQ0LjEzOTc4MTYzNSwyMzIwMjYxLjY2OTAyMjM0MzYsNjUyNTQzLjYzMzE5Njc2MDcsMTg5OTE5OC4yMDEwNTI2ODc0LDEyNjQ4MTIuODgwNDQ2MzcxNCwxODY4NTI1LjQyOTg4NDM5NTYsMjA3NDk1MC4xMjkyNTA0OTEzLDE4NDU4NTYuMzQxOTg3MDAxNyw0MjA3NTg5LjU5MzI5MDA1MSwyNjgzMjUuMjU5OTE5MjQxMSwzMzU5LjY2MzUxODQ1ODA0ODcKKzEyLFNhdCA1IEZlYiAxMSwxNDc4MDguMzExMzc1NDc5MjcsMTMxOTcxLjI0MTQ0NTc0MjUsNzY4MTguMDA0MjM4NTE0MDEsMTU4ODAyLjk5Mjc5OTA1NTYsMTYwMDcxLjgyMTgxMzg1OTEzLDI1ODc2MjMuNzQ0NzkzNzE2LDI4MTE5NjguMDQyNzQ2Njk2LDIzMDQ2NzYuMzc3MjUwOTY0LDIwMDE4NDQuMDA5NTUwMDUyMiwyNTAyODA5LjA2MjE1MzE3OSw1MDgyNDYuOTE4OTIyOTgxNiwyOTcxMTE3LjY3MTgxODI1MSw1ODgwMDEuMzEzMDg4MzcxMSwxNTYwOTE3LjE2MDgxNTE3MywxMzk1MTc1LjQzMTUzMjQ4MTUsMzIwMjc0Ny4zNDI1MjczNzY1LDIzMjAyNjMuOTg5Mjg1MTc0LDY1MjU0NC4yODU3NDA3MjAxLDE4OTkyMDAuMTAwMjUxODM4LDEyNjQ4MTQuMTQ1MjU5ODg0LDE4Njg1MjcuMjk4NDEwNzU5OCwyMDc0OTUyLjIwNDIwMTY1OCwxODQ1ODU4LjE4Nzg0NDI2NjksNDIwNzU5My44MDA4ODE3NDYsMjY4MzI1LjUyODI0NDYzNTIsMzM1OS42NjY4NzgxMjMyNDYKKzEzLFN1biA2IEZlYiAxMSwxNDc4MDguNDU5MTgzODY0NTYsMTMxOTcxLjM3MzQxNzA0OTk0LDc2ODE4LjA4MTA1NjU1NjY0LDE1ODgwMy4xNTE2MDIxMjc4MiwxNjAwNzEuOTgxODg1NzYwOTQsMjU4NzYyNi4zMzI0MTg3NTQsMjgxMTk3MC44NTQ3MTYxNDQ1LDIzMDQ2NzguNjgxOTI4NDkzNSwyMDAxODQ2LjAxMTM5NTA2MjYsMjUwMjgxMS41NjQ5NjM0OTMsNTA4MjQ3LjQyNzE3MDE1NDcsMjk3MTEyMC42NDI5Mzc0MDg4LDU4ODAwMS45MDEwODk5NzgsMTU2MDkxOC43MjE3MzMxMTQ0LDEzOTUxNzYuODI2NzA4NjEwOSwzMjAyNzUwLjU0NTI3NjMyLDIzMjAyNjYuMzA5NTUwMzIzLDY1MjU0NC45MzgyODUzMzIsMTg5OTIwMS45OTk0NTI4ODgzLDEyNjQ4MTUuNDEwMDc0NjYxNywxODY4NTI5LjE2NjkzODk5MjcsMjA3NDk1NC4yNzkxNTQ4OTk1LDE4NDU4NjAuMDMzNzAzMzc3Nyw0MjA3NTk4LjAwODQ3NzY1MTUsMjY4MzI1Ljc5NjU3MDI5NzcsMzM1OS42NzAyMzc3OTE4MDM2CisxNCxNb24gNyBGZWIgMTEsMTQ3ODA4LjYwNjk5MjM5NzY2LDEzMTk3MS41MDUzODg0ODkzNyw3NjgxOC4xNTc4NzQ2NzYxLDE1ODgwMy4zMTA0MDUzNTg4MiwxNjAwNzIuMTQxOTU3ODIyODcsMjU4NzYyOC45MjAwNDYzODA3LDI4MTE5NzMuNjY2Njg4NDA1NCwyMzA0NjgwLjk4NjYwODMyOCwyMDAxODQ4LjAxMzI0MjA3NDUsMjUwMjgxNC4wNjc3NzYzMDkzLDUwODI0Ny45MzU0MTc4MzU5LDI5NzExMjMuNjE0MDU5NTM3Niw1ODgwMDIuNDg5MDkyMTczMiwxNTYwOTIwLjI4MjY1MjYxNjUsMTM5NTE3OC4yMjE4ODYxMzUyLDMyMDI3NTMuNzQ4MDI4NDY2LDIzMjAyNjguNjI5ODE3NzkyLDY1MjU0NS41OTA4MzA1OTY1LDE4OTkyMDMuODk4NjU1ODM3NCwxMjY0ODE2LjY3NDg5MDcwNDIsMTg2ODUzMS4wMzU0NjkwOTM4LDIwNzQ5NTYuMzU0MTEwMjE2MywxODQ1ODYxLjg3OTU2NDMzNDQsNDIwNzYwMi4yMTYwNzc3NjMsMjY4MzI2LjA2NDg5NjIyODQsMzM1OS42NzM1OTc0NjM3MjE4CisxNSxUdWUgOCBGZWIgMTEsMTQ3ODA4Ljc1NDgwMTA3ODUyLDEzMTk3MS42MzczNjAwNjA4LDc2ODE4LjIzNDY5Mjg3MjM3LDE1ODgwMy40NjkyMDg3NDg2LDE2MDA3Mi4zMDIwMzAwNDQ4LDI1ODc2MzEuNTA3Njc2NTk0NCwyODExOTc2LjQ3ODY2MzQ3ODUsMjMwNDY4My4yOTEyOTA0NjcsMjAwMTg1MC4wMTUwOTEwODg2LDI1MDI4MTYuNTcwNTkxNjI4Niw1MDgyNDguNDQzNjY2MDI1MzYsMjk3MTEyNi41ODUxODQ2MzgsNTg4MDAzLjA3NzA5NDk1NjIsMTU2MDkyMS44NDM1NzM2Nzk3LDEzOTUxNzkuNjE3MDY1MDU0NCwzMjAyNzU2Ljk1MDc4MzgxNTcsMjMyMDI3MC45NTAwODc1ODI3LDY1MjU0Ni4yNDMzNzY1MTM2LDE4OTkyMDUuNzk3ODYwNjg1NywxMjY0ODE3LjkzOTcwODAxMTIsMTg2ODUzMi45MDQwMDEwNjM3LDIwNzQ5NTguNDI5MDY3NjA3NywxODQ1ODYzLjcyNTQyNzEzNjgsNDIwNzYwNi40MjM2ODIwODE1LDI2ODMyNi4zMzMyMjI0Mjc0LDMzNTkuNjc2OTU3MTM4OTk5NgorMTYsV2VkIDkgRmViIDExLDE0NzgwOC45MDI2MDk5MDcyNCwxMzE5NzEuNzY5MzMxNzY0MTQsNzY4MTguMzExNTExMTQ1NDUsMTU4ODAzLjYyODAxMjI5NzI0LDE2MDA3Mi40NjIxMDI0MjY4NiwyNTg3NjM0LjA5NTMwOTM5NTMsMjgxMTk3OS4yOTA2NDEzNjM3LDIzMDQ2ODUuNTk1OTc0OTEwNSwyMDAxODUyLjAxNjk0MjEwNDgsMjUwMjgxOS4wNzM0MDk0NTEsNTA4MjQ4Ljk1MTkxNDcyMzE1LDI5NzExMjkuNTU2MzEyNzA4Niw1ODgwMDMuNjY1MDk4MzI3MiwxNTYwOTIzLjQwNDQ5NjMwNDIsMTM5NTE4MS4wMTIyNDUzNjkxLDMyMDI3NjAuMTUzNTQyMzY4LDIzMjAyNzMuMjcwMzU5NjkyLDY1MjU0Ni44OTU5MjMwODMzLDE4OTkyMDcuNjk3MDY3NDMzLDEyNjQ4MTkuMjA0NTI2NTgzMiwxODY4NTM0Ljc3MjUzNDkwMTcsMjA3NDk2MC41MDQwMjcwNzQ3LDE4NDU4NjUuNTcxMjkxNzg1Nyw0MjA3NjEwLjYzMTI5MDYwOSwyNjgzMjYuNjAxNTQ4ODk0ODMsMzM1OS42ODAzMTY4MTc2MzYKKzE3LFRodSAxMCBGZWIgMTEsMTQ3ODA5LjA1MDQxODg4Mzc3LDEzMTk3MS45MDEzMDM1OTk0LDc2ODE4LjM4ODMyOTQ5NTM4LDE1ODgwMy43ODY4MTYwMDQ2MywxNjAwNzIuNjIyMTc0OTY5LDI1ODc2MzYuNjgyOTQ0Nzg0NCwyODExOTgyLjEwMjYyMjA1OTYsMjMwNDY4Ny45MDA2NjE2NTksMjAwMTg1NC4wMTg3OTUxMjMsMjUwMjgyMS41NzYyMjk3NzYzLDUwODI0OS40NjAxNjM5MjkxLDI5NzExMzIuNTI3NDQzNzUwOCw1ODgwMDQuMjUzMTAyMjg2NCwxNTYwOTI0Ljk2NTQyMDQ4OTQsMTM5NTE4Mi40MDc0MjcwNzg4LDMyMDI3NjMuMzU2MzA0MTIzNSwyMzIwMjc1LjU5MDYzNDEyMyw2NTI1NDcuNTQ4NDcwMzA1NSwxODk5MjA5LjU5NjI3NjA3OTgsMTI2NDgyMC40NjkzNDY0MjA0LDE4Njg1MzYuNjQxMDcwNjA4NSwyMDc0OTYyLjU3ODk4ODYxNjEsMTg0NTg2Ny40MTcxNTgyNzk4LDQyMDc2MTQuODM4OTAzMzQ2LDI2ODMyNi44Njk4NzU2MzA2LDMzNTkuNjgzNjc2NDk5NjMzMworMTgsRnJpIDExIEZlYiAxMSwxNDc4MDkuMTk4MjI4MDA4MDgsMTMxOTcyLjAzMzI3NTU2NjcsNzY4MTguNDY1MTQ3OTIyMTIsMTU4ODAzLjk0NTYxOTg3MDgyLDE2MDA3Mi43ODIyNDc2NzEyLDI1ODc2MzkuMjcwNTgyNzYxLDI4MTE5ODQuOTE0NjA1NTY3NywyMzA0NjkwLjIwNTM1MDcxMjQsMjAwMTg1Ni4wMjA2NTAxNDMsMjUwMjgyNC4wNzkwNTI2MDMzLDUwODI0OS45Njg0MTM2NDMzLDI5NzExMzUuNDk4NTc3NzY0LDU4ODAwNC44NDExMDY4MzM0LDE1NjA5MjYuNTI2MzQ2MjM1MywxMzk1MTgzLjgwMjYxMDE4MzgsMzIwMjc2Ni41NTkwNjkwODA3LDIzMjAyNzcuOTEwOTEwODc0Niw2NTI1NDguMjAxMDE4MTgwMywxODk5MjExLjQ5NTQ4NjYyNTcsMTI2NDgyMS43MzQxNjc1MjIsMTg2ODUzOC41MDk2MDgxODQsMjA3NDk2NC42NTM5NTIyMzMsMTg0NTg2OS4yNjMwMjY2MjAzLDQyMDc2MTkuMDQ2NTIwMjg4LDI2ODMyNy4xMzgyMDI2MzQ3LDMzNTkuNjg3MDM2MTg0OTg5NworMTksU2F0IDEyIEZlYiAxMSwxNDc4MDkuMzQ2MDM3MjgwMjIsMTMxOTcyLjE2NTI0NzY2NTk4LDc2ODE4LjU0MTk2NjQyNTY5LDE1ODgwNC4xMDQ0MjM4OTU5LDE2MDA3Mi45NDIzMjA1MzM0NSwyNTg3NjQxLjg1ODIyMzMyNTYsMjgxMTk4Ny43MjY1OTE4ODgsMjMwNDY5Mi41MTAwNDIwNywyMDAxODU4LjAyMjUwNzE2NDYsMjUwMjgyNi41ODE4Nzc5MzQsNTA4MjUwLjQ3NjY2Mzg2NTgsMjk3MTEzOC40Njk3MTQ3NDc3LDU4ODAwNS40MjkxMTE5Njg1LDE1NjA5MjguMDg3MjczNTQyLDEzOTUxODUuMTk3Nzk0Njg0MiwzMjAyNzY5Ljc2MTgzNzI0MTIsMjMyMDI4MC4yMzExODk5NDUyLDY1MjU0OC44NTM1NjY3MDc2LDE4OTkyMTMuMzk0Njk5MDcwOCwxMjY0ODIyLjk5ODk4OTg4ODcsMTg2ODU0MC4zNzgxNDc2MjgsMjA3NDk2Ni43Mjg5MTc5MjQ1LDE4NDU4NzEuMTA4ODk2ODA2MSw0MjA3NjIzLjI1NDE0MTQzOSwyNjgzMjcuNDA2NTI5OTA3MTQsMzM1OS42OTAzOTU4NzM3MDUzCisyMCxTdW4gMTMgRmViIDExLDE0NzgwOS40OTM4NDY3MDAxOCwxMzE5NzIuMjk3MjE5ODk3Miw3NjgxOC42MTg3ODUwMDYwNywxNTg4MDQuMjYzMjI4MDc5NywxNjAwNzMuMTAyMzkzNTU1NzgsMjU4NzY0NC40NDU4NjY0NzcsMjgxMTk5MC41Mzg1ODEwMjA3LDIzMDQ2OTQuODE0NzM1NzMyLDIwMDE4NjAuMDI0MzY2MTg4LDI1MDI4MjkuMDg0NzA1NzY2OCw1MDgyNTAuOTg0OTE0NTk2NTQsMjk3MTE0MS40NDA4NTQ3MDI2LDU4ODAwNi4wMTcxMTc2OTE2LDE1NjA5MjkuNjQ4MjAyNDA5NywxMzk1MTg2LjU5Mjk4MDU4LDMyMDI3NzIuOTY0NjA4NjA0LDIzMjAyODIuNTUxNDcxMzM2Nyw2NTI1NDkuNTA2MTE1ODg3NCwxODk5MjE1LjI5MzkxMzQxNTIsMTI2NDgyNC4yNjM4MTM1MiwxODY4NTQyLjI0NjY4ODk0MDYsMjA3NDk2OC44MDM4ODU2OTA5LDE4NDU4NzIuOTU0NzY4ODM3Nyw0MjA3NjI3LjQ2MTc2Njc5NiwyNjgzMjcuNjc0ODU3NDQ3ODYsMzM1OS42OTM3NTU1NjU3ODA1CisyMSxNb24gMTQgRmViIDExLDE0NzgwOS42NDE2NTYyNjc5NSwxMzE5NzIuNDI5MTkyMjYwNDMsNzY4MTguNjk1NjAzNjYzMjgsMTU4ODA0LjQyMjAzMjQyMjM2LDE2MDA3My4yNjI0NjY3MzgxOCwyNTg3NjQ3LjAzMzUxMjIxNjUsMjgxMTk5My4zNTA1NzI5NjUsMjMwNDY5Ny4xMTk0MzE2OTksMjAwMTg2Mi4wMjYyMjcyMTM3LDI1MDI4MzEuNTg3NTM2MTAzLDUwODI1MS40OTMxNjU4MzU1LDI5NzExNDQuNDExOTk3NjI5LDU4ODAwNi42MDUxMjQwMDI3LDE1NjA5MzEuMjA5MTMyODM4LDEzOTUxODcuOTg4MTY3ODcwNiwzMjAyNzc2LjE2NzM4MzE3LDIzMjAyODQuODcxNzU1MDQ4Niw2NTI1NTAuMTU4NjY1NzE5OCwxODk5MjE3LjE5MzEyOTY1ODcsMTI2NDgyNS41Mjg2Mzg0MTYyLDE4Njg1NDQuMTE1MjMyMTIxNCwyMDc0OTcwLjg3ODg1NTUzMjMsMTg0NTg3NC44MDA2NDI3MTU1LDQyMDc2MzEuNjY5Mzk2MzYsMjY4MzI3Ljk0MzE4NTI1Njk3LDMzNTkuNjk3MTE1MjYxMjE2CisyMixUdWUgMTUgRmViIDExLDE0NzgwOS43ODk0NjU5ODM1MSwxMzE5NzIuNTYxMTY0NzU1NTgsNzY4MTguNzcyNDIyMzk3MywxNTg4MDQuNTgwODM2OTIzOCwxNjAwNzMuNDIyNTQwMDgwNywyNTg3NjQ5LjYyMTE2MDU0MzUsMjgxMTk5Ni4xNjI1Njc3MjE3LDIzMDQ2OTkuNDI0MTI5OTcxLDIwMDE4NjQuMDI4MDkwMjQxMSwyNTAyODM0LjA5MDM2ODk0Myw1MDgyNTIuMDAxNDE3NTgyOCwyOTcxMTQ3LjM4MzE0MzUyNjUsNTg4MDA3LjE5MzEzMDkwMTcsMTU2MDkzMi43NzAwNjQ4MjgsMTM5NTE4OS4zODMzNTY1NTY1LDMyMDI3NzkuMzcwMTYwOTM4NywyMzIwMjg3LjE5MjA0MTA4MSw2NTI1NTAuODExMjE2MjA0NSwxODk5MjE5LjA5MjM0NzgwMTQsMTI2NDgyNi43OTM0NjQ1NzczLDE4Njg1NDUuOTgzNzc3MTcwOCwyMDc0OTcyLjk1MzgyNzQ0OSwxODQ1ODc2LjY0NjUxODQzOTUsNDIwNzYzNS44NzcwMzAxMzMsMjY4MzI4LjIxMTUxMzMzNDQsMzM1OS43MDA0NzQ5NjAwMTEKKzIzLFdlZCAxNiBGZWIgMTEsMTQ3ODA5LjkzNzI3NTg0NjksMTMxOTcyLjY5MzEzNzM4Mjc0LDc2ODE4Ljg0OTI0MTIwODE0LDE1ODgwNC43Mzk2NDE1ODQwOCwxNjAwNzMuNTgyNjEzNTgzMjgsMjU4NzY1Mi4yMDg4MTE0NTgsMjgxMTk5OC45NzQ1NjUyODk0LDIzMDQ3MDEuNzI4ODMwNTQ3NSwyMDAxODY2LjAyOTk1NTI3MDIsMjUwMjgzNi41OTMyMDQyODQ2LDUwODI1Mi41MDk2Njk4MzgzLDI5NzExNTAuMzU0MjkyMzk1LDU4ODAwNy43ODExMzgzODg4LDE1NjA5MzQuMzMwOTk4Mzc4NiwxMzk1MTkwLjc3ODU0NjYzNzQsMzIwMjc4Mi41NzI5NDE5MSwyMzIwMjg5LjUxMjMyOTQzMyw2NTI1NTEuNDYzNzY3MzQxOSwxODk5MjIwLjk5MTU2Nzg0MzQsMTI2NDgyOC4wNTgyOTIwMDI5LDE4Njg1NDcuODUyMzI0MDg5LDIwNzQ5NzUuMDI4ODAxNDQwMywxODQ1ODc4LjQ5MjM5NjAwODcsNDIwNzY0MC4wODQ2NjgxMTQsMjY4MzI4LjQ3OTg0MTY4MDEsMzM1OS43MDM4MzQ2NjIxNjU3CisyNCxUaHUgMTcgRmViIDExLDE0NzgxMC4wODUwODU4NTgxMywxMzE5NzIuODI1MTEwMTQxODYsNzY4MTguOTI2MDYwMDk1OCwxNTg4MDQuODk4NDQ2NDAzMTIsMTYwMDczLjc0MjY4NzI0NTkyLDI1ODc2NTQuNzk2NDY0OTYxNSwyODEyMDAxLjc4NjU2NTY3LDIzMDQ3MDQuMDMzNTMzNDI5MywyMDAxODY4LjAzMTgyMjMwMDcsMjUwMjgzOS4wOTYwNDIxMjksNTA4MjUzLjAxNzkyMjYwMjEsMjk3MTE1My4zMjU0NDQyMzQ1LDU4ODAwOC4zNjkxNDY0NjM4LDE1NjA5MzUuODkxOTMzNDkwMywxMzk1MTkyLjE3MzczODExMzgsMzIwMjc4NS43NzU3MjYwODQ2LDIzMjAyOTEuODMyNjIwMTA2LDY1MjU1Mi4xMTYzMTkxMzE5LDE4OTkyMjIuODkwNzg5Nzg0NSwxMjY0ODI5LjMyMzEyMDY5MzQsMTg2ODU0OS43MjA4NzI4NzU1LDIwNzQ5NzcuMTAzNzc3NTA2NCwxODQ1ODgwLjMzODI3NTQyNCw0MjA3NjQ0LjI5MjMxMDMwMiwyNjgzMjguNzQ4MTcwMjk0MSwzMzU5LjcwNzE5NDM2NzY4MDYKKzI1LEZyaSAxOCBGZWIgMTEsMTQ3ODEwLjIzMjg5NjAxNzA5LDEzMTk3Mi45NTcwODMwMzMsNzY4MTkuMDAyODc5MDYwMjQsMTU4ODA1LjA1NzI1MTM4MSwxNjAwNzMuOTAyNzYxMDY4NjYsMjU4NzY1Ny4zODQxMjEwNTE1LDI4MTIwMDQuNTk4NTY4ODYyMywyMzA0NzA2LjMzODIzODYxNSwyMDAxODcwLjAzMzY5MTMzMzYsMjUwMjg0MS41OTg4ODI0NzcsNTA4MjUzLjUyNjE3NTg3NDIsMjk3MTE1Ni4yOTY1OTkwNDYsNTg4MDA4Ljk1NzE1NTEyNywxNTYwOTM3LjQ1Mjg3MDE2MjcsMTM5NTE5My41Njg5MzA5ODU0LDMyMDI3ODguOTc4NTEzNDYyLDIzMjAyOTQuMTUyOTEzMDk5LDY1MjU1Mi43Njg4NzE1NzQ3LDE4OTkyMjQuNzkwMDEzNjI0OCwxMjY0ODMwLjU4Nzk1MDY0OTQsMTg2ODU1MS41ODk0MjM1MzA1LDIwNzQ5NzkuMTc4NzU1NjQ3NywxODQ1ODgyLjE4NDE1NjY4NTEsNDIwNzY0OC40OTk5NTY2OTgsMjY4MzI5LjAxNjQ5OTE3NjMzLDMzNTkuNzEwNTU0MDc2NTU0NworMjYsU2F0IDE5IEZlYiAxMSwxNDc4MTAuMzgwNzA2MzIzOSwxMzE5NzMuMDg5MDU2MDU2MDUsNzY4MTkuMDc5Njk4MTAxNTMsMTU4ODA1LjIxNjA1NjUxNzY1LDE2MDA3NC4wNjI4MzUwNTE1LDI1ODc2NTkuOTcxNzc5NzI5MiwyODEyMDA3LjQxMDU3NDg2NywyMzA0NzA4LjY0Mjk0NjEwNSwyMDAxODcyLjAzNTU2MjM2ODMsMjUwMjg0NC4xMDE3MjUzMjgsNTA4MjU0LjAzNDQyOTY1NDYsMjk3MTE1OS4yNjc3NTY4MjgsNTg4MDA5LjU0NTE2NDM3ODQsMTU2MDkzOS4wMTM4MDgzOTU3LDEzOTUxOTQuOTY0MTI1MjUyLDMyMDI3OTIuMTgxMzA0MDQyLDIzMjAyOTYuNDczMjA4NDExNiw2NTI1NTMuNDIxNDI0NjY5OSwxODk5MjI2LjY4OTIzOTM2NDYsMTI2NDgzMS44NTI3ODE4Njk1LDE4Njg1NTMuNDU3OTc2MDU0LDIwNzQ5ODEuMjUzNzM1ODY0LDE4NDU4ODQuMDMwMDM5NzkyMiw0MjA3NjUyLjcwNzYwNzMwMSwyNjgzMjkuMjg0ODI4MzI2OTYsMzM1OS43MTM5MTM3ODg3ODkzCisyNyxTdW4gMjAgRmViIDExLDE0NzgxMC41Mjg1MTY3Nzg1MiwxMzE5NzMuMjIxMDI5MjExMSw3NjgxOS4xNTY1MTcyMTk2NCwxNTg4MDUuMzc0ODYxODEzMSwxNjAwNzQuMjIyOTA5MTk0NCwyNTg3NjYyLjU1OTQ0MDk5NCwyODEyMDEwLjIyMjU4MzY4MzcsMjMwNDcxMC45NDc2NTU5MDA0LDIwMDE4NzQuMDM3NDM1NDA1LDI1MDI4NDYuNjA0NTcwNjgxLDUwODI1NC41NDI2ODM5NDMwNiwyOTcxMTYyLjIzODkxNzU4MTMsNTg4MDEwLjEzMzE3NDIxNzUsMTU2MDk0MC41NzQ3NDgxOTAxLDEzOTUxOTYuMzU5MzIwOTEzNCwzMjAyNzk1LjM4NDA5NzgyNDMsMjMyMDI5OC43OTM1MDYwNDUsNjUyNTU0LjA3Mzk3ODQxNzYsMTg5OTIyOC41ODg0NjcwMDM1LDEyNjQ4MzMuMTE3NjE0MzU0NywxODY4NTU1LjMyNjUzMDQ0NjMsMjA3NDk4My4zMjg3MTgxNTU0LDE4NDU4ODUuODc1OTI0NzQ1Myw0MjA3NjU2LjkxNTI2MjExMiwyNjgzMjkuNTUzMTU3NzQ1OSwzMzU5LjcxNzI3MzUwNDM4MworMjgsTW9uIDIxIEZlYiAxMSwxNDc4MTAuNjc2MzI3MzgwOTMsMTMxOTczLjM1MzAwMjQ5ODEsNzY4MTkuMjMzMzM2NDE0NTYsMTU4ODA1LjUzMzY2NzI2NzM2LDE2MDA3NC4zODI5ODM0OTczMSwyNTg3NjY1LjE0NzEwNDg0NywyODEyMDEzLjAzNDU5NTMxMiwyMzA0NzEzLjI1MjM2ODAwMDMsMjAwMTg3Ni4wMzkzMTA0NDM0LDI1MDI4NDkuMTA3NDE4NTM3LDUwODI1NS4wNTA5Mzg3Mzk4NSwyOTcxMTY1LjIxMDA4MTMwNjMsNTg4MDEwLjcyMTE4NDY0NDgsMTU2MDk0Mi4xMzU2ODk1NDUyLDEzOTUxOTcuNzU0NTE3OTcwNCwzMjAyNzk4LjU4Njg5NDgwOTcsMjMyMDMwMS4xMTM4MDU5OTgsNjUyNTU0LjcyNjUzMjgxNzgsMTg5OTIzMC40ODc2OTY1NDIsMTI2NDgzNC4zODI0NDgxMDQ3LDE4Njg1NTcuMTk1MDg2NzA3LDIwNzQ5ODUuNDAzNzAyNTIxNSwxODQ1ODg3LjcyMTgxMTU0NDQsNDIwNzY2MS4xMjI5MjExMzIsMjY4MzI5LjgyMTQ4NzQzMzIsMzM1OS43MjA2MzMyMjMzMzYKKzI5LFR1ZSAyMiBGZWIgMTEsMTQ3ODEwLjgyNDEzODEzMTE0LDEzMTk3My40ODQ5NzU5MTcwNiw3NjgxOS4zMTAxNTU2ODYzMywxNTg4MDUuNjkyNDcyODgwNDQsMTYwMDc0LjU0MzA1Nzk2MDM0LDI1ODc2NjcuNzM0NzcxMjg3LDI4MTIwMTUuODQ2NjA5NzUzNiwyMzA0NzE1LjU1NzA4MjQwNSwyMDAxODc4LjA0MTE4NzQ4NCwyNTAyODUxLjYxMDI2ODg5NjQsNTA4MjU1LjU1OTE5NDA0NDg1LDI5NzExNjguMTgxMjQ4MDAyLDU4ODAxMS4zMDkxOTU2NjAyLDE1NjA5NDMuNjk2NjMyNDYxNCwxMzk1MTk5LjE0OTcxNjQyMjIsMzIwMjgwMS43ODk2OTQ5OTgsMjMyMDMwMy40MzQxMDgyNzI3LDY1MjU1NS4zNzkwODc4NzA0LDE4OTkyMzIuMzg2OTI3OTc4OCwxMjY0ODM1LjY0NzI4MzExOTQsMTg2ODU1OS4wNjM2NDQ4MzYyLDIwNzQ5ODcuNDc4Njg4OTYyOCwxODQ1ODg5LjU2NzcwMDE4ODgsNDIwNzY2NS4zMzA1ODQzNTgsMjY4MzMwLjA4OTgxNzM4ODksMzM1OS43MjM5OTI5NDU2NDk2CiszMCxXZWQgMjMgRmViIDExLDE0NzgxMC45NzE5NDkwMjkyLDEzMTk3My42MTY5NDk0NjgwNCw3NjgxOS4zODY5NzUwMzQ5MSwxNTg4MDUuODUxMjc4NjUyMywxNjAwNzQuNzAzMTMyNTgzNDcsMjU4NzY3MC4zMjI0NDAzMTU1LDI4MTIwMTguNjU4NjI3MDA2NywyMzA0NzE3Ljg2MTc5OTExNSwyMDAxODgwLjA0MzA2NjUyNTgsMjUwMjg1NC4xMTMxMjE3NTgsNTA4MjU2LjA2NzQ0OTg1ODIsMjk3MTE3MS4xNTI0MTc2Njg2LDU4ODAxMS44OTcyMDcyNjM0LDE1NjA5NDUuMjU3NTc2OTM4NywxMzk1MjAwLjU0NDkxNjI2OTQsMzIwMjgwNC45OTI0OTgzODksMjMyMDMwNS43NTQ0MTI4NjY3LDY1MjU1Ni4wMzE2NDM1NzU4LDE4OTkyMzQuMjg2MTYxMzE1MiwxMjY0ODM2LjkxMjExOTM5OTMsMTg2ODU2MC45MzIyMDQ4MzQsMjA3NDk4OS41NTM2Nzc0NzkzLDE4NDU4OTEuNDEzNTkwNjc5Niw0MjA3NjY5LjUzODI1MTc5MywyNjgzMzAuMzU4MTQ3NjEyOTUsMzM1OS43MjczNTI2NzEzMjI1CiszMSxUaHUgMjQgRmViIDExLDE0NzgxMS4xMTk3NjAwNzUwMywxMzE5NzMuNzQ4OTIzMTUxLDc2ODE5LjQ2Mzc5NDQ2MDMsMTU4ODA2LjAxMDA4NDU4MywxNjAwNzQuODYzMjA3MzY2NjcsMjU4NzY3Mi45MTAxMTE5MzE2LDI4MTIwMjEuNDcwNjQ3MDcxNSwyMzA0NzIwLjE2NjUxODEyODUsMjAwMTg4Mi4wNDQ5NDc1NywyNTAyODU2LjYxNTk3NzEyMyw1MDgyNTYuNTc1NzA2MTc5NywyOTcxMTc0LjEyMzU5MDMwNzMsNTg4MDEyLjQ4NTIxOTQ1NDYsMTU2MDk0Ni44MTg1MjI5NzcsMTM5NTIwMS45NDAxMTc1MTIsMzIwMjgwOC4xOTUzMDQ5ODM4LDIzMjAzMDguMDc0NzE5NzgxLDY1MjU1Ni42ODQxOTk5MzM4LDE4OTkyMzYuMTg1Mzk2NTUxMiwxMjY0ODM4LjE3Njk1Njk0NCwxODY4NTYyLjgwMDc2NjcwMDQsMjA3NDk5MS42Mjg2NjgwNzAzLDE4NDU4OTMuMjU5NDgzMDE2Myw0MjA3NjczLjc0NTkyMzQzNiwyNjgzMzAuNjI2NDc4MTA1MjYsMzM1OS43MzA3MTI0MDAzNTU1CiszMixGcmkgMjUgRmViIDExLDE0NzgxMS4yNjc1NzEyNjg3LDEzMTk3My44ODA4OTY5NjU5NCw3NjgxOS41NDA2MTM5NjI1LDE1ODgwNi4xNjg4OTA2NzI0NywxNjAwNzUuMDIzMjgyMzA5OSwyNTg3Njc1LjQ5Nzc4NjEzNiwyODEyMDI0LjI4MjY2OTk0NzUsMjMwNDcyMi40NzEyMzk0NDcsMjAwMTg4NC4wNDY4MzA2MTYsMjUwMjg1OS4xMTg4MzQ5OSw1MDgyNTcuMDgzOTYzMDA5NiwyOTcxMTc3LjA5NDc2NTkxNyw1ODgwMTMuMDczMjMyMjMzOSwxNTYwOTQ4LjM3OTQ3MDU3NTgsMTM5NTIwMy4zMzUzMjAxNDk1LDMyMDI4MTEuMzk4MTE0NzgsMjMyMDMxMC4zOTUwMjkwMTU0LDY1MjU1Ny4zMzY3NTY5NDQyLDE4OTkyMzguMDg0NjMzNjg2LDEyNjQ4MzkuNDQxNzk1NzUzMywxODY4NTY0LjY2OTMzMDQzNTYsMjA3NDk5My43MDM2NjA3MzYzLDE4NDU4OTUuMTA1Mzc3MTk5LDQyMDc2NzcuOTUzNTk5Mjg2LDI2ODMzMC44OTQ4MDg4NjU4NSwzMzU5LjczNDA3MjEzMjc0NzgKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvRGVtb2dyYXBoaWNTRUlSRGlzZWFzZV9SS19SZWZlcmVuY2UvRGVtb2dyYXBoaWNNb2RlbC9tZW4vRGVhdGhzXzIuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9EZW1vZ3JhcGhpY1NFSVJEaXNlYXNlX1JLX1JlZmVyZW5jZS9EZW1vZ3JhcGhpY01vZGVsL21lbi9EZWF0aHNfMi5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjVhMDYzMwotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvRGVtb2dyYXBoaWNTRUlSRGlzZWFzZV9SS19SZWZlcmVuY2UvRGVtb2dyYXBoaWNNb2RlbC9tZW4vRGVhdGhzXzIuY3N2CkBAIC0wLDAgKzEsMzMgQEAKK2l0ZXJhdGlvbix0aW1lLEVHLUZSRy1HMjEwMDAxLEVHLUZSRy1HMjEwMDAyLEVHLUZSRy1HMjEwMDAzLEVHLUZSRy1HMjEwMDA0LEVHLUZSRy1HMjEwMDA1LEVHLUxPRS1HMjQwMDAxLEVHLUxPRS1HMjQwMDAyLEVHLUxPRS1HMjQwMDAzLEVHLUxPRS1HMjQwMDA0LEVHLUxPRS1HMjQwMDA1LEVHLUxPRS1HMjQwMDA2LEVHLUxPRS1HMjQwMDA3LEVHLUxPRS1HMjQwMDA4LEVHLUxPRS1HMjQwMDA5LEVHLVVQRS1HMjkwMDAxLEVHLVVQRS1HMjkwMDAyLEVHLVVQRS1HMjkwMDAzLEVHLVVQRS1HMjkwMDA0LEVHLVVQRS1HMjkwMDA1LEVHLVVQRS1HMjkwMDA2LEVHLVVQRS1HMjkwMDA3LEVHLVVQRS1HMjkwMDA4LEVHLVVSRy1HMzAwMDAxLEVHLVVSRy1HMzAwMDAyLEVHLVVSRy1HMzAwMDAzLEVHLVVSRy1HMzAwMDA0CisxLFR1ZSAyNSBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMixXZWQgMjYgSmFuIDExLDUuNzY0NDYzNjE2NDU4MTkxLDUuMTQ2ODI0Mzc0NDQ0NTE5LDIuOTk1ODcwNzA4NDk0NTgxLDYuMTkzMjUxNjg5Njc5MjgyLDYuMjQyNzM1NTAxNjczODY0LDEwMC45MTYyNjY0MjA1OTg1MywxMDkuNjY1NjAyMTcyMjU3NTYsODkuODgxNDM0OTUyNzY5NjUsNzguMDcxMDk2NjIxNjM3MDEsOTcuNjA4NTI4NTI5MDQ3NiwxOS44MjE0MjE3MTE5NzY0NywxMTUuODcyMzcyNTM0NjE3NTMsMjIuOTMxODEwNDI1MTczODUsNjAuODc1MTMwMDc5NTcyNjYsNTQuNDExMjcwNTA4NDI5MjIsMTI0LjkwNTgzNDg0MDQyMTQ5LDkwLjQ4OTM0NTQzOTAxMDIsMjUuNDQ4OTU5OTI4NDA3MDI0LDc0LjA2ODAyNjE5MTQ2NjcsNDkuMzI3MjMzNzI2NDY0MTQ0LDcyLjg3MTc5OTQ4MDExMSw4MC45MjIyODYyNzU0MDEyNiw3MS45ODc3MTM0NTA5Njk3NiwxNjQuMDk0NDM1MjMzNzc5MTQsMTAuNDY0NTg1NzIyODE0MjQ5LDAuMTMxMDI1NjMyNDcwNDQ4MzUKKzMsVGh1IDI3IEphbiAxMSwxMS41Mjg5MzI5OTczODI4ODUsMTAuMjkzNjUzODk1NzE1OTg2LDUuOTkxNzQ0NDEyODYxMzY5LDEyLjM4NjUwOTU3MjYxMzM1NCwxMi40ODU0NzcyNDYwODYzNTQsMjAxLjgzMjYzMzc1NzUxNDAzLDIxOS4zMzEzMTQwMTAxNzIyLDE3OS43NjI5NTk3ODcwMTkyNCwxNTYuMTQyMjcxMzE0NDA5NzgsMTk1LjIxNzE1NDY2NjY3MjU3LDM5LjY0Mjg2MzI0NTM4NDU3NSwyMzEuNzQ0ODYwOTQxNjY1NTYsNDUuODYzNjQzNzgyMTY5NTgsMTIxLjc1MDMyMTAzNDMwNTg3LDEwOC44MjI1OTU0MjgxNTYxOSwyNDkuODExNzk0NTg2NzQwNDMsMTgwLjk3ODc4MTM2NzQxMTEsNTAuODk3OTQ1MzA1Nzg2NzQsMTQ4LjEzNjEyNjQ1MDk5NjY0LDk4LjY1NDUxNjc4MDE4Njc3LDE0NS43NDM2NzE4MzIwNTc5NCwxNjEuODQ0NjUzNDczMTI5MjYsMTQzLjk3NTQ5ODg4OTY4OTA1LDMyOC4xODkwMzQ1NjIwNzU1NiwyMC45MjkxODE5MTAyMTk0NiwwLjI2MjA1MTM5NTk2NjU5NDc3Cis0LEZyaSAyOCBKYW4gMTEsMTcuMjkzNDA4MTQyNzc5ODQzLDE1LjQ0MDQ4ODU2MzgxOTU1MSw4Ljk4NzYyMTExMzEwMzM1NywxOC41Nzk3NzM2NDg4MDg0MDYsMTguNzI4MjI1MjMzMjQzNzE2LDMwMi43NDkxMDIwMTA4NDczNywzMjguOTk3MTM1NTEzODUzNTUsMjY5LjY0NDU3NDUwMjgzODYsMjM0LjIxMzUyNDA3ODM5NjIsMjkyLjgyNTg3ODQxMjk3MjQzLDU5LjQ2NDMyNDYwMDI0NDExLDM0Ny42MTc0NjUyMjEyNiw2OC43OTU1MDAwNzEwMTAxNCwxODIuNjI1NTcyODY0MjYwNSwxNjMuMjMzOTc0NzU5MjM1MzcsMzc0LjcxNzg3OTIzOTA4MTYsMjcxLjQ2ODMwNzc4NTI5MzIsNzYuMzQ2OTU2MTMyMTY0NTUsMjIyLjIwNDMwMDc3ODY2Mzg4LDE0Ny45ODE4NDkxNjEyMTcxLDIxOC42MTU2MTcwNTU5MTM2NSwyNDIuNzY3MTAxNTkzMjY0OTgsMjE1Ljk2MzM1NjMxNjIyOTcyLDQ5Mi4yODM3OTc5ODUwNTM0NywzMS4zOTM3ODg1NjIyMjYwNzgsMC4zOTMwNzcyOTA0ODg1NzAyCis1LFNhdCAyOSBKYW4gMTEsMjMuMDU3ODg5MDUyNjU0ODIyLDIwLjU4NzMyODM3ODc2MDM1OCwxMS45ODM1MDA4MDkyMjM1NDYsMjQuNzczMDQzOTE4MjcwNjI3LDI0Ljk3MDk3OTQ2MzE1MjE4Myw0MDMuNjY1NjcxMTgwNjk5Myw0MzguNjYzMDY2NjgzNDExMSwzNTkuNTI2Mjc5MTAwMzE3NCwzMTIuMjg0ODU0OTEzNjc0MzQsMzkwLjQzNDY5OTc2ODA0NDk0LDc5LjI4NTgwNTc3NjU3NDkyLDQ2My40OTAxODUzNzM1MTY1LDkxLjcyNzM3OTI5MTcxODQ2LDI0My41MDA4ODU1Njk0OTczNCwyMTcuNjQ1NDA4NTAxNzIxLDQ5OS42MjQwODg3OTc1Njk2LDM2MS45NTc5MjQ2OTI3NDY5LDEwMS43OTU5OTI0MDc1NjU4OCwyOTYuMjcyNTQ5MTc0NTQyNiwxOTcuMzA5MjMwODY5NjA0NDUsMjkxLjQ4NzYzNTE1MTc1MTEsMzIzLjY4OTYzMDYzNTg4OTE2LDI4Ny45NTEyODU3MzA2NjM5LDY1Ni4zNzg3MjU1MDI4NzcsNDEuODU4NDA1Njc4ODQ0NTc2LDAuNTI0MTAzMzE2MDM2NTA1NAorNixTdW4gMzAgSmFuIDExLDI4LjgyMjM3NTcyNzAxMzU5NywyNS43MzQxNzMzNDA1NDM1NTYsMTQuOTc5MzgzNTAxMjI0OTI5LDMwLjk2NjMyMDM4MTAwNjIyLDMxLjIxMzczOTkzNTgxODAxLDUwNC41ODIzNDEyNjcxNzA5Myw1NDguMzI5MTA3NTE4OTU0Niw0NDkuNDA4MDczNTc5NTQ2MDYsMzkwLjM1NjI2MzgyMDMyMjUsNDg4LjA0MzYxODczMTk4NzY0LDk5LjEwNzMwNjc3NDM5NjgyLDU3OS4zNjMwMjEzOTg1NTEzLDExNC42NTkyODE0NDQzMTc0NywzMDQuMzc2MjU5MTUwMDc3NDMsMjcyLjA1Njg5NjY1NTY2NzYzLDYyNC41MzA0MjMyNjIzMjk3LDQ1Mi40NDc2MzIwODk4NjI2LDEyNy4yNDUwNTQxMzIwMTYyNCwzNzAuMzQwODcxNjM4NzA2NywyNDYuNjM2NjYxOTA1Mzk4MiwzNjQuMzU5NzI2MTE5NjQzMSw0MDQuNjEyMjQwNjAxMDgyOSwzNTkuOTM5Mjg3MTMzMDYzNSw4MjAuNDczODE3MTE1NzEwMSw1Mi4zMjMwMzMyNjAwODU0MywwLjY1NTEyOTQ3MjYxMDUzMTkKKzcsTW9uIDMxIEphbiAxMSwzNC41ODY4NjgxNjU4NjE5NCwzMC44ODEwMjM0NDkxNzQyNzUsMTcuOTc1MjY5MTg5MTEwNTAyLDM3LjE1OTYwMzAzNzAyMTM3LDM3LjQ1NjUwNjY1MTI0NzQzLDYwNS40OTkxMTIyNzAzNjMxLDY1Ny45OTUyNTgwMjA1OTM4LDUzOS4yODk5NTc5NDA2MTQsNDY4LjQyNzc1MDc5ODQxODYzLDU4NS42NTI2MzUzMDQ4OTgxLDExOC45Mjg4Mjc1OTM3Mjk2NCw2OTUuMjM1OTczMjk2NDgwMSwxMzcuNTkxMjA2NTI4ODMwMSwzNjUuMjUxNjkzNjA2MDYxNiwzMjYuNDY4NDM5MjIxMTI5NjQsNzQ5LjQzNjg4MjYzMzQ4NjcsNTQyLjkzNzQyOTk3NjczMTIsMTUyLjY5NDE0MTMwNTU0MTAyLDQ0NC40MDkyNjgxNzEyMzAzLDI5NS45NjQxNDIyNjg2NDc3LDQzNy4yMzE4ODk5NTk2NjI0LDQ4NS41MzQ5MzE0ODg5MjcxLDQzMS45MjczNjA1MjM1MDA0LDk4NC41NjkwNzI4MjM3MTY5LDYyLjc4NzY3MTMwNTk1OTEsMC43ODYxNTU3NjAyMTA3ODA0Cis4LFR1ZSAxIEZlYiAxMSw0MC4zNTEzNjYzNjkyMDU1ODYsMzYuMDI3ODc4NzA0NjU3Njc0LDIwLjk3MTE1Nzg3Mjg4MzI1Nyw0My4zNTI4OTE4ODYzMjIyNzYsNDMuNjk5Mjc5NjA5NDQ2NjcsNzA2LjQxNTk4NDE5MDM3NjQsNzY3LjY2MTUxODE4ODQzODQsNjI5LjE3MTkzMjE4MzYxMSw1NDYuNDk5MzE1ODQ4MDQwNyw2ODMuMjYxNzQ5NDg2ODczOSwxMzguNzUwMzY4MjM0NTkzMTQsODExLjEwOTA0MTA2NzQxODMsMTYwLjUyMzE1NDU0NTI3OTIsNDI2LjEyNzE4ODkzNzUxMDUsMzgwLjg4MDAzNjE5ODE2MTI0LDg3NC4zNDM0NjY5MTExNjU2LDYzMy40MjczMTgzNTM0NDI3LDE3OC4xNDMyNTM5MjgxNjU3LDUxOC40Nzc3Mzg3NzIxODczLDM0NS4yOTE2NzE5NTk0MDIxLDUxMC4xMDQxMjY2NzE4ODE5LDU2Ni40NTc3MDMyOTk1MDI3LDUwMy45MTU1MDU5MDIwNDY3MywxMTQ4LjY2NDQ5MjYyNzA2MSw3My4yNTIzMTk4MTY0NzYwNSwwLjkxNzE4MjE3ODgzNzM4MgorOSxXZWQgMiBGZWIgMTEsNDYuMTE1ODcwMzM3MDUwMzI1LDQxLjE3NDczOTEwNjk5ODg5LDIzLjk2NzA0OTU1MjU0NjE5Myw0OS41NDYxODY5Mjg5MTUxMSw0OS45NDIwNTg4MTA0MjE5OSw4MDcuMzMyOTU3MDI3MzEyNSw4NzcuMzI3ODg4MDIyNTk3OCw3MTkuMDUzOTk2MzA4NjI3Myw2MjQuNTcwOTU4OTY5MjY2OCw3ODAuODcwOTYxMjc4MDEyNywxNTguNTcxOTI4Njk3MDA3MjIsOTI2Ljk4MjIyNDcxMTQ4MjMsMTgzLjQ1NTEyNTQ5MzY4Nzc3LDQ4Ny4wMDI3NDUxNDQ0ODUwNiw0MzUuMjkxNjg3NTg2ODE3MTUsOTk5LjI1MDE3NjA5NTQ5MDgsNzIzLjkxNzI5NzIyMDA4NzksMjAzLjU5MjM5MTk5OTkxNTcyLDU5Mi41NDYyODM0NDE2NTE5LDM5NC42MTkyNTA5Nzc3MTA4Niw1ODIuOTc2NDM2MjU2Mzc0NSw2NDcuMzgwNTU2MDMyODkwNCw1NzUuOTAzNzIzMjY4Nzc0MywxMzEyLjc2MDA3NjUyNTkwNzQsODMuNzE2OTc4NzkxNjQ2NzEsMS4wNDgyMDg3Mjg0OTA0NjczCisxMCxUaHUgMyBGZWIgMTEsNTEuODgwMzgwMDY5NDAxODksNDYuMzIxNjA0NjU2MjAzMDg1LDI2Ljk2Mjk0NDIyODEwMjI5OCw1NS43Mzk0ODgxNjQ4MDYwNiw1Ni4xODQ4NDQyNTQxNzk2LDkwOC4yNTAwMzA3ODEyNzEyLDk4Ni45OTQzNjc1MjMxODE1LDgwOC45MzYxNTAzMTU3NTIzLDcwMi42NDI2ODAxNjIxNzQ5LDg3OC40ODAyNzA2Nzg0MTE3LDE3OC4zOTM1MDg5ODA5OTE1OCwxMDQyLjg1NTUyNDIyODc4NzUsMjA2LjM4NzExOTM3NDA3ODc2LDU0Ny44NzgzNjIyMjcwNDYxLDQ4OS43MDMzOTMzODcxNTE0LDExMjQuMTU3MDEwMTg2NTg3Myw4MTQuNDA3MzY2NTc2NzU2OSwyMjkuMDQxNTU1NTIwODE2NCw2NjYuNjE0OTAyMTc5Njk4MSw0NDMuOTQ2ODc5MzIzNjIzMjUsNjU1Ljg0ODgxODcxMzIxMyw3MjguMzAzNDg5Njg5MTcxMiw2NDcuODkyMDEyNjIzNzU1MiwxNDc2Ljg1NTgyNDUyMDQxODgsOTQuMTgxNjQ4MjMxNDgxNTksMS4xNzkyMzU0MDkxNzAxNjc4CisxMSxGcmkgNCBGZWIgMTEsNTcuNjQ0ODk1NTY2MjY2MSw1MS40Njg0NzUzNTIyNzU0NTUsMjkuOTU4ODQxODk5NTU0NTk2LDYxLjkzMjc5NTU5NDAwMTM4NCw2Mi40Mjc2MzU5NDA3MjU4NSwxMDA5LjE2NzIwNTQ1MjM1NSwxMDk2LjY2MDk1NjY5MDMwMDMsODk4LjgxODM5NDIwNTA3Nyw3ODAuNzE0NDc5NDI2ODQzNiw5NzYuMDg5Njc3Njg4MTY5NywxOTguMjE1MTA5MDg2NTY2MjYsMTE1OC43Mjg5Mzk2MTk0NTEsMjI5LjMxOTEzNjE4NjQ3NTI1LDYwOC43NTQwNDAxODUyNTUsNTQ0LjExNTE1MzU5OTIxOTEsMTI0OS4wNjM5NjkxODQ1ODE1LDkwNC44OTc1MjY0MjM1NDEsMjU0LjQ5MDc0NDQ5MDg5MzU1LDc0MC42ODM1OTQ5ODY0MDA0LDQ5My4yNzQ1NTY5OTcxODg5NCw3MjguNzIxMjc0MDQyNDcwOCw4MDkuMjI2NTA0MjY4NDI2Nyw3MTkuODgwMzczOTY3MDYxOCwxNjQwLjk1MTczNjYxMDc2MTYsMTA0LjY0NjMyODEzNTk5MTE4LDEuMzEwMjYyMjIwODc2NjE1CisxMixTYXQgNSBGZWIgMTEsNjMuNDA5NDE2ODI3NjQ4Njg0LDU2LjYxNTM1MTE5NTIyMTA2NiwzMi45NTQ3NDI1NjY5MDYwNTYsNjguMTI2MTA5MjE2NTA3MjIsNjguNjcwNDMzODcwMDY2ODcsMTExMC4wODQ0ODEwNDA2NjM2LDEyMDYuMzI3NjU1NTI0MDYzLDk4OC43MDA3Mjc5NzY2OSw4NTguNzg2MzU2NzYzMzUwNiwxMDczLjY5OTE4MjMwNzM4MzQsMjE4LjAzNjcyOTAxMzc1MDk3LDEyNzQuNjAyNDcwODgzNTg4LDI1Mi4yNTExNzU5MzA4OTk5LDY2OS42Mjk3NzkwMTkxNzIyLDU5OC41MjY5NjgyMjMwNzQsMTM3My45NzEwNTMwODk1OTcsOTk1LjM4Nzc3Njc2MDUzLDI3OS45Mzk5NTg5MTAxNzIzLDgxNC43NTIzNjE4NjE4MzI1LDU0Mi42MDIyODM5OTg0NTY5LDgwMS41OTM4MDIyNDQyMjA1LDg5MC4xNDk1OTk3NzA3MzY3LDc5MS44Njg4MDcyOTg3NjU3LDE4MDUuMDQ3ODEyNzk3MDk4LDExNS4xMTEwMTg1MDUxODU5LDEuNDQxMjg5MTYzNjA5OTM5NgorMTMsU3VuIDYgRmViIDExLDY5LjE3Mzk0Mzg1MzU1NTQsNjEuNzYyMjMyMTg1MDQ1MDgsMzUuOTUwNjQ2MjMwMTU5NjgsNzQuMzE5NDI5MDMyMzI5NzgsNzQuOTEzMjM4MDQyMjA4OTMsMTIxMS4wMDE4NTc1NDYyOTg0LDEzMTUuOTk0NDY0MDI0NTc5LDEwNzguNTgzMTUxNjMwNjgxOSw5MzYuODU4MzEyMTcxNzczOCwxMTcxLjMwODc4NDUzNjE1MDQsMjM3Ljg1ODM2ODc2MjU2NTUsMTM5MC40NzYxMTgwMjEzMTM0LDI3NS4xODMyMzg2MDczNzU3LDczMC41MDU1Nzg3Mjg4NTg4LDY1Mi45Mzg4MzcyNTg3NzA3LDE0OTguODc4MjYxOTAxNzU4OCwxMDg1Ljg3ODExNzU4NzgxNDQsMzA1LjM4OTE5ODc3ODY3ODI0LDg4OC44MjEyMDI4MDYwNjgzLDU5MS45MzAwNjAzMjc0NzY0LDg3NC40NjY0MDMzMTg1MzQ0LDk3MS4wNzI3NzYxOTYxODI4LDg2My44NTczMTI2MTg5Mzg2LDE5NjkuMTQ0MDUzMDc5NTkyNiwxMjUuNTc1NzE5MzM5MDc2MiwxLjU3MjMxNjIzNzM3MDI3MjIKKzE0LE1vbiA3IEZlYiAxMSw3NC45Mzg0NzY2NDM5OTIwMyw2Ni45MDkxMTgzMjE3NTI2NiwzOC45NDY1NTI4ODkzMTg0Nyw4MC41MTI3NTUwNDE0NzUyNCw4MS4xNTYwNDg0NTcxNTgzMiwxMzExLjkxOTMzNDk2OTM2LDE0MjUuNjYxMzgyMTkxOTU4OSwxMTY4LjQ2NTY2NTE2NzE0MjYsMTAxNC45MzAzNDU2NTIxOTE1LDEyNjguOTE4NDg0Mzc0NTY4NCwyNTcuNjgwMDI4MzMzMDI5NywxNTA2LjM0OTg4MTAzMjc0NDYsMjk4LjExNTMyNDIxNTkyNTgsNzkxLjM4MTQzOTMxNDM3NTUsNzA3LjM1MDc2MDcwNjM2MzgsMTYyMy43ODU1OTU2MjExOTE4LDExNzYuMzY4NTQ4OTA1NDg1MywzMzAuODM4NDY0MDk2NDM2ODQsOTYyLjg5MDExNzgxOTE4MjQsNjQxLjI1Nzg4NTk4NDI5NzIsOTQ3LjMzOTA3NzI2NTQ4NiwxMDUxLjk5NjAzMzU0NDg0NTcsOTM1Ljg0NTg4OTkyNzY1MzMsMjEzMy4yNDA0NTc0NTg0MDk4LDEzNi4wNDA0MzA2Mzc2NzI2NCwxLjcwMzM0MzQ0MjE1Nzc0NAorMTUsVHVlIDggRmViIDExLDgwLjcwMzAxNTE5ODk2NDM0LDcyLjA1NjAwOTYwNTM0ODk1LDQxLjk0MjQ2MjU0NDM4NTQxNCw4Ni43MDYwODcyNDM5NDk4Miw4Ny4zOTg4NjUxMTQ5MjEyNSwxNDEyLjgzNjkxMzMwOTk0OTUsMTUzNS4zMjg0MTAwMjYzMTE1LDEyNTguMzQ4MjY4NTg2MTYxNiwxMDkzLjAwMjQ1NzIwNDY4MTgsMTM2Ni41MjgyODE4MjI3MzUsMjc3LjUwMTcwNzcyNTE2MzMsMTYyMi4yMjM3NTk5MTc5OTY0LDMyMS4wNDc0MzI3NTY1NzI5LDg1Mi4yNTczNjA3NzU3ODM1LDc2MS43NjI3Mzg1NjU5MDc0LDE3NDguNjkzMDU0MjQ4MDIwNiwxMjY2Ljg1OTA3MDcxMzYzMzIsMzU2LjI4Nzc1NDg2MzQ3MzM3LDEwMzYuOTU5MTA2OTAxMjQ4Myw2OTAuNTg1NzYwOTY4OTY4MSwxMDIwLjIxMTgyNDA4NTE0ODEsMTEzMi45MTkzNzE4MTY4MDY1LDEwMDcuODM0NTM5MjI0OTgxLDIyOTcuMzM3MDI1OTMzNzEyNSwxNDYuNTA1MTUyNDAwOTg1NTQsMS44MzQzNzA3Nzc5NzI0ODY1CisxNixXZWQgOSBGZWIgMTEsODYuNDY3NTU5NTE4NDc4MDUsNzcuMjAyOTA2MDM1ODM5MDksNDQuOTM4Mzc1MTk1MzYzNDksOTIuODk5NDI1NjM5NzU5NjcsOTMuNjQxNjg4MDE1NTAzOTMsMTUxMy43NTQ1OTI1NjgxNjgsMTY0NC45OTU1NDc1Mjc3NDY2LDEzNDguMjMwOTYxODg3ODI5LDExNzEuMDc0NjQ2ODI5MzIyLDE0NjQuMTM4MTc2ODgwNzQ3NiwyOTcuMzIzNDA2OTM4OTg2MjQsMTczOC4wOTc3NTQ2NzcxODQ5LDM0My45Nzk1NjQyMjkzNCw5MTMuMTMzMzQzMTEzMTQyOSw4MTYuMTc0NzcwODM3NDU2LDE4NzMuNjAwNjM3NzgyMzcwNSwxMzU3LjM0OTY4MzAxMjM0NzIsMzgxLjczNzA3MTA3OTgxMzMsMTExMS4wMjgxNzAwNTIzNDAzLDczOS45MTM2ODUyODE1Mzg0LDEwOTMuMDg0NjQzNzc3NTkzMywxMjEzLjg0Mjc5MTAxMjE0NTksMTA3OS44MjMyNjA1MTA5OTM2LDI0NjEuNDMzNzU4NTA1NjY2LDE1Ni45Njk4ODQ2MjkwMjU0NywxLjk2NTM5ODI0NDgxNDYyOTcKKzE3LFRodSAxMCBGZWIgMTEsOTIuMjMyMTA5NjAyNTM5MDMsODIuMzQ5ODA3NjEzMjI4MjYsNDcuOTM0MjkwODQyMjU1NzUsOTkuMDkyNzcwMjI4OTExMDUsOTkuODg0NTE3MTU4OTEyNjMsMTYxNC42NzIzNzI3NDQxMTU2LDE3NTQuNjYyNzk0Njk2Mzc0NSwxNDM4LjExMzc0NTA3MjIzNDUsMTI0OS4xNDY5MTQ1MjYxOTE1LDE1NjEuNzQ4MTY5NTQ4NzA0NywzMTcuMTQ1MTI1OTc0NTE4MzUsMTg1My45NzE4NjUzMTA0MjY0LDM2Ni45MTE3MTg2MzQyNTAxLDk3NC4wMDkzODYzMjY1MTU0LDg3MC41ODY4NTc1MjEwNjQyLDE5OTguNTA4MzQ2MjI0MzY2NSwxNDQ3Ljg0MDM4NTgwMTcxOSw0MDcuMTg2NDEyNzQ1NDgyMiwxMTg1LjA5NzMwNzI3MjUzMjQsNzg5LjI0MTY1ODkyMjA1NzgsMTE2NS45NTc1MzYzNDI4OTQ5LDEyOTQuNzY2MjkxMTMwOTQ1LDExNTEuODEyMDUzNzg1NzYzNywyNjI1LjUzMDY1NTE3NDQzNDcsMTY3LjQzNDYyNzMyMTgwMjg4LDIuMDk2NDI1ODQyNjg0MzA1NAorMTgsRnJpIDExIEZlYiAxMSw5Ny45OTY2NjU0NTExNTI5OCw4Ny40OTY3MTQzMzc1MjE2LDUwLjkzMDIwOTQ4NTA2NTE3LDEwNS4yODYxMjEwMTE0MTAxNiwxMDYuMTI3MzUyNTQ1MTUzNjMsMTcxNS41OTAyNTM4Mzc4OTUsMTg2NC4zMzAxNTE1MzIzMDUsMTUyNy45OTY2MTgxMzk0Njg5LDEzMjcuMjE5MjYwMjk1MzY4MywxNjU5LjM1ODI1OTgyNjcwMzcsMzM2Ljk2Njg2NDgzMTc3OTUsMTk2OS44NDYwOTE4MTc4MzcsMzg5Ljg0Mzg5NTk3MTMyNjE2LDEwMzQuODg1NDkwNDE1OTYxOCw5MjQuOTk4OTk4NjE2Nzg2NiwyMTIzLjQxNjE3OTU3NDEzNDMsMTUzOC4zMzExNzkwODE4Mzk1LDQzMi42MzU3Nzk4NjA1MDU4LDEyNTkuMTY2NTE4NTYxODk5NSw4MzguNTY5NjgxODkwNTc1OSwxMjM4LjgzMDUwMTc4MTEyNTYsMTM3NS42ODk4NzIxNzMyODUzLDEyMjMuODAwOTE5MDQ5MzYzNSwyNzg5LjYyNzcxNTk0MDE4MzQsMTc3Ljg5OTM4MDQ3OTMyODI0LDIuMjI3NDUzNTcxNTgxNjQ1MworMTksU2F0IDEyIEZlYiAxMSwxMDMuNzYxMjI3MDY0MzI1NjcsOTIuNjQzNjI2MjA4NzI0MjEsNTMuOTI2MTMxMTIzNzk0NzEsMTExLjQ3OTQ3Nzk4NzI2MzExLDExMi4zNzAxOTQxNzQyMzMxNSwxODE2LjUwODIzNTg0OTYwNTksMTk3My45OTc2MTgwMzU2NDY4LDE2MTcuODc5NTgxMDg5NjIxLDE0MDUuMjkxNjg0MTM2OTI5NSwxNzU2Ljk2ODQ0NzcxNDg0MTcsMzU2Ljc4ODYyMzUxMDc4OTM2LDIwODUuNzIwNDM0MTk5NTMyLDQxMi43NzYwOTYyNDA1OTA5LDEwOTUuNzYxNjU1MzgxNTQyNiw5NzkuNDExMTk0MTI0Njc3MywyMjQ4LjMyNDEzNzgzMTc5OCwxNjI4LjgyMjA2Mjg1Mjc5ODQsNDU4LjA4NTE3MjQyNDkwOTEsMTMzMy4yMzU4MDM5MjA1MTQ5LDg4Ny44OTc3NTQxODcxNDE2LDEzMTEuNzAzNTQwMDkyMzU4NSwxNDU2LjYxMzUzNDEzOTI0NywxMjk1Ljc4OTg1NjMwMTg2NDgsMjk1My43MjQ5NDA4MDMwNzUsMTg4LjM2NDE0NDEwMTYxMTk3LDIuMzU4NDgxNDMxNTA2Nzc5NQorMjAsU3VuIDEzIEZlYiAxMSwxMDkuNTI1Nzk0NDQyMDYyOCw5Ny43OTA1NDMyMjY4NDEzLDU2LjkyMjA1NTc1ODQ0NzM5LDExNy42NzI4NDExNTY0NzYxMiwxMTguNjEzMDQyMDQ2MTU3MzcsMTkxNy40MjYzMTg3NzkzNDg4LDIwODMuNjY1MTk0MjA2NTA5NiwxNzA3Ljc2MjYzMzkyMjc4MDcsMTQ4My4zNjQxODYwNTA5NTMzLDE4NTQuNTc4NzMzMjEzMjE1OSwzNzYuNjEwNDAyMDExNTY3NzcsMjIwMS41OTQ4OTI0NTU2MjY1LDQzNS43MDgzMTk0NDIwNjczNiwxMTU2LjYzNzg4MTIyMzMxODEsMTAzMy44MjM0NDQwNDQ3OTA0LDIzNzMuMjMyMjIwOTk3NDgxLDE3MTkuMzEzMDM3MTE0Njg2LDQ4My41MzQ1OTA0Mzg3MTc2LDE0MDcuMzA1MTYzMzQ4NDUyOSw5MzcuMjI1ODc1ODExODAzOSwxMzg0LjU3NjY1MTI3NjY2NTQsMTUzNy41MzcyNzcwMjg5MTA3LDEzNjcuNzc4ODY1NTQzMzM5LDMxMTcuODIyMzI5NzYzMjcxMiwxOTguODI4OTE4MTg4NjY0NTUsMi40ODk1MDk0MjI0NTk4MzkKKzIxLE1vbiAxNCBGZWIgMTEsMTE1LjI5MDM2NzU4NDM3MDIyLDEwMi45Mzc0NjUzOTE4Nzc5NSw1OS45MTc5ODMzODkwMjYyMDUsMTIzLjg2NjIxMDUxOTA1NTQsMTI0Ljg1NTg5NjE2MDkzMjYsMjAxOC4zNDQ1MDI2MjcyMjU0LDIxOTMuMzMyODgwMDQ1MDAzNSwxNzk3LjY0NTc3NjYzOTAzODMsMTU2MS40MzY3NjYwMzc1MTg1LDE5NTIuMTg5MTE2MzIxOTI0NSwzOTYuNDMyMjAwMzM0MTM0NywyMzE3LjQ2OTQ2NjU4NjIzNzYsNDU4LjY0MDU2NTU3NTc3ODUsMTIxNy41MTQxNjc5NDEzNTA3LDEwODguMjM1NzQ4Mzc3MTgwNSwyNDk4LjE0MDQyOTA3MTMxMDMsMTgwOS44MDQxMDE4Njc1OTMsNTA4Ljk4NDAzMzkwMTk1NjksMTQ4MS4zNzQ1OTY4NDU3ODY4LDk4Ni41NTQwNDY3NjQ2MTI3LDE0NTcuNDQ5ODM1MzM0MTIwMywxNjE4LjQ2MTEwMDg0MjM1OCwxNDM5Ljc2Nzk0Njc3Mzg1ODMsMzI4MS45MTk4ODI4MjA5Mzk2LDIwOS4yOTM3MDI3NDA0OTY0NiwyLjYyMDUzNzU0NDQ0MDk1NTUKKzIyLFR1ZSAxNSBGZWIgMTEsMTIxLjA1NDk0NjQ5MTI1MzY2LDEwOC4wODQzOTI3MDM4MzkzMyw2Mi45MTM5MTQwMTU1MzQxNCwxMzAuMDU5NTg2MDc1MDA3MSwxMzEuMDk4NzU2NTE4NTY1MDQsMjExOS4yNjI3ODczOTMzMzYsMjMwMy4wMDA2NzU1NTEyMzgsMTg4Ny41MjkwMDkyMzg0ODM1LDE2MzkuNTA5NDI0MDk2NzAyMywyMDQ5Ljc5OTU5NzA0MTA2NSw0MTYuMjU0MDE4NDc4NTA5NzUsMjQzMy4zNDQxNTY1OTE0ODEsNDgxLjU3MjgzNDY0MTc0NzIsMTI3OC4zOTA1MTU1MzU3MDA0LDExNDIuNjQ4MTA3MTIxOTAyMywyNjIzLjA0ODc2MjA1MzQwOTUsMTkwMC4yOTUyNTcxMTE2MSw1MzQuNDMzNTAyODE0NjUyMywxNTU1LjQ0NDEwNDQxMjU5MSwxMDM1Ljg4MjI2NzA0NTYxNzUsMTUzMC4zMjMwOTIyNjQ3OTU2LDE2OTkuMzg1MDA1NTc5NjY5MywxNTExLjc1NzA5OTk5MzQ5NDksMzQ0Ni4wMTc1OTk5NzYyNDMsMjE5Ljc1ODQ5Nzc1NzExODE2LDIuNzUxNTY1Nzk3NDUwMjU4NQorMjMsV2VkIDE2IEZlYiAxMSwxMjYuODE5NTMxMTYyNzE4ODcsMTEzLjIzMTMyNTE2MjczMDYsNjUuOTA5ODQ3NjM3OTc0MjEsMTM2LjI1Mjk2NzgyNDMzNzQ1LDEzNy4zNDE2MjMxMTkwNjA5OCwyMjIwLjE4MTE3MzA3Nzc4MiwyNDEyLjY2ODU4MDcyNTMyMywxOTc3LjQxMjMzMTcyMTIwNjMsMTcxNy41ODIxNjAyMjg1ODMyLDIxNDcuNDEwMTc1MzcwNzM1NSw0MzYuMDc1ODU2NDQ0NzEyOCwyNTQ5LjIxODk2MjQ3MTQ3MSw1MDQuNTA1MTI2NjM5OTk2NSwxMzM5LjI2NjkyNDAwNjQyNzksMTE5Ny4wNjA1MjAyNzkwMTAyLDI3NDcuOTU3MjE5OTQzOTA0NCwxOTkwLjc4NjUwMjg0NjgyNzUsNTU5Ljg4Mjk5NzE3NjgyOTUsMTYyOS41MTM2ODYwNDg5NCwxMDg1LjIxMDUzNjY1NDg2NjUsMTYwMy4xOTY0MjIwNjg3NjQ0LDE3ODAuMzA4OTkxMjQwOTI2MiwxNTgzLjc0NjMyNTIwMjMyMDYsMzYxMC4xMTU0ODEyMjkzNDUzLDIzMC4yMjMzMDMyMzg1NDAwNywyLjg4MjU5NDE4MTQ4Nzg3OTUKKzI0LFRodSAxNyBGZWIgMTEsMTMyLjU4NDEyMTU5ODc3MTY1LDExOC4zNzgyNjI3Njg1NTY5Miw2OC45MDU3ODQyNTYzNDkzNiwxNDIuNDQ2MzU1NzY3MDUyNjcsMTQzLjU4NDQ5NTk2MjQyNjYyLDIzMjEuMDk5NjU5NjgwNjYzNSwyNTIyLjMzNjU5NTU2NzM2OCwyMDY3LjI5NTc0NDA4NzI5NjUsMTc5NS42NTQ5NzQ0MzMyMzkyLDIyNDUuMDIwODUxMzExMDMyNCw0NTUuODk3NzE0MjMyNzYzNzUsMjY2NS4wOTM4ODQyMjYzMjU0LDUyNy40Mzc0NDE1NzA1NDkzLDE0MDAuMTQzMzkzMzUzNTk0LDEyNTEuNDcyOTg3ODQ4NTU4MiwyODcyLjg2NTgwMjc0MjkxOTYsMjA4MS4yNzc4MzkwNzMzMzYsNTg1LjMzMjUxNjk4ODUxMzYsMTcwMy41ODMzNDE3NTQ5MDcyLDExMzQuNTM4ODU1NTkyNDA5NiwxNjc2LjA2OTgyNDc0NjA5OTEsMTg2MS4yMzMwNTc4MjYyMDkyLDE2NTUuNzM1NjIyNDAwNDA3NSwzNzc0LjIxMzUyNjU4MDQxMDQsMjQwLjY4ODExOTE4NDc3MjY2LDMuMDEzNjIyNjk2NTUzOTUwOAorMjUsRnJpIDE4IEZlYiAxMSwxMzguMzQ4NzE3Nzk5NDE3NzMsMTIzLjUyNTIwNTUyMTMyMzQxLDcxLjkwMTcyMzg3MDY2MjY1LDE0OC42Mzk3NDk5MDMxNTksMTQ5LjgyNzM3NTA0ODY2ODMsMjQyMi4wMTgyNDcyMDIwODI0LDI2MzIuMDA0NzIwMDc3NDgzLDIxNTcuMTc5MjQ2MzM2ODQ0LDE4NzMuNzI3ODY2NzEwNzQ4NywyMzQyLjYzMTYyNDg2MjA1NDcsNDc1LjcxOTU5MTg0MjY4MjQsMjc4MC45Njg5MjE4NTYxNjAzLDU1MC4zNjk3Nzk0MzM0Mjg0LDE0NjEuMDE5OTIzNTc3MjYwNywxMzA1Ljg4NTUwOTgzMDYwMTIsMjk5Ny43NzQ1MTA0NTA1ODAyLDIxNzEuNzY5MjY1NzkxMjI3LDYxMC43ODIwNjIyNDk3MzA0LDE3NzcuNjUzMDcxNTMwNTY3OCwxMTgzLjg2NzIyMzg1ODI5NjcsMTc0OC45NDMzMDAyOTY4NzM1LDE5NDIuMTU3MjA1MzM1NTk5NywxNzI3LjcyNDk5MTU4NzgyOCwzOTM4LjMxMTczNjAyOTYwMzcsMjUxLjE1Mjk0NTU5NTgyNjU0LDMuMTQ0NjUxMzQyNjQ4NjAzCisyNixTYXQgMTkgRmViIDExLDE0NC4xMTMzMTk3NjQ2NjI5MiwxMjguNjcyMTUzNDIxMDM1Miw3NC44OTc2NjY0ODA5MTcwOCwxNTQuODMzMTUwMjMyNjYyNSwxNTYuMDcwMjYwMzc3NzkyMTIsMjUyMi45MzY5MzU2NDIxMzk0LDI3NDEuNjcyOTU0MjU1Nzc3LDIyNDcuMDYyODM4NDY5OTM4NSwxOTUxLjgwMDgzNzA2MTE4OTIsMjQ0MC4yNDI0OTYwMjM4OTksNDk1LjU0MTQ4OTI3NDQ4ODYsMjg5Ni44NDQwNzUzNjEwOTAzLDU3My4zMDIxNDAyMjg2NTcsMTUyMS44OTY1MTQ2Nzc0ODc2LDEzNjAuMjk4MDg2MjI1MTkzMiwzMTIyLjY4MzM0MzA2NzAxMTMsMjI2Mi4yNjA3ODMwMDA1ODg2LDYzNi4yMzE2MzI5NjA1MDUyLDE4NTEuNzIyODc1Mzc1OTk1LDEyMzMuMTk1NjQxNDUyNTc2NCwxODIxLjgxNjg0ODcyMTE1OTcsMjAyMy4wODE0MzM3NjkxNzc1LDE3OTkuNzE0NDMyNzY0NjUzLDQxMDIuNDEwMTA5NTc3MDg3NSwyNjEuNjE3NzgyNDcxNzExOTYsMy4yNzU2ODAxMTk3NzE5NjYKKzI3LFN1biAyMCBGZWIgMTEsMTQ5Ljg3NzkyNzQ5NDUxMjkzLDEzMy44MTkxMDY0Njc2OTc1LDc3Ljg5MzYxMjA4NzExNTYsMTYxLjAyNjU1Njc1NTU2OTQ2LDE2Mi4zMTMxNTE5NDk4MDQ0MiwyNjIzLjg1NTcyNTAwMDkzNSwyODUxLjM0MTI5ODEwMjM1OTQsMjMzNi45NDY1MjA0ODY2NzA2LDIwMjkuODczODg1NDg0NjM5MiwyNTM3Ljg1MzQ2NDc5NjY2NCw1MTUuMzYzNDA2NTI4MjAyMiwzMDEyLjcxOTM0NDc0MTIzMiw1OTYuMjM0NTIzOTU2MjU3NywxNTgyLjc3MzE2NjY1NDMzNjEsMTQxNC43MTA3MTcwMzIzODkzLDMyNDcuNTkyMzAwNTkyMzM3MywyMzUyLjc1MjM5MDcwMTUxNCw2NjEuNjgxMjI5MTIwODYzMywxOTI1Ljc5Mjc1MzI5MTI2MzEsMTI4Mi41MjQxMDgzNzUyOTg1LDE4OTQuNjkwNDcwMDE5MDMwNSwyMTA0LjAwNTc0MzEyNzAyNDcsMTg3MS43MDM5NDU5MzA5NTU4LDQyNjYuNTA4NjQ3MjIzMDI5LDI3Mi4wODI2Mjk4MTI0Mzk1LDMuNDA2NzA5MDI3OTI0MTczCisyOCxNb24gMjEgRmViIDExLDE1NS42NDI1NDA5ODg5NzM1NCwxMzguOTY2MDY0NjYxMzE1NCw4MC44ODk1NjA2ODkyNjEyMiwxNjcuMjE5OTY5NDcxODg1OTUsMTY4LjU1NjA0OTc2NDcxMTQsMjcyNC43NzQ2MTUyNzg1NywyOTYxLjAwOTc1MTYxNzM0LDI0MjYuODMwMjkyMzg3MTI4LDIxMDcuOTQ3MDExOTgxMTc3LDI2MzUuNDY0NTMxMTgwNDQ0Nyw1MzUuMTg1MzQzNjAzODQyOSwzMTI4LjU5NDcyOTk5NjcwMDYsNjE5LjE2NjkzMDYxNjI1MzUsMTY0My42NDk4Nzk1MDc4NjcsMTQ2OS4xMjM0MDIyNTIyNDMsMzM3Mi41MDEzODMwMjY2ODMsMjQ0My4yNDQwODg4OTQwOTEsNjg3LjEzMDg1MDczMDgzMDIsMTk5OS44NjI3MDUyNzY0NDU1LDEzMzEuODUyNjI0NjI2NTEyNCwxOTY3LjU2NDE2NDE5MDU1ODYsMjE4NC45MzAxMzM0MDkyMjA2LDE5NDMuNjkzNTMxMDg2ODA3LDQ0MzAuNjA3MzQ4OTY3NTg2LDI4Mi41NDc0ODc2MTgwMTk2LDMuNTM3NzM4MDY3MTA1MzUyNAorMjksVHVlIDIyIEZlYiAxMSwxNjEuNDA3MTYwMjQ4MDUwNTMsMTQ0LjExMzAyODAwMTg5NDA3LDgzLjg4NTUxMjI4NzM1Njk1LDE3My40MTMzODgzODE2MTgzMiwxNzQuNzk4OTUzODIyNTE5MzQsMjgyNS42OTM2MDY0NzUxNDUsMzA3MC42NzgzMTQ4MDA4MzAzLDI1MTYuNzE0MTU0MTcxNDAzLDIxODYuMDIwMjE2NTUwODgwNCwyNzMzLjA3NTY5NTE3NTM0MDYsNTU1LjAwNzMwMDUwMTQzMDcsMzI0NC40NzAyMzExMjc2MTIsNjQyLjA5OTM2MDIwODY2NzYsMTcwNC41MjY2NTMyMzgxNDEzLDE1MjMuNTM2MTQxODg0ODA5LDM0OTcuNDEwNTkwMzcwMTczNCwyNTMzLjczNTg3NzU3ODQxMTQsNzEyLjU4MDQ5Nzc5MDQzMTcsMjA3My45MzI3MzEzMzE2MTc2LDEzODEuMTgxMTkwMjA2MjY3MywyMDQwLjQzNzkzMTIzNTgxNzgsMjI2NS44NTQ2MDQ2MTU4NDgsMjAxNS42ODMxODgyMzIyODAxLDQ1OTQuNzA2MjE0ODEwOTMsMjkzLjAxMjM1NTg4ODQ2MjcsMy42Njg3NjcyMzczMTU2Mzc3CiszMCxXZWQgMjMgRmViIDExLDE2Ny4xNzE3ODUyNzE3NDk2OCwxNDkuMjU5OTk2NDg5NDM4NjMsODYuODgxNDY2ODgxNDA1NzQsMTc5LjYwNjgxMzQ4NDc3MjcsMTgxLjA0MTg2NDEyMzIzNDQsMjkyNi42MTI2OTg1OTA3NjE3LDMxODAuMzQ2OTg3NjUyOTM3NSwyNjA2LjU5ODEwNTgzOTU4NSwyMjY0LjA5MzQ5OTE5MzgyNywyODMwLjY4Njk1Njc4MTQ0OTcsNTc0LjgyOTI3NzIyMDk4NSwzMzYwLjM0NTg0ODEzNDA4MTcsNjY1LjAzMTgxMjczMzUyMjUsMTc2NS40MDM0ODc4NDUyMTkyLDE1NzcuOTQ4OTM1OTMwMTQxNSwzNjIyLjMxOTkyMjYyMjkzNCwyNjI0LjIyNzc1Njc1NDU2NTcsNzM4LjAzMDE3MDI5OTY5MjUsMjE0OC4wMDI4MzE0NTY4NTI2LDE0MzAuNTA5ODA1MTE0NjEyMiwyMTEzLjMxMTc3MTE1NDg4LDIzNDYuNzc5MTU2NzQ2OTg2NywyMDg3LjY3MjkxNzM2NzQ0Niw0NzU4LjgwNTI0NDc1MzIyMSwzMDMuNDc3MjM0NjIzNzc5MywzLjc5OTc5NjUzODU1NTE1NworMzEsVGh1IDI0IEZlYiAxMSwxNzIuOTM2NDE2MDYwMDc2NjgsMTU0LjQwNjk3MDEyMzk1NDI3LDg5Ljg3NzQyNDQ3MTQxMDY1LDE4NS44MDAyNDQ3ODEzNTUyNywxODcuMjg0NzgwNjY2ODYyOSwzMDI3LjUzMTg5MTYyNTUyMiwzMjkwLjAxNTc3MDE3Mzc3MywyNjk2LjQ4MjE0NzM5MTc2MzYsMjM0Mi4xNjY4NTk5MTAwOTU0LDI5MjguMjk4MzE1OTk4ODcsNTk0LjY1MTI3Mzc2MjUyNjIsMzQ3Ni4yMjE1ODEwMTYyMjc0LDY4Ny45NjQyODgxOTA4NDE3LDE4MjYuMjgwMzgzMzI5MTYyLDE2MzIuMzYxNzg0Mzg4Mjk1NywzNzQ3LjIyOTM3OTc4NTA4OTMsMjcxNC43MTk3MjY0MjI2NDQ3LDc2My40Nzk4NjgyNTg2Mzg4LDIyMjIuMDczMDA1NjUyMjI1LDE0NzkuODM4NDY5MzUxNTk3LDIxODYuMTg1NjgzOTQ3ODE4NywyNDI3LjcwMzc4OTgwMjcxODMsMjE1OS42NjI3MTg0OTIzNzcsNDkyMi45MDQ0Mzg3OTQ2MjUsMzEzLjk0MjEyMzgyMzk3OTksMy45MzA4MjU5NzA4MjQwNDQzCiszMixGcmkgMjUgRmViIDExLDE3OC43MDEwNTI2MTMwMzc0LDE1OS41NTM5NDg5MDU0NDYxMyw5Mi44NzMzODUwNTczNzQ2MywxOTEuOTkzNjgyMjcxMzcyMiwxOTMuNTI3NzAzNDUzNDExMDUsMzEyOC40NTExODU1Nzk1MjYsMzM5OS42ODQ2NjIzNjM0NDQ3LDI3ODYuMzY2Mjc4ODI4MDI4NSwyNDIwLjI0MDI5ODY5OTc2MywzMDI1LjkwOTc3MjgyNzY5NzUsNjE0LjQ3MzI5MDEyNjA3MzYsMzU5Mi4wOTc0Mjk3NzQxNjQsNzEwLjg5Njc4NjU4MDY0NzgsMTg4Ny4xNTczMzk2OTAwMzEyLDE2ODYuNzc0Njg3MjU5MzI1MiwzODcyLjEzODk2MTg1Njc2NCwyODA1LjIxMTc4NjU4MjczODYsNzg4LjkyOTU5MTY2NzI5NTksMjI5Ni4xNDMyNTM5MTc4MDg2LDE1MjkuMTY3MTgyOTE3MjcwMywyMjU5LjA1OTY2OTYxNDcwNjgsMjUwOC42Mjg1MDM3ODMxMjI2LDIyMzEuNjUyNTkxNjA3MTQ0LDUwODcuMDAzNzk2OTM1MzA0LDMyNC40MDcwMjM0ODkwNzQ5Niw0LjA2MTg1NTUzNDEyMjQyODUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvRGVtb2dyYXBoaWNTRUlSRGlzZWFzZV9SS19SZWZlcmVuY2UvRGVtb2dyYXBoaWNNb2RlbC9tZW4vRGVuc2l0eV8yLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvRGVtb2dyYXBoaWNTRUlSRGlzZWFzZV9SS19SZWZlcmVuY2UvRGVtb2dyYXBoaWNNb2RlbC9tZW4vRGVuc2l0eV8yLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YWEzMTM1Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9EZW1vZ3JhcGhpY1NFSVJEaXNlYXNlX1JLX1JlZmVyZW5jZS9EZW1vZ3JhcGhpY01vZGVsL21lbi9EZW5zaXR5XzIuY3N2CkBAIC0wLDAgKzEsMzMgQEAKK2l0ZXJhdGlvbix0aW1lLEVHLUZSRy1HMjEwMDAxLEVHLUZSRy1HMjEwMDAyLEVHLUZSRy1HMjEwMDAzLEVHLUZSRy1HMjEwMDA0LEVHLUZSRy1HMjEwMDA1LEVHLUxPRS1HMjQwMDAxLEVHLUxPRS1HMjQwMDAyLEVHLUxPRS1HMjQwMDAzLEVHLUxPRS1HMjQwMDA0LEVHLUxPRS1HMjQwMDA1LEVHLUxPRS1HMjQwMDA2LEVHLUxPRS1HMjQwMDA3LEVHLUxPRS1HMjQwMDA4LEVHLUxPRS1HMjQwMDA5LEVHLVVQRS1HMjkwMDAxLEVHLVVQRS1HMjkwMDAyLEVHLVVQRS1HMjkwMDAzLEVHLVVQRS1HMjkwMDA0LEVHLVVQRS1HMjkwMDA1LEVHLVVQRS1HMjkwMDA2LEVHLVVQRS1HMjkwMDA3LEVHLVVQRS1HMjkwMDA4LEVHLVVSRy1HMzAwMDAxLEVHLVVSRy1HMzAwMDAyLEVHLVVSRy1HMzAwMDAzLEVHLVVSRy1HMzAwMDA0CisxLFR1ZSAyNSBKYW4gMTEsMC44NTcwNzQ5MjkxNTgyMjkxLDAuMjkxMjk2NzEwMDY1OTg5MSwyLjY2NjY1MTM2NjE4Mzk1NzMsMS4wMDE2NTY2Njg5NDgzOTgsNS44MzEwOTgyNDUwMDY3MDMsMjE0LjQyMzIzNTY2OTUyMDIsNzUzLjIyNDM0MTM4NzY0MzIsMTE5MS42NDk5NjE3MTE2MDc4LDEzNTkuNTYzOTY5OTcyMTkyOCwyNjcwLjIwMzI3Njg2NDMwMzUsOTAuMTUzNjcyNDE0NjU1ODIsNTcwLjAwMzI1OTQ3ODA5MzYsNzkwLjMxNTY1MjAyODksNDE2LjI2MjE5ODIwMjc5NDksMjIyLjE2Mjc4Njc3Nzk5NjYsODUuMTY5NDUzMDUwMjE3MzcsMTE2LjI5MjE4NzQ5Nzk1MzUzLDQwLjUzNDUzNTE4NjUxMzg2LDc3Mi43NDY1NTUzODMzNDA3LDI1My44MjMwNDQ4Mjg1NzgzNiw0ODQuNzcyNDAxNTk5MDg3MSw3ODcuOTI3OTE4MjI0NzA4Miw3NjAuMjkyMzk3ODU2NDQzNCwxMzMyLjA1MDM3NDM5NTk1MjMsMzAuNTU3MTc3NjE5ODY3NjksOC42Mjk5MjUzMDY5Mzc3MDcKKzIsV2VkIDI2IEphbiAxMSwwLjg1NzA3NTc4NjIzMzU4NjcsMC4yOTEyOTcwMDEzNjI4NDQ1MywyLjY2NjY1NDAzMjgzNjY1NywxLjAwMTY1NzY3MDYwNTU2NzgsNS44MzExMDQwNzYxMDc4NjY1LDIxNC40MjM0NTAwOTI4NjMyNSw3NTMuMjI1MDk0NjEyMzYxNCwxMTkxLjY1MTE1MzM2MjE2NTEsMTM1OS41NjUzMjk1MzY4NDMxLDI2NzAuMjA1OTQ3MDY4OTE1LDkwLjE1Mzc2MjU2ODM3MzMyLDU3MC4wMDM4Mjk0ODE2Mzc4LDc5MC4zMTY0NDIzNDQ5NDY3LDQxNi4yNjI2MTQ0NjUyMDA5NSwyMjIuMTYzMDA4OTQwODk0NjMsODUuMTY5NTM4MjE5NzEyOTYsMTE2LjI5MjMwMzc5MDE5OTA3LDQwLjUzNDU3NTcyMTA2OTMxLDc3Mi43NDczMjgxMzAyODI3LDI1My44MjMyOTg2NTE3NTAxOCw0ODQuNzcyODg2MzcxNzMxMjYsNzg3LjkyODcwNjE1MzAyMDIsNzYwLjI5MzE1ODE0OTIyMTUsMTMzMi4wNTE3MDY0NDY5OTI3LDMwLjU1NzIwODE3NzA2MDU1Niw4LjYyOTkzMzkzNjg2NzMyNAorMyxUaHUgMjcgSmFuIDExLDAuODU3MDc2NjQzMzA5ODAxMiwwLjI5MTI5NzI5MjY1OTk5MTY2LDIuNjY2NjU2Njk5NDkyMDIyNywxLjAwMTY1ODY3MjI2Mzc0MDIsNS44MzExMDk5MDcyMTQ4NTg0LDIxNC40MjM2NjQ1MTY0MjA2LDc1My4yMjU4NDc4Mzc4MzI1LDExOTEuNjUyMzQ1MDEzOTE0LDEzNTkuNTY2Njg5MTAyODUzLDI2NzAuMjA4NjE3Mjc2MTk4OCw5MC4xNTM4NTI3MjIxODA5Nyw1NzAuMDA0Mzk5NDg1NzUyNSw3OTAuMzE3MjMyNjYxNzg0LDQxNi4yNjMwMzA3MjgwMjM1LDIyMi4xNjMyMzExMDQwMTQ2Nyw4NS4xNjk2MjMzODkyOTM4LDExNi4yOTI0MjAwODI1NjA5Nyw0MC41MzQ2MTYyNTU2NjUzMSw3NzIuNzQ4MTAwODc3OTk3LDI1My44MjM1NTI0NzUxNzU3LDQ4NC43NzMzNzExNDQ4NTk5LDc4Ny45Mjk0OTQwODIxMjAyLDc2MC4yOTM5MTg0NDI3NTk2LDEzMzIuMDUzMDM4NDk5MzY1LDMwLjU1NzIzODczNDI4NDAxLDguNjI5OTQyNTY2ODA1NTc1Cis0LEZyaSAyOCBKYW4gMTEsMC44NTcwNzc1MDAzODY4NzMyLDAuMjkxMjk3NTgzOTU3NDI5OSwyLjY2NjY1OTM2NjE1MDA1NTcsMS4wMDE2NTk2NzM5MjI5MTI3LDUuODMxMTE1NzM4MzI3NjgxLDIxNC40MjM4Nzg5NDAxOTIzNyw3NTMuMjI2NjAxMDY0MDU3LDExOTEuNjUzNTM2NjY2ODU1LDEzNTkuNTY4MDQ4NjcwMjIxNSwyNjcwLjIxMTI4NzQ4NjE1MSw5MC4xNTM5NDI4NzYwNzg3Nyw1NzAuMDA0OTY5NDkwNDM2OSw3OTAuMzE4MDIyOTc5NDEyMSw0MTYuMjYzNDQ2OTkxMjYyMzYsMjIyLjE2MzQ1MzI2NzM1Njg2LDg1LjE2OTcwODU1ODk1OTc3LDExNi4yOTI1MzYzNzUwMzkyLDQwLjUzNDY1Njc5MDMwMTgyNCw3NzIuNzQ4ODczNjI2NDg0NCwyNTMuODIzODA2Mjk4ODU1MTIsNDg0Ljc3Mzg1NTkxODQ3MzQzLDc4Ny45MzAyODIwMTIwMDgyLDc2MC4yOTQ2Nzg3MzcwNTgzLDEzMzIuMDU0MzcwNTUzMDcwNCwzMC41NTcyNjkyOTE1MzgwMSw4LjYyOTk1MTE5Njc1MjQ1NAorNSxTYXQgMjkgSmFuIDExLDAuODU3MDc4MzU3NDY0ODAyLDAuMjkxMjk3ODc1MjU1MTU5NDMsMi42NjY2NjIwMzI4MTA3NTY0LDEuMDAxNjYwNjc1NTgzMDg3LDUuODMxMTIxNTY5NDQ2MzM0LDIxNC40MjQwOTMzNjQxNzg1Niw3NTMuMjI3MzU0MjkxMDM0OCwxMTkxLjY1NDcyODMyMDk4NywxMzU5LjU2OTQwODIzODk1MDIsMjY3MC4yMTM5NTc2OTg3NzM0LDkwLjE1NDAzMzAzMDA2Njc2LDU3MC4wMDU1Mzk0OTU2OTE0LDc5MC4zMTg4MTMyOTc4MzAzLDQxNi4yNjM4NjMyNTQ5MTc0LDIyMi4xNjM2NzU0MzA5MjEyLDg1LjE2OTc5MzcyODcxMDkxLDExNi4yOTI2NTI2Njc2MzM3LDQwLjUzNDY5NzMyNDk3ODg4Niw3NzIuNzQ5NjQ2Mzc1NzQ0NCwyNTMuODI0MDYwMTIyNzg4MzgsNDg0Ljc3NDM0MDY5MjU3MTg1LDc4Ny45MzEwNjk5NDI2ODQzLDc2MC4yOTU0MzkwMzIxMTcyLDEzMzIuMDU1NzAyNjA4MTA3LDMwLjU1NzI5OTg0ODgyMjU5LDguNjI5OTU5ODI2NzA3OTY2Cis2LFN1biAzMCBKYW4gMTEsMC44NTcwNzkyMTQ1NDM1ODgzLDAuMjkxMjk4MTY2NTUzMTgwMzYsMi42NjY2NjQ2OTk0NzQxMjM0LDEuMDAxNjYxNjc3MjQ0MjYzMiw1LjgzMTEyNzQwMDU3MDgxNywyMTQuNDI0MzA3Nzg4Mzc5MTcsNzUzLjIyODEwNzUxODc2NTcsMTE5MS42NTU5MTk5NzYzMTA4LDEzNTkuNTcwNzY3ODA5MDM4NCwyNjcwLjIxNjYyNzkxNDA2NjUsOTAuMTU0MTIzMTg0MTQ0ODYsNTcwLjAwNjEwOTUwMTUxNiw3OTAuMzE5NjAzNjE3MDM4Niw0MTYuMjY0Mjc5NTE4OTg4OCwyMjIuMTYzODk3NTk0NzA3Nyw4NS4xNjk4Nzg4OTg1NDcyMiwxMTYuMjkyNzY4OTYwMzQ0NTMsNDAuNTM0NzM3ODU5Njk2NDgsNzcyLjc1MDQxOTEyNTc3NzMsMjUzLjgyNDMxMzk0Njk3NTUsNDg0Ljc3NDgyNTQ2NzE1NDksNzg3LjkzMTg1Nzg3NDE0ODQsNzYwLjI5NjE5OTMyNzkzNjUsMTMzMi4wNTcwMzQ2NjQ0NzU5LDMwLjU1NzMzMDQwNjEzNzczLDguNjI5OTY4NDU2NjcyMTA2Cis3LE1vbiAzMSBKYW4gMTEsMC44NTcwODAwNzE2MjMyMzE1LDAuMjkxMjk4NDU3ODUxNDkyNTUsMi42NjY2NjczNjYxNDAxNTU0LDEuMDAxNjYyNjc4OTA2NDQxMSw1LjgzMTEzMzIzMTcwMTEzMiwyMTQuNDI0NTIyMjEyNzk0Miw3NTMuMjI4ODYwNzQ3MjQ5OSwxMTkxLjY1NzExMTYzMjgyNjYsMTM1OS41NzIxMjczODA0ODYsMjY3MC4yMTkyOTgxMzIwMzA0LDkwLjE1NDIxMzMzODMxMzExLDU3MC4wMDY2Nzk1MDc5MTA1LDc5MC4zMjAzOTM5MzcwMzc1LDQxNi4yNjQ2OTU3ODM0NzY0NCwyMjIuMTY0MTE5NzU4NzE2MzQsODUuMTY5OTY0MDY4NDY4NzIsMTE2LjI5Mjg4NTI1MzE3MTYzLDQwLjUzNDc3ODM5NDQ1NDYwNSw3NzIuNzUxMTkxODc2NTgyNywyNTMuODI0NTY3NzcxNDE2NCw0ODQuNzc1MzEwMjQyMjIyOCw3ODcuOTMyNjQ1ODA2NDAwMiw3NjAuMjk2OTU5NjI0NTE2LDEzMzIuMDU4MzY2NzIyMTc2MywzMC41NTczNjA5NjM0ODM0MSw4LjYyOTk3NzA4NjY0NDg4Cis4LFR1ZSAxIEZlYiAxMSwwLjg1NzA4MDkyODcwMzczMTgsMC4yOTEyOTg3NDkxNTAwOTYwNywyLjY2NjY3MDAzMjgwODg1NSwxLjAwMTY2MzY4MDU2OTYyMDYsNS44MzExMzkwNjI4MzcyODEsMjE0LjQyNDczNjYzNzQyMzU2LDc1My4yMjk2MTM5NzY0ODcsMTE5MS42NTgzMDMyOTA1MzQsMTM1OS41NzM0ODY5NTMyOTMyLDI2NzAuMjIxOTY4MzUyNjY0LDkwLjE1NDMwMzQ5MjU3MTUxLDU3MC4wMDcyNDk1MTQ4NzQ4LDc5MC4zMjExODQyNTc4MjYyLDQxNi4yNjUxMTIwNDgzODAzMywyMjIuMTY0MzQxOTIyOTQ3MjIsODUuMTcwMDQ5MjM4NDc1MzQsMTE2LjI5MzAwMTU0NjExNSw0MC41MzQ4MTg5MjkyNTMyNyw3NzIuNzUxOTY0NjI4MTYwNywyNTMuODI0ODIxNTk2MTExMTIsNDg0Ljc3NTc5NTAxNzc3NTY0LDc4Ny45MzM0MzM3Mzk0Mzk5LDc2MC4yOTc3MTk5MjE4NTU4LDEzMzIuMDU5Njk4NzgxMjA5MSwzMC41NTczOTE1MjA4NTk2NjcsOC42Mjk5ODU3MTY2MjYyODEKKzksV2VkIDIgRmViIDExLDAuODU3MDgxNzg1Nzg1MDg4OSwwLjI5MTI5OTA0MDQ0ODk5MDksMi42NjY2NzI2OTk0ODAyMjE1LDEuMDAxNjY0NjgyMjMzODAxOCw1LjgzMTE0NDg5Mzk3OTI1OCwyMTQuNDI0OTUxMDYyMjY3NCw3NTMuMjMwMzY3MjA2NDc3NSwxMTkxLjY1OTQ5NDk0OTQzMjcsMTM1OS41NzQ4NDY1Mjc0NiwyNjcwLjIyNDYzODU3NTk2Nyw5MC4xNTQzOTM2NDY5MjAxLDU3MC4wMDc4MTk1MjI0MDk0LDc5MC4zMjE5NzQ1Nzk0MDU2LDQxNi4yNjU1MjgzMTM3MDA2LDIyMi4xNjQ1NjQwODc0MDAzLDg1LjE3MDEzNDQwODU2NzE2LDExNi4yOTMxMTc4MzkxNzQ3LDQwLjUzNDg1OTQ2NDA5MjQ1Niw3NzIuNzUyNzM3MzgwNTExOSwyNTMuODI1MDc1NDIxMDU5Niw0ODQuNzc2Mjc5NzkzODEzMDUsNzg3LjkzNDIyMTY3MzI2NzYsNzYwLjI5ODQ4MDIxOTk1NiwxMzMyLjA2MTAzMDg0MTU3MzcsMzAuNTU3NDIyMDc4MjY2NDc3LDguNjI5OTk0MzQ2NjE2MzE0CisxMCxUaHUgMyBGZWIgMTEsMC44NTcwODI2NDI4NjczMDMsMC4yOTEyOTkzMzE3NDgxNzcsMi42NjY2NzUzNjYxNTQyNTUsMS4wMDE2NjU2ODM4OTg5ODQ2LDUuODMxMTUwNzI1MTI3MDY3LDIxNC40MjUxNjU0ODczMjU3LDc1My4yMzExMjA0MzcyMjEzLDExOTEuNjYwNjg2NjA5NTIzMywxMzU5LjU3NjIwNjEwMjk4NjQsMjY3MC4yMjczMDg4MDE5NDIsOTAuMTU0NDgzODAxMzU4ODIsNTcwLjAwODM4OTUzMDUxMzgsNzkwLjMyMjc2NDkwMTc3NTQsNDE2LjI2NTk0NDU3OTQzNzEsMjIyLjE2NDc4NjI1MjA3NTUsODUuMTcwMjE5NTc4NzQ0MTgsMTE2LjI5MzIzNDEzMjM1MDcsNDAuNTM0ODk5OTk4OTcyMTg2LDc3Mi43NTM1MTAxMzM2MzU2LDI1My44MjUzMjkyNDYyNjE5LDQ4NC43NzY3NjQ1NzAzMzUzLDc4Ny45MzUwMDk2MDc4ODMxLDc2MC4yOTkyNDA1MTg4MTYzLDEzMzIuMDYyMzYyOTAzMjcxLDMwLjU1NzQ1MjYzNTcwMzgzNiw4LjYzMDAwMjk3NjYxNDk3NworMTEsRnJpIDQgRmViIDExLDAuODU3MDgzNDk5OTUwMzc0NCwwLjI5MTI5OTYyMzA0NzY1NDU1LDIuNjY2Njc4MDMyODMwOTU1LDEuMDAxNjY2Njg1NTY1MTY5NSw1LjgzMTE1NjU1NjI4MDcwNywyMTQuNDI1Mzc5OTEyNTk4NDMsNzUzLjIzMTg3MzY2ODcxODQsMTE5MS42NjE4NzgyNzA4MDU2LDEzNTkuNTc3NTY1Njc5ODcxNywyNjcwLjIyOTk3OTAzMDU4Niw5MC4xNTQ1NzM5NTU4ODc3LDU3MC4wMDg5NTk1MzkxODg0LDc5MC4zMjM1NTUyMjQ5MzUzLDQxNi4yNjYzNjA4NDU1ODk3NiwyMjIuMTY1MDA4NDE2OTcyODIsODUuMTcwMzA0NzQ5MDA2MzUsMTE2LjI5MzM1MDQyNTY0Mjk4LDQwLjUzNDk0MDUzMzg5MjQ0LDc3Mi43NTQyODI4ODc1MzIxLDI1My44MjU1ODMwNzE3MTgxLDQ4NC43NzcyNDkzNDczNDIxNSw3ODcuOTM1Nzk3NTQzMjg2OCw3NjAuMzAwMDAwODE4NDM3MSwxMzMyLjA2MzY5NDk2NjI5OTksMzAuNTU3NDgzMTkzMTcxNzUsOC42MzAwMTE2MDY2MjIyNjcKKzEyLFNhdCA1IEZlYiAxMSwwLjg1NzA4NDM1NzAzNDMwMjcsMC4yOTEyOTk5MTQzNDc0MjMyNSwyLjY2NjY4MDY5OTUxMDMyMSwxLjAwMTY2NzY4NzIzMjM1Niw1LjgzMTE2MjM4NzQ0MDE4LDIxNC40MjU1OTQzMzgwODU2LDc1My4yMzI2MjY5MDA5Njg3LDExOTEuNjYzMDY5OTMzMjgwMiwxMzU5LjU3ODkyNTI1ODExNzQsMjY3MC4yMzI2NDkyNjE5MDA0LDkwLjE1NDY2NDExMDUwNjcyLDU3MC4wMDk1Mjk1NDg0MzI3LDc5MC4zMjQzNDU1NDg4ODU4LDQxNi4yNjY3NzcxMTIxNTg3NiwyMjIuMTY1MjMwNTgyMDkyMyw4NS4xNzAzODk5MTkzNTM3LDExNi4yOTM0NjY3MTkwNTE2MSw0MC41MzQ5ODEwNjg4NTMyNCw3NzIuNzU1MDU1NjQyMjAxMywyNTMuODI1ODM2ODk3NDI4MDUsNDg0Ljc3NzczNDEyNDgzMzksNzg3LjkzNjU4NTQ3OTQ3ODMsNzYwLjMwMDc2MTExODgxODIsMTMzMi4wNjUwMjcwMzA2NjAzLDMwLjU1NzUxMzc1MDY3MDIyLDguNjMwMDIwMjM2NjM4MTg2CisxMyxTdW4gNiBGZWIgMTEsMC44NTcwODUyMTQxMTkwODg0LDAuMjkxMzAwMjA1NjQ3NDgzMjcsMi42NjY2ODMzNjYxOTIzNTMyLDEuMDAxNjY4Njg4OTAwNTQ0Miw1LjgzMTE2ODIxODYwNTQ4MiwyMTQuNDI1ODA4NzYzNzg3MTMsNzUzLjIzMzM4MDEzMzk3MjEsMTE5MS42NjQyNjE1OTY5NDYsMTM1OS41ODAyODQ4Mzc3MjIzLDI2NzAuMjM1MzE5NDk1ODg1LDkwLjE1NDc1NDI2NTIxNTkxLDU3MC4wMTAwOTk1NTgyNDc1LDc5MC4zMjUxMzU4NzM2MjY0LDQxNi4yNjcxOTMzNzkxNDQwMywyMjIuMTY1NDUyNzQ3NDM0MDIsODUuMTcwNDc1MDg5Nzg2MiwxMTYuMjkzNTgzMDEyNTc2NDYsNDAuNTM1MDIxNjAzODU0NTc0LDc3Mi43NTU4MjgzOTc2NDM1LDI1My44MjYwOTA3MjMzOTE4Nyw0ODQuNzc4MjE4OTAyODEwNDcsNzg3LjkzNzM3MzQxNjQ1NzYsNzYwLjMwMTUyMTQxOTk1OTUsMTMzMi4wNjYzNTkwOTYzNTM0LDMwLjU1NzU0NDMwODE5OTI1OCw4LjYzMDAyODg2NjY2MjczNworMTQsTW9uIDcgRmViIDExLDAuODU3MDg2MDcxMjA0NzMxMSwwLjI5MTMwMDQ5Njk0NzgzNDYsMi42NjY2ODYwMzI4NzcwNTI1LDEuMDAxNjY5NjkwNTY5NzM0LDUuODMxMTc0MDQ5Nzc2NjE2NSwyMTQuNDI2MDIzMTg5NzAzMTMsNzUzLjIzNDEzMzM2NzcyODksMTE5MS42NjU0NTMyNjE4MDMzLDEzNTkuNTgxNjQ0NDE4Njg2NywyNjcwLjIzNzk4OTczMjUzOTUsOTAuMTU0ODQ0NDIwMDE1MjQsNTcwLjAxMDY2OTU2ODYzMjEsNzkwLjMyNTkyNjE5OTE1NzUsNDE2LjI2NzYwOTY0NjU0NTUsMjIyLjE2NTY3NDkxMjk5Nzg3LDg1LjE3MDU2MDI2MDMwMzg0LDExNi4yOTM2OTkzMDYyMTc2LDQwLjUzNTA2MjEzODg5NjQzNiw3NzIuNzU2NjAxMTUzODU4NCwyNTMuODI2MzQ0NTQ5NjA5NTMsNDg0Ljc3ODcwMzY4MTI3MTc0LDc4Ny45MzgxNjEzNTQyMjUsNzYwLjMwMjI4MTcyMTg2MSwxMzMyLjA2NzY5MTE2MzM3ODIsMzAuNTU3NTc0ODY1NzU4ODQsOC42MzAwMzc0OTY2OTU5MgorMTUsVHVlIDggRmViIDExLDAuODU3MDg2OTI4MjkxMjMwNywwLjI5MTMwMDc4ODI0ODQ3NzMsMi42NjY2ODg2OTk1NjQ0MTg2LDEuMDAxNjcwNjkyMjM5OTI1Miw1LjgzMTE3OTg4MDk1MzU4LDIxNC40MjYyMzc2MTU4MzM1MSw3NTMuMjM0ODg2NjAyMjM5LDExOTEuNjY2NjQ0OTI3ODUyOCwxMzU5LjU4MzAwNDAwMTAxMSwyNjcwLjI0MDY1OTk3MTg2NDcsOTAuMTU0OTM0NTc0OTA0NzEsNTcwLjAxMTIzOTU3OTU4NjgsNzkwLjMyNjcxNjUyNTQ3ODgsNDE2LjI2ODAyNTkxNDM2MzMsMjIyLjE2NTg5NzA3ODc4MzgxLDg1LjE3MDY0NTQzMDkwNjcsMTE2LjI5MzgxNTU5OTk3NTA4LDQwLjUzNTEwMjY3Mzk3ODg0LDc3Mi43NTczNzM5MTA4NDU5LDI1My44MjY1OTgzNzYwODA5LDQ4NC43NzkxODg0NjAyMTc4LDc4Ny45Mzg5NDkyOTI3ODAzLDc2MC4zMDMwNDIwMjQ1MjI4LDEzMzIuMDY5MDIzMjMxNzM1MiwzMC41NTc2MDU0MjMzNDg5OCw4LjYzMDA0NjEyNjczNzczMworMTYsV2VkIDkgRmViIDExLDAuODU3MDg3Nzg1Mzc4NTg3NSwwLjI5MTMwMTA3OTU0OTQxMTI2LDIuNjY2NjkxMzY2MjU0NDUwNSwxLjAwMTY3MTY5MzkxMTExODMsNS44MzExODU3MTIxMzYzNzYsMjE0LjQyNjQ1MjA0MjE3ODMsNzUzLjIzNTYzOTgzNzUwMjQsMTE5MS42Njc4MzY1OTUwOTM0LDEzNTkuNTg0MzYzNTg0Njk0OCwyNjcwLjI0MzMzMDIxMzg2LDkwLjE1NTAyNDcyOTg4NDM3LDU3MC4wMTE4MDk1OTExMTE0LDc5MC4zMjc1MDY4NTI1OTAzLDQxNi4yNjg0NDIxODI1OTc1NCwyMjIuMTY2MTE5MjQ0NzkyLDg1LjE3MDczMDYwMTU5NDczLDExNi4yOTM5MzE4OTM4NDg4LDQwLjUzNTE0MzIwOTEwMTc5LDc3Mi43NTgxNDY2Njg2MDYxLDI1My44MjY4NTIyMDI4MDYxOCw0ODQuNzc5NjczMjM5NjQ4Niw3ODcuOTM5NzM3MjMyMTIzNyw3NjAuMzAzODAyMzI3OTQ1MywxMzMyLjA3MDM1NTMwMTQyNDMsMzAuNTU3NjM1OTgwOTY5NjksOC42MzAwNTQ3NTY3ODgxNzMKKzE3LFRodSAxMCBGZWIgMTEsMC44NTcwODg2NDI0NjY4MDE2LDAuMjkxMzAxMzcwODUwNjM2MzQsMi42NjY2OTQwMzI5NDcxNTA1LDEuMDAxNjcyNjk1NTgzMzEzLDUuODMxMTkxNTQzMzI1MDA0LDIxNC40MjY2NjY0Njg3Mzc1NSw3NTMuMjM2MzkzMDczNTE4NywxMTkxLjY2OTAyODI2MzUyNiwxMzU5LjU4NTcyMzE2OTczODUsMjY3MC4yNDYwMDA0NTg1MjYsOTAuMTU1MTE0ODg0OTU0MTYsNTcwLjAxMjM3OTYwMzIwNiw3OTAuMzI4Mjk3MTgwNDkyNCw0MTYuMjY4ODU4NDUxMjQ3OSwyMjIuMTY2MzQxNDExMDIyMyw4NS4xNzA4MTU3NzIzNjc5MywxMTYuMjk0MDQ4MTg3ODM4ODQsNDAuNTM1MTgzNzQ0MjY1MjcsNzcyLjc1ODkxOTQyNzEzOTIsMjUzLjgyNzEwNjAyOTc4NTM0LDQ4NC43ODAxNTgwMTk1NjQzLDc4Ny45NDA1MjUxNzIyNTQ5LDc2MC4zMDQ1NjI2MzIxMjc3LDEzMzIuMDcxNjg3MzcyNDQ2NCwzMC41NTc2NjY1Mzg2MjA5NTMsOC42MzAwNjMzODY4NDcyNDcKKzE4LEZyaSAxMSBGZWIgMTEsMC44NTcwODk0OTk1NTU4NzI1LDAuMjkxMzAxNjYyMTUyMTUyODYsMi42NjY2OTY2OTk2NDI1MTY4LDEuMDAxNjczNjk3MjU2NTA5Miw1LjgzMTE5NzM3NDUxOTQ2MiwyMTQuNDI2ODgwODk1NTExMjMsNzUzLjIzNzE0NjMxMDI4ODIsMTE5MS42NzAyMTk5MzMxNSwxMzU5LjU4NzA4Mjc1NjE0MTYsMjY3MC4yNDg2NzA3MDU4NjEsOTAuMTU1MjA1MDQwMTE0MTEsNTcwLjAxMjk0OTYxNTg3MDYsNzkwLjMyOTA4NzUwOTE4NDcsNDE2LjI2OTI3NDcyMDMxNDQ2LDIyMi4xNjY1NjM1Nzc0NzQ4LDg1LjE3MDkwMDk0MzIyNjI3LDExNi4yOTQxNjQ0ODE5NDUyMiw0MC41MzUyMjQyNzk0NjkyOCw3NzIuNzU5NjkyMTg2NDQ1LDI1My44MjczNTk4NTcwMTgyOCw0ODQuNzgwNjQyNzk5OTY0Nyw3ODcuOTQxMzEzMTEzMTc0Myw3NjAuMzA1MzIyOTM3MDcwNiwxMzMyLjA3MzAxOTQ0NDc5OTUsMzAuNTU3Njk3MDk2MzAyNzgsOC42MzAwNzIwMTY5MTQ5NQorMTksU2F0IDEyIEZlYiAxMSwwLjg1NzA5MDM1NjY0NTgwMDcsMC4yOTEzMDE5NTM0NTM5NjA3LDIuNjY2Njk5MzY2MzQwNTUwMywxLjAwMTY3NDY5ODkzMDcwNzcsNS44MzEyMDMyMDU3MTk3NTEsMjE0LjQyNzA5NTMyMjQ5OTM1LDc1My4yMzc4OTk1NDc4MTEsMTE5MS42NzE0MTE2MDM5NjYsMTM1OS41ODg0NDIzNDM5MDQzLDI2NzAuMjUxMzQwOTU1ODY3LDkwLjE1NTI5NTE5NTM2NDIyLDU3MC4wMTM1MTk2MjkxMDUyLDc5MC4zMjk4Nzc4Mzg2Njc0LDQxNi4yNjk2OTA5ODk3OTczLDIyMi4xNjY3ODU3NDQxNDk0OCw4NS4xNzA5ODYxMTQxNjk4LDExNi4yOTQyODA3NzYxNjc4NCw0MC41MzUyNjQ4MTQ3MTM4Myw3NzIuNzYwNDY0OTQ2NTIzNiwyNTMuODI3NjEzNjg0NTA1MDUsNDg0Ljc4MTEyNzU4MDg0OTksNzg3Ljk0MjEwMTA1NDg4MTMsNzYwLjMwNjA4MzI0Mjc3MzgsMTMzMi4wNzQzNTE1MTg0ODUyLDMwLjU1NzcyNzY1NDAxNTE2NCw4LjYzMDA4MDY0Njk5MTI4CisyMCxTdW4gMTMgRmViIDExLDAuODU3MDkxMjEzNzM2NTg2LDAuMjkxMzAyMjQ0NzU2MDU5NzYsMi42NjY3MDIwMzMwNDEyNSwxLjAwMTY3NTcwMDYwNTkwNzQsNS44MzEyMDkwMzY5MjU4NzIsMjE0LjQyNzMwOTc0OTcwMTg2LDc1My4yMzg2NTI3ODYwODcyLDExOTEuNjcyNjAzMjc1OTczMiwxMzU5LjU4OTgwMTkzMzAyNjQsMjY3MC4yNTQwMTEyMDg1NDI2LDkwLjE1NTM4NTM1MDcwNDQ5LDU3MC4wMTQwODk2NDI5MDk4LDc5MC4zMzA2NjgxNjg5NDAzLDQxNi4yNzAxMDcyNTk2OTY0MywyMjIuMTY3MDA3OTExMDQ2MzcsODUuMTcxMDcxMjg1MTk4NSwxMTYuMjk0Mzk3MDcwNTA2NzYsNDAuNTM1MzA1MzQ5OTk4OTEsNzcyLjc2MTIzNzcwNzM3NDksMjUzLjgyNzg2NzUxMjI0NTY2LDQ4NC43ODE2MTIzNjIyMTk5Niw3ODcuOTQyODg4OTk3Mzc2NCw3NjAuMzA2ODQzNTQ5MjM3LDEzMzIuMDc1NjgzNTkzNTAyNiwzMC41NTc3NTgyMTE3NTgxLDguNjMwMDg5Mjc3MDc2MjQxCisyMSxNb24gMTQgRmViIDExLDAuODU3MDkyMDcwODI4MjI4NCwwLjI5MTMwMjUzNjA1ODQ1MDIsMi42NjY3MDQ2OTk3NDQ2MTY3LDEuMDAxNjc2NzAyMjgyMTA5LDUuODMxMjE0ODY4MTM3ODIzLDIxNC40Mjc1MjQxNzcxMTg3OCw3NTMuMjM5NDA2MDI1MTE2NiwxMTkxLjY3Mzc5NDk0OTE3MjQsMTM1OS41OTExNjE1MjM1MDgyLDI2NzAuMjU2NjgxNDYzODg5LDkwLjE1NTQ3NTUwNjEzNDksNTcwLjAxNDY1OTY1NzI4NDQsNzkwLjMzMTQ1ODUwMDAwMzYsNDE2LjI3MDUyMzUzMDAxMTc2LDIyMi4xNjcyMzAwNzgxNjUzNSw4NS4xNzExNTY0NTYzMTIzNiwxMTYuMjk0NTEzMzY0OTYyLDQwLjUzNTM0NTg4NTMyNDUyNCw3NzIuNzYyMDEwNDY4OTk5LDI1My44MjgxMjEzNDAyNDAwNSw0ODQuNzgyMDk3MTQ0MDc0NjcsNzg3Ljk0MzY3Njk0MDY1OTMsNzYwLjMwNzYwMzg1NjQ2MDgsMTMzMi4wNzcwMTU2Njk4NTE4LDMwLjU1Nzc4ODc2OTUzMTU5OCw4LjYzMDA5NzkwNzE2OTgzMgorMjIsVHVlIDE1IEZlYiAxMSwwLjg1NzA5MjkyNzkyMDcyNzgsMC4yOTEzMDI4MjczNjExMzE4MywyLjY2NjcwNzM2NjQ1MDY1MDQsMS4wMDE2Nzc3MDM5NTkzMTIsNS44MzEyMjA2OTkzNTU2MDcsMjE0LjQyNzczODYwNDc1MDE1LDc1My4yNDAxNTkyNjQ4OTkzLDExOTEuNjc0OTg2NjIzNTYzLDEzNTkuNTkyNTIxMTE1MzQ5OSwyNjcwLjI1OTM1MTcyMTkwNjYsOTAuMTU1NTY1NjYxNjU1NDksNTcwLjAxNTIyOTY3MjIyOSw3OTAuMzMyMjQ4ODMxODU3MSw0MTYuMjcwOTM5ODAwNzQzNDYsMjIyLjE2NzQ1MjI0NTUwNjU1LDg1LjE3MTI0MTYyNzUxMTQsMTE2LjI5NDYyOTY1OTUzMzUzLDQwLjUzNTM4NjQyMDY5MDY3LDc3Mi43NjI3ODMyMzEzOTU4LDI1My44MjgzNzUxNjg0ODgzMiw0ODQuNzgyNTgxOTI2NDE0MTQsNzg3Ljk0NDQ2NDg4NDczMDMsNzYwLjMwODM2NDE2NDQ0NDksMTMzMi4wNzgzNDc3NDc1MzM0LDMwLjU1NzgxOTMyNzMzNTY1OCw4LjYzMDEwNjUzNzI3MjA1NAorMjMsV2VkIDE2IEZlYiAxMSwwLjg1NzA5Mzc4NTAxNDA4NDMsMC4yOTEzMDMxMTg2NjQxMDQ5LDIuNjY2NzEwMDMzMTU5MzUwNSwxLjAwMTY3ODcwNTYzNzUxNzIsNS44MzEyMjY1MzA1NzkyMjIsMjE0LjQyNzk1MzAzMjU5NTk1LDc1My4yNDA5MTI1MDU0MzUsMTE5MS42NzYxNzgyOTkxNDU1LDEzNTkuNTkzODgwNzA4NTUwOCwyNjcwLjI2MjAyMTk4MjU5Myw5MC4xNTU2NTU4MTcyNjYyMiw1NzAuMDE1Nzk5Njg3NzQzNyw3OTAuMzMzMDM5MTY0NTAxMSw0MTYuMjcxMzU2MDcxODkxNDMsMjIyLjE2NzY3NDQxMzA2OTg4LDg1LjE3MTMyNjc5ODc5NTYsMTE2LjI5NDc0NTk1NDIyMTMzLDQwLjUzNTQyNjk1NjA5NzM0Niw3NzIuNzYzNTU1OTk0NTY1NCwyNTMuODI4NjI4OTk2OTkwMzUsNDg0Ljc4MzA2NjcwOTIzODU0LDc4Ny45NDUyNTI4Mjk1ODkyLDc2MC4zMDkxMjQ0NzMxODkyLDEzMzIuMDc5Njc5ODI2NTQ3MSwzMC41NTc4NDk4ODUxNzAyNjMsOC42MzAxMTUxNjczODI5MDgKKzI0LFRodSAxNyBGZWIgMTEsMC44NTcwOTQ2NDIxMDgyOTgxLDAuMjkxMzAzNDA5OTY3MzY5MiwyLjY2NjcxMjY5OTg3MDcxNywxLjAwMTY3OTcwNzMxNjcyMzYsNS44MzEyMzIzNjE4MDg2NjgsMjE0LjQyODE2NzQ2MDY1NjI1LDc1My4yNDE2NjU3NDY3MjM5LDExOTEuNjc3MzY5OTc1OTIsMTM1OS41OTUyNDAzMDMxMTEsMjY3MC4yNjQ2OTIyNDU5NTAzLDkwLjE1NTc0NTk3Mjk2NzEzLDU3MC4wMTYzNjk3MDM4MjgzLDc5MC4zMzM4Mjk0OTc5MzUyLDQxNi4yNzE3NzIzNDM0NTU3LDIyMi4xNjc4OTY1ODA4NTU0Myw4NS4xNzE0MTE5NzAxNjUsMTE2LjI5NDg2MjI0OTAyNTQ3LDQwLjUzNTQ2NzQ5MTU0NDU3LDc3Mi43NjQzMjg3NTg1MDc4LDI1My44Mjg4ODI4MjU3NDYyMyw0ODQuNzgzNTUxNDkyNTQ3Niw3ODcuOTQ2MDQwNzc1MjM1OSw3NjAuMzA5ODg0NzgyNjkzOCwxMzMyLjA4MTAxMTkwNjg5MjksMzAuNTU3ODgwNDQzMDM1NDMsOC42MzAxMjM3OTc1MDIzOQorMjUsRnJpIDE4IEZlYiAxMSwwLjg1NzA5NTQ5OTIwMzM2ODYsMC4yOTEzMDM3MDEyNzA5MjQ5LDIuNjY2NzE1MzY2NTg0NzQ5LDEuMDAxNjgwNzA4OTk2OTMyLDUuODMxMjM4MTkzMDQzOTQ2LDIxNC40MjgzODE4ODg5MzA5LDc1My4yNDI0MTg5ODg3NjYzLDExOTEuNjc4NTYxNjUzODg1NywxMzU5LjU5NjU5OTg5OTAzMTIsMjY3MC4yNjczNjI1MTE5NzgsOTAuMTU1ODM2MTI4NzU4MTgsNTcwLjAxNjkzOTcyMDQ4Myw3OTAuMzM0NjE5ODMyMTU5OSw0MTYuMjcyMTg4NjE1NDM2MTYsMjIyLjE2ODExODc0ODg2MzEyLDg1LjE3MTQ5NzE0MTYxOTU3LDExNi4yOTQ5Nzg1NDM5NDU4Nyw0MC41MzU1MDgwMjcwMzIzMzYsNzcyLjc2NTEwMTUyMzIyMjksMjUzLjgyOTEzNjY1NDc1NjA3LDQ4NC43ODQwMzYyNzYzNDE0NSw3ODcuOTQ2ODI4NzIxNjcwNyw3NjAuMzEwNjQ1MDkyOTU4NywxMzMyLjA4MjM0Mzk4ODU3MDgsMzAuNTU3OTExMDAwOTMxMTQsOC42MzAxMzI0Mjc2MzA1MDMKKzI2LFNhdCAxOSBGZWIgMTEsMC44NTcwOTYzNTYyOTkyOTY0LDAuMjkxMzAzOTkyNTc0NzcxOCwyLjY2NjcxODAzMzMwMTQ0OTUsMS4wMDE2ODE3MTA2NzgxNDE3LDUuODMxMjQ0MDI0Mjg1MDU2NSwyMTQuNDI4NTk2MzE3NDIsNzUzLjI0MzE3MjIzMTU2MiwxMTkxLjY3OTc1MzMzMzA0MywxMzU5LjU5Nzk1OTQ5NjMxMSwyNjcwLjI3MDAzMjc4MDY3NjUsOTAuMTU1OTI2Mjg0NjM5MzksNTcwLjAxNzUwOTczNzcwNzksNzkwLjMzNTQxMDE2NzE3NTMsNDE2LjI3MjYwNDg4NzgzMjg3LDIyMi4xNjgzNDA5MTcwOTI5Niw4NS4xNzE1ODIzMTMxNTkyOSwxMTYuMjk1MDk0ODM4OTgyNTQsNDAuNTM1NTQ4NTYyNTYwNjQsNzcyLjc2NTg3NDI4ODcxMDgsMjUzLjgyOTM5MDQ4NDAxOTU3LDQ4NC43ODQ1MjEwNjA2Miw3ODcuOTQ3NjE2NjY4ODkzNSw3NjAuMzExNDA1NDAzOTgzOCwxMzMyLjA4MzY3NjA3MTU4MDQsMzAuNTU3OTQxNTU4ODU3NDE1LDguNjMwMTQxMDU3NzY3MjQ3CisyNyxTdW4gMjAgRmViIDExLDAuODU3MDk3MjEzMzk2MDgxNCwwLjI5MTMwNDI4Mzg3ODkxMDA1LDIuNjY2NzIwNzAwMDIwODE2LDEuMDAxNjgyNzEyMzYwMzUzMSw1LjgzMTI0OTg1NTUzMTk5NywyMTQuNDI4ODEwNzQ2MTIzNDUsNzUzLjI0MzkyNTQ3NTExMDgsMTE5MS42ODA5NDUwMTMzOTIxLDEzNTkuNTk5MzE5MDk0OTUwMywyNjcwLjI3MjcwMzA1MjA0NDYsOTAuMTU2MDE2NDQwNjEwNzQsNTcwLjAxODA3OTc1NTUwMjUsNzkwLjMzNjIwMDUwMjk4MDUsNDE2LjI3MzAyMTE2MDY0NTksMjIyLjE2ODU2MzA4NTU0NDkyLDg1LjE3MTY2NzQ4NDc4NDE4LDExNi4yOTUyMTExMzQxMzU1MSw0MC41MzU1ODkwOTgxMjk0Niw3NzIuNzY2NjQ3MDU0OTcxNiwyNTMuODI5NjQ0MzEzNTM2OTYsNDg0Ljc4NTAwNTg0NTM4MzUsNzg3Ljk0ODQwNDYxNjkwNDEsNzYwLjMxMjE2NTcxNTc2OTUsMTMzMi4wODUwMDgxNTU5MjI3LDMwLjU1Nzk3MjExNjgxNDI1LDguNjMwMTQ5Njg3OTEyNjE5CisyOCxNb24gMjEgRmViIDExLDAuODU3MDk4MDcwNDkzNzIzMiwwLjI5MTMwNDU3NTE4MzMzOTUsMi42NjY3MjMzNjY3NDI4NDksMS4wMDE2ODM3MTQwNDM1NjY0LDUuODMxMjU1Njg2Nzg0NzY3LDIxNC40MjkwMjUxNzUwNDEzNSw3NTMuMjQ0Njc4NzE5NDEzLDExOTEuNjgyMTM2Njk0OTMzLDEzNTkuNjAwNjc4Njk0OTQ5MiwyNjcwLjI3NTM3MzMyNjA4MjQsOTAuMTU2MTA2NTk2NjcyMjYsNTcwLjAxODY0OTc3Mzg2NzQsNzkwLjMzNjk5MDgzOTU3NjQsNDE2LjI3MzQzNzQzMzg3NTIsMjIyLjE2ODc4NTI1NDIxOTEsODUuMTcxNzUyNjU2NDk0MjUsMTE2LjI5NTMyNzQyOTQwNDc4LDQwLjUzNTYyOTYzMzczODgzNiw3NzIuNzY3NDE5ODIyMDA1MiwyNTMuODI5ODk4MTQzMzA4MTgsNDg0Ljc4NTQ5MDYzMDYzMTcsNzg3Ljk0OTE5MjU2NTcwMjcsNzYwLjMxMjkyNjAyODMxNTUsMTMzMi4wODYzNDAyNDE1OTY5LDMwLjU1ODAwMjY3NDgwMTY0Miw4LjYzMDE1ODMxODA2NjYyMgorMjksVHVlIDIyIEZlYiAxMSwwLjg1NzA5ODkyNzU5MjIyMjIsMC4yOTEzMDQ4NjY0ODgwNjAzLDIuNjY2NzI2MDMzNDY3NTUsMS4wMDE2ODQ3MTU3Mjc3ODEzLDUuODMxMjYxNTE4MDQzMzcsMjE0LjQyOTIzOTYwNDE3MzcsNzUzLjI0NTQzMTk2NDQ2ODUsMTE5MS42ODMzMjgzNzc2NjU1LDEzNTkuNjAyMDM4Mjk2MzA4LDI2NzAuMjc4MDQzNjAyNzkxNSw5MC4xNTYxOTY3NTI4MjM5Miw1NzAuMDE5MjE5NzkyODAyMiw3OTAuMzM3NzgxMTc2OTYyNiw0MTYuMjczODUzNzA3NTIwNzQsMjIyLjE2OTAwNzQyMzExNTM3LDg1LjE3MTgzNzgyODI4OTQ4LDExNi4yOTU0NDM3MjQ3OTAzOSw0MC41MzU2NzAxNjkzODg3MTYsNzcyLjc2ODE5MjU4OTgxMTIsMjUzLjgzMDE1MTk3MzMzMzIyLDQ4NC43ODU5NzU0MTYzNjQ3LDc4Ny45NDk5ODA1MTUyODkyLDc2MC4zMTM2ODYzNDE2MjE1LDEzMzIuMDg3NjcyMzI4NjAzLDMwLjU1ODAzMzIzMjgxOTYsOC42MzAxNjY5NDgyMjkyNTYKKzMwLFdlZCAyMyBGZWIgMTEsMC44NTcwOTk3ODQ2OTE1NzgzLDAuMjkxMzA1MTU3NzkzMDcyNSwyLjY2NjcyODcwMDE5NDkxNzYsMS4wMDE2ODU3MTc0MTI5OTc4LDUuODMxMjY3MzQ5MzA3ODA0LDIxNC40Mjk0NTQwMzM1MjA1LDc1My4yNDYxODUyMTAyNzcyLDExOTEuNjg0NTIwMDYxNTg5OSwxMzU5LjYwMzM5Nzg5OTAyNTgsMjY3MC4yODA3MTM4ODIxNzA0LDkwLjE1NjI4NjkwOTA2NTc2LDU3MC4wMTk3ODk4MTIzMDcsNzkwLjMzODU3MTUxNTEzODksNDE2LjI3NDI2OTk4MTU4MjcsMjIyLjE2OTIyOTU5MjIzMzg4LDg1LjE3MTkyMzAwMDE2OTksMTE2LjI5NTU2MDAyMDI5MjI0LDQwLjUzNTcxMDcwNTA3OTE1NCw3NzIuNzY4OTY1MzU4MzkwMSwyNTMuODMwNDA1ODAzNjEyMTQsNDg0Ljc4NjQ2MDIwMjU4MjUsNzg3Ljk1MDc2ODQ2NTY2MzgsNzYwLjMxNDQ0NjY1NTY4ODEsMTMzMi4wODkwMDQ0MTY5NDE2LDMwLjU1ODA2Mzc5MDg2ODEyLDguNjMwMTc1NTc4NDAwNTIKKzMxLFRodSAyNCBGZWIgMTEsMC44NTcxMDA2NDE3OTE3OTE1LDAuMjkxMzA1NDQ5MDk4Mzc1OTcsMi42NjY3MzEzNjY5MjQ5NTEzLDEuMDAxNjg2NzE5MDk5MjE2LDUuODMxMjczMTgwNTc4MDcxLDIxNC40Mjk2Njg0NjMwODE3Myw3NTMuMjQ2OTM4NDU2ODM5MSwxMTkxLjY4NTcxMTc0NjcwNTUsMTM1OS42MDQ3NTc1MDMxMDM3LDI2NzAuMjgzMzg0MTY0MjE5Niw5MC4xNTYzNzcwNjUzOTc3Myw1NzAuMDIwMzU5ODMyMzgxOSw3OTAuMzM5MzYxODU0MTA1Nyw0MTYuMjc0Njg2MjU2MDYwOCwyMjIuMTY5NDUxNzYxNTc0NTUsODUuMTcyMDA4MTcyMTM1NSwxMTYuMjk1Njc2MzE1OTEwNCw0MC41MzU3NTEyNDA4MTAxMzYsNzcyLjc2OTczODEyNzc0MTksMjUzLjgzMDY1OTYzNDE0NDksNDg0Ljc4Njk0NDk4OTI4NTEsNzg3Ljk1MTU1NjQxNjgyNjMsNzYwLjMxNTIwNjk3MDUxNSwxMzMyLjA5MDMzNjUwNjYxMjQsMzAuNTU4MDk0MzQ4OTQ3MTksOC42MzAxODQyMDg1ODA0MTUKKzMyLEZyaSAyNSBGZWIgMTEsMC44NTcxMDE0OTg4OTI4NjE4LDAuMjkxMzA1NzQwNDAzOTcwOCwyLjY2NjczNDAzMzY1NzY1MTMsMS4wMDE2ODc3MjA3ODY0MzYsNS44MzEyNzkwMTE4NTQxNjcsMjE0LjQyOTg4Mjg5Mjg1NzQ1LDc1My4yNDc2OTE3MDQxNTQsMTE5MS42ODY5MDM0MzMwMTMsMTM1OS42MDYxMTcxMDg1NDEsMjY3MC4yODYwNTQ0NDg5Mzg2LDkwLjE1NjQ2NzIyMTgxOTg4LDU3MC4wMjA5Mjk4NTMwMjY4LDc5MC4zNDAxNTIxOTM4NjI4LDQxNi4yNzUxMDI1MzA5NTUxNywyMjIuMTY5NjczOTMxMTM3MzcsODUuMTcyMDkzMzQ0MTg2MjUsMTE2LjI5NTc5MjYxMTY0NDg0LDQwLjUzNTc5MTc3NjU4MTY0LDc3Mi43NzA1MTA4OTc4NjY0LDI1My44MzA5MTM0NjQ5MzE0Myw0ODQuNzg3NDI5Nzc2NDcyNSw3ODcuOTUyMzQ0MzY4Nzc2Niw3NjAuMzE1OTY3Mjg2MTAyMSwxMzMyLjA5MTY2ODU5NzYxNSwzMC41NTgxMjQ5MDcwNTY4MSw4LjYzMDE5MjgzODc2ODkzOApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9EZW1vZ3JhcGhpY1NFSVJEaXNlYXNlX1JLX1JlZmVyZW5jZS9EZW1vZ3JhcGhpY01vZGVsL3J1bnBhcmFtZXRlcnMuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9EZW1vZ3JhcGhpY1NFSVJEaXNlYXNlX1JLX1JlZmVyZW5jZS9EZW1vZ3JhcGhpY01vZGVsL3J1bnBhcmFtZXRlcnMuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ4ZjRhMTMKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0RlbW9ncmFwaGljU0VJUkRpc2Vhc2VfUktfUmVmZXJlbmNlL0RlbW9ncmFwaGljTW9kZWwvcnVucGFyYW1ldGVycy5jc3YKQEAgLTAsMCArMSwyIEBACitwb3B1bGF0aW9uSWRlbnRpZmllcixuYW1lLHRhcmdldElTT0tleSxiaXJ0aFJhdGUsZGVhdGhSYXRlLHRpbWVQZXJpb2QscG9wdWxhdGlvbkdyb3VwcworaHVtYW4sRGVtb2dyYXBoaWNNb2RlbCwsNC4wRS01LDMuOUUtNSw4NjQwMDAwMCxbb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLmltcGwuUG9wdWxhdGlvbkdyb3VwSW1wbEAzZDJmYjdlZiAoaWRlbnRpZmllcjogbWVuICBmcmFjdGlvbjogMC41KSAgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLmltcGwuUG9wdWxhdGlvbkdyb3VwSW1wbEA3ZDRjYjRiIChpZGVudGlmaWVyOiB3b21lbiAgZnJhY3Rpb246IDAuNSldClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9EZW1vZ3JhcGhpY1NFSVJEaXNlYXNlX1JLX1JlZmVyZW5jZS9EZW1vZ3JhcGhpY01vZGVsL3dvbWVuL0JpcnRoc18yLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvRGVtb2dyYXBoaWNTRUlSRGlzZWFzZV9SS19SZWZlcmVuY2UvRGVtb2dyYXBoaWNNb2RlbC93b21lbi9CaXJ0aHNfMi5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWE1MjJlNQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvRGVtb2dyYXBoaWNTRUlSRGlzZWFzZV9SS19SZWZlcmVuY2UvRGVtb2dyYXBoaWNNb2RlbC93b21lbi9CaXJ0aHNfMi5jc3YKQEAgLTAsMCArMSwzMyBAQAoraXRlcmF0aW9uLHRpbWUsRUctRlJHLUcyMTAwMDEsRUctRlJHLUcyMTAwMDIsRUctRlJHLUcyMTAwMDMsRUctRlJHLUcyMTAwMDQsRUctRlJHLUcyMTAwMDUsRUctTE9FLUcyNDAwMDEsRUctTE9FLUcyNDAwMDIsRUctTE9FLUcyNDAwMDMsRUctTE9FLUcyNDAwMDQsRUctTE9FLUcyNDAwMDUsRUctTE9FLUcyNDAwMDYsRUctTE9FLUcyNDAwMDcsRUctTE9FLUcyNDAwMDgsRUctTE9FLUcyNDAwMDksRUctVVBFLUcyOTAwMDEsRUctVVBFLUcyOTAwMDIsRUctVVBFLUcyOTAwMDMsRUctVVBFLUcyOTAwMDQsRUctVVBFLUcyOTAwMDUsRUctVVBFLUcyOTAwMDYsRUctVVBFLUcyOTAwMDcsRUctVVBFLUcyOTAwMDgsRUctVVJHLUczMDAwMDEsRUctVVJHLUczMDAwMDIsRUctVVJHLUczMDAwMDMsRUctVVJHLUczMDAwMDQKKzEsVHVlIDI1IEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyLFdlZCAyNiBKYW4gMTEsNS45MTIyNzAzNzU4NTQ1NTYsNS4yNzg3OTQyMzAxOTk1MDYsMy4wNzI2ODc5MDYxNDgyODksNi4zNTIwNTMwMTUwNTU2NzYsNi40MDI4MDU2NDI3NDI0MjgsMTAzLjUwMzg2Mjk5NTQ4NTY2LDExMi40Nzc1NDA2ODk0OTQ5NCw5Mi4xODYwODcxMzEwNDU4MSw4MC4wNzI5MTk2MTE5MzU0LDEwMC4xMTEzMTEzMTE4NDM3NCwyMC4zMjk2NjMyOTQzMzQ4NCwxMTguODQzNDU5MDA5ODY0MTUsMjMuNTE5ODA1NTY0MjgwODc2LDYyLjQzNjAzMDg1MDg0Mzc2NCw1NS44MDY0MzEyOTA2OTY2MzYsMTI4LjEwODU0ODU1NDI3ODQ2LDkyLjgwOTU4NTA2NTY1MTUsMjYuMTAxNDk3MzYyNDY4NzMsNzUuOTY3MjA2MzUwMjIyMjgsNTAuNTkyMDM0NTkxMjQ1Myw3NC43NDAzMDcxNTkwODgxOCw4Mi45OTcyMTY2OTI3MTkyOCw3My44MzM1NTIyNTc0MDQ5MiwxNjguMzAxOTg0ODU1MTU4MSwxMC43MzI5MDg0MzM2NTU2NCwwLjEzNDM4NTI2NDA3MjI1NDY4CiszLFRodSAyNyBKYW4gMTEsMTEuODI0NTQ2NjYzOTgyNDQ0LDEwLjU1NzU5MzczOTE5NTg3OSw2LjE0NTM3ODg4NDk4NjAyMSwxMi43MDQxMTIzODIxNjc1NTUsMTIuODA1NjE3Njg4MjkzNzA2LDIwNy4wMDc4Mjk0OTQ4ODYxOCwyMjQuOTU1MTkzODU2NTg2ODIsMTg0LjM3MjI2NjQ0ODIyNDkzLDE2MC4xNDU5MTkyOTY4MzA1NiwyMDAuMjIyNzIyNzM1MDQ4ODUsNDAuNjU5MzQ2OTE4MzQzMTQsMjM3LjY4NzAzNjg2MzI0Njc2LDQ3LjAzOTYzNDY0ODM3OTA3LDEyNC44NzIxMjQxMzc3NDk2NywxMTEuNjEyOTE4Mzg3ODUyNTIsMjU2LjIxNzIyNTIxNzE2OTY0LDE4NS42MTkyNjI5NDA5MzQ0Miw1Mi4yMDMwMjA4MjY0NDc5MDQsMTUxLjkzNDQ4ODY2NzY4ODk4LDEwMS4xODQxMTk3NzQ1NTA1NCwxNDkuNDgwNjg5MDU4NTIwOTcsMTY1Ljk5NDUxNjM4MjY5NjgsMTQ3LjY2NzE3ODM0ODM5OSwzMzYuNjA0MTM4MDEyMzg1MywyMS40NjU4Mjc2MDAyMjUwODMsMC4yNjg3NzA2NjI1Mjk4NDA3Cis0LEZyaSAyOCBKYW4gMTEsMTcuNzM2ODI4ODY0Mzg5NTgsMTUuODM2Mzk4NTI2OTk0NDA1LDkuMjE4MDcyOTM2NTE2MjY3LDE5LjA1NjE3ODEwMTM0MTk2NywxOS4yMDg0MzYxMzY2NjAyMzIsMzEwLjUxMTg5OTQ5ODMwNSwzMzcuNDMyOTU5NTAxMzg4MSwyNzYuNTU4NTM3OTUxNjI5NDMsMjQwLjIxODk5OTA1NDc2NTQ1LDMwMC4zMzQyMzQyNjk3MTU1LDYwLjk4OTA1MDg3MjA0NTI0LDM1Ni41MzA3MzM1NjAyNjY3LDcwLjU1OTQ4NzI1MjMxODEyLDE4Ny4zMDgyNzk4NjA3ODAwNiwxNjcuNDE5NDYxMjkxNTIzNCwzODQuMzI2MDI5OTg4ODAxNTcsMjc4LjQyOTAzMzYyNTk0MTY2LDc4LjMwNDU3MDM5MTk2MzYxLDIyNy45MDE4NDY5NTI0NzU5MiwxNTEuNzc2MjU1NTQ5OTY2MjQsMjI0LjIyMTE0NTY5ODM3MzA1LDI0OC45OTE4OTkwNzAwMTU0OCwyMjEuNTAwODc4MjczMDU2MDYsNTA0LjkwNjQ1OTQ3MTg0OTgsMzIuMTk4NzU3NDk5NzE5MDUsMC40MDMxNTYxOTUzNzI4OTIyCis1LFNhdCAyOSBKYW4gMTEsMjMuNjQ5MTE2OTc3MDgxODc0LDIxLjExNTIwODU5MzYwMDM1NCwxMi4yOTA3NzAwNjA3NDIxMDMsMjUuNDA4MjUwMTcyNTg1MjY2LDI1LjYxMTI2MDk4Nzg0ODQwNCw0MTQuMDE2MDczMDA1ODQ1NCw0NDkuOTEwODM3NjI0MDExMjYsMzY4Ljc0NDkwMTY0MTM1MTM2LDMyMC4yOTIxNTg4ODU4MjAxLDQwMC40NDU4NDU5MTU5NDM3LDgxLjMxODc3NTE1NTQ2MTQ3LDQ3NS4zNzQ1NDkxMDEwNDI3Niw5NC4wNzkzNjMzNzYxMjE1MiwyNDkuNzQ0NDk4MDE5OTk3MzQsMjIzLjIyNjA2MDAwMTc2NTEyLDUxMi40MzQ5NjI4NjkzMDIyLDM3MS4yMzg4OTcxMjA3NjU5LDEwNC40MDYxNDYwNTkwNDE4OSwzMDMuODY5MjgxMjA0NjU5MDUsMjAyLjM2ODQ0MTkxNzU0Mjk1LDI5OC45NjE2NzcwNzg3MTkxNiwzMzEuOTg5MzY0NzU0NzU4NCwyOTUuMzM0NjUyMDMxNDUwMSw2NzMuMjA4OTQ5MjMzNzIwMiw0Mi45MzE2OTgxMzIxNDgyOCwwLjUzNzU0MTg2MjYwMTU0MzcKKzYsU3VuIDMwIEphbiAxMSwyOS41NjE0MTEwMDIwNjUyMywyNi4zOTQwMjM5MzkwMTkwMTQsMTUuMzYzNDcwMjU3NjY2NiwzMS43NjAzMjg1OTU5MDM4MTUsMzIuMDE0MDkyMjQxODY0NjMsNTE3LjUyMDM1MDAxNzYxMTIsNTYyLjM4ODgyODIyNDU2ODgsNDYwLjkzMTM1NzUxNzQ4MzE1LDQwMC4zNjUzOTg3OTAwNzQ1NSw1MDAuNTU3NTU3NjczODMzNzQsMTAxLjY0ODUxOTc2ODYxMjEzLDU5NC4yMTg0ODM0ODU2OTM3LDExNy41OTkyNjMwMTk4MTI4LDMxMi4xODA3Nzg2MTU0NjQsMjc5LjAzMjcxNDUxODYzMzQsNjQwLjU0NDAyMzg1ODgsNDY0LjA0ODg1MzQyNTUwMDA2LDEzMC41MDc3NDc4Mjc3MDg5MywzNzkuODM2NzkxNDI0MzE0NDcsMjUyLjk2MDY3ODg3NzMzMTQ1LDM3My43MDIyODMxOTk2MzQwNSw0MTQuOTg2OTEzNDM3MDA4NSwzNjkuMTY4NDk5NjIzNjU0Nyw4NDEuNTExNjA3Mjk4MTY0Niw1My42NjQ2NDk0OTc1MjM1MDYsMC42NzE5Mjc2NjQyMTU5Mjk5Cis3LE1vbiAzMSBKYW4gMTEsMzUuNDczNzEwOTM5MzQ1NTgsMzEuNjcyODQ0NTYzMjU1NjYyLDE4LjQzNjE3MzUyNzI5MjgzLDM4LjExMjQxMzM3MTMwMzk4LDM4LjQxNjkyOTg5ODcxNTMyLDYyMS4wMjQ3MzA1MzM3MDU2LDY3NC44NjY5MzEzMDMxNzM0LDU1My4xMTc5MDU1ODAxMTY5LDQ4MC40Mzg3MTg3Njc2MDkxLDYwMC42NjkzNjk1NDM0ODU2LDEyMS45NzgyODQ3MTE1MTc1OSw3MTMuMDYyNTM2NzE0MzM4NiwxNDEuMTE5MTg2MTgzNDE1NDUsMzc0LjYxNzEyMTY0NzI0MjQ3LDMzNC44Mzk0MjQ4NDIxODQxNCw3NjguNjUzMjEyOTU3NDIyNyw1NTYuODU4OTAyNTQwMjM3LDE1Ni42MDkzNzU2OTc5OTA3NCw0NTUuODA0Mzc3NjExNTE4MTMsMzAzLjU1Mjk2NjQyOTM4MjIsNDQ4LjQ0Mjk2NDA2MTE5MjQsNDk3Ljk4NDU0NTExNjg0ODg0LDQ0My4wMDI0MjEwNDk3NDM5MywxMDA5LjgxNDQzMzY2NTM1MTIsNjQuMzk3NjExNTk1ODU1NDgsMC44MDYzMTM2MDAyMTYxODQ3Cis4LFR1ZSAxIEZlYiAxMSw0MS4zODYwMTY3ODg5Mjg4MiwzNi45NTE2NzA0NjYzMTU1NywyMS41MDg4Nzk4Njk2MjM4NjUsNDQuNDY0NTA0NDk4NzkyMDcsNDQuODE5NzczOTU4NDA2ODUsNzI0LjUyOTIxNDU1NDIzMjUsNzg3LjM0NTE0Njg1OTkzNyw2NDUuMzA0NTQ1ODI5MzQ0OCw1NjAuNTEyMTE4ODE4NTAzNSw3MDAuNzgxMjgxNTI0OTk5NCwxNDIuMzA4MDY5OTg0MTk4MSw4MzEuOTA2NzA4Nzg3MDk2LDE2NC42MzkxMzI4NjY5NTMwOCw0MzcuMDUzNTI3MTE1Mzk1MSwzOTAuNjQ2MTkwOTcyNDczLDg5Ni43NjI1MzAxNjUyOTg0LDY0OS42NjkwNDQ0NjUwNjkxLDE4Mi43MTEwMjk2Njk5MTM0Nyw1MzEuNzcyMDM5NzY2MzQ2LDM1NC4xNDUzMDQ1NzM3NDU3LDUyMy4xODM3MTk2NjM0Njg5LDU4MC45ODIyNTk3OTQzNjIxLDUxNi44MzY0MTYzMDk3OTEzLDExNzguMTE3NDI4MzM1NDQ3OCw3NS4xMzA1ODQ0MjcxNTQ5MSwwLjk0MDY5OTY3MDYwMjQ0MjYKKzksV2VkIDIgRmViIDExLDQ3LjI5ODMyODU1MDgyMDg1LDQyLjIzMDUwMTY0ODIwNDAxLDI0LjU4MTU4OTI4NDY2Mjc4LDUwLjgxNjYwMTk3ODM3NDQ3LDUxLjIyMjYyNDQyMDk0NTYzNSw4MjguMDMzODAyMDc5Mjk1LDg5OS44MjM0NzQ4OTQ5NzI1LDczNy40OTEyNzgyNjUyNTg4LDY0MC41ODU1OTg5NDI4Mzc5LDgwMC44OTMyOTM2MTg0NzQ5LDE2Mi42Mzc4NzU1ODY2NzQwOCw5NTAuNzUwOTk5NzA0MDg0NSwxODguMTU5MTAzMDcwNDQ5MSw0OTkuNDg5OTk1MDE5OTg0NSw0NDYuNDUzMDEyOTA5NTU2LDEwMjQuODcxOTc1NDgyNTU1Miw3NDIuNDc5Mjc5MjAwMDg5OCwyMDguODEyNzA5NzQzNTAzMjMsNjA3LjczOTc3Nzg4ODg3NCw0MDQuNzM3NjkzMzEwNDcyNiw1OTcuOTI0NTUwMDA2NTM4Myw2NjMuOTgwMDU3NDY5NjMxNCw1OTAuNjcwNDg1NDAzODcwNywxMzQ2LjQyMDU5MTMwODYyMzIsODUuODYzNTY3OTkxNDMyNTMsMS4wNzUwODU4NzUzNzQ4MzgyCisxMCxUaHUgMyBGZWIgMTEsNTMuMjEwNjQ2MjI1MDI3NTgsNDcuNTA5MzM4MTA4OTI2MjY1LDI3LjY1NDMwMTc3MjQxMjYzLDU3LjE2ODcwNTgxMDA1NzUsNTcuNjI1NDgxMjg2MzM4MDY1LDkzMS41Mzg0OTMxMDg5OTY0LDEwMTIuMzAxOTE1NDA4MzkxNyw4MjkuNjc4MTAyODg3OTUxLDcyMC42NTkxNTkxNDA2OTI0LDkwMS4wMDU0MDU4MjQwMTI0LDE4Mi45Njc3MDE1MTg5NjU3OCwxMDY5LjU5NTQwOTQ2NTQyMzIsMjExLjY3OTA5Njc5MzkyNjk2LDU2MS45MjY1MjUzNjEwNzI4LDUwMi4yNTk4OTA2NTM0ODg1LDExNTIuOTgxNTQ4OTA5MzIxLDgzNS4yODk2MDY3NDUzOTEyLDIzNC45MTQ0MTU5MTg3ODU5OCw2ODMuNzA3NTkxOTc5MTc3Nyw0NTUuMzMwMTMyNjM5NjEzNCw2NzIuNjY1NDU1MDkwNDc1MSw3NDYuOTc3OTM4MTQyNzQsNjY0LjUwNDYyODMzMjA1NjIsMTUxNC43MjM5MjI1ODUwNDUsOTYuNTk2NTYyMjg4Njk5MDYsMS4yMDk0NzIyMTQ1MzM1MDQ4CisxMSxGcmkgNCBGZWIgMTEsNTkuMTIyOTY5ODExNTU0OTc0LDUyLjc4ODE3OTg0ODQ4NzY1LDMwLjcyNzAxNzMzMjg3NjUyNSw2My41MjA4MTU5OTM4NDc1OCw2NC4wMjgzNDQ1NTQ1OTA2MiwxMDM1LjA0MzI4NzY0MzQ0MTMsMTEyNC43ODA0Njg0MDAzMDgzLDkyMS44NjUwMTk2OTc1MTQ4LDgwMC43MzI3OTk0MTIxNDc1LDEwMDEuMTE3NjE4MTQxNzEzMSwyMDMuMjk3NTQ3NzgxMDkzNywxMTg4LjQzOTkzODA3MTIzMjUsMjM1LjE5OTExNDAzNzQxMDYsNjI0LjM2MzExODEzODcyMyw1NTguMDY2ODI0MjA0MzI3LDEyODEuMDkxMjUwNDQ1NzI1Niw5MjguMTAwMDI3MTAxMDY3MiwyNjEuMDE2MTQ4MTk1Nzg4Miw3NTkuNjc1NDgyMDM3MzM0MSw1MDUuOTIyNjIyNTYxMjE5Myw3NDcuNDA2NDM0OTE1MzU1LDgyOS45NzU5MDE4MTM3NzExLDczOC4zMzg4NDUwOTQ0MjE5LDE2ODMuMDI3NDIyMTY0ODg0LDEwNy4zMjk1NjczMTg5NjUzMywxLjM0Mzg1ODY4ODA3ODU3OTIKKzEyLFNhdCA1IEZlYiAxMSw2NS4wMzUyOTkzMTA0MDg5Miw1OC4wNjcwMjY4NjY4OTM0MSwzMy43OTk3MzU5NjYwNTc1MDQsNjkuODcyOTMyNTI5NzUxMDEsNzAuNDMxMjE0MjI1NzA5NiwxMTM4LjU0ODE4NTY4MjczMiwxMjM3LjI1OTEzMzg3MDgzNDEsMTAxNC4wNTIwMjg2OTQwNDEzLDg4MC44MDY1MTk3NTcyODI4LDExMDEuMjI5OTMwNTcxNjc1NiwyMjMuNjI3NDE0MzczMDc3OTgsMTMwNy4yODQ1ODU1MjE2MjksMjU4LjcxOTE1NDgwMDkyMzE1LDY4Ni43OTk3NzMzNTI5OTcyLDYxMy44NzM4MTM1NjIxMjY4LDE0MDkuMjAxMDgwMDkxODk1MiwxMDIwLjkxMDU0MDI2NzIwOTcsMjg3LjExNzkwNjU3NDUzNTY1LDgzNS42NDM0NDgwNjM0MTgyLDU1Ni41MTUxNjMwNzUzNDAzLDgyMi4xNDc0ODk0ODEyNTE5LDkxMi45NzM5NDg0ODI4MDcxLDgxMi4xNzMxMzU2OTEwNDEyLDE4NTEuMzMxMDkwMDQ4MzA2MSwxMTguMDYyNTgzMDgyMjQxOTcsMS40NzgyNDUyOTYwMTAxOTQyCisxMyxTdW4gNiBGZWIgMTEsNzAuOTQ3NjM0NzIxNTk1MzIsNjMuMzQ1ODc5MTY0MTQ4ODA1LDM2Ljg3MjQ1NzY3MTk1ODY2NCw3Ni4yMjUwNTU0MTc3NzQxMyw3Ni44MzQwOTAyOTk3MDE0NiwxMjQyLjA1MzE4NzIyNjk3MywxMzQ5LjczNzkxMTgyMDA4MTUsMTEwNi4yMzkxMjk4Nzc2MjI2LDk2MC44ODAzMjAxNzYxNzgyLDEyMDEuMzQyMzQzMTE0MDAwOSwyNDMuOTU3MzAxMjk0OTM4OTYsMTQyNi4xMjkzNTE4MTY3MzE3LDI4Mi4yMzkyMTkwODQ0ODgyNCw3NDkuMjM2NDkxMDAzOTU3Niw2NjkuNjgwODU4NzI2OTQzOSwxNTM3LjMxMTAzNzg0Nzk1ODIsMTExMy43MjExNDYyNDM5MTIsMzEzLjIxOTY5MTA1NTA1NDQsOTExLjYxMTQ5MDA1NzUwNjQsNjA3LjEwNzc1NDE4MjAyNyw4OTYuODg4NjE4Nzg4MjQwNyw5OTUuOTcyMDc4MTQ5OTMxNSw4ODYuMDA3NTAwMTIxOTg4MiwyMDE5LjYzNDkyNjIzNTQ3OTcsMTI4Ljc5NTYwOTU3ODUzOTcsMS42MTI2MzIwMzgzMjg0ODM2CisxNCxNb24gNyBGZWIgMTEsNzYuODU5OTc2MDQ1MTIwMDYsNjguNjI0NzM2NzQwMjU5MTUsMzkuOTQ1MTgyNDUwNTgzMDYsODIuNTc3MTg0NjU3OTIzMzQsODMuMjM2OTcyNzc2NTcyNiwxMzQ1LjU1ODI5MjI3NjI2NzYsMTQ2Mi4yMTY4MDIyNDgxNjM3LDExOTguNDI2MzIzMjQ4MzUxMywxMDQwLjk1NDIwMDY2ODkxNDQsMTMwMS40NTQ4NTU3Njg3ODkyLDI2NC4yODcyMDg1NDY2OTcxLDE1NDQuOTc0MjM2OTU2NjYxMSwzMDUuNzU5MzA2ODg4MTI5NDYsODExLjY3MzI3MTA5MTY2NzQsNzI1LjQ4Nzk1OTY5ODgzNDMsMTY2NS40MjExMjM3MTQwNDM3LDEyMDYuNTMxODQ1MDMxMjY3MywzMzkuMzIxNTAxNjM3MzcwOCw5ODcuNTc5NjA4MDE5Njc0OCw2NTcuNzAwMzk1ODgxMzMwMSw5NzEuNjI5ODIyODM2Mzk2MywxMDc4Ljk3MDI5MDgxNTIyNzEsOTU5Ljg0MTkzODM4NzMzNjUsMjE4Ny45Mzg5MzA3MjY1NzQsMTM5LjUyODY0NjgwNzg2OTM2LDEuNzQ3MDE4OTE1MDMzNTgzCisxNSxUdWUgOCBGZWIgMTEsODIuNzcyMzIzMjgwOTg5MTEsNzMuOTAzNTk5NTk1MjI5NzEsNDMuMDE3OTEwMzAxOTMzNzc1LDg4LjkyOTMyMDI1MDIwNDk1LDg5LjYzOTg2MTY1NjMyOTQ0LDE0NDkuMDYzNTAwODMwNzE4NiwxNTc0LjY5NTgwNTE1NTE5MjEsMTI5MC42MTM2MDg4MDYzMTk1LDExMjEuMDI4MTYxMjM1NTcxMSwxNDAxLjU2NzQ2ODUzNjEzOTYsMjg0LjYxNzEzNjEyODM3MjcsMTY2My44MTkyNDA5NDE1MzQ2LDMyOS4yNzk0MTgyMTE4NzAxLDg3NC4xMTAxMTM2MTYxODgzLDc4MS4yOTUxMTY0Nzc4NTM0LDE3OTMuNTMxMzM3NjkwMjc4NiwxMjk5LjM0MjYzNjYyOTM2NzUsMzY1LjQyMzMzODMyMTUxMDksMTA2My41NDc4MDE5NDk5OTk0LDcwOC4yOTMwODgxNzMzMDA0LDEwNDYuMzcxMTAxNjI1NzkzLDExNjEuOTY4NTg2NDc4Nzc2NiwxMDMzLjY3NjQ1MDQ4NzE1OTksMjM1Ni4yNDMxMDM1MjE3NTcsMTUwLjI2MTY5NDc3MDI0MTU4LDEuODgxNDA1OTI2MTI1NjI2NgorMTYsV2VkIDkgRmViIDExLDg4LjY4NDY3NjQyOTIwODMyLDc5LjE4MjQ2NzcyOTA2NTc1LDQ2LjA5MDY0MTIyNjAxMzg3LDk1LjI4MTQ2MjE5NDYyNTMzLDk2LjA0Mjc1NjkzODk3ODMzLDE1NTIuNTY4ODEyODkwNDI5NCwxNjg3LjE3NDkyMDU0MTI3OSwxMzgyLjgwMDk4NjU1MTYxOSwxMjAxLjEwMjIwMTg3NjIyODMsMTUwMS42ODAxODE0MTYxNTI3LDMwNC45NDcwODQwMzk5ODU5NSwxNzgyLjY2NDM2Mzc3MTQ3MTIsMzUyLjc5OTU1MzA1NTczMzgsOTM2LjU0NzAxODU3NzU4MjcsODM3LjEwMjMyOTA2NDA1NzEsMTkyMS42NDE2Nzk3NzY3OTEsMTM5Mi4xNTM1MjEwMzgzMDUxLDM5MS41MjUyMDExMDc1MDA2NiwxMTM5LjUxNjA3MTg0ODU1NTIsNzU4Ljg4NTgzMTA1Nzk4NzgsMTEyMS4xMTI0NTUxNTY1MDYsMTI0NC45NjY5NjUxNDA2NjI4LDExMDcuNTExMDM2NDIxNTMyMywyNTI0LjU0NzQ0NDYyMTE5NTYsMTYwLjk5NDc1MzQ2NTY2NzE3LDIuMDE1NzkzMDcxNjA0NzQ3NAorMTcsVGh1IDEwIEZlYiAxMSw5NC41OTcwMzU0ODk3ODM2NSw4NC40NjEzNDExNDE3NzI2LDQ5LjE2MzM3NTIyMjgyNjQ0LDEwMS42MzM2MTA0OTExOTA4NSwxMDIuNDQ1NjU4NjI0NTI1NzMsMTY1Ni4wNzQyMjg0NTU1MDQyLDE3OTkuNjU0MTQ4NDA2NTM4NSwxNDc0Ljk4ODQ1NjQ4NDM0MjYsMTI4MS4xNzYzMjI1OTA5NjYzLDE2MDEuNzkyOTk0NDA4OTI5MiwzMjUuMjc3MDUyMjgxNTU3MjUsMTkwMS41MDk2MDU0NDY1OTA1LDM3Ni4zMTk3MTE0MTk3NDQxLDk5OC45ODM5ODU5NzU5MTM0LDg5Mi45MDk1OTc0NTc1MDE2LDIwNDkuNzUyMTQ5OTczNzEwNCwxNDg0Ljk2NDQ5ODI1ODE3MzgsNDE3LjYyNzA4OTk5NTM2NjMsMTIxNS40ODQ0MTc3MTU0MTksODA5LjQ3ODYyNDUzNTQ0MzcsMTE5NS44NTM4ODM0Mjg2MSwxMzI3Ljk2NTQyNjgwMDk2OTUsMTE4MS4zNDU2OTYxOTA1Mjc0LDI2OTIuODUxOTU0MDI1MDYsMTcxLjcyNzgyMjg5NDE1NjgsMi4xNTAxODAzNTE0NzEwODEzCisxOCxGcmkgMTEgRmViIDExLDEwMC41MDk0MDA0NjI3MjEwMyw4OS43NDAyMTk4MzMzNTU1Miw1Mi4yMzYxMTIyOTIzNzQ1NiwxMDcuOTg1NzY1MTM5OTA3ODcsMTA4Ljg0ODU2NjcxMjk3ODA0LDE3NTkuNTc5NzQ3NTI2MDQ3MiwxOTEyLjEzMzQ4ODc1MTA4MjcsMTU2Ny4xNzYwMTg2MDQ1ODI2LDEzNjEuMjUwNTIzMzc5ODY1OSwxNzAxLjkwNTkwNzUxNDU2OTIsMzQ1LjYwNzA0MDg1MzEwNzIsMjAyMC4zNTQ5NjU5NjcwMTIsMzk5LjgzOTg5MzMwMzkyNDg0LDEwNjEuNDIxMDE1ODExMjQyOCw5NDguNzE2OTIxNjU4MjQyNywyMTc3Ljg2Mjc0ODI4MTE2NDQsMTU3Ny43NzU1NjgyODkwNjY1LDQ0My43MjkwMDQ5ODUxMzQsMTI5MS40NTI4Mzk1NTA2Njc1LDg2MC4wNzE0Njg2MDU3MTg3LDEyNzAuNTk1Mzg2NDQyMTgwMSwxNDEwLjk2Mzk3MTQ1OTc4LDEyNTUuMTgwNDI5Nzk0MjIsMjg2MS4xNTY2MzE3MzM1MTk2LDE4Mi40NjA5MDMwNTU3MjEzMywyLjI4NDU2Nzc2NTcyNDc2MjcKKzE5LFNhdCAxMiBGZWIgMTEsMTA2LjQyMTc3MTM0ODAyNjMzLDk1LjAxOTEwMzgwMzgxOTc3LDU1LjMwODg1MjQzNDY2MTI4LDExNC4zMzc5MjYxNDA3ODI3MSwxMTUuMjUxNDgxMjA0MzQxNjQsMTg2My4wODUzNzAxMDIxNjA2LDIwMjQuNjEyOTQxNTc1MDIzLDE2NTkuMzYzNjcyOTEyNDMwNywxNDQxLjMyNDgwNDI0MzAwNTcsMTgwMi4wMTg5MjA3MzMxNzIsMzY1LjkzNzA0OTc1NDY1NTgsMjEzOS4yMDA0NDUzMzI4NTI3LDQyMy4zNjAwOTg3MDgyOTksMTEyMy44NTgxMDgwODM2MzM2LDEwMDQuNTI0MzAxNjY2MzM1OCwyMzA1Ljk3MzQ3NDY5OTI4LDE2NzAuNTg2NzMxMTMxMDc2LDQ2OS44MzA5NDYwNzY4Mjk3LDEzNjcuNDIxMzM3MzU0Mzc1Myw5MTAuNjY0MzYzMjY4ODYzLDEzNDUuMzM2OTY0MTk3MjkwNiwxNDkzLjk2MjU5OTExNzE3NywxMzI5LjAxNTIzNzIzMjY4MjcsMzAyOS40NjE0Nzc3NDY3NDEsMTkzLjE5Mzk5Mzk1MDM3MTMyLDIuNDE4OTU1MzE0MzY1OTI2CisyMCxTdW4gMTMgRmViIDExLDExMi4zMzQxNDgxNDU3MDU0NCwxMDAuMjk3OTkzMDUzMTcwNiw1OC4zODE1OTU2NDk2ODk2NywxMjAuNjkwMDkzNDkzODIxNywxMjEuNjU0NDAyMDk4NjIyOTEsMTk2Ni41OTEwOTYxODM5NDgxLDIxMzcuMDkyNTA2ODc4NDcxLDE3NTEuNTUxNDE5NDA3OTgsMTUyMS4zOTkxNjUxODA0NjU4LDE5MDIuMTMyMDM0MDY0ODM3OSwzODYuMjY3MDc4OTg2MjIzMywyMjU4LjA0NjA0MzU0NDIzMjQsNDQ2Ljg4MDMyNzYzMjg5MDIsMTE4Ni4yOTUyNjI3OTMxNDc1LDEwNjAuMzMxNzM3NDgxODM2NiwyNDM0LjA4NDMyOTIyODE4NjYsMTc2My4zOTc5ODY3ODQyOTQsNDk1LjkzMjkxMzI3MDQ3OTQ1LDE0NDMuMzg5OTExMTI2NjE4Nyw5NjEuMjU3MzA4NTI0OTI3MSwxNDIwLjA3ODYxNjY5NDAxNTYsMTU3Ni45NjEzMDk3NzMyNDI2LDE0MDIuODUwMTE4NTA1OTg5NSwzMTk3Ljc2NjQ5MjA2NDg5MTMsMjAzLjkyNzA5NTU3ODExNzUzLDIuNTUzMzQyOTk3Mzk0NzA1CisyMSxNb24gMTQgRmViIDExLDExOC4yNDY1MzA4NTU3NjQzMiwxMDUuNTc2ODg3NTgxNDEzMzIsNjEuNDU0MzQxOTM3NDYyODEsMTI3LjA0MjI2NzE5OTAzMTIzLDEyOC4wNTczMjkzOTU4MjgyOCwyMDcwLjA5NjkyNTc3MTUxMzMsMjI0OS41NzIxODQ2NjE1NDE1LDE4NDMuNzM5MjU4MDkxMzIxLDE2MDEuNDczNjA2MTkyMzI3NSwyMDAyLjI0NTI0NzUwOTY2Nyw0MDYuNTk3MTI4NTQ3ODMwMjcsMjM3Ni44OTE3NjA2MDEyNjg3LDQ3MC40MDA1ODAwNzc3MjIxNywxMjQ4LjczMjQ3OTkzOTg0NzUsMTExNi4xMzkyMjkxMDQ4MDE0LDI1NjIuMTk1MzExODY4MDExMiwxODU2LjIwOTMzNTI0ODgxNDYsNTIyLjAzNDkwNjU2NjEwOTUsMTUxOS4zNTg1NjA4Njc0NzQsMTAxMS44NTAzMDQzNzM5NjE2LDE0OTQuODIwMzQzOTMyNDMxLDE2NTkuOTYwMTAzNDI4MDYwNCwxNDc2LjY4NTA3MzYxNDIxNDYsMzM2Ni4wNzE2NzQ2ODgxNDAzLDIxNC42NjAyMDc5Mzg5NzA3MywyLjY4NzczMDgxNDgxMTIzMzgKKzIyLFR1ZSAxNSBGZWIgMTEsMTI0LjE1ODkxOTQ3ODIwODg3LDExMC44NTU3ODczODg1NTMyMiw2NC41MjcwOTEyOTc5ODM3NiwxMzMuMzk0NDQ3MjU2NDE3NTgsMTM0LjQ2MDI2MzA5NTk2NDE0LDIxNzMuNjAyODU4ODY0OTU5NywyMzYyLjA1MTk3NDkyNDM0NjcsMTkzNS45MjcxODg5NjI1NDcsMTY4MS41NDgxMjcyNzg2NywyMTAyLjM1ODU2MTA2Nzc2LDQyNi45MjcxOTg0Mzk0OTcsMjQ5NS43Mzc1OTY1MDQwODI0LDQ5My45MjA4NTYwNDI4MTgzNCwxMzExLjE2OTc1OTUyMzc5NiwxMTcxLjk0Njc3NjUzNTI4NTIsMjY5MC4zMDY0MjI2MTg4ODI2LDE5NDkuMDIwNzc2NTI0NzI5NCw1NDguMTM2OTI1OTYzNzQ1OSwxNTk1LjMyNzI4NjU3NzAxNjgsMTA2Mi40NDMzNTA4MTYwMTc1LDE1NjkuNTYyMTQ1OTEyNjEwNSwxNzQyLjk1ODk4MDA4MTcxMzIsMTU1MC41MjAxMDI1NTc0MzE1LDM1MzQuMzc3MDI1NjE2NjU2LDIyNS4zOTMzMzEwMzI5NDE3LDIuODIyMTE4NzY2NjE1NjQ3NQorMjMsV2VkIDE2IEZlYiAxMSwxMzAuMDcxMzE0MDEzMDQ1LDExNi4xMzQ2OTI0NzQ1OTU1NSw2Ny41OTk4NDM3MzEyNTU2LDEzOS43NDY2MzM2NjU5ODcyLDE0MC44NjMyMDMxOTkwMzY5LDIyNzcuMTA4ODk1NDY0MzkwNiwyNDc0LjUzMTg3NzY2Njk5NzQsMjAyOC4xMTUyMTIwMjE3NDk4LDE3NjEuNjIyNzI4NDM5NTczNCwyMjAyLjQ3MTk3NDczOTIxNjQsNDQ3LjI1NzI4ODY2MTI0Mzc2LDI2MTQuNTgzNTUxMjUyNzkwNiw1MTcuNDQxMTU1NTI4MjAyMiwxMzczLjYwNzEwMTU0NTA1NSwxMjI3Ljc1NDM3OTc3MzM0NDUsMjgxOC40MTc2NjE0ODA5MjksMjA0MS44MzIzMTA2MTIxMzE4LDU3NC4yMzg5NzE0NjM0MTQ2LDE2NzEuMjk2MDg4MjU1MzIzNiwxMTEzLjAzNjQ0Nzg1MTE0NDksMTY0NC4zMDQwMjI2MzQ2Mjk3LDE4MjUuOTU3OTM5NzM0Mjg0LDE2MjQuMzU1MjA1MzM1NzE0MSwzNzAyLjY4MjU0NDg1MDYwNywyMzYuMTI2NDY0ODYwMDQxMDcsMi45NTY1MDY4NTI4MDgwOAorMjQsVGh1IDE3IEZlYiAxMSwxMzUuOTgzNzE0NDYwMjc4NiwxMjEuNDEzNjAyODM5NTQ1Niw3MC42NzI1OTkyMzcyODE0NSwxNDYuMDk4ODI2NDI3NzQ2NDIsMTQ3LjI2NjE0OTcwNTA1Mjk1LDIzODAuNjE1MDM1NTY5OTEwNiwyNTg3LjAxMTg5Mjg4OTYwOCwyMTIwLjMwMzMyNzI2OTAyMiwxODQxLjY5NzQwOTY3NTExOCwyMzAyLjU4NTQ4ODUyNDEzNyw0NjcuNTg3Mzk5MjEzMDkwODYsMjczMy40Mjk2MjQ4NDc1MTM0LDU0MC45NjE0Nzg1MzM4OTc0LDE0MzYuMDQ0NTA2MDAzNjg3LDEyODMuNTYyMDM4ODE5MDM0OCwyOTQ2LjUyOTAyODQ1NDI3OCwyMTM0LjY0MzkzNzUxMTExNDUsNjAwLjM0MTA0MzA2NTE0MTksMTc0Ny4yNjQ5NjU5MDI0NywxMTYzLjYyOTU5NTQ3OTM5NDgsMTcxOS4wNDU5NzQwOTg1NjI3LDE5MDguOTU2OTgyMzg1ODU1OCwxNjk4LjE5MDM4MTk0OTEzNjcsMzg3MC45ODgyMzIzOTAxNjEsMjQ2Ljg1OTYwOTQyMDI3OTY0LDMuMDkwODk1MDczMzg4NjY1NQorMjUsRnJpIDE4IEZlYiAxMSwxNDEuODk2MTIwODE5OTE1NiwxMjYuNjkyNTE4NDgzNDA4NjgsNzMuNzQ1MzU3ODE2MDY0MzEsMTUyLjQ1MTAyNTU0MTcwMTYsMTUzLjY2OTEwMjYxNDAxODczLDI0ODQuMTIxMjc5MTgxNjIyLDI2OTkuNDkyMDIwNTkyMjkxLDIyMTIuNDkxNTM0NzA0NDU1NywxOTIxLjc3MjE3MDk4NTM4NDUsMjQwMi42OTkxMDI0MjI2MjEsNDg3LjkxNzUzMDA5NTA1ODc0LDI4NTIuMjc1ODE3Mjg4MzY5Niw1NjQuNDgxODI1MDU5OTI3NSwxNDk4LjQ4MTk3Mjg5OTc1NTIsMTMzOS4zNjk3NTM2NzI0MTIzLDMwNzQuNjQwNTIzNTM5MDU4NCwyMjI3LjQ1NTY1NzIyMTc3MDcsNjI2LjQ0MzE0MDc2ODk1MzksMTgyMy4yMzM5MTk1MTg1MzE4LDEyMTQuMjIyNzkzNzAwODE3NiwxNzkzLjc4ODAwMDMwNDQ4NSwxOTkxLjk1NjEwODAzNjUxMjIsMTc3Mi4wMjU2MzIzOTc3NzMsNDAzOS4yOTQwODgyMzU0ODc0LDI1Ny41OTI3NjQ3MTM2NjgyLDMuMjI1MjgzNDI4MzU3NTM4NQorMjYsU2F0IDE5IEZlYiAxMSwxNDcuODA4NTMzMDkxOTYxOTUsMTMxLjk3MTQzOTQwNjE4OTk3LDc2LjgxODExOTQ2NzYwNzI5LDE1OC44MDMyMzEwMDc4NTkwNCwxNjAuMDcyMDYxOTI1OTQwNiwyNTg3LjYyNzYyNjI5OTYyOTQsMjgxMS45NzIyNjA3NzUxNTYsMjMwNC42Nzk4MzQzMjgxNDI1LDIwMDEuODQ3MDEyMzcwNDUyLDI1MDIuODEyODE2NDM0NzY5LDUwOC4yNDc2ODEzMDcxNjc2LDI5NzEuMTIyMTI4NTc1NDc3Myw1ODguMDAyMTk1MTA2MzE1NiwxNTYwLjkxOTUwMjIzMzMyMSwxMzk1LjE3NzUyNDMzMzUzMjMsMzIwMi43NTIxNDY3MzUzOTgsMjMyMC4yNjc0Njk3NDQxOTMsNjUyLjU0NTI2NDU3NDg3NjYsMTg5OS4yMDI5NDkxMDM1ODUsMTI2NC44MTYwNDI1MTU0NjQsMTg2OC41MzAxMDEyNTI0NzA2LDIwNzQuOTU1MzE2Njg2MzM1NywxODQ1Ljg2MDk1NjY4MTY5NjUsNDIwNy42MDAxMTIzODY3NTMsMjY4LjMyNTkzMDc0MDIxNzQsMy4zNTk2NzE5MTc3MTQ4MzQ0CisyNyxTdW4gMjAgRmViIDExLDE1My43MjA5NTEyNzY0MjM1MywxMzcuMjUwMzY1NjA3ODk0OSw3OS44OTA4ODQxOTE5MTM0NCwxNjUuMTU1NDQyODI2MjI1MiwxNjYuNDc1MDI3NjQwODI0OTUsMjY5MS4xMzQwNzY5MjQwMzU1LDI5MjQuNDUyNjEzNDM4MzE4NiwyMzk2Ljg2ODIyNjE0MDE3NDYsMjA4MS45MjE5MzM4MzA0MDEsMjYwMi45MjY2MzA1NjA2ODI1LDUyOC41Nzc4NTI4NDk0Mzc5LDMwODkuOTY4NTU4NzA4OTU1Nyw2MTEuNTIyNTg4NjczMDg1NywxNjIzLjM1NzA5NDAwNDQ0NzYsMTQ1MC45ODUzNTA4MDI0NTEyLDMzMzAuODYzODk4MDQzNDI1LDI0MTMuMDc5Mzc1MDc4NDc0Niw2NzguNjQ3NDE0NDgyOTM2MywxOTc1LjE3MjA1NDY1NzcwNjQsMTMxNS40MDkzNDE5MjMzODQ1LDE5NDMuMjcyMjc2OTQyNTk0NSwyMTU3Ljk1NDYwODMzNTQxLDE5MTkuNjk2MzU0ODAwOTgxMiw0Mzc1LjkwNjMwNDg0NDEyOCwyNzkuMDU5MTA3NDk5OTM4LDMuNDk0MDYwNTQxNDYwNjg3CisyOCxNb24gMjEgRmViIDExLDE1OS42MzMzNzUzNzMzMDYyNSwxNDIuNTI5Mjk3MDg4NTI4Niw4Mi45NjM2NTE5ODg5ODU4NywxNzEuNTA3NjYwOTk2ODA2MiwxNzIuODc3OTk5NzU4Njc4MjcsMjc5NC42NDA2MzEwNTQ5NDM3LDMwMzYuOTMzMDc4NTgxODg4NCwyNDg5LjA1NjcxMDE0MDY0NDYsMjE2MS45OTY5MzUzNjUzMTA1LDI3MDMuMDQwNTQ0ODAwNDU4NSw1NDguOTA4MDQ0NzIxODg5OCwzMjA4LjgxNTEwNzY4ODkyMyw2MzUuMDQzMDA1NzYwMjYwOCwxNjg1Ljc5NDc0ODIxMzE5NywxNTA2Ljc5MzIzMzA3OTIyNDEsMzQ1OC45NzU3Nzc0NjMyNjcsMjUwNS44OTEzNzMyMjQ3MDY1LDcwNC43NDk1OTA0OTMxNTg3LDIwNTEuMTQxMjM2MTgwOTcwNywxMzY2LjAwMjY5MTkyNDYyOTUsMjAxOC4wMTQ1MjczNzQ5MzEzLDIyNDAuOTUzOTgyOTgzODE3LDE5OTMuNTMxODI2NzU1NzAwNCw0NTQ0LjIxMjY2NTYwNzc3OCwyODkuNzkyMjk0OTkyODQwNiwzLjYyODQ0OTI5OTU5NTIyOTgKKzI5LFR1ZSAyMiBGZWIgMTEsMTY1LjU0NTgwNTM4MjYxNTk1LDE0Ny44MDgyMzM4NDgwOTY1LDg2LjAzNjQyMjg1ODgyNzYzLDE3Ny44NTk4ODU1MTk2MDg2NCwxNzkuMjgwOTc4Mjc5NTA2OSwyODk4LjE0NzI4ODY5MjQ1NywzMTQ5LjQxMzY1NjIwNTk4MDMsMjU4MS4yNDUyODYzMjk2NDUsMjI0Mi4wNzIwMTY5NzUyNjI2LDI4MDMuMTU0NTU5MTU0MTk4NSw1NjkuMjM4MjU2OTI0NTQ0LDMzMjcuNjYxNzc1NTE1NDk5LDY1OC41NjM0NDYzNjc4NjUsMTc0OC4yMzI0NjQ4NTk2MzIsMTU2Mi42MDExNzExNjM5MDczLDM1ODcuMDg3Nzg0OTk1MDUzLDI1OTguNzAzNDY0MTgyOTg0Niw3MzAuODUxNzkyNjA1NTcwNCwyMTI3LjExMDQ5MzY3MzQ1NSwxNDE2LjU5NjA5MjUxOTI0OTYsMjA5Mi43NTY4NTI1NDk1NTUzLDIzMjMuOTUzNDQwNjMxNjM5OCwyMDY3LjM2NzM3MjU0NTkyOTQsNDcxMi41MTkxOTQ2Nzc4NzQsMzAwLjUyNTQ5MzIxODkzNjA1LDMuNzYyODM4MTkyMTE4NTk4NworMzAsV2VkIDIzIEZlYiAxMSwxNzEuNDU4MjQxMzA0MzU4NjQsMTUzLjA4NzE3NTg4NjYwMzc1LDg5LjEwOTE5NjgwMTQ0MTgsMTg0LjIxMjExNjM5NDYzODc3LDE4NS42ODM5NjMyMDMzMTczLDMwMDEuNjU0MDQ5ODM2NjgsMzI2MS44OTQzNDYzMTA3MDU3LDI2NzMuNDMzOTU0NzA3MjY3NywyMzIyLjE0NzE3ODY2MDMzNiwyOTAzLjI2ODY3MzYyMjAwMiw1ODkuNTY4NDg5NDU3NDIwMiwzNDQ2LjUwODU2MjE4ODgwMjQsNjgyLjA4MzkxMDQ5NTkyMTUsMTgxMC42NzAyNDM5NDM4MTQ3LDE2MTguNDA5MTY1MDU2NTU2NSwzNzE1LjE5OTkyMDYzODkwOSwyNjkxLjUxNTY0Nzk1MzQsNzU2Ljk1NDAyMDgyMDE5NzEsMjIwMy4wNzk4MjcxMzUyMzQsMTQ2Ny4xODk1NDM3MDcyOTU2LDIxNjcuNDk5MjUyNDY2NTQyNywyNDA2Ljk1Mjk4MTI3ODk2MTUsMjE0MS4yMDI5OTIxNzE3NDAzLDQ4ODAuODI1ODkyMDU0NTgyLDMxMS4yNTg3MDIxNzgyMzUyLDMuODk3MjI3MjE5MDMwOTI3CiszMSxUaHUgMjQgRmViIDExLDE3Ny4zNzA2ODMxMzg1NDAyNCwxNTguMzY2MTIzMjA0MDU1Nyw5Mi4xODE5NzM4MTY4MzE0NywxOTAuNTY0MzUzNjIxOTAyOSwxOTIuMDg2OTU0NTMwMTE1NzIsMzEwNS4xNjA5MTQ0ODc3MTU3LDMzNzQuMzc1MTQ4ODk2MTc4LDI3NjUuNjIyNzE1MjczNjA1LDI0MDIuMjIyNDIwNDIwNjExMywzMDAzLjM4Mjg4ODIwMzk3Miw2MDkuODk4NzQyMzIwNTM5MywzNTY1LjM1NTQ2NzcwODk1MjMsNzA1LjYwNDM5ODE0NDQ1NCwxODczLjEwODA4NTQ2NTgwOCwxNjc0LjIxNzIxNDc1NzIyNzMsMzg0My4zMTIxODQzOTQ5NjUyLDI3ODQuMzI3OTI0NTM2MDQ1LDc4My4wNTYyNzUxMzcwNjUzLDIyNzkuMDQ5MjM2NTY2Mzg2LDE1MTcuNzgzMDQ1NDg4ODE4NSwyMjQyLjI0MTcyNzEyNTk2NywyNDg5Ljk1MjYwNDkyNTg2NSwyMjE1LjAzODY4NTYzMzIwOCw1MDQ5LjEzMjc1NzczODA3MjUsMzIxLjk5MTkyMTg3MDc0ODcsNC4wMzE2MTYzODAzMzIzNDkKKzMyLEZyaSAyNSBGZWIgMTEsMTgzLjI4MzEzMDg4NTE2NjYzLDE2My42NDUwNzU4MDA0NTc2LDk1LjI1NDc1MzkwNDk5OTY2LDE5Ni45MTY1OTcyMDE0MDc1LDE5OC40ODk5NTIyNTk5MDg2OCwzMjA4LjY2Nzg4MjY0NTY2ODcsMzQ4Ni44NTYwNjM5NjI1MDkzLDI4NTcuODExNTY4MDI4NzQ4OCwyNDgyLjI5Nzc0MjI1NjE2OCwzMTAzLjQ5NzIwMjkwMDIwNTYsNjMwLjIyOTAxNTUxMzkyMTIsMzY4NC4yMDI0OTIwNzYwNjY0LDcyOS4xMjQ5MDkzMTM0ODU3LDE5MzUuNTQ1OTg5NDI1NjczNywxNzMwLjAyNTMyMDI2NTk3NTYsMzk3MS40MjQ1NzYyNjMzNDksMjg3Ny4xNDAyOTM5MzEwMTMzLDgwOS4xNTg1NTU1NTYyMDA3LDIzNTUuMDE4NzIxOTY2OTg0MiwxNTY4LjM3NjU5Nzg2Mzg2OCwyMzE2Ljk4NDI3NjUyNzkwMywyNTcyLjk1MjMxMTU3MjQzNDYsMjI4OC44NzQ0NTI5MzA0MDYsNTIxNy40Mzk3OTE3Mjg1MTMsMzMyLjcyNTE1MjI5NjQ4NzIsNC4xNjYwMDU2NzYwMjMKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvRGVtb2dyYXBoaWNTRUlSRGlzZWFzZV9SS19SZWZlcmVuY2UvRGVtb2dyYXBoaWNNb2RlbC93b21lbi9Db3VudF8yLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvRGVtb2dyYXBoaWNTRUlSRGlzZWFzZV9SS19SZWZlcmVuY2UvRGVtb2dyYXBoaWNNb2RlbC93b21lbi9Db3VudF8yLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNjZjNjMwCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9EZW1vZ3JhcGhpY1NFSVJEaXNlYXNlX1JLX1JlZmVyZW5jZS9EZW1vZ3JhcGhpY01vZGVsL3dvbWVuL0NvdW50XzIuY3N2CkBAIC0wLDAgKzEsMzMgQEAKK2l0ZXJhdGlvbix0aW1lLEVHLUZSRy1HMjEwMDAxLEVHLUZSRy1HMjEwMDAyLEVHLUZSRy1HMjEwMDAzLEVHLUZSRy1HMjEwMDA0LEVHLUZSRy1HMjEwMDA1LEVHLUxPRS1HMjQwMDAxLEVHLUxPRS1HMjQwMDAyLEVHLUxPRS1HMjQwMDAzLEVHLUxPRS1HMjQwMDA0LEVHLUxPRS1HMjQwMDA1LEVHLUxPRS1HMjQwMDA2LEVHLUxPRS1HMjQwMDA3LEVHLUxPRS1HMjQwMDA4LEVHLUxPRS1HMjQwMDA5LEVHLVVQRS1HMjkwMDAxLEVHLVVQRS1HMjkwMDAyLEVHLVVQRS1HMjkwMDAzLEVHLVVQRS1HMjkwMDA0LEVHLVVQRS1HMjkwMDA1LEVHLVVQRS1HMjkwMDA2LEVHLVVQRS1HMjkwMDA3LEVHLVVQRS1HMjkwMDA4LEVHLVVSRy1HMzAwMDAxLEVHLVVSRy1HMzAwMDAyLEVHLVVSRy1HMzAwMDAzLEVHLVVSRy1HMzAwMDA0CisxLFR1ZSAyNSBKYW4gMTEsMTQ3ODA2LjY4NTQ5Mjk5NjU2LDEzMTk2OS43ODk3NzAwNzA4Nyw3NjgxNy4xNTkyNDUxMTQ3NywxNTg4MDEuMjQ1OTc1NzQyNTIsMTYwMDcwLjA2MTAzMzUwMzUsMjU4NzU5NS4yODEwODkwNjkzLDI4MTE5MzcuMTExMjY4MzQ5NSwyMzA0NjUxLjAyNTk1MDI0OTgsMjAwMTgyMS45ODkzODcwNTY4LDI1MDI3ODEuNTMxNDA0OTExNSw1MDgyNDEuMzI4MjM3NjIyMTYsMjk3MTA4NC45ODk3MDM2MTQ3LDU4Nzk5NC44NDUxMDk1MDE2LDE1NjA4OTkuOTkwODIwODQwMiwxMzk1MTYwLjA4NDY4NzE0MDgsMzIwMjcxMi4xMTI1MDAzNzQsMjMyMDIzOC40NjY1MjE2NjksNjUyNTM3LjEwNzc5MzA1NTksMTg5OTE3OS4yMDkxNjU2MzY1LDEyNjQ4MDAuMjMyMzgwODA2LDE4Njg1MDYuNzQ0NzIzNTIxNCwyMDc0OTI5LjM3OTg1Mjk0NjQsMTg0NTgzNy44ODM1MTU4NzMyLDQyMDc1NDcuNTE3NjA0NDk0NSwyNjgzMjIuNTc2NjgwMDU4MiwzMzU5LjYyOTkyMTk5MDg0OTcKKzIsV2VkIDI2IEphbiAxMSwxNDc4MDYuODMzMjk5NzU1OTMsMTMxOTY5LjkyMTczOTkyNjUsNzY4MTcuMjM2MDYyMzEyNDQsMTU4ODAxLjQwNDc3NzA2NzksMTYwMDcwLjIyMTEwMzY0NDY0LDI1ODc1OTcuODY4Njg1NjQ2LDI4MTE5MzkuOTIzMjA2ODY3NywyMzA0NjUzLjMzMDYwMjQyNzUsMjAwMTgyMy45OTEyMTAwNDc5LDI1MDI3ODQuMDM0MTg3Njk0LDUwODI0MS44MzY0NzkyMDQ2LDI5NzEwODcuOTYwNzkwMDg5LDU4Nzk5NS40MzMxMDQ2NDAzLDE1NjA5MDEuNTUxNzIxNjEwNiwxMzk1MTYxLjQ3OTg0NzkyNCwzMjAyNzE1LjMxNTIxNDA4NjMsMjMyMDI0MC43ODY3NjEyOTM3LDY1MjUzNy43NjAzMzA0OTAxLDE4OTkxODEuMTA4MzQ1Nzk1NCwxMjY0ODAxLjQ5NzE4MTY3MTIsMTg2ODUwOC42MTMyMzEyMDEsMjA3NDkzMS40NTQ3ODMzNjM1LDE4NDU4MzkuNzI5MzU0NjgwMyw0MjA3NTUxLjcyNTE1NDExNiwyNjgzMjIuODQ1MDAyNzY4NzQsMzM1OS42MzMyODE2MjI0NDk0CiszLFRodSAyNyBKYW4gMTEsMTQ3ODA2Ljk4MTEwNjY2MzEsMTMxOTcwLjA1MzcwOTkxNDI3LDc2ODE3LjMxMjg3OTU4NjksMTU4ODAxLjU2MzU3ODU1MjIsMTYwMDcwLjM4MTE3Mzk0NTgsMjU4NzYwMC40NTYyODQ4MDksMjgxMTk0Mi43MzUxNDgxOTYsMjMwNDY1NS42MzUyNTY5MDk4LDIwMDE4MjUuOTkzMDM1MDQwOCwyNTAyNzg2LjUzNjk3Mjk4MSw1MDgyNDIuMzQ0NzIxMjk1MjMsMjk3MTA5MC45MzE4Nzk1MzYyLDU4Nzk5Ni4wMjExMDAzNjczLDE1NjA5MDMuMTEyNjIzOTQyOCwxMzk1MTYyLjg3NTAxMDEwMTYsMzIwMjcxOC41MTc5MzEwMDQsMjMyMDI0My4xMDcwMDMyNCw2NTI1MzguNDEyODY4NTc2OCwxODk5MTgzLjAwNzUyNzg1MzEsMTI2NDgwMi43NjE5ODM4MDA0LDE4Njg1MTAuNDgxNzQwNzQ4LDIwNzQ5MzMuNTI5NzE1ODU1NCwxODQ1ODQxLjU3NTE5NTMzMTgsNDIwNzU1NS45MzI3MDc5NDQsMjY4MzIzLjExMzMyNTc0NzksMzM1OS42MzY2NDEyNTc0MTAyCis0LEZyaSAyOCBKYW4gMTEsMTQ3ODA3LjEyODkxMzcxODEzLDEzMTk3MC4xODU2ODAwMzM5Myw3NjgxNy4zODk2OTY5MzgxOSwxNTg4MDEuNzIyMzgwMTk1MSwxNjAwNzAuNTQxMjQ0NDA3LDI1ODc2MDMuMDQzODg2NTU5NSwyODExOTQ1LjU0NzA5MjMzNzYsMjMwNDY1Ny45Mzk5MTM2OTc1LDIwMDE4MjcuOTk0ODYyMDM0MiwyNTAyNzg5LjAzOTc2MDc2OTMsNTA4MjQyLjg1Mjk2Mzg5NDEsMjk3MTA5My45MDI5NzE5NTMsNTg3OTk2LjYwOTA5NjY4MjYsMTU2MDkwNC42NzM1Mjc4MzU2LDEzOTUxNjQuMjcwMTczNjc0MiwzMjAyNzIxLjcyMDY1MTEyMywyMzIwMjQ1LjQyNzI0NzUwNyw2NTI1MzkuMDY1NDA3MzE1OSwxODk5MTg0LjkwNjcxMTgxMDUsMTI2NDgwNC4wMjY3ODcxOTUxLDE4Njg1MTIuMzUwMjUyMTY0LDIwNzQ5MzUuNjA0NjUwNDIyNSwxODQ1ODQzLjQyMTAzNzgzMDQsNDIwNzU2MC4xNDAyNjU5ODM1LDI2ODMyMy4zODE2NDg5OTUzLDMzNTkuNjQwMDAwODk1NzMwMworNSxTYXQgMjkgSmFuIDExLDE0NzgwNy4yNzY3MjA5MjA5MywxMzE5NzAuMzE3NjUwMjg1NTgsNzY4MTcuNDY2NTE0MzY2MzMsMTU4ODAxLjg4MTE4MTk5NjgsMTYwMDcwLjcwMTMxNTAyODI0LDI1ODc2MDUuNjMxNDkwODk4LDI4MTE5NDguMzU5MDM5MjkxLDIzMDQ2NjAuMjQ0NTcyNzg5LDIwMDE4MjkuOTk2NjkxMDMwNSwyNTAyNzkxLjU0MjU1MTA2LDUwODI0My4zNjEyMDcwMDEzLDI5NzEwOTYuODc0MDY3MzQyLDU4Nzk5Ny4xOTcwOTM1ODU3LDE1NjA5MDYuMjM0NDMzMjg5NCwxMzk1MTY1LjY2NTMzODY0MiwzMjAyNzI0LjkyMzM3NDQ0NSwyMzIwMjQ3Ljc0NzQ5NDA5NCw2NTI1MzkuNzE3OTQ2NzA3NiwxODk5MTg2LjgwNTg5NzY2NjgsMTI2NDgwNS4yOTE1OTE4NTQ1LDE4Njg1MTQuMjE4NzY1NDQ5LDIwNzQ5MzcuNjc5NTg3MDY0OCwxODQ1ODQ1LjI2Njg4MjE3NDIsNDIwNzU2NC4zNDc4MjgyMjcsMjY4MzIzLjY0OTk3MjUxMTE2LDMzNTkuNjQzMzYwNTM3NDExCis2LFN1biAzMCBKYW4gMTEsMTQ3ODA3LjQyNDUyODI3MTYsMTMxOTcwLjQ0OTYyMDY2OTIsNzY4MTcuNTQzMzMxODcxMjcsMTU4ODAyLjAzOTk4Mzk1NzM3LDE2MDA3MC44NjEzODU4MDk1NSwyNTg3NjA4LjIxOTA5NzgyMzQsMjgxMTk1MS4xNzA5ODkwNTYsMjMwNDY2Mi41NDkyMzQxODUsMjAwMTgzMS45OTg1MjIwMjgzLDI1MDI3OTQuMDQ1MzQzODU0NSw1MDgyNDMuODY5NDUwNjE2NjUsMjk3MTA5OS44NDUxNjU3MDE2LDU4Nzk5Ny43ODUwOTEwNzY3LDE1NjA5MDcuNzk1MzQwMzA0MywxMzk1MTY3LjA2MDUwNTAwNDgsMzIwMjcyOC4xMjYxMDA5NywyMzIwMjUwLjA2Nzc0MzAwMiw2NTI1NDAuMzcwNDg2NzUxOCwxODk5MTg4LjcwNTA4NTQyMjYsMTI2NDgwNi41NTYzOTc3NzksMTg2ODUxNi4wODcyODA2MDIsMjA3NDkzOS43NTQ1MjU3ODIzLDE4NDU4NDcuMTEyNzI4MzY0Myw0MjA3NTY4LjU1NTM5NDY3OSwyNjgzMjMuOTE4Mjk2Mjk1NCwzMzU5LjY0NjcyMDE4MjQ1MQorNyxNb24gMzEgSmFuIDExLDE0NzgwNy41NzIzMzU3NzAwNiwxMzE5NzAuNTgxNTkxMTg0OCw3NjgxNy42MjAxNDk0NTMsMTU4ODAyLjE5ODc4NjA3NjcsMTYwMDcxLjAyMTQ1Njc1MDk1LDI1ODc2MTAuODA2NzA3MzM2NiwyODExOTUzLjk4Mjk0MTYzMywyMzA0NjY0Ljg1Mzg5Nzg4NywyMDAxODM0LjAwMDM1NTAyNzgsMjUwMjc5Ni41NDgxMzkxNTIsNTA4MjQ0LjM3NzY5NDc0MDIsMjk3MTEwMi44MTYyNjcwMzIsNTg3OTk4LjM3MzA4OTE1NTksMTU2MDkwOS4zNTYyNDg4OCwxMzk1MTY4LjQ1NTY3Mjc2MjYsMzIwMjczMS4zMjg4MzA2OTc2LDIzMjAyNTIuMzg3OTk0MjMsNjUyNTQxLjAyMzAyNzQ0ODYsMTg5OTE5MC42MDQyNzUwNzcsMTI2NDgwNy44MjEyMDQ5NjgsMTg2ODUxNy45NTU3OTc2MjM2LDIwNzQ5NDEuODI5NDY2NTc0MSwxODQ1ODQ4Ljk1ODU3NjQwMDMsNDIwNzU3Mi43NjI5NjUzMzgsMjY4MzI0LjE4NjYyMDM0Nzg0LDMzNTkuNjUwMDc5ODMwODUxNgorOCxUdWUgMSBGZWIgMTEsMTQ3ODA3LjcyMDE0MzQxNjMsMTMxOTcwLjcxMzU2MTgzMjQsNzY4MTcuNjk2OTY3MTExNTcsMTU4ODAyLjM1NzU4ODM1NDg1LDE2MDA3MS4xODE1Mjc4NTI0NiwyNTg3NjEzLjM5NDMxOTQzNjUsMjgxMTk1Ni43OTQ4OTcwMjEzLDIzMDQ2NjcuMTU4NTYzODkzLDIwMDE4MzYuMDAyMTkwMDI5LDI1MDI3OTkuMDUwOTM2OTUyLDUwODI0NC44ODU5MzkzNzE5NSwyOTcxMTA1Ljc4NzM3MTMzMyw1ODc5OTguOTYxMDg3ODIyNywxNTYwOTEwLjkxNzE1OTAxNjcsMTM5NTE2OS44NTA4NDE5MTYyLDMyMDI3MzQuNTMxNTYzNjI3LDIzMjAyNTQuNzA4MjQ3Nzc3LDY1MjU0MS42NzU1Njg3OTc5LDE4OTkxOTIuNTAzNDY2NjMwNiwxMjY0ODA5LjA4NjAxMzQyMTYsMTg2ODUxOS44MjQzMTY1MTQ0LDIwNzQ5NDMuOTA0NDA5NDQxMiwxODQ1ODUwLjgwNDQyNjI4MTcsNDIwNzU3Ni45NzA1NDAyMDUsMjY4MzI0LjQ1NDk0NDY2ODc1LDMzNTkuNjUzNDM5NDgyNjExNworOSxXZWQgMiBGZWIgMTEsMTQ3ODA3Ljg2Nzk1MTIxMDMzLDEzMTk3MC44NDU1MzI2MTE5Nyw3NjgxNy43NzM3ODQ4NDY5NCwxNTg4MDIuNTE2MzkwNzkxOCwxNjAwNzEuMzQxNTk5MTE0LDI1ODc2MTUuOTgxOTM0MTI0NiwyODExOTU5LjYwNjg1NTIyMTYsMjMwNDY2OS40NjMyMzIyMDMsMjAwMTgzOC4wMDQwMjcwMzIzLDI1MDI4MDEuNTUzNzM3MjU0LDUwODI0NS4zOTQxODQ1MTIxLDI5NzExMDguNzU4NDc4NjA2LDU4Nzk5OS41NDkwODcwNzc3LDE1NjA5MTIuNDc4MDcwNzE0NSwxMzk1MTcxLjI0NjAxMjQ2NSwzMjAyNzM3LjczNDI5OTc2LDIzMjAyNTcuMDI4NTAzNjQ1Nyw2NTI1NDIuMzI4MTEwNzk5NSwxODk5MTk0LjQwMjY2MDA4NCwxMjY0ODEwLjM1MDgyMzE0LDE4Njg1MjEuNjkyODM3MjczLDIwNzQ5NDUuOTc5MzU0MzgzLDE4NDU4NTIuNjUwMjc4MDA5Miw0MjA3NTgxLjE3ODExOTI3ODUsMjY4MzI0LjcyMzI2OTI1NzksMzM1OS42NTY3OTkxMzc3MzEKKzEwLFRodSAzIEZlYiAxMSwxNDc4MDguMDE1NzU5MTUyMTYsMTMxOTcwLjk3NzUwMzUyMzUsNzY4MTcuODUwNjAyNjU5MTYsMTU4ODAyLjY3NTE5MzM4NzU1LDE2MDA3MS41MDE2NzA1MzU2MiwyNTg3NjE4LjU2OTU1MTQwMDQsMjgxMTk2Mi40MTg4MTYyMzQ1LDIzMDQ2NzEuNzY3OTAyODE4LDIwMDE4NDAuMDA1ODY2MDM3MiwyNTAyODA0LjA1NjU0MDA2LDUwODI0NS45MDI0MzAxNjA0LDI5NzExMTEuNzI5NTg4ODUsNTg4MDAwLjEzNzA4NjkyMDksMTU2MDkxNC4wMzg5ODM5NzMyLDEzOTUxNzIuNjQxMTg0NDA4NywzMjAyNzQwLjkzNzAzOTA5NjQsMjMyMDI1OS4zNDg3NjE4MzQ3LDY1MjU0Mi45ODA2NTM0NTQsMTg5OTE5Ni4zMDE4NTU0MzYsMTI2NDgxMS42MTU2MzQxMjMsMTg2ODUyMy41NjEzNTk5MDAzLDIwNzQ5NDguMDU0MzAxMzk5NSwxODQ1ODU0LjQ5NjEzMTU4MjQsNDIwNzU4NS4zODU3MDI1NjIsMjY4MzI0Ljk5MTU5NDExNTQsMzM1OS42NjAxNTg3OTYyMTA1CisxMSxGcmkgNCBGZWIgMTEsMTQ3ODA4LjE2MzU2NzI0MTgsMTMxOTcxLjEwOTQ3NDU2NzAzLDc2ODE3LjkyNzQyMDU0ODE4LDE1ODgwMi44MzM5OTYxNDIxNywxNjAwNzEuNjYxNzQyMTE3MywyNTg3NjIxLjE1NzE3MTI2NDMsMjgxMTk2NS4yMzA3ODAwNTk1LDIzMDQ2NzQuMDcyNTc1NzM4LDIwMDE4NDIuMDA3NzA3MDQzMywyNTAyODA2LjU1OTM0NTM2ODMsNTA4MjQ2LjQxMDY3NjMxNjk0LDI5NzExMTQuNzAwNzAyMDY1LDU4ODAwMC43MjUwODczNTE5LDE1NjA5MTUuNTk5ODk4NzkyNiwxMzk1MTc0LjAzNjM1Nzc0NzYsMzIwMjc0NC4xMzk3ODE2MzUsMjMyMDI2MS42NjkwMjIzNDM2LDY1MjU0My42MzMxOTY3NjA3LDE4OTkxOTguMjAxMDUyNjg3NCwxMjY0ODEyLjg4MDQ0NjM3MTQsMTg2ODUyNS40Mjk4ODQzOTU2LDIwNzQ5NTAuMTI5MjUwNDkxMywxODQ1ODU2LjM0MTk4NzAwMTcsNDIwNzU4OS41OTMyOTAwNTEsMjY4MzI1LjI1OTkxOTI0MTEsMzM1OS42NjM1MTg0NTgwNDg3CisxMixTYXQgNSBGZWIgMTEsMTQ3ODA4LjMxMTM3NTQ3OTI3LDEzMTk3MS4yNDE0NDU3NDI1LDc2ODE4LjAwNDIzODUxNDAxLDE1ODgwMi45OTI3OTkwNTU2LDE2MDA3MS44MjE4MTM4NTkxMywyNTg3NjIzLjc0NDc5MzcxNiwyODExOTY4LjA0Mjc0NjY5NiwyMzA0Njc2LjM3NzI1MDk2NCwyMDAxODQ0LjAwOTU1MDA1MjIsMjUwMjgwOS4wNjIxNTMxNzksNTA4MjQ2LjkxODkyMjk4MTYsMjk3MTExNy42NzE4MTgyNTEsNTg4MDAxLjMxMzA4ODM3MTEsMTU2MDkxNy4xNjA4MTUxNzMsMTM5NTE3NS40MzE1MzI0ODE1LDMyMDI3NDcuMzQyNTI3Mzc2NSwyMzIwMjYzLjk4OTI4NTE3NCw2NTI1NDQuMjg1NzQwNzIwMSwxODk5MjAwLjEwMDI1MTgzOCwxMjY0ODE0LjE0NTI1OTg4NCwxODY4NTI3LjI5ODQxMDc1OTgsMjA3NDk1Mi4yMDQyMDE2NTgsMTg0NTg1OC4xODc4NDQyNjY5LDQyMDc1OTMuODAwODgxNzQ2LDI2ODMyNS41MjgyNDQ2MzUyLDMzNTkuNjY2ODc4MTIzMjQ2CisxMyxTdW4gNiBGZWIgMTEsMTQ3ODA4LjQ1OTE4Mzg2NDU2LDEzMTk3MS4zNzM0MTcwNDk5NCw3NjgxOC4wODEwNTY1NTY2NCwxNTg4MDMuMTUxNjAyMTI3ODIsMTYwMDcxLjk4MTg4NTc2MDk0LDI1ODc2MjYuMzMyNDE4NzU0LDI4MTE5NzAuODU0NzE2MTQ0NSwyMzA0Njc4LjY4MTkyODQ5MzUsMjAwMTg0Ni4wMTEzOTUwNjI2LDI1MDI4MTEuNTY0OTYzNDkzLDUwODI0Ny40MjcxNzAxNTQ3LDI5NzExMjAuNjQyOTM3NDA4OCw1ODgwMDEuOTAxMDg5OTc4LDE1NjA5MTguNzIxNzMzMTE0NCwxMzk1MTc2LjgyNjcwODYxMDksMzIwMjc1MC41NDUyNzYzMiwyMzIwMjY2LjMwOTU1MDMyMyw2NTI1NDQuOTM4Mjg1MzMyLDE4OTkyMDEuOTk5NDUyODg4MywxMjY0ODE1LjQxMDA3NDY2MTcsMTg2ODUyOS4xNjY5Mzg5OTI3LDIwNzQ5NTQuMjc5MTU0ODk5NSwxODQ1ODYwLjAzMzcwMzM3NzcsNDIwNzU5OC4wMDg0Nzc2NTE1LDI2ODMyNS43OTY1NzAyOTc3LDMzNTkuNjcwMjM3NzkxODAzNgorMTQsTW9uIDcgRmViIDExLDE0NzgwOC42MDY5OTIzOTc2NiwxMzE5NzEuNTA1Mzg4NDg5MzcsNzY4MTguMTU3ODc0Njc2MSwxNTg4MDMuMzEwNDA1MzU4ODIsMTYwMDcyLjE0MTk1NzgyMjg3LDI1ODc2MjguOTIwMDQ2MzgwNywyODExOTczLjY2NjY4ODQwNTQsMjMwNDY4MC45ODY2MDgzMjgsMjAwMTg0OC4wMTMyNDIwNzQ1LDI1MDI4MTQuMDY3Nzc2MzA5Myw1MDgyNDcuOTM1NDE3ODM1OSwyOTcxMTIzLjYxNDA1OTUzNzYsNTg4MDAyLjQ4OTA5MjE3MzIsMTU2MDkyMC4yODI2NTI2MTY1LDEzOTUxNzguMjIxODg2MTM1MiwzMjAyNzUzLjc0ODAyODQ2NiwyMzIwMjY4LjYyOTgxNzc5Miw2NTI1NDUuNTkwODMwNTk2NSwxODk5MjAzLjg5ODY1NTgzNzQsMTI2NDgxNi42NzQ4OTA3MDQyLDE4Njg1MzEuMDM1NDY5MDkzOCwyMDc0OTU2LjM1NDExMDIxNjMsMTg0NTg2MS44Nzk1NjQzMzQ0LDQyMDc2MDIuMjE2MDc3NzYzLDI2ODMyNi4wNjQ4OTYyMjg0LDMzNTkuNjczNTk3NDYzNzIxOAorMTUsVHVlIDggRmViIDExLDE0NzgwOC43NTQ4MDEwNzg1MiwxMzE5NzEuNjM3MzYwMDYwOCw3NjgxOC4yMzQ2OTI4NzIzNywxNTg4MDMuNDY5MjA4NzQ4NiwxNjAwNzIuMzAyMDMwMDQ0OCwyNTg3NjMxLjUwNzY3NjU5NDQsMjgxMTk3Ni40Nzg2NjM0Nzg1LDIzMDQ2ODMuMjkxMjkwNDY3LDIwMDE4NTAuMDE1MDkxMDg4NiwyNTAyODE2LjU3MDU5MTYyODYsNTA4MjQ4LjQ0MzY2NjAyNTM2LDI5NzExMjYuNTg1MTg0NjM4LDU4ODAwMy4wNzcwOTQ5NTYyLDE1NjA5MjEuODQzNTczNjc5NywxMzk1MTc5LjYxNzA2NTA1NDQsMzIwMjc1Ni45NTA3ODM4MTU3LDIzMjAyNzAuOTUwMDg3NTgyNyw2NTI1NDYuMjQzMzc2NTEzNiwxODk5MjA1Ljc5Nzg2MDY4NTcsMTI2NDgxNy45Mzk3MDgwMTEyLDE4Njg1MzIuOTA0MDAxMDYzNywyMDc0OTU4LjQyOTA2NzYwNzcsMTg0NTg2My43MjU0MjcxMzY4LDQyMDc2MDYuNDIzNjgyMDgxNSwyNjgzMjYuMzMzMjIyNDI3NCwzMzU5LjY3Njk1NzEzODk5OTYKKzE2LFdlZCA5IEZlYiAxMSwxNDc4MDguOTAyNjA5OTA3MjQsMTMxOTcxLjc2OTMzMTc2NDE0LDc2ODE4LjMxMTUxMTE0NTQ1LDE1ODgwMy42MjgwMTIyOTcyNCwxNjAwNzIuNDYyMTAyNDI2ODYsMjU4NzYzNC4wOTUzMDkzOTUzLDI4MTE5NzkuMjkwNjQxMzYzNywyMzA0Njg1LjU5NTk3NDkxMDUsMjAwMTg1Mi4wMTY5NDIxMDQ4LDI1MDI4MTkuMDczNDA5NDUxLDUwODI0OC45NTE5MTQ3MjMxNSwyOTcxMTI5LjU1NjMxMjcwODYsNTg4MDAzLjY2NTA5ODMyNzIsMTU2MDkyMy40MDQ0OTYzMDQyLDEzOTUxODEuMDEyMjQ1MzY5MSwzMjAyNzYwLjE1MzU0MjM2OCwyMzIwMjczLjI3MDM1OTY5Miw2NTI1NDYuODk1OTIzMDgzMywxODk5MjA3LjY5NzA2NzQzMywxMjY0ODE5LjIwNDUyNjU4MzIsMTg2ODUzNC43NzI1MzQ5MDE3LDIwNzQ5NjAuNTA0MDI3MDc0NywxODQ1ODY1LjU3MTI5MTc4NTcsNDIwNzYxMC42MzEyOTA2MDksMjY4MzI2LjYwMTU0ODg5NDgzLDMzNTkuNjgwMzE2ODE3NjM2CisxNyxUaHUgMTAgRmViIDExLDE0NzgwOS4wNTA0MTg4ODM3NywxMzE5NzEuOTAxMzAzNTk5NCw3NjgxOC4zODgzMjk0OTUzOCwxNTg4MDMuNzg2ODE2MDA0NjMsMTYwMDcyLjYyMjE3NDk2OSwyNTg3NjM2LjY4Mjk0NDc4NDQsMjgxMTk4Mi4xMDI2MjIwNTk2LDIzMDQ2ODcuOTAwNjYxNjU5LDIwMDE4NTQuMDE4Nzk1MTIzLDI1MDI4MjEuNTc2MjI5Nzc2Myw1MDgyNDkuNDYwMTYzOTI5MSwyOTcxMTMyLjUyNzQ0Mzc1MDgsNTg4MDA0LjI1MzEwMjI4NjQsMTU2MDkyNC45NjU0MjA0ODk0LDEzOTUxODIuNDA3NDI3MDc4OCwzMjAyNzYzLjM1NjMwNDEyMzUsMjMyMDI3NS41OTA2MzQxMjMsNjUyNTQ3LjU0ODQ3MDMwNTUsMTg5OTIwOS41OTYyNzYwNzk4LDEyNjQ4MjAuNDY5MzQ2NDIwNCwxODY4NTM2LjY0MTA3MDYwODUsMjA3NDk2Mi41Nzg5ODg2MTYxLDE4NDU4NjcuNDE3MTU4Mjc5OCw0MjA3NjE0LjgzODkwMzM0NiwyNjgzMjYuODY5ODc1NjMwNiwzMzU5LjY4MzY3NjQ5OTYzMzMKKzE4LEZyaSAxMSBGZWIgMTEsMTQ3ODA5LjE5ODIyODAwODA4LDEzMTk3Mi4wMzMyNzU1NjY3LDc2ODE4LjQ2NTE0NzkyMjEyLDE1ODgwMy45NDU2MTk4NzA4MiwxNjAwNzIuNzgyMjQ3NjcxMiwyNTg3NjM5LjI3MDU4Mjc2MSwyODExOTg0LjkxNDYwNTU2NzcsMjMwNDY5MC4yMDUzNTA3MTI0LDIwMDE4NTYuMDIwNjUwMTQzLDI1MDI4MjQuMDc5MDUyNjAzMyw1MDgyNDkuOTY4NDEzNjQzMywyOTcxMTM1LjQ5ODU3Nzc2NCw1ODgwMDQuODQxMTA2ODMzNCwxNTYwOTI2LjUyNjM0NjIzNTMsMTM5NTE4My44MDI2MTAxODM4LDMyMDI3NjYuNTU5MDY5MDgwNywyMzIwMjc3LjkxMDkxMDg3NDYsNjUyNTQ4LjIwMTAxODE4MDMsMTg5OTIxMS40OTU0ODY2MjU3LDEyNjQ4MjEuNzM0MTY3NTIyLDE4Njg1MzguNTA5NjA4MTg0LDIwNzQ5NjQuNjUzOTUyMjMzLDE4NDU4NjkuMjYzMDI2NjIwMyw0MjA3NjE5LjA0NjUyMDI4OCwyNjgzMjcuMTM4MjAyNjM0NywzMzU5LjY4NzAzNjE4NDk4OTcKKzE5LFNhdCAxMiBGZWIgMTEsMTQ3ODA5LjM0NjAzNzI4MDIyLDEzMTk3Mi4xNjUyNDc2NjU5OCw3NjgxOC41NDE5NjY0MjU2OSwxNTg4MDQuMTA0NDIzODk1OSwxNjAwNzIuOTQyMzIwNTMzNDUsMjU4NzY0MS44NTgyMjMzMjU2LDI4MTE5ODcuNzI2NTkxODg4LDIzMDQ2OTIuNTEwMDQyMDcsMjAwMTg1OC4wMjI1MDcxNjQ2LDI1MDI4MjYuNTgxODc3OTM0LDUwODI1MC40NzY2NjM4NjU4LDI5NzExMzguNDY5NzE0NzQ3Nyw1ODgwMDUuNDI5MTExOTY4NSwxNTYwOTI4LjA4NzI3MzU0MiwxMzk1MTg1LjE5Nzc5NDY4NDIsMzIwMjc2OS43NjE4MzcyNDEyLDIzMjAyODAuMjMxMTg5OTQ1Miw2NTI1NDguODUzNTY2NzA3NiwxODk5MjEzLjM5NDY5OTA3MDgsMTI2NDgyMi45OTg5ODk4ODg3LDE4Njg1NDAuMzc4MTQ3NjI4LDIwNzQ5NjYuNzI4OTE3OTI0NSwxODQ1ODcxLjEwODg5NjgwNjEsNDIwNzYyMy4yNTQxNDE0MzksMjY4MzI3LjQwNjUyOTkwNzE0LDMzNTkuNjkwMzk1ODczNzA1MworMjAsU3VuIDEzIEZlYiAxMSwxNDc4MDkuNDkzODQ2NzAwMTgsMTMxOTcyLjI5NzIxOTg5NzIsNzY4MTguNjE4Nzg1MDA2MDcsMTU4ODA0LjI2MzIyODA3OTcsMTYwMDczLjEwMjM5MzU1NTc4LDI1ODc2NDQuNDQ1ODY2NDc3LDI4MTE5OTAuNTM4NTgxMDIwNywyMzA0Njk0LjgxNDczNTczMiwyMDAxODYwLjAyNDM2NjE4OCwyNTAyODI5LjA4NDcwNTc2NjgsNTA4MjUwLjk4NDkxNDU5NjU0LDI5NzExNDEuNDQwODU0NzAyNiw1ODgwMDYuMDE3MTE3NjkxNiwxNTYwOTI5LjY0ODIwMjQwOTcsMTM5NTE4Ni41OTI5ODA1OCwzMjAyNzcyLjk2NDYwODYwNCwyMzIwMjgyLjU1MTQ3MTMzNjcsNjUyNTQ5LjUwNjExNTg4NzQsMTg5OTIxNS4yOTM5MTM0MTUyLDEyNjQ4MjQuMjYzODEzNTIsMTg2ODU0Mi4yNDY2ODg5NDA2LDIwNzQ5NjguODAzODg1NjkwOSwxODQ1ODcyLjk1NDc2ODgzNzcsNDIwNzYyNy40NjE3NjY3OTYsMjY4MzI3LjY3NDg1NzQ0Nzg2LDMzNTkuNjkzNzU1NTY1NzgwNQorMjEsTW9uIDE0IEZlYiAxMSwxNDc4MDkuNjQxNjU2MjY3OTUsMTMxOTcyLjQyOTE5MjI2MDQzLDc2ODE4LjY5NTYwMzY2MzI4LDE1ODgwNC40MjIwMzI0MjIzNiwxNjAwNzMuMjYyNDY2NzM4MTgsMjU4NzY0Ny4wMzM1MTIyMTY1LDI4MTE5OTMuMzUwNTcyOTY1LDIzMDQ2OTcuMTE5NDMxNjk5LDIwMDE4NjIuMDI2MjI3MjEzNywyNTAyODMxLjU4NzUzNjEwMyw1MDgyNTEuNDkzMTY1ODM1NSwyOTcxMTQ0LjQxMTk5NzYyOSw1ODgwMDYuNjA1MTI0MDAyNywxNTYwOTMxLjIwOTEzMjgzOCwxMzk1MTg3Ljk4ODE2Nzg3MDYsMzIwMjc3Ni4xNjczODMxNywyMzIwMjg0Ljg3MTc1NTA0ODYsNjUyNTUwLjE1ODY2NTcxOTgsMTg5OTIxNy4xOTMxMjk2NTg3LDEyNjQ4MjUuNTI4NjM4NDE2MiwxODY4NTQ0LjExNTIzMjEyMTQsMjA3NDk3MC44Nzg4NTU1MzIzLDE4NDU4NzQuODAwNjQyNzE1NSw0MjA3NjMxLjY2OTM5NjM2LDI2ODMyNy45NDMxODUyNTY5NywzMzU5LjY5NzExNTI2MTIxNgorMjIsVHVlIDE1IEZlYiAxMSwxNDc4MDkuNzg5NDY1OTgzNTEsMTMxOTcyLjU2MTE2NDc1NTU4LDc2ODE4Ljc3MjQyMjM5NzMsMTU4ODA0LjU4MDgzNjkyMzgsMTYwMDczLjQyMjU0MDA4MDcsMjU4NzY0OS42MjExNjA1NDM1LDI4MTE5OTYuMTYyNTY3NzIxNywyMzA0Njk5LjQyNDEyOTk3MSwyMDAxODY0LjAyODA5MDI0MTEsMjUwMjgzNC4wOTAzNjg5NDMsNTA4MjUyLjAwMTQxNzU4MjgsMjk3MTE0Ny4zODMxNDM1MjY1LDU4ODAwNy4xOTMxMzA5MDE3LDE1NjA5MzIuNzcwMDY0ODI4LDEzOTUxODkuMzgzMzU2NTU2NSwzMjAyNzc5LjM3MDE2MDkzODcsMjMyMDI4Ny4xOTIwNDEwODEsNjUyNTUwLjgxMTIxNjIwNDUsMTg5OTIxOS4wOTIzNDc4MDE0LDEyNjQ4MjYuNzkzNDY0NTc3MywxODY4NTQ1Ljk4Mzc3NzE3MDgsMjA3NDk3Mi45NTM4Mjc0NDksMTg0NTg3Ni42NDY1MTg0Mzk1LDQyMDc2MzUuODc3MDMwMTMzLDI2ODMyOC4yMTE1MTMzMzQ0LDMzNTkuNzAwNDc0OTYwMDExCisyMyxXZWQgMTYgRmViIDExLDE0NzgwOS45MzcyNzU4NDY5LDEzMTk3Mi42OTMxMzczODI3NCw3NjgxOC44NDkyNDEyMDgxNCwxNTg4MDQuNzM5NjQxNTg0MDgsMTYwMDczLjU4MjYxMzU4MzI4LDI1ODc2NTIuMjA4ODExNDU4LDI4MTE5OTguOTc0NTY1Mjg5NCwyMzA0NzAxLjcyODgzMDU0NzUsMjAwMTg2Ni4wMjk5NTUyNzAyLDI1MDI4MzYuNTkzMjA0Mjg0Niw1MDgyNTIuNTA5NjY5ODM4MywyOTcxMTUwLjM1NDI5MjM5NSw1ODgwMDcuNzgxMTM4Mzg4OCwxNTYwOTM0LjMzMDk5ODM3ODYsMTM5NTE5MC43Nzg1NDY2Mzc0LDMyMDI3ODIuNTcyOTQxOTEsMjMyMDI4OS41MTIzMjk0MzMsNjUyNTUxLjQ2Mzc2NzM0MTksMTg5OTIyMC45OTE1Njc4NDM0LDEyNjQ4MjguMDU4MjkyMDAyOSwxODY4NTQ3Ljg1MjMyNDA4OSwyMDc0OTc1LjAyODgwMTQ0MDMsMTg0NTg3OC40OTIzOTYwMDg3LDQyMDc2NDAuMDg0NjY4MTE0LDI2ODMyOC40Nzk4NDE2ODAxLDMzNTkuNzAzODM0NjYyMTY1NworMjQsVGh1IDE3IEZlYiAxMSwxNDc4MTAuMDg1MDg1ODU4MTMsMTMxOTcyLjgyNTExMDE0MTg2LDc2ODE4LjkyNjA2MDA5NTgsMTU4ODA0Ljg5ODQ0NjQwMzEyLDE2MDA3My43NDI2ODcyNDU5MiwyNTg3NjU0Ljc5NjQ2NDk2MTUsMjgxMjAwMS43ODY1NjU2NywyMzA0NzA0LjAzMzUzMzQyOTMsMjAwMTg2OC4wMzE4MjIzMDA3LDI1MDI4MzkuMDk2MDQyMTI5LDUwODI1My4wMTc5MjI2MDIxLDI5NzExNTMuMzI1NDQ0MjM0NSw1ODgwMDguMzY5MTQ2NDYzOCwxNTYwOTM1Ljg5MTkzMzQ5MDMsMTM5NTE5Mi4xNzM3MzgxMTM4LDMyMDI3ODUuNzc1NzI2MDg0NiwyMzIwMjkxLjgzMjYyMDEwNiw2NTI1NTIuMTE2MzE5MTMxOSwxODk5MjIyLjg5MDc4OTc4NDUsMTI2NDgyOS4zMjMxMjA2OTM0LDE4Njg1NDkuNzIwODcyODc1NSwyMDc0OTc3LjEwMzc3NzUwNjQsMTg0NTg4MC4zMzgyNzU0MjQsNDIwNzY0NC4yOTIzMTAzMDIsMjY4MzI4Ljc0ODE3MDI5NDEsMzM1OS43MDcxOTQzNjc2ODA2CisyNSxGcmkgMTggRmViIDExLDE0NzgxMC4yMzI4OTYwMTcwOSwxMzE5NzIuOTU3MDgzMDMzLDc2ODE5LjAwMjg3OTA2MDI0LDE1ODgwNS4wNTcyNTEzODEsMTYwMDczLjkwMjc2MTA2ODY2LDI1ODc2NTcuMzg0MTIxMDUxNSwyODEyMDA0LjU5ODU2ODg2MjMsMjMwNDcwNi4zMzgyMzg2MTUsMjAwMTg3MC4wMzM2OTEzMzM2LDI1MDI4NDEuNTk4ODgyNDc3LDUwODI1My41MjYxNzU4NzQyLDI5NzExNTYuMjk2NTk5MDQ2LDU4ODAwOC45NTcxNTUxMjcsMTU2MDkzNy40NTI4NzAxNjI3LDEzOTUxOTMuNTY4OTMwOTg1NCwzMjAyNzg4Ljk3ODUxMzQ2MiwyMzIwMjk0LjE1MjkxMzA5OSw2NTI1NTIuNzY4ODcxNTc0NywxODk5MjI0Ljc5MDAxMzYyNDgsMTI2NDgzMC41ODc5NTA2NDk0LDE4Njg1NTEuNTg5NDIzNTMwNSwyMDc0OTc5LjE3ODc1NTY0NzcsMTg0NTg4Mi4xODQxNTY2ODUxLDQyMDc2NDguNDk5OTU2Njk4LDI2ODMyOS4wMTY0OTkxNzYzMywzMzU5LjcxMDU1NDA3NjU1NDcKKzI2LFNhdCAxOSBGZWIgMTEsMTQ3ODEwLjM4MDcwNjMyMzksMTMxOTczLjA4OTA1NjA1NjA1LDc2ODE5LjA3OTY5ODEwMTUzLDE1ODgwNS4yMTYwNTY1MTc2NSwxNjAwNzQuMDYyODM1MDUxNSwyNTg3NjU5Ljk3MTc3OTcyOTIsMjgxMjAwNy40MTA1NzQ4NjcsMjMwNDcwOC42NDI5NDYxMDUsMjAwMTg3Mi4wMzU1NjIzNjgzLDI1MDI4NDQuMTAxNzI1MzI4LDUwODI1NC4wMzQ0Mjk2NTQ2LDI5NzExNTkuMjY3NzU2ODI4LDU4ODAwOS41NDUxNjQzNzg0LDE1NjA5MzkuMDEzODA4Mzk1NywxMzk1MTk0Ljk2NDEyNTI1MiwzMjAyNzkyLjE4MTMwNDA0MiwyMzIwMjk2LjQ3MzIwODQxMTYsNjUyNTUzLjQyMTQyNDY2OTksMTg5OTIyNi42ODkyMzkzNjQ2LDEyNjQ4MzEuODUyNzgxODY5NSwxODY4NTUzLjQ1Nzk3NjA1NCwyMDc0OTgxLjI1MzczNTg2NCwxODQ1ODg0LjAzMDAzOTc5MjIsNDIwNzY1Mi43MDc2MDczMDEsMjY4MzI5LjI4NDgyODMyNjk2LDMzNTkuNzEzOTEzNzg4Nzg5MworMjcsU3VuIDIwIEZlYiAxMSwxNDc4MTAuNTI4NTE2Nzc4NTIsMTMxOTczLjIyMTAyOTIxMTEsNzY4MTkuMTU2NTE3MjE5NjQsMTU4ODA1LjM3NDg2MTgxMzEsMTYwMDc0LjIyMjkwOTE5NDQsMjU4NzY2Mi41NTk0NDA5OTQsMjgxMjAxMC4yMjI1ODM2ODM3LDIzMDQ3MTAuOTQ3NjU1OTAwNCwyMDAxODc0LjAzNzQzNTQwNSwyNTAyODQ2LjYwNDU3MDY4MSw1MDgyNTQuNTQyNjgzOTQzMDYsMjk3MTE2Mi4yMzg5MTc1ODEzLDU4ODAxMC4xMzMxNzQyMTc1LDE1NjA5NDAuNTc0NzQ4MTkwMSwxMzk1MTk2LjM1OTMyMDkxMzQsMzIwMjc5NS4zODQwOTc4MjQzLDIzMjAyOTguNzkzNTA2MDQ1LDY1MjU1NC4wNzM5Nzg0MTc2LDE4OTkyMjguNTg4NDY3MDAzNSwxMjY0ODMzLjExNzYxNDM1NDcsMTg2ODU1NS4zMjY1MzA0NDYzLDIwNzQ5ODMuMzI4NzE4MTU1NCwxODQ1ODg1Ljg3NTkyNDc0NTMsNDIwNzY1Ni45MTUyNjIxMTIsMjY4MzI5LjU1MzE1Nzc0NTksMzM1OS43MTcyNzM1MDQzODMKKzI4LE1vbiAyMSBGZWIgMTEsMTQ3ODEwLjY3NjMyNzM4MDkzLDEzMTk3My4zNTMwMDI0OTgxLDc2ODE5LjIzMzMzNjQxNDU2LDE1ODgwNS41MzM2NjcyNjczNiwxNjAwNzQuMzgyOTgzNDk3MzEsMjU4NzY2NS4xNDcxMDQ4NDcsMjgxMjAxMy4wMzQ1OTUzMTIsMjMwNDcxMy4yNTIzNjgwMDAzLDIwMDE4NzYuMDM5MzEwNDQzNCwyNTAyODQ5LjEwNzQxODUzNyw1MDgyNTUuMDUwOTM4NzM5ODUsMjk3MTE2NS4yMTAwODEzMDYzLDU4ODAxMC43MjExODQ2NDQ4LDE1NjA5NDIuMTM1Njg5NTQ1MiwxMzk1MTk3Ljc1NDUxNzk3MDQsMzIwMjc5OC41ODY4OTQ4MDk3LDIzMjAzMDEuMTEzODA1OTk4LDY1MjU1NC43MjY1MzI4MTc4LDE4OTkyMzAuNDg3Njk2NTQyLDEyNjQ4MzQuMzgyNDQ4MTA0NywxODY4NTU3LjE5NTA4NjcwNywyMDc0OTg1LjQwMzcwMjUyMTUsMTg0NTg4Ny43MjE4MTE1NDQ0LDQyMDc2NjEuMTIyOTIxMTMyLDI2ODMyOS44MjE0ODc0MzMyLDMzNTkuNzIwNjMzMjIzMzM2CisyOSxUdWUgMjIgRmViIDExLDE0NzgxMC44MjQxMzgxMzExNCwxMzE5NzMuNDg0OTc1OTE3MDYsNzY4MTkuMzEwMTU1Njg2MzMsMTU4ODA1LjY5MjQ3Mjg4MDQ0LDE2MDA3NC41NDMwNTc5NjAzNCwyNTg3NjY3LjczNDc3MTI4NywyODEyMDE1Ljg0NjYwOTc1MzYsMjMwNDcxNS41NTcwODI0MDUsMjAwMTg3OC4wNDExODc0ODQsMjUwMjg1MS42MTAyNjg4OTY0LDUwODI1NS41NTkxOTQwNDQ4NSwyOTcxMTY4LjE4MTI0ODAwMiw1ODgwMTEuMzA5MTk1NjYwMiwxNTYwOTQzLjY5NjYzMjQ2MTQsMTM5NTE5OS4xNDk3MTY0MjIyLDMyMDI4MDEuNzg5Njk0OTk4LDIzMjAzMDMuNDM0MTA4MjcyNyw2NTI1NTUuMzc5MDg3ODcwNCwxODk5MjMyLjM4NjkyNzk3ODgsMTI2NDgzNS42NDcyODMxMTk0LDE4Njg1NTkuMDYzNjQ0ODM2MiwyMDc0OTg3LjQ3ODY4ODk2MjgsMTg0NTg4OS41Njc3MDAxODg4LDQyMDc2NjUuMzMwNTg0MzU4LDI2ODMzMC4wODk4MTczODg5LDMzNTkuNzIzOTkyOTQ1NjQ5NgorMzAsV2VkIDIzIEZlYiAxMSwxNDc4MTAuOTcxOTQ5MDI5MiwxMzE5NzMuNjE2OTQ5NDY4MDQsNzY4MTkuMzg2OTc1MDM0OTEsMTU4ODA1Ljg1MTI3ODY1MjMsMTYwMDc0LjcwMzEzMjU4MzQ3LDI1ODc2NzAuMzIyNDQwMzE1NSwyODEyMDE4LjY1ODYyNzAwNjcsMjMwNDcxNy44NjE3OTkxMTUsMjAwMTg4MC4wNDMwNjY1MjU4LDI1MDI4NTQuMTEzMTIxNzU4LDUwODI1Ni4wNjc0NDk4NTgyLDI5NzExNzEuMTUyNDE3NjY4Niw1ODgwMTEuODk3MjA3MjYzNCwxNTYwOTQ1LjI1NzU3NjkzODcsMTM5NTIwMC41NDQ5MTYyNjk0LDMyMDI4MDQuOTkyNDk4Mzg5LDIzMjAzMDUuNzU0NDEyODY2Nyw2NTI1NTYuMDMxNjQzNTc1OCwxODk5MjM0LjI4NjE2MTMxNTIsMTI2NDgzNi45MTIxMTkzOTkzLDE4Njg1NjAuOTMyMjA0ODM0LDIwNzQ5ODkuNTUzNjc3NDc5MywxODQ1ODkxLjQxMzU5MDY3OTYsNDIwNzY2OS41MzgyNTE3OTMsMjY4MzMwLjM1ODE0NzYxMjk1LDMzNTkuNzI3MzUyNjcxMzIyNQorMzEsVGh1IDI0IEZlYiAxMSwxNDc4MTEuMTE5NzYwMDc1MDMsMTMxOTczLjc0ODkyMzE1MSw3NjgxOS40NjM3OTQ0NjAzLDE1ODgwNi4wMTAwODQ1ODMsMTYwMDc0Ljg2MzIwNzM2NjY3LDI1ODc2NzIuOTEwMTExOTMxNiwyODEyMDIxLjQ3MDY0NzA3MTUsMjMwNDcyMC4xNjY1MTgxMjg1LDIwMDE4ODIuMDQ0OTQ3NTcsMjUwMjg1Ni42MTU5NzcxMjMsNTA4MjU2LjU3NTcwNjE3OTcsMjk3MTE3NC4xMjM1OTAzMDczLDU4ODAxMi40ODUyMTk0NTQ2LDE1NjA5NDYuODE4NTIyOTc3LDEzOTUyMDEuOTQwMTE3NTEyLDMyMDI4MDguMTk1MzA0OTgzOCwyMzIwMzA4LjA3NDcxOTc4MSw2NTI1NTYuNjg0MTk5OTMzOCwxODk5MjM2LjE4NTM5NjU1MTIsMTI2NDgzOC4xNzY5NTY5NDQsMTg2ODU2Mi44MDA3NjY3MDA0LDIwNzQ5OTEuNjI4NjY4MDcwMywxODQ1ODkzLjI1OTQ4MzAxNjMsNDIwNzY3My43NDU5MjM0MzYsMjY4MzMwLjYyNjQ3ODEwNTI2LDMzNTkuNzMwNzEyNDAwMzU1NQorMzIsRnJpIDI1IEZlYiAxMSwxNDc4MTEuMjY3NTcxMjY4NywxMzE5NzMuODgwODk2OTY1OTQsNzY4MTkuNTQwNjEzOTYyNSwxNTg4MDYuMTY4ODkwNjcyNDcsMTYwMDc1LjAyMzI4MjMwOTksMjU4NzY3NS40OTc3ODYxMzYsMjgxMjAyNC4yODI2Njk5NDc1LDIzMDQ3MjIuNDcxMjM5NDQ3LDIwMDE4ODQuMDQ2ODMwNjE2LDI1MDI4NTkuMTE4ODM0OTksNTA4MjU3LjA4Mzk2MzAwOTYsMjk3MTE3Ny4wOTQ3NjU5MTcsNTg4MDEzLjA3MzIzMjIzMzksMTU2MDk0OC4zNzk0NzA1NzU4LDEzOTUyMDMuMzM1MzIwMTQ5NSwzMjAyODExLjM5ODExNDc4LDIzMjAzMTAuMzk1MDI5MDE1NCw2NTI1NTcuMzM2NzU2OTQ0MiwxODk5MjM4LjA4NDYzMzY4NiwxMjY0ODM5LjQ0MTc5NTc1MzMsMTg2ODU2NC42NjkzMzA0MzU2LDIwNzQ5OTMuNzAzNjYwNzM2MywxODQ1ODk1LjEwNTM3NzE5OSw0MjA3Njc3Ljk1MzU5OTI4NiwyNjgzMzAuODk0ODA4ODY1ODUsMzM1OS43MzQwNzIxMzI3NDc4CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0RlbW9ncmFwaGljU0VJUkRpc2Vhc2VfUktfUmVmZXJlbmNlL0RlbW9ncmFwaGljTW9kZWwvd29tZW4vRGVhdGhzXzIuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9EZW1vZ3JhcGhpY1NFSVJEaXNlYXNlX1JLX1JlZmVyZW5jZS9EZW1vZ3JhcGhpY01vZGVsL3dvbWVuL0RlYXRoc18yLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNWEwNjMzCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9EZW1vZ3JhcGhpY1NFSVJEaXNlYXNlX1JLX1JlZmVyZW5jZS9EZW1vZ3JhcGhpY01vZGVsL3dvbWVuL0RlYXRoc18yLmNzdgpAQCAtMCwwICsxLDMzIEBACitpdGVyYXRpb24sdGltZSxFRy1GUkctRzIxMDAwMSxFRy1GUkctRzIxMDAwMixFRy1GUkctRzIxMDAwMyxFRy1GUkctRzIxMDAwNCxFRy1GUkctRzIxMDAwNSxFRy1MT0UtRzI0MDAwMSxFRy1MT0UtRzI0MDAwMixFRy1MT0UtRzI0MDAwMyxFRy1MT0UtRzI0MDAwNCxFRy1MT0UtRzI0MDAwNSxFRy1MT0UtRzI0MDAwNixFRy1MT0UtRzI0MDAwNyxFRy1MT0UtRzI0MDAwOCxFRy1MT0UtRzI0MDAwOSxFRy1VUEUtRzI5MDAwMSxFRy1VUEUtRzI5MDAwMixFRy1VUEUtRzI5MDAwMyxFRy1VUEUtRzI5MDAwNCxFRy1VUEUtRzI5MDAwNSxFRy1VUEUtRzI5MDAwNixFRy1VUEUtRzI5MDAwNyxFRy1VUEUtRzI5MDAwOCxFRy1VUkctRzMwMDAwMSxFRy1VUkctRzMwMDAwMixFRy1VUkctRzMwMDAwMyxFRy1VUkctRzMwMDAwNAorMSxUdWUgMjUgSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzIsV2VkIDI2IEphbiAxMSw1Ljc2NDQ2MzYxNjQ1ODE5MSw1LjE0NjgyNDM3NDQ0NDUxOSwyLjk5NTg3MDcwODQ5NDU4MSw2LjE5MzI1MTY4OTY3OTI4Miw2LjI0MjczNTUwMTY3Mzg2NCwxMDAuOTE2MjY2NDIwNTk4NTMsMTA5LjY2NTYwMjE3MjI1NzU2LDg5Ljg4MTQzNDk1Mjc2OTY1LDc4LjA3MTA5NjYyMTYzNzAxLDk3LjYwODUyODUyOTA0NzYsMTkuODIxNDIxNzExOTc2NDcsMTE1Ljg3MjM3MjUzNDYxNzUzLDIyLjkzMTgxMDQyNTE3Mzg1LDYwLjg3NTEzMDA3OTU3MjY2LDU0LjQxMTI3MDUwODQyOTIyLDEyNC45MDU4MzQ4NDA0MjE0OSw5MC40ODkzNDU0MzkwMTAyLDI1LjQ0ODk1OTkyODQwNzAyNCw3NC4wNjgwMjYxOTE0NjY3LDQ5LjMyNzIzMzcyNjQ2NDE0NCw3Mi44NzE3OTk0ODAxMTEsODAuOTIyMjg2Mjc1NDAxMjYsNzEuOTg3NzEzNDUwOTY5NzYsMTY0LjA5NDQzNTIzMzc3OTE0LDEwLjQ2NDU4NTcyMjgxNDI0OSwwLjEzMTAyNTYzMjQ3MDQ0ODM1CiszLFRodSAyNyBKYW4gMTEsMTEuNTI4OTMyOTk3MzgyODg1LDEwLjI5MzY1Mzg5NTcxNTk4Niw1Ljk5MTc0NDQxMjg2MTM2OSwxMi4zODY1MDk1NzI2MTMzNTQsMTIuNDg1NDc3MjQ2MDg2MzU0LDIwMS44MzI2MzM3NTc1MTQwMywyMTkuMzMxMzE0MDEwMTcyMiwxNzkuNzYyOTU5Nzg3MDE5MjQsMTU2LjE0MjI3MTMxNDQwOTc4LDE5NS4yMTcxNTQ2NjY2NzI1NywzOS42NDI4NjMyNDUzODQ1NzUsMjMxLjc0NDg2MDk0MTY2NTU2LDQ1Ljg2MzY0Mzc4MjE2OTU4LDEyMS43NTAzMjEwMzQzMDU4NywxMDguODIyNTk1NDI4MTU2MTksMjQ5LjgxMTc5NDU4Njc0MDQzLDE4MC45Nzg3ODEzNjc0MTExLDUwLjg5Nzk0NTMwNTc4Njc0LDE0OC4xMzYxMjY0NTA5OTY2NCw5OC42NTQ1MTY3ODAxODY3NywxNDUuNzQzNjcxODMyMDU3OTQsMTYxLjg0NDY1MzQ3MzEyOTI2LDE0My45NzU0OTg4ODk2ODkwNSwzMjguMTg5MDM0NTYyMDc1NTYsMjAuOTI5MTgxOTEwMjE5NDYsMC4yNjIwNTEzOTU5NjY1OTQ3NworNCxGcmkgMjggSmFuIDExLDE3LjI5MzQwODE0Mjc3OTg0MywxNS40NDA0ODg1NjM4MTk1NTEsOC45ODc2MjExMTMxMDMzNTcsMTguNTc5NzczNjQ4ODA4NDA2LDE4LjcyODIyNTIzMzI0MzcxNiwzMDIuNzQ5MTAyMDEwODQ3MzcsMzI4Ljk5NzEzNTUxMzg1MzU1LDI2OS42NDQ1NzQ1MDI4Mzg2LDIzNC4yMTM1MjQwNzgzOTYyLDI5Mi44MjU4Nzg0MTI5NzI0Myw1OS40NjQzMjQ2MDAyNDQxMSwzNDcuNjE3NDY1MjIxMjYsNjguNzk1NTAwMDcxMDEwMTQsMTgyLjYyNTU3Mjg2NDI2MDUsMTYzLjIzMzk3NDc1OTIzNTM3LDM3NC43MTc4NzkyMzkwODE2LDI3MS40NjgzMDc3ODUyOTMyLDc2LjM0Njk1NjEzMjE2NDU1LDIyMi4yMDQzMDA3Nzg2NjM4OCwxNDcuOTgxODQ5MTYxMjE3MSwyMTguNjE1NjE3MDU1OTEzNjUsMjQyLjc2NzEwMTU5MzI2NDk4LDIxNS45NjMzNTYzMTYyMjk3Miw0OTIuMjgzNzk3OTg1MDUzNDcsMzEuMzkzNzg4NTYyMjI2MDc4LDAuMzkzMDc3MjkwNDg4NTcwMgorNSxTYXQgMjkgSmFuIDExLDIzLjA1Nzg4OTA1MjY1NDgyMiwyMC41ODczMjgzNzg3NjAzNTgsMTEuOTgzNTAwODA5MjIzNTQ2LDI0Ljc3MzA0MzkxODI3MDYyNywyNC45NzA5Nzk0NjMxNTIxODMsNDAzLjY2NTY3MTE4MDY5OTMsNDM4LjY2MzA2NjY4MzQxMTEsMzU5LjUyNjI3OTEwMDMxNzQsMzEyLjI4NDg1NDkxMzY3NDM0LDM5MC40MzQ2OTk3NjgwNDQ5NCw3OS4yODU4MDU3NzY1NzQ5Miw0NjMuNDkwMTg1MzczNTE2NSw5MS43MjczNzkyOTE3MTg0NiwyNDMuNTAwODg1NTY5NDk3MzQsMjE3LjY0NTQwODUwMTcyMSw0OTkuNjI0MDg4Nzk3NTY5NiwzNjEuOTU3OTI0NjkyNzQ2OSwxMDEuNzk1OTkyNDA3NTY1ODgsMjk2LjI3MjU0OTE3NDU0MjYsMTk3LjMwOTIzMDg2OTYwNDQ1LDI5MS40ODc2MzUxNTE3NTExLDMyMy42ODk2MzA2MzU4ODkxNiwyODcuOTUxMjg1NzMwNjYzOSw2NTYuMzc4NzI1NTAyODc3LDQxLjg1ODQwNTY3ODg0NDU3NiwwLjUyNDEwMzMxNjAzNjUwNTQKKzYsU3VuIDMwIEphbiAxMSwyOC44MjIzNzU3MjcwMTM1OTcsMjUuNzM0MTczMzQwNTQzNTU2LDE0Ljk3OTM4MzUwMTIyNDkyOSwzMC45NjYzMjAzODEwMDYyMiwzMS4yMTM3Mzk5MzU4MTgwMSw1MDQuNTgyMzQxMjY3MTcwOTMsNTQ4LjMyOTEwNzUxODk1NDYsNDQ5LjQwODA3MzU3OTU0NjA2LDM5MC4zNTYyNjM4MjAzMjI1LDQ4OC4wNDM2MTg3MzE5ODc2NCw5OS4xMDczMDY3NzQzOTY4Miw1NzkuMzYzMDIxMzk4NTUxMywxMTQuNjU5MjgxNDQ0MzE3NDcsMzA0LjM3NjI1OTE1MDA3NzQzLDI3Mi4wNTY4OTY2NTU2Njc2Myw2MjQuNTMwNDIzMjYyMzI5Nyw0NTIuNDQ3NjMyMDg5ODYyNiwxMjcuMjQ1MDU0MTMyMDE2MjQsMzcwLjM0MDg3MTYzODcwNjcsMjQ2LjYzNjY2MTkwNTM5ODIsMzY0LjM1OTcyNjExOTY0MzEsNDA0LjYxMjI0MDYwMTA4MjksMzU5LjkzOTI4NzEzMzA2MzUsODIwLjQ3MzgxNzExNTcxMDEsNTIuMzIzMDMzMjYwMDg1NDMsMC42NTUxMjk0NzI2MTA1MzE5Cis3LE1vbiAzMSBKYW4gMTEsMzQuNTg2ODY4MTY1ODYxOTQsMzAuODgxMDIzNDQ5MTc0Mjc1LDE3Ljk3NTI2OTE4OTExMDUwMiwzNy4xNTk2MDMwMzcwMjEzNywzNy40NTY1MDY2NTEyNDc0Myw2MDUuNDk5MTEyMjcwMzYzMSw2NTcuOTk1MjU4MDIwNTkzOCw1MzkuMjg5OTU3OTQwNjE0LDQ2OC40Mjc3NTA3OTg0MTg2Myw1ODUuNjUyNjM1MzA0ODk4MSwxMTguOTI4ODI3NTkzNzI5NjQsNjk1LjIzNTk3MzI5NjQ4MDEsMTM3LjU5MTIwNjUyODgzMDEsMzY1LjI1MTY5MzYwNjA2MTYsMzI2LjQ2ODQzOTIyMTEyOTY0LDc0OS40MzY4ODI2MzM0ODY3LDU0Mi45Mzc0Mjk5NzY3MzEyLDE1Mi42OTQxNDEzMDU1NDEwMiw0NDQuNDA5MjY4MTcxMjMwMywyOTUuOTY0MTQyMjY4NjQ3Nyw0MzcuMjMxODg5OTU5NjYyNCw0ODUuNTM0OTMxNDg4OTI3MSw0MzEuOTI3MzYwNTIzNTAwNCw5ODQuNTY5MDcyODIzNzE2OSw2Mi43ODc2NzEzMDU5NTkxLDAuNzg2MTU1NzYwMjEwNzgwNAorOCxUdWUgMSBGZWIgMTEsNDAuMzUxMzY2MzY5MjA1NTg2LDM2LjAyNzg3ODcwNDY1NzY3NCwyMC45NzExNTc4NzI4ODMyNTcsNDMuMzUyODkxODg2MzIyMjc2LDQzLjY5OTI3OTYwOTQ0NjY3LDcwNi40MTU5ODQxOTAzNzY0LDc2Ny42NjE1MTgxODg0Mzg0LDYyOS4xNzE5MzIxODM2MTEsNTQ2LjQ5OTMxNTg0ODA0MDcsNjgzLjI2MTc0OTQ4Njg3MzksMTM4Ljc1MDM2ODIzNDU5MzE0LDgxMS4xMDkwNDEwNjc0MTgzLDE2MC41MjMxNTQ1NDUyNzkyLDQyNi4xMjcxODg5Mzc1MTA1LDM4MC44ODAwMzYxOTgxNjEyNCw4NzQuMzQzNDY2OTExMTY1Niw2MzMuNDI3MzE4MzUzNDQyNywxNzguMTQzMjUzOTI4MTY1Nyw1MTguNDc3NzM4NzcyMTg3MywzNDUuMjkxNjcxOTU5NDAyMSw1MTAuMTA0MTI2NjcxODgxOSw1NjYuNDU3NzAzMjk5NTAyNyw1MDMuOTE1NTA1OTAyMDQ2NzMsMTE0OC42NjQ0OTI2MjcwNjEsNzMuMjUyMzE5ODE2NDc2MDUsMC45MTcxODIxNzg4MzczODIKKzksV2VkIDIgRmViIDExLDQ2LjExNTg3MDMzNzA1MDMyNSw0MS4xNzQ3MzkxMDY5OTg4OSwyMy45NjcwNDk1NTI1NDYxOTMsNDkuNTQ2MTg2OTI4OTE1MTEsNDkuOTQyMDU4ODEwNDIxOTksODA3LjMzMjk1NzAyNzMxMjUsODc3LjMyNzg4ODAyMjU5NzgsNzE5LjA1Mzk5NjMwODYyNzMsNjI0LjU3MDk1ODk2OTI2NjgsNzgwLjg3MDk2MTI3ODAxMjcsMTU4LjU3MTkyODY5NzAwNzIyLDkyNi45ODIyMjQ3MTE0ODIzLDE4My40NTUxMjU0OTM2ODc3Nyw0ODcuMDAyNzQ1MTQ0NDg1MDYsNDM1LjI5MTY4NzU4NjgxNzE1LDk5OS4yNTAxNzYwOTU0OTA4LDcyMy45MTcyOTcyMjAwODc5LDIwMy41OTIzOTE5OTk5MTU3Miw1OTIuNTQ2MjgzNDQxNjUxOSwzOTQuNjE5MjUwOTc3NzEwODYsNTgyLjk3NjQzNjI1NjM3NDUsNjQ3LjM4MDU1NjAzMjg5MDQsNTc1LjkwMzcyMzI2ODc3NDMsMTMxMi43NjAwNzY1MjU5MDc0LDgzLjcxNjk3ODc5MTY0NjcxLDEuMDQ4MjA4NzI4NDkwNDY3MworMTAsVGh1IDMgRmViIDExLDUxLjg4MDM4MDA2OTQwMTg5LDQ2LjMyMTYwNDY1NjIwMzA4NSwyNi45NjI5NDQyMjgxMDIyOTgsNTUuNzM5NDg4MTY0ODA2MDYsNTYuMTg0ODQ0MjU0MTc5Niw5MDguMjUwMDMwNzgxMjcxMiw5ODYuOTk0MzY3NTIzMTgxNSw4MDguOTM2MTUwMzE1NzUyMyw3MDIuNjQyNjgwMTYyMTc0OSw4NzguNDgwMjcwNjc4NDExNywxNzguMzkzNTA4OTgwOTkxNTgsMTA0Mi44NTU1MjQyMjg3ODc1LDIwNi4zODcxMTkzNzQwNzg3Niw1NDcuODc4MzYyMjI3MDQ2MSw0ODkuNzAzMzkzMzg3MTUxNCwxMTI0LjE1NzAxMDE4NjU4NzMsODE0LjQwNzM2NjU3Njc1NjksMjI5LjA0MTU1NTUyMDgxNjQsNjY2LjYxNDkwMjE3OTY5ODEsNDQzLjk0Njg3OTMyMzYyMzI1LDY1NS44NDg4MTg3MTMyMTMsNzI4LjMwMzQ4OTY4OTE3MTIsNjQ3Ljg5MjAxMjYyMzc1NTIsMTQ3Ni44NTU4MjQ1MjA0MTg4LDk0LjE4MTY0ODIzMTQ4MTU5LDEuMTc5MjM1NDA5MTcwMTY3OAorMTEsRnJpIDQgRmViIDExLDU3LjY0NDg5NTU2NjI2NjEsNTEuNDY4NDc1MzUyMjc1NDU1LDI5Ljk1ODg0MTg5OTU1NDU5Niw2MS45MzI3OTU1OTQwMDEzODQsNjIuNDI3NjM1OTQwNzI1ODUsMTAwOS4xNjcyMDU0NTIzNTUsMTA5Ni42NjA5NTY2OTAzMDAzLDg5OC44MTgzOTQyMDUwNzcsNzgwLjcxNDQ3OTQyNjg0MzYsOTc2LjA4OTY3NzY4ODE2OTcsMTk4LjIxNTEwOTA4NjU2NjI2LDExNTguNzI4OTM5NjE5NDUxLDIyOS4zMTkxMzYxODY0NzUyNSw2MDguNzU0MDQwMTg1MjU1LDU0NC4xMTUxNTM1OTkyMTkxLDEyNDkuMDYzOTY5MTg0NTgxNSw5MDQuODk3NTI2NDIzNTQxLDI1NC40OTA3NDQ0OTA4OTM1NSw3NDAuNjgzNTk0OTg2NDAwNCw0OTMuMjc0NTU2OTk3MTg4OTQsNzI4LjcyMTI3NDA0MjQ3MDgsODA5LjIyNjUwNDI2ODQyNjcsNzE5Ljg4MDM3Mzk2NzA2MTgsMTY0MC45NTE3MzY2MTA3NjE2LDEwNC42NDYzMjgxMzU5OTExOCwxLjMxMDI2MjIyMDg3NjYxNQorMTIsU2F0IDUgRmViIDExLDYzLjQwOTQxNjgyNzY0ODY4NCw1Ni42MTUzNTExOTUyMjEwNjYsMzIuOTU0NzQyNTY2OTA2MDU2LDY4LjEyNjEwOTIxNjUwNzIyLDY4LjY3MDQzMzg3MDA2Njg3LDExMTAuMDg0NDgxMDQwNjYzNiwxMjA2LjMyNzY1NTUyNDA2Myw5ODguNzAwNzI3OTc2NjksODU4Ljc4NjM1Njc2MzM1MDYsMTA3My42OTkxODIzMDczODM0LDIxOC4wMzY3MjkwMTM3NTA5NywxMjc0LjYwMjQ3MDg4MzU4OCwyNTIuMjUxMTc1OTMwODk5OSw2NjkuNjI5Nzc5MDE5MTcyMiw1OTguNTI2OTY4MjIzMDc0LDEzNzMuOTcxMDUzMDg5NTk3LDk5NS4zODc3NzY3NjA1MywyNzkuOTM5OTU4OTEwMTcyMyw4MTQuNzUyMzYxODYxODMyNSw1NDIuNjAyMjgzOTk4NDU2OSw4MDEuNTkzODAyMjQ0MjIwNSw4OTAuMTQ5NTk5NzcwNzM2Nyw3OTEuODY4ODA3Mjk4NzY1NywxODA1LjA0NzgxMjc5NzA5OCwxMTUuMTExMDE4NTA1MTg1OSwxLjQ0MTI4OTE2MzYwOTkzOTYKKzEzLFN1biA2IEZlYiAxMSw2OS4xNzM5NDM4NTM1NTU0LDYxLjc2MjIzMjE4NTA0NTA4LDM1Ljk1MDY0NjIzMDE1OTY4LDc0LjMxOTQyOTAzMjMyOTc4LDc0LjkxMzIzODA0MjIwODkzLDEyMTEuMDAxODU3NTQ2Mjk4NCwxMzE1Ljk5NDQ2NDAyNDU3OSwxMDc4LjU4MzE1MTYzMDY4MTksOTM2Ljg1ODMxMjE3MTc3MzgsMTE3MS4zMDg3ODQ1MzYxNTA0LDIzNy44NTgzNjg3NjI1NjU1LDEzOTAuNDc2MTE4MDIxMzEzNCwyNzUuMTgzMjM4NjA3Mzc1Nyw3MzAuNTA1NTc4NzI4ODU4OCw2NTIuOTM4ODM3MjU4NzcwNywxNDk4Ljg3ODI2MTkwMTc1ODgsMTA4NS44NzgxMTc1ODc4MTQ0LDMwNS4zODkxOTg3Nzg2NzgyNCw4ODguODIxMjAyODA2MDY4Myw1OTEuOTMwMDYwMzI3NDc2NCw4NzQuNDY2NDAzMzE4NTM0NCw5NzEuMDcyNzc2MTk2MTgyOCw4NjMuODU3MzEyNjE4OTM4NiwxOTY5LjE0NDA1MzA3OTU5MjYsMTI1LjU3NTcxOTMzOTA3NjIsMS41NzIzMTYyMzczNzAyNzIyCisxNCxNb24gNyBGZWIgMTEsNzQuOTM4NDc2NjQzOTkyMDMsNjYuOTA5MTE4MzIxNzUyNjYsMzguOTQ2NTUyODg5MzE4NDcsODAuNTEyNzU1MDQxNDc1MjQsODEuMTU2MDQ4NDU3MTU4MzIsMTMxMS45MTkzMzQ5NjkzNiwxNDI1LjY2MTM4MjE5MTk1ODksMTE2OC40NjU2NjUxNjcxNDI2LDEwMTQuOTMwMzQ1NjUyMTkxNSwxMjY4LjkxODQ4NDM3NDU2ODQsMjU3LjY4MDAyODMzMzAyOTcsMTUwNi4zNDk4ODEwMzI3NDQ2LDI5OC4xMTUzMjQyMTU5MjU4LDc5MS4zODE0MzkzMTQzNzU1LDcwNy4zNTA3NjA3MDYzNjM4LDE2MjMuNzg1NTk1NjIxMTkxOCwxMTc2LjM2ODU0ODkwNTQ4NTMsMzMwLjgzODQ2NDA5NjQzNjg0LDk2Mi44OTAxMTc4MTkxODI0LDY0MS4yNTc4ODU5ODQyOTcyLDk0Ny4zMzkwNzcyNjU0ODYsMTA1MS45OTYwMzM1NDQ4NDU3LDkzNS44NDU4ODk5Mjc2NTMzLDIxMzMuMjQwNDU3NDU4NDA5OCwxMzYuMDQwNDMwNjM3NjcyNjQsMS43MDMzNDM0NDIxNTc3NDQKKzE1LFR1ZSA4IEZlYiAxMSw4MC43MDMwMTUxOTg5NjQzNCw3Mi4wNTYwMDk2MDUzNDg5NSw0MS45NDI0NjI1NDQzODU0MTQsODYuNzA2MDg3MjQzOTQ5ODIsODcuMzk4ODY1MTE0OTIxMjUsMTQxMi44MzY5MTMzMDk5NDk1LDE1MzUuMzI4NDEwMDI2MzExNSwxMjU4LjM0ODI2ODU4NjE2MTYsMTA5My4wMDI0NTcyMDQ2ODE4LDEzNjYuNTI4MjgxODIyNzM1LDI3Ny41MDE3MDc3MjUxNjMzLDE2MjIuMjIzNzU5OTE3OTk2NCwzMjEuMDQ3NDMyNzU2NTcyOSw4NTIuMjU3MzYwNzc1NzgzNSw3NjEuNzYyNzM4NTY1OTA3NCwxNzQ4LjY5MzA1NDI0ODAyMDYsMTI2Ni44NTkwNzA3MTM2MzMyLDM1Ni4yODc3NTQ4NjM0NzMzNywxMDM2Ljk1OTEwNjkwMTI0ODMsNjkwLjU4NTc2MDk2ODk2ODEsMTAyMC4yMTE4MjQwODUxNDgxLDExMzIuOTE5MzcxODE2ODA2NSwxMDA3LjgzNDUzOTIyNDk4MSwyMjk3LjMzNzAyNTkzMzcxMjUsMTQ2LjUwNTE1MjQwMDk4NTU0LDEuODM0MzcwNzc3OTcyNDg2NQorMTYsV2VkIDkgRmViIDExLDg2LjQ2NzU1OTUxODQ3ODA1LDc3LjIwMjkwNjAzNTgzOTA5LDQ0LjkzODM3NTE5NTM2MzQ5LDkyLjg5OTQyNTYzOTc1OTY3LDkzLjY0MTY4ODAxNTUwMzkzLDE1MTMuNzU0NTkyNTY4MTY4LDE2NDQuOTk1NTQ3NTI3NzQ2NiwxMzQ4LjIzMDk2MTg4NzgyOSwxMTcxLjA3NDY0NjgyOTMyMiwxNDY0LjEzODE3Njg4MDc0NzYsMjk3LjMyMzQwNjkzODk4NjI0LDE3MzguMDk3NzU0Njc3MTg0OSwzNDMuOTc5NTY0MjI5MzQsOTEzLjEzMzM0MzExMzE0MjksODE2LjE3NDc3MDgzNzQ1NiwxODczLjYwMDYzNzc4MjM3MDUsMTM1Ny4zNDk2ODMwMTIzNDcyLDM4MS43MzcwNzEwNzk4MTMzLDExMTEuMDI4MTcwMDUyMzQwMyw3MzkuOTEzNjg1MjgxNTM4NCwxMDkzLjA4NDY0Mzc3NzU5MzMsMTIxMy44NDI3OTEwMTIxNDU5LDEwNzkuODIzMjYwNTEwOTkzNiwyNDYxLjQzMzc1ODUwNTY2NiwxNTYuOTY5ODg0NjI5MDI1NDcsMS45NjUzOTgyNDQ4MTQ2Mjk3CisxNyxUaHUgMTAgRmViIDExLDkyLjIzMjEwOTYwMjUzOTAzLDgyLjM0OTgwNzYxMzIyODI2LDQ3LjkzNDI5MDg0MjI1NTc1LDk5LjA5Mjc3MDIyODkxMTA1LDk5Ljg4NDUxNzE1ODkxMjYzLDE2MTQuNjcyMzcyNzQ0MTE1NiwxNzU0LjY2Mjc5NDY5NjM3NDUsMTQzOC4xMTM3NDUwNzIyMzQ1LDEyNDkuMTQ2OTE0NTI2MTkxNSwxNTYxLjc0ODE2OTU0ODcwNDcsMzE3LjE0NTEyNTk3NDUxODM1LDE4NTMuOTcxODY1MzEwNDI2NCwzNjYuOTExNzE4NjM0MjUwMSw5NzQuMDA5Mzg2MzI2NTE1NCw4NzAuNTg2ODU3NTIxMDY0MiwxOTk4LjUwODM0NjIyNDM2NjUsMTQ0Ny44NDAzODU4MDE3MTksNDA3LjE4NjQxMjc0NTQ4MjIsMTE4NS4wOTczMDcyNzI1MzI0LDc4OS4yNDE2NTg5MjIwNTc4LDExNjUuOTU3NTM2MzQyODk0OSwxMjk0Ljc2NjI5MTEzMDk0NSwxMTUxLjgxMjA1Mzc4NTc2MzcsMjYyNS41MzA2NTUxNzQ0MzQ3LDE2Ny40MzQ2MjczMjE4MDI4OCwyLjA5NjQyNTg0MjY4NDMwNTQKKzE4LEZyaSAxMSBGZWIgMTEsOTcuOTk2NjY1NDUxMTUyOTgsODcuNDk2NzE0MzM3NTIxNiw1MC45MzAyMDk0ODUwNjUxNywxMDUuMjg2MTIxMDExNDEwMTYsMTA2LjEyNzM1MjU0NTE1MzYzLDE3MTUuNTkwMjUzODM3ODk1LDE4NjQuMzMwMTUxNTMyMzA1LDE1MjcuOTk2NjE4MTM5NDY4OSwxMzI3LjIxOTI2MDI5NTM2ODMsMTY1OS4zNTgyNTk4MjY3MDM3LDMzNi45NjY4NjQ4MzE3Nzk1LDE5NjkuODQ2MDkxODE3ODM3LDM4OS44NDM4OTU5NzEzMjYxNiwxMDM0Ljg4NTQ5MDQxNTk2MTgsOTI0Ljk5ODk5ODYxNjc4NjYsMjEyMy40MTYxNzk1NzQxMzQzLDE1MzguMzMxMTc5MDgxODM5NSw0MzIuNjM1Nzc5ODYwNTA1OCwxMjU5LjE2NjUxODU2MTg5OTUsODM4LjU2OTY4MTg5MDU3NTksMTIzOC44MzA1MDE3ODExMjU2LDEzNzUuNjg5ODcyMTczMjg1MywxMjIzLjgwMDkxOTA0OTM2MzUsMjc4OS42Mjc3MTU5NDAxODM0LDE3Ny44OTkzODA0NzkzMjgyNCwyLjIyNzQ1MzU3MTU4MTY0NTMKKzE5LFNhdCAxMiBGZWIgMTEsMTAzLjc2MTIyNzA2NDMyNTY3LDkyLjY0MzYyNjIwODcyNDIxLDUzLjkyNjEzMTEyMzc5NDcxLDExMS40Nzk0Nzc5ODcyNjMxMSwxMTIuMzcwMTk0MTc0MjMzMTUsMTgxNi41MDgyMzU4NDk2MDU5LDE5NzMuOTk3NjE4MDM1NjQ2OCwxNjE3Ljg3OTU4MTA4OTYyMSwxNDA1LjI5MTY4NDEzNjkyOTUsMTc1Ni45Njg0NDc3MTQ4NDE3LDM1Ni43ODg2MjM1MTA3ODkzNiwyMDg1LjcyMDQzNDE5OTUzMiw0MTIuNzc2MDk2MjQwNTkwOSwxMDk1Ljc2MTY1NTM4MTU0MjYsOTc5LjQxMTE5NDEyNDY3NzMsMjI0OC4zMjQxMzc4MzE3OTgsMTYyOC44MjIwNjI4NTI3OTg0LDQ1OC4wODUxNzI0MjQ5MDkxLDEzMzMuMjM1ODAzOTIwNTE0OSw4ODcuODk3NzU0MTg3MTQxNiwxMzExLjcwMzU0MDA5MjM1ODUsMTQ1Ni42MTM1MzQxMzkyNDcsMTI5NS43ODk4NTYzMDE4NjQ4LDI5NTMuNzI0OTQwODAzMDc1LDE4OC4zNjQxNDQxMDE2MTE5NywyLjM1ODQ4MTQzMTUwNjc3OTUKKzIwLFN1biAxMyBGZWIgMTEsMTA5LjUyNTc5NDQ0MjA2MjgsOTcuNzkwNTQzMjI2ODQxMyw1Ni45MjIwNTU3NTg0NDczOSwxMTcuNjcyODQxMTU2NDc2MTIsMTE4LjYxMzA0MjA0NjE1NzM3LDE5MTcuNDI2MzE4Nzc5MzQ4OCwyMDgzLjY2NTE5NDIwNjUwOTYsMTcwNy43NjI2MzM5MjI3ODA3LDE0ODMuMzY0MTg2MDUwOTUzMywxODU0LjU3ODczMzIxMzIxNTksMzc2LjYxMDQwMjAxMTU2Nzc3LDIyMDEuNTk0ODkyNDU1NjI2NSw0MzUuNzA4MzE5NDQyMDY3MzYsMTE1Ni42Mzc4ODEyMjMzMTgxLDEwMzMuODIzNDQ0MDQ0NzkwNCwyMzczLjIzMjIyMDk5NzQ4MSwxNzE5LjMxMzAzNzExNDY4Niw0ODMuNTM0NTkwNDM4NzE3NiwxNDA3LjMwNTE2MzM0ODQ1MjksOTM3LjIyNTg3NTgxMTgwMzksMTM4NC41NzY2NTEyNzY2NjU0LDE1MzcuNTM3Mjc3MDI4OTEwNywxMzY3Ljc3ODg2NTU0MzMzOSwzMTE3LjgyMjMyOTc2MzI3MTIsMTk4LjgyODkxODE4ODY2NDU1LDIuNDg5NTA5NDIyNDU5ODM5CisyMSxNb24gMTQgRmViIDExLDExNS4yOTAzNjc1ODQzNzAyMiwxMDIuOTM3NDY1MzkxODc3OTUsNTkuOTE3OTgzMzg5MDI2MjA1LDEyMy44NjYyMTA1MTkwNTU0LDEyNC44NTU4OTYxNjA5MzI2LDIwMTguMzQ0NTAyNjI3MjI1NCwyMTkzLjMzMjg4MDA0NTAwMzUsMTc5Ny42NDU3NzY2MzkwMzgzLDE1NjEuNDM2NzY2MDM3NTE4NSwxOTUyLjE4OTExNjMyMTkyNDUsMzk2LjQzMjIwMDMzNDEzNDcsMjMxNy40Njk0NjY1ODYyMzc2LDQ1OC42NDA1NjU1NzU3Nzg1LDEyMTcuNTE0MTY3OTQxMzUwNywxMDg4LjIzNTc0ODM3NzE4MDUsMjQ5OC4xNDA0MjkwNzEzMTAzLDE4MDkuODA0MTAxODY3NTkzLDUwOC45ODQwMzM5MDE5NTY5LDE0ODEuMzc0NTk2ODQ1Nzg2OCw5ODYuNTU0MDQ2NzY0NjEyNywxNDU3LjQ0OTgzNTMzNDEyMDMsMTYxOC40NjExMDA4NDIzNTgsMTQzOS43Njc5NDY3NzM4NTgzLDMyODEuOTE5ODgyODIwOTM5NiwyMDkuMjkzNzAyNzQwNDk2NDYsMi42MjA1Mzc1NDQ0NDA5NTU1CisyMixUdWUgMTUgRmViIDExLDEyMS4wNTQ5NDY0OTEyNTM2NiwxMDguMDg0MzkyNzAzODM5MzMsNjIuOTEzOTE0MDE1NTM0MTQsMTMwLjA1OTU4NjA3NTAwNzEsMTMxLjA5ODc1NjUxODU2NTA0LDIxMTkuMjYyNzg3MzkzMzM2LDIzMDMuMDAwNjc1NTUxMjM4LDE4ODcuNTI5MDA5MjM4NDgzNSwxNjM5LjUwOTQyNDA5NjcwMjMsMjA0OS43OTk1OTcwNDEwNjUsNDE2LjI1NDAxODQ3ODUwOTc1LDI0MzMuMzQ0MTU2NTkxNDgxLDQ4MS41NzI4MzQ2NDE3NDcyLDEyNzguMzkwNTE1NTM1NzAwNCwxMTQyLjY0ODEwNzEyMTkwMjMsMjYyMy4wNDg3NjIwNTM0MDk1LDE5MDAuMjk1MjU3MTExNjEsNTM0LjQzMzUwMjgxNDY1MjMsMTU1NS40NDQxMDQ0MTI1OTEsMTAzNS44ODIyNjcwNDU2MTc1LDE1MzAuMzIzMDkyMjY0Nzk1NiwxNjk5LjM4NTAwNTU3OTY2OTMsMTUxMS43NTcwOTk5OTM0OTQ5LDM0NDYuMDE3NTk5OTc2MjQzLDIxOS43NTg0OTc3NTcxMTgxNiwyLjc1MTU2NTc5NzQ1MDI1ODUKKzIzLFdlZCAxNiBGZWIgMTEsMTI2LjgxOTUzMTE2MjcxODg3LDExMy4yMzEzMjUxNjI3MzA2LDY1LjkwOTg0NzYzNzk3NDIxLDEzNi4yNTI5Njc4MjQzMzc0NSwxMzcuMzQxNjIzMTE5MDYwOTgsMjIyMC4xODExNzMwNzc3ODIsMjQxMi42Njg1ODA3MjUzMjMsMTk3Ny40MTIzMzE3MjEyMDYzLDE3MTcuNTgyMTYwMjI4NTgzMiwyMTQ3LjQxMDE3NTM3MDczNTUsNDM2LjA3NTg1NjQ0NDcxMjgsMjU0OS4yMTg5NjI0NzE0NzEsNTA0LjUwNTEyNjYzOTk5NjUsMTMzOS4yNjY5MjQwMDY0Mjc5LDExOTcuMDYwNTIwMjc5MDEwMiwyNzQ3Ljk1NzIxOTk0MzkwNDQsMTk5MC43ODY1MDI4NDY4Mjc1LDU1OS44ODI5OTcxNzY4Mjk1LDE2MjkuNTEzNjg2MDQ4OTQsMTA4NS4yMTA1MzY2NTQ4NjY1LDE2MDMuMTk2NDIyMDY4NzY0NCwxNzgwLjMwODk5MTI0MDkyNjIsMTU4My43NDYzMjUyMDIzMjA2LDM2MTAuMTE1NDgxMjI5MzQ1MywyMzAuMjIzMzAzMjM4NTQwMDcsMi44ODI1OTQxODE0ODc4Nzk1CisyNCxUaHUgMTcgRmViIDExLDEzMi41ODQxMjE1OTg3NzE2NSwxMTguMzc4MjYyNzY4NTU2OTIsNjguOTA1Nzg0MjU2MzQ5MzYsMTQyLjQ0NjM1NTc2NzA1MjY3LDE0My41ODQ0OTU5NjI0MjY2MiwyMzIxLjA5OTY1OTY4MDY2MzUsMjUyMi4zMzY1OTU1NjczNjgsMjA2Ny4yOTU3NDQwODcyOTY1LDE3OTUuNjU0OTc0NDMzMjM5MiwyMjQ1LjAyMDg1MTMxMTAzMjQsNDU1Ljg5NzcxNDIzMjc2Mzc1LDI2NjUuMDkzODg0MjI2MzI1NCw1MjcuNDM3NDQxNTcwNTQ5MywxNDAwLjE0MzM5MzM1MzU5NCwxMjUxLjQ3Mjk4Nzg0ODU1ODIsMjg3Mi44NjU4MDI3NDI5MTk2LDIwODEuMjc3ODM5MDczMzM2LDU4NS4zMzI1MTY5ODg1MTM2LDE3MDMuNTgzMzQxNzU0OTA3MiwxMTM0LjUzODg1NTU5MjQwOTYsMTY3Ni4wNjk4MjQ3NDYwOTkxLDE4NjEuMjMzMDU3ODI2MjA5MiwxNjU1LjczNTYyMjQwMDQwNzUsMzc3NC4yMTM1MjY1ODA0MTA0LDI0MC42ODgxMTkxODQ3NzI2NiwzLjAxMzYyMjY5NjU1Mzk1MDgKKzI1LEZyaSAxOCBGZWIgMTEsMTM4LjM0ODcxNzc5OTQxNzczLDEyMy41MjUyMDU1MjEzMjM0MSw3MS45MDE3MjM4NzA2NjI2NSwxNDguNjM5NzQ5OTAzMTU5LDE0OS44MjczNzUwNDg2NjgzLDI0MjIuMDE4MjQ3MjAyMDgyNCwyNjMyLjAwNDcyMDA3NzQ4MywyMTU3LjE3OTI0NjMzNjg0NCwxODczLjcyNzg2NjcxMDc0ODcsMjM0Mi42MzE2MjQ4NjIwNTQ3LDQ3NS43MTk1OTE4NDI2ODI0LDI3ODAuOTY4OTIxODU2MTYwMyw1NTAuMzY5Nzc5NDMzNDI4NCwxNDYxLjAxOTkyMzU3NzI2MDcsMTMwNS44ODU1MDk4MzA2MDEyLDI5OTcuNzc0NTEwNDUwNTgwMiwyMTcxLjc2OTI2NTc5MTIyNyw2MTAuNzgyMDYyMjQ5NzMwNCwxNzc3LjY1MzA3MTUzMDU2NzgsMTE4My44NjcyMjM4NTgyOTY3LDE3NDguOTQzMzAwMjk2ODczNSwxOTQyLjE1NzIwNTMzNTU5OTcsMTcyNy43MjQ5OTE1ODc4MjgsMzkzOC4zMTE3MzYwMjk2MDM3LDI1MS4xNTI5NDU1OTU4MjY1NCwzLjE0NDY1MTM0MjY0ODYwMworMjYsU2F0IDE5IEZlYiAxMSwxNDQuMTEzMzE5NzY0NjYyOTIsMTI4LjY3MjE1MzQyMTAzNTIsNzQuODk3NjY2NDgwOTE3MDgsMTU0LjgzMzE1MDIzMjY2MjUsMTU2LjA3MDI2MDM3Nzc5MjEyLDI1MjIuOTM2OTM1NjQyMTM5NCwyNzQxLjY3Mjk1NDI1NTc3NywyMjQ3LjA2MjgzODQ2OTkzODUsMTk1MS44MDA4MzcwNjExODkyLDI0NDAuMjQyNDk2MDIzODk5LDQ5NS41NDE0ODkyNzQ0ODg2LDI4OTYuODQ0MDc1MzYxMDkwMyw1NzMuMzAyMTQwMjI4NjU3LDE1MjEuODk2NTE0Njc3NDg3NiwxMzYwLjI5ODA4NjIyNTE5MzIsMzEyMi42ODMzNDMwNjcwMTEzLDIyNjIuMjYwNzgzMDAwNTg4Niw2MzYuMjMxNjMyOTYwNTA1MiwxODUxLjcyMjg3NTM3NTk5NSwxMjMzLjE5NTY0MTQ1MjU3NjQsMTgyMS44MTY4NDg3MjExNTk3LDIwMjMuMDgxNDMzNzY5MTc3NSwxNzk5LjcxNDQzMjc2NDY1Myw0MTAyLjQxMDEwOTU3NzA4NzUsMjYxLjYxNzc4MjQ3MTcxMTk2LDMuMjc1NjgwMTE5NzcxOTY2CisyNyxTdW4gMjAgRmViIDExLDE0OS44Nzc5Mjc0OTQ1MTI5MywxMzMuODE5MTA2NDY3Njk3NSw3Ny44OTM2MTIwODcxMTU2LDE2MS4wMjY1NTY3NTU1Njk0NiwxNjIuMzEzMTUxOTQ5ODA0NDIsMjYyMy44NTU3MjUwMDA5MzUsMjg1MS4zNDEyOTgxMDIzNTk0LDIzMzYuOTQ2NTIwNDg2NjcwNiwyMDI5Ljg3Mzg4NTQ4NDYzOTIsMjUzNy44NTM0NjQ3OTY2NjQsNTE1LjM2MzQwNjUyODIwMjIsMzAxMi43MTkzNDQ3NDEyMzIsNTk2LjIzNDUyMzk1NjI1NzcsMTU4Mi43NzMxNjY2NTQzMzYxLDE0MTQuNzEwNzE3MDMyMzg5MywzMjQ3LjU5MjMwMDU5MjMzNzMsMjM1Mi43NTIzOTA3MDE1MTQsNjYxLjY4MTIyOTEyMDg2MzMsMTkyNS43OTI3NTMyOTEyNjMxLDEyODIuNTI0MTA4Mzc1Mjk4NSwxODk0LjY5MDQ3MDAxOTAzMDUsMjEwNC4wMDU3NDMxMjcwMjQ3LDE4NzEuNzAzOTQ1OTMwOTU1OCw0MjY2LjUwODY0NzIyMzAyOSwyNzIuMDgyNjI5ODEyNDM5NSwzLjQwNjcwOTAyNzkyNDE3MworMjgsTW9uIDIxIEZlYiAxMSwxNTUuNjQyNTQwOTg4OTczNTQsMTM4Ljk2NjA2NDY2MTMxNTQsODAuODg5NTYwNjg5MjYxMjIsMTY3LjIxOTk2OTQ3MTg4NTk1LDE2OC41NTYwNDk3NjQ3MTE0LDI3MjQuNzc0NjE1Mjc4NTcsMjk2MS4wMDk3NTE2MTczNCwyNDI2LjgzMDI5MjM4NzEyOCwyMTA3Ljk0NzAxMTk4MTE3NywyNjM1LjQ2NDUzMTE4MDQ0NDcsNTM1LjE4NTM0MzYwMzg0MjksMzEyOC41OTQ3Mjk5OTY3MDA2LDYxOS4xNjY5MzA2MTYyNTM1LDE2NDMuNjQ5ODc5NTA3ODY3LDE0NjkuMTIzNDAyMjUyMjQzLDMzNzIuNTAxMzgzMDI2NjgzLDI0NDMuMjQ0MDg4ODk0MDkxLDY4Ny4xMzA4NTA3MzA4MzAyLDE5OTkuODYyNzA1Mjc2NDQ1NSwxMzMxLjg1MjYyNDYyNjUxMjQsMTk2Ny41NjQxNjQxOTA1NTg2LDIxODQuOTMwMTMzNDA5MjIwNiwxOTQzLjY5MzUzMTA4NjgwNyw0NDMwLjYwNzM0ODk2NzU4NiwyODIuNTQ3NDg3NjE4MDE5NiwzLjUzNzczODA2NzEwNTM1MjQKKzI5LFR1ZSAyMiBGZWIgMTEsMTYxLjQwNzE2MDI0ODA1MDUzLDE0NC4xMTMwMjgwMDE4OTQwNyw4My44ODU1MTIyODczNTY5NSwxNzMuNDEzMzg4MzgxNjE4MzIsMTc0Ljc5ODk1MzgyMjUxOTM0LDI4MjUuNjkzNjA2NDc1MTQ1LDMwNzAuNjc4MzE0ODAwODMwMywyNTE2LjcxNDE1NDE3MTQwMywyMTg2LjAyMDIxNjU1MDg4MDQsMjczMy4wNzU2OTUxNzUzNDA2LDU1NS4wMDczMDA1MDE0MzA3LDMyNDQuNDcwMjMxMTI3NjEyLDY0Mi4wOTkzNjAyMDg2Njc2LDE3MDQuNTI2NjUzMjM4MTQxMywxNTIzLjUzNjE0MTg4NDgwOSwzNDk3LjQxMDU5MDM3MDE3MzQsMjUzMy43MzU4Nzc1Nzg0MTE0LDcxMi41ODA0OTc3OTA0MzE3LDIwNzMuOTMyNzMxMzMxNjE3NiwxMzgxLjE4MTE5MDIwNjI2NzMsMjA0MC40Mzc5MzEyMzU4MTc4LDIyNjUuODU0NjA0NjE1ODQ4LDIwMTUuNjgzMTg4MjMyMjgwMSw0NTk0LjcwNjIxNDgxMDkzLDI5My4wMTIzNTU4ODg0NjI3LDMuNjY4NzY3MjM3MzE1NjM3NworMzAsV2VkIDIzIEZlYiAxMSwxNjcuMTcxNzg1MjcxNzQ5NjgsMTQ5LjI1OTk5NjQ4OTQzODYzLDg2Ljg4MTQ2Njg4MTQwNTc0LDE3OS42MDY4MTM0ODQ3NzI3LDE4MS4wNDE4NjQxMjMyMzQ0LDI5MjYuNjEyNjk4NTkwNzYxNywzMTgwLjM0Njk4NzY1MjkzNzUsMjYwNi41OTgxMDU4Mzk1ODUsMjI2NC4wOTM0OTkxOTM4MjcsMjgzMC42ODY5NTY3ODE0NDk3LDU3NC44MjkyNzcyMjA5ODUsMzM2MC4zNDU4NDgxMzQwODE3LDY2NS4wMzE4MTI3MzM1MjI1LDE3NjUuNDAzNDg3ODQ1MjE5MiwxNTc3Ljk0ODkzNTkzMDE0MTUsMzYyMi4zMTk5MjI2MjI5MzQsMjYyNC4yMjc3NTY3NTQ1NjU3LDczOC4wMzAxNzAyOTk2OTI1LDIxNDguMDAyODMxNDU2ODUyNiwxNDMwLjUwOTgwNTExNDYxMjIsMjExMy4zMTE3NzExNTQ4OCwyMzQ2Ljc3OTE1Njc0Njk4NjcsMjA4Ny42NzI5MTczNjc0NDYsNDc1OC44MDUyNDQ3NTMyMjEsMzAzLjQ3NzIzNDYyMzc3OTMsMy43OTk3OTY1Mzg1NTUxNTcKKzMxLFRodSAyNCBGZWIgMTEsMTcyLjkzNjQxNjA2MDA3NjY4LDE1NC40MDY5NzAxMjM5NTQyNyw4OS44Nzc0MjQ0NzE0MTA2NSwxODUuODAwMjQ0NzgxMzU1MjcsMTg3LjI4NDc4MDY2Njg2MjksMzAyNy41MzE4OTE2MjU1MjIsMzI5MC4wMTU3NzAxNzM3NzMsMjY5Ni40ODIxNDczOTE3NjM2LDIzNDIuMTY2ODU5OTEwMDk1NCwyOTI4LjI5ODMxNTk5ODg3LDU5NC42NTEyNzM3NjI1MjYyLDM0NzYuMjIxNTgxMDE2MjI3NCw2ODcuOTY0Mjg4MTkwODQxNywxODI2LjI4MDM4MzMyOTE2MiwxNjMyLjM2MTc4NDM4ODI5NTcsMzc0Ny4yMjkzNzk3ODUwODkzLDI3MTQuNzE5NzI2NDIyNjQ0Nyw3NjMuNDc5ODY4MjU4NjM4OCwyMjIyLjA3MzAwNTY1MjIyNSwxNDc5LjgzODQ2OTM1MTU5NywyMTg2LjE4NTY4Mzk0NzgxODcsMjQyNy43MDM3ODk4MDI3MTgzLDIxNTkuNjYyNzE4NDkyMzc3LDQ5MjIuOTA0NDM4Nzk0NjI1LDMxMy45NDIxMjM4MjM5Nzk5LDMuOTMwODI1OTcwODI0MDQ0MworMzIsRnJpIDI1IEZlYiAxMSwxNzguNzAxMDUyNjEzMDM3NCwxNTkuNTUzOTQ4OTA1NDQ2MTMsOTIuODczMzg1MDU3Mzc0NjMsMTkxLjk5MzY4MjI3MTM3MjIsMTkzLjUyNzcwMzQ1MzQxMTA1LDMxMjguNDUxMTg1NTc5NTI2LDMzOTkuNjg0NjYyMzYzNDQ0NywyNzg2LjM2NjI3ODgyODAyODUsMjQyMC4yNDAyOTg2OTk3NjMsMzAyNS45MDk3NzI4Mjc2OTc1LDYxNC40NzMyOTAxMjYwNzM2LDM1OTIuMDk3NDI5Nzc0MTY0LDcxMC44OTY3ODY1ODA2NDc4LDE4ODcuMTU3MzM5NjkwMDMxMiwxNjg2Ljc3NDY4NzI1OTMyNTIsMzg3Mi4xMzg5NjE4NTY3NjQsMjgwNS4yMTE3ODY1ODI3Mzg2LDc4OC45Mjk1OTE2NjcyOTU5LDIyOTYuMTQzMjUzOTE3ODA4NiwxNTI5LjE2NzE4MjkxNzI3MDMsMjI1OS4wNTk2Njk2MTQ3MDY4LDI1MDguNjI4NTAzNzgzMTIyNiwyMjMxLjY1MjU5MTYwNzE0NCw1MDg3LjAwMzc5NjkzNTMwNCwzMjQuNDA3MDIzNDg5MDc0OTYsNC4wNjE4NTU1MzQxMjI0Mjg1CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0RlbW9ncmFwaGljU0VJUkRpc2Vhc2VfUktfUmVmZXJlbmNlL0RlbW9ncmFwaGljTW9kZWwvd29tZW4vRGVuc2l0eV8yLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvRGVtb2dyYXBoaWNTRUlSRGlzZWFzZV9SS19SZWZlcmVuY2UvRGVtb2dyYXBoaWNNb2RlbC93b21lbi9EZW5zaXR5XzIuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVhYTMxMzUKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0RlbW9ncmFwaGljU0VJUkRpc2Vhc2VfUktfUmVmZXJlbmNlL0RlbW9ncmFwaGljTW9kZWwvd29tZW4vRGVuc2l0eV8yLmNzdgpAQCAtMCwwICsxLDMzIEBACitpdGVyYXRpb24sdGltZSxFRy1GUkctRzIxMDAwMSxFRy1GUkctRzIxMDAwMixFRy1GUkctRzIxMDAwMyxFRy1GUkctRzIxMDAwNCxFRy1GUkctRzIxMDAwNSxFRy1MT0UtRzI0MDAwMSxFRy1MT0UtRzI0MDAwMixFRy1MT0UtRzI0MDAwMyxFRy1MT0UtRzI0MDAwNCxFRy1MT0UtRzI0MDAwNSxFRy1MT0UtRzI0MDAwNixFRy1MT0UtRzI0MDAwNyxFRy1MT0UtRzI0MDAwOCxFRy1MT0UtRzI0MDAwOSxFRy1VUEUtRzI5MDAwMSxFRy1VUEUtRzI5MDAwMixFRy1VUEUtRzI5MDAwMyxFRy1VUEUtRzI5MDAwNCxFRy1VUEUtRzI5MDAwNSxFRy1VUEUtRzI5MDAwNixFRy1VUEUtRzI5MDAwNyxFRy1VUEUtRzI5MDAwOCxFRy1VUkctRzMwMDAwMSxFRy1VUkctRzMwMDAwMixFRy1VUkctRzMwMDAwMyxFRy1VUkctRzMwMDAwNAorMSxUdWUgMjUgSmFuIDExLDAuODU3MDc0OTI5MTU4MjI5MSwwLjI5MTI5NjcxMDA2NTk4OTEsMi42NjY2NTEzNjYxODM5NTczLDEuMDAxNjU2NjY4OTQ4Mzk4LDUuODMxMDk4MjQ1MDA2NzAzLDIxNC40MjMyMzU2Njk1MjAyLDc1My4yMjQzNDEzODc2NDMyLDExOTEuNjQ5OTYxNzExNjA3OCwxMzU5LjU2Mzk2OTk3MjE5MjgsMjY3MC4yMDMyNzY4NjQzMDM1LDkwLjE1MzY3MjQxNDY1NTgyLDU3MC4wMDMyNTk0NzgwOTM2LDc5MC4zMTU2NTIwMjg5LDQxNi4yNjIxOTgyMDI3OTQ5LDIyMi4xNjI3ODY3Nzc5OTY2LDg1LjE2OTQ1MzA1MDIxNzM3LDExNi4yOTIxODc0OTc5NTM1Myw0MC41MzQ1MzUxODY1MTM4Niw3NzIuNzQ2NTU1MzgzMzQwNywyNTMuODIzMDQ0ODI4NTc4MzYsNDg0Ljc3MjQwMTU5OTA4NzEsNzg3LjkyNzkxODIyNDcwODIsNzYwLjI5MjM5Nzg1NjQ0MzQsMTMzMi4wNTAzNzQzOTU5NTIzLDMwLjU1NzE3NzYxOTg2NzY5LDguNjI5OTI1MzA2OTM3NzA3CisyLFdlZCAyNiBKYW4gMTEsMC44NTcwNzU3ODYyMzM1ODY3LDAuMjkxMjk3MDAxMzYyODQ0NTMsMi42NjY2NTQwMzI4MzY2NTcsMS4wMDE2NTc2NzA2MDU1Njc4LDUuODMxMTA0MDc2MTA3ODY2NSwyMTQuNDIzNDUwMDkyODYzMjUsNzUzLjIyNTA5NDYxMjM2MTQsMTE5MS42NTExNTMzNjIxNjUxLDEzNTkuNTY1MzI5NTM2ODQzMSwyNjcwLjIwNTk0NzA2ODkxNSw5MC4xNTM3NjI1NjgzNzMzMiw1NzAuMDAzODI5NDgxNjM3OCw3OTAuMzE2NDQyMzQ0OTQ2Nyw0MTYuMjYyNjE0NDY1MjAwOTUsMjIyLjE2MzAwODk0MDg5NDYzLDg1LjE2OTUzODIxOTcxMjk2LDExNi4yOTIzMDM3OTAxOTkwNyw0MC41MzQ1NzU3MjEwNjkzMSw3NzIuNzQ3MzI4MTMwMjgyNywyNTMuODIzMjk4NjUxNzUwMTgsNDg0Ljc3Mjg4NjM3MTczMTI2LDc4Ny45Mjg3MDYxNTMwMjAyLDc2MC4yOTMxNTgxNDkyMjE1LDEzMzIuMDUxNzA2NDQ2OTkyNywzMC41NTcyMDgxNzcwNjA1NTYsOC42Mjk5MzM5MzY4NjczMjQKKzMsVGh1IDI3IEphbiAxMSwwLjg1NzA3NjY0MzMwOTgwMTIsMC4yOTEyOTcyOTI2NTk5OTE2NiwyLjY2NjY1NjY5OTQ5MjAyMjcsMS4wMDE2NTg2NzIyNjM3NDAyLDUuODMxMTA5OTA3MjE0ODU4NCwyMTQuNDIzNjY0NTE2NDIwNiw3NTMuMjI1ODQ3ODM3ODMyNSwxMTkxLjY1MjM0NTAxMzkxNCwxMzU5LjU2NjY4OTEwMjg1MywyNjcwLjIwODYxNzI3NjE5ODgsOTAuMTUzODUyNzIyMTgwOTcsNTcwLjAwNDM5OTQ4NTc1MjUsNzkwLjMxNzIzMjY2MTc4NCw0MTYuMjYzMDMwNzI4MDIzNSwyMjIuMTYzMjMxMTA0MDE0NjcsODUuMTY5NjIzMzg5MjkzOCwxMTYuMjkyNDIwMDgyNTYwOTcsNDAuNTM0NjE2MjU1NjY1MzEsNzcyLjc0ODEwMDg3Nzk5NywyNTMuODIzNTUyNDc1MTc1Nyw0ODQuNzczMzcxMTQ0ODU5OSw3ODcuOTI5NDk0MDgyMTIwMiw3NjAuMjkzOTE4NDQyNzU5NiwxMzMyLjA1MzAzODQ5OTM2NSwzMC41NTcyMzg3MzQyODQwMSw4LjYyOTk0MjU2NjgwNTU3NQorNCxGcmkgMjggSmFuIDExLDAuODU3MDc3NTAwMzg2ODczMiwwLjI5MTI5NzU4Mzk1NzQyOTksMi42NjY2NTkzNjYxNTAwNTU3LDEuMDAxNjU5NjczOTIyOTEyNyw1LjgzMTExNTczODMyNzY4MSwyMTQuNDIzODc4OTQwMTkyMzcsNzUzLjIyNjYwMTA2NDA1NywxMTkxLjY1MzUzNjY2Njg1NSwxMzU5LjU2ODA0ODY3MDIyMTUsMjY3MC4yMTEyODc0ODYxNTEsOTAuMTUzOTQyODc2MDc4NzcsNTcwLjAwNDk2OTQ5MDQzNjksNzkwLjMxODAyMjk3OTQxMjEsNDE2LjI2MzQ0Njk5MTI2MjM2LDIyMi4xNjM0NTMyNjczNTY4Niw4NS4xNjk3MDg1NTg5NTk3NywxMTYuMjkyNTM2Mzc1MDM5Miw0MC41MzQ2NTY3OTAzMDE4MjQsNzcyLjc0ODg3MzYyNjQ4NDQsMjUzLjgyMzgwNjI5ODg1NTEyLDQ4NC43NzM4NTU5MTg0NzM0Myw3ODcuOTMwMjgyMDEyMDA4Miw3NjAuMjk0Njc4NzM3MDU4MywxMzMyLjA1NDM3MDU1MzA3MDQsMzAuNTU3MjY5MjkxNTM4MDEsOC42Mjk5NTExOTY3NTI0NTQKKzUsU2F0IDI5IEphbiAxMSwwLjg1NzA3ODM1NzQ2NDgwMiwwLjI5MTI5Nzg3NTI1NTE1OTQzLDIuNjY2NjYyMDMyODEwNzU2NCwxLjAwMTY2MDY3NTU4MzA4Nyw1LjgzMTEyMTU2OTQ0NjMzNCwyMTQuNDI0MDkzMzY0MTc4NTYsNzUzLjIyNzM1NDI5MTAzNDgsMTE5MS42NTQ3MjgzMjA5ODcsMTM1OS41Njk0MDgyMzg5NTAyLDI2NzAuMjEzOTU3Njk4NzczNCw5MC4xNTQwMzMwMzAwNjY3Niw1NzAuMDA1NTM5NDk1NjkxNCw3OTAuMzE4ODEzMjk3ODMwMyw0MTYuMjYzODYzMjU0OTE3NCwyMjIuMTYzNjc1NDMwOTIxMiw4NS4xNjk3OTM3Mjg3MTA5MSwxMTYuMjkyNjUyNjY3NjMzNyw0MC41MzQ2OTczMjQ5Nzg4ODYsNzcyLjc0OTY0NjM3NTc0NDQsMjUzLjgyNDA2MDEyMjc4ODM4LDQ4NC43NzQzNDA2OTI1NzE4NSw3ODcuOTMxMDY5OTQyNjg0Myw3NjAuMjk1NDM5MDMyMTE3MiwxMzMyLjA1NTcwMjYwODEwNywzMC41NTcyOTk4NDg4MjI1OSw4LjYyOTk1OTgyNjcwNzk2NgorNixTdW4gMzAgSmFuIDExLDAuODU3MDc5MjE0NTQzNTg4MywwLjI5MTI5ODE2NjU1MzE4MDM2LDIuNjY2NjY0Njk5NDc0MTIzNCwxLjAwMTY2MTY3NzI0NDI2MzIsNS44MzExMjc0MDA1NzA4MTcsMjE0LjQyNDMwNzc4ODM3OTE3LDc1My4yMjgxMDc1MTg3NjU3LDExOTEuNjU1OTE5OTc2MzEwOCwxMzU5LjU3MDc2NzgwOTAzODQsMjY3MC4yMTY2Mjc5MTQwNjY1LDkwLjE1NDEyMzE4NDE0NDg2LDU3MC4wMDYxMDk1MDE1MTYsNzkwLjMxOTYwMzYxNzAzODYsNDE2LjI2NDI3OTUxODk4ODgsMjIyLjE2Mzg5NzU5NDcwNzcsODUuMTY5ODc4ODk4NTQ3MjIsMTE2LjI5Mjc2ODk2MDM0NDUzLDQwLjUzNDczNzg1OTY5NjQ4LDc3Mi43NTA0MTkxMjU3NzczLDI1My44MjQzMTM5NDY5NzU1LDQ4NC43NzQ4MjU0NjcxNTQ5LDc4Ny45MzE4NTc4NzQxNDg0LDc2MC4yOTYxOTkzMjc5MzY1LDEzMzIuMDU3MDM0NjY0NDc1OSwzMC41NTczMzA0MDYxMzc3Myw4LjYyOTk2ODQ1NjY3MjEwNgorNyxNb24gMzEgSmFuIDExLDAuODU3MDgwMDcxNjIzMjMxNSwwLjI5MTI5ODQ1Nzg1MTQ5MjU1LDIuNjY2NjY3MzY2MTQwMTU1NCwxLjAwMTY2MjY3ODkwNjQ0MTEsNS44MzExMzMyMzE3MDExMzIsMjE0LjQyNDUyMjIxMjc5NDIsNzUzLjIyODg2MDc0NzI0OTksMTE5MS42NTcxMTE2MzI4MjY2LDEzNTkuNTcyMTI3MzgwNDg2LDI2NzAuMjE5Mjk4MTMyMDMwNCw5MC4xNTQyMTMzMzgzMTMxMSw1NzAuMDA2Njc5NTA3OTEwNSw3OTAuMzIwMzkzOTM3MDM3NSw0MTYuMjY0Njk1NzgzNDc2NDQsMjIyLjE2NDExOTc1ODcxNjM0LDg1LjE2OTk2NDA2ODQ2ODcyLDExNi4yOTI4ODUyNTMxNzE2Myw0MC41MzQ3NzgzOTQ0NTQ2MDUsNzcyLjc1MTE5MTg3NjU4MjcsMjUzLjgyNDU2Nzc3MTQxNjQsNDg0Ljc3NTMxMDI0MjIyMjgsNzg3LjkzMjY0NTgwNjQwMDIsNzYwLjI5Njk1OTYyNDUxNiwxMzMyLjA1ODM2NjcyMjE3NjMsMzAuNTU3MzYwOTYzNDgzNDEsOC42Mjk5NzcwODY2NDQ4OAorOCxUdWUgMSBGZWIgMTEsMC44NTcwODA5Mjg3MDM3MzE4LDAuMjkxMjk4NzQ5MTUwMDk2MDcsMi42NjY2NzAwMzI4MDg4NTUsMS4wMDE2NjM2ODA1Njk2MjA2LDUuODMxMTM5MDYyODM3MjgxLDIxNC40MjQ3MzY2Mzc0MjM1Niw3NTMuMjI5NjEzOTc2NDg3LDExOTEuNjU4MzAzMjkwNTM0LDEzNTkuNTczNDg2OTUzMjkzMiwyNjcwLjIyMTk2ODM1MjY2NCw5MC4xNTQzMDM0OTI1NzE1MSw1NzAuMDA3MjQ5NTE0ODc0OCw3OTAuMzIxMTg0MjU3ODI2Miw0MTYuMjY1MTEyMDQ4MzgwMzMsMjIyLjE2NDM0MTkyMjk0NzIyLDg1LjE3MDA0OTIzODQ3NTM0LDExNi4yOTMwMDE1NDYxMTUsNDAuNTM0ODE4OTI5MjUzMjcsNzcyLjc1MTk2NDYyODE2MDcsMjUzLjgyNDgyMTU5NjExMTEyLDQ4NC43NzU3OTUwMTc3NzU2NCw3ODcuOTMzNDMzNzM5NDM5OSw3NjAuMjk3NzE5OTIxODU1OCwxMzMyLjA1OTY5ODc4MTIwOTEsMzAuNTU3MzkxNTIwODU5NjY3LDguNjI5OTg1NzE2NjI2MjgxCis5LFdlZCAyIEZlYiAxMSwwLjg1NzA4MTc4NTc4NTA4ODksMC4yOTEyOTkwNDA0NDg5OTA5LDIuNjY2NjcyNjk5NDgwMjIxNSwxLjAwMTY2NDY4MjIzMzgwMTgsNS44MzExNDQ4OTM5NzkyNTgsMjE0LjQyNDk1MTA2MjI2NzQsNzUzLjIzMDM2NzIwNjQ3NzUsMTE5MS42NTk0OTQ5NDk0MzI3LDEzNTkuNTc0ODQ2NTI3NDYsMjY3MC4yMjQ2Mzg1NzU5NjcsOTAuMTU0MzkzNjQ2OTIwMSw1NzAuMDA3ODE5NTIyNDA5NCw3OTAuMzIxOTc0NTc5NDA1Niw0MTYuMjY1NTI4MzEzNzAwNiwyMjIuMTY0NTY0MDg3NDAwMyw4NS4xNzAxMzQ0MDg1NjcxNiwxMTYuMjkzMTE3ODM5MTc0Nyw0MC41MzQ4NTk0NjQwOTI0NTYsNzcyLjc1MjczNzM4MDUxMTksMjUzLjgyNTA3NTQyMTA1OTYsNDg0Ljc3NjI3OTc5MzgxMzA1LDc4Ny45MzQyMjE2NzMyNjc2LDc2MC4yOTg0ODAyMTk5NTYsMTMzMi4wNjEwMzA4NDE1NzM3LDMwLjU1NzQyMjA3ODI2NjQ3Nyw4LjYyOTk5NDM0NjYxNjMxNAorMTAsVGh1IDMgRmViIDExLDAuODU3MDgyNjQyODY3MzAzLDAuMjkxMjk5MzMxNzQ4MTc3LDIuNjY2Njc1MzY2MTU0MjU1LDEuMDAxNjY1NjgzODk4OTg0Niw1LjgzMTE1MDcyNTEyNzA2NywyMTQuNDI1MTY1NDg3MzI1Nyw3NTMuMjMxMTIwNDM3MjIxMywxMTkxLjY2MDY4NjYwOTUyMzMsMTM1OS41NzYyMDYxMDI5ODY0LDI2NzAuMjI3MzA4ODAxOTQyLDkwLjE1NDQ4MzgwMTM1ODgyLDU3MC4wMDgzODk1MzA1MTM4LDc5MC4zMjI3NjQ5MDE3NzU0LDQxNi4yNjU5NDQ1Nzk0MzcxLDIyMi4xNjQ3ODYyNTIwNzU1LDg1LjE3MDIxOTU3ODc0NDE4LDExNi4yOTMyMzQxMzIzNTA3LDQwLjUzNDg5OTk5ODk3MjE4Niw3NzIuNzUzNTEwMTMzNjM1NiwyNTMuODI1MzI5MjQ2MjYxOSw0ODQuNzc2NzY0NTcwMzM1Myw3ODcuOTM1MDA5NjA3ODgzMSw3NjAuMjk5MjQwNTE4ODE2MywxMzMyLjA2MjM2MjkwMzI3MSwzMC41NTc0NTI2MzU3MDM4MzYsOC42MzAwMDI5NzY2MTQ5NzcKKzExLEZyaSA0IEZlYiAxMSwwLjg1NzA4MzQ5OTk1MDM3NDQsMC4yOTEyOTk2MjMwNDc2NTQ1NSwyLjY2NjY3ODAzMjgzMDk1NSwxLjAwMTY2NjY4NTU2NTE2OTUsNS44MzExNTY1NTYyODA3MDcsMjE0LjQyNTM3OTkxMjU5ODQzLDc1My4yMzE4NzM2Njg3MTg0LDExOTEuNjYxODc4MjcwODA1NiwxMzU5LjU3NzU2NTY3OTg3MTcsMjY3MC4yMjk5NzkwMzA1ODYsOTAuMTU0NTczOTU1ODg3Nyw1NzAuMDA4OTU5NTM5MTg4NCw3OTAuMzIzNTU1MjI0OTM1Myw0MTYuMjY2MzYwODQ1NTg5NzYsMjIyLjE2NTAwODQxNjk3MjgyLDg1LjE3MDMwNDc0OTAwNjM1LDExNi4yOTMzNTA0MjU2NDI5OCw0MC41MzQ5NDA1MzM4OTI0NCw3NzIuNzU0MjgyODg3NTMyMSwyNTMuODI1NTgzMDcxNzE4MSw0ODQuNzc3MjQ5MzQ3MzQyMTUsNzg3LjkzNTc5NzU0MzI4NjgsNzYwLjMwMDAwMDgxODQzNzEsMTMzMi4wNjM2OTQ5NjYyOTk5LDMwLjU1NzQ4MzE5MzE3MTc1LDguNjMwMDExNjA2NjIyMjY3CisxMixTYXQgNSBGZWIgMTEsMC44NTcwODQzNTcwMzQzMDI3LDAuMjkxMjk5OTE0MzQ3NDIzMjUsMi42NjY2ODA2OTk1MTAzMjEsMS4wMDE2Njc2ODcyMzIzNTYsNS44MzExNjIzODc0NDAxOCwyMTQuNDI1NTk0MzM4MDg1Niw3NTMuMjMyNjI2OTAwOTY4NywxMTkxLjY2MzA2OTkzMzI4MDIsMTM1OS41Nzg5MjUyNTgxMTc0LDI2NzAuMjMyNjQ5MjYxOTAwNCw5MC4xNTQ2NjQxMTA1MDY3Miw1NzAuMDA5NTI5NTQ4NDMyNyw3OTAuMzI0MzQ1NTQ4ODg1OCw0MTYuMjY2Nzc3MTEyMTU4NzYsMjIyLjE2NTIzMDU4MjA5MjMsODUuMTcwMzg5OTE5MzUzNywxMTYuMjkzNDY2NzE5MDUxNjEsNDAuNTM0OTgxMDY4ODUzMjQsNzcyLjc1NTA1NTY0MjIwMTMsMjUzLjgyNTgzNjg5NzQyODA1LDQ4NC43Nzc3MzQxMjQ4MzM5LDc4Ny45MzY1ODU0Nzk0NzgzLDc2MC4zMDA3NjExMTg4MTgyLDEzMzIuMDY1MDI3MDMwNjYwMywzMC41NTc1MTM3NTA2NzAyMiw4LjYzMDAyMDIzNjYzODE4NgorMTMsU3VuIDYgRmViIDExLDAuODU3MDg1MjE0MTE5MDg4NCwwLjI5MTMwMDIwNTY0NzQ4MzI3LDIuNjY2NjgzMzY2MTkyMzUzMiwxLjAwMTY2ODY4ODkwMDU0NDIsNS44MzExNjgyMTg2MDU0ODIsMjE0LjQyNTgwODc2Mzc4NzEzLDc1My4yMzMzODAxMzM5NzIxLDExOTEuNjY0MjYxNTk2OTQ2LDEzNTkuNTgwMjg0ODM3NzIyMywyNjcwLjIzNTMxOTQ5NTg4NSw5MC4xNTQ3NTQyNjUyMTU5MSw1NzAuMDEwMDk5NTU4MjQ3NSw3OTAuMzI1MTM1ODczNjI2NCw0MTYuMjY3MTkzMzc5MTQ0MDMsMjIyLjE2NTQ1Mjc0NzQzNDAyLDg1LjE3MDQ3NTA4OTc4NjIsMTE2LjI5MzU4MzAxMjU3NjQ2LDQwLjUzNTAyMTYwMzg1NDU3NCw3NzIuNzU1ODI4Mzk3NjQzNSwyNTMuODI2MDkwNzIzMzkxODcsNDg0Ljc3ODIxODkwMjgxMDQ3LDc4Ny45MzczNzM0MTY0NTc2LDc2MC4zMDE1MjE0MTk5NTk1LDEzMzIuMDY2MzU5MDk2MzUzNCwzMC41NTc1NDQzMDgxOTkyNTgsOC42MzAwMjg4NjY2NjI3MzcKKzE0LE1vbiA3IEZlYiAxMSwwLjg1NzA4NjA3MTIwNDczMTEsMC4yOTEzMDA0OTY5NDc4MzQ2LDIuNjY2Njg2MDMyODc3MDUyNSwxLjAwMTY2OTY5MDU2OTczNCw1LjgzMTE3NDA0OTc3NjYxNjUsMjE0LjQyNjAyMzE4OTcwMzEzLDc1My4yMzQxMzMzNjc3Mjg5LDExOTEuNjY1NDUzMjYxODAzMywxMzU5LjU4MTY0NDQxODY4NjcsMjY3MC4yMzc5ODk3MzI1Mzk1LDkwLjE1NDg0NDQyMDAxNTI0LDU3MC4wMTA2Njk1Njg2MzIxLDc5MC4zMjU5MjYxOTkxNTc1LDQxNi4yNjc2MDk2NDY1NDU1LDIyMi4xNjU2NzQ5MTI5OTc4Nyw4NS4xNzA1NjAyNjAzMDM4NCwxMTYuMjkzNjk5MzA2MjE3Niw0MC41MzUwNjIxMzg4OTY0MzYsNzcyLjc1NjYwMTE1Mzg1ODQsMjUzLjgyNjM0NDU0OTYwOTUzLDQ4NC43Nzg3MDM2ODEyNzE3NCw3ODcuOTM4MTYxMzU0MjI1LDc2MC4zMDIyODE3MjE4NjEsMTMzMi4wNjc2OTExNjMzNzgyLDMwLjU1NzU3NDg2NTc1ODg0LDguNjMwMDM3NDk2Njk1OTIKKzE1LFR1ZSA4IEZlYiAxMSwwLjg1NzA4NjkyODI5MTIzMDcsMC4yOTEzMDA3ODgyNDg0NzczLDIuNjY2Njg4Njk5NTY0NDE4NiwxLjAwMTY3MDY5MjIzOTkyNTIsNS44MzExNzk4ODA5NTM1OCwyMTQuNDI2MjM3NjE1ODMzNTEsNzUzLjIzNDg4NjYwMjIzOSwxMTkxLjY2NjY0NDkyNzg1MjgsMTM1OS41ODMwMDQwMDEwMTEsMjY3MC4yNDA2NTk5NzE4NjQ3LDkwLjE1NDkzNDU3NDkwNDcxLDU3MC4wMTEyMzk1Nzk1ODY4LDc5MC4zMjY3MTY1MjU0Nzg4LDQxNi4yNjgwMjU5MTQzNjMzLDIyMi4xNjU4OTcwNzg3ODM4MSw4NS4xNzA2NDU0MzA5MDY3LDExNi4yOTM4MTU1OTk5NzUwOCw0MC41MzUxMDI2NzM5Nzg4NCw3NzIuNzU3MzczOTEwODQ1OSwyNTMuODI2NTk4Mzc2MDgwOSw0ODQuNzc5MTg4NDYwMjE3OCw3ODcuOTM4OTQ5MjkyNzgwMyw3NjAuMzAzMDQyMDI0NTIyOCwxMzMyLjA2OTAyMzIzMTczNTIsMzAuNTU3NjA1NDIzMzQ4OTgsOC42MzAwNDYxMjY3Mzc3MzMKKzE2LFdlZCA5IEZlYiAxMSwwLjg1NzA4Nzc4NTM3ODU4NzUsMC4yOTEzMDEwNzk1NDk0MTEyNiwyLjY2NjY5MTM2NjI1NDQ1MDUsMS4wMDE2NzE2OTM5MTExMTgzLDUuODMxMTg1NzEyMTM2Mzc2LDIxNC40MjY0NTIwNDIxNzgzLDc1My4yMzU2Mzk4Mzc1MDI0LDExOTEuNjY3ODM2NTk1MDkzNCwxMzU5LjU4NDM2MzU4NDY5NDgsMjY3MC4yNDMzMzAyMTM4Niw5MC4xNTUwMjQ3Mjk4ODQzNyw1NzAuMDExODA5NTkxMTExNCw3OTAuMzI3NTA2ODUyNTkwMyw0MTYuMjY4NDQyMTgyNTk3NTQsMjIyLjE2NjExOTI0NDc5Miw4NS4xNzA3MzA2MDE1OTQ3MywxMTYuMjkzOTMxODkzODQ4OCw0MC41MzUxNDMyMDkxMDE3OSw3NzIuNzU4MTQ2NjY4NjA2MSwyNTMuODI2ODUyMjAyODA2MTgsNDg0Ljc3OTY3MzIzOTY0ODYsNzg3LjkzOTczNzIzMjEyMzcsNzYwLjMwMzgwMjMyNzk0NTMsMTMzMi4wNzAzNTUzMDE0MjQzLDMwLjU1NzYzNTk4MDk2OTY5LDguNjMwMDU0NzU2Nzg4MTczCisxNyxUaHUgMTAgRmViIDExLDAuODU3MDg4NjQyNDY2ODAxNiwwLjI5MTMwMTM3MDg1MDYzNjM0LDIuNjY2Njk0MDMyOTQ3MTUwNSwxLjAwMTY3MjY5NTU4MzMxMyw1LjgzMTE5MTU0MzMyNTAwNCwyMTQuNDI2NjY2NDY4NzM3NTUsNzUzLjIzNjM5MzA3MzUxODcsMTE5MS42NjkwMjgyNjM1MjYsMTM1OS41ODU3MjMxNjk3Mzg1LDI2NzAuMjQ2MDAwNDU4NTI2LDkwLjE1NTExNDg4NDk1NDE2LDU3MC4wMTIzNzk2MDMyMDYsNzkwLjMyODI5NzE4MDQ5MjQsNDE2LjI2ODg1ODQ1MTI0NzksMjIyLjE2NjM0MTQxMTAyMjMsODUuMTcwODE1NzcyMzY3OTMsMTE2LjI5NDA0ODE4NzgzODg0LDQwLjUzNTE4Mzc0NDI2NTI3LDc3Mi43NTg5MTk0MjcxMzkyLDI1My44MjcxMDYwMjk3ODUzNCw0ODQuNzgwMTU4MDE5NTY0Myw3ODcuOTQwNTI1MTcyMjU0OSw3NjAuMzA0NTYyNjMyMTI3NywxMzMyLjA3MTY4NzM3MjQ0NjQsMzAuNTU3NjY2NTM4NjIwOTUzLDguNjMwMDYzMzg2ODQ3MjQ3CisxOCxGcmkgMTEgRmViIDExLDAuODU3MDg5NDk5NTU1ODcyNSwwLjI5MTMwMTY2MjE1MjE1Mjg2LDIuNjY2Njk2Njk5NjQyNTE2OCwxLjAwMTY3MzY5NzI1NjUwOTIsNS44MzExOTczNzQ1MTk0NjIsMjE0LjQyNjg4MDg5NTUxMTIzLDc1My4yMzcxNDYzMTAyODgyLDExOTEuNjcwMjE5OTMzMTUsMTM1OS41ODcwODI3NTYxNDE2LDI2NzAuMjQ4NjcwNzA1ODYxLDkwLjE1NTIwNTA0MDExNDExLDU3MC4wMTI5NDk2MTU4NzA2LDc5MC4zMjkwODc1MDkxODQ3LDQxNi4yNjkyNzQ3MjAzMTQ0NiwyMjIuMTY2NTYzNTc3NDc0OCw4NS4xNzA5MDA5NDMyMjYyNywxMTYuMjk0MTY0NDgxOTQ1MjIsNDAuNTM1MjI0Mjc5NDY5MjgsNzcyLjc1OTY5MjE4NjQ0NSwyNTMuODI3MzU5ODU3MDE4MjgsNDg0Ljc4MDY0Mjc5OTk2NDcsNzg3Ljk0MTMxMzExMzE3NDMsNzYwLjMwNTMyMjkzNzA3MDYsMTMzMi4wNzMwMTk0NDQ3OTk1LDMwLjU1NzY5NzA5NjMwMjc4LDguNjMwMDcyMDE2OTE0OTUKKzE5LFNhdCAxMiBGZWIgMTEsMC44NTcwOTAzNTY2NDU4MDA3LDAuMjkxMzAxOTUzNDUzOTYwNywyLjY2NjY5OTM2NjM0MDU1MDMsMS4wMDE2NzQ2OTg5MzA3MDc3LDUuODMxMjAzMjA1NzE5NzUxLDIxNC40MjcwOTUzMjI0OTkzNSw3NTMuMjM3ODk5NTQ3ODExLDExOTEuNjcxNDExNjAzOTY2LDEzNTkuNTg4NDQyMzQzOTA0MywyNjcwLjI1MTM0MDk1NTg2Nyw5MC4xNTUyOTUxOTUzNjQyMiw1NzAuMDEzNTE5NjI5MTA1Miw3OTAuMzI5ODc3ODM4NjY3NCw0MTYuMjY5NjkwOTg5Nzk3MywyMjIuMTY2Nzg1NzQ0MTQ5NDgsODUuMTcwOTg2MTE0MTY5OCwxMTYuMjk0MjgwNzc2MTY3ODQsNDAuNTM1MjY0ODE0NzEzODMsNzcyLjc2MDQ2NDk0NjUyMzYsMjUzLjgyNzYxMzY4NDUwNTA1LDQ4NC43ODExMjc1ODA4NDk5LDc4Ny45NDIxMDEwNTQ4ODEzLDc2MC4zMDYwODMyNDI3NzM4LDEzMzIuMDc0MzUxNTE4NDg1MiwzMC41NTc3Mjc2NTQwMTUxNjQsOC42MzAwODA2NDY5OTEyOAorMjAsU3VuIDEzIEZlYiAxMSwwLjg1NzA5MTIxMzczNjU4NiwwLjI5MTMwMjI0NDc1NjA1OTc2LDIuNjY2NzAyMDMzMDQxMjUsMS4wMDE2NzU3MDA2MDU5MDc0LDUuODMxMjA5MDM2OTI1ODcyLDIxNC40MjczMDk3NDk3MDE4Niw3NTMuMjM4NjUyNzg2MDg3MiwxMTkxLjY3MjYwMzI3NTk3MzIsMTM1OS41ODk4MDE5MzMwMjY0LDI2NzAuMjU0MDExMjA4NTQyNiw5MC4xNTUzODUzNTA3MDQ0OSw1NzAuMDE0MDg5NjQyOTA5OCw3OTAuMzMwNjY4MTY4OTQwMyw0MTYuMjcwMTA3MjU5Njk2NDMsMjIyLjE2NzAwNzkxMTA0NjM3LDg1LjE3MTA3MTI4NTE5ODUsMTE2LjI5NDM5NzA3MDUwNjc2LDQwLjUzNTMwNTM0OTk5ODkxLDc3Mi43NjEyMzc3MDczNzQ5LDI1My44Mjc4Njc1MTIyNDU2Niw0ODQuNzgxNjEyMzYyMjE5OTYsNzg3Ljk0Mjg4ODk5NzM3NjQsNzYwLjMwNjg0MzU0OTIzNywxMzMyLjA3NTY4MzU5MzUwMjYsMzAuNTU3NzU4MjExNzU4MSw4LjYzMDA4OTI3NzA3NjI0MQorMjEsTW9uIDE0IEZlYiAxMSwwLjg1NzA5MjA3MDgyODIyODQsMC4yOTEzMDI1MzYwNTg0NTAyLDIuNjY2NzA0Njk5NzQ0NjE2NywxLjAwMTY3NjcwMjI4MjEwOSw1LjgzMTIxNDg2ODEzNzgyMywyMTQuNDI3NTI0MTc3MTE4NzgsNzUzLjIzOTQwNjAyNTExNjYsMTE5MS42NzM3OTQ5NDkxNzI0LDEzNTkuNTkxMTYxNTIzNTA4MiwyNjcwLjI1NjY4MTQ2Mzg4OSw5MC4xNTU0NzU1MDYxMzQ5LDU3MC4wMTQ2NTk2NTcyODQ0LDc5MC4zMzE0NTg1MDAwMDM2LDQxNi4yNzA1MjM1MzAwMTE3NiwyMjIuMTY3MjMwMDc4MTY1MzUsODUuMTcxMTU2NDU2MzEyMzYsMTE2LjI5NDUxMzM2NDk2Miw0MC41MzUzNDU4ODUzMjQ1MjQsNzcyLjc2MjAxMDQ2ODk5OSwyNTMuODI4MTIxMzQwMjQwMDUsNDg0Ljc4MjA5NzE0NDA3NDY3LDc4Ny45NDM2NzY5NDA2NTkzLDc2MC4zMDc2MDM4NTY0NjA4LDEzMzIuMDc3MDE1NjY5ODUxOCwzMC41NTc3ODg3Njk1MzE1OTgsOC42MzAwOTc5MDcxNjk4MzIKKzIyLFR1ZSAxNSBGZWIgMTEsMC44NTcwOTI5Mjc5MjA3Mjc4LDAuMjkxMzAyODI3MzYxMTMxODMsMi42NjY3MDczNjY0NTA2NTA0LDEuMDAxNjc3NzAzOTU5MzEyLDUuODMxMjIwNjk5MzU1NjA3LDIxNC40Mjc3Mzg2MDQ3NTAxNSw3NTMuMjQwMTU5MjY0ODk5MywxMTkxLjY3NDk4NjYyMzU2MywxMzU5LjU5MjUyMTExNTM0OTksMjY3MC4yNTkzNTE3MjE5MDY2LDkwLjE1NTU2NTY2MTY1NTQ5LDU3MC4wMTUyMjk2NzIyMjksNzkwLjMzMjI0ODgzMTg1NzEsNDE2LjI3MDkzOTgwMDc0MzQ2LDIyMi4xNjc0NTIyNDU1MDY1NSw4NS4xNzEyNDE2Mjc1MTE0LDExNi4yOTQ2Mjk2NTk1MzM1Myw0MC41MzUzODY0MjA2OTA2Nyw3NzIuNzYyNzgzMjMxMzk1OCwyNTMuODI4Mzc1MTY4NDg4MzIsNDg0Ljc4MjU4MTkyNjQxNDE0LDc4Ny45NDQ0NjQ4ODQ3MzAzLDc2MC4zMDgzNjQxNjQ0NDQ5LDEzMzIuMDc4MzQ3NzQ3NTMzNCwzMC41NTc4MTkzMjczMzU2NTgsOC42MzAxMDY1MzcyNzIwNTQKKzIzLFdlZCAxNiBGZWIgMTEsMC44NTcwOTM3ODUwMTQwODQzLDAuMjkxMzAzMTE4NjY0MTA0OSwyLjY2NjcxMDAzMzE1OTM1MDUsMS4wMDE2Nzg3MDU2Mzc1MTcyLDUuODMxMjI2NTMwNTc5MjIyLDIxNC40Mjc5NTMwMzI1OTU5NSw3NTMuMjQwOTEyNTA1NDM1LDExOTEuNjc2MTc4Mjk5MTQ1NSwxMzU5LjU5Mzg4MDcwODU1MDgsMjY3MC4yNjIwMjE5ODI1OTMsOTAuMTU1NjU1ODE3MjY2MjIsNTcwLjAxNTc5OTY4Nzc0MzcsNzkwLjMzMzAzOTE2NDUwMTEsNDE2LjI3MTM1NjA3MTg5MTQzLDIyMi4xNjc2NzQ0MTMwNjk4OCw4NS4xNzEzMjY3OTg3OTU2LDExNi4yOTQ3NDU5NTQyMjEzMyw0MC41MzU0MjY5NTYwOTczNDYsNzcyLjc2MzU1NTk5NDU2NTQsMjUzLjgyODYyODk5Njk5MDM1LDQ4NC43ODMwNjY3MDkyMzg1NCw3ODcuOTQ1MjUyODI5NTg5Miw3NjAuMzA5MTI0NDczMTg5MiwxMzMyLjA3OTY3OTgyNjU0NzEsMzAuNTU3ODQ5ODg1MTcwMjYzLDguNjMwMTE1MTY3MzgyOTA4CisyNCxUaHUgMTcgRmViIDExLDAuODU3MDk0NjQyMTA4Mjk4MSwwLjI5MTMwMzQwOTk2NzM2OTIsMi42NjY3MTI2OTk4NzA3MTcsMS4wMDE2Nzk3MDczMTY3MjM2LDUuODMxMjMyMzYxODA4NjY4LDIxNC40MjgxNjc0NjA2NTYyNSw3NTMuMjQxNjY1NzQ2NzIzOSwxMTkxLjY3NzM2OTk3NTkyLDEzNTkuNTk1MjQwMzAzMTExLDI2NzAuMjY0NjkyMjQ1OTUwMyw5MC4xNTU3NDU5NzI5NjcxMyw1NzAuMDE2MzY5NzAzODI4Myw3OTAuMzMzODI5NDk3OTM1Miw0MTYuMjcxNzcyMzQzNDU1NywyMjIuMTY3ODk2NTgwODU1NDMsODUuMTcxNDExOTcwMTY1LDExNi4yOTQ4NjIyNDkwMjU0Nyw0MC41MzU0Njc0OTE1NDQ1Nyw3NzIuNzY0MzI4NzU4NTA3OCwyNTMuODI4ODgyODI1NzQ2MjMsNDg0Ljc4MzU1MTQ5MjU0NzYsNzg3Ljk0NjA0MDc3NTIzNTksNzYwLjMwOTg4NDc4MjY5MzgsMTMzMi4wODEwMTE5MDY4OTI5LDMwLjU1Nzg4MDQ0MzAzNTQzLDguNjMwMTIzNzk3NTAyMzkKKzI1LEZyaSAxOCBGZWIgMTEsMC44NTcwOTU0OTkyMDMzNjg2LDAuMjkxMzAzNzAxMjcwOTI0OSwyLjY2NjcxNTM2NjU4NDc0OSwxLjAwMTY4MDcwODk5NjkzMiw1LjgzMTIzODE5MzA0Mzk0NiwyMTQuNDI4MzgxODg4OTMwOSw3NTMuMjQyNDE4OTg4NzY2MywxMTkxLjY3ODU2MTY1Mzg4NTcsMTM1OS41OTY1OTk4OTkwMzEyLDI2NzAuMjY3MzYyNTExOTc4LDkwLjE1NTgzNjEyODc1ODE4LDU3MC4wMTY5Mzk3MjA0ODMsNzkwLjMzNDYxOTgzMjE1OTksNDE2LjI3MjE4ODYxNTQzNjE2LDIyMi4xNjgxMTg3NDg4NjMxMiw4NS4xNzE0OTcxNDE2MTk1NywxMTYuMjk0OTc4NTQzOTQ1ODcsNDAuNTM1NTA4MDI3MDMyMzM2LDc3Mi43NjUxMDE1MjMyMjI5LDI1My44MjkxMzY2NTQ3NTYwNyw0ODQuNzg0MDM2Mjc2MzQxNDUsNzg3Ljk0NjgyODcyMTY3MDcsNzYwLjMxMDY0NTA5Mjk1ODcsMTMzMi4wODIzNDM5ODg1NzA4LDMwLjU1NzkxMTAwMDkzMTE0LDguNjMwMTMyNDI3NjMwNTAzCisyNixTYXQgMTkgRmViIDExLDAuODU3MDk2MzU2Mjk5Mjk2NCwwLjI5MTMwMzk5MjU3NDc3MTgsMi42NjY3MTgwMzMzMDE0NDk1LDEuMDAxNjgxNzEwNjc4MTQxNyw1LjgzMTI0NDAyNDI4NTA1NjUsMjE0LjQyODU5NjMxNzQyLDc1My4yNDMxNzIyMzE1NjIsMTE5MS42Nzk3NTMzMzMwNDMsMTM1OS41OTc5NTk0OTYzMTEsMjY3MC4yNzAwMzI3ODA2NzY1LDkwLjE1NTkyNjI4NDYzOTM5LDU3MC4wMTc1MDk3Mzc3MDc5LDc5MC4zMzU0MTAxNjcxNzUzLDQxNi4yNzI2MDQ4ODc4MzI4NywyMjIuMTY4MzQwOTE3MDkyOTYsODUuMTcxNTgyMzEzMTU5MjksMTE2LjI5NTA5NDgzODk4MjU0LDQwLjUzNTU0ODU2MjU2MDY0LDc3Mi43NjU4NzQyODg3MTA4LDI1My44MjkzOTA0ODQwMTk1Nyw0ODQuNzg0NTIxMDYwNjIsNzg3Ljk0NzYxNjY2ODg5MzUsNzYwLjMxMTQwNTQwMzk4MzgsMTMzMi4wODM2NzYwNzE1ODA0LDMwLjU1Nzk0MTU1ODg1NzQxNSw4LjYzMDE0MTA1Nzc2NzI0NworMjcsU3VuIDIwIEZlYiAxMSwwLjg1NzA5NzIxMzM5NjA4MTQsMC4yOTEzMDQyODM4Nzg5MTAwNSwyLjY2NjcyMDcwMDAyMDgxNiwxLjAwMTY4MjcxMjM2MDM1MzEsNS44MzEyNDk4NTU1MzE5OTcsMjE0LjQyODgxMDc0NjEyMzQ1LDc1My4yNDM5MjU0NzUxMTA4LDExOTEuNjgwOTQ1MDEzMzkyMSwxMzU5LjU5OTMxOTA5NDk1MDMsMjY3MC4yNzI3MDMwNTIwNDQ2LDkwLjE1NjAxNjQ0MDYxMDc0LDU3MC4wMTgwNzk3NTU1MDI1LDc5MC4zMzYyMDA1MDI5ODA1LDQxNi4yNzMwMjExNjA2NDU5LDIyMi4xNjg1NjMwODU1NDQ5Miw4NS4xNzE2Njc0ODQ3ODQxOCwxMTYuMjk1MjExMTM0MTM1NTEsNDAuNTM1NTg5MDk4MTI5NDYsNzcyLjc2NjY0NzA1NDk3MTYsMjUzLjgyOTY0NDMxMzUzNjk2LDQ4NC43ODUwMDU4NDUzODM1LDc4Ny45NDg0MDQ2MTY5MDQxLDc2MC4zMTIxNjU3MTU3Njk1LDEzMzIuMDg1MDA4MTU1OTIyNywzMC41NTc5NzIxMTY4MTQyNSw4LjYzMDE0OTY4NzkxMjYxOQorMjgsTW9uIDIxIEZlYiAxMSwwLjg1NzA5ODA3MDQ5MzcyMzIsMC4yOTEzMDQ1NzUxODMzMzk1LDIuNjY2NzIzMzY2NzQyODQ5LDEuMDAxNjgzNzE0MDQzNTY2NCw1LjgzMTI1NTY4Njc4NDc2NywyMTQuNDI5MDI1MTc1MDQxMzUsNzUzLjI0NDY3ODcxOTQxMywxMTkxLjY4MjEzNjY5NDkzMywxMzU5LjYwMDY3ODY5NDk0OTIsMjY3MC4yNzUzNzMzMjYwODI0LDkwLjE1NjEwNjU5NjY3MjI2LDU3MC4wMTg2NDk3NzM4Njc0LDc5MC4zMzY5OTA4Mzk1NzY0LDQxNi4yNzM0Mzc0MzM4NzUyLDIyMi4xNjg3ODUyNTQyMTkxLDg1LjE3MTc1MjY1NjQ5NDI1LDExNi4yOTUzMjc0Mjk0MDQ3OCw0MC41MzU2Mjk2MzM3Mzg4MzYsNzcyLjc2NzQxOTgyMjAwNTIsMjUzLjgyOTg5ODE0MzMwODE4LDQ4NC43ODU0OTA2MzA2MzE3LDc4Ny45NDkxOTI1NjU3MDI3LDc2MC4zMTI5MjYwMjgzMTU1LDEzMzIuMDg2MzQwMjQxNTk2OSwzMC41NTgwMDI2NzQ4MDE2NDIsOC42MzAxNTgzMTgwNjY2MjIKKzI5LFR1ZSAyMiBGZWIgMTEsMC44NTcwOTg5Mjc1OTIyMjIyLDAuMjkxMzA0ODY2NDg4MDYwMywyLjY2NjcyNjAzMzQ2NzU1LDEuMDAxNjg0NzE1NzI3NzgxMyw1LjgzMTI2MTUxODA0MzM3LDIxNC40MjkyMzk2MDQxNzM3LDc1My4yNDU0MzE5NjQ0Njg1LDExOTEuNjgzMzI4Mzc3NjY1NSwxMzU5LjYwMjAzODI5NjMwOCwyNjcwLjI3ODA0MzYwMjc5MTUsOTAuMTU2MTk2NzUyODIzOTIsNTcwLjAxOTIxOTc5MjgwMjIsNzkwLjMzNzc4MTE3Njk2MjYsNDE2LjI3Mzg1MzcwNzUyMDc0LDIyMi4xNjkwMDc0MjMxMTUzNyw4NS4xNzE4Mzc4MjgyODk0OCwxMTYuMjk1NDQzNzI0NzkwMzksNDAuNTM1NjcwMTY5Mzg4NzE2LDc3Mi43NjgxOTI1ODk4MTEyLDI1My44MzAxNTE5NzMzMzMyMiw0ODQuNzg1OTc1NDE2MzY0Nyw3ODcuOTQ5OTgwNTE1Mjg5Miw3NjAuMzEzNjg2MzQxNjIxNSwxMzMyLjA4NzY3MjMyODYwMywzMC41NTgwMzMyMzI4MTk2LDguNjMwMTY2OTQ4MjI5MjU2CiszMCxXZWQgMjMgRmViIDExLDAuODU3MDk5Nzg0NjkxNTc4MywwLjI5MTMwNTE1Nzc5MzA3MjUsMi42NjY3Mjg3MDAxOTQ5MTc2LDEuMDAxNjg1NzE3NDEyOTk3OCw1LjgzMTI2NzM0OTMwNzgwNCwyMTQuNDI5NDU0MDMzNTIwNSw3NTMuMjQ2MTg1MjEwMjc3MiwxMTkxLjY4NDUyMDA2MTU4OTksMTM1OS42MDMzOTc4OTkwMjU4LDI2NzAuMjgwNzEzODgyMTcwNCw5MC4xNTYyODY5MDkwNjU3Niw1NzAuMDE5Nzg5ODEyMzA3LDc5MC4zMzg1NzE1MTUxMzg5LDQxNi4yNzQyNjk5ODE1ODI3LDIyMi4xNjkyMjk1OTIyMzM4OCw4NS4xNzE5MjMwMDAxNjk5LDExNi4yOTU1NjAwMjAyOTIyNCw0MC41MzU3MTA3MDUwNzkxNTQsNzcyLjc2ODk2NTM1ODM5MDEsMjUzLjgzMDQwNTgwMzYxMjE0LDQ4NC43ODY0NjAyMDI1ODI1LDc4Ny45NTA3Njg0NjU2NjM4LDc2MC4zMTQ0NDY2NTU2ODgxLDEzMzIuMDg5MDA0NDE2OTQxNiwzMC41NTgwNjM3OTA4NjgxMiw4LjYzMDE3NTU3ODQwMDUyCiszMSxUaHUgMjQgRmViIDExLDAuODU3MTAwNjQxNzkxNzkxNSwwLjI5MTMwNTQ0OTA5ODM3NTk3LDIuNjY2NzMxMzY2OTI0OTUxMywxLjAwMTY4NjcxOTA5OTIxNiw1LjgzMTI3MzE4MDU3ODA3MSwyMTQuNDI5NjY4NDYzMDgxNzMsNzUzLjI0NjkzODQ1NjgzOTEsMTE5MS42ODU3MTE3NDY3MDU1LDEzNTkuNjA0NzU3NTAzMTAzNywyNjcwLjI4MzM4NDE2NDIxOTYsOTAuMTU2Mzc3MDY1Mzk3NzMsNTcwLjAyMDM1OTgzMjM4MTksNzkwLjMzOTM2MTg1NDEwNTcsNDE2LjI3NDY4NjI1NjA2MDgsMjIyLjE2OTQ1MTc2MTU3NDU1LDg1LjE3MjAwODE3MjEzNTUsMTE2LjI5NTY3NjMxNTkxMDQsNDAuNTM1NzUxMjQwODEwMTM2LDc3Mi43Njk3MzgxMjc3NDE5LDI1My44MzA2NTk2MzQxNDQ5LDQ4NC43ODY5NDQ5ODkyODUxLDc4Ny45NTE1NTY0MTY4MjYzLDc2MC4zMTUyMDY5NzA1MTUsMTMzMi4wOTAzMzY1MDY2MTI0LDMwLjU1ODA5NDM0ODk0NzE5LDguNjMwMTg0MjA4NTgwNDE1CiszMixGcmkgMjUgRmViIDExLDAuODU3MTAxNDk4ODkyODYxOCwwLjI5MTMwNTc0MDQwMzk3MDgsMi42NjY3MzQwMzM2NTc2NTEzLDEuMDAxNjg3NzIwNzg2NDM2LDUuODMxMjc5MDExODU0MTY3LDIxNC40Mjk4ODI4OTI4NTc0NSw3NTMuMjQ3NjkxNzA0MTU0LDExOTEuNjg2OTAzNDMzMDEzLDEzNTkuNjA2MTE3MTA4NTQxLDI2NzAuMjg2MDU0NDQ4OTM4Niw5MC4xNTY0NjcyMjE4MTk4OCw1NzAuMDIwOTI5ODUzMDI2OCw3OTAuMzQwMTUyMTkzODYyOCw0MTYuMjc1MTAyNTMwOTU1MTcsMjIyLjE2OTY3MzkzMTEzNzM3LDg1LjE3MjA5MzM0NDE4NjI1LDExNi4yOTU3OTI2MTE2NDQ4NCw0MC41MzU3OTE3NzY1ODE2NCw3NzIuNzcwNTEwODk3ODY2NCwyNTMuODMwOTEzNDY0OTMxNDMsNDg0Ljc4NzQyOTc3NjQ3MjUsNzg3Ljk1MjM0NDM2ODc3NjYsNzYwLjMxNTk2NzI4NjEwMjEsMTMzMi4wOTE2Njg1OTc2MTUsMzAuNTU4MTI0OTA3MDU2ODEsOC42MzAxOTI4Mzg3Njg5MzgKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvRGVtb2dyYXBoaWNTRUlSRGlzZWFzZV9SS19SZWZlcmVuY2UvRmx1L21lbi9EaXNlYXNlIERlYXRoc18yLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvRGVtb2dyYXBoaWNTRUlSRGlzZWFzZV9SS19SZWZlcmVuY2UvRmx1L21lbi9EaXNlYXNlIERlYXRoc18yLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YWQxYTViCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9EZW1vZ3JhcGhpY1NFSVJEaXNlYXNlX1JLX1JlZmVyZW5jZS9GbHUvbWVuL0Rpc2Vhc2UgRGVhdGhzXzIuY3N2CkBAIC0wLDAgKzEsMzMgQEAKK2l0ZXJhdGlvbix0aW1lLEVHLUZSRy1HMjEwMDAxLEVHLUZSRy1HMjEwMDAyLEVHLUZSRy1HMjEwMDAzLEVHLUZSRy1HMjEwMDA0LEVHLUZSRy1HMjEwMDA1LEVHLUxPRS1HMjQwMDAxLEVHLUxPRS1HMjQwMDAyLEVHLUxPRS1HMjQwMDAzLEVHLUxPRS1HMjQwMDA0LEVHLUxPRS1HMjQwMDA1LEVHLUxPRS1HMjQwMDA2LEVHLUxPRS1HMjQwMDA3LEVHLUxPRS1HMjQwMDA4LEVHLUxPRS1HMjQwMDA5LEVHLVVQRS1HMjkwMDAxLEVHLVVQRS1HMjkwMDAyLEVHLVVQRS1HMjkwMDAzLEVHLVVQRS1HMjkwMDA0LEVHLVVQRS1HMjkwMDA1LEVHLVVQRS1HMjkwMDA2LEVHLVVQRS1HMjkwMDA3LEVHLVVQRS1HMjkwMDA4LEVHLVVSRy1HMzAwMDAxLEVHLVVSRy1HMzAwMDAyLEVHLVVSRy1HMzAwMDAzLEVHLVVSRy1HMzAwMDA0CisxLFR1ZSAyNSBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMixXZWQgMjYgSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzMsVGh1IDI3IEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCis0LEZyaSAyOCBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorNSxTYXQgMjkgSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzYsU3VuIDMwIEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCis3LE1vbiAzMSBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorOCxUdWUgMSBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorOSxXZWQgMiBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTAsVGh1IDMgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzExLEZyaSA0IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxMixTYXQgNSBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTMsU3VuIDYgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzE0LE1vbiA3IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxNSxUdWUgOCBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTYsV2VkIDkgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzE3LFRodSAxMCBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTgsRnJpIDExIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxOSxTYXQgMTIgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzIwLFN1biAxMyBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjEsTW9uIDE0IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyMixUdWUgMTUgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzIzLFdlZCAxNiBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjQsVGh1IDE3IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyNSxGcmkgMTggRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzI2LFNhdCAxOSBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjcsU3VuIDIwIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyOCxNb24gMjEgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzI5LFR1ZSAyMiBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMzAsV2VkIDIzIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCiszMSxUaHUgMjQgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzMyLEZyaSAyNSBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9EZW1vZ3JhcGhpY1NFSVJEaXNlYXNlX1JLX1JlZmVyZW5jZS9GbHUvbWVuL0VfMi5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0RlbW9ncmFwaGljU0VJUkRpc2Vhc2VfUktfUmVmZXJlbmNlL0ZsdS9tZW4vRV8yLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yOTU5NDA5Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9EZW1vZ3JhcGhpY1NFSVJEaXNlYXNlX1JLX1JlZmVyZW5jZS9GbHUvbWVuL0VfMi5jc3YKQEAgLTAsMCArMSwzMyBAQAoraXRlcmF0aW9uLHRpbWUsRUctRlJHLUcyMTAwMDEsRUctRlJHLUcyMTAwMDIsRUctRlJHLUcyMTAwMDMsRUctRlJHLUcyMTAwMDQsRUctRlJHLUcyMTAwMDUsRUctTE9FLUcyNDAwMDEsRUctTE9FLUcyNDAwMDIsRUctTE9FLUcyNDAwMDMsRUctTE9FLUcyNDAwMDQsRUctTE9FLUcyNDAwMDUsRUctTE9FLUcyNDAwMDYsRUctTE9FLUcyNDAwMDcsRUctTE9FLUcyNDAwMDgsRUctTE9FLUcyNDAwMDksRUctVVBFLUcyOTAwMDEsRUctVVBFLUcyOTAwMDIsRUctVVBFLUcyOTAwMDMsRUctVVBFLUcyOTAwMDQsRUctVVBFLUcyOTAwMDUsRUctVVBFLUcyOTAwMDYsRUctVVBFLUcyOTAwMDcsRUctVVBFLUcyOTAwMDgsRUctVVJHLUczMDAwMDEsRUctVVJHLUczMDAwMDIsRUctVVJHLUczMDAwMDMsRUctVVJHLUczMDAwMDQKKzEsVHVlIDI1IEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyLFdlZCAyNiBKYW4gMTEsMC4wNDg4NDY2ODg4NzgxMzA1OCwyLjA2OTM2NjY0NDIyMTM0NTRFLTQsMC4xMTIzNDA5OTk4MDU3ODg3NywwLjA0MjAzNTcwNDM5NTQ3NjgwNCwwLjI3NTQ1Mjc4NzIxNjY0NzUsMC4xMDc5OTA3ODU2MDkzMjM3NiwwLjc2MzkyNzY1OTIzODQ2ODEsMC41MDYxMTM2MTQ1NTA3MDg0LDAuNTk0NTE1MDkzMTIwNjIyMSwxMDM3LjkzNDcyNTM1MTQ4Miw4NDguNjc4NDE4MDc0NDU4NSwxMTI0Ljg0MTAzNTcxODM5ODksMC4wMDg5NjIwNDU1Mjg4NTE3NDUsMC4wMTc3NTM1ODA4NjU1OTgzODMsMC4xMDExMDQyMTAwMDIzNzYxNSwxMDgzLjY3NDg5MTY3OTY5MiwwLjA5OTI3NTY2ODQyMTkwMTg2LDEuMjM1MTQyMjU3OTE4ODE4MkUtNCw2LjU4MDQ2Mzc1NjYzOTc0N0UtNCwwLjA5NzM1ODE5MjEwNzQyMTUzLDEuMjkzODM4NzYxNDY0MTU2RS00LDEuMjcwODAxNDAzNzUwNzk3NkUtNCw3LjUyNjA3MjYzMzExNDk1RS00LDI5ODUwLjA3ODU5MjA0NjQ3Myw3MDYuMDcwNzA1NDAyMzE4OSwwLjAwMzc1NDIzNTc5NDE4OTgwNgorMyxUaHUgMjcgSmFuIDExLDEuMDQxNDA2MzQxNzQ0MjYyLDAuMDA0NDUwMDgyODUwNDY2NjE3LDIuMzk3MzEwNjM1NjU0MjMsMC44OTczMjU0ODQ1OTAyODgzLDUuODc4OTczNjQwODc1NDE3LDIuMzExNTQxNDg5MjA4OTI3NywxNi4zMjM0MDc0MTIxOTk2MiwxMC44MTUwMzA5MjYwODgyMTQsMTIuNzAyMzA5NTE4OTgyOTcsMTQ3My43MDc3ODIzNzMxNzA5LDExODYuMDAzNTIyODYzNDQ1NiwxNjE1LjQzNjkxNTM3NTc1NzMsMC4xOTMyMzk3MTMyNTg5NDk1NCwwLjM4Mjg3NDEzNTY5MDQxNDM0LDIuMTYxMzYwNTkxMjIwNTI4MywxNTQ5Ljc5ODI0MTIxNzQyNzksMi4xMjIxODEwMjUzMjYwMzIzLDAuMDAyNjUxOTUxNjQ2NjM5MTI0LDAuMDE0MTk1NzIzNDU2Mjc1ODgyLDIuMDgxMTU3MjQyMjQ3MjQyLDAuMDAyNzc5MTcxNDQwNzI3NjI2LDAuMDAyNzMzNDMyODM5ODc2OTc0NCwwLjAxNjMwMjc4OTg2NDIxODA3NywzOTU3Mi41MTUyNzk2NTM0NzUsOTc0Ljk3Mjk3MjA2MTUzMDMsMC4wODAwMzMwMzc0NTQ2NTE2NQorNCxGcmkgMjggSmFuIDExLDUuMjY0NjY2MjM5Mzg2MDk1LDAuMDIzMjczNTk2MjgxODMwNzUsMTIuMTcxOTkzMTc1Nzc2MDU0LDQuNTU1NjI1ODI0NjQwNDk1NSwyOS44NTgwNDYyMjgyMjkzMiwxMS44Njg3MjYzNTA5NDE5OCw4My4yMTA2MjM0MzA0MjcwNSw1NS4xNDI0NDcxMTg3MTEwMDQsNjQuNzI3MjU2MzUwMzQ1MTMsMjA1MC4wMDQ3MDcxODYwNDEsMTU3Ni41NzgwMjY0NzAzMDcxLDIzMTkuNTg2OTE2NTE5Mjk1LDEuMDIyMTYwMDE1NTUwNjg3MSwyLjAyNjgzOTc1MDM5OTAzODcsMTEuMDM4NTE1NzQ2ODc2MDM1LDIxOTkuNzM0NTIwNzAwMDA3NiwxMC44MzY0OTIyNjA4NTEzMjMsMC4wMTM3OTAzNDY4NDY4MTM3NCwwLjA3NTI1NDUyNzY4MjM5MjM0LDEwLjYyNjI2ODQ5MDczNzU0NiwwLjAxNDQ3ODU1OTE3NTc4MjIyNCwwLjAxNDMyNDA3MTk0OTg1MzE5OSwwLjA4NzkwMzM0MDI4MzY4NjI1LDQ0NDkwLjUzNTI2NDU4ODQ1LDEyNTAuNTg3OTkzNjYzNzg5OCwwLjQwNDU1Njk2Njc0ODA2NzIKKzUsU2F0IDI5IEphbiAxMSwxNS4wMTU5MjE2NDY4NzU2NTIsMC4wNzIxNTg2MjcyOTAyMDYxOCwzNS4xMjI5NTU2MzI1NDE2MSwxMy4xMjkwNzE5MzkxMTc5ODgsODYuMTk4NDc2MTIwNTIyODQsMzUuMjA0NjIwMjA2MDY3Njk1LDI0Mi4zNDIzNjY1MzYxMDMwNywxNjAuNjgzMTA0NDE5NDI0NTUsMTg4LjMyODcxMjYxNTE4MTgsMzMwMy42MTc3NTA0MzYxMiwyNDA5LjQ4ODY5OTU3ODMzNiwzODY1Ljc1NzU0NTY0OTk0NTgsMy4yNTQ1ODAxMzA0ODUxMDQsNi40NjUyMjE1NDEyODA3MzksMzIuMzAyNzI0NDA5MDQ3NDYsMzYyMi4wNTI0MDYxMzY1NjQsMzEuNjk3MTA1ODM3OTgyNzYsMC4wNDIxODc3NDU3MDk1MTQ5NCwwLjI0MDg1MTIwMjc3MTIxMzEsMzEuMDc2NjAzMzQ4MDMzMzksMC4wNDQ0OTIwNDg3MTg4OTUxNiwwLjA0NDY0NDk3Mjk1MzIxNzE3LDAuMjkyMTc5MzA2NjQwOTYxMyw1Mzc0NC43Mzk1MjAzMzM1MiwxODI4LjcyNjk1NDIzMDQ2MDMsMS4xNTM4MzI2NTIyMzM2MTg2Cis2LFN1biAzMCBKYW4gMTEsMzIuMDY2OTMyOTc4MjIyNDQsMC4xNzg2Mzc5NjQ5MjA0NTkzOSw3Ni43MzQ5MDMzODAyMzEwMiwyOC41OTY1NDEzNjc2NzkwNzcsMTg4LjQ1OTA0OTUyMTU3ODA3LDgwLjkxNTc2NTY3MDI4NDA2LDUzOC41NDE0Mzg0ODY2NDUxLDM1Ny40NDI0NjAzMzE5MjA5LDQxNy43NDI4MzY3MDIwNzgzLDU1NTAuNDA3NTE3NzU0MjEsMzg4Ny41MTIzODM0MTQ3MSw2NjQyLjg3MjIyMTgzMTA5Nyw4LjM5OTUwNzMzMDE2MzMzNSwxNi43MzIxMzU4OTM4MzE4MSw3Mi40MzIxMTE4MzQ2NDI1Nyw2MTczLjk3Njg2OTI0MzM0NDUsNzEuMDEzNjA4NzQxNTQ0MSwwLjEwMjE4Mjg2ODgwNTc0OTEyLDAuNjI2NjQ0MzA5NjYxOTIzOSw2OS41OTk3NzQ5NTM1OTYxNCwwLjEwODU3Njg1ODA0NDM2MjQ4LDAuMTExNTM3OTQ2NTc1MzMzMywwLjgwMjkyOTI2MjY3OTI5OCw3MTQ2My4zOTIzMTY4OTksMjg1My4yNjU1ODcyMTQ5MDI2LDIuNDY0MjQ0MTU2NzMzNTkzNQorNyxNb24gMzEgSmFuIDExLDU4LjUxODUyNzMwNDkxNTk5LDAuMzk4ODQ4NjM0MDYzNjIxMDMsMTQ1LjA3ODY4MTQzMzEwMTYsNTMuODExMjQyNjMzODgxNjUsMzU2LjYzNjY0NDE2MjUyOTYsMTY0LjcxMDM2Mzk4NzA2ODU1LDEwNDQuNTQzMzYwOTUwMTU3LDY5NC4zNzA2NTcxNjU5NzczLDgwOC4wMzE4MDYxMDc1NDEyLDkwMzYuMDgyNDQzNDg4MzI1LDYxMjEuODA1MzU5NzY2MzMsMTA5ODcuMjQ0ODk2MDU1NzYzLDE5LjY2NjgwNTYxMTY2MDUyNSwzOS4zMDA2MjYyNjIyMDA1NDUsMTQyLjM2ODE4Mjc4NzgxMzgsMTAxNTIuNjk3MDQ5MTczODE4LDEzOS40MDU4NTQ1NzQ4OTUzLDAuMjIyMTQ3MDgzODcyNTg5NjMsMS40ODEzMzQwMTUzNjQ3MzU2LDEzNi41NjA3NDQzMzcwNDM0LDAuMjM4MjkzMDA5NTQ5MzM3MTMsMC4yNTIwODM2MzkyNjkzNDY5NiwyLjAxMDIyMTM3MDI5OTg0MzcsOTg4MjAuMTU2ODgxMTQ3Niw0MzgzLjc2MDM5MTU5MDc5NCw0LjQ5ODA3OTA5ODA3MDMxMgorOCxUdWUgMSBGZWIgMTEsOTguMTExNTAyNzkwMDEwMDUsMC44Mzg0MjY5NDIwODEzNzU0LDI1NC41NDIyOTkwNjE3Njg4Niw5My45MjU2MTI1OTAyOTI1NCw2MjYuMjkxNDg0MjY5NjgzMSwzMTYuMDI3MDY2MzYwNTIzNSwxODkzLjQ4MDU3OTY5NTA2MzYsMTI2MS4yMjcxOTY3MjQwMDA2LDE0NTkuODE4NjI0NDcwMDkzLDE0MTM1LjA1ODU3NjA5OTQwOSw5MjUyLjQwMDI5OTI2MDI5MSwxNzQyOC45NjUyMzk0NTEwMjcsNDMuMjE0MTcxNDkwNzYzNTI2LDg2LjYxNjA3NTQxMTQ2MjgzLDI2Mi4zMjU5NzkwMTUyMjkxLDE2MDIyLjEyODg3MjI5NjEzNCwyNTYuNDgwNjU5MDMxODIwMDQsMC40NTQ3MjA5MTQ4MjQwOTc2LDMuMjg3MTk2Nzc2NTczMDIxMiwyNTEuMDg0MjkyMTQ2MjE0MSwwLjQ5MjYyMjI5Njg4ODkyMjgsMC41Mzc0OTYwNTE4ODY5MjYsNC42OTI1MjcwMzMxNDg0MSwxMzYxNTIuNTYzNjU2MzM4MzUsNjQ4MC4wMTk2MzAzMjQwNDQsNy41NDQyNzM5MTYzMjk5MTEKKzksV2VkIDIgRmViIDExLDE1Ny4xMTI0NjYyNjg5Nzc5OCwxLjY3NzQyMzc5MTQxMTI5MDQsNDI4LjQwNTQ1ODUxMDgxMDksMTU3LjUxNDgzNzU5OTc1MjA3LDEwNTQuNjg5MTc0Njk5NjMzNyw1ODUuMjY3NzgzMzAzODE1NSwzMzA4LjAzMzAyODAxNzM1MywyMjA4LjUwMzM3NzA5MjY5NCwyNTQxLjE3Njg1OTQ0MTg1OCwyMTQ3NC44NzAxMDk4MjEzMTcsMTM1MDUuNzkzNjc0NTY1Mjk3LDI2ODQ3LjE0ODk5Mjg3OTUzOCw4OS43OTY4NDY5MDY0MjY0LDE4MC40ODQwNzE0MTM1MzY3LDQ2Ni40NjkwMDYwNDc0Mzc0LDI0NTU3LjQ0MTUyNDU1NTI1LDQ1NS4zNTQwODMyNjYxODkxNSwwLjg4Nzk3MDE2OTkzMzI0MjYsNi44OTk3Mjg1MTMzMDY5MzEsNDQ1LjQ0NDUxODgzNDEwMzUsMC45NzEyNTEyMjEyNjQ3NzM4LDEuMDkyODIxNjMyNzUwNDQsMTAuMjgyOTEwNTQ4NjIzNTksMTg0MDQ3LjkyMjczMzA3NzAyLDkyNDEuMTEyNTI3MDA5NDE4LDEyLjA4NTM4MzEzODUwNTcxNAorMTAsVGh1IDMgRmViIDExLDI0NC43MDcyMTg5NzE3MTk3MywzLjIwNjk2MjE1MzU0MTU4MzMsNzAwLjE0Mzg5MjU1MDMyNDcsMjU3LjQ2NDg5Nzk0MjUxNjcsMTcyMy40OTY3NTE4NDIyODYxLDEwNTMuNDMzNTM3NjU1MDM1Myw1NjMwLjM3NzU5NTA4MTMxNiwzNzY4LjQ0ODM5MzE3OTI5NCw0MzA5LjYxODY4NjIzMDQzNCwzMTk2OC40OTQ3MTEyMzg1NTYsMTkxNjkuOTc3MzU3NDkxMTgsNDA1MTIuNTg4NzM2ODk3MjQsMTc3LjM1MjgxMzA0NzgzMzE3LDM1Ny40MjA0NDI5ODMxODIzLDgwOC4zNTAwMDk3NjMzNjI0LDM2ODg5LjI0ODgwMzYyMzMxLDc4Ny44ODkwODU2MzQwMjE3LDEuNjYwNjkxNjQ3NjI3NDg4OSwxMy43NzQyNjYwODA1ODEzNzMsNzcwLjEwNTk1NzgxMDM0NTQsMS44MzM1Mzg2MDQxODI4NTcyLDIuMTI4MTUyOTQwMzY5NywyMS4zMjY5MTkxNjIxNzA5MiwyNDMyMTguMDQzNzg4MDc2MywxMjc4NS41ODI1ODI0OTA0MDYsMTguODIzNTA5Njc5MjUxOTM0CisxMSxGcmkgNCBGZWIgMTEsMzczLjU3NTM3NTg0OTkzNzUzLDUuOTAwMjE2MjYwMTcxOTU0NiwxMTE1LjI3ODAyODg2MzIzMiw0MTIuNTM0NDQ5MzE0Njk4NCwyNzQyLjEyNDY3NzkzNzgzMTYsMTg1MC4zMjk5NzU1MjMwMDczLDkzNzYuNjAxMzg4ODMyNjYzLDYyOTMuNjA1MjE5NDM3NTE2LDcxNTEuOTcyMzMzMDM3NTc1NSw0NjgyMy44NjM1Mjc2NDAwMywyNjUyMC4yNDk3MTk0NzU5OSw2MDEwNS4wOTUzNjg0Mzc4NTUsMzM1LjkyOTI5OTUwNzAzMzIsNjc4Ljg2NjczMTQ1MzAwMDksMTM3MS4wOTE0ODIxNDU5MDI1LDU0NTMwLjUyODI2MzMwNjMyLDEzMzQuNTIyOTU4NTc5Nzk1NiwyLjk5MjIzNjg0NzE3OTU1MiwyNi40MDI2MDYzNjg3MjU4OSwxMzAzLjE0NDY0MzQ3ODc5MTMsMy4zMzU0NDA0MTY1NzA4NTE4LDMuOTk5NDE5MTg4MjY2NjM3NCw0Mi4zNjYxMzg2MDg3NDM5MiwzMTM2ODQuMTg2ODAxODA3MywxNzE5Ny4xMTY5MDk2NDY4NzMsMjguNzEyMzEzODk5NDAzNzgKKzEyLFNhdCA1IEZlYiAxMSw1NTkuMzU4NTQwODU4OTYzNSwxMC40OTcwNTg1Njk0MzIzNTEsMTcyOC4yNDg5NDUxNDMyODUzLDY0OC4wMDYwNTYxODkxOTUsNDIzNy40OTY2MjU3NTU5NzQ1LDMxNzQuNjYyMjgyOTg3ODc0MywxNTI3Ni43NjcyNjE3MjU2OTYsMTAyODcuNTc1OTAwMDU0ODEzLDExNjEyLjU5NjM1NjE0MDU4Miw2NzM2OS45NTk4MDA1MTQ5MiwzNTYyOC4zNzE4Mzg3NjE1OCw4NzQ3OC4wMzkyOTI3OTU4NSw2MTMuNzgwNjE3NjU3NzkzOSwxMjQ0LjAwOTM0ODk2NjM3NTIsMjI3Ny4yMTIzOTc5MzQzMDM3LDc5MTkyLjg3Mjk2NzE4MDIxLDIyMTMuODA5MjgzMjA3NTY1NCw1LjIxNTU2NTI2NDIwNjUyMiw0OC44ODk4MDczOTIyNzM2MjQsMjE1OS4xNzc0MzcwODg1MDg3LDUuODcyNTkyNzQ3MDQxMDc5LDcuMjg4NzEyOTQ2NzIzMzgzLDgxLjE3OTE0MzM2ODA5MDEsMzkyOTY5LjY5NDYyMTU3MDYsMjI0MDUuMjgzNDQ1MTA0MjIsNDIuODg2ODMxNTMyMDAxNTcKKzEzLFN1biA2IEZlYiAxMSw4MjEuMjAzMDAwNzIzNzk5LDE4LjE2NTE4NDcwOTc3NzIzLDI1OTkuNTg1NDA3MzM0NDIsOTk4LjAzOTIwNjA0NjUwODUsNjM0Mi40MTY2OTM2NzY5OTgsNTMzMi45MzI1NTAwOTUxNjEsMjQzNjMuODgwNTgwMjk3NTE1LDE2NDcyLjQwMTM5NTM1ODExMiwxODQ1Ny42NTE2MDg5MTYwNDMsOTQ5MzUuMTYwMTc2NzgzNjgsNDYyMTcuNDIxMDIxMTU3NTgsMTI0NDYyLjA2MTc1MDc4MzEsMTA4OC4zNzczNjY0NDA0NTQxLDIyMTMuMDI0ODcyMTE5OTY5NiwzNzA5LjE3ODE4MDA4ODkyNywxMTI2NjYuNjE0OTY5ODgxNzksMzYwMi42MDM1ODYyNzAyNjQsOC44NDI1NjY1NDIwNDQ3OTYsODguMDIwNDE2ODMwNTg1MjIsMzUwOC4xOTEzNjU3NjcxNzcsMTAuMDY0MTcyMzQ4ODU2OTAyLDEyLjk1NjMzODM2MDc0MzcyMiwxNTEuMDUyNzQ0MTE1NDEwNCw0NzUzMDQuNjIzMjA5OTUyOTYsMjgxMTQuNjQ0OTUxMTQ3Mjk3LDYyLjY0OTY2NjE5ODczMTg4NgorMTQsTW9uIDcgRmViIDExLDExODEuOTc4Njk3NzExNzAwMywzMC43NTY2ODg3MDM4ODIyMywzNzg2LjI0OTMzMTIzMjcwMDYsMTUwOC4xMjIyNTY2MDU0MzE0LDkxNjQuNDU2NjE5MTg1NTc2LDg3OTguMTk4Mzk2NjYzMjQyLDM4MDc1Ljg0OTcyMzUyODAzLDI1ODcyLjI4NDQ1MTg1MTcsMjg3NDcuMzI2MjMxMzI2OTczLDEzMDU3OC40Nzc5NjM0MzYyNiw1NzUyNC4xMTk2NTYxNjEwOSwxNzI0MjIuNjE3NjY1NTA0MzQsMTg4My41NTM1MDgzMzM3MzEsMzg0My44NTI4Nzc5MDk5ODgsNTkzOS4xMDM2NDg5MDA3NCwxNTY1MjAuOTU0ODI3ODI3NDMsNTc2NS43ODkyMjcxOTM2NTQsMTQuNjY2MDUwODQ3Njk3MTU3LDE1NS4wNDQwMzY1NDg0MzYyNSw1NjAyLjUyODg2NzEzMjg0OCwxNi44ODcxOTUzMDAyMDEwNjQsMjIuNTk4ODkxNzQ2NDc3NzksMjc0LjY4Njk1NjY1MTM3MzQ2LDU1MTU2MC41NDE1MDI1MTM3LDMzNzY3LjI0NjI5NjM3ODg3LDg5LjM5NzYzMzgxODYyNjMKKzE1LFR1ZSA4IEZlYiAxMSwxNjY0LjI5NzM1MzA1ODAyMjMsNTEuMDI1NzYwMjM0MDM0MTksNTMwOS4wMjgwNjE1MjE3NTgsMjIzMC45NDg3NTIxOTI5NTk1LDEyNjk5LjQyNTc3MjY0MDM4OCwxNDI0Ni40NTQyMDAwOTE5NzIsNTgxNzAuNjM4MDAzNTc0OTI0LDM5NzgxLjI5MDE1NTYzODQ3LDQzNzY1Ljg4MDI0OTE1MzMxLDE3NDI5NS44ODM2MjQ3MzM1LDY4MTkwLjIxNTIyMzYwNTUzLDIzMTA0MC42MTA1OTYxMjEyNiwzMTgyLjk5MTY1ODUzMjEzNCw2NTIzLjM1NTk2NDkwMTU3MSw5MzQwLjExNDM0MzQ0MTg3MiwyMTExMjcuODM2OTcyOTc5NzcsOTA3MC4wMDg2MTM2MDg0ODMsMjMuODM2MDM1MDg5NDg0MTU2LDI2Ny41NzMxOTgxOTU2MzQ2LDg3ODYuMDUwNTY2MTEyNzYzLDI3Ljc5MTkzNjA5NTA4NzI5NCwzOC43MzMxODIxMDQ3ODQyOSw0ODguNzQ3NzMyMzM5MTgwNSw2MTAxNjkuNTgxNzIwNDM1OCwzODU2MC4wNzY4NTAyMjQ0NiwxMjQuMjA5MzExMDQ3Mjk1OAorMTYsV2VkIDkgRmViIDExLDIyOTAuMTM4NTU2NzE3MTM3LDgzLjE1NDcwNTM0NzY5MSw3MTI2LjMzODU4NDUzMDYwNzUsMzIyNi4wNjg0OTM2MDQzNzYsMTY3NjguMTQ4MjA2Mjg0MjksMjI2NTIuOTM5NjY4NjU3MTE2LDg2NzEzLjc2NTMxNDA3MjIsNTk3OTguNTQwODc5OTI0MzQ1LDY1MDAyLjkzNTI4MDI2MTk3LDIyNDU5NS4xODA5MTIzMDUxNiw3NjU3OS44NDUyNDU4NzQyOCwyOTc1ODQuNzkzMjA4NTg5MSw1MjU5LjQwMDE4MzMzOTk2LDEwODM0LjY4NDE2MzczNDc0NiwxNDQzMC4zMzIzMjI5NjIzOSwyNzUwNzMuNTU1MTg3NTk3ODcsMTQwMzMuMDAxNzY4NTg3MzU3LDM4LjA2ODE2NjAwOTk2NTA0LDQ1My43MzUyMTYyNzgwMDk0LDEzNTMyLjkzMDMzNzkzNTk4OCw0NC45OTM0Mjg3MTgwODk0NTQsNjUuNDI3MTE1MTk0NzcxNCw4NTMuMzQ5NDAyMzUwNjc5Miw2NDEwNDAuNDA1NjU5MDA1Niw0MTY5MC42NTcxNTA3MTc3NiwxNjcuNzI1OTY4MTYwMzI1OAorMTcsVGh1IDEwIEZlYiAxMSwzMDc1LjAzNzAzNjU4NjU2MywxMzMuMjUzODYzNDg2NzIyODgsOTA5My44ODIyMzI3NTk5MjgsNDU0OC4wNjkyODk5Mjc4MzIsMjA5NDIuMjA0MTQwNjU4NTUyLDM1MzM0LjQ3OTY2ODkxMDI4LDEyNTY1My42MzM3NDE3ODAzNyw4NzU5OC4wMjA1MTg5MzMyNSw5MzgyMi45NjQ0NTgxMjU5MywyNzc3NTIuNDI1ODE2ODIxMzQsODEyMTAuODM2NTg3Mjg1NCwzNjU4ODguMzg4NDI2ODY2MDMsODQ5MC44MDk3NzQ4Njk5NTMsMTc2MDUuODY2MTE3Mjk2MDQsMjE4NzkuMDE0Nzg4MTU0NzU2LDM0NDA3OC41MzQ2NjUxMzg0NiwyMTM0NC44OTYyNTc2OTU0ODcsNTkuODM3NTcxNTM3MDMzNiw3NTcuMTQyMTU2MDgyNTQ3NywyMDQ0OS43NzA1Njg5MjA4OCw3MS43Nzg3Nzk2Njk1OTYwMywxMDkuMTAzMjI2ODQ5NzU5MjIsMTQ2NC4wNzA5NjM5NTY0MzE4LDYzODgwMy41NTM0NTcwNzcxLDQyNjA1Ljc3MDczNTMyNDcsMjE5LjY5NTM3NTIxNDUzMTg1CisxOCxGcmkgMTEgRmViIDExLDQwMjMuMTI5MDk3OTg2NzM3LDIxMC4wNjU0MjQ1MTIxMDM1NiwxMDk1Ni4zMzkzMzY3MjE4MDMsNjIzMS4wOTgxNDQzNTMyNzQsMjQ1NzcuMzk2Mzc4MDc4NDcyLDUzOTYwLjQ1NTE3MDk5OTk0LDE3NjExMC4wNjA1MDI3MjIyNSwxMjQ0OTguNzY3Mjg3NDQ5OTcsMTMwOTIwLjI3MTcwOTA0NTk2LDMyNzc5Ni40ODIyNjY3NTgwNCw4MTMwMy4xODEzMzA3MzUwNyw0MjY2NzMuNjg4MjcxMTc5OTcsMTMzNjQuMDQ3MjMxMzYwNDE5LDI3OTQ1LjQ4MjQ3MDYzMTYzLDMyNDk2LjE4MTYzODg5MDcyLDQxMDczOC4zNjcxNDQzNTM0NSwzMTg5MC4xMjIxNDA3MzEwNDQsOTIuNjgxNTc1MjI1NzA5MywxMjQ0LjU0MzEzMDg0Njg3MjEsMzAyNjEuMjE5MjQzNDQwMjc1LDExMi45OTY4ODcxNDUwNjMyMywxNzkuODQ1Nzg2NzQ4MjQ2NTIsMjQ3MC4yNTkzMzg0NzU4NjUsNjA0ODc3LjA0NTI4MDUyNiw0MTIxNC4xMTcwNDM5MTk3NDUsMjc4LjY2MjE0OTIyMjU5NjMKKzE5LFNhdCAxMiBGZWIgMTEsNTEyMi4zMTk4NTcyNzQwNzksMzI1Ljc2NTM2NTIyMTM2OTYsMTIzOTMuNTc5OTcwNDEyMDI3LDgyNjguODczMzIxMDYwOTQ0LDI2OTg1Ljc0MDIwMjI3ODA3Myw4MDQ0MC4wNDQyNjI1MjEwNCwyMzcyODcuNzU2NDA3MjQ2MDIsMTcwNzE0Ljg1Njc0NTk3NjE0LDE3NTUwNS4xNjgyNjYwMzAxMiwzNjc0NjYuNTI0Mjk3NTU4NzYsNzcwNTkuMTgwODU3MjgwNDMsNDY5NjA5LjE2Nzk2MTQ4MjcsMjA0MzIuOTA3NjYzMjQ0MTE0LDQzMjA0LjY4NzcyODMxNDcwNCw0NzE2NC4xMDUyMzQxMjk2OCw0NjU1MTcuNDE3NTUxNDczOCw0Njc0MS42MjE1MjgyNTk1MiwxNDEuNjA1NzQ0OTM0MDU1NDUsMjAxNi40ODkwMDIxOTU5MDE4LDQzNzQxLjM5NDQ0NzI1NTMxLDE3NS43NTYyODUzMTI2NTYwOCwyOTMuMzgwODE5NzAwODI3NDMsNDEwMC4xNTMxMjU5MjM1OTMsNTQ2NjE3LjM0MjQ1NDI3MzQsMzc4OTguNDQyMDIwNTA4ODQ2LDM0MS42NDUzNTQxNzg3NjM2CisyMCxTdW4gMTMgRmViIDExLDYzNDIuNTM0ODkxMjMxNjk1LDQ5Ni45NDc0MzEwOTM4NDksMTMxMjUuNjIzMDIwNzExMDUzLDEwNTk4LjE5NTc5MTAxNzEzMSwyNzY5Ny42MjY0NDM4NTkyMjYsMTE2NjE0LjUyMzUxODkyMzY0LDMwNTM1MC45ODQ2MDM1NTUzLDIyNDQxOS43MzU0Mjk5NzQ4NSwyMjQ0OTcuMTgxMzk2MTE1OTUsMzkwMjA0Ljc1MzIwMDcwNDcsNjk1MTYuODI0NTY3MzE4OTEsNDg2Nzc0LjA3NDM4NjUzMTksMzAyMDAuNDUyOTc5NTY2NDM1LDY0ODAyLjkwODQ1MTM4ODE1LDY2Njg5LjQwNDg3NTA0NDQ1LDQ5OTI2Ny4wMTI5NDI4MTA0LDY3MTIwLjY2NDM3NjEzNjg4LDIxMy43MDk0MzcwMjA3NDA2NCwzMjIzLjExNjM3NTA5MTU2Myw2MTU3NC4yMjEzNjkyODU3MiwyNzAuNTMxMzg4NDEwNDY1NCw0NzQuMjY5MDg3NjMxNjQzNiw2Njk2LjE4ODI0NzYyMzM1Nyw0NzQzMTEuNDk1MTMyNDE3NCwzMzMzNS44MzYwNTgwNDMzNiw0MDMuODgyNTE4MTE2MDU2CisyMSxNb24gMTQgRmViIDExLDc2MzMuODAxNDc5MDY1NzkyLDc0NC41OTEwMDIwODc5NDc1LDEzMDIyLjQwMzcwMzc0MTc1LDEzMDgzLjQyNzQ4NjUyMjQ2NSwyNjY1MC44OTMyMjI3MTYxODYsMTYzNDM4LjIxMTY1OTA3MDk1LDM3MjU5Ny4zMDY5MTg0MjI0NiwyODA3MzMuOTc1MjY4NjU5MzYsMjcyMDE4LjE4Mzk2MDczNTE2LDM5MjI3My40NDI3NTM5NzcsNjAxMDQuOTg2MzIxNjkyNjI0LDQ3NTYyNC4yMTAwOTY2NjM4NSw0MjgzMy42MjgzNTc1MDU4NCw5MzY4OS4yMzM5NDQ2MzUxNyw5MTQyNC40NjEzMzg4ODA2NSw1MDYxOTkuNzA4NTQ1MzI5Niw5NDE2NS41NDAxMzQ3NDkzOCwzMTguNjcyNDg2OTA5ODA3MSw1MDc4LjA3MTAxMjAzNDMyMyw4NDAxMC43NTM5NDA4ODU2Miw0MTIuMjU1ODE5MjY3NTAxMDcsNzU5LjYyNzcyMTA2MzIwMSwxMDc0MS45MjA0MDY0NjkwNDYsMzk3OTI4LjM0Nzk0MjcyNDEsMjgyNTMuMjQ5MjUyNTI0Mjc0LDQ1OC41NTgzNDczMjkyMzg5CisyMixUdWUgMTUgRmViIDExLDg5NDEuMTg1ODM1OTczNjc0LDEwOTYuMzMwODU4MTAwNTM3OSwxMjE1OS4yNTE0Mjk3MzQ0MzUsMTU1NDMuODA2NzM5NDI1OTUyLDI0MTk3LjAzMTQ1MzQyNDA0NiwyMjAzMjcuOTYxMDc5ODUzMTgsNDI4OTM5LjU0MDcyNjU0NzksMzMyMjQ0LjAzNjc1MjU3MTgsMzEwNjQxLjA4ODE4NDA5NDMsMzc0MjQ5LjY2NDQwMDI2MzQsNTAxNzYuNTUxMDY3NjA0ODM2LDQzOTk3MC42MzA0NzUwMTc2LDU3OTE4LjM2MDkwOTU5NzExLDEyOTgyOS41NTEwOTYxNjA4NSwxMjEwMTEuNTQ2NzE4NTk0MjEsNDg2MjYxLjcwNjYxOTAzNzY2LDEyODg0NC40MzUwODU5NTU4LDQ3MC43NjIxMjAwMDczOTM3LDc4OTkuNjU2MzU0ODc2NzU0LDExMDY1MS4yMzQyOTM3NTYzNCw2MjMuODAyOTE5NDc2MjcyOCwxMjA4LjY1NzQ4MzAzOTgwOCwxNjkzOC4zNTg4NTMyNTM0MTYsMzI0OTQ3LjUxNTI4NTU2OTMsMjMyMzguOTExMDU2NzU5MDc2LDQ5OC4wODkxNTA2NTE2NzUzNworMjMsV2VkIDE2IEZlYiAxMSwxMDE5OC4yMzM2NzQwMTg4NTgsMTU4MS4zMDQ1MTMyNjc1ODY4LDEwNzYyLjExOTM1Mzc1Mjg1NCwxNzc0Ny44MDU5NDA3MTM1NDgsMjA5MDcuMzI1MzUyNDY2NTA1LDI4MzMwNC41NDI4NjM2NzIzNyw0NjM4MzYuMzcxMTE3MTQzOCwzNjk4MzYuODAwOTU1NzI0MywzMzI5ODIuNjQyMTA4ODM1MDUsMzQwMzQzLjA1MzE4NTA1MjA2LDQwNzQzLjYwMjYzMjM4NTkzLDM4NzgxNC40NjI1NjUzODU5LDczOTUzLjMyODkxMTUwNDE4LDE3MDg0Ni41MjQ2MjY5OTU4MiwxNTM0ODMuMjAzODU2NjYxOCw0NDQ1MzYuOTA1NjU1NjU4MSwxNzEwMDcuMTcyMDQyOTUzMjYsNjg4LjU1MjQzNjkwNDg2ODIsMTIxMDMuMTY4MjMzMzg1MDUzLDEzOTY2Ni41ODU2NDEwOTc1LDkzNi42NjA3MzkwODY2MDg1LDE5MDYuOTcxNTM4OTQ2NTk1NSwyNjE1MC41NTY4NzQ1NzkxLDI1OTkzMS40OTQwNDE5ODczMiwxODY3OC40NTkzMDgyMjM5NSw1MTUuMjU4NTIxNzk3NjEzCisyNCxUaHUgMTcgRmViIDExLDExMzQ5LjIxMzQxNjcxODM2MywyMjMyLjMzNTA0NTY0ODE0LDkxMTAuMjc0NTkzMjAxMTE4LDE5NDg0LjA1MjM1MjM4NTQzLDE3MzUzLjI2NDIyNzMyNDkxNSwzNDUyODIuODk5NTkxMTIzODYsNDcxMDMxLjYyMzE2Nzk5MDM2LDM4NjUwMS4yMjk4OTc2MjE2LDMzNTExMS40OTAzMzIxMDc0LDI5Njg1NC44MDE2MzE5NzQ5MywzMjM4OC42OTgyNjYxMTk3MTgsMzI4MzA0LjQ3NzkyMzE5OTMsODg1ODQuODIyODI2NjExNCwyMTIwMjcuODgxODMxNjQ5MDIsMTg1MzkzLjY1MzU4NDM0NzkyLDM4OTI3OS4yODc2Mjg3MjM3LDIxOTE3Ni42MTA5MTE0NzgyMyw5OTkuMjY0Mjc0ODcwODQ4NywxODI2OS42NzQ1MTc0ODYyMywxNjc5NjAuNDUzOTMxNzI2NzUsMTM5OC44NDI1MTg1MDkxNjk2LDI5ODcuOTE2MjYzNDk5ODk0MywzOTQ4Ny41NzE4MDM4OTgwOCwyMDQ3NTYuMTk4ODUyNTA1NjgsMTQ3NTUuNTMxMDgzNzQ5NTU4LDUwNi42NzcyMDQwODgwNjcKKzI1LEZyaSAxOCBGZWIgMTEsMTIzNDAuNjI4NDc0NTY1ODksMzA3Ny4zMDAxODUzMTE2Mzg0LDc0NDMuMDU1NTE2OTgwNzY4LDIwNTc4LjEzMzAzNjcyNzUwNCwxMzk2MC40NTU1Mzc4MjgzNTUsMzk2NDk0Ljk3NTM2NTM0OTksNDUwNDU3LjU3NjY0MDcwNDM2LDM3OTYzNC4zMjAzNDQzNzIxLDMxNzY5MC4xNDk4OTc5NTIzLDI1MDAzNi42ODE3ODA1NTY1NywyNTM0Ny44MTE5MTAwMDcwOCwyNjkwNjQuMDU2NjcwOTY4NTQsOTkwNDIuMzU0MzgxNTY1NTcsMjQ2NTY2LjYyNTU5NjI1Njc1LDIxMTg5Ni4zMzM2NjE3OTgyLDMyODkxOS4xNTc5MDE1MjQ5LDI2OTU3NC45Mjk3OTA4MjY2LDE0NDAuMzE1Mjg5MDc2MTQ5NCwyNzEzNC44MTc0MDE0NDAyNSwxOTEyNjguNjM0MTU5MDM1NTIsMjA3OS44NDY2MzYzNDQyNTUzLDQ2NDguMjc5NTMzMTg0MTU3LDU4MTUyLjA2MTI4NzczMzksMTU5NTQ4Ljg3NjgyNDU5MTUsMTE1MTMuMDgwODk5OTMzNjg0LDQ3My45MTM2MTY2MjA0Njk2CisyNixTYXQgMTkgRmViIDExLDEzMTIzLjQwOTE5NzQyOTc5LDQxMzIuMzA1ODUxMTgzMTAwNSw1OTE4LjI5MzQzMTY1MTQsMjA5MzEuNzMzMzA4NDQ5OTQsMTA5NzIuMDI2OTUyODE0OTA3LDQyNzQ1Ny44NTM2MjgyMDYyNCw0MDgwMjAuMTIyMDUzNDIyNSwzNTIwNjEuMDI3MTQ5NjYwOCwyODU0ODIuMzQ1MjYxNDA3NCwyMDQ3NTguOTE1ODU5MDcxNSwxOTYyMC44NzM2NDc2NzcyMiwyMTUwNzIuMzgzNDk1NDYwMTUsMTAzMjEzLjg4MTcyOTcxMTU3LDI2NzY5OS4zNzY5MTMwODY3LDIyODEwOS40MjI3NzYzMTM2LDI3MDExNS44NzkxNjgwNzMsMzE2MTMwLjc0NjA4ODE2NjQsMjA2My43OTkzMDQxNTM2ODMsMzk1ODguNTQyNzczOTE3NjQ1LDIwNTM2Mi45NzE0MzQ1MDAzLDMwODEuNDExNzUwMTU0MzU1LDcxNzcuMTU2MzA4NjUwNDI5LDgzMjQ4LjI2MjM3NTEwOTcxLDEyMzQyNS4yMzExOTgwNjYzNyw4OTA4LjE0ODU4MDQyMjQyNSw0MjMuMTMyNzU5ODE3NTQ0NgorMjcsU3VuIDIwIEZlYiAxMSwxMzY1NC40ODU4NDEyODgyNyw1MzkzLjExMDgzODQ0OTI3Niw0NjEzLjE1NjYzMDQ1OTY1NCwyMDU0MS45OTUzMzc2MjUwODUsODQ4MC4yODE5MDYzNzI2MTUsNDMyNTQzLjE4MzEwODQ5MzQ1LDM1Mjc2My4yODI2MzE0MTU2NCwzMTA0MzUuMzk4MDIzMzEyNSwyNDUxMzMuNTA5ODUwMzUxNDYsMTY0MDUwLjMxNzk2ODU3OTE4LDE1MDc4LjQwMjI0MzA5MzY3NywxNjg3NTguNjAzOTY3ODA5OSwxMDA1MzQuOTE1MDYxOTE1OSwyNzEzODUuMDkyMTQ1MzMzOSwyMzA5MjQuMjI5MDM3MDI3MTQsMjE3MDQyLjk2Njc3NDAyMDk2LDM1MTUwOC4wOTczODAzNTA3NSwyOTQxLjgxMDIzNDI4NDQ4Miw1NjYxNS45OTIxMDUwMDkxMTQsMjA3NTk2LjUwMjM4OTY2MDIsNDU1MS44OTM1NTg2ODU1NDIsMTA5OTEuMDk2OTk4NDU2OTM4LDExNTM5NS43MjM1NjI4NDMzNiw5NTA2NC4xNjY3MjgzMDg0MSw2ODU2Ljg4NTI2MjA0ODU4MywzNjIuNzE1MzE5NzM0Mjk2OQorMjgsTW9uIDIxIEZlYiAxMSwxMzkwMy45Nzg1MTU0NTc2MDYsNjgyOS4zOTE3MzU0NzE1NDYsMzU0NS45MTM5MTIyNTI4MDM2LDE5NTAwLjQ0NzU1MTQ1NzY5LDY0ODAuMDU4MjUwMjIxODE5LDQxMjE2OC4xMzQ4OTk2NjY4LDI5MzU4Mi4wMDg5MjkwOTU1LDI2MjQ1Mi4xNjk0MjkwNjM4LDIwMjg2MS40NzkyODg0MjUsMTI5Mjk0LjQzMTEzNDM3NzgsMTE1MzguMjUxODI3MDEyMTQ3LDEzMDY4Ni4xMzE2MzYwMjY4NCw5MjEyMi41NTYxOTE0MDI2NiwyNTc5NDIuNzk2NjQ1OTIyMTIsMjIwMjg3LjMwNDI4MzE1ODksMTcxNjI3LjM4MTIxNjYzNDQsMzY5MzAxLjk5MjIxNDEyNDEsNDE3My4yNTY4Njk1ODY0OTYsNzkxNTQuNTkwMTcyNjgwNTMsMTk3OTc1LjIyMzkzMzg1NzI4LDY3MDYuMzE4NDMyNTQ3MzAyLDE2Njc1LjQ5MDA5NDExODk2MywxNTQxNDYuNzUzOTE3OTc5OCw3MzA2NC44NDk0NTk4NDIyNyw1MjYzLjc3NTI5NTI4OTM2OSwzMDAuNTczMTIwNjYyNjUyMzQKKzI5LFR1ZSAyMiBGZWIgMTEsMTM4NjUuNTM4MzIzOTgxMzU4LDgzODUuMzY2NzYwMzE4MTksMjcwMC40NDQ2NzEyNzQ2OTI2LDE3OTY4LjUxNjgwMzA3MDQyMyw0OTE1Ljk1NDMyNDQ0MDY5NiwzNzIxNzUuNzk4MTM4ODAxMSwyMzcxMjUuODUyOTcwNjUzNTYsMjE0NTU1LjU1Njg1MzA0NjU4LDE2MzEyNC42ODk3NjgxMTE2NSwxMDA3MDQuNDE2NDAzOTYzMSw4ODEyLjA2MTY2Njc1OTc5OSwxMDAzMTIuNDIzMzgxMzE5NTUsODAxMjAuMTAzOTQ2OTMxMDYsMjMxNTM5LjMyODQzNTYwNDA1LDE5OTA3NS4wNDY2MDY3MDcxLDEzNDE5OS43MTA3MTgzOTQ3OCwzNjY0NTMuNDg5NjIxMzc3NjcsNTg5Mi4wNzM5OTU1MTIwOTYsMTA3ODI1LjQ5NDc3NDQ0OTI3LDE3OTAzMS41MjIyMDkxMjQ0LDk4NTMuMzkxNDU0MDA1ODA3LDI1MDI1LjU5ODA1MDkxNzIzNywxOTcyOTkuNDUyNTg5NDIwMDgsNTYxMzUuMDMxODk5NDQ3Mjg0LDQwMzcuNzk1MjY5Nzg2OCwyNDIuNDcxOTAwNTkyNDExMzIKKzMwLFdlZCAyMyBGZWIgMTEsMTM1NjMuMjQzNjc4NDg0ODg3LDk5ODcuMjE2NDAzNzM0MDYsMjA0NS4xMTg0NTA2NDA4MTcsMTYxMzYuOTQwMDI5ODI2NzkyLDM3MTQuNTAxOTMxMTQ5OTI4NiwzMjEwNDYuNjQ2MzUxNDY0OSwxODcyNDYuOTEyMzQwNzU3ODQsMTcwOTM3LjYxMTUwMjMxMTcsMTI4Mzc5Ljg3NjE0NzUwNjI2LDc3ODA2LjkyNTczMTAzNzAyLDY3MjguOTA1MDYzNjk3OTMxLDc2NTgxLjc0Mjk3OTcxNjQxLDY2Nzg2LjE5MDQwNTk1MTA0LDE5ODA4NS44NjIzNDA3NDQ5NiwxNzE3MjIuNDc3MDc3MDI5NzYsMTA0MTYwLjk2ODIwMDk4ODgsMzQ0NDEwLjE3OTI0OTMyMjksODI3Ni4wODg0MDc4MDk2MDgsMTQyNTA5LjMxNDM4ODY5NjY2LDE1NDY0Ni4wNjE4MjY0NDQyMywxNDQyOS44ODkxMDU5NjM1MTMsMzcwNzEuMDUyNDE3MjQwMDQsMjQwNDM2LjQ0MjUyNjY3MzEsNDMxNjkuMzI2Mjc1MTU0NSwzMDk5LjcxMzk3MDE1Mzg3MDQsMTkxLjY0MTYyNjgwMTYyMTY3CiszMSxUaHUgMjQgRmViIDExLDEzMDQ5LjQ1OTQ1NjMzNjAxMywxMTU1My4xODI5NjQzNTUyMTIsMTU0NC41NzE3NjMzMTUwNDIsMTQxODQuNTg1MTYxMTYyOTYyLDI4MDIuNDAwMDY4NzMyNTI1NiwyNjY4NzUuODU1MDk0OTgwNiwxNDU0NTUuOTA5NTg5ODE4NDIsMTMzNjIyLjA5NDkzMDg1MjMzLDk5NDg1LjQ5MzM4MzMwMTI5LDU5ODEzLjUxNDkwOTg5MzI0LDUxNDQuNDQ0MTYyMzU5NDIsNTgzMDMuNDUzOTY0NzczMTMsNTM4NjMuMTQxMTM4MjY4MTcsMTYzMDYyLjk2MDkzNDY5Mzg3LDE0MjU5MC4wNjUxNzg1MjIzNSw4MDQ5MC4zMjg4ODA2Nzg5LDMwODI5My4xNTAyNDM5MDM2LDExNTU0LjQwMTg0MjYwMDA3MywxODE4MDIuNjA0Njc1MTU1NzcsMTI4NjQ1LjMxOTI5NTE0NzEsMjEwNDAuMjM2MjI4OTYxMzE2LDU0MDUxLjQyNTA5NDE1NjA3LDI3NzI1NS43NTQ0OTE5MzE5MywzMzI2NC42NDI2ODgyNzgwMiwyMzg0LjE2MTk3NzQ4NzEwMjQsMTQ5LjIyNDY2MzM5Mjg4MjcyCiszMixGcmkgMjUgRmViIDExLDEyMzkzLjI4MTg2ODQ4OTQsMTMwMDAuNTI3NjM3NzA1MTMsMTE2NS44NDgyNDg1NTgxODc2LDEyMjUxLjAyODkwOTI1MTk1OCwyMTE1LjAwMzU3NDA0NzQ0NzMsMjE1NTY1LjI0NzE1NjMzNDE0LDExMTcxOS4wMDA3MzE2ODcyLDEwMzA1OS4zMDI1MjE0NTI4Niw3NjI4NC43MDExNDc1Njg5LDQ1ODU5LjAxNTA2ODQyNDMzNCwzOTQyLjA0NjcxNzI1MDQyMTQsNDQzNTUuNjExMzU2NjU4NjM1LDQyMzgxLjEzNjI2NTA2NTM5LDEzMDMxNy41NjM1NjE4Mjc1MywxMTQ5MTguNjgzMTYyMDE1MjgsNjIwNjYuMzY0OTgzNTgwNzc0LDI2NDc0NC41Mzk0ODYyNTI4LDE2MDA4LjUzNzg0MDI3NzQwNiwyMjI1NDcuMTI3ODM0NzQ5NCwxMDM4OTMuNTk0MDg0ODM2MDgsMzA0OTIuOTM2OTUzMjQ2NTE3LDc3Mjg4LjYyODMyNDg2OTgyLDMwMTExOS4zMjY2MDUwOTUzLDI1NzA0LjU0MjIyNzg3NTkwMywxODM5LjAwMzY2NzQyODY0MywxMTUuMDAwMDcxOTcxNzc3NTQKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvRGVtb2dyYXBoaWNTRUlSRGlzZWFzZV9SS19SZWZlcmVuY2UvRmx1L21lbi9JXzIuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9EZW1vZ3JhcGhpY1NFSVJEaXNlYXNlX1JLX1JlZmVyZW5jZS9GbHUvbWVuL0lfMi5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzIyNWVkMgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvRGVtb2dyYXBoaWNTRUlSRGlzZWFzZV9SS19SZWZlcmVuY2UvRmx1L21lbi9JXzIuY3N2CkBAIC0wLDAgKzEsMzMgQEAKK2l0ZXJhdGlvbix0aW1lLEVHLUZSRy1HMjEwMDAxLEVHLUZSRy1HMjEwMDAyLEVHLUZSRy1HMjEwMDAzLEVHLUZSRy1HMjEwMDA0LEVHLUZSRy1HMjEwMDA1LEVHLUxPRS1HMjQwMDAxLEVHLUxPRS1HMjQwMDAyLEVHLUxPRS1HMjQwMDAzLEVHLUxPRS1HMjQwMDA0LEVHLUxPRS1HMjQwMDA1LEVHLUxPRS1HMjQwMDA2LEVHLUxPRS1HMjQwMDA3LEVHLUxPRS1HMjQwMDA4LEVHLUxPRS1HMjQwMDA5LEVHLVVQRS1HMjkwMDAxLEVHLVVQRS1HMjkwMDAyLEVHLVVQRS1HMjkwMDAzLEVHLVVQRS1HMjkwMDA0LEVHLVVQRS1HMjkwMDA1LEVHLVVQRS1HMjkwMDA2LEVHLVVQRS1HMjkwMDA3LEVHLVVQRS1HMjkwMDA4LEVHLVVSRy1HMzAwMDAxLEVHLVVSRy1HMzAwMDAyLEVHLVVSRy1HMzAwMDAzLEVHLVVSRy1HMzAwMDA0CisxLFR1ZSAyNSBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMixXZWQgMjYgSmFuIDExLDAuMDA0MTE5NDAyNjQyMzk1MDA0LDEuNzQ0NTc0MjI2NTAzMzU2NkUtNSwwLjAwOTQ3MzkyNTE1MDkzMzExMywwLjAwMzU0NDc2MzIwNTcyMDc0MDYsMC4wMjMyMjkwNjc1MTYwNDU5ODMsMC4wMDkxMDU3Mzc5MTIwMDg5MywwLjA2NDQxNzg0MjU0MzEzMSwwLjA0MjY3NzczMTg0NjU1NjIxLDAuMDUwMTMyMzUzNjcwOTkyMjMsMjcxLjQxNzQyMTU2MjAwNDMsMjIyLjE1MDc1ODUyODk2NDkzLDI5My45NzgwOTg2NDI5ODc3LDcuNTU0OTE5NjIwNzM3NDk2RS00LDAuMDAxNDk2NjAyOTM0NTI1MzcwMiwwLjAwODUyNTQyNjIzNzUwMTE0LDI4My4yNzUwMjExNzUxODAxLDAuMDA4MzcxMjQ5MzQ2MjcyNzcyLDEuMDQxMzY0NjkwMDk1OTU1RS01LDUuNTQ3MjI3NzEwMzc0MDY1NkUtNSwwLjAwODIwOTU2NTgwMDUxMjMzNCwxLjA5MDg0MDMyODk3NTUwMDhFLTUsMS4wNzEzNzkzMTc5NzUzMTFFLTUsNi4zNDM2MzE4MTEyMTAyMDNFLTUsNzg0MS4yMjkyOTg3OTc3NCwxODQuOTYxNDEyNjYzNDIzNjMsMy4xNjYxMDI0MjUxOTMyMDZFLTQKKzMsVGh1IDI3IEphbiAxMSwwLjE3OTE4Njk0ODUzNzk4MjU2LDcuNjI5MzQ5NDk3MDkwMTU1RS00LDAuNDEyMzE3MjQ2MjkyMzI1OSwwLjE1NDMxOTA2OTg3MzgyODE1LDEuMDExMDgwODc4MTk0NDMzLDAuMzk3MDcwNzgyNTg5MDEyMSwyLjgwNjA3MzgzNDMyMjk0MSwxLjg1OTExNzg5NTAzMDAwMSwyLjE4MzY3MjcyNDQ4NzQ3Niw3NTUuNDg0NTAzMzIwODU4Miw2MTQuOTE3MjA4MTQ4MDkyNCw4MjEuNDQ5NjM0MTEyNjU0NywwLjAzMzA5MTE3NzcyMDU1NDIyLDAuMDY1NTU5Njc2MTA2MTQ3MzIsMC4zNzE0NzYyNzcwODY0NTE5LDc5MC40MjQ1MjQxNzAwMzQ5LDAuMzY0NzQ5MDI1NzI1NDY3NSw0LjU0OTQ4MzU5NDQ0Mzg3MUUtNCwwLjAwMjQzMDQwNjI0MDUwODcxNywwLjM1NzcwMDYyMzU5NTY0NjUsNC43NjY4NDI0MjM5OTcyNkUtNCw0LjY4NTYwMDM0ODQ0NzA2NkUtNCwwLjAwMjc4NjE5MTk2Nzg5ODg2MiwyMTMwOS44MDE0MzEyNDQxNSw1MDkuODQ4NzgxMzc5MzE4LDAuMDEzNzcxMDUxMzA5NjA2MTEKKzQsRnJpIDI4IEphbiAxMSwxLjM3ODI2MzYxMzcxNDQwMDQsMC4wMDU5ODkzMDg4NzE1OTIxNzcsMy4xNzk0Nzg5Mzc1NjQ2MDMsMS4xOTAwODk2NzEwOTk0NjA2LDcuNzk4MjU1MTgyNzg3MTk1LDMuMDgyNzg5NzI5MzM3MDk1LDIxLjY5MjUwNDAwMzcxNzA2MiwxNC4zNzM3NzkxNjI0MTgzNzEsMTYuODc3MjM0OTM3NDI5NjMsMTMxMC40MjYzNjk2NDQ3NjcsMTA0Ni4wNDI4MjIxMjcwMjg4LDE0NDUuMDM2NTYwNzUxNjU4NSwwLjI2MTU1MTk5Nzk1MzQ5NjQsMC41MTg0MjcyOTM2NzIxMTI0LDIuODc0OTMxMTY0Mjk0OTIyLDEzODMuMjgwMTA2ODI1MTU1OCwyLjgyMjU2OTk4OTQyMTc0NDYsMC4wMDM1NTkwNDU0NTk5MzUxMTM3LDAuMDE5MjM1MDU3OTQyMjY1NjQsMi43Njc5MTE3NzI4OTc0NzgsMC4wMDM3MzMxODY1OTc4NzY1MzYsMC4wMDM2ODI0NDgyMDIzNTM2MTA1LDAuMDIyMjc5MDY3MDA4MzgyNjMsMzM5NjMuNDA2NTEwNzg5MzU1LDg1NC42MTQ1MDI2MTUyMzQ5LDAuMTA1OTE1MjI0NjUxMjk0NDEKKzUsU2F0IDI5IEphbiAxMSw1LjI3NDM0NTUwNzMyNTQ2NTUsMC4wMjQxMjU2MDgxMDY1OTA3MTUsMTIuMjUxMjI5NzY3ODE3Njg0LDQuNTgzMDA5ODU1NzMzNzk5LDMwLjA1ODI4MzQwOTA3ODE4NiwxMi4wODAwMTA4ODIxOTc3MTIsODQuMDY1NjI4NDc4Mzg2NzYsNTUuNzIxMTMzODU1MjI5MzA0LDY1LjM2Njc1Nzk1NzY3MzA3LDIxMDkuNDU2MzY2MjA4OTY1LDE2MjQuMjY2MzA0NzM0NDYxMywyMzg0LjcwMjA5MDIwMzIyMjMsMS4wNzE1Mjc2MDAyMDI0OTgzLDIuMTI2MzY3OTIxODAyMjgsMTEuMTczNTIxMzI1NTkzOTM1LDIyNjIuMTgyNDM1MDgxMTQ3LDEwLjk2NzAwODM1NjUyMTI0NiwwLjAxNDIxNTY2NTE3NzQwMTIzNywwLjA3OTA2MTk2NjM1NTE5OTQ1LDEwLjc1MzQ3MDU5MzczOTg0LDAuMDE0OTUyOTExOTgzODAwNTAyLDAuMDE0ODgxMDM0MTExMjI4MTcyLDAuMDkzODY2MTM5NjkzNjc2NDksNDYyMTkuMzk3MDk0NDQ3MTYsMTI5MC4xMTIzMjQwNjYwOTU3LDAuNDA1MjkzMjc0MTY2NzU4MDMKKzYsU3VuIDMwIEphbiAxMSwxMy45Njc2MzYzNTE5OTgzODMsMC4wNzAzNjE2NTM1NzIwNTI0MywzMi44OTk3NTA2ODA1MDA1MjQsMTIuMjg2MDc1MDI1MDM5Njg0LDgwLjc1OTc2MzQ4MTk4OTc4LDMzLjUwMzkxMTQ4Njc4ODk1LDIyOC4xOTQ5Mzk0ODc0MTQ4LDE1MS4zNTEyNjIwOTI5NjM2NSwxNzcuMjMzMDQxNzk3ODk0ODgsMzQ1OS40NjIyOTQwODE1NjU3LDI1NTMuOTY2MzE0Mjg4ODcyNiw0MDE2LjU3OTUyODUzNTM3OSwzLjIxODc5MTQyOTMzMTAwMzYsNi40MDAyNzU1MTI5NjQ3MDEsMzAuNTAyNTM1ODk0MjI3NDQyLDM3NzMuNjk1NzU3ODQ4ODczNywyOS45MjI2Njg2NDUzMjUzNzcsMC4wNDA4MzkwNDA0MzUyOTY2OTUsMC4yMzg4NzAxNDA4MTM5MTM0NywyOS4zMzM3NzU0NzE1Nzg2OCwwLjA0MzE3NzA5OTg1NDAwNzgsMC4wNDM2Njc1MTYxNjgwNzg3MzUsMC4yOTU0MjQzNzExODk2NTg2LDYxMTM2LjkyMDU1ODgxMzYyLDE5NjAuNjg3MDUzMDM1NzcwNSwxLjA3MzMxNTg3MDgyNDg5NzgKKzcsTW9uIDMxIEphbiAxMSwyOS44MDYwMTIyNTI4MTg2MzMsMC4xNzM2MTc5NjY0NjA3MjUxNiw3MS44NDY4ODc0NTcwMzU4OSwyNi43NDc0OTY2MTk2MzIwNTYsMTc2LjQ4NDI0NDE0OTkyMTQsNzYuOTgzNDcxNzM1MDc3MTMsNTA2Ljk2MTM1MDI4ODI0NzczLDMzNi41OTYwOTY2Mjg5ODEyLDM5My4wMTUxNzAxODYxMzM3LDU3MDAuODI2MDQxODM2NjU5LDQwNDguNjU5ODc4NzU4MTM5LDY3NjYuMDk2MDYyNzYyNTc0LDguMjU5OTM4MDg4NTE1ODQ0LDE2LjQ2NzMzODIyMjQzNjA0NSw2OC4zODE1MTkxNzIwNDU3NCw2MzA2LjcyNTk5NTEwMDMzOCw2Ny4wMjQwOTI2NDM5NjgwMiwwLjA5ODY3OTE0MzI2OTg3NzE3LDAuNjE3NzY0ODk0MTQ2NTc0LDY1LjY4MjM0MjE5MDU5MTE2LDAuMTA1MDkyMTk5MTk2NDA2MjQsMC4xMDg3Mzk0MjYwODUzNDE3OSwwLjgwMzUzOTMyOTI0ODMyNTQsODIwMTAuMTg5MzUwODI3MzgsMzAxMi45NzgyODk4MjM3OSwyLjI5MDY1MTM4MzY0ODQ0MTUKKzgsVHVlIDEgRmViIDExLDU1Ljc2ODkzMzI2MjkyMTYsMC4zOTAwMTkxNjQwNjU5MjE3LDEzOC44NzkyNzE5ODcyNTUwNyw1MS40OTAwMDc1ODA0OTM1NiwzNDEuNDExMjQ0MzA1NTQ2NSwxNTkuMzE0MzE0MDQyMDU4NiwxMDAzLjU4NDI2ODE5OTcwNzUsNjY3LjMwNDA0Mzk4NjY5NTMsNzc2LjA1MDc5NDg0Mjk1NzEsOTIxNS4yMDU1MTkyMzA3OCw2MzE3LjgxODUyNTk3NDAzMiwxMTEzMC40MDM0NTY5MzU1ODYsMTkuMzU0NDE1MDE4ODgzODg4LDM4LjY5NTE1NzU1NjQwNzgzLDEzNy4wNDY3MDc4OTU2MTU2NCwxMDMwOC44ODU1NTQ1NTg1OSwxMzQuMTcxNDMyNDMwNTkyMTIsMC4yMTY0MjkwNzYwNzY0Mzk4MiwxLjQ2MDM1MTk2MDM3OTg1NjUsMTMxLjQyMjYwMDI2MTAwNDI1LDAuMjMyNDg5MzEzNjcyOTc4OTgsMC4yNDcxMjQ5MzAyNTE1MTk4OCwxLjk5ODI5NDk5MTcyMTY3MzIsMTExNTM4LjcxNzg4Njc0MzU3LDQ1NzkuMTI5MjEzOTczNjI5LDQuMjg2OTU5ODU2MzA3MjUyCis5LFdlZCAyIEZlYiAxMSw5Ni4yMjkyNTM2OTIzODYxNSwwLjgyMjYwMTg4ODYzMDgwNSwyNDkuNDA4NTc2MzA1NzEwOTQsOTIuMDg5ODY2NTM1ODk4MDUsNjEzLjU3NTMzMTkwNDEzMjMsMzEwLjEyMDAyMzc3MjIyNjY2LDE4NTYuNTAzMzE4MDM4NzQ5LDEyMzYuNjg0MTc4ODUyNjAxMiwxNDMxLjI2MDU5Nzk0MTM0MDQsMTQ1MDEuNTgyMDg1NjY2NTg1LDk1OTYuMDQwNDU4MDEzMTM4LDE3NzgyLjI3NjYwNDM2MDgyNCw0Mi40NzMwOTE0NzA2NTgxOCw4NS4xNTA2NTIyODcyNTM5NiwyNTcuMjgzOTA3NzAyNTY1NDQsMTYzNzkuMjg3ODgyMzA5MjIsMjUxLjU0NTM2OTcyNzIyMzc3LDAuNDQ1NjY3MTQ5MjQ2NzM1NTYsMy4yMzQ1NzM0MDAzMjcyOTQsMjQ2LjI0NTkyMjEwNjQ5MTE4LDAuNDgzMDgwMDM4NDMxOTYzLDAuNTI4MzYwNTQxNTQ5NTQ5MSw0LjYzMzY4MzQ2MDEwMzgzOSwxNTE5MDcuMTI5Njc1Njg4ODMsNjc5MS4zNzI1MzMzMzU3MDEsNy4zOTkzOTk5Mzk2MDA0NjUKKzEwLFRodSAzIEZlYiAxMSwxNTcuNzk4Njk3MjQ0NTM1MjUsMS42NDkyNDE3OTQyNTY0NDEsNDI3LjIyNzgwMTAyNjc2OTQsMTU3LjM0MTY1NDY3OTA4MjU1LDEwNTEuNDY5ODA4Mjg1MzE1LDU3OS43MDQxNDAwNjQ5MTc5LDMyOTAuNjkxNDQ0Mzc4OTYyLDIxOTYuNzAxMzM0Mzg0OTY3NiwyNTI4LjYyOTU2NDEyMjE5NSwyMjI2Ni45OTg1MDE3MTMwNywxNDE3MS44OTE1Nzk1NTMwOCwyNzY5MC42NjM1NjA0Mzg1ODUsODguMjEwMDg5ODAxMTAwMjIsMTc3LjMxMjA3NjY3MTIzNDUsNDYzLjQ2NTU5Mjc2NTAwNDksMjUzNzguNzE4NTQ0OTM3MzMyLDQ1Mi40NzkyMDYzMTE3MDA3NSwwLjg3MzU4NTAxNzY3NjE2NTQsNi43ODMzMjE2NDMwMDk4OSw0NDIuNjQxMTgzNzExMDIyOTYsMC45NTU0OTA3ODY5NDU5NzUxLDEuMDc1OTg4OTQ3NDYwNzEzLDEwLjEyMDA1ODUxMTUwNTQ2NCwyMDUwNDYuMzIyMjIzOTk5OTIsOTc5Ni45ODYxNTE0MzMwMTUsMTIuMTM2NDk0MzYxMTgzNzI3CisxMSxGcmkgNCBGZWIgMTEsMjUwLjEwMjE4MTI1MjQ4ODM4LDMuMTY1Mjg2MjY2OTY0MDQyNSw3MDcuMDU4MzA5NTE1ODc3NSwyNjAuNTc4MzY2NzY0MDgyOSwxNzM5LjgyMDg2MTcxOTQ4NDYsMTA1MC41MDAyMzMyODYyNjY0LDU2NTcuMzY0MTEzNzYyMTk1LDM3ODUuNjI2NjEzMzE3NjE3LDQzMzIuNjY2ODAwNDU5MzI4LDMzNDk1LjU5MDE3ODE1MDQ5NCwyMDM4My42MzM3ODkyMTA4ODYsNDIyMTMuNzIxNDUzNTU5NzMsMTc0LjY3MDgzOTg3MDA0NDYsMzUyLjAyNDA4MDQ2NjkwODg2LDgxMC4zOTA3MjgwMDgzNiwzODUxOC4xNDQzNDI5OTczOSw3OTAuMDYyNzk5OTY1Mjg3OSwxLjY0MTUzMTIxNTg2NzA3NDcsMTMuNTczNTc3NDI0MjMzMDQ5LDc3Mi4yNzA5MjI5OTQ0MzYsMS44MTE3MTcyNTQ3MzAzMzc3LDIuMTAyMzkxNTk1Mzc5NjUzLDIxLjAxMTc3MjgyMjIyNDQ1OCwyNzI1NjkuNzcwNjY2MDcwNzUsMTM3NTAuNDk0OTc5ODM1ODYsMTkuMjMzMzkxMjc5MzA5MzQ4CisxMixTYXQgNSBGZWIgMTEsMzg2LjQwNDEwNzI5Mjk2OCw1Ljg0OTczMDM0NzM2NTk4MywxMTM2LjM1MDQ1NzQ4NDI0NDMsNDIxLjE4NjE3ODc3MzI1ODM1LDI3OTIuODU2OTM2MTAyNTg1LDE4NTQuMTI1MDM3NTUwMjYxOCw5NDg1LjMzNTA4MzYyMDc4LDYzNjQuNDIzOTIzNzk2ODAyLDcyNDAuMDk2Mjg0OTQ0NTY3LDQ5NDY5LjIwMzY2Mzk0NzU2LDI4NTYwLjIzMjE3MjQ3MDU2LDYzMTI3LjgwODQ4MDc1MDM2LDMzMi4wNTI2NDMyNjcxOTM0LDY3MS4wMDI2OTQzODcwNzM4LDEzODIuODg0NTkwNjg4NjEsNTczOTYuNTQ4MjY1MTE2NzQsMTM0Ni40MjA0MzU3MzI0MzM2LDIuOTcyODI3NzU4OTc1NDA1LDI2LjEwMzkxMzc4MzY4NzcxMiwxMzE0Ljg1OTM0MjM2NDk4ODYsMy4zMTE1ODI0MjIyODI4OTEsMy45NjU2NDQ4NDgwNTc0NTg2LDQxLjgzMzAwOTQzMTE0NzA5LDM1NTE2MC44OTU2MTE3Mzk3LDE4NzcwLjg0ODU1NTUyNTk3MiwyOS42ODgxMDg5NjU2NTI5ODMKKzEzLFN1biA2IEZlYiAxMSw1ODQuMTc4MDU4ODQ5Mjc1OCwxMC40NzAyNjEwNTEwMDcyMSwxNzc1LjczODczMjEzMDI4MDYsNjY2LjUyMzEzMjQ5MDgyNSw0MzUzLjAwNTExODkwNzkxOTUsMzE5Ny42MTY5MjU2Njk0ODY2LDE1NTUwLjkwMzg3MDIwNzU5LDEwNDY3LjU1ODAyNjEwOTg5MSwxMTgzMC43NDk4MzQ2ODkxNiw3MTczMC4xODY3MzMzODYyNSwzODkwNy45NzM0MDIzMzk0Niw5MjU3MS41NzQ3MTkxNTM4MSw2MDkuOTIwOTA0MDE3MzgyOCwxMjM2LjA0Mjk4NzkwMTU3NTUsMjMxMC4wNTIzNTI3NTgxMjM2LDgzOTc3LjQyMzgwOTE4MjczLDIyNDYuNTYwMzQ3MjY1NTg1Myw1LjIxNjAzMzk1MzY1MTM3MjUsNDguNTc1MjE3NDQzMzI4MjIsMjE5MS4zMjExODIxOTU1MzYsNS44NjcyNzM4NjYxNDUzMDUsNy4yNjM4MDY5MDM5NDI0NTUsODAuNDcxNTUxNTgwMTgxNzgsNDUxNTczLjg1NjU0NjE4MTY2LDI0ODY5Ljg4MTAwNDgwMTU5NSw0NC43NzgyMjc1NjAxMTUxMgorMTQsTW9uIDcgRmViIDExLDg2NS4zODk3MDQ2MDY3NTc1LDE4LjI0MTEwMDU3NzA3ODU5LDI2OTUuNjY2NTg1MDg1MTk5LDEwMzMuOTczMTk2NjU4MTEyOCw2NTc4LjE5MTg3OTAzODcxNCw1NDAxLjIyNTI1MzkxNDYwMiwyNDk2MC4zMDM0NTcxMjU4ODMsMTY4NjUuOTgzNzU1Mjg4ODY0LDE4OTI2LjgxMDQ2NDk0MzA4NiwxMDE5MzYuMTU2MTk2NjQyODYsNTEzNDguNzkwNDY2MDIxODksMTMyODIxLjczNjA0NDA1MjMyLDEwODguMDU3MDAwOTA4MzAwMywyMjExLjk1NTUyMDcwMDA2NywzNzg0LjkyNDQ0NTc1MzE1NSwxMjA0NDAuNzI4MTY2NTMwNDUsMzY3Ny42ODYyMjkzNDQ1MjMzLDguOTA4NDExMzk0MjU0NDY1LDg3Ljk0Nzg1Njk3MzczNDkxLDM1ODEuNzI0MTcwMjkxMDI0LDEwLjEyNTI4Mjc5Nzk1NDI5MSwxMi45ODUyMjUxNzYyMjgwNjUsMTUwLjQ0MDg4ODg5NDA2NzIzLDU1NzU2OS4yNzk5NDIyODQ5LDMxODY2LjU1MTg3MTMyODc5Nyw2Ni4wMzA4NTIyOTY3NjI3CisxNSxUdWUgOCBGZWIgMTEsMTI1Ni4yMzkyMTg3NjMzODU1LDMxLjA1NDM4NjI0Njk2OTc4OCwzOTY1LjkxNDQ5NzE1ODI3NzMsMTU3Mi42Mjc0NzgxMTc4NTM4LDk2MDkuNjI5NzUxOTYyMzc1LDg5NTAuNDQ1NTg4NzEzODc3LDM5MjI5LjE0NjM3MzkxOTcxLDI2NjM0Ljg3MzAxNzgxNzE4NiwyOTY0OC4yMTI0OTM3MzE0OSwxNDE1NTcuMzYyNzk2OTg1MzQsNjUzNTguMDQ0MDA1MDg0NTk0LDE4NTgxMy43NDA4NjU4MjQ0NSwxODkxLjkyMTY5NTY2NDI3NCwzODU5Ljg2MjQ0MjE3Mzc4NjMsNjA5MC4xMjQyMjQxODg4MywxNjg4NDAuNDg3MzA5MjYxOTgsNTkxNS4wMjY5MzE4MTEzMDYsMTQuODY2OTYyMTMxODczNjcyLDE1NS41ODEzNjc5NTI1OTE0Miw1NzQ4LjUxNTE4NjM2MDEyNywxNy4wODc0MDU4MDcyMjE1NjgsMjIuNzQ1NDkzNDgxODM0MDc1LDI3NC40OTIzNTIxMTQ1Nzg1LDY2NTQyNi43NzU2NDcwMTgsMzkzMjUuOTA1MTc4NDI1OTksOTUuMTIwNTg3MjQ4MzM1NDQKKzE2LFdlZCA5IEZlYiAxMSwxNzg1Ljk1OTkzNzc2NTQxMTUsNTEuODA5ODY4MTUwMjA3NTU2LDU2MzQuNjQ0NDM4ODkzMDksMjM0My41MDE0NDQ4NDgyNDA3LDEzNTE0LjA2NTI2MjgwMDcyLDE0NTYyLjkzNjk1ODgwODQ4Myw2MDMxOS43MDc0MTA5MzM1OSw0MTIwNC4wNTQ3ODIxNDA1MzQsNDU0MzQuMTE0Njk3MjM1NiwxOTEzNzYuNTI1MjU5MTgwNCw3OTg4Ni44NjQ5MjUyMDE3NiwyNTIzNDUuNDIxMDU3ODA1NywzMjEzLjI5MjcwMzExMjY1MzMsNjU4My4wMTc1NjY5ODY5MzcsOTYyOC42MTM1MDYyODg3MjQsMjMwNDk4LjM0OTYyMzM0MDYyLDkzNTQuMzA0MjYyNTMwMjQyLDI0LjMxNjE2MDkxNjUwNTcxMiwyNjkuNzM3NTMyNjEzMDY1MzUsOTA2My44Nzc1NDQ4NTMyNzYsMjguMjg2NjcxMTA5MjI2NTkyLDM5LjE1NzQ1NDg0NDM1MjA4LDQ5MC4yODQzNTQ3MjU1Nzg5Niw3NjQ2NTEuMzIyMDczNzc0Niw0NjU3MS4yMjUxMjY0NDA0MDQsMTMzLjY3MjE2NzY2NjE2MzcKKzE3LFRodSAxMCBGZWIgMTEsMjQ4NC40MTE0ODU5NjU5OTUsODQuODc3NzYyNjM5NDI1Myw3Njk3LjI0NDQ2NTU0NDQwMiwzNDE2Ljg1NTkzMDk3NzM2ODYsMTgyMDcuOTMzMjQ3NzgzMzYsMjMyNjcuNzIwMDg4MTkzMjU1LDkwNTcwLjU0MDYwOTk5NTQ3LDYyMzUxLjMzODk1NTMzMjk3Niw2Nzk4MC41OTgwMDg2MDQ5NSwyNTA4MzYuMDc4MjIxMjgxMjMsOTM0NjUuMDQ3NjgwOTkyMTIsMzMxMDYyLjE0ODc4MTc4NDIsNTMzNS40NDAyOTI4OTcyNTMsMTA5ODUuODUyODQ4OTc4OTgsMTQ5NTYuODU4MjM2OTc0MTY3LDMwNTE1Ny4wNzYxMTc2ODk5NSwxNDU1MC40OTQ3MTQ0NjE5NzMsMzkuMDY3NTY0OTY2MzA1OTQ1LDQ1OS4zODQ5MjkxNjIzODA1LDE0MDM4LjQwODAwMzc5MjU2Myw0Ni4wNDQ2NDQxNDA0MDc3OCw2Ni40MTEyNzU3MzI3NDE1Niw4NTkuMTkyNjMxOTAyOTUyNSw4NDQwNTYuODk2NTQ1OTM4Miw1MjgwMC43MTE4NjY0Mzk4NywxODIuOTc1MTcyNTA1NTA0NzMKKzE4LEZyaSAxMSBGZWIgMTEsMzM3OC4wMjkxMDY3Mzk1MjE1LDEzNi43MDU5OTA3MjE2Mjg2NywxMDA2Mi4yMzQzMzkyNDY0ODgsNDg2NC4zNjEwMTcwNzE4NDIsMjMzOTEuNjMxMDcxNTYwMzIsMzY0NzcuNDYxNzA5NzE0MzksMTMyNDAxLjI2NjE2OTA2MjMsOTIwNTcuODc2MzE0MTc3NzMsOTkwMDYuOTM5MjYyNDc1OTUsMzE3Mzg5LjM4NjMxMjEyNjI0LDEwNDUwNS40Njk4ODQwMzI1LDQxNzU0OS4yNjU2NDI4NTkyLDg2NTYuNzQ0NjcyNzc5ODEyLDE3OTM3LjI2MzAxMzI3NjA2OCwyMjgwOS40NzUyOTU4MDMxMDIsMzkwMDU4LjgxMTA1MjEzNiwyMjI1Ni42NTY3ODM4NDA4NTIsNjEuNzYxMzQxMTE4ODc1ODI2LDc2OS43NTY4MzI1MzA4MzMsMjEzNDAuNjExODg0MTg4NDMsNzMuODM1MjYxNjI3Mjk4MjQsMTExLjE2MDE2MTMwMjc0NTg1LDE0NzkuNDE2OTA0Nzg4NTU3NSw4OTQ1NTIuNjgwMTUwNTY1Myw1NzI4MS42MDUzNzYyODUyNDYsMjQzLjYxNDQzMjA2MjcxNTc2CisxOSxTYXQgMTIgRmViIDExLDQ0ODQuNjUzNTczMjMyMDAzLDIxNi41OTk1NjU2MTczNjc3LDEyNTMzLjk2NjY1NDYzNDg4LDY3NDUuNDQ1MDE2MDg4MzUzLDI4NTQ2LjM1OTA2MTEzMTU2Myw1NjAyMi4xNzUwMDg0NTY5OTQsMTg3Njk4LjEyOTA5MTY3NDA1LDEzMjE0My41MjYzMTA5NDY0NywxMzk3ODIuODc4MTcxNTgzNTIsMzg2MjIyLjMwMTIxMTk2NDM0LDExMTcxNS43MDMyMTEwNTQ4Niw1MDQxODEuOTk0MzkyOTA0NywxMzcwMC43Mzc2MzE1OTA1NzMsMjg2MTguNzY1OTUwODU4NzU3LDM0MTAxLjE4MjQ5Mjc0OTUyNSw0Nzk0MTMuMzg3OTE5OTU1OTUsMzM0NTYuNzI4ODU0NzE0NTksOTYuMTk4Njk0ODYzMDgzMTMsMTI3MC40NDAwMjg4NTA4OSwzMTc5NC4wMjgzNjYwNjUyNzUsMTE2LjgxMDk5MjAzNjk4MjQ2LDE4My44ODU1OTAxODMyODI5MSwyNTA1LjEzMDA4MDM3NDE5LDkxMTQ0My41NjgyMDY0NDA5LDU5NTQyLjcxOTkwNzYwMTIxLDMxNS4wNjA2NTg2MDA0ODAwNQorMjAsU3VuIDEzIEZlYiAxMSw1ODA4LjIxMDU2NDQ3MTU4OSwzMzcuNjgyNDkzMzIwODc0MTMsMTQ4MzMuOTE2MTM5MDk2NjE4LDkwODkuMDAzMDM0NDAxNjEsMzMwMzAuNzYxNTY4NDY4MzIsODQwODQuMDQ1OTYxOTQ1OTQsMjU2ODYxLjcyODczNDM0NDk3LDE4MzYyMS4zNTEzOTQ4NzAyMywxOTA0MTMuMjA5ODE4NDYxOCw0NTA3MDguMjMyMzI2MzQwNCwxMTQ0MjcuNzY0NzE1ODc2NTgsNTgxMjYzLjY5ODM1Mzk0NDIsMjEwODkuMzk5Nzg5NzQ3MjE1LDQ0NTE1LjQ2NzI4NjI2NzgsNDk4ODEuNDc4NjAxNzEyOCw1NjQ3ODkuMTE0MDU4MDYwNyw0OTM3OS45MTA4NjExOTM1NDQsMTQ3LjgwODE1NzM1MjI4NDc1LDIwNjcuMDQ0MTIwNzY1Mzc5LDQ2MzI5Ljk4NzA4MTgxMDc5LDE4Mi41Nzc2NjgzMzI0MzYyLDMwMS4wMTQ2NzY1NzM5ODcyMyw0MTczLjY5NjIwNDMyMzc3OSw4OTUyMjAuNTIyNzUxMDg3NCw1OTQ3NS44MjE0MTU3MzcyNCwzOTUuMjM4MjI3MzM3MzcyOTYKKzIxLE1vbiAxNCBGZWIgMTEsNzMzMy45OTE4MTAzNDAwMTQsNTE3Ljg1NjA4MDU1NTAwMTksMTY2NjUuMzE1NzY3NjA2MjA3LDExODcyLjgwNTc4MjEzMzQ0LDM2MjU1LjExMzU4MjUxNDgxNiwxMjI5MDkuOTMwOTc0MDcxODIsMzM3NjU1LjQ3MzQ3MDA3NzQsMjQ1NzgxLjM1MzU1MjE5NDEsMjQ5MDA1LjM3MTE4Njg0NjU1LDUwMzY3MC43NzQwMTEzNzI3NiwxMTI3MDEuNjgyMzAxNjI3MDUsNjM5MzI1LjY0Mjg0ODgxMTksMzE0MzYuOTg3NTk2ODU4NzUsNjcyNTkuMTAzOTg3MzY2MjEsNzExODkuNDU3MzA5NDgxMzUsNjM2NjQwLjIzNDc4MjM1NzcsNzE0NTYuNDA1NjA4MzMzMDIsMjI0LjI0NTE2NDcyNTg3NDA1LDMzMTYuNTk1NTQxNzg1MjA1LDY1ODUwLjA5NDQ2NDUzMzM0LDI4Mi4yNjMyNjQ2Njk5Njg1LDQ4OC4wMjc5NDIyNjMzOTQ1LDY4NDAuMTQyNzI4MjYzOTg4LDg1MDcxOS41OTE1MDE2NDM2LDU3MzEyLjc1MDU4Njc4OTk3NCw0ODAuMDc4MDA2NDMyMDk1OTUKKzIyLFR1ZSAxNSBGZWIgMTEsOTAyOC4wNjYyMzIwOTUxMjcsNzgwLjkxNjQ5NzQ0NDAyNjYsMTc3OTkuMDQwMjE2NjE0NjM4LDE1MDEwLjgwOTg0NDIwMTM1MiwzNzg1NC4xODk3MjkyNzAyNCwxNzQyNjMuNDc2NTcxNTMwMSw0MjQ0ODQuMTQ4ODYzMTM4NiwzMTUzODUuMTM5NjMwMTQ4MywzMTEyMDguODc0MTU3MzQ0Niw1MzkxNDcuNDY0OTk3NDM5NiwxMDcxOTYuNTQyMjYyNTU0MDgsNjcxNzMxLjA3NDA0NjM5MTYsNDUxNTAuNDgzNTM1MjgwNzM1LDk4MjcyLjg4MTQ1NTc2MDY1LDk4ODAxLjYwMjkwMTQwMTY4LDY4NjY2Ny41NTgzNzEwMDMxLDEwMTIwOS41MjI5MTU5MjM3OCwzMzYuMzM1Mzc4NzAzNjkwOSw1MjUwLjA2OTU2NDM5MDAzNyw5MDk5Ni40MTI4MTg3MjIyMiw0MzIuMjM2MjkyNDA3NDg0OTQsNzg0LjQ3NTA4OTc1NTUzNzYsMTEwMjMuNDQ1NjA0MzIzMjkzLDc4NTMxMy4zNzczNjIyNDU1LDUzNTEyLjYzNTg1NjkzNjMyLDU2My4zOTg3MzE3MTM4MjIxCisyMyxXZWQgMTYgRmViIDExLDEwODM4LjIzOTA1MTA2OTQ0LDExNTYuNzQyMjE3ODQ0MjMyOCwxODEzNC45Mjg2NTMxNTMyNDUsMTgzNDcuNTU0MTM5NjcxNDUsMzc3NjcuMTE5NDAzOTY4NTcsMjM4NDQ1LjUyODMyMTI2ODQ0LDUwODU4MS41NzUxMDc4ODE3NCwzODYzMzIuOTIyMzQxMjk4NjYsMzcwNDgyLjE1MjU5MTc1Nyw1NTM4MjkuOTI4NjA4OTQ0Miw5ODkxMy45OTA0MzIxNzY5OSw2NzYyNTcuMzIzOTU0NDYxNCw2MjEwNy45NTU0MjI5Mjk1NzUsMTM4MDgyLjg1NDI1MzE0MjQsMTMyNzgwLjcxNTUxMjY1MTEsNzA5OTA0LjMxNTQwMTE0MDUsMTM5OTQ0LjYwNDM4Nzg4Njk3LDQ5OS4xMzY5MTc5Mjg2Nzg2LDgxOTYuNDE4MTUwOTk4NTYxLDEyMTc1Mi42ODMyMTEzMjg5MSw2NTYuMjY4MjQxNjc1NjI4NiwxMjUwLjY5NDg4MDM4NDkxOTUsMTc0NDYuMjY2OTk3MDgzNDU0LDcwNzAzNi4xMzg0NDcwMDc1LDQ4NjI0LjgxNjMzNDU2NjE5LDYzNy4zMTEzODY0MzM3MjQ0CisyNCxUaHUgMTcgRmViIDExLDEyNzAwLjExMjQ2OTYzNjIyMiwxNjgxLjE5MDM3MTMxNzU3ODQsMTc3MTIuNzAxMzcwMTkwNjk4LDIxNjcyLjUyNzA4NzgxMTc1LDM2MjAzLjE2MDQ0MjI5OTc5LDMxMzI4NS4xOTA1NzA5NzM4NSw1Nzk3OTEuMzczNDAxOTkwNiw0NTA1NjguMjEyNDc3MjU3NTMsNDE5NTE4LjU4MDc3MTE4MzM2LDU0NzY0OS4yNTI0NDQ1MTYyLDg4OTM0LjIwMjg0MDYxMzg3LDY1NTA5OS4wMjEwMjM5ODA3LDgxMzc2LjIzODcyNjEwOTc1LDE4NTU0NS42NDk3OTM2NTQzLDE3MjAwNi41NzA3OTIzMDM3LDcwNTcwNy43MDU1MTgwMjc4LDE4ODMwNy4wNjI2NTQxOTI2LDczMy43NjMzMjM3NzYwMDA4LDEyNjE2LjY1OTE3NjUwODc2LDE1NzA0NC40MDMyNTQyNzk4LDk4OS4yMDAwNDQ3NjU5OTA0LDE5NzguNzYxOTM5MDI3NTU0MywyNzA3Ny4xODcwNjE0MjMsNjIzMTY2LjE4NjQ3ODg1OCw0MzE3NC45NDc4NjU3NzEyOSw2OTMuNjc3MjYwOTQxOTU0MworMjUsRnJpIDE4IEZlYiAxMSwxNDU0Mi4xNjE4MjAxODIyNywyMzk0LjA1Mzg2NTYzMDc1NjcsMTY2NzUuNjYzODcyMzc4MDQ1LDI0NzQ0Ljk2NDQ3ODA4Mjc4LDMzNTM0LjAyMTcyMTQ4MjY2LDM5MzQyMy4xNzI5NjMyMDgwNSw2MjkyMzEuMzM5MDQ4MTU3Miw1MDAwMDMuOTM0OTkxMzg5NCw0NTIyMTguNTUzNDExNjIwOSw1MjMzMjQuMzUzNDYzMDA1NTcsNzgyMjYuOTE3NDI2NDc3ODgsNjEzNTUxLjU0MTc5MzcxNDQsMTAxMTE3Ljg0MDE2NzQ3NjU4LDIzNzI0Ny42MTQ3MzYxNDQ5OCwyMTM4MDcuMjA1Njk1MjUwMjgsNjc3MjkyLjM1OTU4MzY1NCwyNDU2MjUuMjc1NjY4NTIwNDIsMTA2OS43NzI0NDk4NTk2MDQ5LDE5MTM3LjU0NTk1MzI4MjYxMywxOTQ0NDAuNTUzODAyMTAxODEsMTQ4Mi4xMTE5OTg4MTM5MDk0LDMxMDcuOTM0NzkxNzA5OTcxMyw0MTEzNy44Mzc1MDQxNTY2Miw1Mzk0ODEuOTIyOTE5MDM2NCwzNzU5Ny45MDE0MDY1NzUyNCw3MjYuMDg3NzQwNzE3MjY1NAorMjYsU2F0IDE5IEZlYiAxMSwxNjI4OS4zMjIwMjcwODAwMjMsMzMzNC40OTczMDIyMjQ5Nzg3LDE1MjE1LjQ3MDg4MDY0MjA0NiwyNzMyNy40NjAwMDA2MjI1MzcsMzAxNzcuMjQxMTgzMjQ1NjUzLDQ3MDYwOC4zMjc5MDA4Njk3LDY1MTcxNi4yODgwNTM4NDY1LDUyODc3My40NTcwMzQ0NTI0LDQ2NTM0MC4wODkyOTc5ODk5LDQ4NTI4OC40MTU2ODY4NzIxLDY3NTU0LjY3MDEzODgyNDI4LDU1ODI0NS4yNTgzNjM2MDg0LDExODg4NC45MzczNjM3ODg5LDI4NzYzNS42MTgwMDIzNjMxMywyNTQwNDEuMTAwMDY2NTg0MjEsNjMwMzI3LjI4NTM2NTQ2ODksMzA5MjM1Ljg1NzY0Nzk4Njk3LDE1NDguMzg0ODIzOTQ3MjY0MywyODU3Ny4xNjc5OTczOTUzMjUsMjMwMjU0LjAxMzM4NTE3NzEsMjIwOS43NDM0ODAyOTc3OTQ2LDQ4NDYuMTg1MjY1MTY3MTM3LDYxMDQwLjgxNDg0Njk5MzEsNDYwMDY0Ljc0MzUyODIyNzcsMzIyMTIuOTk4Njk5MDM5OTEyLDczMS41NzU5OTc5MDU1ODYyCisyNyxTdW4gMjAgRmViIDExLDE3ODY1Ljk5NTU4MjY5NTA3NSw0NTM0LjE1OTU4Njg0NTQ0NSwxMzUyMy40MTQ5OTgxODE2MzksMjkyMjIuOTU2OTQ4MzY1NjIzLDI2NTExLjE0NDE3OTU1MjYzNyw1MzUzODguNTk0OTM4NTczMSw2NDY3OTEuOTg2NjI1Nzk1Nyw1MzQ3MTAuNTM0MDAyNTEzLDQ1OTA1Ny4xOTkwMDQ1NjQyNiw0Mzg1MTMuNTA3MTc5NDA2Nyw1NzQ0OS42MTk5MzQwNjYyLDQ5NTY0NS44MzUxNDc5NDM1LDEzMjI4Mi4wMDM2NzA1MjQ4MywzMzAyMDMuMDkxNzIxNDU2NzMsMjg3ODcwLjQwNTY0MzM3MzYsNTcxMzI5LjM0NTI4MTM4MTYsMzc0MTk1LjY2MTI4NTE1MzcsMjIyNi45NTUyNjM1MzI4MTg3LDQxOTUwLjkyNjc3OTcyOTI1LDI2MDIzMi4xODczMzM1NjYsMzI4MS4zNjY3MjgxNTUxODYsNzQ5OS45NTI5NDgwNzI4NjIsODgyMTcuMDk1NTQ0MDU2MjgsMzg3NDQwLjU4NzQzOTc4NjI0LDI3MjI3LjYzNTUwODA4ODI4Niw3MTEuMjExODk4Njc2Mzk2MQorMjgsTW9uIDIxIEZlYiAxMSwxOTIwMC4yMTY5NDYyNTgxLDYwMDguODQwNTYzMTgxNDg5LDExNzYwLjI1OTMzNzgwMjA3MiwzMDMwNi4xMjA5MzcwMDg5LDIyODMxLjgzOTIxNTE3Njc3LDU3OTY3MS4yMTIzODA3OTM2LDYxODA5Ny42NzQ5MDMyMjYxLDUxOTQyMC44MjMzNDM3MDY4NCw0MzYzNDEuMTAyNzM3NTM1ODQsMzg3NjAzLjU5NDIwNTcyNjgsNDgyMzUuOTQwNDg5NDg5Mzc0LDQzMTE0MC42NDQ5NTUxMTM5NCwxMzk2ODMuNzY4MjczNjQ3OSwzNTkzNTEuNDg4OTcwNzI5NiwzMTEwMzcuOTc0ODU5NzM4Myw1MDYzOTkuOTM3NDQ4OTMyOTYsNDMzNzkzLjA0NzcxMzQ5NjUsMzE4NC45MjA2NTEyMDE5MTI3LDYwNDMyLjg2MTMyNjcyODYwNSwyODA2NjQuMDMwODEwMjY3MTQsNDg1Ni4yODk2ODcwOTgxNjUsMTE1MTIuOTA5NjcwNzQ4MTU3LDEyMzc3Ni4zOTMxNDE4MTE5OCwzMjI4ODIuNTQ5NDA5MTg4ODUsMjI3NTUuNzk4Mzc4OTc5NTI1LDY2OS4zODUwNjAxOTY5NjM3CisyOSxUdWUgMjIgRmViIDExLDIwMjMwLjc0NzEzMzI0NzcwMyw3NzUxLjIxNjE2MTQxNDE2NCwxMDA0NC4zODI0OTMwODI3NTQsMzA1NDAuNzQ3ODA3MzYwODE0LDE5MzQzLjYxOTMyMjQ4OTU4Myw1OTg5NDQuNDQ2NjI5NjIyMyw1NzE3MDcuNTg4NDc2MDYyOCw0ODcxOTMuOTMyNjU1Nzk2OCw0MDE3MDUuNjI5NjA4ODUwODcsMzM2MjgyLjkzODgxMTI0MTgsNDAwNzIuNDkxNTc0MjU4NjcsMzY4Njg4LjA3MjY1MTE3NTMsMTQwNjM0LjA0MDgwMjgyMzE4LDM3MjAwMC4xMzA3Njc1MzM3LDMyMTA2My41ODEwMjQ2MDQzLDQ0MDUwMy43MTAyMzU1NTM1LDQ4MDk3NS4yNjA3OTcxMzAzNSw0NTMxLjQ3ODQ1Nzc5NzI2MDUsODUyMzguMjk5NzkyODAyNDcsMjg5NDAzLjc4NzE4MzUwMjE3LDcxNjUuNTQyNDY5MDQzNTE2LDE3NTEyLjg0OTE1MjI2OTg0LDE2Nzk3My4zNzUxNTU1NDc4LDI2Njc0OC44NTMyODE2MDU0LDE4ODQxLjI5NTQ5NTE4ODAyNCw2MTIuMzEzMzM2NzY4Mzc3NgorMzAsV2VkIDIzIEZlYiAxMSwyMDkxNi4yNzE3MDUzOTE2MjgsOTcyNy4zMjI2MzYwMjgyNTUsODQ1Mi40NTIyODM1MzMxMywyOTk3Ny45NzI4Njg0MjUwMSwxNjE2OC45MTU2NTEyNTgyNSw1OTMxMDUuNzE1NTI0MjI4Miw1MTQzNTUuOTM3ODQxNjc4OCw0NDM0OTMuMDc5Mzk5NTEzOSwzNTk5NTkuODI4NzgyNzEyNjMsMjg3MjMxLjA4MjAyOTg5NzI1LDMyOTk5LjAwOTMyMjUyNzY1LDMxMDg1Mi4zOTk5NTMyNDU3NywxMzU3NzYuODg3NjAzNjE1ODgsMzY4MTQ5LjIwMzc2NzE3ODIsMzE3NzY3LjE0OTQxNjcwNjMsMzc3MjI4Ljc4MzgyOTE1MTEsNTEwMjEyLjc1MTY5MDI2MzU3LDY0MTUuMDE3NDI0ODIxODAzLDExNzM4Ni4wMTgyNjE1Mzk3LDI4NjMxNC4wNjQ0MTAwNDE0NCwxMDU0MS4zMDI0OTc1OTgxODMsMjYzNjEuMjM2MTc3MjY4NTE0LDIxOTU0OS41NTcxNTIyNTc3NywyMTg3ODcuNjQzNjc5MzYzODMsMTU0NzkuNzg5MDk4NzE1NjIsNTQ2LjUxMjk1MTAxNDI1NworMzEsVGh1IDI0IEZlYiAxMSwyMTI0My4yNjU3NDM5MzIyODcsMTE4NzcuOTc2ODg3NjQ2NDEzLDcwMjYuNDQ2NTgwMTA3NTY1LDI4NzM2LjY3Mjc2NzIzNjU3NCwxMzM2Ni4yNzgwMjQ4NTg4NDgsNTY1NzQ2LjY0MzAxMjkxMzEsNDUyMTM3LjkyNTU4OTk0MzY1LDM5MzY2OC4yODYyODI4MjI2LDMxNTM0NC42NjIyMDE1ODIsMjQyMTQ2LjIxOTY5MTE1MjEzLDI2OTc2Ljk3OTM0MTIxMjc4NywyNTkwMzYuNTYwMzc4MTUzLDEyNjQ2Mi40MzU1ODcxNDg5NCwzNTAzMTguMzg3Mzc2NTczNiwzMDI5NjUuNTg0Mzk5MzUxNiwzMTg4NjQuMDY1MDI3MjA2Niw1MTg5MjkuOTkwNDI0MjYxMiw5MDMzLjcxNDgwODAyNjEzMiwxNTczMDguMjI2NDMzOTc2ODQsMjczMDAxLjQ2MTc3NjUxMjYsMTU0NTQuODkxNDc3NTYzODM5LDM5MTkwLjk1NTY1NzgyOTM1NiwyNzUyMDQuMjY1NDIwMjczMjQsMTc4MzgwLjkyMzQ3MTMxNTEyLDEyNjM2Ljk3MzA1MDcyMDA1NSw0NzcuNzA4NDgxMjUzMDU5NAorMzIsRnJpIDI1IEZlYiAxMSwyMTIyOC42NjYxOTU3NjM0NCwxNDEyMy42NTUwNDc4ODg0NTMsNTc4Mi41OTAzNTU4ODA2NTcsMjY5NzMuODk4MjgxMzU3NjYsMTA5NDkuMjAyMTg4NjM2MzksNTIyNTY0LjAyODEzOTIxNjM2LDM4OTg0Mi4wNjE2MjA1NDY2LDM0MjE3NS41NDYxMTE5NDYwNSwyNzExMjEuODk2Mjk5Njk0OTYsMjAxOTIyLjAxMjU2NDMxNDg1LDIxOTIxLjg1Njc5MjgwMzEsMjEzNzc2LjI3MTg3MDM3Nzc0LDExNDI4Mi4xODU5NzUwOTY2NCwzMjIzOTMuMjc0NTI0NzY2NSwyNzk2NTYuOTg1MjYzNDQyMywyNjY2MzIuODg1MDE0NjIxNyw1MDc4NjEuMjY3MjkwODkwOSwxMjY0NS40MDM4OTM4OTA4MiwyMDQzMzIuNjgzOTg2NjQ0OTYsMjUyMTEwLjY3Mjg5Mjg0Mzc1LDIyNTYxLjc5MTM4MjM0NTg0OCw1NzQwMi43MjAxMjIwNzMyNSwzMjk2MTYuODExMzA0Nzc2LDE0NDcyMy45OTc4MzU5MDA0NiwxMDI2Mi4yNDkzMTc4NTA2NjgsNDEwLjI5ODc2MzE2MDA0NTI3CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0RlbW9ncmFwaGljU0VJUkRpc2Vhc2VfUktfUmVmZXJlbmNlL0ZsdS9tZW4vSW5jaWRlbmNlXzIuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9EZW1vZ3JhcGhpY1NFSVJEaXNlYXNlX1JLX1JlZmVyZW5jZS9GbHUvbWVuL0luY2lkZW5jZV8yLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMGE1YjYyCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9EZW1vZ3JhcGhpY1NFSVJEaXNlYXNlX1JLX1JlZmVyZW5jZS9GbHUvbWVuL0luY2lkZW5jZV8yLmNzdgpAQCAtMCwwICsxLDMzIEBACitpdGVyYXRpb24sdGltZSxFRy1GUkctRzIxMDAwMSxFRy1GUkctRzIxMDAwMixFRy1GUkctRzIxMDAwMyxFRy1GUkctRzIxMDAwNCxFRy1GUkctRzIxMDAwNSxFRy1MT0UtRzI0MDAwMSxFRy1MT0UtRzI0MDAwMixFRy1MT0UtRzI0MDAwMyxFRy1MT0UtRzI0MDAwNCxFRy1MT0UtRzI0MDAwNSxFRy1MT0UtRzI0MDAwNixFRy1MT0UtRzI0MDAwNyxFRy1MT0UtRzI0MDAwOCxFRy1MT0UtRzI0MDAwOSxFRy1VUEUtRzI5MDAwMSxFRy1VUEUtRzI5MDAwMixFRy1VUEUtRzI5MDAwMyxFRy1VUEUtRzI5MDAwNCxFRy1VUEUtRzI5MDAwNSxFRy1VUEUtRzI5MDAwNixFRy1VUEUtRzI5MDAwNyxFRy1VUEUtRzI5MDAwOCxFRy1VUkctRzMwMDAwMSxFRy1VUkctRzMwMDAwMixFRy1VUkctRzMwMDAwMyxFRy1VUkctRzMwMDAwNAorMSxUdWUgMjUgSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzIsV2VkIDI2IEphbiAxMSwwLjA1MzE1MTAzMDQ1OTg3MzA2NSwyLjI1MTY1NDU3MTg0NzEwNjhFLTQsMC4xMjIyNDAyNDk3MDQ1MzkzNCwwLjA0NTczOTYwMDc5NjQyNzg3LDAuMjk5NzI0NjkzNzQ5Nzg1LDAuMTE3NTA1Mjc5MjYyOTE0NDcsMC44MzEyMzczMTY0NTY0OTM3LDAuNTUwNzA3MjEyOTAyNTAxNywwLjY0Njg5Nzk2ODE5MjExMTgsMTMzOS4zNzgwOTYwMTc4OTk1LDEwOTUuNDEzNjEwMDU5NTQ3NCwxNDUxLjMzNTY2MDQ0Njk1NTQsMC4wMDk3NTE0NDY0Mzg0ODk5OTgsMC4wMTkzMTczNTYwNTUxMDk3NTgsMC4xMTAwMTIzNTE2OTIxNzAyMywxMzk4LjI4NDI2MTc1MTYzMTcsMC4xMDgwMjI3MTIzNjc2MDQ5MSwxLjM0Mzk1MzEyOTUzMjgzOEUtNCw3LjE2MDA4NDIzMzE2MzkwN0UtNCwwLjEwNTkzNjI5NDQ3MTM5MDc2LDEuNDA3ODE5MjQ5NzE0NDQ2M0UtNCwxLjM4Mjc0ODM0MjM4ODE4NjhFLTQsOC4xODg5MDYxODA2OTI5MkUtNCwzODU2MC4xODc0MTUzODc0NSw5MTEuNTA2NDI1NzE2MDE4LDAuMDA0MDg1MDYwMjMwOTA1ODg5CiszLFRodSAyNyBKYW4gMTEsMS4xODQ0NDU1MDY1Nzk3ODA4LDAuMDA1MDYwMDk2OTkzNDkzOTE2LDIuNzI2NTA0MDM1MDY0MjAxLDEuMDIwNTQ0MDMzNjc0MjQsNi42ODYyNDcyMDAwNjkyMjcsMi42Mjg3NDkxNzY3MTExNjI2LDE4LjU2NDM3MTM4NDIxNzk1NywxMi4yOTk3NTc4Njk2NDQ3MTMsMTQuNDQ2MTg3ODMxNjYwNjQ4LDEwNzIuMjgxMTM4Mzg0MTA2LDg1NC41NTUxMjQxNzQ3MDA4LDExODMuNDUzODQ1MjEyNTQ2NCwwLjIxOTcxMDkxMDI2MzI1NjM3LDAuNDM1MzIwMTgwMzcxMjYxMywyLjQ1ODA1MTMyNDM5NDQ3NjQsMTEzMi41NDE2ODc4NjI5ODY3LDIuNDEzNDk2NTYyMTYyNjc3LDAuMDAzMDE1NjAxNDYzNzA2MDU3NiwwLjAxNjE0MDA4NjYwMDk3MjQyLDIuMzY2ODQyNTMwNDAxNzEsMC4wMDMxNjAyMjQ4MTQ5NzQ5OTM0LDAuMDAzMTA4MDg0NzM4Mzk5MDcsMC4wMTg1MzM0NTU4Mjg1MjE5NzcsMjc1NDguNDUxODg5MDc3NTMsNjk3LjIyNjgwNjg0MTI2OSwwLjA5MTAyNTgwNDkxOTIyODUxCis0LEZyaSAyOCBKYW4gMTEsNS42MTI0ODg2OTk0ODU0MjgsMC4wMjQ4Njg5MDEyMDk3MDQ3NDUsMTIuOTgwMDA4NTE0NDE1OTQ2LDQuODU4MDc4MjQxNTQzNjk1LDMxLjg0MDg0MTYyMzkxMDk2NSwxMi42NjY0OTg0MDEwMzYwNDQsODguNzU5OTQxMjgwMzI5NCw1OC44MjA3MzQ0OTUwNDYzNDUsNjkuMDQyMTM4MzEyMTAyNTEsMTQzOC4yNTQ5ODIxNzI2MzIzLDEwNjkuMzI4MTAzNzI4NTUwMywxNjYzLjc3NzEzMjgwNDYxNSwxLjA5MzA0MTIzODAxMTIwNTEsMi4xNjc1MDEyOTYzMTQ4ODM0LDExLjc3NjE5MzQyNjU0MzMzLDE1NjUuMzUyNTYyNDIzNzYxOCwxMS41NjA1Mjg3NzEyMzMyNTgsMC4wMTQ3Mjk5MTA0MjIzMTc5NzgsMC4wODA0ODQ0NjgyODMzMTc2NSwxMS4zMzYyMDQ3MjU3MDI0NCwwLjAxNTQ2NjkxMTIyMjA5NDY1MiwwLjAxNTMwNzgzMDg2MzU5NzM0NCwwLjA5NDExNTcwNTUzNTc0Njk3LDI1OTAwLjA0NDExNTIyNTM4NCw4MjQuMjk3MTYxMDQwMjE1NCwwLjQzMTI4MTA5NjM2NzI1NQorNSxTYXQgMjkgSmFuIDExLDE0LjU1Mjg5NjkzMjY2ODg5MiwwLjA3MTA2ODE3ODIwNDYwOTAzLDM0LjExOTQ3NjU1MDIxODAxLDEyLjc1MDk3NDMyMjU3MDg5NCw4My43NDQxMTgwMjQyODI4NiwzNC4zODQ4MTQ5NzQ5NjA4MSwyMzUuODU1MjgzMjU4Mjc5NjgsMTU2LjM5ODQ3NDcwOTYzOTEsMTgzLjI1MjM4Nzk1OTQ5Njk5LDI1NTYuMDkzOTc1NDE2OTAzLDE4MDUuNzE1MjQ5NjA4OTQ2NCwzMDQ4LjE4MzkyOTE5NjIxMDYsMy4yMjA3NzkyMDU3NzI3NzUsNi40MDAxMjc3NjYxNDM5MzIsMzEuNDY3NjU1NTc2MzA3MDc0LDI4MzcuMDA5NzY0NzQ4MTkwNywzMC44NzQ5MzczMTA2NTI5OCwwLjA0MTQ0NzYyNDAxODEzOTU2LDAuMjM4NTY2MTQ3MDQxMjM3MjQsMzAuMjY5NDYxNjM3NjgxNjgsMC4wNDM3NDc3ODQxNDU2MDcyMSwwLjA0NDAxMTk4OTYzNzg5Mzc2LDAuMjkxMjk2ODk5NzU2NjMyMywzMzUxNy4xMDc3ODU0NTAwOCwxMzMxLjQ3MTcyNTQwNTI4MTQsMS4xMTgyNDA0MzczNjEyMDcKKzYsU3VuIDMwIEphbiAxMSwyOC40ODM2Njk0MzQ5MzkzMzcsMC4xNjU5MTY1ODgwNDU1MzYyNSw2OC42NzA3MDU2OTIwNzc0NiwyNS41NjYzNzM3NjQ5MjQzNSwxNjguNjkzODUyNDM0NjcwMjgsNzMuNTY2MDQwNzY1NDE2NCw0ODQuNTY4NTQxNDU4OTQyNywzMjEuNzIzMTczNzIwMDgxNTUsMzc1LjY1OTAxNzQ3MTQzMjMsNDQxNC4zOTM2NDI5NzAxMzQsMzAyMy4xMDg1MjAyOTQ3MjA2LDUzNDYuOTcxOTcwNDY0NjIzLDcuODg4MTk3NzU0ODg4NDMzLDE1LjcyNDg3NDgwNjE0MTM2NSw2NS4zNTYzNzQyMjExMTM2NCw0OTQ4LjUwMDc0NjkzMDExLDY0LjA1OTQ2MDEyMjE1MzExLDAuMDk0MzMyOTM0NDcyMDMxMzQsMC41ODk3MTgzMDI0OTI1NjQ1LDYyLjc3NzQ0MTMyMzUzODE5LDAuMTAwNDQ2MjMyOTc1MjgwNjQsMC4xMDM4NDk0Nzg3MDg4ODgxOCwwLjc2NTkwNTE5NDExODg3ODksNDg2MzMuNTYyODU1OTYwNDMsMjE3NS4wNjk1NjcwNjA5OTQsMi4xODg5MzMxMDY3NDcyMTg2Cis3LE1vbiAzMSBKYW4gMTEsNDguNjQ2NDMwNTIxOTIzNjQsMC4zNTgxMTE0NzA0NjExNTczLDEyMi40NDY5OTE2ODIxOTg2NCw0NS4zMjY3NDAyODQxMjE2NzYsMzAxLjExOTgzNTU0Mjg3MTY3LDE0My4xMzQ3NTAxNjMyMTQxLDg5MC44NTY0OTAyMTQ2NjcyLDU5Mi41NzU1OTk5NTI1MTM1LDY4OC4zODU2NzQ3OTI0ODIyLDcwNzQuNzAxNjA4OTU4NDE5LDQ3MDIuOTEzMzQyMjg4NzU1LDg2NzguMDcxODQyMDc4MTk4LDE3LjkyODYxNzE2OTg4MjA1MiwzNS44NjE4OTk0MTc2Nzg2MSwxMjIuMDY0NDk5NzE4NzM3NTQsNzk5My41MDU4MDc1NDU0MjksMTE5LjQ2NTgxODQyNTUyNTEsMC4xOTc2Nzk4MjEzNTM2ODM1MywxLjM1NDM0NTQ0NjUyMjMyNDQsMTE3LjAwNDE4MzY0NjQ2NjQzLDAuMjEyNzI5NDAyOTM2MzAxNjYsMC4yMjcyMjY3NTY4Mzc3MDY1LDEuODY5MTM0MDk5NDg1NDYxNSw2OTUyMS4zNzQzNjg2OTU2MSwzMzE3Ljc3NzE2MDYwOTU3NDQsMy43Mzk2NDczNDIxMjczMTMKKzgsVHVlIDEgRmViIDExLDc4LjA5NjI4OTc4MjY2MTg4LDAuNzM2NzAzMzUxOTA3OTM5NSwyMDcuMjUxMjcwNjM3MTY0MSw3Ni4yODEwNTI4MDkzOTc1LDUxMC4xNjE2NzgxNDQ1MDc0NSwyNjcuODM1MzMyNjI4MDIxMSwxNTY1LjM0ODgzNDI3NDU1MDcsMTA0My42MDY5MDE4MTM4ODI4LDEyMDQuOTc5NzgxNDE1NDMwOCwxMDgxNC4wMzAxMDE3NDc5MjEsNjkzMy4wMjY0MzczNTEyNjEsMTM0NDMuNTE1OTUzNDMxNzU0LDM4LjU3NTYxMzMyMzk4Njk0LDc3LjM5ODQ1NDA4MDI4MjIsMjE4LjQ2NjEwNTE2NDkwMjEzLDEyMzIxLjMxODcxMzU3NDU0NSwyMTMuNDU0NjgzNzQ1ODExMjIsMC4zOTU1OTE5MzczNjk5MjU1NCwyLjk0NDEyNzc0MzIyMTMxMSwyMDguOTAzODA0NDY1NTk4MiwwLjQzMDE2ODY2NzI1MzY3Nzk3LDAuNDc0NjgxMTYyMzA4MDkxOCw0LjI3MzEwMDk5NDA1NTkxMSw5NTY1NC43Nzk0MzM5MDU5Niw0Nzg3LjA1OTkzNzU3Njg4Miw2LjAwNjM3Mzc5Nzg0OTQ2NAorOSxXZWQgMiBGZWIgMTEsMTIxLjgzNDE5OTczNDI2NDUsMS40NDYzMjEzNzU4NDc2Mjk0LDM0MS4zMTEzODY2MzAyNzg4LDEyNS4yNDMxOTgwNTEzNzQ0Miw4NDAuNTQ1Mjc0MTg0MTEwNCw0ODguMjU3Njk5MTg3MjQzNjUsMjY4NS4zNjIzMjc4MDcxOTk2LDE3OTQuNzkyOTU3MjU4OTcxNSwyMDU5LjE4NjM4NjM0MDc0OCwxNjEzMi42MjQ2MzYxODMxNjUsOTg5MC43NDIxNDU1MjY0NiwyMDM0MC4zOTA4NzU5Mzk0MTQsNzguNTcxNzUwMjE4Njk1MzQsMTU4LjA4NTg2ODI3MjY5NzE2LDM4MS45MDMyMzgxMjY0NzQxNSwxODU0OC45NDE5NzY4MTMyNCwzNzIuNTIyMTAyNTAxMjQ5MjYsMC43NTgxNTIzNDIzNjE3NzMyLDYuMDU5NTQ5MDE3OTM1MTA2LDM2NC4yODc4MDc0MjcwNjc1LDAuODMyNTAzNzk2NjY4MzY2MiwwLjk0ODExNDE3NDMzODA4NjYsOS4xNzExMDY4NTk5MTM1MTEsMTI3NDk0LjAxMDc2Nzc4NjQ5LDY2NjEuNDIyNDk3OTYxMDMxLDkuMzczNjM5NDU0NzQyMzMyCisxMCxUaHUgMyBGZWIgMTEsMTg2LjY0NTkxNzg4NTA5NzY3LDIuNzE0MTg1NTMyMTE3ODI0NSw1NDkuMDE5OTE4ODk0MzEzMywyMDEuODY3OTA2NDA2NzEyMjgsMTM1MS40NTYxMDAxMDY1MDUxLDg2Ny40NDIwNDkxNzg1NTg3LDQ1MTAuNTg5NDY0NDM0MTQ0LDMwMjIuODM5MDEyMzQ4NTE5LDM0NDYuMTEwMzgxMjY3NDY5NiwyMzcwMi44NDA5NjcxNTIxNDQsMTM3NjkuNjAyMTc0NTM3Nzk1LDMwMzAwLjA3Mjk5NzY3Njk1OCwxNTIuMTUyNjQ2NTE3MjYyNiwzMDYuOTY0MTkwMDk1NjI0LDY1My40ODQ1MDA5NTcxMzE3LDI3NTA5Ljk0NTYwNDE3NTE2Miw2MzYuNDU4NDMwNTk4MDQyMiwxLjM5MjE1MzEyNTMxMjI4NiwxMS44NjczNDE3MDU4NDIyOCw2MjEuODM5MTk5NDA4NzE3NSwxLjU0MzMzMjk4MjYwMjczNjcsMS44MTQ4ODIwMTIxNjM5NTUzLDE4LjY0NzY3NjcyMDIwNDM1MiwxNjU1MjMuMjkxNTE0NDIzOCw5MDE3LjE1ODUyNDc1MTM1NiwxNC4zNTc3MjU3MTM3ODI5ODcKKzExLEZyaSA0IEZlYiAxMSwyODEuNDU2NzQ4NjExNjI1MzYsNC45MDk1MDY0MDc2NjY5MjUsODYyLjA3MTQ0NTMzNDgxODYsMzE5Ljg1MDk5MTM2Mzg3MTQsMjExOC4yMzQ5ODkyMTI0MzA3LDE1MDUuODkyNzY5MzU0NjYsNzQyNi41MDkwNjU5NDIxNTYsNDk5Mi4xMDg3Mzg4MTA3OTgsNTY1My45NTI5MzYzNTMxNDUsMzQzNDkuMjI1MDg0MzE4NjcsMTg3MDEuMzY5Mjc4MTkzMjk1LDQ0NDY4LjIzODk2Mzc4ODQzLDI4My4xNTQ3MjQzNjU2NjQ5NSw1NzIuODg5NzgxNzE2NDU0OSwxMDk2LjM4NDY3MzQxMzA5NDgsNDAyNDYuMDAyMzA4NjU4NTg2LDEwNjYuMzY3NzA4NDg1MTE3LDIuNDY2MDMzODEyMjI1NDU5NywyMi4zNjY3NDUxNTg3NjA3MjUsMTA0MC43ODI2OTM0OTY4NTIzLDIuNzYxMDM4MjY1Njg3Mjc5NCwzLjM1ODk2MzEwMDI3NjE5OTUsMzYuNDIyMDI0Nzg3NTM2NCwyMDkyNzQuNDcwNTM2ODIxNzMsMTE4NzIuNTQwNjEyOTUyNzQsMjEuNjIyMjE4MDIxODg3NzE1CisxMixTYXQgNSBGZWIgMTEsNDE2LjI4NzU2MDk3NTc0MTM3LDguNTk2NzQ2MzYxMjE4MjI2LDEzMTQuNDEwNjY5NTg4ODQzNiw0OTYuNjM2MjA2NTM0NzYyNSwzMjE3LjcwNjQyMDc5MTcwNiwyNTUzLjI4MzgxNzA0MDg3MiwxMTk1NS4yMzYxNzYxNTk1NzEsODA2NS4xOTA2NDYzNzMwMyw5MDcwLjU3NDg4ODk4ODAwMSw0ODgzMC42MzczMDE1NDc5MSwyNDU3NS40OTA4Njc1MDEzMjUsNjM5MDcuMTAwMzkxMDIwODksNTA4Ljk4MDkzMTgzMDExNjEsMTAzMi45Njg2NTkxOTk3NTMxLDE4MDAuNjg1NTAyMjgyMTM3Niw1Nzc2NS4wNDg3OTQ5NTE5OCwxNzQ5LjQwNzE5NDM2MjgyMzcsNC4yMjkyMzExNDQ1MjIzNzQsNDAuNzg0Njc2MjkyMTA3MzIsMTcwNS4xNjU5MzQ2MTQxNTk0LDQuNzg1MzQzMzE5NjUxMDgsNi4wMzU5OTkyNDExOTY2MTk1LDY4LjczNjUzODcxMjAxNDA0LDI1NTY4NS41ODQ1NTQzNzAyLDE1MDgwLjM4NjM1MzIxODk2NiwzMS44NzA3MDQ5MTU2ODI0OTUKKzEzLFN1biA2IEZlYiAxMSw2MDMuNDUyMzg0MTk0MDgxNywxNC42NzYyNzE5MDIwOTU1NjMsMTk0MS41NDk0MDc5Njg4NDEzLDc1Ni4wMzQ2NTgxNzg2NDU1LDQ3MjIuNTk2Njc1NzcwMTUzNSw0MjQyLjg1OTI2MTE3ODIwNywxODg0MS4wNzYzODA4MTcwMTYsMTI3NjYuOTM3Njg5MjUwMjYyLDE0MjQ2LjAwMTcxMjk0MjU1Miw2NzgzMi43NTE2ODIwOTI2OCwzMTAwNC40NTMzNjEyMjU2OCw4OTU0Ni43MTE3MjQyNDY5Miw4ODkuOTYxODExOTY0NjIyNywxODEyLjMzODQwMjM0OTA2MzIsMjkwMi4yOTIyMzg3NzI1MjkzLDgxMDQ2LjY3NTM5MTQ2NjE3LDI4MTcuNDMyMDI0MTgyODQsNy4wNzA0MTMzNzU1NjAxOCw3Mi40ODcyODE0NDA4NzczNCwyNzQxLjI2ODQ5NjI3NDM0NjUsOC4wOTEzMjE1NzczMjU3MTcsMTAuNjA0Njk5NTIyNTU4ODg1LDEyNi4yODE0NzkwNTE1OTcxLDI5OTQ3Ny43NTE1NTAyODc3NiwxODMzMC4yODE4OTY5MjM5OCw0NS44OTE3ODUzOTAzMzM3NDQKKzE0LE1vbiA3IEZlYiAxMSw4NTcuMDgxNjA3MzEwNDAwNywyNC41NzE1OTgyOTEzNjgzNTcsMjc2OS41NDkyMjM3MjE0NDksMTEyOS4wNjM1NzY2NzUyNjgsNjY2OC43NTE0NTU5NTIzNSw2OTMyLjM3OTk0MTAwODkyNywyOTA5OS4xNTEzNzc5OTE2ODYsMTk4MzAuMTUxNzQwNDg0OTEsMjE5MjUuNDI0Mzg5MDE3MjY2LDkxNjg2Ljg0NjM0MTE0Mzk2LDM3MjQxLjEwMzQyMDY5NjAyNSwxMjE3MzAuNjY3ODA4MTg3NjMsMTUyMS43NTc5NjM1ODM2Njc2LDMxMTEuMDg1MzUzMjEyODQ2Nyw0NjAyLjU0MTk3MzIwOTA4NCwxMTA3MTMuNTM3NjQ3NzY2Miw0NDY2Ljk0NDI1MDkyNzgyMSwxMS41OTAyMDYyMTA5Nzc1NTcsMTI2LjM0MDk3ODc2Njc4NTk1LDQzMzUuMjM4MjU0NDIwNDIzLDEzLjQyNzQ3MTgzMjgyNjY5NSwxOC4zMjQ5ODMwNzM0ODQ3MDYsMjI3LjIzNTg1NjQ3MzcxNzQzLDMzMzQ5OC4yNzg1ODMyOTIyLDIxMTQzLjQ3NzgwOTY4ODUsNjQuNDUxNDYzNDMyMTg2NzgKKzE1LFR1ZSA4IEZlYiAxMSwxMTg4LjM5NTgxMjc3Nzc1MjMsNDAuMzIxOTgyMDQwNzk4MTA1LDM3ODIuOTk2MzUzMjIxNTAxNSwxNjQ3LjU4MTc5NTA1NDQxNzYsODk3My43MDAyODU4NjgwMTcsMTExMDkuNDQ2NTY2NTMxNTU4LDQzODUwLjYyNjExNDAxOTE5LDMwMTA0LjMyMTk2NDIzNTk5NSwzMjkyMC45NTI2NzM3MTcyLDExOTYyMS44ODkwMjM3MzA1Niw0MjE1Ni45Njk3OTQzMTQzOCwxNTkwODEuMTY2NjE1OTgyNzQsMjU0MC4yNDQ4MDI0ODUyNjYsNTIxNy4zNzcwMTY5Nzk1MjgsNzE2Mi43MDA0NzE4MTYzMywxNDYwODkuNDk2MzUwODgyOTIsNjk1Ni4zODk2ODg3NjA2MTYsMTguNjI2MDg5MTY2ODU5MzAyLDIxNS44MDY2NTgxMTc5NDk5LDY3MjYuNzMzOTYyMDY3MzU1LDIxLjg2NjA3MjExNzE4MjYwOCwzMS4xMjc3MjQ5OTM4Njc1MTcsNDAwLjEzMzExODY2NzQ1OTcsMzUwMDMyLjIxNzc5MDU5MjgsMjI5MjkuNDMyOTEzODcyMDUsODcuODYzMTQ1ODUxMzU0MTIKKzE2LFdlZCA5IEZlYiAxMSwxNjA4LjE1NTQ0NDQzMzA3NDUsNjUuMDcyMzQwOTcyNTAwMjYsNDkxNi4yNTY3NDcwMjk3MzIsMjM0Ni45MTA3OTgzNzQ1NTEsMTE0MjAuOTI0ODA4NTAzMjUyLDE3NDg0LjExOTc2NjA2ODY1Niw2NDM3MS41MDIwNzk0NzM0Myw0NDYyNC4xNzYxNDM0NDAxNSw0ODE0MS4zMDYyMjk3OTI2MiwxNDk4MTQuODgxMjg3MDE5MzUsNDQ3MTQuMTAyMjc3MDY4OTcsMTk4NDgxLjg0Njk3NzMwNzgsNDE0Ny43NzkwMjYxNDk5NzEsODU2Ny45OTI5MTI4NTA0ODgsMTA5NTAuMTM4NTEzMDkyODI4LDE4NTE4MS4zMjU2NDE4MzM2NSwxMDY1Ny4xMjI2MzkxNzEyNywyOS40NTM2ODI5OTk3MzQ4MTMsMzYyLjY2OTA0NTQ4MjkzNzIsMTAyNTAuMjk0NTA5MzkwMTg5LDM1LjA3ODE0MTY5NzcwMjcyNiw1Mi4xODQyMzMyODcwODQzMjUsNjkyLjIxNzE0MjU3MzE5MSwzNDUwMTIuMjEzNTk5ODAyOSwyMzI3OC41MjI3NDAwOTAwMDQsMTE2LjE0MDY2ODQ4MTI1MTUyCisxNyxUaHUgMTAgRmViIDExLDIxMTkuNDg3ODMxNTIwMDM2LDEwMy4yOTg2MzQ1MTk5MjUzMyw2MDIxLjI0OTIwOTQwNDY2NCwzMjUxLjE1MjIxMDMxNjU4NTgsMTM2MTAuMzA3MjAyMDQ3NzAzLDI2OTY5LjQwMjg1NTQ2NjMsOTE1NzAuMjEwMzgzNzUwMzUsNjQyOTUuMjg3MzI4MTY1OTEsNjgxOTEuOTI3OTU3Mjc2NzYsMTc4NzQ0Ljk5MjI2ODk4OTE4LDQ0MjYxLjY3MTI4NDQ1MTksMjM0Mjg3LjQ2MDk2ODIzMTQ2LDY2MTEuODAwNjg5MTAyMzE4LDEzNzU4LjU5MDE5ODMxNDgyNSwxNjQxMi42NjEyNTk1NjMxMTIsMjIzNzI3LjQwODYyMzA3ODUyLDE2MDQyLjQyMzAxNzYxNTkxOCw0NS44Njk4NzczODQ4NjM0Niw2MDAuMDkxNjU3OTQ1NDk3NCwxNTMwOC41NTEyNDI4ODcxNzIsNTUuNDk1MDIyNjY5MDA1ODcsODYuNDI5NDI3NjcyMzYwMiwxMTc3LjI2MTM3OTY0MjMyNTcsMzE5MTUwLjcxMzU5NDc3MzI2LDIyMDg4Ljk1MzQ4MTIyMjkxNCwxNDguNTAwODkwOTEyODIzOTYKKzE4LEZyaSAxMSBGZWIgMTEsMjcxNi4xMzMxMDkzNDAwNjYzLDE2MS4zMTYxNzk3NzQyMjk1NCw2ODg2LjQxMjUyNjg0MjA5MSw0MzYyLjgzNDE5OTA4MDcxNCwxNTA1My42NDMwNjUyNTczNzYsNDA2NjYuMjc5NTQ4ODg2MzU2LDEyNTQyNC4wMjAzMDI4NDczNSw4OTUzNS45Mjc5ODg1MDgsOTI5NDYuNzY4Nzk4Mzg2MDQsMjAxNzIzLjU1MzU0NTQxNTEsNDA5MTYuNTIyMjUzNTYzMjY0LDI1OTQ3Ny42NzEyNzEyMTU0MywxMDI1Ny45ODExNjY1OTEzNiwyMTU1My42OTQxMDg0NjYzMzQsMjQwNjIuNDUzNTI4NjEyMzk3LDI1NTY3MC40Mzk2ODIzMjMsMjM2OTkuOTc0ODQ1ODY5ODg1LDcwLjQyNjMzMDM2NDg3NDQsOTc4LjQ0MjA5MTU5MzkyODUsMjIzNTQuMDYxNjE2MjM1ODE2LDg2LjY4OTUzOTIzODM2NjM4LDE0MS41ODc3MzMxNjM1NDgwMiwxOTY5LjQwNDIwNDY5OTIxOTUsMjc4MjE4Ljc4MzUyMjI3MTIsMTk2NTYuMTYyOTkyMjAxMzA1LDE4My4zMjY4ODAyOTk3OTA3NgorMTksU2F0IDEyIEZlYiAxMSwzMzgwLjA0NjU1OTI5ODUyMzMsMjQ3Ljc1NzY5Nzg1Nzg4NDQ0LDcyOTkuNzI1Njg0NjMxNzg2LDU2NDkuMzY3OTA0OTkyMjgsMTUzNjQuMDY4MjA3NTcyMzgzLDU5NzE4LjQ3NDM0MzYyMDc5LDE2NDE1MC4zNTg3Njc0MTE2LDExOTY2Mi42NTYwOTc1OTg5MSwxMjA5MzUuODk2OTUzOTM1MDEsMjE0MDg4LjIwNjI2MTc2OTU4LDM1NTEzLjUwMzMxMzc4NDAzLDI2Nzk3MS40MjcxMTk3MDkyLDE1NDE2LjgzODg3MzQzNjY1NCwzMjgxNS40MDM1MTAzMTA2OCwzNDM5OS43NDI3MTcxNDg1MywyNzQ1NjguNDQ2MDc0NzA4MTMsMzQzMDkuMTI5OTk1NzE3MzU0LDEwNi43MDkwNjgxNTUwMTMwMywxNTcyLjg2MjE2NTk1MDE0NjQsMzE4MTUuNzA0NDQ5MDk3NDYyLDEzMy44Nzg0MjQyMTY1ODAzOCwyMjkuNjU4MTQ1MjAxMTAzNTQsMzI0MC44MDczNzAwODIyMDU2LDIzMDQ0MC45NzUyNjc0NTUyLDE2NTMxLjE2MzczODgwNTk2NCwyMTcuOTk3OTUwMjU2MTcwMDEKKzIwLFN1biAxMyBGZWIgMTEsNDA4Mi43Mjk0OTQ1MzAwMDksMzc0LjIwMDA2OTg1MTQ0MDQ1LDcxNDYuMjAxOTg1Nzg3NjQ4NSw3MDM3LjA1ODEzMDk2MTg2NCwxNDQ1OS42ODU3MTc1MjIxOTgsODUwMTYuMDA2MzI4NzcyMiwyMDM1OTMuODQ4ODk5NDAzODUsMTUyMjczLjA3NzI5MjU3NDM0LDE0ODkzMC4yNjMxNDYyNDYwMywyMTI5OTAuOTUzMTAyNTM3NjMsMjkyMTIuODU4OTc2OTI1NjMsMjU3NDYzLjMxNjkwNDMwNjEsMjIzMDkuNDA0MTk5MTgzMDUzLDQ4MzE3LjI1NTkwMDU4MTcyNCw0Nzc4MC40NzMzOTc3ODY2MywyNzYwMDguOTA2OTc4MDM5MTMsNDg1OTUuNjgyMjk1MzQ1MzIsMTU5LjgxMDcxNjA2OTc2ODE4LDI0OTQuOTA4NzQ1NDA4MTkyOCw0Mzk3Ni40NTA1OTM0Njc3NCwyMDQuNzcyNDAwOTkxMjc3NCwzNjkuMzk0NDI4MzE4MjgzNCw1MjQ2LjgyNjQ3MTUzMzUzOSwxODMzMDUuODExNjc4ODM2MiwxMzI4My4zODEyNTc2Mzc1MzcsMjQ4LjgwNjcxNTM2NTMxNjU2CisyMSxNb24gMTQgRmViIDExLDQ3ODQuMTEwNzUxMjQwNzE3LDU1NC40MzU3OTMyNDI0MDk1LDY0NjkuMTQzNTE3ODA3ODM0NSw4NDAzLjgwMDk4NTA0NTUxNSwxMjYxMC4wNzE5NTEyNzQ5OSwxMTY0MTEuMzk2NjY2MTI1MzgsMjM3MDAxLjg4ODg4NTM1MjgyLDE4MjY2MC40NzcxMTcxNTEwMiwxNzE4ODUuMzM4MDk2MjA0NywxOTg1OTAuNTUxODE2NTkxMTUsMjMwNDIuOTEzNjAxNTMwNTQ1LDIzMDYxNS4zNTExNTA4MDg1LDMwNzgxLjExMDEwMTQ1NjI1Miw2ODIwOS4zNTcxMjYzNjE1LDY0MDU4LjI5NDc1MjY5NjY0LDI1OTQ4OS43NzE2NDE5NDM5NSw2NzA3OC40ODg5NzQ2NjE5LDIzNi40ODM1NTEyOTAzNjk2MywzODk4LjQ1NjMxMTkwNzkzNzYsNTg2NTMuMjkzNzU3MDU1NCwzMTAuMTMwNjgxNzM5NjAxMiw1ODguNTk3NjU4NzE2NTI0Niw4MzM0LjEzNTUyODExNTM0MywxNDE2NzYuODI5OTI0NzMxMjUsMTAzMjMuMjc3OTYxMzQzMzY1LDI3MC43OTM4MjY2MzUwNTQ1MworMjIsVHVlIDE1IEZlYiAxMSw1NDUyLjY5NDY3Mzg4MDEwNSw4MDcuMjUwMzk1MzI5NzMyOCw1NDYwLjY1MDA5ODg0OTAzNSw5NjI0LjY0NjQyMDk1OTcwNywxMDMwNi42NTY5NDI3MTU1OTcsMTUyNTA0LjUyNjg5ODA2NjIsMjU3NDY1LjI1MzM2MTI5NDcyLDIwNTE4Ni41MjAzNzg3MTg1MywxODQ4NjEuNzE4MzA3MzIxOTgsMTc0NDAwLjc3MDIyMjkyMTc3LDE3NjQwLjA5NzI4NDI1NzkwMywxOTQxNDEuMTA3NDc1MTI2NTcsNDAyMDMuNDg4MzI4MjEyMzYsOTE3NzEuMDk5NTA3OTg2NCw4MjU0MS40ODczMjkzNTQ4MiwyMjkyNTMuMDg3ODcwNjU4NDMsOTAxMjguMzY4MTI0MDA5OTIsMzQ3LjIzMjM5OTQ0MDQ0NTMsNjAxOS43MjI4MDU5OTEwODEsNzUxNzUuMTk3OTM5NDE2ODQsNDY3LjIxMDMwNTQ0ODIzMjY1LDkzMy4wMzE2MTI2MzA4NDc5LDEzMDE0LjExMTQwMDg1MzY0NiwxMDc0ODIuODk3Nzc5NDc5NDgsNzg0Ni41MjE4MDQ4MzAyNDksMjc5LjUzODc0MzY5NDI5NTE0CisyMyxXZWQgMTYgRmViIDExLDYwNDUuNjc5NjExNDc3OTY5LDExNDguMjc3ODU0MjQ2OTQxOCw0MzQ5Ljk1NDE4NDY0NzU5OTUsMTA1NDMuMDcxNjYxNTc3NjAyLDgwMDkuMTgwMDkxNDkyOTM0NSwxODg3NzIuNjI3MDUzNzg0NjQsMjU5MTc5LjcyMTQ3OTczNzcsMjEzODgzLjY4Mjc1MDAyOTI2LDE4NDA1Ni41MTkwMzkzMTYxMywxNDUyOTAuMjc4OTI0MTM3MSwxMzI2Mi4zNTk3NzEyMjg4NCwxNTUyOTUuMzQxODIzMzczNiw0OTAxMS40MTE3NDUzODg0NSwxMTYwNzMuODU5NzUxMDI3MjgsMTAxMDQ0LjY0OTk1Mzk1NTIsMTkxNzM3LjIwODM2ODc1NTIsMTE2ODQyLjYyMDg4NTYzNTAzLDUwNC40NDQ3MDYyNzM0MjgsOTEzNi45NDk5OTYxMTkzMDksOTE1NTguOTM3MzI0MzM4NTksNjk3Ljk4MDQxMTA2MDQ4NzgsMTQ2NC42Njg5MzYyMzU2MjY3LDE5ODM5LjY3MTQ3ODgwODc2Nyw4MDgyMi45MjMwMjY1NTk1NCw1ODk1LjM0MjIyOTIyNjY2NiwyNzEuNTY2OTY5NTA3NDcwOAorMjQsVGh1IDE3IEZlYiAxMSw2NTQzLjk0NTMyNjM4MDE1NiwxNTk3LjA2OTQxMzEzNTI0NDMsMzMyMS42MDUyMjMwMTI5MjUsMTEwNjguNzc1NTQ2Nzk5Mjc3LDYwMTIuMzIyNjEwMjM2NjI2LDIxOTM4Mi4yNTcxOTEwOTQzNywyNDIxNDEuNTI5ODg5MTYxNywyMDY3MzYuMzc0MzM0NjIzNzUsMTcwMDMyLjk2NDkzMDQ0NiwxMTYwODIuNzk1Njc2NzQyMDgsOTg3Ni45MDk4MjE4MDc4ODcsMTE5NjU4Ljc2ODIzNzY2NjQzLDU1Mzg4LjczNDYyNDMxNjc2LDEzNzA0MC4xOTE1MjYxMzQ1NiwxMTY3NTkuNjczMzAxOTExNywxNTM1ODkuMDUyODY0NTMwNzYsMTQ1NTQxLjIxODcyNzQ1NDE0LDcyOC4xOTg1ODU4ODIxOTU3LDEzNjY1LjY0MDc3NzgzNTQ2MiwxMDUzMjUuMjg3MTM5Mzg2ODQsMTAzOC43MjI4ODA1MjQ3MzE5LDIyODUuNTI1NDU3OTcxNDI3LDI5NTUzLjc2NTY5MDUwNzE5LDYwNTc4LjU5MzAxNzkyNDA0LDQ0MDcuNjIxMDk4NTg2Nzc0LDI0OC4wMDU1MTg4MjU4Nzk0CisyNSxGcmkgMTggRmViIDExLDY5MjIuMDk5Njk0NzAxNjg2NSwyMTY0LjA0ODEwNTUyNDY5MzcsMjQ2OC4wMDg5MDY3NzgwOTIsMTExNDAuMDEyMTgxNDkzMzE1LDQ0MjIuODkwMDE1MTM2ODUxLDIzNzM0MC42MjU2ODAwNTM0MywyMTA4ODcuMDI3NzIyNzc5MjIsMTg1NjQyLjgzNzQ4NTYwMjksMTQ2NTMwLjc2MTE4NjgyODkyLDg5OTM1Ljk0NzE1NTk1NzUyLDczMzcuODA5NTI2MzA1MDk4LDg5OTczLjIwODI4MTE1NzYsNTc1OTYuNzI3MjgzNjM2MDIsMTQ5NjI5Ljc3NjYwMjM3NDEsMTI2MTcwLjMxMjM3MTA0NTY5LDExOTI1NS4wOTk5OTIwNTc1MSwxNzI2MjAuNjE2NzE3NDU2MTcsMTA0NC42NzAxMTAxNjM5MjA4LDIwMDg4LjU0NTk1OTk1OTMyNywxMTM0MjcuNzc1NDUwNTc2OTMsMTUzOS45MDIwOTE1NDM5ODI0LDM1NDAuNDg1NjYzMDQxMjQzMiw0MjgzMi4yMDY4NjQ4NzY3MSw0NTQ3MC45OTc4ODkwMzA5LDMyOTcuMDg3OTkxOTE2NDUzNiwyMTMuMzA4ODgyNjgyOTQ2MTIKKzI2LFNhdCAxOSBGZWIgMTEsNzE1OC45NTUwODQ2MDE0MDQsMjg0OC44MDIzMDI1MzExODUsMTgwNy42NTUwNTczNjAwODYsMTA3NjMuNTY4NzI4MTU5NTc2LDMyMjUuMjgxNTM5NTg1NzA3LDIzNzk3My42MjQyMjQ4NTYzLDE3MjkyOS4yMTE3MTAyNzQ3NywxNTYxMDYuNDU2ODMwNzYzMzUsMTE5MDc3LjMzNDQ3NTgwMTEyLDY4Mjg1LjkzOTU5ODk4MDEsNTQ2My4wNzkwODc3ODI3NDIsNjY3NjIuMDgxNjEzOTkxMDIsNTUwMjcuNjU2NjkxNTkzNjcsMTUwMzg0Ljc3MjgzMTU5ODQsMTI2NzM4Ljg5NDk1NTUxNDY1LDkwNzkyLjYyMDA2MDE0NTIzLDE5MzMwOC45NjQyNTUzNTMzLDE0OTAuNzIxNzY5Mjk1MjQ3NywyODk2Ny41ODQxNjEzNDgyNjMsMTEzNzE4LjUyNDg3NTYzMDQsMjI3Ni4wNzAzMjY5NTU5NDc2LDU0NDIuMDMwODQxMDY2MzA5LDYwMTY1LjQwMzU5NTI5MDU3NiwzNDI3MC41Nzg0ODgxMjQ2MSwyNDc1LjYyNDUxOTI3OTU1ODYsMTc0LjA3NzExMjU5NDQ1OTc4CisyNyxTdW4gMjAgRmViIDExLDcyMzcuMjk3MjQzNTY1OTE2LDM2MzQuMjgwMDQwNjc4NTMzLDEzMTcuOTgwMDc2NjczMjU3NiwxMDAwOS4xNzY5NjY2MTAzMDgsMjM1MC40NTIyMDg4MTE0MDU0LDIyMTIyMS4xOTM1Njg3NTM4NiwxMzUyODcuNzQ4MjY2NzY2MjYsMTI0NDMxLjU2NDg4MDM5MDQ4LDkyNTEyLjU0NDgxNTgzMTQxLDUxMjY4LjUyODY3ODIzMzY5LDQwODcuMDM2Njg0NDA2MDgyNyw0OTMwNi4xMzEwMDI3MzY1MSw0ODUzNS41ODU5NDE4MTMwMywxMzkyMjMuMTkwNTYzMTY4ODQsMTE4MTY3LjQyOTk2MTQ5NzA4LDY4NDI5LjUyNTkyNzQxNDEzLDIwMjkxOS40NTY2MTU0NTE0MywyMTE3LjE0OTIwMzExMDYyMyw0MDg3MC42MzAwOTcxMTI0NywxMDU5OTcuODUyNTQ0NDM1ODIsMzM1NS42NjM1NDM5MzM3ODk3LDgyOTIuNDEyMzM1NTEwNjUsODE1MTkuODQ0MzA3Njc1NSwyNTk3MC4wMDY3NjA5NDIyMiwxODY5LjA5ODgxODc5NDgyOTQsMTM2LjI4MDkyMjQ2NzM2MTA1CisyOCxNb24gMjEgRmViIDExLDcxNTEuNjcyMTUyMTY5NzI4LDQ0ODUuODg0OTA5NDA5MDQxLDk2Mi44Nzc2NTgxNDk0ODc3LDg5OTMuOTM1ODU2MzIzNTY2LDE3MjAuNDk2MTI5OTM1NjEzLDE5MTc4OS45OTA4MzUyNDU1NSwxMDI0MTguMTE0MjY4NjQ4NzEsOTUzNjIuNDMxNzExMDM2OSw2OTcwNC42OTA0MzQ0NzcxLDM4MzI0LjgzMTIxMzU0NjgsMzA3Ni41ODQxNzk1NzkxMDksMzY0NTQuNzYwNDQ2ODg1MDQsMzk5NTMuNzgwODkxMTQ3NzMsMTE5NTQ4Ljg3NDg5Njg1OTAyLDEwMjY5My4yMTU2MzE4MDQwOCw1MTQyMS44ODIyNTYwMzQyNCwxOTg4NDAuOTM5Mjg1NDA3NywyOTkzLjIwMzkxNjg5MTc0NTQsNTYyMzguODY0MDA2MzE5MTcsOTIyMzYuMTQyNTQyMDQ1OCw0OTM1LjIyODU2NDQ4Njk2NSwxMjUwOS4xNjUwNjg2Mzc2NSwxMDU4OTkuMTE3NjI0NzIxNzUsMTk3OTguMTQ3NTI1MTg4NzY4LDE0MjAuMDg3NzUyODI0NDYzNywxMDMuNjIxNTkwNjM2NjIxMjgKKzI5LFR1ZSAyMiBGZWIgMTEsNjkxNi4xMzg3MjY3NDM4NDUsNTM1Ni40NTA4Njk1NTg1OTcsNzA3LjU2MDExODQ0MzczNTUsNzg1Mi40MzcxODAwNjM0MjIsMTI2OC4zNjE1ODk0MTIwODcsMTU2NzU0LjgzNDMwMjA0NjA1LDc2MDE0LjA2NjAyMzQ3NjQsNzEyNTMuMjMwMjkwMTQ4NSw1MTU5My44NjYxOTExOTE5NCwyODY2Mi4xODI5MTc0NzMxNCwyMzMxLjQ4NDEzMDUyMTAxMDIsMjcwNzguMTA0NTczMTM3NzgsMzExNjEuMjUyNDkwOTk0ODksOTYzOTYuMDY1MzQzNDE1MjYsODM5ODguODE3Mzc3NDM2OTQsMzg3MDguMTEwMTg1NDk0MzUsMTgxOTY4LjUyMjQxMjIxMTU4LDQyMTEuNzYwMjAzMDE1MjgxLDc1MTYwLjAyOTYwNzgzNzAyLDc1NjI2LjQ1OTcxNDYxMzk5LDcyMzguMTAwMTg3NTA3Njk1LDE4NjQ1LjgwMDY5NTQzOTQ5LDEzMDkxNC4xOTAwNzQzMDMwNiwxNTE4NS4xNjQ3MDc3NTgxMTEsMTA4NS45OTAzMTkzMTk1MDE5LDc3LjQxMzY1NjQ3ODA4Mzg1CiszMCxXZWQgMjMgRmViIDExLDY1NjUuNDMxMjQ2NzA0MDA0LDYxOTUuMTMwMzc1ODA1Nzg0LDUyMy45NDU3NjczNDAzMTQ1LDY3MDMuODY2NTYxNzIzNzE3LDk0Mi43NDEzMDk5NDg3NDYsMTIyNDcwLjQ5NDMwMTAxMjQxLDU1ODk5Ljg5ODI3NTU4MDI5LDUyNTI1Ljg2MzY2MjI4NzQwNCwzNzg5OS42NTA4NjY5MzIwNywyMTUxMC43NDQ3OTMxMTMyNywxNzc4LjcyMDY2MjIwODExNDYsMjAyNDMuMjYzODM5OTI4MzY4LDIzNDA4Ljc2MzMyMDYzMzQyNSw3NDEyOS40MjI1MTQ2OTMzMyw2NTUxMS44NDI4ODg1MTQ2NiwyOTI2Ni40MTUxMTIxMTIzMzYsMTU2Mzk4Ljk5NTEyMzkwMDk3LDU4OTQuMjkzODUxMzg4Nzk1LDk3MDM5Ljk2NzYxMDg4Nzc2LDU5MTgxLjI3OTc1MDA0NjU2LDEwNTc3LjE1ODM1MzczNDY4NywyNzM5Mi42MTkwNTQ4MDkwNCwxNTI3MDIuMjQzMzQ3ODgyOTYsMTE3MTYuODM5NTA4OTgyNjE5LDgzNS44NjIxOTM3NzEzMDQsNTcuMzY0Mjk1MzEzMzgzNjM2CiszMSxUaHUgMjQgRmViIDExLDYxNDcuMjUzMjA2MTk0Mjc2LDY5NTQuNjk4NjQxODA3NjU4LDM5MS4xOTQ4NzA5NDk3NjU4Niw1NjMwLjI2ODAwMDQ4MTczOCw3MDYuNTg2MjMxMjMzNzMyMiw5MjgwMi40ODAwMDg5MDU4Myw0MTA0NC40NTYwNjEzMzY5OSwzODU0Ny40NTQyNTIxMzA3OCwyNzgyOS4xMTYyOTExMzE0MSwxNjIyNy4zNDEyMDk5Mzg1OSwxMzY1Ljg5MDMwMDA1NzI4NjgsMTUyNDIuMDQ3OTY0NjA5MDQ2LDE3MTk3LjE1NjIxODQ0Nzk1LDU1MjQwLjYxNTUzMDg2MzYxLDQ5NDQ2LjUyNzEwMzAwMzg5LDIyMjUyLjg2Mzk0NDc3NzE2LDEyNzUyMC4xMTk2NzIwNjY5MSw4MTkzLjU5NzIyMTIwMTYxNSwxMjAyMzcuMzkxMzgyNjk4OTMsNDQ4MjQuODY2NDA3NjI1NTcsMTUzNzguNjk4MTgwNDk4ODk3LDM5NTI5LjU5OTkyMTE1NTIwNCwxNjY2NjAuODE4OTEyMDcwMyw5MDkzLjUyNjEzNTQ0NTA2NSw2NDcuMzk4OTg5NzY1MDE1OCw0Mi40NTA4NDYyMjc4Njk5OQorMzIsRnJpIDI1IEZlYiAxMSw1NzA5LjMzMDU3OTY4NjYyMjUsNzU5Mi44ODA4NDUxNzQ4NzcsMjk0LjQ2ODIxNDMxNjQ0OTc1LDQ2NzIuNzA1NzM2NTUxMzczLDUzMy44NTcxNDU3NjE2NjgyLDY5MDk5LjgxMTgyNjI3MDgsMzAyMzguNzEwNjQ2ODk5MSwyODMzNC41NjI2NTQ3NzI2OTMsMjA1MTguNjMxODgwMjE0OTUsMTIzMTQuNDE0OTA0ODg0MzM2LDEwNTUuNTExMjgyMzk4NjQ5OSwxMTU1OS4zNDY4NjAwNDI5NzMsMTI1MDcuNzcwNzIwMTU5MDg0LDQwNDUzLjg5MzAzMjAwMzU2LDM2NTk5Ljk3MDU4NTU0OTYsMTcwMjEuMzc5Mzk0NTMzNTAyLDk5ODkyLjY4MjM3MTEwNjgsMTEyODkuOTU1MzAzNTkxNTYzLDE0MTg3MC43MjU3NDIyMDEwNiwzMzI5MC45OTA2NTI5ODM5LDIyMTk4Ljg0NzA2ODk2NTgxNyw1NTc4Ny45ODg0OTgwNjAxODYsMTY5MTI5LjM3ODEzNzk0NjQyLDcwOTcuOTg5OTY5NjM0NjEyLDUwNC41MTU5OTQ4OTcyNTY2LDMxLjUxMDAyNDI5ODY1NDE5CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0RlbW9ncmFwaGljU0VJUkRpc2Vhc2VfUktfUmVmZXJlbmNlL0ZsdS9tZW4vUG9wdWxhdGlvbiBDb3VudF8yLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvRGVtb2dyYXBoaWNTRUlSRGlzZWFzZV9SS19SZWZlcmVuY2UvRmx1L21lbi9Qb3B1bGF0aW9uIENvdW50XzIuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM4ODI3NTUKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0RlbW9ncmFwaGljU0VJUkRpc2Vhc2VfUktfUmVmZXJlbmNlL0ZsdS9tZW4vUG9wdWxhdGlvbiBDb3VudF8yLmNzdgpAQCAtMCwwICsxLDMzIEBACitpdGVyYXRpb24sdGltZSxFRy1GUkctRzIxMDAwMSxFRy1GUkctRzIxMDAwMixFRy1GUkctRzIxMDAwMyxFRy1GUkctRzIxMDAwNCxFRy1GUkctRzIxMDAwNSxFRy1MT0UtRzI0MDAwMSxFRy1MT0UtRzI0MDAwMixFRy1MT0UtRzI0MDAwMyxFRy1MT0UtRzI0MDAwNCxFRy1MT0UtRzI0MDAwNSxFRy1MT0UtRzI0MDAwNixFRy1MT0UtRzI0MDAwNyxFRy1MT0UtRzI0MDAwOCxFRy1MT0UtRzI0MDAwOSxFRy1VUEUtRzI5MDAwMSxFRy1VUEUtRzI5MDAwMixFRy1VUEUtRzI5MDAwMyxFRy1VUEUtRzI5MDAwNCxFRy1VUEUtRzI5MDAwNSxFRy1VUEUtRzI5MDAwNixFRy1VUEUtRzI5MDAwNyxFRy1VUEUtRzI5MDAwOCxFRy1VUkctRzMwMDAwMSxFRy1VUkctRzMwMDAwMixFRy1VUkctRzMwMDAwMyxFRy1VUkctRzMwMDAwNAorMSxUdWUgMjUgSmFuIDExLDE0NzgwNi42ODU0OTI5OTY1NiwxMzE5NjkuNzg5NzcwMDcwODcsNzY4MTcuMTU5MjQ1MTE0NzcsMTU4ODAxLjI0NTk3NTc0MjUyLDE2MDA3MC4wNjEwMzM1MDM1LDI1ODc1OTUuMjgxMDg5MDY5MywyODExOTM3LjExMTI2ODM0OTUsMjMwNDY1MS4wMjU5NTAyNDk4LDIwMDE4MjEuOTg5Mzg3MDU2OCwyNTAyNzgxLjUzMTQwNDkxMTUsNTA4MjQxLjMyODIzNzYyMjE2LDI5NzEwODQuOTg5NzAzNjE0Nyw1ODc5OTQuODQ1MTA5NTAxNiwxNTYwODk5Ljk5MDgyMDg0MDIsMTM5NTE2MC4wODQ2ODcxNDA4LDMyMDI3MTIuMTEyNTAwMzc0LDIzMjAyMzguNDY2NTIxNjY5LDY1MjUzNy4xMDc3OTMwNTU5LDE4OTkxNzkuMjA5MTY1NjM2NSwxMjY0ODAwLjIzMjM4MDgwNiwxODY4NTA2Ljc0NDcyMzUyMTQsMjA3NDkyOS4zNzk4NTI5NDY0LDE4NDU4MzcuODgzNTE1ODczMiw0MjA3NTQ3LjUxNzYwNDQ5NDUsMjY4MzIyLjU3NjY4MDA1ODIsMzM1OS42Mjk5MjE5OTA4NDk3CisyLFdlZCAyNiBKYW4gMTEsMTQ3ODA2LjgzMzI5OTc1NTgsMTMxOTY5LjkyMTczOTkyNjc3LDc2ODE3LjIzNjA2MjMxMjQxLDE1ODgwMS40MDQ3NzcwNjc4LDE2MDA3MC4yMjExMDM2NDQ1MiwyNTg3NTk3Ljg2ODY4NTY0MywyODExOTM5LjkyMzIwNjg2NywyMzA0NjUzLjMzMDYwMjQyOCwyMDAxODIzLjk5MTIxMDA0NzQsMjUwMjc4NC4wMzQxODc2OTMsNTA4MjQxLjgzNjQ3OTIwNDY1LDI5NzEwODcuOTYwNzkwMDkwMyw1ODc5OTUuNDMzMTA0NjQwNywxNTYwOTAxLjU1MTcyMTYxMTUsMTM5NTE2MS40Nzk4NDc5MjIyLDMyMDI3MTUuMzE1MjE0MDksMjMyMDI0MC43ODY3NjEyOTYsNjUyNTM3Ljc2MDMzMDQ4OTgsMTg5OTE4MS4xMDgzNDU3OTU3LDEyNjQ4MDEuNDk3MTgxNjcwNywxODY4NTA4LjYxMzIzMTIwMTIsMjA3NDkzMS40NTQ3ODMzNjM3LDE4NDU4MzkuNzI5MzU0Njc5NCw0MjA3NTUxLjcyNTE1NDExNCwyNjgzMjIuODQ1MDAyNzY4OTcsMzM1OS42MzMyODE2MjI0NDkKKzMsVGh1IDI3IEphbiAxMSwxNDc4MDYuOTgxMTA2NjYzMDYsMTMxOTcwLjA1MzcwOTkxNDM4LDc2ODE3LjMxMjg3OTU4Njg4LDE1ODgwMS41NjM1Nzg1NTIwNywxNjAwNzAuMzgxMTczOTQ1NywyNTg3NjAwLjQ1NjI4NDgwNzUsMjgxMTk0Mi43MzUxNDgxOTQyLDIzMDQ2NTUuNjM1MjU2OTExLDIwMDE4MjUuOTkzMDM1MDM5OSwyNTAyNzg2LjUzNjk3Mjk3OSw1MDgyNDIuMzQ0NzIxMjk1MywyOTcxMDkwLjkzMTg3OTUzNzYsNTg3OTk2LjAyMTEwMDM2NzgsMTU2MDkwMy4xMTI2MjM5NDM1LDEzOTUxNjIuODc1MDEwMDk5NywzMjAyNzE4LjUxNzkzMTAwNjQsMjMyMDI0My4xMDcwMDMyNDIyLDY1MjUzOC40MTI4Njg1NzY1LDE4OTkxODMuMDA3NTI3ODUzOCwxMjY0ODAyLjc2MTk4MzgsMTg2ODUxMC40ODE3NDA3NDgsMjA3NDkzMy41Mjk3MTU4NTU2LDE4NDU4NDEuNTc1MTk1MzMxNCw0MjA3NTU1LjkzMjcwNzk0MywyNjgzMjMuMTEzMzI1NzQ4MDcsMzM1OS42MzY2NDEyNTc0MTE2Cis0LEZyaSAyOCBKYW4gMTEsMTQ3ODA3LjEyODkxMzcxODA0LDEzMTk3MC4xODU2ODAwMzQxLDc2ODE3LjM4OTY5NjkzODE5LDE1ODgwMS43MjIzODAxOTUxLDE2MDA3MC41NDEyNDQ0MDY5LDI1ODc2MDMuMDQzODg2NTU3LDI4MTE5NDUuNTQ3MDkyMzM2LDIzMDQ2NTcuOTM5OTEzNywyMDAxODI3Ljk5NDg2MjAzMzgsMjUwMjc4OS4wMzk3NjA3NjYsNTA4MjQyLjg1Mjk2Mzg5NDE0LDI5NzEwOTMuOTAyOTcxOTU0LDU4Nzk5Ni42MDkwOTY2ODI2LDE1NjA5MDQuNjczNTI3ODM3LDEzOTUxNjQuMjcwMTczNjcyNCwzMjAyNzIxLjcyMDY1MTEyNSwyMzIwMjQ1LjQyNzI0NzUwODQsNjUyNTM5LjA2NTQwNzMxNTksMTg5OTE4NC45MDY3MTE4MTE0LDEyNjQ4MDQuMDI2Nzg3MTk0NywxODY4NTEyLjM1MDI1MjE2NDMsMjA3NDkzNS42MDQ2NTA0MjMyLDE4NDU4NDMuNDIxMDM3ODMsNDIwNzU2MC4xNDAyNjU5NzksMjY4MzIzLjM4MTY0ODk5NTYsMzM1OS42NDAwMDA4OTU3MzMKKzUsU2F0IDI5IEphbiAxMSwxNDc4MDcuMjc2NzIwOTIwODcsMTMxOTcwLjMxNzY1MDI4NTcyLDc2ODE3LjQ2NjUxNDM2NjMsMTU4ODAxLjg4MTE4MTk5Njg3LDE2MDA3MC43MDEzMTUwMjgyLDI1ODc2MDUuNjMxNDkwODk1LDI4MTE5NDguMzU5MDM5Mjg5LDIzMDQ2NjAuMjQ0NTcyNzkzLDIwMDE4MjkuOTk2NjkxMDI5OCwyNTAyNzkxLjU0MjU1MTA1NzQsNTA4MjQzLjM2MTIwNzAwMTEsMjk3MTA5Ni44NzQwNjczNDI0LDU4Nzk5Ny4xOTcwOTM1ODU3LDE1NjA5MDYuMjM0NDMzMjkwOCwxMzk1MTY1LjY2NTMzODY0MDMsMzIwMjcyNC45MjMzNzQ0NDcsMjMyMDI0Ny43NDc0OTQwOTYsNjUyNTM5LjcxNzk0NjcwNzQsMTg5OTE4Ni44MDU4OTc2Njc4LDEyNjQ4MDUuMjkxNTkxODUzOCwxODY4NTE0LjIxODc2NTQ0OSwyMDc0OTM3LjY3OTU4NzA2NTIsMTg0NTg0NS4yNjY4ODIxNzM1LDQyMDc1NjQuMzQ3ODI4MjIyLDI2ODMyMy42NDk5NzI1MTE0NiwzMzU5LjY0MzM2MDUzNzQxNAorNixTdW4gMzAgSmFuIDExLDE0NzgwNy40MjQ1MjgyNzE0OCwxMzE5NzAuNDQ5NjIwNjY5NCw3NjgxNy41NDMzMzE4NzEyMiwxNTg4MDIuMDM5OTgzOTU3NCwxNjAwNzAuODYxMzg1ODA5NTgsMjU4NzYwOC4yMTkwOTc4MiwyODExOTUxLjE3MDk4OTA1NDcsMjMwNDY2Mi41NDkyMzQxODk2LDIwMDE4MzEuOTk4NTIyMDI3NCwyNTAyNzk0LjA0NTM0Mzg1MSw1MDgyNDMuODY5NDUwNjE2MzYsMjk3MTA5OS44NDUxNjU3MDEsNTg3OTk3Ljc4NTA5MTA3NjksMTU2MDkwNy43OTUzNDAzMDYxLDEzOTUxNjcuMDYwNTA1MDAyNywzMjAyNzI4LjEyNjEwMDk3MTQsMjMyMDI1MC4wNjc3NDMwMDQ4LDY1MjU0MC4zNzA0ODY3NTE0LDE4OTkxODguNzA1MDg1NDIyOCwxMjY0ODA2LjU1NjM5Nzc3NzcsMTg2ODUxNi4wODcyODA2MDIsMjA3NDkzOS43NTQ1MjU3ODIzLDE4NDU4NDcuMTEyNzI4MzYzLDQyMDc1NjguNTU1Mzk0Njc2LDI2ODMyMy45MTgyOTYyOTU1LDMzNTkuNjQ2NzIwMTgyNDU0NAorNyxNb24gMzEgSmFuIDExLDE0NzgwNy41NzIzMzU3Njk5OCwxMzE5NzAuNTgxNTkxMTg1LDc2ODE3LjYyMDE0OTQ1Mjk1LDE1ODgwMi4xOTg3ODYwNzY4MywxNjAwNzEuMDIxNDU2NzUxLDI1ODc2MTAuODA2NzA3MzM0MiwyODExOTUzLjk4Mjk0MTYzMjYsMjMwNDY2NC44NTM4OTc4OTEsMjAwMTgzNC4wMDAzNTUwMjY3LDI1MDI3OTYuNTQ4MTM5MTQ2NSw1MDgyNDQuMzc3Njk0NzQwMTMsMjk3MTEwMi44MTYyNjcwMzIsNTg3OTk4LjM3MzA4OTE1NjEsMTU2MDkwOS4zNTYyNDg4ODIsMTM5NTE2OC40NTU2NzI3NjEsMzIwMjczMS4zMjg4MzA3LDIzMjAyNTIuMzg3OTk0MjMyNiw2NTI1NDEuMDIzMDI3NDQ4MywxODk5MTkwLjYwNDI3NTA3NzgsMTI2NDgwNy44MjEyMDQ5NjYyLDE4Njg1MTcuOTU1Nzk3NjIzOCwyMDc0OTQxLjgyOTQ2NjU3NDQsMTg0NTg0OC45NTg1NzYzOTgsNDIwNzU3Mi43NjI5NjUzMzU1LDI2ODMyNC4xODY2MjAzNDc5LDMzNTkuNjUwMDc5ODMwODU1Cis4LFR1ZSAxIEZlYiAxMSwxNDc4MDcuNzIwMTQzNDE2MjMsMTMxOTcwLjcxMzU2MTgzMjY0LDc2ODE3LjY5Njk2NzExMTQ4LDE1ODgwMi4zNTc1ODgzNTUwMiwxNjAwNzEuMTgxNTI3ODUyNSwyNTg3NjEzLjM5NDMxOTQzNTYsMjgxMTk1Ni43OTQ4OTcwMjEsMjMwNDY2Ny4xNTg1NjM4OTgsMjAwMTgzNi4wMDIxOTAwMjc5LDI1MDI3OTkuMDUwOTM2OTQ2LDUwODI0NC44ODU5MzkzNzE5LDI5NzExMDUuNzg3MzcxMzMzLDU4Nzk5OC45NjEwODc4MjMzLDE1NjA5MTAuOTE3MTU5MDE4NiwxMzk1MTY5Ljg1MDg0MTkxMzgsMzIwMjczNC41MzE1NjM2MzAzLDIzMjAyNTQuNzA4MjQ3NzgxLDY1MjU0MS42NzU1Njg3OTc2LDE4OTkxOTIuNTAzNDY2NjMxOCwxMjY0ODA5LjA4NjAxMzQxOTYsMTg2ODUxOS44MjQzMTY1MTM3LDIwNzQ5NDMuOTA0NDA5NDQxMiwxODQ1ODUwLjgwNDQyNjI3OTQsNDIwNzU3Ni45NzA1NDAyMDEsMjY4MzI0LjQ1NDk0NDY2ODc1LDMzNTkuNjUzNDM5NDgyNjE2Cis5LFdlZCAyIEZlYiAxMSwxNDc4MDcuODY3OTUxMjEwMjQsMTMxOTcwLjg0NTUzMjYxMjE1LDc2ODE3Ljc3Mzc4NDg0Njg4LDE1ODgwMi41MTYzOTA3OTIsMTYwMDcxLjM0MTU5OTExNCwyNTg3NjE1Ljk4MTkzNDEyMjcsMjgxMTk1OS42MDY4NTUyMjEsMjMwNDY2OS40NjMyMzIyMDgsMjAwMTgzOC4wMDQwMjcwMzA3LDI1MDI4MDEuNTUzNzM3MjQ5LDUwODI0NS4zOTQxODQ1MTE4NSwyOTcxMTA4Ljc1ODQ3ODYwNTcsNTg3OTk5LjU0OTA4NzA3ODQsMTU2MDkxMi40NzgwNzA3MTYxLDEzOTUxNzEuMjQ2MDEyNDYyNSwzMjAyNzM3LjczNDI5OTc2NCwyMzIwMjU3LjAyODUwMzY0OTQsNjUyNTQyLjMyODExMDc5OTcsMTg5OTE5NC40MDI2NjAwODU0LDEyNjQ4MTAuMzUwODIzMTM4NCwxODY4NTIxLjY5MjgzNzI3MjMsMjA3NDk0NS45NzkzNTQzODI3LDE4NDU4NTIuNjUwMjc4MDA2Nyw0MjA3NTgxLjE3ODExOTI3NSwyNjgzMjQuNzIzMjY5MjU3OCwzMzU5LjY1Njc5OTEzNzczNDcKKzEwLFRodSAzIEZlYiAxMSwxNDc4MDguMDE1NzU5MTUyMSwxMzE5NzAuOTc3NTAzNTIzNzMsNzY4MTcuODUwNjAyNjU5MSwxNTg4MDIuNjc1MTkzMzg3OCwxNjAwNzEuNTAxNjcwNTM1NjgsMjU4NzYxOC41Njk1NTEzOTg1LDI4MTE5NjIuNDE4ODE2MjMzNSwyMzA0NjcxLjc2NzkwMjgyMywyMDAxODQwLjAwNTg2NjAzNTgsMjUwMjgwNC4wNTY1NDAwNTQzLDUwODI0NS45MDI0MzAxNjAxLDI5NzExMTEuNzI5NTg4ODUsNTg4MDAwLjEzNzA4NjkyMTUsMTU2MDkxNC4wMzg5ODM5NzQ4LDEzOTUxNzIuNjQxMTg0NDA2LDMyMDI3NDAuOTM3MDM5MDk5LDIzMjAyNTkuMzQ4NzYxODM4NCw2NTI1NDIuOTgwNjUzNDU0LDE4OTkxOTYuMzAxODU1NDM3NSwxMjY0ODExLjYxNTYzNDEyMTUsMTg2ODUyMy41NjEzNTk4OTk2LDIwNzQ5NDguMDU0MzAxMzk5NywxODQ1ODU0LjQ5NjEzMTU4MDYsNDIwNzU4NS4zODU3MDI1NTcsMjY4MzI0Ljk5MTU5NDExNTMsMzM1OS42NjAxNTg3OTYyMTMKKzExLEZyaSA0IEZlYiAxMSwxNDc4MDguMTYzNTY3MjQxNzgsMTMxOTcxLjEwOTQ3NDU2NzIzLDc2ODE3LjkyNzQyMDU0ODEsMTU4ODAyLjgzMzk5NjE0MjUsMTYwMDcxLjY2MTc0MjExNzM3LDI1ODc2MjEuMTU3MTcxMjYyNCwyODExOTY1LjIzMDc4MDA1OCwyMzA0Njc0LjA3MjU3NTc0NDcsMjAwMTg0Mi4wMDc3MDcwNDI0LDI1MDI4MDYuNTU5MzQ1MzYzLDUwODI0Ni40MTA2NzYzMTY2LDI5NzExMTQuNzAwNzAyMDY1LDU4ODAwMC43MjUwODczNTI2LDE1NjA5MTUuNTk5ODk4Nzk0MiwxMzk1MTc0LjAzNjM1Nzc0NSwzMjAyNzQ0LjEzOTc4MTYzODUsMjMyMDI2MS42NjkwMjIzNDgyLDY1MjU0My42MzMxOTY3NjA5LDE4OTkxOTguMjAxMDUyNjg5MiwxMjY0ODEyLjg4MDQ0NjM2OTMsMTg2ODUyNS40Mjk4ODQzOTUsMjA3NDk1MC4xMjkyNTA0OTE3LDE4NDU4NTYuMzQxOTg2OTk5Niw0MjA3NTg5LjU5MzI5MDA0NiwyNjgzMjUuMjU5OTE5MjQxLDMzNTkuNjYzNTE4NDU4MDUxNAorMTIsU2F0IDUgRmViIDExLDE0NzgwOC4zMTEzNzU0NzkxOCwxMzE5NzEuMjQxNDQ1NzQyNjMsNzY4MTguMDA0MjM4NTEzOTUsMTU4ODAyLjk5Mjc5OTA1NTg4LDE2MDA3MS44MjE4MTM4NTkxNiwyNTg3NjIzLjc0NDc5MzcxNCwyODExOTY4LjA0Mjc0NjY5NSwyMzA0Njc2LjM3NzI1MDk3LDIwMDE4NDQuMDA5NTUwMDUxLDI1MDI4MDkuMDYyMTUzMTc0LDUwODI0Ni45MTg5MjI5ODEzNiwyOTcxMTE3LjY3MTgxODI1Miw1ODgwMDEuMzEzMDg4MzcxOCwxNTYwOTE3LjE2MDgxNTE3NDcsMTM5NTE3NS40MzE1MzI0NzkxLDMyMDI3NDcuMzQyNTI3Mzc5MywyMzIwMjYzLjk4OTI4NTE3NjYsNjUyNTQ0LjI4NTc0MDcyMDMsMTg5OTIwMC4xMDAyNTE4Mzk3LDEyNjQ4MTQuMTQ1MjU5ODgyLDE4Njg1MjcuMjk4NDEwNzU5MywyMDc0OTUyLjIwNDIwMTY1OCwxODQ1ODU4LjE4Nzg0NDI2NDMsNDIwNzU5My44MDA4ODE3NDIsMjY4MzI1LjUyODI0NDYzNTEsMzM1OS42NjY4NzgxMjMyNQorMTMsU3VuIDYgRmViIDExLDE0NzgwOC40NTkxODM4NjQ0NCwxMzE5NzEuMzczNDE3MDUwMDgsNzY4MTguMDgxMDU2NTU2NTksMTU4ODAzLjE1MTYwMjEyODA1LDE2MDA3MS45ODE4ODU3NjEsMjU4NzYyNi4zMzI0MTg3NTIsMjgxMTk3MC44NTQ3MTYxNDM2LDIzMDQ2NzguNjgxOTI4NDk4NywyMDAxODQ2LjAxMTM5NTA2MTQsMjUwMjgxMS41NjQ5NjM0ODgsNTA4MjQ3LjQyNzE3MDE1NDQ2LDI5NzExMjAuNjQyOTM3NDA5Nyw1ODgwMDEuOTAxMDg5OTc4OCwxNTYwOTE4LjcyMTczMzExNTgsMTM5NTE3Ni44MjY3MDg2MDgsMzIwMjc1MC41NDUyNzYzMjMzLDIzMjAyNjYuMzA5NTUwMzI3LDY1MjU0NC45MzgyODUzMzIzLDE4OTkyMDEuOTk5NDUyODg5NCwxMjY0ODE1LjQxMDA3NDY1OTYsMTg2ODUyOS4xNjY5Mzg5OTE4LDIwNzQ5NTQuMjc5MTU0OTAwMiwxODQ1ODYwLjAzMzcwMzM3NTEsNDIwNzU5OC4wMDg0Nzc2NDYsMjY4MzI1Ljc5NjU3MDI5NzUsMzM1OS42NzAyMzc3OTE4MDg2CisxNCxNb24gNyBGZWIgMTEsMTQ3ODA4LjYwNjk5MjM5NzUyLDEzMTk3MS41MDUzODg0ODk1LDc2ODE4LjE1Nzg3NDY3NjA0LDE1ODgwMy4zMTA0MDUzNTkwOCwxNjAwNzIuMTQxOTU3ODIyOTgsMjU4NzYyOC45MjAwNDYzNzksMjgxMTk3My42NjY2ODg0MDM2LDIzMDQ2ODAuOTg2NjA4MzMzLDIwMDE4NDguMDEzMjQyMDczOCwyNTAyODE0LjA2Nzc3NjMwNDcsNTA4MjQ3LjkzNTQxNzgzNTgsMjk3MTEyMy42MTQwNTk1Mzg2LDU4ODAwMi40ODkwOTIxNzM5LDE1NjA5MjAuMjgyNjUyNjE4NCwxMzk1MTc4LjIyMTg4NjEzMjQsMzIwMjc1My43NDgwMjg0NjkzLDIzMjAyNjguNjI5ODE3Nzk1NSw2NTI1NDUuNTkwODMwNTk2NywxODk5MjAzLjg5ODY1NTgzOCwxMjY0ODE2LjY3NDg5MDcwMjEsMTg2ODUzMS4wMzU0NjkwOTI3LDIwNzQ5NTYuMzU0MTEwMjE2NSwxODQ1ODYxLjg3OTU2NDMzMTYsNDIwNzYwMi4yMTYwNzc3NTcsMjY4MzI2LjA2NDg5NjIyODI2LDMzNTkuNjczNTk3NDYzNzI2CisxNSxUdWUgOCBGZWIgMTEsMTQ3ODA4Ljc1NDgwMTA3ODM4LDEzMTk3MS42MzczNjAwNjA5NCw3NjgxOC4yMzQ2OTI4NzIzMywxNTg4MDMuNDY5MjA4NzQ4OSwxNjAwNzIuMzAyMDMwMDQ0OTYsMjU4NzYzMS41MDc2NzY1OTM1LDI4MTE5NzYuNDc4NjYzNDc2NiwyMzA0NjgzLjI5MTI5MDQ3MjMsMjAwMTg1MC4wMTUwOTEwODgsMjUwMjgxNi41NzA1OTE2MjM0LDUwODI0OC40NDM2NjYwMjUyNCwyOTcxMTI2LjU4NTE4NDYzOCw1ODgwMDMuMDc3MDk0OTU2OSwxNTYwOTIxLjg0MzU3MzY4MTgsMTM5NTE3OS42MTcwNjUwNTEzLDMyMDI3NTYuOTUwNzgzODE5LDIzMjAyNzAuOTUwMDg3NTg1NSw2NTI1NDYuMjQzMzc2NTE0LDE4OTkyMDUuNzk3ODYwNjg2MiwxMjY0ODE3LjkzOTcwODAwOTQsMTg2ODUzMi45MDQwMDEwNjIzLDIwNzQ5NTguNDI5MDY3NjA4MiwxODQ1ODYzLjcyNTQyNzEzNCw0MjA3NjA2LjQyMzY4MjA3NywyNjgzMjYuMzMzMjIyNDI3MywzMzU5LjY3Njk1NzEzOTAwMzcKKzE2LFdlZCA5IEZlYiAxMSwxNDc4MDguOTAyNjA5OTA3LDEzMTk3MS43NjkzMzE3NjQyOCw3NjgxOC4zMTE1MTExNDU0NCwxNTg4MDMuNjI4MDEyMjk3NTYsMTYwMDcyLjQ2MjEwMjQyNjk3LDI1ODc2MzQuMDk1MzA5Mzk1MywyODExOTc5LjI5MDY0MTM2MTQsMjMwNDY4NS41OTU5NzQ5MTYsMjAwMTg1Mi4wMTY5NDIxMDM2LDI1MDI4MTkuMDczNDA5NDQ1Niw1MDgyNDguOTUxOTE0NzIzMTUsMjk3MTEyOS41NTYzMTI3MDgsNTg4MDAzLjY2NTA5ODMyNzksMTU2MDkyMy40MDQ0OTYzMDYsMTM5NTE4MS4wMTIyNDUzNjYxLDMyMDI3NjAuMTUzNTQyMzcwNSwyMzIwMjczLjI3MDM1OTY5Nyw2NTI1NDYuODk1OTIzMDgzNCwxODk5MjA3LjY5NzA2NzQzNDIsMTI2NDgxOS4yMDQ1MjY1ODEzLDE4Njg1MzQuNzcyNTM0OTAwMywyMDc0OTYwLjUwNDAyNzA3NDQsMTg0NTg2NS41NzEyOTE3ODI0LDQyMDc2MTAuNjMxMjkwNjA1LDI2ODMyNi42MDE1NDg4OTQ3LDMzNTkuNjgwMzE2ODE3NjQwNworMTcsVGh1IDEwIEZlYiAxMSwxNDc4MDkuMDUwNDE4ODgzNTMsMTMxOTcxLjkwMTMwMzU5OTU2LDc2ODE4LjM4ODMyOTQ5NTM3LDE1ODgwMy43ODY4MTYwMDQ5MywxNjAwNzIuNjIyMTc0OTY5MTUsMjU4NzYzNi42ODI5NDQ3ODQ0LDI4MTE5ODIuMTAyNjIyMDU3MywyMzA0Njg3LjkwMDY2MTY2NDUsMjAwMTg1NC4wMTg3OTUxMjE1LDI1MDI4MjEuNTc2MjI5NzcsNTA4MjQ5LjQ2MDE2MzkyOTIsMjk3MTEzMi41Mjc0NDM3NDk0LDU4ODAwNC4yNTMxMDIyODcsMTU2MDkyNC45NjU0MjA0OTA4LDEzOTUxODIuNDA3NDI3MDc2MywzMjAyNzYzLjM1NjMwNDEyNSwyMzIwMjc1LjU5MDYzNDEyNzYsNjUyNTQ3LjU0ODQ3MDMwNTcsMTg5OTIwOS41OTYyNzYwODA1LDEyNjQ4MjAuNDY5MzQ2NDE4LDE4Njg1MzYuNjQxMDcwNjA3MSwyMDc0OTYyLjU3ODk4ODYxNjEsMTg0NTg2Ny40MTcxNTgyNzYsNDIwNzYxNC44Mzg5MDMzNCwyNjgzMjYuODY5ODc1NjMwNCwzMzU5LjY4MzY3NjQ5OTYzNzQKKzE4LEZyaSAxMSBGZWIgMTEsMTQ3ODA5LjE5ODIyODAwNzksMTMxOTcyLjAzMzI3NTU2Njc2LDc2ODE4LjQ2NTE0NzkyMjEsMTU4ODAzLjk0NTYxOTg3MTE3LDE2MDA3Mi43ODIyNDc2NzEzLDI1ODc2MzkuMjcwNTgyNzYxNiwyODExOTg0LjkxNDYwNTU2NjMsMjMwNDY5MC4yMDUzNTA3MTgsMjAwMTg1Ni4wMjA2NTAxNDE2LDI1MDI4MjQuMDc5MDUyNTk3Myw1MDgyNDkuOTY4NDEzNjQzNTQsMjk3MTEzNS40OTg1Nzc3NjIsNTg4MDA0Ljg0MTEwNjgzNDEsMTU2MDkyNi41MjYzNDYyMzY1LDEzOTUxODMuODAyNjEwMTgxLDMyMDI3NjYuNTU5MDY5MDgzLDIzMjAyNzcuOTEwOTEwODc4LDY1MjU0OC4yMDEwMTgxODA2LDE4OTkyMTEuNDk1NDg2NjI2LDEyNjQ4MjEuNzM0MTY3NTE5LDE4Njg1MzguNTA5NjA4MTgyOCwyMDc0OTY0LjY1Mzk1MjIzMjYsMTg0NTg2OS4yNjMwMjY2MTYzLDQyMDc2MTkuMDQ2NTIwMjgzLDI2ODMyNy4xMzgyMDI2MzQ0NywzMzU5LjY4NzAzNjE4NDk5MzMKKzE5LFNhdCAxMiBGZWIgMTEsMTQ3ODA5LjM0NjAzNzI4MDAyLDEzMTk3Mi4xNjUyNDc2NjYsNzY4MTguNTQxOTY2NDI1NjYsMTU4ODA0LjEwNDQyMzg5NjIsMTYwMDcyLjk0MjMyMDUzMzYsMjU4NzY0MS44NTgyMjMzMjcsMjgxMTk4Ny43MjY1OTE4ODYsMjMwNDY5Mi41MTAwNDIwNzUsMjAwMTg1OC4wMjI1MDcxNjI4LDI1MDI4MjYuNTgxODc3OTI3OCw1MDgyNTAuNDc2NjYzODY2LDI5NzExMzguNDY5NzE0NzQ2Myw1ODgwMDUuNDI5MTExOTY5MiwxNTYwOTI4LjA4NzI3MzU0MzcsMTM5NTE4NS4xOTc3OTQ2ODE0LDMyMDI3NjkuNzYxODM3MjQzLDIzMjAyODAuMjMxMTg5OTQ4NSw2NTI1NDguODUzNTY2NzA3OCwxODk5MjEzLjM5NDY5OTA3MTUsMTI2NDgyMi45OTg5ODk4ODU3LDE4Njg1NDAuMzc4MTQ3NjI2OCwyMDc0OTY2LjcyODkxNzkyNCwxODQ1ODcxLjEwODg5NjgwMjYsNDIwNzYyMy4yNTQxNDE0MzMsMjY4MzI3LjQwNjUyOTkwNjgsMzM1OS42OTAzOTU4NzM3MDkzCisyMCxTdW4gMTMgRmViIDExLDE0NzgwOS40OTM4NDY3LDEzMTk3Mi4yOTcyMTk4OTcyNyw3NjgxOC42MTg3ODUwMDYwNCwxNTg4MDQuMjYzMjI4MDgsMTYwMDczLjEwMjM5MzU1NTk1LDI1ODc2NDQuNDQ1ODY2NDc5LDI4MTE5OTAuNTM4NTgxMDE5LDIzMDQ2OTQuODE0NzM1NzM3NiwyMDAxODYwLjAyNDM2NjE4NjUsMjUwMjgyOS4wODQ3MDU3NjEsNTA4MjUwLjk4NDkxNDU5NjksMjk3MTE0MS40NDA4NTQ3MDA3LDU4ODAwNi4wMTcxMTc2OTIzLDE1NjA5MjkuNjQ4MjAyNDEyLDEzOTUxODYuNTkyOTgwNTc2NywzMjAyNzcyLjk2NDYwODYwNiwyMzIwMjgyLjU1MTQ3MTM0LDY1MjU0OS41MDYxMTU4ODc1LDE4OTkyMTUuMjkzOTEzNDE1OSwxMjY0ODI0LjI2MzgxMzUxNywxODY4NTQyLjI0NjY4ODkzOTQsMjA3NDk2OC44MDM4ODU2OTA0LDE4NDU4NzIuOTU0NzY4ODM0Miw0MjA3NjI3LjQ2MTc2Njc5MSwyNjgzMjcuNjc0ODU3NDQ3NSwzMzU5LjY5Mzc1NTU2NTc4NDYKKzIxLE1vbiAxNCBGZWIgMTEsMTQ3ODA5LjY0MTY1NjI2NzgsMTMxOTcyLjQyOTE5MjI2MDQ2LDc2ODE4LjY5NTYwMzY2MzIzLDE1ODgwNC40MjIwMzI0MjI2OCwxNjAwNzMuMjYyNDY2NzM4MzUsMjU4NzY0Ny4wMzM1MTIyMTksMjgxMTk5My4zNTA1NzI5NjMyLDIzMDQ2OTcuMTE5NDMxNzA0MywyMDAxODYyLjAyNjIyNzIxMiwyNTAyODMxLjU4NzUzNjA5Nyw1MDgyNTEuNDkzMTY1ODM2LDI5NzExNDQuNDExOTk3NjI2NSw1ODgwMDYuNjA1MTI0MDAzNSwxNTYwOTMxLjIwOTEzMjg0MDQsMTM5NTE4Ny45ODgxNjc4Njc1LDMyMDI3NzYuMTY3MzgzMTcyLDIzMjAyODQuODcxNzU1MDUyLDY1MjU1MC4xNTg2NjU3MiwxODk5MjE3LjE5MzEyOTY1OTksMTI2NDgyNS41Mjg2Mzg0MTM0LDE4Njg1NDQuMTE1MjMyMTIwNywyMDc0OTcwLjg3ODg1NTUzMSwxODQ1ODc0LjgwMDY0MjcxMjMsNDIwNzYzMS42NjkzOTYzNTcsMjY4MzI3Ljk0MzE4NTI1NjU2LDMzNTkuNjk3MTE1MjYxMjIwNQorMjIsVHVlIDE1IEZlYiAxMSwxNDc4MDkuNzg5NDY1OTgzMzQsMTMxOTcyLjU2MTE2NDc1NTY0LDc2ODE4Ljc3MjQyMjM5NzI1LDE1ODgwNC41ODA4MzY5MjQxNCwxNjAwNzMuNDIyNTQwMDgwODgsMjU4NzY0OS42MjExNjA1NDYzLDI4MTE5OTYuMTYyNTY3NzIsMjMwNDY5OS40MjQxMjk5NzcsMjAwMTg2NC4wMjgwOTAyMzkzLDI1MDI4MzQuMDkwMzY4OTM2LDUwODI1Mi4wMDE0MTc1ODMyNiwyOTcxMTQ3LjM4MzE0MzUyNSw1ODgwMDcuMTkzMTMwOTAyNiwxNTYwOTMyLjc3MDA2NDgyOTgsMTM5NTE4OS4zODMzNTY1NTMzLDMyMDI3NzkuMzcwMTYwOTQxNSwyMzIwMjg3LjE5MjA0MTA4NDYsNjUyNTUwLjgxMTIxNjIwNDksMTg5OTIxOS4wOTIzNDc4MDI0LDEyNjQ4MjYuNzkzNDY0NTc0NywxODY4NTQ1Ljk4Mzc3NzE3MDMsMjA3NDk3Mi45NTM4Mjc0NDc3LDE4NDU4NzYuNjQ2NTE4NDM1Myw0MjA3NjM1Ljg3NzAzMDEyOCwyNjgzMjguMjExNTEzMzMzOSwzMzU5LjcwMDQ3NDk2MDAxNDYKKzIzLFdlZCAxNiBGZWIgMTEsMTQ3ODA5LjkzNzI3NTg0NjcsMTMxOTcyLjY5MzEzNzM4MjgzLDc2ODE4Ljg0OTI0MTIwODEsMTU4ODA0LjczOTY0MTU4NDM3LDE2MDA3My41ODI2MTM1ODM0MiwyNTg3NjUyLjIwODgxMTQ2MiwyODExOTk4Ljk3NDU2NTI4OCwyMzA0NzAxLjcyODgzMDU1MjcsMjAwMTg2Ni4wMjk5NTUyNjgsMjUwMjgzNi41OTMyMDQyNzgsNTA4MjUyLjUwOTY2OTgzODcsMjk3MTE1MC4zNTQyOTIzOTMsNTg4MDA3Ljc4MTEzODM4OTgsMTU2MDkzNC4zMzA5OTgzODAyLDEzOTUxOTAuNzc4NTQ2NjM0MSwzMjAyNzgyLjU3Mjk0MTkxMjMsMjMyMDI4OS41MTIzMjk0MzcsNjUyNTUxLjQ2Mzc2NzM0MjMsMTg5OTIyMC45OTE1Njc4NDQ1LDEyNjQ4MjguMDU4MjkyMDAwMywxODY4NTQ3Ljg1MjMyNDA4OCwyMDc0OTc1LjAyODgwMTQzODksMTg0NTg3OC40OTIzOTYwMDUsNDIwNzY0MC4wODQ2NjgxMDgsMjY4MzI4LjQ3OTg0MTY3OTU3LDMzNTkuNzAzODM0NjYyMTY5CisyNCxUaHUgMTcgRmViIDExLDE0NzgxMC4wODUwODU4NTc4NiwxMzE5NzIuODI1MTEwMTQxOTIsNzY4MTguOTI2MDYwMDk1NzIsMTU4ODA0Ljg5ODQ0NjQwMzQsMTYwMDczLjc0MjY4NzI0NjEyLDI1ODc2NTQuNzk2NDY0OTY0LDI4MTIwMDEuNzg2NTY1NjY4NCwyMzA0NzA0LjAzMzUzMzQzMzUsMjAwMTg2OC4wMzE4MjIyOTg3LDI1MDI4MzkuMDk2MDQyMTIyNyw1MDgyNTMuMDE3OTIyNjAyNSwyOTcxMTUzLjMyNTQ0NDIzMzYsNTg4MDA4LjM2OTE0NjQ2NDksMTU2MDkzNS44OTE5MzM0OTEyLDEzOTUxOTIuMTczNzM4MTEwOCwzMjAyNzg1Ljc3NTcyNjA4NywyMzIwMjkxLjgzMjYyMDEwOSw2NTI1NTIuMTE2MzE5MTMyMiwxODk5MjIyLjg5MDc4OTc4NTcsMTI2NDgyOS4zMjMxMjA2OTEsMTg2ODU0OS43MjA4NzI4NzQ4LDIwNzQ5NzcuMTAzNzc3NTA1NSwxODQ1ODgwLjMzODI3NTQyLDQyMDc2NDQuMjkyMzEwMjk3NSwyNjgzMjguNzQ4MTcwMjkzNiwzMzU5LjcwNzE5NDM2NzY4MworMjUsRnJpIDE4IEZlYiAxMSwxNDc4MTAuMjMyODk2MDE2ODUsMTMxOTcyLjk1NzA4MzAzMzAyLDc2ODE5LjAwMjg3OTA2MDIsMTU4ODA1LjA1NzI1MTM4MTIyLDE2MDA3My45MDI3NjEwNjg4NCwyNTg3NjU3LjM4NDEyMTA1NSwyODEyMDA0LjU5ODU2ODg2MSwyMzA0NzA2LjMzODIzODYxOTcsMjAwMTg3MC4wMzM2OTEzMzIsMjUwMjg0MS41OTg4ODI0NzA3LDUwODI1My41MjYxNzU4NzQ1LDI5NzExNTYuMjk2NTk5MDQ0LDU4ODAwOC45NTcxNTUxMjgsMTU2MDkzNy40NTI4NzAxNjM2LDEzOTUxOTMuNTY4OTMwOTgyLDMyMDI3ODguOTc4NTEzNDY0MywyMzIwMjk0LjE1MjkxMzEwMTUsNjUyNTUyLjc2ODg3MTU3NSwxODk5MjI0Ljc5MDAxMzYyNjUsMTI2NDgzMC41ODc5NTA2NDY2LDE4Njg1NTEuNTg5NDIzNTI5OCwyMDc0OTc5LjE3ODc1NTY0NjMsMTg0NTg4Mi4xODQxNTY2ODE0LDQyMDc2NDguNDk5OTU2NjkzNSwyNjgzMjkuMDE2NDk5MTc1OSwzMzU5LjcxMDU1NDA3NjU1NworMjYsU2F0IDE5IEZlYiAxMSwxNDc4MTAuMzgwNzA2MzIzNjYsMTMxOTczLjA4OTA1NjA1NjA4LDc2ODE5LjA3OTY5ODEwMTUsMTU4ODA1LjIxNjA1NjUxNzksMTYwMDc0LjA2MjgzNTA1MTYyLDI1ODc2NTkuOTcxNzc5NzMyLDI4MTIwMDcuNDEwNTc0ODY2LDIzMDQ3MDguNjQyOTQ2MTEsMjAwMTg3Mi4wMzU1NjIzNjYyLDI1MDI4NDQuMTAxNzI1MzIxLDUwODI1NC4wMzQ0Mjk2NTQ4LDI5NzExNTkuMjY3NzU2ODI2Miw1ODgwMDkuNTQ1MTY0Mzc5MiwxNTYwOTM5LjAxMzgwODM5NywxMzk1MTk0Ljk2NDEyNTI0ODEsMzIwMjc5Mi4xODEzMDQwNDM2LDIzMjAyOTYuNDczMjA4NDE0NCw2NTI1NTMuNDIxNDI0NjcsMTg5OTIyNi42ODkyMzkzNjU3LDEyNjQ4MzEuODUyNzgxODY3LDE4Njg1NTMuNDU3OTc2MDUzNSwyMDc0OTgxLjI1MzczNTg2MjcsMTg0NTg4NC4wMzAwMzk3ODgyLDQyMDc2NTIuNzA3NjA3Mjk3LDI2ODMyOS4yODQ4MjgzMjY2NiwzMzU5LjcxMzkxMzc4ODc5MQorMjcsU3VuIDIwIEZlYiAxMSwxNDc4MTAuNTI4NTE2Nzc4MjYsMTMxOTczLjIyMTAyOTIxMTEzLDc2ODE5LjE1NjUxNzIxOTYxLDE1ODgwNS4zNzQ4NjE4MTMzOCwxNjAwNzQuMjIyOTA5MTk0NDgsMjU4NzY2Mi41NTk0NDA5OTg0LDI4MTIwMTAuMjIyNTgzNjgyMywyMzA0NzEwLjk0NzY1NTkwNSwyMDAxODc0LjAzNzQzNTQwMjksMjUwMjg0Ni42MDQ1NzA2NzQsNTA4MjU0LjU0MjY4Mzk0MzQsMjk3MTE2Mi4yMzg5MTc1OCw1ODgwMTAuMTMzMTc0MjE4NCwxNTYwOTQwLjU3NDc0ODE5MSwxMzk1MTk2LjM1OTMyMDkxLDMyMDI3OTUuMzg0MDk3ODI2LDIzMjAyOTguNzkzNTA2MDQ2OCw2NTI1NTQuMDczOTc4NDE3OCwxODk5MjI4LjU4ODQ2NzAwNDUsMTI2NDgzMy4xMTc2MTQzNTIxLDE4Njg1NTUuMzI2NTMwNDQ1NCwyMDc0OTgzLjMyODcxODE1MzgsMTg0NTg4NS44NzU5MjQ3NDEyLDQyMDc2NTYuOTE1MjYyMTA5LDI2ODMyOS41NTMxNTc3NDU2LDMzNTkuNzE3MjczNTA0Mzg0NgorMjgsTW9uIDIxIEZlYiAxMSwxNDc4MTAuNjc2MzI3MzgwNjcsMTMxOTczLjM1MzAwMjQ5ODE2LDc2ODE5LjIzMzMzNjQxNDUyLDE1ODgwNS41MzM2NjcyNjc2LDE2MDA3NC4zODI5ODM0OTc0NiwyNTg3NjY1LjE0NzEwNDg1MTQsMjgxMjAxMy4wMzQ1OTUzMTEsMjMwNDcxMy4yNTIzNjgwMDUsMjAwMTg3Ni4wMzkzMTA0NDExLDI1MDI4NDkuMTA3NDE4NTI5Nyw1MDgyNTUuMDUwOTM4NzQwMiwyOTcxMTY1LjIxMDA4MTMwNDQsNTg4MDEwLjcyMTE4NDY0NTUsMTU2MDk0Mi4xMzU2ODk1NDY0LDEzOTUxOTcuNzU0NTE3OTY2NiwzMjAyNzk4LjU4Njg5NDgxMiwyMzIwMzAxLjExMzgwNjAwMSw2NTI1NTQuNzI2NTMyODE3OSwxODk5MjMwLjQ4NzY5NjU0MjIsMTI2NDgzNC4zODI0NDgxMDIzLDE4Njg1NTcuMTk1MDg2NzA2NywyMDc0OTg1LjQwMzcwMjUyLDE4NDU4ODcuNzIxODExNTM5Nyw0MjA3NjYxLjEyMjkyMTEyOSwyNjgzMjkuODIxNDg3NDMyOSwzMzU5LjcyMDYzMzIyMzMzNzcKKzI5LFR1ZSAyMiBGZWIgMTEsMTQ3ODEwLjgyNDEzODEzMDk2LDEzMTk3My40ODQ5NzU5MTcxNSw3NjgxOS4zMTAxNTU2ODYyNywxNTg4MDUuNjkyNDcyODgwNywxNjAwNzQuNTQzMDU3OTYwNDYsMjU4NzY2Ny43MzQ3NzEyOTIsMjgxMjAxNS44NDY2MDk3NTEsMjMwNDcxNS41NTcwODI0MSwyMDAxODc4LjA0MTE4NzQ4MTcsMjUwMjg1MS42MTAyNjg4ODksNTA4MjU1LjU1OTE5NDA0NTMsMjk3MTE2OC4xODEyNDgsNTg4MDExLjMwOTE5NTY2MDgsMTU2MDk0My42OTY2MzI0NjI2LDEzOTUxOTkuMTQ5NzE2NDE5LDMyMDI4MDEuNzg5Njk1MDAwMywyMzIwMzAzLjQzNDEwODI3NDUsNjUyNTU1LjM3OTA4Nzg3MDksMTg5OTIzMi4zODY5Mjc5NzksMTI2NDgzNS42NDcyODMxMTcsMTg2ODU1OS4wNjM2NDQ4MzYyLDIwNzQ5ODcuNDc4Njg4OTYxMSwxODQ1ODg5LjU2NzcwMDE4NDQsNDIwNzY2NS4zMzA1ODQzNTYsMjY4MzMwLjA4OTgxNzM4ODYsMzM1OS43MjM5OTI5NDU2NTEKKzMwLFdlZCAyMyBGZWIgMTEsMTQ3ODEwLjk3MTk0OTAyOSwxMzE5NzMuNjE2OTQ5NDY4MTIsNzY4MTkuMzg2OTc1MDM0ODQsMTU4ODA1Ljg1MTI3ODY1MjU1LDE2MDA3NC43MDMxMzI1ODM1NiwyNTg3NjcwLjMyMjQ0MDMyMDYsMjgxMjAxOC42NTg2MjcwMDQsMjMwNDcxNy44NjE3OTkxMTk1LDIwMDE4ODAuMDQzMDY2NTI0LDI1MDI4NTQuMTEzMTIxNzUwMyw1MDgyNTYuMDY3NDQ5ODU4NywyOTcxMTcxLjE1MjQxNzY2NjMsNTg4MDExLjg5NzIwNzI2NCwxNTYwOTQ1LjI1NzU3NjkzOTYsMTM5NTIwMC41NDQ5MTYyNjYsMzIwMjgwNC45OTI0OTgzOTEzLDIzMjAzMDUuNzU0NDEyODY5LDY1MjU1Ni4wMzE2NDM1NzYyLDE4OTkyMzQuMjg2MTYxMzE1NiwxMjY0ODM2LjkxMjExOTM5NjcsMTg2ODU2MC45MzIyMDQ4MzQyLDIwNzQ5ODkuNTUzNjc3NDc3NCwxODQ1ODkxLjQxMzU5MDY3NSw0MjA3NjY5LjUzODI1MTc4OSwyNjgzMzAuMzU4MTQ3NjEyNiwzMzU5LjcyNzM1MjY3MTMyMzQKKzMxLFRodSAyNCBGZWIgMTEsMTQ3ODExLjExOTc2MDA3NDgzLDEzMTk3My43NDg5MjMxNTEwMyw3NjgxOS40NjM3OTQ0NjAyMywxNTg4MDYuMDEwMDg0NTgzMiwxNjAwNzQuODYzMjA3MzY2NzUsMjU4NzY3Mi45MTAxMTE5MzY3LDI4MTIwMjEuNDcwNjQ3MDY4LDIzMDQ3MjAuMTY2NTE4MTMzLDIwMDE4ODIuMDQ0OTQ3NTY4LDI1MDI4NTYuNjE1OTc3MTE0NSw1MDgyNTYuNTc1NzA2MTgwMywyOTcxMTc0LjEyMzU5MDMwNCw1ODgwMTIuNDg1MjE5NDU1MiwxNTYwOTQ2LjgxODUyMjk3NzksMTM5NTIwMS45NDAxMTc1MDg5LDMyMDI4MDguMTk1MzA0OTg0NywyMzIwMzA4LjA3NDcxOTc4NCw2NTI1NTYuNjg0MTk5OTMzOSwxODk5MjM2LjE4NTM5NjU1MTIsMTI2NDgzOC4xNzY5NTY5NDE0LDE4Njg1NjIuODAwNzY2NzAwOSwyMDc0OTkxLjYyODY2ODA2ODQsMTg0NTg5My4yNTk0ODMwMTE3LDQyMDc2NzMuNzQ1OTIzNDMxLDI2ODMzMC42MjY0NzgxMDQ5LDMzNTkuNzMwNzEyNDAwMzU2NAorMzIsRnJpIDI1IEZlYiAxMSwxNDc4MTEuMjY3NTcxMjY4NSwxMzE5NzMuODgwODk2OTY1OTEsNzY4MTkuNTQwNjEzOTYyNDIsMTU4ODA2LjE2ODg5MDY3MjY4LDE2MDA3NS4wMjMyODIzMDk5NiwyNTg3Njc1LjQ5Nzc4NjE0MSwyODEyMDI0LjI4MjY2OTk0NDcsMjMwNDcyMi40NzEyMzk0NTIsMjAwMTg4NC4wNDY4MzA2MTQsMjUwMjg1OS4xMTg4MzQ5ODIsNTA4MjU3LjA4Mzk2MzAxMDE3LDI5NzExNzcuMDk0NzY1OTEzNyw1ODgwMTMuMDczMjMyMjM0MywxNTYwOTQ4LjM3OTQ3MDU3NjUsMTM5NTIwMy4zMzUzMjAxNDY4LDMyMDI4MTEuMzk4MTE0NzgyLDIzMjAzMTAuMzk1MDI5MDE4Niw2NTI1NTcuMzM2NzU2OTQ0NCwxODk5MjM4LjA4NDYzMzY4NiwxMjY0ODM5LjQ0MTc5NTc1MDgsMTg2ODU2NC42NjkzMzA0MzU4LDIwNzQ5OTMuNzAzNjYwNzM1MiwxODQ1ODk1LjEwNTM3NzE5MzgsNDIwNzY3Ny45NTM1OTkyOCwyNjgzMzAuODk0ODA4ODY1NSwzMzU5LjczNDA3MjEzMjc0ODcKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvRGVtb2dyYXBoaWNTRUlSRGlzZWFzZV9SS19SZWZlcmVuY2UvRmx1L21lbi9SXzIuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9EZW1vZ3JhcGhpY1NFSVJEaXNlYXNlX1JLX1JlZmVyZW5jZS9GbHUvbWVuL1JfMi5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzBiNjVlNgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvRGVtb2dyYXBoaWNTRUlSRGlzZWFzZV9SS19SZWZlcmVuY2UvRmx1L21lbi9SXzIuY3N2CkBAIC0wLDAgKzEsMzMgQEAKK2l0ZXJhdGlvbix0aW1lLEVHLUZSRy1HMjEwMDAxLEVHLUZSRy1HMjEwMDAyLEVHLUZSRy1HMjEwMDAzLEVHLUZSRy1HMjEwMDA0LEVHLUZSRy1HMjEwMDA1LEVHLUxPRS1HMjQwMDAxLEVHLUxPRS1HMjQwMDAyLEVHLUxPRS1HMjQwMDAzLEVHLUxPRS1HMjQwMDA0LEVHLUxPRS1HMjQwMDA1LEVHLUxPRS1HMjQwMDA2LEVHLUxPRS1HMjQwMDA3LEVHLUxPRS1HMjQwMDA4LEVHLUxPRS1HMjQwMDA5LEVHLVVQRS1HMjkwMDAxLEVHLVVQRS1HMjkwMDAyLEVHLVVQRS1HMjkwMDAzLEVHLVVQRS1HMjkwMDA0LEVHLVVQRS1HMjkwMDA1LEVHLVVQRS1HMjkwMDA2LEVHLVVQRS1HMjkwMDA3LEVHLVVQRS1HMjkwMDA4LEVHLVVSRy1HMzAwMDAxLEVHLVVSRy1HMzAwMDAyLEVHLVVSRy1HMzAwMDAzLEVHLVVSRy1HMzAwMDA0CisxLFR1ZSAyNSBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMixXZWQgMjYgSmFuIDExLDEuODQ5MTUwMDExMzUyNDk2MkUtNCw3LjgyOTQ5MTU1MjAyNjM4NUUtNyw0LjI1MjY5Njk0NjIzMDk3MUUtNCwxLjU5MTEyNTk3OTU2MTMyRS00LDAuMDAxMDQyNzA0MDM1MjczNzI4LDQuMDg3MDI4MzY1NTU2NDQ1N0UtNCwwLjAwMjg5MTQ0MDM4MDQwNzU4NzcsMC4wMDE5MTU2MTg1MzAxODIwMDMsMC4wMDIyNTAyMzAxMDk4MDQ2MzE3LDMwLjAxNzk4NTc4MjAxOTYyNSwyNC41Nzc5MTIyNzI5MDc5MTYsMzIuNTA3OTAyNzE5MzI1NCwzLjM5MDQ1NTkxNjAwMzYwOUUtNSw2LjcxNjM1NjE3NDY3MDU1NkUtNSwzLjgyNjY1OTE2ODM5ODM5OEUtNCwzMS4zMjYwMzg4OTcwMjQyLDMuNzU3NDU5NTk3Mjg0NjM5NEUtNCw0LjY3Mzc5NzYyMTIxNzYyNjZFLTcsMi40ODk0NDgzMjk0MzkwNTMzRS02LDMuNjg0ODg4NjMxNjQ5ODQzRS00LDQuODk1ODIxNjMyNjExODIyRS03LDQuODA4Mzg0NDQ0NTY0MTA4RS03LDIuODQ2NjY4MjA0MTMxNDYxN0UtNiw4NjguNjQ4OTA5MzIxNzc2LDIwLjQ2ODg3NjA1NDk1MjQzMiwxLjQyMTIzNTQzMjMzNzk4NDZFLTUKKzMsVGh1IDI3IEphbiAxMSwwLjAxNjk5NjU4NDQyNTU4MTA0NSw3LjIyMTYzOTI0NTExMzEyM0UtNSwwLjAzOTEwMTA3ODYwODgzMDkxLDAuMDE0NjMzMzQ1NTY1MDgzMTM2LDAuMDk1ODc5Nzk5NjkyODI3NDEsMC4wMzc2Mjc0NDY5MDE4MTAzMSwwLjI2NjAyMzIyNjcxMTA0MTM0LDAuMTc2MjQ3MjA4NzM2MDMzOSwwLjIwNzAyMjQ0MzkxNjEzMjQyLDE4Mi4zMTI3MjU5MzUxOTE4OCwxNDguOTIxODY5NDkwNDY1ODcsMTk3LjczNTgzMjI5NTcwMDA1LDAuMDAzMTMwMjQxNTAwMjgzNjc1LDAuMDA2MjAxMjk5NDE5Nzc2MjY1LDAuMDM1MjEzMDEyNjQ3MjQ2MzMsMTkwLjQ0MjE3MzQ3NTEzMjQyLDAuMDM0NTc1Njc3OTE2ODcxMTQsNC4zMDc5OTA4MDA4MTY0OTlFLTUsMi4yOTg3NTQzMjU2MjUwMjA2RS00LDAuMDMzOTA3Njc1MTI1MzQzOTUsNC41MTMzMzkxOTM1MTQ3NDFFLTUsNC40MzQ5MzQ0NTEyNTUxNTRFLTUsMi42MzI2MTc0NjUwMzQ3NTdFLTQsNTIyMS44ODE2OTQxNDI0OTQsMTIzLjgwNjUyMDA0MzAxOTg5LDAuMDAxMzA2MjY0MzQ0MTQ4NzgxNAorNCxGcmkgMjggSmFuIDExLDAuMjA3MDE3NjkwMTI4MDU0NDYsOC45MDY2OTgyNTc4OTAwODFFLTQsMC40NzY5NjM2OTA2NDk4NjA2NiwwLjE3ODUyNzczMjQ2MTE5MjA1LDEuMTY5NzM0NzM3NTUzMDY4NywwLjQ2MDkzMTA4MDY1MDYyNzIsMy4yNTAyNjQwNjQxODYwNDI3LDIuMTUzNTQzMTk0NDM4NTMzNywyLjUyOTA1MzE3ODE3NDAzOSw0ODguOTEzMDI4NjYxMzg0NCwzOTYuMjExOTU1MjE0OTIsNTMzLjMyMzIyNDQ5NzA4NTIsMC4wMzg3NjYwMTMxMjcyMDM5NiwwLjA3NjgyMTEyODgwNjc0MDcyLDAuNDMwNTI0MzgxMjg2MTgxNjUsNTEyLjU2NzM4MTI1OTQ5MTYsMC40MjI3MDUxNjcwOTA3NzMzLDUuMzAxNjQxMDQxNzQwODMzRS00LDAuMDAyODQ5MDk5MzI1MTk3NDUyNiwwLjQxNDUyODA4MzY3MjQxODA2LDUuNTU4MDQ1NjAxNTA4OTA5RS00LDUuNDczMDg2Njc5MTkxNTg4RS00LDAuMDAzMjgzNDg2ODY2MTk2MTgyNCwxMzUzOC42NTc4NjgyMDUyMDQsMzI3LjQ0MzE0ODIxNTM4NzcsMC4wMTU5MDkxODgxOTg0MjQ5NDQKKzUsU2F0IDI5IEphbiAxMSwxLjExMTc0NzI0NTY5NDcwNSwwLjAwNDkzMzg3NjYzMDkzMjk1NywyLjU3MTgwOTcxMTg1MjkxNiwwLjk2MjQxODE5MTYyNDI4NzcsNi4zMDg2OTE5NjE0MTE4ODcsMi41MTA3NjY0MTM5MDU0MywxNy41ODc1ODUzNjUxMjA1ODUsMTEuNjU1MzI4ODczNzMzODU2LDEzLjY4MDI3NTIxODQ4MzY1NCw5OTEuNDkzNDUxOTkwMDEzNiw3OTAuMDk2NTA1Mjc2NzE1LDEwOTQuNzEyNjU1ODM0Nzc2MywwLjIxNjk4OTk4ODI2ODMwMTI0LDAuNDMwMzEwMjMxODg3MDIzNjYsMi4zMzM2NDQ4MTQ0ODk2MzYsMTA0Ny40Mzg5OTQ5NjY5NTQ0LDIuMjkwODg1OTIyMjAyNzc3LDAuMDAyOTIxNjA5MjQzMTIzNzcyOCwwLjAxNTk3OTkyNDY2NTg2MTMxNCwyLjI0NjQyNDQ3Mzk1NDc0LDAuMDAzMDY4MTA2NjA1NDA4NjAyMywwLjAwMzAzNzU3MTM1MjcxNjI2ODcsMC4wMTg3MDM2ODc0NTMxNTg4NSwyNTUyMi43NTY3ODQ2MjgyOTUsNjQ0LjcwNzk0OTY5Nzk0MzMsMC4wODU0MzIxMDI2NzA4MzQwNQorNixTdW4gMzAgSmFuIDExLDMuODQ4MDE2MTM0OTI0NzY2LDAuMDE4MTIwNzUwMzM3ODEzODEzLDguOTc0ODM4NTg4MDYyOTQsMy4zNTU1NjE0ODc3OTg1Mjk0LDIyLjAyMjgwNDg5MTgwOTIxNiw4LjkzNDYyNzcxNTkyMzE0OSw2MS43NzgyMjQxMTUwNjc1Myw0MC45NTYxOTI5MzA1ODk0Myw0OC4wMjAzODQ4MDU2NjUxMSwxODA3LjQ3NTcwNDYzMzQ5LDE0MDQuMjE5MTY3MDEwOTk5NCwyMDMwLjg4MzgyNDU0MjM5MDQsMC44MTIzNTc4ODg1NzQwNzI3LDEuNjEzMDk1MDc1NTMwMTIzOSw4LjIyNTAzMDkyOTE0ODM4NSwxOTMwLjc4MDA5MjczNzM4MzUsOC4wNzE3MTg4NjMxMDY2ODIsMC4wMTA2Mjc2MTYwODgxOTI1NzQsMC4wNjAwNDk3NzY1NjkwNzcyLDcuOTE0MDUxMzM5MzA3Mzk3LDAuMDExMTk2NDcwNTMzMzAxMzg3LDAuMDExMTk4NzQ3OTgxNTkwMDgyLDAuMDcyMjQ0NDAxMTYxMTI1MTcsNDE0ODIuMTE3Nzk3MDQyMjk0LDExMjMuNjQ5ODc3MTY0MTE1MiwwLjI5NTY5MzAyMDY3NTgzNzk3Cis3LE1vbiAzMSBKYW4gMTEsMTAuMTk1OTAzNDAyNjU1NzQxLDAuMDUyNzIxOTU2Mzc5ODEzNDEsMjQuMTEwNzE1NjU2MTE2MTUsOC45OTg2MzYyNzk0NTI2MzMsNTkuMTkwOTgwNzg3OTc5NTIsMjQuNzc0NjMzMDk4NjcwODYsMTY3LjcyNjI0NTY1NzE5NDQ1LDExMS4yNjU4MTQ0MTczMzQ5MSwxMzAuMjI2MTI1NDk5ODE5MzIsMzE1Mi4yOTI2OTMzMDYzMDIsMjM3NS45ODcxMTk3ODYzMDUsMzYxMS44MTg2NDE0Njc4ODgsMi40MzA1NDg1MjkwMTg3OTYzLDQuODM1NTAwOTY0MTk5MDMsMjIuNDU1NzQxOTQ3OTg3ODMsMzQwOS40NjUxNzIwNjM1MTA2LDIyLjAyNTQ4OTM5OTE4MDA2NCwwLjAzMDQ3ODAwNzU4NzkxNzU1LDAuMTgwNjYzNjc3MTk0NzE4NjIsMjEuNTkwNjgyNjI1NjIxNjYsMC4wMzIyNjgwNjkwMzk2OTY4MiwwLjAzMjc4MTAzMzE0ODIzOTE3LDAuMjI1Nzg5MzA2NTc3MzExOSw2MjcxNS4wOTA5Mzg1ODQwNjQsMTg1Ni45NDUzNTI5MTE0NTIxLDAuNzgzNTExMTE5NDI3NjgxNworOCxUdWUgMSBGZWIgMTEsMjIuNzE2NjQ0NjcyNDM4MTQzLDAuMTMzMzMzNzU1NzkzMDE2NDgsNTQuODE4Nzg2NjYwMzU5OTksMjAuNDA1MjI5MTE3MDE3MDYsMTM0LjY1NDg5ODcxOTE2NzUsNTguOTEyMjI5NTU0Mjc1MzYsMzg3LjE4Mjc4NDkzMTkzMTgsMjU3LjA4NzcyNjU3NjQxMDcsMzAwLjEyNTg5MTMxODA5NTQsNTM0OC4xMDY4NjA0NTI1NDYsMzkwNS42ODYzODczNjg5OTA0LDYyNDMuNjU0NTg3MTUyNTkyLDYuMzU5MDE1MDM0OTY0MDIzLDEyLjY4MDExNTU1NjY4MDY4LDUyLjI1NDExODYyNTY4Njk4NSw1ODUzLjg4NTYzNTE5MjAyMiw1MS4yMTQxNjgwNTI3NzY0NiwwLjA3NTY4MjMyMDIxMTExMTI4LDAuNDc1OTQ1MjM1NTc0NzgwNDcsNTAuMTg3Njk2MzAzNTc2NjE1LDAuMDgwNjQyMzg3MzMyMDk0MzMsMC4wODM1OTQxNjg5NjA5NDUwNywwLjYyMTMxNjQyMTg0NTYwOTgsOTE0MjMuMTA0MTA3OTQzMDMsMjk3OC44NTUzODU5MTMxOTYsMS43NDU4NzEzMzEyOTg4MDMKKzksV2VkIDIgRmViIDExLDQ1LjA0OTc5NzU0OTAxNjg3LDAuMzA3ODEyNjA2OTMxMDc3MiwxMTEuNjM5NzQ5MTI1NjU1MTksNDEuNDIyOTcyMzAyNjQyODQsMjc0LjM5NzY0ODc5OTA4Njc3LDEyNy4wMTM0NDkwNTQ4Nzc2NSw4MDQuMzcwOTU5MjkwODg0Niw1MzQuNzU3MzYzNDk2MDQzMSw2MjIuMjAwNDY1MDA0NTMxOCw4ODQ2LjQ1ODU4ODc3ODM1NCw2MjU5LjA1MzAzMTY5NTk0NCwxMDUwNC40MjI5MDY5MDYwMzEsMTUuMjE2NTEwNTgyMjE4Mzc4LDMwLjQxNjcxNDYyNzEzNDI5LDEwOS42ODE1MzcyNTY5MjY4Nyw5Nzg4LjE4NzYxMDQ2OTEyNCwxMDcuMzk1Mjg5MDQxOTk3NTYsMC4xNzEyMDA0NTYxNjk0MjcxNywxLjE0Nzc2OTQ3NzAwNTMzNjQsMTA1LjIwMDI0MDMxNjA4Njk2LDAuMTgzNzY5MTIzMTcyMTQyNDIsMC4xOTQ5ODA5NzczNDE1NzI4MywxLjU2NTMzODA1NjI5NzM1ODQsMTMwNTMwLjE0OTIxNDkzMDg5LDQ2NjIuNjI4NjIwOTI1NjY4LDMuNDYyOTA1MDkyMzE2NTY0MworMTAsVGh1IDMgRmViIDExLDgyLjQ1NzY2MTUzMDI1NDMsMC42NjUyNDQzNjI0NDk0MzI0LDIxMC45MTQzNjkzOTg1ODc4LDc4LjAxOTU4Mjc2MDM1Njc0LDUxOC42OTAyODcwMDE1MDY4LDI1Ni40ODA3MDU3MzUyNzc4NywxNTU3LjA0OTkwMjkxNDUxOTksMTAzNi43MTcxMjUwMjY5ODI2LDEyMDEuNDM2MzM4ODA0Nzg5LDE0Mjc3LjE0MjE0MDcwMTQxLDk3NzkuNTcwMTI5MzU1MjE3LDE3MjE0LjkwNjE3MjEzMDYxLDM0LjA0Njk0MzkxMjUyNzcsNjguMjI0NTI5MDMzODE3MTMsMjE0LjkxMzY3NDM0MTA5ODQ0LDE1OTUyLjI3MDk4ODUyNDExNSwyMTAuMTk5MzIxOTc4OTcxMDgsMC4zNjIzOTkzNzYxOTQwNTMyNywyLjU4OTYwNDcyNTg1NjI2MjIsMjA1LjgwMTA0MzA5MTkwNzk5LDAuMzkyMDYzOTA0MzI3NzY2LDAuNDI2NTM1Mjc4ODIxODc3MiwzLjY3OTUwMTkwMTM2NjMzNzcsMTgzNTcwLjIxMDQzNTk2NjY3LDcxMjMuMDc4NDkxNzQzMjQ5LDYuMzM5NzMxNTQxODc5OTg0CisxMSxGcmkgNCBGZWIgMTEsMTQyLjYxMzYxOTI4MjA1NzI3LDEuMzY0MjU5NzY5OTYzOTc4NywzNzcuNjgxNjQ2NTg2Mjc2MiwxMzkuNDM4OTMxMTAzMjU3OTQsOTI5LjExMTA4NDMzNzgxMyw0OTQuMjQzNTkwNDUxMjUxOCwyODY4LjEwMDE2NzMyNDM3MTMsMTkxMy4wMzUzNDAxOTM2NCwyMjA3LjAyNTUwMDU1OTUxMywyMjUyMS42MTUyMDk4NTYzOSwxNDkwNS4wNTU3NTA0ODc0MjcsMjc1NDIuMjMyNjQxMjMzNTYsNzIuMTAxODE5NzExNzEwMjIsMTQ0LjgzMDMxNDIwMDAwMzA0LDQwMS4yNzQyOTI1NzEzNDQsMjUzOTQuMTcxNjYxNTg2ODEsMzkyLjAwMDI4ODYwMjI3MzQzLDAuNzI4MzAyNTU2OTk4NTEyMSw1LjUzMjk1ODM3MjQwNzcsMzgzLjU3MzQ5OTk5OTkwMjM3LDAuNzk0Mjc3OTM0MTQ3MDY1NSwwLjg4NzA1NjU4MDQyNjA3NzQsOC4xNjM1NzE2NzQwNDQzOTUsMjU0NjEzLjA0MjQ1NDExMTI3LDEwNjIwLjY0NDIzMzE1NTUzNywxMC45NjYzMTc1MDAyNTM1MworMTIsU2F0IDUgRmViIDExLDIzNi41OTk5OTMxMjM1OTExMywyLjY3NzM1ODg5ODU4MDA3ODcsNjQ5LjI0MDY4NDEzODgzNywyMzkuNzc4NDE5NzExMjY0OSwxNTk2Ljk2MTY0OTg0MzUwNTUsOTE4Ljc1MTM3NDUwNjc5NTUsNTA5MC42MTcyMzE3Mzk5NzgsMzQwMi4zOTY3NTc2NjY0NjgsMzkwNi4wMjg3NDM0ODY4MDksMzQ4MDAuMjY5MjI5MTA2MDUsMjIxNzUuMDc5NTcyNzY1MTUzLDQzMTIyLjQyNjUwMzE1MTYyLDE0NS43MjE5MDMwNjA0MDg0NCwyOTMuNDIwNjg4MTc5NDk2MSw3MjIuNjk2NTQ2ODE2MDc1OSwzOTU4MS44MzUxMzQ5NjY3NCw3MDUuMTMwNjUyMzE4MTc4NywxLjQwMTY2NzczOTU3NjI4NjcsMTEuMjkwMjIyMDY4ODk3MDEsNjg5LjQ5OTI4NDUzMTgxNzEsMS41NDEyNDE1Njg0NTI4MTExLDEuNzY4OTU0NTI5NTM0OTU5NiwxNy4yNTA4ODg0OTY3MDUzOCwzNDgwODkuOTEyMjc4NzY5NzcsMTU0NTcuOTc1MzUyNDE3NTM0LDE4LjE5MTE3MTI5NDk5OAorMTMsU3VuIDYgRmViIDExLDM4MC4wODQ0NDA2ODE2MjU0LDUuMDYwNDc3OTg5MDM0NjMyLDEwNzkuMDgwMDkwNzM1ODg5NCw0MDAuMDc4MTA2ODg5Njg5MiwyNjUyLjA2Nzk4Mzk3OTExOSwxNjU4LjM2MTM4OTE4OTcxMDcsODc3MS4wNjc0MTY3OTAzNTYsNTg3Ni4wNTU2NDQ0MDA1NzE1LDY3MTAuMjQwMjIzNDQ4OTQzLDUyNzU3LjY5OTcxMTU3MzI5LDMyMjEyLjQzODk4NjU3MDY4Myw2NjE3OS44NzcyMzIxNzM4MiwyODIuOTY4Njk2MzMxMjk5MDQsNTcxLjE5ODg3OTA4Mzc5NzksMTI2NC43MTM2ODEwMjc1Njg4LDYwNTE3LjYzNTM4Mzk1Nzg2NiwxMjMyLjUxNTY5MDg4MjE1NDMsMi41OTk1NTQ4MTc1MzcyMzEsMjIuMTU2MDYwNTYzNDMxNDcsMTIwNC4yMDQ1OTUyMDMwMTQyLDIuODgyNzI1MzgzOTA4ODQxLDMuNDA0ODUzNzM0MzU2NzUwNiwzNC45ODk1OTM2NjEyNzc2NSw0NjgzNzEuMjAxMTUzOTA5NDQsMjE5NTkuMDk4Mzk2MDQ0Mjk0LDI5LjIwMzE0MjUzNzk1MTMyMgorMTQsTW9uIDcgRmViIDExLDU5NC42Mjg3MjYzNzc5NTM2LDkuMjYxNDUwOTQwMDU2NTg0LDE3NDAuNDM3OTk3MDc5MjE0Myw2NTEuMDExNjU4MDM4NDI1LDQyNjkuNjY2ODM0OTc2MjAyLDI5MTkuMjM1ODE5MzI1OTI0NywxNDczNS40MzI0MDIwMTM0ODYsOTg5OC44OTA2MzM3NDU3MjUsMTEyMzkuNjg4MTgwNTk5NzU4LDc4NTIxLjgxNTE4NzE0NTM0LDQ1NjYyLjgyMzc3Mjg2MjY5LDk5NjA2Ljg5MzMyMTMzNTEsNTMwLjk0MjA4NTU3ODU1MDksMTA3NC41ODgyNzQ3MzUyMTcsMjE2MC40OTgxMjY1Njk5MDkzLDkwODI4LjczNTk2NjY4ODUzLDIxMDMuMjM5OTgwMDQ5NDcsNC42Njk3MDY4NTU2MzU5NzUsNDIuMDYzNDU3NjYwOTIzNDI2LDIwNTIuODM5MjA1OTk0MSw1LjIyNDQ4Mzg5OTg3ODgxOCw2LjM2MDIwMzQ3Mjc3OTUyMSw2OC41NjE0Njg5MTgyMzU3OCw2MTkwMjIuNjc3NTkzMTc2OCwzMDQyNC4zNjQzNjQzNDgwNDMsNDUuNjExODA3NDkzMTE5ODEKKzE1LFR1ZSA4IEZlYiAxMSw5MDkuMDExMjU4OTI1MzY4NiwxNi40ODYyNDg2MDQyNTg1MzUsMjcyNy44ODQ1Njk4NzEzNjksMTAzNi4xNTc5ODQ4NDI3MjI3LDY2NzAuNzg1MDQ3MDY3MTk5LDUwMjYuNjU0MDA5Mjg0OTMsMjQyMDAuMjgxODUxNTAzMTQzLDE2MzEwLjQwMzQ3NjA0MzQxNSwxODQwMy44MzI1MjUzNjQ5ODUsMTE0Njk3LjM0MDk2OTU1MzE3LDYzMDg0LjM5NDIzMzk5NTcxLDE0Njk0MC4zMjIyMjUwODEyNCw5NjcuMDE4NDU4Nzk1MDQ3NSwxOTYyLjc5OTQ5MDU0OTU4NywzNjEzLjY5NDkyOTQ3MzAzMDIsMTMzNzg2LjE0Nzc0NjcyMTYsMzUxNC44NjU5MTA5NTQ0MTMsOC4xNTk4OTMwMTE3NDk2ODgsNzcuNjM4MTU2NzMyODYyMywzNDI2LjEzNjY3MTg3Nzk2NzcsOS4yMTUzODgyNjM4MTM4NjYsMTEuNTgzMDA1MDQ1NTEzNDQ3LDEzMC40NjY2NjMzOTUzMjcyMyw4MDE4MTMuMjQzMTMwOTg3LDQxMDYyLjMxMDM5MTkzNDMzLDY5LjUwODg2NTkyMDg1NzQ1CisxNixXZWQgOSBGZWIgMTEsMTM2MC4zMzM5NzAzNTkyMjU1LDI4LjY0ODI2NzcyMDY0NTI4Niw0MTU0LjIzMzM0ODY2OTU5NSwxNjE1LjU3OTY3NTk4NjUxNjMsMTAxMDkuMTI5MjU3MTg2NzM2LDg0ODQuMDgwNTc4Mjk0MjA4LDM4OTAyLjMyNzUzMTM3NDYxLDI2MzIzLjk2NjY2NTYwNDk2MywyOTQ5NS4wNDQ2NDc1MzE5OCwxNjQyMzguNzQ3MjM5NjUyMzUsODQ3OTguNzk4Nzc3MzM4OTIsMjEyMTQ2LjQzNjg3MzM3MDYsMTcxNS40NzM5NTE1NzYyODQ0LDM0OTMuMTY3MzU1NzkzNDgsNTkyOS42OTk4OTk3OTQ1NjQsMTkzMTgxLjkxMjEyNTM2MzA3LDU3NjQuNDQyNTY3NjM1MjM4LDEzLjkxOTYxNDExNTk1MjA0OSwxMzkuODYzNTc2NjQzMDYyNCw1NjA5LjA1MzU2NTA2NzE4LDE1Ljg3ODM5NDE2NDM4MzM4OSwyMC42NDI3ODk3MTk1NDgwMjcsMjQyLjA3NDM3MjI4OTEzNDAzLDEwMTU3NDIuNzc0ODAyOTU5Myw1MzkxMi45ODc1ODQ1OTMyNSwxMDMuNDg0NDk3NTQ4NTE3NjUKKzE3LFRodSAxMCBGZWIgMTEsMTk5NC41OTk3MTU2ODczMzM2LDQ4LjczNTU5OTg4NzYxMjAzLDYxMzkuNTgzODE3MDk0NjA0LDI0NjkuMDgwODI0MzA4MzQxLDE0ODM3LjU4MTIzOTgzNTM0NiwxNDA1NC4zMjU1ODY3Nzk3NDMsNjEyMjUuMjc1MzI1OTY4OTU2LDQxNjM0LjA3MjY0MjQxMzAyLDQ2Mjc3LjY3ODY1NTExMzAzNSwyMzAxNDguNjA1NjI1NDkyNjQsMTEwNzQ0LjQ1NDg2ODQwMjM4LDI5OTEzMC4xODMwNTI0ODc5LDI5NzEuMDI5Njk3MzI0Nzg4LDYwNzIuMjUxNjcyNTY1Mzg2LDk1NTYuNjUzOTc1NzA5MjE2LDI3Mjk4Ny4xNDQzMDU4NDI5LDkyOTAuMjQ1ODI0NzUwOTMsMjMuMjQ3NDg5Nzk1NjkwNDEzLDI0Ni42Nzg2NzQ0NjUzOTcwNSw5MDE3Ljk0NDUzMTE1ODcyNCwyNi44MDU3MTU2MzYzNTczMjMsMzYuMTA5NzAyNjIwMTgyMDIsNDM5LjMxMjU0OTc0NzYzNjgsMTI1NjQ5Ni4yMDIwMzc2NzE2LDY4NzkwLjYwMDE0MjU4NTE3LDE1MC41NzEzODkwNDYwNDg1NQorMTgsRnJpIDExIEZlYiAxMSwyODY2LjMyMDM4MjExMDQyODUsODEuMzM3ODM2NDEzNjg1OCw4NzkwLjI0OTI4MjcwMDg0MSwzNjk3LjkyNjc3MTkxMjk5ODQsMjEwNTIuNDEzMzY4MTk2MjUsMjI4NjMuOTI0MzgwODQ5MTc3LDk0Mjc0LjYxNjUxMzUwMzY5LDY0NTAyLjkxNzI0NTA0NzQyLDcxMDM0LjgwMTcwMTUwNzQ3LDMxNDk3NC4zMDY1MTg2Mzg1LDE0MDM5MS43ODcyMjAxNjk0LDQxMDk0My43MTY1MTE1ODQ4LDUwMjkuODk2MTg5MDE4Mjc2LDEwMzI1LjU0MTU2NzA2NzQ5LDE1MTM1LjM2Mzk4MTg4MjI3MiwzNzY3MzcuMzEwMjk5Mjc3MiwxNDcyNS4yNTQ3NTA2MjMzNiwzOC4xMDExNjcxNjkzNTk0MTQsNDI2Ljk2MTcyNDkyODkxMDYsMTQyNDUuMjA3Mjc1NTgzNjY5LDQ0LjQ0NTk1NTQwNTAyMTU1LDYyLjE0OTcyMDQ3NTkxNjc1LDc4MS42MDEzMzUzMjM0NTA0LDE1MTY2NTMuNTcwNDI4MjA4NCw4NTI3NC4xOTk1OTYyNTg4NywyMTQuMDg5ODQzMTUyMTgzNDgKKzE5LFNhdCAxMiBGZWIgMTEsNDAzNi43MjczOTM0MDY3NzE2LDEzMy4zNzk5NTMxNjM4ODAzMiwxMjE2OS40MjE0NzMzMTU4NDQsNTQyMy4zNDQ4ODE5ODI2NDgsMjg4MjUuOTA3NzQ2NTYwOTA0LDM2NTI0LjQ3MDQ5NjU4ODQ1LDE0MTgxOC4wNDE5OTI0NjE5LDk3NzcyLjczNTIxMDQ0NTg0LDEwNjUxMC4zNzExNTkzMDAyLDQyMDE1Ni4yNjYzNzE1NTIzNywxNzI3NjkuOTM1OTI3MTg4ODcsNTQ4ODIwLjI2OTU0Mjk5NDgsODMyNi4yNzQyOTk4OTg2NywxNzE4NC41NTU4MTYzNzI2NTMsMjM1NTMuNjY1NzEzODc1MDY3LDUwNjY4Ni43Mjg0NzE0MDE3MywyMjk2MS41NjMwMzU3OTQxMiw2MS4zOTIzMTM2MzE2MDE0LDcyNi41MzUzMjU0MzA1NDE0LDIyMTA2LjgzNjYyMDMwNDU0OCw3Mi41MjI4MTY4NzQ3MzkzNSwxMDUuNDUxNjM5NTM0Mjg0NTQsMTM2NS41NjkxNTQ4ODk0ODYsMTc4NjY5NC40OTE0Mjc1NDkyLDEwMjc1OC43OTcyNzM0MDU1MSwyOTcuMzc1Njk1ODg5OTYxMworMjAsU3VuIDEzIEZlYiAxMSw1NTcwLjM4MjI2NDU5ODM1MiwyMTUuMTE3NDQyOTQ0MDU1OCwxNjI2OC4wMjI5ODMxNjEwMDcsNzc4MC4xODIyMjIwNTc2NywzODA1Mi42ODc3MDQ0MDIyNSw1NzI1MS4xOTIwNzUyODk2NTUsMjA3OTg5Ljc4MTY1OTgyOTIsMTQ0NzI3LjUxOTY0MTIxNjY0LDE1NTY3Mi4wMTMxNzM2MDkxLDU0NTM5Ni4xMTc1NTcxMzQ0LDIwNjYwOS4zNjg0ODk1NjYwMyw3MTEzNDkuNDM5MjgxNjQ0MywxMzQ2Ny4xMDI2MzQ1MzM3MDUsMjc5ODEuMjMxNzE0NDUwNjUsMzU5OTUuMDc0NjU4Nzc2NDUsNjYyOTMxLjAyODg3NzA0MiwzNTIyMi4zMDIzMzE4MDA5OSw5Ny40MDAwOTU4ODM4MDI5OSwxMjE3LjEwNDA5MDAxMTY4NTIsMzM2ODMuMTYxMTIwNjI1MDksMTE2LjY0NjI1MzE5OTQwODc5LDE3Ni42Njc4NDI0NDMzMTQwNCwyMzQ1LjY2OTQyMTIyMjY0MywyMDU2NDgwLjY3MDg1Nzk4OSwxMjA1NTIuMjE4NjM0NDMyNzMsNDAzLjM4MjA5NDY0MTM2MDEKKzIxLE1vbiAxNCBGZWIgMTEsNzUzMC4yNDE4NjkzNzA0Mzg1LDM0MS40MjEzNTc3MTU4MzYxNywyMDk4OC42Nzg4MTg1MzQzNywxMDkwNC42MDQ2OTQ1NTU5Niw0ODQzOC4xMjM3NDI3NTg2NDYsODc5MzEuMzMzMDAxNDQyMjUsMjk2NjcxLjI1NDc2NTE4NTEsMjA4NzE3LjAyNzkzNzkyMTA4LDIyMTIzNC45NDU5NjQyMTgwMyw2ODgyODUuODU3OTIwMzE2OSwyNDA1NTEuMzQ4OTU1MzI0MTUsODk0MTgyLjAwMzMzMzg5OTcsMjEyNDcuODI0NzU3ODE5Nzg0LDQ0NTE5LjU4ODg0MDEzNDkzLDUzOTU5LjkzODM5MTA1NTgyLDg0MjgxOC41NTY1MjM4Mjc2LDUzMTI5Ljg3ODE0NjkyMDc3LDE1Mi4zNDI3MjUwMTc1MDQ2OCwyMDA5LjIxODUwODI3NjEyNCw1MDMzMi43NzIxOTMwNTk4MzUsMTg1LjE5NjI0ODY2OTMwNDUsMjkyLjYyNjQ4MjgxMTkwMjksMzk2NC4wMjIzODcyMTE1OCwyMzE2NzIwLjI3MDQ0OTI1MzcsMTM3OTgzLjUxMjAxNjQxNDkzLDUzNC4xNDY3NzI3NzgzNjQ2CisyMixUdWUgMTUgRmViIDExLDk5NzEuODkxNjE2ODcxMjI4LDUzMy4zNzgwODYzMTQ2NzQ4LDI2MTUzLjIzNzgyMzM0MTA0LDE0OTE2LjYzNzA0MTUyMjk0MSw1OTU0MS4yNzQzMjY5MjY2MiwxMzIwNjkuMjQ5ODQ1MTIwOCw0MTA1NzQuODc3NzA5MzE0NywyOTI1MTIuMTUyNzA3NjM2MDcsMzA0OTc5Ljc1NzY5OTYzMDYsODQ0NDA2LjQ3NDgwMTE5NDksMjczMzUxLjgxMzMwOTE1NjE2LDEwOTA1MDEuMzc1NjgwNzYzNSwzMjYyMi43NjY1Mzc2MjczOSw2OTA3Mi41NTg1NjkyNjQ1LDc5MjI3Ljg0MzkzODMyNDQxLDEwNDA5NjQuMjQ1NTAyNjIxOCw3ODc1Mi41MDM5MzExMTE5MiwyMzUuMTc3MTk1MjgyNDQyNSwzMjcwLjg4NDI5NTExNDkyNzcsNzM2NTEuOTk5NDExNDI5MzIsMjkwLjYxNzk0NTcyNjAzOCw0NzkuNzQyMzA5Mjk0ODg2OSw2NTkyLjM3ODEzODQxNzYzNCwyNTYwMDExLjE4OTc4NTkwNSwxNTQ0ODkuNDM4MTQzMjc2Nyw2OTAuMTY2NDc4MTE0MTg0NAorMjMsV2VkIDE2IEZlYiAxMSwxMjkzNy44NTEyNTM2NjIyNzcsODIwLjA5NTE4MzU4ODMxMTgsMzE1MzMuNDEyNDcyNzQ4ODMsMTk4OTkuODY3MDA2OTI3MDc3LDcwODU3LjI4NzUzMzkzMTExLDE5MzUwMS41MjE2NDA0ODQ0NSw1NTAyMzIuNzQ3MzEyMTcyMywzOTc0NzUuNDA0MzU1OTEyLDQwNzAzMC43NzYxNTk1OTY5LDEwMDc5MjYuNTUyMjMxMzc4NywzMDQwMjMuOTgyODU5MzkxMTQsMTI5MjE0OS41NDMwNzk4OTkyLDQ4NTk2LjI2MDY3NDUwNjU4LDEwNDIyMi4yMjkxOTY4NzcyNSwxMTM3MTQuNDM5MzEzODU4NTQsMTI0OTk1OC4yODEwNzYxMDksMTE0NTg5LjU1ODg1NDU1NDYsMzU4LjY5NjUxNjU4MDQ2NTYsNTI1My4xNDQ3OTEyODkxNDksMTA1MzM5Ljg1MDgwODk0MjMxLDQ1MS4yOTA2OTQxMjY3MDg2LDc3OS4xNjMxMDg4Nzg0NzAzLDEwNzg3LjE1MjgwNjEzNTg3MywyNzgxMzExLjY0NTk3Mzg1MzMsMTY5NjYxLjgzNzE2NTU0MDI2LDg2OS44MDQ5NzMxNTgxMTA4CisyNCxUaHUgMTcgRmViIDExLDE2NDUyLjk2OTU4MjA1NjQyLDEyNDAuNTI5OTA5OTU3ODg3LDM2ODkyLjUwOTYwMzg2Mjg1NCwyNTg4Mi40MzE0MDY1MDc0MjUsODE5MDYuMTU4MTA2OTU4MSwyNzU4MDUuMDgyNjU1OTc5MjYsNzEzMjc5Ljg3MDAxMzU1MSw1MjI4MDguNTMzMzkyMDE5MzQsNTI1MzkwLjE3MjY4NTUwNTYsMTE3MjUxMy43MjU4MTgzNjMzLDMzMTkwMC4wNzMxNjQ3NTczLDE0OTA5OTIuNjE0OTk3NzgwOSw3MDAxOS4xOTA1NTcxNDU3MiwxNTI0NzQuOTkyOTAzMzMxLDE1OTE4Ni43Mzg0ODEzNTc4NCwxNDYxNTUxLjkzODA4NjM1NiwxNjM0NDQuNDc1MjQ0MzkwMTQsNTQxLjA1MjUyMjAxMDQ1MSw4MzI0LjM2MzA2ODc1MDM1MiwxNDY5MzkuOTg4Mzc4NjExNiw2OTQuMjU1Nzg3Mzg4NzE5MywxMjU0LjUyNDUyNzgyMDk4MzQsMTczNTcuMDMwNDE4MjI0MDQsMjk3NzkwNy42MzU4MzY2NzM0LDE4MzI1Ni40MjAxNjI5OSwxMDY4Ljk3OTA4NDk0MTQ5MjEKKzI1LEZyaSAxOCBGZWIgMTEsMjA1MjEuNTg0MTA5Mjc0Mzg3LDE4NDUuMDIzMzgwOTQwMTU2OCw0MjAyMi44MDY4NzE4MTM1LDMyODI0LjAzNDY2ODE3MDk2LDkyMjk4LjU0NDEwMzI4NzY4LDM4MTQzMi41OTUzMTg5ODU2NCw4OTQ0MjkuNTYyNzk5MTgyNSw2NjUyMzYuNzM4MjMyMTI4OSw2NTYwMDIuNTA0MTQ0Mzg2NiwxMzMyMjYxLjA0MjMxNjI1MSwzNTY2MjMuODUzNjQzNDIxNjcsMTY4MDA3MC42NjQ5ODM4MzI3LDk3MzI0LjI0NzgzNDg0MDAyLDIxNTY1OS44MzQ3MDcyODUxLDIxNjg0Ni42MTc5MzA0MDQ1LDE2Njc5MTcuMzc1MTY4MTQ4NywyMjgxMzEuOTM4MTE2NzcyNzcsODA3LjkwNzY5NjYxNzA1NzYsMTMwMTQuODQzMDQyMTU4NjczLDE5OTQ3Mi43NTYyOTY1MzY4NiwxMDU5LjI1NzExOTQ2MDc4NzIsMjAwMy42MzA0NzY2MTc3MTI3LDI3NDM4Ljc3NzAwOTkxMzQ4MywzMTQ5MDU2LjI2MzQ5NDgwMTcsMTk1MTc0LjI0NjQyMjAwOTEsMTI4MS4zNzgyMDk3MTYyMDMyCisyNixTYXQgMTkgRmViIDExLDI1MTI1Ljk2OTQ5MzcyNTIxLDI2OTUuODQ0Mjc4ODA1NjU0LDQ2NzY4LjQwNTc4NDg3NTcsNDA2MTEuODA2NjYzMTIxMzQsMTAxNzY2LjQ2NzQwMzA0NDk1LDUxMDc2OC4zMzQ4MDUyMzQ3NCwxMDg2MjQ0LjUxODI2NTM2MzgsODE5MzQ1LjE0NzA2NzE0MzUsNzkzMzg2LjEzMzMwNjYwNDYsMTQ4MjM3MC4zMTMyMzc2MDcyLDM3ODEwMC41NDY4OTkzMjQzLDE4NTQyNjIuMjI3Mzg3MjQ3LDEzMDI4OC4zMTY0ODgwMzM4MywyOTQyNDIuODgzMDE3MDMzMTYsMjg2ODYyLjYyMjMyOTA3OCwxODYyNjA3LjYzNjczMjk1MjQsMzEwOTc3LjU1MDA3OTI2ODY0LDExOTUuNDEzOTQyNzM5MjE5MiwyMDA3MC40NjAyMjgyNzIyNSwyNjMwMzAuMzA3MDY2NDM5MSwxNjA0LjYzNjgwMjc0MzMzMTQsMzE3NS42MDcwOTc5MjM4Mzc1LDQyNTY1LjU1Mzk2MjA0MjQyNCwzMjk1NDkzLjM4Mjk2Mjk3MSwyMDU0MjkuNzQ1MzEzNzQyNTUsMTQ5OS4yNjA5NzQ2NjM4MDA3CisyNyxTdW4gMjAgRmViIDExLDMwMjI1Ljc1MzIzNjIxMTYsMzg2Ni4wMDk3Mjc4MTUxNjkzLDUxMDMxLjk4ODQxNzYyMjIyNiw0OTA2Ni45NjY5MTgzMjQxNCwxMTAxNjMuMTMyNzk0NjUwOTEsNjYxNDg0LjQ4Mjc5ODA3NTgsMTI4MDQ0Ni4yNTEyODk5NDExLDk3ODUwMC4xODY2NDg1NDEyLDkzMTYwNy41MzAwNjIyODg0LDE2MTk0ODUuNTQ0MzgzNDY3NCwzOTY0MjkuNDQ3OTMzMjkwOCwyMDEwNDQ1LjE5MDI0NTA3MDcsMTY3OTQzLjI3OTI5OTYwODg3LDM4Njg0MC4yNzUwNDUzNDYyNCwzNjgwMjkuMzUwMTcwNTA1NiwyMDQxMDQ2Ljk3NTQ4ODc3OTgsNDEzMTYyLjg4OTUyODEzLDE3NTQuMzM2MzE3OTc3NDI1OCwzMDUxMS40ODM0OTMyMzM3MSwzMzY0OTAuMTk4MDE0NDE3NjYsMjQxNS45NDI3NjA2ODgzNTU1LDQ5OTUuNjk4NzM2MzU1NDk3LDY0NzAxLjQxMzY3MjgzMTU5LDM0MTg5MzguMzU1MzA5NjM3NywyMTQxMTUuOTYxMTIzODQzOTcsMTcxNC42MTI0OTc4OTMwMTgKKzI4LE1vbiAyMSBGZWIgMTEsMzU3NTguMzQ0NzcyMzA0ODUsNTQzNS43ODA3NTk4NDM5OTUsNTQ3NjkuNjIyNjk2MTQ2NjUsNTc5NjEuOTQ1MDgzOTQ0MjgsMTE3NDQzLjYwMjc1OTgwODE2LDgyODU1OS40NDQ5MDQ2ODg0LDE0NjkyNzUuNDYxNjgzNzczNCwxMTM2MDA2LjgwNTY3MDQwNTUsMTA2NTIzNy41Njc1MTk5NDE2LDE3NDE3MDcuNjY4MDc1MDg1NCw0MTE4MzcuMjE1NzUyNTI5MzMsMjE0NzI5Mi44NDExMDE4MTMsMjA4NzAzLjg4Njc2NTQ5MDEsNDkwMjA2LjcwNjAwMjgzNDI1LDQ1Nzc0NS4wMjg5MDc3NDA5LDIyMDA1ODEuMDkzNjQzNzM3LDUzNDA5NS45OTQ0NjU3NjI3LDI1NTUuNzI3MDU4MDE1MDA3LDQ1Njg3LjE0MjUxMTkzMjE5NCw0MTc1MDcuOTIwNDE3NDgzMywzNjE4LjQ0NTgxNDkzMzQ3Nyw3ODAwLjI5OTk1Njk3MTAzNSw5NjIwMC4xNzYwNTk2NjAwNywzNTIxNjY5Ljg0NTExMTQ2NywyMjEzNzMuNDYzNDEzNjA3NzcsMTkyMC4yNzU4OTk2MDA1MTg2CisyOSxUdWUgMjIgRmViIDExLDQxNjQxLjAzNDIzMzU2Mzg3LDc0ODYuNzUwNTgyMzAzOTY0LDU3OTc5LjM3OTM3OTg2NzU1LDY3MDQ0Ljk4NjAzMjExMzYsMTIzNjM3LjkzODU4NDQ1NDkxLDEwMDUwNDYuMDY4NjMwMjY1NCwxNjQ2NDgzLjg4Njg0MDgzNjgsMTI4NjA5Ni44OTM2NTc4ODgsMTE5MDAwOC43NDQyMDA0MDY0LDE4NDgzOTYuMTI2NjMzMTQ2LDQyNDYyMS41MjAwMTUwNzExNSwyMjY0ODgzLjk1NDM0ODY0NjYsMjUwNjcwLjQ3NjQwMTY3MTQ4LDU5OTc2OS43MzQ3OTk2MTQ1LDU1MjM3Ny4xMTU3NjkxMDE4LDIzNDAyMjguODE1OTEzNzk0Niw2NzEwNzcuMjUxNjY0NzIwOSwzNjk4LjYzMjA3NDMxMTMwNyw2NzMwNy43MjQ4ODc2MTkzNiw1MDI4NDMuNDIwNTg4Njc2LDUzOTUuMTc4ODU4NjY0MjMsMTIwODQuODU2NTUwNzIwNzc1LDEzOTYzMy4yODE5ODQ1MjM5NiwzNjA2MjAwLjQ2Mjk2ODIzMDcsMjI3MzY1Ljc0Njg3NzQ1MzksMjExMC43MzI4NzA5MjI3MDQKKzMwLFdlZCAyMyBGZWIgMTEsNDc3NzUuNTkxMDA3MTM0Mzc1LDEwMDk0LjI2MjQwNTAyNzU0NCw2MDY4OC40NTA1NzEzNDI1MSw3NjA2Ny4xMjgxODU0NzMyNywxMjg4MjQuNzU5MzI1Njc3MTgsMTE4MzMxMy4wNTUwNTIzOTI0LDE4MDc3OTAuMDY2NzUxODcwOCwxNDI0NTA3LjY0ODM4ODY0MiwxMzAzMDgyLjk5NDk5NjIyNTcsMTkzOTg3MS43NTg0Njk0NjkxLDQzNTEwOC4zNzg4MzA2MjYzLDIzNjQyNzAuOTY0MTg5NjU0NywyOTE5ODAuNDc1MzUyMDMxNjQsNzEwNTAxLjM5MjE0NzExMTQsNjQ3ODk1LjkxNTg5MTczMTksMjQ2MDI5My40MTE5MzMzNjI1LDgxOTQ3OC4zMDExMTE1NDM0LDUzMjAuMzU5MjQzNzkyMTE0LDk3NDI0LjQzNjQxMjYwMzQzLDU4ODkxNi4wNDk1OTA0NDkzLDgwMTIuNTg1NjA5NjQ0NzM3LDE4NTY2LjM5ODc2ODUwOTc1LDE5NzQzNS40MTY5MzA2MTI1MywzNjc1MDQ5LjIyNzYyNjU5OTQsMjMyMjYxLjU0Mzc4NDM1MDc3LDIyODIuNDEzOTc5NDMwNDUwNgorMzEsVGh1IDI0IEZlYiAxMSw1NDA1NS41MTk1NTA5NzA5NSwxMzMxOS41MjQ1NTc0NTM4ODYsNjI5NDEuNTcxOTY4MzQzODE1LDg0ODA1LjgxOTM1OTg3MjYyLDEzMzEwOS4yNTA2MzQ2NTEzLDEzNTYyOTMuMTE4OTg4NzMzNywxOTUwODY0LjgxMjMzNTg2MzIsMTU0ODYyOC4wOTc3ODU1NTc2LDE0MDI5OTcuNjU2ODc1NDIxMywyMDE3MTA3Ljg5NzQ2NjE1MSw0NDM2MjIuNzMzNDk0NTM1OTYsMjQ0NzA5Mi44ODgzMDQ1Nzk1LDMzMTA4NC4wODI3NzgyODkyLDgxNzc4MS4zNTAxNzkwMTE4LDc0MDUzNy40Nzk5MzEwNTYyLDI1NjE5NTQuMzY2OTU2MzczLDk3MzQzNi42ODYxMTE1OTM3LDc2MDkuNzY1NDMxOTcxMzksMTM4MzE1LjUyMTA2ODgzNSw2NzIzODMuMTE4MDQxODYzNywxMTg1Ni4yNDkzNDE5OTU1NSwyODI1OS42MTUzNzI5MDU5OCwyNzEzNjMuNTY4Njk2ODU4MDcsMzczMDU5Ni44NTE2ODAyNzYsMjM2MjIzLjIxODk4Nzg3OTYsMjQzMy42MDg3NTgwNzAzOTkKKzMyLEZyaSAyNSBGZWIgMTEsNjAzNzQuOTY2NjczNTk4NjUsMTcyMDIuNzQ0MzE0Njc0MDQsNjQ3OTEuOTM0MjE2MTcwMyw5MzA4MC44ODgwNzM4OTE4LDEzNjYwNi44NDIyMzYxNTQ1NywxNTE4MzYyLjM5MTEyMzQyMSwyMDc1MDIyLjQzMzU5NjMwOTcsMTY1NzMzMi45ODYwODAwMDQsMTQ4OTQyMS42NTczMDg4NDExLDIwODE0NjAuMzIxODM3ODg4Myw0NTA0NzAuMDQ2NDkyNTg3NjYsMjUxNTI3MC4yODQ3MjI1MjksMzY2ODg0Ljg3NzM3OTk4OTcsOTE3OTg1LjI2Mzg0OTc2Miw4MjcyODYuNjg2MjM4NTE0LDI2NDY5MDkuNzA2NjY5MTM4LDExMjY4MjYuMDc1MTU1NjkyLDEwODIzLjY2OTI4NTQ4ODA5NywxOTIyMzQuNTQ2Njk3NzA2MTMsNzUwNTYyLjc0Njg1NDE2NSwxNzQ3OS4xMTk1MTMyNzYyODgsNDI1NTguOTQyNDM1NDcwNTQsMzYxODY5LjQ0NDkxMjI1MTY3LDM3NzUwMDQuNTUwNzM5Njk3NiwyMzkzOTkuOTUyMTEwNzc3MjYsMjU2NC4xMzMyMTI2NTMyNzkzCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0RlbW9ncmFwaGljU0VJUkRpc2Vhc2VfUktfUmVmZXJlbmNlL0ZsdS9tZW4vU18yLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvRGVtb2dyYXBoaWNTRUlSRGlzZWFzZV9SS19SZWZlcmVuY2UvRmx1L21lbi9TXzIuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA2OGEzMGYKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0RlbW9ncmFwaGljU0VJUkRpc2Vhc2VfUktfUmVmZXJlbmNlL0ZsdS9tZW4vU18yLmNzdgpAQCAtMCwwICsxLDMzIEBACitpdGVyYXRpb24sdGltZSxFRy1GUkctRzIxMDAwMSxFRy1GUkctRzIxMDAwMixFRy1GUkctRzIxMDAwMyxFRy1GUkctRzIxMDAwNCxFRy1GUkctRzIxMDAwNSxFRy1MT0UtRzI0MDAwMSxFRy1MT0UtRzI0MDAwMixFRy1MT0UtRzI0MDAwMyxFRy1MT0UtRzI0MDAwNCxFRy1MT0UtRzI0MDAwNSxFRy1MT0UtRzI0MDAwNixFRy1MT0UtRzI0MDAwNyxFRy1MT0UtRzI0MDAwOCxFRy1MT0UtRzI0MDAwOSxFRy1VUEUtRzI5MDAwMSxFRy1VUEUtRzI5MDAwMixFRy1VUEUtRzI5MDAwMyxFRy1VUEUtRzI5MDAwNCxFRy1VUEUtRzI5MDAwNSxFRy1VUEUtRzI5MDAwNixFRy1VUEUtRzI5MDAwNyxFRy1VUEUtRzI5MDAwOCxFRy1VUkctRzMwMDAwMSxFRy1VUkctRzMwMDAwMixFRy1VUkctRzMwMDAwMyxFRy1VUkctRzMwMDAwNAorMSxUdWUgMjUgSmFuIDExLDE0NzgwNi42ODU0OTI5OTY1NiwxMzE5NjkuNzg5NzcwMDcwODcsNzY4MTcuMTU5MjQ1MTE0NzcsMTU4ODAxLjI0NTk3NTc0MjUyLDE2MDA3MC4wNjEwMzM1MDM1LDI1ODc1OTUuMjgxMDg5MDY5MywyODExOTM3LjExMTI2ODM0OTUsMjMwNDY1MS4wMjU5NTAyNDk4LDIwMDE4MjEuOTg5Mzg3MDU2OCwyNTAyNzgxLjUzMTQwNDkxMTUsNTA4MjQxLjMyODIzNzYyMjE2LDI5NzEwODQuOTg5NzAzNjE0Nyw1ODc5OTQuODQ1MTA5NTAxNiwxNTYwODk5Ljk5MDgyMDg0MDIsMTM5NTE2MC4wODQ2ODcxNDA4LDMyMDI3MTIuMTEyNTAwMzc0LDIzMjAyMzguNDY2NTIxNjY5LDY1MjUzNy4xMDc3OTMwNTU5LDE4OTkxNzkuMjA5MTY1NjM2NSwxMjY0ODAwLjIzMjM4MDgwNiwxODY4NTA2Ljc0NDcyMzUyMTQsMjA3NDkyOS4zNzk4NTI5NDY0LDE4NDU4MzcuODgzNTE1ODczMiw0MjA3NTQ3LjUxNzYwNDQ5NDUsMjY4MzIyLjU3NjY4MDA1ODIsMzM1OS42Mjk5MjE5OTA4NDk3CisyLFdlZCAyNiBKYW4gMTEsMTQ3ODA2Ljc4MDE0ODc0OTI3LDEzMTk2OS45MjE1MTQ3NjE0LDc2ODE3LjExMzgyMjExNzc1LDE1ODgwMS4zNTkwMzc0ODc2MiwxNjAwNjkuOTIxMzc5MDg1NzUsMjU4NzU5Ny43NTExODA0MTcsMjgxMTkzOS4wOTE5Njk5MjUsMjMwNDY1Mi43Nzk4OTU0NjM1LDIwMDE4MjMuMzQ0MzEyMzcwNSwyNTAxNDQ0LjY2NDA1NDk5NzMsNTA3MTQ2LjQyOTM5MDMyODM1LDI5Njk2MzYuNjMzNzUzMDA5LDU4Nzk5NS40MjMzNTMxOTg2LDE1NjA5MDEuNTMyNDA0MjY0MiwxMzk1MTYxLjM2OTgzNTYyLDMyMDEzMTcuMDM5MjYyMzM4LDIzMjAyNDAuNjc4NzM4NjMyMiw2NTI1MzcuNzYwMTk2MDk0NSwxODk5MTgxLjEwNzYyOTc4NzQsMTI2NDgwMS4zOTEyNDU0MjM4LDE4Njg1MDguNjEzMDkwNDE5MiwyMDc0OTMxLjQ1NDY0NTA4OSwxODQ1ODM5LjcyODUzNTc4OSw0MTY4OTkxLjc2ODM1Mzk0OCwyNjc0MTEuMzQ0MDA4NjQ4MywzMzU5LjYyOTE5NjU2NDA1OAorMyxUaHUgMjcgSmFuIDExLDE0NzgwNS43NDM1MTY3ODgzNSwxMzE5NzAuMDQ4NDI0NjgwMjIsNzY4MTQuNDY0MTUwNjI2MzMsMTU4ODAwLjQ5NzMwMDY1MjA2LDE2MDA2My4zOTUyMzk2MjY5MywyNTg3NTk3LjcxMDA0NTA4ODUsMjgxMTkyMy4zMzk2NDM3MjE1LDIzMDQ2NDIuNzg0ODYwODgxNSwyMDAxODEwLjkwMDAzMDM1MjQsMjUwMDM3NS4wMzE5NjEzNSw1MDYyOTIuNTAyMTIwNzkzMywyOTY4NDU2LjMwOTQ5Nzc1Myw1ODc5OTUuNzkxNjM5MjM1MywxNTYwOTAyLjY1Nzk4ODgzMjMsMTM5NTE2MC4zMDY5NjAyMTg4LDMyMDAxODcuODUyOTkyMTQ0LDIzMjAyNDAuNTg1NDk3NTEzNCw2NTI1MzguNDA5NzE4NTk2NSwxODk5MTgyLjk5MDY3MTg0ODksMTI2NDgwMC4yODkyMTgyNTksMTg2ODUxMC40Nzg0Mzk3NTkyLDIwNzQ5MzMuNTI2NDY5NTEzMywxODQ1ODQxLjU1NTg0MzA4NzgsNDE0MTQ1MS43MzQzMDI5MDI2LDI2NjcxNC40ODUwNTIyNjQyNCwzMzU5LjU0MTUzMDkwNDMwMzMKKzQsRnJpIDI4IEphbiAxMSwxNDc4MDAuMjc4OTY2MTc0ODQsMTMxOTcwLjE1NTUyNjQ1OTEzLDc2ODAxLjU2MTI2MTEzNDIsMTU4Nzk1Ljc5ODEzNjk2NjksMTYwMDMxLjcxNTIwODI1ODMzLDI1ODc1ODcuNjMxNDM5Mzk2LDI4MTE4MzcuMzkzNzAwODM3NiwyMzA0NTg2LjI3MDE0NDIyNDYsMjAwMTc0My44NjEzMTc1Njc4LDI0OTg5MzkuNjk1NjU1Mjc0LDUwNTIyNC4wMjAxNjAwODE4NSwyOTY2Nzk1Ljk1NjI3MDE4Niw1ODc5OTUuMjg2NjE4NjU2LDE1NjA5MDIuMDUxNDM5NjY0LDEzOTUxNDkuOTI2MjAyMzc5OSwzMTk4NjI2LjEzODY0MjM0MDQsMjMyMDIzMS4zNDU0ODAwOTEsNjUyNTM5LjA0NzUyNzc1OTUsMTg5OTE4NC44MDkzNzMxMjY2LDEyNjQ3OTAuMjE4MDc4ODQ3MywxODY4NTEyLjMzMTQ4NDYxNDIsMjA3NDkzNS41ODYwOTY1OTQsMTg0NTg0My4zMDc1NzE5MzU3LDQxMTU1NjcuNTQwNjIyMzk2LDI2NTg5MC43MzYwMDQ1MDEyMywzMzU5LjExMzYxOTUxNjEzNTMKKzUsU2F0IDI5IEphbiAxMSwxNDc3ODUuODc0NzA2NTIxLDEzMTk3MC4yMTY0MzIxNzM2OCw3Njc2Ny41MjA1MTkyNTQwOSwxNTg3ODMuMjA2NjgyMDEwMzgsMTU5OTQ4LjEzNTg2MzUzNzIsMjU4NzU1NS44MzYwOTMzOTI3LDI4MTE2MDQuMzYzNDU4OTA5NiwyMzA0NDMyLjE4NTAwNTY0NSwyMDAxNTYyLjYyMDk0NTIzODMsMjQ5NjM4Ni45NzQ5ODI0MjIzLDUwMzQxOS41MDk2OTc0MTE1NiwyOTYzNzUxLjcwMTc3NTY1NCw1ODc5OTIuNjUzOTk1ODY2OSwxNTYwODk3LjIxMjUzMzU5NiwxMzk1MTE5Ljg1NTQ0ODA5MSwzMTk1NzkzLjI0OTUzODI2MjQsMjMyMDIwMi43OTI0OTM5Nzk0LDY1MjUzOS42NTg2MjE2ODczLDE4OTkxODYuNDcwMDA0NTc0LDEyNjQ3NjEuMjE1MDkzNDM3OCwxODY4NTE0LjE1NjI1MjM4MTYsMjA3NDkzNy42MTcwMjM0ODY2LDE4NDU4NDQuODYyMTMzMDM5Niw0MDgyMDc3LjQ1NDQyODgxNCwyNjQ1NjAuMTAyNzQ0NTE2OSwzMzU3Ljk5ODgwMjUwODM0MjYKKzYsU3VuIDMwIEphbiAxMSwxNDc3NTcuNTQxOTQyODA2MzMsMTMxOTcwLjE4MjUwMDMwMDU1LDc2Njk4LjkzMzgzOTIyMjQyLDE1ODc1Ny44MDE4MDYwNzY5LDE1OTc3OS42MTk3Njc5MTQyLDI1ODc0ODQuODY0NzkyOTQ3LDI4MTExMjIuNjU2Mzg2OTY1NCwyMzA0MTEyLjc5OTMxODgzMzcsMjAwMTE4OS4wMDIyNTg3MjE1LDI0OTE5NzYuNjk5ODI3MzgyLDUwMDM5OC4xNzE1ODU5MDE4LDI5NTg0MDkuNTA5NTkwNzkyNSw1ODc5ODUuMzU0NDM0NDI4OSwxNTYwODgzLjA0OTgzMzgyMzcsMTM5NTA1NS45MDA4MjYzNDQ3LDMxOTA4NDkuNjczMzgxMTQyMywyMzIwMTQxLjA1OTc0Njc1NSw2NTI1NDAuMjE2ODM3MjI2MiwxODk5MTg3Ljc3OTUyMTE5NiwxMjY0Njk5LjcwODc5NjAxMzEsMTg2ODUxNS45MjQzMzAxNzM1LDIwNzQ5MzkuNTg4MTIxNTcxNiwxODQ1ODQ1Ljk0MjEzMDMyOCw0MDMzNDg2LjEyNDcyMTkyMSwyNjIzODYuMzE1Nzc4ODgwNzMsMzM1NS44MTM0NjcxMzQyMgorNyxNb24gMzEgSmFuIDExLDE0NzcwOS4wNTE4OTI4MDk1NywxMzE5NjkuOTU2NDAyNjI4MSw3NjU3Ni41ODM4NjQ5MDY2OSwxNTg3MTIuNjQxNDEwNTQzODUsMTU5NDc4LjcwOTU4NzY1MDU4LDI1ODczNDQuMzM4MjM4NTEzNiwyODEwMjM0Ljc1MTk4NDczNzMsMjMwMzUyMi42MjEzMjk2Nzg3LDIwMDA1MDIuNzI3MjUzMjMzLDI0ODQ5MDcuMzQ2OTYwNTE1Miw0OTU2OTcuOTI1MzM2NDI5MywyOTQ5NzM3LjY1NjY2Njc0Niw1ODc5NjguMDE1Nzk2OTI2OSwxNTYwODQ4Ljc1Mjc4MzQzMywxMzk0OTM1LjI1MDIyODg1MywzMTgyODYyLjQ0MDYxNDM2MiwyMzIwMDIzLjkzMjU1NzYxNDUsNjUyNTQwLjY3MTcyMzIxMzYsMTg5OTE4OC4zMjQ1MTI0OTEyLDEyNjQ1ODMuOTg3NDM1ODEzLDE4Njg1MTcuNTgwMTQ0MzQ2LDIwNzQ5NDEuNDM1ODYyNDc1OCwxODQ1ODQ1LjkxOTAyNjM5MTgsMzk2NDAyNy4zMjU3OTQ3NzYsMjU5MDcwLjUwMjU4NjAyMTkzLDMzNTIuMDc3ODM4MjI5NzA4NQorOCxUdWUgMSBGZWIgMTEsMTQ3NjMxLjEyMzA2MjY5MDg3LDEzMTk2OS4zNTE3ODE5NzA2OCw3NjM2OS40NTY2MDk0MDIxLDE1ODYzNi41MzY3MzkwNjcyLDE1ODk2OC44MjM5MDA1NTgwOCwyNTg3MDc5LjE0MDcwOTQ3ODQsMjgwODY3Mi41NDcyNjQxOTQsMjMwMjQ4MS41Mzk1OTY2MTA3LDE5OTkzMDAuMDA2ODc5Mzk2NywyNDc0MTAwLjY3OTk4MTE2MzcsNDg4NzY4Ljk4MDcyNjc2ODU1LDI5MzYzMDIuNzY0MDg3Nzk0Myw1ODc5MzAuMDMzNDg2Mjc4NiwxNTYwNzcyLjkyNTgxMDQ5NDIsMTM5NDcxOC4yMjQwMzYzNzcyLDMxNzA1NDkuNjMxNTAxNTgzNCwyMzE5ODEyLjg0MTk4ODI2Niw2NTI1NDAuOTI4NzM2NDg2NiwxODk5MTg3LjI3OTk3MjY1OTQsMTI2NDM3Ni4zOTE0MjQ3MDksMTg2ODUxOS4wMTg1NjI1MTYsMjA3NDk0My4wMzYxOTQyOSwxODQ1ODQzLjQ5MjI4NzgzMjgsMzg2ODQ2Mi41ODQ4ODkxNzcsMjU0Mjg2LjQ1MDcxNDQ1Nzg3LDMzNDYuMDc2MzM0Mzc4Njc5MworOSxXZWQgMiBGZWIgMTEsMTQ3NTA5LjQ3NjQzMzY5OTg2LDEzMTk2OC4wMzc2OTQzMjUxOCw3NjAyOC4zMjAwMDA5MDQ3MSwxNTg1MTEuNDg4NzE0MzUzNzMsMTU4MTI4LjY3OTQ0MzcxMTE1LDI1ODY1OTMuNTgwNjc3OTkyLDI4MDU5OTAuNjk5NTQ5ODc0MywyMzAwNjg5LjUxODMxMjc2NywxOTk3MjQzLjM2NjEwNDY0MywyNDU3OTc4LjY0Mjk1Mjk4Myw0Nzg4ODQuNTA3MDIwMjM3NSwyOTE1OTc0LjkwOTk3NDQ1OTYsNTg3ODUyLjA2MjYzODExOTEsMTU2MDYxNi40MjY2MzIzODgzLDEzOTQzMzcuODExNTYxNDU1NSwzMTUyMDEyLjgxNzI4MjQzLDIzMTk0NDIuNzMzNzYxNjE0LDY1MjU0MC44MjMyNzMwMjQzLDE4OTkxODMuMTIwNTg4Njk0NywxMjY0MDEzLjQ2MDE0MTg4MTYsMTg2ODUyMC4wNTQ3MzY4ODk0LDIwNzQ5NDQuMTYzMTkxMjMxMiwxODQ1ODM2LjE2ODM0NTk0MTcsMzc0MTA5NS45NzY0OTU1Nzg0LDI0NzYyOS42MDk1ODc5ODcwNCwzMzM2LjcwOTExMDk2NzMxMgorMTAsVGh1IDMgRmViIDExLDE0NzMyMy4wNTIxODE0MDU2LDEzMTk2NS40NTYwNTUyMTM0Niw3NTQ3OS41NjQ1Mzk2ODM0MiwxNTgzMDkuODQ5MDU4MDA1ODcsMTU2Nzc3Ljg0NDgyMzQwNjU0LDI1ODU3MjguOTUxMTY3OTQzNCwyODAxNDg0LjI5OTg3Mzg1ODcsMjI5NzY2OS45MDEwNTAyMzI0LDE5OTM4MDAuMzIxMjc2ODc4MiwyNDM0MjkxLjQyMTE4NjQwMTUsNDY1MTI0LjQ2MzM2Mzc2MDYsMjg4NTY5My41NzExMTkzODM0LDU4NzcwMC41MjcyNDAxNiwxNTYwMzExLjA4MTkzNTI4NjUsMTM5MzY4NS45MTE5MDc1MzY0LDMxMjQ1MjAuNjk4NzAyMDE0NSwyMzE4ODA4Ljc4MTE0NzkxMzUsNjUyNTQwLjA4Mzk3NzQxMjQsMTg5OTE3My4xNTQ2NjI5ODgxLDEyNjMzOTMuMDY3NDQ5NTA4MiwxODY4NTIwLjM4MDI2NjYwNCwyMDc0OTQ0LjQyMzYyNDIzMywxODQ1ODE5LjM2OTY1MjAwNTQsMzU3NTc1MC44MDkyNTQ1MTQsMjM4NjE5LjM0NDM2ODQ0ODU3LDMzMjIuMzYwNDIzMjEzODk3MworMTEsRnJpIDQgRmViIDExLDE0NzA0MS44NzIzOTA4NTczLDEzMTk2MC42Nzk3MTIyNzAxMiw3NDYxNy45MDk0MzU1ODI3MSwxNTc5OTAuMjgyMjQ4OTYwNDMsMTU0NjYwLjYwNTExODEyMjI0LDI1ODQyMjYuMDgzMzcyMDAyLDI3OTQwNjMuMTY1MTEwMTM5LDIyOTI2ODEuODA1NDAyNzk2LDE5ODgxNTAuMzQzMDcyOTg2LDIzOTk5NjUuNDkwNDI5NzE1Nyw0NDY0MzcuNDcxNDE3MTQyMywyODQxMjUzLjY1MTIzODgzNCw1ODc0MTguMDIzMTI4MjYzOCwxNTU5NzM5Ljg3ODc3MjY3NDQsMTM5MjU5MS4yNzk4NTUwMTk0LDMwODQzMDEuMjk1NTEzNzQ3NywyMzE3NzQ1LjA4Mjk3NTIwMDQsNjUyNTM4LjI3MTEyNjE0MDgsMTg5OTE1Mi42OTE5MTA1MjM3LDEyNjIzNTMuODkxMzc5ODk2LDE4Njg1MTkuNDg4NDQ4Nzg5NiwyMDc0OTQzLjE0MDM4MzEyNzQsMTg0NTc4NC44MDA1MDM4OTQ3LDMzNjY3MjIuNTkzMzY4MDU2LDIyNjc1Ny4wMDM3OTY2MDI3NCwzMzAwLjc1MTQ5NTc3OTA4NQorMTIsU2F0IDUgRmViIDExLDE0NjYyNS45NDg3MzQyMDM2NywxMzE5NTIuMjE3Mjk3OTI3MjcsNzMzMDQuMTY0MTUxNzQ3NTgsMTU3NDk0LjAyMjE0NDM4MjE1LDE1MTQ0NC41MDY2MDIxNTcxLDI1ODE2NzYuMjA2MDk4NjY4NywyNzgyMTE1LjMyMzE2OTYwODYsMjI4NDYyMS45ODA2Njk0NTE0LDE5NzkwODUuMjg4MTY1NDc5LDIzNTExNjkuNjI5NDU5NjA1Niw0MjE4ODMuMjM1MzM4OTg0MSwyNzc3Mzg5LjM5NzU0MTU1NCw1ODY5MDkuNzU3OTI0Mzg2MywxNTU4NzA4LjcyODA4MzY0MTcsMTM5MDc5Mi42Mzc5OTcwNCwzMDI2NTc2LjA4NjE2MDExNTQsMjMxNTk5OC42Mjg5MTM5MTg1LDY1MjUzNC42OTU2Nzk5NTc1LDE4OTkxMTMuODE2MzA4NTk0OCwxMjYwNjUwLjYwOTE5NTg5NjcsMTg2ODUxNi41NzI5OTQwMjE1LDIwNzQ5MzkuMTgwODg5MzMzOCwxODQ1NzE3LjkyNDgwMjk2ODUsMzExMTM3My4yOTgzNjk2NjIsMjExNjkxLjQyMDg5MTU4NzM2LDMyNjguOTAwNzY2MzMwNTk3NAorMTMsU3VuIDYgRmViIDExLDE0NjAyMi45OTM2ODM2MDk3NiwxMzE5MzcuNjc3NDkzMzAwMyw3MTM2My42NzY4MjYzNTYsMTU2NzM4LjUxMTE1NjcwMTA1LDE0NjcyNC40OTIwODkxOTY5NSwyNTc3NDM3LjQyMTU1Mzc5OCwyNzYzMjg1LjAwMjg0ODg0OCwyMjcxODYyLjY2Njg2MjYzMDMsMTk2NDg0Ny4zNjk3MjgwMDc0LDIyODMzODguNTE4MzQxNzQ1LDM5MDkwOS41OTM3NjAwODY3NSwyNjg3OTA3LjEyOTIzNTI5OSw1ODYwMjAuNjM0MTIzMTg5NiwxNTU2ODk4LjQ1NDk5NDAxMDUsMTM4Nzg5Mi44ODI0OTQ3MzM0LDI5NDU1ODguODcxMTEzMzAxLDIzMTMxODQuNjI5OTI1OTA4NSw2NTI1MjguMjgwMTMwMDE5LDE4OTkwNDMuMjQ3NzU4MDUyLDEyNTc5MTEuNjkyOTMxNDkzNywxODY4NTEwLjM1Mjc2NzM5MjgsMjA3NDkzMC42NTQxNTU5MDEyLDE4NDU1OTMuNTE5ODE0MDE4MiwyODEyMzQ4LjMyNzU2NzYwMTYsMTkzMzgyLjE3MjIxODMwNDMsMzIyMy4wMzkyMDE0OTUwMTAzCisxNCxNb24gNyBGZWIgMTEsMTQ1MTY2LjYwOTg2MzcwMTEsMTMxOTEzLjI0NjE0ODI2ODUsNjg1OTUuODAzOTYxMjc4OTMsMTU1NjEwLjIwMzI5NDA1NzE0LDE0MDA1OS44MjY2MjQ2MjI0OCwyNTcwNTEwLjI2MDU3NjQ3NTQsMjczNDIwMi4wODExMDU3MzYsMjI1MjA0My44Mjc3Njc0NDcsMTk0MjkzNC4xODgzNjUyMDQsMjE5MTc3Ny42MTg0MjkwOCwzNTM3MTIuMjAxNTIyNzkwMDcsMjU2NjI3Mi4zNjcwMjg2NDY2LDU4NDQ5OS45MzY0OTczNTMzLDE1NTM3ODkuODg1OTc5MjczMSwxMzgzMjkzLjY5NTY2NDkwODUsMjgzNDk2My4zMjkwNjc0MjMsMjMwODcyMS45MTQzODEyMDgsNjUyNTE3LjM0NjY2MTQ5OTEsMTg5ODkxOC44NDMzMDQ2NTUzLDEyNTM1NzkuNTgyNjQ3Mjg0LDE4Njg0OTguNzk4NTA3MDk0NiwyMDc0OTE0LjQwOTc4OTgyMTEsMTg0NTM2OC4xOTAyNDk4NjgsMjQ3OTQ0OS43MTcwMzk3ODE2LDE3MjI2Ny45MDIzNjQxNzI1NCwzMTU4LjYzMzMwMzg1NTIxNzUKKzE1LFR1ZSA4IEZlYiAxMSwxNDM5NzkuMjA2OTcwMzMxNTgsMTMxODczLjA3MDk2NDk3NTY2LDY0ODE1LjQwNzU2NDMyMDkyLDE1Mzk2My43MzQ5OTM1OTUzNywxMzEwOTIuNDYxNDU4Mzc0OTgsMjU1OTQwNy45NTM4Nzg1MDMsMjY5MDM3Ni40MTI0MzQ0Nzg4LDIyMjE5NTYuNzI0NjQwOTczLDE5MTAwMzIuMDg5ODIyODM4LDIwNzIyNjUuOTgzMjAwMzUxNSwzMTE2MTUuNzkwMjAzMzM5NCwyNDA3MzMxLjkxMTQ5NzYxMSw1ODE5NjEuMTQ1MjgxOTY1NCwxNTQ4NTc1LjgyNTY3NjA1NjgsMTM3NjEzNS42ODM1Njc5NDc3LDI2ODkwMDIuNDc4NzU0ODU1LDIzMDE3NzEuMDQ4NjMxMjExNyw2NTI0OTkuMzgwNDg2MjgwOCwxODk4NzA1LjAwNTEzNzgwNTQsMTI0Njg1Ny4yMzcyODM2NTg1LDE4Njg0NzguODA5MjcwODk2MywyMDc0ODg1LjM2NzM4Njk3NiwxODQ0OTcwLjAxODY3OTI4NSwyMTMwMTk2LjgyMzE4MzYzNiwxNDkzNzguMDQwODAxODQyNTUsMzA3MC44MzgxOTI5MjI1MTUKKzE2LFdlZCA5IEZlYiAxMSwxNDIzNzIuNDcwMTQ1MDY1MjIsMTMxODA4LjE1NjQ5MDU0NTcyLDU5OTAzLjA5NTEzOTA1MjE0NCwxNTE2MTguNDc4Mzk3ODU4NDIsMTE5NjgxLjExOTM3NjE1NTI0LDI1NDE5MzQuMTM4MTAzNjM1NSwyNjI2MDQzLjQ5MDM4NDk4MSwyMTc3MzU5LjAzMzY0NzI0NiwxODYxOTE5LjkyMjMxNzA3NCwxOTIyNjA4LjYxOTk5ODMwNzQsMjY2OTgzLjQ0Mjk2NjMwODE1LDIyMDkwNTIuOTA1MTcyOTQyNyw1Nzc4MTUuNDk4MjYwMjk5LDE1NDAwMTIuNTM1NDA5NzkxLDEzNjUxOTIuMzY2NTE2MzIwNSwyNTA0MDA2LjMzNjYwNjA2OSwyMjkxMTIxLjUyMTc2MDk0NDMsNjUyNDcwLjU5MTk4MjA0MSwxODk4MzQ0LjM2MDc0MTg5OTgsMTIzNjYxMy4zNDMwNzg3MjQ4LDE4Njg0NDUuNjE0MDQwOTA4NiwyMDc0ODM1LjI3NjY2NzMxNTcsMTg0NDI3OS44NjMxNjI0MTcsMTc4NjE3Ni4xMjg3NTQ4NjUsMTI2MTUxLjczMTY4NzE0MzMsMjk1NC43OTc2ODM0NDI2MzM2CisxNyxUaHUgMTAgRmViIDExLDE0MDI1NS4wMDIxODA2NDM2NCwxMzE3MDUuMDM0MDc3NTg1OCw1Mzg4Ny42Nzc4MTQwOTY0MiwxNDgzNjkuNzgwNzcwNzkxNCwxMDYwODQuOTAzNTQ2NjkxODcsMjUxNDk4MC4xNTc2MDA5MDEsMjUzNDUzMi42NTI5NDQzMTMsMjExMzEwNC40Njg1NDQ5ODUsMTc5Mzc3Mi43Nzc2NzMyNzc1LDE3NDQwODQuNDY2NTY2MTc0OCwyMjI4MjkuMTIxMDI3MjQ5MzIsMTk3NTA1MS44MDcxODI2MTEyLDU3MTIwNi45NzMzMzcxOTUsMTUyNjI2MC45OTQ3ODE2NTA0LDEzNDg3ODkuODgwNDI2MjM4MywyMjgwNTQwLjYwMTIxNTQ1NCwyMjc1MDg5Ljk1MzgzNzIxOSw2NTI0MjUuMzk1ODQ0MDA2OCwxODk3NzQ2LjM5MDUxNjM3LDEyMjEzMTQuMzQ2MjQyNTQ1NiwxODY4MzkyLjAxMTkzMTE2MDcsMjA3NDc1MC45NTQ3ODM0MTMzLDE4NDMxMDQuODQxMDEyNjY5MywxNDY4MjU4LjE4Njg2MjY1MzEsMTA0MTI5Ljc4NzEzMTI4MDcsMjgwNi40NDE3Mzk3MzM1NTI0CisxOCxGcmkgMTEgRmViIDExLDEzNzU0MS43MTk2NDExNzEyMiwxMzE1NDMuOTI0MDIzOTE5MzYsNDcwMDkuNjQyMTg5MjUyOTYsMTQ0MDEwLjU1OTY4NjUzMzA2LDkxMDUxLjM0MTQyOTgzNjI2LDI0NzQzMzcuNDI5MzIxMTk4MywyNDA5MTk4Ljk3MTQyMDI3OCwyMDIzNjMwLjY0NDUwNDA0MjYsMTcwMDg5NC4wMDc5NzcxMTIyLDE1NDI2NjMuOTAzOTU1MDc0NSwxODIwNDkuNTI5OTc4NzA2NSwxNzE1OTY4LjgyODE1MjEzOCw1NjA5NTQuMTUzMDEzNjc1NiwxNTA0NzE4LjIzOTI5NTI2MTQsMTMyNDc0Mi43ODE2OTM2MDUsMjAyNTIzMi4wNzA1NzMzMTYyLDIyNTE0MDUuODc3MjM1NjgyNyw2NTIzNTUuNjU2OTM0NjY2NywxODk2NzcwLjIzMzc5ODMxOTUsMTE5ODk3NC42OTU3NjQzMDY3LDE4NjgzMDcuMjMxNTA0MDA1NCwyMDc0NjExLjQ5ODI4MzcwNTcsMTg0MTEzNy45ODU0NDgwMjg3LDExOTE1MzUuNzUwNjYwOTgzNCw4NDU1Ny4yMTYxODYxNzA2MSwyNjIzLjMyMDYxMTc0NzQ5NzQKKzE5LFNhdCAxMiBGZWIgMTEsMTM0MTY1LjY0NTIxMzM2NzE4LDEzMTI5Ni40MjAzNjM2NjM0LDM5NzIxLjU3Mzg2ODA2MjkxLDEzODM2Ni40NDEyMDQ3NjQyNyw3NTcxNC45MzUzMTA1NjMwNCwyNDE0NjU1LjE2ODQ1NTc2MDUsMjI0NTE4My43OTkxMDA1MDQzLDE5MDQwNjEuMzkxNzc0NzA2OCwxNTgwMDU5LjYwNDkxMDI0OTEsMTMyODk4MS40ODk5OTY4NTI0LDE0NjcwNS42NTY2NjgzNDE4NiwxNDQ4NTI3LjAzNzgxNzM2MzksNTQ1NTQ1LjUwOTUxNzIzNTgsMTQ3MTkyMC4wNzc3Nzc5OTc2LDEyOTAzNjYuMjQ0MzUzOTI3MiwxNzUxMTUyLjIyNzg5NDQxMiwyMjE3MTIwLjMxNzc3MTE4MDUsNjUyMjQ5LjY1NjgxMzI3OSwxODk1MTk5LjkzMDM0MjU5NDIsMTE2NzE4MC43Mzk1NTYyNjA0LDE4NjgxNzUuMjg4MDUzNDAyNCwyMDc0Mzg0LjAxMDg2ODUwNTYsMTgzNzkwMC4yNTY1MzU2MTUzLDk2Mjg2Ny44NTIwNTMxNjk0LDY4MTI3LjQ0NzMyODM5MTI0LDI0MDUuNjA4Njg3MjA0NTA0MworMjAsU3VuIDEzIEZlYiAxMSwxMzAwODguMzY2MTI2Mzk4MzgsMTMwOTIyLjU0OTg1MjUzODQ5LDMyNTkxLjA1NjY0MjAzNzM2NSwxMzEzMzYuODgyMTgwNjAzNjMsNjEyOTIuMDI2Njc2ODI2MTUsMjMyOTY5NC42ODQzMTAzMiwyMDQxNzg4LjA0MzU4MzI4OTMsMTc1MTkyNi4yMDgyNjk2NzU3LDE0MzEyNzcuNjE5OTc3OTk5NywxMTE2NTE5Ljk4MTYyMTU4MTYsMTE3Njk3LjAyNzE0MTgzNTM4LDExOTE3NTQuMjI4ODMyNTgwMSw1MjMyNDkuMDYxNzEzODQ1LDE0MjM2MzAuMDQwNzUwMzA1NCwxMjQyNjIwLjYzNDg0NTA0MywxNDc1Nzg1LjgwODczMDY5MywyMTY4NTU5LjY3MzkwMjIwODUsNjUyMDkwLjU4ODQyNTYzMDgsMTg5MjcwOC4wMjkzMjc1NDc0LDExMjMyMzYuODk0MjQxNzk1NiwxODY3OTcyLjQ5MTM3ODk5NzIsMjA3NDAxNi44NTIyNzkwNDE0LDE4MzI2NTcuNDAwODk1NjY0NSw3ODE2MTQuNzczMDI1Mjk3LDU0OTYzLjc5ODc0OTIzNDE3LDIxNTcuMTkwOTE1NDcwOTk1NgorMjEsTW9uIDE0IEZlYiAxMSwxMjUzMTEuNjA2NDk3NDkxNTQsMTMwMzY4LjU2MDc1MTkwMTY4LDI2MTQyLjI5NzMxMzc4MDkxMywxMjI5NDMuNTg0MDY5MjEwODIsNDg3MjkuMTMxOTE4NzQ4NzI0LDIyMTMzNjcuNTU3ODc3NjMzNywxODA1MDY5LjMxNTQxOTI3OCwxNTY5NDY0Ljc2MjY3MjkyOTgsMTI1OTYwMy41MjUxMTU0MTIyLDkxODYwMS41MTI4NTA0MzA0LDk0ODkzLjQ3NTU4NzE5MjE0LDk2MjAxMi41NTU3MTgyNTE0LDQ5MjQ4OC4xNjQ0MTE4MTksMTM1NTQ2My4yODIzNjA3MDQyLDExNzg2MTQuMTMxMTI4NDQ5NSwxMjE3MTE3LjY2NzUzMTY1NzUsMjEwMTUzMy4wNDc4NjUwNDg1LDY1MTg1NC44OTgyODkwNjY5LDE4ODg4MTMuMzA4MDY3NTY0MiwxMDY0NjMxLjkwODAzOTkzNDcsMTg2NzY2NC4zOTk4OTk1MTM3LDIwNzM0MzAuNTk2NzA5MzkyNywxODI0MzI4LjcxNTEyMDc2NzUsNjQyMjYzLjQ1OTUwMjczNDgsNDQ3NzguNDMxMzI5NTI3MzYsMTg4Ni45MTM5ODg3MjE1MjA2CisyMixUdWUgMTUgRmViIDExLDExOTg2OC42NDU3ODEwNDMzLDEyOTU2MS45MzU3MjI4OTY0LDIwNzA3LjI0Mjk1MjcwNzEzMywxMTMzMzMuMzI3MjExNzczOSwzODQ4MC45MjcwMzA0NTk5NywyMDYwOTg4LjkzMzY2NDA0MjMsMTU0Nzk5Ny41OTUyNjg3MTgyLDEzNjQ1NTguMDk1MDM5NjIwMywxMDc1MDM0LjMwODA0OTE2OTYsNzQ1MDMwLjQ4NjE3MDAzODEsNzc1MjcuMDk0Nzc4MjY4MTMsNzY4OTQ0LjMwMjk0MTM1MTksNDUyMzE1LjU4MjE0ODM5NzM0LDEyNjM3NTcuNzc4OTQzNjQzNywxMDk2MTQ4LjM4OTc5ODIzMyw5ODg4ODUuODU5NjY4Mjc4OCwyMDExNDgwLjczMDEwODA5MjgsNjUxNTA4LjUzNjUyMjIxMTQsMTg4Mjc5OC40ODIxMzM0MjA2LDk4OTUyNy4xNDY5NDA2NjY4LDE4NjcxOTkuMzI2NjE5NTYwNiwyMDcyNTAwLjA3ODk0NTM1NzQsMTgxMTMyMi40NjM5MjI0NDEyLDUzNzM2My43OTQ1OTY0MDgsMzcwODcuMjI2NDU2MzYxOCwxNjA4LjA0NjExNDQ4MDMzMjYKKzIzLFdlZCAxNiBGZWIgMTEsMTEzODM1LjYxMzI5NzA5NjEzLDEyODQxNC41NTEyMjI2ODI2OCwxNjM4OC4zODg3NjE1NTMxNSwxMDI4MDkuNTEyNTU0MjcyMjcsMzA1NDEuODUwMzIzMjE3MjUsMTg3MjQwMC42MTU5ODYwMzY0LDEyODkzNDguMjgxMDI4MDg5OCwxMTUxMDU2LjYwMTE3NzYxNzcsODkxMzcwLjQ1OTA5NTA3OSw2MDA3MzcuMDU5MTc4OTAyNyw2NDU3MC45MzM3NDU4ODQ2NCw2MTQ5MjkuMDI0NjkyNjQ3LDQwMzM1MC4yMzYxMjk0NDk0NSwxMTQ3NzgyLjcyMjkyMTM2NDcsOTk1MjEyLjQxOTg2MzQ2MjksNzk4MzgzLjA3MDgwOTAwNTIsMTg5NDc0OC4xNzcwNDQwNDE3LDY1MTAwNS4wNzc4OTU5MjgzLDE4NzM2NjguMjYwMzkyMTcxNiw4OTgwNjguOTM4NjMwNjMxNywxODY2NTAzLjYzMjY0OTE5OTMsMjA3MTAzOC4xOTkyNzMyMjg5LDE3OTE0OTQuNTE1NzE4MjA2NSw0NTkzNjAuODA2MjA1MjYwMywzMTM2My4zNjcwMzMzNDkxNywxMzM3LjMyODk1MzI3MjcyMDgKKzI0LFRodSAxNyBGZWIgMTEsMTA3MzA3Ljc4OTYxNzQ0Njg2LDEyNjgxOC43Njk3ODMyMTgzMiwxMzEwMy40NDA0OTI4NDEwNiw5MTc2NS44ODc1OTk2OTg3OSwyNDYxMS4xNTk5MTA2NjMyOSwxNjUzMjgxLjYyMzY0Njg4NzMsMTA0Nzg5OC45MTk5ODIxMzY1LDk0NDgyNi4wNTc3NjY1MzUxLDcyMTg0Ny43ODgwMzM1MDI1LDQ4NTgyMS4zMTYxNDcyNjgxLDU1MDMwLjA0MzY1MTExMTYwNiw0OTY3NTcuMjExNDk5MjcyNTUsMzQ4MDI4LjExNzAzNjU5ODA0LDEwMTA4ODcuMzY3NDA0ODU2OCw4Nzg2MDUuMjEwODgwMTAxMSw2NDYyNDYuODQ0NDkyOTc5NSwxNzQ5MzYzLjY4MzgxMDA0NzgsNjUwMjc4LjAzNjE5ODQ3NDksMTg2MDAxMi4xOTQwMjcwNDA0LDc5Mjg4NC40Nzc1NTYwNzI5LDE4NjU0NjcuNDIyNTIyMjExLDIwNjg3NTUuOTAxMDQ3MTU3LDE3NjE5NTguNTQ4OTkxODc1LDQwMTgxNC4yNzExNDIyNTk5NCwyNzE0MS44NDkwNTc3ODI3MzYsMTA5MC4zNzM2NDQzOTYxNjk4CisyNSxGcmkgMTggRmViIDExLDEwMDQwNS44NTg0OTE5OTQzMSwxMjQ2NTYuNTc5NjUxMTUwNDYsMTA2NzcuNDc2NjE3ODg3ODk0LDgwNjU3LjkyNTA2ODQsMjAyODAuODgxMzk4NDcwMTM3LDE0MTYzMDYuNjQwNDczNTEwOCw4Mzc4ODYuMTIwMDgwODE3LDc1OTgzMS4zNDQ2NzA3MjkxLDU3NTk1OC44MjYyMzczNzIsMzk3MjE5LjUyMTMyMjY1NzM1LDQ4MDU0Ljk0MzE5NTk2Nzg3LDQwODQ3MC4wMzMxNTA1Mjg1LDI5MDUyNC41MTQ3NzEyNDU5LDg2MTQ2My4zNzc4MzA0NzY4LDc1MjY0My40MTE2NDM1Mjg4LDUyODY2MC4wODU4NjAxMzY3LDE1NzY5NjIuMDA5MzM2OTgxNSw2NDkyMzQuNzczNDM2MDIyMSwxODM5OTM3LjU4MzYxNjc0NDcsNjc5NjQ4LjY0MzY5Mjk3MjQsMTg2MzkzMC4zNzM2Njg5MTEsMjA2NTIxOS4zMzM5NTQxMzQ1LDE3MTkxNTMuNTA4MzU0ODc3NCwzNTk1NjEuNDM2NzE4MjY0MiwyNDA0My43ODc3NzA2NTc4ODcsODc4LjMzMDk4NzAyMjYxOQorMjYsU2F0IDE5IEZlYiAxMSw5MzI3MS42Nzk5ODgwODg2NCwxMjE4MTAuNDQxNjIzODQyMzYsODkxNi45MDk2MDA5MzIzNTEsNjk5MzQuMjE2MDg0MzI0MSwxNzE1OC4zMjcyOTU5NDYxMTQsMTE3ODgyNS40NTU0NDU0MjE2LDY2NjAyNi40ODIyMDIyMzMyLDYwNDUyOS4wMTE2OTQ4NTM0LDQ1NzY2My40Njc2OTYzNjQ0NSwzMzA0MjYuNDU2OTQxNzY5OSw0Mjk3Ny45NDM3NDM4MjkwMiwzNDM1NzkuMzk4NTEwNTExLDIzNTYyMi40MDk1ODI4NDQ5NCw3MTEzNjEuMTM1ODc1OTE0LDYyNjE4MS44MTg5NTMyNzI0LDQzOTc0MS4zODAwMzc1NDkzNiwxMzgzOTUyLjMxOTM5Mjk5MjIsNjQ3NzQ1LjgyMzM1MzgyOTksMTgxMDk5MC41MTgyMzk3ODA2LDU2NjE4NC41NjA4OTU3NTA0LDE4NjE2NTcuNjY1OTQyODU4LDIwNTk3ODIuMzA1MDY0MTIxMywxNjU5MDI5LjM5ODg1NTY0MywzMjg2NjkuMzQ5OTE4MDMyNywyMTc3OC4zOTIyMzUxMjE3NCw3MDUuNzQ0MTgxNDAxODU5NgorMjcsU3VuIDIwIEZlYiAxMSw4NjA2NC4yOTM4NTY1ODMzMiwxMTgxNzkuOTQwODc2MTAxMjUsNzY1MC41OTY0NzA5NTYwOTIsNTk5NzMuNDU1NjU3NDk4NTI1LDE0OTE5LjY2NDAyODYxODMxNyw5NTgyNDYuMjk4NTk1ODU1Nyw1MzIwMDguNzAyMDM2NTI5OCw0ODEwNjQuODI4OTgxNTM4MywzNjYwNzUuNzk4NTE4MTk4NywyODA3OTcuMjM1MDM5MjIwOSwzOTI5Ny4wNzI1NzM0OTI3MjUsMjk2MzEyLjYwOTU1Njc1NTYzLDE4NzI0OS45MzUxNDIxNjg4LDU3MjUxMi4xMTU4MzYwNTQyLDUwODM3Mi4zNzQ0NzAwMDM1MywzNzMzNzYuMDk2NTUzNjQzNywxMTgxNDMyLjE0NTMxMjQxMjYsNjQ1NjMwLjk3MjE2MjYyMzEsMTc3MDE1MC4xODYwODkwMzIzLDQ2MDUxNC4yMjk4NzY3MDg1MywxODU4MzA2LjEyMzQ4MjkxNjUsMjA1MTQ5Ni41ODAwMzUyNjg2LDE1Nzc1NzEuNjQzMTQ1MDA5OSwzMDYyMTMuODA1Nzg0Mzc2NzUsMjAxMjkuMDcxMjYzNzY0NzkyLDU3MS4xNzc1NTcyMDA2NzM3CisyOCxNb24gMjEgRmViIDExLDc4OTQ4LjEzNjA5MzM2MDE0LDExMzY5OS4zMzk5NDQwMDExMyw2NzQzLjQzNzM5MDIxMjk5Niw1MTAzNy4wMjAwOTQ4NTY3NSwxMzMxOC44ODI3NTgyOTA3LDc2NzI2Ni4zNTQ5MTk3MDI0LDQzMTA1Ny44ODkwNzkyMTYsMzg2ODMzLjQ1MzkyNDgyOTEsMjk3NDM1Ljg4OTc2NDUzODczLDI0NDI0My40MTQwMDMzNDAxLDM2NjQzLjY0Mjg2OTcwOTMzNiwyNjIwNDUuNTkyMzg4MzUwNTUsMTQ3NTAwLjUwOTk1NDEwNDkzLDQ1MzQ0MS4xNDQwNzAwNjAzNCw0MDYxMjcuNDQ2NDY3MzI4NjQsMzI0MTkwLjE3NDU4NTUwNzQsOTgzMTEwLjA3OTQxMjYxNzQsNjQyNjQwLjgyMTk1NDAxNDYsMTcxMzk1NS44OTM2ODUyMDA3LDM2ODY4Ny4yMDcyODY0OTQ2LDE4NTMzNzYuMTQxMTUyMTI3NiwyMDM4OTk2LjcwMzk4MDY4MiwxNDcxNzY0LjM5ODY5MjA4OCwyOTAwNDMuODc4OTQwNjMwNjUsMTg5MzYuNzg0Mzk5NTU2MzIsNDY5LjQ4NjU1Mjc2MzIwMworMjksVHVlIDIyIEZlYiAxMSw3MjA3My41MDQ0NDczMzgwMSwxMDgzNTAuMTUxNDcxODgwODMsNjA5NS4xMDM2MTE0NjEyNzcsNDMyNTEuNDQxODMwMzM1ODU0LDEyMTc3LjAzMDgyNjU3NTI4OCw2MTE1MDEuNDIxMzcyNjAzMywzNTY2OTguNTE4MzIyMTk4MjQsMzE2ODY5LjE3MzkxNTY3ODYsMjQ3MDM4Ljk3NzYxMDExMjc4LDIxNzQ2OC4xMjg0MjA1Mzc3NSwzNDc0OS40ODU5Mzc5NTU3MSwyMzcyODMuNzMwODY2ODU4MzMsMTE2NTg2LjY4ODA0NDIzNTA4LDM1NzYzNC41MDI2Mjk3MTAyNCwzMjI2ODMuNDA2MzE2MDA1NzQsMjg3ODY5LjU1MjgyNzI1NzQzLDgwMTc5Ny40MzIwMjUwNDU3LDYzODQzMy4xOTQ1NjAyNTAzLDE2Mzg4NjAuODY3NDczMTA4MiwyOTM1NTYuOTE3MzAxODE0NTQsMTg0NjE0NC45NTA4NjMxMjI3LDIwMjAzNjQuMTc0OTM1MDUzMywxMzQwOTgzLjQ1Nzk3MDY5MjUsMjc4NTgwLjk4MjQzNTA3MjEsMTgwODUuMjUyMTc0OTU5OTMsMzk0LjIwNTg4NDY2MjE1ODA0CiszMCxXZWQgMjMgRmViIDExLDY1NTU1Ljg2NTU1ODAxODA4LDEwMjE2NC44MTU1MDQ2NzgyNSw1NjMzLjM2NTY2OTUxODM4NSwzNjYyMy44MTAxOTQ5Mjc0NywxMTM2Ni41MjYyMjQ0OTgyMTUsNDkwMjA0LjkwNTUxMjIzNTI0LDMwMjYyNS43NDE2OTI2OTY1LDI2NTc3OS41MjI1MDg2NTE4LDIxMDQ1Ny4zNDMxNDAwNzk0LDE5Nzk0NC4zNDY4OTEzNDcsMzM0MTkuNzc0MjMzMDA2Nzg1LDIxOTQ2Ni4wNDUyOTUwNDk1Miw5MzQ2OC4zNDM4NDU2NjU0NCwyODQyMDguNzk5MzIxOTA1MjQsMjU3ODE1LjAwMjUzMDc5ODM1LDI2MTEyMS44Mjg1MzQ4ODksNjQ2MjA0LjUyMjM2MTczOTIsNjMyNTQ0LjU2NjU2NzE1MjYsMTU0MTkxNC41MTcwOTg0NzYsMjM0OTYwLjczNjI5MjQ2MTc4LDE4MzU1NzcuMTU0OTkxNjI4LDE5OTI5OTAuODY2MzE0NDU5MSwxMTg4NDY5Ljk5Njk4MTEzMTYsMjcwNjYzLjM0MDY3MDY3MTY2LDE3NDg5LjMxMTI5NDM5MjMyNiwzMzkuMTU4Nzk1NDI0OTk0MgorMzEsVGh1IDI0IEZlYiAxMSw1OTQ2Mi44NzUwMDg4MzU1NzQsOTUyMjMuMDY0NTEzNjk1NTEsNTMwNi44NzM0ODI2OTM4MDMsMzEwNzguOTMyNzk2MzExMDYzLDEwNzk2LjkzNDQ3OTEyNDA2LDM5ODc1Ny4yOTMwMTUzMDk2NywyNjM1NjIuODIzMTMxNDQzLDIyODgwMS42ODc1MTg5MDA3MywxODQwNTQuMjMyNDg3MjYzNTcsMTgzNzg4Ljk4MzkwOTkxODI2LDMyNTEyLjQxODcwODA3MjE3LDIwNjc0MS4yMjA5NDI3OTgzMyw3NjYwMi44MjU3MTU3NDg4NywyMjk3ODQuMTIwMDMyNjk4NTYsMjA5MTA4LjgxMDYwODU3ODczLDI0MTQ5OS40MzQ0NDA3MjU5NSw1MTk2NDguMjQ3OTQwMDI1MjMsNjI0MzU4LjgwMjExNzMzNjMsMTQyMTgwOS44MzMyMTg1ODM2LDE5MDgwOC4yNzc4NDM0MTc5MiwxODIwMjExLjQyMzcxODE4MDMsMTk1MzQ4OS42MzI1NDMxNzcsMTAyMjA2OS42NzA4NzM5NDgzLDI2NTQzMS4zMjgwODM1NjE1LDE3MDg2LjI3MjQ2MjAxODEzNiwyOTkuMTg4ODA5Njg0MDE1ODQKKzMyLEZyaSAyNSBGZWIgMTEsNTM4MTQuMzUyODMzNDE3MDEsODc2NDYuOTUzODk2Njk4Myw1MDc5LjE2Nzc5MzM1MzI3NjUsMjY1MDAuMzUzNjI2MTcxMjcyLDEwNDAzLjk3NTI4MzQ3MTU2NCwzMzExODMuODMxMzY3MTY5NSwyMzU0NDAuNzg2NzIxNDAxMzIsMjAyMTU0LjYzNjUyNjA0OTI2LDE2NTA1NS43OTIwNzQ1MDkyOSwxNzM2MTcuNzY5MzY0MzU0NCwzMTkyMy4xMzM5NjAzNjkwMDcsMTk3Nzc0LjkyNjgxNjM0ODEzLDY0NDY0Ljg3MzYxMjA4MjU4NSwxOTAyNTIuMjc3NTM0MjIwNjMsMTczMzQwLjk4MDY1NjE3NTIsMjI3MjAyLjQ0MTQ0NzQ0MTQsNDIwODc4LjUxMzA5NjE4MzEsNjEzMDc5LjcyNTczNzI4ODEsMTI4MDEyMy43MjYxMTQ1ODU1LDE1ODI3Mi40Mjc5NjM5MDU5NywxNzk4MDMwLjgyMTQ4MTU2NywxODk3NzQzLjQxMjc3ODMyMTQsODUzMjg5LjUyMjU1NTA3MDksMjYyMjQ0Ljg2Mjc5NTgwNiwxNjgyOS42ODk3MTI4MDg5MzMsMjcwLjMwMjAyNDM0NzY0NjY0CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0RlbW9ncmFwaGljU0VJUkRpc2Vhc2VfUktfUmVmZXJlbmNlL0ZsdS9ydW5wYXJhbWV0ZXJzLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvRGVtb2dyYXBoaWNTRUlSRGlzZWFzZV9SS19SZWZlcmVuY2UvRmx1L3J1bnBhcmFtZXRlcnMuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ3NDcwNmYKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0RlbW9ncmFwaGljU0VJUkRpc2Vhc2VfUktfUmVmZXJlbmNlL0ZsdS9ydW5wYXJhbWV0ZXJzLmNzdgpAQCAtMCwwICsxLDIgQEAKK2Rpc2Vhc2VOYW1lLHBvcHVsYXRpb25JZGVudGlmaWVyLHRpbWVQZXJpb2QsZnJlcXVlbmN5RGVwZW5kZW50LHJlZmVyZW5jZVBvcHVsYXRpb25EZW5zaXR5LHJvYWROZXR3b3JrSW5mZWN0aW91c1Byb3BvcnRpb24sY2hhcmFjdGVyaXN0aWNNaXhpbmdEaXN0YW5jZSxwb3B1bGF0aW9uR3JvdXBzLHRyYW5zbWlzc2lvblJhdGUscmVjb3ZlcnlSYXRlLGluZmVjdGlvdXNNb3J0YWxpdHlSYXRlLGltbXVuaXR5TG9zc1JhdGUsaW5jdWJhdGlvblJhdGUKK0ZsdSxodW1hbiw4NjQwMDAwMCx0cnVlLDEwMC4wLDAuMDEsMi4yNSxvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLmltcGwuU3RyaW5nVmFsdWVMaXN0SW1wbEAzODZhMzg2YSxvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLmltcGwuRG91YmxlVmFsdWVNYXRyaXhJbXBsQDM4YTczOGE3LG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uaW1wbC5Eb3VibGVWYWx1ZUxpc3RJbXBsQDM5NTYzOTU2IChpZGVudGlmaWVyOiBudWxsKSxvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLmltcGwuRG91YmxlVmFsdWVMaXN0SW1wbEAzOWFkMzlhZCAoaWRlbnRpZmllcjogbnVsbCksb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5pbXBsLkRvdWJsZVZhbHVlTGlzdEltcGxAMzllYzM5ZWMgKGlkZW50aWZpZXI6IG51bGwpLG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uaW1wbC5Eb3VibGVWYWx1ZUxpc3RJbXBsQDNhMzEzYTMxIChpZGVudGlmaWVyOiBudWxsKQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvRGVtb2dyYXBoaWNTRUlSRGlzZWFzZV9SS19SZWZlcmVuY2UvRmx1L3dvbWVuL0Rpc2Vhc2UgRGVhdGhzXzIuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9EZW1vZ3JhcGhpY1NFSVJEaXNlYXNlX1JLX1JlZmVyZW5jZS9GbHUvd29tZW4vRGlzZWFzZSBEZWF0aHNfMi5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGFkMWE1YgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvRGVtb2dyYXBoaWNTRUlSRGlzZWFzZV9SS19SZWZlcmVuY2UvRmx1L3dvbWVuL0Rpc2Vhc2UgRGVhdGhzXzIuY3N2CkBAIC0wLDAgKzEsMzMgQEAKK2l0ZXJhdGlvbix0aW1lLEVHLUZSRy1HMjEwMDAxLEVHLUZSRy1HMjEwMDAyLEVHLUZSRy1HMjEwMDAzLEVHLUZSRy1HMjEwMDA0LEVHLUZSRy1HMjEwMDA1LEVHLUxPRS1HMjQwMDAxLEVHLUxPRS1HMjQwMDAyLEVHLUxPRS1HMjQwMDAzLEVHLUxPRS1HMjQwMDA0LEVHLUxPRS1HMjQwMDA1LEVHLUxPRS1HMjQwMDA2LEVHLUxPRS1HMjQwMDA3LEVHLUxPRS1HMjQwMDA4LEVHLUxPRS1HMjQwMDA5LEVHLVVQRS1HMjkwMDAxLEVHLVVQRS1HMjkwMDAyLEVHLVVQRS1HMjkwMDAzLEVHLVVQRS1HMjkwMDA0LEVHLVVQRS1HMjkwMDA1LEVHLVVQRS1HMjkwMDA2LEVHLVVQRS1HMjkwMDA3LEVHLVVQRS1HMjkwMDA4LEVHLVVSRy1HMzAwMDAxLEVHLVVSRy1HMzAwMDAyLEVHLVVSRy1HMzAwMDAzLEVHLVVSRy1HMzAwMDA0CisxLFR1ZSAyNSBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMixXZWQgMjYgSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzMsVGh1IDI3IEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCis0LEZyaSAyOCBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorNSxTYXQgMjkgSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzYsU3VuIDMwIEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCis3LE1vbiAzMSBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorOCxUdWUgMSBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorOSxXZWQgMiBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTAsVGh1IDMgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzExLEZyaSA0IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxMixTYXQgNSBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTMsU3VuIDYgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzE0LE1vbiA3IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxNSxUdWUgOCBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTYsV2VkIDkgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzE3LFRodSAxMCBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTgsRnJpIDExIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxOSxTYXQgMTIgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzIwLFN1biAxMyBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjEsTW9uIDE0IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyMixUdWUgMTUgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzIzLFdlZCAxNiBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjQsVGh1IDE3IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyNSxGcmkgMTggRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzI2LFNhdCAxOSBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjcsU3VuIDIwIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyOCxNb24gMjEgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzI5LFR1ZSAyMiBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMzAsV2VkIDIzIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCiszMSxUaHUgMjQgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzMyLEZyaSAyNSBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9EZW1vZ3JhcGhpY1NFSVJEaXNlYXNlX1JLX1JlZmVyZW5jZS9GbHUvd29tZW4vRV8yLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvRGVtb2dyYXBoaWNTRUlSRGlzZWFzZV9SS19SZWZlcmVuY2UvRmx1L3dvbWVuL0VfMi5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjEwNGM0MAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvRGVtb2dyYXBoaWNTRUlSRGlzZWFzZV9SS19SZWZlcmVuY2UvRmx1L3dvbWVuL0VfMi5jc3YKQEAgLTAsMCArMSwzMyBAQAoraXRlcmF0aW9uLHRpbWUsRUctRlJHLUcyMTAwMDEsRUctRlJHLUcyMTAwMDIsRUctRlJHLUcyMTAwMDMsRUctRlJHLUcyMTAwMDQsRUctRlJHLUcyMTAwMDUsRUctTE9FLUcyNDAwMDEsRUctTE9FLUcyNDAwMDIsRUctTE9FLUcyNDAwMDMsRUctTE9FLUcyNDAwMDQsRUctTE9FLUcyNDAwMDUsRUctTE9FLUcyNDAwMDYsRUctTE9FLUcyNDAwMDcsRUctTE9FLUcyNDAwMDgsRUctTE9FLUcyNDAwMDksRUctVVBFLUcyOTAwMDEsRUctVVBFLUcyOTAwMDIsRUctVVBFLUcyOTAwMDMsRUctVVBFLUcyOTAwMDQsRUctVVBFLUcyOTAwMDUsRUctVVBFLUcyOTAwMDYsRUctVVBFLUcyOTAwMDcsRUctVVBFLUcyOTAwMDgsRUctVVJHLUczMDAwMDEsRUctVVJHLUczMDAwMDIsRUctVVJHLUczMDAwMDMsRUctVVJHLUczMDAwMDQKKzEsVHVlIDI1IEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyLFdlZCAyNiBKYW4gMTEsMC44OTYyMTYzMDc1MjIyNjI0LDkuMTY1OTMwMDQ1NjY4MzNFLTYsMS42NDY5MjE2OTA3NTk0NTA4LDAuNjQ0Mzc3Mjg3NzU5MjgzNywzLjk5OTc4MTAzNzAwNDAyNywxLjE2ODQ0MjUzODM1MTY3NjMsMTAuMTg0NzAxMjU5MDcxNjg5LDYuNzIwMzE0MDYwMTcyOTUsOC4wMDg1MjUyNzMwNTE4MjksMTk2LjM4NDg5NTAxNTc3NTU2LDE0Ny45NTIxNzQ2NzUxMDM1NSwyMjUuNjgzNTcyMTIxNDg5MjgsNC41MTQ4NzgyMDE0OTA4RS00LDkuMDA3OTI4NzU4Njg4NzI4RS00LDEuMjgzNjE2MTg4Mzc2MzAwMiwyMTMuMDY2NDEzODE2MjIwODMsMS4yNjQ5NjcwNDU2NTA4MDkzLDUuMDk2MDE0NzI4MjcxMTkyRS02LDMuMzY0NjY5MzQ4NzEwNDYzRS01LDEuMjQyMzY0ODgwMDQzMzgzLDUuNDU5MjcwNjg5NjU4NDQ1NkUtNiw1LjY4NzUzNjQ2MTMwNDk0RS02LDQuNDUzMTgwNDEyMjk5OTQ5RS01LDI5ODAuNzU4NTk2NTkxNzU2LDExNC4xMTk1NDI2NzY4MzI2NywwLjA3NDEyODc2NDg1ODM0MzYyCiszLFRodSAyNyBKYW4gMTEsNC44MTg0OTEzNjQ1MjAxOSw4LjA1MzA2ODYzNTQ4Mjc1M0UtNCw4LjkyMzcxNDUyMTA0OTU2OCwzLjQ4NzY3NTc1MzI1MDMxOSwyMS42ODM5Nzc0MTQzMjA3Nyw2LjQ1MTgxNTc3NzYxNzg2MTUsNTUuNDk0OTk1MjY0Njk0MywzNi42Mjc0ODI3MzgwNjIyNyw0My42MTE5MTc0Njk2NTAxNSwxMDQ3Ljg4MzkyMzUxMzM5NTgsNzg3LjU4NDkyMzAzNzc1MjgsMTIwNS40NDE4MTAxODY4NTYsMC4wMzk2ODQ4NTEwMDk1NTYyNjYsMC4wNzkxODA3Nzc0ODAxOTAzNyw3LjAxNDYyODQ2NTM4MzA0OSwxMTM3LjYzMzkyMTU4NTcyMjYsNi45MTEwMzQyNDg5Mjc3NTgsNC40NzUzMTY0NTA0NjkzNDI1RS00LDAuMDAyOTU3ODM4NjM4MDgyOTIsNi43ODY4OTA4MzIzNzAzNzg1LDQuNzk0ODA1NjgyMjcyNDEyRS00LDQuOTk3MTQ1MTU2NzQzMTc5RS00LDAuMDAzOTE3NDQ0NDEzMjAyMTA1LDE1Nzg2Ljg1MTEwMTgzMTQ3NSw2MDYuNTM1NjM5NzE0NTAzMywwLjM5ODAxODg5OTk0ODYyMTUKKzQsRnJpIDI4IEphbiAxMSwxMS41MDA3NjU3NjEzOTQ5NiwwLjAwOTMxODY2MjI5MDE3MjMyOSwyMS45OTQ2NDkxOTc1MDQxMDYsOC41Mzk4MjMwODM5MjAxNjMsNTMuNTI4MTAwMTgxNDc4MjEsMTcuMDQwMzk1NDE1MjY2NDQsMTM5LjQ5MzY1Njc5OTA3NTQ0LDkyLjE2MDEzNDA3MjE4OTIsMTA5LjM3ODYzNDc3NjQ2Njg0LDI0MzAuNjQxMDU0NzA3MzQ1NiwxODEyLjgyMDEwOTI3MjczNzUsMjgwNy40NDg1NzY2MzA3MSwwLjQ2MDA2OTQ2MTQyNjEyODEsMC45MTgwOTMxNjQ0NjAwNDg1LDE3LjgyODIzMDA2ODA2NjI1LDI2NDUuNDMyNTQ3MTgzMDExLDE3LjU0ODYzNTkwNjgwMjI1NCwwLjAwNTE3MjExNTQ4MTE4Nzk0MywwLjAzNDMxMDk3NzkxOTM5NTQzNCwxNy4yMjcwNzQyNTI1Mjc2OCwwLjAwNTU0MzY2ODU1NTg1MjUsMC4wMDU3ODY1NDg5NzIwNDg2NzMsMC4wNDU1NzExMTk3MTQ4NjA0NCwzNTc1MS45OTk0MjUxMDExMywxMzg5LjAxMTYwMjE3OTY3NDEsMC45NDQ5MjI1NzU1ODQ5NzM2Cis1LFNhdCAyOSBKYW4gMTEsMjEuMzA5MDkyNzc0Mjk1Mzc2LDAuMDQ3NjAxOTM4MDg5MTUzMjgsNDMuNTkwMDk1MDUxMTY5NDA2LDE2LjY5MzI3Njc0Nzc2ODg4LDEwNi4zOTE0MjgwODYxMjU3MywzOC4zMDU1NTE5MDE5MzU5NSwyODcuMTE3NjU0NjcwMDA4OSwxOTAuMDU4Mzg5NjE1OTE1MDUsMjI0LjE3MDczNTkyNTY3MTUsNDIyNi4xMDUwMDkzNzg4OTksMzA5OC4xNjg4MzAxNTA5NjU3LDQ5MjcuODkzODQxNTI0MjQ0LDIuMzYxNjg1NTI4ODE4NjQ4LDQuNzE0ODMwNjEwNTUyMTY1LDM3LjQ2NTUwMjQ3NTIyNTczLDQ2MjYuNDQyMjQ1NjY0OTk2LDM2LjgxNDE1NjM2MTI5NTMxLDAuMDI2MzQyMDkyNjg3NDk1NzIsMC4xNzY0MTcwNDIyNTQ3NzkyNSwzNi4xMTQ3NTU2MzA0MTkwNTQsMC4wMjgyNjU4NTI4NTY1NTczMjYsMC4wMjk2MjUyOTYzODI2MTEzNjUsMC4yMzYwNDQ4Njk1MjA4NzQ3OCw1ODkxMS43MDEyNzY3MjQwOTYsMjM0Ni45NTQ5MDY1NTQyNDgzLDEuNzMwNjU0NDExMTM4NDM4NQorNixTdW4gMzAgSmFuIDExLDM2LjgzMjA1MTAwMDAzODI0LDAuMTU4NDMxMzQ4Nzc5MDY3OTUsODIuMjk0NjM0NDAwMTE1MDMsMzAuOTk1NjY3MzM4OTMzNDYyLDIwMS41NDA2NTY3MTk0OTYwNyw4My4xOTE1MjcyMjE1MDU4NSw1NjcuNTE2MTkyMTE4NTg2MywzNzYuNTM5NzQyMjA2MjM1OCw0NDAuODgxOTQ3OTk1MzQwNCw2NjQ1LjU5MjIxMTk2ODUyNjUsNDczNS4yNDMxNzEzNDU4MTIsNzg2OS4wNjYxMDIzMjE3MzUsNy45Mzc5MjY2NjczNzYxNDU1LDE1Ljg2MDM3NzU4NjYzODEzLDc1LjgzOTYwMTU1ODkzNjA0LDczNDQuMDM2NzQwNDgwMTQzLDc0LjM3NDAyOTIwMjY5MDQ4LDAuMDg3MTcxMjMxMjEzMTc2NTIsMC41OTQ5MzAzOTM0MDM1Mzg0LDcyLjkwMzI0NTI5NjQ0NTM4LDAuMDkzNzQ5NjIzOTk2MTc1ODUsMC4wOTkwNzg4MDMyNTcwMTk4NywwLjgwNzYyNzA1NTcyMTc2MzcsODQ2NTkuMzI3NDkwNDY3MzcsMzUxOS40MTkyOTY1MDIyOTQsMi45NDQxMDM0NTM3NDg4NDQKKzcsTW9uIDMxIEphbiAxMSw2Mi41ODQwNTgxMzE3NDIyMywwLjQxMDM3MTk1ODE5MTI2MDMsMTUyLjAyNzIzMDU4OTA1ODM1LDU2LjQ4MzkwMjAxNTQ0NjAzNCwzNzMuMzUxNzkwMjc4NzA3NCwxNzMuMTcyNzY4NTYzMjE1MDIsMTA5My44NDQxMTk2ODM2MTQzLDcyNy4zMzMwNzczMzE3NzM2LDg0Ni4wMTE2Mjc3NjA5OTI1LDEwMTk1LjkzNDEwMjAwNDI1OCw3MDAwLjI0OTI0Nzc3MjQyNiwxMjI5OC4wNjY1ODQ5MzY2NzIsMjAuODk0NzM5MzI3MzY1OTgsNDEuODA1ODgxMzI1MzM5NTEsMTQ5LjI1NTk5NTQ1MDU0MDQ3LDExMzk3LjA3NTU1MTA0MTQ1OCwxNDYuMTE2MzIzMTAyMzQ2MjYsMC4yMjM2ODA2MjMzMTczNjU0LDEuNTc0NjM4NDAwNjI2MTgxNSwxNDMuMTIzNTg3Nzg3MTIwMjEsMC4yNDE0ODQwNjg1NzM0NzE1LDAuMjU4Nzk0NzcxMDg0NzAxMDYsMi4xODc0MDM4OTk1MTQ3OTU3LDExNTM1Ny42NjMzNTY2MDY1Niw1MDc0LjgzMjUzNDMyOTYxNiw0LjkyNjkzOTU0NjkyNjA3MgorOCxUdWUgMSBGZWIgMTEsMTA0LjQ5NjQyMzc3Mjg0OSwwLjkxMzUyNjUwMDczMzA0MTUsMjcxLjY0ODE5NTAxNjE2OTk1LDEwMC4wNjgyNjcxNDY5OTE2OSw2NjguMjk0NDI0NTgxNzY5NiwzNDEuNTEwOTEzMzcyODA5MiwyMDI4LjkxNjM4NzUxODM1LDEzNTEuODQyMDU3ODIwNjA0OSwxNTYzLjM5OTU0MzIxMjc2MDYsMTU1NzQuMDQ4NTI3ODk1MTIsMTAyNTQuNjcxNjgyMjUyMTM2LDE5MTI5LjgyMDQ1NTM2MzIyNCw0Ny41NjcyODI4NjkxMDM4Niw5NS4zNTQwMzI1NTMxNzU1NCwyODEuNzc5MzAyMjYyNjM1LDE3NjA4LjgzMDY0MzM3MDUxLDI3NS40MzU1OTU1MjI2MDg0LDAuNDkxMzIzMzYzMjgyMzk5MzQsMy42MTI2NTIwNjE1Nzg2OTkyLDI2OS42MTU0NDk0MTQyOTMxNSwwLjUzMzQwNjY4MTk5MzUxNzcsMC41ODMyODI2NjMzNTM3NTEzLDUuMTc1NTY4NjUyODg3Njg0NSwxNTQ1NjAuMTU5NjA3MDQ0MzYsNzIzMi45Mzc5NTY3MzkxMjgsOC4xMzUyODQ4MzI5NjI5MjQKKzksV2VkIDIgRmViIDExLDE2OS45NzkyOTA0MjMzODI1NCwxLjg1MjE4NDQ3NTA4OTQ3NzgsNDY2LjM5Njk5NDQ2MjkyODE1LDE3MS4xNzgwMTgyNDg0MTEzMiwxMTQ4LjI4NzQxNTI0Mjk1MTMsNjQxLjI3Njc2NTM1NTE2MjMsMzYxMC42NjMzMzQ4OTcxODI3LDI0MTAuODA5Nzc1OTk4OTQ2NCwyNzcyLjg2MjA0NzIxMTI5NywyMzYxNy40MzUwNjkzODkyNiwxNDg2NS4xODM3MzI3NTE2NzUsMjk0ODUuMDI1MDE5ODc4NTU4LDk5LjA5Mzc4NzAxODM2NjQxLDE5OS4xMTI2NDk1MzUxNjE0NCw1MDkuNzQwNjY1NDI0NjYwOCwyNjk4NC4zMDQ3MDAyODM0OCw0OTcuNTYyNDA4MzU4NzI5LDAuOTc5NTMyODY3NDA5MzUyMyw3LjU5OTU3MDcwMDYxNjY1OSw0ODYuNzE0MDUwODk0ODcxMjYsMS4wNzExODAyMDI2ODgxMDUsMS4yMDE5NjY3MDg3MTI0MzczLDExLjI4NDEzNTQ4NDU3MzY2NywyMDU0MDkuOTY3Njg4NTAwNjIsMTAxOTcuNDQ0OTc4MTQ4NDQsMTMuMTQzMzY4MDc3NzUzNDMxCisxMCxUaHUgMyBGZWIgMTEsMjY4LjYzNjkzMzQwODYyMTY0LDMuNTM2MjUzOTY4NjU5MzcxLDc3MC44MzkzMzI3MDM4OTE0LDI4My4yMjg0MjAwODYzOTAxLDE4OTcuNDE4NDY2MTE4NzU2NywxMTU4Ljc1ODg3ODA0NTgwMzgsNjE5OC4zODkzMDU3NDk0NDcsNDE0OC4zNzY0NTYzMjgzMTMsNDc0NC40NTI0NzE3Mjg2MjksMzUzMjcuNTM1MjMyMDUxNTcsMjExNTIuOTI3NjA3NTkxNTE1LDQ0NzM2LjU4NzYwNjQ2MDkyNiwxOTQuODIwMjE0NDQwOTE5OTgsMzkyLjQ5NDg1MzQ3OTI2MTA1LDg4OS43MDkwMzM5NjU2NDk0LDQwNzUzLjM0OTk3MDM2NjAzLDg2Ny4yNTkyMDgzMjExMjUsMS44MzQ1ODMzMzExMjgxNzgsMTUuMTA5MTg4MDUyNTY2MzA1LDg0Ny42ODM4MjIxODY0MTc3LDIuMDIzNTA3ODkzMjI3NjMzNiwyLjMzOTk2OTc1MjA3ODAwMzQsMjMuMjkwOTE2MzU4MzM5NDM0LDI2OTYwMC41ODY3NDk0NTU3LDE0MTEwLjUzMjk5NDI1NjMxMSwyMC42OTI0NDU1NDIwMDE1MjYKKzExLEZyaSA0IEZlYiAxMSw0MTMuNzM0NjU3NjEzNTkyNyw2LjQ4NjU3MzAzODA3MzAyMSwxMjMzLjE4MTQzNjYwNTkzNjgsNDU2LjE4ODcwODIyOTQ0MzI1LDMwMzEuMjI5NTM4ODU3NDY5LDIwMzYuMDUwNTcyNzI4MzIyMywxMDM0OS41MjU1MTkwMjkzMSw2OTQ1LjY3OTA3MDY4NDc1Niw3ODk1LjM5NTkzMjMxODk5LDUxOTYwLjgzNDc0Njk2MDA4LDI5MzU4LjQwMTA3MTY0NDM3LDY2NjM0LjE0MTExNDA5NTgxLDM2Ny45ODU4OTg5MDk2NzE1Niw3NDMuNDcwOTU0MzAwNDYwMywxNTExLjk4MjAyODgxOTA3NTYsNjA0OTUuOTIyMzI1OTk2NzcsMTQ3MS44ODc4NTYyMzkwODU3LDMuMjk2ODc5Mjc4NTE0Nzk0LDI4Ljg5NTcyOTA2OTAwMDY5OCwxNDM3LjI4OTM3NjkwNTM4OTQsMy42NzEzMDUxNzg2ODk3NTIsNC4zODg2NzQwNzAzMjExODM1LDQ2LjIxOTAxODg1NzYwMjU5LDM0NjgyNy4yMzA2MjE1MjUzLDE5MDIyLjU1NTYyMTc3NDg2LDMxLjc4Njg0NjY1NjQ3OTAwMworMTIsU2F0IDUgRmViIDExLDYyMi4yODc3MzM2OTUxNjcyLDExLjUyNzk2MDQ3MDk4OTkwNSwxOTEyLjk4OTg2OTQxOTg4OTgsNzE3Ljg1MzM2NjU2MjAyNjgsNDY4OC4yMjY5NTc1NTk1NTIsMzQ5My44ODU0MDU0MjE3NjUsMTY4NzEuOTUyNTk2NDUwMzc0LDExMzYwLjEzNDg1OTQ2NzAyNSwxMjgyNy42MjkxNjM5ODk2MzIsNzQ5MTEuNjYxNDEzMDIxOSwzOTQ4MS4xMzk2NDgwNzA0Myw5NzEzMi44NDI1MDA0OTIyMiw2NzIuMzEwODY5ODEwMDI3NywxMzYyLjQxNTEyMjYwNjExLDI1MTIuNDI5NjA5MDE5NzM4Niw4ODAyMy44MTM2NDQ5MjIyNCwyNDQyLjk1MTU4NTE5MjIzNDIsNS43Mzc5MzYyMjkwMTg1OTgsNTMuNTE3MjQ2OTYxNDQxOTU1LDIzODIuNjMxNzIwNzMyNTgwNiw2LjQ1NTQ3MjEwMDcwNDg2OSw3Ljk5MzUwMTkxNDAwNTM2LDg4LjY3MzAzODc3MDE5NTM2LDQzMzQ4Mi4zMzA4MDM1NDQ3LDI0Nzk3LjE5NTgxMTUxMjE0NSw0Ny42NjM1Nzc1MjE0NDU5NjYKKzEzLFN1biA2IEZlYiAxMSw5MTUuOTQ4Mjk5NjI3Mzc1NywxOS45NjE3MDQxMTI0MDA5NjIsMjg3Ny42MzkzMDUwMTgxMDczLDExMDYuNTQ1Mjk2NDg1MTUxOCw3MDE1LjgxODczNDIxMjUwNiw1ODczLjcwMjI4Njc0MDkxNiwyNjkyMC4xMDQ3NTEyNDA3NzUsMTgxOTguNDQ5NDk5NzI3OCwyMDM5Ny4yMDMxNzEzNDc1NjMsMTA1NjA0LjAxNDk4NDc2NjIsNTExNDQuMDY1NzI1MTYyOSwxMzgxOTguMjY4MTM2MjMxLDExOTMuODA4OTIyMDE0NDYxMSwyNDI3LjA4NTA0OTk4MDIxMTQsNDA5NC44Njc0OTc1NTE3NDMsMTI1Mjc0LjY5ODYyOTUwMTMyLDM5NzguMTI3MjY2ODEzMjk5LDkuNzI5OTgwMjE0NTM5MTIsOTYuNDg2NjUwNjkxNTkxNjUsMzg3My42NTUxNzQ4MTAyODg0LDExLjA2NjU5NjAzMjMzNjExMywxNC4yMTgyOTM4MDYxMzYwMTQsMTY1LjMwNTM0NTkwNTMxNDcsNTIyMzEyLjQyNDc0MTMxNjEsMzEwNTUuNjM4MzQ0ODYwMTY2LDY5Ljc5MjA4ODI1NTY5MjMzCisxNCxNb24gNyBGZWIgMTEsMTMyMS4yMDQyNzMxMzQwMjUsMzMuODQ1MDA3NTcxNzk4OTgsNDE5MC4wODgyMTExNDM4MDUsMTY3My42NjcxNDg0NTI3MDU1LDEwMTMxLjkwNzk5MjY1MzY5NCw5NzAxLjY3NzczNjAwNjQ2Myw0MjEwMC43MjM2NDY5MjAzMDUsMjg2MDQuNzgxMjk5NTk2NjkyLDMxNzg4LjU3MjE2MjY2MzEyLDE0NTE2OC41NTc0NzM4ODQwNSw2MzQ0MC4yNjczNTQ0Mjc1NCwxOTEyNzMuMzE2NzExMDY4NSwyMDY5LjU1MDgxNDk0OTEyMDYsNDIyMi45MDU4ODg5MzIxNDUsNjU2My4yMDkzOTM5MjQwMDQsMTczOTQ3LjE0OTU0MTYwMjI3LDYzNzMuNTQ5ODI5NTY1MTYyLDE2LjE1NjMxMTI3Njg1ODg4LDE3MC4yMzE2MDg0NjYzMjQzMyw2MTkyLjMyNTU4MzQ1MjI2MywxOC41OTA4NTIyMTIwMDI0MSwyNC44Mjc5NDk0Mzc0NDM4OCwzMDEuMTE3MDM2NDU0NDcyMiw2MDI2MTEuNzkwNjg4OTI5NCwzNzE0MS4yMjQ1Mzc5NzgsOTkuNzc4NzEwOTI4NTc2ODQKKzE1LFR1ZSA4IEZlYiAxMSwxODY0LjczNjQyODU5Njg4OTUsNTYuMjMyNjYxODc0NzA2OSw1ODcwLjcwNzk5NTMyODY4MywyNDc4LjkzMDE5OTY2MjA2MiwxNDAyNC4wMzg3OTE5NTM3NjgsMTU3MjguOTQxNDQ3NTA5MzksNjQzNzAuOTY2NzcxMjg2NTEsNDQwMjAuMjg3MDIzODcxNjEsNDg0MzAuNTcxNzQ3OTE1OTEsMTkzNTA3LjkwNzU3MzY4NDk2LDc0ODA4LjAyMjMxNzg2NjY4LDI1NTg1MS41Njk5MjA3NTYzNiwzNTAyLjY5MTMyMDcwNTIwOSw3MTc3LjcxMDg1MTg2NzU4OSwxMDMzMy42ODc0NzExODA5MDUsMjM0MzUxLjg3OTM4MzA4MDUsMTAwMzguODQ2ODY4NjEwODk3LDI2LjI5NTUxODcyMzMxNDg5MiwyOTQuMjA1Mjg0ODEyNDQ2Niw5NzIyLjQxNDAzMDcyNTgyNCwzMC42Mzc2MzU1NDQ0OTQ0Niw0Mi42MDI4MDUwMTkyMDksNTM2LjUyMDQ2MTQzNDY2MDcsNjYxMzY4LjE5MTI0MDkyMDUsNDIxNDAuNzk2Mjk4NTE5NDYsMTM4Ljg3MDEwNTc5MzA4NzMzCisxNixXZWQgOSBGZWIgMTEsMjU3Mi44NTA1MDM5MzU1OTYsOTEuNzY1NTM4OTczNDUzMjYsNzg2Ni42NTU2NjY5Njg4NSwzNTg5LjkwOTI2MTAwNjMxMDMsMTg0NzYuMTQzMTY1MjU5OTEzLDI1MDM5LjAzMjY5NTY2NDcyNiw5NjAxNi4yMjQwNDQ4MzU3OCw2NjIxNy41Njk4MDcyOTc1NSw3MTk2OC43MzA0ODc1OTMwMywyNDg3ODIuNzI2MTQ3NzI0MjMsODM0MDAuNjcxMjM3NTg5NjMsMzI4NjIxLjUzNzg4NTUyNDg2LDU3OTUuMDI2NDkxMDMxNDQ0LDExOTM2LjkzNDI4NjU3MjE2OCwxNTk4My43NTMxNjI3ODE4MTIsMzA0NzA1LjE5OTY5ODY3ODgsMTU1NTIuMzcxNDY4NTU2ODM0LDQyLjA1NDcxMjE3MDU4Nzc1Niw0OTkuNTA3NTAwMDc5MjYwNDcsMTQ5OTIuNjIyNDA1OTM0MzUxLDQ5LjY2NDg2OTc5NjEwMDkyLDcyLjAzODc2NzYwNzg5NDkzLDkzNy44NzEwMzUwMzk5NDg1LDY4Nzc1MS4xMDYyMjQwODM1LDQ1MTY3LjkzNDU2NTk3OSwxODcuNzcxMjcwNTg1OTMyMzcKKzE3LFRodSAxMCBGZWIgMTEsMzQ2NC43NTE4NjMzMjczNTM1LDE0Ny4yMzU1NzIxMDgwMjU0MiwxMDAwNi43MTc3ODQ0NjA3MjksNTA2OC43Njg2MTY4Nzc5MTU1LDIyOTg3LjEzMDU3MDA3ODkyLDM5MDk1LjIyOTYzNDM5ODUsMTM5MTYyLjY3NTY0NTc0NzgzLDk3MDM1LjgwMzUxMDY5NDk4LDEwMzg4NS45MDQ0OTYxODMwMiwzMDY1NzUuMzUxOTE2Nzc3Myw4NzU5Ni45MDYyODEyODU1Niw0MDIzNDIuNDkwNjc5MzY5Nyw5MzY1LjIwMTY3ODgzMzYyMiwxOTQxOC4wMTM4MjE4NDc1MiwyNDI1OC42MDgzODM0MzYyMiwzNzk5MTAuMTU5MTU1ODIzMiwyMzY4NS4zNTg2Mjc1NTEzNiw2Ni4xODg3ODk4MDE3Njg2LDgzNC40Mjg5MjEzNDY2ODM4LDIyNjc4LjY1MzU3ODIzODY3OCw3OS4zMjQwMjk3MTMxNzA0LDEyMC4yNDAyOTg3MTQxNjExNiwxNjEwLjgzNDQxNDQzNjE0MTcsNjc2NzM2Ljg5NTU2OTU3ODMsNDU2NDkuMzk3NTQxNjg3MzcsMjQ2LjA2MzI1MTAyOTU1OTk1CisxOCxGcmkgMTEgRmViIDExLDQ1NDYuNjcyNjMwNDQ5MjI0LDIzMi4zODMyNTgzODc2OTAzOCwxMTk5NC43Mjg2NzY1MzA1NTYsNjk1NC41NTMxOTIzNDAyNDQsMjY4MTcuMjYwMjU2MjY4MjQ0LDU5NzUwLjgwMDQyMTY0NTc0LDE5NDk1Ny4yMTA0MjE4MTA3LDEzNzg4NC4xNTgyNjU0NDEzNCwxNDQ4NzUuMDI5Mzc2ODY5MDYsMzU5OTM0LjgwMjQxMTA3NTcsODY2MzQuMjcwNTYxMTgyNTcsNDY2MzMzLjczODE4Mzk2NTU2LDE0NzUyLjEzMTU1NzM4ODA1MSwzMDg0OS42Njk2NzQ3NjA4MywzNjA1Ny42MTM5OTUwNzQ3OSw0NTEzMzQuNzU0MzUxNzkwMjQsMzU0MjUuNzI4NjAxMjU1MjUsMTAyLjY0MjAwNTQxNjc0NjAzLDEzNzIuOTg3MjE2ODM0NDE0MywzMzU4NS4yODAyNzc4NzYyNywxMjUuMDA4ODYyMTQyNDgyNzgsMTk4LjM3MjE5MDUxOTg3Nzc2LDI3MjAuNzY3MDYwNDg1MzQ4Myw2MzEyMTYuNDcxNjk5MjIzNCw0MzU2MC40Njk3MDc3MjUwMywzMTEuNzg0ODgxOTE3NDczMgorMTksU2F0IDEyIEZlYiAxMSw1ODA1LjkxNjg3NzQwNzc2NywzNjAuODE0OTI3NjE5NTQzMywxMzQ2Ny40NTE1NTQwNjM2NTEsOTIzOS43MzE5MDEyNTM3NzcsMjkxOTYuMjAwNDE5NTY3ODcsODkxMTYuNDMwODk3MzU0MzcsMjYyMzE3LjgxMjY0ODc1OCwxODg4NzcuMjQ1NDU4MTA1MzIsMTkzOTA1LjcyNDQ3OTcwODk3LDQwMDU4My44NzkwMzA4NjE3LDgwOTA1LjgxNDQ3MzgwOTA5LDUwODk5Ni42ODc2MDcyMzIzLDIyNTY2LjczNDQ2MTQxNDI2OCw0NzcyNy4xODM4MzI5NjA1NzQsNTIzNTIuMjc0NDQzNDYxNTEsNTA4MDg2LjIxMjUzNjQ5ODEsNTE5NjguMzIwMjcxNTk0NjYsMTU3LjAwNTU4MzI5MTYyNjA0LDIyMjYuODQ0MzQ5MDYxMDczNCw0ODU2NC42MjE4MzI2NzU0NDYsMTk0LjYzNjMzMDA3MDE1MDA1LDMyMy44NTg3OTU1NTUwMTk1LDQ1MjAuNzcxMzA0OTgxMzA1LDU2MDY0Ni4yNjk5MDE2NzU0LDM5NDE3LjU3NDIxMDUyOTc1LDM4MS4wNTEzNTA2Njk1NzI4NgorMjAsU3VuIDEzIEZlYiAxMSw3MjA4LjE1MjQ0NTA4OTU3NCw1NTEuMTM4NTU5NTI1NDU0NCwxNDExOS40Mjc3NjYxMzI3OTYsMTE4NDkuOTE2OTI3NjU0MjgyLDI5NjI5LjkyNjc2OTk5MTAzOCwxMjkyMDEuMDQ5OTY4ODE4NTQsMzM2NjUyLjg1MDA1MDA5OTYsMjQ3NzYzLjAzMTQxMTUxNjMzLDI0NzMxMC45ODExNjQ5MTM4LDQyMTMxMy4yNTAxNjg4NDM2LDcxNzQyLjQ3MTU2NjAyNTM5LDUyMTg5Ny45MTM3NTYxNzEzNiwzMzM1Ni40NjU5ODIzMDMzNSw3MTYxMC44MTE1NTAzMzQ0Nyw3NDAxMC4xMzY4MjczMTI3Miw1NDAwNDAuODc2MTkzNzAyLDc0NjYxLjk3NDM1MTE4MzIsMjM3LjIxOTYyNzUzNTIyMjQsMzU2Mi45NTU4NDkzMzg1MjQsNjgzNTAuMDU0NjQ3MTA3NjIsMjk5Ljg4MDk5MTg3MTI1ODMsNTIzLjkyNzYxMjIzNjE2MSw3MzkxLjE5Mzg5MzA1MzE2Miw0NzcyOTMuODQ3MjU5MjU4OSwzNDA0Ny42OTc5MjgwMjEsNDQ3Ljg3MDUzNTc2Mzc4OTYKKzIxLE1vbiAxNCBGZWIgMTEsODY5NC4yMTY2NTM3Nzk2NSw4MjYuOTk3NjcyMDEzMjUzOCwxMzgyOC4zNTU4MDMxMjQ4MTQsMTQ2MjQuNDQxNjgwMDMwNzM5LDI4MTA5LjMzNDc5MDMxNjc5NiwxODA5NzEuMzMyNTMyNTQ4NTIsNDA4OTc4Ljk0Nzc2MTAwMTc2LDMwODc5Ny45MjA0MTIzMzcsMjk4MjU5LjI3OTAxODYyNTcsNDE4NDMxLjk5NDU5MTcwMzY0LDYwODUyLjU1MjMwODUyNDI0LDUwMzA5MC4zMzA3MjgwNjA4LDQ3Mjc5LjQzOTE0NDU0NjA2NCwxMDM1MTAuMjI2NTAxMDY4MTEsMTAxMzU2LjY3OTUzNjUwODEsNTQxMjk2LjM3MzI0ODM2OTEsMTA0NzM3Ljc4ODY0MDk1Mzc1LDM1NC4xMjI2NDU0MjYwMDkwNiw1NjE5LjI5NDEwMDY5MDczOCw5MzE1OS40OTUzMDc4MDMzNiw0NTcuMzk4MTE0ODE1MzA3Myw4MzkuNzUwMTEyNjUwNjA0LDExODcwLjE1NTc5Nzc5OTg2NywzOTI0MDMuMzQ0MzQ5MTI4MjUsMjgyOTIuMzcxOTkzNjMzMTg0LDUwNC4xMDAyMTg1MTYwODEKKzIyLFR1ZSAxNSBGZWIgMTEsMTAxOTYuODcxMjU3MTg2OTQ3LDEyMTkuNjk5Mzk5NDg1MDIwNCwxMjcxMS43MDgzODI4NDUwODcsMTczNDcuMjEwNTc3ODc5NTEyLDI1MDk3LjQxNDg4MTYzMTcxNCwyNDM1OTMuMDI1NjM2MzM2NSw0Njc3NDUuNTc1OTk0NjE0NzQsMzYzNDE3LjY3MTkyNTkyNDgsMzM4MjgwLjcyNDUyNTY0NjYsMzkzMzc4LjQ4OTk5ODU3MjEsNDk3NzcuMTkzNTkzNjUzNzYsNDU3OTc0LjIzOTE4ODc2NzQ1LDYzODIxLjU0NDgzMDA0Mzg5NSwxNDMyODcuNjU3MDY4NTQzNTcsMTMzODc1LjU1NTIxNDg3NDE4LDUxMjc3Mi4zNDI3MzM0NTk5NSwxNDMxOTQuMDU3MDg4NzAzNzMsNTIzLjY5MTAwOTQ3MjgwMDksODc1MC44MTY0ODYwMDgyMTQsMTIyNDM5Ljg2ODUwMDQ3NDkxLDY5Mi42OTQ5NDU4OTI4NzE2LDEzMzcuMDA2ODE1Mzc1NDk0NCwxODczOC43OTE4ODIwMDg3NDcsMzEzOTIwLjYyMTEzMTczNTIsMjI3OTguODE4MzY0NTk3MzMzLDU0MS4yMzk3MjE2NDQ0NDQKKzIzLFdlZCAxNiBGZWIgMTEsMTE2MzIuOTM0NTM2MDcyNjA0LDE3NjIuNTgxMzAwNDgxNDk5NSwxMTA1MC42MjQ1NDg4MzA3NjEsMTk3NDIuMDY2NDYxMjI0MDMsMjEyNzkuODg5OTk4MDc5NzA3LDMxMjMzNy42NDQyOTA3NDY4Myw1MDEyMjUuNTA3MzAxMjk1OSw0MDEzMzguMzkxMjU3NTUyOCwzNTkyMTIuOTIyOTA5ODI1MywzNTE2NjUuNzQ4MjYyODk0NzUsMzk1OTAuMzQ2MjA3Mjk0NTYsMzk2MzkxLjAxNTg1NzcyNTcsODEyMjguNTE0OTY2Nzc0OTQsMTg4MTE4LjMyNTQ2MjU5NDc0LDE2OTIwMy43MjgxMDQ0MjY1LDQ2MTE3OC4zMTQ1NDM3NjQ2MywxODk3MTkuMTQ4NjgyODAyODMsNzY2LjczMzM4ODU5MTY4NzMsMTM0MjEuNDMwMDU4ODEzMjc2LDE1Mzk5OC4zOTkyNDI1MDU0MywxMDQwLjg5MTY2OTk3NjI0NDQsMjExMC43NDA4MTIzMTA4MjUsMjg5NjIuMjkxNDgyNjEzMDk1LDI0NjE1OC42NjAwODI4OTI3OCwxNzk1NC43NDkyNzIzODI2Niw1NTEuOTIyOTU3MTQ3ODA4CisyNCxUaHUgMTcgRmViIDExLDEyOTMxLjA3MzAzOTEyNzM5NywyNDkzLjU2MjE1MTMyNzIyMTcsOTE3Mi4yNDQ5OTQwNDEwNDgsMjE1NTkuNTAyODg0NTA5OTg0LDE3MzA5LjA3MDYyNDA2MTc3NiwzNzg5NTcuOTkwNTY4MjUzNzQsNTAzMDIzLjAwNDA2MDcxODIsNDE1MDE2LjM1NTAxNjMwODEsMzU3MTQyLjY4NDI4MzQyOTMsMzAwOTMxLjk0MTE2MzA1NTEzLDMwODQ3Ljk3NDY1OTkwNjEsMzI4OTkwLjQyMDA5NjQ5MTM1LDk2NzkwLjk4NjE0NTU2NjIzLDIzMjUxNy41ODc1NzQ3MjQ3LDIwMzMxNi41Mjk1MTI5NDYyNiwzOTY1MTcuNDY3MTQ4NDg4NTYsMjQyNDU0Ljk0MDY1ODI4NzA2LDExMTMuNzI4OTg4MjEwNDM5LDIwMjgwLjU1NjgwNTkzNzEwMywxODQyMTkuODE5MTEyMzgwNCwxNTU1LjUxODg0MDMxNDYxOTQsMzMwOS4wMzM2Njk2NTk5OSw0Mzc3Ni41MDkwNDIxOTM3MzUsMTkwNDE2LjgzNDk4OTM1NTQsMTM5MTQuMTIxMDA1ODc1MTU3LDUzMy43MTYxMzI3Njk4NzQzCisyNSxGcmkgMTggRmViIDExLDE0MDIzLjk5MjUxNjI0MjksMzQ0NS40MjkzNzkxMjE3NTU2LDczNDEuMzU4MTIxNTIyNzU1LDIyNjAwLjk1ODQ4MDUxODYxNywxMzY0MC42MDAxMTQ1MTc5NDMsNDMyMzAyLjA4MjY3Nzk3NjE3LDQ3NDA5Ni45OTY2NzMwMzI3Niw0MDIyNTIuNDAyMzcwNjE2NSwzMzM1NzQuNTM2NTcyNzI4OTUsMjQ4MzUwLjk5MzA2NTA5MjUsMjM3MDYuNTgzNDEyNjYxMDgsMjY0MTQ0LjY0NDM3NDUyNzI3LDEwNzM4My4yNzQxNzk5NDc1MiwyNjg2OTkuMzk4Nzk0NjkwODUsMjMwNjkzLjYzNDUxMjY2NzUyLDMyODQ3NS4wNDExNzIyNDU4LDI5NjkyOC4xOTcwOTM1NjY3LDE2MDYuNTMzODI1NDk1NTA3MiwzMDE0OS43Njk2ODI5NDcyMDQsMjA4MjQ4LjcyNzYwNzc4MDU0LDIzMTQuMDA4Mzg4OTQyMjEzNSw1MTUwLjQ2NzEyNDIwNjYyNCw2NDUxMi44OTAyMTA5MTk0NDYsMTQ2MTI5Ljc3MTgyNjYzNzM2LDEwNjc1LjA1OTk0MjM4OTA4NSw0ODkuOTI1ODAyNDYyNjMxNzQKKzI2LFNhdCAxOSBGZWIgMTEsMTQ4NTMuNDEzMzU3ODE3MTY0LDQ2MzcuODg5Nzg3MzYxMDA2LDU3MTkuNDk3MzY0MDM1MjUzLDIyNzY2Ljc4MTMyNDAyMjQ0NiwxMDUwOC40NzAxNDQ1MDYyMzUsNDYxODU4LjkxNDEzODI2Njc2LDQyMjE2My44ODgzODgwNTQ4LDM2NzEzMy4xMjc3NDI1MzY2LDI5NDYwNS4xMTQwNDU1OTk3LDE5OTE3NC45MzY1NTUwMTQ1MiwxODA3My42MTM2MTk4NTEyNjUsMjA2ODkwLjgyODIxNDAzNTk4LDExMDcyOC41MDY3Njc1NjAyOCwyODkxMzMuNzcxNDQxODIyMiwyNDU5NTguMjY3ODE3NzA1OTMsMjY0Mjc3Ljc3NjM5MTMxMjUsMzQ2MTM1LjQ1OTQxOTIxMjcsMjMwMy4zNjEzMDc4NTQ4NjMzLDQ0MDE5Ljk2MzU3NDMxNSwyMjE0MzQuMTA3NzYyODE1MTcsMzQyOS42NDkzNzMxMTc5NTIsNzk1Ni4yNzgwMjQ2MTY4Myw5MjM2OS40OTkyNTUyMzY4OCwxMTE3ODYuOTE1MTEzMDM0MDMsODE1MC4xNDQ2MjI5MDUxMTYsNDI4LjY0NDMyODYwODYyNTgKKzI3LFN1biAyMCBGZWIgMTEsMTUzNzIuNjE4ODUwMTYyNTcxLDYwNjcuMTQwNjY2OTc0NzcyLDQzNzMuNDkyMDIzNjgwNTYxLDIyMDc2LjMyNDcxOTI2NDUzNiw3OTc1LjQ2OTQ4Mjc2MTMxLDQ2MTkwMS4wNTk5NjMxMDIwNSwzNTgwOTUuNTA1NDA3OTEyMSwzMTc4ODMuOTk0MjM2MzA2NDYsMjQ4MTQ0Ljg2NTQ0MTkwMDg4LDE1NjM1OC43NjMxMjM4NDk3NiwxMzczNi44ODI1MDgwNzA2ODEsMTU5Mjc2Ljk0NTQwNTYwOTI0LDEwNjQwNS4yMTg0ODgzNTU0LDI4OTY2Ny45MzQxNjY4NTEyLDI0NTk2Ni45NTM3ODQxMDU3LDIwODA3Mi41MDE2MTk1NTc4MiwzODE4MjMuOTczODc2OTU0OSwzMjg0LjY4NjA5MjU2NTEwNDQsNjI5NzkuMzc2ODA1ODAxMSwyMjExMTMuOTA0MTM2MjgxOCw1MDY3LjU1NzY0MTg2MDU3OSwxMjE4OS41MjU2MTIwNjA5MTYsMTI3OTU3LjM1NDEyMTQxOTI1LDg1NTc5Ljk4MzI3MzkyMjU4LDYyMTguODMyODgzODg4NTI0LDM1OS43MjgyNDgyODM4ODM1CisyOCxNb24gMjEgRmViIDExLDE1NTUzLjM1MjY2OTA3MTI5OSw3Njk4LjAyODA1MzQxNzg3OSwzMzA1Ljc0MTk2NDY2OTAzMywyMDY2MC4zODA5NjUzOTM1OCw2MDAyLjIzNDg2MTIxMTM0Myw0MzM4MzkuNzQ1ODc0MTI3MiwyOTIwMTcuNzU1NzkyMDc4MiwyNjM0NzEuNDUyMjM4NDg5MzUsMjAxMjA3LjU2NjUzMzgwODcsMTIwOTQzLjI4OTU0MjQ5MzI0LDEwNDUwLjgwNTQ5MzAyMTQ4OCwxMjEzMTMuNjg2NzM0NjkxNCw5NTkyNi40MTk2MDYyOTQyNSwyNzEzMDAuNDkzNzAxOTY4NzUsMjMxMTg1Ljg2MTEzNTMwMiwxNjE0MDAuNTU4ODA4NjcwNCwzOTcwODIuNzAyMTUwMzg0MjYsNDY2MC43NzA2MDgwMzg2MTMsODgwNDIuODg0ODQxNjA5MzIsMjA3NzYxLjE5NTU0MjM2MTM1LDc0NjYuOTIyMjY5MDc0MTIxLDE4NTAxLjExNjIzNTcyNTUwNSwxNzA2MjcuNDIxMjAxMjE1NzcsNjU3NzAuOTMxODc2MjUyNDksNDc1OC45MDkzNTYxOTAwMTgsMjkxLjc4Njg3NjA5MjAzNzIzCisyOSxUdWUgMjIgRmViIDExLDE1Mzk0Ljk2MjQ5MDc5MjY1NCw5NDYzLjExODYxOTA4OTg4NCwyNDg0LjU2Mjk5ODA3NDg2OTUsMTg3MjYuMDU0NjI1MzAzNTQsNDUwMy40MzQ1NjQ3OTU1NDgsMzg1MTg4LjA4NTkzNDMwNTQ1LDIzMTAyOS40NDY1MjgxNzA1NSwyMTA5OTIuMzQ5MzA1MjIzMzIsMTU4NDkzLjYyNTc4Nzc0MDUyLDkyNzA4LjA4MTU4NDI1MDMyLDc5ODMuODA4MDI1ODg3OTA4LDkxOTE4Ljk1OTMzNzc4MjE3LDgxODk0LjMyNTIyNzUxMDg4LDIzOTM1OC4wNDg1MTYzNTEyLDIwNTM2Ni4zNDI5NTAyMjI2NCwxMjQwNzQuNjk3NjI1MjYzNDMsMzg5MDgxLjU3NjYzOTA0NjU0LDY1ODAuNjc1Nzg4Mjk1MiwxMTk4MzYuMTc4MTEzMjM1OSwxODQ2ODEuNTkwNzU3NjA4OTcsMTA5NzAuOTE1Njc5NDY2NjIxLDI3Nzc1LjExNzc4NzcyNjE0LDIxNzcwMC4yMTczMjg4NTU4Niw1MDg2MC4wMDAxMDY1MDg0MywzNjYxLjk2NTQ3ODM0OTg4NCwyMzAuNTU3NzM5MjU0MTE2NAorMzAsV2VkIDIzIEZlYiAxMSwxNDkyOS43MTMxMjE3OTU1MTgsMTEyNzAuMTAxMjU3Mzg1MzMzLDE4NjUuODM3OTY0NTIwNzcxLDE2NTA2LjA0MjEwMjQ2OTA5NSwzMzgzLjI0OTgxNjAzNjA3MjQsMzI2MDY1LjI3NDU3MzI5ODIsMTc4ODE3LjEyMzU4MjU4NTQyLDE2NDcwMC42OTgxMDkzNTQ2LDEyMjI5Mi44MDA4NDUzMzc2NSw3MDc3My42MTk3NTM1Njk2LDYxMzguODYwNDUyMjQxMTY4LDY5NjAwLjg0OTU2OTg5MDAxLDY2OTA3LjM3OTAxMDQwODI5LDIwMDg2Ny43NjMzOTg1MDEzMiwxNzM4MDguNjgzMjIwNDU4Niw5NDk5Ni44MjYxNDU0MTUwOCwzNjAyMjguNDYyNDQ1Mjc2ODUsOTI0MS44NTc4Nzg2MDg4OTgsMTU4MTA1Ljc1MDE3OTkyNDMsMTU2NTE5LjA5Njg1NjYxNzc4LDE2MDY0LjY1NzQ2NjU1NDE2MSw0MTE1NC42ODQ2MzU4MDUyOSwyNjM5OTMuNTg2MjU0MjY4OSwzOTYzMy4yNTAxMzM4MTA0NSwyODM4LjgyNjA1MjE0Nzc0MiwxNzguNzg1OTA4NzMzNTMwNjIKKzMxLFRodSAyNCBGZWIgMTEsMTQyMTkuMTY5ODUwNDg3NTMxLDEzMDEzLjkzNDYxMTkzNzI4NCwxNDA1LjQ0NTk3OTI1MzgyMTksMTQyMTEuMjU4NTIxMTc3ODAyLDI1NTMuNjA2NDM0MjczMzE1MiwyNjU2NDEuMjAxNDg4NTc5OSwxMzY0MDIuNjEzMjA4NjI4LDEyNjMwOC4zMDU4NDQ4NzcwOCw5MzA5Ny4zNTYyOTE1OTQwNiw1NDAyOC42OTAwMTAwOTI3NDUsNDc1OC4zMTIzODY2Mjk4MzcsNTI4NTguOTY5MTc4NDgxMTYsNTI4NTUuNTQ0NTgzNzIzOTYsMTYyMDA3LjA3MzQwNTE2MjA4LDE0MTQ0MC4yMTcxMjMzMzI3LDcyNzM4LjY1Mzc0MDI4NzMxLDMxNjk2Mi41MTYzMDQwNDQ2NCwxMjg5Ny44MzUxNDg1ODQ5MzgsMjAxMTA2LjI0MjM0NzAyOTI3LDEyNzYwMy4xODM4NDYwNTc4NywyMzQxOC41OTA2OTQyNzA1MTUsNjAwMTEuMTc1NTI0MTkzNCwzMDIyOTkuNjEwMjgzNDE0MywzMTE0Ny45MDg4MjkzNjQ3MjIsMjIxOS41NDY3MDA2NjA2ODA1LDEzNi45NjA0ODE1Mjc2OTI2NQorMzIsRnJpIDI1IEZlYiAxMSwxMzM0MS42NTYwNDE0Mjg4MzIsMTQ1ODcuNTMyNjk5MjY5Nzc2LDEwNjQuOTgxMDUxNzQ2OTA4MiwxMjAwMS42NzAyMjY1NDMyNDEsMTk0MS4yNDk0MjYzNDAwODM4LDIxMDE5Mi43MzI2NjU4MzksMTAzMTg2LjMwNzc2NzM1MjA5LDk1ODA5Ljg4OTEzNjk4ODIzLDcwMzUwLjU2MDk0MzU5MDE3LDQxMzgxLjA3MjgzODQ0OTQzLDM3MjAuOTM3NDg0NDk3NTY4LDQwMzc1LjU5MjM4ODgzMzQ5NSw0MDc1NC42NTI0MjAyMDM2LDEyNjgyNy40NDQ4NTk5MDg4OCwxMTE2OTAuNDE2MzQ0NTU0NDEsNTU4ODEuOTkzMjg2NDYyNzksMjY3MTAwLjk0NTU2NjYwMzcsMTc4NTguNDA2NzM2NzE5MTY3LDI0NTA5Ni40MjMzMTY1NDM0OSwxMDA5NjkuMzc3MTk5MzYyOTUsMzM5MjcuNjE0MTE0MjQ5MjgsODU3OTMuNzk1MzE3MTc1NzUsMzI1MjY0LjIwNjQ1NjU4NTg1LDI0NjkxLjgzMDA5Mjg5NjIxMywxNzUwLjk3NDc4NjU0MzM0NjcsMTA0LjIzODgyNTc1MTA1NjUxCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0RlbW9ncmFwaGljU0VJUkRpc2Vhc2VfUktfUmVmZXJlbmNlL0ZsdS93b21lbi9JXzIuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9EZW1vZ3JhcGhpY1NFSVJEaXNlYXNlX1JLX1JlZmVyZW5jZS9GbHUvd29tZW4vSV8yLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MWE1MTVjCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9EZW1vZ3JhcGhpY1NFSVJEaXNlYXNlX1JLX1JlZmVyZW5jZS9GbHUvd29tZW4vSV8yLmNzdgpAQCAtMCwwICsxLDMzIEBACitpdGVyYXRpb24sdGltZSxFRy1GUkctRzIxMDAwMSxFRy1GUkctRzIxMDAwMixFRy1GUkctRzIxMDAwMyxFRy1GUkctRzIxMDAwNCxFRy1GUkctRzIxMDAwNSxFRy1MT0UtRzI0MDAwMSxFRy1MT0UtRzI0MDAwMixFRy1MT0UtRzI0MDAwMyxFRy1MT0UtRzI0MDAwNCxFRy1MT0UtRzI0MDAwNSxFRy1MT0UtRzI0MDAwNixFRy1MT0UtRzI0MDAwNyxFRy1MT0UtRzI0MDAwOCxFRy1MT0UtRzI0MDAwOSxFRy1VUEUtRzI5MDAwMSxFRy1VUEUtRzI5MDAwMixFRy1VUEUtRzI5MDAwMyxFRy1VUEUtRzI5MDAwNCxFRy1VUEUtRzI5MDAwNSxFRy1VUEUtRzI5MDAwNixFRy1VUEUtRzI5MDAwNyxFRy1VUEUtRzI5MDAwOCxFRy1VUkctRzMwMDAwMSxFRy1VUkctRzMwMDAwMixFRy1VUkctRzMwMDAwMyxFRy1VUkctRzMwMDAwNAorMSxUdWUgMjUgSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsNDIwNzUuNDc1MTc2MDQ0OTQsMC4wLDAuMAorMixXZWQgMjYgSmFuIDExLDAuMTEyMDc1OTUzNDEwODI4MjQsNS42ODQ3NDIwNzE0NjU3MjhFLTcsMC4yMDU5MTQzODU4NTE0Njc5OCwwLjA4MDU1ODM4NzU4MjAwNTI0LDAuNTAwMDY2Njg2ODUxODA0NiwwLjE0NTk3ODA5NTM2MTExNjUsMS4yNzI5ODY2NzM1NTY5NDEsMC44Mzk5NjU4OTY4NTM4MzA3LDEuMDAxMDA1NzQ5NzgxNTk4MywyNC41Njg0NzM2MTQwNjI1OTcsMTguNTEyMjQ3MDMyNjE4NTEsMjguMjMyNTU4NTMyNzgwOTAzLDIuODAwMTA3MTQyNDMzMTUxMkUtNSw1LjU4NjY3MTQyNDUxODk4M0UtNSwwLjE2MDQyMzA2MzM5NjU0NjgzLDI2LjY1NDU0NDMxNTExMjg1LDAuMTU4MDkzNjE2ODAxMjQ3MzcsMy4xNjA2NDgyNDUxOTM3NTg0RS03LDIuMDg2NzQ5Nzc2NjA2MjAxNkUtNiwwLjE1NTI2OTM0NTIwNzc3OTQ2LDMuMzg1OTM3NDEzNjgxMDk4NkUtNywzLjUyNzQ3NDMzMjI3MjUzMzdFLTcsMi43NjE3ODEyNjI1NTYzNDZFLTYsMjg1NzYuMDMxMTMwNTE1MTMsMTQuMjgwNTA0Nzg2MTYzNTUzLDAuMDA5MjcwNTc2MTM0MjQzMzQzCiszLFRodSAyNyBKYW4gMTEsMS4yMDExNjE1NTk3NjQwMjksMS4wMDQxOTc3NTc5MTI0NzY1RS00LDIuMjE1MjUzNDMzMTkwMTk4NSwwLjg2NjM4NjgwMjk3Njc2NzMsNS4zODE1MjYwOTQ2NzcxNTQsMS41ODU4OTA2MjY2MDUxNTExLDEzLjczNjgzMTk3MTgyNzQ5Miw5LjA2NTI2MzI5MTAzNjgzMiwxMC43OTg3MDYxNjYzMDcxOTEsMjYyLjI0NTQ4ODU0NjkzNTg2LDE5Ny4zMzYxNDAwNzEwMzM1NSwzMDEuNTE1NTk1MDI2NzIyMSwwLjAwNDk0Nzg0MDU4NjMwNTMzNSwwLjAwOTg3MTk5ODcyMDg5MDAzMiwxLjczMzY4NjQ1NzA1MTA3NDQsMjg0LjYxMDMwMzI0MzcyLDEuNzA4MzAyNTgyNDc0OTYsNS41ODEzNDA4NjEwNzk3OThFLTUsMy42ODc2MTQ5MzY0NzUyNjU2RS00LDEuNjc3NzAyMTA1OTA0NzY1Miw1Ljk3OTU4MTQ4MTQ1MzA1NjRFLTUsNi4yMzExMTg2OTE1MDQ2NDRFLTUsNC44ODI4MjE1MjIyNTcwMTdFLTQsMjI4NjkuNzg3MTE0MjQwNjk1LDE1Mi4wOTE0OTQxMzQ4NDMzLDAuMDk5Mjg5MTYyMjEwMjI0ODUKKzQsRnJpIDI4IEphbiAxMSw0LjE3MDkxMTI0Mzc4MTIyNywwLjAwMTc0MTQ3MzUxMzYwNDU5MzYsNy44MjI2NjAwNzQ3NTc4OTg1LDMuMDQ5NDA1MjA4NTIxNTgxLDE5LjAyMDIyNDU5MDU1MjU0NCw1LjgxNjQ2NDU4ODk0ODIwNjUsNDkuMDMxMTAzNDU3ODgzNDI1LDMyLjM3NDI0NTM5NTE4NzI0NSwzOC40OTc0OTE5NzA1NjMwNiw4OTcuMDcyNzMwMzY4MjUzNyw2NzIuMjMxMDg4OTU5MDgxNiwxMDMzLjU1OTUxOTE1OTk5MjMsMC4wODU5MTE4Njc0OTE0OTUxMywwLjE3MTQzMDU1MTgzNjU4ODQsNi4yMjUyNTczNDM1MjEzODYsOTc0Ljg0MjUxNTY0NzAwMjksNi4xMzEwMjE2MTY2MDE3MzksOS42NzA1Mzk4OTAyOTk4MjRFLTQsMC4wMDY0MDU1MTg0NzUwMDQ2NTksNi4wMTk5OTYwOTI4MzA5MTMsMC4wMDEwMzYzNDUzNDEzMTk4OTg1LDAuMDAxMDgxMDU4MjI5MDkxNzA5NiwwLjAwODQ5Nzc1ODA0OTU5NTIwMiwyNjA2Mi4yNDk3NjA2NTI0MTYsNTE2LjY4NzIxOTc0MjQ4MjIsMC4zNDM4MDk3MDQ4Mzg5NDMyCis1LFNhdCAyOSBKYW4gMTEsOS41NTMzMjIxOTg4NjY3NTcsMC4wMTE4MDI0MDQ0MjUzMjg1MzQsMTguNjUwNjg3Mjk4Njg2OTEsNy4yMTAxNjU4NTU5MjA2MjYsNDUuNDMwNjM0MTM0NjE2Njk2LDE1LjA1NTkyNTg4NDQ5NTQ3LDExOS43MDgxNTc4OTgzMTU0OSw3OS4xMzczNzg2NDg1MDgsOTMuNzM1ODc5MDQ4MzU1NjcsMTk4MS45OTQ1NjIzNTM3NTIsMTQ3MS4xMDczNDI0NzEzNTA5LDIyOTUuNDg4MzE3MTc2MjEzNSwwLjU4NDE3MTQ3ODU3ODI3MTMsMS4xNjU5OTYyOTA3MDE0MzA1LDE1LjQwMjUzNDUyMDk4OTg4MywyMTYwLjcyOTA1MDEyOTc0MDcsMTUuMTUyNDQ1NzUzNDA4NzQyLDAuMDA2NTQwNTYyMDgwNjk1MTIxLDAuMDQzNjAyOTcxMjg1MTI4OTY2LDE0Ljg3MTQ3MjgyNDc2MzM5LDAuMDA3MDE0NDQxODY3NjQ2MTIsMC4wMDczMzcyNTQwNjQ4ODcyMzE1LDAuMDU4MTM0MjE1NjYyOTI4NjksMzcyMTcuMjk2MzI3Nzk5MjIsMTEyMy42MjkzNDUzMDYwNzUzLDAuNzgyMjIwNDc3NDQyNzkzOAorNixTdW4gMzAgSmFuIDExLDE4LjMzMjkzMDI3MTg0MjczNCwwLjA0ODQwODEwNzgwMTA5ODQsMzguMTc1MjU1NjYyNzk3MDYsMTQuNTY5MzUyMjA1NzcyODE2LDkzLjIzOTkwODM3MzQ0MzY3LDM0LjYyMTAzODQ2MDI2MTUxLDI1My45NTY5ODAxODE0OTI1LDE2OC4xOTQ2Nzg2NDM2NDA0LDE5OC4wNjE2NjgxMTYyMjMxMywzNTczLjIwOTk5MTM2NDY0LDI2MDYuNjUzMDI3NzE3NjYwMyw0MTc4LjA3OTg0ODkzNzE1NywyLjQxMjIzMzEwOTM0MTU5NTQsNC44MTc1MzkxNTI4ODkyMjEsMzMuMzE1MTY4NTAxNTU1NiwzOTE4LjI4NzY4NzkzNDMzNiwzMi43MjEzMTU0OTQ3OTQzMDQsMC4wMjY3MTk5MTcyMjU0NDgyMDUsMC4xODA0NjAxODQzMjc5NjI0NiwzMi4wOTM4OTE2NzEyODk1NCwwLjAyODcwMDEwODAxMjM4NTA4OCwwLjAzMDE5MTgxNzU5NTgxMTE5LDAuMjQzMDMxNzQxODY0MDk5NCw1NDc2Ni42NjAyODQ0NzA3NCwxOTY4LjM0MDYxNzMzMjIxMDcsMS40ODQ0NjIwNDAyNzA4NTEzCis3LE1vbiAzMSBKYW4gMTEsMzIuNjgwNTA5NDcyNjM2MDc1LDAuMTQ2Njk1MTYyMjMyNDQ2OCw3My40NjgxNzgzNjIyOTEzNywyNy42NDk0MjM5NjE0MDk2NCwxNzkuOTU0OTQzMTIxNjExNiw3NS4yMzI2MzQ2MjIwMDM5MSw1MDguODY4ODQxMTY2MTUyNiwzMzcuNzE2MTQxNDEwMTQyNSwzOTUuMTM4OTEzNzg3MzQzMTQsNTg2My45ODg0ODU3NjMwNDcsNDE2OC43NzE0ODYxNzAxLDY5NTEuMDQ1MDU2MDMzNTY5LDcuMzk0Mzk3ODQ1NDM1MDU1LDE0Ljc4MTk5MTg3Njg3OTU2Miw2OC4xNTc0NjE2NzI5OTkwNiw2NDg0LjYwMDEzODIxNzQ1NSw2Ni44MjY2NDI5NjYxMDk1OSwwLjA4MDQzMjc3MDI2OTQwNjc1LDAuNTU1MzQyODQzMDg4MDY1OCw2NS40OTkzMjEyODY1NTQzMywwLjA4NjYyNTY4MzM5NTQ2NTcxLDAuMDkyMDI3MzA5NDc2NTg2NzcsMC43NjA1MjIwOTY5MjM0ODE5LDc4MTEzLjY3OTU5MDE0MzE2LDMwOTQuNjQzMTM0MDQ0NzMxNiwyLjYxMDM4ODkzMzk5OTc5OAorOCxUdWUgMSBGZWIgMTEsNTYuMjM1MjY5Mjc1ODMyNjUsMC4zNjY4MDkwMzI4OTY2NjM0NSwxMzYuMDgzNDczNjM4MDI0ODMsNTAuNjIzODM5NDM1ODk0MzIsMzM0LjExNzc2MjU5MjA5MTEsMTU1LjMzODc0MzA2NTQ0Njg2LDk3OS44MDc1MjAyNTg0NDEsNjUxLjU3ODEyNjA0MDYxNjksNzU3Ljc2OTQ3MjAzOTAyMzMsOTIzNy44OTQxMzA3Nzc2NjgsNjM1My44NDAwMjA4MzgyNjgsMTExMjguMTI1NDEzNzI2OTYsMTguODA0MzU5MzM3NDYyMTMsMzcuNjQ1NjI0MDIxOTg3MTk2LDEzMy43NTgyMjYwMzg1Mjg2MiwxMDMxOC4xMzE1MjA4MDE0OTEsMTMwLjkzNjMwNzE5NjA5OTI1LDAuMTk5MTM3MDgzMTIzODQ5MTcsMS40MjA1MTM3MTExNDg0NTI3LDEyOC4yNDk0NTkxNDM1MjA3LDAuMjE1MzQ4MzY0OTgyNDQyNTYsMC4yMzIyMDAwNzcyNDAxMzc0LDEuOTkyMzg1MTY5OTA1MjA5NSwxMDgxNTkuOTc1MjM2MzkwNjcsNDYxNS40NDMxMDM2ODk3NDYsNC40MzQwNTE5NTIzNTY4MjcKKzksV2VkIDIgRmViIDExLDk0LjE4OTgyMTkwMTMyMTg4LDAuODA5Mjk0Mjc5MDY1MTk0NSwyNDIuODUzODI1ODM0MDQ2ODYsODkuNjUyNTMzNDUxODY1OCw1OTcuMjAzNjcyNzE3MzQ1LDMwNC45OTM5MTE1NzU5NzM2NCwxODEzLjAxNzQzODk1Mjk5NjEsMTIwOC4wNzk2MDcxMzE4MTY2LDEzOTcuMTQwNzc2NDU2MTU5NSwxNDI3MC4xOTQ1MjYxNjA5MSw5NDQ1LjU4MjgzOTcwODc1NywxNzQ3NS4zNDk2NjY4ODE5MTcsNDIuNDA3NDQzMDM3NzY3ODA2LDg1LjA1ODY2MDM5MzkzNDg5LDI1MS43ODAyNzE2NDA3MTY0MiwxNjEwNC45NTI1MTA4NzQ1MDYsMjQ2LjEwODM4MDYwMTg5OTAzLDAuNDMzNTg4NzEzNjE5ODk0NzYsMy4yMjg0MTU0MzgzMjQwODMzLDI0MC45MDA0ODM1ODc1MDMzNSwwLjQ3MTUxNTc2NDYxNTYyMDQ1LDAuNTE4NzQ2MjQ5OTA3MjA2Nyw0LjY2NTc1OTgyMzYwNzk0ODUsMTQ2OTI3LjA5Mjk0NDc4NTg3LDY2OTUuMjM2MDQ0MTE3Nzg3LDcuMzUxOTM0MjA3NTQ4Mjc0CisxMCxUaHUgMyBGZWIgMTEsMTUzLjU0MDQyMjM3MTg4NjczLDEuNjQzMjQ4MDA0MTQxNjcyLDQxNy40NDIxNDU0NzU3NDI2LDE1My41Nzk1NDM5MjEwNzczNywxMDI3LjI1NjI2MDQ0NzY2NCw1NzMuMDM1OTgwNDM5MjEzNCwzMjI5LjcxNzQ4MTI4NTYzMDYsMjE1Ni42MDUwODE0OTYxMSwyNDgwLjU4NTA3MzQwOTM1MiwyMTcyNy41MTk2MjI2NDI1MiwxMzc3Ny42MDIwODU3NDcyMDEsMjcwMjIuOTMyOTEzNzM2OTYsODguMzM2Njk4NjE3ODYxMjIsMTc3LjU4MTI3ODY2ODIwNTAyLDQ1NS44ODc3NjA0OTU5MTU2LDI0NzY3LjgyMzgzNTIwMDUyLDQ0NS4wMDIzNjcxMzg1MTY1LDAuODY2MzU3NDY2OTkwNjU4Nyw2Ljc4ODU1NDk0MTUyNjgxNCw0MzUuMjg0MjgyMjIzOTk2OSwwLjk0ODc1NDUxMTM4NjA4NzksMS4wNzAxMDI0MTI2NTAzMzkxLDEwLjE0NzcwNjczMjgzMzg1MiwxOTY3ODIuNTQwNDc0MzI1MjcsOTUxNi41MzYyNjEzMTQ1MzksMTEuOTAxOTQxMjU4NjQ5Njc1CisxMSxGcmkgNCBGZWIgMTEsMjQzLjY3MzM4OTY1NjA0OTE4LDMuMTUyMzE2MTM4MzE1MDE1LDY5Mi43ODAyMzc4NDg4NDM0LDI1NS4xODk0NDEwMTE3MDYyLDE3MDQuMzkxNjMwNzIyMTkyNSwxMDM5LjAyNzE3NjE3MTAxMyw1NTY2LjQ3MjcxODU4OTE1LDM3MjUuNjY4OTU1Njc0MTIyNiw0MjYxLjQyODkyMzc0MTAwOCwzMjU4OC4xOTI2NTU2ODE0NSwxOTY4OS4xNDM1NTk4ODE0MTcsNDExMDQuNDM5MjQxOTU1NDQsMTc0LjE1ODQxOTA4NTYzNDMsMzUwLjk5MTYyMDY2NjQ2MTksNzk4Ljc3NjUyOTc0NTgzOTYsMzc1MDMuMjg5NDM2MzY4MzcsNzc4LjY2NTc5NTY3MDcxMTEsMS42MzIxMjA2NzQ1NDQ3NDA1LDEzLjUyOTI1MDIwMDAyNjM4Miw3NjEuMDU3ODk5MDc1MTM0NywxLjgwMjAxMjc1NTAwMTgzOCwyLjA5MTc5OTExOTk0NTk4NTYsMjAuOTQ4Mzg0OTg3ODU1NzYsMjU5NTgxLjk3NzA3NzQxNTEzLDEzMjQwLjg3Mzg1NjM2NjQ3MiwxOC44MDM3MDgxMjY5ODMxNAorMTIsU2F0IDUgRmViIDExLDM3Ny4xNDAxOTkwMzQzNTg5LDUuODAzMzE0MjQ2OTY4Nzc5LDExMTMuMzQyNDc4ODM5NjQ2LDQxMi45MTQzMDI2OTI1NjczLDI3MzUuMjAyNzk5NDczOTY5LDE4MzAuOTUxMjE4MTkxMjEyMyw5MzMwLjYzMDg0OTY3MjAyMyw2MjYyLjAyNzU1NjMzMTY1NDUsNzExOS44MjEzODIwNzkwMzcsNDgwNTguMTI2MzI1NTExODYsMjc0NTguMzgyMjU3NDc1ODU2LDYxMzgzLjY3ODMzNDA0MDI1NCwzMjkuNTE3OTkwNDkwMTU2MjUsNjY1LjkxMTg0NzIzMzQ4NzYsMTM2Mi4zNTIzMTA2NTMzMTYyLDU1ODE3LjA3NzUzNzkzNjg0LDEzMjYuMzg5ODUyNTcwNzAxMSwyLjk0NzA5OTA1Njg2Njc2MDMsMjUuOTA4MzM4Njc5Mjg1NjA2LDEyOTUuMTUwNDU2ODI0MTYyOCwzLjI4MzYwNzU2MzQxMDg2NCwzLjkzNDMyMDIxMDEzODI2NDYsNDEuNTQxOTExMjc5NTE0NTMsMzM1NzQzLjU2NzgwNDQ2NTUsMTc5NTguNjYyMzMxMDg0ODQsMjkuMDAzOTg4OTQwNzg3NDc2CisxMyxTdW4gNiBGZWIgMTEsNTcwLjQ4NTU0NjI3OTIyOTgsMTAuMzQ5OTg0NjE2Mzc1MTg3LDE3MzUuODYzMzUwMjIwOTA0Nyw2NTIuOTQ3MDY3MjM4NzI5OSw0MjUyLjAxOTk2MTYyMDM5NCwzMTUxLjM0NDg0NTA1MjY2NTMsMTUyNzIuMDg5MjU2MjEwNjgyLDEwMjgyLjczMzY3MjEzNzksMTE2MTUuMTY5MTU2NDQ1ODE0LDY5NTQ2LjkzMDYwMTQ0Nzk0LDM3MTk5Ljg4NDM2MTA5OTc2NSw4OTgxMy40ODI3ODkxNjkwOCw2MDMuMjQyNzU3OTk5ODY2MSwxMjIyLjY1ODE5MjIzNTEzODEsMjI3Mi4yMDExNzEzMzkyNjg1LDgxNTE2LjIyNDU0NDUyMDY1LDIyMDkuODA1NTc4MzQwMjg0Nyw1LjE1MjE4NTQ5MzgxNDI4Niw0OC4wNjkxODg0MDIwNTc3NywyMTU1LjExNzU4MzE1MDk1NTQsNS43OTczNTgxODg4NjEwNTMsNy4xODU5ODU0MDE2OTE2MDksNzkuNzI2NDE1OTk0MDc3MDQsNDIzMzE1LjU4NDEzMzEzOTA1LDIzNjI2LjEzMjYwOTk4NzMsNDMuNzA4OTc1ODgzNDUyNjQKKzE0LE1vbiA3IEZlYiAxMSw4NDQuNjg1NzcwNTk1NTY4NiwxNy45ODUwMzg2Mjk3NjE0NzMsMjYyNS40MTU0MjYxNDQ4MzU3LDEwMTEuMjk0MjAzNTI3MDAxNyw2Mzk4Ljc1MTQ2MjA5ODQyMiw1MzEzLjc4NDc5MTUxNTkzMSwyNDQ2MS40OTMyODY3NzgzOTcsMTY1MzUuMzQxODQ5MTQxNjksMTg1NDIuMjM0NzI3OTg0NzM0LDk4NTI1LjI5NDU3MDYzODgxLDQ4NzE3LjU5Mjg0MzY4MDkyNiwxMjg0MDcuMTA2MjY0NjgyODIsMTA3My43NTc0MTk1NDkzNzcxLDIxODMuMzA3OTcwMzg4MDE0NCwzNzE2LjYzNDM4NTU2NjA2MSwxMTY1NjEuNTM1MzA4NDUxNDUsMzYxMS42NzgwNjUxODIyODYsOC43NzM5NjMxNzc5NjE5NjUsODYuODY0NjQxOTY4MTYyMTIsMzUxNi41NTQ0ODc5MjEzNjg1LDkuOTc3NTgzMDI0NjQxMzM3LDEyLjgxOTAxOTY5NDAzMDQ2OCwxNDguODI1MjI4MTc2ODUxNDUsNTE3MTY4LjI1NjA4OTM0NTQ0LDI5OTkzLjc2ODkxMzMzNzg5NSw2NC4zNTk3NTU1MzUzNTk3MgorMTUsVHVlIDggRmViIDExLDEyMjQuODg1NjUwMTA5ODc1LDMwLjU2MjM4MDY4NzM5NzY1MywzODQzLjU1MDg0ODgxMDY5NjYsMTUzNS4yMzIxOTgwODc0MDEyLDkyOTUuMjczNzE2NTg4MDM5LDg3OTIuNTQxMzY0NTc0MTA4LDM4MzU4LjY1MzcyMzk0ODQ5LDI2MDU4LjQ1NjQ4MDc1MzY5NSwyODk3OC4xNDEwOTExNzg3NTcsMTM2MjA0LjkyMDkzNTE5MDE3LDYxMzYwLjIwMjE1OTk2NzQ0LDE3ODcyNi44NTQ5MjkyMjYxMywxODYzLjg5OTMzOTIzNjgwOTUsMzgwMy43MTA1NjA0NTY4NTQsNTk3MC45NjY2ODIxNjI3ODgsMTYyNjk5Ljk3Mjk0NzQ0NDcsNTgwMC41MTU1NTYzNTE4NTcsMTQuNjExNjAwMTY0NDUwNzk0LDE1My40NDkyMzM0NjQyNDc5OCw1NjM1LjAyMjU1NTY0MzY5MiwxNi44MDUyNzAzNDE1NTA4NywyMi40MTk5MTIzMDc4NTg1MywyNzEuMjE0MjYyNzMzMDM0NzMsNjA4ODUzLjE3OTYwMzE3MzMsMzY1NjIuNzU3NTQ5ODE0NzEsOTIuNTE5OTg1MTAwNzY0OTcKKzE2LFdlZCA5IEZlYiAxMSwxNzM5LjA2ODM5MTUyMTU2OTgsNTAuOTE1MjU3MzAzMTI0ODgsNTQyNS41OTE1MDc4NTUxNCwyMjgzLjEzMzkxNDMzMDg2ODcsMTI5NzUuOTMwMjgyMDAxNjkzLDE0Mjg2LjA2NTc0NDYyNzEzLDU4ODMxLjk2MjYyODI2MDY4NCw0MDIyMC41NjMzOTQyMDc2MjQsNDQyOTAuMTczNjk2MTAyMDIsMTgzMDEwLjU4NjA2Nzk1NDQzLDczOTcyLjc3MDcwMTU2NTM2LDI0MTA0Ny4wNzgxMjY0NjU2LDMxNjAuNjQ3NzEyMDY1NjIxNCw2NDc3LjUzMzg3MjcxOTE0NjUsOTQyNi4xNzc1MzY0MjMzMTQsMjIwODE4LjMxODk4OTY2MDYyLDkxNjEuMjc5MjgxMDQ0MTQ2LDIzLjg1OTQ4MzI2ODA1NTcyNiwyNjUuNzE5ODA4NTA0MzMxNjQsODg3MS40NTM4NjMzMTYyNDYsMjcuNzc3OTU0MzkxNjcxOTMsMzguNTUwNDQ2MTYwNjg4NTIsNDgzLjg3MjMyOTc3NzIyNjMsNjg3NzAwLjE5NDUzMjEwOTIsNDI2MTkuNjUxNDY1NTI0OTcsMTI5LjY1Mjk2MDg3MjA2MTUzCisxNyxUaHUgMTAgRmViIDExLDI0MTUuNDY0NTUwMjQxOTU1LDgzLjMwNDYzNzYyNjE4NTU3LDczNDguNDIzMDQ4MDU4MjU5LDMzMjEuMjg3NTU5MTg3OTA4OCwxNzMxMi44Nzk3OTg1ODQ1OTYsMjI3OTEuMTE0NTkwMzk5MTEzLDg4MDYxLjg0NTA3OTAyNzQxLDYwNjk2LjA5ODI4NTc1MTUxLDY2MDUzLjU5MDk2Mjc2NDI3LDIzNzkxNS45MDAzMzkzNDAzLDg1MDQ1Ljg0NjUxODc4MDAyLDMxMzMzNS40OTcwOTAwNTIzNSw1MjM4Ljg4MDQ5NjM3NjQ2LDEwNzkyLjU4NTMxMDg0ODU0MywxNDYxOS4wNzkwMTE1NDE1MSwyOTAwNzMuMTE5ODQ5Njg2NDUsMTQyMzEuNzc2MDk5NjM1MjY2LDM4LjI4MDkyODMxNjA5NjY4NCw0NTIuMDMxNzgwMzQ1MTA3NCwxMzcxOC4wMzQ3NTEwMDI2MTcsNDUuMTU5NjY1NDY0NzQ5NzcsNjUuMzE1MDk1NzE3MjE4MjQsODQ3LjAwNzIxMzM2NDU2MzQsNzQzMjQyLjIzNTk5ODE4MTcsNDczNzguNTQ1MjU1MTQ5MDEsMTc2Ljc5ODI1NTc1ODU3NTUKKzE4LEZyaSAxMSBGZWIgMTEsMzI3OC4yNzc4OTExNDc4NzQ1LDEzNC4wMDU1MzgwMTU5NSw5NDk3Ljc4NjY2NDYxMDIwMyw0NzE1LjQwOTAyNDM2MTE4OCwyMTk1Ny4wODMyNjc2MjA3MiwzNTY2Ni4zNjYwNjkzMTAyLDEyODIwNy42MTU2NDQ3NTUzNSw4OTI5NC41NzIzNTE4NDk3Myw5NTc4OS42MjMzNjQ0NzYzMSwyOTc4MzUuNzEyNzUyMDI0Niw5MzA2OS45ODE1NDA3NTcwMywzOTA0MzkuMDI3OTk1NzE3OTQsODQ4Mi40MzQ5NTI3MjIwOTEsMTc1ODkuMjE1NzMwMzcxMzgzLDIyMjUyLjA0OTUzMzQ5MzM4NCwzNjcwMDYuOTQ1NDIwMTQxMSwyMTczNy43NDI5NjE3MDgxMiw2MC40NDE3NTgxNzMyNzEzMyw3NTYuNjEzMzgwOTE4MjEsMjA4MTMuMTU5MzAzNDQzMTI4LDcyLjMzNDI5Njc0ODA3Mzc4LDEwOS4yMjYyNTE4NDY4MDcwMywxNDU2Ljg0MzczNjA2MjY1OSw3NjgxMTcuODgzMzY2MjY4Miw1MDE5Mi41MDY0ODI4NjQzMSwyMzQuMTU1MTk4MDgyNDA1MTUKKzE5LFNhdCAxMiBGZWIgMTEsNDM0Mi4zMjY5MDI3NjExMzEsMjEyLjA1ODQzNzcxODU3NDIzLDExNjU2Ljk2MTAzNDU5OTkzNSw2NTE2LjI2MDE2MDA5MDMzNiwyNjM1My4yMDI1NzU3MzYzLDU0NjUxLjc1NTU4NjQxNTE2NSwxODA3NDguMDMwNzI4NzE3MjIsMTI3NTYxLjM4Mjc5ODcyNjg1LDEzNDQ2MC40NzgwMzM4NzA5LDM1NzQ4MC45NjEwMzkyMjY5LDk2OTcxLjgwMDQwNDg2MjA2LDQ2NDE3Ny4xMTI3NDY5NDAyLDEzMzg5LjcyMjkyOTUxNzc0LDI4MDAwLjAxNTg1MTU4ODg1OCwzMzE4Ny4xNjE4NzgxOTE0NSw0NDUxNzEuNTA2NjQzODM0OCwzMjYxOS43OTEwODA2MTgwOCw5NC4wMzI0NzcxNzUzNTY1NiwxMjQ3LjQzNzU3MTM5MDI4ODQsMzA5MzEuMzkzNjk5NTk1MzgsMTE0LjMxNzQ4NTM0MDk4OTUzLDE4MC41MzgyMzYyNzQ3ODUwMiwyNDY0LjI2NjMyNTIxNDUyMDMsNzYwMTI3LjY0ODMzMTM5ODYsNTA3NDEuNDM0NDQxOTIyMDY1LDMwMC42MzgzODAxODk3MTczCisyMCxTdW4gMTMgRmViIDExLDU2MDcuNTk2Mjc2NzkyNzk0LDMzMC4xOTQ4MjMyNjM1MjcwNCwxMzUzOC43NjMyNzMyODkxMiw4NzQwLjY2MDUwODUyNjg0NiwyOTg2Mi4wMDYwODIxMTIxMzcsODE3NzkuOTgwODQ0ODY2NTQsMjQ1NDk1LjY2NTc3OTA2NDI2LDE3NjA5Ny41MTgzMjc4OTQyNywxODE3MzMuMTMxNDcwMzI2NTQsNDEwMDM2LjA0NzA5NjUwNTQ3LDk2NDE1LjQ4NTk5MDg4MTIsNTI0ODM2LjQxNzQ4ODUwOTIsMjA1MzkuNjY1ODYzMjQ5NCw0MzQyNi4zNDc0MTI1NDQ2OSw0ODM4OC42MzU2NTkzMjI5Niw1MTU3OTkuMTgxMDM3NDc5NCw0ODAzOC4zNjY4NDI5NjAxOSwxNDQuMzIwODE1ODE1NDE5NDUsMjAyNy41Njg3MzkxNDgwNTk0LDQ0OTI1LjE3MzYxMDQ4NTAzNSwxNzguNTExMzc1MTQ0MDQ4NzQsMjk1LjMxNjg3OTg1NzU3NDM1LDQxMDEuMjQ0MjExMjA1Njc5LDcyMjQ1Ny41OTgzOTEyNzQ2LDQ5MTAyLjEwOTE5OTAyNzE0LDM3My40NTgzODgyNDYwNjA4NQorMjEsTW9uIDE0IEZlYiAxMSw3MDU0LjM4OTc3NTcwNTU1MSw1MDUuNzQwMzM2MjYxNTkxLDE0ODYxLjQxNzg1NTA4Mjk0NywxMTM1MC40MzkzNjAxODMwNjcsMzE5NTQuMDY1MTUxMzg5MTAzLDExOTA1Mi4yNjc1NTgwMDEzNywzMTk0NjUuMzY4MTg5NzUzOTYsMjMzNjMxLjg1NjgyNTgxNzgsMjM1MTcwLjA3NTU2NjY3MTUsNDQ4NjU1LjcxMzcwMDE1NCw5MTgyOC4wODU4MDk0Mjc2Niw1NjM3NzIuNjA3NTk5NTg4MSwzMDQ3My45OTcxNTQ5NDAyMTQsNjUzNTcuMTU5OTUxNDk0NTEsNjg3NTkuMTk4NDg4ODEzNjQsNTY5NjUwLjg4MDM3OTcxMTksNjkzMTMuNjU0MTAwNzY2NTcsMjE4LjcyODMzNzk5MDAyNTYsMzI1MC4wMTA5OTQ2MTI0MjksNjM1NzAuODcwMDQwNzY1NDEsMjc1LjczOTI2NzE0Nzk0NjUsNDc4LjQ2MzUxOTQzODk0Njk1LDY3MTMuOTA5NDYwMTA3NzgsNjYyMTgyLjI2NTI4ODY3OTIsNDU2NzkuMTY1Mjg5OTQ5NTUsNDQ3Ljc4MzMxNjg0MDkwMTgKKzIyLFR1ZSAxNSBGZWIgMTEsODY0Mi45ODI3NzYwODE4Nyw3NjEuNjg3NzYyNjA3NDMyMywxNTQzOS4wNDMzNTgxOTM4NTQsMTQyNDAuNzI5MDMxOTU4NjYzLDMyMzgwLjQ0Njg5NjY5OTI0NiwxNjc4NTAuNjI5MzIyODI0NiwzOTYzMDUuODYzNjg5NDIxMTUsMjk2Mjg3LjYzNjU5MTQwMzksMjg5ODkzLjQ2MjE5MzIwMTY1LDQ2ODM1Mi41NjM1NTMzNDczLDg0MTc4Ljk2OTkwODk0NzgxLDU3NjA1My45OTI1NzUzODU3LDQzNDg1LjYyNzIzNzczODA5LDk0OTgzLjkwMjcwOTA4Mjc5LDk0ODY5LjQ4MjkxODQzOTIsNTk5NTc3LjA0MTY1ODM2NTIsOTc3OTguMjUwOTc3NjQ3LDMyNy43NTE2NDYyOTAyNzYzNyw1MTM5LjU5MzYyOTYwMTg4NSw4NzMyMy4yNTAxMTQxNjkwNyw0MjEuOTI3Njc1OTAyNjg5MDMsNzY4LjYyNjUxMjA4OTI1NTQsMTA4MDYuOTc3NzExODA4Niw1ODc5OTcuNDE3NzU1NzkwOCw0MTA1Mi44MTE2NTYzMjYzOSw1MTYuODc1ODgwNjEyNTg0OQorMjMsV2VkIDE2IEZlYiAxMSwxMDMxNC43MzExMjQ4OTMzMDYsMTEyNi43NzE1OTM2MzkyNzgsMTUyMzQuOTE1MjgxMDkyMDM3LDE3MjM2LjU4MjM5NjcyNzEyLDMxMjIzLjI5ODU3MzEzMDA4LDIyNzkyMC4zMzkwNDY0MDg2LDQ2Njc4MS44ODUzNjg1MTQxNywzNTc0MzIuNDI5NDA2MjIzNDcsMzM5MDc3LjI1MjEzNTAzNjA1LDQ2NzMxOC44NTg5Nzg4MTAyNSw3NDY1NS42ODAyMzYyOTgxLDU2MTY5Mi40MTEyMjI1NTM1LDU5Mjg4Ljc0MzAyOTY5OTYxLDEzMjQ3OC4xNTIzNzg1NjA2NiwxMjY0OTEuMTI4MDA4NjQ0NTYsNjAyNDkwLjUzOTkzNDYxNTMsMTM0NTM2LjYzNzQzMTcyODQyLDQ4NS45NjgyNjU5NTM5MDY1NSw4MDE1LjU1MzA3NTYwMzYzMSwxMTU5MDQuMTg1MTI3NDE0NDQsNjQwLjE4MTIwMTI1NzI1NjEsMTIyNC42ODkwODM5NzA3Njk2LDE3MDc5LjM3MjY2ODU0NTk2Miw1MDgxOTguNTk5NTA4MzMwMywzNTgyMS45NTg1NTAxMzc0NzUsNTcyLjgzODc1NjM5MzQyNzQKKzI0LFRodSAxNyBGZWIgMTEsMTE5OTkuMTc3NDA5ODM0NzAzLDE2MzUuMzA5NzQ4NTQzODkxNCwxNDM1NS4yMTQ2NDIxMjEzMTgsMjAxMTIuNjY2MDE1NTc0MDU3LDI4ODIxLjMzMTY4ODM0NjUzOCwyOTYzOTUuOTQ5NTU0OTE4NCw1MjA5NTMuMTQ1NDgwOTU2OCw0MDg4OTYuMjI1MDUwMTAxNCwzNzU2NTcuNDQ1MDE1OTkwMSw0NDcxODYuOTAxNjc4NTU2NSw2NDM4MC42MDM3MzAxNzQ0MTUsNTI1MDcxLjE2MTE1MjQyOTYsNzY3NTYuMjU3OTgxODUyNjMsMTc2MjI4Ljc3ODc2NzYxNzU2LDE2MjE0OS4xNTM2ODE0MzIxNiw1Nzk5NTMuODYzMzgzMzcyOCwxNzk4MDcuMDIwNDk0ODcxMTMsNzEzLjgxOTg0ODY5MzA2NjIsMTIzMjQuMTI5NTU4MTMzODgsMTQ3OTI0LjcxNTgzMDkzODg2LDk2NC4zNzYyOTUyODA2OTM3LDE5MzYuNDc2MzM4Njg2Nzc5MiwyNjQ2MS4zMTE1NjAxNDU1MzIsNDI5NDIxLjY3NTIwNjkyMzUsMzA0OTQuMDIwNDY3OTIzODIsNjA4LjM4ODA3ODczMDY4NjkKKzI1LEZyaSAxOCBGZWIgMTEsMTM2MjAuMjE3MTM3NTM3MzA3LDIzMjQuOTk2MjUyMTM1NDA2NCwxMjk5NC41NzEyMTQ3NzQ3NDUsMjI2MjQuMDg4NTQwOTk0NjUzLDI1NjI5LjgwMzQ1MDM4NjYyNiwzNjcyMjUuNTA0NDA1NDUyMSw1NTEwODIuNjI0NzQ0NTAwOCw0NDMxNzUuNTIzMjkyNzY3NCwzOTQ0NTEuNzc1MTU3MjEwMzYsNDEyMTYxLjA2OTc4MTA0NTYsNTQyNDIuMzY2OTk5OTIxMzk2LDQ3MzA3OS44NTM3OTQ0MTU5NSw5Mzg4NS4xOTcwOTIxMzI0NCwyMjIzMjUuNTA0NDQ5MTE1OSwxOTg4MjUuODE1NjU1NjEyNyw1MzcxNTkuODc0ODEzMDg3NCwyMzI0NjQuODAyODQ0ODAwODQsMTAzOS45MDcwNDM4MDYwNzY3LDE4NjY5LjA5NTkyNzYxNjA5NCwxODA2NTMuNTQyNDgyMDg1MDMsMTQ0NC4xNzE4MDg4NTEyODczLDMwMzkuNzIzNDg0OTAyOTAxLDQwMTExLjA5NTA0OTc3NzE2LDM1NjIwNS41MDI3ODk4MzkxLDI1NDM1LjczNjM5MjE2MTkwMyw2MTguODc2OTYyMDkzOTU4NgorMjYsU2F0IDE5IEZlYiAxMSwxNTEwMS4wNTQ3NDc2Mzg0MTYsMzIzMi4wODY5OTI3NzI2NzMsMTEzNzAuMjQ5NjkzOTE0Nzk1LDI0NTQ1LjUzMzkyOTc4MDA3NSwyMjA5Mi4wNTI5NDc5MTkyMTYsNDMxNzU1LjMxOTEyMjQ2MzIzLDU1Mzk1My45MTg5MTYzNzgsNDU1NzQ1Ljc3OTc3MjY5NDg2LDM5MzY5MS40MDQxMzA0NDg2LDM2NzYyNC4wMjQ0MTg1NDEwNiw0NDg0MS4yOTEwOTE0MzU0MSw0MTMwNjAuNzc0NDAxOTQxNTcsMTA4MTg4LjAxNDg2NDU1MzU1LDI2NDg4OC45NDcwMDY2OTQ0LDIzMjE4Ni43MDYxODM4MjE4LDQ4MTA4Ni43NjQ1OTA1OTE5NSwyODkzMjQuODQ1NDE5OTkzNiwxNTA0LjA2NzA4OTUxOTI0NTIsMjc4MzIuMTY2MDUyNjA2MDI2LDIxMDI0NC44NzE1MTU0NjI2LDIxNTIuMTg0MzAxNjAzNzAzLDQ3MzYuODQ5NDMxNDM3NTI2LDU5MzM2LjI1NTgzNjQ3NTkyNCwyOTExMjQuMjY4Njk2MDA2LDIwODcxLjE4NDY1MTY0MDY3Nyw2MDMuNjg3MDgyMzYzMTk5CisyNyxTdW4gMjAgRmViIDExLDE2MzY4LjU4MTUxOTIwNTk1Niw0Mzg0LjE4MDAzODkwNDkyNiw5NjcyLjc4MTc2NjcwNzQwMSwyNTcxMC44MjE4MzY2MTczODYsMTg1NjEuNjk4NjYwNTAzNzQsNDgwNzc3LjczMDQ2NjQyOTMsNTMxNDI5LjE4NDk5Mjc1NTQsNDQ2Mjc3LjM1MDkyODAyMTEzLDM3NTIwNi44MTc1NTA5NjAxLDMxODgzOS40NjEzMzI5MDcyNiwzNjUxMS42Mjk2OTUzNDEzOSwzNTEzMjYuNjk1NzIwNTcwOCwxMTc0NDUuNjYzMjU3OTIxMDEsMjk3NTIxLjAzMzYyNTQ0NDIsMjU3NTMzLjcyMjQ4NDgzOTY0LDQxODcxMC41OTcxOTk4MjU4LDM0NTAyMS42NjgxNTYyMzQ4NCwyMTYxLjY1MjgwNTM4MDIzODUsNDA3NzAuOTE1NjE1NzI3OTE0LDIzMjU4NC4xMTA3MzMyMTQ3LDMxOTQuNTE0MzEzMzE4OTQ1LDczMjUuNTg3MzgzMjAxMzIzLDg1Mzk3LjM4MzE3MzQ2NTM2LDIzNTE5OC42MTc1NjYyMzc2MywxNjkwNS44NDg2NjI5MDQ0NzUsNTY2LjI0MTY3OTkxNzY1ODUKKzI4LE1vbiAyMSBGZWIgMTEsMTczNTguMjkzMDA2NTgzMTk3LDU3OTEuNDg5Nzg1MzQ3NDQ5NSw4MDQyLjEyNzg5NDk1OTYxNywyNjA0MS44MDEzMjc0NDk1OSwxNTI3Ni45NDMyMjM1NDkyMTUsNTA3MzA1LjQ1NjUwNTY4MTk3LDQ4OTE4NC44NjgxODYxNDg3LDQxODIxNC4zMDA0OTc4NTk3LDM0MzM2MS40NzQ0NTYyNDgxLDI3MDExMi4wNzQ1Njk5NzgzNCwyOTM4MC40Mzk4MTU0MzE3NDIsMjkyNDcwLjA5MDEzMzIyMTMsMTIwNDM4LjQyMzIwNjk1MDA3LDMxNTMzNi43OTc2NzQ4MSwyNzExOTUuMzU4NzIyMzQ2MTQsMzU1ODE2LjQyODg4MDcxOTM1LDM5Mjc1MC45NDI0NDYzMTE5LDMwODkuMTg4MjUwNTQ2MzI5NSw1ODU2Ny41OTIwMzY0OTMxOTUsMjQ0NDg5LjA2MDg3Mjc4MTYsNDcyNS43MTAwMzY1NjczMzksMTEyMzUuOTYxMzU1MzAzNjE4LDExOTE0MC41NDI2NTIzMDgzMywxODgzNzQuMzYwMTEwMjMzNzQsMTM1NTkuNjMwNjIwNDQ1LDUxMi43MDYzNzM0OTk4NjIzCisyOSxUdWUgMjIgRmViIDExLDE4MDIxLjA4NTE3NjMzMzc0NSw3NDM5LjE2NTUzMjYzODM5MSw2NTY0LjY5MTI2MTI2Njg4NzUsMjU1NTguMzM2ODQ2NzQ5NDQ3LDEyMzY5LjU2NDk2NTA2NzU4LDUwODY2OS4xMjExOTEzOTIzLDQzNDU3NS4zNjY4Nzc2MjAxLDM3NzIxMC42MTMyNzQwNTMsMzAzNDg0LjYwOTU0ODU4OTMsMjI0NDU2LjE2ODkzNzA2MDI4LDIzNDMzLjY4NDM5Nzc5ODExNSwyMzkzMDUuMDQ0ODUwMTQzNSwxMTcyNDkuOTA2ODE5MTA3NzIsMzE2NDk0Ljk2OTc3ODA0NCwyNzE2NjYuNTAwNzc0MjA3MjMsMjk2NTA2LjI4NDEwNDA1NTk2LDQyNTkyNC41MzUxODg2ODc5Nyw0MzkxLjYwMjAzMDAzODU2Niw4MjI5NC4xMjA1NTQ0MDc3NCwyNDQ2ODAuNDI3ODUzMTE5OSw2OTY5LjYxMTQwNjI5MzE5NjUsMTcwNzQuMjk1MDM4NzI0ODgsMTYwNDQzLjk4NDU3MTYwMDIyLDE0OTk0OC4wODkyOTMyNzI5MywxMDc5OC4yMjAxMzU0MTE1NTEsNDUwLjE1NzE1Njc1NzQ0ODkKKzMwLFdlZCAyMyBGZWIgMTEsMTgzMzAuOTYyNDc3MTkzOTg1LDkyODMuNjI3NTAxODM1NTE3LDUyODIuMDI4MzQyMjgyNzUzLDI0MzY2LjUwODQwNDExOTc2LDk4ODkuNTQ2NzEwMDM1OTksNDg2ODg0LjAxNTc3NDcxOTA3LDM3NDY5My4xMjQzNDI0NDk2NSwzMjkzNjIuMzcwMDgyNjc4LDI2MDU0Mi4xNzI4NjgxNTI2LDE4MzYzOC42NTE4NzM4OTAyOCwxODU3My43NDY3MTg4NTg1MiwxOTMxNjMuNjQ1OTYyMjU3LDEwOTA0MC45MDMwMzgzNzEyLDMwMjQzMC4xMTA1NjUwMjAxLDI1OTg5NS41NzUwNzY2MzczOCwyNDMyMjguMDg2OTQxMzAxNzQsNDQwMTEzLjQxNjMxMDM1MTYsNjIxMC45NzEyODY4NDE5NDcsMTEyNzUzLjM2ODg1MzI1Mzg3LDIzNDAxNy45NzAyMTMyODQ1LDEwMjQ3LjQ0MjAzMTk0Nzg0OSwyNTY2OC4wNDczMzA1OTkzLDIwNzU3Ni4xNjA2NjQ5MTcxLDExODg5Mi44MzY3MTIwODE2Nyw4NTU4LjEwMzk5OTI0NDc5NSwzODUuMDI4MDI1MTM5Nzc3NgorMzEsVGh1IDI0IEZlYiAxMSwxODI5MC41MzE4OTY3MDg0MDIsMTEyNTQuNDAyMjIwMTYxMzY0LDQyMDMuNTIyNDU1MDg3ODMyLDIyNjI5Ljg4OTY4NjMzODUzNCw3ODMyLjIxNDE5NjM5OTQsNDQ3MzYxLjMxNjExOTAyOTA3LDMxNTE5MC42ODg0MzY3NjQxLDI3OTkyNi4xNzIxMDA1ODY0NywyMTgzODUuMjI0MzQyNTIyNjUsMTQ4NDE5LjE1MTYxMTA0NjksMTQ2NjIuNjYzNDg4MTM5MzQsMTU0MzEyLjU2MzIyMTE4NDI1LDk3NTE4LjcyMTU2MjIzODMxLDI3Njg4MS4yNTAzMzgxMzI0LDIzODY3Ni4wMTQwMjQyNDc4OCwxOTcwODIuMTY3OTkxNzQxNSw0MzQzMDMuNTk5Mjc0MzY0OSw4NzM2LjA0NDQ1NzM2OTc0NCwxNTAwNzIuNjAxMjYwMDU3NzcsMjE0OTcwLjUyMzE1NzQ5NjYsMTUwMTMuNjYwMDA0Njg2MDksMzgwOTUuNzgxNzI2MTc2NDksMjU2NzU1LjkwNDY4ODY2ODE4LDk0MDgwLjY5MTY5OTEyMjk4LDY3NjQuMjQ0MjE4MTU3ODYzLDMyMi4yMzUxOTY1NjA2MDQ0NAorMzIsRnJpIDI1IEZlYiAxMSwxNzkzMS4xMzMyOTQ5MTE4OCwxMzI2MC4yMzQ3Mzk5NjY2ODUsMzMxOC40MjU5MDQwMzYxMTQsMjA1MzQuNDQ1MzQ0MzAzMDU4LDYxNjEuMjg1ODA3NTc4NTE4LDM5NjkwNC4yNDY3NjM0OTQ2LDI1OTg4Ny4yODY1ODg0ODAyNiwyMzI3MjMuMjU5NzI2NTMyMDcsMTc5NTQzLjU2NjE3MTYxMzMsMTE4ODQ3LjEyMTMzOTk0ODg5LDExNTUxLjE3MjQyMjQyNjE4LDEyMjM0OC41NDQ0MjcwNjc4OSw4NDQxMi41MjY0MDg5NDc4OSwyNDQ0NTEuOTI1MTk3MjEyNCwyMTE2MDIuMTQxNDQ4MDQzMDIsMTU4MjExLjU5MTU1Nzg4MzQyLDQxMDg2OC41NDc4MTMzMDA0LDEyMjEwLjQxMzk1Mjk5ODE3NywxOTMxOTAuMzM1OTgxODU5ODgsMTkwNzEwLjk1MjU2NDkwNzg0LDIxODk3LjQ2NTIzNDA1NDIxNiw1NTY3MC45MDUyNjc0ODIzNzYsMzAyMzU4Ljk5MTE3MDAxNTU0LDc0NDE5LjM3NTc0NTYxMTY0LDUzNDEuMzEzOTA5MDQ1OTE1LDI2NC45NTMwMTUwNzQ2NjA2CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0RlbW9ncmFwaGljU0VJUkRpc2Vhc2VfUktfUmVmZXJlbmNlL0ZsdS93b21lbi9JbmNpZGVuY2VfMi5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0RlbW9ncmFwaGljU0VJUkRpc2Vhc2VfUktfUmVmZXJlbmNlL0ZsdS93b21lbi9JbmNpZGVuY2VfMi5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmFiYTQwNgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvRGVtb2dyYXBoaWNTRUlSRGlzZWFzZV9SS19SZWZlcmVuY2UvRmx1L3dvbWVuL0luY2lkZW5jZV8yLmNzdgpAQCAtMCwwICsxLDMzIEBACitpdGVyYXRpb24sdGltZSxFRy1GUkctRzIxMDAwMSxFRy1GUkctRzIxMDAwMixFRy1GUkctRzIxMDAwMyxFRy1GUkctRzIxMDAwNCxFRy1GUkctRzIxMDAwNSxFRy1MT0UtRzI0MDAwMSxFRy1MT0UtRzI0MDAwMixFRy1MT0UtRzI0MDAwMyxFRy1MT0UtRzI0MDAwNCxFRy1MT0UtRzI0MDAwNSxFRy1MT0UtRzI0MDAwNixFRy1MT0UtRzI0MDAwNyxFRy1MT0UtRzI0MDAwOCxFRy1MT0UtRzI0MDAwOSxFRy1VUEUtRzI5MDAwMSxFRy1VUEUtRzI5MDAwMixFRy1VUEUtRzI5MDAwMyxFRy1VUEUtRzI5MDAwNCxFRy1VUEUtRzI5MDAwNSxFRy1VUEUtRzI5MDAwNixFRy1VUEUtRzI5MDAwNyxFRy1VUEUtRzI5MDAwOCxFRy1VUkctRzMwMDAwMSxFRy1VUkctRzMwMDAwMixFRy1VUkctRzMwMDAwMyxFRy1VUkctRzMwMDAwNAorMSxUdWUgMjUgSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzIsV2VkIDI2IEphbiAxMSwxLjAxNzg5MDE1MDU0ODQzNzcsOS43NjA1MzIxNjA1NjMzODNFLTYsMS44NzA0Njg3NTg2NDkzNzcsMC43MzE4MzMzODk2NTY4MTgyLDQuNTQyNjY3NTgwNDEwMDMzLDEuMzI2OTE2MDIwMTkwODc4MywxMS41NjY2NzUxMjQ2Mzg1MDQsNy42MzIxOTM2NzY5MjgxMTYsOS4wOTUyMzMyMzc1NTk0NTcsMjIzLjA1NzgxMTc1MjUzNzY1LDE2OC4wNTAyNTM0NzIxMjksMjU2LjMzNDM2NjQyNDc1NTUsNC44MDc3NTg1MDMwOTA1N0UtNCw5LjU5MjI3MjgxNDU0MDMxM0UtNCwxLjQ1Nzc3MzI3NzI4NzIxOTIsMjQyLjAwNDA0NjQ3ODE5MzYzLDEuNDM2NTk1MzEwNzU3NTY3NSw1LjQyNjYwNjY0ODk1MjQzOEUtNiwzLjU4MjkzNTI0MjA3NTcwMDVFLTUsMS40MTA5MjcxMDMyNDA4MzE3LDUuODEzNDI2OTgwOTc4NTU0RS02LDYuMDU2NDk2ODYxNDcyNDI3NEUtNiw0Ljc0MjA1MTc4NDYzMTgwNkUtNSwzMzg1LjgyMjkzODYxMzIzMiwxMjkuNjIzNDQ2NDMwMTU4MjgsMC4wODQxOTMyNjYwOTU2ODMwNgorMyxUaHUgMjcgSmFuIDExLDUuMjIyNzY2NTA5MjQyOTUxLDkuMDU2MjcxNDYzOTk4NjgyRS00LDkuNjc1Mjg3NjE4NDk0NjQ1LDMuNzgxMzYzODE2NzU1MDI0MywyMy41MTA5MDgxMDE2MTQwODUsNy4wMDA1OTcwODM1MzM3NTgsNjAuMTgzOTc2NDY3NDg3MzMsMzkuNzIyNjc1NDc0OTM5MjksNDcuMjk1NzY2MDc1NjYxMTg0LDExMzUuNDE3MzA1OTcwMjI1Miw4NTMuMjcyOTYzNTM3Njk1OCwxMzA2LjE5MzgwODk1NTk3MTUsMC4wNDQ2Mjc4ODIwMDU4Mzk1MiwwLjA4OTA0MzE5NTIwODAyOTY4LDcuNjA4MTk4Nzk4NjAxNTgzLDEyMzIuNzAwMTAzMDQxOTkwNiw3LjQ5NTc2NzEyNjE0OTU1Miw1LjAzMjg4NTY3NTk3ODczOUUtNCwwLjAwMzMyNjI0MzQxNDIyODA4Myw3LjM2MTA5MTkwMTgyNTE1Myw1LjM5MjE2MTE1MzI2NjY4MkUtNCw1LjYxOTYzODcwMjM1OTg5NkUtNCwwLjAwNDQwNTI2ODQ3MDczMzc1MSwxNzA5OS4wNTUwNTI5NDUzNTgsNjU3LjA3MTIyMjQwMDk5MywwLjQzMTM4OTQxMDQwNjMyMzgKKzQsRnJpIDI4IEphbiAxMSwxMC42NTQ4NzIzNjQ3MDkwMjEsMC4wMTA0MDc0NTkzNzYyMzIwNjcsMjAuNTQzNjYyNTc3MTcyMTc0LDcuOTYzNTEyMTQxNDc2ODU3NSw1MC4wMTYzMzAwNzQ1NDI0OSwxNi4xODA4NjQzODc0Mzk4MDgsMTMwLjkyMzkxMjY1NjgyMDY1LDg2LjUxOTMxMTIyNDg2NTY5LDEwMi42MDMxMjEyNzg0NTQ2MiwyMjM0Ljg2OTY2MTg0NTA4NjcsMTY2My4yODMxNTU1OTU2MjU5LDI1ODQuMTM2ODE2NTA0NDExNCwwLjUxMzgyNjMxNjExODI5ODMsMS4wMjUzNjgxNzYzMjg1NTk2LDE2Ljc3NzYwMzAxNzk3MTkyNywyNDM0LjAwMTk4NDI4MDU4ODcsMTYuNTEwODE3NzQ2NDExMiwwLjAwNTc3NjM5MTMwNjM2NjYxNiwwLjAzODMyMDA3NzQ2NDMwNTAwNSwxNi4yMDY4NDYwMzQxMjY2OCwwLjAwNjE5MTM1OTk1MTUwNjc4MywwLjAwNjQ2MjYzOTUxNzA4NTY1OSwwLjA1MDg5NjI1MzAxNjMwMTM2NSwzMjY1NC4yNDc2NDc5NzEyMTMsMTI3Mi42Mzk3NzI2NDgwODExLDAuODc0MjAzMzMwMzcxOTE3NworNSxTYXQgMjkgSmFuIDExLDE3Ljg0NDk5NDU5NDU5NzksMC4wNTA1NTczNTk5NzQyNTY5OCwzNy41MDUzODY1MDA5NzM0NywxNC4yODY3NDc1ODkxMDg2ODQsOTEuNjQxODYwOTU1MjIzODMsMzQuNDUxMTc2ODY5NjI3NTYsMjUwLjU1MTI1NjE4MzMyOTg4LDE2NS45NjkxNTI4Nzc2MzU0LDE5NS4zMTYyMjAzODMyODI0LDM0NDAuOTE1ODc4NTIzMDA5MywyNTAyLjI0MDk2MTY4NzkwNCw0MDI5Ljg4MTcyMzQ2NjU2MSwyLjUwOTI2NjMxMDM2MDQ3NTgsNS4wMDk2MTkzNDgzMDM5MDUsMzIuOTM3OTg1MTE4ODkxMTgsMzc3Ny4wMDI0NzA1ODY2ODY3LDMyLjM0NTU3MjUzNjU4MjQyNCwwLjAyNzk3MDk5MDQ0NjY3MDkwMywwLjE4NzQ2NDc1NDQ3MTk5NjM0LDMxLjcyMzM2MDk2MDkyMzgxMywwLjAzMDAxNjMwODc4MzEwODE2NywwLjAzMTQ2OTk0NTU3OTc4Nzg4NCwwLjI1MDk2ODYyMjE2NTI0MzQsNDY3MzUuODcxNjI2ODIyMzcsMTg4NS4xNjEzMzI1NDM0MDg0LDEuNDQyMTg2MDMwMzE0NjE0MworNixTdW4gMzAgSmFuIDExLDI5Ljc0MDIzNTMwMjgwMDg5NywwLjE1ODEzMjc3ODY5MDQ0NTQ4LDY5LjIxNDU2NzI5NzI5MzM0LDI1Ljg3OTEwNTUzMDcxNTQ2NCwxNjkuNzU2NTY0MDAyNzQ5NjMsNzMuOTA1Mjc1MTYyNTcyNjQsNDg2LjUzMzg2OTU1NzY4MzAzLDMyMy4xMDg5ODMzNTI3ODM1LDM3Ny4yMDQwODMxNTA1MzIzNyw1MTAyLjk4NDE0NzQ3MDA5NSwzNTc2LjI2ODMwNjE4MTY2MzMsNjA5NC45Nzg3MjM1ODgxODQsNy45MzU4MDgxNTY0ODEwMDksMTUuODU4MzA4MDY5OTI5ODMsNjUuNjM0NjEzMDQxMjA0Niw1NjY5LjQ4NjgwOTczNDE4Myw2NC4zMTY3MDkxODg4Mjg4LDAuMDg2OTIzNTQ1MzAxNDUzMTYsMC41OTUwOTMxNjA2Nzg2MTI2LDYzLjAyNTMyODc2OTM5MDI0LDAuMDkzNTE4NTQxNTAwOTc3NzQsMC4wOTg5NzA1NjA3MDA4Mzg0OCwwLjgwOTc0MTkwMzgzMjMzNzcsNjE1MDMuMTM4ODM3MTc5MjIsMjYyNy40NjY4MjMyMTQsMi4zNTgzMzA3MTY0NjkzNjQzCis3LE1vbiAzMSBKYW4gMTEsNTAuMDY3NDQ1NDc5ODIyODQ0LDAuMzg2Mzg2ODQxNjg4NzQ3OCwxMjYuNjcwMjYxOTkxNDYwODMsNDYuNzY0NTM3Mjc1NTc2MDA0LDMxMS40NzY2OTQwMjcyMTUxNiwxNTEuNjE1NTk3NzAyMjM1MSw5MjguNDkwMzIxNTY5NjM0MSw2MTcuOTQ5ODY5MzA2MDAyNSw3MTYuNzY3NzA3MTExMzc2OSw3NzAwLjQzOTQ3ODcwMTY4Nyw1MTY1LjYyODk3NDk3ODIzNDUsOTM5MS41NjA4MjI2OTkzODgsMTkuNzUyMzA2Mzc0NDY5MzI0LDM5LjUzMzM2NDc5NTQ5MTg1NiwxMjcuODAyNDExNzA3OTQ3NTYsODY2Ny4xNjQ1MTQ2ODUyMTcsMTI1LjAyNDI5MTUwNDM0ODY3LDAuMjEwMTA3NjM3NDM4NjgyNTIsMS40OTA1Mzk3MDUzNTkxNDE4LDEyMi40MjczNTE0NTM5NzA1MiwwLjIyNzA1MDYyNzg2OTQ1NjU0LDAuMjQ0MTc1ODczNDgxODI1NjIsMi4wODIwNjc2ODAwNDM0MDg2LDgwNDI3LjEwODczMzQwOTc0LDM2ODMuNjUzNTM0MzMyNDQxNywzLjkwOTk0MjI1ODE3MjU5OAorOCxUdWUgMSBGZWIgMTEsODIuODcwNjI0NTY2OTMwOTcsMC44MjA1NzM1MzU4MjE4NTc0LDIyMy4wMDA2MzEzMDM2OTYwOCw4MS43OTgxNTQyNTA2OTYyMSw1NDkuMDkxMzE5MzkyMDYwMSwyOTIuODQwMDY1OTQ3NDY4NzYsMTY5NC41NDM1OTkzOTA0NTQzLDExMzAuMDc0OTQ5NzYzNTgxOCwxMzAzLjU1NzQ1MjE0NTA1OSwxMTcyOC40ODgzNzg3MDM4NjcsNzUxOS4zODI5MjY1NTMzMjgsMTQ1NjcuNDEwMjk0MTg5NTYsNDMuMDMzMDE3ODYwMzExNjUsODYuMzE2MDk0ODU1NTA1MzYsMjM3LjE4Nzg5MzIxMTUxMDY0LDEzMzU0LjI1NjIwOTM0MDEyMywyMzEuNjk1MzU3NjExMTI5NjgsMC40Mzk0MTA5ODY1ODQyMDM2MywzLjI3NjE3Mzc2OTQxNzc1OTMsMjI2LjczNDI1NjQyNTYzMDU1LDAuNDc3OTIyMjMyNjU2MzUwMSwwLjUyNjAwNDUyMjQ1OTMyMDUsNC43Mzc2MzI3MTkyMzg0MzYsMTA2MjU4LjUwNTcxNzk1ODUxLDUyMDUuNTY4MTQ2MTU4MjUzLDYuNDEyMTE5NDYwNjMyODI2Cis5LFdlZCAyIEZlYiAxMSwxMzIuOTQ0NzgxMDU4MDQzNSwxLjYwNjcyNjMyNDAzMjgxNzYsMzc1LjUwNTg1OTE2NzE5MTUsMTM3LjUzNjk5MDYxNDQ4NDY0LDkyNC45MDM2OTczNjA1NjQsNTM4LjUyMTY3OTM0NTMyMjYsMjk1OC40NDc2MTgyOTEwNzgsMTk3Ny4yOTEyODM2MzM0MTMsMjI2OC4zMTk1OTI1MzMzMjYsMTc3MTEuNDM2MTU5NjY5NTkzLDEwODI3LjE4NDAxODkyNTA4LDIyMzM2LjUyNjQ4NTg1MzI0LDg2LjgzNDA3MzQ4ODg5MTU4LDE3NC42Mjc5MTAzMzc4MTA1LDQyMC44OTE0MzA2NDE0MzY0NCwyMDM2OS4wNTkwMjI4NDIwMDQsNDEwLjU2NjcwMzQ0MTg5NTI0LDAuODQ0MjQ5MDM4NzAzNTMyNiw2LjY4Mjc1MzYwMjI2NDAzMTUsNDAxLjQ4ODA4NDExNDc5NDQ1LDAuOTI1ODI2NDgxOTM0NDU3MiwxLjA0OTAwMjMwMzg5OTI5ODIsMTAuMDQ4MjExMDMxMjQ2Nzc4LDE0MDMxMy42MDg0MjgwMzM2LDcyODUuMjE0NTU4MzEyODA5NSwxMC4yMzkxOTc0ODM3MzI2MTcKKzEwLFRodSAzIEZlYiAxMSwyMDYuNzEyNDE4OTY1NDYwNywyLjk5MTc1NjY5MjU0NTgwODMsNjA4LjM3NTE5NzM5ODcyNDYsMjIzLjYyMDY5ODM1OTg4ODM0LDE0OTcuNDAxMTg0NjY3NTQ2Miw5NTYuMTM0MTgwNDkwOTU4Miw0OTg5LjAwNTk5ODQwNzA4MywzMzQyLjg5OTk3MDcxMzA5OTcsMzgxMi4zNzM2MDUxNTkyNTEsMjYyNzIuNzIxOTgyMDY4Njg4LDE1MjE4LjIzMTI2ODE1NzkyLDMzNTczLjc4NjIyMTA1Mzk5LDE2Ni44MzE1OTkwNTgzNTE1MSwzMzYuNDYzOTc0MTA5MjA5LDcyMi4wMzgzMTkyODE5MjIzLDMwNDk0LjIxMTYzNTM0NzM5LDcwMy4zNDIzOTg1MjMzODAyLDEuNTM5NDEzOTY4OTcwODM0LDEyLjk5NjI3MDkwOTc4ODc5Niw2ODcuMjA0MzMzOTg4OTgyNywxLjcwNDIwODYzODQ3NjUyMTIsMS45OTU2MzUwODk0ODAyNTc1LDIwLjMyNTc1OTE0MzkzNjA1LDE4MjM5NS4wMDE2NjU1ODg4Miw5OTQ5LjcyNzUzMDMwODEyNiwxNS44ODU1NjMyNjY1MDA1NTQKKzExLEZyaSA0IEZlYiAxMSwzMTMuNDc3NDIzOTQ1MjE4ODUsNS4zODk4MzcxNDc4MzgxNjMsOTU1Ljc1MTAyMzI1Mjc2MjUsMzU0LjgxOTYzMjAzOTAzMzE0LDIzNDcuNTU1OTE0NjY4NzY3LDE2NTcuNDA0NzI1OTc3NjE0NCw4MjA5LjY1NDkwMjg4MzI5Niw1NTE3LjQ5NDcyMjg4OTQ0MSw2MjUxLjgzOTk4MTk4MDc4NywzODIyNy4yNTgyNzEzNTkyMDYsMjA3NTMuODA5MjQyODA1MDcsNDk0MzAuNTk4NDczMDU4Nzk1LDMwOS43Njc3MDIxMzQxMDM1LDYyNi42MTA0OTIxMDg5NjksMTIxMC4zNzg3NjU3NzE1NTA3LDQ0Nzc2LjAwODc0OTAwOTIxLDExNzcuNDc4NjE2MzQ4ODY0OCwyLjcxMzc4MzI0MjA5ODQ4MiwyNC40NTI3Njc0MjU4NDUxOTUsMTE0OS4yNDM1ODk2NDkyNTcsMy4wMzUzMzgyNjk1MzAwODI2LDMuNjgyNTM2MjEyMTg0MzM4NCwzOS43MTMwNzkwMzU5NTM4NCwyMzA4NjYuNTQ5MzI3Mzk0NzUsMTMxNTYuNTM1NDQ3MTk2Mzc4LDI0LjA0NTk4MTYwMjU0MTE1CisxMixTYXQgNSBGZWIgMTEsNDY0LjUxNTIwMjg5MDcxMTYzLDkuNDM1NDU4MTA1NzEyMTkzLDE0NTUuOTU4NTA3MjA3MDk1OSw1NTAuNzg2NTMyOTA3MjY3MywzNTYyLjA2Mjc1ODcyNzEsMjgxMC4yMDAxNDcwNjcyMTksMTMyMDguMzE2Mjg3MjY4NjY4LDg5MDkuMTU5NjY3MDM5NDUyLDEwMDIzLjQxMTYwMTY1ODgwNSw1NDM3Ny4yMjE4OTQ1MDU3MiwyNzI1OC4xMjc0MDQ1NDcyOCw3MTA0Mi4wNjk2MzY3NjMzNSw1NTcuNDU2ODIyMzU3MTYyMiwxMTMxLjIwNTA1OTQ2OTc1ODUsMTk4Ny4yMTY4NzE2NjE3ODgsNjQyOTUuMTkxMTY5NjUxNjYsMTkzMS4wNDE1MjQwMzM4NDQ2LDQuNjQ5MDI3ODgzMzQ0MjI1LDQ0LjY0NTkyMDkxMjcwNTYzNCwxODgyLjE2MjYyNjUzMTk1MjgsNS4yNTY1ODE2NjA4MDEyMjk1LDYuNjE3NTE2MjY2NTg3OTA3NSw3NS4xMTgwODQyNDg2MTUyMywyODE0NzQuMjQ5NDExNzIyMzUsMTY3MDAuMTMyODA0NTg5OTksMzUuNTEyMTMwNzg3MTM2OTMKKzEzLFN1biA2IEZlYiAxMSw2NzQuMjUzMDUwOTUyNDYsMTYuMTMyMDM3NDA2MjA2Nzk1LDIxNDkuMzQ1ODczMzg0NjYwNSw4MzguNjY1NjY1MTU2NjIxNSw1MjIzLjU1MjA3NTQ4NjU1NCw0Njc0Ljg3Mjk4MTMzNDQ0MiwyMDgyMy4wMzk3NTYwODI1MiwxNDEwOC4zODQyMDA0MjQ5OTEsMTU3NDYuNTU2NTE5NjcxNDQzLDc1NDgxLjUzOTAyMDI2OTkyLDM0MjczLjc3NjI3NzkwMDcyNCw5OTQzNC45Mzg1NjAxODIwMSw5NzYuNzg3OTM5MjkwOTQ0MiwxOTg4LjkyMTU5NzA0MDI3NDUsMzIwNS4xMzMyNTExMjc0Nzg2LDkwMTQzLjY4NjcyNzcyOTk1LDMxMTIuMTk2ODg5Njc2MjgxLDcuNzgwMjg0NDc2NzU4MDU1LDc5LjUwOTY5MzY0NDQwNTMsMzAyNy44Mjg0MDIzMDUyNDI0LDguODk4MjI5Njc4MDk1NDM1LDExLjY0MDgwNTYzMDc3NTY5NywxMzguMzEwNjk5NTM0MzM3MSwzMjc5MjYuNjU1OTgyNDk1MywyMDIxNS41MzMwNjY3ODk1MzIsNTEuMjA2MjE2OTQyODA1NworMTQsTW9uIDcgRmViIDExLDk1OS40NTc5NDI0NTE1NTAzLDI3LjA1NzcxMjc4MTQ5MjA3LDMwNjQuNDM4NDU0MTQ1MzQxLDEyNTMuNzI4MTg3MTIxMzM5LDczNzAuMTI3MTU5NTE4ODcyLDc2NDkuMDE0ODEyODcxNjA2LDMyMTg4LjQyODgxMjQ2MTkyMywyMTkzMy45NzgwMTU3ODYyMDgsMjQyNTQuMDU2NzcxMjY1MjA1LDEwMTg5MS4zNzg3Nzc3MjMzNyw0MDk0OS4yNDg2MTY1MjI3OCwxMzQ5NTEuOTQ3MDcyODA5MjQsMTY3My40NTQ3ODQzODExOTU2LDM0MjAuNzg5OTMzNTY0ODc4LDUwODkuMDE2ODcwMDgxMzQ4LDEyMjk5Ny44MjA3NjAxMzgwMyw0OTQwLjcwNTA3MTc5OTI5OSwxMi43NzU0MjM2OTU4MDU0MzUsMTM4LjgyNTcyNDIyNTUxNDc2LDQ3OTQuMjgzMDU3OTY4Mjg0LDE0Ljc5MDg1ODA5MDY0OTk4NSwyMC4xNDM0Nzg3OTExODkyNzQsMjQ5LjI5Nzg2MzgyOTA0NjksMzYyMTk2LjIyMjczMDc0MTM3LDIzMTYyLjY2MDg1MzEwMzU3OCw3Mi4wMzE1ODg5OTkwMjUyMgorMTUsVHVlIDggRmViIDExLDEzMzMuNzQzNjgwOTA1MDQ1Nyw0NC40NzE5NjYxODQ3NTI0MSw0MTgxLjAyOTgxOTgxMDkwNywxODMyLjE4NjQzNjI4OTEwOSw5OTAxLjc5ODkyNzEzMjYxLDEyMjc0LjAwNTg4MjAwOTA0Nyw0ODU0OC41NTI5NDI5NDAyOTYsMzMzMjkuNTA1NjQ0MjQwNzksMzY0NDYuMDA3OTg5OTg4MDcsMTMyNjcwLjYzNTM5NjcwODczLDQ2MDA4Ljk0ODEyODUzMDM3LDE3NTkzMC45MTg0MjE4NjMxNywyNzk3LjY0NDY5MDU2NTc1Miw1NzQ1LjM0NTYxODMxMzcwNCw3OTMwLjA1NDU5MzE3NTgwMTUsMTYyMDE0LjU3MDI1NTA5MTA2LDc3MDUuMTY1NjgwMDE3ODgxLDIwLjU2NDE0MDQxMjYyNjEwNiwyMzcuNDU4NzM1NDM1MjE0OTIsNzQ0OC43NTkyNzAyNjcxMjEsMjQuMTIyODgzMjg5Nzk2MTQyLDM0LjI1NzY0NzI4ODExNTAyNCw0MzkuNTM5NTAwMDYxNTIxNjYsMzc1OTI5LjAxNTIxMDMwNzk2LDI0ODg2LjUxMDI3MDAwNzg3LDk4LjM1Nzg3NjkyNjg3OTIKKzE2LFdlZCA5IEZlYiAxMSwxODEwLjI2MzMxMzUwMzI4Miw3MS44NjUyMzEwNTI3MjAwMiw1NDE5Ljk4Nzk2ODMzNTk5MiwyNjE0LjE3NzEwMDI3NTQ3MDQsMTI1NjIuNjgyMjE5MDYzODE0LDE5MzM4LjY3NDQ3NzE1NDcwMiw3MTMwNi42NzU4ODQzMzQ5Nyw0OTQzNy4xNjkwNjE2NzY3MTYsNTMzMTkuMDI1MTI1MDA1ODEsMTY1NjM4LjIwMDMzMjU0NzM2LDQ4MzAxLjY3NTY1NTMyMzM4LDIxODY3OC4zOTM1MDYzNjgyLDQ1NzMuMzc0NzA2MzgwMzkzLDk0NDYuMjQ3MjQ5NzA4MzI5LDEyMTM3LjM5NDAxNjM0MzQzOCwyMDQ3OTEuOTMzNDAyMDcwMDgsMTE4MjAuMzM4Nzk2Mzg1NTUsMzIuNTY0MTA2MjE0Mjg4NjcsMzk5LjUwOTQwMDAxMzA1NzUsMTEzNjMuOTg2MTI2Mjg1MiwzOC43NDgzNDk0MzkxODI1Niw1Ny40ODkwNjE5MDg4MDU5Myw3NjEuMjI1OTQ0NzY4NzczMywzNjUxOTkuMDcyMTI0MDIsMjQ5NTMuNzA3MzI3NzI3OTcsMTMwLjE1NzYyNDk1NzUwMTk1CisxNyxUaHUgMTAgRmViIDExLDIzOTMuNTIyMzY1MDQ1OTA1NiwxMTQuMjE4MjU4MzE5NDQyNCw2NjA4LjEyMjQzMzE3OTAwOSwzNjI3LjMyNDE5MzA0OTk1OTQsMTQ4ODkuNDE2MTExMzYyMzk4LDI5ODU3LjcxMTczMTAxODg3MywxMDE0MzEuOTI2OTA1NTY1NjIsNzEyNDAuODYzMjAzODY3MTYsNzU1MTIuMTk2MDYzODEyNDEsMTk2NjY3LjI1NDE5Mjk1NjQsNDcxNTYuNTc1MjY2NDA2NzksMjU2NjQwLjg0MjI3MDk1NDYsNzI5Ni45Nzg5OTY0NzQ0MDk1LDE1MTgzLjk3MTYwNDg0ODkzMiwxODIwOS4yOTQ4NTgwMDU0OTgsMjQ2MzI2LjQ1NjM0NTI1NDczLDE3ODE1LjMwNDEwODE0OTI0LDUwLjc3NzAwMzU3MDY1OTAyNiw2NjEuNzMwNzI5ODQ2NDEwOSwxNjk4OC4xMTM1NjE3MDY4MjUsNjEuMzY5OTI1NTY2MTI0MzcsOTUuMjk5MzcxOTA1MzU0NjIsMTI5NS45ODkyMzQ1NjY1ODEyLDMzMTY5Mi4wMjc2MDAwMDU1LDIzMjk4LjcxODg3ODIzOTYwNCwxNjYuMzk2MzM1MTc4NzkwODUKKzE4LEZyaSAxMSBGZWIgMTEsMzA3Ny4xNzIyNDQxNzMwMzAzLDE3OC41Nzg5MjQ2ODQ3ODY0MSw3NTAyLjczODIyNDA2OTIxOCw0ODc0LjcxODM4MTAxNDEwNCwxNjMyNy44MjA0NjkzNjExMTEsNDUwNTIuNDkwNjc1NzUwNjEsMTM4ODA3Ljk2ODE0MTAxOTc4LDk5MTUxLjQ2ODgzODk1OTQ0LDEwMjgxMy4zNzAzMjc0NTEzOCwyMjAzNTguMjgyNDc2MTkzODUsNDI4MTQuMjIyNjkwODgwOTUsMjgxODM2LjMxNDczMDAwMTk2LDExMzI4Ljg4ODUzNTM2NDA2MiwyMzgwNi4xODQ2MjczMjcyODYsMjY3MTIuOTg2NTgzMjI4ODY3LDI3OTYzMy4xNzU1NzI2MDQyLDI2MzQ2LjMxNTExMjIzNzIwNyw3OC4wNTE1NjEyMjY5ODYwOCwxMDgwLjAyNTA0MDU1ODYwNjksMjQ4MjIuMzU4NzkxOTM3MzY0LDk1Ljk2NTQ0ODgyODM0MTUyLDE1Ni4yNDUxMDQ3Mzg1OTU1LDIxNzAuMzE1NDE3NjQxMTE1MywyODI3NzAuODI1NTMzMDIxMjQsMjAzMTUuMDk1Njc3ODY2OTY4LDIwNC45NTM4OTA4NTczMDI0NAorMTksU2F0IDEyIEZlYiAxMSwzODQwLjg5NTM2NTczMTAzNzYsMjc0LjYxNDQwODQ1ODk4MzQ2LDc4NjcuODU0NDExNTI3MjgxLDYzMTguNzA0OTMwNDA2NjI5NSwxNjQ1Ny44NjExMTA1NzU5Myw2NjE4Mi4yMjIyNzI4MzU2NCwxODEyODEuMTAwMTAyODQ3MiwxMzIyOTkuMzgyODQ3OTA5MSwxMzM0NTguMjIyOTYwMzk2NiwyMzE0OTguODY4OTk4NDU5MDcsMzYzMzYuMDA5NDg5NTUzNCwyODc2MjcuMjkyNTMyNDIzMTYsMTcwMzIuNDYwNjA4Njg4MDQsMzYyNjUuNzQwMTg5MjU3NzYsMzgxOTQuMTM4MTA2NzU4MjksMjk3NDc2Ljk5NzkwMTIzMTg3LDM4MTY3Ljg3NTg5Mjc3MzA5LDExOC4zOTg0MDk4Mjc0NTQ1NywxNzM3LjkxMzk2NTg0NDMzMDUsMzUzMzMuODcxODEyMDY3NTMsMTQ4LjM0OTczMzAxMjYzMjIsMjUzLjYyNzIxOTEyMzkwNzA4LDM1NzUuMzA0OTA0OTY3MzQxLDIyODIwOS44NDQxNjM3NzI0LDE2NjcyLjY4ODc1NjkxMDY1LDI0Mi40NTk1NDUzNDI5NjUxCisyMCxTdW4gMTMgRmViIDExLDQ2NTEuMzYxNDY1NTk4ODMyLDQxNS4zNDA3NjUyMDE2MjQzLDc1ODguMDk3MzQwMzQ2NzEyLDc4NzIuNjk4NjU5MjE4OTU1LDE1MjI3LjI2MzIzODkwNTA2Nyw5NDE5OC42MjAzODQ1MTY5NCwyMjM5NzEuMjg2NzI2NTg5MzEsMTY3ODMwLjYwMjgxMjE4NDU0LDE2MzY2OC4yOTUxOTAzODEyLDIyNzE3MS4yNzUyMDIyMDI3MywyOTEwOS43MTA1MDQ2NTU5MywyNzE5OTMuNzcyMjIwNzQ1NSwyNDY0Mi40OTYxNDE5NDkzNyw1MzQwNi4wMjQzMzg3NjU5MTQsNTMwMTkuNjA0NTQ2MzM5NTY0LDI5NTIyMC45MTYzMjYwNDAwNSw1NDA3NC43Mzc3MzI4NjMyMiwxNzcuNTE4NTUxODkxNTYwMzUsMjc1OS41NjA4OTI0NjQ2NjcsNDg4MTAuNDgxOTE4OTY2MywyMjcuMTIxNTEyMTMzMzM2OCw0MDguMjQyNDA4ODUyOTMzMDcsNTc5NC44NzExOTg1MjcxMjksMTc2NDI4LjcyNDgwNjU0OTIzLDEzMDMwLjQyMjQyODc1Mjg1NCwyNzQuMzQwMzA5NjU5MDkyMworMjEsTW9uIDE0IEZlYiAxMSw1NDYwLjIyMDEyODIzMTYxMiw2MTYuMzY4MTI4MDI1NTcwNSw2NzM1LjE2MDMzOTM2NjM2OSw5MzkxLjc2ODUxNDU3NDE0MywxMjk5MC4yMDc3NTI1ODg1MTQsMTI4ODQ5Ljk1MjAyMjY1MTY1LDI1OTA4Ny42MDU3MDMzODU5LDIwMDI3OC40MTA1NzQ3OTc3NCwxODc2NDMuMTMzNTk4OTYwNywyMDgwNzAuNTk2NjQ5MzExNzIsMjIyOTcuNzYzNDk5MjY3OTEsMjM4NzIyLjYwNTExNTc5NywzMzk2Mi4xMTQ0NzIyNTY2Miw3NTM1MS4zNjgyMzQ3Mjg0LDcwOTY2LjUwNDE1MzEyMDIsMjcyOTMzLjQ5ODY3OTA0NjA1LDc0NjA4LjE0MTg1MDUwMTAyLDI2Mi45NzkwNzU2OTI2OTQ4LDQzMTYuNTU2NjM0OTc1NDUxLDY0OTkzLjE2NDU0NjMwODU2NiwzNDQuMjg1NzM5NzIwOTk5NzQsNjUwLjkzOTcwMzYxMTg3NTgsOTIxNS4zMjY1NjE3ODI4NjYsMTMyNDE0LjgwODA3NzM2NzM0LDk4MzEuMTg0MDYwNjk5MDgsMjk0Ljg4NDkwMjUyMjIwOTUzCisyMixUdWUgMTUgRmViIDExLDYyMjcuNDU3MzEzODE4MDA4LDg5OS4wNjc1NDU4NTAzNCw1NTQ4LjQ5NzUxMDg0MTExLDEwNzI1LjQzOTM4OTAxODkwNiwxMDMzOS41NDgxMjIwODYyMjgsMTY4NDE5LjUyNjMwMzk3NjcyLDI3ODgzNC4wNDY5MTIzMzgzLDIyMzIwNC45MTAxOTE0MjkyNiwxOTk4NDAuNDAwMzkzNTYwOCwxNzg3NTguMzA4OTEzNzIxNzMsMTY1NjQuNzg1NzEyMzcxOTA0LDE5NjA4Ny4wMTY3MTkwODU5LDQ0MjQ2LjQ2OTQwMDA5NjE3NSwxMDEyMTEuMjYxNTQyMjExNzUsOTExNjcuODA3MjU5MzgxMjgsMjM2MTY0Ljc2NDgzNDE1OTUyLDEwMDEwOS40NzQxNzEzODIzMywzODYuNTQ0NDQ0Mzk2OTU1MTYsNjY3Mi41MjQ3NjU2Mzk0MjEsODMwNDYuNDczMTk5MTUwNjYsNTE5LjA4NTg3MjE4ODIzODUsMTAzMi40OTg3ODczNDkwMjQ1LDE0NDA3LjAyNzc3OTE2Mjc2OSw5NzcyMi4zMjUzNzg0NjY1OSw3MjU4Ljg0ODU1Nzg5NjY2OCwyOTkuNTAyMDYzMDg1NjU2MzUKKzIzLFdlZCAxNiBGZWIgMTEsNjg5OC4zODI1NTY0NDMxMjYsMTI4MS41NTQ4MzY5MjY4OTcsNDI5NS41OTE5MjkwOTA1MTYsMTE2ODcuMzIzMTE5NzE1MDcsNzc5Ni4zNzE4MjgwMTcxNzYsMjA3NjM3LjI3Njg0NTUwOTc3LDI3Njk4Ni43NjUyMzU3MzIxLDIzMDAxNi4zNjExNzM4NTU5NiwxOTYyNDAuMTUyMzQzOTEyODQsMTQ1MTAxLjE0ODY2Nzk0MTg2LDEyMTA0LjA2NDI5MTEzMTcyMywxNTI0NzcuMzIxMDY4MzMzNTIsNTM2ODkuMDE4MjEyMTY5MiwxMjc1NzcuNzc0OTE3ODQxMDQsMTExMDYyLjQwNTMyNTA1NTc2LDE5MjY3My4xMDI3ODg0MTMzNSwxMjk0NTMuMjYxNjkyNDY0MzcsNTYyLjA5NzY2NzUzMzIyOTIsMTAxMzguNzEzNDk4NTc2MTg2LDEwMDY0Ny4wODg3OTQ5MzcxOCw3NzYuMDI4MDQ2Njk0MDM3MiwxNjIxLjc0NTk3MDcyNTM4MywyMTk4Ny42NzAwNDY2NDA1OCw3MTc3My4yNjM1OTU3NjE1OSw1MzEzLjExOTc2ODU2Nzc3LDI4NS4xOTU4MjM3OTUwNTg3NAorMjQsVGh1IDE3IEZlYiAxMSw3NDQ2Ljk3NzA0NzI5OTU0MSwxNzg2LjY0NDIzNzEzMzUxOCwzMTgwLjQ1OTQ1MTI4OTE2NSwxMjE3Mi43NTk4NDkzMzE5ODQsNTY3Mi4xMjA2MTE3MzA3NjUsMjM5NzgwLjE1ODIyNjk1NTA0LDI1NDI0NC44MTQ4NjY5NzUxLDIxODg5NC4xMjgyOTc5NDkxNSwxNzgwMDUuNzI5MjIzMjM0LDExMjY0MS45NDY0NDIyMjMzNCw4ODAyLjIyNzE0ODI2MTUxNiwxMTM5OTkuNzA4MjA2MjY5NzIsNjAyMTcuMjg2NDU4NjYxMjQsMTQ5NzQ1LjI4MzMxNDY5NTk2LDEyNzQxNS44NDY0NDUxNzA3MywxNTAxMDYuOTYzNDUzMjAwNzMsMTYwNjEwLjc0NDQ2MDU2NzQ1LDgxMi4xMTI5MzIzMTA5Njg5LDE1MTc5LjcwMDM0MDAwNTAwOSwxMTQ5NDAuMjA2MDU4NDUsMTE1NS41NTQ3NTAyNTQ3NzQ3LDI1MzEuOTkzNzc4MzcwMDIwNywzMjc4NC40MDI3MTc2Mzk3OTQsNTI5MDguMjQ5OTc4MzU1NTIsMzg5Mi42NjgxMDc1MTAxMDQsMjU0LjQwNzE4ODM3Nzg5MDU1CisyNSxGcmkgMTggRmViIDExLDc4NDIuMTMwOTU0NTAwMTAxLDI0MjcuMTAyOTQyOTMwNzA1NSwyMjkxLjU5OTY4MDY3MTg0LDEyMTE3Ljg3NDMwMzAyOTgyNiw0MDUwLjM1MTMzMTI0MTQyNiwyNTY5NzcuMTI3NzkzNzI2NSwyMTY1MzMuNjczMTk2MzI0ODcsMTkyNjMxLjA1NDM4Mzk2NDI4LDE0OTkxOS40ODI4MTMyNzEzLDg0Njk4LjA4ODQ1OTcyMjcxLDY0MzEuODYxNDE3OTAxODY3LDgzMjA5LjU3ODQ1OTY3NTMsNjE5MDcuNjU0NDkxNTE5MDEsMTYyMDE1LjMxMzk5OTMwNTQ1LDEzNjI5NC4zOTUzOTExMjU4NCwxMTMxODMuNzgxNTc5MDE4NDcsMTg5Mzk0LjE2MzYzOTE1MDgsMTE2NS44NTAzOTMyNzcyNjk2LDIyMzM0LjMzMjg2NTg5MjU3NSwxMjI1MjEuMDQyNzU4NzczOTcsMTcxMy44NjUxNTMyNzQzNDMxLDM5MjQuMTk1MjQwNjY1NTYwNSw0NzUzOS44NzE1OTU5NTMwOCwzOTQwMy45MjY5NDY4MzU2NywyODc2LjU2NTgyMDc3MDE3OSwyMTMuMDYzODMyODA2NTg2OAorMjYsU2F0IDE5IEZlYiAxMSw4MDYxLjQyNDAxMTE1MTAxMSwzMjAzLjQwMzQ4OTc3MzgzOCwxNjMyLjgyMDcyMzMzOTM4NDgsMTE1NDUuNzAyMDUxNjY4MTUxLDI4ODAuNzg4OTYwMTY0NzkzLDI1NDI4MC4xOTkwMDA0Mzc4LDE3Mjg4Ny44ODA4MjQxNzcsMTU4MDIwLjM0ODkyNjk5MjI3LDExODU2NS40NjEwMTc0NjU3NCw2MjQ5MS44MzUzNzE2NjExNiw0NzUzLjcwMjY1MTI1MDkyNSw2MDEzMy4zNTYzODcyNjc3MDQsNTgyMDUuMzI1ODczOTg3ODMsMTYwNjg1Ljg3OTg0NTkyMTUzLDEzNTAzNC4yNDEzNTg5MjU4Miw4MzczMC4zNjYzOTYyOTU1NSwyMTAzODEuNzg4MzQyODUxMjQsMTY2NC40NzE5NDAzOTE2Mjg2LDMyMjI2LjU2ODI1NTMyNjkwNywxMjExNDUuNTEwMzUwMTksMjUzMy45NDM4MDM2Nzg5NDU2LDYwMzQuNTE0NTM5NTc4NTg5LDY2NzY3LjM2ODk3NzU1NTcxLDI5NzYyLjU3NTc4MzM2NzQ0NywyMTU0LjI5MTAyNjI4NDY1NTMsMTY4LjkwMDg3MzAxNTI1MDA2CisyNyxTdW4gMjAgRmViIDExLDgwODkuOTc4MDA3MTMzMzQxLDQwOTYuNDI4MjkzMzg5NTg2LDExNjUuNDc5MDE4ODMyMTYwMSwxMDU1NC44NzQ0Mzc5MzA1MjYsMjA2My41NzI5OTYyMTM0MTMsMjMyMjU4LjIzOTgzMTI4NjA4LDEzMTI4Ni4zMjY0NDUyNDIzMywxMjI0MTIuMDA5MzQwNTQwMzUsODkzODcuNDUxMDQxODQwNjQsNDU3NzMuNjE4MDc0MjA4NTMsMzU2Ny40MTQ4NTM4MjUxMDE1LDQzNTE5Ljg1NDc5MTA3MDA1LDUwMjY1LjExNzA1NDc3NzU0LDE0NjA5NS44MTczNDUwODg1MiwxMjM2NTUuNzY5Nzg2OTAxMjUsNjE1MDcuNDg3NTEyMTk3ODMsMjE4NDI1LjM4ODgwMzI2NjMsMjM2NC42MzI1Njk4MDg3MDUsNDU0NzguMjQ0MjA5MzgxNTI2LDExMDkwNC4zOTg5MTA0NTM1MSwzNzM2LjQzNjQ2NzMwMDU3MSw5MTk5LjA0ODk2MDA5NTcyOCw5MDM1NS43NDQ3MzEzOTYzNiwyMjgzNi4wNzEyOTM0MTQ4MzYsMTYzOS4wMDY4NTAwMjczMjMzLDEyOC4zMTAxOTI4MzI1MTQ1CisyOCxNb24gMjEgRmViIDExLDc5MjcuMTM4MzA1MDE2NjMyLDUwNjUuMjk3NjE4NjQwNjA4LDg0MS4wNzUwMDA2OTc5NzM3LDkyOTUuMzAzMjAzNDk2NDg5LDE0OTkuNjY0NDc2MjIyMjg1OSwxOTY5NDAuNjI2MTAxMzIyNjgsOTYzNjkuNTg2NDc0NzQ5ODcsOTA5ODIuNDQyNjgwNDY4NzcsNjUzMTAuMTQwMjI1NTAzMDIsMzM2MDMuMjc3Mjc0MjUwMTU1LDI3MjIuNDQ1NTI2OTc0MDE1NiwzMTgwMy42Njc5MDE4MTUyMTQsNDAzMTMuOTI1NDcxOTY4Mzc0LDEyMjU4Ni4zNDg3MTc1OTIyMiwxMDUwNzQuMTQyMTU2ODI2OTcsNDUyOTguNzI4MTE4MjM1NDg1LDIxMDk1MS42NzI2NzYwMDY2LDMzNDMuNDU4MzAyMzE0MTUxMyw2MjU1MS41NzE4NzkzODM5MjYsOTQzNjUuNDc1NzQ1OTMzNTcsNTQ5NS40MTc5MTU2OTI5MjYsMTM4ODIuMTUyMjM5NDkzMjU2LDExNzA2Ny4yODAzMTkwMjI0MiwxNzc5Ny41MjUzMjk4OTE2NDcsMTI2Ny40MTc0MTY2NjEyNDE1LDk0Ljc2MzExOTYwNDE4ODU3CisyOSxUdWUgMjIgRmViIDExLDc1OTIuOTI4ODMwMDQ1NTg0LDYwNTEuOTQzNTE0MjA0ODU1LDYxNy4wOTMxNDk2NjM1ODIsNzkyOS42OTc5NDkyMDMzMzQsMTExMC4wMTAzNDgzNjEwMjc0LDE1Njc3MS4yOTk0MzU2MTc2Niw2OTQ2OC41NjI3NTM5NzMyOCw2NTk1My4xODQ1ODE4MzI2NSw0Njk3Ni42MjY3MTI5MzY5NSwyNDg5Ni44NTMzMzkxODk2OCwyMTEyLjE4OTAxMDMyMTc2ODQsMjM1ODkuNDIyNTE1OTEyOTYsMzA1MTYuMzg3OTUzOTMyMDYyLDk2MTUyLjA4NzY2MTU1NTkxLDgzNjc5LjQ3MzI0OTc4NDAzLDMzNjc2LjM0MDM2Mjg2Njg5LDE4OTUxMy4xOTk1NDg5NDUyLDQ3MDQuMTgyNDczMDIwNzA1LDgzNDg0LjI3MzEwNjc3NDMzLDc1MzQ5LjgxODIwMzEzOTMxLDgwNTkuMDQ5NTIzODY5MjQzLDIwNjk5LjA2MDEwMTgyMTIzMywxNDQwNjkuNTY5NTY1NjA0NTMsMTQwNzEuNzc4MDUwOTY4NjksOTk1LjI3Njk4Njg3NDgwMzgsNjkuMDA3NDQ2MzQ0MzgxNTUKKzMwLFdlZCAyMyBGZWIgMTEsNzEyOC4xMTE2NTc1NTAzMTMsNjk5MS4xMDEyNjkyOTM2NjMsNDYxLjQ1Mjk2MzYxMzc5Nzc1LDY1OTUuNzkyMjIzMjg5MTgsODM3Ljc1OTk3NzU2MTgyODIsMTE4OTI5Ljg3MjI2MTIyMDQxLDQ5ODUyLjQwMTA1NzgxNjIxLDQ3MzI3LjQ2MTM5MTU1MjE0LDMzNzA3LjczNjQ4ODI3OTg5NCwxODY5OC40NDY3NjA0ODAwNDUsMTY2My41NzkyNjY5MDA1NzQ4LDE3ODAxLjU0MDk4NTczMDM4NiwyMjIwOS41MTYzNDE1MDM2MSw3MTcwMy45MzM1NDAzMTg5Niw2MzM3MC4wOTE1MDQxMDIwMzQsMjUzNzguNDgzOTk1NDI3MDI1LDE1OTI0NC4yNjU1NjA1Mjg4Nyw2NTgxLjQ0ODUzODkwNjI1NywxMDc1MTQuMTUyNzU1OTg2NCw1NzI1Ny40NDEyMTI4NzY3OTQsMTE3NzQuNjMxNjU0MDg0OTMzLDMwNDE1LjQyOTQwMzgwODQ5LDE2Njg5OS43OTEyNjIyMjQxNywxMTI2NS44NjQ2NjY4NjM1MTIsNzkyLjMzNjM5NTk0NDczNTMsNTAuMTUyNTMyMTM1NzUyNzE1CiszMSxUaHUgMjQgRmViIDExLDY1ODUuODA0NzE2Nzg4NjU0LDc4MjAuMTgzMjExNDY3NTQ5LDM1MS43MzQ1Mjg2MjA4OTUwNSw1Mzg0LjM3Nzk5NjA4MTIyNCw2NDQuMjAwNTY0MTY4NDc5Niw4NzQxMC40MzE0MDA3NDU1NSwzNTk5MC45MzUzMzg1NTE4MiwzNDAyNS42MTc1MjM3NDIxNSwyNDM2OS43MTgxMDQ2ODYyOTcsMTQyNjQuNzgwNDY4MzE5NywxMzI3LjMyOTE4MDY0MzEzOTgsMTM2NzEuNzUwODIyNjE0NTUxLDE1ODI0LjM1MzIwNjY0ODQxMyw1MTc3Ny4wNDQyMTA1NjE3MSw0NjM5Ny44MjY4OTkzNTM5NCwxOTQyNC41MDA2NDUzMjI5ODcsMTI2NDgwLjg0NDA2Nzg0NDM0LDkxNDMuODU0NTM4MTg3MzMyLDEzMjY3NS42Njc4NDk1Njk5Myw0MjA3NS44MDQyNDI4MzE5LDE3MTE0LjU3NzUwMzUyNDE0Miw0Mzg5MS4zNzA0NjQxMjAxNTUsMTgwMzg2LjQyNjUwOTkzNzUsOTExMy4wOTk3ODQ1NDI1NjYsNjM4LjExMjYyNTY2NzQzNSwzNi43MTIyMTY4MjU3Nzk3MQorMzIsRnJpIDI1IEZlYiAxMSw2MDE4LjM5NTE3MTA5OTQ4Nyw4NDgzLjc2NjIxMjIxNjQ2NywyNzIuODgzMzA2NjIzNTIwMzUsNDMzNy45NzEwNzU0NDM2MjEsNTAzLjY4MDYwNDIyOTY4NDMsNjMyMjIuNTk0OTA2MDk1OTgsMjYzMjYuMzc2NDAxMDI5NDQ3LDI0NzIwLjMzMjY4ODc2Nzc3MiwxNzg2OC4zNjM0OTA3NjkyNzYsMTEwNTYuNjU1Mjc0MTA3MjM0LDEwNzAuMzUyMzUzNzcxODQ0NSwxMDY3My40MzQxMDcyMDQxNTMsMTEyMTAuOTQzMzE1MzYwMDM3LDM2ODI2LjA2Njk0MDgwMzA4LDMzMzc5LjQxODM3NjEzMTQxLDE1MTAyLjkxMjI4NjI1NDQ5NCw5NjI4My4xMTEzMzYxNzg1OCwxMjU4OC43OTk1OTcxMTYyOTMsMTU1NjE0LjgwMTU3MjQ3NjUsMzAzNzQuNzM2ODg3Mjg4ODYyLDI0NjkzLjQ0MjQ4MTc0MDQ0Nyw2MTkxOS44NDk5MzIxNjE3NCwxODA2MzYuNjkwODIzODg3MjQsNzQzMi4yNzY4NDIwODgxODQsNTE4Ljc0NzY4NDIwMzEyNjEsMjcuMjI5OTk0MTI0MjQzMDkKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvRGVtb2dyYXBoaWNTRUlSRGlzZWFzZV9SS19SZWZlcmVuY2UvRmx1L3dvbWVuL1BvcHVsYXRpb24gQ291bnRfMi5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0RlbW9ncmFwaGljU0VJUkRpc2Vhc2VfUktfUmVmZXJlbmNlL0ZsdS93b21lbi9Qb3B1bGF0aW9uIENvdW50XzIuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFhYmMxZDkKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0RlbW9ncmFwaGljU0VJUkRpc2Vhc2VfUktfUmVmZXJlbmNlL0ZsdS93b21lbi9Qb3B1bGF0aW9uIENvdW50XzIuY3N2CkBAIC0wLDAgKzEsMzMgQEAKK2l0ZXJhdGlvbix0aW1lLEVHLUZSRy1HMjEwMDAxLEVHLUZSRy1HMjEwMDAyLEVHLUZSRy1HMjEwMDAzLEVHLUZSRy1HMjEwMDA0LEVHLUZSRy1HMjEwMDA1LEVHLUxPRS1HMjQwMDAxLEVHLUxPRS1HMjQwMDAyLEVHLUxPRS1HMjQwMDAzLEVHLUxPRS1HMjQwMDA0LEVHLUxPRS1HMjQwMDA1LEVHLUxPRS1HMjQwMDA2LEVHLUxPRS1HMjQwMDA3LEVHLUxPRS1HMjQwMDA4LEVHLUxPRS1HMjQwMDA5LEVHLVVQRS1HMjkwMDAxLEVHLVVQRS1HMjkwMDAyLEVHLVVQRS1HMjkwMDAzLEVHLVVQRS1HMjkwMDA0LEVHLVVQRS1HMjkwMDA1LEVHLVVQRS1HMjkwMDA2LEVHLVVQRS1HMjkwMDA3LEVHLVVQRS1HMjkwMDA4LEVHLVVSRy1HMzAwMDAxLEVHLVVSRy1HMzAwMDAyLEVHLVVSRy1HMzAwMDAzLEVHLVVSRy1HMzAwMDA0CisxLFR1ZSAyNSBKYW4gMTEsMTQ3ODA2LjY4NTQ5Mjk5NjU2LDEzMTk2OS43ODk3NzAwNzA4Nyw3NjgxNy4xNTkyNDUxMTQ3NywxNTg4MDEuMjQ1OTc1NzQyNTIsMTYwMDcwLjA2MTAzMzUwMzUsMjU4NzU5NS4yODEwODkwNjkzLDI4MTE5MzcuMTExMjY4MzQ5NSwyMzA0NjUxLjAyNTk1MDI0OTgsMjAwMTgyMS45ODkzODcwNTY4LDI1MDI3ODEuNTMxNDA0OTExNSw1MDgyNDEuMzI4MjM3NjIyMTYsMjk3MTA4NC45ODk3MDM2MTQ3LDU4Nzk5NC44NDUxMDk1MDE2LDE1NjA4OTkuOTkwODIwODQwMiwxMzk1MTYwLjA4NDY4NzE0MDgsMzIwMjcxMi4xMTI1MDAzNzQsMjMyMDIzOC40NjY1MjE2NjksNjUyNTM3LjEwNzc5MzA1NTksMTg5OTE3OS4yMDkxNjU2MzY1LDEyNjQ4MDAuMjMyMzgwODA2LDE4Njg1MDYuNzQ0NzIzNTIxNCwyMDc0OTI5LjM3OTg1Mjk0NjQsMTg0NTgzNy44ODM1MTU4NzMyLDQyMDc1NDcuNTE3NjA0NDk0NSwyNjgzMjIuNTc2NjgwMDU4MiwzMzU5LjYyOTkyMTk5MDg0OTcKKzIsV2VkIDI2IEphbiAxMSwxNDc4MDYuODMzMjk5NzU2MDUsMTMxOTY5LjkyMTczOTkyNjYyLDc2ODE3LjIzNjA2MjMxMjQzLDE1ODgwMS40MDQ3NzcwNjc4MywxNjAwNzAuMjIxMTAzNjQ0NiwyNTg3NTk3Ljg2ODY4NTY0MzcsMjgxMTkzOS45MjMyMDY4NjUsMjMwNDY1My4zMzA2MDI0MywyMDAxODIzLjk5MTIxMDA0NzYsMjUwMjc4NC4wMzQxODc2OTM2LDUwODI0MS44MzY0NzkyMDQ0LDI5NzEwODcuOTYwNzkwMDg5Myw1ODc5OTUuNDMzMTA0NjQwOCwxNTYwOTAxLjU1MTcyMTYxMzIsMTM5NTE2MS40Nzk4NDc5MjIyLDMyMDI3MTUuMzE1MjE0MDg4NywyMzIwMjQwLjc4Njc2MTI5NzQsNjUyNTM3Ljc2MDMzMDQ4OTYsMTg5OTE4MS4xMDgzNDU3OTYsMTI2NDgwMS40OTcxODE2NzEsMTg2ODUwOC42MTMyMzEyMDAzLDIwNzQ5MzEuNDU0NzgzMzY0NywxODQ1ODM5LjcyOTM1NDY3OTEsNDIwNzU1MS43MjUxNTQxMTcsMjY4MzIyLjg0NTAwMjc2ODg1LDMzNTkuNjMzMjgxNjIyNDUzCiszLFRodSAyNyBKYW4gMTEsMTQ3ODA2Ljk4MTEwNjY2MzI0LDEzMTk3MC4wNTM3MDk5MTQyNyw3NjgxNy4zMTI4Nzk1ODY4NSwxNTg4MDEuNTYzNTc4NTUxOTYsMTYwMDcwLjM4MTE3Mzk0NTc2LDI1ODc2MDAuNDU2Mjg0ODA1LDI4MTE5NDIuNzM1MTQ4MTkzMywyMzA0NjU1LjYzNTI1NjkxMDcsMjAwMTgyNS45OTMwMzUwNCwyNTAyNzg2LjUzNjk3Mjk3ODYsNTA4MjQyLjM0NDcyMTI5NDksMjk3MTA5MC45MzE4Nzk1MzUzLDU4Nzk5Ni4wMjExMDAzNjc3LDE1NjA5MDMuMTEyNjIzOTQ1LDEzOTUxNjIuODc1MDEwMDk5NSwzMjAyNzE4LjUxNzkzMTAwNSwyMzIwMjQzLjEwNzAwMzI0NCw2NTI1MzguNDEyODY4NTc2NSwxODk5MTgzLjAwNzUyNzg1MzgsMTI2NDgwMi43NjE5ODM4LDE4Njg1MTAuNDgxNzQwNzQ3MywyMDc0OTMzLjUyOTcxNTg1NzIsMTg0NTg0MS41NzUxOTUzMzExLDQyMDc1NTUuOTMyNzA3OTQ1LDI2ODMyMy4xMTMzMjU3NDc5NSwzMzU5LjYzNjY0MTI1NzQxNAorNCxGcmkgMjggSmFuIDExLDE0NzgwNy4xMjg5MTM3MTgyNSwxMzE5NzAuMTg1NjgwMDMzOSw3NjgxNy4zODk2OTY5MzgxNywxNTg4MDEuNzIyMzgwMTk0OTMsMTYwMDcwLjU0MTI0NDQwNjkyLDI1ODc2MDMuMDQzODg2NTU0NCwyODExOTQ1LjU0NzA5MjMzNCwyMzA0NjU3LjkzOTkxMzY5OSwyMDAxODI3Ljk5NDg2MjAzNDIsMjUwMjc4OS4wMzk3NjA3NjgsNTA4MjQyLjg1Mjk2Mzg5MzczLDI5NzEwOTMuOTAyOTcxOTUyLDU4Nzk5Ni42MDkwOTY2ODI5LDE1NjA5MDQuNjczNTI3ODM4MiwxMzk1MTY0LjI3MDE3MzY3MTIsMzIwMjcyMS43MjA2NTExMjQ2LDIzMjAyNDUuNDI3MjQ3NTExLDY1MjUzOS4wNjU0MDczMTU1LDE4OTkxODQuOTA2NzExODExLDEyNjQ4MDQuMDI2Nzg3MTk0MiwxODY4NTEyLjM1MDI1MjE2MzEsMjA3NDkzNS42MDQ2NTA0MjQsMTg0NTg0My40MjEwMzc4Mjg1LDQyMDc1NjAuMTQwMjY1OTgyLDI2ODMyMy4zODE2NDg5OTU0NSwzMzU5LjY0MDAwMDg5NTczNTMKKzUsU2F0IDI5IEphbiAxMSwxNDc4MDcuMjc2NzIwOTIxMSwxMzE5NzAuMzE3NjUwMjg1Niw3NjgxNy40NjY1MTQzNjYyNywxNTg4MDEuODgxMTgxOTk2NywxNjAwNzAuNzAxMzE1MDI4MiwyNTg3NjA1LjYzMTQ5MDg5MiwyODExOTQ4LjM1OTAzOTI4NjYsMjMwNDY2MC4yNDQ1NzI3OTEsMjAwMTgyOS45OTY2OTEwMzAyLDI1MDI3OTEuNTQyNTUxMDU5LDUwODI0My4zNjEyMDcwMDA5LDI5NzEwOTYuODc0MDY3MzQsNTg3OTk3LjE5NzA5MzU4NTksMTU2MDkwNi4yMzQ0MzMyOTIyLDEzOTUxNjUuNjY1MzM4NjM5LDMyMDI3MjQuOTIzMzc0NDQ2LDIzMjAyNDcuNzQ3NDk0MDk4Nyw2NTI1MzkuNzE3OTQ2NzA3MywxODk5MTg2LjgwNTg5NzY2NzUsMTI2NDgwNS4yOTE1OTE4NTMsMTg2ODUxNC4yMTg3NjU0NDc2LDIwNzQ5MzcuNjc5NTg3MDY2MiwxODQ1ODQ1LjI2Njg4MjE3MjgsNDIwNzU2NC4zNDc4MjgyMjUsMjY4MzIzLjY0OTk3MjUxMTE2LDMzNTkuNjQzMzYwNTM3NDE2Cis2LFN1biAzMCBKYW4gMTEsMTQ3ODA3LjQyNDUyODI3MTc1LDEzMTk3MC40NDk2MjA2NjkzLDc2ODE3LjU0MzMzMTg3MTE2LDE1ODgwMi4wMzk5ODM5NTcyNSwxNjAwNzAuODYxMzg1ODA5NTIsMjU4NzYwOC4yMTkwOTc4MTczLDI4MTE5NTEuMTcwOTg5MDUxLDIzMDQ2NjIuNTQ5MjM0MTg4LDIwMDE4MzEuOTk4NTIyMDI3OSwyNTAyNzk0LjA0NTM0Mzg1MzUsNTA4MjQzLjg2OTQ1MDYxNjEsMjk3MTA5OS44NDUxNjU2OTksNTg3OTk3Ljc4NTA5MTA3NzEsMTU2MDkwNy43OTUzNDAzMDcsMTM5NTE2Ny4wNjA1MDUwMDIzLDMyMDI3MjguMTI2MTAwOTcyLDIzMjAyNTAuMDY3NzQzMDA2Niw2NTI1NDAuMzcwNDg2NzUxNSwxODk5MTg4LjcwNTA4NTQyMzMsMTI2NDgwNi41NTYzOTc3NzY2LDE4Njg1MTYuMDg3MjgwNjAwNiwyMDc0OTM5Ljc1NDUyNTc4MjUsMTg0NTg0Ny4xMTI3MjgzNjI3LDQyMDc1NjguNTU1Mzk0Njc2NSwyNjgzMjMuOTE4Mjk2Mjk1MywzMzU5LjY0NjcyMDE4MjQ1NTcKKzcsTW9uIDMxIEphbiAxMSwxNDc4MDcuNTcyMzM1NzcwMjcsMTMxOTcwLjU4MTU5MTE4NDkyLDc2ODE3LjYyMDE0OTQ1MjkxLDE1ODgwMi4xOTg3ODYwNzY2LDE2MDA3MS4wMjE0NTY3NTA5NSwyNTg3NjEwLjgwNjcwNzMzLDI4MTE5NTMuOTgyOTQxNjI4NCwyMzA0NjY0Ljg1Mzg5Nzg5MSwyMDAxODM0LjAwMDM1NTAyNzYsMjUwMjc5Ni41NDgxMzkxNTAzLDUwODI0NC4zNzc2OTQ3Mzk3LDI5NzExMDIuODE2MjY3MDI5LDU4Nzk5OC4zNzMwODkxNTYxLDE1NjA5MDkuMzU2MjQ4ODgyNiwxMzk1MTY4LjQ1NTY3Mjc2MDMsMzIwMjczMS4zMjg4MzA2OTk0LDIzMjAyNTIuMzg3OTk0MjMzNSw2NTI1NDEuMDIzMDI3NDQ4MywxODk5MTkwLjYwNDI3NTA3NzgsMTI2NDgwNy44MjEyMDQ5NjUyLDE4Njg1MTcuOTU1Nzk3NjIyNCwyMDc0OTQxLjgyOTQ2NjU3NSwxODQ1ODQ4Ljk1ODU3NjM5ODQsNDIwNzU3Mi43NjI5NjUzMzU1LDI2ODMyNC4xODY2MjAzNDc3LDMzNTkuNjUwMDc5ODMwODU1Cis4LFR1ZSAxIEZlYiAxMSwxNDc4MDcuNzIwMTQzNDE2NTUsMTMxOTcwLjcxMzU2MTgzMjUzLDc2ODE3LjY5Njk2NzExMTQ4LDE1ODgwMi4zNTc1ODgzNTQ3NiwxNjAwNzEuMTgxNTI3ODUyNDYsMjU4NzYxMy4zOTQzMTk0MzEsMjgxMTk1Ni43OTQ4OTcwMTcsMjMwNDY2Ny4xNTg1NjM4OTcsMjAwMTgzNi4wMDIxOTAwMjksMjUwMjc5OS4wNTA5MzY5NSw1MDgyNDQuODg1OTM5MzcxNSwyOTcxMTA1Ljc4NzM3MTMzMTQsNTg3OTk4Ljk2MTA4NzgyMywxNTYwOTEwLjkxNzE1OTAxOTUsMTM5NTE2OS44NTA4NDE5MTM2LDMyMDI3MzQuNTMxNTYzNjMsMjMyMDI1NC43MDgyNDc3ODEzLDY1MjU0MS42NzU1Njg3OTc1LDE4OTkxOTIuNTAzNDY2NjMxMywxMjY0ODA5LjA4NjAxMzQxODQsMTg2ODUxOS44MjQzMTY1MTI4LDIwNzQ5NDMuOTA0NDA5NDQxNCwxODQ1ODUwLjgwNDQyNjI3OTksNDIwNzU3Ni45NzA1NDAyMDEsMjY4MzI0LjQ1NDk0NDY2ODU3LDMzNTkuNjUzNDM5NDgyNjE0NAorOSxXZWQgMiBGZWIgMTEsMTQ3ODA3Ljg2Nzk1MTIxMDU2LDEzMTk3MC44NDU1MzI2MTIxLDc2ODE3Ljc3Mzc4NDg0Njg1LDE1ODgwMi41MTYzOTA3OTE3NCwxNjAwNzEuMzQxNTk5MTE0MDQsMjU4NzYxNS45ODE5MzQxMTksMjgxMTk1OS42MDY4NTUyMTgsMjMwNDY2OS40NjMyMzIyMDc2LDIwMDE4MzguMDA0MDI3MDMyLDI1MDI4MDEuNTUzNzM3MjUyLDUwODI0NS4zOTQxODQ1MTE3LDI5NzExMDguNzU4NDc4NjA0Myw1ODc5OTkuNTQ5MDg3MDc4LDE1NjA5MTIuNDc4MDcwNzE2OCwxMzk1MTcxLjI0NjAxMjQ2MiwzMjAyNzM3LjczNDI5OTc2MywyMzIwMjU3LjAyODUwMzY0OTQsNjUyNTQyLjMyODExMDc5OTIsMTg5OTE5NC40MDI2NjAwODQ0LDEyNjQ4MTAuMzUwODIzMTM3MiwxODY4NTIxLjY5MjgzNzI3MTYsMjA3NDk0NS45NzkzNTQzODMyLDE4NDU4NTIuNjUwMjc4MDA3MSw0MjA3NTgxLjE3ODExOTI3NSwyNjgzMjQuNzIzMjY5MjU3NjQsMzM1OS42NTY3OTkxMzc3MzQ3CisxMCxUaHUgMyBGZWIgMTEsMTQ3ODA4LjAxNTc1OTE1MjQsMTMxOTcwLjk3NzUwMzUyMzY0LDc2ODE3Ljg1MDYwMjY1OTAzLDE1ODgwMi42NzUxOTMzODc1LDE2MDA3MS41MDE2NzA1MzU2NSwyNTg3NjE4LjU2OTU1MTM5NTMsMjgxMTk2Mi40MTg4MTYyMzEsMjMwNDY3MS43Njc5MDI4MjQsMjAwMTg0MC4wMDU4NjYwMzcyLDI1MDI4MDQuMDU2NTQwMDU3LDUwODI0NS45MDI0MzAxNTk4NSwyOTcxMTExLjcyOTU4ODg0OCw1ODgwMDAuMTM3MDg2OTIxNSwxNTYwOTE0LjAzODk4Mzk3NiwxMzk1MTcyLjY0MTE4NDQwNTcsMzIwMjc0MC45MzcwMzkwOTgsMjMyMDI1OS4zNDg3NjE4Mzg0LDY1MjU0Mi45ODA2NTM0NTM2LDE4OTkxOTYuMzAxODU1NDM3LDEyNjQ4MTEuNjE1NjM0MTIwOCwxODY4NTIzLjU2MTM1OTg5ODcsMjA3NDk0OC4wNTQzMDE0MDA0LDE4NDU4NTQuNDk2MTMxNTgwMyw0MjA3NTg1LjM4NTcwMjU1NywyNjgzMjQuOTkxNTk0MTE1MDQsMzM1OS42NjAxNTg3OTYyMTIKKzExLEZyaSA0IEZlYiAxMSwxNDc4MDguMTYzNTY3MjQyMDcsMTMxOTcxLjEwOTQ3NDU2NzE0LDc2ODE3LjkyNzQyMDU0ODA2LDE1ODgwMi44MzM5OTYxNDIxMiwxNjAwNzEuNjYxNzQyMTE3MzQsMjU4NzYyMS4xNTcxNzEyNTg3LDI4MTE5NjUuMjMwNzgwMDU2LDIzMDQ2NzQuMDcyNTc1NzQ0LDIwMDE4NDIuMDA3NzA3MDQzOCwyNTAyODA2LjU1OTM0NTM2NDYsNTA4MjQ2LjQxMDY3NjMxNjUsMjk3MTExNC43MDA3MDIwNjM3LDU4ODAwMC43MjUwODczNTIzLDE1NjA5MTUuNTk5ODk4Nzk1NCwxMzk1MTc0LjAzNjM1Nzc0NDYsMzIwMjc0NC4xMzk3ODE2MzY3LDIzMjAyNjEuNjY5MDIyMzQ4LDY1MjU0My42MzMxOTY3NjA3LDE4OTkxOTguMjAxMDUyNjg4LDEyNjQ4MTIuODgwNDQ2MzY4OCwxODY4NTI1LjQyOTg4NDM5NDIsMjA3NDk1MC4xMjkyNTA0OTIsMTg0NTg1Ni4zNDE5ODY5OTkxLDQyMDc1ODkuNTkzMjkwMDQ3LDI2ODMyNS4yNTk5MTkyNDA4NCwzMzU5LjY2MzUxODQ1ODA1MgorMTIsU2F0IDUgRmViIDExLDE0NzgwOC4zMTEzNzU0Nzk1MywxMzE5NzEuMjQxNDQ1NzQyNjMsNzY4MTguMDA0MjM4NTEzOTEsMTU4ODAyLjk5Mjc5OTA1NTUzLDE2MDA3MS44MjE4MTM4NTkxMywyNTg3NjIzLjc0NDc5MzcwOTQsMjgxMTk2OC4wNDI3NDY2OTMsMjMwNDY3Ni4zNzcyNTA5Njg1LDIwMDE4NDQuMDA5NTUwMDUyNywyNTAyODA5LjA2MjE1MzE3NTUsNTA4MjQ2LjkxODkyMjk4MTQsMjk3MTExNy42NzE4MTgyNDk0LDU4ODAwMS4zMTMwODgzNzE3LDE1NjA5MTcuMTYwODE1MTc2MywxMzk1MTc1LjQzMTUzMjQ3ODcsMzIwMjc0Ny4zNDI1MjczNzgsMjMyMDI2My45ODkyODUxNzcsNjUyNTQ0LjI4NTc0MDcyMDEsMTg5OTIwMC4xMDAyNTE4Mzg4LDEyNjQ4MTQuMTQ1MjU5ODgyLDE4Njg1MjcuMjk4NDEwNzU4NiwyMDc0OTUyLjIwNDIwMTY1ODUsMTg0NTg1OC4xODc4NDQyNjM2LDQyMDc1OTMuODAwODgxNzQzLDI2ODMyNS41MjgyNDQ2MzQ5LDMzNTkuNjY2ODc4MTIzMjUKKzEzLFN1biA2IEZlYiAxMSwxNDc4MDguNDU5MTgzODY0ODIsMTMxOTcxLjM3MzQxNzA1MDAyLDc2ODE4LjA4MTA1NjU1NjU4LDE1ODgwMy4xNTE2MDIxMjc3NiwxNjAwNzEuOTgxODg1NzYwOTYsMjU4NzYyNi4zMzI0MTg3NDc3LDI4MTE5NzAuODU0NzE2MTQyLDIzMDQ2NzguNjgxOTI4NDk3MywyMDAxODQ2LjAxMTM5NTA2MzMsMjUwMjgxMS41NjQ5NjM0ODg0LDUwODI0Ny40MjcxNzAxNTQzNSwyOTcxMTIwLjY0MjkzNzQwNyw1ODgwMDEuOTAxMDg5OTc4OSwxNTYwOTE4LjcyMTczMzExNzcsMTM5NTE3Ni44MjY3MDg2MDc4LDMyMDI3NTAuNTQ1Mjc2MzIyNCwyMzIwMjY2LjMwOTU1MDMyNjMsNjUyNTQ0LjkzODI4NTMzMiwxODk5MjAxLjk5OTQ1Mjg4OSwxMjY0ODE1LjQxMDA3NDY1OTYsMTg2ODUyOS4xNjY5Mzg5OTA4LDIwNzQ5NTQuMjc5MTU0OSwxODQ1ODYwLjAzMzcwMzM3NDIsNDIwNzU5OC4wMDg0Nzc2NDksMjY4MzI1Ljc5NjU3MDI5NzMzLDMzNTkuNjcwMjM3NzkxODA3NworMTQsTW9uIDcgRmViIDExLDE0NzgwOC42MDY5OTIzOTc5MiwxMzE5NzEuNTA1Mzg4NDg5NDMsNzY4MTguMTU3ODc0Njc2MDYsMTU4ODAzLjMxMDQwNTM1ODgsMTYwMDcyLjE0MTk1NzgyMjg3LDI1ODc2MjguOTIwMDQ2Mzc1LDI4MTE5NzMuNjY2Njg4NDAzNiwyMzA0NjgwLjk4NjYwODMzMjUsMjAwMTg0OC4wMTMyNDIwNzU3LDI1MDI4MTQuMDY3Nzc2MzA0Nyw1MDgyNDcuOTM1NDE3ODM1NjYsMjk3MTEyMy42MTQwNTk1MzY3LDU4ODAwMi40ODkwOTIxNzQxLDE1NjA5MjAuMjgyNjUyNjIsMTM5NTE3OC4yMjE4ODYxMzE3LDMyMDI3NTMuNzQ4MDI4NDY5LDIzMjAyNjguNjI5ODE3Nzk1NSw2NTI1NDUuNTkwODMwNTk2NywxODk5MjAzLjg5ODY1NTgzNzksMTI2NDgxNi42NzQ4OTA3MDI0LDE4Njg1MzEuMDM1NDY5MDkyMiwyMDc0OTU2LjM1NDExMDIxNjcsMTg0NTg2MS44Nzk1NjQzMzExLDQyMDc2MDIuMjE2MDc3NzYsMjY4MzI2LjA2NDg5NjIyODEsMzM1OS42NzM1OTc0NjM3MjU0CisxNSxUdWUgOCBGZWIgMTEsMTQ3ODA4Ljc1NDgwMTA3ODgyLDEzMTk3MS42MzczNjAwNjA4LDc2ODE4LjIzNDY5Mjg3MjM0LDE1ODgwMy40NjkyMDg3NDg1NywxNjAwNzIuMzAyMDMwMDQ0ODcsMjU4NzYzMS41MDc2NzY1ODksMjgxMTk3Ni40Nzg2NjM0NzY2LDIzMDQ2ODMuMjkxMjkwNDcxMywyMDAxODUwLjAxNTA5MTA4OTUsMjUwMjgxNi41NzA1OTE2MjQ0LDUwODI0OC40NDM2NjYwMjUzLDI5NzExMjYuNTg1MTg0NjM1Niw1ODgwMDMuMDc3MDk0OTU3LDE1NjA5MjEuODQzNTczNjgzMiwxMzk1MTc5LjYxNzA2NTA1MDYsMzIwMjc1Ni45NTA3ODM4MTgsMjMyMDI3MC45NTAwODc1ODYsNjUyNTQ2LjI0MzM3NjUxMzgsMTg5OTIwNS43OTc4NjA2ODYyLDEyNjQ4MTcuOTM5NzA4MDA5NiwxODY4NTMyLjkwNDAwMTA2MTgsMjA3NDk1OC40MjkwNjc2MDc3LDE4NDU4NjMuNzI1NDI3MTMzNSw0MjA3NjA2LjQyMzY4MjA4MSwyNjgzMjYuMzMzMjIyNDI3MSwzMzU5LjY3Njk1NzEzOTAwMjgKKzE2LFdlZCA5IEZlYiAxMSwxNDc4MDguOTAyNjA5OTA3NTMsMTMxOTcxLjc2OTMzMTc2NDE0LDc2ODE4LjMxMTUxMTE0NTQxLDE1ODgwMy42MjgwMTIyOTcxNSwxNjAwNzIuNDYyMTAyNDI2OTQsMjU4NzYzNC4wOTUzMDkzODkzLDI4MTE5NzkuMjkwNjQxMzYwNSwyMzA0Njg1LjU5NTk3NDkxNSwyMDAxODUyLjAxNjk0MjEwNTUsMjUwMjgxOS4wNzM0MDk0NDY1LDUwODI0OC45NTE5MTQ3MjMxNSwyOTcxMTI5LjU1NjMxMjcwNyw1ODgwMDMuNjY1MDk4MzI4LDE1NjA5MjMuNDA0NDk2MzA3NSwxMzk1MTgxLjAxMjI0NTM2NTIsMzIwMjc2MC4xNTM1NDIzNjk2LDIzMjAyNzMuMjcwMzU5Njk3LDY1MjU0Ni44OTU5MjMwODM4LDE4OTkyMDcuNjk3MDY3NDMzLDEyNjQ4MTkuMjA0NTI2NTgxOCwxODY4NTM0Ljc3MjUzNDkwMDMsMjA3NDk2MC41MDQwMjcwNzQ3LDE4NDU4NjUuNTcxMjkxNzgyLDQyMDc2MTAuNjMxMjkwNjA4LDI2ODMyNi42MDE1NDg4OTQ1LDMzNTkuNjgwMzE2ODE3NjM5MworMTcsVGh1IDEwIEZlYiAxMSwxNDc4MDkuMDUwNDE4ODg0LDEzMTk3MS45MDEzMDM1OTk0Nyw3NjgxOC4zODgzMjk0OTUzMywxNTg4MDMuNzg2ODE2MDA0NTgsMTYwMDcyLjYyMjE3NDk2OTEsMjU4NzYzNi42ODI5NDQ3NzksMjgxMTk4Mi4xMDI2MjIwNTczLDIzMDQ2ODcuOTAwNjYxNjYzLDIwMDE4NTQuMDE4Nzk1MTIzNiwyNTAyODIxLjU3NjIyOTc3MSw1MDgyNDkuNDYwMTYzOTI5MiwyOTcxMTMyLjUyNzQ0Mzc0OSw1ODgwMDQuMjUzMTAyMjg3MiwxNTYwOTI0Ljk2NTQyMDQ5MjIsMTM5NTE4Mi40MDc0MjcwNzUzLDMyMDI3NjMuMzU2MzA0MTI1LDIzMjAyNzUuNTkwNjM0MTI2LDY1MjU0Ny41NDg0NzAzMDU3LDE4OTkyMDkuNTk2Mjc2MDgsMTI2NDgyMC40NjkzNDY0MTksMTg2ODUzNi42NDEwNzA2MDcxLDIwNzQ5NjIuNTc4OTg4NjE2NiwxODQ1ODY3LjQxNzE1ODI3NjMsNDIwNzYxNC44Mzg5MDMzNDMsMjY4MzI2Ljg2OTg3NTYzMDIsMzM1OS42ODM2NzY0OTk2Mzc0CisxOCxGcmkgMTEgRmViIDExLDE0NzgwOS4xOTgyMjgwMDgzNSwxMzE5NzIuMDMzMjc1NTY2Nyw3NjgxOC40NjUxNDc5MjIwOSwxNTg4MDMuOTQ1NjE5ODcwNzYsMTYwMDcyLjc4MjI0NzY3MTMzLDI1ODc2MzkuMjcwNTgyNzU1NiwyODExOTg0LjkxNDYwNTU2NiwyMzA0NjkwLjIwNTM1MDcxNiwyMDAxODU2LjAyMDY1MDE0MywyNTAyODI0LjA3OTA1MjU5OCw1MDgyNDkuOTY4NDEzNjQzNTQsMjk3MTEzNS40OTg1Nzc3NjI0LDU4ODAwNC44NDExMDY4MzQyLDE1NjA5MjYuNTI2MzQ2MjM4NiwxMzk1MTgzLjgwMjYxMDE4MDMsMzIwMjc2Ni41NTkwNjkwODIsMjMyMDI3Ny45MTA5MTA4NzcsNjUyNTQ4LjIwMTAxODE4MDcsMTg5OTIxMS40OTU0ODY2MjY0LDEyNjQ4MjEuNzM0MTY3NTIwNCwxODY4NTM4LjUwOTYwODE4MjYsMjA3NDk2NC42NTM5NTIyMzI4LDE4NDU4NjkuMjYzMDI2NjE2Myw0MjA3NjE5LjA0NjUyMDI4NSwyNjgzMjcuMTM4MjAyNjM0MywzMzU5LjY4NzAzNjE4NDk5MzgKKzE5LFNhdCAxMiBGZWIgMTEsMTQ3ODA5LjM0NjAzNzI4MDQzLDEzMTk3Mi4xNjUyNDc2NjU5Miw3NjgxOC41NDE5NjY0MjU2NSwxNTg4MDQuMTA0NDIzODk1NzQsMTYwMDcyLjk0MjMyMDUzMzYyLDI1ODc2NDEuODU4MjIzMzE5LDI4MTE5ODcuNzI2NTkxODg2NSwyMzA0NjkyLjUxMDA0MjA3NCwyMDAxODU4LjAyMjUwNzE2NDksMjUwMjgyNi41ODE4Nzc5Mjg3LDUwODI1MC40NzY2NjM4NjYxLDI5NzExMzguNDY5NzE0NzQ2Myw1ODgwMDUuNDI5MTExOTY5OCwxNTYwOTI4LjA4NzI3MzU0NTYsMTM5NTE4NS4xOTc3OTQ2ODAzLDMyMDI3NjkuNzYxODM3MjQyNiwyMzIwMjgwLjIzMTE4OTk0Nyw2NTI1NDguODUzNTY2NzA3OSwxODk5MjEzLjM5NDY5OTA3MTUsMTI2NDgyMi45OTg5ODk4ODc1LDE4Njg1NDAuMzc4MTQ3NjI2NSwyMDc0OTY2LjcyODkxNzkyNCwxODQ1ODcxLjEwODg5NjgwMTcsNDIwNzYyMy4yNTQxNDE0MzYsMjY4MzI3LjQwNjUyOTkwNjYsMzM1OS42OTAzOTU4NzM3MQorMjAsU3VuIDEzIEZlYiAxMSwxNDc4MDkuNDkzODQ2NzAwMzgsMTMxOTcyLjI5NzIxOTg5NzE1LDc2ODE4LjYxODc4NTAwNjAyLDE1ODgwNC4yNjMyMjgwNzk2LDE2MDA3My4xMDIzOTM1NTU5NSwyNTg3NjQ0LjQ0NTg2NjQ3MjYsMjgxMTk5MC41Mzg1ODEwMTksMjMwNDY5NC44MTQ3MzU3MzYsMjAwMTg2MC4wMjQzNjYxODc5LDI1MDI4MjkuMDg0NzA1NzYxNiw1MDgyNTAuOTg0OTE0NTk2OSwyOTcxMTQxLjQ0MDg1NDcwMSw1ODgwMDYuMDE3MTE3NjkyOSwxNTYwOTI5LjY0ODIwMjQxMzIsMTM5NTE4Ni41OTI5ODA1NzYsMzIwMjc3Mi45NjQ2MDg2MDYsMjMyMDI4Mi41NTE0NzEzMzc3LDY1MjU0OS41MDYxMTU4ODc4LDE4OTkyMTUuMjkzOTEzNDE1NCwxMjY0ODI0LjI2MzgxMzUxODcsMTg2ODU0Mi4yNDY2ODg5Mzk0LDIwNzQ5NjguODAzODg1NjksMTg0NTg3Mi45NTQ3Njg4MzQsNDIwNzYyNy40NjE3NjY3OTQsMjY4MzI3LjY3NDg1NzQ0NzMsMzM1OS42OTM3NTU1NjU3ODU1CisyMSxNb24gMTQgRmViIDExLDE0NzgwOS42NDE2NTYyNjgxNiwxMzE5NzIuNDI5MTkyMjYwMzQsNzY4MTguNjk1NjAzNjYzMiwxNTg4MDQuNDIyMDMyNDIyMjQsMTYwMDczLjI2MjQ2NjczODM4LDI1ODc2NDcuMDMzNTEyMjEyLDI4MTE5OTMuMzUwNTcyOTYzMiwyMzA0Njk3LjExOTQzMTcwMzQsMjAwMTg2Mi4wMjYyMjcyMTI3LDI1MDI4MzEuNTg3NTM2MDk3NSw1MDgyNTEuNDkzMTY1ODM2LDI5NzExNDQuNDExOTk3NjI3NSw1ODgwMDYuNjA1MTI0MDAzOCwxNTYwOTMxLjIwOTEzMjg0MTYsMTM5NTE4Ny45ODgxNjc4NjY4LDMyMDI3NzYuMTY3MzgzMTczLDIzMjAyODQuODcxNzU1MDQ5Niw2NTI1NTAuMTU4NjY1NzIwMSwxODk5MjE3LjE5MzEyOTY1ODUsMTI2NDgyNS41Mjg2Mzg0MTUsMTg2ODU0NC4xMTUyMzIxMiwyMDc0OTcwLjg3ODg1NTUzMTMsMTg0NTg3NC44MDA2NDI3MTE4LDQyMDc2MzEuNjY5Mzk2MzYxLDI2ODMyNy45NDMxODUyNTYyNywzMzU5LjY5NzExNTI2MTIyMQorMjIsVHVlIDE1IEZlYiAxMSwxNDc4MDkuNzg5NDY1OTgzNzIsMTMxOTcyLjU2MTE2NDc1NTU1LDc2ODE4Ljc3MjQyMjM5NzIzLDE1ODgwNC41ODA4MzY5MjM2NSwxNjAwNzMuNDIyNTQwMDgwODgsMjU4NzY0OS42MjExNjA1MzkzLDI4MTE5OTYuMTYyNTY3NzIsMjMwNDY5OS40MjQxMjk5NzUsMjAwMTg2NC4wMjgwOTAyMzk3LDI1MDI4MzQuMDkwMzY4OTM2Myw1MDgyNTIuMDAxNDE3NTgzMiwyOTcxMTQ3LjM4MzE0MzUyNiw1ODgwMDcuMTkzMTMwOTAzMiwxNTYwOTMyLjc3MDA2NDgzMSwxMzk1MTg5LjM4MzM1NjU1MjYsMzIwMjc3OS4zNzAxNjA5NDE1LDIzMjAyODcuMTkyMDQxMDgyLDY1MjU1MC44MTEyMTYyMDQ5LDE4OTkyMTkuMDkyMzQ3ODAxMiwxMjY0ODI2Ljc5MzQ2NDU3NjEsMTg2ODU0NS45ODM3NzcxNjk0LDIwNzQ5NzIuOTUzODI3NDQ3NSwxODQ1ODc2LjY0NjUxODQzNTMsNDIwNzYzNS44NzcwMzAxMzQsMjY4MzI4LjIxMTUxMzMzMzcsMzM1OS43MDA0NzQ5NjAwMTY0CisyMyxXZWQgMTYgRmViIDExLDE0NzgwOS45MzcyNzU4NDcwNywxMzE5NzIuNjkzMTM3MzgyNyw3NjgxOC44NDkyNDEyMDgwNywxNTg4MDQuNzM5NjQxNTgzOSwxNjAwNzMuNTgyNjEzNTgzNDUsMjU4NzY1Mi4yMDg4MTE0NTQsMjgxMTk5OC45NzQ1NjUyODksMjMwNDcwMS43Mjg4MzA1NTEzLDIwMDE4NjYuMDI5OTU1MjY4OCwyNTAyODM2LjU5MzIwNDI3OCw1MDgyNTIuNTA5NjY5ODM4NzYsMjk3MTE1MC4zNTQyOTIzOTUsNTg4MDA3Ljc4MTEzODM5MDMsMTU2MDkzNC4zMzA5OTgzODE2LDEzOTUxOTAuNzc4NTQ2NjMzNCwzMjAyNzgyLjU3Mjk0MTkxMzMsMjMyMDI4OS41MTIzMjk0MzM2LDY1MjU1MS40NjM3NjczNDI0LDE4OTkyMjAuOTkxNTY3ODQzLDEyNjQ4MjguMDU4MjkyMDAxNywxODY4NTQ3Ljg1MjMyNDA4OCwyMDc0OTc1LjAyODgwMTQzODksMTg0NTg3OC40OTIzOTYwMDUsNDIwNzY0MC4wODQ2NjgxMTYsMjY4MzI4LjQ3OTg0MTY3OTMzLDMzNTkuNzAzODM0NjYyMTcxCisyNCxUaHUgMTcgRmViIDExLDE0NzgxMC4wODUwODU4NTgyNCwxMzE5NzIuODI1MTEwMTQxODMsNzY4MTguOTI2MDYwMDk1NywxNTg4MDQuODk4NDQ2NDAyOTIsMTYwMDczLjc0MjY4NzI0NjEsMjU4NzY1NC43OTY0NjQ5NTY0LDI4MTIwMDEuNzg2NTY1NjY5MywyMzA0NzA0LjAzMzUzMzQzMiwyMDAxODY4LjAzMTgyMjI5OTYsMjUwMjgzOS4wOTYwNDIxMjIsNTA4MjUzLjAxNzkyMjYwMjYsMjk3MTE1My4zMjU0NDQyMzU1LDU4ODAwOC4zNjkxNDY0NjU2LDE1NjA5MzUuODkxOTMzNDkzMywxMzk1MTkyLjE3MzczODEwOTYsMzIwMjc4NS43NzU3MjYwODc0LDIzMjAyOTEuODMyNjIwMTA1Nyw2NTI1NTIuMTE2MzE5MTMyNiwxODk5MjIyLjg5MDc4OTc4NCwxMjY0ODI5LjMyMzEyMDY5MjcsMTg2ODU0OS43MjA4NzI4NzQ2LDIwNzQ5NzcuMTAzNzc3NTA1NywxODQ1ODgwLjMzODI3NTQyMDUsNDIwNzY0NC4yOTIzMTAzMDMsMjY4MzI4Ljc0ODE3MDI5MzM0LDMzNTkuNzA3MTk0MzY3Njg2NQorMjUsRnJpIDE4IEZlYiAxMSwxNDc4MTAuMjMyODk2MDE3MjYsMTMxOTcyLjk1NzA4MzAzMjkzLDc2ODE5LjAwMjg3OTA2MDIsMTU4ODA1LjA1NzI1MTM4MDc2LDE2MDA3My45MDI3NjEwNjg4LDI1ODc2NTcuMzg0MTIxMDQ3MywyODEyMDA0LjU5ODU2ODg2MTQsMjMwNDcwNi4zMzgyMzg2MTc0LDIwMDE4NzAuMDMzNjkxMzMyMiwyNTAyODQxLjU5ODg4MjQ3LDUwODI1My41MjYxNzU4NzQ3LDI5NzExNTYuMjk2NTk5MDQ2Myw1ODgwMDguOTU3MTU1MTI4NywxNTYwOTM3LjQ1Mjg3MDE2NiwxMzk1MTkzLjU2ODkzMDk4MSwzMjAyNzg4Ljk3ODUxMzQ2NSwyMzIwMjk0LjE1MjkxMzA5ODcsNjUyNTUyLjc2ODg3MTU3NSwxODk5MjI0Ljc5MDAxMzYyNDgsMTI2NDgzMC41ODc5NTA2NDgzLDE4Njg1NTEuNTg5NDIzNTI5OCwyMDc0OTc5LjE3ODc1NTY0NjgsMTg0NTg4Mi4xODQxNTY2ODE2LDQyMDc2NDguNDk5OTU2NywyNjgzMjkuMDE2NDk5MTc1NzUsMzM1OS43MTA1NTQwNzY1NjA2CisyNixTYXQgMTkgRmViIDExLDE0NzgxMC4zODA3MDYzMjQwNywxMzE5NzMuMDg5MDU2MDU2MDIsNzY4MTkuMDc5Njk4MTAxNDksMTU4ODA1LjIxNjA1NjUxNzQ0LDE2MDA3NC4wNjI4MzUwNTE2MiwyNTg3NjU5Ljk3MTc3OTcyNTUsMjgxMjAwNy40MTA1NzQ4NjcsMjMwNDcwOC42NDI5NDYxMDgyLDIwMDE4NzIuMDM1NTYyMzY2NywyNTAyODQ0LjEwMTcyNTMyLDUwODI1NC4wMzQ0Mjk2NTUsMjk3MTE1OS4yNjc3NTY4Mjg2LDU4ODAwOS41NDUxNjQzOCwxNTYwOTM5LjAxMzgwODM5OTIsMTM5NTE5NC45NjQxMjUyNDc3LDMyMDI3OTIuMTgxMzA0MDQ1LDIzMjAyOTYuNDczMjA4NDEyLDY1MjU1My40MjE0MjQ2NzAzLDE4OTkyMjYuNjg5MjM5MzY0MSwxMjY0ODMxLjg1Mjc4MTg2ODUsMTg2ODU1My40NTc5NzYwNTM3LDIwNzQ5ODEuMjUzNzM1ODYzLDE4NDU4ODQuMDMwMDM5Nzg5LDQyMDc2NTIuNzA3NjA3MzA0LDI2ODMyOS4yODQ4MjgzMjY0LDMzNTkuNzEzOTEzNzg4Nzk0MworMjcsU3VuIDIwIEZlYiAxMSwxNDc4MTAuNTI4NTE2Nzc4NywxMzE5NzMuMjIxMDI5MjExMDcsNzY4MTkuMTU2NTE3MjE5NiwxNTg4MDUuMzc0ODYxODEyOTIsMTYwMDc0LjIyMjkwOTE5NDUsMjU4NzY2Mi41NTk0NDA5OTA0LDI4MTIwMTAuMjIyNTgzNjgzLDIzMDQ3MTAuOTQ3NjU1OTAzLDIwMDE4NzQuMDM3NDM1NDAzMywyNTAyODQ2LjYwNDU3MDY3MzMsNTA4MjU0LjU0MjY4Mzk0MzYsMjk3MTE2Mi4yMzg5MTc1ODMsNTg4MDEwLjEzMzE3NDIxOTIsMTU2MDk0MC41NzQ3NDgxOTMxLDEzOTUxOTYuMzU5MzIwOTA5NSwzMjAyNzk1LjM4NDA5NzgyNzYsMjMyMDI5OC43OTM1MDYwNDUsNjUyNTU0LjA3Mzk3ODQxOCwxODk5MjI4LjU4ODQ2NzAwMzMsMTI2NDgzMy4xMTc2MTQzNTM4LDE4Njg1NTUuMzI2NTMwNDQ1NCwyMDc0OTgzLjMyODcxODE1NDIsMTg0NTg4NS44NzU5MjQ3NDE0LDQyMDc2NTYuOTE1MjYyMTE1LDI2ODMyOS41NTMxNTc3NDU0LDMzNTkuNzE3MjczNTA0Mzg4CisyOCxNb24gMjEgRmViIDExLDE0NzgxMC42NzYzMjczODEwOCwxMzE5NzMuMzUzMDAyNDk4MDcsNzY4MTkuMjMzMzM2NDE0NTMsMTU4ODA1LjUzMzY2NzI2NzE4LDE2MDA3NC4zODI5ODM0OTc0NiwyNTg3NjY1LjE0NzEwNDg0NDUsMjgxMjAxMy4wMzQ1OTUzMTE2LDIzMDQ3MTMuMjUyMzY4MDAzLDIwMDE4NzYuMDM5MzEwNDQxOCwyNTAyODQ5LjEwNzQxODUyOTcsNTA4MjU1LjA1MDkzODc0MDQzLDI5NzExNjUuMjEwMDgxMzA2OCw1ODgwMTAuNzIxMTg0NjQ2NCwxNTYwOTQyLjEzNTY4OTU0ODcsMTM5NTE5Ny43NTQ1MTc5NjY5LDMyMDI3OTguNTg2ODk0ODEyNSwyMzIwMzAxLjExMzgwNTk5ODYsNjUyNTU0LjcyNjUzMjgxODMsMTg5OTIzMC40ODc2OTY1NDEsMTI2NDgzNC4zODI0NDgxMDM3LDE4Njg1NTcuMTk1MDg2NzA2MiwyMDc0OTg1LjQwMzcwMjUyMDgsMTg0NTg4Ny43MjE4MTE1NDA0LDQyMDc2NjEuMTIyOTIxMTM0LDI2ODMyOS44MjE0ODc0MzI3NSwzMzU5LjcyMDYzMzIyMzM0MQorMjksVHVlIDIyIEZlYiAxMSwxNDc4MTAuODI0MTM4MTMxMywxMzE5NzMuNDg0OTc1OTE3MDYsNzY4MTkuMzEwMTU1Njg2MjcsMTU4ODA1LjY5MjQ3Mjg4MDI0LDE2MDA3NC41NDMwNTc5NjA1LDI1ODc2NjcuNzM0NzcxMjg1LDI4MTIwMTUuODQ2NjA5NzUyLDIzMDQ3MTUuNTU3MDgyNDA4NiwyMDAxODc4LjA0MTE4NzQ4MjIsMjUwMjg1MS42MTAyNjg4ODgsNTA4MjU1LjU1OTE5NDA0NTUsMjk3MTE2OC4xODEyNDgwMDIsNTg4MDExLjMwOTE5NTY2MTUsMTU2MDk0My42OTY2MzI0NjUsMTM5NTE5OS4xNDk3MTY0MTg3LDMyMDI4MDEuNzg5Njk1MDAxNywyMzIwMzAzLjQzNDEwODI3MjcsNjUyNTU1LjM3OTA4Nzg3MTIsMTg5OTIzMi4zODY5Mjc5Nzg4LDEyNjQ4MzUuNjQ3MjgzMTE4NywxODY4NTU5LjA2MzY0NDgzNTcsMjA3NDk4Ny40Nzg2ODg5NjE4LDE4NDU4ODkuNTY3NzAwMTg0OSw0MjA3NjY1LjMzMDU4NDM2MSwyNjgzMzAuMDg5ODE3Mzg4NCwzMzU5LjcyMzk5Mjk0NTY1NAorMzAsV2VkIDIzIEZlYiAxMSwxNDc4MTAuOTcxOTQ5MDI5MzYsMTMxOTczLjYxNjk0OTQ2ODA0LDc2ODE5LjM4Njk3NTAzNDg1LDE1ODgwNS44NTEyNzg2NTIxMiwxNjAwNzQuNzAzMTMyNTgzNTksMjU4NzY3MC4zMjI0NDAzMTMsMjgxMjAxOC42NTg2MjcwMDUsMjMwNDcxNy44NjE3OTkxMTgsMjAwMTg4MC4wNDMwNjY1MjQ0LDI1MDI4NTQuMTEzMTIxNzUsNTA4MjU2LjA2NzQ0OTg1ODcsMjk3MTE3MS4xNTI0MTc2Njk1LDU4ODAxMS44OTcyMDcyNjQ4LDE1NjA5NDUuMjU3NTc2OTQyLDEzOTUyMDAuNTQ0OTE2MjY2LDMyMDI4MDQuOTkyNDk4MzkyNywyMzIwMzA1Ljc1NDQxMjg2NjcsNjUyNTU2LjAzMTY0MzU3NjYsMTg5OTIzNC4yODYxNjEzMTU0LDEyNjQ4MzYuOTEyMTE5Mzk4NiwxODY4NTYwLjkzMjIwNDgzMzUsMjA3NDk4OS41NTM2Nzc0NzgsMTg0NTg5MS40MTM1OTA2NzU1LDQyMDc2NjkuNTM4MjUxNzk2LDI2ODMzMC4zNTgxNDc2MTIzLDMzNTkuNzI3MzUyNjcxMzI3NQorMzEsVGh1IDI0IEZlYiAxMSwxNDc4MTEuMTE5NzYwMDc1MiwxMzE5NzMuNzQ4OTIzMTUwOTcsNzY4MTkuNDYzNzk0NDYwMjMsMTU4ODA2LjAxMDA4NDU4Mjc4LDE2MDA3NC44NjMyMDczNjY3MiwyNTg3NjcyLjkxMDExMTkyOTgsMjgxMjAyMS40NzA2NDcwNjksMjMwNDcyMC4xNjY1MTgxMzIsMjAwMTg4Mi4wNDQ5NDc1NjgzLDI1MDI4NTYuNjE1OTc3MTE1LDUwODI1Ni41NzU3MDYxODAzNiwyOTcxMTc0LjEyMzU5MDMwNzMsNTg4MDEyLjQ4NTIxOTQ1NiwxNTYwOTQ2LjgxODUyMjk4LDEzOTUyMDEuOTQwMTE3NTA4NiwzMjAyODA4LjE5NTMwNDk4NjYsMjMyMDMwOC4wNzQ3MTk3ODEsNjUyNTU2LjY4NDE5OTkzNDQsMTg5OTIzNi4xODUzOTY1NTE2LDEyNjQ4MzguMTc2OTU2OTQzMiwxODY4NTYyLjgwMDc2NjcsMjA3NDk5MS42Mjg2NjgwNjkxLDE4NDU4OTMuMjU5NDgzMDEyNCw0MjA3NjczLjc0NTkyMzQzNywyNjgzMzAuNjI2NDc4MTA0NiwzMzU5LjczMDcxMjQwMDM2MDUKKzMyLEZyaSAyNSBGZWIgMTEsMTQ3ODExLjI2NzU3MTI2ODg3LDEzMTk3My44ODA4OTY5NjU4Niw3NjgxOS41NDA2MTM5NjI0MiwxNTg4MDYuMTY4ODkwNjcyMywxNjAwNzUuMDIzMjgyMzEwMDIsMjU4NzY3NS40OTc3ODYxMzM2LDI4MTIwMjQuMjgyNjY5OTQ2LDIzMDQ3MjIuNDcxMjM5NDUxLDIwMDE4ODQuMDQ2ODMwNjE0LDI1MDI4NTkuMTE4ODM0OTgyNiw1MDgyNTcuMDgzOTYzMDEwMSwyOTcxMTc3LjA5NDc2NTkxNyw1ODgwMTMuMDczMjMyMjM1MiwxNTYwOTQ4LjM3OTQ3MDU3ODksMTM5NTIwMy4zMzUzMjAxNDY1LDMyMDI4MTEuMzk4MTE0NzgzLDIzMjAzMTAuMzk1MDI5MDE2LDY1MjU1Ny4zMzY3NTY5NDQ4LDE4OTkyMzguMDg0NjMzNjg2OCwxMjY0ODM5LjQ0MTc5NTc1MjgsMTg2ODU2NC42NjkzMzA0MzUzLDIwNzQ5OTMuNzAzNjYwNzM1NiwxODQ1ODk1LjEwNTM3NzE5NDIsNDIwNzY3Ny45NTM1OTkyODYsMjY4MzMwLjg5NDgwODg2NTMsMzM1OS43MzQwNzIxMzI3NTIKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvRGVtb2dyYXBoaWNTRUlSRGlzZWFzZV9SS19SZWZlcmVuY2UvRmx1L3dvbWVuL1JfMi5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0RlbW9ncmFwaGljU0VJUkRpc2Vhc2VfUktfUmVmZXJlbmNlL0ZsdS93b21lbi9SXzIuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJiMDQ1MWIKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0RlbW9ncmFwaGljU0VJUkRpc2Vhc2VfUktfUmVmZXJlbmNlL0ZsdS93b21lbi9SXzIuY3N2CkBAIC0wLDAgKzEsMzMgQEAKK2l0ZXJhdGlvbix0aW1lLEVHLUZSRy1HMjEwMDAxLEVHLUZSRy1HMjEwMDAyLEVHLUZSRy1HMjEwMDAzLEVHLUZSRy1HMjEwMDA0LEVHLUZSRy1HMjEwMDA1LEVHLUxPRS1HMjQwMDAxLEVHLUxPRS1HMjQwMDAyLEVHLUxPRS1HMjQwMDAzLEVHLUxPRS1HMjQwMDA0LEVHLUxPRS1HMjQwMDA1LEVHLUxPRS1HMjQwMDA2LEVHLUxPRS1HMjQwMDA3LEVHLUxPRS1HMjQwMDA4LEVHLUxPRS1HMjQwMDA5LEVHLVVQRS1HMjkwMDAxLEVHLVVQRS1HMjkwMDAyLEVHLVVQRS1HMjkwMDAzLEVHLVVQRS1HMjkwMDA0LEVHLVVQRS1HMjkwMDA1LEVHLVVQRS1HMjkwMDA2LEVHLVVQRS1HMjkwMDA3LEVHLVVQRS1HMjkwMDA4LEVHLVVSRy1HMzAwMDAxLEVHLVVSRy1HMzAwMDAyLEVHLVVSRy1HMzAwMDAzLEVHLVVSRy1HMzAwMDA0CisxLFR1ZSAyNSBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMixXZWQgMjYgSmFuIDExLDAuMDA5NTk0NTM1NzY0NDY4MDA2LDIuNjEyMjU0Mzg3NzIxNjY3N0UtOCwwLjAxNzYyNjUyMDY4NzU4NDc0NiwwLjAwNjg5NTMwNDIyMTI1NjE2OCwwLjA0MjgwNDg5NDQzMzA3NDIsMC4wMTI0OTEwMjExNjcwNTE0ODcsMC4xMDg5NDkxMTMxMzM2NDYzOSwwLjA3MTg4ODU5NDExMDE4ODExLDAuMDg1NjcyMjcxMjI2MzI5MDIsMi4xMDM3MDc2NTc2MDEzNTQ3LDEuNTg1Mjc3NTE0Nzg1NTg0NywyLjQxNzM5MDY1MjI3OTU4MTYsMS4yODY2OTQ1MzM5NDg5NDU3RS02LDIuNTY3MTY0MjE0OTgzNDg5N0UtNiwwLjAxMzcyOTIyNzExNTMyMTkxOSwyLjI4MjI5MDQ1NjUxODE5NjcsMC4wMTM1Mjk5MTk1NTY2NTgxMDYsMS40NTI0MTEzODA3MDMyNjgxRS04LDkuNTg4OTQ2NzcxNDc2OTU0RS04LDAuMDEzMjg4MjMzNzA3MzkxODY5LDEuNTU1OTM1NTAyNjc2MTAwNUUtOCwxLjYyMDk2Mzg1MDQyNTM4MUUtOCwxLjI2OTA2NDAyODc2NzE2MjJFLTcsMTM4ODguMDczMzA4NjIyNjIsMS4yMjI5NzEzNzIyNzAyMTQ3LDcuOTM2NDc2NzM4ODM3MTRFLTQKKzMsVGh1IDI3IEphbiAxMSwwLjIyMDgwMTc5OTM1NDkxNzcsOS42NTY1NDM5NTU3ODU2MjlFLTYsMC40MDY0MTcxMTU3NTI4Njc5LDAuMTU4OTg5MzgzODIxOTM0OTUsMC45ODcxNzAzNjQwNzIzODIyLDAuMjg5NTQyODc5Mjc5ODI3MywyLjUxNjUyNzE1ODA1MTA2NiwxLjY2MDYwNzMwMDM3NjY2MjQsMS45Nzg1Njk0MDYwMzM5NTQ1LDQ4LjMwMTQ4MTk5ODAwMDM3LDM2LjM2ODg0MzEzMDQ2Mzg0LDU1LjUxOTk0NDgxNTg3ODA5LDQuNzU3NDQ4MTA1NTUwODQ1NEUtNCw5LjQ5MjA0NDU1Mzc0NzEwMkUtNCwwLjMxNzM2NzU2MzQ1NDAxOTczLDUyLjQxMTk0MjEyMDk4NzA1LDAuMzEyNzQwMjI4MjM3MTM0NCw1LjM2NzYyMTY4NzAxMjM1OEUtNiwzLjU0NTYxMzExMjYxOTk1M0UtNSwwLjMwNzE0NTc5MDcwNTYzMjg2LDUuNzUwNDgyMTY3MzU0MzIyRS02LDUuOTkxODc1MjA0Mzg3NjUzNUUtNiw0LjY5NDA1NzYyMjU5MDk4MTZFLTUsMjM4NDcuMzg3NTM2MDg4MTgzLDI4LjA0MTg0NDcyNDIyODI3LDAuMDE4MjU3OTEzMzIwNDM3NjM1Cis0LEZyaSAyOCBKYW4gMTEsMS4yMjIxNjA5NDY3NDQxMTYsMi42MjUwMTMyMzczMzU1MjJFLTQsMi4yNjg5ODQ0NDE5NDU1OTA1LDAuODg2MjU5MzA0MDQzMzg3OCw1LjUxMzk4ODA2MTUwNTY0OCwxLjY0OTI2OTU2ODg1NTE0OTMsMTQuMTMwMzk5MTY3NjAxMDYzLDkuMzI2OTk0MzQyOTgyNzE5LDExLjEwMjc0MTc0MjQ3NjQwMiwyNjUuMjYyNDQ0NDA3NTIzOCwxOTkuMjc3OTc5MDM4ODIwMjMsMzA1LjIzMzA1MjMwOTE2NzMsMC4wMTI5NDMyOTc4MDg2OTcwMjksMC4wMjU4MjYyMzY5MTA5NDY0NjMsMS43ODc2MzY4Mjc3MjQ3OSwyODguMDMxMDI4Nzc2ODE4MiwxLjc2MTEwNzg0MTYwMzYyMzcsMS40NTgyMDM2NDgxNDE4Nzc3RS00LDkuNjQ4ODI1NzAwNTU4MjQxRS00LDEuNzI5NDIzMTkwNzM1NTY4MiwxLjU2MjUwNjE3ODI1MzA2ODFFLTQsMS42MjkyMjQwNzA0MTU4NDk1RS00LDAuMDAxMjc5MDQyNDIwNjcxMjg3NSwzMzI4NC42NjY1MjQyNzc1NywxNTMuNDIyMDQ2MTUwODU2OCwwLjEwMDkxMzk4ODEwMTgwNDY3Cis1LFNhdCAyOSBKYW4gMTEsMy44NzEwMjI1NTE4MDExNDk2LDAuMDAyNDczMTI3OTUwNTk5MTAzNyw3LjM0MDc1MzQ0NDQ2MzU4MiwyLjg1NDg0MDQ1MDIxMTgzNSwxNy44NTc0NDM1OTU3OTM2NDQsNS41ODgyNDQ1MzcyMzg4MTcsNDYuMzE2OTI0NDkxODEwODMsMzAuNTkyNzA5MzU3MzE0MzU1LDM2LjMzODQ4NDY5Nzc5NDEzLDgyNC42MzQ2MjU5MzMzMzU1LDYxNi40MjY3MDIyOTQ1ODIxLDk1MS40MDYyMjE4NjQ1Mzc4LDAuMTIyMjA5MTg3NjYxMDg2NSwwLjI0Mzg5MzQ3MDg0MDk5Nzg4LDUuOTAyOTgwMjM1NTk0MzM5LDg5Ni44Nzg3NDEyNTY5Mzg0LDUuODExNzY2NzUzMjc3NDY0LDAuMDAxMzcxOTIzMTI5MjA3OTg4LDAuMDA5MTE2ODE2ODc0MTgzMTcsNS43MDU4MDE1NDkzMTMxMjgsMC4wMDE0NzA3NzU0NDUzODI1MDEyLDAuMDAxNTM2MzU1NzU1OTkwMjg3LDAuMDEyMTI1MTAxMDk3MDQxNTQ0LDQ1NjIzLjkxNTI1MzY5NTg4Niw0NzMuMDMxNTY5MDYzNDEyNDYsMC4zMTg1MTI4NzgyNjQ5MzczCis2LFN1biAzMCBKYW4gMTEsOS4yOTQ3NTI1MDMzOTM1MDUsMC4wMTMxNTUxNDk5NzY5Nzk1MzIsMTguMjk5MTUwMDc0NzYxNzIsNy4wNjE4OTUzMzMzMjI4NTksNDQuNTg5NjAwMzI2MTU1NTgsMTUuMDIwODEzNTcyOTM5ODcsMTE4LjAzMDI4MDc1MTAzMzQ3LDc4LjA0ODU4ODQxNDg2MTQ3LDkyLjM2OTkzMzM5NTk3NDk3LDE5MTQuMDA4Nzc0NDE5MjI1MSwxNDE3LjkxMzc3MDc3NzUyMzUsMjIxOS4yNTY1MTQ4NjcyOTY2LDAuNjUyOTM5NTEwMDI5OTMyLDEuMzAzNTY0NTQ2OTk4NjE4MywxNS4yMjg2MTkwMDMxNDA1MTksMjA4OC4wNDQzODE1Njk1MjgsMTQuOTc3ODUwMTk4MTA1NTUyLDAuMDA3Mjc4MzExNDA5MzY4MTYzLDAuMDQ4NzgxNTQxMjk4NzU4MTA2LDE0LjY5ODc0MzIzMTUyNDY1MiwwLjAwNzgxMDU4NjM5NjIzMDkwMiwwLjAwODE4OTExNjQ3ODU3Nzg5OCwwLjA2NTMxMDAxMTI0NTExNjczLDYzNzE2LjM2MTkyMTU3Mjg1NCwxMDgxLjY3MDMxNjk3MzAyMDgsMC43NjAwMTA1NTI4MzI0MzQzCis3LE1vbiAzMSBKYW4gMTEsMTkuMjMyNTIwMDcxNjcyMzA1LDAuMDQ5MjQ5ODE5Mzc2MDcxMTI2LDM5Ljg4MjYzMzI2MjkxNzkwNiwxNS4yMzQ2NDIyMzE2ODExNDMsOTcuMzkwNjQ0NTY1OTg2MzQsMzUuOTkwMDYzNjAzMjg1MTQsMjY0Ljg3ODExMTU2MjE4NjEsMTc1LjQxNzEwODY2OTM5NDY4LDIwNi42MTYyMzMwNTU3NTA2NiwzNzY3LjMyNTEyMzQ2Mjg0NCwyNzUyLjAxMDE5OTI2Nzc2MTQsNDQwMS44NTc4MTk2MjA2NTQ1LDIuNDYzMDUxNDQ2OTIwMzM2NCw0LjkyMDU0NzYwMjEyMjg0NiwzNC43MTk4NDYyNDEyNTUzMiw0MTI5LjI4OTYzNzY1ODM2NywzNC4xMDI5MzIwNzMyOTk0MywwLjAyNzEyODExMjI0NDk5NjEzLDAuMTg0NDg5ODQ2NjQ0ODAxMTcsMzMuNDQ5NzEzMTQ1MTMyMDEsMC4wMjkxNjI5NTgyNzcyNTY4ODcsMC4wMzA3NzMyNzk5NTg4Njg0NSwwLjI0OTc4NTkxMDYwNDg3NDI2LDg5OTM4LjA4Nzk0MTYwNDcsMjA4MC4yNjQ2MzI3OTk5MDYsMS41NTg3NDMyNDU2NzIzNzkKKzgsVHVlIDEgRmViIDExLDM2LjU3NzMwMzcyMTkxNzY3LDAuMTQ2MzUwMjMyMTY0ODI1MSw4MC41MjAzOTYzOTYyODU4OCwzMC40MjYwMDA0NDk2MjY3NSwxOTcuMDY2ODc5MDQxNzcyNzgsODAuMjYzODI2MDAyMDk0MTYsNTUyLjU1MTY1MjE5MTE3MiwzNjYuNTUxNTA4Njk1NTkwMiw0MjkuNDg2NjM1OTU1NTg4NDQsNjczMi43NDM1Nzg2MzU2Miw0ODIzLjkyODA4ODk1NzYyNyw3OTQ3LjQzODg1MjMxMTYxNiw3LjQwMzI1MTYyMzYyNzg3MiwxNC44MDQyNDQyMzIyMzU4MzgsNzMuNjY5Nzg0MDY3ODUzMzEsNzQyNi4wOTk0NjExNDg4MTYsNzIuMjU3NTk3ODE0NTQzMzYsMC4wODAwNzk3NjI0NjI1NzU5NiwwLjU1NjcwNDcwOTUzNTc0OTIsNzAuODMyMzk3Mzc0NTg1ODEsMC4wODYzMTg5ODM0NDcxNjA2LDAuMDkxOTg4NzUxNDcwNDQyMjIsMC43NjYzMzExNzAyNDQ2Mjc0LDEyNjcyMi4wODEwNDQ5OTMwNywzNjAwLjk0NzIyNTc2NDk2NjMsMi45MzQxMjc1NDExNjA5NDczCis5LFdlZCAyIEZlYiAxMSw2NS45NzY5MzA3NTYwNzk1MSwwLjM3MTM4OTIwNTAxODgxODIsMTU0LjI2MDM1MjcwNjk4MTY1LDU3LjczMTkwOTAzNzk1NDY5LDM3OC4yODY5NjY1MjA1MjMsMTY5LjEwMjUwOTY4MzE0NTk3LDEwOTQuMzExODA0MTQ5MTYsNzI3LjIyNDIyMzcwNzUxODgsODQ3LjYzMDM1MTYyNzM0MTgsMTEzNDkuNTEzNzExOTM4MTEsNzkzNS40NjY5MDMxMTA4MjcsMTM1NTguOTYwNjE4OTk0ODIsMTkuMDc5OTM2MDA5NjM4NjcyLDM4LjIwNDg1OTUzOTcyOTg3LDE0OC4zNDQ1MjI4NzM3Mjc4NywxMjYxMS44MzAxMjE5MDY0NTIsMTQ1LjI5NjgxNTkzMzIzMjQ3LDAuMjAxMzcxNjY4NzMyOTYwMzYsMS40NDI1NDAwODkxODEyNDcsMTQyLjM0Njg1MjI2MjQ1ODkyLDAuMjE3ODg0NzEwOTg3MDY0MDUsMC4yMzU0MTY5NzMyMzI0NjE2LDIuMDI5NjcxNjYyMTk4NzU5LDE3NzEwMi4zMjE1MDE0NjQxNSw1ODMxLjk2NDI1MzE4NjY2NCw1LjIzODc3NTI5MDMxNzM2OAorMTAsVGh1IDMgRmViIDExLDExNC40OTE2OTUyNzc5MzQ1NSwwLjg0Mzg0NDMxNjIwMDQ2NDksMjgzLjE0NTM3NzA0MDI3ODUsMTA1LjIwNDA2OTk1ODg5MDYxLDY5NS4zNzY1MTYyNTU2NTM5LDMzOS4xNzg0NjMyMTA2NTk3LDIwNzUuNTYxNTIwODk0OTIyLDEzODEuODE2MzA0NDg2MTczNywxNjAyLjM5NTI2NTQzNzQ4MjMsMTg0MjMuNjExMjk3ODg4MjIsMTI1MTIuNTE2NzE2MzI2MDA3LDIyMjk2LjAxODUxODY3NTAwMiw0NC4xODkzNTU3NzY4NjAxOSw4OC42MzA3MTgwNTA4NzQsMjg1Ljg1MDgxNjA3NzUwODYsMjA2MzkuMjc1ODIzMzc5NTc2LDI3OS42MDIwMjU5MjM0NjM4LDAuNDUyMjc4NDM3NjI5MjgyMiwzLjM2NDAwNDI5MjY1ODU1MSwyNzMuNzYwNDQ4NzA1NjE2MSwwLjQ5MTc4MDE1MzE5MjYwNjUsMC41NDA4NzY3MjA0ODgwODk3LDQuODU5NDc0NjE2MDEwMjUzLDI0NTAxMS44MDA5MTk3NzY5LDkwMzEuNzQwNjgyNjQ1NjQ4LDkuMDEwMzAyODY0OTY0ODQyCisxMSxGcmkgNCBGZWIgMTEsMTkyLjQxNjU2Mzg1NTM4NDMsMS43NzE1NDM3OTYxNTU0NjUsNTAwLjM5MzUyNzQwMDM1NDc0LDE4NS4xNDg3NTc2OTg4MzQ3MSwxMjI5Ljk2NDM0NDYxODgzNDMsNjUyLjI1ODkzMzM5NjA0ODQsMzc5MS4xNjQzNjM5OTM3NTgsMjUyOC44MzgwMTA5NDYyNTksMjkxNy43MDE1MTc2MzEyNDksMjkxMDcuMTQyNTkwNzM3MDcsMTkxMTYuMjI0MTQ4ODk2NDg2LDM1Njg2LjgzOTYxNzI1OTcxLDk0LjgyMzU0ODQ1OTMwOTMxLDE5MC41NjEzNTE2NzkxNjA4LDUzMC4yMTA4MzI0NjkyODQyLDMyODgxLjIxMDEwNTAxNzgzLDUxNy45NTEwMjI0MzY2MzY4LDAuOTM2NTQxNDA3Nzk3NTk1OCw3LjI3ODM1MzQ4NDMzNTQ2Myw1MDYuODA1MTU5MTI5NjA0NiwxLjAyNDQ2ODAwNjUwMzE1NzcsMS4xNTEyMzMyNzA3MjY0MTM3LDEwLjgyNzMwNjAwOTk1MDI0NSwzMzUyNDguNDMxNzc2MzU5MSwxMzUyOC4zMjkyMzE5NzQ1MTgsMTUuMDM0OTA2MTgwNTgzNDk4CisxMixTYXQgNSBGZWIgMTEsMzE0LjM4MDc4ODQ2MzM5NTMzLDMuNTA5MDY2MTY3MTEwNDI1LDg1NC41NTk2NTkyNDMwNDEzLDMxNi4wMjAwODg0MjAxODMzLDIxMDAuNzIzNTA5ODY3MjE2OCwxMjEwLjc0NDI1NjM3NDczMyw2NzAxLjg4MzE0Njk4OTE1NSw0NDc5LjgyNzgwOTQzNDg0OSw1MTQyLjAyOTEzNDY0NzU0Miw0NDk4Ni4xMDQwODE1ODMwNSwyODQzMi42ODI1MzQ5MTI2OTYsNTU4NTUuMTc3ODE4NTcxNzA1LDE5Mi4yOTQxNDU3MDQ2NTc1NSwzODcuMjk0ODc0MTAyMjM1Niw5NTEuODQ4ODA0OTkxNSw1MTI0Ni43MDM4NjgyODcxNCw5MjguNjg2NDIxNTA5MTA2OCwxLjgyNjYyOTA3NTQzMjE3OSwxNC45MDAzNjk0OTM5MjM3MDEsOTA4LjA0Nzg5ODMyNjQ2ODcsMi4wMTIwOTYwMTQ5MzUxODg3LDIuMzE3NzU1ODQ1NTc3MDU0LDIyLjg2MjQ3MzUyOTM0MTc4OCw0NTMwODUuOTg1OTA2MzA5OCwxOTcwMS4zMzA5MzIxNDQxMSwyNC40Mjg2Nzg1NDg2MjgyNgorMTMsU3VuIDYgRmViIDExLDUwMC43NzQzNTExNTA1MjkzNiw2LjY1MDAxODY0Mjg2ODQ3NSwxNDE0LjM1NjIzNTY4NjAyNzcsNTI1LjA3OTQ0MjIyNzc0ODgsMzQ3NC4wMjEwNTY1OTAzNjk0LDIxODEuODQ2NjY5Mzk4MzUxNCwxMTUxNi4yMDQ2MDc1NjQxODMsNzcxNi4zOTk0MDU3MTIwMTEsODgwOS4wMzIxNTQzNTgxOTYsNjgxNjguMjA1ODcwMDcyNDMsNDEyMjkuMjk1NzU4NDMzMjUsODU2NDYuOTA5MzEyNzQxOTYsMzczLjI2NTI0NzMyMDQ5NTksNzUzLjYwMTkzMDEyMzg0NTEsMTY2MS45NTM1MjQ3ODU5NDM3LDc4MzA0LjkwMjkyMzEzNTc5LDE2MTkuNjE4ODgzNDU5MTk0NiwzLjQwNDI4ODI1MTg0MDg5NzIsMjkuMjMzNDYzMDc0MjMxNTg3LDE1ODIuMjczNTA4NDk4MzQ2MiwzLjc3OTM2Nzc3ODI1Njc0MDUsNC40NzQ5NzEyMDg4OTk5MjEsNDYuMjgzNzY5NTU2NDE2MjI1LDYwMzUxMi4wNzY1MTc5Mzc5LDI3OTQxLjI0ODk5NDUxMzU4LDM4LjczNTI2NjE3OTY2OTQxCisxNCxNb24gNyBGZWIgMTEsNzc5LjQzNjU2NTYyMTk1MTIsMTIuMTY5NjE4Mjc3NTI1NTMxLDIyNzIuOTMwMzQ2MTc0NTk2Nyw4NTEuODk2MzE5Nzc4Mjc4Niw1NTcxLjg0OTA5MDE2MjEzOSwzODM0LjEzNjIzMjg3MDkzMDYsMTkzMDIuMzA2MzExNzk5OTU1LDEyOTY5Ljc1Mzg5MTA4MDE5NiwxNDcxOS45OTIzNTc2MjIyNjYsMTAxMzM5LjYwMzQwOTU4NTczLDU4MjYwLjg1NTQ1MDA1MzI4LDEyODcwNi4xNTkxNDcwOTg5MSw2OTkuMzM3Mzc1NzM2NTUzMiwxNDE1LjY0Mzg1MTcwMzc1MjMsMjgzMy40ODIzOTgyMjg4Mzc2LDExNzM4MC40ODI3MTI4NjUsMjc1OC40MzkyMTQwMzY0MDE2LDYuMTIxNjAzOTc2MDY5MzcsNTUuNDI5OTAxODA2OTIzNDUsMjY5MS45NjgzNjczMzA5NCw2Ljg1NDU4MjU4NTU4MjIyNiw4LjM2MjI4NjI3MDk3NDYyMiw5MC41Mjc1MjgwNTE5OTQwMyw3OTAxMDguNDU0MzQyNzIyNSwzODU4MS4zNjUxNzUzMDk2OSw2MC4wMjYxMjM4Njc4NzE3NworMTUsVHVlIDggRmViIDExLDExODcuMzkxNzI5NTU5NjE0OCwyMS42NDExMTQxODk3OTY3MiwzNTQ5LjEwOTMxMjkwOTA3MjcsMTM1Mi41NzQwMzgwNjcyMTc1LDg2NzAuMDgzMzAzNzQ3OTQ4LDY1OTEuMTkxNzc2NjkyMzgzLDMxNjMwLjA5NTczNzMyOTQ4LDIxMzI0LjcwOTU5MDAxNzMsMjQwNDcuNDgxNzA0NzY2NDcsMTQ3NzMxLjIzNTYxMDc2NjQ1LDgwMTE1LjI1NjIzMTkxNTM3LDE4OTQwNi44MTUzMDAyMTM3OCwxMjcxLjYzMTEyMjcwOTc2NzQsMjU4MS41ODY5MDgyODg2MzEsNDczMC44MDAyNzA4OTEwOTYsMTcyNTQ5LjEwOTgwNTA1MTQ3LDQ2MDEuNzU4MTc0NzI4MzQ1LDEwLjY5MTI2MjY5Njg1NDQ0NiwxMDIuMTY0OTkyNTU3NDk5MTUsNDQ4NC42NTEyMjkxOTg5ODYsMTIuMDgzMTI4MTM5NDMxNzYsMTUuMjE5NDQ0NjU5NzQ5MjE2LDE3MS45OTkwNjAwMzYxNjMxLDEwMTM3MjMuOTEwOTI4NDc3OSw1MTgwNS4yNDE0OTUzMzUwNyw5MC45NzQ1MDEzNTk4ODkzNworMTYsV2VkIDkgRmViIDExLDE3NzIuMjY1ODcwMDA2NTYyMiwzNy41NTg1MTA3OTkyOTg4NjUsNTM4MS43NjU4NDIyNDIzNjQsMjEwNC4yNTM4MjYwOTg3MjAzLDEzMDc3LjI1NDA4ODE1NzYyNCwxMTEwNy43MDIyNzM5NjE4MDQsNTA3MzEuOTYwODU5Nzk3NzA2LDM0MzQ0LjE5NDIxMTY5ODc1LDM4NDUwLjg3NTY1MjIwMTgxLDIxMDkxNC43OTI3MzcyMzYyLDEwNzAxNi45ODQxNjAxNDc5LDI3MjUxMi44OTk5NDQ4NDYwNSwyMjUyLjIyNTQxOTM4Nzg1NjYsNDU4Ny4yNjY2NjMyOTAxNjYsNzc0OS44NDU2Nzc1NDc0ODYsMjQ4NDMwLjA0MDkyMzgwMDI2LDc1MzUuMDk3Mjc4OTEyNTEzLDE4LjIxNzk4MzM2MTU5NDMwNywxODMuODAxNjI0MTkwNTU0ODYsNzMyOS42MjQwMzA5NjcwMzQsMjAuNzk3MDg0MjQ5MzkxNDcsMjcuMDk3NjMxMjgxMDA4MjIsMzE4LjcwMTUyNTE4ODI1OTQsMTI3MTMyNC4xNTY1NjA3MjYsNjc1NTAuODcyMzM1OTQzNzYsMTM0Ljg2MjA0MDcyNDIwMzUKKzE3LFRodSAxMCBGZWIgMTEsMjU5Mi45MzMxMDUxMTIxMTc2LDYzLjgxMTEwMjEzMjExNzcsNzkxMy4wOTkxNzQwNTA5MjYsMzIwOS4wMDk1MDIxMTMyOTM0LDE5MDg1LjEyMjM1MDExMjU1NywxODM3My4yODM5NDQzMDk0Niw3OTY1MS4wOTE4NzQ0MjMxMyw1NDE5OC42MTM0MjE3MTQ1LDYwMTc5LjI2MDI2NDA1MjUxLDI5NDM1Ny40MTQxODQxNjE1LDEzODY0OS4wMDUyOTc3NzUzMiwzODI0NjEuMzUxMzAxMjYxNzUsMzg5NC4zNTA0NDE5ODAyOTY2LDc5NjEuOTQ2ODQ3MDYwOTQzLDEyNDcwLjIxNDc0MjIxMTM3MiwzNDk2NzMuMDQ3NTMzNDkwMSwxMjEyNi4zMzQzMjE2MTEzMjgsMzAuMzg4NTMxOTg4ODkyNTI0LDMyMy43NjY3MTUxMzEyMTI4MywxMTc2NS4xMzU0NzA4ODcyMSwzNS4wNjc1OTQwODUzNTY2Miw0Ny4zNTI3NzQwOTQzNTI0Myw1NzcuNjUyMjk4OTE1MDg3NSwxNTU1NTYxLjkxMjgwNDIyNTcsODU0NTAuNDg5Nzc4ODczMDMsMTk1LjQ3NjI1MTU5NzE3MzA1CisxOCxGcmkgMTEgRmViIDExLDM3MTguNzg2MzExNDYxMjM1NSwxMDYuMzYzMTQ1MTExMDAyNzcsMTEyNTguNDQ4NjQ2NjcyMzIxLDQ3OTUuNDU3NTA4Nzc1NTQsMjY4OTAuNjI2MzcxMjE3OTEzLDI5ODQ0LjQ1NzkxNjE5ODIyLDEyMjMwNy40OTE5MjI4NzY2Nyw4Mzc1OC45Mjc5NjM1OTYyMyw5MjEwOC4xODQ1MzM2NzgwOCw0MDA3MTIuNjI2NDgzODgzOTQsMTc0MDc3LjM5MjEyNTcyODU3LDUyMjI2MC40NTc4MDk0MzI3LDY1ODEuNzcyMDQ3MDAzNzczLDEzNTE3LjMyNzU2ODE2NjA2MywxOTcxNy41NDA5MjA2NTQ5MDUsNDgwMDgzLjM4NzEzNzY3OTk3LDE5MTkzLjUzODU4MDQxOTYyMyw0OS43NDIxMjU5MDc5OTk4NCw1NTkuNzI1NzM2MjIxODk3MSwxODU1NC4wMTU5NjE2MjY5NDUsNTguMDc2MDEzMjA5Nzg5NzgsODEuNDE5ODgxOTYxNDI4NTMsMTAyNi41MTYzNjQxODIyMzIzLDE4NTU0NTIuMDgwMzc1MDcxOCwxMDQ4NDMuNDgyNTEzMTE4ODYsMjc2Ljg1ODkyNTI2ODY1NzIKKzE5LFNhdCAxMiBGZWIgMTEsNTIyNy4wNjI5NTk2NTQzNjcsMTc0LjE5OTE1Njg1NDYyODUsMTU0NjYuNTQ2ODg2Mjc0MTk4LDcwMTUuNzk4Njk1MTA0MzQ0LDM2NTA3LjM3MDg0NDIzNTMxNiw0NzU5NC41OTQ3OTUxMTMxOSwxODMzNjguMDEzNjY1MTY3MzgsMTI2NTc4LjQ4OTAxMTI1NDc0LDEzNzYyNC43MTM5NDg0NTE4OCw1MzA5NDguMTg2ODAwMjU3OCwyMTE4NDAuNTc4NTc4OTE4Miw2OTIyMjMuMzQyODAyOTc1LDEwODc0LjA0ODQ4OTg5MzczLDIyNDU3LjA1MjkzNTcxNTY1LDMwNjI5LjI0MTU2ODc2MTUwMyw2NDE0NzcuMzU0MDkyODE2NywyOTg4NS40MzkyNjgyNzU3NDMsODAuMDUwMzcxOTQ5MzcwNzMsOTUxLjM3NDg5OTk3Njc4NDUsMjg3NDAuODQyODUwMjkyMzM0LDk0LjY1NTE3ODQ1NDUxODc2LDEzOC4wMTg2MjMwNTA0MjE0NCwxNzkxLjQ0MDIyMDMwNTkzNDQsMjE1ODA4MS4zMzA3MjU0NSwxMjQ4NzIuNzExNTM5Njg3OSwzODIuODgxNDAyMjM0NTg4MQorMjAsU3VuIDEzIEZlYiAxMSw3MTk3Ljk3ODc0ODk4MTM1OCwyODAuNjAzNzk1MTYxMTU0OTUsMjA0ODMuNDU3NDkzOTc4MDYsMTAwMzYuMTE5NTk5MDg2ODYsNDc3MDQuNTM0NDY1NDQ3NTMsNzQ0NTIuNjU5OTQxNzc5NDYsMjY3Nzg1LjM0MzQzNDQ1NjUsMTg2NjU5Ljg3NzAwMDIzMzg2LDIwMDI2Mi4xNzc4ODg4ODkyNCw2ODM1NzMuNjk0NjY5Mzk4MSwyNTAxOTIuNjcyNTY3Nzg0NzMsODg5MDE0LjQxMzYzNDY0NywxNzU0Ny4wOTY5NjEyMTc4MywzNjQ5MS4zNjM0OTIzNDQ0Niw0NjcwOC42NDk5MTE2MTYwOSw4MzI1ODQuMzU4NzcwNjgwNSw0NTc2OC44NTA4OTQ4OTI0NSwxMjYuODUwMDYwNjE2MzA4NzUsMTU5Mi4wMjg3OTM0NzE5OTIyLDQzNjk2LjM4MTkzMDA3NTg1LDE1Mi4wNzk5MTYxOTY4MTEsMjMxLjAyNzA3MjE3MjIxOTU2LDMwNzMuODExODIyMzQ3Njc5LDI0NTA3ODUuNDU3NjE3Mjc1NCwxNDQ2MzQuMzMxMDI4ODY2MSw1MTYuNjQ2MzA0NzkwNjg0MQorMjEsTW9uIDE0IEZlYiAxMSw5NzA3Ljc1MDg3NjEyMTU5Miw0NDQuODA4MjA1ODYyMjg3NSwyNjEzOC42MjI5ODM2MTI1MjQsMTQwMTguNTA4NjUyMjk4NzY0LDYwMDExLjUxNjA4MTQ5MTUxLDExNDA2Mi44Njg1Njk5MTUzMSwzNzk5MDEuMjI3ODEwMDg5LDI2Nzg5NC41MTY0MjY5ODY2NywyODMwMTUuNzk3NzM0OTQ5OSw4NTQzMTEuNDY1Mzk5ODcyLDI4NzQxMy41MjQ1OTcwMDczLDExMDU1NDAuOTI4NzU5NjU5NCwyNzYwNC42MjgzMzk0NTg5NTUsNTc5MTMuNjQ0NzkzNzI0ODEsNjk4MzYuMjYwMTU3OTMxNjQsMTA0ODQ1OS41MzAxNDIyMDU1LDY4OTA2LjA1NzE0OTYzMDM2LDE5OC4xNzg2NzEyODIzNTY5MywyNjI1LjM4ODM2NDUwMzY0MjYsNjUxMjAuNzA3NzA4NzE1NjQsMjQxLjIwOTIwNTE1ODkwMzY3LDM4Mi4zNTU0MjA3ODUyOTU5LDUxODguODUzNTQ0MjE2MDA4LDI3MjMwNDUuODgwNTcwOTEyLDE2MzMyNi43MTExNTQ0NTA4NCw2NzkuNzMyOTY1OTg4MzE4OQorMjIsVHVlIDE1IEZlYiAxMSwxMjgyMC41NDQ4NDYxNDM1MSw2OTQuMDM1Mzk5MTUwMDc1NywzMjE2NS43MzczODE0NDY2NTIsMTkwOTYuNDA2NjE2NDk2MDksNzI3OTkuMTM1MzY2Nzc4MjcsMTcwNzY0LjYwMjg2NTU3ODEsNTIyMTg3LjkzODc3MDkxNzYsMzczMTU1LjQwNDA0NjE3MTMsMzg3NDEyLjcyOTY5MjEwMDUsMTAzNjQ2OS44MDM0MzE5MjczLDMyMjA3NS42MjEwMjkzODM5LDEzMzE5NDEuMjM1NTEyOTUxOSw0MjIyNC4yODgyMTcwNjY5Niw4OTU2Ni4zNzU1MDU2OTkzMSwxMDIxOTUuMjUwOTIyNjk3ODEsMTI4MDgxMC42NDIyOTM1ODEsMTAxODk2LjI3ODIyNDkzMDk0LDMwNS42MDQ4MTU0MzIzNzMsNDI2OS41OTAwMzk4MDQxNzQsOTQ5NjcuMjY0MjI0NTI0MTksMzc4LjE2MjE1MzExOTAzNTk2LDYyNi4zNzg2NzM5OTU0NDkzLDg2MTkuNzEyNDkwMTYzMjQsMjk2NzU5Mi44ODQ0ODk1NjUsMTgwMzUyLjIyNTI5MzM4NTYyLDg3MS4zOTI3ODM2Njg1NDA5CisyMyxXZWQgMTYgRmViIDExLDE2NTgwLjU5MDcwNDY1NDkyNiwxMDY1Ljc4NDU1MDEyNTQ0NTUsMzgyNTMuNzU0OTYxNDg3MjcsMjUzNDYuNzk5MzA0NDc2NjcsODU0MDYuODE0OTI2ODUyMiwyNDkxNDguOTIwNzk3MzcwMzUsNjkzOTUzLjIyMTQ0NjE2ODUsNTAzMTkzLjY4MDc4ODE0MTYsNTEyNjAwLjUzNDQzNTg3MywxMjIxOTg0LjgyNDI4NTk3MDUsMzUzMTk2LjEzMTk4MTAzMzUsMTU1NzM4MC43ODM5MDU1NDAxLDYyNTkzLjYyMDcxOTk0OTQ2LDEzNDU4NC43ODU4MDU5NDg0LDE0NjA0OC43ODcxMDQ4NTM5NSwxNTE5MjcxLjAyNjIwMzY2NDcsMTQ3ODI1LjQwNTUxODY1MjYsNDY1LjYzNzYwMjQ2NDc2NjEzLDY4NTAuMDkzMTY2ODAwMTA3LDEzNTIzNC42OTg0MzgzMjk4Myw1ODYuNzMxMjk4ODMwODIyOSwxMDE2LjYwODc0NDI5NzAwMjksMTQwODcuNzA3Nzk4NTg1OTEyLDMxODA2MjIuNTIyODY4NDk2NCwxOTUzNTQuNjg5NDI1MTc4NjYsMTA4Ny45MTE2NDQ2NTY2MjgKKzI0LFRodSAxNyBGZWIgMTEsMjEwMDYuMDA1Mzc0MTM3Mzk2LDE2MTAuMTEzMzU5Mzg1MzkwMSw0NDEwNy4zNTcyMTgyMjczNSwzMjc2NS42ODY1NTQ3NzUzMjIsOTcyNjMuNTExODg5MDYxMTMsMzUzMjA0LjUyOTkzODQ1NjU0LDg5MDU4My41MTA0Nzc4NjkxLDY1NTc0MS4zMDgyMzg2NzY3LDY1NDg4NC4wMTkwNTcxMjc1LDE0MDI3ODYuODA4ODEwOTcxMiwzODAyNjMuNDM2NjY4ODYyOCwxNzcxOTcyLjQyNDgyMTM4MDMsODk2MjEuOTQ0NjYyNzc3MDgsMTk1ODM0LjkxNTQzODU2NzI2LDIwMzMyOS41Njc5MzgyODg5LDE3NTMyMDAuNzgzNDIxNjMxLDIxMDA1Ni42ODY2MTUxNjEsNzAxLjY4NDExNjIxMzc5MDgsMTA4NDMuNTc4OTU3OTA3OTc0LDE4NzU5Ni40NDg1OTYzNTQxNCw5MDEuOTA4MTgwNzgyODkyOCwxNjM1Ljc0NzQ2ODgyODM5MjYsMjI2MzcuNTA1NzYzMDAzNDI4LDMzNjEzNDguODk3ODc3MjU5LDIwODIwMi4yOTg3ODIyOTE2OCwxMzIyLjQ4MTk4OTgwMzcxMjYKKzI1LEZyaSAxOCBGZWIgMTEsMjYwODUuNDAxNTQ4OTU3NSwyMzkxLjQ4MjkwMjk4OTgwOTYsNDk0OTQuMTU2OTgxODI0LDQxMjUzLjkyNjI4NDk1NjY3LDEwNzk2Mi44MzA0MDExMzcyLDQ4NTEzNC4yNjEzMzMyMjIsMTEwMzg0Ni41OTI1MDYyOTM0LDgyNTMyMC41MTAzMzUzNTgxLDgwODA2MS40ODU2NDI5MDM1LDE1NzIwMzAuNjM0MzU1MTE1Miw0MDMxNzIuMjc3MzM1MTgzODcsMTk2ODE3My4wNTgxNTE5NjcsMTIzNTg2LjAzNzc3NTkyNTc4LDI3NTA4MC4yNjA2MjIzNjE0LDI3NTA3Mi4wNDY2MDg2MzEsMTk3MzM4NS4wNzQwNzU1MjkxLDI5MTc5Ni43OTM0NTcwMjE0LDEwNDYuODE2OTQ3Mzg4MDQ3NSwxNjkzNC42ODA0MjE2NTAwODYsMjUyOTAxLjE2MTI5ODkyNjkyLDEzNzUuMTA5NTkzMTY1NzcyNCwyNjEwLjgyMDI0OTIwMDI1NzQsMzU3MzAuMTI4MDk0ODgxODgsMzUxMTIyMy40MjMxNDExMDIsMjE4OTM4Ljg4NDA5ODMwNTk1LDE1NjUuODYzNDc4OTg0MzM4MQorMjYsU2F0IDE5IEZlYiAxMSwzMTc3Ni43MDc1NDM3MjUwMzUsMzQ4OS4xOTY0MzA0MTIzNjM1LDU0MjY2LjU2NzgwODM0MjQsNTA2MTcuMjQzMTQ4NTYyOTksMTE3MjgyLjI3NzY2NTE4MTkzLDY0NDE1Mi43MDU3MjAzMTEsMTMyMzI4Ni4yODQ1OTY5NzcsMTAwMzk5Ni4yMTQ3OTgyMjkyLDk2NDUyNC4xNzU3NTcyOTc1LDE3MjQ4NDguNjYxMTYwOTU4NSw0MjIxMTUuMzU3MTM2NTg3OCwyMTQxMzYwLjI4MDE3MDksMTYzODQ0LjE2MTcxNzM3Mzk0LDM3MjA5NC4wOTcyMzk0OTE5NCwzNjA4MTkuNjA2MDI3NzA2MiwyMTczMTI0Ljg1MTU2NDU5MTMsMzk1Mzk1LjgzMjYxNjk0NTQsMTU0Ny41OTM2NzQ1MTM3MTI4LDI2MDgzLjAxMDA5MDk5MDE5MiwzMzA2NjMuMzI5OTc5NTQ0NSwyMDgxLjc4OTczMjU4MTQ0Myw0MTM1LjM0Mjk2Mzk5OTU4Nyw1NTMyMC40NzgxMjY0NjQ1OSwzNjMzMTA0Ljk5Mjk2Njg0OCwyMjc3MjUuNzMyMDgyNjIyODgsMTgwNy43NTY3NDA3NDg1MjkyCisyNyxTdW4gMjAgRmViIDExLDM4MDA3Ljg0NTAzOTQ4OTc1LDQ5OTUuNDI5NjA4NzE3ODgzLDU4MzU5Ljk5ODE0NzQ3MTYyLDYwNTgyLjM0NDAwNTYwMjY5LDEyNTE2MC42ODM3MTgwNzUyMiw4MjU4MTkuNjg2MDQ0NjA5NCwxNTM4MjEzLjAyNjczMDg4MjIsMTE4Mjg2Ny4wMjE5MDc0MjEsMTExNjcwOS41MjAwNDY2MDIsMTg1ODU0Ny4wMTQwNzQ0MTksNDM3NDcwLjExOTIyNDkxMzUsMjI4OTY4NS4yNzYyNDYyMjEzLDIwODc4Ny45NjkzODkyMDA4NSw0ODQxMzMuNDc4NzA3NzYxNCw0NTgyNjkuNTQxNTkyMDM4OSwyMzQ4NTc0LjEyNTk5MDUzMyw1MjE0ODIuNDk4MjYxMzEyMjYsMjI2OS4zMzM1NTMxMzY4NzY2LDM5NTk0LjQ1MjU5NDIwNTM0NCw0MTg3NzEuMDA1MTY4MTE0MiwzMTMyLjU0Mzc2NjE0MDU3OTUsNjUwMS4yODQ5NTM4NjM2NjY1LDgzODgxLjY5Mzc5ODMwNDM4LDM3MzA1NDguOTczMzc2NjgyNSwyMzQ3ODguNjAxNTkyMzExNzgsMjAzOC40Njg5MjEwNjk4MDczCisyOCxNb24gMjEgRmViIDExLDQ0Njc5LjE5NjE3Mjc5NjMzNSw3MDEwLjAxNTYwODQ0MjQ3NSw2MTc3Ni40MDkyMzg5MDIzLDcwODI2Ljk5Njg1NjYwMDc2LDEzMTY1NS4zODk3MTU0NDA4MywxMDIyMzc4LjQ3MTMxNDIzNjMsMTczOTUyOS40MjY3NjU1MDE3LDEzNTM3MTAuNjU5NjI5NTE0NCwxMjU4MzU3LjI0MjYxNzMyMzMsMTk3MjM2OC4wMDU5MDUyMjEyLDQ0OTcwMy4xNzUzODIwNTk5NCwyNDEzNDkyLjU0MzUxMzEwMiwyNTYxMDYuMzU4OTI3NTc0OTcsNjA2MTQwLjYxNzcwMDg4NjEsNTYzNDA0Ljg1MzM5MDY0LDI0OTg0NzEuNzI3OTE2Mzg3NCw2NjgyMTAuOTUyODQ4OTA0MywzMzAzLjM1OTc2NTQ5OTEyMTcsNTkxODIuNjUyOTEzMzAxMTIsNTEzNjE4LjYwNDUyMjQ0NjgsNDY4OS4yMzY2MTUyMDMxNDQ1LDEwMTQ0LjA3MTcwMjE0MDE4LDEyNDMxOC4xOTUyNjg2NDU3OCwzODA3MjgwLjk3ODYxMzU1NTQsMjQwMzc2LjcyMTEzMDczMDMyLDIyNTAuMzAwNzcxOTY4NTIyCisyOSxUdWUgMjIgRmViIDExLDUxNjY4LjM5MzEwOTk4NDk5LDk2MzEuODYwNzc0NDAyOTU0LDY0NTYyLjgyOTkxOTA5ODU3LDgxMDE4LjAyNDEzNDQzMDQ3LDEzNjg5Ni44NzE1NzQ1NzQ3LDEyMjQxMTQuNzU5MjExMTI0MiwxOTIwODMzLjQ5MDUzMTM1NDcsMTUxMDIwMC42MDUzNjc1NTMsMTM4NTIwOC4xNDA0NDQ1ODE0LDIwNjcwMjEuNDEyMTAzNjY5NSw0NTkzMDAuNjQwMDY3MTYxOSwyNTE0NTk5LjkwMDA0NDA4MTcsMzAzMjY1LjM0MDU2OTQ3OTMzLDczMTY5Mi42ODU3NTU3MTI5LDY3MTE1Ni41OTM0NzI5ODI2LDI2MjM1NDAuNTUyMzYwNTk0Nyw4MzA5OTcuODAzMTc3ODY2NSw0Nzc2Ljc5ODM2NTkwNTA1NSw4Njk5NC40NzUzMzM4NjYyMyw2MTA2OTQuNjc5MDk3NDYyMSw2OTg4LjIwNDIwNzI4NjQ4NSwxNTcwMy43ODAyNTk0MDA2NjQsMTc5Njk0LjEwNzUzNjUyOTIsMzg2Njg1NC45OTkyMzY0MzQ3LDI0NDczNC45NzU3OTg5OTkzNywyNDM4LjI3NDcxMDk2ODE2NTQKKzMwLFdlZCAyMyBGZWIgMTEsNTg4MzguMDcyNDY3MzczMTksMTI5NDguMDI1MDcwNTc1NzQ2LDY2NzkxLjM2MjA5OTkyNDMsOTA4NDguODI0MDgxMjM2NTgsMTQxMDUwLjcyODcwNjc2NjQsMTQyMTIyMy4xMzU3NDcyODUsMjA3ODY3Ni4xMDMyODE1MiwxNjQ4NDI0LjMxODA2ODc2NDksMTQ5NTEwMy45Mzg2NDgxMDU4LDIxNDQxNjUuMDAzNDA5MDIzNCw0NjY3MjMuNjM0MzM0NjQ2NiwyNTk1NjM2LjcyMzQxNjQyNzYsMzQ3OTk5LjM5NjU1OTQ2NzY2LDg1NDMxNC41ODk0OTc1ODQ4LDc3NjM2Mi4xNzY5MzE3NzY4LDI3MjU4MDMuNTU4MzkzMTM0MywxMDAzMDA5LjAyNTIzMjI3NjgsNjg2NS41NTk1ODE0NjA5NzcsMTI1NTU4LjAwMDc1MDQ2MjA3LDcwNTQxOS42NzUyMzQ2NDM0LDEwMzczLjE0NzA3OTgzNDc3LDI0MTA0LjI5MDQ5NjYyMTk5LDI1MjcxNy4zMTY0OTUzNTU1LDM5MTI0NjIuOTc5NTg4NDE4NywyNDgwODcuNDk2MDY3OTM1NzUsMjYwMC4xNjM4MjMzMzI1NjkzCiszMSxUaHUgMjQgRmViIDExLDY2MDQ2LjM3MjAxNzEyMTgsMTcwMjIuNDUzODQ0MjQ2OTEzLDY4NTQzLjcwNjAwNTk2ODY2LDEwMDA2OC40MzQ2MzAyNDczNiwxNDQyOTAuNDEyODU3MzIyMDUsMTYwNTQ2My44NzQ0NjQ4Njg4LDIyMTIxODYuNTM1NDY1ODgsMTc2Njc3Ni40OTUzMzExODE3LDE1ODc2NjcuMjU1MzE1NDMyLDIyMDU5NDguMjczNDE5MzIsNDcyMzg0LjA3NzI0ODc1MDIsMjY1OTUzMi4yODM3MTk3NTg1LDM4ODYzOS45MjI5ODE3NjAwNiw5Njg2MjMuNTg3MzUwOTI4LDg3NDY0OC40MDgxNDI5MTI2LDI4MDc5NzUuODc5MTk0OTg2LDExNzYzMTUuNTcwODkyMzg4NSw5ODEwLjk4NDEwNDk4Nzk4OSwxNzc1OTcuODA1MTQ1NTczNTcsNzkzOTE1LjQ4ODA0MjA1OSwxNTM0MC43NDQ2MjMzMTI3MzIsMzY2NDcuOTYxMjA4NDAxMzUsMzQ0OTk1LjI4MDMzNjQyNjc1LDM5NDY4NTMuOTcxNzMyMDE0LDI1MDYyOS44MDAxNzYyMzI3NiwyNzM2LjAzMDU3NjIyNzcxOQorMzIsRnJpIDI1IEZlYiAxMSw3MzE1OC42MDcyMzc2NTE3MywyMTg4Ni40MDMxOTIyNjk5OSw2OTkwMC43NTc2Nzg5NjY0NiwxMDg0OTcuMzk0Mzk3NTgyODYsMTQ2NzgwLjE2OTQ5OTg2MzM4LDE3NzExMjEuNjQxMDQyOTgzNCwyMzIyMzkwLjUxNzg1ODEzMywxODY1NDc4LjA0NDA4Mzk2ODcsMTY2Mzc5NS45ODk4NzQ5Mzc4LDIyNTQ2NjguMTMzMjYyNjMyNCw0NzY2MzQuOTA2MzMwNDI2MiwyNzA5MTcwLjU2ODc4MTYyOSw0MjQyMjMuMTk3NTYxNjY0MzMsMTA3MDk2MS45NjgxMTkyODA2LDk2Mjk2My4xNDk5MDI3NTQ4LDI4NzMwMDIuNTE1NzM2NTkxNSwxMzQzMjk4LjkzOTMwMzkxMTgsMTM5NDAuMDk1NTMxMTUwNTkzLDI0NTY2My42Njk3NjI0OTE0OCw4NzM0NzAuMjc4NDIxMzU2NiwyMjYwMS43NzUwMzM4OTUxNTYsNTUxMTQuMjE1NzExMzYwNyw0NTYyMzAuODI5NTQ1OTY0MjUsMzk3MjMyNC40OTI2NTY3MDksMjUyNTI2LjY4MzI0MDE0NzY2LDI4NDcuNTUyNDYyOTU1MzgKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvRGVtb2dyYXBoaWNTRUlSRGlzZWFzZV9SS19SZWZlcmVuY2UvRmx1L3dvbWVuL1NfMi5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0RlbW9ncmFwaGljU0VJUkRpc2Vhc2VfUktfUmVmZXJlbmNlL0ZsdS93b21lbi9TXzIuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUzODdkMWUKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0RlbW9ncmFwaGljU0VJUkRpc2Vhc2VfUktfUmVmZXJlbmNlL0ZsdS93b21lbi9TXzIuY3N2CkBAIC0wLDAgKzEsMzMgQEAKK2l0ZXJhdGlvbix0aW1lLEVHLUZSRy1HMjEwMDAxLEVHLUZSRy1HMjEwMDAyLEVHLUZSRy1HMjEwMDAzLEVHLUZSRy1HMjEwMDA0LEVHLUZSRy1HMjEwMDA1LEVHLUxPRS1HMjQwMDAxLEVHLUxPRS1HMjQwMDAyLEVHLUxPRS1HMjQwMDAzLEVHLUxPRS1HMjQwMDA0LEVHLUxPRS1HMjQwMDA1LEVHLUxPRS1HMjQwMDA2LEVHLUxPRS1HMjQwMDA3LEVHLUxPRS1HMjQwMDA4LEVHLUxPRS1HMjQwMDA5LEVHLVVQRS1HMjkwMDAxLEVHLVVQRS1HMjkwMDAyLEVHLVVQRS1HMjkwMDAzLEVHLVVQRS1HMjkwMDA0LEVHLVVQRS1HMjkwMDA1LEVHLVVQRS1HMjkwMDA2LEVHLVVQRS1HMjkwMDA3LEVHLVVQRS1HMjkwMDA4LEVHLVVSRy1HMzAwMDAxLEVHLVVSRy1HMzAwMDAyLEVHLVVSRy1HMzAwMDAzLEVHLVVSRy1HMzAwMDA0CisxLFR1ZSAyNSBKYW4gMTEsMTQ3ODA2LjY4NTQ5Mjk5NjU2LDEzMTk2OS43ODk3NzAwNzA4Nyw3NjgxNy4xNTkyNDUxMTQ3NywxNTg4MDEuMjQ1OTc1NzQyNTIsMTYwMDcwLjA2MTAzMzUwMzUsMjU4NzU5NS4yODEwODkwNjkzLDI4MTE5MzcuMTExMjY4MzQ5NSwyMzA0NjUxLjAyNTk1MDI0OTgsMjAwMTgyMS45ODkzODcwNTY4LDI1MDI3ODEuNTMxNDA0OTExNSw1MDgyNDEuMzI4MjM3NjIyMTYsMjk3MTA4NC45ODk3MDM2MTQ3LDU4Nzk5NC44NDUxMDk1MDE2LDE1NjA4OTkuOTkwODIwODQwMiwxMzk1MTYwLjA4NDY4NzE0MDgsMzIwMjcxMi4xMTI1MDAzNzQsMjMyMDIzOC40NjY1MjE2NjksNjUyNTM3LjEwNzc5MzA1NTksMTg5OTE3OS4yMDkxNjU2MzY1LDEyNjQ4MDAuMjMyMzgwODA2LDE4Njg1MDYuNzQ0NzIzNTIxNCwyMDc0OTI5LjM3OTg1Mjk0NjQsMTg0NTgzNy44ODM1MTU4NzMyLDQxNjU0NzIuMDQyNDI4NDQ5MywyNjgzMjIuNTc2NjgwMDU4MiwzMzU5LjYyOTkyMTk5MDg0OTcKKzIsV2VkIDI2IEphbiAxMSwxNDc4MDUuODE1NDEyOTU5MzIsMTMxOTY5LjkyMTczMDE2NjA3LDc2ODE1LjM2NTU5OTcxNTE0LDE1ODgwMC42NzI5NDYwODgyNSwxNjAwNjUuNjc4NDUxMDI2MywyNTg3NTk2LjU0MTc3Mzk4ODQsMjgxMTkyOC4zNTY1Njk4MTg3LDIzMDQ2NDUuNjk4NDMzODc5LDIwMDE4MTQuODk2MDA2NzUzNywyNTAyNTYwLjk3NzExMTQwNTcsNTA4MDczLjc4Njc3OTk4MTksMjk3MDgzMS42MjcyNjg3ODMsNTg3OTk1LjQzMjYyMzg2NTIsMTU2MDkwMS41NTA3NjIzODYzLDEzOTUxNjAuMDIyMDc5NDQzMywzMjAyNDczLjMxMTk2NTUwMSwyMzIwMjM5LjM1MDE3MDcxNTIsNjUyNTM3Ljc2MDMyNTA2MywxODk5MTgxLjEwODMwOTk2NjUsMTI2NDgwMC4wODYyNTkyMTIsMTg2ODUwOC42MTMyMjUzODcsMjA3NDkzMS40NTQ3NzczMDgsMTg0NTgzOS43MjkzMDcyNTg1LDQxNjIxMDYuODYyMTE4Mzg3NiwyNjgxOTMuMjIxOTgzOTMzNiwzMzU5LjU0OTA4ODYzMzc4NgorMyxUaHUgMjcgSmFuIDExLDE0NzgwMC43NDA2NTE5Mzk2MiwxMzE5NzAuMDUyNzk0NTMxMSw3NjgwNS43Njc0OTQ1MTY4NywxNTg3OTcuMDUwNTI2NjExOSwxNjAwNDIuMzI4NTAwMDcyNjgsMjU4NzU5Mi4xMjkwMzU1MjE4LDI4MTE4NzAuOTg2NzkzNzk4NCwyMzA0NjA4LjI4MTkwMzU4MTcsMjAwMTc2OS42MDM4NDE5OTgxLDI1MDE0MjguMTA2MDc4OTIwNCw1MDcyMjEuMDU0ODE1MDU1NiwyOTY5NTI4LjQ1NDUyOTUwNTcsNTg3OTk1Ljk3NTk5MTkzMTMsMTU2MDkwMy4wMjI2MjE5NjQzLDEzOTUxNTMuODA5MzI3NjEzNiwzMjAxMjQzLjg2MTc2NDA1NDcsMjMyMDIzNC4xNzQ5MjYxODQ2LDY1MjUzOC40MTIzNTk4NjM2LDE4OTkxODMuMDA0MTY1Nzk3NSwxMjY0NzkzLjk5MDI0NTA3MSwxODY4NTEwLjQ4MTE5NTcyMDYsMjA3NDkzMy41MjkxNDc4Mzk0LDE4NDU4NDEuNTcwNzQyNjY0LDQxNDUwNTEuOTA2OTU1Nzg1LDI2NzUzNi40NDQzNDcxNzQ0LDMzNTkuMTIxMDc1MjgxOTM0NworNCxGcmkgMjggSmFuIDExLDE0Nzc5MC4yMzUwNzU3NjYzNCwxMzE5NzAuMTc0MzU3Mzk2NzgsNzY3ODUuMzAzNDAzMjIzOTcsMTU4Nzg5LjI0Njg5MjU5ODQzLDE1OTk5Mi40Nzg5MzE1NzMzNywyNTg3NTc4LjUzNzc1Njk4MTMsMjgxMTc0Mi44OTE5MzI5MDk0LDIzMDQ1MjQuMDc4NTM5ODg4LDIwMDE2NjkuMDE1OTkzNTQ0NiwyNDk5MTk2LjA2MzUzMTI4NDcsNTA1NTU4LjUyMzc4NjYyMzEsMjk2Njk0Ny42NjE4MjM4NTI1LDU4Nzk5Ni4wNTAxNzIwNTYyLDE1NjA5MDMuNTU4MTc3ODg1LDEzOTUxMzguNDI5MDQ5NDMxOCwzMTk4ODEzLjQxNDU1OTUxNzUsMjMyMDIxOS45ODY0ODIxNDYsNjUyNTM5LjA1OTEyMjMyNTYsMTg5OTE4NC44NjUwMzA0MzIxLDEyNjQ3NzkuMDUwMjkzNjU4MiwxODY4NTEyLjM0MzUxNTg5ODgsMjA3NDkzNS41OTc2MTk4OTQ0LDE4NDU4NDMuMzY1Njg5OTA4NCw0MTEyNDYxLjIyNDU1NTk1MDYsMjY2MjY0LjI2MDc4MDkyMjQsMzM1OC4yNTAzNTQ2MjcyMQorNSxTYXQgMjkgSmFuIDExLDE0Nzc3Mi41NDMyODMzOTYxNCwxMzE5NzAuMjU1NzcyODE1MTQsNzY3NDcuODg0OTc4NTcxOTQsMTU4Nzc1LjEyMjg5ODk0MjgsMTU5OTAxLjAyMTgwOTIxMTY0LDI1ODc1NDYuNjgxNzY4NTY4LDI4MTE0OTUuMjE2MzAyMjI2MywyMzA0MzYwLjQ1NjA5NTE2OTMsMjAwMTQ3NS43NTE1OTEzNTg2LDI0OTU3NTguODA4MzUzMzkzLDUwMzA1Ny42NTgzMzIwODQsMjk2MjkyMi4wODU2ODY3NzUsNTg3OTk0LjEyOTAyNzM5MDksMTU2MDkwMC4xMDk3MTI5MiwxMzk1MTA2Ljg5NDMyMTQwNzIsMzE5NTA0MC44NzMzMzczOTQ2LDIzMjAxODkuOTY5MTI1MjMwMyw2NTI1MzkuNjgzNjkyMTI5NCwxODk5MTg2LjU3Njc2MDgzNywxMjY0NzQ4LjU5OTU2MTg0ODIsMTg2ODUxNC4xODIwMTQzNzc2LDIwNzQ5MzcuNjQxMDg4MTYsMTg0NTg0NC45NjA1Nzc5ODY0LDQwNjU4MTEuNDM0OTcwMDA2LDI2NDM4MC4wMzQxNTE1ODc0LDMzNTYuODExOTcyNzcwNTcKKzYsU3VuIDMwIEphbiAxMSwxNDc3NDIuOTY0Nzk0NDk2NDgsMTMxOTcwLjIyOTYyNjA2Mjc2LDc2Njc4Ljc3NDI5MTczMzUsMTU4NzQ5LjQxMzA2OTA3OTIyLDE1OTczMS40OTEyMjAzOTA0MiwyNTg3NDc1LjM4NTcxODU2MjYsMjgxMTAxMS42Njc1MzYsMjMwNDAzOS43NjYyMjQ5MjM1LDIwMDExMDAuNjg0OTcyNTIwNSwyNDkwNjYxLjIzNDM2NjEwMDcsNDk5NDg0LjA1OTQ4MDc3NTE1LDI5NTY4MzMuNDQyNjk5NTcyNSw1ODc5ODYuNzgxOTkxNzkwMywxNTYwODg1LjgxMzg1OTAyMDQsMTM5NTA0Mi42NzcxMTU5Mzg2LDMxODkzNzcuNzU3MjkwOTg3OCwyMzIwMTI3Ljk5NDU0ODExMDgsNjUyNTQwLjI0OTMxNzI5MTgsMTg5OTE4Ny44ODA5MTMzMDQyLDEyNjQ2ODYuODYwNTE3NTc3MywxODY4NTE1Ljk1NzAyMDI4MjMsMjA3NDkzOS42MTcwNjYwNDUzLDE4NDU4NDUuOTk2NzU5NTU0LDQwMDQ0MjYuMjA1Njk4MTY1NiwyNjE3NTQuNDg4MDY1NDg3NzMsMzM1NC40NTgxNDQxMzU2MDM2Cis3LE1vbiAzMSBKYW4gMTEsMTQ3NjkzLjA3NTI0ODA5NDIyLDEzMTk2OS45NzUyNzQyNDUxNCw3NjU1Mi4yNDIxMDcyMzg2NCwxNTg3MDIuODMwODE3ODY4MDYsMTU5NDIwLjMyNDA3ODc4NDY0LDI1ODczMjYuNDExMjQwNTQxNCwyODEwMDg2LjM5MTg2OTIxNiwyMzAzNDI0LjM4NzU3MDQ3OTQsMjAwMDM4Ni4yMzM1ODA0MjM1LDI0ODI5NjkuMzAwNDI3OTIsNDk0MzIzLjM0Njc2MTUyOTQsMjk0NzQ1MS44NDY4MDY0MzgsNTg3OTY3LjYyMDkwMDUzNjMsMTU2MDg0Ny44NDc4MjgwNzgsMTM5NDkxNi4zMjIzNjkzOTU1LDMxODA3MjAuMzYzNTAzNzgyLDIzMjAwMDUuMzQyMDk2MDkyLDY1MjU0MC42OTE3ODU5NDI0LDE4OTkxODguMjg5ODAzOTg3NCwxMjY0NTY1Ljc0ODU4Mjc0NjQsMTg2ODUxNy41OTg1MjQ5MTIzLDIwNzQ5NDEuNDQ3ODcxMjE0NSwxODQ1ODQ1Ljc2MDg2NDQ5MTMsMzkyNDE2My4zMzIwNzY5ODA3LDI1ODA3NC40NDYzMTkxNzM0NywzMzUwLjU1NDAwODEwNDI1NworOCxUdWUgMSBGZWIgMTEsMTQ3NjEwLjQxMTE0NjY0NTkzLDEzMTk2OS4yODY4NzYwNjY3Niw3NjMyOS40NDQ5MDIwNjEsMTU4NjIxLjIzOTQ4MTMyMjIzLDE1ODg3MS43MDI0NjE2MzY4LDI1ODcwMzYuMjgwODM2OTkwNiwyODA4Mzk1LjUxOTMzNzA0OSwyMzAyMjk3LjE4Njg3MTM0LDE5OTkwODUuMzQ2NTM4ODIxNywyNDcxMjU0LjM2NDY5OTY0MTcsNDg2ODEyLjQ0NjE0NzMyMzQ3LDI5MzI5MDAuNDAyNjQ5OTI5Nyw1ODc5MjUuMTg2MTkzOTkyOCwxNTYwNzYzLjExMzI1ODIxMiwxMzk0NjgwLjY0MzUyOTU0NDYsMzE2NzM4MS40Njk5MzgzMDksMjMxOTc3Ni4wNzg3NDcyNDgzLDY1MjU0MC45MDUwMjg1ODg2LDE4OTkxODYuOTEzNTk2MTQ5LDEyNjQzNDAuMzg4NzA3NDg2LDE4Njg1MTguOTg5MjQyNDgyMiwyMDc0OTQyLjk5NjkzNzk0OTQsMTg0NTg0Mi44NzAxNDEyODY5LDM4MTgxMzQuNzU0NjUxNzczMywyNTI4NzUuMTI2NjU4NDc0NywzMzQ0LjE0OTk3NTE1NjEzMzcKKzksV2VkIDIgRmViIDExLDE0NzQ3Ny43MjE5MDgxMjk3NSwxMzE5NjcuODEyNjY0NjUyOTQsNzU5NTQuMjYyNjExODQyODksMTU4NDgzLjk1MzkzMDA1MzU0LDE1Nzk0Ny41NjM1NDQ2MzMyLDI1ODY1MDAuNjA4NzQ3NTA0NywyODA1NDQxLjYxNDI3NzIxODUsMjMwMDMyMy4zNDk2MjUzNjk1LDE5OTY4MjAuMzcwODUxNzM3NCwyNDUzNTY0LjQxMDQyOTc2MzYsNDc1OTk5LjE2MDcwODk0MDM2LDI5MTA1ODkuNDIzMTcyODQ5LDU4NzgzOC45Njc5MjEwMTIzLDE1NjA1OTAuMTAxOTAxMjQ4LDEzOTQyNjEuMzgwNTUyNTIzLDMxNDcwMzYuNjQ2OTY2Njk4NiwyMzE5MzY4LjA2MDg5ODc1NTcsNjUyNTQwLjcxMzYxNzU0OTQsMTg5OTE4Mi4xMzIxMzM4NTYyLDEyNjM5NDAuMzg5NDM2MzkyMywxODY4NTE5LjkzMjI1NjU5MzEsMjA3NDk0NC4wMjMyMjQ0NTEzLDE4NDU4MzQuNjcwNzExMDM2OCwzNjc4MTQxLjc5NTk4NDUyNDMsMjQ1NjAwLjA3Nzk5MzgwNDgsMzMzMy45MjI3MjE1NjIxMTU0CisxMCxUaHUgMyBGZWIgMTEsMTQ3MjcxLjM0NjcwODA5Mzk0LDEzMTk2NC45NTQxNTcyMzQ2NCw3NTM0Ni40MjM3NDc0MzkxMywxNTgyNjAuNjYzMTU5NDIxMTUsMTU2NDUxLjQ1MDQyNzcxMzU3LDI1ODU1NDcuNTk2MjI5Njk5NCwyODAwNDU4Ljc1MDUwODMwMSwyMjk2OTg0Ljk3MDA2MDUxMzQsMTk5MzAxMi41NzMwNTU0NjE3LDI0MjczMjUuMzkwMzg3NDc0Niw0NjA4MDIuODU2MDIwNDk1MiwyODc3MDU2LjE5MDU0OTk3NTMsNTg3NjcyLjc5MDgxODA4NTgsMTU2MDI1NS4zMzIxMzM3Nzc0LDEzOTM1NDEuMTkzNTczODY2NSwzMTE2NTgwLjQ4NzQxMDE1MiwyMzE4NjY3LjQ4NTE2MDQ1NTYsNjUyNTM5LjgyNzQzNDIxNzgsMTg5OTE3MS4wNDAxMDgxNSwxMjYzMjU0Ljg4NzA4MTAwNDcsMTg2ODUyMC4wOTczMTczNDA4LDIwNzQ5NDQuMTAzMzUyNTE1LDE4NDU4MTYuMTk4MDMzODczLDM0OTYxOTAuNDU3NTU4OTk5LDIzNTY2Ni4xODE2NTU4OTg1NywzMzE4LjA1NTQ2OTEzMDU5NgorMTEsRnJpIDQgRmViIDExLDE0Njk1OC4zMzg5NTYxMTcwMiwxMzE5NTkuNjk5MDQxNTk0Niw3NDM5MS41NzIyMTg2OTI5MiwxNTc5MDYuMzA3MDg5MjAyMTQsMTU0MTA2LjA3NjIyNzkxODg1LDI1ODM4OTMuODIwNDg4OTYzMywyNzkyMjU4LjA2ODE3ODQ0NCwyMjkxNDczLjg4NjUzODQzOSwxOTg2NzY3LjQ4MTMzMzM1MjYsMjM4OTE1MC4zODkzNTE5ODYsNDQwMDgyLjY0MTg5NTg5NDIsMjgyNzY4OS4yODA3Mjg3NTI3LDU4NzM2My43NTcyMjA4OTc3LDE1NTk2MzAuNTc1OTcyMTQ5NCwxMzkyMzMzLjA2Njk2NjcxMDEsMzA3MTg2My43MTc5MTQyNTQsMjMxNzQ5My4xNjQzNDgwMDEsNjUyNTM3Ljc2NzY1NTM5OTcsMTg5OTE0OC40OTc3MTk5MzQ3LDEyNjIxMDcuNzI4MDExMjU4NiwxODY4NTE4LjkzMjA5ODQ1MzksMjA3NDk0Mi40OTc1NDQwMzEsMTg0NTc3OC4zNDcyNzcxNDM1LDMyNjU5MzEuOTUzODE0NzQ3LDIyMjUzMy41MDEyMDkxMjQ5OCwzMjk0LjAzODA1NzQ5NDAwNgorMTIsU2F0IDUgRmViIDExLDE0NjQ5NC41MDI2NTQyODY2LDEzMTk1MC40MDExMDQ4NTc1Niw3MjkzNy4xMTIyMzEwMTEzMywxNTczNTYuMjA1MDQxMzgwNzQsMTUwNTQ3LjY2ODU0Njk1ODQsMjU4MTA4OC4xNjM5MTM3MjE3LDI3NzkwNjMuNTc2MTUzNTgxNSwyMjgyNTc0LjM4NzAyNTczNSwxOTc2NzU0LjUyOTg2OTMzNjYsMjMzNDg1My4xNzAzMzMwNTg2LDQxMjg3NC43MTQ0ODI1MjI0LDI3NTY3NDUuOTczMTY1MTQ1Niw1ODY4MDcuMTkwMDgyMzY2NywxNTU4NTAxLjUzODk3MTIzNDMsMTM5MDM0OC44MDA4MDc4MTQsMzAwNzY1OS43NDc0NzYyMzIsMjMxNTU2NS45NjE0MjU5MDUsNjUyNTMzLjc3NDA3NjM1ODgsMTg5OTEwNS43NzQyOTY3MDQyLDEyNjAyMjguMzE1MTgzOTk4OCwxODY4NTE1LjU0NzIzNTA3OTMsMjA3NDkzNy45NTg2MjM2ODg3LDE4NDU3MDUuMTEwNDIwNjg0NiwyOTg1MjgxLjkxNjM2NzQyMzcsMjA1ODY4LjMzOTE2OTg5Mzg1LDMyNTguNTcwNjMzMTEyMzg4NAorMTMsU3VuIDYgRmViIDExLDE0NTgyMS4yNTA5ODY4MDc3LDEzMTkzNC40MTE3MDk2Nzg0LDcwNzkwLjIyMjE2NTYzMTU0LDE1NjUxOC41Nzk3OTYxNzYxLDE0NTMzMC4xMjIxMzMzMzc3LDI1NzY0MTkuNDM4NjE3NTU2LDI3NTgyNjIuNDU2MTAxMTI2NSwyMjY4NDgxLjA5OTM1MDkyLDE5NjEwMjQuNjA2OTEyOTExNiwyMjU5NDkyLjQxMzUwNzIwMiwzNzg2NzQuMTgxMzI1NDU4NDYsMjY1NzQ2MS45ODI2OTkyNjUyLDU4NTgzMS41ODQxNjI2NDQsMTU1NjUxNS4zNzY1NjA3Nzg2LDEzODcxNDcuODA0NTE0OTMwOCwyOTE3NjU0LjcxOTE3OTE2NDYsMjMxMjQ1OC43NTc4MjE3MTM2LDY1MjUyNi42NTE4MzEzNzE4LDE4OTkwMjguMjEwMTUwNzIxLDEyNTcyMDQuMzYzODA4MiwxODY4NTA4LjUyMzYxNjk5MTUsMjA3NDkyOC4zOTk5MDQ0ODMyLDE4NDU1NjguNzE4MTcxOTE4NSwyNjU4NDU3LjkyMzA4NTI1NSwxODU3MDIuNzc2NjIwOTM2MywzMjA3LjQzMzkwNzQ3Mjk5MzMKKzE0LE1vbiA3IEZlYiAxMSwxNDQ4NjMuMjgwMzgzMDQ2MzcsMTMxOTA3LjUwNTcyNDAxMDM1LDY3NzI5LjcyMzg5MTIxMjgxLDE1NTI2Ni40NTI3MzM2MDA3NywxMzc5NjkuNjMzNDEyOTA4NjIsMjU2ODc3OS4zMjEyODU5ODEsMjcyNjEwOS4xNDM0NDI5MDUsMjI0NjU3MS4xMDk1Njg1MTQsMTkzNjc5Ny4yMTM5OTM4MDU1LDIxNTc3ODAuNjEyMzIyMTk2NCwzMzc4MjkuMjE5NzY5NjczOSwyNTIyNzM3LjAzMTkzNjY4Niw1ODQxNTkuODQzNDgxOTM5LDE1NTMwOTguNDI0OTQxNTk2LDEzODIwNjQuODk1NzA4NDEyNiwyNzk0ODY0LjU4MDQ2NTU1LDIzMDc1MjQuOTYyNzA5MDEyLDY1MjUxNC41Mzg5NTIxNjU5LDE4OTg4OTEuMzcyNTAzNTk2NiwxMjUyNDE1LjgyNjQ1MTk5NzcsMTg2ODQ5NS42MTI0NTEyNywyMDc0OTEwLjM0NDg1NDgxNCwxODQ1MzIxLjQwOTc3MTY0OCwyMjk3NzEzLjcxNDk1Njc2MjcsMTYyNjA5LjcwNjI2OTYwMjUsMzEzNS41MDkwMDcxMzE5MTcKKzE1LFR1ZSA4IEZlYiAxMSwxNDM1MzEuNzQwOTkyODEyNDQsMTMxODYzLjIwMTIwMzMwODksNjM1NTQuODY2NTM1ODIzODgsMTUzNDM2LjczMjc3MjkzMTksMTI4MDgyLjkwNjIxNzc1NTEyLDI1NTY1MTguODMzMDg3ODEyNiwyNjc3NjE2Ljc2MjQzMDkxMiwyMjEzMjc5LjgzODE5NTgyODcsMTkwMDM5My44MjA1NDcyMjg0LDIwMjUzNzIuNTA2NDcxOTgzLDI5MTk2NC45NjI5NTYyNzU4LDIzNDcxNDEuMzQ1MDM0NDM5Niw1ODEzNjQuODU1MzEyMzA1MywxNTQ3MzU4LjgzNTI1MzA3LDEzNzQxNDQuMTYyNjQwODE1OCwyNjMzMTU1Ljk4ODY0ODI0MSwyMjk5ODI5LjgyOTQ4Nzg5NSw2NTI0OTQuNjQ0OTk0OTI5MiwxODk4NjU1Ljk3ODM0OTg1MiwxMjQ0OTc1Ljg1MTg5MjQ0MSwxODY4NDczLjM3Nzk2NzAzNjYsMjA3NDg3OC4xODY5MDU2MjEsMTg0NDg4My45OTE2NDI5Mjk2LDE5MjM2NjEuMTQxOTA5NTA4NSwxMzc4MTcuNTM3ODc4NzU3OSwzMDM3LjMxMjM2NDg4NTI2MDYKKzE2LFdlZCA5IEZlYiAxMSwxNDE3MjQuNzE3ODQ0NDQzOCwxMzE3OTEuNTMwMDI0Njg4MjUsNTgxNDQuMjk4NDk0MDc5MDYsMTUwODI2LjMzMTAxMDg2MTI2LDExNTU0My4xMzQ1NjcwMDc3MywyNTM3MjAxLjI5NDU5NTEzNiwyNjA2Mzk5LjE0MzEwODQ2NiwyMTYzOTAzLjI2ODU2MTcxMTUsMTg0NzE0Mi4yMzcxMDYyMDg3LDE4NjAxMTAuOTY4NDU2NTMxNCwyNDM4NTguNTI1ODE1NDIwMjYsMjEyODk0OC4wNDAzNTU4NzA1LDU3Njc5NS43NjU0NzU4NDMyLDE1Mzc5MjEuNjY5NjczNzI2LDEzNjIwMjEuMjM1ODY4NjEyOCwyNDI4ODA2LjU5MzkzMDIzLDIyODgwMjQuNTIyMzMxMTgzLDY1MjQ2Mi43NjM3NDQyODM1LDE4OTgyNTguNjY4MTM0NjU5LDEyMzM2MjUuNTA0MjI2MzY0MiwxODY4NDM2LjUzMjYyNjQ2MzMsMjA3NDgyMi44MTcxODIwMjUyLDE4NDQxMjUuMTI2NDAxNzc2NCwxNTYwODM1LjE3Mzk3MzY4ODksMTEyOTg4LjE0MzE4MTQ0Njc4LDI5MDcuMzk0MDQ0NjM1NDQyMgorMTcsVGh1IDEwIEZlYiAxMSwxMzkzMzUuOTAwOTAwMjAyNiwxMzE2NzcuNTQ5OTkxNzMzMTMsNTE1NTAuMTQ4MzIyOTI1NDMsMTQ3MjA0LjcyMTEzNzgyNTQ2LDEwMDY4Ny40ODk0NTYxOTMwMywyNTA3Mzc3LjA1NDc3NTY3MTYsMjUwNTEwNi40OTAwMjI4NTksMjA5Mjc1Ny4zODU0NDM1MDIzLDE3NzE3MzUuMjYzMDcyMTIzOCwxNjYzOTcyLjkwOTc4OTQ5MTcsMTk2OTU3LjcwMjA2NjA4ODMzLDE4NzI5OTMuMTg4MzczMDY1Myw1Njk1MDUuODIwNDg1MDk2OSwxNTIyNzUyLjQxOTQ0MDczNTQsMTM0MzgzNC41MDUyODk4ODYxLDIxODMxMDcuMDI5NzY1MTI1LDIyNzAyMzIuMTIxNTg1MzI4Niw2NTI0MTIuNjkwMjIwMTk5MSwxODk3NTk5LjM2ODg1OTI1NjksMTIxNjY1OC42NDU1NDYyOTAzLDE4NjgzNzcuMDg5NzgxMzQ0LDIwNzQ3MjkuNjcwODIwMDkwNywxODQyODMxLjkyMzIzMTU2MDMsMTIzMjA3My43OTQ1MzEzNTY4LDg5ODQ4LjQzNzI5OTkyMDgsMjc0MS4zNDU5MTgxMTQzMjkKKzE4LEZyaSAxMSBGZWIgMTEsMTM2MjY1LjQ2MTM5NDk1LDEzMTQ5OS4yODEzMzQwNTIwNyw0NDA2Ny41MDExNjAxMDksMTQyMzM4LjUyNTg5NDM5Mzc3LDg0NDA3LjgxMjM1MjU2NDQzLDI0NjIzNzcuNjQ2MTc1NjAxLDIzNjY1MTIuNTk2NjE2MTIzLDE5OTM3NTIuNTQ2NzY5ODI5MiwxNjY5MDgzLjE4MzM3NTExOTcsMTQ0NDM0MC45Mzc0MDU2MTQsMTU0NDY4LjMyNDE4NTk3NTM2LDE1OTIxMDIuMjc0NTg4NjQ2MSw1NTgxODguNTAyNTQ5NzIwNSwxNDk4OTcwLjMxMzM3Mjk0MDMsMTMxNzE1Ni41OTgxNjA5NTcyLDE5MDQzNDEuNDcyMTU5NDcxMSwyMjQzOTIwLjkwMDc2NzQ5NCw2NTIzMzUuMzc1MTI4NjgyNiwxODk2NTIyLjE2OTE1MjY1MTcsMTE5MTg2OS4yNzg2MjQ1NzQyLDE4NjgyODMuMDkwNDM2MDgyMywyMDc0NTc1LjYzNTYyNzkwNDQsMTg0MDY2NS4xMzU4NjU4ODU4LDk1MjgzMi42MTEwNzk3MjE3LDY5NzMwLjY3OTQ5ODkyNjA3LDI1MzYuODg4MDMwOTE2NDU4MworMTksU2F0IDEyIEZlYiAxMSwxMzI0MzQuMDM5Mjk3NDU3MTcsMTMxMjI1LjA5MjcyNTQ3MzIsMzYyMjcuNTgyNDkxNDg3ODYsMTM2MDMyLjMxMzY2NzQ0NzI4LDY4MDE2LjE2ODQ4MDk5NDEyLDIzOTYyNzkuMDc2OTQ0NDM3LDIxODU1NTMuODY5NTQ5MjQzNywxODYxNjc1LjM5Mjc3Mzk4NzMsMTUzNTg2Ny4xMDYwNDUxMzMsMTIxMzgxMy41NTUwMDc1ODIsMTE4NTMyLjI4MzIwNjI3NjcxLDEzMDU3NDEuMzI2NTU3NTk4OCw1NDExNzQuOTIzMjMxMTQ0LDE0NjI3NDMuODM0NjUzMjgwMiwxMjc5MDE2LjUxOTkwNDI2NTksMTYwODAzNC42ODg1NjQwOTMsMjIwNTgwNi42ODA1Njk0NTg4LDY1MjIxNy43NjUxMzQyOTE2LDE4OTQ3ODcuNzM3ODc4NjQzMiwxMTU2NTg2LjE0MDYwNzMyNDIsMTg2ODEzNi43NjkxNTM3NjA3LDIwNzQzMjQuMzEzMjYzMDQzNSwxODM3MDk0LjYzMTA0NjMsNzI4NzY4LjAwNTE4MjkxMTUsNTMyOTUuNjg2MzM3NzY2OTE0LDIyOTUuMTE5MjYyNzc5ODMxNAorMjAsU3VuIDEzIEZlYiAxMSwxMjc3OTUuNzY2Mzc1ODM2NjcsMTMwODEwLjM2MDA0MTk0NzAzLDI4Njc2Ljk3MDI1MTYwNjA0MiwxMjgxNzcuNTY2MTkyODExNTksNTI4NzYuNjM1MDc2MDA1MjUsMjMwMjIxMC43NTUxMTEwMDgsMTk2MjA1Ni42NzkzMTczOTgyLDE2OTQxNzQuMzg3OTk2MDkyLDEzNzI1NTMuNzMzODQyMDU4LDk4NzkwNi4wOTI3NzEwMTQ0LDg5OTAwLjM1NDc4OTkwNTU0LDEwMzUzOTIuNjk1OTc1MzczOCw1MTY1NjIuNzg4MzEwOTIyMiwxNDA5NDAxLjEyNTc0NzE4OTQsMTIyNjA3OS4xNzA1ODIzMjQzLDEzMTQzNDguNTQ4NjA2NzQ0NSwyMTUxODEzLjM1OTM4MjMwMiw2NTIwNDEuMTE1NjExOTIwOCwxODkyMDMyLjc0MDUzMTQ1NjcsMTEwNzg1Mi42NTM2MjU4NTAzLDE4Njc5MTEuNzc0NDA1NzI3MiwyMDczOTE4LjUzMjMyMTQyNCwxODMxMzA2LjcwNDg0MjIyNzUsNTU3MDkwLjU1ODQ5ODk4NTUsNDA1NDMuNTM2NzAxNTMzMDYsMjAyMS43MTg1MjY3NjUyNTEKKzIxLE1vbiAxNCBGZWIgMTEsMTIyMzUzLjI4NDM1MDY2MTM2LDEzMDE5NC44ODI5NzgxMjMyMywyMTk5MC4yOTg5NjE4NDI5MjcsMTE4ODExLjAzMjMzOTkwOTY1LDM5OTk4LjM0NjQ0MzU0MDk4NCwyMTczNTYwLjU2NDg1MTc0NywxNzAzNjQ3LjgwNjgxMjExODMsMTQ5NDM3Mi44MjU3NjY1NjE4LDExODU0MTYuODczOTA2OTY1Niw3ODE0MzIuNDEzODQ0MzY3Nyw2ODE1Ny4zMzA0NTA4NzY3LDc5ODc0MC41NDQ5MTAzMTk2LDQ4MjY0OC41NDA0ODUwNTg3LDEzMzQxNTAuMTc3ODg2NTU0LDExNTUyMzUuODQ5OTg0NjEzNSwxMDQzMzY5LjM4MzYxMjg4NjMsMjA3NzMyNy4zNzE4NjM2OTksNjUxNzc5LjEyOTAxMTAyMTgsMTg4NzcyMi40OTk2Njk4NTE3LDEwNDI5NzQuNDU1NTgxMTMwNiwxODY3NTY5Ljc2ODY0NDk5NzksMjA3MzI3MC4zMDk4MDI2NTY1LDE4MjIxMDEuODgxODQwNTg4Myw0MzAwMDAuMTc5MTg3NjQxNzcsMzEwMjkuNjk0NzQ3MjIyNzMsMTcyOC4wODA2MTM5MTU5MTkyCisyMixUdWUgMTUgRmViIDExLDExNjE0OS4zOTA1ODY1NzEzOCwxMjkyOTcuMTM4NjAzNTEzMDEsMTY1MDIuMjgzMjk5OTExNjQsMTA4MTIwLjIzNDYxMDU4OTQsMjk3OTYuNDI1Mzk0OTcxNjYyLDIwMDU0NDEuMzYzMzM1ODAwNCwxNDI1NzU2Ljc4NDExMjc2NjQsMTI3MTgzOC43MTE1NjY0NzQ4LDk4NjI3Ny4xMTE2NzkyOTA5LDYwNDYzMy4yMzMzODUwODk3LDUyMjIwLjIxNjg4NTU5NzcyLDYwNTE3Ny45MTU4NjY0MjEsNDM4NDc1LjczMjg0NjA1NDI1LDEyMzMwOTQuODM0NzgxNTA1NCwxMDY0MjQ5LjA5NDMwMDU0MTMsODA5NjE5LjM0MzQ3NTUzNTQsMTk3NzM5OC42MDU3NDk3OTk5LDY1MTM5My43NjM3NDUwMDk0LDE4ODEwNTkuMDkyMTkyMzg3LDk2MDA5Ni40MTA2MjU0MDc5LDE4NjcwNTMuMTk5MDAyMjU1LDIwNzIyNDAuOTQxODI1OTg3MywxODA3NzExLjE2NDQzNDQ1NDYsMzM4MTI0Ljk1MzY1MzA0MzMsMjQxMjQuMzU2MTk5MDI0MzQzLDE0MzAuMTkyMDg5MDM0NDQ2MworMjMsV2VkIDE2IEZlYiAxMSwxMDkyODEuNjgwOTEwMjI2MjUsMTI4MDE3LjU1NTY5MzEzNjQ4LDEyMjc5LjU1NDQ0OTc5OCw5NjQ3OS4yOTE0NzkxNTYwOSwyMjE2My41NzkxMTU1MjE0NjUsMTc5ODI0NS4zMDQ2NzY5Mjg2LDExNTAwMzguMzYwNDQ5MzEwMiwxMDQyNzM3LjIyNzM3ODYzMzEsNzkwOTc1LjMyMDQ3NDUzNDUsNDYxODY3LjE2MTY3NjYwMjQ0LDQwODEwLjM1MTI0NTIxMjYzLDQ1NTY4Ni4xNDMzMDY1NzU4MywzODQ4OTYuOTAyNDIxOTY2MywxMTA1NzUzLjA2NzM1MTI3NzcsOTUzNDQ3LjEzNTMyODcwODQsNjE5ODQyLjY5MjI1OTg2ODcsMTg0ODIwOC4zMjA2OTYyNDk2LDY1MDgzMy4xMjQ1MTAzMzIsMTg3MDkzMy45MTUyNjY2MjU4LDg1OTY5MC43NzU0ODM3NTIxLDE4NjYyODAuMDQ4MTU0MDIzNywyMDcwNjIyLjk5MDE2MDg2MDQsMTc4NTc0OS4xMjA0NDYyNTk5LDI3MjY2MC4zMDIyMDgzOTYsMTkxOTcuMDgyNTkzOTgwNTYsMTE0Ny4wMzA0NzY0NjQzMDc5CisyNCxUaHUgMTcgRmViIDExLDEwMTg3My44MjkyNjI3NTg3NSwxMjYyMzMuODM5ODUwODg1MzMsOTE4NC4xMDkyMDU3MDU5OTgsODQzNjcuMDQyOTkxNTQzNTcsMTY2NzkuODI4NDg1Nzc2NjY3LDE1NTkwOTYuMzI2NDAzMzI4LDg5NzQ0Mi4xMjY1NDYxMjUyLDgyNTA1MC4xNDUyMjgzNDU4LDYxNDE4My44ODM0NjU3NTI3LDM1MTkzMy40NDQzODk1Mzk1NCwzMjc2MS4wMDI4NjM2NTkyNSwzNDUxMTkuMzE5MzczOTMzOSwzMjQ4MzkuMTgwMzU2MjY5Niw5NTYzNTQuNjEwMTUyNTgzOSw4MjYzOTYuOTIyNjA1NDQyMyw0NzMxMTMuNjYxNzcyNTk1MjUsMTY4Nzk3My4xODQ4NTE3ODY4LDY1MDAyMi44ODMzNjYwMTUzLDE4NTU3NzQuNjI1NDY3ODA1LDc0NTA4OC4zMzk1ODEwMTkyLDE4NjUxMjcuOTE3NTU2NDk2NiwyMDY4MDk1Ljg0NjMwMDMzMDIsMTc1MzAwNS4wMTE5MTAwNzc5LDIyNjQ1Ni44ODQyMzY3NjUzNiwxNTcxOC4zMDc5MTQyMDI2OTMsODk1LjEyMDk5MzA2MzQxMjQKKzI1LEZyaSAxOCBGZWIgMTEsOTQwODAuNjIxNjkzMjc5NTQsMTIzODExLjA0ODU0ODc4NTk2LDY5ODguOTE2NTYwOTM4Njg1LDcyMzI2LjA4Mzk0NDkxMDg1LDEyODQwLjY2ODc5NTAyNzA2NCwxMzAyOTk1LjUzNTcwNDM5Nyw2ODI5NzguMzg0NjQ1MDM0Niw2MzM5NTcuOTAyMjM5ODc1Niw0NjU3ODIuMjM2MzE4NDg5NCwyNzAyOTguOTAxNjgxMjE2NCwyNzEzMi4yOTg0MjgxMDgzMjYsMjY1NzU4Ljc0MDI3ODEzNTksMjYzMTU0LjQ0ODEwNzEyMyw3OTQ4MzIuMjg5MDAzOTk3Nyw2OTA2MDIuMDcyMTU0MDY5OCwzNjM3NjguOTg4NDUyNjAyNiwxNDk5MTA0LjM1OTUxNzcwOTYsNjQ4ODU5LjUxMTA1NDg4NTUsMTgzMzQ3MS4yNDM5ODE0MTEyLDYyMzAyNy4xNTY1NjE4NTU3LDE4NjM0MTguMjk5NjMyNTcwNywyMDY0MTc4LjE2Nzg5NzMzNjksMTcwNTUyOC4wNzA4MDExMDMzLDE5NDA4OS44MDIxOTkxMjE3LDEzMjc5LjMzNjA2NjMxODc5Niw2ODUuMDQ0MzEwNTM1NjMxOQorMjYsU2F0IDE5IEZlYiAxMSw4NjA3OS4yMDUwNTcxNDM0NSwxMjA2MTMuOTE1ODQ1NTA5OTcsNTQ2Mi43NjQ4MzE4MDkwMzgsNjA4NzUuNjU3NjU0MTUxOTI0LDEwMTkxLjI2MjA3NzQ0NDI0MiwxMDQ5ODkzLjAzMjc5ODY4NDIsNTEyNjAzLjMxODY3MzQ1NjU1LDQ3NzgzMy41MjA2MzI2NDc0NCwzNDkwNTEuMzQxNjI5MDIwODcsMjExMTk2LjQ3OTU5MDgwNjE1LDIzMjIzLjc3MjU4MTc4MDU0LDIwOTg0Ny4zODQ5Njk5NTEyNCwyMDUyNDguODYxODE0ODkyMTUsNjM0ODIyLjE5ODEyMDM5MDYsNTU2MjMwLjM4NDA5NjAxNCwyODQzMDIuNzg4NzU3NTQ5MTMsMTI4OTQ0MC4zMzU3NTIyNjAyLDY0NzE5OC4zOTkzNTI3ODI0LDE4MDEyOTEuNTQ5NTIxNDUzLDUwMjQ4OS41NDM1MjQwNDYyNSwxODYwODg5LjgzNDU2ODc1MDMsMjA1ODE1Mi43ODMzMTU4MDksMTYzODg1Ny43OTY4MjE2MTE1LDE3MTYzNi41MzA4MzE0MTYxLDExNTgyLjIyMzQ3MTE1NzcsNTE5LjYyNTc2MjA2ODQ0MDQKKzI3LFN1biAyMCBGZWIgMTEsNzgwNjEuNDgzMTA3OTIwNCwxMTY1MjYuNDcwNzE0NjEzNDgsNDQxMi44ODQ1NzkzNjAwMTIsNTA0MzUuODg0MzAwMzI4Myw4Mzc2LjM3MTA0Nzg1NDIyMyw4MTkxNjQuMDgyOTY2ODUsMzg0MjcyLjUwNTQ1MjEzMzM3LDM1NzY4Mi41ODA1ODQxNTQ2NCwyNjE4MTIuODM0Mzk1OTQwNDQsMTY5MTAxLjM2NjAzOTQ5NzQ2LDIwNTM1LjkxMTI1NTYxODAyLDE3MDg3My4zMjE1NDUxODE1LDE1NTM3MS4yODIwMzg3NDE5Miw0ODk2MTguMTI4MjQ4MTM2NSw0MzM0MjYuMTQxNDU5OTI1NCwyMjc0MzguMTU5Mjg3OTExMTQsMTA3MTk3MC42NTMyMTE1NDMsNjQ0ODM4LjQwMTUyNzMzNTgsMTc1NTg4My44NDM0NTEyNjksMzkyMzY0LjA5NzU3Njc0MzA1LDE4NTcxNjAuNzEwODA5MTI1MywyMDQ4OTY2LjkzMDc2OTAyODQsMTU0ODY0OS40NDQ4MzE1NTI0LDE1NjMyOS4zNDEwNDUyNzI2LDEwNDE2LjI3MDAxODY0MDYwMiwzOTUuMjc4NDI0MjMzMDM4NTUKKzI4LE1vbiAyMSBGZWIgMTEsNzAyMTkuODM0NDc4OTMwMjUsMTExNDczLjgxOTU1NTI5MDI2LDM2OTQuOTU0MjM3ODgzNTczLDQxMjc2LjM1NDUxNzgyMzI0NSw3MTM5LjgxNTE4MzI5NjA1LDYyNDE0MS40NzM0MTA3OTg3LDI5MTI4MC45ODM4NTE1ODMsMjY5MzE2Ljg0MDAwMjEzOTg2LDE5ODk0OS43NTU3MDMwNjE3LDEzOTQyNS43Mzc0MDA4MzY0NiwxODcyMC42MzAyNDgyMjcyNywxNDM4ODguODg5NzAwMjkyMSwxMTU1MzkuNTE5NDQzODI3MDYsMzY4MTY0LjIyNjYxMTg4Mzg1LDMyOTQxMS42ODEyNjk2Nzg1LDE4NzEwOS44NzEyODkwMzU0OCw4NjIyNTYuNTE2MzYwMzk4Myw2NDE1MDEuNDA3OTA4NzM0MiwxNjkzNDM3LjM1NzkwNTEzNzYsMjk4OTY1LjUyMTUxMDUxNCwxODUxNjc1LjMyNjE2NTg2MTcsMjAzNTEwNC4yNTQ0MDkzNTE0LDE0MzE4MDEuNTYyNjg5MzcwNSwxNDYyMzQuODUyMzIxMDkyNTYsOTYzNC41NjAzODAwNjc0MDMsMzA0LjkyNjYxMTY2MjkxOTYKKzI5LFR1ZSAyMiBGZWIgMTEsNjI3MjYuMzgzMzYxMDE5OTIsMTA1NDM5LjM0MDA0OTc4NTg0LDMyMDcuMjI1OTc3MjQ1OTQ1NiwzMzUwMy4yNzY4NjYzOTY3OCw2MzA0LjY3MTk1MzUyMjYzOSw0Njk2OTUuNzY4NDM0NDYyOSwyMjU1NzcuNTQyNjcyNjA2ODMsMjA2MzExLjk4OTEzNTU3OTM4LDE1NDY5MS42NjU0MDY1NzA5NCwxMTg2NjUuOTQ3NjQzOTA3ODEsMTc1MzcuNDI2NzAzMTk3NTQ3LDEyNTM0NC4yNzcwMTU5OTQ4Niw4NTYwMS43MzY1Nzk1NjM1OSwyNzMzOTcuOTkyNTgyMzU2OSwyNDcwMDkuNzEyNTE5MDA2MjIsMTU4NjgwLjI1NTYwNTA4NzIsNjc0Mjk5LjUxOTEwMjY3MTYsNjM2ODA2LjMwMjkwMzYzMjMsMTYxMDEwNy42MTI5MjY0NjksMjI0Nzc4Ljk0OTU3NDkyNzc3LDE4NDM2MzAuMzMyMzUxNzg5MywyMDE0NDM0LjI4NTYwMzExMDIsMTI4ODA1MS4yNTgyNjMxOTk2LDE0MDAwMi4yNDE5NDgxNDQ4LDkxMzQuOTI4NDA0NjI3NTk3LDI0MC43MzQzODU5NjU5MjM1CiszMCxXZWQgMjMgRmViIDExLDU1NzEyLjIyMzg4MjY2NjY2NSw5ODQ3MS44NjMxMTk2NzE0MywyODgwLjE1ODU2ODMwNzAyMiwyNzA4NC40NzY2OTA4MjY2OCw1NzUxLjE3Nzg5OTc0NTEzMSwzNTM0OTcuODk2MzQ1MDExMSwxNzk4MzIuMzA3NDIwNDQ5NjUsMTYyMjMwLjQ3NTUzODMyMDcsMTIzOTQxLjEzMDcwNDkyODMyLDEwNDI3Ni44MzgwODUyNjY1MywxNjgxOS44MjU5NDQxMTI0NTcsMTEyNzY5LjkzMzQ2OTA5NDk2LDY0MDY0LjIxODU5OTAxNzYzLDIwMzMzMi43OTQxMTU4MzU2NiwxODUxMzQuMTA5Njg3MzkzMywxMzg3NzYuNTIxMDE4NTQxNjIsNTE2OTU0Ljg1MDQyNDk2MTcsNjMwMjM3LjY0Mjg5NjY2NDgsMTUwMjgxNy4xNjYzNzc2NzUzLDE2ODg4MC4xNjk4MTQ4NTI4NSwxODMxODc1LjY4NTYyNjQ5NjgsMTk4NDA2Mi41MzEyMTQ0NTE3LDExMjE2MDQuMzUwMTc2MTM0MSwxMzY2ODAuNDcxODE3NDg0Niw4ODQ1LjkzMjAyODI4NDA2NywxOTUuNzQ5NTk1NDY1NDQ5OTEKKzMxLFRodSAyNCBGZWIgMTEsNDkyNTUuMDQ1OTk1NzU3NDY0LDkwNjgyLjk1ODI0NjgwNTM4LDI2NjYuNzg5MzU0MTQ5OTEyNSwyMTg5Ni40MjcyNDY4MTkxMDUsNTM5OC42Mjk3MTkzNzE5ODYsMjY5MjA2LjUxODAzOTQ1MTU2LDE0ODI0MS42MzM1MzU3OTcxOCwxMzE3MDkuMTkzMjQxNDg3MDIsMTAyNzMyLjIwODk5ODAxOTU2LDk0NDYwLjUwMDkzNjY1NTIsMTY0NTEuNTIyNTgyNjYwOTg2LDEwNDQ3MC4zMDc0NzA4ODM3MSw0ODk5OC4yOTYwOTE3MzM2NiwxNTM0MzQuOTA3NDI4NzU3NCwxNDA0MzcuMzAwODI3MDE1NTQsMTI1MDExLjQ5NDM3Nzk3MTY3LDM5MjcyNi4zODgyNDg5ODMsNjIxMTExLjgyMDQ4ODk5MTgsMTM3MDQ1OS41MzY2NDM4OTEsMTI4MzQ4Ljk4MTkxMTMyOTY0LDE4MTQ3ODkuODA1NDQ0NDMwNiwxOTQwMjM2LjcxMDIwOTI5ODIsOTQxODQyLjQ2NDE3NDUwMywxMzU1OTEuMTczNjYyOTM2LDg3MTcuMDM1MzgzMDUzMzU5LDE2NC41MDQ0NTgwODQzNDQ1OAorMzIsRnJpIDI1IEZlYiAxMSw0MzM3OS44NzA5OTcyNzY0MjYsODIyMzkuNzEwMjY1NDU5NCwyNTM1LjM3NTk3OTIxMjk1MiwxNzc3Mi42NTg5MjIyNDMxNSw1MTkyLjMxODU0ODUyODA0OCwyMDk0NTYuODc3MzEzODE2NDgsMTI2NTYwLjE3MDQ1NTk4MDY3LDExMDcxMS4yNzgyOTE5NjE5Miw4ODE5My45Mjk4NDA0NzI3Miw4Nzk2Mi43OTEzOTM5NTE5OCwxNjM1MC4wNjc3MjU2NjAxNDMsOTkyODIuMzg5MTY4Mzg2NDUsMzg2MjIuNjk2ODQxNDE5MzgsMTE4NzA3LjA0MTI5NDE3Njk2LDEwODk0Ny42Mjc2MjQ3OTQyNCwxMTU3MTUuMjk3NTMzODQ1MjgsMjk5MDQxLjk2MjM0NTIwMDEsNjA4NTQ4LjQyMDUzNjA3NjksMTIxNTI4Ny42NTU1NzI3OTIsOTk2ODguODMzNjEwMTI1MzgsMTc5MDEzNy44MTQ5NDgyMzY2LDE4Nzg0MTQuNzg3MzY0NzE2Niw3NjIwNDEuMDc4MjA0NjI4NywxMzYyNDIuMjU1MTA0MDY5ODMsODcxMS45MjI4NzMxMjgzOTMsMTQyLjk4OTc2ODM1MTY1NDczCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0lub2N1bGF0aW9uVGVzdF9GRF9SZWZlcmVuY2UvSHVtYW5Qb3B1bGF0aW9uTW9kZWwvaHVtYW4vQmlydGhzXzAuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Jbm9jdWxhdGlvblRlc3RfRkRfUmVmZXJlbmNlL0h1bWFuUG9wdWxhdGlvbk1vZGVsL2h1bWFuL0JpcnRoc18wLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYzI0NDAxCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Jbm9jdWxhdGlvblRlc3RfRkRfUmVmZXJlbmNlL0h1bWFuUG9wdWxhdGlvbk1vZGVsL2h1bWFuL0JpcnRoc18wLmNzdgpAQCAtMCwwICsxIEBACitpdGVyYXRpb24sdGltZSwKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvSW5vY3VsYXRpb25UZXN0X0ZEX1JlZmVyZW5jZS9IdW1hblBvcHVsYXRpb25Nb2RlbC9odW1hbi9CaXJ0aHNfMS5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0lub2N1bGF0aW9uVGVzdF9GRF9SZWZlcmVuY2UvSHVtYW5Qb3B1bGF0aW9uTW9kZWwvaHVtYW4vQmlydGhzXzEuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJjMjQ0MDEKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0lub2N1bGF0aW9uVGVzdF9GRF9SZWZlcmVuY2UvSHVtYW5Qb3B1bGF0aW9uTW9kZWwvaHVtYW4vQmlydGhzXzEuY3N2CkBAIC0wLDAgKzEgQEAKK2l0ZXJhdGlvbix0aW1lLApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Jbm9jdWxhdGlvblRlc3RfRkRfUmVmZXJlbmNlL0h1bWFuUG9wdWxhdGlvbk1vZGVsL2h1bWFuL0JpcnRoc18yLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvSW5vY3VsYXRpb25UZXN0X0ZEX1JlZmVyZW5jZS9IdW1hblBvcHVsYXRpb25Nb2RlbC9odW1hbi9CaXJ0aHNfMi5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2ZiNTQwMAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvSW5vY3VsYXRpb25UZXN0X0ZEX1JlZmVyZW5jZS9IdW1hblBvcHVsYXRpb25Nb2RlbC9odW1hbi9CaXJ0aHNfMi5jc3YKQEAgLTAsMCArMSwzMyBAQAoraXRlcmF0aW9uLHRpbWUsRUctRlJHLUcyMTAwMDEsRUctRlJHLUcyMTAwMDIsRUctRlJHLUcyMTAwMDMsRUctRlJHLUcyMTAwMDQsRUctRlJHLUcyMTAwMDUsRUctTE9FLUcyNDAwMDEsRUctTE9FLUcyNDAwMDIsRUctTE9FLUcyNDAwMDMsRUctTE9FLUcyNDAwMDQsRUctTE9FLUcyNDAwMDUsRUctTE9FLUcyNDAwMDYsRUctTE9FLUcyNDAwMDcsRUctTE9FLUcyNDAwMDgsRUctTE9FLUcyNDAwMDksRUctVVBFLUcyOTAwMDEsRUctVVBFLUcyOTAwMDIsRUctVVBFLUcyOTAwMDMsRUctVVBFLUcyOTAwMDQsRUctVVBFLUcyOTAwMDUsRUctVVBFLUcyOTAwMDYsRUctVVBFLUcyOTAwMDcsRUctVVBFLUcyOTAwMDgsRUctVVJHLUczMDAwMDEsRUctVVJHLUczMDAwMDIsRUctVVJHLUczMDAwMDMsRUctVVJHLUczMDAwMDQKKzEsVHVlIDI1IEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyLFdlZCAyNiBKYW4gMTEsMTEuNTkyMjU4NzM0Njk4MjU5LDEwLjM1MDE5NDUzMzMyNDI5OSw2LjAyNDY1NTY2NjAzOTQyMywxMi40NTQ1NDU3Nzc4Mzk2MTMsMTIuNTU0MDU3MDU3NjM3MTkzLDIwMi45NDEyNTMyOTMyNDE4OSwyMjAuNTM2MDQ5NzExMTQyNiwxODAuNzUwMzU1NzU2MTk0NTIsMTU2Ljk5OTkyNDM1NjQ4NDQ4LDE5Ni4yODk0MzY5MjAyNTg3LDM5Ljg2MDYxMjIzNzg0MzQ3NiwyMzMuMDE3NzgxMzU3NzYyMzIsNDYuMTE1NTYyMDY5NzYyNjQ2LDEyMi40MTkwNjcxMjI5MTg5MywxMDkuNDIwMzMyNTM4MjI3MzQsMjUxLjE4Mzk1MjQ1MTI5NTA2LDE4MS45NzI4NTU1NjA2NzE4Myw1MS4xNzc1MTU4MzYyOTk2MzQsMTQ4Ljk0OTgwMzYwODUxNzAyLDk5LjE5NjQwMzAwODE2Nzc0LDE0Ni41NDQyMDc3OTQ5MTg0NiwxNjIuNzMzNjI4MzY5MDc3MDUsMTQ0Ljc2NjMyMjY5MTM4OTI2LDMyOS45OTE3MDAzMDcyMjE1NSwyMS4wNDQxNDEwMjAxNTM4NSwwLjI2MzQ5MDc4MzEwMzk3MTMKKzMsVGh1IDI3IEphbiAxMSwyMy4xODQ1NjM4Mzg0MzE0NiwyMC43MDA0MzA0Njc0MjY3MjcsMTIuMDQ5MzM1NDMwNzAxNTExLDI0LjkwOTE0MTM3Mzg2MjMzNywyNS4xMDgxNjQzMzE1MDI2MTQsNDA1Ljg4MzMxODM1MTQ5Njk0LDQ0MS4wNzI5ODE1NjY0ODQwMywzNjEuNTAxNDM0NTEzODEyMDYsMzE0LjAwMDQ3NjcxMjY2NjQsMzkyLjU3OTY1ODk5ODI2NTEzLDc5LjcyMTM4MzkxODEzNTksNDY2LjAzNjQ5NDc4NjY1MDEsOTIuMjMxMzA4NjAxNzczNTYsMjQ0LjgzODYyMzkyMjEwNjM2LDIxOC44NDExMDI3NTc3ODQ4Miw1MDIuMzY4OTA5NjM4Mzk5OTQsMzYzLjk0NjQzOTAxMjc2NTksMTAyLjM1NTIzNjM4MjY2MjYxLDI5Ny45MDAyMDMwMTYyNDg1LDE5OC4zOTMyMDI4MDE5NDc1LDI5My4wODkwMDE3NjY2NjgxLDMyNS40Njc5MDc2NzI2Njc2LDI4OS41MzMyMjQ0NDgwNjkzLDY1OS45ODQ3MjA1ODEyNDQzLDQyLjA4ODM2NjIxNjg3MTc4LDAuNTI2OTgyNjIwMTcxMDc1Cis0LEZyaSAyOCBKYW4gMTEsMzQuNzc2OTE1MzExMzg1MDc1LDMxLjA1MDcwNzgwMjQ3Mjg5NiwxOC4wNzQwMzkyOTQwODI2NTYsMzcuMzYzNzg2Nzg4MjY3NDUsMzcuNjYyMzIxODIxNzk3MTM2LDYwOC44MjYxOTUxNzgwMTIyLDY2MS42MTA3OTU1Njk1NTI5LDU0Mi4yNTMyMzYyNzU3NDQ2LDQ3MS4wMDE2NTcwNzEwNTc3LDU4OC44NzA2NjYyMzcxNTk5LDExOS41ODIzMTUwNDE1MTUwNSw2OTkuMDU2MTQwMjkwMzkxNiwxMzguMzQ3MjM5NTk2NzcwNiwzNjcuMjU4NjcwMzk5NTIwOTUsMzI4LjI2MjMxMDY2MDQyMzE3LDc1My41NTQ4NzE1NjUzMzM1LDU0NS45MjA3NTAzNTkxOTM4LDE1My41MzMxNjE2Mzk5MDc3Nyw0NDYuODUxMTk4MjI1NTc3NiwyOTcuNTkwMzk5MzgyOTI2NCw0MzkuNjM0MzgxOTE3NTkzNiw0ODguMjAyODM3OTEzMzc1MzMsNDM0LjMwMDcwNTI3MjM1NjM3LDk4OS45NzkwNjA4MjczNDgxLDYzLjEzMjY3NTU5MDQ5MDUsMC43OTA0NzU1MTEyMDU1MjcKKzUsU2F0IDI5IEphbiAxMSw0Ni4zNjkzMTMxNTM3NDQ1ODUsNDEuNDAxMDI2NTM4NjI4NDEsMjQuMDk4NzY3MjU2Mjc5MjU2LDQ5LjgxODQ4MjAyMTI1NDIxLDUwLjIxNjUyOTUyODcyMTYxNSw4MTEuNzY5ODgzNzc2MDM0OCw4ODIuMTQ5NDkxNzIzODc3OCw3MjMuMDA1NzYxMDQ0ODg0Myw2MjguMDAzNDY1NDM0MTcwNSw3ODUuMTYyNDU4NjQwMDgzNSwxNTkuNDQzNDA1NjA4NjE4Nyw5MzIuMDc2NzE3ODcyNzE1MSwxODQuNDYzMzU1MDU1NDkxNjMsNDg5LjY3OTIwNjU1NzEyMTQ2LDQzNy42ODM5NTYyNDc4OTMxNSwxMDA0Ljc0MTgzODIzNjExNDksNzI3Ljg5NTc4OTYwMjg2NzEsMjA0LjcxMTI5MTYwODg1Mzk3LDU5NS44MDI3ODkyMzg4ODc1LDM5Ni43ODc5OTI3NTI2OTE3LDU4Ni4xODAzNDgyNTAwMzk3LDY1MC45Mzg0MTkwOTM4MDQsNTc5LjA2ODc2NTE2NjU2NjcsMTMxOS45NzQ3MjEwNTA4MTMsODQuMTc3MDY5MTQxMzQ2NywxLjA1Mzk2OTQ1NjIxMTU0MzEKKzYsU3VuIDMwIEphbiAxMSw1Ny45NjE3NTczNjU2OTU0Niw1MS43NTEzODY2NzYwNTg4NiwzMC4xMjM1MTkzMTczODc3MDQsNjIuMjczMjI3MDczMDIxOTE0LDYyLjc3MDc4NzQ1MjQ3NjkyNCwxMDE0LjcxNDM4NDE0ODgxMTksMTEwMi42ODkwNzAwMzI5ODczLDkwMy43NTkwMDg4MjQxMjI5LDc4NS4wMDU5MDE4MDQ1MTY3LDk4MS40NTUwMzYyMTAxNzY4LDE5OS4zMDQ2NTU2MjAwODQ2LDExNjUuMDk4MjI3NTM3MzQ5LDIzMC41Nzk2NTQ5Nzg2NzQ1LDYxMi4xMDAyMzIzOTY4NjY3LDU0Ny4xMDYwMzk1MjE5NDU1LDEyNTUuOTI5ODA5NjU0NzYzLDkwOS44NzE1NTY3NDY2OTc0LDI1NS44ODk2MjYyOTAzMjAwNSw3NDQuNzU0OTc2MDU4NTYxNSw0OTUuOTg1OTgyOTEyODMwNSw3MzIuNzI2OTAwNzY2MzUxMyw4MTMuNjc0NjUxMjE2NTU3NCw3MjMuODM3NDA0MTMzMDE2NywxNjQ5Ljk3MTcwMTI1NjkxODgsMTA1LjIyMTU0Njg2OTc3NzExLDEuMzE3NDY0NDU1MTkzMzM5MgorNyxNb24gMzEgSmFuIDExLDY5LjU1NDI0Nzk0NzQyMzE5LDYyLjEwMTc4ODIxNDkyOTg2LDM2LjE0ODI5NTQ3NzUwNDQsNzQuNzI4MDIxOTQzNzY5ODIsNzUuMzI1MDk1NTkzMjYzOTIsMTIxNy42NTk2OTYyOTk1OTA1LDEzMjMuMjI5NTMwNTAwNDEsMTA4NC41MTI5Nzk2MTYzNTI4LDk0Mi4wMDg5NjYxODQ2MDg0LDExNzcuNzQ4Mzk4OTUwNTgwNCwyMzkuMTY2MDY1MDc2NTUwNTUsMTM5OC4xMjA2NjkyODgwMjE0LDI3Ni42OTYxMzkzNjcwNTcwNyw3MzQuNTIxNzQ3OTIwNzE1MSw2NTYuNTI4NTYwNDg0MzMwOSwxNTA3LjExODc4NTgyNTI5NjgsMTA5MS44NDgwNTE3OTM1OTYxLDMwNy4wNjgxNjU2ODUxMjQ4LDg5My43MDc3NTg2ODY5ODI3LDU5NS4xODQzNjk4NjQ5Mjk5LDg3OS4yNzQwMzk0Njg4NzI4LDk3Ni40MTE1MzQyODQyMzkzLDg2OC42MDY2MjIxNzQwMjI1LDE5NzkuOTcwMDAxNDUwOTQ1MywxMjYuMjY2MTA4Nzc2MTE4NDQsMS41ODA5NjA1MDgxNTUxMzEyCis4LFR1ZSAxIEZlYiAxMSw4MS4xNDY3ODQ4OTkxMTMyNCw3Mi40NTIyMzExNTU0MDcwMiw0Mi4xNzMwOTU3MzY3MjU3MzUsODcuMTgyODY2NjMzNjk3Miw4Ny44Nzk0NTM5NTEyODM1LDE0MjAuNjA1ODIwMjMxNjE3NiwxNTQzLjc3MDg3MzEyOTY3NDYsMTI2NS4yNjc2NzM0MjQ0NjU4LDEwOTkuMDEyNjU4NTc2OTU3NiwxMzc0LjA0MjU0Njg2NDQzNDgsMjc5LjAyNzYzMzk3ODY1NDMsMTYzMS4xNDQwNDMxMjg0NjEsMzIyLjgxMjgwODIyMTM3NzE3LDg1Ni45NDM3NTMxMzA2MjU3LDc2NS45NTE1MTkxMzY4MDAyLDE3NTguMzA4NzY2NzUxNzM1MiwxMjczLjgyNTI3NDc0NjQ3NSwzNTguMjQ2OTA5Nzk0MDg3MiwxMDQyLjY2MTEzNzEyNjUzNDQsNjk0LjM4MzE1MzYxMDU3NzEsMTAyNS44MjE3NjQzNTk5NDkyLDExMzkuMTQ5MDY4Mjk5NDUzNiwxMDEzLjM3NjQxOTI5MTkwMDQsMjMwOS45Njk2MjE2MzgxNzI2LDE0Ny4zMTA3NTQ4NjA3MDc0LDEuODQ0NDU3NjE1MTAxMTM1MgorOSxXZWQgMiBGZWIgMTEsOTIuNzM5MzY4MjIwOTUxMSw4Mi44MDI3MTU0OTc2NTU5NCw0OC4xOTc5MjAwOTUxNDgxMDYsOTkuNjM3NzYxMTQzMDAzMzUsMTAwLjQzMzg2MjUyNjczNjQ5LDE2MjMuNTUyNzU1OTQ4MTQwNCwxNzY0LjMxMzA5NzkyNDMwOTcsMTQ0Ni4wMjMwOTAyNTEzNTQsMTI1Ni4wMTY5Nzg5ODQwNzYzLDE1NzAuMzM3NDc5OTU0ODgxLDMxOC44ODkzNjIzMjcwMzM3LDE4NjQuMTY4MzQ5MDYyMzk1NywzNjguOTI5NjYxNTQyMzcyNzQsOTc5LjM2NjI0ODAyODU1NzIsODc1LjM3NDkxNTQ4MTEwNDIsMjAwOS40OTk3NTI0MzgwOTc0LDE0NTUuODAzMjI1NjA4MjQ1OCw0MDkuNDI1ODU4NjE4MDI2LDExOTEuNjE1MTExMzc5Niw3OTMuNTgyMzM0MTUxMzU5MywxMTcyLjM3MDA3NTQ0MTkyNSwxMzAxLjg4NzI1MzI2NDgwMzgsMTE1OC4xNDY3OTU0ODg5NjcsMjYzOS45NzA1NjE4MjM4ODA0LDE2OC4zNTU0ODUxMjM4ODA3LDIuMTA3OTU1Nzc2MDM1NTY3CisxMCxUaHUgMyBGZWIgMTEsMTA0LjMzMTk5NzkxMzEyMjI1LDkzLjE1MzI0MTI0MTg0MjIyLDU0LjIyMjc2ODU1Mjg2NzkxLDExMi4wOTI3MDU0NzE4ODc1MywxMTIuOTg4MzIxMzE5ODIzNzgsMTgyNi41MDA1MDM0NTI0MDYsMTk4NC44NTYyMDQ4ODc4NDQsMTYyNi43NzkyMzAwOTk5MDk1LDE0MTMuMDIxOTI3NDA4NDc2OCwxNzY2LjYzMzE5ODIyNTA1OTUsMzU4Ljc1MTI1MDEyMjMyNjUsMjA5Ny4xOTM1ODcwOTM1NTQsNDE1LjA0NjY5OTMzMDc4MTU2LDExMDEuNzg5MjMyNjE2NDY4Myw5ODQuNzk4NzQ5NTE4OTkzNCwyMjYwLjY5MTc0Mjg4ODQwMiwxNjM3Ljc4MTkwNDM4MTgyMDEsNDYwLjYwNTAxMjE1Nzc2MDEsMTM0MC41Njk2ODE0NDg1NjI1LDg5Mi43ODE5MTE0ODg4NjM3LDEzMTguOTE4OTcyNzE3MTQ1NCwxNDY0LjYyNjA4OTE4Mjg5MzgsMTMwMi45MTc3NTA3Njc1MzgsMjk2OS45NzI4MjIwMTMzNDkzLDE4OS40MDAyOTk1NjU5NzUwNSwyLjM3MTQ1NDk5MDk2MjY0MjYKKzExLEZyaSA0IEZlYiAxMSwxMTUuOTI0NjczOTc1ODEyMTcsMTAzLjUwMzgwODM4ODEzMTQ5LDYwLjI0NzY0MTEwOTk4MTU0NCwxMjQuNTQ3Njk5NjIwNTQ5MDMsMTI1LjU0MjgzMDMzMDc0NjI2LDIwMjkuNDQ5MDYyNzQ3NjYxOSwyMjA1LjQwMDE5NDAyMzgwNiwxODA3LjUzNjA5Mjk3MzAyNDMsMTU3MC4wMjc1MDM4NTI2NzA5LDE5NjIuOTI5NzAxNjc4MTExLDM5OC42MTMyOTczNjUxNzA0NywyMzMwLjIxOTc1NzIyNTY2NDYsNDYxLjE2MzkyMTU4NzM0MTUsMTIyNC4yMTI3MDY4OTYzMTc3LDEwOTQuMjIzMDIxMjUyMjE4OCwyNTExLjg4NDczODEwNjY2OSwxODE5Ljc2MTMxMTA3MDEwOTUsNTExLjc4NDM3MDQxNDEwODM3LDE0ODkuNTI0ODQ3MzM1ODA1NCw5OTEuOTgxODg1NjI0Njc3NCwxNDY1LjQ2ODQ1NjE4Nzk1NDYsMTYyNy4zNjU1NzYwNTYzMjc3LDE0NDcuNjg5Mjg1MTI5OTMwMywzMjk5Ljk3NjQwMjIxMTg1OSwyMTAuNDQ1MTk4MTg3MzI3MTUsMi42MzQ5NTUyNTk4ODY1Nzc3CisxMixTYXQgNSBGZWIgMTEsMTI3LjUxNzM5NjQwOTIwNjM0LDExMy44NTQ0MTY5MzY2ODkzNSw2Ni4yNzI1Mzc3NjY1ODU0LDEzNy4wMDI3NDM1ODkxODcxLDEzOC4wOTczODk1NTk3MDQ3NywyMjMyLjM5ODQzMzgzNzE1NDcsMjQyNS45NDUwNjUzMzU3MjQ0LDE5ODguMjkzNjc4ODczNTkwOCwxNzI3LjAzMzcwODMxOTE3MDcsMjE1OS4yMjY5OTAzMTcxNzY0LDQzOC40NzU1MDQwNTYyMDM0LDI1NjMuMjQ2ODU5NDYyNDU1Niw1MDcuMjgxMzI4MzEyNzkwNSwxMzQ2LjYzNjY3MDg3MDA2NDMsMTIwMy42NDc3MzA2ODI1MzExLDI3NjMuMDc4NzM4MDk2OTE2NCwyMDAxLjc0MTQ0NTY3NjAyNTUsNTYyLjk2MzkzMzM4Nzg4OTcsMTYzOC40ODA2MDkwNDM3MTE5LDEwOTEuMTgyMjU2NTYwMzg3NywxNjEyLjAxODUyNTg1NjY5NzgsMTc5MC4xMDU3MTM4ODc3MDksMTU5Mi40NjEzOTg1Nzg0NjAxLDM2MjkuOTgxMzAyNDI0Njg5LDIzMS40OTAxODA5ODgyNzM3NSwyLjg5ODQ1NjU4MjgxMTU4ODcKKzEzLFN1biA2IEZlYiAxMSwxMzkuMTEwMTY1MjEzNDkwMjMsMTI0LjIwNTA2Njg4NzY4MTQsNzIuMjk3NDU4NTIyNzc1OSwxNDkuNDU3ODM3Mzc4MDAxMDcsMTUwLjY1MTk5OTAwNjkwMDE4LDI0MzUuMzQ4NjE2NzI0MTMxNywyNjQ2LjQ5MDgxODgyNzEyODQsMjE2OS4wNTE5ODc4MDQ1MDA2LDE4ODQuMDQwNTQwODEwNDg4NCwyMzU1LjUyNTA2NDE0NTM5NjMsNDc4LjMzNzg3MDE5NjA2MzE0LDI3OTYuMjc0ODkzODA3NjU1Niw1NTMuMzk4OTE5NTA3ODY2NCwxNDY5LjA2MTEyNDUzOTY2NjcsMTMxMy4wNzI4Nzc4MTE2ODEsMzAxNC4yNzM3NDI4NjMxNjQsMjE4My43MjIzMDgyMDI0OCw2MTQuMTQzNzAxMDc5OTIzLDE3ODcuNDM2OTY2NTc0NjY1MSwxMTkwLjM4MzAyNDI5NzU4MTYsMTc1OC41NjkxODE3MjU3MTk4LDE5NTIuODQ2NTAyNjc5NjQxNiwxNzM3LjIzNDA5MTExNTQ0MzgsMzk1OS45ODc1MjI2NTcxMjAzLDI1Mi41MzUyNDc5NjkxNTE1NiwzLjE2MTk1ODk1OTc0MTg5MQorMTQsTW9uIDcgRmViIDExLDE1MC43MDI5ODAzODg4NDkzNCwxMzQuNTU1NzU4MjQxMjczMjUsNzguMzIyNDAzMzc4NjQ5NDEsMTYxLjkxMjk4MDk4NzE5MDIsMTYzLjIwNjY1ODY3MjUzMzQsMjYzOC4yOTk2MTE0MTE4NDA1LDI4NjcuMDM3NDU0NTAxNTQ2LDIzNDkuODExMDE5NzY4NjQ2NSwyMDQxLjA0ODAwMTMyOTEzNjIsMjU1MS44MjM5MjMxNjU5MTE4LDUxOC4yMDAzOTU3ODUzODc0LDMwMjkuMzAzODYwMjY0OTkzLDU5OS41MTY2OTUxNzMzMDcxLDE1OTEuNDg2MDY3OTA3MDg0LDE0MjIuNDk4NDYyNjQxNDE5OCwzMjY1LjQ2OTc1MjQwOTQzMDQsMjM2NS43MDM4OTg2NTIzODQ0LDY2NS4zMjM2NzM0OTEwMjY5LDE5MzYuMzkzOTE5OTMxMDQ4NSwxMjg5LjU4NDE4ODgzNzg0NjYsMTkwNS4xMjA0MjM3OTczNjUyLDIxMTUuNTg3OTQyNDM0NzI5NSwxODgyLjAwNzM2Mjc0MzE5NzUsNDI4OS45OTUwNjI5MTQ0MzIsMjczLjU4MDM5OTEzMDI5NzMsMy40MjU0NjIzOTA2ODE3MDE3CisxNSxUdWUgOCBGZWIgMTEsMTYyLjI5NTg0MTkzNTQ2OTE2LDE0NC45MDY0OTA5OTc2MzA1Myw4NC4zNDczNzIzMzQzMDIzNSwxNzQuMzY4MTc0NDE2OTUzNzYsMTc1Ljc2MTM2ODU1NjgwNTI4LDI4NDEuMjUxNDE3OTAzNTI4LDMwODcuNTg0OTcyMzYyNTA2NSwyNTMwLjU3MDc3NDc2ODkyMDMsMjE5OC4wNTYwODk4Nzc2MjYsMjc0OC4xMjM1NjczODE4NjMzLDU1OC4wNjMwODA4MjQ4MTQsMzI2Mi4zMzM3NTg4MzgxOTY0LDY0NS42MzQ2NTUzMDk4NTA1LDE3MTMuOTExNTAwOTc0Mjc0NSwxNTMxLjkyNDQ4NTE3MzQ5NzcsMzUxNi42NjY3NjY3Mzk3MzUsMjU0Ny42ODYyMTcwMjg2NTEsNzE2LjUwMzg1MDYyMjAyMDQsMjA4NS4zNTE0NjkxMTUyNDUsMTM4OC43ODU3NTAxODI3Njk4LDIwNTEuNjcyMjUyMDczOTc5LDIyNzguMzMwMDMzMTU1NTc2LDIwMjYuNzgxMjEzNDY0MDM3OCw0NjIwLjAwMzkyMzIwMTkwNSwyOTQuNjI1NjM0NDcyMDQ3NjQsMy42ODg5NjY4NzU2MzUyMzU2CisxNixXZWQgOSBGZWIgMTEsMTczLjg4ODc0OTg1MzUzNTE2LDE1NS4yNTcyNjUxNTY5MTg4LDkwLjM3MjM2NTM4OTgzMTEsMTg2LjgyMzQxNzY2NzQ5MTA0LDE4OC4zMTYxMjg2NTk5MTY3LDMwNDQuMjA0MDM2MjAyNDQxMywzMzA4LjEzMzM3MjQxMzUzODQsMjcxMS4zMzEyNTI4MDgyMTQsMjM1NS4wNjQ4MDY0NTg0NzAyLDI5NDQuNDIzOTk2Nzk2MzkxMyw1OTcuOTI1OTI1MzE0OTgwOSwzNDk1LjM2NDU4OTUzMDk5NCw2OTEuNzUyNzk5OTE4MjM0NCwxODM2LjMzNzQyMzc0MzE5NzQsMTY0MS4zNTA5NDU0MDk2NjU3LDM3NjcuODY0Nzg1ODU4MDk3LDI3MjkuNjY5MjYzMzM0MTkxLDc2Ny42ODQyMzI0NzM3MjI1LDIyMzQuMzA5NjE0MTI5NjM4MiwxNDg3Ljk4NzcwODMzMzkzODQsMjE5OC4yMjQ2NjY1NTc5MDYsMjQ0MS4wNzI3NzQ4NDQ3ODU3LDIxNzEuNTU1NjQzMjgwMjgxLDQ5NTAuMDE0MTAzNTI0ODIsMzE1LjY3MDk1Mzk5NDczOTM2LDMuOTUyNDcyNDE0NjA2NzA5NgorMTcsVGh1IDEwIEZlYiAxMSwxODUuNDgxNzA0MTQzMjMyODMsMTY1LjYwODA4MDcxOTMwMzczLDk2LjM5NzM4MjU0NTMzMjA4LDE5OS4yNzg3MTA3MzkwMDEzMywyMDAuODcwOTM4OTgyMDY4NTQsMzI0Ny4xNTc0NjYzMTE4MjgsMzUyOC42ODI2NTQ2NTgxNzA2LDI4OTIuMDkyNDUzODg5NDE5NiwyNTEyLjA3NDE1MTA3NDE4MDUsMzE0MC43MjUyMTE0MTI2MzcyLDYzNy43ODg5MjkyNTY1MjU2LDM3MjguMzk2MzUyMzQ3MTE0OCw3MzcuODcxMTI4OTk5MTk2NywxOTU4Ljc2MzgzNjIxNTgxMTQsMTc1MC43Nzc4NDMzNTE2NzQ2LDQwMTkuMDYzODA5NzY4NTM1NSwyOTExLjY1MzAzNzU3MTkxNiw4MTguODY0ODE5MDQ2OTUyMSwyMzgzLjI2ODM1NDk3NjYxMTYsMTU4Ny4xOTAwNjMyOTI5Mzk0LDIzNDQuNzc3NjY3MjUxNDkwNiwyNjAzLjgxNjE2NzUwNDk2MjMsMjMxNi4zMzA2NTIxOTQyNDMsNTI4MC4wMjU2MDM4ODg0NTUsMzM2LjcxNjM1NzY5ODcwOTIsNC4yMTU5NzkwMDc2MDAzMzkKKzE4LEZyaSAxMSBGZWIgMTEsMTk3LjA3NDcwNDgwNDc0NzY1LDE3NS45NTg5Mzc2ODQ5NTA5LDEwMi40MjI0MjM4MDA5MDE2OCwyMTEuNzM0MDUzNjMxNjgzOSwyMTMuNDI1Nzk5NTIzNDYxNjUsMzQ1MC4xMTE3MDgyMzQ5MzUsMzc0OS4yMzI4MTkwOTk5MzIsMzA3Mi44NTQzNzgwMTU0Mjk2LDI2NjkuMDg0MTIzNzI3MjY5MywzMzM3LjAyNzIxMTIzMzc0MTYsNjc3LjY1MjA5MjY1MDA4NjIsMzk2MS40MjkwNDcyOTAyODYyLDc4My45ODk2NDI1NTM0NzUzLDIwODEuMTkwNzM4Mzk0MDc1LDE4NjAuMjA1MTc5MDAxMjc1NCw0MjcwLjI2MzgzODQ3NTA3LDMwOTMuNjM3NTM5NzQ0NzM3OCw4NzAuMDQ1NjEwMzQyNTI3OSwyNTMyLjIyNzY5MTY1ODU0ODMsMTY4Ni4zOTI4MTUwNjEzNjA0LDI0OTEuMzMxMjU0MTU3MDc4LDI3NjYuNTYwMjExMTM4NzA5MywyNDYxLjEwNjI0MDIwODI0MSw1NjEwLjAzODQyNDI5ODA5MywzNTcuNzYxODQ1NTg0MjkzODQsNC40Nzk0ODY2NTQ2MjAzNDEKKzE5LFNhdCAxMiBGZWIgMTEsMjA4LjY2Nzc1MTgzODI2NTEzLDE4Ni4zMDk4MzYwNTQwMjU5NCwxMDguNDQ3NDg5MTU2NjM2MzEsMjI0LjE4OTQ0NjM0NTczODA1LDIyNS45ODA3MTAyODQyOTY5MiwzNjUzLjA2Njc2MTk3NTAxLDM5NjkuNzgzODY1NzQyMzUxLDMyNTMuNjE3MDI1MTg5MTM2MywyODI2LjA5NDcyNDQyMDI0OSwzNTMzLjMyOTk5NjI2Mjg0NTMsNzE3LjUxNTQxNTQ5NjMwMDIsNDE5NC40NjI2NzQzNjQyMzc1LDgzMC4xMDgzNDA1ODE4MDgxLDIyMDMuNjE4MTMwMjc5OTQ3OCwxOTY5LjYzMjk1MjM2MDIxODcsNDUyMS40NjQ4NzE5ODE3MTksMzI3NS42MjI3Njk4NTU1Njg1LDkyMS4yMjY2MDYzNjEyNjg5LDI2ODEuMTg3NjI0MTc3ODMyLDE3ODUuNTk1OTYzNjQwNzg4MywyNjM3Ljg4NTQyNzI3NzAxMywyOTI5LjMwNDkwNTc0ODYzMSwyNjA1Ljg4MjQwNzMyNDU5MTQsNTk0MC4wNTI1NjQ3NTkwMTEsMzc4LjgwNzQxNzY1MTgzLDQuNzQyOTk1MzU1NjcwOTMxCisyMCxTdW4gMTMgRmViIDExLDIyMC4yNjA4NDUyNDM5NzA3NSwxOTYuNjYwNzc1ODI2Njk0NDUsMTE0LjQ3MjU3ODYxMjYzMjM2LDIzNi42NDQ4ODg4ODEzNjMwNCwyMzguNTM1NjcxMjY0Nzc1MjYsMzg1Ni4wMjI2Mjc1MzUzLDQxOTAuMzM1Nzk0NTg4OTU3LDM0MzQuMzgwMzk1NDEzNDMxNCwyOTgzLjEwNTk1MzE1NTYzMSwzNzI5LjYzMzU2NjUwMzA4OSw3NTcuMzc4ODk3Nzk1ODA1Niw0NDI3LjQ5NzIzMzU3MjY5Nyw4NzYuMjI3MjIzMDg0OTMzLDIzMjYuMDQ2MDExODc1Mzg3NiwyMDc5LjA2MTE2MzQzMDI1NTQsNDc3Mi42NjY5MTAyOTI1MDIsMzQ1Ny42MDg3Mjc5MDczMiw5NzIuNDA3ODA3MTAzOTk0LDI4MzAuMTQ4MTUyNTM2ODQ1NCwxODg0Ljc5OTUwOTAzMjgxMDYsMjc4NC40NDAxODY2MTM2NDEsMzA5Mi4wNTAyNTEzMzczMzEsMjc1MC42NTkxNTM1NDU2MSw2MjcwLjA2ODAyNTI3NjQ5MSwzOTkuODUzMDczOTAxNjU0NDUsNS4wMDY1MDUxMTA3NTYzMjUKKzIxLE1vbiAxNCBGZWIgMTEsMjMxLjg1Mzk4NTAyMjA0OTk4LDIwNy4wMTE3NTcwMDMxMjIwNiwxMjAuNDk3NjkyMTY4OTg2MjMsMjQ5LjEwMDM4MTIzODc1ODIsMjUxLjA5MDY4MjQ2NTA5NzUsNDA1OC45NzkzMDQ5MTkwNTIsNDQxMC44ODg2MDU2NDMyNzc1LDM2MTUuMTQ0NDg4NjkxMjA3NywzMTQwLjExNzgwOTkzNTkyOCwzOTI1LjkzNzkyMTk1NzYxMzUsNzk3LjI0MjUzOTU0OTI0MDMsNDY2MC41MzI3MjQ5MTkzOTMsOTIyLjM0NjI5MDA2MzU4OCwyNDQ4LjQ3NDM4MzE4MjM1NCwyMTg4LjQ4OTgxMjIxMzEzNjIsNTAyMy44Njk5NTM0MTE0MzgsMzYzOS41OTU0MTM5MDI5MDMsMTAyMy41ODkyMTI1NzE1MjIsMjk3OS4xMDkyNzY3Mzc5NzIzLDE5ODQuMDAzNDUxMjM5MDE0NiwyOTMwLjk5NTUzMjE2OTMwNiwzMjU0Ljc5NjI0NzkwNzQxMywyODk1LjQzNjQ3ODg3MzYxMzQsNjYwMC4wODQ4MDU4NTU4MTQsNDIwLjg5ODgxNDMzNDEwMzksNS4yNzAwMTU5MTk4ODA3Mzk1CisyMixUdWUgMTUgRmViIDExLDI0My40NDcxODIzNDI3MjY5LDIxNy4zNjI3ODk1NTY2ODc5NCwxMjYuNTIyODM1NjMxMDE2NCwyNjEuNTU1OTM1NDE5MDQxNjUsMjYzLjY0NTc1NTk4MjI3MDI2LDQyNjEuOTM2OTg5Njc5MTE5NSw0NjMxLjQ0MjUxMTQxMjM5NywzNzk1LjkwOTQ3OTE5MjMxNTgsMzI5Ny4xMzA0NDYwNDUyMzIsNDEyMi4yNDMyNTE3Njk2MjYsODM3LjEwNjM3OTE2NjAyNzIsNDg5My41NjkzNzI5Mzg3MjQsOTY4LjQ2NTU4NTk1NDQyNDUsMjU3MC45MDMzNjIxNjMwNTI0LDIyOTcuOTE5MDA0MTQ1NTcyNyw1Mjc1LjA3NDI0MzM3NzcyOCwzODIxLjU4MzAwMzE5MDE2MjMsMTA3NC43NzA4NzIwNzgxNjk4LDMxMjguMDcxMTQwMzA4MjYxNCwyMDgzLjIwNzg4NTg0NDM5OTcsMzA3Ny41NTE2MDUxNTMwNDAzLDM0MTcuNTQzMDUyMjY3OTI5LDMwNDAuMjE0NTIyODA0NDc1Niw2OTMwLjEwMzIyNDQ3NDgwNSw0NDEuOTQ0NjU5MjI3MTczOSw1LjUzMzUyODAzNjk0MjE1NQorMjMsV2VkIDE2IEZlYiAxMSwyNTUuMDQwNDIzNDY3NzczMjUsMjI3LjcxMzg2MTIyMTE2MDEzLDEzMi41NDgwMDE4NTg3Nzc0NywyNzQuMDExNTM2NjYyMDcwOCwyNzYuMjAwODc2OTM4MjE4LDQ0NjQuODk1NDQxMzA1NTgsNDg1MS45OTcyNTA1MzQ0MywzOTc2LjY3NTE1MjcwNTcyODYsMzQ1NC4xNDM2NzU0MTk2NDksNDMxOC41NDkzMjMzMTI0MSw4NzYuOTcwMzY5NDA2NTIxMyw1MTI2LjYwNjkwMTQ3NjQ0MywxMDE0LjU4NTA1NjEwNDkyNTUsMjY5My4zMzI4MDM3MzYwODY2LDI0MDcuMzQ4NjA5NTUxMjQsNTUyNi4yNzk0ODI1MDgwMTU1LDQwMDMuNTcxMjgwMTA5MjYxLDExMjUuOTUyNzI0OTcyMzkzLDMyNzcuMDMzNTY2NzI0MTg1LDIxODIuNDEyNjk1Mjg5MjM0OCwzMjI0LjEwODIzMTg5MjIzOSwzNTgwLjI5MDQ3MTU1OTg1MjQsMzE4NC45OTMxMTM3NzI2LDcyNjAuMTIyODkwMDUzMzk5LDQ2Mi45OTA1ODM2NDEwMTI4LDUuNzk3MDQxMTQ5NjcyMTM0CisyNCxUaHUgMTcgRmViIDExLDI2Ni42MzM3MTQxNTk5ODk1NSwyMzguMDY0OTc3MTQxODc4MSwxMzguNTczMTkzODQ3Mjc1NzcsMjg2LjQ2NzE5MTE1OTMxMDQ2LDI4OC43NTYwNTE1NzM4NzUxLDQ2NjcuODU0NzYwNjg1NTgzLDUwNzIuNTUyOTMyNjQzMzQxLDQxNTcuNDQxNTk5MDg2OTUsMzYxMS4xNTc1NzYxMDc3NTEsNDUxNC44NTYyMzQxNjYzMzMsOTE2LjgzNDUzMDA4NjQyNTUsNTM1OS42NDU0MjYzNzE0OTMsMTA2MC43MDQ3MjM0NDAyODUzLDI4MTUuNzYyNzY4NzU5MDIzNCwyNTE2Ljc3ODY4MjgyNTcxLDU3NzcuNDg1Nzk1NjcyMTAxLDQxODUuNTYwMzM1MTIzNDM3LDExNzcuMTM0Nzk2Njk1ODA5NCwzNDI1Ljk5NjYzMDAzMjQwMDQsMjI4MS42MTc5Mjg4ODY1MjE0LDMzNzAuNjY1NDg1MjM3Njc3LDM3NDMuMDM4NTg2NjgyMTIyNSwzMzI5Ljc3MjMyMzc0NDkzMSw3NTkwLjE0Mzk2NjYzODY4OCw0ODQuMDM2NTk4MDM3MTg3MSw2LjA2MDU1NTM4OTA1ODUwOQorMjUsRnJpIDE4IEZlYiAxMSwyNzguMjI3MDUzMTc2NjE3NDYsMjQ4LjQxNjEzNjIwOTI0MDA1LDE0NC41OTg0MTA5NTA2MzI3NCwyOTguOTIyODk3NTc1NTYwMDYsMzAxLjMxMTI3ODU0MzM3Mjc0LDQ4NzAuODE0OTI2MDYyNjMyLDUyOTMuMTA5NTM0MDk2MzY1LDQzMzguMjA4Nzk4OTU4NDc4LDM3NjguMTcyMTMxMjc4MjIzLDQ3MTEuMTYzOTYzMjg4MDExNSw5NTYuNjk4ODU2OTMyNDQ3Nyw1NTkyLjY4NDkyMjY0Mjk5NywxMTA2LjgyNDU4MzAxNjY0NDUsMjkzOC4xOTMyNDQxMDc4MTgsMjYyNi4yMDkyMTIyMzg0NzkzLDYwMjguNjkzMTU1OTQxNTgzLDQzNjcuNTUwMTQ4NzI0MTI5LDEyMjguMzE3MDgxNzYxODg4LDM1NzQuOTYwMzE0MjY0NjEyLDIzODAuODIzNTc2MDAxODIyLDM1MTcuMjIzMzQ5NDc4OTUzLDM5MDUuNzg3MzgwMTg4NzM2MywzNDc0LjU1MjEzNzIwMTY2Niw3OTIwLjE2NjQxODg1MzYyMSw1MDUuMDgyNzAwMTU5NjQxMiw2LjMyNDA3MDcyNjg1MzUxMworMjYsU2F0IDE5IEZlYiAxMSwyODkuODIwNDM4OTY0ODM0NywyNTguNzY3MzM3MDM2ODAyMzYsMTUwLjYyMzY1MjM2MTgyNTQsMzExLjM3ODY1NDI0MjQ5MSwzMTMuODY2NTU2MTY1MDUyNTQsNTA3My43NzU5MTAyNTIwNjEsNTUxMy42NjcwMjUzNTE5NTIsNDUxOC45NzY3MjgxMDgxODk1LDM5MjUuMTg3MzE5OTAwMzkyNiw0OTA3LjQ3MjQ4NDM4MzgxMiw5OTYuNTYzMzQ0NjA1MTIzOCw1ODI1LjcyNTM1OTA3NzQzMzUsMTE1Mi45NDQ2Mjg2NTY2NjcyLDMwNjAuNjI0MjEzMzg0MDIzLDI3MzUuNjQwMTgzMTMyMzI0LDYyNzkuOTAxNTI5NjY5NTI0LDQ1NDkuNTQwNjk2NTM1NDU4LDEyNzkuNDk5NTczMzE1MjI3MywzNzIzLjkyNDU5OTQ2ODQ4ODQsMjQ4MC4wMjk2MjMzNDc0NDIzLDM2NjMuNzgxODA0OTg1OTc0Myw0MDY4LjUzNjgzMDI4MDk3NCwzNjE5LjMzMjUzNDc1MDg2NzYsODI1MC4xOTAyMDI0OTQ2OTIsNTI2LjEyODg4NzE4OTQ0MTEsNi41ODc1ODcxMjc3NjE2NjgKKzI3LFN1biAyMCBGZWIgMTEsMzAxLjQxMzg3MTU3NDc2NzksMjY5LjExODU3OTY2OTMyMDksMTU2LjY0ODkxODEwNjkwNTI2LDMyMy44MzQ0NjEyMTM5NTg2LDMyNi40MjE4ODQ0OTMyMDAxLDUyNzYuNzM3NzE0MTMxNDE4LDU3MzQuMjI1NDA3MzYzNzM1LDQ2OTkuNzQ1Mzg3MzE3Njc4LDQwODIuMjAzMTQyNjUzMTUyNiw1MTAzLjc4MTc5ODMwMjUxOSwxMDM2LjQyNzk5MzI3NjgxNzUsNjA1OC43NjY3MzY2ODI0MDYsMTE5OS4wNjQ4NjA1NTk3NjQyLDMxODMuMDU1Njc3MTE2OTk1NCwyODQ1LjA3MTU5NTk4MDM5NDcsNjUzMS4xMTA5MTc5NDIwODEsNDczMS41MzE5NzkzNDQzLDEzMzAuNjgyMjcxNTc3MTI2OCwzODcyLjg4OTQ4NjI4ODExMywyNTc5LjIzNjA3MTM1MjMyMywzODEwLjM0MDg1MjM5MjQyMSw0MjMxLjI4NjkzNzY2MjUyLDM3NjQuMTEzNTE3MDE4NTI2LDg1ODAuMjE1MzE4OTg4ODM2LDU0Ny4xNzUxNTkyMTc1ODQ4LDYuODUxMTA0NTkyOTIyMzQ2CisyOCxNb24gMjEgRmViIDExLDMxMy4wMDczNTA0NzYyMzQ5LDI3OS40Njk4NjM2MzM0MjA0LDE2Mi42NzQyMDc5MTAzMjk0LDMzNi4yOTAzMTc5MjAzNDMzNCwzMzguOTc3MjYyOTUzNjQ0NSw1NDc5LjcwMDMyODQxOTAwNSw1OTU0Ljc4NDY3MDA0NTMwMyw0ODgwLjUxNDc2ODMyMDE2Nyw0MjM5LjIxOTU5MjM1NTk3MSw1MzAwLjA5MTg5NjA2NjY2MSwxMDc2LjI5MjgwMTEyNDQ2OCw2MjkxLjgwOTA0NDgwMDY0MiwxMjQ1LjE4NTI3NjYxNjc5OTUsMzMwNS40ODc2Mjk3MDc3OTIsMjk1NC41MDM0NDU3NzgyNTYsNjc4Mi4zMjEzMDkyNzExMzMsNDkxMy41MjM5ODg4Mjc5NywxMzgxLjg2NTE3NDIwNjkzNzQsNDAyMS44NTQ5Njc5MTExMzM0LDI2NzguNDQyOTE1NDc5NjI5LDM5NTYuOTAwNDg0OTk1OTY0LDQzOTQuMDM3Njk0ODkwNjA5LDM5MDguODk1MDc3MzgzNjI3Myw4OTEwLjI0MTc1MzI0MzU5LDU2OC4yMjE1MTUyODE2LDcuMTE0NjIzMTEwMjg0NTY0NQorMjksVHVlIDIyIEZlYiAxMSwzMjQuNjAwODc1OTA2ODIzMywyODkuODIxMTg5MTQxMjMxOSwxNjguNjk5NTIxODk1NTc1MzQsMzQ4Ljc0NjIyNDYxNjkwNTcsMzUxLjUzMjY5MTgwMzY4Niw1NjgyLjY2Mzc1NzI3NDE3OCw2MTc1LjM0NDgxNzkxNjYyNCw1MDYxLjI4NDg3NDgyMDIwMSw0Mzk2LjIzNjY3MjIyNjYyMiw1NDk2LjQwMjc4MTY5OTI2NiwxMTE2LjE1Nzc2ODk2NTAzMzcsNjUyNC44NTIyODgyMDc5MjgsMTI5MS4zMDU4Nzc3NzI5Mjg5LDM0MjcuOTIwMDczNjY1NDM4NCwzMDYzLjkzNTczNDc2ODUxNzcsNzAzMy41MzI3MDg4MDQ3OSw1MDk1LjUxNjcyODcxNjA2NiwxNDMzLjA0ODI4MjI1MzU2MTQsNDE3MC44MjEwNDczOTAzMzIsMjc3Ny42NTAxNTc3NjI0MjcsNDEwMy40NjA3MDU4MDAwOCw0NTU2Ljc4OTEwNTMwMDUyNyw0MDUzLjY3NzIxODgxMzIxLDkyNDAuMjY5NTEyMDIyMjU4LDU4OS4yNjc5NTU4MTI3OTQyLDcuMzc4MTQyNjg1MjQ4NjY0NQorMzAsV2VkIDIzIEZlYiAxMSwzMzYuMTk0NDQ3MjUwMDM3NTcsMzAwLjE3MjU1NTY0MjMxNDksMTc0LjcyNDg1OTc0MjI0MTg4LDM2MS4yMDIxODA2NDEyOTIxNiwzNjQuMDg4MTcwMzc1Njc4Nyw1ODg1LjYyNzk4OTkwNDE4NCw2Mzk1LjkwNTgzOTI0OTIyMjUsNTI0Mi4wNTU2OTcyMDUxNzUsNDU1My4yNTQzNzM5MTU1ODcsNTY5Mi43MTQ0NDQ3NjEzMzIsMTE1Ni4wMjI4OTQ2Nzg2NjA4LDY3NTcuODk2NDU0NTExOTg5LDEzMzcuNDI2NjYxNTc1NjQ5NiwzNTUwLjM1MzAwMjQ3OTQ4MjcsMzE3My4zNjg0NTcxMzIwMjQsNzI4NC43NDUxMDMxODQ2Nyw1Mjc3LjUxMDE4OTMzMDk2OSwxNDg0LjIzMTU5Mjk5NTI5MzMsNDMxOS43ODc3MTY4MDQzMSwyODc2Ljg1Nzc5MjkyNTI4NzQsNDI1MC4wMjE1MDcwMTEzMDUsNDcxOS41NDExNjAyMzc4MjcsNDE5OC40NTk5MzM2MDgzNTksOTU3MC4yOTg1Nzc3NzUzMyw2MTAuMzE0NDc5NjkyMDA0OSw3LjY0MTY2MzMwMzgwMTc2NgorMzEsVGh1IDI0IEZlYiAxMSwzNDcuNzg4MDYxOTU1MzQyNjQsMzEwLjUyMzk2MDg1OTQxMzksMTgwLjc1MDIyMDEyNDc4MSwzNzMuNjU4MTgzMjUzMjQ2OTMsMzc2LjY0MzY5NTkwNzQ3MjMsNjA4OC41OTI5ODE2NTc3NzksNjYxNi40Njc2ODU1MjA2MzksNTQyMi44MjcxOTU3MDYyOTksNDcxMC4yNzI2NjI4Nzk2NTgsNTg4OS4wMjY4NDIwNjUxNTIsMTE5NS44ODgxNjk0OTUxOTU4LDY5OTAuOTQxNDkyNDQ0MTI4LDEzODMuNTQ3NjE3ODc4NTkxLDM2NzIuNzg2Mzg5MjE1MjE3LDMyODIuODAxNTg4Nzk0MDU1LDc1MzUuOTU4NDM3MTQ1MTQ2LDU0NTkuNTA0MzMwNjM0OTE0LDE1MzUuNDE1MDk1MTcyMDI4NSw0NDY4Ljc1NDk0MzM4MTA1MSwyOTc2LjA2NTc5OTE0Mjk2NDQsNDM5Ni41ODI4NTYzODY5MDQ1LDQ4ODIuMjkzODIzODk3NzcsNDM0My4yNDMxODk5MTc1MTIsOTkwMC4zMjg4Nzc4OTc4NTUsNjMxLjM2MTA4MjI4OTA4ODgsNy45MDUxODQ5MDc5NzA0ODc1CiszMixGcmkgMjUgRmViIDExLDM1OS4zODE3MjI2NDUyODQzNiwzMjAuODc1NDA3MTM0MDc5NDcsMTg2Ljc3NTYwNDQwNjE2NTc3LDM4Ni4xMTQyMzUyNzAzOTMxLDM4OS4xOTkyNzEyMzkyMDI3NCw2MjkxLjU1ODc3ODQ0Njg3MzUsNjgzNy4wMzA0MDY2MjMyOTc1LDU2MDMuNTk5NDExMjE1MTc5LDQ4NjcuMjkxNTc0NjM3MzIzLDYwODUuMzQwMDE4MDE3Nzc5LDEyMzUuNzUzNjAyNDMyNDA1NCw3MjIzLjk4NzQ1NDcyMDU0MywxNDI5LjY2ODc1NzExNDU5MjYsMzc5NS4yMjAyNjE1Njc4MTQsMzM5Mi4yMzUxNTQ1MDkwNDczLDc3ODcuMTcyNzY3NTEyMTkzLDU2NDEuNDk5MTkzNzk2MDc4LDE1ODYuNTk4ODAwMzYxNzg1Miw0NjE3LjcyMjc2MDgxNzg0NCwzMDc1LjI3NDE5ODg1NjkwOSw0NTQzLjE0NDc4NzA3OTk0MSw1MDQ1LjA0NzEzMzA5NTk5NCw0NDg4LjAyNzAyMDQ5MTUxNiwxMDIzMC4zNjA0ODcwNDQ2ODUsNjUyLjQwNzc2ODM2NDkxNDksOC4xNjg3MDc1NTczNjUwMDkKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvSW5vY3VsYXRpb25UZXN0X0ZEX1JlZmVyZW5jZS9IdW1hblBvcHVsYXRpb25Nb2RlbC9odW1hbi9Db3VudF8wLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvSW5vY3VsYXRpb25UZXN0X0ZEX1JlZmVyZW5jZS9IdW1hblBvcHVsYXRpb25Nb2RlbC9odW1hbi9Db3VudF8wLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYzI0NDAxCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Jbm9jdWxhdGlvblRlc3RfRkRfUmVmZXJlbmNlL0h1bWFuUG9wdWxhdGlvbk1vZGVsL2h1bWFuL0NvdW50XzAuY3N2CkBAIC0wLDAgKzEgQEAKK2l0ZXJhdGlvbix0aW1lLApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Jbm9jdWxhdGlvblRlc3RfRkRfUmVmZXJlbmNlL0h1bWFuUG9wdWxhdGlvbk1vZGVsL2h1bWFuL0NvdW50XzEuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Jbm9jdWxhdGlvblRlc3RfRkRfUmVmZXJlbmNlL0h1bWFuUG9wdWxhdGlvbk1vZGVsL2h1bWFuL0NvdW50XzEuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJjMjQ0MDEKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0lub2N1bGF0aW9uVGVzdF9GRF9SZWZlcmVuY2UvSHVtYW5Qb3B1bGF0aW9uTW9kZWwvaHVtYW4vQ291bnRfMS5jc3YKQEAgLTAsMCArMSBAQAoraXRlcmF0aW9uLHRpbWUsCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0lub2N1bGF0aW9uVGVzdF9GRF9SZWZlcmVuY2UvSHVtYW5Qb3B1bGF0aW9uTW9kZWwvaHVtYW4vQ291bnRfMi5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0lub2N1bGF0aW9uVGVzdF9GRF9SZWZlcmVuY2UvSHVtYW5Qb3B1bGF0aW9uTW9kZWwvaHVtYW4vQ291bnRfMi5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODNkYWJkOQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvSW5vY3VsYXRpb25UZXN0X0ZEX1JlZmVyZW5jZS9IdW1hblBvcHVsYXRpb25Nb2RlbC9odW1hbi9Db3VudF8yLmNzdgpAQCAtMCwwICsxLDMzIEBACitpdGVyYXRpb24sdGltZSxFRy1GUkctRzIxMDAwMSxFRy1GUkctRzIxMDAwMixFRy1GUkctRzIxMDAwMyxFRy1GUkctRzIxMDAwNCxFRy1GUkctRzIxMDAwNSxFRy1MT0UtRzI0MDAwMSxFRy1MT0UtRzI0MDAwMixFRy1MT0UtRzI0MDAwMyxFRy1MT0UtRzI0MDAwNCxFRy1MT0UtRzI0MDAwNSxFRy1MT0UtRzI0MDAwNixFRy1MT0UtRzI0MDAwNyxFRy1MT0UtRzI0MDAwOCxFRy1MT0UtRzI0MDAwOSxFRy1VUEUtRzI5MDAwMSxFRy1VUEUtRzI5MDAwMixFRy1VUEUtRzI5MDAwMyxFRy1VUEUtRzI5MDAwNCxFRy1VUEUtRzI5MDAwNSxFRy1VUEUtRzI5MDAwNixFRy1VUEUtRzI5MDAwNyxFRy1VUEUtRzI5MDAwOCxFRy1VUkctRzMwMDAwMSxFRy1VUkctRzMwMDAwMixFRy1VUkctRzMwMDAwMyxFRy1VUkctRzMwMDAwNAorMSxUdWUgMjUgSmFuIDExLDI5NzIzNy40MDM0NTM4MDE1LDI2NTM4OS42MDM0MTg1NzE3NiwxNTQ0NzguMzUwNDExMjY3MjUsMzE5MzQ3LjMyNzYzNjkxMzE2LDMyMTg5OC44OTg5MTM3NzQyLDUyMDM2MjEuODc5MzEzODk1LDU2NTQ3NzAuNTA1NDEzOTEzLDQ2MzQ2MjQuNTA2NTY5MDksNDAyNTYzOS4wODYwNjM3MDUsNTAzMzA2Mi40ODUxMzQ4MzksMTAyMjA2Ni45ODA0NTc1MjUsNTk3NDgxNC45MDY2MDkyOSwxMTgyNDUwLjMwOTQ4MTA5MzQsMzEzODk1MC40MzkwNDkyMDM0LDI4MDU2NDkuNTUyMjYyMjM5Niw2NDQwNjE0LjE2NTQxNzgyMiw0NjY1OTcwLjY1NTQwMTg0MiwxMzEyMjQzLjk5NTgwMjU1NDgsMzgxOTIyNS43MzM1NTE3MTgzLDI1NDM0OTcuNTEzMDI5OTQyLDM3NTc1NDMuNzg5NjEzMjk0LDQxNzI2NTcuMTM3NjY4NjQyNywzNzExOTU2Ljk5MjA4NjkwNDYsODQ2MTMyNS42NDg5MDMxMTcsNTM5NTkzLjM1OTQ5MTEyNDQsNjc1Ni4xNzM5MjU3NDI4NTM1CisyLFdlZCAyNiBKYW4gMTEsMjk3MjM4LjU5MjQwMzQxNTM2LDI2NTM5MC42NjQ5NzY5ODU0LDE1NDQ3OC45NjgzMjQ2Njg5LDMxOTM0OC42MDUwMjYyMjM3LDMyMTkwMC4xODY1MDkzNjk4LDUyMDM2NDIuNjkzODAxNDExLDU2NTQ3OTMuMTI0NDk1OTM1LDQ2MzQ2NDMuMDQ1MDY3MTE3LDQwMjU2NTUuMTg4NjIwMDQ5LDUwMzMwODIuNjE3Mzg0Nzc5LDEwMjIwNzEuMDY4NzI1NDQ2OCw1OTc0ODM4LjgwNTg2ODkxNywxMTgyNDU1LjAzOTI4MjMzMTIsMzEzODk2Mi45OTQ4NTA5NTk2LDI4MDU2NjAuNzc0ODYwNDQ4Nyw2NDQwNjM5LjkyNzg3NDQ4NCw0NjY1OTg5LjMxOTI4NDQ2MywxMzEyMjQ5LjI0NDc3ODUzOCwzODE5MjQxLjAxMDQ1NDY1MjQsMjU0MzUwNy42ODcwMTk5OTQsMzc1NzU1OC44MTk3ODg0NTIyLDQxNzI2NzMuODI4Mjk3MTkzLDM3MTE5NzEuODM5OTE0ODczLDg0NjEzNTkuNDk0MjA1NzExLDUzOTU5NS41MTc4NjQ1NjIzLDY3NTYuMjAwOTUwNDM4NTU3CiszLFRodSAyNyBKYW4gMTEsMjk3MjM5Ljc4MTM1Nzc4NSwyNjUzOTEuNzI2NTM5NjQ1MzQsMTU0NDc5LjU4NjI0MDU0MjIsMzE5MzQ5Ljg4MjQyMDY0MzgsMzIxOTAxLjQ3NDExMDExNTg0LDUyMDM2NjMuNTA4MzcyMTg3LDU2NTQ4MTUuNzQzNjY4NDMyLDQ2MzQ2NjEuNTgzNjM5Mjk3LDQwMjU2NzEuMjkxMjQwODAzNCw1MDMzMTAyLjc0OTcxNTI0OSwxMDIyMDc1LjE1NzAwOTcyMTcsNTk3NDg2Mi43MDUyMjQxNDEsMTE4MjQ1OS43NjkxMDI0ODg0LDMxMzg5NzUuNTUwNzAyOTM5LDI4MDU2NzEuOTk3NTAzNTQ4LDY0NDA2NjUuNjkwNDM0MTk2LDQ2NjYwMDcuOTgzMjQxNzQxLDEzMTIyNTQuNDkzNzc1NTE3LDM4MTkyNTYuMjg3NDE4Njk0MiwyNTQzNTE3Ljg2MTA1MDc0MiwzNzU3NTczLjg1MDAyMzczMTYsNDE3MjY5MC41MTg5OTI1MDY0LDM3MTE5ODYuNjg3ODAyMjMyMyw4NDYxMzkzLjMzOTY0MzY4OSw1Mzk1OTcuNjc2MjQ2NjMzOCw2NzU2LjIyNzk3NTI0MjM1OAorNCxGcmkgMjggSmFuIDExLDI5NzI0MC45NzAzMTY5MTA0LDI2NTM5Mi43ODgxMDY1NTE1LDE1NDQ4MC4yMDQxNTg4ODcxOCwzMTkzNTEuMTU5ODIwMTczNSwzMjE5MDIuNzYxNzE2MDEyMjYsNTIwMzY4NC4zMjMwMjYyMiw1NjU0ODM4LjM2MjkzMTQwNyw0NjM0NjgwLjEyMjI4NTYzMTUsNDAyNTY4Ny4zOTM5MjU5Njg2LDUwMzMxMjIuODgyMTI2MjQ3NSwxMDIyMDc5LjI0NTMxMDM0OTcsNTk3NDg4Ni42MDQ2NzQ5NjEsMTE4MjQ2NC40OTg5NDE1NjUsMzEzODk4OC4xMDY2MDUxNDE0LDI4MDU2ODMuMjIwMTkxNTM4LDY0NDA2OTEuNDUzMDk2OTU4LDQ2NjYwMjYuNjQ3MjczNjc0LDEzMTIyNTkuNzQyNzkzNDkyLDM4MTkyNzEuNTY0NDQzODQ0LDI1NDM1MjguMDM1MTIyMTg2NCwzNzU3NTg4Ljg4MDMxOTEzMTUsNDE3MjcwNy4yMDk3NTQ1ODI1LDM3MTIwMDEuNTM1NzQ4OTgzNyw4NDYxNDI3LjE4NTIxNzA0Nyw1Mzk1OTkuODM0NjM3MzM4OCw2NzU2LjI1NTAwMDE1NDI1OTUKKzUsU2F0IDI5IEphbiAxMSwyOTcyNDIuMTU5MjgwNzkxNywyNjUzOTMuODQ5Njc3NzAzOSwxNTQ0ODAuODIyMDc5NzAzODIsMzE5MzUyLjQzNzIyNDgxMjgsMzIxOTA0LjA0OTMyNzA1OTEsNTIwMzcwNS4xMzc3NjM1MTIsNTY1NDg2MC45ODIyODQ4NTksNDYzNDY5OC42NjEwMDYxMjEsNDAyNTcwMy40OTY2NzU1NDQ0LDUwMzMxNDMuMDE0NjE3Nzc2LDEwMjIwODMuMzMzNjI3MzMxLDU5NzQ5MTAuNTA0MjIxMzgsMTE4MjQ2OS4yMjg3OTk1NjA4LDMxMzkwMDAuNjYyNTU3NTY4LDI4MDU2OTQuNDQyOTI0NDE4NSw2NDQwNzE3LjIxNTg2Mjc3MSw0NjY2MDQ1LjMxMTM4MDI2MjUsMTMxMjI2NC45OTE4MzI0NjMzLDM4MTkyODYuODQxNTMwMTAyLDI1NDM1MzguMjA5MjM0MzI3LDM3NTc2MDMuOTEwNjc0NjUzLDQxNzI3MjMuOTAwNTgzNDIxMywzNzEyMDE2LjM4Mzc1NTEyNjUsODQ2MTQ2MS4wMzA5MjU3ODgsNTM5NjAxLjk5MzAzNjY3NzQsNjc1Ni4yODIwMjUxNzQyNjA1Cis2LFN1biAzMCBKYW4gMTEsMjk3MjQzLjM0ODI0OTQyODg1LDI2NTM5NC45MTEyNTMxMDI2NSwxNTQ0ODEuNDQwMDAyOTkyMTQsMzE5MzUzLjcxNDYzNDU2MTcsMzIxOTA1LjMzNjk0MzI1NjQ0LDUyMDM3MjUuOTUyNTg0MDY0LDU2NTQ4ODMuNjAxNzI4Nzg4LDQ2MzQ3MTcuMTk5ODAwNzY1LDQwMjU3MTkuNTk5NDg5NTMxLDUwMzMxNjMuMTQ3MTg5ODM0LDEwMjIwODcuNDIxOTYwNjY1NSw1OTc0OTM0LjQwMzg2MzM5NjUsMTE4MjQ3My45NTg2NzY0NzYsMzEzOTAxMy4yMTg1NjAyMTgzLDI4MDU3MDUuNjY1NzAyMTkwMyw2NDQwNzQyLjk3ODczMTYzNCw0NjY2MDYzLjk3NTU2MTUwOCwxMzEyMjcwLjI0MDg5MjQzMDUsMzgxOTMwMi4xMTg2Nzc0NjgsMjU0MzU0OC4zODMzODcxNjQsMzc1NzYxOC45NDEwOTAyOTU2LDQxNzI3NDAuNTkxNDc5MDIzNSwzNzEyMDMxLjIzMTgyMDY2MTYsODQ2MTQ5NC44NzY3Njk5MTEsNTM5NjA0LjE1MTQ0NDY0OTYsNjc1Ni4zMDkwNTAzMDIzNjEKKzcsTW9uIDMxIEphbiAxMSwyOTcyNDQuNTM3MjIyODIxODUsMjY1Mzk1Ljk3MjgzMjc0NzcsMTU0NDgyLjA1NzkyODc1MjE1LDMxOTM1NC45OTIwNDk0MjAyLDMyMTkwNi42MjQ1NjQ2MDQyLDUyMDM3NDYuNzY3NDg3ODc0LDU2NTQ5MDYuMjIxMjYzMTk0LDQ2MzQ3MzUuNzM4NjY5NTY0LDQwMjU3MzUuNzAyMzY3OTI5LDUwMzMxODMuMjc5ODQyNDIzLDEwMjIwOTEuNTEwMzEwMzUzNCw1OTc0OTU4LjMwMzYwMTAxMiwxMTgyNDc4LjY4ODU3MjMxMDgsMzEzOTAyNS43NzQ2MTMwOTI3LDI4MDU3MTYuODg4NTI0ODUzLDY0NDA3NjguNzQxNzAzNTQ5LDQ2NjYwODIuNjM5ODE3NDEsMTMxMjI3NS40ODk5NzMzOTQyLDM4MTkzMTcuMzk1ODg1OTQzLDI1NDM1NTguNTU3NTgwNjk4LDM3NTc2MzMuOTcxNTY2MDYsNDE3Mjc1Ny4yODI0NDEzODkzLDM3MTIwNDYuMDc5OTQ1NTg5LDg0NjE1MjguNzIyNzQ5NDE4LDUzOTYwNi4zMDk4NjEyNTUzLDY3NTYuMzM2MDc1NTM4NTYzCis4LFR1ZSAxIEZlYiAxMSwyOTcyNDUuNzI2MjAwOTcwNzYsMjY1Mzk3LjAzNDQxNjYzOSwxNTQ0ODIuNjc1ODU2OTgzODcsMzE5MzU2LjI2OTQ2OTM4ODQsMzIxOTA3LjkxMjE5MTEwMjQ2LDUyMDM3NjcuNTgyNDc0OTQ0LDU2NTQ5MjguODQwODg4MDc5LDQ2MzQ3NTQuMjc3NjEyNTE4NSw0MDI1NzUxLjgwNTMxMDczODMsNTAzMzIwMy40MTI1NzU1NDMsMTAyMjA5NS41OTg2NzYzOTQ2LDU5NzQ5ODIuMjAzNDM0MjI2LDExODI0ODMuNDE4NDg3MDY1MiwzMTM5MDM4LjMzMDcxNjE5MTMsMjgwNTcyOC4xMTEzOTI0MDcsNjQ0MDc5NC41MDQ3Nzg1MTY1LDQ2NjYxMDEuMzA0MTQ3OTY5LDEzMTIyODAuNzM5MDc1MzU0LDM4MTkzMzIuNjczMTU1NTI2NiwyNTQzNTY4LjczMTgxNDkyODQsMzc1NzY0OS4wMDIxMDE5NDYsNDE3Mjc3My45NzM0NzA1MTksMzcxMjA2MC45MjgxMjk5MDg2LDg0NjE1NjIuNTY4ODY0MzA4LDUzOTYwOC40NjgyODY0OTQ4LDY3NTYuMzYzMTAwODgyODY1Cis5LFdlZCAyIEZlYiAxMSwyOTcyNDYuOTE1MTgzODc1NiwyNjUzOTguMDk2MDA0Nzc2NjYsMTU0NDgzLjI5Mzc4NzY4NzMsMzE5MzU3LjU0Njg5NDQ2NjMsMzIxOTA5LjE5OTgyMjc1MTIsNTIwMzc4OC4zOTc1NDUyNzQsNTY1NDk1MS40NjA2MDM0NDMsNDYzNDc3Mi44MTY2Mjk2MjksNDAyNTc2Ny45MDgzMTc5NTk0LDUwMzMyMjMuNTQ1Mzg5MTkzLDEwMjIwOTkuNjg3MDU4Nzg5Myw1OTc1MDA2LjEwMzM2MzA0LDExODI0ODguMTQ4NDIwNzM5MiwzMTM5MDUwLjg4Njg2OTUxNDQsMjgwNTczOS4zMzQzMDQ4NTMsNjQ0MDgyMC4yNjc5NTY1MzUsNDY2NjExOS45Njg1NTMxODUsMTMxMjI4NS45ODgxOTgzMTA0LDM4MTkzNDcuOTUwNDg2MjE5LDI1NDM1NzguOTA2MDg5ODU2LDM3NTc2NjQuMDMyNjk3OTU0Nyw0MTcyNzkwLjY2NDU2NjQxMjYsMzcxMjA3NS43NzYzNzM2MjEsODQ2MTU5Ni40MTUxMTQ1ODMsNTM5NjEwLjYyNjcyMDM2NzksNjc1Ni4zOTAxMjYzMzUyNjkKKzEwLFRodSAzIEZlYiAxMSwyOTcyNDguMTA0MTcxNTM2MzQsMjY1Mzk5LjE1NzU5NzE2MDY3LDE1NDQ4My45MTE3MjA4NjI0NCwzMTkzNTguODI0MzI0NjUzODMsMzIxOTEwLjQ4NzQ1OTU1MDUsNTIwMzgwOS4yMTI2OTg4NjUsNTY1NDk3NC4wODA0MDkyODYsNDYzNDc5MS4zNTU3MjA4OTUsNDAyNTc4NC4wMTEzODk1OTI3LDUwMzMyNDMuNjc4MjgzMzc1LDEwMjIxMDMuNzc1NDU3NTM3NSw1OTc1MDMwLjAwMzM4NzQ1MywxMTgyNDkyLjg3ODM3MzMzMjgsMzEzOTA2My40NDMwNzMwNjE4LDI4MDU3NTAuNTU3MjYyMTksNjQ0MDg0Ni4wMzEyMzc2MDcsNDY2NjEzOC42MzMwMzMwNiwxMzEyMjkxLjIzNzM0MjI2MywzODE5MzYzLjIyNzg3ODAyMSwyNTQzNTg5LjA4MDQwNTQ4LDM3NTc2NzkuMDYzMzU0MDg1Nyw0MTcyODA3LjM1NTcyOTA3MSwzNzEyMDkwLjYyNDY3NjcyNjgsODQ2MTYzMC4yNjE1MDAyNDMsNTM5NjEyLjc4NTE2Mjg3NDgsNjc1Ni40MTcxNTE4OTU3NzUKKzExLEZyaSA0IEZlYiAxMSwyOTcyNDkuMjkzMTYzOTUzLDI2NTQwMC4yMTkxOTM3OTEwNCwxNTQ0ODQuNTI5NjU2NTA5MzIsMzE5MzYwLjEwMTc1OTk1MTE1LDMyMTkxMS43NzUxMDE1MDAzMyw1MjAzODMwLjAyNzkzNTcxNSw1NjU0OTk2LjcwMDMwNTYwNyw0NjM0ODA5Ljg5NDg4NjMxOSw0MDI1ODAwLjExNDUyNTYzOCw1MDMzMjYzLjgxMTI1ODA4OCwxMDIyMTA3Ljg2Mzg3MjYzOTQsNTk3NTA1My45MDM1MDc0NjYsMTE4MjQ5Ny42MDgzNDQ4NDYyLDMxMzkwNzUuOTk5MzI2ODM0LDI4MDU3NjEuNzgwMjY0NDE5LDY0NDA4NzEuNzk0NjIxNzMyLDQ2NjYxNTcuMjk3NTg3NTkxLDEzMTIyOTYuNDg2NTA3MjEyNSwzODE5Mzc4LjUwNTMzMDkzMywyNTQzNTk5LjI1NDc2MTgwMiwzNzU3Njk0LjA5NDA3MDMzOSw0MTcyODI0LjA0Njk1ODQ5NCwzNzEyMTA1LjQ3MzAzOTIyNTcsODQ2MTY2NC4xMDgwMjEyOSw1Mzk2MTQuOTQzNjE0MDE1NSw2NzU2LjQ0NDE3NzU2NDM4MgorMTIsU2F0IDUgRmViIDExLDI5NzI1MC40ODIxNjExMjU2MywyNjU0MDEuMjgwNzk0NjY3ODQsMTU0NDg1LjE0NzU5NDYyNzk1LDMxOTM2MS4zNzkyMDAzNTgyLDMyMTkxMy4wNjI3NDg2MDA3LDUyMDM4NTAuODQzMjU1ODI3LDU2NTUwMTkuMzIwMjkyNDA5LDQ2MzQ4MjguNDM0MTI1ODk4LDQwMjU4MTYuMjE3NzI2MDk2LDUwMzMyODMuOTQ0MzEzMzMyLDEwMjIxMTEuOTUyMzA0MDk0OSw1OTc1MDc3LjgwMzcyMzA4LDExODI1MDIuMzM4MzM1Mjc5NiwzMTM5MDg4LjU1NTYzMDgzMTUsMjgwNTc3My4wMDMzMTE1NCw2NDQwODk3LjU1ODEwODkxMSw0NjY2MTc1Ljk2MjIxNjc4MSwxMzEyMzAxLjczNTY5MzE1ODYsMzgxOTM5My43ODI4NDQ5NTQsMjU0MzYwOS40MjkxNTg4MjEyLDM3NTc3MDkuMTI0ODQ2NzE1NSw0MTcyODQwLjczODI1NDY4MTcsMzcxMjEyMC4zMjE0NjExMTgsODQ2MTY5Ny45NTQ2Nzc3MjEsNTM5NjE3LjEwMjA3Mzc4OTksNjc1Ni40NzEyMDMzNDEwOTIKKzEzLFN1biA2IEZlYiAxMSwyOTcyNTEuNjcxMTYzMDU0MywyNjU0MDIuMzQyMzk5NzkxLDE1NDQ4NS43NjU1MzUyMTgzMiwzMTkzNjIuNjU2NjQ1ODc0OTYsMzIxOTE0LjM1MDQwMDg1MTc1LDUyMDM4NzEuNjU4NjU5Miw1NjU1MDQxLjk0MDM2OTY5LDQ2MzQ4NDYuOTczNDM5NjM1LDQwMjU4MzIuMzIwOTkwOTY3LDUwMzMzMDQuMDc3NDQ5MTA5LDEwMjIxMTYuMDQwNzUxOTA0MSw1OTc1MTAxLjcwNDAzNDI5NSwxMTgyNTA3LjA2ODM0NDYzMjksMzEzOTEwMS4xMTE5ODUwNTQsMjgwNTc4NC4yMjY0MDM1NTMsNjQ0MDkyMy4zMjE2OTkxNDMsNDY2NjE5NC42MjY5MjA2MywxMzEyMzA2Ljk4NDkwMDEwMTMsMzgxOTQwOS4wNjA0MjAwODU3LDI1NDM2MTkuNjAzNTk2NTM4LDM3NTc3MjQuMTU1NjgzMjE1LDQxNzI4NTcuNDI5NjE3NjM0NSwzNzEyMTM1LjE2OTk0MjQwMzcsODQ2MTczMS44MDE0Njk1NCw1Mzk2MTkuMjYwNTQyMTk4Miw2NzU2LjQ5ODIyOTIyNTkwNgorMTQsTW9uIDcgRmViIDExLDI5NzI1Mi44NjAxNjk3Mzg5NCwyNjU0MDMuNDA0MDA5MTYwNiwxNTQ0ODYuMzgzNDc4MjgwNDUsMzE5MzYzLjkzNDA5NjUwMTU2LDMyMTkxNS42MzgwNTgyNTMzMyw1MjAzODkyLjQ3NDE0NTgzNSw1NjU1MDY0LjU2MDUzNzQ1MSw0NjM0ODY1LjUxMjgyNzUyOSw0MDI1ODQ4LjQyNDMyMDI1MSw1MDMzMzI0LjIxMDY2NTQxOSwxMDIyMTIwLjEyOTIxNjA2NzEsNTk3NTEyNS42MDQ0NDExMTEsMTE4MjUxMS43OTgzNzI5MDYyLDMxMzkxMTMuNjY4Mzg5NTAyLDI4MDU3OTUuNDQ5NTQwNDU4Niw2NDQwOTQ5LjA4NTM5MjQzLDQ2NjYyMTMuMjkxNjk5MTM4LDEzMTIzMTIuMjM0MTI4MDQxLDM4MTk0MjQuMzM4MDU2MzI3MywyNTQzNjI5Ljc3ODA3NDk1MjMsMzc1NzczOS4xODY1Nzk4Mzc1LDQxNzI4NzQuMTIxMDQ3MzUzLDM3MTIxNTAuMDE4NDgzMDgzLDg0NjE3NjUuNjQ4Mzk2NzQ1LDUzOTYyMS40MTkwMTkyNDA0LDY3NTYuNTI1MjU1MjE4ODIyCisxNSxUdWUgOCBGZWIgMTEsMjk3MjU0LjA0OTE4MTE3OTYsMjY1NDA0LjQ2NTYyMjc3NjYsMTU0NDg3LjAwMTQyMzgxNDM2LDMxOTM2NS4yMTE1NTIyMzc5LDMyMTkxNi45MjU3MjA4MDU1NCw1MjAzOTEzLjI4OTcxNTczMTUsNTY1NTA4Ny4xODA3OTU2OTMsNDYzNDg4NC4wNTIyODk1OCw0MDI1ODY0LjUyNzcxMzk0ODQsNTAzMzM0NC4zNDM5NjIyNjEsMTAyMjEyNC4yMTc2OTY1ODQxLDU5NzUxNDkuNTA0OTQzNTI5LDExODI1MTYuNTI4NDIwMDk5OCwzMTM5MTI2LjIyNDg0NDE3NTQsMjgwNTgwNi42NzI3MjIyNTY3LDY0NDA5NzQuODQ5MTg4NzcyLDQ2NjYyMzEuOTU2NTUyMzA0LDEzMTIzMTcuNDgzMzc2OTc3NSwzODE5NDM5LjYxNTc1MzY3OTUsMjU0MzYzOS45NTI1OTQwNjQ2LDM3NTc3NTQuMjE3NTM2NTg0LDQxNzI4OTAuODEyNTQzODM3LDM3MTIxNjQuODY3MDgzMTU3LDg0NjE3OTkuNDk1NDU5MzM5LDUzOTYyMy41Nzc1MDQ5MTY1LDY3NTYuNTUyMjgxMzE5ODQzCisxNixXZWQgOSBGZWIgMTEsMjk3MjU1LjIzODE5NzM3NjMsMjY1NDA1LjUyNzI0MDYzOTEsMTU0NDg3LjYxOTM3MTgyMDA3LDMxOTM2Ni40ODkwMTMwODQxNSwzMjE5MTguMjEzMzg4NTA4NCw1MjAzOTM0LjEwNTM2ODg5MSw1NjU1MTA5LjgwMTE0NDQxNiw0NjM0OTAyLjU5MTgyNTc4OSw0MDI1ODgwLjYzMTE3MjA1OSw1MDMzMzY0LjQ3NzMzOTYzNzUsMTAyMjEyOC4zMDYxOTM0NTQ5LDU5NzUxNzMuNDA1NTQxNTQ4NSwxMTgyNTIxLjI1ODQ4NjIxMzQsMzEzOTEzOC43ODEzNDkwNzQ2LDI4MDU4MTcuODk1OTQ4OTQ3NCw2NDQxMDAwLjYxMzA4ODE2OSw0NjY2MjUwLjYyMTQ4MDEzMSwxMzEyMzIyLjczMjY0NjkxMSwzODE5NDU0Ljg5MzUxMjE0MjQsMjU0MzY1MC4xMjcxNTM4NzUsMzc1Nzc2OS4yNDg1NTM0NTQsNDE3MjkwNy41MDQxMDcwODcsMzcxMjE3OS43MTU3NDI2MjUzLDg0NjE4MzMuMzQyNjU3MzIsNTM5NjI1LjczNTk5OTIyNjUsNjc1Ni41NzkzMDc1Mjg5Njg1CisxNyxUaHUgMTAgRmViIDExLDI5NzI1Ni40MjcyMTgzMjkxLDI2NTQwNi41ODg4NjI3NDgwNiwxNTQ0ODguMjM3MzIyMjk3NTYsMzE5MzY3Ljc2NjQ3OTA0MDIsMzIxOTE5LjUwMTA2MTM2Miw1MjAzOTU0LjkyMTEwNTMxMiw1NjU1MTMyLjQyMTU4MzYyMSw0NjM0OTIxLjEzMTQzNjE1Niw0MDI1ODk2LjczNDY5NDU4NCw1MDMzMzg0LjYxMDc5NzU0NywxMDIyMTMyLjM5NDcwNjY3OTYsNTk3NTE5Ny4zMDYyMzUxNzEsMTE4MjUyNS45ODg1NzEyNDczLDMxMzkxNTEuMzM3OTA0MiwyODA1ODI5LjExOTIyMDUzMSw2NDQxMDI2LjM3NzA5MDYyMiw0NjY2MjY5LjI4NjQ4MjYxNiwxMzEyMzI3Ljk4MTkzNzg0MTUsMzgxOTQ3MC4xNzEzMzE3MTYyLDI1NDM2NjAuMzAxNzU0MzgzNCwzNzU3Nzg0LjI3OTYzMDQ0OCw0MTcyOTI0LjE5NTczNzEwMzUsMzcxMjE5NC41NjQ0NjE0ODgzLDg0NjE4NjcuMTg5OTkwNjksNTM5NjI3Ljg5NDUwMjE3MDUsNjc1Ni42MDYzMzM4NDYxOTgKKzE4LEZyaSAxMSBGZWIgMTEsMjk3MjU3LjYxNjI0NDAzOCwyNjU0MDcuNjUwNDg5MTAzNSwxNTQ0ODguODU1Mjc1MjQ2ODQsMzE5MzY5LjA0Mzk1MDEwNjEzLDMyMTkyMC43ODg3MzkzNjYyLDUyMDM5NzUuNzM2OTI0OTk3LDU2NTUxNTUuMDQyMTEzMzA3LDQ2MzQ5MzkuNjcxMTIwNjgyLDQwMjU5MTIuODM4MjgxNTIyNSw1MDMzNDA0Ljc0NDMzNTk5LDEwMjIxMzYuNDgzMjM2MjU4NSw1OTc1MjIxLjIwNzAyNDM5NTUsMTE4MjUzMC43MTg2NzUyMDE1LDMxMzkxNjMuODk0NTA5NTUxNiwyODA1ODQwLjM0MjUzNzAwNzgsNjQ0MTA1Mi4xNDExOTYxMyw0NjY2Mjg3Ljk1MTU1OTc2MjUsMTMxMjMzMy4yMzEyNDk3NjkyLDM4MTk0ODUuNDQ5MjEyNDAxNiwyNTQzNjcwLjQ3NjM5NTU5LDM3NTc3OTkuMzEwNzY3NTY3LDQxNzI5NDAuODg3NDMzODg2NSwzNzEyMjA5LjQxMzIzOTc0NjQsODQ2MTkwMS4wMzc0NTk0NSw1Mzk2MzAuMDUzMDEzNzQ4NSw2NzU2LjYzMzM2MDI3MTUzMworMTksU2F0IDEyIEZlYiAxMSwyOTcyNTguODA1Mjc0NTAyOTYsMjY1NDA4LjcxMjExOTcwNTQ1LDE1NDQ4OS40NzMyMzA2Njc5NCwzMTkzNzAuMzIxNDI2MjgxOTQsMzIxOTIyLjA3NjQyMjUyMTIsNTIwMzk5Ni41NTI4Mjc5NDQsNTY1NTE3Ny42NjI3MzM0NzYsNDYzNDk1OC4yMTA4NzkzNjYsNDAyNTkyOC45NDE5MzI4NzU3LDUwMzM0MjQuODc3OTU0OTY3LDEwMjIxNDAuNTcxNzgyMTkxNCw1OTc1MjQ1LjEwNzkwOTIyNCwxMTgyNTM1LjQ0ODc5ODA3NjIsMzEzOTE3Ni40NTExNjUxMjk0LDI4MDU4NTEuNTY1ODk4Mzc4LDY0NDEwNzcuOTA1NDA0Njk0LDQ2NjYzMDYuNjE2NzExNTY5LDEzMTIzMzguNDgwNTgyNjk0MywzODE5NTAwLjcyNzE1NDE5ODYsMjU0MzY4MC42NTEwNzc0OTYsMzc1NzgxNC4zNDE5NjQ4MDk3LDQxNzI5NTcuNTc5MTk3NDM2LDM3MTIyMjQuMjYyMDc3Mzk5NSw4NDYxOTM0Ljg4NTA2MzYsNTM5NjMyLjIxMTUzMzk2MDUsNjc1Ni42NjAzODY4MDQ5NzQKKzIwLFN1biAxMyBGZWIgMTEsMjk3MjU5Ljk5NDMwOTcyNDEsMjY1NDA5Ljc3Mzc1NDU1MzksMTU0NDkwLjA5MTE4ODU2MDg1LDMxOTM3MS41OTg5MDc1Njc2LDMyMTkyMy4zNjQxMTA4MjY5LDUyMDQwMTcuMzY4ODE0MTU1LDU2NTUyMDAuMjgzNDQ0MTI3LDQ2MzQ5NzYuNzUwNzEyMjA5LDQwMjU5NDUuMDQ1NjQ4NjQzMyw1MDMzNDQ1LjAxMTY1NDQ3OSwxMDIyMTQ0LjY2MDM0NDQ3ODYsNTk3NTI2OS4wMDg4ODk2NTYsMTE4MjU0MC4xNzg5Mzk4NzE1LDMxMzkxODkuMDA3ODcwOTM0LDI4MDU4NjIuNzg5MzA0NjQxNSw2NDQxMTAzLjY2OTcxNjMxNiw0NjY2MzI1LjI4MTkzODAzNiwxMzEyMzQzLjcyOTkzNjYxNjcsMzgxOTUxNi4wMDUxNTcxMDcsMjU0MzY5MC44MjU4MDAxMDAzLDM3NTc4MjkuMzczMjIyMTc3NCw0MTcyOTc0LjI3MTAyNzc1MjcsMzcxMjIzOS4xMTA5NzQ0NDgsODQ2MTk2OC43MzI4MDMxNCw1Mzk2MzQuMzcwMDYyODA2Niw2NzU2LjY4NzQxMzQ0NjUyMTUKKzIxLE1vbiAxNCBGZWIgMTEsMjk3MjYxLjE4MzM0OTcwMTM0LDI2NTQxMC44MzUzOTM2NDg5NCwxNTQ0OTAuNzA5MTQ4OTI1NiwzMTkzNzIuODc2MzkzOTYzMjMsMzIxOTI0LjY1MTgwNDI4MzQsNTIwNDAzOC4xODQ4ODM2MzEsNTY1NTIyMi45MDQyNDUyNjEsNDYzNDk5NS4yOTA2MTkyMTIsNDAyNTk2MS4xNDk0Mjg4MjYsNTAzMzQ2NS4xNDU0MzQ1MjYsMTAyMjE0OC43NDg5MjMxMiw1OTc1MjkyLjkwOTk2NTY5MSwxMTgyNTQ0LjkwOTEwMDU4NzIsMzEzOTIwMS41NjQ2MjY5NjU3LDI4MDU4NzQuMDEyNzU1Nzk4Niw2NDQxMTI5LjQzNDEzMDk5Niw0NjY2MzQzLjk0NzIzOTE2MywxMzEyMzQ4Ljk3OTMxMTUzNjUsMzgxOTUzMS4yODMyMjExMjc1LDI1NDM3MDEuMDAwNTYzNDAzNiwzNzU3ODQ0LjQwNDUzOTY3MDMsNDE3Mjk5MC45NjI5MjQ4MzY3LDM3MTIyNTMuOTU5OTMwODkxNiw4NDYyMDAyLjU4MDY3ODA3Miw1Mzk2MzYuNTI4NjAwMjg2OSw2NzU2LjcxNDQ0MDE5NjE3NQorMjIsVHVlIDE1IEZlYiAxMSwyOTcyNjIuMzcyMzk1NTgwMzQsMjY1NDExLjg5NzAzODAxMzQ0LDE1NDQ5MS4zMjcxMTIzNTc2MywzMTkzNzQuMTUzODg2Njk5NywzMjE5MjUuOTM5NTA0MTMxMyw1MjA0MDU5LjAwMTA1NjQyNyw1NjU1MjQ1LjUyNTE1ODY3MzUsNDYzNTAxMy44MzA2MTgyMzgsNDAyNTk3Ny4yNTMyODg5Mzk2LDUwMzM0ODUuMjc5MzE0NTA2LDEwMjIxNTIuODM3NTIyMDU1LDU5NzUzMTYuODExMTYwMzU5NSwxMTgyNTQ5LjYzOTI4NDc4MTIsMzEzOTIxNC4xMjE0NDUzMjI0LDI4MDU4ODUuMjM2MjYyNjYzMyw2NDQxMTU1LjE5ODY3MzU1Niw0NjY2MzYyLjYxMjYzMjkzNiwxMzEyMzU0LjIyODcxMjUxMTcsMzgxOTU0Ni41NjEzNjA5ODEsMjU0MzcxMS4xNzUzNzcyMDksMzc1Nzg1OS40MzU5MzE3NzEsNDE3MzAwNy42NTQ5MDQ3NzEsMzcxMjI2OC44MDg5NjEwMzgsODQ2MjAzNi40Mjg3MjEwMDcsNTM5NjM4LjY4NzE0ODQ4MTEsNjc1Ni43NDE0NjcwNzk5NzYKKzIzLFdlZCAxNiBGZWIgMTEsMjk3MjYzLjU2MTQ0NTk1MjE2LDI2NTQxMi45NTg2ODYzODkyNiwxNTQ0OTEuOTQ1MDc4MTI0NTgsMzE5Mzc1LjQzMTM4NDI2MzA0LDMyMTkyNy4yMjcyMDg4NDQ3NCw1MjA0MDc5LjgxNzMwNzg3NTUsNTY1NTI2OC4xNDYxNTc1NTgsNDYzNTAzMi4zNzA2ODczMTYsNDAyNTk5My4zNTcyMDk5MDEsNTAzMzUwNS40MTMyNzA1NjEsMTAyMjE1Ni45MjYxMzY0Mzg3LDU5NzUzNDAuNzEyNDQ1MzM4LDExODI1NTQuMzY5NDg2ODQ4LDMxMzkyMjYuNjc4MzExMTI1LDI4MDU4OTYuNDU5ODExOTM1Nyw2NDQxMTgwLjk2MzMxMzQ2Nyw0NjY2MzgxLjI3ODA5NzIzNiwxMzEyMzU5LjQ3ODEzMzMyMTMsMzgxOTU2MS44Mzk1NTg1NjIsMjU0MzcyMS4zNTAyMjk0NiwzNzU3ODc0LjQ2NzM4MDY2NzYsNDE3MzAyNC4zNDY5NDc3NzUsMzcxMjI4My42NTgwNDcyOTE1LDg0NjIwNzAuMjc2ODkxODM1LDUzOTY0MC44NDU3MDQ4MzEzLDY3NTYuNzY4NDk0MDY1ODk3CisyNCxUaHUgMTcgRmViIDExLDI5NzI2NC43NTA1MDE0MDc4LDI2NTQxNC4wMjAzMzkzMDQyMywxNTQ0OTIuNTYzMDQ2NTMzNjQsMzE5Mzc2LjcwODg4NzI4ODQsMzIxOTI4LjUxNDkxOTA2MzgsNTIwNDEwMC42MzM2NDgzMjUsNTY1NTI5MC43NjcyNTMxNiw0NjM1MDUwLjkxMDgzNTY2Myw0MDI2MDA5LjQ2MTE5OTcxNSw1MDMzNTI1LjU0NzMxMjcsMTAyMjE2MS4wMTQ3NjgzMDM0LDU5NzUzNjQuNjEzODMyNTA3LDExODI1NTkuMDk5NzA5MTM4NywzMTM5MjM5LjIzNTIzMDYxNDQsMjgwNTkwNy42ODM0MDkxOTQ1LDY0NDEyMDYuNzI4MDYzNTM1LDQ2NjYzOTkuOTQzNjQxMzM5LDEzMTIzNjQuNzI3NTc2NTc1LDM4MTk1NzcuMTE3ODIxNDY1LDI1NDM3MzEuNTI1MTI1MjEzNCwzNzU3ODg5LjQ5ODg5MzgzMSw0MTczMDQxLjAzOTA2MjE0NjYsMzcxMjI5OC41MDcxOTcwMzIsODQ2MjEwNC4xMjUyMDczODMsNTM5NjQzLjAwNDI3MDQxMDQsNjc1Ni43OTU1MjExNjczNzI1CisyNSxGcmkgMTggRmViIDExLDI5NzI2NS45Mzk1NjE4MTk3LDI2NTQxNS4wODE5OTY2NDQ1LDE1NDQ5My4xODEwMTc1MTg2LDMxOTM3Ny45ODYzOTU2Mzg4LDMyMTkyOS44MDI2MzQ2NTA0LDUyMDQxMjEuNDUwMDc1NTQzLDU2NTUzMTMuMzg4NDQzMDUzLDQ2MzUwNjkuNDUxMDYxMjkxLDQwMjYwMjUuNTY1MjU2NjU1Nyw1MDMzNTQ1LjY4MTQzODc2NCwxMDIyMTY1LjEwMzQxNzIxMDYsNTk3NTM4OC41MTUzMTkzMDUsMTE4MjU2My44Mjk5NTExNDY2LDMxMzkyNTEuNzkyMjAyNDQ1LDI4MDU5MTguOTA3MDUzMjM2NCw2NDQxMjMyLjQ5MjkyMDk5ODUsNDY2NjQxOC42MDkyNjMyNDcsMTMxMjM2OS45NzcwNDE3MSwzODE5NTkyLjM5NjE0ODA1MjUsMjU0Mzc0MS43MDAwNjMzNzk1LDM3NTc5MDQuNTMwNDY5NjUwNCw0MTczMDU3LjczMTI0NjA5NTYsMzcxMjMxMy4zNTY0MDg2Njg3LDg0NjIxMzcuOTczNjY0MDIzLDUzOTY0NS4xNjI4NDQ5ODcxLDY3NTYuODIyNTQ4MzgxNTA1CisyNixTYXQgMTkgRmViIDExLDI5NzI2Ny4xMjg2MjcwMjg3LDI2NTQxNi4xNDM2NTgyNjc4LDE1NDQ5My43OTg5OTA5OTY2NywzMTkzNzkuMjYzOTA5MTQzMDUsMzIxOTMxLjA5MDM1NTQzMjA3LDUyMDQxNDIuMjY2NTg2NzQwNSw1NjU1MzM2LjAwOTcyNDIwNyw0NjM1MDg3Ljk5MTM2MTcxNiw0MDI2MDQxLjY2OTM3ODU2NSw1MDMzNTY1LjgxNTY0NjA1NSwxMDIyMTY5LjE5MjA4MjYxMjksNTk3NTQxMi40MTY5MDI1MjgsMTE4MjU2OC41NjAyMTIyMzgsMzEzOTI2NC4zNDkyMjQ5MzUzLDI4MDU5MzAuMTMwNzQyNTU4Nyw2NDQxMjU4LjI1Nzg4MjQwNyw0NjY2NDM3LjI3NDk2MDQ1OCwxMzEyMzc1LjIyNjUyODAyMzEsMzgxOTYwNy42NzQ1MzYyNzksMjU0Mzc1MS44NzUwNDI1OTQ1LDM3NTc5MTkuNTYyMTA2MTEyNSw0MTczMDc0LjQyMzQ5NzM4NywzNzEyMzI4LjIwNTY4MDIxMiw4NDYyMTcxLjgyMjI1NzIxNyw1Mzk2NDcuMzIxNDI4MjcyMiw2NzU2Ljg0OTU3NTcwNDY3NQorMjcsU3VuIDIwIEZlYiAxMSwyOTcyNjguMzE3Njk3MDQsMjY1NDE3LjIwNTMyNDE3ODg1LDE1NDQ5NC40MTY5NjY5NzA1MiwzMTkzODAuNTQxNDI3ODA2OCwzMjE5MzIuMzc4MDgxNDE0NDQsNTIwNDE2My4wODMxODIwMTEsNTY1NTM1OC42MzEwOTY3MjIsNDYzNTEwNi41MzE3MzcwMTksNDAyNjA1Ny43NzM1NjU1MTQsNTAzMzU4NS45NDk5MzQ2NjIsMTAyMjE3My4yODA3NjQ1MjgsNTk3NTQzNi4zMTg1ODIyODIsMTE4MjU3My4yOTA0OTI0MzMxLDMxMzkyNzYuOTA2Mjk4MTM4NywyODA1OTQxLjM1NDQ3NzIwOTUsNjQ0MTI4NC4wMjI5NDc4Nyw0NjY2NDU1Ljk0MDczMzA1NSwxMzEyMzgwLjQ3NjAzNTUzNzIsMzgxOTYyMi45NTI5ODYyMDksMjU0Mzc2Mi4wNTAwNjI5MDI3LDM3NTc5MzQuNTkzODAzMjgyNCw0MTczMDkxLjExNTgxNjA5MzUsMzcxMjM0My4wNTUwMTE3MjY1LDg0NjIyMDUuNjcwOTg3MTE0LDUzOTY0OS40ODAwMjAyNzUsNjc1Ni44NzY2MDMxMzY5OTkKKzI4LE1vbiAyMSBGZWIgMTEsMjk3MjY5LjUwNjc3MTc5OTEsMjY1NDE4LjI2Njk5NDMyOSwxNTQ0OTUuMDM0OTQ1NDExOSwzMTkzODEuODE4OTUxNTcxNTMsMzIxOTMzLjY2NTgxMjUzODUzLDUyMDQxODMuODk5ODYwNCw1NjU1MzgxLjI1MjU1OTU2LDQ2MzUxMjUuMDcyMTg2MzUzLDQwMjYwNzMuODc3ODE2NzY1Niw1MDMzNjA2LjA4NDMwMzY2NCwxMDIyMTc3LjM2OTQ2Mjc2ODgsNTk3NTQ2MC4yMjAzNTc0NzQsMTE4MjU3OC4wMjA3OTE1MTYsMzEzOTI4OS40NjM0MjE0ODEsMjgwNTk1Mi41NzgyNTY2NzY0LDY0NDEzMDkuNzg4MTE2MjEyLDQ2NjY0NzQuNjA2NTgwMTgxLDEzMTIzODUuNzI1NTY0MDExOCwzODE5NjM4LjIzMTQ5NzE0NTMsMjU0Mzc3Mi4yMjUxMjM4Mzg1LDM3NTc5NDkuNjI1NTYwNDcyNyw0MTczMTA3LjgwODIwMTQ1MDQsMzcxMjM1Ny45MDQ0MDI1MzMsODQ2MjIzOS41MTk4NTIxNjcsNTM5NjUxLjYzODYyMDg5NjgsNjc1Ni45MDM2MzA2NzcyNDA1CisyOSxUdWUgMjIgRmViIDExLDI5NzI3MC42OTU4NTEzMzA0NywyNjU0MTkuMzI4NjY4NzQwMDUsMTU0NDk1LjY1MjkyNjMzMzQ4LDMxOTM4My4wOTY0ODA0NjM1LDMyMTkzNC45NTM1NDg4MzA4LDUyMDQyMDQuNzE2NjIyMzMzLDU2NTU0MDMuODc0MTEzMTg5LDQ2MzUxNDMuNjEyNzEwMDk2LDQwMjYwODkuOTgyMTMyNjQ5NSw1MDMzNjI2LjIxODc1MzQ3MywxMDIyMTgxLjQ1ODE3NzQxOTEsNTk3NTQ4NC4xMjIyMjg1OTMsMTE4MjU4Mi43NTExMDk1ODMzLDMxMzkzMDIuMDIwNTk1MjIwNCwyODA1OTYzLjgwMjA4MTE4OCw2NDQxMzM1LjU1MzM4Nzk1OSw0NjY2NDkzLjI3MjUwMjIyMSwxMzEyMzkwLjk3NTExMzU1NSwzODE5NjUzLjUxMDA2OTM5OTYsMjU0Mzc4Mi40MDAyMjU2MTEsMzc1Nzk2NC42NTczNzc5OTEsNDE3MzEyNC41MDA2NTM4LDM3MTIzNzIuNzUzODUyOTM2LDg0NjIyNzMuMzY4ODUzMDY4LDUzOTY1My43OTcyMzAxODIxLDY3NTYuOTMwNjU4MzI1OTU0CiszMCxXZWQgMjMgRmViIDExLDI5NzI3MS44ODQ5MzU1NzA3NiwyNjU0MjAuMzkwMzQ3MzU1NTcsMTU0NDk2LjI3MDkwOTcwMjM4LDMxOTM4NC4zNzQwMTQ0MTQ3MywzMjE5MzYuMjQxMjkwMjIyOCw1MjA0MjI1LjUzMzQ2NjcwNiw1NjU1NDI2LjQ5NTc1NjQwMyw0NjM1MTYyLjE1MzMwNzI2NCw0MDI2MTA2LjA4NjUxMjMxLDUwMzM2NDYuMzUzMjgzMDE4LDEwMjIxODUuNTQ2OTA4MjYxNiw1OTc1NTA4LjAyNDE5NDM2NywxMTgyNTg3LjQ4MTQ0NjM4MzgsMzEzOTMxNC41Nzc4MTg2ODg1LDI4MDU5NzUuMDI1OTUwMTQ4Miw2NDQxMzYxLjMxODc2MTc0MSw0NjY2NTExLjkzODQ5ODE4MSwxMzEyMzk2LjIyNDY4Mzg4NzYsMzgxOTY2OC43ODg3MDIxNiwyNTQzNzkyLjU3NTM2NzY3OSwzNzU3OTc5LjY4OTI1NTAzODMsNDE3MzE0MS4xOTMxNzIyNTU1LDM3MTIzODcuNjAzMzYyMTQ1NCw4NDYyMzA3LjIxNzk4ODAxOCw1Mzk2NTUuOTU1ODQ4MDE1OCw2NzU2Ljk1NzY4NjA4MTcwMworMzEsVGh1IDI0IEZlYiAxMSwyOTcyNzMuMDc0MDI0MjU4NTMsMjY1NDIxLjQ1MjAyOTk0MTk1LDE1NDQ5Ni44ODg4OTUzODI2NCwzMTkzODUuNjUxNTUzMTQ0MTUsMzIxOTM3LjUyOTAzNjQzMTE3LDUyMDQyNDYuMzUwMzg4OTM4LDU2NTU0NDkuMTE3NDg0MjI2LDQ2MzUxODAuNjkzOTczNzc3LDQwMjYxMjIuMTkwOTUyMjAzNyw1MDMzNjY2LjQ4Nzg4Nzg3LDEwMjIxODkuNjM1NjU0Mzk2Nyw1OTc1NTMxLjkyNjI0OTU0LDExODI1OTIuMjExODAwODc2MywzMTM5MzI3LjEzNTA4OTEyMywyODA1OTg2LjI0OTg2MTA4OCw2NDQxMzg3LjA4NDIzMTg5LDQ2NjY1MzAuNjA0NTYzOTU2LDEzMTI0MDEuNDc0MjczODU0NCwzODE5Njg0LjA2NzM5MjA2NTcsMjU0MzgwMi43NTA1NDc4MDQsMzc1Nzk5NC43MjExODgzMDc3LDQxNzMxNTcuODg1NzUzMTQzNiwzNzEyNDAyLjQ1MjkyNjg5NSw4NDYyMzQxLjA2NzI0OTU2OCw1Mzk2NTguMTE0NDczOTIzMiw2NzU2Ljk4NDcxMzkzODU0MQorMzIsRnJpIDI1IEZlYiAxMSwyOTcyNzQuMjYzMTE3NjYyNiwyNjU0MjIuNTEzNzE2NzM5MywxNTQ0OTcuNTA2ODgzNTE0MDgsMzE5Mzg2LjkyOTA5Njk0MDgsMzIxOTM4LjgxNjc4Nzc0NzI2LDUyMDQyNjcuMTY3MzkzNzM3LDU2NTU0NzEuNzM5MzAxNzc1LDQ2MzUxOTkuMjM0NzEzODI5LDQwMjYxMzguMjk1NDU1OTc0LDUwMzM2ODYuNjIyNTcyNTgyLDEwMjIxOTMuNzI0NDE2NzQ5Myw1OTc1NTU1LjgyODM5OTUxOCwxMTgyNTk2Ljk0MjE3NDEzMTMsMzEzOTMzOS42OTI0MDkzNjQ1LDI4MDU5OTcuNDczODE2NTQ1Nyw2NDQxNDEyLjg0OTgwNDIzNSw0NjY2NTQ5LjI3MDcwMzc2NywxMzEyNDA2LjcyMzg4NDY0MywzODE5Njk5LjM0NjE0MjU3MiwyNTQzODEyLjkyNTc2ODI4NzQsMzc1ODAwOS43NTMxODExOTk1LDQxNzMxNzQuNTc4NDAwMjQxLDM3MTI0MTcuMzAyNTUwNTQzNiw4NDYyMzc0LjkxNjY0NTM3OCw1Mzk2NjAuMjczMTA4MzkyNiw2NzU3LjAxMTc0MTkwMjU4MgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Jbm9jdWxhdGlvblRlc3RfRkRfUmVmZXJlbmNlL0h1bWFuUG9wdWxhdGlvbk1vZGVsL2h1bWFuL0RlYXRoc18wLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvSW5vY3VsYXRpb25UZXN0X0ZEX1JlZmVyZW5jZS9IdW1hblBvcHVsYXRpb25Nb2RlbC9odW1hbi9EZWF0aHNfMC5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmMyNDQwMQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvSW5vY3VsYXRpb25UZXN0X0ZEX1JlZmVyZW5jZS9IdW1hblBvcHVsYXRpb25Nb2RlbC9odW1hbi9EZWF0aHNfMC5jc3YKQEAgLTAsMCArMSBAQAoraXRlcmF0aW9uLHRpbWUsCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0lub2N1bGF0aW9uVGVzdF9GRF9SZWZlcmVuY2UvSHVtYW5Qb3B1bGF0aW9uTW9kZWwvaHVtYW4vRGVhdGhzXzEuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Jbm9jdWxhdGlvblRlc3RfRkRfUmVmZXJlbmNlL0h1bWFuUG9wdWxhdGlvbk1vZGVsL2h1bWFuL0RlYXRoc18xLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYzI0NDAxCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Jbm9jdWxhdGlvblRlc3RfRkRfUmVmZXJlbmNlL0h1bWFuUG9wdWxhdGlvbk1vZGVsL2h1bWFuL0RlYXRoc18xLmNzdgpAQCAtMCwwICsxIEBACitpdGVyYXRpb24sdGltZSwKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvSW5vY3VsYXRpb25UZXN0X0ZEX1JlZmVyZW5jZS9IdW1hblBvcHVsYXRpb25Nb2RlbC9odW1hbi9EZWF0aHNfMi5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0lub2N1bGF0aW9uVGVzdF9GRF9SZWZlcmVuY2UvSHVtYW5Qb3B1bGF0aW9uTW9kZWwvaHVtYW4vRGVhdGhzXzIuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhhZDBiNWEKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0lub2N1bGF0aW9uVGVzdF9GRF9SZWZlcmVuY2UvSHVtYW5Qb3B1bGF0aW9uTW9kZWwvaHVtYW4vRGVhdGhzXzIuY3N2CkBAIC0wLDAgKzEsMzMgQEAKK2l0ZXJhdGlvbix0aW1lLEVHLUZSRy1HMjEwMDAxLEVHLUZSRy1HMjEwMDAyLEVHLUZSRy1HMjEwMDAzLEVHLUZSRy1HMjEwMDA0LEVHLUZSRy1HMjEwMDA1LEVHLUxPRS1HMjQwMDAxLEVHLUxPRS1HMjQwMDAyLEVHLUxPRS1HMjQwMDAzLEVHLUxPRS1HMjQwMDA0LEVHLUxPRS1HMjQwMDA1LEVHLUxPRS1HMjQwMDA2LEVHLUxPRS1HMjQwMDA3LEVHLUxPRS1HMjQwMDA4LEVHLUxPRS1HMjQwMDA5LEVHLVVQRS1HMjkwMDAxLEVHLVVQRS1HMjkwMDAyLEVHLVVQRS1HMjkwMDAzLEVHLVVQRS1HMjkwMDA0LEVHLVVQRS1HMjkwMDA1LEVHLVVQRS1HMjkwMDA2LEVHLVVQRS1HMjkwMDA3LEVHLVVQRS1HMjkwMDA4LEVHLVVSRy1HMzAwMDAxLEVHLVVSRy1HMzAwMDAyLEVHLVVSRy1HMzAwMDAzLEVHLVVSRy1HMzAwMDA0CisxLFR1ZSAyNSBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMixXZWQgMjYgSmFuIDExLDEwLjQwMzMwOTEyMDg4MzA1Myw5LjI4ODYzNjExOTY1MDAxMSw1LjQwNjc0MjI2NDM5NDM1MywxMS4xNzcxNTY0NjcyOTE5NiwxMS4yNjY0NjE0NjE5ODIwOTUsMTgyLjEyNjc2NTc3NTk4NjI5LDE5Ny45MTY5Njc2ODk0ODY5NCwxNjIuMjExODU3NzI5OTE4MTQsMTQwLjg5NzM2ODAxMjIyOTY2LDE3Ni4xNTcxODY5Nzk3MTkzNCwzNS43NzIzNDQzMTYwMTMzNzQsMjA5LjExODUyMTczMTMyNTEzLDQxLjM4NTc2MDgzMTgzODI3LDEwOS44NjMyNjUzNjY3MjIxLDk4LjE5NzczNDMyOTE3ODM3LDIyNS40MjE0OTU3ODk2MjM3NSwxNjMuMzA4OTcyOTM5MDY0NDYsNDUuOTI4NTM5ODUzMDg5NDEsMTMzLjY3MjkwMDY3NDMxMDE0LDg5LjAyMjQxMjk1NjA0Nzk2LDEzMS41MTQwMzI2MzY0NjUzLDE0Ni4wNDI5OTk4MTg0MDI0OCwxMjkuOTE4NDk0NzIzMDQxNjUsMjk2LjE0NjM5NzcxMTYwOTA0LDE4Ljg4NTc2NzU4MjE4OTM1MiwwLjIzNjQ2NjA4NzQwMDk5OTg2CiszLFRodSAyNyBKYW4gMTEsMjAuODA2NjU5ODU1MDAyNTksMTguNTc3MzA5MzkzODQ0NSwxMC44MTM1MDYxNTU3NTc3NjQsMjIuMzU0MzU3NjQzMjA5Nzg4LDIyLjUzMjk2Nzk4OTgxMDA0LDM2NC4yNTQyNjAwNTkwMzU3LDM5NS44MzQ3MjcwNDY4NDQ2NSwzMjQuNDI0MzY0MzA3MjY3MiwyODEuNzk1Mjk5NjEzOTMxNCwzNTIuMzE1MDc4NTg4MTg2NTcsNzEuNTQ0ODMxNzIxNDA0MDEsNDE4LjIzNzg3OTkzNjczNzIsODIuNzcxNjg3MjA2NzE5ODYsMjE5LjcyNjk3MDE4NjUwNTcsMTk2LjM5NTg2MTQ0OTI5NDA3LDQ1MC44NDM4OTMyNjUyMzA3LDMyNi42MTg1OTkxMTQwMjA2NCw5MS44NTcyNjM0MjAzMzgyMywyNjcuMzQ2MzM2MDQwMjIyOSwxNzguMDQ1MTgyMDAxNzQ3NzUsMjYzLjAyODU5MTMyOTA2MTEsMjkyLjA4NjU4MzgwODgwNDIsMjU5LjgzNzUwOTEyMDA2MjIsNTkyLjI5Mzk4MDAwODgwODgsMzcuNzcxNjEwNzA3NDQ5MDMsMC40NzI5MzMxMjA2NjYzNDkzCis0LEZyaSAyOCBKYW4gMTEsMzEuMjEwMDUyMjAyNTI1MDYzLDI3Ljg2NjAxOTgyMjczMjA5LDE2LjIyMDI5MTY3NDE3Njc0MiwzMy41MzE2MDM1Mjc5MzIzMiwzMy43OTk1MTk1ODM2NjQwOSw1NDYuMzgyNDgyODUyMDYyMSw1OTMuNzUzMjc4MDc1MjM5OCw0ODYuNjM3NTE5NzM0NjQyNSw0MjIuNjkzNzk0ODA3MzU5NSw1MjguNDczNjc0ODI4MjIwMywxMDcuMzE3NDYyMjE2NzQ0MjcsNjI3LjM1ODA3NDYxOTU4MjEsMTI0LjE1Nzc3OTEyNTMwNjk0LDMyOS41OTExMTQ0NjExMDg1MywyOTQuNTk0MzgxMzYxOTE4MjQsNjc2LjI2NzE5MjQzMDQyNzUsNDg5LjkyODg3ODUyNzQ4MTUsMTM3Ljc4NjE3MDcwMjQ4MTMxLDQwMS4wMjAzMDYwOTk4NzcyLDI2Ny4wNjgzMDcxMzg1MjM3LDM5NC41NDM2NzYwNzk4OTE3LDQzOC4xMzA3NTE5NzM1NDE5LDM4OS43NTcwNDMxOTMxNDAzLDg4OC40NDI3NDY4OTYzMzc5LDU2LjY1NzUyOTM3NjA4MTIxLDAuNzA5NDAxMDk5Nzk5ODMxOAorNSxTYXQgMjkgSmFuIDExLDQxLjYxMzQ4NjE2MzYxNjkyNiwzNy4xNTQ3Njc0MDY0NjEzOSwyMS42MjcwOTg4MTk3Mzc3OTIsNDQuNzA4ODk0MTIxNjM4Mzk0LDQ1LjA2NjExNjI0MzcyNDUyLDcyOC41MTE0MzQxNTc5Nzk4LDc5MS42NzI2MjA3Nzc4MzksNjQ4Ljg1MTMyNDAxNDYzOTcsNTYzLjU5Mjg1MzU5NDc2ODQsNzA0LjYzMjk3NTcwMjYzOSwxNDMuMDkwMjM1ODAyNjA2NTEsODM2LjQ3OTEwNTc4MzIwNTgsMTY1LjU0NDAzNjU4ODI2MTcyLDQzOS40NTU2OTgxOTIyODg1LDM5Mi43OTMyOTQwNjg2MjIwNiw5MDEuNjkxMzkzMjg4ODIxLDY1My4yMzk4MTExODIwNjAxLDE4My43MTUyNjE3MDAyNTM1NCw1MzQuNjk0ODEwODU1NDExNywzNTYuMDkxNzg4MzY3ODAwMjMsNTI2LjA1OTI4Njg5MTA2MTMsNTg0LjE3NTUwNDMxNDk1MjMsNTE5LjY3NzA5Njk0NDM1NDcsMTE4NC41OTI2OTgzNzg5MzQ1LDc1LjU0MzUyMzU4ODM4ODA3LDAuOTQ1ODcwMDI0ODA1MjMwOQorNixTdW4gMzAgSmFuIDExLDUyLjAxNjk2MTczODQ0NDYzNSw0Ni40NDM1NTIxNDUxODEwMiwyNy4wMzM5Mjc1OTI1Mjc0MjYsNTUuODg2MjI5NDI0NTA2ODQ0LDU2LjMzMjc1Nzk3MDE3MTU5LDkxMC42NDExMTM5Nzk3MDI3LDk4OS41OTI3NTUxNTc4MDksODExLjA2NTc3NzE0OTg1MzgsNzA0LjQ5MjQ3NTk3ODQxMjQsODgwLjc5Mjk4MTIxNDI2MTEsMTc4Ljg2MzE1MjQ3OTU2MzEsMTA0NS42MDA5NzM0MzA5NTQxLDIwNi45MzA0NTk1OTYyNDYzNSw1NDkuMzIwNzIxMzgxODAzMyw0OTAuOTkyNTk5NTcwOTc2NywxMTI3LjExNjQ5NTg0NDAxOCw4MTYuNTUxMzk3MDgwMzY5MywyMjkuNjQ0NTM2NDE0Mzg5NzMsNjY4LjM2OTg1MDMwODk2NTIsNDQ1LjExNTYyNTY5MTAwMTcsNjU3LjU3NTQyMzc2NDY3NDIsNzMwLjIyMDg0MDgzNTM3Miw2NDkuNTk3NjcwMzc1Nzg0MSwxNDgwLjc0MzgzNDQ2MTMzNyw5NC40Mjk1OTMzNDQ2NzE3NywxLjE4MjMzOTg5NTY4NjMzCis3LE1vbiAzMSBKYW4gMTEsNjIuNDIwNDc4OTI3MTc0NjQsNTUuNzMyMzc0MDM5MDM5NjEsMzIuNDQwNzc3OTkyNjMyMTUsNjcuMDYzNjA5NDM2NzE2NSw2Ny41OTk0NDQ3NjMxODU1NywxMDkyLjc3MTUyMjMyMDE0NDksMTE4Ny41MTM2ODEyMTgzMTY2LDk3My4yODA4NzkxNDI4ODA2LDg0NS4zOTI2NjE5NjA1NDU5LDEwNTYuOTUzNjkxMzY1OTA1MywyMTQuNjM2MjEyMjQ4MTg2MzgsMTI1NC43MjM2Nzc1NjYxNzMsMjQ4LjMxNzA0ODE0OTkyMyw2NTkuMTg2MTg0MDMxNDEwOSw1ODkuMTkyMjk3ODcwNTUzNCwxMzUyLjU0MjUwMDA5OTYyNTIsOTc5Ljg2MzYzNjIyNTAyMiwyNzUuNTczOTk0ODQ1NjI0OCw4MDIuMDQ1NDI0NDYyNjc2Niw1MzQuMTM5ODE5MTA5NTUyNSw3ODkuMDkyMDg2NzAyODM0NCw4NzYuMjY2NzYxNTM3MTM3OCw3NzkuNTE4NzYzNDg5NTA3MywxNzc2Ljg5NjE1NTE0ODI4NCwxMTMuMzE1NzM4NjQ1MjM0NSwxLjQxODgxMDcxMjQ0NjkxMjcKKzgsVHVlIDEgRmViIDExLDcyLjgyNDAzNzcyOTk3MzQxLDY1LjAyMTIzMzA4ODE4NTc4LDM3Ljg0NzY1MDAyMDEzODQ3NCw3OC4yNDEwMzQxNTg0NDYyMSw3OC44NjYxNzY2MjI5NDY3MiwxMjc0LjkwMjY1OTE4MjIyMDUsMTM4NS40MzUzOTg5NjI1MjgzLDExMzUuNDk2NjI5OTk2MzE1Myw5ODYuMjkzNDExNTQzNDIzNCwxMjMzLjExNTEwNjE2MDM5LDI1MC40MDk0MTUxMDkwNDg3NSwxNDYzLjg0NzIxODE5MjIwODQsMjg5LjcwMzgwMjI0OTk1Mzg3LDc2OS4wNTIwODYxNDI4NjkxLDY4Ny4zOTIzODg5Njg5MjMyLDE1NzcuOTY5NDA2MDU5MjQ5NCwxMTQzLjE3NjUyODYxODYzMTQsMzIxLjUwMzYzNjk5NDY5MzYsOTM1LjcyMTUzMzMxODY4NDYsNjIzLjE2NDM2ODYyNDg3NjksOTIwLjYwOTI3NTcwNzY0NjUsMTAyMi4zMTMyNjY0MjI1ODY0LDkwOS40NDAzNzYyODc2MDI4LDIwNzMuMDQ5NjYwNDQ0NTEzNCwxMzIuMjAxOTU5NDkwMzc4NDQsMS42NTUyODI0NzUwOTA3NjI0Cis5LFdlZCAyIEZlYiAxMSw4My4yMjc2MzgxNDcwMDczOCw3NC4zMTAxMjkyOTI3NjgxNSw0My4yNTQ1NDM2NzUxMzI5MSw4OS40MTg1MDM1ODk4NzQ4LDkwLjEzMjk1MzU0OTYzNTMyLDE0NTcuMDM0NTI0NTY4ODQzNiwxNTgzLjM1NzkwODM5MzYxMSwxMjk3LjcxMzAyOTcxMjc1MzUsMTEyNy4xOTQ3MjQ3MjkyOTkyLDE0MDkuMjc3MjI1NjAwNTM0LDI4Ni4xODI3NjEwNjI3MjI1MywxNjcyLjk3MTU5NTMxMjQwNjQsMzMxLjA5MDcyMTg5NzAwMTEsODc4LjkxODQyNzcxNzkzNTksNzg1LjU5Mjg3Mjg2NzY1NzQsMTgwMy4zOTcyMTM3MjY0OTc1LDEzMDYuNDkwMDc0MjYzODEwNCwzNjcuNDMzNDYyODYyMzMxLDEwNjkuMzk4MTc2ODc5MTI4LDcxMi4xODkyNzQyMzgzOTk0LDEwNTIuMTI2OTkwNzgxMjE0NSwxMTY4LjM2MDM1NTQ5NDA1NDYsMTAzOS4zNjI1MDg3NzIxNDk2LDIzNjkuMjA0MzUwMzU0NzY0MywxNTEuMDg4MjU1ODgwNDA1NzcsMS44OTE3NTUxODM2MjE2NjI2CisxMCxUaHUgMyBGZWIgMTEsOTMuNjMxMjgwMTc4NDQzMDMsODMuNTk5MDYyNjUyOTM1MzMsNDguNjYxNDU4OTU3NzAxOTYsMTAwLjU5NjAxNzczMTE4MTEyLDEwMS4zOTk3NzU1NDM0MzE2MiwxNjM5LjE2NzExODQ4MjkyODEsMTc4MS4yODEyMDk1MTQ3MzE1LDE0NTkuOTMwMDc4Mjk0NzkwNSwxMjY4LjA5NjYwMTUyMDQyNzgsMTU4NS40NDAwNDk2ODkxNTU4LDMyMS45NTYyNTAxMDk3ODAxNywxODgyLjA5NjgwODkzMDExMjcsMzcyLjQ3NzgwNzA5MTcyNjk2LDk4OC43ODUyMDg3NTgzNjg5LDg4My43OTM3NDk1NjgzMjczLDIwMjguODI1OTIzMTA0OTc2MywxNDY5LjgwNDI3MzE2MzE3MTcsNDEzLjM2MzQ3MjQ0OTI3MTg1LDEyMDMuMDc1MzU1MTQ2MTQ1Nyw4MDEuMjE0NTM1OTUxNTQ0MywxMTgzLjY0NTIzMTkyNTY0MywxMzE0LjQwODAyODc1Mzg3OSwxMTY5LjI4NTE2MDk0NTIyNjQsMjY2NS4zNjAyMjQ4ODM3NzQ3LDE2OS45NzQ2Mjc4MTU2MTg2NSwyLjEyODIyODgzODA0MzM5NworMTEsRnJpIDQgRmViIDExLDEwNC4wMzQ5NjM4MjQ0NDY4LDkyLjg4ODAzMzE2ODgzNTk2LDU0LjA2ODM5NTg2NzkzMjE0NiwxMTEuNzczNTc2NTgyNTQ0MDEsMTEyLjY2NjY0MjYwNDUxNTg5LDE4MjEuMzAwNDQwOTI3Mzg4MywxOTc5LjIwNTMwMjMyOTA1NjQsMTYyMi4xNDc3NzU3NDUwMjE4LDE0MDguOTk5MDQxOTE5MDYzNSwxNzYxLjYwMzU3ODQyOTA3MzksMzU3LjcyOTg4MjI1MDc5NCwyMDkxLjIyMjg1OTA0ODY3MzQsNDEzLjg2NTA1NzgzNDc5MzYsMTA5OC42NTI0MjkyNjU5MjYsOTgxLjk5NTAxOTA3MjUwNCwyMjU0LjI1NTUzNDE5ODI5MjUsMTYzMy4xMTkxMjUzMTkzMjg4LDQ1OS4yOTM2NjU3NTYyNTExLDEzMzYuNzUzMDY4MTIxODc2NCw4OTAuMjQwMTUzNzY1NzM2MiwxMzE1LjE2Mzk5OTE0MzAzNTksMTQ2MC40NTYyODYyMDQzOTY1LDEyOTkuMjA4MzMyODA4OTExOCwyOTYxLjUxNzI4NDAzNjI4MywxODguODYxMDc1Mjk2MzE5MjYsMi4zNjQ3MDM0MzgzNTk3NDkKKzEyLFNhdCA1IEZlYiAxMSwxMTQuNDM4Njg5MDg1MTg1MTYsMTAyLjE3NzA0MDg0MDYxODY0LDU5LjQ3NTM1NDQwNTkwOTk3LDEyMi45NTExODAxNDQxNDIzLDEyMy45MzM1NTQ3MzMwNjgzOSwyMDAzLjQzNDQ5MTkwNTEzODQsMjE3Ny4xMzAxODY4Mzk3NTI3LDE3ODQuMzY2MTIyMDY2MDQyOSwxNTQ5LjkwMjA0NTkyNzQ2MSwxOTM3Ljc2NzgxMTgyMzEwNywzOTMuNTAzNjU3NDg2MzM2MzUsMjMwMC4zNDk3NDU2NzE0MzUsNDU1LjI1MjQ3NDEyNjg2MzIsMTIwOC41MjAwODkyNDIzNjUyLDEwODAuMTk2NjgxMzgxNzU4NywyNDc5LjY4NjA0NzAxMDA1MzIsMTc5Ni40MzQ2MzA3MzQ4OTQ0LDUwNS4yMjQwNDI3ODQwMDM1MywxNDcwLjQzMTMxNTgwODQ1OSw5NzkuMjY2MTI3NjgyMzk5MiwxNDQ2LjY4MzI5MjQzNTQ5NzgsMTYwNi41MDUxMjc4NDc5NDM5LDE0MjkuMTMyMDI0MzY1Mjg0NywzMjU3LjY3NTUyNzgxNzAyOCwyMDcuNzQ3NTk4MzIyODA5OCwyLjYwMTE3ODk4NDU3NDUwMjQKKzEzLFN1biA2IEZlYiAxMSwxMjQuODQyNDU1OTYwODI0NTUsMTExLjQ2NjA4NTY2ODQzMjAyLDY0Ljg4MjMzNDU3MTcyMTk0LDEzNC4xMjg4Mjg0MTYxNTQ4NSwxMzUuMjAwNTExOTI5MjY5NDIsMjE4NS41NjkyNzE0MTkwOTIzLDIzNzUuMDU1ODYzMDQ5OTg3LDE5NDYuNTg1MTE3MjYwNDQ5NCwxNjkwLjgwNTYxMzU0Nzg3NDEsMjExMy45MzI3NDk4NzQwNzM2LDQyOS4yNzc1NzU4MTY5Nzk2NiwyNTA5LjQ3NzQ2ODgwMTc0Myw0OTYuNjQwMDU1OTY4NTk4LDEzMTguMzg4MTg4Njg5NDQ0MiwxMTc4LjM5ODczNjQ5NzY2MjYsMjcwNS4xMTc0NjE1NDM4NjUsMTk1OS43NTA3ODk0MTI0ODE3LDU1MS4xNTQ2MDM1MzMyNjQxLDE2MDQuMTEwMDk4MjA4MDMyNSwxMDY4LjI5MjQ1NzcwMjk1OCwxNTc4LjIwMzExMTgwNTEzMywxNzUyLjU1NDU1MzY4Njg1NzYsMTU1OS4wNTYyMzU2MTY0MjM3LDM1NTMuODM0OTU2MjMwNzQ4NSwyMjYuNjM0MTk2ODk1MzkyNDUsMi44Mzc2NTU0NzY2OTE0NDEKKzE0LE1vbiA3IEZlYiAxMSwxMzUuMjQ2MjY0NDUxNTMxNDYsMTIwLjc1NTE2NzY1MjQyNDcsNzAuMjg5MzM2MzY1NDU0NTksMTQ1LjMwNjUyMTM5ODc2MDQ4LDE0Ni40Njc1MTQxOTMyOTkyMiwyMzY3LjcwNDc3OTQ3MjE2NDMsMjU3Mi45ODIzMzA5NjI5MjYsMjEwOC44MDQ3NjEzMzA4MzY4LDE4MzEuNzA5NzQ0NzgyNTU4LDIyOTAuMDk4MzkyNTg0NzkyMiw0NjUuMDUxNjM3MjQzMjk2MywyNzE4LjYwNjAyODQ0Mjk0Myw1MzguMDI3ODAzMzYwNjYwMiwxNDI4LjI1NjcyNzYwODkyMSwxMjc2LjYwMTE4NDQyMTc4NywyOTMwLjU0OTc3NzgwMzMzNSwyMTIzLjA2NzYwMTM1NDcwMzYsNTk3LjA4NTM0ODAwNDc2NzYsMTczNy43ODk0MTUzMjI3MzU1LDExNTcuMzE5MTQzODI4ODM2OCwxNzA5LjcyMzQ1NzI1NDA0NTYsMTg5OC42MDQ1NjM3MjM0NzQ3LDE2ODguOTgwOTY2NTY0NDA4LDM4NDkuOTk1NTY5MjgyMTgyMywyNDUuNTIwODcxMDE0MzY5NCwzLjA3NDEzMjkxNDcxNDM0NzUKKzE1LFR1ZSA4IEZlYiAxMSwxNDUuNjUwMTE0NTU3NDcyMywxMzAuMDQ0Mjg2NzkyNzQ1Myw3NS42OTYzNTk3ODcxOTQ0MSwxNTYuNDg0MjU5MDkyMTM4MDUsMTU3LjczNDU2MTUyNTMzODA4LDI1NDkuODQxMDE2MDY3MjY4NCwyNzcwLjkwOTU5MDU4MTczNjcsMjI3MS4wMjUwNTQyNzk4MDAzLDE5NzIuNjE0NDM5NjMzNzY2OCwyNDY2LjI2NDczOTk1ODA4Miw1MDAuODI1ODQxNzY1ODU4NiwyOTI3LjczNTQyNDU5ODM4Miw1NzkuNDE1NzE2MzAzNzExOSwxNTM4LjEyNTcwNjAwMjU1MzQsMTM3NC44MDQwMjUxNTU3MDMsMzE1NS45ODI5OTU3OTIwNywyMjg2LjM4NTA2NjU2NDE3MzUsNjQzLjAxNjI3NjE5OTI0OTEsMTg3MS40NjkyNjcxNTQ3MDcsMTI0Ni4zNDYxODYwNjE0NiwxODQxLjI0NDMyODc4NDMzOTgsMjA0NC42NTUxNTc5NjAxMzIsMTgxOC45MDYyMTcyMTEzMTU4LDQxNDYuMTU3MzY2OTc2MDY4LDI2NC40MDc2MjA2ODAwNDI4LDMuMzEwNjExMjk4NjQ3MDA2NAorMTYsV2VkIDkgRmViIDExLDE1Ni4wNTQwMDYyNzg4MTM2LDEzOS4zMzM0NDMwODk1NDI1LDgxLjEwMzQwNDgzNzAyNzkxLDE2Ny42NjIwNDE0OTY0NjYzNywxNjkuMDAxNjUzOTI1NTY2MjcsMjczMS45Nzc5ODEyMDczMTksMjk2OC44Mzc2NDE5MDk1ODU3LDI0MzMuMjQ1OTk2MTA5OTM1NywyMTEzLjUxOTY5ODEwMzc1NDgsMjY0Mi40MzE3OTE5OTY3NjEsNTM2LjYwMDE4OTM4NTIzOTEsMzEzNi44NjU2NTcyNzE0MDUzLDYyMC44MDM3OTQ3OTg0MTUzLDE2NDcuOTk1MTIzODcyMDk5NiwxNDczLjAwNzI1ODcwMDk4MTgsMzM4MS40MTcxMTU1MTM2NzczLDI0NDkuNzAzMTg1MDQzNTA0LDY4OC45NDczODgxMTc0NDMzLDIwMDUuMTQ5NjUzNzA2MDg1NywxMzM1LjM3MzU4NDQwMjI1MjIsMTk3Mi43NjU3MjYzOTgxMjAzLDIxOTAuNzA2MzM2Mzk5MTY2NSwxOTQ4LjgzMTk4NzU1OTIyNjMsNDQ0Mi4zMjAzNDkzMTcxNDUsMjgzLjI5NDQ0NTg5MjcxNDg2LDMuNTQ3MDkwNjI4NDkzMjAxCisxNyxUaHUgMTAgRmViIDExLDE2Ni40NTc5Mzk2MTU3MjE3OCwxNDguNjIyNjM2NTQyOTY0ODcsODYuNTEwNDcxNTE1MDQxNjIsMTc4LjgzOTg2ODYxMTkyNDMyLDE4MC4yNjg3OTEzOTQxNjQwNSwyOTE0LjExNTY3NDg5NTIzLDMxNjYuNzY2NDg0OTQ5NjQwNSwyNTk1LjQ2NzU4NjgyMzgzODIsMjI1NC40MjU1MjAxOTQ3NzY3LDI4MTguNTk5NTQ4NzAzNjQ4NSw1NzIuMzc0NjgwMTAyMDEwMSwzMzQ1Ljk5NjcyNjQ2NTM1OTYsNjYyLjE5MjAzODg0NTQzMjgsMTc1Ny44NjQ5ODEyMTkzMTczLDE1NzEuMjEwODg1MDU5MTk0OSwzNjA2Ljg1MjEzNjk3MTc2MzIsMjYxMy4wMjE5NTY3OTUzMDg2LDczNC44Nzg2ODM3NjAwODUyLDIxMzguODMwNTc0OTc5MDEwNiwxNDI0LjQwMTMzODg1MjYzNzgsMjEwNC4yODc2NTAwOTc0OTEsMjMzNi43NTgwOTkwNDI5MTQ2LDIwNzguNzU4Mjc3NjEwMjE4LDQ3MzguNDg0NTE2MzEwMTUxLDMwMi4xODEzNDY2NTI2ODc4LDMuNzgzNTcwOTA0MjU2NzE1CisxOCxGcmkgMTEgRmViIDExLDE3Ni44NjE5MTQ1NjgzNjMzLDE1Ny45MTE4NjcxNTMxNjEwNCw5MS45MTc1NTk4MjEzMjIwMywxOTAuMDE3NzQwNDM4NjkwNzQsMTkxLjUzNTk3MzkzMTMxMTczLDMwOTYuMjU0MDk3MTMzOTE2LDMzNjQuNjk2MTE5NzA1MDY3MywyNzU3LjY4OTgyNjQyNDEwMzYsMjM5NS4zMzE5MDU5MDkwODczLDI5OTQuNzY4MDEwMDgxNTYyNCw2MDguMTQ5MzEzOTE2NzQzOCwzNTU1LjEyODYzMjE4MzU5MDUsNzAzLjU4MDQ0ODQ0NTQyNjQsMTg2Ny43MzUyNzgwNDU5NjQ0LDE2NjkuNDE0OTA0MjMxOTEzNCwzODMyLjI4ODA2MDE2OTkzNSwyNzc2LjM0MTM4MTgyMjIsNzgwLjgxMDE2MzEyNzkwOTYsMjI3Mi41MTIwMzA5NzU2MjA3LDE1MTMuNDI5NDQ5NDE0MDQxLDIyMzUuODEwMDk5ODg0NTU3LDI0ODIuODEwNDQ1ODkzNzEzLDIyMDguNjg1MDg3MzY2MzcsNTAzNC42NDk4Njc5NTk4MjUsMzIxLjA2ODMyMjk2MDI2MzgsNC4wMjAwNTIxMjU5NDEzMzIKKzE5LFNhdCAxMiBGZWIgMTEsMTg3LjI2NTkzMTEzNjkwNDYsMTY3LjIwMTEzNDkyMDI3OTY2LDk3LjMyNDY2OTc1NTk1NTY3LDIwMS4xOTU2NTY5NzY5NDQ0NiwyMDIuODAzMjAxNTM3MTg5NTUsMzI3OC4zOTMyNDc5MjYyOTA4LDM1NjIuNjI2NTQ2MTc5MDMzLDI5MTkuOTEyNzE0OTEzMzI3NCwyNTM2LjIzODg1NTI0ODk0MDYsMzE3MC45MzcxNzYxMzMzMjIsNjQzLjkyNDA5MDgzMDAxMjksMzc2NC4yNjEzNzQ0Mjk0NDQ1LDc0NC45NjkwMjM1OTkwNTg1LDE5NzcuNjA2MDE0MzUzNzk4NiwxNzY3LjYxOTMxNjIyMDcwODcsNDA1Ny43MjQ4ODUxMTE3OTkzLDI5MzkuNjYxNDYwMTI2NzkyLDgyNi43NDE4MjYyMjE2NTE1LDI0MDYuMTk0MDIxNjk4MDU0NywxNjAyLjQ1NzkxNjA4Nzg4NjgsMjM2Ny4zMzMwNzU3NjE0MjE3LDI2MjguODYzMzc2OTUzODk5LDIzMzguNjEyNDE2ODI5NzYxNSw1MzMwLjgxNjQwNDI3MDkwNiwzMzkuOTU1Mzc0ODE1NzQ1LDQuMjU2NTM0MjkzNTUwODM1NQorMjAsU3VuIDEzIEZlYiAxMSwxOTcuNjY5OTg5MzIxNTEyMjIsMTc2LjQ5MDQzOTg0NDQ2OTM0LDEwMi43MzE4MDEzMTkwMjkwNSwyMTIuMzczNjE4MjI2ODY0MzIsMjE0LjA3MDQ3NDIxMTk3NzgsMzQ2MC41MzMxMjcyNzUyNjg3LDM3NjAuNTU3NzY0Mzc0NzA0NywzMDgyLjEzNjI1MjI5NDEwNTQsMjY3Ny4xNDYzNjgyMTY1OTEzLDMzNDcuMTA3MDQ2ODYxNzQ2LDY3OS42OTkwMTA4NDIzODk2LDM5NzMuMzk0OTUzMjA2MjY3NSw3ODYuMzU3NzY0MzA2OTkxMiwyMDg3LjQ3NzE5MDE0NDU3ODMsMTg2NS44MjQxMjEwMjcxNTIsNDI4My4xNjI2MTE4MDA5NjM1LDMxMDIuOTgyMTkxNzExNjk3LDg3Mi42NzM2NzMwNDIwNDU4LDI1MzkuODc2NTQ3MTQ4NDUxNywxNjkxLjQ4NjczODg3NTU5OTMsMjQ5OC44NTY1Nzc3MzAxOSwyNzc0LjkxNjg5MjIyNTgwOTUsMjQ2OC41NDAyNjYwMDI0NzA2LDU2MjYuOTg0MTI1MjQ4MTMyLDM1OC44NDI1MDIyMTk0MzM2NCw0LjQ5MzAxNzQwNzA4OTAxCisyMSxNb24gMTQgRmViIDExLDIwOC4wNzQwODkxMjIzNTI1OCwxODUuNzc5NzgxOTI1ODc4NzIsMTA4LjEzODk1NDUxMDYyODY4LDIyMy41NTE2MjQxODg2MjkxOCwyMjUuMzM3NzkxOTU1ODU2NzQsMzY0Mi42NzM3MzUxODM3NjQsMzk1OC40ODk3NzQyOTUyNDksMzI0NC4zNjA0Mzg1NjkwMzMsMjgxOC4wNTQ0NDQ4MTQyOTM3LDM1MjMuMjc3NjIyMjY5NjUyNSw3MTUuNDc0MDczOTU0NDQ2Myw0MTgyLjUyOTM2ODUxNzQwNiw4MjcuNzQ2NjcwNTY5ODg2NiwyMTk3LjM0ODgwNTQyMDA2MSwxOTY0LjAyOTMxODY1MjgxNDUsNDUwOC42MDEyNDAyNDEwMzQsMzI2Ni4zMDM1NzY1Nzk1MjgsOTE4LjYwNTcwMzU4OTgyNzQsMjY3My41NTk2MDczMjg5NTAzLDE3ODAuNTE1OTE3Nzc4NjAyNywyNjMwLjM4MDYwNTc5Mjk2NjQsMjkyMC45NzA5OTE3MTE3ODA3LDI1OTguNDY4NjM0ODg2NTc2LDU5MjMuMTUzMDMwODk2MjQyLDM3Ny43Mjk3MDUxNzE2MzE4NSw0LjcyOTUwMTQ2NjU1OTYzOAorMjIsVHVlIDE1IEZlYiAxMSwyMTguNDc4MjQwNTYzOTg1NywxOTUuMDY5MTcwMTE0OTc2MzIsMTEzLjU0NjEzNDU0MDY1NTc0LDIzNC43Mjk2ODU2MzI0NzMzMiwyMzYuNjA1MTY1NjI1MTE0MzUsMzgyNC44MTUyNDcxNDc5MjcsNDE1Ni40MjI3NjY2NTIxNTEsMzQwNi41ODU0MzAwNDQzODU3LDI5NTguOTYzMjIwODA5ODIyNCwzNjk5LjQ0OTA3MjEwMDk0NTYsNzUxLjI0OTMxNDYzNjE3ODMsNDM5MS42NjQ4MjE4NjgwODc1LDg2OS4xMzU3ODIyNjY3OTEyLDIzMDcuMjIwOTY2MDQzNzY1LDIwNjIuMjM1MDAzNzIwMzg1LDQ3MzQuMDQwOTg3NjQ2Njc5LDM0MjkuNjI1NzcyMDkzNzM1LDk2NC41Mzc5NjIxMjE0MzQ0LDI4MDcuMjQzMzMxMDQ1ODc2LDE4NjkuNTQ1NTM4NTc4MzA3NSwyNzYxLjkwNTI4NjY3NTgwNSwzMDY3LjAyNTgxNjEzNzg4NDIsMjcyOC4zOTc2NDg2NzA2ODMzLDYyMTkuMzIzNDA2NTc5OTUyLDM5Ni42MTcwMDE4NzA1NDA4Myw0Ljk2NTk4NjY5OTgxOTg4MworMjMsV2VkIDE2IEZlYiAxMSwyMjguODgyNDMxMzE3MjMyNDMsMjA0LjM1ODU5MzQwMzYwNTIsMTE4Ljk1MzMzNTAwMTQ2Njk0LDI0NS45MDc3ODkzMTIxMTQ4MywyNDcuODcyNTgxODY3NjMxNTQsNDAwNi45NTc0NDczMjU1MTkzLDQzNTQuMzU2NTA2ODg5ODczLDM1NjguODExMDM0NDc5NSwzMDk5Ljg3MjUyOTIyMjc2MDUsMzg3NS42MjExODc1ODgwNTk1LDc4Ny4wMjQ2OTA0OTMwMzE5LDQ2MDAuODAxMDY1NDI3NTc5LDkxMC41MjUwNTAzNTA1NzQxLDI0MTcuMDkzNTQxODE0NDM3MiwyMTYwLjQ0MTA1OTg1MzY3Niw0OTU5LjQ4MTU4Njg2NjE2OSwzNTkyLjk0ODU4NDcxMzQzOSwxMDEwLjQ3MDM5NDIwNTk5MzcsMjk0MC45Mjc1NTk4ODA2Nzk0LDE5NTguNTc1NDk1NzcyMzksMjg5My40MzA0NjQ1MTg2NzYsMzIxMy4wODExOTI0MjU1MDcsMjg1OC4zMjcxNTMzODU2NjcsNjUxNS40OTQ5MDEzMjk5NzIsNDE1LjUwNDM2OTkzNDI0MjMzLDUuMjAyNDcyODI2NjI4ODM5CisyNCxUaHUgMTcgRmViIDExLDIzOS4yODY2NjY1NTM4MzY4NSwyMTMuNjQ4MDU2NDA5Mzc3NzIsMTI0LjM2MDU1ODU4MDg4ODQ4LDI1Ny4wODU5NDA3ODM5OTY2LDI1OS4xNDAwNDYyODQyNDY4Niw0MTg5LjEwMDQyNjI1NjI5MSw0NTUyLjI5MTA5MzM5Nzg2OSwzNzMxLjAzNzMzMjUxMzkyOTQsMzI0MC43ODI0NDAwOTY2OTgzLDQwNTEuNzk0MDU2MzAzMTE4LDgyMi44MDAyMTkzMDgzMzA2LDQ4MDkuOTM4MjAzMTUzOTA2LDk1MS45MTQ0OTUzOTUxMjc5LDI1MjYuOTY2NTg3MzQ3ODQyLDIyNTguNjQ3NTM1ODY5MjI2LDUxODQuOTIzMTQ5OTYyMTQyLDM3NTYuMjcyMDk1NjIzNTk2LDEwNTYuNDAzMDIyNjc1NzI2LDMwNzQuNjEyMzYwMjg1NDg4LDIwNDcuNjA1ODMzNjE2MTA5LDMwMjQuOTU2MjA0NzAwNDc5NywzMzU5LjEzNzE5MzE3NjI2MjQsMjk4OC4yNTcyMTM2MTcyNDYsNjgxMS42Njc2NjIzNjgwNTIsNDM0LjM5MTgxODc1MTMyMTksNS40Mzg5NTk5NjQ1Mzk2ODgKKzI1LEZyaSAxOCBGZWIgMTEsMjQ5LjY5MDk0NTE1ODUwMjkzLDIyMi45Mzc1NTgxMzY0OTczNiwxMjkuNzY3ODA0Njk5Mjg1NzMsMjY4LjI2NDEzODg0OTg2MTYsMjcwLjQwNzU1NzY2NzEyOTMsNDM3MS4yNDQxNjQ0MTUxODEsNDc1MC4yMjY1MDQ5NTgyNzYsMzg5My4yNjQzMDY3NTc2MDgsMzM4MS42OTI5MzgzMjY2MDgzLDQyMjcuOTY3NjU5MzYxMDM0LDg1OC41NzU4OTcyNDcwNjg0LDUwMTkuMDc2MjEyNjI4MzMyLDk5My4zMDQxMTI5NjM2NTUzLDI2MzYuODQwMDkwODY1OTkxLDIzNTYuODU0NDIxMjM5NjYsNTQxMC4zNjU2NTI3NjgwODksMzkxOS41OTYyODczMTY1MjUsMTEwMi4zMzU4NDI2MDY4MjIzLDMyMDguMjk3NzE3OTI5NzgsMjEzNi42MzY1NDI1NjU3Mzc3LDMxNTYuNDgyNDkzMTIyMTM4LDM1MDUuMTkzODAyNzMzNDgsMzExOC4xODc4MTU0MzczOTM1LDcxMDcuODQxNjU3OTQ1NTU2LDQ1My4yNzkzNDYyOTcxMTQsNS42NzU0NDgwODgyMDE4NzMKKzI2LFNhdCAxOSBGZWIgMTEsMjYwLjA5NTI2NTczNzY3MjIsMjMyLjIyNzA5NzM0MDcxOTk1LDEzNS4xNzUwNzI2MzI0MDczNiwyNzkuNDQyMzgyMDEyNDkxODYsMjgxLjY3NTExNDUwNzA5ODMzLDQ1NTMuMzg4NjM3NDA1Njk0LDQ5NDguMTYyNzE1MDU5NDQ0LDQwNTUuNDkxOTM1NDgxNzA5MywzNTIyLjYwNDAwNTAzODgxMiw0NDA0LjE0MTk3MzE2NDk1OCw4OTQuMzUxNzE5NTE3NDE4OCw1MjI4LjIxNTA2NTgzODcyNCwxMDM0LjY5Mzg5NzUxMjM5MzUsMjc0Ni43MTQwMzc2NTIzMjgsMjQ1NS4wNjE3MDI4MTEwNTksNTYzNS44MDkwNjUwODgwMzYsNDA4Mi45MjExMzc5MTY0MzUsMTE0OC4yNjg4NDc4NDY5OTg0LDMzNDEuOTgzNjE0OTA3NjE3NywyMjI1LjY2NzYxMDY5NjQyMywzMjg4LjAwOTMxMjE2NjkwMSwzNjUxLjI1MTAwMTUzNDIwNiwzMjQ4LjExODk0MTQ0MzA4Nyw3NDA0LjAxNjg0ODM5MjY3MSw0NzIuMTY2OTUwMDQxODA2MSw1LjkxMTkzNzE2NTkzOTk1OTUKKzI3LFN1biAyMCBGZWIgMTEsMjcwLjQ5OTYyODMzNjMzMDIsMjQxLjUxNjY3NDA2MjIxMDk0LDE0MC41ODIzNjI0MDM2MzI4OSwyOTAuNjIwNjcwMzIwMjE5MywyOTIuOTQyNzE2ODUyODcxNzQsNDczNS41MzM4NDYwMTUzNzMsNTE0Ni4wOTk3MjQ1NTcxOTgsNDIxNy43MjAyMTkzODc2NiwzNjYzLjUxNTY0MDg0MjU3MDUsNDU4MC4zMTY5OTg0NzY2MTYsOTMwLjEyNzY4NjI3NDA2NjcsNTQzNy4zNTQ3NjM2ODkzNDEsMTA3Ni4wODM4NDkyMjAzMDA5LDI4NTYuNTg4NDI4MTgxOTE5LDI1NTMuMjY5MzgxMDA4MDQ2LDU4NjEuMjUzMzg3ODk2NzQxLDQyNDYuMjQ2NjQ4MTI5NSwxMTk0LjIwMjAzODU5NDg1NjcsMzQ3NS42NzAwNTE3OTcwMjQ0LDIzMTQuNjk5MDM4MzkzMTEwNiwzNDE5LjUzNjY2MjQwMzQ1NSwzNzk3LjMwODc5MDIwOTk1MjMsMzM3OC4wNTA1OTIxOTYxMTQsNzcwMC4xOTMyMzQ5ODk5NzksNDkxLjA1NDYzMDA2NzA2MzMsNi4xNDg0MjcxOTg3NzY0NjUKKzI4LE1vbiAyMSBGZWIgMTEsMjgwLjkwNDAzMjQ3ODY3MjQsMjUwLjgwNjI4Nzg3NjE0NjQsMTQ1Ljk4OTY3Mzc2NTY4MDE1LDMwMS43OTkwMDMyNjE4NDY2LDMwNC4yMTAzNjQxODkxNjgwNSw0OTE3LjY3OTc4MTkxNDQ4OSw1MzQ0LjAzNzUyNDM5OTYzLDQzNzkuOTQ5MTUxMDU2NTYsMzgwNC40Mjc4MzkyOTM4MTg2LDQ3NTYuNDkyNzI3MjM5MzA5LDk2NS45MDM3OTU4ODA5MzI2LDU2NDYuNDk1Mjk2NjE1OTYzLDExMTcuNDczOTY2MTk0NTYzMiwyOTY2LjQ2MzI1NzQzMDA3MDQsMjY1MS40Nzc0NTEzMzk0NTk1LDYwODYuNjk4NjEwODg0MzUyLDQ0MDkuNTcyODEwNDg2NjM4LDEyNDAuMTM1NDEyNzQ5ODE0OCwzNjA5LjM1NzAyMjQ4NDM1MDYsMjQwMy43MzA4MjE1ODQyODI3LDM1NTEuMDY0NTM3ODE2ODksMzk0My4zNjcxNjIwODEzMTQsMzUwNy45ODI3NjE3NTQ1Mzc1LDc5OTYuMzcwODA0MTkyOTYzLDUwOS45NDIzODU1MDkxMjgyNiw2LjM4NDkxODE3NTg5NjQwNAorMjksVHVlIDIyIEZlYiAxMSwyOTEuMzA4NDc4Mzc3OTE4NDUsMjYwLjA5NTkzODk3MjkwMDM0LDE1MS4zOTcwMDY4MjkzNjI0MywzMTIuOTc3MzgxMDY2NDUzODYsMzE1LjQ3ODA1Njc0Njg5NzU1LDUwOTkuODI2NDQ4ODM1Nzk4LDU1NDEuOTc2MTE4NjQzMTIyLDQ1NDIuMTc4NzMzODEzMDAxLDM5NDUuMzQwNjAzMjgwMzAwNSw0OTMyLjY2OTE2MzA2MzQ0MDUsMTAwMS42ODAwNDkwNzExODQsNTg1NS42MzY2Njg5MDQ1NTMsMTE1OC44NjQyNDkyODMzOTcsMzA3Ni4zMzg1Mjc2NDg0NzA1LDI3NDkuNjg1OTE1ODE3ODk5LDYzMTIuMTQ0NzM4NjcwOTY4LDQ1NzIuODk5NjI4MzM0OTMsMTI4Ni4wNjg5NzEyNTMxOTU1LDM3NDMuMDQ0NTI5NzA5MjcyNCwyNDkyLjc2Mjk2MjA5NDQ4NiwzNjgyLjU5Mjk0MTEwMjYzNiw0MDg5LjQyNjEyMDE0MTQ5NiwzNjM3LjkxNTQ1Mjc4MTA4Niw4MjkyLjU0OTU2MjA3MTI1NCw1MjguODMwMjE2NzU1MDcxOCw2LjYyMTQxMDEwMjE0NjIzNworMzAsV2VkIDIzIEZlYiAxMSwzMDEuNzEyOTY1NDgwODAzMDYsMjY5LjM4NTYyNjg1ODQ4NzU3LDE1Ni44MDQzNjEzMDcxNDAxLDMyNC4xNTU4MDMxMzk2MjEyLDMyNi43NDU3OTM5MjY4OTEsNTI4MS45NzM4MzcwOTM0OTYsNTczOS45MTU0OTY3NjIxMjEsNDcwNC40MDg5NTkwMzAyODUsNDA4Ni4yNTM5MjUzMDg4NTg1LDUxMDguODQ2Mjk2NTgwNjc5LDEwMzcuNDU2NDQzOTQyMzg3OCw2MDY0Ljc3ODg2OTQzMzgzOCwxMjAwLjI1NDY5NjI4NTgzODcsMzE4Ni4yMTQyMzI5OTQ0MDgsMjg0Ny44OTQ3NjkyMjEwNDYzLDY1MzcuNTkxNzU5MjY4Mjk2LDQ3MzYuMjI3MDkyOTg5MzMsMTMzMi4wMDI3MTE2NjI0NDIyLDM4NzYuNzMyNTY2MzYyODQyNiwyNTgxLjc5NTQ1NTE4OTM2MDQsMzgxNC4xMjE4NjUyNjY1NTU3LDQyMzUuNDg1NjU2NjIzNjg5LDM3NjcuODQ4NjU4MzY2NDc2Nyw4NTg4LjcyOTQ5Mjg3NTI5Myw1NDcuNzE4MTIyODAwNTE3Miw2Ljg1NzkwMjk2NDk1MDMwNAorMzEsVGh1IDI0IEZlYiAxMSwzMTIuMTE3NDkxNDk4Mzg0NTQsMjc4LjY3NTM0OTQ4OTIxNzQsMTYyLjIxMTczNjAwOTQxODg0LDMzNS4zMzQyNjcwMjIxNDQ3LDMzOC4wMTM1NzMyNTAyOTU1LDU0NjQuMTIxOTA2NjE1OTUzLDU5MzcuODU1NjE1MjEwODI3LDQ4NjYuNjM5NzkxMDE4NDcyLDQyMjcuMTY3Nzc0Mzc5MTc4LDUyODUuMDI0MDg5MDMyODI1LDEwNzMuMjMyOTcyNjIzODkzNiw2MjczLjkyMTg1MjE5MzQ0OSwxMjQxLjY0NTI5ODA5NjE3MDgsMzI5Ni4wOTAzNDkyOTU3MDc3LDI5NDYuMTAzOTg5OTQzMzgxNyw2NzYzLjAzOTYyMzA3ODk3OSw0ODk5LjU1NTE2ODUxODUxMiwxMzc3LjkzNjYyMzg3MjMzMjgsNDAxMC40MjExMDMwMzQyNzcsMjY3MC44MjgyODEyODIxNDc2LDM5NDUuNjUxMjgxMzcyODYyMyw0MzgxLjU0NTczOTM5NTQzMiwzODk3Ljc4MjM0OTkyNTk3MjUsODg4NC45MTA1MzE0NDY3ODksNTY2LjYwNjA5OTQ5MDIwOCw3LjA5NDM5NjcxMjI4MTIwOAorMzIsRnJpIDI1IEZlYiAxMSwzMjIuNTIyMDU4Nzg0MjI5NjcsMjg3Ljk2NTEwODk2NjQ4MTM1LDE2Ny42MTkxMzIxNTkzNzk1MiwzNDYuNTEyNzc1MjQyNjYwNSwzNDkuMjgxMzk3MjY1OTUxLDU2NDYuMjcwNjk4NjA2MTY2LDYxMzUuNzk2NTE4NzY0NDk1LDUwMjguODcxMjY2NDc1MTYsNDM2OC4wODIxODIzNjY4MjYsNTQ2MS4yMDI1ODAyNzIzNjIsMTEwOS4wMDk2NDMyMDg1Njg4LDY0ODMuMDY1NjY0NDkyNzk1LDEyODMuMDM2MDY0MDc3MTk4LDM0MDUuOTY2OTAxNDA3MDEyOCwzMDQ0LjMxMzYwMDIwMDQyNiw2OTg4LjQ4ODM4MTEwMDY4ODUsNTA2Mi44ODM4OTE4NjgyNzQsMTQyMy44NzA3MTgyNzMzOTY1LDQxNDQuMTEwMTY5OTY0NzMzLDI3NTkuODYxNDYwNTEyNjExLDQwNzcuMTgxMjE5MTc0MzA2LDQ1MjcuNjA2NDAxNDk2NDAyLDQwMjcuNzE2NTU2ODUxMzYxNSw5MTgxLjA5Mjc0NDc4MzY4OCw1ODUuNDk0MTUxMDk2NzE4Niw3LjMzMDg5MTM5NzYzNTI2NQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Jbm9jdWxhdGlvblRlc3RfRkRfUmVmZXJlbmNlL0h1bWFuUG9wdWxhdGlvbk1vZGVsL2h1bWFuL0RlbnNpdHlfMC5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0lub2N1bGF0aW9uVGVzdF9GRF9SZWZlcmVuY2UvSHVtYW5Qb3B1bGF0aW9uTW9kZWwvaHVtYW4vRGVuc2l0eV8wLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYzI0NDAxCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Jbm9jdWxhdGlvblRlc3RfRkRfUmVmZXJlbmNlL0h1bWFuUG9wdWxhdGlvbk1vZGVsL2h1bWFuL0RlbnNpdHlfMC5jc3YKQEAgLTAsMCArMSBAQAoraXRlcmF0aW9uLHRpbWUsCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0lub2N1bGF0aW9uVGVzdF9GRF9SZWZlcmVuY2UvSHVtYW5Qb3B1bGF0aW9uTW9kZWwvaHVtYW4vRGVuc2l0eV8xLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvSW5vY3VsYXRpb25UZXN0X0ZEX1JlZmVyZW5jZS9IdW1hblBvcHVsYXRpb25Nb2RlbC9odW1hbi9EZW5zaXR5XzEuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJjMjQ0MDEKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0lub2N1bGF0aW9uVGVzdF9GRF9SZWZlcmVuY2UvSHVtYW5Qb3B1bGF0aW9uTW9kZWwvaHVtYW4vRGVuc2l0eV8xLmNzdgpAQCAtMCwwICsxIEBACitpdGVyYXRpb24sdGltZSwKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvSW5vY3VsYXRpb25UZXN0X0ZEX1JlZmVyZW5jZS9IdW1hblBvcHVsYXRpb25Nb2RlbC9odW1hbi9EZW5zaXR5XzIuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Jbm9jdWxhdGlvblRlc3RfRkRfUmVmZXJlbmNlL0h1bWFuUG9wdWxhdGlvbk1vZGVsL2h1bWFuL0RlbnNpdHlfMi5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzM4YmZlMAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvSW5vY3VsYXRpb25UZXN0X0ZEX1JlZmVyZW5jZS9IdW1hblBvcHVsYXRpb25Nb2RlbC9odW1hbi9EZW5zaXR5XzIuY3N2CkBAIC0wLDAgKzEsMzMgQEAKK2l0ZXJhdGlvbix0aW1lLEVHLUZSRy1HMjEwMDAxLEVHLUZSRy1HMjEwMDAyLEVHLUZSRy1HMjEwMDAzLEVHLUZSRy1HMjEwMDA0LEVHLUZSRy1HMjEwMDA1LEVHLUxPRS1HMjQwMDAxLEVHLUxPRS1HMjQwMDAyLEVHLUxPRS1HMjQwMDAzLEVHLUxPRS1HMjQwMDA0LEVHLUxPRS1HMjQwMDA1LEVHLUxPRS1HMjQwMDA2LEVHLUxPRS1HMjQwMDA3LEVHLUxPRS1HMjQwMDA4LEVHLUxPRS1HMjQwMDA5LEVHLVVQRS1HMjkwMDAxLEVHLVVQRS1HMjkwMDAyLEVHLVVQRS1HMjkwMDAzLEVHLVVQRS1HMjkwMDA0LEVHLVVQRS1HMjkwMDA1LEVHLVVQRS1HMjkwMDA2LEVHLVVQRS1HMjkwMDA3LEVHLVVQRS1HMjkwMDA4LEVHLVVSRy1HMzAwMDAxLEVHLVVSRy1HMzAwMDAyLEVHLVVSRy1HMzAwMDAzLEVHLVVSRy1HMzAwMDA0CisxLFR1ZSAyNSBKYW4gMTEsMS43MjM1NjcwMDY4NTUxMzg1LDAuNTg1Nzk0MDU1NTY1NTg1NSw1LjM2MjYwMjY4MTcyMTEwOCwyLjAxNDMxOTA4NDY3MDMxNDcsMTEuNzI2MjY1OTM4ODQzMDQsNDMxLjIwMjQ1NjA4NjQwMzc0LDE1MTQuNzI0NzY4NDA2MTcsMjM5Ni4zOTMyMjk4NzAyNjQsMjczNC4wNjYyMDg5NTM4ODgsNTM2OS43NDU1Mjk4NTY4NjUsMTgxLjI5NzkxMjI3NjI3OTQsMTE0Ni4yNjk0NTQ4Nzg2MTQ2LDE1ODkuMzE0OTMyMDk4MjQzOCw4MzcuMDk4MDk1NjQ0ODg4Niw0NDYuNzY2NTk2OTYyMDkxNzQsMTcxLjI3NDcwOTIxNzU3ODUsMjMzLjg2MjE0MDUyODc2NjQyLDgxLjUxNDQ0NTM2Mzk1NDg4LDE1NTMuOTgzNjk3NTgzODA1NSw1MTAuNDM0OTgxNTQzMjM1NCw5NzQuODcxMjYxMzE1MTk2NiwxNTg0LjUxMzIyOTE1OTUwNTcsMTUyOC45Mzg1NDE5MjU1NzIzLDI2NzguNzM2NzEwOTU4MDI2LDYxLjQ1MDEwMzU3NDg5MTc0LDE3LjM1NDY3MjI5ODMzNzY2NQorMixXZWQgMjYgSmFuIDExLDEuNzIzNTczOTAxMTIzMTY2LDAuNTg1Nzk2Mzk4NzQxODA3OCw1LjM2MjYyNDEzMjEzMTgzNSwyLjAxNDMyNzE0MTk0NjY1MzMsMTEuNzI2MzEyODQzOTA2Nzk1LDQzMS4yMDQxODA4OTYyMjgsMTUxNC43MzA4MjczMDUyNDM2LDIzOTYuNDAyODE1NDQzMTgzNSwyNzM0LjA3NzE0NTIxODcyMzcsNTM2OS43NjcwMDg4Mzg5ODQsMTgxLjI5ODYzNzQ2NzkyODQ3LDExNDYuMjc0MDM5OTU2NDM0LDE1ODkuMzIxMjg5MzU3OTcyLDgzNy4xMDE0NDQwMzcyNzEyLDQ0Ni43NjgzODQwMjg0Nzk1NSwxNzEuMjc1Mzk0MzE2NDE1MzcsMjMzLjg2MzA3NTk3NzMyODU1LDgxLjUxNDc3MTQyMTczNjMzLDE1NTMuOTg5OTEzNTE4NTk1Niw1MTAuNDM3MDIzMjgzMTYxNiw5NzQuODc1MTYwODAwMjQxOCwxNTg0LjUxOTU2NzIxMjQyMjMsMTUyOC45NDQ2NTc2Nzk3NCwyNjc4Ljc0NzQyNTkwNDg2OTUsNjEuNDUwMzQ5Mzc1MzA2MDQsMTcuMzU0NzQxNzE3MDI2ODYKKzMsVGh1IDI3IEphbiAxMSwxLjcyMzU4MDc5NTQxODc3MDcsMC41ODU3OTg3NDE5Mjc0MDI3LDUuMzYyNjQ1NTgyNjI4MzY0LDIuMDE0MzM1MTk5MjU1MjIxLDExLjcyNjM1OTc0OTE1ODE3LDQzMS4yMDU5MDU3MTI5NTE2LDE1MTQuNzM2ODg2MjI4NTUyNSwyMzk2LjQxMjQwMTA1NDQ0NSwyNzM0LjA4ODA4MTUyNzMwNDQsNTM2OS43ODg0ODc5MDcwMiwxODEuMjk5MzYyNjYyNDc4MzYsMTE0Ni4yNzg2MjUwNTI1OTQsMTU4OS4zMjc2NDY2NDMxMjk2LDgzNy4xMDQ3OTI0NDMwNDcyLDQ0Ni43NzAxNzExMDIwMTU2NCwxNzEuMjc2MDc5NDE3OTkyNjYsMjMzLjg2NDAxMTQyOTYzMjQ2LDgxLjUxNTA5NzQ4MDgyMjAyLDE1NTMuOTk2MTI5NDc4MjQ5Nyw1MTAuNDM5MDY1MDMxMjU0Nyw5NzQuODc5MDYwMzAwODg1LDE1ODQuNTI1OTA1MjkwNjkxMywxNTI4Ljk1MDc3MzQ1ODM3MDYsMjY3OC43NTgxNDA4OTQ1NzM0LDYxLjQ1MDU5NTE3NjcwMzU0LDE3LjM1NDgxMTEzNTk5MzcyOAorNCxGcmkgMjggSmFuIDExLDEuNzIzNTg3Njg5NzQxOTUyNCwwLjU4NTgwMTA4NTEyMjM3MDQsNS4zNjI2NjcwMzMyMTA2OTUsMi4wMTQzNDMyNTY1OTYwMTg0LDExLjcyNjQwNjY1NDU5NzE2Nyw0MzEuMjA3NjMwNTM2NTc0NDcsMTUxNC43NDI5NDUxNzYwOTc1LDIzOTYuNDIxOTg2NzA0MDQ5MiwyNzM0LjA5OTAxNzg3OTYzMDUsNTM2OS44MDk5NjcwNjA5NzEsMTgxLjMwMDA4Nzg1OTkyOSwxMTQ2LjI4MzIxMDE2NzA5NDIsMTU4OS4zMzQwMDM5NTM3MTYzLDgzNy4xMDgxNDA4NjIyMTY5LDQ0Ni43NzE5NTgxODI3MDAxLDE3MS4yNzY3NjQ1MjIzMTAzNCwyMzMuODY0OTQ2ODg1Njc4MTcsODEuNTE1NDIzNTQxMjExOTMsMTU1NC4wMDIzNDU0NjI3Njc2LDUxMC40NDExMDY3ODc1MTQ4NSw5NzQuODgyOTU5ODE3MTI2MiwxNTg0LjUzMjI0MzM5NDMxMjQsMTUyOC45NTY4ODkyNjE0NjQ1LDI2NzguNzY4ODU1OTI3MTM3LDYxLjQ1MDg0MDk3OTA4NDI1LDE3LjM1NDg4MDU1NTIzODI3Cis1LFNhdCAyOSBKYW4gMTEsMS43MjM1OTQ1ODQwOTI3MTE0LDAuNTg1ODAzNDI4MzI2NzExLDUuMzYyNjg4NDgzODc4ODI3LDIuMDE0MzUxMzEzOTY5MDQ0NSwxMS43MjY0NTM1NjAyMjM3ODUsNDMxLjIwOTM1NTM2NzA5NjYzLDE1MTQuNzQ5MDA0MTQ3ODc4MiwyMzk2LjQzMTU3MjM5MTk5NjMsMjczNC4xMDk5NTQyNzU3MDI0LDUzNjkuODMxNDQ2MzAwODM4LDE4MS4zMDA4MTMwNjAyODA0MywxMTQ2LjI4Nzc5NTI5OTkzNDcsMTU4OS4zNDAzNjEyODk3MzIzLDgzNy4xMTE0ODkyOTQ3ODA0LDQ0Ni43NzM3NDUyNzA1MzI3NCwxNzEuMjc3NDQ5NjI5MzY4NDIsMjMzLjg2NTg4MjM0NTQ2NTcsODEuNTE1NzQ5NjAyOTA2MTEsMTU1NC4wMDg1NjE0NzIxNDk3LDUxMC40NDMxNDg1NTE5NDIwNCw5NzQuODg2ODU5MzQ4OTY1NiwxNTg0LjUzODU4MTUyMzI4NiwxNTI4Ljk2MzAwNTA4OTAyMTQsMjY3OC43Nzk1NzEwMDI1NjA3LDYxLjQ1MTA4Njc4MjQ0ODE2NSwxNy4zNTQ5NDk5NzQ3NjA0OTQKKzYsU3VuIDMwIEphbiAxMSwxLjcyMzYwMTQ3ODQ3MTA0NzgsMC41ODU4MDU3NzE1NDA0MjQyLDUuMzYyNzA5OTM0NjMyNzYzLDIuMDE0MzU5MzcxMzc0MzAwNCwxMS43MjY1MDA0NjYwMzgwMjYsNDMxLjIxMTA4MDIwNDUxODEsMTUxNC43NTUwNjMxNDM4OTQ5LDIzOTYuNDQxMTU4MTE4Mjg2LDI3MzQuMTIwODkwNzE1NTE5LDUzNjkuODUyOTI1NjI2NjI0LDE4MS4zMDE1MzgyNjM1MzI2OCwxMTQ2LjI5MjM4MDQ1MTExNiwxNTg5LjM0NjcxODY1MTE3NzUsODM3LjExNDgzNzc0MDczNzcsNDQ2Ljc3NTUzMjM2NTUxMzg3LDE3MS4yNzgxMzQ3MzkxNjY5NCwyMzMuODY2ODE3ODA4OTk1MDgsODEuNTE2MDc1NjY1OTA0NTEsMTU1NC4wMTQ3Nzc1MDYzOTU2LDUxMC40NDUxOTAzMjQ1MzYyNyw5NzQuODkwNzU4ODk2NDAzLDE1ODQuNTQ0OTE5Njc3NjEyLDE1MjguOTY5MTIwOTQxMDQxOSwyNjc4Ljc5MDI4NjEyMDg0NDUsNjEuNDUxMzMyNTg2Nzk1MywxNy4zNTUwMTkzOTQ1NjAzOTQKKzcsTW9uIDMxIEphbiAxMSwxLjcyMzYwODM3Mjg3Njk2MTgsMC41ODU4MDgxMTQ3NjM1MTA1LDUuMzYyNzMxMzg1NDcyNTAxLDIuMDE0MzY3NDI4ODExNzg1NywxMS43MjY1NDczNzIwMzk4ODksNDMxLjIxMjgwNTA0ODgzODk2LDE1MTQuNzYxMTIyMTY0MTQ3MywyMzk2LjQ1MDc0Mzg4MjkxODIsMjczNC4xMzE4MjcxOTkwODIsNTM2OS44NzQ0MDUwMzgzMjcsMTgxLjMwMjI2MzQ2OTY4NTczLDExNDYuMjk2OTY1NjIwNjM3OCwxNTg5LjM1MzA3NjAzODA1MjIsODM3LjExODE4NjIwMDA4ODYsNDQ2Ljc3NzMxOTQ2NzY0MzM0LDE3MS4yNzg4MTk4NTE3MDU5MiwyMzMuODY3NzUzMjc2MjY2Myw4MS41MTY0MDE3MzAyMDcxOCwxNTU0LjAyMDk5MzU2NTUwNTcsNTEwLjQ0NzIzMjEwNTI5NzYsOTc0Ljg5NDY1ODQ1OTQzODYsMTU4NC41NTEyNTc4NTcyOTA3LDE1MjguOTc1MjM2ODE3NTI1NywyNjc4LjgwMTAwMTI4MTk4ODYsNjEuNDUxNTc4MzkyMTI1NjU0LDE3LjM1NTA4ODgxNDYzNzk3MworOCxUdWUgMSBGZWIgMTEsMS43MjM2MTUyNjczMTA0NTM0LDAuNTg1ODEwNDU3OTk1OTY5NSw1LjM2Mjc1MjgzNjM5ODA0NCwyLjAxNDM3NTQ4NjI4MTUwMSwxMS43MjY1OTQyNzgyMjkzNzgsNDMxLjIxNDUyOTkwMDA1OTIsMTUxNC43NjcxODEyMDg2MzYsMjM5Ni40NjAzMjk2ODU4OTM2LDI3MzQuMTQyNzYzNzI2MzkxLDUzNjkuODk1ODg0NTM1OTQ3LDE4MS4zMDI5ODg2Nzg3Mzk2LDExNDYuMzAxNTUwODA4NTAwMiwxNTg5LjM1OTQzMzQ1MDM1NjQsODM3LjEyMTUzNDY3MjgzMzUsNDQ2Ljc3OTEwNjU3NjkyMTIsMTcxLjI3OTUwNDk2Njk4NTM0LDIzMy44Njg2ODg3NDcyNzk0LDgxLjUxNjcyNzc5NTgxNDEsMTU1NC4wMjcyMDk2NDk0OCw1MTAuNDQ5MjczODk0MjI2MDUsOTc0Ljg5ODU1ODAzODA3MjMsMTU4NC41NTc1OTYwNjIzMjE5LDE1MjguOTgxMzUyNzE4NDcyOSwyNjc4LjgxMTcxNjQ4NTk5MzcsNjEuNDUxODI0MTk4NDM5MjI2LDE3LjM1NTE1ODIzNDk5MzIzMworOSxXZWQgMiBGZWIgMTEsMS43MjM2MjIxNjE3NzE1MjI4LDAuNTg1ODEyODAxMjM3ODAxNCw1LjM2Mjc3NDI4NzQwOTM4OSwyLjAxNDM4MzU0Mzc4MzQ0NjMsMTEuNzI2NjQxMTg0NjA2NDksNDMxLjIxNjI1NDc1ODE3ODc2LDE1MTQuNzczMjQwMjc3MzYwOSwyMzk2LjQ2OTkxNTUyNzIxMjQsMjczNC4xNTM3MDAyOTc0NDYsNTM2OS45MTczNjQxMTk0ODUsMTgxLjMwMzcxMzg5MDY5NDMzLDExNDYuMzA2MTM2MDE0NzAzNSwxNTg5LjM2NTc5MDg4ODA5MDMsODM3LjEyNDg4MzE1ODk3MjIsNDQ2Ljc4MDg5MzY5MzM0NzU0LDE3MS4yODAxOTAwODUwMDUyLDIzMy44Njk2MjQyMjIwMzQ0LDgxLjUxNzA1Mzg2MjcyNTI4LDE1NTQuMDMzNDI1NzU4MzE4Niw1MTAuNDUxMzE1NjkxMzIxNjcsOTc0LjkwMjQ1NzYzMjMwNDUsMTU4NC41NjM5MzQyOTI3MDYsMTUyOC45ODc0Njg2NDM4ODM2LDI2NzguODIyNDMxNzMyODU5NSw2MS40NTIwNzAwMDU3MzYwMSwxNy4zNTUyMjc2NTU2MjYxNzMKKzEwLFRodSAzIEZlYiAxMSwxLjcyMzYyOTA1NjI2MDE3LDAuNTg1ODE1MTQ0NDg5MDA2NCw1LjM2Mjc5NTczODUwNjUzOCwyLjAxNDM5MTYwMTMxNzYyMTMsMTEuNzI2Njg4MDkxMTcxMjI4LDQzMS4yMTc5Nzk2MjMxOTc4MywxNTE0Ljc3OTI5OTM3MDMyMiwyMzk2LjQ3OTUwMTQwNjg3NDUsMjczNC4xNjQ2MzY5MTIyNDcsNTM2OS45Mzg4NDM3ODg5NDIsMTgxLjMwNDQzOTEwNTU0OTg3LDExNDYuMzEwNzIxMjM5MjQ3NCwxNTg5LjM3MjE0ODM1MTI1MzgsODM3LjEyODIzMTY1ODUwNDksNDQ2Ljc4MjY4MDgxNjkyMjI3LDE3MS4yODA4NzUyMDU3NjU1NCwyMzMuODcwNTU5NzAwNTMxMjYsODEuNTE3Mzc5OTMwOTQwNzMsMTU1NC4wMzk2NDE4OTIwMjE2LDUxMC40NTMzNTc0OTY1ODQ0Myw5NzQuOTA2MzU3MjQyMTM1MSwxNTg0LjU3MDI3MjU0ODQ0MzQsMTUyOC45OTM1ODQ1OTM3NTg0LDI2NzguODMzMTQ3MDIyNTg2LDYxLjQ1MjMxNTgxNDAxNjA0LDE3LjM1NTI5NzA3NjUzNjc5NworMTEsRnJpIDQgRmViIDExLDEuNzIzNjM1OTUwNzc2Mzk0OCwwLjU4NTgxNzQ4Nzc0OTU4NDMsNS4zNjI4MTcxODk2ODk0OTIsMi4wMTQzOTk2NTg4ODQwMjY1LDExLjcyNjczNDk5NzkyMzU5Myw0MzEuMjE5NzA0NDk1MTE2MzMsMTUxNC43ODUzNTg0ODc1MTk1LDIzOTYuNDg5MDg3MzI0ODgwNSwyNzM0LjE3NTU3MzU3MDc5NDMsNTM2OS45NjAzMjM1NDQzMTYsMTgxLjMwNTE2NDMyMzMwNjMxLDExNDYuMzE1MzA2NDgyMTMyNCwxNTg5LjM3ODUwNTgzOTg0Nyw4MzcuMTMxNTgwMTcxNDMxNiw0NDYuNzg0NDY3OTQ3NjQ1NSwxNzEuMjgxNTYwMzI5MjY2MzcsMjMzLjg3MTQ5NTE4Mjc3MDA1LDgxLjUxNzcwNjAwMDQ2MDQ1LDE1NTQuMDQ1ODU4MDUwNTg5Miw1MTAuNDU1Mzk5MzEwMDE0NDYsOTc0LjkxMDI1Njg2NzU2NCwxNTg0LjU3NjYxMDgyOTUzMzYsMTUyOC45OTk3MDA1NjgwOTY4LDI2NzguODQzODYyMzU1MTc0Nyw2MS40NTI1NjE2MjMyNzkyOTQsMTcuMzU1MzY2NDk3NzI1MQorMTIsU2F0IDUgRmViIDExLDEuNzIzNjQyODQ1MzIwMTk3NywwLjU4NTgxOTgzMTAxOTUzNTQsNS4zNjI4Mzg2NDA5NTgyNTEsMi4wMTQ0MDc3MTY0ODI2NjIsMTEuNzI2NzgxOTA0ODYzNTg0LDQzMS4yMjE0MjkzNzM5MzQzLDE1MTQuNzkxNDE3NjI4OTUzNSwyMzk2LjQ5ODY3MzI4MTIzLDI3MzQuMTg2NTEwMjczMDg4NSw1MzY5Ljk4MTgwMzM4NTYxMSwxODEuMzA1ODg5NTQzOTYzNjIsMTE0Ni4zMTk4OTE3NDMzNTgzLDE1ODkuMzg0ODYzMzUzODcwNSw4MzcuMTM0OTI4Njk3NzUyMiw0NDYuNzg2MjU1MDg1NTE3MywxNzEuMjgyMjQ1NDU1NTA3NjgsMjMzLjg3MjQzMDY2ODc1MDc4LDgxLjUxODAzMjA3MTI4NDQ3LDE1NTQuMDUyMDc0MjM0MDIxMyw1MTAuNDU3NDQxMTMxNjExNzQsOTc0LjkxNDE1NjUwODU5MTUsMTU4NC41ODI5NDkxMzU5NzY4LDE1MjkuMDA1ODE2NTY2ODk5LDI2NzguODU0NTc3NzMwNjI0LDYxLjQ1MjgwNzQzMzUyNTc4NCwxNy4zNTU0MzU5MTkxOTEwOQorMTMsU3VuIDYgRmViIDExLDEuNzIzNjQ5NzM5ODkxNTc5MywwLjU4NTgyMjE3NDI5ODg1OTQsNS4zNjI4NjAwOTIzMTI4MTUsMi4wMTQ0MTU3NzQxMTM1MjgsMTEuNzI2ODI4ODExOTkxMjA0LDQzMS4yMjMxNTQyNTk2NTE4LDE1MTQuNzk3NDc2Nzk0NjI0LDIzOTYuNTA4MjU5Mjc1OTIyNywyNzM0LjE5NzQ0NzAxOTEzLDUzNzAuMDAzMjgzMzEyODIzLDE4MS4zMDY2MTQ3Njc1MjE4LDExNDYuMzI0NDc3MDIyOTI1MywxNTg5LjM5MTIyMDg5MzMyMzYsODM3LjEzODI3NzIzNzQ2Nyw0NDYuNzg4MDQyMjMwNTM3NiwxNzEuMjgyOTMwNTg0NDg5NTIsMjMzLjg3MzM2NjE1ODQ3MzQzLDgxLjUxODM1ODE0MzQxMjc0LDE1NTQuMDU4MjkwNDQyMzE4NCw1MTAuNDU5NDgyOTYxMzc2MjQsOTc0LjkxODA1NjE2NTIxNzUsMTU4NC41ODkyODc0Njc3NzM0LDE1MjkuMDExOTMyNTkwMTY1MywyNjc4Ljg2NTI5MzE0ODkzNSw2MS40NTMwNTMyNDQ3NTU1MTYsMTcuMzU1NTA1MzQwOTM0NzcKKzE0LE1vbiA3IEZlYiAxMSwxLjcyMzY1NjYzNDQ5MDUzODYsMC41ODU4MjQ1MTc1ODc1NTY1LDUuMzYyODgxNTQzNzUzMTg0LDIuMDE0NDIzODMxNzc2NjI0MywxMS43MjY4NzU3MTkzMDY0NTIsNDMxLjIyNDg3OTE1MjI2ODg0LDE1MTQuODAzNTM1OTg0NTMxLDIzOTYuNTE3ODQ1MzA4OTYsMjczNC4yMDgzODM4MDg5MTgsNTM3MC4wMjQ3NjMzMjU5NTcsMTgxLjMwNzMzOTk5Mzk4MDg2LDExNDYuMzI5MDYyMzIwODMzNCwxNTg5LjM5NzU3ODQ1ODIwNzEsODM3LjE0MTYyNTc5MDU3Niw0NDYuNzg5ODI5MzgyNzA2NTYsMTcxLjI4MzYxNTcxNjIxMTg0LDIzMy44NzQzMDE2NTE5MzgwNSw4MS41MTg2ODQyMTY4NDUzMiwxNTU0LjA2NDUwNjY3NTQ4LDUxMC40NjE1MjQ3OTkzMDgxLDk3NC45MjE5NTU4Mzc0NDIzLDE1ODQuNTk1NjI1ODI0OTIzMiwxNTI5LjAxODA0ODYzNzg5NTYsMjY3OC44NzYwMDg2MTAxMDc0LDYxLjQ1MzI5OTA1Njk2ODUwNCwxNy4zNTU1NzQ3NjI5NTYxMworMTUsVHVlIDggRmViIDExLDEuNzIzNjYzNTI5MTE3MDc2NSwwLjU4NTgyNjg2MDg4NTYyNjksNS4zNjI5MDI5OTUyNzkzNTg1LDIuMDE0NDMxODg5NDcxOTUxMywxMS43MjY5MjI2MjY4MDkzMjgsNDMxLjIyNjYwNDA1MTc4NTQ0LDE1MTQuODA5NTk1MTk4Njc1LDIzOTYuNTI3NDMxMzgwMzQxLDI3MzQuMjE5MzIwNjQyNDUzLDUzNzAuMDQ2MjQzNDI1MDA5LDE4MS4zMDgwNjUyMjMzNDA4NiwxMTQ2LjMzMzY0NzYzNzA4MjUsMTU4OS40MDM5MzYwNDg1MjEyLDgzNy4xNDQ5NzQzNTcwNzkxLDQ0Ni43OTE2MTY1NDIwMjQxLDE3MS4yODQzMDA4NTA2NzQ3MywyMzMuODc1MjM3MTQ5MTQ0NjUsODEuNTE5MDEwMjkxNTgyMTksMTU1NC4wNzA3MjI5MzM1MDY5LDUxMC40NjM1NjY2NDU0MDczLDk3NC45MjU4NTU1MjUyNjU3LDE1ODQuNjAxOTY0MjA3NDI2NCwxNTI5LjAyNDE2NDcxMDA5LDI2NzguODg2NzI0MTE0MTQxNSw2MS40NTM1NDQ4NzAxNjQ3MywxNy4zNTU2NDQxODUyNTUxODMKKzE2LFdlZCA5IEZlYiAxMSwxLjcyMzY3MDQyMzc3MTE5MywwLjU4NTgyOTIwNDE5MzA3MDQsNS4zNjI5MjQ0NDY4OTEzNCwyLjAxNDQzOTk0NzE5OTUwOTQsMTEuNzI2OTY5NTM0NDk5ODM1LDQzMS4yMjgzMjg5NTgyMDE3LDE1MTQuODE1NjU0NDM3MDU1OSwyMzk2LjUzNzAxNzQ5MDA2NywyNzM0LjIzMDI1NzUxOTczNiw1MzcwLjA2NzcyMzYwOTk4NCwxODEuMzA4NzkwNDU1NjAxNzUsMTE0Ni4zMzgyMzI5NzE2NzMsMTU4OS40MTAyOTM2NjQyNjUzLDgzNy4xNDgzMjI5MzY5NzY1LDQ0Ni43OTM0MDM3MDg0OTAyLDE3MS4yODQ5ODU5ODc4NzgxMiwyMzMuODc2MTcyNjUwMDkzMjUsODEuNTE5MzM2MzY3NjIzMzUsMTU1NC4wNzY5MzkyMTYzOTg2LDUxMC40NjU2MDg0OTk2NzM4Niw5NzQuOTI5NzU1MjI4Njg3NywxNTg0LjYwODMwMjYxNTI4MzMsMTUyOS4wMzAyODA4MDY3NDg4LDI2NzguODk3NDM5NjYxMDM4LDYxLjQ1Mzc5MDY4NDM0NDIwNiwxNy4zNTU3MTM2MDc4MzE5MjMKKzE3LFRodSAxMCBGZWIgMTEsMS43MjM2NzczMTg0NTI4ODgyLDAuNTg1ODMxNTQ3NTA5ODg3Miw1LjM2Mjk0NTg5ODU4OTEyNywyLjAxNDQ0ODAwNDk1OTI5OCwxMS43MjcwMTY0NDIzNzc5NzMsNDMxLjIzMDA1Mzg3MTUxNzUsMTUxNC44MjE3MTM2OTk2NzM0LDIzOTYuNTQ2NjAzNjM4MTM2NywyNzM0LjI0MTE5NDQ0MDc2Niw1MzcwLjA4OTIwMzg4MDg3OCwxODEuMzA5NTE1NjkwNzYzNTYsMTE0Ni4zNDI4MTgzMjQ2MDUsMTU4OS40MTY2NTEzMDU0NCw4MzcuMTUxNjcxNTMwMjY4Miw0NDYuNzk1MTkwODgyMTA1MDMsMTcxLjI4NTY3MTEyNzgyMjEsMjMzLjg3NzEwODE1NDc4Mzg1LDgxLjUxOTY2MjQ0NDk2ODgyLDE1NTQuMDgzMTU1NTI0MTU1Miw1MTAuNDY3NjUwMzYyMTA3ODYsOTc0LjkzMzY1NDk0NzcwODYsMTU4NC42MTQ2NDEwNDg0OTM3LDE1MjkuMDM2Mzk2OTI3ODcyMSwyNjc4LjkwODE1NTI1MDc5NjQsNjEuNDU0MDM2NDk5NTA2OTUsMTcuMzU1NzgzMDMwNjg2MzU0CisxOCxGcmkgMTEgRmViIDExLDEuNzIzNjg0MjEzMTYyMTYyLDAuNTg1ODMzODkwODM2MDc3Miw1LjM2Mjk2NzM1MDM3MjcyMSwyLjAxNDQ1NjA2Mjc1MTMxOCwxMS43MjcwNjMzNTA0NDM3NDMsNDMxLjIzMTc3ODc5MTczMywxNTE0LjgyNzc3Mjk4NjUyODMsMjM5Ni41NTYxODk4MjQ1NTEsMjczNC4yNTIxMzE0MDU1NDM0LDUzNzAuMTEwNjg0MjM3Njk0LDE4MS4zMTAyNDA5Mjg4MjYzNSwxMTQ2LjM0NzQwMzY5NTg3ODMsMTU4OS40MjMwMDg5NzIwNDUsODM3LjE1NTAyMDEzNjk1NDQsNDQ2Ljc5Njk3ODA2Mjg2ODUsMTcxLjI4NjM1NjI3MDUwNjYsMjMzLjg3ODA0MzY2MzIxNjUsODEuNTE5OTg4NTIzNjE4NiwxNTU0LjA4OTM3MTg1Njc3NzUsNTEwLjQ2OTY5MjIzMjcwOTI0LDk3NC45Mzc1NTQ2ODIzMjg1LDE1ODQuNjIwOTc5NTA3MDU3OSwxNTI5LjA0MjUxMzA3MzQ2LDI2NzguOTE4ODcwODgzNDE3LDYxLjQ1NDI4MjMxNTY1Mjk0LDE3LjM1NTg1MjQ1MzgxODQ3NQorMTksU2F0IDEyIEZlYiAxMSwxLjcyMzY5MTEwNzg5OTAxNDUsMC41ODU4MzYyMzQxNzE2NDA1LDUuMzYyOTg4ODAyMjQyMTIzLDIuMDE0NDY0MTIwNTc1NTY5MywxMS43MjcxMTAyNTg2OTcxNDUsNDMxLjIzMzUwMzcxODg0ODE3LDE1MTQuODMzODMyMjk3NjIwMywyMzk2LjU2NTc3NjA0OTMxLDI3MzQuMjYzMDY4NDE0MDY5LDUzNzAuMTMyMTY0NjgwNDMxLDE4MS4zMTA5NjYxNjk3OTAwNSwxMTQ2LjM1MTk4OTA4NTQ5MzIsMTU4OS40MjkzNjY2NjQwODEsODM3LjE1ODM2ODc1NzAzNDksNDQ2Ljc5ODc2NTI1MDc4MDgsMTcxLjI4NzA0MTQxNTkzMTY3LDIzMy44Nzg5NzkxNzUzOTExNSw4MS41MjAzMTQ2MDM1NzI3LDE1NTQuMDk1NTg4MjE0MjY0OCw1MTAuNDcxNzM0MTExNDc4Miw5NzQuOTQxNDU0NDMyNTQ3MSwxNTg0LjYyNzMxNzk5MDk3NTgsMTUyOS4wNDg2MjkyNDM1MTIzLDI2NzguOTI5NTg2NTU4OTAxLDYxLjQ1NDUyODEzMjc4MjIsMTcuMzU1OTIxODc3MjI4MjkKKzIwLFN1biAxMyBGZWIgMTEsMS43MjM2OTgwMDI2NjM0NDYzLDAuNTg1ODM4NTc3NTE2NTc3Miw1LjM2MzAxMDI1NDE5NzMzMiwyLjAxNDQ3MjE3ODQzMjA1MTQsMTEuNzI3MTU3MTY3MTM4MTgyLDQzMS4yMzUyMjg2NTI4NjMwNCwxNTE0LjgzOTg5MTYzMjk0OTUsMjM5Ni41NzUzNjIzMTI0MTQsMjczNC4yNzQwMDU0NjYzNDI3LDUzNzAuMTUzNjQ1MjA5MDg5NSwxODEuMzExNjkxNDEzNjU0NzMsMTE0Ni4zNTY1NzQ0OTM0NDk0LDE1ODkuNDM1NzI0MzgxNTQ3Nyw4MzcuMTYxNzE3MzkwNTA5OCw0NDYuODAwNTUyNDQ1ODQxOCwxNzEuMjg3NzI2NTY0MDk3MzQsMjMzLjg3OTkxNDY5MTMwNzg1LDgxLjUyMDY0MDY4NDgzMTEyLDE1NTQuMTAxODA0NTk2NjE3Nyw1MTAuNDczNzc1OTk4NDE0Nyw5NzQuOTQ1MzU0MTk4MzY0OCwxNTg0LjYzMzY1NjUwMDI0NzgsMTUyOS4wNTQ3NDU0MzgwMjk0LDI2NzguOTQwMzAyMjc3MjQ3LDYxLjQ1NDc3Mzk1MDg5NDczLDE3LjM1NTk5MTMwMDkxNTgKKzIxLE1vbiAxNCBGZWIgMTEsMS43MjM3MDQ4OTc0NTU0NTcyLDAuNTg1ODQwOTIwODcwODg3Miw1LjM2MzAzMTcwNjIzODM0OSwyLjAxNDQ4MDIzNjMyMDc2NSwxMS43MjcyMDQwNzU3NjY4NTEsNDMxLjIzNjk1MzU5Mzc3NzYsMTUxNC44NDU5NTA5OTI1MTYyLDIzOTYuNTg0OTQ4NjEzODYzNiwyNzM0LjI4NDk0MjU2MjM2NDQsNTM3MC4xNzUxMjU4MjM2NywxODEuMzEyNDE2NjYwNDIwMzgsMTE0Ni4zNjExNTk5MTk3NDc1LDE1ODkuNDQyMDgyMTI0NDQ1Myw4MzcuMTY1MDY2MDM3Mzc5NSw0NDYuODAyMzM5NjQ4MDUxNTQsMTcxLjI4ODQxMTcxNTAwMzYsMjMzLjg4MDg1MDIxMDk2NjYsODEuNTIwOTY2NzY3MzkzODYsMTU1NC4xMDgwMjEwMDM4MzYsNTEwLjQ3NTgxNzg5MzUxODcsOTc0Ljk0OTI1Mzk3OTc4MTYsMTU4NC42Mzk5OTUwMzQ4NzM3LDE1MjkuMDYwODYxNjU3MDExLDI2NzguOTUxMDE4MDM4NDU2NCw2MS40NTUwMTk3Njk5OTA1NCwxNy4zNTYwNjA3MjQ4ODEwMDQKKzIyLFR1ZSAxNSBGZWIgMTEsMS43MjM3MTE3OTIyODE2ODk4LDAuNTg1ODQzMjY0MjM2ODI4Niw1LjM2MzA1MzE1ODM4NTg0MywyLjAxNDQ4ODI5NDI0OTQ3NCwxMS43MjcyNTA5ODQ2MjgzNTIsNDMxLjIzODY3ODU0MzI1NCwxNTE0Ljg1MjAxMDM4MjE1ODQsMjM5Ni41OTQ1MzQ5NjI4OTQ2LDI3MzQuMjk1ODc5NzEyNjcyNiw1MzcwLjE5NjYwNjU0NDg3LDE4MS4zMTMxNDE5MTA3ODU4MiwxMTQ2LjM2NTc0NTM2ODgwNTIsMTU4OS40NDg0Mzk4OTg4OTkzLDgzNy4xNjg0MTQ3MDA4Nyw0NDYuODA0MTI2ODU5MTMyMDUsMTcxLjI4OTA5Njg2OTMxMDU4LDIzMy44ODE3ODU3MzUyNjg4LDgxLjUyMTI5Mjg1MTU3NTEzLDE1NTQuMTE0MjM3NDQxOTA5Niw1MTAuNDc3ODU5Nzk4NzU3Niw5NzQuOTUzMTUzNzgwNTU1LDE1ODQuNjQ2MzMzNjAwOTYxLDE1MjkuMDY2OTc3OTA2MzUwNSwyNjc4Ljk2MTczMzg1Mjg1MzMsNjEuNDU1MjY1NTkwMzA2NDc1LDE3LjM1NjEzMDE0OTE5MDc5MworMjMsV2VkIDE2IEZlYiAxMSwxLjcyMzcxODY4NzEzMzk3NDcsMC41ODU4NDU2MDc2MTE2MjQyLDUuMzYzMDc0NjEwNjE0Mzk0LDIuMDE0NDk2MzUyMjA4NjI5NywxMS43MjcyOTc4OTM2NjcwOTQsNDMxLjI0MDQwMzQ5OTI0ODAzLDE1MTQuODU4MDY5Nzk0Njk2LDIzOTYuNjA0MTIxMzQ4MTQ3LDI3MzQuMzA2ODE2OTA0MzA2Myw1MzcwLjIxODA4NzM0NzIzMjUsMTgxLjMxMzg2NzE2Mzg5MTU2LDExNDYuMzcwMzMwODM1MTg5LDE1ODkuNDU0Nzk3Njk3Mzc2Myw4MzcuMTcxNzYzMzc3MDEzMyw0NDYuODA1OTE0MDc2OTY1NSwxNzEuMjg5NzgyMDI2MjA2NDQsMjMzLjg4MjcyMTI2MzEwNTg4LDgxLjUyMTYxODkzNjk4ODQ2LDE1NTQuMTIwNDUzOTAzNDcxNiw1MTAuNDc5OTAxNzExNzExNzYsOTc0Ljk1NzA1MzU5NjA2MzYsMTU4NC42NTI2NzIxOTA5OTg0LDE1MjkuMDczMDk0MTc4ODAwMSwyNjc4Ljk3MjQ0OTcwNzczOSw2MS40NTU1MTE0MTE1NTEyMiwxNy4zNTYxOTk1NzM3NjI5CisyNCxUaHUgMTcgRmViIDExLDEuNzIzNzI1NTgyMDE1NzM4NywwLjU4NTg0Nzk1MDk5NjQzOSw1LjM2MzA5NjA2MjkzNDY2MjUsMi4wMTQ1MDQ0MTAyMDIyMzcsMTEuNzI3MzQ0ODAyOTA2Mzk2LDQzMS4yNDIxMjg0NjI2MTcxMywxNTE0Ljg2NDEyOTIzMzE0MDQsMjM5Ni42MTM3MDc3NzQzODYsMjczNC4zMTc3NTQxNDI3MDIsNTM3MC4yMzk1NjgyNDE0MzksMTgxLjMxNDU5MjQyMDA5ODE3LDExNDYuMzc0OTE2MzIxMTc3OCwxNTg5LjQ2MTE1NTUyMzAzNiw4MzcuMTc1MTEyMDY3NDc0MSw0NDYuODA3NzAxMzAyNDQwMjUsMTcxLjI5MDQ2NzE4NjAzMTY2LDIzMy44ODM2NTY3OTQ5NDI4LDgxLjUyMTk0NTAyMzc5NiwxNTU0LjEyNjY3MDM5MTYxMjIsNTEwLjQ4MTk0MzYzMzM5NjIsOTc0Ljk2MDk1MzQyODI0NTgsMTU4NC42NTkwMTA4MDgxMzY0LDE1MjkuMDc5MjEwNDc3NCwyNjc4Ljk4MzE2NTYwODQ0MSw2MS40NTU3NTcyMzM4NDY5OSwxNy4zNTYyNjg5OTg2MzE4MzMKKzI1LEZyaSAxOCBGZWIgMTEsMS43MjM3MzI0NzY5MjYyNDIzLDAuNTg1ODUwMjk0MzkxMDIxOCw1LjM2MzExNzUxNTM0NDM1MiwyLjAxNDUxMjQ2ODIyOTQzMywxMS43MjczOTE3MTIzNDEyMzIsNDMxLjI0Mzg1MzQzMzE3NjM1LDE1MTQuODcwMTg4Njk2ODQyNywyMzk2LjYyMzI5NDI0MDU4NDUsMjczNC4zMjg2OTE0MjY2ODgyLDUzNzAuMjYxMDQ5MjI1MTgyLDE4MS4zMTUzMTc2NzkzMjc4MiwxMTQ2LjM3OTUwMTgyNjI4MDYsMTU4OS40Njc1MTMzNzUxOTcsODM3LjE3ODQ2MDc3MTg5MzEsNDQ2LjgwOTQ4ODUzNTM2NDY2LDE3MS4yOTExNTIzNDg3MTI4NywyMzMuODg0NTkyMzMwNjc5MjgsODEuNTIyMjcxMTExOTYyNzUsMTU1NC4xMzI4ODY5MDU2NjUsNTEwLjQ4Mzk4NTU2MzU5MjEsOTc0Ljk2NDg1MzI3NjY4MzksMTU4NC42NjUzNDk0NTE2OTU2LDE1MjkuMDg1MzI2ODAxNDk0NiwyNjc4Ljk5Mzg4MTU1MzgxMSw2MS40NTYwMDMwNTcxNjc0MiwxNy4zNTYzMzg0MjM3OTAxNQorMjYsU2F0IDE5IEZlYiAxMSwxLjcyMzczOTM3MTg2NDU2MjQsMC41ODU4NTI2Mzc3OTUwNTg1LDUuMzYzMTM4OTY3ODQwNTg4LDIuMDE0NTIwNTI2Mjg5MTM3MiwxMS43Mjc0Mzg2MjE5NjUzMTYsNDMxLjI0NTU3ODQxMDY5NDcsMTUxNC44NzYyNDgxODQ5OTA4LDIzOTYuNjMyODgwNzQ1NDU4LDI3MzQuMzM5NjI4NzU0Nzk4LDUzNzAuMjgyNTMwMjk1NTg5LDE4MS4zMTYwNDI5NDE0ODM0MywxMTQ2LjM4NDA4NzM0OTg4MjcsMTU4OS40NzM4NzEyNTMwMDgyLDgzNy4xODE4MDk0ODk4MjIyLDQ0Ni44MTEyNzU3NzU0OTk0NCwxNzEuMjkxODM3NTE0MTU4MjYsMjMzLjg4NTUyNzg3MDE5MDEsODEuNTIyNTk3MjAxNDQ1MDcsMTU1NC4xMzkxMDM0NDQ3OTc3LDUxMC40ODYwMjc1MDIwMjU3Niw5NzQuOTY4NzUzMTQwODU1MywxNTg0LjY3MTY4ODEyMDgyNzQsMTUyOS4wOTE0NDMxNTAyNjQyLDI2NzkuMDA0NTk3NTQyNDEyMyw2MS40NTYyNDg4ODE0Nzk1OCwxNy4zNTY0MDc4NDkyMjg1NQorMjcsU3VuIDIwIEZlYiAxMSwxLjcyMzc0NjI2NjgzMDcyOSwwLjU4NTg1NDk4MTIwODU1OTYsNS4zNjMxNjA0MjA0MjM0NjMsMi4wMTQ1Mjg1ODQzODEzODYsMTEuNzI3NDg1NTMxNzc4ODUyLDQzMS4yNDczMDMzOTUxNzk3NiwxNTE0Ljg4MjMwNzY5NzYxMTIsMjM5Ni42NDI0NjcyODkwNDg1LDI3MzQuMzUwNTY2MTI3MDgwNiw1MzcwLjMwNDAxMTQ1Mjc1LDE4MS4zMTY3NjgyMDY1NjgxNiwxMTQ2LjM4ODY3Mjg5MjAwNDMsMTU4OS40ODAyMjkxNTY0OTYsODM3LjE4NTE1ODIyMTI3NTQsNDQ2LjgxMzA2MzAyMjg1MjI1LDE3MS4yOTI1MjI2ODIzNzA3NiwyMzMuODg2NDYzNDEzNDc5MjIsODEuNTIyOTIzMjkyMjQ0MzYsMTU1NC4xNDUzMjAwMDkwMzY2LDUxMC40ODgwNjk0NDg3MDYxNCw5NzQuOTcyNjUzMDIwNzc2OSwxNTg0LjY3ODAyNjgxNTU1OTIsMTUyOS4wOTc1NTk1MjM3MzYsMjY3OS4wMTUzMTM1NzQyOTE3LDYxLjQ1NjQ5NDcwNjc4NDUzLDE3LjM1NjQ3NzI3NDk0NzMzOAorMjgsTW9uIDIxIEZlYiAxMSwxLjcyMzc1MzE2MTgyNDQyNjYsMC41ODU4NTczMjQ2MzE0MTc2LDUuMzYzMTgxODczMDkxOTk3LDIuMDE0NTM2NjQyNTA1ODA5NSwxMS43Mjc1MzI0NDE3Nzk2OTQsNDMxLjI0OTAyODM4NjU1MjUsMTUxNC44ODgzNjcyMzQ0MjY0LDIzOTYuNjUyMDUzODcwOTE2NSwyNzM0LjM2MTUwMzU0MzAzNTMsNTM3MC4zMjU0OTI2OTU2ODMsMTgxLjMxNzQ5MzQ3NDU0ODgsMTE0Ni4zOTMyNTg0NTI0MzU1LDE1ODkuNDg2NTg3MDg1MzcxLDgzNy4xODg1MDY5NjYwOTk4LDQ0Ni44MTQ4NTAyNzczNDE0NiwxNzEuMjkzMjA3ODUzMzE5MSwyMzMuODg3Mzk4OTYwNTAzODcsODEuNTIzMjQ5Mzg0MzQ1NjgsMTU1NC4xNTE1MzY1OTgwOTgxLDUxMC40OTAxMTE0MDM1Mzk3NCw5NzQuOTc2NTUyOTE2MjcwNCwxNTg0LjY4NDM2NTUzNTYwMDQsMTUyOS4xMDM2NzU5MjE2Mjk3LDI2NzkuMDI2MDI5NjQ4OTU5LDYxLjQ1Njc0MDUzMzA3MTA1LDE3LjM1NjU0NjcwMDk0MzMzMworMjksVHVlIDIyIEZlYiAxMSwxLjcyMzc2MDA1Njg0NTc5NjcsMC41ODU4NTk2NjgwNjM2ODA3LDUuMzYzMjAzMzI1ODQ2NjI4LDIuMDE0NTQ0NzAwNjYyNTczNiwxMS43Mjc1NzkzNTE5Njg4MDUsNDMxLjI1MDc1MzM4NDg0ODIsMTUxNC44OTQ0MjY3OTU1NjEyLDIzOTYuNjYxNjQwNDkxMjU5NywyNzM0LjM3MjQ0MTAwMjg4Niw1MzcwLjM0Njk3NDAyNDgzLDE4MS4zMTgyMTg3NDU0NDAyLDExNDYuMzk3ODQ0MDMxMjcwMywxNTg5LjQ5Mjk0NTAzOTc2MjYsODM3LjE5MTg1NTcyNDM2NCw0NDYuODE2NjM3NTM5MDAzNSwxNzEuMjkzODkzMDI3MDE3MywyMzMuODg4MzM0NTExMjgzMjYsODEuNTIzNTc1NDc3NzU1NzQsMTU1NC4xNTc3NTMyMTIxMDksNTEwLjQ5MjE1MzM2NjU2ODUsOTc0Ljk4MDQ1MjgyNzQxNTcsMTU4NC42OTA3MDQyODEwODE1LDE1MjkuMTA5NzkyMzQ0MDcxMSwyNjc5LjAzNjc0NTc2NjYzNDMsNjEuNDU2OTg2MzYwMzQ0MTYsMTcuMzU2NjE2MTI3MjE3OTY1CiszMCxXZWQgMjMgRmViIDExLDEuNzIzNzY2OTUxODk0NDcyLDAuNTg1ODYyMDExNTA1MjI0Myw1LjM2MzIyNDc3ODY4NjIxNzUsMi4wMTQ1NTI3NTg4NTEyNDk1LDExLjcyNzYyNjI2MjM0MzY4Nyw0MzEuMjUyNDc4Mzg5OTc1MzUsMTUxNC45MDA0ODYzODA2OTI5LDIzOTYuNjcxMjI3MTQ5NTY3NiwyNzM0LjM4MzM3ODUwNjA1MSw1MzcwLjM2ODQ1NTQzOTA0NywxODEuMzE4OTQ0MDE5MjAzODMsMTE0Ni40MDI0Mjk2MjgyNjQ4LDE1ODkuNDk5MzAzMDE5MzMzLDgzNy4xOTUyMDQ0OTU4OSw0NDYuODE4NDI0ODA3NzQzNSwxNzEuMjk0NTc4MjAzNDI4OSwyMzMuODg5MjcwMDY1NzY3NTYsODEuNTIzOTAxNTcyNDU3MTksMTU1NC4xNjM5Njk4NTA3Mzg2LDUxMC40OTQxOTUzMzc2ODM5LDk3NC45ODQzNTI3NTQwMDU0LDE1ODQuNjk3MDQzMDUxNjY1MywxNTI5LjExNTkwODc5MDczNDUsMjY3OS4wNDc0NjE5MjY3NDgsNjEuNDU3MjMyMTg4NTkwOCwxNy4zNTY2ODU1NTM3Njc1NAorMzEsVGh1IDI0IEZlYiAxMSwxLjcyMzc3Mzg0Njk2ODkzNjUsMC41ODU4NjQzNTQ5NTU1MzI4LDUuMzYzMjQ2MjMxNjA2MDQzLDIuMDE0NTYwODE3MDcwMDY0NCwxMS43Mjc2NzMxNzI4OTQwMjYsNDMxLjI1NDIwMzQwMTU1NDMsMTUxNC45MDY1NDU5ODg0ODg3LDIzOTYuNjgwODEzODQzNzMxNCwyNzM0LjM5NDMxNjA1MDEyNDQsNTM3MC4zODk5MzY5MzM2MDcsMTgxLjMxOTY2OTI5NTY4MDE0LDExNDYuNDA3MDE1MjQyNDEwNiwxNTg5LjUwNTY2MTAyMjY4MzIsODM3LjE5ODU1MzI3OTk0MSw0NDYuODIwMjEyMDgzMTY4MjYsMTcxLjI5NTI2MzM4MjQwMzIsMjMzLjg5MDIwNTYyMzc1MTA2LDgxLjUyNDIyNzY2ODM3ODMsMTU1NC4xNzAxODY1MTI2Miw1MTAuNDk2MjM3MzE2NDM2Nyw5NzQuOTg4MjUyNjk1MTgxNSwxNTg0LjcwMzM4MTg0NTk1NzIsMTUyOS4xMjIwMjUyNjAyNzQ4LDI2NzkuMDU4MTc4MTI2OTQxLDYxLjQ1NzQ3ODAxNzc1Njg4NCwxNy4zNTY3NTQ5ODA1NzY3OAorMzIsRnJpIDI1IEZlYiAxMSwxLjcyMzc4MDc0MjA3MDc0OSwwLjU4NTg2NjY5ODQxNTEzNjIsNS4zNjMyNjc2ODQ2MTA5NiwyLjAxNDU2ODg3NTMyMDg0MTcsMTEuNzI3NzIwMDgzNjMwNDI5LDQzMS4yNTU5Mjg0MTk5NzUzLDE1MTQuOTEyNjA1NjIwMzE5LDIzOTYuNjkwNDAwNTc1OTE5NywyNzM0LjQwNTI1MzYzNzU4MDcsNTM3MC40MTE0MTg1MTMzNzEsMTgxLjMyMDM5NDU3NTAzMzEzLDExNDYuNDExNjAwODc0NzQ0NCwxNTg5LjUxMjAxOTA1MTI1MTYsODM3LjIwMTkwMjA3NzI3NDcsNDQ2LjgyMTk5OTM2NTY4MTksMTcxLjI5NTk0ODU2NDA5NTE3LDIzMy44OTExNDExODU0NDUzLDgxLjUyNDU1Mzc2NTU5MjgzLDE1NTQuMTc2NDAzMTk5MTU4Niw1MTAuNDk4Mjc5MzAzMjg4NjUsOTc0Ljk5MjE1MjY1MTgyNjQsMTU4NC43MDk3MjA2NjUzOTEyLDE1MjkuMTI4MTQxNzU0MDc1LDI2NzkuMDY4ODk0MzY5NjM5LDYxLjQ1NzcyMzg0Nzg5ODAzLDE3LjM1NjgyNDQwNzY2MTM5NgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Jbm9jdWxhdGlvblRlc3RfRkRfUmVmZXJlbmNlL0h1bWFuUG9wdWxhdGlvbk1vZGVsL2h1bWFuL0luY2lkZW5jZV8wLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvSW5vY3VsYXRpb25UZXN0X0ZEX1JlZmVyZW5jZS9IdW1hblBvcHVsYXRpb25Nb2RlbC9odW1hbi9JbmNpZGVuY2VfMC5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmMyNDQwMQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvSW5vY3VsYXRpb25UZXN0X0ZEX1JlZmVyZW5jZS9IdW1hblBvcHVsYXRpb25Nb2RlbC9odW1hbi9JbmNpZGVuY2VfMC5jc3YKQEAgLTAsMCArMSBAQAoraXRlcmF0aW9uLHRpbWUsCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0lub2N1bGF0aW9uVGVzdF9GRF9SZWZlcmVuY2UvSHVtYW5Qb3B1bGF0aW9uTW9kZWwvaHVtYW4vSW5jaWRlbmNlXzEuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Jbm9jdWxhdGlvblRlc3RfRkRfUmVmZXJlbmNlL0h1bWFuUG9wdWxhdGlvbk1vZGVsL2h1bWFuL0luY2lkZW5jZV8xLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYzI0NDAxCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Jbm9jdWxhdGlvblRlc3RfRkRfUmVmZXJlbmNlL0h1bWFuUG9wdWxhdGlvbk1vZGVsL2h1bWFuL0luY2lkZW5jZV8xLmNzdgpAQCAtMCwwICsxIEBACitpdGVyYXRpb24sdGltZSwKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvSW5vY3VsYXRpb25UZXN0X0ZEX1JlZmVyZW5jZS9IdW1hblBvcHVsYXRpb25Nb2RlbC9odW1hbi9JbmNpZGVuY2VfMi5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0lub2N1bGF0aW9uVGVzdF9GRF9SZWZlcmVuY2UvSHVtYW5Qb3B1bGF0aW9uTW9kZWwvaHVtYW4vSW5jaWRlbmNlXzIuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRhZDFhNWIKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0lub2N1bGF0aW9uVGVzdF9GRF9SZWZlcmVuY2UvSHVtYW5Qb3B1bGF0aW9uTW9kZWwvaHVtYW4vSW5jaWRlbmNlXzIuY3N2CkBAIC0wLDAgKzEsMzMgQEAKK2l0ZXJhdGlvbix0aW1lLEVHLUZSRy1HMjEwMDAxLEVHLUZSRy1HMjEwMDAyLEVHLUZSRy1HMjEwMDAzLEVHLUZSRy1HMjEwMDA0LEVHLUZSRy1HMjEwMDA1LEVHLUxPRS1HMjQwMDAxLEVHLUxPRS1HMjQwMDAyLEVHLUxPRS1HMjQwMDAzLEVHLUxPRS1HMjQwMDA0LEVHLUxPRS1HMjQwMDA1LEVHLUxPRS1HMjQwMDA2LEVHLUxPRS1HMjQwMDA3LEVHLUxPRS1HMjQwMDA4LEVHLUxPRS1HMjQwMDA5LEVHLVVQRS1HMjkwMDAxLEVHLVVQRS1HMjkwMDAyLEVHLVVQRS1HMjkwMDAzLEVHLVVQRS1HMjkwMDA0LEVHLVVQRS1HMjkwMDA1LEVHLVVQRS1HMjkwMDA2LEVHLVVQRS1HMjkwMDA3LEVHLVVQRS1HMjkwMDA4LEVHLVVSRy1HMzAwMDAxLEVHLVVSRy1HMzAwMDAyLEVHLVVSRy1HMzAwMDAzLEVHLVVSRy1HMzAwMDA0CisxLFR1ZSAyNSBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMixXZWQgMjYgSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzMsVGh1IDI3IEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCis0LEZyaSAyOCBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorNSxTYXQgMjkgSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzYsU3VuIDMwIEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCis3LE1vbiAzMSBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorOCxUdWUgMSBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorOSxXZWQgMiBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTAsVGh1IDMgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzExLEZyaSA0IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxMixTYXQgNSBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTMsU3VuIDYgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzE0LE1vbiA3IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxNSxUdWUgOCBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTYsV2VkIDkgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzE3LFRodSAxMCBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTgsRnJpIDExIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxOSxTYXQgMTIgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzIwLFN1biAxMyBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjEsTW9uIDE0IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyMixUdWUgMTUgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzIzLFdlZCAxNiBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjQsVGh1IDE3IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyNSxGcmkgMTggRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzI2LFNhdCAxOSBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjcsU3VuIDIwIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyOCxNb24gMjEgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzI5LFR1ZSAyMiBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMzAsV2VkIDIzIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCiszMSxUaHUgMjQgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzMyLEZyaSAyNSBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Jbm9jdWxhdGlvblRlc3RfRkRfUmVmZXJlbmNlL0h1bWFuUG9wdWxhdGlvbk1vZGVsL3J1bnBhcmFtZXRlcnMuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Jbm9jdWxhdGlvblRlc3RfRkRfUmVmZXJlbmNlL0h1bWFuUG9wdWxhdGlvbk1vZGVsL3J1bnBhcmFtZXRlcnMuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIyOTUwNjYKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0lub2N1bGF0aW9uVGVzdF9GRF9SZWZlcmVuY2UvSHVtYW5Qb3B1bGF0aW9uTW9kZWwvcnVucGFyYW1ldGVycy5jc3YKQEAgLTAsMCArMSwyIEBACitwb3B1bGF0aW9uSWRlbnRpZmllcixuYW1lLHRhcmdldElTT0tleSxiaXJ0aFJhdGUsZGVhdGhSYXRlLHRpbWVQZXJpb2QKK2h1bWFuLEh1bWFuUG9wdWxhdGlvbk1vZGVsLCwzLjlFLTUsMy41RS01LDg2NDAwMDAwClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Jbm9jdWxhdGlvblRlc3RfRkRfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL0Rpc2Vhc2UgRGVhdGhzXzAuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Jbm9jdWxhdGlvblRlc3RfRkRfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL0Rpc2Vhc2UgRGVhdGhzXzAuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJjMjQ0MDEKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0lub2N1bGF0aW9uVGVzdF9GRF9SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vRGlzZWFzZSBEZWF0aHNfMC5jc3YKQEAgLTAsMCArMSBAQAoraXRlcmF0aW9uLHRpbWUsCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0lub2N1bGF0aW9uVGVzdF9GRF9SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vRGlzZWFzZSBEZWF0aHNfMS5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0lub2N1bGF0aW9uVGVzdF9GRF9SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vRGlzZWFzZSBEZWF0aHNfMS5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmMyNDQwMQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvSW5vY3VsYXRpb25UZXN0X0ZEX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9EaXNlYXNlIERlYXRoc18xLmNzdgpAQCAtMCwwICsxIEBACitpdGVyYXRpb24sdGltZSwKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvSW5vY3VsYXRpb25UZXN0X0ZEX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9EaXNlYXNlIERlYXRoc18yLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvSW5vY3VsYXRpb25UZXN0X0ZEX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9EaXNlYXNlIERlYXRoc18yLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YWQxYTViCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Jbm9jdWxhdGlvblRlc3RfRkRfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL0Rpc2Vhc2UgRGVhdGhzXzIuY3N2CkBAIC0wLDAgKzEsMzMgQEAKK2l0ZXJhdGlvbix0aW1lLEVHLUZSRy1HMjEwMDAxLEVHLUZSRy1HMjEwMDAyLEVHLUZSRy1HMjEwMDAzLEVHLUZSRy1HMjEwMDA0LEVHLUZSRy1HMjEwMDA1LEVHLUxPRS1HMjQwMDAxLEVHLUxPRS1HMjQwMDAyLEVHLUxPRS1HMjQwMDAzLEVHLUxPRS1HMjQwMDA0LEVHLUxPRS1HMjQwMDA1LEVHLUxPRS1HMjQwMDA2LEVHLUxPRS1HMjQwMDA3LEVHLUxPRS1HMjQwMDA4LEVHLUxPRS1HMjQwMDA5LEVHLVVQRS1HMjkwMDAxLEVHLVVQRS1HMjkwMDAyLEVHLVVQRS1HMjkwMDAzLEVHLVVQRS1HMjkwMDA0LEVHLVVQRS1HMjkwMDA1LEVHLVVQRS1HMjkwMDA2LEVHLVVQRS1HMjkwMDA3LEVHLVVQRS1HMjkwMDA4LEVHLVVSRy1HMzAwMDAxLEVHLVVSRy1HMzAwMDAyLEVHLVVSRy1HMzAwMDAzLEVHLVVSRy1HMzAwMDA0CisxLFR1ZSAyNSBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMixXZWQgMjYgSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzMsVGh1IDI3IEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCis0LEZyaSAyOCBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorNSxTYXQgMjkgSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzYsU3VuIDMwIEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCis3LE1vbiAzMSBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorOCxUdWUgMSBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorOSxXZWQgMiBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTAsVGh1IDMgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzExLEZyaSA0IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxMixTYXQgNSBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTMsU3VuIDYgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzE0LE1vbiA3IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxNSxUdWUgOCBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTYsV2VkIDkgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzE3LFRodSAxMCBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTgsRnJpIDExIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxOSxTYXQgMTIgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzIwLFN1biAxMyBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjEsTW9uIDE0IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyMixUdWUgMTUgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzIzLFdlZCAxNiBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjQsVGh1IDE3IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyNSxGcmkgMTggRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzI2LFNhdCAxOSBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjcsU3VuIDIwIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyOCxNb24gMjEgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzI5LFR1ZSAyMiBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMzAsV2VkIDIzIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCiszMSxUaHUgMjQgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzMyLEZyaSAyNSBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Jbm9jdWxhdGlvblRlc3RfRkRfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL0VfMC5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0lub2N1bGF0aW9uVGVzdF9GRF9SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vRV8wLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYzI0NDAxCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Jbm9jdWxhdGlvblRlc3RfRkRfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL0VfMC5jc3YKQEAgLTAsMCArMSBAQAoraXRlcmF0aW9uLHRpbWUsCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0lub2N1bGF0aW9uVGVzdF9GRF9SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vRV8xLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvSW5vY3VsYXRpb25UZXN0X0ZEX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9FXzEuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJjMjQ0MDEKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0lub2N1bGF0aW9uVGVzdF9GRF9SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vRV8xLmNzdgpAQCAtMCwwICsxIEBACitpdGVyYXRpb24sdGltZSwKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvSW5vY3VsYXRpb25UZXN0X0ZEX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9FXzIuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Jbm9jdWxhdGlvblRlc3RfRkRfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL0VfMi5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzU1M2NkOQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvSW5vY3VsYXRpb25UZXN0X0ZEX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9FXzIuY3N2CkBAIC0wLDAgKzEsMzMgQEAKK2l0ZXJhdGlvbix0aW1lLEVHLUZSRy1HMjEwMDAxLEVHLUZSRy1HMjEwMDAyLEVHLUZSRy1HMjEwMDAzLEVHLUZSRy1HMjEwMDA0LEVHLUZSRy1HMjEwMDA1LEVHLUxPRS1HMjQwMDAxLEVHLUxPRS1HMjQwMDAyLEVHLUxPRS1HMjQwMDAzLEVHLUxPRS1HMjQwMDA0LEVHLUxPRS1HMjQwMDA1LEVHLUxPRS1HMjQwMDA2LEVHLUxPRS1HMjQwMDA3LEVHLUxPRS1HMjQwMDA4LEVHLUxPRS1HMjQwMDA5LEVHLVVQRS1HMjkwMDAxLEVHLVVQRS1HMjkwMDAyLEVHLVVQRS1HMjkwMDAzLEVHLVVQRS1HMjkwMDA0LEVHLVVQRS1HMjkwMDA1LEVHLVVQRS1HMjkwMDA2LEVHLVVQRS1HMjkwMDA3LEVHLVVQRS1HMjkwMDA4LEVHLVVSRy1HMzAwMDAxLEVHLVVSRy1HMzAwMDAyLEVHLVVSRy1HMzAwMDAzLEVHLVVSRy1HMzAwMDA0CisxLFR1ZSAyNSBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMixXZWQgMjYgSmFuIDExLDMuNzcwMTI4NzkzOTc0NTUxN0UtNCwwLjAsMC4wLDAuMDYyNzI3Mjk1MzA1NDM2ODIsMC4wLDAuMDIyNjYxNjI5NDU2NzQ0MjgsMC4wLDAuMCwwLjAwOTczMTkzMTM5NjEzODAwOSwwLjAwNjk1NTQyNjExODQ5ODg4MiwwLjAsMC4wLDAuMCwwLjAsMy42OTEyNjgxMDMzNDU0MjE1RS00LDUuNDQxNDg3NDU5MjQ5NTczLDAuMDYzNDk1ODYzNzc3NTUwNjgsMC4wLDAuMCwwLjAyNTIyNDM1NzY1ODE4OTA3NSwwLjAsMC4wLDAuMCwwLjAzOTEwMTU4NzMyMzMxMTExNCwwLjAyMzA3NzA1NjQ0OTk1NDExNCwwLjAKKzMsVGh1IDI3IEphbiAxMSw0LjkwMDk1ODkzNTkwMjMzM0UtNCwwLjAsMC4wLDAuMDgxNTQyMDAxNzU5NjczNDgsMC4wLDAuMDI5NDU4ODY0OTgxMzkzMjQ2LDAuMCwwLjAsMC4wMTI2NTA5NzI2MDYxMTI4MiwwLjAwOTA0MTY2OTMwMzExMjEzOCwwLjAsMC4wLDAuMCwwLjAsNC43OTg0NDQ0MDM3Njk4NDMzRS00LDcuMDczNjI3ODI3NzcyNjM0NSwwLjA4MjU0MTExMDYwODY1OTYsMC4wLDAuMCwwLjAzMjc5MDI2OTc1OTI2MTMxLDAuMCwwLjAsMC4wLDAuMDUwODI5OTAwOTc2OTAwNzUsMC4wMjk5OTg4OTYxNDI1OTA1OSwwLjAKKzQsRnJpIDI4IEphbiAxMSwwLjAwMjI5Nzk4NTg4NjM4MDMzNjUsNS44NTI0MDc1MDc0NTA3MTFFLTQsNC4yMDIyOTgzMjM5MDA1MzVFLTQsMC4yODA4OTExNTk1NDcyODI4MywxLjUyMzMyODM1MzgyODY2NzdFLTUsMC4xMjgwMzA2NjczNzE1NjQ2NSw0LjMyMTc2NjE4MjgwMTI5NzZFLTUsMC4wMDIzNTY5ODM4ODg0ODM3MTc2LDAuMDU2MTY2NjczMzU2Mzg5MzksMC4wNDM0MzU4NDExMDIxODIyNjUsMC4wMDIwMjExOTkzMjQwNjY5NDQsMC4wMDIwMzM0MTEzNzA3NDU0MzkzLDAuMCw4LjU4NzUwMjA5MDI1MjExOUUtNCwwLjAwNjM0MzE4ODgyNTgwNjM0MSwxOC42ODMxODAyOTE4MDYxMSwwLjM3NzQ0Nzk5MTQzNDAwMTI2LDEuMjc2MTY4ODk3Mjg3Nzg3N0UtOCw0Ljg1NTk0OTg5ODk2NzMyMTNFLTQsMC4xNDc5MTM3MDY3Mjc4NzkwNCwxLjI3NzU4MTkzMzc5MzIyMTJFLTgsMS4yMzM3NDQ1MDEzNjYyMDI1RS04LDAuMDAxNjI1NjkzMjU3OTE5NzA5NiwwLjIzMjgzNjUzNjQwMzc5OTE0LDAuMTE4Mzc0MjA4NjU1MTcyMDIsMC4wCis1LFNhdCAyOSBKYW4gMTEsMC4wMDUxNDYzNjY0MTk5Njc1NzgsMC4wMDE1MjE1NzcxODQxNDE2NTY5LDAuMDAxMDkyNTYyNTMyODc5MjUxMiwwLjU5MjQ5NjU4NDQzNTA2OTgsMy45NjA1MjY3NDQyOTIyNjVFLTUsMC4yODMwODY5ODYwNTM1NDgxLDEuMTIzNjIzMjAzMTQ5NTc5OEUtNCwwLjAwNjEyNzk2MTc0NDQwODIyNywwLjEyNDY0OTk4ODY3NjQ1Mzk0LDAuMDk3NjUwMTkxNTg4NDM1MzgsMC4wMDUyNTQ5NDk3OTgwMDI1NjIsMC4wMDUyODY3MDAxNTkzMjk1MSwwLjAsMC4wMDIyMzI2Nzg5OTgwNDA5NDc3LDAuMDE1NjgwODgwNzkyOTUyMzY4LDM2LjYyMTAxNjYwNjM1NjQ4LDAuODQxODQ4MzMwNTg2MDI2OSwzLjMxNzkzMjgxNjI1NzM1RS04LDAuMDAxMjYyNTA2NTEyNTI3ODU3NCwwLjMyOTE1MTUzMDg4NTI5MjcsMy4zMjE2MDY1OTM0NTI0NzJFLTgsMy4yMDc2MzI5MjEyMDY0MzI1RS04LDAuMDA0MjI2NjY2OTk2MzYxMDQyLDAuNTE5NDU4OTI2NzMzNjEwNSwwLjI1NzA2ODM2MDY2MTI1NTI3LDAuMAorNixTdW4gMzAgSmFuIDExLDAuMDE0NjIyOTU4MzMwOTgyOTI3LDAuMDA1NDcxNjU3MjA3ODY0OTMxLDAuMDA0NDMwOTE4NjYwNDM1Mjk0LDEuNDEyNDEzMTk0MDI0MDg0MywxLjgxNDE1MjU4NzA0MTE1MDhFLTQsMC43NjcxNDgyNTg1NDQxMTAzLDUuMjAzODkzODQ3MzA4OTUzRS00LDAuMDI2MjU2NTk1NTUyNzg5MDcsMC4zNDMxMzA4Mzk1NTg1MTU1MywwLjI4MTM5MjQ2MTY2OTM2OTkzLDAuMDIxMDcwNTcwNjQ3ODU1MjA3LDAuMDIzNjc3Mjg5OTM4NDczMTIsNi43NTMzOTg5MDQ0ODQ4MzhFLTgsMC4wMDk1NzM0NzQxNDY1MDk0MjUsMC4wNjA0Njc3NTIzNzAzNTAxNyw4MC4yMTc4NzMzMjQzMTg1LDIuMzU1ODE0NjcwNTE3MjEsMy45NjM0NzU1NTA4NTE3MjQ1RS02LDAuMDA1NTM0MjQyNTI0OTIwNDI1LDAuOTEzMzc0OTEyMjA4MTExNiwxLjc3Mzg4NjQxMTMwOTIxODdFLTYsNC44ODgwMjMwOTQ2MTg2OTlFLTUsMC4wMTc4OTc3OTM2MzIxNjUzNjQsMS40NTUxODI4MjQxMzgzNjQyLDAuNjU4NDY5Njk3NTUyNDk3MywxLjM4MjM1Mjk3MTk1ODI5OTNFLTYKKzcsTW9uIDMxIEphbiAxMSwwLjAzNTk4NTc0MzkwOTMxNTM5LDAuMDE0OTEwNjQ4MzE1OTA4NCwwLjAxMjY2NDM1NDYxMjIzMTMwNywzLjEyMTUzNjQ0MTIwMTY0OTMsNS40MDE4MDAyNzkwODI2NjNFLTQsMS44Mzc4OTE3MTExOTc1OTk2LDAuMDAxNTU0NzY2OTE4NTA1NTE2OCwwLjA3NjUwOTEyMzUxNjEyNzMsMC44Mjk2MjQzNDY5MTQwNDkyLDAuNjk3NzY0OTU3NjY3NDYzNCwwLjA1OTk3MjM1NzAzODEwMDQsMC4wNzAwMDQyMDc3NzI3MzE4NCwyLjYzMzc2ODgyNDc0ODQxOUUtNywwLjAyNzkwMzEyOTczNDEzMjI0LDAuMTcwMjU1NzY1MDIxNTMyMzMsMTY4LjIyNTU3Nzk4MDk5Mjc0LDUuNzQ4Njk1OTkxODE3MDMsMS41MzE3MDQ1NjExNTA0NjJFLTUsMC4wMTYyNDkyNDcwMzk1MjQxNSwyLjIxODMwNjM4MTQwODY0ODMsNi43Nzc2NzY3OTAxODM5MjNFLTYsMS45MDQ5MzI3NjcwNzg5MzMzRS00LDAuMDUxOTQzMDgwOTkxMTE5NDEsMy41NTMwNTk4Nzc3ODU5MDU1LDEuNTI0NzQ3NzY5MTAyNzk0LDUuMzkxMDYwMzkyMTg2MjI1RS02Cis4LFR1ZSAxIEZlYiAxMSwwLjA5MTM3MjgyNDEzODg0MDk5LDAuMDQxMjc4OTM1OTEyMDg0ODYsMC4wMzc0NzA4MzM4NjQyODU3MTQsNi45NDgwMjc1OTM3NDM0NTgsMC4wMDE3Mjc1OTQ2MDU3OTgxNjc1LDQuNDk5MTg5NTkxNzA1MDU5NSwwLjAwNTAxODY2OTE2NTE5MjUzNSwwLjIzNDc1Mjk2NjYxMDU4MzU0LDIuMDU4NjQ3NTYyODYyNDUyMywxLjc4OTczMTUzMDIyMTg0OTMsMC4xNzYzMDgwNzQ2MjUzMDkyMywwLjIyMDgyNDA0MzYyMjQxOTc1LDEuMzAyMzM4OTA2Mzc2NTg2NUUtNiwwLjA4NTYyODAxNjA4MjU1MzI4LDAuNTA2OTM1MjAyNTQzODY0NywzNTguODY1NjE2NTAyNzY3NSwxNC40MjkxMTA2ODI3NDg1LDYuNDY5NTg4NzA3MjQyNDI4RS01LDAuMDUwNjEzNTM1MTE5MDkzMzUsNS41MzI0MjIwMzQ4MTg5NjYsMi44NDcyMTI0Njc2MDYwNDE4RS01LDkuMDQyMDY5NjE0NTMzNDQ1RS00LDAuMTU4MjMxNzc4MDU2NDYxNTgsOC45MjU1NzExMDQ3MjIxNywzLjU3NzE1NzE4MTQ2NDIwNywyLjMyMDMxMzA5MjgzNTg1NDJFLTUKKzksV2VkIDIgRmViIDExLDAuMjI0MDUwNTE3MjgxMTgzNDcsMC4xMDcxOTUzMjA5OTIzMDAxNywwLjEwMjI0OTg0OTc3NDM5MzI4LDE1LjE5NzIwNDM2NTY5NTc5NSwwLjAwNDk4NzIwNjQzMjMzNjAwNiwxMC42OTI3MDAwNjY2MzczODYsMC4wMTQ1ODM5NDgwNzk3MTMxMTIsMC42NTgxNTE0MTk2ODY1Mjc3LDQuOTUxOTgwNjM5MjczMzUwNSw0LjQyNTIzMDUyOTEwMzQ5MywwLjQ3ODg0MDE0ODEzODQ0MTMsMC42MzE0MTY2MDMyNjQ1NTQ0LDQuNjk0OTc4NDMzNjg5MTg3RS02LDAuMjQwMDgyMDE2MDU0MTA5ODQsMS4zOTYyNjg3Njk3NTcyMjE4LDc2MC42MzMwODg3ODkxNzAyLDM1LjAzNzkxNDkyOTA0NTYsMi4xNTgzODg0ODE1ODk5NzEzRS00LDAuMTQzNDUxNTQ0MDE2MDMsMTMuMzYxNTU3MDM0MjAzNDg2LDkuNDgyMjkzMjI5MjUyOTYzRS01LDAuMDAzMTk5NzIxOTI2MzczOTAxLDAuNDQxMzE0ODMzOTA3ODUyMywyMS42ODkzODA2NTcyNDM5MjcsOC4xOTI2Mzc3OTU4NzExMDUsNy44MTM4NjA3ODM1MzMyNjlFLTUKKzEwLFRodSAzIEZlYiAxMSwwLjU0ODAwNTg0NTc4NDUxNjksMC4yNzQxMTU3NTYzNTI5NTQ5LDAuMjc0MzI1NTg3MzQzMjY5MDYsMzMuMDk5NTk1NTM3NDg5Nzc2LDAuMDE0MjU1NjA1MTc0MTcwODEsMjUuMjk3NzYxOTgxNTAzOTE0LDAuMDQyMDUxNzYyNDg4NDI1NjA1LDEuODIwNTQzNjMzNzU2Njc3LDExLjg3NjM0MDk4Nzc0OTE4OCwxMC45MTc0NTczNTU3MDM4NDYsMS4yNzg4Njc0ODI4ODQ1NjQzLDEuNzg1NDU3OTIzMjI2Nzc0MiwxLjY3NzYyNjU5NzI4NDU0MjJFLTUsMC42NjQwMzAyMDE1MjE1Njc0LDMuODEyMTA2MjE5MjQ0NDc1LDE2MTYuNTcxMTg4NTc4MDQ5Myw4NC44MTQ4NzAyNzU3MTMwNiw2LjkzNTA4MDQ1MzA2OTEzN0UtNCwwLjQwMTc5ODE0MTgzNjk4NjgsMzIuMTU5NDk1NDk0MTg4MTIsMy4wNTAxOTc2MDc2MDU1MjQ0RS00LDAuMDExMTA3MTk1Mzk0NTUwOTk2LDEuMjEzNzQ2MjY4OTUzMjIzLDUyLjU0NDY4OTIxMTY2NTU1NiwxOC42NjM2MjgxMTgxNDQxMSwyLjUyMTg4Mzk0NTgzMDMxNUUtNAorMTEsRnJpIDQgRmViIDExLDEuMzIzNDQxMTQ4NDE2MDYwMiwwLjY4NDQzMzQ1NjI5MTE5NTYsMC43MTM5MjU2MTc5NDEzNDUzLDcxLjYyNjczMDQ1MzU2NDAyLDAuMDM5MjkyNDQ3Njk4MzMyMyw1OS4xNzgwNzkxMzk0Njk1OSwwLjExNjg1NzMwOTc1Nzg0NTg2LDQuODczMjAwMDIxOTM5NjksMjguMTYyNjk1MDEwODYxNjcsMjYuNTc3NzY0Mjk0NTkyNSwzLjMxNTUyNTA3OTAwNTk5MTYsNC44NzQyNjAwMzY1NzIxNDksNS40ODAyNjI4OTA5NDM5MjI0RS01LDEuNzc3MTMzNzMyNDQ3NzQ1NiwxMC4xMTIyODI5MDM4NzMwNDQsMzQzMi40NzU4Njg4MjQxMjEzLDIwMi44MTM5MTg0ODgxOTk2MiwwLjAwMjA3NzQ3NzQ5OTExNDIwNCwxLjA4NzgzNzMyNzkyNDA2Myw3Ni40ODU4NDc3MTA3MDM1Miw5LjE1NDUyMDcyMjQyNDA4OUUtNCwwLjAzNTQ0ODA4MDU0NzczNjY1NSwzLjIzMjE2MzQwMTczNjUwMTcsMTI1Ljc0NzYxOTIwNjU5OTExLDQyLjExODA1NzE2MzM0ODcxLDcuNTY2MDExNTQxMzIyOTI1RS00CisxMixTYXQgNSBGZWIgMTEsMy4xNzY5MTYyNTg0MTc3NzY0LDEuNjg2MjQzMDE4Mjk1NDY5MywxLjgyNjM1OTY2ODcwMzE4OSwxNTQuNDMyMjcxMTEyMjY4NzIsMC4xMDY0NzE5MTUzMTg4NDU0OSwxMzcuNTc4MTA5MDk2OTg4MTMsMC4zMTk0NzQ1Mjc1MzQ4MjUyLDEyLjgyNjMxMjEwMzU1NzI3OCw2Ni40MTgyODM1NzA2Njg3NSw2NC4zMDEyMjc3NzcwNDU2OCw4LjQ1NDE4ODU1OTQ1MjA0OCwxMy4wODE3NTMwMDI5OTUyMDUsMS43MzQxNzQxMTQwOTc0NDFFLTQsNC42NzU5NDI1MDk2MTA3MjksMjYuNDQyNDUxMjQxMDEwNjMsNzI5MC40NzQ1ODk2MTQzNDUsNDgyLjAyODc5OTI3ODM0MzMsMC4wMDYwMTQ5NDI5MTQwODg4ODE1LDIuODk2Mzk5MTA4OTQ1MzksMTgwLjgwOTUwMTQ4NjY2ODgsMC4wMDI2NTg5OTE0MDc5NTg1MTkzLDAuMTA5MzczMjQ5MDkzNjM5LDguNDYzMjcyMDUzODU2NjkxLDI5OS4xMTk2NDgxMjg3NjQzNyw5NC41MjM3MjI1NzQ1ODIzNCwwLjAwMjE4NTc3NTc2Njc5MzIxMjMKKzEzLFN1biA2IEZlYiAxMSw3LjU3MzIyMzM5OTQxOTgxOSw0LjEwMjE0MzkxNzc1NjE4NjUsNC41OTQ1MTk2NjkwMzYwMzksMzMxLjgyOTIxMTAwMTM1OTg1LDAuMjgzMDI4NDg0NzA1NTAxMywzMTcuNzkxNTA2OTEyMTY2NTQsMC44NTY4MjUzMTMzNjU1Mjg4LDMzLjE2ODUzMDgxMDk4MjgzLDE1NS42ODk1ODM5ODc0ODIxNywxNTQuNDM0MTQ4MTkyMjUzMiwyMS4yMTE0NjQ2NDU5OTEzODQsMzQuNDU4OTA0NDM5NDcwMjI0LDUuMjcxNjE3NTg1NjkyMDIyRS00LDEyLjA4NjkyODk5MjU4NjM2NCw2OC4wNjE2MDM3Mjg1Mjg5MSwxNTQ3NS45ODk4NDkxMzQ4NDcsMTEzNy44MjY3MjQ0NTUzMjIyLDAuMDE2ODQ1NzU0MDk4NzQ1NjksNy41NzM2NzYxNzE3MzA4MjEsNDI0LjU4NDUwMjExODczNDYsMC4wMDc0NzUyMjU5OTQ2MjIxMzUsMC4zMjQ2OTY3NTQ5OTQ2MzUyLDIxLjc3Nzg5MTEyMDEyNDEyLDcwNi43MTUzNTYzMTM2NTA3LDIxMS4wMDM5NDQ0NDcyMzg4LDAuMDA2MDkzNjkzNjQxMzI5ODAzCisxNCxNb24gNyBGZWIgMTEsMTcuOTYwMzU0MTc0MDk0OTYzLDkuODg1ODUzOTIzODk1MzE3LDExLjQxMTk5Nzk2MDMwMDg5LDcxMS4wMTE5MzI4OTI5MTY1LDAuNzQxOTg0ODEyMjcxNzg5LDczMC40NDI3MjQzNjM2MTc2LDIuMjY2OTMzOTA3ODI2MTg2NSw4NC42NTkwODA0MDUxNzEyMSwzNjMuMzI5NDQ5MzEwNDM2MzYsMzY4LjkwODE0MzMyOTA0NTIsNTIuNTc3MzY1NzUwMTc4OTEsODkuNTM1MTMzMjM5ODUwNjQsMC4wMDE1NjE0NjQ5MjU2NzkxOTU3LDMwLjgzNDc4NzE0ODk1NjQzLDE3My4xNDI1OTQ0NDk0OTM0LDMyODE3LjA4NTE3OTQ1NDM1NiwyNjcxLjgxMDA3MzkyNTk1NywwLjA0NjA4NjExNjE0MTMxMjQ3LDE5LjU0MzYxOTI1MDU0MTEwNiw5OTEuOTczOTMxMDc5ODY4OSwwLjAyMDU0Mzg0Njk5MTM4NDU2MiwwLjkzOTE5MzgzMTc4Mjc1MzcsNTUuMzE2NTM4NTM0NDkxNiwxNjYxLjIyNDQ0NDYzNDEzMDgsNDY5LjA1MDIwODg1NzcyNjYsMC4wMTY1NTQ1MTgxNjU5NjUxNTIKKzE1LFR1ZSA4IEZlYiAxMSw0Mi4zODkyMjY0Mjc1OTMzODUsMjMuNjMxMTQyMzAyOTYwMzc0LDI4LjAzMDEwNzA0OTAyOTM2NSwxNTE4LjgyODE4Mjg1MzAzNDQsMS45MjA1ODM0OTI0MDcxODQsMTY3MS4zNzk4ODQ4MDUyNzY2LDUuOTIyNDY5MDA2MjU2MjQsMjEzLjU2ODE5MDAwMTYxNTIyLDg0NC40NDUyOTE2MjE2MzMxLDg3Ni43NjIzNzI5ODE2NjksMTI4Ljk1MjE3MjMwMzQ3MDA0LDIyOS43NjE0ODk2MDI0OTcwNSwwLjAwNDUxNDY1MzEyNTQ4NTMxOSw3Ny43NDAwOTUwMDA2MTkxNCw0MzUuNzUyMzEwMTc2MTEyODcsNjk0MDMuNDg0OTk2NzcyNTcsNjI0Mi4zMzQ5MTUyMDc2NTQsMC4xMjM1NjIxNTczMDY1MjkwOSw0OS44MzA4MTkxMDE4MTM5OSwyMzA2LjUwMjE2Mjg1NjU5NCwwLjA1NTM2MjI4ODM5NDk5NTExLDIuNjUzNTMwMzAwMzkwNzM4LDEzOC44ODY1NTc4ODc4MTg4LDM4ODYuMzE5ODE5NjY3NDQ4NCwxMDM4LjU4ODE4MDY4ODAzMTEsMC4wNDM5OTI2MDUxMTY5NjUzNworMTYsV2VkIDkgRmViIDExLDk5LjYzMDU3NzM3Nzk3ODg1LDU2LjEwODAxOTgyNDI2MTU3NSw2OC4yMDIzNDg2NzIxNDEwMywzMjMwLjg5NDM5NjYyODYyNSw0LjkxODk5NDg1MTY1MzYxOSwzODA5LjI3NDY2MTcxNzY0MzUsMTUuMzEyMDk1MzA3NjczMDQ0LDUzMy41MzQ2Mzg1MDk2NzU3LDE5NTUuODI1NDA0NDg0MTgyNCwyMDc0LjYwMjM0NDEyNjM0MDUsMzEzLjUwMjY5Nzk3NTA3MjM1LDU4My41MDk2Nzg2NzI1NDc0LDAuMDEyODA1NTM1Mjg3MTc3NDQ4LDE5NC4wNzkxOTQxNzcyMjU4MiwxMDg2LjczNDg2NTAxNTAxMjcsMTQ1OTE1LjE0NDQ5MDE0MDAyLDE0NTE0LjIxODgyMjg2NjczNiwwLjMyNTk1OTQxNjU3NTgzNzA1LDEyNS43OTIzMzIzNzY5MzE3NSw1MzM5LjI2MTUxNDM2ODUzLDAuMTQ2ODc3NzQ0NTI3ODg4MzIsNy4zNTcxMjYxNTMwMjYzOTEsMzQ1LjM1MjM0ODc2OTc5OTk2LDkwNTMuMjUzMDkzODQ4NDY3LDIyOTAuNTQwOTY0Njg0OTI5MywwLjExNDgzNTQ4OTk1MTU3Njg2CisxNyxUaHUgMTAgRmViIDExLDIzMy4yNTI0MjMxOTE5OTIyLDEzMi40MjM3MjE5MjI3NjI3LDE2NC41NjM0NzI5MjI4NjgzOSw2ODIzLjEzMjAwNjM5ODQ1MywxMi40ODA3MTc1ODUwNDUxOTgsODY0OC4xODg4NzU0NjA0NDgsMzkuMjIyMzIwMjE0OTAyODYsMTMyMS40NTgzMTgyMjI1MSw0NTE0LjgzNzg5Njc2NDUxMiw0ODg4LjQ3MDkzMjg2NjI4Nyw3NTYuMzE4MTM3MTkyNTE2NiwxNDY4LjI4Nzg5MjczNjc0NjcsMC4wMzU3MTU0MTgwNDIxMjU4MzYsNDgwLjM0Nzk3NjA3MTQwMzQsMjY4Ny45NTAxODM3MzA1OTk3LDMwMjg0NS44NzYzOTU4Njk0LDMzNTU5Ljk2NDc0ODMzNjIzNSwwLjg0ODA5MDIxNjcxMjI5NzIsMzE0Ljc1MDk1ODM4OTc2NjUsMTIzMDAuMjczMTQ5MzQwMTQsMC4zODQ1MTY5ODQ0Nzg2NTg4LDIwLjA2NjI0MjExNDc0NTg2LDg1MS40NTY4NTQ1MTMxODA1LDIwOTk5LjcyNjQ0NTc1ODc2LDUwMjYuMDM0NzA0MzcxNTIsMC4yOTUyMzk3Nzg0NjM4ODI0CisxOCxGcmkgMTEgRmViIDExLDU0My45NDE5OTY0MjI5ODkxLDMxMC43OTcwNDgwMTY3MTk1LDM5NC4wMDIyNzE0Mzc4NjE4NSwxNDIwNS42MjE1NDQ2NTQxNDYsMzEuNDA2NjYxNDgwODM5NzYsMTk1NTAuMjI3NjQwODc3MDUsOTkuNjU4MDg5MDg5ODQ0MjQsMzI0OC4yMjg2MjQ4NzE5OTMsMTAzODUuNTAwMzczMjE0Nzc0LDExNDcwLjQ2NDk3MjI4NTM0LDE4MTEuOTQ3MTkzODQ0ODIwMywzNjY0LjYyMDQzNDM4ODQyODMsMC4wOTgxOTM1MDU1MDIyNjA5NCwxMTc5Ljg3MzkyNTc5NTI0MzIsNjU5Ny40NzEwMzA1MjM0MTMsNjExMjg2Ljk5NDQ3NDQ4MzMsNzY5OTEuNDEyNjQzMDUwMjIsMi4xODA5MjgyNzAxNjQ0NTE1LDc4MS40MTU4ODk0NzA3Mjg5LDI4MTU5LjU4MDg1NTM3MDA0NCwwLjk5NTQyMzk0ODMxOTY5ODcsNTMuOTY4Njg5MzcwNTUyOCwyMDgzLjUxNTI2NTU4NTUxMjcsNDg0NzIuNTczNjc4OTc2NTQsMTA5MzkuNjA3OTgyMDc0MDUyLDAuNzQ5MzMzNzI3NDgyMzU4NworMTksU2F0IDEyIEZlYiAxMSwxMjYyLjY3ODg3NjU2NTg3NDYsNzI1LjA4NzU0ODkyNjEyMzEsOTM1LjgxMjExNjQ0MjIxMDksMjg3MTYuNDQ1ODk1Nzk0OTU0LDc4LjQ0NDAzODgyODU2MzIxLDQzOTQyLjg5ODg4ODQzOTc3LDI1MS4zODQ2MTM5NzA4ODA0Miw3OTI4LjQxNDA2NTI2MzEzNywyMzc4Mi4zNDc1Mjk4MjI1NjgsMjY3ODEuNTI5Mzg4NTU5NzM1LDQzMTEuMTAyNTg4MDQ0MjQ2LDkwNzcuNTU2NjkxMzY5NjA2LDAuMjY2NTgwNTg2NDgzNTQ4OCwyODc4LjE2MTQxOTgxOCwxNjA2NC44MzYwNTQ4NzExNTUsMTE2MTcyMC45OTY2MTgwNDM2LDE3NDIyNy4xMzg0MTIzNDgxLDUuNTUxODIwNjE3NjgxMjg4NSwxOTI2LjAwOTE2MDAxMDQ3NjUsNjM4MTQuMzk3MDczMDk1NzIsMi41NTIwODc2MzY5OTI0MjgsMTQzLjM3ODAxMTE1NzkwMTMsNTA2My4xNTM5OTQwMTk2ODM1LDExMTExNC43OTUyOTUxODkyMSwyMzQ1Mi4yNzMxMjY2ODM5OTUsMS44ODA2OTQ5NjA0NTM0MzI5CisyMCxTdW4gMTMgRmViIDExLDI5MTIuNDIzNDI3NDMxMjYsMTY3OC40OTEyODEwNjkxNzAzLDIyMDAuOTM3MzY5MjQyNTAzLDU0NTQ4LjM1NjU0MTExNTI5NiwxOTQuNTY5OTU4NTA5MzUyMzIsOTc4NTQuNzIzNzY5MDg3MDUsNjI5Ljk2MTI5OTA2MDQ1NDIsMTkyMTYuNzQwMDY4NjQyNDIzLDU0MDc3LjM2NjE3NTY4NDA3NCw2MjA4OS45ODg3ODc4NDEzNiwxMDE3NS4yNjAwMzMxMjk4NDksMjIzMTkuMTk1Njg0NjQ1NTA3LDAuNzE1NzQzOTcyOTQ3MjA0OSw2OTc0LjczNTE5NDI2NTU4MDUsMzg3MzguNDE3OTI2OTU1NiwxOTM1NjY0LjMyNjc5MjYzNCwzODM1NTQuNDk2NDg4NTc1MjQsMTQuMDA3NjY5NzcxMzE0MDcyLDQ3MTMuNjI5MjI5NTMyMDQ1LDE0MTgyOC4wOTAxODc5NjkyLDYuNDg4MDc4MDgwMjYxNTUyLDM3Ni44MDk2ODg3NzA3MjI5NywxMjIyMC4zMzIzMTE0ODA1NjQsMjUxNjk2LjMyMTMxMTczNjQ4LDQ4NzQyLjI1MjE5Njc4MTI4Niw0LjY3MzcwMjYzMDc0MTc0NgorMjEsTW9uIDE0IEZlYiAxMSw2NjQ2LjA2ODA0OTQzMTA0OSwzODM2LjUxNjIyNjU0NTQ5NjUsNTA5OC42MTE0NzcwOTkwNTgsOTA4MjQuNDQ0NzA2MTg3MTgsNDc5LjI3NTM5MzYwNzk4MDczLDIxNDE3OC41MDg4MjMzMTE5NSwxNTY5LjAzMTczNTMzNjI2MzQsNDYxOTkuNjUxODY3MDkyNTQsMTIxMzkxLjk1NDg2Mzc2OTE1LDE0MjIxNC43NzEzMjA0MzI3MiwyMzczNy4wNDgzMTYxOTg2Nyw1NDQxNy4yODkyNzM4NjYwOSwxLjkwMjgxNDQ5OTA4MTQ0ODQsMTY3ODMuODAyOTk0OTcwMzQ1LDkyMDIwLjU1Mzg4ODEwMjU2LDI0MDUyMjguMTUxNjc3ODE0LDc5NTMyNS43NjU4MjY5Njc4LDM1LjA2MDY0Nzg2NTEyNTYxLDExNDQ1Ljc2OTg3Mjc1MTAxNiwzMDI2MDQuNTM0NTYxNDcxNywxNi4zNzAzMDIzNzI1MzQxMjcsOTgwLjcxMDU2Njk4MjUxMjMsMjkyNjkuMDc1NjkyMDE2MDQ2LDU1Njk0NC44NTkzMzA3Nzg5LDk0ODgwLjI0NzMxOTAxNjI5LDExLjUwODM3MjU2MDI5ODk3MworMjIsVHVlIDE1IEZlYiAxMSwxNzA3Ny42NTUxNTgwMjQ4MTYsOTc2MS4zODg5NjU4NzA4NDMsMTMxNDUuOTgxOTE5NDA5ODA1LDEwNTA2NS43NzQ2NDc0OTQ4LDE0MDYuMDQ4NTEzMzkxMzAwMyw1MDYwNjIuNTA0NjA4MDM3MDcsNDY5My4xMjA4NDQxOTU4NTcsMTI5ODQ2LjUyNzE1MjMyNTIzLDMwMTkwMC44NDU2MTI1NTg0LDM2NDcxOC40OTc3NjI4ODEsNjI3MjEuNzM5MTkyNTQ3MzIsMTU1OTg0LjYxNzA2MzU0MzczLDYuMjEzOTcwMTQ4MzMzOTE2LDQ3NTIzLjE4NDYwNzc0NzMzLDI0NTM4Mi44NzI4ODAzODI0LDE1OTI2OTEuNjQ3ODQ5MTA1MywxNDQxNzQwLjA2OTY2NDkyNzIsMTA1LjMxMjg2MDY2MzkxNDY1LDMyNzAwLjgwMDE3NTU2ODcyMiw2MTk2NDEuNDA1MTcxODY4Miw0OS43ODA3OTY4MTMzNDgwNiwzMTA1Ljg0MjYwODQyMTEzNzQsODIwNDAuNjEzOTc0NzUwOSwxMjkzOTE4LjE2MTE0MjU4LDE1OTA5Mi44MDc4MjAzMTMzMiwzMy42NDY5MDM0MTU3NjM4MQorMjMsV2VkIDE2IEZlYiAxMSwzOTM4Ni4yNzAxODk1ODM0MSwyMTQyNC45ODM5OTk4MzcwNiwyOTE4OS40MjQ4NjE5NTM1Miw4NDA0Ni42NTE1OTk1ODg2MSwzODgxLjkyNzEzODEwMjMzLDEwMzM4NTcuNTk1MzE2NDcyMiwxMzMwMC43Nzg3NTI1OTY0MjksMzM2MzM3LjkzNzk2MTM4NDIsNjYzNzI2LjU4OTkyMTkwNiw4MjUzMTMuNDE4NDY5OTkzNiwxNDY2OTMuNTk1MDg1MTI0MzcsNDExODQ4LjExMzA2MDk0ODk2LDE5LjEwODU1NDU2MDg5MTE4MiwxMjU4MTkuMzcxNTAwMDA0ODQsNTU3OTk3LjAzNzcxNjYzMjQsMTAwMzA2NC43MTY2MDExMDY1LDE2ODAyNjIuNzMzMzMyNjA1OCwyOTkuMDYwNjQ5NzczNTM5OCw4NjY2OS4zNTE2ODA1MTI4LDkwNjYxOS4wMTY2MzkwODUsMTQzLjE4ODg0NDI0MjczNDgzLDkyNjAuODY4Mjc1NjQ5NDQyLDIxMzM5MC45Nzg1NzE5OTAyNywyNDIwMzAzLjMzNTUzMTA4LDE4MzkxOC4wNDI2NzY2MTAyMyw5Mi4zNDc3MTkzMTAzMDA5CisyNCxUaHUgMTcgRmViIDExLDc5MDI3LjE2NDI4OTQxNjIyLDM5MTk0LjMwMTAwOTY3MzgyLDUxMDM3LjU3MTgwNTQ1Nzg3Niw1Mzg0Mi41NDg1NzIwNjQ4NywxMDg2MS4xNjYyNjI5MzUwODcsMTY4Njg4OC4xNTA0MTUyOTA0LDM4ODk5LjYxMDE2NDY4ODM2LDgxNzA0MS4zNDM3NTY2NywxMjE4OTM2LjQ2OTkyMTcxODEsMTU0NjkyMS4xMjExNjkyOTI2LDI4ODk0Ni45NDM2MzM0MDYyLDEwMjI2MzkuODEzMTc1ODI2NCw2MS40MDg3OTg4MTM0ODYzMTQsMzI2NTAyLjY2MjQyODc0NDMsOTcwODE3LjQ5NzM4NzQ0NTQsNjQyNzIyLjIxNzA5NzY1NTgsMTE0NDg1MS44MDU4NzA2MzMsODc0LjYyMTQyNTM2OTYzNTcsMjI1OTA4LjA3NDk0NTc0NTcsNzY3OTg5Ljc0MDc4NTk3MzcsNDI1LjY1ODkwNjIyNTYzLDI4NTg5LjkzNzI3MjgwODY4LDUzMTUxNy4zMjAxMDg5NjI2LDMwNDk4MjguMTQwODI5MzA1LDEzMzU4NC41NTU1MjA2MjA5MiwyNTQuMzQzNTY2NDE4NDAwNDYKKzI1LEZyaSAxOCBGZWIgMTEsMTA1NDE3LjAyMzU5NjMxMTE2LDU1ODM3LjcyMjE3ODkwMzIxLDUyMjYyLjQ0MjMxOTMxOTAxNiwzNDc5My4zODIxOTM0NTc2ODQsMjkyMTMuNDU3ODgxMDU3OTksMTY5NTY3NC4xNjk0NjQ0ODIsMTE0NDI2Ljc2ODEzNjUxNjMsMTUwMjE2My41NTU1ODQ5ODk1LDEzOTk5MTkuODU3MTk4Nzc0LDE3Njc0MTguMzQ3Mjk0NjE5MywzNjI1MTMuODc3MzM1Mzg2OTMsMTkyNDE3OC4wNTExNTUyMjIzLDIwNC45NDkzOTg3NzkxMjE3NCw3MjkxMjIuMzAyNDQ4NTMwNiw5MzkyODguNTc4Njg5NzQwNyw0MTU0MTEuNzEyODk2ODgxODYsNzM5NzQ2LjM0MjI0NTY1OTIsMjU4Ny4wNTI1ODY0OTc4MDYzLDU0NDY1OS40NTEzMjYwNzI5LDQ5Njc3My4yNjE4NTQwOTkxLDEyODguMTc2MjE5MjAwOTU4Nyw4OTQ0OC40NjA2MDcxMTkwMiwxMDY2NjY5LjczMzI0MzEwMDYsMjIzMjYxMS43MjI0NTkyNTM0LDg2MzA3LjQ2OTE1NDQ3NzQxLDY1Mi41NDI4MDk0ODg1ODI5CisyNixTYXQgMTkgRmViIDExLDgzMzUxLjQ2ODI2NjU2OTIsNjYyOTcuMDIwOTYyNzg1NjUsMzU2NzguODIzMTM2MjE0ODY1LDIyNTI3LjA3MDEwNzk2ODc0LDY2OTkxLjY2NjE0MTAxMzc2LDExNjY3NjIuODU4OTE1MDk2NCwzMTczNTAuMTA2NTIyMDIxOSwxNjAzNTA1Ljg1MDIyNDIyMTgsMTAwNTAxNi4yMzI5ODE1NjU2LDEyNTU3NzYuNTYwMTMyMzA1LDI3NTc2NS4wNTAzOTI2MTQ4NSwyMDg5MzIyLjQ5MTQzNTYzOTMsNjc3LjM4OTQwNzE1MTg1MzIsMTEwODE1NC44NTM0OTk2NTI2LDYyNjI0My4zNzIxNTQwMTQ5LDI2OTAzNC43MDEwNzEwNjM3LDQ3ODg2Ni45MDg5ODQyMDgzLDc0NTUuNTMxMDY1NTA2NzU1LDEwNjAzMzguNzIzMjE0Mzg3MiwzMjE1NjYuNTA2ODY4Nzc3MiwzODI2LjY2OTM3OTQ0NDI2MzUsMjYzOTM3LjU3MDQ3MjQxMTcsMTMyOTEyMi4yMDc3Nzc3NzUsMTQ0NTAxMS45MTYyNjY5OTUsNTU4NzAuNDg4MTEwODM3NzcsMTM3Mi4yMjU2MDcwODIxMTkKKzI3LFN1biAyMCBGZWIgMTEsNTQzNDUuMjU2NDA4ODUxNTIsNjY3OTUuNzY1NjY1ODE5MywyMzEzOC44NzMyNjYwMDY0NSwxNDYxNy45NzI5NjM4OTk2MTIsMTA5MzU4LjE0MjYzODMxMDcsNzU2ODI4LjY4MDM1NzQxMDgsNzkzNzY1LjExNDY3NTkxMTUsMTEwNDgxNS41NDY5ODQ0NDM0LDY1MjA1MS4xMzI4MDc5MjMsODE0NTI0LjU4OTAyMzI5OTIsMTc5NDM1LjgyMzU4NjUwMTQ3LDE0NDU1NjQuNDczNTU2OTY4NCwyMjA2LjU0NTc0ODk5ODQwOSw5NjM0MzEuNDkwNzM4NDYwMSw0MDYxNjQuMDYxMzYzOTg3NzQsMTc0NjQ5LjY2MzQ1Mjc3MDE1LDMxMDY1NS45Mzk4NDMzMjM5LDIxMDc3Ljk4MjkwNDMxNzk3LDEzMzgwMTMuMTcyNjUzMTYzMywyMDg1OTIuMzI2NDMwMjgzNTIsMTEyNjUuMjQwMzIwMTYyNTAyLDY4MTIzNS4yNTEzNzY4Mzc1LDk4Nzc4NC43Mjc5MDIxNDA2LDkzNzI1MS4xNzEzNjU4NzMxLDM2MjQ1LjAzNTg0MDk1NDM2LDIxMDkuODU5MTQ0MjY5MjI2CisyOCxNb24gMjEgRmViIDExLDM1MjM1LjQ2MTk4MzI5NDI2LDU1Njc4LjM3MDYwMTUyOSwxNTAwMy4yMTM0ODU2NjA4LDk0ODUuNjYyMjA4ODk0NjA4LDEwMzkxNS4zOTQ4NDc5ODQ4LDQ5MDczMi45NDM5NzM3MjkyNywxNTgwMTYzLjY0MzI3ODk0MzgsNzE2MjQ2Ljk4NzMxNTkxNzUsNDIyNzc5Ljg4NTExMTUyNjYsNTI4MTI0LjE1NTc4OTMyNSwxMTYzNDEuMTYxMjk1ODE2NzEsOTM3MTYxLjkyMjUyMjg4MjUsNjkzOS44MTc0NzkxMjI2MjcsNjM0NzU5LjIxNTIyMDk2MTEsMjYzMzU4LjY3MTU1MjE1OTc3LDExMzQwMC45ODYxMDA4MzIsMjAxNTA3LjcwMzY3NjA1MjcsNTc1NjguMTM5ODU0ODI3MTMsMTAyNTQ3MS42MDYxMDk3NjA3LDEzNTI4Ni4wNzM0NzcxOTI4LDMyNjAxLjMxOTQwMDY1NjM0NiwxMjk4MzgxLjExNTA0ODY5Miw2NDEzOTQuNDkwOTI3ODMwOCw2MDc3NzkuNjYzMDI0Mjk1MiwyMzUxMC40NDc3Nzk0OTYzOTcsMjEzMy45OTE4MDkxMDMzNTg3CisyOSxUdWUgMjIgRmViIDExLDIyODY0LjM0NTM1OTM4NzgzMywzOTQ4OS44NTgwMzA0MTU4NzUsOTczNi40Njk2MzY3Njg3MjgsNjE2Mi44NTk2NzE4NTQ3MDQsNjk2MDIuNTEwNTMwMjA0NTcsMzE4NDcwLjYxMTk2Nzc5NzcsMjAwMDA2My40ODAxMzgzMTc3LDQ2NDcyOS41ODkxMTIzNjQ5LDI3NDM1Ni40NTM1MjE3NTIxLDM0MjcxNy44NzczNjQxOTE1LDc1NDk1LjIyOTE2ODg2OTc2LDYwODA2NS4yMjE0ODM3MDExLDIwODgwLjM4MTU5MTAyMzE5Myw0MTE4MDguNzYxNzM1NTU2NiwxNzA5MTEuMjcyNTEwOTIzMDcsNzM3NDQuNjMxOTc1NDI2MzUsMTMwODQ2LjY3OTM5OTkzNjQ2LDE0Njk2Ny4wNDY4OTE3MzUxNCw2Njc0ODkuNzM0OTU1NDMzNCw4NzgyOS4xNzUxODU0NDU2NCw5MjI5Ni41MzAyMTM5ODk4MSwxNDYwOTc3LjkyOTQ1NDI4MjQsNDE2MTUyLjYwNzI0NTc0NjYsMzk0NDg5LjUzNzU1MzQ3NzMsMTUyNjYuMjQ2MjQzNzEwOTQsMTUyMy40NjIxMzI4MDIyNjQ1CiszMCxXZWQgMjMgRmViIDExLDE0ODA5LjU4MzIxNzMzMzMzMywyNjA1Ni4yMzI2MjYzMzk5Miw2MzA3LjI5NjYwMjc1OTQ5OSwzOTk5LjEyMDg5Njg4MDcwMTQsNDUwNjIuODY5MjA3OTYxNSwyMDYzMTAuNTQ5NzUyMTQ0MjMsMTUxNzk4NC42MTc0Mjc1OTI2LDMwMDk2OS4wNTU2MTQ2MDE1MywxNzc3MTguMzc5ODA0MzM3MDUsMjIyMDAwLjQxMjY1OTg1NTQsNDg5MDAuNjEyNDk3MDY3MzI2LDM5Mzc5My41Mzg4NDYzNTcxLDU4MjMxLjU5Mzk5MTkzMTk4LDI2NjY2Ni43NDgzNjAxMDUwMywxMTA3MTguNzk2NzA1MTcxNzMsNDc5MTcuNDE5MjI3MDU2NDc0LDg0ODM2LjM4MDIyNTY1MTEsMzE0MjI2LjkxOTk1MTIxNjYsNDMyMTk2LjQ0OTMxNDgxODI1LDU2OTI4Ljc5MjgwOTgwNTMyLDI0NjkyMy4wMjY3MDYxMTM2NSwxMDM0NTk1LjQ1MDQwNjUyOTIsMjY5NDk2LjI1OTYyODgwNjU1LDI1NTYxNC4zOTgxMjEyMjIzMyw5ODk4LjEzMTc0MTk1NzU1NSw5ODkuNzQ0MDM4MTE0MTY1NworMzEsVGh1IDI0IEZlYiAxMSw5NDY2Ljc2Mjk2MDU3MjU3OCwxNjY4OS41NDg2MDg0NTY3OCw0MDMyLjY1MzgzMjc1NDE1MDIsMjU2My42MTE2NDM5ODcyODEyLDI4Nzg3LjYyNTE2MTkxODE4LDEzMTkxMi4zMTA1MzM3MzQ4LDk3MTE1MS43NTIxODQ5ODQyLDE5MjM0NS45NTUwNTA5NjY3MywxMTM2MTYuNjg2NDY5NjQ5NzQsMTQxOTI2LjQzNTY0Mjk5NzgsMzEyNjAuMDMyODkxNjY2NDY2LDI1MTY2Ni4yNDIxMzUzOTkwMiwxNDIyNjcuOTQ4OTY3Njk5NiwxNzAzOTQuMTc1ODEyMTQ1NTgsNzA3OTEuNzUxOTk3Mjg0MzYsMzA3NzguMDM3OTQ2ODg4MjE3LDU0MzEzLjM4NDA0MDk5NTY3LDQ3NzY3Ni4yOTQwNTA3MTE0NCwyNzYxMjQuOTgzNDkxMTIyNSwzNjQzMC40NzcxMDQ1MjE4LDU3OTY1OS4wODQ4NjQ0NTQxLDY2MDgwNC4xNDQ4NjUxODYyLDE3MjIxOC43NTY2NTk1NTQ4NCwxNjM0OTMuMDI1MDM1ODE1MjYsNjMzNi45ODM3MzA5ODIwNTQsNjMyLjI4MDU4MjM1MTg5NTYKKzMyLEZyaSAyNSBGZWIgMTEsNjA0MS44NTE2MjcyMDE5NjcsMTA2NDQuODg4ODI4NzM4NjE4LDI1NzQuNDg4OTY4NTk3MDYsMTY0My4wMzI1MTE1NzEwNDAyLDE4MzU1LjQyOTMxODc4MjY0LDg0MjE4Ljk5NjcwNjg5ODc2LDYxOTA5NS44NTY3NDYzODk1LDEyMjcxNy4wNDk1NTM3NTMwMiw3MjUyNC42NjU5NTc5NzA2OCw5MDU5NS40MzI2MjczNjMxMywxOTk1MS43ODQ4NTY3NzE1MTIsMTYwNTYwLjgwMTYzOTc2MzYsMjkyMjEwLjk1NDQ2NDQzMzk1LDEwODY4My40NDY5OTczNTE5Niw0NTE5Ni4xOTg3MDg0NzEyNCwxOTc4MC4zNjA3MjE0MjI2MzYsMzQ3NDEuNjU0NzI2MzE0MTU1LDM5MjM5OS45MzMzODU3NjIyLDE3NjA4NC40ODc5MTU1Nzg4LDIzMjg3Ljg0ODkxNDI5NDY4NiwxMDk0MjQ3Ljg5OTg1OTQyNCw0MjEyMzYuMDEwMzIxMzQzNCwxMDk4NjMuMTYwMTcxMjg5NzgsMTA0NDM0LjQzNDk1OTgwNSw0MDUzLjU3MDY0NzM5MTU4NSw0MDMuMTQ2MDEyNzc3MDc0MjUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvSW5vY3VsYXRpb25UZXN0X0ZEX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9JXzAuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Jbm9jdWxhdGlvblRlc3RfRkRfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL0lfMC5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmMyNDQwMQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvSW5vY3VsYXRpb25UZXN0X0ZEX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9JXzAuY3N2CkBAIC0wLDAgKzEgQEAKK2l0ZXJhdGlvbix0aW1lLApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Jbm9jdWxhdGlvblRlc3RfRkRfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL0lfMS5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0lub2N1bGF0aW9uVGVzdF9GRF9SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vSV8xLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYzI0NDAxCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Jbm9jdWxhdGlvblRlc3RfRkRfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL0lfMS5jc3YKQEAgLTAsMCArMSBAQAoraXRlcmF0aW9uLHRpbWUsCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0lub2N1bGF0aW9uVGVzdF9GRF9SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vSV8yLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvSW5vY3VsYXRpb25UZXN0X0ZEX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9JXzIuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFmMzk4ZWMKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0lub2N1bGF0aW9uVGVzdF9GRF9SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vSV8yLmNzdgpAQCAtMCwwICsxLDMzIEBACitpdGVyYXRpb24sdGltZSxFRy1GUkctRzIxMDAwMSxFRy1GUkctRzIxMDAwMixFRy1GUkctRzIxMDAwMyxFRy1GUkctRzIxMDAwNCxFRy1GUkctRzIxMDAwNSxFRy1MT0UtRzI0MDAwMSxFRy1MT0UtRzI0MDAwMixFRy1MT0UtRzI0MDAwMyxFRy1MT0UtRzI0MDAwNCxFRy1MT0UtRzI0MDAwNSxFRy1MT0UtRzI0MDAwNixFRy1MT0UtRzI0MDAwNyxFRy1MT0UtRzI0MDAwOCxFRy1MT0UtRzI0MDAwOSxFRy1VUEUtRzI5MDAwMSxFRy1VUEUtRzI5MDAwMixFRy1VUEUtRzI5MDAwMyxFRy1VUEUtRzI5MDAwNCxFRy1VUEUtRzI5MDAwNSxFRy1VUEUtRzI5MDAwNixFRy1VUEUtRzI5MDAwNyxFRy1VUEUtRzI5MDAwOCxFRy1VUkctRzMwMDAwMSxFRy1VUkctRzMwMDAwMixFRy1VUkctRzMwMDAwMyxFRy1VUkctRzMwMDAwNAorMSxUdWUgMjUgSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDEuMDA3MzMxNzMxODgzNTMyNiwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzIsV2VkIDI2IEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjcwNTA5Njk1NTcwNzg1NjksMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCiszLFRodSAyNyBKYW4gMTEsMS41MDgwNTE1MTc1ODk4MjA3RS00LDAuMCwwLjAsMC4wMjUwOTA5MTgxMjIxNzQ3MywwLjAsMC4wMDkwNjQ2NTE3ODI2OTc3MTIsMC4wLDAuMCwwLjAwMzg5Mjc3MjU1ODQ1NTIwMzYsMC4wMDI3ODIxNzA0NDczOTk1NTMsMC4wLDAuMCwwLjAsMC4wLDEuNDc2NTA3MjQxMzM4MTY4NkUtNCwyLjY3MDEzODE3NDMwMTg3OTMsMC4wMjUzOTgzNDU1MTEwMjAyNywwLjAsMC4wLDAuMDEwMDg5NzQzMDYzMjc1NjMxLDAuMCwwLjAsMC4wLDAuMDE1NjQwNjM0OTI5MzI0NDQ4LDAuMDA5MjMwODIyNTc5OTgxNjQ2LDAuMAorNCxGcmkgMjggSmFuIDExLDMuMDE1OTY2ODU0ODcwNjkyNEUtNCwwLjAsMC4wLDAuMDUwMTc5NTY1MjA3MjU3NDMsMC4wLDAuMDE4MTI4NDg0OTc3NjMzMywwLjAsMC4wLDAuMDA3Nzg1MTkzNTg2MzI0MjI0NiwwLjAwNTU2NDA4OTY1ODQ1ODg4NCwwLjAsMC4wLDAuMCwwLjAsMi45NTI4ODExNTI2OTEyMDg1RS00LDQuNjk4NDU0Mzk4Mjg0MjY5NSwwLjA1MDc5NDM5NzE1OTA4NTE0LDAuMCwwLjAsMC4wMjAxNzg1NzQ5MDY5OTAyNSwwLjAsMC4wLDAuMCwwLjAzMTI3OTg1NzQxOTA2NDg5LDAuMDE4NDYwODExMTg0MjMzMDg4LDAuMAorNSxTYXQgMjkgSmFuIDExLDAuMDAxMTMwMzAxNDc4NTA5MDkxLDIuMzQwOTYzMDAyOTgwMjg0NkUtNCwxLjY4MDkxOTMyOTU2MDIxNDNFLTQsMC4xNDc0ODA0MDMxNzkyMTEwNyw2LjA5MzMxMzQxNTMxNDY3MUUtNiwwLjA2MzkwMTU3MTkzNTk5NDk3LDEuNzI4NzA2NDczMTIwNTE5RS01LDkuNDI3OTM1NTUzOTM0ODcxRS00LDAuMDI3OTE2MDMyMzcxMjA3MTksMC4wMjEyNjkwMDQ0NTg2NTYwOCw4LjA4NDc5NzI5NjI2Nzc3NkUtNCw4LjEzMzY0NTQ4Mjk4MTc1OEUtNCwwLjAsMy40MzUwMDA4MzYxMDA4NDhFLTQsMC4wMDI3NDM5NjY4NzU5MjY4ODcsMTAuNzYyMDI1NzQ5NjE3NDkzLDAuMTg2NTMzNDk2NzgxMDU5NTcsNS4xMDQ2NzU1ODkxNTExNTFFLTksMS45NDIzNzk5NTk1ODY5Mjg3RS00LDAuMDczMjg5Nzc4ODc1OTIzMDYsNS4xMTAzMjc3MzUxNzI4ODVFLTksNC45MzQ5NzgwMDU0NjQ4MTA1RS05LDYuNTAyNzczMDMxNjc4ODM5RS00LDAuMTE1MDI5NDE5OTU5ODU1NDMsMC4wNjAyNzE2MDUxNjI2NDA1MiwwLjAKKzYsU3VuIDMwIEphbiAxMSwwLjAwMjg0OTcxODA0MjM5MTY0NzcsNy43MjQ5MDA5MDQ5NDc3MjRFLTQsNS41NDY4MzQ4MzAwMzI2MjFFLTQsMC4zNDAyMjk3NTQxODUzNjQ0LDIuMDEwNzIxMzEwMTkxOTc5M0UtNSwwLjE1Nzk2MzY1ODIyMTU5Nzk3LDUuNzA0NTI2ODM5MDU2MTIzNEUtNSwwLjAwMzExMTEwNzE4ODc2NDI5MzQsMC4wNjk0MDAyNDEwNjkyOTM2MSwwLjA1Mzk0NzYzNTM0MTI3NzM2LDAuMDAyNjY3ODg3NDMzMTQ5MjMxNiwwLjAwMjY4NDAwNjc3OTc4MTMzNywwLjAsMC4wMDExMzM1MDk2MzUyNDA1MTIsMC4wMDgxOTMwMzMwOTE0ODkxMSwyMi4xODE0NDc5OTYzNzM2LDAuNDY3MzA2MjUxMzA4NzY1MTMsMS42ODQ0ODI1NTEzNzg5NTg2RS04LDYuNDA5NjI0MDM4NTIzNjk1RS00LDAuMTgyOTYwODkyNDI1MDAyNTcsMS42ODYzNDc2OTI2OTYwMTc3RS04LDEuNjI4NDg0MzU2NDQyMDkwN0UtOCwwLjAwMjE0NTgzODE1MTA1NjMyNDcsMC4yODgzMDAxMzg2MzU2NDQ0LDAuMTQ1MDE1MzU4MzcyMTY5NzgsMC4wCis3LE1vbiAzMSBKYW4gMTEsMC4wMDc4NDM4ODYyMjE5MzU4NCwwLjAwMjcyOTM3ODkwOTMzOTE0NjMsMC4wMDIxNjA2MjY0ODgzNTQ0OTYsMC44MDMxMTQxOTc0OTc5OTIzLDguNjY0MDQ0ODkwMDUzMTMxRS01LDAuNDE3NDI4MzM1NDQ0NzI0OSwyLjQ4MDg1NDQ1MTgxMzU3M0UtNCwwLjAxMjY4MDMwNDM2NDQ5OTAyNSwwLjE4NTgzMDA3NTU2MzQ3NDMsMC4xNTAzMTg0NDEyMzk0MDUyLDAuMDEwMjk1NjU2MDg2Mjg2Mzg2LDAuMDExMzQ5NjI2NzgwOTk4ODkyLDIuNzAxMzU5NTYxNzkzOTM1M0UtOCwwLjAwNDYyMjgwNjczMDQzNDg5NSwwLjAyOTkyMTkzNzM1NjAyNDI0Nyw0Ny42MTMzODY1NzY1MDkwNCwxLjI2OTQyMzg4ODQwNDIyMzcsMS41OTcxODEwMDg2MzE0NDk2RS02LDAuMDAyNjYyMzQ4MjU4OTgwNjk0MiwwLjQ5MzQxNjE4NTk0OTUxMTYsNy4yMTM1ODQwODE1MDg2NzNFLTcsMS45NTYzNDkxMTk5MDAwMzY4RS01LDAuMDA4NjYxMTI5MDU0MjcwMjg2LDAuNzgzODczMTM2MTk1NDQ0NiwwLjM2NDg5MzU1NDM0Mzk3NDc1LDUuNTI5NDExODg3ODMzMTk3RS03Cis4LFR1ZSAxIEZlYiAxMSwwLjAxOTg4NDc0MzM4MzA2MzQ3NywwLjAwNzg3NDcyOTAzNDYzODkzNiwwLjAwNjU3ODEwNDc2NDgxMzU3NywxLjgxMDc2NjQwNTczMjM0MTgsMi43NjcxNzI5Mjk3Nzk2NjlFLTQsMS4wMjczNDE5MDkyOTg2MDcsNy45NTU1Nzg5NjAzODU3NTVFLTQsMC4wMzk0Nzk0MTg2NTA5NDc0ODYsMC40NjE5MjQyODc2MDc0MDY5NSwwLjM4NDMyMzYzMDc4OTEyNTU3LDAuMDMxMTk1NTQxNzI3Njc3NjEzLDAuMDM1OTQ2MDI0NjE4ODU0NjMsMS4yNDI1OTMyNDQ0NjY0NzY4RS03LDAuMDE0Mzk3MDU0ODA2NzIxNzU4LDAuMDg5MDQ2NjE0ODkwMDIyNDQsMTAwLjYxNzkzNTMyNzQyMzI1LDMuMTg4MDMwNjg4NzczNjc0NSw3LjI0NDc4OTA0OTMwODU2MUUtNiwwLjAwODM2MzI0OTQxNDkwNzA4MiwxLjIzMjY5NjYxMzE2MTYwOTMsMy4yMTU5OTYzNTQyMzQ4OTFFLTYsOC45ODkxMDY5ODAwMjY1NjJFLTUsMC4wMjY4Mzk3MTk1OTQ5MjAwNywxLjk2OTkwNzcxMDg5MTQwNjcsMC44NjUzMTE4MjQ0MDc0OTgsMi41NDM0NjM2MzYwODEyMDY0RS02Cis5LFdlZCAyIEZlYiAxMSwwLjA1MDQ2Nzc1NDA1NzY2MjQyLDAuMDIyMDIzNjA5MDczNTY0OTg3LDAuMDE5NTkyNzc2NjQ3NDE3MDIyLDQuMDQ2Njg0MTQ0Njg1ODIxNSw4Ljg0NzMwMjYyMjk4NTg5OEUtNCwyLjUxODc3OTIxNjIyNDIyMzMsMC4wMDI1NjQzMzAzNDg3Nzc2NTU3LDAuMTIxNTM1Mzk3OTIwMjQzODcsMS4xNDY3ODk4NTkxMjAwOTk2LDAuOTg0OTA1NzAyMzE0MDUwMSwwLjA5MjM1OTAxNzIxNTUzNzU2LDAuMTEzNDkwNTc2NTcxMzA0NDksNi4wNzkxMjc0MDU4NjkzMjRFLTcsMC4wNDQzMjg2NDA5MDA4MDgzMDUsMC4yNjUxMDM1OTQ4MDkwNDA0NCwyMTMuOTc1Mjc5NzAyNTY2ODQsOC4wMDMxNTQxNzQxNjY4NjQsMy4wOTQ5NDUzNTk1ODY4OThFLTUsMC4wMjYwOTkzOTU5MjQzNDI3OCwzLjA3NTgxMzI5ODc1OTI1MiwxLjM2Mzk5MzQ3NTg1MTYxOTRFLTUsNC4yNDYwMzM4NzI1NDA4MDc2RS00LDAuMDgyMDc5NTc1NTQ4ODQyODYsNC45NDkwOTQ4OTI3NDI5NzIsMi4wMzY1NTA4NjM3NTcwNzc1LDEuMTA2MTU4Nzg5NTM3M0UtNQorMTAsVGh1IDMgRmViIDExLDAuMTI0OTQ1ODY4MzgxNDQ1MDcsMC4wNTgyOTM4ODM5MjIwOTc5ODYsMC4wNTQ2MTQxOTc4MTU3NjY1NzYsOC45MTE0MTkwMTM2MTMzMywwLjAwMjYxNDE2Mjc5MDk4NDIzNTMsNi4wNDAxMzczMjA3MzkzNDMsMC4wMDc2Mjg1MjA3MjQ0NjczOTcsMC4zNDgzMzEwOTI2Nzk4NTQ2LDIuNzgzNTA1MDE5NDQ4MzQwNiwyLjQ1OTQ5MTczMTU2MTY1MSwwLjI1NjE4NDEzODc0MDY1MDI3LDAuMzMyMDA2MDcyNzM1NTU0OTQsMi4zMDM1MDkwMTQ5NDA2MDY3RS02LDAuMTI3MDYxMzAzNTQ5Nzc4MjQsMC43NDQwNzA3NDU2NDMzOTg3LDQ1NC4wMjg0NDIxNzI2NzUzNCwxOS42MTcwOTM3ODMxMzg5NDgsMS4wNzk5OTA3MzU0OTgzMTI3RS00LDAuMDc1NjQ5MjgxMjc0NTk0NTgsNy40OTc1ODQ0NjkzNDc0MTQsNC43NDc2NjQ5ODUwMjU2NjQ2RS01LDAuMDAxNTc3MDk2MjgwNTA4ODYzNCwwLjIzMzk3ODc2MzY2MjE4NjczLDEyLjEzOTk0NTQ2OTQ5NjQwNyw0LjcwMjU2OTQ0MzY5ODE2NSwzLjg5OTgxNjc1MDUzMTc4NEUtNQorMTEsRnJpIDQgRmViIDExLDAuMzA2NjYwMDczMDc1NDI1LDAuMTUwNDQ5OTgxMDAwNzEzMjcsMC4xNDc5NTgyNjE5MTE0MjA2NywxOS40Nzc1MTk2MjQ4NTk3NjcsMC4wMDc1MzIwNjQ1Mjc2NTk2MDUsMTQuMzQ2OTg5NTEyMzEyODgsMC4wMjIxNjA0MDI1MDQyNzIwNjQsMC45NzIwMzcwMjY3OTAzMjUyLDYuNjk4ODkyNDg2MDM3ODMzLDYuMDg4NTQxMDcyMTY0MDg5LDAuNjkwODY2OTIzODI3NDI1LDAuOTQ2NTc1Nzk5OTkzMDUyNCw4LjMyMjg4MjA3Njc4MTA3MkUtNiwwLjM1NDU1MDU0NTk0Nzg0NzUsMi4wNDU2NjU5NjcxNzIwNzIsOTY0LjQzMjQ5Mzk1NjYxNjQsNDcuNjU3MjI3MTYwMjAwMDgsMy41Mjk5ODc4OTY0MDA3MzE1RS00LDAuMjEzNjcxMTA1OTAyMTY2MzEsMTguMTExODQ0OTEwNzYyMDEsMS41NTIzOTg5NzUxNjY1NTg4RS00LDAuMDA1NTQ2NzkwMzU1ODA2Nzg2LDAuNjQ5Mjc1NDUyODg4MDkxNywyOS41MTU0MTI2MTUyMjIyNzgsMTAuNzU3MDg1MjY3OTE1ODMsMS4yODE3MjcxMDE1MTA3MjRFLTQKKzEyLFNhdCA1IEZlYiAxMSwwLjc0NDAyNzc3NzQxNjY2MzksMC4zNzkwODMxMDM0Njc2NDI1LDAuMzg5MTM1ODUxOTc1MzY1Nyw0Mi4yODQyNzQyMDU2NDA1OCwwLjAyMDk4OTE2MDYyNjQzNjE3NywzMy43MTM2MjIxNjk3NzM5MiwwLjA2MjI1NDQzMDA0MjA0MTE0LDIuNjI5NjcxOTA2MjMzMTY2LDE1Ljk1NDA2ODI4MzMzNDEzOCwxNC44OTI4NzEzNjk0MTQzMzksMS44MDk3OTI2OTc5MzkyNjAyLDIuNjEyMjczOTQ0NDcwOTk2NiwyLjc3NDY3Nzc3MTY2NDk3NTZFLTUsMC45NTkwMjY0NjU4NzM0ODM0LDUuNDc2ODA3NzQwMjYwODE3LDIwNDguMDU5MzM4MTYxOTkyLDExNC40ODM5NTg0MDQ0NjkzLDAuMDAxMDc4MDc3Nzk3NDM2MDk1MiwwLjU4NDY5NzIyNjgxMjQzNTEsNDMuMjcxOTk2NjA3MjQyOTQsNC43NDg0MzMyMzc2MjIwOTZFLTQsMC4wMTgwNjE3OTEzMzA0OTY5NiwxLjc0NzMzNTQ1MzA3NTQxNCw3MC45NTg4MDM0NzM4NTM3LDI0LjM3NjgwNjA1NDg5NjE5MywzLjkyMzU2ODcyNzEzODEyNEUtNAorMTMsU3VuIDYgRmViIDExLDEuNzkxNTU5OTA2NTg2NTY2LDAuOTM5ODQyMTExODM2OTE2MiwxLjAwMjkyNTM0NDEwOTIxMjUsOTEuMzcwNDIwNDM5MjU4NzEsMC4wNTcyODA0NDM5NDU0MjE2LDc4LjYyOTU5OTE4MDg2MTA1LDAuMTcxMzY1NzMzMTM4MzA3NCw2Ljk3MTIwMzEzNzI2OTQwOSwzNy43MzQ2MDI4MzQyMTE0ODYsMzYuMTQ0OTc5ODE4OTEwMzgsNC42NDg0NjY5Njk1OTM4NzQsNy4wNjEyMDE1MzI3Mzk3MjQsOC44Nzg4NzM3ODI4MzMyMzhFLTUsMi41NDE2NjE5NjQwMjk0MjQyLDE0LjQxMDU1NDIyNjMxNTkxNyw0MzQ5Ljc1OTY5MDQ4MjI5NywyNzIuOTQ2MjgzNjU1OTIxNjYsMC4wMDMxNjA1OTM4OTExMTc5MDkyLDEuNTY3ODI3MjM3OTQzOTIyMiwxMDIuNjEyNjgzNjk5ODU2MzMsMC4wMDEzOTU5NzAyNzAzMDA2MjI3LDAuMDU2MzkxOTIxNDA2MTA2OTEsNC42MDgzODI0ODE5NTQ2MDgsMTY5LjMxNjUzODEyNTA4MTc2LDU0Ljg3MjQwMDA4MDA0ODM1LDAuMDAxMTQ4OTQ2Mzg1MTI2NDA4NworMTQsTW9uIDcgRmViIDExLDQuMjgzMzE4NTg5NzgxNzk0LDIuMjk4NzE0MTUwOTE0NDAyLDIuNTM5ODIwNTA2MTAzODIxLDE5Ni42ODc3ODA3NDMzMDk2NywwLjE1MzMwNTY5OTgyODQ1NzU0LDE4Mi4xNTQ1NzAxNTU0OTgwNSwwLjQ2MjY4MDE0MDc0MjM2Njg1LDE4LjE0NzAxMDUyODM3MTkxNSw4OC42ODg3MzQ4Njc4NDE3LDg3LjA3Mzg4MDA3NTg0NDg4LDExLjczODM1MDA0MDc2ODMzMSwxOC43MjYxNTU3MDY2NTIyNTMsMi43MzAxMzcxMjMwMTY4OTU0RS00LDYuNjEzODQ2MDEzNjg2NDAyLDM3LjMxMTUyNTA4MDQzNDc5LDkyMzUuMDc1NDgxNDAyMzgsNjQ2LjE4MzUzNTIyMTM0NjEsMC4wMDg5NTA2MDY3NDI0OTQ2MjMsNC4xMjY4OTQ2NjEyOTk3NDcsMjQxLjY1OTA4Nzk5MzQ2MzgsMC4wMDM5NjcyMjA3MjgwOTk4MywwLjE2OTM1MTA3MzI2NDg3OTcyLDExLjkzNjg2Mjg5MjAzMTAwNSw0MDEuMjAxNzkzMTM0MTgzMTYsMTIyLjgxMDMzNzMwMDkyNjU2LDAuMDAzMjQxNjk5NzEyOTk2OTI4MgorMTUsVHVlIDggRmViIDExLDEwLjE4MjMxNDc2NjMzNDYsNS41NjMzNjEwMjAyMDI5MjYsNi4zNDI1ODQ2NDQ2NzUzMTcsNDIyLjA3OTMzNTYwNTE1NzQsMC40MDQxMDI1NDkwODkxNDE5NSw0MTkuNjc4OTEzNDQ0MzQwMjUsMS4yMzA2MzM0Njc4NDUyMDUzLDQ2LjU2NTkwNDM4NjU2MDMzNCwyMDcuNDEwNzkwMDI1OTQzMzYsMjA4LjUxMTkyNTc5ODkwNjg0LDI5LjI0NzM4MDQ4NjM1Nzk3Miw0OC45MjE3MDY4NzUxNDcxLDguMTU2ODYwMTM0MDI5MzA1RS00LDE2Ljk2MzM3NTU4NDU1MjU3Myw5NS4zNzM3OTk0MzI3MjM5LDE5NTkxLjA2MzY4MTEyMTU2LDE1MjEuMDI5ODg3ODAxNTkyNCwwLjAyNDY5OTU1NzkwNTAzNTIzOCwxMC43MDYxMjk1MjE4MTMxMiw1NjUuOTQyNDc1OTU5MjkyNCwwLjAxMDk5NDQ1NDQ1MzQ5ODIyMiwwLjQ5NDIxNzM1NjcxMDk1MywzMC40ODIwMDE2NDgwMTcxMjUsOTQ1LjMxNjk5MDk4NDgyMDksMjczLjU4MzAyMTI5MTkzMzczLDAuMDA4ODkwODgzNjA1OTkzOTU1CisxNixXZWQgOSBGZWIgMTEsMjQuMDgyOTU0NTI2NDU0NzUzLDEzLjM0NjYxNDkxNzY5MDQ5MSwxNS42NTE2MzAwODA0MjE5MDMsOTAyLjk3MjAzNTI4ODA3NzgsMS4wNTEwOTEwMzc3MzYwNTUsOTYyLjMxMjUwNDU3MTE3ODQsMy4yMzAzODc5NTc4MjI3NjU0LDExOC4wMjE3NzkyNjQ1ODQ4LDQ4Mi45NTg0MTAyODkxNjI3Nyw0OTYuNjU1OTk5MzM0NDk5NSw3Mi4wNTMwMTE2MDM1MjE1NywxMjYuMTQ4MDc4MzkzODYxMTcsMC4wMDIzNzY4MTI5MTA1NjU3MSw0Mi45Njk4MDcxOTEyODg5OSwyNDEuMDU5MjQ1NTkwMzcxNzIsNDE0NzQuNDUyODg4MjY1MjgsMzU2MS42MDE2NTE0OTgxMDQsMC4wNjY3MTM2ODg5NzE2MDk2MiwyNy40MjYyNDM1OTE0NjE1MiwxMzE4Ljc0MDc5MDMyNzQ4MzksMC4wMjk4NDA2NDg2Njk1NDA5MjcsMS40MDczNDY5NzIyNDY0NzczLDc2Ljg5MDk1NzQzODY4MTg0LDIyMTYuMjE2NzM1NDYxNjY5NSw2MDYuOTMzODExNzczODIwOSwwLjAyMzgyMDM0OTM5MDA1NTcwOAorMTcsVGh1IDEwIEZlYiAxMSw1Ni43MDk0NTYyMTYzMDE0NSwzMS43ODUzNzEyNDA1NjU4NiwzOC4yMzY1MzI3MTgwOTg5MywxOTI0LjQwNjU3OTMzMTg2OTYsMi43MDMzMjQ4Nzg4OTAzNjUsMjE5Ny4yOTQ5MzY5NDkyMjI2LDguMzg1OTk2NjI5OTY2NjMsMjk2LjAyNDk3MDEyNjgwNTQsMTEyMC4zODQxNDU0NTE3MjcsMTE3Ny40ODI3NTQyMjQ3MDkyLDE3NS44MzU2NjU0NTcwODc5LDMyMS43MDMxMTExNjE5NzgsMC4wMDY3ODU4OTk5NjM4MTUxMDcsMTA3LjcwOTAzODc2MTU0MDkyLDYwMy40MjY5ODA4NDU2Njk2LDg3Mzk2LjcyMzIxMTk5MDYxLDgyOTguNjg0MDI5MTM3NTY3LDAuMTc3MDgxMDEzOTMxMzQ3NTYsNjkuNTE0MzQzNTQ2MjcwMDcsMzA1OC43NzcwMDMwNDg5ODk2LDAuMDc5NjM4NTA3NDU3MTMwNTUsMy45Mjc5NDQwODQ2MzkwNjIsMTkxLjk2MTkxODUzMTQ4NjkzLDUxNzIuNTc1Mzg0Nzc2ODE0LDEzNDEuMDQ4ODExNDMyMjM0MywwLjA2MjYwNzYwNjg0MTQ0MTEKKzE4LEZyaSAxMSBGZWIgMTEsMTMyLjk5NTYwMzc5NzI0MDM0LDc1LjIxODEzNjE0OTUwNzc3LDkyLjU4OTYyMzc5MzE3MTQ3LDQwNzYuMjcwMDUzODYxNDEzNSw2Ljg4NDUxOTgzMjg3MDU3NCw0OTk3LjMwNTEwMDcyNTg0MiwyMS41NTg4MzIyMTcwNTU3MzgsNzM1Ljc5MDQ0NTUwMzgxMzMsMjU5MC4xNjQ4NDcwNzY5MjMzLDI3NzkuNTg1MDg5MjA3NDEzLDQyNS42MDYwNjY0NDg2NzcyLDgxMi40OTYwNzUyOTkxOTI2LDAuMDE5MDM2MDU5Njg1MDIyMTgsMjY3LjUzMTc0Nzc0NTI4MzQsMTQ5Ny41NTc4NDAxMzk4NzksMTgyMzEyLjk5NzkyMTQyODc2LDE5MjMyLjc3NDI2NTc4OTc3MiwwLjQ2MzE4NjU5ODYwMTM3NDU3LDE3NC41NTc5OTA4MzYyNzE1Myw3MDYxLjE0NjEwNDY3NTI0MywwLjIwOTU1MDk2MTY2MzY5Mzk0LDEwLjc3NTkyMDIyNzEwMjcyNyw0NzQuOTQ5MzY2MTEwMTY0NCwxMjAyMC41MTIzMDc1MDg4MDcsMjk0OS4xMDExMTMwNDI3NzIzLDAuMTYxOTE5MDQ0OTA4MzIyMjYKKzE5LFNhdCAxMiBGZWIgMTEsMzEwLjY2OTA2NjM4MTEzMDk2LDE3Ni45Njg4ODE4NzY1NzgsMjIyLjQxMDQwNDU5MzUzMiw4NTM1LjQ5NDk4NjExMjc2NCwxNy4zODE1ODc1MTcxNTExNTcsMTEzMTguMDI5NzIxMTgwMzg1LDU0Ljk1MzY2MzYyODc0OTExLDE4MTQuMzE5MDA5MTM1ODc0LDU5NjcuMjI0ODg2NDcwMTA5LDY1MzMuNzk4MjY1ODgxMjAzLDEwMjIuNjg4MjI3ODM5Njc2NSwyMDM0LjU2Njk4OTEwMjE3MDcsMC4wNTI2MDE5Nzc3MTgzMzA5MjQsNjU5LjIxMjQzMDEyODYyNDYsMzY4Ny4yMjY0ODU3ODI4NzYsMzcyMTI3LjUxNTM3OTg2NjI0LDQ0MjU4LjgzMzg5NjE3MzYzLDEuMTk2NTg1NzE1NTU1NzkxNyw0MzQuNzUwODM5ODQ0MDAyMywxNjIwNi4zODc0NzUzMDcwMjMsMC41NDQ4NDc5MTgyMDg4MDcxLDI5LjEzMDI0Mjc0OTk4NTA4MywxMTY1Ljg1NDAzOTI4MzUwNjQsMjc4MDIuOTY3MzY4OTE2MDIsNjQ0MC4xMTA3NTM0MjA2MDYsMC40MTMwNzExNTUyNjIxOTczCisyMCxTdW4gMTMgRmViIDExLDcyMi41MjkwMjM2NzU4MTgyLDQxMy45MDcwNDI5NzMxODgyLDUzMC4wMDQzNDU0MjgxOTYxLDE3NDYxLjEyNjEwNjI3MjQsNDMuNTQ0MTE4NDM3ODY3OTksMjU0OTkuMzg0MjI5MTYxOTM3LDEzOS4wMTk0ODY3NTAyNDk1NCw0NDQxLjMyNTQzMTMzNTA0NywxMzY4OS43ODc1Nzk1ODcwNzcsMTUyODYuMDQxODU4NjAxNDMzLDI0NDAuMjg3MDAwNjE3NDk3Niw1MDU1LjE0ODM1OTA3NDc0MywwLjE0MzQ1MTc3NzkyNzAzMTA0LDE2MTIuNjkwMTk2NTgyMTgyOCw5MDA2Ljg2MzkwOTA2OTQ3NCw3MjUxNjQuNjM0OTUwMDg1NSwxMDA2NzAuNDkwMDMzMDc0NDMsMy4wNTgyOTYzNjc0NjE1MjU2LDEwNzQuNzE0MDM1NjE1NTk3OCwzNjg2OS42NjI4MzgzOTE1NywxLjQwMjIwOTUyNzg2NTk5OSw3Ny43NDEzNTQ4Mjk2NTM4NCwyODQxLjMxODYyMDIxNDk1Myw2MzkwNy4wMjIxNzI0NTg5OSwxMzg4OC43NjEzNzQxOTE2NTIsMS4wNDE0MTMzMzUzNzQ0NzcKKzIxLE1vbiAxNCBGZWIgMTEsMTY3MC43MTQzOTkwMjk3NDgyLDk2MS4xMTY5NTU3NjIzOTYsMTI1MS4zNTk0MzkzNDQ2NDgzLDM0MDQxLjUxOTc1MTQyMzA4LDEwOC4zMDczNDIyNjYxMDMxOSw1Njk5MC41NjU5ODk2MDAxNSwzNDkuMjkzMjk0NjY3MzIwMSwxMDc5NS40NjgzODMwMDE0MDYsMzEyMTMuMzE4NjMzNDE5MywzNTUzNS42ODk4MDQ2OTI1LDU3NzguMjE5NTAzNjM5MTY2LDEyNDY2LjEwNTE5NTAxNzk1NCwwLjM4NjcwODgxMjkxNTU3NjI0LDM5MTguNzIwNzcxMTU2ODgsMjE3OTkuODU2NjY2ODk0MDU1LDEyODE4NTUuNTk0NDE5ODksMjIzODg3LjYxODE1MTQzMTAzLDcuNzQzNzY4MzI1Mzc1ODM2LDI2MzcuNzEzOTAxNzUyNDkwNSw4MjUzOC43MDk2MjM4NjI0NCwzLjU3NjcyODgyNDI3NzM0NDcsMjA1LjE0MDEwMjk0MTYyNzg0LDY4NzYuOTU2NTEyNTkwOTg2LDE0NTQxMS4yMDcyOTk2Mzk4NSwyOTIxOC41NDc3MzM5OTg1NzcsMi41OTg0MzM5Mzc1OTIwOTQ2CisyMixUdWUgMTUgRmViIDExLDQ0NjMuNzg1NTU4ODMyMzQzLDI1NzIuMjg5OTQzODk0NzQsMzQxMC4yMDQ0NjkwODc5ODQsNjA1NzcuMjM3NTE3OTU1NzYsMzIyLjcxNDU3NzY3MzUzNzI0LDE0MzYyOS4zMTQ4Mzg0NTc0NSwxMDU3LjQyNTkxMzcxNTEyOTgsMzEwNjAuMzA1MjYxNDQzNDcsODE0NzcuMjUzNTA4Njg3NCw5NTM3My43NzcwOTAzMDE0MywxNTkxNS45OTA1NDQxMjM3ODYsMzY1ODEuMzIzNDkzNzYyNjIsMS4yODQ5NTUwODA4NjM5NDIzLDExMjk2LjAwNDgxNTg0NDM0NCw2MTQ4NS45NzI0MTMyNjcxMSwxNzM1ODkxLjc2MDE3NzAxMTEsNTE4Nzc5LjM5NDM4MjgzMzYsMjMuNjEyOTk2MzY0OTk3NDMsNzY5OC40Mjg2NzU1NzY0NjYsMTk5NTcxLjAzOTE5NTAyODcsMTEuMDMwNjI2NzU2MzE2MzE4LDY2MS4yMjQzNDI0Mzk4Mzk3LDE5Njg3LjU2ODcxOTc0NjUxLDM3MDk4MS4xODczMDY4NjE4LDYyNjI1LjQ1NzMyMzI1NzE3LDcuNzQxOTE3NjkwMDI4NzczCisyMyxXZWQgMTYgRmViIDExLDExMDg2Ljc3MDU0Njk1NDY3NSw2MzAyLjk5NjQ2NDEwOTM1Myw4NDgxLjIwNjY1MTEyNjI3Myw4MTkzNS4yODE4NzEwMzMyOCw5MDkuNDIxOTM5NjQ3NDkxLDMzMDE0OS4zMzc1NjYyMzg1LDMwMzYuMzI3NTMzOTg1MDM5Nyw4Mzk2OS4yNjMyMzkwMzUzNSwxOTYyOTUuMDk5NTQ0MTQ1NzUsMjM2Mjg5LjI4MjIzNTA0ODksNDA1MjguNDIyNjkwNDczMzQ0LDEwMDczNi4xNTk2OTMxNzU1Niw0LjAwODQ4NTAzMjQ2MTk4NywzMDc3Ny4yMzA5Mjk3NjMxODQsMTU3NjA4LjgxMzQ4ODQ0NywxNzk4NDE1Ljg1ODU0Mjc4Niw5NTA2OTUuOTkzOTkwMTY0OCw2OC4wODU2MjcyMTk2MDE5MiwyMTEzMi4wOTk1NzM2Mzg5MjMsNDAzNTc5LjMzMzYwMDU5NDMsMzIuMTc1MjUyMDQ1NTQzMzQ2LDIwMDMuODc1MDc0MTgwMzA5Niw1MzExMC43NTM5MjY2MDk0NzUsODM4MTQ0Ljg0NDczOTE4MywxMDgyMTUuNzc2MjU1NDU3OCwyMS43NTQwMjk4MjI3NjAxOTUKKzI0LFRodSAxNyBGZWIgMTEsMjYyOTEuMDAwNzA4NjA3NjUsMTQyMDIuNDczMzM5MTUyNzg0LDE5MjMxLjIxNjIzMDAyMTY1LDg2ODgyLjg0NDE4NTYyNzQ3LDI2MzMuMDI4ODY4MDQwMzAxNCw2OTE0MDEuNjEzMzY4NDE1LDkwNTMuNjc2NTMxNjQ0NTI1LDIyNTU4NC4wMTg5NDA2NzM4NSw0NDI1NjcuNjE1Njk3NTMwOSw1NDc2OTYuOTg3NDgxNzMzNyw5NzIxMC4yNzIyOTM0MjYyLDI3NjE4Mi42MjQyNTcwMDEwNCwxMy4wNjYwMTY1OTMwODA3NzEsODQ5NDQuODEwMDk2MTQwNzgsMzY1MDA1LjA3NTM3MzYzMjgsMTYzMDAzMC43Nzg5NTE3OCwxMjU3MjIxLjMxNDMyMTk0NTcsMjAzLjQ0MzgxNDE4NDY1NjMsNTg0NTEuMjY1NDExOTU2OTEsNjI0MzEzLjI4NDI2NTMzMjMsOTcuNDk0MjY5ODk0ODg0NzcsNjMxMy4xNjY5ODEyMTMxMDgsMTQzNTgyLjY4NDIxMDYxMjkzLDE2MDEwMDEuODY1NjIxOTQ1MSwxNDE4OTkuNjQ2NDkxMDY0NDYsNjIuNTM3NzE2MTQ4MDEwMDYKKzI1LEZyaSAxOCBGZWIgMTEsNTIxMjkuMzIxMTQ4NTIxODMsMjY2NjkuOTQ0OTU4NDA3Njg2LDMzNTM3LjIxMTQyNTMxNDQ1NCw4MDMyNi4xODE0MDY5OTEzLDc2MDEuNjgxMjg0ODY1OTUsMTE0MjQ3MS40OTUzOTEzNDQ0LDI3NTc4LjkwNDg1OTMxODQxLDU0NDAwNS41NTA0NTgzMSw4MDY2MzMuODc4NjAyODUxMywxMDEzNTg4LjMxNzE1MTM0NDYsMTg5MDIxLjg5MzgxNTc4ODczLDY4MDYyMy40NDM0ODg0OTY5LDQ0LjI3MzQ1NDk4MzQ1NzkzLDIyMjkzNi41OTIyNTYyMzIyNSw2MzEwMzAuOTEyMjg3Mzg3NCwxMzg5MzUxLjYxMDk4MTI2OCwxMjc5NDczLjczNTM3OTk5NTUsNjIwLjM5Nzk3MjczMDQ4NywxNTYxNjguMjczNjA4MTgwMTQsNjk5NDA0LjAzNzk4NjQxMzEsMzAyLjgyMTA3MjIwMTg3OTksMjA0MDIuNDgxMDU5NDg4Mzk3LDM1ODE0NS41OTM5MzcyMjMxNCwyMTk3MDM1Ljc2NTYyOTkwMSwxNDU4MDcuNjQzMDE5Njg0NywxNzYuNjU5OTg1Mzg1NTc0NzcKKzI2LFNhdCAxOSBGZWIgMTEsNzQ2MDguNzE0MDQzNzM3NzEsNDExODMuMTk2OTY0NzQyNTY1LDQxNDczLjA1NjczMDkwMjM0LDY5NDU0Ljk4MjQ3NTA2MzczLDIwMTQ3Ljk4MDg3MTk4OTAzNSwxMzg2NzMzLjgwODQxNjU4NTQsODA5OTMuNDI2MDQ3OTY0NjMsOTgxNTQ0Ljc4NTE0NDQ4OSwxMDU0ODY3LjMxOTAzNjY3NDUsMTMyNTgwMS4yNjMzNTc4NDU4LDI2MTYxNC4xNjIzODA0NTQ1NywxMjUwNTM4Ljg3MTE3Njk0MDQsMTQ4Ljg0Njc5Mzg4ODQzNzIyLDQ4MTk3OS40Nzg3OTAzMzgyNyw3NjI1MTkuMzg5ODcxNjU4NSwxMTQxOTc1LjIxMjg3ODM0OTcsMTE2NTM4NS43NTY1NjQxMDU0LDE4NDMuOTEyOTg1NjMxMDE5NiwzNzExOTcuNjM5OTAwMDM3NDQsNjY2NDYyLjE4MTczNzQ5MDgsOTIxLjg0NDkxNzM1NjM1ODcsNjM3MzUuOTQzNTA2ODI3OTksNjk4NzIzLjQxMDAyMzYxOTcsMjMwNzUzMC45NzUyOTU0NjEyLDEzMzQ0NS4yOTg1NDg4NDA4LDQ0NC43NDUyNDc4MzQzMjM5NQorMjcsU3VuIDIwIEZlYiAxMSw4MDcyMi4zNjA0MTA4MjY2OSw1NDQzNC4wMzY5MTE4MDU4LDQxNDU2LjU1OTMzNDgwMTIyNiw1NzY1NC4zNTQ4NzgxMTI5LDQ0ODA2LjExMTA0NjU3MjcxLDEzNzc5MjYuOTYyMDgzNDM1MiwyMjMxOTIuMzUzNjgyOTY1ODMsMTIzNzUyNi41NzY1NzQ2NDM0LDEwODUzNzUuMDk2NzU5ODg1OCwxMzYxNzQ5LjAxODQ0NzA1MTUsMjc3NzE1LjE4NzA0MDExMTgsMTU5MzIyMC42OTQxMjU1NjczLDQ5NS4yNDgyNDYyNzYxODk4LDc0OTk5OS41NjkzNjU2MDQ3LDc1MjgxNC45Njk1Njk3NjkxLDkxNTg5NC45MzM2MTQwMjUyLDk5OTI4Ny42NTgyMzIyNDk2LDUzNTQuMzg1OTE2MjMxNzc4NSw3MDY0ODQuMzg4MzQ3NjAzMSw1ODY1NjQuMzY5ODYxMDk5OSwyNzYyLjk4NDgzNzU2MDc5NzYsMTg1NDQxLjY0NjA5ODgyMjE4LDk1NzQ0Ny41ODQ1NDAxMzk3LDIxMzU3ODkuMTY4NzI3OTMxLDExNDc1My43OTUyMzI1NzUsOTIyLjQwNzg3NjMyNzg5ODMKKzI4LE1vbiAyMSBGZWIgMTEsNzU5MjUuMDU1MDAyODc2OTUsNjI3OTIuMzgwODg5MzU2ODgsMzc0ODEuODA0OTU2MjQ0NjQsNDY1NjUuNDk5Njg1OTE3MzIsNzMzNzYuODM2MTQwMjk0MzEsMTI0MTkzMy4zNjIwMDUwNTA1LDU0MzAzNi42OTU5NzM4ODIyLDEyNTAwMDYuMTk3MzY4OTc3NCw5OTU5NTkuNzA5MzI4MzM3NiwxMjQ4NDM3LjIxMjA0MTgwNywyNTg4MjUuMzUxOTE3NzY0NiwxNjE2NjM3LjU5NTgzMTcxMzIsMTYwMS4zODE1OTQ0MjE4NTgsODUzNDE2LjEzMzgzMTk0MDEsNjc2MTk3LjU4NDQzNTg5NTYsNzIxNTA5LjUxMjU2NDM0NTUsODI1MjI5Ljg3ODE5MTAxMiwxNTA4Mi4zNjAzNzU2NTUzNTgsOTcyMDYzLjAzMjg0ODc1ODIsNDkyNzA1LjU0NTM1NDcxMDk1LDgxMTguOTA1NTk0MTk2MTQxLDQ1ODY0Ny4wMDcxOTM0MTg0LDEwMDk1MjkuMjMzMzQ2MzIzNSwxODUwMzEzLjM4OTcwODA4OTksOTQ5NDYuNTMyNDQ5NjI1MDEsMTQ2Ny4zMzYyNTkxMDgzMzQKKzI5LFR1ZSAyMiBGZWIgMTEsNjYzNzcuOTU3MzQ4MjU0Nyw2MzkxNi43Njg1NzU4NzEyNiwzMjAxMy4xNTk3MjkzNTIzNjYsMzY4NzkuOTk5MjY5MjkwMTEsODY3OTYuOTU5MDUzNTAyODgsMTA1ODcxNS43MzUyMTg3NTA4LDEwNDc1MDMuNDE4NTE1MjA4NSwxMTM1ODM4Ljg0Nzk0ODA3MTgsODU4MjY3LjQwNTEyNzEyODQsMTA3NTI2MS4wMjIyNTE0NTUzLDIyNTA4Ni45OTMxMDgxODYzNSwxNDcyNDA4LjQ3NDc3OTU5MzgsNTAxNC4wNTY2OTMxNjk3NCw4MjE1MTcuMDA1NTQxNDgzNSw1NzUyMjkuOTU1MjMzMTMzOSw1NjA4MzMuODE0MjI2ODcxNiw2NjQxMzMuMDQ4MDI2NzU5LDQwOTM2LjM5NzQxODU5MjQ0LDEwMzE5MjMuODU4MTE4MzA0LDQwMTI1Mi44NzI3OTgzMzQ0LDIzNDk4LjEzNTAzMDIxNzQ0LDg0ODg1NS4zMTQxNzg3MzgsOTM3MjEyLjM5NDIyNjY3NTksMTUzODM3NC43NDMwMzM0MTQsNzY1MTQuNjQxNTcyMTk0ODQsMTc3Mi40OTM5NzAzMjA1OTg3CiszMCxXZWQgMjMgRmViIDExLDU1NTIwLjI4NDg4MTUzODMzLDU5MTE4LjY4NDU5MTM5MTAzLDI2MzY2LjEwMDk0MDgwNzk1LDI4NzY3LjI3NTc3ODU2ODUyOCw4NTIyOS40Njk2ODM1OTAyLDg3MDgzOC44MTc4MjYwOTY4LDE0NDcwOTguMDg4MTY1NTMzLDk3MzQyMC4zNDM0NTQxMTI5LDcxMTEwOC43MTg0NzIyMjIxLDg5MDU3Ny4yODM3NTkzNTM2LDE4NzYyMC41OTU5NTgyNzM0MiwxMjYzNjUyLjYzMzgzODM4NywxNDc5OC4yMDM3MTMyMTUwNjksNzI4MTIwLjg4NjU1MTM0MDksNDcyNDc1LjY3Mzc3NTk4NDU2LDQzMTExMy44MzgzODI2MTcxLDUyNDM1NC4zMjM3MDQ4OTc3LDEwMTU0MS43MTA5MzQ1MDU5Nyw5NjIzOTIuMzExMTg2NTQ2MSwzMTk1OTIuNTExMTk4MDY2OSw2NTUyMS40MTc5MTU0NDA5NCwxMTAzMTYyLjMxNzEyNjAyNSw4MTM1OTUuNzk0Mzk4MjIxMiwxMjQzNjY0LjY0MzMwMDQ4NjUsNjA0NzEuNjg4NTY1OTE0MTIsMTc3My44OTgxNTA5OTYwNTQ1CiszMSxUaHUgMjQgRmViIDExLDQ0OTkyLjQ4NTY0NzAwMzQ0LDUxMzM1Ljc3NzI3NzE4NDA1LDIxMTI1LjM2NTQ4NjQyNzQ3LDIyMDkxLjU0MDczMzg0Mzc0Nyw3NjQ5MC4xMTMwNTgyMTUwNyw2OTcwNzUuNzE1MDA1MDg5NiwxNTQ5NTEyLjA0MDM2NDEyNDgsODAyNTcyLjE4NTM0OTg1MTQsNTcyMjkxLjMzODMzNDQ1NzcsNzE2NTM1Ljc2MTUyNjkxMzYsMTUxNjYzLjA1MzM3ODU4NDQ3LDEwNDI4OTEuMzUxNzk4MzMyOCwzODg3NC45NDQzMDc1MDQ2MTUsNjE0MTMzLjg5NjU2NjY1OTQsMzc3Nzk1Ljg5OTE0NDIxMDgsMzI3MDc5LjI2MTA4NDYwMTg3LDQwNjYzOC4wODM4Nzg0Njg1NSwyMDg0MTcuMTA2NDA3MjYxOCw4MzgyMzIuNzU1ODYzNTc0OSwyNDk1NzkuNTcwOTAwNTk5MjQsMTY1NTA0Ljg5NTI3NDY2NTk2LDExNDAwNjIuNzQ2MjAyODgyOCw2NzY3NjIuOTQ4MzE3NjMxMSw5ODI1NDAuODM0NDI5OTM4OCw0NjkzMy45NjMyMjEyMTI3MywxNjA5LjIzOTI1MDA0NjY4MzUKKzMyLEZyaSAyNSBGZWIgMTEsMzU2MDYuNzk2OTgyNTIwMzksNDI1OTcuODk2MTU1NDAzOTcsMTY1ODAuNTE0NDgxNjg4ODE3LDE2Nzg1Ljc2NTgzNjEzNjc4Nyw2NDc4Mi42OTcyNDMyNzMzMyw1NDY3MjMuMDEyMzE0MjAxOCwxNDQyMjQxLjMxNjA3OTg4MzYsNjQzMDA4Ljk5OTYwOTc2NjMsNDUwNjMzLjA1NzYwMDI4Njk2LDU2NDEwNC4zMjk3NTg0OTA4LDExOTgwNy4zODE5ODU0MDExNSw4MzYxMjYuNDgyNjkxMzI4Myw5Mzc2MS4wODA5ODcyOTQ3Nyw0OTk4MDMuNzQ1MTkzNDYxNSwyOTYwNzQuMDE1MzA4ODEyNjcsMjQ2MTI0LjAzNDI4MDYzODI3LDMxMTM1NS44MDU1NjM2NDkzLDMyNTQyNS4xNjczMDI5NzU4NCw2OTY3NjIuMzMyNTIyNjA1MSwxOTIxMzQuMDc4MDc1ODkzNzgsMzgxNzc5LjgyNDgwNjY5MiwxMDQzMTQxLjczNzU0MTUwNzcsNTQ1NTY3LjgyNzUyMzU5OTQsNzYzMTA2LjYxMDI5MzU5MTMsMzU5NTkuMzc1NDA0MTA1MjMsMTM3MS44NDgyNTkzMTQ1OTY0CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0lub2N1bGF0aW9uVGVzdF9GRF9SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vSW5jaWRlbmNlXzAuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Jbm9jdWxhdGlvblRlc3RfRkRfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL0luY2lkZW5jZV8wLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYzI0NDAxCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Jbm9jdWxhdGlvblRlc3RfRkRfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL0luY2lkZW5jZV8wLmNzdgpAQCAtMCwwICsxIEBACitpdGVyYXRpb24sdGltZSwKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvSW5vY3VsYXRpb25UZXN0X0ZEX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9JbmNpZGVuY2VfMS5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0lub2N1bGF0aW9uVGVzdF9GRF9SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vSW5jaWRlbmNlXzEuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJjMjQ0MDEKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0lub2N1bGF0aW9uVGVzdF9GRF9SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vSW5jaWRlbmNlXzEuY3N2CkBAIC0wLDAgKzEgQEAKK2l0ZXJhdGlvbix0aW1lLApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Jbm9jdWxhdGlvblRlc3RfRkRfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL0luY2lkZW5jZV8yLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvSW5vY3VsYXRpb25UZXN0X0ZEX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9JbmNpZGVuY2VfMi5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDEyNGRjNgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvSW5vY3VsYXRpb25UZXN0X0ZEX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9JbmNpZGVuY2VfMi5jc3YKQEAgLTAsMCArMSwzMyBAQAoraXRlcmF0aW9uLHRpbWUsRUctRlJHLUcyMTAwMDEsRUctRlJHLUcyMTAwMDIsRUctRlJHLUcyMTAwMDMsRUctRlJHLUcyMTAwMDQsRUctRlJHLUcyMTAwMDUsRUctTE9FLUcyNDAwMDEsRUctTE9FLUcyNDAwMDIsRUctTE9FLUcyNDAwMDMsRUctTE9FLUcyNDAwMDQsRUctTE9FLUcyNDAwMDUsRUctTE9FLUcyNDAwMDYsRUctTE9FLUcyNDAwMDcsRUctTE9FLUcyNDAwMDgsRUctTE9FLUcyNDAwMDksRUctVVBFLUcyOTAwMDEsRUctVVBFLUcyOTAwMDIsRUctVVBFLUcyOTAwMDMsRUctVVBFLUcyOTAwMDQsRUctVVBFLUcyOTAwMDUsRUctVVBFLUcyOTAwMDYsRUctVVBFLUcyOTAwMDcsRUctVVBFLUcyOTAwMDgsRUctVVJHLUczMDAwMDEsRUctVVJHLUczMDAwMDIsRUctVVJHLUczMDAwMDMsRUctVVJHLUczMDAwMDQKKzEsVHVlIDI1IEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyLFdlZCAyNiBKYW4gMTEsMy43NzAxMjg3OTM5NzQ1NTE3RS00LDAuMCwwLjAsMC4wNjI3MjcyOTUzMDU0MzY4MiwwLjAsMC4wMjI2NjE2Mjk0NTY3NDQyOCwwLjAsMC4wLDAuMDA5NzMxOTMxMzk2MTM4MDA5LDAuMDA2OTU1NDI2MTE4NDk4ODgyLDAuMCwwLjAsMC4wLDAuMCwzLjY5MTI2ODEwMzM0NTQyMTVFLTQsNS40NDE0ODc0NTkyNDk1NzMsMC4wNjM0OTU4NjM3Nzc1NTA2OCwwLjAsMC4wLDAuMDI1MjI0MzU3NjU4MTg5MDc1LDAuMCwwLjAsMC4wLDAuMDM5MTAxNTg3MzIzMzExMTE0LDAuMDIzMDc3MDU2NDQ5OTU0MTE0LDAuMAorMyxUaHUgMjcgSmFuIDExLDIuNjM5MDEzNjE0MDI1MzkxRS00LDAuMCwwLjAsMC4wNDM5MDc4MjAwMzE3NDcwODQsMC4wLDAuMDE1ODYyNjgwNDY0Mzc3NjY1LDAuMCwwLjAsMC4wMDY4MTIxNTQzODYwMjg4OCwwLjAwNDg2ODY1NzA3MTkyNjk1OCwwLjAsMC4wLDAuMCwwLjAsMi41ODM4MTI3MzYxNDYyMDhFLTQsMy44MDg5MjU4MDQyODM5NjQ3LDAuMDQ0NDQ1ODE0Njk3MzYxNDEsMC4wLDAuMCwwLjAxNzY1NjUzODAxNjg2NTkwNCwwLjAsMC4wLDAuMCwwLjAyNzM3MDMxNzEzODQ3MDQsMC4wMTYxNTM0Njk5Njk1OTM4NywwLjAKKzQsRnJpIDI4IEphbiAxMSwwLjAwMjAwMzk0NTUwMzU4MjQ3Miw1Ljg1MjQwNzUwNzQ1MDcxMUUtNCw0LjIwMjI5ODMyMzkwMDUzNUUtNCwwLjIzMTk2ODgxMjQ2MTU0MDMsMS41MjMzMjgzNTM4Mjg2Njc3RS01LDAuMTEwMzU2Mzc5NDQzMDAzMDYsNC4zMjE3NjYxODI4MDEyOTc2RS01LDAuMDAyMzU2OTgzODg4NDgzNzE3NiwwLjA0ODU3NjUzMjU3Njc2MjkyLDAuMDM4MDExMTU1OTc4NzQwNTksMC4wMDIwMjExOTkzMjQwNjY5NDQsMC4wMDIwMzM0MTEzNzA3NDU0MzkzLDAuMCw4LjU4NzUwMjA5MDI1MjExOUUtNCwwLjAwNjA1NTI5ODk1NjEzNTU2NCwxNC40MzkyNTExNzIxMTY1MDEsMC4zMjc5MjYyMTQwMDc2NzY4LDEuMjc2MTY4ODk3Mjg3Nzg3N0UtOCw0Ljg1NTk0OTg5ODk2NzMyMTNFLTQsMC4xMjgyNDA2OTI1MzE3NjM4NCwxLjI3NzU4MTkzMzc5MzIyMTJFLTgsMS4yMzM3NDQ1MDEzNjYyMDI1RS04LDAuMDAxNjI1NjkzMjU3OTE5NzA5NiwwLjIwMjM0MDM3NDg2NDE5Mjg3LDAuMTAwMzc1OTIwOTMwOTgyNjYsMC4wCis1LFNhdCAyOSBKYW4gMTEsMC4wMDM3Njc2NTUzMTc2NDUzOTk1LDAuMDAxMTcwNDUzMjE3MTIwODkwMiw4LjQwNDM5MzQxNDg5MzUyOEUtNCwwLjQyMzk3MTcxOTg5NzI4NDMsMy4wNDY1ODMwNDg0ODc0NDhFLTUsMC4yMDYyNzMwNjY3MDM5NjcyOCw4LjY0MzMyMzU4MzYzMTQxOUUtNSwwLjAwNDcxMzg1MzkwNTc1NDA5NCwwLjA5MDk1MTk1MDQ5NjE4Nzc4LDAuMDcxNTkwMjA3MTgxNTY0NiwwLjAwNDA0MjMwMDk0NTUzODczOCwwLjAwNDA2NjcyNDUwNjI4MDIyMjUsMC4wLDAuMDAxNzE3NDU4OTI4ODgzMTM2NywwLjAxMTg3NTE4OTUwOTA3NzQ2NSwyNS40MTE3NjIzNDI1ODMwMjUsMC42MTUzOTI3NDY0MDUzMjYzLDIuNTUyMjc2MTQzNzk2MDgyN0UtOCw5LjcxMTY2NTE0NDE0NDY0NkUtNCwwLjI0MDQwODQ4MzgyODMwMDgsMi41NTUxMDIxNDg1NDQyMjJFLTgsMi40Njc0Mjk0MDE0NDQyNTg4RS04LDAuMDAzMjUxMzA3OTQwODczMjQzLDAuMzc5NzY1MTU0MTcwMTA1MiwwLjE4NjA0Nzk3ODU2NTQ1NDk2LDAuMAorNixTdW4gMzAgSmFuIDExLDAuMDExNTM1MzE4NjAxODI3MDgsMC4wMDQ1NTg3NjQxNTI1ODEzODIsMC4wMDM3NzU0MTkzODAzOTYzOTQ0LDEuMDU2OTM1OTgwNzQzNDk3NywxLjU3NjUzNDg0NDIyNzIyRS00LDAuNTk3MzA1OTc0OTU2NDkzNCw0LjUyOTc1OTI1MjIzMTMxNDVFLTQsMC4wMjI1ODAwMzI5ODQ4MDUxODUsMC4yNjgzNDUyMDkxMDIyNDY4NSwwLjIyMjgwNTc2NDQ3MzAxNDI4LDAuMDE3OTE3Nzg0NjkyMjk2NiwwLjAyMDUwNTQ1NDg3NzM4MDk5LDYuNzUzMzk4OTA0NDg0ODM4RS04LDAuMDA4MjMzOTQ0ODkxNDQ5Nzg3LDAuMDUxMDU5NzcyNzI1NDA2NSw1OC4yNDY1NDUwOTYwODU4NDYsMS44NTA3MzUxMzY4NTcxNjQzLDMuOTQzNTY5MTE1MjMwNjY2RS02LDAuMDA0Nzc2NzgyODA1MTMxNjQ5LDAuNzE1ODk1NTEzOTgwNTE3LDEuNzUzOTU3OTM0MzEwODExNUUtNiw0Ljg4NjA5ODYyNzEzMzEyOEUtNSwwLjAxNTM2MTk0MTM2NzY5MzYxLDEuMTQzNTI1NjQ5MTYwNjMzNiwwLjUwNDIzNzY3ODU0ODM2NzMsMS4zODIzNTI5NzE5NTgyOTkzRS02Cis3LE1vbiAzMSBKYW4gMTEsMC4wMjcyMTI0ODA3MTQyNjcyMTIsMC4wMTE2Mjc4NDU0OTkxOTE3MTcsMC4wMTAwMDU5NTg0OTgxMjMyNDYsMi4yNzQxMzc5NTkyNDg5ODk2LDQuMzEzMzcyMjIyMTk4NTE4NUUtNCwxLjM3NzYyOTYwNjI2MDE4MjUsMC4wMDEyNDI1NTE1MDEyOTU0NDUyLDAuMDYwNzU2MDg1MTY1Mjk4MjEsMC42MjM3NTc4NTI3NTgzMjQ1LDAuNTI4OTM5MzI5NDAxOTk5OCwwLjA0NzMzMDc1MjExOTM1OTk1NiwwLjA1NTc5ODY2MjUxNDc5NTgxNiwyLjIyODU4ODUyNzM3NTQ5NDZFLTcsMC4wMjIxNTkzODAzMTc4MjE3MTMsMC4xMzM5NzcyMjk5NzA2NTUyLDEyMC4wOTc2NjE2MTE5NjgsNC4zMzUyODk2NDMwMjAxNzMsMS4yOTM5MDk5MDAyNjM3ODY2RS01LDAuMDEyOTI4ODk1MjIzMDYwMjY3LDEuNjcwMzEzNDAyMjA1NzA4NSw1LjcxMzQwNzAyOTQyMjc4N0UtNiwxLjYxMTY2ODQ4OTQ4MjY0MjVFLTQsMC4wNDEyMDUwMzEyMzQ1OTczMiwyLjY4MDAwMTExNDcwMTczMjQsMS4xMjk2ODg5OTcwMTA3MSw0LjU2MTY5Njk5MTM2NTI2NEUtNgorOCxUdWUgMSBGZWIgMTEsMC4wNjk3ODI2MzcyOTQyODg1NywwLjAzMjMzMzA2ODc5NTIzMDg4LDAuMDI5ODcyNjY0MzQ5MzU4MzYsNS4wNzUyMTQ5ODI3OTc5MTA1LDAuMDAxNDAzNTA1NDk1MzU0MTg0NSwzLjM5NjUxODg5MTE5NjM5MiwwLjAwNDA4NTg2MzQzMDkzMTM3MjUsMC4xODg4NTAxNzAzMjAyMzAyMiwxLjU2MDkwMTk5MTU2NjE2NDYsMS4zNzEwOTY5NzczOTQ4ODk2LDAuMTQwMzI2NzU5NDM0OTQ1MzMsMC4xNzg4MjM5NjkxMDYwNTI3LDEuMTQ0MzIxOTk1MDgyNTY4RS02LDAuMDY4ODg3MTE0ODUxNjE0NjQsMC40MDQ3ODc3MDI0ODI3MjEwNiwyNTcuOTM2MTU3NjA5NDAxMiwxMC45ODAwOTQyOTIwMTc5OTUsNS41NTA2MTk1ODAyMTE3OTFFLTUsMC4wNDA4NjQ1NTU2MTkwMjUyNDUsNC4yMDE1MTU4NDY2OTcxMjYsMi40NDA1NzU1ODIwNjM3NzJFLTUsNy44OTkxNzY2MjY5MzI5MzRFLTQsMC4xMjcwNjc3NDc0Njk2MjQ2Myw2Ljc5Mzg1OTUzNTE0NjM1MSwyLjY2MjM2MTg4NjE3NDQ0OSwxLjk5Njg2ODMzODAxNjA1MzRFLTUKKzksV2VkIDIgRmViIDExLDAuMTY5MjMwMDIwODQ2NzIzNzMsMC4wODI0Mjk0MDQyMDc4MDYxNiwwLjA3OTc2ODY2MDkzNTAwNzEsMTEuMDI4NjMwOTkwNDE1NSwwLjAwMzk1MDcxMDEzNDY2ODMwOCw3Ljk5MzM0Mzc4MzI1MDA2MSwwLjAxMTU3MjkyMjIzNDAxODM3MywwLjUxNzMwNzg1NjA3NDAwOSwzLjcxNjg2NDE1NDIyMDU3OSwzLjM1MTQ1NDI1MTU3Mzk0MSwwLjM3MzA2MTQ3NDE0NTg2NzY2LDAuNDk4OTI5OTA1OTMyNjI5MywzLjkxMzYyMDY3MTcyNDk1OEUtNiwwLjE4ODcwODIwMzM4NTE0MDc0LDEuMDkyMTI1MzkwOTYyOTkyLDU0NS4zMjYyNzkxODQwODczLDI2LjM4MDk1MzUzODI3MDM5MywxLjc3MDIzNTgwMjcxNTkwMDlFLTQsMC4xMTMwODUxOTQ0MTgzMDMxNCwxMC4wNDIyOTc0NDgwODMzMjUsNy43NzQwNjU0MDExMjU3MDRFLTUsMC4wMDI2NTcyMjkzOTY3NDU1NDU0LDAuMzQ2MzgxMzA1MTg2MjA3MywxNi4zMzQzNTAzODkzOTkyOSw2LjA0NjQ2ODY4NzQ5MzkzMyw2LjQyMTc1NDEzODc5MDAwNkUtNQorMTAsVGh1IDMgRmViIDExLDAuNDEzNTgzMzc3MTgzOTExNywwLjIwOTgwMjMxNTU5MzgwOTUsMC4yMTI5NzkyNTYyMjMzNzUyNCwyMy45ODE4MDQ4MjAyMjUxLDAuMDExMjYzNDU1ODY2OTk0MzQsMTguODgyNTE2MTg2MDIzODE0LDAuMDMzMzAxOTA0MDc4NzgwNTMsMS40MjU2NzU4MTcyNDQ0NDk1LDguOTA1MzI1OTIzNTA3NTUzLDguMjYyNDczOTIxMzEwMjY5LDAuOTkxNTgwMTUzNDA2Njg0NCwxLjQwNjYzMDA2MDg0OTE1NTgsMS4zOTU5NDQzMjM2ODc3MDlFLTUsMC41MTk5ODkzOTQ3NTk2NjM0LDIuOTc0MzkzODI2Nzk3MDgzOCwxMTYwLjIxNzk1NzQ2MjY1NSw2My43OTMzNDc2NDUzMDgyMTYsNS42NDAxMjI5MDc3MTIwMUUtNCwwLjMxNTczMjIzNjIzMTQwOTQsMjQuMTQzMDI4OTI4MTYyMjMsMi40ODEyOTMyMDE4NzY2NDlFLTQsMC4wMDkxODc0NzQyMjg5OTQwNzYsMC45NDg5NzI4MTQ2Mjc2OTg0LDM5LjUzMTgxOTk0NTY0MjIwNSwxMy43NDgzMzIxODI5NDQzMDMsMi4wNTMwNzk2NDczMzEwNjFFLTQKKzExLEZyaSA0IEZlYiAxMSwwLjk5NDY1NjgyMTE0OTk1MjUsMC41MTk5NzM1OTY1MzA4OTUsMC41NDkzMzk4NjY5MzA5NDEsNTEuNzY4MTMxNjE2OTEzOTYsMC4wMzA3Mzk1ODM1NDAwMTA5MTUsNDQuMDAwMzA3MzcyMjM2NTksMC4wOTE2Mjc3MjQwNzY0Nzc2LDMuNzgwOTM3NTYwNzEyODY1LDIxLjAzNzMwNjA5MDE0NjczLDIwLjAyNzY3MTk5MjE3NzY0NSwyLjU0ODI0OTM0OTYzNzE1NCwzLjgwMzA0Nzc3MzY2MzM5OCw0LjQ3Mzc0NTY0OTUwNDEwMkUtNSwxLjM3ODczODg1MjU5MTg1ODUsNy44MjUxNTI1OTYwNDQwMzQsMjQ2Mi41ODk3MzU2Njg4OTIsMTUxLjkyNzk2NDg0MzIzMTQyLDAuMDAxNjYxMzk2OTQ0NzExNjQxNSwwLjg0Njc3MjUwNTc1NjgzNTMsNTcuMTkxMjc1OTk2NTMyOTQ0LDcuMzI0NTA4OTE0Nzc3MDRFLTQsMC4wMjg3ODQxNTIwNjI4NDQ4NjUsMi41MDM5NTgxMjE0ODM5ODE0LDk0LjIyMjY0NDc0MzcyMjE5LDMwLjkyMDUzMzUxOTQ0NjM3Niw2LjA1Mjk2OTQzOTc2Mjg0MUUtNAorMTIsU2F0IDUgRmViIDExLDIuMzgyODk3ODg5ODA4MzM1LDEuMjc1NjA2ODk5NjkxNzIyMywxLjM5ODAyOTI4NTMzNTAxLDExMS40NTg3Mzk3NzU2OTYyLDAuMDgyODk3ODIxOTM1NTE1NTUsMTAyLjA3MzMzMjg0NjA3NjI2LDAuMjQ5MzY0MjMxNjg1OTU5MjUsOS45MDI1NjI2NTIzOTQyMyw0OS41MjE2NTIyNTg0NzcxMjUsNDguMzU1NDk5NDIyMDQwNDksNi40NjQ5ODk1NTU0MjYyMTgsMTAuMTU3MzY3NTgwMTUzMTk2LDEuNDA1Mzc3NTIxNTYwOTI0RS00LDMuNjA5NzI0NDY5ODIyNzE3LDIwLjM3NTQzNTQyODU4ODQ0LDUyMzEuMTA5MjA0OTc1MjgxLDM2MC4zNDc1NDY2NzI1NzA2LDAuMDA0NzY4NTI5MTI2MzMyODI3NSwyLjI0MzczNDc4NjQ5NzQyOTcsMTM0LjkyMDY2OTg2NDkxNjYsMC4wMDIxMDk3NTIyMDU0MzU2MDI1LDAuMDg4MTA1NjQxNDQ3ODE2MTksNi41MjQwODcxMzg1MzM4NTEsMjIzLjY3NTQ3Nzc3MTQ3NzE1LDY5LjI1NDM2MjQwODU3MzgzLDAuMDAxNzMxODQxNTU1MzU0MjMxNAorMTMsU3VuIDYgRmViIDExLDUuNjY3MTg0ODM2NDM4MTk4LDMuMDkwNDU3MTI1Mjg0NTQ1LDMuNDk4NzY3NzkwNDAyNTMsMjM5LjE3NTI1MzQ2MzQ4NzU2LDAuMjE5MTQ5MDYyMDMxMjMwMiwyMzUuMjQ5NDU2Njg3NzkyMDUsMC42NjUxNTE3Nzg0NTMwOTc0LDI1LjQ3MzE5MjQ2OTc3MjA4NCwxMTUuODQwOTM4NDg1MDA1ODksMTE1Ljg1NTY2MjA2ODk5Nzk2LDE2LjEzOTI0NzQwNjkxOTczNiwyNi42MTAzMTA0OTkwMjgyMSw0LjIzMTE3MzgxMzMyNzU1RS00LDkuMjgxNTI3MTQ0ODA3NzYzLDUyLjE5NzA1ODQ2OTcxNTk3LDExMTAxLjk2MDI2MTk3Njg3OCw4NDguNjI2MzE1ODk2MjkxLDAuMDEzMjM2OTk4ODczMjk0MzU1LDUuODM1OTM4MDgwMzMyNDAxLDMxNi4xMDUxMjk1NTkyODU0LDAuMDA1ODc5OTI0MjE0NTQ2MzAyLDAuMjU5MDc2NjMzNjAyMTcwMDQsMTYuNzAwMjI0MTAyMzMxOTksNTI3LjI1NDAzNjYyNDA3NjUsMTU0LjI5MzAxOTIzMjc3OTUzLDAuMDA0NzgyMzA0NjgzNDA1NzEzCisxNCxNb24gNyBGZWIgMTEsMTMuNDE2Njg1MTk3MjYyMDUxLDcuNDI0NzExMTQ4Mjc4NzI2NSw4LjY1NTQ0Njk2NzA2NzY4NCw1MTEuOTI2MDIwMzE0NDg1NzUsMC41NzIxNzc2Mjc0NDU0NTMsNTM5Ljc3ODk0MjkxOTA1OTUsMS43NTI4Njg3MDg2OTI4MzcyLDY0Ljc1OTEyMjgxNzE1OTksMjY5LjkyMTE0ODA1MzM4NjYsMjc2LjI1MzA1OTYwODg4LDM5Ljg1MTIyOTM2Mzg0NjY5LDY4Ljg2MDk5NjYzNzgyMzg3LDAuMDAxMjQ1MTg2MzIxMTk5MjI0NSwyMy41ODMwNTI3OTU5MTkzNSwxMzIuMzA4MDE0MzY4NTA2NTUsMjM1MzIuMDMyOTI5NjE4MTY2LDE5ODkuMTUzODYzMTg4MTIsMC4wMzU5NzkyNTMyODM0NTg1MTYsMTQuOTk5Njc4NjI2MTY4NjI2LDczNy4yMzgwOTAyNjYyMDIzLDAuMDE2MDU4OTczMDI3NTIxMDk0LDAuNzQ0Mzg3MTQzMTcyMzk3NSw0Mi4yNTA1NjYwODg2MDYzMywxMjM3LjIxOTk2NTg4MzQxMTUsMzQyLjQ1NTIyNzMyNzQzOTA1LDAuMDEyODk4NTE1MjYwNDQ0NzE3CisxNSxUdWUgOCBGZWIgMTEsMzEuNjEzNjQyNTM1NTMyNSwxNy42OTk5NzU5NTM1MTA1MiwyMS4xODMzMDc2OTI3Nzc0NCwxMDkyLjI0NTkwODUzNDkzNTYsMS40NzU0MTg1NzQ1MTI1NDAzLDEyMzMuMTM5ODE1NjgyNDU4Nyw0LjU2MjM4ODAwNDI0NzMwMiwxNjIuNzc1NzA0ODI2MzI2Nyw2MjYuNDYwMzM4NTY2MDk3Miw2NTUuNDMwMzk4NzY5MjU4NCw5Ny40MDc1OTMwNjExNjM5NCwxNzYuMDQzNTQzMzg4MjUwMDcsMC4wMDM1Nzc4Mjg4MjEzNTAyLDU5LjI0MDMwMTkyODc5NTQ5LDMzMS44NzI4MTM0OTcyMjI2LDQ5NzE0LjM4MjQ4NzA4MTIzLDQ2MzkuMzQyMzg0MjA0NjY4LDAuMDk1OTEyMTAwNjM1ODA2NTUsMzguMTA1MzMxNTc4MTYzMDksMTcxMS4zNTI1MjMyOTYyNjA2LDAuMDQzMDM2Njk5MjM0ODA5MDcsMi4wOTAwNDY4NzMxMDUxOTgsMTA1LjY5ODU3MDg0NTk3MjU0LDI4ODkuNjQzMjk1NzQyNTMyLDc1Ny4xNzQ0NzIxMzA3MDUxLDAuMDM0MDYwNDczNjI1NTIyMDkKKzE2LFdlZCA5IEZlYiAxMSw3NC4xOTg1MjUxNDQzNDc3OCw0MS45MzAxNjE1MzI0NjU5NSw1MS4zODUyNjU0OTY0NzAxMjYsMjMxOS42NTA2NDU5MDMyMDQzLDMuNzY2NzExOTc2NjMxNTQzLDI4MDYuNTA1MjI5MTMwNDQ1NSwxMS43NTg4MjExOTAzMzQ1MTcsNDA1LjQwMTE5OTM5NTM1NjYsMTQ0OS4xODc3ODUwOTY0MDksMTU0OC41NzU2MDcwMjAzOTM4LDIzNi4xMzU5MDc5MTkwMjA5OCw0NDUuNjYwODI2NTYzMTg1MjUsMC4wMTAwOTY5MDE0MjQ3NDU2NSwxNDcuNDM3ODU4MDgwMTc5MzUsODI1LjI5ODczMDI0MDIwMTIsMTA0Mjc1LjQ4MjYxNDA1MTM2LDEwNzY5LjAzNjM1NTQ2NDE3NywwLjI1MTgyNjQ0Njg2NzQyNTM0LDk1Ljg5NTU4NDk5NDUxMTkyLDM5NTUuNDQwOTQ0MjMwMjczNSwwLjExMzY2MjMwOTE3MDk4NTA4LDUuNzY1MTAwODQ2MzUyNDYxLDI2Mi4wMjUyNzUwNjY2MzQ4LDY3MjEuNTk3MjIzMjQxNjg2LDE2NjcuNDI0NDA2ODU4NDM1LDAuMDg4NDQxNDY2NjIyNTc2NzQKKzE3LFRodSAxMCBGZWIgMTEsMTczLjQ3NzU2MzgzNTQxMzEyLDk4Ljc2MDg3MzgwODg5OTYsMTIzLjY0NDQ1MDgwMTc4NzMsNDg4NC43MDg0NDk3MjUxNiw5LjUyOTQ5MjgzODg3MjgzNCw2MzYyLjc1NzQwMzA0MzAyMDUsMzAuMDM1NTk4OTUzNjM0OCwxMDAxLjM1NjIwODgyOTA1MjMsMzM0MS40MTExMDc5NjMxNiwzNjQzLjc4MjEzNzQ3MjUyNjgsNTY4LjIyNzQ5MTAwMTkwMjMsMTExOC4yMDI1MDgzNzE5NzE4LDAuMDI4MDMyNTQ1MDYzNTU0NDIsMzYzLjkwNzI1MjMzNjg2NDEzLDIwMzUuOTQ3MzAwNDQxODY3NCwyMTUzMDEuODk2NzMxODQyNTQsMjQ4NTEuOTQxNDUyMjc0OTk4LDAuNjUyNTI1OTc1MzQ2Mzc1MSwyMzkuMjc5OTYxNjk1MjQwNjQsOTA5Ni45MDMxMTQ4NzIwMjYsMC4yOTYzOTU0Nzg0ODI5ODQzLDE1LjY1MjIyMzkyMjM0NTM4Myw2NDQuMjU3NTMyNTgzNTA3NCwxNTU2OC4wOTE0NTMzMDc5NjMsMzY1MS43OTAyOTQ0OTQzMjY2LDAuMjI2MzQyNTAzNzM1MDg0NTgKKzE4LEZyaSAxMSBGZWIgMTEsNDAzLjk5ODcwNjM0MjYwNTUsMjMxLjM0NzQ0OTY5MzMyOTIsMjk1LjI2OTk0NzQwNTY5MzEzLDEwMTExLjk4MTE1MDQzNTMsMjMuOTE4NjY3NzU0OTI4MTE2LDE0MzYxLjYxNzAwMjIxMTQyMiw3Ni4xMjYwNjk3NDIxMTAwNSwyNDU1LjM5OTg4NDk3OTYyNSw3Njc2Ljc1NTY1NDQ4MjQ1Niw4NTM3LjU1MzUwOTA0ODIxOSwxMzU4LjE4Mjc4MjY2NDExMjIsMjc4My42OTkwODg4MjI2MjY0LDAuMDc2NzY1NTA0NzE2NjE2OTIsODkxLjY4MTk1MjMzMTU2MzYsNDk4NC43OTQ5OTg1NDE0ODMsNDI5NTkwLjA2ODI0MjYzNTUsNTY4NTYuNjA4MzkyODE0Njc2LDEuNjcyMTAzODIzMjk0NjU4LDU5Mi41NzYzMzA3MjA0MTI3LDIwNzc5Ljg0NzQ3NTMyNjE4NywwLjc2NDcyNzIxNTcyNjk2MDIsNDEuOTI5NjQ2NDIwMTc5MywxNTcyLjY3MDk1Mzg2NzUxMjUsMzU4NzMuNDcyODAxOTQ2ODksNzkyNC4xNjMwNzA2NjU3OTI1LDAuNTcyMjAwMTkzNzk2Mjc1NQorMTksU2F0IDEyIEZlYiAxMSw5MzYuMzMyNzE2NjgxOTU2LDUzOC42MjAxOTgwMTI3NzIsNjk5LjQyNDU0MzY1ODk5NDMsMjAxOTMuNTcwMTY1NzU2NTMsNTkuNjAxMTQxMTczMjExMTgsMzIyMTMuNDQ2NTYxODgwOTY2LDE5MS41OTMyNDg1NTAwOTIwMyw1OTc5LjU5MDU3ODM0MTgxMSwxNzU1MS40MTA3OTg0MDY3NjcsMTk4OTkuNjUxODcxNDYyNTY0LDMyMjMuOTk3Njg5ODg5MTM4LDY4NzguOTEyNjkyNDUxNzUzLDAuMjA3NjY3OTE5OTU0ODg0ODQsMjE3MC4yNzgzNTk5MjgyNTcsMTIxMDYuNTg0MzQ4MDQzMTc4LDc5NDk3MC4xOTQ5NzgxNjAzLDEyODAzNC45ODU1MjU5NjA1LDQuMjQzMzM5OTg4MDcyMDc0LDE0NTcuMTg2OTc1ODg0MTcwNiw0NjkxOS42MzQxNDUyMDM2MzYsMS45NTQ4NjgxMDc4Mzg3OTk3LDExMC45OTg2ODY0Mzk2OTc2LDM4MTMuMTE3NzU3NzAyNjcxLDgyMDMyLjk0NzYyNzg4MjA1LDE2ODg4Ljg5MTIyMzcxODkzNiwxLjQzMTEyMDk1MDY0NDQ3OTMKKzIwLFN1biAxMyBGZWIgMTEsMjE1NC44NjAyOTUyNTI0MTQ3LDEyNDMuNDY0MTI5Nzc3NzA4OSwxNjM5LjQ4Mjg1MjgwMTI1MTcsMzczMTkuNDk0MDc5MjQ0NjgsMTQ3LjUwNjI4MDc1MzU3MzM4LDcxNDkwLjUyMjQzNzQ4NDMsNDc5LjEzOTMyOTEzOTQxNDgsMTQ0NTkuOTY5MTIzOTc2ODI0LDM5ODA4Ljc5MDAzOTk1NDA3NCw0NjAyMi4wMDg1MDgyMzQxMiw3NTg4Ljc0OTM2ODg5Mzg4NCwxNjg3Mi45NzkzODQzMDc5NDIsMC41NTU4MDQ5NTEzNzc2MDI2LDUyNDcuOTM5MDc4MDI0NDc0LDI5MTAwLjA3ODU2MzI5NDgyNSwxMjM4NjcyLjM4OTA1NjY4OTgsMjc5MDI0LjMxMTM5MTAxMDgsMTAuNjc2NzcxNzE0NDI2OTE2LDM1NTguMDkxMTQzODQ2MzU5NSwxMDM1NDEuNjg1NDQ4MDA5MzUsNC45NTY5MTQ4MjExMzMzOSwyOTAuNzg3OTAwMzA2MzcyNyw5MTgyLjYxNzEyNTQ1ODU0NiwxODUwMzEuMzMzMTUyNDU4MjgsMzQ2NzEuNzA5MTUwMzMwMzIsMy41NDUzNTE0Nzg3OTMzMDI1CisyMSxNb24gMTQgRmViIDExLDQ4OTguNzE1OTI3NzkyMjU0LDI4MjkuNDgwMjA1MDk4ODMyLDM3NzguMTI2MDg4MzYxNDc5Niw1ODA5Ny4zMzk5NzM5OTY5NCwzNjIuNTQwMjI4NDUwOTE3MTQsMTU1NDY5LjA5OTQ3NzE5MTY2LDExOTEuMDc3MDA0NTQ1NDU3OCwzNDY3MC4yODA0MTE4MDk0OSw4ODk0Ny40Mjc4NjYxNzQ4NSwxMDQ5NjIuOTUxMTk3MzM1NDgsMTc2MzIuMjQ4NDMwNDIxOTIsNDEwMjYuNTUzMDM0OTI3NzUsMS40NzMzOTMxNjYzNTIxNzg0LDEyNTk5LjIwNTk5NDE0Mjc5Niw2ODc3OC44NTg5NzY1NTY2NCwxMjQzODk3LjMwMzg1MzY3MTMsNTY1MjA2LjQ5MjM0MTE5OTgsMjYuNjU2NTM2MjcwNzc5MTY0LDg2MTcuNzU3MzEyMDU0ODIyLDIxNzUxMi42NDQ0MzE4NDY3NywxMi40Nzc2ODI2MDcxMTAwMDUsNzU0LjYzNzk0MjA1OTE4NTQsMjE5MzcuMzA0MDE2NzU4NjEsNDA1OTM1Ljg3NTkxNDk4Myw2NTYzNi42MDE5Nzk3NzQ0MSw4LjcwNDMxNDU2MTQ0NjAwMQorMjIsVHVlIDE1IEZlYiAxMSwxMzg4Mi4wNDA4NzEwNDExNzgsNzkxNC42MDI1ODU1NTcyNzIsMTA3MDIuMDg2NzE3NDY1NTM0LDUyODgxLjAwNTMxNjgxNzkzLDExODUuMTk4MDY2NTIxNTAzMyw0MDA1ODQuNDY0MjAzNzM2MzQsMzk3NC44NTU3MjMxNDExMzg3LDEwODI1My42NjE5MjcyMzEwNiwyNDI5NzQuMTc0MTMyMTQxODQsMjk2MzQ4LjkxMTg3MjM4NDQsNTE0MTcuNzg2NTU3NDgxMTcsMTMwNzI3LjMzODA5MDA1Mjk0LDUuMzcyMTEwMjQyNTQwNDYyNSwzOTY5My4xNjk2Mzk1OTc2OSwyMDE3NzkuNTI2MzQzNDgyNTUsNjc5MTMuMDA5NjQ0OTMzOTgsMTAyNjY0Mi4xOTg3NzM1ODk2LDg5LjI5MTU4MzM5NzYyMzMsMjczODEuMTk2NTUxNDU2NjQ0LDQ2NTgwMS4zMjU3OTQwODk0Nyw0Mi4zMzM3MzU3Nzk3NDQ4NCwyNjY2LjY5OTA0NDQ1ODY3OCw2ODM0My40MDY4MDE4ODE3LDEwMTkxMzYuNjUyOTc5NjQxLDEwODQ5OC4zMjI2OTMwMjM1MSwyOC4zMzgzNDQxODA1NDI1MDYKKzIzLFdlZCAxNiBGZWIgMTEsMzA1NzcuMDc4MDYwMzI4MjQ3LDE2MzQwLjc0Mjk4NTc1MTcyNywyMjM3My43NTM1MDAyMzAzNjcsMTk4NDQuOTk0ODQ0NzA0NTUsMzE4NS4zNjg4NDMxMDQxOSw3NjYyOTIuNTcwMzkwNzEwMSwxMDk5MC43OTM5NDY0NTk2MzUsMjcxMDk1LjY0ODYyODgzMTYsNTA2NDU5LjU2ODQzNTEzMTMsNjM2NjY0LjIzNDQ0MTMyNTMsMTE0NDkyLjE3MDM5NDA0ODE1LDMzMzg2MC42MzI2ODE0NDUwNCwxNi4xMjA3MjEzODg4MjgzNiwxMDIwMzcuNDUxODI4MjEzNTMsNDMxNjI4LjcyNDI1NDU0MDA1LDI0Ni42MTUwNDEzMjc3OTI2LDg0OTU3MC4yNjU2NDUyMzE0LDI0Ny4yNTg2NTc2NzM4OTA2NCw3MDMxMi40OTA1MjExOTc3NSw1NjEzNDUuODEwODk3MjgyNCwxMTguNzg3ODUwMjU5OTcxMjEsNzc1NC4yNjYxMDc5MDczMDksMTcyMTgwLjc0Njg0ODc0Mjg5LDE3Mjc1MDcuNjMwMDg0NDA3Nyw5MTcwNi40MTg2MDMzNDE5Nyw3NS42NTY2MTAyMDE2NjAzNgorMjQsVGh1IDE3IEZlYiAxMSw1OTEyOC40MDY0NjY3ODE2NjQsMjgwNzMuNDUwNTA2MDEzMTE2LDM1ODQ0Ljc5MDEwMzQ3MDcxLDguNTU0NDU1NTE5NDExMzY4LDkwNzQuNjM2Mzc0NzY0MDMzLDExMzc0OTMuOTAwNDYyMDM0NiwzMjg2OC4yMDE2OTI1NzQ4OCw2NTU5NDkuNjk3Mzk4MzA1Myw4NzYyNjcuOTQ3NDE3MzkwNSwxMTIzODU0LjkxOTE2NTIzNTIsMjE0Njc2LjA0NTQzNzgyMTUsODI2ODQ2LjAxMDk5NDI4NDMsNTMuMDU5MjQ5MjkyNjc2MTksMjY3MjU4LjU5ODc2ODQwMzIsNjgxMDI5LjEzOTQ4NDc2MDgsMjU0LjMwMDY2MDg4MjExNTkyLDg1NzI3Ljc1NDc2MzAxMjQ1LDczOS4wMTg4NDg2MTYyMzE5LDE4NTA4NS44MDA0MTg4MzczLDIyMTYwNC4xNjE3MzkzNjk1NiwzNjEuMTI2Njc1MjMzNDEyNCwyNDQ3OS43NzI2NzU4OTI3MzUsNDI5ODkxLjkzMTg1MTMzNzEsMTY5ODc0Ny4wNzY2NzY4MzEsMTg5NDIuMjgxNTU3MTM2MjQ4LDIxMS42NTY4MTU3NjEwMTcxNgorMjUsRnJpIDE4IEZlYiAxMSw2MjI4NC43NTg0MTY5MzMyMywzNDQxMy41MjQ3ODczMjc5OTUsMjI2MDMuODM3Njg5NTQxMDczLDEyLjg0NTU3NjgxMDY5NzQ0MywyNDQ1Ni42Njk3NzQ3OTc1NzgsNzA4NzM4LjUxNjE2NTg3ODUsOTgwMjguMDE0OTQ2NjAxMjgsMTA5NTY0Ni45NDkwMDM5MjcsNzA5Nzg3LjIxNzU1NDg0OTEsODkxNjQxLjI4MzYzNTUxMDgsMjAyMzk0LjgzOTE0MTI3ODI0LDE0MTk2NTcuMTMxODM0MTU0LDE4MC43MTc3NDQ0NTg0MzUxLDU3NjE2NC41OTk5MDI0MzU4LDM2ODY3Ny4yMDYwNTAzOTU1LDI0NC43MTUyNDkwOTQ0NTcxNiwyMDMuODI4MDI0MTUwMTU2NTUsMjIxOC43NDQyMTIzODc3OTA0LDQ0MTAxMy4yMTQzNDYxMjM3LDgzMi4wMzI4MTg4MjcxODc1LDExMTAuOTUzOTMzNDIwMzQ4NCw3Nzc4My40ODUxMDI1MTY2Myw4MDg4ODUuMjcxNzM4MDI2NSwzMjE5NDAuOTQ1ODA3Nzg1OTYsMTMuMDMwMzMxODU5MTI3Myw1MzkuMTIzNDQ0MTMzMjU4OAorMjYsU2F0IDE5IEZlYiAxMSwxODM5Mi42MTA5NzA3MjE0MTMsMzQyOTQuNzQ4ODAxNDgzNjg1LDIzMzMuODgwMjE0MjE1Mjc2LDEyLjg1MjI2ODEwMjAwMTIzNiw1MzU0Mi45NTU5OTY5Mjk3NTUsODY1NTMuNTE4MTE5OTE2NjgsMjY4NDE2LjU3NzczNDc4ODcsNzQyNDkxLjM4NDg1NTA2NTEsMTIyNzYzLjY2NzU4OTI1MTUzLDEzOTM0OC4yNTkyMDg5OTQ1Nyw1MDI3NC4yMDQxNDYyNjkwNyw5OTE1NzcuMzY0MTgwNDk2NSw1OTcuMzk4OTM3MzMxNDcxMSw3MjY1MjIuMDEyMzkwODcxNiwyMzQzMC4wNTUyMjYwMDgwOTUsMjM4LjkzOTA0Mjc4MDExNTQ0LDE3OC4zODI3MTQyNzI4NTY2LDYzNjQuNDgxOTI0NTE3NzA1LDc5NDM0MC4xNjY0MTI1NDIxLDEwNC4xODE0ODU5NzU2MTU0NCwzMjkxLjY5OTE2MTQxNjc5NzMsMjI2OTc1LjgxNjIyODYzMTk0LDc0MDQ3MS40NTQzNTk4MjI5LDI0Ni42MTc1NDcwMzUyODcwMywyMS4xMTY4ODcxODE3MTQ3OTgsMTA2MS4zMTEwODYxNTEyODI2CisyNyxTdW4gMjAgRmViIDExLDM4NC4wNTk5NjcyODc4NTk1LDI3NDIyLjcwNjI1MTcxNDQ0LDQuNjA3MjMwNDc2ODU0MDQ1LDEyLjY0MzU0MDc5MDcxOTc4OCw3NTE1MC4wNjU4NjgzMDYzNCwzMzguNzQ2ODk5MDE0OTg2NzUsNjUzNjU2LjU4MTM2NzM5NTcsODE5OTUuNzYzMTg1ODQ0MTcsNDc4LjIxOTQxOTEyMTQ5OTQsMzExLjg5MTgzOTEwNTA4MjE3LDgwMy43MjU1MDAzNTQ5ODk3LDExNDMyMS44MzU0MjYyODczMiwxOTQ0LjYxMTM0MTIxMjk0NiwyOTU0NzUuMzYzNjkyNzIwMiwxMTMuMTMxODUzOTAyNjU4OTUsMjMyLjA0NDUwNzEyNjEyNjMsMTcyLjkwMDE3MTEwNTU2MDYyLDE3OTQzLjMwMjcxNTk0MzE4OCw3NTQ3NTkuNjMzOTYxNTY0NSw5NS43MjIyMDIzMDk1MzkwNiw5Njg5LjY5MDM1NDU4OTA0Nyw1NjcyMjYuODM2MDI3MjUxOCwxNTU3NzYuOTgyODY0Nzg0NzIsMzI0LjQ1NTgwODc3MTY0MDUsMjAuMjkzODE1MzM0NDI3NjYzLDEzODkuOTEyNzg3NTY4NjUxOAorMjgsTW9uIDIxIEZlYiAxMSwxMS42NDY0OTU1NDA0NTM3MzEsMTQ0OTUuODMzMjc0OTM2MzY3LDUuODgzMzU4MTEwNjg3Mjg1LDEyLjEzMDc3ODEzNzEyMTgxMiwzOTM5My45NjI4MDA2ODcxNjQsMTk5LjY4MDY0MDI4Njg0NjQzLDExOTg2NjQuODE3NzE2MDIwNCwxNDYuMjgwNzAyNjgwNDc4MTMsMTU1LjU3NjkyMTMwMzIyMjcsMTkzLjA0NzgwMzgwNjg0MDIyLDQwLjMwMTY1NzYzMzY3MTQ4LDIwMy42NjcwODc1NTY2OTE1Nyw2MDY2LjE5NzU2NjkwMjcyNSwxMzE5NS40MDczNDM1MTQyMjksMTA2LjA4MjczMTczMzU3OTMsMjI0LjY5NjcxOTgyNjc2OTAzLDE2OC42ODA3MTQwNTg5MDQ1LDQ4NTM5LjI3NzM0OTU2NzE3LDE5MzkxMS40ODM2OTY4MjU4Niw5Mi45Nzc5MjMwMjYzNTUzLDI3OTA4LjQ5MzE2MzMwMzU5Niw5Njc5NjMuMjc5NjM3OTUwMiwxNDYyLjMyMDM3MzMzNTY2MjcsMzE0LjkwMDMyNTUwNTI4NjcsMTkuNzA0NzYxNjI2MTMyMjksODk4Ljg0MjU0Mzc0ODU0NDYKKzI5LFR1ZSAyMiBGZWIgMTEsMTEuMTI4MTI4MDczOTI2MTA2LDQwMzQuODAyMjU5NTc1NDM5LDUuNzE5NzEwMzgxNjY2MDksMTEuNjU3MDM0MDQyMTg1MTQ5LDI3OTguNzA1MzQwNTc1MDE4LDE5Mi44NzQ5NzYyMDg4NjA3LDExMzMyNDIuMjYwODE1OTI5LDE3NS44NTYwMDY1NDU0NDc1NCwxNDkuNDAzODg1NzcyMjg5MDcsMTg2LjUwNTUwNDA4NzI2NDU0LDM4LjE5Mjk5NTY4MDU2NDIyLDIyNi45NDE5ODQ4NTQ5MTg2LDE4MDgwLjUxNTc2MDY3NzIwNSw5Ny40NjU3NDU5MjY3MzUwNSwxMDMuMDI4MDk4Mjc3MDMyODgsMjE2LjU2NjA4Nzc3MDg4Mjk0LDE2My45NTU4MzM1MTQ3MTg0OCwxMjE3MzAuMjQ4NjI3MDYyMTQsMzAxMS40NDQ4ODA1ODU0NDgsOTAuNDAwNDE5ODgzNDM2MDksNzg2NDEuMjYzOTg1NzAzNiw3MjcyNTMuMjM2MDg3NTU3MywxNDcuMDg5NzI3MDMzMTA2NTgsMzA2LjMyOTA0NzQ4NzcxNTksMTkuMTQxMDM4NTc1NDQ4ODgsMTcxLjA2MTc1Nzg4MTM4NTM4CiszMCxXZWQgMjMgRmViIDExLDEwLjgzMTU5ODg1MTI0NTUyNyw1OTcuMjgxOTQwMjYzMzA2Niw1LjU2MzU3ODkxNDY1NjYwOCwxMS4yNTc5NTQ2MDU4NDMxNDMsMTAuMjI4NTE1NDI3MzM0ODA2LDE4Ny41NTA4NDQ3MjE0NzUwNywyNzQ0NDUuNDAxNTM1ODgwNCwxNzAuOTU0MDIwNjEwODQ3MywxNDUuMzUyMTI3ODEwNTkyMTIsMTgxLjQ4NjkzNDg0MzkyMTgzLDM3LjEzNjUwMTYxNTYyNDg2LDIyMC40OTExNjYwMTU2NzM4Myw0OTMzOC43NDE4ODQ5MTY5NiwxMTcuODUxNzE2NTM2MjY5ODUsMTAwLjI0MTA5MTQ0OTA3NDI4LDIwNy40OTU5MTA0OTUzNjQxNCwxNTguNTI3NjY5MjkwMjI3NjYsMjQ0Nzc3LjU5NTcxNjY1OTMzLDE0OS45NTk3NzMxMjYzNzcxNyw4Ny42MDczODM5NTU4OTUyMiwyMDY3MzQuNTQyMzgwMTkyMywxMTEwNDkuMzc5ODM1ODE0MTgsMTM4LjAxNjE3NDMxNDM2Mjg3LDI5Ny42NDk0NDk3Nzk4NDczLDE4LjUzNDY4OTY3NDg2NzE3NCw0LjU5NTk2ODc2NDY3NDQ4MQorMzEsVGh1IDI0IEZlYiAxMSwxMC41NTI4NjU5OTMxOTI1MjMsNTkuMTcyOTAwNjU1ODk0Mjk2LDUuNDEwMzQxNTU3NTIwODY3NSwxMC44Nzc1NDY4NzQ1NzgwNywxMi4xNTAxMDYzODY0MzU4ODMsMTgyLjQyMTk4ODQ2MjkwNzQyLDIzMzguMDgwMzYzNTMwMzAyMywxNjYuNjM3NjgxNTg3NzE0MzMsMTQxLjQ1MzM1NTM3OTI1MjcsMTc2LjYwNjAyNjA1NDExMjM2LDM2LjE1ODcxNjA5MjczODUxLDIxNC45Mjg0ODk0MDQ1OTg0LDExMzkyMC4xNDQ5OTYwOTc4MiwxMTQuODk5NTE0Mjg5ODgxNTEsOTcuNDM0NTc3MDk2Mjc3MDIsMTk3Ljg2NzI2NjE0NTgyODMsMTUyLjcxMTk3NDg1OTQ4ODMsMzA3Njk2LjUzOTIwNzU1MjU2LDE0My4wMDg5NjA3NzUxNDYxNiw4NC42MzE2NTYxMTYxMTA3Miw0NTgxMTQuOTA2MTM4NDAxNywxMjguODUwNjIwMzYwNTU3MjYsMTM0LjQ5MTg3MjI5ODc1ODksMjg4LjYwNTk2OTM4NTM2MTczLDE3Ljg5MTE1Nzk1NzM0NTUyNywwLjI2Nzc1MTE4NjU5MzQyMzczCiszMixGcmkgMjUgRmViIDExLDEwLjE3MzUzMjkzMDUxMTQzLDEwLjU3OTU3Mzg5ODYwODUxMiw1LjE5NDkxMTkyNTA4MDgwNiwxMC4zNjQ4NjAxNTcxNzQzODIsMTEuODA2MTUzOTQ0NTM0OTY2LDE3NS4yMDUwMTU4Njg1ODcwNSwyNjguODk5OTgzNDQ5NDEyOSwxNjAuOTM3MDkwMjAyODg2MjgsMTM1Ljk0NzMxMTU5Njk1Mzk0LDE2OS42ODE5NTYyMzk4NjM5NSwzNC44MDExNDY3NDc3ODM4MywyMDcuNTk3OTEzNTc2ODk5NjMsMjE5NjU5LjcxMDQxMjg1Nzk0LDExMS4yOTI3NTExNDMzNDA4NCw5My4zOTk2MjUwODkwOTIxNSwxODQuNzcwMDE1MDU2NDgzNzEsMTQ0LjQ0NTgyOTMzMTc0ODM3LDEwMzI2My4yNDcxMjI2MDk0OCwxMzguNjA4NTYxNDU1Nzk1MSw4MC4zNDM5MDA4ODk1NzQ3NCw3OTMyNzQuNDE5NzA0NDE5OCwxNTcuMjUwNDYzOTY2NDY1OCwxMzAuMDcxNzkxMDA5NzI2NjcsMjc1LjUxNjA2ODY2NjQwNTksMTYuOTcwNTI5ODc2MjU0NDksMC4yNTMwMTIyMDkwMDUzNTM0CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0lub2N1bGF0aW9uVGVzdF9GRF9SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vUG9wdWxhdGlvbiBDb3VudF8wLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvSW5vY3VsYXRpb25UZXN0X0ZEX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9Qb3B1bGF0aW9uIENvdW50XzAuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJjMjQ0MDEKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0lub2N1bGF0aW9uVGVzdF9GRF9SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vUG9wdWxhdGlvbiBDb3VudF8wLmNzdgpAQCAtMCwwICsxIEBACitpdGVyYXRpb24sdGltZSwKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvSW5vY3VsYXRpb25UZXN0X0ZEX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9Qb3B1bGF0aW9uIENvdW50XzEuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Jbm9jdWxhdGlvblRlc3RfRkRfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL1BvcHVsYXRpb24gQ291bnRfMS5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmMyNDQwMQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvSW5vY3VsYXRpb25UZXN0X0ZEX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9Qb3B1bGF0aW9uIENvdW50XzEuY3N2CkBAIC0wLDAgKzEgQEAKK2l0ZXJhdGlvbix0aW1lLApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Jbm9jdWxhdGlvblRlc3RfRkRfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL1BvcHVsYXRpb24gQ291bnRfMi5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0lub2N1bGF0aW9uVGVzdF9GRF9SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vUG9wdWxhdGlvbiBDb3VudF8yLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNDlhMzIyCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Jbm9jdWxhdGlvblRlc3RfRkRfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL1BvcHVsYXRpb24gQ291bnRfMi5jc3YKQEAgLTAsMCArMSwzMyBAQAoraXRlcmF0aW9uLHRpbWUsRUctRlJHLUcyMTAwMDEsRUctRlJHLUcyMTAwMDIsRUctRlJHLUcyMTAwMDMsRUctRlJHLUcyMTAwMDQsRUctRlJHLUcyMTAwMDUsRUctTE9FLUcyNDAwMDEsRUctTE9FLUcyNDAwMDIsRUctTE9FLUcyNDAwMDMsRUctTE9FLUcyNDAwMDQsRUctTE9FLUcyNDAwMDUsRUctTE9FLUcyNDAwMDYsRUctTE9FLUcyNDAwMDcsRUctTE9FLUcyNDAwMDgsRUctTE9FLUcyNDAwMDksRUctVVBFLUcyOTAwMDEsRUctVVBFLUcyOTAwMDIsRUctVVBFLUcyOTAwMDMsRUctVVBFLUcyOTAwMDQsRUctVVBFLUcyOTAwMDUsRUctVVBFLUcyOTAwMDYsRUctVVBFLUcyOTAwMDcsRUctVVBFLUcyOTAwMDgsRUctVVJHLUczMDAwMDEsRUctVVJHLUczMDAwMDIsRUctVVJHLUczMDAwMDMsRUctVVJHLUczMDAwMDQKKzEsVHVlIDI1IEphbiAxMSwyOTcyMzcuNDAzNDUzODAxNSwyNjUzODkuNjAzNDE4NTcxNzYsMTU0NDc4LjM1MDQxMTI2NzI1LDMxOTM0Ny4zMjc2MzY5MTMxNiwzMjE4OTguODk4OTEzNzc0Miw1MjAzNjIxLjg3OTMxMzg5NSw1NjU0NzcwLjUwNTQxMzkxMyw0NjM0NjI0LjUwNjU2OTA5LDQwMjU2MzkuMDg2MDYzNzA0NSw1MDMzMDYyLjQ4NTEzNDgzOSwxMDIyMDY2Ljk4MDQ1NzUyNSw1OTc0ODE0LjkwNjYwOTI5LDExODI0NTAuMzA5NDgxMDkzNCwzMTM4OTUwLjQzOTA0OTIwMzQsMjgwNTY0OS41NTIyNjIyMzk2LDY0NDA2MTQuMTY1NDE3ODIyLDQ2NjU5NzAuNjU1NDAxODQyLDEzMTIyNDMuOTk1ODAyNTU0OCwzODE5MjI1LjczMzU1MTcxODMsMjU0MzQ5Ny41MTMwMjk5NDIsMzc1NzU0My43ODk2MTMyOTQ0LDQxNzI2NTcuMTM3NjY4NjQyLDM3MTE5NTYuOTkyMDg2OTA0LDg0NjEzMjUuNjQ4OTAzMTE3LDUzOTU5My4zNTk0OTExMjQ0LDY3NTYuMTczOTI1NzQyODU0CisyLFdlZCAyNiBKYW4gMTEsMjk3MjM4LjU5MjQwMzQxNTM2LDI2NTM5MC42NjQ5NzY5ODU0LDE1NDQ3OC45NjgzMjQ2Njg5LDMxOTM0OC42MDUwMjYyMjM3LDMyMTkwMC4xODY1MDkzNjk5LDUyMDM2NDIuNjkzODAxNDExLDU2NTQ3OTMuMTI0NDk1OTM1LDQ2MzQ2NDMuMDQ1MDY3MTE3LDQwMjU2NTUuMTg4NjIwMDQ5LDUwMzMwODIuNjE3Mzg0NzgsMTAyMjA3MS4wNjg3MjU0NDY3LDU5NzQ4MzguODA1ODY4OTE2LDExODI0NTUuMDM5MjgyMzMxMiwzMTM4OTYyLjk5NDg1MDk1OTYsMjgwNTY2MC43NzQ4NjA0NDg3LDY0NDA2MzkuOTI3ODc0NDgzLDQ2NjU5ODkuMzE5Mjg0NDY0LDEzMTIyNDkuMjQ0Nzc4NTM4LDM4MTkyNDEuMDEwNDU0NjUyNCwyNTQzNTA3LjY4NzAxOTk5NDUsMzc1NzU1OC44MTk3ODg0NTI3LDQxNzI2NzMuODI4Mjk3MTkzLDM3MTE5NzEuODM5OTE0ODczLDg0NjEzNTkuNDk0MjA1NzEzLDUzOTU5NS41MTc4NjQ1NjIzLDY3NTYuMjAwOTUwNDM4NTU3CiszLFRodSAyNyBKYW4gMTEsMjk3MjM5Ljc4MTM1Nzc4NSwyNjUzOTEuNzI2NTM5NjQ1MzQsMTU0NDc5LjU4NjI0MDU0MjE4LDMxOTM0OS44ODI0MjA2NDM3NiwzMjE5MDEuNDc0MTEwMTE1OSw1MjAzNjYzLjUwODM3MjE4Nyw1NjU0ODE1Ljc0MzY2ODQzMyw0NjM0NjYxLjU4MzYzOTI5Niw0MDI1NjcxLjI5MTI0MDgwMzQsNTAzMzEwMi43NDk3MTUyNDksMTAyMjA3NS4xNTcwMDk3MjE2LDU5NzQ4NjIuNzA1MjI0MTQsMTE4MjQ1OS43NjkxMDI0ODg2LDMxMzg5NzUuNTUwNzAyOTM5LDI4MDU2NzEuOTk3NTAzNTQ4LDY0NDA2NjUuNjkwNDM0MTk1LDQ2NjYwMDcuOTgzMjQxNzQxLDEzMTIyNTQuNDkzNzc1NTE3LDM4MTkyNTYuMjg3NDE4Njk0MiwyNTQzNTE3Ljg2MTA1MDc0MiwzNzU3NTczLjg1MDAyMzczMTYsNDE3MjY5MC41MTg5OTI1MDYsMzcxMTk4Ni42ODc4MDIyMzIzLDg0NjEzOTMuMzM5NjQzNjg5LDUzOTU5Ny42NzYyNDY2MzM5LDY3NTYuMjI3OTc1MjQyMzU5Cis0LEZyaSAyOCBKYW4gMTEsMjk3MjQwLjk3MDMxNjkxMDQsMjY1MzkyLjc4ODEwNjU1MTUsMTU0NDgwLjIwNDE1ODg4NzE1LDMxOTM1MS4xNTk4MjAxNzM1LDMyMTkwMi43NjE3MTYwMTI0LDUyMDM2ODQuMzIzMDI2MjIsNTY1NDgzOC4zNjI5MzE0MDgsNDYzNDY4MC4xMjIyODU2MzEsNDAyNTY4Ny4zOTM5MjU5Njg2LDUwMzMxMjIuODgyMTI2MjQ4LDEwMjIwNzkuMjQ1MzEwMzQ5Niw1OTc0ODg2LjYwNDY3NDk2MDUsMTE4MjQ2NC40OTg5NDE1NjUsMzEzODk4OC4xMDY2MDUxNDIsMjgwNTY4My4yMjAxOTE1MzgzLDY0NDA2OTEuNDUzMDk2OTU3LDQ2NjYwMjYuNjQ3MjczNjc0LDEzMTIyNTkuNzQyNzkzNDkyLDM4MTkyNzEuNTY0NDQzODQ0LDI1NDM1MjguMDM1MTIyMTg2NCwzNzU3NTg4Ljg4MDMxOTEzMTUsNDE3MjcwNy4yMDk3NTQ1ODIsMzcxMjAwMS41MzU3NDg5ODM3LDg0NjE0MjcuMTg1MjE3MDQ5LDUzOTU5OS44MzQ2MzczMzg4LDY3NTYuMjU1MDAwMTU0MjYKKzUsU2F0IDI5IEphbiAxMSwyOTcyNDIuMTU5MjgwNzkxNywyNjUzOTMuODQ5Njc3NzA0LDE1NDQ4MC44MjIwNzk3MDM4LDMxOTM1Mi40MzcyMjQ4MTI4LDMyMTkwNC4wNDkzMjcwNTkyLDUyMDM3MDUuMTM3NzYzNTEzLDU2NTQ4NjAuOTgyMjg0ODYsNDYzNDY5OC42NjEwMDYxMiw0MDI1NzAzLjQ5NjY3NTU0NCw1MDMzMTQzLjAxNDYxNzc3NywxMDIyMDgzLjMzMzYyNzMzMSw1OTc0OTEwLjUwNDIyMTM3OSwxMTgyNDY5LjIyODc5OTU2MDYsMzEzOTAwMC42NjI1NTc1Njg0LDI4MDU2OTQuNDQyOTI0NDE5LDY0NDA3MTcuMjE1ODYyNzcsNDY2NjA0NS4zMTEzODAyNjI1LDEzMTIyNjQuOTkxODMyNDYzMywzODE5Mjg2Ljg0MTUzMDEwMTQsMjU0MzUzOC4yMDkyMzQzMjcsMzc1NzYwMy45MTA2NzQ2NTMsNDE3MjcyMy45MDA1ODM0MjEzLDM3MTIwMTYuMzgzNzU1MTI2NSw4NDYxNDYxLjAzMDkyNTc5LDUzOTYwMS45OTMwMzY2Nzc0LDY3NTYuMjgyMDI1MTc0MjYxCis2LFN1biAzMCBKYW4gMTEsMjk3MjQzLjM0ODI0OTQyODgsMjY1Mzk0LjkxMTI1MzEwMjY1LDE1NDQ4MS40NDAwMDI5OTIxLDMxOTM1My43MTQ2MzQ1NjE2LDMyMTkwNS4zMzY5NDMyNTY1LDUyMDM3MjUuOTUyNTg0MDY0LDU2NTQ4ODMuNjAxNzI4Nzg5LDQ2MzQ3MTcuMTk5ODAwNzY0LDQwMjU3MTkuNTk5NDg5NTMxLDUwMzMxNjMuMTQ3MTg5ODM2LDEwMjIwODcuNDIxOTYwNjY1Niw1OTc0OTM0LjQwMzg2MzM5NiwxMTgyNDczLjk1ODY3NjQ3NTgsMzEzOTAxMy4yMTg1NjAyMTgzLDI4MDU3MDUuNjY1NzAyMTkwMyw2NDQwNzQyLjk3ODczMTYzMiw0NjY2MDYzLjk3NTU2MTUwOCwxMzEyMjcwLjI0MDg5MjQzMDUsMzgxOTMwMi4xMTg2Nzc0NjcsMjU0MzU0OC4zODMzODcxNjM3LDM3NTc2MTguOTQxMDkwMjk1Niw0MTcyNzQwLjU5MTQ3OTAyMzUsMzcxMjAzMS4yMzE4MjA2NjE2LDg0NjE0OTQuODc2NzY5OTEzLDUzOTYwNC4xNTE0NDQ2NDk2LDY3NTYuMzA5MDUwMzAyMzYyCis3LE1vbiAzMSBKYW4gMTEsMjk3MjQ0LjUzNzIyMjgyMTgsMjY1Mzk1Ljk3MjgzMjc0Nzc0LDE1NDQ4Mi4wNTc5Mjg3NTIxMywzMTkzNTQuOTkyMDQ5NDIwMiwzMjE5MDYuNjI0NTY0NjA0MjUsNTIwMzc0Ni43Njc0ODc4NzQsNTY1NDkwNi4yMjEyNjMxOTQsNDYzNDczNS43Mzg2Njk1NjQsNDAyNTczNS43MDIzNjc5MjkzLDUwMzMxODMuMjc5ODQyNDI0LDEwMjIwOTEuNTEwMzEwMzUzMiw1OTc0OTU4LjMwMzYwMTAxMiwxMTgyNDc4LjY4ODU3MjMxMDQsMzEzOTAyNS43NzQ2MTMwOTMsMjgwNTcxNi44ODg1MjQ4NTMsNjQ0MDc2OC43NDE3MDM1NDcsNDY2NjA4Mi42Mzk4MTc0MTEsMTMxMjI3NS40ODk5NzMzOTQyLDM4MTkzMTcuMzk1ODg1OTQyLDI1NDM1NTguNTU3NTgwNjk3NCwzNzU3NjMzLjk3MTU2NjA2LDQxNzI3NTcuMjgyNDQxMzg5MywzNzEyMDQ2LjA3OTk0NTU4OSw4NDYxNTI4LjcyMjc0OTQyMSw1Mzk2MDYuMzA5ODYxMjU1Myw2NzU2LjMzNjA3NTUzODU2NAorOCxUdWUgMSBGZWIgMTEsMjk3MjQ1LjcyNjIwMDk3MDcsMjY1Mzk3LjAzNDQxNjYzOSwxNTQ0ODIuNjc1ODU2OTgzODQsMzE5MzU2LjI2OTQ2OTM4ODM1LDMyMTkwNy45MTIxOTExMDI1LDUyMDM3NjcuNTgyNDc0OTQ0LDU2NTQ5MjguODQwODg4MDgsNDYzNDc1NC4yNzc2MTI1MTksNDAyNTc1MS44MDUzMTA3MzgzLDUwMzMyMDMuNDEyNTc1NTQ0LDEwMjIwOTUuNTk4Njc2Mzk0Niw1OTc0OTgyLjIwMzQzNDIyNiwxMTgyNDgzLjQxODQ4NzA2NSwzMTM5MDM4LjMzMDcxNjE5MTMsMjgwNTcyOC4xMTEzOTI0MDc3LDY0NDA3OTQuNTA0Nzc4NTE1LDQ2NjYxMDEuMzA0MTQ3OTY5LDEzMTIyODAuNzM5MDc1MzU0LDM4MTkzMzIuNjczMTU1NTI2LDI1NDM1NjguNzMxODE0OTI3NCwzNzU3NjQ5LjAwMjEwMTk0Niw0MTcyNzczLjk3MzQ3MDUxOTgsMzcxMjA2MC45MjgxMjk5MDg2LDg0NjE1NjIuNTY4ODY0MzEyLDUzOTYwOC40NjgyODY0OTQ3LDY3NTYuMzYzMTAwODgyODY1Cis5LFdlZCAyIEZlYiAxMSwyOTcyNDYuOTE1MTgzODc1NCwyNjUzOTguMDk2MDA0Nzc2NywxNTQ0ODMuMjkzNzg3Njg3MjYsMzE5MzU3LjU0Njg5NDQ2NjMsMzIxOTA5LjE5OTgyMjc1MTMsNTIwMzc4OC4zOTc1NDUyNzQsNTY1NDk1MS40NjA2MDM0NDMsNDYzNDc3Mi44MTY2Mjk2Myw0MDI1NzY3LjkwODMxNzk1OTQsNTAzMzIyMy41NDUzODkxOTQsMTAyMjA5OS42ODcwNTg3ODkzLDU5NzUwMDYuMTAzMzYzMDM5LDExODI0ODguMTQ4NDIwNzM4OCwzMTM5MDUwLjg4Njg2OTUxNDQsMjgwNTczOS4zMzQzMDQ4NTMsNjQ0MDgyMC4yNjc5NTY1MzMsNDY2NjExOS45Njg1NTMxODYsMTMxMjI4NS45ODgxOTgzMTA0LDM4MTkzNDcuOTUwNDg2MjE5LDI1NDM1NzguOTA2MDg5ODU1LDM3NTc2NjQuMDMyNjk3OTU0Nyw0MTcyNzkwLjY2NDU2NjQxNCwzNzEyMDc1Ljc3NjM3MzYyMDYsODQ2MTU5Ni40MTUxMTQ1ODcsNTM5NjEwLjYyNjcyMDM2NzgsNjc1Ni4zOTAxMjYzMzUyNjkKKzEwLFRodSAzIEZlYiAxMSwyOTcyNDguMTA0MTcxNTM2MiwyNjUzOTkuMTU3NTk3MTYwNjcsMTU0NDgzLjkxMTcyMDg2MjQsMzE5MzU4LjgyNDMyNDY1MzgsMzIxOTEwLjQ4NzQ1OTU1MDYsNTIwMzgwOS4yMTI2OTg4NjUsNTY1NDk3NC4wODA0MDkyODcsNDYzNDc5MS4zNTU3MjA4OTYsNDAyNTc4NC4wMTEzODk1OTI3LDUwMzMyNDMuNjc4MjgzMzc2LDEwMjIxMDMuNzc1NDU3NTM3NSw1OTc1MDMwLjAwMzM4NzQ1MywxMTgyNDkyLjg3ODM3MzMzMjYsMzEzOTA2My40NDMwNzMwNjIsMjgwNTc1MC41NTcyNjIxODk3LDY0NDA4NDYuMDMxMjM3NjA1LDQ2NjYxMzguNjMzMDMzMDYwNSwxMzEyMjkxLjIzNzM0MjI2MywzODE5MzYzLjIyNzg3ODAyMDYsMjU0MzU4OS4wODA0MDU0NzkzLDM3NTc2NzkuMDYzMzU0MDg1Nyw0MTcyODA3LjM1NTcyOTA3MSwzNzEyMDkwLjYyNDY3NjcyNjMsODQ2MTYzMC4yNjE1MDAyNDksNTM5NjEyLjc4NTE2Mjg3NDcsNjc1Ni40MTcxNTE4OTU3NzQKKzExLEZyaSA0IEZlYiAxMSwyOTcyNDkuMjkzMTYzOTUyOTQsMjY1NDAwLjIxOTE5Mzc5MTEsMTU0NDg0LjUyOTY1NjUwOTMyLDMxOTM2MC4xMDE3NTk5NTExNSwzMjE5MTEuNzc1MTAxNTAwNCw1MjAzODMwLjAyNzkzNTcxNSw1NjU0OTk2LjcwMDMwNTYwNyw0NjM0ODA5Ljg5NDg4NjMxOSw0MDI1ODAwLjExNDUyNTYzOCw1MDMzMjYzLjgxMTI1ODA5LDEwMjIxMDcuODYzODcyNjM5Myw1OTc1MDUzLjkwMzUwNzQ2NiwxMTgyNDk3LjYwODM0NDg0NTcsMzEzOTA3NS45OTkzMjY4MzQ1LDI4MDU3NjEuNzgwMjY0NDE5NSw2NDQwODcxLjc5NDYyMTcyOSw0NjY2MTU3LjI5NzU4NzU5MiwxMzEyMjk2LjQ4NjUwNzIxMjcsMzgxOTM3OC41MDUzMzA5MzIsMjU0MzU5OS4yNTQ3NjE4MDA2LDM3NTc2OTQuMDk0MDcwMzM4Niw0MTcyODI0LjA0Njk1ODQ5NDUsMzcxMjEwNS40NzMwMzkyMjUsODQ2MTY2NC4xMDgwMjEyOTMsNTM5NjE0Ljk0MzYxNDAxNTUsNjc1Ni40NDQxNzc1NjQzODIKKzEyLFNhdCA1IEZlYiAxMSwyOTcyNTAuNDgyMTYxMTI1NSwyNjU0MDEuMjgwNzk0NjY3ODQsMTU0NDg1LjE0NzU5NDYyNzkyLDMxOTM2MS4zNzkyMDAzNTgyMywzMjE5MTMuMDYyNzQ4NjAwODUsNTIwMzg1MC44NDMyNTU4MjYsNTY1NTAxOS4zMjAyOTI0MDksNDYzNDgyOC40MzQxMjU4OTc1LDQwMjU4MTYuMjE3NzI2MDk2NSw1MDMzMjgzLjk0NDMxMzMzNCwxMDIyMTExLjk1MjMwNDA5NDgsNTk3NTA3Ny44MDM3MjMwODEsMTE4MjUwMi4zMzgzMzUyNzkxLDMxMzkwODguNTU1NjMwODMxLDI4MDU3NzMuMDAzMzExNTQwNSw2NDQwODk3LjU1ODEwODkwOSw0NjY2MTc1Ljk2MjIxNjc4MywxMzEyMzAxLjczNTY5MzE1ODYsMzgxOTM5My43ODI4NDQ5NTM3LDI1NDM2MDkuNDI5MTU4ODIsMzc1NzcwOS4xMjQ4NDY3MTUsNDE3Mjg0MC43MzgyNTQ2ODI2LDM3MTIxMjAuMzIxNDYxMTE4LDg0NjE2OTcuOTU0Njc3NzI3LDUzOTYxNy4xMDIwNzM3ODk5LDY3NTYuNDcxMjAzMzQxMDkyCisxMyxTdW4gNiBGZWIgMTEsMjk3MjUxLjY3MTE2MzA1NDIsMjY1NDAyLjM0MjM5OTc5MSwxNTQ0ODUuNzY1NTM1MjE4MywzMTkzNjIuNjU2NjQ1ODc0OTYsMzIxOTE0LjM1MDQwMDg1MTg2LDUyMDM4NzEuNjU4NjU5Miw1NjU1MDQxLjk0MDM2OTY5LDQ2MzQ4NDYuOTczNDM5NjM0LDQwMjU4MzIuMzIwOTkwOTY3LDUwMzMzMDQuMDc3NDQ5MTExLDEwMjIxMTYuMDQwNzUxOTA0LDU5NzUxMDEuNzA0MDM0Mjk2LDExODI1MDcuMDY4MzQ0NjMyNiwzMTM5MTAxLjExMTk4NTA1NCwyODA1Nzg0LjIyNjQwMzU1MzUsNjQ0MDkyMy4zMjE2OTkxNDEsNDY2NjE5NC42MjY5MjA2MzIsMTMxMjMwNi45ODQ5MDAxMDEzLDM4MTk0MDkuMDYwNDIwMDg0MywyNTQzNjE5LjYwMzU5NjUzNjQsMzc1NzcyNC4xNTU2ODMyMTQzLDQxNzI4NTcuNDI5NjE3NjM1NCwzNzEyMTM1LjE2OTk0MjQwMyw4NDYxNzMxLjgwMTQ2OTU0Niw1Mzk2MTkuMjYwNTQyMTk4Miw2NzU2LjQ5ODIyOTIyNTkwNgorMTQsTW9uIDcgRmViIDExLDI5NzI1Mi44NjAxNjk3Mzg4LDI2NTQwMy40MDQwMDkxNjA2NCwxNTQ0ODYuMzgzNDc4MjgwNDUsMzE5MzYzLjkzNDA5NjUwMTU2LDMyMTkxNS42MzgwNTgyNTM0LDUyMDM4OTIuNDc0MTQ1ODM0LDU2NTUwNjQuNTYwNTM3NDUxLDQ2MzQ4NjUuNTEyODI3NTI5LDQwMjU4NDguNDI0MzIwMjUwNyw1MDMzMzI0LjIxMDY2NTQyMiwxMDIyMTIwLjEyOTIxNjA2Nyw1OTc1MTI1LjYwNDQ0MTExMiwxMTgyNTExLjc5ODM3MjkwNiwzMTM5MTEzLjY2ODM4OTUwMiwyODA1Nzk1LjQ0OTU0MDQ1OSw2NDQwOTQ5LjA4NTM5MjQyOCw0NjY2MjEzLjI5MTY5OTE0LDEzMTIzMTIuMjM0MTI4MDQxLDM4MTk0MjQuMzM4MDU2MzI2LDI1NDM2MjkuNzc4MDc0OTUxLDM3NTc3MzkuMTg2NTc5ODM3LDQxNzI4NzQuMTIxMDQ3MzU0LDM3MTIxNTAuMDE4NDgzMDgzLDg0NjE3NjUuNjQ4Mzk2NzUsNTM5NjIxLjQxOTAxOTI0MDQsNjc1Ni41MjUyNTUyMTg4MjMKKzE1LFR1ZSA4IEZlYiAxMSwyOTcyNTQuMDQ5MTgxMTc5NSwyNjU0MDQuNDY1NjIyNzc2NjUsMTU0NDg3LjAwMTQyMzgxNDM2LDMxOTM2NS4yMTE1NTIyMzgsMzIxOTE2LjkyNTcyMDgwNTcsNTIwMzkxMy4yODk3MTU3MzE1LDU2NTUwODcuMTgwNzk1NjkzLDQ2MzQ4ODQuMDUyMjg5NTgsNDAyNTg2NC41Mjc3MTM5NDgsNTAzMzM0NC4zNDM5NjIyNjMsMTAyMjEyNC4yMTc2OTY1ODM4LDU5NzUxNDkuNTA0OTQzNTMsMTE4MjUxNi41Mjg0MjAwOTk1LDMxMzkxMjYuMjI0ODQ0MTc1NCwyODA1ODA2LjY3MjcyMjI1Nyw2NDQwOTc0Ljg0OTE4ODc2OCw0NjY2MjMxLjk1NjU1MjMwNiwxMzEyMzE3LjQ4MzM3Njk3NzUsMzgxOTQzOS42MTU3NTM2NzgsMjU0MzYzOS45NTI1OTQwNjMsMzc1Nzc1NC4yMTc1MzY1ODMsNDE3Mjg5MC44MTI1NDM4MzgzLDM3MTIxNjQuODY3MDgzMTU3LDg0NjE3OTkuNDk1NDU5MzQ2LDUzOTYyMy41Nzc1MDQ5MTY1LDY3NTYuNTUyMjgxMzE5ODQ0CisxNixXZWQgOSBGZWIgMTEsMjk3MjU1LjIzODE5NzM3NjI1LDI2NTQwNS41MjcyNDA2MzkxNSwxNTQ0ODcuNjE5MzcxODIwMDcsMzE5MzY2LjQ4OTAxMzA4NDE1LDMyMTkxOC4yMTMzODg1MDg1Myw1MjAzOTM0LjEwNTM2ODg5MSw1NjU1MTA5LjgwMTE0NDQxNiw0NjM0OTAyLjU5MTgyNTc5LDQwMjU4ODAuNjMxMTcyMDU5Niw1MDMzMzY0LjQ3NzMzOTYzOSwxMDIyMTI4LjMwNjE5MzQ1NDcsNTk3NTE3My40MDU1NDE1NDksMTE4MjUyMS4yNTg0ODYyMTMsMzEzOTEzOC43ODEzNDkwNzUsMjgwNTgxNy44OTU5NDg5NDgzLDY0NDEwMDAuNjEzMDg4MTY2LDQ2NjYyNTAuNjIxNDgwMTMyLDEzMTIzMjIuNzMyNjQ2OTExLDM4MTk0NTQuODkzNTEyMTQxNCwyNTQzNjUwLjEyNzE1Mzg3MzQsMzc1Nzc2OS4yNDg1NTM0NTM1LDQxNzI5MDcuNTA0MTA3MDg4LDM3MTIxNzkuNzE1NzQyNjI2LDg0NjE4MzMuMzQyNjU3MzI2LDUzOTYyNS43MzU5OTkyMjY2LDY3NTYuNTc5MzA3NTI4OTY5CisxNyxUaHUgMTAgRmViIDExLDI5NzI1Ni40MjcyMTgzMjksMjY1NDA2LjU4ODg2Mjc0ODA2LDE1NDQ4OC4yMzczMjIyOTc1NiwzMTkzNjcuNzY2NDc5MDQwMjYsMzIxOTE5LjUwMTA2MTM2MjE2LDUyMDM5NTQuOTIxMTA1MzExLDU2NTUxMzIuNDIxNTgzNjIyLDQ2MzQ5MjEuMTMxNDM2MTU2LDQwMjU4OTYuNzM0Njk0NTg0LDUwMzMzODQuNjEwNzk3NTUsMTAyMjEzMi4zOTQ3MDY2Nzk0LDU5NzUxOTcuMzA2MjM1MTcxLDExODI1MjUuOTg4NTcxMjQ3LDMxMzkxNTEuMzM3OTA0MjAwNCwyODA1ODI5LjExOTIyMDUzMiw2NDQxMDI2LjM3NzA5MDYxOCw0NjY2MjY5LjI4NjQ4MjYxOCwxMzEyMzI3Ljk4MTkzNzg0MTUsMzgxOTQ3MC4xNzEzMzE3MTUzLDI1NDM2NjAuMzAxNzU0MzgyLDM3NTc3ODQuMjc5NjMwNDQ4LDQxNzI5MjQuMTk1NzM3MTA0NCwzNzEyMTk0LjU2NDQ2MTQ4OSw4NDYxODY3LjE4OTk5MDY5Nyw1Mzk2MjcuODk0NTAyMTcwNCw2NzU2LjYwNjMzMzg0NjIKKzE4LEZyaSAxMSBGZWIgMTEsMjk3MjU3LjYxNjI0NDAzNzksMjY1NDA3LjY1MDQ4OTEwMzYsMTU0NDg4Ljg1NTI3NTI0Njg0LDMxOTM2OS4wNDM5NTAxMDYxMywzMjE5MjAuNzg4NzM5MzY2NCw1MjAzOTc1LjczNjkyNDk5Nyw1NjU1MTU1LjA0MjExMzMwOCw0NjM0OTM5LjY3MTEyMDY4Miw0MDI1OTEyLjgzODI4MTUyMyw1MDMzNDA0Ljc0NDMzNTk5MiwxMDIyMTM2LjQ4MzIzNjI1ODMsNTk3NTIyMS4yMDcwMjQzOTYsMTE4MjUzMC43MTg2NzUyMDE1LDMxMzkxNjMuODk0NTA5NTUyLDI4MDU4NDAuMzQyNTM3MDA5LDY0NDEwNTIuMTQxMTk2MTI2LDQ2NjYyODcuOTUxNTU5NzYzLDEzMTIzMzMuMjMxMjQ5NzY5MiwzODE5NDg1LjQ0OTIxMjQwMSwyNTQzNjcwLjQ3NjM5NTU4OTMsMzc1Nzc5OS4zMTA3Njc1NjYzLDQxNzI5NDAuODg3NDMzODg3NSwzNzEyMjA5LjQxMzIzOTc0Nyw4NDYxOTAxLjAzNzQ1OTQ1NSw1Mzk2MzAuMDUzMDEzNzQ4NSw2NzU2LjYzMzM2MDI3MTUzNgorMTksU2F0IDEyIEZlYiAxMSwyOTcyNTguODA1Mjc0NTAyODQsMjY1NDA4LjcxMjExOTcwNTUsMTU0NDg5LjQ3MzIzMDY2Nzk3LDMxOTM3MC4zMjE0MjYyODE5NCwzMjE5MjIuMDc2NDIyNTIxMyw1MjAzOTk2LjU1MjgyNzk0NCw1NjU1MTc3LjY2MjczMzQ3Nyw0NjM0OTU4LjIxMDg3OTM2Niw0MDI1OTI4Ljk0MTkzMjg3NTcsNTAzMzQyNC44Nzc5NTQ5NywxMDIyMTQwLjU3MTc4MjE5MTIsNTk3NTI0NS4xMDc5MDkyMjUsMTE4MjUzNS40NDg3OTgwNzYsMzEzOTE3Ni40NTExNjUxMywyODA1ODUxLjU2NTg5ODM3OTMsNjQ0MTA3Ny45MDU0MDQ2OTEsNDY2NjMwNi42MTY3MTE1NywxMzEyMzM4LjQ4MDU4MjY5NCwzODE5NTAwLjcyNzE1NDE5OCwyNTQzNjgwLjY1MTA3NzQ5NSwzNzU3ODE0LjM0MTk2NDgwOTcsNDE3Mjk1Ny41NzkxOTc0Mzc1LDM3MTIyMjQuMjYyMDc3Mzk5NSw4NDYxOTM0Ljg4NTA2MzYwNyw1Mzk2MzIuMjExNTMzOTYwNSw2NzU2LjY2MDM4NjgwNDk3NworMjAsU3VuIDEzIEZlYiAxMSwyOTcyNTkuOTk0MzA5NzIzOTYsMjY1NDA5Ljc3Mzc1NDU1NCwxNTQ0OTAuMDkxMTg4NTYwODUsMzE5MzcxLjU5ODkwNzU2NzcsMzIxOTIzLjM2NDExMDgyNyw1MjA0MDE3LjM2ODgxNDE1NDUsNTY1NTIwMC4yODM0NDQxMjgsNDYzNDk3Ni43NTA3MTIyMDksNDAyNTk0NS4wNDU2NDg2NDM3LDUwMzM0NDUuMDExNjU0NDgxLDEwMjIxNDQuNjYwMzQ0NDc4Myw1OTc1MjY5LjAwODg4OTY1NiwxMTgyNTQwLjE3ODkzOTg3MSwzMTM5MTg5LjAwNzg3MDkzNCwyODA1ODYyLjc4OTMwNDY0MjUsNjQ0MTEwMy42Njk3MTYzMTMsNDY2NjMyNS4yODE5MzgwMzcsMTMxMjM0My43Mjk5MzY2MTY3LDM4MTk1MTYuMDA1MTU3MTA3LDI1NDM2OTAuODI1ODAwMDk5LDM3NTc4MjkuMzczMjIyMTc3LDQxNzI5NzQuMjcxMDI3NzU0LDM3MTIyMzkuMTEwOTc0NDQ4Myw4NDYxOTY4LjczMjgwMzE0Nyw1Mzk2MzQuMzcwMDYyODA2OCw2NzU2LjY4NzQxMzQ0NjUyMworMjEsTW9uIDE0IEZlYiAxMSwyOTcyNjEuMTgzMzQ5NzAxMTcsMjY1NDEwLjgzNTM5MzY0OSwxNTQ0OTAuNzA5MTQ4OTI1NiwzMTkzNzIuODc2MzkzOTYzMywzMjE5MjQuNjUxODA0MjgzNDQsNTIwNDAzOC4xODQ4ODM2MjksNTY1NTIyMi45MDQyNDUyNjEsNDYzNDk5NS4yOTA2MTkyMTIsNDAyNTk2MS4xNDk0Mjg4MjYsNTAzMzQ2NS4xNDU0MzQ1MjgsMTAyMjE0OC43NDg5MjMxMTk2LDU5NzUyOTIuOTA5OTY1NjkxLDExODI1NDQuOTA5MTAwNTg3LDMxMzkyMDEuNTY0NjI2OTY1NywyODA1ODc0LjAxMjc1NTgsNjQ0MTEyOS40MzQxMzA5OTEsNDY2NjM0My45NDcyMzkxNjQsMTMxMjM0OC45NzkzMTE1MzYzLDM4MTk1MzEuMjgzMjIxMTI3NSwyNTQzNzAxLjAwMDU2MzQwMiwzNzU3ODQ0LjQwNDUzOTY3LDQxNzI5OTAuOTYyOTI0ODM4NSwzNzEyMjUzLjk1OTkzMDg5MTYsODQ2MjAwMi41ODA2NzgwNzcsNTM5NjM2LjUyODYwMDI4NjksNjc1Ni43MTQ0NDAxOTYxNzcKKzIyLFR1ZSAxNSBGZWIgMTEsMjk3MjYyLjM3MjM5NTU4MDIsMjY1NDExLjg5NzAzODAxMzUsMTU0NDkxLjMyNzExMjM1NzYsMzE5Mzc0LjE1Mzg4NjY5OTcsMzIxOTI1LjkzOTUwNDEzMTQsNTIwNDA1OS4wMDEwNTY0MjUsNTY1NTI0NS41MjUxNTg2NzM1LDQ2MzUwMTMuODMwNjE4MjM3LDQwMjU5NzcuMjUzMjg4OTM5Niw1MDMzNDg1LjI3OTMxNDUxLDEwMjIxNTIuODM3NTIyMDU0OCw1OTc1MzE2LjgxMTE2MDM2LDExODI1NDkuNjM5Mjg0NzgwNywzMTM5MjE0LjEyMTQ0NTMyMywyODA1ODg1LjIzNjI2MjY2NDcsNjQ0MTE1NS4xOTg2NzM1NTIsNDY2NjM2Mi42MTI2MzI5MzgsMTMxMjM1NC4yMjg3MTI1MTE1LDM4MTk1NDYuNTYxMzYwOTgxLDI1NDM3MTEuMTc1Mzc3MjA4LDM3NTc4NTkuNDM1OTMxNzcxLDQxNzMwMDcuNjU0OTA0NzczLDM3MTIyNjguODA4OTYxMDM4NSw4NDYyMDM2LjQyODcyMTAxMyw1Mzk2MzguNjg3MTQ4NDgxMSw2NzU2Ljc0MTQ2NzA3OTk3NworMjMsV2VkIDE2IEZlYiAxMSwyOTcyNjMuNTYxNDQ1OTUyMDQsMjY1NDEyLjk1ODY4NjM4OTMsMTU0NDkxLjk0NTA3ODEyNDU4LDMxOTM3NS40MzEzODQyNjMxLDMyMTkyNy4yMjcyMDg4NDQ4NSw1MjA0MDc5LjgxNzMwNzg3NSw1NjU1MjY4LjE0NjE1NzU1OCw0NjM1MDMyLjM3MDY4NzMxNyw0MDI1OTkzLjM1NzIwOTkwMSw1MDMzNTA1LjQxMzI3MDU2NSwxMDIyMTU2LjkyNjEzNjQzODQsNTk3NTM0MC43MTI0NDUzMzksMTE4MjU1NC4zNjk0ODY4NDc3LDMxMzkyMjYuNjc4MzExMTI1NCwyODA1ODk2LjQ1OTgxMTkzNyw2NDQxMTgwLjk2MzMxMzQ2Miw0NjY2MzgxLjI3ODA5NzIzNywxMzEyMzU5LjQ3ODEzMzMyMSwzODE5NTYxLjgzOTU1ODU2MiwyNTQzNzIxLjM1MDIyOTQ1OSwzNzU3ODc0LjQ2NzM4MDY2NzYsNDE3MzAyNC4zNDY5NDc3NzcsMzcxMjI4My42NTgwNDcyOTI0LDg0NjIwNzAuMjc2ODkxODQyLDUzOTY0MC44NDU3MDQ4MzEyLDY3NTYuNzY4NDk0MDY1ODk5CisyNCxUaHUgMTcgRmViIDExLDI5NzI2NC43NTA1MDE0MDc2NiwyNjU0MTQuMDIwMzM5MzA0MjMsMTU0NDkyLjU2MzA0NjUzMzY0LDMxOTM3Ni43MDg4ODcyODg0NiwzMjE5MjguNTE0OTE5MDYzOSw1MjA0MTAwLjYzMzY0ODMyNCw1NjU1MjkwLjc2NzI1MzE1OCw0NjM1MDUwLjkxMDgzNTY2Myw0MDI2MDA5LjQ2MTE5OTcxNSw1MDMzNTI1LjU0NzMxMjcwMywxMDIyMTYxLjAxNDc2ODMwMjksNTk3NTM2NC42MTM4MzI1MDcsMTE4MjU1OS4wOTk3MDkxMzg1LDMxMzkyMzkuMjM1MjMwNjE0NCwyODA1OTA3LjY4MzQwOTE5Niw2NDQxMjA2LjcyODA2MzUzLDQ2NjYzOTkuOTQzNjQxMzQxLDEzMTIzNjQuNzI3NTc2NTc0NSwzODE5NTc3LjExNzgyMTQ2NDMsMjU0MzczMS41MjUxMjUyMTI1LDM3NTc4ODkuNDk4ODkzODMxNCw0MTczMDQxLjAzOTA2MjE0ODQsMzcxMjI5OC41MDcxOTcwMzI3LDg0NjIxMDQuMTI1MjA3Mzg3LDUzOTY0My4wMDQyNzA0MTAzLDY3NTYuNzk1NTIxMTY3Mzc1CisyNSxGcmkgMTggRmViIDExLDI5NzI2NS45Mzk1NjE4MTk2LDI2NTQxNS4wODE5OTY2NDQ1LDE1NDQ5My4xODEwMTc1MTg2MywzMTkzNzcuOTg2Mzk1NjM4ODQsMzIxOTI5LjgwMjYzNDY1MDUsNTIwNDEyMS40NTAwNzU1NDIsNTY1NTMxMy4zODg0NDMwNTEsNDYzNTA2OS40NTEwNjEyOTEsNDAyNjAyNS41NjUyNTY2NTUsNTAzMzU0NS42ODE0Mzg3NjcsMTAyMjE2NS4xMDM0MTcyMTAyLDU5NzUzODguNTE1MzE5MzA1LDExODI1NjMuODI5OTUxMTQ2LDMxMzkyNTEuNzkyMjAyNDQ1LDI4MDU5MTguOTA3MDUzMjM4Nyw2NDQxMjMyLjQ5MjkyMDk5Myw0NjY2NDE4LjYwOTI2MzI0OSwxMzEyMzY5Ljk3NzA0MTcwOTcsMzgxOTU5Mi4zOTYxNDgwNTMsMjU0Mzc0MS43MDAwNjMzNzg2LDM3NTc5MDQuNTMwNDY5NjUxLDQxNzMwNTcuNzMxMjQ2MDk4LDM3MTIzMTMuMzU2NDA4NjY4Nyw4NDYyMTM3Ljk3MzY2NDAyNyw1Mzk2NDUuMTYyODQ0OTg2OSw2NzU2LjgyMjU0ODM4MTUwOAorMjYsU2F0IDE5IEZlYiAxMSwyOTcyNjcuMTI4NjI3MDI4NiwyNjU0MTYuMTQzNjU4MjY3ODYsMTU0NDkzLjc5ODk5MDk5NjY3LDMxOTM3OS4yNjM5MDkxNDMxNiwzMjE5MzEuMDkwMzU1NDMyMjQsNTIwNDE0Mi4yNjY1ODY3NDA1LDU2NTUzMzYuMDA5NzI0MjA1LDQ2MzUwODcuOTkxMzYxNzE3LDQwMjYwNDEuNjY5Mzc4NTY0Nyw1MDMzNTY1LjgxNTY0NjA1OSwxMDIyMTY5LjE5MjA4MjYxMjUsNTk3NTQxMi40MTY5MDI1MjksMTE4MjU2OC41NjAyMTIyMzczLDMxMzkyNjQuMzQ5MjI0OTM1MywyODA1OTMwLjEzMDc0MjU2MSw2NDQxMjU4LjI1Nzg4MjQwMyw0NjY2NDM3LjI3NDk2MDQ2LDEzMTIzNzUuMjI2NTI4MDIzLDM4MTk2MDcuNjc0NTM2Mjc4NSwyNTQzNzUxLjg3NTA0MjU5MzYsMzc1NzkxOS41NjIxMDYxMTM0LDQxNzMwNzQuNDIzNDk3MzksMzcxMjMyOC4yMDU2ODAyMTMsODQ2MjE3MS44MjIyNTcyMiw1Mzk2NDcuMzIxNDI4MjcyMSw2NzU2Ljg0OTU3NTcwNDY3NworMjcsU3VuIDIwIEZlYiAxMSwyOTcyNjguMzE3Njk3MDM5OSwyNjU0MTcuMjA1MzI0MTc4ODUsMTU0NDk0LjQxNjk2Njk3MDU0LDMxOTM4MC41NDE0Mjc4MDY5LDMyMTkzMi4zNzgwODE0MTQ2LDUyMDQxNjMuMDgzMTgyMDEsNTY1NTM1OC42MzEwOTY3MTksNDYzNTEwNi41MzE3MzcwMTksNDAyNjA1Ny43NzM1NjU1MTQ1LDUwMzM1ODUuOTQ5OTM0NjY3LDEwMjIxNzMuMjgwNzY0NTI3Niw1OTc1NDM2LjMxODU4MjI4MiwxMTgyNTczLjI5MDQ5MjQzMjQsMzEzOTI3Ni45MDYyOTgxMzgsMjgwNTk0MS4zNTQ0NzcyMTIsNjQ0MTI4NC4wMjI5NDc4NjY1LDQ2NjY0NTUuOTQwNzMzMDU2NSwxMzEyMzgwLjQ3NjAzNTUzNywzODE5NjIyLjk1Mjk4NjIwOSwyNTQzNzYyLjA1MDA2MjkwMTMsMzc1NzkzNC41OTM4MDMyODMzLDQxNzMwOTEuMTE1ODE2MDk2LDM3MTIzNDMuMDU1MDExNzI3NCw4NDYyMjA1LjY3MDk4NzExOCw1Mzk2NDkuNDgwMDIwMjc1LDY3NTYuODc2NjAzMTM3MDAxCisyOCxNb24gMjEgRmViIDExLDI5NzI2OS41MDY3NzE3OTksMjY1NDE4LjI2Njk5NDMyOTA1LDE1NDQ5NS4wMzQ5NDU0MTE5LDMxOTM4MS44MTg5NTE1NzE2NSwzMjE5MzMuNjY1ODEyNTM4Nyw1MjA0MTgzLjg5OTg2MDM5OSw1NjU1MzgxLjI1MjU1OTU1OSw0NjM1MTI1LjA3MjE4NjM1Myw0MDI2MDczLjg3NzgxNjc2Niw1MDMzNjA2LjA4NDMwMzY2OCwxMDIyMTc3LjM2OTQ2Mjc2ODMsNTk3NTQ2MC4yMjAzNTc0NzQsMTE4MjU3OC4wMjA3OTE1MTUyLDMxMzkyODkuNDYzNDIxNDgxLDI4MDU5NTIuNTc4MjU2Njc4Myw2NDQxMzA5Ljc4ODExNjIwNyw0NjY2NDc0LjYwNjU4MDE4MywxMzEyMzg1LjcyNTU2NDAxMTgsMzgxOTYzOC4yMzE0OTcxNDUsMjU0Mzc3Mi4yMjUxMjM4Mzc2LDM3NTc5NDkuNjI1NTYwNDczLDQxNzMxMDcuODA4MjAxNDUyMywzNzEyMzU3LjkwNDQwMjUzNDUsODQ2MjIzOS41MTk4NTIxNjksNTM5NjUxLjYzODYyMDg5Nyw2NzU2LjkwMzYzMDY3NzI0NAorMjksVHVlIDIyIEZlYiAxMSwyOTcyNzAuNjk1ODUxMzMwMywyNjU0MTkuMzI4NjY4NzQwMDUsMTU0NDk1LjY1MjkyNjMzMzQ4LDMxOTM4My4wOTY0ODA0NjM2MywzMjE5MzQuOTUzNTQ4ODMxLDUyMDQyMDQuNzE2NjIyMzMyLDU2NTU0MDMuODc0MTEzMTg2LDQ2MzUxNDMuNjEyNzEwMDk2LDQwMjYwODkuOTgyMTMyNjUsNTAzMzYyNi4yMTg3NTM0NzcsMTAyMjE4MS40NTgxNzc0MTg3LDU5NzU0ODQuMTIyMjI4NTkzLDExODI1ODIuNzUxMTA5NTgyNiwzMTM5MzAyLjAyMDU5NTIyMDQsMjgwNTk2My44MDIwODExOSw2NDQxMzM1LjU1MzM4Nzk1NCw0NjY2NDkzLjI3MjUwMjIyMiwxMzEyMzkwLjk3NTExMzU1NSwzODE5NjUzLjUxMDA2OTM5OSwyNTQzNzgyLjQwMDIyNTYxLDM3NTc5NjQuNjU3Mzc3OTkxNCw0MTczMTI0LjUwMDY1MzgwMiwzNzEyMzcyLjc1Mzg1MjkzNzQsODQ2MjI3My4zNjg4NTMwNyw1Mzk2NTMuNzk3MjMwMTgyMiw2NzU2LjkzMDY1ODMyNTk1OQorMzAsV2VkIDIzIEZlYiAxMSwyOTcyNzEuODg0OTM1NTcwNjUsMjY1NDIwLjM5MDM0NzM1NTU3LDE1NDQ5Ni4yNzA5MDk3MDIzOCwzMTkzODQuMzc0MDE0NDE0OCwzMjE5MzYuMjQxMjkwMjIyOTcsNTIwNDIyNS41MzM0NjY3MDUsNTY1NTQyNi40OTU3NTY0MDEsNDYzNTE2Mi4xNTMzMDcyNjUsNDAyNjEwNi4wODY1MTIzMTA0LDUwMzM2NDYuMzUzMjgzMDIyLDEwMjIxODUuNTQ2OTA4MjYxLDU5NzU1MDguMDI0MTk0MzY3LDExODI1ODcuNDgxNDQ2MzgyOCwzMTM5MzE0LjU3NzgxODY4OCwyODA1OTc1LjAyNTk1MDE1MSw2NDQxMzYxLjMxODc2MTczNyw0NjY2NTExLjkzODQ5ODE4MiwxMzEyMzk2LjIyNDY4Mzg4NzYsMzgxOTY2OC43ODg3MDIxNiwyNTQzNzkyLjU3NTM2NzY3ODQsMzc1Nzk3OS42ODkyNTUwMzksNDE3MzE0MS4xOTMxNzIyNTc0LDM3MTIzODcuNjAzMzYyMTQ2OCw4NDYyMzA3LjIxNzk4ODAyLDUzOTY1NS45NTU4NDgwMTU4LDY3NTYuOTU3Njg2MDgxNzA4CiszMSxUaHUgMjQgRmViIDExLDI5NzI3My4wNzQwMjQyNTg0LDI2NTQyMS40NTIwMjk5NDE5NSwxNTQ0OTYuODg4ODk1MzgyNjQsMzE5Mzg1LjY1MTU1MzE0NDMsMzIxOTM3LjUyOTAzNjQzMTQsNTIwNDI0Ni4zNTAzODg5MzcsNTY1NTQ0OS4xMTc0ODQyMjMsNDYzNTE4MC42OTM5NzM3NzcsNDAyNjEyMi4xOTA5NTIyMDQsNTAzMzY2Ni40ODc4ODc4NzIsMTAyMjE4OS42MzU2NTQzOTYsNTk3NTUzMS45MjYyNDk1Mzk1LDExODI1OTIuMjExODAwODc1NCwzMTM5MzI3LjEzNTA4OTEyMjcsMjgwNTk4Ni4yNDk4NjEwOTA0LDY0NDEzODcuMDg0MjMxODg3LDQ2NjY1MzAuNjA0NTYzOTU2LDEzMTI0MDEuNDc0MjczODU0NCwzODE5Njg0LjA2NzM5MjA2NSwyNTQzODAyLjc1MDU0NzgwMywzNzU3OTk0LjcyMTE4ODMwODcsNDE3MzE1Ny44ODU3NTMxNDU0LDM3MTI0MDIuNDUyOTI2ODk2LDg0NjIzNDEuMDY3MjQ5NTcsNTM5NjU4LjExNDQ3MzkyMzMsNjc1Ni45ODQ3MTM5Mzg1NDUKKzMyLEZyaSAyNSBGZWIgMTEsMjk3Mjc0LjI2MzExNzY2MjUsMjY1NDIyLjUxMzcxNjczOTMsMTU0NDk3LjUwNjg4MzUxNDA2LDMxOTM4Ni45MjkwOTY5NDA4NSwzMjE5MzguODE2Nzg3NzQ3NSw1MjA0MjY3LjE2NzM5MzczNSw1NjU1NDcxLjczOTMwMTc3Miw0NjM1MTk5LjIzNDcxMzgyOSw0MDI2MTM4LjI5NTQ1NTk3MzYsNTAzMzY4Ni42MjI1NzI1ODYsMTAyMjE5My43MjQ0MTY3NDg1LDU5NzU1NTUuODI4Mzk5NTE4LDExODI1OTYuOTQyMTc0MTMwNCwzMTM5MzM5LjY5MjQwOTM2MzYsMjgwNTk5Ny40NzM4MTY1NDg1LDY0NDE0MTIuODQ5ODA0MjMzLDQ2NjY1NDkuMjcwNzAzNzY4LDEzMTI0MDYuNzIzODg0NjQzLDM4MTk2OTkuMzQ2MTQyNTcyLDI1NDM4MTIuOTI1NzY4Mjg2NSwzNzU4MDA5Ljc1MzE4MTIwMDUsNDE3MzE3NC41Nzg0MDAyNDI2LDM3MTI0MTcuMzAyNTUwNTQ1LDg0NjIzNzQuOTE2NjQ1MzgyLDUzOTY2MC4yNzMxMDgzOTI3LDY3NTcuMDExNzQxOTAyNTg1CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0lub2N1bGF0aW9uVGVzdF9GRF9SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vUl8wLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvSW5vY3VsYXRpb25UZXN0X0ZEX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9SXzAuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJjMjQ0MDEKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0lub2N1bGF0aW9uVGVzdF9GRF9SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vUl8wLmNzdgpAQCAtMCwwICsxIEBACitpdGVyYXRpb24sdGltZSwKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvSW5vY3VsYXRpb25UZXN0X0ZEX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9SXzEuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Jbm9jdWxhdGlvblRlc3RfRkRfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL1JfMS5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmMyNDQwMQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvSW5vY3VsYXRpb25UZXN0X0ZEX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9SXzEuY3N2CkBAIC0wLDAgKzEgQEAKK2l0ZXJhdGlvbix0aW1lLApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Jbm9jdWxhdGlvblRlc3RfRkRfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL1JfMi5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0lub2N1bGF0aW9uVGVzdF9GRF9SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vUl8yLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMDE2MmIzCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Jbm9jdWxhdGlvblRlc3RfRkRfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL1JfMi5jc3YKQEAgLTAsMCArMSwzMyBAQAoraXRlcmF0aW9uLHRpbWUsRUctRlJHLUcyMTAwMDEsRUctRlJHLUcyMTAwMDIsRUctRlJHLUcyMTAwMDMsRUctRlJHLUcyMTAwMDQsRUctRlJHLUcyMTAwMDUsRUctTE9FLUcyNDAwMDEsRUctTE9FLUcyNDAwMDIsRUctTE9FLUcyNDAwMDMsRUctTE9FLUcyNDAwMDQsRUctTE9FLUcyNDAwMDUsRUctTE9FLUcyNDAwMDYsRUctTE9FLUcyNDAwMDcsRUctTE9FLUcyNDAwMDgsRUctTE9FLUcyNDAwMDksRUctVVBFLUcyOTAwMDEsRUctVVBFLUcyOTAwMDIsRUctVVBFLUcyOTAwMDMsRUctVVBFLUcyOTAwMDQsRUctVVBFLUcyOTAwMDUsRUctVVBFLUcyOTAwMDYsRUctVVBFLUcyOTAwMDcsRUctVVBFLUcyOTAwMDgsRUctVVJHLUczMDAwMDEsRUctVVJHLUczMDAwMDIsRUctVVJHLUczMDAwMDMsRUctVVJHLUczMDAwMDQKKzEsVHVlIDI1IEphbiAxMSwxMDQwMzMuMDkxMjA4ODMwNTMsOTI4ODYuMzYxMTk2NTAwMSw1NDA2Ny40MjI2NDM5NDM1MywxMTE3NzEuNTY0NjcyOTE5NiwxMTI2NjQuNjE0NjE5ODIwOTUsMTgyMTI2Ny42NTc3NTk4NjMsMTk3OTE2OS42NzY4OTQ4Njk0LDE2MjIxMTguNTc3Mjk5MTgxNiwxNDA4OTczLjY4MDEyMjI5NjYsMTc2MTU3MS44Njk3OTcxOTM3LDM1NzcyMy40NDMxNjAxMzM3LDIwOTExODUuMjE3MzEzMjUxNSw0MTM4NTcuNjA4MzE4MzgyNjQsMTA5ODYzMi42NTM2NjcyMjEsOTgxOTc3LjM0MzI5MTc4MzgsMjI1NDIxNC45NTc4OTYyMzczLDE2MzMwODkuNzI5MzkwNjQ0Nyw0NTkyODUuMzk4NTMwODk0MTMsMTMzNjcyOS4wMDY3NDMxMDEyLDg5MDIyNC4xMjk1NjA0Nzk3LDEzMTUxNDAuMzI2MzY0NjUzLDE0NjA0MjkuOTk4MTg0MDI0OCwxMjk5MTg0Ljk0NzIzMDQxNjYsMjk2MTQ2My45NzcxMTYwOTAyLDE4ODg1Ny42NzU4MjE4OTM1MywyMzY0LjY2MDg3NDAwOTk5ODcKKzIsV2VkIDI2IEphbiAxMSwxMDQwMjkuNDUwMDUwNjM4MjMsOTI4ODMuMTEwMTczODU4MjIsNTQwNjUuNTMwMjg0MTUwOTksMTExNzY3LjY1MjY2ODE1NjA1LDExMjY2MC42NzEzNTgzMDkyNSwxODIxMjAzLjkxMzM5MTg0MTMsMTk3OTEwMC40MDU5NTYxNzgyLDE2MjIwNjEuODAzMTQ4OTc2LDE0MDg5MjQuMzY2MDQzNDkyMiwxNzYxNTEwLjIxNDc4MTc1MDcsMzU3NzEwLjkyMjgzOTYyMzEsMjA5MTExMi4wMjU4MzA2NDU2LDQxMzg0My4xMjMzMDIwOTE1LDEwOTg1OTQuMjAxNTI0MzQyNiw5ODE5NDIuOTc0MDg0NzY4NiwyMjU0MTM2LjM2MjU3MjIzMDQsMTYzMzAzMi41NzEyNTAxMTYsNDU5MjY5LjMyMzU0MTk0NTU1LDEzMzY2ODIuMjIxMjI3ODY1Miw4OTAxOTIuOTcxNzE1OTQ1LDEzMTUwOTQuMjk2NDUzMjMsMTQ2MDM3OC44ODMxMzQwODg1LDEyOTkxMzkuNDc1NzU3MjYzNiwyOTYxMzYwLjMyNTg3Njg5MSwxODg4NTEuMDY1ODAzMjM5NzYsMjM2NC41NzgxMTA4Nzk0MDg1CiszLFRodSAyNyBKYW4gMTEsMTA0MDI1LjgwOTAxOTg4NjQ3LDkyODc5Ljg1OTI2NTAwMjEzLDU0MDYzLjYzNzk5MDU5MTA0LDExMTc2My43NDA4MDAzMTI2NiwxMTI2NTYuNzI4MjM0ODExNzIsMTgyMTE0MC4xNzEyNTQ4NzI2LDE5NzkwMzEuMTM3NDQxOTY5NywxNjIyMDA1LjAzMDk4NTg2NTcsMTQwODg3NS4wNTM2OTA2ODA4LDE3NjE0NDguNTYxOTI0MjMzMywzNTc2OTguNDAyOTU3MzIzNywyMDkxMDM4LjgzNjkwOTc0MTQsNDEzODI4LjYzODc5Mjc3NTksMTA5ODU1NS43NTA3MjcyODk0LDk4MTkwOC42MDYwODA2NzU2LDIyNTQwNTcuNjc5MzI4NjI3LDE2MzI5NzUuNDE1MTEwMTIyMiw0NTkyNTMuMjQ5MTE1NjIxNTUsMTMzNjYzNS40MzczNTAxMjIzLDg5MDE2MS44MTQ5NjE5MzUsMTMxNTA0OC4yNjgxNTI4NTQyLDE0NjAzMjcuNzY5ODczMTc4OCwxMjk5MDk0LjAwNTg3NTYxMjEsMjk2MTI1Ni42NzgyNjU0ODU0LDE4ODg0NC40NTYwMTU5MzY2NSwyMzY0LjQ5NTM1MDY0NTUyNzcKKzQsRnJpIDI4IEphbiAxMSwxMDQwMjIuMTY4MTYxODEyMzEsOTI4NzYuNjA4NDY5OTI3ODYsNTQwNjEuNzQ1NzYzMjYxMzcsMTExNzU5LjgzNjU5NjY2MDA4LDExMjY1Mi43ODUyNDkzMjM1LDE4MjEwNzYuNDM0MDY4Mjc0MiwxOTc4OTYxLjg3MTM1MjE1OTIsMTYyMTk0OC4yNjA4MDk3ODEzLDE0MDg4MjUuNzQ0MjMxNjMzNCwxNzYxMzg2LjkxMjA1OTIxNzIsMzU3Njg1Ljg4MzUxMzIyMDIsMjA5MDk2NS42NTA1NTA0NDk1LDQxMzgxNC4xNTQ3OTA0MTgxNiwxMDk4NTE3LjMwMTI3NjAxNCw5ODE4NzQuMjM5MzIzNzU4LDIyNTM5NzkuNTg4MzUxMzAzLDE2MzI5MTguMjY4NTkwMDk3LDQ1OTIzNy4xNzUyNTE5MDI1LDEzMzY1ODguNjU1MTA5ODE1LDg5MDEzMC42NjIzMjUzMzQzLDEzMTUwMDIuMjQxNDYzNDY4OSwxNDYwMjc2LjY1ODQwMTIzMzEsMTI5OTA0OC41Mzc1ODU0MDY2LDI5NjExNTMuMDM4OTczOTM3LDE4ODgzNy44NDkyMjkyMjI4NiwyMzY0LjQxMjU5MzMwODI1NQorNSxTYXQgMjkgSmFuIDExLDEwNDAxOC41Mjc0NzY0MDU2NSw5Mjg3My4zNTc3ODg2MzE0Miw1NDA1OS44NTM2MDIxNTk2NiwxMTE3NTUuOTQwMDU2MjQ4NzYsMTEyNjQ4Ljg0MjQwMTgzOTc2LDE4MjEwMTIuNzAxODMxNjI3NCwxOTc4ODkyLjYwNzY4NjY2MTksMTYyMTg5MS40OTI2MjA2NTMsMTQwODc3Ni40Mzc2NjYxNDMzLDE3NjEzMjUuMjY1MTg2NTIyMiwzNTc2NzMuMzY0NTA3Mjk3MiwyMDkwODkyLjQ2Njc1MjY4MDMsNDEzNzk5LjY3MTI5NTAwMDUsMTA5ODQ3OC44NTMxNzA0Njk0LDk4MTgzOS44NzM4MTM5NjgyLDIyNTM5MDIuMTA4NjAyMDI5NywxNjMyODYxLjEzMTY4OTAxNTUsNDU5MjIxLjEwMTk1MDc2ODcsMTMzNjU0MS44NzQ1MDY4ODYxLDg5MDA5OS41MTM4MDU3MjU0LDEzMTQ5NTYuMjE2Mzg1MDE3NiwxNDYwMjI1LjU0ODcxODE4OTEsMTI5OTAwMy4wNzA4ODY1OTEsMjk2MTA0OS40MDgwMDE1MywxODg4MzEuMjQ1NDQyNzQzMTgsMjM2NC4zMjk4Mzg4Njc0ODkzCis2LFN1biAzMCBKYW4gMTEsMTA0MDE0Ljg4NzE2NzAzNDQyLDkyODcwLjEwNzI5MTMzNzcsNTQwNTcuOTYxNTU3NzExMTYsMTExNzUyLjA3Mjg0MjQ2Nzc0LDExMjY0NC44OTk2OTQxODM3LDE4MjA5NDguOTg1NTU3NTM1LDE5Nzg4MjMuMzQ2NDUwNTc5LDE2MjE4MzQuNzI2NzAxMjQ5NCwxNDA4NzI3LjEzODg2NTYzNDgsMTc2MTI2My42MjUxODI5NDIsMzU3NjYwLjg0NjE4MjA4MzQsMjA5MDgxOS4yODU3NjAzNTMzLDQxMzc4NS4xODgzMDY1MDUxNSwxMDk4NDQwLjQwNjUxMzY1ODQsOTgxODA1LjUxMDI0MTU3NDcsMjI1MzgyNi40NTA2MzU5NTMzLDE2MzI4MDQuMDM3NTA5NDU1Myw0NTkyMDUuMDI5MjEyMjAxOTUsMTMzNjQ5NS4wOTU1OTk1NDk4LDg5MDA2OC4zODIzMDk2NzU4LDEzMTQ5MTAuMTkyOTE3NDQ1NywxNDYwMTc0LjQ0MDgyMzk4NTUsMTI5ODk1Ny42MDU5NzQxOTMyLDI5NjA5NDUuODA1NzgxMDc1NywxODg4MjQuNjU0NDMwNjM0MjMsMjM2NC4yNDcwODczMjMxMjkKKzcsTW9uIDMxIEphbiAxMSwxMDQwMTEuMjQ3NTAwODk4OTksOTI4NjYuODU3MDY5MzI5NTMsNTQwNTYuMDY5Njk1NDYxNjksMTExNzQ4LjI2MzU4ODg0NDUxLDExMjY0MC45NTcxMjg3MjY1NiwxODIwODg1LjI5OTczMjEzOCwxOTc4NzU0LjA4NzY1MDU2NjYsMTYyMTc3Ny45NjM0MTkxNDcsMTQwODY3Ny44NTQyMzU4NDY4LDE3NjEyMDEuOTk3MTQwMzUxMiwzNTc2NDguMzI4ODUyODMzMjUsMjA5MDc0Ni4xMDc4OTA1NTM4LDQxMzc3MC43MDU4MjQ5MTQ0NSwxMDk4NDAxLjk2MTQzOTQ4MzMsOTgxNzcxLjE0OTUwNjYyNjIsMjI1Mzc1NC4yMjExNDQ1OCwxNjMyNzQ3LjAyOTU2MDAxNzksNDU5MTg4Ljk1NzAzNjE4NDU1LDEzMzY0NDguMzE4NDYzNDkyNyw4OTAwMzcuMjg0ODA0NTYyNywxMzE0ODY0LjE3MTA2MDY5ODYsMTQ2MDEyMy4zMzQ3MTg1NjE1LDEyOTg5MTIuMTQzMTAxNzM1NSwyOTYwODQyLjI1OTE2NzkxNSwxODg4MTguMDg5MDcyMzM2NjgsMjM2NC4xNjQzMzg2NzUwNzMKKzgsVHVlIDEgRmViIDExLDEwNDAwNy42MDk0NjA0MDIzMiw5Mjg2My42MDc1NDgxNDU3OCw1NDA1NC4xNzgzODEyMTAyOTUsMTExNzQ0LjU5MzMzMzg3ODE1LDExMjYzNy4wMTQ3MjEyMTkxOCwxODIwODIxLjY5Mzk3NTE0OCwxOTc4Njg0LjgzMTMzMTkyNDUsMTYyMTcyMS4yMDQ5OTQ1MTg4LDE0MDg2MjguNjA2MjU5OTcxMiwxNzYxMTQwLjQwMDE2NTk4MzcsMzU3NjM1LjgxNDI1MDAyMDI1LDIwOTA2NzIuOTM1MTgxNjY1Nyw0MTM3NTYuMjIzODUwMjE4NywxMDk4MzYzLjUxODc1NzY3NSw5ODE3MzYuNzk2NDkyOTc0NiwyMjUzNjg5LjYyMzc2MjgxMywxNjMyNjkwLjI2NDI0MTE0OTksNDU5MTcyLjg4NTQyMzE2NzQzLDEzMzY0MDEuNTQzNTcxMDUxLDg5MDAwNi4yODE1MjQ0NTAzLDEzMTQ4MTguMTUwODE0OTI3OSwxNDYwMDcyLjIzMDQwNzcxNTMsMTI5ODg2Ni42ODM3NzUwNjU3LDI5NjA3MzguODY0ODUwNzg1LDE4ODgxMS41ODk5MDcyODU0NCwyMzY0LjA4MTU5MzA4OTEwMTcKKzksV2VkIDIgRmViIDExLDEwNDAwMy45NzUxNTk0OTQyMiw5Mjg2MC4zNTk2ODQzMDAzLDU0MDUyLjI4ODQ1ODM5ODM4LDExMTc0MS4yMjU1MDMwMzMxOSwxMTI2MzMuMDcyNTA4NzE5MTIsMTgyMDc1OC4yNzM0MTg0MzE2LDE5Nzg2MTUuNTc3NjAxNDk1MiwxNjIxNjY0LjQ1NjU5NjE2OTYsMTQwODU3OS40NDI4MzYwMzgzLDE3NjEwNzguODc1NTQ5MDY3LDM1NzYyMy4zMDYzNTUxODQsMjA5MDU5OS43NzI0MTI3NDE4LDQxMzc0MS43NDIzODI0MjEyLDEwOTgzMjUuMDgwMzUzNjM1LDk4MTcwMi40NjI0MTkwODE4LDIyNTM2NDAuOTMwMDA2NTc5NSwxNjMyNjM0LjA3NjQ5MTEwODIsNDU5MTU2LjgxNDM3NDM1MTA2LDEzMzYzNTQuNzcyMDI2MDAwOCw4ODk5NzUuNTAxMTEzNTgwOSwxMzE0NzcyLjEzMjE4MDYxNDIsMTQ2MDAyMS4xMjc5MDY2MTg0LDEyOTg4MjEuMjMxNDkzMDQ5NSwyOTYwNjM1LjgyOTk2MjgyODcsMTg4ODA1LjI0MTA5NTE4NiwyMzYzLjk5ODg1MDk5NjM4MjgKKzEwLFRodSAzIEZlYiAxMSwxMDQwMDAuMzUwMTYwNjg5ODUsOTI4NTcuMTE2MTc4Nzk0MDgsNTQwNTAuNDAyNTA2MTM1MzMsMTExNzM4LjUyODU2NTM4Mzk4LDExMjYyOS4xMzA2MTY2MDAzOSwxODIwNjk1LjMwMjUxMjYyNjksMTk3ODU0Ni4zMjY4MjU1NzgyLDE2MjE2MDcuNzM0ODAwODA4MSwxNDA4NTMwLjQ4NjU5MjQ5NjcsMTc2MTAxNy41MzMyNjAxMzM2LDM1NzYxMC44MTcyNDcxNjY3NiwyMDkwNTI2LjYzNTQ2Nzg4MDQsNDEzNzI3LjI2MTQyMTYyMDIsMTA5ODI4Ni42NTIyNzQ0MTUsOTgxNjY4LjE4MjM2Mzk3NTYsMjI1MzYyNi4yNDUxNTc5NCwxNjMyNTc5LjMzNTI0NDY4MzMsNDU5MTQwLjc0Mzg5NTEzMjgsMTMzNjMwOC4wMDc0Mzg3OTg3LDg4OTk0NS4yNzQ3MTUwMzE1LDEzMTQ3MjYuMTE1MTYwMDgsMTQ1OTk3MC4wMjcyOTQ1MjI2LDEyOTg3NzUuNzk3MzczODE5OSwyOTYwNTMzLjY5MjQzNzI0OCwxODg3OTkuMjQzODc3MDA2OCwyMzYzLjkxNjExNDM1NTA3NAorMTEsRnJpIDQgRmViIDExLDEwMzk5Ni43NDc2MzIxOTQ3NSw5Mjg1My44ODM2Njc4OTMsNTQwNDguNTI3MTI2MzA2OTYsMTExNzM3LjI5MTE0MjU4ODI4LDExMjYyNS4xODkzODEyNzc2NSwxODIwNjMzLjM5MDIxODIzNSwxOTc4NDc3LjA3OTk5MjY5NTUsMTYyMTU1MS4wODMwMjk0MTgsMTQwODQ4Mi4wMjMwNzY5NzE4LDE3NjA5NTYuNjM1NDkzOTg4OSwzNTc1OTguMzc3NzIzODA0NzMsMjA5MDQ1My41NjY2Mzc0NjA4LDQxMzcxMi43ODA5NjgxNjE1LDEwOTgyNDguMjUwMzU5OTc2NCw5ODE2MzQuMDQ3MTk4ODE2NiwyMjUzNjgzLjU3Njc3MjAxMTQsMTYzMjUyOC4wODAwOTYwODQ2LDQ1OTEyNC42NzQwMDE0OTYxNywxMzM2MjYxLjI1OTM1MzMyMjcsODg5OTE2LjM3NTkwNTc1NzMsMTMxNDY4MC4wOTk3NjAyOTIzLDE0NTk5MTguOTI4ODE2Njk2MiwxMjk4NzMwLjQxMDQxNDU0MSwyOTYwNDMzLjcxNTc0MTY1MzUsMTg4Nzk0LjA0NjY3NDMwNDIzLDIzNjMuODMzMzg4OTkwNTIyCisxMixTYXQgNSBGZWIgMTEsMTAzOTkzLjE5OTc0NDA0OTU1LDkyODUwLjY3ODkxNjk1ODkyLDU0MDQ2LjY3OTgxNTMzNjExLDExMTczOS4yMjM1OTMyODU3NCwxMTI2MjEuMjQ5NzU5MjY4NjcsMTgyMDU3My45NzIxNDY0MzEyLDE5Nzg0MDcuODM5OTQzMDE2NCwxNjIxNDk0LjYyMDM1MjYyLDE0MDg0MzQuNzM1ODczOTEsMTc2MDg5Ni44Mjg1NzQwNjgxLDM1NzU4Ni4wNjkwNDA2NjE1NiwyMDkwMzgwLjY4NDczNTM2ODUsNDEzNjk4LjMwMTAyMzMyNDQsMTA5ODIwOS45MTgwMzYzNzc1LDk4MTYwMC4zMDM3MDY5NTQ3LDIyNTM4OTQuMDI3NTk1MDExNSwxNjMyNDg1LjIzODc4MTQyOTQsNDU5MTA4LjYwNDc0MzgwNTgsMTMzNjIxNC41NTQzMTA1NzcsODg5ODkwLjY2MjM4NjA3MzgsMTMxNDYzNC4wODYwMDMzNzI3LDE0NTk4NjcuODMzMzE4MjI0NiwxMjk4Njg1LjE0OTYzMjgxMjIsMjk2MDMzOC45NTUxODUzODczLDE4ODc5MC42NjYwMDgyNTEwMiwyMzYzLjc1MDY5MzI3MzcyMDYKKzEzLFN1biA2IEZlYiAxMSwxMDM5ODkuNzgzMTkwMzkxNzIsOTI4NDcuNTQyODY4MTI3ODYsNTQwNDQuOTA0OTIyMjk4MTYsMTExNzQ3Ljk5ODAwMjcyMTY3LDExMjYxNy4zMTQzMTIyNzUyOCwxODIwNTIwLjM2NjE0NDA1NzEsMTk3ODMzOC42MTQzNDQ5NDc1LDE2MjE0MzguNjU2OTQyNDc5NSwxNDA4MzkwLjIyNjg3ODYzOTMsMTc2MDgzOS42NjUwNDY0Nzg5LDM1NzU3NC4wOTY0NjYwNTQ1LDIwOTAzMDguMzA1MDkzNTg2LDQxMzY4My44MjE1OTExMTI2NSwxMDk4MTcxLjc2ODM5NzE4Niw5ODE1NjcuNTkwNzM4NjQ3LDIyNTQ0MjkuNTU5MTA1NDk0LDE2MzI0NjIuNDQ2OTg1NTkzMyw0NTkwOTIuNTM2MjY2MDYzMSwxMzM2MTY3Ljk2MjIxMDM0NDIsODg5ODcyLjQ5NzgxMTg3MjUsMTMxNDU4OC4wNzM5NTI4MTU1LDE0NTk4MTYuNzQzMzYyNTk1OCwxMjk4NjQwLjIxOTg1MzIxMSwyOTYwMjU2LjYzMDk2Mjk5OCwxODg3OTEuMzcxMzc2NzU3MiwyMzYzLjY2ODA3OTcwNjUxOAorMTQsTW9uIDcgRmViIDExLDEwMzk4Ni42ODEwMTU5NTIwNCw5Mjg0NC41NzUxNTY3NjEwMyw1NDA0My4zMTQyMjgyMjkxMTYsMTExNzcxLjQ5Nzk0ODkyMzM1LDExMjYxMy4zODk4OTA0MDc1MywxODIwNDgwLjIzNjgxMDk5NjQsMTk3ODI2OS40MjM5MDMxNjU0LDE2MjEzODMuOTk3OTUwNDI3NywxNDA4MzUyLjI1MzYwMTU0ODcsMTc2MDc4OC44NzkxNTIxNDc4LDM1NzU2Mi45NzU5MTI3NjkxLDIwOTAyMzcuMjYyNjYzMzY3NCw0MTM2NjkuMzQyNjgzOTkzNiwxMDk4MTM0LjA5NDg4Mzg4MTMsOTgxNTM3LjU1OTAzOTIzOTEsMjI1NTY1NS41ODE5NzgwNywxNjMyNDg3LjE5NDY4NTA0NTYsNDU5MDc2LjQ2ODk3NTQ3MiwxMzM2MTIxLjY2NjY3OTgzODIsODg5ODcyLjEzNjA3OTU1OTEsMTMxNDU0Mi4wNjM3ODkwMTgyLDE0NTk3NjUuNjY2Njk0MTU0NSwxMjk4NTk2LjE0OTk2MDI2MDYsMjk2MDIwMy44MTY5NDIzNTIsMTg4ODAxLjIyNTM5ODc4MzAyLDIzNjMuNTg1Njk2MDA3NjQzNQorMTUsVHVlIDggRmViIDExLDEwMzk4NC4zMjY0Nzc2OTM0MSw5Mjg0Mi4wMTUyMTA4NzU4Miw1NDA0Mi4xODQ2NTgzODI5NiwxMTE4MjYuNTkyMjgwNzE4MTMsMTEyNjA5LjQ5NDQxMzQ3MTMyLDE4MjA0NzEuMTY2MzczNzU0NiwxOTc4MjAwLjMyMzI3NzM3MSwxNjIxMzMyLjY5MzYxMzY1OCwxNDA4MzI5LjU2Nzg5MzEzMywxNzYwNzUzLjM3MzcwNTQwMDIsMzU3NTUzLjk4MjcxMzYyNDM3LDIwOTAxNjkuNzIyMjA1ODg2Miw0MTM2NTQuODY0MzM4OTAzNzUsMTA5ODA5Ny42NDQzNDQzNjQ1LDk4MTUxNC4zOTg2ODIxOTY5LDIyNTgzNDcuMTU2Njc3MTIxOCwxNjMyNjIzLjkxMjY5Mzc5OCw0NTkwNjAuNDAzOTg0MjM5ODUsMTMzNjA3Ni4xNDA0ODk5MDI4LDg4OTkxMy40ODgyODExOTQ0LDEzMTQ0OTYuMDU2MDA2OTUxNywxNDU5NzE0LjYyNTcwMTE0MjIsMTI5ODU1NC4yODAxNTM4Nzk3LDI5NjAyMjAuNTcwMzQ2Njk5LDE4ODgzMS40NjA0NTcwODQzNSwyMzYzLjUwMzk0MzAxODE5NzMKKzE2LFdlZCA5IEZlYiAxMSwxMDM5ODMuNzQxNzIwNjk2NTksOTI4NDAuNDM0NzQ4NjQ5NSw1NDA0Mi4xOTU5NTczMTMzMiwxMTE5NDkuMzAyMTUwNjY5ODYsMTEyNjA1LjY3NDMxMTkzMTU3LDE4MjA1MzMuMzUzNTU2OTY0OCwxOTc4MTMxLjQ1NTQ1NjA5NjcsMTYyMTI4OS45MTY3NDA2OTczLDE0MDgzNDIuNDk5NTk1MjY0NywxNzYwNzU0LjMwMDkxNTA2LDM1NzU1MC4yNDI1MzgzNzUzLDIwOTAxMTEuMjQyNzc3NjcxNCw0MTM2NDAuMzg2NjYzMzU3NjcsMTA5ODA2NC4yOTk5Mzk0ODc4LDk4MTUwOC42NTc4MTgwNzI4LDIyNjQxNDUuNDMzNjMwOTc0NSwxNjMzMDIzLjA3OTgyMzE5NDMsNDU5MDQ0LjM0NDI3OTk2NzgsMTMzNjAzMi41ODk2NjM4NDIyLDg5MDA1Mi4xMjQwNTE4OTIzLDEzMTQ0NTAuMDUxOTQzMzI3OCwxNDU5NjYzLjY4Mzk1NDQ0OTYsMTI5ODUxNy45NzUzNTQ1Njg2LDI5NjA0MDAuNTU3NzI0MDMyNiwxODg5MDYuOTI2MjYyMzU1OTMsMjM2My40MjM4ODc2NDUyNzM3CisxNyxUaHUgMTAgRmViIDExLDEwMzk4Ny4zMjcxNzYwOTQzLDkyODQxLjE4OTMxNzkwODYsNTQwNDQuOTk5OTY5NDc4OTQ0LDExMjIxNi4yNzU1MzU2ODEwMSwxMTI2MDIuMDQ4NDQwNjQxOTcsMTgyMDc1OC4zMjg2NDA5NjE2LDE5NzgwNjMuMTg5OTcxNTQzMiwxNjIxMjY4LjU3ODEyNzM5MDcsMTQwODQzOC4wOTUxMzA4NjU3LDE3NjA4NDEuNjcxMzE0MzI4NCwzNTc1NTkuMzQ0MTgzMzY3NSwyMDkwMDc1LjkzMzMwNzY5MjQsNDEzNjI1LjkwOTk2Mjg2ODMsMTA5ODAzOC43NTg2MzExNDc0LDk4MTU0Ni42MjI3ODg3MjY0LDIyNzY1MDguNTI0NDA3Mjc3LDE2MzQwMzQuNDA0NTEwODQ5OSw0NTkwMjguMjk3NzQyMDI0NjUsMTMzNTk5NC4wNTYzOTYyODEzLDg5MDQxNi41OTQ0NjQ2NDg3LDEzMTQ0MDQuMDU1MTQzNzA0NCwxNDU5NjEzLjAxNzkyOTYwMjksMTI5ODQ5NS41OTQ1MTI2NjI5LDI5NjA5NjEuODA4NzI1MTUxLDE4OTA4Mi4zOTQ2NjM0Njg5LDIzNjMuMzQ4MzEzOTE0MDIzCisxOCxGcmkgMTEgRmViIDExLDEwNDAwMC43MDA0NTY1MDgwMyw5Mjg0Ny40NzU0ODc2NTQ2NSw1NDA1NC41NzkzNTQyOTU0NCwxMTI3ODkuNjY5OTM5ODM2ODIsMTEyNTk4LjkxODM2NjQxMDIyLDE4MjEzNTMuNzkwNTgwNTQ0LDE5Nzc5OTYuNDczNTU4ODgzMiwxNjIxMzAwLjY0MTIxODE5NDMsMTQwODcyNC45MTUwNDExNzE3LDE3NjExMzMuMjg2NjgyMDk5OCwzNTc1OTkuNTgwMzA1OTU4MiwyMDkwMDk5LjI5MTU4MzM3NTMsNDEzNjExLjQzNTA5MTc4OTYsMTA5ODAzMi42Mzk5ODYyMjM4LDk4MTY5My4yOTY3NTExODI0LDIzMDI2NDcuODYzNTcyNTE5NywxNjM2NDY2LjgxODUxNTQzMzIsNDU5MDEyLjI4NDg3NTkwNzksMTMzNTk2OC4xNTA5MDczNzE0LDg5MTMwMy4wNjI5ODQ3NTcxLDEzMTQzNTguMDc0ODkzMzI2NSwxNDU5NTYzLjEwOTg1NzIwMDYsMTI5ODUwNy43MzU3NDI0MTQ0LDI5NjI0MDkuOTQ3Njc3Mjc4NCwxODk0NzguMDkxNDIzMDg1MzcsMjM2My4yODQzNzkwMDUwODgzCisxOSxTYXQgMTIgRmViIDExLDEwNDAzNi45NTkxMTMxMzEyMiw5Mjg2Ni43OTEyNjY4NTc0Myw1NDA4MC40NjQzMzExNTU5OSwxMTQwMDguNjAzMzE3NTQ3MzYsMTEyNTk3LjA0Mjc2MDIxNzI2LDE4MjI3ODkuMjM0NzI4MDkxNCwxOTc3OTMzLjcxMTMzMTk3MzgsMTYyMTQ2NC42MzI4Mjk0MDI4LDE0MDk0NTIuNjU5MTIzMjY4NCwxNzYxOTA1LjUyMjU0MzgyODIsMzU3NzE0Ljc0NjE0MDU4MjE0LDIwOTAyNjkuODg2OTMwNzU5NSw0MTM1OTYuOTY0NDAyMzc5MywxMDk4MDc0LjQ2ODM2ODE0NzcsOTgyMTA4LjIwNDgzNzgzODEsMjM1NzI2MS4xNzAyNzM3MjM1LDE2NDIxNzkuMzc0NDU2NTIyLDQ1ODk5Ni4zNTg0MDE5MTY4LDEzMzU5NzMuNzU5NDE5MzQwNiw4OTMzOTAuMjExMjA4OTU1MywxMzE0MzEyLjEzNTIyNTk5MzgsMTQ1OTUxNS4yNTc5MjQ0MjM4LDEyOTg2MDQuNzcyNzgxNDk2NCwyOTY1OTEyLjQxNzAyMTM2MjYsMTkwMzU2LjE5MDAyMzc5ODM4LDIzNjMuMjUwMjM5NzY1Mjk1NgorMjAsU3VuIDEzIEZlYiAxMSwxMDQxMjYuNTE4NTM5NDc2Niw5MjkxNi42MzE1OTM3MjYwNyw1NDE0NS4yOTQ2MzYyODI0NiwxMTY1NjUuMjYxNTEyMjY1MDcsMTEyNTk4LjMxNjMzOTk3NTc5LDE4MjYxMjAuODQ2MDIxMjMsMTk3Nzg4MC45Njk3NTExNjU3LDE2MjE5NTIuMTc3MjY5OTk0NSwxNDExMTkzLjQ5NTc0NjE0MDEsMTc2MzgwMy45OTUzMzAzMDM3LDM1ODAwOS4wMzI1OTI4MTkxMywyMDkwODA3LjA5NzU4MTQ0NzYsNDEzNTgyLjUwNDI4OTIxODUsMTA5ODIzMy43OTk0OTA3OTM0LDk4MzE3OS45OTg5OTY0MDM3LDI0Njg4MTYuOTIwNzQ2NzIzNywxNjU1Mzk5LjU0ODM0NzI2ODMsNDU4OTgwLjY1MjUwNTA4NzQzLDEzMzYwNTcuNDI1NTg5NzE0Miw4OTgyMjAuODU4Nzk0MTU1MSwxMzE0MjY2LjI5Nzc1NTYzNjMsMTQ1OTQ3Mi45MTM5NjMyMjE1LDEyOTg5MDkuMDc3ODI2MjM0LDI5NzQxNDkuNTAwMjk3NDQxNiwxOTIyODEuNTYwNzgzMTczNywyMzYzLjI5MTQ0NzM1MzQ4MjUKKzIxLE1vbiAxNCBGZWIgMTEsMTA0MzM5LjYzMjgxODQzMDQ2LDkzMDM3LjU1MTYyNDUxMjI0LDU0MzAyLjQwMDg1NDU5ODY1LDEyMTc5OS41MTk1NTk5OTM4NiwxMTI2MDcuNDM4NjM0NDM1MjUsMTgzMzcwNi43NDcwNjAzNjc4LDE5Nzc4NTMuNDQ5NzYzMjQ5NiwxNjIzMjI3LjgwNjU3MzE5MDUsMTQxNTI1MS4wNDAyNDc2NjUzLDE3NjgzMjguMDc0NzQ4MDQ3NiwzNTg3MjguNTg4Mzc2ODYzNiwyMDkyMjUwLjQ2Mzg0MDc1NDcsNDEzNTY4LjA3MTkzNzEwMTgsMTA5ODY3OS4xNjgzNjY3ODU5LDk4NTg0Ny42NDY4NjkxNTk3LDI2ODYyNzkuOTAyNjM5NTIzLDE2ODU1NDIuNzU2MzcyOTk4NSw0NTg5NjUuNTA1NjcxMTYsMTMzNjMzMy4wNzc3OTA1MDMyLDkwOTI1MC4zMTk5MTU2MTQ4LDEzMTQyMjAuNzE5MDk4MDczMiwxNDU5NDQ1LjE1NDgxNzY4MTgsMTI5OTcxNi4wMTE1OTQ1NzQ3LDI5OTMyMTcuNTExNzE2NjY5LDE5NjQ0MS40NTkzNDA4MDM4LDIzNjMuNTIxMTU2MTUzNDM3NQorMjIsVHVlIDE1IEZlYiAxMSwxMDQ5OTMuMDcyNDc5NzgyNjgsOTM0MTIuNjg0MjgwMDEyLDU0Nzk2LjE0OTI4NDg5NDkzNSwxMzM4OTQuODQzOTQ5ODE0OTQsMTEyNjQ3LjQ5NDU1MzQxODczLDE4NTU2OTQuNzk2NTk3ODQ2LDE5Nzc5MjYuNzkyMzMwNTQwNywxNjI3NTEwLjk0OTAzMDA5NDUsMTQyNzM5Ny41MTQyNDczOTkzLDE3ODIyNjcuMDYwNzE3ODUyNiwzNjEwMTAuMzI0NTk3MTA0NSwyMDk3MjE5LjY4Njc5NDQ0NDUsNDEzNTUzLjc1OTgwNDgwOTA2LDExMDAyMTYuNDk0MzE5OTkyNiw5OTQ1NDAuMjUwNDE2NDYwNywzMTEyNDcwLjE4NDUwODkzOTcsMTc3MDc4NC4yMDk0MTA0MTE1LDQ1ODk1Mi42MTA2NTgzMDY3LDEzMzczNTEuMjY1MDg0MTMzMyw5NDA5MzcuMTQyMTM1MzM3MywxMzE0MTc2LjE5MDQwNTk2MTEsMTQ1OTQ3OS41MTU5MjcwMDI4LDEzMDI0MzAuNTEzMTI5MjA4NSwzMDQ5NjgxLjUzODg5MjUwNSwyMDczMDkuMDkzMTI4OTUwMzQsMjM2NC40OTQyNjk0NDg5NTcKKzIzLFdlZCAxNiBGZWIgMTEsMTA2NjM0LjEyMTg0MTIxOTYyLDk0MzU1LjQyNDYxMjg5OTI0LDU2MDUyLjk2MDM0NTAwNzYsMTUzMzkwLjQzMzczMjQ0NTksMTEyNzY2LjI3NDI2NjgwOTI3LDE5MDc1ODQuNTY1NTkwMDU5MiwxOTc4MjYxLjU5ODQ5MjE5ODIsMTYzOTE0My42MzQ2NTYyOTQsMTQ1NzE1MC4xMTU2MDI3MDYsMTgxNzM0Mi4zODcyNDAwODc2LDM2NjkwMi44MTkzNzAyMjI0LDIxMTA5ODEuODQ1MzAyNDA1Myw0MTM1MzkuNzg3ODYxNzQ4NywxMTA0NDM1Ljk2NzE1NjQ1OCwxMDE3Mzg2LjQxOTczNjkzMDYsMzYzOTU5NC4xOTcwMjAzMDYzLDE5NDk3ODQuNjE2OTk5ODk5LDQ1ODk0NS41ODExNDY1NTIwNSwxMzQwMjEzLjMxMjI0ODA5MjgsMTAxMTIzNS40NDIzMjQyNTU3LDEzMTQxMzQuNDI3NTg3MDYzLDE0NTk2ODQuODkyMzM4MDIzNSwxMzA5Nzg4LjU2NDkzODU1MiwzMTgzNDc1LjMyNzg5NjI5NCwyMjg1ODQuOTQyMDgzNzQsMjM2Ny4zNTM3NDYyNjE4NTA2CisyNCxUaHUgMTcgRmViIDExLDExMDkxMS45MDUzNDQ3Nzk5MSw5Njc1NS44MDgzNTI4OTU3LDU5Mjk2LjMxMzYyOTU2Nzg1LDE3ODY0NC4zNTA5Njc1NTkzLDExMzEzMy45NTAxMDgxNjE2OCwyMDMwNjgxLjEzMDQ2ODA4MTcsMTk3OTQ0My44MDk0NDE4NzIsMTY3MjcwMy4wOTA0MjAxNDU1LDE1MzE4NTQuNTY2NTc1NzUzNSwxOTA4MDgxLjEzNjI3ODM0MTMsMzgyNjI0LjI3MjQ2MDE3NDYsMjE1MTQ5Ny44Njc2MjEzNTksNDEzNTI3LjAxNDc2MjQyMjk0LDExMTY3OTkuNTYwMDgyNzQ3LDEwNzgxMzguMTgzNDc2MjEwNiw0MTY4MzUwLjY0MTE2NTY2MDcsMjI2NDIzNy42NTQzMDM0MTM0LDQ1ODk1Ny42MDUyMzAyNjkzLDEzNDg2OTAuNTQzNDk3ODU4NiwxMTUwNjUzLjY3OTc5MjYxODgsMTMxNDEwMS43NjQ3NDkyOTQ4LDE0NjA0NzQuODIxMzMwODIzNSwxMzMxMDI3LjA1NTI5OTY3NTYsMzQ4OTYxNS4xMTMwNzY2NTc1LDI2NDE1OC42MTU1NjY4Nzk1LDIzNzYuMTQ0MTc4NDIwNDAyCisyNSxGcmkgMTggRmViIDExLDEyMDk2MC45MTYwNDA5NjQzNSwxMDIwNTMuMTg1MDY1ODcxNjMsNjYzNjQuNzUwODc4NDQ3MywyMDQyNTEuODQ3ODc2NTU5NywxMTQyNjUuMjQzOTA4OTExMzksMjI3OTQwOS40MzMxODE2MjUsMTk4MzM0OC40Nzk5MjY4NDA2LDE3NjQ3MTEuMjYwNTY4MzA4NiwxNjk2NDgwLjM2NzU1NTA0MzQsMjExMzE5My43NzEwOTg4OTIsNDE5NjEzLjY0OTMwNDE5MzIsMjI2NTA1NS4xODIyODY5MDIzLDQxMzUxOC41MDg1NjY1ODY0LDExNTIyOTkuMjQ5NzE0MTM1LDEyMTIyMzMuOTgzNTYwNjk5Nyw0NjM2MzU5LjU5MjI5Nzc3NywyNjQ3MTMxLjIwNTcxMTkxNTYsNDU5MDMwLjg2MzA0MTU3NTIsMTM3MzE3OC4yMTcxMTQ1MjY1LDEzNDc1MjIuNDM1MjYxMDI1OCwxMzE0MDk4Ljg2MzE3MjcwMTYsMTQ2MzI1OC4xMzEzMzYzOTQ1LDEzOTAxMjYuNzkwNDU4Mzc3Miw0MDMyNDUzLjY2NDYyMzQ5OCwzMDc1MjEuODQ4NDMzNjEzODQsMjQwMi44NTE4NTUzMzI3MzEyCisyNixTYXQgMTkgRmViIDExLDEzODkyOS45NDE3OTYxNTE1LDExMTM2OC45MjM1MTYyNzQwMSw3NzM0MS4wNzkyNzI4NzQ4NiwyMjczOTEuMDMzMjgyMDEzMDMsMTE3NDc4LjQwNDMwMTgwNzQ2LDI2NTA0MzIuODM2MzA5NDgzNywxOTk1MzUyLjgxMTQ4NjI4NjMsMTk2ODE4Ny43MzY3MDkxMDY3LDE5NjU3NzcuNjE0MTkyNDcyNSwyNDUxNzk5LjU3NjA3NzIyNTYsNDg0MDEwLjQyMTk2MTczMjg1LDI1MjE0MDIuMjM1MzM0NTE5OCw0MTM1MjQuNDEyNDQwNjQ5MSwxMjQwNjcyLjE3Mjc3MTAzOTQsMTQxNzEyMy4zNzk0MDYyODQzLDUwMzAxMjYuNTA0Mzc0MDIyLDMwMjIxMTMuNjc5OTUyMjQ0Myw0NTkyODcuMTczMzA1OTI3NiwxNDM2NzM3LjE1NTkxMzg5OTcsMTU1NTY4Ni4xOTk0NDA5OTczLDEzMTQxODYuOTk2Njc1MjI2LDE0NzIzNTYuMzE3MDIyNjQ4LDE1Mjc0NjkuNDMyMjc0ODQ1LDQ3MDk1MDguNzA4MzE4ODQsMzUwMzIzLjQwMzc0MzI5ODksMjQ3Ni4yODE3NjA3MzY2NjI0CisyNyxTdW4gMjAgRmViIDExLDE2MjE5Ni4xNzYyMTQxNzQ4LDEyNTAzNC4zODU0ODIzMDY4Nyw4OTg5Ni43MjY1NzU2NDgwNSwyNDcxMDIuMjIzNjI4OTM2MDQsMTI1NTk2LjcwMTk0NTMxNjk1LDMwNjkzMzAuNDcyNTcyODEsMjAzMDMxMS42Nzg2MTU1MTM3LDIyOTI3MzIuNjUwMTE2ODE0OCwyMjg4NTcyLjI1OTQ3MzA5MTUsMjg1NzIzOS41MTc2Njc1MDE3LDU2NTAwNi42MDEzNjUwNzE2LDI5MzY1OTUuMTIzNzI0NDI2LDQxMzU3OC45NjM4NzQ2NTY1MywxNDEyNzUxLjczMTUxMzI3OCwxNjQ2OTIyLjAzNzQxODgxNiw1MzUwNTk4LjQyODQ3MjE2OCwzMzU2NDMyLjMyNjU3Mjg3MTMsNDYwMDgxLjE1MDkwMTQ5MDQsMTU3ODQzNS4yMDM1MjE2Njk2LDE3NDg1NjQuODg0OTE3NzA2LDEzMTQ1NTAuODEzOTM0NDU1LDE1MDA1MTYuNzY5MjAzMzAyMiwxNzY1NzM1LjI4NTg0MjU1NzIsNTM4OTAzOS41NDcwNTIzNywzODg2NDEuNzY1OTgxMTQ4MSwyNjUwLjc0ODEyMDQzODEyNAorMjgsTW9uIDIxIEZlYiAxMSwxODYxMDQuNTE4NDI0NDE0NjgsMTQyMjgwLjY1MDY5MTc5OTU2LDEwMjAwNy42MTY5MjYzMTA1LDI2MzMyNC4zNDIzNjczOTY1LDE0MTg1Mi44OTU5MTY0MDA2OCwzNDcxNDM3LjM0ODY1NTk5MzYsMjEyMjYyNi45NzIxODU1MzU0LDI2Njg4MDUuNjQzODUzMzQ4LDI2MDcyNzMuNTYzMTE4NDg4NSwzMjU2OTY4LjYzNDA4MDYxOSw2NDY5OTUuNjI1MzExMTM2LDM0MjE1NzUuMzA0MTIwMjM2LDQxMzc5MS4xODY2OTYzMzQ3NCwxNjUxMDkzLjQzNDcwODU5MywxODY2MzUyLjY4OTYzNDQzMDcsNTYwNjIzMS43ODYwNTY3NjksMzYzOTY0My43MDIxMjY4MTQ1LDQ2MjM4NS4yNjkwNTQ0Mjc0LDE4MTkxODIuODA4MDAyNzQ1MywxOTE1NzMzLjkxMTAxOTk0MTYsMTMxNTcyMC44MDc1MDM1Mzg3LDE1NzgwNDUuOTczMjAzODcyLDIwNjEzNzYuMzExOTQwNTg1NSw2MDA0MDA1LjU2NTE4Njk3LDQyMTE4NC40MzQzNzMxNDMsMjk4MC4zMzA3MTMyMjA2MDU1CisyOSxUdWUgMjIgRmViIDExLDIwODAyMy40NTY2Njk5NDUzLDE2MTM3MC40NTE2Mzc5MTg0OCwxMTI3NDMuMzE4NTMwMDkyNjYsMjc2MzMzLjEyNDMzNjE5MDEsMTY1NTMzLjE5MjcwNTc0OTg4LDM4MjY5MjguMDQwODEyNzEyLDIzMzEzNTQuMDcxMjg5Nzk1NSwzMDM0NTA0LjAyMjIyMTA4MjQsMjg5MzM5Ny43OTM4OTQ1MDA1LDM2MTU1NjEuNDM2MjAwMjMxLDcyMTU4Mi4zMzM5NjQ1MDI4LDM4OTQ5MTguOTMyMzkyNjAzNyw0MTQ1MDMuNjgxNzc2NDgyOSwxOTA1OTMwLjYwOTAzOTE3NDksMjA1OTc3Mi41NDAyNTA2ODM3LDU4MDY1NTQuOTY3MTIyOTAyLDM4NzE0MDIuMTkwODYzNjIzLDQ2ODg0My44NDc1NTcwMDQ4LDIxMjAxODEuNzE1MTM2MTUzNiwyMDU0NjQ0Ljg1Mjg3OTkwMjMsMTMxOTI0MC4xNTYzMjkyNjcsMTc1MjM3Ny4zNjE1OTkyNjQsMjM1ODk1Mi4xOTU0MDYzMTQsNjUyOTI0NC40OTYyMDY3MzgsNDQ3ODYwLjc4MDU4NDQ5MjYsMzQ1Ni41MzQwODA2ODMzNTgKKzMwLFdlZCAyMyBGZWIgMTEsMjI2OTM2LjMxODY4NzUzMjc0LDE4MDE5MC4xNzU4NjgzNTIxOCwxMjE4MTkuNzA2NzM2MzU1MjMsMjg2NjA5LjY2NjUxNjkxNjgsMTkxNjM5LjI4NDM5MDk1MjIsNDEyNjk3MC40MjkyMTQ5MSwyNjg4MDk1LjQwNTY3MDQ3MDYsMzM2MDY5MS43ODg0MzY1Njc0LDMxMzcxOTguOTk3MTQ3NDg0NywzOTIwOTY3Ljk1NDMwODUwMyw3ODU2NDQuNzA4OTExOTEzOCw0MzE3OTU3LjgxMDYzNzMyNCw0MTY2OTEuNjUwNDcxNDk1LDIxNDQ0NzYuNzIwMzI2MDgzLDIyMjI3MjEuMzMyNjc2MDIxNCw1OTYyMDg0LjIxNDM3MzQ3NCw0MDU3MTg2LjQyMDQxMjg5NCw0ODU3MzMuMjcwNzg5NDg2MiwyNDI1MDIyLjgyMzA3OTA5OTQsMjE2NzIwNC4xNzQ3NTI3MjMsMTMyOTI3NC42OTM2NTE4Mjc1LDIwMzUzNjAuMDQxNjg4NjMxNSwyNjI5MjMzLjIyOTMxNzExMSw2OTYyODMxLjIxNDE4OTc2NSw0NjkyNzEuNDk1NTI2Mjk4MjQsMzk5My4yMDc2Mjg4Mzc5OTEKKzMxLFRodSAyNCBGZWIgMTEsMjQyODA3LjA4NjgxNjE3NDcsMTk3Mzg5LjY1MjQwMTI5ODg0LDEyOTMzNS4wODgwODkzMjY3LDI5NDcyMC42MTAyOTM2MjU1NiwyMTY2NTQuNzY3NjU3MTI1NSw0Mzc1MTMyLjA1MDU4ODU2OCwzMTM0NjU0LjUzOTUxNTU1OTYsMzY0MDE2Ny40NTgzMTQ5MTEsMzM0MDExOC42MTQyNTIzMjMsNDE3NTA4My44ODY5NzQzMTI0LDgzOTI0My4yMTQzMDgyMDUyLDQ2ODA4NTIuMTgwNTA1MDMxLDQyMjQ4MS41NTk3OTE2NDIsMjM1NDc0MS4zMDkwNDg3NDUsMjM1NzMyNy4zODAzNjkyNzQsNjA4MzIzMC42MDMwODA2ODMsNDIwNTQxNS4wNDY1NzkxNjEsNTIzMDczLjQ4ODEyNDc3MDM1LDI3MDUyNjMuMTY3OTEwNDM0MywyMjU3NzExLjAzMjc3MTkxOTQsMTM1NDYxMi42MDQ1ODgyMiwyMzcyMjMzLjcxMDg4Mzk5MTMsMjg2MzM0OC4xMzk5NTE5MzIsNzMxNjA2OC44MzA3NTgwOTMsNDg2MzY5LjM3Mjc1MzQzMDMzLDQ1MTUuMzYxMjQ4OTkwMzQ3CiszMixGcmkgMjUgRmViIDExLDI1NTYxNy40NTYxMTAwNDgzNCwyMTIxNzMuNDgzNDI4MTk1NjcsMTM1MzM3Ljg5MTY1NTQ3NTEsMzAwOTQ2LjE1MTEyMzM1MDk1LDIzODc5NC45MTc5MjMzMDk3NSw0NTczMTcxLjEyOTQwNDU2NywzNTk0MDUyLjEyNDY5NDA1MDMsMzg2OTM1OC4yNTk5NjkxNDcsMzUwMjg2My45NTMwMjYyODgsNDM3ODgzOS44MzEwMzgwNjEsODgyNDA2LjE1OTM1NDIwMSw0OTc4NzIwLjk1MDM4NDMxMyw0MzcyOTEuMDAxMzQ0MzcxMiwyNTMwNzgzLjYwODQ1NTM2NiwyNDY0NjQwLjAxMDg5MzE4MDUsNjE3NTE0Mi44NDA4ODY2NTQsNDMyMDI1MC4xNzg1NDE2MDIsNTk0NTYyLjcxNDUyMDU2OCwyOTQ2Nzc5LjAwOTc0NjYzNCwyMzI4MjkwLjQ2ODE3NTgwMjQsMTQxNjk0OS43ODgxODQzODA0LDI3MDg3MzQuMDQ3MjIyOTYyNiwzMDU2ODk4Ljk5ODU0MDAzMzYsNzU5NDU0MC45ODk4NTk3NDQsNDk5NjI1LjQ1NjkyNjgwOTEsNDk4MS45MDMzMzI1OTY1ODcKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvSW5vY3VsYXRpb25UZXN0X0ZEX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9TXzAuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Jbm9jdWxhdGlvblRlc3RfRkRfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL1NfMC5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmMyNDQwMQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvSW5vY3VsYXRpb25UZXN0X0ZEX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9TXzAuY3N2CkBAIC0wLDAgKzEgQEAKK2l0ZXJhdGlvbix0aW1lLApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Jbm9jdWxhdGlvblRlc3RfRkRfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL1NfMS5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0lub2N1bGF0aW9uVGVzdF9GRF9SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vU18xLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYzI0NDAxCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Jbm9jdWxhdGlvblRlc3RfRkRfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL1NfMS5jc3YKQEAgLTAsMCArMSBAQAoraXRlcmF0aW9uLHRpbWUsCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0lub2N1bGF0aW9uVGVzdF9GRF9SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vU18yLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvSW5vY3VsYXRpb25UZXN0X0ZEX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9TXzIuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYyY2JkMGIKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0lub2N1bGF0aW9uVGVzdF9GRF9SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vU18yLmNzdgpAQCAtMCwwICsxLDMzIEBACitpdGVyYXRpb24sdGltZSxFRy1GUkctRzIxMDAwMSxFRy1GUkctRzIxMDAwMixFRy1GUkctRzIxMDAwMyxFRy1GUkctRzIxMDAwNCxFRy1GUkctRzIxMDAwNSxFRy1MT0UtRzI0MDAwMSxFRy1MT0UtRzI0MDAwMixFRy1MT0UtRzI0MDAwMyxFRy1MT0UtRzI0MDAwNCxFRy1MT0UtRzI0MDAwNSxFRy1MT0UtRzI0MDAwNixFRy1MT0UtRzI0MDAwNyxFRy1MT0UtRzI0MDAwOCxFRy1MT0UtRzI0MDAwOSxFRy1VUEUtRzI5MDAwMSxFRy1VUEUtRzI5MDAwMixFRy1VUEUtRzI5MDAwMyxFRy1VUEUtRzI5MDAwNCxFRy1VUEUtRzI5MDAwNSxFRy1VUEUtRzI5MDAwNixFRy1VUEUtRzI5MDAwNyxFRy1VUEUtRzI5MDAwOCxFRy1VUkctRzMwMDAwMSxFRy1VUkctRzMwMDAwMixFRy1VUkctRzMwMDAwMyxFRy1VUkctRzMwMDAwNAorMSxUdWUgMjUgSmFuIDExLDE5MzIwNC4zMTIyNDQ5NzEsMTcyNTAzLjI0MjIyMjA3MTY1LDEwMDQxMC45Mjc3NjczMjM3MiwyMDc1NzUuNzYyOTYzOTkzNTYsMjA5MjM0LjI4NDI5Mzk1MzI0LDMzODIzNTQuMjIxNTU0MDMxNiwzNjc1NjAwLjgyODUxOTA0NCwzMDEyNTA1LjkyOTI2OTkwODUsMjYxNjY2NS40MDU5NDE0MDgsMzI3MTQ5MC42MTUzMzc2NDU2LDY2NDM0My41MzcyOTczOTEyLDM4ODM2MjkuNjg5Mjk2MDM5LDc2ODU5Mi43MDExNjI3MTA4LDIwNDAzMTcuNzg1MzgxOTgyMywxODIzNjcyLjIwODk3MDQ1Niw0MTg2Mzk4LjIwMDE4OTg1MjYsMzAzMjg4MC45MjYwMTExOTczLDg1Mjk1OC41OTcyNzE2NjA2LDI0ODI0OTYuNzI2ODA4NjE3LDE2NTMyNzMuMzgzNDY5NDYyMiwyNDQyNDAzLjQ2MzI0ODY0MSwyNzEyMjI3LjEzOTQ4NDYxNzQsMjQxMjc3Mi4wNDQ4NTY0ODgsNTQ5OTg2MS42NzE3ODcwMjYsMzUwNzM1LjY4MzY2OTIzMDksNDM5MS41MTMwNTE3MzI4NTUKKzIsV2VkIDI2IEphbiAxMSwxOTMyMDkuMTQxOTc1NzY0MjQsMTcyNTA3LjU1NDgwMzEyNzIyLDEwMDQxMy40MzgwNDA1MTc5MSwyMDc1ODAuODg5NjMwNzcyMzUsMjA5MjM5LjUxNTE1MTA2MDYsMzM4MjQzOC43NTc3NDc5NDEsMzY3NTY5Mi43MTg1Mzk3NTY3LDMwMTI1ODEuMjQxOTE4MTQsMjYxNjczMC44MTI4NDQ2MjUsMzI3MTU3Mi4zOTU2NDc2MDMsNjY0MzYwLjE0NTg4NTgyMzYsMzg4MzcyNi43ODAwMzgyNzEsNzY4NjExLjkxNTk4MDIzOTksMjA0MDM2OC43OTMzMjY2MTcsMTgyMzcxNy44MDA0MDY1NTMzLDQxODY0OTcuNDE4NzE3ODM4LDMwMzI5NTYuNjg0NTM4NDgzNiw4NTI5NzkuOTIxMjM2NTkyMywyNDgyNTU4Ljc4OTIyNjc4NywxNjUzMzE0LjY5MDA3OTY5MTQsMjQ0MjQ2NC41MjMzMzUyMjI2LDI3MTIyOTQuOTQ1MTYzMTA0NywyNDEyODMyLjM2NDE1NzYwOSw1NDk5OTk5LjEyOTIyNzIzNCwzNTA3NDQuNDI4OTg0MjY2Miw0MzkxLjYyMjgzOTU1OTE0OQorMyxUaHUgMjcgSmFuIDExLDE5MzIxMy45NzE2OTY5OTc0NywxNzI1MTEuODY3Mjc0NjQzMiwxMDA0MTUuOTQ4MjQ5OTUxMTUsMjA3NTg2LjAzNDk4NzQxMTI2LDIwOTI0NC43NDU4NzUzMDQyLDMzODI1MjMuMjk4NTkzNzk3NywzNjc1Nzg0LjYwNjIyNjQ2MzMsMzAxMjY1Ni41NTI2NTM0MzA1LDI2MTY3OTYuMjIxMDA2Mzc3NiwzMjcxNjU0LjE3NTk2NzE3NjQsNjY0Mzc2Ljc1NDA1MjM5NzksMzg4MzgyMy44NjgzMTQzOTg1LDc2ODYzMS4xMzAzMDk3MTI2LDIwNDA0MTkuNzk5OTc1NjQ5NywxODIzNzYzLjM5MDc5NTM3NzMsNDE4NjU5OC4yNjczMzk1NjYsMzAzMzAzMi40NjAxOTIxNjIsODUzMDAxLjI0NDY1OTg5NTQsMjQ4MjYyMC44NTAwNjg1NzIsMTY1MzM1Ni4wMDMyMDg3OTQ0LDI0NDI1MjUuNTgxODcwODc3NiwyNzEyMzYyLjc0OTExOTMyNzQsMjQxMjg5Mi42ODE5MjY2Miw1NTAwMTM2LjU5NDkwNzY2OCwzNTA3NTMuMTgxMDAwOTc4NDUsNDM5MS43MzI2MjQ1OTY4MzIKKzQsRnJpIDI4IEphbiAxMSwxOTMyMTguNzk5NTU1NTE1NTIsMTcyNTE2LjE3OTA1MTM4MjksMTAwNDE4LjQ1Nzk3NTM5NTk2LDIwNzU5MC45OTIxNTI3ODg2NSwyMDkyNDkuOTc2NDUxNDU1NTYsMzM4MjYwNy43NDI3OTg3OTQsMzY3NTg3Ni40OTE1MzYwMzEsMzAxMjczMS44NTkxMTg4NjYsMjYxNjg2MS41ODU3NDI0NjgsMzI3MTczNS45MjEwNjcxMDA1LDY2NDM5My4zNTk3NzU5MzAyLDM4ODM5MjAuOTUyMDkxMDk5Nyw3Njg2NTAuMzQ0MTUxMTQ2NywyMDQwNDcwLjgwNDQ3MDM3NzcsMTgyMzgwOC45NzQyMjkzMDMyLDQxODY2ODguNDgzMTEwOTY0LDMwMzMxMDcuOTUwNDQxMTg3Nyw4NTMwMjIuNTY3NTQxNTc2OCwyNDgyNjgyLjkwODg0ODQzMzgsMTY1MzM5Ny4yMDQ3MDQ1NzA2LDI0NDI1ODYuNjM4ODU1NjUsMjcxMjQzMC41NTEzNTMzMzcsMjQxMjk1Mi45OTY1Mzc4ODM4LDU1MDAyNzMuODgyMTI2NzE4LDM1MDc2MS44NDg1NzMwOTYxLDQzOTEuODQyNDA2ODQ2MDA1Cis1LFNhdCAyOSBKYW4gMTEsMTkzMjIzLjYyNTUyNzcxODEzLDE3MjUyMC40OTAxMzMzOTkwNiwxMDA0MjAuOTY3MjE2ODg5NjYsMjA3NTk1Ljc1NzE5MTU3NjM4LDIwOTI1NS4yMDY4Nzk1MjA4NSwzMzgyNjkyLjA4ODk0MzMyNzMsMzY3NTk2OC4zNzQ0Njg1NDgsMzAxMjgwNy4xNjEzMTQ3MTIsMjYxNjkyNi45MDY0NDMzOCwzMjcxODE3LjYzMDUxMjA1ODcsNjY0NDA5Ljk2MzA1NjYwNDEsMzg4NDAxOC4wMzEzNjg2MzQsNzY4NjY5LjU1NzUwNDU2MDEsMjA0MDUyMS44MDY4MTA5MiwxODIzODU0LjU1MDY4NTYwMzIsNDE4Njc2Ny43MjQyMTgzODMsMzAzMzE4My4xNTEzMDk0MTk0LDg1MzA0My44ODk4ODE2NTYzLDI0ODI3NDQuOTY1NTY2NDcwOCwxNjUzNDM4LjI5Mjk4NzI5MiwyNDQyNjQ3LjY5NDI4OTU5NywyNzEyNDk4LjM1MTg2NTE5NSwyNDEzMDEzLjMwNzk5MTU5MTMsNTUwMDQxMC45ODg0MzU5MTMsMzUwNzcwLjQzMDI1Mzk2ODM0LDQzOTEuOTUyMTg2MzA2NzcyCis2LFN1biAzMCBKYW4gMTEsMTkzMjI4LjQ0MzYwOTcxOCwxNzI1MjQuNzk3NzE3NjE3NjgsMTAwNDIzLjQ3MzQ1OTY3ODgsMjA3NTk5Ljg4OTE0OTE0NTcsMjA5MjYwLjQzNzA0NzU1MDM0LDMzODI3NzYuMDQxOTE0NjEyLDM2NzYwNjAuMjU0NzAwNzc1LDMwMTI4ODIuNDQzNzMxODEyMywyNjE2OTkyLjA0ODA5MjgxNTYsMzI3MTg5OS4xODY2NjY3OTY0LDY2NDQyNi41NTIwNDAxMjQsMzg4NDExNS4wOTE3NDE3NDYsNzY4Njg4Ljc3MDM2OTkwMzEsMjA0MDU3Mi44MDEzMzk1NzYzLDE4MjM5MDAuMDg2Nzk5ODMwNCw0MTg2ODE0LjEyODc3NDM1OCwzMDMzMjU3LjExNDkzMTEzMSw4NTMwNjUuMjExNjc2MjQ4MywyNDgyODA3LjAxNjkwMjcxMjYsMTY1MzQ3OC45MDQ3NDE2ODM1LDI0NDI3MDguNzQ4MTcxMDU5NCwyNzEyNTY2LjE1MDYwNjE0MiwyNDEzMDczLjYwNTgwMjgzNyw1NTAwNTQ3LjMyNzUwNTg3NCwzNTA3NzguNjkzNTI4OTU5MzUsNDM5Mi4wNjE5NjE1OTY4OAorNyxNb24gMzEgSmFuIDExLDE5MzIzMy4yNDU4OTIyOTI2NywxNzI1MjkuMDk4MTIzMzkwOTMsMTAwNDI1Ljk3MzQwODMwOTM0LDIwNzYwMi44MDM4MDk5MzY5NywyMDkyNjUuNjY2ODA5MDU3MjMsMzM4Mjg1OS4yMTI0MzU2ODk4LDM2NzYxNTIuMTMxODA5Nzc2LDMwMTI5NTcuNjg2MDYwOTg5LDI2MTcwNTYuODMyNjc3NjU5NiwzMjcxOTgwLjQzNDYxODY3NCw2NjQ0NDMuMTExMTg5NTA3LDM4ODQyMTIuMTE0MzU2NjIzLDc2ODcwNy45ODI3NDcxMDU2LDIwNDA2MjMuNzgwNjQ3NjczLDE4MjM5NDUuNTM4ODQwNTI0OSw0MTg2Nzk4LjY4MTU5NDQwOTUsMzAzMzMyOC41OTIxMzc1MTIzLDg1MzA4Ni41MzI5MjAyOTU0LDI0ODI4NjkuMDU4NTEwODU0NCwxNjUzNTE4LjU2MTA1MzU2NzMsMjQ0Mjc2OS44MDA0OTc4NjI1LDI3MTI2MzMuOTQ3NTEyNzcxNSwyNDEzMTMzLjg3NjIzOTY0MzQsNTUwMDY4Mi4xMjY2NDg0OTEsMzUwNzg2LjMzMTE0NzU5NTIsNDM5Mi4xNzE3MzA5MTk0ODkKKzgsVHVlIDEgRmViIDExLDE5MzIzOC4wMDU0ODMwMDA4MywxNzI1MzMuMzc3NzE0ODI4MywxMDA0MjguNDUzNDI2ODM0OTIsMjA3NjAyLjkxNzM0MTUxMDc3LDIwOTI3MC44OTU0NjU1NzE0MywzMzgyOTQwLjM2MTk2ODI5NSwzNjc2MjQ0LjAwMzc0MTkyOSwzMDEzMDMyLjc5ODM4NTYxNDUsMjYxNzEyMC42Nzg0Nzg5MTY2LDMyNzIwNjAuODM4MzU0Mzk5LDY2NDQ1OS41NzY5MjI3NTgsMzg4NDMwOS4wMTE0ODI0OTIsNzY4NzI3LjE5NDYzNTQxOTUsMjA0MDY3NC43MTE5MzM0NDU0LDE4MjM5OTAuNzE4OTE3NjE1NSw0MTg2NjQ1LjM5NzQ2Mzg3MDcsMzAzMzM5My40MjI3NjU0NDgsODUzMTA3Ljg1MzU4MDI0NiwyNDgyOTMxLjA3MDYwNzY5MDYsMTY1MzU1NS42ODUxNzE4MjkzLDI0NDI4MzAuODUxMjU1MzMwMywyNzEyNzAxLjc0MjA2ODcwNiwyNDEzMTk0LjA1OTI4MzM0NTUsNTUwMDgxMi44MDg1MzQ3MTEsMzUwNzkyLjQzNTkxMDIwMzQ0LDQzOTIuMjgxNDgyMDQ3MTY5Cis5LFdlZCAyIEZlYiAxMSwxOTMyNDIuNjY1NTA2MTA5OTIsMTcyNTM3LjYwNzEwMTU0NjMsMTAwNDMwLjg4MzQ4NjY2MjQ3LDIwNzU5Ny4wNzc1MDI5MjI3LDIwOTI3Ni4xMjE0NDIwOTU0NiwzMzgzMDE2LjkxMjY0NzU2LDM2NzYzMzUuODY1ODUzNjcsMzAxMzEwNy41ODAzNDY2NDIsMjYxNzE4Mi4zNjY3MTE0MjMsMzI3MjEzOS4yNTk3MDM4OTU1LDY2NDQ3NS44MDk1MDQ0Mzk5LDM4ODQ0MDUuNTg2MDQzMTE4LDc2ODc0Ni40MDYwMzMwMTQ2LDIwNDA3MjUuNTIyMTA1MjIyMywxODI0MDM1LjIxMDUxMzQwNjcsNDE4NjIwNC43Mjk1ODE0NjE4LDMwMzM0NDIuODUwOTkyOTc1LDg1MzEyOS4xNzM1NzcxNzEsMjQ4Mjk5My4wMDg5MDkyNzgsMTY1MzU4Ni45Njc2MDU5NDEsMjQ0Mjg5MS45MDA0MDg4Nzc1LDI3MTI3NjkuNTMzMDM1NDY5NywyNDEzMjU0LjAyMTQ4NjE2Miw1NTAwOTMzLjk0NjY3NjIwOSwzNTA3OTUuMTU2NDM2NTIyMjYsNDM5Mi4zOTExODYxMzg2OTA1CisxMCxUaHUgMyBGZWIgMTEsMTkzMjQ3LjA4MTA1OTEzMjE4LDE3MjU0MS43MDkwMDg3MjYzNSwxMDA0MzMuMTgwMjc0OTQxOTMsMjA3NTc4LjI4NDc0NDcxODc1LDIwOTI4MS4zMzk5NzMxODIyLDMzODMwODIuNTcyMjg2OTM1NSwzNjc2NDI3LjcwMzkwMzQyNDYsMzAxMzE4MS40NTIwNDUzNjEsMjYxNzIzOC44NjQ5NTEwODksMzI3MjIxMi43NjgwNzQxNTUsNjY0NDkxLjQyMzE1ODc0OTEsMzg4NDUwMS4yNTA0NTU1NzcsNzY4NzY1LjYxNjkzMjYzMjQsMjA0MDc3NS45OTk3MDcxNDIsMTgyNDA3Ny44MTg3MjEyNDk3LDQxODUxNDkuMTg2NDQ4OTE0LDMwMzM0NTQuODY1ODI0MzE4NSw4NTMxNTAuNDkyNjQ1NjIzMywyNDgzMDU0Ljc0Mjk5MTc5OSwxNjUzNjA0LjE0ODYxMDQ4NCwyNDQyOTUyLjk0Nzg0MTUwOTIsMjcxMjgzNy4zMTU3NTAyNTcsMjQxMzMxMy4zNzk1Nzc4NzQsNTUwMTAzMS44ODQ0MjgzMTksMzUwNzkwLjE3NTA4ODMwNjEzLDQzOTIuNTAwNzQ2MzU0MTM4CisxMSxGcmkgNCBGZWIgMTEsMTkzMjUwLjkxNTQzMDUzNjY0LDE3MjU0NS41MDA2NDI0NjA4LDEwMDQzNS4xNDA2NDYzMjI0OCwyMDc1MzEuNzA2MzY3Mjg0NDQsMjA5Mjg2LjUzODg5NTcxMDU1LDMzODMxMjMuMTEyNjQ4ODI4NCwzNjc2NTE5LjQ4MTI5NTE5OTYsMzAxMzI1Mi45NjY2MTk4NTIsMjYxNzI4My4yMjk4NjExNjk2LDMyNzIyNzQuNTA5NDU4NzMzMyw2NjQ1MDUuNDc5NzU2ODMxOCwzODg0NTk0LjUxNjAzNDE2OTYsNzY4Nzg0LjgyNzMxMzU1ODksMjA0MDgyNS42MTcyODI1Nzk0LDE4MjQxMTUuNTc1MTE2NzMxNyw0MTgyNzkxLjMwOTQ4NjkzNzcsMzAzMzM3OC43NDYzNDU4NTk1LDg1MzE3MS44MTAwNzUyNDAxLDI0ODMxMTUuOTQ0NDY5MTc1OCwxNjUzNTg4LjI4MTE2MzQyMiwyNDQzMDEzLjk5MzIzOTM1NSwyNzEyOTA1LjA3NzE0NjkyNzQsMjQxMzM3MS4xODExODU4Myw1NTAxMDc1LjEyOTI0NzgxOCwzNTA3NjguMDIxNzk3Mjc5OTQsNDM5Mi42MDk5MDM3OTk5OTYKKzEyLFNhdCA1IEZlYiAxMSwxOTMyNTMuMzYxNDczMDQwMTYsMTcyNTQ4LjUzNjU1MTU4NzE3LDEwMDQzNi4yNTIyODM3NzExMywyMDc0MjUuNDM5MDYxNzU0NTMsMjA5MjkxLjY4NTUyODI1NjIzLDMzODMxMDUuNTc5Mzc4MTI5LDM2NzY2MTEuMDk4NjIwNDM0MywzMDEzMzE4LjM1Nzc4OTI2ODMsMjYxNzI5OS4xMDk1MDAzMzIzLDMyNzIzMDcuOTIxNjQwMTE5LDY2NDUxNS42MTkyODIxNzU5LDM4ODQ2ODEuNDI0OTYwNzY1LDc2ODgwNC4wMzcxMTA3OTA2LDIwNDA4NzMuMDAyNjI1NDc4NCwxODI0MTQwLjc4MDM0NTYwNDMsNDE3NzY2NC45OTY1ODYxMjA3LDMwMzMwOTQuMjEwNjc3NjcxLDg1MzE5My4xMjM4NTYzMzIyLDI0ODMxNzUuNzQ3NDM4MDQwNiwxNjUzNDk0LjY4NTI3NDY1MiwyNDQzMDc1LjAzNTcwOTUwNzgsMjcxMjk3Mi43Nzc1MDE0MTczLDI0MTM0MjQuOTYxMjIwNzk4NSw1NTAwOTg4LjkyMTA0MDczNiwzNTA3MDcuNTM1NTM2OTA5NCw0MzkyLjcxNzkzMTkzNDczMgorMTMsU3VuIDYgRmViIDExLDE5MzI1Mi41MjMxODkzNTY0NiwxNzI1NDkuNzU3NTQ1NjMzNTYsMTAwNDM1LjI2MzE2NzkwNjk5LDIwNzE5MS40NTkwMTE3MTI3LDIwOTI5Ni42OTU3Nzk2NDc5LDMzODI5NTQuODcxNDA5MDQ5NywzNjc2NzAyLjI5NzgzMzY5NTUsMzAxMzM2OC4xNzY3NjMyMDY3LDI2MTcyNDguNjY5OTI1NTA2LDMyNzIyNzMuODMzMjc0NjIxLDY2NDUxNi4wODQzNTQyMzM5LDM4ODQ3NTEuODc4ODM0NzM3NSw3Njg4MjMuMjQ2MTM3NTY5NCwyMDQwOTE0LjcxNDk5NjkxMTQsMTgyNDEzNC4xNjM1MDY5NTE2LDQxNjY2NjguMDEzMDU0MDI5NiwzMDMyMzIxLjQwNjkyNjkyNyw4NTMyMTQuNDI4NjI3NjkwMywyNDgzMjMxLjk1NjcwNjMzMDYsMTY1MzIxOS45MDg1OTg4NDU0LDI0NDMxMzYuMDcyODU5MjAyNSwyNzEzMDQwLjMwNTE2NjM2MzMsMjQxMzQ2OC41NjM4MTU1OTA1LDU1MDA1OTkuMTM4NjEyMTA4LDM1MDU2Mi4wMTI4MjA5MTM3NSw0MzkyLjgyMjkwNjg3OTM2MgorMTQsTW9uIDcgRmViIDExLDE5MzI0My45MzU0ODEwMjI5MywxNzI1NDYuNjQ0Mjg0MzI0NzgsMTAwNDI5LjExNzQzMTU4NDkyLDIwNjY4NC43MzY0MzM5NDIsMjA5MzAxLjM1Mjg3NzMzMzgyLDMzODI0OTkuNjQwMDQwMzE5LDM2NzY3OTIuNDA3MDIwMjM3MywzMDEzMzc4LjcwODc4NjE2NywyNjE3MDQ0LjE1MjUzNDUyNCwzMjcyMDc5LjM0OTQ4OTg2OCw2NjQ0OTIuODM3NTg3NTA3LDM4ODQ3ODAuMDgwNDg4Nzk3Nyw3Njg4NDIuNDUzODU0NDMzNywyMDQwOTQyLjEyNDg3MjQ1OCwxODI0MDQ3LjQzNjM4MTY5MDIsNDE0MzI0MS4zNDI3NTM1MDA3LDMwMzA0MDguMTAzNDA0OTQ2Niw4NTMyMzUuNzEwMTE1ODQ2MSwyNDgzMjc5LjAwMDg2MjU3NiwxNjUyNTI0LjAwODk3NjMxODQsMjQ0MzE5Ny4wOTgyNzk3NTEsMjcxMzEwNy4zNDU4MDgyOTQsMjQxMzQ4Ni42MTUxMjEzOTYzLDU0OTk0OTkuNDA1MjE2NjMxLDM1MDIyOC4zMzMwNzQyOTg3NSw0MzkyLjkxOTc2Mjk5MzMwMDUKKzE1LFR1ZSA4IEZlYiAxMSwxOTMyMTcuMTUxMTYyMjkyMTcsMTcyNTMzLjI1NTkwODU3NzY3LDEwMDQxMC40NDQwNzM3Mzc2OSwyMDU1OTcuNzExNzUzMDYxNjIsMjA5MzA1LjEwNjYyMTI5Mjg5LDMzODEzNTEuMDY0NTQzNzI3LDM2NzY4NzkuNzA0NDE1ODQ4NSwzMDEzMjkxLjIyNDU4MTUzMzYsMjYxNjQ4My4xMDM3MzkxNjc2LDMyNzE1MDUuNjk1OTU4MDgyNiw2NjQ0MTIuMDM1NDMwMTY5NywzODg0NzAxLjA5OTU0MTE2NTQsNzY4ODYxLjY1ODc1MDg1NjUsMjA0MDkzMy44NzcwMjkyMjU3LDE4MjM3NjEuMTQ3OTMwNDUxNyw0MDkzNjMzLjE0MzgzMzc1MywzMDI1ODQ0LjY3OTA1NTQ5OSw4NTMyNTYuOTMxMTMxMDIyNCwyNDgzMzAyLjkzODMxNTE1MTcsMTY1MDg1NC4wMTk2NzQwNTMsMjQ0MzI1OC4wOTUxNzI4ODg2LDI3MTMxNzMuMDM5MDk1MDM4NSwyNDEzNDQxLjIxODM2OTc0Miw1NDk2NzQ3LjI4ODMwMTk5MywzNDk0NzkuOTQ1ODQ1ODUyMiw0MzkyLjk5NTQ1NDgxMjkyMzUKKzE2LFdlZCA5IEZlYiAxMSwxOTMxNDcuNzgyOTQ0Nzc1MjIsMTcyNDk1LjYzNzg1NzI0NzcsMTAwMzYxLjU2OTQzNTc1NDE3LDIwMzI4My4zMjA0MzA0OTc2LDIwOTMwNi41Njg5OTA2ODc2LDMzNzg2MjkuMTY0NjQ1NjM2NSwzNjc2OTU5LjgwMzIwNTA1NDcsMzAxMjk2MS4xMTg2NjczMTcsMjYxNTA5OS4zNDc3NjIwMjEyLDMyNzAwMzguOTE4MDgxMTE4Myw2NjQxOTIuNTA3OTQ1NTAwOCwzODg0MzUyLjUwNTAwNjgxMSw3Njg4ODAuODU2NjQwNTA3MiwyMDQwODM3LjQzMjQwODIxODUsMTgyMjk4MS40NDQwMjAyNzAxLDM5ODk0NjUuNTgyMDc4Nzg2LDMwMTUxNTEuNzIxMTgyNTczLDg1MzI3Ny45OTU2OTM4Mzc2LDI0ODMyNjkuMDg1MjcyMzMxLDE2NDY5NDAuMDAwNzk3Mjg1MiwyNDQzMzE5LjAxOTg5MTczMjQsMjcxMzIzNS4wNTU2Nzk1MTMsMjQxMzIzOS40OTcwODE4NDksNTQ5MDE2My4zMTUxMDM5ODM1LDM0NzgyMS4zMzQ5NjA0MTE4LDQzOTMuMDE2NzY0MDQ0MzU0CisxNyxUaHUgMTAgRmViIDExLDE5Mjk3OS4xMzgxNjI4MjY0MiwxNzI0MDEuMTkwNDUxNjc2MTcsMTAwMjQwLjQzNzM0NzE3NzYzLDE5ODQwMy45NTIzNTc2Mjg5LDIwOTMwMi4yNjg1NzgyNTYyMiwzMzcyMzUxLjEwODY1MTk0MDIsMzY3NzAyMS42MjMyOTUyMzM2LDMwMTIwMzUuMDcwMDIwNDE2LDI2MTE4MjMuNDE3NTIxNTAyLDMyNjY0NzYuOTg1Nzk2MTI5Myw2NjM2NDAuODk2NzIwNjYyNCwzODgzMzMxLjM4MTkyMzU4LDc2ODkwMC4wMzYxMDcwNjA3LDIwNDA1MjQuNTIyMjU4MjIsMTgyMDk5MS4xMTkyNjcyMjk1LDM3NzQyNzUuMjUzMDc1NDgxNCwyOTkwMzc2LjIzMzE5NDI5NDQsODUzMjk4LjY1OTAyNDU4NjIsMjQ4MzA5MS44NDk2MzM0OTgsMTYzNzg4NC42NTcxMzczNDQ0LDI0NDMzNzkuNzYwMzMxMjUxLDI3MTMyODcuMTgzNjIxMzAyMiwyNDEyNjU1LjU1MTE3NTc4MTUsNTQ3NDczMy4wNzk0MzUwMSwzNDQxNzguNDE2MzIyODk3OCw0MzkyLjkwMDE3MjU0Njg3MTUKKzE4LEZyaSAxMSBGZWIgMTEsMTkyNTc5Ljk3ODE4NzMwOTY0LDE3MjE3NC4xNTk4MTcyODI3LDk5OTQ3LjY4NDAyNTcyMDM2LDE4ODI5Ny40ODI0MTE3NTM3NiwyMDkyODMuNTc5MTkxNjQyNDQsMzM1ODA3NC40MTM2MDI4NDksMzY3NzAzNy4zNTE2MzMxMTgsMzAwOTY1NS4wMTA4MzIxMTE0LDI2MDQyMTIuMjU4MDIwMDU5LDMyNTgwMjEuNDA3NTkyMzk5NSw2NjIyOTkuMzQ5NjcwMDA2NSwzODgwNjQ0Ljc5ODkzMTMzMzIsNzY4OTE5LjE2NjM1Mzg0NjYsMjAzOTY4My44NDg4NDk3ODc2LDE4MTYwNTIuMDE2OTE1MTYzMywzMzQ0ODA0LjI4NTIyNzY5NDUsMjkzMzU5Ni45NDYxMzU0OTA3LDg1MzMxOC4zMDIyNTg5OTI2LDI0ODI1NjEuMzI0NDI0NzIyNywxNjE3MTQ2LjY4NjQ1MDc4NywyNDQzNDQwLjAzMDg5OTMyOTYsMjcxMzMxMy4wMzI5NjcwODksMjQxMTE0My4yMTI4NjU2MzY3LDU0Mzg5OTguMDAzNzk1NjkzLDMzNjI2My4yNTI0OTU1NDYzLDQzOTIuNDM3NzI4NDk0MDU2NQorMTksU2F0IDEyIEZlYiAxMSwxOTE2NDguNDk4MjE4NDI0NjUsMTcxNjM5Ljg2NDQyMjA0NTQsOTkyNTAuNzg2Mzc4NDc2MiwxNjgxMDkuNzc3MjI2ODI2ODcsMjA5MjI5LjIwODAzNTk1ODM1LDMzMjU5NDYuMzg5NDkwMjMyLDM2NzY5MzcuNjEzMTIzOTAzLDMwMDM3NTAuODQ0OTc1NTY0LDI1ODY3MjYuNzEwMzkzMzE0NywzMjM4MjA0LjAyNzc1NjcwMDMsNjU5MDkyLjAzNDgyNTcyNTEsMzg3Mzg2My4wOTcyOTc5OTMsNzY4OTM4LjE2NTIxMzEzMjUsMjAzNzU2NC42MDg5NDcwMzU0LDE4MDM5OTEuMjk4NTE5ODg3LDI1NDk5NjguMjIzMTMzMDU4LDI4MDU2NDEuMjY5OTQ2NTI2Myw4NTMzMzUuMzczNzc0NDQ0MiwyNDgxMTY2LjIwNzczNTAwMywxNTcwMjY5LjY1NTMyMDEzNjgsMjQ0MzQ5OS4xMDk4MDMyNjAzLDI3MTMyNjkuODEzMDE5MTA1NywyNDA3MzkwLjQ4MTI2MjYsNTM1NzEwNC43MDUzNzgxMzgsMzE5MzgzLjYzNzYzMDA1NzYsNDM5MS4xMTYzODA5MjM5NjUKKzIwLFN1biAxMyBGZWIgMTEsMTg5NDk4LjUyMzMxOTE0MDI4LDE3MDQwMC43NDM4MzY3ODU1OCw5NzYxMy44NTQ4Mzc2MDc3LDEzMDc5Ni44NTQ3NDc5MTQ4OCwyMDkwODYuOTMzNjkzOTA0LDMyNTQ1NDIuNDE0Nzk0Njc1NSwzNjc2NTUwLjMzMjkwNzE1MSwyOTg5MzY2LjUwNzk0MjIzNzQsMjU0Njk4NC4zOTYxNDcyMzIsMzE5MjI2NC45ODU2Nzc3MzUsNjUxNTIwLjA4MDcxNzkxMTgsMzg1NzA4Ny41NjcyNjQ0ODgsNzY4OTU2LjgxNTQ1NDkwMTgsMjAzMjM2Ny43ODI5ODkyOTMsMTc3NDkzNy41MDg0NzIyMTQsMTMxMTQ1Ny43ODcyMjY4NjksMjUyNjcwMC43NDcwNjkxMTksODUzMzQ2LjAxMTQ2NTM5MDQsMjQ3NzY3MC4yMzYzMDIyNDUsMTQ2Njc3Mi4yMTM5Nzk1ODMyLDI0NDM1NTUuMTg1MTc4OTMyNywyNzEzMDQ2LjgwNjAyMDkzMjMsMjM5ODI2OC4zODIyMTY1MTgzLDUxNzIyMTUuODg5MDIxNTA5LDI4NDcyMS43OTU3MDg2NjAwNCw0Mzg3LjY4MDg1MDEyNjkyNQorMjEsTW9uIDE0IEZlYiAxMSwxODQ2MDQuNzY4MDgyODA5OTMsMTY3NTc1LjY1MDU4NjgyODg4LDkzODM4LjMzNzM3Nzg4MzI1LDcyNzA3LjM5MjM3NjM1OTE3LDIwODcyOS42MzA0MzM5NzQxMiwzMDk5MTYyLjM2MzAxMDM0OTcsMzY3NTQ1MS4xMjk0NTIwMDgzLDI5NTQ3NzIuMzYzNzk1OTI3NywyNDU4MTA0LjgzNTY4Mzk3MiwzMDg3Mzg2LjYwOTU2MTM1NTMsNjMzOTA0Ljg5MjcyNjQxODIsMzgxNjE1OS4wNTE2NTYwNTI1LDc2ODk3NC41NDc2NDAxNzMxLDIwMTk4MTkuODcyNDk0MDUyNiwxNzA2MjA1Ljk1NTMzMTY0MzYsNjc3NjUuNzg1MzkzNzYzOCwxOTYxNTg3LjgwNjg4Nzc2NzMsODUzMzQwLjY2OTIyNDE4NTksMjQ2OTExNC43MjE2NTYxMjEsMTI0OTMwNy40MzY0NjI0NTMzLDI0NDM2MDMuNzM4NDEwNCwyNzEyMzU5Ljk1NzQzNzIzMjYsMjM3NjM5MS45MTYxMzE3MSw0NzY2NDI5LjAwMjMzMDk5LDIxOTA5Ni4yNzQyMDY0NjgyOCw0Mzc5LjA4NjQ3NzU0NDg0OQorMjIsVHVlIDE1IEZlYiAxMSwxNzA3MjcuODU5MTk4OTQwNCwxNTk2NjUuNTMzODQ4MjM1ODgsODMxMzguOTkxNDM4OTY0ODksMTk4MzYuMjk3NzcxNDM0MjI3LDIwNzU0OS42ODE4NTk2NDc4MywyNjk4NjcyLjM4NTAxMjA4NSwzNjcxNTY4LjE4NjA3MDIyMiwyODQ2NTk2LjA0OTE3NDM3NDQsMjIxNTIwMS42Mzk5MjAyOTQzLDI3OTExMjUuOTQzNzQzNDc0Myw1ODI1MDQuNzgzMTg4Mjc5MSwzNjg1NTMxLjE4MzgwODYwOTQsNzY4OTg4LjM4MDU1NDc0MjUsMTk4MDE3OC40Mzc3MDE3Mzg0LDE1MDQ0NzYuMTQwNTUyNTU0NSwxMDEuNjA2MTM4NDk1Mjk0MTYsOTM1MDU4LjkzOTE3NDc2NTUsODUzMjcyLjY5MjE5NzE3NTgsMjQ0MTc5Ni4wNjc0MjU3MDIyLDc4MzU2MS41ODg4NzQ5NzM4LDI0NDM2MjIuNDM0MTAyMjQwNSwyNzA5NzYxLjA3MjAyNjkwOTMsMjMwODExMC4xMTMxMzczMzI3LDM3NDc0NTUuNTQxMzc5MDY2LDExMDYxMS4zMjg4NzU5NjAyNiw0MzUwLjg1ODM3NjUyNTIyOQorMjMsV2VkIDE2IEZlYiAxMSwxNDAxNTYuMzk4ODY4MTk0MzIsMTQzMzI5LjU1MzYwOTU0MzY1LDYwNzY4LjM1MzIyMDAzNzE4LDMuMDY0MTgxMTk1MjkzMDE4MiwyMDQzNjkuNjAzODY0Mjg1NzUsMTkzMjQ4OC4zMTg4MzUxMDQ0LDM2NjA2NjkuNDQxMzc4Nzc4MywyNTc1NTgxLjUzNDgzMDYwMywxNzA4ODIxLjU1MjE0MTE0MywyMTU0NTYwLjMyNTMyNTQzNDYsNDY4MDMyLjA4ODk5MDYxODMsMzM1MTc3NC41OTQzODg4MDg2LDc2ODk5MS40NjQ1ODU1MDU0LDE4NzgxOTQuMTA4NzI0ODk5MSwxMDcyOTA0LjE4ODg2OTkyNywxMDYuMTkxMTQ5MjYzMzYwMTIsODU2MzcuOTMzNzc0NTY3NzIsODUzMDQ2Ljc1MDcwOTc3NTgsMjM3MTU0Ny4wNzYwNTYzMTcsMjIyMjg3LjU1NzY2NTUyMzg0LDI0NDM1NjQuNjc1Njk3MzE2NCwyNzAyMDc0LjcxMTI1OTkyNCwyMTM1OTkzLjM2MDYxMDE0LDIwMjAxNDYuNzY4NzI1Mjg0NCwxODkyMi4wODQ2ODkwMjMyMSw0Mjc1LjMxMjk5ODY3MDk4NworMjQsVGh1IDE3IEZlYiAxMSw4MTAzNC42ODAxNTg2MDM4NSwxMTUyNjEuNDM3NjM3NTgxOTQsMjQ5MjcuNDYxMzgxNDg2MjcsNi45NjUxNjIwMzY4MDAyNjIsMTk1MzAwLjM2OTY3OTkyNjgsNzk1MTI5LjczOTM5NjUzNjQsMzYyNzg5My42NzExMTQ5NTM3LDE5MTk3MjIuNDU3NzE4MTczNSw4MzI2NTAuODA5MDA0NzEyNCwxMDMwODI2LjMwMjM4MzMzNTgsMjUzMzc5LjUyNjM4MTI5NTk2LDI1MjUwNDQuMzA4Nzc4MzIxLDc2ODk1Ny42MTAxMzEzMDg4LDE2MTA5OTIuMjAyNjIyOTgyNywzOTE5NDYuOTI3MTcxOTA3MiwxMDMuMDkwODQ4NDMzODQyODgsODkuMTY5MTQ1MzQ5MjcyMjgsODUyMzI5LjA1NzEwNjc1MTEsMjE4NjUyNy4yMzM5NjU5MDM1LDc3NC44MjAyODEyODc5MzM1LDI0NDMyNjQuNTgwOTY4NDE2LDI2Nzc2NjMuMTEzNDc3MzAzLDE3MDYxNzEuNDQ3NTc3NzgxNSwzMjE2NTkuMDA1Njc5NDgwNDQsMC4xODY2OTE4NDU0NTI1NDI3LDQwNjMuNzcwMDYwMTgwNTYyCisyNSxGcmkgMTggRmViIDExLDE4NzU4LjY3ODc3NjAyMjI1LDgwODU0LjIyOTc5MzQ2MTk3LDIzMjguNzc2Mzk0NDM3ODM4NSw2LjU3NDkxODYzMDE0OTc4NywxNzA4NDkuNDE5NTU5ODE1MTcsODY1NjYuMzUyMDM4MDkwMjIsMzUyOTk1OS4yMzU1MjAzNzYsODI0MTg5LjA4NDQ0OTY4MjUsMTIyOTkxLjQ2MTg5OTk4NjU1LDEzOTM0NS4yNDU4OTM5MTA5Myw1MTAxNS42ODI5NjE4NDEzMywxMTA1NTMxLjgzODM4ODY4MjgsNzY4Nzk2LjA5ODUzMDc5NywxMDM0ODkzLjY0Nzc4MzU0NzQsMjMzNjUuNDMyNTE1NDEwNTksMTA5LjU3Njc0NTA2NzA4OTM4LDY3LjMyNTkyNTY3ODU2MjI5LDg1MDEzMS42NjM0NDA5MDYzLDE3NDU1ODYuNDU0MDk5MjcyOCw0MS45NjQ5NjE4NDAzNDU4MiwyNDQyMjE0LjY3MDAwNTU0NjQsMjU5OTk0OC42NTgyNDMwOTY0LDg5NzM3MS4yMzg3Njk5NjgzLDM2LjgyMDk1MTM3Mzk0NzUsOC4yMDIyMzcyMTEwMDQ4MDUsMzUyNC43Njc4OTgxNzQ2MTg1CisyNixTYXQgMTkgRmViIDExLDM3Ny4wMDQ1MjA1NzAyMDc1LDQ2NTY3LjAwMjIxNDQ2NTYyLDAuODM5ODUxMDA0NjA0ODU5Miw2LjE3ODA0NDA5NzY0Mzg1OCwxMTczMTMuMDM5MDQwNjIxOTcsMjEyLjc2Mjk0NTU3NTIzOSwzMjYxNjM5LjY2NTY2NzkzMjUsODE4NDkuNjE5MjgzODk4NjgsMzgwLjUwMzE2Nzg1MjU2MjgsMTg4LjQxNjA3ODY4MjYzNDk1LDc3OS41NTczNDc4MTAzMDU0LDExNDE0OC44MTg5NTU0Mjk0MSw3NjgyMTcuOTExNTcwNTQ3OCwzMDg0NTcuODQ0MTYzOTA0NjcsNDMuOTg5MzEwNjAzMjcxNjc2LDEyMS44Mzk1NTg5Njc1MjY3OCw3MC45Mjk0NTk5MDI1MDMxNSw4NDM3ODguNjA5MTcwOTU3NSw5NTEzMzQuMTU1NTA3OTU0MywzNi45ODY5OTUzMjc5NTEwNjQsMjQzODk4NC4wNTExMzQwODY3LDIzNzMwNDQuNTkyNDk1NTAyNCwxNTcwMTMuMTU1NjAzOTczNDMsMTIwLjIyMjM3NTkyNDA5OTkxLDguMTMxMDI1Mjk0NjIwNzEzLDI0NjMuNTk2OTYwMDUxNTcyCisyNyxTdW4gMjAgRmViIDExLDQuNTI0NjYzMTg2ODc3NjE1LDE5MTUzLjAxNzI2NDI0Njg5NywyLjI1Nzc5MDUxNDgxODQwOSw1Ljk4OTk1Njg1ODMzODM2Niw0MjE3MS40MjI0NTEyMTQyMyw3Ni45NjgxNjgzNTQzMTE5MSwyNjA4MDg5LjQ4NDEyMjMyODUsMzEuNzU4MDYxMTE3NjY3Njg3LDU5LjI4NDUyNDYxNDE2MDg5LDcyLjgyNDc5NjgxMzg0OTUsMTUuNjY4NzcyODQyNjg0MTUyLDU2LjAyNzE3NTMyMDcyMTc5LDc2NjI5Mi41MzI2MjI1MDE0LDEzMDk0LjExNDY4MDc5NTQzNyw0MC4yODYxMjQ2MzkwNTEzNCwxNDAuOTk3NDA4OTAzMDQ1Niw4MC4wMTYwODQ2MTE1NjQyNyw4MjU4NjYuOTU2MzEzNDk2NywxOTY2OTAuMTg4NDYzNzczMDUsNDAuNDY4ODUzODExOTIwNjksMjQyOTM1NS41NTQ3MTExMDUsMTgwNTg5Ny40NDkxMzcxMzQsMTM3NS40NTY3MjY4OTAwOTM3LDEyNS43ODM4NDA5NDMzNzg5NSw4Ljg4Mjk2NTU5NzQ5NTkwMiwxMDczLjg2MTQ2MjEwMTc1MzIKKzI4LE1vbiAyMSBGZWIgMTEsNC40NzEzNjEyMTMxMDYyOTYsNDY2Ni44NjQ4MTE2NDM1ODQsMi4zOTk1NzcxOTU5ODU0MDczLDYuMzE0Njg5MzYzMjI0NjE4LDI3ODguNTM4OTA3ODU4OTIyNCw4MC4yNDUyMjU2MjUzODczNiwxNDA5NTUzLjk0MTEyMTE5NzMsNjYuMjQzNjQ4MTA5NjQ5NTgsNjAuNzIwMjU4NDEzMjg5NDQsNzYuMDgyMzkxOTE3MTQwMDksMTUuMjMwOTM4MDUwOTk1NDA0LDg1LjM5Nzg4MjY0MjU2MzIsNzYwMjQ1LjYzNTAyMTYzNiwyMC42Nzk2NTk5ODY2MTI2ODgsNDMuNjMyNjM0MTkyMzg1MTQsMTY3LjUwMzM5NDI2MDc4MjQxLDkzLjMyMjU4NjMwMzU4ODM1LDc3NzM0OS45NTYyNzkxMDE5LDI5MjAuNzg0NTM1ODgwNjgzLDQ2LjY5NTI3MTk5MjA4MDk4LDI0MDE1MDguNTkzMDYyMDgyLDgzODAzMy43MTI3NTU0Njk4LDU3Ljg2ODE4Nzc5NDYyNDk2NiwxNDAuOTAxOTMyODEzNjY2MiwxMC4yMjQwMTg2MzI1MjUxMzQsMTc1LjI0NDg0OTI0NDk0NTc4CisyOSxUdWUgMjIgRmViIDExLDQuOTM2NDczNzQyNTE4ODQ5LDY0Mi4yNTA0MjQ1MzQ0NTE0LDIuNzA1MDMwMTE5NzM3ODM3LDcuMTEzMjAzMTI4Njg4Nzk5LDIuMjkxMjU5MzczNjUwNDM0LDkwLjMyODYyMzA3MjA2NDM1LDI3NjQ4Mi45MDQxNjk4NjQ2LDcxLjE1MzQyODU3NzI2MzYsNjguMzI5NTg5MjY4NzcwNzcsODUuODgyOTM3NTk4OTA3NjMsMTYuOTAxOTM1ODU5NzczODMsOTEuNDkzNTcyNjk0MDY0NjEsNzQyMTg0LjYzMTA0ODkwNjcsNDUuNjQ0Mjc5MDA1MTg2MjQsNTAuMDM0MDg2NDQ5NzEwMDUsMjAyLjE0MDA2Mjc1NDE4OTEzLDExMS4zNTQyMTE5MDQwNDM4OCw2NTU2NDMuNjgzMjQ2MjIyNyw1OC4yMDE4NTk1MDgyMzEwMiw1NS40OTkzNjE5Mjc3NDM5MzQsMjMyMjkyOS44MzU4MDQ1MTc0LDExMDkxMy44OTU0MjE1MTc4NCw1NS41NTY5NzQyMDA4NzE1OSwxNjQuNTkyMDU5NDQwMDkzNDQsMTIuMTI4ODI5NzgzNzk3MDYyLDQuNDQwNDc0NTE5NzM3NDE2CiszMCxXZWQgMjMgRmViIDExLDUuNjk4MTQ5MTY2Mjc0NTksNTUuMjk3MjYxMjcyNDI3NDksMy4xNjY2Mjk3Nzk2ODIwODczLDguMzEwODIyMDQ4NzcwMDQ2LDQuNjE4MDA3NzE5MDk3MzQ0LDEwNS43MzY2NzM1NTQwNDc0NywyMjQ4LjM4NDQ5MjgwNDAxNTMsODAuOTY1ODAxOTgyNzE5OTUsNzkuOTkxMDg4MjY2NTQ5OTIsMTAwLjcwMjU1NTMwOTM0MDQzLDE5LjYyOTU0MTAwNjQ1NjExLDEwNC4wNDA4NzIyOTkyMzI5NCw2OTI4NjYuMDMzMjY5NzQwOCw1MC4yMjI1ODExNTk1MDI1MjUsNTkuMjIyNzkyOTcyOTQ1MDEsMjQ1Ljg0Njc3ODU5MDE1MDcsMTM0LjgxNDE1NDczOTkzODY2LDQxMDg5NC4zMjMwMDg2Nzg4NSw1Ny4yMDUxMjE2OTYyNjc4NDUsNjcuMDk2NjA3MDgzMDI3NzYsMjExNjI2MC41NTA5ODE2NTcsMjMuMzgzOTUxMDcxNTk4Nzc2LDYyLjMyMDAxODAwNzgzNDAxNSwxOTYuOTYyMzc2NTQ1MzczOTMsMTQuNjQwMDEzODQ2MDM0MzU5LDAuMTA3ODY4MTMzNDk2NjQyMTUKKzMxLFRodSAyNCBGZWIgMTEsNi43Mzg2MDA1MDc2OTUwODE1LDYuNDczNzQzMDAyMjU1OTQsMy43ODE0ODY4NzQzMTI3MzMsOS44ODg4ODE2ODc2NDcyNjMsNS4wMjMxNTkxNzI2NDQ2NDksMTI2LjI3NDI2MTU0Mzk3ODk4LDEzMC43ODU0MTk1NTQ2Mjc1Nyw5NS4wOTUyNTgwNDgyNzE2Miw5NS41NTE4OTU3NzM2MzYwMywxMjAuNDAzNzQzNjQ4Nzg4ODIsMjMuMzM1MDc1OTM5ODgyOTY2LDEyMi4xNTE4MTA3NzcxMjA2Nyw1Nzg5NjcuNzU4NzM0MDI5MSw1Ny43NTM2NjE1NzI4MTc3Niw3MS4yMTgzNTAzMjExNzEzNiwyOTkuMTgyMTE5NzEzNTIxMTYsMTY0LjA5MDA2NTMzMTgyNjg1LDEwMzIzNC41ODU2OTExMTA5LDYzLjE2MDEyNjkzMzY0MDQ0LDgxLjY2OTc3MDc2MjczMTk5LDE2NTgyMTguMTM2NDYwOTY4NSw1Ny4yODM4MDEwODUxNDAzNiw3Mi42MDc5OTc3NzgyNjk2MywyMzguMzc3MDI1NzIzOTA2NzcsMTcuNzk0NzY4Mjk4MjY3NDE3LDAuMTAzNjMyNTQ5NjE4MjMxODIKKzMyLEZyaSAyNSBGZWIgMTEsOC4xNTgzOTc4OTE4MTg1NzksNi4yNDUzMDQ0MDEwNDkxOTcsNC42MTE3Nzc3NTMwODc4OTgsMTEuOTc5NjI1ODgyMDYzMTM0LDUuNzcyMzAyMzgxNzQzNTA0LDE1NC4wMjg5NjgwNjcwMTc2LDgyLjQ0MTc4MTQ0ODczODI4LDExNC45MjU1ODExNjMyMTc5LDExNi42MTg4NzE0MjgxMzc4NywxNDcuMDI5MTQ4NjcxMTI5MywyOC4zOTgyMjAzNzQ3ODgwNiwxNDcuNTkzNjg0MTEyMTQ0NjIsMzU5MzMzLjkwNTM3ODAzMDQ0LDY4Ljg5MTc2MzE4NDMzOTIzLDg3LjI0ODkwNjA4NDA0NTI3LDM2NS42MTM5MTU1MTc3NDE1LDIwMS42MzE4NzIyMDMwNTQ0MywxOC45MDg2NzUzMzcwNTcwNSw3My41MTU5NTc3NTM4MTg1MywxMDAuNTMwNjAyMjk1ODUxOTIsODY1MDMyLjI0MDMzMDcwNCw2Mi43ODMzMTQ0MjkwMDk2MSw4Ny4zMTYzMTU2MjIxMDYyNSwyOTIuODgxNTMyMjQwNjAyNSwyMS44NzAxMzAwODY3NzQsMC4xMTQxMzcyMTQzMjcxOTU3NgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Jbm9jdWxhdGlvblRlc3RfRkRfUmVmZXJlbmNlL1Rlc3RTRUlSL3J1bnBhcmFtZXRlcnMuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Jbm9jdWxhdGlvblRlc3RfRkRfUmVmZXJlbmNlL1Rlc3RTRUlSL3J1bnBhcmFtZXRlcnMuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ3Zjk4NDUKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0lub2N1bGF0aW9uVGVzdF9GRF9SZWZlcmVuY2UvVGVzdFNFSVIvcnVucGFyYW1ldGVycy5jc3YKQEAgLTAsMCArMSwyIEBACitkaXNlYXNlTmFtZSxwb3B1bGF0aW9uSWRlbnRpZmllcix0aW1lUGVyaW9kLGZyZXF1ZW5jeURlcGVuZGVudCxyZWZlcmVuY2VQb3B1bGF0aW9uRGVuc2l0eSxyb2FkTmV0d29ya0luZmVjdGlvdXNQcm9wb3J0aW9uLGNoYXJhY3RlcmlzdGljTWl4aW5nRGlzdGFuY2UsdHJhbnNtaXNzaW9uUmF0ZSxub25MaW5lYXJpdHlDb2VmZmljaWVudCxyZWNvdmVyeVJhdGUsaW5mZWN0aW91c01vcnRhbGl0eVJhdGUsaW1tdW5pdHlMb3NzUmF0ZSxpbmN1YmF0aW9uUmF0ZQorVGVzdFNFSVIsaHVtYW4sODY0MDAwMDAsdHJ1ZSwxMDAuMCwwLjAxLDIuMjUsMTAuMCwxLjAsMC4zLDAuMCwwLjAsMC40ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Jbm9jdWxhdGlvblRlc3RfUktfUmVmZXJlbmNlL0h1bWFuUG9wdWxhdGlvbk1vZGVsL2h1bWFuL0JpcnRoc18wLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvSW5vY3VsYXRpb25UZXN0X1JLX1JlZmVyZW5jZS9IdW1hblBvcHVsYXRpb25Nb2RlbC9odW1hbi9CaXJ0aHNfMC5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmMyNDQwMQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvSW5vY3VsYXRpb25UZXN0X1JLX1JlZmVyZW5jZS9IdW1hblBvcHVsYXRpb25Nb2RlbC9odW1hbi9CaXJ0aHNfMC5jc3YKQEAgLTAsMCArMSBAQAoraXRlcmF0aW9uLHRpbWUsCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0lub2N1bGF0aW9uVGVzdF9SS19SZWZlcmVuY2UvSHVtYW5Qb3B1bGF0aW9uTW9kZWwvaHVtYW4vQmlydGhzXzEuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Jbm9jdWxhdGlvblRlc3RfUktfUmVmZXJlbmNlL0h1bWFuUG9wdWxhdGlvbk1vZGVsL2h1bWFuL0JpcnRoc18xLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYzI0NDAxCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Jbm9jdWxhdGlvblRlc3RfUktfUmVmZXJlbmNlL0h1bWFuUG9wdWxhdGlvbk1vZGVsL2h1bWFuL0JpcnRoc18xLmNzdgpAQCAtMCwwICsxIEBACitpdGVyYXRpb24sdGltZSwKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvSW5vY3VsYXRpb25UZXN0X1JLX1JlZmVyZW5jZS9IdW1hblBvcHVsYXRpb25Nb2RlbC9odW1hbi9CaXJ0aHNfMi5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0lub2N1bGF0aW9uVGVzdF9SS19SZWZlcmVuY2UvSHVtYW5Qb3B1bGF0aW9uTW9kZWwvaHVtYW4vQmlydGhzXzIuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMwYzhmZWYKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0lub2N1bGF0aW9uVGVzdF9SS19SZWZlcmVuY2UvSHVtYW5Qb3B1bGF0aW9uTW9kZWwvaHVtYW4vQmlydGhzXzIuY3N2CkBAIC0wLDAgKzEsMzMgQEAKK2l0ZXJhdGlvbix0aW1lLEVHLUZSRy1HMjEwMDAxLEVHLUZSRy1HMjEwMDAyLEVHLUZSRy1HMjEwMDAzLEVHLUZSRy1HMjEwMDA0LEVHLUZSRy1HMjEwMDA1LEVHLUxPRS1HMjQwMDAxLEVHLUxPRS1HMjQwMDAyLEVHLUxPRS1HMjQwMDAzLEVHLUxPRS1HMjQwMDA0LEVHLUxPRS1HMjQwMDA1LEVHLUxPRS1HMjQwMDA2LEVHLUxPRS1HMjQwMDA3LEVHLUxPRS1HMjQwMDA4LEVHLUxPRS1HMjQwMDA5LEVHLVVQRS1HMjkwMDAxLEVHLVVQRS1HMjkwMDAyLEVHLVVQRS1HMjkwMDAzLEVHLVVQRS1HMjkwMDA0LEVHLVVQRS1HMjkwMDA1LEVHLVVQRS1HMjkwMDA2LEVHLVVQRS1HMjkwMDA3LEVHLVVQRS1HMjkwMDA4LEVHLVVSRy1HMzAwMDAxLEVHLVVSRy1HMzAwMDAyLEVHLVVSRy1HMzAwMDAzLEVHLVVSRy1HMzAwMDA0CisxLFR1ZSAyNSBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMixXZWQgMjYgSmFuIDExLDExLjU5MjI4MTkxOTI0NjYzNiwxMC4zNTAyMTUyMzM3NDA5NjUsNi4wMjQ2Njc3MTUzNjY4MjQsMTIuNDU0NTcwNjg2OTY0Mzc5LDEyLjU1NDA4MjE2NTc4NDc3OSwyMDIuOTQxNjU5MTc2Mjg5NjIsMjIwLjUzNjQ5MDc4MzgzMDA2LDE4MC43NTA3MTcyNTczODgsMTU3LjAwMDIzODM1Njc1MTgyLDE5Ni4yODk4Mjk0OTk2NTU4NCwzOS44NjA2OTE5NTkxNzQyNywyMzMuMDE4MjQ3MzkzOTQ2MzUsNDYuMTE1NjU0MzAxMDA5NzM0LDEyMi40MTkzMTE5NjEzNzk2LDEwOS40MjA1NTEzNzkxODQyNywyNTEuMTg0NDU0ODE5ODY5NzMsMTgxLjk3MzIxOTUwNjg2ODI1LDUxLjE3NzYxODE5MTQ2Nzc5LDE0OC45NTAxMDE1MDg1MjE0LDk5LjE5NjYwMTQwMTIzODMxLDE0Ni41NDQ1MDA4ODM3MjQ4NSwxNjIuNzMzOTUzODM2NzY3NzcsMTQ0Ljc2NjYxMjIyNDQyMDYsMzI5Ljk5MjM2MDI5MTUwMjM0LDIxLjA0NDE4MzEwODQ5MjAyNSwwLjI2MzQ5MTMxMDA4NjI0MDA1CiszLFRodSAyNyBKYW4gMTEsMjMuMTg0NjEwMjA3NzEzNjkzLDIwLjcwMDQ3MTg2ODQyNTY3LDEyLjA0OTM1OTUyOTQ1MjcwOCwyNC45MDkxOTExOTIzMTExMywyNS4xMDgyMTQ1NDc5OTg2NTMsNDA1Ljg4NDEzMDEyMDgzOTYsNDQxLjA3Mzg2MzcxNTM4NzUsMzYxLjUwMjE1NzUxOTA5MTE2LDMxNC4wMDExMDQ3MTU3MTMxNSwzOTIuNTgwNDQ0MTYwMjAwMDUsNzkuNzIxNTQzMzYxNDM1MjUsNDY2LjAzNzQyNjg2Mjc0NjYsOTIuMjMxNDkzMDY1MDA1NjIsMjQ0LjgzOTExMzYwMDk4NjQyLDIxOC44NDE1NDA0NDE0NDk0LDUwMi4zNjk5MTQzNzk1NjgzLDM2My45NDcxNjY5MDgwNzA1LDEwMi4zNTU0NDEwOTM4MTc3NywyOTcuOTAwNzk4ODE4NjQwNTcsMTk4LjM5MzU5OTU4OTY3NTgzLDI5My4wODk1ODc5NDY2MjU1NiwzMjUuNDY4NTU4NjEwNjUyOCwyODkuNTMzODAzNTE2NDQ4NCw2NTkuOTg2MDQwNTU1MDg1OSw0Mi4wODg0NTAzOTM4ODQ4MzQsMC41MjY5ODM2NzQxMzk4Mjg1Cis0LEZyaSAyOCBKYW4gMTEsMzQuNzc2OTg0ODY1NTg2NjQsMzEuMDUwNzY5OTA0MjE5NzEsMTguMDc0MDc1NDQyMzU0MDUsMzcuMzYzODYxNTE2MjM5NTUsMzcuNjYyMzk3MTQ2ODQyNDk0LDYwOC44Mjc0MTI4MzY4OTcyLDY2MS42MTIxMTg3OTgyMDExLDU0Mi4yNTQzMjA3ODgwMDE1LDQ3MS4wMDI1OTkwNzkzOTU5Niw1ODguODcxODQzOTg0NzczNCwxMTkuNTgyNTU0MjA3NDIwNyw2OTkuMDU3NTM4NDEwMTI4NywxMzguMzQ3NTE2MjkyNzI1NTQsMzY3LjI1OTQwNDkyMDc3OTEsMzI4LjI2Mjk2NzE4ODU0NjIsNzUzLjU1NjM3ODY4MzExNDgsNTQ1LjkyMTg0MjIwNjUxODEsMTUzLjUzMzQ2ODcwNzg2ODc2LDQ0Ni44NTIwOTE5MzI3NDA0NSwyOTcuNTkwOTk0NTY2ODk5OSw0MzkuNjM1MjYxMTkxMDQ3LDQ4OC4yMDM4MTQzMjQyNTg4LDQzNC4zMDE1NzM4NzgzOTk0LDk4OS45ODEwNDA3OTYwMzA2LDYzLjEzMjgwMTg1NjUxNTE0NCwwLjc5MDQ3NzA5MjE2NDk4MTIKKzUsU2F0IDI5IEphbiAxMSw0Ni4zNjk0MDU4OTMwNTA5NSw0MS40MDExMDkzNDEyODg3MSwyNC4wOTg4MTU0NTQxNjcyMzQsNDkuODE4NTgxNjU4OTQ4ODk0LDUwLjIxNjYyOTk2MjUxNzE3LDgxMS43NzE1MDczMjc3MDkxLDg4Mi4xNTEyNTYwMzU3OTkzLDcyMy4wMDcyMDcwNjcwMTA5LDYyOC4wMDQ3MjE0NTAzMTIyLDc4NS4xNjQwMjg5NzY1MTYyLDE1OS40NDM3MjQ0OTc3Njg1LDkzMi4wNzg1ODIwMzk4MjExLDE4NC40NjM3MjM5ODQ5MDczLDQ4OS42ODAxODU5MjI3MTYzNiw0MzcuNjg0ODMxNjIyMjI1NCwxMDA0Ljc0Mzg0NzczNDUyNzQsNzI3Ljg5NzI0NTQwNTEyMjYsMjA0LjcxMTcwMTAzNDQzOTU5LDU5NS44MDM5ODA4NTMyMDQ2LDM5Ni43ODg3ODYzMzQ0OTc0NCw1ODYuMTgxNTIwNjE5MzMzNyw2NTAuOTM5NzIwOTgwMTg5Niw1NzkuMDY5OTIzMzEyNTg5OSwxMzE5Ljk3NzM2MTAxOTYxNTcsODQuMTc3MjM3NDk2NzE5NjMsMS4wNTM5NzE1NjQxNjU5MTM4Cis2LFN1biAzMCBKYW4gMTEsNTcuOTYxODczMjkwMjkyMDgsNTEuNzUxNDkwMTc5Nzk4MjI1LDMwLjEyMzU3OTU2NDk4ODY1Myw2Mi4yNzMzNTE2MjA2Mzg0Miw2Mi43NzA5MTI5OTUyMjM1MDUsMTAxNC43MTY0MTM1OTY1MjE4LDExMDIuNjkxMjc1NDMxNzEwNCw5MDMuNzYwODE2MzU5MDEwNyw3ODUuMDA3NDcxODMwOTczNSw5ODEuNDU2OTk5MTM4NTY5MSwxOTkuMzA1MDU0MjMzMTE2MiwxMTY1LjEwMDU1Nzc1NTU1MTYsMjMwLjU4MDExNjE0MjI4ODYsNjEyLjEwMTQ1NjYwODc1NjcsNTQ3LjEwNzEzMzc0NDIzNzMsMTI1NS45MzIzMjE1Mzc4MjU0LDkwOS44NzMzNzY1MDY3OTU0LDI1NS44OTAxMzgwNzQzNDkxOCw3NDQuNzU2NDY1NTgyNDE1Nyw0OTUuOTg2OTc0ODk0MDU1NCw3MzIuNzI4MzY2MjMzODMsODEzLjY3NjI3ODU4MTA0ODIsNzIzLjgzODg1MTgyMTMzNjEsMTY0OS45NzUwMDEyMzExMjIsMTA1LjIyMTc1NzMxNDgzNDk5LDEuMzE3NDY3MDkwMTQ2ODQyCis3LE1vbiAzMSBKYW4gMTEsNjkuNTU0Mzg3MDU3NDk1NTksNjIuMTAxOTEyNDE5OTEzOTE2LDM2LjE0ODM2Nzc3NDkxNDcyNSw3NC43MjgxNzE0MDE1MDc0Nyw3NS4zMjUyNDYyNDUxNjI0MiwxMjE3LjY2MjEzMTY0NjU4MywxMzIzLjIzMjE3Njk4OTQ2MzQsMTA4NC41MTUxNDg2NjY4OTQ0LDk0Mi4wMTA4NTAyMjM4OTI3LDExNzcuNzUwNzU0NDc0MDczMywyMzkuMTY2NTQzNDE0MTAxODIsMTM5OC4xMjM0NjU1NjEwNDkyLDI3Ni42OTY2OTI3NjU2MDc2LDczNC41MjMyMTY5ODA4NTk1LDY1Ni41Mjk4NzM1NTYzMzM3LDE1MDcuMTIxODAwMDk3MDI4OSwxMDkxLjg1MDIzNTUxNDQ0ODUsMzA3LjA2ODc3OTgyODQxNjQsODkzLjcwOTU0NjEyMjc1NzcsNTk1LjE4NTU2MDI0NzE2MTEsODc5LjI3NTc5ODAzNjg4MTUsOTc2LjQxMzQ4NzEyOTQzOTgsODY4LjYwODM1OTQwNjk1NDQsMTk3OS45NzM5NjE0MzU4Mjg5LDEyNi4yNjYzNjEzMTExOTgwMSwxLjU4MDk2MzY3MDExMTk4MjUKKzgsVHVlIDEgRmViIDExLDgxLjE0Njk0NzE5NDg0Njg5LDcyLjQ1MjM3NjA2MTgwMTM5LDQyLjE3MzE4MDA4NDA0MTg0LDg3LjE4MzA0MTAwMTc1NTMsODcuODc5NjI5NzEyNTM0NzQsMTQyMC42MDg2NjE0ODExNDA0LDE1NDMuNzczOTYwNzEyNTg2OCwxMjY1LjI3MDIwMzk5MzU1MzcsMTA5OS4wMTQ4NTY2MzE1ODE2LDEzNzQuMDQ1Mjk0OTg2MTY5LDI3OS4wMjgxOTIwNDEzNjMwNywxNjMxLjE0NzMwNTQ2MDA0MjgsMzIyLjgxMzQ1Mzg1NTYwMTk1LDg1Ni45NDU0NjcwNDA5ODMzLDc2NS45NTMwNTEwNjAyNjQzLDE3NTguMzEyMjgzNDE2MTU2OCwxMjczLjgyNzgyMjQzMDk5NCwzNTguMjQ3NjI2Mjk3NDU5OTMsMTA0Mi42NjMyMjI0NzY2MTM2LDY5NC4zODQ1NDIzOTU0MDIsMTAyNS44MjM4MTYwMzA4MzI2LDExMzkuMTUxMzQ2NjI3OTY3OCwxMDEzLjM3ODQ0NjA3MTc2MTMsMjMwOS45NzQyNDE2MzkwMTYsMTQ3LjMxMTA0OTQ4NjE0NTM1LDEuODQ0NDYxMzA0MDY1NTUwOQorOSxXZWQgMiBGZWIgMTEsOTIuNzM5NTUzNzAyNTMxNDUsODIuODAyODgxMTA1NjI2Miw0OC4xOTgwMTY0OTI0NjYzNyw5OS42Mzc5NjA0MjE1ODExNCwxMDAuNDM0MDYzMzk3NTQxNDEsMTYyMy41NTYwMDMxMDM0NDA0LDE3NjQuMzE2NjI2NjA0NjEwMywxNDQ2LjAyNTk4MjM0MTg3OTQsMTI1Ni4wMTk0OTEwNTY1NTE1LDE1NzAuMzQwNjIwNjc3OTk3MywzMTguODkwMDAwMTE1NTM3OSwxODY0LjE3MjA3NzQ1NjI1OSwzNjguOTMwMzk5NDEzMDA5NSw5NzkuMzY4MjA2NzkxMDg2NSw4NzUuMzc2NjY2MjU3NzgwMSwyMDA5LjUwMzc3MTQ5OTIyNiwxNDU1LjgwNjEzNzI1OTM0MjQsNDA5LjQyNjY3NzQ4MjI5ODgsMTE5MS42MTc0OTQ2NDYzNjY2LDc5My41ODM5MjEzNDAzNjUsMTE3Mi4zNzI0MjAyMTgwMjc5LDEzMDEuODg5ODU3MDc5MjM1LDExNTguMTQ5MTExODE4MDczNCwyNjM5Ljk3NTg0MTg0NTk2NCwxNjguMzU1ODIxODQwMDEzNzMsMi4xMDc5NTk5OTIwMTE3NjMKKzEwLFRodSAzIEZlYiAxMSwxMDQuMzMyMjA2NTgwNzM0OCw5My4xNTM0Mjc1NTE1NTM5OSw1NC4yMjI4NzcwMDAyODQ3MywxMTIuMDkyOTI5NjYxMTg0MjksMTEyLjk4ODU0NzMwMDM4MzIyLDE4MjYuNTA0MTU2NTE2NzMwNywxOTg0Ljg2MDE3NDY2OTA2MTcsMTYyNi43ODI0ODM3MTQ3NjQ4LDE0MTMuMDI0NzUzNTAxMzE1NywxNzY2LjYzNjczMTU1MjY5OTMsMzU4Ljc1MTk2NzYzNzI2MzYsMjA5Ny4xOTc3ODE1NTM0MjgsNDE1LjA0NzUyOTQzODU2ODM1LDExMDEuNzkxNDM2MjMzMTI4LDk4NC44MDA3MTkxNTA2MzIxLDIyNjAuNjk2MjY0MzUwMjU4LDE2MzcuNzg1MTgwMDAyNDA2Miw0NjAuNjA1OTMzMzgzNzUxOTYsMTM0MC41NzIzNjI2MzQzOTk3LDg5Mi43ODM2OTcwODM2MzczLDEzMTguOTIxNjEwNjAwODEyMywxNDY0LjYyOTAxODQ4NTg0NiwxMzAyLjkyMDM1NjY0ODIwNjUsMjk2OS45Nzg3NjIwNjE5NTQsMTg5LjQwMDY3ODM3MzEzOTg3LDIuMzcxNDU5NzMzOTU0ODM1CisxMSxGcmkgNCBGZWIgMTEsMTE1LjkyNDkwNTgyOTY0MjM4LDEwMy41MDQwMTUzOTk3NTAzNiw2MC4yNDc3NjE2MDc1OTMzMywxMjQuNTQ3OTQ4NzIwNzY0MDUsMTI1LjU0MzA4MTQyMTI2MTA5LDIwMjkuNDUzMTIxNzI0MjU4NiwyMjA1LjQwNDYwNDkwOTQ2OCwxODA3LjUzOTcwODExNTEwMTMsMTU3MC4wMzA2NDM5NjgzODUyLDE5NjIuOTMzNjI3NjEzNDE0NSwzOTguNjE0MDk0NjA3MTc4NCwyMzMwLjIyNDQxNzc1NTI3ODQsNDYxLjE2NDg0MzkzMzAxNjEsMTIyNC4yMTUxNTUzNjkwNjY3LDEwOTQuMjI1MjA5NzQwNTcxLDI1MTEuODg5NzYxOTczMjcsMTgxOS43NjQ5NTA2NjMwOTY3LDUxMS43ODUzOTQwMDI2MzgwNCwxNDg5LjUyNzgyNjQ0MzA5NjMsOTkxLjk4Mzg2OTYyNjgwNiwxNDY1LjQ3MTM4NzE4MTUzMSwxNjI3LjM2ODgzMDg1MDQwNSwxNDQ3LjY5MjE4MDU2NDQ3NjgsMzI5OS45ODMwMDIyOTIyNjQyLDIxMC40NDU2MTkwODU4NjA0NywyLjYzNDk2MDUyOTg5ODk4MjQKKzEyLFNhdCA1IEZlYiAxMSwxMjcuNTE3NjUxNDQ5NDM5NjcsMTEzLjg1NDY0NDY1MDM4MDk1LDY2LjI3MjY3MDMxNDQ4ODU4LDEzNy4wMDMwMTc2MDA1MTk2MywxMzguMDk3NjY1NzYwMzc1ODYsMjIzMi40MDI4OTg3MjkyNywyNDI1Ljk0OTkxNzMyOTM2MDIsMTk4OC4yOTc2NTU1NDU3ODIsMTcyNy4wMzcxNjI0NjAyNzMsMjE1OS4yMzEzMDg4NjMyODM2LDQzOC40NzYzODEwMjU5MiwyNTYzLjI1MTk4NjA2NTUzNiw1MDcuMjgyMzQyODk3MDkwNywxMzQ2LjYzOTM2NDIwMDg2MTYsMTIwMy42NTAxMzgwMjkzNDc1LDI3NjMuMDg0MjY0MzcyMjgzLDIwMDEuNzQ1NDQ5MjQ0MzI1Myw1NjIuOTY1MDU5MzM5Nzc1OCwxNjM4LjQ4Mzg4NjA3NDgzOTEsMTA5MS4xODQ0Mzg5NzE0NTg4LDE2MTIuMDIxNzQ5OTYyNTI3OCwxNzkwLjEwOTI5NDE3NTUxNSwxNTkyLjQ2NDU4MzU2OTIwMDgsMzYyOS45ODg1NjI1NDIxNzU3LDIzMS40OTA2NDM5Nzg1MTIzLDIuODk4NDYyMzc5ODQ4NDIxCisxMyxTdW4gNiBGZWIgMTEsMTM5LjExMDQ0MzQ0MDMxMjIyLDEyNC4yMDUzMTUzMDM2MTEzNCw3Mi4yOTc2MDMxMjEwNjY4MSwxNDkuNDU4MTM2MzAwNjUwMzgsMTUwLjY1MjMwMDMxNzkyODQ4LDI0MzUuMzUzNDg3NTM1MDEzMywyNjQ2LjQ5NjExMTkzMjI2NjYsMjE2OS4wNTYzMjYwMDk2OTksMTg4NC4wNDQzMDg5Nzk0OTEyLDIzNTUuNTI5Nzc1MzA1NDQ4Myw0NzguMzM4ODI2ODk0MTI2MSwyNzk2LjI4MDQ4NjQ4NzkzMSw1NTMuNDAwMDI2MzMxNTMwMiwxNDY5LjA2NDA2MjczMDQ3MDYsMTMxMy4wNzU1MDQwMTg3MTMsMzAxNC4yNzk3NzE1NTEzMTU3LDIxODMuNzI2Njc1NzQ5MDAzMyw2MTQuMTQ0OTI5Mzk1OTg0NiwxNzg3LjQ0MDU0MTUzMjAxMjMsMTE5MC4zODU0MDUxMTkxODI1LDE3NTguNTcyNjk4OTQ2MTQ4NCwxOTUyLjg1MDQwODQ2Mzc4MDcsMTczNy4yMzc1NjU2NjQ2OTUsMzk1OS45OTU0NDI4MTY5NjY3LDI1Mi41MzU3NTMwNTE0MzIxMiwzLjE2MTk2NTI4MzgwNzM2NzcKKzE0LE1vbiA3IEZlYiAxMSwxNTAuNzAzMjgxODAyNDQ1NDcsMTM0LjU1NjAyNzM1OTYwNzE2LDc4LjMyMjU2MDAyNzQyNDUzLDE2MS45MTMzMDQ4MjEzNTU1NSwxNjMuMjA2OTg1MDk0MTE5NzIsMjYzOC4zMDQ4ODgxNDQ3MzYsMjg2Ny4wNDMxODg3MjE3MTcsMjM0OS44MTU3MTk1MDk3NDQsMjA0MS4wNTIwODM1Mjg1NTEsMjU1MS44MjkwMjY5NDMwNDk1LDUxOC4yMDE0MzIyMTI0MzQ2LDMwMjkuMzA5OTE5MDI2MTkyMyw1OTkuNTE3ODk0MjM3MDcyNCwxNTkxLjQ4OTI1MDk1OTg1MzMsMTQyMi41MDEzMDc3MTA0MTgsMzI2NS40NzYyODM1MTQzODUsMjM2NS43MDg2MzAxODAwNDQsNjY1LjMyNTAwNDE3MjA4MzMsMTkzNi4zOTc3OTI4MTY5OTksMTI4OS41ODY3NjgwNzE1NjQ0LDE5MDUuMTI0MjM0MTM0NzM3NCwyMTE1LjU5MjE3MzcxNzgwNTUsMTg4Mi4wMTExMjY4NTMyNzU4LDQyOTAuMDAzNjQzMTIxOTE4LDI3My41ODA5NDYzMDQ5NTY1NywzLjQyNTQ2OTI0MTc4MDAzOQorMTUsVHVlIDggRmViIDExLDE2Mi4yOTYxNjY1MzYwMjQ5NywxNDQuOTA2NzgwODE4NTM0MDMsODQuMzQ3NTQxMDMzNjU4MDMsMTc0LjM2ODUyMzE2MjgzNDUyLDE3NS43NjE3MjAwODkxNTA0NiwyODQxLjI1NzEwMDU2MTY4NCwzMDg3LjU5MTE0NzcwMTIzODIsMjUzMC41NzU4MzYwNDg4MDg1LDIxOTguMDYwNDg2MTA5OTY2LDI3NDguMTI5MDYzNzc5MjI3LDU1OC4wNjQxOTY5ODE0ODMzLDMyNjIuMzQwMjgzNjg0MDQ4Nyw2NDUuNjM1OTQ2NjE0NDU1MywxNzEzLjkxNDkyODg5MDk2ODQsMTUzMS45Mjc1NDkxMDYyMTMsMzUxNi42NzM4MDAyNjU1MTM0LDI1NDcuNjkxMzEyNTQwMzU4NSw3MTYuNTA1MjgzNjY4ODkwNSwyMDg1LjM1NTYzOTkzMjE4MjQsMTM4OC43ODg1Mjc4MzAxOTE1LDIwNTEuNjc2MzU1NTMwNjM5MywyMjc4LjMzNDU4OTk0MDE5MywyMDI2Ljc4NTI2NzEzNzI1OTYsNDYyMC4wMTMxNjM0NjIzMTMsMjk0LjYyNjIyMzczOTQyMjQsMy42ODg5NzQyNTM3NzA2NQorMTYsV2VkIDkgRmViIDExLDE3My44ODkwOTc2NDEyMzYxMywxNTUuMjU3NTc1NjgwNTU3NTUsOTAuMzcyNTQ2MTM5ODYzNzcsMTg2LjgyMzc5MTMyNTI4NjU1LDE4OC4zMTY1MDUzMDMyMjE2NSwzMDQ0LjIxMDEyNDc4OTEwNSwzMzA4LjEzOTk4ODg3NDM2MDQsMjcxMS4zMzY2NzU2Mjk3ODM3LDIzNTUuMDY5NTE2NzI2MjQ1NiwyOTQ0LjQyOTg4NTgxNzEyMzIsNTk3LjkyNzEyMTIwMTkwOTksMzQ5NS4zNzE1ODA0NjUyMjg0LDY5MS43NTQxODM0NjQ0MTYzLDE4MzYuMzQxMDk2NTI1Nzc0NCwxNjQxLjM1NDIyODIwNzg0OTIsMzc2Ny44NzIzMjE4MDg3MTcsMjcyOS42NzQ3MjI4MzI4NTksNzY3LjY4NTc2Nzg4NzIyNDksMjIzNC4zMTQwODI4Nzk5NDY1LDE0ODcuOTkwNjg0Mzk2NjUxNywyMTk4LjIyOTA2MzEzNjE5OSwyNDQxLjA3NzY1NzEzMzU0OCwyMTcxLjU1OTk4NjUxODk2Myw0OTUwLjAyNDAwMzg0MzQyOSwzMTUuNjcxNTg1MzU1MTY2MjYsMy45NTI0ODAzMTk3ODM0MTcKKzE3LFRodSAxMCBGZWIgMTEsMTg1LjQ4MjA3NTExODI2NDQ1LDE2NS42MDg0MTE5NDU4NDMzNiw5Ni4zOTc1NzUzNDYxMzgxNSwxOTkuMjc5MTA5MzA4OTEwOTMsMjAwLjg3MTM0MDczNjUzNDEsMzI0Ny4xNjM5NjA4MzAyNDg1LDM1MjguNjg5NzEyMjQ0NjExLDI4OTIuMDk4MjM4MjU1NTY2MiwyNTEyLjA3OTE3NTM3OTkwNTMsMzE0MC43MzE0OTMwNTk4Nzk1LDYzNy43OTAyMDQ4NzQzNTI0LDM3MjguNDAzODA5MzczNDU5NCw3MzcuODcyNjA0Nzg3Njk0MSwxOTU4Ljc2Nzc1Mzg2NjIzMTUsMTc1MC43ODEzNDUwMTcwNzcyLDQwMTkuMDcxODQ4MTQ4MDE3NiwyOTExLjY1ODg2MTA2MDQ1Nyw4MTguODY2NDU2ODI3OTA1OCwyMzgzLjI3MzEyMTY2MjY3NSwxNTg3LjE5MzIzNzc3MjUzMTgsMjM0NC43ODIzNTY5NTM3NjM2LDI2MDMuODIxMzc1MzAwNDc0MywyMzE2LjMzNTI4NTAwMDcwMiw1MjgwLjAzNjE2NDI3MDU0NiwzMzYuNzE3MDMxMTUyNTI1MDcsNC4yMTU5ODc0Mzk4MjI1NTgKKzE4LEZyaSAxMSBGZWIgMTEsMTk3LjA3NTA5ODk2NzI5NTQyLDE3NS45NTkyODk2MTQ1NTY5NSwxMDIuNDIyNjI4NjUyNTc3NTQsMjExLjczNDQ3NzExMzkwNjgyLDIxMy40MjYyMjYzODkyODg3MywzNDUwLjExODYwODY4ODM1ODYsMzc0OS4yNDAzMTc4MTU1MiwzMDcyLjg2MDUyMzkyOTA0NCwyNjY5LjA4OTQ2MjA3MzQ1NCwzMzM3LjAzMzg4NTUxMDYzMzQsNjc3LjY1MzQ0Nzk5OTQ0ODMsMzk2MS40MzY5NzA0MTI0NzEsNzgzLjk5MTIxMDU4NTAyNTgsMjA4MS4xOTQ5MDA5MTQyOTcyLDE4NjAuMjA4ODk5NTM1NjQ4Miw0MjcwLjI3MjM3OTI4NzQzMSwzMDkzLjY0MzcyNzIyNjA2Myw4NzAuMDQ3MzUwNDkxNzUxOSwyNTMyLjIzMjc1NjI4Mjc0OTUsMTY4Ni4zOTYxODc5NTk0MTksMjQ5MS4zMzYyMzY5ODU2NzQsMjc2Ni41NjU3NDQ0NDM1NzMzLDI0NjEuMTExMTYyNTg0NzkzNCw1NjEwLjA0OTY0NDc0ODk0NywzNTcuNzYyNTYxMTMxODM1MzUsNC40Nzk0OTU2MTM4OTIyODQKKzE5LFNhdCAxMiBGZWIgMTEsMjA4LjY2ODE2OTE4ODUxNDYsMTg2LjMxMDIwODY4Njg2NDEyLDEwOC40NDc3MDYwNTkyNzgzOSwyMjQuMTg5ODk0NzQwNDczNTYsMjI1Ljk4MTE2MjI2MTY4NjQ4LDM2NTMuMDc0MDY4MzY2Njg0NSwzOTY5Ljc5MTgwNTU5MDYxNiwzMjUzLjYyMzUzMjY1MzExMjgsMjgyNi4xMDAzNzY4MDk0MDc0LDM1MzMuMzM3MDYzMTcyNTI4LDcxNy41MTY4NTA1Nzc4MzYxLDQxOTQuNDcxMDYzNTg1OTkyLDgzMC4xMTAwMDA4NTcxNDk5LDIyMDMuNjIyNTM3NjcxOTI5NCwxOTY5LjYzNjg5MTc2NTMxMzUsNDUyMS40NzM5MTUyMzA5Nzg1LDMyNzUuNjI5MzIxMzMyNTkwNyw5MjEuMjI4NDQ4ODc5NTgyMywyNjgxLjE5Mjk4Njc0MjU1NDcsMTc4NS41OTk1MzQ5NTg5MDEsMjYzNy44OTA3MDMyMzQyNzgsMjkyOS4zMTA3NjQ1NjU0NTIyLDI2MDUuODg3NjE5MjczNTUyNCw1OTQwLjA2NDQ0NTI4MzkxMSwzNzguODA4MTc1MjkzNDMzODYsNC43NDMwMDQ4NDE5OTY4MTYKKzIwLFN1biAxMyBGZWIgMTEsMjIwLjI2MTI4NTc4MjEwNzQyLDE5Ni42NjExNjkxNjI5MzAzMiwxMTQuNDcyODA3NTY2MzM3MDUsMjM2LjY0NTM2MjE4ODgxMDQ4LDIzOC41MzYxNDgzNTM5MjgzLDM4NTYuMDMwMzM5ODY4NDcyMyw0MTkwLjM0NDE3NTU3MzQyOCwzNDM0LjM4NzI2NDQzMDY2MjUsMjk4My4xMTE5MTk1OTAyNzY2LDM3MjkuNjQxMDI2MDQ4NzA0Niw3NTcuMzgwNDEyNjEwMTUzMyw0NDI3LjUwNjA4ODg5Nzc1Miw4NzYuMjI4OTc1NjA0ODA0MSwyMzI2LjA1MDY2NDE0MTA5MDIsMjA3OS4wNjUzMjE3MDc4MjMsNDc3Mi42NzY0NTU5ODI2ODMsMzQ1Ny42MTU2NDMzODI5NTA2LDk3Mi40MDk3NTE5OTIyMTU1LDI4MzAuMTUzODEzMDQ0NDc0LDE4ODQuODAzMjc4NzcyNTY0NSwyNzg0LjQ0NTc1NTcwMTkyLDMwOTIuMDU2NDM1NjY4NzEzNywyNzUwLjY2NDY1NTA2OTI5OSw2MjcwLjA4MDU2NTg4MDcxNiwzOTkuODUzODczNjM3NjU3NjcsNS4wMDY1MTUxMjQxNDAzNjkKKzIxLE1vbiAxNCBGZWIgMTEsMjMxLjg1NDQ0ODc0ODI1OTI0LDIwNy4wMTIxNzEwNDI5MjEzNSwxMjAuNDk3OTMzMTczODQ5OSwyNDkuMTAwODc5NDU5MTE2NzMsMjUxLjA5MTE4NDY2NjIxNDcsNDA1OC45ODc0MjMxOTY5NjksNDQxMC44OTc0Mjc3Njc0ODQsMzYxNS4xNTE3MTkyNjQ1ODUsMzE0MC4xMjQwOTA0MTg1NzM0LDM5MjUuOTQ1Nzc0MTQyMzAyLDc5Ny4yNDQxMzQwOTcwMzY5LDQ2NjAuNTQyMDQ2MzUxNDc1LDkyMi4zNDgxMzQ4Mjg3MjU4LDI0NDguNDc5MjgwMzIzNzM0NywyMTg4LjQ5NDE4OTM2NDkyNjYsNTAyMy44ODAwMDE1NDY1NTksMzYzOS42MDI2OTMzODAwNTQsMTAyMy41OTEyNTk4MzA0NzA2LDI5NzkuMTE1MjM1MTkwODg4LDE5ODQuMDA3NDE5NDAxOTk2NSwyOTMxLjAwMTM5NDM5MDk0MiwzMjU0LjgwMjc1Nzc1NTk2MSwyODk1LjQ0MjI2OTk3NDM0MzYsNjYwMC4wOTgwMDY1NDQ2NDMsNDIwLjg5OTY1NjE2NDg0MjksNS4yNzAwMjY0NjAzMjcxNTcKKzIyLFR1ZSAxNSBGZWIgMTEsMjQzLjQ0NzY1ODA4NzE1NTU2LDIxNy4zNjMyMTQzMjcwMDI1LDEyNi41MjMwODI4ODE5MTMzMywyNjEuNTU2NDQ2NTUxNTkxNjUsMjYzLjY0NjI3MTE5ODc0NjcsNDI2MS45NDUzMTgzNTU0MjMsNDYzMS40NTE1NjIxNzYzMTEsMzc5NS45MTY4OTcxNTc3NzEsMzI5Ny4xMzY4ODkyOTY4MDUsNDEyMi4yNTEzMDc0NTY0NjIsODM3LjEwODAxNTAzOTEyNTIsNDg5My41Nzg5MzU5NTA4ODgsOTY4LjQ2NzQ3ODUyOTY1MzIsMjU3MC45MDgzODYyMjE4MjI2LDIyOTcuOTIzNDk0NzM4Mzc1LDUyNzUuMDg0NTUxOTI2NjIxLDM4MjEuNTkwNDcxMzI2ODEyMywxMDc0Ljc3Mjk3MjM5NTE2NTcsMzEyOC4wNzcyNTMxODQxODIsMjA4My4yMTE5NTY4NDg3ODQsMzA3Ny41NTc2MTkzMDM2OSwzNDE3LjU0OTczMDgyOTc5NjgsMzA0MC4yMjA0NjM5OTEwMDU1LDY5MzAuMTE2NzY3MjgwOTcsNDQxLjk0NTUyMjg3NTMyNjcsNS41MzM1Mzg4NTA1NjE0MDEKKzIzLFdlZCAxNiBGZWIgMTEsMjU1LjA0MDkxMzc5ODk4MjIyLDIyNy43MTQyOTkwMTUzMzk4LDEzMi41NDgyNTY2OTA2MjM5LDI3NC4wMTIwNjM0NjY0MzQ5NCwyNzYuMjAxNDA3OTUxNzI1Niw0NDY0LjkwNDAyNTM0NzA4NCw0ODUyLjAwNjU3ODgwMzQ0NiwzOTc2LjY4Mjc5ODExMzExOTYsMzQ1NC4xNTAzMTYyMjc0OTQ0LDQzMTguNTU3NjI1OTk0MzMsODc2Ljk3MjA1NTQzNzA1NzIsNTEyNi42MTY3NTc2OTk3MywxMDE0LjU4NzAwNjcwODMyNTQsMjY5My4zMzc5ODE4MzczMTU1LDI0MDcuMzUzMjM3ODI5OTI0LDU1MjYuMjkwMTA3MTI2OTAyLDQwMDMuNTc4OTc3MjI2MTQzLDExMjUuOTU0ODg5Njg3MTIyLDMyNzcuMDM5ODY3MDI2NzQzNywyMTgyLjQxNjg5MTExNDUxODQsMzIyNC4xMTQ0MzA0NDI1MTUsMzU4MC4yOTczNTQ4OTI4Mjg1LDMxODQuOTk5MjM3MTIxNjA1LDcyNjAuMTM2ODQ4MDk0OTksNDYyLjk5MTQ3Mzc2OTQ0NjEsNS43OTcwNTIyOTQ4NDczMTM1CisyNCxUaHUgMTcgRmViIDExLDI2Ni42MzQyMTU4ODM5MjQ0LDIzOC4wNjU0MjUxMDgwOTg2LDEzOC41NzM0NTQ2MDAwNzc4NywyODYuNDY3NzMwMjAzODQ1MywyODguNzU2NTk0OTI1MzUxODYsNDY2Ny44NjM1NDQxNzUxOTEsNTA3Mi41NjI0Nzc2NTI0MDksNDE1Ny40NDk0MjIxMzM1MTYsMzYxMS4xNjQzNzEyMTMxNDQ1LDQ1MTQuODY0NzI5NzU5MDM5LDkxNi44MzYyNTUyOTE0NjkxLDUzNTkuNjU1NTExNjAxNzIxLDEwNjAuNzA2NzE5MzY1NDc5LDI4MTUuNzY4MDY3MTcyMTY5NiwyNTE2Ljc4MzQxODY0MTMxODMsNTc3Ny40OTY2NjcxNTE0MSw0MTg1LjU2ODIxMTA4MDk1LDExNzcuMTM3MDExNzA3MTU2NSwzNDI2LjAwMzA3NjcyMDk0OSwyMjgxLjYyMjIyMjIwMDc4MTQsMzM3MC42NzE4Mjc4MDk3NTU1LDM3NDMuMDQ1NjI5OTQ3NjU4LDMzMjkuNzc4NTg5MzY4NDUzLDc1OTAuMTU4MjQ4OTkxOTY2NSw0ODQuMDM3NTA4ODQ3NTM3MSw2LjA2MDU2Njc5MzE4OTExMDUKKzI1LEZyaSAxOCBGZWIgMTEsMjc4LjIyNzU2NDM0MjE2Nzc0LDI0OC40MTY1OTI2MDU0NDQ2LDE0NC41OTg2NzY2MTAzNzE2LDI5OC45MjM0NDY3NjQwMjIyMywzMDEuMzExODMyMTE5ODI2NCw0ODcwLjgyMzg3NDg0MzAwMiw1MjkzLjExOTI1ODcyNjczMiw0MzM4LjIxNjc2OTIyMTg1NDUsMzc2OC4xNzkwNTQyNTYyNzE3LDQ3MTEuMTcyNjE4NzUzNzMzLDk1Ni43MDA2MTQ2MDI5OTk0LDU1OTIuNjk1MTk3NjYwNTksMTEwNi44MjY2MTY1MDE4NTIyLDI5MzguMTk4NjQyMjI4MzQzNSwyNjI2LjIxNDAzNzE3NDMxMiw2MDI4LjcwNDIzMjAwNDE2Niw0MzY3LjU1ODE3Mjg5NDE0NSwxMjI4LjMxOTMzODQ1NjA4ODksMzU3NC45NjY4ODIyNjkxODY1LDIzODAuODI3OTUwMTA5MTYwNiwzNTE3LjIyOTgxMTQwNzc1NywzOTA1Ljc5NDU1NTk5Njg5MDcsMzQ3NC41NTg1MjA3MzM4Njg2LDc5MjAuMTgwOTY5OTc3MTg3NSw1MDUuMDgzNjI4MTA5OTM2OCw2LjMyNDA4MjM0NTU5MTAwOQorMjYsU2F0IDE5IEZlYiAxMSwyODkuODIwOTU5MTczODk3NiwyNTguNzY3ODAxNTA3NTQzMzcsMTUwLjYyMzkyMjcyMTYwMTY0LDMxMS4zNzkyMTMxNDcxNjUxNiwzMTMuODY3MTE5NTM1MzUwMSw1MDczLjc4NTAxNzM1Mzc1OCw1NTEzLjY3NjkyMjAyOTk0Miw0NTE4Ljk4NDgzOTM4MTAyNCwzOTI1LjE5NDM2NTM1OTM4NjcsNDkwNy40ODEyOTI5ODE1NTMsOTk2LjU2NTEzMzM3MjI4NTksNTgyNS43MzU4MTU4ODAwNjksMTE1Mi45NDY2OTgxMTgxODI0LDMwNjAuNjI5NzA3MDA3Nzk3NiwyNzM1LjY0NTA5MzQzMDY1NDUsNjI3OS45MTI4MDE2ODkxOTUsNDU0OS41NDg4NjI2Njg2NDMsMTI3OS41MDE4Njk5MzQ3MzcsMzcyMy45MzEyODM2NzM4MzcsMjQ4MC4wMzQwNzQ4NDEyNDczLDM2NjMuNzg4MzgxMjM4ODY1LDQwNjguNTQ0MTMzMDQzMTI5NSwzNjE5LjMzOTAzMTIyMDE2OCw4MjUwLjIwNTAxMTA1NTkzMiw1MjYuMTI5ODMxNTU2OTgxOSw2LjU4NzU5ODk1MjA1NzIyMQorMjcsU3VuIDIwIEZlYiAxMSwzMDEuNDE0NDAwMzc5Mjk5NSwyNjkuMTE5MDUxODE0NTYwMzUsMTU2LjY0OTE5MjkzMzg2NDMzLDMyMy44MzUwMjkzNTM0NzMyLDMyNi40MjI0NTcxNzIxMjM4Nyw1Mjc2Ljc0Njk3MTcxMDcxLDU3MzQuMjM1NDY3NTY1NTcsNDY5OS43NTM2MzI2MTM5Miw0MDgyLjIxMDMwNDUyNTAwMiw1MTAzLjc5MDc1MjQ0NTY0MywxMDM2LjQyOTgxMTU5OTk2NTcsNjA1OC43NzczNjYyNjM4ODUsMTE5OS4wNjY5NjQyMTUyMDg0LDMxODMuMDYxMjYxNTEyNDg5LDI4NDUuMDc2NTg3NDEyMDk4LDY1MzEuMTIyMzc2MjEwNTExLDQ3MzEuNTQwMjgwNDA3MzU3LDEzMzAuNjg0NjA2MTQzOTIwNywzODcyLjg5NjI4MDkzNzI4NDIsMjU3OS4yNDA1OTYzOTg2MjUzLDM4MTAuMzQ3NTM3MzA1NDI1LDQyMzEuMjk0MzYxMDg4OTc5LDM3NjQuMTIwMTIwODI5NjY4LDg1ODAuMjMwMzcyMjMzNDgyLDU0Ny4xNzYxMTkxODkwMDk1LDYuODUxMTE2NjEyNTkxOTcxCisyOCxNb24gMjEgRmViIDExLDMxMy4wMDc4ODc5NTg1NTg5NywyNzkuNDcwMzQzNTI2NjYxNywxNjIuNjc0NDg3MjQ3MjU2MDgsMzM2LjI5MDg5NTM4MzE0NTY1LDMzOC45Nzc4NDUwMzAzNDg4LDU0NzkuNzA5NzM3OTE3MTAzLDU5NTQuNzk0ODk1MzM3MTQ1LDQ4ODAuNTIzMTQ4OTIzNDQsNDIzOS4yMjY4NzE3NTU2MzEsNTMwMC4xMDA5OTcxNDkxNCwxMDc2LjI5NDY0OTI4NjY3OCw2MjkxLjgxOTg0ODgxNTc3LDEyNDUuMTg3NDE0NzkzNjY4LDMzMDUuNDkzMzA1NzQ0MzgsMjk1NC41MDg1MTkxMjAzOTQsNjc4Mi4zMzI5NTU1NzIxMzYsNDkxMy41MzI0MjYxMTMxOTksMTM4MS44Njc1NDcwODQ0NTk2LDQwMjEuODYxODc0MDYxOTEzLDI2NzguNDQ3NTE0NzgyODg0LDM5NTYuOTA3Mjc5NjA5NzgyNiw0Mzk0LjA0NTI0MDEzNzA0NCwzOTA4LjkwMTc4OTU2NDY4NTcsODkxMC4yNTcwNTM1MTUxMiw1NjguMjIyNDkxMDA2MzU1OCw3LjExNDYzNTMyNzE5OTQ3CisyOSxUdWUgMjIgRmViIDExLDMyNC42MDE0MjE5MTE4NjE0LDI4OS44MjE2NzY2NDQwMTI1LDE2OC42OTk4MDU2NjE4NzMyNiwzNDguNzQ2ODExMjM2MzgyLDM1MS41MzMyODMxMTAyMjU0LDU2ODIuNjczMzE1OTc2MTgsNjE3NS4zNTUyMDUzNDgxOTUsNTA2MS4yOTMzODgzMTI0NjcsNDM5Ni4yNDQwNjcwNTM3ODMsNTQ5Ni40MTIwMjcwOTUxODUsMTExNi4xNTk2NDY0MzMwNTk2LDY1MjQuODYzMjYzNTM5NDQ1LDEyOTEuMzA4MDQ5ODU0Mjk4NCwzNDI3LjkyNTgzOTcwNTQyNzMsMzA2My45NDA4ODg1NTcyOTA3LDcwMzMuNTQ0NTM5Nzc4MDg4LDUwOTUuNTI1Mjk5Nzg5MDgsMTQzMy4wNTA2OTI3NTcxNzA1LDQxNzAuODI4MDYzMDUwMTA1LDI3NzcuNjU0ODI5OTk1NjA5LDQxMDMuNDY3NjA4MTU0MjgxLDQ1NTYuNzk2NzcwMTg5OTI0LDQwNTMuNjg0MDM3NDI3NTM1Nyw5MjQwLjI4NTA1NDkwNjExOSw1ODkuMjY4OTQ3MDA5MzU3Niw3LjM3ODE1NTA5NTg4MzkzNQorMzAsV2VkIDIzIEZlYiAxMSwzMzYuMTk1MDAyMjM5MzkyNCwzMDAuMTczMDUxMTY2Nzc4NiwxNzQuNzI1MTQ4MTc3ODEyMzQsMzYxLjIwMjc3NjkxMzM4MTMsMzY0LjA4ODc3MTQxMTk1NDksNTg4NS42Mzc3MDU4OTExOTUsNjM5NS45MTYzOTc2MDIyNSw1MjQyLjA2NDM1MDc4Mzg5OSw0NTUzLjI2MTg5MDQyMTk3Miw1NjkyLjcyMzg0MjI4NjkyLDExNTYuMDI0ODAzMDM5NzQ5LDY3NTcuOTA3NjEwNDM4NjQ0LDEzMzcuNDI4ODY5Mzk3ODM3OCwzNTUwLjM1ODg2MzM5NzU4ODcsMzE3My4zNzM2OTU3MjQ1NDA1LDcyODQuNzU3MTI4ODMyMzg1LDUyNzcuNTE4OTAxNDM3OTEzLDE0ODQuMjM0MDQzMTYyODczOCw0MzE5Ljc5NDg0NzkwNDI0NSwyODc2Ljg2MjU0MjAzODM4OSw0MjUwLjAyODUyMjk0MTI2Niw0NzE5LjU0ODk1MTI1MDIyNiw0MTk4LjQ2Njg2NDQyMDUzNiw5NTcwLjMxNDM3NjQxMTc2NSw2MTAuMzE1NDg3MTk4MzUyLDcuNjQxNjc1OTE4NjQ5NTgzCiszMSxUaHUgMjQgRmViIDExLDM0Ny43ODg2Mjg5NDEzMzc2NiwzMTAuNTI0NDY3MDk1MTI1NiwxODAuNzUwNTE0Nzk1MTY5NywzNzMuNjU4NzkyNDE0MzQzMSwzNzYuNjQ0MzA5OTM1NzM4LDYwODguNjAyOTA3NjY1MzkzLDY2MTYuNDc4NDcyMTAyODM5LDU0MjIuODM2MDM2MzQwNjI2LDQ3MTAuMjgwMzQxODYyNzEyLDU4ODkuMDM2NDQyNzI3NDg4LDExOTUuODkwMTE5MTA3MzgzNyw2OTkwLjk1Mjg4OTUxNzA5OCwxMzgzLjU0OTg3MzQyNTAyNDUsMzY3Mi43OTIzNzY4MjI4MjU2LDMyODIuODA2OTQwNjIzODk1Niw3NTM1Ljk3MDcyMjczOTA0OSw1NDU5LjUxMzIzMTA2MjYwOCwxNTM1LjQxNzU5ODMwMjM4ODMsNDQ2OC43NjIyMjg2MjY3MTYsMjk3Ni4wNzA2NTA5MTI4MTA0LDQzOTYuNTkwMDIzOTczMDg0LDQ4ODIuMzAxNzgzMzIwNTU2LDQzNDMuMjUwMjcwNTQ2MDA0LDk5MDAuMzQ1MDE4MDM3MzM4LDYzMS4zNjIxMTE1NzM2NzU1LDcuOTA1MTk3Nzk1NTAwNjMxCiszMixGcmkgMjUgRmViIDExLDM1OS4zODIzMDIwMTc4ODIzNSwzMjAuODc1OTI0NDI5MjE5MTQsMTg2Ljc3NTkwNTUxNDA0MTcsMzg2LjExNDg1NzczOTQ2NjQ2LDM4OS4xOTk4OTg2ODE3NzU2LDYyOTEuNTY4OTIxMzAyMDIzLDY4MzcuMDQxNDI4ODUzNDg4NSw1NjAzLjYwODQ0NDk4NTU0MjUsNDg2Ny4yOTk0MjEzNzg1MTQsNjA4NS4zNDk4Mjg0MjAwMjksMTIzNS43NTU1OTQ2MzY2MDE3LDcyMjMuOTk5MTAwNzc4NTI5LDE0MjkuNjcxMDYxOTM2NTk2NywzNzk1LjIyNjM3OTk4MzA5NSwzMzkyLjI0MDYyMzI1NzEwNTcsNzc4Ny4xODUzMjE1MDIwOTcsNTY0MS41MDgyODg2NjYwNzcsMTU4Ni42MDEzNTgxNzY1MzI0LDQ2MTcuNzMwMjA1MjE5OTAyLDMwNzUuMjc5MTU2NjIwNDYxNCw0NTQzLjE1MjExMTI1MjA3OCw1MDQ1LjA1NTI2NjQwMzUxNSw0NDg4LjAzNDI1NTgwNjI1MywxMDIzMC4zNzY5Nzk3ODgxMTYsNjUyLjQwODgyMDEzNTY2NDgsOC4xNjg3MjA3MjY0NDEyOTUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvSW5vY3VsYXRpb25UZXN0X1JLX1JlZmVyZW5jZS9IdW1hblBvcHVsYXRpb25Nb2RlbC9odW1hbi9Db3VudF8wLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvSW5vY3VsYXRpb25UZXN0X1JLX1JlZmVyZW5jZS9IdW1hblBvcHVsYXRpb25Nb2RlbC9odW1hbi9Db3VudF8wLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYzI0NDAxCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Jbm9jdWxhdGlvblRlc3RfUktfUmVmZXJlbmNlL0h1bWFuUG9wdWxhdGlvbk1vZGVsL2h1bWFuL0NvdW50XzAuY3N2CkBAIC0wLDAgKzEgQEAKK2l0ZXJhdGlvbix0aW1lLApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Jbm9jdWxhdGlvblRlc3RfUktfUmVmZXJlbmNlL0h1bWFuUG9wdWxhdGlvbk1vZGVsL2h1bWFuL0NvdW50XzEuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Jbm9jdWxhdGlvblRlc3RfUktfUmVmZXJlbmNlL0h1bWFuUG9wdWxhdGlvbk1vZGVsL2h1bWFuL0NvdW50XzEuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJjMjQ0MDEKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0lub2N1bGF0aW9uVGVzdF9SS19SZWZlcmVuY2UvSHVtYW5Qb3B1bGF0aW9uTW9kZWwvaHVtYW4vQ291bnRfMS5jc3YKQEAgLTAsMCArMSBAQAoraXRlcmF0aW9uLHRpbWUsCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0lub2N1bGF0aW9uVGVzdF9SS19SZWZlcmVuY2UvSHVtYW5Qb3B1bGF0aW9uTW9kZWwvaHVtYW4vQ291bnRfMi5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0lub2N1bGF0aW9uVGVzdF9SS19SZWZlcmVuY2UvSHVtYW5Qb3B1bGF0aW9uTW9kZWwvaHVtYW4vQ291bnRfMi5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjNhMTAwNgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvSW5vY3VsYXRpb25UZXN0X1JLX1JlZmVyZW5jZS9IdW1hblBvcHVsYXRpb25Nb2RlbC9odW1hbi9Db3VudF8yLmNzdgpAQCAtMCwwICsxLDMzIEBACitpdGVyYXRpb24sdGltZSxFRy1GUkctRzIxMDAwMSxFRy1GUkctRzIxMDAwMixFRy1GUkctRzIxMDAwMyxFRy1GUkctRzIxMDAwNCxFRy1GUkctRzIxMDAwNSxFRy1MT0UtRzI0MDAwMSxFRy1MT0UtRzI0MDAwMixFRy1MT0UtRzI0MDAwMyxFRy1MT0UtRzI0MDAwNCxFRy1MT0UtRzI0MDAwNSxFRy1MT0UtRzI0MDAwNixFRy1MT0UtRzI0MDAwNyxFRy1MT0UtRzI0MDAwOCxFRy1MT0UtRzI0MDAwOSxFRy1VUEUtRzI5MDAwMSxFRy1VUEUtRzI5MDAwMixFRy1VUEUtRzI5MDAwMyxFRy1VUEUtRzI5MDAwNCxFRy1VUEUtRzI5MDAwNSxFRy1VUEUtRzI5MDAwNixFRy1VUEUtRzI5MDAwNyxFRy1VUEUtRzI5MDAwOCxFRy1VUkctRzMwMDAwMSxFRy1VUkctRzMwMDAwMixFRy1VUkctRzMwMDAwMyxFRy1VUkctRzMwMDAwNAorMSxUdWUgMjUgSmFuIDExLDI5NzIzNy40MDM0NTM4MDE1LDI2NTM4OS42MDM0MTg1NzE3NiwxNTQ0NzguMzUwNDExMjY3MjUsMzE5MzQ3LjMyNzYzNjkxMzE2LDMyMTg5OC44OTg5MTM3NzQyLDUyMDM2MjEuODc5MzEzODk1LDU2NTQ3NzAuNTA1NDEzOTEzLDQ2MzQ2MjQuNTA2NTY5MDksNDAyNTYzOS4wODYwNjM3MDUsNTAzMzA2Mi40ODUxMzQ4MzksMTAyMjA2Ni45ODA0NTc1MjUsNTk3NDgxNC45MDY2MDkyOSwxMTgyNDUwLjMwOTQ4MTA5MzQsMzEzODk1MC40MzkwNDkyMDM0LDI4MDU2NDkuNTUyMjYyMjM5Niw2NDQwNjE0LjE2NTQxNzgyMiw0NjY1OTcwLjY1NTQwMTg0MiwxMzEyMjQzLjk5NTgwMjU1NDgsMzgxOTIyNS43MzM1NTE3MTgzLDI1NDM0OTcuNTEzMDI5OTQyLDM3NTc1NDMuNzg5NjEzMjk0LDQxNzI2NTcuMTM3NjY4NjQyNywzNzExOTU2Ljk5MjA4NjkwNDYsODQ2MTMyNS42NDg5MDMxMTcsNTM5NTkzLjM1OTQ5MTEyNDQsNjc1Ni4xNzM5MjU3NDI4NTM1CisyLFdlZCAyNiBKYW4gMTEsMjk3MjM4LjU5MjQwNTc5MywyNjUzOTAuNjY0OTc5MTA4NTUsMTU0NDc4Ljk2ODMyNTkwNDgsMzE5MzQ4LjYwNTAyODc3ODMsMzIxOTAwLjE4NjUxMTk0NDksNTIwMzY0Mi42OTM4NDMwNDMsNTY1NDc5My4xMjQ1NDExNyw0NjM0NjQzLjA0NTEwNDE5NCw0MDI1NjU1LjE4ODY1MjI1Myw1MDMzMDgyLjYxNzQyNTAzOCwxMDIyMDcxLjA2ODczMzYyMzUsNTk3NDgzOC44MDU5MTY3MTMsMTE4MjQ1NS4wMzkyOTE3OTEyLDMxMzg5NjIuOTk0ODc2MDcwNCwyODA1NjYwLjc3NDg4Mjg5Niw2NDQwNjM5LjkyNzkyNjAwOSw0NjY1OTg5LjMxOTMyMTc5NSwxMzEyMjQ5LjI0NDc4OTAzNTgsMzgxOTI0MS4wMTA0ODUyMDYzLDI1NDM1MDcuNjg3MDQwMzQzNCwzNzU3NTU4LjgxOTgxODUxMTYsNDE3MjY3My44MjgzMzA1NzQ2LDM3MTE5NzEuODM5OTQ0NTY3LDg0NjEzNTkuNDk0MjczNDEsNTM5NTk1LjUxNzg2ODg3OTYsNjc1Ni4yMDA5NTA0OTI2MDQ1CiszLFRodSAyNyBKYW4gMTEsMjk3MjM5Ljc4MTM2MjU0MDUsMjY1MzkxLjcyNjU0Mzg5MTYsMTU0NDc5LjU4NjI0MzAxMzk3LDMxOTM0OS44ODI0MjU3NTMwNSwzMjE5MDEuNDc0MTE1MjY2Miw1MjAzNjYzLjUwODQ1NTQ0OCw1NjU0ODE1Ljc0Mzc1ODkwODUsNDYzNDY2MS41ODM3MTM0NTIsNDAyNTY3MS4yOTEzMDUyMTMyLDUwMzMxMDIuNzQ5Nzk1Nzc1LDEwMjIwNzUuMTU3MDI2MDc1MSw1OTc0ODYyLjcwNTMxOTczNSwxMTgyNDU5Ljc2OTEyMTQwODUsMzEzODk3NS41NTA3NTMxNjIsMjgwNTY3MS45OTc1NDg0NDE0LDY0NDA2NjUuNjkwNTM3MjQ3LDQ2NjYwMDcuOTgzMzE2NCwxMzEyMjU0LjQ5Mzc5NjUxMzIsMzgxOTI1Ni4yODc0Nzk4MDMsMjU0MzUxNy44NjEwOTE0NDA1LDM3NTc1NzMuODUwMDgzODUxLDQxNzI2OTAuNTE5MDU5MjY5LDM3MTE5ODYuNjg3ODYxNjIyLDg0NjEzOTMuMzM5Nzc5MDc3LDUzOTU5Ny42NzYyNTUyNjc3LDY3NTYuMjI3OTc1MzUwNDU3Cis0LEZyaSAyOCBKYW4gMTEsMjk3MjQwLjk3MDMyNDA0MzgsMjY1MzkyLjc4ODExMjkyMDksMTU0NDgwLjIwNDE2MjU5NDcyLDMxOTM1MS4xNTk4Mjc4Mzc2LDMyMTkwMi43NjE3MjM3Mzc5LDUyMDM2ODQuMzIzMTUxMTEsNTY1NDgzOC4zNjMwNjcxMjMsNDYzNDY4MC4xMjIzOTY4NjQsNDAyNTY4Ny4zOTQwMjI1ODQsNTAzMzEyMi44ODIyNDcwMzgsMTAyMjA3OS4yNDUzMzQ4Nzk4LDU5NzQ4ODYuNjA0ODE4MzUyNSwxMTgyNDY0LjQ5ODk2OTk0NDQsMzEzODk4OC4xMDY2ODA0NzUsMjgwNTY4My4yMjAyNTg4NzU4LDY0NDA2OTEuNDUzMjUxNTMzLDQ2NjYwMjYuNjQ3Mzg1NjYxLDEzMTIyNTkuNzQyODI0OTg2MywzODE5MjcxLjU2NDUzNTUwNzUsMjU0MzUyOC4wMzUxODMyMzQsMzc1NzU4OC44ODA0MDkzMTIsNDE3MjcwNy4yMDk4NTQ3Mjc2LDM3MTIwMDEuNTM1ODM4MDY5LDg0NjE0MjcuMTg1NDIwMTI4LDUzOTU5OS44MzQ2NTAyODk1LDY3NTYuMjU1MDAwMzE2NDExCis1LFNhdCAyOSBKYW4gMTEsMjk3MjQyLjE1OTI5MDMwMzA3LDI2NTM5My44NDk2ODYxOTY0LDE1NDQ4MC44MjIwODQ2NDcxNywzMTkzNTIuNDM3MjM1MDMxNiwzMjE5MDQuMDQ5MzM3MzYsNTIwMzcwNS4xMzc5MzAwMzIsNTY1NDg2MC45ODI0NjU4MTMsNDYzNDY5OC42NjExNTQ0MzMsNDAyNTcwMy40OTY4MDQzNjYsNTAzMzE0My4wMTQ3Nzg4MzMsMTAyMjA4My4zMzM2NjAwMzc4LDU5NzQ5MTAuNTA0NDEyNTY5LDExODI0NjkuMjI4ODM3NCwzMTM5MDAwLjY2MjY1ODAxNSwyODA1Njk0LjQ0MzAxNDIwMiw2NDQwNzE3LjIxNjA2ODg3MSw0NjY2MDQ1LjMxMTUyOTU4MDUsMTMxMjI2NC45OTE4NzQ0NTYyLDM4MTkyODYuODQxNjUyMzIsMjU0MzUzOC4yMDkzMTU3MjIzLDM3NTc2MDMuOTEwNzk0ODk0Nyw0MTcyNzIzLjkwMDcxNjk0ODMsMzcxMjAxNi4zODM4NzM5MDgzLDg0NjE0NjEuMDMxMTk2NTYsNTM5NjAxLjk5MzA1Mzk0NDgsNjc1Ni4yODIwMjUzOTA0NjIKKzYsU3VuIDMwIEphbiAxMSwyOTcyNDMuMzQ4MjYxMzE4MywyNjUzOTQuOTExMjYzNzE4MywxNTQ0ODEuNDQwMDA5MTcxMywzMTkzNTMuNzE0NjQ3MzM1NCwzMjE5MDUuMzM2OTU2MTMyNTUsNTIwMzcyNS45NTI3OTIyMTIsNTY1NDg4My42MDE5NTQ5ODMsNDYzNDcxNy4xOTk5ODYxNTcsNDAyNTcxOS41OTk2NTA1NTk1LDUwMzMxNjMuMTQ3MzkxMTU3LDEwMjIwODcuNDIyMDAxNTQ5LDU5NzQ5MzQuNDA0MTAyMzg2LDExODI0NzMuOTU4NzIzNzc0NiwzMTM5MDEzLjIxODY4NTc3NzQsMjgwNTcwNS42NjU4MTQ0Miw2NDQwNzQyLjk3ODk4OTI2NCw0NjY2MDYzLjk3NTc0ODE1NSwxMzEyMjcwLjI0MDk0NDkyMTUsMzgxOTMwMi4xMTg4MzAyNDIsMjU0MzU0OC4zODM0ODg5MDg0LDM3NTc2MTguOTQxMjQwNTk4NCw0MTcyNzQwLjU5MTY0NTkzMzcsMzcxMjAzMS4yMzE5NjkxMzgsODQ2MTQ5NC44NzcxMDgzNzYsNTM5NjA0LjE1MTQ2NjIzMzUsNjc1Ni4zMDkwNTA1NzI2MTQKKzcsTW9uIDMxIEphbiAxMSwyOTcyNDQuNTM3MjM3MDg5MiwyNjUzOTUuOTcyODQ1NDg2NiwxNTQ0ODIuMDU3OTM2MTY3MjYsMzE5MzU0Ljk5MjA2NDc0ODgsMzIxOTA2LjYyNDU4MDA1NTQsNTIwMzc0Ni43Njc3Mzc2NTMsNTY1NDkwNi4yMjE1MzQ2Myw0NjM0NzM1LjczODg5MjAzNSw0MDI1NzM1LjcwMjU2MTE2NCw1MDMzMTgzLjI4MDA4NDAxMywxMDIyMDkxLjUxMDM1OTQxMzgsNTk3NDk1OC4zMDM4ODc4MDEsMTE4MjQ3OC42ODg2MjkwNjksMzEzOTAyNS43NzQ3NjM3NjM0LDI4MDU3MTYuODg4NjU5NTI4NSw2NDQwNzY4Ljc0MjAxMjcwMiw0NjY2MDgyLjY0MDA0MTM4OCwxMzEyMjc1LjQ5MDAzNjM4MzMsMzgxOTMxNy4zOTYwNjkyNzE1LDI1NDM1NTguNTU3NzAyNzkxLDM3NTc2MzMuOTcxNzQ2NDIzLDQxNzI3NTcuMjgyNjQxNjgzMiwzNzEyMDQ2LjA4MDEyMzc2Miw4NDYxNTI4LjcyMzE1NTU3OSw1Mzk2MDYuMzA5ODg3MTU2Miw2NzU2LjMzNjA3NTg2Mjg2NgorOCxUdWUgMSBGZWIgMTEsMjk3MjQ1LjcyNjIxNzYxNjA2LDI2NTM5Ny4wMzQ0MzE1MDEyMywxNTQ0ODIuNjc1ODY1NjM0ODcsMzE5MzU2LjI2OTQ4NzI3MTksMzIxOTA3LjkxMjIwOTEyOSw1MjAzNzY3LjU4Mjc2NjM1Myw1NjU0OTI4Ljg0MTIwNDc1Nyw0NjM0NzU0LjI3Nzg3MjA2OSw0MDI1NzUxLjgwNTUzNjE4MDMsNTAzMzIwMy40MTI4NTczOTgsMTAyMjA5NS41OTg3MzM2MzIsNTk3NDk4Mi4yMDM3Njg4MTUsMTE4MjQ4My40MTg1NTMyODMyLDMxMzkwMzguMzMwODkxOTc0MywyODA1NzI4LjExMTU0OTUyODMsNjQ0MDc5NC41MDUxMzkxOTksNDY2NjEwMS4zMDQ0MDkyNzcsMTMxMjI4MC43MzkxNDg4NDE1LDM4MTkzMzIuNjczMzY5NDExLDI1NDM1NjguNzMxOTU3MzcwNCwzNzU3NjQ5LjAwMjMxMjM3MSw0MTcyNzczLjk3MzcwNDE5NTYsMzcxMjA2MC45MjgzMzc3NzgsODQ2MTU2Mi41NjkzMzgxNjUsNTM5NjA4LjQ2ODMxNjcxMjUsNjc1Ni4zNjMxMDEyNjEyMjEKKzksV2VkIDIgRmViIDExLDI5NzI0Ni45MTUyMDI4OTg4NSwyNjUzOTguMDk2MDIxNzYyMSwxNTQ0ODMuMjkzNzk3NTc0MTgsMzE5MzU3LjU0NjkxNDkwNDcsMzIxOTA5LjE5OTg0MzM1MzIsNTIwMzc4OC4zOTc4NzgzMTUsNTY1NDk1MS40NjA5NjUzNjIsNDYzNDc3Mi44MTY5MjYyNTcsNDAyNTc2Ny45MDg1NzU2MDg0LDUwMzMyMjMuNTQ1NzExMzE2LDEwMjIwOTkuNjg3MTI0MjA0LDU5NzUwMDYuMTAzNzQ1NDMyLDExODI0ODguMTQ4NDk2NDE2OSwzMTM5MDUwLjg4NzA3MDQxLDI4MDU3MzkuMzM0NDg0NDIxLDY0NDA4MjAuMjY4MzY4NzQ4LDQ2NjYxMTkuOTY4ODUxODIyLDEzMTIyODUuOTg4MjgyMjk2MywzODE5MzQ3Ljk1MDczMDY1OSwyNTQzNTc4LjkwNjI1MjY0NzMsMzc1NzY2NC4wMzI5Mzg0NDIsNDE3Mjc5MC42NjQ4MzM0NzMsMzcxMjA3NS43NzY2MTExODgsODQ2MTU5Ni40MTU2NTYxMzYsNTM5NjEwLjYyNjc1NDkwMjUsNjc1Ni4zOTAxMjY3Njc2NzgKKzEwLFRodSAzIEZlYiAxMSwyOTcyNDguMTA0MTkyOTM3NjcsMjY1Mzk5LjE1NzYxNjI2OTM3LDE1NDQ4My45MTE3MzE5ODUyMiwzMTkzNTguODI0MzQ3NjQ3MywzMjE5MTAuNDg3NDgyNzI3ODUsNTIwMzgwOS4yMTMwNzM1MzcsNTY1NDk3NC4wODA4MTY0NDYsNDYzNDc5MS4zNTYwNTQ2MDIsNDAyNTc4NC4wMTE2Nzk0NDksNTAzMzI0My42Nzg2NDU3NjUsMTAyMjEwMy43NzU1MzExMjk0LDU5NzUwMzAuMDAzODE3NjQ4LDExODI0OTIuODc4NDU4NDcwOCwzMTM5MDYzLjQ0MzI5OTA3MjMsMjgwNTc1MC41NTc0NjQyMDU3LDY0NDA4NDYuMDMxNzAxMzQ4LDQ2NjYxMzguNjMzMzY5MDI3LDEzMTIyOTEuMjM3NDM2NzQ4LDM4MTkzNjMuMjI4MTUzMDE3LDI1NDM1ODkuMDgwNTg4NjIxLDM3NTc2NzkuMDYzNjI0NjM1Myw0MTcyODA3LjM1NjAyOTUxNiwzNzEyMDkwLjYyNDk0Mzk5MSw4NDYxNjMwLjI2MjEwOTQ5Miw1Mzk2MTIuNzg1MjAxNzI2MSw2NzU2LjQxNzE1MjM4MjIzNworMTEsRnJpIDQgRmViIDExLDI5NzI0OS4yOTMxODc3MzIzNCwyNjU0MDAuMjE5MjE1MDIzMSwxNTQ0ODQuNTI5NjY4ODY4LDMxOTM2MC4xMDE3ODU0OTk1LDMyMTkxMS43NzUxMjcyNTMwMyw1MjAzODMwLjAyODM1MjAyLDU2NTQ5OTYuNzAwNzU4MDEsNDYzNDgwOS44OTUyNTcxMDUsNDAyNTgwMC4xMTQ4NDc3MDIsNTAzMzI2My44MTE2NjA3NDYsMTAyMjEwNy44NjM5NTQ0MDgzLDU5NzUwNTMuOTAzOTg1NDYyLDExODI0OTcuNjA4NDM5NDQ0LDMxMzkwNzUuOTk5NTc3OTU4LDI4MDU3NjEuNzgwNDg4ODgxMyw2NDQwODcxLjc5NTEzNzAwMiw0NjY2MTU3LjI5Nzk2MDg4OSwxMzEyMjk2LjQ4NjYxMjE5NTYsMzgxOTM3OC41MDU2MzY0ODQsMjU0MzU5OS4yNTQ5NjUyOTIsMzc1NzY5NC4wOTQzNzA5NTIzLDQxNzI4MjQuMDQ3MjkyMzI0LDM3MTIxMDUuNDczMzM2MTg3Nyw4NDYxNjY0LjEwODY5ODIzNCw1Mzk2MTQuOTQzNjU3MTgzOCw2NzU2LjQ0NDE3ODEwNDg5NgorMTIsU2F0IDUgRmViIDExLDI5NzI1MC40ODIxODcyODMsMjY1NDAxLjI4MDgxODAyMzE0LDE1NDQ4NS4xNDc2MDgyMjI1MywzMTkzNjEuMzc5MjI4NDYxNTMsMzIxOTEzLjA2Mjc3NjkyODgsNTIwMzg1MC44NDM3MTM3NjUsNTY1NTAxOS4zMjA3OTAwNTE1LDQ2MzQ4MjguNDM0NTMzNzY2LDQwMjU4MTYuMjE4MDgwMzY3NCw1MDMzMjgzLjk0NDc1NjI2MiwxMDIyMTExLjk1MjM5NDA0MTEsNTk3NTA3Ny44MDQyNDg4NzgsMTE4MjUwMi4zMzg0MzkzMzc3LDMxMzkwODguNTU1OTA3MDY5MiwyODA1NzczLjAwMzU1ODQ0OTQsNjQ0MDg5Ny41NTg2NzU3MDksNDY2NjE3NS45NjI2Mjc0MTEsMTMxMjMwMS43MzU4MDg2NDA3LDM4MTkzOTMuNzgzMTgxMDYxNSwyNTQzNjA5LjQyOTM4MjY2MDQsMzc1NzcwOS4xMjUxNzczOTEzLDQxNzI4NDAuNzM4NjIxODk1NywzNzEyMTIwLjMyMTc4Nzc3OCw4NDYxNjk3Ljk1NTQyMjM2LDUzOTYxNy4xMDIxMjEyNzUsNjc1Ni40NzEyMDM5MzU2NTkKKzEzLFN1biA2IEZlYiAxMSwyOTcyNTEuNjcxMTkxNTg5OCwyNjU0MDIuMzQyNDI1MjY5NiwxNTQ0ODUuNzY1NTUwMDQ4OSwzMTkzNjIuNjU2Njc2NTMzMiwzMjE5MTQuMzUwNDMxNzU1MjQsNTIwMzg3MS42NTkxNTg3NzEsNTY1NTA0MS45NDA5MTI1NzQsNDYzNDg0Ni45NzM4ODQ1ODMsNDAyNTgzMi4zMjEzNzc0NDUsNTAzMzMwNC4wNzc5MzIzMDc1LDEwMjIxMTYuMDQwODUwMDI3Nyw1OTc1MTAxLjcwNDYwNzg5NSwxMTgyNTA3LjA2ODQ1ODE1MSwzMTM5MTAxLjExMjI4NjQwNSwyODA1Nzg0LjIyNjY3MjkxLDY0NDA5MjMuMzIyMzE3NDY5LDQ2NjYxOTQuNjI3MzY4NTkxLDEzMTIzMDYuOTg1MDI2MDgyNSwzODE5NDA5LjA2MDc4Njc0OTcsMjU0MzYxOS42MDM4NDA3MjgzLDM3NTc3MjQuMTU2MDQzOTUyMyw0MTcyODU3LjQzMDAxODIzMywzNzEyMTM1LjE3MDI5ODc2Miw4NDYxNzMxLjgwMjI4MTg3Myw1Mzk2MTkuMjYwNTk0MDAwNyw2NzU2LjQ5ODIyOTg3NDUyOAorMTQsTW9uIDcgRmViIDExLDI5NzI1Mi44NjAyMDA2NTI1NiwyNjU0MDMuNDA0MDM2NzYyNCwxNTQ0ODYuMzgzNDk0MzQ2OTMsMzE5MzYzLjkzNDEyOTcxNDg1LDMyMTkxNS42MzgwOTE3MzIzLDUyMDM4OTIuNDc0Njg3MDM4LDU2NTUwNjQuNTYxMTI1NTc4LDQ2MzQ4NjUuNTEzMzA5NTU3LDQwMjU4NDguNDI0NzM4OTM3NSw1MDMzMzI0LjIxMTE4ODg4NCwxMDIyMTIwLjEyOTMyMjM2NzgsNTk3NTEyNS42MDUwNjI1MTQsMTE4MjUxMS43OTg0OTU4ODQ1LDMxMzkxMTMuNjY4NzE1OTY3MywyODA1Nzk1LjQ0OTgzMjI2MjUsNjQ0MDk0OS4wODYwNjIyODUsNDY2NjIxMy4yOTIxODQ0MywxMzEyMzEyLjIzNDI2NDUyMTQsMzgxOTQyNC4zMzg0NTM1NDc2LDI1NDM2MjkuNzc4MzM5NDkxNywzNzU3NzM5LjE4Njk3MDYzNzYsNDE3Mjg3NC4xMjE0ODEzMzYsMzcxMjE1MC4wMTg4NjkxNCw4NDYxNzY1LjY0OTI3Njc3OCw1Mzk2MjEuNDE5MDc1MzYwMiw2NzU2LjUyNTI1NTkyMTUKKzE1LFR1ZSA4IEZlYiAxMSwyOTcyNTQuMDQ5MjE0NDcxMywyNjU0MDQuNDY1NjUyNTAxOCwxNTQ0ODcuMDAxNDQxMTE2NzYsMzE5MzY1LjIxMTU4ODAwNjQsMzIxOTE2LjkyNTc1Njg1OTk0LDUyMDM5MTMuMjkwMjk4NTY3LDU2NTUwODcuMTgxNDI5MDYyLDQ2MzQ4ODQuMDUyODA4Njg5LDQwMjU4NjQuNTI4MTY0ODQxNyw1MDMzMzQ0LjM0NDUyNTk5NSwxMDIyMTI0LjIxNzgxMTA2MjIsNTk3NTE0OS41MDU2MTI3MzMsMTE4MjUxNi41Mjg1NTI1Mzg1LDMxMzkxMjYuMjI1MTk1NzU0MywyODA1ODA2LjY3MzAzNjUwNzMsNjQ0MDk3NC44NDk5MTAxNTgsNDY2NjIzMS45NTcwNzQ5MjksMTMxMjMxNy40ODM1MjM5NTcsMzgxOTQzOS42MTYxODE0NTcsMjU0MzYzOS45NTI4Nzg5NTM0LDM3NTc3NTQuMjE3OTU3NDQ2NCw0MTcyODkwLjgxMzAxMTIwNSwzNzEyMTY0Ljg2NzQ5ODkxMyw4NDYxNzk5LjQ5NjQwNzA2Nyw1Mzk2MjMuNTc3NTY1MzUzNCw2NzU2LjU1MjI4MjA3NjU3NQorMTYsV2VkIDkgRmViIDExLDI5NzI1NS4yMzgyMzMwNDYyNiwyNjU0MDUuNTI3MjcyNDg3NiwxNTQ0ODcuNjE5MzkwMzU4NCwzMTkzNjYuNDg5MDUxNDA3OCwzMjE5MTguMjEzNDI3MTM4Miw1MjAzOTM0LjEwNTk5MzM1NzUsNTY1NTEwOS44MDE4MjMwMjgsNDYzNDkwMi41OTIzODE5NzksNDAyNTg4MC42MzE2NTUxNjAzLDUwMzMzNjQuNDc3OTQzNjQsMTAyMjEyOC4zMDYzMTYxMTA0LDU5NzUxNzMuNDA2MjU4NTU1LDExODI1MjEuMjU4NjI4MTEyNywzMTM5MTM4Ljc4MTcyNTc2OCwyODA1ODE3Ljg5NjI4NTY0Niw2NDQxMDAwLjYxMzg2MTA4NCw0NjY2MjUwLjYyMjA0MDA4NTUsMTMxMjMyMi43MzI4MDQzOSwzODE5NDU0Ljg5Mzk3MDQ3OCwyNTQzNjUwLjEyNzQ1OTExMzUsMzc1Nzc2OS4yNDkwMDQzNzksNDE3MjkwNy41MDQ2MDc4Mzk1LDM3MTIxNzkuNzE2MTg4MDc5Nyw4NDYxODMzLjM0MzY3Mjc0Nyw1Mzk2MjUuNzM2MDYzOTgwOCw2NzU2LjU3OTMwODMzOTc1NworMTcsVGh1IDEwIEZlYiAxMSwyOTcyNTYuNDI3MjU2Mzc3NCwyNjU0MDYuNTg4ODk2NzE5ODYsMTU0NDg4LjIzNzM0MjA3MTc4LDMxOTM2Ny43NjY1MTk5MTksMzIxOTE5LjUwMTEwMjU2NzEsNTIwMzk1NC45MjE3NzE0MTMsNTY1NTEzMi40MjIzMDc0NzYsNDYzNDkyMS4xMzIwMjk0MzEsNDAyNTg5Ni43MzUyMDk4OTQsNTAzMzM4NC42MTE0NDE4MTgsMTAyMjEzMi4zOTQ4Mzc1MTMxLDU5NzUxOTcuMzA2OTk5OTgyLDExODI1MjUuOTg4NzIyNjA3MywzMTM5MTUxLjMzODMwNjAwODQsMjgwNTgyOS4xMTk1Nzk2NzgsNjQ0MTAyNi4zNzc5MTUwNjcsNDY2NjI2OS4yODcwNzk5MDQsMTMxMjMyNy45ODIxMDU4MTkzLDM4MTk0NzAuMTcxODIwNjA5LDI1NDM2NjAuMzAyMDc5OTczMywzNzU3Nzg0LjI4MDExMTQzNjMsNDE3MjkyNC4xOTYyNzEyNDIsMzcxMjE5NC41NjQ5MzY2NDI1LDg0NjE4NjcuMTkxMDczODE2LDUzOTYyNy44OTQ1NzEyNDIyLDY3NTYuNjA2MzM0NzExMDQzCisxOCxGcmkgMTEgRmViIDExLDI5NzI1Ny42MTYyODQ0NjQzNywyNjU0MDcuNjUwNTI1MTk4NjcsMTU0NDg4Ljg1NTI5NjI1NjkyLDMxOTM2OS4wNDM5OTM1NDAxNywzMjE5MjAuNzg4NzgzMTQ3LDUyMDM5NzUuNzM3NjMyNzMyLDU2NTUxNTUuMDQyODgyNDA1LDQ2MzQ5MzkuNjcxNzUxMDQxLDQwMjU5MTIuODM4ODI5MDQxNSw1MDMzNDA0Ljc0NTAyMDUzMiwxMDIyMTM2LjQ4MzM3NTI2OTUsNTk3NTIyMS4yMDc4MzcwMTMsMTE4MjUzMC43MTg4MzYwMjIzLDMxMzkxNjMuODk0OTM2NDc1LDI4MDU4NDAuMzQyOTE4NjAzNyw2NDQxMDUyLjE0MjA3MjEwOCw0NjY2Mjg3Ljk1MjE5NDM4NywxMzEyMzMzLjIzMTQyODI0NywzODE5NDg1LjQ0OTczMTg1MiwyNTQzNjcwLjQ3Njc0MTUzMTQsMzc1Nzc5OS4zMTEyNzg2MTksNDE3Mjk0MC44ODgwMDE0MTE3LDM3MTIyMDkuNDEzNzQ0NTk5LDg0NjE5MDEuMDM4NjEwMjcyLDUzOTYzMC4wNTMwODcxMzc4LDY3NTYuNjMzMzYxMTkwNDM2NQorMTksU2F0IDEyIEZlYiAxMSwyOTcyNTguODA1MzE3MzA3NjUsMjY1NDA4LjcxMjE1NzkyNCwxNTQ0ODkuNDczMjUyOTE0LDMxOTM3MC4zMjE0NzIyNzExLDMyMTkyMi4wNzY0Njg4Nzc1NSw1MjAzOTk2LjU1MzU3NzMxNCw1NjU1MTc3LjY2MzU0NzgxOCw0NjM0OTU4LjIxMTU0NjgwOSw0MDI1OTI4Ljk0MjUxMjYwNiw1MDMzNDI0Ljg3ODY3OTc4MiwxMDIyMTQwLjU3MTkyOTM4MDIsNTk3NTI0NS4xMDg3Njk2NDgsMTE4MjUzNS40NDg5NjgzNTcyLDMxMzkxNzYuNDUxNjE3MTY4MywyODA1ODUxLjU2NjMwMjQyMjQsNjQ0MTA3Ny45MDYzMzIyMDUsNDY2NjMwNi42MTczODM1MjIsMTMxMjMzOC40ODA3NzE2NzE3LDM4MTk1MDAuNzI3NzA0MjA4LDI1NDM2ODAuNjUxNDQzNzg4LDM3NTc4MTQuMzQyNTA1OTI2Myw0MTcyOTU3LjU3OTc5ODM0NzMsMzcxMjIyNC4yNjI2MTE5NTI2LDg0NjE5MzQuODg2MjgyMTI1LDUzOTYzMi4yMTE2MTE2Njc0LDY3NTYuNjYwMzg3Nzc3OTM2CisyMCxTdW4gMTMgRmViIDExLDI5NzI1OS45OTQzNTQ5MDY5NiwyNjU0MDkuNzczNzk0ODk2LDE1NDQ5MC4wOTEyMTIwNDI4NCwzMTkzNzEuNTk4OTU2MTEyMDUsMzIxOTIzLjM2NDE1OTc1ODgsNTIwNDAxNy4zNjk2MDUxNTgsNTY1NTIwMC4yODQzMDM3MTMsNDYzNDk3Ni43NTE0MTY3MzksNDAyNTk0NS4wNDYyNjA1ODMsNTAzMzQ0NS4wMTI0MTk1NjYsMTAyMjE0NC42NjA0OTk4NDUsNTk3NTI2OS4wMDk3OTc4ODQsMTE4MjU0MC4xNzkxMTk2MTM1LDMxMzkxODkuMDA4MzQ4MDg4NywyODA1ODYyLjc4OTczMTEzNCw2NDQxMTAzLjY3MDY5NTM2MSw0NjY2MzI1LjI4MjY0NzMyMiwxMzEyMzQzLjczMDEzNjA5MzUsMzgxOTUxNi4wMDU3Mzc2NzQ0LDI1NDM2OTAuODI2MTg2NzQyNiwzNzU3ODI5LjM3Mzc5MzM1OTQsNDE3Mjk3NC4yNzE2NjIwNTEzLDM3MTIyMzkuMTExNTM4NzAwMyw4NDYxOTY4LjczNDA4OTM2Nyw1Mzk2MzQuMzcwMTQ0ODMxMiw2NzU2LjY4NzQxNDQ3MzU0MworMjEsTW9uIDE0IEZlYiAxMSwyOTcyNjEuMTgzMzk3MjYyMywyNjU0MTAuODM1NDM2MTE0NiwxNTQ0OTAuNzA5MTczNjQzNjcsMzE5MzcyLjg3NjQ0NTA2MjgsMzIxOTI0LjY1MTg1NTc5MDY0LDUyMDQwMzguMTg1NzE2MjY4LDU2NTUyMjIuOTA1MTUwMDkyLDQ2MzQ5OTUuMjkxMzYwODIyNSw0MDI1OTYxLjE1MDA3Mjk3NTUsNTAzMzQ2NS4xNDYyMzk4ODMsMTAyMjE0OC43NDkwODY2NjQyLDU5NzUyOTIuOTEwOTIxNzI0NSwxMTgyNTQ0LjkwOTI4OTc5MDYsMzEzOTIwMS41NjUxMjkyMzYzLDI4MDU4NzQuMDEzMjA0NzQwNCw2NDQxMTI5LjQzNTE2MTU3MSw0NjY2MzQzLjk0Nzk4NTc4MiwxMzEyMzQ4Ljk3OTUyMTUxMjUsMzgxOTUzMS4yODM4MzIyNTI1LDI1NDM3MDEuMDAwOTcwMzk3NiwzNzU3ODQ0LjQwNTE0MDkxNyw0MTcyOTkwLjk2MzU5MjUyMSwzNzEyMjUzLjk2MDUyNDg0MzUsODQ2MjAwMi41ODIwMzIwMDMsNTM5NjM2LjUyODY4NjYyODYsNjc1Ni43MTQ0NDEyNzcyNTIKKzIyLFR1ZSAxNSBGZWIgMTEsMjk3MjYyLjM3MjQ0NDM3Mzk2LDI2NTQxMS44OTcwODE1Nzk1LDE1NDQ5MS4zMjcxMzc3MTYyLDMxOTM3NC4xNTM5MzkxMjM2LDMyMTkyNS45Mzk1NTY5NzM1LDUyMDQwNTkuMDAxOTEwNjQ1LDU2NTUyNDUuNTI2MDg2OTU1LDQ2MzUwMTMuODMxMzc5MDcxLDQwMjU5NzcuMjUzOTQ5NzgzMyw1MDMzNDg1LjI4MDE0MDczNywxMDIyMTUyLjgzNzY4OTgzNzksNTk3NTMxNi44MTIxNDExNzIsMTE4MjU0OS42Mzk0Nzg4ODgsMzEzOTIxNC4xMjE5NjA2MTA2LDI4MDU4ODUuMjM2NzIzMjQwNSw2NDQxMTU1LjE5OTczMDg0MSw0NjY2MzYyLjYxMzM5ODkwNiwxMzEyMzU0LjIyODkyNzkyOTIsMzgxOTU0Ni41NjE5ODc5NDM1LDI1NDM3MTEuMTc1Nzk0NzUsMzc1Nzg1OS40MzY1NDg2LDQxNzMwMDcuNjU1NTg5NzYwMywzNzEyMjY4LjgwOTU3MDM4MzcsODQ2MjAzNi40MzAxMTAwMjgsNTM5NjM4LjY4NzIzNzA2MDMsNjc1Ni43NDE0NjgxODkwNjkKKzIzLFdlZCAxNiBGZWIgMTEsMjk3MjYzLjU2MTQ5NjI0MTgsMjY1NDEyLjk1ODczMTI5MTIzLDE1NDQ5MS45NDUxMDQyNjA2NywzMTkzNzUuNDMxNDM4Mjk0NTMsMzIxOTI3LjIyNzI2MzMwNzE0LDUyMDQwNzkuODE4MTg4Mjg0NSw1NjU1MjY4LjE0NzExNDI5OSw0NjM1MDMyLjM3MTQ3MTQ3OSw0MDI1OTkzLjM1Nzg5MTAwODcsNTAzMzUwNS40MTQxMjIxMjcsMTAyMjE1Ni45MjYzMDkzNjYsNTk3NTM0MC43MTM0NTYyMjQsMTE4MjU1NC4zNjk2ODY5MDY1LDMxMzkyMjYuNjc4ODQyMjEzLDI4MDU4OTYuNDYwMjg2NjM0NSw2NDQxMTgwLjk2NDQwMzE2OCw0NjY2MzgxLjI3ODg4NjY5LDEzMTIzNTkuNDc4MzU1MzQzLDM4MTk1NjEuODQwMjA0NzQ5LDI1NDM3MjEuMzUwNjU5ODAxNiwzNzU3ODc0LjQ2ODAxNjQwODQsNDE3MzAyNC4zNDc2NTM3NjY2LDM3MTIyODMuNjU4Njc1MzIwNCw4NDYyMDcwLjI3ODMyMzQ0LDUzOTY0MC44NDU3OTYxMjYzLDY3NTYuNzY4NDk1MjA4OTk1CisyNCxUaHUgMTcgRmViIDExLDI5NzI2NC43NTA1NTI4NjU4NSwyNjU0MTQuMDIwMzg1MjQ5NDYsMTU0NDkyLjU2MzA3MzI3NzE1LDMxOTM3Ni43MDg5NDI1NzUxNSwzMjE5MjguNTE0OTc0NzkxNyw1MjA0MTAwLjYzNDU0OTE4OCw1NjU1MjkwLjc2ODIzMjEzLDQ2MzUwNTAuOTExNjM4MDQ1LDQwMjYwMDkuNDYxODk2NjQ4LDUwMzM1MjUuNTQ4MTg0MDUxLDEwMjIxNjEuMDE0OTQ1MjQ4Niw1OTc1MzY0LjYxNDg2Njg4MSwxMTgyNTU5LjA5OTkxMzg0NTUsMzEzOTIzOS4yMzU3NzQwNDA3LDI4MDU5MDcuNjgzODk0OTIzNCw2NDQxMjA2LjcyOTE3ODU1Niw0NjY2Mzk5Ljk0NDQ0OTE0LDEzMTIzNjQuNzI3ODAzNzU1LDM4MTk1NzcuMTE4NDgyNjY4LDI1NDM3MzEuNTI1NTY1NTU0LDM3NTc4ODkuNDk5NTQ0MzQzLDQxNzMwNDEuMDM5Nzg0NTQxLDM3MTIyOTguNTA3ODM5NjUyNyw4NDYyMTA0LjEyNjY3MjI1Nyw1Mzk2NDMuMDA0MzYzODI2Niw2NzU2Ljc5NTUyMjMzNzAyOQorMjUsRnJpIDE4IEZlYiAxMSwyOTcyNjUuOTM5NjE0MjQ2MTMsMjY1NDE1LjA4MjA0MzQ1NDMsMTU0NDkzLjE4MTA0NDc2NTQsMzE5Mzc3Ljk4NjQ1MTk2NTkzLDMyMTkyOS44MDI2OTE0MjY5NCw1MjA0MTIxLjQ1MDk5MzM1OSw1NjU1MzEzLjM4OTQ0MDQ0NSw0NjM1MDY5LjQ1MTg3ODc3LDQwMjYwMjUuNTY1OTY2NzAyNSw1MDMzNTQ1LjY4MjMyNjUxMiwxMDIyMTY1LjEwMzU5NzQ4NTYsNTk3NTM4OC41MTYzNzMxNDMsMTE4MjU2My44MzAxNTk3MDU2LDMxMzkyNTEuNzkyNzU2MDk4LDI4MDU5MTguOTA3NTQ4MTA2Myw2NDQxMjMyLjQ5NDA1NzAwMjUsNDY2NjQxOC42MTAwODYyNTEsMTMxMjM2OS45NzcyNzMxNjYsMzgxOTU5Mi4zOTY4MjE2OTgsMjU0Mzc0MS43MDA1MTIwMDcsMzc1NzkwNC41MzExMzI0MDQsNDE3MzA1Ny43MzE5ODIwODU0LDM3MTIzMTMuMzU3MDYzMzgzMyw4NDYyMTM3Ljk3NTE1NjQ2LDUzOTY0NS4xNjI5NDAxNjEsNjc1Ni44MjI1NDk1NzMxNzEKKzI2LFNhdCAxOSBGZWIgMTEsMjk3MjY3LjEyODY4MDM4MjcsMjY1NDE2LjE0MzcwNTkwNTgsMTU0NDkzLjc5OTAxODcyNTQ2LDMxOTM3OS4yNjM5NjY0NjY4LDMyMTkzMS4wOTA0MTMyMTMyNCw1MjA0MTQyLjI2NzUyMDc5NjUsNTY1NTMzNi4wMTA3MzkyNDQsNDYzNTA4Ny45OTIxOTM2NTYsNDAyNjA0MS42NzAxMDExNzM3LDUwMzM1NjUuODE2NTQ5NTA5LDEwMjIxNjkuMTkyMjY2MDc3Myw1OTc1NDEyLjQxNzk3NTAxMSwxMTgyNTY4LjU2MDQyNDQ4NjYsMzEzOTI2NC4zNDk3ODgzODM2LDI4MDU5MzAuMTMxMjQ2MTg0LDY0NDEyNTguMjU5MDM4NTA4LDQ2NjY0MzcuMjc1Nzk4MDI0LDEzMTIzNzUuMjI2NzYzNTc0NCwzODE5NjA3LjY3NTIyMTg0MjIsMjU0Mzc1MS44NzU0OTkxNTksMzc1NzkxOS41NjI3ODA1OTAzLDQxNzMwNzQuNDI0MjQ2Mzk4LDM3MTIzMjguMjA2MzQ2NTEsODQ2MjE3MS44MjM3NzYwNjMsNTM5NjQ3LjMyMTUyNTEzLDY3NTYuODQ5NTc2OTE3NDIxNQorMjcsU3VuIDIwIEZlYiAxMSwyOTcyNjguMzE3NzUxMjc1NiwyNjU0MTcuMjA1MzcyNjAzOTYsMTU0NDk0LjQxNjk5NTE1NzQzLDMxOTM4MC41NDE0ODYwNzc3NywzMjE5MzIuMzc4MTQwMTUwNDUsNTIwNDE2My4wODQxMzE0OTksNTY1NTM1OC42MzIxMjg1MjcsNDYzNTEwNi41MzI1ODI3MDgsNDAyNjA1Ny43NzQzMDAwNjIsNTAzMzU4NS45NTA4NTMwNDQsMTAyMjE3My4yODA5NTEwMjM4LDU5NzU0MzYuMzE5NjcyNDg4LDExODI1NzMuMjkwNzA4MTg5LDMxMzkyNzYuOTA2ODcwODk3NCwyODA1OTQxLjM1NDk4OTE1Nyw2NDQxMjg0LjAyNDEyMzA3NCw0NjY2NDU1Ljk0MTU4NDQ1OCwxMzEyMzgwLjQ3NjI3NDk4MSwzODE5NjIyLjk1MzY4MzA5OTIsMjU0Mzc2Mi4wNTA1MjcwMDksMzc1NzkzNC41OTQ0ODg5MDUzLDQxNzMwOTEuMTE2NTc3NDgsMzcxMjM0My4wNTU2ODkwMzMsODQ2MjIwNS42NzI1MzEwNTUsNTM5NjQ5LjQ4MDExODczMyw2NzU2Ljg3NjYwNDM2OTc4MworMjgsTW9uIDIxIEZlYiAxMSwyOTcyNjkuNTA2ODI2OTI0NywyNjU0MTguMjY3MDQzNTQ4NjQsMTU0NDk1LjAzNDk3NDA2MTMzLDMxOTM4MS44MTkwMTA3OTg3NiwzMjE5MzMuNjY1ODcyMjM4NDYsNTIwNDE4My45MDA4MjU0Nyw1NjU1MzgxLjI1MzYwODI5OSw0NjM1MTI1LjA3MzA0NTkyMSw0MDI2MDczLjg3ODU2MzM2OCw1MDMzNjA2LjA4NTIzNzExNywxMDIyMTc3LjM2OTY1MjMyNSw1OTc1NDYwLjIyMTQ2NTU3LDExODI1NzguMDIxMDEwODEyNCwzMTM5Mjg5LjQ2NDAwMzYzOTMsMjgwNTk1Mi41Nzg3NzcwMjQ1LDY0NDEzMDkuNzg5MzEwNzA0LDQ2NjY0NzQuNjA3NDQ1NTU2LDEzMTIzODUuNzI1ODA3Mzg1MywzODE5NjM4LjIzMjIwNTQ3LDI1NDM3NzIuMjI1NTk1NTYwNCwzNzU3OTQ5LjYyNjI1NzM0NjUsNDE3MzEwNy44MDg5NzUzMzE1LDM3MTIzNTcuOTA1MDkwOTU1LDg0NjIyMzkuNTIxNDIxNDQ2LDUzOTY1MS42Mzg3MjA5NzA2LDY3NTYuOTAzNjMxOTMwMjU2CisyOSxUdWUgMjIgRmViIDExLDI5NzI3MC42OTU5MDczMzAxNCwyNjU0MTkuMzI4NzE4NzQwMSwxNTQ0OTUuNjUyOTU1NDM3MTcsMzE5MzgzLjA5NjU0MDYyOTg2LDMyMTkzNC45NTM2MDk0Nzc0LDUyMDQyMDQuNzE3NjAyNzA3LDU2NTU0MDMuODc1MTc4NTU2LDQ2MzUxNDMuNjEzNTgzMjk0LDQwMjYwODkuOTgyODkxMDkxNiw1MDMzNjI2LjIxOTcwMTcyOCwxMDIyMTgxLjQ1ODM2OTk4MSw1OTc1NDg0LjEyMzM1NDI1OSwxMTgyNTgyLjc1MTMzMjM1NjgsMzEzOTMwMi4wMjExODY2MSwyODA1OTYzLjgwMjYwOTc4OCw2NDQxMzM1LjU1NDYwMTM5MSw0NjY2NDkzLjI3MzM4MTMxOSwxMzEyMzkwLjk3NTM2MDc4NzUsMzgxOTY1My41MTA3ODg5NTUzLDI1NDM3ODIuNDAwNzA0ODEzNywzNzU3OTY0LjY1ODA4NTkxNTMsNDE3MzEyNC41MDE0Mzk5NTI4LDM3MTIzNzIuNzU0NTUyMjc0LDg0NjIyNzMuMzcwNDQ3MjMsNTM5NjUzLjc5NzMzMTg0MjcsNjc1Ni45MzA2NTk1OTg4NAorMzAsV2VkIDIzIEZlYiAxMSwyOTcyNzEuODg0OTkyNDkyLDI2NTQyMC4zOTAzOTgxNzgzLDE1NDQ5Ni4yNzA5MzkyODUsMzE5Mzg0LjM3NDA3NTU3MTEzLDMyMTkzNi4yNDEzNTE4NjczLDUyMDQyMjUuNTM0NDYzMjEsNTY1NTQyNi40OTY4MzkzMDEsNDYzNTE2Mi4xNTQxOTQ4MzIsNDAyNjEwNi4wODcyODMyMzIsNTAzMzY0Ni4zNTQyNDY4NzYsMTAyMjE4NS41NDcxMDM5OTIxLDU5NzU1MDguMDI1MzM4NTU4LDExODI1ODcuNDgxNjcyODIzMiwzMTM5MzE0LjU3ODQxOTgwODgsMjgwNTk3NS4wMjY0ODc0NDU1LDY0NDEzNjEuMzE5OTk1MTQsNDY2NjUxMS45MzkzOTE3NDMsMTMxMjM5Ni4yMjQ5MzUxODgyLDM4MTk2NjguNzg5NDMzNTU1NywyNTQzNzkyLjU3NTg1NDc2NzYsMzc1Nzk3OS42ODk5NzQ2MTE2LDQxNzMxNDEuMTkzOTcxMzQ0LDM3MTIzODcuNjA0MDcyOTkxLDg0NjIzMDcuMjE5NjA4NDEsNTM5NjU1Ljk1NTk1MTM0OTIsNjc1Ni45NTc2ODczNzU1MzUKKzMxLFRodSAyNCBGZWIgMTEsMjk3MjczLjA3NDA4MjQxMDIsMjY1NDIxLjQ1MjA4MTg2MzMsMTU0NDk2Ljg4ODkyNTYwNDczLDMxOTM4NS42NTE2MTU2MjI1LDMyMTkzNy41MjkwOTk0MDgyNSw1MjA0MjQ2LjM1MTQwNjk4Miw1NjU1NDQ5LjExODU5MDUzMSw0NjM1MTgwLjY5NDg4MDUzLDQwMjYxMjIuMTkxNzM5NzksNTAzMzY2Ni40ODg4NzI1NjIsMTAyMjE4OS42MzU4NTQzNTgxLDU5NzU1MzEuOTI3NDE4NDYzLDExODI1OTIuMjEyMDMyMjEwNSwzMTM5MzI3LjEzNTcwMzIzNzcsMjgwNTk4Ni4yNTA0MDk5OTg1LDY0NDEzODcuMDg1NDkxOTUxLDQ2NjY1MzAuNjA1NDc2ODMzLDEzMTI0MDEuNDc0NTMwNTg3LDM4MTk2ODQuMDY4MTM5MjcxLDI1NDM4MDIuNzUxMDQ1NDIxLDM3NTc5OTQuNzIxOTIzNDM1Niw0MTczMTU3Ljg4NjU2OTUwNDYsMzcxMjQwMi40NTM2NTMxMDY1LDg0NjIzNDEuMDY4OTA0OTg3LDUzOTY1OC4xMTQ1Nzk0OTAzLDY3NTYuOTg0NzE1MjYwMzQKKzMyLEZyaSAyNSBGZWIgMTEsMjk3Mjc0LjI2MzE3NzA4NDgsMjY1NDIyLjUxMzc2OTc5NDk1LDE1NDQ5Ny41MDY5MTQzOTY0MiwzMTkzODYuOTI5MTYwNzg0LDMyMTkzOC44MTY4NTIxMDAxNCw1MjA0MjY3LjE2ODQzNDAyMiw1NjU1NDcxLjc0MDQzMjI0OCw0NjM1MTk5LjIzNTY0MDM5Miw0MDI2MTM4LjI5NjI2MDc2NjcsNTAzMzY4Ni42MjM1Nzg3ODcsMTAyMjE5My43MjQ2MjEwNzksNTk3NTU1NS44Mjk1OTM5NzYsMTE4MjU5Ni45NDI0MTA1MTk4LDMxMzkzMzkuNjkzMDM2ODk1MiwyODA1OTk3LjQ3NDM3NzQ0OCw2NDQxNDEyLjg1MTA5MTgyNSw0NjY2NTQ5LjI3MTYzNjU4NywxMzEyNDA2LjcyNDE0Njk4NCwzODE5Njk5LjM0NjkwNjEwMSwyNTQzODEyLjkyNjI3Njc3NjUsMzc1ODAwOS43NTM5MzIzODc2LDQxNzMxNzQuNTc5MjM0NDM2NiwzNzEyNDE3LjMwMzI5MjYyMDUsODQ2MjM3NC45MTgzMzY5NjEsNTM5NjYwLjI3MzIxNjI2NTgsNjc1Ny4wMTE3NDMyNTMyNTcKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvSW5vY3VsYXRpb25UZXN0X1JLX1JlZmVyZW5jZS9IdW1hblBvcHVsYXRpb25Nb2RlbC9odW1hbi9EZWF0aHNfMC5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0lub2N1bGF0aW9uVGVzdF9SS19SZWZlcmVuY2UvSHVtYW5Qb3B1bGF0aW9uTW9kZWwvaHVtYW4vRGVhdGhzXzAuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJjMjQ0MDEKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0lub2N1bGF0aW9uVGVzdF9SS19SZWZlcmVuY2UvSHVtYW5Qb3B1bGF0aW9uTW9kZWwvaHVtYW4vRGVhdGhzXzAuY3N2CkBAIC0wLDAgKzEgQEAKK2l0ZXJhdGlvbix0aW1lLApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Jbm9jdWxhdGlvblRlc3RfUktfUmVmZXJlbmNlL0h1bWFuUG9wdWxhdGlvbk1vZGVsL2h1bWFuL0RlYXRoc18xLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvSW5vY3VsYXRpb25UZXN0X1JLX1JlZmVyZW5jZS9IdW1hblBvcHVsYXRpb25Nb2RlbC9odW1hbi9EZWF0aHNfMS5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmMyNDQwMQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvSW5vY3VsYXRpb25UZXN0X1JLX1JlZmVyZW5jZS9IdW1hblBvcHVsYXRpb25Nb2RlbC9odW1hbi9EZWF0aHNfMS5jc3YKQEAgLTAsMCArMSBAQAoraXRlcmF0aW9uLHRpbWUsCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0lub2N1bGF0aW9uVGVzdF9SS19SZWZlcmVuY2UvSHVtYW5Qb3B1bGF0aW9uTW9kZWwvaHVtYW4vRGVhdGhzXzIuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Jbm9jdWxhdGlvblRlc3RfUktfUmVmZXJlbmNlL0h1bWFuUG9wdWxhdGlvbk1vZGVsL2h1bWFuL0RlYXRoc18yLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45OWI0YzU3Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Jbm9jdWxhdGlvblRlc3RfUktfUmVmZXJlbmNlL0h1bWFuUG9wdWxhdGlvbk1vZGVsL2h1bWFuL0RlYXRoc18yLmNzdgpAQCAtMCwwICsxLDMzIEBACitpdGVyYXRpb24sdGltZSxFRy1GUkctRzIxMDAwMSxFRy1GUkctRzIxMDAwMixFRy1GUkctRzIxMDAwMyxFRy1GUkctRzIxMDAwNCxFRy1GUkctRzIxMDAwNSxFRy1MT0UtRzI0MDAwMSxFRy1MT0UtRzI0MDAwMixFRy1MT0UtRzI0MDAwMyxFRy1MT0UtRzI0MDAwNCxFRy1MT0UtRzI0MDAwNSxFRy1MT0UtRzI0MDAwNixFRy1MT0UtRzI0MDAwNyxFRy1MT0UtRzI0MDAwOCxFRy1MT0UtRzI0MDAwOSxFRy1VUEUtRzI5MDAwMSxFRy1VUEUtRzI5MDAwMixFRy1VUEUtRzI5MDAwMyxFRy1VUEUtRzI5MDAwNCxFRy1VUEUtRzI5MDAwNSxFRy1VUEUtRzI5MDAwNixFRy1VUEUtRzI5MDAwNyxFRy1VUEUtRzI5MDAwOCxFRy1VUkctRzMwMDAwMSxFRy1VUkctRzMwMDAwMixFRy1VUkctRzMwMDAwMyxFRy1VUkctRzMwMDAwNAorMSxUdWUgMjUgSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzIsV2VkIDI2IEphbiAxMSwxMC40MDMzMjk5Mjc1MjkwMzQsOS4yODg2NTQ2OTY5NDcwMiw1LjQwNjc1MzA3Nzg5MzMwMywxMS4xNzcxNzg4MjE2MzQ2OTYsMTEuMjY2NDgzOTk0OTM1MDYsMTgyLjEyNzEzMDAzMDAwMzUsMTk3LjkxNzM2MzUyMzk1MDAzLDE2Mi4yMTIxODIxNTQwNjYyLDE0MC44OTc2NDk4MDczNDEzNywxNzYuMTU3NTM5Mjk0NTYyODcsMzUuNzcyNDE1ODYwNzk3Mzk1LDIwOS4xMTg5Mzk5Njg5MjYxOCw0MS4zODU4NDM2MDM0NzAyODUsMTA5Ljg2MzQ4NTA5MzU0NTc2LDk4LjE5NzkzMDcyNDkwODk0LDIyNS40MjE5NDY2MzMyMTY0NiwxNjMuMzA5Mjk5NTU3NDQ1OTcsNDUuOTI4NjMxNzEwMjkxNjEsMTMzLjY3MzE2ODAyMDQ2NzkzLDg5LjAyMjU5MTAwMTExMTMxLDEzMS41MTQyOTU2NjQ4ODEyMiwxNDYuMDQzMjkxOTA0NzkxNTcsMTI5LjkxODc1NDU2MDM3NzUsMjk2LjE0Njk5MDAwNTE5NDMsMTguODg1ODA1MzUzNzc0ODg4LDAuMjM2NDY2NTYwMzMzODA1MTcKKzMsVGh1IDI3IEphbiAxMSwyMC44MDY3MDE0Njg0NjEsMTguNTc3MzQ2NTQ4NTg3MTMzLDEwLjgxMzUyNzc4Mjg0MjE3LDIyLjM1NDQwMjM1MjA3NDA4NiwyMi41MzMwMTMwNTU4OTYyNCwzNjQuMjU0OTg4NTY5OTg0MzMsMzk1LjgzNTUxODcxODkzNzUsMzI0LjQyNTAxMzE1ODE1ODgzLDI4MS43OTU4NjMyMDY0MDkyNSwzNTIuMzE1NzgzMjIwNjkyMiw3MS41NDQ5NzQ4MTE1NDQ0NCw0MTguMjM4NzE2NDE1Mjg1Miw4Mi43NzE4NTI3NTA2NDYwOSwyMTkuNzI3NDA5NjQxOTEwOTUsMTk2LjM5NjI1NDI0MjMyNjQyLDQ1MC44NDQ3OTQ5NTYwMjI4LDMyNi42MTkyNTIzNTMzOTY3LDkxLjg1NzQ0NzEzNTQ3NzUsMjY3LjM0Njg3MDczNDY3NzM0LDE3OC4wNDU1MzgwOTMyOTg4LDI2My4wMjkxMTczODc5OTcyNSwyOTIuMDg3MTY3OTgzOTE5MiwyNTkuODM4MDI4Nzk2ODEyNSw1OTIuMjk1MTY0NjAwNzE3OCwzNy43NzE2ODYyNTA5MjIyOSwwLjQ3MjkzNDA2NjUzNTc0MzU1Cis0LEZyaSAyOCBKYW4gMTEsMzEuMjEwMTE0NjIyOTYyMzU4LDI3Ljg2NjA3NTU1NTA2ODk2NCwxNi4yMjAzMjQxMTQ5MzMxMTMsMzMuNTMxNjcwNTkxNDk3MDIsMzMuNzk5NTg3MTgzMDYzOCw1NDYuMzgzNTc1NjIyODU2Myw1OTMuNzU0NDY1NTg4MTI5Miw0ODYuNjM4NDkzMDE0ODczMDYsNDIyLjY5NDY0MDE5OTQ1OCw1MjguNDc0NzMxNzgxMjA2NSwxMDcuMzE3Njc2ODUyODEzNDMsNjI3LjM1OTMyOTM0MjQyMzIsMTI0LjE1ODAyNzQ0MjE4OTU4LDMyOS41OTE3NzM2NDY4NTMxNCwyOTQuNTk0OTcwNTUzODIzNSw2NzYuMjY4NTQ0OTcyMDI1OCw0ODkuOTI5ODU4MzkwNDY1MSwxMzcuNzg2NDQ2Mjc2MjkyNDgsNDAxLjAyMTEwODE0NDc2NzE0LDI2Ny4wNjg4NDEyNzc5ODY5LDM5NC41NDQ0NjUxNzE0NTIyNiw0MzguMTMxNjI4MjM5NzE5NTMsMzg5Ljc1NzgyMjcxMTM4Mzk0LDg4OC40NDQ1MjM3OTEzMDksNTYuNjU3NjQyNjkxNzQ0MzY0LDAuNzA5NDAyNTE4NjA5NTk4NworNSxTYXQgMjkgSmFuIDExLDQxLjYxMzU2OTM5MTE5OTU3LDM3LjE1NDg0MTcxNjU0MTEzLDIxLjYyNzE0MjA3NDI1MjYzLDQ0LjcwODk4MzU0MDA4MjMxNSw0NS4wNjYyMDYzNzY2MTc5ODQsNzI4LjUxMjg5MTE5MTUzMzMsNzkxLjY3NDIwNDEzNDY5MTQsNjQ4Ljg1MjYyMTcyNjgwNDYsNTYzLjU5Mzk4MDc4ODc0MTYsNzA0LjYzNDM4NDk3ODkyNDMsMTQzLjA5MDUyMTk4NTE3NjgyLDgzNi40ODA3Nzg3NTM2ODU1LDE2NS41NDQzNjc2Nzg3NjI5NCw0MzkuNDU2NTc3MTEwMTMwMiwzOTIuNzk0MDc5NjYwOTcxNCw5MDEuNjkzMTk2Njg0ODMyMiw2NTMuMjQxMTE3NjcxMjY0MywxODMuNzE1NjI5MTMzNDcxNDUsNTM0LjY5NTg4MDI1Mjg3NTksMzU2LjA5MjUwMDU1NjU5OTksNTI2LjA2MDMzOTAxNzM1MDUsNTg0LjE3NjY3MjY3NDUyOTEsNTE5LjY3ODEzNjMwNjE3MDIsMTE4NC41OTUwNjc1ODE3MDY2LDc1LjU0MzY3NDY3NjU0MzI4LDAuOTQ1ODcxOTE2NTU5MTUzNworNixTdW4gMzAgSmFuIDExLDUyLjAxNzA2NTc3MzMzOTA1Niw0Ni40NDM2NDUwMzMxNTIyNCwyNy4wMzM5ODE2NjA4ODcyMzIsNTUuODg2MzQxMTk4MDA4ODE1LDU2LjMzMjg3MDYzNjczOTA1LDkxMC42NDI5MzUyNzg5Mjk1LDk4OS41OTQ3MzQzNjE3OTA5LDgxMS4wNjczOTkyOTY1NDg1LDcwNC40OTM4ODQ5NzY1MTQ3LDg4MC43OTQ3NDI4MTY2NjQsMTc4Ljg2MzUxMDIwOTIwNjg4LDEwNDUuNjAzMDY0NjUyNDE4MiwyMDYuOTMwODczNDYxMDI4Miw1NDkuMzIxODIwMDMzNDk5OSw0OTAuOTkzNTgxNTY1MzQxMSwxMTI3LjExODc1MDA5ODA0ODYsODE2LjU1MzAzMDE5ODQwNjMsMjI5LjY0NDk5NTcwNzc0OTIsNjY4LjM3MTE4NzA2MTE0MjMsNDQ1LjExNjUxNTkzMDU2MjEsNjU3LjU3NjczODkyNzc5Niw3MzAuMjIyMzAxMjkwNjg0NCw2NDkuNTk4OTY5NTgzMjUsMTQ4MC43NDY3OTU5NzY2NDc3LDk0LjQyOTc4MjIwNTYyMTE4LDEuMTgyMzQyMjYwMzg4MTkxNQorNyxNb24gMzEgSmFuIDExLDYyLjQyMDYwMzc2OTU0NzMyLDU1LjczMjQ4NTUwNTA1MDk0LDMyLjQ0MDg0Mjg3NDkyMzQ1LDY3LjA2Mzc0MzU2NTQ1NTM4LDY3LjU5OTU3OTk2MzYwNzMzLDEwOTIuNzczNzA3ODg3OTU5LDExODcuNTE2MDU2MjcyNTk1Myw5NzMuMjgyODI1NzI2NzAwNSw4NDUuMzk0MzUyNzY1MDMxNywxMDU2Ljk1NTgwNTI5NzI0NDMsMjE0LjYzNjY0MTUyNTQ3NiwxMjU0LjcyNjE4NzA0MTk2NzcsMjQ4LjMxNzU0NDc4OTY0Nzc3LDY1OS4xODc1MDI0MTg3MjAyLDU4OS4xOTM0NzYyNjg1MDQyLDEzNTIuNTQ1MjA1MjE1MjgyMyw5NzkuODY1NTk1OTc0NTA1NCwyNzUuNTc0NTQ1OTk5ODYwNyw4MDIuMDQ3MDI4NTcxNzA1Myw1MzQuMTQwODg3NDAxMjk4Miw3ODkuMDkzNjY0OTA0ODkzNyw4NzYuMjY4NTE0MDkwNTIyOSw3NzkuNTIwMzIyNTQ0NzAyNSwxNzc2Ljg5OTcwODk4MDg3MjIsMTEzLjMxNTk2NTI3OTI4MDMsMS40MTg4MTM1NTAxMDA0OTczCis4LFR1ZSAxIEZlYiAxMSw3Mi44MjQxODMzNzk5OTA3Nyw2NS4wMjEzNjMxMzIzODU4MiwzNy44NDc3MjU3MTY0NDc3NzYsNzguMjQxMTkwNjQyNjAwODEsNzguODY2MzM0MzU3NDAzMDUsMTI3NC45MDUyMDkwMjE1MzY0LDEzODUuNDM4MTY5ODcwMjcwNSwxMTM1LjQ5ODkwMTAxOTg1Niw5ODYuMjk1Mzg0MTU2NTQ3MSwxMjMzLjExNzU3MjQyMzQ4NDMsMjUwLjQwOTkxNTkzNDU1NjU1LDE0NjMuODUwMTQ1OTI1Njc5MywyODkuNzA0MzgxNjY1MjgzNzMsNzY5LjA1MzYyNDI2NzU0OTEsNjg3LjM5Mzc2Mzc3MjAzMTUsMTU3Ny45NzI1NjIwNDAxNCwxMTQzLjE3ODgxNTAwMjE3NDYsMzIxLjUwNDI4MDAxMDU0MDc1LDkzNS43MjM0MDQ3ODY3MDQxLDYyMy4xNjU2MTQ5NzAyMzIyLDkyMC42MTExMTY5NTA3NDcsMTAyMi4zMTUzMTEwNzYzODA5LDkwOS40NDIxOTUxOTI2MDU4LDIwNzMuMDUzODA2NTk5MTE4LDEzMi4yMDIyMjM4OTc4MjI4MiwxLjY1NTI4NTc4NTY5OTg1MzUKKzksV2VkIDIgRmViIDExLDgzLjIyNzgwNDYwNDgzNTkxLDc0LjMxMDI3NzkxNTMwNTUyLDQzLjI1NDYzMDE4NTU0NjcxNiw4OS40MTg2ODI0Mjk2MjQsOTAuMTMzMTMzODE4MzA2NDUsMTQ1Ny4wMzc0Mzg2ODI1NzUyLDE1ODMuMzYxMDc1MTU3OTgzNCwxMjk3LjcxNTYyNTE3ODYxMDMsMTEyNy4xOTY5NzkxNTMzMTU2LDE0MDkuMjgwMDQ0MTk4MjAxNywyODYuMTgzMzMzNDM3MDIwOSwxNjcyLjk3NDk0MTMwNjg5OTYsMzMxLjA5MTM4NDA4ODU5ODI2LDg3OC45MjAxODU1ODE3NDQsNzg1LjU5NDQ0NDA3NzQ5NDQsMTgwMy40MDA4MjA1NzYyMjg2LDEzMDYuNDkyNjg3Mjg0MDI2LDM2Ny40MzQxOTc3NDA1MjQyNywxMDY5LjQwMDMxNTcwODI3NjYsNzEyLjE5MDY5ODYzODc4OSwxMDUyLjEyOTA5NTA2NzQ2MDQsMTE2OC4zNjI2OTIyNTA1OTUzLDEwMzkuMzY0NTg3NTI5MDM5NSwyMzY5LjIwOTA4ODgzNjEyMywxNTEuMDg4NTU4MDYxNTUwODgsMS44OTE3NTg5NjcxOTAwNDMyCisxMCxUaHUgMyBGZWIgMTEsOTMuNjMxNDY3NDQ0MjQ5MTUsODMuNTk5MjI5ODUzOTU4NjgsNDguNjYxNTU2MjgyMzA2ODEsMTAwLjU5NjIxODkyNjcwMzc0LDEwMS4zOTk5NzgzNDY0OTc4NSwxNjM5LjE3MDM5Njg3Mzk4OTYsMTc4MS4yODQ3NzIxMzg5MDEsMTQ1OS45MzI5OTgyMDU1NTg1LDEyNjguMDk5MTM3NzU3NTkxLDE1ODUuNDQzMjIwNjI0MjE1LDMyMS45NTY4OTQwMzM0NDE0LDE4ODIuMTAwNTczMTg4OTc0MywzNzIuNDc4NTUyMDYwMjUzNiw5ODguNzg3MTg2MzYzMDYzNiw4ODMuNzk1NTE3MTg2NDY0MywyMDI4LjgyOTk4MDgyNzE1NDUsMTQ2OS44MDcyMTI4MjI2NzMxLDQxMy4zNjQyOTkxOTA1NDYyNiwxMjAzLjA3Nzc2MTMzODU2MjQsODAxLjIxNjEzODQwODM5MjEsMTE4My42NDc1OTkyNTcxMzg2LDEzMTQuNDEwNjU3NjE1NTAyMywxMTY5LjI4NzQ5OTU1NjA4MjEsMjY2NS4zNjU1NTU2OTY2MjY0LDE2OS45NzQ5Njc3NzA3NjY2NSwyLjEyODIzMzA5NDU3NDg1MTgKKzExLEZyaSA0IEZlYiAxMSwxMDQuMDM1MTcxODk4Mzk2OTcsOTIuODg4MjE4OTQ4NDkzODcsNTQuMDY4NTA0MDA2ODE0NTMsMTExLjc3MzgwMDEzNDAxODg2LDExMi42NjY4Njc5NDIxNTc0NSwxODIxLjMwNDA4MzU5ODY5MzUsMTk3OS4yMDkyNjA4MTYxOTAyLDE2MjIuMTUxMDIwMTAzMjk2MywxNDA5LjAwMTg1OTk3MTYyODIsMTc2MS42MDcxMDE3MDQzNDM3LDM1Ny43MzA1OTc3MjQzOTA3LDIwOTEuMjI3MDQxNTc1MjUsNDEzLjg2NTg4NTU4MDkxMTc3LDEwOTguNjU0NjI2NjEzMjY1Miw5ODEuOTk2OTgzMTAwNTEyNSwyMjU0LjI2MDA0Mjc5NjUyNCwxNjMzLjEyMjM5MTYyMDcyODYsNDU5LjI5NDU4NDM2MTM0MTUsMTMzNi43NTU3NDE2Nzk3MDAxLDg5MC4yNDE5MzQyODA0NjY2LDEzMTUuMTY2NjI5NTIxODg2MywxNDYwLjQ1OTIwNzE3MzQzOTgsMTI5OS4yMTA5MzEyNzU4MTE4LDI5NjEuNTIzMjA3MTg1MzY1NywxODguODYxNDUzMDI1NzcyNCwyLjM2NDcwODE2Nzg1ODA2MTUKKzEyLFNhdCA1IEZlYiAxMSwxMTQuNDM4OTE3OTY3NDQ1ODYsMTAyLjE3NzI0NTE5OTA1OTc4LDU5LjQ3NTQ3MzM1OTE1NjM5LDEyMi45NTE0MjYwNTE3NDgyNiwxMjMuOTMzODAyNjA1NDY1NTksMjAwMy40Mzg0OTg4NTk2MDE0LDIxNzcuMTM0NTQxMTkzMDE3NCwxNzg0LjM2OTY5MDg3NDQxOTgsMTU0OS45MDUxNDU3OTc2ODExLDE5MzcuNzcxNjg3NDQxNDA2MSwzOTMuNTA0NDQ0NTEwNDQwOCwyMzAwLjM1NDM0NjQ2OTA3MTUsNDU1LjI1MzM4NDY1MTIzNTI1LDEyMDguNTIyNTA2MzM0MTA3LDEwODAuMTk4ODQxODIxMjA5LDI0NzkuNjkxMDA2NDg3OTQ1MywxNzk2LjQzODIyMzY4MDgwNTgsNTA1LjIyNTA1MzI1MzY0NDgzLDE0NzAuNDM0MjU2NzMzODI4NSw5NzkuMjY4MDg2MjU2NDM2NywxNDQ2LjY4NjE4NTg2MzgwNywxNjA2LjUwODM0MDkyNjc0MzgsMTQyOS4xMzQ4ODI2OTAzMDc3LDMyNTcuNjgyMDQzMzA3MDgsMjA3Ljc0ODAxMzgyNjg3MDIyLDIuNjAxMTg0MTg3MDQzNDU1OAorMTMsU3VuIDYgRmViIDExLDEyNC44NDI3MDU2NTE1NjIyNiwxMTEuNDY2MzA4NjA1ODA1MDMsNjQuODgyNDY0MzM5NDE4OTIsMTM0LjEyOTA5NjY4MDA3MDcyLDEzNS4yMDA3ODIzMzY2MDI1LDIxODUuNTczNjQyNjU5NjI4LDIzNzUuMDYwNjEzMjcyNTQ5MywxOTQ2LjU4OTAxMDUyMTUyNDYsMTY5MC44MDg5OTUyMzgwMDQ5LDIxMTMuOTM2OTc3ODM4MjIyLDQyOS4yNzg0MzQzOTIxNjQzLDI1MDkuNDgyNDg3ODczNzg1LDQ5Ni42NDEwNDkyNzE4ODYyLDEzMTguMzkwODI1NTI3MzQ2NiwxMTc4LjQwMTA5MzM1MDEyNjgsMjcwNS4xMjI4NzE5MDUwMjUsMTk1OS43NTQ3MDkwMDU1MTc1LDU1MS4xNTU3MDU4NjgxOTEzLDE2MDQuMTEzMzA2NTAzMDg3NCwxMDY4LjI5NDU5NDMzNzcyNywxNTc4LjIwNjI2ODI4NTAwNDksMTc1Mi41NTgwNTg4Nzc3NTEsMTU1OS4wNTkzNTM4MDE2NDg3LDM1NTMuODQyMDY0MDY2NTA5LDIyNi42MzQ2NTAxNzQzNjIzOCwyLjgzNzY2MTE1MjEzNDgxODcKKzE0LE1vbiA3IEZlYiAxMSwxMzUuMjQ2NTM0OTUwOTEyNiwxMjAuNzU1NDA5MTY4ODc4MTcsNzAuMjg5NDc2OTQ3Njg4NiwxNDUuMzA2ODEyMDE5MTY1MTYsMTQ2LjQ2NzgwNzEzNTc0ODUzLDIzNjcuNzA5NTE1MDAxNjg3LDI1NzIuOTg3NDc3MDU3OTUyNywyMTA4LjgwODk3OTA0NzIwNTQsMTgzMS43MTM0MDgyOTQ4NTM1LDIyOTAuMTAyOTcyODk3NjA3Nyw0NjUuMDUyNTY3MzcwMTMzNDMsMjcxOC42MTE0NjU3OTI3Mzc0LDUzOC4wMjg4Nzk0NDM1MjY0LDE0MjguMjU5NTg0MTk0NzQyLDEyNzYuNjAzNzM3Njg4ODM2MiwyOTMwLjU1NTYzOTA1MTM3MDIsMjEyMy4wNzE4NDc1OTc0NzcsNTk3LjA4NjU0MjIwNTcxNTUsMTczNy43OTI4OTA5ODk2MTQsMTE1Ny4zMjE0NTg1MjU3NjE3LDE3MDkuNzI2ODc2Nzg3NTg0NCwxODk4LjYwODM2MTAyODc5NzgsMTY4OC45ODQzNDQ2MTE5MTM1LDM4NTAuMDAzMjY5NDY4MzksMjQ1LjUyMTM2MjA2ODU1MDk5LDMuMDc0MTM5MDYzMTM1OTMzCisxNSxUdWUgOCBGZWIgMTEsMTQ1LjY1MDQwNTg2NTY2MzM3LDEzMC4wNDQ1NDY4ODg0Mjc5Myw3NS42OTY1MTExODQwNTE5OSwxNTYuNDg0NTcyMDY5MjEwMzQsMTU3LjczNDg3NzAwMzA4MzksMjU0OS44NDYxMTU4ODg2OTI2LDI3NzAuOTE1MTMyNTUyMzk2LDIyNzEuMDI5NTk2NDU0MDU4LDE5NzIuNjE4Mzg0OTcwNDgxNywyNDY2LjI2OTY3MjYyMjM4NCw1MDAuODI2ODQzNDQ0OTIwNzcsMjkyNy43NDEyODAyMjkyNzU2LDU3OS40MTY4NzUxNjY4MTg3LDE1MzguMTI4NzgyMzM4MDQ5OSwxMzc0LjgwNjc3NDgzODkwODMsMzE1NS45ODkzMDc5MzA1ODcsMjI4Ni4zODk2Mzk0NTkyOTc1LDY0My4wMTc1NjIyNjY5NTI2LDE4NzEuNDczMDEwMTk1NTQ4OCwxMjQ2LjM0ODY3ODgyMTk2NTQsMTg0MS4yNDgwMTEzNzM2NTA2LDIwNDQuNjU5MjQ3MzgyMjIyNywxODE4LjkwOTg1NTEyMzE4MTIsNDE0Ni4xNjU2NTk1MTc0NjIsMjY0LjQwODE0OTUwOTczODMsMy4zMTA2MTc5MjAwNTA1ODQKKzE2LFdlZCA5IEZlYiAxMSwxNTYuMDU0MzE4Mzk1OTgxMDgsMTM5LjMzMzcyMTc2NDYwMjg0LDgxLjEwMzU2NzA0ODU5NTU4LDE2Ny42NjIzNzY4MzAzODUyMywxNjkuMDAxOTkxOTM4Nzg4ODgsMjczMS45ODM0NDUzMjM1NTgsMjk2OC44NDM1Nzk3NTkwNDMsMjQzMy4yNTA4NjI3NDQ2NzY0LDIxMTMuNTIzOTI1MjY3MTQ0LDI2NDIuNDM3MDc3MDE1MzY4Miw1MzYuNjAxMjYyNjE3MDk4MywzMTM2Ljg3MTkzMTE4Njc0NDQsNjIwLjgwNTAzNjQ0MjQyNDgsMTY0Ny45OTg0MTk5NTkwMzAxLDE0NzMuMDEwMjA0ODAxOTE0OCwzMzgxLjQyMzg3ODU0NjI4MzUsMjQ0OS43MDgwODQ1OTM1OTI1LDY4OC45NDg3NjYwNTI2MzcyLDIwMDUuMTUzNjY0MTIzMDMsMTMzNS4zNzYyNTUyMjc3NjMsMTk3Mi43Njk2NzIwNDUzMDY2LDIxOTAuNzEwNzE3OTQwMzYsMTk0OC44MzU4ODUzMzc1Myw0NDQyLjMyOTIzNDIxODQ2NiwyODMuMjk1MDEyNDk4MjI2NCwzLjU0NzA5NzcyMjg4MjU1MjQKKzE3LFRodSAxMCBGZWIgMTEsMTY2LjQ1ODI3MjU0MjAzMjIzLDE0OC42MjI5MzM3OTc1NTE2NCw4Ni41MTA2NDQ1NDE0MDU5LDE3OC44NDAyMjYzMDI4Njg2LDE4MC4yNjkxNTE5NDMwNDM3NCwyOTE0LjEyMTUwMzMwOTE5OTQsMzE2Ni43NzI4MTg2ODEwNjQsMjU5NS40NzI3Nzc5MjE2NjEsMjI1NC40MzAwMjkxODcwOTU0LDI4MTguNjA1MTg2MDc5Mzc5LDU3Mi4zNzU4MjQ4ODcyMzkzLDMzNDYuMDAzNDE4NjY4NDkwNyw2NjIuMTkzMzYzMjcxMDA3NSwxNzU3Ljg2ODQ5NzA1OTQ0MDksMTU3MS4yMTQwMjc1Nzk0Mjc3LDM2MDYuODU5MzUwOTAyMDY3LDI2MTMuMDI3MTgzMDAyOTc1LDczNC44ODAxNTM1NjM1MDUsMjEzOC44MzQ4NTI3NzQxOTY0LDE0MjQuNDA0MTg3NzQ0NTc4MiwyMTA0LjI5MTg1ODgwNDY1ODcsMjMzNi43NjI3NzI3MDU1NSwyMDc4Ljc2MjQzNTI1NzAzOSw0NzM4LjQ5Mzk5MzU3NjEzNywzMDIuMTgxOTUxMDM0MzE3OCwzLjc4MzU3ODQ3MTYzNTYyNzMKKzE4LEZyaSAxMSBGZWIgMTEsMTc2Ljg2MjI2ODMwMzk4MzE0LDE1Ny45MTIxODI5ODc0MjI4NSw5MS45MTc3NDM2NjI1Njk0NCwxOTAuMDE4MTIwNDg2ODM5MjIsMTkxLjUzNjM1NzAxNjAyODcsMzA5Ni4yNjAyODk4NDg1MjksMzM2NC43MDI4NDkzMjE2MjMsMjc1Ny42OTUzNDE5ODc2MDI3LDIzOTUuMzM2Njk2NzMyNTg4NywyOTk0Ljc3Mzk5OTgxNzIzNTYsNjA4LjE1MDUzMDI1NTkxNTIsMzU1NS4xMzU3NDI2Nzc4Niw3MDMuNTgxODU1NjUzMjI4MSwxODY3LjczOTAxMzY0MTAzOCwxNjY5LjQxODI0MzE3MzAxNzEsMzgzMi4yOTU3MjUwMDE1NDIsMjc3Ni4zNDY5MzQ2OTAwNTgzLDc4MC44MTE3MjQ4MDAyODk4LDIyNzIuNTE2NTc2MTUxMTg3NiwxNTEzLjQzMjQ3NjM3MzgzNjIsMjIzNS44MTQ1NzE2NTM4MSwyNDgyLjgxNTQxMTY4MDEyODQsMjIwOC42ODk1MDQ4ODM3ODczLDUwMzQuNjU5OTM3NTk1MjE0LDMyMS4wNjg5NjUxMTgzMTQzLDQuMDIwMDYwMTY2MzEzNTg4CisxOSxTYXQgMTIgRmViIDExLDE4Ny4yNjYzMDU2ODIwMDAzNCwxNjcuMjAxNDY5MzM0MzY1MTksOTcuMzI0ODY0NDEyMTcyNzcsMjAxLjE5NjA1OTM4MjQ3NiwyMDIuODAzNjA3MTU3OTI0MTgsMzI3OC4zOTk4MDQ5NDQ0NjIsMzU2Mi42MzM2NzE2ODM4ODksMjkxOS45MTg1NTQ5NDUwOTk1LDI1MzYuMjQzOTI3OTA1ODgxLDMxNzAuOTQzNTE4MjMxNzU2LDY0My45MjUzNzg3MjM2OTg5LDM3NjQuMjY4OTAzMjE4MTk4LDc0NC45NzA1MTM1ODk3NDkyLDE5NzcuNjA5OTY5NzA1NTgwNCwxNzY3LjYyMjg1MTU4NDI1NDIsNDA1Ny43MzMwMDA4NDgzMTgsMjkzOS42NjczMzk2NTc0NTUsODI2Ljc0MzQ3OTc2MzcyNywyNDA2LjE5ODgzNDI1NjE0MSwxNjAyLjQ2MTEyMTExNjk2MDgsMjM2Ny4zMzc4MTA1OTQ4NjQsMjYyOC44Njg2MzQ4NjY0MywyMzM4LjYxNzA5NDIxOTg1NCw1MzMwLjgyNzA2NjI4MDQzNSwzMzkuOTU2MDU0NzUwNTE4MjYsNC4yNTY1NDI4MDY5MjAyMjIKKzIwLFN1biAxMyBGZWIgMTEsMTk3LjY3MDM4NDY3NjI1MDM2LDE3Ni40OTA3OTI4Mzg1MjcyLDEwMi43MzIwMDY3OTAzMDIzOCwyMTIuMzc0MDQyOTg5OTU3OTMsMjE0LjA3MDkwMjM2ODkxMDMsMzQ2MC41NDAwNDg1OTk5MTQ0LDM3NjAuNTY1Mjg1NzcxMDI4NCwzMDgyLjE0MjQxNjc5Njc0NTIsMjY3Ny4xNTE3MjI3MDkyMjQ1LDMzNDcuMTEzNzQxMzI1NzYsNjc5LjcwMDM3MDI5MTE2MjcsMzk3My40MDI5MDAyOTI4NTE0LDc4Ni4zNTkzMzcwODEyMzM4LDIwODcuNDgxMzY1MjU0ODI2LDE4NjUuODI3ODUyODE0NzExMiw0MjgzLjE3MTE3ODQ0NjAwMSwzMTAyLjk4ODM5NzkwNzc3OCw4NzIuNjc1NDE4NDU0NTUyMiwyNTM5Ljg4MTYyNzA5MTE5OCwxNjkxLjQ5MDEyMTk3NTM3NjUsMjQ5OC44NjE1NzU2Mjk5MjczLDI3NzQuOTIyNDQyMjY2NzkzLDI0NjguNTQ1MjAzMjY3MzE3NCw1NjI2Ljk5NTM3OTYzNjU0MzUsMzU4Ljg0MzIxOTkzMTIzMTcsNC40OTMwMjYzOTM0NTkzMDkKKzIxLE1vbiAxNCBGZWIgMTEsMjA4LjA3NDUwNTI4Njg5OTQsMTg1Ljc4MDE1MzUwMDA1NzUsMTA4LjEzOTE3MDc5NzA0NDcxLDIyMy41NTIwNzEzMDk0NjM1NywyMjUuMzM4MjQyNjQ5MTY3NDYsMzY0Mi42ODEwMjA4MTc3OTc2LDM5NTguNDk3NjkxNTg2MjA1MywzMjQ0LjM2NjkyNzU0NTEzNiwyODE4LjA2MDA4MTE0NDg3NCwzNTIzLjI4NDY2OTEwMjA2NTQsNzE1LjQ3NTUwNDk1ODg3ODYsNDE4Mi41Mzc3MzM5MDUxNjYsODI3Ljc0ODMyNjEyODM0MzEsMjE5Ny4zNTMyMDAyOTA1MzEzLDE5NjQuMDMzMjQ2ODY1OTU4Myw0NTA4LjYxMDI1Nzc5ODE5NiwzMjY2LjMxMDEwOTQ0MzYzOSw5MTguNjA3NTQwODczNDk4OSwyNjczLjU2NDk1NDY1ODQ5MzcsMTc4MC41MTk0Nzg5NTA1MDc2LDI2MzAuMzg1ODY2NzYxMTAxNiwyOTIwLjk3NjgzMzg4MzU1MzQsMjU5OC40NzM4MzIwMjgyNTU0LDU5MjMuMTY0ODc3NjY4MjcwNSwzNzcuNzMwNDYwNjYwNzU3MSw0LjcyOTUxMDkyNTkzNDYzMTUKKzIyLFR1ZSAxNSBGZWIgMTEsMjE4LjQ3ODY2NzUxNDExNDAyLDE5NS4wNjk1NTEzMTkxMDQ2NSwxMTMuNTQ2MzU2NDMyNDg2MjgsMjM0LjczMDE0NDM0MTE3MTg3LDIzNi42MDU2Mjc5OTg4NzU2NiwzODI0LjgyMjcyMTYwMTAyNCw0MTU2LjQzMDg4OTEzMjU4OCwzNDA2LjU5MjA4NzE5Mjg2NiwyOTU4Ljk2OTAwMzIxNTA4NCwzNjk5LjQ1NjMwMTU2MzQ5LDc1MS4yNTA3ODI3Mjc0MTk2LDQzOTEuNjczNDA0MDU4NDg2LDg2OS4xMzc0ODA3MzE3Mzk3LDIzMDcuMjI1NDc0ODE0NDU2LDIwNjIuMjM5MDMzNzM5NTY3LDQ3MzQuMDUwMjM4OTA4NTEyLDM0MjkuNjMyNDc0MjY3NjUwNyw5NjQuNTM5ODQ3MDIxMzAyNCwyODA3LjI0ODgxNjk2MDE2NywxODY5LjU0OTE5MjA0Mzc3OCwyNzYxLjkxMDY4Mzk5MDQ5MiwzMDY3LjAzMTgwOTcxOTA0NywyNzI4LjQwMjk4MDUwNDc0Nyw2MjE5LjMzNTU2MDM4MDM1OCwzOTYuNjE3Nzc2OTM5Mzk2MjYsNC45NjU5OTY0MDQzNDk5NzUKKzIzLFdlZCAxNiBGZWIgMTEsMjI4Ljg4Mjg3MTM1ODA2MTA3LDIwNC4zNTg5ODYyOTU4MTc1NywxMTguOTUzNTYzNjk2NzEzNzMsMjQ1LjkwODI2MjA4NTI2MTg0LDI0Ny44NzMwNTg0MTgyMTU3LDQwMDYuOTY1MTUwOTUyNTE0Myw0MzU0LjM2NDg3ODQxMzM0OCwzNTY4LjgxNzg5NTc0MjUzNiwzMDk5Ljg3ODQ4ODkyMjExMTUsMzg3NS42Mjg2Mzg3MTI4NTY2LDc4Ny4wMjYyMDM1OTczNTg1LDQ2MDAuODA5OTEwNzU2MTY1LDkxMC41MjY4MDA4OTIwODY3LDI0MTcuMDk4MTg4ODI4MzYsMjE2MC40NDUyMTM0MzcxMTEsNDk1OS40OTExMjE3ODA1NTksMzU5Mi45NTU0OTIzODI0MzQ0LDEwMTAuNDcyMzM2ODk4Njk4OSwyOTQwLjkzMzIxMzk5ODM2MjYsMTk1OC41NzkyNjEyNTY2MTU0LDI4OTMuNDM2MDI3MzIwMjA1NSwzMjEzLjA4NzM2OTc3NTYxNjUsMjg1OC4zMzI2NDg2OTg4NzQ0LDY1MTUuNTA3NDI3Nzc3NTUzLDQxNS41MDUxNjg3Njc0NTIyMyw1LjIwMjQ4MjgyODcwOTEyOAorMjQsVGh1IDE3IEZlYiAxMSwyMzkuMjg3MTE2ODE4OTA2NTgsMjEzLjY0ODQ1ODQzMDM0NDY4LDEyNC4zNjA3OTI1ODk4MTM0NCwyNTcuMDg2NDI0NTQxOTEyMjcsMjU5LjE0MDUzMzkwNzM2NzQ2LDQxODkuMTA4MzA4ODc1MTc4LDQ1NTIuMjk5NjU5NDMxNjQ4LDM3MzEuMDQ0MzUzMTk2NzM2NywzMjQwLjc4ODUzODI2ODIwNjYsNDA1MS44MDE2ODA1NTI5ODA1LDgyMi44MDE3Njc1NjkyNjY4LDQ4MDkuOTQ3MjU0MDAxNTQyLDk1MS45MTYyODY2MTAwNDQ4LDI1MjYuOTcxMzQyMzMzOTk2MywyMjU4LjY1MTc4NTk2MDE1NzcsNTE4NC45MzI5MDY0MTc5MzYsMzc1Ni4yNzkxNjM3OTA1OTUsMTA1Ni40MDUwMTA1MDY0MjIzLDMwNzQuNjE4MTQ1Nzc1MjE0LDIwNDcuNjA5Njg2NTkwNDQsMzAyNC45NjE4OTY3NTIzNDIsMzM1OS4xNDM1MTQwNTU1OTI3LDI5ODguMjYyODM2NjEyNzEzMyw2ODExLjY4MDQ3OTg2NDU4MSw0MzQuMzkyNjM2MTQ1MjI2Myw1LjQzODk3MDE5OTAxNTg2OAorMjUsRnJpIDE4IEZlYiAxMSwyNDkuNjkxNDAzODk2ODE3MjYsMjIyLjkzNzk2NzcyMjgzNDcsMTI5Ljc2ODA0MzExMTg3MTk1LDI2OC4yNjQ2MzE3MTEzMDE5LDI3MC40MDgwNTQ0NjY1MTE0LDQzNzEuMjUyMTk1MzcxOTI4LDQ3NTAuMjM1MjMyMTkwNjU2LDM4OTMuMjcxNDU5NTU4MDY1NSwzMzgxLjY5OTE1MTI1NTYyOSw0MjI3Ljk3NTQyNzA4NjY3OSw4NTguNTc3NDc0NjQzNzE3MSw1MDE5LjA4NTQzMzc5Nzk2Niw5OTMuMzA1OTM3ODg2Mjc3MSwyNjM2Ljg0NDkzNTMzMzEyNzUsMjM1Ni44NTg3NTEzMTAyNzkzLDU0MTAuMzc1NTkyODI0MjU2LDM5MTkuNjAzNDg4NDk0NzQ3LDExMDIuMzM3ODY3ODQ1MjA2OCwzMjA4LjMwMzYxMjI5Mjg2MSwyMTM2LjY0MDQ2ODA0NjY3ODUsMzE1Ni40ODgyOTIyODkwMDk3LDM1MDUuMjAwMjQyNTYxMzEzNiwzMTE4LjE5MzU0NDI0ODM0Myw3MTA3Ljg1NDcxNjY0NjE4Nyw0NTMuMjgwMTc5MDczMDIxMSw1LjY3NTQ1ODUxNTI3Mzk4MgorMjYsU2F0IDE5IEZlYiAxMSwyNjAuMDk1NzMyNTkxOTU5NDYsMjMyLjIyNzUxNDE3MzQzNjE2LDEzNS4xNzUzMTUyNjI5NzU4NiwyNzkuNDQyODgzNTkzNjA5NDUsMjgxLjY3NTYyMDA5NTgyNzQ3LDQ1NTMuMzk2ODEwNDQ1Njg0LDQ5NDguMTcxNTk2NjkzNTM0LDQwNTUuNDk5MjE0ODI5MTE4LDM1MjIuNjEwMzI3ODg2NjI4NSw0NDA0LjE0OTg3ODMxNjc3NSw4OTQuMzUzMzI0ODIxMjgxOCw1MjI4LjIyNDQ1MDE0ODc4MSwxMDM0LjY5NTc1NDcyMTQ0NTYsMjc0Ni43MTg5Njc4Mjc1MSwyNDU1LjA2NjEwOTQ4OTA0ODQsNTYzNS44MTkxODEwMDMxMjgsNDA4Mi45Mjg0NjY0OTc1MDQ0LDExNDguMjcwOTA4OTE1Nzg4MSwzMzQxLjk4OTYxMzU1MzQ0NDUsMjIyNS42NzE2MDU2MjY3NTUsMzI4OC4wMTUyMTM5MzIzMTA0LDM2NTEuMjU3NTU1Mjk1MTE3NSwzMjQ4LjEyNDc3MTYwNzg0MzMsNzQwNC4wMzAxMzgxMjcxMTIsNDcyLjE2Nzc5NzU1MTEzODYsNS45MTE5NDc3Nzc0ODcyNTIKKzI3LFN1biAyMCBGZWIgMTEsMjcwLjUwMDEwMjkwNDQ5OTcsMjQxLjUxNzA5Nzc4MjI5NzY3LDE0MC41ODI2MDkwNDMyMTE1MywyOTAuNjIxMTgwMTg5MDE0LDI5Mi45NDMyMzA3OTU0OTYzMyw0NzM1LjU0MjE1NDA5OTM1Niw1MTQ2LjEwODc1Mjk0MzQ2LDQyMTcuNzI3NjE5MDEyNDg4LDM2NjMuNTIyMDY4MTYzNDYyMyw0NTgwLjMyNTAzNDI0NjA4NCw5MzAuMTI5MzE4MTAyNTMzNCw1NDM3LjM2NDMwMzA1NzMzNiwxMDc2LjA4NTczNzExNjIxMiwyODU2LjU5MzQzOTgxODkwMDYsMjU1My4yNzM4NjA0OTgwMzcsNTg2MS4yNjM2NzA5NTgxNTMsNDI0Ni4yNTQwOTc4MDE0OCwxMTk0LjIwNDEzMzcxODkwMTQsMzQ3NS42NzYxNDk1NTkxMDMsMjMxNC43MDMwOTkzMzIwOTQ2LDM0MTkuNTQyNjYxNjg0MzUxNSwzNzk3LjMxNTQ1MjI1OTM0MTMsMzM3OC4wNTY1MTg2OTMyOTIsNzcwMC4yMDY3NDQzMTIwOTMsNDkxLjA1NTQ5MTU3OTg4MTA1LDYuMTQ4NDM3OTg1NjU5NDYyCisyOCxNb24gMjEgRmViIDExLDI4MC45MDQ1MTQ4MzQ2MDQ0LDI1MC44MDY3MTg1NDk1NjgwNywxNDUuOTg5OTI0NDUyNjY1NzIsMzAxLjc5OTUyMTQ5NzY5NDU3LDMwNC4yMTA4ODY1NjU2OTgzMyw0OTE3LjY4ODIyNjMzNTg2NCw1MzQ0LjA0NjcwMDk0MzU5MTUsNDM3OS45NTY2NzIxMTA3NzUsMzgwNC40MzQzNzIwODgzODM1LDQ3NTYuNTAwODk0ODc3NDMsOTY1LjkwNTQ1NDQ4ODA0NDUsNTY0Ni41MDQ5OTI1MjY5NzUsMTExNy40NzU4ODUwNzEyMzkyLDI5NjYuNDY4MzUxMzA5MDU5NSwyNjUxLjQ4MjAwNDMzODgxNSw2MDg2LjcwOTA2MjY5Mjk0NSw0NDA5LjU4MDM4MjQwOTI4OSwxMjQwLjEzNzU0MjI1NTI4MiwzNjA5LjM2MzIyMDMxMTk3NTUsMjQwMy43MzQ5NDkxNjQxMjIsMzU1MS4wNzA2MzU1NDcyMzcsMzk0My4zNzM5MzM0NTYzMjE1LDM1MDcuOTg4Nzg1NTA2NzcsNzk5Ni4zODQ1MzUyMDU4NjksNTA5Ljk0MzI2MTE1OTU1MDg0LDYuMzg0OTI5MTM5Nzk0NDAxCisyOSxUdWUgMjIgRmViIDExLDI5MS4zMDg5NjgzODI0Mzk5NiwyNjAuMDk2Mzc2NDc1Mzk1NywxNTEuMzk3MjYxNDkxNDI0NywzMTIuOTc3OTA3NTE5ODI5NiwzMTUuNDc4NTg3NDA2NjEzMyw1MDk5LjgzNTAyNzE1ODExMyw1NTQxLjk4NTQ0MDY5NzA5Niw0NTQyLjE4NjM3NDEyNjU2OCwzOTQ1LjM0NzIzOTY2MzY0ODUsNDkzMi42Nzc0NjAyMTM2MjQsMTAwMS42ODE3MzM5NzgzODcyLDU4NTUuNjQ2NTE4NTYxMDQyLDExNTguODY2MTk4NTg3MTg5NywzMDc2LjM0MzcwMjI5OTc0MjMsMjc0OS42OTA1NDEwMTI5NTQsNjMxMi4xNTUzNTYyMTExMDUsNDU3Mi45MDczMjAzMjM1NDMsMTI4Ni4wNzExMzQ1MjU2NjM5LDM3NDMuMDUwODI1ODE0MTk5NSwyNDkyLjc2NzE1NTEyNDI1OSwzNjgyLjU5OTEzNTUyMzA2ODUsNDA4OS40MzI5OTg4ODgzOTM3LDM2MzcuOTIxNTcyMDUwMzUyLDgyOTIuNTYzNTEwODEzMTc2LDUyOC44MzExMDYyOTA0NDk3LDYuNjIxNDIxMjM5ODk1ODQ0CiszMCxXZWQgMjMgRmViIDExLDMwMS43MTM0NjM1NDgxNzMsMjY5LjM4NjA3MTU1OTkyOTQsMTU2LjgwNDYyMDE1OTU3NTE0LDMyNC4xNTYzMzgyNTU1OTgyNiwzMjYuNzQ2MzMzMzE4NDIxNzYsNTI4MS45ODI1NTY1NjkwMjUsNTczOS45MjQ5NzIyMDcxNDUsNDcwNC40MTY3MjUwNjI0Nyw0MDg2LjI2MDY3MDg5MTUxMSw1MTA4Ljg1NDczMDI1NzQ4OSwxMDM3LjQ1ODE1NjU3NDEzNDEsNjA2NC43ODg4ODExNjI4ODcsMTIwMC4yNTY2Nzc2NjQ3MjU0LDMxODYuMjE5NDkyNzkyNzA3NiwyODQ3Ljg5OTQ3MDUyMjAyNCw2NTM3LjYwMjU1MTUxNjI0Myw0NzM2LjIzNDkxMTU0Njg1NSwxMzMyLjAwNDkxMDUzMDc4MjEsMzg3Ni43Mzg5NjYwNjc5MTQ2LDI1ODEuNzk5NzE3MjEzOTMzLDM4MTQuMTI4MTYxNjEzOTUyNyw0MjM1LjQ5MjY0ODU1Nzg5NiwzNzY3Ljg1NDg3ODMyNjEyMTMsODU4OC43NDM2NzExMzg3NTMsNTQ3LjcxOTAyNjk3Mjg4MDQsNi44NTc5MTQyODU5Njc1OAorMzEsVGh1IDI0IEZlYiAxMSwzMTIuMTE4MDAwMzMxOTcsMjc4LjY3NTgwMzgwMzMxNzc2LDE2Mi4yMTIwMDA0NTcyMDM1MiwzMzUuMzM0ODEzNzA1MTc5MywzMzguMDE0MTI0MzAxMzA0MTUsNTQ2NC4xMzA4MTQ1NzE1MTMsNTkzNy44NjUyOTU0NzY5MDUsNDg2Ni42NDc3MjQ5MjEwNzQsNDIyNy4xNzQ2NjU3NzQyMjcsNTI4NS4wMzI3MDUwMTE4NDUsMTA3My4yMzQ3MjIyNzU4NTc0LDYyNzMuOTMyMDgwMzM1ODU2LDEyNDEuNjQ3MzIyMzA0NTA4NiwzMjk2LjA5NTcyMjc4OTcxNDcsMjk0Ni4xMDg3OTI4Njc1OTg0LDY3NjMuMDUwNjQ4NjExOTY5LDQ4OTkuNTYzMTU2MDgxODM3LDEzNzcuOTM4ODcwMjcxMzcyNSw0MDEwLjQyNzY0MTA3NTI2MTQsMjY3MC44MzI2MzU0MzQ1NjgsMzk0NS42NTc3MTM4MjE5OTQsNDM4MS41NTI4ODI0NjcxNjY1LDM4OTcuNzg4NzA0MzM2MTU1LDg4ODQuOTI1MDE2MTg3MzQ0LDU2Ni42MDcwMjMyMDcxNDUsNy4wOTQ0MDgyNzgwMTMzOTQKKzMyLEZyaSAyNSBGZWIgMTEsMzIyLjUyMjU3ODczMzk5NzMsMjg3Ljk2NTU3MzIwNTcwOTM1LDE2Ny42MTk0MDIzODQzOTYzLDM0Ni41MTMzMzM4Njg3NTE1NCwzNDkuMjgxOTYwMzU1NDQwNDUsNTY0Ni4yNzk4MDExNjg0ODcsNjEzNS44MDY0MTA1MDk1MzksNTAyOC44NzkzNzM3MDQ5NzUsNDM2OC4wODkyMjQzMTQwNDgsNTQ2MS4yMTEzODQ0Nzk1MSwxMTA5LjAxMTQzMTA4NDEzMDIsNjQ4My4wNzYxMTYwODMyOTUsMTI4My4wMzgxMzI1MDcyMDEyLDM0MDUuOTcyMzkyMjkyNTIsMzA0NC4zMTg1MDgwNTEyNDgsNjk4OC40OTk2NDc1MDE4ODQsNTA2Mi44OTIwNTM5MzExMDMsMTQyMy44NzMwMTM3NDgxNjg3LDQxNDQuMTE2ODUwODM4Mzc3LDI3NTkuODY1OTA5Nzg3NTg4LDQwNzcuMTg3NzkyMTQ5Mjk2LDQ1MjcuNjEzNzAwNjE4NTQxLDQwMjcuNzIzMDUwMDgyNTMxNyw5MTgxLjEwNzU0NTk2MzY4NSw1ODUuNDk1MDk0OTkzNTQ1NCw3LjMzMDkwMzIxNjAzNzA2OApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Jbm9jdWxhdGlvblRlc3RfUktfUmVmZXJlbmNlL0h1bWFuUG9wdWxhdGlvbk1vZGVsL2h1bWFuL0RlbnNpdHlfMC5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0lub2N1bGF0aW9uVGVzdF9SS19SZWZlcmVuY2UvSHVtYW5Qb3B1bGF0aW9uTW9kZWwvaHVtYW4vRGVuc2l0eV8wLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYzI0NDAxCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Jbm9jdWxhdGlvblRlc3RfUktfUmVmZXJlbmNlL0h1bWFuUG9wdWxhdGlvbk1vZGVsL2h1bWFuL0RlbnNpdHlfMC5jc3YKQEAgLTAsMCArMSBAQAoraXRlcmF0aW9uLHRpbWUsCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0lub2N1bGF0aW9uVGVzdF9SS19SZWZlcmVuY2UvSHVtYW5Qb3B1bGF0aW9uTW9kZWwvaHVtYW4vRGVuc2l0eV8xLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvSW5vY3VsYXRpb25UZXN0X1JLX1JlZmVyZW5jZS9IdW1hblBvcHVsYXRpb25Nb2RlbC9odW1hbi9EZW5zaXR5XzEuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJjMjQ0MDEKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0lub2N1bGF0aW9uVGVzdF9SS19SZWZlcmVuY2UvSHVtYW5Qb3B1bGF0aW9uTW9kZWwvaHVtYW4vRGVuc2l0eV8xLmNzdgpAQCAtMCwwICsxIEBACitpdGVyYXRpb24sdGltZSwKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvSW5vY3VsYXRpb25UZXN0X1JLX1JlZmVyZW5jZS9IdW1hblBvcHVsYXRpb25Nb2RlbC9odW1hbi9EZW5zaXR5XzIuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Jbm9jdWxhdGlvblRlc3RfUktfUmVmZXJlbmNlL0h1bWFuUG9wdWxhdGlvbk1vZGVsL2h1bWFuL0RlbnNpdHlfMi5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDdjZTUwNAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvSW5vY3VsYXRpb25UZXN0X1JLX1JlZmVyZW5jZS9IdW1hblBvcHVsYXRpb25Nb2RlbC9odW1hbi9EZW5zaXR5XzIuY3N2CkBAIC0wLDAgKzEsMzMgQEAKK2l0ZXJhdGlvbix0aW1lLEVHLUZSRy1HMjEwMDAxLEVHLUZSRy1HMjEwMDAyLEVHLUZSRy1HMjEwMDAzLEVHLUZSRy1HMjEwMDA0LEVHLUZSRy1HMjEwMDA1LEVHLUxPRS1HMjQwMDAxLEVHLUxPRS1HMjQwMDAyLEVHLUxPRS1HMjQwMDAzLEVHLUxPRS1HMjQwMDA0LEVHLUxPRS1HMjQwMDA1LEVHLUxPRS1HMjQwMDA2LEVHLUxPRS1HMjQwMDA3LEVHLUxPRS1HMjQwMDA4LEVHLUxPRS1HMjQwMDA5LEVHLVVQRS1HMjkwMDAxLEVHLVVQRS1HMjkwMDAyLEVHLVVQRS1HMjkwMDAzLEVHLVVQRS1HMjkwMDA0LEVHLVVQRS1HMjkwMDA1LEVHLVVQRS1HMjkwMDA2LEVHLVVQRS1HMjkwMDA3LEVHLVVQRS1HMjkwMDA4LEVHLVVSRy1HMzAwMDAxLEVHLVVSRy1HMzAwMDAyLEVHLVVSRy1HMzAwMDAzLEVHLVVSRy1HMzAwMDA0CisxLFR1ZSAyNSBKYW4gMTEsMS43MjM1NjcwMDY4NTUxMzg1LDAuNTg1Nzk0MDU1NTY1NTg1NSw1LjM2MjYwMjY4MTcyMTEwOCwyLjAxNDMxOTA4NDY3MDMxNDcsMTEuNzI2MjY1OTM4ODQzMDQsNDMxLjIwMjQ1NjA4NjQwMzc0LDE1MTQuNzI0NzY4NDA2MTcsMjM5Ni4zOTMyMjk4NzAyNjQsMjczNC4wNjYyMDg5NTM4ODgsNTM2OS43NDU1Mjk4NTY4NjUsMTgxLjI5NzkxMjI3NjI3OTQsMTE0Ni4yNjk0NTQ4Nzg2MTQ2LDE1ODkuMzE0OTMyMDk4MjQzOCw4MzcuMDk4MDk1NjQ0ODg4Niw0NDYuNzY2NTk2OTYyMDkxNzQsMTcxLjI3NDcwOTIxNzU3ODUsMjMzLjg2MjE0MDUyODc2NjQyLDgxLjUxNDQ0NTM2Mzk1NDg4LDE1NTMuOTgzNjk3NTgzODA1NSw1MTAuNDM0OTgxNTQzMjM1NCw5NzQuODcxMjYxMzE1MTk2NiwxNTg0LjUxMzIyOTE1OTUwNTcsMTUyOC45Mzg1NDE5MjU1NzIzLDI2NzguNzM2NzEwOTU4MDI2LDYxLjQ1MDEwMzU3NDg5MTc0LDE3LjM1NDY3MjI5ODMzNzY2NQorMixXZWQgMjYgSmFuIDExLDEuNzIzNTczOTAxMTM2OTUzMywwLjU4NTc5NjM5ODc0NjQ5NDEsNS4zNjI2MjQxMzIxNzQ3MzgsMi4wMTQzMjcxNDE5NjI3NjY2LDExLjcyNjMxMjg0NDAwMDYwMyw0MzEuMjA0MTgwODk5Njc3OSwxNTE0LjczMDgyNzMxNzM2MDUsMjM5Ni40MDI4MTU0NjIzNTQ3LDI3MzQuMDc3MTQ1MjQwNTk1LDUzNjkuNzY3MDA4ODgxOTM1LDE4MS4yOTg2Mzc0NjkzNzg5LDExNDYuMjc0MDM5OTY1NjAzOCwxNTg5LjMyMTI4OTM3MDY4Nyw4MzcuMTAxNDQ0MDQzOTY3Nyw0NDYuNzY4Mzg0MDMyMDU0MDMsMTcxLjI3NTM5NDMxNzc4NTU4LDIzMy44NjMwNzU5NzkxOTk2NCw4MS41MTQ3NzE0MjIzODg0MywxNTUzLjk4OTkxMzUzMTAyNzcsNTEwLjQzNzAyMzI4NzI0NTMsOTc0Ljg3NTE2MDgwODA0MDUsMTU4NC41MTk1NjcyMjUwOTg0LDE1MjguOTQ0NjU3NjkxOTcwOSwyNjc4Ljc0NzQyNTkyNjMwMTcsNjEuNDUwMzQ5Mzc1Nzk3NywxNy4zNTQ3NDE3MTcxNjU2OTUKKzMsVGh1IDI3IEphbiAxMSwxLjcyMzU4MDc5NTQ0NjM0NiwwLjU4NTc5ODc0MTkzNjc3NTUsNS4zNjI2NDU1ODI3MTQxNjksMi4wMTQzMzUxOTkyODc0NDgzLDExLjcyNjM1OTc0OTM0NTc5LDQzMS4yMDU5MDU3MTk4NTExNiwxNTE0LjczNjg4NjI1Mjc4OCwyMzk2LjQxMjQwMTA5Mjc4OCwyNzM0LjA4ODA4MTU3MTA0OTMsNTM2OS43ODg0ODc5OTI5MzI1LDE4MS4yOTkzNjI2NjUzNzkxNiwxMTQ2LjI3ODYyNTA3MDkzNCwxNTg5LjMyNzY0NjY2ODU1OTcsODM3LjEwNDc5MjQ1NjQ0MDgsNDQ2Ljc3MDE3MTEwOTE2NDQsMTcxLjI3NjA3OTQyMDczMzA4LDIzMy44NjQwMTE0MzMzNzQ0Niw4MS41MTUwOTc0ODIxMjYyNywxNTUzLjk5NjEyOTUwMzExNCw1MTAuNDM5MDY1MDM5NDIyMTMsOTc0Ljg3OTA2MDMxNjQ4MjcsMTU4NC41MjU5MDUzMTYwNDM1LDE1MjguOTUwNzczNDgyODMyOCwyNjc4Ljc1ODE0MDkzNzQzNTcsNjEuNDUwNTk1MTc3Njg2Nzg2LDE3LjM1NDgxMTEzNjI3MTQKKzQsRnJpIDI4IEphbiAxMSwxLjcyMzU4NzY4OTc4MzMxNjIsMC41ODU4MDEwODUxMzY0Mjk2LDUuMzYyNjY3MDMzMzM5Mzk5LDIuMDE0MzQzMjU2NjQ0MzYsMTEuNzI2NDA2NjU0ODc4NTk4LDQzMS4yMDc2MzA1NDY5MjM1NSwxNTE0Ljc0Mjk0NTIxMjQ1MTMsMjM5Ni40MjE5ODY3NjE1NjM0LDI3MzQuMDk5MDE3OTQ1MjQ4Myw1MzY5LjgwOTk2NzE4OTg0MiwxODEuMzAwMDg3ODY0MjgwMjQsMTE0Ni4yODMyMTAxOTQ2MDM3LDE1ODkuMzM0MDAzOTkxODYwOCw4MzcuMTA4MTQwODgyMzA3MSw0NDYuNzcxOTU4MTkzNDIyOCwxNzEuMjc2NzY0NTI2NDIwOTUsMjMzLjg2NDk0Njg5MTI5MTA1LDgxLjUxNTQyMzU0MzE2ODMxLDE1NTQuMDAyMzQ1NTAwMDY0Miw1MTAuNDQxMTA2Nzk5NzY2MDMsOTc0Ljg4Mjk1OTg0MDUyMywxNTg0LjUzMjI0MzQzMjM0MTEsMTUyOC45NTY4ODkyOTgxNTgzLDI2NzguNzY4ODU1OTkxNDI5NSw2MS40NTA4NDA5ODA1NTkxMSwxNy4zNTQ4ODA1NTU2NTQ3OQorNSxTYXQgMjkgSmFuIDExLDEuNzIzNTk0NTg0MTQ3ODY0MiwwLjU4NTgwMzQyODM0NTQ1NjQsNS4zNjI2ODg0ODQwNTA0MzIsMi4wMTQzNTEzMTQwMzM1MDEsMTEuNzI2NDUzNTYwNTk5MDMsNDMxLjIwOTM1NTM4MDg5NTQzLDE1MTQuNzQ5MDA0MTk2MzUsMjM5Ni40MzE1NzI0Njg2ODMsMjczNC4xMDk5NTQzNjMxOTMsNTM2OS44MzE0NDY0NzI2NjksMTgxLjMwMDgxMzA2NjA4MjEsMTE0Ni4yODc3OTUzMzY2MTQ0LDE1ODkuMzQwMzYxMzQwNTkxNSw4MzcuMTExNDg5MzIxNTY3OCw0NDYuNzczNzQ1Mjg0ODI5OCwxNzEuMjc3NDQ5NjM0ODQ5MjYsMjMzLjg2NTg4MjM1Mjk0OTY1LDgxLjUxNTc0OTYwNTUxNDYzLDE1NTQuMDA4NTYxNTIxODc4NCw1MTAuNDQzMTQ4NTY4Mjc2Niw5NzQuODg2ODU5MzgwMTYxNiwxNTg0LjUzODU4MTU3Mzk5MSwxNTI4Ljk2MzAwNTEzNzk0NzIsMjY3OC43Nzk1NzEwODgyODMzLDYxLjQ1MTA4Njc4NDQxNDYyLDE3LjM1NDk0OTk3NTMxNTg1NAorNixTdW4gMzAgSmFuIDExLDEuNzIzNjAxNDc4NTM5OTkwMiwwLjU4NTgwNTc3MTU2Mzg1NjIsNS4zNjI3MDk5MzQ4NDcyNjgsMi4wMTQzNTkzNzE0NTQ4NzIsMTEuNzI2NTAwNDY2NTA3MDgyLDQzMS4yMTEwODAyMjE3NjY1NywxNTE0Ljc1NTA2MzIwNDQ4NSwyMzk2LjQ0MTE1ODIxNDE0NSwyNzM0LjEyMDg5MDgyNDg4NCw1MzY5Ljg1MjkyNTg0MTQxNCwxODEuMzAxNTM4MjcwNzg0NzYsMTE0Ni4yOTIzODA0OTY5NjYyLDE1ODkuMzQ2NzE4NzE0NzUxLDgzNy4xMTQ4Mzc3NzQyMjE5LDQ0Ni43NzU1MzIzODMzODUxNSwxNzEuMjc4MTM0NzQ2MDE4MDgsMjMzLjg2NjgxNzgxODM1LDgxLjUxNjA3NTY2OTE2NTE2LDE1NTQuMDE0Nzc3NTY4NTU3LDUxMC40NDUxOTAzNDQ5NTQ1NCw5NzQuODkwNzU4OTM1Mzk4LDE1ODQuNTQ0OTE5NzQwOTk0LDE1MjguOTY5MTIxMDAyMTk4NiwyNjc4Ljc5MDI4NjIyNzk5OCw2MS40NTEzMzI1ODkyNTMzMywxNy4zNTUwMTkzOTUyNTQ1OTQKKzcsTW9uIDMxIEphbiAxMSwxLjcyMzYwODM3Mjk1OTY5MjcsMC41ODU4MDgxMTQ3OTE2MjkxLDUuMzYyNzMxMzg1NzI5OTExLDIuMDE0MzY3NDI4OTA4NDcyMywxMS43MjY1NDczNzI2MDI3NTIsNDMxLjIxMjgwNTA2OTUzNzA3LDE1MTQuNzYxMTIyMjM2ODU2LDIzOTYuNDUwNzQzOTk3OTQ5OCwyNzM0LjEzMTgyNzMzMDMyMDQsNTM2OS44NzQ0MDUyOTYwNzcsMTgxLjMwMjI2MzQ3ODM4ODI2LDExNDYuMjk2OTY1Njc1NjU4NCwxNTg5LjM1MzA3NjExNDM0LDgzNy4xMTgxODYyNDAyNjk3LDQ0Ni43NzczMTk0ODkwODg3NywxNzEuMjc4ODE5ODU5OTI3MTgsMjMzLjg2Nzc1MzI4NzQ5MjIzLDgxLjUxNjQwMTczNDExOTk1LDE1NTQuMDIwOTkzNjQwMDk5Myw1MTAuNDQ3MjMyMTI5Nzk5NSw5NzQuODk0NjU4NTA2MjMyNSwxNTg0LjU1MTI1NzkzMzM0OTcsMTUyOC45NzUyMzY4OTA5MTQ0LDI2NzguODAxMDAxNDEwNTczNSw2MS40NTE1NzgzOTUwNzUzLDE3LjM1NTA4ODgxNTQ3MTAxNAorOCxUdWUgMSBGZWIgMTEsMS43MjM2MTUyNjc0MDY5NzMxLDAuNTg1ODEwNDU4MDI4Nzc0OCw1LjM2Mjc1MjgzNjY5ODM1NiwyLjAxNDM3NTQ4NjM5NDMwMzMsMTEuNzI2NTk0Mjc4ODg2MDU4LDQzMS4yMTQ1Mjk5MjQyMDcsMTUxNC43NjcxODEyOTM0NjMyLDIzOTYuNDYwMzI5ODIwMDk3NywyNzM0LjE0Mjc2Mzg3OTUwMyw1MzY5Ljg5NTg4NDgzNjY1NywxODEuMzAyOTg4Njg4ODkyNTgsMTE0Ni4zMDE1NTA4NzI2OTEyLDE1ODkuMzU5NDMzNTM5MzU5LDgzNy4xMjE1MzQ3MTk3MTE1LDQ0Ni43NzkxMDY2MDE5NDA5LDE3MS4yNzk1MDQ5NzY1NzY5MywyMzMuODY4Njg4NzYwMzc2MzYsODEuNTE2NzI3ODAwMzc5MDIsMTU1NC4wMjcyMDk3MzY1MDYyLDUxMC40NDkyNzM5MjI4MTE2NCw5NzQuODk4NTU4MDkyNjY1OCwxNTg0LjU1NzU5NjE1MTA1NzYsMTUyOC45ODEzNTI4MDQwOTM0LDI2NzguODExNzE2NjM2MDEwMyw2MS40NTE4MjQyMDE4ODA0ODQsMTcuMzU1MTU4MjM1OTY1MTIKKzksV2VkIDIgRmViIDExLDEuNzIzNjIyMTYxODgxODMxNSwwLjU4NTgxMjgwMTI3NTI5MzQsNS4zNjI3NzQyODc3NTI2MDUsMi4wMTQzODM1NDM5MTIzNjQsMTEuNzI2NjQxMTg1MzU2OTg3LDQzMS4yMTYyNTQ3ODU3NzY0NywxNTE0Ljc3MzI0MDM3NDMwNjksMjM5Ni40Njk5MTU2ODA1ODc3LDI3MzQuMTUzNzAwNDcyNDMxNCw1MzY5LjkxNzM2NDQ2MzE1NiwxODEuMzAzNzEzOTAyMjk3ODMsMTE0Ni4zMDYxMzYwODgwNjU0LDE1ODkuMzY1NzkwOTg5ODA3Nyw4MzcuMTI0ODgzMjEyNTQ3Myw0NDYuNzgwODkzNzIxOTQxNjUsMTcxLjI4MDE5MDA5NTk2NzEzLDIzMy44Njk2MjQyMzcwMDIzLDgxLjUxNzA1Mzg2Nzk0MjM1LDE1NTQuMDMzNDI1ODU3Nzc3Myw1MTAuNDUxMzE1NzIzOTkxLDk3NC45MDI0NTc2OTQ2OTc1LDE1ODQuNTYzOTM0Mzk0MTE4OSwxNTI4Ljk4NzQ2ODc0MTczNjQsMjY3OC44MjI0MzE5MDQzMDgsNjEuNDUyMDcwMDA5NjY4ODk0LDE3LjM1NTIyNzY1NjczNjkwOAorMTAsVGh1IDMgRmViIDExLDEuNzIzNjI5MDU2Mzg0MjY4MiwwLjU4NTgxNTE0NDUzMTE4NSw1LjM2Mjc5NTczODg5MjY1NzUsMi4wMTQzOTE2MDE0NjI2NTUsMTEuNzI2Njg4MDkyMDE1NTQzLDQzMS4yMTc5Nzk2NTQyNDUzLDE1MTQuNzc5Mjk5NDc5Mzg2NywyMzk2LjQ3OTUwMTU3OTQyMiwyNzM0LjE2NDYzNzEwOTEwNyw1MzY5LjkzODg0NDE3NTU3NSwxODEuMzA0NDM5MTE4NjAzODgsMTE0Ni4zMTA3MjEzMjE3ODA0LDE1ODkuMzcyMTQ4NDY1Njg2Nyw4MzcuMTI4MjMxNzE4Nzc3Niw0NDYuNzgyNjgwODQ5MDkwODcsMTcxLjI4MDg3NTIxODA5Nzc1LDIzMy44NzA1NTk3MTczNzAyLDgxLjUxNzM3OTkzNjgwOTk5LDE1NTQuMDM5NjQyMDAzOTEzLDUxMC40NTMzNTc1MzMzMzc1Nyw5NzQuOTA2MzU3MzEyMzI3NSwxNTg0LjU3MDI3MjY2MjUzMzYsMTUyOC45OTM1ODQ3MDM4NDM1LDI2NzguODMzMTQ3MjE1NDY2LDYxLjQ1MjMxNTgxODQ0MDUxLDE3LjM1NTI5NzA3Nzc4NjM4CisxMSxGcmkgNCBGZWIgMTEsMS43MjM2MzU5NTA5MTQyODIyLDAuNTg1ODE3NDg3Nzk2NDQ5OCw1LjM2MjgxNzE5MDExODUxNCwyLjAxNDM5OTY1OTA0NTE3NTQsMTEuNzI2NzM0OTk4ODYxNzIzLDQzMS4yMTk3MDQ1Mjk2MTM3NSwxNTE0Ljc4NTM1ODYwODcwMywyMzk2LjQ4OTA4NzUxNjYsMjczNC4xNzU1NzM3ODk1Mjg3LDUzNjkuOTYwMzIzOTczOTExLDE4MS4zMDUxNjQzMzc4MTA4LDExNDYuMzE1MzA2NTczODM1OSwxNTg5LjM3ODUwNTk2Njk5NDcsODM3LjEzMTU4MDIzODQwMTUsNDQ2Ljc4NDQ2Nzk4MzM4ODUsMTcxLjI4MTU2MDM0Mjk2ODksMjMzLjg3MTQ5NTIwMTQ4LDgxLjUxNzcwNjAwNjk4MTg0LDE1NTQuMDQ1ODU4MTc0OTEzMyw1MTAuNDU1Mzk5MzUwODUxMyw5NzQuOTEwMjU2OTQ1NTU2MywxNTg0LjU3NjYxMDk1NjMwMTIsMTUyOC45OTk3MDA2OTA0MTQsMjY3OC44NDM4NjI1Njk0ODU3LDYxLjQ1MjU2MTYyODE5NTQsMTcuMzU1MzY2NDk5MTEzNTI2CisxMixTYXQgNSBGZWIgMTEsMS43MjM2NDI4NDU0NzE4NzQ0LDAuNTg1ODE5ODMxMDcxMDg3NSw1LjM2MjgzODY0MTQzMDE3NjUsMi4wMTQ0MDc3MTY2NTk5MjcyLDExLjcyNjc4MTkwNTg5NTUzMiw0MzEuMjIxNDI5NDExODgxNywxNTE0Ljc5MTQxNzc2MjI1NTQsMjM5Ni40OTg2NzM0OTIxMjI2LDI3MzQuMTg2NTEwNTEzNjk2Nyw1MzY5Ljk4MTgwMzg1ODE3LDE4MS4zMDU4ODk1NTk5MTg2LDExNDYuMzE5ODkxODQ0MjMyNiwxNTg5LjM4NDg2MzQ5MzczMzUsODM3LjEzNDkyODc3MTQxOTYsNDQ2Ljc4NjI1NTEyNDgzNDcsMTcxLjI4MjI0NTQ3MDU4MDUsMjMzLjg3MjQzMDY4OTMzMTg1LDgxLjUxODAzMjA3ODQ1ODAyLDE1NTQuMDUyMDc0MzcwNzc4Miw1MTAuNDU3NDQxMTc2NTMyMyw5NzQuOTE0MTU2NTk0MzgzNCwxNTg0LjU4Mjk0OTI3NTQyMTcsMTUyOS4wMDU4MTY3MDE0NDg4LDI2NzguODU0NTc3OTY2MzY2NCw2MS40NTI4MDc0Mzg5MzM1LDE3LjM1NTQzNTkyMDcxODM2NAorMTMsU3VuIDYgRmViIDExLDEuNzIzNjQ5NzQwMDU3MDQ1NiwwLjU4NTgyMjE3NDM1NTA5ODIsNS4zNjI4NjAwOTI4Mjc2NDcsMi4wMTQ0MTU3NzQzMDY5MDg0LDExLjcyNjgyODgxMzExNjk3LDQzMS4yMjMxNTQzMDEwNDkxNCwxNTE0Ljc5NzQ3Njk0MDA0NDQsMjM5Ni41MDgyNTk1MDU5ODk0LDI3MzQuMTk3NDQ3MjgxNjExNCw1MzcwLjAwMzI4MzgyODM0NSwxODEuMzA2NjE0Nzg0OTI3MzIsMTE0Ni4zMjQ0NzcxMzI5NzA1LDE1ODkuMzkxMjIxMDQ1OTAyLDgzNy4xMzgyNzczMTc4MzE2LDQ0Ni43ODgwNDIyNzM0Mjk1NCwxNzEuMjgyOTMwNjAwOTMyNiwyMzMuODczMzY2MTgwOTI1Niw4MS41MTgzNTgxNTEyMzg0OSwxNTU0LjA1ODI5MDU5MTUwODIsNTEwLjQ1OTQ4MzAxMDM4MDk1LDk3NC45MTgwNTYyNTg4MDg3LDE1ODQuNTg5Mjg3NjE5ODk1NSwxNTI5LjAxMTkzMjczNjk0NzgsMjY3OC44NjUyOTM0MDYxMDgzLDYxLjQ1MzA1MzI1MDY1NDkwNCwxNy4zNTU1MDUzNDI2MDA4OTMKKzE0LE1vbiA3IEZlYiAxMSwxLjcyMzY1NjYzNDY2OTc5NSwwLjU4NTgyNDUxNzY0ODQ4MjEsNS4zNjI4ODE1NDQzMTA5MiwyLjAxNDQyMzgzMTk4NjEyMSwxMS43MjY4NzU3MjA1MjYwMzcsNDMxLjIyNDg3OTE5NzExNjEsMTUxNC44MDM1MzYxNDIwNzA3LDIzOTYuNTE3ODQ1NTU4MTk5LDI3MzQuMjA4Mzg0MDkzMjc0Niw1MzcwLjAyNDc2Mzg4NDQzOSwxODEuMzA3MzQwMDEyODM2ODcsMTE0Ni4zMjkwNjI0NDAwNDk1LDE1ODkuMzk3NTc4NjIzNTAwNyw4MzcuMTQxNjI1ODc3NjM4LDQ0Ni43ODk4Mjk0MjkxNzI4NywxNzEuMjgzNjE1NzM0MDI1MjMsMjMzLjg3NDMwMTY3NjI2MTMsODEuNTE4Njg0MjI1MzIzMjYsMTU1NC4wNjQ1MDY4MzcxMDMsNTEwLjQ2MTUyNDg1MjM5NjUsOTc0LjkyMTk1NTkzODgzMjksMTU4NC41OTU2MjU5ODk3MjI3LDE1MjkuMDE4MDQ4Nzk2OTEwOCwyNjc4Ljg3NjAwODg4ODcxMzQsNjEuNDUzMjk5MDYzMzU5NTQ1LDE3LjM1NTU3NDc2NDc2MTExCisxNSxUdWUgOCBGZWIgMTEsMS43MjM2NjM1MjkzMTAxMjI2LDAuNTg1ODI2ODYwOTUxMjM5Myw1LjM2MjkwMjk5NTg3OTk5OSwyLjAxNDQzMTg4OTY5NzU2NSwxMS43MjY5MjI2MjgxMjI3MzMsNDMxLjIyNjYwNDEwMDA4MjYsMTUxNC44MDk1OTUzNjgzMzM1LDIzOTYuNTI3NDMxNjQ4NzUzNSwyNzM0LjIxOTMyMDk0ODY4MzYsNTM3MC4wNDYyNDQwMjY0NTQsMTgxLjMwODA2NTI0MzY0NzQsMTE0Ni4zMzM2NDc3NjU0Njk1LDE1ODkuNDAzOTM2MjI2NTMwMyw4MzcuMTQ0OTc0NDUwODM4NSw0NDYuNzkxNjE2NTkyMDY0NzcsMTcxLjI4NDMwMDg2OTg1ODQ3LDIzMy44NzUyMzcxNzUzMzkwNCw4MS41MTkwMTAzMDA3MTIzMSwxNTU0LjA3MDcyMzEwNzU2MjgsNTEwLjQ2MzU2NjcwMjU3OTQ0LDk3NC45MjU4NTU2MzQ0NTU3LDE1ODQuNjAxOTY0Mzg0OTAzMywxNTI5LjAyNDE2NDg4MTMzOCwyNjc4Ljg4NjcyNDQxNDE3OTMsNjEuNDUzNTQ0ODc3MDQ3NDEsMTcuMzU1NjQ0MTg3MTk5MDA4CisxNixXZWQgOSBGZWIgMTEsMS43MjM2NzA0MjM5NzgwMjk0LDAuNTg1ODI5MjA0MjYzMzY5NSw1LjM2MjkyNDQ0NzUzNDg4NCwyLjAxNDQzOTk0NzQ0MTI0LDExLjcyNjk2OTUzNTkwNzA1OCw0MzEuMjI4MzI5MDA5OTQ4NjUsMTUxNC44MTU2NTQ2MTg4MzM0LDIzOTYuNTM3MDE3Nzc3NjUyLDI3MzQuMjMwMjU3ODQ3ODQsNTM3MC4wNjc3MjQyNTQzOTEsMTgxLjMwODc5MDQ3NzM1ODgzLDExNDYuMzM4MjMzMTA5MjMxLDE1ODkuNDEwMjkzODU0OTkwMiw4MzcuMTQ4MzIzMDM3NDMzNCw0NDYuNzkzNDAzNzYyMTA1NDcsMTcxLjI4NDk4NjAwODQzMjE4LDIzMy44NzYxNzI2NzgxNTg2NCw4MS41MTkzMzYzNzc0MDU3LDE1NTQuMDc2OTM5NDAyODg4Miw1MTAuNDY1NjA4NTYwOTI5ODcsOTc0LjkyOTc1NTM0NTY3NzMsMTU4NC42MDgzMDI4MDU0Mzc3LDE1MjkuMDMwMjgwOTkwMjI5NiwyNjc4Ljg5NzQzOTk4MjUwOCw2MS40NTM3OTA2OTE3MTg1OCwxNy4zNTU3MTM2MDk5MTQ2MDYKKzE3LFRodSAxMCBGZWIgMTEsMS43MjM2NzczMTg2NzM1MTU3LDAuNTg1ODMxNTQ3NTg0ODczMSw1LjM2Mjk0NTg5OTI3NTU3NiwyLjAxNDQ0ODAwNTIxNzE0NTYsMTEuNzI3MDE2NDQzODc5MDEzLDQzMS4yMzAwNTM5MjY3MTQ1LDE1MTQuODIxNzEzODkzNTcwNCwyMzk2LjU0NjYwMzk0NDg5NywyNzM0LjI0MTE5NDc5MDc0NTMsNTM3MC4wODkyMDQ1NjgyNDgsMTgxLjMwOTUxNTcxMzk3MTI4LDExNDYuMzQyODE4NDcxMzM0MywxNTg5LjQxNjY1MTUwODg4MDcsODM3LjE1MTY3MTYzNzQyMjksNDQ2Ljc5NTE5MDkzOTI5NDksMTcxLjI4NTY3MTE0OTc0NjUsMjMzLjg3NzEwODE4NDcyMDM4LDgxLjUxOTY2MjQ1NTQwMzMyLDE1NTQuMDgzMTU1NzIzMDc4LDUxMC40Njc2NTA0Mjc0NDgsOTc0LjkzMzY1NTA3MjQ5OCwxNTg0LjYxNDY0MTI1MTMyNiwxNTI5LjAzNjM5NzEyMzU4NiwyNjc4LjkwODE1NTU5MzY5OSw2MS40NTQwMzY1MDczNzI5OCwxNy4zNTU3ODMwMzI5MDc4OTQKKzE4LEZyaSAxMSBGZWIgMTEsMS43MjM2ODQyMTMzOTY1NzkzLDAuNTg1ODMzODkwOTE1NzUsNS4zNjI5NjczNTExMDIwNzEsMi4wMTQ0NTYwNjMwMjUyODMyLDExLjcyNzA2MzM1MjAzODYwNyw0MzEuMjMxNzc4ODUwMzgwMDcsMTUxNC44Mjc3NzMxOTI1NDQsMjM5Ni41NTYxOTAxNTA0ODY2LDI3MzQuMjUyMTMxNzc3Mzk4LDUzNzAuMTEwNjg0OTY4MDI3LDE4MS4zMTAyNDA5NTM0ODQ2LDExNDYuMzQ3NDAzODUxNzc5LDE1ODkuNDIzMDA5MTg4MjAyLDgzNy4xNTUwMjAyNTA4MDY2LDQ0Ni43OTY5NzgxMjM2MzMxNSwxNzEuMjg2MzU2MjkzODAxNCwyMzMuODc4MDQzNjk1MDI0MzYsODEuNTE5OTg4NTM0NzA1MzUsMTU1NC4wODkzNzIwNjgxMzM4LDUxMC40Njk2OTIzMDIxMzM1LDk3NC45Mzc1NTQ4MTQ5MTc3LDE1ODQuNjIwOTc5NzIyNTY4MywxNTI5LjA0MjUxMzI4MTQwNjYsMjY3OC45MTg4NzEyNDc3NTE3LDYxLjQ1NDI4MjMyNDAxMDY4LDE3LjM1NTg1MjQ1NjE3ODg3NworMTksU2F0IDEyIEZlYiAxMSwxLjcyMzY5MTEwODE0NzIyMjgsMC41ODU4MzYyMzQyNTYwMDAzLDUuMzYyOTg4ODAzMDE0Mzc5LDIuMDE0NDY0MTIwODY1NjUxLDExLjcyNzExMDI2MDM4NTgzMyw0MzEuMjMzNTAzNzgwOTQ1MzQsMTUxNC44MzM4MzI1MTU3NTU0LDIzOTYuNTY1Nzc2Mzk0NDIwNSwyNzM0LjI2MzA2ODgwNzgwMDcsNTM3MC4xMzIxNjU0NTM3MzEsMTgxLjMxMDk2NjE5NTg5ODksMTE0Ni4zNTE5ODkyNTA1NjU2LDE1ODkuNDI5MzY2ODkyOTUzLDgzNy4xNTgzNjg4Nzc1ODUsNDQ2Ljc5ODc2NTMxNTEyMDEsMTcxLjI4NzA0MTQ0MDU5Njg4LDIzMy44Nzg5NzkyMDkwNjk5Nyw4MS41MjAzMTQ2MTUzMTE2NiwxNTU0LjA5NTU4ODQzODA1NSw1MTAuNDcxNzM0MTg0OTg2NTMsOTc0Ljk0MTQ1NDU3MjkzNjQsMTU4NC42MjczMTgyMTkxNjQyLDE1MjkuMDQ4NjI5NDYzNjkyNCwyNjc4LjkyOTU4Njk0NDY2OSw2MS40NTQ1MjgxNDE2MzE2NCwxNy4zNTU5MjE4Nzk3Mjc1NTMKKzIwLFN1biAxMyBGZWIgMTEsMS43MjM2OTgwMDI5MjU0NDQ3LDAuNTg1ODM4NTc3NjA1NjI0Myw1LjM2MzAxMDI1NTAxMjQ5MiwyLjAxNDQ3MjE3ODczODI1MSwxMS43MjcxNTcxNjg5MjA2OTMsNDMxLjIzNTIyODcxODQxMDE2LDE1MTQuODM5ODkxODYzMjA0LDIzOTYuNTc1MzYyNjc2NzAwNSwyNzM0LjI3NDAwNTg4MTk1LDUzNzAuMTUzNjQ2MDI1MzU2LDE4MS4zMTE2OTE0NDEyMTQyLDExNDYuMzU2NTc0NjY3NjkzNCwxNTg5LjQzNTcyNDYyMzEzNjQsODM3LjE2MTcxNzUxNzc1NzksNDQ2LjgwMDU1MjUxMzc1NTcsMTcxLjI4NzcyNjU5MDEzMywyMzMuODc5OTE0NzI2ODU3ODMsODEuNTIwNjQwNjk3MjIyMjksMTU1NC4xMDE4MDQ4MzI4NDE1LDUxMC40NzM3NzYwNzYwMDY5Nyw5NzQuOTQ1MzU0MzQ2NTU0NCwxNTg0LjYzMzY1Njc0MTExNDcsMTUyOS4wNTQ3NDU2NzA0NDIzLDI2NzguOTQwMzAyNjg0NDQ4NCw2MS40NTQ3NzM5NjAyMzU4NzYsMTcuMzU1OTkxMzAzNTUzOTI1CisyMSxNb24gMTQgRmViIDExLDEuNzIzNzA0ODk3NzMxMjQ1LDAuNTg1ODQwOTIwOTY0NjIxNiw1LjM2MzAzMTcwNzA5NjQxOCwyLjAxNDQ4MDIzNjY0MzA4MTQsMTEuNzI3MjA0MDc3NjQzMTc4LDQzMS4yMzY5NTM2NjI3NzQ4LDE1MTQuODQ1OTUxMjM0ODkwMiwyMzk2LjU4NDk0ODk5NzMyMywyNzM0LjI4NDk0Mjk5OTg0NzMsNTM3MC4xNzUxMjY2ODI5MDE1LDE4MS4zMTI0MTY2ODk0MzA0NSwxMTQ2LjM2MTE2MDEwMzE2MjUsMTU4OS40NDIwODIzNzg3NTA3LDgzNy4xNjUwNjYxNzEzMjU0LDQ0Ni44MDIzMzk3MTk1NDAyLDE3MS4yODg0MTE3NDI0MDk2LDIzMy44ODA4NTAyNDgzODc3Myw4MS41MjA5NjY3ODA0MzcyMiwxNTU0LjEwODAyMTI1MjQ5MzIsNTEwLjQ3NTgxNzk3NTE5NTIsOTc0Ljk0OTI1NDEzNTc3MTMsMTU4NC42Mzk5OTUyODg0MTgzLDE1MjkuMDYwODYxOTAxNjU3LDI2NzguOTUxMDE4NDY3MDkxNyw2MS40NTUwMTk3Nzk4MjMzMiwxNy4zNTYwNjA3Mjc2NTc5OAorMjIsVHVlIDE1IEZlYiAxMSwxLjcyMzcxMTc5MjU2NDYyNTUsMC41ODU4NDMyNjQzMzI5OTE5LDUuMzYzMDUzMTU5MjY2MTQ4LDIuMDE0NDg4Mjk0NTgwMTQ0LDExLjcyNzI1MDk4NjU1MzMwOCw0MzEuMjM4Njc4NjE0MDM5NSwxNTE0Ljg1MjAxMDYzMDgxNDIsMjM5Ni41OTQ1MzUzNTYyOTMsMjczNC4yOTU4ODAxNjE0OTM2LDUzNzAuMTk2NjA3NDI2MzcxLDE4MS4zMTMxNDE5NDA1NDc3NSwxMTQ2LjM2NTc0NTU1Njk3NDIsMTU4OS40NDg0NDAxNTk3OTU2LDgzNy4xNjg0MTQ4MzgyODc1LDQ0Ni44MDQxMjY5MzI0NzM1NCwxNzEuMjg5MDk2ODk3NDI2OSwyMzMuODgxNzg1NzczNjU5ODMsODEuNTIxMjkyODY0OTU2NTEsMTU1NC4xMTQyMzc2OTcwMTA4LDUxMC40Nzc4NTk4ODI1NTA2Niw5NzQuOTUzMTUzOTQwNTg3MywxNTg0LjY0NjMzMzg2MTA3NywxNTI5LjA2Njk3ODE1NzMzNzIsMjY3OC45NjE3MzQyOTI1OTc2LDYxLjQ1NTI2NTYwMDM5NDA2NCwxNy4zNTYxMzAxNTIwMzk3MzYKKzIzLFdlZCAxNiBGZWIgMTEsMS43MjM3MTg2ODc0MjU1ODUyLDAuNTg1ODQ1NjA3NzEwNzM2Miw1LjM2MzA3NDYxMTUyMTY4ODUsMi4wMTQ0OTYzNTI1NDk0MzkzLDExLjcyNzI5Nzg5NTY1MTA3Myw0MzEuMjQwNDAzNTcyMjAzODMsMTUxNC44NTgwNzAwNTA5NzUsMjM5Ni42MDQxMjE3NTM2MDg1LDI3MzQuMzA2ODE3MzY2ODksNTM3MC4yMTgwODgyNTU3NjMsMTgxLjMxMzg2NzE5NDU2NjAzLDExNDYuMzcwMzMxMDI5MTI3NiwxNTg5LjQ1NDc5Nzk2NjI3Miw4MzcuMTcxNzYzNTE4NjQ0NCw0NDYuODA1OTE0MTUyNTU1NywxNzEuMjg5NzgyMDU1MTg0OCwyMzMuODgyNzIxMzAyNjczOTYsODEuNTIxNjE4OTUwNzgwMDgsMTU1NC4xMjA0NTQxNjYzOTUxLDUxMC40Nzk5MDE3OTgwNzM4LDk3NC45NTcwNTM3NjEwMDI2LDE1ODQuNjUyNjcyNDU5MDg5NywxNTI5LjA3MzA5NDQzNzQ4MjUsMjY3OC45NzI0NTAxNjA5NjUsNjEuNDU1NTExNDIxOTQ4MSwxNy4zNTYxOTk1NzY2OTkxOQorMjQsVGh1IDE3IEZlYiAxMSwxLjcyMzcyNTU4MjMxNDEyNDQsMC41ODU4NDc5NTEwOTc4NTM4LDUuMzYzMDk2MDYzODYzMDQ0LDIuMDE0NTA0NDEwNTUwOTY0NCwxMS43MjczNDQ4MDQ5MzY0NzUsNDMxLjI0MjEyODUzNzI2Nzk0LDE1MTQuODY0MTI5NDk1Mzc0LDIzOTYuNjEzNzA4MTg5MjY4NCwyNzM0LjMxNzc1NDYxNjAzMzcsNTM3MC4yMzk1NjkxNzEwNzgsMTgxLjMxNDU5MjQ1MTQ4NTM0LDExNDYuMzc0OTE2NTE5NjIyNywxNTg5LjQ2MTE1NTc5ODE3OTYsODM3LjE3NTExMjIxMjM5NTQsNDQ2LjgwNzcwMTM3OTc4Njg2LDE3MS4yOTA0NjcyMTU2ODMzNSwyMzMuODgzNjU2ODM1NDMwMzcsODEuNTIxOTQ1MDM3OTA4MDUsMTU1NC4xMjY2NzA2NjA2NDU1LDUxMC40ODE5NDM3MjE3NjQ3Niw5NzQuOTYwOTUzNTk3MDE3MSwxNTg0LjY1OTAxMTA4MjQ1NjMsMTUyOS4wNzkyMTA3NDIwOTI1LDI2NzguOTgzMTY2MDcyMTk5OCw2MS40NTU3NTcyNDQ0ODU0MywxNy4zNTYyNjkwMDE2MzYzNDUKKzI1LEZyaSAxOCBGZWIgMTEsMS43MjM3MzI0NzcyMzAyNDMxLDAuNTg1ODUwMjk0NDk0MzQ1LDUuMzYzMTE3NTE2MjkwMjA0LDIuMDE0NTEyNDY4NTg0NzIzLDExLjcyNzM5MTcxNDQwOTUxMiw0MzEuMjQzODUzNTA5MjMyLDE1MTQuODcwMTg4OTY0MDEwOCwyMzk2LjYyMzI5NDY2MzI3MywyNzM0LjMyODY5MTkwODkyNiw1MzcwLjI2MTA1MDE3MjMxNywxODEuMzE1MzE3NzExMzA1NjUsMTE0Ni4zNzk1MDIwMjg0NTk3LDE1ODkuNDY3NTEzNjU1NTE4NCw4MzcuMTc4NDYwOTE5NTQxNyw0NDYuODA5NDg4NjE0MTY2ODcsMTcxLjI5MTE1MjM3ODkyMjUzLDIzMy44ODQ1OTIzNzE5Mjg5LDgxLjUyMjI3MTEyNjM0MDQzLDE1NTQuMTMyODg3MTc5NzYxLDUxMC40ODM5ODU2NTM2MjM3LDk3NC45NjQ4NTM0NDg2MzEyLDE1ODQuNjY1MzQ5NzMxMTc4NCwxNTI5LjA4NTMyNzA3MTE2ODYsMjY3OC45OTM4ODIwMjYyOTYsNjEuNDU2MDAzMDY4MDA2MDM0LDE3LjM1NjMzODQyNjg1MTIKKzI2LFNhdCAxOSBGZWIgMTEsMS43MjM3MzkzNzIxNzM5NDE4LDAuNTg1ODUyNjM3OTAwMjA5OCw1LjM2MzEzODk2ODgwMzE3MiwyLjAxNDUyMDUyNjY1MDcxMzQsMTEuNzI3NDM4NjI0MDcwMTkyLDQzMS4yNDU1Nzg0ODgwOTYsMTUxNC44NzYyNDg0NTY4ODUyLDIzOTYuNjMyODgxMTc1NjIzNCwyNzM0LjMzOTYyOTI0NTU2NzMsNTM3MC4yODI1MzEyNTk0NzksMTgxLjMxNjA0Mjk3NDAyNywxMTQ2LjM4NDA4NzU1NTYzODksMTU4OS40NzM4NzE1MzgyODg0LDgzNy4xODE4MDk2NDAwODMxLDQ0Ni44MTEyNzU4NTU2OTU4NCwxNzEuMjkxODM3NTQ0OTAyMzQsMjMzLjg4NTUyNzkxMjE2OTUyLDgxLjUyMjU5NzIxNjA3NzEzLDE1NTQuMTM5MTAzNzIzNzQyNyw1MTAuNDg2MDI3NTkzNjUwMjUsOTc0Ljk2ODc1MzMxNTg0NDMsMTU4NC42NzE2ODg0MDUyNTQ2LDE1MjkuMDkxNDQzNDI0NzA5NSwyNjc5LjAwNDU5ODAyMzI1NzYsNjEuNDU2MjQ4ODkyNTA5OTYsMTcuMzU2NDA3ODUyMzQzNzUKKzI3LFN1biAyMCBGZWIgMTEsMS43MjM3NDYyNjcxNDUyMjA4LDAuNTg1ODU0OTgxMzE1NDQ4Miw1LjM2MzE2MDQyMTQwMTk1MSwyLjAxNDUyODU4NDc0ODkzNjcsMTEuNzI3NDg1NTMzOTE4NTEzLDQzMS4yNDczMDM0NzM4NTk4NiwxNTE0Ljg4MjMwNzk3Mzk5NzUsMjM5Ni42NDI0Njc3MjYzMjI2LDI3MzQuMzUwNTY2NjI1OTU5LDUzNzAuMzA0MDEyNDMyNTY2LDE4MS4zMTY3NjgyMzk2NDk0NiwxMTQ2LjM4ODY3MzEwMTE2MDMsMTU4OS40ODAyMjk0NDY0OTA1LDgzNy4xODUxNTgzNzQwMTkyLDQ0Ni44MTMwNjMxMDQzNzM4NCwxNzEuMjkyNTIyNzEzNjIyODQsMjMzLjg4NjQ2MzQ1NjE1MjIzLDgxLjUyMjkyMzMwNzExODIsMTU1NC4xNDUzMjAyOTI1OTA0LDUxMC40ODgwNjk1NDE4NDQxLDk3NC45NzI2NTMxOTg2NTc0LDE1ODQuNjc4MDI3MTA0Njg2LDE1MjkuMDk3NTU5ODAyNzE1NSwyNjc5LjAxNTMxNDA2MzA4MTQsNjEuNDU2NDk0NzE3OTk3MTUsMTcuMzU2NDc3Mjc4MTE0MDA2CisyOCxNb24gMjEgRmViIDExLDEuNzIzNzUzMTYyMTQ0MDc5LDAuNTg1ODU3MzI0NzQwMDYsNS4zNjMxODE4NzQwODY1NDEsMi4wMTQ1MzY2NDI4NzkzOTIsMTEuNzI3NTMyNDQzOTU0NDY4LDQzMS4yNDkwMjg0NjY1MjM4NCwxNTE0Ljg4ODM2NzUxNTM0ODYsMjM5Ni42NTIwNTQzMTUzNjc0LDI3MzQuMzYxNTA0MDUwMTAwNCw1MzcwLjMyNTQ5MzY5MTU3OSwxODEuMzE3NDkzNTA4MTcyOTYsMTE0Ni4zOTMyNTg2NjUwMjQsMTU4OS40ODY1ODczODAxMjQsODM3LjE4ODUwNzEyMTM1MDIsNDQ2LjgxNDg1MDM2MDIwMDc1LDE3MS4yOTMyMDc4ODUwODQxNCwyMzMuODg3Mzk5MDAzODc3MTQsODEuNTIzMjQ5Mzk5NDYzNjIsMTU1NC4xNTE1MzY4ODYzMDQ1LDUxMC40OTAxMTE0OTgyMDYsOTc0Ljk3NjU1MzA5NzA3LDE1ODQuNjg0MzY1ODI5NDcyLDE1MjkuMTAzNjc2MjA1MTg3NiwyNjc5LjAyNjAzMDE0NTc3MDYsNjEuNDU2NzQwNTQ0NDY3NjcsMTcuMzU2NTQ2NzA0MTYxOTcKKzI5LFR1ZSAyMiBGZWIgMTEsMS43MjM3NjAwNTcxNzA1MTc0LDAuNTg1ODU5NjY4MTc0MDQ1Nyw1LjM2MzIwMzMyNjg1Njk0MiwyLjAxNDU0NDcwMTA0MjA4LDExLjcyNzU3OTM1NDE3ODA2Miw0MzEuMjUwNzUzNDY2MDg3NzYsMTUxNC44OTQ0MjcwODA5Mzc3LDIzOTYuNjYxNjQwOTQyNzU4LDI3MzQuMzcyNDQxNTE3OTkyLDUzNzAuMzQ2OTc1MDM2NTE3NSwxODEuMzE4MjE4Nzc5NTk3NTIsMTE0Ni4zOTc4NDQyNDcyMjk2LDE1ODkuNDkyOTQ1MzM5MTg5Miw4MzcuMTkxODU1ODgyMDc2NCw0NDYuODE2NjM3NjIzMTc2OCwxNzEuMjkzODkzMDU5Mjg2LDIzMy44ODgzMzQ1NTUzNDQzMyw4MS41MjM1NzU0OTMxMTM0LDE1NTQuMTU3NzUzNTA0ODg0OCw1MTAuNDkyMTUzNDYyNzM2MDQsOTc0Ljk4MDQ1MzAxMTA4MjIsMTU4NC42OTA3MDQ1Nzk2MTI5LDE1MjkuMTA5NzkyNjMyMTI1MiwyNjc5LjAzNjc0NjI3MTMyNCw2MS40NTY5ODYzNzE5MjE1LDE3LjM1NjYxNjEzMDQ4NzY0NQorMzAsV2VkIDIzIEZlYiAxMSwxLjcyMzc2Njk1MjIyNDUzNjUsMC41ODU4NjIwMTE2MTc0MDUzLDUuMzYzMjI0Nzc5NzEzMTU2LDIuMDE0NTUyNzU5MjM3MDAwNSwxMS43Mjc2MjYyNjQ1ODkzLDQzMS4yNTI0Nzg0NzI1NTE1LDE1MTQuOTAwNDg2NjcwNzY1MywyMzk2LjY3MTIyNzYwODQ5NjMsMjczNC4zODMzNzkwMjk2MzMsNTM3MC4zNjg0NTY0NjczODEsMTgxLjMxODk0NDA1MzkyMzIyLDExNDYuNDAyNDI5ODQ3Nzc4LDE1ODkuNDk5MzAzMzIzNjg3Miw4MzcuMTk1MjA0NjU2MTk3Myw0NDYuODE4NDI0ODkzMzAxNzcsMTcxLjI5NDU3ODIzNjIyODU3LDIzMy44ODkyNzAxMTA1NTM2LDgxLjUyMzkwMTU4ODA2NzU3LDE1NTQuMTYzOTcwMTQ4MzMyLDUxMC40OTQxOTU0MzU0MzQsOTc0Ljk4NDM1Mjk0MDY5NDIsMTU4NC42OTcwNDMzNTUxMDksMTUyOS4xMTU5MDkwODM1Mjg1LDI2NzkuMDQ3NDYyNDM5NzQxLDYxLjQ1NzIzMjIwMDM1ODY0LDE3LjM1NjY4NTU1NzA5MTAyMworMzEsVGh1IDI0IEZlYiAxMSwxLjcyMzc3Mzg0NzMwNjEzNiwwLjU4NTg2NDM1NTA3MDEzODcsNS4zNjMyNDYyMzI2NTUxODEsMi4wMTQ1NjA4MTc0NjQxNTQsMTEuNzI3NjczMTc1MTg4MTgsNDMxLjI1NDIwMzQ4NTkxNTQ3LDE1MTQuOTA2NTQ2Mjg0ODMxLDIzOTYuNjgwODE0MzEyNTgwNCwyNzM0LjM5NDMxNjU4NTAyNCw1MzcwLjM4OTkzNzk4NDE3LDE4MS4zMTk2NjkzMzExNDk5OCwxMTQ2LjQwNzAxNTQ2NjY2ODYsMTU4OS41MDU2NjEzMzM2MTYyLDgzNy4xOTg1NTM0NDM3MTM2LDQ0Ni44MjAyMTIxNzA1NzU3NiwxNzEuMjk1MjYzNDE1OTExODgsMjMzLjg5MDIwNTY2OTUwNTE1LDgxLjUyNDIyNzY4NDMyNjEsMTU1NC4xNzAxODY4MTY2NDYsNTEwLjQ5NjIzNzQxNjI5OTY2LDk3NC45ODgyNTI4ODU5MDU4LDE1ODQuNzAzMzgyMTU1OTU5OCwxNTI5LjEyMjAyNTU1OTM5NzgsMjY3OS4wNTgxNzg2NTEwMjM0LDYxLjQ1NzQ3ODAyOTc3OTEsMTcuMzU2NzU0OTgzOTcyMTAyCiszMixGcmkgMjUgRmViIDExLDEuNzIzNzgwNzQyNDE1MzE1OCwwLjU4NTg2NjY5ODUzMjI0NTgsNS4zNjMyNjc2ODU2ODMwMTgsMi4wMTQ1Njg4NzU3MjM1Mzk2LDExLjcyNzcyMDA4NTk3NDcwMyw0MzEuMjU1OTI4NTA2MTc5NDMsMTUxNC45MTI2MDU5MjMxMzUzLDIzOTYuNjkwNDAxMDU1MDExLDI3MzQuNDA1MjU0MTg0MTY2LDUzNzAuNDExNDE5NTg2ODg1LDE4MS4zMjAzOTQ2MTEyNzc5LDExNDYuNDExNjAxMTAzOTAxNiwxNTg5LjUxMjAxOTM2ODk3ODEsODM3LjIwMTkwMjI0NDYyNTEsNDQ2LjgyMTk5OTQ1NDk5OSwxNzEuMjk1OTQ4NTk4MzM1OTcsMjMzLjg5MTE0MTIzMjE5ODk1LDgxLjUyNDU1Mzc4MTg4OTAzLDE1NTQuMTc2NDAzNTA5ODI2Nyw1MTAuNDk4Mjc5NDA1MzMzNDUsOTc0Ljk5MjE1Mjg0NjcxNzQsMTU4NC43MDk3MjA5ODIxNjYxLDE1MjkuMTI4MTQyMDU5NzMzMSwyNjc5LjA2ODg5NDkwNTE3MDUsNjEuNDU3NzIzODYwMTgyODc0LDE3LjM1NjgyNDQxMTEzMDg5NApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Jbm9jdWxhdGlvblRlc3RfUktfUmVmZXJlbmNlL0h1bWFuUG9wdWxhdGlvbk1vZGVsL2h1bWFuL0luY2lkZW5jZV8wLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvSW5vY3VsYXRpb25UZXN0X1JLX1JlZmVyZW5jZS9IdW1hblBvcHVsYXRpb25Nb2RlbC9odW1hbi9JbmNpZGVuY2VfMC5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmMyNDQwMQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvSW5vY3VsYXRpb25UZXN0X1JLX1JlZmVyZW5jZS9IdW1hblBvcHVsYXRpb25Nb2RlbC9odW1hbi9JbmNpZGVuY2VfMC5jc3YKQEAgLTAsMCArMSBAQAoraXRlcmF0aW9uLHRpbWUsCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0lub2N1bGF0aW9uVGVzdF9SS19SZWZlcmVuY2UvSHVtYW5Qb3B1bGF0aW9uTW9kZWwvaHVtYW4vSW5jaWRlbmNlXzEuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Jbm9jdWxhdGlvblRlc3RfUktfUmVmZXJlbmNlL0h1bWFuUG9wdWxhdGlvbk1vZGVsL2h1bWFuL0luY2lkZW5jZV8xLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYzI0NDAxCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Jbm9jdWxhdGlvblRlc3RfUktfUmVmZXJlbmNlL0h1bWFuUG9wdWxhdGlvbk1vZGVsL2h1bWFuL0luY2lkZW5jZV8xLmNzdgpAQCAtMCwwICsxIEBACitpdGVyYXRpb24sdGltZSwKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvSW5vY3VsYXRpb25UZXN0X1JLX1JlZmVyZW5jZS9IdW1hblBvcHVsYXRpb25Nb2RlbC9odW1hbi9JbmNpZGVuY2VfMi5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0lub2N1bGF0aW9uVGVzdF9SS19SZWZlcmVuY2UvSHVtYW5Qb3B1bGF0aW9uTW9kZWwvaHVtYW4vSW5jaWRlbmNlXzIuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJkZmYxMjIKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0lub2N1bGF0aW9uVGVzdF9SS19SZWZlcmVuY2UvSHVtYW5Qb3B1bGF0aW9uTW9kZWwvaHVtYW4vSW5jaWRlbmNlXzIuY3N2CkBAIC0wLDAgKzEsMzMgQEAKK2l0ZXJhdGlvbix0aW1lLEVHLUZSRy1HMjEwMDAxLEVHLUZSRy1HMjEwMDAyLEVHLUZSRy1HMjEwMDAzLEVHLUZSRy1HMjEwMDA0LEVHLUZSRy1HMjEwMDA1LEVHLUxPRS1HMjQwMDAxLEVHLUxPRS1HMjQwMDAyLEVHLUxPRS1HMjQwMDAzLEVHLUxPRS1HMjQwMDA0LEVHLUxPRS1HMjQwMDA1LEVHLUxPRS1HMjQwMDA2LEVHLUxPRS1HMjQwMDA3LEVHLUxPRS1HMjQwMDA4LEVHLUxPRS1HMjQwMDA5LEVHLVVQRS1HMjkwMDAxLEVHLVVQRS1HMjkwMDAyLEVHLVVQRS1HMjkwMDAzLEVHLVVQRS1HMjkwMDA0LEVHLVVQRS1HMjkwMDA1LEVHLVVQRS1HMjkwMDA2LEVHLVVQRS1HMjkwMDA3LEVHLVVQRS1HMjkwMDA4LEVHLVVSRy1HMzAwMDAxLEVHLVVSRy1HMzAwMDAyLEVHLVVSRy1HMzAwMDAzLEVHLVVSRy1HMzAwMDA0CisxLFR1ZSAyNSBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMixXZWQgMjYgSmFuIDExLDEuMTg4OTU0MzUxMDgwNTQ1LDEuMDYxNTYyNjQzMzYwNTc0LDAuNjE3OTE1ODYzNjY2NzYwMywxLjI3NzM5NDQwMDE5MzE5ODcsMS4yODc2MDA3MjU5NjY2ODcsMjAuODE0NTcwNDUwNzUzNDIyLDIyLjYxOTE3MjE0NTQwMTg3NiwxOC41Mzg1NzE4OTEyOTM5NCwxNi4xMDI2MjA1MDM0NzY2NTgsMjAuMTMyMzMwMTU1NzIxNDksNC4wODgyODQyMTExNzQ2NiwyMy44OTkzNTQ4NTA5Mzg2MzYsNC43Mjk4MjAwODM0MDIwOTYsMTIuNTU1ODUxNzgzNjg2NDM1LDExLjIyMjY0MjkyNDUwNjEwNCwyNS43NjI1NTkzMDk5MTc3MiwxOC42NjM5NTY5ODYyMDg4Niw1LjI0ODk5Njg5NzI5NDEyNywxNS4yNzY5NjM4MDM2ODUyMiwxMC4xNzQwMzA1ODk0ODk3NzQsMTUuMDMwMjM1MDQ0ODY2MzQ1LDE2LjY5MDY5NTA1MzAxODQ4NywxNC44NDc4ODcxMjgyMTQ0MzgsMzMuODQ1NDM3NDQ5MjQ4ODM0LDIuMTU4MzgyMDM3ODEzOTQzNiwwLjAyNzAyNDgwMzM4MDQ5ODUwOAorMyxUaHUgMjcgSmFuIDExLDEuMTg4OTU5MDI3MjExMDMwNCwxLjA2MTU2NjgxODQ2MjM2MzcsMC42MTc5MTgyOTM5MTU4MzI1LDEuMjc3Mzk5NDI0MTU2MzkwOSwxLjI4NzYwNTc5MDA3MTEyNzcsMjAuODE0NjUyMzEzOTg2NzI3LDIyLjYxOTI2MTEwNjA5MjY5NCwxOC41Mzg2NDQ4MDMwNzY1OCwxNi4xMDI2ODM4MzQ3MTc3NjYsMjAuMTMyNDA5MzM1NzE5MjE3LDQuMDg4MzAwMjkwMzAzNywyMy44OTk0NDg4NDY1NTkwMSw0LjcyOTgzODY4NTY3NzE2NiwxMi41NTU5MDExNjU1NjY2MjQsMTEuMjIyNjg3MDYyOTA2MTA0LDI1Ljc2MjY2MDYzMzQ3ODk4NywxOC42NjQwMzAzOTExMjgyMiw1LjI0OTAxNzU0MTQ3OTgzNywxNS4yNzcwMjM4ODc2MzcyMjgsMTAuMTc0MDcwNjAzNzIxMjQ4LDE1LjAzMDI5NDE1ODQzOTc3MywxNi42OTA3NjA2OTcxNDM0NDYsMTQuODQ3OTQ1NTI0NjE3NjE0LDMzLjg0NTU3MDU2MjU4NjQzLDIuMTU4MzkwNTI2NjgxNTI5MywwLjAyNzAyNDkwOTY2ODQzNzAxNAorNCxGcmkgMjggSmFuIDExLDEuMTg4OTYzODgxMjU2NzcsMS4wNjE1NzExNTI0MTY0OTk3LDAuNjE3OTIwODE2NjI5ODk3NywxLjI3NzQwNDYzOTI2OTAxNTMsMS4yODc2MTEwNDY4NTIyNzUsMjAuODE0NzM3MjkxOTE0NTgyLDIyLjYxOTM1MzQ1MTUxODgzMywxOC41Mzg3MjA0ODg5NzMwMTMsMTYuMTAyNzQ5NTc1NTU2NjU4LDIwLjEzMjQ5MTUyODMyMDkxMiw0LjA4ODMxNjk4MTIwNDAyNCwyMy44OTk1NDY0MTg0ODEzMiw0LjcyOTg1Nzk5NTcyMzAwOSwxMi41NTU5NTI0MjYzMDU3NjUsMTEuMjIyNzMyODgwNjYzNTU3LDI1Ljc2Mjc2NTgxMjE1MjI1MywxOC42NjQxMDY1ODg5MjQwNTYsNS4yNDkwMzg5NzExMjU5NzcsMTUuMjc3MDg2MjU3NjM1Njg4LDEwLjE3NDExMjE0MDM5NTcyLDE1LjAzMDM1NTUyMTEzOTExNCwxNi42OTA4Mjg4Mzg4NjU3MTMsMTQuODQ4MDA2MTQyODYwMTg2LDMzLjg0NTcwODc0MDU1ODc5LDIuMTU4Mzk5MzM4NTI5NjIzLDAuMDI3MDI1MDIwMDAwMzY5OTEKKzUsU2F0IDI5IEphbiAxMSwxLjE4ODk2ODM5MDMwOTY5MywxLjA2MTU3NTE3ODM0MjQxOTQsMC42MTc5MjMxNjAwNDY0NzA1LDEuMjc3NDA5NDgzNzI2NjIzNywxLjI4NzYxNTkzMDAxNjg5MDgsMjAuODE0ODE2MjMwMTg0Njc1LDIyLjYxOTQzOTIzMzY1NTE4NiwxOC41Mzg3OTA3OTU2MjY2NTMsMTYuMTAyODEwNjQzOTgwMzIsMjAuMTMyNTY3ODc5MjI3MDgyLDQuMDg4MzMyNDg1ODI3NzYzLDIzLjg5OTYzNzA1NTY0OTc3Nyw0LjcyOTg3NTkzMzM0MTA5MSwxMi41NTYwMDAwNDM3Nzc0NzMsMTEuMjIyNzc1NDQyMDAzOTY0LDI1Ljc2Mjg2MzUxNTQzNTIxNCwxOC42NjQxNzczNzEwOTQ2OTUsNS4yNDkwNTg4Nzc2OTc0NzksMTUuMjc3MTQ0MTk0Nzk1NTQsMTAuMTc0MTUwNzI0OTIzNjM1LDE1LjAzMDQxMjUyMjU5MTgzMSwxNi42OTA4OTIxMzc1MzQyMzUsMTQuODQ4MDYyNDUyNzY3MDk1LDMzLjg0NTgzNzA5Nzc3MzI1NiwyLjE1ODQwNzUyNDA5MTAxOCwwLjAyNzAyNTEyMjQ5MDY1MzU1OAorNixTdW4gMzAgSmFuIDExLDEuMTg4OTczMTcxODc1Mjg2MywxLjA2MTU3OTQ0NzU4MjM2NTksMC42MTc5MjU2NDUwOTE2MTI2LDEuMjc3NDE0NjIwOTY3Njg2NCwxLjI4NzYyMTEwODMwNDI4NDMsMjAuODE0ODk5OTM5MjMwMiwyMi42MTk1MzAyMDAxODgyMjMsMTguNTM4ODY1MzUxMzg4NTgsMTYuMTAyODc1NDAzMTgzMzA1LDIwLjEzMjY0ODg0NDUzNjc2LDQuMDg4MzQ4OTI3NTAxMTU4LDIzLjg5OTczMzE3MDYzNzU0Niw0LjcyOTg5NDk1NTA1MTE3OSwxMi41NTYwNTA1MzkwOTYxOSwxMS4yMjI4MjA1NzU2MTUwNDYsMjUuNzYyOTY3MTIzNTkwNjEzLDE4LjY2NDI1MjQzMTExMjM0NSw1LjI0OTA3OTk4NzM1ODIwMSwxNS4yNzcyMDU2MzM0OTExNzgsMTAuMTc0MTkxNjQxMzc2NDY3LDE1LjAzMDQ3Mjk2OTAyOTIzMywxNi42OTA5NTkyNjE3NzA4NDMsMTQuODQ4MTIyMTY1ODYzODg0LDMzLjg0NTk3MzIxMjQ4NTMyLDIuMTU4NDE2MjA0MzYxNDQ0LDAuMDI3MDI1MjMxMTc1MTIwNjIzCis3LE1vbiAzMSBKYW4gMTEsMS4xODg5NzgwNjQxMzE1NzUzLDEuMDYxNTgzODE1NjUyOTQzMSwwLjYxNzkyODE4NzY2NDIyNDYsMS4yNzc0MTk4NzcxMzMxNDQ5LDEuMjg3NjI2NDA2NDY2Mjc1MiwyMC44MTQ5ODU1ODYwOTU1NiwyMi42MTk2MjMyNzI1NDgwNywxOC41Mzg5NDE2MzMwNzY2NiwxNi4xMDI5NDE2NjE1MjczNTMsMjAuMTMyNzMxNjg0MTUwMiw0LjA4ODM2NTc0OTc5MDU0LDIzLjg5OTgzMTUxMDYzNjAzNCw0LjcyOTkxNDQxNzEwMzcyMSwxMi41NTYxMDIyMDMzNTQ2MjcsMTEuMjIyODY2NzU0MDQ1MTg1LDI1Ljc2MzA3MzEzMDIxOTY1MiwxOC42NjQzMjkyMjg3Mjk0LDUuMjQ5MTAxNTg1Njk2MzIzLDE1LjI3NzI2ODQ5NDQ1OTg5LDEwLjE3NDIzMzUwNTAyMzM1MiwxNS4wMzA1MzQ4MTQ3Njk0ODEsMTYuNjkxMDI3OTM5ODk3NzY1LDE0Ljg0ODE4MzI2MTI4NzAzMywzMy44NDYxMTI0NzgxODA1NDQsMi4xNTg0MjUwODU1NzU1MDE2LDAuMDI3MDI1MzQyMzc1NTc1MjQ1Cis4LFR1ZSAxIEZlYiAxMSwxLjE4ODk4MjY1NTczMTQzODIsMS4wNjE1ODc5MTUyODEyMjgsMC42MTc5MzA1NzM5ODE1NzM3LDEuMjc3NDI0ODEwMjc3OTI0NiwxLjI4NzYzMTM3OTAyNjY2OSwyMC44MTUwNjU5Njk0ODM0NywyMi42MTk3MTA2MjUwOTI0MzgsMTguNTM5MDEzMjI2ODI5NjY3LDE2LjEwMzAwMzg0NzkyNjcxNSwyMC4xMzI4MDk0MzI4MDc0NzcsNC4wODgzODE1MzgyNTY0MzUsMjMuODk5OTIzODA3MDkzMyw0LjcyOTkzMjY4MzEwNDYyMiwxMi41NTYxNTA2OTI1NTYzMDEsMTEuMjIyOTEwMDk0NTUzMywyNS43NjMxNzI2MjIxNTAyNSwxOC42NjQ0MDEzMDY3MDQ2OSw1LjI0OTEyMTg1NjY5NjE0MiwxNS4yNzczMjc0OTIyNzE1ODEsMTAuMTc0MjcyNzk1OTE1NzQsMTUuMDMwNTkyODU5NzQ0MTA0LDE2LjY5MTA5MjM5NzM3MDg4LDE0Ljg0ODI0MDYwMjA1NTc2OCwzMy44NDYyNDMxODUyMjIxOSwyLjE1ODQzMzQyMDk4OTQ0MywwLjAyNzAyNTQ0Njc0MjE0MTgzCis5LFdlZCAyIEZlYiAxMSwxLjE4ODk4NzQ3NDc2NTc5MDMsMS4wNjE1OTIyMTc5NzUzMDgxLDAuNjE3OTMzMDc4NDk5NzQxNywxLjI3NzQyOTk4Nzc3NDg0ODMsMS4yODc2MzY1OTc4OTE1NywyMC44MTUxNTAzMzQ0ODAyOCwyMi42MTk4MDIzMDQ0NDcwOSwxOC41MzkwODgzNjY4MTY5MTIsMTYuMTAzMDY5MTE0NTg4MzgsMjAuMTMyODkxMDMyNTY4MjY3LDQuMDg4Mzk4MTA4NzY4MTg5LDIzLjkwMDAyMDY3NTI0NjMxLDQuNzI5OTUxODUzODcwNDYsMTIuNTU2MjAxNTgzNTYwNjY0LDExLjIyMjk1NTU4MTgzNTIzNywyNS43NjMyNzcwNDIxODgwOTMsMTguNjY0NDc2OTU0ODk5MSw1LjI0OTE0MzEzMTc3Mzk3NywxNS4yNzczODk0MTI0MDYxMDksMTAuMTc0MzE0MDMyOTkzNDA4LDE1LjAzMDY1Mzc3OTg0NTAxLDE2LjY5MTE2MDA0NzU5ODgsMTQuODQ4MzAwNzgzMDY5NTA0LDMzLjg0NjM4MDM2NjU0MDg3LDIuMTU4NDQyMTY5Mjc5MjA4NCwwLjAyNzAyNTU1NjI3ODI2OTc0NworMTAsVGh1IDMgRmViIDExLDEuMTg4OTkyMjczOTc2MjI5LDEuMDYxNTk2NTAyOTY5NTI1MywwLjYxNzkzNTU3MjcxNTE1MSwxLjI3NzQzNTE0Mzk3MzI2NCwxLjI4NzY0MTc5NTI4Nzc4NDgsMjAuODE1MjM0MzUyNDI3NDEsMjIuNjE5ODkzNjA2NjYzMTcsMTguNTM5MTYzMTk3NzAzMTE4LDE2LjEwMzEzNDExMjc2NDU5MywyMC4xMzI5NzIyOTY2NTQ2LDQuMDg4NDE0NjExMTE0MzQ1LDIzLjkwMDExNzE0NDkxNTc4Miw0LjcyOTk3MDk0NTc3NDEyLDEyLjU1NjI1MjI2NTIxNjI3MywxMS4yMjMwMDA4ODE5OTc1NSwyNS43NjMzODEwMzI2NzY0MiwxOC42NjQ1NTIyOTE5MDE4MjgsNS4yNDkxNjQzMTkzMzMxODI1LDE1LjI3NzQ1MTA3NzgyMTY5NSwxMC4xNzQzNTUxMDA0MzUzNjMsMTUuMDMwNzE0NDQ5MzQwNzM1LDE2LjY5MTIyNzQxOTUzNjA2MiwxNC44NDgzNjA3MTY1MTg0NDIsMzMuODQ2NTE2OTgzNTQwOTk0LDIuMTU4NDUwODgxNTgxNDA1NCwwLjAyNzAyNTY2NTM2MzgwMjI0MworMTEsRnJpIDQgRmViIDExLDEuMTg4OTk3MDY3ODQyNjE3NCwxLjA2MTYwMDc4MzE5MjI4NjUsMC42MTc5MzgwNjQxNTMxODM4LDEuMjc3NDQwMjk0NDMwMTEwOSwxLjI4NzY0Njk4Njg5NjU1NzksMjAuODE1MzE4Mjc2ODE4MjMyLDIyLjYxOTk4NDgwNzIxMTc4LDE4LjUzOTIzNzk0NTI2MzA5NiwxNi4xMDMxOTkwMzg1NjM1NiwyMC4xMzMwNTM0NzAyNTExNTYsNC4wODg0MzEwOTUwODQ2ODcsMjMuOTAwMjEzNTA3MTYzNjcsNC43Mjk5OTAwMTY0MTg0MTIsMTIuNTU2MzAyODkwNDM2NDg0LDExLjIyMzA0NjEzMTcxNjg4NSwyNS43NjM0ODQ5MDczNjg1MDcsMTguNjY0NjI3NTQ1MDE0NzUzLDUuMjQ5MTg1NDgzMjk5NDYzLDE1LjI3NzUxMjY3NDU3MTE0MiwxMC4xNzQzOTYxMjIxNDc2MTMsMTUuMDMwNzc1MDUxMjc5MzM1LDE2LjY5MTI5NDcxNjQ1MjgwMiwxNC44NDg0MjA1ODMyMjk4ODEsMzMuODQ2NjUzNDQ4NDE0MzcsMi4xNTg0NTk1ODQxODIyMjE0LDAuMDI3MDI1Nzc0MzI3ODY1MDE1CisxMixTYXQgNSBGZWIgMTEsMS4xODkwMDE4NTc5MzE0MTA2LDEuMDYxNjA1MDYwMDQyMjA2LDAuNjE3OTQwNTUzNjI3OTQ4OCwxLjI3NzQ0NTQ0MDgyODM2NzgsMS4yODc2NTIxNzQ0MTQzMTU1LDIwLjgxNTQwMjEzNTA3NjE5OCwyMi42MjAwNzU5MzU4OTM3OTQsMTguNTM5MzEyNjMzOTIxNTU0LDE2LjEwMzI2MzkxMzIwMDYzNSwyMC4xMzMxMzQ1Nzk4ODI0OTQsNC4wODg0NDc1NjYwNjU1NzUsMjMuOTAwMzA5NzkzNDc3NTYsNC43MzAwMDkwNzIwMzQ5MzksMTIuNTU2MzUzNDc1NzYzNzE0LDExLjIyMzA5MTM0NTc3OTE5NiwyNS43NjM1ODg3MDAyMDY3ODIsMTguNjY0NzAyNzM4ODI3ODI3LDUuMjQ5MjA2NjMwNTg4NDE4LDE1LjI3NzU3NDIyMjc4MjAyMiwxMC4xNzQ0MzcxMTE1MzQ1MywxNS4wMzA4MzU2MDU0NjMyMzgsMTYuNjkxMzYxOTYwMzM5MjA4LDE0Ljg0ODQ4MDQwMjc2NiwzMy44NDY3ODk4MDU3NTI2OCwyLjE1ODQ2ODI3OTkyNTMzMzYsMC4wMjcwMjU4ODMyMDYwNjM0NzIKKzEzLFN1biA2IEZlYiAxMSwxLjE4OTAwNjY0NjkwNTUyNTYsMS4wNjE2MDkzMzU4OTY4ODA4LDAuNjE3OTQzMDQyNTIzNDAwMywxLjI3NzQ1MDU4NjAyOTAzMzMsMS4yODc2NTczNjA3MjQ5MDg5LDIwLjgxNTQ4NTk3MzgxOTg3NSwyMi42MjAxNjcwNDMzNjk3MiwxOC41MzkzODczMDUxOTk1NywxNi4xMDMzMjg3NzI3NDEwMzcsMjAuMTMzMjE1NjcwNjM5MTc0LDQuMDg4NDY0MDMzMjEzNTc2LDIzLjkwMDQwNjA1NzM4NTE0LDQuNzMwMDI4MTIzMjE3MTI0LDEyLjU1NjQwNDA0OTMxOTQ4MiwxMS4yMjMxMzY1NDkzMTk5NDYsMjUuNzYzNjkyNDY4ODkxODYsMTguNjY0Nzc3OTE1MTQyODc4LDUuMjQ5MjI3NzcyOTU2MjgxNSwxNS4yNzc2MzU3NTY2NzAyOTMsMTAuMTc0NDc4MDkxMzgyOTk0LDE1LjAzMDg5NjE0NTU1NTkxNCwxNi42OTE0MjkxODg1Nzc2MTUsMTQuODQ4NTQwMjA4MzgxNzkyLDMzLjg0NjkyNjEzMTM1OTkxLDIuMTU4NDc2OTczNjQ0OTA1NCwwLjAyNzAyNTk5MjA1ODkyNTQ0NworMTQsTW9uIDcgRmViIDExLDEuMTg5MDExMzU0MzM3MTYxMiwxLjA2MTYxMzUzODk0NjAyODYsMC42MTc5NDU0ODkwNDAxMDg2LDEuMjc3NDU1NjQzNjIxNzAzMywxLjI4NzY2MjQ1ODcyNzUyNjMsMjAuODE1NTY4Mzg1MDMwNTAyLDIyLjYyMDI1NjU5OTU0NjkwNiwxOC41Mzk0NjA3MDUwNDAxNDIsMTYuMTAzMzkyNTI3OTA5NzA1LDIwLjEzMzI5NTM4MDY1MzEyNCw0LjA4ODQ4MDIxOTk3MzMyLDIzLjkwMDUwMDY4MjE5NDc0Niw0LjczMDA0Njg1MDAxMjM3MSwxMi41NTY0NTM3NjE3NTI4MiwxMS4yMjMxODA5ODMxNzQyMDMsMjUuNzYzNzk0NDcwNjk0MjUsMTguNjY0ODUxODExNDIxMTYsNS4yNDkyNDg1NTUzMzAzMzI1LDE1LjI3NzY5NjI0MjgxMzEzNiwxMC4xNzQ1MTgzNzM0NjIzMDUsMTUuMDMwOTU1NjU0ODI0NTk1LDE2LjY5MTQ5NTI3MjExMjE3OCwxNC44NDg1OTg5OTU2Nzk2OCwzMy44NDcwNjAxMzU3MzM0NCwyLjE1ODQ4NTUxOTMzNTM5MywwLjAyNzAyNjA5OTA1ODMzNTc1CisxNSxUdWUgOCBGZWIgMTEsMS4xODkwMTYwMzA2ODM4MjkzLDEuMDYxNjE3NzE0MjQwODM3MiwwLjYxNzk0NzkxOTQwMTUzMjcsMS4yNzc0NjA2Njc4MTcxNTk0LDEuMjg3NjY3NTIzMDY2MDg1NSwyMC44MTU2NTAyNTIwNDg0NDIsMjIuNjIwMzQ1NTY0MzUwNDYsMTguNTM5NTMzNjIwMTkzNTM4LDE2LjEwMzQ1NTg2MjA3ODY0NywyMC4xMzMzNzQ1NjQzMTEzOTYsNC4wODg0OTYyOTk4NDU3MTU1LDIzLjkwMDU5NDY4MjE2MDYsNC43MzAwNjU0NTMxNDc0NDYsMTIuNTU2NTAzMTQ1OTE1OTU0LDExLjIyMzIyNTEyMzYxNDc0LDI1Ljc2Mzg5NTc5ODkzOTc1NywxOC42NjQ5MjUyMTk3MzQwNzMsNS4yNDkyNjkyMDA0NzA0MzcsMTUuMjc3NzU2MzI5NTQyODgyLDEwLjE3NDU1ODM4OTU0MzY3NywxNS4wMzEwMTQ3NzExMzA4ODQsMTYuNjkxNTYwOTE5MjcxOTIsMTQuODQ4NjU3Mzk0NzgyNTc4LDMzLjg0NzE5MzI1NTIyNDk2NSwyLjE1ODQ5NDAwODU5NTQyMjMsMC4wMjcwMjYyMDUzNTExODc5OTMKKzE2LFdlZCA5IEZlYiAxMSwxLjE4OTAyMDg5NDA3NDIyNTUsMS4wNjE2MjIwNTY1MzgzODQ1LDAuNjE3OTUwNDQ2OTcyMTQ0MiwxLjI3NzQ2NTg5Mjk2OTUzNzcsMS4yODc2NzI3ODk5NjcyMDM0LDIwLjgxNTczNTM5MzU2OTU1NCwyMi42MjA0MzgwODc1NTMyODIsMTguNTM5NjA5NDUxNzk0OTczLDE2LjEwMzUyMTcyOTQ3NzAyMywyMC4xMzM0NTY5MTUxNDQzMDgsNC4wODg1MTMwMjI4NzgxNDYsMjMuOTAwNjkyNDQxOTIxMzM2LDQuNzMwMDg0ODAwMzY3NTg1LDEyLjU1NjU1NDUwNTMzODU1MywxMS4yMjMyNzEwMjk1NzcyMDUsMjUuNzY0MDAxMTgwMDk1MzYzLDE4LjY2NTAwMTU2NDIyMDM3NSw1LjI0OTI5MDY3MTM3MTM3NjUsMTUuMjc3ODE4ODE5NjExNTU0LDEwLjE3NDYwMDAwNjE4MTUzNSwxNS4wMzEwNzYyNTE5NjEyMjQsMTYuNjkxNjI5MTkyMTc1Njk3LDE0Ljg0ODcxODEyOTcyMjk4MiwzMy44NDczMzE2OTkyMDc1MywyLjE1ODUwMjgzNzQwNzQ1MDQsMC4wMjcwMjYzMTU4OTU1MjM5NTYKKzE3LFRodSAxMCBGZWIgMTEsMS4xODkwMjU2MjU3OTc2OTksMS4wNjE2MjYyODEyNzY1OTg5LDAuNjE3OTUyOTA2MTEzNjUzMywxLjI3NzQ3MDk3NjY2MDk4NzcsMS4yODc2Nzc5MTQyNzcxMjczLDIwLjgxNTgxODIzMDA0ODExLDIyLjYyMDUyODEwNTg2ODcxNSwxOC41Mzk2ODMyMzA0MDE5NSwxNi4xMDM1ODU4MTM2NDI1NTMsMjAuMTMzNTM3MDM2NDg3MTI3LDQuMDg4NTI5MjkzMTY2Njk0LDIzLjkwMDc4NzU1NTAyNDg5LDQuNzMwMTAzNjIzNzk5MDI1LDEyLjU1NjYwNDQ3NDMwMzc4MiwxMS4yMjMzMTU2OTI3MjQyMTMsMjUuNzY0MTAzNzA4MjU5MzQsMTguNjY1MDc1ODQxODI2ODIsNS4yNDkzMTE1NjA5ODkwNTcsMTUuMjc3ODc5NjE3ODgyMDY0LDEwLjE3NDY0MDQ5NjEyOTEyOSwxNS4wMzExMzYwNjgzMTY1ODQsMTYuNjkxNjk1NjE2NzIyMiwxNC44NDg3NzcyMjAzODE5MTksMzMuODQ3NDY2Mzk1MDg2MDMsMi4xNTg1MTE0MjcxOTY0MDUsMC4wMjcwMjY0MjM0NDcwODUwNTcKKzE4LEZyaSAxMSBGZWIgMTEsMS4xODkwMzA0NTE3NTQ3MTk3LDEuMDYxNjMwNTkwMTUxNjA2OCwwLjYxNzk1NTQxNDIyOTYyNzcsMS4yNzc0NzYxNjE1OTU1MjI4LDEuMjg3NjgzMTQwNjM5MDYyNSwyMC44MTU5MDI3MTYyMzc0MTcsMjIuNjIwNjE5OTE2OTIzMDksMTguNTM5NzU4NDc4MzI5NzYsMTYuMTAzNjUxMTc0MDYxNDQsMjAuMTMzNjE4NzUzNDY4MDg1LDQuMDg4NTQ1ODg3NDgyNDE4LDIzLjkwMDg4NDU2MjMzMTU1NSw0LjczMDEyMjgyMjEwNDE2NCwxMi41NTY2NTU0Mzg0MTQzOTYsMTEuMjIzMzYxMjQ1MzQ5ODA3LDI1Ljc2NDIwODI3ODI5OTIzNiwxOC42NjUxNTE1OTg2OTE3OCw1LjI0OTMzMjg2NjYyOTA5NiwxNS4yNzc5NDE2MjY5NjY0NTIsMTAuMTc0NjgxNzkyNDQ0OTE1LDE1LjAzMTE5NzA3NTkzMDc3NywxNi42OTE3NjMzNjQxMzE0MiwxNC44NDg4Mzc0ODc4NDcyNDgsMzMuODQ3NjAzNzczNDY5MywyLjE1ODUyMDE4ODA1MzMxNjIsMC4wMjcwMjY1MzMxNDA1NjQ0NAorMTksU2F0IDEyIEZlYiAxMSwxLjE4OTAzNTEwODU4NjMwMTMsMS4wNjE2MzQ3NDgwMjIyOTYzLDAuNjE3OTU3ODM0NDQ4Nzk1LDEuMjc3NDgxMTY0ODI0MjY3OSwxLjI4NzY4ODE4Mzg0MzM4OTYsMjAuODE1OTg0MjQxNjEyMTcsMjIuNjIwNzA4NTEwNDYzNDMsMTguNTM5ODMxMDg5MTk3NDYzLDE2LjEwMzcxNDI0MzkyNzU1NiwyMC4xMzM2OTc2MDY2ODEyNCw0LjA4ODU2MTkwMDI1MTE0MywyMy45MDA5NzgxNzAwMjE2ODgsNC43MzAxNDEzNDc2MDU2MSwxMi41NTY3MDQ2MTY0OTAxNTEsMTEuMjIzNDA1MjAxNTg1NzkxLDI1Ljc2NDMwOTE4MzY4NzA2LDE4LjY2NTIyNDcwMDY2MTAxNCw1LjI0OTM1MzQyNTYxMzk3NSwxNS4yNzgwMDE0NjI5NDU0MTIsMTAuMTc0NzIxNjQxNTMzMjY3LDE1LjAzMTI1NTk0NTUzNjAwMywxNi42OTE4Mjg3MzczMzU4NCwxNC44NDg4OTU2NDMyNDIwODgsMzMuODQ3NzM2MzM3NDMzNSwyLjE1ODUyODY0MTg4NjQwOTQsMC4wMjcwMjY2Mzg5ODk4NDA5NQorMjAsU3VuIDEzIEZlYiAxMSwxLjE4OTAzOTg1OTQ5ODc3NTQsMS4wNjE2Mzg5ODk4OTM0ODEzLDAuNjE3OTYwMzAzNTYzMDg5NCwxLjI3NzQ4NjI2OTEzMjA4NTIsMS4yODc2OTMzMjg5MzQ0MDYsMjAuODE2MDY3NDE0MDI1MjQsMjIuNjIwNzk4ODkzODM4NTU0LDE4LjUzOTkwNTE2NzAwNTcxMywxNi4xMDM3Nzg1ODc5Nzk1NzYsMjAuMTMzNzc4MDUyOTQ3NjMzLDQuMDg4NTc4MjM2NTIyMTE3NSwyMy45MDEwNzM2Njg4NDYzMjMsNC43MzAxNjAyNDczNzM0NzYsMTIuNTU2NzU0Nzg4MDk5MTg0LDExLjIyMzQ1MDA0NTg1OTQyMywyNS43NjQ0MTIxMjc2NDMwMjcsMTguNjY1Mjk5Mjc5NDkyMzg4LDUuMjQ5Mzc0Mzk5OTQ3MjcxLDE1LjI3ODA2MjUwNzc3NjgxLDEwLjE3NDc2MjI5NTY4MzUyMiwxNS4wMzEzMTYwMDQ0NzAxOTksMTYuNjkxODk1NDMxMjYwMDA4LDE0Ljg0ODk1NDk3MzUzNjkwNSwzMy44NDc4NzE1Nzk1NTY4NSwyLjE1ODUzNzI2NjUxMDM0LDAuMDI3MDI2NzQ2OTc3NTY1OTkKKzIxLE1vbiAxNCBGZWIgMTEsMS4xODkwNDQ3MzI0NjYyMTMsMS4wNjE2NDMzNDA3NDE5MzA4LDAuNjE3OTYyODM2MTExMDIwOCwxLjI3NzQ5MTUwNDU3Mzg5MTUsMS4yODc2OTg2MDYyMDcxNjUxLDIwLjgxNjE1MjcyMzIwNzk3OCwyMi42MjA4OTE1OTkyMzkwNiwxOC41Mzk5ODExNDc5MzU1NzgsMTYuMTAzODQ0NTg1MDg0NzcyLDIwLjEzMzg2MDU2NTk0NjcyLDQuMDg4NTk0OTkyNDg1NzI0LDIzLjkwMTE3MTYyMTExNjU5LDQuNzMwMTc5NjMyNjkyMzY5LDEyLjU1NjgwNjI0ODY1OTMxMywxMS4yMjM0OTYwNDIyMjA0MDQsMjUuNzY0NTE3NzE2MzE2MzYyLDE4LjY2NTM3NTc3NDMxNzA1Niw1LjI0OTM5NTkxMzEyODk0MywxNS4yNzgxMjUxMjA5MDE1OTIsMTAuMTc0ODAzOTk0MjczMzE5LDE1LjAzMTM3NzYwNjM2OTI5LDE2LjY5MTk2MzgzODYwNzUzNSwxNC44NDkwMTU4MjgwNzcyLDMzLjg0ODAxMDI5NjE2NDc3LDIuMTU4NTQ2MTEyNzA4MTU4NywwLjAyNzAyNjg1NzczOTU4NzA0NgorMjIsVHVlIDE1IEZlYiAxMSwxLjE4OTA0OTM5Mzc5ODgyLDEuMDYxNjQ3NTAyNjMxMzc1NCwwLjYxNzk2NTI1ODY2OTQzMjQsMS4yNzc0OTY1MTI2Mzg0NzE0LDEuMjg3NzAzNjU0Mjg1OTYyOCwyMC44MTYyMzQzMjczODA1LDIyLjYyMDk4MDI3ODQwODc1LDE4LjU0MDA1MzgyODk4NDc1MywxNi4xMDM5MDc3MTU5MTA1NjYsMjAuMTMzOTM5NDk1Mzc0ODc1LDQuMDg4NjExMDIwNzMxNDQ5LDIzLjkwMTI2NTMxOTI4MjU0NCw0LjczMDE5ODE3NjA5OTQ5OSwxMi41NTY4NTU0NzQyNjc3NSwxMS4yMjM1NDAwNDA5NDE5NDEsMjUuNzY0NjE4NzE5MjMzNTEsMTguNjY1NDQ4OTQ2OTQyNDA1LDUuMjQ5NDE2NDkxOTg0OTY3LDE1LjI3ODE4NTAxNDcxNDU1MiwxMC4xNzQ4NDM4ODE4Nzc0OTMsMTUuMDMxNDM2NTMyODc0NDY2LDE2LjY5MjAyOTI3NDk5Nzk2NCwxNC44NDkwNzQwMzk2ODE3MSwzMy44NDgxNDI5ODgyNTc2OCwyLjE1ODU1NDU3NDcxMjI0NDUsMC4wMjcwMjY5NjM2OTExNzEzODUKKzIzLFdlZCAxNiBGZWIgMTEsMS4xODkwNTQyMTk3NjM0NzM3LDEuMDYxNjUxODExNTEzMTk5MiwwLjYxNzk2Nzc2Njc4OTM3MzUsMS4yNzc1MDE2OTc1ODEyMDQ0LDEuMjg3NzA4ODgwNjU2MTY1MiwyMC44MTYzMTg4MTM3MDM0MiwyMi42MjEwNzIwODk2MDgzOSwxOC41NDAxMjkwNzcwMzE1MzcsMTYuMTAzOTczMDc2NDMyODUsMjAuMTM0MDIxMjEyNDg1MDY3LDQuMDg4NjI3NjE1MDczNDI3NSwyMy45MDEzNjIzMjY3NDI2Myw0LjczMDIxNzM3NDQzNTAxNCwxMi41NTY5MDY0Mzg0NTg5NjcsMTEuMjIzNTg1NTkzNjM5NTg0LDI1Ljc2NDcyMzI4OTQzODgyLDE4LjY2NTUyNDcwMzkyNzIyLDUuMjQ5NDM3Nzk3NjU4NjkzLDE1LjI3ODI0NzAyMzg5NzAyMywxMC4xNzQ4ODUxNzgyNTg1OTIsMTUuMDMxNDk3NTQwNTg1MTUsMTYuNjkyMDk3MDIyNTE0MzMyLDE0Ljg0OTEzNDMwNzI0MjMzOCwzMy44NDgyODAzNjY4NTgxNSwyLjE1ODU2MzMzNTU4MzAxMSwwLjAyNzAyNzA3MzM4NDgyNDI5NgorMjQsVGh1IDE3IEZlYiAxMSwxLjE4OTA1ODk4ODk2Mzk1MzYsMS4wNjE2NTYwNjk3MTI5MDUsMC42MTc5NzAyNDU0MDgxOTU3LDEuMjc3NTA2ODIxNTM3Mzc3NSwxLjI4NzcxNDA0NTU1MjUyNDcsMjAuODE2NDAyMzA2Mjc3NjM4LDIyLjYyMTE2MjgyMDkwMjI3LDE4LjU0MDIwMzQzOTk5MjQ2NywxNi4xMDQwMzc2NjgxNjg3NTgsMjAuMTM0MTAxOTY4NDE4NjYyLDQuMDg4NjQ0MDE0MjI4NzA2LDIzLjkwMTQ1ODE5MzE3NzI2Myw0LjczMDIzNjM0Njk1NTAxLDEyLjU1Njk1NjgwMzE5NjkyNSwxMS4yMjM2MzA2MTA1MzUyNjcsMjUuNzY0ODI2NjI5NjYzODQ0LDE4LjY2NTU5OTU2OTgzOTg4NCw1LjI0OTQ1ODg1MjcyOTkwMTUsMTUuMjc4MzA4MzAzNzEyNDA3LDEwLjE3NDkyNTk4ODkwMTYwNiwxNS4wMzE1NTc4MzA3MDgyMzgsMTYuNjkyMTYzOTczMTY3ODgsMTQuODQ5MTkzODY1OTIxMjIyLDMzLjg0ODQxNjEyOTU3ODAzLDIuMTU4NTcxOTkzNDA2Mjg3MiwwLjAyNzAyNzE4MTc4ODIzMzYzCisyNSxGcmkgMTggRmViIDExLDEuMTg5MDYzMzk0MzE5ODMxLDEuMDYxNjYwMDAzMDUyNTA3NCwwLjYxNzk3MjUzNDkzMTk5NDcsMS4yNzc1MTE1NTQ1ODQ0Njc3LDEuMjg3NzE4ODE2NDE2NDUyNiwyMC44MTY0Nzk0MjkxNjMxNjcsMjIuNjIxMjQ2NjMwMjYyMDUsMTguNTQwMjcyMTI5NzY3MzE3LDE2LjEwNDA5NzMzMjE3LDIwLjEzNDE3NjU2MzQ0MzIyLDQuMDg4NjU5MTYyMjg0NTI5LDIzLjkwMTU0Njc0NTkxNTQ4Miw0LjczMDI1Mzg3MjA1MjMzNywxMi41NTcwMDMzMjU1ODQ3ODcsMTEuMjIzNjcyMTkzMDcwMzI4LDI1Ljc2NDkyMjA4NjAxMzQsMTguNjY1NjY4NzI0MTk2MDI0LDUuMjQ5NDc4MzAxNDk5NTg2LDE1LjI3ODM2NDkwODQ2MTEyOCwxMC4xNzQ5NjM2ODYwODEsMTUuMDMxNjEzNTIxMjY4ODM4LDE2LjY5MjIyNTgxNjEyMzg1LDE0Ljg0OTI0ODg4MDgzOTgxLDMzLjg0ODU0MTUzNDg5NDcxLDIuMTU4NTc5OTkwNzIwMDQ5NiwwLjAyNzAyNzI4MTkyMTQ5NDcKKzI2LFNhdCAxOSBGZWIgMTEsMS4xODkwNjgwNDU0NzI2NjEsMS4wNjE2NjQxNTU4NTI4OTcyLDAuNjE3OTc0OTUyMTk5ODM1NywxLjI3NzUxNjU1MTcxMjA0NTMsMS4yODc3MjM4NTM0NzA4NjUzLDIwLjgxNjU2MDg1NTEyMjE2MiwyMi42MjEzMzUxMTU3NjczMjMsMTguNTQwMzQ0NjUyMDksMTYuMTA0MTYwMzI1MTI1ODMyLDIwLjEzNDI1NTMyMDQ5OTE5Myw0LjA4ODY3NTE1NTUyNjUzOCwyMy45MDE2NDAyMzk0NTYxLDQuNzMwMjcyMzc0OTYyOTI5LDEyLjU1NzA1MjQ0MzY5MDUyMywxMS4yMjM3MTYwOTU3MDQwNjMsMjUuNzY1MDIyODY4MzUyNTAzLDE4LjY2NTc0MTczNzAyMTMwNyw1LjI0OTQ5ODgzNTQxMzg5NSwxNS4yNzg0MjQ2NzE0NzMzNDYsMTAuMTc1MDAzNDg2NTc1NTM0LDE1LjAzMTY3MjMxOTA4NTcxNSwxNi42OTIyOTExMDk2MDkyMTUsMTQuODQ5MzA2OTY1MzE3MjgyLDMzLjg0ODY3MzkzNzIwNDM1LDIuMTU4NTg4NDM0MjQ0MTU1MywwLjAyNzAyNzM4NzY0MTY5Mzc5NQorMjcsU3VuIDIwIEZlYiAxMSwxLjE4OTA3Mjc5MjkzMzE0OTcsMS4wNjE2NjgzOTQ2NDE5NjQ1LDAuNjE3OTc3NDE5NTIwMDg3OCwxLjI3NzUyMTY1MjMxMTEwNDgsMS4yODc3Mjg5OTQ4MjM0ODksMjAuODE2NjQzOTY3MTAyNjM1LDIyLjYyMTQyNTQzMzQ3MDQyLDE4LjU0MDQxODY3NjA3Mzc1NiwxNi4xMDQyMjQ2MjI0MjU4NDYsMjAuMTM0MzM1NzA4MzEzODEzLDQuMDg4NjkxNDc5OTI3Njc1LDIzLjkwMTczNTY2ODg5MTg2LDQuNzMwMjkxMjYwOTk4MzM1LDEyLjU1NzEwMjU3ODg0NTE3NSwxMS4yMjM3NjA5MDczOTQxMjMsMjUuNzY1MTI1NzM3NTEwMDMzLDE4LjY2NTgxNjI2MTY2NDE2Miw1LjI0OTUxOTc5NDUwNzM3MSwxNS4yNzg0ODU2NzE5NDk5MzcsMTAuMTc1MDQ0MTExMTg2NzM2LDE1LjAzMTczMjMzNDM4MTQ3MywxNi42OTIzNTc3NTUwNzM5NywxNC44NDkzNjYyNTI1MDMxMDMsMzMuODQ4ODA5MDgxMDYxNTIsMi4xNTg1OTcwNTI2MDE0ODYsMC4wMjcwMjc0OTU1NTA5NTU1NDQKKzI4LE1vbiAyMSBGZWIgMTEsMS4xODkwNzc0MjM2NzIxMjA3LDEuMDYxNjcyNTI5MjE1NzU5LDAuNjE3OTc5ODI2MTc4NTY2NSwxLjI3NzUyNjYyNzUwNjM0NzMsMS4yODc3MzQwMDk3NzAzMjU0LDIwLjgxNjcyNTAzNTY4NDAxNiwyMi42MjE1MTM1MzA2MTM4MSwxOC41NDA0OTA4ODAwOTY3NywxNi4xMDQyODczMzg5MDYyOSwyMC4xMzQ0MTQxMTk3MDU5NSw0LjA4ODcwNzQwMjk3NTUzLDIzLjkwMTgyODc1MjA5MDQxLDQuNzMwMzA5NjgyNjk5ODY4LDEyLjU1NzE1MTQ4MTM3MjEwMiwxMS4yMjM4MDQ2MTczMzk2NjcsMjUuNzY1MjI2MDc3NTE2NjE2LDE4LjY2NTg4ODk1NDAzNzAzLDUuMjQ5NTQwMjM4Mjk4NTY0NSwxNS4yNzg1NDUxNzI2NjI5NzMsMTAuMTc1MDgzNzM2OTk3MzUxLDE1LjAzMTc5MDg3NDEzNTQyNCwxNi42OTI0MjI3NjE5ODY5NiwxNC44NDk0MjQwODIwNDg0NDQsMzMuODQ4OTQwOTAyMjU4OTYsMi4xNTg2MDU0NTkwNjcwNTQzLDAuMDI3MDI3NjAwODA3MTQ5ODg3CisyOSxUdWUgMjIgRmViIDExLDEuMTg5MDgyNzM5MTI1MzgyMiwxLjA2MTY3NzI3NTEzOTQ0NSwwLjYxNzk4MjU4ODY5MjQ0MjgsMS4yNzc1MzIzMzgzNDgxNjgsMS4yODc3Mzk3NjYyNDE1MjM4LDIwLjgxNjgxODA5MTI5NzM2NCwyMi42MjE2MTQ2NTQwNTI0MjIsMTguNTQwNTczNzYwNDEyODU1LDE2LjEwNDM1OTMyODgyNDY0MywyMC4xMzQ1MDQxMjUyMzA0NSw0LjA4ODcyNTY4MDQ1MDcwNzUsMjMuOTAxOTM1NTk4ODM2NTMsNC43MzAzMzA4MjgyODY3OTYsMTIuNTU3MjA3NjE0NzY2MzQxLDExLjIyMzg1NDc5MDM2MjYyMywyNS43NjUzNDEyNTQwODMxMjUsMTguNjY1OTcyMzk0OTExNzA1LDUuMjQ5NTYzNzA0OTY3MTA5LDE1LjI3ODYxMzQ3MTMyMTM2NCwxMC4xNzUxMjkyMjE5OTM1MDEsMTUuMDMxODU4MDY5NzQ0NjAxLDE2LjY5MjQ5NzM4MTAwNzc0LDE0Ljg0OTQ5MDQ2MjQzNTUxMiwzMy44NDkwOTIyMTQ5MTUwNiwyLjE1ODYxNTEwODUzNjYzMywwLjAyNzAyNzcyMTYyNjgyNTY4CiszMCxXZWQgMjMgRmViIDExLDEuMTg5MDg2ODEzMjE1NDI3LDEuMDYxNjgwOTEyNzA3MDE4NCwwLjYxNzk4NDcwNjA1Mjg0OTgsMS4yNzc1MzY3MTU0ODgzMDI4LDEuMjg3NzQ0MTc4MzU0ODE3MSwyMC44MTY4ODk0MTQ4MzgxODcsMjIuNjIxNjkyMTYxMjcwMzc0LDE4LjU0MDYzNzI4NDk4MDUzNCwxNi4xMDQ0MTQ1MDYzMjIyNTcsMjAuMTM0NTczMTEwOTk1NzQ2LDQuMDg4NzM5Njg5NDMwOTQ1LDIzLjkwMjAxNzQ5Mjc0OTA1Myw0LjczMDM0NzAzNTU2NDEyOTUsMTIuNTU3MjUwNjM4ODQ5MzgyLDExLjIyMzg5MzI0NjA1MDgwNywyNS43NjU0Mjk1MzI0ODE5NiwxOC42NjYwMzYzNDkxMjU5OSw1LjI0OTU4MTY5MTI2NDA0MSwxNS4yNzg2NjU4MTk2MTA0OTUsMTAuMTc1MTY0MDg0NDg5ODUsMTUuMDMxOTA5NTcyNTg5LDE2LjY5MjU1NDU3MzYxMTAzNCwxNC44NDk1NDEzNDA0NDM2MzYsMzMuODQ5MjA4MTkwMjMzNjk2LDIuMTU4NjIyNTA0NDgzMTMzOCwwLjAyNzAyNzgxNDIzMDQ1MDI1MworMzEsVGh1IDI0IEZlYiAxMSwxLjE4OTA5MTg3NjE0ODMxOTYsMS4wNjE2ODU0MzMxNjY4ODQ0LDAuNjE3OTg3MzM3MzI4NDMwNCwxLjI3NzU0MjE1NTAyNjA5NTUsMS4yODc3NDk2NjEzNTQyODE0LDIwLjgxNjk3ODA0OTY3Mzc5MywyMi42MjE3ODg0ODA2NTQ0MDIsMTguNTQwNzE2MjI3OTE1MDI3LDE2LjEwNDQ4MzA3NjIyNzM1MywyMC4xMzQ2NTg4NDA2NDI1NDQsNC4wODg3NTcwOTg2MDExLDIzLjkwMjExOTI2MzU0NDMwNyw0LjczMDM2NzE3NjU5MTEzLDEyLjU1NzMwNDEwNTUyMzY1NiwxMS4yMjM5NDEwMzU1MTIxNywyNS43NjU1MzkyMzczNzQxODUsMTguNjY2MTE1ODI1OTg4NzI2LDUuMjQ5NjA0MDQzMTA1NDE0LDE1LjI3ODczMDg3MzYxNTcyOSwxMC4xNzUyMDc0MDg2Mzc3MzIsMTUuMDMxOTczNTc1OTQ3Mzc2LDE2LjY5MjYyNTY0NzcxODI0NSwxNC44NDk2MDQ1NjczMDg1NDYsMzMuODQ5MzUyMzE0NTA0MjQ1LDIuMTU4NjMxNjk1NTM2OTQsMC4wMjcwMjc5MjkzMTAzNjU1NDUKKzMyLEZyaSAyNSBGZWIgMTEsMS4xODkwOTY4Njg1NTUxMDYyLDEuMDYxNjg5ODkwNjU3MjMyNywwLjYxNzk4OTkzMTk1MDYyODMsMS4yNzc1NDc1MTg3OTE3MTM4LDEuMjg3NzU1MDY3OTc2MTU1MSwyMC44MTcwNjU0NDk4MzU2NCwyMi42MjE4ODM0NTgzMTk3NTgsMTguNTQwNzk0MDcxMTgyOTQ0LDE2LjEwNDU1MDY5MDk2MTA3NiwyMC4xMzQ3NDMzNzYwODQ2Myw0LjA4ODc3NDI2NTI2MzQwMywyMy45MDIyMTk2MTY2ODMzNjgsNC43MzAzODcwMzcwNTU3OTksMTIuNTU3MzU2ODI3NDEyOTE3LDExLjIyMzk4ODE1OTI3MTUsMjUuNzY1NjQ3NDE0MDg5MTAyLDE4LjY2NjE5NDE5NTc0NzMyMyw1LjI0OTYyNjA4MzU4ODA0OCwxNS4yNzg3OTUwMjE0MjU2NTEsMTAuMTc1MjUwMTI5Mjg0OTE5LDE1LjAzMjAzNjY4Nzc0NTg1OCwxNi42OTI2OTU3MzE3NzA4MSwxNC44NDk2NjY5MTM0MzAwNywzMy44NDk0OTQ0MzExMzkyNSwyLjE1ODY0MDc1ODU2MDM2MywwLjAyNzAyODA0Mjc4NzIzMDAzMwpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Jbm9jdWxhdGlvblRlc3RfUktfUmVmZXJlbmNlL0h1bWFuUG9wdWxhdGlvbk1vZGVsL3J1bnBhcmFtZXRlcnMuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Jbm9jdWxhdGlvblRlc3RfUktfUmVmZXJlbmNlL0h1bWFuUG9wdWxhdGlvbk1vZGVsL3J1bnBhcmFtZXRlcnMuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIyOTUwNjYKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0lub2N1bGF0aW9uVGVzdF9SS19SZWZlcmVuY2UvSHVtYW5Qb3B1bGF0aW9uTW9kZWwvcnVucGFyYW1ldGVycy5jc3YKQEAgLTAsMCArMSwyIEBACitwb3B1bGF0aW9uSWRlbnRpZmllcixuYW1lLHRhcmdldElTT0tleSxiaXJ0aFJhdGUsZGVhdGhSYXRlLHRpbWVQZXJpb2QKK2h1bWFuLEh1bWFuUG9wdWxhdGlvbk1vZGVsLCwzLjlFLTUsMy41RS01LDg2NDAwMDAwClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Jbm9jdWxhdGlvblRlc3RfUktfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL0Rpc2Vhc2UgRGVhdGhzXzAuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Jbm9jdWxhdGlvblRlc3RfUktfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL0Rpc2Vhc2UgRGVhdGhzXzAuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJjMjQ0MDEKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0lub2N1bGF0aW9uVGVzdF9SS19SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vRGlzZWFzZSBEZWF0aHNfMC5jc3YKQEAgLTAsMCArMSBAQAoraXRlcmF0aW9uLHRpbWUsCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0lub2N1bGF0aW9uVGVzdF9SS19SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vRGlzZWFzZSBEZWF0aHNfMS5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0lub2N1bGF0aW9uVGVzdF9SS19SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vRGlzZWFzZSBEZWF0aHNfMS5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmMyNDQwMQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvSW5vY3VsYXRpb25UZXN0X1JLX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9EaXNlYXNlIERlYXRoc18xLmNzdgpAQCAtMCwwICsxIEBACitpdGVyYXRpb24sdGltZSwKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvSW5vY3VsYXRpb25UZXN0X1JLX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9EaXNlYXNlIERlYXRoc18yLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvSW5vY3VsYXRpb25UZXN0X1JLX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9EaXNlYXNlIERlYXRoc18yLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YWQxYTViCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Jbm9jdWxhdGlvblRlc3RfUktfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL0Rpc2Vhc2UgRGVhdGhzXzIuY3N2CkBAIC0wLDAgKzEsMzMgQEAKK2l0ZXJhdGlvbix0aW1lLEVHLUZSRy1HMjEwMDAxLEVHLUZSRy1HMjEwMDAyLEVHLUZSRy1HMjEwMDAzLEVHLUZSRy1HMjEwMDA0LEVHLUZSRy1HMjEwMDA1LEVHLUxPRS1HMjQwMDAxLEVHLUxPRS1HMjQwMDAyLEVHLUxPRS1HMjQwMDAzLEVHLUxPRS1HMjQwMDA0LEVHLUxPRS1HMjQwMDA1LEVHLUxPRS1HMjQwMDA2LEVHLUxPRS1HMjQwMDA3LEVHLUxPRS1HMjQwMDA4LEVHLUxPRS1HMjQwMDA5LEVHLVVQRS1HMjkwMDAxLEVHLVVQRS1HMjkwMDAyLEVHLVVQRS1HMjkwMDAzLEVHLVVQRS1HMjkwMDA0LEVHLVVQRS1HMjkwMDA1LEVHLVVQRS1HMjkwMDA2LEVHLVVQRS1HMjkwMDA3LEVHLVVQRS1HMjkwMDA4LEVHLVVSRy1HMzAwMDAxLEVHLVVSRy1HMzAwMDAyLEVHLVVSRy1HMzAwMDAzLEVHLVVSRy1HMzAwMDA0CisxLFR1ZSAyNSBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMixXZWQgMjYgSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzMsVGh1IDI3IEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCis0LEZyaSAyOCBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorNSxTYXQgMjkgSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzYsU3VuIDMwIEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCis3LE1vbiAzMSBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorOCxUdWUgMSBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorOSxXZWQgMiBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTAsVGh1IDMgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzExLEZyaSA0IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxMixTYXQgNSBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTMsU3VuIDYgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzE0LE1vbiA3IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxNSxUdWUgOCBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTYsV2VkIDkgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzE3LFRodSAxMCBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTgsRnJpIDExIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxOSxTYXQgMTIgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzIwLFN1biAxMyBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjEsTW9uIDE0IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyMixUdWUgMTUgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzIzLFdlZCAxNiBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjQsVGh1IDE3IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyNSxGcmkgMTggRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzI2LFNhdCAxOSBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjcsU3VuIDIwIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyOCxNb24gMjEgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzI5LFR1ZSAyMiBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMzAsV2VkIDIzIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCiszMSxUaHUgMjQgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzMyLEZyaSAyNSBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Jbm9jdWxhdGlvblRlc3RfUktfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL0VfMC5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0lub2N1bGF0aW9uVGVzdF9SS19SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vRV8wLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYzI0NDAxCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Jbm9jdWxhdGlvblRlc3RfUktfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL0VfMC5jc3YKQEAgLTAsMCArMSBAQAoraXRlcmF0aW9uLHRpbWUsCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0lub2N1bGF0aW9uVGVzdF9SS19SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vRV8xLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvSW5vY3VsYXRpb25UZXN0X1JLX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9FXzEuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJjMjQ0MDEKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0lub2N1bGF0aW9uVGVzdF9SS19SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vRV8xLmNzdgpAQCAtMCwwICsxIEBACitpdGVyYXRpb24sdGltZSwKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvSW5vY3VsYXRpb25UZXN0X1JLX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9FXzIuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Jbm9jdWxhdGlvblRlc3RfUktfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL0VfMi5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWY1OTY0ZgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvSW5vY3VsYXRpb25UZXN0X1JLX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9FXzIuY3N2CkBAIC0wLDAgKzEsMzMgQEAKK2l0ZXJhdGlvbix0aW1lLEVHLUZSRy1HMjEwMDAxLEVHLUZSRy1HMjEwMDAyLEVHLUZSRy1HMjEwMDAzLEVHLUZSRy1HMjEwMDA0LEVHLUZSRy1HMjEwMDA1LEVHLUxPRS1HMjQwMDAxLEVHLUxPRS1HMjQwMDAyLEVHLUxPRS1HMjQwMDAzLEVHLUxPRS1HMjQwMDA0LEVHLUxPRS1HMjQwMDA1LEVHLUxPRS1HMjQwMDA2LEVHLUxPRS1HMjQwMDA3LEVHLUxPRS1HMjQwMDA4LEVHLUxPRS1HMjQwMDA5LEVHLVVQRS1HMjkwMDAxLEVHLVVQRS1HMjkwMDAyLEVHLVVQRS1HMjkwMDAzLEVHLVVQRS1HMjkwMDA0LEVHLVVQRS1HMjkwMDA1LEVHLVVQRS1HMjkwMDA2LEVHLVVQRS1HMjkwMDA3LEVHLVVQRS1HMjkwMDA4LEVHLVVSRy1HMzAwMDAxLEVHLVVSRy1HMzAwMDAyLEVHLVVSRy1HMzAwMDAzLEVHLVVSRy1HMzAwMDA0CisxLFR1ZSAyNSBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMixXZWQgMjYgSmFuIDExLDUuMTc0NzQ5ODg2OTQzNjY4RS00LDguNDIyODAzMTkxOTExODkxRS01LDYuMzc5NDAwNTY1MDQ4MDA1RS01LDAuMDcwNDYzNDQ4NDQ2ODcxNTEsMi40NDYxOTE4OTkwMTQ1MDU4RS02LDAuMDI5NDgzNjkzMzQzMTQ4MTM3LDYuOTg4ODc4MzE0MzI2MTY1RS02LDMuNjcwNzIzMjAzNDExMjg4RS00LDAuMDEyODQ4NDg3OTEwMTMxNzA3LDAuMDA5NzAwMzA0MjMxMzI5NCwzLjA1MDUxMDUzNDUxODA2OEUtNCwzLjIzMzA1NTMyMTk1NjQzNjRFLTQsNC40NTAyMjg2NDQzNjM1OTFFLTEwLDEuMzM4Mzg2MzEzMzIyNzYyNUUtNCwwLjAwMTE0ODAyOTczMTIyMTgwNTYsNS4zNzY3MjQ1NDE0OTM5NTQsMC4wODU2NjI5OTAzMzg2MTgwNCwyLjU3ODQwMjE5MDg3MjY2ODNFLTgsNy42NTA5OTU5NDY1MDI2NThFLTUsMC4wMzM3MDA4MzQxODQ1MTA0MywxLjIxNjcxMjA5MzE3ODI5ODdFLTgsMy4xODI5Njc0MTk1MjE3NTRFLTcsMi41MTg3NTI2NjQ3NjEyNkUtNCwwLjA1MjgwNDYzMjEyMzU1NTMsMC4wMjgxNTIwMTc5OTQyOTIwNTMsOC42MzY4NTMwNzMxMDU2MUUtOQorMyxUaHUgMjcgSmFuIDExLDAuMDAyNzMyNjQ3MTk4OTUxMDc5LDkuMTAwNzAyODI4MjQ5MDA3RS00LDcuNzA0MTI0MjczNzI0NzU1RS00LDAuMjc0OTU3NDA4MzE0NzAzNTYsMy4zMzQyMzgwODI4NDA5NjlFLTUsMC4xNDM3NTM3MzIxMjA5NDE4LDkuNjcwMTE5NzcyMjA5Mjk0RS01LDAuMDA0Njg3ODg5ODYwMDUxNzk3LDAuMDY0MjA1NDU5NTY2NDk4MTYsMC4wNTIzODY5ODQwNjE5MTc1NjYsMC4wMDM2NDEzMjg1MDkyOTA1MDY2LDAuMDA0MzEzNjE4NDU3NTc1Njg2LDEuOTU1MjQ1MTA3MDc1MDk4NUUtOCwwLjAwMTcxMTE0MDI4ODk1MTMyMSwwLjAxMDk3NDA3NDMzNzkyNTM3LDE3LjM4MzY3OTk2OTY0NjE0LDAuNDQxMTE5MDIzNDc1NjAwOCw5LjMzMzc4OTYxMDE1MDIzMUUtNywwLjAwMTAwMTQ2MDI3MDU0OTg5NiwwLjE3MTA2ODg4MzAwMjc3NzEsNC4xNTUxMzE3MjcwMDI4MjA3RS03LDEuMzQwMDYxNDM0NzExMTAxRS01LDAuMDAzMTgxMzc4NjE3NDUwMTg0NiwwLjI3MjMyNTQzMzY0MjQ0ODc3LDAuMTI0NjI3NTQ0NTkxNDA3NTEsMy4zMTUzNDA1MzM2Njc3NDU3RS03Cis0LEZyaSAyOCBKYW4gMTEsMC4wMTI1MDUwODA4Nzc1NTc5NzQsMC4wMDUzMjUzMDIxMzQxODE4NzYsMC4wMDUwMzAxOTU3NTQzMDkwNDM1LDAuOTU5MTM4Njk4MzA4MzY3NiwyLjQ3OTUyNTM4NjUxOTM0MTZFLTQsMC42MTAzODQ1MTA4MjU4MjA3LDcuMzIyOTI4MjcyNzU3MjQ1RS00LDAuMDMyNTY1ODk4NjIwMTc0LDAuMjc5OTAyMjMzMzI2ODkzNSwwLjI0NDQxODk4MzM2MzkwMzAzLDAuMDIzNTE1NTYyMjQ2MzYwMjYsMC4wMzEzNzQ3MzQzMjUxNDA4NzQsMi42MTkyOTE2NTY2MDEyNDNFLTcsMC4wMTE4OTUzMjYyNTk3NzgwNjgsMC4wNzA2OTY2OTI2ODMxMzU1NSw1My41Njg4Mjk5ODU5ODUxMiwxLjk3MjU1MTY5NTYxODQ1NSwxLjA0MTc5OTQ4OTIwMzAwMDJFLTUsMC4wMDcxNDY4ODk0ODA5MjY0MTgsMC43NTQ4NzgwNDU5NTA3OTEzLDQuNjA4NDUyMDI5MzU0Mzg5RS02LDEuNzEwMDY3NzQ4MTIwNzk3RS00LDAuMDIxODQ1NzIzNjEyNDAzNTEsMS4yMTk0ODY1Nzk1NDcwOTIyLDAuNDg0OTM0ODE2NTM4NjY0NTUsMy43NDQxNDMyNjQ3NDU5NDJFLTYKKzUsU2F0IDI5IEphbiAxMSwwLjA1MzA2OTk1NTQ2NTM0NTI4NSwwLjAyNTQzMzA2NDk5ODE3MDAyLDAuMDI2MzM1OTk1NzkzMTM0NzIsMy4xNzY3NzM2NjgzNTY0NSwwLjAwMTQ3MDg2ODk4ODcyNTcyLDIuNDEwNDI5MDYwODA3NTk0LDAuMDA0NDMwMDQwNTE0ODcyNjksMC4xODEyMjcwOTAyOTU3ODU5LDEuMTM3MTg0NjIyNjA3NDc5NSwxLjA1NTM2NzA5MzMxOTMwNzYsMC4xMjIwNTk4MjI1NDM0OTcxLDAuMTgyMjY2MTU3MjQ3MDU5OTQsMi4yODg1NDIxOTQyMzAwNzE3RS02LDAuMDY2MjA5NjA5MTIzNzc2MzgsMC4zODE1MzAzOTY1OTYzMTEwNSwxNjQuNzk2NjU5NTYyNTY3NzUsOC4xODk2NDQ1ODI2OTc1MzYsNy42Mjc3MTU0ODMyMjA1NzZFLTUsMC4wNDA4MzQ1NzgxMDQ5NDgxMSwzLjA5NTAzNDc0ODU5NTYzMywzLjM4NzgxMTg1NjE0NTM4MTdFLTUsMC4wMDE0MjEzMDg0ODAwMjkzNDU3LDAuMTIwMjU0NTU0MzU3MzcxNyw1LjA3MDMzOTg3NzgyMjYzMSwxLjc2NzA0NDAwMjExODE1MDIsMi43MzIwNjcyMTI1MDMxOUUtNQorNixTdW4gMzAgSmFuIDExLDAuMjE1MTAyNjQyMzYyODg4MjksMC4xMTAwODE2NDMzMjg1NTM1NSwwLjEyMjgwNDkyMDQzOTQwMzEyLDEwLjIyNjIxMjE5MDI1MDg1MiwwLjAwNzcxODcwMTc1MDc4NzU5Nyw5LjEwODkzNTEwODQ1OTAyNCwwLjAyMzcyNzYzMDk3ODc2ODY2NiwwLjg5NjMxNDczNTcwODI5ODksNC40MzAzMzE1MzY1OTk2MjUsNC4zNDUyNzU1MjYxODAwMTksMC41NjU3NTcxODQyNjMzMjkzLDAuOTM3ODQ2OTM3MjE0MjYwNSwxLjYwNjczMzc1MDQwMzUwNkUtNSwwLjMyNzM3MTUzMTY4MDcwNzY1LDEuODYwMzc0NTgzMzAzMzYzLDUwNy4zMzYyNjg1MjcxODEzNSwzMi40OTcwODY0MTU4MzI3OCw0LjUzNzk5NTEyODY4MzE3NUUtNCwwLjIwNzE0NTM2OTYzMTAzNDQ0LDEyLjEzNTUyMTg4MDM4MzQxNywyLjAzMzEyMzgxMTY2Mzk5NkUtNCwwLjAwOTQ5OTI1MTE4NDU5ODE2LDAuNTg4NzI1OTI5MjUwODIxMywyMC4xNTAwMTE2NTcwNDY4NSw2LjE5NDY2OTIzODUzOTAxLDEuNjAzMDg5ODE2OTcxMDg2NUUtNAorNyxNb24gMzEgSmFuIDExLDAuODQ1NTg5NzA1NjA1ODM4MSwwLjQ1MDAwNTQzNjI3NjM5NDA2LDAuNTMzMTMwMDY2NjUyNTE0MiwzMi4zOTQ4MzUxODg4NzE5OTQsMC4wMzc0NzMwMzQ0MjYyNjA1NCwzMy40NDM1MDgxNzEzMjcyMiwwLjExNzYyNDE0NTI1ODMzODg0LDQuMTE4MDA1NTg4MzY1MTA2LDE2LjgwMTcxOTc2MDEyMDQyLDE3LjMyOTE0MjMxOTExNjQzLDIuNDQ3ODUyMDc1NTAzOTYxNCw0LjQ2ODY2NjYwMDMyMzIxNiw5Ljg3MjAyNjA2MjYxODg3MUUtNSwxLjUwMzAzMTg0NTM2NTc4ODUsOC40OTE1MDAwODk2NDc3NDksMTU2My4xMTk5NTAwMTQ4MjYxLDEyNS4xMjcxMjU1MTU2NjgxNywwLjAwMjM5MTcwNzA0MTk2NTU2OSwwLjk3NTA3OTI3MDA1NDc5NjgsNDYuMTk5NzExMjk1NjM3ODI2LDAuMDAxMDg0MjgwMzg2OTgyNzc4LDAuMDU1NjM0NzE4OTUyOTc5NDgsMi42Nzg3NDczNzYzNjE1MjM3LDc3LjcxNDMyNTY0NzUwNzE4LDIxLjIwMDE2ODU4NDM2NTY1Niw4LjI2Nzc3NzE5MDUxOTgyMUUtNAorOCxUdWUgMSBGZWIgMTEsMy4yNTI2MjY1MzEwMjcxNTM2LDEuNzczMDU0MTcyNDg3MDU3NCwyLjIwNTE1Nzk3OTQ1ODU2MDMsMTAxLjY2OTYwNzg0MzI4Nzk2LDAuMTcyMzQ0MzkxMTE2MzgyMDYsMTIwLjM1MzIwMDQzNzIwMDgxLDAuNTUyNDg1MjE3NDUxNzE3NiwxNy45ODc2NjQyNjg0OTA4NSw2Mi41NjQ0MDIyNTU0MzEwODQsNjcuNTQ2MTk2NzcyNjYxMTIsMTAuMTE2ODg5Mjc4Mzc2MTUzLDIwLjE4NTU5MTY0NjI4NDEyNyw1LjU0MTcwNTIxMDA5OTA0MkUtNCw2LjU1ODQyOTg5OTI1MDM4OSwzNi45OTUxMjkxMDA5NTYxMSw0ODE4LjQ2ODE5MDAxNjYwMSw0NzEuNTc4ODM1MzcxNTI2NiwwLjAxMTY0ODg1MjQ4MDI1NDkyNiw0LjM1OTA5MTQ2NDk0NjE0MSwxNzIuMjYzNTgyNTE0NTIzMTYsMC4wMDUzNTczNTQ0MzcxNzQyMzIsMC4yOTgxMzA1Njk1NzE3MTI3NCwxMS41OTIxNzQyNzY4Njg1NjUsMjkzLjQzNjI4NTc1MDg4NjUsNzEuNDMwNDQwNjYzNzAzODMsMC4wMDM5MTgwNzM1NTc1NTk1MTkKKzksV2VkIDIgRmViIDExLDEyLjMwOTExMDkyMTExMDAyNiw2LjgwNDM5MDE1MzI2MTM1MSw4LjgwODMzNzQ0NDAyNzMyMywzMTcuMDgzMDY5NTQ4NDcwNiwwLjc2MTQ3MjI5OTUzODMyMiw0MjYuODI1MjAwNTE1ODc1NCwyLjQ5Mjk1MDM1MDExMzYwNTcsNzUuNzE4NzQwMjM1NDI5NzksMjI5LjkyNDc0MTMwOTc5OTY2LDI1OC43NDI2NzI2MTUzODQzLDQwLjQ2OTcwMDQxMTIwNjU5LDg3LjYzNzM2NTE3MjkxNzg1LDAuMDAyOTEyNDk1MzAyMTc3Nzk4LDI3LjU3MTc1MDM3NzI2NzU4NCwxNTUuNjU0NDc0MDYwNjU2MDQsMTQ4NDMuODc3NjcyMDg0NzM4LDE3NDguNjI5Mjc3MTg0MTAyNCwwLjA1MzY3Mzk4NDY1MTYyODE2LDE4Ljc1OTk1NzgxMDI2OTgxNyw2MzIuNDE3OTY2MTcwODM4NCwwLjAyNTA5NjYxNDY1MDQ1MzM3NSwxLjQ5Nzg5Mzc2MDIyMjI5NjgsNDguMzU4MjA4NDk2NjA1MTk0LDEwOTAuNTA2MzMxMDcyNjQ3OCwyMzguMDk2NjMzNDY1OTAxODUsMC4wMTc0OTAzODI4MTU1MTI5NgorMTAsVGh1IDMgRmViIDExLDQ1Ljk5ODkxMTU4Mjc1MzUsMjUuNjM1MTQyMzU2Mjk2NTQ0LDM0LjI4MTM1NTM3MDMwMzQ1LDk4My42NTQ0MzQ1NDYzNjE5LDMuMjYzNDQ5MjcwNjYwNDAxMiwxNDk3LjMwODU0MzczNzEwMDMsMTAuOTEwMDk5MjgzMjY0MTA0LDMxMC4wMjIxMjA3NjExNjI1Nyw4MzYuOTQ1MTQzMzk4MTM1OSw5NzcuODY4OTQ3NDQ5NjE0LDE1OC4xMTk3NDA4MzU0NDI3NCwzNjkuMjEwNTA0MzUwMDcxNDYsMC4wMTQ1NjkyMjYwMDMxMzY5MTIsMTEyLjcxNDc2MjEzNzA1OTksNjM3LjU5ODI5MDg4NTQ0MDYsNDU1MjkuMDc4MDYxNjAyNTgsNjM5Ny42NjUwMDAwNTgwNDIsMC4yMzc1MTI2NzIzMzY5NTI5NSw3OC40NDQzMjc0MTQ0OTEzMSwyMjkzLjI5NDMzNDExNDgzMSwwLjExMzEzMzI4Njg1OTUyMjk3LDcuMTcyNTIzMDY5NjgyMDkxLDE5Ni4yNDgxOTQ2ODQ1MjM0LDQwMDIuNjExNjYwNTk2Mjk2Niw3ODcuNDc2Mzc3NTk3NTYzMiwwLjA3NDc5MjI3MjU0ODUzNjgyCisxMSxGcmkgNCBGZWIgMTEsMTcwLjA3NTk4NTg4OTM2ODkyLDk1LjA4OTU2NjEwODc1NjgsMTMwLjY3NTIxMzE4MDY3NTYzLDMwMjAuMDUzMzI0MTg5MTE1LDEzLjY1MDA1MDc4NDY2MzA0NCw1MjA0LjA5MTMxODQ1NzMxNSw0Ni41OTI3MDA0NTYxNDQ0MSwxMjQxLjc0MDk5MTc2MzkzNTcsMzAyMi4zMjcxMDE3MzYyNDQ1LDM2NTMuMjk3MjM0MDU1OTk2Myw2MDYuNDczNDE4MDUzNTA2OSwxNTE4LjI5NTAyMzQ3Mjg4NDYsMC4wNzAwOTAzMjgxOTU1MDc1Niw0NTAuNzE4MTY2NjAwOTU0MywyNTU0LjUyNjQ4MDc2NTIwOSwxMzc0MzEuMzMxNTc0OTU1NDMsMjMwNzYuOTY4MDYxNDI1NTEsMS4wMTg4ODY5NDU4OTAwNTM0LDMyMC41MTg5MjEwMDUxODA2Myw4MjE2LjQwMzUwNDYxNTEsMC40OTUzMDA2Njg4MDkyNDAzLDMzLjA2OTg3OTMyMzg0NTcyLDc3OS4yMjgzMDU2MzU0NDUsMTQ1MjcuMzM5MjIzMDUzOTcsMjU4MS42MzgyOTc2MjU0NzU0LDAuMzA5NTEwMTIzNjQzNzY4NQorMTIsU2F0IDUgRmViIDExLDYyMi4xMDc1NzI5NjI4NjgzLDM0Ny4xMzc4NjUwMDgwOTAwNSw0ODguNzM0MTkyMTM1MDE5MjcsOTAxMy41NTgxNDI3MzI2ODksNTUuOTU4MTI5MTkzODc0MjY0LDE3ODk4LjczOTk2NjE1NDY5NSwxOTUuMDIzNjU0NTg2ODQ2ODcsNDg4Mi41MTcwNDQ0MTYwOTUsMTA4MTkuMTM1MDAzMTAzNTcsMTM0ODguNjA2MjY3MjA4ODAzLDIyODguNTIyNjY3OTMwMDMsNjExNi45OTQ5Mzg4NTQyOTIsMC4zMjY3NDI0NjUwNzY5MjI4LDE3NjkuNzY4ODcwMTgwNzIxMywxMDAyMi4zNTc2ODcwMzkyNzUsMzk0NDcyLjA1MDUzMTI0NjksODEyNzUuODMzNjkxNzU4MTgsNC4yNjQyNzU3ODM4OTkzMzYsMTI4NC4wMzY2ODIzNTM3ODk3LDI4OTE0LjY5NTI2Njc5MDQ4NCwyLjExOTE1MDA0NTc3MzgyNSwxNDcuODkxOTExMTIyNzcwMTUsMzAzOC4yMDE4OTg4NjU5ODM0LDUyMDAxLjA5MjIyODQzMzQ2LDgzMTUuMzk1NjYwNTgxNjIsMS4yNDgzMTgwODg0Mjg3MjkzCisxMyxTdW4gNiBGZWIgMTEsMjI0MC4xMjEyOTA5MjIxODQ1LDEyMzYuMzExMjMwMDMxMTEyLDE3ODMuOTA3NTExNjgxNTMwNCwyNDg0Ni4wNTgzNjA2MzgwNSwyMjUuMzcxODg3Nzg2NTQ1NzgsNjA0MjkuMTMzOTQ3OTY0NDYsODAyLjU1NjcyNDcwMzAxMywxODg1Mi42NDU4MjcwNDM2OTYsMzgxNTIuNTg0MzE3OTIwNzgsNDg5MzMuNzcwNjc2Mjk1MDUsODQ2OC40MjAwODYwNTA0OTIsMjQxNTYuMTMzMjkzOTg5NjI0LDEuNDg0NzA3MjI0MjA1MTQzLDY4MzMuOTYxNzUzMDk2NDQxLDM4MjMyLjk3OTgzMDg2Njg4LDk4MzQzOS40NDA0NjQ4NTc3LDI2OTM1Ny4zMzQ4Mjk1Mzc4LDE3LjQ4NDc3NzM3NjM0MDcxNiw1MDQ0LjI3OTg1MDc1MjQ5MSw5NzU1OC4wMjM2NDEwMjAzOCw4Ljg5ODEzNDEzNzM5MjYyNCw2NDQuOTc0MjMxMzI4Mjg4LDExNjQxLjU5NjMxNTEwMTU1NywxODExMTkuMzgyOTMzMTQ3MjUsMjU1MzMuNjE0NTA0MDU0MDk0LDQuOTI5NjM0NTU4MDM1MDYxCisxNCxNb24gNyBGZWIgMTEsNzc5Mi43NTMwNzMzMjE0ODYsNDE0MS44MjA4NzYwNTA3MDIsNjE4OC4yMjg3NTgzMjAxODcsNTYyOTQuNDAyNjk4OTczOSw4OTAuMjM1MjQwMjE0OTQzNSwxOTUwOTMuMzUwMjE2MjMzNTgsMzI0OC40MjY5MjA4MDUyNDU2LDcwODI4Ljk0NTM2MDEyODA0LDEyOTU4OC4wMTU4MjEzMTg5NiwxNzA0MjcuODY0ODE0OTg4NSwzMDA5Mi42ODE5MTM3MDc1MzMsOTI2MDMuODY0OTAwNTQyMTMsNi41OTgxMDk3MDk1MTY4Njc1LDI1ODM3LjIwOTU0MTA1MTgxNiwxMzcwNTEuNDA2NjI5OTQ4MzIsMTc4NjUyOC40MzQ1Mzc2Njk0LDc1MTYzMy44NTEzNTA4NTk5LDcwLjI4NzQ3ODAxNTEzNDMzLDE5MjgxLjI4NjM3MDc2NTg3MywyOTIyODAuMDY2MzEwOTU3OCwzNi43MDM4NDc0MzIxNzA3MiwyNzQ4LjUzOTQ4NTgyMDM0NTQsNDM1NDIuNTExNjQ5ODI1MTYsNTg2Mjk4LjIxMDQ5NDc5ODUsNjg4MTkuMTczMjkzMjk3NDMsMTkuMDI2NzIzNDg1NTI3MzQKKzE1LFR1ZSA4IEZlYiAxMSwyNDc1Mi44Mjc4NzQ0NDg0OCwxMjAzOC42MTA3Mjk0Mjk5NzMsMTg3NTYuMTIxNjIxMzM5NDg0LDg5NzA3LjYzNjQ2MzEzNDYxLDM0MTYuNjU4NTcxMTMwODE1Myw1NjI5MDcuMDQzMzk5NDE3OCwxMjg5OC4xODk5ODA3MTk1NjgsMjQ5Njk3LjkyMDQxMTYyNzg2LDM5Nzc2Mi44NDIxNjgxMzM5LDUzMDcxOS44NjQyNDc1MjIyLDk2MTA5LjMyMjE2NTA1OTkyLDMzMTY1OS44Mzc1Nzk1NjUzLDI4Ljc5NDIwNzQ5MTQwMzUwOCw5Mzc0Mi41NTQ0Mzg3MjU1Niw0MTQwMjkuMTI4MTczNjM5NjUsMjA0MTI1My42ODcyOTQ0MTg1LDE0MDgyODguNDY3MTUzMjMxOCwyNzYuMjg5MTE3NjM5Nzc0Miw3MDE1NS4wNzI1ODk0ODA2LDY0NzYxNi43OTYzMDgwMDEsMTQ4LjU1NTkxMTc1MTk0NTc5LDExNDQyLjg3MjkwNDEyMzY1NSwxNTQ2MjAuMjY5OTUzODMzNjMsMTU1NDQwNS45NTIxNTM0NTksMTM4NDE5LjUyNjI3MjUxODA3LDcxLjAwOTk2MzczMDkzNzA1CisxNixXZWQgOSBGZWIgMTEsNjIwNDguNDYyMjc1MDQyNjUsMjczNjEuODQ3ODc3NTc5MTgsNDA4NTAuODUzNTA2MDIyMTYsOTUzODcuMzMyMjUxNTc5ODIsMTIzMzMuMzU1MjQ1OTE3MDk1LDEyNDQ0NTMuNjc4NTExNTQ3LDQ5NTc4LjYwNTk3OTM2MTI5NSw3MzUwNzIuNTgyODg0NTgzMyw5MzgzMjYuMDYzMjYzNzYzLDEyMzQ2NjYuMTIxMjE1NzY5LDIzMjk1My4yNzA3NDQyNTE2NCw5ODAxMDUuMDEwMDI2OTUyNywxMjMuNTU5NzE3ODQ3MjI1OTEsMzA0NTcwLjcxMTg2OTUyNzM1LDgzMjYwNC4wMDc2NTkzMDI3LDE2MjYyNjIuNTU1NzM4MDM1LDE1MTgyNzIuMDA0MzM1OTQzNCwxMDU0LjMwODUwODgyNDM5MjQsMjMyMjc4LjU4NjQ4NDE1MzIsODUxNDI5LjMyNjI3NzI2ODksNTg3LjI5NzAzMzIxNzkzMSw0NjA2MC4yNzMxNzA0MjAzNyw0NzU3OTAuODA4NjI0MDY3ODcsMjY3NDk4NS43NjcwMDY2NjI3LDE3NTA3NC4xNDcwNjQwNTY0NSwyNDUuNTI0NTY1MjAzNTAxOTYKKzE3LFRodSAxMCBGZWIgMTEsOTcxMDQuMzI3NTE5ODI0NTEsNDc3NDYuMzkxMDU4NDQ3ODYsNTE3OTYuMTQyNzE2NDA2NjU1LDc2MTkzLjU1NjE3Mjc4NzM5LDM4MzcxLjc4MTI4Mjk0NzI0NiwxNzExNDAwLjg0NzEwNDY5NywxNzg2MzQuOTUxMTc4MDY5OTIsMTQxNTgzNy43NDI2MTcwOTEsMTM0MjczMC44NTA0MjMyMjM4LDE2OTQ0MTEuMTU0OTQ3ODkxNCwzNDAxMzguNDA2Nzg4NjAzMiwxODU2ODU2LjAxOTY1Mjk1NjksNTE5LjM4MjQwODQ0NzMyMzgsNzQxMjE0Ljk1MzgyMDQzMzQsOTM0MDM0LjA1MjM5MTYzNSwxMTI3OTc5LjU0NzQ4MDA4MzgsMTE0Njg1OC44OTkyNDQ4OTY2LDM4ODYuMzMzMTM3OTQ2NzUxLDYzNDAzOC40ODk2Nzg1MDgzLDcwNzMyMy4wMDIxNTQ1ODM3LDIyNjEuOTI3MTA5ODcxNDA4LDE3Mjg1OC42NTM0MjEyNzQ0NywxMDI1MDM2LjU3MTE4MDM5MzMsMjY3NTEzMS41MzA4MjkyMTk2LDE0NjExOS41MDI5ODg4MzE4LDcxNC40NDYzOTA1OTU4NDI0CisxOCxGcmkgMTEgRmViIDExLDkwMzE3LjY3NjgxMjk1MTQyLDY2MzU1LjQ4NDAyMjEwOTQ1LDQyMTY3LjI2ODk3NDU1OTUsNTM0ODguMzkyNjgwNTYzMzUsODUxMTUuNDU2ODU1NjQxNDMsMTQ4MDc1Mi45NjA0NTQzMiw1NjU1MTguMjgwNjAyMDU5MiwxNTI0NTA2LjY5NTAzNzcwNTgsMTE3MDgzMS43NjU3OTEyNjcyLDE0MzQxMzQuMjY0NTc5NTc0OCwzMDExMjIuMzI1NzcwMTgyOTQsMTk1NjE4Ni4yMTUyNzYyMSwyMTIzLjI3Njg1NTA1NzgwOTQsMTA1OTUwOC42OTYzNjY5ODMsNzEyNjYzLjQyMjQyMDAwOCw3NTk5NTguOTE3MTg4NjA3Miw3ODI3OTEuMTY5MDk0NjkyMiwxMzg1NC44NTU0OTU4MjM3NTMsMTE2MDA3NS42MDMxMTc1NzEsNDkyMzczLjI0NjE1OTE0NzcsODUxMC40NTY4NDU5MDAxNjYsNTQ2NjU0LjEwNTUwMDA1NjIsMTI1MTYwMi43MDc4MTkyNDcsMTk2Mzg1Ni41MDEzNDI3MzA4LDEwMjE5NS4xMjMzNjMyOTA2NCwxNTM0Ljg2ODcxNjUwOTk3MzIKKzE5LFNhdCAxMiBGZWIgMTEsNjQ4NzAuNjAzNjE0NTA4ODYsNzIwMjAuODA1NTIzMzA2OSwyOTIzMi4wMTk2NDAzODg4NzMsMzYxNjYuMTY4NzY4NzI3MTEsMTA4NzM4LjkxODA3NTY3MDA3LDEwNDMzMzIuOTAzNDk1OTEwMywxMzQ0NDAwLjM3OTE1NTAxMjUsMTE0NDc2NS43NTkxMTU1MjA5LDgyNDU0My4wODIyMTUxMDM4LDEwMDIwNjkuNjk3MTk2OTA1NywyMTMwOTIuNDM5NjUwMjc3MTQsMTQ1NjEwNC45NTc5NDE5NTA1LDgzMTYuMzYwNjgzMjQ3OTU4LDkxNDU0OS4wMjk5NTY2MDYsNDg2OTMwLjE5Njc4NzM3NzgsNTA5OTI0LjE2NjM2NTc4NzA0LDUyNTk4Ny4wOTA4NDA4MTgxLDQ3MjAwLjM4MTMzMDc4NjY2NiwxMjM0MjM2LjIxNDAyNzQ3NTYsMzMxNjUxLjc3NTcxODk4OTYsMzExNjEuNTMyMTQyMjU1OTI1LDExNzMxODMuMTQ4MDkyMjk3NCw5OTIyMjUuMjI3MTY3ODE5NCwxMzMzMzI0LjU0MzA1MjI5NDUsNjg5MDAuMjMwOTcyNzU2MjgsMjE0My42MjcxNTAwMTkyNjU2CisyMCxTdW4gMTMgRmViIDExLDQzOTAzLjc2NTIyMzY1NjY2LDYxMzE0Ljc0ODUyMTc1NjA5LDE5NjgxLjEzNTk5MzM4NDk5LDI0MjgyLjM4NTY2MjQ5ODYwNyw4ODMxNi45MTk5NTUxOTUyNiw3MDQwNTQuNTk0ODc4Mjk5NCwxOTAxOTIyLjQ0MTI5MDQ5NzMsNzc5OTU5Ljc5MjA1ODk5NTUsNTU2MjU4LjQ1ODIxMDcwMTQsNjc1Mjc5LjI3MDE3NzY5MzEsMTQzODY2LjIwNTYyMzQxMDc2LDk5MDU1NC42MDA4NTQ0NzkyLDMwMzc1LjA1MDA5MjI1ODgzLDY0MTc4MS41NTI0MTEyNjAzLDMyNzE5NS42MjgwOTE1ODIyLDM0MjAyOC40NjM2MzE1MTA1LDM1MjgwOC4xNzM5NzUzOTU4LDE0Mzk2MC4yOTE0ODIxMjM3Miw5Mjg3MDAuMzkzMDA4NjA4OCwyMjI1MDYuODE3NDgxMjY3OSwxMDg4MzUuMzQxOTM1OTY0MjcsMTQwOTA2NC40Mjc5MjcxNDk1LDY4MzAwMS4wNzgxNDY3NTQ0LDg5NTMwMS40OTcyNDgzMjY0LDQ2MjMxLjcwNDk1NDY5NzE5LDE5NTAuMDQxNTI3NjE4NDM2CisyMSxNb24gMTQgRmViIDExLDI5NDcxLjM3MjMzMTIwMjc1OCw0NDgzMS44MzI2NDM1MDQzNjQsMTMyMDMuNzAyMjcxMDI5NDY2LDE2Mjg5LjI4Mjk4MTQ5MjI2NCw2MTExMS4zMzg4MDk5MDYyOCw0NzI0NTIuODEwOTkxMzkxNjYsMTYzNzY5NS40MDUzNjE3OTQ2LDUyMzkyNi44MTc3NTg1MzU2LDM3MzI1NS4zMDE0MjYyMDgsNDUzMDY2LjIzMDc5NzE3NTE0LDk2NTQzLjk0MzM5NTIxNTc0LDY2NTI3MC40MTkwODkwMDI3LDk4NjE0LjIwODU2MjAzMjQ1LDQzMjcyMy4xOTk0MDU1Mjk0LDIxOTQ2My43NTgzNjA5NjYsMjI5NDU0Ljc2OTIxMDYxOTQyLDIzNjYzNi4xMjQzNzI0MTMyLDMyODI2Ny45OTY4MjgxNDA2Myw2MzMzODcuNTg0NjIxNTU5MSwxNDkyMzQuMDUyMzM5NjU5NjgsMzQzNTA0Ljc5NzE5ODc3Njk3LDExMDc2OTkuOTU5MzcwNTU3LDQ1OTM2MC44ODAzNjA5Mzk1LDYwMDQ4OS4xMzMzMTMzODczLDMxMDA4LjI3MzEzMTQ5NDEzNywxNDA2LjE3OTI2ODY2MjQzMjgKKzIyLFR1ZSAxNSBGZWIgMTEsMTk3NjYuNjc0ODQyNjI3MzE1LDMwODI2Ljc1NzEwMDg3MjA5LDg4NTUuNzEwOTg3NzI1MTExLDEwOTI4LjU1ODM1NDYwNDAxNiw0MTEyOC40NDk4OTM0NDQxNywzMTY4NzUuMTYyNjgwMjc1MTYsMTE0ODg2Ni41MzI5OTUyMjAzLDM1MTQxMC4xOTk1NzczNjg3NCwyNTAzMzguNzUyNTg4NTg4NTcsMzAzODY2LjQ3MDMzOTg5MDA1LDY0NzUxLjMwMjgxNTE2NTIzLDQ0NjIwNS42MjYzOTA5OTU3NSwyNDk5ODEuMTg4NDQ1MTQ1OTMsMjkwMzQyLjUwNjM1NDA5MDEsMTQ3MTk1Ljg2MTU4NjQ1OTg1LDE1Mzk4OC4wMDg0ODkxNjUzLDE1ODc1My43NjY1MDMwMDA1NCw0NDE3MjkuMzEyNzM5MTQsNDI1NTQxLjI1OTkxMjMwNTA1LDEwMDEwNy4yOTEzNjEzMTc0Myw4NDE0MjEuNjc0NDg0MjYxMiw3NjExODkuMjA2NjcwNTQ3MywzMDgxMzguMTc4NDU1ODAyNTUsNDAyNzY5Ljk4OTQ4OTM1MTM0LDIwODAxLjAxMjc5MDM5NjExNSw5NTMuMDc0NjY5ODE4MjkyNworMjMsV2VkIDE2IEZlYiAxMSwxMzI1OC43MTg3MzI1NTY2OTYsMjA4MDUuOTI2NTQzMTM2MTQyLDU5NDAuNTczNTIwMjA1NzEzLDczMzQuNjkyODQ5NTk2MDI4LDI3NTkwLjY3MTYxMzk3Mzg0LDIxMjU1OC4wNDQ1NDIxNjgzOCw3NzQ2MDUuMDk0OTA5MTYyNSwyMzU2OTYuMDE4MzY3NDk1NDUsMTY3OTIyLjk1OTQ3ODg5NywyMDM4MzEuOTAxNDQzNjE4LDQzNDMzLjYyNzgxOTI1NTc0NCwyOTkyNzguMjc3NzE5ODUyNCwzOTA1OTYuMjU5NDI2OTQyOSwxOTQ3MjguMzY1MDg3MzQxOTgsOTg3NDcuMzc0MDk2MTY4MzUsMTAzMzk2LjE5MzY1Njk0NTkyLDEwNjU0NC4xODU2OTcyOTczNSwzNjk2MDQuODU4NDgzMDU0LDI4NTQyOC45NTQzNDgxNDE0LDY3MTc0LjQwMzg4MDk1NzM4LDEyNTI4OTQuNjcwNTkwMDQ1LDUxMTgzOS42NDAxODM1MDQ4NSwyMDY2NjYuOTIwMDczNjI3MTUsMjcwMjIyLjA0OTQyOTg5NTc2LDEzOTU4LjM1Njg1MDI2NzA0Niw2MzkuOTE1OTkwMzgyODIzNworMjQsVGh1IDE3IEZlYiAxMSw4ODk1LjkyMjkzMDU5OTI4LDEzOTc1LjQ3MTA3Njg5NzEwNSwzOTg2LjM2NTQzNjQzMTExNSw0OTI1LjM5MzA3ODUzMjQ4NjUsMTg1MDQuODMyNDM5NzkxNDA4LDE0MjYyNi44NDU0Mjg3MjM2Nyw1MTk3MzMuNjUzODc3MjMyMzQsMTU4MTIyLjAyNDk0MDkyNDIsMTEyNjc0LjAyMjE2MzExMzY4LDEzNjc3Mi4xNjQwNDc4MjkyNSwyOTE0Mi44ODc3NzI3MDYwMTMsMjAwNzc5Ljg4NjkzNzE2ODk1LDM1OTI3NS42NjMxMzY2MzQ5LDEzMDYyMC4zODc1ODUzNTcyLDY2MjY5LjM0NTA4NDMyNTczLDY5NDc3LjU2Mzc3NDg5OTUsNzE1NDMuMzk0OTIyNDEyOCwyNTc1MDQuMjYxODgwMTc1MTIsMTkxNDQzLjg4MDYxMjE5MTM0LDQ1MDk2Ljk2NjQ5Mjk0MjU0LDExMTUxODQuMDIyMDM3NjU4OCwzNDMzMzMuNTk0NDY1NDI0NywxMzg2MzguMTUxNzU5NDg5ODIsMTgxMzY2LjQ5ODQxODI5ODcsOTM3MS4xODY5NzU0ODA3OTYsNDI5LjIxNzcxNDQyNzU4MjA1CisyNSxGcmkgMTggRmViIDExLDU5NzEuMjQ2MzA0NzA1MjU1LDkzNzkuMDAyODIxNzAzNjc0LDI2NzYuMzA2MzI0Mzg1NTI3NywzMzEwLjEwNTM1MjA0OTM4LDEyNDEzLjMxNTAxNzcwMDEyNCw5NTc0Ni43ODY3MzcxNjg5LDM0ODU3OC42MTU1MjI5NjczNiwxMDYxMTkuMzE3MjMyNDQ1OTYsNzU2MzYuNjY2MjU1NDU0OCw5MTgxNy4wMzYxNjc5ODU0NSwxOTU2Mi43ODg0ODEzNjk5NCwxMzQ3NTAuMjIzNTQ0OTExNzQsMjU2NTIzLjc0ODczNzA0NzA1LDg3NjQ0LjU3MDk2NTQ5NTY0LDQ0NDk2LjQ5NDg3MTAyMDgsNDY3MzQuMDY1Mjk3OTI0NzgsNDgwNzcuMTAwNjIxNzgxNjgsMTczNDU3Ljk5MzMyOTQyMjY0LDEyODQzNi4zMTA5NDc3ODU1NSwzMDI5NS43MDc3MzU5ODU4NjMsNzg5MDQyLjM1NjE5MzQ0NjQsMjMwMjcyLjYxOTE1ODE4MDAyLDkzMDM0LjIzNDU1MTMyMTcsMTIxNzk3LjkzOTI1ODc0OTIzLDYyOTUuODI4NTMwNDg3ODg2LDI4Ny45MTMwMTg2MjE1MzU3NAorMjYsU2F0IDE5IEZlYiAxMSw0MDEwLjUzMDIyNDg1MDg4MTUsNjI5NS4yMzMwNTA5NDIyOSwxNzk4LjAwNTgxMjQ5NzQ5NzgsMjIyNy4wMDM2NDU2MjA1MTUsODMyOS43ODY1NzE4NjI5MzMsNjQzMTcuNTU0NzIwNDQ0ODcsMjMzODIxLjUwNDczMjkxODksNzEyNTcuMjAxNDEyMDYxMzIsNTA4MDYuMjQwODY2NzI3NjIsNjE2NzguMTk4MzE2OTY4MDYsMTMxNDAuMTY2OTgwNzA2MzM5LDkwNDg0LjQ1NDM1ODU2ODEsMTczMzg4LjUxMDA4Njg3NzA3LDU4ODM0Ljc3MjM2ODUxNzM2LDI5ODk4Ljk4Mzc1OTI3OTA5LDMxNDgwLjI4OTgwODEzODExNywzMjM0MS42Nzc3NzA5NjE5OTMsMTE2MzczLjQ4MjQxOTUxODExLDg2MTk4LjI4MDY5NzAzMTI0LDIwMzcxLjI5ODczNDgzODc4Nyw1MzI2MjkuNDY4OTQ5OTg2NSwxNTQ0NzQuNDMxMjI2MzkwNjIsNjI0NjIuMjI4MDcwMjYzMzIsODE4NTkuMzMzNjgwMzYzODQsNDIzMy43NTk4NTY4OTkxMDUsMTkzLjE4Mzg4ODcyMjYxMjg2CisyNyxTdW4gMjAgRmViIDExLDI2OTUuOTE2MTQxNzk1NzgwNyw0MjI3LjU4MTIyNDMwNDYzLDEyMDkuMDkwNTQ2ODM2MzAyMywxNTAwLjU4MTQ1ODc5MjE1MTEsNTU5Mi4yNzc4MTg1MDQ0MTEsNDMyNDQuMjgxNjc1Nzc2NzUsMTU2ODkyLjE5MTc2MTMzMzQsNDc4ODMuODQxMjM3NDAyMzc2LDM0MTU3LjU1MDE5MDg2NjUyNSw0MTQ2OS45OTEzMjk4MjI1Niw4ODMzLjg2MDk2NDA4NzE1LDYwODA2LjI1NjY5MTkzMDcxLDExNjM2OC4zMjE0MzMwMjA5NiwzOTUyMC4yMDc2NjE3NTQwNCwyMDExMC42NzgzMDA0ODI5ODUsMjEyNDUuOTg1MjA0NTQxMDE1LDIxNzg3LjU2MzQ1MzYxNDQ1LDc4MDUwLjQ2OTQ0NjQ0OTIyLDU3ODgyLjI2NDg4NDA5MTA5LDEzNzE1LjQ1NzEwNDUxNTA3MywzNTc0MjAuMzcxNzI0Mzg2NCwxMDM2NjIuMjEzMzMyODY2Miw0MTk2NS43MDQ1ODc0ODUyNTYsNTUwNzcuNDAwMTIzNDkxNDcsMjg1MC44MTk3NTg4MzQ3MjEsMTI5LjY4MDA2NjU5NDAyODkKKzI4LE1vbiAyMSBGZWIgMTEsMTgxNC4zMzk0NDE5OTcyNTUsMjg0MS4zMzE5ODc5MzI0MDYsODE0LjEyNzAyNTU2ODgyMzEsMTAxMy4yMDA1ODMwMTcwMzUsMzc1Ni45NzM0NDkxOTUwMzUsMjkxMTEuODM4MjEwNTk0NTUsMTA1MzIwLjg3MjIyMjQ5NTM0LDMyMjEwLjY5NjA4MTY5MjE1NiwyMjk5Mi40NzgxNTcwNTY2OCwyNzkxNy41MzE0ODY4NjQxNzYsNTk0NS45NzIyMjY2NjYxMzY1LDQwOTA1LjIwODcxMDQ0NDgsNzgwNDcuMDIwMjgyMDQyMTEsMjY1NjkuODQ0NjUwODQ2NzksMTM1NDUuNTY1OTYzNTIzOTA0LDE0Mzc1LjQ5ODE3NDU4NzgxNiwxNDcwNS44NjAxNTUyOTc4Myw1MjM1Ni4yODk5ODk4NTI3MiwzODg5Ny43MDgzNTA3NTcwOCw5MjUwLjE4Mjg2NDEzNjM3NCwyMzk3MTcuMzk1NjU1MzQ5ODMsNjk1OTguNjIwMzI2MTQxNzIsMjgyMjIuMjIzMTkyMzY3OTc2LDM3MTEzLjE0NTEzOTkzNjE4LDE5MjMuMDI4MTQ1NzE1NzQ5MSw4Ny4xMDY1NDA5Mjk1MDg4CisyOSxUdWUgMjIgRmViIDExLDEyMjIuOTg0NzUxOTgzMDk0OCwxOTExLjg1NjQyMjY3NDI5MDMsNTQ5LjE0Nzk3Mzg3OTM0MDQsNjg2LjAxMjkxNjg4MTcyOTYsMjUyNi4zNjg4Nzk4MzI0NDksMTk2MzEuMTA4ODgyNTM4NzQsNzA3NDYuNTY2Njg4MzQwNzQsMjE2OTguMzIwNjk4ODI2NDcsMTU1MDIuNTE1MDkzMDY2MzMsMTg4MjUuNzE4MjMwODAyNDEsNDAwOC43MDc5Mzg2ODA0OTUsMjc1NTYuOTA2Nzg4ODA3MzYsNTIzNTAuNzc3NDUxNjU5ODIsMTc4ODQuOTI3ODY0ODU0NTQ0LDkxNDAuNTg2NzE3MDg3MzU3LDk3NTkuMjM1Nzk2OTQzMTQxLDk5NTEuMjEzODcwMTAzNTI0LDM1MTMxLjgxODEyMTQzMjk5LDI2MTY3LjQ1NDc1MTY5MTQ1NCw2MjUyLjk1MDI0NDEzNDg2NywxNjA3OTUuNzYwMDA4ODMyMzUsNDY3NjEuMTYzMjU0MTM1Mzc2LDE5MDA0Ljc0NjUxNTAyODA3MywyNTA1OC4yOTIzNzQxMjMwMzMsMTMwMC4yNjIyMDE0MzUwOTAyLDU4LjU2MTc1NDMwNjczODAyNAorMzAsV2VkIDIzIEZlYiAxMSw4MjYuMTI3MTYyMDMxMDA0OCwxMjg4LjUyNDg4MTExODQ3MzgsMzcxLjI3OTAyMzU5MTY4NSw0NjYuMTYyMDM0NTcyNTA3NywxNzAxLjA0NTYyNDc3MzYxMSwxMzI2Ny43NDcyMzE0NDExMzcsNDc1NjQuNTM5MzQwNjkzMzk0LDE0NjQ0LjU4MTQ4MjE3MjI4MywxMDQ3NS40NTg1NTYxNjE4NTksMTI3MjMuMjU0NDM5Njg4NjEzLDI3MDguNTA4NTg0NTI0MTM0LDE4NjAwLjEwMzQyNzY0MzU3LDM1MTI0LjczMzkwNTI0MTExLDEyMDU4LjY5MDA1MDk0MzE1Myw2MTgzLjIzNjY2NTA1MDQ2Niw2NjUzLjU4MjA5MDg3MjExMjUsNjc1Ni4wMzc2MTE5MjU0MDMsMjM1ODQuOTU0NTg1MTM3NDI0LDE3NjI4Ljg4MjUzNjc0MjIzNiw0MjM5LjUxOTUyMzEwOTA1NywxMDc4ODkuMTQyMDAyNDUwNzUsMzE0NDcuOTUzMDE5ODIzOTEsMTI4MjAuNTM2NTQyMDU3NDM2LDE2OTYzLjYzMjk0NjIyNTMyLDg4MS44OTc4MzY3NzQ2MzgyLDM5LjQxOTMwMjkwNzk2ODYxCiszMSxUaHUgMjQgRmViIDExLDU1OS42MTEzMzkwNDAwNjE1LDg3MC4zNzA4MjM1MzQxNTg1LDI1MS43ODY5MDU3NjI5NzIwOCwzMTguMjM5MTQ1MjQ4OTgzMSwxMTQ3LjMzNzcxMzY3NjkyODYsODk5My40ODcyNjA3Nzc4MiwzMjAxNy44OTI5MzIzNjQzNjQsOTkwOC42ODA0MjY3ODg3MjIsNzA5OC45Mjc5NzM4MjMzMTksODYyNC4xMTQyNjYzMDU1MDUsMTgzNS4yNDEyNDk4OTc0MDkzLDEyNTg2LjMwNTA5NzAyMDg5MSwyMzU3Ni45Mzc3NTQyNDk2MjIsODE0OC4yNDc4Nzk4NDU0MDQsNDE5Ni4wMjY4NzU2MzgwNCw0NTYwLjQxNDUyMzE1NzIyNjUsNDYwNi4wMDk0NDQ4Mzk3NTQsMTU4NDMuNjczMTQyMTczMjEsMTE4OTkuNDg4MzUzMDU2MDMsMjg4NS40MDkxMDQzMDIzNDczLDcyNDIyLjEwNTkzNjIyNzc0LDIxMTc3LjYxNjg4OTE4Nzg3LDg2NjkuMTA4NDcyNzc0Mzg0LDExNTIyLjkzMTYzOTc3Mzk5MSw2MDAuNTE2NTk4NTk0OTEyOCwyNi41NzgyODU2MTQwODE1MzcKKzMyLEZyaSAyNSBGZWIgMTEsMzgwLjQ0Mzc3MzA3OTQ3MjYzLDU4OS43MDUwNzkzNzE0MzQ5LDE3MS40MTcyMjQ0NzE3Mzg3MywyMTguNTE2MTEyMjQ0NDczNzMsNzc1LjY1NjQ2NjU1Mzc4ODQsNjExOS4yNDMzNDUxMTU5Mjk1LDIxNTg4LjQzNzY0NjM5ODY3NCw2NzI2LjA5MDQ0NTY1Nzk5Myw0ODI4LjUxMTg1NTEyNDI1Miw1ODY3LjUzNjk1MzA2MTk2LDEyNDguMDgxODUyNjM0MTk3Myw4NTQ0Ljc3ODU3NDU0MTI0LDE1ODM1LjIwOTgyNzMxNzE4Nyw1NTIxLjY4MTgxODE1ODQ1OSwyODU5LjAwMjQ3NjgwMDUyMzcsMzE0Ni4wNTk1NDc0Mjk4MzMsMzE1Ni41NjI3NTgxNzA3ODU0LDEwNjUzLjA4MDY5OTg3OTY5Miw4MDUyLjY3NDEyODk3OTMzNiwxOTczLjIxNzEwNTQwNDg4MDQsNDg2NDQuNTcyODEwOTczOTQsMTQyODYuOTQ2MTcyMjI0OTY3LDU4NzkuOTU2NjY1MDc3NDY5LDc4NjAuOTQyMjEwODM4NTk4LDQxMC45NDM2NTkzNzIxNDQ5NiwxNy45NjAxODgzNjM1OTcxCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0lub2N1bGF0aW9uVGVzdF9SS19SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vSV8wLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvSW5vY3VsYXRpb25UZXN0X1JLX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9JXzAuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJjMjQ0MDEKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0lub2N1bGF0aW9uVGVzdF9SS19SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vSV8wLmNzdgpAQCAtMCwwICsxIEBACitpdGVyYXRpb24sdGltZSwKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvSW5vY3VsYXRpb25UZXN0X1JLX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9JXzEuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Jbm9jdWxhdGlvblRlc3RfUktfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL0lfMS5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmMyNDQwMQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvSW5vY3VsYXRpb25UZXN0X1JLX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9JXzEuY3N2CkBAIC0wLDAgKzEgQEAKK2l0ZXJhdGlvbix0aW1lLApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Jbm9jdWxhdGlvblRlc3RfUktfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL0lfMi5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0lub2N1bGF0aW9uVGVzdF9SS19SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vSV8yLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNjljNTMyCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Jbm9jdWxhdGlvblRlc3RfUktfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL0lfMi5jc3YKQEAgLTAsMCArMSwzMyBAQAoraXRlcmF0aW9uLHRpbWUsRUctRlJHLUcyMTAwMDEsRUctRlJHLUcyMTAwMDIsRUctRlJHLUcyMTAwMDMsRUctRlJHLUcyMTAwMDQsRUctRlJHLUcyMTAwMDUsRUctTE9FLUcyNDAwMDEsRUctTE9FLUcyNDAwMDIsRUctTE9FLUcyNDAwMDMsRUctTE9FLUcyNDAwMDQsRUctTE9FLUcyNDAwMDUsRUctTE9FLUcyNDAwMDYsRUctTE9FLUcyNDAwMDcsRUctTE9FLUcyNDAwMDgsRUctTE9FLUcyNDAwMDksRUctVVBFLUcyOTAwMDEsRUctVVBFLUcyOTAwMDIsRUctVVBFLUcyOTAwMDMsRUctVVBFLUcyOTAwMDQsRUctVVBFLUcyOTAwMDUsRUctVVBFLUcyOTAwMDYsRUctVVBFLUcyOTAwMDcsRUctVVBFLUcyOTAwMDgsRUctVVJHLUczMDAwMDEsRUctVVJHLUczMDAwMDIsRUctVVJHLUczMDAwMDMsRUctVVJHLUczMDAwMDQKKzEsVHVlIDI1IEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwxLjAwNzMzMTczMTg4MzUzMjYsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyLFdlZCAyNiBKYW4gMTEsNy44MDIxMzY2NDEzMjkxODZFLTUsNy44MjYyNTY5MjE5NDIwNTVFLTYsNS44MzMxNjA0MTAwNzYyMTY1RS02LDAuMDExNTM1ODY3MTcwNzE4OTcyLDIuMTk4OTc5NTkzNjAzMjI5M0UtNywwLjAwNDU0MjAwNDM4NjY4MDM4NSw2LjI2OTc5NDA4NTY3MjM3RS03LDMuMzMwNDkwOTA2OTU2MDczNkUtNSwwLjAwMTk2NzQwMzUzNzQyODM3MTcsMC4wMDE0NTMyMzcyNTU0ODY3MTc3LDIuNzk0MDUwODk3OTg4NjIzRS01LDIuOTE1MTMxODgwNzMyMjAzNkUtNSwyLjc4OTM0MDgxODQ1NDM5MTRFLTExLDEuMjE0MTAzNzgwNzkzNjA5RS01LDEuMzQ0NzI5Mzc5MDMzMTAyNkUtNCwxLjY3NjM0NDcwODM4MTEzMywwLjAxMzAwNTIyNDcxNjU1OTIyMSwxLjY5MTk5NzQwNzE4MzE2M0UtOSw2LjkxNzg1ODQ1MDM4NTgyNUUtNiwwLjAwNTEzNjM4NTAyMTk2Mzc4MzUsOC4yNjgxMDgzNDc5OTk4NzRFLTEwLDIuMDA3NTkzMzQ2ODc2NDAyM0UtOCwyLjI4ODkwNTM0OTU0ODYzMzhFLTUsMC4wMDgwMTM0MzI4ODcxOTAyNjEsMC4wMDQ0NTI0NDU1OTY1OTA3ODUsNS40ODIwMzIzODQ2MTY0OThFLTEwCiszLFRodSAyNyBKYW4gMTEsNS40MzkwMjc3OTY3ODgyMDNFLTQsMS40MjcwMjM2ODY1NTYzNzk4RS00LDEuMTYyMjgyMzYwMDk2NTA1NEUtNCwwLjA2MjkzNDM3NzExMDY4ODcsNC44MjY2MTIwNzk0MjgxNEUtNiwwLjAyOTY1MDc1MTc4NjAwNzEyMywxLjM5MjY1MDczMjE1NDgzNTJFLTUsNi45MzY3Mjg2MzIwMzM3NDhFLTQsMC4wMTMwOTQ3NzgxNjQxNDA1NTMsMC4wMTAzMjU5MDUxNzcyNzQ0ODMsNS41MTUyMzI0MDAyNDYyOTdFLTQsNi4yODkxMTkyMDQ4ODA4ODhFLTQsMi4xNjU0MTc4NzYxNTA4OTI3RS05LDIuNTMxMTIyOTMwNjk4MzA4RS00LDAuMDAxNzU1MDQyMDUwODU3NjU1Miw0LjkxNjU2NzgxNDAyNzg0OCwwLjA4ODc4MDIxMTY1MDUwMzQsMS4wODM1NjU3MTU3OTM5MjNFLTcsMS40Njk0NjQwNzkxMTg0ODAzRS00LDAuMDM0NjUwMDc0NTkxOTMwODk2LDQuODYzODI2MDI0OTE1OTQ4NUUtOCwxLjUwMDg4NDUyOTM4MjA2OTdFLTYsNC43MjUyNzU1OTk3Njk0NDQ2RS00LDAuMDU0NzcyMDUxNTA5NTIyMjcsMC4wMjY4Njg5NTE3NzExNzA1NiwzLjgxMzY4NjEyMzY3Mjg3MDdFLTgKKzQsRnJpIDI4IEphbiAxMSwwLjAwMjcyMjg2MTk1OTc2MzM5MDgsMC4wMDEwMjY3MDE3NDg0NzM3Niw5LjI1NTI3ODIxMzExMTAwM0UtNCwwLjI0MjcxNzk1MTI1MDgxMDEsNC4zMjI3OTE3NzEwMTAwNEUtNSwwLjEzODI1NTg2MjUxMjEyNDA3LDEuMjY3MjAxMDU4NzQ2MTQxMkUtNCwwLjAwNTgzNzc2MzAyNDI0NzYxNiwwLjA2MjUxNDY5MzYzMDk3MjM3LDAuMDUyNjkxNTUyMzk3NTE1MzIsMC4wMDQzNDY1NjM5MjIxMzIzNzEsMC4wMDU1MTkyNTg0OTQyNTI5NDE1LDMuNzMzMjMxMDI0NjIyMjA3RS04LDAuMDAyMTMxNzg1NDgxNDQ0MTgwNywwLjAxMzA4NDQxNDE5MDg2MDkxMSwxNS4wNjU2Mzk3NzE4MTg0NSwwLjQzNDcwMjkzNDc1MzYwMTk0LDEuNTgwMDYwODk5NTcyOTc4OUUtNiwwLjAwMTI2Njk0OTU0MjMzMTYyNDMsMC4xNjc1MjA5MDUwNDkzMjI0Myw2Ljk5OTMyNjcxMTk1ODQyNkUtNywyLjQ3NzY3ODk3Njg2ODI0OUUtNSwwLjAwMzkzNDkxMTIxOTg2ODU3MDUsMC4yNjg1NDU1MjM3MTE1MjAxMywwLjExNTIyMzY4OTM5OTAyMjIyLDUuNjYxMjU4MzMxOTEzMTRFLTcKKzUsU2F0IDI5IEphbiAxMSwwLjAxMjEwMTQ1MDU5Nzc0NDU1NSwwLjAwNTQyMTc4MzQ1MDE4ODI1NywwLjAwNTM2NTEwMDE4ODA1MTczNCwwLjg0MDU4NDExMzAzNTAwMDQsMi44MjU1NjA5MDI4NzMzMDM0RS00LDAuNTcyNTQ4MTIwODY1MjkwOCw4LjQzNDAwNDYwNjIzNjE4M0UtNCwwLjAzNTg2MDY3MjUxNzIzNzU0LDAuMjY1NzgwMzg1MTI3Nzk4LDAuMjM4MzYxMzQyNzE2MzU0NjIsMC4wMjQ5NzA0NDY0MTU5MDYwMiwwLjAzNTM1MjUyMDQwNDcwNzMyLDMuNzQ2MTg3ODc4Mjk0MDQ3NkUtNywwLjAxMzEwMDA4MTA5OTY4MDI1MywwLjA3NjY2NDE2NjkwMjEzOTE1LDQ2LjMwODc1MDAwODE4ODk0NCwxLjg5MDUyMTk1NDY1ODM2NTEsMS4zMzk2OTI5MjE1MTAyNjFFLTUsMC4wMDc5ODEwMzczNTY2MzcxNzMsMC43MTk1NDk3NjY2MjE3MDcsNS45MzkyMTUzMDYzNzE4OTFFLTYsMi4zNzI1NzU4MzcwNTg5ODI1RS00LDAuMDIzOTE3NTkyMzAwMzQ1NjIsMS4xNjk1MTMyMzE5NTIxODMsMC40NDAyNTM1MTM5MjMwNzUyNyw0LjgwNzk5Nzg5OTEwMjc2ODVFLTYKKzYsU3VuIDMwIEphbiAxMSwwLjA1MDQ2MDAzODE4NzU1NzgyLDAuMDI0ODE1NjM1MTcyNjE0NDcsMC4wMjY1OTEwMjM2NDI4MDM0MDMsMi43NzAxMzUwMDE4MjAxMTk0LDAuMDAxNTczODc2NTE5NjM3MDc5OCwyLjIyNjkzMDI2MjU3MTM1MjUsMC4wMDQ3ODk3NzM5NzI0ODU4MjEsMC4xODgyNzUwMTk0NzY3MzA0OCwxLjA2Mzc4ODYzNjg3OTA2NTIsMS4wMTAxNjA5Njk2MDMxNzcsMC4xMjI5MDAyOTM2NDYxMzE0OSwwLjE5MzExNDAxMDQzMDQwMjQ0LDIuODY2NjkxMDQ4MjU3NzEzN0UtNiwwLjA2ODc3NDE1OTQwODkzMDksMC4zOTM4MzMyMjAwMzQ3MjMzLDE0Mi40NzgzNDEwMjUwNDgzNyw3LjcxNzk3NzE1MzA5MDQxMzUsOC43MTE4NDAyNTg1NDgwMDFFLTUsMC4wNDI5NTc1MzYxMzM5NDgzLDIuOTAyNDY0ODg4MzMzNDgwMywzLjg4NzM0MzE0OTI3Nzg1MkUtNSwwLjAwMTczMTM2MzY2NjAxNjUyNjcsMC4xMjQzMDc1NjA0MTU5MzgyOCw0Ljc4MTM3NDkzMTA1ODk0MSwxLjU4NjQ4NjUwNjkyNTY2MzcsMy4wOTgxMzkyMDg4NTQ5NzVFLTUKKzcsTW9uIDMxIEphbiAxMSwwLjIwMjE5NDcxNjkwMjkyMjg3LDAuMTA1MDEwODcwNDg5NTIzOTQsMC4xMjAxODg2NDIwOTEwNjIyMSw4Ljg5MjE5NDMxOTE5NzY4OSwwLjAwNzk1NzA4NjczNTE1NjA4NCw4LjMzNDA5NTU0MTY1OTEyMiwwLjAyNDcwODk1NzEyNzUyOTIzNywwLjkwMDI1NTUxNTk1MTY0OTQsNC4xMDU2OTA1ODExMjgzOTYsNC4xMDg2NTAxNDQ1NTkwNDU1LDAuNTUyOTUzMzM0MTc3MzIxNSwwLjk1ODI0MDYyNTQyNjIzNDQsMS44Njc5ODM2MDI4NTk5NTlFLTUsMC4zMjg2OTU2MTc5NDI0MjcsMS44NjM1MDgxNTk0ODY4NjE0LDQzOC43MzIwOTYyNTA2NzU3NCwzMC4yOTE2NTk1NTYwNDgxMiw0Ljg2Nzc1MjYwMTQ4MjMzOUUtNCwwLjIxMDQzMzAyOTgwOTYyMjQyLDExLjI2MTE2MTQ2MzA1OTgyLDIuMTkzOTc3NDA4MDA2MTEzNEUtNCwwLjAxMDc2Mzk3NDIwNTI5MTkzNywwLjU4ODY1NTExMDY2NjMxOTMsMTguNzk1MjQ5MTkxOTkzNTE2LDUuNTI0MjYxMTY4MTgxMjEsMS43MDExMTY3NzI2Njg0OTZFLTQKKzgsVHVlIDEgRmViIDExLDAuNzg4NDcxNjU4MjgzMDEwMSwwLjQyMzI0ODI2MzExNzQ4OTY0LDAuNTExNDE5NzcyNzM2MjgxMywyOC4xMjA1ODEyNjA4Njg3OCwwLjAzNzY4NDM1MDc0MDEyNjg5NiwzMC4zOTQ3OTU3ODg0NjQ5OTcsMC4xMTk0NTMzMjIxMTY3OTQyNCw0LjA0NTY4NzcwNTkyNDk3NiwxNS40NzE5NTE1MTA0NTQ2MjksMTYuMjQzOTAzNzExOTcxNjQsMi4zNDc3MDAzNDE4NDkyNjE1LDQuNDU3MDEyOTEyMzA2NzcsMS4wOTQxNDc1Mjg2NDIzODY5RS00LDEuNDc1OTEwODQ2MzQxMDQ4Niw4LjMzNDUzNTE0MjMyOTAzMywxMzUxLjkzMDM5OTI4MDI1MzQsMTE1LjczODY2OTQwODUwNzg5LDAuMDAyNDY5MjgzOTg2NTQ2NzI2OCwwLjk2Nzk4MTAwODUyOTE3ODgsNDIuNTU3MTI1MDk2OTIyNzQsMC4wMDExMjcyNjU2MDM1Nzk5MDQsMC4wNjAyMTM1NTE1NTYzMzYyNywyLjYyMDc5MTgxODg1MjcwNiw3MS45MzY3MzEyNTk2MDE5LDE4LjgyMzM2NzE0ODE5ODY3OCw4LjQyNDU3NjkwNDU4MjUwM0UtNAorOSxXZWQgMiBGZWIgMTEsMy4wMTQ4MzUyOTQ5MTg3NDk2LDEuNjUxMTk5NzQzMjMyMDY1LDIuMDg2MTY4NzYxMzIyNzU0LDg4LjEzODAwMjYwNzIwMTQ0LDAuMTcwMjcxNDQzNTc5NzY4NjcsMTA4Ljg1NDAzMjcyODU5NjgyLDAuNTUxMDQ3ODI2MTk4NjAyLDE3LjM5ODMwMTEzNDg1ODgsNTcuMzUxMzk1OTk4MDA5NjY0LDYyLjkwNDIwMzc5MDA4MzUyLDkuNTc3OTA5NDEzODg2NywxOS43ODgyODQ0NTQwOTQxOCw1Ljk0MTAwOTIxNjg2NTcyRS00LDYuMzM5ODg2OTIxNDg5MjMyLDM1Ljc4MDU5MjI0MTU3NzA0LDQxNjYuMzQxMDY4MTU4NDEyLDQzMy42NzE0OTkwMDM0MjQ2MywwLjAxMTcyMzU3NjgwMjMxNjkxNCw0LjI1Njk5ODY5OTE4MzY5MSwxNTcuODIwNDMzMjQ1MTI0OTcsMC4wMDU0MzM1NzE2NjY3ODkyNjIsMC4zMTI2MDMxMDExNTI5ODQ4LDExLjE2ODg4ODA3NTgxNjg5LDI3MC4wODQwNzgzNjA1ODYsNjMuMjMwOTg0ODk2NDc3MzQsMC4wMDM4ODU4NzI5MDIxNzg1MDU0CisxMCxUaHUgMyBGZWIgMTEsMTEuMzU3MzUwMDE2MDc4NzY3LDYuMjk0NjI1NTI5MDY5NDksOC4yNTAwNjQ1MDE3Njg1NjMsMjc0LjUzMTQyNjA2NzA0MSwwLjc0MjU2NzkyNDA0NzcwOTUsMzg0LjY4MTY2ODMxMzM4MDE2LDIuNDUzNTYwNjI0NzQwNzY3NSw3Mi40MTM5MjY3NTkyODQxOCwyMTAuMDg1MjM2NDE5ODkzODUsMjM5Ljc2NjkwNzg0NDU1NTkzLDM3Ljk2OTUzNjgyMTY0OTI0LDg0LjgzMDQwOTI2MzgyMzcxLDAuMDAzMDQ4MzA2Nzg3MzQyMTI4LDI2LjM1MDc3MTQ0MzA5NTk4NywxNDguOTAzMDA5OTM4MDIyNSwxMjgxNC44Nzc0NzM1OTAzNTMsMTYwMC40NDM1NDQxMTU4MTkxLDAuMDUzMDYzMDA2NTc4MTgwODc0LDE4LjEwMTcwMDc3MDUzNDQ0LDU3Ni45MTgxODMxNTQwMDkxLDAuMDI1MDIwNjM1MDQxODU3NDQ3LDEuNTM1MzU4ODU1ODQzMjE0Nyw0Ni4wNzU4Nzk4NTIwNjA4MTUsOTk5LjMyNDQxOTc5NTI5ODUsMjEwLjMxMjEyNzUwOTE2Mzg0LDAuMDE3MDI4NTczMTIzMDAzNDM2CisxMSxGcmkgNCBGZWIgMTEsNDIuMjc5MDc4MTQ4NjA3MDcsMjMuNTgxNDgyMTgzNTk2MDM0LDMxLjg1NzgxNDE3NDUzMjc3Myw4NDguODUzNjY2ODAwMjUxMywzLjE1MDIwMzY0MjUzMzkxNzUsMTM0NS4zNjEwNjI0MDE0NzE2LDEwLjYyNjI3NTQ2NjE1OTE2NiwyOTMuODk3Nzc4MjUyNDc5OCw3NjIuNjMyNjQ0MzExOTM0OCw5MDIuMzE4OTQzOTE4MjgwMSwxNDcuMzIxOTQxODEzNjA4NDgsMzUzLjg0MjI5ODc5NjI3NDgsMC4wMTQ5NzA1NTMwNjQ5NDM4MiwxMDYuNzc4NTA3OTUzMzA4MzUsNjA0LjU0NjM1NjkzNjIxNzksMzkwODcuMDE0Njc4NzMzMzM2LDU4MjUuNjE5NTEzNzgyMjk2LDAuMjMxNzA3MDQ1NDA0MjAyMzQsNzQuOTgwNDc4OTgxNzA4MDIsMjA4My4xNjM0NjY1MTU3MzQsMC4xMTEzNjc5MDk3MzEyNjk1OSw3LjIyNTc3MjM1OTc0MjgzNCwxODUuMzc3ODA4MTcwODE4NDQsMzY1My4zMzIyMTU2NTY0MjksNjkzLjY4MDE3NjA4OTkwMDIsMC4wNzE4MzIwMjY4MDk1ODk0NgorMTIsU2F0IDUgRmViIDExLDE1NS43MTE1MzM0MTI1MDQxNyw4Ni45Nzg1OTM2OTc2MjU4NCwxMjAuNTgxMjE5MDAxMDM0NzgsMjU4MS40MjcwMTIwODIzODcsMTMuMDY4NTgyODIwMjEyMjc0LDQ2NTkuMzMzMjI0NjQ0MjQsNDUuMDAyNjQ1MzU3MzM5NzY2LDExNjguNjk1NDYyNDg1NTA2NiwyNzQ1LjU0MzcyNzE2Mzg0MiwzMzU2LjQ2ODEzMjY2NDQ5MSw1NjEuNjY5OTMzMTk2MTI5NywxNDQzLjE2OTgxNTcyMjkxNTUsMC4wNzA5OTA4NTI1OTQxODM5Miw0MjMuOTU1NTIwNjEyMzA4MiwyNDAyLjIyNzUxNzM4MjE2MzYsMTE1OTY4LjM5MjE4MzMxMzg0LDIwODI5LjAyNTg0NzM3NzUyNSwwLjk4MzgxMTgwOTY0NTUwODUsMzAzLjk1OTkzOTY1MzE3NTQsNzQxNS4wODI2Mjc1MzEwMjEsMC40ODI4NTM4MzY3MTQ4NjY1LDMyLjg2NzY4MzM0ODQ3NjgzLDczMC44OTA4OTcxOTg0MjQ3LDEzMTkzLjE1ODI5Nzg3NjYyNywyMjYwLjQ4MzkzMDE2Njk4MTMsMC4yOTQyMTk1ODQwOTA4NDM4NworMTMsU3VuIDYgRmViIDExLDU2Ni4yNDM5MTU1MzM1ODI2LDMxNC42NTc0NTI0MDQ0ODI3NCw0NDYuODg1MjM2NjUzMDQ5Miw3NTAwLjc0OTI1MTUwMTgxNyw1My4xOTMzNDI3NTU0MTA5MSwxNTkxOC45OTc4MjI1NDc0NzksMTg3LjA1ODIxNjcyMjA3NDk3LDQ1NjMuMTUyMjEyNjIwMDY3LDk3NzQuMjI1ODEyNzg0MDA5LDEyMzExLjIyMDk1NjI4NzI0NywyMTA0LjA1MzA0MzA3MzYyNTMsNTc2OC40MDY5MDM1OTYzMTQsMC4zMjcxNjEyMDYyMTk1MDc2NywxNjUzLjk4NDcxMjIwMjc0Miw5MzIyLjA1Njg3MDc5NzE4OSwzMTc4MjYuODU1MDA0NjQyNyw3MTcxNi45ODMyMjc4ODAyOCw0LjA4MzA4NjM1NTMzNjE5NiwxMjA4LjMwMjExODA2MTIyODIsMjU2OTAuNTQ4MjA1Mjk2OTgyLDIuMDQ5ODE2ODM2MzEyMTQwNywxNDUuMzkxOTc4OTYwNTA0ODcsMjgzMC43NjIzMTgxOTE3OSw0Njc0Ny40NzIwMTY5MDc0OCw3MTU5LjI0MDI3ODgzNTQ2MywxLjE3Njg5OTc0Mzc3MjYxNzQKKzE0LE1vbiA3IEZlYiAxMSwyMDEyLjQ2NTM4MTczOTg2MjYsMTA5NC44MDM4NTQyNzc3NDI0LDE2MDAuMDA0OTAwMzg2NTI3LDE5NDI3LjUxMzg0MjE1NDkzOCwyMTIuNTY1ODQ0NTQwNjc4MSw1Mjg3MC4yMjQ1MzA4MDc2Nyw3NjQuNTYyODI5NjU2NDE3OCwxNzQzMi40MjY3NDE1OTY3ODgsMzM5ODMuOTY0NzUzOTEwNTMsNDM5NzQuNzAyMjMzNjY3MzQsNzY2NS45NTk5MTYzMzQ4MjgsMjI1MTMuMDM4OTc1NjI4MDQsMS40NzE5NTY1MjcyNjI5Mzk2LDYzMzQuNjE1NzIwMTI3ODQzLDM0NzA5LjYzNjM2Njk1MzAxLDcyMzk3My4xNDQ4MjI2NTg1LDIyMzM1Mi45NjE1MjI3MDEwNSwxNi42MDcxMjE5MTgzODQwNiw0Njk1LjE4NDU1OTAyNzAzLDgyOTk0LjEwNTMwMjk2OTI2LDguNTQzNTA1MzkwNDUwMTU5LDYyNy43OTI3NDYzMTYxODI2LDEwNzQ1Ljc3OTE3NDEwNTA4OCwxNTg0NDIuNTUxMTc3MDQ0NSwyMTAxMy40NDMyOTY5ODE2LDQuNjA1NjkxNzI2ODYxMTExCisxNSxUdWUgOCBGZWIgMTEsNjc2Ny4xNzI1MzI0NzYyOTEsMzQ3OC42MzY2MDExODA4MzEzLDUyNzguOTc0Njg3MjE2NzMxLDQwMzMzLjEzNjUwODMzNzI2Niw4MzAuMDEzMTY5Nzk5NDc1OSwxNjM5NzguMjIwMjAwNDM4MSwzMDcwLjUyOTcyNDcxMzY0NSw2MzkwMS4yMTQwOTEyMzY4NywxMTEyMDEuMzc3NjQ4MzkzODYsMTQ2ODk1LjkwMDIxMzc5NDUsMjYxNjUuMzI0NzEwNzE4NjQsODQwMzguNjk5MDI1MTA0NDIsNi40ODkyMTAzMzk5MDk2ODksMjM1NzAuMjUzMDQ1NTEzMjc2LDExNjYyMS44MjUxNzI2NzA4MywxMjI1MDY2LjQ3ODAyMjA2MDgsNTQ4OTM5LjE1ODI1NDc4OSw2Ni4xNTE5ODMyMzAyNTY4NSwxNzU5Ni4wMDkxMDY0MDgzODYsMjI0NTczLjQ4MDYxNDUyMzcsMzQuOTYzNzQzODczNjA1NTE2LDI2NDguOTk0ODk1ODY0NTQzLDM5Mzk1LjU1OTY5MDAyMDQ4LDQ3NzY2My45NjA0MjA3NTIxLDUxNzQ2LjQzMTE5MTI2MDEzLDE3LjU0MjU1OTk0ODg1NjE2MgorMTYsV2VkIDkgRmViIDExLDE5Nzc4LjA5Mzg2MjE4OTg2NCw5MzA5Ljk3MTgzNDM3ODg3NCwxNDI5OC44Nzg1MzE4ODEzMDYsNjI4OTYuNzMxMjA5NjI5NzQsMzEwOS4yNTU0NzA5NTM2MDgsNDMzODE3LjAyODgzNzY4NDEsMTIwMzMuNTQyNzAzNjkwNjI0LDIxMDU3OS4yOTQzOTQ4ODIzLDMxMTg5Ny4yNDUxNTM5NjYzNiw0MTM0NTguNjA4MDI3NTk2NSw3NTgwNC4xODQ0NDg0NzQsMjc5OTEwLjgxNTUyODQ1MzQ0LDI4LjEyMDY1ODE1OTY4NjIxNSw4MjAwMC43NTA3MTc3MjI4NywzMDY4MTQuODg2NTEzMzcwNzMsMTU0NzU1MS4xNTY1MDk4MDk0LDkzNTEzNS44NDcyOTE0MjI5LDI1Ni44OTUzMjY0MjYwNDU4Nyw2MTcxMS4xMzM2ODE2MTg5MSw0MzgwNzkuNDMzNjYwMTk0NzQsMTQwLjEzODM5OTg4MjY0NDM0LDEwODc2Ljk5Njc2ODgyMjM1NywxMzI1NjEuOTM2NzcwNzU2ODIsMTExMDY1MS4zOTgzODQzNzM2LDk0ODcxLjE4MDI1Nzc4MjMxLDYzLjU2MjQ0OTI0MzgxNDc0CisxNyxUaHUgMTAgRmViIDExLDQzMzI0LjA4OTY3MDcyNTMzNCwxOTk4MS4wMDkzNjE5MDg1MSwyNzM5NS45NTI4MDY2MjAzODYsNzY0NDQuNDA0MDUyOTE3OTYsMTA2MDEuODY5NzE3MTk2ODY3LDg1NTI1MS4yMzc2ODM1Mjc4LDQ1MDU2LjkwODI3NzQ0Njk3LDUzODEzNy4yOTMxMDc1NzkxLDY0Mzg1My4zMTkyODYyMjc3LDgzNzUwOS43MjUwOTcwOTg3LDE1OTgwMC4yMjU4Mjk3MzA1NCw3MTI4MjEuODExNjE3MTI4OSwxMTkuNjAwOTY3NzgyOTgxNSwyNDAyNzYuODAxMDc0MzcwNTQsNTQ3NDMzLjY5Mzc5NjEwMTcsMTYxNTExNi4wMTQ4NTYyNzY4LDExNTQ1NDYuODU1ODEwMiw5NjYuNTA5NjQ5OTc1MTksMTkwNjc5Ljc1OTg3MzY5MTIsNTk4OTAwLjgxMTk3NDIzMDMsNTQ3Ljk3NDYyOTQ5OTYzNjEsNDI1NDguNjMyMDA5Mjg4NjIsMzYwNzk4LjU4ODU3NDEyMDIsMTc4NDE3OC40MTExOTQxMjg1LDEyNjc2Ny4xNzEzNjM0MDMzNywyMDUuODEyNTMxNTA5NzA3ODQKKzE4LEZyaSAxMSBGZWIgMTEsNjU1NDIuMzMxMTAzNzYzODUsMzQ4NzYuOTA2NDkyNTg0NjQsMzY3ODIuNTM2OTkxNjIyNjA1LDc4NzM3LjM1MjQyNjkyNjUzLDI5MzQ3LjI5MjUyODY2MDcyNCwxMTk4MTE5Ljc4ODkzNjUzMTIsMTU0NDg4LjQ1NDY5OTk5NTAzLDkzMDM5MC42MjQzNDg0MTUxLDkyMjQwMS40MTU1MTc0NTkyLDExNzI3NTEuMDIzODQ5NTEsMjMyMTk5LjE3NzI2NTAxNTk4LDEyMTY4ODYuMjc2OTUzMjgwNyw0OTYuODIwNDg5MTE1MjY4NDYsNTA0NTUyLjg3NDg3NjkyMzUsNjkxNTAzLjc0NjE0MTg2MzYsMTUxNTU4MS41NTI4MTQwNjQzLDExODI1MjEuODQ4Njk1NDA0NCwzNTE3Ljk3MzQxNTk1OTg2NDMsNDYwMTg1LjY4Mzc1NzYyMTg1LDY0ODA3MS45NDI5OTQwNDU4LDIwOTEuMzI3NzQxMjgxMzYxLDE0OTM2Mi4zMjY3OTEzMzkyMyw2ODA3MTIuNzkwOTI3NjgyNCwyMTIxMjE0LjEwNzI0MjYwNTYsMTM2MjU1LjE4NzA3ODAzNTEsNTQyLjEwMTczNzE4NjEwNjIKKzE5LFNhdCAxMiBGZWIgMTEsNzUxNzUuNDcyNTQ1MzY1Myw1MDMxMi4zNjA0MTU0MjI5LDM5NDAxLjM1NDQ2MTAzNTIxLDczNDk0LjE0MjYwNDYyNTEzLDU2OTM4LjEwMzE1MDU1MTQ2LDEzMTg3NjIuODAzNTQyOTA4Nyw0NDI4NTUuODMwOTQ0NTU0MDcsMTE1MTM4OS42NTY4MjUwNDQsMTAyNDE5NS40Njk4ODE4MTIsMTI4NDIzMC42MzI2NjExMDEyLDI1OTk1MC4wMDMwMTI2NTI2MywxNDkxMjg3LjAwNDAwNDMzNTMsMTk5NC44OTI4ODkzNTg2Mzc2LDcyMzI5Mi4zOTUyNzk3ODY4LDcxNTc1Ny43NDE2NzQ4NTQ1LDEzMzcxNTQuMDI3NjkzOTU5LDEwOTcwNzkuNDY1OTY4MjA2MywxMjMzOS42NDMwNzY4Nzc2OCw3NzI3NDYuMzAwNzU3NDM0OSw2MTkzNjguODIxNTIzMzk5LDc3ODguNjgwODU0Mjk4NTM0NSw0MTIzMTcuMDc2NTcxMzY5Miw4OTY1NDAuNTc4NTExODMxLDIxMjk4MTcuMjAwNzQyNjM3MywxMjk4NjIuOTE0MTQ3MDAzNzEsMTA2MS45NDQ2MjUxODgwOTk3CisyMCxTdW4gMTMgRmViIDExLDc0MDk3LjIyODYxMTQwNTMsNjA1NjcuMTc4NDU2OTIyMDksMzc0NTQuODIxMjEzNjg0NTUsNjQ2NTIuMjc3MjAyOTg2NDk0LDc2NzYxLjYyOTQ5Njg2MjQ5LDEyNzI0MjEuMzcyNDE3NjMyLDkxNjQwNC40NTc0NjIyMzA2LDExNzkyMTkuNTM3NzQ5MDA4LDk5MjIwMi41NjQ0MjUyMTEzLDEyMzQ4OTguOTE4MzEyNjIzNiwyNTI5NDAuMzU1MDUwNzIwMywxNTE5MzMyLjQ0MzkyNzc3NTYsNzU5Mi4wMTgwMDEwNDUzNTIsODAxNDkwLjMyNzY4NTY3MzMsNjY3NzUwLjQzNzI5MjIyMDcsMTEzNDM4OS44MTI3NjMyMTYsOTYxMDgxLjU3NTExNzE0NjUsNDAzOTYuMzY4MjY4NzgzMDY2LDk0Njk1Mi43NDk3NzIwNTg2LDU1MjM5Mi43NDQ5MTg4MzcsMjgwMDUuNTk5MzM5OTg5ODgzLDc3NDM3MS4yOTIyMzI3MTA4LDk0ODg0Ni4xODQ0MDU1OTk4LDE5NTQxNDEuMjg1ODU5OTI1NCwxMTU2NDEuOTY3NzEyOTQ1NjQsMTUxMi43ODk3MjUyNTI2NjQ4CisyMSxNb24gMTQgRmViIDExLDY3MjgxLjc4NTU3NDAwNDU1LDYzMDY2Ljc3OTk3ODg4MDc2LDMzMjk4Ljc1MDk1ODMzNzA1Niw1NDc0My44NDY1NTc5NzAyNzUsODIyOTAuMzk4Njg5MzQ1MSwxMTQxMjYzLjA1MTkxMDgwMzcsMTMwNTI5Mi4zNDg0NDA2NzI1LDEwOTM3OTAuODY2Mzk0NDg1Niw4OTE5NzAuNDA4MjM4MjIwMSwxMTA1MzI1Ljg5OTA2MDIwMjUsMjI3OTcxLjk5ODcyOTUyMjk1LDE0MDUxNzQuOTkyOTA3Nzc1LDI2NDk3LjM1ODcxNDc3MTk2LDc3NTQwNS43NjQxMDE2OTMsNTg2OTYwLjgyMTQxODk0MDYsOTM2ODMxLjMwMzQ3ODQ1MDMsODExNDc3LjQ1ODAxNTExMTksMTExNTg5LjU1MTE4OTcwNDY1LDk2NjM1Ny41Mzk5OTQxOTU3LDQ3MTk2OS4zOTUwMTU5NDI2LDk0MjA4LjYzOTk4MDY5MzE2LDEwMTMwMjAuNzIyMjEzMjc4LDg5NTkxMi4yMzAzNjM4MjU1LDE3MDAxNTMuMTYyNDY2Mzg2Myw5ODcwNy4xODgyMjQ3NDQ5NywxNjk2LjU4MzIzMTQ1MDk2NzgKKzIyLFR1ZSAxNSBGZWIgMTEsNTgxNTQuODI2MzE2ODE2NzMsNTk1NTUuNDEyMjIyNDgyMTksMjgzOTEuNzUyNjYzMzc4NTY0LDQ1MTQ5LjA2MjkyNDg2OTk5LDc4MjM3LjU5MzIxNzg3NTMsOTc4NzAyLjEwOTUxMTI4NjUsMTQ0MjYwMy4wODI2NTQ1NjM1LDk1ODA1OS45NjUzODkxNDI3LDc2NjA0Ni43MzgyNzc4NTI5LDk0NjYxMC4xMzA0NjYzMTczLDE5NjExMS41ODExODA5ODQzLDEyMjg1OTguNjYzMjY2NjIzOSw3ODg4OS4xODYyMTYyOTc5Nyw2OTY1MDYuODQzNzg5NDg5NSw0OTY3MTguOTQ2ODYzNDM0LDc1ODczNS42ODM0NjczOTQzLDY2Nzg5MC4yODk4MjgwODY5LDIyMjM0Ny45MzY1OTYyNTU3NSw4OTQ3MzYuODU3MjY3MjYyOSwzOTE3MjcuNTk2NTE5OTczMywyNzIzMDkuMjczMjc1NDExMzQsMTA2NzkxNS40NDMwNzM5NTU4LDc5MzI3MC41NTkyNzY5MTgsMTQyODg0MC4wMjM3MjMwNjg2LDgxODY4LjUwMjYyMTkyNDIxLDE2NTYuMjAzNDk2ODc0NDIzOAorMjMsV2VkIDE2IEZlYiAxMSw0ODY1Ni4zMTMxNDAzMDMxMiw1Mjg0Ni42ODI3ODAxNTA0MjYsMjM1MzAuNDUwODgwMDYyODE3LDM2NTI5LjU1MzgwNjA4MjI5NSw2OTU2MC42NjM5ODI5NDU4Niw4MTQzOTkuMTY1MTY2NTA5MSwxMzkzODcwLjM2MzkwNDgzOTYsODA4ODQ0LjE1OTkxNzk1NCw2MzgwOTYuNTQxODUzNDY3NCw3ODY5NTYuMTMzMTE2OTQzMSwxNjM1NDIuNzc3NDIyNDQ1NTQsMTAzNTk5NS45MDY0NzM5NjgxLDE3NDAwOS42OTY1MTE4NzQxNSw1OTc4NjEuNjc1ODM0MTM2MSw0MDk0ODguMzE1OTE0Nzc1LDYwNTUyMi4xOTE0NDA5NTMsNTM5NTU5LjQ1MzgxMDQyMTcsMzA3NzI2Ljk2NDc4NDk2OTIsNzgyODUyLjAxNTQyODcwNDEsMzE4NDMxLjQ2MDI3MTk0NzY3LDU4MDQ4My45NzYwNjQ5MjExLDEwMDYxODMuNTM3MzMyMzM0Myw2NzQ1NjMuMDM5MjMxMDU1MywxMTcyMDk1LjgzNTc3MzEwMjUsNjY1MTYuMDk1MzMwOTMzNTUsMTQ5NS45MzEzODUzNjgxMDA2CisyNCxUaHUgMTcgRmViIDExLDM5Nzg0LjYzMjYxNDQ0MjYxLDQ1MDIyLjM1ODEwNzg1NTMyNSwxOTEwNy4xNzQzMTYzOTE1OCwyOTEzMC44MTE0Njg1ODMzMTMsNTkzMTIuMjk5MDYyMDIwMTE2LDY2MzI2Ny40NTI4MjMzMDcsMTI1MTEyMi4wNDQwMjk5NTY1LDY2NTY3NC4xNDc4NzIxMjk4LDUyMDA3MC44ODI4MDMwMjIyLDY0MDQ3Ni4xNTY2NDg1MTg2LDEzMzQwNC40ODk5MjA3NjA5LDg1MTg4My4wNjk4MDgxMzYzLDI2MjY3Ni44MDE1NjM5NjQ0LDQ5NzgxOS44NTc2NDkyMDEzNSwzMzEyMDYuMjQ5MDcwNjgzNDQsNDc3NzU1LjQ0OTMyNTg5NjEsNDI5NzY5LjgyMTkxMTcxODUsMzM0ODM3LjQ4NDIxMjg4MDYsNjYwNDQwLjk0Njk5MzY0MzQsMjU0ODQ3LjIzMDMxNTA2NTM2LDg1MDg3My45MzIzMzEzMjQ5LDg4OTc2MC44NzEzOTU2MDA4LDU1ODAwOS4wNDM1ODgzNjA5LDk0NDUyMy42NTk5Njk2OTc3LDUzMjEzLjUzMDE5NzgxMDY2NSwxMjg4LjY4MDczMDI4NjcxMQorMjUsRnJpIDE4IEZlYiAxMSwzMTk4Mi4yNjU1NDIyMjEyLDM3Mjk1LjQ0MTY4NTY4NjU2LDE1Mjc5LjM2MTE1ODU3NzA5MiwyMjk3MC40MzM5MTQ2MDQ0MDQsNDkxNTguMDA3NDMzNTY4NDksNTMxNTg5Ljc5NDIyNjU3MjcsMTA3MzQxOS4yMTMyNDI0Njg0LDUzNzczOS4zMzgyOTk5MDQxLDQxNzA1OC4zMjAxNTU0NzczLDUxMzA1NC4yMTYzNjUxMTQ1NSwxMDcwNDguMzI3ODYzMTM3MjIsNjg3NzE3LjUzNDQwOTAwNTcsMzAwMTE0LjkyNjMwNjc2Miw0MDU2MzEuMzI3MzAxOTM0NywyNjQwNTYuNjkwNTA0MzMxNywzNzM1NDAuODU3NDE2MTQwNCwzMzg1NjcuODcwMDU4NTA5MzUsMzIwODkwLjMxMTc1MTUyMTEzLDU0MzI1NS4yNTM0OTE1MDU5LDIwMTUxOC41Mjk5MjIxNjQ3MSw5NTU5ODguMTgxNTQzNjk5Nyw3NTU5NjkuNjM4MDcwMzkwOSw0NTI0ODIuODY3MTIyMzk2NSw3NTA4ODIuNDk5MjI3NjQwOSw0MjA2NS40NzY4ODU5MDUyNiwxMDc1LjcxODA0MTY3MDA1MzMKKzI2LFNhdCAxOSBGZWIgMTEsMjUzNzcuNTYzODA0NDMwMzc0LDMwMjc0LjU3Mjg2MDc2NDMsMTIwNzQuMjk5OTE0OTQ2MTQ4LDE3OTUxLjMxODUyMzM3MDkyLDM5OTE3Ljk5NzU0NDAzNTg1LDQyMDgyMy41NTExNzM3OTE1LDg5MzUwNy4xNTA3MTk3NjU5LDQyODMwMS40MTgwOTQ3NTU4LDMzMDMwMi42NzQzMjY4NjYyLDQwNTk4My4zOTc3NjA0MTEyNiw4NDgyMi4yNTE3NzE5MDIxLDU0NzQ4NC41Mzk0NjY3MDA3LDI5NTA1NC43MTY0Mzc0NTk2MywzMjUyMTkuNzAxMzQ2MDc4OTUsMjA4MTcyLjYzMjY3MjUyODQ3LDI4OTkyNC41MzMwMTg3OTg4LDI2NDM4Ny45MzI2NTU1Nzk2LDI4NjY1MC44MzA5NDI2Mjg3LDQzODY3Ny4wNzY0OTQ5NTM5NCwxNTc4MzguNzM5MjIyMTEyODcsOTMxNzExLjk3NDE3OTEyMDIsNjI0OTczLjQ0MTEzMzY0NDIsMzYxNDQ5LjYyODY2MTkzNzIsNTkwNjM1LjQyMDU1NDExMTEsMzI5MzkuNzYwNzkzOTE0NzM1LDg3OC4xMDgzOTIxMDY5Mjc5CisyNyxTdW4gMjAgRmViIDExLDE5OTMxLjg5NjgwMzY1MTYzNCwyNDIwMy44NTU4NzA1MzY1NCw5NDUyLjMxMzA1NDcyMjgxLDEzOTI3LjcwMDM4OTk0MTI1OCwzMTkyMS41MjA0MzM4MzI1MjQsMzI5OTA1LjA2NjAxMzA5Miw3Mjc4NjguMzk3Njc1MDIzNCwzMzczOTkuMTEyMTA5ODIwMDcsMjU5MDMyLjA3MzgxMTI1NjU2LDMxODE2Ni4zNDYxNTQ2MTYxNiw2NjU0Ni4wNDE4MTQ5MjI1Miw0MzExMTcuNTA4NDkwNTUxMDMsMjY3NTA0LjI0NTEzMjkwODE3LDI1NzUyNi44NjY1MDU3MzcsMTYyNjU3LjIxNzQxMDQ3MzEsMjIzNjc5LjA0OTE2NTg0MzIsMjA0OTk3LjYxNTMyMzc4MjE0LDI0NTE3My4zNTc5ODM1NzE2MiwzNDkyOTUuMjA1OTE2MTgzMzYsMTIyNjgxLjkwMzA2NzA4MDMsODQwNDk4LjIwMDcxNzE2NDksNTA2NTU3LjY1Mzk5NTM2NzQ3LDI4NTM5MS4zMzA3MzgyMzY4NCw0NjA2NjEuNDk3MjIwNTc2OSwyNTU5Ny44OTIwODM0NDY3NTcsNzA1LjAwNzI2NzMxNzI2OTcKKzI4LE1vbiAyMSBGZWIgMTEsMTU1MjcuMDE1Mjk0MDg2NTQsMTkxMjMuNjEwMjk2NDg3NzQsNzM0My44NjA1NzQxNDkxMiwxMDc0Mi4xMDg1NDkzNjkyNCwyNTIyNS43OTMwMzIxNDA3NzMsMjU2NjA5LjcwNzQ1MDc0ODIsNTgzNDcwLjYwNDYwNzgxMTEsMjYzNDY3LjM1MjQ0Mzk0NDg0LDIwMTUzOS42NzM4NDQ5ODY4MywyNDc0MTIuNDY0NTYwODY4MTYsNTE3OTIuNTk5MzkwMDk0ODUsMzM2NTQzLjQ4MTk1MjQzNzEsMjMwOTg4LjU1MjkyMTE2ODQ4LDIwMTkzMy40Mjg3Mzk3NjcyMywxMjYxNzguODQ3OTMxNDQ0MjgsMTcxNzE3LjAwOTkzNzMyNTIsMTU4MDI0LjI1NTE0MDYyNTU4LDIwMzYzOS4wOTczMDMxMDUzNCwyNzUwOTYuMzM4NjY2NDc3NSw5NDc2MC40MTgzMzA1MTE3LDcyMzQ1MC4wMDUzNDA1OTYsNDA0NTA3LjE0ODYzMTMwODY0LDIyMzI2Ny4zNjgzOTQ0MDE5LDM1NjgyMy40MTYyMjM5NzA5NCwxOTc2OC45NzI2MzE1MDE0NSw1NTguODY2OTQ0MzcyMjYxNQorMjksVHVlIDIyIEZlYiAxMSwxMjAxNS4yNDA2NTU2NzY1MzYsMTQ5NjkuMjUxNjAwNzg4OTE5LDU2NzAuNTE3Mzg0Nzg0MDk0LDgyNDQuNzE4NjU3ODEyMTc4LDE5NzQ4LjA0ODczMTUxMDU1NywxOTgzMjYuNDgyNjI2MDc2MzUsNDYxOTU4LjQyODEyNjEwMTI3LDIwNDI3OC40NDI4OTc2NTg4LDE1NTgwMC4yMzg1ODAzNjg3OCwxOTExNzUuNTIwODc4MDU0NzgsNDAwNDguNzM4Njk5MjA1NzYsMjYwODcwLjM2ODg5NTg3MjcsMTkzMTI5LjUzNTk2MDAxMjE3LDE1NzA5Ny42Mzg2MDgwODE4Miw5NzMwMy44NjU2NzIxODU5NywxMzEyODQuNDY1NzI3MTczNjcsMTIxMjI4LjM0MjU1NDc1Mjc0LDE2NTYyNS4xNDM0MDM4MTYxLDIxNDc3Ni4xMzE0MjQxNDk5Niw3MjgxNi40NzA2NzMxMTk1Niw2MDM1NDQuNjczOTM4OTkwNywzMTkzMDIuNjc1ODMyMjExNDUsMTczMzY5Ljk5MjMwOTE5NTM0LDI3NDgzMi43ODk0NjMxNzQ2LDE1MTg5LjE2NjYxNjc4MTUwNCw0MzguNjAwODIzMDQ1Njk4NjMKKzMwLFdlZCAyMyBGZWIgMTEsOTI0Ni45MDI4NjMyMDE4MzgsMTE2MjkuNTgwNDU4MTUwNTE2LDQzNTYuMTQ5NTkwMjgzNDgxLDYzMDIuMzA3NDk3NTQ1ODkxLDE1MzQzLjA4MjgwNDYyODc3NywxNTI0NzUuNzA0MjQ3MDM5MDIsMzYyMTkyLjQ2NDUxNzAwNzc2LDE1NzQ2Ni4wNTExNjc0NzkwMiwxMTk4MDMuNTI2NzIzMjc3MzUsMTQ2OTUwLjMxODA5ODIyMDUsMzA4MDIuMzg2MzA5NzIxMDEsMjAxMDQ2LjUxMzk3MzMwMTE2LDE1NzgzNy41MzEyNzA1MDM1MywxMjE0MzMuNzI4MTM2ODQzNDYsNzQ2NzAuNDczODkxMjEyNjksMTAwMDI4LjQ1NDA0MDk0NTIyLDkyNjI3LjkyMjIwMTk0NTMzLDEzMjYwNy40MzE4NjMzNzkyLDE2NjUwMC42MjY1ODYxODc4Myw1NTcxNC41NTM1Mzk0NjQ1MSw0OTI0NjMuOTE0MTAyNzM1MzUsMjQ5NzQzLjA3OTY0NjE5NDIsMTMzODA2LjEzNDM4NDQ3MDg4LDIxMDY5Mi43NjQ0MjY3OTk3OCwxMTYyMC42OTUxNTI5OTY4MDUsMzQxLjQ1Nzc3MjAxMTIwNDE2CiszMSxUaHUgMjQgRmViIDExLDcwODQuMTM2MjY3MTg4MDIsODk3OS43NDUwMzgyMTc1MjMsMzMzMi4yNjg4OTMwNjE0Njc3LDQ4MDEuMjgzMDE1MTA0MjAxLDExODQ3LjA5NjY1MDg5MTg2LDExNjcxMy43MzQ3MTE0NjM5MSwyODE3NDguMTk1NTYzNTk0MiwxMjA3OTcuMjY3Nzg0ODMwNjksOTE3MTguNTczMTgzNTUyNywxMTI0NjYuMTc2NjA2NTExOSwyMzU4NS43OTExOTI3ODYzNTMsMTU0MjAxLjg3MTQ5NjAzMTEsMTI2ODM1Ljc5NTMxNDY5NTQyLDkzMzcwLjMwMDEzNDM2NTIsNTcwNjguOTY4Mzk0MTE3NTMsNzU5OTYuMjg4NTExMzg4Nyw3MDUzOC4zNjU2MzQ3NzY1LDEwNDg5MS44NzI3MDM0NzgzNCwxMjgzMjkuNjI4ODc0NTQzOTQsNDI0NzYuOTYzOTY1OTgyMDgsMzk1MjU2LjYyNDAxMDYyNDMsMTkzODk0LjY3ODY3NzM2NzMsMTAyNzUyLjUxNDA1MjMwNjA3LDE2MDg5Mi45MTcyODIyMTU2Nyw4ODU5LjA0NDE2ODc4MzE3MiwyNjQuMDk1MjI2ODYzMzAxMTUKKzMyLEZyaSAyNSBGZWIgMTEsNTQwNi43MjIxNjc0MTM3MjksNjg5OC43ODMyMzU1OTc0NjcsMjU0MC4wMzg0MzQ4MzI5MDc2LDM2NDcuNTEzODUyNjgxMTMsOTEwMS4wNTkyODkyOTIyNzIsODkwMTQuNTAyNzM4OTE4NTYsMjE3NzcwLjE4MjM1OTIyNjgzLDkyMjk2LjMxMjcwNTUyMDA3LDY5OTU5Ljk1OTk3NTgxMTU0LDg1NzYyLjk4NDUyNjU5MzUzLDE3OTkzLjE5ODU5OTM2ODYzLDExNzgwMS45MTg4Nzc1MTI1LDEwMDYxMy40MjU2MzE0NTU1NSw3MTQ3Ny40MTU2OTYwNDMyLDQzNDY4LjU4NTg5MTE1NTgzLDU3NjAxLjAxNTgyMTUzNDQzNSw1MzU2Ni43MTgzOTAxMzgyMyw4MjE3Ny4xODIzOTI5MzM4Niw5ODQzNi4wMzA2MTUyMzY0NiwzMjI4Ny45NDc3MDEwOTEzODMsMzEzMjQ0LjM0MTQ5NDc1NzUsMTQ5NjI1LjMxOTUzNTI5OTUyLDc4NTc2LjM2MTEzMDcyMjcsMTIyNDY0LjQ3ODM1MTkwNDA1LDY3MzMuNzAzNTg0MzgwNzQxLDIwMy4xNjI2NDQ0Njg4MTAxMwpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Jbm9jdWxhdGlvblRlc3RfUktfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL0luY2lkZW5jZV8wLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvSW5vY3VsYXRpb25UZXN0X1JLX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9JbmNpZGVuY2VfMC5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmMyNDQwMQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvSW5vY3VsYXRpb25UZXN0X1JLX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9JbmNpZGVuY2VfMC5jc3YKQEAgLTAsMCArMSBAQAoraXRlcmF0aW9uLHRpbWUsCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0lub2N1bGF0aW9uVGVzdF9SS19SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vSW5jaWRlbmNlXzEuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Jbm9jdWxhdGlvblRlc3RfUktfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL0luY2lkZW5jZV8xLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYzI0NDAxCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Jbm9jdWxhdGlvblRlc3RfUktfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL0luY2lkZW5jZV8xLmNzdgpAQCAtMCwwICsxIEBACitpdGVyYXRpb24sdGltZSwKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvSW5vY3VsYXRpb25UZXN0X1JLX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9JbmNpZGVuY2VfMi5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0lub2N1bGF0aW9uVGVzdF9SS19SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vSW5jaWRlbmNlXzIuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI0MzZhNmMKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0lub2N1bGF0aW9uVGVzdF9SS19SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vSW5jaWRlbmNlXzIuY3N2CkBAIC0wLDAgKzEsMzMgQEAKK2l0ZXJhdGlvbix0aW1lLEVHLUZSRy1HMjEwMDAxLEVHLUZSRy1HMjEwMDAyLEVHLUZSRy1HMjEwMDAzLEVHLUZSRy1HMjEwMDA0LEVHLUZSRy1HMjEwMDA1LEVHLUxPRS1HMjQwMDAxLEVHLUxPRS1HMjQwMDAyLEVHLUxPRS1HMjQwMDAzLEVHLUxPRS1HMjQwMDA0LEVHLUxPRS1HMjQwMDA1LEVHLUxPRS1HMjQwMDA2LEVHLUxPRS1HMjQwMDA3LEVHLUxPRS1HMjQwMDA4LEVHLUxPRS1HMjQwMDA5LEVHLVVQRS1HMjkwMDAxLEVHLVVQRS1HMjkwMDAyLEVHLVVQRS1HMjkwMDAzLEVHLVVQRS1HMjkwMDA0LEVHLVVQRS1HMjkwMDA1LEVHLVVQRS1HMjkwMDA2LEVHLVVQRS1HMjkwMDA3LEVHLVVQRS1HMjkwMDA4LEVHLVVSRy1HMzAwMDAxLEVHLVVSRy1HMzAwMDAyLEVHLVVSRy1HMzAwMDAzLEVHLVVSRy1HMzAwMDA0CisxLFR1ZSAyNSBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMixXZWQgMjYgSmFuIDExLDYuMDI4NTQ5MjE2ODYxMDE3RS00LDkuMjUyNjMxMTEyMTQyNDU1RS01LDYuOTk3NTM3NTQ2NTIzMTg4RS01LDAuMDgzMTM2NjAwMTg4MTk4NTUsMi42NzkwNzM5MTE2NDIwMjk2RS02LDAuMDM0NDU5MTk1ODAwOTQ1MzE1LDcuNjUyODI5MTg4MDE5MjZFLTYsNC4wMjM1NTUyNjYxOTE2ODg2RS00LDAuMDE1MDAzMDUzMDExMzg1MDQ1LDAuMDExMjkwMTE0NTEzMDA5Nzk1LDMuMzQ2NjEzMjA5Njg4MjM5RS00LDMuNTQxODE0Nzg3MzY2MjUyM0UtNCw0Ljc0MTAzMDU0MzE5MDU3NUUtMTAsMS40NjcwMDc0Njc0NDkzNTI3RS00LDAuMDAxMjkzMTUzMjE3NTk1NjQzOCw2LjQwMTEzNjE5NjcwNzI5MiwwLjA5OTg5OTUxOTA4NDU4MywyLjc1NTE2NjE3MTMxNjQ3OThFLTgsOC4zODM3ODE4NTQ4NDc5NzNFLTUsMC4wMzkzMjQ1NzEzOTI5MTcyNywxLjMwMzI0MDgwMDk5MjI0ODZFLTgsMy4zOTIzMTk1MjM3MTAzMkUtNywyLjc2MTI1MjkzMzU1NTc0MjZFLTQsMC4wNjE1NzY1ODgxOTI3MTg4MSwwLjAzMzAzNTUwOTQ3Mzg5MDQ1LDkuMjA4NTg5OTc2MTg5MzYzRS05CiszLFRodSAyNyBKYW4gMTEsMC4wMDI3NTYzNjMyOTM5Nzg3MjUsOS43NjM3MjUxMjkxNzAwMUUtNCw4LjI5NDA2ODI5NTY1MTkwNkUtNCwwLjI2NTQ0NjQxNjIzNDAyNiwzLjYwMDIwNDU0MDk5OTcwODRFLTUsMC4xNDM1ODQ4OTU3MTkxOTM3NSwxLjA0NDQ2NjExNzUwMDAyMzRFLTQsMC4wMDUwNTQxMTA4MTA1OTYwNjksMC4wNjQzMjgzMDA2NzIzODQ5MiwwLjA1Mjk3OTMyMTU4MzAwODgzLDAuMDAzOTE4ODQzNjExNjk2OTA3NSwwLjAwNDY1NTQ2Mzc0MzY2Mjg0NywyLjE0MTc5OTI4NzgwODcwNjVFLTgsMC4wMDE4NDQ4NzQ5Mjc3MDI0NDY0LDAuMDExNjQ4NDQ2OTE1MDI3NTk5LDE2LjE0MjYzMTkwNDgyMjIzLDAuNDQzNjE4MTIzMDI1OTAzNSwxLjAyMzI3NDU2NTEzNDg4MDZFLTYsMC4wMDEwODAzMzEzMzg4OTU2Njg4LDAuMTcxNzM3NDMxMzY2MjM1Miw0LjU1MjQ3NDgyNzM3MTc5MjZFLTcsMS40Njg0MTYwMzA1MTg5NzQ3RS01LDAuMDAzNDI4OTU3MjE2NDgxMDU0LDAuMjczOTE4MDMwODYwNTYwNiwwLjEyMjgxNzE4Mzc1OTI1NzMzLDMuNjM2MjQ4MzcxMjAzNDI3M0UtNworNCxGcmkgMjggSmFuIDExLDAuMDEyMzYyNzU4OTQ3NDc5OTk5LDAuMDA1NDM4NTIxMzU2Mjk4NDY5LDAuMDA1MTkwMzUyMDA1MTQxOTIzLDAuOTA0NDUyNTIzMjQ1OTMwNCwyLjU4NDUyMTk0ODQ0OTIzMkUtNCwwLjU5NjY4Nzg3MzgwMDY4MjYsNy42NDI0NzA5MTEzMTM5MjJFLTQsMC4wMzM3NzI0ODc1NjE2NTIyOCwwLjI3NDcyODU3NDM5NzgzMjI3LDAuMjQyMzAyNzA0NjU3MDQyMSwwLjAyNDI0MDc4MjYwNzczNDY0MywwLjAzMjY1MDg5NjQ4MzM5MjE5LDIuODE0NjQ5ODQxNzI5OTM2RS03LDAuMDEyMzM2ODE0ODMzNDAyMTg0LDAuMDcyNzg4MjE5Mjg5OTg3NDQsNDkuMDUyNDI2NjA3OTkwNzI1LDEuOTQzNTczMzEzOTk2MTIwMiwxLjExMzA4NzQzODE2MDEwMDNFLTUsMC4wMDc0MjY5NDAzOTgxMDg2MzMsMC43NDIzMTk2MzA4MjI5MjQ3LDQuOTIxNzM3NTc0MzA2MTc1RS02LDEuODM1MTkyNzA1MDA5NDA4RS00LDAuMDIyNjM0MzQ2OTQxNTgzODcsMS4yMDE4MjEzNjU4MDMyMDczLDAuNDY3MTE2MjgwNDQzNTAzMzQsNC4wMDI5MDUwMDU4ODAxMjJFLTYKKzUsU2F0IDI5IEphbiAxMSwwLjA1MTg0MjU0MjYzMjY2MjIzNCwwLjAyNTMwNzY3NjQzODc1MjQyOCwwLjAyNjUxNTg5NzQ2NjkxOTQ1NSwyLjk2MDcyMjIzNjAzMDg2MDcsMC4wMDE1MDExMjU5NzU5Njc1MjksMi4zMjY2NDQ5ODM2OTE0MSwwLjAwNDUyOTczMzEzMjcwNTAwMjYsMC4xODM3Mjc5MDIzNTAxNzEzNiwxLjEwMjk1ODYyMzM3MjU3NTksMS4wMzM3NzgxMjI0NDQ2MDU0LDAuMTIyNzY1NTcyMDAwNjUyNjYsMC4xODU2MjQxNzU4Mjc2MDc0LDIuNDA4OTkwOTk5MDYzNjI0RS02LDAuMDY3MTI0OTIwOTM1MzA3MTcsMC4zODUzNDgyOTE3MDY0MiwxNTAuODE5NDMwNTE5NTg3NzQsNy45NzIwNDE1ODk3MjI1MjcsNy45MzgwNDg4Nzg2ODExMTZFLTUsMC4wNDE1MTQyNzUwNjU0NDI2NTUsMy4wMDY1NzYxNjU4MDUzODgsMy41MjYzOTM1NzQyNjA4MTA1RS01LDAuMDAxNDkxNzgzNzE3NDM0MjM5LDAuMTIxNzY4MTU2Nzg5OTY4MSw0LjkzNjc3MDQ4ODIwNjIwOCwxLjY4MDM1MTY2MDU4NzgzNjgsMi44NDMwMzY3MDQzMzA5MDYzRS01Cis2LFN1biAzMCBKYW4gMTEsMC4yMDg0ODQyNzY3ODA2MDk4MiwwLjEwNzg5OTQ2MTk3MjY5NDIzLDAuMTIxNzEwNjQzNDM4NTQwMDQsOS40NjU4ODg4NDAwNzI4NTksMC4wMDc3NjY5MTc3MDg5ODUzODEsOC43MTk3ODQzMjMyMzk3NiwwLjAyMzkzMjIwMTcwMTI0NDk3MiwwLjg5NTMzNzUyMTc1MjYwMjIsNC4yNjQ0NDQyMzc4ODk2OTksNC4yMjI3MzI5ODgyNDk3NiwwLjU2MDIzMjc1NTc0NTk1MjksMC45NDE0ODY2MzUyMzI5OTIxLDEuNjY0NDA2NTU5NjgyODUzRS01LDAuMzI3MDA0NDQ3ODQ3MTEyLDEuODU0NjM2MzkwNjExNjkzNCw0NjQuMzg1Njg4MTYyMTI1NzUsMzEuMzgyODM4MjQxODk4NjY0LDQuNjMyMzgwNzg4NDY4ODI0RS00LDAuMjA3NTgwODM2Mjg1ODIyMDIsMTEuNjk0ODc5NzQ5NDU4NjUyLDIuMDc3MDY0NjcxODk0Mjg4NUUtNCwwLjAwOTgwMTE1MjQ4MTU1MDE4NywwLjU4NzMwNzU3NDY2NDEzNDMsMTkuNDY0MjExMzA1Mzg5ODg1LDUuODQzMTE0Mzc1NzExNzE5LDEuNjM0NDQxNDY0NTI5Nzg2NUUtNAorNyxNb24gMzEgSmFuIDExLDAuODE1MTEwNDMxNzQzMTczNywwLjQzNjg4Mjc1Nzc5NzQwMTEsMC41MjI2NTA2NDkxNzg1MTI2LDI5Ljg2ODQwNjg1OTk4MjY3NCwwLjAzNzMyNjg5OTM4NTQ5NDI3LDMxLjgzMzg3Mjg3MDE4NTcwNCwwLjExNzQ4MTM2NDgzMDg2MzU1LDQuMDcxMDIzMTE3MTE4NDMsMTYuMDkwNzY1OTk5NDUyNTU3LDE2Ljc0Njg3ODkzNzcxMjM2NywyLjM5ODQ0NTM2NzI4ODg5Niw0LjQ0MDE2NzMyNTU0MTA3OSwxLjAxMDIzMzMzODg2MjkyRS00LDEuNDg1NzQwODcxNTI1MzU3Myw4LjM4NjA2MjU0OTgwNjAxMSwxNDMxLjA3NjAyMzE1NDIyNzksMTIwLjE3MDYyMjM1NDMzMTc0LDAuMDAyNDA3OTIxMjM3MTQyNTAxMywwLjk2NzIyODA2MDg5NTg4NzMsNDQuMjc3NjEyMDQ4MzYzMjc0LDAuMDAxMDkzMDgwMzA2Mzk3MDE1NCwwLjA1NjY2NjMxMzk4OTMyMjcyNCwyLjY0NDUwMzgzMDkyODU4MSw3NC42NTgxMzUzMTMzMDIzMSwxOS44OTI0NjUwOTEwNTAyNDQsOC4zMDM1ODk3NjcxODk3NDZFLTQKKzgsVHVlIDEgRmViIDExLDMuMTIyODMwNTU4NTA1Mjg5LDEuNzEwMDE4MDE1OTQ4Njg0NCwyLjE0NDY1MzkxNTU2NTQyODcsOTMuNTE5NTk3MDk0MjA3MzQsMC4xNzAzNTk3NzQ5NjY5MzU1OCwxMTQuMDk1NTM5MzM0NzM0OTQsMC41NDc3MjY3MDU2ODkwMDM2LDE3LjY0NTgwMjk1Mzc4MDQwNyw1OS43MDQwMTgyMzg4NTg1NjYsNjUuMDA2NTgzNTc4MDgsOS44Mzc2ODY5MTY0OTcyOTIsMTkuOTAxNjk3ODQxOTAwODgsNS42MTY5NjMwNTQ1MjAwMjJFLTQsNi40MzI3ODExNDE1MzQ5OSwzNi4yNzU5MjU4MjE4ODMzMiw0NDEyLjAzNTc5OTU4NDk0OSw0NTEuMDYyMDYxNDM5MTIzNzQsMC4wMTE2MDgzMDE5ODUwMzI1MDcsNC4yOTExNTAzMjE5OTI2NDk1LDE2NC40MzYyNTkzNzI4MTg1NywwLjAwNTM0ODQwNzcyNjA1NDkxMywwLjMwMDYyNDEwNDc4NDk4OTEzLDExLjM1NTU3Njk2MDk2Nzg2NSwyODAuNzY2MTEzOTYwNzg1OSw2Ni43ODkzMDI5MDk1OTEzNywwLjAwMzg5MDYwNDE2NDkyNjQ0NgorOSxXZWQgMiBGZWIgMTEsMTEuNzgxNjU2MDE2MjE2MTI1LDYuNTMwNTc4NDQyNTI5Mzg5LDguNTE1MDE4NDEyMDA2MjM3LDI5MS4yMDU0NDY4ODc5MjE3NywwLjc0ODE4MTc1OTQxMTc4MjYsNDAzLjQwOTY3MTI5MTYyMjksMi40NTcwNDM4NTE3NjQ3NTI2LDczLjgzODgxNjQ2NzMwODI5LDIxOC44NDI2NDYxNjMyNzU3MywyNDguMjEzNzMxMjQ2NjQxNDMsMzkuMTMwMzA5ODAyNDgyNTg2LDg1Ljg3OTM2NDc2MTA5NzgzLDAuMDAyOTI5NDE5MzEyNTEyNjAwNCwyNi44ODE3MTEyODk4OTQ4MDYsMTUxLjc3NDIxODYyMjcwNDU4LDEzNTkwLjIzMTA2NzYzNzMzNCwxNjY3LjMwNjkxMzUyNDUxMzQsMC4wNTMwNzAxNDcwNTcxNDM5OCwxOC4zNTgzMTgwODg5NzkxMiw2MDEuODQzMzQ0OTY1NzIwNSwwLjAyNDg3MDY4MTY1MzE3NjYzLDEuNDk4MzY5OTIxMTIyNDQzMyw0Ny4wODg5MDQ0MTc1ODgzNSwxMDQwLjIyMjg2NDAxNDY0MDcsMjIyLjA4MjA3NzMzMTU1NzUsMC4wMTcyMTU5NzY4MDE3MDUwMjMKKzEwLFRodSAzIEZlYiAxMSw0My45MjE4MjA4NjM1NDU1OSwyNC41MTcxMzY2OTk2NDgzNzIsMzIuOTg1MTQ1NzEzNjM4NTQsOTAyLjIxOTcxMjE5OTY4NDMsMy4xOTExNzUwMjM1NDY3NjE3LDE0MTEuOTM4NDE1Mjc0OTE3MSwxMC43MDI4ODM3NzE0ODI1NDksMzAwLjkyMjU2NjE0NzQ4NjksNzk1LjA4NTA2Mjk0NzkwMjgsOTM1LjY5ODU1OTI2MDIxMzUsMTUyLjIzOTc0MDcwMzM1NTc4LDM2MC4wNTc1OTg0MDY0NDg0LDAuMDE0NTYzMDYzOTU2MjIxNTE2LDEwOS4zNzg2NTA2OTY1Njc1Niw2MTguOTI1NjQ0NDAwNTgzNyw0MTY0NC4zMzc4NDI1MDk3NTQsNjA4NC4yNTE4NzM1MTg4MDYsMC4yMzM0MjExMTQzMzkyNjQyLDc2LjQwNjEyODM3NzI1NzQ2LDIxNzcuMDk2ODU5NzI4NzMwNiwwLjExMTQ4NDY3MTk1MTMyNDA1LDcuMTI4ODE0OTYxNzM2Mjc5LDE5MC4yMDUzMDkzOTcyMTY1OCwzODA4Ljc3OTIxNTYwMDQ3NSw3MzMuMjEyMTQ3OTUyMzYzOSwwLjA3MzEyMzIyNDgxNzkxOTUxCisxMSxGcmkgNCBGZWIgMTEsMTYyLjA2NDQ2NTg5MjMxNCw5MC42NzQyMzM5MjAxNzc1NywxMjUuMjU0MTQxNzYxNDExODYsMjc2My41MjY5MTk2ODUwMjk1LDEzLjI5NTE4NjMwMzY1MDYzNiw0ODk3LjkwMTMxMjczNjI5NCw0NS41MzE4MDQ4ODkwODU3LDEyMDAuNzM0NDQ3NjMxMzY0NCwyODY2LjYyNTE4Nzg4MjM0NywzNDg4LjE0Mzc3MzI3NDk3MzcsNTgxLjk0NjM4MTE1NDc2OTEsMTQ3NC43MzE0OTUwODIxMzk2LDAuMDY5Njk4MzUyMjYyODkwNDYsNDM1LjcxMDg4Njc1ODA4MzMsMjQ3MC4zMzE2NjE0MjY1NDc3LDEyNTI1Mi40MTUxNDE0NTM5NywyMTg4Ni45ODYwODQ4NzY2ODQsMC45OTY0Nzk0NDIzNzEzODQ2LDMxMC45ODU3NzI4MDEwODY5Nyw3NzgxLjc0NTU4OTIwMTk5NCwwLjQ4NTkwOTU0NjA2MDY2OTQ0LDMyLjY5MzU4OTcwMzc3MDk2LDc1Mi4zNjM5NzU5Njg2NDMsMTM3OTMuNjgxNzU3NDU5MTMzLDIzOTkuMTYzMjE4MTAyNjE5MywwLjMwMDk3NzE5MzMzNDI4MzQ3CisxMixTYXQgNSBGZWIgMTEsNTkxLjU5NjUyMjg2NDg2OTQsMzMwLjA0MTA2ODQwMjIwMjksNDY2LjgxNjQ0MDY5OTQ5OTY1LDgxOTQuNTU2OTU2MzUzOTIzLDU0LjMyMTg2MTcwMjU3NTU5LDE2ODA5Ljg3NjMwODk2ODE0NSwxODkuOTY1OTEwODMzMDM1NTQsNDcwNi4wMzI1ODM4NzcxMSwxMDI0NC41ODE4Mjk2NDU1OTUsMTI4NTAuNjA0MzUyNjE4NDg4LDIxODkuNDMyNDY3Njg0NzE3LDU5MjAuOTU2MDk1MTc5OTU5LDAuMzIzNTAwMzM0NzMwNjg4OSwxNzA1LjM1ODE2MDgzNDcwNTQsOTY1Ny4xODU4NjQ0OTQyMDYsMzU1MjE1LjgzOTU5Nzk5MTI2LDc2NzQyLjc5NDY4Nzk2NTY0LDQuMTUzODkzNTQ1NTY4ODM2LDEyNDEuNjY4ODc4OTIzODczNSwyNzI5Mi4yNjM3MDA0MzMzOTYsMi4wNzE0NzM3NTU1MjAzNDM3LDE0NS41NTYwMTczNjE0NDYzOCwyOTIzLjk5MTIxNTM0MDk5MDUsNDkyNDUuNTQyNjg0MDExMjYsNzY5OS4xMjU3Nzk3MTExMDksMS4yMDg2MjU5NzE1MzIzNzQ2CisxMyxTdW4gNiBGZWIgMTEsMjEyNC4wOTE1ODEwNjk5NjY3LDExNzAuMTAyMDMxNDM2MDIyLDE2OTYuMzc0NzM0NDEwMDQyNywyMjE0NC4wMzE4NjQzNDIzNjcsMjE4LjEyODg4MjIzNDEzNTI2LDU2NTQ0LjIzNTU1MDMzNDA0NCw3NzkuNTUyMDA3NjIxMzAwMiwxODExMy41MzcyMjE0MTE0MiwzNjAyNS4yNjM4ODE4NTcyNSw0NjQ3MC41NjMxMjc4NTQzNDQsODA3My4zMTQ5MTI4NTc1MDA1LDIzMzAyLjcwNTE1NjM1NjgwNiwxLjQ2NDU1MzY5MzM1ODYyMzIsNjU2NS43NDIxODA0OTAwOCwzNjY2NS4zNjcwNDM2NjQwNzUsODUxNTIwLjk1NjI0Njc2ODEsMjUxMzc5LjU5MzkzNjIxODA0LDE2Ljk3NDM4NDk3NDY1NTkwNSw0ODYxLjU0NDg1OTE2OTA4OCw5MTM0Ni45Mzg3NDk4OTY3LDguNjcxNjg5MDM4OTU5MzQ4LDYzMi4zNjI2MjU4ODY4MzM5LDExMTY5LjMxNDY4NzQ0NDQzNCwxNzA2NDkuMzgzMTEyNjkzMjYsMjMzOTYuODY3Nzk5NTE3ODcsNC43NTU0MTEwODc1NDQ3OTEKKzE0LE1vbiA3IEZlYiAxMSw3MzQyLjAyNDYyNDMyNjk5LDM4NzQuMzIwNDM3NzUzNDI3LDU4MjkuODM5MDc3ODE1ODc2LDQ3MTg4LjAwMjI3NTcwODA0LDg1OC44MTI5MzU1NTk3NTE1LDE4MDg4NS4zNzk4Nzc5MzQxNSwzMTQ2LjYzMTkwNzg4NjE3Miw2NzczMy4yNTgyNzgzODI2NSwxMjE0OTIuMzA4NDgzNjkxNDIsMTYwNjQ1LjEwMzk2Mjg0NjksMjg0ODEuMjUyNDY5NjAyNjA1LDg4ODkxLjMzMTE1MDQxNDksNi40ODcwMzQwNDI3MjgyNjQsMjQ3MzEuNjQ3ODgzMDQ2NjMzLDEzMDAyOS45MzIyMTY0MzkxNSwxMzYwNDExLjU1Nzg1ODMwMTYsNjc0NDg1LjkzMjE3MzgwNTIsNjguMDA5ODAzNDYyNzQxMjksMTg0OTYuNDg4NjQ5MDI4NTU3LDI2NjgyMi45NzI4MzQ3NiwzNS42NjY1MjA5MTA3MjU0MSwyNjg1LjExMzE3MjUzOTA3LDQxNTk5Ljk0MjkwODg1NDUxNSw1NDQ0ODkuODYwOTI0MTkyNCw2MTAzOC4xMTk0NDUwNDQ3OSwxOC4yODE0MDY1MTY5OTY4OTIKKzE1LFR1ZSA4IEZlYiAxMSwyMjg5OS41OTc0MDAwMzA5MDcsMTA5MDYuMDQyMjU0MDUzMDIzLDE3MTgxLjI5MTk0MTQ3NjAzNiw2MzEwMi42OTg0NzMxMTM5LDMyODAuMjA3MDEwOTkwNDYyNSw1MDg2MjguMTk4MDE4NTY0MjYsMTI0NTQuMjI0MDQ2NzU0ODg5LDIzNjEyNi45NjY1MTI2MjU2LDM2NTA5MC44Mjc5Mjc1Mjc4LDQ4OTA0MS41Njk2NTE3OTE1LDg5MDc1LjUwMzE3MTIyNzIyLDMxNDY3NC44MTY1NTg0NDIxNCwyOC4yMjk2ODY0MDk2NDYxOCw4OTA5MC4yNzk1NTIxMTI2LDM3OTQzOS4zMTcyMzkxMTc1LDEwNDk0OTQuMTAyNDQxOTk3MywxMDkzODM2LjkzNzkzMTg4NSwyNjYuMzIyOTkxNjE0MDEyNiw2NjcxNi4zNzEzMTQ5MTcxNSw1NDA1MTEuNTk3NjU2OTg3NywxNDMuOTA3MjE2MTg2NDcyMjUsMTExMzcuNjA5ODMxMjMyMDA1LDE0NjM3Mi42NjM2MzQ5NjA5MiwxMzc1NDI0LjAxMDAwMjE2MTYsMTEwNzczLjU1MTE1MzQxMDUzLDY3LjgzMDg4MjYxNTg3MDI4CisxNixXZWQgOSBGZWIgMTEsNTQwMTAuMjQ4MTAwODkxOTEsMjI5NjMuMjU0NDI3MjIxOTQsMzM4OTQuNjYyNTE4NTc3MTEsNDM4NDcuMjY4NDAxODkxMTgsMTE3MTYuMzUxMzkxNTAwNTY2LDEwMzYxODkuNzQxMTEzMDk2LDQ3NjE3LjgxMzQwMzA2NDIzLDY2OTQ3MS45NjYwMjg5MDI5LDgwMDc2Ni40ODg0MjM2MzU4LDEwNDk0MzIuOTg2NzE1NjM3OCwyMDA3NjcuOTM5MDA2NzY3NDQsODkzODg5LjU4MzgwMTgxODUsMTIwLjgyOTg5NjA1NDA4ODIyLDI4MzQ0My45NzMyMTA3ODYyLDY2OTQ0Mi4xMTg3MDE2Nzc4LDMzMDE5NC43Mzg0NzkwOTY1Niw3MjA3MjUuMzE2NzA3NjI5OCwxMDExLjA1MTg4MTc0MDY5NDIsMjE2ODY1Ljk2MzI2OTM3OTQ2LDUxNjI4MS42ODEyMjg2ODA5NCw1NjYuNjkyMDYwMjQ4Mzk1LDQ0NTk4LjI4ODMwNTA2MzkxLDQzNzYzMi43ODM2NzU4ODM0MywxOTg1MTQ4LjgwMTA2MjIyOTYsMTAxNzMxLjM0NzAxNzU3OTU0LDIzMS4zMjY3NzQ1MjI1ODYxCisxNyxUaHUgMTAgRmViIDExLDY3ODg3Ljc0OTUyODU1NzQzLDM1MzI1LjY2MTEwOTc3MzEzLDMwMjg2LjM2MjM5MTczNzI0NiwxNTU1OC4yMDc2MDM1Njg2LDM1Mzg1LjAwMzkyNjkwMDQ3LDEwODAyMDUuNjM0NTM2ODg2MSwxNjk2MjMuOTczMzc4Njg3MTcsMTExNjE0Mi4yMzgwNDIwNDcyLDg3ODEyOC42ODMyNzUzNzcsMTA3MDAwMS4xNzg2Mjg0MTk4LDIyNjA2OC4zNzI1Njc3Njk1NSwxNDUyODY5Ljk1MDA5OTE1NjIsNTA2LjI5NzI0MDYzODkzMTE2LDY0MDAzMS43ODI0MzExMTEzLDQ3MTA0OS4zNTczMDg4NzY3LDQ5Mjg3LjQ4MzM4NzYyNDIsMTY2OTg0LjE5ODYxMDIyMzc0LDM3MDIuNzgyMDU2MTg4Mzc5Niw1NjU1MzIuNTgyMTUzNzMwNiwxNzUwMjUuOTQwMTA3NDIyNzYsMjE3Mi40MDA5NTI2NDExMTgsMTY1NDc2LjkyNDY3MzMwODYsODQ3NjExLjc4NDI3MzAxNTEsMTExMzI3MC4xMDA3MjY4MTksMzY3MzguMjEzMDM1Mjk4NzYsNjQ3Ljk3NTE0MzQ0NzA2MjgKKzE4LEZyaSAxMSBGZWIgMTEsMzIwMDkuMTAyNTI5OTIwMDM0LDQxNjU5LjkxMDM0OTk2NjI2LDk1NTguMTA4NDc4NzgyNDI0LDMxMTQuOTYxMjg1Nzk4NDEyNSw3MTE0Ny40OTEyNDE4MDA5Myw0MjUzMzQuMDQxODY2MjMyMjMsNTIzMjMxLjU0NzA4NDcwMzA1LDcyMzIwMy41ODE5NjI5ODMyLDM0NTU4My44ODgxMjkyNTAxNSwzODE4NTkuMDExMzYwMDAzNDQsOTMxNjMuMDMwOTQwOTExMjgsODk1ODQ3Ljc3ODQ1MzQ4MDIsMjA2MC43Nzk4MzgxMjU0NTcsNjkzMDYzLjI4NTgwNzU5MDYsMTExOTQ3LjAxODE3ODMxNzE0LDUwNTQuNjAzNTM2MjI0MTEyLDE4Mzg5Ljc1OTk2NzkxNjI3NCwxMzExNC4yMDEzNTQ0Mjg1MzUsODg5ODM3LjY5NDA2NzE5OSwyMzgzOC4yMDM4NDExOTY1MDgsODEzOC4zMjg2NDQ5MTUzNzcsNTA2NDczLjg3NTc0MDcwNjE2LDcwMjg4Ny44NjAxNzUxMzAyLDIyMTQ4Ni45MjU5ODIzNzQwNiw1NTM4LjY0MzI4MzQ5MDAzMSwxMjYzLjE0NTA0MDkzNzg4NTQKKzE5LFNhdCAxMiBGZWIgMTEsNTYyOC43NDAzNDQ5NjU0Njg1LDMzOTQxLjY0NTgxNjQ3MDUzLDEyNjMuMTU5NzgwMDY2NjQ5Myw0MDYuNzc3NDY5OTY1MDcxNyw2NDEyOS41MzU3ODU4NDAzMTUsNjYxNTQuODI1Nzk3OTQ4MDQsMTE1MTEzNi4wNDc3MTAyNTY3LDE1OTE1NC42OTM5MDM0MzkyLDUxODE2LjY5NjM4ODY5ODExLDUzMjI5LjA4MzM3NDIwNDIxNiwxNDY1Ny4wNDgxNjY2Nzc5OTYsMTg3ODIxLjQzNzI2NDE0MDQ2LDgwMTUuNjQ2NDEyOTY4NTc5LDI2MTE5OC40NTI5MDk2NDY1OCwxMjA5My45NzgxNjUyODg5NjUsNjY5LjE0NTUwNTI4MDU5NDUsMTY3MC41MjY3ODQ3MzQzNzA1LDQ0Mjg0LjM5ODE3OTc0MTIzLDU3MzM3OS41MTM0ODExOTY3LDIxMTIuODM1NTIxNDQ1NTUsMjk2NTEuNTc0MDM3ODQ0MzA0LDk2OTMzMC40OTY5OTg4NDc3LDE5NzQxNS45NTE2NDE3MzI4MywyMjIxMy43MDE2MTQ2NzMzNTUsNTIxLjc5NjM0MDM1MTIwODYsMTM2Ni45ODgwNTQzOTQ3NDgxCisyMCxTdW4gMTMgRmViIDExLDU1MS4yNTAzMDAwNDYyODI5LDE2MzcxLjI2OTUzMzE5MzIwOCwxMTMuNjc3Mzk5Nzk0Njg5NSw1MS43MDg0MDE2NTk1MDczMjQsMTk4MjQuMjIzMTc4ODE1MTQ4LDYxNjUuNTEwODA5Mjk0MjIxLDEyMzI4ODYuOTk1NTYxMDY2NSwxNjU0Mi4xOTEzNjcwNjQ3NSw0NjczLjY0NDI5MTQyMTQ4NCw0NzA0LjM2MDc5Njc1OTcwMiwxMzQ5LjkyMTI4MDgzMTQwMjgsMTkwNDEuNzQ3NjQ0OTc1ODgsMjg5MTkuNDI2ODY1MDUxNzY2LDM3NTM0LjYzODE1Nzc5NzIwNiwxMDUxLjg3MjA4MzU3MDIzMywyNzkuNjk5NjgwOTYxODIzMzMsMzAxLjM0MzUxODE5OTY0NTcsMTMxOTc2Ljk5NDgxODk0OTY2LDEzMTEyNi44NDAyNjYyNjIzNiwyNTYuNjQ4NTE4MDIzNTAyNDUsMTAyNjQ5LjEwMzI0NjA4MjkzLDc3NjM2MC44ODUwMDg5NzY4LDIzNDQwLjgzMzczOTYzODcxOCwyMDQ0LjczNDE0MDYzMTczOTgsNjEuMzg4MTk1ODAwODk5MzEsNjQ5LjAzNzMwMTExODU2MzgKKzIxLE1vbiAxNCBGZWIgMTEsNTUuMjExMDAxODI1MjIzNjgsNDc1MC40MDk0MDk5MzI0MTcsMTQuNjAwODQ5MTQ2MDIwMDQyLDE1LjkwOTQ5ODIwOTk5Njg0OCwyNTAwLjc1NTYzMTMxMTc1NCw2NzUuMjg2NTg2NTUyNjg3OCw0NjM3NDQuNTE2NTc1NjIyMywxNDU4LjczMjc1MzUzODI4NzYsNTA4LjI4NTc1MTAyMjU2NzksNTQ2LjY4ODQ1MDA4OTgwODQsMTQyLjI2NzkxNTg5MDc5NDIsMTY5NC4xNDQyMjAxODQ3Mzc0LDkxNzI0LjcyMjEzMzUwNzUyLDMzMjQuMDMyNDE0MTIxOTAyNSwxODIuMzYwNTAzOTY2NTA5NTgsMjM2LjIyMzkzMTE4NDIwNzI2LDE4My4wMTA4NzEwNTMxMDU3LDI3Njk2NS40MDM5ODYwODE1NCwxNDI0NS4wODUyNDY4NDcwNzgsMTA4LjQ2OTEyMzk2NjkyMDQ4LDMxNzM3Ny43Mzk4MzE3NDE1NSwyMTAzODAuMjQyOTU0ODk5OSwyMDIwLjI4MzkxNTI1MTc4MTUsNDYxLjQ4MzYzMDEwNDAxNDgsMjMuNzE4MDg2Njk0NDk5NTcsMTI4LjMzMTEzMDc3NzYyMjYKKzIyLFR1ZSAxNSBGZWIgMTEsMTQuOTgxMzk5MTg1NjMyOTQsOTkzLjgyMDkxODE5OTUxMiw2LjUwOTQxMzAzMzkyNzEwOCwxMi4wNjExNTQ3OTg1Mzg0NzgsMjE2LjU4OTM0MTkzOTE1OTA4LDIzNS42OTkzMDg5MjA1OTA5NCw2NjcxNC4wNzIzMzY1MjQwMywyNzkuMzI2NTk4MTI0MTY3NDUsMTgwLjY5OTU5OTUyMTA3NTgsMjE4LjAzNzY0NDE5ODUxNzU0LDQ3LjA1NTk1NjU5MzM5MTM5LDM0NS4xNTA0NTUxNDAxNTM2NywyMTg0MzQuNjM1OTY2NTQxNzcsMzcwLjA0OTYxMDY1NTQzODUsMTA5Ljg2NTcyMTk2MTI2NTA0LDIyNS4wNTQ1NDE3MzQxMjc4NCwxNjYuOTQ0NDgyNjc3NTk1NiwyNzQwMDMuMzY2NjQ4NzAxMiwxMjc4LjgwNjExNjE3NDQxOSw5Mi42NjczNTExNTQxMDcxOCw3MjczMDUuMTE1ODc1NjU3NiwyNDQ3NC41Mzc5MTE2ODY4NSwyOTAuMzA5MTc3NTQyMjM2NzQsMzIxLjc5OTYwODYyMTg5MDc0LDE5Ljc5MDE1ODIwNzUyODU0MiwxMy43NDg5OTI5NDkwMzQzMworMjMsV2VkIDE2IEZlYiAxMSwxMS4xODAzNDM0Njg4MjU4MSwxODMuMDgwNDYyMTU4MjU4NTcsNS42MTc2NDMzNjAzODIzMTcsMTEuMzIwMjQyMzE1MzM0NDE3LDI4LjM5MDM3MzMwNzI1NjYwNiwxOTEuODI5MDY0NzMwNzI4NSw1OTIxLjQ3NDYzNTg0MjQzMiwxNzkuMTcwOTc1NTIzNDYyMjMsMTQ4LjA4MTk0ODc4NDI5NDM4LDE4My45MTA4NTc1MTAxNzAyNSwzNy43NzM3Mzk1MTYxODIzMiwyMjkuMzI2MTAxMjgxNzc1NjYsMjcyOTU0Ljg5NzU5NjY1MTYzLDEzOC40OTk4MjU4MzM3MDcyLDEwMC4yNDE2MzI4NTE5MTUxMSwyMTYuOTE0Njk2ODc2NDA5ODMsMTYwLjQ0MjYxNTc0OTEyMDczLDk0MTg5LjI4NTI5Mzg3OTQ1LDIzNy41MzEzMTA5NTgzODgxNiw4OC40NzA0NTg4MzcyNjA2NSw4NDU3MDguMTg1ODkxNzY1OSwyMTEwLjA0NzkzMzg1ODE5NSwxNTAuMjczNDcwNTI4OTg4MTMsMjk5LjczOTA1MzM1Mzc4NjQ2LDE4Ljg0MDM1Mzg3NjQ5MDM4NiwxLjM4NTU5NzkzMjU1NDkzMTUKKzI0LFRodSAxNyBGZWIgMTEsMTAuNTA3NTUyOTU5MTUxMzU2LDM3LjE5NDE1MDAwNjk0NTAzLDUuMzY4NDUwOTY2NTk0NDQ0LDEwLjkwMDg1MjMyNDI4NjIxNCwxMy4zMzg4MjIyOTMwNzk3NTEsMTgyLjExOTA4OTUzNDUzOTE0LDY2Mi4zNTk1MjcwNzM3ODM2LDE2NC45OTY0OTE2MjQ5Njg2NiwxNDAuNzE5MTMyMzY1MDEyLDE3NS4zMzg2OTkyMzQ5Nzg0LDM1LjgwNzcxMzA5NzE0MjEwNiwyMTIuMjQ0MDUyMDExMTUwMTYsMTIzODgyLjA2ODIzNTE4OTM1LDExNS4wODMwMTQ1ODU4MzQwOSw5Ni4zNTEyMzUyODkwNDkxMSwyMDguMzE5MzU0ODE0MjQ4MzYsMTU0LjUyNDgxODA0NDgxMDMzLDEyNzQ2LjY1NzYxMjM1NjA0LDE0OC41NzIwNTA1NTgxMTg0LDg1LjI3MjcxMTI5MDc2OTMsMzUwOTY1LjYzNzMzNTA0MzM0LDMxMy45MTgwOTgyNzg2NDUyMywxMzMuNzIzMzkzNjAwMzUwMjUsMjg4LjYwNTY3MTA5MTkwOTM2LDE4LjE1OTE1NjU5MDgxOTcyLDAuMzUyMDYzMDg3NjIwOTE5OQorMjUsRnJpIDE4IEZlYiAxMSwxMC4xMzA0NzEwODI5OTU2NzgsMTMuOTQxMzMyMzY0ODMzMDEzLDUuMTc0MjIxOTgwOTc2ODc5LDEwLjQ4NjU5Mjg3MjQxMzcwNCwxMS42NTY2MDQ1NTE2NDE1NSwxNzUuNTM4MjcwNDYzNzU1NjIsMjQ5LjE5MTc1NjQyNTE0MjQ3LDE1OC43MjQ4MjAwNTc1MDExLDEzNS42MzgwOTY4MTk5NjEzNiwxNjkuMDA4MzAxMTQyNjQzNDYsMzQuNTEyODA5ODk4NjE2ODUsMjA0LjI2Mjk0NzYwNzM4NzE2LDIwNDQ1LjQ4OTQ5OTYwNjMsMTA5LjU0MDEyNDQ3MzA4MjA5LDkyLjc5MzU2NDg2ODczNDYsMTk4LjcwMjI2MTUzMDA3MjU4LDE0OC4wMTc3NDk0ODA1NTE2MywxMTE2LjgzNjE0NjU5MTkzMzgsMTM2LjI1NTQ5NjQ2OTU4Mjk0LDgxLjg1NDEwMTkxNzQ4MjAzLDU0MTQ1LjgzOTY2ODk1MTQxLDE2Ny43MjM1MjY0OTM0MzcwMiwxMjguMjIzNTk1MjczMzkyODcsMjc3LjczMjAzMzE3ODg2MjUsMTcuNDQwNzU5MzUyNzIzODc3LDAuMjU1NTM3Njk3NDUyMjM2NzYKKzI2LFNhdCAxOSBGZWIgMTEsOS43NDkxMTAxNDc2MjQwNzUsMTAuMzc5MTEzODE5NDA1MTIsNC45NjU4NTczMzAxOTYyMDYsMTAuMDI3NDMyMTM5MTE1MzE0LDExLjE1NjI5NjM1MTA4NzI5NSwxNjguNjU5NTcyMDQ1MzgzOTIsMjA3LjI4ODc4OTE3NDIxNDU3LDE1Mi44MTk4NjQ1MDMyMzExMiwxMzAuMzAzMjc1MjcxODMxOCwxNjIuMjc1NDYxNTUyMjE1NTcsMzMuMTY2MTMxNzA5NzYxNjg2LDE5Ni42MjQ5MzI0MjYwMTkzNywxODg4LjQyNTk2NzE2Nzg3NjMsMTA1LjU4NjU4MDk0Mjk4ODY4LDg4Ljg3MjkxNTcwODk0ODg4LDE4Ny45NTc4MTExODY0MTYyLDE0MC43MDk3NTU3NjIyNjA4NywxMzMuODQ4NDQzNDY2NjU2MzMsMTMxLjAyMzU5MDE2NDIyNjA1LDc4LjAxNTgxMTQ5Mjc5ODg1LDQ4OTQuMjAwMTY4MTMyMzY5LDE1MC4wNzYyNzY3MjczNzE3LDEyMy41NTAyNzgxMjg0NjY4MSwyNjUuNjQxOTM5MzI4MjU2LDE2LjYzNTMxNTkxMzgzMDI4NiwwLjIzOTA3Mjk3MjM0NzU5MTIzCisyNyxTdW4gMjAgRmViIDExLDkuMzIyNzUxNjg3Mzc4NjExLDkuNjA5NzM3NzI3NjQ0MzksNC43MzIwNjY4OTY2MjA0NDIsOS41MTYxNjg1NzIyMzM0NTYsMTAuNzUxODI1NDk1ODc1MjEzLDE2MC45NjUxNjI0NTk5MjI5NiwxOTcuMzI2ODc5MzU2MTQ1MjcsMTQ2LjI4OTgzNjAzMzUwMDI4LDEyNC4zMzEwMTAxMzY5NDMwNSwxNTQuNzI1MjkyMjI3MDY4NTQsMzEuNjYxNjIwNjg3OTM3MzM3LDE4OC4xNjAyOTA3MDkwMDI5NCwxODguNjAwNDYwODY2NDcwNDMsMTAxLjQwOTMyMzg0MTQ4MDc4LDg0LjQ2ODY4NTY0NzIxNjEsMTc2LjE1OTY5NzgzMzEzOTgsMTMyLjU4OTY5MzU5NTAzMTUyLDU2LjA0OTA2ODIzMjg4OTc1LDEyNi4xNzA4NjYxMTA0NTMyLDczLjczMDMxOTkyNjEyODYsNTEzLjc2OTA4Nzc1NTIxOTcsMTQzLjk4NDQ3NTAxMzQzMjM2LDExOC40NTkzMDY4MzIyNzU0NiwyNTIuMDc1MzQ1MTExOTA4NjYsMTUuNzM3NDQ3NTM0NDg4NTc2LDAuMjMwMjc2OTgyNzkzNjQ5MDgKKzI4LE1vbiAyMSBGZWIgMTEsOC44NDQ3NzMyODU3NjIyMjEsOS4yMzA2Njc2NDk5OTQxMzQsNC40NzEzMjI0MTA1ODM1OTEsOC45NTYzOTkzMjQ2ODM0NTEsMTAuMzE0NzMyODg1NTAyNDc2LDE1Mi4zNzkyNTYxMjEwODc1NiwxOTAuMjA1OTM3NDQ2NzgxOTcsMTM4Ljk2MjI4NDM0NzY3MjA0LDExNy42NjY0NzcyMTI4NDAwNSwxNDYuMjk5OTQwODYxMjExMiwyOS45ODQ5NDYzNzU5OTI5OCwxNzguNjY2NDUzMTU0ODM0NDQsNTYuNDA0MTkwOTA5MTIwNzg2LDk2LjcyNDU0MTk4MjE3Miw3OS41NzcwMDQyNTI1NjgxOSwxNjMuNDg0NTA1NTcwNDU2NSwxMjMuNzM0OTU4NTc0MTIxMTEsNDcuODE2MjQyMDQ3MDU0NzQsMTIwLjgxOTIxNjkwMDgyNTMxLDY5LjAyNzk1MDM5MDI5NTI2LDE3MS45NjQyOTIzMzU2ODkyLDEzOC43Mjk4ODUxOTE5ODUyLDExMi43NDAxNjU4ODA2NDAwNiwyMzcuMDU2NzA0NzY4NDI1MTMsMTQuNzU1MjkzMDQ5MTc0NTksMC4yMjE2NDcxNjczMzk0NDA0MworMjksVHVlIDIyIEZlYiAxMSw4LjMxNjM1NjI5ODIwNjExMSw4Ljg5NDExODI3Mzg2NzA2Nyw0LjE4NTMzODIxMjg2NDc0Nyw4LjM1MzQ5OTEzNTg0NjQxMyw5LjgyMzY0NDg1NjIwNTQ4LDE0Mi45NDEwODMwMDg5NjI3LDE4Mi42Nzg0NzA3OTkxODM2LDEzMC44MzQ4MjUyMjY4Nzg0MiwxMTAuMzQyMzQwMDcwODYxOTQsMTM3LjA0OTAxMzI5ODI1Mjk2LDI4LjE0MzAwNTM0Mzg3ODkxLDE2OC4xNDY1NTAxODA5MDY5LDQzLjk1OTgyMjQ5NzYyNTU4LDkxLjQ4NTkzOTI2OTQ2MzAyLDc0LjI0MzYxMTE4NDY2ODM4LDE1MC4xNTcwOTU4OTgzOTkzOCwxMTQuMjgyNDI4NTY2NDg5Myw0NS42NDYyODAxMjI4MjI4MTYsMTE0LjgxMTI2Nzk1NTk0Njc5LDYzLjk3MzIzMjI2ODc5NzE2LDEzOC42ODY5MjM2NjcwMjMyLDEzMi45OTIyNDM1OTQ1MTE0OCwxMDYuMzY5NTkyNjI3NTA0NjksMjIwLjc0NzU2MjI1NjYyODE2LDEzLjcwMTI5NDUzNTUzMTA2NywwLjIxMjA5OTYxNjM0NzgxNDY4CiszMCxXZWQgMjMgRmViIDExLDcuNzQxOTQ5NzI3NTQwNTk4LDguNTIyNjU1NzI5NDM5MzEsMy44NzczMTY1NDAxNjM0NTUsNy43MDE4NzUzNzY5NDU5ODgsOS4yNzU2MTY1NzUxNjI0MjQsMTMyLjY5ODM4Njk3ODk1MjM5LDE3NC4yMzI0OTQ1NDI1MDE5LDEyMS45NjM4NDY3NDEwNTA3LDEwMi40MDEwNTAwMDk4MDQxLDEyNy4wNTc3NzcwOTgyODgwMSwyNi4xMzYzOTIyNzEzNjEwMDcsMTU2LjY3MDQ3NjcyMzA4NTc4LDQxLjUzMTkwNjcwODg4MzY0LDg1LjcxNzc1MTE0MzI0NzQ0LDY4LjU0MjM4NDM0MTQ2Njc3LDEzNi4zNDg5ODAzMjAyNzg0OSwxMDQuNDAwOTA4MDUzNjI3NjYsNDMuOTk3Mzg2MTAyODQ2NzUsMTA4LjEyNzMwODM5NTIwNzQ5LDU4LjY0Njc0MzE3OTUwMzQyLDEzMS41NTc1MjQ5NTAyMjU5NywxMjYuNTM3MDkwNDk0MzE0OCw5OS4zOTEzNTUzNjU3NzIyOCwyMDMuMzg2NzQ5NTUzNjIyNjgsMTIuNTc4OTQwMjg2NTc0OTQ0LDAuMjAxMjQ3NTMxODA4ODQzNDQKKzMxLFRodSAyNCBGZWIgMTEsNy4xMzE5OTQ5NTcyNzI4MTcsOC4xMTQ5MjkzNzAwMDM3NDksMy41NTM1NzI3NzY0NTMzMDcsNy4wMjU4OTkyNjIyMzE5OTYsOC42NzQ3ODY4Mzk4NTUwOTMsMTIxLjg5MDM4MTk1MzkwMTU1LDE2NC43ODYzOTQyMDM1MDc4LDExMi41MTE5MTg4MzgxMTA3Miw5NC4wMjY1NTc5NDUwNzAyMSwxMTYuNTQwNzcwNjUyNjQwOTcsMjQuMDE4MzM5MDIzMzgwNjQ4LDE0NC40NTY2NzYxNjIzMjYyNiw0MC4wMjU1MzE2OTMxMzI2NTYsNzkuNTAwODM3OTU3NDExMzMsNjIuNTkzNDQzNzA5MTM4ODIsMTIyLjQ0NDI5MTE1NjIyNjUzLDk0LjMxODI5OTI4NjkzNDQsNDIuMjM0NTM4NDIwMDA4ODQsMTAwLjg0MzQ1NTI4NzY5NzY1LDUzLjE3MTk1ODUyODQxMDc5LDEyNi44MDM5MzI5NzE3Mjk5NCwxMTkuMzQ5NDUzNDc4MDg4ODYsOTEuOTE1NjkyMzI2MzUxMjUsMTg1LjM1MDI5NjY5MDY1ODg0LDExLjQyMzI5MjgxMzkwODIwMSwwLjE4OTI3Mzk4MzYwODc5ODgKKzMyLEZyaSAyNSBGZWIgMTEsNi40OTgwNzMyNDA1NDg0MSw3LjY1NjkzMjU5Mjk5MDYwMiwzLjIyMDY1ODQzNDE1OTQyNSw2LjMzMzI5Njk2NTIxNjU5NCw4LjAyOTcxNDEyNzIxODc4NSwxMTAuNzA4MDM2OTQwNTc3MjIsMTU0LjM5MjIyODU4NDg2OTc3LDEwMi42NTUxNTcxMTc2NjcxMyw4NS4zNjk2NDM3NjQwNjgxMiwxMDUuNzAyNTI1NDY5OTU3ODIsMjEuODIyMDIyMzM0MDQ5MzUsMTMxLjczMTAxNzkxNDQ4NTUsMzguNDc4MDY3NzA2MDMzNTYsNzIuOTQ1Nzc3NjA2NjUwMTQsNTYuNTIzMDcxMDUyMjE1NTg1LDEwOC43MDY5MjU0MTgwNDgwMyw4NC4yNTUxMDY3MDAyMjgwMSw0MC4yNTQ5NDk0NTYyMTY1Myw5My4wNjY2ODYwNDY3MjE0Myw0Ny42NjY2MDIwMjU4OTM0OSwxMjEuODQ2NDMzMjMxODA0MjgsMTExLjQ4NDMwNjg2OTA0NTk3LDg0LjA4MjIxNzk2NjU2Nzg0LDE2Ny4wMjQzMDM5OTc1NTg5MiwxMC4yNTMzMjc0MTIyOTczMzYsMC4xNzYxOTA2NjgzMjQzMDUzNgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Jbm9jdWxhdGlvblRlc3RfUktfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL1BvcHVsYXRpb24gQ291bnRfMC5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0lub2N1bGF0aW9uVGVzdF9SS19SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vUG9wdWxhdGlvbiBDb3VudF8wLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYzI0NDAxCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Jbm9jdWxhdGlvblRlc3RfUktfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL1BvcHVsYXRpb24gQ291bnRfMC5jc3YKQEAgLTAsMCArMSBAQAoraXRlcmF0aW9uLHRpbWUsCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0lub2N1bGF0aW9uVGVzdF9SS19SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vUG9wdWxhdGlvbiBDb3VudF8xLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvSW5vY3VsYXRpb25UZXN0X1JLX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9Qb3B1bGF0aW9uIENvdW50XzEuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJjMjQ0MDEKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0lub2N1bGF0aW9uVGVzdF9SS19SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vUG9wdWxhdGlvbiBDb3VudF8xLmNzdgpAQCAtMCwwICsxIEBACitpdGVyYXRpb24sdGltZSwKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvSW5vY3VsYXRpb25UZXN0X1JLX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9Qb3B1bGF0aW9uIENvdW50XzIuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Jbm9jdWxhdGlvblRlc3RfUktfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL1BvcHVsYXRpb24gQ291bnRfMi5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzEwYmY1NgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvSW5vY3VsYXRpb25UZXN0X1JLX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9Qb3B1bGF0aW9uIENvdW50XzIuY3N2CkBAIC0wLDAgKzEsMzMgQEAKK2l0ZXJhdGlvbix0aW1lLEVHLUZSRy1HMjEwMDAxLEVHLUZSRy1HMjEwMDAyLEVHLUZSRy1HMjEwMDAzLEVHLUZSRy1HMjEwMDA0LEVHLUZSRy1HMjEwMDA1LEVHLUxPRS1HMjQwMDAxLEVHLUxPRS1HMjQwMDAyLEVHLUxPRS1HMjQwMDAzLEVHLUxPRS1HMjQwMDA0LEVHLUxPRS1HMjQwMDA1LEVHLUxPRS1HMjQwMDA2LEVHLUxPRS1HMjQwMDA3LEVHLUxPRS1HMjQwMDA4LEVHLUxPRS1HMjQwMDA5LEVHLVVQRS1HMjkwMDAxLEVHLVVQRS1HMjkwMDAyLEVHLVVQRS1HMjkwMDAzLEVHLVVQRS1HMjkwMDA0LEVHLVVQRS1HMjkwMDA1LEVHLVVQRS1HMjkwMDA2LEVHLVVQRS1HMjkwMDA3LEVHLVVQRS1HMjkwMDA4LEVHLVVSRy1HMzAwMDAxLEVHLVVSRy1HMzAwMDAyLEVHLVVSRy1HMzAwMDAzLEVHLVVSRy1HMzAwMDA0CisxLFR1ZSAyNSBKYW4gMTEsMjk3MjM3LjQwMzQ1MzgwMTUsMjY1Mzg5LjYwMzQxODU3MTc2LDE1NDQ3OC4zNTA0MTEyNjcyNSwzMTkzNDcuMzI3NjM2OTEzMTYsMzIxODk4Ljg5ODkxMzc3NDIsNTIwMzYyMS44NzkzMTM4OTUsNTY1NDc3MC41MDU0MTM5MTMsNDYzNDYyNC41MDY1NjkwOSw0MDI1NjM5LjA4NjA2MzcwNDUsNTAzMzA2Mi40ODUxMzQ4MzksMTAyMjA2Ni45ODA0NTc1MjUsNTk3NDgxNC45MDY2MDkyOSwxMTgyNDUwLjMwOTQ4MTA5MzQsMzEzODk1MC40MzkwNDkyMDM0LDI4MDU2NDkuNTUyMjYyMjM5Niw2NDQwNjE0LjE2NTQxNzgyMiw0NjY1OTcwLjY1NTQwMTg0MiwxMzEyMjQzLjk5NTgwMjU1NDgsMzgxOTIyNS43MzM1NTE3MTgzLDI1NDM0OTcuNTEzMDI5OTQyLDM3NTc1NDMuNzg5NjEzMjk0NCw0MTcyNjU3LjEzNzY2ODY0MiwzNzExOTU2Ljk5MjA4NjkwNCw4NDYxMzI1LjY0ODkwMzExNyw1Mzk1OTMuMzU5NDkxMTI0NCw2NzU2LjE3MzkyNTc0Mjg1NAorMixXZWQgMjYgSmFuIDExLDI5NzIzOC41OTI0MDU3OTMzLDI2NTM5MC42NjQ5NzkxMDg2LDE1NDQ3OC45NjgzMjU5MDQ3MiwzMTkzNDguNjA1MDI4Nzc4NTUsMzIxOTAwLjE4NjUxMTk0NTA0LDUyMDM2NDIuNjkzODQzMDQyLDU2NTQ3OTMuMTI0NTQxMTc0LDQ2MzQ2NDMuMDQ1MTA0MTkzNSw0MDI1NjU1LjE4ODY1MjI1NCw1MDMzMDgyLjYxNzQyNTA0MywxMDIyMDcxLjA2ODczMzYyMzQsNTk3NDgzOC44MDU5MTY3MTUsMTE4MjQ1NS4wMzkyOTE3OTEyLDMxMzg5NjIuOTk0ODc2MDcyMywyODA1NjYwLjc3NDg4Mjg5NDUsNjQ0MDYzOS45Mjc5MjYwMDgsNDY2NTk4OS4zMTkzMjE3OTIsMTMxMjI0OS4yNDQ3ODkwMzYyLDM4MTkyNDEuMDEwNDg1MjA0LDI1NDM1MDcuNjg3MDQwMzQxNiwzNzU3NTU4LjgxOTgxODUxNDQsNDE3MjY3My44MjgzMzA1NzQsMzcxMTk3MS44Mzk5NDQ1NjksODQ2MTM1OS40OTQyNzM0MDYsNTM5NTk1LjUxNzg2ODg3OTMsNjc1Ni4yMDA5NTA0OTI2MDgKKzMsVGh1IDI3IEphbiAxMSwyOTcyMzkuNzgxMzYyNTQwOCwyNjUzOTEuNzI2NTQzODkxNjUsMTU0NDc5LjU4NjI0MzAxMzgyLDMxOTM0OS44ODI0MjU3NTM0LDMyMTkwMS40NzQxMTUyNjY0LDUyMDM2NjMuNTA4NDU1NDQ2LDU2NTQ4MTUuNzQzNzU4OTEsNDYzNDY2MS41ODM3MTM0NTA1LDQwMjU2NzEuMjkxMzA1MjEzNyw1MDMzMTAyLjc0OTc5NTc3OCwxMDIyMDc1LjE1NzAyNjA3NSw1OTc0ODYyLjcwNTMxOTczOSwxMTgyNDU5Ljc2OTEyMTQwOCwzMTM4OTc1LjU1MDc1MzE2MywyODA1NjcxLjk5NzU0ODQzOTUsNjQ0MDY2NS42OTA1MzcyNDQsNDY2NjAwNy45ODMzMTYzOTcsMTMxMjI1NC40OTM3OTY1MTM0LDM4MTkyNTYuMjg3NDc5OCwyNTQzNTE3Ljg2MTA5MTQzNzMsMzc1NzU3My44NTAwODM4NTMsNDE3MjY5MC41MTkwNTkyNjk3LDM3MTE5ODYuNjg3ODYxNjI0Niw4NDYxMzkzLjMzOTc3OTA3Miw1Mzk1OTcuNjc2MjU1MjY3Niw2NzU2LjIyNzk3NTM1MDQ2MworNCxGcmkgMjggSmFuIDExLDI5NzI0MC45NzAzMjQwNDQzLDI2NTM5Mi43ODgxMTI5MjA5NCwxNTQ0ODAuMjA0MTYyNTk0NjYsMzE5MzUxLjE1OTgyNzgzNzg0LDMyMTkwMi43NjE3MjM3MzgwNSw1MjAzNjg0LjMyMzE1MTEwOSw1NjU0ODM4LjM2MzA2NzEyMyw0NjM0NjgwLjEyMjM5Njg2MSw0MDI1Njg3LjM5NDAyMjU4NCw1MDMzMTIyLjg4MjI0NzA0MywxMDIyMDc5LjI0NTMzNDg3OTcsNTk3NDg4Ni42MDQ4MTgzNTksMTE4MjQ2NC40OTg5Njk5NDQyLDMxMzg5ODguMTA2NjgwNDc4NCwyODA1NjgzLjIyMDI1ODg3Niw2NDQwNjkxLjQ1MzI1MTUzNCw0NjY2MDI2LjY0NzM4NTY2MSwxMzEyMjU5Ljc0MjgyNDk4NjYsMzgxOTI3MS41NjQ1MzU1MDMzLDI1NDM1MjguMDM1MTgzMjI5NSwzNzU3NTg4Ljg4MDQwOTMxNDgsNDE3MjcwNy4yMDk4NTQ3MjY3LDM3MTIwMDEuNTM1ODM4MDcxMyw4NDYxNDI3LjE4NTQyMDEyMiw1Mzk1OTkuODM0NjUwMjg5Myw2NzU2LjI1NTAwMDMxNjQxMgorNSxTYXQgMjkgSmFuIDExLDI5NzI0Mi4xNTkyOTAzMDM0LDI2NTM5My44NDk2ODYxOTY1NCwxNTQ0ODAuODIyMDg0NjQ3MTQsMzE5MzUyLjQzNzIzNTAzMjAzLDMyMTkwNC4wNDkzMzczNjAxMyw1MjAzNzA1LjEzNzkzMDAzMSw1NjU0ODYwLjk4MjQ2NTgxNiw0NjM0Njk4LjY2MTE1NDQyODUsNDAyNTcwMy40OTY4MDQzNjUsNTAzMzE0My4wMTQ3Nzg4MzcsMTAyMjA4My4zMzM2NjAwMzc3LDU5NzQ5MTAuNTA0NDEyNTc4LDExODI0NjkuMjI4ODM3NCwzMTM5MDAwLjY2MjY1ODAxNjcsMjgwNTY5NC40NDMwMTQyMDI2LDY0NDA3MTcuMjE2MDY4ODcxLDQ2NjYwNDUuMzExNTI5NTc3LDEzMTIyNjQuOTkxODc0NDU2LDM4MTkyODYuODQxNjUyMzE2NSwyNTQzNTM4LjIwOTMxNTcxOCwzNzU3NjAzLjkxMDc5NDg5NjUsNDE3MjcyMy45MDA3MTY5NDksMzcxMjAxNi4zODM4NzM5MDksODQ2MTQ2MS4wMzExOTY1NTcsNTM5NjAxLjk5MzA1Mzk0NDcsNjc1Ni4yODIwMjUzOTA0NjQKKzYsU3VuIDMwIEphbiAxMSwyOTcyNDMuMzQ4MjYxMzE4NiwyNjUzOTQuOTExMjYzNzE4NSwxNTQ0ODEuNDQwMDA5MTcxMzIsMzE5MzUzLjcxNDY0NzMzNTgsMzIxOTA1LjMzNjk1NjEzMjcsNTIwMzcyNS45NTI3OTIyMTIsNTY1NDg4My42MDE5NTQ5ODUsNDYzNDcxNy4xOTk5ODYxNSw0MDI1NzE5LjU5OTY1MDU1OCw1MDMzMTYzLjE0NzM5MTE2LDEwMjIwODcuNDIyMDAxNTQ5Myw1OTc0OTM0LjQwNDEwMjM5NywxMTgyNDczLjk1ODcyMzc3NTMsMzEzOTAxMy4yMTg2ODU3NzksMjgwNTcwNS42NjU4MTQ0Miw2NDQwNzQyLjk3ODk4OTI2Miw0NjY2MDYzLjk3NTc0ODE1MSwxMzEyMjcwLjI0MDk0NDkyMTMsMzgxOTMwMi4xMTg4MzAyMzc1LDI1NDM1NDguMzgzNDg4OTA0LDM3NTc2MTguOTQxMjQwNjAxMiw0MTcyNzQwLjU5MTY0NTkzMzcsMzcxMjAzMS4yMzE5NjkxNCw4NDYxNDk0Ljg3NzEwODM3Myw1Mzk2MDQuMTUxNDY2MjMzNyw2NzU2LjMwOTA1MDU3MjYxNQorNyxNb24gMzEgSmFuIDExLDI5NzI0NC41MzcyMzcwODk2LDI2NTM5NS45NzI4NDU0ODY2NiwxNTQ0ODIuMDU3OTM2MTY3MTcsMzE5MzU0Ljk5MjA2NDc0OTI0LDMyMTkwNi42MjQ1ODAwNTU5LDUyMDM3NDYuNzY3NzM3NjUzLDU2NTQ5MDYuMjIxNTM0NjMsNDYzNDczNS43Mzg4OTIwMjgsNDAyNTczNS43MDI1NjExNjIsNTAzMzE4My4yODAwODQwMTQsMTAyMjA5MS41MTAzNTk0MTQsNTk3NDk1OC4zMDM4ODc4MTMsMTE4MjQ3OC42ODg2MjkwNjk2LDMxMzkwMjUuNzc0NzYzNzY2NywyODA1NzE2Ljg4ODY1OTUyOTQsNjQ0MDc2OC43NDIwMTI3MDQsNDY2NjA4Mi42NDAwNDEzODIsMTMxMjI3NS40OTAwMzYzODM3LDM4MTkzMTcuMzk2MDY5MjY3OCwyNTQzNTU4LjU1NzcwMjc4NywzNzU3NjMzLjk3MTc0NjQyOCw0MTcyNzU3LjI4MjY0MTY4MSwzNzEyMDQ2LjA4MDEyMzc2NDUsODQ2MTUyOC43MjMxNTU1NzcsNTM5NjA2LjMwOTg4NzE1NjQsNjc1Ni4zMzYwNzU4NjI4NjkKKzgsVHVlIDEgRmViIDExLDI5NzI0NS43MjYyMTc2MTY0NywyNjUzOTcuMDM0NDMxNTAxMjMsMTU0NDgyLjY3NTg2NTYzNDc4LDMxOTM1Ni4yNjk0ODcyNzIyNSwzMjE5MDcuOTEyMjA5MTI5NSw1MjAzNzY3LjU4Mjc2NjM1NCw1NjU0OTI4Ljg0MTIwNDc1Nyw0NjM0NzU0LjI3Nzg3MjA2Miw0MDI1NzUxLjgwNTUzNjE3NzUsNTAzMzIwMy40MTI4NTczOTksMTAyMjA5NS41OTg3MzM2MzI1LDU5NzQ5ODIuMjAzNzY4ODMsMTE4MjQ4My40MTg1NTMyODQxLDMxMzkwMzguMzMwODkxOTc4NSwyODA1NzI4LjExMTU0OTUyOTIsNjQ0MDc5NC41MDUxMzkxOTYsNDY2NjEwMS4zMDQ0MDkyNzEsMTMxMjI4MC43MzkxNDg4NDE1LDM4MTkzMzIuNjczMzY5NDA1MywyNTQzNTY4LjczMTk1NzM2NjcsMzc1NzY0OS4wMDIzMTIzNzU3LDQxNzI3NzMuOTczNzA0MTk0LDM3MTIwNjAuOTI4MzM3NzgxNyw4NDYxNTYyLjU2OTMzODE2MSw1Mzk2MDguNDY4MzE2NzEyOCw2NzU2LjM2MzEwMTI2MTIyMworOSxXZWQgMiBGZWIgMTEsMjk3MjQ2LjkxNTIwMjg5OTM3LDI2NTM5OC4wOTYwMjE3NjIyMywxNTQ0ODMuMjkzNzk3NTc0MTIsMzE5MzU3LjU0NjkxNDkwNTEsMzIxOTA5LjE5OTg0MzM1MzY1LDUyMDM3ODguMzk3ODc4MzE2LDU2NTQ5NTEuNDYwOTY1MzYzLDQ2MzQ3NzIuODE2OTI2MjUxLDQwMjU3NjcuOTA4NTc1NjA2LDUwMzMyMjMuNTQ1NzExMzE3LDEwMjIwOTkuNjg3MTI0MjA0MSw1OTc1MDA2LjEwMzc0NTQ0NSwxMTgyNDg4LjE0ODQ5NjQxOCwzMTM5MDUwLjg4NzA3MDQxNDYsMjgwNTczOS4zMzQ0ODQ0MjA3LDY0NDA4MjAuMjY4MzY4NzQ0LDQ2NjYxMTkuOTY4ODUxODE4LDEzMTIyODUuOTg4MjgyMjk2NiwzODE5MzQ3Ljk1MDczMDY1MywyNTQzNTc4LjkwNjI1MjY0MjYsMzc1NzY2NC4wMzI5Mzg0NDYsNDE3Mjc5MC42NjQ4MzM0NzE2LDM3MTIwNzUuNzc2NjExMTksODQ2MTU5Ni40MTU2NTYxMzQsNTM5NjEwLjYyNjc1NDkwMjksNjc1Ni4zOTAxMjY3Njc2NzgKKzEwLFRodSAzIEZlYiAxMSwyOTcyNDguMTA0MTkyOTM4MiwyNjUzOTkuMTU3NjE2MjY5NCwxNTQ0ODMuOTExNzMxOTg1MTYsMzE5MzU4LjgyNDM0NzY0NzUsMzIxOTEwLjQ4NzQ4MjcyODMsNTIwMzgwOS4yMTMwNzM1MzksNTY1NDk3NC4wODA4MTY0NDYsNDYzNDc5MS4zNTYwNTQ1OTgsNDAyNTc4NC4wMTE2Nzk0NDU0LDUwMzMyNDMuNjc4NjQ1NzY2LDEwMjIxMDMuNzc1NTMxMTI5NCw1OTc1MDMwLjAwMzgxNzY2LDExODI0OTIuODc4NDU4NDcxNywzMTM5MDYzLjQ0MzI5OTA3NSwyODA1NzUwLjU1NzQ2NDIwNDMsNjQ0MDg0Ni4wMzE3MDEzNDUsNDY2NjEzOC42MzMzNjkwMjEsMTMxMjI5MS4yMzc0MzY3NDgsMzgxOTM2My4yMjgxNTMwMTEzLDI1NDM1ODkuMDgwNTg4NjE3LDM3NTc2NzkuMDYzNjI0NjM5LDQxNzI4MDcuMzU2MDI5NTEzLDM3MTIwOTAuNjI0OTQzOTkzNSw4NDYxNjMwLjI2MjEwOTQ4OCw1Mzk2MTIuNzg1MjAxNzI2OCw2NzU2LjQxNzE1MjM4MjIzOAorMTEsRnJpIDQgRmViIDExLDI5NzI0OS4yOTMxODc3MzMsMjY1NDAwLjIxOTIxNTAyMzIsMTU0NDg0LjUyOTY2ODg2OCwzMTkzNjAuMTAxNzg1NDk5OCwzMjE5MTEuNzc1MTI3MjUzNDQsNTIwMzgzMC4wMjgzNTIwMjEsNTY1NDk5Ni43MDA3NTgwMSw0NjM0ODA5Ljg5NTI1NzEsNDAyNTgwMC4xMTQ4NDc2OTgyLDUwMzMyNjMuODExNjYwNzQ1LDEwMjIxMDcuODYzOTU0NDA4Myw1OTc1MDUzLjkwMzk4NTQ3NSwxMTgyNDk3LjYwODQzOTQ0NTUsMzEzOTA3NS45OTk1Nzc5NjEsMjgwNTc2MS43ODA0ODg4ODA0LDY0NDA4NzEuNzk1MTM2OTk4LDQ2NjYxNTcuMjk3OTYwODg0LDEzMTIyOTYuNDg2NjEyMTk2LDM4MTkzNzguNTA1NjM2NDc4MywyNTQzNTk5LjI1NDk2NTI4NywzNzU3Njk0LjA5NDM3MDk1NSw0MTcyODI0LjA0NzI5MjMxOTYsMzcxMjEwNS40NzMzMzYxOSw4NDYxNjY0LjEwODY5ODIzLDUzOTYxNC45NDM2NTcxODQ1LDY3NTYuNDQ0MTc4MTA0OTAxCisxMixTYXQgNSBGZWIgMTEsMjk3MjUwLjQ4MjE4NzI4MzgsMjY1NDAxLjI4MDgxODAyMzI1LDE1NDQ4NS4xNDc2MDgyMjI1LDMxOTM2MS4zNzkyMjg0NjE3NywzMjE5MTMuMDYyNzc2OTI5NCw1MjAzODUwLjg0MzcxMzc2Niw1NjU1MDE5LjMyMDc5MDA1Myw0NjM0ODI4LjQzNDUzMzc2LDQwMjU4MTYuMjE4MDgwMzYzNyw1MDMzMjgzLjk0NDc1NjI1OSwxMDIyMTExLjk1MjM5NDA0MTMsNTk3NTA3Ny44MDQyNDg4OTMsMTE4MjUwMi4zMzg0MzkzMzkzLDMxMzkwODguNTU1OTA3MDczLDI4MDU3NzMuMDAzNTU4NDQ4NSw2NDQwODk3LjU1ODY3NTcwNyw0NjY2MTc1Ljk2MjYyNzQwNCwxMzEyMzAxLjczNTgwODY0MSwzODE5MzkzLjc4MzE4MTA1NDUsMjU0MzYwOS40MjkzODI2NTY3LDM3NTc3MDkuMTI1MTc3Mzk1LDQxNzI4NDAuNzM4NjIxODkzMywzNzEyMTIwLjMyMTc4Nzc3OTcsODQ2MTY5Ny45NTU0MjIzNTksNTM5NjE3LjEwMjEyMTI3NjEsNjc1Ni40NzEyMDM5MzU2NjQKKzEzLFN1biA2IEZlYiAxMSwyOTcyNTEuNjcxMTkxNTkwNiwyNjU0MDIuMzQyNDI1MjY5ODMsMTU0NDg1Ljc2NTU1MDA0ODgyLDMxOTM2Mi42NTY2NzY1MzM2MywzMjE5MTQuMzUwNDMxNzU1OCw1MjAzODcxLjY1OTE1ODc3Myw1NjU1MDQxLjk0MDkxMjU3NSw0NjM0ODQ2Ljk3Mzg4NDU3OCw0MDI1ODMyLjMyMTM3NzQ0Miw1MDMzMzA0LjA3NzkzMjMwNSwxMDIyMTE2LjA0MDg1MDAyNzcsNTk3NTEwMS43MDQ2MDc5MTA1LDExODI1MDcuMDY4NDU4MTUzMiwzMTM5MTAxLjExMjI4NjQxLDI4MDU3ODQuMjI2NjcyOTA5LDY0NDA5MjMuMzIyMzE3NDcsNDY2NjE5NC42MjczNjg1ODMsMTMxMjMwNi45ODUwMjYwODI1LDM4MTk0MDkuMDYwNzg2NzQyMywyNTQzNjE5LjYwMzg0MDcyMywzNzU3NzI0LjE1NjA0Mzk1Niw0MTcyODU3LjQzMDAxODIzMSwzNzEyMTM1LjE3MDI5ODc2MzYsODQ2MTczMS44MDIyODE4NzUsNTM5NjE5LjI2MDU5NDAwMTUsNjc1Ni40OTgyMjk4NzQ1MzEKKzE0LE1vbiA3IEZlYiAxMSwyOTcyNTIuODYwMjAwNjUzNCwyNjU0MDMuNDA0MDM2NzYyNywxNTQ0ODYuMzgzNDk0MzQ2OTMsMzE5MzYzLjkzNDEyOTcxNTI2LDMyMTkxNS42MzgwOTE3MzI4Niw1MjAzODkyLjQ3NDY4NzAzOSw1NjU1MDY0LjU2MTEyNTU3OSw0NjM0ODY1LjUxMzMwOTU1MSw0MDI1ODQ4LjQyNDczODkzNSw1MDMzMzI0LjIxMTE4ODg4MzUsMTAyMjEyMC4xMjkzMjIzNjgxLDU5NzUxMjUuNjA1MDYyNTMsMTE4MjUxMS43OTg0OTU4ODcsMzEzOTExMy42Njg3MTU5NzE1LDI4MDU3OTUuNDQ5ODMyMjYyLDY0NDA5NDkuMDg2MDYyMjg3LDQ2NjYyMTMuMjkyMTg0NDIzLDEzMTIzMTIuMjM0MjY0NTIwNSwzODE5NDI0LjMzODQ1MzU0LDI1NDM2MjkuNzc4MzM5NDg2NiwzNzU3NzM5LjE4Njk3MDY0MDQsNDE3Mjg3NC4xMjE0ODEzMzQzLDM3MTIxNTAuMDE4ODY5MTQwNyw4NDYxNzY1LjY0OTI3Njc4LDUzOTYyMS40MTkwNzUzNjA5LDY3NTYuNTI1MjU1OTIxNTAwNQorMTUsVHVlIDggRmViIDExLDI5NzI1NC4wNDkyMTQ0NzIyLDI2NTQwNC40NjU2NTI1MDIxLDE1NDQ4Ny4wMDE0NDExMTY4LDMxOTM2NS4yMTE1ODgwMDY2NCwzMjE5MTYuOTI1NzU2ODYwNSw1MjAzOTEzLjI5MDI5ODU2OSw1NjU1MDg3LjE4MTQyOTA2NSw0NjM0ODg0LjA1MjgwODY4Myw0MDI1ODY0LjUyODE2NDg0MSw1MDMzMzQ0LjM0NDUyNTk5NiwxMDIyMTI0LjIxNzgxMTA2MjUsNTk3NTE0OS41MDU2MTI3NTE1LDExODI1MTYuNTI4NTUyNTQxNSwzMTM5MTI2LjIyNTE5NTc1ODUsMjgwNTgwNi42NzMwMzY1MDczLDY0NDA5NzQuODQ5OTEwMTU5LDQ2NjYyMzEuOTU3MDc0OTIxLDEzMTIzMTcuNDgzNTIzOTU2MywzODE5NDM5LjYxNjE4MTQ0OTUsMjU0MzYzOS45NTI4Nzg5NDg4LDM3NTc3NTQuMjE3OTU3NDUsNDE3Mjg5MC44MTMwMTEyMDM0LDM3MTIxNjQuODY3NDk4OTEyLDg0NjE3OTkuNDk2NDA3MDcxLDUzOTYyMy41Nzc1NjUzNTQxLDY3NTYuNTUyMjgyMDc2NTc1NQorMTYsV2VkIDkgRmViIDExLDI5NzI1NS4yMzgyMzMwNDcxMywyNjU0MDUuNTI3MjcyNDg3OSwxNTQ0ODcuNjE5MzkwMzU4NDgsMzE5MzY2LjQ4OTA1MTQwOCwzMjE5MTguMjEzNDI3MTM4OSw1MjAzOTM0LjEwNTk5MzM2Miw1NjU1MTA5LjgwMTgyMzAzMyw0NjM0OTAyLjU5MjM4MTk3NSw0MDI1ODgwLjYzMTY1NTE2MDMsNTAzMzM2NC40Nzc5NDM2MzksMTAyMjEyOC4zMDYzMTYxMTA3LDU5NzUxNzMuNDA2MjU4NTc0LDExODI1MjEuMjU4NjI4MTE1OCwzMTM5MTM4Ljc4MTcyNTc3MzYsMjgwNTgxNy44OTYyODU2NDYsNjQ0MTAwMC42MTM4NjEwODUsNDY2NjI1MC42MjIwNDAwNzksMTMxMjMyMi43MzI4MDQzODg1LDM4MTk0NTQuODkzOTcwNDcsMjU0MzY1MC4xMjc0NTkxMDk4LDM3NTc3NjkuMjQ5MDA0Mzg0NSw0MTcyOTA3LjUwNDYwNzgzOCwzNzEyMTc5LjcxNjE4ODA3OSw4NDYxODMzLjM0MzY3Mjc0OSw1Mzk2MjUuNzM2MDYzOTgxMiw2NzU2LjU3OTMwODMzOTc1NgorMTcsVGh1IDEwIEZlYiAxMSwyOTcyNTYuNDI3MjU2Mzc4MSwyNjU0MDYuNTg4ODk2NzIwMywxNTQ0ODguMjM3MzQyMDcxOTUsMzE5MzY3Ljc2NjUxOTkxOTE1LDMyMTkxOS41MDExMDI1Njc5NCw1MjAzOTU0LjkyMTc3MTQxNyw1NjU1MTMyLjQyMjMwNzQ4Miw0NjM0OTIxLjEzMjAyOTQyMzUsNDAyNTg5Ni43MzUyMDk4OTQ0LDUwMzMzODQuNjExNDQxODIxLDEwMjIxMzIuMzk0ODM3NTEyOSw1OTc1MTk3LjMwNzAwMDAwMiwxMTgyNTI1Ljk4ODcyMjYxMDUsMzEzOTE1MS4zMzgzMDYwMTM1LDI4MDU4MjkuMTE5NTc5Njc4LDY0NDEwMjYuMzc3OTE1MDY5LDQ2NjYyNjkuMjg3MDc5ODk3LDEzMTIzMjcuOTgyMTA1ODE4LDM4MTk0NzAuMTcxODIwNjAxLDI1NDM2NjAuMzAyMDc5OTY4NiwzNzU3Nzg0LjI4MDExMTQ0MzcsNDE3MjkyNC4xOTYyNzEyNCwzNzEyMTk0LjU2NDkzNjY0Miw4NDYxODY3LjE5MTA3MzgxOCw1Mzk2MjcuODk0NTcxMjQyNSw2NzU2LjYwNjMzNDcxMTA0MgorMTgsRnJpIDExIEZlYiAxMSwyOTcyNTcuNjE2Mjg0NDY1MiwyNjU0MDcuNjUwNTI1MTk5MTMsMTU0NDg4Ljg1NTI5NjI1NzE4LDMxOTM2OS4wNDM5OTM1NDAyLDMyMTkyMC43ODg3ODMxNDc4LDUyMDM5NzUuNzM3NjMyNzM4LDU2NTUxNTUuMDQyODgyNDE1LDQ2MzQ5MzkuNjcxNzUxMDMsNDAyNTkxMi44Mzg4MjkwNDI0LDUwMzM0MDQuNzQ1MDIwNTMxLDEwMjIxMzYuNDgzMzc1MjY5Nyw1OTc1MjIxLjIwNzgzNzAzLDExODI1MzAuNzE4ODM2MDI1NiwzMTM5MTYzLjg5NDkzNjQ3OTYsMjgwNTg0MC4zNDI5MTg2MDMsNjQ0MTA1Mi4xNDIwNzIxMDk1LDQ2NjYyODcuOTUyMTk0Mzc1LDEzMTIzMzMuMjMxNDI4MjQ1LDM4MTk0ODUuNDQ5NzMxODQzNSwyNTQzNjcwLjQ3Njc0MTUyNjMsMzc1Nzc5OS4zMTEyNzg2MjU0LDQxNzI5NDAuODg4MDAxNDA3NSwzNzEyMjA5LjQxMzc0NDU5OTYsODQ2MTkwMS4wMzg2MTAyNzgsNTM5NjMwLjA1MzA4NzEzNzgsNjc1Ni42MzMzNjExOTA0MzQKKzE5LFNhdCAxMiBGZWIgMTEsMjk3MjU4LjgwNTMxNzMwODQ2LDI2NTQwOC43MTIxNTc5MjQ1NCwxNTQ0ODkuNDczMjUyOTE0MzIsMzE5MzcwLjMyMTQ3MjI3MTEsMzIxOTIyLjA3NjQ2ODg3ODI1LDUyMDM5OTYuNTUzNTc3MzIxLDU2NTUxNzcuNjYzNTQ3ODI4LDQ2MzQ5NTguMjExNTQ2Nzk1LDQwMjU5MjguOTQyNTEyNjA1Myw1MDMzNDI0Ljg3ODY3OTc4LDEwMjIxNDAuNTcxOTI5MzgwMiw1OTc1MjQ1LjEwODc2OTY2NCwxMTgyNTM1LjQ0ODk2ODM2MSwzMTM5MTc2LjQ1MTYxNzE3MiwyODA1ODUxLjU2NjMwMjQyMSw2NDQxMDc3LjkwNjMzMjIwNiw0NjY2MzA2LjYxNzM4MzUxNDUsMTMxMjMzOC40ODA3NzE2Njk0LDM4MTk1MDAuNzI3NzA0MTk5LDI1NDM2ODAuNjUxNDQzNzgyMywzNzU3ODE0LjM0MjUwNTkzMyw0MTcyOTU3LjU3OTc5ODM0MywzNzEyMjI0LjI2MjYxMTk1MjYsODQ2MTkzNC44ODYyODIxMjcsNTM5NjMyLjIxMTYxMTY2NzIsNjc1Ni42NjAzODc3Nzc5MzQKKzIwLFN1biAxMyBGZWIgMTEsMjk3MjU5Ljk5NDM1NDkwNzcsMjY1NDA5Ljc3Mzc5NDg5NjUsMTU0NDkwLjA5MTIxMjA0MzI1LDMxOTM3MS41OTg5NTYxMTIwNSwzMjE5MjMuMzY0MTU5NzU5NTQsNTIwNDAxNy4zNjk2MDUxNjgsNTY1NTIwMC4yODQzMDM3MjMsNDYzNDk3Ni43NTE0MTY3MjIsNDAyNTk0NS4wNDYyNjA1ODIzLDUwMzM0NDUuMDEyNDE5NTYyLDEwMjIxNDQuNjYwNDk5ODQ1LDU5NzUyNjkuMDA5Nzk3OTAxLDExODI1NDAuMTc5MTE5NjE3LDMxMzkxODkuMDA4MzQ4MDkxNSwyODA1ODYyLjc4OTczMTEzMyw2NDQxMTAzLjY3MDY5NTM2MSw0NjY2MzI1LjI4MjY0NzMxNCwxMzEyMzQzLjczMDEzNjA5MTQsMzgxOTUxNi4wMDU3Mzc2NjYsMjU0MzY5MC44MjYxODY3MzcsMzc1NzgyOS4zNzM3OTMzNjYsNDE3Mjk3NC4yNzE2NjIwNDc2LDM3MTIyMzkuMTExNTM4NzAxLDg0NjE5NjguNzM0MDg5MzcsNTM5NjM0LjM3MDE0NDgzMDgsNjc1Ni42ODc0MTQ0NzM1Mzc1CisyMSxNb24gMTQgRmViIDExLDI5NzI2MS4xODMzOTcyNjMwNiwyNjU0MTAuODM1NDM2MTE0OSwxNTQ0OTAuNzA5MTczNjQ0MDIsMzE5MzcyLjg3NjQ0NTA2MywzMjE5MjQuNjUxODU1NzkxNiw1MjA0MDM4LjE4NTcxNjI3OSw1NjU1MjIyLjkwNTE1MDEwMTUsNDYzNDk5NS4yOTEzNjA4MDgsNDAyNTk2MS4xNTAwNzI5NzYsNTAzMzQ2NS4xNDYyMzk4NzgsMTAyMjE0OC43NDkwODY2NjQzLDU5NzUyOTIuOTEwOTIxNzQzLDExODI1NDQuOTA5Mjg5Nzk0NSwzMTM5MjAxLjU2NTEyOTIzODYsMjgwNTg3NC4wMTMyMDQ3Mzk0LDY0NDExMjkuNDM1MTYxNTc1LDQ2NjYzNDMuOTQ3OTg1Nzc0LDEzMTIzNDguOTc5NTIxNTEwNywzODE5NTMxLjI4MzgzMjI0NDYsMjU0MzcwMS4wMDA5NzAzOTE2LDM3NTc4NDQuNDA1MTQwOTI0Myw0MTcyOTkwLjk2MzU5MjUxOCwzNzEyMjUzLjk2MDUyNDg0Niw4NDYyMDAyLjU4MjAzMjAwNCw1Mzk2MzYuNTI4Njg2NjI4NCw2NzU2LjcxNDQ0MTI3NzI1CisyMixUdWUgMTUgRmViIDExLDI5NzI2Mi4zNzI0NDQzNzQ4NCwyNjU0MTEuODk3MDgxNTgsMTU0NDkxLjMyNzEzNzcxNjY0LDMxOTM3NC4xNTM5MzkxMjM4LDMyMTkyNS45Mzk1NTY5NzQ0LDUyMDQwNTkuMDAxOTEwNjU1LDU2NTUyNDUuNTI2MDg2OTY1LDQ2MzUwMTMuODMxMzc5MDUzLDQwMjU5NzcuMjUzOTQ5NzgyMyw1MDMzNDg1LjI4MDE0MDczLDEwMjIxNTIuODM3Njg5ODM3Nyw1OTc1MzE2LjgxMjE0MTE4OCwxMTgyNTQ5LjYzOTQ3ODg5MiwzMTM5MjE0LjEyMTk2MDYxMzQsMjgwNTg4NS4yMzY3MjMyMzk1LDY0NDExNTUuMTk5NzMwODQzLDQ2NjYzNjIuNjEzMzk4ODk2NSwxMzEyMzU0LjIyODkyNzkyNzYsMzgxOTU0Ni41NjE5ODc5MzY1LDI1NDM3MTEuMTc1Nzk0NzQ1LDM3NTc4NTkuNDM2NTQ4NjA2NSw0MTczMDA3LjY1NTU4OTc1NjYsMzcxMjI2OC44MDk1NzAzODUsODQ2MjAzNi40MzAxMTAwMjgsNTM5NjM4LjY4NzIzNzA2MDMsNjc1Ni43NDE0NjgxODkwNjgKKzIzLFdlZCAxNiBGZWIgMTEsMjk3MjYzLjU2MTQ5NjI0Mjc2LDI2NTQxMi45NTg3MzEyOTE2LDE1NDQ5MS45NDUxMDQyNjEwNywzMTkzNzUuNDMxNDM4Mjk0NiwzMjE5MjcuMjI3MjYzMzA4MTMsNTIwNDA3OS44MTgxODgyOTUsNTY1NTI2OC4xNDcxMTQzMDgsNDYzNTAzMi4zNzE0NzE0NTgsNDAyNTk5My4zNTc4OTEwMDcsNTAzMzUwNS40MTQxMjIxMTksMTAyMjE1Ni45MjYzMDkzNjU0LDU5NzUzNDAuNzEzNDU2MjM4LDExODI1NTQuMzY5Njg2OTEwNCwzMTM5MjI2LjY3ODg0MjIxNTMsMjgwNTg5Ni40NjAyODY2MzMsNjQ0MTE4MC45NjQ0MDMxNzEsNDY2NjM4MS4yNzg4ODY2ODEsMTMxMjM1OS40NzgzNTUzNDE2LDM4MTk1NjEuODQwMjA0NzQxLDI1NDM3MjEuMzUwNjU5Nzk4LDM3NTc4NzQuNDY4MDE2NDE1LDQxNzMwMjQuMzQ3NjUzNzYyNCwzNzEyMjgzLjY1ODY3NTMyMiw4NDYyMDcwLjI3ODMyMzQ0NSw1Mzk2NDAuODQ1Nzk2MTI2LDY3NTYuNzY4NDk1MjA4OTk0CisyNCxUaHUgMTcgRmViIDExLDI5NzI2NC43NTA1NTI4NjY5LDI2NTQxNC4wMjAzODUyNDk4NywxNTQ0OTIuNTYzMDczMjc3NCwzMTkzNzYuNzA4OTQyNTc1MjYsMzIxOTI4LjUxNDk3NDc5MjYsNTIwNDEwMC42MzQ1NDkyMDEsNTY1NTI5MC43NjgyMzIxMzgsNDYzNTA1MC45MTE2MzgwMjQsNDAyNjAwOS40NjE4OTY2NDYzLDUwMzM1MjUuNTQ4MTg0MDM4LDEwMjIxNjEuMDE0OTQ1MjQ3Niw1OTc1MzY0LjYxNDg2Njg5NSwxMTgyNTU5LjA5OTkxMzg0OTcsMzEzOTIzOS4yMzU3NzQwNDUsMjgwNTkwNy42ODM4OTQ5MjEsNjQ0MTIwNi43MjkxNzg1NTcsNDY2NjM5OS45NDQ0NDkxMjgsMTMxMjM2NC43Mjc4MDM3NTQyLDM4MTk1NzcuMTE4NDgyNjU4LDI1NDM3MzEuNTI1NTY1NTQ5NywzNzU3ODg5LjQ5OTU0NDM1LDQxNzMwNDEuMDM5Nzg0NTM3LDM3MTIyOTguNTA3ODM5NjU2LDg0NjIxMDQuMTI2NjcyMjU3LDUzOTY0My4wMDQzNjM4MjY0LDY3NTYuNzk1NTIyMzM3MDI3CisyNSxGcmkgMTggRmViIDExLDI5NzI2NS45Mzk2MTQyNDcyNCwyNjU0MTUuMDgyMDQzNDU0NzUsMTU0NDkzLjE4MTA0NDc2NTY2LDMxOTM3Ny45ODY0NTE5NjYxNiwzMjE5MjkuODAyNjkxNDI3OTMsNTIwNDEyMS40NTA5OTMzNzUsNTY1NTMxMy4zODk0NDA0NTQsNDYzNTA2OS40NTE4Nzg3NTIsNDAyNjAyNS41NjU5NjY3MDIsNTAzMzU0NS42ODIzMjY1MDIsMTAyMjE2NS4xMDM1OTc0ODUsNTk3NTM4OC41MTYzNzMxNTc1LDExODI1NjMuODMwMTU5NzA5OCwzMTM5MjUxLjc5Mjc1NjEwMTYsMjgwNTkxOC45MDc1NDgxMDMsNjQ0MTIzMi40OTQwNTcwMDQsNDY2NjQxOC42MTAwODYyMzcsMTMxMjM2OS45NzcyNzMxNjQsMzgxOTU5Mi4zOTY4MjE2ODg0LDI1NDM3NDEuNzAwNTEyMDAzLDM3NTc5MDQuNTMxMTMyNDExNyw0MTczMDU3LjczMTk4MjA4MTcsMzcxMjMxMy4zNTcwNjMzODgsODQ2MjEzNy45NzUxNTY0NTYsNTM5NjQ1LjE2Mjk0MDE2MTEsNjc1Ni44MjI1NDk1NzMxNzIKKzI2LFNhdCAxOSBGZWIgMTEsMjk3MjY3LjEyODY4MDM4MzcsMjY1NDE2LjE0MzcwNTkwNjIsMTU0NDkzLjc5OTAxODcyNTgsMzE5Mzc5LjI2Mzk2NjQ2NjksMzIxOTMxLjA5MDQxMzIxNDIsNTIwNDE0Mi4yNjc1MjA4MTIsNTY1NTMzNi4wMTA3MzkyNDksNDYzNTA4Ny45OTIxOTM2MzgsNDAyNjA0MS42NzAxMDExNzQ2LDUwMzM1NjUuODE2NTQ5NSwxMDIyMTY5LjE5MjI2NjA3NjUsNTk3NTQxMi40MTc5NzUwMjQsMTE4MjU2OC41NjA0MjQ0OTA4LDMxMzkyNjQuMzQ5Nzg4Mzg3LDI4MDU5MzAuMTMxMjQ2MTgwMyw2NDQxMjU4LjI1OTAzODUxMSw0NjY2NDM3LjI3NTc5ODAxMiwxMzEyMzc1LjIyNjc2MzU3MTgsMzgxOTYwNy42NzUyMjE4MzIsMjU0Mzc1MS44NzU0OTkxNTU0LDM3NTc5MTkuNTYyNzgwNiw0MTczMDc0LjQyNDI0NjM5NSwzNzEyMzI4LjIwNjM0NjUxNSw4NDYyMTcxLjgyMzc3NjA1NSw1Mzk2NDcuMzIxNTI1MTMwMSw2NzU2Ljg0OTU3NjkxNzQyNgorMjcsU3VuIDIwIEZlYiAxMSwyOTcyNjguMzE3NzUxMjc2NjYsMjY1NDE3LjIwNTM3MjYwNDMsMTU0NDk0LjQxNjk5NTE1NzkyLDMxOTM4MC41NDE0ODYwNzc3LDMyMTkzMi4zNzgxNDAxNTEyLDUyMDQxNjMuMDg0MTMxNTE2LDU2NTUzNTguNjMyMTI4NTMzLDQ2MzUxMDYuNTMyNTgyNjg2LDQwMjYwNTcuNzc0MzAwMDYyNiw1MDMzNTg1Ljk1MDg1MzAzNCwxMDIyMTczLjI4MDk1MTAyMjgsNTk3NTQzNi4zMTk2NzI0OTksMTE4MjU3My4yOTA3MDgxOTI5LDMxMzkyNzYuOTA2ODcwOTAwNywyODA1OTQxLjM1NDk4OTE1MzMsNjQ0MTI4NC4wMjQxMjMwNzYsNDY2NjQ1NS45NDE1ODQ0NDY1LDEzMTIzODAuNDc2Mjc0OTc4MSwzODE5NjIyLjk1MzY4MzA4OSwyNTQzNzYyLjA1MDUyNzAwODMsMzc1NzkzNC41OTQ0ODg5MTUsNDE3MzA5MS4xMTY1Nzc0Nzg2LDM3MTIzNDMuMDU1Njg5MDM4Nyw4NDYyMjA1LjY3MjUzMTA1LDUzOTY0OS40ODAxMTg3MzMxLDY3NTYuODc2NjA0MzY5NzkKKzI4LE1vbiAyMSBGZWIgMTEsMjk3MjY5LjUwNjgyNjkyNTczLDI2NTQxOC4yNjcwNDM1NDkxLDE1NDQ5NS4wMzQ5NzQwNjE4LDMxOTM4MS44MTkwMTA3OTg2NCwzMjE5MzMuNjY1ODcyMjM5Myw1MjA0MTgzLjkwMDgyNTQ4NSw1NjU1MzgxLjI1MzYwODMwNyw0NjM1MTI1LjA3MzA0NTg5OCw0MDI2MDczLjg3ODU2MzM2OCw1MDMzNjA2LjA4NTIzNzEwNiwxMDIyMTc3LjM2OTY1MjMyNDEsNTk3NTQ2MC4yMjE0NjU1ODEsMTE4MjU3OC4wMjEwMTA4MTY2LDMxMzkyODkuNDY0MDAzNjQyNiwyODA1OTUyLjU3ODc3NzAyMDMsNjQ0MTMwOS43ODkzMTA3MDIsNDY2NjQ3NC42MDc0NDU1NDQsMTMxMjM4NS43MjU4MDczODI1LDM4MTk2MzguMjMyMjA1NDYxMiwyNTQzNzcyLjIyNTU5NTU2MSwzNzU3OTQ5LjYyNjI1NzM1NjcsNDE3MzEwNy44MDg5NzUzMjk2LDM3MTIzNTcuOTA1MDkwOTU5Nyw4NDYyMjM5LjUyMTQyMTQzNiw1Mzk2NTEuNjM4NzIwOTcwOCw2NzU2LjkwMzYzMTkzMDI2MQorMjksVHVlIDIyIEZlYiAxMSwyOTcyNzAuNjk1OTA3MzMxMywyNjU0MTkuMzI4NzE4NzQwNjcsMTU0NDk1LjY1Mjk1NTQzNzY2LDMxOTM4My4wOTY1NDA2Mjk3LDMyMTkzNC45NTM2MDk0NzgyLDUyMDQyMDQuNzE3NjAyNzIwNSw1NjU1NDAzLjg3NTE3ODU2Niw0NjM1MTQzLjYxMzU4MzI3LDQwMjYwODkuOTgyODkxMDkxLDUwMzM2MjYuMjE5NzAxNzE4LDEwMjIxODEuNDU4MzY5OTgwMSw1OTc1NDg0LjEyMzM1NDI3MiwxMTgyNTgyLjc1MTMzMjM2MSwzMTM5MzAyLjAyMTE4NjYxMiwyODA1OTYzLjgwMjYwOTc4MzYsNjQ0MTMzNS41NTQ2MDEzODgsNDY2NjQ5My4yNzMzODEzMDYsMTMxMjM5MC45NzUzNjA3ODUsMzgxOTY1My41MTA3ODg5NDYsMjU0Mzc4Mi40MDA3MDQ4MTI3LDM3NTc5NjQuNjU4MDg1OTI2NCw0MTczMTI0LjUwMTQzOTk1MDQsMzcxMjM3Mi43NTQ1NTIyNzc3LDg0NjIyNzMuMzcwNDQ3MjIyLDUzOTY1My43OTczMzE4NDMsNjc1Ni45MzA2NTk1OTg4NDQKKzMwLFdlZCAyMyBGZWIgMTEsMjk3MjcxLjg4NDk5MjQ5MywyNjU0MjAuMzkwMzk4MTc4OSwxNTQ0OTYuMjcwOTM5Mjg1NSwzMTkzODQuMzc0MDc1NTcxLDMyMTkzNi4yNDEzNTE4NjgyLDUyMDQyMjUuNTM0NDYzMjI2LDU2NTU0MjYuNDk2ODM5MzEyLDQ2MzUxNjIuMTU0MTk0ODA3LDQwMjYxMDYuMDg3MjgzMjMxMyw1MDMzNjQ2LjM1NDI0Njg2NCwxMDIyMTg1LjU0NzEwMzk5MTEsNTk3NTUwOC4wMjUzMzg1NywxMTgyNTg3LjQ4MTY3MjgyNzQsMzEzOTMxNC41Nzg0MTk4MTEsMjgwNTk3NS4wMjY0ODc0NDE3LDY0NDEzNjEuMzE5OTk1MTM2LDQ2NjY1MTEuOTM5MzkxNzMsMTMxMjM5Ni4yMjQ5MzUxODUyLDM4MTk2NjguNzg5NDMzNTQ3LDI1NDM3OTIuNTc1ODU0NzY1MywzNzU3OTc5LjY4OTk3NDYyMjMsNDE3MzE0MS4xOTM5NzEzNDI0LDM3MTIzODcuNjA0MDcyOTk1LDg0NjIzMDcuMjE5NjA4NDAyLDUzOTY1NS45NTU5NTEzNDk2LDY3NTYuOTU3Njg3Mzc1NTM5CiszMSxUaHUgMjQgRmViIDExLDI5NzI3My4wNzQwODI0MTEwNywyNjU0MjEuNDUyMDgxODYzOCwxNTQ0OTYuODg4OTI1NjA1MjIsMzE5Mzg1LjY1MTYxNTYyMjM0LDMyMTkzNy41MjkwOTk0MDkxLDUyMDQyNDYuMzUxNDA2OTk3LDU2NTU0NDkuMTE4NTkwNTQzLDQ2MzUxODAuNjk0ODgwNTA1LDQwMjYxMjIuMTkxNzM5Nzg5LDUwMzM2NjYuNDg4ODcyNTUxLDEwMjIxODkuNjM1ODU0MzU3Miw1OTc1NTMxLjkyNzQxODQ3NywxMTgyNTkyLjIxMjAzMjIxNDcsMzEzOTMyNy4xMzU3MDMyMzk2LDI4MDU5ODYuMjUwNDA5OTk1LDY0NDEzODcuMDg1NDkxOTQ3LDQ2NjY1MzAuNjA1NDc2ODIsMTMxMjQwMS40NzQ1MzA1ODQ0LDM4MTk2ODQuMDY4MTM5MjYyNSwyNTQzODAyLjc1MTA0NTQyLDM3NTc5OTQuNzIxOTIzNDQ2LDQxNzMxNTcuODg2NTY5NTAzLDM3MTI0MDIuNDUzNjUzMTA5Nyw4NDYyMzQxLjA2ODkwNDk4MSw1Mzk2NTguMTE0NTc5NDkwNiw2NzU2Ljk4NDcxNTI2MDM0MworMzIsRnJpIDI1IEZlYiAxMSwyOTcyNzQuMjYzMTc3MDg1NjcsMjY1NDIyLjUxMzc2OTc5NTYsMTU0NDk3LjUwNjkxNDM5NjksMzE5Mzg2LjkyOTE2MDc4Mzk0LDMyMTkzOC44MTY4NTIxMDEsNTIwNDI2Ny4xNjg0MzQwMzcsNTY1NTQ3MS43NDA0MzIyNiw0NjM1MTk5LjIzNTY0MDM2Niw0MDI2MTM4LjI5NjI2MDc2NSw1MDMzNjg2LjYyMzU3ODc3NiwxMDIyMTkzLjcyNDYyMTA3ODEsNTk3NTU1NS44Mjk1OTM5OSwxMTgyNTk2Ljk0MjQxMDUyMzMsMzEzOTMzOS42OTMwMzY4OTcsMjgwNTk5Ny40NzQzNzc0NDUsNjQ0MTQxMi44NTEwOTE4Miw0NjY2NTQ5LjI3MTYzNjU3NDUsMTMxMjQwNi43MjQxNDY5ODEzLDM4MTk2OTkuMzQ2OTA2MDkyLDI1NDM4MTIuOTI2Mjc2Nzc0NiwzNzU4MDA5Ljc1MzkzMjM5Nyw0MTczMTc0LjU3OTIzNDQzNDMsMzcxMjQxNy4zMDMyOTI2MjQsODQ2MjM3NC45MTgzMzY5NTQsNTM5NjYwLjI3MzIxNjI2NjQsNjc1Ny4wMTE3NDMyNTMyNjEKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvSW5vY3VsYXRpb25UZXN0X1JLX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9SXzAuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Jbm9jdWxhdGlvblRlc3RfUktfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL1JfMC5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmMyNDQwMQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvSW5vY3VsYXRpb25UZXN0X1JLX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9SXzAuY3N2CkBAIC0wLDAgKzEgQEAKK2l0ZXJhdGlvbix0aW1lLApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Jbm9jdWxhdGlvblRlc3RfUktfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL1JfMS5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0lub2N1bGF0aW9uVGVzdF9SS19SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vUl8xLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYzI0NDAxCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Jbm9jdWxhdGlvblRlc3RfUktfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL1JfMS5jc3YKQEAgLTAsMCArMSBAQAoraXRlcmF0aW9uLHRpbWUsCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0lub2N1bGF0aW9uVGVzdF9SS19SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vUl8yLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvSW5vY3VsYXRpb25UZXN0X1JLX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9SXzIuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE5M2NkMjkKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0lub2N1bGF0aW9uVGVzdF9SS19SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vUl8yLmNzdgpAQCAtMCwwICsxLDMzIEBACitpdGVyYXRpb24sdGltZSxFRy1GUkctRzIxMDAwMSxFRy1GUkctRzIxMDAwMixFRy1GUkctRzIxMDAwMyxFRy1GUkctRzIxMDAwNCxFRy1GUkctRzIxMDAwNSxFRy1MT0UtRzI0MDAwMSxFRy1MT0UtRzI0MDAwMixFRy1MT0UtRzI0MDAwMyxFRy1MT0UtRzI0MDAwNCxFRy1MT0UtRzI0MDAwNSxFRy1MT0UtRzI0MDAwNixFRy1MT0UtRzI0MDAwNyxFRy1MT0UtRzI0MDAwOCxFRy1MT0UtRzI0MDAwOSxFRy1VUEUtRzI5MDAwMSxFRy1VUEUtRzI5MDAwMixFRy1VUEUtRzI5MDAwMyxFRy1VUEUtRzI5MDAwNCxFRy1VUEUtRzI5MDAwNSxFRy1VUEUtRzI5MDAwNixFRy1VUEUtRzI5MDAwNyxFRy1VUEUtRzI5MDAwOCxFRy1VUkctRzMwMDAwMSxFRy1VUkctRzMwMDAwMixFRy1VUkctRzMwMDAwMyxFRy1VUkctRzMwMDAwNAorMSxUdWUgMjUgSmFuIDExLDEwNDAzMy4wOTEyMDg4MzA1Myw5Mjg4Ni4zNjExOTY1MDAxLDU0MDY3LjQyMjY0Mzk0MzUzLDExMTc3MS41NjQ2NzI5MTk2LDExMjY2NC42MTQ2MTk4MjA5NSwxODIxMjY3LjY1Nzc1OTg2MywxOTc5MTY5LjY3Njg5NDg2OTQsMTYyMjExOC41NzcyOTkxODE2LDE0MDg5NzMuNjgwMTIyMjk2NiwxNzYxNTcxLjg2OTc5NzE5MzcsMzU3NzIzLjQ0MzE2MDEzMzcsMjA5MTE4NS4yMTczMTMyNTE1LDQxMzg1Ny42MDgzMTgzODI2NCwxMDk4NjMyLjY1MzY2NzIyMSw5ODE5NzcuMzQzMjkxNzgzOCwyMjU0MjE0Ljk1Nzg5NjIzNzMsMTYzMzA4OS43MjkzOTA2NDQ3LDQ1OTI4NS4zOTg1MzA4OTQxMywxMzM2NzI5LjAwNjc0MzEwMTIsODkwMjI0LjEyOTU2MDQ3OTcsMTMxNTE0MC4zMjYzNjQ2NTMsMTQ2MDQyOS45OTgxODQwMjQ4LDEyOTkxODQuOTQ3MjMwNDE2NiwyOTYxNDYzLjk3NzExNjA5MDIsMTg4ODU3LjY3NTgyMTg5MzUzLDIzNjQuNjYwODc0MDA5OTk4NworMixXZWQgMjYgSmFuIDExLDEwNDAyOS40NTAxMjE3MTYyOSw5Mjg4My4xMTAyMzEyMjI1LDU0MDY1LjUzMDMxNzYxNTA4LDExMTc2Ny42NTM4NzM4OTk5NywxMTI2NjAuNjcxNDI3MzI4NTIsMTgyMTIwMy45MTQ5NDA4NTM2LDE5NzkxMDAuNDA3MTY4NDQyNiwxNjIyMDYxLjgwNDE0NDQ5MDMsMTQwODkyNC4zNjcwOTM2NDEzLDE3NjE1MTAuMjE1OTk3MjczMywzNTc3MTAuOTIzMDYwMzk2MDUsMjA5MTExMi4wMjcxMTMyMDYyLDQxMzg0My4xMjM1NTU1NzY3LDEwOTg1OTQuMjAyMTk3OTY4Nyw5ODE5NDIuOTc0Njk2ODczNywyMjU0MTM2LjQxNzExNjgyNCwxNjMzMDMyLjU3MzQ4MTY3NjksNDU5MjY5LjMyMzgyMzI1NDcsMTMzNjY4Mi4yMjIwNDcwMTE0LDg5MDE5Mi45NzI3NDg1NTI5LDEzMTUwOTQuMjk3MjU4NzQ0NywxNDYwMzc4Ljg4NDAyODU5MjEsMTI5OTEzOS40NzY1NTQzNjU4LDI5NjEzNjAuMzI4NDQ5MjksMTg4ODUxLjA2NjM0OTk1OTU1LDIzNjQuNTc4MTEyMzI3NzcxCiszLFRodSAyNyBKYW4gMTEsMTA0MDI1LjgwOTIyOTk2ODE2LDkyODc5Ljg1OTM5NDkwNTU4LDU0MDYzLjYzODA2OTU1OTU5NCwxMTE3NjMuNzUxNjI1NTQ3NzUsMTEyNjU2LjcyODM3MzMzMTQ4LDE4MjExNDAuMTc4MTI0MjIzNiwxOTc5MDMxLjEzOTg2NzgxMDgsMTYyMjAwNS4wMzMwNDc3NTczLDE0MDg4NzUuMDU3NDQ3MTg1MywxNzYxNDQ4LjU2NTYzODIwOTUsMzU3Njk4LjQwMzQ1NjE1NjE0LDIwOTEwMzguODM5NTM4NDI2Niw0MTM4MjguNjM5Mjk5NzI4MjcsMTA5ODU1NS43NTIxMDAzNjk0LDk4MTkwOC42MDc0OTU5ODA5LDIyNTQwNTguNDE4OTI5Mzg0LDE2MzI5NzUuNDMwNzI1NDc1Myw0NTkyNTMuMjQ5Njc4MjI5MSwxMzM2NjM1LjQzOTAwMzI5NzQsODkwMTYxLjgyMTM5NDA3NywxMzE1MDQ4LjI2OTc2MzgzMDYsMTQ2MDMyNy43NzE2NjIyNDQ2LDEyOTkwOTQuMDA3NTE4MjA2LDI5NjEyNTYuNjkwMjg4MDg3NCwxODg4NDQuNDYwNjAyMzE3MTIsMjM2NC40OTUzNTM1NDUyNjY0Cis0LEZyaSAyOCBKYW4gMTEsMTA0MDIyLjE2ODgwMTYxMTU3LDkyODc2LjYwODc5NTk2ODMyLDU0MDYxLjc0NTk5NjU3ODgxNSwxMTE3NTkuODgwNDM4NTI4NDcsMTEyNjUyLjc4NTQ2MjI3OTI3LDE4MjEwNzYuNDYwNzc5MzM5OCwxOTc4OTYxLjg3NTAwNTkxNjIsMTYyMTk0OC4yNjQ2MTUyNjc1LDE0MDg4MjUuNzU3MjkyMjgsMTc2MTM4Ni45MjM5MjAxNTAxLDM1NzY4NS44ODQ4MDI0ODQ0LDIwOTA5NjUuNjU1MTU5MDUwOCw0MTM4MTQuMTU1NTUwODIzNjYsMTA5ODUxNy4zMDM1OTU3OTAyLDk4MTg3NC4yNDMwMzE5MTM4LDIyNTM5ODIuMjQ1Njg5NDU1NCwxNjMyOTE4LjM0Mzc4NDk1ODYsNDU5MjM3LjE3NjA5NTk1NDIsMTMzNjU4OC42NTc3NDMwNzk2LDg5MDEzMC42OTE5MDc5ODMzLDEzMTUwMDIuMjQzODc5OTI0LDE0NjAyNzYuNjYxMDg3MzEzNCwxMjk5MDQ4LjU0MDUzMTExOSwyOTYxMTUzLjA4ODk5Mjk3NSwxODg4MzcuODY5NjEwODMwNSwyMzY0LjQxMjU5NzcxODQyMgorNSxTYXQgMjkgSmFuIDExLDEwNDAxOC41Mjk5ODc5NjI3Nyw5Mjg3My4zNTg5NzYxNTYyNSw1NDA1OS44NTQ2Mzg4OTc5OCwxMTE3NTYuMTE0MDkwMjA1MjMsMTEyNjQ4Ljg0MjcyMjY1ODI3LDE4MjEwMTIuODE2NTAwNTgyNSwxOTc4ODkyLjYxMjY2NzY2NjMsMTYyMTg5MS41MDI0NjE4OTQ5LDE0MDg3NzYuNDkxNjUyMjI4NiwxNzYxMzI1LjMxMzYwNjQ3MzksMzU3NjczLjM2OTYxMjA1MDYsMjA5MDg5Mi40Nzc1NDAwMjE4LDQxMzc5OS42NzIzMDg4ODI3NiwxMDk4NDc4Ljg1ODAwNDg0OTQsOTgxODM5Ljg4ODk2NjcwMTMsMjI1MzkxMS43MDM3Nzk5NDU2LDE2MzI4NjEuNDkxNjg4NTA3LDQ1OTIyMS4xMDMwNzc3NzQ0LDEzMzY1NDEuODc5MDcwOTEzNyw4OTAwOTkuNjUyMjM3MjgzNCwxMzE0OTU2LjIxOTYwNzU3MjUsMTQ2MDIyNS41NTIzMjc1NzkxLDEyOTkwMDMuMDc4MDAzNjAwNywyOTYxMDQ5LjYzNTM0NTk0NzUsMTg4ODMxLjMzMzU5MjcwMTIsMjM2NC4zMjk4NDUzMzc1MDIzCis2LFN1biAzMCBKYW4gMTEsMTA0MDE0Ljg5NzQ5Mzg0NTE0LDkyODcwLjExMjMyMTQyODM3LDU0MDU3Ljk2NjU5MTc4MjcyLDExMTc1Mi42ODk0NTM0ODYyNCwxMTI2NDQuOTAwMzA5ODYyNzYsMTgyMDk0OS40NDg5NTkwOTQsMTk3ODgyMy4zNTMzMjYzMzM3LDE2MjE4MzQuNzY1MDgwNjM2NCwxNDA4NzI3LjM1ODU3Nzg1NTksMTc2MTI2My44MjkyNzg5NDUyLDM1NzY2MC44Njk4NjM1ODczLDIwOTA4MTkuMzI1NzIwNzEzNyw0MTM3ODUuMTg5NTc0MTc0NSwxMDk4NDQwLjQyMjA4MzMwMDgsOTgxODA1LjU4Mzc3OTA3MTcsMjI1Mzg1OC40ODczNTA0MzksMTYzMjgwNS41OTAxMjQ4MjQsNDU5MjA1LjAzMDYzMjQyNzM3LDEzMzY0OTUuMTA3MjE1NjA2LDg5MDA2OC45NzA2Mzg2MjI0LDEzMTQ5MTAuMTk2OTUwNjI0MiwxNDYwMTc0LjQ0NTU1NjY3MTQsMTI5ODk1Ny42MzIxMzI2ODYyLDI5NjA5NDYuNzcyODgxNzY3MiwxODg4MjQuOTkzNzkwNTc1NTQsMjM2NC4yNDcwOTk1MjIzNjkKKzcsTW9uIDMxIEphbiAxMSwxMDQwMTEuMjg5OTE1NTM2NSw5Mjg2Ni44Nzg2ODMzODc2MSw1NDA1Ni4wOTMzMTg3MTc4OCwxMTE3NTAuMzU1NDQ3NDgyODcsMTEyNjQwLjk1ODk5NjM3NzM5LDE4MjA4ODcuMTA4NTgxNDc5LDE5Nzg3NTQuMDk5Mzg1NjUxOCwxNjIxNzc4LjEzOTE3MTAyOSwxNDA4Njc4LjczMTI2NjY4MTgsMTc2MTIwMi44NTA0NTkyMTQ4LDM1NzY0OC40MzgyMjU1Mzk4NywyMDkwNzQ2LjI5MjUwNjM5MDUsNDEzNzcwLjcwNzM0ODUzNjQ3LDEwOTg0MDIuMDI3NDg2NTQ5Nyw5ODE3NzEuNTA2MzY4MTk2MiwyMjUzODU4LjYxOTUyNzE4MiwxNjMyNzUzLjQwODQyMjYwMDIsNDU5MTg4Ljk1ODgwNzk1MywxMzM2NDQ4LjM2MjUxNTM2MDMsODkwMDM5LjY3Mjk2OTU0OSwxMzE0ODY0LjE3NTkzMDY4MzcsMTQ2MDEyMy4zNDE4NDMyNjYsMTI5ODkxMi4yNTk1MjEwNDEzLDI5NjA4NDYuMjIwNjMyNzUzMywxODg4MTkuMzMzOTUwMTk1MDgsMjM2NC4xNjQzNzcwNzUyMjkKKzgsVHVlIDEgRmViIDExLDEwNDAwNy43NzkwNjQyMTU1Myw5Mjg2My42OTcxMTE5NzU4Nyw1NDA1NC4yODI3NjA1NjcwNywxMTE3NTEuNDU5MjQ1OTY1ODMsMTEyNjM3LjAyMjM5MTM2ODUzLDE4MjA4MjguNTAyMzMyNTkwOCwxOTc4Njg0Ljg2MjMyMDQzMzEsMTYyMTcyMi4wMDg0NjU5MzMsMTQwODYzMi4wMDI3MTY5NjA5LDE3NjExNDMuODYyOTYzNDE5OSwzNTc2MzYuMjk0NTQ2OTM4NzMsMjA5MDY3My44MDM0NzcyOTAzLDQxMzc1Ni4yMjU2NDI3MTc5LDEwOTgzNjMuODE0MTkyMTAxNCw5ODE3MzguNDQ1ODc0MjEsMjI1NDAyMy4xNTUwNDg5Mjg3LDE2MzI3MTUuNDIwOTU1NTIzNiw0NTkxNzIuODg3ODQ0MTkxNSwxMzM2NDAxLjczNzE4OTg5MzgsODkwMDE1LjU5NjUzOTU2MjYsMTMxNDgxOC4xNTY2NTcyOTE4LDE0NjAwNzIuMjQ3MDk2OTY5NSwxMjk4ODY3LjIwODI4NjUyOCwyOTYwNzU0LjQ5MjEyMjU0MywxODg4MTUuOTg0Mzc4NjY4OSwyMzY0LjA4MTc1OTY5NzQ4ODUKKzksV2VkIDIgRmViIDExLDEwNDAwNC42Mzc1MjIyMDU4Nyw5Mjg2MC43MTgxNTM1Njc3Miw1NDA1Mi43Mjc4ODg2NTg2LDExMTc2My4zMTgwMzQ1OTg0OSwxMTI2MzMuMTA2NjIzOTgxNDUsMTgyMDc4My4yNDc2MDg0MzksMTk3ODYxNS42OTQ1MjI4OCwxNjIxNjY4LjAwMzU0NDg0NzUsMTQwODU5Mi4zMDE1OTEwMzk0LDE3NjEwOTIuNTc4MDI5NjI4LDM1NzYyNS4zMjQzNDkwMjM4NywyMDkwNjAzLjcyNjYzMTkwNzcsNDEzNzQxLjc0NDUxNDYyODIsMTA5ODMyNi4zNzYyNjQ4ODQ2LDk4MTcwOS43NTI4NTk5NjU0LDIyNTQ2OTQuNDYwNTc1NTk1LDE2MzI3MzAuNTgwMDAyMTgxLDQ1OTE1Ni44MTg4NjQ1ODUxLDEzMzYzNTUuNjMyMTk1MjM3Myw4OTAwMTAuODY0NjczMzc5NywxMzE0NzcyLjEzOTY1MjAxNCwxNDYwMDIxLjE5MTY2NzI0NCwxMjk4ODIzLjUyMzAwNjI4MDIsMjk2MDY5NS44NjAyMTI1MjEsMTg4ODIwLjM4MTA0MjgxNzE3LDIzNjMuOTk5NjE4MzY5NTk3NgorMTAsVGh1IDMgRmViIDExLDEwNDAwMi44ODYzOTI3NDY3LDkyODU4LjUxMDc0ODA3OTE5LDU0MDUyLjE4MzkyNzAzNTI5LDExMTgwOC42NDcxMjgxNzQxMywxMTI2MjkuMjgxNDAzMTk4MTMsMTgyMDc4NS4xMjk5OTgwMTMxLDE5Nzg1NDYuODI3MzAwOTYxLDE2MjE2MjIuODQ2NDU4OTQxMiwxNDA4NTc4LjMyMjQ4OTE4NDgsMTc2MTA3MC42MzkxOTA5ODEyLDM1NzYxOS4wMDQwMDI5NTAzLDIwOTA1NDMuOTk1MzU2NTQzMiw0MTM3MjcuMjY0MjU4OTg4NjcsMTA5ODI5Mi4xNTkwODE5NjA4LDk4MTY5OS4yNDYzMjk2NzQ3LDIyNTY5MjUuNDgzMzUyMDA3MywxNjMyOTQxLjgwMzE1ODI1ODgsNDU5MTQwLjc1Njg5Nzg2MzEsMTMzNjMxMS43MzY4MTc3NDE1LDg5MDA3Ni44MDk5MjIyNTcyLDEzMTQ3MjYuMTI3MjkyMjgzLDE0NTk5NzAuMzIzMTg2MzE5OCwxMjk4Nzg1LjQ3MTIyNjUxNiwyOTYwNzU5LjYyMzU5NTYzLDE4ODg1MC41MTMxNjAwNTc3NCwyMzYzLjkxOTU1NzcxNzU5NjUKKzExLEZyaSA0IEZlYiAxMSwxMDQwMDYuMzEwMDExNDQzMTYsOTI4NTkuMTkyNTkzMDY5MDgsNTQwNTUuNTQzMTc5NDA5MDMsMTExOTU3LjQ5NTY0NzU4MTI1LDExMjYyNS44NDAyNTYxOTY2NSwxODIwOTUxLjc3NjkwOTEwNDMsMTk3ODQ3OS4yNTUzOTUwMDYyLDE2MjE2MTMuNjA4OTkyNjU1MywxNDA4NjU3LjY4MjI4Njg3MTgsMTc2MTE1OS4xMjM2MzEzMzg2LDM1NzYzMC43MjA5OTI3ODk0MywyMDkwNTI3LjQ0Njc5MjQyMiw0MTM3MTIuNzg2MzEyNTMxOCwxMDk4MjcwLjk5NDQwNzY2NSw5ODE3NjIuNjIwMDU0ODIxNywyMjYzOTIyLjQ3NDc2MjY5MDMsMTYzMzg2Ni44NzgzMjAyNTYsNDU5MTI0LjcyMzcwMzU1MjIsMTMzNjI3Ni45OTU3NDczODE2LDg5MDM5Ny45NDg0NTg3MzU0LDEzMTQ2ODAuMTMwMDczMTQyLDE0NTk5MjAuMzMwNjM0NDA0NywxMjk4NzcwLjA4Nzk4NjAyNDYsMjk2MTI3MC43NzAxNTY2ODksMTg4OTY1LjUwMTgzNTI3NDEzLDIzNjMuODQ4Mjc0NjU1ODM5MworMTIsU2F0IDUgRmViIDExLDEwNDAyOC43OTQ5MDI1MjYxOSw5Mjg3MC41MzQwODI3Nzg3Niw1NDA3My42Nzk2MzY4Njg2NCwxMTI0MjEuOTIwNTg2OTU5OTUsMTEyNjIzLjk5MzIzNjg4NzI1LDE4MjE2ODkuMDcwOTg0NDM4OCwxOTc4NDE3LjE2NjQxNzA1MzcsMTYyMTc0Ny4yNTg2MTAxNDI2LDE0MDkwNzMuMTEwNTA0OTM4MywxNzYxNjU4LjQ3MDgyNzY1MjQsMzU3NzExLjIxMjk4MDY1MDcsMjA5MDY4Ny4xNDI3NTE0Myw0MTM2OTguMzE3NDQzMzI4MiwxMDk4MzAxLjY2NjUyODA5OCw5ODIxMTkuODIxODk2NjAyLDIyODUxMzAuODAzOTY1ODI3NSwxNjM3MzQ5LjIwNTEzMTQyMTMsNDU5MTA4LjgxMDk3NTYwNjQ0LDEzMzYyNzkuMzg0Njg1NjU3NSw4OTE2MjguNDc3Mzc0NjA4OSwxMzE0NjM0LjE5MzE5MTA0MDMsMTQ1OTg3NC4zMjQ5ODEyNzQzLDEyOTg4NDQuMTAyNjAwODkyLDI5NjMzOTguNDU0Nzc3NTM4LDE4OTM1Ny4zMzgxODY5ODczNiwyMzYzLjgxMjk1ODUxNjc5MTIKKzEzLFN1biA2IEZlYiAxMSwxMDQxMjAuNjcyMjE2MjE4NzgsOTI5MjAuNTE4Mjg0ODY0NCw1NDE0Ni42NjMxNjI3NDY0MiwxMTM4MDkuNzg5NDc4MjM2MDQsMTEyNjI4LjYzOTQxMzkxODk3LDE4MjQzNzguNzAwNDM0NjAyNiwxOTc4Mzc3Ljg3Nzk5MzM2MiwxNjIyNDM5LjIzODM0OTMxOCwxNDEwNjg2LjQ1MTUzNTA5MDYsMTc2MzY2Ni44NzAxODgwMzU4LDM1ODA0OS42Mjc5MzcxNTYxLDIwOTE1NTIuMDM1MDk0MTc2NCw0MTM2ODMuODg4NjYwMjY1MiwxMDk4NTM0LjY2OTk2OTQ0Niw5ODM2MTkuOTI4OTk3OTI2NCwyMzQ1NzI4LjA2NDE3NjI4OTQsMTY0OTY5OC40NjA3MjI0OTcsNDU5MDkzLjM5Njg3MzU3OTk0LDEzMzY0MjkuNTE5NjU5MTA3OCw4OTYwMjQuMTQ0MjAxOTQzMiwxMzE0NTg4LjUwNzQ1MDM2MTUsMTQ1OTg0NS45Nzk5NTc2NTcyLDEyOTkyNjQuNTYwNzg3MTEsMjk3MTI2OS4yMzQ1NzY3OTIsMTkwNjMwLjIzMzI1NDE5OTcsMjM2My45MjE1ODY5ODE0NDQzCisxNCxNb24gNyBGZWIgMTEsMTA0NDYwLjEwMTIxMTEyMjQzLDkzMTA1Ljg3NjIzMDU0NDI0LDU0NDE3LjA4ODE1Mzc2NDA2LDExNzYxNy41Njc0MzM1NzY4MSwxMTI2NTkuMjY0ODEyMjU3MzQsMTgzMzU4Mi4xMTMwNjEwNjE4LDE5Nzg0MzEuODU4NDQyMzA4LDE2MjUyNjkuMzE4NjQ3NDQwNSwxNDE2NDgyLjUzOTAwMzQ4OTMsMTc3MTA5MC41Mjc5MzczOTEzLDM1OTMzMS44MTAxNTgwODE0NywyMDk1MTc2Ljc1MjE4NTI2MSw0MTM2NjkuNjM4NzUwMzYyNTYsMTA5OTU0My42OTM5NDMwODA1LDk4OTQwNy43NjQ0MjY5MTU5LDI0OTY3NzYuNjk1NTc0OTMzNywxNjkwMjAyLjIyMjI1MjIzNjIsNDU5MDgwLjAxMTE5ODI3OTYsMTMzNzE1NS4xMjYyOTU5ODM4LDkxMDc4NS44NDMzNDgzMjg3LDEzMTQ1NDMuODY0MzkzNjY2NiwxNDU5ODk0LjAwNTczMDg2MjMsMTMwMTAwMi41OTE1MTc4MDE2LDI5OTg3NzMuMjIwOTc1NTEwMywxOTQ1MjAuNzc0NzIwNTU3NSwyMzY0LjU5NDE2MzA1NTI0CisxNSxUdWUgOCBGZWIgMTEsMTA1NjQwLjkxNzQ0MzA4ODI3LDkzNzI3Ljg1Mzk1NzAxNTM3LDU1MzQ5LjM0MDI5NzIyNzQ3LDEyNjM5NC42NDI3MTI4Mjc1NywxMTI3OTEuNjE5NTY0NDQ1MTgsMTg2MzIxNS43Njk0MDI2Njk3LDE5Nzg4NjAuOTY4MTc4NjM4LDE2MzU5OTguNTUwMjM0Mjc1MiwxNDM2MTI1LjgyNjc0OTMwNTcsMTc5Njg0OS40MDkxMzQyOTc2LDM2Mzg3Ny40MTAzNjA5NjgxLDIxMDkxOTIuNTc3MDkxMDMxLDQxMzY1Ni4xNzY2MTg3NDM3NSwxMTAzNDUzLjM4MTkyMjEyODgsMTAwOTkxNi41MzExMTk1NzIxLDI3OTAyNzYuOTYwMzg4MDc5OCwxODAxNzA1LjA2NzY2NTg0MTIsNDU5MDc0LjcxNzEyODQ5MDYsMTM0MDA0OS4yNDgwNzI1ODUzLDk1NDMzNi4zMjQzODM4OTc1LDEzMTQ1MDMuNDg5NDkzMzE1NiwxNDYwMjY0Ljg2NjQyODY1NywxMzA3NjAwLjI4MTk4MjA2MjQsMzA4NjczNy4wNTkzNzg3ODcsMjA0OTUxLjAzMjgwNTkzNzM0LDIzNjcuNDIxMzUwNzM2MjM4MworMTYsV2VkIDkgRmViIDExLDEwOTMzOS44MDkyNjU1NTc4LDk1NTMyLjcxMjQ5MTI1Njg0LDU4MTI2LjU4ODY3OTc5ODU1LDE0MTk4OS42NDU1NDI0OTcwNSwxMTMzMDcuOTM1NzExNDk0NzYsMTk0NzkyOS40MTQ4MTY2NTQsMTk4MDc2NS41MzQ3ODY4MjcsMTY3MzM0OS41Mzg3NjE3MjYsMTQ5NTU2NS4xNDk2MTE0NjM4LDE4NzU2ODYuODI2MzAyNDAzLDM3ODE0NS41MjYwMjY1NDk4LDIxNTg2NzYuNTAyMjk5NjEsNDEzNjQ2LjEzMDYwODkwMzk0LDExMTc1OTUuOTczOTYwOTg1NCwxMDcwNTM2Ljc5MDA3NjUxNywzMjEyNzY2LjE3NDc0NjAzMywyMDI2MTE4LjU5NzgxMjE4NzIsNDU5MTAwLjkyNjk1NjcwMjUsMTM1MDYyNi42MDA3MzUwNTY3LDEwNTMyMzUuNTk1Mjg1MzI4NiwxMzE0NDgwLjI1MjUzNjAwNTYsMTQ2MTk2Ni4xNTEwMTE4MDEsMTMzMDg0My41OTQyNjI3OTc0LDMzMTgxMzkuNDUyNTE1NDAzNywyMjY4ODkuMTgxMTEyODAzMDgsMjM3OC4xMjc2NzY5MDk5NjI3CisxNyxUaHUgMTAgRmViIDExLDExODYxOS4wMDcwMzUwOTY4Niw5OTc5OC4xNjU4MTQ5Nzg5NCw2NDM2Ni42MjI5ODQ1NjgwNiwxNjMxODMuNDQ2OTg1NjcwMiwxMTUxNTcuMzkzMTY0ODU1NjMsMjEzOTYyNi43NTcxMzEyOTE2LDE5ODgyMzguMzE1NDI1MDY5OCwxNzgxMDc2Ljk1NDkxMzEyNjgsMTYzNzIzNi44NzA2ODA4NjM3LDIwNjE3NjguNTIyODgzMDY1LDQxMzAwOC42Nzk5ODUwOTE2LDIzMDE3NjQuNzk0NTQ2NTM2Niw0MTM2NTAuNjQyMTc5MzgzMjYsMTE2MjY1NC44MTkxNDU1NTU0LDExOTk0NTkuOTQ4Mjc0OTYzOCwzNjkyNTQ4LjI4MTY2MDgzMTUsMjM0NDk0OC4xMTIzMTI2MjgsNDU5MjQ1Ljk1NTkxNzY0MDYsMTM4NTM3My4wOTI5Mzg0NDM0LDEyMTE0NjQuNDg2NTgzODgyLDEzMTQ1MjQuMTU1NzE4ODUyNSwxNDY4OTE5Ljg5OTUwNDM3NCwxNDAwOTA1LjA5MzQ5MTk3OTIsMzc1NzQ4OC4xNDg3NzkyOTU0LDI2MDY2OC42NTgyMTQyMTc4NywyNDE0LjgzNjg2MTgzMDQ5NQorMTgsRnJpIDExIEZlYiAxMSwxMzUxODcuNDUyMzM3NjY4MjIsMTA3OTQ3LjIyMjc3ODM5NzQ1LDc0MTYxLjk5NjU1Mjk3NjMxLDE4NjY5OS41Njk4MzM4NzAwNywxMjA4MTAuMDQxNTM2NDgxODYsMjQ1MjU3NS40MTc1MTc5OTQsMjAxNTA3Ny41NzA0NjE5MDY1LDIwMDMyMjcuNTI4NjgyNjc4NywxODc2MDQ0LjkxNTY5Mzk4OTcsMjM2ODUwMi4zNDk1NDM0NzE0LDQ3Mjc1Ni44ODc5MTIzNzA1LDI1OTQwNDcuNDE0NTMyNDMxLDQxMzcxNS44MDgxNjY0MjExLDEyNzMwNzMuMjQ0Nzg3MjI2NCwxMzg4NjEzLjcxMzI1MTg4OSw0MTY0OTMyLjczMzkzNzk5MDQsMjY5OTI2Ny45OTAwMDYwNDUsNDU5ODIzLjkyNzk3NDUwOTgzLDE0Nzk1OTAuMzk3ODM5MzI2OSwxNDAwOTkzLjE5Nzg1MjI0LDEzMTQ4MjQuNDk1NjMwODAzOCwxNDk0NzI1LjY3Nzk2NDQxMjgsMTU1NzIxNS4wODA0NzI2ODksNDM1MjkyNi44MjUyOTkyMzMsMzAwNjI0Ljk5MTI5ODc3NjI0LDI1MjEuMTUzNjQ0ODY4MTM1CisxOSxTYXQgMTIgRmViIDExLDE1NjYxOS45Mzc5NTY2MzA0NiwxMjA3ODAuNzcyMDEyNDg4MDMsODU3MzYuMjI5Mzc4NDkyNzIsMjA5NjYwLjYxODg0NzI4OTMzLDEzMzcxNy4wNzEwNzY4MjMzNywyODM1MzI3LjY4ODEyNTEwODQsMjA5ODg2OC40MTcwOTkxNjgsMjMyMDk2OC4wOTQzOTI1NjA0LDIxNzIyMTcuMzE4OTkyMjU4LDI3NDIxNDIuMjU1OTY4ODE1LDU0NzY1Ny43ODQzMjM4NTAzLDMwMDczNDcuNTM2NDE1MzU5NSw0MTQwMjUuNzI2ODQ5MjY1OSwxNDYwMzkyLjU0NTcyMzU0OTgsMTYwMjA4OS4xNzU4OTY1MTE5LDQ1OTM4MzguNzQyNzY4ODAyLDMwNDMwMjEuNzIwMjkzNjAxLDQ2MTkyNC40MjkwNjQxNTg5LDE2NjYxNDAuMTkwNTAwNDc4LDE1OTI0NDEuNjc2NDk3NTU4MSwxMzE2MDgxLjI1MjE1MTI4MDYsMTU3NDQ5NS43MDc5NTg5NDQ4LDE3OTgwNTguNTkzNzQ4NzQwNiw0OTk2Nzc0LjA2Njk2MjMzOCwzNDA4MTUuMDg1NjU1MzEyMSwyNzU5LjM3OTQ0NjIyNDQ2NzgKKzIwLFN1biAxMyBGZWIgMTEsMTc5MjA1Ljg4NzQ1MjcwMDU4LDEzNzU5NC43NzE2NjY4MTAxNSw5NzM0MS45MjA4MzEwNzA0NCwyMzA0MjYuNzk5NzE5ODQwMSwxNTQxMjkuMjg3NDE5OTQ4NSwzMjI2OTMxLjAzMjA0MTg0NSwyMzAwNTQ4LjcxMjAyNTM0NSwyNjc0MzI0Ljc3NTM5NzI4MDcsMjQ3NzAyNy43NjE3NTIwMDEsMzEyMjc5Mi43NjU3MjI2NDYsNjI1MjA3Ljg2MzcxMDcwNzUsMzQ2MzY4NS43ODg5ODkxNTk3LDQxNTI3NC40ODc2NTkyMDg1MywxNjkyMzg4LjI5MjcyOTQ2ODgsMTgxMDc4NC43NTU1Nzc0MTQ4LDQ5NjQ1NTIuOTMxOTY3MDExLDMzNTIzMzYuNTYxMjk2NTI5LDQ2OTA2Ni41Mzc2MDMzODc5NiwxOTI4NDY3Ljg0NTcyNjA2MDIsMTc2ODczMC4zNDAyMzYxMzY3LDEzMjA3OTIuMjAxODQ2NjMxMiwxNzUyODEwLjQ5OTU0OTU2MjMsMjA3ODI4OC45MzQwMTk4NDk2LDU2MTIyMjEuNjY5OTE3OTE0LDM3Nzc0Ny4wNjEzOTU2NDA5LDMxNTAuOTQ4NTAwMDQwMDM0NgorMjEsTW9uIDE0IEZlYiAxMSwyMDA0OTguNTMyMzI1NTcyMzYsMTU2MzE5LjQxMzkwNzUxMDY3LDEwNzk4NC42MTkwMjY4MDQ3MiwyNDgzMzMuMDY1MDg4NDg4OSwxNzgyOTUuNjgyOTI1Mjg4NjUsMzU5MDE4NC4zMDY5NjQyMDY1LDI2Mzk0NTMuMjE2MDQwMTI1NiwzMDE3MDgyLjk4NDAwMDEwNzMsMjc2MDYzMC40NzA4MzI2Mzg0LDM0NzQ5NDkuMzYxOTA0OTM0NSw2OTc2MDQuOTgwMjk3MTEzNywzOTA0NjEyLjQ5NDYwNDQxMDYsNDE5ODM4Ljg0NzQzMjM3MTc1LDE5MzA3NDUuNDk1NTQ3ODIyLDE5OTkzOTAuNDAyODI1MDM0NSw1Mjc0Njk1LjkyOTU1NjYxLDM2MTgxMzIuNDIzODA5NzY1LDQ5MDUwOC4xODM5MTA4NDA1NCwyMjE4NDg3LjgwNzIzMzIxOSwxOTIyNDQ1Ljg5ODkxNTk2OTMsMTMzNzI0Ni40Mjk1MDc2MzgsMjAyNTc2OC4wMTQ4NzM3MjAyLDIzNTY3NTMuNTE3MjY4MjQzLDYxNjExODcuNDg3ODAzMzUsNDA5OTEwLjEwNDM5ODU2MDc3LDM2MzkuMTE2OTA1MzM0ODk4NQorMjIsVHVlIDE1IEZlYiAxMSwyMTkzMzQuNzY2ODQzNDI3ODIsMTc0ODIwLjQzMDY1NTY0NDEzLDExNzI0MC43MTEwNjUxOTQ3NiwyNjMyODkuNDU2ODgyMDczNTQsMjAyNTM2LjcwNzQ0MjQ4MjE4LDM5MDgzNzYuNDYzNjY1MTY4MywzMDU3NDkwLjA0NDUxNDU5NCwzMzI1NDQ3LjYxNDYwMDEzOCwzMDA5NTEwLjQ4NjcyOTYzNSwzNzgyOTA2Ljc2NDczMDk3Nyw3NjEyNjkuMzIwNzc2MDUzMSw0MzAwMzg5LjY0NDAzMTY1OCw0MzQ0OTUuNjAzMDgzNTM3NCwyMTUyMjg1LjI5OTgzODU5MjMsMjE2MTkxMS44MzgwNzExNTksNTUyODI1Ny45MzQ0MDU4MywzODM5NjA1LjU3ODU5NjcwNTYsNTQwMjU5LjI4NzAxMTIxNiwyNDk5MDk5Ljk4NDk3MTYwNTcsMjA1MTgxOC4wOTk1NzIyODIsMTM4ODQ3MS45MTIyOTQ5MDg0LDIzNDE3MTMuNDYwMDYwMDU3NywyNjEwNzc4LjI4MDc3OTQzODYsNjYzMDI0NS40MTExMTk3MTIsNDM2OTU2Ljk1MzkzNjQwMjQ1LDQxNDYuMTE0MjcwMDU0Nzc4CisyMyxXZWQgMTYgRmViIDExLDIzNTM0Mi4wMTI2ODYxNjgxMywxOTE3MjMuNzg5MTg5MzA1NTMsMTI1MDE3LjM2MDk2Nzg5ODA3LDI3NTUwMi45NzQwOTYwNTksMjI0NzY4LjUzODkzMTA4MzA1LDQxNzcwMDYuMjIwMDE5NDEyLDM0ODYyMDcuOTY1ODU4MDU3LDM1OTAzOTQuNTUyOTczMjkyMywzMjE5ODgzLjY1NDMxOTExNCw0MDQyNjAzLjA3NjQ5OTI1MDcsODE1MTU3Ljc5OTI2ODg5OSw0NjM5OTM5Ljk0NzQ2ODgyMSw0NzE2ODguMjAyMDYxMTUxMDQsMjM0NjU3My4yNDEwOTY0NzYsMjI5NzU5Mi45OTU5Mjg4ODE3LDU3MzIwNTQuNzI1NTQ5NDk5NSw0MDIwMTQzLjEyMjE1NjY0NTYsNjIxMTUxLjg0NzMzMTM0MzEsMjc1MTIwMC45ODc3OTEwNTM1LDIxNTgwNDYuNTY3NDYyOTEzLDE1MTQ0NDQuODIzNzIzODYsMjY1NDc1OS4wMDQxNDMzMzI2LDI4MzA5NzcuNDA4NDA2MDQ2LDcwMTk1NDEuMTE4NDI1NDYxLDQ1OTE1MS45NzA5MjU0ODg2LDQ2MjAuNjk0MjI0MzMxNDY4CisyNCxUaHUgMTcgRmViIDExLDI0ODU3Ni41OTI3NTI0NTM0NiwyMDY0MDYuNDc1NDY2NDM5ODUsMTMxMzk0LjgwNzA2NzQ0NTYyLDI4NTMxMC43MzkzOTk4Mjk2LDI0NDEwNC44MTQ4NTAwNDk0Nyw0Mzk4MDY5LjExNTAzMjk0NCwzODg0MjkyLjE3NTgzNTUzMzUsMzgxMTE0MS4zMzUwNjA1ODMsMzM5MzE1OC4wNjU2NzMwOTY2LDQyNTYxNDEuOTYzNDU2NzI0LDg1OTU4Ni44NjA0NTkxMjIyLDQ5MjI1NTQuMjkwMTM0NTE1LDUzODE4Ny40OTE4NzM3NTA5LDI1MTA3MjguMjUxMDA1ODI2LDI0MDgzNTEuMjQwNzM0NjQ2Niw1ODkzNzIyLjk4Njc4NzU5Myw0MTY0OTI0Ljc1Mzg2OTY2Miw3MTg4NDMuMTM1OTg1NTA3NiwyOTY3NjEyLjAyMjQ4MzUxMjgsMjI0MzcwNC40ODEyNDE5NjMzLDE3MzI2MTMuOTgxNTczOTQwMywyOTM5ODU1LjU4OTA3NTg2NTcsMzAxNTU2My45NzA3NzIzMDk3LDczMzU5NjEuMjkxMDI5MjU3LDQ3NzA0MC45Nzg0OTU2OTcxNCw1MDM4Ljc1ODc0MzYzODA0OQorMjUsRnJpIDE4IEZlYiAxMSwyNTkzMDMuMzYzMTAzNTI5MzgsMjE4NzM0LjUxMjQ4ODA2MjM1LDEzNjUzMi40NDY1NjE3NzEsMjkzMDg1LjcxMzYyNTczNTksMjYwMzUxLjAxMzQzNDE5NjYsNDU3NjYyMC4yMzUwNTk2MjU1LDQyMzMyMDEuMzEwMDIxODY4LDM5OTEwNzUuMzU3MTg3NDM1LDM1MzMyMDIuNzE4MTg2OTg1LDQ0Mjg1MTEuODc0MzQ0MDg2LDg5NTUyMS44NjA1NDU2OTU0LDUxNTI3NDQuNjIyOTI5NjQ4NSw2MjM5MDYuMTY2ODQyMjQ0OSwyNjQ1ODkyLjI2OTEyMjc3NywyNDk3MjY4LjI0MDg1ODQ5OSw2MDIwNjU0LjM0OTkyMDg5OCw0Mjc5NTc3LjcwMjMwMjA0Niw4MTc5MDcuNTIyNDc2NDMsMzE0NzgwNy44NjEwOTYxODYsMjMxMTgyNy4yNjgzNDc5NzQsMjAwNzY1Ny43ODY2MjIzODE4LDMxODY3MjkuNDcwNTM4Nzk0LDMxNjY2OTIuMzYyOTI0NjA2NSw3NTg5MTUyLjU4MzM0NjEzMyw0OTEyNjIuOTQ0NDQzMTE2Nyw1MzkzLjA0NTE4Njg5NTAxOQorMjYsU2F0IDE5IEZlYiAxMSwyNjc4NjguMTI2MjIyNzY2NiwyMjg4NDAuMjQxMDQ2NjMxNiwxNDA2MTUuMzY3MTg1MjUxNSwyOTkxODYuNzgwNTMyMjk1NiwyNzM2NzQuNDQwOTgxMzM2Nyw0NzE4ODAyLjIzNDQwMDAwMiw0NTI3ODc5Ljg0MzYxNzcsNDEzNTM2NS45OTMyMjU4ODksMzY0NDc3OC4xODg3MjU3NjgsNDU2NTcwNy42NDA5MzQ4MzA1LDkyNDE2Ny45NTAyNDExNjE2LDUzMzcyMzAuODgzMjE3MTY0LDcxMzk0OC43MjI5ODI0OTQyLDI3NTUxMDkuNDExMjkzNDE0LDI1Njc3NDAuNDgwNjg2MzgsNjExOTQ4Ni45NzkwMzk2OTQsNDM2OTQ3MC40NTczNzYwMzQsOTA5MzE5LjQzNDQ4ODQ3NjQsMzI5NDYyMS40MTE3OTMxNzg0LDIzNjU0MjAuNDU3OTY1OTE4NCwyMjkzMTA5LjczOTYwNTY5NjQsMzM5MzUyNy44ODAyMjk1MDIsMzI4ODI5MS4yMzMwODY2OTQsNzc4OTMwNy43NTA1NjQ0MjQsNTAyNDQ4LjQ3ODAwNjM4MDcsNTY4NS4zODY1NTk3OTkxNzkKKzI3LFN1biAyMCBGZWIgMTEsMjc0NjI3LjMyNjI3MjY0NjMsMjM2OTc4LjkzMDQxMjE0MjgzLDE0MzgyNS41OTQ0MDQxMDM0LDMwMzkzNS4xNTk0MzgxNDAxLDI4NDQwNy45MTE1ODk2OTEsNDgzMDc3Mi44MjI5MzgyOTgsNDc3MDQ0Ny4zMDc2Nzk2ODk1LDQyNDk2MjUuNzI5Njk4OTI4LDM3MzI2ODAuOTA3MzQ0NTY1LDQ2NzM3MTEuNDU5OTc5NjA0LDk0Njc0Ni4zNTM4OTg1ODEsNTQ4MzI1NS4xNDM4MTQ3Myw3OTg2NjYuNjAwNDA3NzQyLDI4NDIxMDguMzUxMzUxMTAxLDI2MjMwMzAuNDY4Mzg4MDE5Niw2MTk1OTE3LjQ5OTkyNjAxNCw0NDM5Mzg0LjE2NDU3NDQxNSw5ODkxMzAuMDM4MjYxNDYxNywzNDEyMzExLjc4OTAwMzQ5OTMsMjQwNzIxNy44NDA1NjE3OTkyLDI1NTk5MTQuODcwODkxMDI0LDM1NjI3NTMuODE4MTQwODk1NiwzMzg0ODM0LjU4ODk2NTU1ODQsNzk0NjAxOS41MjQ4OTUwNyw1MTExNzAuMTM3ODIzMDA5MSw1OTIxLjk4NTMwNDA3OTIxMQorMjgsTW9uIDIxIEZlYiAxMSwyNzk5MTIuMjI1NTA3NDg5NywyNDM0NDUuMzY2Njg5OTEzMDMsMTQ2MzI4LjA3NDc3ODA0NzA3LDMwNzYwNS45MTEwMjg5NzQ2MywyOTI5MzcuOTkxMDMwOTA3OTYsNDkxODE3MC44NzAxMzMzMzcsNDk2NjQwOC42OTc0MTA1NjUsNDMzOTIwNy4zNzc4Mzk4MDQsMzgwMTMxNS4xNDI4MTkwNzcyLDQ3NTc5ODcuOTM3MjY3MTUxLDk2NDM4MS44OTYyMTQyNjcxLDU1OTc2OTkuNzU3MTg1NDI1LDg3MzUxOC42MDk4MTQ4MjI0LDI5MTA2MzkuMDA4MTUyNzc3MywyNjY2MDU1LjMyNTk4NDA0NzcsNjI1NDY4OC4wODUxNDYzMjQsNDQ5MzM5OS42NDk5NDU0NDEsMTA1NjM2MC4zNjMwNTkwNzk3LDM1MDU0ODIuMzUyMjE4NzU3LDI0Mzk1ODQuNjAyNTE1MDU3NywyNzk0NzA2LjQ4NDc2MDA5NDQsMzY5ODg2MC41OTQ4NzM3OTYsMzQ2MDY4NC44NDg0MzcyMzEsODA2Nzc2Mi43NjEyMTc5ODgsNTE3OTIyLjcxNzg1MTg5Nyw2MTEwLjY4NDMyMDQ1MjE2MworMjksVHVlIDIyIEZlYiAxMSwyODQwMTMuMjY3NDk4OTY5MzMsMjQ4NTI4LjgwNTg3MDg5MTY3LDE0ODI2NS4xNzU0Mzk3NTI4NCwzMTA0MjcuNjY0NjM4NzAzNjMsMjk5NjQ0Ljg5NjUxNjQxODE0LDQ5ODU4OTUuNjMyMzIxODY2LDUxMjI0NzkuOTI5MzU0OTAxLDQ0MDg4NzcuMjc5NDQzMDkzLDM4NTQ1MTMuOTgxMjk4MjQwNCw0ODIzMjc3LjU4MDE3NDUzMSw5NzgwNTUuMzkwNjA4MTUzMSw1Njg2NjgwLjE5MjE3Nzg3LDkzNzA3Ni40NDA3NTY3NTg5LDI5NjQxNDEuMzMyOTUyNTcyLDI2OTkzMTEuMzMwNTI4NTUyLDYyOTk2NjEuNjI1NDU0MTg1LDQ1MzQ5MDEuMTc5NTYxMjYyLDExMTE1OTguNTAzNDU5NDU3OCwzNTc4NTEzLjk0NDk5MzUzMzcsMjQ2NDUwMC43MzE3NTA1MjM3LDI5OTM1NDAuNjE1NDQ3NTU0NywzODA2ODg5LjQ2NTcyMTY3MjQsMzUxOTc3Ni4xNDY5NjA2ODM2LDgxNjE3MzIuODM0MDEzMjk1LDUyMzEyMC4xMDQ5MjA3OTEzLDYyNTkuNDcwODQ5MTMzMDQ3CiszMCxXZWQgMjMgRmViIDExLDI4NzE3NS44MDEyMTA5MzYyLDI1MjQ5MS4wNDIwMjYzOTA3LDE0OTc1NS44ODI2MjYyNzQyMiwzMTI1ODYuNDUxMjA4MzkzNDQsMzA0ODczLjE5NDMzNjExMjgsNTAzODA2MC4zMzkwNjM0Nyw1MjQ1NDA0LjIyNDc5NzYwMSw0NDYyNzAzLjE1NzE4Mzk3NywzODk1NDk5LjI0OTYyMjMwNiw0ODczNTU2LjE0Mjg0Njc0OCw5ODg1OTIuMzA1NDIwNzk4OCw1NzU1NDA4LjM5NTgzNjY2NCw5ODk1OTQuNjMyMTM3MzA3LDMwMDU2MDcuMzMxNTc1MDc1NiwyNzI0ODcyLjQxNTAxMjAwNyw2MzMzOTM0LjIxOTA4NTI0NSw0NTY2NjM3Ljg2NzExMjQ4MiwxMTU2MTYxLjE0NDI4NDgyNywzNjM1MzAyLjQ3MDY4MDY0LDI0ODM1ODUuNzAyOTUwOTU5LDMxNTc1MjguMDI3MjgwMDg4LDM4OTE3NDIuNzU4NDIyNzMyLDM1NjU0OTMuNjgzMjA2NDA4LDgyMzM4NzQuNzUzNTcyNzUyLDUyNzEwMC42MzM2ODYzNDkxLDYzNzUuNzIxMTIxMDY2NTgzCiszMSxUaHUgMjQgRmViIDExLDI4OTYwMS44MTIwOTc4Njc3LDI1NTU1Ny44NTcyNzU2ODE0MiwxNTA4OTcuNDAyMTkyODI3OTMsMzE0MjMxLjI0NzI1Mjc5NzUsMzA4OTIwLjI5NjI3ODY2MTYsNTA3ODAzNi4zMjkwMDYyODYsNTM0MTM2MS45OTkzNzQyOSw0NTA0MDU4LjEzNzg5Njk5MywzOTI2OTEzLjg2MDUyOTg1Myw0OTEyMDc5LjgwNTMyNTI3MjUsOTk2NjcwLjQxMzIyNTQwMzYsNTgwODIwMi4xNzAwNTQ5MzYsMTAzMjE0Mi44MDEwMDg3MDEzLDMwMzc1NTAuODM2MDE4MDQ0LDI3NDQ0MjUuNTI1MDQ2MzE2LDYzNTk5NTYuNTc4ODQ5NTcyLDQ1OTA4MDguNDYyMjM5OTg2LDExOTE2MTQuMjg3ODU2MzQzNywzNjc5MTcwLjAyODI1MTM0LDI0OTgxNDEuNTUyNTY3NTE2NSwzMjkwMTk3LjYzMzgzNTE1MDQsMzk1NzgzNC43OTQ4NDg4NzY1LDM2MDA2NjAuNzI1MzYxNDM0Myw4Mjg5MDA0LjUwMzkxMjgyMyw1MzAxMzYuMjAzNDE5MTI1OCw2NDY1Ljg3NzQ4MDY5MzQ5MQorMzIsRnJpIDI1IEZlYiAxMSwyOTE0NTQuNDg4NDI0MzE0MywyNTc5MTcuODUyNjM4NTU3OSwxNTE3NjcuODE2MjM0MzcwOTMsMzE1NDc5Ljg5NTY2Mzg2MDk1LDMxMjAzNC43Nzc3ODMxMDk0Niw1MTA4NTM4LjM4NTA5NDQwNSw1NDE1NzI1LjkzNDA3Mzg1Nyw0NTM1NjgyLjEyNDIxMDI5OCwzOTUwODg3LjM2MTM2ODEyOTUsNDk0MTQ2OS4xMTkzNzMzMTgsMTAwMjgzNi4yMTQ2NjM4NDQsNTg0ODU2Ni4yNTkyMTEzNTQsMTA2NjEwMy45ODc5NjcxOTM2LDMwNjIwMzMuMzY2Nzg5ODc2LDI3NTkzMjEuMjU3NTY5NDIxNSw2Mzc5NjQ5LjQ5OTQyMDQ3Myw0NjA5MTUwLjUwNTc4NjU1LDEyMTk1MTMuODk0MTE4MjYyNywzNzEyODY5LjgzMDc5MDAzMzYsMjUwOTIwMS40MDYzNTM4MTEzLDMzOTU5NzcuNzcyNTM4NDQyLDQwMDg5NjAuMjU5ODIyNDg3NCwzNjI3NTgwLjE5MTcwMDEyOTMsODMzMDk2NS44MTIwNDYyNzgsNTMyNDQyLjQ4NDc0ODkxNTUsNjUzNS4zNjc4NzU4NjAzNjkKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvSW5vY3VsYXRpb25UZXN0X1JLX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9TXzAuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Jbm9jdWxhdGlvblRlc3RfUktfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL1NfMC5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmMyNDQwMQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvSW5vY3VsYXRpb25UZXN0X1JLX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9TXzAuY3N2CkBAIC0wLDAgKzEgQEAKK2l0ZXJhdGlvbix0aW1lLApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Jbm9jdWxhdGlvblRlc3RfUktfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL1NfMS5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0lub2N1bGF0aW9uVGVzdF9SS19SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vU18xLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYzI0NDAxCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Jbm9jdWxhdGlvblRlc3RfUktfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL1NfMS5jc3YKQEAgLTAsMCArMSBAQAoraXRlcmF0aW9uLHRpbWUsCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0lub2N1bGF0aW9uVGVzdF9SS19SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vU18yLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvSW5vY3VsYXRpb25UZXN0X1JLX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9TXzIuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQzZjhjN2UKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0lub2N1bGF0aW9uVGVzdF9SS19SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vU18yLmNzdgpAQCAtMCwwICsxLDMzIEBACitpdGVyYXRpb24sdGltZSxFRy1GUkctRzIxMDAwMSxFRy1GUkctRzIxMDAwMixFRy1GUkctRzIxMDAwMyxFRy1GUkctRzIxMDAwNCxFRy1GUkctRzIxMDAwNSxFRy1MT0UtRzI0MDAwMSxFRy1MT0UtRzI0MDAwMixFRy1MT0UtRzI0MDAwMyxFRy1MT0UtRzI0MDAwNCxFRy1MT0UtRzI0MDAwNSxFRy1MT0UtRzI0MDAwNixFRy1MT0UtRzI0MDAwNyxFRy1MT0UtRzI0MDAwOCxFRy1MT0UtRzI0MDAwOSxFRy1VUEUtRzI5MDAwMSxFRy1VUEUtRzI5MDAwMixFRy1VUEUtRzI5MDAwMyxFRy1VUEUtRzI5MDAwNCxFRy1VUEUtRzI5MDAwNSxFRy1VUEUtRzI5MDAwNixFRy1VUEUtRzI5MDAwNyxFRy1VUEUtRzI5MDAwOCxFRy1VUkctRzMwMDAwMSxFRy1VUkctRzMwMDAwMixFRy1VUkctRzMwMDAwMyxFRy1VUkctRzMwMDAwNAorMSxUdWUgMjUgSmFuIDExLDE5MzIwNC4zMTIyNDQ5NzEsMTcyNTAzLjI0MjIyMjA3MTY1LDEwMDQxMC45Mjc3NjczMjM3MiwyMDc1NzUuNzYyOTYzOTkzNTYsMjA5MjM0LjI4NDI5Mzk1MzI0LDMzODIzNTQuMjIxNTU0MDMxNiwzNjc1NjAwLjgyODUxOTA0NCwzMDEyNTA1LjkyOTI2OTkwODUsMjYxNjY2NS40MDU5NDE0MDgsMzI3MTQ5MC42MTUzMzc2NDU2LDY2NDM0My41MzcyOTczOTEyLDM4ODM2MjkuNjg5Mjk2MDM5LDc2ODU5Mi43MDExNjI3MTA4LDIwNDAzMTcuNzg1MzgxOTgyMywxODIzNjcyLjIwODk3MDQ1Niw0MTg2Mzk4LjIwMDE4OTg1MjYsMzAzMjg4MC45MjYwMTExOTczLDg1Mjk1OC41OTcyNzE2NjA2LDI0ODI0OTYuNzI2ODA4NjE3LDE2NTMyNzMuMzgzNDY5NDYyMiwyNDQyNDAzLjQ2MzI0ODY0MSwyNzEyMjI3LjEzOTQ4NDYxNzQsMjQxMjc3Mi4wNDQ4NTY0ODgsNTQ5OTg2MS42NzE3ODcwMjYsMzUwNzM1LjY4MzY2OTIzMDksNDM5MS41MTMwNTE3MzI4NTUKKzIsV2VkIDI2IEphbiAxMSwxOTMyMDkuMTQxNjg4NTgwNjIsMTcyNTA3LjU1NDY1NTgzMTgsMTAwNDEzLjQzNzkzODY2MjQ2LDIwNzU4MC44NjkxNTU1NjI5NSwyMDkyMzkuNTE1MDgxOTUwNDYsMzM4MjQzOC43NDQ4NzY0OSwzNjc1NjkyLjcxNzM2NTExNiwzMDEyNTgxLjI0MDU1OTMyNTYsMjYxNjczMC44MDY3NDI3MjEyLDMyNzE1NzIuMzkwMjc0MjI5LDY2NDM2MC4xNDUzNDAyMzU3LDM4ODM3MjYuNzc4NDUxMDUyLDc2ODYxMS45MTU3MzYyMTQsMjA0MDM2OC43OTI1MzIxMjQsMTgyMzcxNy43OTg5MDM1MTg0LDQxODY0OTYuNDU3NzM5OTM0MywzMDMyOTU2LjY0NzE3MTkwMDYsODUyOTc5LjkyMDk2NTc1NCwyNDgyNTU4Ljc4ODM1NDc2NDcsMTY1MzMxNC42NzU0NTQ1Njk1LDI0NDI0NjQuNTIyNTU5NzU2NCwyNzEyMjk0Ljk0NDMwMTY0MzQsMjQxMjgzMi4zNjMxMTU0Mzg3LDU0OTk5OTkuMTA1MDA2MDUsMzUwNzQ0LjQxODkxNDQ1NjEsNDM5MS42MjI4MzgxNTU2NTIKKzMsVGh1IDI3IEphbiAxMSwxOTMyMTMuOTY4ODU2MDIyNjYsMTcyNTExLjg2NjA5NjIxMzQzLDEwMDQxNS45NDcyODY4MTM1OCwyMDc1ODUuNzkyOTA4NDIwMiwyMDkyNDQuNzQ1NzAzNzY1OTIsMzM4MjUyMy4xNTY5MjY3MzgsMzY3NTc4NC42MDM3ODA0NzE3LDMwMTI2NTYuNTQ1Mjg0MTMwNiwyNjE2Nzk2LjE1NjU1Nzc5MDUsMzI3MTY1NC4xMjE0NDQ2NzksNjY0Mzc2Ljc0OTM3NzA2NywzODgzODIzLjg2MDgzODc4MTYsNzY4NjMxLjEyOTgyMTY1OCwyMDQwNDE5Ljc5NjY4ODU0MTMsMTgyMzc2My4zNzczMjMzNDI1LDQxODY1ODQuOTcxMzYwMDc3LDMwMzMwMzIuMDIyNjkxNjg2Niw4NTMwMDEuMjQ0MTE3MjQyNSwyNDgyNjIwLjg0NzMyODA5NiwxNjUzMzU1LjgzMzk3ODQwMjcsMjQ0MjUyNS41ODAzMTk1NTg3LDI3MTIzNjIuNzQ3MzgyMTIzNSwyNDEyODkyLjY3NjY4OTUxMiw1NTAwMTM2LjMyMjM5MzUsMzUwNzUzLjA2NDE1NjQ1NDEsNDM5MS43MzI2MjE0MzU1MjQKKzQsRnJpIDI4IEphbiAxMSwxOTMyMTguNzg2Mjk0NDg5ODQsMTcyNTE2LjE3Mjk2NDk0ODc4LDEwMDQxOC40NTIyMTAyOTIyNiwyMDc1OTAuMDc3NTMyNjU5OCwyMDkyNDkuOTc1OTcwMjc4MzUsMzM4MjYwNy4xMTM3MzEzOTU1LDM2NzU4NzYuNDg3MjAyMTk1LDMwMTI3MzEuODE5Mzc3OTMyNywyNjE2ODYxLjI5NDMxMzM3NzIsMzI3MTczNS42NjEyMTYzNTcsNjY0MzkzLjMzMjY3MDI2OTEsMzg4MzkyMC45MTI3NjUzMTU3LDc2ODY1MC4zNDM0MTg4MjEyLDIwNDA0NzAuNzg5MDU3NTc2NiwxODIzODA4Ljg5MzQ0NTg1NTIsNDE4NjY0MC41NzMwOTIzMjA1LDMwMzMxMDUuODk2MzQ2MDcxLDg1MzAyMi41NjY3MTcwMzQyLDI0ODI2ODIuODk4Mzc4NTg1LDE2NTMzOTYuNDIwODc2Mjk1MywyNDQyNTg2LjYzNjUyNDA4MiwyNzEyNDMwLjU0ODU3MTYzLDI0MTI5NTIuOTY5NTI2MzE3LDU1MDAyNzIuNjA4Mzk1MDQ0LDM1MDc2MS4zNjQ4ODA5NTI4Nyw0MzkxLjg0MjM5ODI4NzcyMQorNSxTYXQgMjkgSmFuIDExLDE5MzIyMy41NjQxMzA5MzQ2MiwxNzI1MjAuNDU5ODU1MTkxODUsMTAwNDIwLjkzNTc0NDY1MzE2LDIwNzU5Mi4zMDU3ODcwNDU0LDIwOTI1NS4yMDQ4NjEyNzY3OCwzMzgyNjg5LjMzODQ1MjI2NywzNjc1OTY4LjM2NDUyNDcwOCwzMDEyODA2Ljk0MTYwNDc3MDcsMjYxNjkyNS42MDIxODcxMjgzLDMyNzE4MTYuNDA3NDQzOTI2LDY2NDQwOS44MTcwMTc3MTgyLDM4ODQwMTcuODA5MjUzODgsNzY4NjY5LjU1NjUyNTg1NCwyMDQwNTIxLjcyNTM0MzQ3NjcsMTgyMzg1NC4wOTU4NTI5Mzc1LDQxODY1OTQuNDA2ODc5MzU1LDMwMzMxNzMuNzM5Njc0NTMyMyw4NTMwNDMuODg4NzA3MDA3NCwyNDgyNzQ0LjkxMzc2NTc4NywxNjUzNDM0Ljc0MjQ5MzkxOTYsMjQ0MjY0Ny42OTExNDc1MDY3LDI3MTI0OTguMzQ2NzMwODAzLDI0MTMwMTMuMTYxNjk4MTYxNiw1NTAwNDA1LjE1NTk5NzUsMzUwNzY4LjQ1MjE2MzcyNzQzLDQzOTEuOTUyMTQ3OTI0MjkxCis2LFN1biAzMCBKYW4gMTEsMTkzMjI4LjE4NTIwNDc5MjksMTcyNTI0LjY2NDA0NTAxMTYsMTAwNDIzLjMyNDAyMTQ0NDUsMjA3NTg4LjAyODg0NjY1NzU0LDIwOTI2MC40MjczNTM2OTE3NSwzMzgyNzY1LjE2Nzk2Nzc0NywzNjc2MDYwLjIyMDExMTI0NiwzMDEyODgxLjM1MDMxNTc1ODUsMjYxNjk4Ni43NDY5NTI1Mjg2LDMyNzE4OTMuOTYyNjc1NzE5LDY2NDQyNS44NjM0ODA0ODQsMzg4NDExMy45NDc0MjA3MzYsNzY4Njg4Ljc2OTEzMDY2NjcsMjA0MDU3Mi40MDA0NTY3ODcsMTgyMzg5Ny44Mjc4Mjc1NDUsNDE4NjIzNC42NzcwMjkyNzA3LDMwMzMyMTguMTcwNTU5NzU4LDg1MzA2NS4yMDk3NzE1NzYxLDI0ODI4MDYuNzYxNTExNzI2LDE2NTM0NjQuMzc0ODYzNTEzMywyNDQyNzA4Ljc0NDA0Nzc5MSwyNzEyNTY2LjEzNDg1ODY0NzQsMjQxMzA3Mi44ODY4MDI5NjQ0LDU1MDA1MjMuMTcyODQwMDE4LDM1MDc3MS4zNzY1MTk5MTI2LDQzOTIuMDYxNzU5NzU5ODczCis3LE1vbiAzMSBKYW4gMTEsMTkzMjMyLjE5OTUzNzEzMDYsMTcyNTI4LjUzOTE0NTc5MjI4LDEwMDQyNS4zMTEyOTg3NDA1NiwyMDc1NjMuMzQ5NTg3NzU4MywyMDkyNjUuNjIwMTUzNTU3MzMsMzM4MjgxNy44ODE1NTI0NjEsMzY3NjE1MS45Nzk4MTU4NzcsMzAxMjk1Mi41ODE0NTk4OTUsMjYxNzAzNi4wNjM4ODQxMzg2LDMyNzE5NTguOTkxODMyMzM1NSw2NjQ0NDAuMDcxMzI4NDY0NSwzODg0MjA2LjU4NDQ3NDE5NzYsNzY4NzA3Ljk4MTE2MzEzMywyMDQwNjIxLjkxNTU0OTc1MzcsMTgyMzkzNS4wMjcyODMwODM2LDQxODQ5MDguMjcwNDM5MjU1NSwzMDMzMTczLjgxMjgzMzcxMDYsODUzMDg2LjUyODM0OTk0ODIsMjQ4Mjg2Ny44NDgwNDE2MDcsMTY1MzQ2MS40MjM4NjA0NzkxLDI0NDI3NjkuNzk0NTEyMDY2LDI3MTI2MzMuODc0Mzk5NzIxNiwyNDEzMTMwLjU1MzIwMDIzNjUsNTUwMDU4NS45OTI5NDc5ODQsMzUwNzYwLjI1MTUwNzIwODc0LDQzOTIuMTcwNzAxODk4MjQzCis4LFR1ZSAxIEZlYiAxMSwxOTMyMzMuOTA2MDU1MjExNjcsMTcyNTMxLjE0MTAxNzA4OTc3LDEwMDQyNS42NzY1MjczMTU1MywyMDc0NzUuMDIwMDUyMjAyMjgsMjA5MjcwLjY3OTc4OTAxOTEsMzM4Mjc4OC4zMzI0Mzc1Mzc2LDM2NzYyNDMuMzA2OTQ1Nzg0NSwzMDEzMDEwLjIzNjA1NDE1NSwyNjE3MDQxLjc2NjQ2NTQ1MSwzMjcxOTc1Ljc1OTc5MzQ5NTMsNjY0NDQ2LjgzOTU5NzA3MzUsMzg4NDI4My43NTc2ODY5ODA1LDc2ODcyNy4xOTIyNDY5ODEsMjA0MDY2Ni40ODIzNTkxMzEzLDE4MjM5NDQuMzM2MDExMDc1OSw0MTgwNjAwLjk1MTUwMDk3MiwzMDMyNzk4LjU2NTk0ODk2NzQsODUzMTA3LjgzNzE4NjUxMzYsMjQ4MjkyNS42MDkxMDcwMzgsMTY1MzMzOC4zMTQ3MTAxOTI0LDI0NDI4MzAuODM5MTcwNDY0LDI3MTI3MDEuMzY4MjYzMTAzNSwyNDEzMTc5LjUwNzA4NTE1OCw1NTAwNDQyLjcwNDE5ODYwOCwzNTA3MDIuMjMwMTMwMjMyLDQzOTIuMjc2NTgxMDMyNDg2Cis5LFdlZCAyIEZlYiAxMSwxOTMyMjYuOTUzNzM0NDc3NDYsMTcyNTI4LjkyMjI3ODI5Nzk4LDEwMDQxOS42NzE0MDI3MTAxNiwyMDcxODkuMDA3ODA4MTUwOTMsMjA5Mjc1LjE2MTQ3NTYyOTA4LDMzODI0NjkuNDcxMDM2NjMyNSwzNjc2MzMyLjcyMjQ0NDMwNywzMDEzMDExLjY5NjM0MDAzNDMsMjYxNjg4OC4zMzA4NDcyNTg3LDMyNzE4MDkuMzIwODA1MjgzNyw2NjQ0MjQuMzE1MTY1MzU1MiwzODg0Mjk0Ljk1MTQ2MzkxLDc2ODc0Ni40MDA0NzUxOTM2LDIwNDA2OTAuNTk5MTY4MjMxMiwxODIzODM4LjE0NjU1ODE1MzIsNDE2NzExNS41ODkwNTI5MDYsMzAzMTIwNy4wODgwNzM0NDksODUzMTI5LjEwNDAyMDE1LDI0ODI5NjkuMzAxNTc4OTA2LDE2NTI3NzcuODAzMTc5ODQ3LDI0NDI4OTEuODYyNzU2MjQ1MywyNzEyNzY3LjY2MjY2OTM2NTgsMjQxMzE5Mi43MjY1MDgzMzcsNTQ5OTUzOS45NjUwMzQxNzksMzUwNDg4LjkxODA5MzcyMzM2LDQzOTIuMzY5MTMyMTQyMzYzCisxMCxUaHUgMyBGZWIgMTEsMTkzMTg3Ljg2MTUzODU5MjY3LDE3MjUwOC43MTcxMDAzMDQ5MywxMDAzODkuMTk2Mzg1MDc3ODEsMjA2MjkxLjk5MTM1ODg2LDIwOTI3Ny4yMDAwNjIzMzU0NCwzMzgxMTQyLjA5Mjg2MzQ3NSwzNjc2NDEzLjg4OTg1NTU3NywzMDEyNzg2LjA3MzU0ODEzNjcsMjYxNjE1OC42NTg4MTA0NDIzLDMyNzA5NTUuNDAzNTk5NDkwNCw2NjQyODguNjgyMjUwNTIyLDM4ODQwMzEuOTY3NTQ3NTAyNCw3Njg3NjUuNTk2NTgxOTUwNCwyMDQwNjMyLjIxODY4MzUzNCwxODIzMjY0LjgwOTgzMzcwNjEsNDEyNTU3Ni41OTI4MTQxNDQ3LDMwMjUxOTguNzIxNjY2NTg5LDg1MzE1MC4xODk5NjMyMDYxLDI0ODI5NTQuOTQ1MzA3MDg1LDE2NTA2NDIuMDU4MTQ5MDkwNSwyNDQyOTUyLjc5ODE3ODQzNCwyNzEyODI4LjMyNDk2MTI2NzQsMjQxMzA2Mi44Mjk2NDI5NDAzLDU0OTU4NjguNzAyNDMzNDY4LDM0OTc2NC40ODM1MzY1NjIzNiw0MzkyLjQwNTc3MzgxODk3CisxMSxGcmkgNCBGZWIgMTEsMTkzMDMwLjYyODExMjI1MTg3LDE3MjQyMi4zNTU1NzM2NjE3NywxMDAyNjYuNDUzNDYyMTAzNzMsMjAzNTMzLjY5OTE0NjkyOTE3LDIwOTI2OS4xMzQ2MTY2Mjk2NiwzMzc2MzI4Ljc5OTA2MjA1ODMsMzY3NjQ2MC4yMjYzODcwODEsMzAxMTY2MC42NDc0OTQ0MjkzLDI2MTMzNTcuNDcyODE0Nzc4LDMyNjc1NDkuMDcxODUxNDMyMyw2NjM3MjMuMzQ3NjAxNzUxOSwzODgyNjU0LjMxOTg3MDc4NCw3Njg3ODQuNzM3MDY2MDMyNSwyMDQwMjQ3LjUwODQ5NTc0MiwxODIwODQwLjA4NzU5NjM1NzMsNDAwMDQzMC45NzQxMjA2MiwzMDAzMzg3LjgzMjA2NTQyLDg1MzE3MC41MTIzMTQ2NTI2LDI0ODI3MDYuMDEwNDg5MTEsMTY0MjkwMS43Mzk1MzU0MjExLDI0NDMwMTMuMzU3NjI5MjM0NCwyNzEyODYzLjQyMTAwNjIzMTYsMjQxMjM3MC43NzkyMzYzNTksNTQ4MjIxMi42NjcxMDI4MzA1LDM0NzM3NC4xMjMzNDgxOTUsNDM5Mi4yMTQ1NjEyOTg2MDgKKzEyLFNhdCA1IEZlYiAxMSwxOTI0NDMuODY4MTc4MzgyMjUsMTcyMDk2LjYzMDI3NjUzODc4LDk5ODAyLjE1MjU2MDIxNzgyLDE5NTM0NC40NzM0ODY2ODY3NCwyMDkyMjAuMDQyODI4MDI4MDYsMzM1OTYwMy42OTk1Mzg1MjgsMzY3NjM2Mi4xMjgwNzMwNTUzLDMwMDcwMjkuOTYzNDE2NzE2LDI2MDMxNzguNDI4ODQ1MTU4MywzMjU0NzgwLjM5OTUyODczMyw2NjE1NTAuNTQ2ODEyMjY0NSwzODc2ODMwLjQ5Njc0Mjg4NTYsNzY4ODAzLjYyMzI2MjY5MzUsMjAzODU5My4xNjQ5ODgxODE4LDE4MTEyMjguNTk2NDU3NDI1LDM2NDUzMjYuMzExOTk1MzE5NiwyOTI2NzIxLjg5Nzk1Njg0NjcsODUzMTg3LjY3Njc0NTQ0MDgsMjQ4MTUyNi40MDE4NzMzOSwxNjE1NjUxLjE3NDExMzcyNiwyNDQzMDcyLjMyOTk4MjQ3MiwyNzEyNzg1LjY1NDA0NjE0NzYsMjQwOTUwNy4xMjYzOTA4MjMsNTQzMzEwNS4yNTAxMTg1MTIsMzM5NjgzLjg4NDM0MzU0MDA2LDQzOTEuMTE1NzA3NzQ2MzU0CisxMyxTdW4gNiBGZWIgMTEsMTkwMzI0LjYzMzc2ODkxNjA3LDE3MDkzMC44NTU0NTc5Njk4LDk4MTA4LjMwOTYzODk2NzgyLDE3MzIwNi4wNTk1ODYxNTc3MywyMDkwMDcuMTQ1Nzg3Mjk0OTIsMzMwMzE0NC44MjY5NTM2NTgsMzY3NTY3NC40NDc5Nzc3ODgzLDI5ODg5OTEuOTM3NDk1NTk2LDI1NjcyMTkuMDU5NzExNjQ2OCwzMjA4MzkyLjIxNjExMTY4NjUsNjUzNDkzLjkzOTc4Mzc0NzQsMzg1MzYyNS4xMjkzMTYxNDgsNzY4ODIxLjM2NzkyOTQ1NzcsMjAzMjA3OC40OTU4NTE2NjQ2LDE3NzQ2MDkuMjYwOTczMzE5LDI3OTM5MjguOTYyNjcxNjgsMjY3NTQyMS44NDg1ODg2NjgzLDg1MzE5Mi4wMjAyODg3NzA5LDI0NzY3MjYuOTU5MTU4ODIwNiwxNTI0MzQ2Ljg4Nzc5MjQ2MjMsMjQ0MzEyNC43MDA2NDI2MjEsMjcxMjIyMS4wODM4NTAyODQ2LDIzOTgzOTguMjUwODc4MzYsNTI2MjU5NS43MTI3NTUwMjksMzE2Mjk2LjE3MjU1NjkxMjI0LDQzODYuNDcwMTA4NTkxMjc4CisxNCxNb24gNyBGZWIgMTEsMTgyOTg3LjU0MDUzNDQ2OTYsMTY3MDYwLjkwMzA3NTg5MDAzLDkyMjgxLjA2MTY4MTg3NjE1LDEyNjAyNC40NTAxNTUwMDk2LDIwODE1My41NzIxOTQ3MTk5LDMxMjIzNDYuNzg2ODc4OTM2NSwzNjcyNjE5LjcxMjkzMjgwOTcsMjkyMTMzNC44MjI1NjAzODY3LDI0NDU3OTMuOTA1MTYwMjE2LDMwNDc4MzEuMTE2MjAyODM2LDYyNTAyOS42NzczMzQyNDQyLDM3NjQ4MzEuOTQ5MDAxMDk4NSw3Njg4MzQuMDg5Njc5Mjg3NywyMDA3Mzk4LjE0OTUxMTcxMTcsMTY0NDYyNi42NDI0MDg0NDQ4LDE0MzM2NzAuODExMTI3MDI1MiwyMDAxMDI0LjI1NzA1ODYyNTYsODUzMTQ1LjMyODQ2NjMwNzUsMjQ1ODI5Mi43NDEyMjc3NjMyLDEyNTc1NjkuNzYzMzc3MjMwOCwyNDQzMTUwLjA3NTIyNDE1MTQsMjcwOTYwMy43ODM1MTgzMzUzLDIzNTY4NTkuMTM2NTI3NDA4NCw0NzE4MjUxLjY2NjYyOTQyNywyNTUyNjguMDI3NzY0NTI0Myw0MzY4LjI5ODY3NzY1Mzg3MQorMTUsVHVlIDggRmViIDExLDE2MDA5My4xMzEzNjQ0NTkxLDE1NjE1OS4zNjQzNjQ4NzU5LDc1MTAyLjU2NDgzNTMzMzEsNjI5MjkuNzk1OTAzNzA3MjE0LDIwNDg3OC42MzQ0NTE0ODUwNCwyNjEzODEyLjI1NzI5NjA0MzQsMzY2MDI1Ny40OTM1NDQ5OTQsMjY4NTI4Ni4zNjgwNzE1NDQsMjA4MDc3NC40ODE1OTkwMDc1LDI1NTg4NzkuMTcwOTMwMzgxLDUzNTk3Mi4xNjA1NzQzMTU4LDM0NTAyNTguMzkxOTE3MDUxMyw3Njg4MjUuMDY4NTE1OTY2MywxOTE4MzYwLjAzNTc4OTM5MSwxMjY1MjM5LjE4ODU3MDYyNSwzODQzNzcuNzI0MjA1NTk5ODYsOTA3Mjk5LjI2NDAwMTA1ODYsODUyOTAwLjMyNTI5NDU5NTQsMjM5MTYzOS4yODY0MTI5NzUsNzE3MTEzLjM1MTU3MjUyNjUsMjQ0MzA2Ny4yMDg4MDg1MDksMjY5ODUzNC4wNzg3ODI1NTgsMjIxMDU0OC43NTU4NzI5OTU2LDMzNDI5OTIuNTI0NDU0MDcyNiwxNDQ1MDYuNTg3Mjk1NjM4NTQsNDMwMC41Nzg0MDc2NjA1NDQKKzE2LFdlZCA5IEZlYiAxMSwxMDYwODguODcyODMwMjU2NzksMTMzMjAwLjk5NTA2OTI3MzAyLDQxMjExLjI5ODY3MjY1NjQ1NiwxOTA5Mi43ODAwNDc3MDE0MiwxOTMxNjcuNjY2OTk4NzczNDMsMTU3NzczMy45ODM4Mjc0NzY5LDM2MTI3MzIuMTE4MzUzMTU0LDIwMTU5MDEuMTc2MzQwNzgzMiwxMjgwMDkyLjE3MzYyNTk2NzIsMTUwOTU1Mi45MjIzOTc4NzEsMzM1MjI1LjMyNTA5NjgzNTI3LDI1NTY0ODEuMDc4NDAzNTU4LDc2ODcyMy40NDc2NDMyMDQ4LDE2MzQ5NzEuMzQ1MTc3NTM3OCw1OTU4NjIuMjEyMDM2NDU1Nyw1NDQyMC43MjY4NjcyMDc5OTUsMTg2NzI0LjE3MjYwMDUyNTUsODUxOTEwLjYwMjAxMjQzNTgsMjE3NDgzOC41NzMwNjk2NDEsMjAwOTA1Ljc3MjIzNjMxNzU0LDI0NDI1NjEuNTYxMDM1Mjc4NywyNjU0MDA0LjA4MzY1Njc5NDQsMTc3Mjk4My4zNzY1MzA0NTc1LDEzNTgwNTYuNzI1NzY2MzA5OCw0Mjc5MS4yMjc2MjkzMzkzNjYsNDA2OS4zNjQ2MTY5ODI0NzYKKzE3LFRodSAxMCBGZWIgMTEsMzgyMDkuMDAzMDMwNzMxNDMsOTc4ODEuMDIyNjYxMzg1MDEsMTA5MjkuNTE4ODM0NDc2ODUsMzU0Ni4zNTkzMDg1NDM1ODg3LDE1Nzc4OC40NTY5Mzc1NjgyNiw0OTc2NzYuMDc5ODUxOTAwOSwzNDQzMjAyLjI0NzQyNjg5NTQsODk5ODY5LjE0MTM5MTYyNjIsNDAyMDc1LjY5NDgxOTU3OTI1LDQzOTY5NS4yMDg1MTM3NjUzNiwxMDkxODUuMDgyMjM0MDg3NjIsMTEwMzc1NC42ODExODMzNzk0LDc2ODIzNi4zNjMxNjY5OTY5LDk5NTAwNC43NjQyNjU2NTM5LDEyNDkwMS40MjUxMTY5NzczNiw1MzgyLjUzMzkxNzg3NzU0NiwxOTkxNS40MTk3MTIxNzIzNzQsODQ4MjI5LjE4MzQwMDI1NTcsMTYwOTM3OC44MjkzMjk5NTgsMjU5NzIuMDAxMzY3MjcyNDYsMjQ0MDQ1MC4yMjI2NTMyMiwyNDg4NTk3LjAxMTMzNjMwMyw5MjU0NTQuMzExNjkwMTQ5LDI0NTA2OS4xMDAyNzExNzQ5LDYwNzIuNTYyMDA0Nzg5NDk1LDM0MjEuNTEwNTUwNzc0OTk3MgorMTgsRnJpIDExIEZlYiAxMSw2MjEwLjE1NjAzMDA4MTY3OCw1NjIyOC4wMzcyMzIxMDc2MTQsMTM3Ny4wNTI3NzcwOTg3Nzk2LDQ0My43MjkwNTIxODAyNDUzLDg2NjQ3Ljk5Nzg2MjM2MzgsNzI1MjcuNTcwNzIzODkyNDgsMjkyMDA3MC43MzcxMTg0NTM3LDE3NjgxNC44MjM2ODIyMzAxNyw1NjYzNC43NDE4MjYzMjYzLDU4MDE3LjEwNzA0Nzk3NTI5LDE2MDU4LjA5MjQyNzcwMDE5NiwyMDgxMDEuMzAxMDc1MTA4NTUsNzY2MTk0LjgxMzMyNTQzMTQsMzAyMDI5LjA3ODkwNTM0NjU3LDEzMDU5LjQ2MTEwNDg0MjMyOCw1NzguOTM4MTMxNDQ3NDA5NSwxNzA2Ljk0NDM5ODIzMzk1Miw4MzUxMzYuNDc0NTQxOTUxNyw3MTk2MzMuNzY1MDE3MzI0MSwyMjMyLjA4OTczNjA5MjQzNywyNDMyMzczLjAzMTA2MDY0MDcsMTk4MjE5OC43Nzc3NDU1OTkyLDIyMjY3OC44MzQ1MjQ5ODE1NiwyMzkwMy42MDQ3MjU3MDgyMyw1NTQuNzUxMzQ3MDM1Nzc3NywyMTU4LjUwOTI2MjYyNjIyMDMKKzE5LFNhdCAxMiBGZWIgMTEsNTkyLjc5MTIwMDgwMzgyNTIsMjIyOTQuNzc0MjA2NzA2NywxMTkuODY5NzcyOTk3NTEzOTgsNDkuMzkxMjUxNjI5NTc0NTUsMjI1MjcuOTg0MTY1ODMzMzQsNjU3My4xNTg0MTMzOTMzMTUsMTc2OTA1My4wMzYzNDkwOTI0LDE3ODM0LjcwMTIxMzY3MDIyLDQ5NzMuMDcxNDIzNDMxNDYzLDQ5ODIuMjkyODUyOTU4MTIzLDE0NDAuMzQ0OTQyNjAwMTQxMiwyMDUwNS42MTA0MDgwMTgyMTIsNzU4MTk4LjQ2ODU0NjQ4ODQsNDA5NDIuNDgwNjU3MjI5MzgsMTA3NC40NTE5NDM2NzY5NDQ3LDE2MC45Njk1MDM2NTc2OTgxNywyMTguMzQwMjgwODg5MDQyOTYsNzkwODc0LjAyNzI5OTg0NjIsMTQ2Mzc4LjAyMjQxODgxMDIzLDIxOC4zNzc3MDM4MzU1ODMxMywyNDAyNzgyLjg3NzM1ODA5NzYsMTAxMjk2MS42NDcxNzU3MzIsMjUzOTkuODYzMTgzNTYxNTcsMjAxOS4wNzU1MjQ4NTc0MzM3LDUzLjk4MDgzNjU5NTA5NzI5NCw3OTEuNzA5MTY2MzQ2MTAyCisyMCxTdW4gMTMgRmViIDExLDUzLjExMzA2NzE0NTE0OTI5LDU5MzMuMDc1MTQ5NDA4MTQ2LDEyLjIxMzE3MzkwMzI3MTUzNSwxMC4xMzYzNzA3ODY4NTY4MjgsMjcxNS41MjcyODc3NTMyOTc1LDYxMC4zNzAyNjczOTE0NzUxLDUzNjMyNC42NzM1MjU2NDk4LDE0NzIuNjQ2MjExNDM3ODg0LDQ1Ni4yNjE4NzI2Njg4ODU4LDQ3NC4wNTgyMDY1OTkzNzkxLDEzMC4yMzYxMTUwMDY1MzM2LDE2OTYuMTc2MDI2NDg2Njk4Miw3MjkyOTguNjIzMzY3MTA0NCwzNTI4LjgzNTUyMTY4OTUxNCwxMzEuOTY4NzY5OTE1MzgwNjgsMTMyLjQ2MjMzMzYyMzI5Nzg3LDk4Ljk3MjI1ODI0MjMwMDMxLDY1ODkyMC41MzI3ODE3OTY1LDE1Mzk1LjAxNzIzMDkzODM1OCw2MC45MjM1NTA0OTU3NTkzNSwyMzAwMTk2LjIzMDY3MDc4MDQsMjM2NzI4LjA1MTk1MjYyNTIsMjEwMi45MTQ5NjY0OTc1NDMsMzA0LjI4MTA2MzIwNDkxNzIsMTMuNjM2MDgxNTQ3MDI1MTE2LDE0Mi45MDc2NjE1NjI0MDI5CisyMSxNb24gMTQgRmViIDExLDkuNDkzMTY2NDgzNDA4OTcyLDExOTIuODA4OTA2MjE5MTU3NywzLjYzNjkxNzQ3Mjc2MDQ4NDUsNi42ODE4MTcxMTE1MzMyNDgsMjI3LjIzMTQzMTI1MTU3NDU1LDEzOC4wMTU4NDk4NzY2MTkzNCw3Mjc4MS45MzUzMDc1MDg3NCwxOTQuNjIzMjA3Njc5MTU3ODIsMTA0Ljk2OTU3NTkwOTQyNTIyLDEyMy42NTQ0Nzc1NjU1NzEzMSwyNy44MjY2NjQ4MTE4NDQ0LDIzNS4wMDQzMjA1NTQ2OTI2NCw2Mzc1OTQuNDk0NTgwNjE4MywzMjcuMTA2MDc0MTk0MDIzNSw1OS4wMzA1OTk3OTgyOTE3MiwxNDcuNDMyOTE1ODk0NTkxMzYsOTcuOTQxNzg4NDgzNzgyMTksMzgxOTgzLjI0NzU5MjgyNDc0LDEyOTguMzUxOTgzMjcxMjE2Niw1MS42NTQ2OTg4MjAyNjkwMSwxOTgyODg0LjUzODQ1MzgxNTcsMjY1MDIuMjY3MTM0OTYyOTQsMjI3LjMzMjUzMTgzNzk4Njg2LDE3Mi43OTg0NDg4ODAwMDMxLDEwLjk2MjkzMTgyODU1NjkxMywxNC44MzUwMzU4Mjg5NTA4NDUKKzIyLFR1ZSAxNSBGZWIgMTEsNi4xMDQ0NDE1MDI5OTg3MTksMjA5LjI5NzEwMjU4MTU3Mjc0LDMuMTUyNDIxNDE4MTkzMzgsNy4wNzU3Nzc1NzYyMjc1NTEsMjMuMTg5MDAzMTcyNzI2OTI0LDEwNS4yNjYwNTM5MjQ5MDg1Niw2Mjg1Ljg2NTkyMjU4NjQ0Miw5Ni4wNTE4MTI0MDM1MTQwNSw4MS4yNzYzNTM3MDU2MjY4MywxMDEuOTE0NjAzNTQ1NzcxMjYsMjAuNjMyOTE3NjM1MDAzOTUyLDEyMi44Nzg0NTE5MTE0MDA2Nyw0MTkxODMuNjYxNzMzOTEwODUsNzkuNDcxOTc4NDQxNDk3MSw1OC41OTAyMDIxODY0MTI3MiwxNzMuNTczMzY4NDUzMzYwMjUsMTEyLjk3ODQ3MTEwMzUwMDI3LDEwODAxNy42OTI1ODEzMTU3LDE2OC40NTk4MzY3NjI3NDM4Niw1OC4xODgzNDExNzIxMzQ3NCwxMjU1NjU2LjU3NjQ5NDAyNTMsMjE4OS41NDU3ODUxOTU3NTEsODEuNzkxMDU4MjI1ODkwNTQsMTgxLjAwNTc3Nzg5NzQ4MjEyLDEyLjIxNzg4ODMzNzQ4NzcyNywxLjM0OTAzMTQ0MTU3MzE0MworMjMsV2VkIDE2IEZlYiAxMSw2LjUxNjkzNzIxNDgxMzE2LDM2LjU2MDIxODY5OTUwNjEzLDMuNTU5NzM2MDk0NDYxNjI0LDguMjEwNjg2NTU3MjQ3MzQsNy4zNTI3MzUzMDUzNTc4OTQsMTE2LjM4ODQ2MDIwNDg2MTA1LDU4NC43MjI0NDIyNDg3MTIxLDk3LjY0MDIxMjcxNjU0NDA2LDkwLjIwMjIzOTUyODMzOTIzLDExNC4zMDMwNjIzMDY1NjAyMSwyMi43MjE3OTg3NjUxNzA3MSwxMjYuNTgxNzkzNTk2MzI4MTEsMTQ2MjYwLjIxMTY4Njk0MjM1LDYzLjM5NjgyNDI2MTIxNDc0LDY3Ljc3NDM0NjgwNzk2OTUyLDIwNy44NTM3NTU3NzI2NTA2LDEzNC41MTcyMjIzMTY4NDM4NiwxMzg3NS44MDc3NTU5NzU0MTgsNzkuODgyNjM2ODQyMjE4ODYsNjguOTE5MDQzOTc5MzY3Nyw0MTAwNTAuOTk3NjM3NTg4OTQsMjQyLjE2NTk5NDU5MDg5NDEsNzYuMjkwOTY0NTkzMjc5MDMsMjExLjI3NDY5NDk4NjE2NTMsMTQuNDIyNjg5NDM2OTA5OTc5LDAuMjI2ODk1MTI2NjAxNTQyMzUKKzI0LFRodSAxNyBGZWIgMTEsNy42MDIyNTUzNzE1MDg3MzMsOS43MTU3MzQwNTc1ODU3MzMsNC4yMTYyNTMwMDkwNzUxNjEsOS43NjQ5OTU2Mjk4OTE0LDYuNTY4NjIyOTMxNjA5OTI0LDEzNy4yMjEyNjQyMjU4Mzc4NywxNDIuODk0NDg5NDE1OTIyNzIsMTEzLjQwMzc2NDM4NzQyMzk2LDEwNi40OTEyNTc0MTM3Njg0NywxMzUuMjY0MDMwOTY3MTczMTcsMjYuNzc2NzkyNjU4NTA3MTQ0LDE0Ny4zNjc5ODcwNzQwMjY1LDIyNDE5LjE0MzMzOTQ5OTQ0Niw3MC43Mzk1MzM2NjAxNDYzOSw4MC44NDkwMDUyNjUxNDIzMSwyNTAuNzI5MjkwMTY4MTg2MDUsMTYxLjk3Mzc0NTMzNDEzNjIzLDExNzkuODQ1NzI1MTkwNjk0Niw4MC4yNjgzOTMzMTA5MjYwNiw4Mi44NDc1MTU1Nzg2NTE0Nyw1OTIxNy41NjM2MDE0MjYwMiw5MC45ODQ4NDc2NDU5MDYxNCw4Ny4zNDE3MTk0OTUzMjg0MywyNTIuNjc3MjU1MDAzMDI1NDYsMTcuMzA4Njk0ODM3ODEzMzQsMC4xMzgzMzM5ODQ2ODUxMTMyNAorMjUsRnJpIDE4IEZlYiAxMSw5LjA2NDY2Mzc5MTM3ODgxNCw2LjEyNTA0ODAwMjE2MDM2LDUuMDY3MDAwMDMyMDM0NDQ5LDExLjczMzU1OTU3NjQzNzEyOSw3LjQ2NjgwNTk2MjcyMjQ1LDE2NC42MzQ5NzAwMDc3MDkzLDExNC4yNTA2NTMxNDk0MjgzLDEzNS40MzkxNTg5NjY0MDY3MiwxMjcuODYxMzY4Nzg1MDg0NCwxNjIuNTU1NDQ5MzE1MzAwNjgsMzIuMTI2NzA3MjgyMzk0MDksMTc2LjEzNTQ4OTU5MjAxNSwyMDE4Ljk4ODI3MzY1NTk1NDgsODMuNjI1MzY1ODk0MjQ5MTcsOTcuNDgxMzE0MjUxNTMwNDMsMzAzLjIyMTQyMjA0MTEyLDE5NS45MzcxMDM4OTk4NTA3NywxMTQuMTQ5NzE1NzkwMjg2NDksOTIuOTcxMjg2MjEwNTMxNzIsMTAwLjE5NDUwNTg3ODQyMTM1LDUyMTYuMjA2NzcyODgzODE5LDg2LjAwNDIxNDcxNjY4MjAxLDEwMy44OTI0NjUwNjMxMTQ5OCwzMDQuOTUzMzIzOTMzODMzNSwyMC45MTMwODA2NTEyMjY2NCwwLjE0NjMwMjM4NjU2NDc0Njg3CisyNixTYXQgMTkgRmViIDExLDEwLjkwODQyODMzNTg5NjU2Myw2LjA5Njc0NzU2ODAwMzc4MTUsNi4xMjYxMDYwMzA2NjQxNjEsMTQuMTYxMjY1MTc5ODQyODU5LDguODY1MzE1OTc4NzAzNjQsMTk4LjkyNzIyNjU3Mzc3OTksMTI3LjUxMTY2ODg2NDAzNjg0LDE2My4zNzk0NjA5MzI1MjY0OCwxNTQuNTY2MTgxODEyNzE4MjcsMTk2LjU3OTUzNzI5MDMxNDY1LDM4LjgyMzI3MjMwNjM2Njg0NiwyMTIuNTQwOTMyNTkwNjk4ODIsMTc2LjYxMDkxNzY1OTk3MzM4LDEwMC40NjQ3ODAzNzY5MTkyMiwxMTguMDM0MTI3OTkyNzY2NDEsMzY2LjQ1NzE3MTg3OTkzMDM0LDIzNy4yMDc5OTU0MzU2NzI2NCwzMS40Nzg5MTI5NDg4ODc1NCwxMTAuOTA2MjM2NjY4MDA5NzEsMTIxLjM3OTU3NjI4NTU5OTc0LDQ2OC4zODAwNDU3OTcwNTY3Nyw5OC42NzE2NTY4NTgyMzkwMiwxMjUuMTE2NTI3NjIwNjE5MDcsMzY5LjMxODk3NzE1NTI3Njg1LDI1LjMyMjg2NzkzNTQwOTkyNCwwLjE3MDczNjI4ODcwNTcxMjY3CisyNyxTdW4gMjAgRmViIDExLDEzLjE3ODUzMzE4Mjg5MDU0Nyw2LjgzNzg2NTYyMDI5OTYyMSw3LjQxODk4OTQ5NTQxOTI1NywxNy4xMDAxOTkyMDQyMTQ1NDcsMTAuNjY4Mjk4MTIzMjc0MTYyLDI0MC45MTM1MDQzNDkzMjE5MywxNTAuNzM1MDEyNDg2MjY1NDUsMTk3Ljg0OTUzNjUzNTk5NDQ3LDE4Ny4yNDI5NTMzNzQ2NTA4NSwyMzguMTUzMzg4OTkwNzYxNzgsNDcuMDI0MjczNDMyMDkzMTYsMjU3LjQxMDY3NTI4NjIxNjUzLDM0LjEyMzczNDUyMTg4MTAzLDEyMS40ODEzNTIzMDg1NzI3MSwxNDIuOTkwODkwMTc3MjgzMDMsNDQxLjQ4OTgyNjY3ODIwODAzLDI4Ni41OTgyMzI2MzQyNzM4NywyNi42MTA1ODM0OTU2NzE5NywxMzMuNjkzODc5MzE1MzQ5NDIsMTQ2Ljg0OTc5MzYxMzMwNzk1LDEwMS4xNTExNTYzNDAwNzQxNywxMTcuNDMxMTA4MzQ5MjM2ODEsMTUxLjQzMTM5Nzc1ODE5MDE3LDQ0Ny4yNTAyOTE5MTAzMzA5MywzMC42MzA0NTM0NDI1ODk4NSwwLjIwMzk2NjM3OTI3OTA5ODkKKzI4LE1vbiAyMSBGZWIgMTEsMTUuOTI2NTgzMzUyMjY3ODA1LDcuOTU4MDY5MjE1OTI3MzM2LDguOTcyNTk2Mjk2Nzg5MTQsMjAuNTk4ODQ5NDM3NzM4MTE0LDEyLjkwODM1OTk5NTUxODg4NCwyOTEuNDg1MDMwODA0OTI4NiwxODEuMDc5MzY3NDM1NTYzNjUsMjM5LjY0NjY4MDQ1NzcyMzgsMjI2LjU4Mzc0MjI0NzcxODgsMjg4LjE1MTkyMjIyMzM4ODQsNTYuOTAxODIxMjk1OTg5MDksMzExLjc3MzYxNzI3NDE0NTQsMjMuODM3OTkyNzgzNDgwOTksMTQ3LjE4MjQ2MDI1MTAxODAzLDE3Mi44Mzg4OTgwMDQyNDg4Miw1MjkuMTk2MDUyNDY0OTMyOSwzNDQuODQyMjA0MTgwMTIzNjQsMjkuOTc1NDU1MzQ0NjEyMzUsMTYxLjgzMjk2OTQ2OTUzNTc4LDE3Ny4wMjE4ODU4NTQ3Nzk0LDc1Ljc0MDUwMTMxNjM2NjcyLDE0MS40NDUxNDQwODMxOTI0LDE4My40NjUwNjY5NTg0NDIzNSw1NDAuMTk4ODM5NTQxNTcwMiwzNi45MjAwOTE4NTY2ODc2NiwwLjI0NTgyNjE3NjMyODE4Mjg1CisyOSxUdWUgMjIgRmViIDExLDE5LjIwMzAwMDcwMjM1OTgzNCw5LjQxNDgyNDM4NTc2NzM2OCwxMC44MTIxNTcwMjEzOTUwMjcsMjQuNzAwMzI3MjMyMTc1MjA1LDE1LjYzOTQ4MTcxNzAzOTk5NCwzNTEuNDkzNzcyMjM4Njg4NSwyMTguOTUxMDA5MjIyNjU3NDYsMjg5LjU3MDU0MzY5MjY2NjEsMjczLjI0NzkxOTQxNTc4MjksMzQ3LjQwMDQxODMyOTczOTg2LDY4LjYyMTEyMzk0MDc1MjU3LDM3Ni42NTU0OTE3MjE4MDg5NywyNS45OTcxNjM5MzAxNzk1MywxNzguMTIxNzYxMTAzNzIxMjQsMjA4LjAxOTY5MTk1ODA2MzQsNjMwLjIyNzYyMzA4NjI3MjIsNDEyLjUzNzM5NTE4NzU3MjgsMzUuNTEwMzc2MDc3OTIwOTEsMTk1Ljk3OTYxOTU3MDgxNTc0LDIxMi4yNDgwMzcwMzQ1MjI2NCw4My42MDg2OTA1NDg1Njg2NywxNzEuMTk2NjMxOTMxNTAzODIsMjIxLjg2ODc2NzM3MDcyNTc4LDY0OS40NTQ1OTY2Mjg2MzA3LDQ0LjI2MzU5MjgzNTExOTA5LDAuMjk3MjMzMTEzMzYwMTUyODUKKzMwLFdlZCAyMyBGZWIgMTEsMjMuMDUzNzU2MzIzOTMzOTU3LDExLjI0MzAzMjUxOTE4NzE3OCwxMi45NTk2OTkxMzYxMDM2NzMsMjkuNDUzMzM1MDU5MTkzMjIyLDE4LjkxODU4NjM1Mjk5MDYxNiw0MjEuNzQzOTIxMjc0OTkyNTQsMjY1LjI2ODE4NDAwOTczMjM1LDM0OC4zNjQzNjExNzg1NTEzLDMyNy44NTIzODE0ODYzMzIxLDQxNi42Mzg4NjIyMDY5MzEwNCw4Mi4zNDY3ODg5NDcxMzY0Myw0NTMuMDEyMTAwOTYwNjM4NDYsMzAuNTg0MzU5Nzc1NjMzMjQyLDIxNC44Mjg2NTY5NDg2MDU3LDI0OC45MDA5MTkxNzE1MzI0LDc0NS4wNjQ3NzgwNzM0MDM5LDQ5MC4xMTI0NjUzNzc4NzMwNCw0Mi42OTQyMDE4NDE3Nzk0NDYsMjM2LjgwOTYyOTk3NjUxNjUsMjUyLjc5OTg0MTIzMjk1NDM1LDk4LjYwNjU4OTM0Nzk5MTc3LDIwNy40MDI4ODI1OTIxODk5LDI2Ny4yNDk5NDAwNTg3NjQ1LDc3Ni4wNjg2NjI2MjU2NjE1LDUyLjcyOTI3NTIyODk4OTQ0LDAuMzU5NDkxMzg5NzgyNTIxNQorMzEsVGh1IDI0IEZlYiAxMSwyNy41MTQzNzgzMTUyOTAyMzcsMTMuNDc4OTQ0NDMwNzM0MDA3LDE1LjQzMDkzMzk1Mjg2MDMyOSwzNC44ODIyMDI0NzE2NTI5NiwyMi43OTg0NTYxNzg3Njk1Nyw1MDIuODAwNDI4NDY5MTM1ODUsMzIxLjAzMDcyMDI5NDE0ODIsNDE2LjYwODc3MTg5MjQxODMsMzkwLjgzMDA1MjU2MDQ0NjYzLDQ5Ni4zOTI2NzQ0NjE3MzIwNCw5OC4xOTAxODYyNjk3ODczLDU0MS41ODA3NzA0ODg2MTIxLDM2LjY3Nzk1NDU2ODIxMTkxLDI1Ny43NTE2NzA5ODQ5NTksMjk1LjczMDA5MzkyMzg2MDc1LDg3My44MDM2MDc4MjkyODIzLDU3Ny43NjgxNTcyMTgwNDc3LDUxLjY0MDgyODU4OTIwMjcyLDI4NC45MjI2NjAzMjIyNzUyNSwyOTguODI1NDA3NjE4ODY3MywxMTguMzU4MTQxNDQzMjEyMTksMjUwLjc5NjE1NDA3MTEzOTI4LDMyMC4xMDU3NjY1OTUzMDgsOTIwLjcxNjA3MDE2NzcyMjYsNjIuMzUwMzkyOTg2NjgzODksMC40MzM3MjIwODk0NzAzNDY5NgorMzIsRnJpIDI1IEZlYiAxMSwzMi42MDg4MTIyNzgxMjEyODUsMTYuMTcyODE2MjY4NzY4NDQzLDE4LjIzNTAyMDcyMTI5ODc2Nyw0MS4wMDM1MzE5OTczODM0OSwyNy4zMjMzMTMxNDU0OTI5MzIsNTk1LjAzNzI1NTU5NjcyMDcsMzg3LjE4NjM1Mjc3NzIwODYsNDk0LjcwODI3ODg4OTY4NjksNDYyLjQ2MzA2MTY5OTcxOTIsNTg2Ljk4MjcyNTgwMjg2NTYsMTE2LjIyOTUwNTIzMTM1OTY0LDY0Mi44NzI5MzA1ODE5MDc2LDQ0LjMxODk4NDU1Njk2MDY1LDMwNy4yMjg3MzI4MTkzMzQ2NSwzNDguNjI4NDQwMDY2ODcyOCwxMDE2LjI3NjMwMjM4MTk0OTEsNjc1LjQ4NDcwMTcxNTQzNzIsNjIuNTY2OTM1OTA1MDA4ODUsMzQwLjgxMTM3MTg0MjcwMzMsMzUwLjM1NTExNjQ2Njk0ODYzLDE0My4wNjcwODgyMjMwNDkzOCwzMDIuMDUzNzA0NDIyNDQ0OCwzODAuNzkzNzk2Njk0NzI3MzUsMTA4My42ODU3Mjc5MzQzMTgzLDczLjE0MTIyMzU5Nzk1MzA5LDAuNTIxMDM0NTYwNDg0ODEwNwpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Jbm9jdWxhdGlvblRlc3RfUktfUmVmZXJlbmNlL1Rlc3RTRUlSL3J1bnBhcmFtZXRlcnMuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Jbm9jdWxhdGlvblRlc3RfUktfUmVmZXJlbmNlL1Rlc3RTRUlSL3J1bnBhcmFtZXRlcnMuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ3Zjk4NDUKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0lub2N1bGF0aW9uVGVzdF9SS19SZWZlcmVuY2UvVGVzdFNFSVIvcnVucGFyYW1ldGVycy5jc3YKQEAgLTAsMCArMSwyIEBACitkaXNlYXNlTmFtZSxwb3B1bGF0aW9uSWRlbnRpZmllcix0aW1lUGVyaW9kLGZyZXF1ZW5jeURlcGVuZGVudCxyZWZlcmVuY2VQb3B1bGF0aW9uRGVuc2l0eSxyb2FkTmV0d29ya0luZmVjdGlvdXNQcm9wb3J0aW9uLGNoYXJhY3RlcmlzdGljTWl4aW5nRGlzdGFuY2UsdHJhbnNtaXNzaW9uUmF0ZSxub25MaW5lYXJpdHlDb2VmZmljaWVudCxyZWNvdmVyeVJhdGUsaW5mZWN0aW91c01vcnRhbGl0eVJhdGUsaW1tdW5pdHlMb3NzUmF0ZSxpbmN1YmF0aW9uUmF0ZQorVGVzdFNFSVIsaHVtYW4sODY0MDAwMDAsdHJ1ZSwxMDAuMCwwLjAxLDIuMjUsMTAuMCwxLjAsMC4zLDAuMCwwLjAsMC40ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9MYXJnZU1peE1pZ19GRF9SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vRGlzZWFzZSBEZWF0aHNfMC5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0xhcmdlTWl4TWlnX0ZEX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9EaXNlYXNlIERlYXRoc18wLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYzI0NDAxCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9MYXJnZU1peE1pZ19GRF9SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vRGlzZWFzZSBEZWF0aHNfMC5jc3YKQEAgLTAsMCArMSBAQAoraXRlcmF0aW9uLHRpbWUsCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0xhcmdlTWl4TWlnX0ZEX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9EaXNlYXNlIERlYXRoc18xLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvTGFyZ2VNaXhNaWdfRkRfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL0Rpc2Vhc2UgRGVhdGhzXzEuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJjMjQ0MDEKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0xhcmdlTWl4TWlnX0ZEX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9EaXNlYXNlIERlYXRoc18xLmNzdgpAQCAtMCwwICsxIEBACitpdGVyYXRpb24sdGltZSwKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvTGFyZ2VNaXhNaWdfRkRfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL0Rpc2Vhc2UgRGVhdGhzXzIuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9MYXJnZU1peE1pZ19GRF9SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vRGlzZWFzZSBEZWF0aHNfMi5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDZhZWY5ZAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvTGFyZ2VNaXhNaWdfRkRfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL0Rpc2Vhc2UgRGVhdGhzXzIuY3N2CkBAIC0wLDAgKzEsMzMgQEAKK2l0ZXJhdGlvbix0aW1lLFlFLU4tRzE1MDAwMSxZRS1TLUcxNjAwMDEsWUUtUy1HMTYwMDAyLFlFLVMtRzE2MDAwMyxZRS1TLUcxNjAwMDQsWUUtUy1HMTYwMDA1LFlFLVMtRzE2MDAwNixZRS1TLUcxNjAwMDcKKzEsVHVlIDI1IEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyLFdlZCAyNiBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMyxUaHUgMjcgSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzQsRnJpIDI4IEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCis1LFNhdCAyOSBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorNixTdW4gMzAgSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzcsTW9uIDMxIEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCis4LFR1ZSAxIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCis5LFdlZCAyIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxMCxUaHUgMyBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTEsRnJpIDQgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzEyLFNhdCA1IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxMyxTdW4gNiBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTQsTW9uIDcgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzE1LFR1ZSA4IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxNixXZWQgOSBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTcsVGh1IDEwIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxOCxGcmkgMTEgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzE5LFNhdCAxMiBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjAsU3VuIDEzIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyMSxNb24gMTQgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzIyLFR1ZSAxNSBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjMsV2VkIDE2IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyNCxUaHUgMTcgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzI1LEZyaSAxOCBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjYsU2F0IDE5IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyNyxTdW4gMjAgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzI4LE1vbiAyMSBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjksVHVlIDIyIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCiszMCxXZWQgMjMgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzMxLFRodSAyNCBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMzIsRnJpIDI1IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0xhcmdlTWl4TWlnX0ZEX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9FXzAuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9MYXJnZU1peE1pZ19GRF9SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vRV8wLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYzI0NDAxCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9MYXJnZU1peE1pZ19GRF9SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vRV8wLmNzdgpAQCAtMCwwICsxIEBACitpdGVyYXRpb24sdGltZSwKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvTGFyZ2VNaXhNaWdfRkRfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL0VfMS5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0xhcmdlTWl4TWlnX0ZEX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9FXzEuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJjMjQ0MDEKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0xhcmdlTWl4TWlnX0ZEX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9FXzEuY3N2CkBAIC0wLDAgKzEgQEAKK2l0ZXJhdGlvbix0aW1lLApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9MYXJnZU1peE1pZ19GRF9SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vRV8yLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvTGFyZ2VNaXhNaWdfRkRfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL0VfMi5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDRlOGMxMwotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvTGFyZ2VNaXhNaWdfRkRfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL0VfMi5jc3YKQEAgLTAsMCArMSwzMyBAQAoraXRlcmF0aW9uLHRpbWUsWUUtTi1HMTUwMDAxLFlFLVMtRzE2MDAwMSxZRS1TLUcxNjAwMDIsWUUtUy1HMTYwMDAzLFlFLVMtRzE2MDAwNCxZRS1TLUcxNjAwMDUsWUUtUy1HMTYwMDA2LFlFLVMtRzE2MDAwNworMSxUdWUgMjUgSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzIsV2VkIDI2IEphbiAxMSwwLjAwNTQ5MjUxODEyMzc1MjcxLDQ0LjI1NjUxOTM2MzI4ODQ0LDAuMTU1NDQyNTk1NTQ0MzI5ODUsMC4wLDAuMCwwLjAwNTQ4Mjk2NTUxMjM2NjQ5NSwwLjkyNzc2NjYxOTE4MDc1NTYsMC4wCiszLFRodSAyNyBKYW4gMTEsNC41MjMyOTA2NTY1MTM4OTYsMzUuNDc3NTI1MDIwMzY1NTksNC41ODczNDI3MzcyNDk3MSwwLjAsMC4wODE5MDYwMjYyNDIxOTkxLDQuNDc0NjM2Mzk1OTExOTg1LDUuMTkyMTA0Njc1MTQzMDcyLDAuMAorNCxGcmkgMjggSmFuIDExLDYuNjMzNjAyMDQ4MzkyMjg2LDgwNS4wNjc0NzQ3NzE2MTkxLDExLjk4NDU2MTk4NzUzNjE0MSwwLjAwNTA1NTU5NjUyMDIxODY0OSwwLjcwMTQzNzU3NjY3MzczMiw2LjU3Nzg5MDY3MjU5MDExMSwzOS40NTY0ODU1OTE5MTY3MSwwLjAKKzUsU2F0IDI5IEphbiAxMSwxNjkuODE4Nzk2MTY5MDY1NzMsMTI3MS43Mjk4MDc1MzY2MywxNzQuNDE5NzY3NzI1NTI3OTgsMC4wNjQ0NjcxNTM0MTM4NzA0Niw2Ljg5MzMzOTkyMjA2MDEyLDE2Ni4zNTg5NjAwMDg0MjYzNSwyMTcuMTIyMTgyMjg5OTI1ODMsMC4wCis2LFN1biAzMCBKYW4gMTEsMzk3Ljg5NjU3NDQwNDQzMzUsMTUxNzkuNTUxNzU0NDY3NjUsNTQxLjYyNzQ4MDUzNTM0NDgsMC43NzEzNTIyMTc3NTY1MjA1LDQ3LjE0NTQ4ODg1MzY4MjQ1LDM5MS4zNjAyMTk5NjA0OTM0LDEyOTAuNDI5MTgzNjk5ODU5MywwLjAKKzcsTW9uIDMxIEphbiAxMSw1MDAwLjM5MTMxNzAyNjA1MSwzNDU1Ni43NjA4MTE5NzQ5ODYsNTE4NC45ODcyMzI4OTYzMDQsNi41NjIwNDE2NTczNzgzOTYsMzMzLjg2Mzc4ODIyODEyMTYsNDg1Ny43MDIwODgxMTEyMjYsNjg3NS43NTMwMDczNzg3NzUsMC4wCis4LFR1ZSAxIEZlYiAxMSwxNTQ0OC43NTg2NTgxNzY0NzUsMjkyNDA0LjY3NjIxMzA5ODYzLDE4ODg0Ljg2NzU2NzEzMzUzMyw1My44OTAxMTMzNDYwODI0NCwyMDY0LjI4OTU1MTU4ODg5NjMsMTUwNzYuNjA1NzYxNTM3Nzg1LDM3NDQ4LjczNDA5MDE5ODk5LDAuMAorOSxXZWQgMiBGZWIgMTEsMTM1MzMyLjcwMzg0NzMxNjEyLDc4NjIyMC40NjQwMDI1MTM4LDE0MDgyMy4wMjE4MjYxNTQxMiwzODcuNTUwMzQzMzg3NjA5NTMsMTI4MjYuNzIwODQwMDk1ODg4LDEzMDM4MS45NjQwNjUwMTMxOSwxOTI2ODAuMzA2MzI1NDI2NDQsMC4wCisxMCxUaHUgMyBGZWIgMTEsOTc3ODkxLjgwNzc5MTI4MDIsMjgwOTczNC40NDY1NTI0MTQ0LDEwMTc3NDMuODAyNzkzNTk4Myw1MzM2LjYyMjA3ODcwNTY4NiwxMzIwMTMuMzgzMjcwNzcxMzYsOTIwOTA4LjYxNjE3NTExNTEsMTQxMTIxNS4zMzE1ODg1MzkzLDAuMAorMTEsRnJpIDQgRmViIDExLDM2NzQwNzEuNjQxMTM1MDYzLDIxNTQ4MTguODkwNzE2MjcwNSwyODI3ODU3LjcyMTIwNDgzOTYsMTU4NDY5LjA4MTgzMjY1MTE3LDEwOTAyODEuMTU4NTYwMjY0NiwyODQzODU0LjUwOTM4NDYxMSwyMjYyNjA1LjkyNzA2NTcyNTQsMC4wCisxMixTYXQgNSBGZWIgMTEsMjI5ODkxMi40NDU2NjAyMTMsMTUyMzIyMC43NzUwMjQ2NTMsMTg4MzEzMS43NDIxOTQ0NjYzLDM5MTkwMi4zODgwNDk0NDQ2NSw3OTI1NTUuOTIyMTcyNTk0MSwxODkxMzg1LjgzMTI3NTUwNTcsMTUwODY1OC4wMTQ5MDE1NzYzLDAuMAorMTMsU3VuIDYgRmViIDExLDEyNTk4ODQuNzk1Mzk2MjI2LDk4ODM5Mi43MTQyNzUzODI4LDExMzMwODUuMjM2NjY2Njc0NSwyNTUxNzQuMTExMjQwODgwNzQsNDkxMzA1Ljk4OTk4NTQ3NDUsMTEzNjM4Ni44NzIxODc5MTQzLDkwOTYzMC41NjY5NjQxOTIxLDAuMAorMTQsTW9uIDcgRmViIDExLDcxMjMyOC42ODcxOTMwOTI4LDYxNzMwNi40NTg4MDU2NDQ0LDY3OTEyMS41NzU3OTgwNzUyLDE2NDkxMS4wNjIyNzM4NzE1NiwzMDM4OTMuMjI3NTkyMjA5Myw2ODA0NDIuMjI5OTQwNzc5Myw1NDYzMTIuOTMyNjY1NDI0LDAuMAorMTUsVHVlIDggRmViIDExLDQxMTA5MC42MzQzMjQ4OTQsMzc3ODMyLjg1NDU3Nzg5OTksNDA2MTA4LjU3NzkwODU0MzIsMTA1ODk1Ljc0NjE1MzM2MTQsMTg3NTA3LjgxMjgxMjAxNTA2LDQwNjYzNi44Mzk1MjU5NjYxLDMyNzUxNy4yMzkzOTcxOTMzLDAuMAorMTYsV2VkIDkgRmViIDExLDI0MDM0MS4wMjkwNTM3MTg1OCwyMjg3MDAuODA2MjE5MTYzMjMsMjQyNTI2Ljg3NjQ4MzU5MDE0LDY3NjE4LjA1MTM0Mjg0OTQ1LDExNTQyNC41NTUxOTg3MTMxOSwyNDI3MzguMTgxMTA2ODkzOTMsMTk2MjA0LjMyMzQzMTcyNjc4LDAuMAorMTcsVGh1IDEwIEZlYiAxMSwxNDE2NDQuOTIwODMzNDY5MjUsMTM3NTcwLjg0Mjg5MDIzNTYsMTQ0NzI2LjA5NTIzNjgwMTIyLDQyOTYxLjE1NjE4NzM1NDA4LDcwOTAzLjM5NjA0Njk0Mjg2LDE0NDgxMC42MTcwNzE5OTAyMSwxMTc1MTUuMjY1NDM2MDE5MDIsMC4wCisxOCxGcmkgMTEgRmViIDExLDgzODg5LjEwOTI3NDg5MTc2LDgyNDYzLjE4MjAyMzk1MDA0LDg2MzI4LjA2MTg5NjM5MjYxLDI3MTczLjgwNTgxODY2NjU4LDQzNDc1LjUxODkyOTYwMTA5NCw4NjM2MS44NzA2MjIwMzA2Niw3MDM4Ny44Mjc2NTYyNTAyNywwLjAKKzE5LFNhdCAxMiBGZWIgMTEsNDk4MzIuNjkwNzY1NjI0NDksNDkzMzMuNjE2MjQ1MzQ2NTk1LDUxNDgzLjMzNTk0OTM5OTM2LDE3MTE5LjM2OTIxNDU5MTA0MywyNjYxNS44NDEwMzM1MTc1Niw1MTQ5Ni44NTk0MzQ2MTU0Niw0MjE2NS45MTMwODk5Nzk2NDQsMC4wCisyMCxTdW4gMTMgRmViIDExLDI5NjU3LjA2MjUwOTYwMjg5MywyOTQ4Mi4zODY0MzgwMjU1NjUsMzA3MDAuNjU5NDk5NDc4OTEyLDEwNzQ2LjQ0NTE2MDMwMTcxOSwxNjI3Mi4xODQ1NjkwMDU2OTQsMzA3MDYuMDY4ODkwNTU0NzcyLDI1MjYzLjc2ODM3Mjg3NTQyLDAuMAorMjEsTW9uIDE0IEZlYiAxMSwxNzY3MC40NjkxNDQyODc4ODcsMTc2MDkuMzMyNTI1NTM1ODIsMTgzMDcuNTcyNjY2NjQ4MjA4LDY3MjQuMTU0MDkwODk0NzkzLDk5MzYuNjAyOTIzNDE0NzU3LDE4MzA5LjczNjQyMTI3OTI0LDE1MTM5LjI3NzQ5MTg0NjI5NSwwLjAKKzIyLFR1ZSAxNSBGZWIgMTEsMTA1MzYuNDgzNjAxMjAyNTg4LDEwNTE1LjA4NTc4ODQxMDgwNiwxMDkxNy44ODQ2MDQ1MjY5Myw0MTk1LjExNDkxMDY3MjM5OSw2MDYxLjQ3MzAxODIzMTM4NSwxMDkxOC43NTAxMDUzMDM1ODUsOTA3My40OTUxMjk5OTY1MTIsMC4wCisyMyxXZWQgMTYgRmViIDExLDYyODUuODU0MjE0ODE1ODE4NSw2Mjc4LjM2NDk4MjU5NjM5NSw2NTExLjU2NDA0Njc2OTAyMywyNjEwLjM4Njg2MDQ0ODY2NiwzNjk0LjE2Njk5NzYwNzI1Nyw2NTExLjkxMDI0NjQzNjMxLDU0MzguNzI0OTQ2MzMzMDUzLDAuMAorMjQsVGh1IDE3IEZlYiAxMSwzNzUxLjM2OTg5Mjc4MDk5OTYsMzc0OC43NDg2NjI4NTU5MTcsMzg4NC4wMTAyOTMyMjkxMTYsMTYyMC40MjExMjgzMDI3MTM3LDIyNDkuNTM5MDgxMDM1NTI0MywzODg0LjE0ODc3MjcxMTEzNTcsMzI2MC4zNDU1NDYwODg1MDc1LDAuMAorMjUsRnJpIDE4IEZlYiAxMSwyMjM5LjQxMDYxODMwMjE1OCwyMjM4LjQ5MzE4ODYzNzgyNzYsMjMxNy4wMTc5OTgzNjQzNzEsMTAwMy43MDg1Nzc3MDgwMTExLDEzNjguODA3ODY5Mzg0OTA3LDIzMTcuMDczMzg5OTI2ODU1MywxOTU0LjYzODM4Mzg3ODIxNzIsMC4wCisyNixTYXQgMTkgRmViIDExLDEzMzcuMTI1MzkzODI2NzU2OSwxMzM2LjgwNDI5MzkyOTA2NTQsMTM4Mi40MDY5NTkxMDMzNjYzLDYyMC40ODAxMTMwNTI4Mjk0LDgzMi4zMjEyNzk4Njc5ODY0LDEzODIuNDI5MTE1NTkwNDk5NCwxMTcxLjkyMjg2MDM1MDkwNDYsMC4wCisyNyxTdW4gMjAgRmViIDExLDc5OC41MjgzMTgwNTc3Mzg1LDc5OC40MTU5MzMzODM5OTIsODI0LjkwMTA3MTc2MTMyOSwzODIuODgwMTI3MjczMDQ3NTUsNTA1Ljc4MDc4Njg2Njc1ODcsODI0LjkwOTkzNDI3MzY0NzgsNzAyLjY3NzgzNzgxNjMzMTIsMC4wCisyOCxNb24gMjEgRmViIDExLDQ3Ni45NTY1NjU1MzEzMzkyLDQ3Ni45MTcyMzEwNjk1NTc0Myw0OTIuMjk4MTkxNTc2Nzk0OSwyMzUuODczMTEwMDAwMjgzNzYsMzA3LjE2ODI5MDY0ODQxMDUsNDkyLjMwMTczNjUzMjMwMDcsNDIxLjM0MTI4MDMwMTAyMDA1LDAuMAorMjksVHVlIDIyIEZlYiAxMSwyODQuOTI1NTQ3ODU0MTIzMSwyODQuOTExNzgwODk2NzkwOSwyOTMuODQyOTYyODY1MjM3MjcsMTQ1LjA4ODYyNTQyNDQ3OTgzLDE4Ni40NDQ4NjQyMTc0NjE2OSwyOTMuODQ0MzgwODE3ODQwNiwyNTIuNjU1NjgxMzE5ODkwNDUsMC4wCiszMCxXZWQgMjMgRmViIDExLDE3MC4yMzI5NTkyMzcwNDc5LDE3MC4yMjgxNDA4NjQ0ODkzMiwxNzUuNDEzNDE4NzY3MTg2OCw4OS4xMjA5ODc0MjgxODYzNywxMTMuMTA5NjQ3MDczOTkzNzEsMTc1LjQxMzk4NTkzMDQ5ODIzLDE1MS41MDkxNjY3MzYwOTE5LDAuMAorMzEsVGh1IDI0IEZlYiAxMSwxMDEuNzIxNDE5MTg5ODk4MjYsMTAxLjcxOTczMjc5Njk3MTQ2LDEwNC43Mjk3OTI3NDY0NjA5Niw1NC42NzIwMjU1Nzg3NDA5OCw2OC41ODYzMzEwMjI3MjA3NiwxMDQuNzMwMDE5NjAxMTYzNjUsOTAuODU3NjYyNjg2NTQwNSwwLjAKKzMyLEZyaSAyNSBGZWIgMTEsNjAuNzkwNDI3OTk1NTcyODMsNjAuNzg5ODM3NzgwNTEwNDUsNjIuNTM2OTY1MzE1MDc4NzQ2LDMzLjQ5ODkzMDcwMjcwODU4LDQxLjU2OTY0OTc5MTU0MTQ2NSw2Mi41MzcwNTYwNTA1OTU0NCw1NC40ODczMjI1Mzc0OTA0MSwwLjAKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvTGFyZ2VNaXhNaWdfRkRfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL0lfMC5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0xhcmdlTWl4TWlnX0ZEX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9JXzAuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJjMjQ0MDEKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0xhcmdlTWl4TWlnX0ZEX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9JXzAuY3N2CkBAIC0wLDAgKzEgQEAKK2l0ZXJhdGlvbix0aW1lLApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9MYXJnZU1peE1pZ19GRF9SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vSV8xLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvTGFyZ2VNaXhNaWdfRkRfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL0lfMS5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmMyNDQwMQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvTGFyZ2VNaXhNaWdfRkRfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL0lfMS5jc3YKQEAgLTAsMCArMSBAQAoraXRlcmF0aW9uLHRpbWUsCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0xhcmdlTWl4TWlnX0ZEX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9JXzIuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9MYXJnZU1peE1pZ19GRF9SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vSV8yLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NzZlYzNjCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9MYXJnZU1peE1pZ19GRF9SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vSV8yLmNzdgpAQCAtMCwwICsxLDMzIEBACitpdGVyYXRpb24sdGltZSxZRS1OLUcxNTAwMDEsWUUtUy1HMTYwMDAxLFlFLVMtRzE2MDAwMixZRS1TLUcxNjAwMDMsWUUtUy1HMTYwMDA0LFlFLVMtRzE2MDAwNSxZRS1TLUcxNjAwMDYsWUUtUy1HMTYwMDA3CisxLFR1ZSAyNSBKYW4gMTEsMC4wLDEuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMixXZWQgMjYgSmFuIDExLDAuMDUsMC4zOTk5OTk5OTk5OTk5OTk5LDAuMDUsMC4wLDAuMCwwLjA1LDAuMDUsMC4wCiszLFRodSAyNyBKYW4gMTEsMC4wNDk2OTcwMDcyNDk1MDEwOCwxNy44NzI2MDc3NDUzMTUzOCwwLjEwOTY3NzAzODIxNzczMTkzLDAuMCwwLjAwMjUwMDAwMDAwMDAwMDAwMDUsMC4wNDk2OTMxODYyMDQ5NDY1OTUsMC40MTYxMDY2NDc2NzIzMDIyNywwLjAKKzQsRnJpIDI4IEphbiAxMSwyLjc1MTU5OTI5NjM3NTg3NywyMS4zNzEzMTE4MDAyMzk2MSwyLjc4Mjg5MTY1OTAzNjM1NSwxLjI1MDAwMDAwMDAwMDAwMDNFLTQsMC4wNTQ4MTc3NDI4ODA0OTQ3NTYsMi43MTM4MTU1ODE2OTYxNTE2LDMuMTYwMzMwMDk5MTM4MDA5LDAuMAorNSxTYXQgMjkgSmFuIDExLDUuMjU1NDk3OTk0OTEyNzcxLDMzMS4xNDU5NDY0NjA1NTU4LDcuMzg3OTYyMzc1NDk2NCwwLjAwNDgzMTg3NTc1MjExMjE5NywwLjQ2NjAwNjY1NzA2NjY0MDUsNS4xOTc2NjM0MTg1ODE5MDUsMTguNDEzNjI5MjIzMzUzNTg1LDAuMAorNixTdW4gMzAgSmFuIDExLDg4LjEzNjk3NzczOTQ5MDgsNjQyLjk2MzAzOTI0OTQ5MTUsOTAuMTcyNDQ1NTUyODg3MDgsMC4wNTE3NDQ3MjU4ODI1NDE5MiwzLjkxMTI2MjM1MjMxMjY1Myw4Ni4wNzIwMDI4ODMyODA2MywxMTEuOTc4Mzc4NjIyMTA2MjIsMC4wCis3LE1vbiAzMSBKYW4gMTEsMjQwLjk3MjcxNDE3Mjk1ODA0LDYzNDcuODIzOTA3NzI2NzQzNSwyOTguMDg3MTkzNzA2NTUwMjQsMC41MzI1NjM2MDM5NTM2MzksMjYuNDE1MzMyODg1MDI4NzQ3LDIzNi4zNDAxMTI0MDg3NjcxNCw2MDMuMzEyNTA3ODI2OTU2MywwLjAKKzgsVHVlIDEgRmViIDExLDI0NzAuODIzNzk4NTYzMDU1LDE2NDMwLjc2OTUxNDI4NjQ1NCwyNTQ5LjM5MDk2NzA0MTg5Myw0LjIzODQ5MzI4OTM3NzI5OCwxNzYuOTQ1NDM1MzA1MzA4NDgsMjM5My43NzgwNzY2MDg3NDc2LDMzNTIuNTUyNDI5MjEyODc2NiwwLjAKKzksV2VkIDIgRmViIDExLDg0MDQuMTU3NTMyMDUzMzEyLDEyNDA3Mi41MDU1NTQ1MjUzOSw5NzY1Ljk0MTUzMTQ5NTE3OCwzMi43MzQ0ODg0MTI4NTU5MiwxMDgyLjAyODA4NDQxMzMyNTQsODE4MC4zOTE2NTMwODM2MjEsMTc0NDIuMDY5MTY2NjMzMTMsMC4wCisxMCxUaHUgMyBGZWIgMTEsOTE5MTEuNjY4NjgyOTIxNzcsNjQ0MTgzLjE5NTY0NTYxNjIsOTkxOTEuNjU4MzYyMzIxNDgsNDU4Ljg5NTc4MTI3NDI1NTIsMTE4NDcuMDY5NjA1Nzk5ODA3LDg4MzM3LjQ5NzU5MTUxMzgyLDE0OTg4MC4xOTQzNTAzNDMzNCwwLjAKKzExLEZyaSA0IEZlYiAxMSw5NDIwMTUuMjQ2MTY2MzQ1MywxMjA2MzkyLjMwNjczMDQ4MjUsODQ2MjQyLjk3MjIwNTI4MTgsMTYzNTMuMDI2NDc5MzEyNjY0LDE5ODQzNi4xOTcyMzU0MzMxNSw4MDk3NTMuNjA5NjgxNzE2Nyw4NjA2NzQuNzE1OTU4NzI0MywwLjAKKzEyLFNhdCA1IEZlYiAxMSwxNTk0MTQ3Ljc2OTQ4MzE1MjMsMTM5MzAwMi45NjM4ODMxMjE3LDEzNjQ2MDcuODA2NTMxNDExLDE0MjY3MS4yNDgxMDg1MDk4NCw0NzQ5NjMuODk4MjE0NDA1MSwxMzQ4NTgwLjUwMDY0NjQ2NywxMTk1NTYzLjc0NjA0NDQ5MTksMC4wCisxMyxTdW4gNiBGZWIgMTEsMTgyMjMxMS44MzYwODIzNTIzLDE0NDE2MzQuNDg1ODYzODg4NiwxNTg0MTEyLjc3MTU3Mzc0NTYsMjU4OTc4LjMzNzIxMDkwMDgsNjIxNDE2LjA2NjIyNzg0NTMsMTU4MTAwMy40ODQ3NzA1ODcyLDEzMTQ1NzIuNjI1NzI4OTk2NSwwLjAKKzE0LE1vbiA3IEZlYiAxMSwxNTI4OTQ0LjgyMDAxMzYxMjMsMTI4NzExMC45MTUyOTYyODk4LDE0MDgzMzIuMzMyMjExMzk1MywyNzU1NzguNTM0MDk0Mjg1OCw1ODU5MDcuOTc1NzM5OTM2NSwxNDA4NDA5LjI3MTYwNTI3NTYsMTE0OTY3OC4wMzAyMDA4OTI4LDAuMAorMTUsVHVlIDggRmViIDExLDExNTkxODUuOTI5NDgyOTgyMywxMDM2NTM1LjE3MTczNjE3MDgsMTExNjYyMS40MzAxNjQwMjY4LDI0NjgyOC4wMTgyOTUxMjI2Myw0ODU3NzQuMTA1NjU5MTcyOCwxMTE3MTgwLjQ2NzQ5NjI2OSw5MDU5NzguNDc0MzcwOTA3LDAuMAorMTYsV2VkIDkgRmViIDExLDgzNjkyNi40MDIwMjQwMTU4LDc4MDY5NS41MjUxMjk1MDE4LDgzMDU2OC4xNTMxNzQ1MjY4LDIwMjQwMi40MTQ1MjI2NDkzLDM3NTUzMC41MDEzODg4ODcxLDgzMTAwMy4wNzI2ODkyNDQyLDY3Mjc3MS45NzEyNzM5MTQ4LDAuMAorMTcsVGh1IDEwIEZlYiAxMSw1ODY2NTguOTA4MDMwODY4Niw1NjIzMjIuMDEyMTQ3ODI3MSw1OTMxOTcuNjY5NTE0NzIxNiwxNTcxNDUuMDc0MTQ5MjU4NDMsMjc3NjkzLjc5MTE0OTgzNzEsNTkzNDU2LjE1OTEyMTUxNSw0ODA4ODYuNzM5MTQyMjc4MSwwLjAKKzE4LEZyaSAxMSBGZWIgMTEsNDAyODE0LjY2MDE3MzExODgsMzkyNjY3LjExNTU1NTUzNjM1LDQxMTk1MS4yNDMzNDE0NzIzLDExNzQ5OC45NDMyMjI4MDE1NCwxOTkxMDkuODQzOTkzMTA4Nyw0MTIwODguNDQ3ODgzNjc2NywzMzQ3MzguODc1MjY1MTk0LDAuMAorMTksU2F0IDEyIEZlYiAxMSwyNzIyNTMuNzkxNjIzNjAxMiwyNjgxMzEuNzgwMTkwMzYzNjQsMjgwMjg3Ljc5NTQ0Mjc0NTksODU0NDkuNDMzNTg5NDUyMDgsMTM5NTU3LjAyMDAyMzcwOTk1LDI4MDM1Ni4yMDA3MjU4MzUyLDIyODUxNy4yMDY1NTM5NTAxOCwwLjAKKzIwLFN1biAxMyBGZWIgMTEsMTgxNjk5LjI0MTkyNDYyNjY3LDE4MDA1Ni45MDgxNzE5NDQ4LDE4Nzc1OS45MzA5NTU4MzIxNSw2MDgyMi43ODczNjE3NjQ4Nyw5NjEyMy4xNzgxMDkxMjA3MiwxODc3OTIuNzAyNDQ2NzYzNzIsMTUzNjk2LjIzODIxMjk3MTY2LDAuMAorMjEsTW9uIDE0IEZlYiAxMSwxMjAwMDcuODEwNjQzODI4MTUsMTE5MzYzLjEyMzQ0MDE4NywxMjQyNDkuNjc1MzU2OTMwNTksNDI1NTcuMjcwMTU0NzE2MTMsNjUyOTYuNDEzOTQxOTA2OTEsMTI0MjY0Ljk0NzY5ODcyOTMzLDEwMjE2Mi43ODEyNDk0NTQ2NCwwLjAKKzIyLFR1ZSAxNSBGZWIgMTEsNzg1NzMuMzM4MjIzMDE5NzYsNzgzMjMuMjQzMDc5Nzg5ODEsODE0MTcuMTc3MDY2Mjg3NTQsMjkzNjAuOTgxMDA5NjQ3MjY1LDQzODU4Ljg1MDU2NDIxMDAyLDgxNDI0LjE1MTQ5NzU1ODU1LDY3MjYyLjMzMDE1NjUwMTUsMC4wCisyMyxXZWQgMTYgRmViIDExLDUxMDY1LjI3Mzc2NzIyMDkwNCw1MDk2OS4xODEzNTg3ODI5Nyw1MjkyMC45MjAxNjE1NTk5NDUsMjAwMTkuNTI4MTA4MDE3NTY2LDI5MTg1LjE3OTk1MTAxNTk2LDUyOTI0LjA1NjEyOTU4MTI1LDQzOTM1LjIxODM0NTM2Nzc0LDAuMAorMjQsVGh1IDE3IEZlYiAxMSwzMjk3Ny45MTk5NTgyMjA2NjQsMzI5NDEuMjkxOTMzMzUwMTg1LDM0MTY2Ljk2NTI1NDExNjQyLDEzNTE0LjE1NDI0MDU4MTEwNSwxOTI2Ny45OTQwMzM5MDM0MywzNDE2OC4zNTgxMTgwNjM3NCwyODUwNy4zMjAwNzI2OTQ4NTYsMC4wCisyNSxGcmkgMTggRmViIDExLDIxMTgwLjkxMjY4Njk2OTczMiwyMTE2Ny4wNDQzOTM0MDY3MzMsMjE5MzMuMTE2OTgyMDc0MzM0LDkwNDQuMzUzMDEwOTU2ODk2LDEyNjM0Ljg4NjMyMzg4MDA4NiwyMTkzMy43Mjk1MTc0MTk5NjQsMTgzOTEuNzkyNjAyNjUyMDU4LDAuMAorMjYsU2F0IDE5IEZlYiAxMSwxMzUzOS40MTM0ODI0NDM1NzUsMTM1MzQuMTkyNjEyNDE0ODE2LDE0MDEwLjc5NDE3MTEzMzM2OCw2MDA3LjYyMTkxOTgzNTIwNTUsODIzNi43NzM1NjM4MDI2MDgsMTQwMTEuMDYxMzQwNTkxNjE2LDExODA3LjMwNDIzMDY3NTYzMiwwLjAKKzI3LFN1biAyMCBGZWIgMTEsODYxOC43ODMxNTg5NjAxMjYsODYxNi44Mjc0MTc0MzEzNzIsODkxMi4wNTM1MzIzOTk1OSwzOTY0LjIyMjc4OTkyNjQ3MSw1MzQyLjA2MTU4NDMwOTkzNSw4OTEyLjE2OTI2MTk0MTI1LDc1NDcuNTc1MDUzODU3OTA5LDAuMAorMjgsTW9uIDIxIEZlYiAxMSw1NDY2LjM1NTg0ODE0MTMxNiw1NDY1LjYyNjM4NjYxNDg4NjUsNTY0Ny43NzM1MTAxODQ2OTUsMjYwMC41Nzc2NzEzNTQ4NDg1LDM0NDguOTMyOTg4MTg0NzE5LDU2NDcuODIzMzQ2NDcyMzQ3LDQ4MDYuMzYzNTMyMTE2MzE2NSwwLjAKKzI5LFR1ZSAyMiBGZWIgMTEsMzQ1NS43MDQzMDA0NDU1NTU0LDM0NTUuNDMzMjU2MzIxNzgyLDM1NjcuNDA3NjM1MjY0NDUxLDE2OTcuMTEzNjE2OTU4MTg0MSwyMjE3LjY4MDg2MzU4MzgyOTcsMzU2Ny40Mjg5ODc0MjIxNDgsMzA1MC40NDU4NzIxMDk0MDcsMC4wCiszMCxXZWQgMjMgRmViIDExLDIxNzguMjg3NzI0NDY1MjgyLDIxNzguMTg3MzUyOTk3MTE3LDIyNDYuNzk4OTQ4MjE3NDcwOCwxMTAyLjMzMTk4NTQwMTI5MzIsMTQyMC43OTYzNDc1MzA0MzYsMjI0Ni44MDgwNTYwNDYzNDA0LDE5MzAuMjAzODQxOTYzNjA0LDAuMAorMzEsVGh1IDI0IEZlYiAxMSwxMzY5LjUwODE4MTkxNTAzNzMsMTM2OS40NzExMjUwMzE1OTA5LDE0MTEuMzg5MDUwODc1NTQ0LDcxMi45NzA4MDYwMzg1ODI5LDkwNy4yNjg4MjExODA3NDUsMTQxMS4zOTI5MjA3MzYzNjQ5LDEyMTguMDU4OTcwNjEwMDU4MiwwLjAKKzMyLEZyaSAyNSBGZWIgMTEsODU5LjAwNzQ0MjgzOTg4NjUsODU4Ljk5Mzc5ODY3NTkxODIsODg0LjUzNTYwMTM3MzczMSw0NTkuMzY2MTk1Njk0MTcxMDQsNTc3LjYyMDQzMDA3ODM0MSw4ODQuNTM3MjM5OTc0MTcxLDc2Ni43ODIwMTA2NDU1MzMzLDAuMApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9MYXJnZU1peE1pZ19GRF9SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vSW5jaWRlbmNlXzAuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9MYXJnZU1peE1pZ19GRF9SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vSW5jaWRlbmNlXzAuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJjMjQ0MDEKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0xhcmdlTWl4TWlnX0ZEX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9JbmNpZGVuY2VfMC5jc3YKQEAgLTAsMCArMSBAQAoraXRlcmF0aW9uLHRpbWUsCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0xhcmdlTWl4TWlnX0ZEX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9JbmNpZGVuY2VfMS5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0xhcmdlTWl4TWlnX0ZEX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9JbmNpZGVuY2VfMS5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmMyNDQwMQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvTGFyZ2VNaXhNaWdfRkRfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL0luY2lkZW5jZV8xLmNzdgpAQCAtMCwwICsxIEBACitpdGVyYXRpb24sdGltZSwKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvTGFyZ2VNaXhNaWdfRkRfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL0luY2lkZW5jZV8yLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvTGFyZ2VNaXhNaWdfRkRfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL0luY2lkZW5jZV8yLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NmEzNTBiCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9MYXJnZU1peE1pZ19GRF9SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vSW5jaWRlbmNlXzIuY3N2CkBAIC0wLDAgKzEsMzMgQEAKK2l0ZXJhdGlvbix0aW1lLFlFLU4tRzE1MDAwMSxZRS1TLUcxNjAwMDEsWUUtUy1HMTYwMDAyLFlFLVMtRzE2MDAwMyxZRS1TLUcxNjAwMDQsWUUtUy1HMTYwMDA1LFlFLVMtRzE2MDAwNixZRS1TLUcxNjAwMDcKKzEsVHVlIDI1IEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyLFdlZCAyNiBKYW4gMTEsMC4wMDU0OTI1MTgxMjM3NTI3MSw0NC4yNTY1MTkzNjMyODg0NCwwLjE1NTQ0MjU5NTU0NDMyOTg1LDAuMCwwLjAsMC4wMDU0ODI5NjU1MTIzNjY0OTUsMC45Mjc3NjY2MTkxODA3NTU2LDAuMAorMyxUaHUgMjcgSmFuIDExLDIuMjUzODMzMDcyMDg4MDk5MiwxNy43MjAyMDgwNDAxMzIxNSwyLjMwNDAxODgyNjkwODUzMzgsMC4wLDAuMDM1NTE3Njk1MjgzMTYxMzE2LDIuMjUxMjk2MzM3NTgzNTk1LDIuNTYxNTA5MTAyNDQxMTIxLDAuMAorNCxGcmkgMjggSmFuIDExLDIuMzM3NzA1MzQ0MzUzMjExLDc4OS45Mzc1OTYwNDAyMzE3LDcuNjk2NDg1MTUyMTM0MTk5NSw5LjYwMjk1MjA4MTA4Njk0NkUtNCwwLjQwMDg3OTMyOTc5NTQ3ODg2LDIuMzM0ODk2MzczNzIzMjU4LDM1LjExNTkwMjQwMjk0NjI1NCwwLjAKKzUsU2F0IDI5IEphbiAxMSwxMjQuMDExMDM0Njk4NTI1NzksOTQ2LjQ3MDE5MDYxMjk2MDgsMTI4LjExMjc2NjQ1NjUwNjYyLDAuMDI2NjE0Njk2NDk0MDYzNjEsNC41Njk1NDQwNzQzMDE0MDgsMTIyLjIxNDYyNzI2NTM4MzM4LDE1OC43NDY2MzgwNTM3MjkwNywwLjAKKzYsU3VuIDMwIEphbiAxMSwyMzguNDg3NTIwMDU4NzgxNjgsMTQ2MzQuNDczODQ2MTQzMzQ2LDM4Mi43NDMyMDY4NzMxNTEyLDAuMzkxMjI4Mjg3Mjc1ODg1OCwzMi44Mzk0ODY0MjA0ODU0MSwyMzUuNzAwMjY5Mzg1MTQwNDQsMTEyMC4zMDIxMDQ0ODgwMDUsMC4wCis3LE1vbiAzMSBKYW4gMTEsMzk3MS4wODQyNTUzMzExMTE4LDI4MzUzLjg3NDQzNzI1NzkxMyw0MTQyLjgxNDQzOTIxMzc3MSwzLjc4MDUyMzQ5NDkyODE4NiwyNDUuNzMxMDE3MDA1Mzk5NiwzODc1LjYzNjE5ODY1ODYzMzUsNTUxMy44MzAxODM4Mjc1NDksMC4wCis4LFR1ZSAxIEZlYiAxMSwxMDg3NC44NDE5NzQzNDc5ODgsMjc3NDg2LjAzMDIwNjAzODAzLDE0MzMwLjg4MDYwMTQ3NDU4NiwzMy41ODc4MDEwMjMxMTgyMywxNTUzLjI0MTkwNTAyMzAyNzgsMTA2NTMuNTMyODUzNzkyODY1LDMyMzYwLjA5NDQ0MTAxNzA5LDAuMAorOSxXZWQgMiBGZWIgMTEsMTEwOTYyLjQ1NjIwMjQ0NzEsNjY0OTE1LjY0NTIxMzQyMjEsMTE2MTc4LjMyOTM4OTMwMzQsMjU0LjY5NjMwMzQ2NzgxOTM1LDk5MTkuNDQ0ODU0MTI0MTg0LDEwNzI2MC41NzYzNTA0MDA3NiwxNjAzMzIuNDg5NzYzNjkzNjgsMC4wCisxMCxUaHUgMyBGZWIgMTEsODk1MjM0LjE3MDg1NzEwNSwyNzUzNzMxLjA5MTQzMTE5MzUsOTQwMzY0LjExNTEzNjg5NTEsNDY0Ni40OTYxMTQzNTgzNjEsMTIxNzIxLjU4NzMyNDcwMzI5LDg0MTUyMC4wNzEzNDMzOTM5LDEzNDQyODQuODU2NzQ4NTI0NCwwLjAKKzExLEZyaSA0IEZlYiAxMSwzNTYzNzIwLjY1NzMzMTQ0MzQsNjY0NjE5Ljk2MDk4MTgxNjYsMjYwMDIyMS40MDgwOTQ5MzM3LDE2MjYwNC4wOTgwNDg1MzU1OCwxMTA4NjExLjkxMzU2ODEyMSwyNjU3NzM5LjUwMjc2NTA1MywxNzM4MzEzLjAxMzQ2Njc0NTgsMC4wCisxMixTYXQgNSBGZWIgMTEsNTAyOS42MTc1NDU1NDA4MjMsOTA4LjI2MDg5ODI1NDYxNjMsODIyLjcyNjY3MjQwMTI0OSwzMzI5MTYuODQxOTA0NDk3OTQsODM2MDUuODU2NzI3NjU0OCwzMzMuNzI1NDI1NzMwODE3Miw0MzExLjEzNzYyNTg5NzIzLDAuMAorMTMsU3VuIDYgRmViIDExLDAuMCwwLjAwMzYzODkxMjk4NTEzMTA1OTQsMC4wLDAuMCwwLjAxMTUxMDc2MDAyNDc5MTkwNiwwLjAsMC4wLDAuMAorMTQsTW9uIDcgRmViIDExLDIuMDUzMTkzOTY2MDQ5NDQzRS00LDAuMCwyLjAxNjQwOTAzNDExMjc4MjRFLTQsNy4zOTc1MTkzNzM0MDk4MDRFLTQsMC4wLDIuMDIzNjUyMzI0OTUyODI1M0UtNCw4Ljg5OTcyMzk5NDE0Njk3NEUtNCwwLjAKKzE1LFR1ZSA4IEZlYiAxMSwwLjAsNi4yNzI0NTA0MDI0NDg5NzdFLTUsMC4wLDAuMCw3LjU2OTA2MTIwMzQ3NjIzRS01LDAuMCwwLjAsMC4wCisxNixXZWQgOSBGZWIgMTEsMi41OTUzODYzMDkxOTkxNDZFLTYsMC4wLDIuNjQ2ODcxNDcxNDMxNjM4RS02LDMuNTEwNDg2MjI5NjEyNTAyRS02LDAuMCwyLjY1NzU1MjQzNzY5NTE5NkUtNiw1LjMyMTMyNzUwNzA3NTA5NUUtNiwwLjAKKzE3LFRodSAxMCBGZWIgMTEsMC4wLDQuODE1NTY4Nzg4NjY4NzQ3RS03LDAuMCwwLjAsMy4zNzQ5OTQzODY5MzAxODE0RS03LDAuMCwwLjAsMC4wCisxOCxGcmkgMTEgRmViIDExLDEuNzI3MjY1NjU4NTE4MjA3M0UtOCwwLjAsMS43Nzg0NDkwMTcxMDU2NjNFLTgsMS40NTYxMDc3MTU5Nzk0OTk5RS04LDAuMCwxLjc4MzE5NTc4ODMxMzQ3NUUtOCwyLjgyNjA1OTA5MzQxMTkzMDVFLTgsMC4wCisxOSxTYXQgMTIgRmViIDExLDAuMCwyLjgwNjI3MDY2Nzc1ODI0RS05LDAuMCwwLjAsMS41NDcwNjAwMTgxMTQ3Mzg3RS05LDAuMCwwLjAsMC4wCisyMCxTdW4gMTMgRmViIDExLDkuNDkyMDMyNzQ4NzcyMTZFLTExLDAuMCw5LjcyMjY5MTYzNzY1NDE2OUUtMTEsNi40NDQyMjA3MDg5NjcyNUUtMTEsMC4wLDkuNzM4ODczNjkwNjk1ODk4RS0xMSwxLjQzMzYxMzA5NzIwNjUyNDVFLTEwLDAuMAorMjEsTW9uIDE0IEZlYiAxMSwwLjAsMS40NTA3OTU0MDg2NTE1OTNFLTExLDAuMCwwLjAsNy4zMDU5MTkxNDQ4MTIxOTZFLTEyLDAuMCwwLjAsMC4wCisyMixUdWUgMTUgRmViIDExLDQuNzc1NzgwNTE4NDUyMzFFLTEzLDAuMCw0Ljg1MjU2MTkxNTE3NTkxNEUtMTMsMi45NzE1MjQ0MjQyNjA2NjMzRS0xMywwLjAsNC44NTc1NTU2MDIyMzE5MDFFLTEzLDcuMDE0ODIxNTIzMjYxNjUzRS0xMywwLjAKKzIzLFdlZCAxNiBGZWIgMTEsMC4wLDcuMDUwMzQ2NzIzMTU4NjU2RS0xNCwwLjAsMC4wLDMuNDQ5NDMyMTkzODA4Nzg2NUUtMTQsMC4wLDAuMCwwLjAKKzI0LFRodSAxNyBGZWIgMTEsMi4yODYwODk1NTkzNDIyNjVFLTE1LDAuMCwyLjMwNjUxMTk2MDY4OTcyNzZFLTE1LDEuMzc2MjE0OTIwNTA1NjY0NkUtMTUsMC4wLDIuMzA3OTc5OTQ1MzkyMjgzN0UtMTUsMy4zMzAyMDEzMTk5ODIzMTVFLTE1LDAuMAorMjUsRnJpIDE4IEZlYiAxMSw1LjQxNjgwNDQ5NDA4OTEyOEUtMTYsMy4zMDIxMzE4NTc0NDUyMzgzRS0xNiw1LjA1MjUyODM0Njk4ODYwM0UtMTYsNy44MDM4MjExMzU5ODgyMjNFLTE3LDEuNjA1NzExMDcxMTc3ODU5M0UtMTYsNS4wNDkyMzczNTgzNzUyODhFLTE2LDUuNzI4OTA1MzQyMTY3MDE4RS0xNiwwLjAKKzI2LFNhdCAxOSBGZWIgMTEsMi4wMzA5NTY0MTQ5MjMyNjg5RS0xNiwxLjU0MjU1NTgxNzQyOTk5NEUtMTYsMS45MjEwMzk4NTMxOTI0NTAzRS0xNiwyLjU5MTM0MjMwMjExNTUxMjVFLTE3LDYuODgyNTk0NDMxOTAxODk1RS0xNywxLjkxOTYzNjg2Njg5NjczMkUtMTYsMS45ODY5ODUyNjY3NjY1MThFLTE2LDAuMAorMjcsU3VuIDIwIEZlYiAxMSw5LjQ2MjU1NTgyODg4MTA2MkUtMTcsNy45MDE5NTQ4NzkzNDExMzFFLTE3LDkuMDg2MTUxODY5NTc2MjNFLTE3LDEuMjQ2MTAyMDY0MDAxMDQwMkUtMTcsMy40NjQ0ODc4NzA5NzE3NDA3RS0xNyw5LjA4MDE4MDU5MDAyODI3N0UtMTcsOC44OTk1NzA4MTY1NDk3ODNFLTE3LDAuMAorMjgsTW9uIDIxIEZlYiAxMSw0Ljk2MDYwNTAwODg3MTAzN0UtMTcsNC4zNzM4MzE3MzYwMzE3NjI0RS0xNyw0LjgyNDgzMjI4MjQxOTUxNTRFLTE3LDcuMDUxMjA5OTAwOTMxOTU3RS0xOCwxLjkzMDQ0NzA4MjAzODE1ODRFLTE3LDQuODIyMTM3ODcxMDg3NTk5RS0xNyw0LjU1NTIwODk1OTk0NjcxOEUtMTcsMC4wCisyOSxUdWUgMjIgRmViIDExLDIuNzg0NjU5ODk2NTc1NDA0NEUtMTcsMi41NDMwODAyNTMxNjAyNjA3RS0xNywyLjczNzM2ODM1ODc1NjY5NjhFLTE3LDQuMzM1ODUwMjE0MTI5Mzk2RS0xOCwxLjE0MjA2MTQxMjMzNDA4NDVFLTE3LDIuNzM2MDk3MDkxNDQ2NTc3NkUtMTcsMi41MTczNTE2NzE2NzI5NjJFLTE3LDAuMAorMzAsV2VkIDIzIEZlYiAxMSwxLjYyODM3NjY0NTI5MTcxOTNFLTE3LDEuNTIzNTEyMDkyNjk5ODI4OEUtMTcsMS42MTQ3NjIyNDQzOTc0OTY0RS0xNywyLjc4NjA5MzMwNzEwNjk3MTNFLTE4LDYuOTk2Mjg1OTYzNzUwNzQ3RS0xOCwxLjYxNDE0MzkwMzgyNzE2MTVFLTE3LDEuNDU2NTEyODMxNzQ5NTI2NkUtMTcsMC4wCiszMSxUaHUgMjQgRmViIDExLDkuNzU5ODE4Nzk4NDA5NzIzRS0xOCw5LjI5MDEzMDE1NjA4ODAwMkUtMTgsOS43NDc3OTY2ODg2MzY3NzhFLTE4LDEuODMxMzU2OTgwODMzMjMzRS0xOCw0LjM3MTgzNjUwMzE2NDc4M0UtMTgsOS43NDQ3MjU4Njg2MTgwMzlFLTE4LDguNjY2NDY0ODM5MzU0MDAxRS0xOCwwLjAKKzMyLEZyaSAyNSBGZWIgMTEsNS45MzY5NTYzMzAwNDI3MzhFLTE4LDUuNzIyNjUwMDg0NTg3ODAzRS0xOCw1Ljk2NDUxNzg5Mzk2NDcxOEUtMTgsMS4yMTY1NTM0NTQ0MTk5NTU0RS0xOCwyLjc2MTQwOTg5OTQ0MjA4OTJFLTE4LDUuOTYyOTY5OTQ2NTc4NzdFLTE4LDUuMjQ1OTI4MjQzNzUyNzZFLTE4LDAuMApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9MYXJnZU1peE1pZ19GRF9SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vUG9wdWxhdGlvbiBDb3VudF8wLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvTGFyZ2VNaXhNaWdfRkRfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL1BvcHVsYXRpb24gQ291bnRfMC5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmMyNDQwMQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvTGFyZ2VNaXhNaWdfRkRfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL1BvcHVsYXRpb24gQ291bnRfMC5jc3YKQEAgLTAsMCArMSBAQAoraXRlcmF0aW9uLHRpbWUsCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0xhcmdlTWl4TWlnX0ZEX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9Qb3B1bGF0aW9uIENvdW50XzEuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9MYXJnZU1peE1pZ19GRF9SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vUG9wdWxhdGlvbiBDb3VudF8xLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYzI0NDAxCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9MYXJnZU1peE1pZ19GRF9SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vUG9wdWxhdGlvbiBDb3VudF8xLmNzdgpAQCAtMCwwICsxIEBACitpdGVyYXRpb24sdGltZSwKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvTGFyZ2VNaXhNaWdfRkRfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL1BvcHVsYXRpb24gQ291bnRfMi5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0xhcmdlTWl4TWlnX0ZEX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9Qb3B1bGF0aW9uIENvdW50XzIuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJlYjIyZTMKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0xhcmdlTWl4TWlnX0ZEX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9Qb3B1bGF0aW9uIENvdW50XzIuY3N2CkBAIC0wLDAgKzEsMzMgQEAKK2l0ZXJhdGlvbix0aW1lLFlFLU4tRzE1MDAwMSxZRS1TLUcxNjAwMDEsWUUtUy1HMTYwMDAyLFlFLVMtRzE2MDAwMyxZRS1TLUcxNjAwMDQsWUUtUy1HMTYwMDA1LFlFLVMtRzE2MDAwNixZRS1TLUcxNjAwMDcKKzEsVHVlIDI1IEphbiAxMSwxLjc4MDA4MjZFNyw3Mzg2MTYuMCw2ODEwNjguMCwxMDgyODUuMCwxMDg3ODIyLjAsMzk0NjgwLjAsNTk2MjI3LjAsNDg2NjMuMAorMixXZWQgMjYgSmFuIDExLDEuNDM2MTE5MDM1RTcsMTU2NDUzMi44NDk5OTk5OTk5LDE1MjU2MTMuOSwxNTcyNjEuODUsMTAxNDI2NS4zOTk5OTk5OTk5LDEyOTY1MDMuNTAwMDAwMDAwMiwxNDg4MTU2LjE1MDAwMDAwMDEsNDg2NjMuMAorMyxUaHUgMjcgSmFuIDExLDEuMTc4MjY5MjZFNywyMTg1MTk5LjQ3NSwyMTU3ODgzLjE1MDAwMDAwMDQsMjAwMTEyLjAyNzUsOTk1MTA5Ljc1OTk5OTk5OTksMTk3NDU5NC44MzAwMDAwMDA1LDIxMTE5MzIuMTU3NSw0ODY2My4wCis0LEZyaSAyOCBKYW4gMTEsOTg0NzYzNC41NjA2MjUwMDIsMjY0OTUxNC43MTY4NzUwMDA0LDI2MzEzMjUuMDIyNzUwMDAxLDIzOTg2MS45MTQxMjUsMTAxMTIwMC45OTMyNSwyNDg0Njk0LjM2Njc1MDAwMDUsMjU0MzI5Mi40MjU2MjUsNDg2NjMuMAorNSxTYXQgMjkgSmFuIDExLDgzOTM1NDguOTc1MTAwMDAxLDI5OTQ5NTkuMDkyMjg3NTAwNCwyOTg1NzE4LjQ1MTU1MDAwMSwyNzg0MjguODY4MDgxMjUsMTA0OTIzOC42MTA5MTI1LDI4Njg0MTMuOTI2NzUsMjgzNzIxNi4wNzUzMTg3NSw0ODY2My4wCis2LFN1biAzMCBKYW4gMTEsNzI5OTE1NC41NTczNzUzMTMsMzI1MDIxMi4xNDUyNjU5MzgyLDMyNTA3MDYuNzgzNTI0Mzc2LDMxNjk2OS4zNTUyMjI4MTI1NiwxMTAwMDk2Ljk5Njk5MTI0OTcsMzE1Njg2My4xNjM2ODQzNzUsMzAzMzUyMC45OTc5MzU5MzczLDQ4NjYzLjAKKzcsTW9uIDMxIEphbiAxMSw2NDczODg4LjgwMDQyMDc4MiwzNDM3MTgxLjk5MTMzODc1MDMsMzQ0ODQxMi4yNTkzMTIwMDA2LDM1NjEyNS43MzczMTEyMzQ0LDExNTc2MTEuODE0OTUwMDYyMiwzMzczMzM3LjM2MzQ0LDMxNjA5NjYuMDMzMjI3MTcxNyw0ODY2My4wCis4LFR1ZSAxIEZlYiAxMSw1ODUwMTA1LjkyMjcwMjUyMiwzNTcyNTc1LjgxNTg5MDk5OCwzNTk1MzcwLjgyODE3NTE3NywzOTYyMDAuMDQxMTkzMTc1OSwxMjE3NzA1LjIyMTk4MTk3NjQsMzUzNTMxMC45MTE0Nzc1NzY1LDMyNDAyNTUuMjU4NTc4NTc1LDQ4NjYzLjAKKzksV2VkIDIgRmViIDExLDUzNzcyNjAuMzc4ODY4MTM0LDM2NjkxMTIuNzk4NzU5NDkwNywzNzAzOTY0LjgzNjQ1MjQ1NTMsNDM3Mjc1LjMwMDIzMjYxNTg1LDEyNzc3NTcuNDY0NzcyMzY2LDM2NTU5MTYuOTAzMDk0Mzc0NiwzMjg2MjM2LjMxNzgyMDU2NCw0ODY2My4wCisxMCxUaHUgMyBGZWIgMTEsNTAzNTIxNC4zNzYxMTU0MDYsMzczMTkxNi41OTQ2MTI2NTM0LDM3Nzg4OTQuMDU4Mjg2NTA4LDQ3OTQ2OS41NzE2NTY0NDM3NiwxMzM1NjIyLjEwNjY2ODgxODcsMzc0MDA1Ni4yOTE2MzY5NzI3LDMzMDYzNTEuMDAxMDIzMTk3NSw0ODY2My4wCisxMSxGcmkgNCBGZWIgMTEsNDc4MDk1Mi40NzYyNTkyMDQsMzc3MjE5OS4xMzA1NjUyODYsMzgzMDgzNy41OTUyOTY1NDMsNTIyNTIzLjIzODY3NTEwMjQsMTM5MDEzMy45OTg5MjkyMzIxLDM3OTkxNjQuNTI4MjEwNzYyLDMzMTE3MTMuMDMyMDYzODcxNiw0ODY2My4wCisxMixTYXQgNSBGZWIgMTEsNDU4MTM1NC4zNDIxMjM3MzEsMzc5ODYyNS40NjE3NDczMjc0LDM4NjgyMzYuNTg2ODM5NjI0Nyw1NjYwODkuODQ4NzE4NzA2MywxNDQxNDcwLjY4MDEwNzM4MDcsMzg0MjM2NS42NjE4NTkwNzI3LDMzMDkzODEuNTE5MTE2MDg4Nyw0ODY2My4wCisxMyxTdW4gNiBGZWIgMTEsNDQwNjAxMy45MzI4ODM4NCwzODE4OTY3LjI3NjAzODYzMjcsMzg5OTExOC4zNzIyNjA0MjYsNjA5ODU4Ljg5Mjc1MTAzNjksMTQ5MTA5Ny4xODY1MjY5NDY3LDM4Nzg0MjEuNjMyMDQ1NjAyNCwzMzA0MDQ2LjgyMjI4MTUyNzMsNDg2NjMuMAorMTQsTW9uIDcgRmViIDExLDQyNjk4MzguODQ5MTY0OTEzLDM4Mjk1NTMuODU3MTc4Mzk4NCwzOTE5NDIwLjc1ODY0ODA0NSw2NTM5MjAuODEwMDY1MDA2OCwxNTM3NjgyLjc0OTkzMjEzNSwzOTAyODYzLjM2NjI0NjUyOCwzMjk0MjQzLjcyNTY3OTAyMiw0ODY2My4wCisxNSxUdWUgOCBGZWIgMTEsNDE2MzE3NS4xNjIyMzAyMzEzLDM4MzI5NjEuNDE5MDkxODIyNiwzOTMxNjIwLjQ0ODQ3Njg4MjcsNjk4MTA4LjkwOTAxNTcyNDMsMTU4MTMyMi42OTgwMjY1ODIxLDM5MTgzNzQuNTM0MzI1NDMxNiwzMjgxOTYwLjk0NTg3ODQ5MSw0ODY2My4wCisxNixXZWQgOSBGZWIgMTEsNDA3ODc4NS45OTQ2ODI5MzUsMzgzMTEyNS42ODgxMzM2NjA3LDM5Mzc2MDIuOTM2OTgzNzU3Nyw3NDIyNjkuNjAwNDIzMzQzMiwxNjIyMTkzLjkxNzIwNDU1NTYsMzkyNzAwNi4yMDU0MzIzNjk0LDMyNjg1MzkuNzc0MjAwMDksNDg2NjMuMAorMTcsVGh1IDEwIEZlYiAxMSw0MDExMjQyLjUyMzQ5MTU1NywzODI1NDk3LjI5NDM4NjM2NCwzOTM4ODA4LjM5MDg0MjM0OTcsNzg2MjY1LjgxODIxNjM0NDYsMTY2MDUxNC45OTA0NTEwODg5LDM5MzAzMzEuMDA1MzcxMDA0MywzMjU0ODY0LjA5NDMwMjc1MDcsNDg2NjMuMAorMTgsRnJpIDExIEZlYiAxMSwzOTU2NDY5LjA1NTU0NjA3NzQsMzgxNzE2MC4xMzQ1MjM2MDAzLDM5MzYzNDAuNjczMzcyMTQ1LDgyOTk3OC4yNzg3ODIwMjAxLDE2OTY1MTkuOTgzMjY3NDc0NSwzOTI5NTU4Ljc2NDc2NDgzMjMsMzI0MTQ5Ny4yMjY4MDUzOTI3LDQ4NjYzLjAKKzE5LFNhdCAxMiBGZWIgMTEsMzkxMTQwMy4wODE5MTc4NTM2LDM4MDY5MjEuMzkxOTU3NDI4LDM5MzEwNDguOTcwMTAxNzM1LDg3MzMwNS4zNjU5NjAyMTg2LDE3MzA0NDEuNzU2NDU1NjM2NiwzOTI1NjIzLjQ0Mjk4NTY0OTcsMzIyODc4MC4xMDc2ODMwMjM0LDQ4NjYzLjAKKzIwLFN1biAxMyBGZWIgMTEsMzg3Mzc0MS4xNTg2NzgzNjgsMzc5NTM3OS44OTIwMTQ0NzksMzkyMzU4OS4wMjA0MjMyMDgsOTE2MTYyLjE4NzQzODkxNTYsMTc2MjUwMS44NTA3Mjc3NzMsMzkxOTI0OC41OTg1MDAxMDQ2LDMyMTY5MDEuNDA5Mjc4Njk4Myw0ODY2My4wCisyMSxNb24gMTQgRmViIDExLDM4NDE3NDguODcwNDYxMjEyNSwzNzgyOTc3LjkyMTI2OTcyNTUsMzkxNDQ2OS4xNDk4MTMwNjA2LDk1ODQ3OS4xNzI1NTcyODQyLDE3OTI5MDQuODQxNzI2NDE0NCwzOTEwOTk2LjgxMjA0NDM0MiwzMjA1OTQ3LjM0OTE4OTUwNjQsNDg2NjMuMAorMjIsVHVlIDE1IEZlYiAxMSwzODE0MTE4LjY1NTQ5MjQ5NTMsMzc3MDA0MC40NDQ0MDUzMDk0LDM5MDQwODQuOTU3NTIzNTUyMiwxMDAwMjAwLjQ1Nzk2OTY2NjcsMTgyMTgzNS42Nzk4NzY2NTA1LDM5MDEzMDcuMDg3MDc4MzQyLDMxOTU5MzYuODM0NzE1NTMsNDg2NjMuMAorMjMsV2VkIDE2IEZlYiAxMSwzNzg5ODYzLjM4ODA4NzgyNjMsMzc1NjgwNC43MzA1Nzg4NjczLDM4OTI3NDUuNTIzMjM3NTEzLDEwNDEyODIuMjIxMDE4OTQxNywxODQ5NDU4Ljk3Mjc1ODc4MzMsMzg5MDUyMy4yMjY2NTExMDk4LDMxODY4NDYuMDU0NzI4NTA1LDQ4NjYzLjAKKzI0LFRodSAxNyBGZWIgMTEsMzc2ODIzNi42ODQ3Mzc3NTQ1LDM3NDM0NDIuNjkyNDEyNDY1LDM4ODA2OTMuMjYyMDExNDYzLDEwODE2OTEuMDYwNTU5ODYsMTg3NTkxOS40ODU1MDU4MTUsMzg3ODkxNS40MjQ1MTIxMDQsMzE3ODYyNS41MDczMjIwODUsNDg2NjMuMAorMjUsRnJpIDE4IEZlYiAxMSwzNzQ4NjczLjE4OTYxMDgwMjYsMzczMDA3Ny42OTYxNzMyNjU2LDM4NjgxMTkuMDEyNzg2NTQ2MywxMTIxNDAyLjQ4Mzc2MTA4MzYsMTkwMTM0My4zNjE1ODQ4NjksMzg2NjY5Ni43NDI1NTY4MjM0LDMxNzEyMTEuNjMwNTg4MTU2Niw0ODY2My4wCisyNixTYXQgMTkgRmViIDExLDM3MzA3NDMuODAzMzAxNTc1LDM3MTY3OTcuMTg0MDI5ODUyLDM4NTUxNzMuNTQyMjc5Mjk1NiwxMTYwMzk5LjUyOTYwNjE5ODcsMTkyNTgzOS43MjczNzkzODIsMzg1NDAzNS43MjU4NjUyODE3LDMxNjQ1MzQuNjA0NTk5OTYyLDQ4NjYzLjAKKzI3LFN1biAyMCBGZWIgMTEsMzcxNDEyMi4wOTI5ODc2NzMsMzcwMzY2Mi4xMjkzNDAzMTEsMzg0MTk3Ni4zNDY1OTA5MjMsMTE5ODY3MS41NDE0NDg3ODM4LDE5NDk1MDIuNDU3NTg3Mjg5NCwzODQxMDY2LjA5MzIyOTQ3NjQsMzE1ODUyMy40NTU4NzcwOTEsNDg2NjMuMAorMjgsTW9uIDIxIEZlYiAxMSwzNjk4NTU5LjA3MzE0OTcyMTYsMzY5MDcxNC4xMDEyMjA2MywzODI4NjIyLjQxMDM3Mzg0NCwxMjM2MjEzLjA4OTIwOTYzNSwxOTcyNDExLjk1NzkzMDM5MiwzODI3ODk0LjIwNzQ1NDQ1MTQsMzE1MzEwOS4yNzc3MjI4NzMsNDg2NjMuMAorMjksVHVlIDIyIEZlYiAxMSwzNjgzODY0LjI1NTg2NjA2LDM2Nzc5ODAuNTI3NzI1NjcxNCwzODE1MTg3LjQxNzkwMjY5NDUsMTI3MzAyMy4wMzQ1OTk1OTksMTk5NDYzNi44NzY3MTk1MTYsMzgxNDYwNC44NTUzMzY5NDQsMzE0ODIyNy4xNDg5MTEwNjEsNDg2NjMuMAorMzAsV2VkIDIzIEZlYiAxMSwzNjY5ODkxLjM5OTY5NDM2LDM2NjU0NzguNjA0Mzk1NDk5LDM4MDE3MzEuNzg3MTU3NDEwOCwxMzA5MTAzLjcyODY1OTUyMDQsMjAxNjIzNS42OTQ0NTg2MzUsMzgwMTI2NS43MzY4NzQ1NzUsMzE0MzgxNy4xNjU4MjE1NDY3LDQ4NjYzLjAKKzMxLFRodSAyNCBGZWIgMTEsMzY1NjUyNy43ODE5NzU2MzMsMzY1MzIxOC4xODYzMDc5MTcsMzc4ODMwMy44MDYxMjU3MDcsMTM0NDQ2MC4zMjg5MDM0MDIyLDIwMzcyNTguMTY1OTcyMzYyNywzNzg3OTMwLjk2NTY2OTIwMywzMTM5ODI0Ljg4MjEwNzMyMTYsNDg2NjMuMAorMzIsRnJpIDI1IEZlYiAxMSwzNjQzNjg2LjExNTA5ODcwNywzNjQxMjAzLjkxOTE1NDM1LDM3NzQ5NDIuMDgxODk4MTc1NiwxMzc5MTAwLjIyMjcxMDc3NjEsMjA1Nzc0Ni42MDYxNjEyMDA0LDM3NzQ2NDMuODA5MzAyNzM3LDMxMzYyMDEuMzYyNzM1NjAxNiw0ODY2My4wCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0xhcmdlTWl4TWlnX0ZEX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9SXzAuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9MYXJnZU1peE1pZ19GRF9SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vUl8wLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYzI0NDAxCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9MYXJnZU1peE1pZ19GRF9SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vUl8wLmNzdgpAQCAtMCwwICsxIEBACitpdGVyYXRpb24sdGltZSwKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvTGFyZ2VNaXhNaWdfRkRfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL1JfMS5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0xhcmdlTWl4TWlnX0ZEX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9SXzEuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJjMjQ0MDEKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0xhcmdlTWl4TWlnX0ZEX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9SXzEuY3N2CkBAIC0wLDAgKzEgQEAKK2l0ZXJhdGlvbix0aW1lLApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9MYXJnZU1peE1pZ19GRF9SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vUl8yLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvTGFyZ2VNaXhNaWdfRkRfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL1JfMi5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzBkYTZmYwotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvTGFyZ2VNaXhNaWdfRkRfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL1JfMi5jc3YKQEAgLTAsMCArMSwzMyBAQAoraXRlcmF0aW9uLHRpbWUsWUUtTi1HMTUwMDAxLFlFLVMtRzE2MDAwMSxZRS1TLUcxNjAwMDIsWUUtUy1HMTYwMDAzLFlFLVMtRzE2MDAwNCxZRS1TLUcxNjAwMDUsWUUtUy1HMTYwMDA2LFlFLVMtRzE2MDAwNworMSxUdWUgMjUgSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzIsV2VkIDI2IEphbiAxMSwwLjAsMC40LDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCiszLFRodSAyNyBKYW4gMTEsMC4wNDAwMDAwMDAwMDAwMDAwMSwwLjQ4LDAuMDQwMDAwMDAwMDAwMDAwMDEsMC4wLDAuMCwwLjA0MDAwMDAwMDAwMDAwMDAxLDAuMDQwMDAwMDAwMDAwMDAwMDEsMC4wCis0LEZyaSAyOCBKYW4gMTEsMC4wODE4Nzg4MDI4OTk4MDA0NCw3LjU0MTA0MzA5ODEyNjE1MywwLjEwNTg3MDgxNTI4NzA5Mjc3LDAuMCwwLjAwMzAwMDAwMDAwMDAwMDAwMSwwLjA4MTg3NzI3NDQ4MTk3ODY1LDAuMjI2NDQyNjU5MDY4OTIwOTIsMC4wCis1LFNhdCAyOSBKYW4gMTEsMS41NjM5MDQ0NTMyMTgzOTg1LDE0LjYwNjE2MjY3NjE4MzY1OCwxLjU4ODM4NjgxNTM4Mzk2NzgsMi4wMDAwMDAwMDAwMDAwMDA2RS00LDAuMDM1OTQ5MjMwMTA1NjQzOTYsMS41NDE1NjE1NTE4MDM3OTQ2LDEuODM3OTA0Mzk0OTE1MDg0MiwwLjAKKzYsU3VuIDMwIEphbiAxMSw0LjMzMjAyMzUzMjQ1NDE1MiwxNDQuNDY5ODk2NTg1OTM1MzIsNS4xOTA4OTUxNzczMzUyMjUsMC4wMDM5MjAyMTE4MDYxMjcwNzcsMC4zMTA2NjIxODk2Njc0OSw0LjI3NzMxNTM4MzcwNTI4OSw5LjczNzk3MTI0Mjk5NDY0LDAuMAorNyxNb24gMzEgSmFuIDExLDQ2LjkwNDIxMzg0MTI1ODE1LDM3My45MzgwNDMyMzUzNjk0LDQ4LjEzNTIwMDg5Njk5NDUyLDAuMDM5OTU1MjAxMDUyMjExOTk0LDIuMzMxMTk1NDg0MzY1ODQxLDQ1Ljc2NDE1OTk5NDI0Nzk5LDYwLjUyNDI1NjEyMDc5MDc3NCwwLjAKKzgsVHVlIDEgRmViIDExLDE2MC4zMzA1Mzk3NTQ1NTk4NSwyODQ4LjM0NjM4OTIyMTY1ODcsMTgzLjQ4MDExOTA5ODYwOTIsMC4zNjc1NDI2NTY3OTkzNDkxLDE1LjY5MjQxOTY1NjAzMjkwNSwxNTYuODg0NDUzODU3Mjk4NzUsMzEzLjkyOTI5MzQ2MTUwNDMsMC4wCis5LFdlZCAyIEZlYiAxMSwxMjkxLjcyNTk2NDAxMDgyMzQsODg5MS43MTYxMzc0MDA1MDYsMTMzMy45OTI1NTcxOTIyNTEsMi44MjkxODM4MjI1MTE5NDYsMTAwLjYxNjE5MzYxODQ2ODIsMTI1MC40NzA4Njg4MjU5NDQ1LDE3NTkuMDc5MzM4NTU5MDQxNiwwLjAKKzEwLFRodSAzIEZlYiAxMSwxMDMwMS43MjM1NjQxMTA5MDQsNzUzNTcuMDUxMDExMTY0NDUsMTA4NzYuNjYzNzU0NDYzMzI1LDQyLjA5MzM3MjkxMjYxNzE4NCwxMTMwLjMwMTE2OTk3MzgwNjcsOTkzMy4xOTMwMTQ2Njk2ODMsMTU0NzAuMTYyMzAyNjE2NDIsMC4wCisxMSxGcmkgNCBGZWIgMTEsMTU4OTIyLjUxMDYzNjQ4NSw0MTAzNTYuMzEzMjU3OTUxNjQsMTU2MTI4LjQ1MjIzMDgwNTgsMTcwNi4zMjYyODYyMzYwODMyLDI3MDY3LjgyODM1ODM2NjM1LDE0NTU0Ni42MjkxMTI4MDU3NiwxODgwNDAuODY4NDc3NDA0NywwLjAKKzEyLFNhdCA1IEZlYiAxMSw2ODgyOTQuMTI2OTgwMzY1Nyw4ODI0MDEuNzIyNjE4OTE0OSw2MjA0OTcuMDM4MTEzNzQ3MywzMTUxNi4yMTI1NjA3NTE3NTIsMTczOTUwLjg1ODk0NTg0NTA3LDYwMjM5OS4zMjk5MzcxMDAxLDYwNTE1OS43NTgxNzAwMjA4LDAuMAorMTMsU3VuIDYgRmViIDExLDEzMjM4MTcuMzAxMzk0MjI5OCwxMzg4OTQwLjA3NTg5OTM2MTIsMTE4MTkyMC4zNjQwMDg5NzM4LDk1NzA2LjQ0NDI2MDUyODQ5LDM3ODM3NS4xMzAzMTM2MjY5NiwxMTYxMDMxLjI3NTA3NjA2ODcsMTA3OTg0My42Mjk1Mzg1ODAzLDAuMAorMTQsTW9uIDcgRmViIDExLDIwMjg1NjUuMzQxOTU4MjA4LDE5MjUxMzYuNDgzMDcyMzIxNCwxODMxOTY2Ljg1MDYzODU3NDUsMjEzNDMxLjIxMzY5Njg0OTQ3LDY0Nzg4MS41NDY1OTU1NjQ5LDE4MTQwMTEuODY0NzAwNDcyNywxNTk4MjUyLjc2MjgxMjcwNDgsMC4wCisxNSxUdWUgOCBGZWIgMTEsMjU5Mjg5OC41OTg0MjIxNDgzLDI0MTg1OTMuMzkyNzc3NzUyLDI0MDg4OTAuNDQwNDA0MTA2LDM0NTM4NS4xNDQ1NjcwMTkxLDkwODA0MC43Nzk1NTUzOTQxLDIzOTQ1NTcuMjI3MzAyOTg5NSwyMDQ4NDY1LjIzMjEwOTk2MiwwLjAKKzE2LFdlZCA5IEZlYiAxMSwzMDAxNTE4LjU2MzYwNTIwMDUsMjgyMTcyOS4zNTY3ODQ5NDMsMjg2NDUwNy45MDczMjU2NDAzLDQ3MjI0OS4xMzQ1NTc4NDQ0MywxMTMxMjM4Ljg2MDYxNjkyMjgsMjg1MzI2NC45NTE2MzYyMzE1LDIzOTk1NjMuNDc5NDk0NDQ4MywwLjAKKzE3LFRodSAxMCBGZWIgMTEsMzI4MjkzOC42OTQ2MjcyMTY2LDMxMjU2MDQuNDM5MzQ4MzAxNCwzMjAwODg0LjYyNjA5MDgyNCw1ODYxNTkuNTg3ODc5NzMwNCwxMzExOTE3LjgwMzI1NDMwODksMzE5MjA2NC4yMjkxNzc0OTY0LDI2NTY0NjIuMDg5NzI0NDQ5NCwwLjAKKzE4LEZyaSAxMSBGZWIgMTEsMzQ2OTc2NS4yODYwOTgwNjY3LDMzNDIwMjkuODM2OTQ0MTEzNSwzNDM4MDYxLjM2ODEzNDI3OTcsNjg1MzA1LjUyOTc0MDU1MiwxNDUzOTM0LjYyMDM0NDc2NDMsMzQzMTEwOC40NDYyNTkxMjUsMjgzNjM3MC41MjM4ODM5NDgsMC4wCisxOSxTYXQgMTIgRmViIDExLDM1ODkzMTYuNTk5NTI4NjI4LDM0ODk0NTUuOTk1NTIxNzE3NywzNTk5Mjc3LjgzODcwOTU4OTYsNzcwNzM2LjU2MzE1NjE3NTUsMTU2NDI2OC44OTUzOTg0MDksMzU5Mzc3MC4zODI4MjUxOTksMjk1ODA5Ni45ODgwMzkwOTM2LDAuMAorMjAsU3VuIDEzIEZlYiAxMSwzNjYyMzg0Ljg1NDI0NDEzODYsMzU4NTg0MC41OTc0MDQ1MDg0LDM3MDUxMjguNDI5OTY3ODk2NSw4NDQ1OTIuOTU0OTE2ODQ4OSwxNjUwMTA2LjQ4ODA0OTY0NjYsMzcwMDc0OS44MjcxNjI3ODYsMzAzNzk0MS40MDI2OTI4NTEsMC4wCisyMSxNb24gMTQgRmViIDExLDM3MDQwNzAuNTkwNjczMDk2NSwzNjQ2MDA1LjQ2NTMwNDAwMjYsMzc3MTkxMS45MDE3ODk0ODE4LDkwOTE5Ny43NDgzMTE2NzM0LDE3MTc2NzEuODI0ODYxMDkyNywzNzY4NDIyLjEyNzkyNDMzNCwzMDg4NjQ1LjI5MDQ0ODIwNTUsMC4wCisyMixUdWUgMTUgRmViIDExLDM3MjUwMDguODMzNjY4MjczLDM2ODEyMDIuMTE1NTM3MTA5LDM4MTE3NDkuODk1ODUyNzM3Niw5NjY2NDQuMzYyMDQ5MzQ3LDE3NzE5MTUuMzU2Mjk0MjA5MSwzODA4OTY0LjE4NTQ3NTQ4LDMxMTk2MDEuMDA5NDI5MDMyLDAuMAorMjMsV2VkIDE2IEZlYiAxMSwzNzMyNTEyLjI2MDEwNTc4OTYsMzY5OTU1Ny4xODQyMzc0ODc2LDM4MzMzMTMuMDM5MDI5MTg0MywxMDE4NjUyLjMwNjA1MDQ3NTYsMTgxNjU3OS42MjU4MTAxNiwzODMxMDg3LjI2MDI3NTA5MiwzMTM3NDcyLjExMTQzNjgwNDMsMC4wCisyNCxUaHUgMTcgRmViIDExLDM3MzE1MDcuMzk0ODg2NzUyNiwzNzA2NzUyLjY1MTgxNjI1ODcsMzg0MjY0Mi4yODY0NjQxMTc1LDEwNjY1NTYuNDg1MTkwOTc2LDE4NTQ0MDEuOTUyMzkwODc2MSwzODQwODYyLjkxNzYyMTMyOTQsMzE0Njg1Ny44NDE3MDMzMDE4LDAuMAorMjUsRnJpIDE4IEZlYiAxMSwzNzI1MjUyLjg2NjMwNTUzMSwzNzA2NjcyLjE1ODU5MTIyMSwzODQzODY4Ljg3NzgwNjEwNzUsMTExMTM1NC40MjIxNzI0MTg2LDE4ODczMzkuNjY3MzkxNjAzOCwzODQyNDQ1LjkzOTY0OTQ3NjcsMzE1MDg2NS4xOTk2MDE2MjYsMC4wCisyNixTYXQgMTkgRmViIDExLDM3MTU4NjcuMjY0NDI1MzA0NywzNzAxOTI2LjE4NzEyMzUwOCwzODM5NzgwLjM0MTE0OTA1ODcsMTE1Mzc3MS40Mjc1NzMzMTA3LDE5MTY3NzAuNjMyNTM1NzExMiwzODM4NjQyLjIzNTQwOTA5OTYsMzE1MTU1NS4zNzc1MDg5MzU1LDAuMAorMjcsU3VuIDIwIEZlYiAxMSwzNzA0NzA0Ljc4MTUxMDY1NSwzNjk0MjQ2Ljg4NTk4OTQ5NTYsMzgzMjIzOS4zOTE5ODY3NjIsMTE5NDMyNC40Mzg1MzE1ODQzLDE5NDM2NTQuNjE1MjE2MTEyNywzODMxMzI5LjAxNDAzMzI2MTcsMzE1MDI3My4yMDI5ODU0MTYsMC4wCisyOCxNb24gMjEgRmViIDExLDM2OTI2MTUuNzYwNzM2MDQ4NywzNjg0NzcxLjU1NzYwMjk0NTcsMzgyMjQ4Mi4zMzg2NzIwODMsMTIzMzM3Ni42Mzg0MjgyOCwxOTY4NjU1Ljg1NjY1MTU1ODgsMzgyMTc1NC4wODIzNzE0NDcsMzE0Nzg4MS41NzI5MTA0NTU1LDAuMAorMjksVHVlIDIyIEZlYiAxMSwzNjgwMTIzLjYyNjAxNzc2MDUsMzY3NDI0MC4xODI2ODg0NTMyLDM4MTEzMjYuMTY3MzA0NTY0NywxMjcxMTgwLjgzMjM1NzIxNjIsMTk5MjIzMi43NTA5OTE3MTQ3LDM4MTA3NDMuNTgxOTY4NzA0MiwzMTQ0OTI0LjA0NzM1NzYzMiwwLjAKKzMwLFdlZCAyMyBGZWIgMTEsMzY2NzU0Mi44NzkwMTA2NTgsMzY2MzEzMC4xODg5MDE2MzcsMzc5OTMwOS41NzQ3OTA0MjYsMTMwNzkxMi4yNzU2ODY2OTEsMjAxNDcwMS43ODg0NjQwMzA3LDM3OTg4NDMuNTE0ODMyNTk4LDMxNDE3MzUuNDUyODEyODQ2OCwwLjAKKzMxLFRodSAyNCBGZWIgMTEsMzY1NTA1Ni41NTIzNzQ1MjgsMzY1MTc0Ni45OTU0NTAwODgzLDM3ODY3ODcuNjg3MjgyMDg1NCwxMzQzNjkyLjY4NjA3MTc4NSwyMDM2MjgyLjMxMDgyMDE1OTMsMzc4NjQxNC44NDI3Mjg4NjYsMzEzODUxNS45NjU0NzQwMjUsMC4wCiszMixGcmkgMjUgRmViIDExLDM2NDI3NjYuMzE3MjI3ODcxNiwzNjQwMjg0LjEzNTUxNzg5NCwzNzczOTk1LjAwOTMzMTQ4NjcsMTM3ODYwNy4zNTc1ODQzNzk0LDIwNTcxMjcuNDE2MDgxMzMwNSwzNzczNjk2LjczNTAwNjcxMiwzMTM1MzgwLjA5MzQwMjQxODMsMC4wCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0xhcmdlTWl4TWlnX0ZEX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9TXzAuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9MYXJnZU1peE1pZ19GRF9SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vU18wLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYzI0NDAxCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9MYXJnZU1peE1pZ19GRF9SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vU18wLmNzdgpAQCAtMCwwICsxIEBACitpdGVyYXRpb24sdGltZSwKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvTGFyZ2VNaXhNaWdfRkRfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL1NfMS5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0xhcmdlTWl4TWlnX0ZEX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9TXzEuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJjMjQ0MDEKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0xhcmdlTWl4TWlnX0ZEX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9TXzEuY3N2CkBAIC0wLDAgKzEgQEAKK2l0ZXJhdGlvbix0aW1lLApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9MYXJnZU1peE1pZ19GRF9SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vU18yLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvTGFyZ2VNaXhNaWdfRkRfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL1NfMi5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODVhMGQ0OQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvTGFyZ2VNaXhNaWdfRkRfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL1NfMi5jc3YKQEAgLTAsMCArMSwzMyBAQAoraXRlcmF0aW9uLHRpbWUsWUUtTi1HMTUwMDAxLFlFLVMtRzE2MDAwMSxZRS1TLUcxNjAwMDIsWUUtUy1HMTYwMDAzLFlFLVMtRzE2MDAwNCxZRS1TLUcxNjAwMDUsWUUtUy1HMTYwMDA2LFlFLVMtRzE2MDAwNworMSxUdWUgMjUgSmFuIDExLDEuNzgwMDgyNkU3LDczODYxNS4wLDY4MTA2OC4wLDEwODI4NS4wLDEwODc4MjIuMCwzOTQ2ODAuMCw1OTYyMjcuMCw0ODY2My4wCisyLFdlZCAyNiBKYW4gMTEsMS40MzYxMTkwMjk0NTA3NDgxRTcsMTU2NDQ4Ny43OTM0ODA2MzY4LDE1MjU2MTMuNjk0NTU3NDA0NCwxNTcyNjEuODUsMTAxNDI2NS4zOTk5OTk5OTk5LDEyOTY1MDMuNDQ0NTE3MDM0NiwxNDg4MTU1LjE3MjIzMzM4MDgsNDg2NjMuMAorMyxUaHUgMjcgSmFuIDExLDEuMTc4MjY4Nzk4NzAxMjMzNkU3LDIxODUxNDUuNjQ0ODY3MjM0NCwyMTU3ODc4LjQxMjk4MDIyNSwyMDAxMTIuMDI3NSw5OTUxMDkuNjc1NTkzOTczNywxOTc0NTkwLjI2NTY3MDQxODMsMjExMTkyNi41MDkyODg2NzcsNDg2NjMuMAorNCxGcmkgMjggSmFuIDExLDk4NDc2MjUuMDkzNTQ0ODUyLDI2NDg2ODAuNzM3MDQ1MzMwNSwyNjMxMzEwLjE0OTQyNTUzODcsMjM5ODYxLjkwODk0NDQwMzUsMTAxMTIwMC4yMzM5OTQ2ODA1LDI0ODQ2ODQuOTkzMTY2NDcyLDI1NDMyNDkuNTgyMzY2NjUsNDg2NjMuMAorNSxTYXQgMjkgSmFuIDExLDgzOTMzNzIuMzM2OTAxMzgzLDI5OTMzNDEuNjEwMzcwODI3LDI5ODU1MzUuMDU1NDMzMDg0MywyNzg0MjguNzk4NTgyMjIwODYsMTA0OTIzMS4yMTU2MTY2OTA3LDI4NjgyNDAuODI4NTY1MDIxNSwyODM2OTc4LjcwMTYwMjg0MTcsNDg2NjMuMAorNixTdW4gMzAgSmFuIDExLDcyOTg2NjQuMTkxNzk5NjM3LDMyMzQyNDUuMTYwNTc1NjM1LDMyNTAwNjkuNzkyNzAzMTEwMywzMTY5NjguNTI4MjA1NjU3MSwxMTAwMDQ1LjYyOTU3Nzg1NDIsMzE1NjM4MS40NTQxNDYxNDc3LDMwMzIxMDguODUyNDAyMzcyMyw0ODY2My4wCis3LE1vbiAzMSBKYW4gMTEsNjQ2ODYwMC41MzIxNzU3NDIsMzM5NTkwMy40Njg1NzU4MTMzLDM0NDI4ODEuMDQ5Njg0NTAxLDM1NjExOC42MDI3NTA3NzIsMTE1NzI0OS4yMDQ2MzM0NjQ4LDMzNjgxOTcuNTU3MDc5NDg2LDMxNTM0MjYuNDQzNDU1ODQ1LDQ4NjYzLjAKKzgsVHVlIDEgRmViIDExLDU4MzIwMjYuMDA5NzA2MDI4LDMyNjA4OTIuMDIzNzc0MzkxNSwzNTczNzUzLjA4OTUyMTkwMywzOTYxNDEuNTQ1MDQzODgzNiwxMjE1NDQ4LjI5NDU3NTQyNiwzNTE3NjgzLjY0MzE4NTU3MjcsMzE5OTE0MC4wNDI3NjU3MDIsNDg2NjMuMAorOSxXZWQgMiBGZWIgMTEsNTIzMjIzMS43OTE1MjQ3NTQsMjc0OTkyOC4xMTMwNjUwNTE0LDM1NTIwNDEuODgwNTM3NjEzOCw0MzY4NTIuMTg2MjE2OTkyOSwxMjYzNzQ4LjA5OTY1NDIzODQsMzUxNjEwNC4wNzY1MDc0NTIsMzA3NDM1NC44NjI5ODk5NDUzLDQ4NjYzLjAKKzEwLFRodSAzIEZlYiAxMSwzOTU1MTA5LjE3NjA3NzA5MzUsMjAyNjQxLjkwMTQwMzQ1ODMyLDI2NTEwODEuOTMzMzc2MTI1LDQ3MzYzMS45NjA0MjM1NTEyLDExOTA2MzEuMzUyNjIyMjczOCwyNzIwODc2Ljk4NDg1NTY3NCwxNzI5Nzg1LjMxMjc4MTY5OCw0ODY2My4wCisxMSxGcmkgNCBGZWIgMTEsNTk0My4wNzgzMjEzMDk3NDc1LDYzMS42MTk4NjA1ODE2ODU1LDYwOC40NDk2NTU2MTYxMjY3LDM0NTk5NC44MDQwNzY5MDI1LDc0MzQ4LjgxNDc3NTE2OCw5Ljc4MDAzMTYyODcyNTY4OCwzOTEuNTIwNTYyMDE3MDI5NSw0ODY2My4wCisxMixTYXQgNSBGZWIgMTEsMC4wLDIuMjA2Mzc4MjAwMDg2NTM2NUUtNCwwLjAsMC4wLDcuNzQ1MzY1NzU4MDIzOTAyRS00LDAuMCwwLjAsNDg2NjMuMAorMTMsU3VuIDYgRmViIDExLDEuMTAzMTg5MDk5NzU5NjU1OEUtNSwwLjAsMS4xMDMxODkwOTk3NTk2NTU4RS01LDMuODcyNjgyODc5MDExOTUxRS01LDAuMCwxLjEwMzE4OTA5OTc1OTY1NThFLTUsNC45NzU4NzE5Nzg3NzE2MDY0RS01LDQ4NjYzLjAKKzE0LE1vbiA3IEZlYiAxMSwwLjAsNC4xNDI3MTk2MDM2NDk3ODJFLTYsMC4wLDAuMCw0LjQyNDI3NzIzNzY3MjgyMjVFLTYsMC4wLDAuMCw0ODY2My4wCisxNSxUdWUgOCBGZWIgMTEsMi4wNzEzNTk3OTk0MjM5MDU4RS03LDAuMCwyLjA3MTM1OTc5OTQyMzkwNThFLTcsMi4yMTIxMzg2MDMyNzk2NTY4RS03LDAuMCwyLjA3MTM1OTc5OTQyMzkwNThFLTcsNC4yODM0OTg0MDI3MDM1NjI0RS03LDQ4NjYzLjAKKzE2LFdlZCA5IEZlYiAxMSwwLjAsNS4yNDg3ODg4Njg1NjAxMTI0RS04LDAuMCwwLjAsMy4yNDc4MTgzOTMxMDM1NTZFLTgsMC4wLDAuMCw0ODY2My4wCisxNyxUaHUgMTAgRmViIDExLDIuNjI0Mzk0NDMxMTk4NTgwNUUtOSwwLjAsMi42MjQzOTQ0MzExOTg1ODA1RS05LDEuNjIzOTA5MTg1NjU0ODgyMkUtOSwwLjAsMi42MjQzOTQ0MzExOTg1ODA1RS05LDQuMjQ4MzAzNjE2ODUzNDYzRS05LDQ4NjYzLjAKKzE4LEZyaSAxMSBGZWIgMTEsMC4wLDYuMDYwNzQzNDIyOTU4MDUxRS0xMCwwLjAsMC4wLDIuOTM2MTA2MzE4OTIyMDQ0RS0xMCwwLjAsMC4wLDQ4NjYzLjAKKzE5LFNhdCAxMiBGZWIgMTEsMy4wMzAzNzE3MDc5MDc0OTg1RS0xMSwwLjAsMy4wMzAzNzE3MDc5MDc0OTg1RS0xMSwxLjQ2ODA1MzE1MDA0MTI4MkUtMTEsMC4wLDMuMDMwMzcxNzA3OTA3NDk4NUUtMTEsNC40OTg0MjQ4NTc5NDg3ODFFLTExLDQ4NjYzLjAKKzIwLFN1biAxMyBGZWIgMTEsMC4wLDYuNzk0NzY5OTU2MjQ1MjMzNUUtMTIsMC4wLDAuMCwyLjk4MzIzODkyOTE5MTMzMjVFLTEyLDAuMCwwLjAsNDg2NjMuMAorMjEsTW9uIDE0IEZlYiAxMSwzLjM5NzM4NDk3NDA5NTU1NkUtMTMsMC4wLDMuMzk3Mzg0OTc0MDk1NTU2RS0xMywxLjQ5MTYxOTQ1NTM4MzAxNTNFLTEzLDAuMCwzLjM5NzM4NDk3NDA5NTU1NkUtMTMsNC44ODkwMDQ0Mjk0Nzg1NzFFLTEzLDQ4NjYzLjAKKzIyLFR1ZSAxNSBGZWIgMTEsMC4wLDcuNTQwNTc5NjM3OTU3OTA1RS0xNCwwLjAsMC4wLDMuMTkwMzExODY3NjQyMjA3NkUtMTQsMC4wLDAuMCw0ODY2My4wCisyMyxXZWQgMTYgRmViIDExLDMuNzcwMjg5ODE0NDc5ODM0NkUtMTUsMC4wLDMuNzcwMjg5ODE0NDc5ODM0NkUtMTUsMS41OTUxNTU5MjQyODk4NDg1RS0xNSwwLjAsMy43NzAyODk4MTQ0Nzk4MzQ2RS0xNSw1LjM2NTQ0NTczODc2OTY4M0UtMTUsNDg2NjMuMAorMjQsVGh1IDE3IEZlYiAxMSwxLjM3NTQ0MzU1Njc1NDgwOTFFLTE1LDguMzM4MTU3NTQ5MjA1NjdFLTE2LDEuMjc1MjYzMzYzMjc2MTYxN0UtMTUsMS4zOTE4MzIxMTM5NjczODAzRS0xNiwzLjQ4MDMwMDc1MzYxMzAwNUUtMTYsMS4yNzM3OTUzNzgzNTA3MzM2RS0xNSwxLjQxODk0MjA2MDUyNjQ2OThFLTE1LDQ4NjYzLjAKKzI1LEZyaSAxOCBGZWIgMTEsNy45ODc2NTIyMjc4NTM1MUUtMTYsNi4wNDAxMTYzNTIwODQwMjFFLTE2LDcuNTI4NzM3NTg2MDY2MTk5RS0xNiw3LjE1ODczNDM0NTU1NTQ4OUUtMTcsMi4zMDU2MjIyMzEzMjg1NzYzRS0xNiw3LjUyMDI4NDY5NDUxODk5NEUtMTYsNy42MTA3NDY4OTU2MTg5ODlFLTE2LDQ4NjYzLjAKKzI2LFNhdCAxOSBGZWIgMTEsNS43OTQxNTk2Mzc5NzU1MTNFLTE2LDQuODIxOTA4MzI5Nzg0NzI3RS0xNiw1LjU1NTc4OTc1ODczNjI2NUUtMTYsNS4zNjIyNjY0NTExNzQyNTFFLTE3LDEuODAzMTMxNTc1NTg4MDQ0MkUtMTYsNS41NTA0MzA0MzEzNDU3NzdFLTE2LDUuMjk4ODE5MTUwODY3MzgzRS0xNiw0ODY2My4wCisyNyxTdW4gMjAgRmViIDExLDQuNzUwNDE5NTA2OTQ4NzgxRS0xNiw0LjE3NzI5MTEyMTcyNDQ4ODNFLTE2LDQuNjIyMTMxMDI3OTM5Njc2RS0xNiw0Ljc0OTYxNjg1ODg1NjgzNDRFLTE3LDEuNTY4MTIxOTE2NjUzMDc2RS0xNiw0LjYxODQ0MDY5MzY1MDA3MkUtMTYsNC4yMzQ5OTkxODQ2Nzg0MzNFLTE2LDQ4NjYzLjAKKzI4LE1vbiAyMSBGZWIgMTEsNC4xODY5MTgyMDI3ODUwNTY0RS0xNiwzLjgxNTc0OTI0MjAxMjIxOTRFLTE2LDQuMTIzNjM1NzExNjI3NDU4RS0xNiw0LjU5MTA3NTk4OTY2ODE4MTdFLTE3LDEuNDUzNzYzMDU3MDQwNDk4NEUtMTYsNC4xMjA5NTI4ODUwNTE4MzA3RS0xNiwzLjY2OTAyMDA0Njk0NzUzRS0xNiw0ODY2My4wCisyOSxUdWUgMjIgRmViIDExLDMuODU3NTM2NDYzOTg4MDAwNkUtMTYsMy42MDMzMTc3MDg1NTIzOTVFLTE2LDMuODM3NTM0NTM1NDk5NTY0RS0xNiw0LjY1NDgxODcwMjU1ODM1MUUtMTcsMS40MDA1ODY5ODk1MzMxNzg3RS0xNiwzLjgzNTUxNTQwMDcyMTk4OTNFLTE2LDMuMzM5NzUzNDA1MzQ0NTU1NEUtMTYsNDg2NjMuMAorMzAsV2VkIDIzIEZlYiAxMSwzLjY1Mzk5NzU1NjU0NzJFLTE2LDMuNDczODE5OTQ1OTk4Mjc5RS0xNiwzLjY2NTI0NjYwOTM5NDkyNUUtMTYsNC44NDM3NjE5MzY3OTkyMTRFLTE3LDEuMzgwODI3MTkyMDc1MTg4NkUtMTYsMy42NjM2OTMxMzUzOTgyMzJFLTE2LDMuMTM2MjExMTc2Mjk2NjIxNkUtMTYsNDg2NjMuMAorMzEsVGh1IDI0IEZlYiAxMSwzLjUyMjU0ODM5ODEzODEzMkUtMTYsMy4zOTIxMTIwNzczOTg2NTlFLTE2LDMuNTU3NTU3MTgyOTkyMTFFLTE2LDUuMTA4ODUxNzQzNDI5NDk2NUUtMTcsMS4zODAwNTU0NzM4MDY4ODM1RS0xNiwzLjU1NjM0NTExMTc3MjkwOUUtMTYsMy4wMDQ1NDcwOTI1ODc2Nzg3RS0xNiw0ODY2My4wCiszMixGcmkgMjUgRmViIDExLDMuNDM0MTk3MjI2MDczNzM4RS0xNiwzLjMzODUxMzA0ODcxMTM4ODNFLTE2LDMuNDg3ODI4NzA1OTY0MDQ2RS0xNiw1LjQyMTc4MTU1MzUyNTQ1NzVFLTE3LDEuMzkwMjA3NDM4MzEzMDQ1RS0xNiwzLjQ4Njg3NDUyODI0NjI4MjZFLTE2LDIuOTE2MTQxNTQ5ODUwMzg3N0UtMTYsNDg2NjMuMApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9MYXJnZU1peE1pZ19GRF9SZWZlcmVuY2UvVGVzdFNFSVIvcnVucGFyYW1ldGVycy5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0xhcmdlTWl4TWlnX0ZEX1JlZmVyZW5jZS9UZXN0U0VJUi9ydW5wYXJhbWV0ZXJzLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ODEzMjEyCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9MYXJnZU1peE1pZ19GRF9SZWZlcmVuY2UvVGVzdFNFSVIvcnVucGFyYW1ldGVycy5jc3YKQEAgLTAsMCArMSwyIEBACitkaXNlYXNlTmFtZSxwb3B1bGF0aW9uSWRlbnRpZmllcix0aW1lUGVyaW9kLGZyZXF1ZW5jeURlcGVuZGVudCxyZWZlcmVuY2VQb3B1bGF0aW9uRGVuc2l0eSxyb2FkTmV0d29ya0luZmVjdGlvdXNQcm9wb3J0aW9uLGNoYXJhY3RlcmlzdGljTWl4aW5nRGlzdGFuY2UsdHJhbnNtaXNzaW9uUmF0ZSxub25MaW5lYXJpdHlDb2VmZmljaWVudCxyZWNvdmVyeVJhdGUsaW5mZWN0aW91c01vcnRhbGl0eVJhdGUsaW1tdW5pdHlMb3NzUmF0ZSxpbmN1YmF0aW9uUmF0ZQorVGVzdFNFSVIsaHVtYW4sODY0MDAwMDAsdHJ1ZSwxMDAuMCwwLjAxLDIuMjUsNDUuMCwxLjAsMC40LDAuMCwwLjAsMC40ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9MYXJnZU1peE1pZ19GRF9SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9odW1hbi9CaXJ0aHNfMC5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0xhcmdlTWl4TWlnX0ZEX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL2h1bWFuL0JpcnRoc18wLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYzI0NDAxCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9MYXJnZU1peE1pZ19GRF9SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9odW1hbi9CaXJ0aHNfMC5jc3YKQEAgLTAsMCArMSBAQAoraXRlcmF0aW9uLHRpbWUsCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0xhcmdlTWl4TWlnX0ZEX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL2h1bWFuL0JpcnRoc18xLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvTGFyZ2VNaXhNaWdfRkRfUmVmZXJlbmNlL2F1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwvaHVtYW4vQmlydGhzXzEuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJjMjQ0MDEKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0xhcmdlTWl4TWlnX0ZEX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL2h1bWFuL0JpcnRoc18xLmNzdgpAQCAtMCwwICsxIEBACitpdGVyYXRpb24sdGltZSwKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvTGFyZ2VNaXhNaWdfRkRfUmVmZXJlbmNlL2F1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwvaHVtYW4vQmlydGhzXzIuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9MYXJnZU1peE1pZ19GRF9SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9odW1hbi9CaXJ0aHNfMi5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDZhZWY5ZAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvTGFyZ2VNaXhNaWdfRkRfUmVmZXJlbmNlL2F1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwvaHVtYW4vQmlydGhzXzIuY3N2CkBAIC0wLDAgKzEsMzMgQEAKK2l0ZXJhdGlvbix0aW1lLFlFLU4tRzE1MDAwMSxZRS1TLUcxNjAwMDEsWUUtUy1HMTYwMDAyLFlFLVMtRzE2MDAwMyxZRS1TLUcxNjAwMDQsWUUtUy1HMTYwMDA1LFlFLVMtRzE2MDAwNixZRS1TLUcxNjAwMDcKKzEsVHVlIDI1IEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyLFdlZCAyNiBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMyxUaHUgMjcgSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzQsRnJpIDI4IEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCis1LFNhdCAyOSBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorNixTdW4gMzAgSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzcsTW9uIDMxIEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCis4LFR1ZSAxIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCis5LFdlZCAyIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxMCxUaHUgMyBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTEsRnJpIDQgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzEyLFNhdCA1IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxMyxTdW4gNiBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTQsTW9uIDcgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzE1LFR1ZSA4IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxNixXZWQgOSBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTcsVGh1IDEwIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxOCxGcmkgMTEgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzE5LFNhdCAxMiBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjAsU3VuIDEzIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyMSxNb24gMTQgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzIyLFR1ZSAxNSBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjMsV2VkIDE2IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyNCxUaHUgMTcgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzI1LEZyaSAxOCBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjYsU2F0IDE5IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyNyxTdW4gMjAgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzI4LE1vbiAyMSBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjksVHVlIDIyIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCiszMCxXZWQgMjMgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzMxLFRodSAyNCBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMzIsRnJpIDI1IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0xhcmdlTWl4TWlnX0ZEX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL2h1bWFuL0NvdW50XzAuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9MYXJnZU1peE1pZ19GRF9SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9odW1hbi9Db3VudF8wLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYzI0NDAxCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9MYXJnZU1peE1pZ19GRF9SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9odW1hbi9Db3VudF8wLmNzdgpAQCAtMCwwICsxIEBACitpdGVyYXRpb24sdGltZSwKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvTGFyZ2VNaXhNaWdfRkRfUmVmZXJlbmNlL2F1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwvaHVtYW4vQ291bnRfMS5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0xhcmdlTWl4TWlnX0ZEX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL2h1bWFuL0NvdW50XzEuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJjMjQ0MDEKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0xhcmdlTWl4TWlnX0ZEX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL2h1bWFuL0NvdW50XzEuY3N2CkBAIC0wLDAgKzEgQEAKK2l0ZXJhdGlvbix0aW1lLApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9MYXJnZU1peE1pZ19GRF9SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9odW1hbi9Db3VudF8yLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvTGFyZ2VNaXhNaWdfRkRfUmVmZXJlbmNlL2F1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwvaHVtYW4vQ291bnRfMi5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmU5N2YxYQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvTGFyZ2VNaXhNaWdfRkRfUmVmZXJlbmNlL2F1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwvaHVtYW4vQ291bnRfMi5jc3YKQEAgLTAsMCArMSwzMyBAQAoraXRlcmF0aW9uLHRpbWUsWUUtTi1HMTUwMDAxLFlFLVMtRzE2MDAwMSxZRS1TLUcxNjAwMDIsWUUtUy1HMTYwMDAzLFlFLVMtRzE2MDAwNCxZRS1TLUcxNjAwMDUsWUUtUy1HMTYwMDA2LFlFLVMtRzE2MDAwNworMSxUdWUgMjUgSmFuIDExLDEuNzgwMDgyNkU3LDczODYxNi4wLDY4MTA2OC4wLDEwODI4NS4wLDEwODc4MjIuMCwzOTQ2ODAuMCw1OTYyMjcuMCw0ODY2My4wCisyLFdlZCAyNiBKYW4gMTEsMS40MzYxMTkwMzVFNywxNTY0NTMyLjg0OTk5OTk5OTksMTUyNTYxMy45LDE1NzI2MS44NSwxMDE0MjY1LjM5OTk5OTk5OTksMTI5NjUwMy41LDE0ODgxNTYuMTUwMDAwMDAwMSw0ODY2My4wCiszLFRodSAyNyBKYW4gMTEsMS4xNzgyNjkyNkU3LDIxODUxOTkuNDc1LDIxNTc4ODMuMTUsMjAwMTEyLjAyNzUsOTk1MTA5Ljc1OTk5OTk5OTksMTk3NDU5NC44MywyMTExOTMyLjE1NzUsNDg2NjMuMAorNCxGcmkgMjggSmFuIDExLDk4NDc2MzQuNTYwNjI1LDI2NDk1MTQuNzE2ODc1LDI2MzEzMjUuMDIyNzUsMjM5ODYxLjkxNDEyNSwxMDExMjAwLjk5MzI0OTk5OTksMjQ4NDY5NC4zNjY3NSwyNTQzMjkyLjQyNTYyNSw0ODY2My4wCis1LFNhdCAyOSBKYW4gMTEsODM5MzU0OC45NzUxLDI5OTQ5NTkuMDkyMjg3NSwyOTg1NzE4LjQ1MTU1LDI3ODQyOC44NjgwODEyNSwxMDQ5MjM4LjYxMDkxMjUsMjg2ODQxMy45MjY3NSwyODM3MjE2LjA3NTMxODc1LDQ4NjYzLjAKKzYsU3VuIDMwIEphbiAxMSw3Mjk5MTU0LjU1NzM3NTMxMiwzMjUwMjEyLjE0NTI2NTkzNzMsMzI1MDcwNi43ODM1MjQzNzUsMzE2OTY5LjM1NTIyMjgxMjUsMTEwMDA5Ni45OTY5OTEyNSwzMTU2ODYzLjE2MzY4NDM3NSwzMDMzNTIwLjk5NzkzNTkzNzcsNDg2NjMuMAorNyxNb24gMzEgSmFuIDExLDY0NzM4ODguODAwNDIwNzgxLDM0MzcxODEuOTkxMzM4NzUsMzQ0ODQxMi4yNTkzMTIsMzU2MTI1LjczNzMxMTIzNDM1LDExNTc2MTEuODE0OTUwMDYyNCwzMzczMzM3LjM2MzQ0LDMxNjA5NjYuMDMzMjI3MTcxNyw0ODY2My4wCis4LFR1ZSAxIEZlYiAxMSw1ODUwMTA1LjkyMjcwMjUyMSwzNTcyNTc1LjgxNTg5MDk5NzYsMzU5NTM3MC44MjgxNzUxNzcsMzk2MjAwLjA0MTE5MzE3NTc3LDEyMTc3MDUuMjIxOTgxOTc2NCwzNTM1MzEwLjkxMTQ3NzU3NjUsMzI0MDI1NS4yNTg1Nzg1NzU3LDQ4NjYzLjAKKzksV2VkIDIgRmViIDExLDUzNzcyNjAuMzc4ODY4MTMzLDM2NjkxMTIuNzk4NzU5NDkwNywzNzAzOTY0LjgzNjQ1MjQ1NTMsNDM3Mjc1LjMwMDIzMjYxNTgsMTI3Nzc1Ny40NjQ3NzIzNjY1LDM2NTU5MTYuOTAzMDk0Mzc0NiwzMjg2MjM2LjMxNzgyMDU2NCw0ODY2My4wCisxMCxUaHUgMyBGZWIgMTEsNTAzNTIxNC4zNzYxMTU0MDYsMzczMTkxNi41OTQ2MTI2NTQsMzc3ODg5NC4wNTgyODY1MDc2LDQ3OTQ2OS41NzE2NTY0NDM2NCwxMzM1NjIyLjEwNjY2ODgxOSwzNzQwMDU2LjI5MTYzNjk3MywzMzA2MzUxLjAwMTAyMzE5Nyw0ODY2My4wCisxMSxGcmkgNCBGZWIgMTEsNDc4MDk1Mi40NzYyNTkyMDQsMzc3MjE5OS4xMzA1NjUyODY2LDM4MzA4MzcuNTk1Mjk2NTQyNiw1MjI1MjMuMjM4Njc1MTAyMjQsMTM5MDEzMy45OTg5MjkyMzIxLDM3OTkxNjQuNTI4MjEwNzYyLDMzMTE3MTMuMDMyMDYzODcxLDQ4NjYzLjAKKzEyLFNhdCA1IEZlYiAxMSw0NTgxMzU0LjM0MTA0NTkzNiwzNzk4NjI1LjQ2MDc3MDc2MDcsMzg2ODIzNi41ODQ3ODYwMTQsNTY2MDg5Ljc5OTQ2MDc2ODUsMTQ0MTQ3MC42ODAxMDczODA3LDM4NDIzNjUuNjYwOTU3Mzc0NiwzMzA5MzgxLjQ3Mjg3MTc2NjQsNDg2NjMuMAorMTMsU3VuIDYgRmViIDExLDQ0MDYwMTMuOTMxODA2MDQ1LDM4MTg5NjcuMjcxNTk5NjYzLDM4OTkxMTguMzcwMjA2ODE1Nyw2MDk4NTguODQzNDkzMDk5MSwxNDkxMDk3LjE3NTcxMzI2OTUsMzg3ODQyMS42MzExNDM5MDQsMzMwNDA0Ni43NzYwMzcyMDUsNDg2NjMuMAorMTQsTW9uIDcgRmViIDExLDQyNjk4MzguODQ3ODk0MjE1LDM4Mjk1NTMuODUyNzM5NDI4NiwzOTE5NDIwLjc1NjQwMzI3NCw2NTM5MjAuNzYwMTA0MTA3NywxNTM3NjgyLjczOTExODQ1NzgsMzkwMjg2My4zNjUxNTI5NDQzLDMyOTQyNDMuNjc4NTg3NTczLDQ4NjYzLjAKKzE1LFR1ZSA4IEZlYiAxMSw0MTYzMTc1LjE2MDk1OTUzMywzODMyOTYxLjQxNDU5MzQ0MzMsMzkzMTYyMC40NDYyMzIxMTIsNjk4MTA4Ljg1OTA1NDgyNTIsMTU4MTMyMi42ODcxNDExOTYsMzkxODM3NC41MzMyMzE4NDg0LDMyODE5NjAuODk4Nzg3MDQyLDQ4NjYzLjAKKzE2LFdlZCA5IEZlYiAxMSw0MDc4Nzg1Ljk5MzQwOTg0OSwzODMxMTI1LjY4MzYzNTI4MTQsMzkzNzYwMi45MzQ3MzY1MzY0LDc0MjI2OS41NTA0NTkxNDM3LDE2MjIxOTMuOTA2MzE5MTY5OCwzOTI3MDA2LjIwNDMzNjMyNTYsMzI2ODUzOS43MjcxMDM2OTQzLDQ4NjYzLjAKKzE3LFRodSAxMCBGZWIgMTEsNDAxMTI0Mi41MjIyMTg0NzEsMzgyNTQ5Ny4yODk4ODc1NDUsMzkzODgwOC4zODg1OTUxMjg0LDc4NjI2NS43NjgyNTIxNDUsMTY2MDUxNC45Nzk1NjUzOTQ4LDM5MzAzMzEuMDA0Mjc0OTYsMzI1NDg2NC4wNDcyMDYzNTUzLDQ4NjYzLjAKKzE4LEZyaSAxMSBGZWIgMTEsMzk1NjQ2OS4wNTQyNzI5NzYyLDM4MTcxNjAuMTMwMDI0NzgyLDM5MzYzNDAuNjcxMTI0OTA4LDgyOTk3OC4yMjg4MTc4MDc1LDE2OTY1MTkuOTcyMzgxNzgwNCwzOTI5NTU4Ljc2MzY2ODc3MywzMjQxNDk3LjE3OTcwODk3MjYsNDg2NjMuMAorMTksU2F0IDEyIEZlYiAxMSwzOTExNDAzLjA4MDY0NDc1MywzODA2OTIxLjM4NzQ1ODYwNywzOTMxMDQ4Ljk2Nzg1NDQ5ODQsODczMzA1LjMxNTk5NjAwNjEsMTczMDQ0MS43NDU1Njk5NDE0LDM5MjU2MjMuNDQxODg5NTkwNiwzMjI4NzgwLjA2MDU4NjYwNCw0ODY2My4wCisyMCxTdW4gMTMgRmViIDExLDM4NzM3NDEuMTU3NDA1MjY3NSwzNzk1Mzc5Ljg4NzUxNTY1OCwzOTIzNTg5LjAxODE3NTk3MSw5MTYxNjIuMTM3NDc0NzAyOSwxNzYyNTAxLjgzOTg0MjA3NzgsMzkxOTI0OC41OTc0MDQwNDUsMzIxNjkwMS4zNjIxODIyNzgsNDg2NjMuMAorMjEsTW9uIDE0IEZlYiAxMSwzODQxNzQ4Ljg2OTE4ODExMTcsMzc4Mjk3Ny45MTY3NzA5MDUsMzkxNDQ2OS4xNDc1NjU4MjQsOTU4NDc5LjEyMjU5MzA3MTcsMTc5MjkwNC44MzA4NDA3MTkyLDM5MTA5OTYuODEwOTQ4MjgzLDMyMDU5NDcuMzAyMDkzMDg2OCw0ODY2My4wCisyMixUdWUgMTUgRmViIDExLDM4MTQxMTguNjU0MjE5Mzk0NSwzNzcwMDQwLjQzOTkwNjQ4OSwzOTA0MDg0Ljk1NTI3NjMxNTYsMTAwMDIwMC40MDgwMDU0NTQsMTgyMTgzNS42Njg5OTA5NTUyLDM5MDEzMDcuMDg1OTgyMjgyNiwzMTk1OTM2Ljc4NzYxOTExMDcsNDg2NjMuMAorMjMsV2VkIDE2IEZlYiAxMSwzNzg5ODYzLjM4NjgxNDcyNTYsMzc1NjgwNC43MjYwODAwNDY1LDM4OTI3NDUuNTIwOTkwMjc2NywxMDQxMjgyLjE3MTA1NDcyOSwxODQ5NDU4Ljk2MTg3MzA4OCwzODkwNTIzLjIyNTU1NTA1LDMxODY4NDYuMDA3NjMyMDg2LDQ4NjYzLjAKKzI0LFRodSAxNyBGZWIgMTEsMzc2ODIzNi42ODM0NjQ2NTMzLDM3NDM0NDIuNjg3OTEzNjQ0LDM4ODA2OTMuMjU5NzY0MjI2LDEwODE2OTEuMDEwNTk1NjQ3LDE4NzU5MTkuNDc0NjIwMTIsMzg3ODkxNS40MjM0MTYwNDUsMzE3ODYyNS40NjAyMjU2NjYsNDg2NjMuMAorMjUsRnJpIDE4IEZlYiAxMSwzNzQ4NjczLjE4ODMzNzcwMiwzNzMwMDc3LjY5MTY3NDQ0NSwzODY4MTE5LjAxMDUzOTMwOSwxMTIxNDAyLjQzMzc5Njg3MDUsMTkwMTM0My4zNTA2OTkxNzM1LDM4NjY2OTYuNzQxNDYwNzY0MywzMTcxMjExLjU4MzQ5MTczNyw0ODY2My4wCisyNixTYXQgMTkgRmViIDExLDM3MzA3NDMuODAyMDI4NDc0NCwzNzE2Nzk3LjE3OTUzMTAzMTMsMzg1NTE3My41NDAwMzIwNTg1LDExNjAzOTkuNDc5NjQxOTg1NiwxOTI1ODM5LjcxNjQ5MzY4NjcsMzg1NDAzNS43MjQ3NjkyMjI2LDMxNjQ1MzQuNTU3NTAzNTQyNCw0ODY2My4wCisyNyxTdW4gMjAgRmViIDExLDM3MTQxMjIuMDkxNzE0NTcyLDM3MDM2NjIuMTI0ODQxNDksMzg0MTk3Ni4zNDQzNDM2ODYsMTE5ODY3MS40OTE0ODQ1NzA4LDE5NDk1MDIuNDQ2NzAxNTk0NCwzODQxMDY2LjA5MjEzMzQxNzMsMzE1ODUyMy40MDg3ODA2NzA3LDQ4NjYzLjAKKzI4LE1vbiAyMSBGZWIgMTEsMzY5ODU1OS4wNzE4NzY2MjEsMzY5MDcxNC4wOTY3MjE4MDksMzgyODYyMi40MDgxMjY2MDcsMTIzNjIxMy4wMzkyNDU0MjIsMTk3MjQxMS45NDcwNDQ2OTcxLDM4Mjc4OTQuMjA2MzU4MzkyMywzMTUzMTA5LjIzMDYyNjQ1MjcsNDg2NjMuMAorMjksVHVlIDIyIEZlYiAxMSwzNjgzODY0LjI1NDU5Mjk2LDM2Nzc5ODAuNTIzMjI2ODUwNywzODE1MTg3LjQxNTY1NTQ1NywxMjczMDIyLjk4NDYzNTM4NTcsMTk5NDYzNi44NjU4MzM4MjEyLDM4MTQ2MDQuODU0MjQwODg1LDMxNDgyMjcuMTAxODE0NjQxLDQ4NjYzLjAKKzMwLFdlZCAyMyBGZWIgMTEsMzY2OTg5MS4zOTg0MjEyNTk2LDM2NjU0NzguNTk5ODk2Njc4LDM4MDE3MzEuNzg0OTEwMTczLDEzMDkxMDMuNjc4Njk1MzA3NiwyMDE2MjM1LjY4MzU3Mjk0MDUsMzgwMTI2NS43MzU3Nzg1MTU3LDMxNDM4MTcuMTE4NzI1MTI2Niw0ODY2My4wCiszMSxUaHUgMjQgRmViIDExLDM2NTY1MjcuNzgwNzAyNTMyMywzNjUzMjE4LjE4MTgwOTA5NiwzNzg4MzAzLjgwMzg3ODQ3LDEzNDQ0NjAuMjc4OTM5MTg5MiwyMDM3MjU4LjE1NTA4NjY2ODIsMzc4NzkzMC45NjQ1NzMxNDQsMzEzOTgyNC44MzUwMTA5MDE2LDQ4NjYzLjAKKzMyLEZyaSAyNSBGZWIgMTEsMzY0MzY4Ni4xMTM4MjU2MDYsMzY0MTIwMy45MTQ2NTU1Mjk0LDM3NzQ5NDIuMDc5NjUwOTM4LDEzNzkxMDAuMTcyNzQ2NTYzLDIwNTc3NDYuNTk1Mjc1NTA2LDM3NzQ2NDMuODA4MjA2Njc3NCwzMTM2MjAxLjMxNTYzOTE4MSw0ODY2My4wCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0xhcmdlTWl4TWlnX0ZEX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL2h1bWFuL0RlYXRoc18wLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvTGFyZ2VNaXhNaWdfRkRfUmVmZXJlbmNlL2F1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwvaHVtYW4vRGVhdGhzXzAuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJjMjQ0MDEKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0xhcmdlTWl4TWlnX0ZEX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL2h1bWFuL0RlYXRoc18wLmNzdgpAQCAtMCwwICsxIEBACitpdGVyYXRpb24sdGltZSwKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvTGFyZ2VNaXhNaWdfRkRfUmVmZXJlbmNlL2F1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwvaHVtYW4vRGVhdGhzXzEuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9MYXJnZU1peE1pZ19GRF9SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9odW1hbi9EZWF0aHNfMS5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmMyNDQwMQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvTGFyZ2VNaXhNaWdfRkRfUmVmZXJlbmNlL2F1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwvaHVtYW4vRGVhdGhzXzEuY3N2CkBAIC0wLDAgKzEgQEAKK2l0ZXJhdGlvbix0aW1lLApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9MYXJnZU1peE1pZ19GRF9SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9odW1hbi9EZWF0aHNfMi5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0xhcmdlTWl4TWlnX0ZEX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL2h1bWFuL0RlYXRoc18yLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNmFlZjlkCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9MYXJnZU1peE1pZ19GRF9SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9odW1hbi9EZWF0aHNfMi5jc3YKQEAgLTAsMCArMSwzMyBAQAoraXRlcmF0aW9uLHRpbWUsWUUtTi1HMTUwMDAxLFlFLVMtRzE2MDAwMSxZRS1TLUcxNjAwMDIsWUUtUy1HMTYwMDAzLFlFLVMtRzE2MDAwNCxZRS1TLUcxNjAwMDUsWUUtUy1HMTYwMDA2LFlFLVMtRzE2MDAwNworMSxUdWUgMjUgSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzIsV2VkIDI2IEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCiszLFRodSAyNyBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorNCxGcmkgMjggSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzUsU2F0IDI5IEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCis2LFN1biAzMCBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorNyxNb24gMzEgSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzgsVHVlIDEgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzksV2VkIDIgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzEwLFRodSAzIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxMSxGcmkgNCBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTIsU2F0IDUgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzEzLFN1biA2IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxNCxNb24gNyBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTUsVHVlIDggRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzE2LFdlZCA5IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxNyxUaHUgMTAgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzE4LEZyaSAxMSBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTksU2F0IDEyIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyMCxTdW4gMTMgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzIxLE1vbiAxNCBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjIsVHVlIDE1IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyMyxXZWQgMTYgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzI0LFRodSAxNyBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjUsRnJpIDE4IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyNixTYXQgMTkgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzI3LFN1biAyMCBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjgsTW9uIDIxIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyOSxUdWUgMjIgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzMwLFdlZCAyMyBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMzEsVGh1IDI0IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCiszMixGcmkgMjUgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvTGFyZ2VNaXhNaWdfRkRfUmVmZXJlbmNlL2F1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwvaHVtYW4vRGVuc2l0eV8wLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvTGFyZ2VNaXhNaWdfRkRfUmVmZXJlbmNlL2F1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwvaHVtYW4vRGVuc2l0eV8wLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYzI0NDAxCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9MYXJnZU1peE1pZ19GRF9SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9odW1hbi9EZW5zaXR5XzAuY3N2CkBAIC0wLDAgKzEgQEAKK2l0ZXJhdGlvbix0aW1lLApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9MYXJnZU1peE1pZ19GRF9SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9odW1hbi9EZW5zaXR5XzEuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9MYXJnZU1peE1pZ19GRF9SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9odW1hbi9EZW5zaXR5XzEuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJjMjQ0MDEKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0xhcmdlTWl4TWlnX0ZEX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL2h1bWFuL0RlbnNpdHlfMS5jc3YKQEAgLTAsMCArMSBAQAoraXRlcmF0aW9uLHRpbWUsCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0xhcmdlTWl4TWlnX0ZEX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL2h1bWFuL0RlbnNpdHlfMi5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0xhcmdlTWl4TWlnX0ZEX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL2h1bWFuL0RlbnNpdHlfMi5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTYwZjA2MwotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvTGFyZ2VNaXhNaWdfRkRfUmVmZXJlbmNlL2F1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwvaHVtYW4vRGVuc2l0eV8yLmNzdgpAQCAtMCwwICsxLDMzIEBACitpdGVyYXRpb24sdGltZSxZRS1OLUcxNTAwMDEsWUUtUy1HMTYwMDAxLFlFLVMtRzE2MDAwMixZRS1TLUcxNjAwMDMsWUUtUy1HMTYwMDA0LFlFLVMtRzE2MDAwNSxZRS1TLUcxNjAwMDYsWUUtUy1HMTYwMDA3CisxLFR1ZSAyNSBKYW4gMTEsMTM2LjcwNTIzNDE4NTE2NzEsNDAuMDY5MDA0NDI2Njk5MDc0LDEzNC4yNDgyMDYyNjAzNDg1LDEuNDUwMjE3Njk2NzEzODU3NiwxMC4wNDQ3Mzc3OTIyMTUzNDcsNjAuODI2NjgwNjM5ODkxNSw4LjQ5MTM1MDk0OTUwMTM5NCwxMi43MzQ2NzE0NDY4ODk4MDIKKzIsV2VkIDI2IEphbiAxMSwxMTAuMjg5ODE5Njk1Njk5MDUsODQuODczOTcxOTg1OTM4NzIsMzAwLjcyMDIzNTc0ODYzOTksMi4xMDYxNDUwNjA2MDgyMTE1LDkuMzY1NTMwMzg1MjI1MTcsMTk5LjgxMjUxNzMzODEwMDY2LDIxLjE5NDAzNTM4ODA0NjU2NSwxMi43MzQ2NzE0NDY4ODk4MDIKKzMsVGh1IDI3IEphbiAxMSw5MC40ODc2OTcwOTk4MzMyLDExOC41NDQzNjg3MDcxNDM0OSw0MjUuMzQ5NTEzMTI3ODA4ODUsMi42ODAwMjAzNTAwNTU3Nzk4LDkuMTg4NjUwOTEzMTc3Mjg4LDMwNC4zMTc1NDYxNTc4NzY5LDMwLjA3NzczNDAzNTY0NDQsMTIuNzM0NjcxNDQ2ODg5ODAyCis0LEZyaSAyOCBKYW4gMTEsNzUuNjI3MDA2NzkwNTk0MiwxNDMuNzMyODk2MjgwNDMzNTUsNTE4LjY3MTY1MTU3MTAwMDYsMy4yMTIzNzQ2ODM3NjcyMzEzLDkuMzM3MjM0MjQ2NDMzNjcyLDM4Mi45MzIyNzYxMDczMjY3LDM2LjIyMTA4NDUwODQwMTI0LDEyLjczNDY3MTQ0Njg4OTgwMgorNSxTYXQgMjkgSmFuIDExLDY0LjQ2MDA0Njg3MDA1NjE5LDE2Mi40NzI4MjYzNzYxNTU1LDU4OC41Mjc2NDU1Nzg3Mjc0LDMuNzI4ODg2NDczMzU2NzYxLDkuNjg4NDY2MjQ1NDc0MjgxLDQ0Mi4wNjk3NzI2Mzk3MDY1Nyw0MC40MDcwODg5MzYwOTA1OTUsMTIuNzM0NjcxNDQ2ODg5ODAyCis2LFN1biAzMCBKYW4gMTEsNTYuMDU1NDExODczNTY4MjEsMTc2LjMxOTk4ODc4NDkzMjgsNjQwLjc2MDYyMTIxMDM1NTUsNC4yNDUwNDM4MDM0ODI1MTEsMTAuMTU4MDgyNzM4NTE4NDU0LDQ4Ni41MjQ1NDUxNTM3MTE4Nyw0My4yMDI4MjYxMTUxNDY5OCwxMi43MzQ2NzE0NDY4ODk4MDIKKzcsTW9uIDMxIEphbiAxMSw0OS43MTc2MDc3NDE5MjQ2MywxODYuNDYyODcxNjc2NjUyOTgsNjc5LjczMTE4NzI4MDYxMiw0Ljc2OTQ0OTU2ODMwNjA2OCwxMC42ODkxNjM0MzUxNDI3ODEsNTE5Ljg4Njc4MDQyMTA0NjEsNDUuMDE3ODczOTQzMjg4NzEsMTIuNzM0NjcxNDQ2ODg5ODAyCis4LFR1ZSAxIEZlYiAxMSw0NC45MjcxMzQyODk3ODQxNSwxOTMuODA3ODE5MTkzODA5MDIsNzA4LjY5ODgxNDk4MzY3NDQsNS4zMDYxNDg2OTI1ODk5NTEsMTEuMjQ0MDU0MzI0MTYzNjM4LDU0NC44NDk1Njg3MDE2NTc3LDQ2LjE0NzA5NTkzMjUxOTExNSwxMi43MzQ2NzE0NDY4ODk4MDIKKzksV2VkIDIgRmViIDExLDQxLjI5NTgxNjIzNzI3OTU3NCwxOTkuMDQ0ODMxMTEwNTUzMDgsNzMwLjEwNDI0MTE5OTMzMjgsNS44NTYyNTMyMDg5Njg5NjcsMTEuNzk4NTY1MTEwNTQ1ODk4LDU2My40MzY5MzYwMjUzOTQ0LDQ2LjgwMTk0OTM4Nzc1MjY3LDEyLjczNDY3MTQ0Njg4OTgwMgorMTAsVGh1IDMgRmViIDExLDM4LjY2OTAwMTExNTk4MDYwNiwyMDIuNDUxODU5MzU1MzQzMTcsNzQ0Ljg3Mzg1ODM3MDc1MzcsNi40MjEzNDQyMTA2NjYxODMsMTIuMzMyODc2MDEzNjk5NDUxLDU3Ni40MDQxOTk5MjU1NTc2LDQ3LjA4ODQxODg2MDQ3Mjk1NiwxMi43MzQ2NzE0NDY4ODk4MDIKKzExLEZyaSA0IEZlYiAxMSwzNi43MTYzNDI3MDc2NDU2NDQsMjA0LjYzNzEzNzEwNjQ0MDc4LDc1NS4xMTI2Njk1NzY3MDU2LDYuOTk3OTQ0NzUzODUyMDc2LDEyLjgzNjIyODI3NTY2MjY2MSw1ODUuNTEzNzUxNTM1MTE3Miw0Ny4xNjQ3ODM4ODE0NjA3NCwxMi43MzQ2NzE0NDY4ODk4MDIKKzEyLFNhdCA1IEZlYiAxMSwzNS4xODM0ODYzMjEyNDgwNCwyMDYuMDcwNzMyODM0MTA1MTcsNzYyLjQ4NDU0MzI0NDEwOTEsNy41ODE0MTQyNzgxMjkwNTksMTMuMzEwMjYxMjUzMDc3MjE4LDU5Mi4xNzE3NTY3NjY4NDg3LDQ3LjEzMTU3ODI2MTE4NTc1LDEyLjczNDY3MTQ0Njg4OTgwMgorMTMsU3VuIDYgRmViIDExLDMzLjgzNjkyMjMwNzQ2MjI2LDIwNy4xNzQyNTA5MTEzNjA5Niw3NjguNTcxNzgzMTM2MjQ4NCw4LjE2NzU5NTU3OTU0NjAwNCwxMy43Njg1MDI3MDc5MzYyNjgsNTk3LjcyODU3NDkwNzM2MTEsNDcuMDU1NjAyNTI4NzM1NzcsMTIuNzM0NjcxNDQ2ODg5ODAyCisxNCxNb24gNyBGZWIgMTEsMzIuNzkxMTM2NzUwMzAwMzk2LDIwNy43NDg1NTk4NDM5NDk1OCw3NzIuNTczNjcyNzEyMTQ5LDguNzU3Njk5MjA2Mjc1NjA3LDE0LjE5ODY2NDc4MzQ0ODM4Myw2MDEuNDk1NDQ4MTk0MjA5LDQ2LjkxNTk4ODY4ODk3ODQ1LDEyLjczNDY3MTQ0Njg4OTgwMgorMTUsVHVlIDggRmViIDExLDMxLjk3MTk5MDI1MTA2MTU5LDIwNy45MzM0MTU4NTk4MTI3LDc3NC45Nzg0MDUzOTE0OTEsOS4zNDk0OTI3NDI2MTQ2NTIsMTQuNjAxNjI3NjE2NjY0MDMsNjAzLjg4NTk3NDM1OTkzMSw0Ni43NDEwNTk2ODcyMzYyNCwxMi43MzQ2NzE0NDY4ODk4MDIKKzE2LFdlZCA5IEZlYiAxMSwzMS4zMjM5MDU2NjcwODk0MjcsMjA3LjgzMzgyOTcyNTg5NjMsNzc2LjE1NzYzOTExMDcyNjIsOS45NDA5MTkyMjA2NDYzNDgsMTQuOTc5MDI0NTQzNjM0NTM2LDYwNS4yMTYyNTY4NzE0ODYyLDQ2LjU0OTkxNzkyNTkzMjU0LDEyLjczNDY3MTQ0Njg4OTgwMgorMTcsVGh1IDEwIEZlYiAxMSwzMC44MDUxOTExOTU4MTE3MjMsMjA3LjUyODQ5NjMyNjY4MzEsNzc2LjM5NTI1MTI0MDg1OTYsMTAuNTMwMTQyOTY5MzgyNDQsMTUuMzMyODczOTE2NjcwMzksNjA1LjcyODY2MzIzNjI4NTEsNDYuMzU1MTUxNTA3MzAxMTQsMTIuNzM0NjcxNDQ2ODg5ODAyCisxOCxGcmkgMTEgRmViIDExLDMwLjM4NDU0NjY4Mzk5OTYsMjA3LjA3NjIxNTcxNjEyNjExLDc3NS45MDg4Mjg5Njg4NzczLDExLjExNTU2NjQ3MTA2MDcsMTUuNjY1MzM3MDUxMzExMTU5LDYwNS42MDk2NDgyNTUyMTI3LDQ2LjE2NDc4MzEzNTgzMjI4LDEyLjczNDY3MTQ0Njg4OTgwMgorMTksU2F0IDEyIEZlYiAxMSwzMC4wMzg0NTI5NDIxMzQ1MzcsMjA2LjUyMDc3NjU5NTkyMzA1LDc3NC44NjU3NTg4NjExNzIxLDExLjY5NTgyODgyMTA4OTY3NywxNS45Nzg1NjQxMzkxMjcwNjgsNjA1LjAwMzE1MDQzMTQ2MjksNDUuOTgzNjY4MzU2NTAzODYsMTIuNzM0NjcxNDQ2ODg5ODAyCisyMCxTdW4gMTMgRmViIDExLDI5Ljc0OTIyMDE4MjAxODkzLDIwNS44OTQ2NjQ0OTkzNzM4Nyw3NzMuMzk1Mjk2NDk0NTE0NiwxMi4yNjk3OTMwOTA2ODY2OSwxNi4yNzQ2MDA4NDQxNzM3NzIsNjA0LjAyMDY4MjAyNzU2MjksNDUuODE0NDk0MjA0NzU1NiwxMi43MzQ2NzE0NDY4ODk4MDIKKzIxLE1vbiAxNCBGZWIgMTEsMjkuNTAzNTI4NTkxNDgwMDYyLDIwNS4yMjE4NzI5MjYxMTg5LDc3MS41OTc2NDAwNjI2NDc3LDEyLjgzNjUyNzU0NzgxNTg4OSwxNi41NTUzMzYxNzgzMzczLDYwMi43NDg5NDU5ODk2MjUzLDQ1LjY1ODQ4ODU3NTEyMjUwNCwxMi43MzQ2NzE0NDY4ODk4MDIKKzIyLFR1ZSAxNSBGZWIgMTEsMjkuMjkxMzM2NDcxNDEyOTk3LDIwNC41MjAwMzA4MDgyMjQ2Miw3NjkuNTUwNzY3ODE0NDU5NSwxMy4zOTUyODQwMzcwMzEyNjIsMTYuODIyNDc3OTM4MDQ0NDQsNjAxLjI1NTU5OTk3MjYxMDgsNDUuNTE1OTIwNzQxNzU3NzA0LDEyLjczNDY3MTQ0Njg4OTgwMgorMjMsV2VkIDE2IEZlYiAxMSwyOS4xMDUwNjI5Nzk5MDMxNTYsMjAzLjgwMjAwOTcwNDAyMTMsNzY3LjMxNTYwMzc1OTAyMzIsMTMuOTQ1NDc1NjU5MDEyNzM4LDE3LjA3NzU0NjA3NzgzMDcyLDU5OS41OTM2Mjk2ODIwNjU1LDQ1LjM4NjQ1MTU5MTEyNDU5LDEyLjczNDY3MTQ0Njg4OTgwMgorMjQsVGh1IDE3IEZlYiAxMSwyOC45Mzg5NzYxMDU4Mzc2MDcsMjAzLjA3NzEzNTY2MDYyMjE2LDc2NC45Mzk5MzEzNTc3Njc2LDE0LjQ4NjY1NTA4NTU4MDY4MSwxNy4zMjE4NzczMzA5MTM5NTMsNTk3LjgwNDY3NjQxOTU3MzUsNDUuMjY5Mzc2MTI2NTM2NTY0LDEyLjczNDY3MTQ0Njg4OTgwMgorMjUsRnJpIDE4IEZlYiAxMSwyOC43ODg3MzQwNzg3MDg2MjUsMjAyLjM1MjEwMTE0NTQzMjUzLDc2Mi40NjEzNjc2ODQ5NTQxLDE1LjAxODQ5NDI5NDA0MDgzNSwxNy41NTY2MzY0ODE2NTM1NjYsNTk1LjkyMTU3NjUyODE4MjQsNDUuMTYzNzg5MTExNDQ5OCwxMi43MzQ2NzE0NDY4ODk4MDIKKzI2LFNhdCAxOSBGZWIgMTEsMjguNjUxMDQxNTM4MjUwMTUsMjAxLjYzMTY0OTc4Nzk0MzMsNzU5LjkwOTYzMTAwODQ0ODEsMTUuNTQwNzY2MTMyMjgzODc0LDE3Ljc4MjgzMTE4MTk1MjAzNCw1OTMuOTcwMzA1NTc3MzU0NSw0NS4wNjg2OTYxODM4MTUzNTUsMTIuNzM0NjcxNDQ2ODg5ODAyCisyNyxTdW4gMjAgRmViIDExLDI4LjUyMzM5MTU3NDA4NDQ0MiwyMDAuOTE5MDg5MzE3NDE0NCw3NTcuMzA4Mjc1NzEyMzA5MSwxNi4wNTMzMjc4ODAxMDYzNzMsMTguMDAxMzI4MjUyNTk5OTU4LDU5MS45NzE0NzE4MzI2NjMsNDQuOTgzMDg2NTUyODkzNjYsMTIuNzM0NjcxNDQ2ODg5ODAyCisyOCxNb24gMjEgRmViIDExLDI4LjQwMzg3MjA0ODg5MDc1LDIwMC4yMTY2NzQ4MDY5NzI1NSw3NTQuNjc2MDI0NjI0ODE0MiwxNi41NTYxMDY4MTQ2MjkzLDE4LjIxMjg3MDE0NDQ2OTM0LDU4OS45NDE0Njc1NTIwNzQ4LDQ0LjkwNTk3ODg2MjY4NDA4LDEyLjczNDY3MTQ0Njg4OTgwMgorMjksVHVlIDIyIEZlYiAxMSwyOC4yOTEwMjAwNzAxMDc3OSwxOTkuNTI1ODk0MTk0NjY5MDQsNzUyLjAyNzc5NjE5NDc5OTUsMTcuMDQ5MDg3NjkxMjAxMjcsMTguNDE4MDkwNzQyNzc0OTc1LDU4Ny44OTMzNTk3NzU3NDI5LDQ0LjgzNjQ0ODUxNzQ5MzgsMTIuNzM0NjcxNDQ2ODg5ODAyCiszMCxXZWQgMjMgRmViIDExLDI4LjE4MzcxMjU0NTQzNTE3OCwxOTguODQ3NjgwMzE3MjgzNTYsNzQ5LjM3NTQ5OTY2NjkxMTEsMTcuNTMyMzAxOTk2MzcyMDQ1LDE4LjYxNzUzMDA0NTE3MTIzMiw1ODUuODM3NTgyMTg2OTkxOSw0NC43NzM2NDIzODE0MTczOCwxMi43MzQ2NzE0NDY4ODk4MDIKKzMxLFRodSAyNCBGZWIgMTEsMjguMDgxMDgzNzk3MjA3NDQ1LDE5OC4xODI1Njc4MDA1OTc2NCw3NDYuNzI4NjUzMjkxNTA2NCwxOC4wMDU4MTg4MDI2NjM5MSwxOC44MTE2NDc0NzgwNzgxOSw1ODMuNzgyNDc0NTgyMDU4NCw0NC43MTY3ODUwMzk5ODk1OTUsMTIuNzM0NjcxNDQ2ODg5ODAyCiszMixGcmkgMjUgRmViIDExLDI3Ljk4MjQ2MzQ4MTYyNTU2NSwxOTcuNTMwODA4NjY3NjI0ODUsNzQ0LjA5NDg2NzA3NjE5MjEsMTguNDY5NzM3MDQ2Mjk2Mzg0LDE5LjAwMDgzMzc2OTA5NjcyMiw1ODEuNzM0NzA1MjA3MDgyOCw0NC42NjUxNzk1Njk4Mjg3NDQsMTIuNzM0NjcxNDQ2ODg5ODAyCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0xhcmdlTWl4TWlnX0ZEX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL2h1bWFuL0luY2lkZW5jZV8wLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvTGFyZ2VNaXhNaWdfRkRfUmVmZXJlbmNlL2F1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwvaHVtYW4vSW5jaWRlbmNlXzAuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJjMjQ0MDEKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0xhcmdlTWl4TWlnX0ZEX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL2h1bWFuL0luY2lkZW5jZV8wLmNzdgpAQCAtMCwwICsxIEBACitpdGVyYXRpb24sdGltZSwKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvTGFyZ2VNaXhNaWdfRkRfUmVmZXJlbmNlL2F1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwvaHVtYW4vSW5jaWRlbmNlXzEuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9MYXJnZU1peE1pZ19GRF9SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9odW1hbi9JbmNpZGVuY2VfMS5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmMyNDQwMQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvTGFyZ2VNaXhNaWdfRkRfUmVmZXJlbmNlL2F1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwvaHVtYW4vSW5jaWRlbmNlXzEuY3N2CkBAIC0wLDAgKzEgQEAKK2l0ZXJhdGlvbix0aW1lLApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9MYXJnZU1peE1pZ19GRF9SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9odW1hbi9JbmNpZGVuY2VfMi5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0xhcmdlTWl4TWlnX0ZEX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL2h1bWFuL0luY2lkZW5jZV8yLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNmFlZjlkCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9MYXJnZU1peE1pZ19GRF9SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9odW1hbi9JbmNpZGVuY2VfMi5jc3YKQEAgLTAsMCArMSwzMyBAQAoraXRlcmF0aW9uLHRpbWUsWUUtTi1HMTUwMDAxLFlFLVMtRzE2MDAwMSxZRS1TLUcxNjAwMDIsWUUtUy1HMTYwMDAzLFlFLVMtRzE2MDAwNCxZRS1TLUcxNjAwMDUsWUUtUy1HMTYwMDA2LFlFLVMtRzE2MDAwNworMSxUdWUgMjUgSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzIsV2VkIDI2IEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCiszLFRodSAyNyBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorNCxGcmkgMjggSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzUsU2F0IDI5IEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCis2LFN1biAzMCBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorNyxNb24gMzEgSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzgsVHVlIDEgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzksV2VkIDIgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzEwLFRodSAzIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxMSxGcmkgNCBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTIsU2F0IDUgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzEzLFN1biA2IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxNCxNb24gNyBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTUsVHVlIDggRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzE2LFdlZCA5IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxNyxUaHUgMTAgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzE4LEZyaSAxMSBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTksU2F0IDEyIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyMCxTdW4gMTMgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzIxLE1vbiAxNCBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjIsVHVlIDE1IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyMyxXZWQgMTYgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzI0LFRodSAxNyBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjUsRnJpIDE4IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyNixTYXQgMTkgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzI3LFN1biAyMCBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjgsTW9uIDIxIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyOSxUdWUgMjIgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzMwLFdlZCAyMyBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMzEsVGh1IDI0IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCiszMixGcmkgMjUgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvTGFyZ2VNaXhNaWdfRkRfUmVmZXJlbmNlL2F1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwvcnVucGFyYW1ldGVycy5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0xhcmdlTWl4TWlnX0ZEX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL3J1bnBhcmFtZXRlcnMuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA2ODU1YjUKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0xhcmdlTWl4TWlnX0ZEX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL3J1bnBhcmFtZXRlcnMuY3N2CkBAIC0wLDAgKzEsMiBAQAorcG9wdWxhdGlvbklkZW50aWZpZXIsbmFtZSx0YXJnZXRJU09LZXksYmlydGhSYXRlLGRlYXRoUmF0ZSx0aW1lUGVyaW9kCitodW1hbixhdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsLCwwLjAsMC4wLDg2NDAwMDAwClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9MYXJnZU1peE1pZ19SS19SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vRGlzZWFzZSBEZWF0aHNfMC5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0xhcmdlTWl4TWlnX1JLX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9EaXNlYXNlIERlYXRoc18wLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYzI0NDAxCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9MYXJnZU1peE1pZ19SS19SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vRGlzZWFzZSBEZWF0aHNfMC5jc3YKQEAgLTAsMCArMSBAQAoraXRlcmF0aW9uLHRpbWUsCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0xhcmdlTWl4TWlnX1JLX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9EaXNlYXNlIERlYXRoc18xLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvTGFyZ2VNaXhNaWdfUktfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL0Rpc2Vhc2UgRGVhdGhzXzEuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJjMjQ0MDEKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0xhcmdlTWl4TWlnX1JLX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9EaXNlYXNlIERlYXRoc18xLmNzdgpAQCAtMCwwICsxIEBACitpdGVyYXRpb24sdGltZSwKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvTGFyZ2VNaXhNaWdfUktfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL0Rpc2Vhc2UgRGVhdGhzXzIuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9MYXJnZU1peE1pZ19SS19SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vRGlzZWFzZSBEZWF0aHNfMi5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDZhZWY5ZAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvTGFyZ2VNaXhNaWdfUktfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL0Rpc2Vhc2UgRGVhdGhzXzIuY3N2CkBAIC0wLDAgKzEsMzMgQEAKK2l0ZXJhdGlvbix0aW1lLFlFLU4tRzE1MDAwMSxZRS1TLUcxNjAwMDEsWUUtUy1HMTYwMDAyLFlFLVMtRzE2MDAwMyxZRS1TLUcxNjAwMDQsWUUtUy1HMTYwMDA1LFlFLVMtRzE2MDAwNixZRS1TLUcxNjAwMDcKKzEsVHVlIDI1IEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyLFdlZCAyNiBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMyxUaHUgMjcgSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzQsRnJpIDI4IEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCis1LFNhdCAyOSBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorNixTdW4gMzAgSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzcsTW9uIDMxIEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCis4LFR1ZSAxIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCis5LFdlZCAyIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxMCxUaHUgMyBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTEsRnJpIDQgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzEyLFNhdCA1IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxMyxTdW4gNiBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTQsTW9uIDcgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzE1LFR1ZSA4IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxNixXZWQgOSBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTcsVGh1IDEwIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxOCxGcmkgMTEgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzE5LFNhdCAxMiBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjAsU3VuIDEzIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyMSxNb24gMTQgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzIyLFR1ZSAxNSBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjMsV2VkIDE2IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyNCxUaHUgMTcgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzI1LEZyaSAxOCBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjYsU2F0IDE5IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyNyxTdW4gMjAgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzI4LE1vbiAyMSBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjksVHVlIDIyIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCiszMCxXZWQgMjMgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzMxLFRodSAyNCBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMzIsRnJpIDI1IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0xhcmdlTWl4TWlnX1JLX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9FXzAuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9MYXJnZU1peE1pZ19SS19SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vRV8wLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYzI0NDAxCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9MYXJnZU1peE1pZ19SS19SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vRV8wLmNzdgpAQCAtMCwwICsxIEBACitpdGVyYXRpb24sdGltZSwKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvTGFyZ2VNaXhNaWdfUktfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL0VfMS5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0xhcmdlTWl4TWlnX1JLX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9FXzEuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJjMjQ0MDEKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0xhcmdlTWl4TWlnX1JLX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9FXzEuY3N2CkBAIC0wLDAgKzEgQEAKK2l0ZXJhdGlvbix0aW1lLApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9MYXJnZU1peE1pZ19SS19SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vRV8yLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvTGFyZ2VNaXhNaWdfUktfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL0VfMi5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmMzYjliNAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvTGFyZ2VNaXhNaWdfUktfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL0VfMi5jc3YKQEAgLTAsMCArMSwzMyBAQAoraXRlcmF0aW9uLHRpbWUsWUUtTi1HMTUwMDAxLFlFLVMtRzE2MDAwMSxZRS1TLUcxNjAwMDIsWUUtUy1HMTYwMDAzLFlFLVMtRzE2MDAwNCxZRS1TLUcxNjAwMDUsWUUtUy1HMTYwMDA2LFlFLVMtRzE2MDAwNworMSxUdWUgMjUgSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzIsV2VkIDI2IEphbiAxMSw5LjIyMjE0MTYzMzUzNTIyNSwyMjYuNDg4OTc4NjcxMTUxMjIsMTEuNTYwNjkzMTU3OTczMzc3LDAuMDA3OTkwNjMzMzU1NTMxMzEsMC41ODcxMDI3MTY3ODA4NTU2LDEwLjE4ODU1NjczMjE3NzcxNiwxOS43Njc2ODE2NTMxMTgzMjMsMC4wCiszLFRodSAyNyBKYW4gMTEsNzY2Ljc2MTkzNDk0NzczMjIsOTQ3OS4xMTMwMzMxODE3OSw5NjIuNjMxNTU1MTg4NjI5MSwyLjU5MzYxNjM5Njk4MzAxNzUsODcuMjA3Mjc2NjgzNTQ4OTcsODY5Ljk0MzQwMjQ5Mjg3MDksMTUwNC42NDU4OTY2MzYwNzU4LDAuMAorNCxGcmkgMjggSmFuIDExLDQ4MzE0LjQyMzU1NTAxOTcxLDM0ODc3MS40NzM2MDkyOTg4LDU5ODI4LjkxNzIxODI0MTA4NCwzNTIuNjU2NDg5ODk2NjA1Myw3NTcyLjA3ODUzNzM0MjAyOCw1NDgwNi43NzUxMDg1OTgzLDg2OTI5LjYwNTE3MTU1MTI0LDAuMAorNSxTYXQgMjkgSmFuIDExLDIxMDU4OTEuMjE4OTk3NDgyLDIxMzE4OTIuMzY3MzU1NzE5NywxNTk0MTY2LjgwNjY4OTI2MDUsMzE5NzMuNjA1ODU2MDcyOSwzNzQ3NjMuMDAzNzY0MTA5ODYsMTUwMDcyMS4yMDU0MTUzNzEzLDE3Mjk3NTMuODQxNDU2OTk5MywwLjAKKzYsU3VuIDMwIEphbiAxMSw1NjQ5NDQxLjM0MzE0ODM0NCwxNzk3MTcwLjYxMjIyNDY3NzYsMTk5OTc4OC4xOTMxMjE3NzQ4LDI0MDMzNy42NTk3NDcxMzUxLDc2MjkzNi44MjM5OTMxNDc5LDE5Mzg3NTMuNTgzNTY0MTUyNSwxODAzOTQ1LjM1MTYyMTgxMDYsMC4wCis3LE1vbiAzMSBKYW4gMTEsMzM1MDAxMS45Mzk2NDMwMDYzLDEzMzE3MDguNjc3MjU2MDgwMywxNDQzNjI0LjkxNTc4NDU5NjcsMTgyODc0Ljc4NTIyMzQ2NDE2LDUzMTQzMi41NTU5NTQzMDUzLDE0MTAyNTAuNTA2MDA5OTg1NywxMjkxNDM5Ljk2NTU5MDk0NDUsMC4wCis4LFR1ZSAxIEZlYiAxMSwyMDA2ODM3LjI3MTQ3MTA2Miw5NTcyNzAuNzU3NDMxMDEwMywxMDIwMzY0LjQxMDQ4MzEzMDMsMTM0NDM3LjIxMzI0MzQzNDQ0LDM3MDcyNy40NzMwNDM2NjkyNSwxMDAyMTAwLjQ2Njc1ODE1MDMsOTA0MDE2LjE2MTA0MzM3MDUsMC4wCis5LFdlZCAyIEZlYiAxMSwxMjIwMTk3Ljg1MTgzMDc2MTksNjc0NDgyLjU4OTA5NjgwOTksNzEwOTk3LjM0MTU5MzA5MzgsOTgxNjQuNjc0NTk1NDAyNjQsMjU4NzE1LjkyMDU0NTg4NjY1LDcwMTAwMy42NTA2MzUxODg5LDYyMzYzOS45MjIxNjMzNDQ1LDAuMAorMTAsVGh1IDMgRmViIDExLDc1MjIzNi45MDA4MjEzMTk1LDQ2ODY1Ni40MDcwOTg5NjA4LDQ5MDM5Ni4xNDc5MDgzODc4LDcxMjc4LjIzMDMzMTkyNDA3LDE4MDM1MS40NDg0NDUzNDM2Miw0ODQ5MzAuMDYzNTE4NDE0MSw0MjU5NDguMjEwNjcxNTE5NywwLjAKKzExLEZyaSA0IEZlYiAxMSw0Njk2MjAuNjE4MDY3NjY4ODcsMzIyMzk4LjAxODQzMTYzNjMsMzM1NzEzLjQzMTU0NzczMjczLDUxNTA1LjQ0Nzk3OTMzMjI3LDEyNTQ4Ny41NzQzODk0MjM3OCwzMzI3MjUuODIzMDA2Mjg3NSwyODg5MTMuMDk3OTM3NTU1MzQsMC4wCisxMixTYXQgNSBGZWIgMTEsMjk2NDg0LjE4NDM4NDMwNjY2LDIyMDE2My4zNzk5MjQ0NDI1MywyMjg1MzUuODQ0NzY5ODUzNjYsMzcwNTguMjk1MzM0NjQ2ODMsODcxMTguNTA3MjAyMjczOTMsMjI2OTA0LjYzOTkyMDg2ODgsMTk1MDE1LjU2MTIzNjM1MiwwLjAKKzEzLFN1biA2IEZlYiAxMSwxODg4OTcuMDg1NDk4ODg5MTUsMTQ5NTU2LjM0MDk3ODc3OTQsMTU0OTM3LjE4OTE5OTE4NTE0LDI2NTc1LjEwODcxMDQ0OTgzLDYwMzU3Ljk1MzQ2MDczMTkxNSwxNTQwNTAuMjY2MjEwMzgxODQsMTMxMTk3LjIwMTYyNjUyNDQyLDAuMAorMTQsTW9uIDcgRmViIDExLDEyMTEyNy40ODA5MTg4NTI2NiwxMDEyMjEuNDM4MTUzMTQ3NjIsMTA0NzM3LjgzODk0NjYwMzQ2LDE5MDI5LjU3NjE0MzkxMDU0OCw0MTc2OC4yODgxMjE0Mzc4NSwxMDQyNjIuMDM3NTMxNDMxOTgsODgwNjMuMDI4NTgwNTg0NTYsMC4wCisxNSxUdWUgOCBGZWIgMTEsNzc2NDAuNzg4Njk4NzQwNDgsNjgzOTkuMDE3MTI0NjY4MTMsNzA3MTguNzQ0NjgxODcyMiwxMzY5Mi45NjQzNDgxMDI3NjIsMjg5NjguODU0NTQ0ODgyMzgyLDcwNDc4LjIzNjczNDc4Nzc2LDU5MDI3LjQyODQxNDQ2NTE3LDAuMAorMTYsV2VkIDkgRmViIDExLDUwMzE1LjgxOTYxNDUyNjU1NCw0NjAyNS4xNDU1Mjk2NDYxNSw0NzU4My45MjQwOTM2MDUzNTQsOTgwOC4xODQ3ODMwMjA4NzUsMjAwMjcuNTkxMTg2ODY0MzcsNDc0NjIuMzUyMjEzNDc1NjUsMzk0ODEuNzk5MDg1ODY2NTE0LDAuMAorMTcsVGh1IDEwIEZlYiAxMSwzMjg3NC4yMjc0NDY2NjEyMzYsMzA4ODIuMTk3Njc2NzA3NTEsMzE5MzkuNzgwMDQ3ODQ1ODcsNjk5NS43NjIzNDE3NjE2OTQsMTM4MDUuNDU3MDY3NzAyOTk5LDMxODc4LjMyNzkzMjc4MDksMjYzNzkuODQ0NDcwNDg4MTczLDAuMAorMTgsRnJpIDExIEZlYiAxMSwyMTYwNi45NzAxODU1NTcwOTMsMjA2ODIuMTMxMjE0ODMxMDEzLDIxNDAyLjI1OTcwOTA1ODcyNiw0OTcwLjAyNTYyMTc0ODMsOTQ5MS42MzQxNzUzOTYzNzIsMjEzNzEuMTk2OTEzNjAwMzU3LDE3NjE3LjkxNjY2ODg5NDM5NSwwLjAKKzE5LFNhdCAxMiBGZWIgMTEsMTQyNjIuOTI1NjU3ODMzMTU5LDEzODMzLjU1MDk4OTUwNTAxLDE0MzIzLjgzNzY3MzQ3NjU1NywzNTE3Ljg0MjEyMzU3MDI1Myw2NTEwLjk3ODkwNDc1NTU5MywxNDMwOC4xMzYwNjE1NjgzNTIsMTE3NjUuNDE5MTg5NjkzMzQ2LDAuMAorMjAsU3VuIDEzIEZlYiAxMSw5NDQ0LjQ3Nzc0MjI0OTc2MSw5MjQ1LjEzMjExMzgzNDk0LDk1NzguMTg5ODM2NTc3NTYsMjQ4MS40MjY0MjgzNjgyNTQsNDQ1Ny42MjYzNjgxMTgwMDEsOTU3MC4yNTI5OTA4MTQ3MTUsNzg1OC4yMDc3MzE3OTEwOTIsMC4wCisyMSxNb24gMTQgRmViIDExLDYyNjcuOTI4NTE3NTg4ODE3LDYxNzUuMzc4MzkxNzkxMTU3LDY0MDAuODg3NDkzNjczMzA0LDE3NDQuNzg4NDg2MzA4NTg5LDMwNDYuNzMzOTUyNTc5OTUyLDYzOTYuODc1NTc5NDE2ODksNTI0OS44OTk1MDE4Nzc2Mjk1LDAuMAorMjIsVHVlIDE1IEZlYiAxMSw0MTY2LjU0MjY2NTUyMTU2NCw0MTIzLjU3NDQ1MDcwMTUzMSw0Mjc1LjcwMzcyOTA5MDc4LDEyMjMuMjE5NDUzMzA0NDE4MywyMDc5LjQyNTM1Njc3NzUzNCw0MjczLjY3NTc4Nzk1NjI1OSwzNTA4LjQxMTAxNTcwMDA4NTUsMC4wCisyMyxXZWQgMTYgRmViIDExLDI3NzIuOTM3MTM1NzQ1MTcxLDI3NTIuOTg4Mjk3NTQ2MzIzMywyODU1LjIzNzQ1ODA2NTkyMSw4NTUuMjMyNDcxMDk5ODE4OSwxNDE3LjQ4NDIzMDU0MDU3MTgsMjg1NC4yMTIzNzUwMzAxODQsMjM0NS4zNDEzMTA4NzI2NzA0LDAuMAorMjQsVGh1IDE3IEZlYiAxMSwxODQ3LjA1MjI1NTAyODg3MzgsMTgzNy43OTA2MTQ4MzM4OTMsMTkwNi4yNzQ2MzA5NjUwMTU4LDU5Ni40NDk2NTc1Nzc5NzA1LDk2NS4yMzQzMzIwNDI3Mjc4LDE5MDUuNzU2NDcyMzIwMTM3NiwxNTY4LjMxMjA1MDY3ODMwNjIsMC4wCisyNSxGcmkgMTggRmViIDExLDEyMzEuMTA2ODY3OTEwOTc5LDEyMjYuODA2OTY5NDI4MzU4LDEyNzIuNTI5NDY2ODAyMzc5OCw0MTUuMDA5NjMzNDk0MDIyMiw2NTYuNjcwODk0MTM2MzE3OSwxMjcyLjI2NzU0ODEzNjM3NzIsMTA0OS4wMDk4NjA0Mzk3MDU4LDAuMAorMjYsU2F0IDE5IEZlYiAxMSw4MjAuOTU3MTMwNzMxNjM1MSw4MTguOTYwODE4MzUzNzQwNSw4NDkuMzk5NjM1Mjk3ODQwOSwyODguMTQ4MDM1OTgzNjkzNyw0NDYuMzg4OTI1OTM2MDMxNyw4NDkuMjY3MjQwNzM0MzYzNiw3MDEuODM1MDEyNzMzOTI4MiwwLjAKKzI3LFN1biAyMCBGZWIgMTEsNTQ3LjY1MTI5MTc0ODY5MzcsNTQ2LjcyNDQ2NDQ5MzA2MzYsNTY2LjkzNzQyNTUxNDQ5MzYsMTk5LjY3MjQ0MTMwMzcwMTQ4LDMwMy4yMjkxNTgzNTc5NDcyNiw1NjYuODcwNTAyNzUyOTEzMSw0NjkuNjYyNzM5MTk0Mzg5NywwLjAKKzI4LE1vbiAyMSBGZWIgMTEsMzY1LjQzNjE5ODQzMTExMjgsMzY1LjAwNTkwMDY2MjQ0MTY2LDM3OC4zOTg4NTc0ODU5NDQ0LDEzOC4xMTE5NjMzMjkyMjc2MiwyMDUuODUxNjYxOTc0NzkyOCwzNzguMzY1MDI5Mzg5ODM1OSwzMTQuMzU1MTIwOTIyNTYyMywwLjAKKzI5LFR1ZSAyMiBGZWIgMTEsMjQzLjkwMzMxODQxNzcwODQyLDI0My43MDM1NDQyMjE4MTc0OCwyNTIuNTYwNzMxNzM0OTgzNDIsOTUuMzcwNzM2NTgyNTM4MDYsMTM5LjY2NjMxNzc4OTAwOTMzLDI1Mi41NDM2MzIzMTk3ODc0NiwyMTAuNDM5Mzk5NzA3NzgwMzIsMC4wCiszMCxXZWQgMjMgRmViIDExLDE2Mi44MTg3Nzg0ODY2ODUzMiwxNjIuNzI2MDI5MzkwMDE0MTYsMTY4LjU3Mzk3Mzk4MjMzNjY3LDY1Ljc1NDMxMzg4Mjk4Mzk1LDk0LjcxMjIzNDg1NTI2ODE2LDE2OC41NjUzMzA1NzU0MTUxNywxNDAuODk0OTk4MTkwMTAwNTgsMC4wCiszMSxUaHUgMjQgRmViIDExLDEwOC43MDczMzQ0MjE3ODQxOCwxMDguNjY0MjczODMwODI1NzYsMTEyLjUxOTk0ODM2OTkxOTk3LDQ1LjI2OTc3NDM0OTkzMzksNjQuMTk3MzIxMjc1OTk2MzMsMTEyLjUxNTU3OTMwMzM1NTE0LDk0LjM0NDY0OTE2OTE4NTQ3LDAuMAorMzIsRnJpIDI1IEZlYiAxMSw3Mi41ODkwNzE4NDM5NDEyMyw3Mi41NjkwODAxMTgzMDQ2Nyw3NS4xMDgxNTczNjQ2NzMwNSwzMS4xMjUyMzAxOTgyNTM0NDgsNDMuNDk1MTAyMTc1MTQ2NzcsNzUuMTA1OTQ4ODkwMzAzOTIsNjMuMTgwNzExNjc0MjUwMjMsMC4wCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0xhcmdlTWl4TWlnX1JLX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9JXzAuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9MYXJnZU1peE1pZ19SS19SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vSV8wLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYzI0NDAxCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9MYXJnZU1peE1pZ19SS19SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vSV8wLmNzdgpAQCAtMCwwICsxIEBACitpdGVyYXRpb24sdGltZSwKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvTGFyZ2VNaXhNaWdfUktfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL0lfMS5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0xhcmdlTWl4TWlnX1JLX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9JXzEuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJjMjQ0MDEKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0xhcmdlTWl4TWlnX1JLX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9JXzEuY3N2CkBAIC0wLDAgKzEgQEAKK2l0ZXJhdGlvbix0aW1lLApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9MYXJnZU1peE1pZ19SS19SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vSV8yLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvTGFyZ2VNaXhNaWdfUktfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL0lfMi5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzNjYjdiMQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvTGFyZ2VNaXhNaWdfUktfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL0lfMi5jc3YKQEAgLTAsMCArMSwzMyBAQAoraXRlcmF0aW9uLHRpbWUsWUUtTi1HMTUwMDAxLFlFLVMtRzE2MDAwMSxZRS1TLUcxNjAwMDIsWUUtUy1HMTYwMDAzLFlFLVMtRzE2MDAwNCxZRS1TLUcxNjAwMDUsWUUtUy1HMTYwMDA2LFlFLVMtRzE2MDAwNworMSxUdWUgMjUgSmFuIDExLDAuMCwxLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzIsV2VkIDI2IEphbiAxMSwwLjg3NDM4MzMwODUwMzkyODgsMjAuOTU3MjcwNzcxNzE4MTUsMS4wMzY2NTMzMjYwNzE5NDIyLDYuNDgzOTIxMDQwODc0ODYzRS00LDAuMDQ3OTc1NzE5MDk2MzU4MzY2LDAuOTI1MzIxNzU5NDMzNzc1OCwxLjY4Mjc5NzMxMTY1NzE3MiwwLjAKKzMsVGh1IDI3IEphbiAxMSw3Mi45NDk5NzE0NDY1MzQyOCw4ODYuNjg2MjA2NDgxOTkyLDg4LjI5MDAyODEwNjYwODE4LDAuMjI3NTg1MTMwMDY4MTIwMTcsNy43MDI3NDAyODcxNTg4NTcsODAuMjIwNzc4MTY0Mzk2OTYsMTM1LjE5MDMyMDYwNzI0NjQ2LDAuMAorNCxGcmkgMjggSmFuIDExLDQ2MTYuMDM1Nzk0NzI2MjE1NSwzNDY5NC44OTY4NDkwOTczMDYsNTU5My43MjkwNjM1ODEyNzcsMzEuODMzMDkzNTYwMzUzNjc4LDY5MS4yNjQ2MDM2NjE0NCw1MTM2LjkyODkyOTA4MjIwMyw4MDkzLjU3NDYxNzc0NzI0OSwwLjAKKzUsU2F0IDI5IEphbiAxMSwyMjI0MDIuOTk2MjE2Nzk5Nyw0NTc3OTYuOTMxODg5NDUyNTYsMjA4OTMwLjg4MzIwMTk0MjYzLDMwNTYuMjI0ODExOTk3ODcxLDQwODAyLjY1ODc5NDE2OTM5LDE5NTQ5MC4wNzQ0NTk3NTgyNCwyNTA3ODQuNTIzMjg3NjgzMTcsMC4wCis2LFN1biAzMCBKYW4gMTEsMTc4NzgyOS44Mzk1OTk2MTY0LDk1MzI1NS42OTg0MTczMTY4LDg1Nzc2Ni44MjExNzcxNTI1LDYwMjE0LjUzMDYzMjg2MjcyLDI4MTA0OS4yMjMzNDEwNjM2NSw4MjU4NDYuNDE3NTI2MDgyNyw4MjQ1OTEuNjUzNDYwMDU1NiwwLjAKKzcsTW9uIDMxIEphbiAxMSwyNDMwNTUxLjkxOTkxMzg3MSwxMTg0NTgxLjYxNzM4NTY1NTQsMTE4MTI1NC4xNTkyNTUwMjEsMTIwNzE0LjI1NjczMTk0Njk4LDQxMTY5NC4zODU1NDY0NTU3LDExNTAzNjkuNTQ1NDMwNTgsMTA4Mzc3MS4yODA2MDQ5NjcsMC4wCis4LFR1ZSAxIEZlYiAxMSwyMjc5NTAwLjA1NDA5NDk0MjMsMTIwOTIwNi42MzU1OTk3OTQ4LDEyMzYwNzIuMTIyODgwOTg3OCwxNDQ0OTkuNTIzNjgzODgxODIsNDM3MTg0LjIyMjE2NzM2ODEsMTIxMTgyOS45NjI1NTQzNjE0LDExMDk1OTcuMzY3ODA5NDkyNCwwLjAKKzksV2VkIDIgRmViIDExLDE4ODU3ODcuMzczMTEwNjQ2NiwxMTA5NjM5LjM5OTMzNzc4MDcsMTE0MjM1Ny42MTMyOTc3MDE2LDE0NjAyNC4xNjEzNTAwOTU4OCw0MDkzNDAuODA1MjkyODg0MiwxMTI1MDc1LjI1OTMzNjAwNiwxMDA5NzgzLjY2OTg3MTUyNDQsMC4wCisxMCxUaHUgMyBGZWIgMTEsMTQ3MDA2NC43NjkyOTgwNDIyLDk1MjQ5NS4wNjA2NjUyOTUzLDk4MjQ0Ni4xNjY3MjcwMDMxLDEzNTMxNC45OTY3Mzk0NTk2MywzNTc4MTUuODE2ODY5NTQ5Miw5NzA3OTQuNTkwMjY4NDY4LDg1NzUzOC4zODg2MDYwMTIxLDAuMAorMTEsRnJpIDQgRmViIDExLDExMDkzMDIuMTMwOTIxMjY4OCw3ODEyMDMuMjA3ODQ3NTAzOCw4MDYwNDEuMTg4MzQ4MDExNSwxMTg4NTUuOTAwNDk3OTY0ODksMjk5Mjg0LjIwNjA4NDYyNTYsNzk4NDY5LjQ2Mzc2OTU3MjksNjk1OTU2Ljk5OTc4MTY0NDcsMC4wCisxMixTYXQgNSBGZWIgMTEsODIwOTc5LjU1NTY3MDM4MzksNjIwMDI4LjQ0ODUzNjQ0NzgsNjM5NzI2LjI3NjY3NzEzOSwxMDA2MjguMDc4MDc3MDkyNDgsMjQyNjU3LjA0NjUxNzQ1ODksNjM0OTM0LjAwNTY5NDAzNzQsNTQ3MTM5LjY1NzQ4MDY3NTQsMC4wCisxMyxTdW4gNiBGZWIgMTEsNTk5ODQ4Ljc5MzY5ODkyNTUsNDgwMjExLjIyMTgzMDAwMTc0LDQ5NTQ2OC43MzE1OTE3NzgxNyw4Mjk0OS41ODg1NDcyMjY4NywxOTIyNDQuMTc1OTM4MjM5NDQsNDkyNTAyLjYxMDE4NzI0NzcsNDIwMjM5LjgwODQyNjc4MDksMC4wCisxNCxNb24gNyBGZWIgMTEsNDMzOTY0Ljg1OTUwOTM0NjM3LDM2NTA1MS42MDQ4NDk2ODAyNywzNzY3MDAuNDU0NjQwOTIyMiw2NzA2MS4zMDEyNDQ3OTkyOCwxNDk2NzIuODM1NzE1ODQzODMsMzc0OTExLjE0MTQxMTk4NjUsMzE3MTI3LjYyMjE0ODMxNTEzLDAuMAorMTUsVHVlIDggRmViIDExLDMxMDI2MS4zOTI0OTYwMjE0NiwyNzM2OTUuNDM4OTI1MTkwNSwyODI0OTQuNTE0NTgxNDYzNSw1MzYzNC4yNzU4NTA4Mjc2NiwxMTUyMDUuNTkzOTQ1ODI0MDgsMjgxNDc3LjExOTgyMjgwMDg2LDIzNjA3Ny42NDE1MDY1OTEzLDAuMAorMTYsV2VkIDkgRmViIDExLDIyMTU3NC45Njc4MjUyMjM2MywyMDI0NzYuMDQwNDcwMjg0MzUsMjA5MDk2LjcyNDc4NzY2Mjc0LDQyMjc4LjQ4NzM0MTA1NTcsODc1NDkuNTA3OTA3OTA2NzIsMjA4NTI1LjM2NjkzMjI0Mjc2LDE3MzY4NC43NDY0NjcyMjAxMywwLjAKKzE3LFRodSAxMCBGZWIgMTEsMTU4MDQ1LjI2MTQ5MzgzNTIsMTQ4MTkyLjgxMzEzMDIyMTQyLDE1MzE0Ni4yNTAxODUzNzUyNSwzMjkxNC4yMTQ4NTQwOTQ5NjQsNjU4MTEuMjE3OTEzMjQ2NzEsMTUyODI4LjU4NDg1MDEwOTE1LDEyNjYwNC45ODE0Mzg4ODMyOSwwLjAKKzE4LEZyaSAxMSBGZWIgMTEsMTEyNTU2LjcyMTUzNDYxMTEzLDEwNzUyNS4wMzkyOTc2MjU2OCwxMTEyMDQuMTk3OTA4Nzk5MjUsMjUzNDYuODk3NDU1NjI4Niw0OTAxMC4xODc4MzUwODI1NjUsMTExMDI5LjAzODY0MjkzMzc3LDkxNjA2Ljg3MTg5ODM4NjQsMC4wCisxOSxTYXQgMTIgRmViIDExLDgwMDExLjg3MDA2MDI0NTk2LDc3NDYzLjQxNDIyMzcwNTA3LDgwMTczLjY0MzE0NjUwNjksMTkzMzMuMDg5NzY3NTQ4NzcsMzYyMDUuNDYzMjMwODUwMTksODAwNzcuNzMwODIzODkzMzMsNjU4ODUuNDQzOTg4NzEzMiwwLjAKKzIwLFN1biAxMyBGZWIgMTEsNTY3NTguMzUzNTg0Mzc1MDMsNTU0NzYuNTcyNzEzMTgwNjUsNTc0NTUuOTUwMTY4MzE5MjE0LDE0NjIwLjkyODgzOTk5OTUxNywyNjU2MC4yMjI0ODA2OTQ0NjUsNTc0MDMuNzQxNjAwNzE0NTQ0LDQ3MTQ5LjgzNjY0MzA0OTg1LDAuMAorMjEsTW9uIDE0IEZlYiAxMSw0MDE3My40MDE2MjM1MzgxOCwzOTUzMi41Mjc5NTY0Mjk1MDUsNDA5NjUuOTMxMzg2MzczODMsMTA5NzMuMjY0MjEwNjY1NjUzLDE5MzY2LjUwMTc1NTgwMTc5Nyw0MDkzNy42NTcxNzU3MjAxLDMzNTk5LjgwOTQ2ODk3MDE1NCwwLjAKKzIyLFR1ZSAxNSBGZWIgMTEsMjgzNjkuOTU4NDI0MjIzNDE2LDI4MDUxLjE2NTE3MjAwOTc0LDI5MDgwLjg1NDkyMjYxNzg0Nyw4MTc5LjMyNzU0MzE5NjA3MiwxNDA0Ni4yNzEyMjEwMDE0NDIsMjkwNjUuNjEwNjQwNTE2ODE0LDIzODU3LjEwMTUyMjE0NzE1MywwLjAKKzIzLFdlZCAxNiBGZWIgMTEsMTk5ODkuMjM4MDExNzUwNDg3LDE5ODMxLjM2MzkwMTEzNjMyLDIwNTY1LjUzMDA3MTQxNzk3Miw2MDU5LjExMDQ4NDYwMzIxNSwxMDEzOS45ODI5MTYwMzYyOSwyMDU1Ny4zNDMwNTcwMTgyMTQsMTY4ODUuOTA0OTA5NjczNjM0LDAuMAorMjQsVGh1IDE3IEZlYiAxMSwxNDA1My4yNjg3NzU5NjU0MDQsMTM5NzUuMzkxMTY4MjQzNDU0LDE0NDk1LjI4NTMwMjM2OTk5NSw0NDYzLjM1MzI2NTkzMDQ2NCw3Mjg5LjczOTg5MzM0NTI3NywxNDQ5MC45MDM2MjU1ODM1MywxMTkxOC4zNjk1NTAxNTU5NjMsMC4wCisyNSxGcmkgMTggRmViIDExLDk4NTkuMTg2MjQ3MTc2ODM1LDk4MjAuOTAzMDA5NDQ0MTE1LDEwMTg2Ljc5NzEyMDI1NDgxNiwzMjcxLjExMjQ3NDY3OTIyMyw1MjIxLjMzNzU3OTM4ODU4OSwxMDE4NC40NTkyODQ3NDQ2NTUsODM5MS4yMTA0NTU5NjUyMjUsMC4wCisyNixTYXQgMTkgRmViIDExLDY5MDIuOTM3MDgwNDI1NzExLDY4ODQuMTc1ODIwNDU4ODc3LDcxNDAuMjY1ODgzMTE2NDgzLDIzODYuMTk1Nzg4NTAwNDIxMywzNzI3LjQ1OTU5Nzc1MTcyMiw3MTM5LjAyMTk4NzM3Njc1Myw1ODk0LjU5NzQ3ODk0Mzc4MDUsMC4wCisyNyxTdW4gMjAgRmViIDExLDQ4MjMuOTg1MjcxMjAyNjU5NSw0ODE0LjgxNjUxNDU0NzUyNSw0OTkzLjE3MTMwNjkyMDE3LDE3MzMuMjY2MTc4OTY5MDExNywyNjUzLjA2MjA0MDAzNjU3ODgsNDk5Mi41MTExMTg1NDUxOSw0MTMyLjMyNjU3NDk0MTMwMSwwLjAKKzI4LE1vbiAyMSBGZWIgMTEsMzM2NS4xNzkyMTI2ODQ4OTYsMzM2MC43MDk1ODIxMTMwMjMsMzQ4NC4zODAyNjAxMTU2NjUsMTI1NC4wODIyMDY3ODE1OTczLDE4ODMuMjQ0MDgxNzcwNjI1NiwzNDg0LjAzMDY2MzkzNDQ4LDI4OTEuNDkxMTg5NjM2ODc3NiwwLjAKKzI5LFR1ZSAyMiBGZWIgMTEsMjM0My42Mzg1MDA4OTQyMTQ4LDIzNDEuNDY0NTY0ODk1NDgsMjQyNi44ODI2NTE4MjM4Miw5MDQuMTE2OTM2NDU0NTIyLDEzMzMuNTA2MzcyNTM4MjYwMiwyNDI2LjY5NzkwODgzMDQxNiwyMDE5Ljc2Njc3ODE0ODc4NzEsMC4wCiszMCxXZWQgMjMgRmViIDExLDE2MjkuNjc1OTg3MzQ2NTA3NiwxNjI4LjYyMDgxNDcwMjgzMjgsMTY4Ny40MTMzMTM0NDQzNTIzLDY0OS42NTUxMTMzMDU5ODE5LDk0Mi4xMTM3MTAyNTE3NDM5LDE2ODcuMzE1ODcxMDAzNzYxLDE0MDguNjA2NjA1ODIzNzYzLDAuMAorMzEsVGh1IDI0IEZlYiAxMSwxMTMxLjU4MDU4MTc4MDk2MTIsMTEzMS4wNjkzOTYzOTA4ODExLDExNzEuNDEwNTk4MjQ4NDk1LDQ2NS4zODIzNTg3NTg0NDg4NSw2NjQuMjE3MDY4MzM4NDE5MywxMTcxLjM1OTI5MTUyOTIxMzQsOTgwLjkyOTE1NTQ1MTk5MjMsMC4wCiszMixGcmkgMjUgRmViIDExLDc4NC42Njc1MzM5MzkwNjIzLDc4NC40MjAzMTY3ODIxOTgxLDgxMi4wMjQ1OTAyNTg1MjE1LDMzMi40MzI3NjUxNTAwMjk1LDQ2Ny4zOTUwNzg0NTA5NzYzLDgxMS45OTc2MTg3Mzk4NjcsNjgyLjE2NTQzMjQ5MTg5ODUsMC4wCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0xhcmdlTWl4TWlnX1JLX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9JbmNpZGVuY2VfMC5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0xhcmdlTWl4TWlnX1JLX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9JbmNpZGVuY2VfMC5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmMyNDQwMQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvTGFyZ2VNaXhNaWdfUktfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL0luY2lkZW5jZV8wLmNzdgpAQCAtMCwwICsxIEBACitpdGVyYXRpb24sdGltZSwKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvTGFyZ2VNaXhNaWdfUktfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL0luY2lkZW5jZV8xLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvTGFyZ2VNaXhNaWdfUktfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL0luY2lkZW5jZV8xLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYzI0NDAxCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9MYXJnZU1peE1pZ19SS19SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vSW5jaWRlbmNlXzEuY3N2CkBAIC0wLDAgKzEgQEAKK2l0ZXJhdGlvbix0aW1lLApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9MYXJnZU1peE1pZ19SS19SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vSW5jaWRlbmNlXzIuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9MYXJnZU1peE1pZ19SS19SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vSW5jaWRlbmNlXzIuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY0YWYxYmUKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0xhcmdlTWl4TWlnX1JLX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9JbmNpZGVuY2VfMi5jc3YKQEAgLTAsMCArMSwzMyBAQAoraXRlcmF0aW9uLHRpbWUsWUUtTi1HMTUwMDAxLFlFLVMtRzE2MDAwMSxZRS1TLUcxNjAwMDIsWUUtUy1HMTYwMDAzLFlFLVMtRzE2MDAwNCxZRS1TLUcxNjAwMDUsWUUtUy1HMTYwMDA2LFlFLVMtRzE2MDAwNworMSxUdWUgMjUgSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzIsV2VkIDI2IEphbiAxMSwxMC4xNDE3ODE1NDIzNzY5ODYsMjQ4Ljc2NTM4NjAzNzgwNDE1LDEyLjY1NDMyMzA0MzI3NDIzNiwwLjAwODY3OTczMTg4MDA2NTc2NSwwLjYzODE0ODI5OTM2MzA5NDEsMTEuMTYxODMxMjYwMTc4Mzc2LDIxLjU1OTU5ODQ3NjE3MTU5LDAuMAorMyxUaHUgMjcgSmFuIDExLDgyNS42NjgxMjkwNjE0ODE1LDEwMjUwLjM4MTU0MzI2NDM2MiwxMDM2LjU5NDk3OTkwNzk1OCwyLjc4MTM4NzUxOTU1OTk3MTUsOTMuODQ4MDQxOTg4MDgyNiw5MzYuMzAzMTcyNTMwMzE2NiwxNjIyLjkwNTQxODU1OTU3MjgsMC4wCis0LEZyaSAyOCBKYW4gMTEsNTIwODIuNjIyNTUwMDQ4Mjc2LDM3ODQyMy45NTk5NTY4MDAxNiw2NDUyNC43NDkwOTE2MzEyMSwzNzguNzgwMDAwNjQ1NzMwMzUsODE2MC4wMTg4MjE3MTM5MjcsNTkwODMuOTE4MTE4MjY0OTIsOTM5MTAuNjUzMjIwMTY5NzYsMC4wCis1LFNhdCAyOSBKYW4gMTEsMjI4MjEyMS41MTk1OTE3MjgsMjMzOTA5NS45NzI3ODIzMzYsMTc0OTU2Ny41MzIwNTM4OTUzLDM0NDg3LjA2NjExMTMwNzU2LDQwNzc5Ny43NjU5ODg3NTk4LDE2NDU0NjMuMzcwODQ2ODc4NSwxOTExMDMxLjM0ODYyNTkwODEsMC4wCis2LFN1biAzMCBKYW4gMTEsNTUzOTMzMC41NjU3ODU5MjEsNTYyMjAyLjU4NzA1MTQwNzgsMTIyMTk5NS4xNjkyMTQ3NTMsMjU2MzQ1Ljc2MzYyMjY3NjE3LDYzNjg5MS4wMzQyNjI4Nzc3LDEyMDcxMjguODU0NjI1ODEwNiw5MDIzMTUuNjIzMzUwODI2OCwwLjAKKzcsTW9uIDMxIEphbiAxMSwyNDg0MS40NjUzMzQ1NzQxOSwxODQyLjM2NDU4MzU0MzgwOTcsMjE5OS4zNzcyOTA1Mjg1OTcsNTc5MS45OTgyNDYwMjI4MTQsMTI1Ny4xNDA1ODUxMTY2NzA1LDIyMjAuOTUwMTc0OTE2MzgyLDE5NTcuMzUzMzE4OTI1ODgyLDAuMAorOCxUdWUgMSBGZWIgMTEsMC4wMjc2NjE0Njc0NzY5Njc3NywwLjAwMzE0MDI3MzE1MDMyMzU5MjQsMC4wMDM0ODAxMDkxNTg2MTUxLDAuMDE4OTI5NTY4NzcxNDM3MTYsMC4wMDI0MTk2ODIwNzkxMzg5MzYsMC4wMDM1MDMxNTQ1NDQ2NDc5MDkzLDAuMDAzMjM2NTE0NDg0NjIwMDU1NywwLjAKKzksV2VkIDIgRmViIDExLDIuMTAzNzg1MDQxNDQ0NzY5RS05LDQuNzM4Njg1MDcyOTU1NDYxRS0xMCw0LjcwMzcyMDkzNTAxNzY2NkUtMTAsMS44MTg2MjQ4NDc1MjAxMDA1RS05LDMuNTA3MDAwNjE5MTY4OTM2RS0xMCw0LjcxMjA0NDU2MTY4ODA1OUUtMTAsNC41MzA5MjAzODIyODY3MzU1RS0xMCwwLjAKKzEwLFRodSAzIEZlYiAxMSwzLjIzOTEwMDM1NTYzODk4OEUtMTYsMS41MjY5MTYyNTI5MTIyNDkxRS0xNiwxLjMwNzMyODA2NjE4NjMxNzRFLTE2LDIuNDMyMDk0NTYyMzI5NTQ2NUUtMTYsOC43NjYzMzQ0MDIxMzYyNzZFLTE3LDEuMzAwODYxOTEwODQxOTU0MkUtMTYsMS4zMTYxMjk2NDIyNDU0NjRFLTE2LDAuMAorMTEsRnJpIDQgRmViIDExLDQuMTg2NTY1MjE4MTIwNTUzNUUtMjIsMy41MDI1MzUyMDM0MDQ3MjI1RS0yMiwyLjY4ODc2ODAxNTIwMTQ2NDRFLTIyLDIuMzE0MDEyNTUxMjQxNzk4RS0yMiwxLjU4MDQzMTc3NjkxNzczNTJFLTIyLDIuNjYwODc0NDEyMTg5OTQ5NEUtMjIsMi43OTQ0NDgwODU3Mzk4MzdFLTIyLDAuMAorMTIsU2F0IDUgRmViIDExLDYuNjA4MTM4NzUwMTIwMjczRS0yNyw3Ljc1OTQwMjU5NzcxMzU3M0UtMjcsNS42Nzk1MTAxOTYwODI2NDU2RS0yNywyLjU1Nzg2NDA1NzQ3MzM4ODJFLTI3LDMuMDA0MjI2NTMxODAwNTI0M0UtMjcsNS42MDQwMzgzMDI3NzQ0MTZFLTI3LDUuOTcwOTQ0OTg5NDQzODM3RS0yNywwLjAKKzEzLFN1biA2IEZlYiAxMSwxLjEwMjk0MDM4NzUyNjExOUUtMzAsMS40OTk5NjYyODQ3ODg2MjU5RS0zMCwxLjEwMDQ3MDM0ODY5NTM4MTRFLTMwLDMuMDg4MjQwMTM1MzU4OTEwNUUtMzEsNS40MTMxNjQ5MDg0ODEwMTJFLTMxLDEuMDg1MDY5ODU2ODU3NTU1OUUtMzAsMS4xNDk3MDQ0MDIxMzI1Mzg0RS0zMCwwLjAKKzE0LE1vbiA3IEZlYiAxMSwxLjM4NjUzMDc5MzQ4MzExM0UtMzMsMS44OTU4NjI1MDM0ODA4NjAzRS0zMywxLjQ1OTAxMzIzMzAzNjc1MUUtMzMsMy4wMTY1NTExNDU5Njk0NjJFLTM0LDYuODU0OTE0NjUwMzIwMjdFLTM0LDEuNDQwNTEzOTM2NTAwNjk0OEUtMzMsMS40ODY5MTU1NTY4MjAxMTM4RS0zMywwLjAKKzE1LFR1ZSA4IEZlYiAxMSw2Ljg0NTM2MzgwMzY2MTAwMUUtMzcsLTUuNzExMzA0MDMwMjYxMjUzRS0zNywtNC44MDExNDM4MzI1MjkyMTdFLTM3LC0xLjYyMDYzMDI3MDcyNjQ2MjJFLTM2LC0xLjI2MTc2NDE2OTYyMjAzNUUtMzYsLTUuMDA4OTMzMTc2NTYxOTA4RS0zNywtNC43NzM4Mzg3OTg1MDg4MjJFLTM3LDAuMAorMTYsV2VkIDkgRmViIDExLDguMzU2MzY1NTkzNDY5NDIzRS0zNiwxLjA0Njk4NTkzMjkyNDgyMjFFLTM1LDkuMjUxOTQzNTA2OTI4NTE4RS0zNiwyLjc0NDQyMDk5MTU3NjE2NzZFLTM2LDUuMDU0OTg4NzQ0NDY3NjE1NEUtMzYsOS4xOTk4OTI0OTQ5OTA5MThFLTM2LDguODEyNTgyMzkwMDE4MzQ2RS0zNiwwLjAKKzE3LFRodSAxMCBGZWIgMTEsMS41NTk4ODYwNDI1NjAwMDE3RS0zNiwxLjg2Nzk0Njk3OTk1NzIwMDRFLTM2LDEuNzczMzgwODc0ODA3MjJFLTM2LDkuNjQwMDIxMzAyNzczMjY4RS0zNywxLjE4NDgzOTM1ODM1NTQ2NjZFLTM2LDEuNzcwMzgxMDg0MTkwOTM2NkUtMzYsMS42MzQ2NjI0MDk2OTYyNDE3RS0zNiwwLjAKKzE4LEZyaSAxMSBGZWIgMTEsMi4xMzkyOTM3NDgwMDQ4NTVFLTM3LDIuMjA4NzcxODE3NTM0OTc1RS0zNywyLjIwMzIyMjgyNzYxMjM4ODNFLTM3LDEuMjAyMjg2MDc5MDg0OTk1M0UtMzcsMS40OTY2NjYxNDgzMDMwNTYyRS0zNywyLjIwMDk1ODMwNDQ0MzM5MDZFLTM3LDEuOTk3OTUzNTU4MjU4MzYwMkUtMzcsMC4wCisxOSxTYXQgMTIgRmViIDExLDQuMTUxNTgxMDI0ODA2OTM2NEUtMzgsNC4xNTU1OTgwMjA2Mzk2NUUtMzgsNC4xODYyMzQxMDM3MTc0ODM1RS0zOCwyLjA4MzYxMTYwODM1MzkwMUUtMzgsMi43NjMxOTQ2ODE0NzcxOTZFLTM4LDQuMTgyNDE0MzYzODA1MjYwM0UtMzgsMy43NzMzNjY0OTU0NjA5NTM2RS0zOCwwLjAKKzIwLFN1biAxMyBGZWIgMTEsMS4xNDkxMDU0NjAxMzkxOTAzRS0zOCwxLjEzOTg2ODE0NzUwMDczOTlFLTM4LDEuMTUzMjU2MTYyNTQ5MjgyNEUtMzgsNS4zNzg3NTg3NzIwMjQyMDk0RS0zOSw3LjQxODI2ODc4Mjk0MDE1MkUtMzksMS4xNTIzNDk5NTgzNTQ2NzEyRS0zOCwxLjAzMzQ2MjQ1MTk3MDUxNUUtMzgsMC4wCisyMSxNb24gMTQgRmViIDExLDQuMTQ1NTE5Mjg4NjQ5MzE0RS0zOSw0LjEwMjYzMzQwMjc5OTQyMDVFLTM5LDQuMTYyNjc3MTA3NjU1Nzc0RS0zOSwxLjg2NjQxNDE1MzA4ODgwODJFLTM5LDIuNjI5NTY5NTY0NzQyNTY0RS0zOSw0LjE1OTkxOTk4MjU4ODEyNUUtMzksMy43MDk3OTExMjc0NzkxMzdFLTM5LDAuMAorMjIsVHVlIDE1IEZlYiAxMSwxLjgxMDgzNDM4ODI1MzMyMTZFLTM5LDEuNzkyNzQzNjcyMzk0Mjg1MkUtMzksMS44MjI5MTk4NzA0NzE1MjVFLTM5LDguMDA4MDgwMzUxODkyNzY1RS00MCwxLjEzODc5NDczODk2MDY1MzZFLTM5LDEuODIxOTAxNjkyMjE5NzE5RS0zOSwxLjYxNjc1Nzc0MDk0MDQ4NkUtMzksMC4wCisyMyxXZWQgMTYgRmViIDExLDkuMDcwNjE4MDQ4MTA0MzQ0RS00MCw4Ljk5MzEwMzE0NDM3MzM1NUUtNDAsOS4xNjAxMjA4MDM0NjA4NzlFLTQwLDMuOTk3MjY2OTYzMjQ2OTg3RS00MCw1LjY5MDkzMzkwMjk2MjYxN0UtNDAsOS4xNTU3MTUyMDgyNzA3OUUtNDAsOC4wOTE3MzA3MTUxOTgxOTFFLTQwLDAuMAorMjQsVGh1IDE3IEZlYiAxMSw1LjAwODUxMDQwNjY5ODcwOUUtNDAsNC45NzQ3MDcwNDk0NzA1OTZFLTQwLDUuMDczOTc1MjIwNTE5MzU3RS00MCwyLjIyMTEzMjkwODA2MTEwNEUtNDAsMy4xNDg1OTI0NjA2MTEzOTQ0RS00MCw1LjA3MTc5NTEwNjkyMTAyN0UtNDAsNC40NjgxODQ2NjcxODc5MzNFLTQwLDAuMAorMjUsRnJpIDE4IEZlYiAxMSwyLjk2MzAxOTk1NzQ3OTI4ODNFLTQwLDIuOTQ4MzIxNjAzMTE0NjA0M0UtNDAsMy4wMTAzNTgyNjYyMDQ3MzIzRS00MCwxLjMzMTAzNDk2Njk0MzQxNjdFLTQwLDEuODcxOTI2MjEzNDQwOUUtNDAsMy4wMDkxNTAxODA0NDIxODVFLTQwLDIuNjQ0OTA1MTIyOTM1ODg2MkUtNDAsMC4wCisyNixTYXQgMTkgRmViIDExLDEuODQwMTI1MTg0NTc2NzU4RS00MCwxLjgzMzk3MTA4ODE4MTA2NTlFLTQwLDEuODc0MDkzMjY2NTA1NzA5OEUtNDAsOC40MDg4NDkyMTk1MTU2NEUtNDEsMS4xNzA2MDc4NjEzMjIzMUUtNDAsMS44NzMzNjAyMDk4NTg1OTM3RS00MCwxLjY0NDEwMjIxMDA1OTMxNjhFLTQwLDAuMAorMjcsU3VuIDIwIEZlYiAxMSwxLjE4MjI1NTI4NDU4MjUzM0UtNDAsMS4xNzk5MzczNzI0OTE0MDI0RS00MCwxLjIwNjQ4NTU4NDMwNzI5NTRFLTQwLDUuNTEwMjU2MTEzODQ2NjQ3RS00MSw3LjU4MzIwOTkzNzA0OTg2RS00MSwxLjIwNjAwOTgwMTc5NDI4OTVFLTQwLDEuMDU3NTU3NDc3OTEzNzQxNEUtNDAsMC4wCisyOCxNb24gMjEgRmViIDExLDcuNzc3MTAxNzEyODc5MjFFLTQxLDcuNzcwNzYzMDM5MzgyMzQ0RS00MSw3Ljk0OTAzMjg1NDY4NjY1OUUtNDEsMy43MDI0NzAxMzA2NDMwODI0RS00MSw1LjAzMzgzMTcyOTA5ODM5M0UtNDEsNy45NDU4MDA2NjcyMzYwMkUtNDEsNi45NjYyNDI3NjQzNjcxOTlFLTQxLDAuMAorMjksVHVlIDIyIEZlYiAxMSw1LjE5OTYyMTAyOTk4MzU3OEUtNDEsNS4yMDAyMDQ0MjI3MzUxOTlFLTQxLDUuMzIxMDAyOTMzOTcxNDc0RS00MSwyLjUzMDIyMzg4NDUwMDE4MjZFLTQxLDMuMzk3ODkxODMxOTEwNTk1RS00MSw1LjMxODc0NDUyNjMzNzM2M0UtNDEsNC42NjQ0Mzk0MzA5MzY3MzNFLTQxLDAuMAorMzAsV2VkIDIzIEZlYiAxMSwzLjUxNDk0MDMzNDkyMDI2MTVFLTQxLDMuNTE3OTMyMjk2MzE4Mzc0M0UtNDEsMy42MDAyMTQ2NjU3Njc1ODNFLTQxLDEuNzQ4NTg1MDA4MTIwNjc1RS00MSwyLjMxOTY5Njc4NDYwODU5OEUtNDEsMy41OTg2MTIwNTMyMDM3OTZFLTQxLDMuMTU4MTk3NDc4OTY0MDkyM0UtNDEsMC4wCiszMSxUaHUgMjQgRmViIDExLDIuMzkzNzEyOTU1ODg0MzAxN0UtNDEsMi4zOTcxNDUyMTYyNTM0NTNFLTQxLDIuNDUzMzM3ODc0Mzg5Mzg5NUUtNDEsMS4yMTcxMjczNDQ5NTAxNzdFLTQxLDEuNTk1NTUwNzU3NzYwMTEzRS00MSwyLjQ1MjE5MjU4NDg0NzQzM0UtNDEsMi4xNTQzOTE0MTYzMjcwNjczRS00MSwwLjAKKzMyLEZyaSAyNSBGZWIgMTEsMS42MzgwNDU2MjA2MzgwNzE2RS00MSwxLjY0MTE0MTE3MDYwMTkzNjJFLTQxLDEuNjc5NTQ5NzUzODU1Mzg5MkUtNDEsOC41MDk0MDAwNTc2NjMxMjRFLTQyLDEuMTAyNzg5NDUxMzE1NzE2M0UtNDEsMS42Nzg3Mjk4MTM3NjQwNTA2RS00MSwxLjQ3Njg2MzQ1NjY1MDgyMTJFLTQxLDAuMApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9MYXJnZU1peE1pZ19SS19SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vUG9wdWxhdGlvbiBDb3VudF8wLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvTGFyZ2VNaXhNaWdfUktfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL1BvcHVsYXRpb24gQ291bnRfMC5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmMyNDQwMQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvTGFyZ2VNaXhNaWdfUktfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL1BvcHVsYXRpb24gQ291bnRfMC5jc3YKQEAgLTAsMCArMSBAQAoraXRlcmF0aW9uLHRpbWUsCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0xhcmdlTWl4TWlnX1JLX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9Qb3B1bGF0aW9uIENvdW50XzEuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9MYXJnZU1peE1pZ19SS19SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vUG9wdWxhdGlvbiBDb3VudF8xLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYzI0NDAxCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9MYXJnZU1peE1pZ19SS19SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vUG9wdWxhdGlvbiBDb3VudF8xLmNzdgpAQCAtMCwwICsxIEBACitpdGVyYXRpb24sdGltZSwKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvTGFyZ2VNaXhNaWdfUktfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL1BvcHVsYXRpb24gQ291bnRfMi5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0xhcmdlTWl4TWlnX1JLX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9Qb3B1bGF0aW9uIENvdW50XzIuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA2M2M5NTkKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0xhcmdlTWl4TWlnX1JLX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9Qb3B1bGF0aW9uIENvdW50XzIuY3N2CkBAIC0wLDAgKzEsMzMgQEAKK2l0ZXJhdGlvbix0aW1lLFlFLU4tRzE1MDAwMSxZRS1TLUcxNjAwMDEsWUUtUy1HMTYwMDAyLFlFLVMtRzE2MDAwMyxZRS1TLUcxNjAwMDQsWUUtUy1HMTYwMDA1LFlFLVMtRzE2MDAwNixZRS1TLUcxNjAwMDcKKzEsVHVlIDI1IEphbiAxMSwxLjc4MDA4MjZFNyw3Mzg2MTYuMCw2ODEwNjguMCwxMDgyODUuMCwxMDg3ODIyLjAsMzk0NjgwLjAsNTk2MjI3LjAsNDg2NjMuMAorMixXZWQgMjYgSmFuIDExLDEuNDcxMjA2NjkyNTk0ODg2RTcsMTQ4MDYxMC42NzM1MzAwMDkzLDE0MzkwOTYuNTcyMzc1NjA5NSwxNTQ5MTEuODU4NTg4OTk3NCwxMDM1ODkyLjQwODIzMjQzNjMsMTIwNTI1OC4zNTg2MzE2OTU0LDEzNzk2ODcuMjAyNjkyMzg5NSw0ODY2My4wCiszLFRodSAyNyBKYW4gMTEsMS4yMjk5MTY5MjIzMDI1NzU4RTcsMjA1OTY0Mi42MDI3Njc1MTEsMjAzMDMzMy4xNDU0MzkwODI4LDE5NzY5Ny43NDgxNjc0MTYxNywxMDIzMDQzLjMyNjE4MTkxNTYsMTgzOTY1Mi40OTUyODM3NzUsMTk1Nzk4NS40NTkxMzQ1MzczLDQ4NjYzLjAKKzQsRnJpIDI4IEphbiAxMSwxLjA0MjQ5MjA1NDMwNTk3MjNFNywyNTA3MTIxLjEzMzYyMTE2MzcsMjQ4ODM3My4wMDY4MjczNiwyMzgzNjIuOTI3MzY5MjAzNCwxMDM3NjY1LjEwMDMxODE5MzYsMjMzMjk2My4xNTUzOTkyNTE3LDIzNzgxMTguMTMzNDA1MDk2LDQ4NjYzLjAKKzUsU2F0IDI5IEphbiAxMSw4OTc5MDY5Ljc2MTEyMTA5NCwyODQ4NzEwLjgwOTU1NjQyNjUsMjg0MDE1Ny45MTEwODY2ODMsMjc4MTM0LjYyNzM2ODQ3NjYsMTA3MDgxNy44MTM2MDgwNjM0LDI3MTMzOTIuMTEyNTMxMDM2LDI2NzcyNDAuOTY0NzI4MjEwNiw0ODY2My4wCis2LFN1biAzMCBKYW4gMTEsNzg2ODMwNy4xMjM5OTgwMjQsMzEwNjU4Mi4yNDc5ODQ3NzM1LDMxMDg0NzUuODY5OTU5NDY4LDMxNzg1MC40MDQ4ODE3NDQ4LDExMTU1MTQuMzg5MzQ4NzIyLDMwMDQ4NjMuNzIwNzczNDI1LDI4ODU5MzAuMjQzMDUzODMzNSw0ODY2My4wCis3LE1vbiAzMSBKYW4gMTEsNzAwNDUxMC40MDM3NTQ2MjcsMzMwMjIyNC41NzgxODE5NDYsMzMxNDk0Ni40NDkzNDM2MDcsMzU3OTcyLjgxNTkzOTkyNTQsMTE2NjM4OC4xNjExMTg4NDAzLDMyMzAyMDUuODg3OTk5ODY2LDMwMzEyNzUuNzAzNjYxMTc3Myw0ODY2My4wCis4LFR1ZSAxIEZlYiAxMSw2MzI5MTcwLjY3MDM1MjIzNywzNDUwMDk5Ljc1MjU0MDI4NjYsMzQ3MzkzMi44NDY3OTg3NDgsMzk4NzAwLjIwOTY0MjgxMywxMjIwMTY0LjMzNTAyMzgxMzQsMzQwNDYxOC44NDY3Njk0NjM3LDMxMzA4MzcuMzM4ODcyNjI4OCw0ODY2My4wCis5LFdlZCAyIEZlYiAxMSw1Nzk5NjQ5LjE5NTAzODEwMzUsMzU2MDg4MC42NzM5Mjk2ODYsMzU5NTkyMS44NzI2ODg1NTEsNDQwMDg5LjA1MzczNTkxMDksMTI3NDcwNC4xOTkyOTE5MjI2LDM1MzkyMjguMjQyODUwNjIsMzE5NzA1MC43NjI0NjUxOTUzLDQ4NjYzLjAKKzEwLFRodSAzIEZlYiAxMSw1MzgzMzIzLjc4MjE0NDA1NywzNjQyODI4Ljg3MDEyMDE5MzMsMzY4ODk2NC42MDYwMjEzNjU2LDQ4MjEwNy42MjM4MTA2NzIzLDEzMjg2MDMuMzQxNTk5Njk1MiwzNjQyNTk5LjgzODc3MTk5NTYsMzIzOTA5NS45Mzc1MzIwMTI0LDQ4NjYzLjAKKzExLEZyaSA0IEZlYiAxMSw1MDU1MDIwLjA1Mjc0NDEyNiwzNzAyMzg1LjYwMDc1MDcxMjcsMzc1OTMwMi44MTYyMTEzNCw1MjQ2NzAuOTEwMDU1OTA2OSwxMzgwOTcxLjk2OTcwMTY0NzUsMzcyMTM5My43OTYyODMyMzIsMzI2Mzc3OC44NTQyNTMwMjYsNDg2NjMuMAorMTIsU2F0IDUgRmViIDExLDQ3OTUyMjEuMjU4MzEzODYyLDM3NDQ1ODguNTA0NzgxODA0NSwzODExODAzLjk5ODc2ODU4ODUsNTY3NjY0LjQxMjU2NjE0NzcsMTQzMTI4My4zMDEyOTM1NTcsMzc4MDgxOS4zOTA1ODIzNDMsMzI3NjE0My4xMzM2OTM2ODk1LDQ4NjYzLjAKKzEzLFN1biA2IEZlYiAxMSw0NTg3OTI0LjIyNzAzOTM4OCwzNzczNTg4LjI5MTU5Mzg5MjUsMzg1MDUwMC4yNjY0MDc5ODg1LDYxMDk1Ny4wNzc4ODE4NDMxLDE0NzkzMTMuOTk2NTkzMzgwOCwzODI1MjA5LjIwOTA5MDkxNiwzMjgwMDMwLjkzMTM5MjU4Miw0ODY2My4wCisxNCxNb24gNyBGZWIgMTEsNDQxOTgzNy4wNzcxNjcwNTgsMzc5MjgyNS41NjA1OTgxNzI3LDM4Nzg3ODguMDc2NTMwNTExNSw2NTQ0MjIuNzcyNTY1NjIxNSwxNTI1MTEzLjk5NDI3MzY3MDcsMzg1ODIzMC4yNTY2OTE4NTgsMzI3ODMwNi4yNjIxNzMwOTY2LDQ4NjYzLjAKKzE1LFR1ZSA4IEZlYiAxMSw0Mjc2Mjc3LjE2OTUzMzMyNywzODA2MDE4LjUzMjEwNjY2NDUsMzkwMDUxNC41MDk3NzM3OSw2OTc5NTcuMzMzNjUxMDI0MSwxNTY5MjM5LjA0NjU4MzIzOTcsMzg4NDA2OC4yNTM5MDI4Njc0LDMyNzM0NDkuMTU0NDQ5MDc4LDQ4NjYzLjAKKzE2LFdlZCA5IEZlYiAxMSw0MTY0MjI0LjI1ODEzODI4MDQsMzgxMTUzMC4yODAwNjgyODUsMzkxMzc1NS41MzEwODQ4NjYsNzQxNTIxLjQxOTI5NzYzNDksMTYxMDg4NS40NjYzMjk5MjA4LDM5MDA1OTguNTI2Mzg4MTI2NCwzMjY1MDA4LjUxODY5Mjg3NzYsNDg2NjMuMAorMTcsVGh1IDEwIEZlYiAxMSw0MDc1OTI0LjA0OTMyMjMzMSwzODExNDAzLjU2NTc2OTgzNTQsMzkyMDUwOS44NTQ2NTE4NzE2LDc4NDk4OS42MjE2NDkyNDkzLDE2NTAxMjMuNDE2NTk2NDU0MywzOTA5OTg0LjI1MDg5NDQ3OTUsMzI1NDU4OS4yNDExMTU3NzAzLDQ4NjYzLjAKKzE4LEZyaSAxMSBGZWIgMTEsNDAwNTU2My41ODUwNzk0NjEsMzgwNzE3My4yMjI0MTUwOTEsMzkyMjI5OC45Njk3NTM0MjQsODI4MjQ2LjMxMTM5NjYwOTYsMTY4NzA5MC4wMTgwNzUwNTk5LDM5MTM4NzguNDg2NzQ3NTA5MywzMjQzMjczLjQwNjUzMjgzNTcsNDg2NjMuMAorMTksU2F0IDEyIEZlYiAxMSwzOTQ4NzgyLjA3MjMzNjAxLDM3OTk5ODkuMzAwMzM3NzM0LDM5MjAyODQuODg5MDAyNTE0NSw4NzExODguNDk2NzMwNTMyMSwxNzIxOTU3LjAwMjE2NDAyNjMsMzkxMzU0OC41MDI1OTc3ODIzLDMyMzE3NzMuNzM2ODMxMzkxLDQ4NjYzLjAKKzIwLFN1biAxMyBGZWIgMTEsMzkwMjMwNS40NzkzMDcyNzgsMzc5MDcxMC45MDAzMDg1NzIsMzkxNTM1OC4xNDk0MTU3MTQ3LDkxMzcyNi45MjIwMDIyMDY5LDE3NTQ5MDkuNDEzNjI1NzIsMzkwOTk2OS4wNDAyOTE5MjgsMzIyMDU0NC4wOTUwNDg1NzE1LDQ4NjYzLjAKKzIxLE1vbiAxNCBGZWIgMTEsMzg2MzY3My40OTI2OTkwNiwzNzc5OTc3LjU1ODQ1MDAzMywzOTA4MjAzLjY5Nzk5ODc0NzcsOTU1Nzg2LjA0NjU4MzM4MjUsMTc4NjEzMi4wMjMxMTU2ODY4LDM5MDM4OTIuNDEwNjk5NzE3MiwzMjA5ODU4Ljc3MDQ1MzM2NCw0ODY2My4wCisyMixUdWUgMTUgRmViIDExLDM4MzEwMzUuNDE2MDM5MzM5NywzNzY4MjYzLjQ2NTM1MjU3MDYsMzg5OTM1MC4zMTYzOTEzNzcsOTk3MzAzLjM0NTQwOTk5NzksMTgxNTgwMS4wNjE2NTU5NTU2LDM4OTU5MDEuMjg2NTUyMTUyNiwzMTk5ODY5LjEwODU5ODU5ODMsNDg2NjMuMAorMjMsV2VkIDE2IEZlYiAxMSwzODAyOTk3LjU0MTY3NjIwNSwzNzU1OTE4LjU3ODY2MTEzLDM4ODkyMDcuNzc3MzI5ODc0LDEwMzgyMjguMjMxMjIyMjk1OCwxODQ0MDc5LjU3ODE5MDc4OTgsMzg4NjQ0OC41NTM0NTg0OTQsMzE5MDY0My43Mzk0NjEyMDE3LDQ4NjYzLjAKKzI0LFRodSAxNyBGZWIgMTEsMzc3ODUwOC45NjU3ODY0OTc2LDM3NDMxOTkuNzQzNTI1MTkyNiwzODc4MDk0Ljg0NDQyMDE4NiwxMDc4NTIwLjc5ODU3MDcyMDUsMTg3MTExNS4yMTg5MDU4ODU3LDM4NzU4ODcuNDY1MzIzMDgxLDMxODIxOTYuOTYzNDY4NDI4LDQ4NjYzLjAKKzI1LEZyaSAxOCBGZWIgMTEsMzc1Njc3Ni4xMjM0NjYwNDEsMzczMDI5NC4yMDY3NzAwNjM0LDM4NjYyNjAuNDI2NDg4ODk3MywxMTE4MTUwLjUxOTU4NzQ3ODgsMTg5NzAzOS41ODUxMTcyNTQ5LDM4NjQ0OTQuNTIzMjExMjEyNCwzMTc0NTA4LjYxNTM1OTA0MjMsNDg2NjMuMAorMjYsU2F0IDE5IEZlYiAxMSwzNzM3MTk4Ljc4NzM2NDI5MiwzNzE3MzM3LjM0OTg0MjMxLDM4NTM4OTkuNjA1MTg3OTI5MiwxMTU3MDk0Ljk3Mjg2Mzk2NzUsMTkyMTk2OC41ODMzNTI4NTU0LDM4NTI0ODYuODgyNTY1NzgxLDMxNjc1MzcuODE4ODIyODU0LDQ4NjYzLjAKKzI3LFN1biAyMCBGZWIgMTEsMzcxOTMyMi4xMTI3MTIzNzYsMzcwNDQyNi4wMzQ1NzA4OTEsMzg0MTE2NS44MTUzOTgzNjA2LDExOTUzMzguNjUzMzg4NDEyLDE5NDYwMDMuMzY0NjAxOTEwOCwzODQwMDM1LjYzNzMwMDY0MDMsMzE2MTIzMi4zODIwMjczOTksNDg2NjMuMAorMjgsTW9uIDIxIEZlYiAxMSwzNzAyODAwLjY4MzYzNDc2MzYsMzY5MTYyOC42MjUwMjg2NTE3LDM4MjgxODAuMTMyMzE3ODAzLDEyMzI4NzEuODg4OTQ5MDg2NywxOTY5MjMxLjU3OTkxMjUxMDIsMzgyNzI3NS45ODk4Mzk2MjY1LDMxNTU1MzUuMTAwMzE3NTQ3Niw0ODY2My4wCisyOSxUdWUgMjIgRmViIDExLDM2ODczNzEuNTM5MjgyOTkxLDM2Nzg5OTIuNDk1MzI4NDA4LDM4MTUwMzguMzc3Mzk1Mjg2LDEyNjk2ODkuODczNDk3MjU4LDE5OTE3MjguNzcxMzg0NTkxLDM4MTQzMTUuMDYzNDEyNzQzLDMxNTAzODcuODc5Njk4NzEyLDQ4NjYzLjAKKzMwLFdlZCAyMyBGZWIgMTEsMzY3MjgzMy45MjIyMTgxNDg2LDM2NjY1NDkuNjM5MjUyMjEzMywzODAxODE2LjU3NTY4NzIwMSwxMzA1NzkxLjgxODM5MTYyNDYsMjAxMzU1OS43ODE5MDU5MzAzLDM4MDEyMzcuOTI0NTAxMTY1NywzMTQ1NzM0LjMzODA0MzcwNDYsNDg2NjMuMAorMzEsVGh1IDI0IEZlYiAxMSwzNjU5MDM0LjA2MTY0ODczMTYsMzY1NDMyMC44NDk0MjQyODE2LDM3ODg1NzUuMTYzNjMyNjk5LDEzNDExODAuMjE2NTY3MzQsMjAzNDc4MC4xMTE1MzcxMDQsMzc4ODExMi4yNDI2ODM4NjkzLDMxNDE1MjEuMzU0NTA1OTY0LDQ4NjYzLjAKKzMyLEZyaSAyNSBGZWIgMTEsMzY0NTg1My43Mjk4MzEzMjQ0LDM2NDIzMTguODIwNjYyOTg4MywzNzc1MzYyLjI0Njc3NTYzOTIsMTM3NTg2MC4yMTEzMTU4Mjg0LDIwNTU0MzcuMTc4OTM3MDU4NywzNzc0OTkxLjkxMDAxNjU3NDQsMzEzNzY5OS45MDI0NjA1NzUsNDg2NjMuMApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9MYXJnZU1peE1pZ19SS19SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vUl8wLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvTGFyZ2VNaXhNaWdfUktfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL1JfMC5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmMyNDQwMQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvTGFyZ2VNaXhNaWdfUktfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL1JfMC5jc3YKQEAgLTAsMCArMSBAQAoraXRlcmF0aW9uLHRpbWUsCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0xhcmdlTWl4TWlnX1JLX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9SXzEuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9MYXJnZU1peE1pZ19SS19SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vUl8xLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYzI0NDAxCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9MYXJnZU1peE1pZ19SS19SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vUl8xLmNzdgpAQCAtMCwwICsxIEBACitpdGVyYXRpb24sdGltZSwKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvTGFyZ2VNaXhNaWdfUktfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL1JfMi5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0xhcmdlTWl4TWlnX1JLX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9SXzIuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFlYTBmMWEKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0xhcmdlTWl4TWlnX1JLX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9SXzIuY3N2CkBAIC0wLDAgKzEsMzMgQEAKK2l0ZXJhdGlvbix0aW1lLFlFLU4tRzE1MDAwMSxZRS1TLUcxNjAwMDEsWUUtUy1HMTYwMDAyLFlFLVMtRzE2MDAwMyxZRS1TLUcxNjAwMDQsWUUtUy1HMTYwMDA1LFlFLVMtRzE2MDAwNixZRS1TLUcxNjAwMDcKKzEsVHVlIDI1IEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyLFdlZCAyNiBKYW4gMTEsMC4wOTAxNDc4MDkzNTQ3NjU2NiwyLjEzOTUxMDk0NzgzNjMzMywwLjEwMTg3OTczODU0MDMwMjg2LDUuMzE1NjQ5NDEzOTI4NDQxRS01LDAuMDA0MDUxNzM5NjA2OTkyOTcsMC4wOTI4NTU5NDc4NzgyNzY0MywwLjE1MzA1MzI2NDY2MDA2Nzg2LDAuMAorMyxUaHUgMjcgSmFuIDExLDcuNjIzOTc4NjE3OTAzNTU1LDkxLjUxNTYzMzA0Mzk5MzUyLDguOTE5NDU0NjgxNDQ3MjMxLDAuMDIxNTExNDc0NzYxOTU5MDA1LDAuNzM0ODkwODM1ODI0MTA0Nyw4LjE2ODAxNDg4NTgwMzE5LDEzLjI2NDU5MTkzMTAxNDE3NywwLjAKKzQsRnJpIDI4IEphbiAxMSw0ODUuMDE0MTIxOTI4MjI1NiwzNzIxLjQzNjg2ODkyMzc2NjcsNTc0LjgyODk4NjI0MTk2MDMsMy4xMjk3MzEwNTQ3NDQ4NTgsNjguNjIxMDAzMTk1MjQxNTgsNTMwLjIwNzgyMzk3NjE5OTQsODIxLjY4MzAwMzc3MjM2ODIsMC4wCis1LFNhdCAyOSBKYW4gMTEsMjUwMjkuMzQzMzE2MTMzNjIsNzkwMzIuMDU4MjYwMjE3LDI2MjAxLjM0NzUzODQ0OTI4NSwzMTQuNjIyOTE3MTY2MjYsNDU0MC4wNzQ0Nzk4MDg2MzgsMjQ0NzguMDk3MzczOTc0MSwzMzE4MS44MDQwOTg3NDEwNjQsMC4wCis2LFN1biAzMCBKYW4gMTEsNDAwOTc4LjUzMTYyNTQ3NzgsMzU1Njc5LjA0NzgyOTU5MTUsMjQ5OTk4Ljc5MTQ1MjE2NTcyLDExMjY2LjU4MjQ2MjU1MzIxOSw3MDUyMC4wNzAxMTI3MjUyMywyMzkzMTUuMjc4MzA5MDM1MywyNTY3MjcuMjM0NzI4ODQ0NTUsMC4wCis3LE1vbiAzMSBKYW4gMTEsMTIyMzk0Ni41MTA5NzM4NTUyLDc4NTkzNC4yODE4NDg4NzU1LDY5MDA2Ny4zNzIxODkyNTM3LDU0MzgzLjc1NDE4MzY4OTIsMjIzMjYxLjIxODA5OTc5NzE0LDY2OTU4NS44MzQ0MTYzOTExLDY1NjA2NC40NTU1ODY0NzI2LDAuMAorOCxUdWUgMSBGZWIgMTEsMjA0MjgzMy4zNDQ3ODYyMzEyLDEyODM2MjIuMzU5NTA5NDgxMSwxMjE3NDk2LjMxMzQzNDYyOSwxMTk3NjMuNDcyNzE1NDk0ODUsNDEyMjUyLjYzOTgxMjc3NTY1LDExOTA2ODguNDE3NDU2OTUyLDExMTcyMjMuODEwMDE5NzY1NSwwLjAKKzksV2VkIDIgRmViIDExLDI2OTM2NjMuOTcwMDk2Njk1MiwxNzc2NzU4LjY4NTQ5NTA5NTgsMTc0MjU2Ni45MTc3OTc3NTYsMTk1OTAwLjIxNzc5MDQxMjM0LDYwNjY0Ny40NzM0NTMxNTE4LDE3MTMxNDkuMzMyODc5NDI1MywxNTYzNjI3LjE3MDQzMDMyNjYsMC4wCisxMCxUaHUgMyBGZWIgMTEsMzE2MTAyMi4xMTIwMjQ2OTQ3LDIyMjE2NzcuNDAyMzU1OTM3MywyMjE2MTIyLjI5MTM4NTk3NDcsMjc1NTE0LjM5NjczOTI4ODY0LDc5MDQzNi4wNzYyODQ4MDIyLDIxODY4NzUuMTg0OTg1MTEzMywxOTU1NjA5LjMzODI1NDQ4MDIsMC4wCisxMSxGcmkgNCBGZWIgMTEsMzQ3NjA5Ny4zMDM3NTUxODg0LDI1OTg3ODQuMzc0NDcxNTcyNywyNjE3NTQ4LjE5NjMxNTU5NiwzNTQzMDkuNTYxNTc4NjA5Nyw5NTYyMDAuMTg5MjI3NTk4MSwyNTkwMTk4LjUwOTUwNzM3MTYsMjI3ODkwOC43NTY1MzM4MjYsMC4wCisxMixTYXQgNSBGZWIgMTEsMzY3Nzc1Ny41MTgyNTkxNzEsMjkwNDM5Ni42NzYzMjA5MTQsMjk0MzU0MS44NzczMjE1OTYsNDI5OTc4LjAzOTE1NDQwODQ0LDExMDE1MDcuNzQ3NTczODI0MSwyOTE4OTgwLjc0NDk2NzQzNywyNTMzOTg3LjkxNDk3NjY2MiwwLjAKKzEzLFN1biA2IEZlYiAxMSwzNzk5MTc4LjM0Nzg0MTU3MzQsMzE0MzgyMC43Mjg3ODUxMTE2LDMyMDAwOTQuMzQ1NjE3MDI1LDUwMTQzMi4zODA2MjQxNjYzLDEyMjY3MTEuODY3MTk0NDA5NSwzMTc4NjU2LjMzMjY5MzI4NjIsMjcyODU5My45MjEzMzkyNzY3LDAuMAorMTQsTW9uIDcgRmViIDExLDM4NjQ3NDQuNzM2NzM4ODU5NywzMzI2NTUyLjUxNzU5NTM0NDcsMzM5NzM0OS43ODI5NDI5ODYsNTY4MzMxLjg5NTE3NjkxMTcsMTMzMzY3Mi44NzA0MzYzODksMzM3OTA1Ny4wNzc3NDg0Mzk3LDI4NzMxMTUuNjExNDQ0MTk3LDAuMAorMTUsVHVlIDggRmViIDExLDM4ODgzNzQuOTg4MzM4NTY1NSwzNDYzOTI0LjA3NjA1NjgwNiwzNTQ3MzAxLjI1MDUxMDQ1NDYsNjMwNjMwLjA5MzQ1MjA5MzcsMTQyNTA2NC41OTgwOTI1MzMyLDM1MzIxMTIuODk3MzQ1Mjc4NCwyOTc4MzQ0LjA4NDUyODAyMSwwLjAKKzE2LFdlZCA5IEZlYiAxMSwzODkyMzMzLjQ3MDY5ODUzMDMsMzU2MzAyOS4wOTQwNjgzNTQ1LDM2NTcwNzQuODgyMjAzNTk3Niw2ODk0MzQuNzQ3MTczNTU4MywxNTAzMzA4LjM2NzIzNTE0OTcsMzY0NDYxMC44MDcyNDI0MDgsMzA1MTg0MS45NzMxMzk3OTEsMC4wCisxNyxUaHUgMTAgRmViIDExLDM4ODUwMDQuNTYwMzgxODM0NCwzNjMyMzI4LjU1NDk2MjkwNjUsMzczNTQyMy44MjQ0MTg2NTA1LDc0NTA3OS42NDQ0NTMzOTI2LDE1NzA1MDYuNzQxNjE1NTA0NywzNzI1Mjc3LjMzODExMTU4OSwzMTAxNjA0LjQxNTIwNjM5OSwwLjAKKzE4LEZyaSAxMSBGZWIgMTEsMzg3MTM5OS44OTMzNTkyOTI4LDM2Nzg5NjYuMDUxOTAyNjM0LDM3ODk2OTIuNTEyMTM1NTY2LDc5NzkyOS4zODgzMTkyMzI3LDE2Mjg1ODguMTk2MDY0NTgxLDM3ODE0NzguMjUxMTkwOTc1MywzMTM0MDQ4LjYxNzk2NTU1NTMsMC4wCisxOSxTYXQgMTIgRmViIDExLDM4NTQ1MDcuMjc2NjE3OTMxLDM3MDg2OTIuMzM1MTI0NTI0MywzODI1Nzg3LjQwODE4MjUzMSw4NDgzMzcuNTY0ODM5NDEzMiwxNjc5MjQwLjU2MDAyODQyMDUsMzgxOTE2Mi42MzU3MTIzMjA1LDMxNTQxMjIuODczNjUyOTg1LDAuMAorMjAsU3VuIDEzIEZlYiAxMSwzODM2MTAyLjY0Nzk4MDY1MywzNzI1OTg5LjE5NTQ4MTU1NywzODQ4MzI0LjAwOTQxMDgxOCw4OTY2MjQuNTY2NzMzODM5MiwxNzIzODkxLjU2NDc3NjkwNzQsMzg0Mjk5NS4wNDU3MDAzOTg3LDMxNjU1MzYuMDUwNjczNzMsMC4wCisyMSxNb24gMTQgRmViIDExLDM4MTcyMzIuMTYyNTU3OTMzLDM3MzQyNjkuNjUyMTAxODEyNCwzODYwODM2Ljg3OTExODcwMDUsOTQzMDY3Ljk5Mzg4NjQwODQsMTc2MzcxOC43ODc0MDczMDUsMzg1NjU1Ny44Nzc5NDQ1ODAzLDMxNzEwMDkuMDYxNDgyNTE2LDAuMAorMjIsVHVlIDE1IEZlYiAxMSwzNzk4NDk4LjkxNDk0OTU5NDUsMzczNjA4OC43MjU3Mjk4NTk0LDM4NjU5OTMuNzU3NzM5NjY4Miw5ODc5MDAuNzk4NDEzNDk3NCwxNzk5Njc1LjM2NTA3ODE3NjYsMzg2MjU2Mi4wMDAxMjM2NzksMzE3MjUwMy41OTYwNjA3NTEsMC4wCisyMyxXZWQgMTYgRmViIDExLDM3ODAyMzUuMzY2NTI4NzA5NCwzNzMzMzM0LjIyNjQ2MjQ0NywzODY1Nzg3LjAwOTgwMDM5MDMsMTAzMTMxMy44ODgyNjY1OTI4LDE4MzI1MjIuMTExMDQ0MjEzLDM4NjMwMzYuOTk4MDI2NDQ1NSwzMTcxNDEyLjQ5MzI0MDY1NTQsMC4wCisyNCxUaHUgMTcgRmViIDExLDM3NjI2MDguNjQ0NzU1NTAzLDM3MjczODYuNTYxNzQyMTE1MywzODYxNjkzLjI4NDQ4Njg1MDcsMTA3MzQ2MC45OTU2NDcyMTIsMTg2Mjg2MC4yNDQ2ODA0OTc4LDM4NTk0OTAuODA1MjI1MTc2NywzMTY4NzEwLjI4MTg2NzU5MzUsMC4wCisyNSxGcmkgMTggRmViIDExLDM3NDU2ODUuODMwMzUwOTUzLDM3MTkyNDYuNDk2NzkxMTkxLDM4NTQ4MDEuMDk5OTAxODQsMTExNDQ2NC4zOTc0NzkzMDU1LDE4OTExNjEuNTc2NjQzNzI5OCwzODUzMDM3Ljc5NjM3ODMzMTMsMzE2NTA2OC4zOTUwNDI2Mzc0LDAuMAorMjYsU2F0IDE5IEZlYiAxMSwzNzI5NDc0Ljg5MzE1MzEzNDcsMzcwOTYzNC4yMTMyMDM0OTc3LDM4NDU5MDkuOTM5NjY5NTE1LDExNTQ0MjAuNjI5MDM5NDgzNCwxOTE3Nzk0LjczNDgyOTE2NzYsMzg0NDQ5OC41OTMzMzc2NywzMTYwOTQxLjM4NjMzMTE3NjQsMC4wCisyNyxTdW4gMjAgRmViIDExLDM3MTM5NTAuNDc2MTQ5NDI0NCwzNjk5MDY0LjQ5MzU5MTg1MDYsMzgzNTYwNS43MDY2NjU5MjU3LDExOTM0MDUuNzE0NzY4MTM5MiwxOTQzMDQ3LjA3MzQwMzUxNjMsMzgzNDQ3Ni4yNTU2NzkzNDI0LDMxNTY2MzAuMzkyNzEzMjYzLDAuMAorMjgsTW9uIDIxIEZlYiAxMSwzNjk5MDcwLjA2ODIyMzY0OCwzNjg3OTAyLjkwOTU0NTg3NiwzODI0MzE3LjM1MzIwMDIwMTQsMTIzMTQ3OS42OTQ3Nzg5NzYsMTk2NzE0Mi40ODQxNjg3NjUsMzgyMzQxMy41OTQxNDYzMDIsMzE1MjMyOS4yNTQwMDY5ODg0LDAuMAorMjksVHVlIDIyIEZlYiAxMSwzNjg0NzgzLjk5NzQ2MzY3OSwzNjc2NDA3LjMyNzIxOTI5MSwzODEyMzU4LjkzNDAxMTcyNywxMjY4NjkwLjM4NTgyNDIyMSwxOTkwMjU1LjU5ODY5NDI2MzcsMzgxMTYzNS44MjE4NzE1OTMsMzE0ODE1Ny42NzM1MjA4NTU2LDAuMAorMzAsV2VkIDIzIEZlYiAxMSwzNjcxMDQxLjQyNzQ1MjMxNTYsMzY2NDc1OC4yOTI0MDgxMjA0LDM3OTk5NjAuNTg4Mzk5Nzc1LDEzMDUwNzYuNDA4OTY0NDM1OCwyMDEyNTIyLjk1NTk2MDgyMzUsMzc5OTM4Mi4wNDMyOTk1ODcsMzE0NDE4NC44MzY0Mzk2OTEsMC4wCiszMSxUaHUgMjQgRmViIDExLDM2NTc3OTMuNzczNzMyNTI5LDM2NTMwODEuMTE1NzU0MDYsMzc4NzI5MS4yMzMwODYwODAzLDEzNDA2NjkuNTY0NDM0MjMxNywyMDM0MDUxLjY5NzE0NzQ4OTUsMzc4NjgyOC4zNjc4MTMwMzcsMzE0MDQ0Ni4wODA3MDEzNDMsMC4wCiszMixGcmkgMjUgRmViIDExLDM2NDQ5OTYuNDczMjI1NTQxNCwzNjQxNDYxLjgzMTI2NjA4OCwzNzc0NDc1LjExNDAyODAxNiwxMzc1NDk2LjY1MzMyMDQ4MDEsMjA1NDkyNi4yODg3NTY0MzI3LDM3NzQxMDQuODA2NDQ4OTQ0NCwzMTM2OTU0LjU1NjMxNjQwOTMsMC4wCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0xhcmdlTWl4TWlnX1JLX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9TXzAuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9MYXJnZU1peE1pZ19SS19SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vU18wLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYzI0NDAxCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9MYXJnZU1peE1pZ19SS19SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vU18wLmNzdgpAQCAtMCwwICsxIEBACitpdGVyYXRpb24sdGltZSwKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvTGFyZ2VNaXhNaWdfUktfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL1NfMS5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0xhcmdlTWl4TWlnX1JLX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9TXzEuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJjMjQ0MDEKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0xhcmdlTWl4TWlnX1JLX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9TXzEuY3N2CkBAIC0wLDAgKzEgQEAKK2l0ZXJhdGlvbix0aW1lLApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9MYXJnZU1peE1pZ19SS19SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vU18yLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvTGFyZ2VNaXhNaWdfUktfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL1NfMi5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGQ5NWM1ZQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvTGFyZ2VNaXhNaWdfUktfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL1NfMi5jc3YKQEAgLTAsMCArMSwzMyBAQAoraXRlcmF0aW9uLHRpbWUsWUUtTi1HMTUwMDAxLFlFLVMtRzE2MDAwMSxZRS1TLUcxNjAwMDIsWUUtUy1HMTYwMDAzLFlFLVMtRzE2MDAwNCxZRS1TLUcxNjAwMDUsWUUtUy1HMTYwMDA2LFlFLVMtRzE2MDAwNworMSxUdWUgMjUgSmFuIDExLDEuNzgwMDgyNkU3LDczODYxNS4wLDY4MTA2OC4wLDEwODI4NS4wLDEwODc4MjIuMCwzOTQ2ODAuMCw1OTYyMjcuMCw0ODY2My4wCisyLFdlZCAyNiBKYW4gMTEsMS40NzEyMDU2NzM5Mjc2MTFFNywxNDgwMzYxLjA4Nzc2OTYxODcsMTQzOTA4My44NzMxNDkzODY4LDE1NDkxMS44NDk4OTY4MTU0NiwxMDM1ODkxLjc2OTEwMjI2MDgsMTIwNTI0Ny4xNTE4OTcyNTYsMTM3OTY2NS41OTkxNjAxNjAyLDQ4NjYzLjAKKzMsVGh1IDI3IEphbiAxMSwxLjIyOTgzMjE4ODcxNDA3NDVFNywyMDQ5MTg1LjI4Nzg5NDgwMzMsMjAyOTI3My4zMDQ0MDExMDYsMTk3Njk0LjkwNTQ1NDQxNDM0LDEwMjI5NDcuNjgxMjc0MTA5LDE4Mzg2OTQuMTYzMDg4MjMxOCwxOTU2MzMyLjM1ODMyNTM2Myw0ODY2My4wCis0LEZyaSAyOCBKYW4gMTEsMS4wMzcxNTA1MDY5NTg4MDVFNywyMTE5OTMzLjMyNjI5Mzg0NCwyNDIyMzc1LjUzMTU1OTI5NiwyMzc5NzUuMzA4MDU0NjkxNjgsMTAyOTMzMy4xMzYxNzM5OTQ3LDIyNzI0ODkuMjQzNTM3NTk1LDIyODIyNzMuMjcwNjEyMDI0Nyw0ODY2My4wCis1LFNhdCAyOSBKYW4gMTEsNjYyNTc0Ni4yMDI1OTA2NzgsMTc5OTg5LjQ1MjA1MTAzNzE3LDEwMTA4NTguODczNjU3MDMwOSwyNDI3OTAuMTczNzgzMjM5NTYsNjUwNzEyLjA3NjU2OTk3NTQsOTkyNzAyLjczNTI4MTkzMjYsNjYzNTIwLjc5NTg4NDc4NzIsNDg2NjMuMAorNixTdW4gMzAgSmFuIDExLDMwMDU3LjQwOTYyNDU4NTIwNSw0NzYuODg5NTEzMTg3ODIyMiw5MjIuMDY0MjA4Mzc1MTU0NCw2MDMxLjYzMjAzOTE5Mzc4NywxMDA4LjI3MTkwMTc4NTMzMzksOTQ4LjQ0MTM3NDE1NDE0NDMsNjY2LjAwMzI0MzEyMjcxMTMsNDg2NjMuMAorNyxNb24gMzEgSmFuIDExLDAuMDMzMjIzODk1MzY5NjczMDY2LDAuMDAxNjkxMzM0ODU0OTk3Mjc1MywwLjAwMjExNDczNTI5NDI4MTgzOCwwLjAxOTgwMDgyNTA3MDAyODkzNSwwLjAwMTUxODI4MjI1MjM3MzMyNzcsMC4wMDIxNDI5MDk2NzUxMzE1MTY0LDAuMDAxODc4NzkzMjkwOTEyODI3NCw0ODY2My4wCis4LFR1ZSAxIEZlYiAxMSwyLjQ3ODExNDI0NTE5NDI3MTdFLTksMy44MjAzMDY2OTg5MDE3NDlFLTEwLDMuNzY2NDYzNTEwOTY5MjI0NkUtMTAsMS44OTYxNTMwOTE1NjU3OTVFLTksMi42ODE4ODUzMDI0MDg4NDk3RS0xMCwzLjc3NjY0MDAyMTMyNjM5NUUtMTAsMy42Mjg1MTM1NTg2NDI2Mjg0RS0xMCw0ODY2My4wCis5LFdlZCAyIEZlYiAxMSwzLjY2ODE4MTY5OTc3NzMzNjZFLTE2LDEuNDY1ODI3NzUxMTkzODcyMkUtMTYsMS4xODQ1NjEyNTkyNzkwMDU0RS0xNiwyLjUxNDczOTE1MjAyNzA4NTZFLTE2LDcuNzE3ODExMTIzNDMyNjc5RS0xNywxLjE3NjY1NDU3MTIxNTk2MzJFLTE2LDEuMjE3MzM4NDEyNTM4Nzg3OUUtMTYsNDg2NjMuMAorMTAsVGh1IDMgRmViIDExLDQuNDc3Mjc5OTY4ODUzOTgyRS0yMiwzLjU5NzEyNzIwNTA2NjUwOUUtMjIsMi41NTgyMDA1ODQ5MDU2MDQ2RS0yMiwyLjM1NDQ1NzgyNTcyNjkyN0UtMjIsMS40NzgwMzY4MTM5Mzg2ODVFLTIyLDIuNTI0MDg0MDgwNzg2NjI0RS0yMiwyLjczODgyMDY5Mjc2MjA4NTZFLTIyLDQ4NjYzLjAKKzExLEZyaSA0IEZlYiAxMSw2LjY4NjIwOTM5MzA4ODI5RS0yNyw4LjE2OTA2MTY2NTY1NzQ3RS0yNyw1LjUxMjkwMDYwNDE5MDU1NTZFLTI3LDIuNTM4ODM5MjMwNzc4MDU0RS0yNywyLjg3MTU1MzAzMDU2MzQxNjRFLTI3LDUuNDIwNTM5MjAzMjk5OTU5RS0yNyw1Ljk5MTgxOTMwNzczOTg3NDVFLTI3LDQ4NjYzLjAKKzEyLFNhdCA1IEZlYiAxMSwxLjA3ODY1NTIwNTAxNjkxRS0zMCwxLjU5MTc0NDc2OTE3NTIwN0UtMzAsMS4wNzk2NDA4NjQzMzc3NTM2RS0zMCwyLjk3NzAyNDYwNzE2MjM5NkUtMzEsNS4yMTkxOTMzOTQ5OTI0NjlFLTMxLDEuMDYwNzQ1MzQzMDIzMDkwNEUtMzAsMS4xNjY2MDE5MjcxOTY2MzI3RS0zMCw0ODY2My4wCisxMyxTdW4gNiBGZWIgMTEsMS4zNTA5MTQ4Njc2OTI2MzI1RS0zMywyLjAxNjA5MzU3MDEyMzY1MjdFLTMzLDEuNDQ5MTQ5NDA2NzYzMjcwNUUtMzMsMi44NDM2NTcxMTEzNjM2MzZFLTM0LDYuNjc2NjA3OTIzMDM0MDIyRS0zNCwxLjQyNjI1MDcxMDQwNTY4MjVFLTMzLDEuNTIzNjg5NTIyNDQyNDM2MkUtMzMsNDg2NjMuMAorMTQsTW9uIDcgRmViIDExLDEuMDI0MTY5MDEwNDI4Nzk0M0UtMzUsMS4zMDc1NDAwODQ1ODcxNzc4RS0zNSwxLjA3Mzg5NTA0MTM0NDE5MDNFLTM1LDEuOTQzNTA4NDkyODM4MDY4RS0zNiw0LjkxNzg5MTk5NDAzNDU5NkUtMzYsMS4wNjI1MDU2MTkzNjY3MjIyRS0zNSwxLjA1OTk0Nzk4NzI3OTM1MDlFLTM1LDQ4NjYzLjAKKzE1LFR1ZSA4IEZlYiAxMSw5Ljc2MDc2MDA2OTM1Mjk3OEUtMzYsMS4zMTQxNzA5OTA4OTMzMDc5RS0zNSwxLjEzMDUzMjk1OTE4Njk4OUUtMzUsMy43MTI4NTc5Mzg2MjQzNTZFLTM2LDYuMzE1MDE2MzgyNTM0NzVFLTM2LDEuMTIzNDk5MzE1MDQ1MzQwOEUtMzUsMS4wODk4NjkwOTE4OTM1MDhFLTM1LDQ4NjYzLjAKKzE2LFdlZCA5IEZlYiAxMSwxLjc4MTI3ODY0MDUyMjUyODVFLTM2LDIuMjAzNDk3Mjg0NDI4ODFFLTM2LDIuMDY0NDU5ODAyNTk3ODY0M0UtMzYsMS4wOTg1NDQ4NjkyNDM3MDg1RS0zNiwxLjM1OTEwMzQ0MjY5MTYzMUUtMzYsMi4wNjAyNDE2NjE0MDIyNzdFLTM2LDEuOTEyMTc5MjA5MTE3NTExRS0zNiw0ODY2My4wCisxNyxUaHUgMTAgRmViIDExLDIuNzcxNTU3Njc3MzUzNDM2N0UtMzcsMi44NTc1ODgxMzI2Nzg1NzE2RS0zNywyLjgzNjYwODM2NzE4NjQ2MzZFLTM3LDEuNDc1NzA2Njc2Mzg3Nzc5RS0zNywxLjg4ODg5OTQzOTg1MDYyMDZFLTM3LDIuODMyODYxMTQzNzg0NTkyRS0zNywyLjU3ODgzODg2NDM1NzkxNThFLTM3LDQ4NjYzLjAKKzE4LEZyaSAxMSBGZWIgMTEsNi4zMzI0NzIxOTI3ODI3MDNFLTM4LDYuMjgyOTE5OTEyNDIwMDI2RS0zOCw2LjMwOTk0NjMyMTg2OTM2NEUtMzgsMi45NDA4MDIzNTQ3NTkyNTlFLTM4LDQuMDYwNzA2MjQ1OTk3ODczRS0zOCw2LjMwMjYxMzc2NjM0NDM2M0UtMzgsNS42OTk2MTczODkzOTk5OTlFLTM4LDQ4NjYzLjAKKzE5LFNhdCAxMiBGZWIgMTEsMi4xNDQxNTE1OTg5MjA5MTE4RS0zOCwyLjEwMjk3MDM5MjgxNjE5MjRFLTM4LDIuMTIzMTIwNTYzNDQ4ODMyMkUtMzgsOS4xMzE4NTk0MDk2NzI4ODdFLTM5LDEuMzIzNDYxOTI3MTI4ODUyNUUtMzgsMi4xMjEwNzQyNTg5NDEwNTM0RS0zOCwxLjkwNTExMzIwMzA4OTA3NjlFLTM4LDQ4NjYzLjAKKzIwLFN1biAxMyBGZWIgMTEsOS43ODgyOTczOTkxMjI5NjNFLTM5LDkuNTcxODExNDc5NzIyMDc3RS0zOSw5LjY5ODA2MTI4OTE2MTMzM0UtMzksMy45NTgyMzg2MzA3Mjk0NkUtMzksNS45MDIwMzgxMzMyNDc3MDNFLTM5LDkuNjkwNzUyODk1MDQ1MjEzRS0zOSw4LjY0NDEyOTY2NTk4NDk4M0UtMzksNDg2NjMuMAorMjEsTW9uIDE0IEZlYiAxMSw1LjU2NTM1NjM5NzE0NDczMzZFLTM5LDUuNDQ1ODc3ODQzNDQzOTY1RS0zOSw1LjUzMzIxODA3NjgyNTg3NEUtMzksMi4xODkwMTQ0NTI3NjY1NjRFLTM5LDMuMzEyMzgzMTcwMDE2MDkyRS0zOSw1LjUzMDEyODQ4NjYwMDYyNEUtMzksNC45MDA4MjY0MzkyMTI3MzZFLTM5LDQ4NjYzLjAKKzIyLFR1ZSAxNSBGZWIgMTEsMy43MTE5NTMyNzE3NjY2MjI2RS0zOSwzLjY0MDQzNTA3MjM1MDA4NkUtMzksMy43MDczODM2MzExODk5MzVFLTM5LDEuNDQ0Mzc0ODUzNDM5NzYzOEUtMzksMi4xOTY4NDIxNTg2NTI3OTM4RS0zOSwzLjcwNTkzMDEzNzI2MTU0MDNFLTM5LDMuMjY1MTI1NjAyOTIwNTc5RS0zOSw0ODY2My4wCisyMyxXZWQgMTYgRmViIDExLDIuNzc4NDQ0NTM0Nzg4OTY5RS0zOSwyLjczMjU1NzM3NTU5OTY2NjdFLTM5LDIuNzg4MTc5OTMwMjM0MjdFLTM5LDEuMDgyMjcxNTIyMzc1NzE2OEUtMzksMS42NDM1Mzk1NzUzMDkyNjk3RS0zOSwyLjc4NzQ1NzY5NDYxMDU2M0UtMzksMi40NDM2NDUyMTYxMDExNDgyRS0zOSw0ODY2My4wCisyNCxUaHUgMTcgRmViIDExLDIuMjU5NDk2NTk3OTg4NTg1N0UtMzksMi4yMjg0NjE1NjQzMTk0MjE0RS0zOSwyLjI3NzQ3ODM5ODg5NzE1NDZFLTM5LDguODgyMjE2MzQyMTYyODQxRS00MCwxLjM0MDYyMjIwODY0MTA0NjZFLTM5LDIuMjc3MTE4NjIxNzU4MDIxNUUtMzksMS45ODgwMDcwNDEyNTIwNzhFLTM5LDQ4NjYzLjAKKzI1LEZyaSAxOCBGZWIgMTEsMS45NDk4NDg1NjM5NTQyNzI1RS0zOSwxLjkyODA0MjEyNDEzODg2ODhFLTM5LDEuOTczMDc0NjUxNjQ1NDFFLTM5LDcuNzc3MzgxNjYyNDMxODA1RS00MCwxLjE2MzE3ODgwMDIwNjI3RS0zOSwxLjk3MjkwNzYzODUxMDM1OEUtMzksMS43MTY3NDQ0OTEzMTgxM0UtMzksNDg2NjMuMAorMjYsU2F0IDE5IEZlYiAxMSwxLjc1NTQwNDc3Nzk4NjM3OTdFLTM5LDEuNzM5NjY1MzU3NzY0Mzk3RS0zOSwxLjc4MjI0NDA0MzU3ODIwM0UtMzksNy4xMjkyMTcwNTc0NjE3ODZFLTQwLDEuMDU0NTI0MjY2OTMxNDc3NkUtMzksMS43ODIxODM3Mzg3MzQ4NzI2RS0zOSwxLjU0Njg3NjA3MTAyOTQ0OTNFLTM5LDQ4NjYzLjAKKzI3LFN1biAyMCBGZWIgMTEsMS42Mjg2NDY3NTQ0ODYxOTZFLTM5LDEuNjE3MDczOTgwNTI4ODIyNEUtMzksMS42NTgxMjE1NzIzMzUwMjZFLTM5LDYuNzQ4OTkyNzI2NjY5NzcwNUUtNDAsOS44NjIyOTYyOTcwNjYxMjdFLTQwLDEuNjU4MTIwOTA2NzExNjYxN0UtMzksMS40MzY1Njg2MzI3MTc3NzA2RS0zOSw0ODY2My4wCisyOCxNb24gMjEgRmViIDExLDEuNTQzNjQwNjQxMDc0ODI4RS0zOSwxLjUzNTAyNDQ0NzM0MTc2N0UtMzksMS41NzUxMDUwOTAwMjQyNEUtMzksNi41MzQ0MTA4OTIxMjUyOEUtNDAsOS40Mjg0MTc0NDcxNDIwNDlFLTQwLDEuNTc1MTM2ODc5NDAwMDU0NkUtMzksMS4zNjMwMTg0Mjg0MDI1MTQ3RS0zOSw0ODY2My4wCisyOSxUdWUgMjIgRmViIDExLDEuNDg1MzMwNTQ0ODE4NDU1RS0zOSwxLjQ3ODg2MjU2NTU5MTE0MzVFLTM5LDEuNTE4MzE5Mzk1NTcxNzIyRS0zOSw2LjQyNjA4ODgzMTQyNjEwMUUtNDAsOS4xNTQwMTYyNzgwNDQzMDZFLTQwLDEuNTE4MzY3NDExMTQ4NzE0N0UtMzksMS4zMTI5OTY2MTE0ODkzMTAyRS0zOSw0ODY2My4wCiszMCxXZWQgMjMgRmViIDExLDEuNDQ0NTQyMzMxNjk1NjA1MkUtMzksMS40Mzk2NjE0Mjc2NjExNDEyRS0zOSwxLjQ3ODY5NzM2NTY1NjIwNEUtMzksNi4zODc2MjY3MDI5NDQ5NDRFLTQwLDguOTg0NDQ3NzE5MDk0OTc2RS00MCwxLjQ3ODc1MTgwNDI0MzQzNTdFLTM5LDEuMjc4NDQ0ODgxODg2OTc0MkUtMzksNDg2NjMuMAorMzEsVGh1IDI0IEZlYiAxMSwxLjQxNTQ3NDUwOTc3MDAyODRFLTM5LDEuNDExNzc5NTA5MTQwNDg5NUUtMzksMS40NTA1MDcxNjAyNDM4ODkyRS0zOSw2LjM5NTc1NTAxOTI1NzQyODVFLTQwLDguODg1MDUxNjQ3NTAwMjAzRS00MCwxLjQ1MDU2MjE2NDAwOTA5MzVFLTM5LDEuMjU0MjY2NjYyMDAzOTY5N0UtMzksNDg2NjMuMAorMzIsRnJpIDI1IEZlYiAxMSwxLjM5NDM1NDkyNjM3OTUxMzVFLTM5LDEuMzkxNTUyNzIwNDA3NzIxMkUtMzksMS40MzAwMjYzOTc4MTQ3MzI4RS0zOSw2LjQzNTEyNTg1MDA5MjkzNjVFLTQwLDguODMzMTg4NjE5NTgzNDY3RS00MCwxLjQzMDA3ODYwMDIyNzgwOTRFLTM5LDEuMjM3MTQ1OTg3MzE5ODkzRS0zOSw0ODY2My4wCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0xhcmdlTWl4TWlnX1JLX1JlZmVyZW5jZS9UZXN0U0VJUi9ydW5wYXJhbWV0ZXJzLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvTGFyZ2VNaXhNaWdfUktfUmVmZXJlbmNlL1Rlc3RTRUlSL3J1bnBhcmFtZXRlcnMuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU4MTMyMTIKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0xhcmdlTWl4TWlnX1JLX1JlZmVyZW5jZS9UZXN0U0VJUi9ydW5wYXJhbWV0ZXJzLmNzdgpAQCAtMCwwICsxLDIgQEAKK2Rpc2Vhc2VOYW1lLHBvcHVsYXRpb25JZGVudGlmaWVyLHRpbWVQZXJpb2QsZnJlcXVlbmN5RGVwZW5kZW50LHJlZmVyZW5jZVBvcHVsYXRpb25EZW5zaXR5LHJvYWROZXR3b3JrSW5mZWN0aW91c1Byb3BvcnRpb24sY2hhcmFjdGVyaXN0aWNNaXhpbmdEaXN0YW5jZSx0cmFuc21pc3Npb25SYXRlLG5vbkxpbmVhcml0eUNvZWZmaWNpZW50LHJlY292ZXJ5UmF0ZSxpbmZlY3Rpb3VzTW9ydGFsaXR5UmF0ZSxpbW11bml0eUxvc3NSYXRlLGluY3ViYXRpb25SYXRlCitUZXN0U0VJUixodW1hbiw4NjQwMDAwMCx0cnVlLDEwMC4wLDAuMDEsMi4yNSw0NS4wLDEuMCwwLjQsMC4wLDAuMCwwLjQKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0xhcmdlTWl4TWlnX1JLX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL2h1bWFuL0JpcnRoc18wLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvTGFyZ2VNaXhNaWdfUktfUmVmZXJlbmNlL2F1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwvaHVtYW4vQmlydGhzXzAuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJjMjQ0MDEKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0xhcmdlTWl4TWlnX1JLX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL2h1bWFuL0JpcnRoc18wLmNzdgpAQCAtMCwwICsxIEBACitpdGVyYXRpb24sdGltZSwKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvTGFyZ2VNaXhNaWdfUktfUmVmZXJlbmNlL2F1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwvaHVtYW4vQmlydGhzXzEuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9MYXJnZU1peE1pZ19SS19SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9odW1hbi9CaXJ0aHNfMS5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmMyNDQwMQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvTGFyZ2VNaXhNaWdfUktfUmVmZXJlbmNlL2F1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwvaHVtYW4vQmlydGhzXzEuY3N2CkBAIC0wLDAgKzEgQEAKK2l0ZXJhdGlvbix0aW1lLApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9MYXJnZU1peE1pZ19SS19SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9odW1hbi9CaXJ0aHNfMi5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0xhcmdlTWl4TWlnX1JLX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL2h1bWFuL0JpcnRoc18yLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNmFlZjlkCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9MYXJnZU1peE1pZ19SS19SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9odW1hbi9CaXJ0aHNfMi5jc3YKQEAgLTAsMCArMSwzMyBAQAoraXRlcmF0aW9uLHRpbWUsWUUtTi1HMTUwMDAxLFlFLVMtRzE2MDAwMSxZRS1TLUcxNjAwMDIsWUUtUy1HMTYwMDAzLFlFLVMtRzE2MDAwNCxZRS1TLUcxNjAwMDUsWUUtUy1HMTYwMDA2LFlFLVMtRzE2MDAwNworMSxUdWUgMjUgSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzIsV2VkIDI2IEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCiszLFRodSAyNyBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorNCxGcmkgMjggSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzUsU2F0IDI5IEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCis2LFN1biAzMCBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorNyxNb24gMzEgSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzgsVHVlIDEgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzksV2VkIDIgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzEwLFRodSAzIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxMSxGcmkgNCBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTIsU2F0IDUgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzEzLFN1biA2IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxNCxNb24gNyBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTUsVHVlIDggRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzE2LFdlZCA5IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxNyxUaHUgMTAgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzE4LEZyaSAxMSBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTksU2F0IDEyIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyMCxTdW4gMTMgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzIxLE1vbiAxNCBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjIsVHVlIDE1IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyMyxXZWQgMTYgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzI0LFRodSAxNyBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjUsRnJpIDE4IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyNixTYXQgMTkgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzI3LFN1biAyMCBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjgsTW9uIDIxIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyOSxUdWUgMjIgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzMwLFdlZCAyMyBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMzEsVGh1IDI0IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCiszMixGcmkgMjUgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvTGFyZ2VNaXhNaWdfUktfUmVmZXJlbmNlL2F1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwvaHVtYW4vQ291bnRfMC5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0xhcmdlTWl4TWlnX1JLX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL2h1bWFuL0NvdW50XzAuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJjMjQ0MDEKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0xhcmdlTWl4TWlnX1JLX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL2h1bWFuL0NvdW50XzAuY3N2CkBAIC0wLDAgKzEgQEAKK2l0ZXJhdGlvbix0aW1lLApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9MYXJnZU1peE1pZ19SS19SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9odW1hbi9Db3VudF8xLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvTGFyZ2VNaXhNaWdfUktfUmVmZXJlbmNlL2F1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwvaHVtYW4vQ291bnRfMS5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmMyNDQwMQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvTGFyZ2VNaXhNaWdfUktfUmVmZXJlbmNlL2F1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwvaHVtYW4vQ291bnRfMS5jc3YKQEAgLTAsMCArMSBAQAoraXRlcmF0aW9uLHRpbWUsCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0xhcmdlTWl4TWlnX1JLX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL2h1bWFuL0NvdW50XzIuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9MYXJnZU1peE1pZ19SS19SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9odW1hbi9Db3VudF8yLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMzVjODFhCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9MYXJnZU1peE1pZ19SS19SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9odW1hbi9Db3VudF8yLmNzdgpAQCAtMCwwICsxLDMzIEBACitpdGVyYXRpb24sdGltZSxZRS1OLUcxNTAwMDEsWUUtUy1HMTYwMDAxLFlFLVMtRzE2MDAwMixZRS1TLUcxNjAwMDMsWUUtUy1HMTYwMDA0LFlFLVMtRzE2MDAwNSxZRS1TLUcxNjAwMDYsWUUtUy1HMTYwMDA3CisxLFR1ZSAyNSBKYW4gMTEsMS43ODAwODI2RTcsNzM4NjE2LjAsNjgxMDY4LjAsMTA4Mjg1LjAsMTA4NzgyMi4wLDM5NDY4MC4wLDU5NjIyNy4wLDQ4NjYzLjAKKzIsV2VkIDI2IEphbiAxMSwxLjQ3MTIwNjY5MjU5NDg4NjRFNywxNDgwNjEwLjY3MzUzMDAwOTYsMTQzOTA5Ni41NzIzNzU2MDksMTU0OTExLjg1ODU4ODk5NzQyLDEwMzU4OTIuNDA4MjMyNDM2OSwxMjA1MjU4LjM1ODYzMTY5NTIsMTM3OTY4Ny4yMDI2OTIzOSw0ODY2My4wCiszLFRodSAyNyBKYW4gMTEsMS4yMjk5MTY5MjIzMDI1NzYzRTcsMjA1OTY0Mi42MDI3Njc1MTE1LDIwMzAzMzMuMTQ1NDM5MDgyNSwxOTc2OTcuNzQ4MTY3NDE2MTcsMTAyMzA0My4zMjYxODE5MTYsMTgzOTY1Mi40OTUyODM3NzQ2LDE5NTc5ODUuNDU5MTM0NTM4LDQ4NjYzLjAKKzQsRnJpIDI4IEphbiAxMSwxLjA0MjQ5MjA1NDMwNTk3MzNFNywyNTA3MTIxLjEzMzYyMTE2NCwyNDg4MzczLjAwNjgyNzM2MDUsMjM4MzYyLjkyNzM2OTIwMzQyLDEwMzc2NjUuMTAwMzE4MTk0LDIzMzI5NjMuMTU1Mzk5MjUxMywyMzc4MTE4LjEzMzQwNTA5NjQsNDg2NjMuMAorNSxTYXQgMjkgSmFuIDExLDg5NzkwNjkuNzYxMTIxMTA0LDI4NDg3MTAuODA5NTU2NDI2NSwyODQwMTU3LjkxMTA4NjY4MywyNzgxMzQuNjI3MzY4NDc2NjUsMTA3MDgxNy44MTM2MDgwNjM5LDI3MTMzOTIuMTEyNTMxMDM1NywyNjc3MjQwLjk2NDcyODIxMTUsNDg2NjMuMAorNixTdW4gMzAgSmFuIDExLDc4NjgzMDcuMTIzOTk4MDMzLDMxMDY1ODIuMjQ3OTg0Nzc0LDMxMDg0NzUuODY5OTU5NDY4NSwzMTc4NTAuNDA0ODgxNzQ0OTQsMTExNTUxNC4zODkzNDg3MjMyLDMwMDQ4NjMuNzIwNzczNDI0LDI4ODU5MzAuMjQzMDUzODM0LDQ4NjYzLjAKKzcsTW9uIDMxIEphbiAxMSw3MDA0NTEwLjQwMzc1NDYzNywzMzAyMjI0LjU3ODE4MTk0NiwzMzE0OTQ2LjQ0OTM0MzYwNywzNTc5NzIuODE1OTM5OTI1NjcsMTE2NjM4OC4xNjExMTg4NDIsMzIzMDIwNS44ODc5OTk4NjYsMzAzMTI3NS43MDM2NjExNzczLDQ4NjYzLjAKKzgsVHVlIDEgRmViIDExLDYzMjkxNzAuNjcwMzUyMjQ1LDM0NTAwOTkuNzUyNTQwMjg3LDM0NzM5MzIuODQ2Nzk4NzQ4MiwzOTg3MDAuMjA5NjQyODEzMiwxMjIwMTY0LjMzNTAyMzgxNDMsMzQwNDYxOC44NDY3Njk0NjQ3LDMxMzA4MzcuMzM4ODcyNjI5LDQ4NjYzLjAKKzksV2VkIDIgRmViIDExLDU3OTk2NDkuMTk1MDM4MTEsMzU2MDg4MC42NzM5Mjk2ODY3LDM1OTU5MjEuODcyNjg4NTUxNCw0NDAwODkuMDUzNzM1OTExLDEyNzQ3MDQuMTk5MjkxOTIzMywzNTM5MjI4LjI0Mjg1MDYyMDgsMzE5NzA1MC43NjI0NjUxOTcsNDg2NjMuMAorMTAsVGh1IDMgRmViIDExLDUzODMzMjMuNzgyMTQ0MDYyLDM2NDI4MjguODcwMTIwMTk0MywzNjg4OTY0LjYwNjAyMTM2NCw0ODIxMDcuNjIzODEwNjcyNSwxMzI4NjAzLjM0MTU5OTY5NTYsMzY0MjU5OS44Mzg3NzE5OTU2LDMyMzkwOTUuOTM3NTMyMDE0LDQ4NjYzLjAKKzExLEZyaSA0IEZlYiAxMSw1MDU1MDIwLjA1Mjc0NDEzMjUsMzcwMjM4NS42MDA3NTA3MTMsMzc1OTMwMi44MTYyMTEzMzc3LDUyNDY3MC45MTAwNTU5MDcsMTM4MDk3MS45Njk3MDE2NDg3LDM3MjEzOTMuNzk2MjgzMjMyNSwzMjYzNzc4Ljg1NDI1MzAyOCw0ODY2My4wCisxMixTYXQgNSBGZWIgMTEsNDc5NTIyMS4yNTgzMTM4NjgsMzc0NDU4OC41MDQ3ODE4MDQ1LDM4MTE4MDMuOTk4NzY4NTg1Nyw1Njc2NjQuNDEyNTY2MTQ3OSwxNDMxMjgzLjMwMTI5MzU1NzcsMzc4MDgxOS4zOTA1ODIzNDM2LDMyNzYxNDMuMTMzNjkzNjkxLDQ4NjYzLjAKKzEzLFN1biA2IEZlYiAxMSw0NTg3OTI0LjIyNzAzOTM5NiwzNzczNTg4LjI5MTU5Mzg5MzQsMzg1MDUwMC4yNjY0MDc5ODUyLDYxMDk1Ny4wNzc4ODE4NDMyLDE0NzkzMTMuOTk2NTkzMzgxNywzODI1MjA5LjIwOTA5MDkxNjQsMzI4MDAzMC45MzEzOTI1ODQsNDg2NjMuMAorMTQsTW9uIDcgRmViIDExLDQ0MTk4MzcuMDc3MTY3MDY3LDM3OTI4MjUuNTYwNTk4MTczNiwzODc4Nzg4LjA3NjUzMDUwODcsNjU0NDIyLjc3MjU2NTYyMTYsMTUyNTExMy45OTQyNzM2NzE2LDM4NTgyMzAuMjU2NjkxODU4NiwzMjc4MzA2LjI2MjE3MzA5OSw0ODY2My4wCisxNSxUdWUgOCBGZWIgMTEsNDI3NjI3Ny4xNjk1MzMzMzYsMzgwNjAxOC41MzIxMDY2NjU0LDM5MDA1MTQuNTA5NzczNzg3LDY5Nzk1Ny4zMzM2NTEwMjQxLDE1NjkyMzkuMDQ2NTgzMjQwNiwzODg0MDY4LjI1MzkwMjg2NzQsMzI3MzQ0OS4xNTQ0NDkwNzk3LDQ4NjYzLjAKKzE2LFdlZCA5IEZlYiAxMSw0MTY0MjI0LjI1ODEzODI4ODMsMzgxMTUzMC4yODAwNjgyODU4LDM5MTM3NTUuNTMxMDg0ODYyNSw3NDE1MjEuNDE5Mjk3NjM1LDE2MTA4ODUuNDY2MzI5OTIxNywzOTAwNTk4LjUyNjM4ODEyNywzMjY1MDA4LjUxODY5Mjg4LDQ4NjYzLjAKKzE3LFRodSAxMCBGZWIgMTEsNDA3NTkyNC4wNDkzMjIzMzgzLDM4MTE0MDMuNTY1NzY5ODM2MywzOTIwNTA5Ljg1NDY1MTg2ODMsNzg0OTg5LjYyMTY0OTI0OTMsMTY1MDEyMy40MTY1OTY0NTUzLDM5MDk5ODQuMjUwODk0NDc5NSwzMjU0NTg5LjI0MTExNTc3MjYsNDg2NjMuMAorMTgsRnJpIDExIEZlYiAxMSw0MDA1NTYzLjU4NTA3OTQ2ODMsMzgwNzE3My4yMjI0MTUwOTIsMzkyMjI5OC45Njk3NTM0MjEsODI4MjQ2LjMxMTM5NjYwOTYsMTY4NzA5MC4wMTgwNzUwNjA4LDM5MTM4NzguNDg2NzQ3NTEsMzI0MzI3My40MDY1MzI4Mzg1LDQ4NjYzLjAKKzE5LFNhdCAxMiBGZWIgMTEsMzk0ODc4Mi4wNzIzMzYwMTc2LDM3OTk5ODkuMzAwMzM3NzM1NiwzOTIwMjg0Ljg4OTAwMjUxMTMsODcxMTg4LjQ5NjczMDUzMjEsMTcyMTk1Ny4wMDIxNjQwMjcyLDM5MTM1NDguNTAyNTk3NzgyMywzMjMxNzczLjczNjgzMTM5MzYsNDg2NjMuMAorMjAsU3VuIDEzIEZlYiAxMSwzOTAyMzA1LjQ3OTMwNzI4NTUsMzc5MDcxMC45MDAzMDg1NzM2LDM5MTUzNTguMTQ5NDE1NzExNCw5MTM3MjYuOTIyMDAyMjA2OSwxNzU0OTA5LjQxMzYyNTcyMDcsMzkwOTk2OS4wNDAyOTE5MjgsMzIyMDU0NC4wOTUwNDg1NzMzLDQ4NjYzLjAKKzIxLE1vbiAxNCBGZWIgMTEsMzg2MzY3My40OTI2OTkwNjc2LDM3Nzk5NzcuNTU4NDUwMDM0LDM5MDgyMDMuNjk3OTk4NzQ0LDk1NTc4Ni4wNDY1ODMzODI2LDE3ODYxMzIuMDIzMTE1Njg3NSwzOTAzODkyLjQxMDY5OTcxNzIsMzIwOTg1OC43NzA0NTMzNjY1LDQ4NjYzLjAKKzIyLFR1ZSAxNSBGZWIgMTEsMzgzMTAzNS40MTYwMzkzNDcsMzc2ODI2My40NjUzNTI1NzIsMzg5OTM1MC4zMTYzOTEzNzMsOTk3MzAzLjM0NTQwOTk5NzksMTgxNTgwMS4wNjE2NTU5NTYzLDM4OTU5MDEuMjg2NTUyMTUxNywzMTk5ODY5LjEwODU5ODYwMSw0ODY2My4wCisyMyxXZWQgMTYgRmViIDExLDM4MDI5OTcuNTQxNjc2MjEyNiwzNzU1OTE4LjU3ODY2MTEzMSwzODg5MjA3Ljc3NzMyOTg3MDUsMTAzODIyOC4yMzEyMjIyOTU4LDE4NDQwNzkuNTc4MTkwNzkwNywzODg2NDQ4LjU1MzQ1ODQ5MzcsMzE5MDY0My43Mzk0NjEyMDUsNDg2NjMuMAorMjQsVGh1IDE3IEZlYiAxMSwzNzc4NTA4Ljk2NTc4NjUwNSwzNzQzMTk5Ljc0MzUyNTE5NCwzODc4MDk0Ljg0NDQyMDE4MTYsMTA3ODUyMC43OTg1NzA3MjA1LDE4NzExMTUuMjE4OTA1ODg2NiwzODc1ODg3LjQ2NTMyMzA4MDMsMzE4MjE5Ni45NjM0Njg0MzEsNDg2NjMuMAorMjUsRnJpIDE4IEZlYiAxMSwzNzU2Nzc2LjEyMzQ2NjA0ODQsMzczMDI5NC4yMDY3NzAwNjUyLDM4NjYyNjAuNDI2NDg4ODkzLDExMTgxNTAuNTE5NTg3NDc4OCwxODk3MDM5LjU4NTExNzI1NTYsMzg2NDQ5NC41MjMyMTEyMTI0LDMxNzQ1MDguNjE1MzU5MDQ1Niw0ODY2My4wCisyNixTYXQgMTkgRmViIDExLDM3MzcxOTguNzg3MzY0Mjk5NCwzNzE3MzM3LjM0OTg0MjMxMjMsMzg1Mzg5OS42MDUxODc5MjU1LDExNTcwOTQuOTcyODYzOTY3OCwxOTIxOTY4LjU4MzM1Mjg1NjMsMzg1MjQ4Ni44ODI1NjU3ODEsMzE2NzUzNy44MTg4MjI4NTcsNDg2NjMuMAorMjcsU3VuIDIwIEZlYiAxMSwzNzE5MzIyLjExMjcxMjM4MzMsMzcwNDQyNi4wMzQ1NzA4OTMsMzg0MTE2NS44MTUzOTgzNTY0LDExOTUzMzguNjUzMzg4NDEyMiwxOTQ2MDAzLjM2NDYwMTkxMiwzODQwMDM1LjYzNzMwMDY0MSwzMTYxMjMyLjM4MjAyNzQwMiw0ODY2My4wCisyOCxNb24gMjEgRmViIDExLDM3MDI4MDAuNjgzNjM0NzcxLDM2OTE2MjguNjI1MDI4NjUzNSwzODI4MTgwLjEzMjMxNzc5ODcsMTIzMjg3MS44ODg5NDkwODcxLDE5NjkyMzEuNTc5OTEyNTExNCwzODI3Mjc1Ljk4OTgzOTYyNjUsMzE1NTUzNS4xMDAzMTc1NTEzLDQ4NjYzLjAKKzI5LFR1ZSAyMiBGZWIgMTEsMzY4NzM3MS41MzkyODI5OTg1LDM2Nzg5OTIuNDk1MzI4NDEsMzgxNTAzOC4zNzczOTUyODE2LDEyNjk2ODkuODczNDk3MjU4NCwxOTkxNzI4Ljc3MTM4NDU5MjIsMzgxNDMxNS4wNjM0MTI3NDM2LDMxNTAzODcuODc5Njk4NzE1LDQ4NjYzLjAKKzMwLFdlZCAyMyBGZWIgMTEsMzY3MjgzMy45MjIyMTgxNTYsMzY2NjU0OS42MzkyNTIyMTUsMzgwMTgxNi41NzU2ODcxOTcsMTMwNTc5MS44MTgzOTE2MjUsMjAxMzU1OS43ODE5MDU5MzE3LDM4MDEyMzcuOTI0NTAxMTY2NywzMTQ1NzM0LjMzODA0MzcwOCw0ODY2My4wCiszMSxUaHUgMjQgRmViIDExLDM2NTkwMzQuMDYxNjQ4NzM5LDM2NTQzMjAuODQ5NDI0MjgzNSwzNzg4NTc1LjE2MzYzMjY5NDYsMTM0MTE4MC4yMTY1NjczNDAzLDIwMzQ3ODAuMTExNTM3MTA1MiwzNzg4MTEyLjI0MjY4Mzg3MDMsMzE0MTUyMS4zNTQ1MDU5NjcsNDg2NjMuMAorMzIsRnJpIDI1IEZlYiAxMSwzNjQ1ODUzLjcyOTgzMTMzMiwzNjQyMzE4LjgyMDY2Mjk5LDM3NzUzNjIuMjQ2Nzc1NjM1LDEzNzU4NjAuMjExMzE1ODI4NiwyMDU1NDM3LjE3ODkzNzA2LDM3NzQ5OTEuOTEwMDE2NTc1NCwzMTM3Njk5LjkwMjQ2MDU3ODQsNDg2NjMuMApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9MYXJnZU1peE1pZ19SS19SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9odW1hbi9EZWF0aHNfMC5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0xhcmdlTWl4TWlnX1JLX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL2h1bWFuL0RlYXRoc18wLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYzI0NDAxCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9MYXJnZU1peE1pZ19SS19SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9odW1hbi9EZWF0aHNfMC5jc3YKQEAgLTAsMCArMSBAQAoraXRlcmF0aW9uLHRpbWUsCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0xhcmdlTWl4TWlnX1JLX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL2h1bWFuL0RlYXRoc18xLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvTGFyZ2VNaXhNaWdfUktfUmVmZXJlbmNlL2F1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwvaHVtYW4vRGVhdGhzXzEuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJjMjQ0MDEKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0xhcmdlTWl4TWlnX1JLX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL2h1bWFuL0RlYXRoc18xLmNzdgpAQCAtMCwwICsxIEBACitpdGVyYXRpb24sdGltZSwKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvTGFyZ2VNaXhNaWdfUktfUmVmZXJlbmNlL2F1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwvaHVtYW4vRGVhdGhzXzIuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9MYXJnZU1peE1pZ19SS19SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9odW1hbi9EZWF0aHNfMi5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDZhZWY5ZAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvTGFyZ2VNaXhNaWdfUktfUmVmZXJlbmNlL2F1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwvaHVtYW4vRGVhdGhzXzIuY3N2CkBAIC0wLDAgKzEsMzMgQEAKK2l0ZXJhdGlvbix0aW1lLFlFLU4tRzE1MDAwMSxZRS1TLUcxNjAwMDEsWUUtUy1HMTYwMDAyLFlFLVMtRzE2MDAwMyxZRS1TLUcxNjAwMDQsWUUtUy1HMTYwMDA1LFlFLVMtRzE2MDAwNixZRS1TLUcxNjAwMDcKKzEsVHVlIDI1IEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyLFdlZCAyNiBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMyxUaHUgMjcgSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzQsRnJpIDI4IEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCis1LFNhdCAyOSBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorNixTdW4gMzAgSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzcsTW9uIDMxIEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCis4LFR1ZSAxIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCis5LFdlZCAyIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxMCxUaHUgMyBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTEsRnJpIDQgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzEyLFNhdCA1IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxMyxTdW4gNiBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTQsTW9uIDcgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzE1LFR1ZSA4IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxNixXZWQgOSBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTcsVGh1IDEwIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxOCxGcmkgMTEgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzE5LFNhdCAxMiBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjAsU3VuIDEzIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyMSxNb24gMTQgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzIyLFR1ZSAxNSBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjMsV2VkIDE2IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyNCxUaHUgMTcgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzI1LEZyaSAxOCBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjYsU2F0IDE5IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyNyxTdW4gMjAgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzI4LE1vbiAyMSBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjksVHVlIDIyIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCiszMCxXZWQgMjMgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzMxLFRodSAyNCBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMzIsRnJpIDI1IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0xhcmdlTWl4TWlnX1JLX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL2h1bWFuL0RlbnNpdHlfMC5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0xhcmdlTWl4TWlnX1JLX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL2h1bWFuL0RlbnNpdHlfMC5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmMyNDQwMQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvTGFyZ2VNaXhNaWdfUktfUmVmZXJlbmNlL2F1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwvaHVtYW4vRGVuc2l0eV8wLmNzdgpAQCAtMCwwICsxIEBACitpdGVyYXRpb24sdGltZSwKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvTGFyZ2VNaXhNaWdfUktfUmVmZXJlbmNlL2F1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwvaHVtYW4vRGVuc2l0eV8xLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvTGFyZ2VNaXhNaWdfUktfUmVmZXJlbmNlL2F1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwvaHVtYW4vRGVuc2l0eV8xLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYzI0NDAxCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9MYXJnZU1peE1pZ19SS19SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9odW1hbi9EZW5zaXR5XzEuY3N2CkBAIC0wLDAgKzEgQEAKK2l0ZXJhdGlvbix0aW1lLApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9MYXJnZU1peE1pZ19SS19SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9odW1hbi9EZW5zaXR5XzIuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9MYXJnZU1peE1pZ19SS19SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9odW1hbi9EZW5zaXR5XzIuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlhZTZjMDIKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0xhcmdlTWl4TWlnX1JLX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL2h1bWFuL0RlbnNpdHlfMi5jc3YKQEAgLTAsMCArMSwzMyBAQAoraXRlcmF0aW9uLHRpbWUsWUUtTi1HMTUwMDAxLFlFLVMtRzE2MDAwMSxZRS1TLUcxNjAwMDIsWUUtUy1HMTYwMDAzLFlFLVMtRzE2MDAwNCxZRS1TLUcxNjAwMDUsWUUtUy1HMTYwMDA2LFlFLVMtRzE2MDAwNworMSxUdWUgMjUgSmFuIDExLDEzNi43MDUyMzQxODUxNjcxLDQwLjA2OTAwNDQyNjY5OTA3NCwxMzQuMjQ4MjA2MjYwMzQ4NSwxLjQ1MDIxNzY5NjcxMzg1NzYsMTAuMDQ0NzM3NzkyMjE1MzQ3LDYwLjgyNjY4MDYzOTg5MTUsOC40OTEzNTA5NDk1MDEzOTQsMTIuNzM0NjcxNDQ2ODg5ODAyCisyLFdlZCAyNiBKYW4gMTEsMTEyLjk4NDQ1MTA4NDQ0MzU1LDgwLjMyMTI5NzcxMzQxNTE2LDI4My42NjY0Mzc4MjUzNTg1NywyLjA3NDY3MjU2NTUxMzIxNjgsOS41NjUyMjk5OTMxODAyNTEsMTg1Ljc1MDE0MDAzNTA5MTU2LDE5LjY0OTI0MTM3NzE4ODQ2NywxMi43MzQ2NzE0NDY4ODk4MDIKKzMsVGh1IDI3IEphbiAxMSw5NC40NTQwODkzMTY3OTU1NiwxMTEuNzMzMDYzNjg2Mjg1NDYsNDAwLjIwNzU4OTk3MDY0NjI3LDIuNjQ3Njg2ODcyNTM4ODI0LDkuNDQ2NTg0MDU2NTU4MTM2LDI4My41MjA3MTI1MjQwODQ0NCwyNy44ODUyNTQ1ODg0OTA1OTMsMTIuNzM0NjcxNDQ2ODg5ODAyCis0LEZyaSAyOCBKYW4gMTEsODAuMDYwMzk3NDMzMjg0MjgsMTM2LjAwODIyMDUxMTUyMDUsNDkwLjQ5Mzc3MjUzNTU1MTYsMy4xOTIyOTkzNTM2NjI0NTMsOS41ODE1OTg2ODg3ODI4MSwzNTkuNTQ4MDAwNDAwNTg3MzQsMzMuODY4NzAzODE2MDIyODQsMTIuNzM0NjcxNDQ2ODg5ODAyCis1LFNhdCAyOSBKYW4gMTEsNjguOTU2Njc4NDQwNTk2NjgsMTU0LjUzOTAzNzkyODM3MTM5LDU1OS44MzU1ODkxOTE1NzIsMy43MjQ5NDU4MjUxNzEzNDY4LDkuODg3NzI0NDI2MzU0OTgyLDQxOC4xNzgzNjA4OTkyNzQ5NCwzOC4xMjg3NTM5OTQ1MTcwNywxMi43MzQ2NzE0NDY4ODk4MDIKKzYsU3VuIDMwIEphbiAxMSw2MC40MjYzNDAyMTc0MTI5MywxNjguNTI4MjQ0NTA5MTk5Miw2MTIuNzI0ODgxNzIzNDYyMiw0LjI1Njg0MzM0OTE5MTIyLDEwLjMwMDQ0Mzk1NTQwMDAwNiw0NjMuMDk4OTMwNTUxMDMxNjMsNDEuMTAwODY2Nzk5OTc3MTI2LDEyLjczNDY3MTQ0Njg4OTgwMgorNyxNb24gMzEgSmFuIDExLDUzLjc5MjYyOTM0NzUyMTEyLDE3OS4xNDE1OTg5Mzc5MTQ4LDY1My40MjMxNzQ1OTI2ODQ1LDQuNzk0MTg2NzUzNjQ2MTQzNiwxMC43NzAyMDI1MTY5NDAyNjgsNDk3LjgyNzg2NTQ4NzE0MTQsNDMuMTcwODQ5MDYzMzMzLDEyLjczNDY3MTQ0Njg4OTgwMgorOCxUdWUgMSBGZWIgMTEsNDguNjA2MjE0MDQyNDQ5MTksMTg3LjE2MzY0NDI0NDIyMTgsNjg0Ljc2MTY1ODY3NjcyMjUsNS4zMzk2MzI0NDg3MDA0OTIsMTEuMjY2NzYxMjk4MDEyOTI1LDUyNC43MDc3NzE1OTQ3MTQ1LDQ0LjU4ODc4NjgzODE4NDk4LDEyLjczNDY3MTQ0Njg4OTgwMgorOSxXZWQgMiBGZWIgMTEsNDQuNTM5NjQxMTA0MjY2NzcsMTkzLjE3MzM3MjIwNzc5OTIsNzA4LjgwNzQzMzcwODIyMiw1Ljg5MzkzNjY4NDI4NTY3MiwxMS43NzAzNzE4NDgwODEwMTYsNTQ1LjQ1MzI5MzkwNzg3MjMsNDUuNTMxNzg1NzU4NTUwMDMsMTIuNzM0NjcxNDQ2ODg5ODAyCisxMCxUaHUgMyBGZWIgMTEsNDEuMzQyMzgxNDM0MDE3OTIsMTk3LjYxODk2MDQ5MTcyMTM0LDcyNy4xNDc0ODIwNjY4MTQ3LDYuNDU2Njc0NTg4MDg2MTEsMTIuMjY4MDY2MDk1NTgzNzA3LDU2MS4zODQ1NTczNDI0MTUyLDQ2LjEzMDU4NTEwMzgwODc1LDEyLjczNDY3MTQ0Njg4OTgwMgorMTEsRnJpIDQgRmViIDExLDM4LjgyMTEwMzAyNzUyODE4LDIwMC44NDk4Mzk0NjQzODY0LDc0MS4wMTIxNDU0MzMxMjY2LDcuMDI2NzA3NjU3Njk5OTY3LDEyLjc1MTYyNzg3MTE1MTkxNCw1NzMuNTI4MDAyMzg2MjIwOCw0Ni40ODIxMTQ0ODQ5NTk2MjQsMTIuNzM0NjcxNDQ2ODg5ODAyCisxMixTYXQgNSBGZWIgMTEsMzYuODI1OTIyODU4MTU3NzYsMjAzLjEzOTI5NDgwODQ5MTMsNzUxLjM2MDg3NjUyMTQ0MzMsNy42MDI1MDI0NDE2ODcyNTEsMTMuMjE2MTkyOTY4OTUwOTM3LDU4Mi42ODY0NjQwNDE5MTEsNDYuNjU4MjA0MTg4OTk1NzksMTIuNzM0NjcxNDQ2ODg5ODAyCisxMyxTdW4gNiBGZWIgMTEsMzUuMjMzOTQxMTU5ODc3NzY2LDIwNC43MTI0OTczNzQwMjg2LDc1OC45ODg0NjIxOTUwNjE0LDguMTgyMzAzNzkzNDc4NjUsMTMuNjU5Njk5MTEyNjYyNDI3LDU4OS41Mjc2NjUzMDM5MDQ4LDQ2LjcxMzU3MzQ2MDU2ODQ3NiwxMi43MzQ2NzE0NDY4ODk4MDIKKzE0LE1vbiA3IEZlYiAxMSwzMy45NDMwODAwOTYwODE0LDIwNS43NTYwOTU0MjM0NzUyNyw3NjQuNTY0MzkyNTk4NDYwNCw4Ljc2NDQyMjQ1ODM5NDE2OSwxNC4wODI2MDc0MjYzMjI3MzUsNTk0LjYxNjc1MTk0ODMxODMsNDYuNjg5MDExMDUxMjYwNTMsMTIuNzM0NjcxNDQ2ODg5ODAyCisxNSxUdWUgOCBGZWIgMTEsMzIuODQwNTgxMjEyNDUyNjIsMjA2LjQ3MTc5NzgwOTc5NjU2LDc2OC44NDY5ODIxMzYyODIyLDkuMzQ3NDYzNDIzNDgzNzEyLDE0LjQ5MDA0OTYxODYyNzU0OCw1OTguNTk4ODEyMzYzNjYzNiw0Ni42MTk4MzcwNTE2MTkxNCwxMi43MzQ2NzE0NDY4ODk4MDIKKzE2LFdlZCA5IEZlYiAxMSwzMS45ODAwNDcwMTYyNjQ3NzMsMjA2Ljc3MDgwMzMxOTM4ODg1LDc3MS40NTY5NzYwODcwNTgsOS45MzA4OTk3OTkyMTMyNSwxNC44NzQ2MDQ1OTc2MDM4NDMsNjAxLjE0NjM5OTI4MzA2OTcsNDYuNDk5NjI3MTMwODI5MjQsMTIuNzM0NjcxNDQ2ODg5ODAyCisxNyxUaHUgMTAgRmViIDExLDMxLjMwMTkyNjc1Nzk4MTA1NCwyMDYuNzYzOTI5MjI1NDI3Myw3NzIuNzg4MzQ5NDkzNzg0NywxMC41MTMwNTIwNDgzMjExNiwxNS4yMzY5MjAyMzU1NzcwNzQsNjAyLjU5Mjg5MzgyODMyNjUsNDYuMzUxMjM3NzcxNDk1NDg0LDEyLjczNDY3MTQ0Njg4OTgwMgorMTgsRnJpIDExIEZlYiAxMSwzMC43NjE1Nzg1ODg2NDg5ODcsMjA2LjUzNDQzODMzMDgyNDgsNzczLjE0MTAwOTU3MDU3MTEsMTEuMDkyMzcxNTkzNzE0MTc4LDE1LjU3ODI2MjY3ODQ3ODQ5OSw2MDMuMTkzMDU5NjM0OTc2Niw0Ni4xOTAwNzk4MTg2ODUyMywxMi43MzQ2NzE0NDY4ODk4MDIKKzE5LFNhdCAxMiBGZWIgMTEsMzAuMzI1NTEyODY5MTcxNjE4LDIwNi4xNDQ3MTk0NDM3MTg4Niw3NzIuNzQ0MDA1NTU5MTE2OCwxMS42Njc0NzkxMDcyODMxOTIsMTUuOTAwMjE3NjYwODAwMDY1LDYwMy4xNDIyMDM2NDkxMzU3LDQ2LjAyNjMwMzcyMTI2MjA3NCwxMi43MzQ2NzE0NDY4ODk4MDIKKzIwLFN1biAxMyBGZWIgMTEsMjkuOTY4NTg1OTc1MjEwNTQ0LDIwNS42NDEzNzc3MTgzMjgxNiw3NzEuNzcyODc0OTkzMjQxMiwxMi4yMzcxNzkyMjM4MjEyNDIsMTYuMjA0NDkzODUwMDYwNzE4LDYwMi41OTA1NDk2MjQyNTMsNDUuODY2MzczMzA5ODMzMDE2LDEyLjczNDY3MTQ0Njg4OTgwMgorMjEsTW9uIDE0IEZlYiAxMSwyOS42NzE5MDM0MDY4NjcxMDYsMjA1LjA1OTEwNzE5ODI3MDIzLDc3MC4zNjI2MzA2ODY0OTg1LDEyLjgwMDQ2MDI1NzkwNjQyMywxNi40OTI3OTczODI3MzAwODIsNjAxLjY1NDA0MTA0MTE2NzEsNDUuNzE0MTk0OTU5NzI5MzgsMTIuNzM0NjcxNDQ2ODg5ODAyCisyMixUdWUgMTUgRmViIDExLDI5LjQyMTI1MjM0NjQ1NDQ4NywyMDQuNDIzNjMyMTM2NTY0MzIsNzY4LjYxNzUwMzAzMzg1OSwxMy4zNTY0ODQ4MzYzNjI0ODcsMTYuNzY2NzU1NTQxOTU0NzgzLDYwMC40MjI0NzczNTI5MTkxLDQ1LjU3MTkyNDEwNTM4MDg1LDEyLjczNDY3MTQ0Njg4OTgwMgorMjMsV2VkIDE2IEZlYiAxMSwyOS4yMDU5Mjk1MTkyNTE2LDIwMy43NTM5MzczMDI1OTU5LDc2Ni42MTgyNjQwNzk4NDUyLDEzLjkwNDU3NTQ2NDI1MTc0NCwxNy4wMjc4NzM4OTAxMjY4NTIsNTk4Ljk2NTY1NTY4MjA0MTMsNDUuNDQwNTM4MTYxNzk4NDEsMTIuNzM0NjcxNDQ2ODg5ODAyCisyNCxUaHUgMTcgRmViIDExLDI5LjAxNzg2NDI4NTU0NDgyLDIwMy4wNjM5NTYyMjgwMzk3OSw3NjQuNDI3NzQ2NjcyNzQ3MywxNC40NDQxOTc3MDM4NDgzNjksMTcuMjc3NTE1NzYzNTQ3MDI2LDU5Ny4zMzgwMTgyNjYzNTY0LDQ1LjMyMDI0MDc5MjkzMzA4NSwxMi43MzQ2NzE0NDY4ODk4MDIKKzI1LEZyaSAxOCBGZWIgMTEsMjguODUwOTYyMjk0NjUyNTMsMjAyLjM2Mzg0NjgyMTU2ODUzLDc2Mi4wOTUwMTQyODg1OTM3LDE0Ljk3NDk0MjcwNzYyODU0MywxNy41MTY4OTYzNDMyOTQ5Nyw1OTUuNTgyMTc4NDY4NTc3Niw0NS4yMTA3NDQ4MDg5ODk1MSwxMi43MzQ2NzE0NDY4ODk4MDIKKzI2LFNhdCAxOSBGZWIgMTEsMjguNzAwNjEzOTcyODA5OTcyLDIwMS42NjA5NTMzNTkyMDg4Niw3NTkuNjU4NTIwMzAwMzg3NCwxNS40OTY1MTAxOTQ2MzQyMjQsMTcuNzQ3MDg1ODg3ODE1MzEzLDU5My43MzE2MDM1MTQ3NDYsNDUuMTExNDY4MDU3MzcyNTEsMTIuNzM0NjcxNDQ2ODg5ODAyCisyNyxTdW4gMjAgRmViIDExLDI4LjU2MzMyNjI0Mjc0OTQ1NCwyMDAuOTYwNTMwNDc1Mzc2MTIsNzU3LjE0ODUwODkwOTI0LDE2LjAwODY5MjUxMjQ0Mzg5NywxNy45NjkwMTg0MDU3NjQwNCw1OTEuODEyNjYxNzkxNTQ4Myw0NS4wMjE2NjcyMzE5ODIsMTIuNzM0NjcxNDQ2ODg5ODAyCisyOCxNb24gMjEgRmViIDExLDI4LjQzNjQ0NjQwOTY5NDAzLDIwMC4yNjYyODY4MzY0NjQ2LDc1NC41ODg4NDU3NjE2MDk4LDE2LjUxMTM2MDEyNDk5NDMsMTguMTgzNTAzMjQ5OTUzNzA2LDU4OS44NDYxOTAyMTY2MzAxLDQ0Ljk0MDUyNzYzNTA1NTgsMTIuNzM0NjcxNDQ2ODg5ODAyCisyOSxUdWUgMjIgRmViIDExLDI4LjMxNzk1NTAwOTgwNjk4MywxOTkuNTgwNzkyNDI5NDk4ODcsNzUxLjk5ODQxODYzMDMwODYsMTcuMDA0NDQ4NjY2Nzk2OTEsMTguMzkxMjM3OTYxNTEzNDIyLDU4Ny44NDg2OTgyNDE5NTQxLDQ0Ljg2NzIyMTkwMzAyOTE2LDEyLjczNDY3MTQ0Njg4OTgwMgorMzAsV2VkIDIzIEZlYiAxMSwyOC4yMDYzMTAyODM1ODIyOCwxOTguOTA1NzgyODc3NTgzMDgsNzQ5LjM5MjIxMzEzNzExMjEsMTcuNDg3OTQ3NTc1ODk0MTksMTguNTkyODIxMjg3MTE4MTE3LDU4NS44MzMyOTYwMTE2NDYsNDQuODAwOTQ3MDUyNDI1NjM0LDEyLjczNDY3MTQ0Njg4OTgwMgorMzEsVGh1IDI0IEZlYiAxMSwyOC4xMDAzMzEzMTU0NzkwNjcsMTk4LjI0MjM4NjE1NDg2MzA2LDc0Ni43ODIxNDIxNjUyMzk5LDE3Ljk2MTg5MDIzOTE2OTYxLDE4Ljc4ODc2NTcwMzU4NDcwNSw1ODMuODEwNDEyNTIxMDE2OCw0NC43NDA5NDY1NDYzMDM5MiwxMi43MzQ2NzE0NDY4ODk4MDIKKzMyLEZyaSAyNSBGZWIgMTEsMjcuOTk5MTEwMTUwMzYzNjUsMTk3LjU5MTI5MDkzOTUzMzgyLDc0NC4xNzc2ODgwMDI3NjY2LDE4LjQyNjM0NTUzODY2ODE2NiwxOC45Nzk1MDkwNjU2MzE2OCw1ODEuNzg4MzUzNDIyMzk4Niw0NC42ODY1MjIxNTY4NDQ3MywxMi43MzQ2NzE0NDY4ODk4MDIKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvTGFyZ2VNaXhNaWdfUktfUmVmZXJlbmNlL2F1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwvaHVtYW4vSW5jaWRlbmNlXzAuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9MYXJnZU1peE1pZ19SS19SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9odW1hbi9JbmNpZGVuY2VfMC5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmMyNDQwMQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvTGFyZ2VNaXhNaWdfUktfUmVmZXJlbmNlL2F1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwvaHVtYW4vSW5jaWRlbmNlXzAuY3N2CkBAIC0wLDAgKzEgQEAKK2l0ZXJhdGlvbix0aW1lLApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9MYXJnZU1peE1pZ19SS19SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9odW1hbi9JbmNpZGVuY2VfMS5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0xhcmdlTWl4TWlnX1JLX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL2h1bWFuL0luY2lkZW5jZV8xLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYzI0NDAxCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9MYXJnZU1peE1pZ19SS19SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9odW1hbi9JbmNpZGVuY2VfMS5jc3YKQEAgLTAsMCArMSBAQAoraXRlcmF0aW9uLHRpbWUsCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0xhcmdlTWl4TWlnX1JLX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL2h1bWFuL0luY2lkZW5jZV8yLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvTGFyZ2VNaXhNaWdfUktfUmVmZXJlbmNlL2F1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwvaHVtYW4vSW5jaWRlbmNlXzIuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ2YWVmOWQKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0xhcmdlTWl4TWlnX1JLX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL2h1bWFuL0luY2lkZW5jZV8yLmNzdgpAQCAtMCwwICsxLDMzIEBACitpdGVyYXRpb24sdGltZSxZRS1OLUcxNTAwMDEsWUUtUy1HMTYwMDAxLFlFLVMtRzE2MDAwMixZRS1TLUcxNjAwMDMsWUUtUy1HMTYwMDA0LFlFLVMtRzE2MDAwNSxZRS1TLUcxNjAwMDYsWUUtUy1HMTYwMDA3CisxLFR1ZSAyNSBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMixXZWQgMjYgSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzMsVGh1IDI3IEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCis0LEZyaSAyOCBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorNSxTYXQgMjkgSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzYsU3VuIDMwIEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCis3LE1vbiAzMSBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorOCxUdWUgMSBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorOSxXZWQgMiBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTAsVGh1IDMgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzExLEZyaSA0IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxMixTYXQgNSBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTMsU3VuIDYgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzE0LE1vbiA3IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxNSxUdWUgOCBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTYsV2VkIDkgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzE3LFRodSAxMCBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTgsRnJpIDExIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxOSxTYXQgMTIgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzIwLFN1biAxMyBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjEsTW9uIDE0IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyMixUdWUgMTUgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzIzLFdlZCAxNiBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjQsVGh1IDE3IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyNSxGcmkgMTggRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzI2LFNhdCAxOSBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjcsU3VuIDIwIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyOCxNb24gMjEgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzI5LFR1ZSAyMiBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMzAsV2VkIDIzIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCiszMSxUaHUgMjQgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzMyLEZyaSAyNSBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9MYXJnZU1peE1pZ19SS19SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9ydW5wYXJhbWV0ZXJzLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvTGFyZ2VNaXhNaWdfUktfUmVmZXJlbmNlL2F1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwvcnVucGFyYW1ldGVycy5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDY4NTViNQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvTGFyZ2VNaXhNaWdfUktfUmVmZXJlbmNlL2F1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwvcnVucGFyYW1ldGVycy5jc3YKQEAgLTAsMCArMSwyIEBACitwb3B1bGF0aW9uSWRlbnRpZmllcixuYW1lLHRhcmdldElTT0tleSxiaXJ0aFJhdGUsZGVhdGhSYXRlLHRpbWVQZXJpb2QKK2h1bWFuLGF1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwsLDAuMCwwLjAsODY0MDAwMDAKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L05vblplcm9Nb3J0YWxpdHlSYXRlX0ZEX1JlZmVyZW5jZS9IdW1hblBvcHVsYXRpb25Nb2RlbC9odW1hbi9CaXJ0aHNfMC5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L05vblplcm9Nb3J0YWxpdHlSYXRlX0ZEX1JlZmVyZW5jZS9IdW1hblBvcHVsYXRpb25Nb2RlbC9odW1hbi9CaXJ0aHNfMC5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmMyNDQwMQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvTm9uWmVyb01vcnRhbGl0eVJhdGVfRkRfUmVmZXJlbmNlL0h1bWFuUG9wdWxhdGlvbk1vZGVsL2h1bWFuL0JpcnRoc18wLmNzdgpAQCAtMCwwICsxIEBACitpdGVyYXRpb24sdGltZSwKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvTm9uWmVyb01vcnRhbGl0eVJhdGVfRkRfUmVmZXJlbmNlL0h1bWFuUG9wdWxhdGlvbk1vZGVsL2h1bWFuL0JpcnRoc18xLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvTm9uWmVyb01vcnRhbGl0eVJhdGVfRkRfUmVmZXJlbmNlL0h1bWFuUG9wdWxhdGlvbk1vZGVsL2h1bWFuL0JpcnRoc18xLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYzI0NDAxCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Ob25aZXJvTW9ydGFsaXR5UmF0ZV9GRF9SZWZlcmVuY2UvSHVtYW5Qb3B1bGF0aW9uTW9kZWwvaHVtYW4vQmlydGhzXzEuY3N2CkBAIC0wLDAgKzEgQEAKK2l0ZXJhdGlvbix0aW1lLApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Ob25aZXJvTW9ydGFsaXR5UmF0ZV9GRF9SZWZlcmVuY2UvSHVtYW5Qb3B1bGF0aW9uTW9kZWwvaHVtYW4vQmlydGhzXzIuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Ob25aZXJvTW9ydGFsaXR5UmF0ZV9GRF9SZWZlcmVuY2UvSHVtYW5Qb3B1bGF0aW9uTW9kZWwvaHVtYW4vQmlydGhzXzIuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQxNDg4ZjQKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L05vblplcm9Nb3J0YWxpdHlSYXRlX0ZEX1JlZmVyZW5jZS9IdW1hblBvcHVsYXRpb25Nb2RlbC9odW1hbi9CaXJ0aHNfMi5jc3YKQEAgLTAsMCArMSwzMyBAQAoraXRlcmF0aW9uLHRpbWUsRUctRlJHLUcyMTAwMDEsRUctRlJHLUcyMTAwMDIsRUctRlJHLUcyMTAwMDMsRUctRlJHLUcyMTAwMDQsRUctRlJHLUcyMTAwMDUsRUctTE9FLUcyNDAwMDEsRUctTE9FLUcyNDAwMDIsRUctTE9FLUcyNDAwMDMsRUctTE9FLUcyNDAwMDQsRUctTE9FLUcyNDAwMDUsRUctTE9FLUcyNDAwMDYsRUctTE9FLUcyNDAwMDcsRUctTE9FLUcyNDAwMDgsRUctTE9FLUcyNDAwMDksRUctVVBFLUcyOTAwMDEsRUctVVBFLUcyOTAwMDIsRUctVVBFLUcyOTAwMDMsRUctVVBFLUcyOTAwMDQsRUctVVBFLUcyOTAwMDUsRUctVVBFLUcyOTAwMDYsRUctVVBFLUcyOTAwMDcsRUctVVBFLUcyOTAwMDgsRUctVVJHLUczMDAwMDEsRUctVVJHLUczMDAwMDIsRUctVVJHLUczMDAwMDMsRUctVVJHLUczMDAwMDQKKzEsVHVlIDI1IEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyLFdlZCAyNiBKYW4gMTEsMTEuNTkyMjU4NzM0Njk4MjU5LDEwLjM1MDE5NDUzMzMyNDI5OSw2LjAyNDY1NTY2NjAzOTQyMywxMi40NTQ1NDU3Nzc4Mzk2MTMsMTIuNTU0MDU3MDU3NjM3MTkzLDIwMi45NDEyNTMyOTMyNDE4OSwyMjAuNTM2MDQ5NzExMTQyNiwxODAuNzUwMzU1NzU2MTk0NTIsMTU2Ljk5OTkyNDM1NjQ4NDQ4LDE5Ni4yODk0MzY5MjAyNTg3LDM5Ljg2MDYxMjIzNzg0MzQ3NiwyMzMuMDE3NzgxMzU3NzYyMzIsNDYuMTE1NTYyMDY5NzYyNjQ2LDEyMi40MTkwNjcxMjI5MTg5MywxMDkuNDIwMzMyNTM4MjI3MzQsMjUxLjE4Mzk1MjQ1MTI5NTA2LDE4MS45NzI4NTU1NjA2NzE4Myw1MS4xNzc1MTU4MzYyOTk2MzQsMTQ4Ljk0OTgwMzYwODUxNzAyLDk5LjE5NjQwMzAwODE2Nzc0LDE0Ni41NDQyMDc3OTQ5MTg0NiwxNjIuNzMzNjI4MzY5MDc3MDUsMTQ0Ljc2NjMyMjY5MTM4OTI2LDMyOS45OTE3MDAzMDcyMjE1NSwyMS4wNDQxNDEwMjAxNTM4NSwwLjI2MzQ5MDc4MzEwMzk3MTMKKzMsVGh1IDI3IEphbiAxMSwyMy4xODQ1NjM4Mzg0MzE0NiwyMC43MDA0MzA0Njc0MjY3MjcsMTIuMDQ5MzM1NDMwNzAxNTExLDI0LjkwOTE0MTM3Mzg2MjMzNywyNS4xMDgxNjQzMzE1MDI2MTQsNDA1Ljg4MzMxODM1MTQ5Njk0LDQ0MS4wNzI5ODE1NjY0ODQwMywzNjEuNTAxNDM0NTEzODEyMDYsMzE0LjAwMDQ3NjcxMjY2NjQsMzkyLjU3OTY1ODk5ODI2NTEzLDc5LjcyMTM4MzkxODEzNTksNDY2LjAzNjQ5NDc4NjY1MDEsOTIuMjMxMzA4NjAxNzczNTYsMjQ0LjgzODYyMzkyMjEwNjM2LDIxOC44NDExMDI3NTc3ODQ4Miw1MDIuMzY4OTA3Njc0MTAzMDcsMzYzLjk0NjQzOTAxMjc2NTksMTAyLjM1NTIzNjM4MjY2MjYxLDI5Ny45MDAyMDMwMTYyNDg1LDE5OC4zOTMyMDI4MDE5NDc1LDI5My4wODkwMDE3NjY2NjgxLDMyNS40Njc5MDc2NzI2Njc2LDI4OS41MzMyMjQ0NDgwNjkzLDY1OS45ODQ3MjA1ODEyNDQzLDQyLjA4ODM2NjIxNjg3MTc4LDAuNTI2OTgyNjIwMTcxMDc1Cis0LEZyaSAyOCBKYW4gMTEsMzQuNzc2OTE1MzExMzg1MDc1LDMxLjA1MDcwNzgwMjQ3Mjg5NiwxOC4wNzQwMzkyOTQwODI2NTYsMzcuMzYzNzg2Nzg4MjY3NDUsMzcuNjYyMzIxODIxNzk3MTM2LDYwOC44MjYxOTUxNzgwMTIyLDY2MS42MTA3OTU1Njk1NTI5LDU0Mi4yNTMyMzYyNzU3NDQ2LDQ3MS4wMDE2NTcwNzEwNTc3LDU4OC44NzA2NjYyMzcxNTk5LDExOS41ODIzMTUwNDE1MTUwNSw2OTkuMDU2MTQwMjkwMzkxNiwxMzguMzQ3MjM5NTk2NzcwNiwzNjcuMjU4NjcwMzk5NTIwOTUsMzI4LjI2MjMxMDY2MDQyMzE3LDc1My41NTQ4NjYxNjM1NzgsNTQ1LjkyMDc1MDM1OTE5MzgsMTUzLjUzMzE2MTYzOTkwNzc3LDQ0Ni44NTExOTgyMjU1Nzc2LDI5Ny41OTAzOTkzODI5MjY0LDQzOS42MzQzODE5MTc1OTM2LDQ4OC4yMDI4Mzc5MTMzNzUzMyw0MzQuMzAwNzA1MjcyMzU2MzcsOTg5Ljk3OTA2MDgyNzM0ODEsNjMuMTMyNjc1NTkwNDkwNSwwLjc5MDQ3NTUxMTIwNTUyNworNSxTYXQgMjkgSmFuIDExLDQ2LjM2OTMxMzE1MzIwMTY4LDQxLjQwMTAyNjUzODYyODQxLDI0LjA5ODc2NzI1NjI3OTI1Niw0OS44MTg0ODE5MzA5MjY5MSw1MC4yMTY1Mjk1Mjg3MjE2MTUsODExLjc2OTg4Mzc0MzQwMiw4ODIuMTQ5NDkxNzIzODc3OCw3MjMuMDA1NzYxMDQ0ODg0Myw2MjguMDAzNDY1NDIwMTU2NSw3ODUuMTYyNDU4NjMwMDY3NywxNTkuNDQzNDA1NjA4NjE4Nyw5MzIuMDc2NzE3ODcyNzE1MSwxODQuNDYzMzU1MDU1NDkxNjMsNDg5LjY3OTIwNjU1NzEyMTQ2LDQzNy42ODM5NTYyNDczNjE2LDEwMDQuNzQxODIwNDU2MzMwNSw3MjcuODk1Nzg5NTExNDMzLDIwNC43MTEyOTE2MDg4NTM5Nyw1OTUuODAyNzg5MjM4ODg3NSwzOTYuNzg3OTkyNzE2MzY4NjUsNTg2LjE4MDM0ODI1MDAzOTcsNjUwLjkzODQxOTA5MzgwNCw1NzkuMDY4NzY1MTY2NTY2NywxMzE5Ljk3NDcyMDk5NDUwNjcsODQuMTc3MDY5MTA4MTE1NzUsMS4wNTM5Njk0NTYyMTE1NDMxCis2LFN1biAzMCBKYW4gMTEsNTcuOTYxNzU3MzYzNDY5NjMsNTEuNzUxMzg2Njc2MDU4ODYsMzAuMTIzNTE5MzE3Mzg3NzA0LDYyLjI3MzIyNjcwMjY4OTExLDYyLjc3MDc4NzQ1MjQ3NjkyNCwxMDE0LjcxNDM4NDAxNTAyMDgsMTEwMi42ODkwNzAwMzI5ODczLDkwMy43NTkwMDg4MjQxMjI5LDc4NS4wMDU5MDE3NDcwNjA5LDk4MS40NTUwMzYxNjkxMTMsMTk5LjMwNDY1NTYyMDA4NDYsMTE2NS4wOTgyMjc1MzczNDksMjMwLjU3OTY1NDk3ODY3NDUsNjEyLjEwMDIzMjM5Njg2NjcsNTQ3LjEwNjAzOTUxOTc2NjIsMTI1NS45Mjk3NjIyMTQxMDA3LDkwOS44NzE1NTYzNzE4MjcsMjU1Ljg4OTYyNjI5MDMyMDA1LDc0NC43NTQ5NzYwNTg1NjE1LDQ5NS45ODU5ODI3NjM5MDk1Myw3MzIuNzI2OTAwNzY2MzUxMyw4MTMuNjc0NjUxMjE2NTU3NCw3MjMuODM3NDA0MTMzMDE2NywxNjQ5Ljk3MTcwMTAyNjA2ODYsMTA1LjIyMTU0NjczMzUzMzU0LDEuMzE3NDY0NDU1MTkzMzM5MgorNyxNb24gMzEgSmFuIDExLDY5LjU1NDI0NzkzNzA3ODI2LDYyLjEwMTc4ODIxMzM3NDA4NiwzNi4xNDgyOTU0NzYzODcyNzUsNzQuNzI4MDIwNDkyMjY2MzEsNzUuMzI1MDk1NTkzMjIzNDIsMTIxNy42NTk2OTU3MDQ2MTY1LDEzMjMuMjI5NTMwNTAwMjk1MSwxMDg0LjUxMjk3OTYxMDA4Nyw5NDIuMDA4OTY1OTI1OTUxLDExNzcuNzQ4Mzk4NzU2OTYyNCwyMzkuMTY2MDY1MDcxMTc3NDgsMTM5OC4xMjA2NjkyODI2MTU4LDI3Ni42OTYxMzkzNjcwNTcwNyw3MzQuNTIxNzQ3OTE4NDMyMyw2NTYuNTI4NTYwNDYzMzIxLDE1MDcuMTE4NjUzNzExNzUyLDEwOTEuODQ4MDUwMDc2Nzc1LDMwNy4wNjgxNjU2ODUxMjQ4LDg5My43MDc3NTg2ODU2OTE5LDU5NS4xODQzNjkxODgzMDU1LDg3OS4yNzQwMzk0Njg4NzI3LDk3Ni40MTE1MzQyODQyMzkzLDg2OC42MDY2MjIxNjk3MDA4LDE5NzkuOTcwMDAwMzkyNjQzMiwxMjYuMjY2MTA4MjAyMTQ3MjcsMS41ODA5NjA1MDgxNTUxMzEyCis4LFR1ZSAxIEZlYiAxMSw4MS4xNDY3ODQ4NjIwODk0Myw3Mi40NTIyMzExNDY5MjgzMSw0Mi4xNzMwOTU3MzA2Mzc2Myw4Ny4xODI4NjE5NDM0MTAxMiw4Ny44Nzk0NTM5NTEwNjI3OSwxNDIwLjYwNTgxODE1MjQ2NTIsMTU0My43NzA4NzMxMjkwNDg2LDEyNjUuMjY3NjczMzkwMzE4OCwxMDk5LjAxMjY1NzY2NjkxNSwxMzc0LjA0MjU0NjE2NjMxMjEsMjc5LjAyNzYzMzk0OTM3MjEsMTYzMS4xNDQwNDMwOTkwMDE3LDMyMi44MTI4MDgyMjEzNzcxNyw4NTYuOTQzNzUzMTE4MTg0NSw3NjUuOTUxNTE5MDQxMjQ5MywxNzU4LjMwODQxNDQ1NDE3MzgsMTI3My44MjUyNjg2NDk3MDYsMzU4LjI0NjkwOTc5NDA4NzA2LDEwNDIuNjYxMTM3MTE5NDk5NSw2OTQuMzgzMTUxMjE4MDAyOSwxMDI1LjgyMTc2NDM1OTk0OSwxMTM5LjE0OTA2ODI5OTQ1MzMsMTAxMy4zNzY0MTkyNjgzNDgyLDIzMDkuOTY5NjE3ODc3OTE5NSwxNDcuMzEwNzUyOTE3MzQyMTcsMS44NDQ0NTc2MTUxMDExMzUyCis5LFdlZCAyIEZlYiAxMSw5Mi43MzkzNjgwODgzMzcxLDgyLjgwMjcxNTQ1NjQyMDMyLDQ4LjE5NzkyMDA2MzA3NTQ3LDk5LjYzNzc0NjU4MDM0NzQ1LDEwMC40MzM4NjI1MjU0NzE4LDE2MjMuNTUyNzQ4NzczODE5NSwxNzY0LjMxMzA5NzkyMDY5NCwxNDQ2LjAyMzA5MDA2NDU3MywxMjU2LjAxNjk3NTgwNjgzOTYsMTU3MC4zMzc0Nzc0MjU3MjYsMzE4Ljg4OTM2MjE3Mzk1NTMsMTg2NC4xNjgzNDg4OTYyMjUsMzY4LjkyOTY2MTU0MjM3MjQsOTc5LjM2NjI0Nzk2MDQ3MDEsODc1LjM3NDkxNTAyNDE4MDcsMjAwOS40OTg4MDE4ODkxOTg2LDE0NTUuODAzMjA0MDMzODQ1OCw0MDkuNDI1ODU4NjE4MDA2MywxMTkxLjYxNTExMTM0MDUwNjUsNzkzLjU4MjMyNTc0MTAzNDEsMTE3Mi4zNzAwNzU0NDE5MTYsMTMwMS44ODcyNTMyNjQ1NjM3LDExNTguMTQ2Nzk1MzYxMTc5MywyNjM5Ljk3MDU0ODUwNjQ3NiwxNjguMzU1NDc4NzE1NDA3MDMsMi4xMDc5NTU3NzYwMjg3ODMKKzEwLFRodSAzIEZlYiAxMSwxMDQuMzMxOTk3NDcxODc3NjMsOTMuMTUzMjQxMDc5MjkwMDEsNTQuMjIyNzY4NDE5Mzk2MzgsMTEyLjA5MjY2MjY0MDM3NzU0LDExMi45ODgzMjEzMTQyOTE1NCwxODI2LjUwMDQ4MDMxNTQwOTMsMTk4NC44NTYyMDQ4NzE5NTg3LDE2MjYuNzc5MjI5MzA0NDI5NSwxNDEzLjAyMTkxNzA1NjM3LDE3NjYuNjMzMTg5NzMyNjIyLDM1OC43NTEyNDk0ODg0MDQ5NCwyMDk3LjE5MzU4NjM3MzA2ODIsNDE1LjA0NjY5OTMzMDc3OTMsMTEwMS43ODkyMzIzMjY0MDQ4LDk4NC43OTg3NDc2ODcwODQyLDIyNjAuNjg5MjAyODkxMzk5LDE2MzcuNzgxODMzMzA5NTg3LDQ2MC42MDUwMTIxNTc2Mjg0LDEzNDAuNTY5NjgxMjgwNTExOCw4OTIuNzgxODgzOTM1ODQzNiwxMzE4LjkxODk3MjcxNzA4NjUsMTQ2NC42MjYwODkxODEyNjMzLDEzMDIuOTE3NzUwMjI1OTUxNywyOTY5Ljk3Mjc3ODExMTU3MzUsMTg5LjQwMDI3OTY4OTc3NzI4LDIuMzcxNDU0OTkwOTE2NTE1CisxMSxGcmkgNCBGZWIgMTEsMTE1LjkyNDY3MjUyODAyMTAzLDEwMy41MDM4MDc3ODU4OTE2LDYwLjI0NzY0MDU4MzQ3MzYwNCwxMjQuNTQ3NTc2NDEyMDQ4ODQsMTI1LjU0MjgzMDMwNzM1NjgxLDIwMjkuNDQ4OTg5NDYwNzUyNywyMjA1LjQwMDE5Mzk1NjEyMywxODA3LjUzNjA4OTczMjQ5NjUsMTU3MC4wMjc0NzA2NTE4MDY0LDE5NjIuOTI5NjczNTMyOTYxMywzOTguNjEzMjk0ODc5MzkyNzUsMjMzMC4yMTk3NTQyMTY5OTMsNDYxLjE2MzkyMTU4NzMyNjYsMTIyNC4yMTI3MDU3MTQ0NDU3LDEwOTQuMjIzMDE0MDkyOTE5NiwyNTExLjg3NzkyODI0ODg1NjMsMTgxOS43NjEwODA0NjkwNzczLDUxMS43ODQzNzA0MTMzNDAzLDE0ODkuNTI0ODQ2NjQyMDU4Myw5OTEuOTgxNzk2Nzc4ODgzNywxNDY1LjQ2ODQ1NjE4NzYxNTQsMTYyNy4zNjU1NzYwNDU4ODQ2LDE0NDcuNjg5MjgyOTM3OTk1NiwzMjk5Ljk3NjI1OTY1NDMyOTYsMjEwLjQ0NTEzNzgyNDA1MDQ1LDIuNjM0OTU1MjU5NjEyNjc4NgorMTIsU2F0IDUgRmViIDExLDEyNy41MTczOTE3OTQ0MDg0NywxMTMuODU0NDE0ODUxMzIzODgsNjYuMjcyNTM1ODQyOTA0NzMsMTM3LjAwMjM5NjYyOTQwODYyLDEzOC4wOTczODk0Njg5OTc1MywyMjMyLjM5ODIwNzkwMDg2NDIsMjQyNS45NDUwNjUwNzE0NDI1LDE5ODguMjkzNjY2NjkzNjMzLDE3MjcuMDMzNjA0Njg5NDA3NiwyMTU5LjIyNjg5OTc4MjExOSw0MzguNDc1NDk1MDIwMDgwOCwyNTYzLjI0Njg0NzkxMzczNCw1MDcuMjgxMzI4MzEyNzE0ODMsMTM0Ni42MzY2NjY0MjczMjczLDEyMDMuNjQ3NzA0NDU2MTU4OSwyNzYzLjA2MDUxOTkxMzI5OTIsMjAwMS43NDA3MTgzMDUxNDUzLDU2Mi45NjM5MzMzODQyOTcxLDE2MzguNDgwNjA2NDA2MDU2MywxMDkxLjE4MTk3Nzk0NzEyNjEsMTYxMi4wMTg1MjU4NTUxMTcsMTc5MC4xMDU3MTM4MzU3MjIzLDE1OTIuNDYxMzkwMzg1NDA4MywzNjI5Ljk4MDg1MjQyMDA4NSwyMzEuNDkwMDAyMTU4NjUwNzgsMi44OTg0NTY1ODE1MTY2Mjc3CisxMyxTdW4gNiBGZWIgMTEsMTM5LjExMDE1MDY4NTc1NTYzLDEyNC4yMDUwNTk5MDkzMjEyOSw3Mi4yOTc0NTE3NDc3MDE1NywxNDkuNDU2ODcyMDE5NjIxMDQsMTUwLjY1MTk5ODY2NjQ1NjQsMjQzNS4zNDc5Mjk1MzEzNDU1LDI2NDYuNDkwODE3ODI2OTQyLDIxNjkuMDUxOTQzNTc5OTkyLDE4ODQuMDQwMjIxMzIwOTg0LDIzNTUuNTI0Nzc2NTE4MjI4NSw0NzguMzM3ODM4NTI0NjUzMywyNzk2LjI3NDg1MDkzMzEyNCw1NTMuMzk4OTE5NTA3NTA0NCwxNDY5LjA2MTEwODQwODk2NSwxMzEzLjA3Mjc4NDI3NzU0NzcsMzAxNC4yMjQ5NjIyNTIzNDcsMjE4My43MjAwNDI5NjAxMTE2LDYxNC4xNDM3MDEwNjQ0MDEzLDE3ODcuNDM2OTU2ODc3NTExLDExOTAuMzgyMTYxNzYzNTQ1NCwxNzU4LjU2OTE4MTcxODg5MTUsMTk1Mi44NDY1MDI0Mzc3MTEzLDE3MzcuMjM0MDYxNTM5Njc3NCwzOTU5Ljk4NjEyMDA1ODE3MSwyNTIuNTM0NzI1MzU1ODM3MjUsMy4xNjE5NTg5NTQxMTI2MgorMTQsTW9uIDcgRmViIDExLDE1MC43MDI5MzUzMTk1NTIsMTM0LjU1NTczNTU5NTc1NzU3LDc4LjMyMjM4MDM2OTA2ODk3LDE2MS45MTAzMjIxNzk1Njk0LDE2My4yMDY2NTc0NDQ3ODY5NCwyNjM4LjI5NzU1MDI3MTk2NDYsMjg2Ny4wMzc0NTA4NjQ2MjgsMjM0OS44MTA4NjUxMTgzNjcsMjA0MS4wNDcwMjk2MTg2MTk1LDI1NTEuODIzMDIzMTAwMzU0NSw1MTguMjAwMjg4Njc1NTAwNywzMDI5LjMwMzcwNzE5OTU3ODYsNTk5LjUxNjY5NTE3MTcyNzYsMTU5MS40ODYwMTE1MDY1NzY1LDE0MjIuNDk4MTM5NTU5ODIzNCwzMjY1LjMzOTI0ODk4NjU2OTYsMjM2NS42OTY5NDQ5NDYyODI3LDY2NS4zMjM2NzM0MjkwOTcxLDE5MzYuMzkzODg1NjE2ODE4LDEyODkuNTgxNTU2Mjg5MTQsMTkwNS4xMjA0MjM3NzAwODY3LDIxMTUuNTg3OTQxNDA0MzA2LDE4ODIuMDA3MjU5ODgwMTQ3LDQyODkuOTkwNzUzNTkzOTc1LDI3My41Nzg4OTExMzEwNjAwNiwzLjQyNTQ2MjM2ODE1NzgzODQKKzE1LFR1ZSA4IEZlYiAxMSwxNjIuMjk1NzAzNDA4MDYyNjIsMTQ0LjkwNjQxODk3MTcwMjM1LDg0LjM0NzI5NjA1MDE1MDk2LDE3NC4zNjA5MDM2MjQyMzk2NSwxNzUuNzYxMzY0MjM0NTY3MzcsMjg0MS4yNDUyOTM4NzMyNzc3LDMwODcuNTg0OTU5NDQzNjk2MywyNTMwLjU3MDI0NjY4NDAyMjUsMjE5OC4wNTMxNTk5NDA5ODk2LDI3NDguMTIwNzc3NDU4NjE1LDU1OC4wNjI3MjcwMTg5NDQxLDMyNjIuMzMzMjI1MzYxMzEyLDY0NS42MzQ2NTUzMDMyNjI4LDE3MTMuOTExMzA4NDM0NDcxMywxNTMxLjkyMzM5MTU0NDU5NjEsMzUxNi4zMTc5NjQxOTU3NDU0LDI1NDcuNjY1MDcxMjc2MzM2Nyw3MTYuNTAzODUwMzg2MTY1NSwyMDg1LjM1MTM1MDUzMTg3OCwxMzg4Ljc3Nzc5MDA2NTk5NzEsMjA1MS42NzIyNTE5Njk4MDg3LDIyNzguMzMwMDI4OTY2Mjk1MiwyMDI2Ljc4MDg2NDExMTUwMTYsNDYxOS45OTA4MDU4MjM5MzYsMjk0LjYyMTMyMTc1MDQ0ODQzLDMuNjg4OTY2Nzg5OTMwOTI4NAorMTYsV2VkIDkgRmViIDExLDE3My44ODgzMjc4NjY5MzU0LDE1NS4yNTcwMzk5MjUwNjcsOTAuMzcyMTE3ODA5MjE4MzgsMTg2LjgwMzY3MDMwOTUwNjgzLDE4OC4zMTYxMTM3OTI4MTQzOCwzMDQ0LjE4NTk5NzE2MTQ0OCwzMzA4LjEzMzMyNzU2OTcwOCwyNzExLjMyOTQ4ODU1MzI5OCwyMzU1LjA1NjA0MzI3NTE0OTUsMjk0NC40MTU0MjkwNzQ4MDI0LDU5Ny45MjQ3ODA1MTUzMTY1LDM0OTUuMzYyNzcyMTEwMjU5NCw2OTEuNzUyNzk5ODkyMDAwOSwxODM2LjMzNjc4MDczMTAzMjgsMTY0MS4zNDczMTQzOTEwNDQyLDM3NjYuOTM1OTQ2OTYwMjg1NSwyNzI5LjYwNTU1MDA4MDUzNTUsNzY3LjY4NDIzMTYxMTIwMjQsMjIzNC4zMDkyMTMzMTg0NDc3LDE0ODcuOTYzODUzMzEzOTk2OSwyMTk4LjIyNDY2NjE3NTYwODUsMjQ0MS4wNzI3NTg1NjM4MTUsMjE3MS41NTQ0ODIyMTYxNjA1LDQ5NDkuOTc0NTI4NTQxMDQyLDMxNS42NTg3MTk1MTI0NTAxNSwzLjk1MjQ3MjEwMjMxMDgyMzYKKzE3LFRodSAxMCBGZWIgMTEsMTg1LjQ4MDAxNTA1NjQ0NTk1LDE2NS42MDcxNTczNDgxMjg5LDk2LjM5NjMxMTE3MzIyNjY1LDE5OS4yMTE5ODc3MjQxNDU1LDIwMC44NzA4ODA5MDYxNTgxMywzMjQ3LjA4ODU0MDY3MzExNDUsMzUyOC42ODI2NTgxMjI0MjU0LDI4OTIuMDg0NjExMjY1ODk3NCwyNTEyLjAzOTkwMDI2NjI4MDMsMzE0MC42OTA0NzkwNDMwMzM1LDYzNy43ODQwMDI1NTg0OTQzLDM3MjguMzg4MDgwMzY3ODU3LDczNy44NzExNzQ3NDQ4NTA1LDE5NTguNzYxMDM2MjU0NjkwMiwxNzUwLjc2MTU0NjMyMzk4MjksNDAxNi4wMzc1MzM0MDgyNTgsMjkxMS40MDE1MjA4MDQxNTcsODE4Ljg2NDg2NTU4NzUzMDEsMjM4My4yNjY2NDg0NzQ5NDI1LDE1ODcuMDk2NTM3NTU3MzQyMSwyMzQ0Ljc3NzgxMTE0MDY4ODgsMjYwMy44MTYyMzg3NTI5MiwyMzE2LjMyNTU1NzQyMTAyNTcsNTI3OS44Njg4NTQ1NjAyNDIsMzM2LjY3MjE1MjYwOTYwNDU1LDQuMjE1OTc3Njk2MTA4NTU2CisxOCxGcmkgMTEgRmViIDExLDE5Ny4wNjc4MjkyNDU1NDA3LDE3NS45NTUwOTA4MjIxMDA0LDEwMi40MTc3ODU1MjE0Mzk2OCwyMTEuNTIxMDQ5Njg5MzM5MzIsMjEzLjQyNTQ5MTYxMzAwMTUzLDM0NDkuODQ2NzAwMzM2MDk2LDM3NDkuMjMyMjMxNjgwNTE4LDMwNzIuODE4NDEyNzYzNTQyNywyNjY4Ljk0ODUyMDI4MDY4LDMzMzYuODg0Mzk5Nzc5OTksNjc3LjYzMDczNzM1OTExMywzOTYxLjM4OTkyMTIzNjQ2OCw3ODMuOTg5NzM1ODM2ODIxOSwyMDgxLjE3Nzc2MTM0NDQ5NDcsMTg2MC4xMzE2NDY2MTc4MjQzLDQyNjEuNDc1NzU1Nzk2NjA1LDMwOTIuNjYxODQ0NDY1NDEwNSw4NzAuMDQ1NjkyODc3OTE2NiwyNTMyLjIxOTQ0NTgwMTA5MSwxNjg2LjAyOTAxNzU0NDczNywyNDkxLjMzMTU0MzQyOTA2NiwyNzY2LjU2MDA1MDY0OTM1MywyNDYxLjA4Mjk4ODYxMTE3MjQsNTYwOS40MTU4MTc2ODg4NTIsMzU3LjYwNTg0NDU4NDU2NjM0LDQuNDc5NDc5NDY2MTYyMDA2CisxOSxTYXQgMTIgRmViIDExLDIwOC42Mzc0NjUwMjk3Njg4LDE4Ni4yOTI2MzA0MzYyNDAyNywxMDguNDI2MDQ2NjIzNDgwNTYsMjIzLjYwNDQ0NDAzMTY1MTg0LDIyNS45Nzg5OTQ2NTU2NjgxLDM2NTEuOTkzNzk1NjU3NjA3NywzOTY5Ljc3OTAxNTM2NzYyOTcsMzI1My40MzU5NzAyOTc2ODI2LDI4MjUuNTE5NTA3MDkzMzkyMywzNTMyLjY5NjUzNzkzODY2Niw3MTcuNDE1NDMwNDY4NTA4Miw0MTk0LjI1OTIwMTYxNjQ0Niw4MzAuMTA4NDkwNzg4MDQ3OCwyMjAzLjU1MjE4OTUxMTQ3OTQsMTk2OS4yNzU4Mzk3NTUxMjMsNDUwMS4wMjgxNDc3Mzc3MTcsMzI3Mi4wMzEzMjk3ODk4NTMsOTIxLjIyNjY1NzM1MjgwMzgsMjY4MS4xNDQ0NzY4Njk5MTI1LDE3ODQuMTk1NzA5ODAyMzI1NiwyNjM3Ljg4NTg2NjM0NzMxNiwyOTI5LjMwMjQ2MjgxNDc1ODcsMjYwNS43NjYwMTE3ODA5MzcsNTkzNy40ODUwNzU0MzQxMzQsMzc4LjI5Mjk4Njc0ODE2Mzk3LDQuNzQyOTU0NDgyODg2Nzg4NAorMjAsU3VuIDEzIEZlYiAxMSwyMjAuMTM5MjY0NTExODI5LDE5Ni41OTI2NTM0NjEwODY1LDExNC4zODY5NjExMjk4NzgwMywyMzUuNDAzMTM0MjY4NjEwNzMsMjM4LjUyNjU4NzM1NDk0NDQ0LDM4NTIuMjU2OTg3OTI4MDgyNyw0MTkwLjMwNjYxNDA2MzI0NiwzNDMzLjUxODEyODYyMzg2NiwyOTgwLjkyODkwOTE5MzkwOCwzNzI3LjEyNTEwMTI4NDQ1MjMsNzU2Ljk2MDMyOTg1MDg1NzMsNDQyNi40OTU1MDcwNDY1ODYsODc2LjIyNzQwODM5NjUxMTgsMjMyNS43MjI5NDYzOTkzNTEzLDIwNzcuNTcwOTczMDY4NTA3Niw0NzM0LjU4NzkwOTA4MDU3MSwzNDQ3Ljg4MDAyNTExNDg2MTQsOTcyLjQwNzM4MDkxODcxMTYsMjgyOS45MzM3MTk1ODQ5MDcsMTg4MC42ODU5NzMzNTE3MTk3LDI3ODQuNDQwNTc0MjMyMTkxLDMwOTIuMDMzMDM1OTYxNzgzOCwyNzUwLjEwMzE0ODQyMzA2NTcsNjI2MS40MjMzMjI2MDk5NzgsMzk4LjU2MDc2OTg2MDQ4MTgsNS4wMDYyODY1MTkzOTkzNjU1CisyMSxNb24gMTQgRmViIDExLDIzMS40Njk2NDUzNzk0MjY4LDIwNi43OTY0ODQ0ODY0NDAyNSwxMjAuMjQzODM2OTIwNDcyMywyNDYuOTA2NzY5MTkxNDE5MSwyNTEuMDQ1MzMxNDcxODEwNTYsNDA0OC44MDU1NzQ3ODMxODEzLDQ0MTAuNzI2OTI4NzM3NjE1LDM2MTEuNzY2NTA2ODk5NTgzNCwzMTMzLjcyOTQ1NTM0Mzg2MSwzOTE4LjMzOTk2MDc5MTM5Miw3OTUuOTAzMzc0Mzk1ODc1Miw0NjU2LjQ3NjIzNTE4MDg5NCw5MjIuMzQ2MzU3MTA3ODE5NywyNDQ3LjA3OTk2Njc3ODQ4NjMsMjE4My45Njk3Njc0OTA0Nzc0LDQ5NjIuNDM5MjY5MzY0NTMxLDM2MTkuNDQ2NzE3MDQ4OTM5LDEwMjMuNTg1ODYwMTkyNTk5NCwyOTc4LjE0MTQxNDI3NTM3MywxOTc0LjkxNzcxMTc2OTgyMzcsMjkzMC45OTQ3MDk4NDg2MjcsMzI1NC42ODk0NzAxNjAyMDQ2LDI4OTMuMTgzNTUyMjAwNTExLDY1NzguNTA1OTY4NTgzNzAzLDQxOC4zMzMwNTkxNTU2MTM0Niw1LjI2ODk0MzE5MjIxMDI3NgorMjIsVHVlIDE1IEZlYiAxMSwyNDIuNTU1NjA1NTA1NTgzNCwyMTYuODM2ODc4NTcwMzQ2NCwxMjUuOTY3NjIwNDcxNjM2NjYsMjU4LjE0NDQzMzc4NzkyNDcsMjYzLjQ2MzU5ODc4NjYzOTgsNDI0MC44MjMyNDQ3NDg0OTMsNDYzMC42NTU4NjEyNzA4NTIsMzc4Ni42NjMwMTM4MTA5OTYsMzI4My4xMDUxMzM0ODA0MDM4LDQxMDUuMjgzMDI0ODEwMDA4LDgzMy45OTk4MDkyNDI3NzA4LDQ4ODIuMjA3NjA1MTYyODcyLDk2OC40NjQ1NDAyNzU4MzkyLDI1NjYuNTYxNTEzMjUyMzA1MywyMjg3Ljk0NDMzMzg1ODM0MDUsNTE4NS4zNzcyODA3NTIzMTU1LDM3ODYuODYwMzIwMTExOTIyLDEwNzQuNzUyNTM5MTYzOTE1LDMxMjQuNjg1Njk4MDI0NDQwNiwyMDY2Ljg2NDgxMjI1NzkwNSwzMDc3LjU0MzQ2MTk3NTg5MDMsMzQxNi45NzIwNDM2MTA5OTQsMzAzMy43NTI3OTk4Mzg0MTI2LDY4ODguMDEzNTA1MTU2MjM3LDQzNy42MzA0MzM2OTgzNTcxNCw1LjUyOTQyNjQwNjczNjUyNgorMjMsV2VkIDE2IEZlYiAxMSwyNTMuMzc3MjMxNzQyOTAxMSwyMjYuNjY1NTQ5ODA3NjY1OTQsMTMxLjU1Mzg4NDE4NzM1ODQ1LDI2OS4xNDg1Mzg2MTQ0MDQxLDI3NS42NzM1OTA1NzE1MjcxLDQ0MjguMjQ1NTU2OTI2MzA0LDQ4NDguODkwODA2MTI3NjI3LDM5NTcuNTE0ODkyMTEzMTcyNywzNDI4LjkwMjMwNDE3OTQyNTgsNDI4Ny43NDI3ODEyMTAxNzYsODcxLjE4NjAwNDcyOTg4MzgsNTEwMi43NDE5ODYwOTk0MjMsMTAxNC41Nzc2MzIzMTcxNTUyLDI2ODMuNDQyMTQyMTIzNzc5NCwyMzg5LjQxNjI2NjA3OTc5NDIsNTQwNC4xMTk0MjgxMzE5NDIsMzk1MC40NzY5NDc5MDM3NDA0LDExMjUuODY1NDIyNDk2OTQ5MSwzMjY4LjQwMDMwMjMxMzcwNSwyMTU2LjY3ODM5MTE4MjM3NCwzMjI0LjA2NDE1MzIzMjY3NiwzNTc3LjkyMjAzMzE5OTY5NiwzMTcxLjEzNjkwODg5MzMyNDMsNzE5MC4xNTQ3Nzc1NzI0MTIsNDU2LjQ5NjMwNzI5MDgzNTksNS43ODU1ODcwMzUxNTc2MgorMjQsVGh1IDE3IEZlYiAxMSwyNjMuOTkyMjc2NDQyNzY2NDcsMjM2LjMxMTU4ODE3OTc5NiwxMzcuMDM0ODgzMzI1NTc2NDYsMjc5Ljk4ODcxMTg5NDYyNiwyODcuNjY3NTYzNjk3MzE2OTUsNDYxMi4xODE0MjY3NTEwMTUsNTA2NC40MjcxNDExMzQ2MDQsNDEyNS4wNTkxOTA5MzMyNjI1LDM1NzEuOTQ1OTk5MjkzOTk0Niw0NDY2Ljc0NTc4NjE4OTM4Nyw5MDcuNjYyNjczODU0MzU4MSw1MzE5LjAwNDE5Mzk3NDM3LDEwNjAuNjc1MDUwNjI2OTQwNywyNzk4LjA3Nzg5NzMxMDE0NiwyNDg4Ljk3MzM2NjIxNjM0MjYsNTYxOS45NjY3MTgwMDYxNjgsNDExMS4zNjUxMzk4MzY0LDExNzYuODQyNjMwMTUwODA4NCwzNDA5LjQ0ODgwMzQxNDYxNCwyMjQ0Ljk0MDY0OTM3MTI1NiwzMzcwLjUwNjMwNTc4ODQ5MiwzNzM2Ljc5Mjk4MjU5MDU2MSwzMzA1Ljg2NTAwNzM2MzM1NSw3NDg2LjgyMzUyMjU1NzU1OSw0NzUuMDUzMjA1MTQxNTQ2NSw2LjAzNzI1ODIwNTQwMzUxNAorMjUsRnJpIDE4IEZlYiAxMSwyNzQuNDAyMDQwNzQyMzE5ODUsMjQ1Ljc2NzcyMzAwMTM3NDU4LDE0Mi40MTIzMTU2NDE5ODczNiwyOTAuNjc0Njg0OTU1MjA5NCwyOTkuNDIxMjExNjE3NTA1NDMsNDc5Mi43MDE5MzQyNTA2NTksNTI3Ni4zMDE1MzY1ODk1MzksNDI4OS4yNDgwNTk4MTY4NzMsMzcxMi4yNzM3ODY3MTk0OTA1LDQ2NDIuMzM1ODM4MTU0NDM4LDk0My40MzUxNDgxMzUzNjE0LDU1MzAuOTIyNDcyODI2NjY1LDExMDYuNzMzNjUxOTk0MTc5LDI5MTAuMzgzNDkzMzYxNzYyMiwyNTg2LjY0NjkwNjA2MDk2ODQsNTgzMy4xMTcwMTY0NjUyODg1LDQyNjkuNjUzOTEyOTU4Njk1LDEyMjcuNTMyNTUyNjM4MTM2MiwzNTQ3LjYzMzY4NTcwMTEwNiwyMzMxLjcxNTY4MjQ0NzI4MiwzNTE2Ljc2MjM2NzY1NzQ0NCwzODkyLjkwMDcwMzUzNTEzODMsMzQzNy44NzU3MDIxMDQ3MjYzLDc3NzguMTg3MzI4MDkxMDM0LDQ5My4zMTYyOTIxMTQyNjE0NCw2LjI4MzkxOTA2MTI0MzM4MQorMjYsU2F0IDE5IEZlYiAxMSwyODQuNTIxOTgwOTIzMTMwNCwyNTQuOTQwMjU5NDYyOTMwODcsMTQ3LjY0NTQyNTI5NzA1MzYzLDMwMS4xNTg4Njk5OTM0NjE4NSwzMTAuNzg4NDM3ODg2OTgyLDQ5NjguNDkwNTM1NjUwNTEzLDU0ODEuMTIzMTM4MzE5NDY3LDQ0NDguNTczNTgyMDA2NDU2NSwzODQ4LjgwNDIyMTk5ODc3OSw0ODEzLjE0NzcyNzE1NTE5OSw5NzguMjE0OTkxMDY4NTI5OCw1NzM2LjUyNjc5MzU1NjYyOSwxMTUyLjU0NTE4Mzc4Nzc0NjMsMzAxOS4yMTY4MTg2NjI3NDczLDI2ODEuNjk2Mzg2ODI4ODIxMiw2MDQyLjc4ODAzNzc3OTY3LDQ0MjQuNDc3NTcwNzM5OTU1LDEyNzcuMDk4MzAxMzIzMDEzNCwzNjgxLjM4MjIxNzA1MjU4MTQsMjQxNi40OTA1MjYxODc0NDU1LDM2NjEuOTE4MzE2NjYzNTk4NSw0MDQzLjc4OTA1MjgxMDIwMDcsMzU2NS45MDY1MDk4Nzk3NTE0LDgwNjIuMzA1NDAxMjA5MDYxLDUxMS4xODg3NzM4Mzg3NzUyNiw2LjUyMjQ5NzcwOTcxMjM4MQorMjcsU3VuIDIwIEZlYiAxMSwyOTQuNTI2MTQwMjY2ODI5MywyNjMuOTk1MDQxMTk4NDk2MTUsMTUyLjgyMTQyNTI0MzU4OTI2LDMxMS41NjY5OTMxMDQ1ODE2LDMyMS45ODc3MjA4MjkyMzQ4Myw1MTQyLjQxNDY2MDc3MDE4MDUsNTY4Mi41ODQzNTMzODc1MTcsNDYwNS45MjAwMzA4MDc1NjUsMzk4My44MjgzMjExMTA0ODEsNDk4Mi4wNjI0MTQ3NTU2NTU1LDEwMTIuNTk4NzQ2NDEwMjkzOCw1OTM5LjU1NjcyMTkxNDcwMywxMTk4LjAxMDE1OTk2MzQ0MDQsMzEyNi42MTA1MTc4OTEyMDc2LDI3NzUuNzA3NzE5MDUyOTgxLDYyNTEuMTYyODIzMTc1MTA0LDQ1NzcuOTc1NjYzMTYxMzg1LDEzMjUuODQxODI4ODk4ODA0NCwzODEzLjI0NTIxODQ0MzUxMjQsMjUwMC40OTQ4NjMwNzg5NjcsMzgwNS42NzUwMjQ4NzQ0NDM0LDQxOTIuMjEyMjc2MTQ0OTg1LDM2OTIuMzA2MTc2NDUwNDk4Nyw4MzQzLjU5ODkzOTI4NDM4OCw1MjguOTEyMTQ3NzUxNTY5LDYuNzU3NTU3MTEyNjA4MTM1NQorMjgsTW9uIDIxIEZlYiAxMSwzMDQuMzQ2ODI0MTM1NDA1NSwyNzIuODYwOTQyMzAwNzcwNCwxNTcuOTA3MjAwOTIyMjUwNzIsMzIxLjg1Njg1NjA2NjE1NzI2LDMzMi45MTM5NDY3ODAwMzQxLDUzMTMuMzk3MjY1MjYxNzY5NSw1ODc4LjQ0Mjg5ODc1NTgwNCw0NzYwLjExMTg5MTQwOTEwOCw0MTE2LjQ3MDc1Nzc3NDc0NSw1MTQ3Ljk3NjUzNDUzMTMzMywxMDQ2LjM1NTA2MTU5MzA5NTEsNjEzOC40ODA2Mzg5MTkzNSwxMjQyLjQ5MjA3NzE3NzkxMywzMjMxLjY5NjE3MjY2NTI3MDMsMjg2OC4wNzkwNTU1MTk5MTg3LDY0NTcuNTMwMDc4ODY1OTEzLDQ3MjkuNDAyNjk2MTY3NzA3LDEzNzMuMDkwOTg3MDA0NDUyNSwzOTQyLjA2MjU2MjQ4MzEwMDUsMjU4My4yOTI1NzkxMzgyMDI3LDM5NDUuOTI3ODA3NjczODAzNyw0MzM2LjUzNDgwODcxNjk3NCwzODE2LjEwMDA2MDY1MzA0OTcsODYyMC40NTE4ODQ1MjUzNzksNTQ2LjQwMjcxNzY0Nzg1NzUsNi45ODY4OTE0NzM1MDk3MzUKKzI5LFR1ZSAyMiBGZWIgMTEsMzE0LjA0OTA0OTE5MDYxMzEsMjgxLjYwMjU5Njg4NDk2MjMsMTYyLjkzNTAwMTM4ODgwODE2LDMzMi4wNzI2MTgzOTYzODE4NywzNDMuNjU2OTAyNTgxNDA1MzUsNTQ4Mi40OTM3OTk0MjAwMTMsNjA3MC40MDM4NjA0MDM1OTgsNDkxMi4yNDg1NjQ2ODIwMDIsNDI0Ny41ODA5MTE3ODkzODQsNTMxMS45NTkyODAyMjUzMzQsMTA3OS43MDY1MTA0ODcyNDAyLDYzMzQuNzI3MDI1MTA1ODQzNSwxMjg1Ljg0NjE4MjQ5NTYyNjQsMzMzNS4yNjQ4MTk0MzcwNDQ1LDI5NTkuMzk2NzAyMTU3MzI0NCw2NjYyLjY0NzE2NzY0ODY0NSw0ODc5LjUyMjAxMjI4MzMwNCwxNDE5LjE4MTQ2NDMxMDQ4NjcsNDA2OC44NTU0MTc3MTg3MTM0LDI2NjUuMzI1NjEyMzYzMTY2Myw0MDgyLjU4OTQzNTA5MzI0MSw0NDc4LjAxMzYyOTIwMzUxNCwzOTM4LjE5MDUwNzAzNDgxNSw4ODk0LjQ3MzIwOTU4MTk2OSw1NjMuNzQ2NDQ4Njg3ODYxNiw3LjIxMjM4MDE4MzY2MzQ1OAorMzAsV2VkIDIzIEZlYiAxMSwzMjMuNjU1MDE0NzI4OTE0NiwyOTAuMjQyMzQ5NjI5NDgzMTYsMTY3LjkxNTgwMjAwMjQ5ODQ4LDM0Mi4yMjkwMjgxOTY2NTU0NiwzNTQuMjQ4MDk4MTA4ODYxOCw1NjUwLjA2MjkxMjc4MDE1Niw2MjU5LjA4Mjg0NjI2ODQwMyw1MDYyLjcwNzc4NzgzMDYyMSw0Mzc3LjQ0ODA5NTQxMzg1MSw1NDc0LjM3NDk2MTkwODY0OSwxMTEyLjcyOTA2MDI1NzM5LDY1MjguNzg3MDA0NDI1NDgwNSwxMzI4LjA3ODQwNDg5ODUyNDcsMzQzNy41ODk5MTY4MDgzNzMzLDMwNDkuODYwMTg4MjQ5MjkxMiw2ODY2Ljc2NTcwMTIxNjI2Niw1MDI4LjU5MDE5NTk3ODAzOSwxNDY0LjI1MDIyOTY4MzkzOTYsNDE5My45Nzk2MjM0OTUxNTgsMjc0Ni43NDI5MTA4MDI2MDk1LDQyMTUuNzc5Nzk0MDcyOTA4LDQ2MTcuMTAxMzU5NzIyNTc0LDQwNTguODg4Mjc2NjY5NjU0Myw5MTY2LjIwNzU4ODU3NDIxMiw1ODAuOTcyMjA5Mzg3Njc4Niw3LjQzNDY4MzE1Nzk1MjMzNworMzEsVGh1IDI0IEZlYiAxMSwzMzMuMTg0MDQ2NzM0OTY3OCwyOTguODAwMDkxOTU3ODk5OCwxNzIuODU5MTAzNzI4NzgwNSwzNTIuMzM4NDcxOTU5ODA5MiwzNjQuNzE2MzAzNjk4MjU3Niw1ODE2LjQxNDI3NjgyNzIyMiw2NDQ1LjA2OTI3MzgzODM4NCw1MjExLjgyMTk4OTAwMTczNiw0NTA2LjMyMzEyMjk5NDMzNiw1NjM1LjUzOTU5MTc5MzM4OSwxMTQ1LjQ4ODgwMDg4NjcxOCw2NzIxLjA5MzI3OTUyOTg4NCwxMzY5LjI4NjcwMzM5MDYyNiwzNTM4LjkxNDcxMzgxMTg3MjQsMzEzOS42NDIyMTkxMzIxNDcsNzA3MC4wOTU0MTg1MTk1MTcsNTE3Ni44MjQ4MTE5MDU4MjgsMTUwOC40NTMyMjg0NzcyMSw0MzE3Ljc1NjEzODc3NjIxNCwyODI3LjY3MTMyMDM0NjE2Miw0MzQ1Ljg1MzUyNzMwMTcwMiw0NzU0LjIyOTQ4ODYyNzcyNSw0MTc4LjQ2Nzk4MjA4NTkzNCw5NDM2LjEyMjI3NDU0NDc3OCw1OTguMTA0NDQ0NjQwNzg2Niw3LjY1NDQwMzU0NTM4ODQ3NgorMzIsRnJpIDI1IEZlYiAxMSwzNDIuNjUyNTE4ODUxNDk4MjYsMzA3LjI5Mjk1MjgxNTA2MzY0LDE3Ny43NzI5MjIyNjc0MzkzLDM2Mi40MTExNjA1MzgwNTkzMywzNzUuMDg2NzM5NzUyMjYzMSw1OTgxLjgwODY0ODI5NjU5MSw2NjI4Ljg5NjMyMzkyNTQyNiw1MzU5Ljg3NTA3MDY4OTYwMiw0NjM0LjQxNzgzMjI1NTk2Miw1Nzk1LjcyMDE4NzIzNTkxNSwxMTc4LjA0MTY5ODE1NDk5NTksNjkxMi4wMTU2OTQ2MDY1MjM1LDE0MDkuNjEyODg1NjIwNzE4MywzNjM5LjQ0ODU2ODkwNTQ1MjcsMzIyOC44ODg0ODkxNDQzODgsNzI3Mi44MDgyMTcxOTA1NzEsNTMyNC40MDY1NDY0ODQ2NzcsMTU1MS45NDU4MTc1Njg5OTI3LDQ0NDAuNDYzOTQzMjE5MjAzLDI5MDguMjE2NTM3NzY4NTA2LDQ0NzMuMjY5Njk1MTY4Mjk2NSw0ODg5Ljc4NzI1NTQ4ODc2Niw0Mjk3LjE2NDg1MjY5MzIyMyw5NzA0LjYwODc5MjI0NTYyOCw2MTUuMTYzNDM0MzQzOTg1LDcuODcyMDcwNDM3NjcwNTEyCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L05vblplcm9Nb3J0YWxpdHlSYXRlX0ZEX1JlZmVyZW5jZS9IdW1hblBvcHVsYXRpb25Nb2RlbC9odW1hbi9Db3VudF8wLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvTm9uWmVyb01vcnRhbGl0eVJhdGVfRkRfUmVmZXJlbmNlL0h1bWFuUG9wdWxhdGlvbk1vZGVsL2h1bWFuL0NvdW50XzAuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJjMjQ0MDEKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L05vblplcm9Nb3J0YWxpdHlSYXRlX0ZEX1JlZmVyZW5jZS9IdW1hblBvcHVsYXRpb25Nb2RlbC9odW1hbi9Db3VudF8wLmNzdgpAQCAtMCwwICsxIEBACitpdGVyYXRpb24sdGltZSwKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvTm9uWmVyb01vcnRhbGl0eVJhdGVfRkRfUmVmZXJlbmNlL0h1bWFuUG9wdWxhdGlvbk1vZGVsL2h1bWFuL0NvdW50XzEuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Ob25aZXJvTW9ydGFsaXR5UmF0ZV9GRF9SZWZlcmVuY2UvSHVtYW5Qb3B1bGF0aW9uTW9kZWwvaHVtYW4vQ291bnRfMS5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmMyNDQwMQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvTm9uWmVyb01vcnRhbGl0eVJhdGVfRkRfUmVmZXJlbmNlL0h1bWFuUG9wdWxhdGlvbk1vZGVsL2h1bWFuL0NvdW50XzEuY3N2CkBAIC0wLDAgKzEgQEAKK2l0ZXJhdGlvbix0aW1lLApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Ob25aZXJvTW9ydGFsaXR5UmF0ZV9GRF9SZWZlcmVuY2UvSHVtYW5Qb3B1bGF0aW9uTW9kZWwvaHVtYW4vQ291bnRfMi5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L05vblplcm9Nb3J0YWxpdHlSYXRlX0ZEX1JlZmVyZW5jZS9IdW1hblBvcHVsYXRpb25Nb2RlbC9odW1hbi9Db3VudF8yLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNDQ5Yjc0Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Ob25aZXJvTW9ydGFsaXR5UmF0ZV9GRF9SZWZlcmVuY2UvSHVtYW5Qb3B1bGF0aW9uTW9kZWwvaHVtYW4vQ291bnRfMi5jc3YKQEAgLTAsMCArMSwzMyBAQAoraXRlcmF0aW9uLHRpbWUsRUctRlJHLUcyMTAwMDEsRUctRlJHLUcyMTAwMDIsRUctRlJHLUcyMTAwMDMsRUctRlJHLUcyMTAwMDQsRUctRlJHLUcyMTAwMDUsRUctTE9FLUcyNDAwMDEsRUctTE9FLUcyNDAwMDIsRUctTE9FLUcyNDAwMDMsRUctTE9FLUcyNDAwMDQsRUctTE9FLUcyNDAwMDUsRUctTE9FLUcyNDAwMDYsRUctTE9FLUcyNDAwMDcsRUctTE9FLUcyNDAwMDgsRUctTE9FLUcyNDAwMDksRUctVVBFLUcyOTAwMDEsRUctVVBFLUcyOTAwMDIsRUctVVBFLUcyOTAwMDMsRUctVVBFLUcyOTAwMDQsRUctVVBFLUcyOTAwMDUsRUctVVBFLUcyOTAwMDYsRUctVVBFLUcyOTAwMDcsRUctVVBFLUcyOTAwMDgsRUctVVJHLUczMDAwMDEsRUctVVJHLUczMDAwMDIsRUctVVJHLUczMDAwMDMsRUctVVJHLUczMDAwMDQKKzEsVHVlIDI1IEphbiAxMSwyOTcyMzcuNDAzNDUzODAxNSwyNjUzODkuNjAzNDE4NTcxNzYsMTU0NDc4LjM1MDQxMTI2NzI1LDMxOTM0Ny4zMjc2MzY5MTMxNiwzMjE4OTguODk4OTEzNzc0Miw1MjAzNjIxLjg3OTMxMzg5NSw1NjU0NzcwLjUwNTQxMzkxMyw0NjM0NjI0LjUwNjU2OTA5LDQwMjU2MzkuMDg2MDYzNzA1LDUwMzMwNjIuNDg1MTM0ODM5LDEwMjIwNjYuOTgwNDU3NTI1LDU5NzQ4MTQuOTA2NjA5MjksMTE4MjQ1MC4zMDk0ODEwOTM0LDMxMzg5NTAuNDM5MDQ5MjAzNCwyODA1NjQ5LjU1MjI2MjIzOTYsNjQ0MDYxNC4xNjU0MTc4MjIsNDY2NTk3MC42NTU0MDE4NDIsMTMxMjI0My45OTU4MDI1NTQ4LDM4MTkyMjUuNzMzNTUxNzE4MywyNTQzNDk3LjUxMzAyOTk0MiwzNzU3NTQzLjc4OTYxMzI5NCw0MTcyNjU3LjEzNzY2ODY0MjcsMzcxMTk1Ni45OTIwODY5MDQ2LDg0NjEzMjUuNjQ4OTAzMTE3LDUzOTU5My4zNTk0OTExMjQ0LDY3NTYuMTczOTI1NzQyODUzNQorMixXZWQgMjYgSmFuIDExLDI5NzIzOC41OTI0MDM0MTUzNiwyNjUzOTAuNjY0OTc2OTg1NCwxNTQ0NzguOTY4MzI0NjY4OSwzMTkzNDguNjA1MDI2MjIzNywzMjE5MDAuMTg2NTA5MzY5OCw1MjAzNjQyLjY5MzgwMTQxMSw1NjU0NzkzLjEyNDQ5NTkzNSw0NjM0NjQzLjA0NTA2NzExNyw0MDI1NjU1LjE4ODYyMDA0OSw1MDMzMDgyLjYxNzM4NDc3OSwxMDIyMDcxLjA2ODcyNTQ0NjgsNTk3NDgzOC44MDU4Njg5MTcsMTE4MjQ1NS4wMzkyODIzMzEyLDMxMzg5NjIuOTk0ODUwOTU5NiwyODA1NjYwLjc3NDg2MDQ0ODcsNjQ0MDYzOS44Nzc1MDc4OTcsNDY2NTk4OS4zMTkyODQ0NjMsMTMxMjI0OS4yNDQ3Nzg1MzgsMzgxOTI0MS4wMTA0NTQ2NTI0LDI1NDM1MDcuNjg3MDE5OTk0LDM3NTc1NTguODE5Nzg4NDUyMiw0MTcyNjczLjgyODI5NzE5MywzNzExOTcxLjgzOTkxNDg3Myw4NDYxMzU5LjQ5NDIwNTcxMSw1Mzk1OTUuNTE3ODY0NTYyMyw2NzU2LjIwMDk1MDQzODU1NworMyxUaHUgMjcgSmFuIDExLDI5NzIzOS43ODEzNTc3ODUsMjY1MzkxLjcyNjUzOTY0NTM0LDE1NDQ3OS41ODYyNDA1NDIyLDMxOTM0OS44ODI0MjA2NDM4LDMyMTkwMS40NzQxMTAxMTU4NCw1MjAzNjYzLjUwODM3MjE4Nyw1NjU0ODE1Ljc0MzY2ODQzMiw0NjM0NjYxLjU4MzYzOTI5Nyw0MDI1NjcxLjI5MTI0MDgwMzQsNTAzMzEwMi43NDk3MTUyNDksMTAyMjA3NS4xNTcwMDk3MjE3LDU5NzQ4NjIuNzA1MjI0MTQxLDExODI0NTkuNzY5MTAyNDg4NCwzMTM4OTc1LjU1MDcwMjkzOSwyODA1NjcxLjk5NzUwMzU0OCw2NDQwNjY1LjYwMjI5NDIzLDQ2NjYwMDcuOTgzMjQxNzQxLDEzMTIyNTQuNDkzNzc1NTE3LDM4MTkyNTYuMjg3NDE4Njk0MiwyNTQzNTE3Ljg2MTA1MDc0MiwzNzU3NTczLjg1MDAyMzczMTYsNDE3MjY5MC41MTg5OTI1MDY0LDM3MTE5ODYuNjg3ODAyMjMyMyw4NDYxMzkzLjMzOTY0MzY4OSw1Mzk1OTcuNjc2MjQ2NjMzOCw2NzU2LjIyNzk3NTI0MjM1OAorNCxGcmkgMjggSmFuIDExLDI5NzI0MC45NzAzMDI5ODk5NCwyNjUzOTIuNzg4MTA2NTUxNSwxNTQ0ODAuMjA0MTU4ODg3MTgsMzE5MzUxLjE1NzUwNDA4ODc3LDMyMTkwMi43NjE3MTYwMTIyNiw1MjAzNjg0LjMyMjE4OTQ4Myw1NjU0ODM4LjM2MjkzMTQwNyw0NjM0NjgwLjEyMjI4NTYzMTUsNDAyNTY4Ny4zOTM1NjY2MzU0LDUwMzMxMjIuODgxODY5NDMyNSwxMDIyMDc5LjI0NTMxMDM0OTcsNTk3NDg4Ni42MDQ2NzQ5NjEsMTE4MjQ2NC40OTg5NDE1NjUsMzEzODk4OC4xMDY2MDUxNDE0LDI4MDU2ODMuMjIwMTc3OTA4NCw2NDQwNjkxLjEzNTcxMTYwMSw0NjY2MDI2LjY0NDkyOTIxMSwxMzEyMjU5Ljc0Mjc5MzQ5MiwzODE5MjcxLjU2NDQ0Mzg0NCwyNTQzNTI4LjAzNDE5MDgyNTcsMzc1NzU4OC44ODAzMTkxMzE1LDQxNzI3MDcuMjA5NzU0NTgyNSwzNzEyMDAxLjUzNTc0ODk4MzcsODQ2MTQyNy4xODM3NzMyOTYsNTM5NTk5LjgzMzc4NTI2MjgsNjc1Ni4yNTUwMDAxNTQyNTk1Cis1LFNhdCAyOSBKYW4gMTEsMjk3MjQyLjE1OTIzNzYzOTYzLDI2NTM5My44NDk2Nzc3MDM5LDE1NDQ4MC44MjIwNzk3MDM4MiwzMTkzNTIuNDMwMDQ1MTg0NiwzMjE5MDQuMDQ5MzI3MDU5MSw1MjAzNzA1LjEzNTE2OTcxMiw1NjU0ODYwLjk4MjI4NDg1OSw0NjM0Njk4LjY2MTAwNjEyMSw0MDI1NzAzLjQ5NTU2MTY0ODYsNTAzMzE0My4wMTM4MjE2NzQsMTAyMjA4My4zMzM2MjczMzEsNTk3NDkxMC41MDQyMjEzOCwxMTgyNDY5LjIyODc5OTU2MDgsMzEzOTAwMC42NjI1NTc1NjgsMjgwNTY5NC40NDI4ODIxNjksNjQ0MDcxNi40NTUzMjc0NDQsNDY2NjA0NS4zMDQxMTI2NjUsMTMxMjI2NC45OTE4MzI0NjMzLDM4MTkyODYuODQxNTMwMTAyLDI1NDM1MzguMjA2MzQ3MjAyNCwzNzU3NjAzLjkxMDY3NDY1Myw0MTcyNzIzLjkwMDU4MzQyMTMsMzcxMjAxNi4zODM3NTUxMjY1LDg0NjE0NjEuMDI2NDUwMzA2LDUzOTYwMS45OTAzOTUzMjgsNjc1Ni4yODIwMjUxNzQyNjA1Cis2LFN1biAzMCBKYW4gMTEsMjk3MjQzLjM0ODA0MTI0Njk0LDI2NTM5NC45MTEyMTMyMTA5NiwxNTQ0ODEuNDM5OTc0MzQ4MSwzMTkzNTMuNjg2OTEyMjM1ODYsMzIxOTA1LjMzNjk0MjIxODA3LDUyMDM3MjUuOTQwNzU4ODYzLDU2NTQ4ODMuNjAxNzI1ODQyLDQ2MzQ3MTcuMTk5NjQwMTA2LDQwMjU3MTkuNTk0MzMwNTE1LDUwMzMxNjMuMTQzMjc4MTg5LDEwMjIwODcuNDIxODIyODk0OCw1OTc0OTM0LjQwMzcyNDc5MywxMTgyNDczLjk1ODY3NjQ3NiwzMTM5MDEzLjIxODUwMTY4MzMsMjgwNTcwNS42NjUyMTkzNTQsNjQ0MDc0MC44MDc2MzIwODQsNDY2NjA2My45NDExNTI1MTcsMTMxMjI3MC4yNDA4OTI0Mjk4LDM4MTkzMDIuMTE4NjQ0MzY4NCwyNTQzNTQ4LjM2OTg1NjMwNzMsMzc1NzYxOC45NDEwOTAyOTQ2LDQxNzI3NDAuNTkxNDc5MDIzLDM3MTIwMzEuMjMxNzA5ODQ5Niw4NDYxNDk0Ljg1NTU1MzE5OSw1Mzk2MDQuMTQwMjIwODY0Niw2NzU2LjMwOTA1MDMwMjM2MQorNyxNb24gMzEgSmFuIDExLDI5NzI0NC41MzY1Mzg3NDgsMjY1Mzk1Ljk3MjY1NTIzNjU1LDE1NDQ4Mi4wNTc4MDEyOTEwMywzMTkzNTQuOTA5MDAzNjg3NSwzMjE5MDYuNjI0NTU5OTgzNyw1MjAzNzQ2LjcyOTQzMjAxOCw1NjU0OTA2LjIyMTI1MDA4Niw0NjM0NzM1LjczNzk1NDY2LDQwMjU3MzUuNjg1NjY1NzQ0NCw1MDMzMTgzLjI2NjkwNjQwNywxMDIyMDkxLjUwOTY5NzI5NzUsNTk3NDk1OC4zMDI5ODQyNTIsMTE4MjQ3OC42ODg1NzIzMTA4LDMxMzkwMjUuNzc0MzUyNjIyLDI4MDU3MTYuODg2NjEzNTQ2NCw2NDQwNzYzLjA5NTk1OTUzNyw0NjY2MDgyLjUyNzUxMTA1LDEzMTIyNzUuNDg5OTczMzkwNSwzODE5MzE3LjM5NTczODY1NTIsMjU0MzU1OC41MTM1ODE5ODU2LDM3NTc2MzMuOTcxNTY2MDU2LDQxNzI3NTcuMjgyNDQxMzg2LDM3MTIwNDYuMDc5NDUyNDk1LDg0NjE1MjguNjUzNDY4NjMsNTM5NjA2LjI3NDc0ODU4NzYsNjc1Ni4zMzYwNzU1Mzg1NjMKKzgsVHVlIDEgRmViIDExLDI5NzI0NS43MjM3NDk5NDAxNywyNjUzOTcuMDMzNTc2NzE4MSwxNTQ0ODIuNjc1MTkwNzE0LDMxOTM1Ni4wMTYzMzE3MjY3NCwzMjE5MDcuOTEyMTY0MzMzNiw1MjAzNzY3LjQ1MTgyOTU5NTUsNTY1NDkyOC44NDA4MTE0MTcsNDYzNDc1NC4yNzM2OTg4MjM1LDQwMjU3NTEuNzQ3MTc3NTUyNCw1MDMzMjAzLjM2NTYyNTk5OCwxMDIyMDk1LjU5NTUwMjEzMzEsNTk3NDk4Mi4xOTk5Mjg4MDUsMTE4MjQ4My40MTg0ODcwNTY2LDMxMzkwMzguMzI5Mjg5Mzc0LDI4MDU3MjguMTAyMTI2NDQ3LDY0NDA3NzkuMTY1MDAwNjM3LDQ2NjYxMDAuOTA3Mjg1NjMzNSwxMzEyMjgwLjczOTA3NDg1MjMsMzgxOTMzMi42NzIzMzM1MTM0LDI1NDM1NjguNTc3NTEzNjIsMzc1NzY0OS4wMDIxMDE3MTk0LDQxNzI3NzMuOTczNDY0MzY1NiwzNzEyMDYwLjkyNTQ1NzIxLDg0NjE1NjIuMzIzODA5MTQsNTM5NjA4LjM1Mzc5NjUzNTIsNjc1Ni4zNjMxMDA3MDg5MjYKKzksV2VkIDIgRmViIDExLDI5NzI0Ni45MDcyNzAyNjk5LDI2NTM5OC4wOTI4OTQwOTQ5NCwxNTQ0ODMuMjkxMTg3NzE1NiwzMTkzNTYuODIyMDUyMDUzNywzMjE5MDkuMTk5NzEzMzI2OSw1MjAzNzg3Ljk4ODI0NTg4OSw1NjU0OTUxLjQ2MDI4ODgzOCw0NjM0NzcyLjgwMTAyMTk2NSw0MDI1NzY3LjcyNDM0NjkzODUsNTAzMzIyMy4zOTI0ODQ1MTEsMTAyMjA5OS42NzQ3Mjk0NzgxLDU5NzUwMDYuMDg5MTQ5ODIyLDExODI0ODguMTQ4NDIwNjg5OSwzMTM5MDUwLjg4MTE3NzgxMiwyODA1NzM5LjI5OTA0ODgwNiw2NDQwNzc5LjUxMjg3NjkyNyw0NjY2MTE4LjY5OTM3Nzk4LDEzMTIyODUuOTg4MTk1NDM3NSwzODE5MzQ3Ljk0NzE3OTYyMywyNTQzNTc4LjQxNTI1MTUyNjUsMzc1NzY2NC4wMzI2OTY2NzkyLDQxNzI3OTAuNjY0NTMwNzYsMzcxMjA3NS43NjU3NjMzOTgzLDg0NjE1OTUuNjMwODk5OTI5LDUzOTYxMC4yODEzOTQxMDksNjc1Ni4zOTAxMjUzMjY0NjMKKzEwLFRodSAzIEZlYiAxMSwyOTcyNDguMDc4MzYyNjUxNDYsMjY1Mzk5LjE0NjMyMzExNzU0LDE1NDQ4My45MDE2NDMwMDU3OCwzMTkzNTYuNzYzMzc2MTg3LDMyMTkxMC40ODcwMDE2NzM0LDUyMDM4MDcuOTI2ODAzNjgxLDU2NTQ5NzQuMDc5MDgxMTM3LDQ2MzQ3OTEuMjkzMDI3MzYzLDQwMjU3ODMuNDI1NTI0MDA4LDUwMzMyNDMuMTc0MzY3NjcyLDEwMjIxMDMuNzI3OTc0MDQ2LDU5NzUwMjkuOTQ0NzE2MDE1LDExODI0OTIuODc4MzczMDA4MiwzMTM5MDYzLjQyMDIwNjE3ODQsMjgwNTc1MC40MjA2NjI0NDY0LDY0NDA3MzYuNTQ3NjI3MTA3LDQ2NjYxMzQuNTQyNTUxMDM2LDEzMTIyOTEuMjM3MzI1OTQ1OSwzODE5MzYzLjIxNDM5ODYzLDI1NDM1ODcuNTA4Nzk1OTAwMywzNzU3Njc5LjA2MzM0Njg5NTQsNDE3MjgwNy4zNTU1MDMxMDkzLDM3MTIwOTAuNTgyMzYwMDk3Nyw4NDYxNjI3LjczMTg2NTUzNiw1Mzk2MTEuNzQ3MDMyNjQ1NCw2NzU2LjQxNzE0NjA1NTQ4MworMTEsRnJpIDQgRmViIDExLDI5NzI0OS4yMTE5NTg2NTIyLDI2NTQwMC4xODExNjQ5MzAzNCwxNTQ0ODQuNDkzODMxNTY3NSwzMTkzNTQuMzY0NTQ3Njg3MDYsMzIxOTExLjc3MzM3NTQwMzM3LDUyMDM4MjYuMTEzODQ5MDEzLDU2NTQ5OTYuNjk1MjY0NTk5LDQ2MzQ4MDkuNjY1NjcwMTYzLDQwMjU3OTguMzA4NjU2NDQyNCw1MDMzMjYyLjIxMTUxNjg2MiwxMDIyMTA3LjY5NTkxNTA3OSw1OTc1MDUzLjY4NDUzMTgyNjUsMTE4MjQ5Ny42MDgzNDMyODcsMzEzOTA3NS45MTU3MTQ5MTAzLDI4MDU3NjEuMjkxMzY1MTExNyw2NDQwNTc5LjI3MzQ0NzI1Nyw0NjY2MTQ0LjU1OTg5OTE3NiwxMzEyMjk2LjQ4NjQzNDc4ODQsMzgxOTM3OC40NTU0ODcxMzA3LDI1NDM1OTQuMzg4OTI5MjkzLDM3NTc2OTQuMDk0MDM4NTA0Niw0MTcyODI0LjA0NTg5MzI3NiwzNzEyMTA1LjMxOTE2NDQyNzUsODQ2MTY1Ni4yMjQ3NjI5NTIsNTM5NjExLjkwNjAxNTM5MzQsNjc1Ni40NDQxNTEzODMzMDkKKzEyLFNhdCA1IEZlYiAxMSwyOTcyNTAuMjI3OTgzMjYwNzYsMjY1NDAxLjE1NTMzMzI2NzEsMTU0NDg1LjAyMzE5OTkxODk0LDMxOTM0NS41MjI4MjU5NTkyNSwzMjE5MTMuMDU2MzQ1MDk4Niw1MjAzODM5LjAxNjE2NjE4MSw1NjU1MDE5LjMwMTQyMzA2MzUsNDYzNDgyNy42MTI0NzA3NDksNDAyNTgxMC42ODI4NjA5MzM3LDUwMzMyNzguODkwNjY5NDgsMTAyMjExMS4zNzE5MTIxMTQ4LDU5NzUwNzcuMDAwNDk3MTgxLDExODI1MDIuMzM4MzI3OTM2MSwzMTM5MDg4LjI1NTkzOTQzMiwyODA1NzcxLjI3NzQ3MTUwOSw2NDQwMTEzLjkwNjEyOTQyNyw0NjY2MTM2LjUyOTYxNDUyOCwxMzEyMzAxLjczNTM4NzI4OCwzODE5MzkzLjYwMTgzMjE3MzMsMjU0MzU5NC40NTY4MzEyNjE1LDM3NTc3MDkuMTI0NzEyMTY1NCw0MTcyODQwLjczMzM4NDMzMzYsMzcxMjExOS43NzMxODYzODksODQ2MTY3My41MjkxODE2OTYsNTM5NjA4LjI4NzEwNzM0NTYsNjc1Ni40NzEwOTIyMDQ5MjYKKzEzLFN1biA2IEZlYiAxMSwyOTcyNTAuODg4MDQ2MDYxNCwyNjU0MDEuOTQwNjc3ODUyOTUsMTU0NDg1LjM0OTI2NTgzMDYyLDMxOTMxOS4yMzQ4NzA0NzAzLDMyMTkxNC4zMjc2NDk1MDE0NCw1MjAzODM2LjQyOTI0NjY0OCw1NjU1MDQxLjg3Mjc2MTE4MSw0NjM0ODQ0LjE0MjAwOTYxNSw0MDI1ODE1LjU5NzM3NTI2Niw1MDMzMjg4LjM3MzkwMDY2NiwxMDIyMTE0LjEwNjQzMTk4MzUsNTk3NTA5OC44Nzg2MjcwNDUsMTE4MjUwNy4wNjgzMTM0MTY2LDMxMzkxMDAuMDc5NDI1OTMxNCwyODA1Nzc4LjM0MDU3MTE3Miw2NDM4ODI3Ljg2NDk4MDA3LDQ2NjYwNzQuNDA5OTAxODI1LDEzMTIzMDYuOTgzNzEwMTQ3NCwzODE5NDA4LjQyOTIxMzAwMTQsMjU0MzU3NC4yMTg2MDQ5OTMsMzc1NzcyNC4xNTUxNTg4NTQ2LDQxNzI4NTcuNDA5Mzk5ODcwMywzNzEyMTMzLjI5MDc4MTI3NDQsODQ2MTY1Ny4yNzAxNDg4MTcsNTM5NTkzLjk5NDIzNjQ4MTYsNjc1Ni40OTc3OTYwMzEyNQorMTQsTW9uIDcgRmViIDExLDI5NzI1MC40NjM4MDc5NjQzNSwyNjU0MDIuMTM3ODQ0NzM3NywxNTQ0ODUuMDE3NDYzNjQwOTIsMzE5MjQ1LjY3ODA2ODQ2ODMsMzIxOTE1LjU1ODcxMjMxODM2LDUyMDM3ODguMjk3NDY5NTY0LDU2NTUwNjQuMzIyNTQwMjAzLDQ2MzQ4NTUuOTM3NTgwOTEsNDAyNTc5OC4yMTMzOTQxMDc4LDUwMzMyNzUuNzUyNzc1OTA3NSwxMDIyMTEzLjgwMzY3ODAzNiw1OTc1MTE1Ljg1MDMwMDg2MSwxMTgyNTExLjc5ODI0NDQ5MjIsMzEzOTExMC4xNzc2MzgzMzA1LDI4MDU3NzUuNjkxOTE3MjQ5LDY0MzUzNTEuNjcyMDMwMTQzLDQ2NjU4NDkuMzkzMDc4MzA2LDEzMTIzMTIuMjI5NjY4NDE5MywzODE5NDIyLjE3NzMwOTIyNSwyNTQzNDkzLjE3Mzc2NTU2OSwzNzU3NzM5LjE4NDYwODI2MTYsNDE3Mjg3NC4wNDAwNTEwMDY3LDM3MTIxNDMuNjk4MjM5ODYyNSw4NDYxNTM5LjgwMDc2ODI0MSw1Mzk1NDkuNTAzMDYxMjQsNjc1Ni41MjM2MzUyMDc0MzgKKzE1LFR1ZSA4IEZlYiAxMSwyOTcyNDYuNzgwOTk2NzM4NDcsMjY1NDAwLjUzNzI2NTc2MDUzLDE1NDQ4Mi42MDkyMDY4NTcxLDMxOTA0NS4yOTk2MjIyMzUwNiwzMjE5MTYuNjU1MzM5NjY3LDUyMDM2MDcuNzc2NjE5NzUxLDU2NTUwODYuMzYyMjA1NDI1LDQ2MzQ4NTIuMzU1NjIyNDM3LDQwMjU3MTQuOTU3Mjg2MTQ5Myw1MDMzMTk2LjE5NTI4Njg1MywxMDIyMTAzLjkzNTgwNDQxOTUsNTk3NTExNi41ODMzMDYzNDYsMTE4MjUxNi41Mjc5MTYzNjE2LDMxMzkxMTQuNjc0MjcwODExNSwyODA1NzQxLjYxMTQ0NzM4MzYsNjQyNjEwMi4xMjIxNjc2OTUsNDY2NTE0MC40ODIxNTg5NDksMTMxMjMxNy40NjczMDg2NDA1LDM4MTk0MzIuMzc5MTQyODE2NiwyNTQzMjMyLjM5MDk3NDM1MiwzNzU3NzU0LjIxMDQwNTEyMyw0MTcyODkwLjUwMjUwMDUxMTcsMzcxMjE0NC4wNTM5NjU2MDg2LDg0NjExMjEuMDk1MzEwMzk3LDUzOTQyMC40NTU0MzU5NDEyLDY3NTYuNTQ2NDcxMjc5MzY1NQorMTYsV2VkIDkgRmViIDExLDI5NzIzMy4zMjY5MDAyNDIzNiwyNjUzOTMuNDcyMzA4NTk3NCwxNTQ0NzMuNzAxMzMwNzEzMDUsMzE4NTA4Ljk5NTgxNzk4MzcsMzIxOTE3LjMwNTg4MTk3ODcsNTIwMzA0My43MTYzNjIzNDgsNTY1NTEwNy4wMjY3MDMxNSw0NjM0Nzk5LjE3OTM5MjY3NSw0MDI1NDM3LjQ5ODU4NzEwOCw1MDMyOTE0LjQwNDQ2NDIwOSwxMDIyMDY0LjE2OTMzODg5MDgsNTk3NTA2My45NDczNzk4NjEsMTE4MjUyMS4yNTY1NjI4Mjg2LDMxMzkxMDEuMTE2MDgyNzE0LDI4MDU2MDYuNDQ3MTA2MTU5OCw2NDAyMDE0LjI4MzIzODgxNSw0NjYzMDAxLjY2NjI2NjQ2MywxMzEyMzIyLjY3NjIxMjA3ODcsMzgxOTQzMS4wMDg0MDQxOTY3LDI1NDI0NDIuNTkxODk1Nzc3LDM3NTc3NjkuMjIzMzg1NjA4Myw0MTcyOTA2LjM0OTUxMTEyMzMsMzcxMjExMi4xNjAwODM1NjI2LDg0NTk4MDguNjA3NjYyMzMsNTM5MDU2LjI4MjY1MzQwMSw2NzU2LjU1OTA1MzA5Mzk3NQorMTcsVGh1IDEwIEZlYiAxMSwyOTcxNjkuNDYyNzk4NjgxODcsMjY1MzU3Ljc5MTM5MTk1OTEsMTU0NDI5LjU0NTQ0Mjk4NywzMTY2MTguMDU3NDQ0MzAwNDQsMzIxOTE1LjMyODQ2MTczOTM1LDUyMDA2MDAuMjI5NDYyOTYsNTY1NTExOS40NjYyNTMyMDE1LDQ2MzQ0NjQuOTEzNjUxMDgyLDQwMjQxODEuNzg5NzM0MDA0LDUwMzE1NzkuMTgxNzE1NjU3LDEwMjE4NjIuMTgwODM4MjY1MSw1OTc0NzAxLjA4NjU5NjgzMywxMTgyNTI1Ljk3ODA0NDEzLDMxMzg5ODUuMjkwNjg5NzQ4MiwyODA0OTAxLjMxOTU4ODk1NzQsNjMyNTc0Ny41NDYzNzQ0NjUsNDY1Mzc5NC4xMTc4NTg5NTgsMTMxMjMyNy43MDgxODY3MTEyLDM4MTkzNjIuOTc2NTgzNTU4LDI1MzkwMzAuNTI2NDQ5MTQwNiwzNzU3Nzg0LjE1NjQ4ODg4NCw0MTcyOTE4LjEwNzQ1ODg0MDYsMzcxMTg5OC43NjYxMDc0ODUsODQ1Mzk3OS4wNTM2MzAyMzMsNTM3NjMyLjM4NDk0MjUxOTYsNjc1Ni41MDk2MjIxMTYzNAorMTgsRnJpIDExIEZlYiAxMSwyOTY5MTMuMTExODc4MDQ1MzcsMjY1MjExLjM1MDk5MTA4MDMsMTU0MjQ1LjAwMjg1MTE0NzYsMzEyMDU4Ljg5MTQ2MzcwOTUzLDMyMTkwMS42MDI0NjUzNTUyNCw1MTkxNTI3LjAwMDMwNzgyOSw1NjU1MDk0LjM5NzQ5NjEzLDQ2MzI5MzAuNTAxNzc3Njg3LDQwMTkzMTUuNDIxNTI1NDE4OCw1MDI2MTkyLjIxOTIzNjExNiwxMDIxMDA3LjMzOTAxMTUzNTcsNTk3Mjk3Ni4yNzcyNTQ2ODQsMTE4MjUzMC42NjE3ODE0ODk4LDMxMzg0MzEuOTU2MDM2MTA2NywyODAxODE3LjA3NDY0MTQ0MjQsNjE5MjkzNi43MTk4MDQ1Niw0NjIyMTUxLjUxNjA4MjA0NCwxMzEyMzMxLjkxNTgzNDQ3MDcsMzgxOTAwNC44Njg2OTM5NjgsMjUyNjgzOC41NTAwNzY1NTcsMzc1Nzc5OC43MTI3NjI0NDMzLDQxNzI5MDkuMjIyNDYzODgzLDM3MTA5MTUuODE4NjI2MTQwNyw4NDMxOTAyLjI4Njk1NDM2Niw1MzMyODIuMzA5NTAzNzAzNCw2NzU2LjE3ODM2NTc0NzI3MworMTksU2F0IDEyIEZlYiAxMSwyOTU4NDQuNTI2MTAxODUyOSwyNjQ2MDYuNjM1MTUyNDkxNiwxNTM0NzAuNDM1OTMyNjAwMzgsMzA1MTIwLjU4MjM5MzM4MDksMzIxODI0LjM0ODgyNzE4ODIsNTE1ODcyOC42Mjc4NjAwMzgsNTY1NDg1OS4zODMwODk4MDYsNDYyNTM3Mi45NDM4ODg3Miw0MDAwMjAxLjkyMjgyNDAzMDcsNTAwMzkwOS4zMDM5Mjg0NDEsMTAxNzI2MC42OTk5Njk3NTE1LDU5NjQxOTIuOTE0OTcyMzQ5LDExODI1MzUuMTAxNjc5NTQwMiwzMTM1NjQwLjQwMTQxOTUzLDI3ODgxNjYuNzA0Nzg1NTMxNCw2MDQwNjc2LjY4MDc3MzM4LDQ1NDQxODkuMjQ1MTUwMzAyLDEzMTIzMzEuNDQxNjMxNjMyOSwzODE3MTUyLjMzNDQ2NDEzNywyNDkxOTUwLjAzMzQ1OTM3MywzNzU3ODExLjA5NTgyNTcxMTcsNDE3Mjc3Mi45NDczMTIyNzM2LDM3MDYwNzQuODM2ODY5MzU1Myw4MzU1MTU0Ljg4MjQyMjY4OSw1MjM4MTAuNzE0Njk0MjU2Nyw2NzU0LjMwODI0MzIxNDUwMQorMjAsU3VuIDEzIEZlYiAxMSwyOTI1NjQuNzM1NDE2ODQwOCwyNjI4MjkuMjA5OTQxOTc0NDMsMTUxMzQ1LjE4MTIwODg2MTMsMjk3NjY4LjEzNDU1MDY1MiwzMjE0NDIuNDkyMzYxNjMxNCw1MDgwMjY3Ljg3MDkxMTU3MSw1NjUzNTM5Ljk3Mjg0NTQ1MSw0NTk0OTk0Ljc1NzY5ODc1MiwzOTQ3Njg4LjI3NDg1NzM3LDQ5Mzk4NDQuNTAwMDc5Mzg5LDEwMDU2NjAuMzU2MTYwMjA2OCw1OTI3NTAxLjE1Njc5MzI3MSwxMTgyNTM4LjA1ODU4MDgxODgsMzEyMzQwMi41ODYyNTkyNTQ3LDI3NDk0ODQuODQ3Mjg1NzYsNTg5MzMzNi44NTA0MTk0MzEsNDQ0MDAxOS4xMTIwODkwMjEsMTMxMjMwNi41NTU5MzIzOTkxLDM4MDg4NzQuOTAwMjk3MTUxLDI0MzgyODQuMzE5OTAxNDM2NiwzNzU3ODExLjkwNjQ2NzYyOTYsNDE3MTkwOS40NjcwMTQ3ODUsMzY4NjAzOC4yOTEzNzE1NDUzLDgyMDA5NTMuMTc1MTI4NDY1NSw1MTE2NzkuNjg4MTU1NjMzNzUsNjc0NS4xMzcwNzYwNzc1OTkKKzIxLE1vbiAxNCBGZWIgMTEsMjg2NzYxLjE2Nzk3Mjc3ODYsMjU5MjY3LjU5Mjg4NDY3MDY4LDE0ODA5My43NzEyNzMzNzMzNCwyOTA1ODIuMTU1NzQwMDMwOCwzMTk4MTYuODY0ODc0Njg4MTUsNDk2ODM0OC40NTc4MTIzODcsNTY0NjgyNy4wMjEwMjc0OTksNDUyMTExMS43MjIxMjQwMDQsMzg2NDU4NS41ODg3ODc5NTQzLDQ4MzY0NzUuMDA2OTg5ODE1LDk4NTQ4Mi40MTc3OTExODc1LDU4MzQ3MjcuMzk3ODI3ODEsMTE4MjUzMS42NzU1NjI0NzUsMzA4NTc0NS43MzgyNjE5OTM1LDI2OTAyMjkuNjUwNzA3NDMwNyw1NzYwNzQwLjAxMDMwODA5OCw0MzMxNTEyLjY2MjQzMTEwOSwxMzEyMTU1Ljg3NDY1OTgzNzcsMzc3OTA4MS4yMDExMzYxNjEsMjM3OTIzMi45OTgzMzI0NSwzNzU3NzUxLjA2Mjk3NjA1Niw0MTY3MDEyLjI1OTY0NzIxNTMsMzYzMjUzNi45NDczNTUwMDUsODAwOTMyNS4wMjQ0MDkwMDMsNDk5MjMzLjMzMTIyMDA0Niw2NzA4LjU3MjU5MDA4NTg1NAorMjIsVHVlIDE1IEZlYiAxMSwyNzk5ODkuNTk4MTc2NzQyLDI1NDE0OC43MTAyMjQ3MjI1LDE0NDUyOC41NTgxNTI2ODY3OCwyODQyNDIuNjY4NDQ0MTg4NTQsMzE1NDMwLjEwNTU0MDg5MzMzLDQ4NDg2MTguMzYyODY1MjY0NSw1NjE5MjMxLjE5Mzc3OTgyMyw0NDIwMzA1LjQxMjEzMzM3MywzNzcyMDg2LjM1OTExNjIwMyw0NzIwNzIzLjU2OTM1NDQ2MTUsOTYyMTI5LjEyMTcwNTYzMzcsNTcwNTYyNS42Nzg1NzUwMDcsMTE4MjQ3MS40ODAwMjAyOTc3LDMwMjMxNzcuNDg2MzIwODExMywyNjI1MzMzLjE3ODU1MTQ2Niw1NjQ1ODg5Ljk1MjM3ODk4Nyw0MjI5NjY3LjUxMDIwMTUzMDUsMTMxMTQyMy4xNDM3MjM1NTc1LDM3MTUxMjYuNzE1OTk3NDE3NSwyMzIyMzU1LjA4Nzg0MjE1NjYsMzc1NzM4OS4xNzg0MTYzMjQsNDE0NTM1MC43MjMzOTQ0OTMsMzU1NDEzMy45ODM3NDAxMzQ2LDc4MTUxNzUuNzk1MzU3NzA2LDQ4NzYzOC4zNTI4MzI2NTExLDY2MTYuOTcxODE5NjIyOTQzCisyMyxXZWQgMTYgRmViIDExLDI3MzI1My4yMjAzNjkwNjU2NSwyNDgzMTQuMzg5MjgxNTY5NDYsMTQxMDgxLjA2NzE4NTUwMDAzLDI3ODc3MS4zOTI5ODI1OTgsMzA4NzU2LjQyODczOTMwNjQ2LDQ3MzQyMjAuNDIxMjIxOTgzLDU1NDQyMjYuNzA0MjAxNTQ1LDQzMTM0NDAuNjQ1NjU4NTc1LDM2ODIwMDYuODA1ODgyOTQ2LDQ2MDc2ODUuMDQzMzg3MDMzLDkzODk3OS44NjA0NDQ5NTQyLDU1Njc3MzkuNDM5ODM3OTQ1LDExODIxMjguNzg4MzA4MzQ5MiwyOTUxNDA5LjkzMTI4Mjk5MzQsMjU2MjYxNS40NDU2MjU4NDQ0LDU1NDg4OTYuNDY4NzYwMDQxNSw0MTM5MDgxLjQzMDQ0ODk2NjYsMTMwODI1Ni44MTE4MDczNzIxLDM2MzEyODEuMzU2OTE2OTA3MiwyMjcwOTgzLjg5MzI5OTUzNTQsMzc1NTYyOC4wMDE1NDY5Mjk2LDQwODcwMTYuMDM1OTQ4MzEyNCwzNDY4NjUyLjMxMDgwODYyNTUsNzYzNDgwMS4xMjA1NTczNDgsNDc3MzcyLjEwOTg5MTMwMjEsNjQ3OC40OTMwNzkwMzQ1NDI1CisyNCxUaHUgMTcgRmViIDExLDI2NjkxNy4wMzMzMjE4ODIzLDI0MjQ2NC45OTU0MjUwOTIxNywxMzc4ODIuODc5OTA3OTcxOTUsMjczOTk5LjMwOTI0NTcyNjksMzAxMzc1LjU4NzY5NzEzOTk0LDQ2Mjg3MzAuOTYxNTI5MzM2LDU0MzI2NzYuODA2NTM2Nzc0LDQyMDk5NzAuOTk3MDE1NjQ4NSwzNTk4MTQ4LjM5NTUyNTUzNzQsNDUwMjMwOS4wMjQ3NDQ4ODksOTE3MjQyLjkzMDI4MjEzNjQsNTQzMzgwMi4wMjE4NTM3NDYsMTE4MDk4OS43Nzg2NDcxMzI3LDI4Nzk2MzAuNjY3OTkwMTYyNSwyNTA0NDQ5LjczOTYwNTc5NDcsNTQ2NTM5Mi4yNjgxODI1ODUsNDA1ODY4Ni40OTAzMTUyNjQsMTI5OTc0MS42MDIyMzkxNzQzLDM1NDMyMDIuMTA5OTEwMDUzNywyMjI1MDAwLjg0ODEwMzIyNDgsMzc1MDE1NS40MzI1MzcyMjA0LDQwMDI3NjIuMDc1NTAxOTc5MywzMzg0ODg5LjYwODc1MzExNjMsNzQ3MDg2Ni44MDg1NTA2NDUsNDY4Mjg0LjI4MTM1MTY2NDksNjMyNC42MzczMjkyMjczNDUKKzI1LEZyaSAxOCBGZWIgMTEsMjYxMTUzLjAzNjI4OTAyODI3LDIzNjg3OC4yNjQxMzQxOTEyNywxMzUwMDYuMDY0NTUyODEzMSwyNjk5MzEuNTExNDYwNDI2NzMsMjkzODUzLjEwNTg3Mzg1NTIsNDUzNDMxMy4wNzAzNzc2MDgsNTI5ODkxNC40MzM3ODQzNDYsNDExMzY4My41NjkwNjg5OTk1LDM1MjI0OTkuMjAyMTU2MjUxOCw0NDA3MTQyLjExMDcyNTA3OCw4OTc0OTYuMTA2MzA4MTA5NSw1MzA4ODU0LjYwOTE0NTE4NywxMTc3OTkxLjkxMTQwODM4ODMsMjgxMTIwMy43NDM2MjY3NTE1LDI0NTIxNDEuMjM5MzIyODQ3LDUzOTUwNzAuNTIyMDY5ODQxLDM5ODkwNjcuOTkzMjk1ODYsMTI4MTg1MS42NDU4MzQ2NDQsMzQ1NjMyOS43MzQ3MDIyMjYsMjE4NDg3OC43NDYwMjQxNDA2LDM3MzYzMDIuNjY5ODExODU4LDM5MDM1MTIuMjU3MTE5ODE3NywzMzA2MjMyLjIyMTgxOTIzMDQsNzMyNTkyNC4xMDkyMjg1MTksNDYwNDMyLjcxOTgzMTI5OTUsNjE2Ny4zODAwMTk4MDQ0MTQKKzI2LFNhdCAxOSBGZWIgMTEsMjU2NTE2LjkwNjI0ODY4OTg2LDIzMjE3My44OTA2NTU1MTk5NiwxMzI3MTcuOTQ3MzQ3MDY2OTgsMjY2ODc0Ljk1MTU2NzE3MzI0LDI4NzE2MS4xMDEwODM0MDQ5LDQ0NTk1OTIuOTUxNzg2MzI3LDUxNjU2NzIuMTgxMjMyMDQ2LDQwMzQ1MjQuMzI4MjMzNTQ5NCwzNDYyMTU2LjM4NzQ3OTUyNyw0MzMxMTQ1LjgzNTkwOTEyOSw4ODE2MzQuNzUyMzUyOTIwNyw1MjA1ODk1LjU5ODkyNDk4NSwxMTY1NzY4LjYxOTg4OTU5NTgsMjc1MzY4NC41OTU2MDE1NTEyLDI0MTA1NDYuOTgwMTA2NjU1LDUzNDI5NDMuMjE1MjY3NTI4LDM5MzU4NDguNTIzNjI2MzkyNywxMjQ5ODM0LjA0MDQwNDg5NDksMzM4MTEwMi41OTk3Njc0NjMzLDIxNTM5NTcuMzU2MTkyODUyLDM2ODYwNjkuNDQxMzAzNzE1LDM4MDU3MjMuNjc1MjUwODczLDMyNDEwMTcuMDkxNTU3NjIzNCw3MjEyNjU0LjgyMjQ0NDI2Miw0NTQ0NDUuNDg0OTQzNDI5OTQsNjAyNy4xNjQxNzY4MTQyMjUKKzI3LFN1biAyMCBGZWIgMTEsMjUyNDIzLjI3MjQ4MTg4NDc4LDIyNzk2OS4yODg2ODI4NTYzNiwxMzA3MDMuNzMzODUwNjg3NzcsMjY0MjI2Ljg1MTA1NTU5MzgsMjgxMDk4LjAwNDU1MTUxMTIsNDM5MzkwNy44MTU5NzgyNDYsNTA0MTg0MS45NjUzMTIyNTcsMzk2NDIxNy45NDgzNDkxOTcsMzQwODk5NC45MTIyNjI2NzYsNDI2NDE3My41MDM4MDk4NzIsODY3NjM0LjU3MjM2NzU0MjcsNTExNDM5NS4zMjMzOTQyMTc1LDExNDU4OTUuNTU2OTc0ODI1NCwyNzAyMzAxLjA5ODIxNzQwMzUsMjM3MzkzNC4zNzEyNjEzMDEsNTI5Nzk1Ny4xOTc5NTYzMTYsMzg4OTUxNS43Mjk5NTgyNTMsMTIxNzMwMy4yMzE0NjQ5NTM0LDMzMTMzOTIuNzg3MTk2OTQ2MywyMTI2OTc1LjIwNjUyMzYwOTMsMzYxMzQ0NC43OTgzNjYwNjIzLDM3MTUwNTIuMzY3ODc0NjY5NCwzMTgyOTY2LjI2NDA2Njc4MSw3MTEzNDI5LjA1NzUzNzA2LDQ0OTIzNi42MTk5OTQzNjM4Niw1OTAwLjA1NTQ3Nzc1NDgyOAorMjgsTW9uIDIxIEZlYiAxMSwyNDkyMzUuODU1MTE0MTA1MywyMjQ2MzEuNjc5NjQ1NTU0NDgsMTI5MTQzLjExNDQ4MjU1NjU3LDI2MjIyNy44MDU2MDU1MjU3LDI3NjE4My40Mzc2MTA3MzM0NCw0MzQzMTI3LjY0NzI5ODA4NSw0OTM3NjQ0Ljk1MjI0NjUzNiwzOTA4OTYyLjE3OTg2ODcwMywzMzY3NzUyLjM0OTM0OTUxMSw0MjEyMTkxLjIxNjU1ODU2MzUsODU2NzQwLjExNzg1NDY3MDIsNTA0MjQxMy4xNDE5OTk2NCwxMTE2NzU0LjAwNTgyMzk4MiwyNjYxNTQ2LjUyOTI2ODEzMzUsMjM0NTU3MC4wNjY2NjU5NzQsNTI2NDIxMy42MTQ1OTQyOTYsMzg1NDI1OS42MTQ4MDcyNTkzLDExODY1OTcuNDk1NjAyNjc0LDMyNTkwNTguMzc4NzU4NjU0LDIxMDYzNjUuODgxNzc4OTM5LDM1MjAwNjEuMjI0Nzg1MTcwNSwzNjM5MDA4Ljk4OTI1MDIwMzYsMzEzNzE4MS4zOTA5NzI5NjU0LDcwMzcxNTQuMDE1MTY3NTY4LDQ0NTI3Ny40ODAzMjQzOTg0LDU3OTYuOTM4MDE5NDcyNzUKKzI5LFR1ZSAyMiBGZWIgMTEsMjQ2NjgwLjE2NjUxNTY3ODA4LDIyMTkyOS4zOTcxNDUyMjYwNCwxMjc4OTQuODk3Nzg4OTAxODYsMjYwNjQ5LjIyNTQyNjQ1NjE2LDI3MjE2My44NDcyODUyNzI5Niw0MzAyNTU3LjMyNTU0MTk2Myw0ODUwOTAxLjI3NjA3Nzk0MywzODY0NDUwLjgwNTQ3ODMzMzUsMzMzNDc0NC4yNjM2NDU2MjQ3LDQxNzA1NzcuNzI2MDEwNzg1NCw4NDgwMDcuNTI4MjQ1MTY1Niw0OTg0Mzk5Ljg4MjgxNzExNzUsMTA4NzY4MS4zMTA1ODA3MDQ2LDI2Mjg1NjYuOTAzOTk3NDY5NywyMzIyODg1LjE2NjYyNDkzNjMsNTIzNzY0Ni45NTMyMTE5NzMsMzgyNjMxNC4xODIzODMxODUzLDExNTk3NDcuNzAwNDI0ODY5MywzMjE0ODM1LjY3NTgzNDI5OCwyMDg5OTk5LjQ3NzQ3Mjc0OSwzNDI5ODE3Ljk2NTYwMjYzNywzNTc1ODAwLjI4MDQxODAyNSwzMTAwMjM0LjM3MDgxMTA4NzUsNjk3NjM4OC45NjkyMDk3OTQsNDQyMTQwLjk0NjI4NjE1ODY0LDU3MTIuNTYzNTkzMTQ4ODUyCiszMCxXZWQgMjMgRmViIDExLDI0NDY1Ni40MDIxODg2OTA2LDIxOTc3NC4wNDU4MzAwNTE4NSwxMjY5MDguMjU5OTQ4MzYyMTMsMjU5NDEyLjMzNDE2ODI3NDU3LDI2ODkzNC4zNjcwMDc5MDU0LDQyNzA1MTQuMDc0NTc2ODE1LDQ3ODAzMTMuMzIwNzIzMTI0LDM4MjkwODQuMDg5MTA5NDkwNiwzMzA4NjQxLjAzMzExNzA4ODUsNDEzNzY2My42ODM5MDk1MzczLDg0MTA5NC4wNDI1NjQ1NzA5LDQ5MzgyODkuMDM3Mjk5MDA5LDEwNjExOTguNjY3MDI1NzY4MiwyNjAyMjc1LjMzODYwMzA4NCwyMzA0OTU1LjE2MzcxOTQ1MjUsNTIxNjg2OS40NjY3MTgxNzksMzgwNDM2NS45NTQwMjU5NzI2LDExMzcxNDYuMTU3ODMwMzU1NywzMTc5NDMyLjA5MzY2ODk2NjYsMjA3NzEyOC42NDI4MjA1NjEsMzM0OTA0Ny44NDEzODM4OCwzNTI0NDIwLjMyNjExMjA4NTUsMzA3MDg0MC4wODg1NDA1MzgsNjkyODQ5NC42OTQ0MDQzMDYsNDM5Njc4LjMxMzM2NTg0OTg0LDU2NDQuNzUyNjg1NDA4MjExCiszMSxUaHUgMjQgRmViIDExLDI0MzA2OC41ODIzMjY4MDc2MywyMTgwNzQuMTMyOTE4MTczMjcsMTI2MTM1LjExOTMxNDk0OTg0LDI1ODQ0OC4wNjc5OTE4NjYyNiwyNjYzNzQuNDMxMzIxMzExMzMsNDI0NTQxNy4zNDQ5OTA5ODIsNDcyMzg0NS4xNjM0MjIzODMsMzgwMTI3MC44MDkyMDEwNzksMzI4ODE3OS41MTYxMTI1NDIyLDQxMTE4NjAuNjE2MDAwOTY3Niw4MzU2NzAuNjk0Nzk5Mzk1Niw0OTAyMDE3LjQ1NzU4NjYxNSwxMDM4MzY2LjYzNzAyOTcwNTUsMjU4MTU1MC4yMDc4MjM1NjM0LDIyOTA5MDUuNzIyNjk2NDY4Nyw1MjAwNjg0LjY3NTI5MjU2NCwzNzg3MjM3LjY4MjA3MjU1ODQsMTExODYzMC4zNTk0MDQ5MjgsMzE1MTQzOS45NDMzMjU1OTksMjA2NzA3Ni4zOTE3NTA0MDI1LDMyODAxNjEuOTQ5MTc3MzgyNSwzNDgzMzUwLjQ5MjAxODYyNDcsMzA0NzcwMi42NDMzNzQxMTcsNjg5MTAzNS4zNDI5MzQ4OCw0Mzc3NTYuNzMzNDQ5NzY1ODMsNTU5MC45ODcyODY5Nzg5OTUKKzMyLEZyaSAyNSBGZWIgMTEsMjQxODI5LjY4MjI4ODU0MzgsMjE2NzQyLjk2NTU4NTU4MTIzLDEyNTUzMi4zMzg4MjcyMzI2NiwyNTc2OTcuNjY5MzMwNTg3MywyNjQzNjMuMzkxMDM2MTg2Nyw0MjI1ODU1LjgxNjU2NTU4LDQ2NzkxOTkuMDkwODc3NTYsMzc3OTUzNy44NDQ0NjI2MDI0LDMyNzIyMjMuMzkwNzkwMzYwNSw0MDkxNzM4LjAyMzc0NDc2ODUsODMxNDM5LjU5NTY2MTc2MDQsNDg3MzY3MC44NzQ3MjE1MzcsMTAxOTM2NC4yNjY2NDc3NTQ2LDI1NjUzMzAuNTkyOTI5NTMzNywyMjc5OTUyLjYwMjgwNjQ0NTcsNTE4ODA4Ny42MTQ4NTgxMjEsMzc3MzkxMS41ODc4OTA1Mzc1LDExMDM3NDMuMDc3ODczNjMwNCwzMTI5NDg4LjIwNjI2NjgwMiwyMDU5MjUzLjAwMjc5MDc0MDcsMzIyMzIzNS43MDQwOTA5ODY0LDM0NTA4OTcuMjU0OTg1MzI2LDMwMjk2MTIuNTA5NDQzMzgxLDY4NjE4NjEuMzU5NjAwMTQ2LDQzNjI2MS42MjAzNDMxMjE5Myw1NTQ4Ljc0MTgzNTU5OTYwNApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Ob25aZXJvTW9ydGFsaXR5UmF0ZV9GRF9SZWZlcmVuY2UvSHVtYW5Qb3B1bGF0aW9uTW9kZWwvaHVtYW4vRGVhdGhzXzAuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Ob25aZXJvTW9ydGFsaXR5UmF0ZV9GRF9SZWZlcmVuY2UvSHVtYW5Qb3B1bGF0aW9uTW9kZWwvaHVtYW4vRGVhdGhzXzAuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJjMjQ0MDEKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L05vblplcm9Nb3J0YWxpdHlSYXRlX0ZEX1JlZmVyZW5jZS9IdW1hblBvcHVsYXRpb25Nb2RlbC9odW1hbi9EZWF0aHNfMC5jc3YKQEAgLTAsMCArMSBAQAoraXRlcmF0aW9uLHRpbWUsCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L05vblplcm9Nb3J0YWxpdHlSYXRlX0ZEX1JlZmVyZW5jZS9IdW1hblBvcHVsYXRpb25Nb2RlbC9odW1hbi9EZWF0aHNfMS5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L05vblplcm9Nb3J0YWxpdHlSYXRlX0ZEX1JlZmVyZW5jZS9IdW1hblBvcHVsYXRpb25Nb2RlbC9odW1hbi9EZWF0aHNfMS5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmMyNDQwMQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvTm9uWmVyb01vcnRhbGl0eVJhdGVfRkRfUmVmZXJlbmNlL0h1bWFuUG9wdWxhdGlvbk1vZGVsL2h1bWFuL0RlYXRoc18xLmNzdgpAQCAtMCwwICsxIEBACitpdGVyYXRpb24sdGltZSwKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvTm9uWmVyb01vcnRhbGl0eVJhdGVfRkRfUmVmZXJlbmNlL0h1bWFuUG9wdWxhdGlvbk1vZGVsL2h1bWFuL0RlYXRoc18yLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvTm9uWmVyb01vcnRhbGl0eVJhdGVfRkRfUmVmZXJlbmNlL0h1bWFuUG9wdWxhdGlvbk1vZGVsL2h1bWFuL0RlYXRoc18yLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ODQ3MTE0Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Ob25aZXJvTW9ydGFsaXR5UmF0ZV9GRF9SZWZlcmVuY2UvSHVtYW5Qb3B1bGF0aW9uTW9kZWwvaHVtYW4vRGVhdGhzXzIuY3N2CkBAIC0wLDAgKzEsMzMgQEAKK2l0ZXJhdGlvbix0aW1lLEVHLUZSRy1HMjEwMDAxLEVHLUZSRy1HMjEwMDAyLEVHLUZSRy1HMjEwMDAzLEVHLUZSRy1HMjEwMDA0LEVHLUZSRy1HMjEwMDA1LEVHLUxPRS1HMjQwMDAxLEVHLUxPRS1HMjQwMDAyLEVHLUxPRS1HMjQwMDAzLEVHLUxPRS1HMjQwMDA0LEVHLUxPRS1HMjQwMDA1LEVHLUxPRS1HMjQwMDA2LEVHLUxPRS1HMjQwMDA3LEVHLUxPRS1HMjQwMDA4LEVHLUxPRS1HMjQwMDA5LEVHLVVQRS1HMjkwMDAxLEVHLVVQRS1HMjkwMDAyLEVHLVVQRS1HMjkwMDAzLEVHLVVQRS1HMjkwMDA0LEVHLVVQRS1HMjkwMDA1LEVHLVVQRS1HMjkwMDA2LEVHLVVQRS1HMjkwMDA3LEVHLVVQRS1HMjkwMDA4LEVHLVVSRy1HMzAwMDAxLEVHLVVSRy1HMzAwMDAyLEVHLVVSRy1HMzAwMDAzLEVHLVVSRy1HMzAwMDA0CisxLFR1ZSAyNSBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMixXZWQgMjYgSmFuIDExLDEwLjQwMzMwOTEyMDg4MzA1Myw5LjI4ODYzNjExOTY1MDAxMSw1LjQwNjc0MjI2NDM5NDM1MywxMS4xNzcxNTY0NjcyOTE5NiwxMS4yNjY0NjE0NjE5ODIwOTUsMTgyLjEyNjc2NTc3NTk4NjI5LDE5Ny45MTY5Njc2ODk0ODY5NCwxNjIuMjExODU3NzI5OTE4MTQsMTQwLjg5NzM2ODAxMjIyOTY2LDE3Ni4xNTcxODY5Nzk3MTkzNCwzNS43NzIzNDQzMTYwMTMzNzQsMjA5LjExODUyMTczMTMyNTEzLDQxLjM4NTc2MDgzMTgzODI3LDEwOS44NjMyNjUzNjY3MjIxLDk4LjE5NzczNDMyOTE3ODM3LDIyNS40NzE4NjIzNzYyMTc5MywxNjMuMzA4OTcyOTM5MDY0NDYsNDUuOTI4NTM5ODUzMDg5NDEsMTMzLjY3MjkwMDY3NDMxMDE0LDg5LjAyMjQxMjk1NjA0Nzk2LDEzMS41MTQwMzI2MzY0NjUzLDE0Ni4wNDI5OTk4MTg0MDI0OCwxMjkuOTE4NDk0NzIzMDQxNjUsMjk2LjE0NjM5NzcxMTYwOTA0LDE4Ljg4NTc2NzU4MjE4OTM1MiwwLjIzNjQ2NjA4NzQwMDk5OTg2CiszLFRodSAyNyBKYW4gMTEsMjAuODA2NjU5ODU1MDAyNTksMTguNTc3MzA5MzkzODQ0NSwxMC44MTM1MDYxNTU3NTc3NjQsMjIuMzU0MzU3NjQzMjA5Nzg4LDIyLjUzMjk2Nzk4OTgxMDA0LDM2NC4yNTQyNjAwNTkwMzU3LDM5NS44MzQ3MjcwNDY4NDQ2NSwzMjQuNDI0MzY0MzA3MjY3MiwyODEuNzk1Mjk5NjEzOTMxNCwzNTIuMzE1MDc4NTg4MTg2NTcsNzEuNTQ0ODMxNzIxNDA0MDEsNDE4LjIzNzg3OTkzNjczNzIsODIuNzcxNjg3MjA2NzE5ODYsMjE5LjcyNjk3MDE4NjUwNTcsMTk2LjM5NTg2MTQ0OTI5NDA3LDQ1MC45MzIwMzEyNjYxMDk0NSwzMjYuNjE4NTk5MTE0MDIwNjQsOTEuODU3MjYzNDIwMzM4MjMsMjY3LjM0NjMzNjA0MDIyMjksMTc4LjA0NTE4MjAwMTc0Nzc1LDI2My4wMjg1OTEzMjkwNjExLDI5Mi4wODY1ODM4MDg4MDQyLDI1OS44Mzc1MDkxMjAwNjIyLDU5Mi4yOTM5ODAwMDg4MDg4LDM3Ljc3MTYxMDcwNzQ0OTAzLDAuNDcyOTMzMTIwNjY2MzQ5MworNCxGcmkgMjggSmFuIDExLDMxLjIxMDA2NjEyMzAwMDYxLDI3Ljg2NjAxOTgyMjczMjA5LDE2LjIyMDI5MTY3NDE3Njc0MiwzMy41MzM5MTk2MTI2ODIwNTUsMzMuNzk5NTE5NTgzNjY0MDksNTQ2LjM4MzMxOTU4OTE0OTgsNTkzLjc1MzI3ODA3NTIzOTgsNDg2LjYzNzUxOTczNDY0MjUsNDIyLjY5NDE1NDE0MDIxMSw1MjguNDczOTMxNjQzOTUzOCwxMDcuMzE3NDYyMjE2NzQ0MjcsNjI3LjM1ODA3NDYxOTU4MjEsMTI0LjE1Nzc3OTEyNTMwNjk0LDMyOS41OTExMTQ0NjExMDg1MywyOTQuNTk0Mzk0OTkxMjE1ODQsNjc2LjU4NDU3MjM4NDEzNyw0ODkuOTMxMjIyOTkwMTQ0MSwxMzcuNzg2MTcwNzAyNDgxMzEsNDAxLjAyMDMwNjA5OTg3NzIsMjY3LjA2OTIzODQ5OTQyMTksMzk0LjU0MzY3NjA3OTg5MTcsNDM4LjEzMDc1MTk3MzU0MTksMzg5Ljc1NzA0MzE5MzE0MDMsODg4LjQ0NDE5MDY0NzI1NDUsNTYuNjU4MzgxNDUyMDExNjcsMC43MDk0MDEwOTk3OTk4MzE4Cis1LFNhdCAyOSBKYW4gMTEsNDEuNjEzNTI5MzE1MTQyMjMsMzcuMTU0NzY3NDA2NDYxMzksMjEuNjI3MDk4ODE5NzM3NzkyLDQ0LjcxNjA3MzY1OTQ4MzQ2LDQ1LjA2NjExNjI0MzcyNDUyLDcyOC41MTQwMjc5MjU4MDMyLDc5MS42NzI2MjA3Nzc4MzksNjQ4Ljg1MTMyNDAxNDYzOTcsNTYzLjU5Mzk2NzQ3NjMwMDMsNzA0LjYzMzc3MTc5NTQ1ODQsMTQzLjA5MDIzNTgwMjYwNjUxLDgzNi40NzkxMDU3ODMyMDU4LDE2NS41NDQwMzY1ODgyNjE3Miw0MzkuNDU1Njk4MTkyMjg4NSwzOTIuNzkzMzM2MzE3NTM2NSw5MDIuNDUxOTEwODM0NDU0Niw2NTMuMjQ3MDc4Njg4MDQ1MiwxODMuNzE1MjYxNzAwMjUzNTQsNTM0LjY5NDgxMDg1NTQxMTcsMzU2LjA5NDY3NTQ1NjE4MTIsNTI2LjA1OTI4Njg5MTA2MTMsNTg0LjE3NTUwNDMxNDk1MjMsNTE5LjY3NzA5Njk0NDM1NDcsMTE4NC41OTcxNzM4MDQ2NDE0LDc1LjU0NjE2NDkwNDQzMTYsMC45NDU4NzAwMjQ4MDUyMzA5Cis2LFN1biAzMCBKYW4gMTEsNTIuMDE3MTY5OTE4MTI4Mjc1LDQ2LjQ0MzU5MjAzNjgzOTYzLDI3LjAzMzk1NjIzNjU3Njg4NCw1NS45MTM5NTEzODAwMDYzNiw1Ni4zMzI3NTkwMDg1MTUxMiw5MTAuNjUyOTM5MDQ1Nzk1NSw5ODkuNTkyNzU4MTAzNjQ2Nyw4MTEuMDY1OTM3ODA4NTE3LDcwNC40OTc2MzQ5MzY4MjYsODgwLjc5Njg5MjgxOTQzNzEsMTc4Ljg2MzI5MDI1MDIwNDE2LDEwNDUuNjAxMTEyMDM0MDAyNywyMDYuOTMwNDU5NTk2MjQ2MzUsNTQ5LjMyMDc3OTkxNjYzNzMsNDkwLjk5MzA4MjQwNDk2NDI0LDExMjkuMjg3NTQ3OTUxNzY4NCw4MTYuNTg1ODA1Njk2ODQyMywyMjkuNjQ0NTM2NDE1MjU5Niw2NjguMzY5ODgzNDA4NDg4LDQ0NS4xMjkxNTYzOTg4MjEyNCw2NTcuNTc1NDIzNzY1NTQ1LDczMC4yMjA4NDA4MzYyMTI5LDY0OS41OTc3ODExODc2MTczLDE0ODAuNzY1MDUwOTQzNjE0LDk0LjQ0MDgxNjk5MzMzNDE4LDEuMTgyMzM5ODk1Njg2MzMKKzcsTW9uIDMxIEphbiAxMSw2Mi40MjExNjI5OTA2ODQ0NjUsNTUuNzMyNTUxNTQ4NTQxNzgsMzIuNDQwOTA1NDUyNjM0NzQ1LDY3LjE0NjY1MzcxNzk1MzY3LDY3LjU5OTQ0OTM4MzU5NjE1LDEwOTIuODA5NTc3NTgxMzgxNSwxMTg3LjUxMzY5NDMyNjY3NTIsOTczLjI4MTU5NDA0MDE5Miw4NDUuNDA5MzYzODg2MjU4LDEwNTYuOTY2NjI3MTg5OTUxMiwyMTQuNjM2ODI1Mjk4NjAwOTQsMTI1NC43MjQyOTQzMjA2MzE4LDI0OC4zMTcwNDgxNDk5MjMsNjU5LjE4NjQ0NDQ5OTEyOTMsNTg5LjE5NDIwOTE1NjEyMTcsMTM1OC4xODgxMTE5OTY4NjcsOTc5Ljk3NTk0MDg2ODM4NjQsMjc1LjU3Mzk5NDg0OTQ5NTUzLDgwMi4wNDU1NzE3NDg2MDE0LDUzNC4xODM4MTcxNDUwNDY2LDc4OS4wOTIwODY3MDY3MDk2LDg3Ni4yNjY3NjE1NDA4Nzk5LDc3OS41MTkyNTY1Nzg4OTA3LDE3NzYuOTY1NDM0ODc5OTI2LDExMy4zNTA4NTA3Mzg4NDQyLDEuNDE4ODEwNzEyNDQ2OTEyNworOCxUdWUgMSBGZWIgMTEsNzIuODI2NDg4NzIzNTQ0NjgsNjUuMDIyMDczMDAwNTE5NDgsMzcuODQ4MzE2MjgzODg0MzUsNzguNDk0MTY3MTI5ODY3MjUsNzguODY2MjAzMzkxNTMwMjksMTI3NS4wMzMzMDI0NTExODUxLDEzODUuNDM1NDc1NjI0MjM4LDExMzUuNTAwNTQzNjU3MTA0MSw5ODYuMzUxNTQzODE5MDk3NiwxMjMzLjE2MjA1NTAwNzkwMTcsMjUwLjQxMjU4OTM0MTA5MTM1LDE0NjMuODUwNzIzNTgzNDg4NCwyODkuNzAzODAyMjU4NDUxNTYsNzY5LjA1MzUxMjk0Njk2MDgsNjg3LjQwMTY1NDgzMzI4OTEsMTU5My4zMDg4MzE2MzkyMjM0LDExNDMuNTczMzg0ODU4MDI1NSwzMjEuNTAzNjM3NDk2NzEzNTcsOTM1LjcyMjM1NTMyNDIzMzEsNjIzLjMxODY2NzU0MDU4NTcsOTIwLjYwOTI3NTkzNDE1NzYsMTAyMi4zMTMyNzI1NzYzMDM3LDkwOS40NDMwNDg5NjI4NTUsMjA3My4yOTQ3MTE4NTU2ODg1LDEzMi4zMTY0NDc1MDY0NDc0LDEuNjU1MjgyNjQ5MDMwMTM0NAorOSxXZWQgMiBGZWIgMTEsODMuMjM1NTUxNjIwMDY2MTYsNzQuMzEzMjM5OTMzMjIzMTIsNDMuMjU3MTQzNjE0NzMwNDk1LDkwLjE0MzMzMTQzOTg2ODksOTAuMTMzMDYyOTcyNjk0OCwxNDU3LjQ0MzgxNjc3OTE5OTYsMTU4My4zNTgyMjI5OTU3MiwxMjk3LjcyODYzNzE5MDA5NjQsMTEyNy4zNzg2OTI1NzMwMDcxLDE0MDkuNDMwMTI3NzUzODQxLDI4Ni4xOTUwOTAyMjA3NTEyNCwxNjcyLjk4NTgwODM2NDA2NTQsMzMxLjA5MDcyMTk0NjI4NTQsODc4LjkyNDExOTM1MTE2NzksNzg1LjYyODEyODQ1NzA3NjEsMTg0NC4xNTEzNDI3ODQyNDQyLDEzMDcuNzU5MjI3ODk1Mjc1MiwzNjcuNDMzNDY1NzM1NTE0NiwxMDY5LjQwMTQ4MzQzNTgyOTUsNzEyLjY4MDEwNDE1Njg1MjgsMTA1Mi4xMjY5OTIwNTY0ODA3LDExNjguMzYwMzkxMTQ2Nzc2LDEwMzkuMzczMTE4ODY3MDc3NCwyMzY5Ljk4ODU1MTY5NTQ1MSwxNTEuNDMzNTc1NzMwNjM1OTcsMS44OTE3NTYxOTI0MjEzMDkKKzEwLFRodSAzIEZlYiAxMSw5My42NTcwODg2MjE5OTQ3Nyw4My42MTAzMzY1MzM1MTQ3Myw0OC42NzE1MzY2ODA4ODA0MzYsMTAyLjY1NjkyMzM2NjU4NDM0LDEwMS40MDAyMzM0MTUwMzI5NCwxNjQwLjQ1Mjk5MDUyNzk4MjQsMTc4MS4yODI1Mzc2NDgwOCwxNDU5Ljk5Mjc3MTAzMjQwODcsMTI2OC42ODI0NTY3NTMxMTczLDE1ODUuOTQzOTU2OTAwNDc5OSwzMjIuMDAzNzMyOTY3MzA1MDQsMTg4Mi4xNTU0Nzk2NDcyMjksMzcyLjQ3NzgwNzQxNjI0NzQsOTg4LjgwODA3NTM1MDY1NzYsODgzLjkzMDM0NzQ3OTYzODcsMjEzOC4zMDY5OTM2MDU5ODY1LDE0NzMuODk0Njg0MTE1MjI3LDQxMy4zNjM0ODg3NjY3MjUyLDEyMDMuMDg4ODM0MzY4OTkyNiw4MDIuNzg2MTE3OTc3ODA2MiwxMTgzLjY0NTIzOTExNTI2NTcsMTMxNC40MDgyNTQ3MTQyMDYxLDExNjkuMzI3NDc3MDMyMzE0NCwyNjY3Ljg4OTgxNTY5MjEzLDE3MS4wMTI3MzgxNjg2MzU4NSwyLjEyODIzNDY3ODI4OTMxNTMKKzExLEZyaSA0IEZlYiAxMSwxMDQuMTE2MTY3Njc3NDAxMjYsOTIuOTI2MDYxNDI3Mjg5NzQsNTQuMTA0MjIwMjgzMjQxMTYsMTE3LjUxMDY2NTYzODIwMDUyLDExMi42NjgzNjg2NzgxMTYsMTgyNS4yMTQ0NTQzNDE2NDY4LDE5NzkuMjEwMzQzMjY5ODU2NCwxNjIyLjM3Njk4ODY2MDExOTcsMTQxMC44MDQ4Nzc5MTQyNjMyLDE3NjMuMjAzMjkxNTExMDI2NywzNTcuODk3ODM3MzI1MzEyMywyMDkxLjQ0MTgzMTY3OTQwOSw0MTMuODY1MDU5Mzk0MDk4MywxMDk4LjczNjA0MDAwNzA1Myw5ODIuNDgzOTExMjIwMzAyMywyNTQ2Ljc2OTg5ODgxMzgwNDUsMTY0NS44NTY1ODMxMzU0NjU4LDQ1OS4yOTM3MzgxNzk5MTc3LDEzMzYuODAyOTExMjI5NzMyMiw4OTUuMTA1ODk3NDI4MjE4OSwxMzE1LjE2NDAzMDk3NjM3NzUsMTQ2MC40NTczNTE0MTIxOTI2LDEyOTkuMzYyMjA1NDE0MzU1LDI5NjkuNDAwMzk5ODE5MTc5MywxOTEuODk4NjEzNTU0ODQxMTUsMi4zNjQ3Mjk2MTkxNTk0NTkKKzEyLFNhdCA1IEZlYiAxMSwxMTQuNjkyODYyMzM1MTkwOTcsMTAyLjMwMjUwMDE1NTk1MTU2LDU5LjU5OTc0NzE5MTIyNjUzNCwxMzguODA3MjA3NTgzMzQwOTgsMTIzLjkzOTk1ODE0NDUxNDM4LDIwMTUuMjYxMzU1NjEzNzI5MiwyMTc3LjE0OTA1NTkyMDk0NTYsMTc4NS4xODc3NjUwMzUwNjAyLDE1NTUuNDM2ODA3NDYwNDg5NywxOTQyLjgyMTM2NTE0MjQzMywzOTQuMDg0MDQwNDMwMjMsMjMwMS4xNTI5NjAwMjE5MDU1LDQ1NS4yNTI0ODE0NzAyMTI0LDEyMDguODE5Nzc2MTk4NDYwNCwxMDgxLjkyMjQ5NTE4NjI3MSwzMjYzLjMxOTgwODMwNzcwMjMsMTgzNS44NjY1MDU2MTk3MjM3LDUwNS4yMjQzNDg2NTEyNDI0LDE0NzAuNjEyMzI1OTUxMjQ1Niw5OTQuMjM4MTc2NjI3ODY0MiwxNDQ2LjY4MzQyNjk4MzA4NjUsMTYwNi41MDk5OTgxNDQ0NjA3LDE0MjkuNjgwMjkwOTAwNDQ2NCwzMjgyLjEwMDU3MzgzOTYwMzQsMjE2LjU2MjM4NTkzNzE5ODg1LDIuNjAxMjkwMTE5NDQ2MzY3CisxMyxTdW4gNiBGZWIgMTEsMTI1LjYyNTU1ODQyNTkzNzYsMTExLjg2NzgwMDYyODEzMjQzLDY1LjI5ODU5NzE4NDMzNTE1LDE3Ny41NDk2Mzg0NjI0NzcyOCwxMzUuMjIzMjYyOTM5MTIsMjIyMC43OTc5OTY3NzcwMjE2LDIzNzUuMTIzNDcwNTU5MjI0LDE5NDkuNDE2NTAzMDU0OTM5NSwxNzA3LjUyODkwOTc1OTk2NTIsMjEyOS42MzYwMTA2OTI5MjgzLDQzMS4yMTE4NjQwNjYxMTU1LDI1MTIuMzAyODMzMTc3NTM3Nyw0OTYuNjQwMDg3MTg0NDczOSwxMzE5LjQyMDczMTY4MDcwNzQsMTE4NC4yODQ0NzUzNDQyOTEyLDQ4MDAuNTI1NDAwMDA0MDQ0LDIwNzkuOTY1NTQyOTc3ODkwNCw1NTEuMTU1NzkzNDcxODQyLDE2MDQuNzQxMjk1NTk0NTg4OCwxMTEzLjY3NjU4NjcxMjU1OSwxNTc4LjIwMzYzNjE1NzgxMTgsMTc1Mi41NzQ3NzEyMDk2Nzc3LDE1NjAuOTM1MzY3MTY5MDY1OCwzNjI4LjM2NDg3NDM1NzAyODQsMjUxLjg5OTk3OTk5ODM2Nzc0LDIuODM4MDg4NjY1NzE4Njc5NworMTQsTW9uIDcgRmViIDExLDEzNy42NDI1ODExNTY3NTMxOCwxMjIuMDIxMzA5NDI5ODMyMTMsNzEuNjU1MzI3OTk1MzkwNTgsMjYzLjU1OTg5MDYyNDQyNTUsMTQ2LjU0Njg1ODkwMDUwNzMyLDI0NzEuODc5Mzk0NjAyNDk2NiwyNTczLjIyMDMyNDU3NDE5MiwyMTE4LjM3OTg1MzI5ODg4NjIsMTg4MS45MTk2OTkyMTU1MTcsMjMzOC41NTUzODIwMzM3MTczLDQ3MS4zNzcwNjgxNjQ0OTA1LDI3MjguMzYwMDE1NjI4NDUxLDUzOC4wMjc5MzE3NzMxNDM1LDE0MzEuNzQ3NDIyMzc5MTkxNywxMjk2LjM1ODQ4NDU0OTU4OTMsODUyNy44MzI2MzY2NjQ4LDI0ODYuOTU5MjY4NDgzMDEyLDU5Ny4wODk4MDc1NjQ2MDAyLDE3MzkuOTUwMTI4MTEwMzc0MiwxMjkzLjkyMDgyMDY2MjI3NCwxNzA5LjcyNTQyODgwMTg5NTgsMTg5OC42ODU1NTkwMzk2ODc5LDE2OTUuMzAxMTA2OTIxMzU5LDQwNzUuODM4ODg4NDY4NjExLDMxNy40MzUzMjEwMTUyOTgzNywzLjA3NTc1MjkwMzU3NjE2OQorMTUsVHVlIDggRmViIDExLDE1Mi45MTgxNjA0NzExNDc3MywxMzMuOTcyNTcxNzgyOTE4OTgsODAuMDg4NTAwNDYwMjg1MTYsNDc2LjM4ODkxODMwMjI5OTcsMTU4LjAwNDkzODM0MTY3MjUzLDI4NTUuMzQ3OTg4MDE2MjY1LDI3NzEuNzI4MTY3OTMwOTA3LDIzMDIuNzIxMTkzMzM3NDA5LDIxMjIuMTgxOTM3NDk2NTQzNSwyNjE0LjQxMDYyNTQ0NjU5MDUsNTIxLjEwNzM4MDEyNDQyMzUsMjk2MC42NTY1MjgzMDQ4MTUsNTc5LjQxNjIyMDAzNTIyNTMsMTU0OS42NzYwODY4MjYzMDE2LDE0MzkuODY0MjA2Mzk5NjM1NiwxODAyOC4zNjEyMTQzMjIzMiwzMzc3LjgzODMxNDE2OTc0NSw2NDMuMDMyMzQ0MzAwNjE5MiwxODc4LjcwNTc1OTQzMzUzMywxNjUzLjg5OTg0NTY1NjAwNDgsMTg0MS4yNTE0NjAxNDAwNDI4LDIwNDQuOTY1MTk3MDk2ODU5OCwxODM5LjcxODk4NTQwNjU0NTcsNDgyNC41NDQzOTg1NDMwOTQsNDY3LjUyNTM3NjkzMzQzNzksMy4zMTY0MjEyNTM0MjE0NzU0CisxNixXZWQgOSBGZWIgMTEsMTc3Ljk2NDg4MTQyNjA5OTEsMTUxLjM4ODE0OTg5OTQyNTYzLDk1LjAyMTE5ODM2MzM4NzUsMTAyNS4xMzU0ODkyMzg5MTkzLDE2OS45MDkxNDU1ODgxOTI2NywzNjIyLjM0ODk0ODcwNzcyNzcsMjk3MS42MTIwMzgzMzIyNDcsMjUzNi42NTY2NjQ5Njg4MTc1LDI1NTYuNjQzNTE5ODcxNjg3LDMwOTIuNDk2MDk5NzA2NDg3Myw2MDAuNzM1ODk5MTQ5Mzc4NSwzMjQ2LjMyMjAwMTUzOTI2MzUsNjIwLjgwNTcxODE1Njk0NjMsMTY4NS42NTk3NDcyMjAyNCwxNjg0LjQ1MjQ3MDQ2OTkwMjIsNDIzNjYuODE4MTI1OTY3MTQsNTY5OC41OTQ2ODU0NTk0NzcsNjg5LjAwMzgyMjA4NzUwMDMsMjAyOS4wMzQzNjA4NDAwODIsMjU0Mi44ODQ5ODc0Nzk0NzczLDE5NzIuNzkwODkzODYwNTcyMiwyMTkxLjg2MDkxNjA4Mjk5NSwyMDE2LjM4NjQ4NTU1NzM5MDIsNjQ2Ny4wMTU3NjkzMjc0NDQsODUyLjczNTU1NzIzNTU5OSwzLjU2NzM0NDc1MTE5MTU1NAorMTcsVGh1IDEwIEZlYiAxMSwyNTMuNDIwNjcwMTc2MTQ3NjcsMTk3LjQxOTE4Mzk2MDc3MjA3LDE0NS4yMDEyNzk0NTM0NDk5MywyOTI4LjQ4MjE4MDMzNjgwNCwxODQuNDQxMzMyOTQwOTE0NzUsNjI2OC43MzgzOTE2MDczMTIsMzE3OS43MjE4MTg4MzM2NTMzLDMwNTEuNjc3NTI5Mjc0NTM1NiwzOTY5LjMzNjIyOTk2NjcwNyw0NjIzLjk5Mzg5ODIyNzExOCw4NDIuNTgzNjIxODE4MjA1MiwzODQyLjIwODA5MjgyNTcwNSw2NjIuMjAyNjExNzA4NDU4NiwxOTIzLjkwOTM5NTcwOTc3NDEsMjQ5OC45OTQyMTk2MDUyMDQsMTE4ODgyLjY1NjU3Njc2NTUxLDE1MDg3LjkzOTA2MzY4NzQwNyw3MzUuMTUyNDgxNDMxMzU4OCwyMjQ2LjAyMzYxNjYzNTM0Myw2MDU0LjA4MzExODM1OTE1NiwyMTA0LjQxMDkzNTU1MDA2MjMsMjM0Mi44NDY0NDg1NTQ5MTUsMjM3NC41NTE1MzY4NDAwMDY1LDEyNjI2LjQ2NDEyNzQ0NDE1LDIyOTcuNjQ2NzAxMjE0MjI5LDMuODgwMjgxMzIyNjI0Mzg2CisxOCxGcmkgMTEgRmViIDExLDUyMS4zNTk0MDUwMDE3MzMzLDM1NC4yMDc1MTgzMTM2MDkzNCwzMzUuNzY1MzQ1NjQxMDgzMiw3NDk5Ljk1NzIyMjg5MjkyMSwyMTAuNzIxOTQwMDMxODI3NSwxNTU0NC43MjU3MDY0MDEzNTcsMzQyNS4zNDAxNDk0NjMyMDgsNDc2Ni44MjMyMDQxNjYzNzgsODk5Mi42MTMwNTg1NjY2MzQsMTAyMDcuMTUwMjk4NTA1Mjg1LDE3MzcuMjcyMTgzMzQ4MTQxNyw1ODAwLjAxOTI3NTg0MjkwMiw3MDMuNjM3NDM1NDQwMjczOSwyNTk5LjY2MDc3NDQ0MTAyMyw1NjkyLjYwOTI2NzQxNDE3OCwyNTE5MzguOTIxMzY5MDU5NDIsNDY5MTEuODAxMTY0MjYzNDk2LDc4Mi4xMjU2NjA5NjIxMzYzLDI3NTMuMDg0MzAzNTUxNzY0NiwxODM0NC45OTE5NzA5MzAyOTYsMjIzNi40MDgzOTQyNzg0OTcsMjUxNC40NzUyNTU0MDkwNTIsMzUwMi4yNTY0NDkzNzQ4NTMsMzUwMzIuNzc3NzY2NDM5NTUsNjY2OC42NTU4MzIwMDUzNzUsNC40NzUwMzk0NjE3NDQyNDkKKzE5LFNhdCAxMiBGZWIgMTEsMTYwMS41MTQ4MTY5Nzg0Mzk1LDk2OS4yNjA4OTY1MTY0NTEsMTExNi4zNDA1MjUyOTAzNTQ3LDE0NDUwLjM0OTY4NzU2Mzg4MSwzMDAuNTI5MDgxMjQxNTU4MSw0ODU0NS4yNDUyNDk1MTQzOCwzODgwLjkwMTMzOTQ3NDI5NTYsMTI1MDQuOTk4NjUwNjY2NTkyLDI4MjYyLjY4Mjc0Njc2NzAyNiwzMjY4NS44Nzc3NDQzMzgwMyw1NTIzLjY5NTkxODI0MTc5OCwxNDgxNi4yNTA4Mzg1NTc0NTcsNzQ1LjMxNjI5MjM0MTA5MjEsNTUxMy41ODk4MTkxODQ5MDMsMTk0NTIuMTIzMzE2NDYyMjUsNDA0NDM4LjUxMjc5MjE3OTUsMTI1MDUzLjQ0MTU4MTMzMDQxLDgzMy43ODA4MjgyNzQ4OTI5LDQ3NTQuNTQzNTY0NDUxMzI4LDUzMzMxLjY3NTI4MDM3MjEsMjM3MC41Nzk2NTM5MjgwNTYsMjgxMy40OTI4MTkxODQzOCw4NDg3LjkyMTIyOTMyOTU2NiwxMTIxMDguMjUxNTU1ODYxNjcsMTYxNjAuOTM3NzgzNjE1NjUsNi42MDg2MzcwMTEyNDA5MgorMjAsU3VuIDEzIEZlYiAxMSw0ODkyLjgwNzMwMTQ3MjU3OCwyNzU2Ljk4NjEzMDA1ODQ4NSwzMjQ3LjU1NjE2MzUzNTgzNzYsMjE5MTQuNTk2MjIwNTI5Njk2LDY5NC45MzMxMzk0OTc1ODY3LDEyNzIwNi4yNjUzOTAyNTE2Myw1NDIwLjgzOTE4MjUyNTE1NjUsNDMwNjMuMjY2OTk4OTYwNDA0LDgwOTMxLjc0MDExNTUyODAxLDk2OTQ1LjExMDE1NjczNjI2LDE3MTYzLjU4NDYyNzE2ODgxLDUxNzQwLjI0NTMyMzA2NjEsNzg4LjQ3ODMwODY3MTA5MzcsMTc4NzMuNTc1NzM2MzQ3ODI2LDU4MjQyLjI3NTk0OTU0Njc3LDU1MjAxMS45MDI5MDc0NzIsMjI5Mzk5LjQyMzMzNzkzNSw5MDkuODQ3MjUxMDc0NjA0NiwxMzE4MC43NjY5NzQxNTI1MzcsMTA3MDkzLjg3OTEwMTg1NzcyLDI1MTYuMzIzNzE5ODk1Mzg1NywzODM5LjcwMzY4OTgyMDE2ODYsMjg2NjguODAzODYzNzgxMjM1LDI2NjYzMy44OTcwOTcyNjEzMywyODMxMi4yMzIxMDUzNTA5NTUsMTYuMDQzMTM2MTg0NjU1MgorMjEsTW9uIDE0IEZlYiAxMSwxMDcwNy43MDUxMjY0MDIzNjMsNjMyOC44MDcwMTgzODc1OTcsNjUwNC44MjI5NzQ4MTQzOTgsMjkwMTIuMDc4NjY2MDczNzM2LDIzMzMuMDc5MzcwNTU3Njk0LDIzOTMyMi4yMjcwNzYyOTE1NywxMjM1NC4yMTEzMTUxNTA1MTMsMTE3MTI0LjU1MDk1MTk4NTUxLDE2NDE4Ny4yMjY3MzEwOTQwNCwyMDA1MDUuODE4MTA1ODE2OSwzNzM4MC40NjYwNDA3MzMyMSwxNDQ3NDMuOTg1MDE2NjYxNTgsODQwLjk4MDI3NTcyNjIyNTUsNTU2NTEuNzgwNzUzOTg3ODcsMTE3NjAzLjg3MTMyMjI5ODM1LDY4NDgzNi41OTQzNzkwODkyLDMzODA3Ny40Mzk2ODc3ODE3LDExMTEuNzA3MDAyOTA5ODUzOCw0MzEyMi42NzM4Mjk4MzMxNCwxNjYyMzkuNDMyNDA5MjYxODgsMjcyMy43MjEzNDcwODU5NzY1LDg4OTkuNTY3NDkxNTg3ODk0LDgyMzEzLjIyODI4NDA5OTY1LDQ1ODU3OS4xMzA0NjI2OTc3LDQwNzc4LjM2MTMzMDIzMzg3LDUyLjg3MDI3ODg0OTIwOTgxCisyMixUdWUgMTUgRmViIDExLDE3NDkwLjM2MDg4MjU2NTEyNCwxMTQ1Ny43MzAwNzI0MTk2MzYsMTAwNzUuNzU5ODc5MDUyMTMsMzUzNjIuODAzNjI2NTEyNTUsNjczMi4yNTY5NzE2NjczMzE1LDM1OTI0NC4zMzk2OTMzNzg5LDQwMTY5Ljk2NzQ5NTM1OTkzLDIxODEwNS43NTc0NDk1MjgsMjU2ODM1LjgzMjA4MDk4MTU1LDMxNjQ0NC4xOTg4MDUxODkxNyw2MDc3MS44NTg1NjExMzQwMywyNzQwNzEuNDM1NjM5NDQ2NTQsOTQ3LjI5NDAwMTA3MTk1ODcsMTE4MzM5LjUxNDI0MTY0Mzg2LDE4MjYwNC4zMTgwNDQ2MzA0Niw3OTk5MDkuNTkwMzE5NTg3NCw0NDAwOTAuMDA1NTIwNDIyOCwxODk1LjYwNDYxODE2MTQyMywxMDcyMjMuNzAzMjUyMzI1NjUsMjIzMjA5LjI5MDAwMDA0Mzg0LDMyMzIuMTU0NjU4OTQ1MzMzMywzMDcyMy4zODYzMTc3NjEzOSwxNjA4NTYuNzYxMTQ2NjA3ODQsNjUzMDM3Ljg2NzA1MDU2NzMsNTIzOTIuNjM3MDkyMTcxNDU1LDE0NC43MzE1MzI1MjY2NDczMworMjMsV2VkIDE2IEZlYiAxMSwyNDIzNy41NjAzMTY0Nzg4MjMsMTczMDEuODc5Njg2ODEwMDQ3LDEzNTI4LjgzNzEwOTk1NDYxNyw0MDg0NS4wODMxOTI5Mjk2MDQsMTM0MTguMTQzNzY1MDM5MTAyLDQ3MzgyOS43MDM2NDg4MzgyLDExNTM5Mi42OTIwMTg0OTQ4LDMyNTE0MS4zNzU4MDI2MjgyMywzNDcwNjEuMTgyNDg0OTM3NjYsNDI5NjY1LjE4NDUyOTAxNzMsODM5NTguMzA2MDE3MzAwNTUsNDEyMTc4LjIwODc1NzQ0NjEsMTMzNi4wOTg4MDUwNjE3MTQ1LDE5MDIyMy45NDk5MDgzMzM3LDI0NTQyMy41MjI5MDI0NzM0LDg5NzEyMS44MTYwODU5MTI1LDUzMDgzOS43MDE5MDA3Nzg5LDUxMTMuMDQ5NDE3Njc5Njk4LDE5MTIxMi43NzY5MzcxMjU3MiwyNzQ2NzAuMjk4MTIxNTg5OTMsNTEzOS44NTIyMTk1OTYwMiw4OTIxOS4wMjM3NTM1MzAyNywyNDY0NzUuODE4MTg3MTcyMTIsODMzNzE0LjY4MzEyMzM0Miw2MjY3Ny43NDU5MDcxMTI4NTQsMjgzLjQ2NjQzMzc0MzQ2OTQKKzI0LFRodSAxNyBGZWIgMTEsMzA1ODQuMzYyNDA4MzYyMDYsMjMxNjAuOTE5NTgxNjU5NDUsMTY3MzIuNTA1Mzg2NjIwOTEsNDU2MjguMDA3MTAzMDgwOTA1LDIwODEwLjk3ODc4MDMzMTM5Niw1Nzk1MDMuMDk5MjExMzA5OSwyMjcxNTguMTI2MDE4MjcyMDcsNDI4Nzc4LjU2ODc0NDM3NTMsNDMxMDYyLjYzNjUzNzQ2MTEzLDUzNTIyMC4yMDYxNzYxNDEsMTA1NzMxLjcxMjg0OTI0MjgsNTQ2MzMxLjg4ODk0OTUxOTUsMjUyMS4yMDU4ODQ1ODgwMjk3LDI2MjExNy44NDg5NTYzNTA3NiwzMDM2ODguNzg2MDIyNjU5ODYsOTgwODQxLjg2Mzk1MzI0MzQsNjExMzk1LjUzMDIyNjQxMzcsMTM2NzkuMjM2MTkzNTMxMzY3LDI3OTQzMy4wNzI0NDUwODAyLDMyMDc0MS42MDU1NzYwODk2NCwxMDc1OC44NjMzODE4NjEzNjcsMTczNjMxLjg1NTE0OTI1Mzc3LDMzMDM3My4yNDgzNDExNTE0NSw5OTc5NDUuNjYzODc1MDMwOCw3MTc4NC4xMzEzNDQ2MDA3OCw0MzcuNTczODU0NzIwOTEzMzUKKzI1LEZyaSAxOCBGZWIgMTEsMzYzNTguNzY5MjA1NTE1NjUsMjg3NTcuMTA3MDA3MzgxOTQzLDE5NjE0LjY5ODE3NDA5NjE1Niw0OTcwNi40OTA4NjE0NDE2NTYsMjgzNDUuMjE0MjUxNTM2MzUsNjc0MTAxLjUxMDg3MDUzODIsMzYxMTMyLjM3MzE2NjE1NDksNTI1MjMwLjE4NTU1OTkwODIsNTA2ODUyLjE1NzY5NDE3MjMsNjMwNTYyLjcxMDI0NzkxNzMsMTI1NTE0LjMwOTI5NzU1MDc5LDY3MTQ5MS4yMTk5MzY5MzEzLDU1NjUuMTMxNzI0Njk5NzE3LDMzMDY1Ny4wNzg5MTU4MTM1MywzNTYwOTQuOTU5ODQ1NDUyLDEwNTEzNzYuNzYwMzY0NDQ2Myw2ODExNzIuMzE2MDE4OTQwMSwzMTYxOS44ODI1MjA1NDg5OTYsMzY2NDQzLjYzMjUzNTE5NDYsMzYwOTUwLjQ4MjY4ODI0OTczLDI0NzU3Ljg4MjE2OTA5MjY4NSwyNzMwMzcuNzgxMjUyMzYwMSw0MDkxNjIuNjQ1OTY5Nzc4OTQsMTE0MzE3OS43MjcwMDI2ODk4LDc5NjUzLjk1NTk1MTkzODkxLDU5NS4wNzc4MjQ5OTk2ODQxCisyNixTYXQgMTkgRmViIDExLDQxMDA1LjAxOTE4NjAzNDg4NiwzMzQ3MC42NTMwMjI1MTQ3OTQsMjE5MDguMDQ4NDg5NDk3MzQsNTI3NzMuNTM0OTM5NzMzNDE0LDM1MDQ4LjU4NjI2ODI1NjExLDc0ODk5Ny40MTgwNjMyMTg4LDQ5NDU3OS40NDczMjAxODQ0LDYwNDU0OC43NTE5MTc1NDc5LDU2NzMzMS41MDI4MDYxNzY0LDcwNjcyOS43OTY5NTI4NjY3LDE0MTQxMC40NDMwOTU2NzI2Nyw3NzQ2NTUuODM0NDc3ODYyOSwxNzgzNC4yMzQ3NzUyODU2MjYsMzg4Mjg1LjA2MDI2NjMxNDksMzk3Nzg0LjI2ODU0MjQxMTk3LDExMDM3MTMuNzM4MTg4MDczNyw3MzQ1NDYuNjA5MzQ2MTg4NCw2MzY4Ny4wNTM2OTg5ODMyLDQ0MTgwNC41MTYwMDEzMDg5LDM5MTk1Ni42NDczNjMyNzg1LDc1MTM2LjI2NjYyNjI0MTc5LDM3MDk3Ny4yNTE0NzA1Nzk3LDQ3NDUwNS44MDcwMzkxNjA1LDEyNTY3MzMuMTMxODYwMDY1Myw4NTY1OS4wNjMzMjE1MzMwMiw3MzUuNTMyMjQ2NjM4MzQyNworMjcsU3VuIDIwIEZlYiAxMSw0NTEwOC42NTcxMTIxODM2OCwzNzY4NC4zMDk3NzY5MTM5NiwyMzkyNy40Mzc5ODU4MjMwODIsNTU0MzIuMDQzNTc0NDIzOTcsNDExMjIuODgyMDgzMDkyMDk2LDgxNDg1Ni40Nzc5OTY0MTk1LDYxODYxMS4xMjQ0NTUwNDA5LDY3NTAxMi40NzgyNTA3MDEyLDYyMDYyOC4wMDIxMjIxMzksNzczODcxLjA0MzczOTcyNDMsMTU1NDQ1LjAwNjgzNjM5MjQ1LDg2NjM1OS4xMzk5MzY5ODg2LDM3NzUyLjc2MjY2NjIzMTcsNDM5Nzc1Ljk1MTM0OTY5MSw0MzQ0OTAuODg4NzE5OTkwMDMsMTE0ODkwOC4xMzAyODQ2ODEyLDc4MTAzMi45MDExMDY3NDk1LDk2MjY2LjYwNjE2NjUwMDQ0LDUwOTY0Ni4xOTE1NzMyMTY5LDQxOTAyMi44MDEzNjk0MTI1NywxNDc5MDQuNjY2MjcyMTA1Miw0NjE3OTYuOTgyMDcwMTE4Miw1MzI2ODMuMDM0MTk2NTczNywxMzU2MjQwLjE5MDMwNTM0MjQsOTA4ODUuNjUxNjQ0NTExODYsODYyLjg3NjAwNTEwMDYzNgorMjgsTW9uIDIxIEZlYiAxMSw0ODMwNS44OTUxNjM4MzE3NSw0MTAzMC43ODQ3MTUzMTgxMSwyNTQ5My4xNDMxMjk2MzI5NSw1NzQ0MS4zNzg4ODc0NTM3Myw0NjA0OC4zNzUyNDk4MjA2Myw4NjU4MDcuNjI5MjgxMDcyNiw3MjMwMDMuOTk2MDY2MTMxNCw3MzA0MjIuNDM4NTkxNzk3MSw2NjIwMDMuMjA3NDcxOTY4LDgyNjAxOS4yNDUxMTA4MDg5LDE2NjM3My4yMTc2NjQ0NDc3Niw5Mzg1NDAuMjQ1MjQ4NTcwNSw2NjkzOC43OTU3MzQyODk3MSw0ODA2MzUuNjA1OTUzNzM0OCw0NjI5NDcuNTY0NjUxNzg0MSwxMTgyODU4LjA4MDkwMjM5Myw4MTY0NDAuNDQzMjkwNzQ5NiwxMjcwMTkuNTkxMTg2ODg1NCw1NjQxMDkuNDE3MzU1NTQ4OSw0Mzk3MTQuOTIzODMwMTQxOCwyNDE0MjguNDkyNjM1Nzk2NSw1Mzc5ODQuNjgzMjI3MTU2Myw1Nzg1OTEuNzAxMTc0NTkyLDE0MzI3OTIuMDg1NjIwMDc1Nyw5NDg2Mi4yODE4ODQzNzM2Miw5NjYuMjIyNzk3NzQzNjE1MgorMjksVHVlIDIyIEZlYiAxMSw1MDg3MS4yODU5ODczMTQxNjQsNDM3NDEuODA4ODcwMjMwNzUsMjY3NDYuMzg3NjIzNzU0MjI0LDU5MDMwLjE3NDgyODg1MzQ4LDUwMDc4LjcwODUzMTA4MjQ1LDkwNjU0Ny4wNDc1NzEzNTI1LDgwOTkzOS42MzMxOTYzNzE4LDc3NTA4NS45NDk2NTU0Mzk1LDY5NTE0Mi40MDMzMjk4Njg3LDg2Nzc5Ni43MTg0MDQyODA0LDE3NTEzOS4xNTg3MjI4NDY0NSw5OTY3NDkuNzUwODE3Mjc5Myw5NjA1NC44NDUwODI4ODQ5LDUxMzcxOC43OTk4NzExNzAyLDQ4NTcyMy43ODIzMzk0NTksMTIwOTYyOS44NTkzNzM0OTc4LDg0NDUzNS45OTUwMzA5MzkxLDE1MzkxNS40NzY4NDE5OTYyLDYwODQ1OC45MTMxMzUxNDA0LDQ1NjE2My4zNjExNjk1NTY3NCwzMzE4MDguNDEzNDQ1NzQ5NCw2MDEzMzQuODcwODc5ODIxNSw2MTU2NjAuODExNzgyODUxNywxNDkzODMxLjE1MjkwMjkwNTgsOTgwMTYuMTU5NjUzNjUzMzYsMTA1MC44MjI3MTI3Nzc2NjY1CiszMCxXZWQgMjMgRmViIDExLDUyOTA0LjY1NjI3OTgzOTk1LDQ1OTA1Ljc5OTkzODE0OTQ5LDI3NzM4LjAwNjI2NDkwNzY0Myw2MDI3Ny4yMjI0OTY4MzUzNiw1MzMxOC43ODAwMDM5Nzc1MjUsOTM4NzU3Ljg2NzY0OTg2MDMsODgwNzE2LjI2NzUzNzA1NTcsODEwNjAzLjEyNTI0NzQzMSw3MjEzNzUuNTAxMDQyMDI5MSw5MDA4NzMuMTc2MTg3MjEyLDE4MjA4NS42NjY5NTMyMTE0LDEwNDMwNTQuNjU2MzE0NzA3MSwxMjI1NzkuNzIwODYwMjI0Miw1NDAxMTIuNjkwMzYyOTI3Miw1MDM3NDQuMjQ4NzMxMDM1LDEyMzA2MTEuNDY0NDAwODYsODY2NjMzLjI5MTU3MTg0NjcsMTc2NTYyLjA4ODIwMTg4MzI1LDY0Mzk4Ny42MTk1MDYyNDgzLDQ2OTExNS42MTMxMjAxODQyLDQxMjcxMS43MjgwMjM0ODU3NSw2NTI4NTMuOTEyOTE2MjgsNjQ1MTc1Ljc5MTgyMzAzNiwxNTQxOTk3LjE2MjA4NzM4NjIsMTAwNDk2LjAxODMzNDY2MTk3LDExMTguODU1OTIzNDkyNTk3NAorMzEsVGh1IDI0IEZlYiAxMSw1NDUwMi4wMDUxNzM3Mjg5NzYsNDc2MTQuMjcwNTkyMzU2NSwyODUxNi4wOTAyMDAwNDYyMTIsNjEyNTEuNTk4MTE3MDA2ODQsNTU4ODkuMTgzODk2MTYwOTYsOTY0MDIwLjk0ODU5OTc0MDIsOTM3MzcwLjQxMTI2NTM2Niw4Mzg1NjUuNTE5MzU3MDEzNiw3NDE5NjUuODkzMDc0MTU2Myw5MjY4MzcuNDA4NzI1NjY2MywxODc1NDEuNzc0NDU5MDE2LDEwNzk1MTguNTQyMzAyMjA2LDE0NTQ1Mi45NTkxNTQ3NzkxOCw1NjA5MzkuMTQ1OTM5NDUxMSw1MTc4ODMuNDcxNzg0OTAxNDYsMTI0Njk5OS41ODU1NDM3Nzk0LDg4MzkwOS43OTgxNDExODg4LDE5NTEyMi4wODk2MjYxMDQyLDY3MjEwMy41NDYzNjQ4OTY5LDQ3OTI0OC43OTI1OTk4ODYyNSw0ODE3MjcuNjkzOTYzMjEyLDY5NDA2MC44NzUxMzg2NDU4LDY2ODQzMi44MTY2OTQ4NzM2LDE1Nzk3MjYuNDI4MjQyNzgyNCwxMDI0MzQuNzMwNDg1OTk5MTQsMTE3Mi44NDEwNDIzMDkyNDg3CiszMixGcmkgMjUgRmViIDExLDU1NzUwLjM3MzY4NDEwOTM0LDQ4OTUzLjkzMDc4NTgwNTcxLDI5MTIzLjc4NDUwNjMwMjA3LDYyMDEyLjA2OTQ2Njg2NDA3LDU3OTEwLjU5NDYxNzMzOTU4LDk4Mzc0Ny44NzEzOTY2MTE3LDk4MjIwMC4zMTA4NjAyNzYxLDg2MDQ0Ni41MzcxNzcxNzc4LDc1ODA1MC4xMTMxMDU1OTk0LDk0NzEyMC4xODE1NzczMDgxLDE5MTgwNS40MjY0OTM5MTk0MywxMTA4MDU2LjA0NzU4MjM2MDUsMTY0NDk1LjY1NTcxODk2MDEzLDU3NzI1OS4yOTQ2ODg1NzQ1LDUyODkyNS44Mzc5NDQ5MzY2LDEyNTk3OTkuMzU4Nzc2ODk0LDg5NzM4My40NzQwNTc3ODg0LDIxMDA1Mi44NjM3NDY0OTM2Miw2OTQxNzcuOTkxMjI4MTM3LDQ4NzE1Mi43MjY3NzY5NzA1LDUzODc4MS4zNTUyMTc0NzQ2LDcyNjY0OS42Njk5Mzg4MDUyLDY4NjY0MS42NDc0OTYyMTY5LDE2MDkxNjguODk4MDk1MjE3MywxMDM5NDYuOTAyNTgyMzQ2MjYsMTIxNS4zMDQxNjA1ODA5MjEKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvTm9uWmVyb01vcnRhbGl0eVJhdGVfRkRfUmVmZXJlbmNlL0h1bWFuUG9wdWxhdGlvbk1vZGVsL2h1bWFuL0RlbnNpdHlfMC5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L05vblplcm9Nb3J0YWxpdHlSYXRlX0ZEX1JlZmVyZW5jZS9IdW1hblBvcHVsYXRpb25Nb2RlbC9odW1hbi9EZW5zaXR5XzAuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJjMjQ0MDEKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L05vblplcm9Nb3J0YWxpdHlSYXRlX0ZEX1JlZmVyZW5jZS9IdW1hblBvcHVsYXRpb25Nb2RlbC9odW1hbi9EZW5zaXR5XzAuY3N2CkBAIC0wLDAgKzEgQEAKK2l0ZXJhdGlvbix0aW1lLApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Ob25aZXJvTW9ydGFsaXR5UmF0ZV9GRF9SZWZlcmVuY2UvSHVtYW5Qb3B1bGF0aW9uTW9kZWwvaHVtYW4vRGVuc2l0eV8xLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvTm9uWmVyb01vcnRhbGl0eVJhdGVfRkRfUmVmZXJlbmNlL0h1bWFuUG9wdWxhdGlvbk1vZGVsL2h1bWFuL0RlbnNpdHlfMS5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmMyNDQwMQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvTm9uWmVyb01vcnRhbGl0eVJhdGVfRkRfUmVmZXJlbmNlL0h1bWFuUG9wdWxhdGlvbk1vZGVsL2h1bWFuL0RlbnNpdHlfMS5jc3YKQEAgLTAsMCArMSBAQAoraXRlcmF0aW9uLHRpbWUsCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L05vblplcm9Nb3J0YWxpdHlSYXRlX0ZEX1JlZmVyZW5jZS9IdW1hblBvcHVsYXRpb25Nb2RlbC9odW1hbi9EZW5zaXR5XzIuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Ob25aZXJvTW9ydGFsaXR5UmF0ZV9GRF9SZWZlcmVuY2UvSHVtYW5Qb3B1bGF0aW9uTW9kZWwvaHVtYW4vRGVuc2l0eV8yLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hM2VkMzUxCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Ob25aZXJvTW9ydGFsaXR5UmF0ZV9GRF9SZWZlcmVuY2UvSHVtYW5Qb3B1bGF0aW9uTW9kZWwvaHVtYW4vRGVuc2l0eV8yLmNzdgpAQCAtMCwwICsxLDMzIEBACitpdGVyYXRpb24sdGltZSxFRy1GUkctRzIxMDAwMSxFRy1GUkctRzIxMDAwMixFRy1GUkctRzIxMDAwMyxFRy1GUkctRzIxMDAwNCxFRy1GUkctRzIxMDAwNSxFRy1MT0UtRzI0MDAwMSxFRy1MT0UtRzI0MDAwMixFRy1MT0UtRzI0MDAwMyxFRy1MT0UtRzI0MDAwNCxFRy1MT0UtRzI0MDAwNSxFRy1MT0UtRzI0MDAwNixFRy1MT0UtRzI0MDAwNyxFRy1MT0UtRzI0MDAwOCxFRy1MT0UtRzI0MDAwOSxFRy1VUEUtRzI5MDAwMSxFRy1VUEUtRzI5MDAwMixFRy1VUEUtRzI5MDAwMyxFRy1VUEUtRzI5MDAwNCxFRy1VUEUtRzI5MDAwNSxFRy1VUEUtRzI5MDAwNixFRy1VUEUtRzI5MDAwNyxFRy1VUEUtRzI5MDAwOCxFRy1VUkctRzMwMDAwMSxFRy1VUkctRzMwMDAwMixFRy1VUkctRzMwMDAwMyxFRy1VUkctRzMwMDAwNAorMSxUdWUgMjUgSmFuIDExLDEuNzIzNTY3MDA2ODU1MTM4NSwwLjU4NTc5NDA1NTU2NTU4NTUsNS4zNjI2MDI2ODE3MjExMDgsMi4wMTQzMTkwODQ2NzAzMTQ3LDExLjcyNjI2NTkzODg0MzA0LDQzMS4yMDI0NTYwODY0MDM3NCwxNTE0LjcyNDc2ODQwNjE3LDIzOTYuMzkzMjI5ODcwMjY0LDI3MzQuMDY2MjA4OTUzODg4LDUzNjkuNzQ1NTI5ODU2ODY1LDE4MS4yOTc5MTIyNzYyNzk0LDExNDYuMjY5NDU0ODc4NjE0NiwxNTg5LjMxNDkzMjA5ODI0MzgsODM3LjA5ODA5NTY0NDg4ODYsNDQ2Ljc2NjU5Njk2MjA5MTc0LDE3MS4yNzQ3MDkyMTc1Nzg1LDIzMy44NjIxNDA1Mjg3NjY0Miw4MS41MTQ0NDUzNjM5NTQ4OCwxNTUzLjk4MzY5NzU4MzgwNTUsNTEwLjQzNDk4MTU0MzIzNTQsOTc0Ljg3MTI2MTMxNTE5NjYsMTU4NC41MTMyMjkxNTk1MDU3LDE1MjguOTM4NTQxOTI1NTcyMywyNjc4LjczNjcxMDk1ODAyNiw2MS40NTAxMDM1NzQ4OTE3NCwxNy4zNTQ2NzIyOTgzMzc2NjUKKzIsV2VkIDI2IEphbiAxMSwxLjcyMzU3MzkwMTEyMzE2NiwwLjU4NTc5NjM5ODc0MTgwNzgsNS4zNjI2MjQxMzIxMzE4MzUsMi4wMTQzMjcxNDE5NDY2NTMzLDExLjcyNjMxMjg0MzkwNjc5NSw0MzEuMjA0MTgwODk2MjI4LDE1MTQuNzMwODI3MzA1MjQzNiwyMzk2LjQwMjgxNTQ0MzE4MzUsMjczNC4wNzcxNDUyMTg3MjM3LDUzNjkuNzY3MDA4ODM4OTg0LDE4MS4yOTg2Mzc0Njc5Mjg0NywxMTQ2LjI3NDAzOTk1NjQzNCwxNTg5LjMyMTI4OTM1Nzk3Miw4MzcuMTAxNDQ0MDM3MjcxMiw0NDYuNzY4Mzg0MDI4NDc5NTUsMTcxLjI3NTM5Mjk3NzAyMDk3LDIzMy44NjMwNzU5NzczMjg1NSw4MS41MTQ3NzE0MjE3MzYzMywxNTUzLjk4OTkxMzUxODU5NTYsNTEwLjQzNzAyMzI4MzE2MTYsOTc0Ljg3NTE2MDgwMDI0MTgsMTU4NC41MTk1NjcyMTI0MjIzLDE1MjguOTQ0NjU3Njc5NzQsMjY3OC43NDc0MjU5MDQ4Njk1LDYxLjQ1MDM0OTM3NTMwNjA0LDE3LjM1NDc0MTcxNzAyNjg2CiszLFRodSAyNyBKYW4gMTEsMS43MjM1ODA3OTU0MTg3NzA3LDAuNTg1Nzk4NzQxOTI3NDAyNyw1LjM2MjY0NTU4MjYyODM2NCwyLjAxNDMzNTE5OTI1NTIyMSwxMS43MjYzNTk3NDkxNTgxNyw0MzEuMjA1OTA1NzEyOTUxNiwxNTE0LjczNjg4NjIyODU1MjUsMjM5Ni40MTI0MDEwNTQ0NDUsMjczNC4wODgwODE1MjczMDQ0LDUzNjkuNzg4NDg3OTA3MDIsMTgxLjI5OTM2MjY2MjQ3ODM2LDExNDYuMjc4NjI1MDUyNTk0LDE1ODkuMzI3NjQ2NjQzMTI5Niw4MzcuMTA0NzkyNDQzMDQ3Miw0NDYuNzcwMTcxMTAyMDE1NjQsMTcxLjI3NjA3NzA3NDA5NCwyMzMuODY0MDExNDI5NjMyNDYsODEuNTE1MDk3NDgwODIyMDIsMTU1My45OTYxMjk0NzgyNDk3LDUxMC40MzkwNjUwMzEyNTQ3LDk3NC44NzkwNjAzMDA4ODUsMTU4NC41MjU5MDUyOTA2OTEzLDE1MjguOTUwNzczNDU4MzcwNiwyNjc4Ljc1ODE0MDg5NDU3MzQsNjEuNDUwNTk1MTc2NzAzNTQsMTcuMzU0ODExMTM1OTkzNzI4Cis0LEZyaSAyOCBKYW4gMTEsMS43MjM1ODc2ODk2NjEyMzI4LDAuNTg1ODAxMDg1MTIyMzcwNCw1LjM2MjY2NzAzMzIxMDY5NSwyLjAxNDM0MzI0MTk4NzA1NCwxMS43MjY0MDY2NTQ1OTcxNjcsNDMxLjIwNzYzMDQ2NzIzNzU1LDE1MTQuNzQyOTQ1MTc2MDk3NSwyMzk2LjQyMTk4NjcwNDA0OTIsMjczNC4wOTkwMTc2MzU1ODUsNTM2OS44MDk5NjY3ODY5NzY1LDE4MS4zMDAwODc4NTk5MjksMTE0Ni4yODMyMTAxNjcwOTQyLDE1ODkuMzM0MDAzOTUzNzE2Myw4MzcuMTA4MTQwODYyMjE2OSw0NDYuNzcxOTU4MTgwNTI5NzQsMTcxLjI3Njc1NjA4MjEwODMsMjMzLjg2NDk0Njc2ODE3MTg1LDgxLjUxNTQyMzU0MTIxMTkzLDE1NTQuMDAyMzQ1NDYyNzY3Niw1MTAuNDQxMTA2NjAwNjA3Miw5NzQuODgyOTU5ODE3MTI2MiwxNTg0LjUzMjI0MzM5NDMxMjQsMTUyOC45NTY4ODkyNjE0NjQ1LDI2NzguNzY4ODU1NDcwMDY2LDYxLjQ1MDg0MDg4MjA0NzkyLDE3LjM1NDg4MDU1NTIzODI3Cis1LFNhdCAyOSBKYW4gMTEsMS43MjM1OTQ1ODM4NDI0ODg5LDAuNTg1ODAzNDI4MzI2NzExLDUuMzYyNjg4NDgzODc4ODI3LDIuMDE0MzUxMjY4NjgyNzM0NywxMS43MjY0NTM1NjAyMjM3ODUsNDMxLjIwOTM1NTE1MjE1OTIsMTUxNC43NDkwMDQxNDc4NzgyLDIzOTYuNDMxNTcyMzkxOTk2MywyNzM0LjEwOTk1MzUxOTE4NSw1MzY5LjgzMTQ0NTQ1MTQ4MiwxODEuMzAwODEzMDYwMjgwNDMsMTE0Ni4yODc3OTUyOTk5MzQ3LDE1ODkuMzQwMzYxMjg5NzMyMyw4MzcuMTExNDg5Mjk0NzgwNCw0NDYuNzczNzQ1MjYzODA1MDQsMTcxLjI3NzQyOTQwNDUxNjY1LDIzMy44NjU4ODE5ODEyMDgsODEuNTE1NzQ5NjAyOTA2MTEsMTU1NC4wMDg1NjE0NzIxNDk3LDUxMC40NDMxNDc5NzI1NDcxNCw5NzQuODg2ODU5MzQ4OTY1NiwxNTg0LjUzODU4MTUyMzI4NiwxNTI4Ljk2MzAwNTA4OTAyMTQsMjY3OC43Nzk1Njk1ODU2ODYsNjEuNDUxMDg2NDgxNjQ1Mzc2LDE3LjM1NDk0OTk3NDc2MDQ5NAorNixTdW4gMzAgSmFuIDExLDEuNzIzNjAxNDc3MjYzODgsMC41ODU4MDU3NzE0NTIzNzEzLDUuMzYyNzA5OTMzNjM4NDA1LDIuMDE0MzU5MTk2NTEyNjIxLDExLjcyNjUwMDQ2NjAwMDIsNDMxLjIxMTA3OTIyNDYxMzA2LDE1MTQuNzU1MDYzMTQzMTA1NiwyMzk2LjQ0MTE1ODAzNTIxNTMsMjczNC4xMjA4ODcyMTE3MDUsNTM2OS44NTI5MjE0NTMzMTIsMTgxLjMwMTUzODIzOTA5NDQsMTE0Ni4yOTIzODA0MjQ1MjUsMTU4OS4zNDY3MTg2NTExNzc1LDgzNy4xMTQ4Mzc3MjUxMjc1LDQ0Ni43NzU1MzIyODg2Mjc4NiwxNzEuMjc4MDc3MDAzMjk5NzYsMjMzLjg2NjgxNjA4NDM4OTIzLDgxLjUxNjA3NTY2NTkwNDQ3LDE1NTQuMDE0Nzc3NDkyOTI3OCw1MTAuNDQ1MTg3NjA5MTMyNSw5NzQuODkwNzU4ODk2NDAyNiwxNTg0LjU0NDkxOTY3NzYxMTcsMTUyOC45NjkxMjA4OTUzOTg5LDI2NzguNzkwMjc5NDAzOTMyLDYxLjQ1MTMzMTMwODYwNTQ2LDE3LjM1NTAxOTM5NDU2MDM5NAorNyxNb24gMzEgSmFuIDExLDEuNzIzNjA4MzY4OTEwMjc3LDAuNTg1ODA4MTE0MzcxNjkwNCw1LjM2MjczMTM4MTA0Nzc4MiwyLjAxNDM2NjkwNDk5MTUxMywxMS43MjY1NDczNzE4NzE1NzQsNDMxLjIxMjgwMTg5NTMwODc2LDE1MTQuNzYxMTIyMTYwNjM2LDIzOTYuNDUwNzQzNTEzMjY4LDI3MzQuMTMxODE1ODU1NTcyLDUzNjkuODc0MzkxMjM2OTY1LDE4MS4zMDIyNjMzNjA5Mzk3LDExNDYuMjk2OTY1NTAyMzEyLDE1ODkuMzUzMDc2MDM4MDUyMiw4MzcuMTE4MTg2MTMwNjI2Miw0NDYuNzc3MzE5MTYzMjkwMjYsMTcxLjI3ODY2OTcxNDkxMTYyLDIzMy44Njc3NDc2NDczODI3LDgxLjUxNjQwMTczMDIwNjk1LDE1NTQuMDIwOTkzNTA1NTc2Niw1MTAuNDQ3MjIzMjc1NTMzOTMsOTc0Ljg5NDY1ODQ1OTQzNzQsMTU4NC41NTEyNTc4NTcyODkzLDE1MjguOTc1MjM2NjE0NDIyNiwyNjc4LjgwMDk3OTM0ODY2NTQsNjEuNDUxNTc0MzkzNDE2MTk1LDE3LjM1NTA4ODgxNDYzNzk3MworOCxUdWUgMSBGZWIgMTEsMS43MjM2MTUyNTMwOTc4NTYzLDAuNTg1ODEwNDU2MTQyMDEzNCw1LjM2Mjc1MjgxMzI2ODk3MzUsMi4wMTQzNzM4ODk1ODczMSwxMS43MjY1OTQyNzcyNTQyMzIsNDMxLjIxNDUxOTA3NDAyMzY2LDE1MTQuNzY3MTgxMTg4MTAwNywyMzk2LjQ2MDMyNzY2MjI2NjUsMjczNC4xNDI3MjQyNDQ0NjYsNTM2OS44OTU4MzQ0NDU3NDcsMTgxLjMwMjk4ODExNTY3NzcyLDExNDYuMzAxNTUwMTM1OTg0NiwxNTg5LjM1OTQzMzQ1MDM0NSw4MzcuMTIxNTM0MjkyMzI4Niw0NDYuNzc5MTA1MTAxNDI2MzUsMTcxLjI3OTA5NzAzNzU2NjE1LDIzMy44Njg2Njg4NTYyMjUxOCw4MS41MTY3Mjc3OTU3ODI5MywxNTU0LjAyNzIwOTMxNTAxNTYsNTEwLjQ0OTI0MjkyODY4MTUsOTc0Ljg5ODU1ODAzODAxMzYsMTU4NC41NTc1OTYwNTk5ODU0LDE1MjguOTgxMzUxNjE3NiwyNjc4LjgxMTYzODkwNDk3MzcsNjEuNDUxODExMTYwMDY1NSwxNy4zNTUxNTgyMzQ1NDY0MzMKKzksV2VkIDIgRmViIDExLDEuNzIzNjIyMTE1ODgzNTIzNywwLjU4NTgxMjc5NDM3MTU5ODUsNS4zNjI3NzQxOTcxNTMyNzgsMi4wMTQzNzg5NzE3NTg2MzYsMTEuNzI2NjQxMTgwNjIwMzM1LDQzMS4yMTYyMjA4NDEyNDQ2NSwxNTE0Ljc3MzI0MDE5MzA4ODQsMjM5Ni40Njk5MDc0NTcwNjYsMjczNC4xNTM1NzUzNTEwODU3LDUzNjkuOTE3MjAwOTg2MzU2LDE4MS4zMDM3MTE3MDM2NzY4LDExNDYuMzA2MTMzMjg3ODk0NywxNTg5LjM2NTc5MDg4ODAyNCw4MzcuMTI0ODgxNjQxMTA0LDQ0Ni43ODA4ODgwNzkyMzc5LDE3MS4yNzkxMDYyODg2MTA5NiwyMzMuODY5NTYwNjA5OTY5MDMsODEuNTE3MDUzODYyNTQ2ODIsMTU1NC4wMzM0MjQ0MTI5MTU4LDUxMC40NTEyMTcxODg3NDcsOTc0LjkwMjQ1NzYzMTk3MzcsMTU4NC41NjM5MzQyNzkxNjc2LDE1MjguOTg3NDY0MjczNTgwMSwyNjc4LjgyMjE4MzQ2MTUyODMsNjEuNDUyMDMwNjc5MjA2MTMsMTcuMzU1MjI3NjUzMDM0ODM4CisxMCxUaHUgMyBGZWIgMTEsMS43MjM2Mjg5MDY2MDQyMzE4LDAuNTg1ODE1MTE5NjAzODI4Nyw1LjM2Mjc5NTM4ODY2MTEzMywyLjAxNDM3ODYwMTY1NDAyNjQsMTEuNzI2Njg4MDc0NDkxNDkxLDQzMS4yMTc4NzMwNjY0MjM2NCwxNTE0Ljc3OTI5OTAxNDU1NTEsMjM5Ni40Nzk0Njg5OTAzNjMzLDI3MzQuMTY0MjM5MDEzODYsNTM2OS45MzgzMDYxNjQxNjYsMTgxLjMwNDQzMDY4Mjc1NzYsMTE0Ni4zMTA3MDk5ODMxMjAyLDE1ODkuMzcyMTQ4MzUwODE3NSw4MzcuMTI4MjI1NTYwMzQ0LDQ0Ni43ODI2NTkwNjUwMjQzNSwxNzEuMjc3OTYzNzE3MzQ2NzUsMjMzLjg3MDM1NDY4MjMzNjIzLDgxLjUxNzM3OTkyOTkyNzEzLDE1NTQuMDM5NjM2NDA3NDY2Myw1MTAuNDUzMDQyMTAyMzI3OTcsOTc0LjkwNjM1NzI0MDI2OTYsMTU4NC41NzAyNzI0NjI2Mzc0LDE1MjguOTkzNTY3MTYzNzI3NCwyNjc4LjgzMjM0NjE3NTgxMiw2MS40NTIxOTc1ODk0MTQxMiwxNy4zNTUyOTcwNjE1MzQ3NgorMTEsRnJpIDQgRmViIDExLDEuNzIzNjM1NDc5ODk3NjQzOSwwLjU4NTgxNzQwMzgwODUzOTYsNS4zNjI4MTU5NDYwNTI5MDEsMi4wMTQzNjM0NzA3NzQyMjgsMTEuNzI2NzM0OTM1MDQ0NjIsNDMxLjIxOTM4MDE1MTA2NTUsMTUxNC43ODUzNTcxMzcyMDExLDIzOTYuNDg4OTY4ODA1NjY4NywyNzM0LjE3NDM0NzA5MDc2NSw1MzY5Ljk1ODYxNjc4OTU2OCwxODEuMzA1MTM0NTMwMzkwOTQsMTE0Ni4zMTUyNjQ0NzE2MTEzLDE1ODkuMzc4NTA1ODM3NzUxMiw4MzcuMTMxNTU3ODczNzI5Myw0NDYuNzg0MzkwMDk2MTk3NywxNzEuMjczNzgxMzM4MzQ4NSwyMzMuODcwODU2NzU5NzQ5NzgsODEuNTE3NzA1OTk1OTYxNTksMTU1NC4wNDU4Mzc3Njk5MTk0LDUxMC40NTQ0MjI4MjM0NTgzNCw5NzQuOTEwMjU2ODU5MzA0OCwxNTg0LjU3NjYxMDQyNTAzMDgsMTUyOC45OTk2MzcxODc3NTMzLDI2NzguODQxMzY2NjI2NDQ1LDYxLjQ1MjIxNTY5NDcyNjUwNSwxNy4zNTUzNjY0MzA0NzM0MzUKKzEyLFNhdCA1IEZlYiAxMSwxLjcyMzY0MTM3MTQzOTEyOTQsMC41ODU4MTk1NTQwODg3ODIyLDUuMzYyODM0MzIyNjg3MTI1LDIuMDE0MzA3NzAwNjIyODA4NywxMS43MjY3ODE2NzE1OTQxNjYsNDMxLjIyMDQ0OTMxMjMxMTUsMTUxNC43OTE0MTI1NzQ0ODQsMjM5Ni40OTgyNDg0MzM2ODYsMjczNC4xODI3NTExOTU5NjE0LDUzNjkuOTc2NDExNjgxOTM4LDE4MS4zMDU3ODY1OTE5NDk0LDExNDYuMzE5NzM3NjQ0MzA2LDE1ODkuMzg0ODYzMzQ0MDAwMiw4MzcuMTM0ODQ4Nzc1NzgzMiw0NDYuNzg1OTgwMjY1ODQ5NiwxNzEuMjYxNDA1ODY0NTIwNDcsMjMzLjg3MDQ1NDI3NTUzMDQyLDgxLjUxODAzMjA1MjI4NDI4LDE1NTQuMDUyMDAwNTgyNzI5Myw1MTAuNDU0NDM2NDUwMTgyOSw5NzQuOTE0MTU2NDczNjgzNCwxNTg0LjU4Mjk0NzI4NjUyNDQsMTUyOS4wMDU1OTA3MzQ5ODE4LDI2NzguODQ2ODQ0OTYyMDcyLDYxLjQ1MTgwMzU2NTM1MDgzLDE3LjM1NTQzNTYzMzcxNDE3CisxMyxTdW4gNiBGZWIgMTEsMS43MjM2NDUxOTg4OTMwNTE1LDAuNTg1ODIxMjg3NTc4NjU1NCw1LjM2Mjg0NTY0MTgyNjIsMi4wMTQxNDE4ODYzOTUzMDI0LDExLjcyNjgyNzk4MzE5NTYyNiw0MzEuMjIwMjM0OTQ1MDcyMiwxNTE0Ljc5NzQ1ODY4NDU1NSwyMzk2LjUwNjc5NTI0Nzk5MTIsMjczNC4xODYwODg5NTM1ODk3LDUzNjkuOTg2NTI5Mjg2OTU4LDE4MS4zMDYyNzE2NTA5MDYxOCwxMTQ2LjMyMzkzNDk2Nzk2OTgsMTU4OS4zOTEyMjA4NTEzNjY0LDgzNy4xMzgwMDE4NzM2ODE2LDQ0Ni43ODcxMDQ5ODExNTc3LDE3MS4yMjcyMDYyODA3MTY2NywyMzMuODY3MzQwNzg2Mzg2NDUsODEuNTE4MzU4MDY5NDk0NzcsMTU1NC4wNTgwMzM2MTM5NDg3LDUxMC40NTAzNzQ5OTU5ODUsOTc0LjkxODA1NjAyOTE3NTcsMTU4NC41ODkyNzk3OTAzMzU3LDE1MjkuMDExMTU4NTcyMDcxLDI2NzguODQxNjk3NTgwOTA5LDYxLjQ1MDE3NTg2MTExODUxLDE3LjM1NTUwNDIyODE4MTk5MgorMTQsTW9uIDcgRmViIDExLDEuNzIzNjQyNzM4ODk3MTc0LDAuNTg1ODIxNzIyNzg0ODEwOCw1LjM2MjgzNDEyMzU1NjQzOSwyLjAxMzY3NzkxODYxNzA5NTcsMTEuNzI2ODcyODI4ODU5OTg3LDQzMS4yMTYyNDY0NjUzMjE4LDE1MTQuODAzNDcyMjMyOTkxNSwyMzk2LjUxMjg5NDMwMjQzNSwyNzM0LjE3NDI4MjM5MjA4Niw1MzY5Ljk3MzA2Mzg4MTI2MjUsMTgxLjMwNjIxNzk0NzMyMzQ2LDExNDYuMzI3MTkwOTg3MDQyNywxNTg5LjM5NzU3ODI4NTYwNzgsODM3LjE0MDY5NDg3Mzk0ODEsNDQ2Ljc4NjY4MzIxNDI2Mjg0LDE3MS4xMzQ3NjQxNzQ4MjU2NSwyMzMuODU2MDYyNzY1MTc5NCw4MS41MTg2ODM5Mzk4MjA5MywxNTU0LjA2MzYyNzUwMTAwNzIsNTEwLjQzNDExMDcyOTU5NDQsOTc0LjkyMTk1NTMyNTkyOTIsMTU4NC41OTU1OTUwNjc1OTU3LDE1MjkuMDE1NDQ1MzU3ODgwNSwyNjc4LjgwNDUwODQyNjk2MSw2MS40NDUxMDkxMDYxNjU1OCwxNy4zNTU1NzA2MDE2MTE3MDYKKzE1LFR1ZSA4IEZlYiAxMSwxLjcyMzYyMTM4MzY3MTE5MDksMC41ODU4MTgxODk4MjkzNDM5LDUuMzYyNzUwNTIyNjg3NzU2LDIuMDEyNDE0MDA5MDk0NTM2NCwxMS43MjY5MTI3NzcyNTM2MjUsNDMxLjIwMTI4NzQ1NDkyMTA0LDE1MTQuODA5Mzc1OTI1NTkzNSwyMzk2LjUxMTA0MjIwMzk0OSwyNzM0LjExNzczNzkwMTQ4NjYsNTM2OS44ODgxODQ0NTE5OTQsMTgxLjMwNDQ2NzU0ODQ1NTgsMTE0Ni4zMjczMzE2MTQyOTQsMTU4OS40MDM5MzUzNzE0NTM4LDgzNy4xNDE4OTQwMzk4OTg1LDQ0Ni43ODEyNTYzMDE0MzUzNSwxNzAuODg4NzkxNjc1NTU4MzQsMjMzLjgyMDUzMTU4OTA3NzEyLDgxLjUxOTAwOTI5MzQ0MzQ1LDE1NTQuMDY3Nzc4NDY4ODE5MSw1MTAuMzgxNzc2MjM0MDY2MjUsOTc0LjkyNTg1MzY3NTA1MjYsMTU4NC42MDE4NDY0NzI0MzU1LDE1MjkuMDE1NTkxODc5NzMsMjY3OC42NzE5NTIxNjcxNTY2LDYxLjQzMDQxMjg3Mjc4Njg0LDE3LjM1NTYyOTI2MDkyODI0MworMTYsV2VkIDkgRmViIDExLDEuNzIzNTQzMzY4NDY2NjQ5NywwLjU4NTgwMjU5NTM2MDQ3MzcsNS4zNjI0NDEyOTIyOTgwNTIsMi4wMDkwMzEyMTI3MDE0MDk2LDExLjcyNjkzNjQ3NTQ3NzQzOSw0MzEuMTU0NTQ2MTMyNDMxODUsMTUxNC44MTQ5MTEyNTY2MDMsMjM5Ni40ODM1NDY3Mzg3MTUsMjczMy45MjkyOTgxNDM5MjAzLDUzNjkuNTg3NTQzNDM3NzU3LDE4MS4yOTc0MTM2Mjk5NTg0NywxMTQ2LjMxNzIzMzQwMTA5MzcsMTU4OS40MTAyOTEwNzkwNzA3LDgzNy4xMzgyNzgzMzAyMzQ2LDQ0Ni43NTk3MzI5NzQ0MzU5LDE3MC4yNDgyMjU4MDY3OTc1NiwyMzMuNzEzMzMyNDQ0NTE0NDQsODEuNTE5MzMyODYxOTg0MTEsMTU1NC4wNjcyMjA3MzY1NDEsNTEwLjIyMzI3NzUyMjczMjY0LDk3NC45Mjk3NDg2OTkwNDc0LDE1ODQuNjA3ODY0MTcyMjE5NywxNTI5LjAwMjQ1NDkzMTg1NjgsMjY3OC4yNTY0MzcwMzQ5NjA1LDYxLjM4ODk0MDA1ODQ2NzI2LDE3LjM1NTY2MTU3OTk5OTkzNgorMTcsVGh1IDEwIEZlYiAxMSwxLjcyMzE3MzA0NDc1NTM5MDMsMC41ODU3MjM4MzY5MjkxMTYyLDUuMzYwOTA4NDUzMDI3Njc0LDEuOTk3MTAzOTA2ODM1OTQwNCwxMS43MjY4NjQ0NDExOTY4NjgsNDMwLjk1MjA2NDU1NzcwMDMsMTUxNC44MTgyNDMzOTc5NDMyLDIzOTYuMzEwNzEwMjY0MjYxNiwyNzMzLjA3NjQ2NjgxMjAxLDUzNjguMTYzMDAxOTM3MTE0LDE4MS4yNjE1ODQxODQxNzEyLDExNDYuMjQ3NjE4NDg2MDc4LDE1ODkuNDE2NjM3MTU2MDg4Nyw4MzcuMTA3Mzg5OTExMzk0OCw0NDYuNjQ3NDQ5NzM0NzAyNCwxNjguMjIwMDcwOTA2NjcxMjUsMjMzLjI1MTg0MjgzNDE3ODMsODEuNTE5NjQ1NDM5OTk3NDYsMTU1NC4wMzk1Mzk2NDQyMDM0LDUwOS41Mzg1MzYzMTMyOTMzLDk3NC45MzM2MjI5OTkzOTkxLDE1ODQuNjEyMzI5MTAyNjIwNCwxNTI4LjkxNDU1ODkwNDE0NTcsMjY3Ni40MTA4ODIyMDc5NDQzLDYxLjIyNjc4MzM4OTQyMjU3LDE3LjM1NTUzNDYwNjAwMTM4OAorMTgsRnJpIDExIEZlYiAxMSwxLjcyMTY4NjU2Mjk2MDUyODcsMC41ODU0MDA1OTkyNjE4MzU5LDUuMzU0NTAyMTkyMjQ1NzkyLDEuOTY4MzQ2NDU2MDkxNTEwMywxMS43MjYzNjQ0MjQ5MzU4MDQsNDMwLjIwMDIwMzg3NTQ1NTAzLDE1MTQuODExNTI4MzEyNDc0OCwyMzk1LjUxNzMyMjUzMjQxMzMsMjcyOS43NzE0MDgyNjIzMDU2LDUzNjIuNDE1NjgyNTMwNzk3LDE4MS4xMDk5NDkyNzAzMzg5NCwxMTQ1LjkxNjcxMzQ2MzAyNzUsMTU4OS40MjI5MzI1MDIwMDI2LDgzNi45NTk4MjYxMzM2ODg5LDQ0Ni4xNTYzMjAxMDcyMzc4LDE2NC42ODgyNDM3OTg2NTMzMywyMzEuNjY1ODkwNjAwNDQ5MjcsODEuNTE5OTA2ODEyMTc3MTEsMTU1My44OTM4MzEwOTk3OTU4LDUwNy4wOTE4MjIyMTA4MjgyLDk3NC45MzczOTk1MzM2MzUxLDE1ODQuNjA4OTU1MTM5MzE5LDE1MjguNTA5Njg3MjE3MjkxNSwyNjY5LjQyMTY4ODMzODM1NjUsNjAuNzMxMzg3MDI5MjMzOTYsMTcuMzU0NjgzNzAzNDM1MDcKKzE5LFNhdCAxMiBGZWIgMTEsMS43MTU0OTAyMzkxOTIyNTczLDAuNTg0MDY1ODEwOTM5MzUyNSw1LjMyNzYxMzY2OTUyNzEzNSwxLjkyNDU4MjI5MzQ4MTcxOSwxMS43MjM1NTAxOTc1MjE3MSw0MjcuNDgyMzM5NDU2NTY5LDE1MTQuNzQ4NTc1Nzc2NzYxNSwyMzkxLjYwOTU4ODM2MDI0ODQsMjcxNi43OTAyMjE5NjY4Nzc3LDUzMzguNjQyMTY3ODUyODEzLDE4MC40NDUzNTY5NzkxMTMzNCwxMTQ0LjIzMTYyMzYyMjk2NjMsMTU4OS40Mjg5MDAxMDY5MDksODM2LjIxNTM3MTg2NTA0MDgsNDQzLjk4MjY1OTcyMTU3NywxNjAuNjM5MjA1NDI0MjQ2ODgsMjI3Ljc1ODM1OTkwNDg4NTg1LDgxLjUxOTg3NzM1NTQ3NDM2LDE1NTMuMTQwMDYzNjYyODMsNTAwLjA5MDMxMzc1ODY1Mzk2LDk3NC45NDA2MTIyNDIwMzgxLDE1ODQuNTU3MjA2MzkxODQwNywxNTI2LjUxNTcwODQwNjUyMjQsMjY0NS4xMjQ1MzkzNDI5ODYsNTkuNjUyNzQwNTQxNDI1NDMsMTcuMzQ5ODc5ODk1MjMzNzU1CisyMCxTdW4gMTMgRmViIDExLDEuNjk2NDcxOTc2NTIyNzgwNywwLjU4MDE0MjUwMzA1ODcwNzQsNS4yNTM4MzcwMDk4ODE4MDgsMS44Nzc1NzUxNDI5MDMwNjU4LDExLjcwOTYzOTc3MjYwMDQyMiw0MjAuOTgwNjIzNTU4MDU3NSwxNTE0LjM5NTE0OTY5NjA5MjIsMjM3NS45MDIxNDk3OTI1Mjk2LDI2ODEuMTI0ODgxMDQ5NTU4Niw1MjcwLjI5MTc5NTY2Nzc1NzUsMTc4LjM4NzY0NjMyNTUzNTU3LDExMzcuMTkyMzAyMzU0NjI5NiwxNTg5LjQzMjg3NDQzNjU4NDQsODMyLjk1MTc4MDQzMDc1NzUsNDM3LjgyMzAzMDE4OTI5NjA1LDE1Ni43MjEwMDk3NDQxNjEwMiwyMjIuNTM3MjcwNDI2MTc4MTcsODEuNTE4MzMxNDk2NjQyNDUsMTU0OS43NzIxMDQxMjA1ODA3LDQ4OS4zMjA1NTM4NjM0MjI5Niw5NzQuOTQwODIyNTU4MDE5MiwxNTg0LjIyOTMxMDc4MjU1NjcsMTUxOC4yNjI3NDQ2MTMwNDI3LDI1OTYuMzA2NDQ3MzEzMjgyNyw1OC4yNzEyMzE5OTU4NTg1MywxNy4zMjYzMjE3OTgyOTg0OAorMjEsTW9uIDE0IEZlYiAxMSwxLjY2MjgxOTI4OTMwMjM0ODMsMC41NzIyODA5NTEzMTE3ODc5LDUuMTQwOTY2Njk3Njc5NDY4LDEuODMyODc5NTM2ODQ0ODQ5MiwxMS42NTA0MjA3NDM2MDE4Myw0MTEuNzA2MzI4MjgyMzA2MiwxNTEyLjU5Njk3MzM4MTQxNTIsMjMzNy42OTk5NTk3MzMxOTc0LDI2MjQuNjg0NTg4OTYyMjA3Myw1MTYwLjAwNzQ3NTcxNzI5LDE3NC44MDg0MTExMzgxMjY0LDExMTkuMzkzNjM3ODMwNTIxNCwxNTg5LjQyNDI5NTExMDg1MzYsODIyLjkwOTQxODcwNTUyOTIsNDI4LjM4NzMzOTA4MzAxNTgsMTUzLjE5NDg3MzE1OTk4NTU4LDIxNy4wOTg4NDEzMjkxNTg3Miw4MS41MDg5NzE0MjMwNTk0NCwxNTM3LjY0OTUxMDE2NjQ4MTQsNDc3LjQ2OTk5NzY1ODUyOTA1LDk3NC45MjUwMzcwOTQyNDQ0LDE1ODIuMzY5NjU4ODYyMDA5MSwxNDk2LjIyNTc3OTQ1MjU5MjksMjUzNS42Mzk2Njk2MTM3NjYzLDU2Ljg1MzgxMjkxNjUyOTU1LDE3LjIzMjM5ODEyNTA1OTk5CisyMixUdWUgMTUgRmViIDExLDEuNjIzNTUzNTIzNDU1MDg1LDAuNTYwOTgyMDQ5NjQxNTI5Miw1LjAxNzIwMjkzNzk2MTY3NSwxLjc5Mjg5MjUwOTczNjk4ODUsMTEuNDkwNjE4MDY0MTUzODM2LDQwMS43ODQ3OTQzNTcyNzMxLDE1MDUuMjA0OTY5OTM5OTUwNiwyMjg1LjU3NjczODQzNTA0MywyNTYxLjg2MjUwOTU4NzIwNjcsNTAzNi41MTI5MzAwNjk4NDEsMTcwLjY2NTkxOTU5MzAxNzA3LDEwOTQuNjI1NDQ2NzM3NTg4OCwxNTg5LjM0MzM4NzEyNDA1Niw4MDYuMjIzNjYxNjE0MTY5LDQxOC4wNTMzNDEzODMwNTgwNywxNTAuMTQwNjc1MjU3MzkyNSwyMTEuOTk0MjgxNzI5MDQzNTQsODEuNDYzNDU1Mzc4NzM5MjEsMTUxMS42Mjc0MjIzODU3MzM4LDQ2Ni4wNTU2MDY2MzA5NzY2LDk3NC44MzExNDg0MDYwNjE2LDE1NzQuMTQzOTY3MjY0NTYwMiwxNDYzLjkzMTk0ODE1ODg4MjMsMjQ3NC4xNzQ3NTM5Njc2Nzg1LDU1LjUzMzM1MDczODI1ODg3LDE2Ljk5NzEwMjAyODMxNDc3OAorMjMsV2VkIDE2IEZlYiAxMSwxLjU4NDQ5MTgyMjYwNTQ5MjMsMC41NDgxMDM5NjIxNzAzNjkyLDQuODk3NTI1ODE2NDk2OTE1LDEuNzU4MzgxODI2MTQ1Nzk2NCwxMS4yNDc1MDY2MTEzNjczNTgsMzkyLjMwNTExMzc1MTc0OTEsMTQ4NS4xMTM3NjQxMTY5ODk0LDIyMzAuMzIwOTEyOTU2ODY0LDI1MDAuNjgzNzg1NTc2NTczLDQ5MTUuOTEyNzc0MzM4MDI4LDE2Ni41NTk2MjA0NzgwNDA2NywxMDY4LjE3MTk0Mzc5NTE3MDEsMTU4OC44ODI3Nzk5ODQzNDAyLDc4Ny4wODQ2MjYxODg4NjE2LDQwOC4wNjYyODIyMDYwNjEzLDE0Ny41NjEzMzU3MjkxNzg4NiwyMDcuNDU0MDM1NzQ4NjAyNDgsODEuMjY2NzY4MDMxODY1LDE0NzcuNTEyMDQ2NTk1MTUzLDQ1NS43NDYzMTYxMzQ3NjUyNyw5NzQuMzc0MjIyMDcwMDgzNCwxNTUxLjk5MjExNTExNjY5OCwxNDI4LjcyMjQyODA0NTQwMTMsMjQxNy4wNzA2Njg0ODkzNjIsNTQuMzY0MjA3OTM2NjAxOTksMTYuNjQxMzg5ODc2NzkwNQorMjQsVGh1IDE3IEZlYiAxMSwxLjU0Nzc1MDY3NjI0NjA3OSwwLjUzNTE5MjYwNDI4MTI1ODgsNC43ODY1MDMwODk4NDY0OTIsMS43MjgyODEzNzI3NzQzNzEsMTAuOTc4NjM0Mjg3Nzc0OTg3LDM4My41NjM2NDE5MTQzMTE0LDE0NTUuMjMzMjYwMDgxNjM5LDIxNzYuODIwNTc3NTY3NTUzMywyNDQzLjczMDIzMzMwOTkyNzQsNDgwMy40ODc3MDM3NzEzNTMsMTYyLjcwMzg0NTcyNjMyMTMsMTA0Mi40NzYwMjI5MTcyMjU1LDE1ODcuMzUxODUzMDIwMzM5Niw3NjcuOTQyNDY4Mzk1NjkxMSwzOTguODA0MDc5NjIwMDI1LDE0NS4zNDA3MTU1NjcwMjk3MiwyMDMuNDI0NTc3NzQ4MTM2MjIsODAuNzM3ODE3MTc1Njc1MzUsMTQ0MS42NzM5Njc0OTQwMjA0LDQ0Ni41MTgzMzE5NDkyNzI0Niw5NzIuOTU0Mzk4MjI5ODcyNSwxNTE5Ljk5Nzc1MDI0NzU4MDgsMTM5NC4yMjA5NDQzNzQ3OTA0LDIzNjUuMTcxMzcwNjc0ODQ4Nyw1My4zMjkyNjU2MTM0NDU1LDE2LjI0NjE3ODYwMDYzNTM1NworMjUsRnJpIDE4IEZlYiAxMSwxLjUxNDMyNzQ0MjgzNzM1OTYsMC41MjI4NjEwMjEwNjEzNjAyLDQuNjg2NjM2NTUzODczNTI2LDEuNzAyNjIzMjgyMDI5OTA3NiwxMC43MDQ2MDIyMTUzNTIyMTYsMzc1LjczOTYyNDgxNDgwMzgsMTQxOS40MDI3NzM0MzQxNDQsMjEyNy4wMzM5MDMzNDQ4ODEsMjM5Mi4zNTIwNzk3MDQwNTU1LDQ3MDEuOTU0NjY4NDM2MDE3LDE1OS4yMDEwODMxNTg4NjY0MiwxMDE4LjUwNDgzNjM3OTYzMDgsMTU4My4zMjI0NjE1NzA0MTQ0LDc0OS42OTQzMTUzMzA2MTgsMzkwLjQ3NDU2Nzk1ODU0MTksMTQzLjQ3MDY1NTMwNDQ4NDY0LDE5OS45MzUyNDM2MDE4NzM1LDc5LjYyNjUyMjQxNzU2MjM2LDE0MDYuMzI2OTQ1ODAzODkyMiw0MzguNDY2NTM1NDI1Mjc0MDYsOTY5LjM2MDM4NTQ4NDYwNDEsMTQ4Mi4zMDg4OTk5NDY3Njc1LDEzNjEuODIyMzE3MjQ5ODY4MywyMzE5LjI4NDU1MDM2MjAyMiw1Mi40MzUxMTIxNTQ4MDAwOCwxNS44NDIyMjk2OTM4MjA3NAorMjYsU2F0IDE5IEZlYiAxMSwxLjQ4NzQ0NDI4MjQ5NDI1MjksMC41MTI0NzcwNjQ4NTcwOTM5LDQuNjA3MjA2MjQyNTY0Nzk0LDEuNjgzMzQzNjg3NzAyMzg0NCwxMC40NjA4MjMxMDMwMjMzNzIsMzY5LjU0Nzg4MDAyNTcxNTUsMTM4My43MTE2MDk2NzMyMTUyLDIwODYuMTAzNTgyMzMzNzg5NywyMzUxLjM2OTQ1NjMxNTg5Nyw0NjIwLjg3NDY3ODIzNDQyOCwxNTYuMzg3NTM5MjIwMDMwMjgsOTk4Ljc1MjEyOTMzMTAxNTYsMTU2Ni44OTMzMDYzMDMyMjAyLDczNC4zNTUwNTc3NjM0OTQzLDM4My44NTExNzI4MDYzNTkyLDE0Mi4wODQ0MzgyMzE3NzEzLDE5Ny4yNjc4NDE2Nzk3Njc4OCw3Ny42Mzc2NDEyNjY3NzMyLDEzNzUuNzE4MTkxNzEwNzMxLDQzMi4yNjExNTkxNzk3ODE2Niw5NTYuMzI3Njg4MTc1NTE3NiwxNDQ1LjE3NDkzNTUzOTkzODEsMTMzNC45NjA0OTU3NDAwMjEsMjI4My40MjUwODcwNDM0ODcsNTEuNzUzMjcyMzk5ODg5NTI1LDE1LjQ4MjA1NTQyNDY0NDgxMworMjcsU3VuIDIwIEZlYiAxMSwxLjQ2MzcwNjg1MjM1NzE2NzIsMC41MDMxOTYyNTM1MTQ1Mjk4LDQuNTM3Mjg0Mjk3NzE5NTQzLDEuNjY2NjQwNDk2NzM0NTEsMTAuMjM5OTU0MTIwMjkwNjcsMzY0LjEwNDgyNjYwMTQ0Mzk2LDEzNTAuNTQxNjE3MTk0OTY5LDIwNDkuNzUwNzQ4ODg3ODk5LDIzMTUuMjY0MTM0OTI0MzkyNyw0NTQ5LjQyMjI4MDgxNzEwNCwxNTMuOTA0MTM3MDA1MzI5MDYsOTgxLjE5Nzc4Mjg2MjgzMDUsMTU0MC4xODIyMDAyMzQ5ODA0LDcyMC42NTIwNjA5Njc4OTI2LDM3OC4wMjEwNDY3MTQzMjY4LDE0MC44ODgxMjg4NjgxMDc1NCwxOTQuOTQ1NjA1NDA2OTQzNCw3NS42MTY4ODA3NTU0MTg0OSwxMzQ4LjE2ODExOTQ2MDA0MjYsNDI2Ljg0NjMxODc4ODYwMzEsOTM3LjQ4NTY3ODI4MDk0MTksMTQxMC43NDM2NjUxNzYwNzI1LDEzMTEuMDQ5NjE4NjEyMjMzNiwyMjUyLjAxMTYwNTI2MDcyNzcsNTEuMTYwMDc1MTYxNjQwMzQsMTUuMTU1NTQ5NjQ3NDU2NTMyCisyOCxNb24gMjEgRmViIDExLDEuNDQ1MjI0MjI3NTMxNTM0OCwwLjQ5NTgyOTE1NDMxODk3NTU2LDQuNDgzMTA4NTQwNDkyNjg1LDEuNjU0MDMxMjkzMzYwMjY0OCwxMC4wNjA5MjQyNDc1MDY3ODMsMzU5Ljg5Njg4NTY3ODEzOTU0LDEzMjIuNjMwNzA2MTYyNjg1LDIwMjEuMTgwMDMwOTU1ODk2LDIyODcuMjUzNzAwOTk4MDM4LDQ0OTMuOTYyNjc2MzY2NzU5LDE1MS45NzE2Mzk1MzA3NjE4OCw5NjcuMzg3OTg2NzIzODk2OCwxNTAxLjAxMzQ0ODY4ODE0NzcsNzA5Ljc4MzU5NjI2MzMwMjksMzczLjUwNDM2NTc4MDY2MTIsMTM5Ljk5MDc4ODYwMjEyNDY3LDE5My4xNzg1NDEwMjQyMzEzOCw3My43MDk0OTA3OTExMTkyLDEzMjYuMDYwMjkxNjM3OTc2Miw0MjIuNzEwMzkxNjg3NTI1NDMsOTEzLjI1Nzg5MzUyMDQzNjUsMTM4MS44NjcxNjM4Mzc3MDE2LDEyOTIuMTkxMDMzNDM0NzgyNiwyMjI3Ljg2Mzk5OTQ4MzE5NSw1MC43MDkxOTk0NDQ3NTU1NCwxNC44OTA2NzA0ODQxMzI0MTYKKzI5LFR1ZSAyMiBGZWIgMTEsMS40MzA0MDQ3NTgzMjMyMTMzLDAuNDg5ODY0NDEwMzkyNDYsNC40Mzk3Nzc2MTMwNzgzMTcsMS42NDQwNzQyMjE4MzkwNzM2LDkuOTE0NDk2OTUyMjI2Nzk1LDM1Ni41MzQ5OTIyMTQwODkxLDEyOTkuMzk0OTYzMDU1MjcyNSwxOTk4LjE2NDg0MjU0MzA4ODgsMjI2NC44MzU4MjE1NDY4NzksNDQ0OS41NjU0ODE3MTQyNywxNTAuNDIyNjIxNDE4MjExMTgsOTU2LjI1ODEzMTE1MjA4MywxNDYxLjkzNzI0NTQwNDE3Myw3MDAuOTg4NTYwNDU1ODgyOSwzNjkuODkyMDYzMDMwNDUyMTYsMTM5LjI4NDMwMzYxNjk1NDkzLDE5MS43Nzc4OTM4NDMzMjE2Niw3Mi4wNDE2MjU1Mzk2NDUxNCwxMzA4LjA2Njc1OTkxMTQyMDYsNDE5LjQyNTk0MzcwMzE0MDUsODg5Ljg0NDg0MzcxMTc2NzYsMTM1Ny44NjQ0NjQzNDk1MTk1LDEyNzYuOTcyNzIwNDkyMjUxLDIyMDguNjI2NjQwNDU2NDUxNyw1MC4zNTIwMDM5MDQ1ODQ3NCwxNC42NzM5MzY3OTIwNTk3MjcKKzMwLFdlZCAyMyBGZWIgMTEsMS40MTg2Njk3MTYyODkwODM2LDAuNDg1MTA2OTA2ODEzNDkyOSw0LjQwNTUyNzIwMzc3ODM3NSwxLjYzNjI3MjM5MTUwNzY0OSw5Ljc5Njg1MjExMTg2MDkyNCwzNTMuODc5NzAxNTY1MDcxNTcsMTI4MC40ODY3OTk3MjIyNTU1LDE5NzkuODc4MDE5MTg3OTQ3NSwyMjQ3LjEwNzQ2NjEyMTM1ODQsNDQxNC40NDk2Nzg3NjgzMSwxNDkuMTk2MjgyNDk0ODI0MTIsOTQ3LjQxMTc1NjA2MjI3NjQsMTQyNi4zNDIyOTQzODk0NzM0LDY5My45NzcxMDI0MDYyODQxLDM2Ny4wMzY5MjE1NjIzNTgxLDEzOC43MzE3Njk2NzEyNjMxNSwxOTAuNjc3ODMxMjc0NjcwNTgsNzAuNjM3NjU0NzcyODg2MzEsMTI5My42NjE1OTE1OTc0MTUsNDE2Ljg0Mjk5NDc0NjI0OTUsODY4Ljg4OTUzOTU4NjkzNDMsMTMzOC4zNTM1ODMyNDI5ODgyLDEyNjQuODY1MzQ2NjI2Nzk3MiwyMTkzLjQ2Mzk4NjU3ODExOTYsNTAuMDcxNTUzNzM3MTQyNjgsMTQuNDk5NzUwMDI2NzM1NzA2CiszMSxUaHUgMjQgRmViIDExLDEuNDA5NDYyNTUwOTIyMzczLDAuNDgxMzU0NjkxNzA4MTE0MDcsNC4zNzg2ODgxOTM1MDI1MjU1LDEuNjMwMTkwMTc0NDU1MDkzMyw5LjcwMzU5NzcxODE3MTk5OSwzNTEuODAwMDQwMTg5MTgxMiwxMjY1LjM2MDg2MDIzMzE0NjcsMTk2NS40OTY3OTg5NjY0MzE3LDIyMzMuMjEwNzU1MzA1OTkyLDQzODYuOTIwNTMzNDQ4MTY4LDE0OC4yMzQyNjk1ODc0NzU5NSw5NDAuNDUzMDQ2MTE4MjIxMSwxMzk1LjY1NDA4MjAyOTE3NCw2ODguNDUwMTA2MDkxOTQxNywzNjQuNzk5NzEzODAwNjEyOSwxMzguMzAxMzY4ODc4MTEzMDcsMTg5LjgxOTM0ODczNDA3NzA3LDY5LjQ4NzQ4MzczNDYxMzQ4LDEyODIuMjcyMDE5OTA3MDY3Myw0MTQuODI1Njg1NjgxMzk3MjYsODUxLjAxNzUyNTIxMjA2NDgsMTMyMi43NTc4Mzg1NDI4MDU4LDEyNTUuMzM1MTM2MDc5NjI2NCwyMTgxLjYwNDg4MjY4NDI5NDQsNDkuODUyNzE5OTAwODk1NzgsMTQuMzYxNjQyMTQ0ODIxNDYxCiszMixGcmkgMjUgRmViIDExLDEuNDAyMjc4NjM5MzIxOTc3NywwLjQ3ODQxNjQwODE0MTc5OTYsNC4zNTc3NjMxMTA3ODgyNDU1LDEuNjI1NDU2OTUwNzM5OTkxOSw5LjYzMDMzODcxMjY5OTU1NSwzNTAuMTc5MDU3ODYyMzU4MTUsMTI1My40MDE2NjM2ODczMzUzLDE5NTQuMjU5NDg1MjQ0MzY1NCwyMjIyLjM3Mzk0MTA0MjA4MTIsNDM2NS40NTE4NTUwNTY4MzIsMTQ3LjQ4Mzc0MjAyNDI1OTA0LDkzNS4wMTQ3NDg0MzA5NjA0LDEzNzAuMTEzMjYxNjIzMzI2LDY4NC4xMjQ2NDQ3NjIyNjMsMzYzLjA1NTU1ODY1NjQxOSwxMzcuOTY2Mzc2MzEyNTc2MzMsMTg5LjE1MTQzNDM1MTMxMzU1LDY4LjU2MjcxMDIxNjIxMTA2LDEyNzMuMzQwMTk4NjY4MTg2NSw0MTMuMjU1NjY5ODM1NTg5MSw4MzYuMjQ4MzY2NTY1NzM5NSwxMzEwLjQzNDEzNjQ3MTk4NTMsMTI0Ny44ODM4OTA1MzYwMzI4LDIxNzIuMzY4ODA5ODI2ODc0LDQ5LjY4MjQ1MzA2MjY0OTEyNCwxNC4yNTMxMjU3MDE1MTQ1MjQKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvTm9uWmVyb01vcnRhbGl0eVJhdGVfRkRfUmVmZXJlbmNlL0h1bWFuUG9wdWxhdGlvbk1vZGVsL2h1bWFuL0luY2lkZW5jZV8wLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvTm9uWmVyb01vcnRhbGl0eVJhdGVfRkRfUmVmZXJlbmNlL0h1bWFuUG9wdWxhdGlvbk1vZGVsL2h1bWFuL0luY2lkZW5jZV8wLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYzI0NDAxCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Ob25aZXJvTW9ydGFsaXR5UmF0ZV9GRF9SZWZlcmVuY2UvSHVtYW5Qb3B1bGF0aW9uTW9kZWwvaHVtYW4vSW5jaWRlbmNlXzAuY3N2CkBAIC0wLDAgKzEgQEAKK2l0ZXJhdGlvbix0aW1lLApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Ob25aZXJvTW9ydGFsaXR5UmF0ZV9GRF9SZWZlcmVuY2UvSHVtYW5Qb3B1bGF0aW9uTW9kZWwvaHVtYW4vSW5jaWRlbmNlXzEuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Ob25aZXJvTW9ydGFsaXR5UmF0ZV9GRF9SZWZlcmVuY2UvSHVtYW5Qb3B1bGF0aW9uTW9kZWwvaHVtYW4vSW5jaWRlbmNlXzEuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJjMjQ0MDEKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L05vblplcm9Nb3J0YWxpdHlSYXRlX0ZEX1JlZmVyZW5jZS9IdW1hblBvcHVsYXRpb25Nb2RlbC9odW1hbi9JbmNpZGVuY2VfMS5jc3YKQEAgLTAsMCArMSBAQAoraXRlcmF0aW9uLHRpbWUsCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L05vblplcm9Nb3J0YWxpdHlSYXRlX0ZEX1JlZmVyZW5jZS9IdW1hblBvcHVsYXRpb25Nb2RlbC9odW1hbi9JbmNpZGVuY2VfMi5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L05vblplcm9Nb3J0YWxpdHlSYXRlX0ZEX1JlZmVyZW5jZS9IdW1hblBvcHVsYXRpb25Nb2RlbC9odW1hbi9JbmNpZGVuY2VfMi5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGFkMWE1YgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvTm9uWmVyb01vcnRhbGl0eVJhdGVfRkRfUmVmZXJlbmNlL0h1bWFuUG9wdWxhdGlvbk1vZGVsL2h1bWFuL0luY2lkZW5jZV8yLmNzdgpAQCAtMCwwICsxLDMzIEBACitpdGVyYXRpb24sdGltZSxFRy1GUkctRzIxMDAwMSxFRy1GUkctRzIxMDAwMixFRy1GUkctRzIxMDAwMyxFRy1GUkctRzIxMDAwNCxFRy1GUkctRzIxMDAwNSxFRy1MT0UtRzI0MDAwMSxFRy1MT0UtRzI0MDAwMixFRy1MT0UtRzI0MDAwMyxFRy1MT0UtRzI0MDAwNCxFRy1MT0UtRzI0MDAwNSxFRy1MT0UtRzI0MDAwNixFRy1MT0UtRzI0MDAwNyxFRy1MT0UtRzI0MDAwOCxFRy1MT0UtRzI0MDAwOSxFRy1VUEUtRzI5MDAwMSxFRy1VUEUtRzI5MDAwMixFRy1VUEUtRzI5MDAwMyxFRy1VUEUtRzI5MDAwNCxFRy1VUEUtRzI5MDAwNSxFRy1VUEUtRzI5MDAwNixFRy1VUEUtRzI5MDAwNyxFRy1VUEUtRzI5MDAwOCxFRy1VUkctRzMwMDAwMSxFRy1VUkctRzMwMDAwMixFRy1VUkctRzMwMDAwMyxFRy1VUkctRzMwMDAwNAorMSxUdWUgMjUgSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzIsV2VkIDI2IEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCiszLFRodSAyNyBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorNCxGcmkgMjggSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzUsU2F0IDI5IEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCis2LFN1biAzMCBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorNyxNb24gMzEgSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzgsVHVlIDEgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzksV2VkIDIgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzEwLFRodSAzIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxMSxGcmkgNCBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTIsU2F0IDUgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzEzLFN1biA2IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxNCxNb24gNyBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTUsVHVlIDggRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzE2LFdlZCA5IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxNyxUaHUgMTAgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzE4LEZyaSAxMSBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTksU2F0IDEyIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyMCxTdW4gMTMgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzIxLE1vbiAxNCBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjIsVHVlIDE1IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyMyxXZWQgMTYgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzI0LFRodSAxNyBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjUsRnJpIDE4IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyNixTYXQgMTkgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzI3LFN1biAyMCBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjgsTW9uIDIxIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyOSxUdWUgMjIgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzMwLFdlZCAyMyBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMzEsVGh1IDI0IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCiszMixGcmkgMjUgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvTm9uWmVyb01vcnRhbGl0eVJhdGVfRkRfUmVmZXJlbmNlL0h1bWFuUG9wdWxhdGlvbk1vZGVsL3J1bnBhcmFtZXRlcnMuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Ob25aZXJvTW9ydGFsaXR5UmF0ZV9GRF9SZWZlcmVuY2UvSHVtYW5Qb3B1bGF0aW9uTW9kZWwvcnVucGFyYW1ldGVycy5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjI5NTA2NgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvTm9uWmVyb01vcnRhbGl0eVJhdGVfRkRfUmVmZXJlbmNlL0h1bWFuUG9wdWxhdGlvbk1vZGVsL3J1bnBhcmFtZXRlcnMuY3N2CkBAIC0wLDAgKzEsMiBAQAorcG9wdWxhdGlvbklkZW50aWZpZXIsbmFtZSx0YXJnZXRJU09LZXksYmlydGhSYXRlLGRlYXRoUmF0ZSx0aW1lUGVyaW9kCitodW1hbixIdW1hblBvcHVsYXRpb25Nb2RlbCwsMy45RS01LDMuNUUtNSw4NjQwMDAwMApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvTm9uWmVyb01vcnRhbGl0eVJhdGVfRkRfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL0Rpc2Vhc2UgRGVhdGhzXzAuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Ob25aZXJvTW9ydGFsaXR5UmF0ZV9GRF9SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vRGlzZWFzZSBEZWF0aHNfMC5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmMyNDQwMQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvTm9uWmVyb01vcnRhbGl0eVJhdGVfRkRfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL0Rpc2Vhc2UgRGVhdGhzXzAuY3N2CkBAIC0wLDAgKzEgQEAKK2l0ZXJhdGlvbix0aW1lLApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Ob25aZXJvTW9ydGFsaXR5UmF0ZV9GRF9SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vRGlzZWFzZSBEZWF0aHNfMS5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L05vblplcm9Nb3J0YWxpdHlSYXRlX0ZEX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9EaXNlYXNlIERlYXRoc18xLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYzI0NDAxCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Ob25aZXJvTW9ydGFsaXR5UmF0ZV9GRF9SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vRGlzZWFzZSBEZWF0aHNfMS5jc3YKQEAgLTAsMCArMSBAQAoraXRlcmF0aW9uLHRpbWUsCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L05vblplcm9Nb3J0YWxpdHlSYXRlX0ZEX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9EaXNlYXNlIERlYXRoc18yLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvTm9uWmVyb01vcnRhbGl0eVJhdGVfRkRfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL0Rpc2Vhc2UgRGVhdGhzXzIuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMzMWE5NTMKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L05vblplcm9Nb3J0YWxpdHlSYXRlX0ZEX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9EaXNlYXNlIERlYXRoc18yLmNzdgpAQCAtMCwwICsxLDMzIEBACitpdGVyYXRpb24sdGltZSxFRy1GUkctRzIxMDAwMSxFRy1GUkctRzIxMDAwMixFRy1GUkctRzIxMDAwMyxFRy1GUkctRzIxMDAwNCxFRy1GUkctRzIxMDAwNSxFRy1MT0UtRzI0MDAwMSxFRy1MT0UtRzI0MDAwMixFRy1MT0UtRzI0MDAwMyxFRy1MT0UtRzI0MDAwNCxFRy1MT0UtRzI0MDAwNSxFRy1MT0UtRzI0MDAwNixFRy1MT0UtRzI0MDAwNyxFRy1MT0UtRzI0MDAwOCxFRy1MT0UtRzI0MDAwOSxFRy1VUEUtRzI5MDAwMSxFRy1VUEUtRzI5MDAwMixFRy1VUEUtRzI5MDAwMyxFRy1VUEUtRzI5MDAwNCxFRy1VUEUtRzI5MDAwNSxFRy1VUEUtRzI5MDAwNixFRy1VUEUtRzI5MDAwNyxFRy1VUEUtRzI5MDAwOCxFRy1VUkctRzMwMDAwMSxFRy1VUkctRzMwMDAwMixFRy1VUkctRzMwMDAwMyxFRy1VUkctRzMwMDAwNAorMSxUdWUgMjUgSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzIsV2VkIDI2IEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjA1MDM2NjU4NjU5NDE3NjYzNiwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzMsVGh1IDI3IEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjA4ODEzOTc2MzcwOTI3ODMxLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorNCxGcmkgMjggSmFuIDExLDEuMzkyMDQ3NTU0Njk4Mjk2RS01LDAuMCwwLjAsMC4wMDIzMTYwODQ3NDk3MzkyMDU2LDAuMCw4LjM2NzM3MDg3NjMzNjM0OUUtNCwwLjAsMC4wLDMuNTkzMzI4NTE1NDk3MTEwM0UtNCwyLjU2ODE1NzMzNjA2MTEyNTdFLTQsMC4wLDAuMCwwLjAsMC4wLDEuMzYyOTI5NzYxMjM1MjMyNUUtNSwwLjMxNzM4NDgwMTQzODgyNzQ3LDAuMDAyMzQ0NDYyNjYyNTU1NzE3LDAuMCwwLjAsOS4zMTM2MDg5ODE0ODUxOTlFLTQsMC4wLDAuMCwwLjAsMC4wMDE0NDM3NTA5MTY1NTMwMjYsOC41MjA3NTkzMDQ1OTg0NDRFLTQsMC4wCis1LFNhdCAyOSBKYW4gMTEsNC4zMTUyMDEyNTIxMzcwMjU1RS01LDAuMCwwLjAsMC4wMDcxNzk2MTg5MDgwNDE1Njk1LDAuMCwwLjAwMjU5Mzc5NzEwOTI0NTg1MTYsMC4wLDAuMCwwLjAwMTExMzg5NDEwODY1Njk3MjYsNy45NjEwMTgwODAzNzU4NDdFLTQsMC4wLDAuMCwwLjAsMC4wLDQuMjI0OTM5MTUxOTU3MDU1NkUtNSwwLjc2MDUzMzUwMTg1MDQyNzYsMC4wMDcyNjc1ODgwNDEzNTQ1MTMsMC4wLDAuMCwwLjAwMjg4NzEyMDk3ODYzMTA1NzcsMC4wLDAuMCwwLjAsMC4wMDQ0NzU0NzYyMzgyNjkxMTEsMC4wMDI2NDEzNDU4NjYyMDg2MjA3LDAuMAorNixTdW4gMzAgSmFuIDExLDIuMDgxODE2ODExNzg2ODA4NkUtNCwzLjk4OTE2NTg2MDQ5OTY2ODZFLTUsMi44NjQ0MDQ5NDU4MjczNjFFLTUsMC4wMjc3MjIyODc4NDk0NzY4ODMsMS4wMzgzNDM1Mjg4Mjc3NjYzRS02LDAuMDExODI1MTg2MTYxNjQwNjY0LDIuOTQ1ODM3NjA0NzAyNzM1N0UtNiwxLjYwNjU4NjYzMTE3OTg2NzhFLTQsMC4wMDUxNTkwMDk5NzY1NDA3NzQ1LDAuMDAzOTExNjQyMDI4MTIxOTk3LDEuMzc3NzA2NDEwNjYzOTgxNkUtNCwxLjM4NjAzMDQ4NTc3OTE2NDNFLTQsMC4wLDUuODUzNDgzMzk0OTYwMjI0NUUtNSw0LjgyODM1OTQzMzM4MTQ4NUUtNCwyLjE3MTA5NDY4MjcwMzcyMDMsMC4wMzQ0MDg5NTI4OTUwOTA1Niw4LjY5ODcyNjc5MDMxNzk2OEUtMTAsMy4zMDk5NTIyNzczNDgzODJFLTUsMC4wMTM1MzA4NDE0NjY1NDIxNCw4LjcwODM1ODQ0NTI5MDYyNUUtMTAsOC40MDk1NTAxNTM3ODQ2MjVFLTEwLDEuMTA4MTE4MzMxNzk0NDgyOEUtNCwwLjAyMTIxNjY4OTQ0OTkxNTUyLDAuMDExMjIzNzcwOTMyMzAwMzIzLDAuMAorNyxNb24gMzEgSmFuIDExLDYuODQwNzI3OTM3Mjk5MTgzRS00LDEuNzc1MTA4OTgzNzAyNzcyM0UtNCwxLjI3NDYxMDA1MTM2Mjg1MzVFLTQsMC4wODMwNDU1ODM4Njg1MzQ3NSw0LjYyMDQ0NjkzMTU4ODAxNEUtNiwwLjAzODA1NTc5NTE4NzQ1ODQ0LDEuMzEwODQ2MTgxMzU3MjkxRS01LDcuMTQ5MDI5MzQ0NTE2NDExRS00LDAuMDE2NzAyMTU3ODQwNTQyNjE3LDAuMDEyOTM1OTk3ODA1NzA3ODE0LDYuMTMwNTUyMzY1NDI0MTlFLTQsNi4xNjc1OTMxMDAxODExOTVFLTQsMC4wLDIuNjA0Njk3NjcwMTQxODYyRS00LDAuMDAxOTExMzA0NDIzNDA0OTc5OSw1LjY0NTczMDQ2MDY3OTM5NDUsMC4xMTIzMDYxODQxMDEwODk1OCwzLjg3MDc4MTE5MjQ1MTM0OUUtOSwxLjQ3Mjg3MDgzMjc0NDk5OTRFLTQsMC4wNDM5OTg2NDI3MjExNjg0NSwzLjg3NTA2NzExMDM1ODU3NEUtOSwzLjc0MjEwMjY0OTgzNTc2NkUtOSw0LjkzMDkzMjYxODMyNDQ2NkUtNCwwLjA2OTI4MDY4MTQwMDE3MjgxLDAuMDM1MTEyNjA4NzEyMDY3MjgsMC4wCis4LFR1ZSAxIEZlYiAxMSwwLjAwMjQ1MTAyNjc5Nzc3NjE5NSw4LjM5OTE5OTQyNzkzNTIzNUUtNCw2LjY2MjY5MjA5NTU4NzU5NkUtNCwwLjI1MzEzNzE4MDY1MzA1NTIsMi42NzY4NzgxNjM4MzA3NTFFLTUsMC4xMzA2NDUxMzQ4NzA0MzYzNiw3LjY2NjIyNzE3MDQxNzY0M0UtNSwwLjAwMzkxMzY5MTQzMzQzMjExNSwwLjA1ODEzMzA5MjM3OTE0OTAzLDAuMDQ2OTQ5NDc0MDMyMTA4NTg1LDAuMDAzMTc0MjU4MzIxNTI4MzUyLDAuMDAzNTA1NDE3NzE3OTQxNjM3LDguNDk3Njk5MTMxMzczOTg5RS05LDAuMDAxNDI2ODE1MjU2NzY2ODI1MSwwLjAwOTI2NTk1MDExNjU5NTE4OSwxNS4zMzk3NDE3NDQ0NTE4NzgsMC4zOTY4NjE3MTA4NTM0MDEwNSw1LjAyMDIwMTU3MjE4NDQ4N0UtNyw4LjIyMDExODYyMTIwMzI0RS00LDAuMTU0MzAxMDYyODkwNzUwMjQsMi4yNjUxMTE0MjA1OTQ3OTYzRS03LDYuMTUzNzE3NDA0MTQwODM4RS02LDAuMDAyNjcyNjk2Mzg4Nzg2MDMzMywwLjI0NTA1NDc4NTc2MDQ4NTY3LDAuMTE0NDg5NzYwMTE0Njk5MDIsMS43MzkzOTM3MjA4ODA1MTY3RS03Cis5LFdlZCAyIEZlYiAxMSwwLjAwNzkxMzU5MjA3MTM0NjUyNiwwLjAwMzExMDY3NzQ2MTI5MzQ5NSwwLjAwMjU5OTk2ODM4MDcxMDAyMiwwLjcyNDg0MDkxOTA0NDI2NTcsMS4wOTQyNDE5NDQ3NTE5NzRFLTQsMC40MDkyOTg2NDg4NDkwODk1LDMuMTQ2MDUzNTQyNzUyNzU1RS00LDAuMDE1NjA3NjQ0OTY2NzgxNDYzLDAuMTgzOTcwNjk1MDc0Mjk4ODYsMC4xNTI5MDQ0MjMwNjE0Nzg3MiwwLjAxMjMyOTI5NTQwNjc2Mjg3NiwwLjAxNDIxMzIwMDc4Njg2NzMxMyw0LjkyODQ1NzMwMDkwMTcxMkUtOCwwLjAwNTY5MTY5NDMzNTc0NDc5LDAuMDM1MjU1OTk5NDc4MDA0OCw0MC43NTQ5ODIxMTQ0NTA0MzUsMS4yNjkxNzI5OTMxMDU4OTMsMi44NzMyMDEzMzI0MTkzMzA1RS02LDAuMDAzMzA2NTkxNzg1NDU5NTA3NSwwLjQ5MDgzNzQ2NjE4MTI3OTMsMS4yNzUyNzQwNDM2NTM5ODI2RS02LDMuNTY1MjkzNjg5NzQ3MTcyRS01LDAuMDEwNjEwMjA5NjA4OTg4ODc3LDAuNzg0MjEzMjkyMjAyOTkwNiwwLjM0NTMyNTYwMTQyNDU1ODE1LDEuMDA4ODA1NzM0NDI1NzM4NUUtNgorMTAsVGh1IDMgRmViIDExLDAuMDI1ODA4ODM5NTQwNTA4MjQ2LDAuMDExMjc0MDI2NDU5NTc1NzI2LDAuMDEwMDc3ODQyOTYwNjAyNjMsMi4wNjA5NDQwNzM5Mzc4MjEsNC41Nzg3NjU2NjE4Mzk5NTlFLTQsMS4yODU4OTI4MDkwMjU3ODQ4LDAuMDAxMzI4MTQ3NjA0OTUzNjkxMywwLjA2MjY5MzQ1MTUxMDM2MzIxLDAuNTg1ODY0NTIzMDQxNjY2LDAuNTAzOTE0ODMyNzQyNTY0NCwwLjA0NzQ4MzQyNjQyODgxMzg4LDAuMDU4NjcxMzYzNzA2NjQwNDMsMy4yNDUyMjQxNzQyODg3Njk1RS03LDAuMDIyODY2ODUyNjAyMDY2NzgsMC4xMzY1OTk1NTUzMzI0NTQ3MSwxMDkuNDgzMzQ5OTg1NTAwMDEsNC4wOTA0NzQ3MzQ4Mjg0NTQsMS42MzE3NTcxNjU4NTMyMDE0RS01LDAuMDEzNDc5MzczNjYxNjU1NDU1LDEuNTcxNjA2NzUzMzMxMTM3OCw3LjE4OTY3NTE2NjIyMjI0MzVFLTYsMi4yNTk2MTc5MDMwNDA4MzUxRS00LDAuMDQyMzE2NTczMTI3MDc2NTI2LDIuNTI5NjMwMjA3Mzg0NjI3MywxLjAzODEyODE5MDYzMDYyMSw1Ljg0MDI4NzMxNDU1MzA0N0UtNgorMTEsRnJpIDQgRmViIDExLDAuMDgxMjA1MTUyMjU0MjA0NiwwLjAzODAyODc5ODkyNTQ2ODIsMC4wMzU4MjQ4ODc4MTYxMjkzMSw1LjczNzE5OTYyNzM4NzQ2NSwwLjAwMTcyNjA5NDU5MDY3MzcwNDUsMy45MTQwNzkxODQ1NjE0MDEsMC4wMDUwNDEwMDE1NDE0MjM0OTEsMC4yMjkyMTU4MjMyNjM2ODA3MywxLjgwNTg2NTc5MDg0NzIzNzMsMS41OTk3MzgzNDA0MjA4OTMxLDAuMTY3OTU3MzA1MzQ0NDY2OCwwLjIxODk3NTMzMDgyNjM0Mjc0LDEuNTU5MzE4MDA5NzA4NzYyNUUtNiwwLjA4MzYxMTgwMTc4MTE2MDgyLDAuNDg4ODk4NTcyODEwMzg3OTUsMjkyLjUyMDQ3NjAyNjM2OTYsMTIuNzM3NjY0NzY1NzgwOTk4LDcuMjQyNDM1NjA1MDA2NDM2RS01LDAuMDQ5ODQzNzMwNDQ5MzM0OTYsNC44NjU4MjMzOTU4ODczMjcsMy4xODMzNjQ1Njg3MDI0NjFFLTUsMC4wMDEwNjUyMTcxNjgwMTY4NzU2LDAuMTUzODc0NTcyNTY0MzY3NTcsNy44ODMyNDM3MTkxNDAzMTQsMy4wMzc1OTI0MzA2OTMzNDA2LDIuNjE4MTA0NTUxNjAyMjAzNUUtNQorMTIsU2F0IDUgRmViIDExLDAuMjU0MTc3MzkxNDkxMDgzMiwwLjEyNTQ2MTE4NjgxNDczMTQ1LDAuMTI0Mzk0NTExNjk2NjM2NywxNS44NTYzMzg4MTMzNTg4NzgsMC4wMDY0MDM0OTI4NDk5MzkzMDMsMTEuODI3MDY2NDcxOTI4MzA1LDAuMDE4ODY5MzE4MzY5NzA0NDQ0LDAuODIxNjUzODk5NzQ4NTM4Niw1LjUzNDg1NDUzNDA5ODI4Myw1LjA1MzYzNDU2ODczNzE5MiwwLjU4MDM5MTA1MzIzNDQyMiwwLjgwMzIyNDcxNDcwODkxNDQsNy4zNDM0MTcwNzk5Nzk5NzVFLTYsMC4yOTk2OTA5NDMxNjY3NzAwMywxLjcyNTgzNzM0MTAwMDIyMDgsNzgzLjY1MDExMDk0OTYxMzEsMzkuNDMyNTI3NjUzNTY3NzQsMy4wNTg3MDQ2MzE5MDk0MjY2RS00LDAuMTgxMDEyNTA5OTEzMTU3MTUsMTQuOTcyMjk4OTgzMDA3MzU4LDEuMzQ1NDkwMDcxMTQ2MjAwNEUtNCwwLjAwNDg3MDM0MzE3MTUxNzU4NzUsMC41NDgyNzM4ODc5MDA4MjcxLDI0LjQyNTQ0OTg3Mjg2MTEyLDguODE0OTQ4MTAyNTEyMjc1LDEuMTExMzYwMzQwMDg0MTMyRS00CisxMyxTdW4gNiBGZWIgMTEsMC43ODMxMTU1MDI4MjM1OTQyLDAuNDAxNzIxMjIyMzMxMjQ1LDAuNDE2MjY4NjkyODA4MDk1NzUsNDMuNDIxNjc2MzkzNTg2NTk0LDAuMDIyNzUxMzE1Mzc3MDk1Mzk4LDM1LjIyOTM0MjA2OTQwNDU4LDAuMDY3NjA4NDA2ODQxMjIxNTcsMi44MzE0MjU0ODMxNTE2OTIzLDE2LjcyMzU4MjkzMzQ0MTI0NiwxNS43MDM1MTg5NDU4MDA3MiwxLjkzNDMxNjY3MjE5NTg5LDIuODI1NDAyODUyOTM5OTMxNSwzLjEyMTYyMDA4Mjk3NTM1OUUtNSwxLjAzMjU1NzQ2NzUzMzU5NDUsNS44ODU4MjI3ODc1MTc3MiwyMDk1LjQ1MTcxNTkzMTQyNTUsMTIwLjIxNjc4NjQ3NTIyNTgsMC4wMDExODk5NTI1MDc2ODg5Mjg5LDAuNjMxMjA2MDg5MTMwMzgyMyw0NS4zODQ5MDMwNzg2MDc5ODQsNS4yNDM1ODgwNjU3Mzc1NjdFLTQsMC4wMjAyMTc3Mzk5MzY4NDc4NTUsMS44NzkxNTgwOTQ5OTY2NjM1LDc0LjUzMTE3Njg2ODkyNjc5LDI1LjI2NjI1MjExNDkyNDA1OCw0LjMzMTk0MDc5MTQ4Njg3NEUtNAorMTQsTW9uIDcgRmViIDExLDIuMzk2MzU3MTUyMDI3MDQyLDEuMjY2MTYyMTAwMzA2MDk3NywxLjM2NjAxMjI3OTU1OTQ1MTEsMTE4LjI1NTc1NTMzNTA2ODM5LDAuMDc5MzQ1ODA5MDMxODc5NDIsMTA0LjE3NjQ2NDg3MTI0NzAyLDAuMjM3OTk2ODc1MTY3ODYzMzMsOS41NzUyMzA3NTY3NjE3MjcsNTAuMjEwODI2NDgwODU4Njg1LDQ4LjQ1Nzc5NzIwMDA2NjM5NSw2LjMyNTUyNzA0NTQ1MTQ3Miw5Ljc1NDEyNDU1MTkwNjUzNiwxLjI4NDEzOTAwODIwODEyMDNFLTQsMy40OTA3NDUzODYxMTAzMDUsMTkuNzU3NTkwMDcyODI0OSw1NTk3LjM5OTk3NzMxNzg3OCwzNjMuODk3OTA3NjMzNzgzMzUsMC4wMDQ0NTk2MTU0MTA3MDUwNjUsMi4xNjA3NDM1ODI0NjA2NywxMzYuNjA0MDM5Mzc3MTQ4MzgsMC4wMDE5NzE1NzIzMzA2Nzk2NTI1LDAuMDgwOTk2MjQwOTUxNTEyMTQsNi4zMjAyMzI2Njk5NDUzNDIsMjI1Ljg0NzE4NjUyNTMwMDY2LDcxLjkxNTgwMzMzMzU3NzgzLDAuMDAxNjIwMDA5MDc1NTQ0NDczNAorMTUsVHVlIDggRmViIDExLDcuMjY4MTcwMjMzMTQyODQ1LDMuOTI4MzQ5NjI4ODI3MTQxMyw0LjM5MjIwOTEzMzIyNjYwOCwzMTkuOTExMTg0MjgwNTQ2MiwwLjI3MDM4MDY5NTI2NTk0NSwzMDUuNTEyNDY3ODczNTgwMzYsMC44MTg1ODg5NDI5NzU4MDY0LDMxLjY5NjYxMjk3OTk1MzAxMywxNDkuNTcwMTI3MjkzMDkxMzMsMTQ4LjE0ODM4OTI2NTc4Mjk1LDIwLjI4MTg1NTg3NjY1MzIxOCwzMi45MjE1ODI0Njc3NDAzMTUsNS4wMzczNzQyNTM1ODUyMTFFLTQsMTEuNTUwNTUzNjE1ODc4NjcsNjUuMDYxMTYyNzA1NzY3NDcsMTQ4NzIuNjkxMjQ2NDU0MzQ2LDEwOTEuNDcyMjI0NTYyNzc1NiwwLjAxNjA2ODMxMzAzNTEzNzA2LDcuMjM2NTk4Njk5Nzk2NjM2NSw0MDcuNTYwODAzMjg5MDg0MSwwLjAwNzEzMTQ0OTE4ODU2NDg1LDAuMzEwMDQyODk2MzM4MzI4OTMsMjAuODEzMDgxNzE2NzM3MDAzLDY3OC4zOTg4MDM1NzI4OTQ3LDIwMy4xMjE2MjY2NDQ1NzM5NSwwLjAwNTgxMDAzMTY4ODU5MDM1MgorMTYsV2VkIDkgRmViIDExLDIxLjkxMTI1Mzg1MzIwODQsMTIuMDU0OTA4OTQxMDMyMTc0LDEzLjkxODAxNTcxNDA4ODk1LDg1Ny40OTExNjk3MzAzODc2LDAuOTA3NTA1MDA0ODk3NzU3NSw4OTAuMzg3MTU2MzgzMzUxOCwyLjc3NDQzNjY2NzEyNTQxLDEwMy40MTIyNTIxNjQ1NzU5Myw0NDMuMTMxNjg2MTYzMjE5Nyw0NTAuMDcxOTk2NjkwNjM5Niw2NC4xMzY3MzcxNDg0NTM1OCwxMDkuNDU3OTc1Mjg2NDY3MTMsMC4wMDE5MjMzODIwNzM3NzQ5NjI3LDM3LjY2NTIwMDQxMDMzODY5LDIxMS40NDg0NzAzNzUzNzU2MiwzODk4Ni4yMzQ1ODM4MjMzLDMyNDguOTQ4Njc4OTc2OTQ0NCwwLjA1NjQzNDc0NDExMzgzNTE0NSwyMy44ODUwNjY4MzYzNDY5OTQsMTIwNy41MzI4MTE0Mjg0NTQ0LDAuMDI1MTY3ODA1NTM4Njg2MTgsMS4xNTQ1OTQyOTQ5NTU2NDc2LDY3LjU1NTUzOTk3ODc4NTI1LDIwMjQuNzMwOTM2MDIxMzgxMiw1NjkuNDUyMDkxMDA2NDc3MSwwLjAyMDI1NDQwMjk2Mzg5MTIwNAorMTcsVGh1IDEwIEZlYiAxMSw4Ni45NjQyNDY0MDc1NDIzOSw0OC43OTczNzYwODQyNDYxNyw1OC42OTE3Njk0MjYxOTUyNSwyNzQ5LjcwMjE5MTM1MzU5NjQsNC4xNzI1OTM2NjYxNTc1MDUsMzM1NC42ODQ1NzMwNTQ1MTgzLDEyLjk1NTMzMDc3NTA2NzQ0Nyw0NTYuMjE2OTgwNzAyNTc2MDUsMTcxNC45NDE0NDc2NzY0NTU1LDE4MDUuNDI1NTE5NTk4NzU1MywyNzAuMjEzMzYzMTExODY0MTcsNDk2LjIxODc4OTkzMTQ3NDY1LDAuMDEwNTMxODA5MjMzODcwMDI0LDE2Ni4wNDY5MjcyNzYwNzc5NSw5MjcuNzk3OTYwMDgzNjgwNywxMTUyNzguNTIwMzI4ODM1MDMsMTI0NzUuMTQyODI3MDY4MjkyLDAuMjczNzU1OTA0MDg4NTM2MDYsMTA3LjE5NDU3MzEzMjE4OTYyLDQ2MjkuNzY1NzEyODU4OTc4LDAuMTIzMTU2MzIxMjM4ODIxMyw2LjA4ODI4NTU3MTUyNDcxNSwyOTUuNzk3ODMxNDYyMTYzNSw3ODg4LjEyMDI4MzYwODAzNCwxOTk1LjUwNTAyNTc5NTM1MywwLjA5NjcxMTU5NTM0NzQ3NTM3CisxOCxGcmkgMTEgRmViIDExLDM0NC41MDM2NjA4MDcwMTczLDE5Ni4yOTkxMDM0NzMyNjI4NywyNDMuODUxOTQ4Mzc4MjUyNzYsNzMxMC4xMzA2Mzk4MzgzODUsMTkuMTg2MjQyNDMwNDE1OTAyLDEyNDQ4LjcwOTQzNjg2ODk2NSw2MC42NDQ1NTY5Mjk0MTE1NCwyMDA5LjE2NTY1NDI1MDM3NzcsNjU5Ny40MDI4NDgwNTgzMzIsNzIxMi41MTA0NTI1NDg4ODQsMTEyOS4xNDIwMzQ0MzYxMTc3LDIyNDQuOTI1NzU2Nzg0NTM0LDAuMDU2OTAzMjc5MDIzNTI5NDg1LDczMS45MzcxNDI0NjUxOTQ3LDQwMjMuMjYwMzUzNzgyNzk3NywyNDgxMTQuNTIwMDQ5NzU0ODIsNDQxMzYuMzM1NDA2NDA5OTI2LDEuMzE1NDIzNzY0MDA2MzY1Myw0ODAuNTc5NjcyNzA0NjMxNywxNjgzMS44ODkwMDY0NjcwNywwLjU5ODAzNDc5MDg3MzA1MDEsMzEuNjY0OTUzNTQ0MjQ3NjM4LDEyOTMuNTkyMjI4ODI2MzY1NywyOTk5OC42ODY2NDgwMDA4MzIsNjM0Ny43Mjc1MDk5NDIzMDIsMC40NTQ5OTM3ODY5ODM0NzIzNworMTksU2F0IDEyIEZlYiAxMSwxNDE0LjI3NjA2NjMxMDY5OCw4MDIuMDc1MjAyNTM1MjA5OSwxMDE5LjAzNTA5ODgzMzM4NSwxNDI0OS42NzkwMzI2NjM2ODIsOTcuNzI3NDE5MzcxMDg2ODEsNDUyNjcuODE0OTIwMDc4MDYsMzE4LjI3OTE0NjE5NTY1NTUsOTU4NS4yNDg0MjA5MTIyNiwyNTcyNi45NjAxMTIxOTYwMzMsMjk1MTUuNTA5MDU2NDQ0MzYsNDg3OS44NjE1NTc1NjQ5MzIsMTEwNTIuMTcyMDY3ODc2MDMsMC4zNDcxMzM5NDE1NjIyMzEwNCwzNTM2LjA0Mjk4MjQ0MzgzMiwxNzY4NC44MjQ0ODU5MTI3OCw0MDAzOTkuMTI4NTU3MDMwMzQsMTIyMTE3LjAwMzIwODQ0MjEsNy4wMzg5NTYyOTE2MDc2MSwyMzQ4LjM4ODI2NDY5NjI3OCw1MTczMC40NzQwMDIzNDQzNywzLjI0NjE4NDEyOTE4MjUyMzcsMTg0LjYzMTYzNDYwNzAzMjY4LDYxNDkuNDEzMjcwMDM4OTgzLDEwNjc3OS43MzkzMDg2NzcyLDE1ODIxLjQ0NDA3NzU1OTYwNywyLjM1MjEzOTM5ODM5MzgwMQorMjAsU3VuIDEzIEZlYiAxMSw0Njk1LjI0NjQyMzA2NDUyNiwyNTgwLjU1NjgyNTY3MDMzMDUsMzE0NC45MDExOTg0MTkyODEsMjE3MDMuMzM2OTk3NDY4MTIsNDgwLjg3MDgxNzUxMjM4MDEsMTIzNzQ5LjExMTY4MzEzNjY4LDE2NjAuMzA3NjA1ODAxNzMxNCwzOTk4MS45MDQ1NzU4MzY0MTUsNzgyNTYuNTQ3NTA0NzEyOTYsOTM2MDAuMjU0Mjk2NjA5MTcsMTY0ODQuMjYxMjU0MjI1NzM4LDQ3NzY3Ljc0OTM1NTIwMzc4LDIuMTIwMzc4MDU4ODM5NzIwMywxNTc4Ni4zODg0NzY3NTg2NjYsNTYzNzcuNzg5MTc4ODQ0MjcsNTQ3NzYyLjkxMzc1ODI5NzMsMjI2MzA1LjE3MjAzMzM0NDc0LDM3LjE3Mzk2MDUwNjUzMDMyLDEwNjQxLjA4Mjg2NjgzMjc1LDEwNTQwNi4wODM5OTc1Njc3MSwxNy40NjY3OTQzMDIzOTQxLDEwNjQuODAyMjQ3MjkwMzYyNCwyNjIwMC43NjI1NzY3MzQ4OTgsMjYxMDE0LjY3MTAzODUwODc2LDI3OTU0LjU0OTM2MzE2ODQ3LDExLjU1MDMxNDk0OTI5Njc5MgorMjEsTW9uIDE0IEZlYiAxMSwxMDQ5OS45NzU5NTc0NzIxMDcsNjE0My4yMjA0Mjk3NDU5Miw2Mzk2LjkxMTgzOTExNjUzOCwyODc5MC40OTU2NjgwODE0MzYsMjEwNy43ODIyNzgyMTExOTc1LDIzNTY4OC42ODM2MTE3NDI1NCw4Mzk1Ljg2NjYzNTUxNDE5MiwxMTM4ODMuMjIyMDM1NTM3MTUsMTYxMzc0LjkwNTQyNTAxNjIsMTk2OTg5LjM1OTE2NjY0NTEsMzY2NjYuMTkzNzgxNjYsMTQwNTY1LjA5NjA4NzY1MzA3LDEzLjIzMzU0NDk4ODQzODgwNyw1MzQ1NS42ODMzNDc5MDQ2MiwxMTU2NDMuODk4NDU0MDM3NjcsNjgwMzgzLjEyMzIzOTkxNiwzMzQ4MjkuMjE4Mjc1MDQ1NDUsMTkzLjEwNDMwNzg2NTIxMzQzLDQwNDQ5Ljk4MjgxNzAyMTkxLDE2NDQ2Ny4wNzAzNjAyMzc2Nyw5My4zNDE0NzkyNzMxMDY0Miw1OTc4LjY5MjMyNjA1OTUwNCw3OTcxNi43ODE1MDY0ODM3OSw0NTI2NzUuMzQzMDU0OTk0NCw0MDQwMi45MzQyMjU4NjM0NCw0OC4xNDE3NDAwODY5Njk4MgorMjIsVHVlIDE1IEZlYiAxMSwxNzI3Mi42ODI3NzUwNjAxMSwxMTI2My4xMzI4NzM3MDI2NTgsOTk2Mi43MTIwMTQ1MjYzMDMsMzUxMzEuMTM1NTQ0OTA3OTksNjQ5NS44MTUyODA0NDg1NTMsMzU1NDM4LjQ3MjY3ODg2MDk0LDM2MDE0LjI1MDY5Njc4MzUzLDIxNDcwNy40NzAxMjk0NDExOCwyNTM4ODkuNDU1Njc5MTQwMDgsMzEyNzU5Ljk3MDQ0OTU5MDMsNjAwMjMuMzk3MTkzODY0ODksMjY5Njg5Ljk2NzI3NTgzODgsNzguMTU5MTU3MjM0NjY3MjUsMTE2MDM2LjE4OTgwNjY3Mzg1LDE4MDU1MS4wMzQ2NjgwOTA5LDc5NTI1Ni4wNDY2MDYwOTIsNDM2NjkxLjU0MTEzMDU3ODg0LDkzMS4wODMxMDg2NTUzNDU4LDEwNDQxOS40OTgxMzg3MTM5NywyMjEzNTQuNDExMzIyMzc2NSw0NzAuMjU2NjgwMjQ5MDIxNjYsMjc2NTYuODcyOTQ1Mjg5OTg2LDE1ODEzNC4xNjI0ODAwODYxNSw2NDY4NTYuMzE2NDY5MDE3LDUxOTk5Ljg5MTgzMTE2MDA5NCwxMzkuNzY5MjI2Nzc3MDEyCisyMyxXZWQgMTYgRmViIDExLDI0MDEwLjE3MDQ5MzExOTgwNCwxNzA5OC40NjE4ODU3MDA2MDMsMTM0MTAuNzc1OTMxODM3NzU2LDQwNjAzLjUzOTYzMjYzNDYyLDEzMTcwLjc0NDM4ODg4NTE3LDQ2OTg1NS42MzcxMjMzOTE1NiwxMTEwNDEuMTIzMzQ2MzI5LDMyMTU4OS43NTk4NzM4MDg3LDM0Mzk4My45NjI0NjgzNjYzLDQyNTgxNy4yMTAyMzgxODc2LDgzMTc2LjQ3MjQyMzMxMjIzLDQwNzU5OC44MjQ5MjM3NjcwNyw0MjUuNTgwNDE3MDg0NzgwNiwxODc4MTUuNzMyNjAxMjk5NiwyNDMyNzkuMTc0OTcxMzc2MSw4OTIyNzEuOTY1MzE3MDc2NCw1MjcyOTQuNDAyMDc1NzM3MSw0MTAyLjY1NzM3MTg0OTEwMywxODgyNzkuNTk3MTc4NjM5MDYsMjcyNzM0LjgxNzUxNDExODYsMjI0Ni40NjEzMTI4NDg3NDc2LDg2MDA4LjA2ODA4MjcxMDAzLDI0MzYyOS45MjYwODk0NDcyOCw4MjcyNjEuOTgwMTE3ODI4NCw2MjI2OC4wNjk3MzM5MDMxMjUsMjc4LjI3NDI0MDI1MDM3OTI1CisyNCxUaHUgMTcgRmViIDExLDMwMzQ3LjQ0NjI2MjgzNjQ5NiwyMjk0OC44NDUwNzk0NDY4MSwxNjYwOS41MjUzNjMxMjM1OTcsNDUzNzYuNzM1MTgyMTQ5ODMsMjA1NTIuODE1NTgyMTQxNTAyLDU3NTM2My45NjIwMzM0NTY0LDIyMjYxMy4xMjczMDE4NjkyNCw0MjUwNzYuNTkyNTQ3Mzg0LDQyNzg1Ny4wNDM5NzM5OTIxLDUzMTIxMS41ODgxNjI4OTQxLDEwNDkxNy4xNDM3ODI5NjMyOCw1NDE1NTguNDIzNjQ3MjM0OCwxNTY5LjMxODAxODY0MDc3NTMsMjU5NjA2Ljc1MzQwNzQ4MjczLDMwMTQ1NS4wOTE5NzYwNTU0LDk3NTc5OC4zMDQwNzgxMDk5LDYwNzcwNS44NDM1NjI0NTgxLDEyNjIzLjA5NTM3MTYwMTE1NSwyNzYzNzMuMzEwNjk4NDI2MSwzMTg3MjYuOTE1MjQ5NzMwODcsNzczNC4wNTAwMzA1MTI3MjEsMTcwMjc4LjMyMjk4NTM5MDQzLDMyNzQwNi40NDY0MTE0NjYzNCw5OTEyMjYuNzE5Njg4MTIwMyw3MTM1Ny44MDE1NDUxMTQ3Nyw0MzIuMTU1ODAyNDg1Mjk0NzcKKzI1LEZyaSAxOCBGZWIgMTEsMzYxMTIuNTEwOTYzODIzODMsMjg1MzYuNTQ2MjMwMzI5NDIzLDE5NDg2Ljg5MjI0OTgwMjA3LDQ5NDQ1LjYyODk2NDY4Njk4NSwyODA3Ni41MDI5MDc3NzcwNTYsNjY5ODAwLjM2ODEwOTAzMTEsMzU2Mzk3LjIzMDc2MTUyMzI0LDUyMTM4MC44NjAzNzgwMjEyNiw1MDM1MjAuNjI5OTM2ODU5OSw2MjYzOTYuNTExNDE4ODA0MywxMjQ2NjcuNjM2NzI4NzExMzgsNjY2NTI3LjU3MTU2Mzg4MTcsNDU3MS45MDkyMTY0OTk4MTMsMzI4MDQ1LjE5NjI5MzU2NTg1LDM1Mzc3My42MTAwNTc5NjEzLDEwNDYxNDEuOTExNzU5OTI2Niw2NzczNDAuNTc1MzI3ODIzNCwzMDUxOC4yNTA3NDI1NDA0MSwzNjMyNTkuODU4NzE0NjkzNjMsMzU4ODU3LjkxNzMzMjIwNzQsMjE2MDEuODEzMzc3NjA1MjM1LDI2OTU0NC4xNTI0MTU4NTQxNiw0MDYwNzcuMzcyOTAzNzg3NSwxMTM2MTk5LjMwMjQ3NzQ4MDEsNzkyMTEuMjM2MjAyNjA1NTksNTg5LjQzODQxMDQ1NzU0MjcKKzI2LFNhdCAxOSBGZWIgMTEsNDA3NDkuNjc4OTQ2NzQ0OTA1LDMzMjQxLjg2MDQ4MTk3MTEyNSwyMTc3NS41NDYxODQ3NDM1ODQsNTI1MDMuMjY0MTU4OTcwMDUsMzQ3NjkuNjczNTY3NTg4MzIsNzQ0NTM4LjUxNjMwMDQ1NTYsNDg5NjYwLjQ5MDY1NzU5MDA0LDYwMDU1Ni40NDIyOTI2NzA0LDU2Mzg3Ny40NDc3MzUxNTE3LDcwMjQxMC4zMDU0MDI4NTU3LDE0MDUzMi41NTc4NDcyNzc4NCw3Njk1MDcuNjY5NDA2NzIyNCwxNjc5OS44OTkzNTM5Mzc2NDYsMzg1NTc1LjUwNjcxMTEwNDc3LDM5NTM3Ny42MTc5Mzg4NDc2MywxMDk4MjkwLjcyMzI4MjM3NDIsNzMwNTc1LjkyNDM0NjgwNjQsNjI1NDAuOTM5ODM4ODIxNTMsNDM4NTAwLjcxMTQ0NzU0MzksMzg5Nzg4LjAwMjAxOTI2NDIsNzE4NDkuOTI5Njc1Mzg5ODQsMzY3MzQ4LjIxMDAxMjkyOTQsNDcxMzA1LjYzNDUzMDI5NCwxMjQ5NDk3LjcyOTU3NjkyOTIsODUyMDAuMzA0MTY1NTIzODMsNzI5LjY3ODcyMzA1MjcwMzQKKzI3LFN1biAyMCBGZWIgMTEsNDQ4NDQuMzM4NzgxMTc1LDM3NDQ3LjM5MTE1MDE5NzM1LDIzNzkwLjI5MDU1MjkxMjE3NCw1NTE1Mi40MzIxNzAzNTU3Niw0MDgzMy45MTg3NDM4ODYzOCw4MTAyNDEuNDkwNDgwMzQzOCw2MTM1MTEuMzY5MjY2MTAzNSw2NzA4NzguOTYwMjc0MzM1Niw2MTcwNTIuNzcxNTc3NTUyNSw3NjkzOTkuOTYyMDg1NDU2NiwxNTQ1MzYuMjY0MzcxNjY1MjgsODYxMDI4Ljc2ODUxOTg4NTcsMzY2NzcuNjI1MzQzMTg3NTgsNDM2OTcwLjAxODgzMzYzNDg1LDQzMTk5OS44Njg5NzIxMjE5NywxMTQzMjk4LjExMjM2NjQ0NzIsNzc2OTI0LjQ2MTQwOTA0MDYsOTUwNzYuNzQ4MTE0OTI0NTksNTA2MjI0LjA0ODQyODQ2LDQxNjc3OC43Njc1MTc5MzE1LDE0NDQ4OS4zMTY4OTA4MDc2NSw0NTgwMzQuNzQwMjgzODM0MDUsNTI5MzY5LjQyNjA4OTUwMjYsMTM0ODc1Mi4zNDUxMDM0MjEsOTA0MTAuOTg2ODk2NTI5NjUsODU2LjgxMTUzMDc2ODgwODEKKzI4LE1vbiAyMSBGZWIgMTEsNDgwMzIuNzYzMzk4NTgyMDQsNDA3ODUuOTA5NTEwNjg5MjA1LDI1MzUxLjQzMTUzOTA2MTcwNSw1NzE1Mi41MzI5OTA5ODQxLDQ1NzQ5LjYwNjMyMzIyMzE3LDg2MTAzOS4xOTU4Mzc4ODkxLDcxNzcyOC40NzAzODc3NjEsNzI2MTUwLjU0MzMwNDYzNTMsNjU4MzA4LjkzODg0MzE5NTcsODIxMzk5LjI2NjE2OTU2MjksMTY1NDM0LjE4MTA3MDcxMDQyLDkzMzAzMS4zNTIzNjc0ODksNjU4MjMuNzM4NzQxOTUwNTUsNDc3NzM1LjM2NTc5ODc3ODgzLDQ2MDM3My42NDc1NTA2NzY0LDExNzcwNjIuODYxNjAwODQ2OCw4MTIxOTYuMTA3NTM3Nzc4NCwxMjU3ODcuMzMwMDQ0NzAxOSw1NjA1NzEuNjY4OTAyMDM4Niw0MzczOTYuNTg0MzM2MDQzNDUsMjM3ODg3LjI3NTM3MjQ5OTQ4LDUzNDA5Mi45MjEyMTkzMzMyLDU3NTE2Ni45OTU5OTE5NTQ2LDE0MjUwNTUuNzgyNjQ2Nzg0Myw5NDM3MS45MjA0NzEwOTk4Niw5NTkuOTUyNTEwNTIzNzk4NQorMjksVHVlIDIyIEZlYiAxMSw1MDU4OS40NDcwOTcwMTQ5MSw0MzQ4OS4wODg1OTA5NzUwMSwyNjYwMC4xNjM5MDQ1NTkxNDcsNTg3MzIuMTYwOTQwNTQ5MDQ1LDQ5NzcwLjI5ODQ5MDMwNDI3NCw5MDE2MjYuODYwODI4MjgzNCw4MDQ0OTEuODM0ODYwMTEyNCw3NzA2NzcuNTIxNDU2MzY2LDY5MTMzMC40NzE3NDIzNjUzLDg2MzAyOS41NzU0NjA0ODg2LDE3NDE3MC4xOTEzNDE2NCw5OTEwNjQuNzM5Mzg0NDkyLDk0OTAwLjg4MDU2MDEzMjQxLDUxMDcyNS42MTM0OTQ3NTI0NCw0ODMwNjcuOTEzNTA0MTg5NiwxMjAzNjUwLjU2MDYzMzMwMDMsODQwMTU2LjkzNjgxNDc4NzQsMTUyNjQxLjg1MjQ1MDk0ODI3LDYwNDgwNy4zNzYyMjE4MDMyLDQ1Mzc3MS40MDIyODY2NjY4LDMyODE0NC41NTExMzIyMDQyLDU5NzMxNi4xNDA2OTk3NjY5LDYxMjEyNi41MzgyNTA4OTczLDE0ODU4NDguOTMzMzU1ODQ1Nyw5NzUxMC4yMzMzNTM1NDg4MywxMDQ0LjM1MDA2Mzg5NDg5MTUKKzMwLFdlZCAyMyBGZWIgMTEsNTI2MTQuMTk2NjUxMjM3MDg1LDQ1NjQ1LjMyNjAzNDYzNTgzLDI3NTg3LjMxMjU5NjQ0Mzg3LDU5OTcwLjA5Mzg4MTc4NzA4NSw1MzAwMC44NjUwNDQxMzYyNSw5MzM2ODcuMjk4MzY5MTYwNCw4NzUwOTkuMTQxOTA1Nzg5Myw4MDYwNTkuNjY5NTQwNDAzOCw3MTc0NDcuMDIxOTgyMDQyMiw4OTU5NjAuMjc1NTgwMzcxLDE4MTA4Ny4wNjM5NTA0MTYzLDEwMzcxOTUuNDg4NDkwMjIyNywxMjEzODcuODU1NjI1MDU4ODYsNTM3MDI3LjY3Mzc3MDkxOTcsNTAxMDA3LjE5NDcxNTkzOTQ2LDEyMjQ0NDguOTgyMzYxMzA3LDg2MjEyMC40NTQyMTY0ODE4LDE3NTI0OC4wMTc0ODI5MzYwNiw2NDAyMjMuNzkxNjM5MDA5MSw0NjY2NTAuNTg3NDMxMDAyNDcsNDA4OTI4LjMzNTkwMDU5OTg0LDY0ODcxMC4zNjA0MTM5NjQ4LDY0MTUzMy4xOTk3Nzk4NzA5LDE1MzM3NzEuMDc4MzU0MDUxLDk5OTc0LjYzMzAxODU0NDc3LDExMTIuMTgzNzcxOTQwNTg4NworMzEsVGh1IDI0IEZlYiAxMSw1NDIwMi45OTM4NDk3MzYwNiw0NzM0Ni4xMTY2NjM2NzYzMTYsMjgzNjAuOTYwMjM1MTYxNDE2LDYwOTM1LjM5NjkyNDIyMjQsNTU1NjEuODc0MzkyODQyMDE1LDk1ODgwMS4wODk2MzMzNTcsOTMxNTg2LjM3NDczNzU2MjUsODMzODg4LjI0MzIxMzAzOCw3Mzc5MjEuNzU2OTM4MTM1Niw5MjE3NzkuODczMTk0NTY5OCwxODY1MTMuNzcxNjg4OTg5NDUsMTA3MzQ4Ni43OTE5MjMxNDA2LDE0NDIyNC4xMTIxMTMyNzQ3NSw1NTc3NjMuMTk2ODM3MzEyMiw1MTUwNjUuODQ0MTUyMzQ3LDEyNDA2NTQuNjI4MTE2OTAzLDg3OTI2My45Mjk3MjAyNDc2LDE5Mzc2OC4zNDk1NDkyNjU2LDY2ODIyOC42MzcwMDk1ODUsNDc2NzExLjEzODg1MDg1Nzc0LDQ3NzgyNy41NjkwMDI4MTMxNCw2ODk3OTQuMjU4OTMwOTAyOSw2NjQ2ODIuOTA5NTMxNDYzMiwxNTcxMjU4LjExMzM4MTAxMiwxMDE4OTcuOTcwMDg2OTYyNSwxMTY1Ljk3MTcwNTc5NDE1NjIKKzMyLEZyaSAyNSBGZWIgMTEsNTU0NDIuODY1MDEzMzQ1MTgsNDg2NzguMTU1MDU4OTIwMzc2LDI4OTY0LjI0NDcwNDI2NzE5Miw2MTY4Ni44Mjg2ODE3NjU4MSw1NzU3My45NzgzMTI0MzM3MDUsOTc4Mzc5LjU4MTU4NDAzODEsOTc2MjUxLjMwMTMzODgwNDgsODU1NjM2LjM5Mjg4Mjk2OTUsNzUzODkxLjAyMDE3OTIxNTcsOTQxOTE4Ljg5NDIyOTc4ODcsMTkwNzQ4LjIwOTU4NTMxODc4LDExMDE4NTIuOTU2NTc0MzgwMiwxNjMyMzAuNjE4NTEzOTE1ODYsNTczOTkzLjEyMjg5NTk2NzEsNTI2MDI4LjExNzUwNTk2MDksMTI1MzI3Mi40Nzk2MDc2MjA1LDg5MjYwNS4xNjA0OTA0MzAzLDIwODY2MC4wOTE4NTg5MzE2LDY5MDE5Mi45NTk0ODQyMjI1LDQ4NDU0Mi43ODg4NTg0NjA0LDUzNDc2Ni44ODI0MTQxMTg1LDcyMjI2MS4zOTkzMjQ5MDUsNjgyNzg1LjIxNzUwMDIxMDIsMTYwMDQ1OS42MzM3OTQ0ODQ0LDEwMzM5NC44MzI4MzM1NzU5NywxMjA4LjIzOTQ4MTk4MzAxMQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Ob25aZXJvTW9ydGFsaXR5UmF0ZV9GRF9SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vRV8wLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvTm9uWmVyb01vcnRhbGl0eVJhdGVfRkRfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL0VfMC5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmMyNDQwMQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvTm9uWmVyb01vcnRhbGl0eVJhdGVfRkRfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL0VfMC5jc3YKQEAgLTAsMCArMSBAQAoraXRlcmF0aW9uLHRpbWUsCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L05vblplcm9Nb3J0YWxpdHlSYXRlX0ZEX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9FXzEuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Ob25aZXJvTW9ydGFsaXR5UmF0ZV9GRF9SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vRV8xLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYzI0NDAxCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Ob25aZXJvTW9ydGFsaXR5UmF0ZV9GRF9SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vRV8xLmNzdgpAQCAtMCwwICsxIEBACitpdGVyYXRpb24sdGltZSwKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvTm9uWmVyb01vcnRhbGl0eVJhdGVfRkRfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL0VfMi5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L05vblplcm9Nb3J0YWxpdHlSYXRlX0ZEX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9FXzIuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJlZWEzY2EKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L05vblplcm9Nb3J0YWxpdHlSYXRlX0ZEX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9FXzIuY3N2CkBAIC0wLDAgKzEsMzMgQEAKK2l0ZXJhdGlvbix0aW1lLEVHLUZSRy1HMjEwMDAxLEVHLUZSRy1HMjEwMDAyLEVHLUZSRy1HMjEwMDAzLEVHLUZSRy1HMjEwMDA0LEVHLUZSRy1HMjEwMDA1LEVHLUxPRS1HMjQwMDAxLEVHLUxPRS1HMjQwMDAyLEVHLUxPRS1HMjQwMDAzLEVHLUxPRS1HMjQwMDA0LEVHLUxPRS1HMjQwMDA1LEVHLUxPRS1HMjQwMDA2LEVHLUxPRS1HMjQwMDA3LEVHLUxPRS1HMjQwMDA4LEVHLUxPRS1HMjQwMDA5LEVHLVVQRS1HMjkwMDAxLEVHLVVQRS1HMjkwMDAyLEVHLVVQRS1HMjkwMDAzLEVHLVVQRS1HMjkwMDA0LEVHLVVQRS1HMjkwMDA1LEVHLVVQRS1HMjkwMDA2LEVHLVVQRS1HMjkwMDA3LEVHLVVQRS1HMjkwMDA4LEVHLVVSRy1HMzAwMDAxLEVHLVVSRy1HMzAwMDAyLEVHLVVSRy1HMzAwMDAzLEVHLVVSRy1HMzAwMDA0CisxLFR1ZSAyNSBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMixXZWQgMjYgSmFuIDExLDYuOTYwMjM3NzczNDkxNDhFLTQsMC4wLDAuMCwwLjExNTgwNDIzNzQ4Njk2MDI1LDAuMCwwLjA0MTgzNjg1NDM4MTY4MTc0LDAuMCwwLjAsMC4wMTc5NjY2NDI1Nzc0ODU1NSwwLjAxMjg0MDc4NjY4MDMwNTYyOCwwLjAsMC4wLDAuMCwwLjAsNi44MTQ2NDg4MDYxNzYxNjNFLTQsMTAuMDQ1ODIzODQ3NzIxMDk1LDAuMTE3MjIzMTMzMTI3Nzg1ODYsMC4wLDAuMCwwLjA0NjU2ODA0NDkwNzQyNTk4NCwwLjAsMC4wLDAuMCwwLjA3MjE4NzU0NTgyNzY1MTI5LDAuMDQyNjAzNzk2NTIyOTkyMjEsMC4wCiszLFRodSAyNyBKYW4gMTEsOS4zOTU4MzM3NjUzOTcxMDlFLTQsMC4wLDAuMCwwLjE1NjMyNzU4Mjk0ODIxMDEsMC4wLDAuMDU2NDc2ODI0NTg0MjUyODcsMC4wLDAuMCwwLjAyNDI1MzcwOTc1NDczOTEyNCwwLjAxNzMzNDE2MzEzODg3ODE5MywwLjAsMC4wLDAuMCwwLjAsOS4xOTkyOTg4NjE2ODUyMTNFLTQsMTMuNTYxMTQ3Mjg0NTM3OTM4LDAuMTU4MjQzMDIxOTAzNzU5ODMsMC4wLDAuMCwwLjA2Mjg2MzYwMDIyNTEyOTEzLDAuMCwwLjAsMC4wLDAuMDk3NDQ4MTMzMjc5MTY5NzYsMC4wNTc1MTIxNDA1MjgwNzI5NiwwLjAKKzQsRnJpIDI4IEphbiAxMSwwLjAwNzE1NTM1MTk1MTUxNTcxMiwwLjAwMTk5NDU4MjkzMDI0OTgzNCwwLjAwMTQzMjIwMjQ3MjkxMzY4MDUsMC44NDQ3NTk0MjczMjAyMDM3LDUuMTkxNzE3NjQ0MTM4ODMwNkUtNSwwLjM5NTY4Mjc3NjY2NDMyMDIsMS40NzI5MTg4MDIzNTEzNjc2RS00LDAuMDA4MDMyOTMzMTU1ODk5MzM4LDAuMTczOTYxMDY2NzM0ODY3NzUsMC4xMzU1NTQ3MjY5NjM2NzA2NiwwLjAwNjg4ODUzMjA1MzMxOTkwOCwwLjAwNjkzMDE1MjQyODg5NTgyMSwwLjAsMC4wMDI5MjY3NDE2OTc0ODAxMTIsMC4wMjA5NTYxMjQxNTQ1NzI1NSw1My45MTA3NTgyODc0NTUzMywxLjE3MjQ1OTY1NjQ1MTI2LDQuMzQ5MzYzMzk1MTU4OTg0RS04LDAuMDAxNjU0OTc2MTM4Njc0MTkxLDAuNDU4ODQ4NDQzOTU3NTk5Nyw0LjM1NDE3OTIyMjY0NTMxMkUtOCw0LjIwNDc3NTA3Njg5MjMxMkUtOCwwLjAwNTU0MDU5MTY1ODk3MjQxMywwLjcyMzM3NjI2NjUzNzI4LDAuMzYyMDI2NzYxOTM2MzkzNSwwLjAKKzUsU2F0IDI5IEphbiAxMSwwLjAxNzYwNjIzMTg1NDgzMjg3LDAuMDA1Mzg1MDk0NjAwOTc5MjA5LDAuMDAzODY2NzQ2MDU2MzAxODc4LDEuOTk1ODUwNjY1MzE5NzE2NiwxLjQwMTY5MTA0OTA4MTQ2NkUtNCwwLjk2NTM2OTUxNjc1NjkyNDcsMy45NzY2NzQ1NTQ4Mjk2NDJFLTQsMC4wMjE2ODc3OTQ4NTI0MTg2NjcsMC40MjU0NzI2MjcxMDcyMTgzNCwwLjMzNDM5MDQ4MjgyMTUxMDUsMC4wMTg1OTgwNzE4MzI0MzI5OCwwLjAxODcxMDQ0MTMwNTY3MzMsMC4wLDAuMDA3OTAxNzkyODE2MDc4NTI1LDAuMDU0OTAyMTk5MzM2NjEwNTcsMTIwLjgzODIxMzA5ODg1MTcyLDIuODc3MTA3ODc1NjczMzQzMywxLjE3NDI2NzIyNDg0NDczNTJFLTcsMC4wMDQ0NjgyMDM4NDUyMTAwMTQsMS4xMjQyNjkxNzA5NDU1MDM1LDEuMTc1NTY3NDMwODQzNjM2NUUtNywxLjEzNTIzMDQwMzE3NDQ5N0UtNywwLjAxNDk1ODgyMTYwOTEyODY2NSwxLjc3NTQzMzM5OTE5OTI0NDEsMC44NzI2MTU5NjgyNTM3NzQ0LDAuMAorNixTdW4gMzAgSmFuIDExLDAuMDcwNTAyNjE2MjkxMDg5NDIsMC4wMjc5NTk5NzE1NjM2MzM4ODMsMC4wMjMyMzQ5NDczMTI4NzA3MDcsNi40MzAwNTMwNTQyNzkzODMsOS43MzA5NDEyNjQxMzQyMDJFLTQsMy42NDU4NjUwNDkyNDY1MjQsMC4wMDI3OTY2MDk4NzEyODk5MSwwLjEzOTE1NjIzNDcwMTQ4NjQ3LDEuNjM4Njk4ODgyNTM5MDEzNiwxLjM2MjI3NjI2MjI4MzE4MTIsMC4xMTAyMzc4MTM2NjY5ODc5MSwwLjEyNjUwMjg5NzM2NTYyNTc1LDQuMjQ4ODQ5NTY1Njg2OTkzNkUtNywwLjA1MDc0NTA2Nzg4Mzg0MjkwNiwwLjMxNDE2NzIxNjQ3Njg0NDM3LDM1NC40MDc4MDMxMjcxNDc5LDExLjMwNjc2NjQ4NzU0NTIyMiwyLjQ3OTQ5Mzk5ODM2MzY1MjRFLTUsMC4wMjk0NTQ0MDUyNTE3MzM5NzcsNC4zNzI2MzE3ODAwODI3OTg1LDEuMTAxOTE1MDMzMjM5MjE1OUUtNSwzLjA3Mzg5OTc3MTE1MjY2MzRFLTQsMC4wOTQ2NDUyNzE3NjU2OTIwMyw2Ljk4NjM4OTYzMTg2NjkwOCwzLjA3MzA2Nzk1ODg1NjQ0MDUsOC42OTY5Njg2MDQ0MDI1ODNFLTYKKzcsTW9uIDMxIEphbiAxMSwwLjIwNjg3MDU4MDY5NjI4ODIsMC4wODg2OTg2OTU5NzQ5NTQ1OCwwLjA3NjQ4MDU5MzgwNjA3ODA4LDE3LjIwNzA0OTcwMDQzNTM4NCwwLjAwMzMwMjI0Njg0OTkyODI0OTMsMTAuNDYwNzM3NDkyMTY1NDI4LDAuMDA5NTEzOTk3NDc2ODI0NjI2LDAuNDY0NzQ4NzA1ODM1NTcyNzYsNC43MzgyOTI1OTM2OTUxOTMsNC4wMjIzMDE2MTY1NjE4NzQsMC4zNjE3MTEyMjA2ODAxNTI0MywwLjQyNzA2OTUxODMwMTM2NTY0LDEuNzIwNjk0ODQ3NDI5MTExNUUtNiwwLjE2OTUwODAzOTE4Nzc4MTM1LDEuMDIzNzE2MTI1MjA1ODExLDkwNy4yNTM1NTk4NzgyMDYzLDMyLjk0NTIyOTgzMTU4NDczLDkuOTg3OTMyODkyMDQ3NzIyRS01LDAuMDk4OTI3OTk3NzI4NjAzNzUsMTIuNjkwNjcyNDM3NDAyNDMsNC40MDg5NjgxODgyMjY0MjdFLTUsMC4wMDEyNDQzNDc2NjMzMTc0MDg2LDAuMzE1MTQ0MzU4MDU0ODU0OCwyMC4zNjY3MDQwMTMyOTYxNDcsOC41NjUyODc3OTc5MDkyMiwzLjUyMjA4OTYwNTc0ODM1NkUtNQorOCxUdWUgMSBGZWIgMTEsMC42ODk5MjU3MzUxODg0MjczLDAuMzIzMDE4MDE2Nzk2MDIsMC4zMDEzODMzOTQwNTAwMDc2LDQ5LjExNzA5MzAzNjU0OTUzNCwwLjAxNDMyMzE4NTI1MTAyOTAxNywzMy4zODA2ODg4NzgyODQ3MywwLjA0MTc1NDY2MzMzNzg5OTA3LDEuOTE1Nzg3NTM0MDk3MTY5NywxNS4zNzYwMDE1MTMxMDQ5NSwxMy41NzczOTUzMTY2MTM3MDksMS40MTQ0MDg2ODE3MjExNTQ3LDEuODIxMzg1MDE5NTI0MzEzNSwxLjIyMzI0NTU4Mjc2MTA2NThFLTUsMC42OTg4MzI0MTEzOTI4MTM4LDQuMDkyNTk2NDI0MjU2MDE3LDI0ODMuMzkxMzU2MzQ4MTgsMTA4LjM1NDk0MDU0NjQwMzUsNS44MzMwMzM3MTgwMjY1NzdFLTQsMC40MTU0NzE2OTQ2OTk0NDM5LDQxLjQxODkzODE3MjgwMzgzNCwyLjU2MzkzMjgyNjUzNjk2OUUtNCwwLjAwODQwOTI3MzU2Mjk2NDc5NSwxLjI4NzY3NTMyMDc5NDkxMTIsNjcuMDUzMzQ1Mjk0ODc0MTgsMjUuOTg0MTg5MzczOTA1NzIsMi4xMDI2ODA1MTQzNDgzNjI0RS00Cis5LFdlZCAyIEZlYiAxMSwyLjA5ODc3NTE3MjI3NDMyNDQsMS4wMzE2MjczMjE3MTk3ODcsMS4wMDY5NDUwMzIzMTA4NzU3LDEzMy43MTEyNDc1NDQ0OTQ5NywwLjA1MDM0NDU0NzA3NzA1NTk1NSw5OC41Mzg1NzE4MDk5MzUwNCwwLjE0NzYzNjYzNjEyMTk4ODA3LDYuNTYwNDgzMjQyNDQzMDExLDQ1LjkyOTc0ODE1NTcwMTIzLDQxLjYyODg5OTI4OTA5MjY2LDQuNzA1NDc1NTUyMTg1MDIsNi4zNDgwOTUwNDgyNzg3MzEsNS4xNDE4ODQyMTE0NDc3MjY2RS01LDIuMzkzMjA5MDgwNDk0NTkzNCwxMy44MTQ3NDQ4ODA1Nzc1MzUsNjU3NC42NjI3ODE1MjI4OTEsMzI2LjU2NTYyMzUxMTA3OTI1LDAuMDAyMzAxMTk4ODU5OTk1NDYyLDEuNDM2NzU2MzIxMzk0OTEwNiwxMjQuMTgzODc1MjA1OTQyMjksMC4wMDEwMTA0MTg4MzQxNDU3NzMsMC4wMzQ4MjY1MTk5MjMzODUxMiw0LjM4ODk2NjgyNjA3MjQyMSwyMDIuMjMwNTk1NzQ4MDc0NSw3My45OTQzMjczMTI0Mzk3Miw4LjM1ODY1ODA1OTExNDQwNUUtNAorMTAsVGh1IDMgRmViIDExLDYuNTcxMzQ3MTc4NjI3NTYzLDMuMzY4MzYyMjQ3ODQ0MDA5LDMuNDYzMDEyMDY5MjcxNjE1NSwzNjguMTAzODA5NDkxNDI3NDYsMC4xODYzMTM5NTY0MjY0NTg2OCwyOTcuMDk2OTc0NjExOTE2OCwwLjU1MjE5MDMxNjI5MDgxOSwyMy4zNzc2MDYyOTc2NDQwNTcsMTQwLjcwMTUyNDYyMjA2MiwxMzEuNjAzMzQ3NTY5MDE2MDIsMTYuMTA0MTI3NzY0NDQ4ODgsMjMuMjAxMzUwOTU5MDgyMjA1LDIuNDI5MDIyNzk2OTUzNTE0RS00LDguNTI2MTI3Nzc4NzI1NDk5LDQ4LjYzNjM0MTc3NzM0OTcyLDE3NjkyLjkwOTgzNDYwMDE0LDEwMTAuNDg4NjUwODExMTcwOCwwLjAwOTU2ODM5OTEyOTIzNDEzNiw1LjE5NDgzOTIzMTI3NzUwNiwzODEuNzk2NDIwMTM5MjY4OSwwLjAwNDIxMTY2MjMwMzc5ODA5MywwLjE1ODc4NTY5MjIwNzcxNjg4LDE1LjUzNjczNjAxNDQyMzU3Niw2MjYuMzU5MTY5ODE4ODQ3NSwyMTMuODkxMzczNjUxMDE0ODIsMC4wMDM0ODUwMDY1ODgzOTEzMjQKKzExLEZyaSA0IEZlYiAxMSwxOS45NjA3NDkyOTY2NjEyNywxMC41MzQ0NDAyMzY2NTcxMSwxMS4yNzI1MDMxNTY4OTU3MTYsOTk4LjgxNjg2ODAzMTAzMzEsMC42NDE5OTY4NzcwODIyOTg1LDg3My4zOTA2MDQzMjUzMDc4LDEuOTE4NDE2NzQyMDY5NzcwMiw3OC4yNzMxODgwNjg2MDkzMyw0MTkuNjA1ODY3ODI1NTM0Niw0MDIuOTc5MTU0NjA5NzE0Nyw1Mi4yMzA3MzcxNjEyNTg4OSw3OS4yMDA1Nzc0NTIzNzYyLDkuNzY3NDU1OTQ1MjY4ODMyRS00LDI4LjU0MDczNjU1NDg3ODI5NywxNjEuNjE2MjMzMTYxNjAwNTIsNDcxNzMuNTc4NDE2MzMwMDg1LDMwMzguMjAyMjk4ODAwOTUzLDAuMDM1NDUwMjgxNzM3ODAzODYsMTcuNTkxMDc5Mjc2MzMxOTksMTE0MS42NTUwNTY1OTUzMDc1LDAuMDE1NjM4ODQzNjcxMzA0NSwwLjYyNDY4NDI3MjEwNTc0MjYsNTEuNzU0OTI2MjI4NDc2NDIsMTg4NC45ODI1Njc4OTk1MjE5LDYwNS45MjQ0NzMyOTk4MDQ3LDAuMDEyOTE3MjM4ODU5Nzc4OQorMTIsU2F0IDUgRmViIDExLDYwLjgyNzgyODkyNjg5ODA1LDMyLjg2Mjc3NjAyMTkzNTUyLDM2LjU0MjQwODMyNTcwNSwyNzA4LjA1MjAyNzE1NjMxNSwyLjIxNjcwOTk0NjY2MDI2OTUsMjU2OS44MTE3NTkxNjkwNTgsNi42OTE3OTI4OTIwNTUwMiwyNjEuODI3MzQ2NDAzMTU0MzcsMTI1NC44MDQ0NDI2NzAyMDk1LDEyMzguMzYxODg1ODcxMDYxLDE2OC43OTA2NzczMjE1NTcyNCwyNzAuNjA3OTQzNTc2NDA4OTYsMC4wMDM5NjQ2OTczODYzMDc5NzMsOTUuNDI4MTgzNzgxNDk3MjIsNTM3LjU5NjE4OTk5NTQ4NDEsMTI1OTA3LjE0ODUzNTMxMzQsOTE1NC43ODc3MjQ1Njg2NDEsMC4xMzAzMzE2MTU2MjU3MTAxNiw1OS41OTU0MDMyODQ2MzIwNiwzNDIwLjUzNzM4MzM5OTE2MywwLjA1Nzc0MzQ5MDg5MjcyNjIxLDIuNDYzNDI0NTI5OTc3NjY4LDE3Mi4xNDc5MDAwMjg3MDI0OCw1Njg2LjkyMzQwNTQ4ODQ3MiwxNzE1LjU4MjQ1MDI0OTI2ODUsMC4wNDcyNjQxMzY3Mjg2MDgwMQorMTMsU3VuIDYgRmViIDExLDE4My4wOTY5MTUzODM1NDY5LDEwMC42OTQzNTYyNzM1MzE2MiwxMTUuNjk2MTIwMjMxNDU4NzYsNzI3Ni42MjQ0NDY2MDY0NzEsNy40Mjk1NDk4NDAwMTI3NzIsNzQ4MS40MDM3MDI1MTI0NzgsMjIuNjQwMzM0MDA3OTY3NjY3LDg1My4xODgyMTUwNTg0MTY2LDM3MTIuMjUyMDEwMjU5Njg2LDM3NTYuMzAxNDg4NzM3ODExLDUzMy4xNTM3MzcxODExNTYsODk4LjU1Nzk1NzM0MzQxNDUsMC4wMTUxMjE0MzI1NzMxOTU3NDUsMzEwLjgxMjY2NjM3MDY0OTE0LDE3NDUuMDExNjM0MDQwODU4MywzMzI0NDcuNjMyMDY0Mjg4ODMsMjcyNDEuMTAwMjQ0OTY1NzMsMC40NTc4MjgyNDQyNjg1NzQ5NCwxOTYuNDM3Nzc2NTU3NTI1OCwxMDEyNy4yODAyMTc4OTAwNDYsMC4yMDM3MjU4NjgzNjM5NTU5Myw5LjE3MzI0NTM0MzY2NzcwNyw1NTguMTA5OTI3NjU5NTEzOCwxNjk1My40OTUyOTMyODI1OCw0ODExLjAxNDYzMTU2NDkyMSwwLjE2NDk5NzY0NTIxMzY5NTY0CisxNCxNb24gNyBGZWIgMTEsNTQ5LjQ2OTcxNjEzNDMyNywzMDYuNTAwNTkyMTE4ODg3MzcsMzYyLjgxMzI0Mjg3NTA5MjcsMTkzMTcuMjczNTg0MDM3MzA2LDI0LjY5Mjc0MTU1ODg2NDA3LDIxNjkzLjk4NjY1MDkwNjMyLDc2LjAyMTE5OTcwMDgwMDk2LDI3NTYuMjY4ODM4MjgwMzYyNiwxMDk1Mi4yNzgwNDE4MjQxMTMsMTEzNTcuOTU3NjI3MzE0NTc0LDE2NjkuNDA2MTU1OTk1NDA2NiwyOTU4LjA4MDUxMjE0MzkyNywwLjA1NjkwODI1NzA2NjgyNTkxLDEwMDMuNTAzNjM1NzcxMDg5Miw1NjIwLjU2MDY5MDk5NzE2OSw4NTc4NjkuOTc2MDM1NTUwOSw4MDU5MS4wNTkwOTA5MjU4OCwxLjU4MzAxNTcwODIzOTU0NjYsNjQyLjA4NzcyMjY3Mzg3NDQsMjk4MzguMTk1OTM0NjA3NzY3LDAuNzA4MzMxNDY1MTE5ODcyOSwzMy42Mzg3MjExODU1MDcyMiwxNzkzLjY2NjQzNjMzMzU1NzIsNTAzNDYuNzEyOTQ4NDY5MzcsMTMzOTYuNTM0NDU0MTIzNTk3LDAuNTY1MTAwMDQ4MzE1Mzk1CisxNSxUdWUgOCBGZWIgMTEsMTYzNi4yMjQ0NjkxNjcyMTU2LDkyMy4xODY3MTk0NDgxMTA4LDExMjEuNTg4OTc4OTgzNSw0OTY0MS40MTg4Mzc4MTI2NCw4MC43Njc1NTY0NTA1NjMzOSw2MjM4Ni42MzI4Nzc5OTEwNSwyNTEuMTk3NDg4MjMzMDg3NjUsODc3Ni44MzkwNTUxMTgzLDMyMDc4LjcxNTc5NjY5ODY3OCwzNDA2MC41MzAzNzY4NzU1ODQsNTE1OC41MDE3ODQ0NTg5NTEsOTU4Ny42MTkyNTk2NzExMTUsMC4yMDc3MDE4NTE2MDE0MDA5MiwzMTkzLjc2MjY3NTI2MzEyNjMsMTc4NDUuMDAzNjg3NjMxLDIwNzAxMjEuNzc3OTk3MTc1NywyMzQ4NDIuMDYzOTIzNzc3MDIsNS4zNDczODk4MjQ4NDgwOTYsMjA2Ny42NTUzNTAyNTY2Mzc2LDg2ODQ2LjU2MzA4NTAwMzY1LDIuNDA2ODI2NjAwMjMzOTU2LDExOS44NTY0NTgwODMwMzU0OCw1NjgzLjQ0Mzc4ODk2MjA1ODUsMTQ4MDk2LjU0NDU0NzY0MDc4LDM2NjczLjA0MDYyOTk1MjM2LDEuODg4MDMwMzA2NjEwMzQ3OQorMTYsV2VkIDkgRmViIDExLDQ4MzYuMjgzNDMzMDI4Nzg4LDI3NTUuNTY0NDk2MzAxODkzLDM0MjMuOTYxNzkyNjIwMTU2LDExNzE3My4wODA2MTU3MTE1MywyNjEuNjc5MTM4NTgyMzUsMTc3NDE2Ljg0NDY1NDQyMTE4LDgyMi43MjE2MzIxNDA5MDg5LDI3NjgyLjQ2MzU0NDI5NDQyLDkzMTgyLjY0MjQ4MTM1NDg1LDEwMTMyMC4wMjIxNTk4MzUzNCwxNTc3MS43NDAyNzk4MTk3MywzMDc2OC45OTI2NTEzMjUyNCwwLjc0NjQ0NTY1NjgxNDI0NDYsMTAwNzAuODk5NTk5ODU4MTE2LDU2MDA3LjM5ODk2NDc2MDM3NCw0MTIwOTY0LjQ1OTY5ODQ0MzgsNjY0MDEyLjE2NDY4NjM1NDEsMTcuODEyNTYwMjU1OTk5MzUsNjU5NS41NjAxMzAyMTg1MTYsMjQ3MzI5LjQ2MzkwOTI5MDksOC4wNzA5MTU3OTAxNTI1Nyw0MjAuMzUzMzk2ODgyNTYzNSwxNzgzOS40NTc2NDM1NDk0MDUsNDI5ODIzLjcyMjI0MDIxOTgsOTY1NzcuNjUzMTQxMDYxODYsNi4yMDcwNzI4MTQwMTkyNDE1CisxNyxUaHUgMTAgRmViIDExLDE4MjE5Ljk1NTYyNjU4Njg2NywxMDUwNS44NjgyNzcwMzE0LDEzMzY1Ljc4MjI3OTY0MTc4MiwyMDA5MzQuODYwNjI3NDA3MDYsMTE0Ni42NDU3ODk0MTAzMjYsNjE2MDM2Ljg0MzEyODc4MzIsMzY3NS4zNDUxMjQxNTE5MTMsMTE2MTE4LjE4NTM4MzU2MzY5LDMzOTE4OC4yOTM3NzQ4ODcxLDM4Mzc3Ny41NDIzMDc0MDI0LDYyMzc5LjU0NzU5NzUyMDM0LDEzMjQyOC4wOTE2ODA1NDk0MywzLjc4ODU3NTIwNDEwODgyOSw0MjM2NS4wNDcxNDE3NDEwNywyMjg1NjEuMDQ5NDM0MTgyNjcsMzM5Nzk3OS41OTI1MjAyODU0LDE5OTAzOTMuMjU5MDMzMTIzLDgxLjAwNDU0MzcxODM2OTQ1LDI4MTY0LjQyNzk4ODgyODQzNiw3OTY2NDcuMDg5MjE1ODA3NSwzNy4xMTk1NjI0MDk3Njg1OSwyMDU2LjUxODY1NTI2NDQ1NDUsNzQzNzUuNDYxNDcxMDE4MjcsMTUxMDM0My44MzMyMzUyNTIsMjUwNTQ5LjkwNjM4MzM1MDcyLDI3LjU1NTUzMzc2MTc3Mzg3NgorMTgsRnJpIDExIEZlYiAxMSw2MzMxOS4wMzQ2OTY3Mzc0MSwzNTcwMi44NDY4NzczOTE0LDQ2MTA2Ljk4NjE1MzAxODcxLDE1MjI5NC4zNzAxMTc4ODYwOCw0OTg2LjY2Nzk0MzgyOTc3MiwxODI5Mjg5LjMyNjM2MDEwNDQsMTY0ODcuOTY3NjI2NTk2MDQ0LDQ3MjkwNC45MzQzMDQ0MDUzLDExMDY1OTMuNjgxODU2ODk2NywxMzE4MDQ5LjQ2NTg0Mzg1ODQsMjI2NDExLjE1NTUzMzY2NTYsNTU0ODU1LjE2NDMyOTQ3NzIsMTkuMjI0MjE4MDM4NDA3NTYsMTc1NTcwLjU4MzIxODI1NTYzLDgyOTUyMC4yMzgyMTA2MDI4LDIxODAzMDguODY3NDUwOTY3NCwzMTc2MDIyLjMxMzc3MTcyMDUsMzY3Ljg4NTA0NzAzMTk5OTMsMTE3MjQ3Ljc4MDA0MzcyOTA5LDE2NjM4ODkuNTUxMjU4MDM1LDE3MC44Mzk5NTQ0NzI0NzUyNiwxMDAzMy44OTU1MTA2NTI3MiwzMDI2NDYuMjQ3NTAyODkyMzQsNDE5NTg3NS4xOTc5MTg0MDIsMzQ0NTA4LjI2MTExNTU3NTQsMTIwLjg2NjI5NTA2ODA1OTk0CisxOSxTYXQgMTIgRmViIDExLDE2NzU3OS4zOTAzMzcwMTQ2Niw4Njc2NC43NDc5MTA3NjI5LDk5Nzk4LjU3NjM5NDQ3NDI0LDk5MTc3LjExOTczMDAyNTgsMjI5NDIuNzYwNDY4Mzc1NzI3LDMzMzIyNzUuMzA1MjU1ODgsODEyNzYuMTk1MDY4NDA2NTEsMTc1MTM4Mi4xOTMxNDc0MjksMjQ5Njk0Ny4yODIzMDk2MTEsMzEzMzQ5OS41NDQ4ODc5ODA0LDU5MjYxMy4zMDUyMzcwMTc1LDIxNDM0NDIuMDc4NzUyMTQxLDExMC4zOTUwMzA3ODkyNzI1Miw3MTk1NDguNTA2OTI3MTI1MywxODQ5NjUxLjI0MjU3ODY4MjUsMTQyMDUyNS45MDg2NDQyMDQ3LDIwNjc3MDAuMTgwNzExNzQ1LDE4MjcuOTQ5ODM4NDU5ODg0Niw0ODQ4NTIuMTQzNzg3NjM2NTQsMTI5MjE5My42NzU0MzE5NTI2LDg2NS44MDIxMTg3OTAyODQ1LDU0MzYwLjQ5MTgxMDQ0NDM0LDExNjIzNTcuMTA4ODU5ODQyNiw1Mjk0MTI2LjI4NTkwNTMwMywyMjcxMjkuNTQ2NTc5MjcwNTQsNTUxLjkyMzcwNjYxNjQyMDkKKzIwLFN1biAxMyBGZWIgMTEsMTcxMDUzLjU1NjE3MDY2NTU3LDEyODU1OS4zNDQ1NTc1MDY1Nyw3ODk0Ny40OTM2MDg0MTYxLDY0NzgzLjg3OTAxNzI1MDExLDg5MDk4LjU3MzkyMjIwNDI2LDI0OTMyNjEuOTI0NTE0NTY4NCwzNzY0NDUuNTkwNjA2NjcxNzYsMzA0NjgzMS4zOTM4MzIwODYsMjEyMTAxNC44NTUzMTAwMzAzLDI2OTAzMzYuMTgzMjczOTE0Myw1ODA3OTcuODkwMjMyODIyLDM5NDU3MTkuMTc3NDA5MDUxNSw2MzYuMzMxMTUyODQyMDI4NiwxODQ4Mzk2LjA1Nzk2MTM3MSwxNDMyOTY0LjY5MzUwODM2NCw5Mjg2MzIuNDkzMjU3NzQsMTM0OTkzOS40NDk2NTY4ODU0LDg3MDEuODgzODIzNjE1NzY2LDE1NTg5NDkuMDAwMzM0MzA3LDg0MzU0OS40NDM1NTUxNjY1LDQyNTEuMzE4NTkwODY3NDQ3LDI4MDA5NC4xNjA0NzYxMjMyLDIzOTM2NjguNDE3MjA1MjgxLDM0NTUzMjQuNDIzNTMzNjk0NCwxNDgyOTUuODI4NjE3Mjc2NiwxOTY4Ljg5NTUzMDE3NzYxOTMKKzIxLE1vbiAxNCBGZWIgMTEsMTEyNTU5LjEwMDgyNzgzMTAyLDEyOTU0OS43MTk4NjMzNDIwMyw1MTgxMC42ODIyNzQzODY4OCw0MjU5MS42MTA1MzUwMDI1NiwyMDE4NTQuMzUxOTc1Njc3NTMsMTYzNjM1MS4xNjEwMDU4MzYsMTUwMzY2Ni4zNjIxOTE3ODYsMjE3MDA0OS4yMDAwNTc5MTMsMTM5MTg5My43NjAwNTcyMjg0LDE3NjU0NTYuNzM1OTI4MzgzNCwzODE5NzYuMzA3MjM4Njg1NTUsMjg1NjE3My4zMTM0ODU4ODc0LDM3MDMuNjM1NzY0MTI0MTA5MywxNzUzNzM5LjE1NTIwMTM0Niw5NDA0MDMuMzU4ODc2OTg4OCw2MTEzNzAuODgxMjk4ODk5Myw4ODY2MTAuMzI5MDYwMzU2Niw0MDY1NC4xMzk3ODcxMDk4MSwyNDM4MjMxLjgxOTQyNTkxOTYsNTUzODgzLjQwNzEzMjcxMDIsMjA5MDQuNzU2NjkxNDI3Mjg3LDEyMTE4NjIuMTU3Njc1MjQxOCwxODY1NTE4LjIyNzc1NjIyOSwyMjY4MTMyLjM5NzU1MDI4Niw5NzQwOS44NTQyODkyOTI4NSwzOTk3LjQxNjY3MzUzODg3CisyMixUdWUgMTUgRmViIDExLDczODg1LjExNDg4MTgwMDUsOTQ0ODQuNzIyOTU3MzU1ODksMzQwMTUuMzUzODY1ODcyNTEsMjgwNTEuNDg2OTEyNzQ5MTksMTY3MzI3LjU1NTcxOTU0MzY2LDEwNzQ0NDguMjUwNTM3NDUxOCwzNDkzNDQ5LjMwMjA2OTk4NTMsMTQyNDA4My40MzQyMTMxODk0LDkxMzc4MC4zMDIyODkwNzEzLDExNTg5OTQuNDUzMTAzNTE5LDI1MDczOC4yNDgwODAzNjMyNCwxODc0MzE4LjQzNzA3NjA1OTYsMTk5MTQuODk1NzY5NTMwNSwxMTUxODU5LjA1NTkzMDY0OTIsNjE3NDAyLjI5ODg0NTIwNDksNDAzNTg3LjQ0NDA1NjY1MDMsNTgyOTM1Ljc2MDEyNTcyNTEsMTc0NzMzLjM4Mzg0MTAxODMsMTcwNTYyOS4zMTIwNTAzMjIzLDM2NDAwNi4zNjUxNjY2NzgzLDk5MDczLjgxMzI2Mjc2OTU3LDI2NzY0ODIuMTM3Njk3MTM1NiwxMjI0MTYwLjAxMjk4ODI4MjgsMTQ4OTc2NC4yMDUzNTk4MjczLDY0MDU5LjUxNjQ5MDQ4MTgxNiwzNTIyLjM3NjYxMDEwNzE2CisyMyxXZWQgMTYgRmViIDExLDQ4NDg5LjY3MDIwMjM4NTM2LDYyMjQ2LjUwODI0NDA3NDkyLDIyMzMxLjMwNDY3OTQwNzc5MywxODUxNC4xMjI0MDU5ODE4NjMsMTA5Njg2LjEwNjE5ODM0ODY0LDcwNTUzNC4zNjkzMzUzMzUzLDI5Nzg5MjEuMjgzMTIyMzU2LDkzNDE1NC4wNTMwOTMyNzU2LDU5OTg1MC44OTA4NTY1OTIxLDc2MDc4Ni44MTQ5Mzk3Mzc5LDE2NDU2MS4xNjg4MjAwNjI4NiwxMjI5NDQ0LjM3NTIzNzc4OCw5MzY4My44NjA3NjYyMzIwMSw3NTUzNTkuNDM0ODYyOTE4OSw0MDUzMjYuNzgyMTczNzM1MDMsMjY3MzU2LjMzNDExMDUwNTIsMzgzNjY0LjIxOTI1NzEyNjMzLDU3MTAxMy42OTcwMzg2NTA1LDExMTgyMzMuNDM3OTY2MDIzNiwyMzkzOTAuMjM2MTgzODYyNyw0MzE3NTYuNjY5MDc3MTY2NzYsMjEzMjcxMi4yNjgyMTYwOTk2LDgwMjkwOC4xMDI5ODA3ODMxLDk3ODgxMi4zNTQzMjEwMjk3LDQyMTc2LjE1MTQ5NzQyODY1LDIzMTUuOTkwODYwMjI2MTIzCisyNCxUaHUgMTcgRmViIDExLDMwNDgxLjgxMDY0NTk4NTE4NCwzOTA3Ny43ODQ3MDk5MjI4OSwxNDA0Ni45ODE0ODcyMzc3MDYsMTE3NTcuNzk1ODUyOTEyMzEsNjg3OTEuMjk3MzQ0NzU0NSw0NDM5NzcuMDk2MDg3MTAwMywxODY3MjU2LjE4MjUxMTE4NzIsNTg2Njg5LjczNDQ4ODkyMTksMzc3MjU5Ljg0NjgxNjc3NTEsNDc4NDM1LjQ3ODUxMDk1NTQsMTAzNDUzLjgwNTI0MTY3MTcxLDc3MjA4NC4zMzM3NDI0OTA2LDI5MjE2Ni42OTk5MjMxMDA5LDQ3NDExOS4wMTc4MzY1ODcyLDI1NDk1OS4yMTIxOTg1OTM0OCwxNzA4NzcuNzUxNzQ2MDYzNzMsMjQyNDQ0LjQ3OTAyNjg5MTQsODkxMzU4LjM3MTk4ODY3MzUsNzAxNTMzLjY1OTkwMDU3OTUsMTUxMDY2LjE4NzI3NTA1NzIyLDEyNjI3MjguOTUxNTQ2MDkzNCwxMzM2ODYzLjMzNjU3NDcxNTMsNTA0MTM1LjAyOTA4MjQxNzcsNjE2NTk5LjY3ODk5ODU0NzEsMjY2NjguNjMyMTgwMzY1MjI4LDE0NTIuNTIxNzM1ODUxMTAyNAorMjUsRnJpIDE4IEZlYiAxMSwxODQxMi41MDUyMzYwMjE5ODUsMjM1NDMuMDAzNTgyOTc1MDA1LDg0OTUuNDY0MzA4OTYyODA4LDcyMzUuOTY4MjUzOTU1Nzg3LDQxMzYwLjQ3ODMwMjI3MjIsMjY4NzE0LjY4ODg5NDY2OTc2LDExMjExNjMuMjMyNjAyNTYwNCwzNTM3NTMuMjcwODY4ODczOCwyMjgwOTAuNDQzMjYzMTczNywyODkyMTQuODE2MTc2NTg4Myw2MjQ5OC44NTQ4Njc1MDAzMDQsNDY1NDY3Ljk0OTQ5MTM2NDUzLDY4OTIxNy40OTQzNzczNjg4LDI4NTU0MC4zMDY4OTMxNTA4LDE1NDE5NC44OTYxNzEyOTY5LDEwNjMyOS4xMTM4ODcwNTI2OCwxNDc4NzguNDkzMDI1MTE1MjUsNTM0ODQ1LjgxNjMwMDk4ODMsNDIyMDY2LjY2MzE2NTIyOTYsOTE5MTAuNzA3NzkzMTA3MzcsMjcwMjYwNi45MjA4OTM1NjUzLDgwMjg1My4yNjM4NjEzNDA0LDMwMzgyNC4yNDAxMzIyNTUsMzczOTQxLjEzMjQ4Mzg1NDU0LDE2Mjg1LjAzMjE2MzAzNTU2Myw4NzMuMzAzNzI2MDUwNTEyOAorMjYsU2F0IDE5IEZlYiAxMSwxMjE0NC41MDc3MTU2NTA4MDEsMTU0NzIuODUyMTcxMjMxNTI3LDU2MTIuOTYyNzAzNjg1NzQyLDQ4OTIuNzQ2MjEzOTU5MjM1LDI3MDk1Ljg1Njg0MDQ2MDA4NSwxNzc3MjQuNjc4OTQ0MDQxMjgsNzMzMTg3LjE2ODE3NDE3OTIsMjMyNzMwLjA5NDc4MjczODY2LDE1MDYzMi4xNTYyMDg0MDk1OCwxOTA5NTYuNjgyNDAxMDYwNjIsNDEyMjkuNTExNjcyMzA2ODg2LDMwNjE1OC4xNjcwNjExOTEzLDcwMTA1Mi4xMjQ3NDEzMDQ5LDE4NzUzMi45NDMyMzE3NDMsMTAxODc0LjcyMDYxMDM0MzY1LDcyODg1LjgyNTI3NDk3MDQsOTg4MjkuNTkyNjYzMzI5OTEsMzQ5MTgyLjAxOTgyNTYzOTYsMjc2Nzc1LjA2Mzc1MzAxNzMsNjEyMjAuMjgyNTg0Njg5OTgsMTk0NTk3OC4wMjQwNzY1MjI2LDUyNDk1Ni41ODUwNzI1Mzk1LDE5OTczOC43NjY5NTg5NDMzLDI0Nzk5Ny45NDMwMjU3NDkxMiwxMDg5OS45NzI1MjU4NjU4MTUsNTcyLjEzMjYzOTU0OTIwODMKKzI3LFN1biAyMCBGZWIgMTEsNzQ0Ny43NTc5MDY2MTI2NTUsOTQyMS44NjA1Mzc2NzU2MjgsMzQ1My4zMzg3MDU1NDYzNTEsMzEzOS4yNTc0NDQ4Mzk3MTI3LDE2Mzk3Ljc1MTMxNDg4MTIxNCwxMDk1NTguMjcwMDQ0NTQ4NDUsNDQxNDc0LjY3OTY4MTg0NTA3LDE0MjAyMy4xODA1OTM5OTg4LDkyNTk2Ljg2MjUxMDgwODgsMTE3MzM2LjA3MDU4ODU4NjAxLDI1MjkyLjE0NjM2MzAyNjExLDE4Njc1Mi43NjMyMTgwMjU2OCw0MjA2MjYuMzUwMjg2NjI0MTYsMTE0MDYxLjI4MjM1MTMzODM1LDYyNjc1LjY0MTUzMjc4MDY1LDQ3ODcwLjYxNjIxNDQ1MzQ2LDYyMTA3LjQ1NDc3ODczMjI1LDIwOTY2NC42MTkxOTU4MjE1LDE2NzgyOS40MjcyMTA5NTMyMywzODIzOC43NDQ0OTc1NTk0NywxMTY4MDAwLjAyNzQwNzM2NTYsMzE2NDc4LjgyNTU3MDk2ODc0LDEyMTcyMC4zNzgzNDE4OTg5NSwxNTM2NjQuNDczMTIxMDMzMjIsNjg2OC41NDkxNjM4MDQyOCwzNDYuMTk0NDAxMjUyNjk3NgorMjgsTW9uIDIxIEZlYiAxMSw0ODQ5LjgxMjY3MTI3MDI4Niw2MDc0LjUzMDY2MjQ5NDYyNywyMjU4LjczNjM5OTc1NTMwMywyMTY4LjQ2OTk3NzI5NDc0MjQsMTA0NzUuNjU0NjgxMTIxMzUyLDcxODUzLjA5MDA5MTA4MDY1LDI4MDI1OC40MDYzMDU4MTY1LDkxODM2Ljk4OTAwNjc3MjkzLDYwNDkzLjY1OTg3OTc3NDA2LDc2NjEwLjk1MzMwNTQ4MDEzLDE2NDc2LjA3NzIxOTQwMjkxNiwxMjA2ODYuOTAwODk1NjU3ODksMjY0ODc0LjEzMDE5OTI2NTk2LDczNDA0LjE3MzU0MDk2ODUsNDA5OTEuMzcyOTg0MTE1ODg2LDMzOTU4LjczNjc0Mjc4MTY2LDQxNzc1LjkyNDgxMjUxOTgxLDEzMjI1My44MzMxNjc0MjI0MiwxMDc1MzEuODIyNzYwMjA2OTEsMjU1MTkuODE1Mzg3MDYwOTksNzM1OTgyLjQzNDQ1NzczMjUsMjAwOTg3LjU2NDcyNzAzODU1LDc4NTUxLjcyMDQwNjk0NjIsMTAxNDc1LjUxOTUxMzM2OTgzLDQ2MzYuNjg3MzgzOTg5NTcxLDIyMS4xNzgyNzcwMjkxMDc3MworMjksVHVlIDIyIEZlYiAxMSwzMjE1LjUyNjQxMTYwMzU5NywzOTY3LjM1MzU5MDA1MTA1OSwxNTA3LjQ0MDQxNTY1ODkyMDUsMTU1OC41NzE2NzMxODg1ODEsNjc0NC41MTQ5OTEyOTMzOTEsNDgxNDIuNDAyNTc2NjA4MTMsMTc4ODI2LjU0NjYzNzgwMjczLDYwMjU0LjI1Nzc2OTc2MjM4LDQwMzAyLjQzMjExOTUwMjk5LDUwOTk2LjQ2Mjc4MjEwMjI5LDEwOTMwLjQ1MTM4MDk3ODQ4NCw3OTEwOS4yNTYwMTAyNTA4OSwxNjY0MzYuNzU3MzIyMTczOTcsNDc4MDguMTkzOTg3Njk3MDIsMjczNTQuMDczMTE0NTY1NSwyNTIwMS45OTgxNTUxMjA0NSwyODk5Ny44OTY2NjMwNDExOCw4MzQ5MC43MDYwMTI3NzEzMiw2OTU1My4zOTMyNDYwNDM0MiwxNzUyNS42NTE2OTU0MTYzNjQsNDYzMTIzLjU1NDUzMDYxNDA2LDEyODE3OS4yMTc3NDM0NzUyNCw1MTM4MS4wMzkxMjY3MDAwMSw2ODY2NS40OTEwOTM4MzkxNSwzMjM0LjEzNzQyNDExMTA3MiwxNDIuNDA3NjQxMDE1NDMzODUKKzMwLFdlZCAyMyBGZWIgMTEsMjE5NS4yNzIyNTgxOTQxOSwyNjUzLjc2NjY4Njc2MTg3OSwxMDM4LjE2OTIzMzU1MzkxMjYsMTE3NS4yMjk5OTIwOTIyMzY0LDQ0MTYuNzM5NjQxNjMxNDM5LDMzMzI5LjYxNjU1NjQ1NjU0NSwxMTUzMDcuOTc0NTU3OTg0OCw0MDU0NC4zNzQ2NjI0OTk1MDQsMjc2OTEuNzk2MDMzNzQzNjMsMzQ5OTkuMDAxMTU4NTI3NzQ2LDc0NjcuOTI3MTE4NjY1NjE0LDUzMTYyLjYyMjI4NzEzMTU0LDEwNDgyNC41MjQwMTM2NDA2NSwzMTgzOC45MjYyNzkwNDQxMywxODgzNS4wNTMyMjk5MDMxMzMsMTk2NTEuNDA1NjQ3MDMxMzk1LDIwOTg1LjMzNDE2OTE2MDYyMiw1MzA5NC45NTYwMDQ1OTEyNSw0NTg2MS45NDUzMTAyMzE4MSwxMjUxOS4wMTY0NjAyMTI2OTMsMjkyNDAzLjI5MDUyMTA5Miw4MjczMi42MzkwMzk2NTk4NywzNDQyNi44NzQ2NDA0Mjc0OSw0ODE0Ny40MTM1NDY3NTU0OTUsMjM1NC40Nzc2MDM2NDA2OTEsOTMuMjU2NzEyNDU4ODk1NDYKKzMxLFRodSAyNCBGZWIgMTEsMTU2MC44NDA5Njg0MzcxMSwxODM5LjI0NjkyODc3MTA3MDgsNzQ2LjA5MzQ5MDkxMzM3NTQsOTMzLjczMzc1NDc0MTc2NjksMjk3MS42ODA0NDcwNDAwNTg0LDI0MTA2LjQ5NzAyMzc0NDQxNCw3NTg5Mi43NzI1NzI2NDgzLDI4Mjk3LjU5ODY0MjA3NTI0NSwxOTg0NC4zNzA5NDIwOTA3MzMsMjUwNDQuNTg2NDA3NTY4NTgyLDUzMTQuNDE0MzY1Nzg2MjQ4LDM3MDQxLjY2ODYxNTgxNDYyNiw2NjQ4Ny42MzYzNjU5Njc1NiwyMTkyMS4zMzU2OTIxMDc5LDEzNTMyLjAzMTk4NjgyMTA4NSwxNjA5Ny43MDIxOTc2MTczOCwxNTk2MC43Njk1NzA0Mjc0MzYsMzQxNzcuMTk4OTAxNDA5MTEsMzExNTMuMjEzMTc2MTc2MjE4LDkzODcuMDUxNzA2OTY5MjIsMTg2MTUxLjk3NzM5MzA0MDMsNTQ1MTguNjU2NjE2Nzc4ODg0LDIzODk0Ljg1MzUwNDk5NTE2OCwzNTM0OC42ODI1ODAwNTM4ODYsMTgwMi42NTQ2NzYwMzk4NzQ2LDYyLjc1MjQ3MTg2ODc2MTk0NAorMzIsRnJpIDI1IEZlYiAxMSwxMTY0LjQ4MzY4NTcwOTMwNzgsMTMzMy43NTQ4MTc2ODI1NjgsNTYzLjI0NDI3MjY0OTIzNjksNzc4Ljc4MDk4OTY4MTU3NTQsMjA3My45MjczMDM1MjA1NTcsMTgzMjcuMTUwMTc5OTA3NDU0LDUxNDE5LjI5MTc2MjkzMTgsMjA2NjMuMDkwODQxNzAwNzUyLDE0OTMzLjgxODAyODczOTI1OSwxODgxNi41NTg3MzY4ODIzOTgsMzk2OC41MDc4NjAxNTk5OSwyNjk5My45NTgwNDMyMjM1NCw0MjY3OC4wMjA4OTAwMDU1NCwxNTc0OC42Mjg0NTI5Nzc4MDgsMTAyMTEuMzg3OTg0MzY1MjIxLDEzNzU5LjMyNTE1NzU5Njg2LDEyNzY5LjI5Njk3MDU0MDAwNSwyMjQwOC45MTcyODA3NjkxMzYsMjIwMTAuMjQ0MTU1MDQ1MzksNzQwNi41MzcyMzA0MDQ5MDksMTIwMDUxLjEzMDg3MDY3ODU2LDM3MDAzLjI3MDkwMzAyNjI3LDE3MzMzLjkwMzE2NjM0OTU0OCwyNzI5OS41OTgwNjI1ODIwOTYsMTQ1MS43OTc2NzMyMjgyMDczLDQzLjgwNTYzMDEwODMxNgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Ob25aZXJvTW9ydGFsaXR5UmF0ZV9GRF9SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vSV8wLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvTm9uWmVyb01vcnRhbGl0eVJhdGVfRkRfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL0lfMC5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmMyNDQwMQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvTm9uWmVyb01vcnRhbGl0eVJhdGVfRkRfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL0lfMC5jc3YKQEAgLTAsMCArMSBAQAoraXRlcmF0aW9uLHRpbWUsCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L05vblplcm9Nb3J0YWxpdHlSYXRlX0ZEX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9JXzEuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Ob25aZXJvTW9ydGFsaXR5UmF0ZV9GRF9SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vSV8xLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYzI0NDAxCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Ob25aZXJvTW9ydGFsaXR5UmF0ZV9GRF9SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vSV8xLmNzdgpAQCAtMCwwICsxIEBACitpdGVyYXRpb24sdGltZSwKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvTm9uWmVyb01vcnRhbGl0eVJhdGVfRkRfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL0lfMi5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L05vblplcm9Nb3J0YWxpdHlSYXRlX0ZEX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9JXzIuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEyMGMxMGEKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L05vblplcm9Nb3J0YWxpdHlSYXRlX0ZEX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9JXzIuY3N2CkBAIC0wLDAgKzEsMzMgQEAKK2l0ZXJhdGlvbix0aW1lLEVHLUZSRy1HMjEwMDAxLEVHLUZSRy1HMjEwMDAyLEVHLUZSRy1HMjEwMDAzLEVHLUZSRy1HMjEwMDA0LEVHLUZSRy1HMjEwMDA1LEVHLUxPRS1HMjQwMDAxLEVHLUxPRS1HMjQwMDAyLEVHLUxPRS1HMjQwMDAzLEVHLUxPRS1HMjQwMDA0LEVHLUxPRS1HMjQwMDA1LEVHLUxPRS1HMjQwMDA2LEVHLUxPRS1HMjQwMDA3LEVHLUxPRS1HMjQwMDA4LEVHLUxPRS1HMjQwMDA5LEVHLVVQRS1HMjkwMDAxLEVHLVVQRS1HMjkwMDAyLEVHLVVQRS1HMjkwMDAzLEVHLVVQRS1HMjkwMDA0LEVHLVVQRS1HMjkwMDA1LEVHLVVQRS1HMjkwMDA2LEVHLVVQRS1HMjkwMDA3LEVHLVVQRS1HMjkwMDA4LEVHLVVSRy1HMzAwMDAxLEVHLVVSRy1HMzAwMDAyLEVHLVVSRy1HMzAwMDAzLEVHLVVSRy1HMzAwMDA0CisxLFR1ZSAyNSBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMS4wMDczMzE3MzE4ODM1MzI2LDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMixXZWQgMjYgSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuNzU1NDYzNTQyMzAyMDMzNSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzMsVGh1IDI3IEphbiAxMSwyLjc4NDA5NTEwOTM5NjU5MkUtNCwwLjAsMC4wLDAuMDQ2MzIxNjk0OTk0Nzg0MTA2LDAuMCwwLjAxNjczNDc0MTc1MjY3MjY5NiwwLjAsMC4wLDAuMDA3MTg2NjU3MDMwOTk0MjIsMC4wMDUxMzYzMTQ2NzIxMjIyNTEsMC4wLDAuMCwwLjAsMC4wLDIuNzI1ODU5NTIyNDcwNDY1RS00LDQuNTg0OTAwNzU0NTkwOTgzLDAuMDQ2ODg5MjUzMjUxMTE0MzQsMC4wLDAuMCwwLjAxODYyNzIxNzk2Mjk3MDM5NiwwLjAsMC4wLDAuMCwwLjAyODg3NTAxODMzMTA2MDUxNSwwLjAxNzA0MTUxODYwOTE5Njg4NiwwLjAKKzQsRnJpIDI4IEphbiAxMSw1Ljg0NjMwNzM5NDg3NzQ1OEUtNCwwLjAsMC4wLDAuMDk3MjcwNjgzMTY2MDQ3MjgsMC4wLDAuMDM1MTQxMjAwNDMyMjQ0MzM1LDAuMCwwLjAsMC4wMTUwOTEyMjUxNDIxNDUyMzEsMC4wMTA3ODU3MjE0ODg2Mjk0NCwwLjAsMC4wLDAuMCwwLjAsNS43MjQwMTg3ODE0NDM2NDdFLTQsOC44NjI5NzQwMDgyMzIwMDEsMC4wOTg0NjI1MDc1NzU5NzU5MSwwLjAsMC4wLDAuMDM5MTE1MjAxNjA5NjUwNzUsMC4wLDAuMCwwLjAsMC4wNjA2MzQ1MDY0MzQzMjE3LDAuMDM1Nzg1Mzk4NzE0OTc1NTI2LDAuMAorNSxTYXQgMjkgSmFuIDExLDAuMDAzMzAwNTkzMzczMTQ2MjEyLDcuOTc4MzMxNzIwOTk5MzM3RS00LDUuNzI4ODA5ODkxNjU0NzIyRS00LDAuNDEwODUzMzc4ODI4NzA2MiwyLjA3NjY4NzA1NzY1NTUzMjRFLTUsMC4xODQ2Mjc3ODEwNDc4OTYyMyw1Ljg5MTY3NTIwOTQwNTQ3MUUtNSwwLjAwMzIxMzE3MzI2MjM1OTczNTIsMC4wODA5MDIzMTczNTc2NzYwNCwwLjA2MjMxMDgwNDQwMTY4ODI1LDAuMDAyNzU1NDEyODIxMzI3OTYzLDAuMDAyNzcyMDYwOTcxNTU4MzI4NCwwLjAsMC4wMDExNzA2OTY2Nzg5OTIwNDQ4LDAuMDA4ODExNzMxMDM2MzcxNTU4LDI4LjIxMTIyMzYxNzA2NTg0OCwwLjU0MjgyNzI5NzA3NDcyMDgsMS43Mzk3NDUzNTgwNjM1OTM2RS04LDYuNjE5OTA0NTU0Njk2NzY0RS00LDAuMjEyODc0NDA5NzU4MjIxNjQsMS43NDE2NzE2ODkwNTgxMjVFLTgsMS42ODE5MTAwMzA3NTY5MjVFLTgsMC4wMDIyMTYyMzY2NjM1ODg5NjU0LDAuMzM0ODI0MjY0MjMyOTI4MSwwLjE3MTY0ODUwMTMyMTgzNDA0LDAuMAorNixTdW4gMzAgSmFuIDExLDAuMDA5NTE3ODIyMjUxMDI0NzQ4LDAuMDAyNzUyMzg0Nzk1MzA1NjEwNSwwLjAwMTk3NjMzOTExMzU2MDIzNDcsMS4xMDY0NjU5MjAzODExNTczLDcuMTY0MjA2ODA1NTIwNDk1RS01LDAuNTI0NjEyMTgwNTE2MzU1NSwyLjAzMjUyNDg0MTc3NDAzNDVFLTQsMC4wMTEwODQ4ODU0MjY2NzMwODUsMC4yMzA4NjI5NTcyODAwMzY4NiwwLjE4MDQ4NzExNTU1MTcxNjM0LDAuMDA5NTA1NjkxOTA5NTIwNDE3LDAuMDA5NTYzMTI1MjI4ODA0MDYxLDAuMCwwLjAwNDAzODY5ODY2MTI5MTY3OSwwLjAyODU2OTM2OTYwMTMzNjYyNyw2OS40OTI3MTU1NTk1MTM0OCwxLjU1Nzk0NDYyNDExOTk4MDQsNi4wMDE4MTcwMjY4MzkxMDRFLTgsMC4wMDIyODM3NTEyMTAwMjAzMjIsMC42MDkzNTYwMjUwOTI1MjYxLDYuMDA4NDYyNTMxNjU5MDIzRS04LDUuODAyMjk1MjY4OTE0NjA2RS04LDAuMDA3NjQ1NjI4NTczMDU5OTY2LDAuOTYxMjc5ODM5MDA1MTQ1NywwLjQ3Nzc3Njc1NTU5NTMzOTA1LDAuMAorNyxNb24gMzEgSmFuIDExLDAuMDM1MzM5MDgwMDgwOTI1NTQsMC4wMTMyNDgxODA4ODg0NjQ5MjUsMC4wMTA3NzYxNjQwODg0NDk0ODUsMy40MDE4MzE5MzU2OTA0MDgzLDQuNDI5NjY2OTQxMzQzODk5RS00LDEuODUxNzg2NzkzNjU5NTU4MiwwLjAwMTI3MTA3NjE5NzgxMjA3MDQsMC4wNjM5NzU3Njk5Nzk2MDk0OCwwLjgyODYxODY5MDc3MjEyODIsMC42ODAyNjk1MjQ1MjgwMTU1LDAuMDUxMjI0MDYxNjk5NzE4NjQ1LDAuMDU3NzczMTY4MTU4NDcwMzUsMS42OTk1Mzk4MjYyNzQ3OTc2RS03LDAuMDIzMzI2OTA5Nzk1MDUyNzc3LDAuMTQ3MDkyOTEzODYzODA0MTYsMTkzLjg4MDIyNTY3NTQ0OTY1LDUuNjkxMTEwNTM1MDQ2MjI5LDkuOTYyOTg3NTIwNTE5OTQ2RS02LDAuMDEzNDk0NDk1NTc2OTE2NDgyLDIuMjA2MDQ4NDAzMzkxNjM1Nyw0LjQ1MjcyMTQ5ODk4MjQyMUUtNiwxLjIyOTk5NTA2MDI5ODIwMDRFLTQsMC4wNDM1OTIwNjI1MzkwNzE3MywzLjUxNTQ4MjA4NzIwNjI1NywxLjU4NzU0MzAyODA1MjYzNDYsMy40Nzg3ODc0NDE3NjEwMzM0RS02Cis4LFR1ZSAxIEZlYiAxMSwwLjEwOTI1MTMwNTQ3MTQwNjYsMC4wNDU0MTUxNTAzNjk5OTk0MzUsMC4wMzg2NzM5ODM0MjMwMjUyNSw5LjQzNDA3NDc2NzgyNDIxLDAuMDAxNjUzMTA4MjU2NzM3Nzk3Niw1LjU3MzA3MDI3OTU3MzA2MiwwLjAwNDc1ODg2MTY1MTQyMTk4LDAuMjMzODc5MDcwNjY2OTg2OTMsMi41MTY3NTIwNTM5MDI5OTYsMi4xMTkwOTg5ODA1ODc0MDI1LDAuMTgzMTAwNzQxNzA0NjkwNDgsMC4yMTQxNTU2NjEzNzg1MTM1LDguMTU3Mzc0Nzc1NTI4NjI2RS03LDAuMDg1Mjk3NTgxNTc5NTU5MjksMC41MTk4MDA5ODcyMjgxOTIyLDUwOC4zMDQ4MDczOTk5NzExNCwxNy40NDYyMjU2NDUwNDk4NCw0Ljc0MjM2MjM1MDQwMTc2M0UtNSwwLjA0OTY5MTU5ODQ2Njc4MzY3LDYuNzMwNzI4MDY1ODEwNTgxLDIuMDk3NTI1ODAzMTg5MDA2RS01LDUuODk5ODQzODk4NjY2MTc1RS00LDAuMTU4NzUwMjY0NDA0MDU2ODcsMTAuNzgzMTcwMTI4ODUwMDk5LDQuNjE2NzE2ODI2MTk3MTgyLDEuNjY5NzMyNzI0Njc1MzczNkUtNQorOSxXZWQgMiBGZWIgMTEsMC4zNTc5MDQ5NDkzODMyMzQzNiwwLjE2MzI2Njk3OTk2NTY0NDYsMC4xNDk1NTc0OTE1OTc4NTIxNywyNi43MjIwNjMwOTc4NzExLDAuMDA2OTY5MDQ3NDM0MTc1OTcsMTcuNTMxODgzMjAzNTMzOTA1LDAuMDIwMjcwODQ1MDEzNTY4MzE2LDAuOTQxNzE2MTMwODcxNjM0OSw4LjAzNzg3NjU1OTM0NzM0Miw3LjAyMDIwODE5MzYyMTcxNSwwLjcwMzA4MjYyMDQ0MTAyMDEsMC44ODkxNjMyNTgzOTU0NjIzLDUuNTA0NzU2ODg4Mzk3MTk2RS02LDAuMzQzNTAzMTY1MzI2NDM5NzYsMi4wMjY4NzExMTcwODg5OTg0LDEzNzQuNTY3MzU3NDIwOTkxNiw1Ni40MjYwMzQ4MzQ0NTEyLDIuNjg4ODc0MDY1MjIyNTM3RS00LDAuMjAzNDU1NjM3NTIzOTE4OTYsMjEuNjE1Mzg1NzQyOTk3MTY2LDEuMTgyODgwMjI0NTEzNjUyRS00LDAuMDAzODA2MTc3MDY4MTMyMjM2LDAuNjM0MTI3MjcwMzYxNzUzLDM0LjkwODMzODMwMzYzMjczLDEzLjg1NjA1MTc4NDEyMTI2LDkuNjYyOTYzMTYwMjU0NjE2RS01CisxMCxUaHUgMyBGZWIgMTEsMS4xMDc5MjYyNTQyNzM5MjcyLDAuNTM1MDk1NDQ5MzE3ODQ5NSwwLjUxNDk0MDg5NzExMDUzMzYsNzMuNTI1MTExMDY4OTkyODksMC4wMjUzNjQzNjA0ODk3OTQxNjYsNTIuNTYzNzI3NTEwNzEyMzI2LDAuMDc0MjU3MDc4NzI5Mzk1OTksMy4zMzA0NDc0MzUwNjYzNTA0LDI0LjQwMDAyNTM1NjExMTQyNCwyMS45MTY0NzAxNTM1NjY1NywyLjQwOTQ3NzU3ODMxMzA1NzgsMy4yMDYwNzkzNDIzOTQwNDU1LDIuNDY5NTkxMTg0NTU5NzcxRS01LDEuMjE0ODk4OTgzNTgxODgwNiw3LjA0NTk4MDM0OTU1ODY2NSwzNjYwLjc0MjUyMDgxNzM5MSwxNzIuOTQzODAwNjE5MDUwOSwwLjAwMTEyMjEzNTY4NzgzMDY0NjgsMC43MjcyODcxMzU3NTM1OSw2NS44ODQzMzI4NTExMjM3OSw0LjkyODc5NDEwNDE2MDQ3M0UtNCwwLjAxNjc4NTEwNzU1NDI1NTg0MywyLjIzMTE1OTk4ODc0NTgyMDcsMTA3LjA3MjI3MDIzNTExMzczLDM5Ljk4OTI4NDgwMTI1NDM5LDQuMDY4MTUxNjQwMjkzNzk3NUUtNAorMTEsRnJpIDQgRmViIDExLDMuNDU5NDQ0Nzg0NzM3NTcxMywxLjc0ODY0Nzc1Nzc4NTI2NDgsMS43NzEzOTI0Nzc2MTAxNDc3LDIwMi4zODI3ODM3MTk0MjgyNiwwLjA5MzU0Nzk2NTE4NTMxMTk3LDE1OC4yNTk3NDU3NDczMzgxLDAuMjc2NTY2MzM2NTY1NjE5MSwxMS44NDg3NjE1Mjk2OTcxNTksNzQuNTc5Nzc0ODY1MDIwOTEsNjkuMDc3OTI0NTY2MzI1OTgsOC4yNDg2NzQ5NTc3OTkxMDMsMTEuNjg0OTg3Njc3NjUxNDMxLDEuMTU2ODE5ODE0MDU0MjQyNUUtNCw0LjMyMTU4MjgyNzcxMjE4NCwyNC43Mzg3NzUzNjM3OTY2NTUsOTgyMi41OTI2OTg0NjQ4Nyw1MzMuODk3MjU3NzU1NzM0OCwwLjAwNDY2ODkyMjE0MjgxNzU2NiwyLjYyMzM3NTU4OTI3NjQ0MzQsMjAyLjEyOTUxMTc0MjQwMDYsMC4wMDIwNTQzMDcyMjg1NTE5MDgzLDAuMDc2MTAyNTIwMDcwMDE0MjQsNy44ODc5ODYzMDY3MjkxOTEsMzMwLjg0NDEyMzA3NDQxNjEsMTE1LjU0NzExMzQzNjM3ODY4LDAuMDAxNjk5MDk5NzY5ODQ3ODIzNAorMTIsU2F0IDUgRmViIDExLDEwLjU3ODc2MjIyNjY1MDIyLDUuNTI1MjAwNzEwMzMwMjcxLDUuODM3NDgzNjIyMjI5MTgxLDU1MS4zMDY3NTE2MDQ1NTQzLDAuMzI2OTU2NDUwNTQzMTIxOSw0NjguMDQ1NTExOTQ5NTI1NiwwLjk3NDc4MTc2OTQzMDM0MjcsNDAuMTk1NDMxNjY4MDYzMDY1LDIyMy43NzQ1Njc5ODY4NTkyNywyMTIuOTk3Njg3NTQxMjcwNTgsMjcuMDc4NTEyMzc5MjI5MzYsNDAuNDQzNTYyNzY0NjIwMzQsNC43NzQ1NTY3NDk5NTQ3MjMzRS00LDE0LjY1NzMzMDQ4NzMzNjQ4OCw4My4xOTk3MDg5MzAzNDk5NywyNjIzNi4wMzIwOTk2MzYyNDIsMTYxNS42ODUxNzY0MzMxNjEsMC4wMTc2ODE2NDA4ODk5NTk3MjIsOS4wMDM4NzE1ODQzNDQ1MDQsNjA4LjI1MjA4MTkxMjAxMjUsMC4wMDc3OTYxOTU5ODkxODI3MzMsMC4zMDY5NDc5MzUzMDY2MDUzLDI2LjYxNzY4NDE0MTkxNjcyNiwxMDAyLjExNDUzOTkyMTMxMzMsMzI5LjAyNjA4MDI0ODIzNTY0LDAuMDA2NDQxMTYwOTAyODA1NDgzCisxMyxTdW4gNiBGZWIgMTEsMzIuMjY0ODMyOTg0MDY4OTUsMTcuMjg4ODE3NTU5NDk3MDUsMTguOTk0ODcxNzM1MDI3MTA3LDE0OTYuNjgxNTc4ODI5NjM1OCwxLjEzMTg4OTg3MzA5NTY4MDMsMTM3OC45NDI0NTYwMzY4NDg5LDMuNDA3NzY5MzY2NTMyODM1LDEzNC44NzYxMDU0NzIyMDA2Niw2NjkuNzQ0ODcwOTQ4MzQ4OCw2NTUuMDg1NTY1MDg1MzEzNCw4Ny44MjQyMDc0NjUxMTE2NCwxMzguNTc0NDMzOTc5MzMyMDcsMC4wMDE5NDM5NTM5OTk4MjExNjg4LDQ5LjE2Mzc1ODM3MTUzNDIsMjc3LjQzNTM0NTcwNjE0MzYsNzAwMzguOTY1MjI3NzI5MDYsNDg3My42MjI0MjMxNzExNTEsMC4wNjUzOTMyNTgwNjAzMjI3MSwzMC41OTA3NDk4NjY2MDU3NTUsMTgyNC4zODI3MjU5NzA4MDc4LDAuMDI4OTQ0MjcwNDgyMTE3OTE2LDEuMjE1NTcwMDIwMjkzMjg1NSw4OC44MjE0OTE0OTg5NzM1NywzMDI2LjMyMDE5MzEyNzQ3Nyw5MzIuOTkxMDI0MzczMDc1NCwwLjAyMzczNjI5OTkyNzkxNTcyCisxNCxNb24gNyBGZWIgMTEsOTcuNDM2MjYxNjIyMzE2MDQsNTMuMjQzNzUwNTcwNDIwODcsNjAuNTIzOTM3MDczMzQzMTIsNDAzMy4xMDg1Nzg5MDk1NTYsMy44MjA2OTc3MjQ2ODEzMTEsNDAyNi43MjAwNjAwNDY2NjcsMTEuNjExODQxMzU2MTU4ODYyLDQ0Mi40Mjc2NDQ0NjM4MjU3LDE5ODcuMTg2MDE2MjQ0NjUyOCwxOTkzLjgxMTg0MTMxNDMzMTMsMjc5LjEyNjU3NjYyNDAzNDksNDYzLjM0OTE1ODMxNjY3NTYsMC4wMDc1MDY0NzA0OTA3NTQxODEsMTYxLjE5NjE2NDU5NTM2NzMsOTA2LjA3MTQ1MjY1ODg1MTMsMTg1NTA1LjgyNTM4MjcyOTM1LDE0NTUxLjQ4NjMzODU3OTg0NSwwLjIzMjE3Mzk1MjQ4ODYzOTkyLDEwMS41MTcxMDIzNDY3MTkzMyw1NDE5LjEzNTI3ODIzODcxNSwwLjEwMzE5NzUzNzE1NzcwMzk0LDQuNTgwOTMzMTA3NzM2MzM2LDI4OS44NTY5ODA5MzU4MzMyMyw5MDUxLjAzMjM0MDk1MTg4LDI2MjQuMTE2NDY2MjE5OTIyLDAuMDgzODAwNDUyMjYwOTE3NTYKKzE1LFR1ZSA4IEZlYiAxMSwyOTIuODYxNjcyNDAxMzExMDcsMTYyLjUzMTE4NjI0NDEwMDY0LDE5MC41MTYxMzE2MTcyNDY4NiwxMDc1MS41OTk3MDg5OTY4MjgsMTIuNzQyNDg2MTkyNjM2MjUsMTE2OTcuNDkzNzcwMTk1NDI4LDM5LjExNjk1NDQ4Mjk5MjA3LDE0MzQuMzEyNzgzNjkyNDU4Miw1ODcxLjIzMTE3NzQwMjU2Nyw2MDM4LjQ3MjE0ODQ5NzEzMiw4NzcuMDk3NjI1NDM2MDA3MSwxNTMwLjcyNzg1NjM3NDUzNjUsMC4wMjgzOTI4OTI5NjgzMjg4MjYsNTIyLjI5MjkzNTg4OTIwMDQsMjkyNy43NDYxNTMzOTIxNjMzLDQ4MjI3MC44NjY3NDczNzksNDMxNDkuNTI5MDg4MjgzMzgsMC44MDczMjg2MjE1NzM5NjE2LDMzMi45NjkzNjI3MzEwMDcxLDE1OTk5LjQ0MDE2Mjc4NzQwNSwwLjM2MDcyNzEyNzAwMjQyNjYsMTYuODkxMDI3OTcyMzQ2MzcsOTM0Ljg0OTE2NTI0MDk2NSwyNjkyNi42NDI2NDg5Njk3MjYsNzMyNi42MDkyODcyMzgwNjMsMC4yODg4ODc0MjU1MDYwMTcwNAorMTYsV2VkIDkgRmViIDExLDg3NC4xMjU3OTE4MDkzMzU0LDQ5MS4xNjczODg4NzA4MDEzLDU5MS41MTYwMjIyNDE3Mjg1LDI3OTE5Ljg5MTAxMDg4Mjg2NCw0MS44NjM0NDEyMzc2ODU4MDUsMzM3MjcuMzY0MDY2NTYxMDQsMTI5LjgxNTM0MjA2MjA3MjIsNDU4Ni40MjAwMDg4NjkyMzQsMTcyMzQuNzA0MjA4NjQwMTksMTgxNTIuODU0OTE1NTk3ODg3LDI3MjEuMTkzMjM0NDQzNjk1NSw0OTgzLjA0MDAyMDY3NDM3NiwwLjEwNDM3NDQxNjYxNTU1MzA4LDE2NjkuMjA2NDkxNzY5Mzk0Nyw5MzMzLjcwODYxODk4MTE1NCwxMTg5NzM0Ljk4MTc3OTA2ODIsMTI2Mjk3LjQ2MjE1MjIwNTI2LDIuNzQ0NDI0MTM5NjE3OTU0NSwxMDc2Ljc3NzUwODIyMzIxNSw0NjczNy42NDUzNzU2ODYzMiwxLjIzMzI2MzM1OTg5NTk1NzMsNjAuNjEwMjYzMDI2NDk0OTQsMjk3NC40ODE2Njk3OTQ3NjM1LDc5NDMyLjY1NzM3MzI5MDg5LDIwMTYzLjkxNjc4NjA4NDQ0LDAuOTcxODY3NTgwNzEzNzU5MworMTcsVGh1IDEwIEZlYiAxMSwzNDAyLjgzNzQ0NDEyODUyMjMsMTk0MC45OTQ4MzIyNDU1NjEyLDI0MTQuNzM3MzA4ODkyODIwNyw3NTI0MS4wNzU0NzMwNzgxMywxODcuNTY2NTI4NDU1MjI5MjcsMTIzNjYwLjkyOTM3NzAwNTIsNTkxLjQ0MjM0Nzc1OTM2ODIsMTk3MjEuMDQ1MzQwMzk5MTYsNjUzMDkuMzM1MDgyNjA3NDMsNzEzMDMuNDM4MzU5NjY2NTksMTExNDguMjM4MzA5MjE5MjgzLDIxOTk1LjIyMjE5NzU0NTU0NywwLjU0NzY0Nzk0NTc4MzE0NDcsNzE3OC4yMjI4NjU5NjYzNjEsMzk3MjUuMTU2OTcxMzU5NDgsMjQ2NjcyNy42MjY1OTk5OTY0LDQ1MTQ2NS43MTE3MjU0OTM1NCwxMi44Mjg3NzEwNjE3OTAyMzEsNDcxMC42NzAyNjE3NTg4MDM1LDE3MDA5MS4yNjcyNzc0MjU2Miw1LjgyMzc1NjMyNTA5NTQzNiwzMDYuMzUzODEzNTAzNTMwMywxMjY5OS40NzYyMDU2MDU2MTMsMjk5Mzc5Ljk2NTg0ODM5NzkzLDY0ODI0LjAxNDU5NjA5MjIzLDQuNDUyMzQ3MzUxMDQxMDI1CisxOCxGcmkgMTEgRmViIDExLDEyODg5LjI2MzM0MjczMTMxMiw3NDAwLjAxMDIzMzk3OTc4Myw5NDI4Ljc2MDQ4ODQ4MTk5MiwxMzA1MzEuNzAzODAxMDE1MDYsODM5Ljc1MDE4NzkxNTAwMDQsNDI2MzcxLjc5OTI1NDU0NjMsMjcwNy4wNzk3MjQyMjgzNDkzLDg0MTUwLjE3MTIyNDQzNDY5LDIzNzgwMC40NDU5NDM3NDQxOCwyNzA5MTguMzIxMTA4OTQyOCw0NDM4MC44NDUyNDQxNjM3Myw5NjM5Ny44MzczMDg5MDI5MiwyLjg1NTI1Mzc4NDcyNzAwODUsMzA3OTIuMzU3NjE2NjQ0NDcsMTYyNDIzLjkxNDA5ODQyMjQyLDMwMjA3OTUuNDI3MjcwMDUyNSwxMjY5Njc5LjAwMzkzODI0MjgsNTkuNzU4MTA5MTQ3NzQwMjY0LDIwNDcxLjM4MDE5Njc5NzksNTI0OTg0LjA2MDI4MzYzMiwyNy40NTI5MzQ3NTY5Nzk5NjgsMTUzNy41MDI0NzAyNDg3MjM3LDUzODk0LjEyNDYzODgwNjU5LDEwMzM2NzQuNzA4NjQyNjAyMSwxNTk2MzcuNTgyNTMwMTUyMzEsMjAuMTk3NjM3ODg0MDkyNTQzCisxOSxTYXQgMTIgRmViIDExLDQ1NzcwLjMzMzMzNzE1MjczLDI1MDkzLjc0MjM2MDA4OTMxLDMxNzkxLjMwNzU4Njc0MjcwNywxNDg5OTAuNzY2NjQ5NDgwODUsNDA5NS4xNjA2NDU3MzI2MTksMTIzMjcwMi45NDc2ODk2NDMsMTM4MDQuNjM2MDk3MTUyNjk2LDM2ODUzMi41NjM5NDM5NDg5LDc3NTE3NS43Mjc1MDUzOTcsOTMxMTE0Ljk3OTAzOTY4OTUsMTYyNjY1Ljk5MzE3NjQzMTIyLDQzNjk5My4xNTI3ODcyOTY5LDE2Ljg0MTI3MDA0MjIwNzc1MywxNDAxNTIuMjk5ODQ4NjgxODQsNTc0ODY3Ljc5NTA5NDA1NjYsMzAyMDQ0MC4wODE0NDM5NTQ3LDE5ODgyNzkuNDk2NjUxMDcyLDMwOC42MDQ3MDc4MDE1NzMxLDkzNDYyLjA4MzM0MTA5NjgyLDk5Mjg5Ny45MzQyMzg2NzQ4LDE0NC4xMzE3NjM0OTI5NDQ2Myw4NjM2LjA4NDI4Mjg2OTUxNywyMzc4MDUuNTMxNDg2NDAyMTIsMjYzNDE4MC43MDEzNDA4NDksMjMzNDM0LjA2NDc1ODYzNTI0LDk5LjE2MjIyNDc4NjYyODc0CisyMCxTdW4gMTMgRmViIDExLDEwMjMwNy4xNDQ3NDY1Mzg0Nyw1NzUzOC43NTg0MTI4MTMyMSw1OTgyMy4yNTYwNjAwMzIyNSwxNDYxODIuNTAwMTczNzg2ODYsMTg0MjkuMjA3NTA1NDM5Nzg2LDIwOTIyNjQuODY2MDY1ODI2NSw2ODUyNy40MDAzNTUwMzcwMSwxMTU5NTYwLjU4NzA2NDE3MywxNTEzODIxLjE0NTg0NDg4NjgsMTg3NTM0MC4xOTkxMDY3MjkxLDM1Nzc4MC4xMDA4MzgxOTMxNSwxNDM0MjIxLjc3OTUzNDI5NzUsOTkuNzY3MTcyODU2ODA0MjcsNTIxNDM1LjIxNjQxNzM1NzEsMTA5MTEwMi43NjcyMTE4MTk4LDI3NzcyNjkuMzM4NDYyMjIzMywyMTg1NzE3LjQyMjQ0NTA5NSwxNTUwLjQwMTA4MDYyMDEsMzcwNTA1LjUzNjM5OTA0NzI0LDExNzM0NjUuMTI4OTk5MjM3LDc0MS40MTg5OTM2NjgwNTQxLDQ3NDA2Ljc0Mzk0Mzk3MjI5NSw4MDAwMzguODM3Mjc4NTg3MiwzNzAyMjQ0LjM0NzkxODQ0NSwyNTE2ODAuNjc2MjQ0OTEyNCw0MzIuNjQ2MTc0Nzk1NzM2NDQKKzIxLE1vbiAxNCBGZWIgMTEsMTMyMjMzLjY2NTM0MDY2NSw5Mjg2Mi45NDQ3NTUzMjg3NSw3MDcxNy4xNDQ1NTIxMjE3OCwxMzMwMzcuNzY4MTM0OTcyNjYsNjQxODMuNzYyOTQwNjc2Mzk1LDIzOTAxMzEuNzA0NDYxNTgwNiwzMTQ0OTUuNjUzNDU2NTE0MSwxODk1NzcyLjg0NDY5MTE0NywxODI3NzM3LjU4MTkwMzEwODQsMjI4MzcwNS40MzYxMDkxOTU1LDQ1Njk1MS40NTIwMzU2MjczLDI0MTY1NjYuNTIyNTk5MzMyNSw2MDEuNjM1MjczMDg5NTAwMSwxMTE2Njc1LjYxOTQxMjQxNSwxMjg3NjM3Ljk3NTYxNzQ5NCwyNDMzODA5LjkwNDY1MTI1MzUsMjEwNzQ3NS41OTg0MzkxMzY1LDc2MDEuMTkyMzk0MzI0MTU0LDEwMzcwMDkuOTk1NDQzNjczLDExNjgzMjQuNTI5MTg2MzI3NSwzNzc2LjM3ODM5NzIxNjczMDMsMjQwOTI0LjAwNzgzMTk1Nzk1LDE0NDgzMDEuMDk5MDQ3NjM2NCwzOTMyNDQwLjI1MDE3NDM3NjYsMjQwNDU0LjA2MzU1NzE0Njg3LDEzNzAuNzc4OTQ0NDkxNDE1CisyMixUdWUgMTUgRmViIDExLDEzNzA5NS4yNjI2NDIyMTA1LDExNDI4MC42Mzc0NTk3NDA0OCw3MDcxMy44NTk2NDUzMjEsMTE2MDAwLjA2MjE2NjIwOTY3LDEyMjEzMS4yOTM0NzUxMjQ2NiwyMzU0MzkyLjkxNzIzOTgzODMsMTA5MjI0My45MDAwMjExMTc5LDIxMzgyMDYuNTAzMDk4OTM2LDE4NDQwNDguNTE0NjgzMzA2NSwyMzEyMjU3LjQxOTgyNDA2OSw0NzE1ODIuMDAyODE0NzQzMSwyNzUzNTQyLjI5MzExNDMwMSwzNDAxLjQyOTg4ODM1NTg0MzYsMTQwNzUzNS4yNzYwMTM1ODEzLDEyODY2NTIuMTEzNDMwMTM1MiwyMDcwMDg5LjI0MDA5NDU5NCwxOTAzMzEwLjg1MTcxOTkwMTcsMzQ3MTEuMzE5NDcxNzkzNDksMTU5MjA3NC40OTgxMjkyNjgyLDEwNzQ0OTcuODcxNTI1MTQ1MSwxODM3Ny4xNjY5Mzg4MTExOSw4NjM1NDEuODUzMTk4MTQ2OSwxNjk3OTk2Ljg4OTAxNzU2ODQsMzc0MTk3My44NDk4NjgxNzY1LDIxNTk5Ni45NjIxMzgwODc3LDI1MjYuMTk3Mzk1MzkzNTM0CisyMyxXZWQgMTYgRmViIDExLDEyODg4MS4yMDE5NjE3Mjg1NCwxMTc3NjQuNTY0ODc3NDM4NTYsNjUyMDEuOTQzNTg3NzEwMzYsOTgzMjMuNzIzMTgxMDA0MjYsMTQ2NDMyLjYyODg5MTQ0MDcsMjE1Mjc5My44NjI5MTk2NDI2LDIxMjEzNzUuNjgxNTU3NDk5MywyMDk0NzIzLjE2MjI2MDU4MzgsMTcwODYzOC43NTIyNzg1ODk0LDIxNDY1NzYuOTA2MzYwMTQxLDQ0MjI2NC4zMjMxMzkwNzM5NywyNzEwMTMxLjE2NTUxNDc4NSwxNzM1OC45MzIzMjQ4ODQ3OTQsMTQ0NTY5Ny41MjQzNDUzODIzLDExODU4ODkuNjYxNTY0OTU4NSwxNzI0NTA1LjAxMDY1MDg1MTgsMTY1MTQyMC4wNTIwMzI0ODM1LDEzODEzNC45NDQxOTgxMjM2NywxNzYwNjk5LjQ4Mjc2NDYyMTcsOTQzMTU5LjQ0Mjk4ODU2OTMsODQ1MTkuMzE3NTEzMDAyNzgsMTYxMDQyMS4zMDYwNzMyNTA3LDE2OTI1MTQuODc3NTQ1MjU5MiwzMzUzNzEyLjExMzgwMzE0NywxODY3NTkuOTAwNzUzNjA4MywzMDUwLjM4MDM1NDE2MzMxODMKKzI0LFRodSAxNyBGZWIgMTEsMTE1MzAxLjI5NDAxOTc0NjU4LDExMTc1NC4wMjMwMTc2NTIyMyw1NzU0Ny4zMzc3MzM1Njk0LDgxMzc3Ljg3NTY1MDc0MzA0LDE1MDQ3My43NDY1MTI3MTEwOCwxODg4NzI4LjEyMTUxMTQ5MzMsMjY3NTY4Mi4wNjkxOTMwODA1LDE5MjYwODUuMzU2NjEyNzQ1LDE1MTMyNzEuNzE5MjU3MzU1MiwxOTAzNjk4LjQ2NTExODIwMzgsMzk1MDA5Ljg1ODkxNDk2MjA0LDI0OTkzODIuOTU4MzMyOTM4LDYwMDUxLjgyMzk1NzE4MDc2LDEzNjg3NjguODU3NzIxNjYyMSwxMDQ2MzcwLjM2MTYzODExOCwxNDA2ODcyLjE1MzYzNjMzMjYsMTM5MjY5NC42MzUzMDczMDU3LDM1NzkwMy4xMDc0MTg3ODUxLDE3Mzc3MzAuOTYwMzI1MzUxLDgwMjYyMC4wNDE2NDk1Mjk4LDI3NzM1NS4yNjY5NDE4NTAzLDE5ODUzMTYuNTg4NjA5Mjc0NSwxNTczNDE4LjUyOTg0NjQyMjgsMjg5OTQ1MS42NTU3ODcxOTYsMTU3MDY4LjY5MzE0OTgxNjU0LDMxNDUuNjUyMTU5NDQ0OTU2NAorMjUsRnJpIDE4IEZlYiAxMSw5ODY2NC42NTkyMjc5MTMzMiw5OTQ0Mi43MTk3NTY0MDI3Miw0ODc3Ny4yODE3MzgyNTE0Niw2NTczMy42NzY4NTM1NzQ0MiwxNDAzNjYuNTYyMjQxMzA3MTcsMTU5NDA3MC44MjQwODQyMDcyLDI3NTM1NzAuMzc2MDI2ODYzNywxNjc5MTcyLjQ5ODI2NzY0NiwxMjg1ODA0Ljc2MzY1OTU1MjQsMTYxOTA4MS40MTA3OTY3NTYsMzM3NjI1LjA5MDkzNzgyODIsMjE4MzI4My40NzM4NDMxNTgsMTYxOTAzLjQ0NjEyMzI4NzQzLDEyMTYxNzYuMzQzNTE1ODYxMyw4ODY3MjQuODMzMTQ1MzY4NiwxMTIzNDU1Ljk3NTQwMDI5NzcsMTE0MTQ1MC4wMjM3NzkwMDAyLDYyNDk1OC4xNTI3NTA3OTg1LDE1ODM4NTAuODYzNjIwNjMzNyw2NjIzNjMuNDE0NDQ1NzEyNSw3MTMwOTguMzIzMzkwNDgyMiwyMDIzNjYzLjI5MDAwNjI0MDgsMTM4MTY2Mi44MzkzNjkyMzk1LDI0MjExMjcuMTMyNjMxODYzNSwxMjg0NjMuNDc1MzMwMjQ4MjQsMjk0MC4xMzc3MTYwOTg1Nzc2CisyNixTYXQgMTkgRmViIDExLDgxODkzLjE5NjY4ODYwMTgzLDg0MTEwLjYxMzM2NDUyNDQxLDQwMjk0Ljg4NzM2MzM3MTgzLDUyOTgzLjM2MDIyNzcxNDExLDEyMTI4NC45MDM1MjU5NjEyNywxMzE0MDU5LjQ4MzU5Nzc2NDMsMjQ3NzAxNy41NzIxNzAyNjg3LDE0MDY0NTAuMzU5NjMzMzAzMiwxMDYzNTA2LjQ3Njg0ODAxNiwxMzM5NzkzLjEzMzY1MjAxNjMsMjgwMDc0LjEzMDQ4Nzc0ODY1LDE4MzA0MjEuOTgyMjYzMjY2LDM5NzU1NC41MTk3ODQ5OTg3LDEwMjc4OTAuMjQyNDUwNjAxNyw3MzI0NDUuMDIwNjY1NDg2Nyw5MDAxNDcuNzgxNjgxNDYwMSw5MjY5NzAuNzQxMjQ0Njg1OCw2NTA3MTYuMTY1NTIyMDYxMywxMzU0NDY2LjczOTYxODMyMjYsNTM5ODE1LjMwOTk3MzM0NjUsMTQ1Mjc4Ny43NDQzMDgzNTU3LDE4MTM3MzAuNjA1NDE4MDkzMywxMTYxMjc1LjgzMTE4NDE3MjUsMTk4NTA5Mi4zMTA1Mjk4MzM0LDEwNDIxMy42NTQ2MjAxMTYzOSwyNTQyLjY1NjE1NDMyMjA5NQorMjcsU3VuIDIwIEZlYiAxMSw2NjI3NC44MzQzNDA4Mjc2LDY5MjY5LjE1NzAyMDQxODE2LDMyNDY0Ljk0MDI4Mjk0NTQ1Miw0MTY5Mi43NjQyMzg3NjEzMSwxMDE3OTcuNzc1NDA5MDMxNTksMTA1NjU4OC40OTIxOTQwMTM3LDIxNTA5NTEuMzUwNzgyMzQ3NCwxMTQ3ODgwLjU4MTg3NTQ4NTgsODU3ODQ1LjQ5NzM5MjY4NjIsMTA4MTE4MC42MzA0Mzk3NTg4LDIyNjUzNy41OTk5NDAxNjcxNiwxNDk1MjE1LjY4ODc1MjU0Nyw1Nzg1NzIuODI1MzI3MDc4NSw4NDU4OTQuODgyOTcyMTYyNyw1OTAwNTguMDE4MTY3NTI5Myw3MDQyMzMuNjYxMTk4NzI0Myw3MzQ3MjcuNDQ5MDIyOTAyOCw2Mjc2ODcuMTU3MDA2MDA4NiwxMTI2NTEyLjY3Mzg3OTA2Miw0MjkzMzAuNzAxOTc4MDM2OCwxODY3OTMxLjE3MDI5MDgyNSwxNTcwMjE3LjEwNzUyMTM5NjEsOTUwODExLjczNTUxNzYxNTIsMTU4Nzk0OC45MzE4NzY4MDYsODI1MTYuNTgyNDk3NTIxOTEsMjEzNS43NTYxNzg1OTU4NTMzCisyOCxNb24gMjEgRmViIDExLDUzMTAyLjI4NzQyNDExNTU2LDU2MDc2LjI0ODA2MDM1OTc2NSwyNTk0NC4xNDIxNDI2OTU1MSwzMjg2OC45NjcyODM2MzMwMiw4MzMwMi44ODUzMjczOTIzNiw4NDMzNzguMzUzODQzMjM1OSwxNzkzNjc1LjA3ODU2MDM4OCw5MjQyODkuNDIzMjAyMzk1Miw2ODYwMTIuNTgzMjE1Nzk1OSw4NjQ4MzIuMjEwNTUzNDk4MiwxODE0NTMuNzQ2OTY4MzcyNDMsMTIwNDU4Mi44ODM2NDgxMzMsNTg4NzA0Ljg4MjgzOTIzNjQsNjg0NDIxLjA4NTEwNjkzMTMsNDcxNTA5LjAxNjkyOTI5MDYsNTUzNDIyLjQzMjg1MTU1MzUsNTgxNTYzLjg2NzEzNTU3ODksNTUxODY0LjE3MDk4MjMwNjEsOTE3MDYwLjA1NzU4NDEwNjksMzQwNTA3LjEzNDA3NTgwMzgsMTgzMzYzNS45NTEzMDg1MTEsMTMwNzI2MC4wMjY0MDIzODQ3LDc2NzAzNi4yMjI3NDg1NDU1LDEyNjM2NzguMTI1NDE4Mzk5Nyw2NTI3OC4zMDAwOTE4MjAwOSwxNzQ4LjUwMTAxMTQ5NDc4OAorMjksVHVlIDIyIEZlYiAxMSw0MjEzNC44NjY5ODMwNjk3MSw0NDgzMC44MjEzNzEzMzAwMiwyMDU0Ni45NTI4MzcwNTQ4NiwyNTc5MS41MTM3MDkzODUwNSw2NzEwOC4wMzg0MDIzNTI4LDY2NzM4MC43OTA2OTE3NDE1LDE0NjQzODIuNjE0OTU5OTE2Myw3MzU5OTcuOTUyMzIyNDA5MSw1NDM1NzAuMjkxNjkxMTE4Niw2ODUzODEuNjQzMjg5MzE2NCwxNDM5NDMuNTY0MjY3OTU3MzgsOTU5NTQyLjk2MTEyNDYyODUsNTQxOTYxLjg2NDY3MzgzMzQsNTQ2ODk1LjU5MDg5ODM1MDEsMzczMzk5LjE5MTEwODU4MDEsNDMzMzk0LjMzNzkzOTk3MTY1LDQ1NzQ5NS40OTUwMzMyNTEzNSw0NjY5MDAuNjk1MDQ5MzUxOSw3MzYwMjQuOTkwMjQyMDI0NCwyNjgyMzIuMDM4Mzc1NDIyNSwxNjU2MjU1LjU2MDA2MTg1NiwxMDY2MDU0LjEyMzc2MzU1LDYxMTYwMi44MzAwNjQyOTg2LDk5NzgwNy45Mjk5MTU2OTA4LDUxMzM0LjM4Mjc1OTU3Mjc1LDE0MDkuMDQwMDY0MjUxNTg3CiszMCxXZWQgMjMgRmViIDExLDMzMjE3Ljg4ODY0MTQyMTU0NSwzNTUzNC42MDgyNjEzMDE4MSwxNjE3Ny42MDU1MDk2MzgxOSwyMDE5NS4wODA5NjIwMjM5NTIsNTM0NzIuODExOTEzNzQ4NCw1MjUxODAuMjExNTA3MzUwNywxMTc3OTY5Ljg5NjMwMDc2MzEsNTgxNjU3LjAyMjk2ODQyODksNDI4MTI1LjgwNTE3NzA4NDgsNTM5ODgwLjI1MjkxNjE4NzQsMTEzNDYxLjc0MTcxNjg0OTcyLDc1ODUxNi42MzI3NzM2MjQ3LDQ3MTQ3MC41NDI5MzA1MzY5LDQzMzI2OS4xODg2NzA0MTIwNiwyOTM5ODAuMzU1MjY2NTEyNywzMzkwNDQuMzIwOTA4NDMwMDMsMzU4NjQ4Ljk1MTU3NTU3MjcsMzg0OTcwLjI5Mjg2NjIxMjQzLDU4NDkyOC4zMTYzMTYzNjQ0LDIxMDQ1NC40NjMzODM3NzQ0LDE0MjQ0MjAuNTkwNTkyNDk5MSw4NTY4NDUuMjMxNDM2MzA0LDQ4MzgwNC45OTY0OTI5Mjg5NCw3ODQwNjAuNjM3Nzc2ODM0Nyw0MDIzNy4wMzY4MjQ2NDM5NTQsMTEyMy4wMjk0NDQ3MTYwNzc3CiszMSxUaHUgMjQgRmViIDExLDI2MDk3LjM4NTM2NDcyNTg3MywyODAyMi4yMjEzMzY5MzM1NzMsMTI2OTkuNDU4NzEwNDkwNzAyLDE1ODE3LjYyNTMzNjU5ODc0LDQyMzEwLjc4ODgyMTY3NjcsNDEyMTQ3LjYwMjMwMDYxOTUsOTM4Mjk0LjI2MDAzMDA3NzgsNDU3Njc5LjQzNDkzNjI2OTUsMzM2MTUyLjYzMDgzOTQxOTksNDIzOTI0LjIwMTYzNjA3NTksODkxMjkuOTMxMjQ0NTU3OTMsNTk2OTM5Ljk5NjE4NjUxNzgsMzk2MDg4LjczOTg2ODgzMzE2LDM0MTQ3Ni4wOTQ5MjgzNzQzLDIzMDc2NC4wMzI0Njc4NDE4LDI2NTU2Ni41MDgzMjMzNjczNCwyODA4OTAuMjI0Nzk2MTQ1MSwzMTIwMDkuMzQ4NTcwNDU1Nyw0NjE5ODguNjE1NzYxOTA3NywxNjQ4ODguMjMxOTkwNjM2MjcsMTE4NzgwOS45MTg4MTI2NTE0LDY4MjExMC44NTMwNTk0NjY3LDM4MDkyMi42MzE0ODA5OTE2Nyw2MTQ3NzguOTAyODMxODE3MywzMTUxNC4yODM0MTQ0MDk4OSw4ODguNzgxOTE0NTU5MzU4OAorMzIsRnJpIDI1IEZlYiAxMSwyMDQ4My4xNDg0OTUzNjg2NzgsMjIwNDcuNzk3NzY0NjU3NjY2LDk5NjMuMzY1OTUxNTgwODEyLDEyNDE4LjQ5ODUyNDcyMjM0MywzMzM1MC42MTMxMDcxMTI2LDMyMzMyNS4xMDUwNzM3MzQ1NCw3NDI5MjUuODM5NzQzOTc5MiwzNTk1MDMuNjMzMjUxNzQ1NTQsMjYzNzU3Ljg5NTM5NDM0ODUsMzMyNjMwLjQwMjUyMzc4MTA2LDY5OTUwLjMzMDAxNDYxNjQ3LDQ2ODkzMy41NDMyMjQ4MzUyLDMyNTQ1Ny40OTA5MDMzNjMsMjY4NDg2LjExMjUwNDgwOTUsMTgxMDM2LjY1MjA4NjUzMSwyMDg2ODMuMjYwMDA2OTUzMjYsMjIwMjUxLjEyMjEyNzA1NDYsMjUwMDczLjExNzY1NjU3NTAyLDM2MzcyNy43MTk0ODg4MDM5LDEyOTI4OC4wODg2NDUyMTIyNiw5NzEwNzQuMDY3Mjg2NzcwMyw1Mzk4NjQuMDU5MzY0ODAyMSwyOTkzMjEuMzI2Nzk3MDg4OTYsNDgyMTEyLjQxMTUyMTI0ODA1LDI0NzE2LjEzMzUwNDcwMDQxOCw3MDAuNjc5NzU5ODE2NjA2MQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Ob25aZXJvTW9ydGFsaXR5UmF0ZV9GRF9SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vSW5jaWRlbmNlXzAuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Ob25aZXJvTW9ydGFsaXR5UmF0ZV9GRF9SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vSW5jaWRlbmNlXzAuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJjMjQ0MDEKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L05vblplcm9Nb3J0YWxpdHlSYXRlX0ZEX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9JbmNpZGVuY2VfMC5jc3YKQEAgLTAsMCArMSBAQAoraXRlcmF0aW9uLHRpbWUsCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L05vblplcm9Nb3J0YWxpdHlSYXRlX0ZEX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9JbmNpZGVuY2VfMS5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L05vblplcm9Nb3J0YWxpdHlSYXRlX0ZEX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9JbmNpZGVuY2VfMS5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmMyNDQwMQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvTm9uWmVyb01vcnRhbGl0eVJhdGVfRkRfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL0luY2lkZW5jZV8xLmNzdgpAQCAtMCwwICsxIEBACitpdGVyYXRpb24sdGltZSwKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvTm9uWmVyb01vcnRhbGl0eVJhdGVfRkRfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL0luY2lkZW5jZV8yLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvTm9uWmVyb01vcnRhbGl0eVJhdGVfRkRfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL0luY2lkZW5jZV8yLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYjY0NGYxCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Ob25aZXJvTW9ydGFsaXR5UmF0ZV9GRF9SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vSW5jaWRlbmNlXzIuY3N2CkBAIC0wLDAgKzEsMzMgQEAKK2l0ZXJhdGlvbix0aW1lLEVHLUZSRy1HMjEwMDAxLEVHLUZSRy1HMjEwMDAyLEVHLUZSRy1HMjEwMDAzLEVHLUZSRy1HMjEwMDA0LEVHLUZSRy1HMjEwMDA1LEVHLUxPRS1HMjQwMDAxLEVHLUxPRS1HMjQwMDAyLEVHLUxPRS1HMjQwMDAzLEVHLUxPRS1HMjQwMDA0LEVHLUxPRS1HMjQwMDA1LEVHLUxPRS1HMjQwMDA2LEVHLUxPRS1HMjQwMDA3LEVHLUxPRS1HMjQwMDA4LEVHLUxPRS1HMjQwMDA5LEVHLVVQRS1HMjkwMDAxLEVHLVVQRS1HMjkwMDAyLEVHLVVQRS1HMjkwMDAzLEVHLVVQRS1HMjkwMDA0LEVHLVVQRS1HMjkwMDA1LEVHLVVQRS1HMjkwMDA2LEVHLVVQRS1HMjkwMDA3LEVHLVVQRS1HMjkwMDA4LEVHLVVSRy1HMzAwMDAxLEVHLVVSRy1HMzAwMDAyLEVHLVVSRy1HMzAwMDAzLEVHLVVSRy1HMzAwMDA0CisxLFR1ZSAyNSBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMixXZWQgMjYgSmFuIDExLDYuOTYwMjM3NzczNDkxNDhFLTQsMC4wLDAuMCwwLjExNTgwNDIzNzQ4Njk2MDI1LDAuMCwwLjA0MTgzNjg1NDM4MTY4MTc0LDAuMCwwLjAsMC4wMTc5NjY2NDI1Nzc0ODU1NSwwLjAxMjg0MDc4NjY4MDMwNTYyOCwwLjAsMC4wLDAuMCwwLjAsNi44MTQ2NDg4MDYxNzYxNjNFLTQsMTAuMDQ1ODIzODQ3NzIxMDk1LDAuMTE3MjIzMTMzMTI3Nzg1ODYsMC4wLDAuMCwwLjA0NjU2ODA0NDkwNzQyNTk4NCwwLjAsMC4wLDAuMCwwLjA3MjE4NzU0NTgyNzY1MTI5LDAuMDQyNjAzNzk2NTIyOTkyMjEsMC4wCiszLFRodSAyNyBKYW4gMTEsNS4yMTk5MzQ3MDk2MjQyOTNFLTQsMC4wLDAuMCwwLjA4Njg0OTA5MzYwNDM0NTk5LDAuMCwwLjAzMTM3NjE3NjI0NTE0NzE4NiwwLjAsMC4wLDAuMDEzNDc0MzUzMDQwNzM4MDA1LDAuMDA5NjMwMTQwNTU4MjI4NjI5LDAuMCwwLjAsMC4wLDAuMCw1LjExMDc0ODA5MDY4NzczMkUtNCw3LjUzNDAwNDU3OTczOTk1MTUsMC4wODc5MTMyNDQ4MzY3NDc4LDAuMCwwLjAsMC4wMzQ5MjQ0MDMxNjIyNDUzMSwwLjAsMC4wLDAuMCwwLjA1NDEzODEzMjM0NjY4Mjk1LDAuMDMxOTUxMzUzNzQ3MTU1OTM2LDAuMAorNCxGcmkgMjggSmFuIDExLDAuMDA2NTkxNjM0ODExMDEwMDY0LDAuMDAxOTk0NTgyOTMwMjQ5ODM0LDAuMDAxNDMyMjAyNDcyOTEzNjgwNSwwLjc1MDk2ODM0OTAxNjY4MDcsNS4xOTE3MTc2NDQxMzg4MzA2RS01LDAuMzYxNzk4NjU4NjAyNjI4OTQsMS40NzI5MTg4MDIzNTEzNjc2RS00LDAuMDA4MDMyOTMzMTU1ODk5MzM4LDAuMTU5NDA5Njg5NzYxODY1NywwLjEyNTE1NDgzNTc3NjA1MzYsMC4wMDY4ODg1MzIwNTMzMTk5MDgsMC4wMDY5MzAxNTI0Mjg4OTU4MjEsMC4wLDAuMDAyOTI2NzQxNjk3NDgwMTEyLDAuMDIwNDA0MTk4NDIwNDE3NDUzLDQ1Ljc3NDU0NDU1Njg4NzUyLDEuMDc3NTE5MzgxODE0NzcwOCw0LjM0OTM2MzM5NTE1ODk4NEUtOCwwLjAwMTY1NDk3NjEzODY3NDE5MSwwLjQyMTEzMjQ4NDA0ODUzMDE1LDQuMzU0MTc5MjIyNjQ1MzEyRS04LDQuMjA0Nzc1MDc2ODkyMzEyRS04LDAuMDA1NTQwNTkxNjU4OTcyNDEzLDAuNjY0OTEwNzk3MjU0NDQyOSwwLjMyNzUyMTQ5MDU0NDQ2ODE2LDAuMAorNSxTYXQgMjkgSmFuIDExLDAuMDEzMzEzMjcxMTIxMjQxNzQ5LDAuMDA0MTg4NDE0NjUzMjMxODY4LDAuMDAzMDA3NDc0Njk5NjQwMjIxNiwxLjQ4OTAyNDU3NTUwNzU1MDQsMS4wOTAyMDYxNjE0NDQ4OTA1RS00LDAuNzI3OTczNjk5NjU1NTE1OCwzLjA5Mjk3NDgyNTU3NjkwMzZFLTQsMC4wMTY4NjgzMTYxMTE1Mzk1MiwwLjMyMTEwMjA3NTcwMzYzMzM2LDAuMjUzMDYyMzkxMDU4NzUxOSwwLjAxNDQ2NTE5MzY5OTA2MjkwMywwLjAxNDU1MjU5MjQwMzY3MDgyLDAuMCwwLjAwNjE0NTg1MDIzMzU0OTg2OSwwLjA0MjMyOTI1ODMwODIxMjQ2LDg4LjQ5MzY0NTAwMjkxODU4LDIuMTczNjczMTE3ODkwNTYzLDkuMTMzMjA2NDM5MDcwNzkzRS04LDAuMDAzNDc1Mjc2MDg2MTcwMzUzNiwwLjg0ODk3NjE2NDI2NjQ4MjEsOS4xNDMzMTkxNzExMjE5N0UtOCw4LjgyOTU4NjE1MjczNzI3NEUtOCwwLjAxMTYzNDY2MDUzNDQ1MzI4MiwxLjM0MTQzMjk1NzQ0NjIwNSwwLjY1NTQxMjU4MjAyODYwNjEsMC4wCis2LFN1biAzMCBKYW4gMTEsMC4wNTk5Mzk0OTMzOTYzMDQ2MjQsMC4wMjQ3MjkxMDMyODEzNTczOTUsMC4wMjA5MTUwMzUwMTUyMDE1NSw1LjIzMjYxMjUwOTg2MDgzODUsOC44ODk5NzU2OTM4NzIwMzlFLTQsMy4wNjY2NzcxMjcxMjU0NTU0LDAuMDAyNTU4MDIzMzE2MzYxMDczLDAuMTI2MTQ0MzE2ODYyODU1MSwxLjM4MzQzMDE5NzgxNjYzMTIsMS4xNjE2NTM2NzYyNTcxNzM2LDAuMDk5MDc5NjIxNTAwMDQyMjYsMC4xMTUyNzcyODc0NDc2Njc0OSw0LjI0ODg0OTU2NTY4Njk5MzZFLTcsMC4wNDYwMDQyNjg3NTY5NDQzNTUsMC4yODEyMjc4MTg0NTE4NTQ4LDI4MS45MDkxMDQ2MDUyOTUzNCw5LjU4MDYwMjQ2MDkxNjg2NSwyLjQ3MjQ0ODgwNjAwODExMjVFLTUsMC4wMjY3NzM2MzkzMzE3NDI1NTIsMy42OTgxMDk2MjY5MzY0NzksMS4wOTQ4NjIwNDAxMDI3NTQ3RS01LDMuMDczMjE4NjcyNjQzODIyN0UtNCwwLjA4NTY3MDUwMjM1ODk3MTE1LDUuOTIxMTkxNzMyNTE2MzM0LDIuNTQ5NTI4OTE5NDYzMDY1LDguNjk2OTY4NjA0NDAyNTgzRS02Cis3LE1vbiAzMSBKYW4gMTEsMC4xNjQ1NzE0Nzg1MTMyMDQ3MiwwLjA3MTkyMzY5MTYzNTc3ODk4LDAuMDYyNTQwNDM4NjQxNTExNiwxMy4zNDkyNDI5MTk3MjQ2NTQsMC4wMDI3MTg0MjQ0MzIzNzQ2MjIsOC4yNzMzNDYwNjc4OTQyMzgsMC4wMDc4MzYxMjk0MzUzOTYxNzYsMC4zODEyNTk4MzU0ODI4OTU0NCwzLjc1NTEzMDYxODYzMjY3NCwzLjIwNDk4MzUzODg2MTE0NTQsMC4yOTU1NzIzOTA4MDM0MzgsMC4zNTExNzIyMDc0ODMzOTc5NSwxLjQ2NTc3ODc0NDQ2MTM3MTZFLTYsMC4xMzkwNjI3NzQ1MzQ4NTE1MiwwLjgzNTIyNjc5MTE3MjI4MSw2OTQuNjIxMjgyMjc1MDI3LDI2LjE2MTU2NTY3NTg4NDY2Myw4LjUwMDMyMzI3NTMxOTQ3NEUtNSwwLjA4MTI1NjM4NTQ4MTc0NzE4LDEwLjA2NzI0NjQxMTQ2NTA1MywzLjc0Nzg1NzczNTMwOTA2MUUtNSwwLjAwMTA1OTkyNDQzNTY5NzQ0NzgsMC4yNTgzNjA1MDc1Nzk5NTE0LDE2LjE3NTExNDc1NzgxMzExNiw2LjcyMTU1NDU3OTk3MzkxNSwzLjAwMDMwMTkyODg3NDMxNjdFLTUKKzgsVHVlIDEgRmViIDExLDAuNTY1ODEwNjI3MjQwOTc4NywwLjI2OTgwMTkwMzY2NTQwNjM1LDAuMjU1NDk3NzE0NTg3MTQ0LDM4Ljc5MzQ2NTQ2MzAyNzgyLDAuMDEyMzQxOTUyNzE5NzExODE2LDI3LjEwNDYxMjUwODc5NzY5MywwLjAzNjA0NjU5Nzg0MTcxNTk4LDEuNjM2OTU0NTc2ODAwNTMwMiwxMi41MzMxOTE3OTcxMjg2MTIsMTEuMTY0MTU1MTI3MjMzMTY0LDEuMTk3Mzk0NjA5MjA1Nzg3LDEuNTY1MTU4MjU1OTc2NjM0NiwxLjEyMDAwOTkxNDM0NzI4NTJFLTUsMC41OTcxMzM1MjA2NjE1MTY2LDMuNDc4NDAyNTc5MTk2OTEzLDE5MzkuMDcwOTc0Mjk1ODUyMiw4OC41ODg5NTU3MzA0OTY3Niw1LjIzMzc5MjcwMjI2ODgzN0UtNCwwLjM1NjExODM1ODU0MjIwMjIsMzMuODA0OTc4ODgzODk3NjgsMi4yOTk0MTAxNjY2MzIwNDE4RS00LDAuMDA3NjYyNzA4NTE3MTQyNTY2NSwxLjA5ODU5OTczNjAxNDUzMDMsNTQuODM0MDM1NzIxNTM2OTYsMjAuODQ1MzE2NDgwMjMzMTE2LDEuODkxMzY3NDY1MzE3MDgxRS00Cis5LFdlZCAyIEZlYiAxMSwxLjY4NDg0Mzg3ODU2MTk5OTcsMC44Mzc4Mjc4MTcyNzI3NjI5LDAuODI2MTI1NTQ0Mjk5NjYyOSwxMDQuMjQyNzEwODIwODIxNTEsMC4wNDE3NTExMzcyMzc5MjIzMyw3OC41MTEzMjY4MDcwNzQ5NCwwLjEyMjU4NTI5OTUzMjQ2NTQ3LDUuNDExMDc3Nzc0NTQ4NDAyLDM2LjcwNDY4NTQwNzg5MTIyLDMzLjQ4MjkzNzMwNzk2MDUyLDMuODU2ODc5ODQ3NDU2MTg4LDUuMjU1MzI3Nzg1MDM5ODI1NSw0LjQwNzk3OTY3NTM4NjQ4NDZFLTUsMS45NzM5MzQwOTI3OTMzMDM4LDExLjM1OTMzMDI2Njg5ODc3Myw1MDg0LjcxNDg4NjQxMTQ1NiwyNjEuNTU2NDUxNjA2MTU2MjYsMC4wMDE5NTEyMzcyNTI1MzE4ODA4LDEuMTg3NDg3ODQ2MDg0NTU4OCw5OS4zMzM5NjE5NjUwOTYwNCw4LjU2NTkxODM4MzE4NDQ3NkUtNCwwLjAyOTc4MTI1MDExMDE4MDk0NiwzLjYxNjQwNjcwMjIzMTcwMiwxNjIuMDAwOTM1NDM4MjM1MzMsNTguNDA0NzIzMTM0NzI0MzgsNy4wOTcxMjMzNDQzMjMzOTFFLTQKKzEwLFRodSAzIEZlYiAxMSw1LjMxMjE1NTUzMjM5Mzk5OCwyLjc0OTQyMTk2MTc2ODM5NywyLjg1ODg4MDI5Mjk2MTIyMDcsMjg3Ljg4MTc0MDg1ODM5NDUsMC4xNTYxMDg5OTAyMzkzNzI4LDIzNy45NzcyODAzNzU5NjkxLDAuNDYzNjEzNTAxODk5ODkwNSwxOS40NDE1NDU5NjkwOTE3MzgsMTEzLjE0NTI4MzI2OTgyNjcyLDEwNi42Mjc0NjUwMDcwMzU1NSwxMy4yODEwMDcxMjQ3ODIxOTIsMTkuMzkyNzE2MTEzNDQxNjU0LDIuMTIwNTI3NzQwODYxMzkwNkUtNCw3LjA5MDI4NjA5Mjc0NjU2LDQwLjM0Nzk3ODM2NTA3NDAyLDEzNzQ4LjM0MjI3ODg4Mzc2LDgxNC41NjA3MDY1MDEzNDYyLDAuMDA4MTg3NzYwMzU1MTk2OTYsNC4zMzI4MzU3MjQ5MTE4MDgsMzA3LjI5MDQ0MTQ1MTMzNTcsMC4wMDM2MDU0NDYzNjc5Njk4MjQzLDAuMTM3ODkwOTk5MTgxODgzMTMsMTIuOTAzNTA5NTMyNjE5MDM3LDUwNS4wMjc4OTA0NDA4NTM5LDE2OS40OTczNjcwNjUwMDY5LDAuMDAyOTgzNTE2MzYwMTQ3NjY2OAorMTEsRnJpIDQgRmViIDExLDE2LjAxODE3MDk4NjYzNTk4Myw4LjUxMzU0MDc4MDYyOTM3OSw5LjE5NDgxNzEyMDc1NTE3Miw3NzcuOTY3NDY1OTY5NTA4OCwwLjUzMDIxNTAyNDIxNDg5ODIsNjk1LjE0MjgxNzk1MjI2OTMsMS41ODcxMjE4Nzg5NTYzNDksNjQuMjQ3NDQyNTA2MjQzMzIsMzM1LjE4OTg3NzYwNTY1OTEsMzI0LjAyMTc1MjE4NTQ3MDA2LDQyLjU2ODgyNDE0NzA2MTMyLDY1LjI4MDU3ODkyNDIxMDQ1LDguMzEwMTI3MjgyODk0NjE3RS00LDIzLjQyNTM1ODMwMjExNTI1MywxMzIuNDM2MTMwMzY3MTUyODgsMzY1NTguNDUxNzY3NDE0MjEsMjQzMS45NDQ0NzU0MTcwMjksMC4wMjk3MDk1NzcxNTQyMzI5MDUsMTQuNDc0MzU3NTU2OTM4NTc4LDkxMi41OTA1NjczODY0NTEsMC4wMTMxMTE5OTM2OTcyMDYyNzYsMC41Mjk0MTg0MTQyODAzMzk4LDQyLjQzMzQyODQwNTU4Mjc4LDE1MDkuMTg4OTg4NTc5MTU3LDQ3Ny41OTcxMzUzMDcyNzM1NiwwLjAxMDgyNjM1Njg4MTk3NDY5OQorMTIsU2F0IDUgRmViIDExLDQ4Ljg1MjA3Nzk3NTEyNjY3NiwyNi41NDI0ODA1ODUzNDk1MzQsMjkuNzc5MzAwOTY5MTc4MDU2LDIxMDguNzk2ODY0OTI4MDc2NSwxLjgzMTUzNDI5MDMwMTU4ODUsMjA0NS44MDc5NjUyNDUwMjQ0LDUuNTQwODA5OTkxMzk5MTMsMjE0Ljg2NjE3MzEyMzU3MTIsMTAwMy4wNTU2MDgxODAyNjI1LDk5Ni41ODg0OTczNzU2NDM2LDEzNy40NTQwNjMxMDA2MDI1NSwyMjMuMDkwMzY5MTI1MTk0MSwwLjAwMzM3ODY4NDIxNTY4NzY1MSw3OC4zMDQ3NDA3NzQzNDk2OCw0NDAuNjMyMTA2NjY2Njg0NCw5NzYwNC42NTI1NjA3NTk5Myw3MzMxLjk3MjY4MjM2ODUyOCwwLjEwOTA2MjY4NzM0Mjg4ODcsNDkuMDQxMzcxNDA2NjA3NTQsMjczNS41ODQzMDczNjg5NTkzLDAuMDQ4MzYwNzMyMDQ5NDcyMDA2LDIuMDg4NjM1ODMwNjYzNzQ2LDE0MS4wOTY3NTU3MTQwMzQ2Myw0NTU1Ljk5OTgzOTEzODYzNSwxMzUyLjA0ODk3MzYyNTk1MTIsMC4wMzk1MTQyNDU1MTYxMDA3NgorMTMsU3VuIDYgRmViIDExLDE0Ni42MDIzNDcwMDE0MjA1Myw4MC45Nzc4NDA4NTc1MzEwOSw5My43NzE5NTQyMjAzMjcxNyw1NjUxLjg4ODAxMjEzMzYzMiw2LjA5OTYwMTQ1Njg2NDc0Miw1OTM5LjYwNjU5MDQyMjYxNCwxOC42MjU0OTI0ODU0ODU4OCw2OTYuMTAwOTcxMTczNjQ4MSwyOTU5LjQxMzI2MjgxMzA1MzcsMzAxMy4zMjc2OTk4ODExOCw0MzEuODg1MjM4NDYxOTI3OCw3MzYuMjAyNjYyNDc1NTk0NCwwLjAxMjc0Mjc1MjkwNTgxOTQ4MSwyNTMuNTU5MDk2MDg4MTgzMTcsMTQyMi40NzI3MzU5MTAyMTc4LDI1NjkwNy43NDk2OTMyOTk1LDIxNzQ4LjU0ODAyNzc5NDkxLDAuMzc5NjMzODM2NDk5Njk1NzMsMTYwLjY4MjYyMDQyNTg2MTUzLDgwNzUuMDc3NTA2NjU4OTY2LDAuMTY5MDgxNzk0ODUwNTAxNDUsNy42OTUyNzY4NDU1Mzk2NTcsNDU0LjgyNzIxMjgxODc5MzI3LDEzNTQxLjU0MDI5MjMwODY5MSwzNzgxLjcyNTIwNjgwMTExODUsMC4xMzY2NDA4MTc0MjEzMTYzNAorMTQsTW9uIDcgRmViIDExLDQzOS42MTc5NzUyOTYyMzc0LDI0Ni4wODc1MDI2NTcyMzgsMjkzLjM5OTYyMDEwMDQyNTYsMTQ5NTEuNTUzNTk3OTI5MDU2LDIwLjIzNTI3MTY4OTEwMDgxLDE3MjA1LjQwNjI3ODUyODQyMiw2Mi40Mzc3OTE3MDc3MTA2NSwyMjQ0LjM4NTc3MDgzMjgzOTYsODcyNS4wNTY3NjQ0ODg2Niw5MTA0LjMwODIwNDYyMzk5MiwxMzQ5LjUzMjU3NDA2NzUxNDQsMjQxOC45NzcxODcyNjYzODU1LDAuMDQ3ODM1OTI2NzczMDQ4NTIsODE3LjAyNjkxNDM5MjAyMjcsNDU3My42MTQ3ODU5Nzk4NDYsNjU4NDEzLjAzMjQ2NDA5OTgsNjQyNDcuMzUyMzgyNDU1MDEsMS4zMDgzMzQ3ODU2NjY5NTEsNTI0LjIzMTkzMjA2MTUzODQsMjM3NjIuMTgyMjU4NjgxMzcsMC41ODYxMDMwNzQ1MDY4OTIsMjguMTM1MDk1MDQyODkzNjI0LDE0NTguODIwMDEzNTg1MzE2Nyw0MDE3NS4yMDkxNDQ4MzUwODQsMTA1MTAuMDk0MDYwNjk2NzUsMC40NjYxMDcyMzYxMDQ3NjAwNworMTUsVHVlIDggRmViIDExLDEzMDYuNTYxODcwOTI2Njg0Miw3MzkuMjk3MDkxNjk3NTAyNCw5MDMuOTEzNzMxNzIxOTQ1MiwzODA1MS43MzA3OTE5NjU2OTYsNjUuOTUyNzc1NzYxMTk5NSw0OTM3MS4wMDAxNzY5ODAwNCwyMDUuNTg3NDI5MTU0NTk2Niw3MTIzLjE3NDIyMTU1OTQyMywyNTUwNy43MzIzMDEzMzU2NzMsMjcyNDYuMTUzMzI5MDAzNzksNDE1Ni45MTY1MjAwNzcxNjcsNzgxMi44NzQ0ODUyMDI2ODUsMC4xNzM1NTg4ODkxNTAzMDI3NCwyNTkxLjY5NTYxNjQyNzcyNSwxNDQ3Mi44NjM5OTI2NTY4ODcsMTU1NTQyOS44MTc4MjUwMDYzLDE4NjQ5MC4yNDkxNTYyODk2OCw0LjM5NzYzNTgwNTQ1NDE1NywxNjgyLjQyNTE4OTcyMjYwNjUsNjg5NDQuNjg5ODYxMDk2NywxLjk4MTg1MjUxMjc2MzMxMTUsOTkuNjc0NDAyNzI2OTcyNjQsNDYwNy4zMDY3MDU0ODcxOTUsMTE3ODkwLjI3ODkxMzUxMjMzLDI4NjM1LjU4ODgzNjE4NDEwMywxLjU0ODk5MDA1NjEyMjgwMgorMTYsV2VkIDkgRmViIDExLDM4NTQuNjA2MDE5Mzg0ODc5MywyMjAxLjY4NDc3NjE2ODIwNzUsMjc1MS4wNDc2NjA4NDQzMiw4NzM4OS45NjY3NjI2ODMyNywyMTMuMjIxNDMxNTc2NDg3NzMsMTM5OTg3LjA0ODQ1OTc3NzMsNjcyLjAxMTkzMTExMzE0NDYsMjI0MTYuNjY3MzAwNTkwMzcsNzM5MzYuNTM1NzU4Mzg4NTIsODA4ODQuODk2MDUyMjczMTgsMTI2NzYuODE5NzU2NzA2ODE4LDI1MDE2Ljc1NjY2MjE5NjY2LDAuNjIxODMxODE1NDE4MjEsODE1NC43NTM3NzYzOTM4NzM1LDQ1MzAxLjAyMTMyNzMxMDg0NiwyODc4OTYzLjg0NzE2MjM2ODIsNTIzMTE1LjE0NTgwNDMyNTI0LDE0LjYwNDMxMzUxOTczNDM2Myw1MzU1LjAzOTI4ODAwMTc5MywxOTUyMjQuNTY1Njg3OTk2Nyw2LjYyNjkwNDA2ODk0MzIwNTUsMzQ4LjQ0MzcxNzAwODc3NTE0LDE0NDI5LjU5MDI5MDcwNDc4NCwzNDA5NzAuOTc4ODkwNjk0NTYsNzQ1NzUuMTEyMzE5NTEyNSw1LjA3NDMyMDcxMTExMzc2NDUKKzE3LFRodSAxMCBGZWIgMTEsMTYyMzcuODQ2NzY4MjM1NTg4LDkzODMuOTU2MTI1MTYxOTE2LDExOTg5LjA0OTc5NDk4NjM0NiwxNDA1NDkuMDM3MDA5NDI0OCwxMDQ3LjAwNTcxNDExMTczOTUsNTQwODgyLjM2NzQyNTcxOTIsMzM2NS4xODgwMjQxNDAyMzYsMTA1MzM1LjQ5MDIyOTgxNjYzLDMwMDQ0My4xNTgwMjgxMjM1NSwzNDIzODkuMDEzMjAxMTk4NSw1NjA2NS44NzY4NDUyMTc3MywxMjA2MDYuMzI1NzQxMzUyNzIsMy41Mjg0NzQ3NjM0Nzk5NDM0LDM4NDQ1LjQ3OTgxNjYzNTQsMjA2NTI5LjExMjg2OTQ1MzUsOTM1NjUyLjQ4OTE0NDA0MjEsMTY5NzcwNy43MDAzMDM1NDc1LDc0LjM2MzY0OTY5NzkxNzgxLDI1NjE5LjU3NDMyODkyOTU1Myw2ODk3OTIuNjAyMjI1NDczNCwzNC4xMjk0MDUxMjE5MDI1OCwxOTA2LjU5Mzk2Njg3MzA3NjYsNjc0MDIuOTMxODI2NzAwOCwxMzI5ODAyLjAxNzA5OTA3NjQsMjA1NzY2LjY1Nzc0ODIwODczLDI1LjIxMTQ3NTgyNDk0MzI4NQorMTgsRnJpIDExIEZlYiAxMSw1NTg3My45NTA3MjMzMjg0NiwzMTM5My45MzM2NDgwMTMzMDYsNDA2ODEuNTc0NDk4MzE2NjIsMjk0NjEuNzcwODgyNjE4NjgzLDQ1NjcuMzIwMzA0OTI2ODg1LDE1NjE0NTkuMDcyODc1OTYwNywxNTE2Ni44NTM5MjY0MzAyMTgsNDI4OTg1LjMyNTMwMDY1NDE2LDk2NDMyMi44MDc4MjM4MjU0LDExNjA5MzcuOTg4Njk3OTEwNywyMDE1NjEuNDA1MDU5MDAyODYsNTA1NTc4LjU3NDY1ODAzOTg0LDE3Ljk3NTI1NjQ2NjU2NTMxMywxNTk2NTAuODM4NzE4OTQ1LDczOTE0NC41NTI4Mjk0ODYxLDc3Ni42NTU0NjIyNzMwMTg0LDIxNjIyMzIuNzA2OTE0MjY0MiwzMzkuMDIxNDM0MDIwNjgxMywxMDY3MTIuMTI2ODIyMzU5MywxMjgzMTc5LjMwNDAzNzQ3MSwxNTcuNzI1NDUxODQ5Njg3ODYsOTMzNi40OTA4MTM0ODAwOTcsMjc0NDU3LjQyMzY1OTEyNDc2LDM1MzA0NDEuNTY3NTQ0MTQ3LDIxMDU0My45MjA1NDA3ODQ0NiwxMTAuODQ4NTcyMzc5ODA2NDcKKzE5LFNhdCAxMiBGZWIgMTEsMTQyNDkyLjkxMDA5MDE3NTUyLDcxNzg1Ljk5NjU4NDY2MTcsNzk5MzEuOTY0MDU1MDMzNzYsNDkuMDYzMjAzODUzMjI4OTIsMjE2MDQuNDA5NzU1MTE2NjU2LDI0NzM0OTAuMTUzODMzMjU0Miw3NzE3NC42MTg3NDQyMTc5MiwxNjAwNzU5LjI2MTU3ODE3OCwyMDIzNDIyLjkwMjU2NjkyNywyNTg3MjE2LjQwMjYxOTU5Myw1MDMyNTAuMjE3Mzk3NDU2MywxOTczMjQwLjkwOTA2MjM0OTUsMTA2LjYwODc0NDQ3ODIxNDY2LDY2NzM2NS41MDc0NTg4NjY2LDE1MDA5MTYuODU0NjA5MjIzMywxNDU3LjkyMzY3NTgwMTE1MzYsMzMzLjI4MTg5MDU5ODE3MjIsMTczNy41NDM4MDI0MjEyNjYzLDQ0OTkzOC44NTY1NjM5NzIsMjcwNzg1LjgyNzAyOTIzNTg0LDgyNC44ODg1Nzk2OTI3NTU1LDUyMTkwLjQxMDgzNzY1MDY5LDEwNjc5MTMuNjU5NzM4MDQ1LDMwODI4NDEuODk2ODg4MDYwNSwzODAzLjQ5NzgyMjI1MDM1NTUsNTE5LjUxMjU5MDU4NzgyMTkKKzIwLFN1biAxMyBGZWIgMTEsNzY0MjMuMTMzOTUxOTA5MDEsODMxMzUuODQ3NjQxNzMwNzgsMTc4MTQuNjkyMTA1MzgyMDg4LDc1LjAxNTA3MzE3MTcyNjI2LDgyNDA2LjUwNzU4MTM3MjUzLDQxMzExMC42MzE4OTI5MjkxLDM1NjYwNS41NzUwMzQwMTQyNCwyMjM4NTMzLjMyMDI3ODM1NCw2MjU0NzIuNzY0ODAxODMwOCw4MjE2MjQuNTk0OTY2MDcwOCwyNDEzNDYuNTQ5Nzg5NDY4NjQsMjk4MzE3Mi4yNzY3NjAxMDA0LDYxNy43MzI2Mjk1NjA1NTk0LDE1NzE0MTEuNzQ4NTIxNDk3LDI5MzA5Ni4xMTM1MDY3ODI4NiwxOTAxLjEwNDI5MDYxOTA3NDQsNzUzLjgyNjg5NTkzNDcyLDgyNjYuNDc4OTI5MjcwNTksMTM5MjYyMy42NjQ4MjA1NjM3LDM3Ny44NjczODA0MzE4NTAzLDQwNTMuOTQxNTI0MzU1MzI0NCwyNjg5MDcuMzUxMjUzNjM2OTQsMTg5Mzg0OS40Njg0MTM4MDUsNzA1LjM0NTE5NDE3NDU0MzcsOTMuODE3NjY0ODk2NTA4OTcsMTc5Ni40NjkwNTE1ODU4MDQyCisyMSxNb24gMTQgRmViIDExLDQ2NC45MjI5NzE4MzQ4MDIwNyw1NDEzNC4xODQyNTg4MDUsMjEuNzgyNjgxOTAwODM5Mzc1LDEwNS43MDM0MzQ2MDEyMzQxMiwxNjY2NDguNTc1NTQ2OTg4NDMsODA3LjMyNjQ4NTk2NjkxNDYsMTQwNjg4Mi4wODgyMjM5OTQsMjI5MDc5LjU4MDE0NTE2NTM4LDUwOS4xNDUwMjQ2NjcyMjU0Nyw1ODQuNjUxOTM4MTkwODI4OSwxMjkxLjAzNDI1MTgyMTA1NCwzNTY5NjguNTU4ODQ5NjMyNywzNjI0Ljc2MzgzOTUzNTMwNjUsNjg5MDEwLjg3MjA3MDQ5NDUsMzg5LjAzMTI5NTEzOTc4MDg3LDI1MDAuNzgxMDE2MDEzNTk3MywxMTY1Ljg3OTA1MjE5MzA2MiwzODc4My4wNTA4NzAyNDk4NiwxNjk0ODk3Ljc4ODM0MDE1MzIsNTY1LjAyNDUxNTY2MTU0OTcsMjAwNjcuOTQyMzE0NTIwNzIsMTE0OTg2NS45NTcyMjc2NzA2LDM4NzgwMC45MTUwNjAyNDMzLDE1NDUuMzg1ODQ1MDI5NTk0NywxNDIuNTE0MDI4NTE1NjI0ODMsMzE0OS42OTMyNzg0OTAyMDMzCisyMixUdWUgMTUgRmViIDExLDU5LjI3NDQ5NDMwOTg4ODE5LDExOTU5LjcyMzUxNTI5NTUsMzQuNDQzMTc2NDE5MDA4MTgsMTMxLjA5MDIwODQwODUwODUsNDUzNjkuOTY1NDYyMzMwNjA1LDEyNDAuMzI4MjIwMjI2NzksMjkwNTY4NS40MDU5ODEzNzksNzI1LjAzMTI2NDc3MjcyMDMsODc2Ljg4MzkzMjAyODI2ODEsMTA3Ni45Mzg4NjMzOTk1MjEzLDIwNi4zNTY2Mzg1MzAyMDUyLDkyMS42MTE5MjY3MzI2MDIxLDE5MzM1LjgzMDU3NzA3MTM2LDE5NzguNjgxNjgyNjA2Mzk4NSw2MjIuNTAwOTUyMzM3MDgwOSwyOTU5LjMyNjg3NjU3MjIwNzMsMTU3MC4yODkzMzkxNDgyODUsMTY0ODgwLjkyMDUwMDY4OTMsMTQyNDI3LjQzNDExNjczNzI1LDc4OS40OTg0NDIyNjg4MTE5LDk0NjU1LjI2ODA4MDc4OTg5LDIxOTU2NzguNTM4MTM4MTc3LDUzNS41MjY3ODY3NDAyNDI1LDIyNzQuNDczNzUwODQ0MDA0NCwxODguMzk4NzE1NTA1Njk1MzgsMTEzOC42OTg1MzgzMTUyNDcKKzIzLFdlZCAxNiBGZWIgMTEsODQuODc3Nzc4MzU3MDM1NTEsNDI5LjI5MTM4MjA3NTQxNzA2LDQ3Ljc5Mzg1MjAyNDg3ODczLDE1Mi45OTM1NDEyMDUyNjM1Nyw0NC4yNTA0NDM1MjM1OTU0MywxNjg1LjM4MjcyODcyOTg1MjcsODg5ODk0LjUxNTUwODMyODIsMTExNi40OTM4MDA0NDA5MTAzLDEyMjMuOTg0ODk1NTgxNTIzNSwxNTEyLjE0MTQ0MTc4MDc2NDYsMjk0LjM4NjM5MjA5Nzg3MDksMTQxMi4xNjMyNzU3MjAyMjcsODk0NjQuMzc0Njk5ODIzMyw2NDUuMzI2NDMwNzA5MjIzNiw4NjUuMjYyODM4NTc2NTY3MiwzMzQ0LjMzNDg1MDEyNzc4NywxOTMyLjk2NTk4NTczMDcyMiw1MTU1NjguOTkzMDAzNTc1OTUsNjM5Ljc0OTAxNjQ5ODgyMzQsOTk0LjQxNzM2ODI5Njc5MjMsNDA3NzEwLjA2MDg0NzE4MjcsNDk0OTg2LjIzMjM4NDc3NTQsODQxLjY2MzU2Mzk0MDE0MjEsMjk4NS45NDQwMjE1MTIxMjk0LDIyOS41ODI3MTQwODAwMTY1LDEwLjUyNTQ0MDYwNTM3OTc3CisyNCxUaHUgMTcgRmViIDExLDEwNC42MzE1NTk5ODExMzg2Niw3OC43NzkzODQwOTczMTA0Myw1Ny43ODY3Nzk2NjExNDM0MSwxNjcuNzQ5NzQxOTM2NzUxMTUsNjUuNDE1NTM2NjI2MDIxNDUsMjAxNS41MTQ5MzU4MDA1NTc0LDY3Ni43MjYwNTc2NDA3MDU5LDE0MzQuOTk3OTI1NzU1OTIzNSwxNDg1LjYzODI0ODIwMzI2MzIsMTg0MC43NDIyODI3MDg2OTA1LDM2Mi4xMjM1NDA2Nzc0MTYsMTgyMy42ODE1NzI5NTc4NiwyNDY4OTguMjc5OTg2MTk5OTIsODYwLjk1MTA1MjgzNDYxMTMsMTA0Ni42Nzk5NDgzNzI0MTM1LDM1ODcuNDU3MTY5OTAyNjk2NSwyMTgwLjg3MjQ3NDU3Njk2Niw1ODI3MzkuNjQ3MDEzMjQ4OSw4OTguNDY0NDM5NTU5NzQzNiwxMTM3LjA1MzU3NjI5NjkwOSwxMDUxMjY0LjEyMTkyNTQyNjIsNTI2LjI4ODUwMjQ1ODI2MjMsMTA5OC4wNTM5MDk1MTk4MTY3LDM0OTcuMzE2ODA3MDY1MTksMjU3LjY3MjgwNjg2NjA4NTY0LDEuMzkzODcwNjQ4MTkxMDY0MworMjUsRnJpIDE4IEZlYiAxMSwxMjQuNDg1NzExODAzNDg2MTcsOTcuNzAwNDc5NDg2MTIwNzYsNjcuNzY3MDYwOTcyMjM4MzgsMTgxLjcwMjI2NTA2MzI1Mzc4LDg4LjEwNzU5MDgyNjU2NzMsMjM0My45NzA0NDA3NzI2MzEzLDg3NC44NzcwNjIyMzYxMzk0LDE3NTkuOTY0MzE2MjI3NzUyNSwxNzQ3LjczOTI2Nzc0NzI0LDIxNzAuMjc0MzExNzYyOTMsNDMwLjE5MjYwNTY4MDc0NTcsMjI0NC4zNzIxOTc1NTExODUzLDUxMzkyNy43MDAyNTgwMDU1LDEwODUuNDkwMzU2ODIyNzQzMywxMjI4LjI5MjQyNDU2Nzc1NDgsMzgwOC40NDM1NjA3MjU1NTA1LDI0MjAuMjkxMTY1NzQ2MzU4Nyw2MS45OTA2NTA4MDM4NTcxNCwxMTcxLjAyMDkwMjk3ODQxOTgsMTI3Ni4yODI3NDQ2Mjc2NjY3LDE5NDUwMTMuNzQ1NDc5MjEzMyw3ODIuMDUyMTMzMjkxMzYwOSwxMzYwLjg2NzQwODgyMjI1MSw0MDAyLjkwNjA3MzQ5MTE3OSwyODQuNzg2MjU2OTQyNzM5MSwxLjg0MTUyMjgwMDYwNjA0CisyNixTYXQgMTkgRmViIDExLDE1MC4xODU2NTA5NjA0NzUzOSwxMjguMzIyOTY4MTY1NDAxODIsODAuMjM0MDI1NDM5NzUzMiwxOTYuOTk3NTUzMzc2NzU2NzQsMTI1LjUxNTkxMzI5NTkxOTk2LDI3NDkuODc2MzY4Njk2MTQ5MywxOTE0LjgwNTI1MjI5NDM2NzgsMjE5OC43NzMwMTI4NzI1NjIsMjA3Ni42OTkxOTA1MTk1NTIsMjU4NC41NjEyNTE2NzQ3ODQsNTE3LjMwNzQ4MzA1NjIwMDcsMjgxNS40NTMwNjI4ODk0MjcsMzA4NjU0Ljg1OTI4MzUyMTYsMTQwNy4wNDAxNTQ3OTMzNzUsMTQ1My44NjE4OTYxMjU0MzcsNDAzMi4zMTAxMTMyNDczNTgsMjY5MC4zMjE4NDQyNzYwMjEsMjQ2LjM0MDQ5NjYwOTA3MTE4LDE1OTQuMDQxNjYyOTQ3MTY5MiwxNDM2LjMzODY2OTM3MDI5MzIsMjM0NDE4LjE0MDc2MTU2OTUsMTI4My43OTkwMzYyNzMxMTE4LDE3MjMuNzIzOTAzNTY5MjUwNSw0NjA0LjgwMDQ3NTA0MjI2OCwzMTUuMTQ2ODAxNTYyMjU2MjYsMi42NzM2MzU3OTc2OTc4OTM1CisyNyxTdW4gMjAgRmViIDExLDE2MS40NzgzMzQ5OTIyMjE4NSwxMzguNjkwNzg0NzYyNzA1OCw4NS43NTc1MzcwMjk1MzUwMywyMDMuNzgwOTYyNTgxNjYwNDIsMTQxLjE4NTU2NTU5NDU3NzY3LDI5MjkuNjgzMDQxODg2NzI4NSwxNTg4LjA0MDMyODIyMzcxOTEsMjM5My4yNjkyNzc2NzMwNDM3LDIyMjIuODQwOTExMjMwMzU5LDI3NjguNzQ0NjMxODMzNjgzLDU1NS44ODIzOTI1NTA1MDk3LDMwNjguNTc4NTE3MTU4MDM5LDE5LjYxMjI2NjIwNzE0ODQyNiwxNTQ4LjA4MDA2NTMwNTY2ODMsMTU1NC4zNzQ3ODE3OTU4Mjc5LDQxNDEuNjcyMDUzMzU1ODQ2LDI4MTMuMTU4MjE2NDc3NTI2LDE2Ny42Mjg2NzExMzE2NTExLDE3NzQuMDc2MDg2Mzc0MjI2OSwxNTA4LjcxNzY1NjYzNTk0OTcsNDgxLjMyMjE5MjI5NDc4ODQsMTUyMy4yNDgwMDc5MjI1OTEzLDE4ODQuMTA5MDIzMzc2NTMxNSw0ODc0LjM4NzIzMzU4OTY4LDMyOC45NDcxNDczMjMxOTY5MywyLjkzNDg0MjE2NTU1NjgyMTgKKzI4LE1vbiAyMSBGZWIgMTEsMTc0LjEwNDI3NDk5NDQ2ODUsMTU0Ljk5NTM2OTY3NDc2MDEzLDkxLjUwOTIzNDM2NDMzOTEsMjA3LjQyMTUyMDA2NjM4MTgyLDE2NS40MjM3NDc4OTkzMDI5LDMxMTIuMzE4NTU3MzE4NTEwNiwyNjgwLjIyMzc4ODIwMTg3OCwyNjIzLjg1OTEzMjgxMzk0NywyMzc2LjYwMDY1OTQ0NDU2NywyOTYzLjE4NjU4NjI3NTkxMSw1OTguMTA5ODQ2OTM1NDcyNCwzMzcwLjcwNzgwNTI1MDEwNDIsMTQ0LjQ0MjY0MDE0NTgyMTcsMTcyOC4wNjE1NTI1NjA1NzksMTY1Ny41MTY1ODEzMTM2NTkzLDQxMjUuODI1NTU2MDMyOTc4LDI4ODkuODIyMzUzMzAwNjQ2MiwzNDcuNDMxOTUwMjA2MzA1NzcsMjAzMS4zNjU2ODE2NjgxMjY5LDE1NjIuMjU5MTgwMjMxNzAyLDc4MC4yMjM0ODY1MDg4NzY0LDE5MDYuMDYzMTA5ODA3OTA1MiwyMDc5LjY4MzA2MDcxMzMyNiw1MTE1LjgyMTU4MDA5MzM0MywzMzcuNTE5MDA2NzIzMDAzMjYsMy41MTcwMjkxMjk3MDU4OTIKKzI5LFR1ZSAyMiBGZWIgMTEsMTgzLjY1OTQyMjkzNzUyNjg0LDE2NS4zODE3MDU4ODQyOTkxNSw5Ni4xMjQyMTQ4ODgxMzkyOSwyMTEuOTY0MjMzNjQyMzgxODgsMTgwLjYyOTg4NTI0Mzc3MzUxLDMyNjAuODI1ODI1MTI3OTU5NCwzMTYyLjM2MTE0Njc1NTEzMzYsMjc5NC44NDg1NTI5MTAyMDUsMjQ5OS4yMzA0OTM4MDM4NDcsMzExOC4xMjUwMTU0MDk3NjYsNjMwLjg5NDYzMDE0MTY0NzcsMzU5My45MjE2ODI0NjQwODksMjM0LjI5ODY5NzYxOTg3NzM0LDE4NTUuMjQ4NTgyMDYwOTkxOCwxNzQxLjQyNTEwNTk4NzQ4OTgsNDE3My4zNzkwNDk4Nzg5NjMsMjk3OC42NzkzMDgyMTA2MjEsNTY5LjExNDQ2NjYyMTMyNCwyMTk5LjUwNjkyNzE3ODQxLDE2MTcuMTIzODg1MDkyMDc3NywxMTM0LjI1NzgzMDczMzM0MzYsMjE1Mi42NDk5NzAzNzgyMzkyLDIyMjIuMDY3MzUwMjIyNTY3Nyw1MzMxLjM4OTc3MTExNTE0NCwzNDcuNDQ0OTUwNzg0NzQxNiwzLjgyMjQ2NTQxMTUxNTk2OTUKKzMwLFdlZCAyMyBGZWIgMTEsMTg4LjAzNzE2MTczMzg5MTQ4LDE3My4wMjU1Nzk3NTY1MDY5NCw5Ny44NjQ5NzIyMzI3MDkxMiwyMTAuODA3NTExNzAwNTY3MTgsMTkyLjMxMTY0MjQ4MzQ1MTk1LDMzMTIuODMwMjc4MzgxNjEzLDMxNjAuNDg0NjAyODMzNDkxNCwyODg2LjY1NDc4MjUzOTQwMzYsMjU0Ny4yMjA3MTk1MDYwNjk2LDMxNzkuMzU4MzcyMDU1NjYzNSw2NDUuMjEzNDcyNjIyNTAxOSwzNzE1LjY0NzQxNjkwNTAwNywzNTUuMjczMjY4NDI4NTA5MywxOTM0LjU5NzQ5MTA1OTcxOSwxNzcxLjk5NzMxNTg5NzY2MTgsNDEwNi44Nzc1MDI0Njg4NzIsMjk3NC43OTg0NTkyMTM1NTU0LDcyMy4yMTIxOTYwOTYyODU3LDIzMjEuMDA4NDIwMjQ4NDYsMTYyMS4zMDA4MTU0MjAwMzQzLDE0MzUuMjk4NjQ4ODI4MzMyNywyMzU1Ljc3MTU2NTkyNjM1MDQsMjMwMy41NjUwMzUwMzM5ODU2LDUzODEuMTMzNjM5MDk1NDUxLDM0Ni44MjI4MTU1MjI5NDk5LDQuMDU5MTA2NDc3NTIwOTI5CiszMSxUaHUgMjQgRmViIDExLDE5MC4yMzQ0NTE1NzE1MTY1LDE3OC4zMjI2ODQ4MzEwNDQwNiw5OC41OTA3MTkxODk1NDA0NywyMDguMjc3MDAwMTUwNzA0MSwxOTkuODk5NzQ0MDE4MzM4ODgsMzMzMS44ODMxNzc3MjQ0MTYsMzM4OC41ODkzMjI3MDI2NjksMjkzOS4yOTMxNjAzMzA4MTg0LDI1NjguMzAxNjA4NTM3NTkwMywzMjA2LjcyNTU5MTQwNzQxMDMsNjUyLjI1NTI0MTc1MzA1ODYsMzc4Ni4wNDcwMDczNTMyMDA2LDQ4MS45NjEwNDI3NDgyNjkyLDE5ODIuNDczNjg5MTY3Nzk2NywxNzg0LjM1MjIyNTYwMjQzNjYsNDAwOC42OTEwNzk2MjYzMDIsMjk0Ni43NjQwMTkzMjAxNjczLDczNy42MzcxNjk1NDQ5NjM2LDIzOTYuODc4MDY1NDE2MDcxLDE2MTIuMDA3NDc2MTMyMTUyMywxNjkxLjg0OTM5MDkyMzI5OTMsMjUwMi41NjEyNzgxMTE0ODg3LDIzNTEuNDc4NzcxMjU5MTgyNCw1MzgyLjUwNDQzNjA3OTEwOSwzNDMuNTMxMzQ3MTM4MDUzMTUsNC4yMjg1NjA1NzU2MTQwODIKKzMyLEZyaSAyNSBGZWIgMTEsMTg5LjY3OTM5MDg4NDAxMDksMTgxLjI2NzQyMDMyMjc0ODEsOTcuOTI2NDc5NDcyNTYxNjEsMjAzLjYzNTAxMzY0MzYyMjU5LDIwNC4wOTQwNTU0NTUyNzEyMiwzMzA1LjA4OTk5OTMyODg2NDUsMzUxNi40MTk1MTkxMjU5OTA1LDI5NDYuNTY1NzAzMTUwNjA5NCwyNTUyLjgzOTY3NTM5ODQ2OCwzMTg4LjE3NTAxOTc2MzIxOSw2NDkuODE1NDY1MTAwOTk4NSwzNzk3LjY5ODI0MjY2NjA4NCw2MDcuMDk0MTA2MjAyMTM2LDE5OTkuMDAxMjEwNDU5MDI3OCwxNzcxLjQ0Nzg1Nzk4ODYxMTMsMzg3Ni45NzgzNjAzMjg1Nzk2LDI4ODUuNDI2ODQwMzI1NzA2LDc2NS43MTQwMTc3NjU4ODI0LDI0MzQuMTE2Mzc2ODM1NjQ2NCwxNTgzLjM3Mzk2NDAxNDAzNjgsMTkwNS42Njc2NzE3MTc0NjgsMjU5Ny45ODk1NTMxNjE2OTUsMjM2Mi43MTkwNTQzMjQwNDQsNTMxMy41OTU0NzY1MDQ0NTksMzM2LjQxMjE1NzE5NjkzOTcsNC4zMjE0NzQ2NjQ1MDE1NjgKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvTm9uWmVyb01vcnRhbGl0eVJhdGVfRkRfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL1BvcHVsYXRpb24gQ291bnRfMC5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L05vblplcm9Nb3J0YWxpdHlSYXRlX0ZEX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9Qb3B1bGF0aW9uIENvdW50XzAuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJjMjQ0MDEKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L05vblplcm9Nb3J0YWxpdHlSYXRlX0ZEX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9Qb3B1bGF0aW9uIENvdW50XzAuY3N2CkBAIC0wLDAgKzEgQEAKK2l0ZXJhdGlvbix0aW1lLApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Ob25aZXJvTW9ydGFsaXR5UmF0ZV9GRF9SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vUG9wdWxhdGlvbiBDb3VudF8xLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvTm9uWmVyb01vcnRhbGl0eVJhdGVfRkRfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL1BvcHVsYXRpb24gQ291bnRfMS5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmMyNDQwMQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvTm9uWmVyb01vcnRhbGl0eVJhdGVfRkRfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL1BvcHVsYXRpb24gQ291bnRfMS5jc3YKQEAgLTAsMCArMSBAQAoraXRlcmF0aW9uLHRpbWUsCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L05vblplcm9Nb3J0YWxpdHlSYXRlX0ZEX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9Qb3B1bGF0aW9uIENvdW50XzIuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Ob25aZXJvTW9ydGFsaXR5UmF0ZV9GRF9SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vUG9wdWxhdGlvbiBDb3VudF8yLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MmJiYWZjCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Ob25aZXJvTW9ydGFsaXR5UmF0ZV9GRF9SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vUG9wdWxhdGlvbiBDb3VudF8yLmNzdgpAQCAtMCwwICsxLDMzIEBACitpdGVyYXRpb24sdGltZSxFRy1GUkctRzIxMDAwMSxFRy1GUkctRzIxMDAwMixFRy1GUkctRzIxMDAwMyxFRy1GUkctRzIxMDAwNCxFRy1GUkctRzIxMDAwNSxFRy1MT0UtRzI0MDAwMSxFRy1MT0UtRzI0MDAwMixFRy1MT0UtRzI0MDAwMyxFRy1MT0UtRzI0MDAwNCxFRy1MT0UtRzI0MDAwNSxFRy1MT0UtRzI0MDAwNixFRy1MT0UtRzI0MDAwNyxFRy1MT0UtRzI0MDAwOCxFRy1MT0UtRzI0MDAwOSxFRy1VUEUtRzI5MDAwMSxFRy1VUEUtRzI5MDAwMixFRy1VUEUtRzI5MDAwMyxFRy1VUEUtRzI5MDAwNCxFRy1VUEUtRzI5MDAwNSxFRy1VUEUtRzI5MDAwNixFRy1VUEUtRzI5MDAwNyxFRy1VUEUtRzI5MDAwOCxFRy1VUkctRzMwMDAwMSxFRy1VUkctRzMwMDAwMixFRy1VUkctRzMwMDAwMyxFRy1VUkctRzMwMDAwNAorMSxUdWUgMjUgSmFuIDExLDI5NzIzNy40MDM0NTM4MDE1LDI2NTM4OS42MDM0MTg1NzE3NiwxNTQ0NzguMzUwNDExMjY3MjUsMzE5MzQ3LjMyNzYzNjkxMzE2LDMyMTg5OC44OTg5MTM3NzQyLDUyMDM2MjEuODc5MzEzODk1LDU2NTQ3NzAuNTA1NDEzOTEzLDQ2MzQ2MjQuNTA2NTY5MDksNDAyNTYzOS4wODYwNjM3MDUsNTAzMzA2Mi40ODUxMzQ4MzksMTAyMjA2Ni45ODA0NTc1MjUsNTk3NDgxNC45MDY2MDkyOSwxMTgyNDUwLjMwOTQ4MTA5MzQsMzEzODk1MC40MzkwNDkyMDM0LDI4MDU2NDkuNTUyMjYyMjM5Niw2NDQwNjE0LjE2NTQxNzgyMiw0NjY1OTcwLjY1NTQwMTg0MiwxMzEyMjQzLjk5NTgwMjU1NDgsMzgxOTIyNS43MzM1NTE3MTgzLDI1NDM0OTcuNTEzMDI5OTQyLDM3NTc1NDMuNzg5NjEzMjk0LDQxNzI2NTcuMTM3NjY4NjQyNywzNzExOTU2Ljk5MjA4NjkwNDYsODQ2MTMyNS42NDg5MDMxMTcsNTM5NTkzLjM1OTQ5MTEyNDQsNjc1Ni4xNzM5MjU3NDI4NTM1CisyLFdlZCAyNiBKYW4gMTEsMjk3MjM4LjU5MjQwMzQxNTMsMjY1MzkwLjY2NDk3Njk4NTQsMTU0NDc4Ljk2ODMyNDY2ODksMzE5MzQ4LjYwNTAyNjIyMzcsMzIxOTAwLjE4NjUwOTM2OTgsNTIwMzY0Mi42OTM4MDE0MTEsNTY1NDc5My4xMjQ0OTU5MzUsNDYzNDY0My4wNDUwNjcxMTcsNDAyNTY1NS4xODg2MjAwNDksNTAzMzA4Mi42MTczODQ3OCwxMDIyMDcxLjA2ODcyNTQ0NjgsNTk3NDgzOC44MDU4Njg5MTcsMTE4MjQ1NS4wMzkyODIzMzEyLDMxMzg5NjIuOTk0ODUwOTU5NiwyODA1NjYwLjc3NDg2MDQ0ODcsNjQ0MDYzOS44Nzc1MDc4OTcsNDY2NTk4OS4zMTkyODQ0NjMsMTMxMjI0OS4yNDQ3Nzg1MzgsMzgxOTI0MS4wMTA0NTQ2NTI0LDI1NDM1MDcuNjg3MDE5OTk0LDM3NTc1NTguODE5Nzg4NDUyMiw0MTcyNjczLjgyODI5NzE5MywzNzExOTcxLjgzOTkxNDg3Myw4NDYxMzU5LjQ5NDIwNTcxMyw1Mzk1OTUuNTE3ODY0NTYyNSw2NzU2LjIwMDk1MDQzODU1NworMyxUaHUgMjcgSmFuIDExLDI5NzIzOS43ODEzNTc3ODQ5MywyNjUzOTEuNzI2NTM5NjQ1MzQsMTU0NDc5LjU4NjI0MDU0MjIsMzE5MzQ5Ljg4MjQyMDY0Mzc2LDMyMTkwMS40NzQxMTAxMTU4NCw1MjAzNjYzLjUwODM3MjE4OCw1NjU0ODE1Ljc0MzY2ODQzMiw0NjM0NjYxLjU4MzYzOTI5Nyw0MDI1NjcxLjI5MTI0MDgwMzQsNTAzMzEwMi43NDk3MTUyNSwxMDIyMDc1LjE1NzAwOTcyMTcsNTk3NDg2Mi43MDUyMjQxNDEsMTE4MjQ1OS43NjkxMDI0ODg0LDMxMzg5NzUuNTUwNzAyOTM5LDI4MDU2NzEuOTk3NTAzNTQ4LDY0NDA2NjUuNjAyMjk0MjMsNDY2NjAwNy45ODMyNDE3NCwxMzEyMjU0LjQ5Mzc3NTUxNywzODE5MjU2LjI4NzQxODY5NDIsMjU0MzUxNy44NjEwNTA3NDIsMzc1NzU3My44NTAwMjM3MzE2LDQxNzI2OTAuNTE4OTkyNTA2NCwzNzExOTg2LjY4NzgwMjIzMjMsODQ2MTM5My4zMzk2NDM2ODksNTM5NTk3LjY3NjI0NjYzMzgsNjc1Ni4yMjc5NzUyNDIzNTgKKzQsRnJpIDI4IEphbiAxMSwyOTcyNDAuOTcwMzAyOTg5OTQsMjY1MzkyLjc4ODEwNjU1MTUsMTU0NDgwLjIwNDE1ODg4NzE1LDMxOTM1MS4xNTc1MDQwODg2NSwzMjE5MDIuNzYxNzE2MDEyMjYsNTIwMzY4NC4zMjIxODk0ODQsNTY1NDgzOC4zNjI5MzE0MDcsNDYzNDY4MC4xMjIyODU2MzEsNDAyNTY4Ny4zOTM1NjY2MzYsNTAzMzEyMi44ODE4Njk0MzI1LDEwMjIwNzkuMjQ1MzEwMzQ5OSw1OTc0ODg2LjYwNDY3NDk2MiwxMTgyNDY0LjQ5ODk0MTU2NSwzMTM4OTg4LjEwNjYwNTE0MTQsMjgwNTY4My4yMjAxNzc5MDksNjQ0MDY5MS4xMzU3MTE2MDIsNDY2NjAyNi42NDQ5MjkyMSwxMzEyMjU5Ljc0Mjc5MzQ5MiwzODE5MjcxLjU2NDQ0Mzg0NCwyNTQzNTI4LjAzNDE5MDgyNSwzNzU3NTg4Ljg4MDMxOTEzMiw0MTcyNzA3LjIwOTc1NDU4MjUsMzcxMjAwMS41MzU3NDg5ODM3LDg0NjE0MjcuMTgzNzczMjk4LDUzOTU5OS44MzM3ODUyNjI5LDY3NTYuMjU1MDAwMTU0MjU5NQorNSxTYXQgMjkgSmFuIDExLDI5NzI0Mi4xNTkyMzc2Mzk2MywyNjUzOTMuODQ5Njc3NzA0LDE1NDQ4MC44MjIwNzk3MDM4LDMxOTM1Mi40MzAwNDUxODQ1NiwzMjE5MDQuMDQ5MzI3MDU5MSw1MjAzNzA1LjEzNTE2OTcxMyw1NjU0ODYwLjk4MjI4NDg1OSw0NjM0Njk4LjY2MTAwNjEyLDQwMjU3MDMuNDk1NTYxNjQ5LDUwMzMxNDMuMDEzODIxNjc0NSwxMDIyMDgzLjMzMzYyNzMzMTIsNTk3NDkxMC41MDQyMjEzODEsMTE4MjQ2OS4yMjg3OTk1NjA4LDMxMzkwMDAuNjYyNTU3NTY4LDI4MDU2OTQuNDQyODgyMTY4Niw2NDQwNzE2LjQ1NTMyNzQ0NSw0NjY2MDQ1LjMwNDExMjY2NCwxMzEyMjY0Ljk5MTgzMjQ2MywzODE5Mjg2Ljg0MTUzMDEwMiwyNTQzNTM4LjIwNjM0NzIwMjQsMzc1NzYwMy45MTA2NzQ2NTI2LDQxNzI3MjMuOTAwNTgzNDIyLDM3MTIwMTYuMzgzNzU1MTI3LDg0NjE0NjEuMDI2NDUwMzA4LDUzOTYwMS45OTAzOTUzMjgsNjc1Ni4yODIwMjUxNzQyNjA1Cis2LFN1biAzMCBKYW4gMTEsMjk3MjQzLjM0ODA0MTI0Njk0LDI2NTM5NC45MTEyMTMyMTEsMTU0NDgxLjQzOTk3NDM0ODA2LDMxOTM1My42ODY5MTIyMzU4NiwzMjE5MDUuMzM2OTQyMjE4MDcsNTIwMzcyNS45NDA3NTg4NjUsNTY1NDg4My42MDE3MjU4NDMsNDYzNDcxNy4xOTk2NDAxMDU1LDQwMjU3MTkuNTk0MzMwNTE1Nyw1MDMzMTYzLjE0MzI3ODE4OSwxMDIyMDg3LjQyMTgyMjg5NTEsNTk3NDkzNC40MDM3MjQ3OTYsMTE4MjQ3My45NTg2NzY0NzYsMzEzOTAxMy4yMTg1MDE2ODMsMjgwNTcwNS42NjUyMTkzNTQsNjQ0MDc0MC44MDc2MzIwODUsNDY2NjA2My45NDExNTI1MTcsMTMxMjI3MC4yNDA4OTI0Mjk2LDM4MTkzMDIuMTE4NjQ0MzY4NCwyNTQzNTQ4LjM2OTg1NjMwNywzNzU3NjE4Ljk0MTA5MDI5NCw0MTcyNzQwLjU5MTQ3OTAyMzUsMzcxMjAzMS4yMzE3MDk4NDk2LDg0NjE0OTQuODU1NTUzMjAyLDUzOTYwNC4xNDAyMjA4NjQ2LDY3NTYuMzA5MDUwMzAyMzYxCis3LE1vbiAzMSBKYW4gMTEsMjk3MjQ0LjUzNjUzODc0OCwyNjUzOTUuOTcyNjU1MjM2NjYsMTU0NDgyLjA1NzgwMTI5MSwzMTkzNTQuOTA5MDAzNjg3NDQsMzIxOTA2LjYyNDU1OTk4MzgsNTIwMzc0Ni43Mjk0MzIwMTg1LDU2NTQ5MDYuMjIxMjUwMDg3LDQ2MzQ3MzUuNzM3OTU0NjYsNDAyNTczNS42ODU2NjU3NDUsNTAzMzE4My4yNjY5MDY0MDYsMTAyMjA5MS41MDk2OTcyOTc4LDU5NzQ5NTguMzAyOTg0MjU0LDExODI0NzguNjg4NTcyMzEwNiwzMTM5MDI1Ljc3NDM1MjYyMiwyODA1NzE2Ljg4NjYxMzU0Niw2NDQwNzYzLjA5NTk1OTUzNyw0NjY2MDgyLjUyNzUxMTA1LDEzMTIyNzUuNDg5OTczMzksMzgxOTMxNy4zOTU3Mzg2NTUyLDI1NDM1NTguNTEzNTgxOTg0NywzNzU3NjMzLjk3MTU2NjA1Niw0MTcyNzU3LjI4MjQ0MTM4NiwzNzEyMDQ2LjA3OTQ1MjQ5NTYsODQ2MTUyOC42NTM0Njg2MzEsNTM5NjA2LjI3NDc0ODU4NzcsNjc1Ni4zMzYwNzU1Mzg1NjMKKzgsVHVlIDEgRmViIDExLDI5NzI0NS43MjM3NDk5NDAxLDI2NTM5Ny4wMzM1NzY3MTgyLDE1NDQ4Mi42NzUxOTA3MTM5OCwzMTkzNTYuMDE2MzMxNzI2NiwzMjE5MDcuOTEyMTY0MzMzNyw1MjAzNzY3LjQ1MTgyOTU5Nyw1NjU0OTI4Ljg0MDgxMTQxOCw0NjM0NzU0LjI3MzY5ODgyMyw0MDI1NzUxLjc0NzE3NzU1MzQsNTAzMzIwMy4zNjU2MjU5OTcsMTAyMjA5NS41OTU1MDIxMzM0LDU5NzQ5ODIuMTk5OTI4ODA3LDExODI0ODMuNDE4NDg3MDU2NiwzMTM5MDM4LjMyOTI4OTM3NDQsMjgwNTcyOC4xMDIxMjY0NDcsNjQ0MDc3OS4xNjUwMDA2MzcsNDY2NjEwMC45MDcyODU2MzQsMTMxMjI4MC43MzkwNzQ4NTIsMzgxOTMzMi42NzIzMzM1MTQsMjU0MzU2OC41Nzc1MTM2MTkzLDM3NTc2NDkuMDAyMTAxNzIsNDE3Mjc3My45NzM0NjQzNjYsMzcxMjA2MC45MjU0NTcyMSw4NDYxNTYyLjMyMzgwOTE0MSw1Mzk2MDguMzUzNzk2NTM1Myw2NzU2LjM2MzEwMDcwODkyNQorOSxXZWQgMiBGZWIgMTEsMjk3MjQ2LjkwNzI3MDI2OTksMjY1Mzk4LjA5Mjg5NDA5NSwxNTQ0ODMuMjkxMTg3NzE1NTcsMzE5MzU2LjgyMjA1MjA1MzY0LDMyMTkwOS4xOTk3MTMzMjY5LDUyMDM3ODcuOTg4MjQ1ODkwNSw1NjU0OTUxLjQ2MDI4ODgzODUsNDYzNDc3Mi44MDEwMjE5NjQsNDAyNTc2Ny43MjQzNDY5Mzk1LDUwMzMyMjMuMzkyNDg0NTExLDEwMjIwOTkuNjc0NzI5NDc4NCw1OTc1MDA2LjA4OTE0OTgyNCwxMTgyNDg4LjE0ODQyMDY4OTksMzEzOTA1MC44ODExNzc4MTMsMjgwNTczOS4yOTkwNDg4MDY1LDY0NDA3NzkuNTEyODc2OTI2LDQ2NjYxMTguNjk5Mzc3OTgsMTMxMjI4NS45ODgxOTU0MzcyLDM4MTkzNDcuOTQ3MTc5NjIzLDI1NDM1NzguNDE1MjUxNTI2LDM3NTc2NjQuMDMyNjk2Njc5Nyw0MTcyNzkwLjY2NDUzMDc2MSwzNzEyMDc1Ljc2NTc2MzM5ODcsODQ2MTU5NS42MzA4OTk5Myw1Mzk2MTAuMjgxMzk0MTA5MSw2NzU2LjM5MDEyNTMyNjQ2MworMTAsVGh1IDMgRmViIDExLDI5NzI0OC4wNzgzNjI2NTE0NiwyNjUzOTkuMTQ2MzIzMTE3NSwxNTQ0ODMuOTAxNjQzMDA1NzUsMzE5MzU2Ljc2MzM3NjE4NjksMzIxOTEwLjQ4NzAwMTY3MzQzLDUyMDM4MDcuOTI2ODAzNjg0LDU2NTQ5NzQuMDc5MDgxMTM2LDQ2MzQ3OTEuMjkzMDI3MzYzLDQwMjU3ODMuNDI1NTI0MDA5LDUwMzMyNDMuMTc0MzY3NjcxLDEwMjIxMDMuNzI3OTc0MDQ2NCw1OTc1MDI5Ljk0NDcxNjAxOSwxMTgyNDkyLjg3ODM3MzAwOCwzMTM5MDYzLjQyMDIwNjE3OSwyODA1NzUwLjQyMDY2MjQ0NjQsNjQ0MDczNi41NDc2MjcxMDcsNDY2NjEzNC41NDI1NTEwMzcsMTMxMjI5MS4yMzczMjU5NDU2LDM4MTkzNjMuMjE0Mzk4NjI5NSwyNTQzNTg3LjUwODc5NTksMzc1NzY3OS4wNjMzNDY4OTYsNDE3MjgwNy4zNTU1MDMxMSwzNzEyMDkwLjU4MjM2MDA5OCw4NDYxNjI3LjczMTg2NTUzOCw1Mzk2MTEuNzQ3MDMyNjQ1NSw2NzU2LjQxNzE0NjA1NTQ4MgorMTEsRnJpIDQgRmViIDExLDI5NzI0OS4yMTE5NTg2NTIyLDI2NTQwMC4xODExNjQ5MzAzNCwxNTQ0ODQuNDkzODMxNTY3NDcsMzE5MzU0LjM2NDU0NzY4NzA2LDMyMTkxMS43NzMzNzU0MDMzNyw1MjAzODI2LjExMzg0OTAxNiw1NjU0OTk2LjY5NTI2NDU5OSw0NjM0ODA5LjY2NTY3MDE2Miw0MDI1Nzk4LjMwODY1NjQ0Myw1MDMzMjYyLjIxMTUxNjg2MiwxMDIyMTA3LjY5NTkxNTA3OTMsNTk3NTA1My42ODQ1MzE4MywxMTgyNDk3LjYwODM0MzI4NjcsMzEzOTA3NS45MTU3MTQ5MTAzLDI4MDU3NjEuMjkxMzY1MTExNyw2NDQwNTc5LjI3MzQ0NzI1Nyw0NjY2MTQ0LjU1OTg5OTE3NjUsMTMxMjI5Ni40ODY0MzQ3ODgyLDM4MTkzNzguNDU1NDg3MTMwNywyNTQzNTk0LjM4ODkyOTI5MywzNzU3Njk0LjA5NDAzODUwNTYsNDE3MjgyNC4wNDU4OTMyNzcsMzcxMjEwNS4zMTkxNjQ0MjgsODQ2MTY1Ni4yMjQ3NjI5NTQsNTM5NjExLjkwNjAxNTM5MzYsNjc1Ni40NDQxNTEzODMzMDgKKzEyLFNhdCA1IEZlYiAxMSwyOTcyNTAuMjI3OTgzMjYwNzYsMjY1NDAxLjE1NTMzMzI2NzEsMTU0NDg1LjAyMzE5OTkxODksMzE5MzQ1LjUyMjgyNTk1OTI1LDMyMTkxMy4wNTYzNDUwOTg2LDUyMDM4MzkuMDE2MTY2MTg0LDU2NTUwMTkuMzAxNDIzMDYzNSw0NjM0ODI3LjYxMjQ3MDc0OSw0MDI1ODEwLjY4Mjg2MDkzNCw1MDMzMjc4Ljg5MDY2OTQ3OSwxMDIyMTExLjM3MTkxMjExNTEsNTk3NTA3Ny4wMDA0OTcxODUsMTE4MjUwMi4zMzgzMjc5MzYxLDMxMzkwODguMjU1OTM5NDMyLDI4MDU3NzEuMjc3NDcxNTA4NCw2NDQwMTEzLjkwNjEyOTQyNiw0NjY2MTM2LjUyOTYxNDUyNywxMzEyMzAxLjczNTM4NzI4NzgsMzgxOTM5My42MDE4MzIxNzMsMjU0MzU5NC40NTY4MzEyNjEsMzc1NzcwOS4xMjQ3MTIxNjYsNDE3Mjg0MC43MzMzODQzMzQ1LDM3MTIxMTkuNzczMTg2Mzg5NCw4NDYxNjczLjUyOTE4MTcwMiw1Mzk2MDguMjg3MTA3MzQ1OCw2NzU2LjQ3MTA5MjIwNDkyNAorMTMsU3VuIDYgRmViIDExLDI5NzI1MC44ODgwNDYwNjE0LDI2NTQwMS45NDA2Nzc4NTI5NSwxNTQ0ODUuMzQ5MjY1ODMwNjIsMzE5MzE5LjIzNDg3MDQ3MDM2LDMyMTkxNC4zMjc2NDk1MDE0NCw1MjAzODM2LjQyOTI0NjY1Miw1NjU1MDQxLjg3Mjc2MTE4MSw0NjM0ODQ0LjE0MjAwOTYxNiw0MDI1ODE1LjU5NzM3NTI2NjMsNTAzMzI4OC4zNzM5MDA2NjUsMTAyMjExNC4xMDY0MzE5ODM4LDU5NzUwOTguODc4NjI3MDQ5LDExODI1MDcuMDY4MzEzNDE2NiwzMTM5MTAwLjA3OTQyNTkzMTQsMjgwNTc3OC4zNDA1NzExNzIsNjQzODgyNy44NjQ5ODAwNjksNDY2NjA3NC40MDk5MDE4MjQsMTMxMjMwNi45ODM3MTAxNDc0LDM4MTk0MDguNDI5MjEzMDAxNCwyNTQzNTc0LjIxODYwNDk5MzUsMzc1NzcyNC4xNTUxNTg4NTU1LDQxNzI4NTcuNDA5Mzk5ODcxNywzNzEyMTMzLjI5MDc4MTI3NSw4NDYxNjU3LjI3MDE0ODgyMSw1Mzk1OTMuOTk0MjM2NDgyLDY3NTYuNDk3Nzk2MDMxMjQ3CisxNCxNb24gNyBGZWIgMTEsMjk3MjUwLjQ2MzgwNzk2NDM1LDI2NTQwMi4xMzc4NDQ3Mzc3LDE1NDQ4NS4wMTc0NjM2NDA5LDMxOTI0NS42NzgwNjg0NjgzLDMyMTkxNS41NTg3MTIzMTg1LDUyMDM3ODguMjk3NDY5NTY3LDU2NTUwNjQuMzIyNTQwMjAzLDQ2MzQ4NTUuOTM3NTgwOTEwNSw0MDI1Nzk4LjIxMzM5NDEwODcsNTAzMzI3NS43NTI3NzU5MDcsMTAyMjExMy44MDM2NzgwMzYyLDU5NzUxMTUuODUwMzAwODYyLDExODI1MTEuNzk4MjQ0NDkyMiwzMTM5MTEwLjE3NzYzODMzMSwyODA1Nzc1LjY5MTkxNzI0OSw2NDM1MzUxLjY3MjAzMDE0Myw0NjY1ODQ5LjM5MzA3ODMwNiwxMzEyMzEyLjIyOTY2ODQxOTMsMzgxOTQyMi4xNzczMDkyMjUsMjU0MzQ5My4xNzM3NjU1NjksMzc1NzczOS4xODQ2MDgyNjI1LDQxNzI4NzQuMDQwMDUxMDA3NiwzNzEyMTQzLjY5ODIzOTg2MzQsODQ2MTUzOS44MDA3NjgyNDUsNTM5NTQ5LjUwMzA2MTI0MDEsNjc1Ni41MjM2MzUyMDc0MzUKKzE1LFR1ZSA4IEZlYiAxMSwyOTcyNDYuNzgwOTk2NzM4NSwyNjU0MDAuNTM3MjY1NzYwNiwxNTQ0ODIuNjA5MjA2ODU3MDcsMzE5MDQ1LjI5OTYyMjIzNTEsMzIxOTE2LjY1NTMzOTY2Nyw1MjAzNjA3Ljc3NjYxOTc1NCw1NjU1MDg2LjM2MjIwNTQyNiw0NjM0ODUyLjM1NTYyMjQzNiw0MDI1NzE0Ljk1NzI4NjE1LDUwMzMxOTYuMTk1Mjg2ODUyLDEwMjIxMDMuOTM1ODA0NDE5OCw1OTc1MTE2LjU4MzMwNjM0OCwxMTgyNTE2LjUyNzkxNjM2MTgsMzEzOTExNC42NzQyNzA4MTE1LDI4MDU3NDEuNjExNDQ3Mzg0LDY0MjYxMDIuMTIyMTY3Njk1LDQ2NjUxNDAuNDgyMTU4OTQ4LDEzMTIzMTcuNDY3MzA4NjQwNSwzODE5NDMyLjM3OTE0MjgxNywyNTQzMjMyLjM5MDk3NDM1MiwzNzU3NzU0LjIxMDQwNTEyNDQsNDE3Mjg5MC41MDI1MDA1MTMsMzcxMjE0NC4wNTM5NjU2MDk1LDg0NjExMjEuMDk1MzEwNDAxLDUzOTQyMC40NTU0MzU5NDEzLDY3NTYuNTQ2NDcxMjc5MzYzCisxNixXZWQgOSBGZWIgMTEsMjk3MjMzLjMyNjkwMDI0MjUsMjY1MzkzLjQ3MjMwODU5NzQsMTU0NDczLjcwMTMzMDcxMzA4LDMxODUwOC45OTU4MTc5ODM3NiwzMjE5MTcuMzA1ODgxOTc4NzcsNTIwMzA0My43MTYzNjIzNTEsNTY1NTEwNy4wMjY3MDMxNSw0NjM0Nzk5LjE3OTM5MjY3NCw0MDI1NDM3LjQ5ODU4NzEwOSw1MDMyOTE0LjQwNDQ2NDIwODUsMTAyMjA2NC4xNjkzMzg4OTEsNTk3NTA2My45NDczNzk4NjMsMTE4MjUyMS4yNTY1NjI4Mjg2LDMxMzkxMDEuMTE2MDgyNzE0LDI4MDU2MDYuNDQ3MTA2MTYsNjQwMjAxNC4yODMyMzg4MTUsNDY2MzAwMS42NjYyNjY0NjMsMTMxMjMyMi42NzYyMTIwNzg3LDM4MTk0MzEuMDA4NDA0MTk3LDI1NDI0NDIuNTkxODk1Nzc2MywzNzU3NzY5LjIyMzM4NTYwOSw0MTcyOTA2LjM0OTUxMTEyNCwzNzEyMTEyLjE2MDA4MzU2MzUsODQ1OTgwOC42MDc2NjIzMzMsNTM5MDU2LjI4MjY1MzQwMTMsNjc1Ni41NTkwNTMwOTM5NzIKKzE3LFRodSAxMCBGZWIgMTEsMjk3MTY5LjQ2Mjc5ODY4MTksMjY1MzU3Ljc5MTM5MTk1OTEsMTU0NDI5LjU0NTQ0Mjk4NywzMTY2MTguMDU3NDQ0MzAwNSwzMjE5MTUuMzI4NDYxNzM5MzUsNTIwMDYwMC4yMjk0NjI5NjMsNTY1NTExOS40NjYyNTMyMDE1LDQ2MzQ0NjQuOTEzNjUxMDgyLDQwMjQxODEuNzg5NzM0MDA1LDUwMzE1NzkuMTgxNzE1NjU3LDEwMjE4NjIuMTgwODM4MjY1Myw1OTc0NzAxLjA4NjU5NjgzNCwxMTgyNTI1Ljk3ODA0NDEzLDMxMzg5ODUuMjkwNjg5NzQ4LDI4MDQ5MDEuMzE5NTg4OTU4Myw2MzI1NzQ3LjU0NjM3NDQ2NCw0NjUzNzk0LjExNzg1ODk1OCwxMzEyMzI3LjcwODE4NjcxMTIsMzgxOTM2Mi45NzY1ODM1NTg2LDI1MzkwMzAuNTI2NDQ5MTQsMzc1Nzc4NC4xNTY0ODg4ODUsNDE3MjkxOC4xMDc0NTg4NDEsMzcxMTg5OC43NjYxMDc0ODU2LDg0NTM5NzkuMDUzNjMwMjM3LDUzNzYzMi4zODQ5NDI1MTk4LDY3NTYuNTA5NjIyMTE2MzM4CisxOCxGcmkgMTEgRmViIDExLDI5NjkxMy4xMTE4NzgwNDU0LDI2NTIxMS4zNTA5OTEwODAzLDE1NDI0NS4wMDI4NTExNDc1OCwzMTIwNTguODkxNDYzNzA5NiwzMjE5MDEuNjAyNDY1MzU1Myw1MTkxNTI3LjAwMDMwNzgzMiw1NjU1MDk0LjM5NzQ5NjEzLDQ2MzI5MzAuNTAxNzc3Njg3LDQwMTkzMTUuNDIxNTI1NDIsNTAyNjE5Mi4yMTkyMzYxMTUsMTAyMTAwNy4zMzkwMTE1MzYyLDU5NzI5NzYuMjc3MjU0Njg2LDExODI1MzAuNjYxNzgxNDg5OCwzMTM4NDMxLjk1NjAzNjEwNywyODAxODE3LjA3NDY0MTQ0Myw2MTkyOTM2LjcxOTgwNDU2LDQ2MjIxNTEuNTE2MDgyMDQzLDEzMTIzMzEuOTE1ODM0NDcxLDM4MTkwMDQuODY4NjkzOTY4LDI1MjY4MzguNTUwMDc2NTU2NCwzNzU3Nzk4LjcxMjc2MjQ0NSw0MTcyOTA5LjIyMjQ2Mzg4NCwzNzEwOTE1LjgxODYyNjE0MSw4NDMxOTAyLjI4Njk1NDM3LDUzMzI4Mi4zMDk1MDM3MDM2LDY3NTYuMTc4MzY1NzQ3MjcxNQorMTksU2F0IDEyIEZlYiAxMSwyOTU4NDQuNTI2MTAxODUyOTQsMjY0NjA2LjYzNTE1MjQ5MTYsMTUzNDcwLjQzNTkzMjYwMDQsMzA1MTIwLjU4MjM5MzM4MDkzLDMyMTgyNC4zNDg4MjcxODgyLDUxNTg3MjguNjI3ODYwMDQsNTY1NDg1OS4zODMwODk4MDgsNDYyNTM3Mi45NDM4ODg3MjIsNDAwMDIwMS45MjI4MjQwMzE3LDUwMDM5MDkuMzAzOTI4NDQxLDEwMTcyNjAuNjk5OTY5NzUyLDU5NjQxOTIuOTE0OTcyMzUsMTE4MjUzNS4xMDE2Nzk1NDA1LDMxMzU2NDAuNDAxNDE5NTMsMjc4ODE2Ni43MDQ3ODU1MzIzLDYwNDA2NzYuNjgwNzczMzgxLDQ1NDQxODkuMjQ1MTUwMzAxLDEzMTIzMzEuNDQxNjMxNjMyNiwzODE3MTUyLjMzNDQ2NDEzNzQsMjQ5MTk1MC4wMzM0NTkzNzIsMzc1NzgxMS4wOTU4MjU3MTQsNDE3Mjc3Mi45NDczMTIyNzQsMzcwNjA3NC44MzY4NjkzNTYsODM1NTE1NC44ODI0MjI2OTEsNTIzODEwLjcxNDY5NDI1Nyw2NzU0LjMwODI0MzIxNDUwMQorMjAsU3VuIDEzIEZlYiAxMSwyOTI1NjQuNzM1NDE2ODQwOSwyNjI4MjkuMjA5OTQxOTc0NDMsMTUxMzQ1LjE4MTIwODg2MTMsMjk3NjY4LjEzNDU1MDY1MjA2LDMyMTQ0Mi40OTIzNjE2MzEzNiw1MDgwMjY3Ljg3MDkxMTU3Myw1NjUzNTM5Ljk3Mjg0NTQ1Miw0NTk0OTk0Ljc1NzY5ODc1NCwzOTQ3Njg4LjI3NDg1NzM3MSw0OTM5ODQ0LjUwMDA3OTM4OCwxMDA1NjYwLjM1NjE2MDIwNzQsNTkyNzUwMS4xNTY3OTMyNzIsMTE4MjUzOC4wNTg1ODA4MTg2LDMxMjM0MDIuNTg2MjU5MjU1LDI3NDk0ODQuODQ3Mjg1NzYwNiw1ODkzMzM2Ljg1MDQxOTQzMiw0NDQwMDE5LjExMjA4OTAyMSwxMzEyMzA2LjU1NTkzMjM5OTEsMzgwODg3NC45MDAyOTcxNTEsMjQzODI4NC4zMTk5MDE0MzU2LDM3NTc4MTEuOTA2NDY3NjMxNSw0MTcxOTA5LjQ2NzAxNDc4NSwzNjg2MDM4LjI5MTM3MTU0NTgsODIwMDk1My4xNzUxMjg0NjcsNTExNjc5LjY4ODE1NTYzNCw2NzQ1LjEzNzA3NjA3NzYKKzIxLE1vbiAxNCBGZWIgMTEsMjg2NzYxLjE2Nzk3Mjc3ODY3LDI1OTI2Ny41OTI4ODQ2NzA2OCwxNDgwOTMuNzcxMjczMzczMzQsMjkwNTgyLjE1NTc0MDAzMDgsMzE5ODE2Ljg2NDg3NDY4ODEsNDk2ODM0OC40NTc4MTIzODksNTY0NjgyNy4wMjEwMjc1MDEsNDUyMTExMS43MjIxMjQwMDUsMzg2NDU4NS41ODg3ODc5NTUsNDgzNjQ3NS4wMDY5ODk4MTUsOTg1NDgyLjQxNzc5MTE4OCw1ODM0NzI3LjM5NzgyNzgxLDExODI1MzEuNjc1NTYyNDc0OSwzMDg1NzQ1LjczODI2MTk5NCwyNjkwMjI5LjY1MDcwNzQzMSw1NzYwNzQwLjAxMDMwODA5OCw0MzMxNTEyLjY2MjQzMTExLDEzMTIxNTUuODc0NjU5ODM4LDM3NzkwODEuMjAxMTM2MTYwNiwyMzc5MjMyLjk5ODMzMjQ0OTcsMzc1Nzc1MS4wNjI5NzYwNTcsNDE2NzAxMi4yNTk2NDcyMTY2LDM2MzI1MzYuOTQ3MzU1MDA1LDgwMDkzMjUuMDI0NDA5MDA0LDQ5OTIzMy4zMzEyMjAwNDYyNyw2NzA4LjU3MjU5MDA4NTg1NQorMjIsVHVlIDE1IEZlYiAxMSwyNzk5ODkuNTk4MTc2NzQyMSwyNTQxNDguNzEwMjI0NzIyNSwxNDQ1MjguNTU4MTUyNjg2NzgsMjg0MjQyLjY2ODQ0NDE4ODU0LDMxNTQzMC4xMDU1NDA4OTMzLDQ4NDg2MTguMzYyODY1MjY3LDU2MTkyMzEuMTkzNzc5ODI0LDQ0MjAzMDUuNDEyMTMzMzczLDM3NzIwODYuMzU5MTE2MjA0LDQ3MjA3MjMuNTY5MzU0NDYxNSw5NjIxMjkuMTIxNzA1NjM0Miw1NzA1NjI1LjY3ODU3NTAwNywxMTgyNDcxLjQ4MDAyMDI5NzIsMzAyMzE3Ny40ODYzMjA4MTIzLDI2MjUzMzMuMTc4NTUxNDY3LDU2NDU4ODkuOTUyMzc4OTg4LDQyMjk2NjcuNTEwMjAxNTMwNSwxMzExNDIzLjE0MzcyMzU1NzcsMzcxNTEyNi43MTU5OTc0MTc1LDIzMjIzNTUuMDg3ODQyMTU1NywzNzU3Mzg5LjE3ODQxNjMyNDMsNDE0NTM1MC43MjMzOTQ0OTM2LDM1NTQxMzMuOTgzNzQwMTM0Niw3ODE1MTc1Ljc5NTM1NzcwOCw0ODc2MzguMzUyODMyNjUxMzUsNjYxNi45NzE4MTk2MjI5NDQKKzIzLFdlZCAxNiBGZWIgMTEsMjczMjUzLjIyMDM2OTA2NTY1LDI0ODMxNC4zODkyODE1Njk0MywxNDEwODEuMDY3MTg1NTAwMDMsMjc4NzcxLjM5Mjk4MjU5OCwzMDg3NTYuNDI4NzM5MzA2NCw0NzM0MjIwLjQyMTIyMTk4NTUsNTU0NDIyNi43MDQyMDE1NDYsNDMxMzQ0MC42NDU2NTg1NzYsMzY4MjAwNi44MDU4ODI5NDc1LDQ2MDc2ODUuMDQzMzg3MDM0LDkzODk3OS44NjA0NDQ5NTQ4LDU1Njc3MzkuNDM5ODM3OTQ1LDExODIxMjguNzg4MzA4MzQ4NywyOTUxNDA5LjkzMTI4Mjk5NDMsMjU2MjYxNS40NDU2MjU4NDUzLDU1NDg4OTYuNDY4NzYwMDQyLDQxMzkwODEuNDMwNDQ4OTY2LDEzMDgyNTYuODExODA3MzcyNiwzNjMxMjgxLjM1NjkxNjkwNjMsMjI3MDk4My44OTMyOTk1MzQsMzc1NTYyOC4wMDE1NDY5MzEsNDA4NzAxNi4wMzU5NDgzMTMzLDM0Njg2NTIuMzEwODA4NjI1LDc2MzQ4MDEuMTIwNTU3MzQ4LDQ3NzM3Mi4xMDk4OTEzMDI1Myw2NDc4LjQ5MzA3OTAzNDU0MworMjQsVGh1IDE3IEZlYiAxMSwyNjY5MTcuMDMzMzIxODgyMywyNDI0NjQuOTk1NDI1MDkyMTQsMTM3ODgyLjg3OTkwNzk3MTk1LDI3Mzk5OS4zMDkyNDU3MjY4NSwzMDEzNzUuNTg3Njk3MTM5OSw0NjI4NzMwLjk2MTUyOTMzOSw1NDMyNjc2LjgwNjUzNjc3Niw0MjA5OTcwLjk5NzAxNTY0ODUsMzU5ODE0OC4zOTU1MjU1MzgsNDUwMjMwOS4wMjQ3NDQ4ODksOTE3MjQyLjkzMDI4MjEzNyw1NDMzODAyLjAyMTg1Mzc0NywxMTgwOTg5Ljc3ODY0NzEzMjIsMjg3OTYzMC42Njc5OTAxNjM0LDI1MDQ0NDkuNzM5NjA1Nzk1Niw1NDY1MzkyLjI2ODE4MjU4Niw0MDU4Njg2LjQ5MDMxNTI2MywxMjk5NzQxLjYwMjIzOTE3NDgsMzU0MzIwMi4xMDk5MTAwNTMsMjIyNTAwMC44NDgxMDMyMjM0LDM3NTAxNTUuNDMyNTM3MjIxMyw0MDAyNzYyLjA3NTUwMTk4MSwzMzg0ODg5LjYwODc1MzExNiw3NDcwODY2LjgwODU1MDY0NSw0NjgyODQuMjgxMzUxNjY1MjcsNjMyNC42MzczMjkyMjczNDUKKzI1LEZyaSAxOCBGZWIgMTEsMjYxMTUzLjAzNjI4OTAyODMsMjM2ODc4LjI2NDEzNDE5MTI3LDEzNTAwNi4wNjQ1NTI4MTMxLDI2OTkzMS41MTE0NjA0MjY3LDI5Mzg1My4xMDU4NzM4NTUxLDQ1MzQzMTMuMDcwMzc3NjEsNTI5ODkxNC40MzM3ODQzNDksNDExMzY4My41NjkwNjg5OTksMzUyMjQ5OS4yMDIxNTYyNTI3LDQ0MDcxNDIuMTEwNzI1MDc5LDg5NzQ5Ni4xMDYzMDgxMTAxLDUzMDg4NTQuNjA5MTQ1MTg3LDExNzc5OTEuOTExNDA4Mzg3OCwyODExMjAzLjc0MzYyNjc1MjQsMjQ1MjE0MS4yMzkzMjI4NDgsNTM5NTA3MC41MjIwNjk4NDIsMzk4OTA2Ny45OTMyOTU4NTk1LDEyODE4NTEuNjQ1ODM0NjQ0MywzNDU2MzI5LjczNDcwMjIyNSwyMTg0ODc4Ljc0NjAyNDEzOSwzNzM2MzAyLjY2OTgxMTg1OSwzOTAzNTEyLjI1NzExOTgxOTUsMzMwNjIzMi4yMjE4MTkyMjk0LDczMjU5MjQuMTA5MjI4NTIsNDYwNDMyLjcxOTgzMTI5OTg1LDYxNjcuMzgwMDE5ODA0NDEzCisyNixTYXQgMTkgRmViIDExLDI1NjUxNi45MDYyNDg2ODk4MywyMzIxNzMuODkwNjU1NTE5OTYsMTMyNzE3Ljk0NzM0NzA2Njk4LDI2Njg3NC45NTE1NjcxNzMyNCwyODcxNjEuMTAxMDgzNDA0ODUsNDQ1OTU5Mi45NTE3ODYzMjgsNTE2NTY3Mi4xODEyMzIwNDgsNDAzNDUyNC4zMjgyMzM1NDgsMzQ2MjE1Ni4zODc0Nzk1Mjc0LDQzMzExNDUuODM1OTA5MTI5LDg4MTYzNC43NTIzNTI5MjEzLDUyMDU4OTUuNTk4OTI0OTg0LDExNjU3NjguNjE5ODg5NTk1NSwyNzUzNjg0LjU5NTYwMTU1MTIsMjQxMDU0Ni45ODAxMDY2NTYsNTM0Mjk0My4yMTUyNjc1MjksMzkzNTg0OC41MjM2MjYzOTMsMTI0OTgzNC4wNDA0MDQ4OTUzLDMzODExMDIuNTk5NzY3NDYyNCwyMTUzOTU3LjM1NjE5Mjg1MDUsMzY4NjA2OS40NDEzMDM3MTYsMzgwNTcyMy42NzUyNTA4NzUsMzI0MTAxNy4wOTE1NTc2MjM0LDcyMTI2NTQuODIyNDQ0MjYzLDQ1NDQ0NS40ODQ5NDM0MzAzLDYwMjcuMTY0MTc2ODE0MjIzNQorMjcsU3VuIDIwIEZlYiAxMSwyNTI0MjMuMjcyNDgxODg0NzUsMjI3OTY5LjI4ODY4Mjg1NjM2LDEzMDcwMy43MzM4NTA2ODc3NywyNjQyMjYuODUxMDU1NTkzOCwyODEwOTguMDA0NTUxNTExMTQsNDM5MzkwNy44MTU5NzgyNDgsNTA0MTg0MS45NjUzMTIyNiwzOTY0MjE3Ljk0ODM0OTE5NiwzNDA4OTk0LjkxMjI2MjY3NjMsNDI2NDE3My41MDM4MDk4NzIsODY3NjM0LjU3MjM2NzU0MzIsNTExNDM5NS4zMjMzOTQyMTcsMTE0NTg5NS41NTY5NzQ4MjUsMjcwMjMwMS4wOTgyMTc0MDQsMjM3MzkzNC4zNzEyNjEzMDIsNTI5Nzk1Ny4xOTc5NTYzMTcsMzg4OTUxNS43Mjk5NTgyNTMsMTIxNzMwMy4yMzE0NjQ5NTM5LDMzMTMzOTIuNzg3MTk2OTQ1LDIxMjY5NzUuMjA2NTIzNjA4LDM2MTM0NDQuNzk4MzY2MDYzMywzNzE1MDUyLjM2Nzg3NDY3MTcsMzE4Mjk2Ni4yNjQwNjY3ODEsNzExMzQyOS4wNTc1MzcwNiw0NDkyMzYuNjE5OTk0MzY0Miw1OTAwLjA1NTQ3Nzc1NDgyNworMjgsTW9uIDIxIEZlYiAxMSwyNDkyMzUuODU1MTE0MTA1MjQsMjI0NjMxLjY3OTY0NTU1NDUsMTI5MTQzLjExNDQ4MjU1NjU3LDI2MjIyNy44MDU2MDU1MjU2LDI3NjE4My40Mzc2MTA3MzM0NCw0MzQzMTI3LjY0NzI5ODA4NTUsNDkzNzY0NC45NTIyNDY1MzcsMzkwODk2Mi4xNzk4Njg3MDIsMzM2Nzc1Mi4zNDkzNDk1MTIsNDIxMjE5MS4yMTY1NTg1NjM1LDg1Njc0MC4xMTc4NTQ2NzA3LDUwNDI0MTMuMTQxOTk5NjQwNSwxMTE2NzU0LjAwNTgyMzk4MTUsMjY2MTU0Ni41MjkyNjgxMzQ0LDIzNDU1NzAuMDY2NjY1OTc1LDUyNjQyMTMuNjE0NTk0Mjk2LDM4NTQyNTkuNjE0ODA3MjU5MywxMTg2NTk3LjQ5NTYwMjY3NDMsMzI1OTA1OC4zNzg3NTg2NTMsMjEwNjM2NS44ODE3Nzg5Mzc4LDM1MjAwNjEuMjI0Nzg1MTcxNCwzNjM5MDA4Ljk4OTI1MDIwNSwzMTM3MTgxLjM5MDk3Mjk2NSw3MDM3MTU0LjAxNTE2NzU2OCw0NDUyNzcuNDgwMzI0Mzk4OCw1Nzk2LjkzODAxOTQ3Mjc0OQorMjksVHVlIDIyIEZlYiAxMSwyNDY2ODAuMTY2NTE1Njc4MDIsMjIxOTI5LjM5NzE0NTIyNjA0LDEyNzg5NC44OTc3ODg5MDE4NCwyNjA2NDkuMjI1NDI2NDU2MTMsMjcyMTYzLjg0NzI4NTI3Mjk2LDQzMDI1NTcuMzI1NTQxOTY1LDQ4NTA5MDEuMjc2MDc3OTQ0LDM4NjQ0NTAuODA1NDc4MzMyNiwzMzM0NzQ0LjI2MzY0NTYyNiw0MTcwNTc3LjcyNjAxMDc4Niw4NDgwMDcuNTI4MjQ1MTY2Myw0OTg0Mzk5Ljg4MjgxNzExNzUsMTA4NzY4MS4zMTA1ODA3MDQsMjYyODU2Ni45MDM5OTc0NzA2LDIzMjI4ODUuMTY2NjI0OTM3Nyw1MjM3NjQ2Ljk1MzIxMTk3NCwzODI2MzE0LjE4MjM4MzE4NTcsMTE1OTc0Ny43MDA0MjQ4NjkzLDMyMTQ4MzUuNjc1ODM0Mjk2NywyMDg5OTk5LjQ3NzQ3Mjc0ODEsMzQyOTgxNy45NjU2MDI2MzgsMzU3NTgwMC4yODA0MTgwMjY3LDMxMDAyMzQuMzcwODExMDg3LDY5NzYzODguOTY5MjA5Nzk1LDQ0MjE0MC45NDYyODYxNTkwNCw1NzEyLjU2MzU5MzE0ODg1MQorMzAsV2VkIDIzIEZlYiAxMSwyNDQ2NTYuNDAyMTg4NjkwNTgsMjE5Nzc0LjA0NTgzMDA1MTgyLDEyNjkwOC4yNTk5NDgzNjIxMywyNTk0MTIuMzM0MTY4Mjc0NSwyNjg5MzQuMzY3MDA3OTA1Myw0MjcwNTE0LjA3NDU3NjgxNjUsNDc4MDMxMy4zMjA3MjMxMjYsMzgyOTA4NC4wODkxMDk0ODk3LDMzMDg2NDEuMDMzMTE3MDksNDEzNzY2My42ODM5MDk1MzczLDg0MTA5NC4wNDI1NjQ1NzE2LDQ5MzgyODkuMDM3Mjk5MDEsMTA2MTE5OC42NjcwMjU3Njc1LDI2MDIyNzUuMzM4NjAzMDg1NCwyMzA0OTU1LjE2MzcxOTQ1NCw1MjE2ODY5LjQ2NjcxODE3OSwzODA0MzY1Ljk1NDAyNTk3MiwxMTM3MTQ2LjE1NzgzMDM1NTcsMzE3OTQzMi4wOTM2Njg5NjUsMjA3NzEyOC42NDI4MjA1NiwzMzQ5MDQ3Ljg0MTM4Mzg4MSwzNTI0NDIwLjMyNjExMjA4NywzMDcwODQwLjA4ODU0MDUzNzcsNjkyODQ5NC42OTQ0MDQzMDYsNDM5Njc4LjMxMzM2NTg1MDI1LDU2NDQuNzUyNjg1NDA4MjEKKzMxLFRodSAyNCBGZWIgMTEsMjQzMDY4LjU4MjMyNjgwNzYsMjE4MDc0LjEzMjkxODE3MzI0LDEyNjEzNS4xMTkzMTQ5NDk4NCwyNTg0NDguMDY3OTkxODY2MTgsMjY2Mzc0LjQzMTMyMTMxMTMzLDQyNDU0MTcuMzQ0OTkwOTg0LDQ3MjM4NDUuMTYzNDIyMzg2LDM4MDEyNzAuODA5MjAxMDc4NSwzMjg4MTc5LjUxNjExMjU0MjcsNDExMTg2MC42MTYwMDA5NjgsODM1NjcwLjY5NDc5OTM5NjMsNDkwMjAxNy40NTc1ODY2MTUsMTAzODM2Ni42MzcwMjk3MDQ2LDI1ODE1NTAuMjA3ODIzNTY0OCwyMjkwOTA1LjcyMjY5NjQ3LDUyMDA2ODQuNjc1MjkyNTYzLDM3ODcyMzcuNjgyMDcyNTU4NCwxMTE4NjMwLjM1OTQwNDkyODMsMzE1MTQzOS45NDMzMjU1OTgsMjA2NzA3Ni4zOTE3NTA0MDE2LDMyODAxNjEuOTQ5MTc3Mzg0LDM0ODMzNTAuNDkyMDE4NjI3LDMwNDc3MDIuNjQzMzc0MTE2Niw2ODkxMDM1LjM0MjkzNDg4LDQzNzc1Ni43MzM0NDk3NjYyLDU1OTAuOTg3Mjg2OTc4OTkzCiszMixGcmkgMjUgRmViIDExLDI0MTgyOS42ODIyODg1NDM3NiwyMTY3NDIuOTY1NTg1NTgxMiwxMjU1MzIuMzM4ODI3MjMyNjMsMjU3Njk3LjY2OTMzMDU4NzIzLDI2NDM2My4zOTEwMzYxODY3LDQyMjU4NTUuODE2NTY1NTgyNSw0Njc5MTk5LjA5MDg3NzU2NCwzNzc5NTM3Ljg0NDQ2MjYwMiwzMjcyMjIzLjM5MDc5MDM2MTQsNDA5MTczOC4wMjM3NDQ3Njg1LDgzMTQzOS41OTU2NjE3NjExLDQ4NzM2NzAuODc0NzIxNTM3LDEwMTkzNjQuMjY2NjQ3NzUzOSwyNTY1MzMwLjU5MjkyOTUzNSwyMjc5OTUyLjYwMjgwNjQ0NzUsNTE4ODA4Ny42MTQ4NTgxMTksMzc3MzkxMS41ODc4OTA1MzgsMTEwMzc0My4wNzc4NzM2MzA3LDMxMjk0ODguMjA2MjY2ODAxLDIwNTkyNTMuMDAyNzkwNzM5OCwzMjIzMjM1LjcwNDA5MDk4NzMsMzQ1MDg5Ny4yNTQ5ODUzMjgzLDMwMjk2MTIuNTA5NDQzMzgwNCw2ODYxODYxLjM1OTYwMDE0Nyw0MzYyNjEuNjIwMzQzMTIyMiw1NTQ4Ljc0MTgzNTU5OTYwMwpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Ob25aZXJvTW9ydGFsaXR5UmF0ZV9GRF9SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vUl8wLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvTm9uWmVyb01vcnRhbGl0eVJhdGVfRkRfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL1JfMC5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmMyNDQwMQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvTm9uWmVyb01vcnRhbGl0eVJhdGVfRkRfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL1JfMC5jc3YKQEAgLTAsMCArMSBAQAoraXRlcmF0aW9uLHRpbWUsCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L05vblplcm9Nb3J0YWxpdHlSYXRlX0ZEX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9SXzEuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Ob25aZXJvTW9ydGFsaXR5UmF0ZV9GRF9SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vUl8xLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYzI0NDAxCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Ob25aZXJvTW9ydGFsaXR5UmF0ZV9GRF9SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vUl8xLmNzdgpAQCAtMCwwICsxIEBACitpdGVyYXRpb24sdGltZSwKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvTm9uWmVyb01vcnRhbGl0eVJhdGVfRkRfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL1JfMi5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L05vblplcm9Nb3J0YWxpdHlSYXRlX0ZEX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9SXzIuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkzZmJlNzQKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L05vblplcm9Nb3J0YWxpdHlSYXRlX0ZEX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9SXzIuY3N2CkBAIC0wLDAgKzEsMzMgQEAKK2l0ZXJhdGlvbix0aW1lLEVHLUZSRy1HMjEwMDAxLEVHLUZSRy1HMjEwMDAyLEVHLUZSRy1HMjEwMDAzLEVHLUZSRy1HMjEwMDA0LEVHLUZSRy1HMjEwMDA1LEVHLUxPRS1HMjQwMDAxLEVHLUxPRS1HMjQwMDAyLEVHLUxPRS1HMjQwMDAzLEVHLUxPRS1HMjQwMDA0LEVHLUxPRS1HMjQwMDA1LEVHLUxPRS1HMjQwMDA2LEVHLUxPRS1HMjQwMDA3LEVHLUxPRS1HMjQwMDA4LEVHLUxPRS1HMjQwMDA5LEVHLVVQRS1HMjkwMDAxLEVHLVVQRS1HMjkwMDAyLEVHLVVQRS1HMjkwMDAzLEVHLVVQRS1HMjkwMDA0LEVHLVVQRS1HMjkwMDA1LEVHLVVQRS1HMjkwMDA2LEVHLVVQRS1HMjkwMDA3LEVHLVVQRS1HMjkwMDA4LEVHLVVSRy1HMzAwMDAxLEVHLVVSRy1HMzAwMDAyLEVHLVVSRy1HMzAwMDAzLEVHLVVSRy1HMzAwMDA0CisxLFR1ZSAyNSBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMixXZWQgMjYgSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMjAxNDY2MzQ2Mzc2NzA2NTUsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCiszLFRodSAyNyBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4zNTIzNTA1MzcxNjg2MTMzLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorNCxGcmkgMjggSmFuIDExLDUuNTY4MTkwMjE4NzkzMTg0RS01LDAuMCwwLjAsMC4wMDkyNjQzMzg5OTg5NTY4MjIsMC4wLDAuMDAzMzQ2OTQ4MzUwNTM0NTM5NSwwLjAsMC4wLDAuMDAxNDM3MzMxNDA2MTk4ODQ0MSwwLjAwMTAyNzI2MjkzNDQyNDQ1MDMsMC4wLDAuMCwwLjAsMC4wLDUuNDUxNzE5MDQ0OTQwOTNFLTUsMS4yNjg5NjYwMDUyODA4NDA1LDAuMDA5Mzc3ODUwNjUwMjIyODY5LDAuMCwwLjAsMC4wMDM3MjU0NDM1OTI1OTQwNzk0LDAuMCwwLjAsMC4wLDAuMDA1Nzc1MDAzNjY2MjEyMTA0LDAuMDAzNDA4MzAzNzIxODM5Mzc3NCwwLjAKKzUsU2F0IDI5IEphbiAxMSwxLjcyNTUwNDE5MzE2NzE2NTFFLTQsMC4wLDAuMCwwLjAyODcwODg4NzA0MTMwMjM2LDAuMCwwLjAxMDM3MTcyNDM0NTQ0MDYwMiwwLjAsMC4wLDAuMDA0NDU0MDg4Nzk2NjIyNDc1LDAuMDAzMTgzMzQ0MDE1MDEzMjA5MywwLjAsMC4wLDAuMCwwLjAsMS42ODk0MTE0MDc4NjE2NzFFLTQsMy4wNDAyNDc0MjcxMTE3NzUsMC4wMjkwNjA2NDYwODk5OTUwNzMsMC4wLDAuMCwwLjAxMTU0NDYyODA4MDQwNTg5NSwwLjAsMC4wLDAuMCwwLjAxNzg5NTkyNzgyNDI4MTkxMywwLjAxMDU2MTg1NTg3MDQ4MjM3OSwwLjAKKzYsU3VuIDMwIEphbiAxMSw4LjMyNDkwNTA0MjYxOTY2MUUtNCwxLjU5NTY2NjM0NDE5OTg2NzRFLTQsMS4xNDU3NjE5NzgzMzA5NDQ0RS00LDAuMTEwODQ5ODQ5MTA4OTU1ODQsNC4xNTMzNzQxMTUzMTEwNjVFLTYsMC4wNDcyODY1NDU4MjAzMjIzMiwxLjE3ODMzNTA0MTg4MTA5NDNFLTUsNi40MjYzNDY1MjQ3MTk0NzFFLTQsMC4wMjA2Mjk5NDIyODYyNTMxOCwwLjAxNTY0MjIxMDEzNDI5NTMyLDUuNTEwODI1NjQyNjU1OTI2RS00LDUuNTQ0MTIxOTQzMTE2NjU3RS00LDAuMCwyLjM0MTM5MzM1Nzk4NDA4OThFLTQsMC4wMDE5MzExMTI0OTM5Nzk3NjUsOC42NzkzNDU0OTQ0Mzc4ODQsMC4xMzc1OTYwMjc3MzYyMzYwOCwzLjQ3OTQ5MDcxNjEyNzE4NzRFLTksMS4zMjM5ODA5MTA5MzkzNTI4RS00LDAuMDU0MTA3NTYxMzQxOTg2OTksMy40ODMzNDMzNzgxMTYyNUUtOSwzLjM2MzgyMDA2MTUxMzg1RS05LDQuNDMyNDczMzI3MTc3OTMxRS00LDAuMDg0ODQyMjU4Mzg1NTY5NDEsMC4wNDQ4ODA2MjQ2MTQwMjMyNCwwLjAKKzcsTW9uIDMxIEphbiAxMSwwLjAwMjczNTE5MzMyNjc5NTAwNDYsNy4wOTg3ODQ0MjAxNDQ4NDJFLTQsNS4wOTcyNTQzNDE4MDM4NDFFLTQsMC4zMzIwMjgzMDM1OTEzNTk1NCwxLjg0Nzc0ODg5ODQxNDI3MUUtNSwwLjE1MjE2MDA0MDM0ODY2OTQsNS4yNDIxNjUxNDg2NjA4MTdFLTUsMC4wMDI4NTg5NDY2MTA5NDEyNTU3LDAuMDY2NzgxMTgxNzUxOTk0MywwLjA1MTcyMzQ0MzU1NzE0OTYsMC4wMDI0NTE2NTA1NzU3MTU2NjE0LDAuMDAyNDY2NDYzNDIzNDUxMzY1NSwwLjAsMC4wMDEwNDE2MzY3MzM4NDQxOTM0LDAuMDA3NjQyOTg3NzEyODE1ODIyLDIyLjU2ODkwNTQ4Mzc1MzgzOCwwLjQ0OTA0MjU0MDY3MTUyNTE2LDEuNTQ3OTUyMzQ5NjkxNDIwNUUtOCw1Ljg5MDExMzAxMDczNzE3NUUtNCwwLjE3NTkyMjc2NTAzNDUwMzI3LDEuNTQ5NjY2MzE4MTAzNzk0NUUtOCwxLjQ5NjQ5MjkwNDU1NzkzOTVFLTgsMC4wMDE5NzE5MTQyODYzNDA0MjM2LDAuMjc3MDEwNDE0NDQ5MTY5NSwwLjE0MDM4OTUyNDI4NjYxNTU1LDAuMAorOCxUdWUgMSBGZWIgMTEsMC4wMDk4MDAxNzg0MTc4ODY4ODEsMC4wMDMzNTg3Nzk4OTU1MTk5ODQyLDAuMDAyNjY0NDMwNjg2MDQ1OTA0NywxLjAxMjA1MTA0MTQzNTIyNDIsMS4wNzA1MTcwMzYwOTkyMjFFLTQsMC41MjIzNTk5MTM0Mzg4MjAyLDMuMDY1ODI2MzQ2Mzk3MzM2M0UtNCwwLjAxNTY1MTE0MTU5NzEyMDgzLDAuMjMyNDM1ODAxMzgzMzA2NjMsMC4xODc3MjM4MTQ2OTg2NzEwNSwwLjAxMjY5MzkyNTQ1NzMxMzUyNiwwLjAxNDAxODU0NDI2NTUwMjE2MywzLjM5OTA3OTY1MjU0OTU5NTZFLTgsMC4wMDU3MDU5NDA1OTg4MzUyMjEsMC4wMzcwNTM2NTk5OTMyOTM4OSw2MS4zMjE1OTE4MDE2NjgwODUsMS41ODY3OTk4ODg2NTExNzU4LDIuMDA4MDYxMDA2Mjk0MDg0NEUtNiwwLjAwMzI4NzMwMDc4OTc2MDQwMjQsMC42MTY5NTAzNjU2NTEwMTk3LDkuMDYwMjQ5MjM5MzExMjk3RS03LDIuNDYxNDg1MDY0NjMwODAyM0UtNSwwLjAxMDY4ODI4NTg2Mjg2ODQwNywwLjk3OTgyMDEyNjExMTQ2NjEsMC40NTc3NTI4MjY3Mzk1MDU4NSw2Ljk1NzU3NDg4MzUyMjA2N0UtNworOSxXZWQgMiBGZWIgMTEsMC4wMzE2NDAyOTYzMjc1MDU2OSwwLjAxMjQzODMzMzYzMjMyODAwNywwLjAxMDM5NjQ2OTY4NDg5MDg5NiwyLjg5NzgxODUyMjE3MjE4MSw0LjM3NTYyNTU2NDQ0MjQ1NEUtNCwxLjYzNjQzMzMyNjg0MzAyMzYsMC4wMDEyNTgwMzc2NTE4OTcyNzc3LDAuMDYyNDEwNzU2Nzk4OTY1MiwwLjczNTU0NTY0MTEwOTQ3NDIsMC42MTEzNDkzMTY2Njc5Mzg1LDAuMDQ5MzAwOTM1NTg1NDAzMywwLjA1NjgzNTE2NzM0Nzg5MDA3LDEuOTcxMDMxMTE1NjE2NjQ2RS03LDAuMDIyNzU5NTUxMjY2MjI3MjgzLDAuMTQwOTc1NTA2OTAwODM5MjYsMTYyLjkxOTA4NTQzNDE0NzU4LDUuMDc0NDAyNjc5Nzc2MzksMS4xNDkwNzA3MzYzOTU2MDk2RS01LDAuMDEzMjIyMjE4MTI2Nzk5NzM1LDEuOTYyNDU3NDM1MTg0Njg3LDUuMTAwMTM4Nzk0NTEyODc0RS02LDEuNDI1ODYyNTIyNDkyMTI2RS00LDAuMDQyNDI3Mjc2MzY3ODExNzEsMy4xMzU0NDAwMzgwNTA5NjA2LDEuMzgwNjIyNDE3ODAzMjY2OSw0LjAzNDUwMjgyODcwMjUwOUUtNgorMTAsVGh1IDMgRmViIDExLDAuMTAzMTg4NTM4NDk3NDUzNiwwLjA0NTA3ODg1NTk1MDE0NzQ3LDAuMDQwMjk3MjA3NjU4MzM3NDcsOC4yMzkyMzE4OTk1NzU5NTMsMC4wMDE4MzA5MTkxNjYwMzM1MTk3LDUuMTQxMTE2MjU5MDU2NTIyLDAuMDA1MzEwOTA0NTg1NjQxMjI3LDAuMjUwNjg5Mzg3ODQwMDA1MiwyLjM0MjM1OTY2MzI0MDM5NDIsMi4wMTQ3NTgyMDg4NDk1MywwLjE4OTg2NjQzMzIwNTI3NjQsMC4yMzQ2MDg5OTQ2Mjg3Nzc0NiwxLjI5Nzg1MDQ4NzUyMDYzNzRFLTYsMC4wOTE0MzY2MjgxOTU5NTQ2OSwwLjU0NjIwMzgyMDY2ODk5NjUsNDM3LjY2MzkzNTY2NDkyMTU1LDE2LjM1NDM1NzYzOTg5MzA2Myw2LjUyNTYyOTU3ODYyODUxNEUtNSwwLjA1Mzg5OTY2MDYzNTgyMjI4Niw2LjI4MzUwMzQ0MDMzODcwNSwyLjg3NTI0NjQ2NDExMzM1OThFLTUsOS4wMzY3NDA4OTEwNDU4MTlFLTQsMC4xNjkyMDg4MTgyMDkxMjE2NSwxMC4xMTM4NjI1MTgzMzgxMjUsNC4xNTA0MDM4MzA0MjUwOTMsMi4zMzU2MjUzNDM4Nzg0MDMzRS01CisxMSxGcmkgNCBGZWIgMTEsMC4zMjQ2NjY5ODkyMTQ4OTQyMywwLjE1MjA1MTI4OTE5NzgwODk3LDAuMTQzMjQzNjc5NDcwNTE3OCwyMi45MzU3MjY1MDgzNTg0NywwLjAwNjkwMTg5NjI2MjY1NTUwOSwxNS42NDg1NDA3MDU4NzA4NjUsMC4wMjAxNTY4MjM1NDUyNzQyOSwwLjkxNjUxOTQxMTMzNjg2MDksNy4yMTk5NDAzOTIyMTEyMjYsNi4zOTU5NjY5NjQ4MTY2ODYsMC42NzE1NjU0MzcxMDk1MjA1LDAuODc1NTgyMDQyNzk4MTQ1OSw2LjIzNTY4OTU4MTM4NTU5NkUtNiwwLjMzNDMyMTc4ODAwMjE0OCwxLjk1NDgzNDU2OTYyNjMzNzIsMTE2OS4zNTk0NTc2NTQ5ODY3LDUwLjkyNjE5MTAwMzU0NTk1LDIuODk2MTU4OTMwODYyNzU3M0UtNCwwLjE5OTMwMTMwMTYzNzc4MjI2LDE5LjQ1Mzg2NjU4NDUwMjcxMywxLjI3Mjk4NTg3OTIzNDM5NUUtNCwwLjAwNDI1OTc2MDI5NzI3MzUyNywwLjYxNTI2NTY4NDgzMTQzOTMsMzEuNTE3ODQ4NzE3NjU0Mzk1LDEyLjE0Mzk2NTEyMjcxMTQ4MiwxLjA0Njk1MTEyNTIyMzUwODRFLTQKKzEyLFNhdCA1IEZlYiAxMSwxLjAxNjIxOTkxNTgyODU3MTIsMC41MDE2MjM0Njc2NzA1NDIyLDAuNDk3MzczOTE3Nzg0Mjk1NCw2My4zODg1NDQ3NzUzMDc5NywwLjAyNTYwNDM0NTgzNzA4NjA1Nyw0Ny4yODQyOTM2MTU3MDc5MSwwLjA3NTQ0OTIyODU0NjAyODc2LDMuMjg1MzIzMTE5Njg1NTU5MiwyMi4xMjg0MjI3MjY5MDk0NywyMC4yMDQ5MzIwNTIyNzMyOTYsMi4zMjA2MDUzNTg0NDE5MzMsMy4yMTE2NzMzNTA5MTQxMzY2LDIuOTM2NTYzMTkyMzc1MzcxMkUtNSwxLjE5ODI5MjMzMDQ5NDAwMjcsNi45MDA1NjYzODg2MDYxMDYsMzEzMi42Njc3MTAzMDkyODgsMTU3LjY1MjkzMzk0NzAwNDI3LDAuMDAxMjIzMTAwNTY5MjAwNDQ0NiwwLjcyMzc3MDE0MjY0NTg3NTksNTkuODU5NjM0MTgxMDY3ODcsNS4zODAyODI3OTU5NTMyMDVFLTQsMC4wMTk0NzU4NTU0NTkzNjg2OTYsMi4xOTIyMjYxNDYxOTM0NzY3LDk3LjY1NDA1MjM1OTExNDg0LDM1LjI0MDgxODgwNjA4NTIxNSw0LjQ0NDA2NzA3MDUwNDU0OUUtNAorMTMsU3VuIDYgRmViIDExLDMuMTMwOTIwNTczNTQ1NzMzLDEuNjA2MTQ0NDI5NDQ3NTU3NSwxLjY2NDM1NTg2MDIyNTIyNDksMTczLjU4NDI4Nzk1MjM3NjQsMC4wOTA5NjkxMzU0NDc3NjkwNSwxNDAuODQ0NDU2NzYxNzIwNzgsMC4yNzAzMjc0OTI0ODA1NTIyLDExLjMyMTAwOTE0Mzg2OTI5OSw2Ni44NjA0MzM0MDY3NTg5Nyw2Mi43ODM1NTc0NTU4NTMzMSw3LjczMzkwNjAwNzc0MTgxOSwxMS4yOTcwNjE4MjE5MjAwMDcsMS4yNDgyNjM3MzQ5MzgwNzEyRS00LDQuMTI4NTE4MTk1Mzk5MjQsMjMuNTMzMzY2MDg4NDYzODkzLDgzNzYuNjMxODE5MTU2MzY2LDQ4MC42MjY3OTg0NDcwMDEzLDAuMDA0NzU4MTYyODM4MTAzMjY3LDIuNTIzNzk1MzU3NDE3MTM4MywxODEuNDQ4MDk1ODQyMDkyOTgsMC4wMDIwOTY3MTA2MTgxNjI0ODY0LDAuMDgwODQ1Mjg1MDEwMjg5MzEsNy41MTM0OTQwMjA1MTU1MTI1LDI5Ny45NzU4ODgzOTkxODU4NiwxMDEuMDA5NTYwNjA4MjY4MDUsMC4wMDE3MzIxNzg5MjY2Njk3NTQ0CisxNCxNb24gNyBGZWIgMTEsOS41ODA2NDY2Njc1NjU5MDUsNS4wNjIyNDU1ODE4NjI0OSw1LjQ2MTYwNzU5ODkxNTMxMyw0NzIuNzQwOTQzOTgwMjcyODUsMC4zMTcyNTI5NTcwMTE3MTY3NCw0MTYuNDg3MTczOTU2MzQyMTMsMC45NTE2MDE1NzY4MzI0MDE5LDM4LjI4NDUxMjk5Mzg0NTUyNCwyMDAuNzQwMjA3MDQ3ODUyNzUsMTkzLjczNTY4OTQ5MDk0OTIsMjUuMjkwNzQyOTA4MDQ2MTM0LDM5LjAwMDI1NjE1ODgwMDc0LDUuMTM0ODc5NzgxNjE0NzQ3RS00LDEzLjk1Njk5Njg1MzM3Mzg0Myw3OC45OTYwNzgxOTU3OTEwNiwyMjM3NS43NTUwNTA3NjkzNTIsMTQ1NC44NTM4MzQzNDQ4MzksMC4wMTc4MzE4ODk3NTE2MzAzNzMsOC42MzkzMzMyMDI1NDMzNjIsNTQ2LjEzNjg0MjI1NzA1OCwwLjAwNzg4MzM5NDYxOTA5NjI3MywwLjMyMzg3NTYxNDE5ODk2MDgsMjUuMjcwMDE1ODUzOTk4OTk1LDkwMi45MzE1MjE5ODAxODgxLDI4Ny41MDMyMjA1ODc2NTM2LDAuMDA2NDc3NjQ2MTA3MDYzNzk1CisxNSxUdWUgOCBGZWIgMTEsMjkuMDU3OTgzMDIyNzI4MTg0LDE1LjcwNTc1NjI3MTc2OTQzNiwxNy41NjA3NDIyNDk3MTkwNiwxMjc4Ljg3MzM3Mjg4NTE2NDQsMS4wODEwNjQxNDUxMzc0NzE4LDEyMjEuNDAwMTIxNzQwNjMwOCwzLjI3Mjk4NDk0MDQzMjE1MywxMjYuNzMwNDE3NDE1NjYyMDUsNTk3Ljk2OTY0NDE4MjQ4ODksNTkyLjI5NzU0MTMxNTE5MjMsODEuMDg5ODgyMzEzOTQzMjksMTMxLjYyOTcyMjU1NzAxMTUsMC4wMDIwMTQyNTA2MTYyNTQ5MTQsNDYuMTgxNzg0MjgwNzA0MDY1LDI2MC4xMjg2MDc3ODY2Mjg2Niw1OTQ1My43NjEyMjA4Mzc2NzQsNDM2My42NDUzMjgzNDIyNjIsMC4wNjQyNDgyMjQyNDM0NjU0MiwyOC45MzM4MTE5NjIwMjI2LDE2MjkuMzk4NjQ2MjczMDY1LDAuMDI4NTE0NzQyNzM3MjA2MywxLjIzOTcyNzAyNDQ4NTUzMiw4My4yMTUyNTc1NzQ3NTY3NSwyNzEyLjIwMzQ1NjA0NTMxNSw4MTIuMDI4OTQ3OTk4MzI5OCwwLjAyMzIzMTAzMjE5NTUyNjQ5NgorMTYsV2VkIDkgRmViIDExLDg3LjYwMDI0MjQ5MDU2MTg3LDQ4LjE5NTczODA2Mjg0ODI4NSw1NS42NDU3OTMyMDQ5Mzk5NiwzNDI3Ljg2OTY4MDc0MzU5MzYsMy42Mjg0NDI0ODIyNzQ1MDUsMzU1OS42MzQ3MjY2NTM3MTUsMTEuMDkyOTg4Mjk3NjE3MjIsNDEzLjQ2MTgwODE3MjEyODUsMTc3MS41OTY5ODEwODEyNzM1LDE3OTkuMzc4OTQzMDU5MzU3NywyNTYuNDI1NDc5MzcyOTQ5OCw0MzcuNjM5MDU3MDY5MDcyMjQsMC4wMDc2OTA3NDQ0NjA1MzI4NTYsMTUwLjU5MjU3MzMxMTgxMzYyLDg0NS40MDg2MDUzNTYwMDIxLDE1NTg0Ni4zOTk5Mjc0NDk5LDEyOTg5LjAzNDc3MzA4NDEwNCwwLjIyNTY0NzQ1MTY0NjE2NTgsOTUuNDk3NzM4MDEyODQzMzQsNDgyNy42MDAyNTEyMzE2NTQsMC4xMDA2MzA2NTUzNzg5NTg2LDQuNjE2NjQ5NTAxNDg0NDY0LDI3MC4wOTg5NjI4MzEzNTk5LDgwOTQuNzI0ODU1MjYyMjUzLDIyNzYuNTEwMzU1NDg0NzY0LDAuMDgwOTg0NDczMTc4NDA3NTQKKzE3LFRodSAxMCBGZWIgMTEsMzQ3LjY3NjU1MDM2MTU1NjE3LDE5NS4wOTA0NDA2Njc2NzM0OCwyMzQuNjUyNzY1MDgzNzIyLDEwOTkxLjcyODg5ODU4NzcwNiwxNi42ODI4ODY1OTUwOTY4MDQsMTM0MTEuNDA0MDg1MDcwNiw1MS43OTg0MDA2NjExNjAzNCwxODI0LjAxNjY4ODYxMTQzNSw2ODU2LjExNTI3MDQyOTA4OSw3MjE3Ljk5NjI0NDIzNTU4NiwxMDgwLjMyNjUwMzYzMTM1NjQsMTk4My45NzI4MzgxMDU1Nzg0LDAuMDQyMTExMTE5NzEzMTIwMjgsNjYzLjg3NzY4OTcxMTk1MjgsMzcwOS40NTEwODQ2MzIzNzQ3LDQ2MDc5My4wMDkzOTQ4MTY2NSw0OTg3My44NjY1NzMxODY1NSwxLjA5NDU1NzI2MjU2MTUxNCw0MjguNTgxNDkyMDI4MDA5MywxODUwOS4xMjk0ODM1ODI0MTYsMC40OTI0MTcwNzY0MzY3OTE5LDI0LjM0MzUxNjA0MTIwMzE0NSwxMTgyLjYzNTQ1NTgzNDg2NTMsMzE1MzUuODE1NDAyNDM3NTA3LDc5NzcuMzI4MDI2MTMyODY0LDAuMzg2Njc5MzkyMDAyNTY3NzMKKzE4LEZyaSAxMSBGZWIgMTEsMTM3Ny4yODI2NDYwNTU4NzkyLDc4NC43ODYwMjExMTE2NzA1LDk3NC45MTQzNTg2MzgwMjY2LDI5MjE3LjkyMzU2NTg2NTMxLDc2LjcwOTU3OTMxMzI0NDI1LDQ5NzY2LjY3NzY2MTA4MzMyLDI0Mi40NjgxMjkwMzAyNTkyNiw4MDMyLjgwNzQwNjcwNjUzNCwyNjM3NS4xOTAyNjU3MDU2NzQsMjg4MzQuODQ3MTM1MTgzOTczLDQ1MTQuMjkzNjY5MDM1OTU3NSw4OTc1LjUwMTA3MjQwMDE0LDAuMjI3NTIyMTUwNDU5NzQ1NzIsMjkyNi4zNDUxMzYyMjkyMjksMTYwODUuMjE1NjU1NjM0NjgsOTkxNTI1LjgwODY5MTAzNTYsMTc2NDQxLjc4NDY3NDIzOTU1LDUuMjU5MzY3MTc1NTMxMzI0LDE5MjEuNDExNTAyMjg4NjE3Miw2NzI4OC45MzY5ODc5MDc4NywyLjM5MTA5MDM1NTIyMjE0MDMsMTI2LjYwNzUzMzU5MDgwMTMyLDUxNzEuODcwNDc3ODY2MjA3LDExOTkyOC42MTgyMjM4MzU4MiwyNTM3NC4zNTUyNTc5MjYxODUsMS44MTkxNTUzMjI2OTkzMDE2CisxOSxTYXQgMTIgRmViIDExLDU2NTMuODg2NzkwNTkzODQ4LDMyMDYuNDcxNjM1OTY2OTc0Niw0MDczLjg2MzIwOTMxNjQzMzMsNTY5MzYuNjYxMzE3OTM4NTc1LDM5MC43MjMxNDU5MzY1NTM3NSwxODA5NTcuMzUzNDk0MzAxNjcsMTI3Mi41MjI5NTU0MDQ1MzA5LDM4MzIxLjcxODYyMDk4MTE1LDEwMjg0Ni43NTY3NDA1NDMwNiwxMTc5OTQuNzU4MDEwMjEwMTYsMTk1MDguODIzNjA3NDQ5NTQsNDQxODcuMDE1NjUwNTU4OTA0LDEuMzg3OTU4MjkwNDI1NjgyMiwxNDEzNy4xMzE2MTU5OTcxMyw3MDcwMS4zNjg3NjQ3MzE4MywxNTk5NDI5LjAwNzM3MTM3NDksNDg4MDg2LjkzOTc5MjMyMDIsMjguMTQyOTA3NTc3NDA5OTYsOTM4OC45MjE2NTQwNzc0OTYsMjA2NzczLjMwNzU2NzE1NDU4LDEyLjk3ODg0MzAxMzg3MjExNCw3MzguMjA5MDM4OTUxMjI2OCwyNDU4NS4yNTE0NDE0NDAwMDMsNDI2ODQ2LjQ0NTM3NDY1ODgsNjMyMzEuMTk3NDE0NTI2OTEsOS40MDQxMjY0MDc2ODY2ODgKKzIwLFN1biAxMyBGZWIgMTEsMTg3NjguMDgxMjQ2ODE5OTQ3LDEwMzE0Ljk5NDk1NzAzMDM5NCwxMjU3MC41MTg1MjMzNTUwODIsODY2ODEuNjYxNzk5NzI0MTQsMTkyMi41MTMxMDA2NzUxOTYzLDQ5NDU5Ni44NzE4MDE0MjA4LDY2MzguMDIyNzg1MDAyNTgzLDE1OTgzNi4wNDE2MzY0NDIzLDMxMjc5NS4xNTMxMzk2MjcsMzc0MTM0Ljc5NDYyODQ2MzEsNjU4OTIuNjE3NzYxMTgyODksMTkwOTY0LjU5NjQ3MzQzNjEzLDguNDc3ODYzOTgyNTA0Nzk3LDYzMTExLjIxNDg4MDY0NDIsMjI1MzUzLjAwMjcwNjI2NjEyLDIxODcwMTQuMTk1MjUwNzA0NCw5MDQxODguNjkyNjUwNzQyNCwxNDguNjI0NzUyNjc5OTk1OTYsNDI1NDEuNTA0ODA0NjE4OTIsNDIxMTg3Ljk0OTM2NjQ0MzIsNjkuODM0MjI5OTgwNjQyNDgsNDI1Ny4zMDAwNDc2MDU5MzE1LDEwNDc0My45ODU3MTA0NzEyMywxMDQzMTQxLjQ3MzgzODUzOTQsMTExNjgxLjEyMzkyMDcyNDY0LDQ2LjE3NzkzMzQ1MjEyMTE5CisyMSxNb24gMTQgRmViIDExLDQxOTU5LjEyNzA0NTU1MjU3LDI0NTUwLjAzOTY0MzUxMzEzMywyNTU2MC43MTYzNjEzNzA3MDUsMTE0OTI5LjQyNDg2MDgyNzgsODQyNi4zMDkxMTExNTA2MSw5NDE2NzUuNTI2NTg5NjI0NSwzMzU2Ni4xNjU4NTUyNjQ4Myw0NTUxNzQuNDA1NzQxMzMxOSw2NDQ4MjEuODk5NzQyODk3NCw3ODcxNTEuMzY2MjU1ODUxNywxNDY1MjIuNjk0MjEwMzUzMDcsNTYxODI5Ljg3OTE3Nzk3OTQsNTIuOTEwNjQ5NDg5OTk1NDUsMjEzNjc0LjcxNTQ2Mzg2MDc1LDQ2MjA5Ni4wNjE2NzIyMTQ5NCwyNzE1MDIxLjIzNTA4MTQ4NTUsMTMzNzE4MC4xOTE5NTcwMzU4LDc3Mi4wMjc1MzA3ODc1NDQ1LDE2MTY5Ny4xNDc3Mjk5NjcxLDY1NjkwNC42OTkzMDI0MjE0LDM3My4xODEyOTAzNjU3MTM2LDIzOTAzLjMzMTUwMDc0NDQ3NiwzMTg2MjguMDE4NTYyMjM4NjYsMTgwODQxMi41MjQ0MjM3Nzk1LDE2MTMzOS42NjkwNjE4OTU3MiwxOTIuNDUyOTcxNDMxNTIyNAorMjIsVHVlIDE1IEZlYiAxMSw2ODk5Ni4xNjk0OTcyODM5OSw0NDk5Ni43NDgyMzQ1MzcwNiwzOTc5MS45NjU0MTU4OTE3NTUsMTQwMTYyLjk4OTYxMjgyODc3LDI1OTYzLjkyNzIxMjA2MTI0OCwxNDE5NTE0Ljg3ODY4NjY5NDIsMTQzOTczLjM4MjQxNzA5MjMzLDg1Nzg0OS4wMDY5MzAwODQ0LDEwMTQwNzAuMzg3MzcxMjY3NSwxMjQ5MjQxLjE0NDQyNDQzODUsMjM5NzY0LjEwMTQ2ODk5NDQsMTA3NzU1NC41NzMzMjM3MTk0LDMxMi40OTI0MjUyODk5NTI5LDQ2MzY4NC4xMDgwNDk3MzYzNiw3MjExNDYuMjcyMTU5MTUwNSwzMTcxNTIwLjIyOTQ4ODkxMiwxNzQzMDg1LjE3NDE3NTU1MjMsMzcyMi4zNTA0MjY2NDI4NDEzLDQxNzMxOC43NTE0NDQ3NTk0Myw4ODM2ODQuOTQ0NDk4MDM2NSwxODgwLjA1NzA2NzI4MzU3NjUsMTEwNTY2Ljc4OTkzOTMzMjI2LDYzMTg1MS4xNTA1NzA2Njc4LDI1ODI5NjIuMjQ4MjIyMTE4MiwyMDc1NDIuMjQyMTk3ODg1Miw1NTguNjQxNTg4Nzk0OTU2NQorMjMsV2VkIDE2IEZlYiAxMSw5NTg2NC4zMzY5MzMyMTc3Miw2ODI4Mi42ODU5MjgwMTgyOCw1MzUzNy43MDcyODM1NTM4MzUsMTYxODk4Ljk1NTc3MDcyOTIzLDUyNjI3LjAzNzg0Njg4MTE3LDE4NzU1MzcuMjE4ODU1ODksNDQzODM0Ljc1OTQ5MjM4MSwxMjg0MzI3LjE1MDkzMjM3NDQsMTM3MzI1OS43NDU1NTQ1MzI2LDE3MDAwMDIuNjQyMzYwNzY2MiwzMzIwOTIuNTg0NDg2MjAzNCwxNjI3ODY0LjQ0MzMxNjk5OTgsMTcwMS40OTcxMzU3MTYzODM4LDc1MDIxMy45MjIzOTgyOTEsOTcxMjE1LjQ4ODY4MjUyODMsMzU1NjE0OC45NjEyMzgzOTc4LDIxMDM1NTAuOTIyNDU2NDg0OCwxNjQwMS4zMjYxMzM5NzYxNiw3NTIyMDIuNjE4NzQ1NzAwOSwxMDg4MjExLjgxMDYyMjgxOTcsODk4MS4wNTE1MTE0MjYyOTMsMzQzNzgwLjg3MjI5ODYwMTQzLDk3MzA1MC4yMjU1Mjc1Nzg3LDMzMDE2MzEuMTg3MjkyNzY4NiwyNDgzODQuMDkxNTg5MDU0NCwxMTExLjg4MTgzNDI4MjkyMTUKKzI0LFRodSAxNyBGZWIgMTEsMTIxMTA5Ljc5NjI1NTMxMTIsOTE2MDkuNTAwMTE3MTY4NjMsNjYyNzUuMDU2MTYxMzA4MjcsMTgwODIwLjgxMzE3MjQwNDEzLDgyMDk1LjgxNjkzMjU4MjQ0LDIyOTU1NTUuNDg2MzczNzc0LDg4OTU5MC4zODI1OTUxNjg3LDE2OTY4NzMuMjQ3NjE3NTk3NywxNzA3MjcyLjExMjcxMjk2MjgsMjExOTc0Ni45ODMxNTc3NjEsNDE4Njk2LjM3MjgzMzk0NTczLDIxNjE5MjQuODk3MzI0NTcxNCw2Mjc0LjA4ODYwNDY3OTM2MywxMDM2NTUxLjg0OTA2NzY4MzMsMTIwMjg3My4yNTU5NTAzNjM4LDM4ODY1MTQuOTA5NjA0MDcwMiwyNDIyOTYyLjk4MDE2OTA1MjcsNTA0NjEuMzQ1NTM2NDQ1MjcsMTEwMzczOC40MDMzMTMzNDc2LDEyNzEwMjEuNTk1MDAxNDMyNiwzMDkxOS4yMDAwNDgyNTc1NSw2ODA0NTAuNjQ0Njc3MzQ2OCwxMzA3MDkxLjA0OTA2NTg3LDM5NTM5NTcuOTc2NzA1OTM3NiwyODQ0NzkuNTQ5ODIyMzAxOCwxNzI2LjE1MjM2NzI4Nzc4MDYKKzI1LEZyaSAxOCBGZWIgMTEsMTQ0MDQ0LjcwNjQyMDEzNjI3LDExMzg2NS40ODg4ODgwNzc4Miw3NzcxNS45MjkwMjQ4OTUxOSwxOTY5MDkuMjM4NzYwOTE5MywxMTIxMDUuNTk3MDY0NTk5NDQsMjY3MDkyNS4yMTA3NDc2NzU1LDE0MjM4MDYuMDcwMzg3Nzk4OCwyMDgwMzM0LjA1NTEyODg2MjYsMjAwODE1OS40Mjk5Mjc3NzU5LDI0OTgyOTIuNzM4MDUzODMzNiw0OTcyNjQuOTkzODcxMDU1LDI2NTk1NjMuODk2NzIyNDI4LDE4Mjc3Ljk1OTcxNDQwOTY3MywxMzA5MjMyLjc4OTQ0ODIzMDgsMTQxMDkwMi4zNTQ0NTgwNzg3LDQxNjM4NjYuNzk3Mzk5ODk2NywyNjk4OTk0LjE0MDU0NjAzODcsMTIxOTg5LjczOTUyNzU3MjA4LDE0NTAxNDIuMjI2MTMwOTg4NCwxNDMwMjMwLjA5NTk4MDUxMiw4NjM1OC4yNTIwNjQ1Nzc2NywxMDc2ODA5LjY5NTk4MTk2MDcsMTYyMDQyMS45MTU3OTkzNzE0LDQ1Mjk3NTUuOTYxMzU3NDg2LDMxNTU5OC44NTIxMTgxOTksMjM1My40OTYyMzE0NzY2MjkKKzI2LFNhdCAxOSBGZWIgMTEsMTYyNDM3LjQ0MTkzMzQ0OTMsMTMyNTYxLjk2MDkzNjcwNjEzLDg2Nzg2LjcyNjg5MjM4NzEzLDIwODkzMS40NzA2NTUyOTE3LDEzODc1Mi40MTQ1NzQyMzY2NCwyOTY3MDAyLjk1NTM4OTY5OTQsMTk1NTE5MS4wODk5Mzg3ODE3LDIzOTQ3NjYuMzY3ODI5MTQ3NywyMjQ3NDE5LjA3NjgzMjQ2NDQsMjc5OTY0OS44NjgwNzkwNzIsNTYwMTg2LjU3MTczMzA0NzQsMzA2ODU3OS42NDczMzk0NTY3LDY3MTU3LjE4ODA0MDc1ODk2LDE1Mzc5MTQuMTQ4NzE5Mjg5OCwxNTc1Nzk2LjYyMjc2MTUwMjQsNDM2ODA3NS43NTc5NTc4MzQsMjkwOTA2My40NTE0OTI1MDEsMjQ5OTA5LjAwOTU3OTg5Nzk3LDE3NDk0OTMuOTg4ODU3ODQzNywxNTUyNDI0LjQ0ODI4ODMzMDYsMjg3MjAxLjkyMzU0MDYzNDQsMTQ2Njc2OC42NjI2NzY3NTYsMTg3OTU2MS41ODE5Njc4OTA3LDQ5NzgwOTMuOTMzMTQ4NzIyLDMzOTIxOS42MzU5NTE5Njk2LDI5MTEuODE1NTY2Njk1MzM0NAorMjcsU3VuIDIwIEZlYiAxMSwxNzg2NDcuOTU4NTE4NzY4NTQsMTQ5MjQ2Ljg4MTk4MDA0MTU0LDk0NzU1Ljg4MDEwMjcyNzg4LDIxOTMxMS44OTg2Mjg3MDYzLDE2Mjg2NS43ODY1MzAzNDQ1NywzMjI2NzQ0LjAwNDA1MDQyNCwyNDQ4NTcwLjk4MTU5NDc0OSwyNjczNTc3Ljg1NjU2NTEwNTMsMjQ1Nzc5NC4yOTM0NTc1NDYsMzA2NDcxMC44NTcxOTYwMTM0LDYxNTYyMS42MDQ3Mjg4NTM0LDM0MzE0ODguMDYzODU3MTEzNSwxNDY1OTguNTg0MzA4MTM2NTIsMTc0MTkwMC40NTYwNjU0ODU3LDE3MjA2NTQuNjc3MzkwMDQxNSw0NTQzNTg0LjM1NTg4NDY0LDMwOTE0NDYuNzE5MDY5MTQzMywzNzk3OTMuNTg2ODU5Mzk1LDIwMTg1NzYuNjEwNTAzMDQwMywxNjU4NzgwLjc1MDk3OTAyMTQsNTc3NDYyLjIxODQxMTQ0MSwxODI3OTk2LjY3ODE5NDUwNDIsMjEwOTg3MS40MDE5NjczODg2LDUzNjk5NjAuMDY4MDMzODgsMzU5NzExLjI3NDU1Mjc4MjYsMzQxNy4zMzMwNjg0NDgyMjQKKzI4LE1vbiAyMSBGZWIgMTEsMTkxMjE0LjI2MTg4NTg1MTc3LDE2MjQ0My44NzAzMzA3MTA5OCwxMDA5MDEuMTUxMjIwNTUwMDgsMjI3MDgzLjc2NTk3NzA1NjEsMTgyMzU2LjExNzI0MTQzNDEsMzQyNjU1NS40NTIxNDE5ODY3LDI4NjI4MjMuNDk1NTQ5OTU3MywyODkxODUzLjc0ODM2MjA1OTcsMjYyMDI0Mi44ODYzOTA3OTE3LDMyNjk0OTUuNDMzNzk1NjY3LDY1ODU2Ny41Nzc2Nzk0MTMzLDM3MTU4OTAuNDEzNTU5NzgxNCwyNjMwMDkuMjUyODE4MDg0MywxOTAzMTI3LjAzMjY2ODUyNTYsMTgzMjM0Ni43MzEwOTM2OTcsNDY3MzkxNC43NTk0NTY3MDI1LDMyMjkzMDYuMjIxODU5MTkzLDUwMjIxOC45NDQwMDI4OTk2LDIyMzM4MzUuMjY0NjA1NTIyNiwxNzM5NTE5LjEyMDAwMDgzNTUsOTUwMzg1LjE5MjgzODU5MTgsMjEzMDI3Ny44NTAyMzYyNjgyLDIyOTA4NDIuMDg4MzMxMjg1LDU2Njk1NTYuMzU3MjE4NDIsMzc1MTc5LjYyOTAyNDEzODIsMzgyNi4yNzkxOTk1NDkzMjg1CisyOSxUdWUgMjIgRmViIDExLDIwMTI0MS4yMTY4MzQyODczMywxNzMwODYuNDcxOTE3NTgwNTIsMTA1NzkwLjczNDI1MTAyMjA1LDIzMzE2Ni4xMDY5MDk2NzIxMiwxOTgyNDcuMTg3MDk5MDA3OTIsMzU4NTMyOS45NTEwODk2MDc2LDMyMDY4NDkuOTkzNzA5ODkyLDMwNjY5MzUuOTA4NTgxODI5LDI3NDk1OTIuODk2Njg1NjYyLDM0MzI2MDIuMjY2NzM2MzgyNiw2OTI4MjMuNjAxODQwMzIwMiwzOTQ0MTM1LjQxMDAwMjg5MiwzNzkwMjQuNDk0NjY1ODQyNiwyMDMzMDk0LjA0MDg3NTQ2MDMsMTkyMTIxMC43MDk0NTc3MDcxLDQ3NzU0MDkuMDMxNTY0ODk0LDMzMzc3ODYuOTA0NTkzMDQ2OCw2MDkwOTcuNDk0ODI5MTkyMSwyNDA4NDMzLjUyODA3ODEzMjMsMTgwMzIwNi4wNzQyNTM4NzIsMTMxMDM2NC45MTc3NTg3MjksMjM4MDkxOS4zMDAwODkxODIzLDI0MzYyODIuMDkyMzk1NDM5Nyw1OTA2ODE2LjYwMzUxMzY3NywzODczNDIuMjkzMTMwNjY5OSw0MTU5Ljg0NzA3OTU0NTM5MworMzAsV2VkIDIzIEZlYiAxMSwyMDkxMzAuNDIyMTg4MTE3NzgsMTgxNTMwLjY2NDY5NjI3NDE4LDEwOTYyOS4xMDE1OTEzNDU3OCwyMzc4NzUuNjA5NDQ0NDg3MzIsMjEwOTYxLjg0MjE0Mjg3NywzNzA5ODM3LjA3MTY0MTE4NiwzNDg1OTA2Ljk5NTc0NDExMDYsMzIwNTI2My43OTIzMDY2OSwyODUxMTkzLjg0MTIxOTY4ODMsMzU2MDc0Ny44MjEwODU2Miw3MTk3NjguODY4NDQ3ODkwMiw0MTI0NTQxLjc1ODQzMjkzMzYsNDg0NTYwLjI4NTU4MjY5MTYsMjEzNjE3OC4zNDM3NDA3Njg3LDE5OTA5NjYuMDQxNjk0NTE3LDQ4NTM2NDUuMTcwNzc2MjI2LDM0MjIxNzAuMjA3Nzk0MzAwNyw2OTg4NzQuNzE4NjM3ODYwOCwyNTQ3NTc5LjkwNTAzNjU3MDUsMTg1Mjg0Ni45OTQ0MzAxNTM0LDE2MzIwODMuMjkwNDUwNzMyMiwyNTgzOTkzLjI1MzU3MDIwMTMsMjU1MTM2NS4yMDIzNDQzMDYzLDYwOTIzNTYuMTI4ODYwNTA5LDM5Njc5Ny4xODIwMjEyOTg5Nyw0NDI2LjgyNTU0NTc3MTk2MgorMzEsVGh1IDI0IEZlYiAxMSwyMTUyNjcuODY5NTkyNDA3MiwxODgxNDQuNTUyNzMyMzI1OCwxMTI2MDkuNTk4NzExNTc4NTcsMjQxNDg5Ljg1ODI2ODE2OTEzLDIyMDk4NS40MjkwNDQ4ODI3NywzODA2NDMyLjIyMTk0NDU3NjYsMzcwODIwMS40MDAzNzE3MzcsMzMxMzIzNy45MzEwNzg1MTYsMjkzMDEyNS4xODM2OTY3ODgzLDM2NjAzMTkuODgyNDIyNTE3LDc0MDcyNi4zMjg3MzQ4NzY0LDQyNjU0MDguNDQ3NDQ2MjU0LDU3NTM4NC45NDU4OTU2NDYzLDIyMTY4OTIuNTI0MzEwNTEwNiwyMDQ1MTI4LjU4OTczOTEyMzEsNDkxMzQzMS42MTU1ODg1NDgsMzQ4NzE4OC40NjI2NjExNDY3LDc3MjIxNy4zODY0OTMzODY5LDI2NTY5MzkuNTY1MTg5NjgzLDE4OTExNjMuNDMxNDcwMjgsMTkwNTkzNC4xMTQzMDE4NzIyLDI3NDU2MjAuNTE4ODEyNzkwNSwyNjQxMzA0LjQ2Njc2NzU5LDYyMzU5NjguNDM5MDk2OTM1LDQwNDA3OC4zMTA3NjUwMTE2NCw0NjM3LjM1MTMwNzMwMDIyOQorMzIsRnJpIDI1IEZlYiAxMSwyMjAwMDMuNDEyNzE3NDE0MTUsMTkzMjc2Ljc0MzI0MDIyNTU0LDExNDkwNS42MzMxMTA5OTkyOSwyNDQyNDQuOTc4OTczMjkxMDMsMjI4ODAzLjI0NzUxMDI2MTY2LDM4ODA3ODguNjM2MDQwNTU0LDM4ODI5ODEuMjA1NjA1NDE5NCwzMzk2NzgxLjIzOTQyNTEwOSwyOTkwOTU0LjkxOTQ0MDM5MDUsMzczNzA2OS4wNjc2MTQxOTA3LDc1Njg5My41Mzg4OTY0NDc5LDQzNzQ0MzIuMTkzNDE2NTA3LDY1MDc5Ny41MjE1NDI2Mzc4LDIyNzk1MDIuNjk2MDUyOTIxNSwyMDg2ODUwLjkzNDQ1Nzg0OTIsNDk1ODgwNi42NjkwNTkxOTcsMzUzNjkzMi4xNTk1NDc5NDY0LDgzMDk3MS4wNjQ4MTQxMjMsMjc0MjAyNi40ODIxNzg3MzkzLDE5MjA1MjUuNjA0NDU4Mzg2NSwyMTMxNjY1LjAwOTc2MzA2OSwyODcyNjE2LjkwNTY3MTE4MywyNzEwOTYzLjIwMTExNzE2MjYsNjM0NjI5My43MzAwNzAzNTM1LDQwOTY0Ni4xOTg5NTI3OTkzLDQ4MDEuNTgzMzE3ODQ2OTM1CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L05vblplcm9Nb3J0YWxpdHlSYXRlX0ZEX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9TXzAuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Ob25aZXJvTW9ydGFsaXR5UmF0ZV9GRF9SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vU18wLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYzI0NDAxCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Ob25aZXJvTW9ydGFsaXR5UmF0ZV9GRF9SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vU18wLmNzdgpAQCAtMCwwICsxIEBACitpdGVyYXRpb24sdGltZSwKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvTm9uWmVyb01vcnRhbGl0eVJhdGVfRkRfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL1NfMS5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L05vblplcm9Nb3J0YWxpdHlSYXRlX0ZEX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9TXzEuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJjMjQ0MDEKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L05vblplcm9Nb3J0YWxpdHlSYXRlX0ZEX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9TXzEuY3N2CkBAIC0wLDAgKzEgQEAKK2l0ZXJhdGlvbix0aW1lLApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Ob25aZXJvTW9ydGFsaXR5UmF0ZV9GRF9SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vU18yLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvTm9uWmVyb01vcnRhbGl0eVJhdGVfRkRfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL1NfMi5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDBlOTI1NgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvTm9uWmVyb01vcnRhbGl0eVJhdGVfRkRfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL1NfMi5jc3YKQEAgLTAsMCArMSwzMyBAQAoraXRlcmF0aW9uLHRpbWUsRUctRlJHLUcyMTAwMDEsRUctRlJHLUcyMTAwMDIsRUctRlJHLUcyMTAwMDMsRUctRlJHLUcyMTAwMDQsRUctRlJHLUcyMTAwMDUsRUctTE9FLUcyNDAwMDEsRUctTE9FLUcyNDAwMDIsRUctTE9FLUcyNDAwMDMsRUctTE9FLUcyNDAwMDQsRUctTE9FLUcyNDAwMDUsRUctTE9FLUcyNDAwMDYsRUctTE9FLUcyNDAwMDcsRUctTE9FLUcyNDAwMDgsRUctTE9FLUcyNDAwMDksRUctVVBFLUcyOTAwMDEsRUctVVBFLUcyOTAwMDIsRUctVVBFLUcyOTAwMDMsRUctVVBFLUcyOTAwMDQsRUctVVBFLUcyOTAwMDUsRUctVVBFLUcyOTAwMDYsRUctVVBFLUcyOTAwMDcsRUctVVBFLUcyOTAwMDgsRUctVVJHLUczMDAwMDEsRUctVVJHLUczMDAwMDIsRUctVVJHLUczMDAwMDMsRUctVVJHLUczMDAwMDQKKzEsVHVlIDI1IEphbiAxMSwyOTcyMzcuNDAzNDUzODAxNSwyNjUzODkuNjAzNDE4NTcxNzYsMTU0NDc4LjM1MDQxMTI2NzI1LDMxOTM0Ny4zMjc2MzY5MTMxNiwzMjE4OTguODk4OTEzNzc0Miw1MjAzNjIxLjg3OTMxMzg5NSw1NjU0NzcwLjUwNTQxMzkxMyw0NjM0NjI0LjUwNjU2OTA5LDQwMjU2MzkuMDg2MDYzNzA1LDUwMzMwNjIuNDg1MTM0ODM5LDEwMjIwNjYuOTgwNDU3NTI1LDU5NzQ4MTQuOTA2NjA5MjksMTE4MjQ1MC4zMDk0ODEwOTM0LDMxMzg5NTAuNDM5MDQ5MjAzNCwyODA1NjQ5LjU1MjI2MjIzOTYsNjQ0MDYxMy4xNTgwODYwOSw0NjY1OTcwLjY1NTQwMTg0MiwxMzEyMjQzLjk5NTgwMjU1NDgsMzgxOTIyNS43MzM1NTE3MTgzLDI1NDM0OTcuNTEzMDI5OTQyLDM3NTc1NDMuNzg5NjEzMjk0LDQxNzI2NTcuMTM3NjY4NjQyNywzNzExOTU2Ljk5MjA4NjkwNDYsODQ2MTMyNS42NDg5MDMxMTcsNTM5NTkzLjM1OTQ5MTEyNDQsNjc1Ni4xNzM5MjU3NDI4NTM1CisyLFdlZCAyNiBKYW4gMTEsMjk3MjM4LjU5MTcwNzM5MTU1LDI2NTM5MC42NjQ5NzY5ODU0LDE1NDQ3OC45NjgzMjQ2Njg5LDMxOTM0OC40ODkyMjE5ODYyLDMyMTkwMC4xODY1MDkzNjk4LDUyMDM2NDIuNjUxOTY0NTU3LDU2NTQ3OTMuMTI0NDk1OTM1LDQ2MzQ2NDMuMDQ1MDY3MTE3LDQwMjU2NTUuMTcwNjUzNDA2NSw1MDMzMDgyLjYwNDU0Mzk5MywxMDIyMDcxLjA2ODcyNTQ0NjgsNTk3NDgzOC44MDU4Njg5MTcsMTE4MjQ1NS4wMzkyODIzMzEyLDMxMzg5NjIuOTk0ODUwOTU5NiwyODA1NjYwLjc3NDE3ODk4MzYsNjQ0MDYyOC44NzQ3NTQxNjEsNDY2NTk4OS4yMDIwNjEzMywxMzEyMjQ5LjI0NDc3ODUzOCwzODE5MjQxLjAxMDQ1NDY1MjQsMjU0MzUwNy42NDA0NTE5NDksMzc1NzU1OC44MTk3ODg0NTIyLDQxNzI2NzMuODI4Mjk3MTkzLDM3MTE5NzEuODM5OTE0ODczLDg0NjEzNTkuNDIyMDE4MTY3LDUzOTU5NS40NzUyNjA3NjU5LDY3NTYuMjAwOTUwNDM4NTU3CiszLFRodSAyNyBKYW4gMTEsMjk3MjM5Ljc4MDEzOTc5MjA3LDI2NTM5MS43MjY1Mzk2NDUzNCwxNTQ0NzkuNTg2MjQwNTQyMiwzMTkzNDkuNjc5NzcxMzY1ODMsMzIxOTAxLjQ3NDExMDExNTg0LDUyMDM2NjMuNDM1MTYwNjIxLDU2NTQ4MTUuNzQzNjY4NDMyLDQ2MzQ2NjEuNTgzNjM5Mjk3LDQwMjU2NzEuMjU5ODAwNDM3LDUwMzMxMDIuNzI3MjQ0NzcyLDEwMjIwNzUuMTU3MDA5NzIxNyw1OTc0ODYyLjcwNTIyNDE0MSwxMTgyNDU5Ljc2OTEwMjQ4ODQsMzEzODk3NS41NTA3MDI5MzksMjgwNTY3MS45OTYzMTEwMzIsNjQ0MDY0Ny4xMDM4OTU2NTQsNDY2NjAwNy43NzgxMDk0NjUsMTMxMjI1NC40OTM3NzU1MTcsMzgxOTI1Ni4yODc0MTg2OTQyLDI1NDM1MTcuNzc5NTU5OTI0LDM3NTc1NzMuODUwMDIzNzMxNiw0MTcyNjkwLjUxODk5MjUwNjQsMzcxMTk4Ni42ODc4MDIyMzIzLDg0NjEzOTMuMjEzMzIwNTM4LDUzOTU5Ny42MDE2OTI5NzQ3LDY3NTYuMjI3OTc1MjQyMzU4Cis0LEZyaSAyOCBKYW4gMTEsMjk3MjQwLjk2MjUwNzMyNTM0LDI2NTM5Mi43ODYxMTE5Njg1NywxNTQ0ODAuMjAyNzI2Njg0NjksMzE5MzUwLjIwNjIwOTYzOTIsMzIxOTAyLjc2MTY2NDA5NTEsNTIwMzY4My44ODgwMTg1NTksNTY1NDgzOC4zNjI3ODQxMTYsNDYzNDY4MC4xMTQyNTI2OTgsNDAyNTY4Ny4yMDMwNzcwMTI3LDUwMzMxMjIuNzM0NTAxNzIxLDEwMjIwNzkuMjM4NDIxODE3OCw1OTc0ODg2LjU5Nzc0NDgwOSwxMTgyNDY0LjQ5ODk0MTU2NSwzMTM4OTg4LjEwMzY3ODM5OTcsMjgwNTY4My4xOTg1OTQ4NjU0LDY0NDA2MjcuMDkzMDEzMzAxLDQ2NjYwMjUuMzY0NjI5MTk2LDEzMTIyNTkuNzQyNzkzNDQ4NSwzODE5MjcxLjU2Mjc4ODg2OCwyNTQzNTI3LjUzMjUwMTczNiwzNzU3NTg4Ljg4MDMxOTA4OCw0MTcyNzA3LjIwOTc1NDU0MDYsMzcxMjAwMS41MzAyMDgzOTIsODQ2MTQyNi4zOTM5ODc1MjIsNTM5NTk5LjQzMjU2NDc5ODUsNjc1Ni4yNTUwMDAxNTQyNTk1Cis1LFNhdCAyOSBKYW4gMTEsMjk3MjQyLjEzODE1ODI2NCwyNjUzOTMuODQzNDk0Nzc2MTcsMTU0NDgwLjgxNzY0MDA3Njc0LDMxOTM0OS45OTQ2MzIyNTMzNywzMjE5MDQuMDQ5MTY2MTIzMTUsNTIwMzcwMy45NzQ4MDA2OTEsNTY1NDg2MC45ODE4MjgyNzUsNDYzNDY5OC42MzYxMDUxNTIsNDAyNTcwMi45ODQ3MzI2MTU4LDUwMzMxNDIuNjEzOTM3MDQzLDEwMjIwODMuMzEyMjczODQ2NSw1OTc0OTEwLjQ4MjczODg3OSwxMTgyNDY5LjIyODc5OTU2MDgsMzEzOTAwMC42NTM0ODUwNzg0LDI4MDU2OTQuMzc4OTk5Mjk3NSw2NDQwNTY0LjM2NTY0MzMwMSw0NjY2MDQxLjg1NTExNjg0NiwxMzEyMjY0Ljk5MTgzMjMyODMsMzgxOTI4Ni44MzYzOTk5MDcyLDI1NDM1MzYuODU3NjU4OTkzNSwzNzU3NjAzLjkxMDY3NDUxOCw0MTcyNzIzLjkwMDU4MzI5MTQsMzcxMjAxNi4zNjY1ODAwNjg2LDg0NjE0NTguODk4Mjk2NzE4LDUzOTYwMC45MzU1NjkwMDI2LDY3NTYuMjgyMDI1MTc0MjYwNQorNixTdW4gMzAgSmFuIDExLDI5NzI0My4yNjcxODgzMTc5LDI2NTM5NC44ODAzNDEyODgsMTU0NDgxLjQxNDY0ODQ4NTQzLDMxOTM0Ni4wMzk1NDM0MTIwNCwzMjE5MDUuMzM1ODkzMzI4NTMsNTIwMzcyMS43MjI5OTUwODksNTY1NDg4My41OTg3MTQxOTcsNDYzNDcxNy4wNDg3NTYzNTEsNDAyNTcxNy43MDQxMzg3MzM0LDUwMzMxNjEuNTg0ODcyNjAxLDEwMjIwODcuMzAxNTI4MzA2OSw1OTc0OTM0LjI2NzEwNDM2LDExODI0NzMuOTU4Njc2MDUxLDMxMzkwMTMuMTYzNDgzNzc3NSwyODA1NzA1LjMyMDU1MTY1NTMsNjQ0MDMwOC4yMjc3Njc5MDMsNDY2NjA1MC45Mzg4NDUzNzcsMTMxMjI3MC4yNDA4Njc1NzEyLDM4MTkzMDIuMDg2NzczODEzNywyNTQzNTQzLjMzMzc2MDk0MDUsMzc1NzYxOC45NDEwNzkyMTIsNDE3Mjc0MC41OTExNzE1NzIsMzcxMjAzMS4xMjg5NzU3MDI0LDg0NjE0ODYuODIzMDQxNDczLDUzOTYwMC41NDQ0OTU1MjU1LDY3NTYuMzA5MDQxNjA1MzkzCis3LE1vbiAzMSBKYW4gMTEsMjk3MjQ0LjI5MTU5Mzg5MzksMjY1Mzk1Ljg2OTk5ODQ4MTMsMTU0NDgxLjk3MDAzNDgwNzY2LDMxOTMzMy45NjgwOTM3NDc3NCwzMjE5MDYuNjIwNzk2MjkyNzMsNTIwMzczNC4yNjQ3NDc2OTMsNTY1NDkwNi4yMTA0MTI1OTIsNDYzNDczNS4yMDYzNzEyMzc1LDQwMjU3MzAuMDUxOTczMjc4Niw1MDMzMTc4LjUxMjYxMTgyMSwxMDIyMDkxLjA5NDMxMDM2NDgsNTk3NDk1Ny44MTU2NzUxMDQsMTE4MjQ3OC42ODg1NzA0MiwzMTM5MDI1LjU4MDQ3NjAzNjgsMjgwNTcxNS43MDgxNjE1MTk0LDY0Mzk2MzkuMzkzMjY4NDk5NSw0NjY2MDQzLjQ0MjEyODE0MywxMzEyMjc1LjQ4OTg2MzUzMjQsMzgxOTMxNy4yODI3MjcxNTA3LDI1NDM1NDMuNDQwOTM4Mzc5LDM3NTc2MzMuOTcxNTE3NDk4LDQxNzI3NTcuMjgxMDc0MDI0MywzNzEyMDQ1LjcxODc0NDE2MDYsODQ2MTUwNC40OTQyNzIxMTcsNTM5NTk1Ljk4MTUyODIzNzUsNjc1Ni4zMzYwMzY4Mzg4NzkKKzgsVHVlIDEgRmViIDExLDI5NzI0NC45MTQ3NzI3MjEwNywyNjUzOTYuNjYxNzg0NzcxMTMsMTU0NDgyLjMzMjQ2ODkwNTg0LDMxOTI5Ni40NTMxMTI4ODA5LDMyMTkwNy44OTYwODA5ODg0Niw1MjAzNzI3Ljk3NTcxMDUyNiw1NjU0OTI4Ljc5Mzk5MTMxMDUsNDYzNDc1Mi4xMDgzODEwNzcsNDAyNTczMy42MjE5ODgxODQ4LDUwMzMxODcuNDgxNDA3ODg1LDEwMjIwOTMuOTg1Mjk4Nzg0Niw1OTc0OTgwLjE1MDM2OTU4MywxMTgyNDgzLjQxODQ3Mzk3NDMsMzEzOTAzNy41Mzk0NTM0NDEsMjgwNTcyMy40NTI2NzUzNzU2LDY0Mzc3MjYuMTQ3MjQ1MDg3LDQ2NjU5NzMuNTE5MzE5NTU0LDEzMTIyODAuNzM4NDQyMTE2OSwzODE5MzMyLjIwMzg4MjkxOTYsMjU0MzUxOS44MTA4OTcwMTUsMzc1NzY0OS4wMDE4MjM0NDUzLDQxNzI3NzMuOTY0NDQwNDkzNCwzNzEyMDU5LjQ2ODM0MzMzOSw4NDYxNDgzLjUwNzQ3MzU5Miw1Mzk1NzcuMjk1MTM3NTA4NCw2NzU2LjM2Mjg3MzA0Nzc4OQorOSxXZWQgMiBGZWIgMTEsMjk3MjQ0LjQxODk0OTg1MTksMjY1Mzk2Ljg4NTU2MTQ1OTY0LDE1NDQ4Mi4xMjQyODg3MjIsMzE5MTkzLjQ5MDkyMjg4OTEsMzIxOTA5LjE0MTk2MjE2OTg0LDUyMDM2NzAuMjgxMzU3NTUsNTY1NDk1MS4yOTExMjMzMTksNDYzNDc2NS4yMzY0MTE4MzQsNDAyNTcxMy4wMjExNzY1ODMsNTAzMzE3NC4xMzIwMjc3MTIsMTAyMjA5NC4yMTY4NzAzNzAyLDU5NzQ5OTguNzk1MDU2MzUwNSwxMTgyNDg4LjE0ODM2MzU2OSwzMTM5MDQ4LjEyMTcwNjAxNTQsMjgwNTcyMy4zMTY0NTczMDIsNjQzMjY2Ny4zNjM2NTI1NDksNDY2NTczMC42MzMzMTY5NTU1LDEzMTIyODUuOTg1NjEzODYwMiwzODE5MzQ2LjI5Mzc0NTQ0NiwyNTQzNDMwLjY1MzUzMzE0MiwzNzU3NjY0LjAzMTU2Mjg3MjcsNDE3Mjc5MC42MjU3NTU0Nzc3LDM3MTIwNzAuNzAwMjQyMDI2LDg0NjEzNTUuMzU2NTI1ODQsNTM5NTIxLjA1MDM5MjU5NDgsNjc1Ni4zODkxODg3OTY1MjIKKzEwLFRodSAzIEZlYiAxMSwyOTcyNDAuMjk1OTAwNjgwMDcsMjY1Mzk1LjE5Nzc4NjU2NDQsMTU0NDc5Ljg4MzM5MjgzMTcyLDMxODkwNi44OTUyMjM3MjY5LDMyMTkxMC4yNzM0OTI0MzczLDUyMDM0NTMuMTI0OTg1MzAyLDU2NTQ5NzMuNDQ3MzIyODM3LDQ2MzQ3NjQuMzM0Mjg0MjQxLDQwMjU2MTUuOTgxNjE0MzY3LDUwMzMwODcuNjM5NzkxNzQsMTAyMjA4NS4wMjQ1MDIyNzA0LDU5NzUwMDMuMzAyNjc2NzIyLDExODI0OTIuODc4MTA0MTEyLDMxMzkwNTMuNTg3NzQyNzg4MywyODA1Njk0LjE5MjEzNjQ5OSw2NDE4OTQ1LjIzMTMzNjAyNSw0NjY0OTM0Ljc1NTc0MTk2NywxMzEyMjkxLjIyNjU3MDE1NDUsMzgxOTM1Ny4yMzgzNzI2MDIsMjU0MzEzMy41NDQ1Mzk0NjkzLDM3NTc2NzkuMDU4NjEzNjAyLDQxNzI4MDcuMTc5MDI4NjM2MywzNzEyMDcyLjY0NTI1NTI3Nyw4NDYwODg0LjE4NjU2Mjk2Nyw1MzkzNTMuNzE1OTcwMzYyOCw2NzU2LjQxMzIzMDg3NzQ3NgorMTEsRnJpIDQgRmViIDExLDI5NzIyNS40NjcwOTc1ODE2LDI2NTM4Ny43NDYwMjU2NDY3LDE1NDQ3MS4zMDY2OTIyNTM1LDMxODEzMC4yMjkxNjk0MjgyLDMyMTkxMS4wMzA5Mjg2NjQ4NCw1MjAyNzc4LjgxNDk1ODIzNyw1NjU0OTk0LjQ4MDEyNDY5Nyw0NjM0NzE4LjYyNzIwMTE1Myw0MDI1Mjk2LjkwMzA3MzM2LDUwMzI3ODMuNzU4NDcwNzIxLDEwMjIwNDYuNTQ0OTM3NTIzMiw1OTc0OTYxLjkyMzM4NDY1NywxMTgyNDk3LjYwNzI0NDYyMzYsMzEzOTA0Mi43MTkwNzM3NCwyODA1NTcyLjk4MTUyMjAxNjcsNjM4MjQxMy43NDI4NzQ4MDcsNDY2MjUyMS41MzQxNTE2MTYsMTMxMjI5Ni40NDYwMjU5NjgzLDM4MTkzNTguMDQxNzMwOTYzLDI1NDIyMzEuMTUwNDk0MzcwNiwzNzU3Njk0LjA3NjIxODA1Niw0MTcyODIzLjM0MDg0NjcyNDMsMzcxMjA0NS4wNjA5ODYyMDgzLDg0NTk0MDguODgwMjIzMjYzLDUzODg3OC4yOTA0NjM1MzQ2LDY3NTYuNDI5NDMwMzQ5NTY1CisxMixTYXQgNSBGZWIgMTEsMjk3MTc3LjgwNTE3MjE5MTQsMjY1MzYyLjI2NTczMzA2NzIsMTU0NDQyLjE0NTkzNDA1MzIsMzE2MDIyLjc3NTUwMjQyMzA2LDMyMTkxMC40ODcwNzQzNTU2LDUyMDA3NTMuODc0NjAxNDUsNTY1NTAxMS41NTkzOTkxNzQsNDYzNDUyMi4zMDQzNjk1NTgsNDAyNDMwOS45NzU0Mjc1NTAzLDUwMzE4MDcuMzI2MTY0MDE1LDEwMjE5MTMuMTgyMTE3MDU1OSw1OTc0NzYyLjczNzMxNzQ5MiwxMTgyNTAyLjMzMzg1NjQxNzMsMzEzODk3Ni45NzIxMzI4MzI3LDI4MDUxNDMuNTgxMDA2MTk0NSw2Mjg0ODM4LjA1Nzc4NDE2OCw0NjU1MjA4LjQwMzc3OTU3OCwxMzEyMzAxLjU4NjE1MDkzMDcsMzgxOTMyNC4yNzg3ODcxNjEsMjUzOTUwNS44MDc3MzE3NjksMzc1NzcwOS4wNTg2MzQ0NTEsNDE3MjgzNy45NDM1MzYwMTQsMzcxMTkxOC44MTUzNzYwNzI3LDg0NTQ4ODYuODM3MTgzOTMyLDUzNzUyOC40Mzc3NTgwNDIyLDY3NTYuNDE2OTQyNTAwNTg2CisxMyxTdW4gNiBGZWIgMTEsMjk3MDMyLjM5NTM3NzEyMDI0LDI2NTI4Mi4zNTEzNTk1OTA1LDE1NDM0OC45OTM5MTgwMDM5LDMxMDM3Mi4zNDQ1NTcwODE4LDMyMTkwNS42NzUyNDA2NTI5LDUxOTQ4MzUuMjM4NjMxMzQxLDU2NTUwMTUuNTU0MzMwMzE0LDQ2MzM4NDQuNzU2Njc5OTQxLDQwMjEzNjYuNzQwMDYwNjUxNyw1MDI4ODE0LjIwMzI4OTM4NiwxMDIxNDg1LjM5NDU4MTMyOTgsNTk3NDA1MC40NDkxNzM5MDMsMTE4MjUwNy4wNTExMjMyMDM3LDMxMzg3MzUuOTc0NDgyOTk0LDI4MDM3MzIuMzYwMjI1MzM2Niw2MDI3OTY0LjYzNTg2ODg5Niw0NjMzNDc5LjA2MDQzNTI0LDEzMTIzMDYuNDU1NzMwNDgyMiwzODE5MTc4Ljg3Njg5MTIxOTUsMjUzMTQ0MS4xMDc1NjUyOTAzLDM3NTc3MjMuOTIwMzkyMDA1Nyw0MTcyODQ2LjkzOTczOTIyMiwzNzExNDc4Ljg0NTg2ODA5Niw4NDQxMzc5LjQ3ODc3NDAxMyw1MzM3NDguOTc5MDE5OTM1Niw2NzU2LjMwNzMyOTkwNzE3OQorMTQsTW9uIDcgRmViIDExLDI5NjU5My45NzcxODM1NDAyLDI2NTAzNy4zMzEyNTY0NjY1LDE1NDA1Ni4yMTg2NzYwOTM1NiwyOTU0MjIuNTU0OTYxNTQxMTQsMzIxODg2LjcyODAyMDA3Nzg2LDUxNzc2NTEuMTAzNTg0NjU3LDU2NTQ5NzUuNzM3ODk3NTY5LDQ2MzE2MTguOTU2NTg1MTcyLDQwMTI2NTguMDA5MTI4OTkyLDUwMTk3MzAuMjQ3NjE3Nzg3LDEwMjAxMzkuOTgwMjAyNTA4Nyw1OTcxNjU1LjQyMDM3NDI0MzUsMTE4MjUxMS43MzMzMTYyNzY3LDMxMzc5MzEuNTIwODQxMTExLDI3OTkxNzAuMDYzNjk1Mzk3LDUzNjk2MDAuMTE1NTYxMDk0LDQ1NjkyNTEuOTkzODE0NDU0LDEzMTIzMTAuMzk2NjQ2ODY5LDM4MTg2NjkuOTMzMTUxMDAxNiwyNTA3Njg5LjcwNTcxMDQ2NTYsMzc1NzczOC4zNjUxOTU4NjUzLDQxNzI4MzUuNDk2NTIxMTAwNCwzNzEwMDM0LjkwNDgwNjc0LDg0MDEyMzkuMTIzOTU2ODQ0LDUyMzI0MS4zNDg5MjAzMDksNjc1NS44NjgyNTcwNjA3NTIKKzE1LFR1ZSA4IEZlYiAxMSwyOTUyODguNjM2ODcyMTQ3MjcsMjY0Mjk5LjExMzYwMzc5NjYsMTUzMTUyLjk0MzM1NDAwNjYyLDI1NzM3My40MDc3MDI1NDA0NSwzMjE4MjIuMDY0MjMyODc4Nyw1MTI4MzAyLjI0OTg0OTgyNyw1NjU0NzkyLjc3NDc3Nzc2OSw0NjI0NTE0LjQ3MzM2NjIxLDM5ODcxNjcuMDQwNjY3ODY2NCw0OTkyNTA0Ljg5NTIyMDE2NCwxMDE1OTg3LjI0NjUxMjIxMDgsNTk2Mzg2Ni42MDY0Njc3NDUsMTE4MjUxNi4yODk4MDczNjY0LDMxMzUzNTIuNDM2ODc1Mzc4NywyNzg0NzA4LjczMjk5ODU3NCwzODE0MjU1LjcxNjIwMjMwMyw0MzgyNzg1LjI0MzgxODU0NiwxMzEyMzExLjI0ODM0MTk2OTcsMzgxNzAwMi44MjA2MTc4NjcsMjQzODc1Ni45ODkwODAyODgsMzc1Nzc1MS40MTQzMzY2NTQsNDE3Mjc1Mi41MTUyODc0MzMsMzcwNTQ0Mi41NDU3NTM4MzIsODI4MzM4NS43MDQ2NTc3NDYsNDk0NjA4Ljc3NjU3MDc1MjY3LDY3NTQuMzQ2MzIyNTE1MDUxCisxNixXZWQgOSBGZWIgMTEsMjkxNDM1LjMxNzQzMjkxMzc1LDI2MjA5OC41NDQ2ODUzNjE4OCwxNTA0MDIuNTc3NzIyNjQ2MjQsMTY5OTg4LjE1NDUxMDY0NTc1LDMyMTYxMC4xMzQ4NTk2NzY0LDQ5ODgzMzkuODcyOTE0NzE1LDU2NTQxNDMuMzk2NzQwNjUsNDYwMjExNi44MzQwMzEzMzksMzkxMzI0OC41NTQ5MTYwMzI2LDQ5MTE2NDIuMTQ4NDQ1NzE2LDEwMDMzMTQuODEwMzQ1MjU0Nyw1OTM4ODc0LjI3NTY1MDc5NCwxMTgyNTIwLjM5ODA1MjAxMDcsMzEyNzIxMC40MTc0MTc3NzUsMjczOTQxOS45MzA5MTcwNjMsOTM1NDY4LjQ0MTgzMzg1MzMsMzg1OTcwMy4wMDQ2NTQ4MTksMTMxMjMwMS44OTM1ODAyMzEzLDM4MTE2NjMuMTczMDI3NzQyLDIyNDM1NDcuODgyMzU5NTY3NiwzNzU3NzU5LjgxODU3NTgwMzcsNDE3MjQyMC43NjkyMDE3MTM2LDM2OTEwMjguMTIxODA3Mzg4LDc5NDI0NTcuNTAzMTkzNTYxLDQyMDAzOC4yMDIzNzA3NzAyLDY3NDkuMjk5MTI4MjI2MDYxCisxNyxUaHUgMTAgRmViIDExLDI3NTE5OC45OTMxNzc2MDUsMjUyNzE1LjgzNzg0MjAxNDUsMTM4NDE0LjM3MzA4OTM2ODcsMjk0NTAuMzkyNDQ1MjI3NTY4LDMyMDU2NC40MzMyNTcyNzg3LDQ0NDc0OTEuMDUyODcyMTA0LDU2NTA4MDAuODgwMzgwNjMsNDQ5NjgwMS42NjYyMzg1MDcsMzYxMjgyOC4wNDU2MDYwODE0LDQ1NjkyODAuMjA0ODA0MzUyNSw5NDcyNTQuMDY4NDI3ODk0NSw1ODE4MjkzLjc5OTg4MDYzMywxMTgyNTIxLjU5OTcwOTg2MDMsMzA4ODc3OC4xNDI5OTIzMjksMjUzMjkwNS42NjIwOTg3ODM1LDI0Ny4zMTc4NTkzNjY1OTY2NSwyMTYyMDYxLjI4MDUyNzE1NTQsMTMxMjIzMi43ODAzMTQ2Njg1LDM3ODYwNTkuMjk2ODQwOTQzLDE1NTM3ODMuMDQwNDcyMzI0NSwzNzU3NzQwLjcyMDc1MzA3MzcsNDE3MDUzMC44OTE0NzQwMzIzLDM2MjM2NDEuMTkyOTc1MDI3LDY2MTI3MTkuNDM5MTQ0MTQ5LDIxNDI4MS4xMzU5MzY5NDM5Niw2NzI0LjExNTA2MTYxMTUyCisxOCxGcmkgMTEgRmViIDExLDIxOTMyNy41MzExOTI1MjA4LDIyMTMyMy43MDc4NTg1OTc0Miw5NzczNC4zNDE4NTEwMDg4NywxNC44OTM5Nzg5NDMxMzM4NjMsMzE1OTk4LjQ3NDc1NDI5NzMsMjg4NjA5OS4xOTcwMzIwOTc3LDU2MzU2NTYuODgyMDE2Mjc2LDQwNjc4NDIuNTg4ODQyMTQwNSwyNjQ4NTQ2LjEwMzQ1OTA3MywzNDA4Mzg5LjU4NTE0ODEzLDc0NTcwMS4wNDQ1NjQ2NzA5LDUzMTI3NDcuNzc0NTQzOTA1LDExODI1MDguMzU0Nzg3NTE2NCwyOTI5MTQyLjY3MDA2NDk3OCwxNzkzNzg3LjcwNjY3Njc4MywzMDYuNjE2MzkyNTA0MjU2OTYsOC40MTM2OTc4NDA0MzQ3ODYsMTMxMTg5OS4wMTMzMTExMTU2LDM2NzkzNjQuMjk2OTUxMTUyLDI3MDY3Ni4wMDE1NDY5ODEyLDM3NTc1OTguMDI4NzgyODYwNCw0MTYxMjExLjIxNjk0OTM5MTYsMzM0OTIwMy41NzYwMDY1NzYsMzA4MjQyMy43NjIxNjk1Mjg4LDM3NjIuMTEwNjAwMDQ5NzI5Myw2NjEzLjI5NTI3NzQ3MjQyCisxOSxTYXQgMTIgRmViIDExLDc2ODQwLjkxNTYzNzA5MTcsMTQ5NTQxLjY3MzI0NTY3MjQzLDE3ODA2LjY4ODc0MjA2NzAxLDE2LjAzNDY5NTkzNTY2NTE2MiwyOTQzOTUuNzA0NTY3MTQzMyw0MTI3OTMuMDIxNDIwMjE1NCw1NTU4NTA2LjAyODk2ODg0NCwyNDY3MTM2LjQ2ODE3NjM2MjYsNjI1MjMyLjE1NjI2ODQ4MDksODIxMzAwLjAyMTk5MDU2MSwyNDI0NzIuNTc3OTQ4ODUzNzUsMzMzOTU3MC42Njc3ODIzNTM3LDExODI0MDYuNDc3NDIwNDE4NSwyMjYxODAyLjQ2MzAyNzcyNiwyOTI5NDYuMjk4MzQ4MDYxMSwyODEuNjgzMzEzODQ2NjM1MjYsMTIyLjYyNzk5NTE2MzI3OTE1LDEzMTAxNjYuNzQ0MTc3NzkzOSwzMjI5NDQ5LjE4NTY4MTMyNjMsODUuMTE2MjIxNTg5OTcxMzYsMzc1Njc4OC4xODMxMDA0MTcsNDEwOTAzOC4xNjIxODAwMDksMjI4MTMyNi45NDUwODE2NzEyLDEuNDQ5ODAxODgwMzcyODgxOCwxNS45MDU5NDE4MjQyODAwNjksNjA5My44MTgxODU0MDM3NjUKKzIwLFN1biAxMyBGZWIgMTEsNDM1Ljk1MzI1MjgxNjg3NzQ3LDY2NDE2LjExMjAxNDYyNDI2LDMuOTEzMDE3MDU3ODgyMzY5LDIwLjA5MzU1OTg5MDk0OTg3NiwyMTE5OTIuMTk3ODMzMzEyMTUsMTQ0LjIwODUyOTc1NzM0NDQ4LDUyMDE5MjguOTU5MDk4NzQwNSwyMjg3NjYuNzM1MTY2MDUyNTYsNTcuMTIwNTYyODI3MjEyNzQsMzMuMzIzMDcwMjgxOTkyODM0LDExODkuNzQ3MzI4MDA5MzEyMiwzNTY1OTUuNjAzMzc2NDg2NSwxMTgxNzkzLjQ4MjM5MTEzNzQsNjkwNDYwLjA5Njk5OTg4MjgsNjQuMzgzODU5MzEwODEyMTcsNDIwLjgyMzQ0ODc2MzM1MzA0LDE3My41NDczMzYyOTgyMjU5NiwxMzAxOTA1LjY0NjI3NTQ4MzMsMTgzNjg3OC44NTg3NTkxNzc2LDgxLjc5Nzk4MDU4OTA4MDYsMzc1Mjc0OS4zMzQ2NTMxMTU0LDM4NDAxNTEuMjYyNTQ3MDgzNywzODc1ODcuMDUxMTc3MjA2NDUsMjQyLjkyOTgzNzc4ODUzMjk4LDIyLjA1OTM3MjcyMDM1MTkwNiw0Mjk3LjQxNzQzNzY1MjEyMgorMjEsTW9uIDE0IEZlYiAxMSw5LjI3NDc1ODczMDA4NjYzNywxMjMwNC44ODg2MjI0ODY3NjIsNS4yMjgwODU0OTM5NzA0NjU1LDIzLjM1MjIwOTIyNzc5Njg0LDQ1MzUyLjQ0MDg0NzE4MzU1NiwxOTAuMDY1NzU1MzQ3NzEyNjQsMzc5NTA5OC44Mzk1MjM5MzU3LDExNS4yNzE2MzM2MTIxNTUzNiwxMzIuMzQ3MDg0NzIxMDg5OTQsMTYxLjQ2ODY5NjM4NDcyOTA3LDMxLjk2NDMwNjUyMjA1ODQyLDE1Ny42ODI1NjQ2MTEyMjc4MywxMTc4MTczLjQ5Mzg3NTc3MTMsMTY1Ni4yNDgxODQzNzI1NDU0LDkyLjI1NDU0MDczMzU2NDkxLDUzNy45ODkyNzY0NTk2NjQ5LDI0Ni41NDI5NzQ1Nzk5NTgxOCwxMjYzMTI4LjUxNDk0NzYxNjUsMTQyMTQyLjIzODUzNjYwMTQsMTIwLjM2MjcxMDk5MDQzNjc3LDM3MzI2OTYuNzQ2NTk3MDQ3NCwyNjkwMzIyLjc2MjYzOTI3Miw4OS42MDE5ODg5MDA4MDcwMywzMzkuODUyMjYwNTYxNzM4MywyOS43NDQzMTE3MTA3OTY4MzYsMTE0Ny45MjQwMDA2MjQwNDgyCisyMixUdWUgMTUgRmViIDExLDEzLjA1MTE1NTQ0NzA5NzA2NSwzODYuNjAxNTczMDg5MTAzMSw3LjM3OTIyNTYwMTUwMzU5NywyOC4xMjk3NTI0MDA5MjIyMTQsNy4zMjkxMzQxNjM3MTQ0OTUsMjYyLjMxNjQwMTI4MjYwNiw4ODk1NjQuNjA5MjcxNjI5MSwxNjYuNDY3ODkxMTYzODAzMiwxODcuMTU0NzcyNTU5MTQ4MjYsMjMwLjU1MjAwMjQzNTA2NjE5LDQ0Ljc2OTM0MTUzMzQyMTUyLDIxMC4zNzUwNjA5Mjc1NjA2NCwxMTU4ODQyLjY2MTkzNzEyMSw5OS4wNDYzMjY4NDUzODc2NywxMzIuNDk0MTE2OTc2NjU0Niw2OTMuMDM4NzM4ODMxNDEsMzM1LjcyNDE4MDM1MTUwNDQ2LDEwOTgyNTYuMDg5OTg0MTAzLDEwNC4xNTQzNzMwNjc0OTk2OCwxNjUuOTA2NjUyMjk1NzE1MjIsMzYzODA1OC4xNDExNDc0NjAzLDQ5NDc1OS45NDI1NTk4Nzg4NywxMjUuOTMxMTYzNjE1NTUzMzIsNDc1LjQ5MTkwNzU4NDc5MTUsMzkuNjMyMDA2MTk2Njc5MDksOS43NTYyMjUzMjcyOTMzOTMKKzIzLFdlZCAxNiBGZWIgMTEsMTguMDExMjcxNzM0MDU2NjU2LDIwLjYzMDIzMjAzNzY2NjA3MiwxMC4xMTE2MzQ4MjgwMjY2NzIsMzQuNTkxNjI0ODgyNjI3MDEsMTAuNjU1ODAyNjM1ODc3NDE4LDM1NC45NzAxMTExMTc2NTY2NCw5NC45ODAwMjkzMDk3NTQwMiwyMzYuMjc5MzcyMzQxNjAzOSwyNTcuNDE3MTkzMjMzMjE4LDMxOC42Nzk3MjYzODgzNTUzMyw2MS43ODM5OTk2MTQ1NTA5OSwyOTkuNDU1NzY4MzcyMjEwMSwxMDY5Mzg0LjQ5ODA4MTUxNTUsMTM5LjA0OTY3NjQwMTY3OTY4LDE4My41MTMyMDQ2MjM1OTkyOCw4ODYuMTYyNzYwMjg3NTIxOCw0NDYuMjM2NzAyODcxMjkwNCw1ODI3MDYuODQ0NDM2NjIyMiwxNDUuODE3NDQwNTYwMjY0MzQsMjIyLjQwMzUwNDI4MjM4ODU4LDMyMzAzNzAuOTYzNDQ1MzM0NywxMDEuNTg5MzYwMzYxNzYzMjQsMTc5LjEwNDc1NTAwNDAxNzk2LDY0NS40NjUxNDA0MDM0NjM5LDUxLjk2NjA1MTIxMTE1NTE1LDAuMjQwMDMwMzYyMTgwMzU1NTMKKzI0LFRodSAxNyBGZWIgMTEsMjQuMTMyNDAwODM5MzUwMTUsMjMuNjg3NTgwMzQ4Mzk4NzUsMTMuNTA0NTI1ODU2NTYxMTU0LDQyLjgyNDU2OTY2NzQwMDc4LDE0LjcyNjkwNzA5MTg3MjgzNSw0NzAuMjU3NTU2OTcxNDg2NTcsMTQ4LjE3MjIzNzMzOTYzMTg2LDMyMi42NTgyOTYzODM1ODc0NywzNDQuNzE2NzM4NDQ1MTI1MTUsNDI4LjA5Nzk1Nzk2ODk1NTE0LDgyLjg5MzI5MTU1NzU1OTcyLDQwOS44MzI0NTM3NDYxMjcyNyw4MjI0OTcuMTY2MTYyMTcxMiwxOTAuOTQzMzY0MjMwNTcwODYsMjQ2LjkwOTgxODcyMDExNjM2LDExMjcuNDUzMTk2MTE5MDI1Nyw1ODQuMzk1ODEyMDEzNzYzLDE4Ljc3NzI5NTI3MDk4MzE1NiwxOTkuMDg2MzcwNzc1MDgxNDYsMjkzLjAyNDE3NzIwMzc1ODI2LDIxNzkxNTIuMDE0MDAxMDE5OCwxMzEuNTA1NjQwNjQ0NTQyMiwyNDUuMDAwNzU4NDA1MTIxNjIsODU3LjQ5NzA1ODk2NDE0MTgsNjcuNDA2MTk5MTgxNzQ0OTUsMC4zMTEwNjY2NDM1MDUyMTk4NAorMjUsRnJpIDE4IEZlYiAxMSwzMS4xNjU0MDQ5NTY2OTkyMjcsMjcuMDUxOTA2NzM1NzEzMDMzLDE3LjM4OTQ4MDcwMzYzNjk3LDUyLjYyNzU5MTk3NzE5NjE0LDIwLjQ2ODI2NTY3NjMyODIxMiw2MDIuMzQ2NjUxMDU3Nzc5NCwzNzQuNzU0NzY3MTI1Mjg4MzcsNDIzLjc0NDgwMzYxNjY2OTYsNDQ0LjU2NTMwNTc1MDQ5ODIsNTUzLjE0NTY5NzkwMDMwNzYsMTA3LjE2NjYzMTcyNjU1ODU2LDUzOS4yODkwODgyMzU5MjgxLDMwODU5My4wMTExOTMzMjE4NCwyNTQuMzAzNzY5NTA5Mzc5MywzMTkuMTU1NTQ4MTAzNjk2MzMsMTQxOC42MzUzODI1OTQ4MDI0LDc0NS4zMzU5NDU3MDUzMzE3LDU3LjkzNzI1NTI4NTU2NDYsMjY5Ljk4MTc4NTM3MzUyNDIsMzc0LjUyNzgwNDgwNzM0NzgsMjM0MjM5LjE3MzQ2MzIzMzc1LDE4Ni4wMDcyNzAyNzc2ODI4NCwzMjMuMjI2NTE4MzYzNTY3OTUsMTA5OS44ODI3NTUzMTUzMTIsODUuMzYwMjE5ODE3MDUxMjMsMC40NDIzNDYxNzg2OTQzMDQzNworMjYsU2F0IDE5IEZlYiAxMSw0MS43NTk5MTA5ODc5MDY4MzUsMjguNDY0MTgzMDU3ODg3MzA0LDIzLjM3MDM4NzYyMjI2NDQ2Nyw2Ny4zNzQ0NzAyMDgyMDUyMiwyNy45MjYxNDI3NDY4NjYwNzMsODA1LjgzMzg1NDgyMzY3OCwyNzYuMzUwOTQ4ODE5MTM5MDMsNTc3LjUwNTk4ODM1ODU5NTcsNTk4LjY3NzU5MDYzNzI0NjMsNzQ2LjE1MTc3Njk4MDEzNjEsMTQ0LjUzODQ1OTgxODMxNjA4LDczNS44MDIyNjEwNzA0OTY3LDQuNzg3MzIyNTMyOTAwOTA3LDM0Ny4yNjExOTk5MTcxNTIzLDQzMC42MTYwNjkzMjI5ODIzNiwxODMzLjg1MDM1MzI2NDUzMzYsOTg0LjczODIyNTg3NjI1MjcsMjYuODQ1NDc3Mjk2MzM1ODkzLDM2Ni44MDc1MzgyNzg4MDc4NCw0OTcuMzE1MzQ2NDgzNTA1LDEwMS43NDkzNzgyMDM0MTc5NSwyNjcuODIyMDgzNDg2MDkwMjYsNDQwLjkxMTQ0NjYxNjY5OTQ0LDE0NzAuNjM1NzM5OTU3ODYxLDExMi4yMjE4NDU0Nzg0NzYxMSwwLjU1OTgxNjI0NzU4NjA1NTkKKzI3LFN1biAyMCBGZWIgMTEsNTIuNzIxNzE1Njc1OTQ4NjEsMzEuMzg5MTQ0NzIxMDQ1ODk1LDI5LjU3NDc1OTQ2ODA4NTQwNyw4Mi45MzA3NDMyODY0OTg5NywzNi42OTEyOTcyNTM3ODE3LDEwMTcuMDQ5Njg5MjYxMzk2OSw4NDQuOTUzMjUzMzE5MDQyNyw3MzYuMzI5MzE0NjA2MjE1Nyw3NTguMjU4OTAxNjM1MzgxLDk0NS45NDU1ODU1MTM3ODY5LDE4My4yMjEzMzU0OTY1MjM5OCw5MzguODA3NTY2NTMwODUxMSw5Ny43OTcwNTI5ODU5MTcwMyw0NDQuNDc2ODI4NDE3MjM3MjQsNTQ2LjAzNDE3MDk1MDM5MDMsMjI2OC41NjQ2NTg0OTk1OTA3LDEyMzQuMTA3MDg3NDc0NzUxMywxNTcuODY4NDAzNzI4NjY4Myw0NzQuMDc1NjAzODg5NTE2MDYsNjI1LjAwOTA2ODk5MDI4MDIsNTEuMzgyMjU2NDMxODcxNzQsMzU5Ljc1NjU4NzgwMjExNzA1LDU2Mi43NDgyMzk4NzgxNzQ0LDE4NTUuNTg0NTA1MzQxMzMxLDE0MC4yMTM3ODAyNTU0NTA4LDAuNzcxODI5NDU4MDUxNjU3OAorMjgsTW9uIDIxIEZlYiAxMSw2OS40OTMxMzI4Njc2NDc2OSwzNy4wMzA1OTE5ODkxMzU1NywzOS4wODQ3MTk1NTU2ODE3NywxMDYuNjAyMzY3NTQxNzgzNjUsNDguNzgwMzYwNzg1NTg5ODksMTM0MC43NTEyMjE3ODIzNjMsODg3Ljk3MTgzMDM3NTg2ODEsOTgyLjAxOTI5NzQ3Mzc5NzcsMTAwMy4yMTk4NjMxNTAxNDI4LDEyNTIuNjE4OTAzOTE4MDY2NywyNDIuNzE1OTg3NDgyMTg0MDYsMTI1Mi45NDM4OTYwNjc3OTMsMTY1LjczOTk2NzM5NDc0MTg1LDU5NC4yMzc5NTE3MDg5MTM5LDcyMi45NDU2NTg4NzE0ODk1LDI5MTcuNjg1NTQzMjU3ODcxLDE2MTMuNjAwOTk5OTY3NjM0MiwyNjAuNTQ3NDUwMDQ2MzAzOSw2MzEuMjMzODA4ODE2MjY2Nyw4MTkuODEyMzE1MjM3NjcxOCw1Ny42NDYxODAzMzYxNzI4OSw0ODMuNTQ3ODg0NTEzNTA0ODcsNzUxLjM1OTQ4NjE4ODUyOCwyNDQ0LjAxMzAxNzM3ODM5NTUsMTgyLjg2MzgyNDQ1MDkxMzE3LDAuOTc5NTMxMzk5NTI0OTkwMQorMjksVHVlIDIyIEZlYiAxMSw4OC41NTYyODY3MTc0MDI5Nyw0NC43NTAyNjYyNjQ0NTA3Myw0OS43NzAyODUxNjYwMTgyMDUsMTMzLjAzMzEzNDIxMDM2NTU1LDY0LjEwNjc5MjYxODg0NDI0LDE3MDQuMTgxMTg0MDA2ODM3OCw4NDIuMTIwNzcwMzMzNTgyNiwxMjYyLjY4NjgwNDMzMTcxOTMsMTI3OC42NDMxNDkzNDIwNTIzLDE1OTcuMzUzMjAyOTg0NDY2OSwzMDkuOTEwNzU1OTEwMzEyNywxNjEyLjI1NTY3OTM0NjM3NCwyNTguMTkzOTE4ODU0MDE3NCw3NjkuMDc4MjM1OTYzMjIzNSw5MjEuMTkyOTQ0MDg0Nzg2NSwzNjQxLjU4NTU1MTk4Nzc2NCwyMDMzLjg4NjA5Mzg0NjA1NDYsMjU4LjgwNDUzMzU1NDIxMzEsODIzLjc2NDI2ODA5NjY1NSwxMDM1LjcxMzE0ODAzNzE5NDMsNzMuOTMzMjUxNDM4OTIyOSw2NDcuNjM4ODIxODE4Njk1Niw5NjguNDA5MjI0NjQ4OTAwOCwzMDk4Ljk0NDY4NjU4NzY4MywyMzAuMTMyOTcxODA1MzAyMzYsMS4yNjg4MDgzMzY0MzczNDczCiszMCxXZWQgMjMgRmViIDExLDExMi44MTkxMDA5NTcwNTI2LDU1LjAwNjE4NTcxMzk2NjM5LDYzLjM4MzYxMzgyNDI1MDM5LDE2Ni40MTM3Njk2NzEwMTI0Niw4Mi45NzMzMDk2NDg1MTYwOCwyMTY3LjE3NDg3MTgyMzM5NTcsMTEyOC40NTQxMjAyNjc0ODc3LDE2MTguODk5MTcxODcxNDAzMywxNjI5LjU5MDY4NjU3Mjg2OTgsMjAzNi42MDg3NDkyMDE5NDgsMzk1LjUwNTI4MTE2NjA4MTcsMjA2OC4wMjM4MDUzMTk4NzczLDM0My4zMTQ0OTg4OTgzMTcsOTg4Ljg3OTkxMjg2MDM0ODcsMTE3My43MTM1Mjg1MjA2NDc1LDQ1MjguNTY5Mzg2NDkyMjM1LDI1NjEuNDYwNDg2OTM4Mjk1LDIwNi4xOTAzMjE2OTEyOTgzMiwxMDYxLjkyNzAwNTc5ODUyNDgsMTMwOC4xNjg1NDY0MTkzOTA5LDE0MC42Njk4MTk1NTc5NDg2Nyw4NDkuMjAyMDY1OTIxNzgzMiwxMjQzLjAxNTA2Mjg3NDg5MDYsMzkzMC41MTQyMjAyMDY2Mzc3LDI4OS42MTY5MTYyNjY2MjE2LDEuNjQwOTgyNDYxMjczNTQ5NQorMzEsVGh1IDI0IEZlYiAxMSwxNDIuNDg2NDAxMjM3NDI3NTcsNjguMTExOTIwMTQyNzc5MDEsNzkuOTY4NDAxOTY3MTg3NTcsMjA2Ljg1MDYzMjM1NjU1NTgyLDEwNi41MzMwMDc3MTE3ODY4NSwyNzMxLjAyMzcyMjA0MzE5OSwxNDU2LjczMDQ0NzkyMjgwNTgsMjA1NS44NDQ1NDQyMTc0NSwyMDU3LjMzMDYzNDI0NDEzODgsMjU3MS45NDU1MzQ4MDYyMTEsNTAwLjAyMDQ1NDE3NTg1NzUsMjYyNy4zNDUzMzgwMjg5ODU3LDQwNS4zMTQ4OTkyNTc1ODY1LDEyNjAuMjUyODkyNTcyMjY4OCwxNDgxLjA2ODUwMjY4NDA1NCw1NTg4Ljg0OTE4MzAzMDY5MiwzMTk4LjIyNTA0NDgzOTE1NCwyMjYuNDI1NDM5Njc2NTM4MzMsMTM1OC41NDkxOTc4MzA5NzksMTYzNy42NzY1ODI1MTYwNTgzLDI2NS45Mzg2Njk4MTk3NTk0LDExMDAuNDYzNTI5NTkwNTUxNCwxNTgwLjY5MTYyMDUzOTQ2MTIsNDkzOS4zMTg0MjYwNzQ2NjksMzYxLjQ4NDU5NDMwNDc1MTcsMi4xMDE1OTMyNTA2NDQyMTEKKzMyLEZyaSAyNSBGZWIgMTEsMTc4LjYzNzM5MDA1MTYzNzE0LDg0LjY2OTc2MzAxNTQxNjUsMTAwLjA5NTQ5MjAwMzI5MzUsMjU1LjQxMDg0Mjg5MjI4NjI3LDEzNS42MDMxMTUyOTE4ODIzMiwzNDE0LjkyNTI3MTM4NjA0MjQsMTg3Mi43NTM3NjUyMzI0NzEzLDI1ODkuODgwOTQ0MDQ2OTg4NiwyNTc2Ljc1NzkyNjg4MzE0LDMyMjEuOTk0ODY5OTE0MzQ5LDYyNy4yMTg4OTA1MzY4NTQ1LDMzMTEuMTgwMDM2OTcxODc2Miw0MzEuMjMzMzExNzQ3NTIwMzYsMTU5My4xNTU5MTg4MjYyNTksMTg1My42MjgyNzc3MDE4ODczLDY4MzguMzYwNjM0MzcxODAyLDM5NTkuMDA5MjQ0OTk2NDc4LDI4OS45NzgxMjIxNjM0Njc3LDE3MjMuNzYwNDQ0MjEyMDc1LDIwMzIuNzcyNDU2NzM1OTA5OCw0NDUuNDk2MTcwNDY5NTEzMDYsMTQxMy4wMTkwNDYzMTY5MzM4LDE5OTQuMDc4MzYyNzc5NDk4LDYxNTUuNjE5OTQ1OTYzMTE1LDQ0Ny40OTAyMTIzOTQyODY2LDIuNjczMTI3ODI3NzQ2NzAyMwpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Ob25aZXJvTW9ydGFsaXR5UmF0ZV9GRF9SZWZlcmVuY2UvVGVzdFNFSVIvcnVucGFyYW1ldGVycy5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L05vblplcm9Nb3J0YWxpdHlSYXRlX0ZEX1JlZmVyZW5jZS9UZXN0U0VJUi9ydW5wYXJhbWV0ZXJzLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yOTc1MzYzCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Ob25aZXJvTW9ydGFsaXR5UmF0ZV9GRF9SZWZlcmVuY2UvVGVzdFNFSVIvcnVucGFyYW1ldGVycy5jc3YKQEAgLTAsMCArMSwyIEBACitkaXNlYXNlTmFtZSxwb3B1bGF0aW9uSWRlbnRpZmllcix0aW1lUGVyaW9kLGZyZXF1ZW5jeURlcGVuZGVudCxyZWZlcmVuY2VQb3B1bGF0aW9uRGVuc2l0eSxyb2FkTmV0d29ya0luZmVjdGlvdXNQcm9wb3J0aW9uLGNoYXJhY3RlcmlzdGljTWl4aW5nRGlzdGFuY2UsdHJhbnNtaXNzaW9uUmF0ZSxub25MaW5lYXJpdHlDb2VmZmljaWVudCxyZWNvdmVyeVJhdGUsaW5mZWN0aW91c01vcnRhbGl0eVJhdGUsaW1tdW5pdHlMb3NzUmF0ZSxpbmN1YmF0aW9uUmF0ZQorVGVzdFNFSVIsaHVtYW4sODY0MDAwMDAsdHJ1ZSwxMDAuMCwwLjAxLDIuMjUsMTIuMCwxLjAsMC4yLDAuMDUsMC4wMDEwLDAuNApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvTm9uWmVyb01vcnRhbGl0eVJhdGVfUktfUmVmZXJlbmNlL0h1bWFuUG9wdWxhdGlvbk1vZGVsL2h1bWFuL0JpcnRoc18wLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvTm9uWmVyb01vcnRhbGl0eVJhdGVfUktfUmVmZXJlbmNlL0h1bWFuUG9wdWxhdGlvbk1vZGVsL2h1bWFuL0JpcnRoc18wLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYzI0NDAxCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Ob25aZXJvTW9ydGFsaXR5UmF0ZV9SS19SZWZlcmVuY2UvSHVtYW5Qb3B1bGF0aW9uTW9kZWwvaHVtYW4vQmlydGhzXzAuY3N2CkBAIC0wLDAgKzEgQEAKK2l0ZXJhdGlvbix0aW1lLApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Ob25aZXJvTW9ydGFsaXR5UmF0ZV9SS19SZWZlcmVuY2UvSHVtYW5Qb3B1bGF0aW9uTW9kZWwvaHVtYW4vQmlydGhzXzEuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Ob25aZXJvTW9ydGFsaXR5UmF0ZV9SS19SZWZlcmVuY2UvSHVtYW5Qb3B1bGF0aW9uTW9kZWwvaHVtYW4vQmlydGhzXzEuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJjMjQ0MDEKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L05vblplcm9Nb3J0YWxpdHlSYXRlX1JLX1JlZmVyZW5jZS9IdW1hblBvcHVsYXRpb25Nb2RlbC9odW1hbi9CaXJ0aHNfMS5jc3YKQEAgLTAsMCArMSBAQAoraXRlcmF0aW9uLHRpbWUsCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L05vblplcm9Nb3J0YWxpdHlSYXRlX1JLX1JlZmVyZW5jZS9IdW1hblBvcHVsYXRpb25Nb2RlbC9odW1hbi9CaXJ0aHNfMi5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L05vblplcm9Nb3J0YWxpdHlSYXRlX1JLX1JlZmVyZW5jZS9IdW1hblBvcHVsYXRpb25Nb2RlbC9odW1hbi9CaXJ0aHNfMi5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGU0OWQ5OAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvTm9uWmVyb01vcnRhbGl0eVJhdGVfUktfUmVmZXJlbmNlL0h1bWFuUG9wdWxhdGlvbk1vZGVsL2h1bWFuL0JpcnRoc18yLmNzdgpAQCAtMCwwICsxLDMzIEBACitpdGVyYXRpb24sdGltZSxFRy1GUkctRzIxMDAwMSxFRy1GUkctRzIxMDAwMixFRy1GUkctRzIxMDAwMyxFRy1GUkctRzIxMDAwNCxFRy1GUkctRzIxMDAwNSxFRy1MT0UtRzI0MDAwMSxFRy1MT0UtRzI0MDAwMixFRy1MT0UtRzI0MDAwMyxFRy1MT0UtRzI0MDAwNCxFRy1MT0UtRzI0MDAwNSxFRy1MT0UtRzI0MDAwNixFRy1MT0UtRzI0MDAwNyxFRy1MT0UtRzI0MDAwOCxFRy1MT0UtRzI0MDAwOSxFRy1VUEUtRzI5MDAwMSxFRy1VUEUtRzI5MDAwMixFRy1VUEUtRzI5MDAwMyxFRy1VUEUtRzI5MDAwNCxFRy1VUEUtRzI5MDAwNSxFRy1VUEUtRzI5MDAwNixFRy1VUEUtRzI5MDAwNyxFRy1VUEUtRzI5MDAwOCxFRy1VUkctRzMwMDAwMSxFRy1VUkctRzMwMDAwMixFRy1VUkctRzMwMDAwMyxFRy1VUkctRzMwMDAwNAorMSxUdWUgMjUgSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzIsV2VkIDI2IEphbiAxMSwxMS41OTIyODE5MTkyMjE3MiwxMC4zNTAyMTUyMzM3Mzg5ODgsNi4wMjQ2Njc3MTUzNjUzNDUsMTIuNDU0NTcwNjgzMTc3Mzc4LDEyLjU1NDA4MjE2NTc4NDczMSwyMDIuOTQxNjU5MTc0ODI4MzIsMjIwLjUzNjQ5MDc4MzgzMDIzLDE4MC43NTA3MTcyNTczNzk0OCwxNTcuMDAwMjM4MzU2MTIwMDQsMTk2LjI4OTgyOTQ5OTE5MjYsMzkuODYwNjkxOTU5MTY3MTg0LDIzMy4wMTgyNDczOTM5MzkwMiw0Ni4xMTU2NTQzMDEwMDk3NSwxMjIuNDE5MzExOTYxMzc2NTIsMTA5LjQyMDU1MTM3OTE0NTEyLDI1MS4xODQ0NTM2MDQwMTgyLDE4MS45NzMyMTk1MDI3MDQzOCw1MS4xNzc2MTgxOTE0Njc4MTUsMTQ4Ljk1MDEwMTUwODUxOTcsOTkuMTk2NjAxMzk5NTkxNTYsMTQ2LjU0NDUwMDg4MzcyNDc3LDE2Mi43MzM5NTM4MzY3Njc2OCwxNDQuNzY2NjEyMjI0NDE0ODQsMzI5Ljk5MjM2MDI4ODkzNjgsMjEuMDQ0MTgzMTA3MDQ2ODI3LDAuMjYzNDkxMzEwMDg2MjM5OTQKKzMsVGh1IDI3IEphbiAxMSwyMy4xODQ2MTAyMDcwMjE4ODMsMjAuNzAwNDcxODY4MjYzOTc1LDEyLjA0OTM1OTUyOTMyMDcxLDI0LjkwOTE5MTEwODE4NTk1NCwyNS4xMDgyMTQ1NDc5OTMxNTMsNDA1Ljg4NDEzMDA4MjY4NzUsNDQxLjA3Mzg2MzcxNTM3MjQsMzYxLjUwMjE1NzUxODMwMTQsMzE0LjAwMTEwNDY5ODkxNjMsMzkyLjU4MDQ0NDE0NzEwMDIsNzkuNzIxNTQzMzYwODA4OTQsNDY2LjAzNzQyNjg2MjAyOTA2LDkyLjIzMTQ5MzA2NTAwNTY3LDI0NC44MzkxMTM2MDA2OTgzNywyMTguODQxNTQwNDM5Mzc5Nyw1MDIuMzY5OTA0OTc1MDkzOSwzNjMuOTQ3MTY2Nzk0NzY5NjYsMTAyLjM1NTQ0MTA5MzgxNzcsMjk3LjkwMDc5ODgxODQ3MzEsMTk4LjM5MzU5OTU0NTM2MTU4LDI5My4wODk1ODc5NDY2MjU0LDMyNS40Njg1NTg2MTA2NTA4NiwyODkuNTMzODAzNTE1OTEwOSw2NTkuOTg2MDQwNDg1MTkzNyw0Mi4wODg0NTAzNTg3NjYzMywwLjUyNjk4MzY3NDEzOTc4MzQKKzQsRnJpIDI4IEphbiAxMSwzNC43NzY5ODQ4NTczNDMwMiwzMS4wNTA3Njk5MDEyMDkzNTcsMTguMDc0MDc1NDM5NjA5MTA3LDM3LjM2Mzg2MDc2MDg1NjI1LDM3LjY2MjM5NzE0NjcxMTM4NSw2MDguODI3NDEyNDE2ODM3Myw2NjEuNjEyMTE4Nzk3ODE3LDU0Mi4yNTQzMjA3NzA1MTc0LDQ3MS4wMDI1OTg4ODk1MzMyLDU4OC44NzE4NDM4MjUyMzcxLDExOS41ODI1NTQxOTQ1NDE1OSw2OTkuMDU3NTM4MzkzNDY2MSwxMzguMzQ3NTE2MjkyNzI1NDMsMzY3LjI1OTQwNDkxNDM5NjcsMzI4LjI2Mjk2NzE0OTIxNzg0LDc1My41NTYzMjQ1OTAwNDI5LDU0NS45MjE4NDA4ODk3NDU5LDE1My41MzM0Njg3MDc4NjM4LDQ0Ni44NTIwOTE5Mjg5MzExNSwyOTcuNTkwOTk0MDU5MDk4MjUsNDM5LjYzNTI2MTE5MTA0NDMsNDg4LjIwMzgxNDMyNDE3NjA1LDQzNC4zMDE1NzM4NjY2Mzk1LDk4OS45ODEwMzk5ODI0ODEzLDYzLjEzMjgwMTUwMzU2MjI0LDAuNzkwNDc3MDkyMTYzMTY3MworNSxTYXQgMjkgSmFuIDExLDQ2LjM2OTQwNTgxODEwOTcsNDEuNDAxMTA5MzA3NDcwNDgsMjQuMDk4ODE1NDE5ODY3NjczLDQ5LjgxODU3NjU3MDE3Nzk5Niw1MC4yMTY2Mjk5NjA2MjU1NCw4MTEuNzcxNTAzODI1MDU5NCw4ODIuMTUxMjU2MDMwMTEzOSw3MjMuMDA3MjA2ODMyODMzNCw2MjguMDA0NzE5ODE0NjUyNSw3ODUuMTY0MDI3NDk0MzgxMiwxNTkuNDQzNzI0MzM4NDUzMjIsOTMyLjA3ODU4MTgwNTI4NjUsMTg0LjQ2MzcyMzk4NDkwNDMsNDg5LjY4MDE4NTgzNzIwOTcsNDM3LjY4NDgzMTEyMzkzNjksMTAwNC43NDM1NTM3NzUxODMsNzI3Ljg5NzIzMzc1MDEzNDIsMjA0LjcxMTcwMTAzNDM0NDEsNTk1LjgwMzk4MDgwMDYyNDYsMzk2Ljc4ODc4MTkwNzM3MDQzLDU4Ni4xODE1MjA2MTkyOTA2LDY1MC45Mzk3MjA5NzgzOTI1LDU3OS4wNjk5MjMxNTcwNTEsMTMxOS45NzczNTM4MDYwNTY3LDg0LjE3NzIzNDgyNTQwODkyLDEuMDUzOTcxNTY0MTMxNzY4NgorNixTdW4gMzAgSmFuIDExLDU3Ljk2MTg3MjY4NzE5Mzg5LDUxLjc1MTQ4OTg3Njg1NzIxLDMwLjEyMzU3OTIyODI4ODY3LDYyLjI3MzMyMTE0NTI2MzI5Niw2Mi43NzA5MTI5NzM3ODgwNCwxMDE0LjcxNjM4NzgwMDcyOTUsMTEwMi42OTEyNzUzNjU2NDIyLDkwMy43NjA4MTM4OTAzMTE3LDc4NS4wMDc0NTkzMjExMzgsOTgxLjQ1Njk4Njk2NTgyMTgsMTk5LjMwNTA1MjY4MDU2NzA2LDExNjUuMTAwNTU1MTYxNDE2NCwyMzAuNTgwMTE2MTQyMjQxNyw2MTIuMTAxNDU1NzA3NjgxOCw1NDcuMTA3MTI4NjA5MDIxNSwxMjU1LjkzMDc0MjE1OTc2MjUsOTA5Ljg3MzI4NTIxOTgwNTIsMjU1Ljg5MDEzODA3MzA4MjQ4LDc0NC43NTY0NjUwMTA4NDg0LDQ5NS45ODY5NDA3NDAxNTk4Nyw3MzIuNzI4MzY2MjMzMjU5Nyw4MTMuNjc2Mjc4NTUzNzcyLDcyMy44Mzg4NTAyMDE5NjgxLDE2NDkuOTc0OTQ0NjIwMzA2NiwxMDUuMjIxNzM5NDM4MDM2NTEsMS4zMTc0NjcwODk3MDI1NDgyCis3LE1vbiAzMSBKYW4gMTEsNjkuNTU0MzgyNTE2NTk5MjksNjIuMTAxOTEwMDA3MTkxODgsMzYuMTQ4MzY0ODg1ODkwMTUsNzQuNzI3OTk4NDU5MzgwNiw3NS4zMjUyNDYwMzM3NTY4NywxMjE3LjY2MTk1Mzg3NzU4NiwxMzIzLjIzMjE3NjMyMDM2NzcsMTA4NC41MTUxMjU5MzE3NzA2LDk0Mi4wMTA3NjAzMTAwNDE2LDExNzcuNzUwNjYxMDk4NzExNCwyMzkuMTY2NTMwMTQxNTIwNTgsMTM5OC4xMjM0NDA1NzIzLDI3Ni42OTY2OTI3NjQ5OTM2LDczNC41MjMyMDg2OTA1NDAzLDY1Ni41Mjk4MjY2OTA0MjUsMTUwNy4xMTMzMzAxMTY2MzU2LDEwOTEuODQ5NTY2NTY4NjUsMzA3LjA2ODc3OTgxNDY1MDA0LDg5My43MDk1NDA2OTc2ODMzLDU5NS4xODUzMTM1OTU1OTg5LDg3OS4yNzU3OTgwMzA1ODg4LDk3Ni40MTM0ODY3OTMyNTM5LDg2OC42MDgzNDQ2NzM5Mjk5LDE5NzkuOTczNTQ1NjQ1MjA5MiwxMjYuMjY2MjQ4ODkwMjM5NzQsMS41ODA5NjM2NjU0MjM0NAorOCxUdWUgMSBGZWIgMTEsODEuMTQ2OTE0Mzg4Nzk4MDUsNzIuNDUyMzU4MTA5NzI5NTMsNDIuMTczMTU3Mjc4OTc5MDA1LDg3LjE4MjA4NjA3OTA3MTAxLDg3Ljg3OTYyNzgwNTQ1OTk4LDE0MjAuNjA3NDg0MzQ4Njg5MiwxNTQzLjc3Mzk1NDUxMDA4NzgsMTI2NS4yNzAwMTE2OTA3ODA0LDEwOTkuMDE0MjMzNDQzMzI3OCwxMzc0LjA0NDYwODg4MDQwMTMsMjc5LjAyODA4NzI0MjU4Mzg3LDE2MzEuMTQ3MDg1MTYxNDIzLDMyMi44MTM0NTM4NDg1ODU3Nyw4NTYuOTQ1Mzk3MDIxNzE5NCw3NjUuOTUyNjU1ODE4Mjg4NywxNzU4LjI2Njk4NzA3MDkwNDksMTI3My44MjMxMjE0MDc0NjMsMzU4LjI0NzYyNjE2NTA1MzEsMTA0Mi42NjMxNzUyMzQyMTEsNjk0LjM4MjgzMjI0NDM4MTcsMTAyNS44MjM4MTU5NjkwNzY2LDExMzkuMTUxMzQzMDAzMTgwMywxMDEzLjM3ODMyMjkyNTU1MTYsMjMwOS45NzEzMTAzNzk3NjgsMTQ3LjMxMDM2Njc1NDExOTMsMS44NDQ0NjEyNjA2NDU3MzcxCis5LFdlZCAyIEZlYiAxMSw5Mi43MzkzMjM0Mjg0MTM5Myw4Mi44MDI3NTMyOTk5OTM3Myw0OC4xOTc4NDYzODY3MzYyNjYsOTkuNjMyODA4MTE2MDYzMjMsMTAwLjQzNDA0NzIyNTMzNDY3LDE2MjMuNTQ4NDE3NzM3Mzk3NiwxNzY0LjMxNjU3MjUzNTYwNTcsMTQ0Ni4wMjQ0NDczOTE3OTcxLDEyNTYuMDE1Mjc0MTU0ODkxOCwxNTcwLjMzNTczMDY1Mzk5NSwzMTguODg5MjE0ODE5Mjg3MTMsMTg2NC4xNzAyNTEyNTQ1MTU3LDM2OC45MzAzOTkzMzk5OTcwNSw5NzkuMzY3NjQ4ODk5NTY3Myw4NzUuMzczNTE0OTk3NDM1NiwyMDA5LjI2NjE4ODI0NTc5MSwxNDU1Ljc3NDIwMDU5Nzk0MjYsNDA5LjQyNjY3NjMwNzk1OTIsMTE5MS42MTcxMDcwMDcyOTEsNzkzLjU3MjQyMzQ0Njk3MzEsMTE3Mi4zNzI0MTk2NTcwMywxMzAxLjg4OTgyMTQ0MDIzOTUsMTE1OC4xNDgxNDAyNDA5MTc5LDI2MzkuOTU1NzgwMDIzMDUsMTY4LjM1MTc3ODkyMDIwNjc4LDIuMTA3OTU5NjIzMzI1NDgyCisxMCxUaHUgMyBGZWIgMTEsMTA0LjMzMDYzMjkzNjc4NjMyLDkzLjE1MjU1MzQ2NzE4MzYsNTQuMjIxNjY3MDg2NDA5OTMsMTEyLjA2NjcyMzA2NjExNTMzLDExMi45ODg0MTYzNzA4MDE4OSwxODI2LjQ1NjYwMzExMzgxMiwxOTg0Ljg1OTcyNDM1ODI5NCwxNjI2Ljc3MDc2MjY0ODQyMzcsMTQxMi45OTY4NzY0NTI4MzgzLDE3NjYuNjAyODc4ODU4MDYxMywzNTguNzQ2MzIzNTA5ODkyMjUsMjA5Ny4xODMzNDkwNjI5OTQyLDQxNS4wNDc1Mjg3MjkxNzE5LDExMDEuNzg3MTgwMzAwNjk3Miw5ODQuNzc2ODI3NDAzNTc0OSwyMjU5LjU1ODA0NDQ0MTAzNTIsMTYzNy41ODA0MzA2MDY5NjQ1LDQ2MC42MDU5MjM1NTIxMjk5LDEzNDAuNTY5MzI1NzUwMDMyLDg5Mi43MDk3NjY4MjAxMTQyLDEzMTguOTIxNjA1NzczNjE1LDE0NjQuNjI4NjkwOTczODg3MiwxMzAyLjkxMzAxODY5ODc4MzQsMjk2OS44NDYxNDUxNzA4MzYsMTg5LjM3Nzc1OTkxMTU3MTIyLDIuMzcxNDU2NzkwMDYzMjI0NAorMTEsRnJpIDQgRmViIDExLDExNS45MTQ2ODgwNDI0NDE5MiwxMDMuNDk4NDkzOTUzMTg4LDYwLjIzOTgwNTUyNTgzNjY0LDEyNC40MzYyNDA1NzgxMDQxOSwxMjUuNTQyMDY0OTUzMjQyNjMsMjAyOS4xNzI2MTEwODgwODQ4LDIyMDUuNDAwOTkzNTAyNjYwNiwxODA3LjQ1NDY2Njg1MjQ1NDcsMTU2OS44NTU3NzgyMTc0NzEsMTk2Mi43MTI3NTI1Mzk3OTgyLDM5OC41NzYwNTY1MjQ0ODgyLDIzMzAuMTE2NDgwODMzNDk3NSw0NjEuMTY0ODM3MzkxODczNCwxMjI0LjE4NDA2NDY0Nzg3MzEsMTA5NC4wNjAwNTUyMTEyNjc0LDI1MDcuNjE5MjczOTU5OTU4MywxODE4LjY2ODcyNTk5NjkzNSw1MTEuNzg1MzE1NDA3MjkzNDcsMTQ4OS41MDUyMTMzNzk5NDA0LDk5MS41Njg4MjIzNTgzNjQxLDE0NjUuNDcxMzQ3MzcwMzE0MywxNjI3LjM2NTk3Nzg3MzgyNTQsMTQ0Ny42MzkzMDgzODUwNzcxLDMyOTkuMTg0NDU5MjgwOTcwNywyMTAuMzMyMzAxMzI1MDk1NSwyLjYzNDkzODIwNTM4MDcwNQorMTIsU2F0IDUgRmViIDExLDEyNy40NjEwNjM3OTc4MTA2NSwxMTMuODI1OTM1OTczMzYwNzMsNjYuMjMwNTk2MTM3NDg2LDEzNi42NTEwMDA2NDQ1NzkyOCwxMzguMDkwMjY1NDMwMDI2MDIsMjIzMS4wMTczNzIwNzQxODEsMjQyNS45MjIxODg1MzM1NzA1LDE5ODcuNzU2NzYzMTY3ODA5NCwxNzI2LjExMTgzOTc3NjAyNDcsMjE1OC4wMzY4NjkwMTg2NSw0MzguMjYzMzg3NDk3NzEzOTUsMjU2Mi41NTA1NzUyOTgyNDUsNTA3LjI4MjI4NTAwNzA1NDgsMTM0Ni40MzIwNDk0MjI1MDUzLDEyMDIuNzcwNTMwMDcyMTM0MywyNzUxLjUxMjIwMTg2NDc0OSwxOTk3LjY4MDE0MDI1MDU0MjUsNTYyLjk2NDQ2MDI5OTYyNSwxNjM4LjMzMDU5MTk4MDU3NTcsMTA4OS41MDAyNzgwMjQ0NjEsMTYxMi4wMjE0MzQ5NTQ2MzY4LDE3OTAuMDg1NzI3NzkwMTg5OCwxNTkyLjEyMzU5NDUwNjI5NCwzNjI2LjI5OTU1ODA1NTg5MSwyMzEuMDc0MTc1MjY4NDE1NTMsMi44OTgzMDU0Nzc3NDg3NjkKKzEzLFN1biA2IEZlYiAxMSwxMzguODg5MDU0MzcyOTkzOSwxMjQuMDk0MjQ1Nzc1NjkyOCw3Mi4xNDcxNjk1Njg1OTEyOCwxNDguNjMwNzE5ODg2Mjc5NDUsMTUwLjYwNjcxNjc0MDUzLDI0MzAuNDc5MzA2Mzk1OTgyMywyNjQ2LjMwMDgyODk1MTMxNzMsMjE2Ni41OTk2MjY2MDUyNjUzLDE4ODAuNjA4MjgwNjYyMzMyLDIzNTEuMDk1NTE5ODUyMDQ5Niw0NzcuNTE5MTM5NDcyMDkwNCwyNzkzLjA3NDgyMjUzMTc3MjUsNTUzLjM5OTUzNDI0MDA4NzMsMTQ2Ny45OTk1MDE1NTA3Mjg4LDEzMTAuMDE4MzA5MjM0MzMxMSwyOTkwLjEyOTc4NzM2MzQ1MDgsMjE3My4zMDMyMjM4MDY2Njk0LDYxNC4xNDA2Mjc1MzE0MDI5LDE3ODYuNTk5MzM5NTk5NDQwOCwxMTg1LjcyNDY5ODc1NjY0OCwxNzU4LjU3MDMyMzc2NzI1OTksMTk1Mi42NzM5ODIwMjM0OTAyLDE3MzUuNjA4MDkwMjA1MTQ4LDM5NDguNDg4NzMxMjgxMzM3LDI1MS40NDU2MTIyNzMxNjc3LDMuMTYxMDQ4ODk0MDk5MDY0CisxNCxNb24gNyBGZWIgMTEsMTUwLjExMDM1MTAzMTY2MTI4LDEzNC4yMzY0ODM1NTAzODYwOCw3Ny45NDgzNTg5NTE0MjcyMSwxNjAuMzQxMzUxNjc3MTAxOTUsMTYzLjAxMTAzNDEwNDU2MDYyLDI2MjYuMTM2MTQwNjA1ODE0NSwyODY1LjkyMzQyNTY1NTM1MiwyMzQyLjUwMDEwNjUyNjI5NzcsMjAzMi4yMDI0Mzk0Mzk1ODUsMjU0MC40ODExMDcwMDA2NjU0LDUxNi4wNDcyOTIyNzA4OTQ5LDMwMTkuNzc2ODk2OTY3NTgxNyw1OTkuNTEzOTM2MDM3NDE2MywxNTg3Ljg4NzQ3MTk0MTI3NCwxNDE1LjEwNTI1MjgwMjMyMzMsMzIyMy4yNDcxODMzNjQ2NzIzLDIzNDQuOTcxNzE2OTM0OTY2NSw2NjUuMjk2MjM1NjA2MTYxMSwxOTMzLjIyMzMyMDM1NTg0ODMsMTI3OS44MzUwNDgyMzk3NDY2LDE5MDUuMTA3MjIwMjM0NDc1MywyMTE0LjU3MDcxOTA2NjU4LDE4NzYuODk0MzUwNDU4NjU0MSw0MjYzLjkzMzEzNDk2Mjc0MSwyNzEuMzY3MjMzMjk0ODM3NCwzLjQyMTY0OTc3Mzc2NjcxMDYKKzE1LFR1ZSA4IEZlYiAxMSwxNjEuMDgyMzA4NzM3NDI0NjgsMTQ0LjE4OTk4Mzg3NDgwNjczLDgzLjYxNzg1ODc4ODgyNDMsMTcxLjc4NDExODU5NTU3MTIsMTc1LjIwMjY0MjA2OTY5NTAzLDI4MTcuMzgzNzY1MzkyMTE5NiwzMDgzLjIwNTc0NzUzNTEzOCwyNTE0LjYwMTYxNDIwNDQwOCwyMTgwLjM5MDg1NDQ3MDQ3MiwyNzI1LjU5NDk2OTMwMTcyNyw1NTMuNzEyOTE5MTA3NzE2MywzMjQxLjU2OTExOTg0NzMzNiw2NDUuNjA3MDI0NjczNzYyOCwxNzA1LjMzODE1MTE4NTY1MzUsMTUxNy43ODU0NzkyODU3ODQ3LDM0NTEuMTQ2NjU4Njg2MjU2NiwyNTEyLjY3MzI0MjExODY3OTQsNzE2LjMzNjQ3ODk3MzM3NzMsMjA3Ny4xMTAwODY3ODM2ODg1LDEzNzEuNzY2MDg1MzE5OTY4LDIwNTEuNTYyNjI5NTM3Mzc3MiwyMjc0LjUwNTc1Mjk0ODE1ODcsMjAxNS4yMDE5MTc0MjAwMTE4LDQ1NzIuMTA2NDA2MTMxNDMxLDI5MC44Mjg5OTg0NTM2MDQ4LDMuNjc4MDM4NzUzNjMzNDUwMgorMTYsV2VkIDkgRmViIDExLDE3MS44MDAyODI0Njc3NzYwMSwxNTMuOTI0MzQ3MTg2NzY0NTUsODkuMTU2NjQ0MDA1NTU0MzgsMTgyLjk3OTEzMTkwNzQ4NTA1LDE4Ny4xMjc1MzYyNjc3ODQ2MiwzMDA0LjIyMjYwMzYxNDc1NjMsMzI5Ni40ODg5NzM0Mzg0MTA1LDI2ODIuNzE0OTc0MTcyNDY4LDIzMjUuMTU0MjE5NjUxOTUxMywyOTA2LjQzMTA3MDYwMjExMzMsNTkwLjUwNzAyMjg0MjIyNCwzNDU4LjIxODk4NjIwMzQ5NCw2OTEuNTc5MzE0MjQwMzYwNiwxODIwLjA5NDUyMzYxMjg0LDE2MTguMTA0OTIxMDIyMjQ5OCwzNjc0LjM1NDkxNzgyODY0NCwyNjc2LjY4OTkwMTM1ODMxNDMsNzY2Ljk1NjI2Njg5MTg5MDksMjIxNy43Njk5ODM3OTM0MTE1LDE0NjEuNjQyMjU0MjIzMTU1OCwyMTk3LjU4MTcwMDYzMDUwNzQsMjQzMS4zNDA2MDUyNzM3NTQsMjE1MC4zMTQ4NDA0Mzc0NTM4LDQ4NzMuMjYxNzMxMjAxMDA3LDMwOS44NTkxMDg0Mjc0NDc5LDMuOTI4OTQ5MzE0NDI1MjU4CisxNyxUaHUgMTAgRmViIDExLDE4Mi4yODAzMjE2MjU0NDc1OCwxNjMuNDM4MzI4OTk1OTk5MTEsOTQuNTc0NzMxNjM3NjQ4NDQsMTkzLjk1NDg5MzQ2OTM2MTksMTk4Ljc3NjAxMDExMTg4NzMzLDMxODYuOTczNTYzMDAzNTc0LDM1MDUuMDA1NjU4NjY4Mjk3NywyODQ3LjAzMTQyMzA3NzQ2NjYsMjQ2Ni43MzE2MDE5Mzk3NDcsMzA4My4yOTc0MzU2NTc1MTIzLDYyNi40ODgzMDI4MjE2MTM2LDM2NjkuOTc5MDcwNzgzMTM1LDczNy4xMzMzNjQ1MjEwOTk5LDE5MzIuMjE3Njc2MTI3ODQsMTcxNi4yNTkyNjg4MTM1NDE0LDM4OTMuNDg3NTgyMTgyMDE1NiwyODM3LjQzNjc3NjIwNDg4MzIsODE2Ljc0MDQ0MjE2NTc3MzIsMjM1NS4xNzc2Mjg3OTYxNDkzLDE1NDkuNjc3OTA1MzM3NjAzNSwyMzQyLjE3MTgwMzg0NDY0NDMsMjU4NC42MTcwMjQ3MTk3OTgsMjI4Mi4zNTI0NzczNDkzMjc3LDUxNjguMDQxNjQyNTkwOTQyLDMyOC41MDM2NjIzMzI1ODQ0LDQuMTc0MDc1NzU4NDczNTQyCisxOCxGcmkgMTEgRmViIDExLDE5Mi41NDgxMDAxOTE3Mjk2LDE3Mi43NDcyNDg4NDcyMzM5Miw5OS44ODYxMjIxMzczMTc1NiwyMDQuNzQyMTkzNzc5NTI3NjcsMjEwLjE2MzEwMDQwMjA5MzY4LDMzNjYuMTAxMjU4MDEwMzI5MywzNzA4LjY5NDQwMDQ2MDQ1OTMsMzAwNy45MjY4NjgzOTA4NDA0LDI2MDUuNDc5MzY0NTY4MzE2LDMyNTYuNjQzMzc4OTgyODA4LDY2MS43NDY0ODI0OTM1MjMzLDM4NzcuMzM2NzU5ODM1NjMsNzgxLjkwMTg3MzkzOTIwMTcsMjA0MS45MzEwMTkwNjU2MDYsMTgxMi41MDc5OTgzMzg5ODAzLDQxMDkuMTYxNTU0ODQ5ODU4NSwyOTk1LjM2NzkwMzA4NTQxNTUsODY1LjQ0OTMwMTI3MTQzNDksMjQ4OS41NTYzNDQzNjMzMjczLDE2MzYuMTE4NTgxOTEzMTUxNSwyNDg0LjE5MjUwOTQ3NDk0ODYsMjczNC4zNTIxNjMwOTUxMDEsMjQxMS42MDA3NzQ0NjgxLDU0NTcuMjQ0NjkzODkwNDY1LDM0Ni44MTQ3MTgxMjM1MDAzNyw0LjQxMzY3ODU2MDk0NjAwNQorMTksU2F0IDEyIEZlYiAxMSwyMDIuNjMyNDMxNTQ1MDI5NTMsMTgxLjg3NDAwMjg2MDE5MjA0LDEwNS4xMDU4NjgwODgxNDUyNiwyMTUuMzcwNzYxNTY4MTgzLDIyMS4zMTU2NjAxODMzODMyNCwzNTQyLjExMTIyNDY3NDYwNywzOTA3Ljg3NDM0NDQ1MzYzMDMsMzE2NS44NDYwMDU1NDg1OTksMjc0MS43ODg5NDY3Nzc3MTEsMzQyNi45NTg5OTY4NDU2NTg1LDY5Ni4zODA4OTQ3MDI3MDAyLDQwODAuODY2MjE0NTg0MDAzLDgyNS42ODk0OTQ1MzE3MTMxLDIxNDkuNTI2MjcwNDcwODc4LDE5MDcuMTI0ODQ3NDA4OTE0NSw0MzIxLjk0OTIyMDc4MjA1OCwzMTUwLjkyNDM3ODE2NDc4Nyw5MTMuMDMwNjA5MDYyNTk1NywyNjIxLjI0Mjg2NDY2NjUyMTcsMTcyMS4yMDgxMTA0ODY4MjI1LDI2MjMuMDcyOTU0NjY4ODQxMiwyODgwLjgxMjU3NjExMzY5MDMsMjUzOC40MTE2MjU4MDQxNDE3LDU3NDEuNjkyMzIxMjAyNTQ0LDM2NC44NDM2Mjg0NTQ0MzEwNCw0LjY0ODI5NTMxODkwNTMyMzUKKzIwLFN1biAxMyBGZWIgMTEsMjEyLjU2MTY1NTg5Njk0NDczLDE5MC44NDM3NjMxMjc5NDkxMywxMTAuMjQ4NDY4MjQ0MTM3MzgsMjI1Ljg2NzU5NDI1MDI0MTIsMjMyLjI2NDczODc0OTMyNjYzLDM3MTUuNDkzMzEyMjEyODU5Niw0MTAzLjAzOTgyODY4NTIzNSwzMzIxLjIzNjgzNDAxNDQsMjg3Ni4wNDE0MDk2OTk1NTgsMzU5NC43MTk3NTY4NjM4ODYsNzMwLjQ4ODYwODE3MjMxMzgsNDI4MS4xNDQ3OTg0NjE0MDIsODY4LjQ2MjM3NDM5MDM3NDcsMjI1NS4zMDk0MDc3MjcyMjM1LDIwMDAuMzcwOTQxNjc5MTkxNyw0NTMyLjM1NzgyNTQ0MjY3NzUsMzMwNC41MDgyNDA4NzMzNDE1LDk1OS41MzkwODAxMzcwMTc1LDI3NTAuNjA4NDExNTg2ODg1LDE4MDUuMTcxNTYzMDA3MDMyOCwyNzU4LjczNTk5Njk4MDcwNywzMDI0LjM3NTQwMzY5ODM1MywyNjYzLjE0NTU0NTc0NjcxMDUsNjAyMi4xNTc3MjcyMjcxMTEsMzgyLjYzNzYxNjc1MjIwMjMsNC44Nzg1Njg3OTkyOTM5MjcKKzIxLE1vbiAxNCBGZWIgMTEsMjIyLjM2MTc5MDg4NjUzMjI1LDE5OS42ODEwNDQ5NTQ3NDc2NSwxMTUuMzI3MDcwNTcyMjczMiwyMzYuMjU2Mjg3NTEzNjgxMzQsMjQzLjA0MTI5OTY4Mzc5MiwzODg2LjY5MzMwOTc3MDM5MSw0Mjk0Ljc0MDM1ODQyNDY4MiwzNDc0LjUxNjI2MjIxOTkyNzMsMzAwOC41ODQ0OTEyMjY0MzcsMzc2MC4zNTg2NzIwMTg0Mzg1LDc2NC4xNTg0MDA5OTgwMDU4LDQ0NzguNzA5MjU1NDA5NjIzLDkxMC4yNzY2NDQ1MTk4NTExLDIzNTkuNTcxNDMzMTU1OTY2NiwyMDkyLjQ4MTcwMzYzODE5MDUsNDc0MC44MjM0OTg2NzA5MzMsMzQ1Ni40NzE3MTgxMDgyLDEwMDUuMDgxMjgyMzAyOTI0OCwyODc4LjAxNTAwMjkzNDIyNSwxODg4LjIwNzc0NjU2NzIyNjYsMjg5MS4zNzUzOTQ1MTgwOTQ3LDMxNjUuNDQ3ODM4NzU1OTg5MywyNzg2LjE0MTEzODEyMDcwMzUsNjI5OS4zMzIzMjkxNzE5NjQsNDAwLjIzODI5NDM3MzY4MjQ0LDUuMTA1MTQ5NTM5NTYzNjE3CisyMixUdWUgMTUgRmViIDExLDIzMi4wNTU3Mzc0MDM3NTg4OCwyMDguNDA4MjI1MzM4NzMwOCwxMjAuMzUzMTU1Njk1NDM2MSwyNDYuNTU2OTM1MjU5MzIyNSwyNTMuNjczOTkzOTE2NzM2NDQsNDA1Ni4xMDEzODA2OTA0MDYsNDQ4My41MTM5NjE1MzIwOTk1LDM2MjYuMDU0NDQ5NjcxODc2MiwzMTM5LjcyMzA4MzY1NTU0MDQsMzkyNC4yNTQ5MDI1NzYzNTYsNzk3LjQ2ODIyNTc1MjA5NTgsNDY3NC4wMzU4MzQ1NDY4MzQsOTUxLjIzMTI5OTU5Mzk2MjcsMjQ2Mi41NzQyMjU0MDE0MzUsMjE4My42NjE5MTA2NzIwNjQsNDk0Ny43MTMzNTY0NzI5MDEsMzYwNy4xMTUyNjkzOTQ1NjE0LDEwNDkuNzgzMDIzNjEwNTYyNCwzMDAzLjc5MzM0MDMyNDI5MSwxOTcwLjQ4NzIxMzQ2Mjk5MjcsMzAyMS4zMTIxMDAxMzU2MjEsMzMwNC40MjI5MjI0NDI1NzMsMjkwNy43MDA3ODAxMjg4MDIzLDY1NzMuODE0MjU5ODgxNDczLDQxNy42ODEyOTkwMDEzODg5LDUuMzI4NjQ0NDc5NTgzMTQxCisyMyxXZWQgMTYgRmViIDExLDI0MS42NjMwOTQwNjMwODM1NSwyMTcuMDQ0OTI3MDc1ODM3NzMsMTI1LjMzNjQ5NDEzMjIzNDk4LDI1Ni43ODYzMzQzODg0ODc5NCwyNjQuMTg4MTY3OTE5OTkzOCw0MjI0LjA1MDExMTgxODIxNCw0NjY5Ljg1MzI3MjIwNzg5MSwzNzc2LjE3MDA3MDQ2NzgzNjUsMzI2OS43MTc0MTA5ODk1Njc3LDQwODYuNzMxNzYyNzc1NDkwNiw4MzAuNDg0NjgxNjkxODIwOCw0ODY3LjUzNDM2MjYwNTI4NDUsOTkxLjQ0MDQ0MDE1OTc4OTUsMjU2NC41NDUyOTY4NzExNDIsMjI3NC4wODUzNjYyNDI2NDM0LDUxNTMuMzMxNjYyOTI3NzgsMzc1Ni42OTAzNjY1MzA0MTEsMTA5My43NzA5MzE4NTY4NTM4LDMxMjguMjMzNTc0MDAwODg4NCwyMDUyLjE1MzI5NjgyNDMwODcsMzE0OC45MDk4OTk5NTk5MzMsMzQ0MS42NTc1Mjc0ODI1NDM2LDMwMjguMDg1ODEzNjM3MzIyLDY4NDYuMTA5MjE1Nzg0NTIzLDQzNC45OTY1NDQ0MjUzMDc2Niw1LjU0OTU5MzM2ODc0NTA4MDUKKzI0LFRodSAxNyBGZWIgMTEsMjUxLjIwMDMwMjc4NDIwODY3LDIyNS42MDc4OTk1NTYyNTQ0NCwxMzAuMjg1MjQ5NTAyOTQzMywyNjYuOTU4MzMzNjI5Nzg1NDQsMjc0LjYwNTU4ODg3ODEzNzIsNDM5MC44MTc3MjE2MzY4MzMsNDg1NC4xOTExNzIxMjQ0MDgsMzkyNS4xMzE2MjExMzk1OTY1LDMzOTguNzg1MzU2NDc1MDEzNSw0MjQ4LjA1OTc3OTc2MzY3Niw4NjMuMjYzNTcyNjgzNTUyMiw1MDU5LjU1MDAyNjcwOTAxMSwxMDMxLjAxNzY4NzcxNDY0ODQsMjY2NS42Nzc1ODExODc4NzYsMjM2My44OTcwMDE3MjEyMzksNTM1Ny45Mjc2NTg5NDg5MjUsMzkwNS40MDQ1Mzk1ODQxMzEzLDExMzcuMTYyNzg3MzY5MDgyMywzMjUxLjU4MzQ2MTU3MDk1NjQsMjEzMy4zMjQ2NDg4MDEyNzUsMzI3NC41MjgyNzM0OTA1OTYzLDM1NzcuNDYzNTI4NzkxMTY2LDMxNDcuNTE3MDQ4Mzg3MzkxNyw3MTE2LjYzNzY4Mzg3MDIyOCw0NTIuMjA4NzcwOTgyMjM5NDYsNS43Njg0NjEzOTA0ODQ0MDE1CisyNSxGcmkgMTggRmViIDExLDI2MC42ODA5NTY0NDUzNzA3LDIzNC4xMTExNjc0MTQyNzg3MywxMzUuMjA2MTUwMzI1ODEyMzMsMjc3LjA4NDIzMTk3MDI3OTg2LDI4NC45NDQ1NjQwMTY0MTczLDQ1NTYuNjMzNzI0NzYzMjEsNTAzNi44OTc2ODU3MTM0MTg1LDQwNzMuMTYxNzg1OTQ0NDc2LDM1MjcuMTA2Nzg0ODExODc0Niw0NDA4LjQ2MjE2NDIxMTM5OSw4OTUuODUwOTkwNjczNzcyLDUyNTAuMzY5MDQ4OTUwNjcsMTA3MC4wNjgwOTE2MjM5OTU1LDI3NjYuMTMxODYwMjcxMjc4LDI0NTMuMjE2MDkyMzMzMDc0LDU1NjEuNzAzNjg3MjQ5NjQxLDQwNTMuNDI3MjM1NjUzMzI1NiwxMTgwLjA2MzEzMDEyMTkyMzcsMzM3NC4wNTA1MTg4MzgyMjUzLDIyMTQuMDk4Mzc2NzIzNDg1LDMzOTguNDk4MTIzOTU2MjI1LDM3MTIuMTA2NTAwMjAwMjQzMywzMjY2LjE3Nzk5OTQ5MjU5OTYsNzM4NS43NDQ5NjcyNDc2NTUsNDY5LjMzODIxMjUzNjYzODgsNS45ODU2NDA3ODcyMTQzMworMjYsU2F0IDE5IEZlYiAxMSwyNzAuMTE2MTY4NTU2NTgyMzUsMjQyLjU2NjMwODAzNTUyMjA0LDE0MC4xMDQ2ODUwMTM3MzQ0NCwyODcuMTczMTczNzg0MDA5NDYsMjk1LjIyMDI1NjgxNTY1NDM1LDQ3MjEuNjg1NDYzMDM4OTkzNSw1MjE4LjI4Mjk3Mzg5MTU2Niw0MjIwLjQ0MzA3NzQ4NjY4MDUsMzY1NC44Mjg1ODg0MDE4OCw0NTY4LjEyMTEzODM5NTA5Miw5MjguMjg0NTkzOTc4ODAwNiw1NDQwLjIyNTk3NTY3ODA2OTUsMTEwOC42ODQ1MzcwMzEzODA0LDI4NjYuMDQwMzkwNzMyNDQ1OCwyNTQyLjEzOTgxODc3MDc1NzMsNTc2NC44MjI4NzY1NDM1OSw0MjAwLjg5NTY3MjQzOTM5OSwxMjIyLjU2MTk0MDA0OTUzLDM0OTUuODA2MDk1NzQ3ODUzOCwyMjk0LjU1MzI2MTQ4NTgwNDMsMzUyMS4xMTEyMTY4NjMyODc2LDM4NDUuODA4NDMyODUxMjg4NywzMzg0LjIxOTMxNDI3NzgzMiw3NjUzLjcxMTkzNjM2MjE0OSw0ODYuNDAxMjc1NDAzNjYyOSw2LjIwMTQ1NzA2MTY1MjUxNQorMjcsU3VuIDIwIEZlYiAxMSwyNzkuNTE0OTQ4MjA4ODIxNzUsMjUwLjk4Mjc3NTk3NDk3OSwxNDQuOTg1Mjk0Njg4OTczMTcsMjk3LjIzMjUxMzI4OTI0NDksMzA1LjQ0NTA4Mjc4MTgxNjEsNDg4Ni4xMjQ2MTAyNzU4NzA1LDUzOTguNjAzMjkwMDEyNDEyLDQzNjcuMTIzNzI5NDg2MzE5NSwzNzgyLjA2OTc0MTY0OTkzOCw0NzI3LjE4NDI0ODAyOTc1Myw5NjAuNTk0ODkzNTY4OTI0Miw1NjI5LjMxMTI3NTIwOTczLDExNDYuOTQ2NzYzODg2MTUzMSwyOTY1LjUxMDg5MDMyMzA3OCwyNjMwLjc0Njc0ODE5NzI0OTQsNTk2Ny40MTYwMzI0OTM2MjIsNDM0Ny45MjAyNjAxMTg3MDMsMTI2NC43MzUwMTcyMjI3NDM2LDM2MTYuOTkwMTU4MTIyMDA0NywyMzc0Ljc1Mjc4Mjk4Nzg1NDUsMzY0Mi42MTc1NDMyMjUxNDY2LDM5NzguNzUyMzUyNTU3MDExLDM1MDEuNzYzNDk1MzI4Nzc4LDc5MjAuNzY1MzcxMDQzMzI1LDUwMy40MTExNzM3NTM3MjQxNCw2LjQxNjE3NzExMTQ3NDg2NQorMjgsTW9uIDIxIEZlYiAxMSwyODguODg0NTUwMjk4OTAxMywyNTkuMzY4MjI4MDk1OTc4LDE0OS44NTE1NTA3Mjc1NTQ3LDMwNy4yNjgxMzYyODM3OTIyLDMxNS42MjkxMTc3Mjc1NjU3LDUwNTAuMDczMTg2NTI2NDA5LDU1NzguMDY4MDQ0OTY5MzUxLDQ1MTMuMzIzMjg5Mjg0NTg0NSwzOTA4LjkyNTk4OTAzNzQ3OSw0ODg1Ljc3MDIwMzAxODg4NCw5OTIuODA2NDQ5MjUzMjExNiw1ODE3Ljc3ODUzOTcwNjM2MiwxMTg0LjkyMTgxOTk3NzE0MDMsMzA2NC42MzA0MjAxNTAwODksMjcxOS4xMDAwMTgwMzA4NjE1LDYxNjkuNTg3NjA5MjE4NDI4LDQ0OTQuNTg5NDAwMzY0MzM3LDEzMDYuNjQ1MjIwOTc4NDcwNywzNzM3LjcxNjA4NzMwODE4MjUsMjQ1NC43NDc4MjMwNzE1NDg3LDM3NjMuMjI3MDEwMDM2MDg2LDQxMTEuMDg3NTg5NjQ4MjgyLDM2MTguOTA5NDMyMDA1MDM4NSw4MTg3LjA4NzMzMDkyNDkwMyw1MjAuMzc4NDk1NzIxODEwNiw2LjYzMDAxNzc3Njc0MTIzNgorMjksVHVlIDIyIEZlYiAxMSwyOTguMjMwNzg3MTc0NDU1NDMsMjY3LjcyODgyNTI3NDA4MTU0LDE1NC43MDYzMTEzMTUwODI2LDMxNy4yODQ3MzU5ODExNjg4LDMyNS43ODA0ODI2NjIzNzc3LDUyMTMuNjI4ODc1Mzg4MTQ0NSw1NzU2Ljg0NjkzMzM2OTM5NCw0NjU5LjEzNzY0MzY1NzA3OSw0MDM1LjQ3Mzk5ODMxMzUwNCw1MDQzLjk3NDA0NDA2NzU2LDEwMjQuOTM4OTMxMTM0NjIxLDYwMDUuNzUwOTUyNDc3MTkyLDEyMjIuNjY1MjI4ODg4NzQ5NCwzMTYzLjQ2ODkyNzkzMzExMjQsMjgwNy4yNTAxMzExMTkwNTEsNjM3MS40MjA3NjI0NjE5NDg1LDQ2NDAuOTczNjA4MTMwOTUyLDEzNDguMzQ0MDY2NDA0NjU5OCwzODU4LjA3NTEzNzQxODAzMDQsMjUzNC41NzkwMDE4MzUyODMsMzg4My4xMTMyNjQ0MDc2MzgzLDQyNDIuOTM1MDAzMTQwOTc4LDM3MzUuNzM2NDk5ODE0MzQyNiw4NDUyLjgyMzMzMTQ3NTEyMyw1MzcuMzExNjkxODE2NjAzNiw2Ljg0MzE1Mzk3NjM5MTczNAorMzAsV2VkIDIzIEZlYiAxMSwzMDcuNTU4Mjk3Mjc4NDU3ODcsMjc2LjA2OTQ5OTc3Mjk0NjMsMTU5LjU1MTg1NTU1ODYyMjcyLDMyNy4yODYwNDQ2MzM5OTcsMzM1LjkwNTY4ODI1NzUwODUzLDUzNzYuODY5NTg3MzUzMTA0LDU5MzUuMDc2NTY5MzEwODg1LDQ4MDQuNjQzMzgwMTc0NjAyLDQxNjEuNzc0OTI5NzU0NTM0LDUyMDEuODcxNTc4Mjk4MzkyLDEwNTcuMDA4MDMyODYwOTE3OSw2MTkzLjMyNjg5NzQ2MjY0NSwxMjYwLjIyMjQ0NTM4NTE0NDMsMzI2Mi4wODIzNTQ0OTg5OTI2LDI4OTUuMjM3MzQyOTEyNDc3Nyw2NTcyLjk4MTU1MTkwNzY5NjUsNDc4Ny4xMjg5NzcxNTEzMjcsMTM4OS44NzMzOTAzMTEzMTM2LDM5NzguMTQwMzg3MDU1MDA0LDI2MTQuMjc4NjUxMDA1MDMwNSw0MDAyLjQxODM1MDczNzgyODQsNDM3NC4zOTE3OTgxNjc5MzYsMzg1Mi4zMDgxMzM1NjEzMzM4LDg3MTguMDg5Mjk2Mzg0Mzg5LDU1NC4yMTc0ODY5MDQ1MTYyLDcuMDU1NzI2MDMzOTA0ODcKKzMxLFRodSAyNCBGZWIgMTEsMzE2Ljg3MDc3MTYxODkxMjEsMjg0LjM5NDE4NTExNzY5ODI3LDE2NC4zODk5OTYwMzA0Mjc2MiwzMzcuMjc1MDI1MDU0MDQ3MDMsMzQ2LjAwOTkzMjk0MDgyNTkzLDU1MzkuODU3Mjk0NDIxOTYxLDYxMTIuODY2Mzc5NjgyODAzLDQ5NDkuOTAxNDgxNTA1MDg5LDQyODcuODc3NDM4NDYyMjY1LDUzNTkuNTIzMTA3NDY4MjQzLDEwODkuMDI2MjQwNDQ4NTA1Miw2MzgwLjU4NDcwOTA3NDczNSwxMjk3LjYzMDM1NDEzMTY3MjIsMzM2MC41MTUyODQyODU1OTIzLDI5ODMuMDkzNjYwMjQ5Njg5LDY3NzQuMzIyMzg5OTQzNDc1LDQ5MzMuMTAwMDQ3OTEyODgyLDE0MzEuMjY2OTMxMzc0NDc2Niw0MDk3Ljk3MDEzNzIzODcyMSwyNjkzLjg3MjQ1MjczNjUwNzUsNDEyMS4yNTc0NjEzMDY3LDQ1MDUuNTM1Nzc3ODc4NTE5LDM5NjguNjc0ODYzNTAyNTc4Myw4OTgyLjk3NzM2MDIwNjYyLDU3MS4xMDEyMjIwMTIxMjE1LDcuMjY3ODQ2MDQyNTgxMzI3CiszMixGcmkgMjUgRmViIDExLDMyNi4xNzExNDE1NjY0OTEzLDI5Mi43MDYwMDk1MTkzMTc4MywxNjkuMjIyMTcxNzcxNzM4NDMsMzQ3LjI1NDAyNzA3NzM5OTYsMzU2LjA5NzM1NDg5NjgyMTcsNTcwMi42NDEyMDIxNjUwMzEsNjI5MC4zMDM2Nzc1MTg3NjcsNTA5NC45NjAzOTk4NzM2NjgsNDQxMy44MjAxNTk4MTAyNDQsNTUxNi45NzY1MTI2MTEyMzMsMTEyMS4wMDM0NjkxNDc1MTI1LDY1NjcuNTg2NjI0MDM5MzgzLDEzMzQuOTE4NjgxMTk5ODIzNCwzNDU4LjgwMzE2MzAzNzA1NywzMDcwLjg0NDQ5MDI4OTM1Nyw2OTc1LjQ4NDg0MjU1MTQ5Miw1MDc4LjkyMjE1MjM2NDU1LDE0NzIuNTUxNzQ5NjUwODg3Niw0MjE3LjYxMDc3MDY1MDkzNSwyNzczLjM4MDc4MzA0NDYwMDMsNDIzOS43MjMzODc0NzgyMDA1LDQ2MzYuNDI4OTg4MTIxNTUxLDQwODQuODc2ODQ4MDA1NzkyNSw5MjQ3LjU2MDY0MzYxNTAyLDU4Ny45NjcxMzQzMDQwNzc4LDcuNDc5NjAzMjYyMTMwMzM2CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L05vblplcm9Nb3J0YWxpdHlSYXRlX1JLX1JlZmVyZW5jZS9IdW1hblBvcHVsYXRpb25Nb2RlbC9odW1hbi9Db3VudF8wLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvTm9uWmVyb01vcnRhbGl0eVJhdGVfUktfUmVmZXJlbmNlL0h1bWFuUG9wdWxhdGlvbk1vZGVsL2h1bWFuL0NvdW50XzAuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJjMjQ0MDEKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L05vblplcm9Nb3J0YWxpdHlSYXRlX1JLX1JlZmVyZW5jZS9IdW1hblBvcHVsYXRpb25Nb2RlbC9odW1hbi9Db3VudF8wLmNzdgpAQCAtMCwwICsxIEBACitpdGVyYXRpb24sdGltZSwKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvTm9uWmVyb01vcnRhbGl0eVJhdGVfUktfUmVmZXJlbmNlL0h1bWFuUG9wdWxhdGlvbk1vZGVsL2h1bWFuL0NvdW50XzEuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Ob25aZXJvTW9ydGFsaXR5UmF0ZV9SS19SZWZlcmVuY2UvSHVtYW5Qb3B1bGF0aW9uTW9kZWwvaHVtYW4vQ291bnRfMS5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmMyNDQwMQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvTm9uWmVyb01vcnRhbGl0eVJhdGVfUktfUmVmZXJlbmNlL0h1bWFuUG9wdWxhdGlvbk1vZGVsL2h1bWFuL0NvdW50XzEuY3N2CkBAIC0wLDAgKzEgQEAKK2l0ZXJhdGlvbix0aW1lLApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Ob25aZXJvTW9ydGFsaXR5UmF0ZV9SS19SZWZlcmVuY2UvSHVtYW5Qb3B1bGF0aW9uTW9kZWwvaHVtYW4vQ291bnRfMi5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L05vblplcm9Nb3J0YWxpdHlSYXRlX1JLX1JlZmVyZW5jZS9IdW1hblBvcHVsYXRpb25Nb2RlbC9odW1hbi9Db3VudF8yLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MTAzOWM0Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Ob25aZXJvTW9ydGFsaXR5UmF0ZV9SS19SZWZlcmVuY2UvSHVtYW5Qb3B1bGF0aW9uTW9kZWwvaHVtYW4vQ291bnRfMi5jc3YKQEAgLTAsMCArMSwzMyBAQAoraXRlcmF0aW9uLHRpbWUsRUctRlJHLUcyMTAwMDEsRUctRlJHLUcyMTAwMDIsRUctRlJHLUcyMTAwMDMsRUctRlJHLUcyMTAwMDQsRUctRlJHLUcyMTAwMDUsRUctTE9FLUcyNDAwMDEsRUctTE9FLUcyNDAwMDIsRUctTE9FLUcyNDAwMDMsRUctTE9FLUcyNDAwMDQsRUctTE9FLUcyNDAwMDUsRUctTE9FLUcyNDAwMDYsRUctTE9FLUcyNDAwMDcsRUctTE9FLUcyNDAwMDgsRUctTE9FLUcyNDAwMDksRUctVVBFLUcyOTAwMDEsRUctVVBFLUcyOTAwMDIsRUctVVBFLUcyOTAwMDMsRUctVVBFLUcyOTAwMDQsRUctVVBFLUcyOTAwMDUsRUctVVBFLUcyOTAwMDYsRUctVVBFLUcyOTAwMDcsRUctVVBFLUcyOTAwMDgsRUctVVJHLUczMDAwMDEsRUctVVJHLUczMDAwMDIsRUctVVJHLUczMDAwMDMsRUctVVJHLUczMDAwMDQKKzEsVHVlIDI1IEphbiAxMSwyOTcyMzcuNDAzNDUzODAxNSwyNjUzODkuNjAzNDE4NTcxNzYsMTU0NDc4LjM1MDQxMTI2NzI1LDMxOTM0Ny4zMjc2MzY5MTMxNiwzMjE4OTguODk4OTEzNzc0Miw1MjAzNjIxLjg3OTMxMzg5NSw1NjU0NzcwLjUwNTQxMzkxMyw0NjM0NjI0LjUwNjU2OTA5LDQwMjU2MzkuMDg2MDYzNzA1LDUwMzMwNjIuNDg1MTM0ODM5LDEwMjIwNjYuOTgwNDU3NTI1LDU5NzQ4MTQuOTA2NjA5MjksMTE4MjQ1MC4zMDk0ODEwOTM0LDMxMzg5NTAuNDM5MDQ5MjAzNCwyODA1NjQ5LjU1MjI2MjIzOTYsNjQ0MDYxNC4xNjU0MTc4MjIsNDY2NTk3MC42NTU0MDE4NDIsMTMxMjI0My45OTU4MDI1NTQ4LDM4MTkyMjUuNzMzNTUxNzE4MywyNTQzNDk3LjUxMzAyOTk0MiwzNzU3NTQzLjc4OTYxMzI5NCw0MTcyNjU3LjEzNzY2ODY0MjcsMzcxMTk1Ni45OTIwODY5MDQ2LDg0NjEzMjUuNjQ4OTAzMTE3LDUzOTU5My4zNTk0OTExMjQ0LDY3NTYuMTczOTI1NzQyODUzNQorMixXZWQgMjYgSmFuIDExLDI5NzIzOC41OTI0MDMwMTI3LDI2NTM5MC42NjQ5Nzg3OTg2NSwxNTQ0NzguOTY4MzI1NjcxMTYsMzE5MzQ4LjYwNDYyMjg0NjEsMzIxOTAwLjE4NjUxMTkzNjIsNTIwMzY0Mi42OTM2ODE3NjYsNTY1NDc5My4xMjQ1NDExNTIsNDYzNDY0My4wNDUxMDI4NTEsNDAyNTY1NS4xODg1ODIzMTIsNTAzMzA4Mi42MTczNzMxNzIsMTAyMjA3MS4wNjg3MzI1MDU3LDU5NzQ4MzguODA1OTE1NTM2LDExODI0NTUuMDM5MjkxNzkxMiwzMTM4OTYyLjk5NDg3NTU4MjQsMjgwNTY2MC43NzQ4Nzc4MjgsNjQ0MDYzOS44NTA4ODUzNTksNDY2NTk4OS4zMTg4NTg5MTEsMTMxMjI0OS4yNDQ3ODkwMzY1LDM4MTkyNDEuMDEwNDg0OTI4MywyNTQzNTA3LjY4Njg1NzY0NjMsMzc1NzU1OC44MTk4MTg1MTEsNDE3MjY3My44MjgzMzA1NzEzLDM3MTE5NzEuODM5OTQzNjQ3LDg0NjEzNTkuNDkzOTg4MTU0LDUzOTU5NS41MTc3MTE0MTk0LDY3NTYuMjAwOTUwNDkyNTc5CiszLFRodSAyNyBKYW4gMTEsMjk3MjM5Ljc4MTMxNDIwMDk1LDI2NTM5MS43MjY1Mjk4OTY2NywxNTQ0NzkuNTg2MjMxMjMxNzUsMzE5MzQ5Ljg3NzExNDA4NzM0LDMyMTkwMS40NzQxMTQ3NTY3NCw1MjAzNjYzLjUwNTg2MDYxMiw1NjU0ODE1Ljc0Mzc1NzQzNiw0NjM0NjYxLjU4MzY0MTgxMSw0MDI1NjcxLjI5MDE1MzA4MSw1MDMzMTAyLjc0ODg3MzQwMywxMDIyMDc1LjE1Njk3MDM0NDEsNTk3NDg2Mi43MDUyNTM4MTMsMTE4MjQ1OS43NjkxMjE0MDgsMzEzODk3NS41NTA3MjcwMjIzLDI4MDU2NzEuOTk3Mzc0MzU1LDY0NDA2NjUuMjUxNjExNzc1LDQ2NjYwMDcuOTc1NDY3MjMxLDEzMTIyNTQuNDkzNzk2NDk5NCwzODE5MjU2LjI4NzQ2NDUwOTMsMjU0MzUxNy44NTgwMzYyOTUsMzc1NzU3My44NTAwODM4NDQsNDE3MjY5MC41MTkwNTkwNiwzNzExOTg2LjY4NzgxMzAxLDg0NjEzOTMuMzM0OTM0NTg3LDUzOTU5Ny42NzM5NDI5MTYxLDY3NTYuMjI3OTc1MzQ1NDIyCis0LEZyaSAyOCBKYW4gMTEsMjk3MjQwLjk2OTgzNzIyNzI1LDI2NTM5Mi43ODc5MTIyNzg2NywxNTQ0ODAuMjAzOTcxODA1MDUsMzE5MzUxLjEyMDk1ODM4ODMsMzIxOTAyLjc2MTcxNDE0ODgsNTIwMzY4NC4yOTkyNDg1ODgsNTY1NDgzOC4zNjMwMzg3MzYsNDYzNDY4MC4xMjExNTE1MzEsNDAyNTY4Ny4zODMwNzQzMyw1MDMzMTIyLjg3MjczNTUwMSwxMDIyMDc5LjI0NDQ0MzM0ODYsNTk3NDg4Ni42MDM2MTAzODEsMTE4MjQ2NC40OTg5Njk5MzMzLDMxMzg5ODguMTA2MjI1Nzc5LDI4MDU2ODMuMjE3NTQ0MTIyLDY0NDA2ODkuMDg1MDcyNjg1LDQ2NjYwMjYuNTcwNTA5NjQ5LDEzMTIyNTkuNzQyODI0NTcwMywzODE5MjcxLjU2NDI2MTMyOCwyNTQzNTI4LjAwNTczMDA0NDYsMzc1NzU4OC44ODA0MDkxMjc2LDQxNzI3MDcuMjA5ODQ3NjM3LDM3MTIwMDEuNTM1MDA0MjA4Myw4NDYxNDI3LjEzNzg4ODUzLDUzOTU5OS44MTU0MzE3NjM3LDY3NTYuMjU1MDAwMTY2ODg0Cis1LFNhdCAyOSBKYW4gMTEsMjk3MjQyLjE1NTE5MTg1MywyNjUzOTMuODQ3NzA5NjY0MTQsMTU0NDgwLjgxOTk5MjEyMTI4LDMxOTM1Mi4xOTgwNTQ4NzU1LDMyMTkwNC4wNDkyMTQ5NDE2LDUyMDM3MDQuOTU0Mjg2MDgzLDU2NTQ4NjAuOTgyMDk0MzI5LDQ2MzQ2OTguNjQ2NDQyMDg1LDQwMjU3MDMuNDA5NTYzODIxMyw1MDMzMTQyLjkzMjkxOTg1NywxMDIyMDgzLjMyMzk3NzAyNCw1OTc0OTEwLjQ4OTM4MTg3MiwxMTgyNDY5LjIyODgzNzE4MDYsMzEzOTAwMC42NTcyODYxMzMsMjgwNTY5NC40MTIxNDQ2MSw2NDQwNzA0LjUyMjYxMzY3Myw0NjY2MDQ0LjY4MjIwOTA2NSwxMzEyMjY0Ljk5MTg2Nzc3NywzODE5Mjg2LjgzODMwNzY3MDMsMjU0MzUzNy45NzIwMDE3ODM1LDM3NTc2MDMuOTEwNzkxOTE0NCw0MTcyNzIzLjkwMDU4NDk5OCwzNzEyMDE2LjM3NDE1MjI5MDYsODQ2MTQ2MC42NDEzNTIxMTUsNTM5NjAxLjg1OTY0NjIzMTQsNjc1Ni4yODIwMjMwMTUzODcKKzYsU3VuIDMwIEphbiAxMSwyOTcyNDMuMzE2NjE3MjE1OSwyNjUzOTQuODk0Nzc4NDY4NTMsMTU0NDgxLjQyMDk3MDYyMDEsMzE5MzUyLjM0MjEzMDg1NSwzMjE5MDUuMzM1NjY2MTMzMiw1MjAzNzI0LjY1ODA5OTY3NjUsNTY1NDg4My41OTc5MzUwMjMsNDYzNDcxNy4wNTU4ODE5NDgsNDAyNTcxOC45NTg5MzQ3NDgsNTAzMzE2Mi41MDI2MTAyODIsMTAyMjA4Ny4zMzQ0MzU0MzYzLDU5NzQ5MzQuMjQ5NTc0NjM0LDExODI0NzMuOTU4NzIwNTczLDMxMzkwMTMuMTY2MTAzMzMzMiwyODA1NzA1LjM2NzkxMDIyMyw2NDQwNjc0Ljk0NzUyMzEzNSw0NjY2MDU5LjI0OTQ0NjA1LDEzMTIyNzAuMjQwODY0NzY3NywzODE5MzAyLjA4NTAxODUyNCwyNTQzNTQ2LjYyODI5MjYxNDYsMzc1NzYxOC45NDEyMDQzNDM1LDQxNzI3NDAuNTg5ODI4MDc3LDM3MTIwMzEuMTM3OTU0MTE5Niw4NDYxNDkxLjk0MzA5OTM1Nyw1Mzk2MDMuMjk3Mjk1MzAwOCw2NzU2LjMwOTAyMjczNTQ1OQorNyxNb24gMzEgSmFuIDExLDI5NzI0NC4zMDQ5MjE3MDEsMjY1Mzk1Ljg0NjkyNjA5MjcsMTU0NDgxLjkwMjIzOTYzMjQsMzE5MzQ3LjM2NTcwMzkzMzYsMzIxOTA2LjYxMjQ0NzIyMTY1LDUyMDM3MzguMDczOTE0NzE5LDU2NTQ5MDYuMTgyNjcxNzQxLDQ2MzQ3MzQuNDcyODMyOTc4LDQwMjU3MzEuMjAzOTY5NjI5LDUwMzMxNzguNDYwNDIxMjYzLDEwMjIwOTAuNzk1NjYwNzg4OCw1OTc0OTU2Ljg4NDY0ODQ4MSwxMTgyNDc4LjY4ODU4OTc5MzQsMzEzOTAyNS4zMTMzNjA5NjMsMjgwNTcxNC4yODUwNTIyNjA0LDY0NDA0MDQuMTAzNDkxMDM5LDQ2NjYwNDguODgyMTU1MzAxLDEzMTIyNzUuNDg5MjE4OTM2NSwzODE5MzE3LjA4OTgyNzU3NTMsMjU0MzU0Ni4yMDAxNjczNDc3LDM3NTc2MzMuOTcxMzY5ODUyLDQxNzI3NTcuMjYxNjQzOTkxMywzNzEyMDQ1LjI2NDIxNzU5NDYsODQ2MTUwNy43MTMzNjU0NDksNTM5NjAxLjA2ODM0NDgwNDEsNjc1Ni4zMzU4MDE1NTkwNzc1Cis4LFR1ZSAxIEZlYiAxMSwyOTcyNDQuMDc2MDM5MTg2OCwyNjUzOTYuMTIxOTQ0NTAzMywxNTQ0ODEuNDg2MTA1ODgzMDYsMzE5MzE0LjY4MjA3NjA3MTQ1LDMyMTkwNy44MDYzMzA4NTE0LDUyMDM3MTAuOTc1MDkwMTY0LDU2NTQ5MjguNDkyNDg3MjI1LDQ2MzQ3NDMuOTA4OTc1ODQ2LDQwMjU3MjEuMDgxNTkwNDcxMyw1MDMzMTY4LjYxNzk3OTQwNCwxMDIyMDkwLjEyNTAyNTI1MzIsNTk3NDk3MC4xMDE3MDMzNjcsMTE4MjQ4My40MTgxMjQzOTQzLDMxMzkwMzQuNTU4NTEwODY0NiwyODA1NzA2LjgxMzkyMTY4OTUsNjQzODg1Mi4yNzYwNTc0MTcsNDY2NTg2OC4yOTYyOTUxMTcsMTMxMjI4MC43MzE2MTgzOTg4LDM4MTkzMzAuMDkxNjQ4NTI5LDI1NDM0ODQuNTE3NTU5MzYxNiwzNzU3NjQ4Ljk5ODc2NTA2Myw0MTcyNzczLjc1NzQ2NzY3MywzNzEyMDU0LjMyNTQ2MDY2OTYsODQ2MTQxNi45NjQ2OTk0OCw1Mzk1NzcuMTEzODE3NjI1NCw2NzU2LjM2MDY3NzYzNjM3OQorOSxXZWQgMiBGZWIgMTEsMjk3MjM1LjQ4MzU0NjQ5MDQsMjY1MzkxLjcyNDc2NTU5MDIsMTU0NDc0LjYzMTYxNzc4OTg2LDMxOTEzNy4yMjM2MTMzOTY0NiwzMjE5MDguMzIzNzQ1NTc0OCw1MjAzNDI4LjM4MzEyOTUzNyw1NjU0OTQ4LjQ5MzM4NDg4OSw0NjM0NjkxLjk4MzU2NDMxOCw0MDI1NTYyLjI5NzExOTI3NzUsNTAzMjk3OC45ODUzNzY2OTYsMTAyMjA1OS41NTczMDg1MjU3LDU5NzQ5MDguMjQzMDc2NTk2LDExODI0ODguMTQ0MTgxNTE5MywzMTM5MDIxLjUzMjQ3Nzc4MDcsMjgwNTU3My41MzY2MDAzMDg1LDY0MzA4NzkuNzA4NTIyOTQ3LDQ2NjQ1NjcuMjk0NzA0NDYxNSwxMzEyMjg1LjkyMzUxNjQ2ODYsMzgxOTMyNy4yNzE1OTYxNTYsMjU0MzAyMS45NDQyMDg2NTgsMzc1NzY2NC4wMDE2MjkxOTgsNDE3Mjc4OC42MDk5MTA2NzQ0LDM3MTIwMjQuODk3MTg2ODgsODQ2MDYxNC4zMzEyNjkxNiw1Mzk0MjcuNzY5OTM2MDEyMyw2NzU2LjM3MDIyNDk2OTI1NworMTAsVGh1IDMgRmViIDExLDI5NzE3MS4yNTY0NTMxODcyLDI2NTM1Ni42NzI4NDMxNzM1NSwxNTQ0MjMuOTExMTQwODgyMzgsMzE4MzA3LjI3MDI5NDQ0OTEsMzIxOTAzLjUzNTE2MzE0NzI2LDUyMDE1OTUuMzYxNTI3Mzk4LDU2NTQ5NDkuODMxMjM3Nzg3LDQ2MzQxODYuODEwNzY3OTYyLDQwMjQ0NDUuOTU2MDcyNzY5Niw1MDMxNTgxLjEzMTMwNjMwOCwxMDIxODIxLjcxMDQ3NjYwOTUsNTk3NDI3My41NTI3ODAwNiwxMTgyNDkyLjgzNzYxNjgyNjQsMzEzODg0My44NjIzMTUzMTYsMjgwNDUyOC44MDI5ODgwNjUsNjM5Nzg3My45ODg3MjI1NDYsNDY1NjY4NS4yMDQxMDQ0OSwxMzEyMjkwLjcwNzgyOTk2MzQsMzgxOTIwNC42Nzc1Njk1MDksMjU0MDE0MC40MDMwODgwNzA1LDM3NTc2NzguNzk5OTg5NzU0LDQxNzI3ODguOTY2OTk5ODU2LDM3MTE3MTQuMDUzOTE5NTM3LDg0NTUzMDUuMTgwNTg1OTAyLDUzODYxOC44ODMyNzMzNTksNjc1Ni4yNjIyODQ3NDI4MjkKKzExLEZyaSA0IEZlYiAxMSwyOTY3NzIuMzcyMDg1MjcyNzQsMjY1MTQ5LjY0MTc0ODUyNDc0LDE1NDExNS4zNjM2NjAxOTM3NSwzMTU2MDcuOTI5MzM2MTE4NywzMjE4NTguOTkxNDM0MTczLDUxOTE0OTUuMjgwMDAxMjM5LDU2NTQ4MDUuNjUwNTU2NTIzLDQ2MzA1NzcuNzE3NjY3NTExLDQwMTc4MDkuNzYwOTkxODE4Nyw1MDIyOTgyLjE4NjEwMzM4MywxMDIwMzA1LjUzMjY3NTYyNDgsNTk2OTYwNi41NTM5OTIzMTQsMTE4MjQ5Ny4yMzk1MDI3NzA2LDMxMzc1MTQuMzg2OTA4MTAzMiwyNzk3OTU2LjI1NTc3MTAzMzUsNjMxNDE3MS45Mjc5MTUwMjU1LDQ2MjM1NDUuNzA2NTIyNTUsMTMxMjI5Mi4zNDIzOTQyODUsMzgxODIzNC43MzMxNjk3ODgsMjUyNjYzOC45NzUyODY4MTEsMzc1NzY5MS45NjA4NTI3NjM2LDQxNzI2NjcuNDk3MDU1NzQ5LDM3MDk0NzUuODM5OTQxNjQ4LDg0MjY4NjguMjAwMjg0NTEsNTM1MzMzLjAzODY4ODIzNzksNjc1NS4zMDA3NTEzNTYzNTMKKzEyLFNhdCA1IEZlYiAxMSwyOTQ5ODAuMjEzMDUyMjkwNywyNjQyOTAuOTk4ODI1OTQ2NjUsMTUyODgzLjI3OTcwOTA3MTI0LDMxMDQzMS4yNTQxMzYyNjkwNCwzMjE1NDYuOTcyNTE5Nzk2OSw1MTUyNDY2LjU0NDgzODY2NSw1NjUzNTkyLjQwNjMzNjcyMyw0NjEwOTg2LjMyMzk2MDM3MywzOTg5OTM5Ljk5Mjc0Mjk0OTYsNDk4NjcwOC4yMzUzMzI5MzIsMTAxMzYwMi44NTQ4NjU0NTE5LDU5NDM5MTEuNTkzODU5NDk0LDExODI0OTkuMTMwMzA0MDg4LDMxMjk0ODguNzQ1MDU5MzMxNCwyNzcyNjkwLjI0NjYyNDQ1NDQsNjE4ODUzNC40NTg4NTIwNzEsNDU1MDYxNi43MzAzODQwODUsMTMxMjI3MC45NjY3OTE5NDA0LDM4MTIxNzUuODY3MzQwMzQ0NSwyNDkxODY0LjM5NjIxNDA5MDgsMzc1NzY5Mi42MDQ5NTA1MDQsNDE3MTU4NS44NTIzMzY3MDksMzY5Njc5Mi45OTE3MjE5MzUsODMzNTM5OC42OTY5NDA2MDQsNTI3NjI1LjcyNjE5NjU3MzIsNjc0OC44OTMwMzA2MzkyOAorMTMsU3VuIDYgRmViIDExLDI5MDY2NS4xMzMwNDQ5OTYzNiwyNjE5ODcuMTExNDM0MzczNDgsMTUwMzQ3Ljk1NTE0NjkxMDQsMzAzNzc2LjExMTU5NzI0MTQsMzE5OTY0LjAzMDEwNjg4NzQ1LDUwNjk5NTUuMTUwNTkxNDk2LDU2NDU2MzYuNjkxNDc3MzA4LDQ1NTM0NDYuNDc5MzkzNDgzLDM5Mjc3ODQuNzc4NTY3MjI4NSw0OTA3NDA3LjUzNzk3MjQ3LDk5ODE2Ni42MDAzNjIyOTExLDU4Njg4MzcuNzg4ODY2MjU0NSwxMTgyNDgwLjM2MTExNzExMzYsMzA5OTk3MC4wMDU3MTU2MDI1LDI3MjQxNTUuNjkxMjI0MTI2LDYwNDc0NzkuNTkwNzc0MDI2LDQ0NTM0MjMuODU1MzkyODksMTMxMjA5My4xNTY4NzA4Mjg3LDM3ODYzMDEuNTUwNjk1OTY4MywyNDQxMDQ4Ljc1MjYzMTkwMTMsMzc1NzYwMi42NTUzMTc3Mjg0LDQxNjQxNTkuMjc4MTAxNDU0NSwzNjU1Njc3LjYxMDc2Njk0NSw4MTc5Mzc4LjkyMjI2NjQyNCw1MTY3MzguMDQ5Mjc0MzE3MzQsNjcxOC41MDExNjExMzgzODYKKzE0LE1vbiA3IEZlYiAxMSwyODQ2MTIuNDc1MTEwMDQ3OCwyNTc4NDUuMjA4OTk4MDE5ODcsMTQ3MDg0LjI0MTIxOTU2OTIsMjk2NzgxLjUwMDkxNzA2MzUsMzE1Njg1LjEyNjc1Mzg4Mjc0LDQ5NjEzMDkuMzc2MzkxOTU4LDU2MDk3NDcuODgyODQzMzc2LDQ0NjM1MjcuNTEzODI4MzkzLDM4NDQyNTAuMjc5ODM3NjA4Myw0ODAyMjc3LjU2NTg2MDU1NCw5NzcwOTEuMTc1ODkyODE1Myw1NzUyMzk1LjAwMjI5NzQxNDUsMTE4MjMwNC4wOTE2MjEzMTM3LDMwNDQ4NDcuMDUzMjAwMzkwNywyNjYzOTU4LjI0NDQ3ODYzNTUsNTkwODU3My45NzE1ODc5MDMsNDM1MDE0Ni41MTk5MzcwNzcsMTMxMDk0NC4zMzM2NzM1MTY1LDM3Mjc5MjIuMDAwNzYzMzI0NiwyMzg0OTExLjkyMjI1NDY2MTYsMzc1Njg5Mi41MjA5MTMxNTI1LDQxMzIyMzAuOTQxNTM0NzM1LDM1ODY0NjguMjQwMjU1MzEwNyw3OTk1MjY0Ljk3MzMyNzUxNiw1MDQ4NTQuNDU3NTc0NzIwNjcsNjYzNS45NTEyNzc5NzYwMTcKKzE1LFR1ZSA4IEZlYiAxMSwyNzgwMzkuNzIxNTk1OTAzNiwyNTI0NjQuNzM1NTYzNjUxNDUsMTQzNjY2Ljk5MDE5MjY1ODg1LDI5MDExNy4zNDcyNTI1MzkwNywzMDkzMDIuOTYwNzA4MjY4NTcsNDg0NjM4NC4zMDgwNjYzNDgsNTUyNTM2OC4xNzk1ODc0ODMsNDM2MTUxNC4yMTg1OTQwNjgsMzc1NTE2OS44MjY0MDEwMTMsNDY5MDgzMy44NTA2NTAzODYsOTU0NDY2LjA3NjU0MjE1MDYsNTYyMDc0MC4zNDkzOTU4NTksMTE4MTA5NC43OTAxOTM2ODg2LDI5NzcyNjYuNTk0OTIyMjQ1NSwyNjAxOTUwLjE1MjI0MzgyMTQsNTc4MDg5My41NTM3NjM1NTUsNDI1MTIwMy45ODQxNzc2NDMsMTMwNTE3Mi44ODAzMjk2MDMsMzY0ODkxMy4wNDE4NzIxMjE0LDIzMzAwNzMuMzQ1MDAzOTQzNCwzNzUyMzczLjE4MTgwNTYyMjgsNDA2NDUwMC4zNDU0OTc2MjM2LDM1MDU0MTYuNjI3MjkxMzgxLDc4MDk3MzYuODY5MzM5NDksNDkzMzEzLjcxNTM4MjgxMjgsNjUwNi44NTc2MTc2NzMwNTcKKzE2LFdlZCA5IEZlYiAxMSwyNzE2NzMuMTIxOTc2MjYwMTUsMjQ2NzMzLjk1ODY1OTc5NDE4LDE0MDQxOC4xNzQxMTMwNDUzLDI4NDExMC4yMTE0MDU4Mzc3LDMwMjE5Ny4zNTIzMTYwMTA2LDQ3MzY1MzkuMDA3MjMwMTQ0LDU0MDkxMjkuMTI3Njk2MTE4LDQyNjA1ODIuMDk1NTU4Mzc1LDM2Njk2NzIuNDM4MzExNTQ3LDQ1ODQyMDAuMDg3NzgxOTE4LDkzMjY3Ny4wNDc0NjE5MDEsNTQ5MDY5Mi4yNzAyOTA3NywxMTc1MTMwLjAyMzUzMDc3NjgsMjkwODAwMS43NDYyODg2NTUsMjU0MzUwOC4zNjkyNzMyMzYsNTY2ODM1MC42MDc5NjM1MzYsNDE2MTcxOS4yNzQ5NTI1MjUsMTI4ODc1Ny41NTQxODkwOTM0LDM1NjQzOTkuMTk2NzMyMjIwNywyMjc5OTAxLjE2MzUzMTc1OCwzNzMxMjgyLjk2MTk2MDQ1OSwzOTc2NDkxLjE1NDY3MTQ5NDQsMzQyNDAzMS40MDIwODU3OTEzLDc2MzY5NjguMDM1ODMzMTU4NSw0ODI3OTEuMjgwMjYxMjU0OSw2MzU5LjIzNTc4NzA1NjQxNQorMTcsVGh1IDEwIEZlYiAxMSwyNjU4NzcuMTcwODMxMjI0NTMsMjQxMjMxLjc2MzI3NjUxOTEsMTM3NDkzLjUwOTc4OTc4ODA1LDI3ODg4Mi4zMDc2NTcxNTA5NiwyOTUyMjkuODkyMTU3OTUzLDQ2MzczMzIuODY4OTA1NjQyLDUyODM5MTIuMjUyMTAzNTY2LDQxNjc1NTYuNjU2MTA3Nzk0NSwzNTkyMjYyLjg4NDg1MjE2OTUsNDQ4NzgzMS40MDIwOTI0MDEsOTEyOTA5LjA0MjgyNDIwMzMsNTM3MDk0My4wODg3MTA0NzIsMTE1OTI2Mi4xNTQ0Mzg4MiwyODQyODk3LjA0ODY5MDE0NywyNDkxMTc3LjE0NDAxODM1OSw1NTcxODc2Ljg0OTAzOTQ3OSw0MDgzNjcxLjc0MTE2NjA5ODUsMTI2MzI3OS4yODc4NDM0MTYyLDM0ODMxNTYuOTgzNjU0ODMsMjIzNTgxMC40MTc5MzA1MTYsMzY3ODMyMy4wMjg2MDIwNDk3LDM4ODQwMDYuODg1OTI0MDU4LDMzNDgzOTIuOTUzMTkyMDc1Nyw3NDgzNDE3Ljc1NjUyNTI5NSw0NzM1NjQuODg2NjI1MzE4ODUsNjIxMi41ODQ0MDI4ODc1NDQKKzE4LEZyaSAxMSBGZWIgMTEsMjYwODAwLjE4ODQ0NDM0MDA4LDIzNjI0OC43NzAwOTA1NDgyLDEzNDk1MC40NzMyNDI5Njc0LDI3NDQ0MC4yOTkxMDE3OTg4LDI4ODg0MS4zNTEyMTE0MTM0LDQ1NTA4ODYuMzEzMjM2NTg2LDUxNjMxMTMuMDA0OTUzNjgsNDA4NTQxOS4wNzExMzczNzg1LDM1MjQ2OTguMzkyMjQ0MjU4LDQ0MDM4MjEuMjI1MjU0MTczLDg5NTYzMi4wOTAxNjg0NDM5LDUyNjUyNzIuNDg3ODEwMzcxLDExMzU3NTQuNjU1MDIxMjI4MSwyNzg0Njk3LjA4ODQ5MTkyNDYsMjQ0NTgzNS45MTk1MDUyNzQsNTQ5MDc4MS4xNTc3ODEwNSw0MDE3MjU1Ljk3ODIzNzM3MDUsMTIzNDQyNC43ODY1NzY1MTQ2LDM0MDk1MzAuNzA1ODY1MTg0LDIxOTgwOTMuNjkxMDA2OTU0LDM2MDI0NTguMjI4ODgwMDAzNiwzNzk1OTE0LjYxMzgyNTEyMzMsMzI4MTI1Mi4xODkzOTk2MSw3MzUxMDQ3LjMwNzEwODM0Myw0NjU2ODQuNDU3Njk3OTc4MjQsNjA3Ny4xMDcwOTMyNjE3OTYKKzE5LFNhdCAxMiBGZWIgMTEsMjU2NDY2Ljg2OTY4NDQ5OTQ4LDIzMTg5OC42NjkyNjY4Njk2MywxMzI3OTEuMDg3OTQwOTIyNzMsMjcwNzMwLjA5NDA3MTE3NTQ0LDI4MzIxOS4yMzQ2ODI0MDAxLDQ0NzczNzAuNjQ2MjY3MjQzLDUwNTM0MDUuMDQ1NzAyMjA4LDQwMTQ5MjYuNzE1MjE3NTA3NCwzNDY3MTc0LjMyNzk3MDQ5OTYsNDMzMjM1Ni4xNjkyOTg3MzgsODgwOTA4Ljg3MjcyMzQ2LDUxNzQ2MjAuNjA2MDc3MTQ4LDExMDk2NTEuNjI5NzE3Mzc5OCwyNzM0MzI3LjYyNTQ3OTU4OTcsMjQwNzQzMS4zNjk5MDQ5NDEsNTQyMzU3Ni43MjEzNjYzMzEsMzk2MTcyMS40ODA3NDExMTE2LDEyMDU4OTguOTM3NTQwODUyLDMzNDUyMjguNDYzODM0MzgwNywyMTY2NDM2LjY5NTgwNTQ5LDM1MTkzODQuMDUyMzAyNTY0LDM3MTY1MjAuNjE4OTk4MDE0NCwzMjIzNDIxLjQ3MzUwOTgxOTIsNzIzOTMyOC4yMTEzODkwOTU1LDQ1OTA3Ny40NDEyODQ1NDY5LDU5NTcuMzA4MzIyNTcwOTEzCisyMCxTdW4gMTMgRmViIDExLDI1MjgzNS42MjIyNTE4MTE4NCwyMjgxOTQuNDAxNTQ3ODE3NDYsMTMwOTg4LjMwNzk2ODc3NTk5LDI2NzY2OS44ODEyMjUyMzExLDI3ODQwNS4yMDAwNjIwODQxLDQ0MTU5MjguMDU4MzU3NDY2LDQ5NTc0NTYuODk3MTI1MDE3LDM5NTU2MjEuNjA4ODk4NjIxNSwzNDE5MDU3LjE1MTQwMTEyMDIsNDI3MjYxNC42Njg1MjM3NjUsODY4NTg1LjAyNzc5NzMyNzEsNTA5ODM3Ny42ODQwMzA4MzUsMTA4NDA4OC43NjkxMDkyMDkzLDI2OTE2OTcuOTI1MTY3NTQ3NSwyMzc1NDI3LjYwMDczNTg3LDUzNjg0NzAuODAxMzM5NDk2LDM5MTU4NzkuODgxODkxNTc4NCwxMTc5NjE5LjcxNzA2MDY2OTgsMzI5MDQ1OC4xNjc1MjI3MDE0LDIxNDAyMzEuNjg4NTQ2NDA5NCwzNDM4NTgyLjUxMDQ5NDA0MTMsMzY0NzQzMy44NjI2Nzc3Nzg2LDMxNzQ2NDIuNTUyNDAzNTk3LDcxNDY0NzIuMjM5NDM3ODE4NSw0NTM2MTIuNzI5OTE2OTc3NDYsNTg1NC4zODkwNTUwOTc0MTIKKzIxLE1vbiAxNCBGZWIgMTEsMjQ5ODMzLjMzMjg0MzYwMjkzLDIyNTA5NS40MDc5MjE2OTQzLDEyOTUwMS45MTAzMDMzMjQ5LDI2NTE2OS4zOTM4ODA5MjE1MywyNzQzNjEuNzgzNTU3NjEzODUsNDM2NTIyNi45MzE4NTYzLDQ4NzU2NTIuNDc5OTQ1NzEyLDM5MDY0NDUuNTAzNzgxODI3NiwzMzc5MzI3LjQ4MTAwNDU0ODMsNDIyMzMwOS42MTEzMjk5NTMsODU4NDA0LjMxNjQ4OTgyNjQsNTAzNTE3MC4zNDY5MjI3MTE1LDEwNjA2NjcuMjYyNDEyNDQxNCwyNjU2MTkzLjc2MDk4NjQ2MDQsMjM0OTA3Ni4zNDY3OTY1OTQsNTMyMzY0Mi42NDIwNTY4MDYsMzg3ODQwMS42MzI5MTY5NzA2LDExNTY0MjMuMDIxMjU0NjA0MiwzMjQ0NjMwLjA2MTUzMzMyOSwyMTE4NzYyLjQ1ODkzOTEyNywzMzY0ODQ0LjIwMjAzMjY4NTcsMzU4ODczOC41MjY1Njk4MTYsMzEzNDExNy43NDExNDQyMTQ4LDcwNzAxNjUuMzIxNDUzNzc4LDQ0OTEzOC4yOTUyNTcwMTkzNCw1NzY3LjczOTI0NzE0NzI2ODUKKzIyLFR1ZSAxNSBGZWIgMTEsMjQ3Mzc1LjgxMjE5Njc0ODA0LDIyMjUzNi4xOTk2NDUyNDg0NSwxMjgyODcuNzUwNDM2NzA2OTUsMjYzMTQwLjU3OTA4NTgwNDA2LDI3MTAxMy4wMDQwNDY3MjYyLDQzMjM3ODYuMjMwMjg4MDg4LDQ4MDcxNTYuMDM1OTg4Mzk0LDM4NjYxMDQuNzE2OTMyMTg0NSwzMzQ2ODM5LjQ4ODEyNjQ5Nyw0MTgzMDA1LjUxMTU2NjU3Nyw4NTAwNzYuMTY1NjI1MDY0LDQ5ODMzMjcuNzExMDgxNTk2LDEwNDAwNjUuNDUxNzQ3NDA1NywyNjI2OTcyLjkzODU2Mzg0MjMsMjMyNzU3My40ODA1OTQ2MDk0LDUyODczOTAuNTAzODM4NzIxLDM4NDc5ODEuMTEzODQyNDE2NiwxMTM2NTE5LjAzODk1MTM2MiwzMjA2NzgxLjYzMTUyMzI2MjIsMjEwMTMwOC43Nzg5NTM1NjQ0LDMzMDAxNTAuNTM2NTcwNzIzNiwzNTM5NzE3LjM3ODM3MDkwNCwzMTAwODI2LjUzMzA3ODQ3OTYsNzAwNzk4OC45MjI2NjQwMTgsNDQ1NTAyLjM1MzI3NTA1LDU2OTUuODQ5MDc2MTE1MjQ4CisyMyxXZWQgMTYgRmViIDExLDI0NTM3OS4yNzE5NzQ1MDg3NCwyMjA0NDMuMDg4NjQ1MTQ0MDIsMTI3MzAyLjg3ODAzMDcwMjU5LDI2MTUwMy4wMDA4OTcyMDY1NywyNjgyNjguMzY1OTQ0MjY4NTMsNDI5MDE1NS42NjYzNDUzNDk1LDQ3NTA1NTYuOTk0Nzg5Nzg1LDM4MzMyNzcuNjk4MTE5MjY4OCwzMzIwNDY1LjQ3NjE1MjkyMSw0MTUwMjk0LjgzNTQ3Myw4NDMzMTMuNDE2NzE1NTQ4Nyw0OTQxMTQ2LjMyODAyODczNiwxMDIyNDMwLjYwMDUxODM5NDcsMjYwMzEzNi4xNTg3ODQ1MTMsMjMxMDE0NC43NTA2ODgxOTcsNTI1ODE5OS42NDk2NTUyOTcsMzgyMzQyMS4wMTczNTIyNzUsMTExOTc3Ni4yMDk2MTY1MjM3LDMxNzU4MjYuNTY2MDcxNDMxLDIwODcyMDEuMTg2MTg4MDEyMSwzMjQ0ODcyLjQ0NDg0NDU4NSwzNDk5Mjg3LjgyNDM5MTYzOCwzMDczNzA3LjA4NjE1NDc1MDUsNjk1NzY0Ny41MTczNjYyNzYsNDQyNTY0LjM4NzMyNzMyMTg2LDU2MzYuODUwMTk3NDQyNzI2CisyNCxUaHUgMTcgRmViIDExLDI0Mzc2Ni4yODI2OTE3MjA4MSwyMTg3NDMuNTE2MTY5NjA4MSwxMjY1MDguMTE4MjE4MTEwNTcsMjYwMTg2LjEwMTY3NjA1MTQ1LDI2NjAzNi40NDM4NTc0OTk4Niw0MjYzMDA3LjQ0MTMwODI1MSw0NzA0MjQ4LjQ3OTM2MzgzOSwzODA2NzI1LjM1NDQ1NTQ5MSwzMjk5MTY5Ljk3NzUyOTEyNzYsNDEyMzg4Ny45NDE2MjE2ODAzLDgzNzg1MS43NjkwNzk2MzM1LDQ5MDcwMzAuNzg1NjI5NzA2LDEwMDc2MjIuMTkwNjM3NjU4MSwyNTgzODIwLjMzNTI4NDU4OCwyMjk2MDg4LjMyMjA1NTQzNjcsNTIzNDc2NC4xMTkwMzY4NiwzODAzNjY4LjQzODQxNzg0NjMsMTEwNTg5NC4zODUwNTMwMDEsMzE1MDY5My43MDA0MjIwMDQzLDIwNzU4NDUuODQ1ODcwODczMiwzMTk4NTEzLjcxNzAwMjAxMTQsMzQ2NjI1Ni4xNDM3MTQyMzIsMzA1MTc1My45Mjc2ODY0MTkzLDY5MTcwNzguMjUwMzQ3NTc4LDQ0MDIwMC4wNzM4MTYzMjg1LDU1ODguODI0MzYxOTk1NTA5CisyNSxGcmkgMTggRmViIDExLDI0MjQ2OC40MTYyMTc3MDU4NSwyMTczNzAuODM2ODY5OTExMTcsMTI1ODY5LjE0MTczOTg3NzU4LDI1OTEyOS42NTgzOTQyMjYxMywyNjQyMzIuMDM3NTUwODkxMDUsNDI0MTE3NS4xMzQwOTY0MjYsNDY2NjYzOS4xNDAzNzQzNzQsMzc4NTM0Mi41NjY1NjQxMDYsMzI4MjA0MS42NTQ4NTcwMjk3LDQxMDI2NTEuMzY3NTcxOTQxLDgzMzQ1OC4yNDkwODExNDg2LDQ4Nzk1NTkuMTQ1ODEzOTk2LDk5NTM1OS45MjAxNTE5NDk2LDI1NjgyNDQuNjI0ODM4MzU4NywyMjg0NzkxLjY2NTI2ODQxMTQsNTIxNTk4Mi43OTM5OTI3OSwzNzg3ODIzLjEyNTAwMTAxNTYsMTA5NDUwNy41MDk3NDUyNDIzLDMxMzAzOTguMzkxOTc1MjQzLDIwNjY3MzEuOTgxOTI2MjUxLDMxNjAxNjIuMjg4MDU3MDAyLDM0Mzk0NTguMjU0ODQzNjMsMzAzNDA2NC43OTc0MzUyMjMsNjg4NDQ5MS4xMDU0OTk5NjcsNDM4MzAyLjY2NTg3MjA2NDU0LDU1NDkuOTY4MDcwNzUzMDQ1CisyNixTYXQgMTkgRmViIDExLDI0MTQyNi45NjUwNjYzNTA0LDIxNjI2Ni4zODE4MDcxMDI5LDEyNTM1Ni42NjgyOTU2NDQ3LDI1ODI4My4yNjM3MTE5Mjc5LDI2Mjc3OS40NDg3MDU0MTYzLDQyMjM2NjIuMTY5MjgwMjYxLDQ2MzYyNjIuNTI5MzYyNzMzNSwzNzY4MTc1LjI1MTU0OTc4OCwzMjY4MzAwLjg1MTQwMDAxMjYsNDA4NTYxNi4zNjM5ODY3OTM0LDgyOTkzMy4zMzM5MzE5NzM5LDQ4NTc1MDQuMzc3MTEyNTYsOTg1MzExLjE0NjcxMDUyODMsMjU1NTcyOC40MTc1NzEzOTEsMjI3NTczMy44MjU1NTU3OTA3LDUyMDA5NDIuMzM1MDMyNzc4LDM3NzUxMzAuNTk3NTIyMjUzNiwxMDg1MjQyLjAxMzM4NzE3MTYsMzExNDA3My40MTk2Njg3MjMsMjA1OTQyOS42Njg1NDA4ODkyLDMxMjg3NTYuMTE2NjA5NzI2NiwzNDE3ODMwLjk4MDg1MTQwOTUsMzAxOTg1Ny41MjU4NTk1ODY0LDY4NTgzNjkuODc0NDczMzMyLDQzNjc4Mi40Mjc1NTA0NjgzNiw1NTE4LjY3MDA3MDQ2NzE2MworMjcsU3VuIDIwIEZlYiAxMSwyNDA1OTIuNjA1NDcwMzI5NjcsMjE1Mzc5Ljk1MDc2NzY0Nzg4LDEyNDk0Ni4yMDI2NzQwNjMyOSwyNTc2MDUuMzM1ODg2MTc1NzcsMjYxNjEzLjQ5NDQyMzM0MTQ3LDQyMDk2MzMuNzkwMTI2OTMzLDQ2MTE4MjUuMDEwMzg4NDU4LDM3NTQ0MTguMTk5NDE3MzU3LDMyNTcyOTMuODgxNzU2MTUyLDQwNzE5NzEuMjc3ODcwMjgyLDgyNzEwOS42MDg3MzE2Myw0ODM5ODMxLjI1NjQ4OTE2Miw5NzcxNDAuMzM3ODc0MTkzMSwyNTQ1NjkzLjM3OTg4NjcyMzYsMjI2ODQ3OS44OTU4ODQzNDEsNTE4ODg5NC41MDc4OTQ5MDksMzc2NDk2Ny44NzI2OTQyOCwxMDc3NzQ3LjgyMzU0MjQ4NzgsMzEwMDk3Ni41MDMyODg1OTYsMjA1MzU4Mi43NTE3MTUyNzQ1LDMxMDMyMzIuODcxMDMwMDY1LDM0MDA0NDEuODM3NjcyNTYzMywzMDA4NDcwLjA0MTgwNzM3LDY4Mzc0NTIuNTk1NTc5NDU4LDQzNTU2NS4wOTE3Nzg4OTI2LDU0OTMuNTM3NzAyODM2NDI3CisyOCxNb24gMjEgRmViIDExLDIzOTkyNC41MzM3NjgyMzUxNSwyMTQ2NjkuNDQ5MDMxMTkyODcsMTI0NjE3LjU0NjI2ODcyMDUzLDI1NzA2MS45NTQ5MTgzNjMwNCwyNjA2NzkuMjY1NTY4OTM2MzMsNDE5ODQwMS4wMDc4NDQ1MTYsNDU5MjIxOC4wOTcyOTMyMDIsMzc0MzQwMy4wMzI1NzI2NjI1LDMyNDg0ODAuODE4MjExMTY3Niw0MDYxMDQ2LjA2MTYyOTc4Miw4MjQ4NDguNzEyMDUyMjQ3NSw0ODI1NjgwLjY5NDA1Nzg4LDk3MDUzNS4wODAxMjQxMDk5LDI1Mzc2NTcuMDI1MjUxODg4NywyMjYyNjcxLjgyNDAyODQwMTYsNTE3OTIzMi4yMzQyMDY5NTUsMzc1NjgyNi4zNjc2NjE1OTc3LDEwNzE3MTIuODIzNzI0MzY1LDMwOTA0ODUuMDcxOTI5NDcxNiwyMDQ4ODk5Ljc0NDg3ODE5NCwzMDgyNjA4LjAzOTQ1Mjk3MzMsMzM4NjQ5NS4wMDExOTQxMTQzLDI5OTkzNTEuNTc0NjE4MTQ1LDY4MjA3MDIuNzAzNTIwNjU3NSw0MzQ1ODkuOTIxMTQxODUyNyw1NDczLjM5NDYzNzcxNDE2MQorMjksVHVlIDIyIEZlYiAxMSwyMzkzODkuMzkwODMwMzYxOCwyMTQxMDAuMTA0MDk0MjY4MzUsMTI0MzU0LjIyNjk1MTQ0NjIyLDI1NjYyNS42OTI2OTQ4NDQxOCwyNTk5MzEuMjQ3NjM3NDk0MzgsNDE4OTQwMS41MzIxNzU5OTE3LDQ1NzY1MTEuMzI0MjQ5ODc4LDM3MzQ1ODEuODg3NzAzMjQsMzI0MTQyMC43NzIwMTgwNjE1LDQwNTIyOTMuODAwOTY0MDM2LDgyMzAzNy42MTA3MjMyOTczLDQ4MTQzNDguNjM1Njk0ODE4LDk2NTIxNy45NTQzNjA1MzQzLDI1MzEyMjIuMzMxODE0OTQxNSwyMjU4MDE3Ljk3NjAwMTA2LDUxNzE0NjYuNzE5ODczOTI3NSwzNzUwMjk0LjU3NzczNDgyMywxMDY2ODY3LjYxNjA5MzI4MywzMDgyMDg0Ljc1ODkwNzEwNTMsMjA0NTE0NC4zMzAyODE1NywzMDY2MDA5Ljk3OTc4MzgyNjUsMzM3NTMyNC40MDY0MTQ0MTUsMjk5MjA0OS45MDE1ODg4MjIyLDY4MDcyNzcuNDMyNTc2Mjg2LDQzMzgwNy43MDI1NTUxNDA2LDU0NTcuMjYzODM1NjU0NDU3CiszMCxXZWQgMjMgRmViIDExLDIzODk2MC4xNTQyMzIwMzI2LDIxMzY0My41MjA3NjEwNDksMTI0MTQyLjkyNzg4MDU5Mjk4LDI1NjI3NC41MjU1Njc4ODk4LDI1OTMzMi4xNzI5NzU5OTA5Miw0MTgyMTgwLjUxNzMzMjgyMSw0NTYzOTM1LjQ3NTkwNDQ2MSwzNzI3NTEwLjA1NDQ1MTc1NDMsMzIzNTc1Ni45NDA3MzIzOTE2LDQwNDUyNzIuMDMzMzg0NTM3LDgyMTU4NC43OTY0NjA3NjYsNDgwNTI2My42NzM2NTMzNjIsOTYwOTUwLjE2ODA5MzU4MjcsMjUyNjA2Ni4wNTMyNzcwNTgsMjI1NDI4Mi44MTA4OTIzNjYsNTE2NTIwNi44MTQ4Mjk4NjUsMzc0NTA0MS44OTgyMzAxMjY2LDEwNjI5ODQuODc2NDc2ODU1NSwzMDc1MzU1LjQ2MDk4MTI4ODUsMjA0MjEyNi4zNDY4OTUyNTQyLDMwNTI2ODkuOTM3NzU4MTI2LDMzNjYzODAuNjMzNzUxNDc4NSwyOTg2MTk3LjQ2MDYzMTQ0MTMsNjc5NjQ5Ny4wODg2Mjg2OSw0MzMxNzguODUzOTA0ODg3NDUsNTQ0NC4zNDQwNDgyMDIzNTQKKzMxLFRodSAyNCBGZWIgMTEsMjM4NjE1LjA5NDI3MjE0MzU2LDIxMzI3Ni43MjAyMjQwOTI2MywxMjM5NzIuOTU3MzU0MDQ5NzUsMjU1OTkwLjg2ODgyMTc1MTgyLDI1ODg1MS44MTY0MTAyNTg4LDQxNzYzNzIuNjEyNTgyNDI0Nyw0NTUzODYyLjAwODE0NjcyMywzNzIxODI5LjMzMzgzNzEyNywzMjMxMjAyLjYyMTU5NTc3Niw0MDM5NjI1LjMxNzY1MzMwMDIsODIwNDE2LjcxODI1MTE0OTQsNDc5Nzk2NS42MTMwNDczNTcsOTU3NTMwLjYyMDQyODkyNTUsMjUyMTkyNy4xOTkxOTA3MjgsMjI1MTI3Ny4zNjYwMjQ3NzgsNTE2MDE0MS4wNDA3MjExNzksMzc0MDgwNC4yMjI2NzkxMTEsMTA1OTg3NS45MzQxMjUwMzE4LDMwNjk5NTcuMTQxNTk1NjU4NCwyMDM5NjkzLjY4ODg2MDk3NDUsMzA0MjAxOC4yNjk4OTI1ODM2LDMzNTkyMTUuNTA4MTM0NTI1MywyOTgxNDk3Ljg4MjE3NjgxODMsNjc4NzgxNy4wMTMyOTk2NTgsNDMyNjcxLjcyNjc2MTIwMjIsNTQzMy45ODQ2NTIyNTMwMworMzIsRnJpIDI1IEZlYiAxMSwyMzgzMzYuODM5NDAyMTg1LDIxMjk4MS4yNDA2ODk3NTgyNCwxMjM4MzUuNzc4NzM1Mzc1MDMsMjU1NzYwLjc0NTA0MDA2MjU4LDI1ODQ2NS44NDkwNzI3MTU3Niw0MTcxNjg2LjAwMTgyNDk4NzYsNDU0NTc4MS45Nzk3ODgyNjYsMzcxNzI1Mi45ODUxMTc5MDMsMzIyNzUyOC43NDg0NjIyMTk3LDQwMzUwNjkuNzI2NzIyNjYxNCw4MTk0NzQuNTk3NzAyNTE3LDQ3OTIwODYuMDk5MjIzNjAxLDk1NDc5Mi42NTE1MDQ2NTc2LDI1MTg1OTYuNDQzMDc3NTcsMjI0ODg1MC44NTg5Mzg2MTEsNTE1NjAyMi4zMjM1NjQzODcsMzczNzM3MS41MTk2MjkwMzU2LDEwNTczODYuMTUyMjQ0MDgzLDMwNjU2MTYuNTM0NzA2ODAzNSwyMDM3NzI1LjI3MDM5NzQ0NTIsMzAzMzQ3My43NDE4NDY1ODIsMzM1MzQ2Ni42MjYyMDcyOTksMjk3NzcxMy43MjEzNjkxMjgsNjc4MDgwMi45OTgxNzQ2NjU1LDQzMjI2MS4xMzUxNTQ5MzI3LDU0MjUuNjYxNDQ3MDMxMjQ2CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L05vblplcm9Nb3J0YWxpdHlSYXRlX1JLX1JlZmVyZW5jZS9IdW1hblBvcHVsYXRpb25Nb2RlbC9odW1hbi9EZWF0aHNfMC5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L05vblplcm9Nb3J0YWxpdHlSYXRlX1JLX1JlZmVyZW5jZS9IdW1hblBvcHVsYXRpb25Nb2RlbC9odW1hbi9EZWF0aHNfMC5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmMyNDQwMQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvTm9uWmVyb01vcnRhbGl0eVJhdGVfUktfUmVmZXJlbmNlL0h1bWFuUG9wdWxhdGlvbk1vZGVsL2h1bWFuL0RlYXRoc18wLmNzdgpAQCAtMCwwICsxIEBACitpdGVyYXRpb24sdGltZSwKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvTm9uWmVyb01vcnRhbGl0eVJhdGVfUktfUmVmZXJlbmNlL0h1bWFuUG9wdWxhdGlvbk1vZGVsL2h1bWFuL0RlYXRoc18xLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvTm9uWmVyb01vcnRhbGl0eVJhdGVfUktfUmVmZXJlbmNlL0h1bWFuUG9wdWxhdGlvbk1vZGVsL2h1bWFuL0RlYXRoc18xLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYzI0NDAxCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Ob25aZXJvTW9ydGFsaXR5UmF0ZV9SS19SZWZlcmVuY2UvSHVtYW5Qb3B1bGF0aW9uTW9kZWwvaHVtYW4vRGVhdGhzXzEuY3N2CkBAIC0wLDAgKzEgQEAKK2l0ZXJhdGlvbix0aW1lLApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Ob25aZXJvTW9ydGFsaXR5UmF0ZV9SS19SZWZlcmVuY2UvSHVtYW5Qb3B1bGF0aW9uTW9kZWwvaHVtYW4vRGVhdGhzXzIuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Ob25aZXJvTW9ydGFsaXR5UmF0ZV9SS19SZWZlcmVuY2UvSHVtYW5Qb3B1bGF0aW9uTW9kZWwvaHVtYW4vRGVhdGhzXzIuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBmNzcwZDEKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L05vblplcm9Nb3J0YWxpdHlSYXRlX1JLX1JlZmVyZW5jZS9IdW1hblBvcHVsYXRpb25Nb2RlbC9odW1hbi9EZWF0aHNfMi5jc3YKQEAgLTAsMCArMSwzMyBAQAoraXRlcmF0aW9uLHRpbWUsRUctRlJHLUcyMTAwMDEsRUctRlJHLUcyMTAwMDIsRUctRlJHLUcyMTAwMDMsRUctRlJHLUcyMTAwMDQsRUctRlJHLUcyMTAwMDUsRUctTE9FLUcyNDAwMDEsRUctTE9FLUcyNDAwMDIsRUctTE9FLUcyNDAwMDMsRUctTE9FLUcyNDAwMDQsRUctTE9FLUcyNDAwMDUsRUctTE9FLUcyNDAwMDYsRUctTE9FLUcyNDAwMDcsRUctTE9FLUcyNDAwMDgsRUctTE9FLUcyNDAwMDksRUctVVBFLUcyOTAwMDEsRUctVVBFLUcyOTAwMDIsRUctVVBFLUcyOTAwMDMsRUctVVBFLUcyOTAwMDQsRUctVVBFLUcyOTAwMDUsRUctVVBFLUcyOTAwMDYsRUctVVBFLUcyOTAwMDcsRUctVVBFLUcyOTAwMDgsRUctVVJHLUczMDAwMDEsRUctVVJHLUczMDAwMDIsRUctVVJHLUczMDAwMDMsRUctVVJHLUczMDAwMDQKKzEsVHVlIDI1IEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyLFdlZCAyNiBKYW4gMTEsMTAuNDAzMzMyNzA4MjM4OTkyLDkuMjg4NjU1MDA2ODcwMjQ3LDUuNDA2NzUzMzExNDcxMzQ1LDExLjE3NzU4NDc1MDE4MzE0MiwxMS4yNjY0ODQwMDM4NTg3ODcsMTgyLjEyNzI5MTMxMDIyNzE1LDE5Ny45MTczNjM1NDk0MjEzNywxNjIuMjEyMTgzNDk1MzYwNiwxNDAuODk3NzE5NzUxMjA0NDIsMTc2LjE1NzU5MTE2NjExNjI4LDM1Ljc3MjQxNjk3ODQyMDAxLDIwOS4xMTg5NDExNDg2NjM4NSw0MS4zODU4NDM2MDM0NzE4MSwxMDkuODYzNDg1NTgyNTA5Miw5OC4xOTc5MzU3ODk2Mjc0MSwyMjUuNDk4OTg2MDY5MDEyMTUsMTYzLjMwOTc2MjQzNDI0MjgsNDUuOTI4NjMxNzEwMzgwMTQsMTMzLjY3MzE2ODI5OTcyNzY1LDg5LjAyMjc3MzY5NTA2NTE4LDEzMS41MTQyOTU2NjQ5MjMyLDE0Ni4wNDMyOTE5MDU4ODMyNSwxMjkuOTE4NzU1NDgxMDE3NywyOTYuMTQ3Mjc1MjUzMTA2MiwxOC44ODU5NjI4MTI0NTMzNTQsMC4yMzY0NjY1NjAzNjMzMDc1CiszLFRodSAyNyBKYW4gMTEsMjAuODA2NzQ5ODA3NjgyMTEsMTguNTc3MzYwNTQzMzY2ODgzLDEwLjgxMzUzOTU2NDg3NjIzMywyMi4zNTk3MTM5MzM3MjM3NDMsMjIuNTMzMDEzNTY1ODQ4NjA2LDM2NC4yNTc1ODMzNjkwMzQ2LDM5NS44MzU1MjAxOTcwODYyLDMyNC40MjUwODQ3OTczMDk4LDI4MS43OTcwMTUzMjM5MTQzNywzNTIuMzE2NzA1NTgzNTQ3Nyw3MS41NDUwMzA1NDEzNjg0LDQxOC4yMzg3ODIzMzczMjIwNSw4Mi43NzE4NTI3NTA5NTAwNiwyMTkuNzI3NDM1NzgyNTY4MjIsMTk2LjM5NjQyODMyMzA4ODM0LDQ1MS4yODM3MTEwMjAzNDI2LDMyNi42MjcxMDE0MDY1MjgyLDkxLjg1NzQ0NzE0OTY1MTk1LDI2Ny4zNDY4ODYwMjg5OTc2MywxNzguMDQ4NTkzMTkxMzcyMzMsMjYzLjAyOTExNzM5NDMxNDIsMjkyLjA4NzE2ODE5MDY4MDY0LDI1OS44MzgwNzc0MDk2MTM4LDU5Mi4zMDAwMDkwMjA4MjkzLDM3Ljc3Mzk5ODU2NzYwNzkzLDAuNDcyOTM0MDcxNTcxNTg2OTYKKzQsRnJpIDI4IEphbiAxMSwzMS4yMTA2MDE0MzE2NDA0MTYsMjcuODY2Mjc2MTk0MTczMDgyLDE2LjIyMDUxNDkwMTg0NzkyNCwzMy41NzA1MzkyODU0NDU4OCwzMy43OTk1OTY3NzIzMTM2Niw1NDYuNDA3NDc3NzI1NjIxLDU5My43NTQ0OTM5NzkzNDY5LDQ4Ni42Mzk3MzgzMzAwNTg5NSw0MjIuNzA1NTg4MjY2MDE1MzUsNTI4LjQ4NDI0MzE2MzMzOTksMTA3LjMxODU2ODM3MDM3NzgsNjI3LjM2MDUzNzMwMjU0MTUsMTI0LjE1ODAyNzQ1MzIyOTk5LDMyOS41OTIyMjgzMzk0Nzk3LDI5NC41OTc2ODUyNjU1OTE5LDY3OC42MzY2Njk3MjQ5NjEsNDkwLjAwNjczMzA4NDE4MDcsMTM3Ljc4NjQ0NjY5MjkwMTI4LDQwMS4wMjEzODIzMjAyNDc1NCwyNjcuMDk4MjkzOTU1MDU5NjYsMzk0LjU0NDQ2NTM1NjA2NDMsNDM4LjEzMTYzNTMyNzg3NDE2LDM4OS43NTg2NTY1NjM5Njc0Niw4ODguNDkyMDU0NTc3NTA3MSw1Ni42NzY4NjA4NjQ3OTg1MiwwLjcwOTQwMjY2ODEzMjA0NDYKKzUsU2F0IDI5IEphbiAxMSw0MS42MTc2Njc3NjY2OTgzNTQsMzcuMTU2ODE4MjE1MDEzMjMsMjEuNjI5MjM0NTY1OTMxMTQ2LDQ0Ljk0ODE1ODYwNzYyMTYxLDQ1LjA2NjMyODc5MzU3OTYzNiw3MjguNjk2NTMxNjM4MTgxOCw3OTEuNjc0NTc1NjIwNDAwOCw2NDguODY3MzMzODM3NDgwOSw1NjMuNjgxMjE5NzAxMDQxMiw3MDQuNzE2MjQyNDc3MDI4MiwxNDMuMTAwMjA0ODM4NTE1MDUsODM2LjQ5NTgwOTIyMTg4MjUsMTY1LjU0NDM2Nzg5NzI3MjksNDM5LjQ2MTk0ODkwNzc2NDEsMzkyLjgyNDk0ODc1MzA0NTYsOTE0LjM4NjM1NzkyMDk4MTcsNjUzLjg3MDQyNjUyODI0NTcsMTgzLjcxNTYzNTgxMjUyNTE0LDUzNC42OTkyMjQ4NDgzMjI2LDM1Ni4zMjk4MTAwNjM0ODQ0NCw1MjYuMDYwMzQxOTk3OTM3OSw1ODQuMTc2ODA0NjIwMjQ5Niw1MTkuNjg3ODU3NzcxNDM1NSwxMTg0Ljk4NDkwNDgxMzc3NSw3NS42NzcwNzk3MTg4MzkxOCwwLjk0NTg3NDI5MTU5OTI3NDUKKzYsU3VuIDMwIEphbiAxMSw1Mi4wNDg3MDkyNzI3NzUwMyw0Ni40NjAxMjk5Nzk5NDY5NTYsMjcuMDUzMDE5ODc1NTcwNTQ1LDU3LjI1ODgyNzIwMzA4NDM1LDU2LjMzNDE2MDYxNTA0MjQsOTExLjkzNzYwMjAyMDEyMzMsOTg5LjU5ODc1NDI2Mzk4MSw4MTEuMjExNTAxMDMwOTA2Nyw3MDUuMTM0NTg4MjgwNzYxOCw4ODEuNDM5NTExNTI0Mzg5LDE3OC45NTEwNzQ3NjgyMjUxLDEwNDUuNzU3NTg5ODE0NDQzMiwyMDYuOTMwODc2NjYyMzMwMzUsNTQ5LjM3NDQwMTU3ODA4MDcsNDkxLjI5MTQ4MDYyNDUxMTg1LDExOTUuMTQ4NjM2ODQzMDk5Nyw4MjEuMjc5MjQxMDEyMTYzMywyMjkuNjQ1MDc1ODYwNTE2MTYsNjY4LjQwNDk5ODIwNTc5NzksNDQ2Ljg3MTY3ODA2NDY1MjI2LDY1Ny41NzY3NzUxODMwOTI2LDczMC4yMjQxMTkxMTgyMjQ1LDY0OS42OTI5ODI5ODc2Mzc4LDE0ODMuNjgwNzQ4Mzg1NTgxNiw5NS4yODM5MzUyNjIwNzk4MSwxLjE4MjM3MDA5NzA5ODI4NjcKKzcsTW9uIDMxIEphbiAxMSw2Mi42NTI5MTQ2MTcwNjk5Miw1NS44NTg0MDI0ODYyMDQ3OTUsMzIuNTk2NTM2NTIwNzYzNzM1LDc0LjY4OTkzMTQzODU5NTUsNjcuNjExNzEyNTg2NjQ4MDgsMTEwMS40NjczNTMwNTM4MzY5LDExODcuNTU0OTE4NDk4OTg3Nyw5NzQuNTQ4ODYyMDQzNDk2Miw4NDkuODkyODU0Mzg4NjUyNywxMDYxLjc3NTM3NDY3NjY1NiwyMTUuMzUxMzI2ODc2NjUxNCwxMjU2LjE0NTQwMTM3ODE4MTMsMjQ4LjMxNzU4NDA2NDc1MTgsNjU5LjY0ODg5NjkzMTk0MzMsNTkxLjc5NzAzNjY2Nzk5MjIsMTcxNy4xNzUyNTY4OTYwOTU4LDEwMTMuNjIyODEzMTEwNDYwNCwyNzUuNTc1MzYzNDMyOTE3Myw4MDIuMzUzMjY0ODQwNTYxNiw1NDYuNDk4MTc2MTg4MTkxNiw3ODkuMDk0MDQxNDcyMTE1Nyw4NzYuMjg5NTExNDQzODU5Nyw3ODAuMzM2MjEzOTg1MjAwNCwxNzk3LjkwOTA4MzMyMDk3LDExOC41NTczOTUyMTEyMjgxMywxLjQxOTA4Nzg0OTIwMDMwNTYKKzgsVHVlIDEgRmViIDExLDc0LjQ3NDMyOTAwMzYyODc4LDY1LjkzMzgzMjE3Nzk4OTYzLDM5LjAzNzQ2MjY2MzE2ODA4LDExOS44Mjc2NDY5MjAzMjIzNCw3OC45NzIyMTA3Mjg2NjQ1OSwxMzMxLjUxMTcwODA3ODYxNiwxMzg1Ljc4Njg4MTIwNDUxNywxMTQ1Ljg2NzYwNDkzNDI0MTQsMTAxNy4wMTg3MDY2Nzk4ODEzLDEyNjcuOTExNzY0MzE5MzExMywyNTUuODgzNTE5NTEzMjY2MSwxNDc1Ljk1MTk5MTA4MTU2ODQsMjg5LjcwNDgxMDU0ODAwNzQ2LDc3Mi44MjU5MzUzNTk1MDM5LDcwOC42OTA5OTYzNjc2MTcsMzUyMC4xNTYzNDc0NzE2OTc3LDEzNzYuMTgyMjI4MTM0Mzc4NCwzMjEuNTExODEwMzIwOTAzNCw5MzguMzA1MDc4NDIyNzc2LDcwNy4zNzgzMDI4MjIzODg4LDkyMC42MTQ2NjQxOTk4NjUzLDEwMjIuNTMxNTQzOTcyNzA2Nyw5MTYuMDQ0OTQ5MTYyMTAyMiwyMjE4LjY1NTUxNDAyMTc1MiwxNjMuNTU2MDQwMjUzNzUxNjMsMS42NTc3MDkzNjcxMjUwODIKKzksV2VkIDIgRmViIDExLDk0LjY1OTIzMDczOTY0OTI1LDgwLjY4MTQwNjI4MTMyMzg2LDUxLjkxNjYzOTg2NDA4Mzk1LDMwOS43MzY4MzE2MzI0ODI1Niw5MS4wMDkyMTU0MjUyNzMzNCwxODE3LjA0NDYwMjA5NTA3NTgsMTU4Ni4zMjg2MDE1NjUwNzIyLDEzNzguNTQ3NDUyMTYzNzEzNiwxMzMyLjgwNDIxODU4NTczNTcsMTY1My44MzU0ODg4MDA3MjcsMzI2LjMxMjM2MzgxNzU2MTk2LDE3NzAuODMzNzgzOTQ1Nzc2LDMzMS4wOTU2OTg5MTQ2NTg3LDkwOC4yNzQyMjAzMjEwMzksOTUxLjM4OTE3NjkyNzMyMjQsMTE3NDMuNzIzMDgzMTE4NDY0LDI4NTkuMTM0ODk3OTc5NTc0LDM2Ny40OTg5NjIzOTQwMDUzLDEwOTAuMDc5MDYyNTY4NzI2LDEyNjkuMTQxMjQ0NzI5MTU3LDEwNTIuMTYwNDAzNzUxODk5NiwxMTcwLjQxNzU3OTQwODk0NjcsMTA5MC4yNDMwNDAyNjc2MjgsMzM1MS4yNzM0MTM5ODY2NDEsMzMzLjk0MTMzNDAzMjg4Nzc3LDEuOTExNjYwMzk2OTIzNjYxOQorMTAsVGh1IDMgRmViIDExLDE3MC40Nzc2MzM1NTEyNzk2NCwxMjYuMDgzMTI4ODY1MDg2MzUsMTA4LjY2MDkzNzQ3MTI1NjE4LDExNTIuMTI0MDY1NTI5ODQwNCwxMDguMzUyMTY2OTk4MTk1MTQsMzg1Mi45NzQzODk2MDg4NSwxODA1LjUzMzkwMDQ5MDQzOCwyMDY0LjQ2NjU2Mzc3ODIxNCwyNjA2LjEyNjg2NzM5MDY4ODQsMzI0Ny45NTY3MDczOTMzNzY3LDYwNC4wMTYzMDQ0MjQ1MDMyLDI2MzguNTM3MTc4Mjg4MDkzNCwzNzIuNTE5MzkyOTk2OTQ4MzQsMTIwOC4zNjM5MTQxODY3MTMsMjEwNS41MjYxMDE1NzY5MzcsNDQ5OTkuNzM0NzM5NzE1MjU1LDEwOTIzLjAzMTcyNzk2MDQyNiw0MTMuODkzODk2MTQyOTY0NCwxMzYxLjYyNTMwNzk1OTU0MjYsNDI0OS44MTk3MDg2ODk3NDUsMTE4My45MTEyMjkzMTI3NSwxMzMyLjc5OTM1OTc1OTk5NzUsMTU0NS44NTExODYwNjkwNzg1LDg5OTAuMzE0NDYyMzk0MzYsMTE2My44NTM5Nzc2Nzc0MjA1LDIuMjgzMDk3NzkwMDg5NzQ1MworMTEsRnJpIDQgRmViIDExLDU4MC45NDYwNTY1NzEzNjc1LDM0My40NjAxNjM5OTk5MTg3LDQyMy4yMjY1NTY1OTkzMzc2NCwzODYzLjgzNDU0MTM3MjQwMzIsMTY1LjQ0OTU0NDU1NDcxMiwxNDE1NS43NzE5MjM3NDU4NTcsMjE3MC4yNTU4NTA5MDExNzMsNTg1NC4yNDM1Njg0MzIzNDEsOTM5OS4xODA4NTAxMDU0NzcsMTIwNDMuMDExNzg0MDAxNDE5LDIxNjAuMDIzODM4NDI0MTgsNzUzOC40NjkwOTc4MDQzOTUsNDE0LjIzNDgxNTcxNTM2MywyNjYwLjIzNjIwNTc0Njk5Niw4Nzg3LjM1NjU0NjQxNjk2NiwxMjg5NDkuODU2Nzc2NzU1MjYsNDQyNDMuNjE3NjA1MjkxMTgsNDYzLjQzODcyMzY3NjA0ODksMjQ4MC41MDU1OTUzMTA1NTgsMTc4NTAuMTA2NTY1NDg4NTEsMTMxNy4zMDAxMDc4OTk4ODA1LDE2MTcuMDA2NTkwNzY3MDgxNCwzOTI4Ljc5MTQ1MzY0NDY0ODMsMzc3NTYuNjMzMDc3ODkyNjEsNDQ3MC42NTMxMDQyMTIwNjksMy41MDgxMTI1OTE4ODMwMjMKKzEyLFNhdCA1IEZlYiAxMSwyMzg0LjY1MTQ2NTMwODY1MDYsMTIxMi40MzA1Mjg1OTgwNjU4LDE2NjEuMzAxMjk4MzMzNTI0NSw5MDUyLjcyNDUwMTI4ODc4LDQ5MC4wMTY2NTk0MDc1ODksNTMzODYuMzUxODQ3MzA1MjQ2LDM2MDQuMDIxMjY1NzMxNzkxNiwyNTYyNS45MzkzNzE4ODEzMywzNzQyNS4yMDUxNjA1MzQ5Myw0ODUxMi4yODY2NzA5MjgwNSw4OTAyLjM4ODk3OTU3MDEwNSwzMzQ2NS44NjMzMjUwOTE1NSw0NTguNDYxNDYyMDEzMjgxNTYsMTA4MDguMTI2MDM5MjkyNTE0LDM0MTYyLjA3NjE2Nzg1NzIxNiwyNTQ4MzEuMjE4NzY3NjEyNzcsMTE3MzUxLjYwNTE1ODAwOTE3LDUzNS45OTM0NzA5MTI1NDI1LDg2ODguMTk2ODAzMzU1MjYsNTI3MjIuNjE3MDkzODc1MDE1LDE0NjMuMjA2MDk3NzQzMjgyNSwyODYxLjM3MTA1OTcyMjYzMzYsMTY3NTYuMTIzOTU5NDc5NjE3LDEyOTU1My4yNTE1MjA1NzEzMSwxMjE5OC43MDc0Njk4MjAyNDMsMTAuMTc5MjAwNTgxMzIyNzczCisxMyxTdW4gNiBGZWIgMTEsNjcxMS4xNTk0NjMxNzgwOTcsMzUyNi41ODYyMjk5NzM1ODI3LDQyMDIuNTQyNDMzOTI1Mzg2LDE1NzE5Ljg0Njc1OTU1NzkyNCwyMDg1LjQ3NTUyMzYyNzMzOTUsMTM2MDk3LjIwODAyODc5NDI0LDExNzgwLjExNDc2NTU2NzQ0LDgzMzQ0LjYyNjgwMjIwMzUyLDk5NzM0LjkxNTc3NzE0MjkzLDEyODAwNi4wNDI2ODIyMjc4OCwyNDM3Ny44OTkyMzQ3MDUwNjYsMTA4NzcwLjE5MjU2NTU2MjE2LDUyMy4zNDc4OTgyMjAzNTE1LDQwNDQ4LjQzMjgzNTE1MDIsODI4MDMuODc5MzQ3MzQ1MjEsMzk2MTI0LjcwNDQzMTE1NTc1LDIxNDcyMC4xMDMyMzI3NjAxLDc2NC45Nzk1NTkyNTYxODc2LDM0NzEwLjc4MjE5NTM1MDI3LDEwMzYzNC40ODUwOTY3OTY2OCwxNjk5LjcwNDYxOTMzMTYxOCwxMDQ1MC41MzM1NDkyMDk3MjcsNTgwMTQuOTg5NDEwMTY4OTIsMjg1ODk1LjIxNTM2Nzk3NjEsMjMxMDYuNzU1ODI5MDgwOTUsNDAuODMzODEzNDk4NTY1OTI0CisxNCxNb24gNyBGZWIgMTEsMTI3NzUuMDM4Njk0Nzg1MzMzLDc2NzguNjMwOTA0MTAxODg4LDc0NzIuMDU3NTUwNjQ5NDIxNSwyMjcyNi4xNjgwNzE1MjY0NTYsNjM3Ni43ODMxOTM5OTYyMTMsMjQ0OTM4LjYzOTA2MjU0MzkyLDQ3ODg4LjU0NTk5NjIwNjk2LDE3MzQzOS40OTI4NDcyMTg3LDE4MzQyMS4wMDg2NjU1NDIzMiwyMzMzMjUuNDAwMzgxMjkwODIsNDU0OTEuODUxODU2OTgwMDE0LDIyNTQzOS42ODEyMDg4Mzg2Miw3NDUuNzMxNzk1ODE4Mjg5Nyw5NTY5MS4yNzMzMjA3NTMxNywxNDMxMDYuNDEzMDM2NDA0MTgsNTM1MjYzLjQ0MTAxMzI4NjYsMzE4MTY5LjEwNzE4MTcwNSwxOTY0Ljk1ODM2NDY0MjMyNDYsOTMyMzYuOTU2MTA4NzQ5OTgsMTU5ODY1LjQyNTgyMzUxODU0LDI1NTYuMzc1OTIwMzc2MzYzNCw0MjU0MC43NjY4NTI5NzE5NDUsMTI3MzY1LjY0NjE4MjA1NzQ5LDQ3MDMyNC42MDg3MTA1NjM4NiwzNTAxMC4yNjkxNDk2OTkyOSwxMjMuNjQ0Mjk3NTQwNjAzMgorMTUsVHVlIDggRmViIDExLDE5MzU4Ljc2NDE2NjYzNTI0NywxMzA2OS4wNTc4Mzg3OTQ3NjQsMTA4OTQuOTc4MDc3Mzk3MTg1LDI5NDAxLjc2NDUwMjk2OTI0LDEyNzcxLjE0MDg0NzU3NTUzNCwzNjAwNTQuOTU1MDEyOTM2OCwxMzI0ODUuNTMxNTczOTc4MjgsMjc1NjI0Ljg4OTU4OTIxOTUsMjcyNjQ5LjY1MDUxNzE2ODksMzQ0OTU0LjIyOTQ1Mzc1NTQsNjgxNTQuNjE2ODM0NDgxOTcsMzU3MzE2LjEyNjMzMzI3MiwyMDAxLjEyNjMxMjA3ODczMjgsMTYzMzg5LjE4MjI3ODE0Mzk3LDIwNTIxNy4xODU0OTc3MDA5NCw2NjMxNzEuNzU4MzEyOTU1Niw0MTcyNzkuMzQ0NDY2MzIyMSw3Nzg3LjQ1MTk1MTkyMjg1NywxNzIzODkuODAxNzY2MzgxMjUsMjE0Nzk1LjkzNDExMTMxNDMsNzIyMi4xNzA0MzcyMDg3NjEsMTEwNDMxLjI5NzkyMzk2NTIzLDIwODU1NS41NjY3MTI5NTA0LDY1NjE2MC44ODU5Njk3NTg1LDQ2NTcwLjQ3MzEwNjc2NjE1NiwyNTIuOTk0MzQ2ODIzNDMyCisxNixXZWQgOSBGZWIgMTEsMjU3MzYuMDgxNzYwMDA5MTMyLDE4ODA5LjU2OTEwNTk2NDAxLDE0MTQ5LjMzMjk0MjIyNzM2LDM1NDIwLjA5NTM2Mjk4MjQzNiwxOTg4OC42NzQxMzQwMzE0MSw0NzAwODcuMDk0Njg3MzYyNCwyNDg5MzcuODY2NjkxMjQ1NzYsMzc2NzI1LjEyNTk4NDg4MTk1LDM1ODI5MS44MDE5NzE4MTcwNCw0NTE3NjguODI4NDIzNTIxNCw4OTk4MC40NDAwMTg0NjY1MSw0ODc1ODAuODU1MzA0NzE0MzUsODAxMS44NjUyNjQ1NTcyNDYsMjMyNzY4Ljc4NzI4NDE2MTY2LDI2Mzc1OS4yODc5MTAwMjMzLDc3NTkzNy45MTIzNzIxMTY4LDUwNjkyOC4wNzAzNTA2Nzk0NSwyNDI1My4zOTc4ODAzNTA5NzQsMjU3MDQ0LjMwNjgwMzI5MjQyLDI2NTA1Ny45OTE3NTI0MDIsMjg0NTguNDA5MzUzNDY1NjUzLDE5ODU5Ny4zMjM2MDI0MTg4MiwyOTAwNzUuOTA0ODQxNTU3Myw4MjkyMzAuODc0ODAxMTYwNCw1NzExMS45MzgzMzgyOTgwMSw0MDAuODY3MDg4MDAwODY1ODYKKzE3LFRodSAxMCBGZWIgMTEsMzE1NDIuNTEyOTQ0MjAyMzg2LDI0MzIxLjI3ODQ3MTA0ODI3NCwxNzA3OS40MTUzNTMxMTY4NDUsNDA2NTguOTc0ODczMjMwODk0LDI2ODY3Ljc4Mjc2NTkzMzA3Niw1Njk0NzUuOTgzOTcxMjU1OCwzNzQzNjMuMjU4OTY5MDMwMTcsNDY5OTE0Ljg4MTg4NDM2OTIsNDM1ODQyLjkzMjgxMzQ4Mzc2LDU0ODMxNC4zODA0NzgwOTY5LDEwOTc4NC40MjU5MzYxNDMxOSw2MDc1NDEuNzk2OTY5NTkyOSwyMzkyNS4yODg0MDY3OTQ4NSwyOTc5ODUuNjA4MDM1MTgzNDUsMzE2MTg4LjY2NzUxMjY5MjMsODcyNjMwLjgwMzk2MDUyNTksNTg1MTM2LjM1MTAxMTk1MzEsNDk3ODEuNDQ4NDAxMzAxNzg2LDMzODQyMy45Mjc1MjU2ODU2LDMwOTIzNi43NzMwMDQ3NTY5LDgxNTYyLjkzMjgxNTA4OTMsMjkxMjM0Ljg2ODc2OTMwMTE2LDM2NTg0Ni4zOTEzNzIxODQxNSw5ODMwNzUuOTM0MDIwNDEyNCw2NjM1Ni45NzY1MjgxMzkzMiw1NDcuNzYzNTk4NjEzNzgwOAorMTgsRnJpIDExIEZlYiAxMSwzNjYyOS43NjMxMDk2NTMwNzUsMjkzMTMuNTgwNTc2ODcwNDY3LDE5NjI3Ljc2MzI5MDQzNzI5LDQ1MTExLjc3MDcyODg5MzI1LDMzMjY3LjcxMDgwMjc2MjgxLDY1NjEwMS42NjczMzUzMjMyLDQ5NTM2Ni4xOTQ4NjA3MDg2LDU1MjIxMy4zNjIzMDAwOTgsNTAzNTQ2LjE3MzE4NDAyNTQ1LDYzMjQ5Ny45MDMyNTk2NDgyLDEyNzA5Ni42MzY3NzE1NzUyMyw3MTM0MTkuNzU1NTU4NzQzOCw0NzQ3Ny41NTYzMzM4MDU1MiwzNTYyOTUuMjgxNTc2MzQzMDYsMzYxNjI2LjE0MDc1NTMwMjgsOTUzOTQyLjE2OTE5MTYyMzEsNjUxNzEwLjA0NTA2NzU2MDYsNzg2ODQuNjU4NTI3MzA5MTMsNDEyMTg0LjU4NDAzMDg5OTQ1LDM0NzAzOS45NDA2MDQ4OTM4NCwxNTc1NjkuNzUzMjQyNzYzNiwzNzk0NzYuODc2MDA2NjEwOSw0MzMxMTYuNDAzNDYxNzY5NiwxMTE1NzM1LjU4NjQ4ODY2MzIsNzQyNTUuNzE2NTExMjcwODgsNjgzLjQ4MDUxMTA0MjAwMDgKKzE5LFNhdCAxMiBGZWIgMTEsNDA5NzMuMTY2MjAwODQ2OTUsMzM2NzIuODA4MTU0NTYyMDE1LDIxNzkyLjM2ODMzODQzMjg0Myw0ODgzMi42MDQzMjczMDUyOCwzODkwMC45Nzk4OTE1NTc0OTQsNzI5NzkzLjM0NDI3MTMzMTEsNjA1MjczLjMzNDA1NjE3MzUsNjIyODYzLjYzNzM1NzEyODMsNTYxMjA2LjU0NzAzOTk5MjEsNzA0MTMzLjI3NDgzMjk0NiwxNDE4NTQuNDg4NjI4NzY4NCw4MDQyNzUuMTY2NzQ2NzE1LDczNjI0LjM2OTI1ODI0NjIyLDQwNjc3Mi4zMzk4NDAwODIyLDQwMDEyNS4zMDcyMDQ3MDU1NSwxMDIxMzU5LjM5MzI3MjI3NTEsNzA3NDAwLjA5OTAzODg5NjcsMTA3MjU4LjA4ODg3MDc2Mzc2LDQ3NjYxOC41MTI1ODIwMDYzLDM3ODc4Mi4wMjUzMzQ5MzAzNCwyNDA3ODIuODEwMjY1Mzk2NjYsNDU5MDE3LjMzMTI0NjczODcsNDkxMDczLjkzMDIwMjg5NTIsMTIyNzczOS4xMjk4MzUyMjA4LDgwODgwLjc2MTgzNTAzMzA3LDgwMy41MTM4OTg0OTA4NDM5CisyMCxTdW4gMTMgRmViIDExLDQ0NjE0LjM0Mjg1Nzg4NjUsMzczODYuMDQ1NjMzODgxOTIsMjM2MDAuMjkwOTEwNzM1NTQ0LDUxOTAzLjMxNDAwNTkzMTYzNiw0MzcyNS45NjM1OTA0Mzk0NDUsNzkxNDA5LjMxNDI2ODY0NjEsNzAxNDE2LjY0ODExNzU5NTIsNjgyMzI0LjEzNDUwNDQ3OTIsNjA5NDU3Ljk3NjA3MjI5MzIsNzY0MDQyLjUzNjM2NzkzOCwxNTQyMTIuNDQxMjY4MzcwOTIsODgwNzE4LjM2NzM3NjkwMzksOTkyMzAuMDAyNzQ2Mjc1MTIsNDQ5NTA3LjgyMzI4OTM4MDQsNDMyMjIyLjMyMjQ2ODA0NTM0LDEwNzY2NzUuNzIxOTAzNzcyLDc1MzM5NS4yODE3NTExMzcyLDEzMzU4My44MTc4MjIwMjA0LDUzMTUxOC4xNzQ0NDA2MDUsNDA1MDcwLjk5NjA0NjUzMTQsMzIxNzIwLjAxNTExNjIzMTQsNTI4MjQ3LjY1MDM5NDU1OTYsNTM5OTc3LjU4NTIyOTA1ODksMTMyMDg3NS41NjcxOTI1MjMzLDg2MzYzLjI2NzE5MDkwMDM0LDkwNi42NjM0Mzk0NDQ3MzM2CisyMSxNb24gMTQgRmViIDExLDQ3NjI2LjQzMjQwMTA4NTAzLDQwNDkzLjg3NjU0MTgzMTg1LDI1MDkxLjc2NzE3ODUxNDc1NCw1NDQxNC4xOTAwNDM1MDQ4NCw0Nzc4MC4xNTY2NTU4NDQxOSw4NDIyODEuNjQwNzY3MzcwMSw3ODM0MTIuNzY1ODI2NjQsNzMxNjUzLjUxOTA0OTQ3ODksNjQ5MzIwLjE4OTU1MDM5MjcsODEzNTEzLjIzMjQ3NjkwMjUsMTY0NDI2LjgyMjM2ODY5NzUzLDk0NDEyMy4yNjg5NDE5NzUzLDEyMjY5My4zMjM3MTMxNzI0Miw0ODUxMTYuMjQ5NDk1ODk2Niw0NTg2NjUuNjg3MTY5MjgwODMsMTEyMTcxMi4zNDY4NTk2OTIsNzkxMDI1LjQ5NDIwMjk3OTgsMTU2ODI2LjA1NTgzMDI1MjEsNTc3NDczLjY4NzAyMTMyMzIsNDI2NjIzLjI2MTgzNzM3MzgsMzk1NTkwLjk2Mjk3NTEyNDU0LDU4NzA4NC4wNTg5Mzc1OCw1ODA2MjUuMzkyMDgwODE0NSwxMzk3NDU5LjY1OTc3ODUwODQsOTA4NTUuMzAyNTI4NDc5ODYsOTkzLjUzOTgyODEzNTE0NzQKKzIyLFR1ZSAxNSBGZWIgMTEsNTAwOTMuNjQ2OTk0NDU3MTk1LDQzMDYxLjgxMTk5ODY2MTcyNCwyNjMxMC45NTMxMzAyNTU4NjQsNTY0NTMuMzA1NDg2MzY3ODksNTExMzkuNTY4ODYwOTY0NzEsODgzODkxLjc1MDQwNjUwMDgsODUyMDk3Ljk4MzM4NzA2NTQsNzcyMTQ1Ljg0NDA4NjU3MzYsNjgxOTM5LjMyMTAyMDg3MjcsODUzOTgxLjIyODQ3MDgzODQsMTcyNzg4LjI4MzA1ODIxNDEsOTk2MTYxLjIzMTM2MjIyNzYsMTQzMzM2LjA4OTAzMzI4MjMzLDUxNDQ0MC4wNzQ3MTA3NTksNDgwMjU5LjczMzU3ODI5OTIsMTE1ODE3MS4zNzQ5MzU1NzY1LDgyMTU5Ni42NTY4Mjg4MjA1LDE3Njc3NC43Mzk4NzQ4MDE5LDYxNTQ0Ny44OTUzNjg3Nzk1LDQ0NDE1OS4yMjEyODk4MzM0LDQ2MDQxNC41NjUxNDI3MDMzNiw2MzYyNDQuMTgyMjIwMTc5NSw2MTQwMzguMTU5Nzg4NTU3NiwxNDU5OTEwLjU0MDQ5ODk3OSw5NDUwOC42ODc1MTUwNzY5NiwxMDY1LjY1MzQ5NDEwNzE4ODIKKzIzLFdlZCAxNiBGZWIgMTEsNTIwOTkuNzk0NTczMzU1NzcsNDUxNjMuNTU5NzAwNTAzMzA1LDI3MzAwLjgwODg3NDY5NzA0LDU4MTAxLjExMzA3NDA5NDU0NSw1Mzg5NC43MjExMzc0MjU2LDkxNzY5MC4yNjMwODAzNjg2LDkwODg4My4zNjM4OTYzNDg5LDgwNTEyMi45Nzg1MjAyODUzLDcwODQ0My4zMjczMjE3ODMsODg2ODU0LjM4MTQyNDYxNDksMTc5NTg0LjA0ODQyMzY2OTEzLDEwMzg1MzYuMTEyOTQzMTQ2NSwxNjEwMTEuMTQ5NDAyODU4OTIsNTM4Mzc4LjgyNTU2MTU1ODUsNDk3Nzc4Ljg4Njk0MDI4MTgsMTE4NzU2Ny44NDc0MjU0NTQsODQ2MzA2LjMyODQxNjA5NywxOTM1NjEuNTU3MTE3ODg2NTIsNjQ2NTI3LjQwMTA1NDI4ODMsNDU4MzQ4LjQ4MDEzODc0Nyw1MTU4MjAuMjU0NjY4NjY2NjMsNjc2ODEwLjk3MDgwNDQ4NDEsNjQxMjc3Ljk5MTc0NTc5NTEsMTUxMDUyNC4yNDA3NTI2MjQ2LDk3NDYzLjk2ODcwODIyODkyLDExMjQuODczMzIxNjY4ODcyCisyNCxUaHUgMTcgRmViIDExLDUzNzIyLjMyMTA2NDg2NDksNDY4NzEuNjk1MTQ4NTE5NjMsMjgxMDAuNTE3NDQyNjU5OCw1OTQyOC4xODQyOTQ0OTA4OCw1NjEzNy4wNjA2NDUxNTI0NCw5NDUwMDUuMjU1NzI3Mjg3Niw5NTUzNzYuMjE3MjIyMjA5OCw4MzE4MjQuMjgzNzM0NzM0NSw3Mjk4NjcuODkzODkxMDYyNSw5MTM0MjIuNjAzMjkyOTIzMSwxODUwNzguNDc0OTUwNTc2MiwxMDcyODQzLjY3MTAwNjI3ODYsMTc1ODU5LjEzNjUzMTE1MDE0LDU1Nzc5NS43ODEzNDU4MDA3LDUxMTkyNS4xMjcyMDg1MjExLDEyMTEyMDcuOTc0MDM5OTEzNCw4NjYyMDcuNjIxNTIzNTgsMjA3NDg2Ljc3MzUzNjkyMTU0LDY3MTc4My42MTY1OTEyODUzLDQ2OTc4NC45OTE4MDc4NjI2LDU2MjMwNC42MDA4ODQ3NzA3LDcwOTk3OC40NTc0ODMxOTksNjYzMzUwLjU4MTQ0ODg3NTgsMTU1MTM2NC4wMzYyMzk0MDksOTk4NDUuNDk0NDQ1Nzc5MjMsMTE3My4xMTgwMjUxMzc4Mjk2CisyNSxGcmkgMTggRmViIDExLDU1MDI5LjY2ODE5MjU0MTA4LDQ4MjUyLjg3NzcxNjA3NDU3NCwyODc0NC40MTQ4MjE3MTU2NTgsNjA0OTQuNzUzNDc0NjU2Niw1Nzk1MS44MDU5MjY4OTk1LDk2NzAwMy4zNzg5NDIyMzc5LDk5MzE2OC4yNjI3MjUyNjQ0LDg1MzM1NS4xMDE3OTA5MjQ5LDc0NzEyNC41Mzc5OTE0OTczLDkzNDgxOS41Nzk3MjcxMDk0LDE4OTUwNC41ODIzNjcwNTExLDExMDA1MDYuMTI5ODQ0MjMwNiwxODgxNjAuNDU3NDIwNzY4MTYsNTczNDcxLjk0NjA3MTExMzksNTIzMzExLjEwMzA4NjE1OSwxMjMwMTkzLjA3NTExMjI4MTQsODgyMjAwLjk1NzYzNjQ4MDMsMjE4OTE2LjU0OTE4NzQzMzMsNjkyMjAxLjM5MjA5NTMxMzMsNDc4OTc5LjYyOTQ4MDQwNzUsNjAwNzc5Ljk5OTY4MDI0NTUsNzM2OTEwLjk4OTMyNTIxMDUsNjgxMTU4LjM3MjY1MTE3NzksMTU4NDIyMC4yODgzNzAzOTUsMTAxNzYwLjAzMTgzMTU5NzU3LDEyMTIuMTkxNDk1Nzc3MDIzOQorMjYsU2F0IDE5IEZlYiAxMSw1NjA4MC41NTQ1NTYwMDc3NCw0OTM2NS43ODc5MTk1MDQxLDI5MjYxLjc4NjgwMDYzNjQyMiw2MTM1MS4yMzcwOTg3Njg1NSw1OTQxNC42NzA0NjUxNzM0OCw5ODQ2ODEuMzk1NDk2Njc3OCwxMDIzNzI2LjI1OTAyNTA4MzksODcwNjY5LjY5ODA5Njc4NTgsNzYwOTkzLjA2MzI1MjEwNDgsOTUyMDE0LjI0MjI4NjQ0MDcsMTkzMDYxLjkzMTExOTUzMDkzLDExMjI3NTAuNzU1NDcyMzkzNSwxOTgyNDcuODQ3MzA3NTk2Nyw1ODYwODguMDYxODY4NTQyNiw1MzI0NTcuODY2NTI1MjE2NywxMjQ1NDM2LjY1MzI2MTU4ODcsODk1MDQwLjk1MzU1MjAyODYsMjI4MjI0LjU0NDM1NTQzMTc1LDcwODY0OC4xMTk5Nzg3NDI0LDQ4NjM2Mi4zOTc3NTA1MzEwMyw2MzIzMDguNzg0MjIwNDI2OSw3NTg2NzEuOTY1MjUwMDgxNyw2OTU0ODMuNjg1NTQxNjAwOCwxNjEwNjA5LjQ4NjM2NjE0NSwxMDMyOTcuMzMzMjE2MDYwODYsMTI0My43MDUzMTIzMzczNDU3CisyNyxTdW4gMjAgRmViIDExLDU2OTI0LjMxMjkzMTY4MDczLDUwMjYwLjYzNTQyNjg5ODU3NCwyOTY3Ny4xMzMwMzE4OTMwODUsNjIwMzkuMjI0MjY0MDI2MDEsNjA1OTAuODQ5NTczMjE0NDE1LDk5ODg3NC4yMTM3OTcyNDI1LDEwNDgzNDQuMDk4MzE1NDc4OSw4ODQ1NzMuNDMwODgxMjE2NSw3NzIxMjcuMjc0MDQ5MjE0Miw5NjU4MTguMzkxNTEyNTg3NiwxOTU5MTcuOTY2NjE5NDY1LDExNDA2MTIuOTYxMzk1MzIyOCwyMDY0NTYuOTE4MzcwNzg2Nyw1OTYyMjIuNTcwMDUyODAwMiw1Mzk4MDAuNDAzMTI2MDkzLDEyNTc2ODcuMDczNTU1NDA2Niw5MDUzNTAuNzAyOTY3NjgxNywyMzU3NjAuOTA3Mjc3Mjg5MSw3MjE4NjYuMjIwNDIxMjQzOCw0OTIyODkuNTE0MDk3NjQ3Nyw2NTc5NTMuNTM2MTI2NDQ5NSw3NzYxOTQuMDUyMzQ4NjMzLDcwNjk4OC43MTM3NzQ4NjksMTYzMTc5My44MTg2OTQ3MDI2LDEwNDUzMS42Nzg4ODU5ODY3MSwxMjY5LjA1MjQwMDAxNzkwNDYKKzI4LE1vbiAyMSBGZWIgMTEsNTc2MDEuNzU0MjM1ODY1MzMsNTA5NzkuNTIyNjE1NDc0NTgsMzAwMTAuNjU1NjkzMjc0NDIsNjI1OTIuNjQwODU0ODMzMjMsNjE1MzUuMjYyNDYyNTY1MjgsMTAxMDI3MC45NDQ2NTU5MSwxMDY4MTMwLjQ3NjE2NTY5MDUsODk1NzM0Ljc5NzI4NTcwOTksNzgxMDY3LjE5Mzg0MTU4NjcsOTc2OTAyLjE5MzcwODA3NjMsMTk4MjExLjA3NDg1NDUzMTgsMTE1NDk1MS45OTEwOTExMDI0LDIxMzEwMC4xNTExNzY5NjEwNSw2MDQzNTguMDQ0MjE3NDYyMiw1NDU2OTYuODI4MjUxODY1MywxMjY3NTUxLjUxODgyMDA4NTYsOTEzNjM4Ljg3NzE0MDYwOTgsMjQxODM3LjgxNzI5OTE2NzU3LDczMjQ3OC4zNzc3MDk1NTQyLDQ5NzA1Mi41MTU5NzQ4MTE2LDY3ODY5OC45NzcxNzAzNTI0LDc5MDI3My4yMjQwNjQxNzMsNzE2MjI0LjMyNjkwMDc2OTYsMTY0ODgxMC4wMzI3MTMzODQxLDEwNTUyMy44MTY4NDQ5OTQ3MSwxMjg5LjQwOTMwNTgwNTQzNzcKKzI5LFR1ZSAyMiBGZWIgMTEsNTgxNDYuMjQzNDEwNjE0MjIsNTE1NTcuMjI4MTQ5NTc3MjA0LDMwMjc4LjgyOTc3MTEzNjI3Miw2MzAzOC45MTk2NzgwNDk1MDQsNjIyOTMuNDMxNzU4OTQyMDcsMTAxOTQzMy45NzYwMTMyOTcsMTA4NDAxNi4wMjgwOTc0MTY3LDkwNDcwMS43NTY1MDk1MDUxLDc4ODI1My43ODgwNDM5NjkxLDk4NTgxMi42NTgyMTQ4NzEsMjAwMDU0LjMwODY2NTM2MzQ0LDExNjY0NzIuMDIxODY2OTM2MiwyMTg0NTUuMDIwMzQ5NDQ4MzcsNjEwODkxLjU3NjE2MjE5MjQsNTUwNDM4LjgyNjM5MjI5NjIsMTI3NTUxOC44NjYzMDYzNTYsOTIwMzE3LjA1MTI3NTE1MDksMjQ2NzI0LjcyMzc3NTY3NTgsNzQwOTk5LjA0OTc4MjAzMDksNTAwODg3Ljc2MTc1MDE5OTQsNjk1NDE2LjkyMzA5Mzg3MDUsODAxNTc1LjY2NjI1NzM2NSw3MjM2NDIuODI2OTk3OTAxMywxNjYyNTAxLjAzOTY1ODMwNiwxMDYzMjIuOTY4NjI3ODAxNjksMTMwNS43NTMyNDQwNjQ3OTMKKzMwLFdlZCAyMyBGZWIgMTEsNTg1ODQuODA3NTE5MDQ3NCw1MjAyMi4xNTIxNTcyOTU0NDQsMzA0OTQuOTc0Mzg2MjMzMDYsNjM0MDAuMDg4MTEzNjU2NzA0LDYyOTAyLjYzMTYyNjA0MDY3LDEwMjY4MTguMjMxNTY4NDMyMiwxMDk2NzcwLjEwNjA3ODc3NDIsOTExOTE5LjA5NTQ5NzUwODMsNzk0MDQzLjkyMDI2MTA4MDUsOTkyOTkyLjMyMzMyODYwMTIsMjAxNTM5LjE5MjAyOTYyMTEsMTE3NTc0NC41NTk4NTMzNzg3LDIyMjc2MC4zNjM4MzI4OTY0LDYxNjE0Ni40NjgxMjY2NDIsNTU0MjYxLjk3ODcxMjc4NDUsMTI4MTk4MC4zMzIxMzk4NjQ4LDkyNTcxNS44ODYxNDg4Njc0LDI1MDY0OC45OTI3MTYwMTAwMiw3NDc4NDguNDEyOTU3NDg0MSw1MDM5ODUuNDQ0Nzg1Njg1MzQsNzA4ODU2LjI3MDIwNTkwMSw4MTA2NTAuODk1NzE1MzI5MSw3Mjk2MTEuODM5NTg5MDI5MiwxNjczNTQ2LjY0OTU3MDgxMDgsMTA2OTY4LjcyMzA3MzE0MjY1LDEzMTguODg1NjAzNTc0NDA4NgorMzEsVGh1IDI0IEZlYiAxMSw1ODkzOS4xNzk5NTMyNzY4OCw1MjM5Ny4yNzczNzk1OTY1NTUsMzA2NjkuNzgzMDUzMjQ4MDg4LDYzNjkzLjczMzg0MDIxNDcyLDYzMzkzLjA5MjQzNjQ1NjEyLDEwMzI3ODkuMTI0MDI1ODk2OCwxMTA3MDIxLjM2MzY0Njg4NSw5MTc3NDUuMDc0MjEzNDY2NSw3OTg3MjQuMzQxOTA2NDAzNyw5OTg3OTYuNjkwNTg5MDA4MywyMDI3MzkuMjg4NDQ2ODI1NCwxMTgzMjI5Ljg3ODI3MDk5ODEsMjI2MjE3LjMxOTQwNjMwMDMyLDYyMDM4My43NTUxNDI3NTg4LDU1NzM1NS4yNzk4OTc3MDkzLDEyODcyNDcuNDQ3MDg2NTg2Miw5MzAwOTkuNTMyNzcwNjQ1LDI1Mzc5OS4zMjg2MDg4OTcyLDc1MzM2Ni41NjIwOTMyOTgzLDUwNjQ5Ny42OTY2MjE2OTY1LDcxOTY0Ni43NzcxODIwMTE2LDgxNzk0Ny4xNjUzMTE5OTM0LDczNDQyNy43ODQ3NzM1OTMyLDE2ODI0OTEuNjEyOTYzNjY2LDEwNzQ5Mi43MzM5NTE5MzU0NCwxMzI5LjQ1NzExOTUzMjQxCiszMixGcmkgMjUgRmViIDExLDU5MjI2LjczNTE5MzE4MzAyLDUyNzAxLjA2ODczODMzMjUwNiwzMDgxMS43OTM4NDc2NjQxMzIsNjM5MzMuODM2NjIzOTI3MjQsNjM3ODkuMTQ3MTk1OTU1MTgsMTAzNzYzOC41MTg2OTEwNzY0LDExMTUyNzguODI5MzAzMTc3NSw5MjI0NjYuNDgxODUxMDU5MSw4MDI1MjQuMTU3NzYxMzA3OSwxMDAzNTA5LjczNDkyNDc5MDIsMjAzNzEzLjM4NjIyNDE1NjcsMTE4OTI5Ni4zOTQwMDk3MjA1LDIyODk5Mi41NzY2NTc2MzYzOCw2MjM4MTIuNzk5MTM0NjY4Miw1NTk4NjkuNTM3ODEzOTE2MSwxMjkxNTY3LjMyNjY5NTk4NTIsOTMzNjc4LjA1NzkyNTE3MTcsMjU2MzMwLjM5NTMwODEyMjQ4LDc1NzgyNi44MDk2MTU1NjQ4LDUwODU0NS42MjM0MTU1MzM4LDcyODMwOS43NzExNTQxODUzLDgyMzgyNi45NDA0NDk0NjIzLDczODMyOC4xNDc1NjU3ODY3LDE2ODk3NzAuMjExMzcyMDY3NSwxMDc5MjAuMTkxNDcwNDk2OTcsMTMzNy45OTIwODE5NzM3NDI0CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L05vblplcm9Nb3J0YWxpdHlSYXRlX1JLX1JlZmVyZW5jZS9IdW1hblBvcHVsYXRpb25Nb2RlbC9odW1hbi9EZW5zaXR5XzAuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Ob25aZXJvTW9ydGFsaXR5UmF0ZV9SS19SZWZlcmVuY2UvSHVtYW5Qb3B1bGF0aW9uTW9kZWwvaHVtYW4vRGVuc2l0eV8wLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYzI0NDAxCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Ob25aZXJvTW9ydGFsaXR5UmF0ZV9SS19SZWZlcmVuY2UvSHVtYW5Qb3B1bGF0aW9uTW9kZWwvaHVtYW4vRGVuc2l0eV8wLmNzdgpAQCAtMCwwICsxIEBACitpdGVyYXRpb24sdGltZSwKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvTm9uWmVyb01vcnRhbGl0eVJhdGVfUktfUmVmZXJlbmNlL0h1bWFuUG9wdWxhdGlvbk1vZGVsL2h1bWFuL0RlbnNpdHlfMS5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L05vblplcm9Nb3J0YWxpdHlSYXRlX1JLX1JlZmVyZW5jZS9IdW1hblBvcHVsYXRpb25Nb2RlbC9odW1hbi9EZW5zaXR5XzEuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJjMjQ0MDEKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L05vblplcm9Nb3J0YWxpdHlSYXRlX1JLX1JlZmVyZW5jZS9IdW1hblBvcHVsYXRpb25Nb2RlbC9odW1hbi9EZW5zaXR5XzEuY3N2CkBAIC0wLDAgKzEgQEAKK2l0ZXJhdGlvbix0aW1lLApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Ob25aZXJvTW9ydGFsaXR5UmF0ZV9SS19SZWZlcmVuY2UvSHVtYW5Qb3B1bGF0aW9uTW9kZWwvaHVtYW4vRGVuc2l0eV8yLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvTm9uWmVyb01vcnRhbGl0eVJhdGVfUktfUmVmZXJlbmNlL0h1bWFuUG9wdWxhdGlvbk1vZGVsL2h1bWFuL0RlbnNpdHlfMi5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODlhZjUzNwotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvTm9uWmVyb01vcnRhbGl0eVJhdGVfUktfUmVmZXJlbmNlL0h1bWFuUG9wdWxhdGlvbk1vZGVsL2h1bWFuL0RlbnNpdHlfMi5jc3YKQEAgLTAsMCArMSwzMyBAQAoraXRlcmF0aW9uLHRpbWUsRUctRlJHLUcyMTAwMDEsRUctRlJHLUcyMTAwMDIsRUctRlJHLUcyMTAwMDMsRUctRlJHLUcyMTAwMDQsRUctRlJHLUcyMTAwMDUsRUctTE9FLUcyNDAwMDEsRUctTE9FLUcyNDAwMDIsRUctTE9FLUcyNDAwMDMsRUctTE9FLUcyNDAwMDQsRUctTE9FLUcyNDAwMDUsRUctTE9FLUcyNDAwMDYsRUctTE9FLUcyNDAwMDcsRUctTE9FLUcyNDAwMDgsRUctTE9FLUcyNDAwMDksRUctVVBFLUcyOTAwMDEsRUctVVBFLUcyOTAwMDIsRUctVVBFLUcyOTAwMDMsRUctVVBFLUcyOTAwMDQsRUctVVBFLUcyOTAwMDUsRUctVVBFLUcyOTAwMDYsRUctVVBFLUcyOTAwMDcsRUctVVBFLUcyOTAwMDgsRUctVVJHLUczMDAwMDEsRUctVVJHLUczMDAwMDIsRUctVVJHLUczMDAwMDMsRUctVVJHLUczMDAwMDQKKzEsVHVlIDI1IEphbiAxMSwxLjcyMzU2NzAwNjg1NTEzODUsMC41ODU3OTQwNTU1NjU1ODU1LDUuMzYyNjAyNjgxNzIxMTA4LDIuMDE0MzE5MDg0NjcwMzE0NywxMS43MjYyNjU5Mzg4NDMwNCw0MzEuMjAyNDU2MDg2NDAzNzQsMTUxNC43MjQ3Njg0MDYxNywyMzk2LjM5MzIyOTg3MDI2NCwyNzM0LjA2NjIwODk1Mzg4OCw1MzY5Ljc0NTUyOTg1Njg2NSwxODEuMjk3OTEyMjc2Mjc5NCwxMTQ2LjI2OTQ1NDg3ODYxNDYsMTU4OS4zMTQ5MzIwOTgyNDM4LDgzNy4wOTgwOTU2NDQ4ODg2LDQ0Ni43NjY1OTY5NjIwOTE3NCwxNzEuMjc0NzA5MjE3NTc4NSwyMzMuODYyMTQwNTI4NzY2NDIsODEuNTE0NDQ1MzYzOTU0ODgsMTU1My45ODM2OTc1ODM4MDU1LDUxMC40MzQ5ODE1NDMyMzU0LDk3NC44NzEyNjEzMTUxOTY2LDE1ODQuNTEzMjI5MTU5NTA1NywxNTI4LjkzODU0MTkyNTU3MjMsMjY3OC43MzY3MTA5NTgwMjYsNjEuNDUwMTAzNTc0ODkxNzQsMTcuMzU0NjcyMjk4MzM3NjY1CisyLFdlZCAyNiBKYW4gMTEsMS43MjM1NzM5MDExMjA4MzEsMC41ODU3OTYzOTg3NDU4MSw1LjM2MjYyNDEzMjE2NjYyNywyLjAxNDMyNzEzOTQwMjMwNCwxMS43MjYzMTI4NDQwMDAyODUsNDMxLjIwNDE4MDg4NjMxMzU3LDE1MTQuNzMwODI3MzE3MzU1OCwyMzk2LjQwMjgxNTQ2MTY2MDMsMjczNC4wNzcxNDUxOTMwOTQsNTM2OS43NjcwMDg4MjY2LDE4MS4yOTg2Mzc0NjkxODA2MiwxMTQ2LjI3NDAzOTk2NTM3OCwxNTg5LjMyMTI4OTM3MDY4Nyw4MzcuMTAxNDQ0MDQzODM3Nyw0NDYuNzY4Mzg0MDMxMjQ3LDE3MS4yNzUzOTIyNjkwNTAwNiwyMzMuODYzMDc1OTU1OTk5NTMsODEuNTE0NzcxNDIyMzg4NDgsMTU1My45ODk5MTM1MzA5MTQ1LDUxMC40MzcwMjMyNTA1ODEyNiw5NzQuODc1MTYwODA4MDQwNCwxNTg0LjUxOTU2NzIyNTA5NzMsMTUyOC45NDQ2NTc2OTE1OTE4LDI2NzguNzQ3NDI1ODM1OTk0NCw2MS40NTAzNDkzNTc4NjU3NzUsMTcuMzU0NzQxNzE3MTY1NjI3CiszLFRodSAyNyBKYW4gMTEsMS43MjM1ODA3OTUxNjYwNDMzLDAuNTg1Nzk4NzQxOTA1ODg0NCw1LjM2MjY0NTU4MjMwNTE1NzUsMi4wMTQzMzUxNjU3ODM1MjEsMTEuNzI2MzU5NzQ5MzI3MjMyLDQzMS4yMDU5MDU1MDQ4Mjc5LDE1MTQuNzM2ODg2MjUyMzkzOCwyMzk2LjQxMjQwMTA1NTc0NTIsMjczNC4wODgwODA3ODg1NjMzLDUzNjkuNzg4NDg3MDA4ODU5LDE4MS4yOTkzNjI2NTU0OTM0LDExNDYuMjc4NjI1MDU4Mjg2NywxNTg5LjMyNzY0NjY2ODU1OSw4MzcuMTA0NzkyNDQ5NDY5OSw0NDYuNzcwMTcxMDgxNDQzMTUsMTcxLjI3NjA2Nzc0ODQyNTAyLDIzMy44NjQwMTEwMzk5Njc5LDgxLjUxNTA5NzQ4MjEyNTQxLDE1NTMuOTk2MTI5NDk2ODkxMiw1MTAuNDM5MDY0NDI2MzA4NDUsOTc0Ljg3OTA2MDMxNjQ4MDgsMTU4NC41MjU5MDUzMTU5NjQsMTUyOC45NTA3NzM0NjI4MDk4LDI2NzguNzU4MTM5NDAzNzM4LDYxLjQ1MDU5NDkxNDM1MDk5NCwxNy4zNTQ4MTExMzYyNTg0NworNCxGcmkgMjggSmFuIDExLDEuNzIzNTg3Njg2OTYwNDUxNiwwLjU4NTgwMTA4NDY5MzU1MjMsNS4zNjI2NjcwMjY3MTYyNzU1LDIuMDE0MzQzMDExNDcwOTQ5NywxMS43MjY0MDY2NTQ1MjkyODMsNDMxLjIwNzYyODU2NjIyMTIsMTUxNC43NDI5NDUyMDQ4NDc1LDIzOTYuNDIxOTg2MTE3NjQ4LDI3MzQuMDk5MDEwNTA5NTk2Niw1MzY5LjgwOTk1NzA0MjAzNywxODEuMzAwMDg3NzA2MTM3MjIsMTE0Ni4yODMyMDk5NjI4NTQyLDE1ODkuMzM0MDAzOTkxODQ1Nyw4MzcuMTA4MTQwNzYxMDQ4Myw0NDYuNzcxOTU3NzYxMTMwMywxNzEuMjc2NzAxNTQ5NjQwNiwyMzMuODY0OTQzMDM4MjA0NTMsODEuNTE1NDIzNTQzMTQyNDYsMTU1NC4wMDIzNDUzODg1MDQ5LDUxMC40NDExMDA4ODkwMzE2NSw5NzQuODgyOTU5ODQwNDc1MSwxNTg0LjUzMjI0MzQyOTY0ODYsMTUyOC45NTY4ODg5NTQ2OTQ3LDI2NzguNzY4ODQwOTQzNTk0LDYxLjQ1MDgzODc5MTkxMDIyLDE3LjM1NDg4MDU1NTI3MDcKKzUsU2F0IDI5IEphbiAxMSwxLjcyMzU5NDU2MDM4MjUwNjIsMC41ODU4MDM0MjM5ODI2NTk4LDUuMzYyNjg4NDExNDA5OTMsMi4wMTQzNDk4MDUzNzc4NDE1LDExLjcyNjQ1MzU1NjEzOTUyMyw0MzEuMjA5MzQwMTYzMDg2OCwxNTE0Ljc0OTAwNDA5Njg0MTYsMjM5Ni40MzE1NjQ4NjE0NzA2LDI3MzQuMTA5ODk1MTEyNjE5Niw1MzY5LjgzMTM1OTEzNzc5NywxODEuMzAwODExMzQ4NDc0MzMsMTE0Ni4yODc3OTI0NTI5NzIzLDE1ODkuMzQwMzYxMzQwMjk2Niw4MzcuMTExNDg3ODg4OTg5Niw0NDYuNzczNzQwMzY5MjExMzQsMTcxLjI3NzExMjA3ODg2NTg4LDIzMy44NjU4NTA4MTA5MDc1NSw4MS41MTU3NDk2MDUwOTk3MywxNTU0LjAwODU2MDE2MDk5MjEsNTEwLjQ0MzEwMDk0MzU2NDg0LDk3NC44ODY4NTkzNzkzODgzLDE1ODQuNTM4NTgxNTIzODg0NywxNTI4Ljk2MzAwMTEzMzY1NjIsMjY3OC43Nzk0NDc2NjkwMTQsNjEuNDUxMDcxNTkxNjQ0NjIsMTcuMzU0OTQ5OTY5MjE0OTY3Cis2LFN1biAzMCBKYW4gMTEsMS43MjM2MDEyOTUwNDc4MzgzLDAuNTg1ODA1NzM1MTc1OTkwMiw1LjM2MjcwOTI3MzkzNzkyLDIuMDE0MzUwNzE0MTUzMjQxLDExLjcyNjUwMDQxOTUxNDQ1Myw0MzEuMjEwOTcyOTM1OTkyNDYsMTUxNC43NTUwNjIxMjc2NzE0LDIzOTYuNDQxMDgzNzAzMTc5LDI3MzQuMTIwNDU1Njc0MjM3Nyw1MzY5Ljg1MjIzNzkyODM5MiwxODEuMzAxNTIyNzM3OTkzMTQsMTE0Ni4yOTIzNTA4NTA3ODU2LDE1ODkuMzQ2NzE4NzEwNDQ3NSw4MzcuMTE0ODIzNzUxNDg4OSw0NDYuNzc1NDg0OTQ1NjU1NywxNzEuMjc2MzI1NTkwOTc3OTYsMjMzLjg2NjU4MDkzMjM0OTQ4LDgxLjUxNjA3NTY2NDE4NjE1LDE1NTQuMDE0NzYzODExMDkzNCw1MTAuNDQ0ODM4MTA4MDkwNDQsOTc0Ljg5MDc1ODkyNTk5MTksMTU4NC41NDQ5MTkwNTA2ODYsMTUyOC45NjkwODIyNzc4MzE2LDI2NzguNzg5MzU3MzYyMDAyNiw2MS40NTEyMzUzMTQzNDkyNSwxNy4zNTUwMTkzMjM3NDg5MworNyxNb24gMzEgSmFuIDExLDEuNzIzNjA3MDI1ODUwODM3OCwwLjU4NTgwNzgzNjg0OTk0ODMsNS4zNjI3MjU5ODA4Mzg4NSwyLjAxNDMxOTMyNDc4MjMxNTIsMTEuNzI2NTQ2OTMwNjIyODc3LDQzMS4yMTIwODQ2NDg2NjcsMTUxNC43NjExMTE4MjY3ODE2LDIzOTYuNDUwMDg5MzY1NTUyMiwyNzM0LjEyODc3MjA1MjE3OSw1MzY5Ljg2OTI2MzIyNTUwMiwxODEuMzAyMTM2NzAyNTc4OTMsMTE0Ni4yOTY2OTMzOTQzMDYyLDE1ODkuMzUzMDc2MDYxNTUwMiw4MzcuMTE4MDYzMTkyOTYwMyw0NDYuNzc2OTA0ODk1MzQyNCwxNzEuMjY5MTIzMDU4NDc4ODcsMjMzLjg2NjA2MTMxNTUzNTUsODEuNTE2NDAxNjgzMzQxNTEsMTU1NC4wMjA4NjkwMzUxMDQyLDUxMC40NDQ3NTIxOTA5MTg3LDk3NC44OTQ2NTg0MDg1MzM2LDE1ODQuNTUxMjQ5OTU5NzQ0NiwxNTI4Ljk3NDkwMDgyMjgwMDIsMjY3OC43OTQzNTAwMDY0NzQsNjEuNDUwOTgxNDc2NDYxMDEsMTcuMzU1MDg4MTEwODYzMjg1Cis4LFR1ZSAxIEZlYiAxMSwxLjcyMzYwNTY5ODY0NzkxNzEsMC41ODU4MDg0NDM4OTc2NTQ5LDUuMzYyNzExNTM1MDYwODIxLDIuMDE0MTEzMTY5MTM0MDI0LDExLjcyNjU5MDQyMTkwODQ2NCw0MzEuMjA5ODM5MDgyMDI1ODQsMTUxNC43NjcwODc4ODM2NDU0LDIzOTYuNDU0OTY4NDQ2NjYzLDI3MzQuMTIxODk3MzA0MDQyLDUzNjkuODU4NzYyMzgwNjcyLDE4MS4zMDIwMTc3NDI4Mzg3LDExNDYuMjk5MjI5MDg4OTc0LDE1ODkuMzU5NDMyOTYyODk1NCw4MzcuMTIwNTI4Njk3NzYxMSw0NDYuNzc1NzE1MjA1OTI1MiwxNzEuMjI3ODU1NDQyNDM3NCwyMzMuODU3MDEwMjA5MzYwNCw4MS41MTY3MjczMzI2MDAyNywxNTU0LjAyNjE1OTI3NDMzMzQsNTEwLjQzMjM3MzU4MjA1MTMsOTc0Ljg5ODU1NzE3MjMzODksMTU4NC41NTc1MTQwMzgwMDE1LDE1MjguOTc4NjMzMTA4NDM5NSwyNjc4Ljc2NTYyMDI1NTAwNCw2MS40NDgyNTM0ODExMDk4MywxNy4zNTUxNTIwMTAzNjgyOTcKKzksV2VkIDIgRmViIDExLDEuNzIzNTU1ODc0MDQwNTYyNSwwLjU4NTc5ODczODAxMTUzMzYsNS4zNjI0NzM1ODY1MzE5MDEsMi4wMTI5OTM4Mjk5NzgyOTIsMTEuNzI2NjA5MjcwNTA1NTQ3LDQzMS4xODY0MjE4NjQxMTEzNywxNTE0Ljc3MjQ0NTQ1ODI5MDMsMjM5Ni40MjgxMTk3MzMzNiwyNzM0LjAxNDA1NjcyMzIyNTYsNTM2OS42NTY0NDQ0NDMyOTEsMTgxLjI5NjU5NTUzMTQ0NTgsMTE0Ni4yODczNjE0OTg4NDgyLDE1ODkuMzY1Nzg1MTkwMjE0Miw4MzcuMTE3MDU0OTAzNjY5Nyw0NDYuNzU0NDkyMzY0NTc3MjMsMTcxLjAxNTg0MTYyNjUwMTA3LDIzMy43OTE4MDI5ODA0MDU4Niw4MS41MTcwNDk4NDQ3OTUzMiwxNTU0LjAyNTAxMTgzODc3NDYsNTEwLjMzOTU0MzI4ODkxMzksOTc0LjkwMjQ0OTU3MTcwOTcsMTU4NC41NjMxNTQwNjM0NDQyLDE1MjguOTY2NTExNzMzNjE4NywyNjc4LjUxMTUxNzc5ODE5NTcsNjEuNDMxMjQ1ODY0NDgxNTMsMTcuMzU1MTc2NTM0NzI3MDkzCisxMCxUaHUgMyBGZWIgMTEsMS43MjMxODM0NDU0Nzc4MTM0LDAuNTg1NzIxMzY3OTU4MTM1Myw1LjM2MDcxMjg2MjM2MDc5MiwyLjAwNzc1ODgwNjMzNzY5NCwxMS43MjY0MzQ4MzAwNDg2MDUsNDMxLjAzNDUyNzAwNDEwMTcsMTUxNC43NzI4MDM4MjQ1NDQsMjM5Ni4xNjY5MTM1MzA0ODcsMjczMy4yNTU4Nzg4ODY2OTUsNTM2OC4xNjUwODE5NDQyMSwxODEuMjU0NDA1NDA2MDUwNDcsMTE0Ni4xNjU1OTYwMzYzODY0LDE1ODkuMzcyMDkzNTcxMDAzMiw4MzcuMDY5NjczNjY2Njc5OCw0NDYuNTg4MTMwODYwMDU1OSwxNzAuMTM4MTIzMzAzOTcxNTUsMjMzLjM5Njc0NjM2Mzk2MTYzLDgxLjUxNzM0NzAzODUwNDkxLDE1NTMuOTc1MTMwMjMxMzE3NSw1MDkuNzYxMjY4OTMxOTgyODQsOTc0LjkwNjI4ODkxMzkwNDUsMTU4NC41NjMyODk2NjM0OTgsMTUyOC44Mzg0NzY3NzcxMzgzLDI2NzYuODMwNzE1MzUzMTIxLDYxLjMzOTEyODAzNDc3NDk3LDE3LjM1NDg5OTI2NzI1NjE3NgorMTEsRnJpIDQgRmViIDExLDEuNzIwODcwNDY2MjYyODg2LDAuNTg1MjY0Mzg4NTQ3NDg2Niw1LjM1MDAwMTg2Mjc3NDI4NjUsMS45OTA3MzI0MTA1MDUxOTM2LDExLjcyNDgxMjE3MjcwNjEyMyw0MzAuMTk3NTc1MzQ1ODYwMzQsMTUxNC43MzQxODI2MTk4NzY3LDIzOTQuMzAwNzg0NzI5ODQsMjcyOC43NDg4MTg5Mjk1MTU0LDUzNTguOTkwOTE2NTcyNDc3NSwxODAuOTg1NDYwMzQxNTc0MjUsMTE0NS4yNzAyMzEzNjk4NzA4LDE1ODkuMzc4MDEwMDg0MzY5Miw4MzYuNzE1MTI3OTgyMzE5OSw0NDUuNTQxNTMwMjQyNjg0MzYsMTY3LjkxMjI0MTQ2MTQxNDM3LDIzMS43MzU3Njg1MjgyODA3LDgxLjUxNzQ0ODU3NDk2MDQsMTU1My41ODA0NzQ5MDMyNzg5LDUwNy4wNTE3NzEwNzkwMzA5LDk3NC45MDk3MDM0MTc1OTEyLDE1ODQuNTE3MTYzMDA0Mzg1NiwxNTI3LjkxNjU2NjQxNDcxNiwyNjY3LjgyNzk2NzI5MTc2OTMsNjAuOTY0OTI4Njc0MjA5OTg2LDE3LjM1MjQyOTM2Mzg3NDUyOAorMTIsU2F0IDUgRmViIDExLDEuNzEwNDc4NDE1NTE2OTM5NywwLjU4MzM2OTEwNzM3MDYwMzUsNS4zMDcyMzA5NzE2ODk1MTcsMS45NTgwNzk5NTExMDUwODc1LDExLjcxMzQ0NTgxODkyMTUzNSw0MjYuOTYzNDI2NzM3Mzc4NywxNTE0LjQwOTE5NDg4Mjg2ODIsMjM4NC4xNzA3OTgzMjQ5MDg0LDI3MDkuODIwNjk1OTY3NzczLDUzMjAuMjkwNDQ2MzE3MDA5LDE3OS43OTY1MTUyNzU0NjgxOCwxMTQwLjM0MDY0ODA0MzAzMDgsMTU4OS4zODA1NTE0ODM5ODkyLDgzNC41NzQ4NDI2NzQwOTc2LDQ0MS41MTgyMTYzMTMwNzEsMTY0LjU3MTE3NDg0NDQ4NjUzLDIyOC4wODA1MTA1NDk2Mjg4OCw4MS41MTYxMjA3NTc1OTE4MiwxNTUxLjExNTIxNjM5NzU4NSw1MDAuMDczMTI3ODc3NjAyLDk3NC45MDk4NzA1MjQ3MjYsMTU4NC4xMDY0MjIyNDM3NTY3LDE1MjIuNjkyNTU3NzU2NzksMjYzOC44NzAwMDg4NDU2MDI2LDYwLjA4NzIwMjYxODkwMTQxLDE3LjMzNTk2OTc2Nzg4OTI0CisxMyxTdW4gNiBGZWIgMTEsMS42ODU0NTY5MDI1OTEyNjY3LDAuNTc4MjgzNzQwMzQzMDY2LDUuMjE5MjE5MDM4MjM4MTI2LDEuOTE2MTAxODkzMTQ5MzExNSwxMS42NTU3ODE3Mzk0MTYxOCw0MjAuMTI2MDUxNDA5MjU3NDYsMTUxMi4yNzgxMjM3MjE1NTQ3LDIzNTQuNDE5MDY4OTcyODQ1MywyNjY3LjYwNzE1NzQwNzc4ODcsNTIzNS42ODQ5ODY2MzQ0NSwxNzcuMDU4Mzc3MDA0Mzk3NTMsMTEyNS45Mzc3MjMyODc5Nzc2LDE1ODkuMzU1MzI0MDgyMTQyLDgyNi43MDI3NTkwMDQ2NDA5LDQzMy43ODk2NjA4NTgzMTQwNSwxNjAuODIwMTE0NjM2MDUwMDUsMjIzLjIwOTEyNjc2NTE0ODUsODEuNTA1MDc1NDk2ODQzMDYsMTU0MC41ODczNTgzODIyMTQ1LDQ4OS44NzUzMjY2MzY5NDU5LDk3NC44ODY1MzM2NTQ0NTQyLDE1ODEuMjg2Mjc1NTc1ODU0MiwxNTA1Ljc1NzMxNTU4MDc1LDI1ODkuNDc2MzQyMjUwNDI3LDU4Ljg0NzI4OTUxOTkwODU5LDE3LjI1NzkwMTc3NTMzNjIwOAorMTQsTW9uIDcgRmViIDExLDEuNjUwMzU5ODM0MDU1MzQ1NiwwLjU2OTE0MTMyNTU4ODcwMjgsNS4xMDU5MjE2MDE5NzkwMzMsMS44NzE5ODI2MDE4MjEwMjk3LDExLjQ5OTkwODA4MjE0OTA4NSw0MTEuMTIzMDI4OTQ0MzY4NywxNTAyLjY2NDcwNjY0Mzk5OSwyMzA3LjkyNTI5MTUzNDg0NjYsMjYxMC44NzM1OTQwMjE3MzksNTEyMy41MjI0MjE3MDEyMiwxNzMuMzE5OTQyNTA4NzAzMzgsMTEwMy41OTgxNTEwMDQ3OTksMTU4OS4xMTg0MDI3MTY4MTk0LDgxMi4wMDI1MjA5ODc4OTAyLDQyNC4yMDM5Mjc1MjcyOTExLDE1Ny4xMjYyMDkyMjIxMDE0NCwyMTguMDMyNzg1MDA4NzI0ODYsODEuNDMzNzEyNDgzNTI0MTMsMTUxNi44MzM2MjUyNDQ0NjYyLDQ3OC42MDk2NTcyODU3MDM3LDk3NC43MDIyOTM3MTk2ODQ2LDE1NjkuMTYxODk3NzQ5OTU2LDE0NzcuMjUwMjg0MzEzMDg2LDI1MzEuMTg4NDU1MTY0MzEzNCw1Ny40OTM5NTk0MDk0ODg3NDUsMTcuMDQ1ODU0ODExMTM3OTgyCisxNSxUdWUgOCBGZWIgMTEsMS42MTIyNDY5Mjg0NDY3NzkzLDAuNTU3MjY1MDE1MDEyMTcxLDQuOTg3Mjk0MjM3ODcxMTQzLDEuODI5OTQ3NzA1MTgwNTYyMiwxMS4yNjc0MTU5MDM0ODkwNjEsNDAxLjU5OTY2NzU0Nzc4MDIsMTQ4MC4wNjIxOTMxODIxMTgsMjI1NS4xNzc5ODI3MjcwMjU3LDI1NTAuMzczNDIxODk2OTExNiw1MDA0LjYyMzc2MDQyOTMwNCwxNjkuMzA2NjIxMTE2MTI0MjYsMTA3OC4zNDAxNzkwNzIxODU1LDE1ODcuNDkyOTk3NTcyMTYyLDc5My45ODAxMDQyNTE0OTIyLDQxNC4zMjk4NzAyNTk2ODkxLDE1My43MzA4MTQ2NDEwOTAxOCwyMTMuMDczNzA2ODQyMzcyMyw4MS4wNzUxOTkyNjUxMTUxNSwxNDg0LjY4NjEwNTY1NjU1NzYsNDY3LjYwNDUyNDM4MzY5MzIsOTczLjUyOTc3OTQyMjM4MDMsMTU0My40NDIwNjkzNzcwODgsMTQ0My44NjU0ODYxNTY3NTk1LDI0NzIuNDUyODY2NDc2NTU0LDU2LjE3OTY3Mzc3MDk2MTQ4NiwxNi43MTQyNTAyMzgwNTA0OTMKKzE2LFdlZCA5IEZlYiAxMSwxLjU3NTMyOTQzMTExMDQxMzgsMC41NDQ2MTU0ODAxMzY2MTksNC44NzQ1MTM5Njk0NzM4NDYsMS43OTIwNTcwMjIxMTIyMDI3LDExLjAwODU2OTg2ODQ1NzM5LDM5Mi40OTcyNDUzMTAyMjAxNCwxNDQ4LjkyNTYyMDgzMzYzMywyMjAyLjk4OTcwODE0ODA3NCwyNDkyLjMwNjczNjE1MjkxMTUsNDg5MC44NTY4MDk3NTM0NjEsMTY1LjQ0MTYwNDg3MTI5MDY1LDEwNTMuMzkwNDI4NjQ5MTM4NiwxNTc5LjQ3NTgzODA3OTAwMSw3NzUuNTA4NDkyNzk2NTkwNCw0MDUuMDIzNzA1Njc1NzY0OSwxNTAuNzM3OTY5NTc2NzM0ODMsMjA4LjU4ODY2MjQyNDA2ODI1LDgwLjA1NTUwNjEyMTA4NjksMTQ1MC4yOTg3MzMyNTk2NDE1LDQ1Ny41MzU4NTQ2MTIwMzI1LDk2OC4wNTgwNTM2NDI3MDk0LDE1MTAuMDIxNzAzNzU2MTY4NiwxNDEwLjM0MzI3NDYwNDkwNjEsMjQxNy43NTY2ODMzOTI5MDIsNTQuOTgxMzU1MjI4NDc2ODE1LDE2LjMzNTA1MjExMTYyNzA2CisxNyxUaHUgMTAgRmViIDExLDEuNTQxNzIwOTA3OTIwMzYyNiwwLjUzMjQ3MDQ5Mjg5MzA5Myw0Ljc3Mjk4NjM5MTY1Mjg4NywxLjc1OTA4MTQzMjg5NDg5NzIsMTAuNzU0NzU2MzU0MzE1NjAxLDM4NC4yNzY0NDYxMjUyNDY5LDE0MTUuMzg0MTg4MzkxNjEyLDIxNTQuODg5Njg3NzQ5NjM1NCwyNDM5LjczMzAxMDYzMDM3ODQsNDc4OC4wNDE2MTExMDg5MzEsMTYxLjkzNTA4NTIwMTYzMjUyLDEwMzAuNDE2NTIzODEwNjE5MywxNTU4LjE0ODA1NzA0MTQyNDYsNzU4LjE0NjMxNDEyMDc5MjMsMzk2LjY5MDU3NTMzMDU1NjEsMTQ4LjE3MjQ1MTA0MzQ5MjE1LDIwNC42NzY4NTgyODY3NzYwNSw3OC40NzI4Mzc5OTE4MDEzOCwxNDE3LjI0MjUzNzE5MTIwNzUsNDQ4LjY4NzYyMTQ5OTIwMDUsOTU0LjMxNzkyOTc5NTA1MjQsMTQ3NC45MDE5ODQ0Nzc4ODM0LDEzNzkuMTg4MTM0NjA0MTk5NCwyMzY5LjE0NDgyNDMwMjgxMyw1My45MzA2MzI4MDA5NzAxNDUsMTUuOTU4MzQ2NzgzNjgyMzYyCisxOCxGcmkgMTEgRmViIDExLDEuNTEyMjgxNDExOTY2MTUwNSwwLjUyMTQ3MTUzOTg0NTcwNTgsNC42ODQ3MDY3NDIzMDc5MjIsMS43MzEwNjI5NjU3NDk2NTgzLDEwLjUyMjAzMTk0ODEzMzcxNCwzNzcuMTEyOTgwMzcyMTE2MSwxMzgzLjAyNjA5MTU0NDQzMzcsMjExMi40MTkzNzQ5NDE3Njc3LDIzOTMuODQ1Njg4ODM3NDQ3Niw0Njk4LjQxMTYzNDc1MzE5OSwxNTguODcwNDM3MjgwNDMzNSwxMDEwLjE0MzU5NzUzODYzMzIsMTUyNi41NTE5NTU2NzM2OTM4LDc0Mi42MjU0OTY5NTc2ODQzLDM4OS40NzA1MjAxNTI0MzQ2MywxNDYuMDE1ODgwMTY2NDk5NTYsMjAxLjM0ODA0NzcwNjg0Miw3Ni42ODA0NDM2ODUxNDE1OCwxMzg3LjI4NTE0NzAzMzg4Nyw0NDEuMTE4NTQxMjQxNjEyMjYsOTM0LjYzNTI4MTQ2NTMzOTIsMTQ0MS40NTAwNjk4MDUyNDE2LDEzNTEuNTMzMTUzMjI0OTgxMywyMzI3LjIzODIwMTUwOTU5MDUsNTMuMDMzMTkxODU3MTg5MTksMTUuNjEwMzQ0NDQ3MTE0ODEKKzE5LFNhdCAxMiBGZWIgMTEsMS40ODcxNTQxMzk0Mjk1NzUsMC41MTE4Njk1NjkxMTczOTk5LDQuNjA5NzQ1MjY0NjU4ODg5LDEuNzA3NjYwNDMxNDEwMjM5NywxMC4zMTcyMjcxNjY5NDA0OTIsMzcxLjAyMTA0MzQ2ODcwMDk1LDEzNTMuNjM4OTgxNDkxMDAyLDIwNzUuOTcwMzgwMTUzODMwMywyMzU0Ljc3NzQ1NzE5MjY3ODQsNDYyMi4xNjU5NzU5OTM1MzMsMTU2LjI1ODc4MDA4Mzk4NDAyLDk5Mi43NTIwMTU1OTMwMzc0LDE0OTEuNDY3MjQ0MjQzNzksNzI5LjE5MjkyMzc1MDQ5MDUsMzgzLjM1NTA0ODYzMjEzNDQ3LDE0NC4yMjg3MTgyNTc4MDA1MiwxOTguNTY0NjE0NzU4NjIzODYsNzQuOTA4NDY0NzE2MjAzMDgsMTM2MS4xMjE1NjIzNjkwMzY0LDQzNC43NjU1NDIwMDM5MTEzLDkxMy4wODIyMDUzNTAzOTU0LDE0MTEuMzAxMjE0Nzc4NjE4NywxMzI3LjcxMjkzOTA4NDY5MzUsMjI5MS44Njk1MDY4ODIyOTIsNTIuMjgwNzY5OTkwMjY4NDEsMTUuMzAyNjE1Nzc4NTAyMjE3CisyMCxTdW4gMTMgRmViIDExLDEuNDY2MDk3OTEyMzMzMDM5NSwwLjUwMzY5MzE0NDc4ODQ0MTQsNC41NDcxNjMwNzk1OTg5ODEsMS42ODgzNTc3OTU2NzM5MzEsMTAuMTQxODU5NTI3MDE2NTU1LDM2NS45Mjk1NTIzMDU1MzE4LDEzMjcuOTM3NjY2NjQ2NTgxMiwyMDQ1LjMwNTg5OTEyMDI4LDIzMjIuMDk4MDM4MTY5NzM2NCw0NTU4LjQyODExMTA4OTA0OSwxNTQuMDcyNzMyMjAzNTE3LDk3OC4xMjQ3OTU0OTM1OTg5LDE0NTcuMTA4NTYwNjMwNjU3Niw3MTcuODI0Mzk3MzQ1ODcxLDM3OC4yNTg4MjU4OTQ2NTkyLDE0Mi43NjMyOTExNzQ4NjE2MiwxOTYuMjY2OTk3NTU4Njk1MzgsNzMuMjc2MDQyNjI5Mzg3NTYsMTMzOC44MzYzNzg1MzM4NzM4LDQyOS41MDY2NjAzNTQ0ODcxLDg5Mi4xMTg3NTAxMjgxNzU5LDEzODUuMDY2NDAxODY3NDYzNiwxMzA3LjYyMTExODg3NDUzNTMsMjI2Mi40NzI2MTE5NzI1ODk3LDUxLjY1ODQzNjM4NzMxMDk1LDE1LjAzODI0NTcxMDQ5OTM4OQorMjEsTW9uIDE0IEZlYiAxMSwxLjQ0ODY4ODc3NDM1NDgwNDUsMC40OTY4NTI3NDEwMTU4OTY1NSw0LjQ5NTU2Mzg3NDM2NjQ2MiwxLjY3MjU4NTY5MTMxMzc5NjksOS45OTQ1NjQyODE4NTQ0MiwzNjEuNzI4MTYxMjc4MTQ3NCwxMzA2LjAyNDk4NjU5MjEyMjYsMjAxOS44Nzg3NTA2NjI3ODU3LDIyOTUuMTE1MTA1MjczMzk2LDQ1MDUuODI0ODI4MDQ4NjAwNSwxNTIuMjY2ODQxMDYyNDk2OTIsOTY1Ljk5ODQ1NTAxNTQ4NDUsMTQyNS42MjgwNDA4NzY5MzczLDcwOC4zNTYxMTUyNTU4Njk3LDM3NC4wNjI2OTk1MzI4ODk3LDE0MS41NzExNzk3MTY0MzQ1OSwxOTQuMzg4NTU4MDcwNzk5MTgsNzEuODM1MTAxOTIwOTg1NzEsMTMyMC4xODk2MzMyMDcxOTc0LDQyNS4xOTgxNjU1NTA2OTc4LDg3Mi45ODc4MDY2NzA5OTU2LDEzNjIuNzc3NTk3OTk4NzE0OCwxMjkwLjkyOTEyOTcyNDExODQsMjIzOC4zMTQ5MTQ4MjM3NSw1MS4xNDg4Nzc3MTk3Mzc5OTYsMTQuODE1NjY3MjE1ODkzMzE3CisyMixUdWUgMTUgRmViIDExLDEuNDM0NDM4NTQzODc3ODYyOCwwLjQ5MTIwMzgwNDU5OTQ1NDcsNC40NTM0MTUyMDQ3MzQ1NzMsMS42NTk3ODg3MTQ0NTY5NDY1LDkuODcyNTczNTU5Nzc0NTE2LDM1OC4yOTQxNDMwNjY4NzE3NSwxMjg3LjY3NzA2OTUzNTA4OSwxOTk5LjAyMDAxOTA5NjI2OTIsMjI3My4wNTA0NTM3NjY5NzY3LDQ0NjIuODI0NjE0OTIyMTk5NSwxNTAuNzg5NTYzNzQ3MjM5NzUsOTU2LjA1MjQzNDc4NjU4NTIsMTM5Ny45Mzc0MzUxNDQzNjI2LDcwMC41NjM0ODAzMzU5NzU4LDM3MC42Mzg2MjE3Mjg3ODcwMywxNDAuNjA3MTI5NjYyNzY3ODIsMTkyLjg2Mzg1NzU4ODkxMDEyLDcwLjU5ODY5OTE3NjM5NTE2LDEzMDQuNzg5Njk0MjM1Nzc0Myw0MjEuNjk1NTIwNTYwNjE5LDg1Ni4yMDM0MzkzMzQ0NTUxLDEzNDQuMTYyNDQzMzcwMTMxMywxMjc3LjIxNjYyOTQ5MTA5NDYsMjIxOC42MzA3NDEzMzc4OTgsNTAuNzM0ODA4NDgxMzg1OTUsMTQuNjMxMDAxOTkzNjE3Mzg1CisyMyxXZWQgMTYgRmViIDExLDEuNDIyODYxMzY0MTA1MzEyLDAuNDg2NTgzNjgzOTcwMzY0ODMsNC40MTkyMjYwODEyMDAyMzE1LDEuNjQ5NDU5NTA2MzczODgzNSw5Ljc3MjU5MDc1MDI1Mjk0MiwzNTUuNTA3MzE4NDA3NDMwNSwxMjcyLjUxNjA3MDYwNjkyODUsMTk4Mi4wNDYzNzk1ODU5NzE0LDIyNTUuMTM4MTkzNTI5NTU3Niw0NDI3LjkyNTc4MjAwNDY5NSwxNDkuNTg5OTYzMDUzNzU1ODcsOTQ3Ljk1OTkyNzg2OTgzNjUsMTM3NC4yMzQ2NzgxMTYxMjIsNjk0LjIwNjY2NjY5ODA5NCwzNjcuODYzMzAyMDcyOTk0NCwxMzkuODMwODU5NzM5Nzk2MjQsMTkxLjYzMjg4NjEyMzE3MDYsNjkuNTU4NjYyMDcwOTM0NDMsMTI5Mi4xOTQ1NTgzNTU5NTUyLDQxOC44NjQzNzYxMTYzOTgyLDg0MS44NjE4ODM3ODA3NjYxLDEzMjguODA5ODM2ODYxNzE0LDEyNjYuMDQ2MjUwMTY2NzE0OCwyMjAyLjY5MzM2MDM1OTA5Niw1MC40MDAyMjYzMjEyOTg0NywxNC40Nzk0NTA4MDI1NzU3MTYKKzI0LFRodSAxNyBGZWIgMTEsMS40MTM1MDgyNTA4MDk2MDgyLDAuNDgyODMyMjIwMzA5NTkxNSw0LjM5MTYzNjU3Njk2ODg0LDEuNjQxMTUzMDE2ODQyOTEwNSw5LjY5MTI4NTM3MTM1MTIzNSwzNTMuMjU3NjU4MTU0MjY3MjMsMTI2MC4xMTE1NjA5NTY3NzY5LDE5NjguMzE3MTQyOTQ0OTI4MywyMjQwLjY3NTA3MzAyOTgzNCw0Mzk5Ljc1MjQxODI0NTY4NSwxNDguNjIxMTU2Mzc3NzYyMDUsOTQxLjQxNDg1NDEyMjgwNDYsMTM1NC4zMzA5MDEzOTQ3MDE5LDY4OS4wNTU1MDU3MDI4NjEsMzY1LjYyNDk4MTYxNjgxNTAzLDEzOS4yMDc2NDA2NTA5MTEwNiwxOTAuNjQyODcxMjQwNTgyMTQsNjguNjk2MzQ1ODkwNzQ2MywxMjgxLjk2ODM4NTI0NzE4NDIsNDE2LjU4NTU2MDA3ODQ0MTM1LDgyOS44MzQ0MDE0NjM3ODQ2LDEzMTYuMjY2NDc4MjA4NDg3OCwxMjU3LjAwMzg0MjAzMjQ2NTIsMjE4OS44NDk3MDA5MzYzMjc3LDUwLjEzMDk3Mjk4ODk5MDgzNCwxNC4zNTYwODYyMTExMzY2OAorMjUsRnJpIDE4IEZlYiAxMSwxLjQwNTk4MjQxNTIwNTA2MTcsMC40Nzk4MDIzMDc0NDMzNjYwNSw0LjM2OTQ1NDk3Njk4MDE5MiwxLjYzNDQ4OTM4MjM2MDA0NDQsOS42MjU1NTM3MTM3MjY5OTQsMzUxLjQ0ODUwNTg1NDE3NDgsMTI1MC4wMzcyNzEwNzQyNDU2LDE5NTcuMjYwODkyNzQyNTU3NCwyMjI5LjA0MjE0NTM3OTY3Miw0Mzc3LjA5NTIzOTA2MTA3LDE0Ny44NDE4MTgwMTg4MjkwMyw5MzYuMTQ0NDE0NDM3NDk0NCwxMzM3Ljg0OTM1NTA0Mjk0Myw2ODQuOTAxNzYxMzg0MTY5NSwzNjMuODI2MTIyMjczOTg3MSwxMzguNzA4MTkwNDU4MjcwMTQsMTg5Ljg0ODY5MTU5Njc5OTA5LDY3Ljk4OTAxMTg2NzQxNzIsMTI3My43MTA1MzkxMTE4NzAzLDQxNC43NTY1Njg3MTg4OTQ0LDgxOS44ODQzNjI4MjA5MzIzLDEzMDYuMDkwMzIyMzM3NTIxNywxMjQ5LjcxNzc2ODExNzMxNzMsMjE3OS41MzMwNjkxNDIzNTgzLDQ5LjkxNDg5MTkxMTE3OTIsMTQuMjU2Mjc1NTQ3Nzg1ODg1CisyNixTYXQgMTkgRmViIDExLDEuMzk5OTQzNDM0ODM4MjkwNiwwLjQ3NzM2NDQ0NTUxNDcyMDg1LDQuMzUxNjY0ODM3MDczNjEyLDEuNjI5MTUwNjUyOTc2MTcwMyw5LjU3MjYzODIwNzc3MzY5LDM0OS45OTcyNzk0NTUwOTU5LDEyNDEuOTAwMzg4MjM2MDI2NCwxOTQ4LjM4NDMwNzkzNjgwODcsMjIxOS43MDk4OTYzNTk2OTMsNDM1OC45MjA2OTEzMzMzOTcsMTQ3LjIxNjU1NTkwODExMDY4LDkzMS45MTMyMDI1NzcwMzk0LDEzMjQuMzQyOTM5MTI3MDU0Myw2ODEuNTYzOTI4MDk1MjAyNiwzNjIuMzgzNzY4MTQyMTM0NTYsMTM4LjMwODIyMDgwMTg1MDI3LDE4OS4yMTI1MzIwNzg0MjE2Nyw2Ny40MTM0NTQ0MjYwNjgwNywxMjY3LjA2ODE2MTE1NDIxODYsNDEzLjI5MTEyMzUyODE3MzYsODExLjczNjIyNzg0NjAyNywxMjk3Ljg3NzY0MTM5NTY4OTgsMTI0My44NjU4NTYyNzI5OTg2LDIxNzEuMjYzNDU0NzM1NTk4LDQ5Ljc0MTc2Mzc1NzAyODYzLDE0LjE3NTg3OTk2NTIzODAyNQorMjcsU3VuIDIwIEZlYiAxMSwxLjM5NTEwNTI5OTg4MzM4OCwwLjQ3NTQwNzgyNzY3MTAxOTYsNC4zMzc0MTU4MjM5NDUzMjEsMS42MjQ4NzQ1NDcxODM5Mzk5LDkuNTMwMTY0MzQzOTkxMzcsMzQ4LjgzNDgwNjE0NTkwNDU3LDEyMzUuMzU0MzkwNDM5NDI0MiwxOTQxLjI3MTA0NDE2NjE2MTgsMjIxMi4yMzQzNjY4NTQyMTksNDM0NC4zNjI4MjcxMzE0MjMsMTQ2LjcxNTY3MzM4OTIwMjY2LDkyOC41MjI2MTA3OTE0MTMzLDEzMTMuMzYwNjY5MTg1NzQzNSw2NzguODg3Nzc1MzE3ODA5OSwzNjEuMjI4NjY1NDA2MTkxNCwxMzcuOTg3ODMzOTUxMDQwMDIsMTg4LjcwMzE2ODI3MDI0NTMsNjYuOTQ3OTI3NjQwOTYxMzQsMTI2MS43MzkyMjkwNzEzMjUzLDQxMi4xMTc3NTA2OTU0MTkzLDgwNS4xMTQzODEyMzQ0NTAzLDEyOTEuMjc0MzM2NDc0NzMzNCwxMjM5LjE3NTQwMjM0MjYwMjIsMjE2NC42NDEzMzgzOTIyMDU0LDQ5LjYwMzEzMDgyNTUyMDE3LDE0LjExMTMyMjEyMzkwNTU0MQorMjgsTW9uIDIxIEZlYiAxMSwxLjM5MTIzMTQwNTM3ODMwODgsMC40NzM4Mzk1MzgzMDIwMTk5LDQuMzI2MDA2NzU3NzgxOTE2LDEuNjIxNDQ3MTEwNzg3OTI4Miw5LjQ5NjEzMTg2OTcyMjM5MiwzNDcuOTAzOTkyMjk3MTY2NSwxMjMwLjEwMjM1MTE0NDY0ODUsMTkzNS41NzU1MDgwNTIwNDksMjIwNi4yNDg4NTc3OTA3OTU3LDQzMzIuNzA2Nzc2NTE3NDI0LDE0Ni4zMTQ2Mjc0MTUwMzI4Miw5MjUuODA3ODIyNTExMjk2MiwxMzA0LjQ4MjYzNDU3NTQxNjYsNjc2Ljc0NDYzMzExNDI2OTcsMzYwLjMwMzc5ODQ3MjY1MTEsMTM3LjczMDg4NTkyMTg5NTQsMTg4LjI5NTEwOTU5NzIwOTE4LDY2LjU3MzA0MzM0NzcwNTM1LDEyNTcuNDcwNDI4NDIwNjY2NCw0MTEuMTc3OTU0MDE5MzA0NCw3OTkuNzYzMzk3NTMzNDYxMywxMjg1Ljk3ODIwMzUzNjkxNTgsMTIzNS40MTk1NDYzNDU3MjI0LDIxNTkuMzM4NTU4MTE1ODg4Niw0OS40OTIwNzYyMDMzNzY5MSwxNC4wNTk1ODAzNjkxNjA0NDUKKzI5LFR1ZSAyMiBGZWIgMTEsMS4zODgxMjgzMTQzNzc4MDcsMC40NzI1ODI4MjQxMTUzMjc3LDQuMzE2ODY1ODIwNzMwMTg4LDEuNjE4Njk1MzM3ODg1MTg1LDkuNDY4ODgyNzYzODA1MjUzLDM0Ny4xNTgyNDMyNTg5NDY3NSwxMjI1Ljg5NTAyOTUzMjI3MiwxOTMxLjAxNDQxOTcwMTc3ODcsMjIwMS40NTM5MzM3MjU5MzEsNDMyMy4zNjkwMzk3NTY3ODcsMTQ1Ljk5MzM2Nzc1NTc5NTUzLDkyMy42MzM3NjQ4MDk4NDE1LDEyOTcuMzM1OTYwMTYyMDA4NCw2NzUuMDI4NjIzMzQzODk2LDM1OS41NjI3MjgwNjkwODcxNCwxMzcuNTI0Mzc4MjU0Mjc5NTMsMTg3Ljk2NzczMTExODczNzMsNjYuMjcyMDY2OTk0MjM0MzYsMTI1NC4wNTI0NzEzNzg1Njc2LDQxMC40MjQzMDg3MDU5MTQxNCw3OTUuNDU3MTM0NjQ3MTExNSwxMjgxLjczNjMxMjkwODk0NDcsMTIzMi40MTIwMTk3NjYzODIsMjE1NS4wODgzMDYxMzEwOTM4LDQ5LjQwMjk5NTM5NDA0ODU4LDE0LjAxODE0NDk2NzAwMzQ4NQorMzAsV2VkIDIzIEZlYiAxMSwxLjM4NTYzOTMzNDA4NjU3LDAuNDcxNTc1MDA4NDM5NzEzNyw0LjMwOTUzMDcyODM5NTMzMiwxLjYxNjQ4MDMxMTg0NzY0OTYsOS40NDcwNTk0MjQ3OTUwMzIsMzQ2LjU1OTg2Nzg1NjU3NzU3LDEyMjIuNTI2Mzc4NDE2NDk1NiwxOTI3LjM1NzgzNTgwNzUyNTYsMjE5Ny42MDcyNjc1NDQ0MTE2LDQzMTUuODc3NTU2MTU1NDg2LDE0NS43MzU2NjIzNDMzNzMxMiw5MjEuODkwODEyOTk0NjU5NCwxMjkxLjU5OTY4ODI5NzgyNjMsNjczLjY1MzU0MjM5NjE0MzMsMzU4Ljk2Nzk0NzA4MzkyOTA2LDEzNy4zNTc5MDkxMjc0ODI4MywxODcuNzA0NDYyNjY2NTMyNyw2Ni4wMzA4Nzc1NzU2OTc3NywxMjUxLjMxNDQyNDQ1NDI4MTgsNDA5LjgxODY1Mjc5ODU2NTk1LDc5Mi4wMDEzMzI5NTkyNDgxLDEyNzguMzQwMDI5NTI1MTMwNCwxMjMwLjAwMTQyNTQxODY2NzYsMjE1MS42NzU0MDA4Mzg1MzgzLDQ5LjMzMTM4MDY5NzUxNTk0LDEzLjk4NDk1Nzc0MDA1MjI4NAorMzEsVGh1IDI0IEZlYiAxMSwxLjM4MzYzODQ2MjIwNjU4MTYsMC40NzA3NjUzNzAxODk1MzU0Niw0LjMwMzYzMDMyNjE3Njk3OSwxLjYxNDY5MTExNTEwODU3MTcsOS40Mjk1NjA3OTc1NzMwOTYsMzQ2LjA3ODU5MDk5NzY1NjkzLDEyMTkuODI4MDMxNzU0NzIwNSwxOTI0LjQyMDU0NDkwMDI3MjUsMjE5NC41MTQxNDEyNjMwOTE1LDQzMDkuODUzMTA3NDkzMTE5LDE0NS41Mjg0NjQ0MzQ3OTM2OCw5MjAuNDkwNjc4NTgzMjU0NywxMjg3LjAwMzUyMjA4MTg4OSw2NzIuNTQ5Nzg5MTA2Mjc5NywzNTguNDg5MzY1NDM5NzAxMDMsMTM3LjIyMzE5NTQyMzkyMjQyLDE4Ny40OTIwNjcwMTU0NjI4Miw2NS44Mzc3NTUxNzQ0NjEzOSwxMjQ5LjExNzkzMjA0ODUyNDQsNDA5LjMzMDQ2MTM0MDc1MzQ2LDc4OS4yMzI2MzU0MDE3NzAzLDEyNzUuNjE5MTY0NjI5MTk2MSwxMjI4LjA2NTY4OTk5Nzg2NTUsMjE0OC45Mjc0MTEwNTUwNzI4LDQ5LjI3MzYyNzkxOTUwODI4LDEzLjk1ODM0NzQyNDIzMDc0NgorMzIsRnJpIDI1IEZlYiAxMSwxLjM4MjAyNDk2NzcxNDM1MiwwLjQ3MDExMzE1ODY3NjYzMjQsNC4yOTg4NjgyNzA5OTk1MjksMS42MTMyMzk1ODM1NDY2MSw5LjQxNTUwMDYyMDExMDUxNiwzNDUuNjkwMjMxMDk4MzAyNjYsMTIxNy42NjM2NjExNDU0Njk0LDE5MjIuMDU0MjgzOTI4NTk1MiwyMTkyLjAxODk4MTU2OTAxNjQsNDMwNC45OTI3NzM2MjkyMTMsMTQ1LjM2MTM0NzcwNzc2MzU3LDkxOS4zNjI2OTI2NjA1MDIsMTI4My4zMjM0NTYzMjM0NjQ2LDY3MS42NjE1NDAxMDI4MjQxLDM1OC4xMDI5NzI4MDgyNjMxLDEzNy4xMTM2NjY3MjU5OTY5LDE4Ny4zMjAwMTcyMjI5NTkxLDY1LjY4MzA5NDAwNjQ1MzAzLDEyNDcuMzUxODA2NDQ3ODE4NSw0MDguOTM1NDM0NTU2OTgyOCw3ODcuMDE1ODEwOTgxMzY3MywxMjczLjQzNjEwMDE3NzQ1MDcsMTIyNi41MDcwMTEwMjYwODQ1LDIxNDYuNzA2ODcyNTAyODIyNSw0OS4yMjY4Njg4MjUyOTY5NywxMy45MzY5Njc0OTgxNTM3MjcKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvTm9uWmVyb01vcnRhbGl0eVJhdGVfUktfUmVmZXJlbmNlL0h1bWFuUG9wdWxhdGlvbk1vZGVsL2h1bWFuL0luY2lkZW5jZV8wLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvTm9uWmVyb01vcnRhbGl0eVJhdGVfUktfUmVmZXJlbmNlL0h1bWFuUG9wdWxhdGlvbk1vZGVsL2h1bWFuL0luY2lkZW5jZV8wLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYzI0NDAxCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Ob25aZXJvTW9ydGFsaXR5UmF0ZV9SS19SZWZlcmVuY2UvSHVtYW5Qb3B1bGF0aW9uTW9kZWwvaHVtYW4vSW5jaWRlbmNlXzAuY3N2CkBAIC0wLDAgKzEgQEAKK2l0ZXJhdGlvbix0aW1lLApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Ob25aZXJvTW9ydGFsaXR5UmF0ZV9SS19SZWZlcmVuY2UvSHVtYW5Qb3B1bGF0aW9uTW9kZWwvaHVtYW4vSW5jaWRlbmNlXzEuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Ob25aZXJvTW9ydGFsaXR5UmF0ZV9SS19SZWZlcmVuY2UvSHVtYW5Qb3B1bGF0aW9uTW9kZWwvaHVtYW4vSW5jaWRlbmNlXzEuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJjMjQ0MDEKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L05vblplcm9Nb3J0YWxpdHlSYXRlX1JLX1JlZmVyZW5jZS9IdW1hblBvcHVsYXRpb25Nb2RlbC9odW1hbi9JbmNpZGVuY2VfMS5jc3YKQEAgLTAsMCArMSBAQAoraXRlcmF0aW9uLHRpbWUsCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L05vblplcm9Nb3J0YWxpdHlSYXRlX1JLX1JlZmVyZW5jZS9IdW1hblBvcHVsYXRpb25Nb2RlbC9odW1hbi9JbmNpZGVuY2VfMi5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L05vblplcm9Nb3J0YWxpdHlSYXRlX1JLX1JlZmVyZW5jZS9IdW1hblBvcHVsYXRpb25Nb2RlbC9odW1hbi9JbmNpZGVuY2VfMi5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjFlZjE3YwotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvTm9uWmVyb01vcnRhbGl0eVJhdGVfUktfUmVmZXJlbmNlL0h1bWFuUG9wdWxhdGlvbk1vZGVsL2h1bWFuL0luY2lkZW5jZV8yLmNzdgpAQCAtMCwwICsxLDMzIEBACitpdGVyYXRpb24sdGltZSxFRy1GUkctRzIxMDAwMSxFRy1GUkctRzIxMDAwMixFRy1GUkctRzIxMDAwMyxFRy1GUkctRzIxMDAwNCxFRy1GUkctRzIxMDAwNSxFRy1MT0UtRzI0MDAwMSxFRy1MT0UtRzI0MDAwMixFRy1MT0UtRzI0MDAwMyxFRy1MT0UtRzI0MDAwNCxFRy1MT0UtRzI0MDAwNSxFRy1MT0UtRzI0MDAwNixFRy1MT0UtRzI0MDAwNyxFRy1MT0UtRzI0MDAwOCxFRy1MT0UtRzI0MDAwOSxFRy1VUEUtRzI5MDAwMSxFRy1VUEUtRzI5MDAwMixFRy1VUEUtRzI5MDAwMyxFRy1VUEUtRzI5MDAwNCxFRy1VUEUtRzI5MDAwNSxFRy1VUEUtRzI5MDAwNixFRy1VUEUtRzI5MDAwNyxFRy1VUEUtRzI5MDAwOCxFRy1VUkctRzMwMDAwMSxFRy1VUkctRzMwMDAwMixFRy1VUkctRzMwMDAwMyxFRy1VUkctRzMwMDAwNAorMSxUdWUgMjUgSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzIsV2VkIDI2IEphbiAxMSwxLjE4ODk1NDM2ODUwOTcwMzUsMS4wNjE1NjI2NTk0MDc1NDU4LDAuNjE3OTE1ODczMDAzNjQ2MywxLjI3NzM5NDQxODU1MTc5MzQsMS4yODc2MDA3NDU0MjgzNDI1LDIwLjgxNDU3MDc2MzU1MjQ0LDIyLjYxOTE3MjQ4NzM0ODEyMywxOC41Mzg1NzIxNzE1MjQ0MDcsMTYuMTAyNjIwNzQ1MDk0NTgzLDIwLjEzMjMzMDQ1ODM1ODc4LDQuMDg4Mjg0MjcyOTY5MTYyLDIzLjg5OTM1NTIxMjIyNDc0OCw0LjcyOTgyMDE1NDkwOTk1OSwxMi41NTU4NTE5NzM1MDU0OTcsMTEuMjIyNjQzMDkyMDczOTk0LDI1Ljc2MjU1OTM5MTEyNDE0MiwxOC42NjM5NTcyNjYzMTQzMjcsNS4yNDg5OTY5NzY2NTA2NzMsMTUuMjc2OTY0MDM0NjQzNTU1LDEwLjE3NDAzMDc0MTI3ODg5OCwxNS4wMzAyMzUyNzIxMDA4MSwxNi42OTA2OTUzMDUzNTY2MjcsMTQuODQ3ODg3MzUyNjgzNzg0LDMzLjg0NTQzNzk1ODg3ODkwNCwyLjE1ODM4MjA2OTMzNDMyMjgsMC4wMjcwMjQ4MDM3ODkwNzAzOAorMyxUaHUgMjcgSmFuIDExLDEuMTg4OTU5MDM0NDQ2NTc3NywxLjA2MTU2NjgzMDgzODMwNCwwLjYxNzkxODMwMDk0MTIxMDEsMS4yNzczOTk0MjY2MzkwMzc4LDEuMjg3NjA1ODA0OTY5OTg4NiwyMC44MTQ2NTI1Mjg2OTM1LDIyLjYxOTI2MTM3MDc5ODc2OCwxOC41Mzg2NDUwMTg3MjA0NDUsMTYuMTAyNjgzOTk0OTc2NTMsMjAuMTMyNDA5NTQ1MTY3Mzc3LDQuMDg4MzAwMzM3NjY5NDgsMjMuODk5NDQ5MTI1NTg5NzcsNC43Mjk4Mzg3NDEyNTYxODEsMTIuNTU1OTAxMzEyNzYxMTUsMTEuMjIyNjg3MTYwNTA4MTQ0LDI1Ljc2MjY1OTIyNzYwODY4LDE4LjY2NDAzMDU3Njk2NDYyLDUuMjQ5MDE3NjAzMTQ3MDAzLDE1LjI3NzAyNDA2Njg0MTAyMiwxMC4xNzQwNzA2OTA0NzA4OTksMTUuMDMwMjk0MzM1MDY3MTExLDE2LjY5MDc2MDg5MzI4MjU0NCwxNC44NDc5NDU2OTg2ODAzNDgsMzMuODQ1NTcwOTI2NDUyNjQsMi4xNTgzOTA1MzY4MzU3NDMsMC4wMjcwMjQ5MDk5ODU1NTczMTYKKzQsRnJpIDI4IEphbiAxMSwxLjE4ODk2MzY5NTM4NTk2ODYsMS4wNjE1NzEwMjgwMjE4NjgyLDAuNjE3OTIwNzQxNDE3MzU5MywxLjI3NzQwNDM5NjcwMTUzOCwxLjI4NzYxMDg5NDA1OTg2MzQsMjAuODE0NzM0NjAxNTc0NDg2LDIyLjYxOTM1MDgxMjM3MDAxNiwxOC41Mzg3MTgzMDQ5NjYzMjQsMTYuMTAyNzQ3NDQwMTQ3MTk4LDIwLjEzMjQ4ODk0NTgxMDkwNiw0LjA4ODMxNjQ5Njg0NTk2OTUsMjMuODk5NTQzNjE5MTQyMzIsNC43Mjk4NTc0NDc2MDE0NjEsMTIuNTU1OTUwOTY1Mjg5MTE0LDExLjIyMjczMTI0OTcxNTk3NywyNS43NjI3NTM3MzkzNzI2NywxOC42NjQxMDQxMDU4OTQxNTQsNS4yNDkwMzgzNjI4OTQxMzMsMTUuMjc3MDg0NDgyNDU3NzgsMTAuMTc0MTEwNjQ4MDIzMjQ1LDE1LjAzMDM1Mzc4MDE2OTQ2MywxNi42OTA4MjY5MDU0NjMwOTgsMTQuODQ4MDA0NDE1NzMwNCwzMy44NDU3MDQ0OTA5NDkyOSwyLjE1ODM5ODk2ODA1NDk2OCwwLjAyNzAyNTAxNjg1Njk0MTI4Cis1LFNhdCAyOSBKYW4gMTEsMS4xODg5NjgyNjQxMjc2OTEzLDEuMDYxNTc1MzI3NjY0MDUsMC42MTc5MjMyMTUzNzA0MjY2LDEuMjc3NDA5MDUxNTIyNTg3NSwxLjI4NzYxNjA4ODAxODg2NSwyMC44MTQ4MTcxNDczNzIyNTMsMjIuNjE5NDQyNDk1MjgwNzY1LDE4LjUzODc5MzIyNzU2MTk0LDE2LjEwMjgxMDkxMzE3Mzg0LDIwLjEzMjU2ODk0ODU1OTAyNiw0LjA4ODMzMjk5NDI5MjEzMSwyMy44OTk2NDAzNzM1NTUyODYsNC43Mjk4NzY2NTk3NTA0MzgsMTIuNTU2MDAxODk4MTA2MTE4LDExLjIyMjc3NDM1MzI1MTYzNywyNS43NjI4MTcxMjIwODQ0NDIsMTguNjY0MTc3NTM5MTEwNDgzLDUuMjQ5MDU5Njg4MDM1MDYxLDE1LjI3NzE0NjQ4OTE3MjU5NCwxMC4xNzQxNDk2NDY4NTE5MDIsMTUuMDMwNDE0ODQ5OTE4ODI3LDE2LjY5MDg5NDcxOTYxMDEsMTQuODQ4MDY0NjYwNjk4Njk3LDMzLjg0NTgzOTUxMDI1NzIzNSwyLjE1ODQwNzAxNTYxMTI3NDUsMC4wMjcwMjUxMjY0NjYxODA3NDMKKzYsU3VuIDMwIEphbiAxMSwxLjE4ODk3MTQ3MjUxNzA2NiwxLjA2MTU3OTQzOTA4ODk4NCwwLjYxNzkyNTM2MDc0NjE4NDUsMS4yNzc0MTEwMTA1MDg4MjEyLDEuMjg3NjIwODgwODE3MDkwOCwyMC44MTQ4ODU1Mjc5ODg2NSwyMi42MTk1MzAzNDYxNDIyNTUsMTguNTM4ODYzMjk3MTY1MDUsMTYuMTAyODYxMTE0ODYwMjE4LDIwLjEzMjYzNjMyNDYyNTgyLDQuMDg4MzQ4MjQ5NDU0NjExNSwyMy44OTk3MzIxMzI3MzI1NjYsNC43Mjk4OTUzOTgxMTE3NDM1LDEyLjU1NjA1MDk5ODUzNDY1OCwxMS4yMjI4MDA2NDI1MzE3OTQsMjUuNzYyNjk5NTgzOTk3MTQ3LDE4LjY2NDIzNDI2MDA3Njk5NSw1LjI0OTA4MDU1MjUyNTE0MywxNS4yNzcyMDY2MzA5MDQ2MywxMC4xNzQxNzMwODg0MTU4MjcsMTUuMDMwNDc0NjQ0NzE3NjU3LDE2LjY5MDk2MTA4ODUxOTI2LDE0Ljg0ODEyMjkyNDY1NzM2LDMzLjg0NTk1NTY4Mjg2Mjg0LDIuMTU4NDExMTg0NzE4ODksMC4wMjcwMjUyMzE4NTg4OTYwMgorNyxNb24gMzEgSmFuIDExLDEuMTg4OTY3MTk1NDY5MzQ5LDEuMDYxNTgyODE3NjE0MDc5MSwwLjYxNzkyNTMzOTg2MDg0NzUsMS4yNzczOTc4MzI4MDQ2OTE1LDEuMjg3NjIzMzM1MDc2MzExNSwyMC44MTQ4Njc0NDc4MjE1NywyMi42MTk2MDE3ODIzOTM5NDMsMTguNTM4OTA2MTE5Mzg3MjM1LDE2LjEwMjgyODU3NjM3MzM1NSwyMC4xMzI2Mjc4MTQwOTE3MzQsNC4wODgzNTYyMzk5ODc3NzUsMjMuODk5Nzk4NjcxNTQ3NjQzLDQuNzI5OTEzNDMyMjQzMzQzLDEyLjU1NjA5MzI1OTIxNDcwNSwxMS4yMjI3MTI0NjY4MTI4OTQsMjUuNzYxNTkwNjg3NDEwNDksMTguNjY0MTgyNzc4ODk2MzA0LDUuMjQ5MTAxNDMzODIxMjE3LDE1LjI3NzI2MjA3NDgwMzU2LDEwLjE3NDA5MTU4NDk5MjkzNywxNS4wMzA1MzQ4MTUxNDA4OTYsMTYuNjkxMDI3NTM0NDAyMzM4LDE0Ljg0ODE3NTE2NjI3MjM5OCwzMy44NDU5NTY1OTczMzc1OSwyLjE1ODM5Mjc0MzI0MzM0NywwLjAyNzAyNTMxOTc4ODkzMTQ2OAorOCxUdWUgMSBGZWIgMTEsMS4xODg5MTk4ODMyNDk3MjYsMS4wNjE1ODA2MjQzNTg2NDU5LDAuNjE3OTA5NjY1MTYyMzY2MSwxLjI3NzMwMDU4NDYwNTA1NjIsMS4yODc2MDgxNTU2Mjg2NTcyLDIwLjgxNDI3ODM0NDE3ODQ2LDIyLjYxOTUzMzkxMDAzODc0LDE4LjUzODczNTQ1OTgwOTUxNiwxNi4xMDIyNTM4NDQ5Mzc0OCwyMC4xMzIxMTczNTAzNjUyMzUsNC4wODgzMDg4MzU5NDA2NjYsMjMuODk5NjU5Mzk0MzgwMzkzLDQuNzI5OTIyNjU5NzExMzEzLDEyLjU1NjA3Mzg1NzM2MjUzNCwxMS4yMjE4NTQzMTk5ODM2MDYsMjUuNzU1MjYxNzE0MzY5MTEyLDE4LjY2MzQwNDExNjkzMjE4NSw1LjI0OTEyMDUxNTEwNDg3NywxNS4yNzcyNzM5MjgxMjA1NjUsMTAuMTczMzExMzUyNjIwODE0LDE1LjAzMDU5MjAxNzAxMzUzMiwxNi42OTEwODczNjc4NTI1NiwxNC44NDgxNzM3MDY3ODg2LDMzLjg0NTE2ODMyMzIwNDUyLDIuMTU4MjQyOTk1ODU4NzI4NCwwLjAyNzAyNTI1MzA3MzU1MTk5NworOSxXZWQgMiBGZWIgMTEsMS4xODg2MzQyNzYzNTE4MDA1LDEuMDYxNTQxMzIzOTMxODI3MiwwLjYxNzc4OTk3MDI4ODUxMSwxLjI3Njc1NzM0MDY2NjAyMzMsMS4yODc0NzE4NzgwNzAzODYyLDIwLjgxMDEzOTc4NjgxODE4MywyMi42MTg0NDEyNTM4NjE2MiwxOC41MzcwNjA0OTk0NDIzNiwxNi4wOTgzMzQ4MTMyOTI4NjUsMjAuMTI4NDc2MjY3NzM4MzA3LDQuMDg3ODc3NzYwMzk0OTY3LDIzLjg5ODAzMTI2MTUxNzczLDQuNzI5ODU4ODc0NTA2NDk4LDEyLjU1NTU4NjQ4ODgzNzYzMywxMS4yMTYxNzUzNjE0NTQyOSwyNS43MjMzMTQ4NjQ5NzM1ODgsMTguNjU4MDM5NDQyMjI2ODIzLDUuMjQ5MTI5MTA3MDk5NTk4NSwxNS4yNzY5NjYxNzk0OTcwMDksMTAuMTY4MTk3NjAwNjkwMDc4LDE1LjAzMDYzMjg0MTE5MjU4NSwxNi42OTEwOTk5MDY4NTc0NiwxNC44NDc3Nzg2NTg1Mjc1NDUsMzMuODM5MzE0NDM2ODMyNjQsMi4xNTczNjU2NTAxNzUwMDIzLDAuMDI3MDI0MDI0MjY5NTYyNjU4CisxMCxUaHUgMyBGZWIgMTEsMS4xODcwNDc5MDEwNDA4NTIzLDEuMDYxMjQ2Mzk4ODA3ODQwNywwLjYxNjk5NDk5OTM3ODcxODUsMS4yNzM5NTYxOTY0MTA5NjA1LDEuMjg2NDk3NzcxMjUxMDM1MywyMC43ODQxMDg4MjU5MjY2NjYsMjIuNjA5NjE0NzQ0MDQ3NjA1LDE4LjUyNDcwMDM2MDkyNjU3MywxNi4wNzQyMTU3MzYyMzAwMDIsMjAuMTA1MzE5Njk4OTg3NTg2LDQuMDg0NzczODY3MTQwMjkyLDIzLjg4NTQ1NTM0NzIyMzM3LDQuNzI5MTY2NjE5ODQ3Mzc2LDEyLjU1MTQ1NDU3ODAzNjExNSwxMS4xODMzMTcyNzQ3MjgyNTMsMjUuNTg2NDU0NTk3NzkwNTIsMTguNjI0ODc3MzI5NzEzMTE1LDUuMjQ5MDY0MzYxMzgxMjA4LDE1LjI3NDIxMDg1MDQ3NjUyMSwxMC4xMzg3OTU2MTU4MDU4OSwxNS4wMzA1NTEyOTI0NDM0NDgsMTYuNjkwNzE2ODE0MzM3MDY1LDE0Ljg0NDM3ODA3NDYzNjMyNSwzMy44MDEwMzQ2ODg5MjAyLDIuMTUyNjMxMjQ2NTQxMjY4NywwLjAyNzAxMzg4NzIyNzYyOTkzCisxMSxGcmkgNCBGZWIgMTEsMS4xODAzNzU2NTc3OTcyMjQ0LDEuMDU5NDMzNjY1NzcwODU5MiwwLjYxMzE0NTEzMTY0OTA4MzksMS4yNjM2MjMzODg5NDY3MTIxLDEuMjgxMDE2OTgzNjIwODEyNSwyMC42NjA2ODU5ODQ4NjczNDIsMjIuNTUxMjU2MTY3MTk2MjE1LDE4LjQ1MjQ1OTkwNTcwMjkxLDE1Ljk2NTc3NDkzNDYxNDU1OCwxOS45OTI2ODg1NzMzOTk3OSw0LjA2NzIzOTA4NzE0MjA3NywyMy44MDcyMDM0NzA4NTg4NjYsNC43MjM1NDc2MzI0MjE1NTcsMTIuNTIyOTIzNjAxOTYxMDExLDExLjA2NjAzMDIwOTgyMzI5NiwyNS4yMzE4NjY0OTUwNjE5OCwxOC40ODIyNjY2MTUyMTE1LDUuMjQ4NDcxODkyNTcyMzk3LDE1LjI1NDQ1MjYyNjMyODgsMTAuMDMzNTczMDU4MTM5Nzk0LDE1LjAyOTQ4NjkxNDU2OTI0NywxNi42ODcwMjE3NjM5MDkyODYsMTQuODIwMzQwNzcyMDY2MjAzLDMzLjYxMTE2MzA3MTc1MTY2LDIuMTM0NjA2NTczMTI0NTg2LDAuMDI2OTQ1NjI3NDU4MDY2ODM0CisxMixTYXQgNSBGZWIgMTEsMS4xNjQ3MDkxMzY1MjYwMTAzLDEuMDUyNDU3MDIxMDE1NzgzMywwLjYwNDAyNTEyNDM3MjU4MjUsMS4yNDMxMjE5NDE5NTYzNTUsMS4yNjUxMDYyNTEzODA1NjIsMjAuMzYyNjA2NTU1NDAxNTg0LDIyLjMzNTk5NzA2MDE1ODA5MywxOC4yMzI5NzQxMjk4MjAxMiwxNS43MjE0MjAwMzgzNzIwMDMsMTkuNzExNzU3NTEwOTI1NTk0LDQuMDE2NDUyNTMxMzE5NjcyLDIzLjU0Nzg3MTYxNjM3MjMwNSw0LjY5NTE0MTMyMTM0ODkxMywxMi40MTEzNzU4NDE5NDg0MjcsMTAuODYyMTYyNDA5NjY4MTQ0LDI0LjcyMDg4MjU3MjA0NDI0NiwxOC4xODI3NTY3NzgxMTQ5OTIsNS4yNDQ2NDIwOTQxNDU0NjIsMTUuMTYyOTI1OTExNzcwOTk4LDkuODQ5NTU4MTI3MTUzNTg1LDE1LjAyMTU4MzE4NDMzMTYzMiwxNi42NjEzOTQ5MzE4MDc4NSwxNC43MTUwMjIwMjg4NzEwMzMsMzMuMTM2MjIyNDg3NTI4ODEsMi4wOTkwNTI2OTI5MTIzODAzLDAuMDI2NjkwMDIwMjY1NTk3Nzc1CisxMyxTdW4gNiBGZWIgMTEsMS4xNDE4MjY2ODU5NTAyNzgsMS4wMzcyMDE3NTc0NjkyNTY3LDAuNTkxNDYwMjg5NTc1NjY3MSwxLjIxNjY2MTc0NTY5NzA3MjMsMS4yNDAzNzU1NzczODQ3MzU4LDE5Ljk0MzkyNDIyMzkwMTM3NywyMS45Mzk2MTg4ODM1Nzg5MDIsMTcuODgxOTc0NzAxMzUzNTg1LDE1LjM5MTYwMDMzODk3MjQ5NSwxOS4zMTAwMjcxNzc4NjA1NDcsMy45Mzc3NzQxMTAxNDA4ODYsMjMuMTA4NjMwNzEzMjcwNTE0LDQuNjI1OTYwNDIxNDQ5MzI4LDEyLjE5Njc5NDMwOTM2NTA3NSwxMC42MjA0Mzc2NzEwMjY2NSwyNC4xNTg3NDU2NDg1NTUxMSwxNy43OTM5NjE2MDE4NDUwNCw1LjIyNTA5MzczMDcxNDI4NSwxNC45NDMwNTg0MTQwODQzOSw5LjYzMDY4NjI2NTMzODE1NiwxNC45NzU1MjU3NjMzNzYzMSwxNi41NDcxMTQwNzc2MTA3ODYsMTQuNDgzNzMyMzg1OTU0MjU1LDMyLjQ1OTEyMjkwMjcyNzQ3LDIuMDUzODY1MjI0NjA4MzM3MywwLjAyNjIxNzAzNDk2MjIyNjc3CisxNCxNb24gNyBGZWIgMTEsMS4xMTU4NzI0MjQyMDg5Mjg4LDEuMDE1NzY4NDg0MTYwMzM2MywwLjU3Nzc0MjgxNjY0MDk1NTUsMS4xODg0ODgxNjE3NDQ1MzU1LDEuMjExOTg5MDY5MjMxNTA1LDE5LjQ4Mjc4NTg5OTIwOTE0OCwyMS40NTA2MTc4MTI4NjgzMDIsMTcuNDc0Mjg5MDY4ODY3OTMyLDE1LjAzNDQzODcwMzA2OTE4NSwxOC44NjQyNzY2NjA3NTU5MDUsMy44NDc2MDEzMDg4MjYwODU2LDIyLjU4NjEyODc0NzIyNjY5NSw0LjUyODY4NzIxMDU2ODc0OCwxMS45MjcwMTk1NDM3NDYwNywxMC4zNzMwMDg1MzI3NDgwNzQsMjMuNjAzMDQ3NjQyNzcyNzkzLDE3LjM3OTg3OTI0NzMwMzI4LDUuMTY0NzkxMzM2ODMyOTkxLDE0LjYzMTI1OTgyMDQxMDQwNiw5LjQwNjMyODM0Nzk1NjE3NiwxNC44MTcwMzkwNTk3MjI5MywxNi4yODc1MjMzMjg2NjcyMiwxNC4xNzMwMjEzOTAwOTc1NiwzMS43MDkxMDcyNTQ3OTM4MiwyLjAwNjE0NDI0NDQwMDIyOSwwLjAyNTYzMjc5NTIwNTMwNTU2NAorMTUsVHVlIDggRmViIDExLDEuMDkwMzgxNjk3MDQ5MDIzNywwLjk5MjUwNjg1MjQwMjU4NDYsMC41NjQ1MzUxNjI3NzY0ODA1LDEuMTYxNzA1Nzg1NTE4NTYzNSwxLjE4Mzk4MTA5ODU0MTc4NzMsMTkuMDM2ODExNDgwMjc2Njk3LDIwLjk1MjAxNTY3MDI5OTk0MywxNy4wNjk3OTQ1Nzk2NDI0NjIsMTQuNjkxOTYxMTU3Nzk4NzE1LDE4LjQzMTYwMjI0MzU5MzM0NiwzLjc1ODY5NDg1NzM0MTE2OSwyMi4wNjE5ODg1NjQ4NTc5LDQuNDIzODc3NTcxOTQ4OTcxLDExLjY0OTY3MjcxNjU2ODkwMSwxMC4xNDI3Mzk5MzAxMTk2MzIsMjMuMDk2MDI0Nzc3OTAzODA3LDE2Ljk4NjIxMjA2NjQ2ODk2Niw1LjA2NjA4NDU1Njc3Mzk0NCwxNC4yOTM2OTkyNDU5MTQzNjgsOS4xOTczNjU1NzM2NDE5MzIsMTQuNTQyMDY4Nzg5ODIzMjE5LDE1Ljk0MDYxMzEzODM4NDE4LDEzLjg0NDM3MzY4NzgyNzAxNiwzMC45ODE3MTM4NTQ4MTcwODcsMS45NjA5NzY1NjY2NzAzNzg3LDAuMDI1MDM2Nzc5NTc3OTk2MworMTYsV2VkIDkgRmViIDExLDEuMDY2OTg5OTc0NTIzMzM5OCwwLjk2OTk4OTQ4ODM3NTEwNTcsMC41NTI1NTQ2NzY4MzUyOTg3LDEuMTM3NTk2MTcxODQ1OTYxNywxLjE1ODIxMjcyMDgxNDEyOSwxOC42MzEyMTUwMTY5MDk5MiwyMC40ODQ4NDE2MTUxMzI3MjMsMTYuNjk2NDY5MzE2OTc0MjYsMTQuMzgyMDU5OTAyNzgyMzg3LDE4LjAzNzI1NzM1NzU2OTQ0NSwzLjY3NjkzMTA1MDk0OTU0MSwyMS41NzUyNTUyMjE2NDc2NjYsNC4zMjI4MTcwNzM3MzUxMzEsMTEuMzg4NjU0MTc0NjcxODcsOS45MzgxMzQ2MDQzMTExNzMsMjIuNjUxMTIyNjUzODYxMzA3LDE2LjYzMTgxNTM4ODg1NzMyLDQuOTUxODQ5NjgxMDcxNTI5LDEzLjk2NzQzMDE1MzIxNzA2Niw5LjAxMTU5OTkyMTM5OTQyMywxNC4yMTY0Njk2NDc5OTkzMDQsMTUuNTcyMTM0MjI2ODc2NjQyLDEzLjUzMDQzMzU0MTcyMzMyNiwzMC4zMTkwODg3NzA0MTcyNCwxLjkyMDQyMzM5MTQyMjkzOTgsMC4wMjQ0NzgxNzgwNjQ5MDk4NDUKKzE3LFRodSAxMCBGZWIgMTEsMS4wNDYyMTQ0Njc1ODYxNTczLDAuOTQ5MzIxMTU0NjE3OTA5LDAuNTQxOTkzOTY3NTY3NTYxOCwxLjExNjQ1MDAzODc1MzY4MzMsMS4xMzUyODg1Mzk0NDg5MDI1LDE4LjI3MzA3MjY3MTk4NTgsMjAuMDY0NDIxNTIyMzI3OTYsMTYuMzYzNjgwNDIyMzk4Njg3LDE0LjEwOTMyMDMyNzc0NDkxLDE3LjY4ODU2MzgyNDg1MzQ0NiwzLjYwNDIxMTAyMzUxOTY0OTYsMjEuMTM5Njc4NTEyOTExMTA0LDQuMjMwMjcwNzg2ODg4MDQ5LDExLjE1MzExMjI0NDg4MzQ3NCw5Ljc2MDI0MDMzOTAzMzMwMiwyMi4yNjc2MDQ2MDkyNjA3ODYsMTYuMzIwOTcyNTI2OTIzNjk3LDQuODM2NzkwOTkxOTk4NjMzLDEzLjY2ODIyMTg1OTE3MDExNyw4Ljg1MDAzMTgyNTUxOTExLDEzLjg4NTA5MzQwMzQwNzM4MiwxNS4yMTYxNzg1NTI0MjIwNjUsMTMuMjQ0NTQ4MzEwODMzNjIyLDI5LjczMzM2Mjc1ODUwMjc4LDEuODg0OTE3MjE4MjQ3ODk5NSwwLjAyMzk3NTM5NDIzOTI1NzE1MworMTgsRnJpIDExIEZlYiAxMSwxLjAyODcwMzkxOTM1MTMzMywwLjkzMTUxNDQ5MDMxMDI3NTksMC41MzMxMzkwNjQwMzQ1MzQ0LDEuMDk4NzgxMTAwNjgwNTM2NiwxLjExNTk0NTQyMTkyNTMxNzgsMTcuOTcyNDIyOTgxMDkwMzc1LDE5LjcwNjkwNTEyMTY1OTAyLDE2LjA4MjQ5MTk5NDQzODY0LDEzLjg4MDg4NzYyMjI3OTczLDE3LjM5NTU2NDE3NzEzOTkzLDMuNTQyODYxODIxMjU3NDM1NywyMC43NzA2NjYyODczNDg4Myw0LjE1MDY1OTQyMTMzOTgwMywxMC45NTI0NDQ0NTE1MDQ2MDQsOS42MTI1MDk2NzM2MzYxODMsMjEuOTUxMDUyODQ0NzA3NDc2LDE2LjA2MTI0MDc3MjMyNzU4LDQuNzMxOTQ5NzY3MTA2OTI2LDEzLjQxMDU5MzIwODc5NTY4OSw4LjcxNTgyNzMxMjA1MjM4MywxMy41ODEzOTI3NjgwODI5NSwxNC44OTk1ODM3OTc2MzM4MjQsMTIuOTk5NTIwMDk4NzEyMDExLDI5LjI0MTMwMDMxNTMzMDg3NSwxLjg1NTI4NjAwODM3MTg4MDUsMC4wMjM1NDc3ODg0NTc2Mzc2MzYKKzE5LFNhdCAxMiBGZWIgMTEsMS4wMTM0ODY0MTE4NDg0MzMsMC45MTU3OTcwNzM0MDI4NDc4LDAuNTI1NDcyNzU5MTM4OTEwNiwxLjA4MzUyMjQ3NjYwNDYyMSwxLjA5OTEyMjA4MjM0NTQzMTMsMTcuNzExOTA1MjgzNjE5NywxOS4zOTQyMjQ2OTc2ODk1MzgsMTUuODM3NjkxNzc3NDIxNjk2LDEzLjY4MzI3NjQyNzI2OTAyMSwxNy4xNDE0OTgxNDQ5NDMyMjgsMy40ODk1MTEzMDYwMjIzNjg2LDIwLjQ0ODc5ODI5MjQwODY2OCw0LjA4MDQ2NDIwMjE4MDUzNiwxMC43NzY3MTM0MTA5Mjc1NDIsOS40ODU1MDcxNzQzMDYxMjIsMjEuNjgwMTQwMTk5Nzc3Mzg0LDE1LjgzNjk0MDQwNzYzMjU0LDQuNjM1ODg4MjI5NTAxNjEsMTMuMTgzMjg3NjM5NTAyNzY1LDguNjAwNDMyOTQ1MTM0NzcsMTMuMzAyMTAyOTMyMDkxODcsMTQuNjE0MDIzOTU1MjExODIsMTIuNzg0MDI2ODIzODUxNzE4LDI4LjgxNDY5MjU3MzY3MjE3NiwxLjgyOTcyMDA1NzM1OTM0OTMsMC4wMjMxNzM3NzgxNTgyNzM3MzMKKzIwLFN1biAxMyBGZWIgMTEsMS4wMDEyMDQxOTA2MTgyMDM0LDAuOTAyOTY1ODMxMDQ2MDgyNiwwLjUxOTMwMjY5MjEwOTI3OTgsMS4wNzEyNjQ4ODEwNDkwNTUzLDEuMDg1NTM2MTM4MDE2NjM1NywxNy41MDIwOTc5Njc0NzA3NzUsMTkuMTQwNjc0NDgzODY3NzQsMTUuNjM5ODU1MTI5MzMxMzUyLDEzLjUyNDMyODEwNTkyNjI1OSwxNi45MzY3ODA0NzExNjk5MjUsMy40NDY0MzE0MDk5OTA3MTksMjAuMTg4MzE0NTQ5ODAwODUsNC4wMjMyMDQzMjU4NTAyNzMsMTAuNjM0MDc3OTE0MTc1MjkzLDkuMzgzODI5MjY1NzU5NzMsMjEuNDYzOTgwMDU4NzQwOTU4LDE1LjY1Njc1NjY5NTM5NDgxOSw0LjU1NTM3MzcwNDM4NDU4NiwxMi45OTc3ODA2NTk4OTkxMiw4LjUwODAzNjMyNjg1ODEzMiwxMy4wNjc0MjgyNDYxODE3MzQsMTQuMzc3Mjc0NjI3MTg4MzI4LDEyLjYwODU3MjA0NTM4NzYwNCwyOC40NzA5ODg4NjE5NzgzNTYsMS44MDkxOTYzNDIwOTQyNDI3LDAuMDIyODcwNDc3OTkzMzkxNTA4CisyMSxNb24gMTQgRmViIDExLDAuOTkxMjI2NTQ3MzI4MDE1MSwwLjg5MjQ1NTA5Mzc3OTc4ODQsMC41MTQzMDA5MDEzNTIyMTI4LDEuMDYxMzQxNzU0NDU0OTY4NCwxLjA3NDQ5NTE0NDg5NDM3OCwxNy4zMzE5MzU4MDcxOTkzLDE4LjkzMzk5ODM4NTAzMDQzNSwxNS40Nzg5OTE1MjkwNDIyMTksMTMuMzk1NTMyMjgzNTIxOTQ1LDE2Ljc3MDY4Mjk1MzgwNTU5LDMuNDExNDIzODA3NTAwNzI4NiwxOS45NzYyOTQ0NTQ1MDkwMywzLjk3NjMyNzYzMDgyMDg1NDYsMTAuNTE3NzMwMjQ0NTE0MzExLDkuMzAxNzIyODYwODUzMDksMjEuMjg5ODU5MzAwODAyNjIsMTUuNTEwODkyMDc3MjAxOTU5LDQuNDg4MTY5OTEzMDM0ODM4LDEyLjg0NTg1OTIyMDIzNjA2NSw4LjQzMzQxNzQzMzE4MzI1MSwxMi44NzEyMDc4MTc0MzU4MzEsMTQuMTgxMTc5NDQ5NzkzMjQ4LDEyLjQ2NTEyODA2NzE5MDMyLDI4LjE5MjE1MDYxODI4MjA4NSwxLjc5MjU4OTg0MTE2NjMzMDgsMC4wMjI2MjMyMzg2MTgxNzQ0MgorMjIsVHVlIDE1IEZlYiAxMSwwLjk4MjY3MTQyMzI1NDU3OTcsMC44ODMzODU1NTI0ODU5MzU4LDAuNTEwMDE5Mjc2ODMxODg1MiwxLjA1Mjg1NjAzMTIwMTY5NCwxLjA2NTAyNTg1MDEyOTY5NSwxNy4xODYyMjA0NjAwNTgyMjMsMTguNzU2MzM0NDk4Mzc5NDMsMTUuMzQwOTcwNTc0NjI1MTQ2LDEzLjI4NTMxNzEwMzQ0ODAzNywxNi42Mjg0MDcwMjA2NTY5MzcsMy4zODE0MDExOTgyNzQwNjk1LDE5Ljc5NDIzODcyNTQ0NzAwMiwzLjkzNTg5Nzc3ODAxNzU2MiwxMC40MTc2NjE0NjQ5ODI0ODcsOS4yMzE2NDU0NDk0ODcxNiwyMS4xNDE1MjM1NDU1ODk4NzcsMTUuMzg2MTYwNjQ4MzA3NTM4LDQuNDI5MzUxNjg4NjEyODYxLDEyLjcxNDc5NTQ2Njg1MTQ1Niw4LjM2OTcyNTgyNjU1NzM3LDEyLjY5OTI0NzI2NzA4NDU0NCwxNC4wMTA1NDM5MzUyNjk2NjYsMTIuMzQxNTM5NDg4MDQyMjg3LDI3Ljk1MzMyMDIyNjE5MjYwMiwxLjc3ODM5NDUwODIzNjM1ODQsMC4wMjI0MTA2OTg1OTgwNDMwNjYKKzIzLFdlZCAxNiBGZWIgMTEsMC45NzYwMzAxNTQ4NDg1MzAyLDAuODc2MzExNDIzNTQ1MDY4NiwwLjUwNjY5OTc0NDU1MDE0LDEuMDQ2MjgxODU3ODQ1MDgwOCwxLjA1NzY3MzkwNjAxODg1NzYsMTcuMDczMjE2MzcxNzUwOTAyLDE4LjYxODE1ODIyNTE4NTk5NCwxNS4yMzM3Nzg1MjM5MzQ5NDQsMTMuMTk5ODg4MTYyODMwNjYsMTYuNTE4MDQ2NDkyNTEyNDEsMy4zNTgwOTI2Mzk4OTA3ODUsMTkuNjUyNzY0NzUzMjE1MTM4LDMuOTA0Mzc1MzU0NTk1MjE3LDEwLjMzOTgwMjczNDI2ODgzLDkuMTc3NDMyNzgwMzI0NDUyLDIxLjAyNjkyMTAxMDQ3NzA1NCwxNS4yODk1MzE3OTEyNDcyNDIsNC4zODI5Nzk1MzIxMjU0MTEsMTIuNjEyNTg1NzAzODkxMDQyLDguMzIwNDUwNTUxODkzMTE3LDEyLjU2MzU0MDg2ODM3ODYxLDEzLjg3NjYwMzYzNjk1MzczMiwxMi4yNDUyNTQ2OTU2NDU3OTgsMjcuNzY4MDc0Njk2ODQ0MjUyLDEuNzY3NDAwMzA2MzM3MzkxMywwLjAyMjI0NTM5MzczMjcyNTMKKzI0LFRodSAxNyBGZWIgMTEsMC45NzA5NDI1MzgxMjQ3NDkyLDAuODcwODc0NDU2MDQ1NjU0MywwLjUwNDE1OTE3MzQzODQ5NDMsMS4wNDEyNTI2NDUxNTM2MzIsMS4wNTIwNDE3NDI2MDc4NDQ2LDE2Ljk4NjcxMzA1MTA1ODg0MiwxOC41MTIxNzg0MTQ1OTIyODUsMTUuMTUxNjQzODE2NTQyNzU5LDEzLjEzNDUxNjIyMzk0NjQzNCwxNi40MzM1NTQ1NjY0MjQwNSwzLjM0MDIzNjk1ODgwODcxNywxOS41NDQzMTgyODQ4OTIxNDIsMy44ODAxNTU4MTg2NTQ3LDEwLjI4MDA2OTI1MTk3NzY2NSw5LjEzNjAwMTUwNzQ4OTE4MywyMC45Mzk0MDg5MjQwNTQ5ODcsMTUuMjE1NjE2MDE1NzkxNTQsNC4zNDcwNjY1OTg4OTE2MDgsMTIuNTM0MDQyNzU3ODQ0MDc3LDguMjgyNzkxMjAyODI3OTk0LDEyLjQ1ODM2OTMwMzM0NDk2NiwxMy43NzMxOTkyNjI4OTYwNDMsMTIuMTcxMzE2NjE4NzM1MjMzLDI3LjYyNjI1NjY4OTAxNDAxNCwxLjc1ODk5MTY4OTA1MDM3NzYsMC4wMjIxMTg2MDQzOTMyNjUyMTIKKzI1LEZyaSAxOCBGZWIgMTEsMC45NjYzMDYxNjcwMjMwMjk1LDAuODY1OTA4NDg5MTIyNDMyNSwwLjUwMTg0NTY1NDczMjY4MTcsMS4wMzY2NzM5NzYyNjE4NTU4LDEuMDQ2OTA5NjA5NzU3MDE3NiwxNi45MDc5Mjk3MTYwNjU0OTYsMTguNDE1NTI3OTcyMTk0MDQsMTUuMDc2NzkwMzkxOTIwOTUyLDEzLjA3NDk5MjI2MzcxOTQzNywxNi4zNTY1OTU4MjY2ODQyNywzLjMyMzk2NjgzMjg1MDE5NjMsMTkuNDQ1NDU4MzQyNzkyNTYzLDMuODU4MDQwODE3MTIzNjU4NCwxMC4yMjU1ODM0NDY4Mzk5NDgsOS4wOTgzMDc1MzgyMzgxMzIsMjAuODU5ODI0NDkyMTI3NDczLDE1LjE0ODMyODI4NjMyMjU5NSw0LjMxNDA3NzgzNDE1NjA3MywxMi40NjIzMTU2NTE1MzEyMjcsOC4yNDg1MjgwNjA2NDI2ODQsMTIuMzYxNzA5NzE1MzAwNTkxLDEzLjY3ODQ0MjE0NTM0MTY0OCwxMi4xMDM4Mjk0NDg5NTI3OTQsMjcuNDk3MDg3MTU5Mjc0MDYsMS43NTEzMzc3MDUwMDc5OTgxLDAuMDIyMDAyOTc0NzgwMTM5OTMzCisyNixTYXQgMTkgRmViIDExLDAuOTYyOTIwMTAxNjUzMzE5MSwwLjg2MjI3Njg5NzY5NDA2LDAuNTAwMTU3MDEwNTMxNDg5MiwxLjAzMzMzMjA2MzE3MzQyODgsMS4wNDMxNjIzNDAwNDQ0Mzk0LDE2Ljg1MDQyMDUwMzE2MDUwNywxOC4zNDQ5MjM1NDUwNjY1MDcsMTUuMDIyMTMxMDY0NzI1NSwxMy4wMzE1NDcwNjM3MDAxMzEsMTYuMzAwNDE1ODM1Mjc3NTksMy4zMTIwODcxODQ0NjU2OTI1LDE5LjM3MzI1NzU1OTEzMTYxNiwzLjg0MTg3Mjc1NjEwNDYyOCwxMC4xODU3NzYxMTY3MjE4MjYsOS4wNzA4MDYwMzE4NDEwMTYsMjAuODAxNzYxODgyMzA4OTM4LDE1LjA5OTIyMjE3NjI1MTExOCw0LjI4OTg1NzIzMzYyODg5NCwxMi40MDk4NzEzNzM5NDIwODIsOC4yMjM1MjkzNTY1NjI4MzUsMTIuMjkwNzEzODgwNTQ0MjE3LDEzLjYwODk5MzE1MTY0Mzk4NiwxMi4wNTQ1MDIzMDM1MDE2NSwyNy40MDI3OTU2MDEzMDM4NjUsMS43NDU3NTE5MTAxNzYyMzUsMC4wMjE5MTg1MDQ5NjczMzM5NjgKKzI3LFN1biAyMCBGZWIgMTEsMC45NjAxNDU3NDMwNzE3NTI0LDAuODU5MzAwMjU2OTI5NjYxNywwLjQ5ODc3NDAxNTI2Mzc1MDMsMS4wMzA1OTQ1MTMxMTkwNTM3LDEuMDQwMDkzMTc1MjQ0NTE0NiwxNi44MDMzMTg4NjQ2NzAzMDIsMTguMjg3MDg3MzI1ODIwOTUsMTQuOTc3MzYxOTc5NjU3MzAzLDEyLjk5NTk2NDY2Njg4MTQ2MywxNi4yNTQ0MDI4NDY4NTUzODUsMy4zMDIzNTcyODM2Njc1MzYzLDE5LjMxNDExODY0NzU1ODc4NiwzLjgyODYyNDIxNzM0OTg5MDYsMTAuMTUzMTY2MjU3OTAzNTUsOS4wNDgyODA1NzIyNTUxOCwyMC43NTQxODg4NDExODQzNDQsMTUuMDU5MDAzMzE5MjAyOTMsNC4yNjk5NjA2NjAwODg3NjMsMTIuMzY2ODkzOTI4Nzk1NzA0LDguMjAzMDUzODE0MDAxMTA5LDEyLjIzMjM3ODU2NTAyNDA3OCwxMy41NTIwMDU3MDg4MzEyNDYsMTIuMDE0MDg2MzU1Njk3Mjg3LDI3LjMyNTU2OTYwNDM5NzYzLDEuNzQxMTc2NzA2NjM5MDgwOSwwLjAyMTg0OTMxMDIxMTMyNTQ2OAorMjgsTW9uIDIxIEZlYiAxMSwwLjk1Nzg4MzQ5NDgwNzQzODQsMC44NTY4NzQyMjUxNDk3MTI2LDAuNDk3NjQ2NjkyNTE4MDQ2OTQsMS4wMjgzNjIxMTcwNjA5Mjk0LDEuMDM3NTkxOTQwNzUyMzEyNCwxNi43NjQ5MjUwMDcwNDc4MiwxOC4yMzk5NjA2OTAxOTQwNCwxNC45NDA4Nzg0MDU1MjYyMDYsMTIuOTY2OTU3OTMxMjM2NTkzLDE2LjIxNjg5Nzk4MTM3MTc0NCwzLjI5NDQyNzc3ODA1MjU5LDE5LjI2NTkyNzg0MzMyNjYwOCwzLjgxNzgyOTY2MTc2NTY1NywxMC4xMjY1OTU0OTgxMzk5Miw5LjAyOTkwOTQ5OTg0NDExLDIwLjcxNTM2MjAwMzQ5OTA1MiwxNS4wMjYyMTMzNjYwOTgyOSw0LjI1MzczMTQ5MzM2NTc0MSwxMi4zMzE4NzQ5ODUzNDYwMzMsOC4xODYzNTQ3MjU3OTM0NSwxMi4xODQ3ODk2NDQxMDY2NDQsMTMuNTA1NTUwNjEwMTUyMjI3LDExLjk4MTE1NTY5NzA0OTY1OCwyNy4yNjI2MjQxODkzODk0NywxLjczNzQ0NjAzMTE4MTAwMywwLjAyMTc5MjkyNzcyMzU5MTkyNgorMjksVHVlIDIyIEZlYiAxMSwwLjk1NjE1NzI2MzQ1Njc5MzQsMC44NTUwMjU0MTU0NjkzMTA5LDAuNDk2Nzg2NzM0MTQ2MzExOSwxLjAyNjY1ODA4NDgzNDM4NiwxLjAzNTY4NDgwNjg3MTcwODgsMTYuNzM1NjM4MTMxMzI5MTgyLDE4LjIwNDA0MzQ5ODIxNDU5LDE0LjkxMzA2MjkwNTE3ODAwOSwxMi45NDQ4Mjc1ODA1NDM5MywxNi4xODgyOTE2MTM2MDQyOTIsMy4yODgzODE2MDU5MDUzNSwxOS4yMjkxOTI2ODQ2Mjk4NSwzLjgwOTYwNjMzNjI3NTAyNDMsMTAuMTA2MzQ2NjQzMTAxMzA0LDkuMDE1ODgxOTU3NjgwNzc2LDIwLjY4NTY4MzQ4OTA1ODcwNCwxNS4wMDExOTE0MTgzNzEyOTIsNC4yNDEzNzA3NTAxOTAwODYsMTIuMzA1MTk2MjE3NDg0MjgsOC4xNzM2MDQwNjgwOTAyODUsMTIuMTQ4NTQzMzcwMDY2MTA4LDEzLjQ3MDE3MzI2NjQwNjgwMywxMS45NTYwNjU0MDY4OTI1OTEsMjcuMjE0NjE0MDAwNTEzMzA4LDEuNzM0NTk4NTA0MjUyMTc2LDAuMDIxNzQ5OTU1NTk1MDIyNzcKKzMwLFdlZCAyMyBGZWIgMTEsMC45NTQ2OTk4MTA2MTc2MTM3LDAuODUzNDY3NzQ4NTM1NTEwMiwwLjQ5NjA2MDg5MjA0NjAzNzg3LDEuMDI1MjE4NTUxNzA1MDk4MiwxLjAzNDA3NjI0MzM1NTIxOTMsMTYuNzEwOTIwNTU4NDg2MjM3LDE4LjE3Mzc3MDg4NDQ4NDYxLDE0Ljg4OTYwNTIwNzgyNzE0NSwxMi45MjYxNDQ5NTYxOTc4NDUsMTYuMTY0MTUxMzQxMTM3MjU2LDMuMjgzMjgxODQ0OTgzMjg5MiwxOS4xOTgyMjA4ODY0NDkzNSwzLjgwMjY4MDkzNTk1Mjg3MTMsMTAuMDg5MjgyNjE1NzM5ODQ3LDkuMDA0MDI1ODI5ODU0MDE1LDIwLjY2MDU2MzQ2NTk4NDQ2NywxNC45ODAwNjEyMjUxNjc0NDcsNC4yMzA5NzYwOTEzOTkxMTQsMTIuMjgyNzI3NDI2NzQ0Njg1LDguMTYyODI3NDI4ODgyMjI0LDEyLjExODA2NDg1MzYwNjY1NCwxMy40NDA0MTM3NzA3NjMwNzIsMTEuOTM0OTI5NzYwODAxNDEsMjcuMTc0MDk5ODQzNzg5MzIsMS43MzIxOTMxMDg5NDM0NzcsMC4wMjE3MTM3MzU4NDEzMjM3NzIKKzMxLFRodSAyNCBGZWIgMTEsMC45NTM1OTk4OTg5MzI2ODg4LDAuODUyMjk1NTc1MzM0OTQ2NiwwLjQ5NTUxMzMwNTQ4NjI3MjYsMS4wMjQxMzEzMzkzNzgyOTE0LDEuMDMyODYzODQ5Njc5NzUxMywxNi42OTIyNzUxMDk4ODUzNzIsMTguMTUwOTc2MDg3MzE3OSwxNC44NzE5MjgwMzM0NzI0NzEsMTIuOTEyMDQ2OTY0MjQwMDIsMTYuMTQ1OTQ0Mjc0MjA1NTksMy4yNzk0Mzc5Mzg0ODk1NzksMTkuMTc0ODg5NTE2NTE0OTI0LDMuNzk3NDcyMTc1NTkxMDA0LDEwLjA3NjQzNjM4OTA2NDA4NSw4Ljk5NTA2NTY5NjMyMDYyMywyMC42NDE1NDU5NDU4NTczMDMsMTQuOTY0MTEwMDAxNDQ4OTcyLDQuMjIzMTc4Mjc4NjA4MjQ1LDEyLjI2NTgyNzUyNzE2NjQwOCw4LjE1NDY4MzM1Mzg4NjI5OCwxMi4wOTUyMDQ2Nzg4NDEyMTMsMTMuNDE4MDcyOTkyMTkzNjcyLDExLjkxOTAyNzMwNzY5ODI0NCwyNy4xNDM1NDM3OTgyNjM1OCwxLjczMDM3NjU0NzA1OTY5ODYsMC4wMjE2ODY0NjE3ODM5NzkzMTYKKzMyLEZyaSAyNSBGZWIgMTEsMC45NTI2MTgwMDAxNDMwNjcxLDAuODUxMjUzMDE3MTk4MzEwMSwwLjQ5NTAyNDY5NDMzMzc4MTUsMS4wMjMxNTk4ODE1Nzg0Mjc3LDEuMDMxNzgzMjkyOTg1NzMyNSwxNi42NzU2Mzk4NjQ5NzQ5ODMsMTguMTMwNjg0OTk3MTA2ODEyLDE0Ljg1NjE3NjY0ODA4MDg5LDEyLjg5OTQ2MzQyNTU3MDg3MiwxNi4xMjk3MDMzNTYzODA4MTYsMy4yNzYwMTE4MzM3Njc5NTY1LDE5LjE1NDEwOTI2NTc5MDU2NiwzLjc5Mjg0MjQ0NTQ1MDIxOSwxMC4wNjUwMDQyNjM4NzA2NzYsOC45ODcwNTMzOTY3NDg5NzYsMjAuNjI0NTA0MTIzOTcyMjg3LDE0Ljk0OTg2NTM5NTgyNzc3MSw0LjIxNjI3MzI4NDU5MTEyNSwxMi4yNTA4MDU3NjY3ODgyMDQsOC4xNDc0MDEwNDg1NTQyMDEsMTIuMDc0OTY3NDk4NzI5MTA5LDEzLjM5ODI2NzkzNzU0Nzk3LDExLjkwNDg4NTg3NzE1NDg4MiwyNy4xMTYyODgwODQ0NTk3NCwxLjcyODc1MzUzNDM0Mzc0NzIsMC4wMjE2NjIxODE3OTI1NjI5OQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Ob25aZXJvTW9ydGFsaXR5UmF0ZV9SS19SZWZlcmVuY2UvSHVtYW5Qb3B1bGF0aW9uTW9kZWwvcnVucGFyYW1ldGVycy5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L05vblplcm9Nb3J0YWxpdHlSYXRlX1JLX1JlZmVyZW5jZS9IdW1hblBvcHVsYXRpb25Nb2RlbC9ydW5wYXJhbWV0ZXJzLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMjk1MDY2Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Ob25aZXJvTW9ydGFsaXR5UmF0ZV9SS19SZWZlcmVuY2UvSHVtYW5Qb3B1bGF0aW9uTW9kZWwvcnVucGFyYW1ldGVycy5jc3YKQEAgLTAsMCArMSwyIEBACitwb3B1bGF0aW9uSWRlbnRpZmllcixuYW1lLHRhcmdldElTT0tleSxiaXJ0aFJhdGUsZGVhdGhSYXRlLHRpbWVQZXJpb2QKK2h1bWFuLEh1bWFuUG9wdWxhdGlvbk1vZGVsLCwzLjlFLTUsMy41RS01LDg2NDAwMDAwClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Ob25aZXJvTW9ydGFsaXR5UmF0ZV9SS19SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vRGlzZWFzZSBEZWF0aHNfMC5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L05vblplcm9Nb3J0YWxpdHlSYXRlX1JLX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9EaXNlYXNlIERlYXRoc18wLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYzI0NDAxCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Ob25aZXJvTW9ydGFsaXR5UmF0ZV9SS19SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vRGlzZWFzZSBEZWF0aHNfMC5jc3YKQEAgLTAsMCArMSBAQAoraXRlcmF0aW9uLHRpbWUsCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L05vblplcm9Nb3J0YWxpdHlSYXRlX1JLX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9EaXNlYXNlIERlYXRoc18xLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvTm9uWmVyb01vcnRhbGl0eVJhdGVfUktfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL0Rpc2Vhc2UgRGVhdGhzXzEuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJjMjQ0MDEKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L05vblplcm9Nb3J0YWxpdHlSYXRlX1JLX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9EaXNlYXNlIERlYXRoc18xLmNzdgpAQCAtMCwwICsxIEBACitpdGVyYXRpb24sdGltZSwKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvTm9uWmVyb01vcnRhbGl0eVJhdGVfUktfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL0Rpc2Vhc2UgRGVhdGhzXzIuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Ob25aZXJvTW9ydGFsaXR5UmF0ZV9SS19SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vRGlzZWFzZSBEZWF0aHNfMi5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzg2MDlkYgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvTm9uWmVyb01vcnRhbGl0eVJhdGVfUktfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL0Rpc2Vhc2UgRGVhdGhzXzIuY3N2CkBAIC0wLDAgKzEsMzMgQEAKK2l0ZXJhdGlvbix0aW1lLEVHLUZSRy1HMjEwMDAxLEVHLUZSRy1HMjEwMDAyLEVHLUZSRy1HMjEwMDAzLEVHLUZSRy1HMjEwMDA0LEVHLUZSRy1HMjEwMDA1LEVHLUxPRS1HMjQwMDAxLEVHLUxPRS1HMjQwMDAyLEVHLUxPRS1HMjQwMDAzLEVHLUxPRS1HMjQwMDA0LEVHLUxPRS1HMjQwMDA1LEVHLUxPRS1HMjQwMDA2LEVHLUxPRS1HMjQwMDA3LEVHLUxPRS1HMjQwMDA4LEVHLUxPRS1HMjQwMDA5LEVHLVVQRS1HMjkwMDAxLEVHLVVQRS1HMjkwMDAyLEVHLVVQRS1HMjkwMDAzLEVHLVVQRS1HMjkwMDA0LEVHLVVQRS1HMjkwMDA1LEVHLVVQRS1HMjkwMDA2LEVHLVVQRS1HMjkwMDA3LEVHLVVQRS1HMjkwMDA4LEVHLVVSRy1HMzAwMDAxLEVHLVVSRy1HMzAwMDAyLEVHLVVSRy1HMzAwMDAzLEVHLVVSRy1HMzAwMDA0CisxLFR1ZSAyNSBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMixXZWQgMjYgSmFuIDExLDIuNzgwNzMyMzIwMjUzMzE2RS02LDMuMDk5MjUwMDAzMzU5NzYxNEUtNywyLjMzNTc5MzY3NDA5NjU2NzhFLTcsNC4wNTkzMTk0NzAzNDAzNTJFLTQsOC45MjM3NzIwNTU5NTI0MThFLTksMS42MTI4MTUzNDk3MTY5NTQ2RS00LDIuNTQ3MTM3NDEzMDkyNjExOEUtOCwxLjM0MTMwMjE0Mjk4MzQxNTVFLTYsNi45OTQ0NDMwMDMwNzk0OTJFLTUsNS4xODcxOTY5MTAyNTU0NDVFLTUsMS4xMTc2Mjg5NTU0NzQ5MTM4RS02LDEuMTc5NzQ0MzI0NzgzODE5RS02LDEuNTI4OTE4MDc4MDIzNTQyOUUtMTIsNC44ODk2NjE3OTc4NzgwMDdFLTcsNS4wNjQ3NTM1OTI1MTY5OTU0RS02LDAuMDc3MDQwNTI2OTQ0NDc0OSw0LjYyODgwNTMzNzY2MDQ0NEUtNCw4Ljg1MTc1NTU2ODUwMjY3NEUtMTEsMi43OTI2MTI4NTUyNTM3NTNFLTcsMS44MjY5NTQzMTc2NTc1MTk3RS00LDQuMjAyNzQ4NzYxODA4NDgxRS0xMSwxLjA5MTc0MjM2Mjg1MjI0OTJFLTksOS4yMDY0NTQwMTI5NTkzOTNFLTcsMi44NTI1MDIxNDI5NTgyMjU0RS00LDEuNTc0NTk5NzU0Mzk0OTI0NkUtNCwyLjk1MDIzOTExNDQ4NzUwMzVFLTExCiszLFRodSAyNyBKYW4gMTEsNC44MzM5ODQxOTcxMDY4MDc0RS01LDEuMzk5NDkyNDg2NzUyMzU3M0UtNSwxLjE3ODIxNTI1MTI3NDc2NjlFLTUsMC4wMDUzMTE2NTcxNDY1OTc0ODEsNS4wOTk1NzMxMTM0MzY5MjdFLTcsMC4wMDI1OTQ4MzMyODk1NDY4NDY1LDEuNDc4MTYyNjAyMjI2MTc3MkUtNiw3LjE2Mzk4NjAxMjAyNjQ3MkUtNSwwLjAwMTE1MjEzMjU3OTIzMjkxMjcsOS4yMjM3NDYxMTY5MTY4MDVFLTQsNS41NzMwMzg2MDM4ODQ2MzNFLTUsNi41OTIyNjgwOTQ0NDkxNzRFLTUsMy4wMzk4NDE0MDQ3MDAwOTU2RS0xMCwyLjYxNDA5MTU3ODc0NzUxMjdFLTUsMS43NDA4MjYxOTM4ODc4MDczRS00LDAuNDM4OTI0NTA0MjMyNjcyMywwLjAwNzg0OTE1NDgxMTk0MDM4LDEuNDE3NDUyMDg1OTc5NTI2MUUtOCwxLjUyOTQ0NzAzODkwNTU4ODVFLTUsMC4wMDMwNTUxMzc4NDI3MTE1ODIsNi4zMTcxMjIyMDI5MzI4NTZFLTksMi4wNjc2MzE4ODIyMTY3NTFFLTcsNC44NjEzMjgzNTQ1NTQ2MzVFLTUsMC4wMDQ4NDQ0ODI4MzQ5MzA5MjIsMC4wMDIzMTIzNDgyMDIyNTU5NjYsNS4wMzU4ODM4MjAzNjcyODZFLTkKKzQsRnJpIDI4IEphbiAxMSw0Ljg2ODE2MDc2MTkxMjQ0N0UtNCwyLjAwNjQxODA1NzE1NTU4ODhFLTQsMS45MDc4OTM3ODE5NzE1OTc1RS00LDAuMDM4ODY5MzcxODU2OTQ3Njg2LDkuNTg5MzY3NTQ3Mzc3MDEyRS02LDAuMDIzOTAyNDc5NzQxNzQzODkzLDIuODM5MTU2Mjc4MTQ3NzI5N0UtNSwwLjAwMTI0NTMzMDg3NzA1NjE1NDMsMC4wMTA5NDgyMzY5NDcyNTM0NjIsMC4wMDk1MTE1MjUzMDY1OTM4NjEsOC45MTUyOTEyMjUyNzMzNDhFLTQsMC4wMDEyMDc5NzUwNzIzMjU3MjgzLDEuMTA0MDUyNTg2NzYxNzI2MUUtOCw0LjU0Njk4MzU0NTIxNzEwMkUtNCwwLjAwMjcxNDc0NzA2MzAyMTg0NCwyLjM2ODE3MzI5Nzk5OTM4OTcsMC4wNzY4NzU4NzU0MzQ2MDEyMyw0LjE2NjEzMjU2NjE3MjcxODVFLTcsMi43NDE3ODg5ODk3ODQxODRFLTQsMC4wMjk0NTMxMzI3OTIxMzE2MDcsMS44NDYxNDEwMTE0NDQzNjM2RS03LDcuMDg4MjI4ODMwNTc5NjA0RS02LDguMzM4NjMxMzcyMTkwNjk2RS00LDAuMDQ3NTMxNTE2MzA2NDMwNjc1LDAuMDE5MjE4NDg5ODA2ODA1ODE1LDEuNDk1MjQwNzQxMDc5MTM5NEUtNworNSxTYXQgMjkgSmFuIDExLDAuMDA0MDk4NDQyNzUzNzc5OTUsMC4wMDE5NzY1Mjg4MjE3NzYyOTkzLDAuMDAyMDkyNTIyNDYwMTU5NzM2LDAuMjM5MTc5NjM0Mzg0OTQ2NywxLjIyNDE4NjU5MzA1NjEyMjVFLTQsMC4xODM2NDM1OTAwNTE4MzY0NywzLjcxNDkwODExNzY2NDc0OUUtNCwwLjAxNDcxMjMyMDgzNjE0MzUxNiwwLjA4NzI0MDM4MDE5OTMzNDA4LDAuMDgxODU4ODI4MjI0OTg5MDEsMC4wMDk2ODI5OTYzMTM0MDM0NTQsMC4wMTUwMzA2Nzg2NzcxNjY4MTYsMi4xODUxMjY1OTk2ODAwOTRFLTcsMC4wMDUzNzE4NzQzNzA3NzQ0MjcsMC4wMzA4Njk1MzkyNTYxMDE2NSwxMi42OTM0MjUwNDU4MTgwMDgsMC42MjkzMTkzMTY1ODc0MTU3LDYuNjc5MTM5NDgxMDQxMTgxRS02LDAuMDAzMzQ0NjQyNjMzNjcyNDY1MywwLjIzNzMxMzQ3OTk0NzA2MjUsMi45ODA2MjU4NjgwMjA4OEUtNiwxLjMxOTQ3MzMzMDg1MTk2NTRFLTQsMC4wMDk3MjE2MDQ4NTA5ODMxNTQsMC4zODk4NDM3MDU3NzYwNzA4NiwwLjEzMzQwNzQzOTYyNjE0NDkzLDIuMzc1MDcwNzY0Njc1NDc4RS02Cis2LFN1biAzMCBKYW4gMTEsMC4wMzE2NDQwNDA2Nzc5ODc5NSwwLjAxNjQ4NTIxODY2NDg1NDg5NiwwLjAxOTAzODUxNjg0OTk0NjU2MywxLjM3MjUxMzM1NDc3MTEzOSwwLjAwMTI4OTk5NzU0MDM0MjgyOSwxLjI5NDY4OTg5MTI2MzgzMTgsMC4wMDQwMTk5NjE0ODEzNzc3MTQ0LDAuMTQ0MTAzOTQ5ODU3ODI2NjIsMC42NDA3MTQ1MzEwMjI4NjQyLDAuNjQ0Nzc5NjMxOTg1NjczMSwwLjA4NzU2NTk1MjMzMTYwNTU5LDAuMTU0NTI3NDkwMDk1NzU4NDUsMy4yMDEzNDQzOTgwMDE1NTI3RS02LDAuMDUyNTgyMzUzMjM4MTE2OSwwLjI5NzkwMzY2NzY5NzM2ODIsNjguMDMxMzA0MTM1NjIxNjQsNC43MjYyOTI3Mzc5Nzk4MDcsOC4wMTUzOTAzNjI2NTc5OTFFLTUsMC4wMzM4MTE2NTc2MDA0OTY0NywxLjc1NTE5Mjc4NTAyMTc4OSwzLjYyNTU4MDc4ODg0MTI0MkUtNSwwLjAwMTgxNzg1MjAxODQ1NDIyMjgsMC4wOTQwMTQ4NTc2NjU4MTM0NSwyLjkzNDAwMzIxMzUxMjY4NzIsMC44NTQxNjkwOTk3Mzk0NTEyLDIuNzgzNzEwODgyMDU0Njc5NkUtNQorNyxNb24gMzEgSmFuIDExLDAuMjMyMzE0OTIyNjg1OTQ5OTQsMC4xMjU5MTkxNDY0MTcyMjY1LDAuMTU1Njk2MjM4NTU0NjQwMzIsNy42MjYzNDMwNzc2MTI5MTgsMC4wMTIxMzI4MTI3NjM3Mjg4ODQsOC42OTM4MDQ3MDIxNTc0MDQsMC4wMzg4NjI4MjY4NjM2NjUzNjUsMS4yNjYwNTY3MjAxMTI0MTg0LDQuNDk4NTgyMzE1NTM4NDYzLDQuODE5NjUzMTc3ODEzMzEyLDAuNzE0Njk3MjYyNDY2MjcxMiwxLjQxOTIzNjc2MjAxNTE2MywzLjkyNzU2NTUyMzgyNDY5MDZFLTUsMC40NjE0MDE5NTMyNTM2NzEwNiwyLjYwMzYwMjQ1ODYzNjIxNywzNjQuNjM3NjUyOTQ1MjcxMDQsMzMuNzU3ODE3NDcxOTI4NzgsOC4xNzQ0NTQxMDc5MjU0NThFLTQsMC4zMDYyNDExMzc1MTI1OTMzNSwxMi4zNTc1MTAxNDA4NTkyMDEsMy43NjU3Mjg2OTA4NjAzOThFLTQsMC4wMjA5OTc2NTUwNDE2NjY0MSwwLjgxNTkwNDY2MjQ0MTY2MzcsMjEuMDA5NzQ3NDg1NTI2NCw1LjI0MTUzMDgyMjU1MTU0LDIuNzQzMDMzMDc0NzUxMDI5M0UtNAorOCxUdWUgMSBGZWIgMTEsMS42NTAxNzUwNjQ5NjM5MTg5LDAuOTEyNDg1MTU2NDM3NTAyMiwxLjE4OTc1NzQxMjgwMjMyNzYsNDEuNTg3MzEzMjU5NjE3NjIsMC4xMDU4NzgwODI3MzkwMDc1Niw1Ni42MDc1NTU0NTc5OTgyLDAuMzQ4NzE2OTAwNTkyNTQ4NzMsMTAuMzY4ODc2NDkzNzk3NjcsMzAuNzIzODgxNzk0ODQzNjQsMzQuNzk0ODA3NjMxNzcxNTUsNS40NzM2OTc2Mjg4OTU5NDIsMTIuMTAyMDQyODU5NzgwMzAzLDQuMjg4ODkwMjA1ODIwNzA2N0UtNCwzLjc3MjM3MzkyOTc1NjE0NiwyMS4yOTc1ODcyOTk5MjE3NiwxOTQyLjIyNDQzNTk5NzgxMDYsMjMzLjAwNzYzMTk5OTQ3NTgyLDAuMDA3NTMwNDI5MTg5MzIyMjYsMi41ODE3MTYwMzMwOTk2NzAyLDg0LjIxNDIyMjYwMzA3MTc4LDAuMDAzNTQ3MzA0NTM5ODY2MzM1NSwwLjIxNjIzNjE0OTMzOTQyODgzLDYuNjAyODY0NDg1MzIzODY0LDE0NS42MDQzMzgwMzk5MDkxNSwzMS4zNTQ0MjkwNjQxNTc0NSwwLjAwMjQyMzYyMDM5MTcyODEyOTYKKzksV2VkIDIgRmViIDExLDExLjQzMTYzMjc5MTA3Mjc2Myw2LjM3MTI0MzA2MzM4MDc4MSw4LjY2MjE2MjMzNzUyNTc4NSwyMjAuMzIyNzczMDY2Nzg0OSwwLjg3NjA5NjEyMDQ4NTgwNiwzNjAuMDEzOTcwNzkyMjgzOCwyLjk2NzU3NDkzMDU1NDY2MjYsODAuODMzMjA0NTA0NDA4MjIsMjA1LjYxMTAyMzgzMTM0NjM2LDI0NC41NTk4MzMwODU2MDQsNDAuMTI5NzM1MTMzNTg2NTQsOTcuODYwNDgxNTM3ODc4MjEsMC4wMDQzMTQ4OTE1ODQ3ODM4OTYsMjkuMzU0NTM1NDExMTcxNDEsMTY1Ljc5NzU2MDkwMzk4MjI2LDk5NDAuNTM1NDc4MjgyNDk4LDE1NTIuNjcwODcxODAxOTMzLDAuMDY0NzY1NzA3Mzc1NDkxMywyMC42NzkwOTQ3NDE2NzA0MSw1NTYuOTYwODY0NzEyNjQyMSwwLjAzMTMwOTE4Nzg5NzcxMzY4LDIuMDU0OTE5MTQyMDY1NTU0NCw1MC44NzkzMjQ2NjY4MDQwMjQsOTgyLjA4MjMyOTM1MDU3MiwxODIuODU2NDA0MjMyNzAyMjYsMC4wMTk5MDE3NjA2MDU5MjE1NAorMTAsVGh1IDMgRmViIDExLDc2Ljg0NzU3ODM1MTU5OTcyLDQyLjQ4NDY4MzQ0NTgxOTAzLDYwLjAwMDQ2NzAwOTA5MzQ4NCwxMDUxLjU1MTM2NTM0MjMwMSw2Ljk1MjMwNjE1MjYwMzY3NSwyMjEzLjg0NjY2ODg2NTY4NiwyNC4yNDk1MzI0NzY1ODUxNTIsNjA0LjU0NDA4NDQ3ODM0NiwxMzM4LjA1Mjc0NzQ5NzExNjgsMTY2Mi41NDM4NjczOTI1NTM1LDI4Mi4wNjQ0NzU2MzM1NzQ0LDc1Ni40NDk1NTczMzQxMjQ1LDAuMDQwODQxNTczMzMyOTExODQsMjE5LjU4MDU0NzI1MDE5MDM0LDEyMjEuNzUyMDI1NzAxOTMzMiw0Mjk3MS45MjYyMzgyOTM4LDk0NTMuNDA4MjY0NTk1MiwwLjUyOTYwNTc3NTY2ODU2NzUsMTU4LjU1MDI3MjAzMDAyODQsMzQ0OC42Njk5MTc5NTM3NDUsMC4yNjM2MzQzODc3MDk5ODU0LDE4LjM4ODk5NjA2NTQ4MzY3NCwzNzYuNTcwMjcxODUyMjIxMTQsNjMyNS4wNjc5MjE4NTY0MzIsOTkzLjg5OTU3Nzc1Njc3OTgsMC4xNTQ4NjczMzc0Njg5MDM3NworMTEsRnJpIDQgRmViIDExLDQ3Ni45MjAwNTQ0ODE5OTY4MywyNTAuNTc2OTAwMTk1Nzc1NjYsMzY5LjE2NTE5MjY2NTg5NDY2LDM3NTIuMTYwOTkyMTM1NjQzLDUyLjc4MzU4ODgyNzQ0Mjg5LDEyMzM0LjcxOTU4MDQ2MTY3OSwxOTEuMDQ5ODMxMDkxMDkzMjcsNDIzMi4xNjg4Njc0MTA5MDU1LDc5OTAuMzM1OTIwOTM1OTU3LDEwMjgxLjYwMjkwMzUxNjk4OSwxODAyLjMyNzM3NzQ0MDY2NTMsNTQ0Ny4zMzg5MjI2OTc0MDk1LDAuMzY4OTM2MDA0NzA3ODYxMDMsMTU2MS42MDk0ODEwNjMwMDgsNzgwNS41MDc3Nzg5MTk2NzMsMTI2Njk5LjQyOTIyMzIwMTQ0LDQyNjExLjQ3OTAwNTAzNzU0NSw0LjE0NDIwOTg0ODk5MDg2LDExNDMuNzcwMTQ3NDA1NDg0NywxNjk2MC4yMzcxMDk1MjU4OCwyLjEzMzUxNDEwNjAwNjk2MywxNTYuNTQ5OTQzOTU3MjM4MDQsMjYyOS42Mjc5NzE3NjA2MDM1LDM0Nzk1LjgyNjUxMTg3MTI0LDQyODEuODkzMzQ2NjEyNjI1LDEuMTQzNDI0NDU4ODQ5MDU4NworMTIsU2F0IDUgRmViIDExLDIyNzAuMjYzMzMxMTMxMTI4MywxMTEwLjI3OTA0NzU5NjMzMTgsMTYwMS44NjM1ODM4NTExNjYsODkzMC4wODg5ODc4ODk4LDM2Ni4wODk0OTgxMjQyMzIyNSw1MTM4NC4xNTY3Njk4MDI3OSwxNDI2LjkxMTYwOTM1NTUxMjYsMjM4NDIuMDU1MDk3MjQzNTYsMzU4NzYuMTMwNDMyNTMwODEsNDY1NzUuNTg2OTE2NjgwNTYsODUwOS4wNzU2ODMwOTc4MDQsMzExNjYuMTM4NDQ5ODIzOSwzLjIwODEyOTMxNDY0MzA1OTYsOTU5OS43ODk1ODQ2ODI1NzIsMzMwODIuNjY2NzE3NzkyNSwyNTIzNjEuOTEyOTQ1NDI2NCwxMTU1NTguODE1Mjg4NTUzNDcsMzAuNzY4OTU1MjU5MDMzMzQ0LDcyMTcuOTAwMTE4MjQ0NDksNTE3NDQuODYwNDM0MTA5NDcsMTYuNTIwMTk0NTc4ODYzMDYyLDEyNTQuODgzODY4MTE2MDUzMiwxNTMyNy4yOTUwOTI2MTQ5OTMsMTI2Mjk4Ljg4MDEyMjMxNjAxLDExOTkxLjMzMzIwOTk2Mzk3LDcuNTc4MTU3MjAzODU1OTM0CisxMyxTdW4gNiBGZWIgMTEsNjU4Ni41MTU0NDAwMjI4NDQsMzQxNS4yMTk1OTkxNDkyNDA0LDQxMzcuNzk0OTc0MDU2MTM5LDE1NTg2LjQ2MDIxNjA3MDI0MiwxOTUwLjMxNTY0OTYyOTQyODcsMTMzOTE2LjAwODY1MTI1OTM2LDk0MDUuMjI5NDA2MjUyMTYzLDgxNDAwLjI0MjUyMTkxNjc4LDk4MDQ3LjE5MDM5NzA2MTM4LDEyNTg5Ni4wODUxNjQ0MTE5NCwyMzk0OS4zNTY0MTcyMzAxMjcsMTA2MjYzLjU4Njk1NTU5NzcxLDI2LjcwNzI5MDU2ODk5MTQ2OCwzOTEzMC45OTczODUwNDA1OCw4MTYyOC4yMjE4OTAzNDAwNCwzOTM0NDEuMjU0NjIxOTgzMDQsMjEyNzY5LjcwMjkwMzcwMjgzLDIxMy44Mjc3MTQwMzU2OTg0LDMzMTA3LjQyMzgxMzY1ODQ3LDEwMjU3MC4zNzMxODc2NTYxOCwxMjEuNTAwNDgyNjE3NDA4OTYsODY5OC4xMzM4MjE3NTI3NTIsNTY0NTcuMzkyNDA2MTM4NjYsMjgyMzUxLjY5OTgzOTkwMzE2LDIyODgxLjA5OTUxMDM3NDI2NCwzNy45OTY5NzQ3NDc0NTEzNzUKKzE0LE1vbiA3IEZlYiAxMSwxMjY0MC4zMjQyNzcxOTI4MTgsNzU1OC4xNjIyNjUwMTgyMDEsNzQwMi4xMDM4OTUxODAxOTMsMjI1ODIuMjcxOTg2Njg4MDIsNjIzMC40OTEyNDAzMTI2MzU1LDI0MjU4MS44NTAyMTg0MTA1LDQ1MzE2LjU2MzQzNDcyMTQxNSwxNzEzMzcuMjQ5MTYxODc0NjQsMTgxNTk3LjIzNzI0NTUzMjQ1LDIzMTA0NS40ODE0MzkxMTA3NCw0NTAyOC43MzI0OTIxMjE1NCwyMjI3MjkuNjI1MDE5MjUyMzYsMjA3LjcwNjQ2ODYwNTIyNDUzLDk0MjY2LjI0NjEwMjM0NDM1LDE0MTgzNi40NDY3ODM4ODkyNiw1MzIzNzAuNzgzMjg0NjI1NCwzMTYwNjQuNjQ1Mzg0NDU1NywxMzY3Ljg5NzY0MDM4MDM4NTQsOTE1MDIuMDEyMTAzMzAyNDMsMTU4NzE2Ljg1NTkwODQzMTcsODQ2LjY2NDMxMjQ3MzYyNjUsNDA2NDMuMDc1MTgyMDE0NzYsMTI1NjgxLjI1MzgxNjI2MTI2LDQ2NjQ5OC4wMDIwNTA5ODE3NCwzNDc2Ni43MzQ0NTMxNTI2NSwxMjAuNTczNTg2MjA1MTcxNTEKKzE1LFR1ZSA4IEZlYiAxMSwxOTIxNC4yMDMxMjAzMzI0MSwxMjkzOS42NTY1NzEyMTQ3OTMsMTA4MTkuOTM2NDA5MjUzMzc4LDI5MjQ3LjU5OTI2ODMzMjE4LDEyNjEzLjkwNzcwNzI1NjU3LDM1NzUyNi41MzM2ODUwMjA4LDEyOTcxOC41NTIwNTY5NTk2MywyNzMzNjguMTk1ODMyODgyMywyNzA2OTIuODg5NDkzOTI1OTYsMzQyNTA4LjE4MjY4NjQzMzU1LDY3NjU3LjY5NDk4NDAwMDczLDM1NDQwNy4wMjU4NDExMDEyNSwxNDIxLjczNTM5MjQ5OTcxNiwxNjE4NTguNzUwNjA0MDAzMSwyMDM4NTUuMDcwMzIzOTgyOSw2NjAwNzQuNTc1NDE0MTM0Miw0MTUwMjQuMzgxMzAwMzE4NSw3MTQ0LjU4NTg4MTA0OTMxMSwxNzA1MjUuNzI4NjExNTc1NCwyMTM1NjQuODYxOTgzNDYzMiw1MzgxLjAyNDQ4NzYyMzkzMywxMDgzOTAuMDc0ODEyMzQ1MDYsMjA2NzQ3LjA1MjE3MTY3NjEsNjUyMDU3LjcxMzU1Mzk5OTIsNDYzMDkuNDcyNzIzNTM4NTksMjQ5LjY5MzU0MjgxMzc2MDg3CisxNixXZWQgOSBGZWIgMTEsMjU1ODEuOTAyMDE5MzMyODksMTg2NzEuNDMxODcxMzA5MTksMTQwNjkuMzIwNTY5NDAxODcyLDM1MjU1Ljg4MzMyMTUyNjk4NCwxOTcyMC43MzkxNjU1ODU5NTQsNDY3MzkwLjk5NzQ3ODk5MDQ3LDI0NTk3OS40NzkxNTA5ODA2LDM3NDMxNy41NjEyNjQ0NzA4LDM1NjIwNS4xMjUxMDgwMjcxLDQ0OTE2MC40OTI4NDczNDAyNCw4OTQ1MC40OTc4MTg0Nzk5MSw0ODQ0NzcuMzI1NDQ1MzAwOCw3MzkxLjIxNzE2MjAzMzg0MiwyMzExMzUuMzY5MTIxOTQ1MjMsMjYyMzA3LjE0MjQ2ODA4MDIsNzcyNjQwLjQxNDM2ODkzNjgsNTA0NTI1LjkxMjc0Njg5Njg1LDIzNTY1LjEwMzc5NDY3ODc3LDI1NTA1NC4wMDA0MDc1ODAzMiwyNjM3NDYuMjYxNTI0MjUzMiwyNjQ4Ni4yMjA2NDc3NzE1ODQsMTk2NDE1LjM1MTI2NDM1MjYyLDI4ODE0Ni4xMzUxMTI5NTk1NCw4MjQ4NTcuNDM0Nzg1OTc5Niw1NjgzMy44NTk2NTEyNDc3NDUsMzk3LjM0MTEwNzg0Njg5NDMKKzE3LFRodSAxMCBGZWIgMTEsMzEzNzguOTI4MDQwMTc5NTE1LDI0MTc0LjYwMzA0NzU5MDI5NSwxNjk5NC41NDA1OTM5NTQ4Niw0MDQ4NC45MTI3ODkzNDgxMzUsMjY2ODkuMzk0MDM4OTA5NTg4LDU2NjYxNS44Nzk0OTE2Mzc4LDM3MTIxNy43NDEwNzAyMjU2Niw0NjczNTkuODUzNjg0MTcxODYsNDMzNjI5LjE5OTMyNDU2MzksNTQ1NTQ3LjMxODY3Njg2NjEsMTA5MjIyLjE5Mjg0Mzg2NzQsNjA0MjQ4LjIyNjAwODYzMzMsMjMyNjMuNzU4NDY0Mjc1OTMsMjk2MjUxLjU2NjUzMDk2NjQzLDMxNDY0OC40MzQ4MzU1NTE2Niw4NjkxMzYuNjQ4NDM4MDUzOCw1ODI1ODkuOTMzMzkyMjgzLDQ5MDQ4LjQ3NjIwOTYxNDU1LDMzNjMxMC4zMDY1NzY3NjYxLDMwNzg0Ni4wMzY0MjMwNDM5LDc5NDYwLjk4Mzc2MDM1NjkyLDI4ODkxNS4zNDA2NzAxOTM0MywzNjM3OTguMTI2MzI4NDA5MDcsOTc4NDM3Ljk0NzkzMDkwNjYsNjYwNjIuMTY1NTQ5MTIyOTIsNTQ0LjAxNzYzMzE4OTUwOTYKKzE4LEZyaSAxMSBGZWIgMTEsMzY0NTYuOTYzNTMyNTU3OSwyOTE1OC41NTA5OTQ1NzE2MzcsMTk1MzguMTIxODk4Nzc1NTk2LDQ0OTI4LjAyNzczNDQ3NTc0LDMzMDc5LjEwMjg5MjE0NTU2LDY1MzA4MC44MDcyMzE5ODA3LDQ5MjAzNy44NzkzNzMxMTYxLDU0OTUxMy45NDA3NTE1NDI4LDUwMTIwNy45MjI0NzIyMzQwNiw2Mjk1NzUuMjc0NTg2MjAyOSwxMjY1MDIuNzYxNzIzMTgzNTgsNzA5OTQwLjA5NDM2NDAxOTgsNDY3NzUuODQ5NTIzODYwMDksMzU0NDYyLjc3OTM3OTc0NTk1LDM1OTk5OS41MzEwMTMyMDM1NSw5NTAyNTQuNDYwMTAzOTM2NCw2NDkwMjEuODk0Mzg1MzA0NSw3NzkwNy45NzMyNTY5MzczMiw0MDk5NTAuMzY2Nzk4Nzc4NjUsMzQ1NTcxLjYyOTA1NzAyMywxNTUzNDAuMzQ5NzA4NjE5NCwzNzcwMjIuOTcwMjE5MjE3OTQsNDMwOTUyLjE0NjM1NjQ3NzQ2LDExMTA4MzguMDU5MTk5MjczLDczOTQ0LjQ3MjUzMzQ2Nzc1LDY3OS41MTk1MTc0NjE2NjQ4CisxOSxTYXQgMTIgRmViIDExLDQwNzkxLjMxNjU4Mjc5MzcxLDMzNTA5LjU4Nzg5NTU4NDksMjE2OTguMDQyNTU5Mzc5Mzg0LDQ4NjM5LjMyMjg3NDYxNTkzLDM4NzAyLjM2MzI3MzQ0NDIyLDcyNjYxNC41MjY1MDU1OTc0LDYwMTc2Ni4yNjczMzY3OTE4LDYyMDAyMi40OTM1MDU5OTU4LDU1ODc0NS45NjcyMTU5NjE1LDcwMTA1Ny43OTg4MTAxMzY1LDE0MTIyOS41MzE0MTU1NzM2LDgwMDYxMi44NTA5MTMxMTQ1LDcyODgzLjM2NTg2NTcxNzczLDQwNDg0My4yNzc4MDI0ODA0NCwzOTg0MTMuNzg0OTA1NzQ4NywxMDE3NDgwLjcyMDg5NDY0OTMsNzA0NTcyLjM0NjM5MTgyNTgsMTA2NDM4LjcwMjQyNjczMzIsNDc0MjY2LjExNTEzOTM1NzE2LDM3NzIzNy4zNTEzODk2MjE1LDIzODQyOC43NzA0MzQyODM0OCw0NTY0MzEuOTg2NjI3MTQ5Niw0ODg3OTUuODY4NDg3NDI5NjMsMTIyMjU4Ni4zMjkwMzQxNCw4MDU1My4zMzgwNjU5MDczMyw3OTkuMzQyMzUxNDA5Nzc1CisyMCxTdW4gMTMgRmViIDExLDQ0NDIzLjU4MjM5NzQ2NjE0LDM3MjE0Ljc3NTU5MDA0OTEyLDIzNTAxLjM0OTk3NzY5NTkzNiw1MTcwMC42MTIzMTg3ODQwNCw0MzUxNy41MjA4NzYxNzcyNDUsNzg4MDc0Ljg5NzE5MzU4MzEsNjk3NzM0LjQzMjg4NjcyNCw2NzkzNDMuNTM3MzQ1NzQ5Miw2MDY4NzYuOTEzMjY4NzE3Miw3NjA4MTYuNTA1ODE2OTA3MiwxNTM1NTYuODc0NTY4NzI5MDIsODc2ODc2LjMxNDM1MjY0NDQsOTg0NTAuNjEzNDM1OTI0NzQsNDQ3NDgzLjgyNzY2NzA2MTQsNDMwNDI3LjExNzc3Njc5NDYsMTA3MjYwOC4yMjEyOTExOTQ0LDc1MDQyOS42OTc0MzI0MDQ4LDEzMjcyMi42OTMwMDY1MTI5LDUyOTA0OS42Nzk3MTIyNTgyLDQwMzQ1MC45NzAyODQ4NTgzLDMxOTI0NC4yMjY0MDA5OTIzLDUyNTUzMy40NjczMzk5NTg4LDUzNzU4Ny41ODI4MTYyMDg3LDEzMTU0NzEuMDY2NjY4MDg3NCw4NjAxOS44NzQ0NTc5MTc2OSw5MDIuMjg1MjM2Njc2MTM2NAorMjEsTW9uIDE0IEZlYiAxMSw0NzQyNi44NzY5NDc3MjUzMSw0MDMxNC42NzU2MDQwNTE5MiwyNDk4OC4yNjg1MjU0MzcwNyw1NDIwMi4xNjUxNzAwOTUxODQsNDc1NjIuMDQyNjY4OTQ4NDgsODM4NzkzLjU4MjY2ODg1ODEsNzc5NTU4LjUxMTY1ODgyMjksNzI4NTM1LjM2MzQyOTUzODcsNjQ2NjIwLjE3NzgyNzQ5NzcsODEwMTM4LjU1MTYxNzM5OTgsMTYzNzQxLjAzOTE4ODMxNDY0LDk0MDEwMy45MTQ0ODE5OTI4LDEyMTg3Ni40MDg3NzU3ODI3Nyw0ODI5OTguNjg1Mzg5MjE4NCw0NTY3ODcuODE4OTczNzA4LDExMTc0NTcuNzYxNjY4NTc2Niw3ODc5MjMuNTMyNDA0Njc3NiwxNTU5MjQuMDU5ODA3NjcyNTEsNTc0ODkwLjg1MzA0NDMzMTQsNDI0OTI4LjcxNjQyMzc4NzQ3LDM5Mjk5Ni4xMzg5MDMxMjEzLDU4NDI0My4yNzI0MTU2MTkzLDU3ODEyNS4wMDkwMDgxNDE1LDEzOTE4MDYuNDEyODE2NDI5LDkwNDk2LjExNDMxNTU4MDU1LDk4OC45NTgyODM2NzY1NjQxCisyMixUdWUgMTUgRmViIDExLDQ5ODg1LjM5MTg0NTUwNTA4LDQyODc0Ljc3ODk3NTkyMTgsMjYyMDIuOTQzODg3OTY1MDgsNTYyMzIuMDM2NDQxOTA0NDgsNTA5MTEuOTEyNzEyNTc3ODksODgwMjUxLjY1OTQyMzgyOTYsODQ4MDc0LjMxNzAxMTMzMTQsNzY4ODkxLjY5MjY1NzM4MTUsNjc5MTIxLjYyMDgxNzU5MjcsODUwNDU5LjQ2MTI1MDU3ODgsMTcyMDcyLjYwNjQ0NTM1OTYsOTkxOTY2LjU4MzgxODQwNDEsMTQyNDgyLjQxOTkxODI2MjA1LDUxMjIzMC4wNzIyMDA3ODM2LDQ3ODMwMC4wMzY5OTE3OTgzLDExNTM3MzEuMTE5MzU5MjU1OCw4MTgzNTkuNTAyMDk5ODc2NSwxNzU4MzIuNjI2OTA0ODk0OTIsNjEyNzUyLjE4MzM5NjY5MzksNDQyMzkwLjgzNTMyOTAzMjksNDU3NzAzLjEzMTIwNjY4NDM0LDYzMzI3OC42NzQ0NjkyNjk3LDYxMTQyOC42ODQ3Mjk0NjY2LDE0NTQwMTAuOTYzNTk5MDgzNyw5NDEzMy44NDUzMjM2NjU2NCwxMDYwLjg3MTM3NzI2NjUzNjIKKzIzLFdlZCAxNiBGZWIgMTEsNTE4ODIuOTE3NDM3NjU4MTIsNDQ5NjguNzc1NzkxNTg5MDYsMjcxODguMzI3NDA1NjA0MDA2LDU3ODcwLjY2Mzc5OTY0MzQxNSw1MzY1Ny42MjkxOTE4NTYzNyw5MTM4OTkuNDQ4ODc3NDU0NSw5MDQ2OTIuNDY5OTM0MTExMiw4MDE3MzQuMTA3OTQ0MjI1Miw3MDU1MDguOTY1NTQyNjkwNiw4ODMxODYuODAxNjM3NTEwMSwxNzg4MzguNzQxNjU4MDQ4MywxMDM0MTY3LjgxMjg3NDE0MjQsMTYwMTIxLjM5NTE2MTY4OTg0LDUzNjA3Ny4zMTA1NTE1NDYsNDk1NzM4LjA0MTA5ODc4MTYsMTE4Mjk0My4wNjI1OTk3NTA3LDg0MjkzNC45Mzk2MjU2MjA3LDE5MjU3OS45Njc4MjAwNjYxNyw2NDM3MjAuMDExOTQ5NDE1Niw0NTY1MDYuODA0MTAzMTM1MSw1MTI5OTQuMzA5ODg2NjUxNDYsNjczNzIyLjMwMzc5MjY0MTEsNjM4NTYwLjQ3ODgzNjExOTIsMTUwNDM4MC4yOTY1ODQ2MTIyLDk3MDczLjU4NzE5NDAwMTIzLDExMTkuODkyOTE3MzYzNTg4CisyNCxUaHUgMTcgRmViIDExLDUzNDk2Ljg4NDg5NTY5OTU4LDQ2NjY5LjIyNjUyMDcxMjcwNiwyNzk4My41OTQ3ODI4NDk0NjUsNTkxODguNjA2MzAyNzcxOTUsNTU4OTAuNjE5NzMyMDU2NjgsOTQxMDY0Ljc3ODI4NDc5MjgsOTUxMDE5Ljg5MTgxMTMyOTQsODI4MzAxLjcyOTcxNTc2NCw3MjY4MTcuNzAxOTA0NDgzNSw5MDk2MTAuMjQxOTUyMTEwOSwxODQzMDMuNzUxMjMxNTAxMywxMDY4MzAzLjA0OTE4NzQzOCwxNzQ5MzMuODY0MjQ3MzAzNiw1NTU0MDMuNTA2NTkzNDUzLDUwOTgwMy42ODExODEzMzQ5NSwxMjA2Mzk5LjU3NzQyMjkwOSw4NjI3MDIuNzcxMjk1NzQ3NywyMDY0NjYuMjQyODMwMzA4MjcsNjY4ODY1LjUyODg2OTM2MjgsNDY3ODcwLjQ2OTY4NzE0MzEsNTU5MzY1LjkyMTY2NDk3MTcsNzA2NzY3LjkxMzI5MDY5NDYsNjYwNTI1Ljg4NjY2MTg2LDE1NDQ5NzcuMzEwMTEyODU4LDk5NDM5LjY2NjA2MTU2NDU4LDExNjcuOTQxMjAwODEzMDM1NworMjUsRnJpIDE4IEZlYiAxMSw1NDc5NS43MjM3NDQ0NDkwOCw0ODA0Mi43Nzc5NTA0NDYzNywyODYyMy4wNzU5Njg4NTkxNjQsNjAyNDYuMDg4MTM4MjczMTMsNTc2OTYuMDg2NDQ2MzcxOTMsOTYyOTE0LjA5MjI2NjE2OCw5ODg2NDcuOTY5OTMwMzk0LDg0OTY5OS43MDAxODgxNTUzLDc0Mzk1OS4xODU3NDg3MTg2LDkzMDg2My4yNjc1Mjg0NTk4LDE4ODcwMC42MTM1MjkyNjcwNSwxMDk1Nzk0LjI2MDE4NDkxNiwxODcyMDAuMTM5OTAyNjQ0LDU3MDk4OS41MjAwNDI2NjU4LDUyMTEwOS40OTg5MDA3MzE1LDEyMjUyMDEuODAyNTcyNDQzLDg3ODU2My4yNjY1Mjc1NjA0LDIxNzg1Ny41MTgxNzMyMjEzMiw2ODkxNzMuMzk4MDM5OTQ1Niw0NzY5OTIuNjE4MTE2NjgwOTQsNTk3NzMwLjA2NTQ2NjQzOTEsNzMzNTc5LjYxMTY5NjgyNjIsNjc4MjI3LjE4NzI2NzAxNjIsMTU3NzU5Mi4wNTU3MDc0ODAzLDEwMTMzOC44MzA4NzE2Mjg5OCwxMjA2LjgxOTc2Njg2NTQyMDcKKzI2LFNhdCAxOSBGZWIgMTEsNTU4MzguMTQyNjA5ODY3MjEsNDkxNDguMTAwMjA3MTY0NTMsMjkxMzYuMDUxODI2OTA2MTUsNjEwOTMuNTE3NTgzODM0MzA2LDU5MTQ5LjcyOTIwOTA1Njg1LDk4MDQ0My45ODU0NjU3NDUxLDEwMTkwNDMuMTg0NTYxMzM1Niw4NjY4ODIuMTIwOTc1OTY1Myw3NTc3MTMuMDg4ODc3ODk5Miw5NDc5MTQuNjQ2MzkzMDExMSwxOTIyMjguODU1MjAxODU3NzIsMTExNzg2OC41MDEzOTE2NTcyLDE5NzI1Mi44NzQwMDUxMzI2LDU4MzUxNS45NzQzMzgzOTg1LDUzMDE3Ni40NTg5OTU1NTA2LDEyNDAyNjMuMDk0MjY5ODE5Niw4OTEyNzAuOTE4OTc0MTk3OCwyMjcxMjcuMzczMzgzNTkyNCw3MDU1MTAuODU4MDk3OTQzNCw0ODQzMDMuMTgzMjg1MDk0NzQsNjI5MTQ4LjgxMjYxNTU0OTksNzU1MjIwLjU5ODcwNzc3OTUsNjkyNDQ2LjU2NTY0NDE3MDIsMTYwMzc0MC43NzA1MjU4MiwxMDI4NjAuODE5MjUwOTU1MTksMTIzOC4xMzk5MDIxNTM4MTA3CisyNyxTdW4gMjAgRmViIDExLDU2NjczLjQ2NjE4MzI4ODIsNTAwMzUuMzk0NDc0MTAwNTEsMjk1NDcuMDE4MDIzODM4ODgyLDYxNzcyLjQ3NzEzNjcxNTI4LDYwMzE2LjczMjE5MTIzMDc0NSw5OTQ0ODkuMjMwMTcyNjM1NiwxMDQzNDk5LjE5NzkyNzAwNjgsODgwNjU0LjIxNzI3NzgzMjQsNzY4NzMzLjEwODg5NjQ1MjcsOTYxNTc2LjA0NjY3NDYxMzgsMTk1MDU1Ljg5NDI3OTA4Mjc3LDExMzU1NjEuMDE1Mzc5MTA5LDIwNTQyNy42MDcxNzI0MjczMiw1OTM1NjEuMjE0MTI1NTg3NSw1Mzc0MzkuNDc2NTU3MTk4LDEyNTIzMzEuNzAwMTkyOTEzLDkwMTQ0OC43MjMyNDcwNjE4LDIzNDYyNS44ODg2NzIwODkyLDcxODYyMC4yMDM2MTI2NzMzLDQ5MDE1OC4zMjU3MDI2NTgzMyw2NTQ2ODQuNTIwMzgyNTI5OCw3NzI2MjMuMzc3MTYwNDQwOCw3MDM4NDYuMTA1NTA5ODI4MywxNjI0Njg1LjQzOTUxNTU2MDYsMTA0MDc5Ljg5OTYyNzQ4OTk3LDEyNjMuMjk0MjkyMzUzNzU5NgorMjgsTW9uIDIxIEZlYiAxMSw1NzM0Mi40OTg4NzAyMTI0Niw1MDc0Ni43NTYyNTY5MjY5LDI5ODc2LjE3MzUzMjM2NTA4Niw2MjMxNi44ODczOTkxOTQwOCw2MTI1Mi4wMDU1NjIwNDA1OCwxMDA1NzM4LjgyNzY5MzY0MjUsMTA2MzEyNC41MTc2NjM3OTU1LDg5MTY4NC4zNzg5NDkxNzMxLDc3NzU1OS4xODMzMzg2MDU2LDk3MjUxNy41MjgxNDEyNjU3LDE5NzMyMC4wOTQ3MDc3NjYzLDExNDk3MzAuOTA3Nzg2MjM3OCwyMTIwMzYuNzU5ODAwMDU4NSw2MDE2MDcuNzM0ODY2MDQ1NSw1NDMyNTYuNjEwMjg2OTY2LDEyNjIwMTQuNzA5NDI3MTk4LDkwOTYwNS4yNzEyNjg0ODczLDI0MDY2NS4xODY5NzI2NDg1LDcyOTEyNC4wMTcxMTgzODA2LDQ5NDg0OS41MzcxNTkyMzQ1LDY3NTMyMS43MjIxNjEzNDYsNzg2NTgzLjc4NjQ4MzcxOTEsNzEyOTc2LjU4NzY2NjkxNjksMTY0MTQ2Mi42NDY2NDcxNjk1LDEwNTA1Ni44MTA1MDI2ODA0NCwxMjgzLjQ1OTI4OTg1MTk1MTMKKzI5LFR1ZSAyMiBGZWIgMTEsNTc4NzguNjAwMzk2NDgzMjksNTEzMTYuOTU4NjkwOTk3ODgsMzAxMzkuOTkwNzczODAyMjMsNjI3NTQuMTc2OTY2MjcxNjksNjIwMDEuMDY0NjU5MTE2ODg0LDEwMTQ3NTUuMDc4MzA0NjE0OCwxMDc4ODQ5LjYyNzAwMzM2NzMsOTAwNTIwLjQ3OTEzNjk5MjgsNzg0NjMyLjIwODgxNDcxNDYsOTgxMjg2LjAxNDg0MTk5MTEsMTk5MTM0LjQ5MTY3NTg4MzgsMTE2MTA4Mi4yNDUzNzExMjM4LDIxNzM1Ny43NTY2ODI0OTY4Nyw2MDgwNTIuNTY1NTg1ODQyNCw1NDc5MTkuNDk5MzUxNTQ4NCwxMjY5ODAwLjkyNDU5NjQ1NSw5MTYxNTIuMDc0OTYwMTYxLDI0NTUxNC42NzE0MDgzODk2LDczNzUzNi42NzQ2NTg3MDc1LDQ5ODYxMy4xMzk1NjkwNjUxLDY5MTkzMi4wNzc4NTY1ODE3LDc5Nzc2Ny45MDQwNzUwNTksNzIwMjkwLjI0Mjk1OTYwNDQsMTY1NDkxNS4xNzI1NjU5NTY4LDEwNTg0MC43NjU4Mjc0NTM2MSwxMjk5LjYxMTk1MjAzNDY5NzIKKzMwLFdlZCAyMyBGZWIgMTEsNTgzMDguNzkzNjYyNTE1NDU0LDUxNzc0LjM5NzQ3ODAxMjAyLDMwMzUxLjc4NjgyMzU1MjI1NSw2MzEwNi4zNjk4Njg0NzI1MSw2MjYwMS4xNzc4MDMyNDU0NzUsMTAyMTk5Mi44MzU3ODQ5MDk3LDEwOTE0NDMuNzU1MzExNDQ0Miw5MDc2MDcuMjM2MDUzNzYyNiw3OTAzMDguOTk0MDQyMDcxLDk4ODMyMy45NzcwNDAzODYsMjAwNTkwLjU5NTA3NzA1MzczLDExNzAxODYuNDQ1OTcxMDQxMiwyMjE2MjkuMzk0OTcxNjUzMjcsNjEzMjE4Ljk1ODMyMTMyMjIsNTUxNjYzLjY4ODc4OTY1OCwxMjc2MDgxLjUwMjU0MTk5OTgsOTIxNDE5Ljc0NDc1OTExNiwyNDk0MDEuNjcwNDQyNjUzNzMsNzQ0Mjc4LjI4Njk2OTEwMiw1MDE2MzkuMjk3Mjc4MzczMDQsNzA1MjY0LjM1NjMwMTM5MjksODA2NzI1LjE1OTQ4NjIwNCw3MjYxNTQuNjM5OTgxOTg0OSwxNjY1NzIyLjcyMzI3OTE4NCwxMDY0NzEuMzQ4NDA1NDA4MDIsMTMxMi41NTM1NDE3NDkxMDg1CiszMSxUaHUgMjQgRmViIDExLDU4NjU0LjgwODc0Nzk3Nzg2LDUyMTQyLjA1MTgyODg0OTksMzA1MjIuMjUzNTY5NjMxMDQsNjMzOTEuMDUxMTI1NDIyOCw2MzA4Mi41NzA3MDE3NjU2MywxMDI3ODE3LjQ1NzIyMzIwOTksMTEwMTUzNS40NTc5MjE1MjksOTEzMzAyLjg1NDkzNTE5MzQsNzk0ODc2LjI0Njc2OTMyMzEsOTkzOTg2Ljg2MjE1OTIzMDQsMjAxNzYxLjk1NzIwNTM5NzQsMTE3NzUwMy43MTI1MDY0NDQ0LDIyNTA1Mi43NzkzNDQ5MDAwNSw2MTczNjcuOTA4MDkyNzU4OSw1NTQ2NzguMTQ0NTYxNTg4LDEyODExNjcuOTI2OTkzMDQ4Myw5MjU2NzIuMzkxNzAyMDA0OSwyNTI1MTQuODU4Mjg1ODY4ODMsNzQ5Njg4Ljg5NjU4NTUyMDUsNTA0MDgwLjExODc3OTQ5NzA1LDcxNTk0OC4yMTI3OTM2NTk3LDgxMzkwMy43MzU3Njc3NDM3LDczMDg2Ni4xNTM0ODU4MzIyLDE2NzQ0MjkuOTY2NjE0NzYyOCwxMDY5ODAuMjA3MjE0MjMyNDYsMTMyMi45MzQ2OTM1OTY3NTkKKzMyLEZyaSAyNSBGZWIgMTEsNTg5MzQuMDE3NTAyMDMzNjEsNTI0MzguMzgzODU3OTk0NjYsMzA2NTkuOTI3Nzk2MDc0MTEsNjM2MjIuMTk4Mzk0NDk4OTgsNjM0NjkuNTcyNjQ2Njg4Nzg2LDEwMzI1MjAuNzYzNzY2MDU2LDExMDk2MzMuNjg0OTc3MTk5Niw5MTc4OTQuMDgxNDkyMTk4OSw3OTg1NjMuMDM3MTA1MDY4OSw5OTg1NTguNjAyMTU3MDYzNSwyMDI3MDcuMzU3NDY5NzkzNjcsMTE4MzQwMi40MDYwMTM3ODg3LDIyNzc5NC41NzI3MTI5Njk4NSw2MjA3MDguNzQ1MDEzOTkzNSw1NTcxMTMuNjUxNzMyODg3NCwxMjg1MzA3LjI3NjE5NjI2MDUsOTI5MTIwLjA1MDg2NTM1NzIsMjU1MDA4Ljg3NDUwNzE1Mzc2LDc1NDA0MS43NzQzMDg1NzA3LDUwNjA1Ni42OTE5NDM1NzA2LDcyNDUwNC44OTExOTEwNjM5LDgxOTY2Ni4wNDI2Mzk2MDk1LDczNDY2Mi4yMzI0NDU3NzksMTY4MTQ3MS4xMTg0ODY3NzIzLDEwNzM5Mi41Mjg2NTc2NjAxOCwxMzMxLjI3OTYxNzUwNzcyNzYKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvTm9uWmVyb01vcnRhbGl0eVJhdGVfUktfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL0VfMC5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L05vblplcm9Nb3J0YWxpdHlSYXRlX1JLX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9FXzAuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJjMjQ0MDEKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L05vblplcm9Nb3J0YWxpdHlSYXRlX1JLX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9FXzAuY3N2CkBAIC0wLDAgKzEgQEAKK2l0ZXJhdGlvbix0aW1lLApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Ob25aZXJvTW9ydGFsaXR5UmF0ZV9SS19SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vRV8xLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvTm9uWmVyb01vcnRhbGl0eVJhdGVfUktfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL0VfMS5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmMyNDQwMQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvTm9uWmVyb01vcnRhbGl0eVJhdGVfUktfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL0VfMS5jc3YKQEAgLTAsMCArMSBAQAoraXRlcmF0aW9uLHRpbWUsCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L05vblplcm9Nb3J0YWxpdHlSYXRlX1JLX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9FXzIuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Ob25aZXJvTW9ydGFsaXR5UmF0ZV9SS19SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vRV8yLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NmQ4MmZlCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Ob25aZXJvTW9ydGFsaXR5UmF0ZV9SS19SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vRV8yLmNzdgpAQCAtMCwwICsxLDMzIEBACitpdGVyYXRpb24sdGltZSxFRy1GUkctRzIxMDAwMSxFRy1GUkctRzIxMDAwMixFRy1GUkctRzIxMDAwMyxFRy1GUkctRzIxMDAwNCxFRy1GUkctRzIxMDAwNSxFRy1MT0UtRzI0MDAwMSxFRy1MT0UtRzI0MDAwMixFRy1MT0UtRzI0MDAwMyxFRy1MT0UtRzI0MDAwNCxFRy1MT0UtRzI0MDAwNSxFRy1MT0UtRzI0MDAwNixFRy1MT0UtRzI0MDAwNyxFRy1MT0UtRzI0MDAwOCxFRy1MT0UtRzI0MDAwOSxFRy1VUEUtRzI5MDAwMSxFRy1VUEUtRzI5MDAwMixFRy1VUEUtRzI5MDAwMyxFRy1VUEUtRzI5MDAwNCxFRy1VUEUtRzI5MDAwNSxFRy1VUEUtRzI5MDAwNixFRy1VUEUtRzI5MDAwNyxFRy1VUEUtRzI5MDAwOCxFRy1VUkctRzMwMDAwMSxFRy1VUkctRzMwMDAwMixFRy1VUkctRzMwMDAwMyxFRy1VUkctRzMwMDAwNAorMSxUdWUgMjUgSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzIsV2VkIDI2IEphbiAxMSwwLjAwMTUyNjI3MDE5NzQ4NTc1MSwzLjYyNTg5MjM1MjA4MTY0NzZFLTQsMi44NTE1NDMxMDQxNzY4NzEzRS00LDAuMTg1OTkxNjU5MjE5MzMyMzMsMS4xNDAyNjExMzQ2Mzk0MDgxRS01LDAuMDg0NDU5NjUyMjExMDYzOTEsMy4yNzE3ODk1NTY4MTE2ODlFLTUsMC4wMDE2NzE4MTE2MzMyMzU2ODk4LDAuMDM3MTMzNDAwMjUwMDQ0MzksMC4wMjg4NzExODk4OTA2NjkxMSwwLjAwMTM1ODM2NjI3OTAzNzI5MjgsMC4wMDE0OTUwNzMzMTM2MzY5NDgsMy42NTA2Nzg3NDk4Nzc1N0UtOSw2LjA5NzAzOTI4NTI1NDY2M0UtNCwwLjAwNDQyNzc5MTI4MjEyMTcwNywxMy4xNjMxMjgwNjc2NzQwMjksMC4yNTAyNTM3MDE2OTY4MDg0LDEuOTU1NTIxOTkyMDU0NTMxN0UtNywzLjUxMjUwMjg0MjAyOTQzM0UtNCwwLjA5NzkzOTg4Nzc1MDc5NTU1LDguODkzMjQzMzU0MTcyODRFLTgsMi41NzA5OTIxNzU3MTcyMTQzRS02LDAuMDAxMTQyNjU1MzkzNzcyNTg0NCwwLjE1NDM2MzE4MjMyNjg2MjE0LDAuMDc3ODQ4OTEyNzUzMDExODgsNi43ODU4MjcwOTEzNzQzNDJFLTgKKzMsVGh1IDI3IEphbiAxMSwwLjAxNTE0MDU4MDcxNzMyNzk0NiwwLjAwNjE2OTYyNTU0NjcyMzU1LDAuMDA1NjYwNjkwNzM4ODkxMDc2LDEuMjUwNzMwNzg0NTU1ODI0OSwyLjY5NzkwOTgwMDk4MjA5MDNFLTQsMC43NTQ1MzQyNjI4MzkzNTQzLDcuOTE4OTYyNTgxNjAyNDg0RS00LDAuMDM2MDMyMDY2NTg1MDU3MDc0LDAuMzQzNTQxOTcyMjAwNDE4NCwwLjI5NDY4NTg2ODIzNDcyMzMsMC4wMjY1NDcxMTUwNTg0MDM5MSwwLjAzNDMwNTMzOTk1Njg2NDQ5NSwyLjUxMjE5MDIzMDk5NTg2NUUtNywwLjAxMzE1NDkyOTExNjQ1NDQ4NiwwLjA3OTIyMzQwMjAyMzk1Mjg3LDcxLjYyODczOTk4Nzg0NjUzLDIuNDAyNDI5OTU0MDYzNjcwNCwxLjA0ODk2MzExNzI0Njg2NDZFLTUsMC4wMDc4NDQ1NTE1MjYxNTc4MzMsMC45MjI4NDI4MTMzNTM0MjE4LDQuNjQwNzQ0Nzc5NjU2MTk4RS02LDEuNjYwNjU3MzU1OTg3Mzg2MkUtNCwwLjAyNDIzODQyOTU1Mjg4NjMwNSwxLjQ4NDkyNTUwNDM1MTQ0ODIsMC42MTQxMTA3MzE4MDY2OTA4LDMuNzY2MDU2OTU5MjA3MjY5NUUtNgorNCxGcmkgMjggSmFuIDExLDAuMTI2NzAxMjI4NTgxMzYyNjgsMC4wNjEzOTA4NjI3MDA3NTgyNzUsMC4wNjQwMTkzODA0NjQxNTIzLDcuNDQ3NjA2ODAyMDEyODg3LDAuMDAzNjE5MTkxOTMxMDcxNDIzLDUuNzIzNTc2MzQwODc4MzExLDAuMDEwOTA2NzA4NTAzNzg0NzksMC40NDI4MDI4MjQ5Mjc0NjExLDIuNzA4MTMwNTMwNjg1OTM5MywyLjUyNTY3NjQ4MDQ1ODg0OSwwLjI5NjU5NDU3MzE3MDY4MTk0LDAuNDQ3MTMzMjY3MTY3MjA2NDcsNS44MTkzODcyNjg3MjUzNUUtNiwwLjE2MTcwNTE2Nzk4OTM0MzMsMC45Mjk1ODQwMzA0NTM2NTAzLDM4My40MjkwNDQwODUwMTA4LDE5LjUwOTQwMzMxMDQxNTEwMiwxLjkwOTA1ODE0OTIxNDY5MkUtNCwwLjA5OTkwNzI1NDQ4MjE0ODkzLDcuMzY3MDA5NjA5MTU5MzMsOC40ODQ3Mjc4MjY0MjQzMDFFLTUsMC4wMDM1OTM2NDkxNTU4NDQ0NSwwLjI5MzQ0NzUxMzM4NDAzODMsMTIuMDgyNzI2Mzg2MjM5MDMxLDQuMTcxOTE1MDgzNDgwOTg1LDYuODM0MzYxOTc1MjIwMTc0RS01Cis1LFNhdCAyOSBKYW4gMTEsMC45NzQ4Mzg1MTM2NTc4NzYsMC41MTAwNDUxNzg4MTMwMDI3LDAuNTg1OTgwNDQ4NTU1NzgyMiw0Mi4wOTA4NDA1MTA5NzE3NCwwLjAzODgwMjM1MjgxODYyNTI0LDQwLjA2MTY4NDA3MjUwOTk1LDAuMTIwMjQ1MTU1NTgxMjg0NzIsNC4zODY3OTc2NzE2ODIzODcsMTkuNzcxNjYwMjQ3ODc0ODcsMTkuODQxNjAwNjk2OTA3NjczLDIuNjk0MzQ2MTI2MDg1ODAxMyw0LjY2ODUyMDI2MDA3Nzc3NCw5LjA0ODI1NDQzMDU0Njc0MkUtNSwxLjYwMTE4Mzg0MTM3MjE3NDQsOS4wNjI1NDM2NzU0MjQ2NDYsMjA1NC44Mzg5OTYzOTI2MDU2LDE0NS44NjA2NjExOTE4NjQ5LDAuMDAyMzgwNzUwMDU4NTIxNDY2NCwxLjAyMzkxNTU3MTQ4MTMyNDQsNTQuMjA0NTYwODcwNDI5MTYsMC4wMDEwNzIwNjA3MDI0NTgwNDQ1LDAuMDUyMjc3Mjg4Njk0ODc3NTg0LDIuODY3NzYzNjcyMzg5Nzk1NSw5MC41Mjg1MzMxNzUwMDEyNywyNi40MDY5OTkwMjQyNzQ2OSw4LjMzNzQyMjAyNTQ4MDQ0MUUtNAorNixTdW4gMzAgSmFuIDExLDcuMTQyMzM5NzkwNjgxMDI2LDMuODg0NTg2MTk5MzMxMjE0Nyw0Ljc5NjE3NTQzNTk3Njg5MzYsMjMyLjI5MjMxNzc5NzA4MSwwLjM2Nzg3MDI1OTM5MTMyNjgsMjY3Ljg3NjAzODM5Mjk4Mjc2LDEuMTczMDU4OTMzNDY1ODA0NCwzOC43MDkzNjQzNjk1NzIzOSwxMzguMzcwMDM2Njg5NTg4OTEsMTQ4LjA5NTM0NzU3MTEwMjAyLDIxLjk5NjY4MzQ0NTUyNDg0NSw0My4xNzU3NjI3OTAwNjU0NiwwLjAwMTE0MjkzODMxMjI3NjkxMSwxNC4xMTE0MjA3MDc3MjU4OTEsNzkuNTQ3OTA1NzEzNTA3NzksMTEwMjEuMDczOTEyMDEzOTU1LDEwMzkuMTkzOTYyMjM1NzM3MiwwLjAyNDY1MTEwOTY5MzIyNjMzLDkuMzI4NTczOTkxNjU0NDY3LDM4MC40OTQ3MTM5NzcxNTY2NiwwLjAxMTMwNTc1Mzk2Mjc0NDg1NCwwLjYxOTQzOTQ0OTYyNjcxODUsMjQuOTgyMDYyMTg4NTg3OTYsNjQ2LjU3ODk3NjI5OTIxNDgsMTYxLjA0NjM4MDQ0NzgxLDAuMDA4MzQwMjI4ODE5ODgyMzYKKzcsTW9uIDMxIEphbiAxMSw1MC42Njk1MDIwMzI2OTczMywyOC4wODA4NzI5MTUwNTcwMSwzNi42MjgwMTQ4MDIwNjc4NywxMjY0LjA1NjM0MTk5MTY0NTUsMy4yMjI2MDc5NTI5MTU4NjYsMTczOS42MDczODI1MzM3NTc2LDEwLjU3NDk2MjgxMjU0MDg3NywzMTcuNTA4OTg5OTU0MjM1Nyw5NDMuMTcyMjgwMzkzNzk2MiwxMDY4LjEwNTEzMzQ2NjI2NiwxNjguMjkxNTc5MjU5Mzk0MzUsMzY5LjMyNjU0OTQzNTc1NTk2LDAuMDEyNjc4MzMyOTgwMzc5MTAxLDExNS41NDc0NjMxOTc0MDY4MSw2NTEuOTQ0NzA1NzkwNzM4Niw1ODg5My4xNzMzMzc3Mzk1MTQsNzE2Ny4wODI1MTY5NzM1MTQsMC4yMjg1ODk5MzAxMTAxMDM3Niw3OC44NDgwMjA2MzExNTg5MiwyNTg5LjM0NTgwMjIyNjIwMDIsMC4xMDcyMjA4OTEzNjA4OTQ1OSw2LjQ2MzEzMjIzNjE1NDg0OCwyMDIuNDEyNDc1ODUzODY3MjIsNDQ3NC42NTYxMDM3MjI2MDIsOTYwLjQ1MjAzMTM5NjMwNjksMC4wNzQwOTA3NjMwODQ0NDQ4MworOCxUdWUgMSBGZWIgMTEsMzUxLjA2OTQ1NDQ1Mjg5NjEsMTk2LjA2OTIyMzU5OTY4OTM3LDI2Ni43Njc3MzcxMzcwNTg3Niw2NzM5LjQzMjQ4MzIwODAwNywyNi43MjY3MTg3NjI1ODE3ODYsMTEwNjAuNDU2MTQ0NzI4NDA5LDkwLjI0Mzc4MzAyODY3MjY0LDI0NzcuNTY5NzY1OTM1MzUyMyw2MzExLjc2NzkyOTA1NzAyOCw3NTEwLjY2NDMzMzA5NDQyMzUsMTIzMy42MTA1ODc4NjI1Mzc4LDI5OTIuNTYwMzA3MTQzOTQ2LDAuMTI4NzYzNDQ1OTUwNTE5Myw4OTkuODA1MTk1MDEyMjY3MSw1MDg3LjI2MjY1ODI2ODY5NywzMDU4MTUuNjg3MDk1OTU0Niw0ODAwNS4wMzQ3NjcyMDg2NjUsMS45NzI2MjY1OTA3NzAyNDA3LDYzMi43MDk3MzUwNDk2MDQ3LDE3MTczLjk1MjAzNzg2MjQxNSwwLjk0OTcyOTM1NDM4MDI0MzQsNjEuODg4NjE4NTcwMDUyNDIsMTU2MC43Mzc1MTUxOTY5NjYzLDMwMjE5Ljg0MTE2NTQyMjkxNyw1NjE3LjE4MTMxODc2NTgxLDAuNjA5NjY1NTcyMDA2NDAxNQorOSxXZWQgMiBGZWIgMTEsMjM3My4yODY1MzQ2NTUwNTksMTMyMC42OTMyMDU2ODgwMTE5LDE4NjIuMzI5NzgxODU3NDg4NiwzMzAyMi41ODQ0MDkzMDE3MywyMTIuNjYzMDQ4NzQ0Mjc5NzMsNjg1MDEuOTI5NDA1MjMzMzksNzM5LjIwOTQ0MjA1MzA3MDgsMTg1OTYuMDE5ODY3NjQ4MjA3LDQxMzQyLjMxMzkzNjgyNTQ2LDUxNDEyLjc4OTAzOTkxNjI2NCw4NzIzLjAyNDcwNTA0NTEwMiwyMzIzNi4zMzEwMDU1ODU2MTYsMS4yMjY1NzgyODAzMzI0NzEsNjc0NS41Mzk2NDc4Nzk3OTQsMzc5MTUuNjAyMTM5NzAwMzUsMTM2NDU3NC40MjQyODkwNDM4LDMwMTc5My4yOTk4ODMzOTU1NSwxNi4xNzQ3MTEwNzIyODU2OTIsNDg3MS41NzU5ODA0OTI1MjksMTA4Njk1LjU0ODcyMTcyNDI4LDguMDE5ODc3NjI1MDA1Mzk0LDU1Ni44MDYwNjQ4OTY4MzY2LDExNTgzLjA2MTQyMDk0OTA3MiwxOTcyMjIuNzI5MTE0ODI4NDMsMzExOTkuNjg3NzE0MjczNzA3LDQuNzU0NzMyOTIyMjM1ODU5CisxMCxUaHUgMyBGZWIgMTEsMTUxMzkuNjMzNjMzNDc3ODU5LDgwNzguNTQ5MTQwMDE1OTYsMTE5MjkuMDIwNTE0MjkyNTUyLDExNDY3MS4yNjgxNzI2NjU1NiwxNjI2LjY0MDY2NTg0MDk1ODUsMzkyODczLjYwMTYyNDU4Njg1LDU4NDYuNTQ1MTg3OTg4MjA5LDEzMjgxNi4zNDgxNzY1NjIzNywyNTQzMzkuMDUyMzYxNTc5NywzMjkwMzIuMDM2OTkwOTQzNCw1NzYwMS40MDUyMzA0ODU5MzYsMTcxMDM0LjMxMTg4MzI3MTg4LDExLjExOTY2OTI4MDYyMTI0NCw0ODU0MS4xMDEwOTg2NjQ0NSwyNTU1OTkuMTAwOTgyOTYwNTIsMzQ1OTc1My4wMzM4MjY2MTc1LDE0NDIxOTUuOTIwNjM1ODUxLDEyNy4xMTAxMzE1NjM1NDY4MywzNTY1Mi43OTQ2NDI1NTE0NCw1NjgyMzIuNjc3MDYzMDI4Niw2NS4xNDUxNDc1MTgwODY3Nyw0NzY0LjI1Mzc5NjczMTkyLDgyMTU3LjMxNzU5NjA3MDQ3LDExNDMyMTAuNTU1MDA5Mjg4NywxMzg4MDMuNTE5OTQ1Nzg2MjIsMzUuMzYzMDg5MDU0MworMTEsRnJpIDQgRmViIDExLDc2NTkwLjMyMjM0MTc2ODU0LDM1OTc3LjAwMDE2MzE0NTk0LDU0Mzg1LjUwNDAyMzA4OTc5NCwxODMzMDEuMTc2NDE3ODUzNywxMTYyOC4wODc3NTIxNTg3MSwxNjg1NzcwLjA0MDE5Mzc0MzUsNDQzMDguMjg5MjEwOTAxNyw4MDc0MDQuMTgzOTE3NzIyMSwxMjA1NDgyLjcyNzAzNTE0NDMsMTU4NDA4MC43NDEwNDg3NzYsMjkwNTcxLjAyMTgzMzI4NTIsMTA2MjM2NC4zMDM0NTQzNTEsOTcuMTc0ODI2ODIxMzQzNzcsMzE1MDEwLjI4MjY4NDkyMDEsMTEzNjU2OS4xODU2NDQyMDE1LDM1MTYxNDcuODM2MzQ0NjI3LDI4NjA0NDQuMjEyNTI1OTkyNyw5NTEuNzY5MDY3MjUxNTExNywyMzI5ODkuNTUyODcxMjIxNDQsMTQ2ODMwNC43OTE0MzY2NzY2LDUwNy45ODc4NzIzMzQ2NzA3LDM4Nzg0LjIzMTc1OTQxNTAxLDUxMDg0Mi4yMDAzMTc5NzU1NCw0MDUyMzUyLjk4MTcxNjk0MywzMTAxMzIuODYzNjg5OTE0MDUsMjQzLjA0MzAxNzg3MzkxNDEyCisxMixTYXQgNSBGZWIgMTEsMTc3MjkzLjcxOTcwNjUwODcsOTE4NDcuODk0NjkzMzM5NTIsOTUyMjAuNzk0NDM4MzcwNTIsMTQ5OTI3LjM1Njg4MjI1MzgsNjY1MjIuMjgxMDM3ODMwMjgsMzE1MjQ1NS44MDcwMzk3NjMzLDMwMjc2My41ODUxNDMxOTYxNiwyNTQyODA2Ljk2MTM0NDU5MTMsMjQ1Njg0OS4xNjIzMzEyNTc1LDMwOTk0ODIuMjY5NjcxOTEzLDYyMDYwMy4wOTczMDYzNzMxLDMzMjAwODcuOTMwNTU5NzIsODE1Ljk3MDk3Mjg0NDc4MDksMTMyNDI2NS40MzI3MzcxODg2LDE3MzA4MzUuNjM0MDM5MDY1NiwyNDM0NjY1LjAwOTgxOTM4OSwyMzAwOTQ3LjQzMjA3NzY3NCw2NjQ0LjQ1NDkxNzE5MzYzNywxMTIwMDQzLjY2MTc0Njk2NzgsMTM2ODgxMi45MDEyMDA3MjI0LDM3NDguNjgyNzY0MDI3NzY5NywyODM0OTguNTQwMDA4MTc2MSwxODQwNTkwLjQ3NjgxMzAwMDksNTAwODY0NC42Nzg4NTM5ODYsMjgxMzE0LjUyODg3MTc0NzEsMTI3Ni41OTE1MjI4MTM2NjQxCisxMyxTdW4gNiBGZWIgMTEsMTU0MzU5LjY4Mjc2MTA0MDU3LDEzNzk3My40NzkzMTE1NzgsNzMxNzAuNDQ0ODEzNjg5NTQsMTAxOTczLjY2OTc1NTk2NjcyLDE4NDMzNS41ODg5MDAwMjIzNSwyNTI4MTc0Ljc4MjUzMjUwMSwxNTQ4NDQ4LjQ2MDAxMjAxMzgsMjYyMzMzMy4yMDQ1OTUyMDEsMjAwMzAxNC4wNDc1MDI5NjA1LDI0NjgxOTEuMDE0Nzg3ODMsNTE3MjIzLjUwNzI1NTczMTQ0LDMzNjY0NTYuNjkxNDUyNzM2NSw2NDUzLjI1MDMxNDEwMTg4NywxOTIxMTA4LjYwMDQ3NzcxMiwxMjY2NDk0LjQxNjA3ODE3NzMsMTYzNDA4OC41OTcyODIwODExLDE1NTE3NTIuMjU1OTYxNTI5NCw0MzAwOS42OTE2ODQ2MDk4MSwyMzIxMTcwLjM5MjM5MzI0MjYsOTMyMTYyLjM5MDcyNTA5OCwyNjI1My4yNjM2MTA0Njk0NiwxNDIxODUwLjc0Mjg1MjM5ODQsMjE4OTM4OS41MjE3MDk5MDYsMzUzMTEyNS42NTg5MzI0NTQ0LDE5MTYxNC45OTg0Nzc0MjIsMzQ4My43NDUyODY3Mjc3MzY2CisxNCxNb24gNyBGZWIgMTEsMTA0NjAzLjA3MzEyMTI5MTM0LDEyNDIxMy41NTc0OTc4NDc1Niw0OTI0Ni4zNzEzMzEyNDc4Niw2ODQ0MS4xNjEzODkyMjMxNywxNzYyMzYuOTAyMjMyNTA3NDIsMTcwNTI0OS41NTM2ODg3OTc5LDM0MzM0MjUuMjM2NTY5MTMxNywxODAxMDIyLjg1MzQwODUyMDgsMTM1MTUyMS45Mzg2MTU4MTAxLDE2NjMzNTcuMTE2Njc0NzMzMywzNDk0NzEuMzg4MTY4OTY2NjMsMjMwNjY3OC42MzU0NjYyMDg3LDQ1NTE2LjE2MzYzNzY4NjI5NSwxMzkyOTU5Ljc0Njc3NDM0MSw4NTA4MDguMDQxMTk5ODIwMywxMDk2OTc5LjI2MDcxNDQ5NzksMTA0MTE1NS45MzEzNDgwNzQyLDIzNzgwOS4zNjAwNjg4NDY0NCwxOTE0NjI5LjQ3MTQxMzg4Myw2MjU0MTUuNjcwOTkxMDI0NiwxNzA3ODEuOTQ3OTYzNDkzMDMsMjU5NzExNC41ODQxMzMwMDUyLDE1MzA1NDcuNDY0NDI5OTEwNSwyMzcwMjA1LjkwMDk2NTUxLDEyODU2OS4zNTgyMjgzOTc1MSwzNzkyLjczNjI5MDQzMzQ1MDQKKzE1LFR1ZSA4IEZlYiAxMSw3MDE4MS41MzkxNDQ5MTE2LDg2OTEzLjc4MDg5MTA5NzM3LDMzMDQzLjg1MzExMjEwNDg5LDQ1OTY3LjUwNDU5NTUwMTU2LDEyMDE4NS43NzQ5MDczNTczNSwxMTQ0MTc5LjgxNDE5ODM4OTYsMjg4ODA2OS42MTA4MzU5NjE1LDEyMDgzOTEuNzg3ODc1MDE4NSw5MDY3OTguNzA4MzE4OTEzOSwxMTE2MDM3LjgxMTA0MzM4MjIsMjM0NDcyLjk1MDg5NzA1MDE4LDE1NDc2MjUuNTQ3NDE2NDAyLDI1MDY4NS4zODE4OTYzMDkyNiw5MzU1NTguNzEwMzAzMTQxNCw1NzA5MjYuMDEyMzUwNzc3Miw3MzczNjQuOTIxNTY3NTgwNyw2OTkxNjkuMDk1Nzc2OTA1LDcxNTI0NC4yNTY5NTc0OTkxLDEyOTI5NDkuNDIwNTMyNjU1Nyw0MTk4NzQuMTc5NjQwNTI0NCw4OTM3OTkuMDE3NzY4MTMzNywyMDAxMzkxLjg5MDY4OTM5MiwxMDI3MTY4LjEzMzY3NjAyNjQsMTU5MDc1Ni4yNDE4Mzc2NDM2LDg2MzIzLjE4MjY1ODE5NjMxLDI2NTQuODA4NTQ5MjU1NzQ4NAorMTYsV2VkIDkgRmViIDExLDQ3MTIxLjYwNTQ4OTkyMjcyLDU4NDUzLjU2MjIzNDgwMTEzLDIyMTkyLjgwNzY5NDUxODMyNywzMDkyMi44NTUxMzA3MTc0NTcsODA2MzUuMTMyODMyMDY3MDEsNzY4Mzg5LjQwNjI4OTYzNzQsMTk1MTcxMy44MTExMzA1MTM3LDgxMTEzNS42NzYwNzQ2NDI5LDYwODkyNy4wNDAyMjE1Miw3NDk0NjcuMjEyNjUyMjc1LDE1NzQ0My4yODkzOTk2ODc1OCwxMDM4ODYyLjUzOTgzNzgyNzcsNjc5MzI4LjIzNDkzNTgzMTYsNjI3ODE3Ljg5NDgzOTQyOTQsMzgzNTAzLjIwMTAwNDE1NDQ2LDQ5NjY4MC45ODY4MTgxMjEzLDQ3MDIyNi4xOTY1MDIyODQ1LDczODUwOS41NTgxNjE0NDA1LDg2NzQ5Ni40NDg5MTYyNDg5LDI4MjI2Mi4zMzc1NTAzNzQ3NCwyMjE5Mzg3LjAwNDQ3MzgyMzYsMTM0Njc5Mi4wOTM5MzAzMDA2LDY4OTM5Ni40OTc2MDYzNzE0LDEwNjg4NDIuNzQ0MTUxODAzMiw1ODAzOS42ODU1OTAxNjAzNSwxNzgyLjA5MTc4ODI0Njg0NDgKKzE3LFRodSAxMCBGZWIgMTEsMzE2ODMuMzg5NDc3OTY1MTE2LDM5MjYwLjY3ODI0NDU3MTMzLDE0OTI4Ljg2MjMxNjAwNTI4LDIwODU1LjM2NDg5OTc0NzUsNTQxMzEuODY5OTQ0NDc2NzEsNTE2ODE5LjU4NTAyMjUyNTIsMTMwOTQ1NC43MDUwOTQ2MjgsNTQ1MTU1LjUyNTk5ODc1NjUsNDA5NTE1LjIxMzI4NjM5MTYsNTA0MDY4LjE3MzE4ODA5NDUsMTA1ODc0LjUzMTU4NDU3OTc0LDY5ODIyNS45NDI1MDA2NjYyLDY0MzgzOC43NjM4MjI3OTE1LDQyMTc0My40NjQzMzY5NzU5NCwyNTgwNDMuODAwMDc0ODgzNiwzMzU2NTguNDI3MDk4Njk4ODYsMzE3MDE3LjgyMzk2NjQ1NDgzLDUwNzQ5Mi42NzQ3Nzc1NjI0NCw1ODI1MjEuMzE5MTA2MTQzMywxOTAxNjMuOTQ5MTEyNDcwNSwxOTg5NTg0LjgxMTk4MzQ5MTUsOTAzNjU5LjM2NTI5MDY2MjcsNDYzMjMwLjc1NjMwNTQwNjc0LDcxOTUwMi45NDQxOTEwMzczLDM5MTExLjE0NTI2NzM0Njg0NSwxMTk2LjIxOTIyMzc0OTE4MgorMTgsRnJpIDExIEZlYiAxMSwyMTM1MS42MDA5NTkyMzg1NywyNjQwOS40OTMwODU1MDUyNDgsMTAwNjguMDM3MDU2MjQ2OTQ3LDE0MTIxLjE5Mzg5OTk4ODkyNiwzNjM4Ny40MjgwMjM5MTcwNTUsMzQ4NDcxLjQwMTM5NjQxNjA3LDg3OTI0NS4wMjc4NDI1MDA4LDM2NzEzNS40MjM5Njg2ODk2LDI3NjA2Ny42NTE2NjQ0NzU1NiwzMzk4NDguMjg2MzM5MjA0OSw3MTM2My44MzMzOTY4NjM5NSw0NzAyMzkuODc2NDgxNjM3Myw0Mzg3NzQuMDY3NDM1MTQyNywyODM4MDAuOTQ1Njc1NTY3NTUsMTc0MDk0LjA0MzU5ODAwMDc1LDIyNzk3NC4wMDIzMTAxNTQ2NCwyMTQ1MzEuMzAzNTIyMTcxMDUsMzQwNTEwLjAxMTY4NDYwOTY0LDM5MTc0MS43MzA1OTg3NzQ3NCwxMjg1NTAuMDM0MDkyODQ3ODQsMTM1MDAzNi4xNjQzNzE5ODU1LDYwNjg4Ny4yOTQ3NTUwMjgxLDMxMTg0OS44ODgwNTA5MTUsNDg1NzY0LjA4MTcyMDY3NzQsMjY0NDguMzI1MDk2Mzc2MTY3LDgwMy45NDIxMjQyNzE0MzI4CisxOSxTYXQgMTIgRmViIDExLDE0NDM5LjkxNzUyNTU1ODkwNSwxNzgwOS4zMDczMzE5NzAwNyw2ODE2LjU5NDUwNDUwMjA5Myw5NjE4LjUzMDk5MDg3NzI4MywyNDUxMS41NDI1NTc4MDk1NDYsMjM1ODU4Ljg3MjEzMTgxODkzLDU5MTIzMS43ODM0MDk0Mjc3LDI0ODAzMi45NDYwMTE2OTA0NSwxODY3OTguODk5NDE3ODc2MzUsMjI5OTk2LjMyNjQwNTczMzQyLDQ4Mjc3Ljc3ODQ1MDYyMDk5NCwzMTc3MDkuMjM0NjA2NjM2MDUsMjk0MzgyLjc0OTI1NzYwMDc1LDE5MTQ5OS43NTg1MzgwMjQyNCwxMTc5NDIuMTI1NTkwODMwMTcsMTU1OTg1Ljk4OTA2NjA4OTgsMTQ2MDAwLjkzNzg0NDE4MzgsMjI4NTcxLjMyNDQ4Njg3ODU4LDI2NDA2OS45MTI1MTA4NDg1LDg3MzQ2LjQwNTQ3Mjk4MTU4LDkwNTc2MC4zNTAzNTAyODUyLDQwODIxOS4wNDkzMzY2MDQzLDIxMDU2NC4xMTUyNDM2NzgxOCwzMjk0MzQuMDM5NjM4NDIzOTQsMTc5ODAuNTA3ODE3NzQ1MzA3LDU0MS4zODgxODEyMTMwMTA3CisyMCxTdW4gMTMgRmViIDExLDk4MTguMDA1MTc0NTU0MzM1LDEyMDU2LjQyMjQyODY1ODgsNDY0Mi41MTUzMzEzNzg1NjQsNjYwOC45NTE5NDM4ODk5NDcsMTY1NjYuNDIxMzM5NzIzNzE4LDE2MDU1OC41MTQ5NTkwNTczNiwzOTg0ODYuNjQ2NjQ4ODQ3ODUsMTY4Mzc5Ljk5NDg5NTU3ODc3LDEyNzEwNi4zMTI2NzIwNjg1MSwxNTY1NDEuMTMxNTA2NDQ2NzIsMzI4NDAuMjY1MDM5OTk2NTUsMjE1NzAwLjk2MjE1ODM2MTY4LDE5NzYyNy44MzQyNjc3MTAxNiwxMjk3NjIuODQzNjYwNTU3MTYsODAzOTcuNjQ0NDA3NDgwNDcsMTA3ODczLjEzMzIyNDk1NjIsMTAwMTkxLjE4MDYxNTEyMzE0LDE1MzYyMy43MjU4NDU4ODI1OCwxNzg2NjQuMTMyNDI4NDg1MTcsNTk4MDEuNDc0MTUwODI5MDIsNjA4MTE0Ljc5NTU0MjQ2OTcsMjc1Mjc0LjM5NzczNTAyODc2LDE0MjgyMi42NTIzMTE1MTg4LDIyNDkxNS4zNDc3NjUxNTI5MiwxMjMxOS44OTQ3ODYzOTQ4NTIsMzY1LjcyNzMyMTc1MTc5NworMjEsTW9uIDE0IEZlYiAxMSw2NzI4LjMzOTIxMDcyNjc4NCw4MjA5LjgzODExMTI4MTg5MiwzMTg5LjI3MDU3MjI5Mjg2MTMsNDU5Ny43MTg2OTMzNDI4MDc1LDExMjUzLjExNDY3NTc3NDg0MywxMTAyMjMuODAyNTkwMTQ0MTQsMjY5NTQ3LjY5MDc5MzUzMDMsMTE1MTI4Ljg3MDEwODg3MjA3LDg3MjAzLjc5ODA3MjkxMzY4LDEwNzQzOS4yNTA3NDM0ODIzNSwyMjUyMC42ODg3Mjg5NDE1NywxNDc1MDQuNzU4ODQxMzk4MDYsMTMyODQ4LjkwNTkzMTc4ODQ0LDg4NDg0Ljc0MTcyODAxNzk3LDU1MzAxLjg4OTkyMTcwOTgyLDc1NzE2LjMyNDE0MzE5MjQzLDY5NTc0LjA4OTYyNTQ0MjE3LDEwMzQ2MS41ODgzMTU0NTI3NCwxMjE1NTQuMjgzNDcyODU3MDYsNDEzOTEuMzUxMTc4NzY4MTA1LDQwODg0Mi4yMjkxMDc4NDU4NywxODYzNDUuNjAzNTk2NjMyMDgsOTc1MzIuNjY5NTMxMjY5NTIsMTU1MDU1LjIyNjM5MzMzMDUyLDg1MzYuNjE1NTU3OTY1MDY2LDI0OC4yNDg3NzY3NzUyMTQ2OAorMjIsVHVlIDE1IEZlYiAxMSw0NjYzLjM1NDIwNzQyNjg3LDU2MzguOTA2ODcwMDkxMzA4LDIyMTcuOTg4ODQ4NjE5Mzc2MywzMjUzLjQ2NjY0NzU3ODYyNiw3NzAxLjA3MjI3NjA4OTY1LDc2NTgyLjU4NDQ5NDIzMjcsMTgzMzI2LjAyMTUzNTA5Njk1LDc5NTM2Ljc0MzEyMzkwMjE4LDYwNTM0LjYwNjI4NDU0OTk0LDc0NjIxLjUzMzI4OTgxMzYsMTU2MjMuNTIyNDQxNzE0MTY1LDEwMTkyMy42NjQ0MDk4MDQ1OCw4OTQ5NC4zMzcyNzI1NjAxOCw2MDg5My42MTAxMTE0OTIzMTUsMzg1MjguNzA3MzQzODk2NDE0LDU0MjEyLjIyODA4MTA0Nzk4Niw0OTEwNy4xNDAxOTU0ODI0MSw2OTkwMS4yNzExODkwOTYyMiw4MzM3OC4xMjc3MDA3MDMyNiwyOTA4NS41NjU3NTU5NTU2MiwyNzU0NzkuMjIwMzA4NzM4OSwxMjY4ODIuNDY0MTk3Nzc1MTMsNjcyNjAuOTcwMzU2NDc5OTEsMTA4MzYyLjM1NDM4MDQ0MjAzLDYwMDcuODA0NjIzODMxNTA4LDE2OS43MTAyNjExMjY0MzM0CisyMyxXZWQgMTYgRmViIDExLDMyODMuMDUxMzU3NTQxOTUxLDM5MjEuMDg0NTM3OTYyMjA2NSwxNTY4LjY3MDM3MDUyMjIxMjEsMjM1NC4zMDU2NjIzNzU4NDgsNTMyNi45ODA2NDE5MDgwNiw1NDA5My45Mzc1NzgyMDE4MiwxMjU2ODguNTM4NDk1NTU1OTMsNTU3NDYuNzU3MDk4MDcxNDE1LDQyNzA2Ljc3NDk3NjE4MzI3LDUyNjgzLjAwNzUzNzk4NDAzNSwxMTAxMy4wMjYyMzE4ODM2NDksNzE0NTYuODI2Nzc0OTU0MzksNjA0ODkuNzMxODY0NzcyODEsNDI0NTIuNTcyNjE3MTA4NzIsMjczMTQuNDM4NDA4MjQ3MjI0LDM5ODEwLjQwODgxNDcxNzExLDM1NDEzLjcwOTYwOTcwNTMyLDQ3NDU3LjAwMjE1NzgwMDkwNCw1Nzg2Mi44MzkzNzcwMzc4MSwyMDg1NC42NjA0Njg2MDk5LDE4NjI2MC45NzEzNDcwMjY2NCw4NzEzNC4yNTQwMTYwNDk1OCw0NzAyNy44Mjg3Nzg2ODY1MSw3NzE0MC4zOTE5MDUwNzE5NCw0MzE2LjM0NzgyOTM0ODAxOCwxMTcuMjE4MTQ2NTk4NTU5MTQKKzI0LFRodSAxNyBGZWIgMTEsMjM1OS43NDQ2ODQwMzg4OTg0LDI3NzMuMjk5NDgzMDY5MzQ1LDExMzQuMTc3NjE1NTc0NTkxLDE3NTEuNjgxMzExMjE4ODE1OCwzNzQwLjA4NjA2MjMxNTY5NzcsMzkwNDcuNDE5MjMzNzYwNzIsODcxNjUuNzk0MzA1MTcyNDYsMzk4MzYuNDYyMjcxNzE5MzU2LDMwNzc5LjIxMjY5NTQyOTA4MywzODAwNC4zMTI5MjE1MDQxNTUsNzkyOC42MjEzNzc4ODI5MjEsNTEwODAuNzk3NTk5MTkyMzgsNDEwOTIuOTg0NDUxMzg3MjUsMzAxMjIuOTA3OTM0NzE4MjA1LDE5ODA4LjYwNTQ1MDk2MTUsMzAxMzQuOTQ0MTg1MjUyMzEsMjYyMzMuNjA4MzQ0OTAwNDE1LDMyNDUyLjE5MDIyMTM1NjY3Miw0MDgwNi41OTE0NDk1MzQ1ODYsMTUzNDAuMDMyNzI3NDgxNTE5LDEyNjU5OC4zMzAzNTc4MjM3LDYwNTY4LjA1MzUyNTgxODg3NiwzMzQ5OC4wOTIxOTA1MDgzMiw1NjIzNi40MjcxMDExOTMwNSwzMTgyLjk5NDM3NTg2MzAxNSw4Mi4xMzQ1NTQ4MzE2MjEzNworMjUsRnJpIDE4IEZlYiAxMSwxNzQxLjAxOTQyNTk0NTEwMTQsMjAwNi4wMDczNDU0NTM1MzkzLDg0Mi44MDEwNzEzMDI4NTEzLDEzNDYuMjMzODEyNjkyNTc4MywyNjc4LjcwMTAxNjY1MjYyMiwyODk1OS41Mjg2MDM3Mjc0OTYsNjE0MTQuNjA2MTcxMjU3NjA1LDI5MTc5LjkwNjMwNzUyMTY0LDIyNzgzLjMyMzA2NDY5MTI3NCwyODE2Mi44NjY1MTcxOTQ2MjcsNTg2MS4yMjU1MTE5NjE1Nzc1LDM3NDMyLjU4MjU5MDgxNjIsMjgxMjUuOTYyODQ2Nzc1MTksMjE4NjkuOTkyMTczMTE4OTgyLDE0NzcyLjczMjc4NTMwNjkzOCwyMzU5Ny4zNDcwMDc5NTk1MDMsMjAwNTQuODQzNjg4NDY3NjY3LDIyNDIzLjI2OTgxOTkxNDMxNiwyOTM5NS42NjEzMTQzNTc4LDExNjMyLjY4MzY3NzgzMzQ3Niw4NjcxMy44ODcwNDM5MzUwNCw0MjgwNy45NTcxMjU2Nzc1MiwyNDQzOC44MjIxNTM5MjAwMTMsNDIyMDIuMDk5MzAzMjM2MTY2LDI0MjAuOTM0MjE0NTYyMTU2Nyw1OC42NzQ3MDYwNzMzMjYyNQorMjYsU2F0IDE5IEZlYiAxMSwxMzI0LjkwMzI3MjI4NTczMDUsMTQ5Mi4zMDEwNjAxOTk1ODY2LDY0Ni41NzI2NzQwNTAzNDg4LDEwNzEuNTMwNjU5NzU0MTIyOCwxOTY3LjY0MDU0NzQxODYwNTYsMjIxNjguODQ3NjQ5ODkxNjY0LDQ0MTg3LjI2Mzk3MjA1NDcxNiwyMjAxOS45NjQyMjczODMwNTgsMTc0MDIuMTE3NDY1NDM2MTI4LDIxNTM4LjA0MDE0NzAyMTg1Nyw0NDcwLjI0MzAxMzQ2OTc5MjUsMjgyNjEuODkzODE5MDU4NDQ1LDE5NDU5LjE2NTcxNjA4NDI0OCwxNjMzMi4xMjg2NzYzMTI4ODUsMTEzNzguNDc1NDQ1ODMzMjg2LDE5MTM2LjY2NzQxMTkwMzU4LDE1ODY2Ljg1NTI5NTM2MDgwNywxNTcxOS44OTA2OTA2NjcxMDUsMjE3NDYuNjA5NjcxMzM0NDM4LDkxMjQuOTExNjcyMTA5MzAxLDYwMDU2LjQyNjI5NzM0NDYyLDMwOTIzLjgxMjY0NTIyMDYzNCwxODM1NS43NTExMzAzNDc3MzcsMzI3MzEuMzUyNzkxNzQyNjY1LDE5MDUuMjY4MTIzODI1OTAxLDQyLjk2NTU2Njg4NTM0ODM1CisyNyxTdW4gMjAgRmViIDExLDEwNDMuMjMwMzEzOTkxMTkyOCwxMTQ3LjI2MDk2MjE0MTU5MjIsNTEzLjQzNjcyMDA0MTkxMzMsODgzLjIzMDkwNTUyOTc0NDQsMTQ4OS42ODkyNjMwODkwNDg0LDE3NTY0Ljk5OTUxOTM5NjQwMiwzMjY0MC4zOTczODM4NjUwNzgsMTcxODEuODAwNzA3ODQ2OTEsMTM3NTUuMzc0Nzc4MjcxOTM1LDE3MDQ2LjcyMTIxOTkyNjcyMywzNTI4LjAyNDM0MDgyNjM0NTUsMjIwNjQuMTkyNDg5NTY2MzE0LDEzNjY2LjA2NzE2OTY1OTkyNywxMjU5OC41ODkzOTgzNDUzNTMsOTA3Mi4zNzgxOTkyODExLDE2MDQ1Ljc4NDk0NDI5MzU0NCwxMjk5NS4yMjEzNDAwMTc4NzksMTEyMzYuNzg2OTg1ODIxNDQ5LDE2NTk5LjQzNDY0NTkxMjM0LDc0MTAuOTg2MzMyNTQ5NjQ4LDQyMjM3LjQ2NDczOTgyNjQ4LDIyOTU0LjM3NjY0NTY4OTgxNiwxNDI0OS42NDcxNTY2OTkxNDQsMjYyODMuNzg2NjgwMzczMzg1LDE1NTIuNjE2MjE2MjQwNTk1OCwzMi40MTU0NDg0MzUwOTU2OQorMjgsTW9uIDIxIEZlYiAxMSw4NTAuNDk2NDg0NDE2OTc1NCw5MTQuMTE2NTQ1MjY4ODIyNyw0MjIuMDA1MDcxMDk0NTAwNCw3NTEuODE4NDI1ODYyNzg5OSwxMTY2LjQ4MjI1MDE1NDYxODQsMTQ0MDcuMDQ5MTA0NTI3NDIzLDI0ODcxLjc2NTc2NDczMTM3LDEzODgwLjg5ODQ2MTY0MjUxMSwxMTI1NS42OTUxMjgyNjM2NjIsMTM5NjYuMTQ4Mzk2ODY3MzEsMjg4Mi42NDc4MzY5ODUyOTc1LDE3ODM0LjgzNDkyMDk2MjUxNiw5NzkxLjMzMDgzOTg3ODAyMSwxMDA2MC45MDY3NjgxNTc2MDIsNzQ4NS4yNzU1MTExODAwMzYsMTM4NTQuOTYxMDE0NjQ0MjIzLDEwOTkwLjkyNDEyOTc5Mzc0OCw4MjM0LjAxMTAzNzI5NDEzMywxMzExMS45NzQxOTkyMzA0ODMsNjIyMC42MDU4MzM5OTg2ODksMzAzMTguMTM1NzMxNDkxNTQ4LDE3NTg3LjczNjk3ODQ5Mzk2LDExNDUzLjA4ODAxODU2OTU5NywyMTgzMi4zMzU3OTY0NzE3MDMsMTMwNy40NDg0MjM1MjYwNzkzLDI1LjI5MTUzMDU0ODc4MzQ2NworMjksVHVlIDIyIEZlYiAxMSw3MTYuMzg4MzY5MTc1Njc3Nyw3NTQuODc1NDUwMjUzNzQ4MiwzNTguMDQwMDAwMTIzMTc3NTUsNjU3LjY1NDMxMTA5OTg3MzYsOTQ1LjY5Njg2OTcyMjM2MzksMTIyMDEuNDc1NzM5Njc2NzUzLDE5NjA5LjkwMzU3MzU5MzQ5LDExNTk0LjMyNzc0ODgwNDI5MSw5NTExLjc5MTIwMTU3MjUxMiwxMTgxNS4wMTkyNTc5MDYxNjQsMjQzMi44NjU5Mjc4MzYzMDg0LDE0OTA0LjE2Nzc2Njk3NjMwOCw3MTk1LjQyMzE4MTk1NzczMzUsODMxMy4yMzQ5ODQzMDgzODMsNjM3MS41NDI0MTk5NjY0OTksMTIyNTMuMjY0MTE3NDQ0MTg1LDk1NTYuMDcwNzIzODEwMTkzLDYyMTYuNDQ3NTM0NDA3OTIsMTA3MjIuMTEwOTU3OTE1MjUsNTM3NC4yNDQwMzc4ODE5ODcsMjIzMzEuMTM2MjUwNjIyODE4LDEzOTQ3LjE1NDM4MzU0MTA2Myw5NTIxLjA4MjAwODU2MjA1MywxODY5NC4wNjk1NDk4MTY4MjgsMTEzMi44NDQ0Mzg4MDA2NTIsMjAuNDM1NzM0NzIxNjQzOTA3CiszMCxXZWQgMjMgRmViIDExLDYyMC43OTAwNjU2NDE0NTc5LDY0NC4zMjQwNzAyOTc0NTYzLDMxMi4xMDU0MjE2Nzc0MDk3LDU4Ny44NjcyODc3NjAwOTU1LDc5Mi40Njk2NDgyODUwMDc3LDEwNjIxLjM1NDA0Mzg3MTI4LDE2MDA2LjExNjIyMTUxMTg0Niw5OTc0LjgwNjY0MDMxNDQ5OSw4MjY0LjM4ODc2NTA0MzgxNiwxMDI3NC4zMjY0MjE0MTE3NDgsMjExMS42MzA4NTA1MjkyODMsMTI4MjcuNTQ3ODM0NjkxODk3LDU0NTAuNDI0NjExMzQ1ODg4LDcwODUuNjMwMDg3NTA4MzU2LDU1NjguNDkwMjM2ODgzODQzLDExMDM3LjA5Njg1NDMxOTY2LDg0OTQuMjE0MDA1ODI5MTEzLDQ4NTMuMDQyMjAxMTgyMDQxLDkwNTUuNjEwNDE4Mzk5NDE2LDQ3NTMuMzU2NTM1MjczNjEzLDE2OTYwLjE4NTg3MjQ4NTM4NSwxMTQ0Ny42NTg1OTQ2MzMyNTMsODE1Ny44NTU1NTYxNDI4MTUsMTY0MTcuMTAwMzk2MjI4MzAzLDEwMDQuNTA2OTgzNTc0Mzk0OSwxNy4wNzcyOTI0NTYwMTgwODUKKzMxLFRodSAyNCBGZWIgMTEsNTUwLjQwODk5Mjg3NzQ4NzgsNTY1LjUxOTczMDk2Nzg1NjQsMjc3Ljk3NTA5Mjk3NjUwNjUsNTMzLjg5OTc2ODE5MTAxNDMsNjgzLjY0Nzg1OTcyODY0NTYsOTQ1MC40MTk5OTU3Mzk5MiwxMzQ5NS4yNTcyNDk3MzgzNSw4NzkyLjQ4NzI4MjQ3NDc5NCw3MzQxLjk1MzQzMTAwODU3Myw5MTMzLjMwOTc3MTcwOTczNSwxODc0LjQ4NDY1ODI0NTU2MSwxMTMxMC42NDczNzIxNjYsNDI3MC4yNzAwNjk2NjA0NTEsNjE5OS4yNDMyMjEzNTM0MTIsNDk2OC44OTQ1ODYxMzMwMjIsMTAwNzMuMjg4NjY2Mjk4NTE3LDc2NzYuNjc4MDQ1MzcxMTMyLDM5MjIuNzM2NTAwNTM1NzI4Myw3ODY0LjA3MDc4MDA5MTAxNyw0MjgwLjA4NzQ4MDMwNTY3OCwxMzMyNS40MjUzMTU1NzQzNDYsOTY5OS44MzU5ODUwODUwNDcsNzE2Ny42MTU0MTczMTkzMDYsMTQ3MDQuMDExNjk0Mzg5MDcyLDkwNi4zNzEwNzg4NjU0NDYsMTQuNzAyMDA2NDEwMjcwOTQ1CiszMixGcmkgMjUgRmViIDExLDQ5Ni41NDk0NTcxMzc5NzI4LDUwNy41MzcwMzI4ODIyODIsMjUxLjU4Nzc5ODk5NDAyMDgsNDkwLjQyOTUzOTkwNTUxMTUsNjAzLjkzMDU4MzY2NjI5MDEsODU0OC4xODMwMzk4NjE1NTEsMTE3MDIuMjYyODE4MTE5ODc2LDc4OTYuNzg3NDI1NzIxMjEyLDY2MzIuOTQzNTczMzE4MDM3LDgyNTQuNjExODg5MjgxMzM0LDE2OTIuNjM4MDE4MDczNjYwMywxMDE2MC43ODA1NDIyODg1ODEsMzQ2My45Mzk0OTM1MjAwMzg1LDU1MzYuMzgxMDU5NzQ3OTE1LDQ1MDIuODc0Mjg4MzE0MDcxLDkyNzcuNzcxNzc0ODkyNTM3LDcwMjAuMzM0MjM4NjUwNDIzLDMyNzguMTg2MzY4Nzg3NTc1Nyw2OTgzLjc1ODAwMzg4ODg2OCwzOTA0LjA1MTcwNDY2OTE0OCwxMDgzOS40MDAzNDYwODgyMzYsODQ0NS41ODAwMzc1NTYxNzIsNjQyMS43MzUzOTUyMjQyMjMsMTMzNjEuMzgyNDk0NDk2NzE2LDgyOC4yMjk3NTc3OTA5NzIxLDEyLjk3MjcwNTgwNDg2NTgKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvTm9uWmVyb01vcnRhbGl0eVJhdGVfUktfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL0lfMC5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L05vblplcm9Nb3J0YWxpdHlSYXRlX1JLX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9JXzAuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJjMjQ0MDEKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L05vblplcm9Nb3J0YWxpdHlSYXRlX1JLX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9JXzAuY3N2CkBAIC0wLDAgKzEgQEAKK2l0ZXJhdGlvbix0aW1lLApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Ob25aZXJvTW9ydGFsaXR5UmF0ZV9SS19SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vSV8xLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvTm9uWmVyb01vcnRhbGl0eVJhdGVfUktfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL0lfMS5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmMyNDQwMQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvTm9uWmVyb01vcnRhbGl0eVJhdGVfUktfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL0lfMS5jc3YKQEAgLTAsMCArMSBAQAoraXRlcmF0aW9uLHRpbWUsCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L05vblplcm9Nb3J0YWxpdHlSYXRlX1JLX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9JXzIuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Ob25aZXJvTW9ydGFsaXR5UmF0ZV9SS19SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vSV8yLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xY2M4NDVjCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Ob25aZXJvTW9ydGFsaXR5UmF0ZV9SS19SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vSV8yLmNzdgpAQCAtMCwwICsxLDMzIEBACitpdGVyYXRpb24sdGltZSxFRy1GUkctRzIxMDAwMSxFRy1GUkctRzIxMDAwMixFRy1GUkctRzIxMDAwMyxFRy1GUkctRzIxMDAwNCxFRy1GUkctRzIxMDAwNSxFRy1MT0UtRzI0MDAwMSxFRy1MT0UtRzI0MDAwMixFRy1MT0UtRzI0MDAwMyxFRy1MT0UtRzI0MDAwNCxFRy1MT0UtRzI0MDAwNSxFRy1MT0UtRzI0MDAwNixFRy1MT0UtRzI0MDAwNyxFRy1MT0UtRzI0MDAwOCxFRy1MT0UtRzI0MDAwOSxFRy1VUEUtRzI5MDAwMSxFRy1VUEUtRzI5MDAwMixFRy1VUEUtRzI5MDAwMyxFRy1VUEUtRzI5MDAwNCxFRy1VUEUtRzI5MDAwNSxFRy1VUEUtRzI5MDAwNixFRy1VUEUtRzI5MDAwNyxFRy1VUEUtRzI5MDAwOCxFRy1VUkctRzMwMDAwMSxFRy1VUkctRzMwMDAwMixFRy1VUkctRzMwMDAwMyxFRy1VUkctRzMwMDAwNAorMSxUdWUgMjUgSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDEuMDA3MzMxNzMxODgzNTMyNiwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzIsV2VkIDI2IEphbiAxMSwxLjk2NjQ5NjEzODIzODQ1MUUtNCwzLjIwNTEwMTQ0MDkyMTkxRS01LDIuNDU3MzAxNTE1NjQyMjk3RS01LDAuMDI2Nzk4NDU2MzQyMzI2NTY1LDkuNTYzMjc3NTU4NjA2MjEzRS03LDAuMDExMTk5MzE1NTMyNjMyMjg3LDIuNzM1NDc4MzgwNTA2NTM5NUUtNiwxLjQyMjk0NzAyNTY0NzM1MjZFLTQsMC4wMDQ4ODIzMzMyNDY5OTE4ODIsMC4wMDM2ODg1OTkwNTI1NjI4MzM3LDEuMTczNjU5NTQ0MjY1MTE5N0UtNCwxLjI2MDA0MDk0NTMzMzIwN0UtNCwyLjIxNjU5MzgzMjAwODM5MjVFLTEwLDUuMTg4MTgzNDgxMjMyMjAyN0UtNSw0LjQxNDk5NTMzNDQzNDQwOTNFLTQsMi44MzQ0MzQ3Mjg0NTIwOTQsMC4wMzI1NDEzMDI5ODIzMDA2LDEuMjM1NTc3NDE3MDE0OTk2OUUtOCwyLjk3MzUzMjEzODI2MjMyODVFLTUsMC4wMTI4MDE1MDg1ODE0NzA2MTYsNS43MjkzODAzMjk3NjYwMjlFLTksMS41NzI4OTMyMzUzNjU4NTM1RS03LDkuNzUwMDg2MzMwNjUwNThFLTUsMC4wMjAwNjA5MDY2NDY3ODgwMzMsMC4wMTA2OTU4Mzc1Nzg1NzAyNjQsNC4yMTAzMTI5MTk0NzYwNTRFLTkKKzMsVGh1IDI3IEphbiAxMSwwLjAwMjM4NjQwMTg3NzcyNjYyOTUsOC40MDgyNzkwNzk0MzYzMTVFLTQsNy4zNjgzODcyODg2NDgxMkUtNCwwLjIyODk0NTA0MzkzMDUxNDU3LDMuMzM0OTI1MDc0NjI2MTI3RS01LDAuMTIzNjM3NTg5MzYwMjQ0NTMsOS43MjIxNjIxOTgwMDg5NEUtNSwwLjAwNDU3NTY0Mjg0NjUxMjA0MywwLjA1NTUzOTE3OTM4NTA5MDI0LDAuMDQ1OTc3NzgzMzMzNTU5MDEsMC4wMDM0NzEyNjQyNjk4NDc5ODUsMC4wMDQyNzc4ODYzMDUwNTQ0NTgsMi41MDE4MjE5NjY3NTU2ODAzRS04LDAuMDAxNjcwMDgwMzA4NTMyMjc3MiwwLjAxMDQ3MDMyODY5NTk4MzkzMSwxNC44ODY1NDMwMzg4ODQxNzQsMC4zODMyMjA4ODg5MjQ0NTY4LDEuMTA3NzU5MTcwOTAyODVFLTYsOS44NTczOTcyOTkxNjQyNjRFLTQsMC4xNDgyMjE5MTEzMzgxMTM0LDQuOTEzNzk4MDQwNjEzMzk1RS03LDEuNjc5MzU4NjI5Nzk5MzEzM0UtNSwwLjAwMzA5MjM2OTAxNzcwMjg1MDIsMC4yMzY2ODcwODEzNDMxOTc3NywwLjEwNTUyMTgxMDUxMTc3NTY4LDMuOTU5NTgzMTQ0NTkyNzEyRS03Cis0LEZyaSAyOCBKYW4gMTEsMC4wMjEzNzgwMDUyMTE4NTQ4OTcsMC4wMDk3MTE3NTg0MjI3NTcxNiwwLjAwOTY4MDQxNjc2MDM3MzY0NSwxLjQ1ODQ3NDE5ODQ5MTE0Nyw1LjE1ODI3ODM5OTMwMTUyRS00LDEuMDA2MTIzNDk0NjQ2MzkwOCwwLjAwMTU0MDQyMDQzNzIzNjgzMDgsMC4wNjUwMjAxNDUwOTc5MzIzLDAuNDY4Mjg0OTI3NTMwNTYxMTcsMC40MjIwNjEwMjUwNzIxMDQyLDAuMDQ1MDMzMjgwNzY3NTYxNjM0LDAuMDY0MzUwMjk0NTA1MDUyMTMsNy4wODY5NTY5MDQ1ODQzNDdFLTcsMC4wMjM3NDM0ODg1ODQ4NDgwMTQsMC4xMzg0OTU0ODY3NTgzNDIwNiw3OS41Nzc2MDYzODQ1MDIwMywzLjMzMjcwMzQ3NTczNzkxOTMsMi40OTYzOTkxODE1MTE5Njc1RS01LDAuMDE0NDg5ODI5NDA1MDI3NzMsMS4yNjc0MjYyMDQ1MDkyMTIyLDEuMTA3MTc0MTkxNjMzMDY1NEUtNSw0LjQ2NDQzNjYzOTIzODMzRS00LDAuMDQzMzEzMDAzNzIxNzAyNTUsMi4wNjIzMTMzNzIxMDEwMTIsMC43NjkyOTQxMzQwNjEzNTczLDguOTU3MjU5NDQ2NDYwMDg3RS02Cis1LFNhdCAyOSBKYW4gMTEsMC4xNzAzNzk0MTQ0MjEyMzg4MywwLjA4NjM3NTIxNzg4NDQ4NDc4LDAuMDk1NTE5NTk4MDExMzc0Nyw4LjQ3OTkwMjUwMDg4Mjg5OSwwLjAwNTk1NTIxMTI5OTk5NzYwMiw3LjI5ODQ0OTUxNDM0MTU5NywwLjAxODI2MzI2MTkwNDA4OTc3LDAuNjkzNDc5OTcyNDE0NzgxOSwzLjUzNDg0MzgwMTIyMDQyMiwzLjQzNzM1ODczNTQwOTA4NTMsMC40NDA0NDM4Nzc2ODkyMjc0NCwwLjcyMzYxNDEwMjQzNjI0NDEsMS4yMjYwODMyOTMxNDczMDQ3RS01LDAuMjUzMTc1NTE4MTk3NTg1NDQsMS40NDA4OTgzNjAwNjA2MjM2LDQyNi4xNDE1MDczMzgxODI0LDI1LjgxMTEwMDkwMjQ1NTU1LDMuNDcyNDA0MDM4MjA5MDQyNUUtNCwwLjE1OTc5MzA5NTk2NjI1MjM1LDkuNjU4OTUxOTExNTQ5MDgyLDEuNTU1OTc0MTUwMjM5OTM2NUUtNCwwLjAwNzI0MDc0ODMxOTU1NDQxOCwwLjQ1NTcxMTAxMTg2MTAwMzE2LDE2LjAwNDY5ODQwNDc5NTgsNS4wMzcxNzc2NjQ2MTM0NjIsMS4yMjY2MzI3ODI2OTgxOTdFLTQKKzYsU3VuIDMwIEphbiAxMSwxLjI3NTEyNjEyMTM2NzUwOTQsMC42ODIwODg1MTE5NzM3NjY3LDAuODE3MTM2OTkxNjE0NzAwOCw0Ny40MTM4OTkwNDIwNDY3NCwwLjA1OTA2Nzc5Nzg5NzgyNjYsNDkuODM1MjMyMjE4NzUzMzIsMC4xODYyNTI2MzEyNzMzNTIwNyw2LjM5NDg3NzgwMjE1NDU3MSwyNS4yMTEzNjAxMDI2MzI1MzYsMjYuMjI2MjgwNTg2NzM5NjU1LDMuNzUxMTYyMDQzODYyNjUxNiw3LjAwMDg4Mjc4MzA4OTYwNiwxLjY1MzIyMjY4NTAwOTk0RS00LDIuMzMyNDQzNzU4NzE3MDc3LDEzLjE2Nzg5MTg1NjE1ODIzNywyMjg0Ljc2MzY3Nzk1NTg5MTYsMTg3Ljg1MDcwNzM4MDg2OTQ0LDAuMDAzODMxMDE3MjM3OTgwMDc4LDEuNTIxNDc5ODA5NzcxODAxOSw2OS4yMzgzMDg1MzY5NTQ0NiwwLjAwMTc0NDUxMjEwODcxNTkzNjYsMC4wOTE2NTkyNTg3MzEyNjI3LDQuMTQ4NjEwMDEwMTIzOTE3LDExNi43NDc3Njg3NDkyMTYzNSwzMS4yODU0NzQ1NzY5MTE2NCwwLjAwMTMxMzk4MzUwNTk2NjkxMjYKKzcsTW9uIDMxIEphbiAxMSw5LjE3NjU3MDk0OTgxMjA2Miw1LjA0Mzk4ODgzNzA3MjU5ODUsNi40MjM5NDI4ODg1MjYzNjUsMjYwLjAyNTMxNDMwODM4NjY3LDAuNTMzNjM4MjMyNzY2MTIyNCwzMjguMDg1Mjc2OTk5NDM3NSwxLjczMDg2MzU5NzY0MjU1MDQsNTQuMDIwNzE5NzM3NDA3MzU0LDE3My45MjY3ODQ0NTgyMTY0MiwxOTIuMDI1MTIyMzE1NjUsMjkuNDg5NDU1MjIyNDc1NjEsNjEuNzU4MTM1NTQxNjMzOTc2LDAuMDAxOTE3ODAwMjIwODYwMDU3LDE5LjY3MzUwOTUxNjEzNjYzLDExMC45NTc1MzUyNDM4MzExNiwxMjIzNi4zNDM2MzQ4NzEwOTgsMTMxNC44MTM0NTk0Mjk1NjU3LDAuMDM3MDE3MzEzMjYzMTgzODk0LDEzLjI0ODk2Mzc2ODM5NjA0NSw0NzcuOTAwOTYwMjI0MzQ3MywwLjAxNzIwNjI3MTcyMTYwNTE3LDEuMDAwMzE5ODA4ODI3MTQ1NCwzNC42MTYxNjg2NzQyNDU3NCw4MTkuNTM2Mjk5ODM4MTQxNiwxODguNjc2OTc3MzcwMTQzNiwwLjAxMjIwOTc3MDgzMTczMjU0MgorOCxUdWUgMSBGZWIgMTEsNjQuMjcwOTc0MjczMzQ3NjYsMzUuNzgxNjIxMjA3NzQzMzYsNDcuNzY2OTU2MjMxNDEyODYsMTQwMi43MTIxMDA2NjMxNDA3LDQuNTI1Mzc2OTAyNjIyODEyLDIxMDcuNDI4ODI1OTY4ODcxLDE1LjA5OTM4MDU5MTAxMzI4OCw0MzAuNDYxMzQwNTcxNzE3LDExNzQuMDYxMjk3NTAyODg5MSwxMzY1Ljg4OTI0ODIyNzUzNywyMjAuMjQ0NTgwMzcwNDQzNSw1MTEuNzExMzYzNjkxNjYxODYsMC4wMjAxMTY1NDgyMDU0NDAxNDIsMTU2LjQ2Nzc1NTAyMTA1NTIsODgzLjk4NTUxMTY5NDYxNCw2NDU5OS45MjE2MjkyMTMwNjYsODkzMS40NjgzMjUyMjEzNDUsMC4zMjg2NDIyNDMwNTkzMzUwNCwxMDguNjI5NDkzNjQwMDk0MTgsMzIwOC45ODc5NjY1MjkxMDczLDAuMTU2NTI1MTE4MjkxMDY3MTYsOS44OTI0MzY5NjYxMDQwNjgsMjcyLjU1ODU5MDc1MDg3ODEsNTU5OC40ODEwMDk2MTA5MDgsMTExNC45NjEzNDU1ODU4NDg0LDAuMTAzNjE3NDA2NTE0MDY5NjIKKzksV2VkIDIgRmViIDExLDQzOS42OTM2ODAyNjAxMTk4MywyNDUuMjk0NjI4OTYzMjkxNjEsMzQwLjEyODg2NTg2MTYwOTIsNzIxMy44MDc5OTQyNzUzODIsMzYuNjQwOTc3OTQ1NjgzMDQsMTMyMjkuNTkzNjAwOTYwOTA3LDEyNS43OTIzMjEwODYyMTUsMzI4Ni40MjQ3MjEwMzAyNzMsNzc3My41NjY0MDQwMTgzMzcsOTQ3Mi4wNzA3NzA1NzAxNjgsMTU4My41NTUxMzg1NDE2MDc3LDQwNDYuNzgwNDI4ODIwODU1LDAuMTk2MzUzNzMzMDQ4MTAyNzUsMTE5Mi41NjczNzQ3MjAyMzE4LDY3MjcuNDg2ODU1MzA1NTgzLDMxNDYyNC4yMTk4OTA5MDk1Niw1ODA2MS44NzIzNDU4NjY1OCwyLjc1MTg0MDQ5ODEyMjk4OSw4NTEuNTAwNjc5NTE3Mzc5NywyMDgxNC40Mjk4MjI3Mzc2OTMsMS4zNDc1NzQxNTU2MjI0Mjk0LDkxLjE5NjgwOTQxMTkwMjQ2LDIwNTcuMDUxMjA0MTcyMDA1LDM3MTc4LjU5MTMwNzgwMzg5NCw2MzczLjAwNDMwNTk0MTQwNSwwLjgyNjUxMTUxNTEyNzY3MDYKKzEwLFRodSAzIEZlYiAxMSwyODkxLjEzMzAwNTM0NDMwMjUsMTU3OC42MDU3MDQ3NDMyMzAzLDIyNzguMTA2NTg1MDQyMTg0NiwzMDU3OC41NDY4NTQ3OTY4MjcsMjg1LjI0MzU0MDUzNjQ3NDQsNzkwNzguODQ2MjQxNDI1MTgsMTAxMC4wMjIzMzI0NDM2NDkyLDI0MDQzLjA4OTUwMTQ1OTI2NCw0OTQ0NC42NTY3MzUzMjc5Myw2Mjc5Ny4wMzQyMjQ3NDc4OSwxMDgzMS40NDMzODgzNzgyMDQsMzA1NTUuMDAwNTE2ODEwNDcsMS44MTUwMjE4MTY4NzI1MTUyLDg3NDguNjQ1MTQxNzMwMzQ3LDQ3NzQ3LjM5NjUwOTA1MzM3NSwxMTE4MzkwLjEwNTI0NDYxMDUsMzIyODE5LjAyOTQyNDMwNjEsMjIuMDI0Mjc3MzY0NjA4MzYsNjM4Mi4xODU2OTc1NjA0OTIsMTIwODU0LjM3MTAyNzIzODE2LDExLjEyNzQ2MzM2MzM4MzQwNCw3OTYuNDcxODk0NTY2MjEzNiwxNDkxMC45NjAwMzQ3NDY1NTUsMjI5Nzc1LjE1NTU3OTIxNjIzLDMyMTI2LjIzNDc4MjUyNzk3LDYuMjc5NjE2MzYyNzkwMDc2CisxMSxGcmkgNCBGZWIgMTEsMTY1OTYuNzgzNDgwMzE1ODksODMxNi41MTc5MjQyOTExNTMsMTI1MDkuMjU2NDE2NDYxMTcyLDgwMDkwLjk1OTEyMDYzNzIsMjEwNy44MjIwNTQ4NjUwNzgsMzk4ODA0Ljc2NTc3NjA2ODMsNzgwOC41MzgxOTUxMzk4OTgsMTU5MjQxLjA3MzE3NjAwNTc0LDI3MDYxOC40MTg1NzE3MjE0LDM1MzQxOC4zNjE3OTgwNTY5LDYzMjQxLjg0MTc2NTY2NDIsMjA3NTg3LjU0MjQ0MTQ2NzY3LDE2LjA5Njk3MDYwODU0MTI2LDU5OTE4LjI0MTM3ODQyNjU5LDI2NjEyMC43NzU1ODM5ODE2LDIxODYwMjUuODczNjE0ODMwNCwxMDcxNjkyLjIwNjk2NzI4OTYsMTY4LjU3NDA5MjY2MjUyNTI2LDQ0MTAzLjIxMjQ4OTk1MTk5LDQ2ODEwNi4xMTQ1MjQ1MTY4Niw4OC4zNTgyMDIzMDcyNTAxOCw2NjI3LjUyNTQwOTMwNjU4LDk5MzkxLjIzNjI5Njg2OTQ3LDEwNzM1MzcuOTQyNjA4NDI4LDEwODE2Mi43MjE4MDQ2MDcyMSw0NC45MDUzMDk3NDc5NTY2MgorMTIsU2F0IDUgRmViIDExLDYwMzc2LjcyNjM2Mzc1MjkzLDI4OTc4LjcyMTU2NjE4ODIxNSwzODU1NC40Njk1NjA4NzI4OTQsMTIyODUxLjE4NTcyMTczMTkzLDEzNTM5LjEwNDc1NDI5MzA0NSwxMjMwOTM3LjExNDkwMzE0MTUsNTYxMjcuMDA4MDYxOTIyNDcsNzIyNTc5LjkwOTIzMjU2MDgsOTA2MTExLjQ5MzcxNjc5NzEsMTE3MDQ4NS41MjMwODYxMzcsMjIxNTcwLjA0MDQyMzM5NCw5NDc4NzEuNjU4NzUwOTAxLDEzNy41MTIxMTgxNDczOTg2NCwzMTkzMTkuODM2Mjk3NjkzNDMsNzY0Nzc5LjI3NzE5NDgwMjgsMjc0NDEyNC4yOTQ5NzYyMTYzLDE3NzU2MDUuODI2MzY0NzU4LDEyMTQuMTc2MzAwMTM4MDQxMSwyNDkyMTYuMzM1ODQ2OTM2NzQsODk2NDUwLjM1NDIzNDE0ODYsNjY3Ljg0NjIyMDE2OTc5NDIsNTEwNTUuMDkwMzY4OTU2LDQ4NDA5My45NzM1NzY5MDI3LDI1ODQ5NTIuNTk1NTgzODY3LDE5NDI3Ni40MjM3MDIwOTU5NiwyNzEuMDUzMDcyMTkxMTk0OQorMTMsU3VuIDYgRmViIDExLDEwODQ2Mi4zNzQ3OTE5ODk1NSw2NDg2OS44MzA3ODA2MzY3OSw2MDM5MS45OTk1NjkwNzQyMTQsMTM5NTA0LjYzMjI2MTE0NjQ0LDU2Mjg4LjAzNzI4NTM1MjU5LDE5OTI4NDQuOTM0NTEwMDU4NSwzMzM4MTQuOTY4OTgwMDU0MiwxNTQ2ODEyLjk2NzE0NTg5NCwxNTIxMzAxLjMwODQ0ODU1NTYsMTkyNDU4OS43Nzk3OTQyNjcxLDM4MTU2MS4zODY4Mjg3NTkwNCwyMDA5NDk0LjMwNjIzMzg2NiwxMTE3LjIwMTczNjM5MDA2Niw4NzkwMzkuMTUwMjg0MDEyMywxMTI5Mzg0LjQwMzY0NTM5MTYsMjg0MTg2OS4wMzQ3NjgzNTMsMjA1MTQ0OC4zNjc0ODM5NjU0LDgxMzkuMjY0OTY1NjUxNDMyLDg0NTczMi43MjcxNDE3MDMxLDEwOTg4NjUuMDY2Nzc4NjEwNSw0Nzg2LjYzMDM4MTU5MDAyOSwzMTE5NTYuNzcwNzIzMDY1LDExNTQ3MTQuMTEyMjkzNjI0NiwzNTE3MTk1LjAzNDAzMzU1OCwyMzM2NjEuNDk0MTczOTg2MywxMDY0Ljg0NTA1NTY3NTg5ODUKKzE0LE1vbiA3IEZlYiAxMSwxMjk0ODkuNTc0MzA5MjY2NDgsOTg0NDcuMDI1NjkyNTk0MzQsNjgyNjEuNzQ4ODYwODMyMjIsMTM4MTU5LjgxMzcxNjc2MTI3LDExMTc2NC4xMTYwNDcyMTM1MiwyMjg2NzQwLjQ2MDczMzQ0MywxMTk5MDE5Ljg3MjM2Njg2MjEsMTk3NzMxMC41NTc2MzgzNjM0LDE3NjcwNjAuMjEwNTgzOTQxMywyMjE1Njg5LjAwODEwMDg5OSw0NDc2NzMuMTgzODIwOTI4MzMsMjU1NTA3Ny43OTgyMjA5MTM0LDgzMTMuMzQ3NzgxMjQ0OTk1LDEyNzMyMTQuOTY5OTI1NzYxNSwxMjQ2NDY2LjY2NjI5OTczMTIsMjY4NjE3OC4wMTE3MTQ0NTQsMjA0NjY4OC41ODE1MjI3NDMsNDkwMTQuMjk1MzIyODA4MDUsMTQzNTAxNS40ODU5MDgxMjE2LDExMjU1NDAuNDQ1NDc4MTEzOCwzMjMwNi4zMTk0ODU2NjkwOCwxMDE4Mzk2Ljc3NDQzMjMzODksMTU1Mjc2Ni44MjU2Mzc5NCwzNzYxNDU1LjIzMzU3NDc0MTUsMjM3NDI1Ljk3NTA5Mjk4Mjg0LDIyMDguMjYwMTExOTM2NTcxCisxNSxUdWUgOCBGZWIgMTEsMTMxMTE1LjIwNzUyMTQzMDU0LDExMzY2NC42MTUzNzg0ODIwNiw2NzQxMi40OTc5MTYzMzY0NSwxMjc0MTAuNTUxOTMzOTcwNzgsMTM4Njg5LjQxMTczNjc1NjQyLDIyNzQzNTYuNDY0OTQ3NDYwNywyMDk3OTAxLjQ2NDk2NTQyLDIwNjExMzAuODk4MTE3MTQ5NywxNzY3MjY2LjUwMTczNTU2NzMsMjIwNjg5MS40OTg0MjkyMDQzLDQ0OTc3MS45Nzk1OTQyOTI3NiwyNjU3NDE0LjIyMzYyODMzOCw1MTg2OC4xMTczMzY4MjY5NDUsMTM5NTA0NS40OTcwMzQ0ODksMTIxNjk0OC4xMjkwNDgxODY4LDI0MDk2NDAuMTMxMDQyMTM0NSwxODk1MzI1LjE3NDc5ODAyNzYsMjA4NjEyLjQ3Nzk3MzQ4ODQyLDE2NzQ1MTYuNTE1NTM0MTY0NiwxMDU3NTc5LjY2NjY4MTkwMDIsMTkwMDI1LjUxNTM5MDk2NzYsMTYyMzM4My42NTkzNTEyMDQ4LDE2NTIzMjQuMDEwMTY4MDYyLDM2MTUzMzEuMzExNDc1MjgyNSwyMjIxMTkuNDQ2MzYzMDEzMzgsMjg1Mi4zMTIxNjgyMDUzNzMKKzE2LFdlZCA5IEZlYiAxMSwxMjI0MjUuNDEzOTg4Nzk0NjgsMTEzNzE0LjY0OTc3ODM4MjI5LDYyMDY1LjkyMDMzMTM3NDksMTEyNTQyLjE3ODM1ODYxMzU5LDE0Mjc5MC4xMTYyNzIwMzE4NSwyMTAyNDU5LjcxNDUzNjAzMywyNDc0NDAwLjg0ODA1MjA0MSwxOTU0OTIzLjMwMjU0MzYwMTUsMTYzODgxOC41MjMyODY1OTg3LDIwNDE3NjcuOTMwMTM3Njc4NSw0MTgxNDguODE1ODUyNjg4OCwyNTE3NDg3LjEzMDM3Nzg2LDIxMDI5Ny43MDE4MzMyMDMyNiwxMzU3MTg4LjkyNTgzMDQxMzYsMTExMzAzMi44NTc2Mzk5NzgsMjA5MDMyNi44MTU0NTc1MDE3LDE2Nzg1NzguMTg3OTI4Nzg3Nyw0MzkxMDEuNzExMDc5ODg4NDUsMTY3ODI0NS45MTg2NTM3NjY0LDk0NTIyOC41MzI0MTY2NTcxLDcyNDkwMi4wMjQwNzk3NTQ1LDE4NDQ4NzcuNTQxNzYwMDMwNywxNTg0MDgyLjY5NTEwMzgzMDcsMzI3NjE2OS4wOTI2NzIwNjU0LDE5Nzk4NS4yNzQxNDY2OCwyOTg5Ljk1MzMxNTc0MTc5CisxNyxUaHUgMTAgRmViIDExLDEwODk5MS4xOTQzOTI5MjY5NSwxMDU0ODIuMTk0OTE3ODcxMDIsNTQ3NjUuMTQzODgwNjY4MjYsOTY2MTQuNDk5MjY3NDU5NTEsMTM0NTQyLjAzMDI4OTgxNTgzLDE4NTk5NDkuODAyNjQwNzE1NCwyNDkxODE0LjE1MzIyMzAxNCwxNzU3MzU2LjEzMDU5MTY3NjYsMTQ1MjY3MC44ODc5Mzg5ODU0LDE4MDcxOTcuOTgwMzk1Mjk1NCwzNzEyNTEuODEyODYxOTIyMiwyMjYxNDIxLjQ5NDc2MjM2NSw0MTI2ODcuODM3MDE0NDA3MiwxMjM4NzI1LjkxNjEyNTg2MjksOTc3OTI0LjI2NDk5OTk1MTksMTc3MjA5My4yNzIyODg3ODM3LDE0NDM2MDUuMzg0NjcxMTYsNTU5NjMzLjk1MjAyODc5MDEsMTU1ODExMS4wMTYwOTg3MDg2LDgxNzk1My45MDk2OTk1ODEyLDEzNDkwOTQuMTYyMDIyNDI1NiwxODI2NTAyLjQwODA5MjYzNSwxNDMzMjc4LjAzNzc0MDA0ODUsMjg2MTE2My41ODA3OTQyNDEsMTcxMDE0LjYwODcyMTY1OTUsMjg0NC4zMjEzMjgxNzA4NgorMTgsRnJpIDExIEZlYiAxMSw5NDA2Ni40NDY5MTQ3NjY3NCw5MzUyMS40OTEyMjg2MTQ4LDQ2OTc5Ljg4OTQ4ODczNTAyNSw4MTMwMS4wNTY4MDUwMjg4LDEyMDQ1Ni4wOTc3NTI1ODg3MywxNTk4MzczLjYzNzYzNDY2NjIsMjMxOTYzMi4zNjM5MzAxMiwxNTI2NjA4LjkzODk2MzI0ODQsMTI1MDA2My43MzI0NTYzNTM1LDE1NTM1ODguNjcxODY4NzU5NywzMTk4MjMuNTE1MjY5MDkwOCwxOTYzNTM2LjU1Mzg2MjM2NzMsNTA5OTg3LjE4MDAwOTIxNTgsMTA4Njg5Ni4zNjk5ODkyOTQsODM2NDQyLjc4NzI0MjU4MiwxNDc3NzMyLjg5MTY3NzkwNjUsMTIxNjMzOC4zMzk1Mjg0ODQzLDU4MjcwOS43ODQ1NDAwMTM2LDEzODIxNjUuNTE5Mjk4NjM5OCw2OTIyMTguNTY0NjMyNjUwOCwxNjMxNTM4LjMyODY0Njg3NjgsMTY4NDA1NC4xMjIzNTM3NjE1LDEyNTA0NTUuNjc0OTE0NTQxMiwyNDM2OTk5LjY5MzgyNDA5OTQsMTQ0NTQwLjEzNjQyOTg3NTgzLDI1NjEuNTE1NTg1MTk4MzI4CisxOSxTYXQgMTIgRmViIDExLDc5NDU3LjUzMzE4NDM3MDc0LDgwNDkyLjEyMzA4MzczOTg4LDM5NTEyLjIxNDI2NjQyNTE3LDY3NDI5LjY0NDk2NDIxMzc5LDEwNDM1Ny4wMzc1OTI1MDcyMSwxMzQ2MDEzLjU4NzE3ODk4MDcsMjA2MTE2NS4xNTMxNTgwODEsMTI5NTQ1OC4zMzYzNDA0MzcyLDEwNTM3MTIuNzcwNjM3NzQ0NiwxMzA4NjI1Ljg1NjQ3NzE3MTYsMjY5Nzk4Ljk2Njk2MjA2MzU3LDE2NjU2NjAuMDY0Mjc4NTk4Miw1MjQxNDcuOTM2MjE5NTIxNiw5Mjg3ODUuMjgyODAxMzYwOSw3MDIwMDAuNzc0NjU4NTYzNCwxMjE3MzgyLjQwNjE3OTM1NDMsMTAwOTczNi4zNDU4NDA5Mzk5LDU1MjM2MC4yMzg4MjM0OTQyLDExODk5OTguNDczOTAxOTgwMyw1NzY0OTUuNjcwMDE0NTI5NiwxNjYxMjk2LjgwNzQ0NjA2MjMsMTQ4NzMyMi44NzcyNDkxMTU0LDEwNjQzMjUuNTkxMjExNDAxOSwyMDM5MTI4LjI4ODUxMDQ0MzQsMTIwMjYzLjYxNzMzMjMzMDkzLDIyMjcuODc3MzIxNTE4OTkxCisyMCxTdW4gMTMgRmViIDExLDY2MDgzLjM4NzExMDMzMjgsNjc4NTkuNzk2OTY5MTYyNjMsMzI3NTcuMTMzNjMwNTI2OTgzLDU1MzI2LjIzMjU3NDEwNzUzLDg4Mzg3LjI1MTAyNDEyNjk4LDExMTY5NDQuMjQ0NTc3NTM2LDE3NzY2MjYuMDAwNTE1ODgxNywxMDgxMDI4LjM3MDk0NjAyNjYsODc1MDA2LjQxMzU2MjY3NTYsMTA4NjExNC43NjAyNDM5MTQ2LDIyNDE3MC42MDk1NDE1NjUzLDEzODk2MDYuNDQ0MTMxMTY4LDQ5MzQwNS45OTA5MDk2MDk0LDc3ODk3OS4zNzcwOTI4NzI1LDU4MTA3Ny4wMjU4ODMwNDU2LDk5MzgzMy41NjU3ODA4MzU3LDgyOTA0Mi4zMzY1MTMzMjA2LDQ5NjM2MC45MDU4OTU3NzQ2NiwxMDAzNDQ3LjAyMTI4MDQ5OTQsNDc0NDY5LjkxMjcwOTIzMDIsMTU1NTk2OS41MDYyOTc4OCwxMjc2Njg5LjUyMjU5NTI1OTQsODkwMTAzLjkxMzk3ODE3MzQsMTY4NDExMC4wMDA4MzExNzMzLDk4OTExLjM3Njc5NjMxMjYsMTg5Mi4xNjU3Njc1OTgzNTg2CisyMSxNb24gMTQgRmViIDExLDU0MzMyLjcwMDAzOTQ4MDI3NCw1NjM1OS44NzkwMzYyMDU3MDQsMjY4NjguMzkxNjk2MjE2MTEzLDQ1MDMxLjEwMTY1NTQwMzc4NSw3MzY1NC42MTYyMjg4MDU3MSw5MTY3OTcuNTc4Mzg1MDQxNCwxNDk5MzMxLjA0NzIzMDQyNDgsODkxMDIzLjQ5Mzc5NTIxNTMsNzE4NTg5Ljg0OTc2NzU1NjIsODkxNjA4LjQxODI4NDUwMDMsMTg0MTc2LjYzMjM0ODg1MjgsMTE0NTE1Mi4xMDUwNzI4NjQ4LDQ0MTQ5MS41Njc2MjkxMTAwNyw2NDQ0NzcuMTE0NjMwODY3NCw0NzYwNTguODI0MzUwNzU5MjcsODA1ODQxLjc5MTgyMzkyNDUsNjc1MDg5Ljg2NDQwOTU4NDMsNDMxMDg0Ljk3ODIxOTEyNTYsODMzNDg4LjM0ODY1MzMxNTMsMzg3MDU4LjEwMjAwMjM1NjcsMTM4Nzg5MC40NzY2MzUwMzQyLDEwNzQyMzQuMDY1MDUxMjUzNyw3MzQ4NTMuMDUwOTMxMDQ1LDEzNzc0MzguMTQ3MDI4MzMxNiw4MDY0Ny42NjQ1OTQzNTAzMiwxNTc5Ljk2MzEzODY1NjcwNDQKKzIyLFR1ZSAxNSBGZWIgMTEsNDQyODkuMDgxNDEwMDk1NTUsNDYyOTIuODY3MjU3MzkyNTk0LDIxODYyLjYwNzIxNDc1NzgzOCwzNjQzMi41NjcxMTcyOTAxOSw2MDY0Ni4xOTAyNTE4MjI3OSw3NDYzODguODM2ODA2NzkyMywxMjQ2MTI0LjgwMTI3ODcyMDEsNzI3NjY5Ljk1NDIxNzU3OTQsNTg1MjUwLjM0MjkwODEwNjYsNzI1OTQ4LjIzNTg3NTM1NjIsMTUwMDQ5LjQxODg1MjE1OCw5MzUwNzcuNTY5MzY1NDI5MiwzODIzMzYuNjc3MTU3NDk2MDQsNTI3ODA1LjgwOTIzNTg2NDMsMzg3MDI0LjE2NTQ0NTQ3MDgsNjUwMTQ4LjA1OTEyMzM5Myw1NDYzNTEuMTIxOTU0OTgyLDM2NTc1Mi4xNDEyNjAzNjMxNiw2ODQ2MzAuMzU4Mzk5NTMwNiwzMTM2NjUuOTU2NzE3MDA2MiwxMTk5MzkzLjEyNzE0OTIxODIsODkwODcyLjM3MzA5MzY1NTQsNjAwODY0LjU5MDYxMzc2MDUsMTExODQzMC4xMzcxMjYzNjk0LDY1MzMxLjQ5OTExMDg0NTQ2LDEzMDIuODg3Mzg0ODE0MTE2OAorMjMsV2VkIDE2IEZlYiAxMSwzNTg3MC44NjI5MTM5MjYzOSwzNzcxMC4zODQ1NjY1NDczNCwxNzY4My42NDYyMzI0NTkyMSwyOTM0Ny44Mzg0NDA0NjcsNDk0ODkuNDk0OTgwOTEwNDEsNjAzOTYwLjc2NDE5NzIzMDUsMTAyNDAyNS4zNjc5Nzk5NDA4LDU5MDE3My4xMDkyMDM1NjQxLDQ3MzcwNC44OTIzNjAzODQ3NSw1ODc0NTYuMDMxNTc3ODY2MSwxMjE0NzkuNjIxNTIwODI2MzIsNzU4MzEwLjEyOTM0MTAxNiwzMjM3MzguNDkxNjUwMzU1OSw0Mjg5NzUuMjAxNzA5NTU1MywzMTI4NDAuNjIwNjMwNzU0MzMsNTIyNjgxLjA3MTMyNzk1MzIsNDQwMTc4LjI5OTc5NjgzOTIsMzA1MTc1LjA0NjMyMDI0OTIsNTU3Njc1Ljk2MDQ4NTk1LDI1Mjk1NC40MDMwMzc4NDgwNywxMDE0MDUzLjY3NTI2OTkxOTYsNzMwODk2Ljg2OTYxODYxOSw0ODc3NzMuNDc2MzEwNzMxNTUsOTAzMjMxLjUwNjI5MDg5MSw1MjY3Mi45ODQ1ODAzMDgwNCwxMDY0LjQyMDgxMDc4MDgwMzMKKzI0LFRodSAxNyBGZWIgMTEsMjg5MTYuMTMzNzQ2NTM2MjQ1LDMwNTMwLjQzNTgxODEyNDA2NCwxNDI0MS41MzE0NjA5OTEyMDcsMjM1NzAuNDEzNDkyMjEwODk3LDQwMTE1LjE1MTUxNjI2MDc5LDQ4NjU0Mi43NDU5MDU5MTA3NCw4MzQ0MTAuNjk4MzMyMTA0NCw0NzYyMjAuNTU3MDA2ODQyMSwzODE2ODQuNDIzODAzMjM0OSw0NzMyNjIuMDg2MjY3NDI5MzUsOTc4OTcuOTMyMzk5NTcyNSw2MTE4NDUuNDY0MjM0MDY1NywyNjk3MjIuNzUzMTEyMzg3NTUsMzQ2NjgwLjk0NTgzOTY3NjgsMjUxODI3LjIzMTMwMjM0MjE3LDQxOTI0My45NTU3OTQ3NzM2LDM1MzUzMy4yMTcxNDcwNjAyLDI1MTUxNC44NTg0Mjg0OTIxMiw0NTE0MzYuNDQyMDM0ODU0ODQsMjAzMjkzLjg4NTgyNTg4MDYzLDg0MzkzNi41NTQ1MzIxNzU4LDU5NDgzMC4zMzU4NzQ2MjkyLDM5Mzg1NS40NTcyNjc5ODA4LDcyNjYxNS4zMzk0OTMwMzMyLDQyMzI1Ljc2NzMwMDQzOTE1LDg2My41NDY1MDM3NzEyNDgKKzI1LEZyaSAxOCBGZWIgMTEsMjMyMzIuOTc5MDUzNjQ3ODE0LDI0NjA3LjMyMDM2MjkxODM4OCwxMTQzNS4yMTk4MDE3NjAzNSwxODg5Ni41NDQ1NzU1OTA3MzUsMzIzNTYuMTQxNDI2MDk0Mjc3LDM5MDc0OC43MzQyODQ0NTU5NSw2NzU2MTUuNDcyMDI3MTA5NywzODI4NzcuNDUxMDk0NTM3NiwzMDY1NzEuNjI1MTkyOTM0OCwzODAwODUuMjQ2NjEyMjk3NCw3ODY0MS4xMjExNDE4NDUzOSw0OTE4OTEuNTgwNzg3NDAwNSwyMjIwNTIuOTI0MzIyOTIzNDcsMjc5MDI4LjY3NDUyOTMyNzI1LDIwMjEzOS45OTUzNjM5OTk0OCwzMzU4ODEuODIwMTE0ODkyOSwyODMzOTYuNjAzNTQ1Njg1OSwyMDUzOTEuMjU4NTY0MjY2MzgsMzYzNzcxLjEzODM2NTY3MjY3LDE2MzAyMi42NzUyMTAxMDg2Niw2OTQyMTcuMjcxMDA4MDM5NSw0ODExOTAuNzE1OTk2NjE3MSwzMTY4MDMuNDgyNjA1NDE2Niw1ODMwMjEuNTczOTUxOTk3OSwzMzkzOS40MTA3MDg1NTU5NCw2OTYuOTc0ODQ3ODY5MTI3MQorMjYsU2F0IDE5IEZlYiAxMSwxODYyNy44ODg5ODYyMzEyNjQsMTk3NzIuNzY3MTIzNjE5NDA0LDkxNjUuMjk3NDE3ODk1MjM1LDE1MTM4Ljg0NjkzMTE2ODYxLDI2MDA2Ljc0MDczMDY4MDI0LDMxMzIyMy45OTMwOTM0OTM3NCw1NDQ1MDguNjkxOTc4NTQ2NywzMDcwOTkuMTk1ODk1MjUzNSwyNDU3NTkuMjQxMDA0NTY5NiwzMDQ2NzAuMDgzMzE4ODY3NjYsNjMwNDUuNTQxNDk3NzY3NDIsMzk0NTIzLjMyNTU4ODMwMzczLDE4MTE4My4xNDg3NjY2NzI4LDIyMzk1NC45NjI3MjQzMTA0MywxNjE5ODQuOTUwOTc0ODM2MTYsMjY5MDU1LjkyMzE1NzA1MjMsMjI2OTgwLjMyNzEzOTE4Njc2LDE2NjU3NC4zODcwOTMwOTAwMiwyOTIxOTkuNTM4NzUxMjE3MiwxMzA1ODQuMDI0Nzk4NTU2MzksNTY2MDk4LjUyNzAzNjEzMjYsMzg3NTU4LjU5Mjk3NTM3ODk3LDI1NDE3NS40NDM2NTg5ODA1LDQ2NzEyMy43MjE1MDEzNjg0LDI3MTg3LjAyNTM2ODc3NzUzMyw1NjAuNDcxNDY4OTU5Mjc0OAorMjcsU3VuIDIwIEZlYiAxMSwxNDkyMC43MDIwMDQ2MjQ4MDIsMTU4NTkuMDUwMzgyMjkwNjY3LDczNDAuNDg2NzEzNzAyMjk3NSwxMjEzMi4yMTExNTQ3ODQ1NTIsMjA4NTYuMTAyNTE0MjQwNjA3LDI1MDg3NS45ODY0MTEwNTExNiw0Mzc0MjQuMDQwMzA1NDMwOTQsMjQ2MDA3LjAzNzM2MTg0MjQsMTk2ODM2LjM0NjA4NjY3ODk3LDI0NDAxMy4xODAwOTQ2NTA1NCw1MDQ5NS45Njc4NTk1ODAwMTQsMzE2MDMzLjcwMTYxMDcwNDMsMTQ2ODUxLjI2NjIyNzUzNzk3LDE3OTQ1OS4zNjU1MzM2MjQyOCwxMjk3MjUuNzQwODEzMDYwOTgsMjE1NzA0LjI3NjY1MTE4MDA2LDE4MTgyMS4zMTUyNDk5NjE1NCwxMzQ0MDguMDI0Mzc0NTU1MzYsMjM0MjQ1LjU0NzIzNTQ0MzcyLDEwNDU5MC4xMDYxMTg4MjEwMiw0NTg2MjIuNDEzOTg1NDMwNjcsMzExMjAyLjczODA3NzI3NzksMjAzNjM3LjcwNzkwOTEyMTY0LDM3NDEwNy42MjM4Nzk0MTMwNiwyMTc3Ny45NzYxMzQ3Nzc3MSw0NDkuNjE5MjY5Mjg2NjU3ODcKKzI4LE1vbiAyMSBGZWIgMTEsMTE5NTEuNDMxMDA5MTIxNTgxLDEyNzExLjAxMDk4NjQ1OTMxLDU4ODAuNDQ5NDQ3NzAyNzk4LDk3MzUuMjY0Nzc3MzYzMTgzLDE2NzA2LjE1Nzg0Njk4MjAzOCwyMDA5NzUuNzY4MTI3MjMwMzIsMzUwNjg0LjUwMjk5MTY0MDQsMTk3MDE5LjgwNzk0OTM0NDA3LDE1NzY3MS4yNTIwMzY3MzI4OCwxOTU0NjIuODY4MjY5MDA0Nyw0MDQ0Ny41NTI3ODgyNDQ3MzUsMjUzMTAxLjMyMTUwMTA1MDgsMTE4NDQwLjYyOTcwNDExNjM1LDE0MzcyMC45MzA5OTMxNTkwNywxMDM5MjguMjY2NDAzNDg1MjQsMTczMjM4LjU0MjM2OTU1MTU4LDE0NTgwNi44OTIxMjQ4NDQ2LDEwODA2MS41ODIwODc3ODQyOSwxODc2MTYuODM0NDMzOTMyNiw4Mzg0My4wNjk3MTY3NjM0NSwzNjk3NzQuMDEyMzIzMzU3NywyNDk0MjkuMzQyNTQ1NzcwOTIsMTYzMDg0LjMxNTM2MTkzNDAyLDI5OTc3OS42MDc2MjUzNjc0NywxNzQ2MS44NzE1MzE0ODY2OSwzNjAuMjI5NDQ5NjQxNjM2NgorMjksVHVlIDIyIEZlYiAxMSw5NTgyLjM1NjQ0MTc0MTY4NCwxMDE5MS40MTYzMTQwNTAzMzksNDcxNi40NTI5NTg0Nzk1NTksNzgyOS40MTAxNzI5NzU4OTgsMTMzODAuMDI3MTE5NTYwMTYsMTYxMTg0LjQyNzYzMTU3MjAzLDI4MDg3Ni45NTczOTQyNDQ1LDE1NzkwMS4wMDk0OTg1ODU3LDEyNjQzNC40NDY1NDk4NzEzMSwxNTY3NDUuNjYzNzIwNTE4MzgsMzI0MzIuMTY0OTQ0ODI3MTI3LDIwMjg0OS43MTcxOTQ1MDQzLDk1MTk0LjgyMDk2OTM2NzYzLDExNTE0NS45MzA5MTk4MTQ2NCw4MzM2OS4yNjE5ODE2MzI3NCwxMzk1MDcuOTM2NzA2MDU1ODYsMTE3MTYyLjQ4MjM3ODc3ODMyLDg2Njc0LjM0NDU1ODY5NDA4LDE1MDI4NS4wNTI4MDE1ODMwMiw2NzMzMi4yMDE2MTY5NjM3OCwyOTcxMzQuNTM2OTI0MTc2NDQsMTk5NzYxLjU1OTA5NjAxMDMsMTMwNjgyLjYwMTE3MzkxMjYsMjQwNTc3LjczOTc0MTk5MzQ2LDE0MDI3LjcxODI5ODYxMTQ1NywyODguNTM5NDIxNTg5NzQzMzcKKzMwLFdlZCAyMyBGZWIgMTEsNzY5Ny40OTU4MDMzODEyOTUsODE4Mi40MzQ2OTA5MDMzNDc1LDM3OTAuODcxODYzMjA1ODc2Nyw2MzE2LjY0ODQxMDYyNzc4NSwxMDcyNC44NjY0NTE2NjIzMTIsMTI5NTM4LjQxMjYyMTI3MDE4LDIyNDk3Ni4yNTYxNDEyNzc4MiwxMjY3NTguMjU2ODIwNzAxNDEsMTAxNTg4LjUwMjgxODk5NzE1LDEyNTk1Mi40NzgzNDkwMzM4LDI2MDU2LjA4NjAzMDY4Njc3NiwxNjI4NDUuODQ3Nzk2NzY1Nyw3NjMzOS45MTQyMDAyNTc2Myw5MjM3Ni4yMTc1NTQ3ODcsNjcwMjUuNDAxMzYxMDYzODUsMTEyNzQ4LjM5NzU3MTI5Nyw5NDQyMC41NDM0MTY0OTI5LDY5NDMyLjk0OTI5NjI5NzM1LDEyMDUwOC40NjEwNTgyMzYwMiw1NDIxOC43OTI0NTA5NzE2LDIzODI1MS42OTY1MTgwNjMxNCwxNjAwMTcuMzkyMTIzNDE1NzgsMTA0ODc3LjA5MzU3NjYxMDYsMTkzNTMxLjY1Mjg5MTU1ODI3LDExMzAwLjU5MzkzNzgxMzI3OSwyMzEuMjg0ODYxMTM2Mjc4NDQKKzMxLFRodSAyNCBGZWIgMTEsNjIwMC43NDQzNDAxOTIxMzgsNjU4NS4wMTYwNDU0ODMxMjUsMzA1Ni4xMTkzNzgxMzA4OTkzLDUxMTYuOTY0MDEwODA4NDY5NSw4NjExLjYwMjE1MDU1MDY4NywxMDQ0MTQuNjEzOTc0MDYzODksMTgwMzgxLjcxNTEyMjU5NTE3LDEwMjAxNy45NDY0NzQ3NDAxOCw4MTg2MS42MDAwOTk2Mjk0NiwxMDE1MDQuOTIwMjEyNDUzOCwyMDk5My40MTgxNzM4NDY0MzIsMTMxMDY3LjA2MzIwNTMwMDEzLDYxMTQ5LjU2MDg5Nzg5MTQsNzQyNzYuNDI2Mzc5MjM2MTcsNTQwNTMuMDUwMzYwMDA4NjEsOTE1MjcuOTYxNTgyNzk3MDgsNzYzODEuOTY4MDA5MjE5MjQsNTU2MDguMzcwNzAwNjQ2NDI1LDk2ODIyLjg2OTI1MjgwMDY2LDQzODE1LjcxMjEwMzYxNzI4LDE5MDgzNS40MjMxNjE5NTI5LDEyODMyOC44NzU0MTg2Mzg2LDg0MzcxLjM2MDUzNTMzMDI3LDE1NjE5OC40ODYzMzIyNTc1LDkxMzcuMzAxODE3NzQzMTQ4LDE4NS43MDEyODc5NDcyMjIwMworMzIsRnJpIDI1IEZlYiAxMSw1MDEzLjQ1NDU4ODE1MDM4OSw1MzE3LjE5NDQxMTc4NDY3LDI0NzMuMzU2ODQ0MTkzMjM0Myw0MTY1LjY0MDY3MDAwMTAwNSw2OTMzLjA2MDMzNTQ3OTE5OSw4NDQ4Ny4yNzgyMjQ3NTk0NCwxNDQ5MDUuMjQyNjY3NTg1Nyw4MjM4OC43ODAzNTM5OTI1MSw2NjIxNC4zMDUwNjgwNjAzOCw4MjExMy41NjE3NDE4NTUwMSwxNjk3Ny42ODYxMzk1MDcyMjYsMTA1ODUzLjkxODc2OTY3NDYsNDg5NzUuNDkyNDczMDM5MjcsNTk5MTEuMDU2ODk0MDMwMDQsNDM3NjQuNTc5ODYzNTg5OTU1LDc0NjkzLjkxMDY1MDQ4OTU5LDYyMDc2LjMxMzczODA2NzE0LDQ0NTY5LjA3OTM0NzY1ODY4LDc4MDE2LjY4NDM4MDk1NDk1LDM1NTY1LjY3MDU0NDQ0MTM4LDE1Mjg0OC4yMDc5NDY1MzA3NSwxMDMxMjkuMjA1MDAwNzY0MjgsNjgwOTkuNjQ3MjE4NDgwMDIsMTI2NTkwLjkyODQ0ODc4NTkzLDc0MjEuNzc5MzM4NTU0NjgyLDE0OS40ODgzOTg2OTI0MzkxNQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Ob25aZXJvTW9ydGFsaXR5UmF0ZV9SS19SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vSW5jaWRlbmNlXzAuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Ob25aZXJvTW9ydGFsaXR5UmF0ZV9SS19SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vSW5jaWRlbmNlXzAuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJjMjQ0MDEKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L05vblplcm9Nb3J0YWxpdHlSYXRlX1JLX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9JbmNpZGVuY2VfMC5jc3YKQEAgLTAsMCArMSBAQAoraXRlcmF0aW9uLHRpbWUsCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L05vblplcm9Nb3J0YWxpdHlSYXRlX1JLX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9JbmNpZGVuY2VfMS5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L05vblplcm9Nb3J0YWxpdHlSYXRlX1JLX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9JbmNpZGVuY2VfMS5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmMyNDQwMQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvTm9uWmVyb01vcnRhbGl0eVJhdGVfUktfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL0luY2lkZW5jZV8xLmNzdgpAQCAtMCwwICsxIEBACitpdGVyYXRpb24sdGltZSwKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvTm9uWmVyb01vcnRhbGl0eVJhdGVfUktfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL0luY2lkZW5jZV8yLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvTm9uWmVyb01vcnRhbGl0eVJhdGVfUktfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL0luY2lkZW5jZV8yLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZmQxM2MwCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Ob25aZXJvTW9ydGFsaXR5UmF0ZV9SS19SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vSW5jaWRlbmNlXzIuY3N2CkBAIC0wLDAgKzEsMzMgQEAKK2l0ZXJhdGlvbix0aW1lLEVHLUZSRy1HMjEwMDAxLEVHLUZSRy1HMjEwMDAyLEVHLUZSRy1HMjEwMDAzLEVHLUZSRy1HMjEwMDA0LEVHLUZSRy1HMjEwMDA1LEVHLUxPRS1HMjQwMDAxLEVHLUxPRS1HMjQwMDAyLEVHLUxPRS1HMjQwMDAzLEVHLUxPRS1HMjQwMDA0LEVHLUxPRS1HMjQwMDA1LEVHLUxPRS1HMjQwMDA2LEVHLUxPRS1HMjQwMDA3LEVHLUxPRS1HMjQwMDA4LEVHLUxPRS1HMjQwMDA5LEVHLVVQRS1HMjkwMDAxLEVHLVVQRS1HMjkwMDAyLEVHLVVQRS1HMjkwMDAzLEVHLVVQRS1HMjkwMDA0LEVHLVVQRS1HMjkwMDA1LEVHLVVQRS1HMjkwMDA2LEVHLVVQRS1HMjkwMDA3LEVHLVVQRS1HMjkwMDA4LEVHLVVSRy1HMzAwMDAxLEVHLVVSRy1HMzAwMDAyLEVHLVVSRy1HMzAwMDAzLEVHLVVSRy1HMzAwMDA0CisxLFR1ZSAyNSBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMixXZWQgMjYgSmFuIDExLDAuMDAxNzM2ODIzMzYxMDYyNzE4MywzLjk2MTg5ODY1NzM3Nzg1MkUtNCwzLjEwODk1MjE1NzkzMzQ0ODNFLTQsMC4yMTQ4MTk3NTgzMDQwMjU1MywxLjI0MDM1NTc3MTI4MTE0NUUtNSwwLjA5NjQ2NTM2ODg2MTAxMDg2LDMuNTU4MDczMDEwNzQ5NzI1NUUtNSwwLjAwMTgyMDgxMjgwODcyNDMzOTksMC4wNDIzNjU0NTI4MTE5MTcwNDUsMC4wMzI4MTkxNDY3MDkyMjYxNCwwLjAwMTQ4MTMyMDM0NjUzODIyOCwwLjAwMTYyNjk3NjA5NjcwNTMzMTUsMy44Nzk5ODI2OTA3ODQxNzJFLTksNi42NDAzMDU4MDQ2MTgwOTFFLTQsMC4wMDQ4OTQ2MTQ0MDgxMTUxMzQsMTUuMzc1NDYzNDk5Mjc5MTA5LDAuMjg1MTA5Mzg4NjY0MDI1MjQsMi4wODM1MDU1OTE5MTMxNjU1RS03LDMuODIzODE5MDQxNjQ0MDAyRS00LDAuMTExNjU0ODY2MTAyMjY2MzcsOS40ODcxOTUwMzUyOTczM0UtOCwyLjczMzc0MDE4NzYwNDkxNjZFLTYsMC4wMDEyNDQ3NTk0NTgxMTY3MDYsMC4xNzU4NTAzMjg1MzM2NTU0OCwwLjA4OTMzMjA0MzcyMzkyNzc2LDcuMjIxNjA5NTE1MTA0NjU3RS04CiszLFRodSAyNyBKYW4gMTEsMC4wMTYwMzE5MTYxMjcyNjI0MiwwLjAwNjY4NDI1MTM1NDA0NzU3NCwwLjAwNjE0NTU1NTMwMzQxNDM5NjUsMS4yOTE0MjE0OTY5OTU2NTMyLDIuOTMyODY4NjkwNDMxNzY5RS00LDAuNzk0NjgzODU0ODIwMjQzLDguNjA5MjkxMzY4ODM4NDY5RS00LDAuMDM5MTQ1MTU2MTA3MTk1OSwwLjM2MjQ3Nzc2OTA2NDM2NDgsMC4zMTI0NTc0Njc3ODQ2MjY3LDAuMDI4ODE1NzU5OTQ2OTMxODgzLDAuMDM3Mjg1OTE3MjkyNTIwODE1LDIuNzM4NzczMDQ3NDcyODc5RS03LDAuMDE0MjkxNzA1MzcxNDAyNTgyLDAuMDg1NjY5NjkxNDMwOTA5Miw3Mi4zMjc2NzY3NjA1MjIxNCwyLjUzOTc5NjY5ODY0MzA0NDcsMS4xNDU5OTE5MTA0ODQxMzA0RS01LDAuMDA4NTI0Mzk0MzM1NzI5MjU2LDAuOTc0Njg5MjU2ODEyMjk4Nyw1LjA2ODg0MTMwNjU5ODc4OEUtNiwxLjgxMTU5NDg1MTk4MDA5MTVFLTQsMC4wMjYzMjkxNDY2ODM4MTY3NiwxLjU2OTk5MDUxMjM3NTkwNjQsMC42NDE4NjUyMDg1OTE2MTk0LDQuMTE0OTgwOTIyMDM2MzA4NUUtNgorNCxGcmkgMjggSmFuIDExLDAuMTMyNzQ1MjIwMzc2MjcxNTcsMC4wNjUwMjU2MzcxMDEzODE2NiwwLjA2ODE5NzUxODEzMjA4OTg4LDcuNTk0MjQzNDUwODI3Mjc5LDAuMDAzODc3Mjg2NzI2NTgwNTYwNyw1Ljk1ODA5NTY5MTQ4NTE4OCwwLjAxMTY5MjYwNzc4MDY4ODUwMiwwLjQ3MzA4NTA3NDU1MDc1MDMsMi44MjYzMjgyMjExMTgwODQsMi42NTAwMzEwMzQ3OTA1ODA0LDAuMzE1Nzg5NDczNjkwMDQyMzQsMC40Nzg2MTE4ODc3NDQ2ODU5LDYuMzA1NTM3NTkxNDA0OTk0RS02LDAuMTcyNzY2OTMwNDM2NTEyMjMsMC45OTEwOTIxMTEyMTYwMDY4LDM4Ni4xNDA1MTU2ODEyNDgyNSwyMC40MDE2ODMwMTU4MDg3NTcsMi4wNjI4NDk5NjMxNDM1OTE5RS00LDAuMTA2ODYxNTEwMTYzNDgzMSw3LjY5NTM5NzAwNTI1MDI3Myw5LjE2Nzg1NTE0MDU4NzI2OEUtNSwwLjAwMzg5MTY0NjkwMDQ0MjY4OCwwLjMxMzM1Njg4MjUxNTM0MzMsMTIuNjM2OTIwMTA2Mjc4Mzg5LDQuMzA2MTMxNTQ4NDM3OTIzLDcuMzg2MTQ0MzQ4NzcyNjM0RS01Cis1LFNhdCAyOSBKYW4gMTEsMS4wMTUyMDE3OTYyNjc0NDA0LDAuNTM0MTk5NTk2MDc1NjYwMywwLjYxNzMxMTM4NTk5ODM2NDMsNDIuNjY2NTEyMzg4OTg4MDgsMC4wNDExODY4MjkzMDc5MTMwNSw0MS40MjkzNjUxODkxNzAzMjYsMC4xMjc3NzcyMDE2MTI5NjE3Nyw0LjYzOTgwNjY0Mjk2MDg3MiwyMC41MTE2NTU5MDgxODI0NjIsMjAuNjkzMDU3MzQwMjE1MDM0LDIuODM3MTMwOTQxNDk1NDYyNiw0Ljk0OTc4MTQ1NDI1MTg0Myw5LjcyNTI4NzI4NDU3ODQyOEUtNSwxLjY5MzUwMjc5ODE5NzIwNDYsOS41NzYxNzIyNzcwMzEyMDUsMjA2OS42MTU2NTUwNjU5NDcsMTUxLjU5MjYzOTAzNzkyMjY4LDAuMDAyNTQzNDQwNTA4NTg0OTQwMywxLjA4NDY2NzczNTIwMzg1OTIsNTYuMjY4NjY4NDcxNzg0MDEsMC4wMDExNDU3MjIzNjQ2OTEyOSwwLjA1NjEwMjM3NDY2NjY4OTcyLDMuMDMxMTY0MTYyODk2MzAxLDk0LjEwMDIyNzQzNjgwMjkyLDI3LjA3NDA3ODEyMDE3NTM5Myw4LjkwMjM0OTIxNjQ4MDg5NEUtNAorNixTdW4gMzAgSmFuIDExLDcuNDEwMDE0NDAyODI5MDI2LDQuMDQyODE3Nzc2NDcxOTc1LDUuMDE2NTY1MjE0MzM1NjksMjM0LjgwMzg0MDMxNzM4NjQ2LDAuMzg4MDE5ODg3NzkwMTY5OSwyNzUuOTA3OTU4MjExNzYwMTYsMS4yMzkwNTAxNDIzNzYyNTE3LDQwLjY3MTA5MzAyNzM4NjIzLDE0My4wNDMwNDU2ODM3MTMwNywxNTMuODU4MDUzODQ4NjU3ODUsMjMuMDAyNTc1NDI0MzIxMjMsNDUuNDgyMTc2MDMxNjM4NTIsMC4wMDEyMjA0MzQ3OTg3ODAyODY4LDE0LjgyNTYxOTY4MzE1ODAxOSw4My41NDc4NzgzODYwNDgzOCwxMTEwMS42Mjk3Njc5Nzk3OTIsMTA3NS44NjM1MzU4NDY2MjU0LDAuMDI2MTIxNjAxNjgxMzM0OTEsOS44MTg3MTk4OTQ0MzM4MzMsMzkzLjQ2MTA0OTU4Mjk5MjM2LDAuMDExOTg5MDI0OTg2ODk2OTcsMC42NjAwMTIxODY2MjYwNTQ0LDI2LjIyODc3NTIzMDk4NjA4LDY2OS41MTc4ODYxNzUzNjAzLDE2NC40OTI1NDIyODA0NTQzLDAuMDA4ODI1MTQ5MDg0MTU4ODkKKzcsTW9uIDMxIEphbiAxMSw1Mi40MzIyNDM5NTQ5MDM0MSwyOS4xMDU1MDk5Mjg0MzI0MzYsMzguMTIyMTIyMjEzMTIzMTA2LDEyNzUuNjUzOTc4NTQyNzQ4LDMuMzgzNTM2NTIwNDA3MjI4MywxNzg2Ljk4NzYyNzMyMTMwMDYsMTEuMTIwNzc0NzQ1MDQ3NjM3LDMzMi4wMzY3NDQyNzE5MjgzNCw5NzIuODEyNDk3MDMzMzYxLDExMDYuNjg4ODQ0OTcyMjcwMywxNzUuMTY5NzA5NDM2NTgyNiwzODcuMjMzMjY4NDcwMjEzMywwLjAxMzQ2ODI4Nzk3ODYzNjgxNiwxMjAuODIxNzU3ODE3NjkyNTcsNjgxLjcxODA0NzI5NzM2NTcsNTkzMDcuMTU3ODA5MjI1MzgsNzQwMC4wNTAxMTEzMzI3MTYsMC4yNDA4MTI1Mjg3NzQxMTUyLDgyLjYwOTQ0MTg4MTU5NTMsMjY3MC41NDA0MjA3NDc2NjI3LDAuMTEzMDc4OTE5NzM1MjMxMTEsNi44NDgyNzYxNzE3NjI1MSwyMTEuNTA4Mzk4NTE4NzM5NDUsNDYyMS4yNjk5OTc2MDEwMDgsOTc4Ljc0MDQxOTA5OTQ5NjksMC4wNzc4Nzg5NzYzMDIwNzE4NAorOCxUdWUgMSBGZWIgMTEsMzYyLjU4NTY2NDg1NjQwNDk1LDIwMi42NTk5MjQ3NjM4NzE4OSwyNzYuNjU0NDg2MjIyMDM0NCw2Nzg3LjkxODk0NjE1ODI0OCwyNy45NjQ3MDE4MTAyNDk2NDcsMTEzMzkuODMwNDcwMDUwNzUsOTQuNTg3MDIwMjQ2MzYzMTQsMjU4Mi4wMjc5NTk2ODIxMDUsNjQ5OS44OTQxNTEyNjE4NCw3NzY2LjM0MTM4NTM3MTI3NywxMjc5Ljg3NTc3MjE3OTM4NTQsMzEyNi42MTU0NzYwMzA0ODM1LDAuMTM2MjMyNDE2NzgyMTgyNDMsOTM3LjYxMTM3MzYxMjM3NDgsNTMwMS44NDE0NDY2NjQyMjMsMzA3MTc2LjQxMzcyMzgyNjY0LDQ5NDUxLjE0MDg2NDk0NDc0LDIuMDY5MjM1NDE2MTM0NTM0OCw2NjAuNjIyNzA4MDU4MDc2MSwxNzY3NS4wNzk3NTE2NDU2MSwwLjk5NzY4NTEzOTg0NTM1NzEsNjUuMjk0MDQ2MDk3MDg1ODQsMTYyNS4yMTAyMTI3MDk1ODU0LDMxMTQ3LjI4MDQwNzE3OTM3Myw1NzEzLjYxNjcyMzgwNjIxOCwwLjYzNzczMTkyNDcwMTc5MQorOSxXZWQgMiBGZWIgMTEsMjQ0Ni41NjEwMTQxOTM2MjQsMTM2MS40Mzg1NjA3NzI2MTY3LDE5MjUuMjk2NTM0NzQ0NTI2NSwzMjk4OC4xOTg1MzIzNDQ0LDIyMS45MDQwNjk1MzY3MDQ1Myw3MDA4MS4xMTIxMzE3NDk5LDc3Mi43NTY0MjI4NTczMTI0LDE5MzI2LjgzMjY5MTQzNzU1LDQyNTA0LjczODA3NTA4NDAzLDUzMDU3LjQyOTI1NTg4ODg5LDkwMjYuMDUzNjUxMzI2NDkyLDI0MjA3Ljc0OTUxNjI2NzE5NSwxLjI5MzQ4NzAyMTY3NDY1NSw3MDA5Ljc4MDMxOTg5Mzg3NiwzOTM5NC41NDEwNDM1MjYxMywxMzQ4Nzg3LjAzMjA1NjM1MjQsMzA5NTE4Ljg5NjY0NDc2MjQsMTYuOTExNTM2MzEzMDM1NzA3LDUwNzIuMjQ5MTk1Njc0NDMsMTExNDkxLjQ1NTk1OTU0MDc4LDguNDAwMDQzODIzNTg0MTE1LDU4NS40MTc2NDAyMTgyNDkxLDEyMDI4LjI2MDMzMjc5MzM5OCwyMDI3NjYuNTkwNDM2OTkwNTgsMzE1OTguMjg1MjYxOTYzNTEyLDQuOTU1Mzc2MDg4OTk4NDU3CisxMCxUaHUgMyBGZWIgMTEsMTU1NDQuOTYwNTc2OTM5ODUsODI3MS43ODY3ODY5NDQ2MjUsMTIyNjEuNDMzOTA5Nzg5NjcsMTA5MTcwLjkxNzkxNzI2MTgsMTY5Mi45Njk1OTM3MjA1OTA2LDM5OTQ5Mi44MzI1NjM2NDY5NSw2MDk4LjAwNDU2MDg4NzU2MiwxMzc1OTYuMjgxODAwNjQwNjMsMjYwMzMxLjY4NjIxNTYzMDY1LDMzODAzNi4xNzUzNDc5MjA1LDU5MzM2LjI4ODQyMjIwMTg3LDE3NzYwMC4wNjE3OTYyMzUyNywxMS42OTQ0NDAxOTQxNjMyMjMsNTAzMDMuMDM1NjQ5Mjg1OTY1LDI2Mzk4NC42NzkyNTA4NTI3LDMwNjQxNTcuOTE3OTI0OTI3LDE0NDQ2NzUuNTU1Nzg3NzU4MiwxMzIuNTMyNjkyNjA0NDc1NzMsMzcwMDEuNDUxNjAyMDI1ODEsNTc0MDM5Ljk2NDkwNzIyODQsNjguMDY3MDk5MjkxMDQ3MzEsNDk5NC40MTQ5MzEyNDU5MDUsODUwNTcuMDc3NDc0MjgxNiwxMTY1MzA3LjE4ODg0NDk3MzIsMTM3NDEzLjU0MDg5OTU3NDIsMzYuNzM2NDc2MTMxNjc2ODMKKzExLEZyaSA0IEZlYiAxMSw3NzE1Ny4zMDcyOTA1MzgzOSwzNTY3Ny4xNDg5MDIzODE5NCw1NDIzMy45MzQ0MzgzMjE4NTYsMTMxNjUwLjI1MjY2MzQ1ODIsMTIwNTMuMjQ2MTcxOTE0NDYxLDE2NjMyNDIuNTgyODE5NTQ1Miw0NjA5NC40OTE0MTM3MzAyNSw4Mjc5MjkuMjEwMTExNzY0NSwxMjA1NTg5LjA1OTIyMTA3OTMsMTU4ODc3OC40OTIzMzg2Mzk3LDI5Mjk4My42Mjg2MDE5NDQxMywxMDkxODIzLjc0ODYzNjExODgsMTAxLjk3ODAxMjE3NDkzNzU1LDMyNDM1MC44NDU2MTMxNTc0LDExMzIyNzIuNDM5Mzg0NDY1OCwxNTQyODIxLjc4MzE3MTYxMDQsMjMzMjk3MS4yNTE3NDg0OTgsOTg5LjI4Njc3NTA5Mzk0ODksMjM5OTg1LjI5NTUwMTcyNjY4LDEzMTQ5MDQuODg0MzMwNDg3OCw1MjkuNDI1NDIxMDA0Mzg2Nyw0MDU0Mi4wMjI3MjQ4MzM5OTQsNTI0NDMzLjcwNjM5NTExNzEsMzg5NTMwNS4xNzkxMjgyODcsMjYzODExLjU1MDM0NTE4NjYsMjUxLjI0OTgwNTQxOTA0MzI0CisxMixTYXQgNSBGZWIgMTEsMTUzNDUzLjE5MzUxNTkzMDY0LDgwODMzLjA5ODk2MTY2OTY1LDczMDQ2LjI0ODMwMjQ1NDgsMzUyODQuODQzOTM1NjYzNyw2Nzg5Mi40NjY4NzE4NTEzMSwyNDk0MTM1LjQ2MDk3Mzg3MjMsMzEyOTU0LjgyMzk2MzAzMjEsMjM5NjgyMy41NzE3ODU4ODI2LDIwMjYzMzguMTc2NTM3NjQwNCwyNTE0MDAzLjg1MjAxNjgwMSw1MjE5MDUuOTI5MjUwMTMxNTQsMzEyNjY0NC40Nzg4NzA3NzYsODU0LjQxMTA1ODcwOTU3ODUsMTMwODg2MC4yNTAyOTc4MDgsMTIxOTM1Ny45OTgwOTk5MDQ1LDEwNTExNi45OTUyMTUxNzA4NCw1MDkyODUuMjc3MDM0ODE5MzYsNjg3MS40NDkzODU3MTk3MSwxMTIyNTQ3LjE5MzkzOTU1Niw1MDI4NDAuNTEyNjM5NTg4NDQsMzg5Mi4xMzYzMjIxODU5NTMsMjk0NjM1LjA2NjY2NTE0NjMsMTc3Nzk1OS44NzQ1Mzk2NzY4LDI5MjUzOTQuMTQwNTY2MzIxLDk1ODU2LjU5NTUzNTAyNTk5LDEyOTEuODc5NjA1MzUzODIxCisxMyxTdW4gNiBGZWIgMTEsNDY3NDAuODQ4MTU1ODM2MDY1LDkzNTQ1LjQ1MDE4MTk0MzM2LDEyNDcxLjMxMzQ4ODg5MDQyNiwxOTkwLjU5MjIxNTU5MDgxMDYsMTY4NDg2LjA2NTk4MjI5MzEsNTUwNDMyLjgwODcwODU5NzYsMTU2MzI3Ni40ODM1OTI2NTcsMTE5MjY2MC4xMDA2ODg4OTQsNDcyMzIyLjcxMzcxNjE4OTUsNTE5NTU4LjU1MjUzMDYzNzIsMTMzODQxLjQwMjMzNTI1NTcsMTQ4MzYyMi4yNDQwMTA0ODQ1LDY3MzQuNDk2NzUwMTk1Mzk3LDEzMDQyNzMuODc4NTgzNjU4MywxNDMwNzUuMDQ3NjY2NzgxNTIsMjczNC4wMTQ0ODg5Mjk0MDI0LDEyODM2LjE3MjgyOTk5MzExNiw0NDIwNS44ODMwNDM1NjM1MywxOTI3MTM2Ljg0MDA3MjIzMjgsMTk5NjYuNzQ3ODIzMjg5MjIsMjcxNDguNDE0NjcwNjIwMTE3LDE0MzY0ODEuMzc1ODM4NzQ3NywxMjI1MTQ3LjkzMzM2ODU3ODYsMjM1MjQwLjMxMTQ5MzMwMTksNDE1MC4wOTI1OTA5Njk0NDYsMzE1My4wOTE5MTk5NzkwNTcKKzE0LE1vbiA3IEZlYiAxMSwxNTQ4LjMxODE1MzE2NDA0MDUsNDA1MzguNzQ4MDI4NTA4OTgsMjcxLjYxNTA1NTUwODU0MjYsMTA5LjU3MDMyMzUwMjAyMDc2LDY4Nzg2LjM1ODMxMjUyODMyLDE0NDQ4LjQ0MTY2Mjg4MTUxLDI5Mjk4MDEuNzI1Nzk1OTM1NCw1ODAxMC42Njc0NjExMDE2OCwxMjEzMy4yNDI5NDk1MjcyNDMsMTIxNTcuMDY1NDA0NzA0ODQsMzc4Ni4yMTg0NTYxNTg5MzQzLDY4MzEzLjk4NTY2NjQ0OTE0LDQ3MTY0LjMwOTM0MDY2NTA3LDE0MTc5Ni42NzYwNDM1NjcyNSwyNTE1LjY4MjM3OTg0NjUyNzUsMTk5MS42NjgxNzk5ODgxODQ2LDEyMzUuNjY4MzY5MDM5OTY4LDI0MTQ0Ni43NjYxODk1NzgzNCw0NzQ4MjAuOTQyOTg0NzY0MDYsNzI3LjI2Mjk5MzQyODIyOSwxNzU2NzUuMjM0NTYwMjM3NDcsMjA0MTQ4Ni45NjQ0MDQ4Mzk2LDg1NDQxLjIzNjcxNDI2OTEyLDQzMDIuNzAxMjI2MDIwNzQ2LDE2MC44NjIzNjM4MDQzMTE0NiwxODY1LjQ0MTkzODA3NTE5OQorMTUsVHVlIDggRmViIDExLDgxLjExMjQxOTAwNTEzNjMyLDQ4MzIuNjE3NzQwNzEyNTMsNDEuMjA2MzkyNTM4ODIyNTMsMTEwLjM1NzYyOTQ4NzY3ODE0LDI4MDAuNzkxNDkwNzI2MTM5MywxMzk5LjMzMDkzNDUzODUyODUsNzc1NjkxLjMxOTczNTY2ODYsMTQ2Ny4zNzkyNDgwOTk5MDIsMTA2Mi42NzM1MzQ4MDAyNTgsMTMyMi42OTQxNjk3NzYxMTU0LDI3MS4wOTE2ODg2NjM3Njk5LDE4MjkuMDUwNDg2NjQ4Nzk1NiwyNTQ3OTUuOTQwNzY2NDEzNzUsMjQ3OS41MDA2ODE2Mjc2NTIsNzYwLjUwNTk4MTg1NjczMTYsMjQ4Ny43NzI1MDI2MzIyNjksMTU0Ny43Mzk3NDUwMTc1MzA0LDY2NTkyNi4xNzA0MTUxNDk4LDEzMDUwLjA1NDk4NjMxMTYzOCw3OTQuMTkzMzI2MTE0MTkzNCw5MDM0MTQuODg4NzU2MTA3NCwzNDgxMjAuMjQ1NzIwNDY0NTYsMTYwNy43Mzc0MzU3NTg2MzU1LDI0MjMuMjM1NDk3MTQ1MjU3MywxNzIuNzc1NDA0MjI5MjM2NjcsMTUxLjkyMzI5OTA0NDk4NTQKKzE2LFdlZCA5IEZlYiAxMSw5NS4yNDkwMDA4NTY2MTY3NywyNTUuMjEwNzg5ODk1ODA1NCw1Mi41MjU0NjI1NjQwNTY3LDEzMy45Mjg3NTU0NDU0Mjk1LDkyLjY2MTI0Njg3Nzg1OTM0LDE3NDUuMDY3OTA1MTIzNjA4LDIxNjEyLjgyMzY2MjcxMTQ5LDEzODguNjM5NDk3MzUxOTA3NSwxMzI3LjU0NTQzNjUyNDc1NzksMTY3NC4yMzEyMTQ3MzQ4ODk4LDMzMy4yMDY5NjIyMDIyMDMsMTc5Ny4wODY0NjYwODA0NDMyLDYxNjkzMC4wMjk0ODgzNzY2LDg2MS4xODU0NjUyMjgwNDc1LDk3OS42NjE2ODcyOTU4MTY1LDI5MzIuMDA0OTQ4Mzk3NDAyNiwxOTAwLjU4NjkwODAxNTc1NCwzMzU4ODguMTkyNjc2NzkzOSwxMDE0LjI1NTIxNDU1Mzk5NzUsOTkxLjI1ODIzNzUwNzAzMDYsMTk2NjAyNi45NTY1NjY5NzI0LDcxMzkuNzkwMDc5OTM3MDI5LDEwNjkuMDcxMDQ5ODY0NzkzOCwzMDg5LjczMTA1OTQyOTY1OCwyMTQuMTIyMTE1ODQ4MjQ0NjgsMy4zNDIxMzYwNzIwODc2MjM0CisxNyxUaHUgMTAgRmViIDExLDExOC4xMTE0NzAzMjkzMzY5MSw5Ni4wNTUyMzM5MDE3MTcxMiw2NC4wNjYwMDI5MTU1OTM3MSwxNTQuNTMwMDM3MTU5MjE5OTIsOTkuMTI5NDAyMTkxNDUxNTUsMjEzNi4yOTUzNTAxNDQwODksMTQ4OS40NzI0Nzc3MDA5NTAzLDE3NTIuNjY0NTkwMzg5MTMxMywxNjMyLjY2Nzc3MzIwNDkyODYsMjA1NC4yMjYwNzk4MzMwNzY3LDQxMS4wOTUzNjcwNTg0MDU4LDIyNjYuMDcyNTAyNzcxMDE5LDI0NjI5My4yNjc5OTE5MzI1LDExMDcuMjM2MzIzMzYxNjUyMiwxMTg2LjE2NzQ5NjA4NzE2MDUsMzMwNi45MzU1MTY0NDE0MzE0LDIyMDcuMTMyMTEyNjY0MTc4NywxNjk3MS4yOTI4NDcwOTk1MTgsMTI1My4zOTk2NTc1NjMwMzkyLDExNjQuODczMDg1ODAzMzQyLDY1OTM2Mi42MzUyOTk5NDA1LDEwOTUuNjgyNzcxMzM0NjE4NiwxMzYyLjM5Nzc2MjA0OTE3NDQsMzY5NS41ODUxMTIwNTA2MzEzLDI1MC40NTcyODYwMDgxMTM4LDIuMDMyMTUxMzMyMTYxOTMzCisxOCxGcmkgMTEgRmViIDExLDEzOC4xMDk3NjI2NzYwNzk1MywxMTIuNDcxOTU1NTI5Njk0OSw3NC4wMzc4NzMxMDg2NzAxLDE3MS42NzI2OTMyNDI0MzY4LDEyNC4yMDM4NzAzMTgyODM5OSwyNDc1LjcxODg4Nzk0MTA2NDYsMTgzMS41Njg2NDE1MTUwOTg1LDIwNzYuMzcxMTQxMTI0ODQsMTg5OC4wMTI5Mzg3NDA2NzE5LDIzODMuOTM5NDY1MTU2Mzk0NCw0NzguOTk4MTQ0ODA3Nzg2NywyNjgyLjQ1NTA3ODM3Mzg0Miw5ODMwLjA5Mjc2ODY4MDE0NCwxMzM2LjkxMDQwODk0NzIzMzUsMTM2My40MzMyODU1NDIzMDY1LDM2MTAuNzEwNDcyMjkwOTczNSwyNDYxLjg4MTUxOTgyNjg0NzYsNDI1LjQ5NDU0MTU5MzEyNTQsMTU0My41NjQ0MzQyNTU4Njc4LDEzMTAuNTkzODYwNzU3NzM4NCwyMjQwMi43NjUxMzUyNDgxOSwxNDA1LjUzMTQzOTY4OTQxNDgsMTYyNy4yMzYxNTQzNTg1ODE2LDQyMTEuMjMzNDY2MDU0NjYyLDI4MC44ODc3MTQwMjg4MDA1LDIuNTU1OTMxODQ4NTU2MTg1NQorMTksU2F0IDEyIEZlYiAxMSwxNTQuODE3NzMzNzU3MjYyOCwxMjkuNDM3ODg4NzIzNTg5OTYsODIuMjg3NzMwOTIzODU3NTgsMTg1LjQwNTgxODQ4NTM5NDE4LDE0Ni4zNDE5MTQxODk4ODkzLDI3NTcuNTM2NzMzMzA5NTE4NywyMjYzLjY1MzA2NzE1NTgwMjUsMjM0OS42MjQ5MTQyODk1MjIsMjExOC43NDU0OTQyODYwNTMsMjY1Ny42ODE1MDQyOTU1MzIyLDUzNS42MTE0Mzg1MTM0NDM5LDMwMzMuNjgwNzQ0NjQ5ODEwNSwzMzcuOTUxMjg0ODUxMjM2NywxNTMzLjY2NzY1NDE1MzYwOTQsMTUwOS4yNDc3Mjk2MTQ4NDE1LDM4NDYuNDMxODEyOTk5OTI2NSwyNjY0Ljk2ODkxNjE2MzkxNTMsMzk1LjIwNjE5MzU5ODM5MjI1LDE3OTYuMTk1OTQ3MjIwNDYzNSwxNDI3Ljk1OTY4Mjg0Njg0ODIsMTAyMS44NzE4MTQ4MjUyNDg0LDE3MTguNjgwOTMxMTEwMTE3LDE4NTIuMjM2NzE5OTE4OTc1Nyw0NjMyLjEyODU2MDAyOTIyOSwzMDUuMzc5Nzk4ODM2NTg3NDQsMy4wMjkwMjM3Mzc3MDA2NjM3CisyMCxTdW4gMTMgRmViIDExLDE2OC4yMjk0MjU3ODI4Nzc0NiwxNDMuODM0NTI0Njc1MTQ2NSw4OC44MzYwNDc3MDM4MTE1NCwxOTUuODc1NzM3NDQyMjExNywxNjQuOTU3NTY5ODI2NDE1OTIsMjk4MS45NzM0MjI1NjEwMzIzLDI2NDAuNzY1NjM0MDU4NDI3LDI1NzAuOTc2OTY1ODg3NDQ2NiwyMjk0Ljg2MTgyNTY3MDE5MDcsMjg3NS43MDM2MDE2MjAzNjY1LDU4MC44NjU1MTE3ODgxNjQ4LDMzMTcuOTY2OTM5NDA3OTk4MywzNjUuNzY1ODE4OTIwNTc4MzQsMTY5NS4yOTc3MDk5ODIyMjY1LDE2MjQuMjQyNTYyOTM3NjI3LDQwMTguODg2MjExODk5MjUwNiwyODE5LjI5NDUxMDU4MTMxNDYsNDk4LjAxMjYwODUyNDIzNTMsMjAwNi41NTIwMDUwNDE5OTMyLDE1MTguMjcxODQ3ODUyNDE4NywxMTg3LjEyMDM3ODg1MjUwNzIsMTk4OS41Mzk5NjI1OTE5MjIsMjAzNS42NTU0OTYyMTg4ODQ4LDQ5NjEuMjIwNjA0Njk0NjM0LDMyNC4xNzI5NjUyOTU1NDA5LDMuNDI5NjgzMDY0NDEzOTI0NworMjEsTW9uIDE0IEZlYiAxMSwxNzguNTA0ODY0NzUwODk4OCwxNTUuNTE1MjExNjk3OTQ2ODgsOTMuNzgwNjEyMzQxMTE0MzYsMjAzLjM0MTM5MjIzMjAzNzgzLDE3OS45NzYxNzkzNjA5OTcyNCwzMTUyLjE3Njg1MTA5ODA5MywyOTU1LjI1MDQxOTc3NzY4MjUsMjc0Mi40MTQyMDc2NzM0NzEsMjQyOC43MjYxNzcxMzAwMjYsMzA0MS4wNDEwMTQwMTIzNTQ1LDYxNS4zNDQ1NDkzNDQ3NDQyLDM1MzcuOTMyNDIyMzQzMzU1NSw0NTcuNzIzMDkyMDQ5NDI1NzYsMTgyMi41MjQwMjI0ODQwMzc3LDE3MTAuMzE4MDY2Mzg5MDM4NCw0MTMzLjYxNjU4NTEwNzU2MywyOTI4Ljc0MTQ2NDcwNDc3Myw1ODkuNDQwMDYyMDQ2Mjg2NSwyMTc0LjU4MzIxMDcxNjUwMzMsMTU4My41NTMxNzc2ODIyNDksMTQ3Ny4xMzE3NjU1MDY1MTUyLDIyMTMuODA2Njg2NDQwNzU4LDIxNzguNzc2NzE5MDkwOTE1Myw1MjA0LjY2NzQyMTI0MDk4NywzMzcuNjk1OTAyNzM1NDU2NDYsMy43NTUyNzQzNzgzODE1NjgzCisyMixUdWUgMTUgRmViIDExLDE4NS44ODU1MTU0MDExODIzNSwxNjQuNjAyMzkyNTgzNDgxMzMsOTcuMjUyNjc1MTY3NTMzOTQsMjA4LjEyMjg3NDQ0NTg3OTEsMTkxLjU1MDk2MzM1Nzc3OTIsMzI3Mi42MTc0NDk0NzIzNTc3LDMyMDYuODQxNDU1NDc1ODQyLDI4NjcuNTQ0MDU3MTYyOTA0LDI1MjMuNzc3NTM1NjUyNjEyNiwzMTU3Ljk2NTU1MTQ2MzQ0Miw2MzkuOTM2ODk3NDM0ODU0OCwzNjk4LjI2NzY0OTY5OTU1OSw1MzguODUxOTE2NjI3MjA1MSwxOTE3LjUwNzQ3NTg5ODg3MzcsMTc2OS44OTg3MDQ0MDk3Njk0LDQxOTYuNTI2MzI4NzEzMTYzLDI5OTcuNDYyNDIwMTkwMDEzMyw2NjYuNjAwNTMwMTYxODAxOCwyMzAyLjUxMDI2NzMxNDE5NDYsMTYyNi4wNzc4NzE2MDQ0ODQsMTczMS42ODgyNjA0MjAyNTU4LDIzOTEuODc0MTMzMDM1NTE3NCwyMjg0LjM0MDM3NTE4MTU2Myw1MzY5Ljg3NjY4NTU3Njg2MiwzNDYuNDcwNTU2MDE2MDA0OTMsNC4wMDg2OTAzNjQ5MDY5MjQKKzIzLFdlZCAxNiBGZWIgMTEsMTkwLjYzOTAwMjM3ODg5NjksMTcxLjMwNzE1NjE5OTE0NzY0LDk5LjM5MTY2Nzg3NjU3NDQ5LDIxMC40ODc1NzIwMDc1Nzc1LDE5OS45MzkyMjIyNTY2MTYzMiwzMzQ3Ljk4MzI3NjExMTUwMSwzMzk4Ljc2MjE5MDEzOTkzNiwyOTUwLjUyMzIyOTQzNDAwOSwyNTgzLjY1MzY3NTkzOTYxMiwzMjMxLjAyNjc4MTc3MDY2MTMsNjU1LjU2ODExOTE3ODYyOTMsMzgwNC4zNDA2MTAyODI0NTk3LDYwNy4wMTI5MzIyODgzMzczLDE5ODIuOTkyMTk3MjU3NDUwMiwxODA1LjUyMDk5NjU4NzUyMDgsNDIxMi45MTI0MTI1NDU1MTUsMzAyOS41NDc4NTQ2Nzg4NTEsNzI5LjA3ODYzNjkzMTAzNzksMjM5My41MzQxNDYwNTkwNTYsMTY0OC4xMDE2MTY1NjY3NjkzLDE5NDQuODM4OTg0MjAwMjM1LDI1MjYuMzk4MzI4ODcxMTA5LDIzNTUuNjQyMTk0Njc2NzE5Niw1NDY0LjQ0NDQ4OTI4OTU2MSwzNTAuOTY4NDA4NDUwNTc1OCw0LjE5NTIxMzc1MTU2MDIxNzUKKzI0LFRodSAxNyBGZWIgMTEsMTkzLjAyNTUyMzEyNzQyNzgyLDE3NS44MjI4OTcwNTM5OTk1OCwxMDAuMzMxMDg1NDI5NzczNzgsMjEwLjY1MzI0MzA5MzU0NTM3LDIwNS40MzA5ODIyMDQwOTc2MywzMzgyLjY3OTM5OTc1NTQ3OCwzNTM1Ljc0Mjk5MjI0Mjk1NSwyOTk1LjQ2MDk0MTkwMjYzMywyNjExLjc5MzUwNTYxNjIzMiwzMjY0LjU3MDg3MTc4OTUwOCw2NjMuMDk1Njg0MjY5NzE2MiwzODYxLjQzNTA3MjMwMTc1Myw2NjEuOTcxNzQ3MjY2NDYyNywyMDIxLjgwODMzNjU3MTg5ODcsMTgxOS42MDgxNTExNzIyODYsNDE4Ny41NTMwMTYwMzYxNjksMzAyOC44MjcwNTkzNTM4MTY0LDc3Ny40NjI5NjA2NDMwNDgzLDI0NTEuMDg0MDU2ODg4NTk1LDE2NTEuNzM1NjE3NTMxMTg5NSwyMTE2LjEyNTg3MjY0MzI1NCwyNjIwLjk1MzE5MzE1NjYzNSwyMzk2LjAxMDgxMzA0MzQ4OSw1NDk1LjU2NzU0NjEzNzA4OCwzNTEuNjAzNjI2Mjg1NzkwOTQsNC4zMjA1MjQ1MDgxMzE4ODYKKzI1LEZyaSAxOCBGZWIgMTEsMTkzLjI5MTE0MDc1NjkwMzU2LDE3OC4zOTA2NjUwNDc2NjA4MywxMDAuMTk3ODY3OTc4NDA0LDIwOC44ODMwODU5MDE5MTA2MiwyMDguMzA5NzEwNzM2NTc5NTgsMzM4MS4wODEzODkwNjM0NzY4LDM2MjIuODIyNjAzODQyMDQ1NywzMDA2LjMxMTg0MDMzMzY4NzUsMjYxMS42MTIzNTU1NzY3NDM1LDMyNjIuODA4MzE0Njc3NzkxLDY2My40MDk0NzU3MzAwNDIxLDM4NzQuNjY1Njc1ODgxNTcyNSw3MDQuMjk4MTkzMDYwMTIxOSwyMDM2LjY1NTAxNDM5Mjg1NjIsMTgxNC40NjE2MjU2ODMwOSw0MTI1LjQxNDk2MDUwMzQ0LDI5OTguOTUwNjI0MDE4NzA5LDgxMi43NjQ3Njg4MzQ1Mjg4LDI0NzguNDk5NDQ0NDkzMDQ2LDE2MzkuMDA3MDExOTIwMDk0NiwyMjQ3LjQ5NDI5MTY5NjAzNDUsMjY3OS4yODU0Njc4ODc5OTUsMjQwOC42MTA0NDA2MTQ0ODcsNTQ3MC4wNzU1NzI2NDE5NDc1LDM0OC44Mjc3ODk5ODQ3Mjg2LDQuMzkwOTAwNjIwNTQ2NjMyCisyNixTYXQgMTkgRmViIDExLDE5MS42Njc2MTQ0NTcyNTk4MiwxNzkuMTgyOTcxNTU4MzM0OTQsOTkuMTExNjkzNDUzODEyMTgsMjA1LjM3ODAyODE0NzQ3ODU3LDIwOC44NDcwMjc0NDA0MDI0MywzMzQ3LjE0MzA0NzcwMzYyMDYsMzY2NC45OTE0MDYyMDExMzQ0LDI5ODYuNzY5NzUxNjE2NTYxNywyNTg2LjIwNTMxNTA3Nzk4NjYsMzIyOS42NDYxNjIxODUyMDEsNjU3LjI4MzY2OTE0MTUwOTcsMzg0OC43ODU2NTk2MTA2MDAzLDczNC45NDQ1MzI2MzUzMDg5LDIwMzAuMDkxMjYxMTYwNjI4NiwxNzkyLjI2Nzk0OTA2OTAyODIsNDAzMS4wOTY5NDY4NTUzODg1LDI5NDMuNDY1MDM1NTczNTcsODM2LjE1OTQyMjM0MzI5MTIsMjQ3OC45Mjc5NjIyMTU3MjIsMTYxMS44NTI5NTI1MTI3NjgzLDIzNDIuMDIwNjI1NzI4NjI4LDI3MDUuMDQ1MzgyODIxMjI0NCwyMzk2LjQzNTM2OTM1OTM1OTQsNTM5NC40ODUxNDA2MTE3NTQsMzQzLjAyNDk2MzQ5Nzc5OCw0LjQxMTc2NTY1ODA0MjQ3OAorMjcsU3VuIDIwIEZlYiAxMSwxODguMzgwNDcxNTg5MTY0NywxNzguMzc4MjcwNTAzMDcxNjMsOTcuMTkwNDQ3MTkyNDM2MSwyMDAuMzY3OTg4MjMyMjY2NywyMDcuMjk4NjMxNTUxMDA1MzcsMzI4NC44MzI4OTI4NDUxOTEsMzY2Ni45MzQ2NTI1NzM3MTYsMjk0MC40Mjg4NjY4ODMyNTgzLDI1MzguNjczMDg3MTg3MzQ5LDMxNjguOTU2Nzg2Njg0NjYzMyw2NDUuNTA5NTc5NDI0NzgwMSwzNzg4LjQzNjU4NjQwNTcyMSw3NTQuOTY2ODAyNzYxNzc2NCwyMDA0LjU2MDk5ODE0MDgxNTQsMTc1NS4xODkwMDI1MzgyNDcyLDM5MDkuNDkyMzQ1Mjg5NzUzLDI4NjUuOTUxNTcyNjk5NzA0Nyw4NDguODEwNjUwNzg2NzE4NywyNDU1LjM1OTY3MTU4OTI0MjcsMTU3Mi4yMjY1Mzc3MzA3NTE1LDI0MDMuMDY2NTc2ODU1MTY1MywyNzAxLjY2OTYyNTk5OTYwNTYsMjM2Mi4zNjM3NTc0NDAyODIsNTI3NS4yNzU0Mjc1OTM4NDQsMzM0LjYwODM0NDI2NjM0MjEsNC4zODg0NzEwNDI5MDgxMzQKKzI4LE1vbiAyMSBGZWIgMTEsMTgzLjY1NjYzNDMzNzYwMDUsMTc2LjE1NTc3NDc0MzUwNzA0LDk0LjU1MzY0NTY2NTU4ODE5LDE5NC4wOTg2MDYxNTk2MTA2MywyMDMuOTEyNDAzNjIxMzE2MiwzMTk4LjE5MzQ5MTYwMTM1OCwzNjMzLjEwMTMxODE0OTEwNTMsMjg3MC44ODczMjYxOTQ3OTQyLDI0NzIuMTY4Mjg0MzkxMjE5LDMwODQuNjY2ODc5NzA3NDI2Miw2MjguODk1OTM4NDk4MTA0NywzNjk4LjI3MTg3MzA0MTA2NDcsNzY1LjQwOTI5MjgxODEyNDksMTk2Mi40NzgzNDA2MzQ4MTk3LDE3MDUuNDIxNjExNTc2MzA2NSwzNzY1LjcyMDg3ODk1MjkyNiwyNzcwLjA5ODMwMzA4NzA2MjUsODUxLjgyMzExNDE5OTgyMDMsMjQxMC43MjA2NTMyODAwOTYsMTUyMi4xMzQ3NjAxNzU1MzU2LDI0MzMuOTM3NTI0MjcxNTQyMywyNjcyLjQ0MDE3ODM1NzUzNDUsMjMwOS4yNTY1Njg4NDMwODg2LDUxMTkuMDU5ODMyNDA0NTE5LDMyNC4wMDk5MTMxNDA2MDQ0NSw0LjMyNjI5MTMyOTY4ODQyOQorMjksVHVlIDIyIEZlYiAxMSwxNzcuNzI0Mzc0MDA1MDI5OSwxNzIuNjAxNTQ2MTc3MTU5Niw5MS4zMjEyOTcyNjYxNzkxNiwxODYuNzU2NTA2ODYyMTk4OSwxOTguOTM2OTQzNjczNTQwMzMsMzA5MS4wNTk1NTgxMTc2MjIsMzU2Ny44NTYzNTQwNTg0Mjc4LDI3ODEuNzExNTIwNjQ1OTMxNiwyMzg5LjY4ODY2NjM3OTUwNywyOTgwLjYzNDI2MjIxMDcxNjMsNjA4LjE2NzAyMDk0NTg5MTIsMzU4Mi44NjkyMjEzNDUzMTIsNzY3LjI3MzUzNzUyMDk4MiwxOTA2LjI3OTI3NjcyODY3MTQsMTY0NS4xODQyMzkyNzEzNDA5LDM2MDQuNjE1NTg0MzAyMTU4NCwyNjU5LjY0OTQyNjgxMjM0MTUsODQ2LjI1MTUxMTY2NDI1MTIsMjM0Ny45MDQ5MTQ5MjA1NDE2LDE0NjMuNTkyOTg2NTUxNDA0LDI0MzcuODAwMjUxNzgzNzUxNywyNjIwLjU1MjU1ODQzMzM4OTUsMjI0MC4wMDE0MjMyOTU2MzQ2LDQ5MzIuNTMxNDcxNDAwNzY3LDMxMS42MDUyMjM3NzA4NjMxLDQuMjI5NTE0NDU4MDMwMDQ4NgorMzAsV2VkIDIzIEZlYiAxMSwxNzAuODI4ODIzMzY2NDQwMDIsMTY4LjAwMjU1NjM5MjU5OTI1LDg3LjYyMjk3MjkyMzU3NTczLDE3OC42ODA4NDg3ODgzNTI3MywxOTIuNjI0Nzc5MTMwOTcxMiwyOTY4LjA2Mjc0NDI1MTg3OCwzNDc1LjUyNzA4OTQyODgwODMsMjY3Ni44MDAyNTc2ODQyMjQsMjI5NC44MjMxOTA0MTkxOTY2LDI4NjEuMTk0MDU2MzA3NzcyLDU4NC4yOTEyMTYzNzQxNTEsMzQ0Ny4zMDkxNjk0NDkxODc3LDc2MS40ODIxOTg2MzkyMzYyLDE4MzguNDk3NzY3ODE0MTY1OSwxNTc2LjgzNTc0MDM2MzQyOTcsMzQzMS45MjU4NDAyNjk4NzE1LDI1MzguNTEwOTAyNjY5NzE5Niw4MzMuMDkzMDI1MzI0NTA4NCwyMjY5Ljk5Mjg0MzA3NDY4NiwxMzk4Ljc2MjIxOTkyMzk2MzgsMjQxNy41NzMwNzUyMzM4NzU0LDI1NDkuMjgxMjYwNjY0MTEzNywyMTU3LjYyNjE3NTk5OTg3MSw0NzIyLjc5MTk5MjczOTE0MSwyOTcuOTI0NTIyMDY2ODIzMTYsNC4xMDQ1ODU3MDQ0NjgzNDEKKzMxLFRodSAyNCBGZWIgMTEsMTYzLjIwMjY1OTg5MzA1NTQ1LDE2Mi4zMjQzNjc0Mzg2NTY2Miw4My41NzkwNjczNjY0MTA1NCwxNjkuOTcwMjM1ODkyNjA0MiwxODUuMjM3ODQxNjU5MDkzMDgsMjgzMi43NTIwNTA2NTg0NDYsMzM2MC42MzE3OTE5ODUxNDgsMjU1OS43MzM4OTIxMzc0MjIsMjE5MC4zNTYzNjU0NjcxNjksMjczMC4xMDUzNTU1ODQ1NCw1NTcuODc2MjY0MjA0OTcwMSwzMjk2LjEzMjY3OTM5ODMwMDgsNzQ4Ljk2NjAyMzA5MjQ2MDIsMTc2MS42NzU3MDQxNTcyODY5LDE1MDIuNTk5NzM3MjY5MjU4LDMyNTEuNzQ5OTc5MjQzNTIxNSwyNDEwLjM0MDA1Njc2OTkyLDgxMy4zNzI0MTA2NTE5MTQ4LDIxNzkuOTYwNjIyOTE2OTIxNywxMzI5LjYwMDk0NDMwMTczNTYsMjM3Ni4yMTE0MzIzODE1NTMsMjQ2MS44OTIwNjAyMjgzODA2LDIwNjUuMTIzMzAxNTc0MzI5Niw0NDk2LjUyMDQyMjA2MDA5LDI4My4yNTA1ODk3NDQwMDY5LDMuOTU0NjUwOTc2OTYwNzQ1NgorMzIsRnJpIDI1IEZlYiAxMSwxNTUuMTA1NDczMzAyNjEzMzUsMTU2LjA3OTIyNTkzNzMyOTY4LDc5LjMyNTUyNDY2MTgxOTE0LDE2MS4xMTk2MzQ4NzY2MTc4NSwxNzcuMDQwODc2NDEyNjkzNjgsMjY5MC41MTkxNjM4NjM1NTcsMzIyNy43MTk1MzQ1NTkyMDE3LDI0MzQuNzI5MDc3MjEzMTAyOCwyMDgwLjQzNDg2OTcxNDc0MDcsMjU5Mi4xMDE3NTcxODQ5MTE1LDUzMC4xMzczNjMwMzA3Nzg4LDMxMzQuOTA0OTA2MjcxMzc3NSw3MzAuNjA4NzE5Mjg0MzM5NiwxNjc4LjQ2Njc3MzM1MTc5MzMsMTQyNC44OTAxOTQ2MzQ0MzcyLDMwNzAuMzU5NzIxNTgxMzM4NCwyMjc4LjkyNzY1MTc2MjM2MzQsNzg4LjA5NjkwNzI0NjExOTEsMjA4MS4xNjAzNzMwMjA4MzMsMTI1OC4yOTI4NTA4MjMxMjIsMjMxNi41MjA5Mjg5NDcyNTc3LDIzNjEuOTE2MzU5NTYyNzY5MiwxOTY1LjY2MTI2MTc1NzE1OTgsNDI2MC45MTYwOTY3NjUxMzEsMjY4LjI1NzYxMTgxOTUxODcsMy43ODg2ODcxMzMwMDI1NQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Ob25aZXJvTW9ydGFsaXR5UmF0ZV9SS19SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vUG9wdWxhdGlvbiBDb3VudF8wLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvTm9uWmVyb01vcnRhbGl0eVJhdGVfUktfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL1BvcHVsYXRpb24gQ291bnRfMC5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmMyNDQwMQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvTm9uWmVyb01vcnRhbGl0eVJhdGVfUktfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL1BvcHVsYXRpb24gQ291bnRfMC5jc3YKQEAgLTAsMCArMSBAQAoraXRlcmF0aW9uLHRpbWUsCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L05vblplcm9Nb3J0YWxpdHlSYXRlX1JLX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9Qb3B1bGF0aW9uIENvdW50XzEuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Ob25aZXJvTW9ydGFsaXR5UmF0ZV9SS19SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vUG9wdWxhdGlvbiBDb3VudF8xLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYzI0NDAxCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Ob25aZXJvTW9ydGFsaXR5UmF0ZV9SS19SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vUG9wdWxhdGlvbiBDb3VudF8xLmNzdgpAQCAtMCwwICsxIEBACitpdGVyYXRpb24sdGltZSwKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvTm9uWmVyb01vcnRhbGl0eVJhdGVfUktfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL1BvcHVsYXRpb24gQ291bnRfMi5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L05vblplcm9Nb3J0YWxpdHlSYXRlX1JLX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9Qb3B1bGF0aW9uIENvdW50XzIuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc0ZjE4ZjAKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L05vblplcm9Nb3J0YWxpdHlSYXRlX1JLX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9Qb3B1bGF0aW9uIENvdW50XzIuY3N2CkBAIC0wLDAgKzEsMzMgQEAKK2l0ZXJhdGlvbix0aW1lLEVHLUZSRy1HMjEwMDAxLEVHLUZSRy1HMjEwMDAyLEVHLUZSRy1HMjEwMDAzLEVHLUZSRy1HMjEwMDA0LEVHLUZSRy1HMjEwMDA1LEVHLUxPRS1HMjQwMDAxLEVHLUxPRS1HMjQwMDAyLEVHLUxPRS1HMjQwMDAzLEVHLUxPRS1HMjQwMDA0LEVHLUxPRS1HMjQwMDA1LEVHLUxPRS1HMjQwMDA2LEVHLUxPRS1HMjQwMDA3LEVHLUxPRS1HMjQwMDA4LEVHLUxPRS1HMjQwMDA5LEVHLVVQRS1HMjkwMDAxLEVHLVVQRS1HMjkwMDAyLEVHLVVQRS1HMjkwMDAzLEVHLVVQRS1HMjkwMDA0LEVHLVVQRS1HMjkwMDA1LEVHLVVQRS1HMjkwMDA2LEVHLVVQRS1HMjkwMDA3LEVHLVVQRS1HMjkwMDA4LEVHLVVSRy1HMzAwMDAxLEVHLVVSRy1HMzAwMDAyLEVHLVVSRy1HMzAwMDAzLEVHLVVSRy1HMzAwMDA0CisxLFR1ZSAyNSBKYW4gMTEsMjk3MjM3LjQwMzQ1MzgwMTUsMjY1Mzg5LjYwMzQxODU3MTc2LDE1NDQ3OC4zNTA0MTEyNjcyNSwzMTkzNDcuMzI3NjM2OTEzMTYsMzIxODk4Ljg5ODkxMzc3NDIsNTIwMzYyMS44NzkzMTM4OTUsNTY1NDc3MC41MDU0MTM5MTMsNDYzNDYyNC41MDY1NjkwOSw0MDI1NjM5LjA4NjA2MzcwNSw1MDMzMDYyLjQ4NTEzNDgzOSwxMDIyMDY2Ljk4MDQ1NzUyNSw1OTc0ODE0LjkwNjYwOTI5LDExODI0NTAuMzA5NDgxMDkzNCwzMTM4OTUwLjQzOTA0OTIwMzQsMjgwNTY0OS41NTIyNjIyMzk2LDY0NDA2MTQuMTY1NDE3ODIyLDQ2NjU5NzAuNjU1NDAxODQyLDEzMTIyNDMuOTk1ODAyNTU0OCwzODE5MjI1LjczMzU1MTcxODMsMjU0MzQ5Ny41MTMwMjk5NDIsMzc1NzU0My43ODk2MTMyOTQsNDE3MjY1Ny4xMzc2Njg2NDI3LDM3MTE5NTYuOTkyMDg2OTA0Niw4NDYxMzI1LjY0ODkwMzExNyw1Mzk1OTMuMzU5NDkxMTI0NCw2NzU2LjE3MzkyNTc0Mjg1MzUKKzIsV2VkIDI2IEphbiAxMSwyOTcyMzguNTkyNDAzMDEyNDQsMjY1MzkwLjY2NDk3ODc5ODcsMTU0NDc4Ljk2ODMyNTY3MTA0LDMxOTM0OC42MDQ2MjI4NDYxLDMyMTkwMC4xODY1MTE5MzYsNTIwMzY0Mi42OTM2ODE3NjEsNTY1NDc5My4xMjQ1NDExNDgsNDYzNDY0My4wNDUxMDI4NSw0MDI1NjU1LjE4ODU4MjMxMjMsNTAzMzA4Mi42MTczNzMxNzEsMTAyMjA3MS4wNjg3MzI1MDUxLDU5NzQ4MzguODA1OTE1NTM2LDExODI0NTUuMDM5MjkxNzkwNywzMTM4OTYyLjk5NDg3NTU4MDUsMjgwNTY2MC43NzQ4Nzc4Myw2NDQwNjM5Ljg1MDg4NTM1OSw0NjY1OTg5LjMxODg1ODkxMywxMzEyMjQ5LjI0NDc4OTAzNjIsMzgxOTI0MS4wMTA0ODQ5MjczLDI1NDM1MDcuNjg2ODU3NjQxNywzNzU3NTU4LjgxOTgxODUxMTYsNDE3MjY3My44MjgzMzA1NzQsMzcxMTk3MS44Mzk5NDM2NDcsODQ2MTM1OS40OTM5ODgxNTMsNTM5NTk1LjUxNzcxMTQxOTQsNjc1Ni4yMDA5NTA0OTI1NzIKKzMsVGh1IDI3IEphbiAxMSwyOTcyMzkuNzgxMzE0MjAxLDI2NTM5MS43MjY1Mjk4OTY3LDE1NDQ3OS41ODYyMzEyMzE1MSwzMTkzNDkuODc3MTE0MDg3NSwzMjE5MDEuNDc0MTE0NzU2Myw1MjAzNjYzLjUwNTg2MDYxMiw1NjU0ODE1Ljc0Mzc1NzQzMiw0NjM0NjYxLjU4MzY0MTgwNiw0MDI1NjcxLjI5MDE1MzA4MzQsNTAzMzEwMi43NDg4NzM0MDIsMTAyMjA3NS4xNTY5NzAzNDM4LDU5NzQ4NjIuNzA1MjUzODE3LDExODI0NTkuNzY5MTIxNDA2NiwzMTM4OTc1LjU1MDcyNzAxOTYsMjgwNTY3MS45OTczNzQzNTYzLDY0NDA2NjUuMjUxNjExNzgsNDY2NjAwNy45NzU0NjcyMzEsMTMxMjI1NC40OTM3OTY0OTk3LDM4MTkyNTYuMjg3NDY0NTA4LDI1NDM1MTcuODU4MDM2MjkyLDM3NTc1NzMuODUwMDgzODQ2LDQxNzI2OTAuNTE5MDU5MDYzNCwzNzExOTg2LjY4NzgxMzAwOSw4NDYxMzkzLjMzNDkzNDU5Miw1Mzk1OTcuNjczOTQyOTE1NSw2NzU2LjIyNzk3NTM0NTQxNQorNCxGcmkgMjggSmFuIDExLDI5NzI0MC45Njk4MzcyMjcyNSwyNjUzOTIuNzg3OTEyMjc4OCwxNTQ0ODAuMjAzOTcxODA0ODgsMzE5MzUxLjEyMDk1ODM4ODYsMzIxOTAyLjc2MTcxNDE0ODU3LDUyMDM2ODQuMjk5MjQ4NTg2LDU2NTQ4MzguMzYzMDM4NzMzLDQ2MzQ2ODAuMTIxMTUxNTI0LDQwMjU2ODcuMzgzMDc0MzMwNiw1MDMzMTIyLjg3MjczNTQ5OSwxMDIyMDc5LjI0NDQ0MzM0ODEsNTk3NDg4Ni42MDM2MTAzODgsMTE4MjQ2NC40OTg5Njk5MzIsMzEzODk4OC4xMDYyMjU3NzcsMjgwNTY4My4yMTc1NDQxMjU0LDY0NDA2ODkuMDg1MDcyNjkyLDQ2NjYwMjYuNTcwNTA5NjQ2LDEzMTIyNTkuNzQyODI0NTcxLDM4MTkyNzEuNTY0MjYxMzI3LDI1NDM1MjguMDA1NzMwMDQyLDM3NTc1ODguODgwNDA5MTI4NSw0MTcyNzA3LjIwOTg0NzY0LDM3MTIwMDEuNTM1MDA0MjA3NCw4NDYxNDI3LjEzNzg4ODUyOCw1Mzk1OTkuODE1NDMxNzYzMiw2NzU2LjI1NTAwMDE2Njg3NgorNSxTYXQgMjkgSmFuIDExLDI5NzI0Mi4xNTUxOTE4NTI4LDI2NTM5My44NDc3MDk2NjQxNCwxNTQ0ODAuODE5OTkyMTIxMiwzMTkzNTIuMTk4MDU0ODc1OSwzMjE5MDQuMDQ5MjE0OTQxMTYsNTIwMzcwNC45NTQyODYwODEsNTY1NDg2MC45ODIwOTQzMjMsNDYzNDY5OC42NDY0NDIwNzgsNDAyNTcwMy40MDk1NjM4Miw1MDMzMTQyLjkzMjkxOTg1MywxMDIyMDgzLjMyMzk3NzAyMzgsNTk3NDkxMC40ODkzODE4NzksMTE4MjQ2OS4yMjg4MzcxODA2LDMxMzkwMDAuNjU3Mjg2MTMxLDI4MDU2OTQuNDEyMTQ0NjEyNSw2NDQwNzA0LjUyMjYxMzY3Nyw0NjY2MDQ0LjY4MjIwOTA2MiwxMzEyMjY0Ljk5MTg2Nzc3ODEsMzgxOTI4Ni44MzgzMDc2Njk0LDI1NDM1MzcuOTcyMDAxNzgyLDM3NTc2MDMuOTEwNzkxOTE2Myw0MTcyNzIzLjkwMDU4NTAwMjMsMzcxMjAxNi4zNzQxNTIyODk3LDg0NjE0NjAuNjQxMzUyMTE5LDUzOTYwMS44NTk2NDYyMzEsNjc1Ni4yODIwMjMwMTUzNzYKKzYsU3VuIDMwIEphbiAxMSwyOTcyNDMuMzE2NjE3MjE2LDI2NTM5NC44OTQ3Nzg0Njg2LDE1NDQ4MS40MjA5NzA2MjAwMywzMTkzNTIuMzQyMTMwODU1NjYsMzIxOTA1LjMzNTY2NjEzMjg2LDUyMDM3MjQuNjU4MDk5Njc1LDU2NTQ4ODMuNTk3OTM1MDE4LDQ2MzQ3MTcuMDU1ODgxOTQzLDQwMjU3MTguOTU4OTM0NzQ3Niw1MDMzMTYyLjUwMjYxMDI3NywxMDIyMDg3LjMzNDQzNTQzNjUsNTk3NDkzNC4yNDk1NzQ2NDUsMTE4MjQ3My45NTg3MjA1NzIzLDMxMzkwMTMuMTY2MTAzMzMwNCwyODA1NzA1LjM2NzkxMDIyNiw2NDQwNjc0Ljk0NzUyMzE0LDQ2NjYwNTkuMjQ5NDQ2MDQ3NSwxMzEyMjcwLjI0MDg2NDc2OTMsMzgxOTMwMi4wODUwMTg1MjIsMjU0MzU0Ni42MjgyOTI2MTM3LDM3NTc2MTguOTQxMjA0MzQ1LDQxNzI3NDAuNTg5ODI4MDc3NywzNzEyMDMxLjEzNzk1NDExOCw4NDYxNDkxLjk0MzA5OTM2LDUzOTYwMy4yOTcyOTUzMDAzLDY3NTYuMzA5MDIyNzM1NDUKKzcsTW9uIDMxIEphbiAxMSwyOTcyNDQuMzA0OTIxNzAxMTQsMjY1Mzk1Ljg0NjkyNjA5MjQ2LDE1NDQ4MS45MDIyMzk2MzI0NCwzMTkzNDcuMzY1NzAzOTM0MzQsMzIxOTA2LjYxMjQ0NzIyMTEsNTIwMzczOC4wNzM5MTQ3Miw1NjU0OTA2LjE4MjY3MTczOSw0NjM0NzM0LjQ3MjgzMjk3MSw0MDI1NzMxLjIwMzk2OTYyOTUsNTAzMzE3OC40NjA0MjEyNTcsMTAyMjA5MC43OTU2NjA3ODg5LDU5NzQ5NTYuODg0NjQ4NDkyLDExODI0NzguNjg4NTg5NzkyNSwzMTM5MDI1LjMxMzM2MDk1ODQsMjgwNTcxNC4yODUwNTIyNjI3LDY0NDA0MDQuMTAzNDkxMDQ1LDQ2NjYwNDguODgyMTU1Mjk2LDEzMTIyNzUuNDg5MjE4OTM4NiwzODE5MzE3LjA4OTgyNzU3NCwyNTQzNTQ2LjIwMDE2NzM0NDQsMzc1NzYzMy45NzEzNjk4NTMsNDE3Mjc1Ny4yNjE2NDM5OTI3LDM3MTIwNDUuMjY0MjE3NTkyMyw4NDYxNTA3LjcxMzM2NTQ0Nyw1Mzk2MDEuMDY4MzQ0ODAzMyw2NzU2LjMzNTgwMTU1OTA2NzUKKzgsVHVlIDEgRmViIDExLDI5NzI0NC4wNzYwMzkxODY4LDI2NTM5Ni4xMjE5NDQ1MDMzMywxNTQ0ODEuNDg2MTA1ODgzMTQsMzE5MzE0LjY4MjA3NjA3MjI2LDMyMTkwNy44MDYzMzA4NTA3Niw1MjAzNzEwLjk3NTA5MDE2NCw1NjU0OTI4LjQ5MjQ4NzIyMiw0NjM0NzQzLjkwODk3NTgzNyw0MDI1NzIxLjA4MTU5MDQ3MSw1MDMzMTY4LjYxNzk3OTM5NiwxMDIyMDkwLjEyNTAyNTI1MzIsNTk3NDk3MC4xMDE3MDMzNzcsMTE4MjQ4My40MTgxMjQzOTI2LDMxMzkwMzQuNTU4NTEwODYyLDI4MDU3MDYuODEzOTIxNjkwNSw2NDM4ODUyLjI3NjA1NzQyMyw0NjY1ODY4LjI5NjI5NTExNCwxMzEyMjgwLjczMTYxODQwMTEsMzgxOTMzMC4wOTE2NDg1MjgsMjU0MzQ4NC41MTc1NTkzNTg0LDM3NTc2NDguOTk4NzY1MDY0LDQxNzI3NzMuNzU3NDY3Njc0LDM3MTIwNTQuMzI1NDYwNjY3Nyw4NDYxNDE2Ljk2NDY5OTQ4NCw1Mzk1NzcuMTEzODE3NjI1LDY3NTYuMzYwNjc3NjM2MzY2Cis5LFdlZCAyIEZlYiAxMSwyOTcyMzUuNDgzNTQ2NDkwNiwyNjUzOTEuNzI0NzY1NTkwMTYsMTU0NDc0LjYzMTYxNzc5MDA2LDMxOTEzNy4yMjM2MTMzOTcyLDMyMTkwOC4zMjM3NDU1NzQsNTIwMzQyOC4zODMxMjk1MzQsNTY1NDk0OC40OTMzODQ4ODcsNDYzNDY5MS45ODM1NjQzMSw0MDI1NTYyLjI5NzExOTI3NjYsNTAzMjk3OC45ODUzNzY2ODcsMTAyMjA1OS41NTczMDg1MjUzLDU5NzQ5MDguMjQzMDc2NjA2LDExODI0ODguMTQ0MTgxNTE3NCwzMTM5MDIxLjUzMjQ3Nzc3ODQsMjgwNTU3My41MzY2MDAzMSw2NDMwODc5LjcwODUyMjk1Myw0NjY0NTY3LjI5NDcwNDQ2LDEzMTIyODUuOTIzNTE2NDcwNywzODE5MzI3LjI3MTU5NjE1MzMsMjU0MzAyMS45NDQyMDg2NTM2LDM3NTc2NjQuMDAxNjI5MjAwOCw0MTcyNzg4LjYwOTkxMDY3NSwzNzEyMDI0Ljg5NzE4Njg3OSw4NDYwNjE0LjMzMTI2OTE2Miw1Mzk0MjcuNzY5OTM2MDExOSw2NzU2LjM3MDIyNDk2OTI0NworMTAsVGh1IDMgRmViIDExLDI5NzE3MS4yNTY0NTMxODcyLDI2NTM1Ni42NzI4NDMxNzM1NSwxNTQ0MjMuOTExMTQwODgyNiwzMTgzMDcuMjcwMjk0NDQ5OCwzMjE5MDMuNTM1MTYzMTQ2NTYsNTIwMTU5NS4zNjE1MjczOTYsNTY1NDk0OS44MzEyMzc3ODU1LDQ2MzQxODYuODEwNzY3OTUwNSw0MDI0NDQ1Ljk1NjA3Mjc2OTYsNTAzMTU4MS4xMzEzMDYyOTYsMTAyMTgyMS43MTA0NzY2MDksNTk3NDI3My41NTI3ODAwNywxMTgyNDkyLjgzNzYxNjgyNSwzMTM4ODQzLjg2MjMxNTMxNSwyODA0NTI4LjgwMjk4ODA2NjMsNjM5Nzg3My45ODg3MjI1NTMsNDY1NjY4NS4yMDQxMDQ0ODcsMTMxMjI5MC43MDc4Mjk5NjU3LDM4MTkyMDQuNjc3NTY5NTA2LDI1NDAxNDAuNDAzMDg4MDY1MywzNzU3Njc4Ljc5OTk4OTc1Nyw0MTcyNzg4Ljk2Njk5OTg1NywzNzExNzE0LjA1MzkxOTUzNjUsODQ1NTMwNS4xODA1ODU5LDUzODYxOC44ODMyNzMzNTg1LDY3NTYuMjYyMjg0NzQyODE5CisxMSxGcmkgNCBGZWIgMTEsMjk2NzcyLjM3MjA4NTI3MjcsMjY1MTQ5LjY0MTc0ODUyNDc0LDE1NDExNS4zNjM2NjAxOTM5OCwzMTU2MDcuOTI5MzM2MTE5MywzMjE4NTguOTkxNDM0MTcyMiw1MTkxNDk1LjI4MDAwMTIzNCw1NjU0ODA1LjY1MDU1NjUyLDQ2MzA1NzcuNzE3NjY3NTAwNSw0MDE3ODA5Ljc2MDk5MTgxOSw1MDIyOTgyLjE4NjEwMzM3LDEwMjAzMDUuNTMyNjc1NjIzNyw1OTY5NjA2LjU1Mzk5MjMyNCwxMTgyNDk3LjIzOTUwMjc2OCwzMTM3NTE0LjM4NjkwODEwMSwyNzk3OTU2LjI1NTc3MTAzNDQsNjMxNDE3MS45Mjc5MTUwMzEsNDYyMzU0NS43MDY1MjI1NDcsMTMxMjI5Mi4zNDIzOTQyODgyLDM4MTgyMzQuNzMzMTY5Nzg1LDI1MjY2MzguOTc1Mjg2ODA0LDM3NTc2OTEuOTYwODUyNzY2LDQxNzI2NjcuNDk3MDU1NzQ5LDM3MDk0NzUuODM5OTQxNjQ2NCw4NDI2ODY4LjIwMDI4NDUxLDUzNTMzMy4wMzg2ODgyMzczLDY3NTUuMzAwNzUxMzU2MzQ3CisxMixTYXQgNSBGZWIgMTEsMjk0OTgwLjIxMzA1MjI5MDksMjY0MjkwLjk5ODgyNTk0NjcsMTUyODgzLjI3OTcwOTA3MTQ3LDMxMDQzMS4yNTQxMzYyNjkzMywzMjE1NDYuOTcyNTE5Nzk2LDUxNTI0NjYuNTQ0ODM4NjU5LDU2NTM1OTIuNDA2MzM2NzE5LDQ2MTA5ODYuMzIzOTYwMzY2LDM5ODk5MzkuOTkyNzQyOTQ4Miw0OTg2NzA4LjIzNTMzMjkyMiwxMDEzNjAyLjg1NDg2NTQ1MTIsNTk0MzkxMS41OTM4NTk1MDEsMTE4MjQ5OS4xMzAzMDQwODUzLDMxMjk0ODguNzQ1MDU5MzMyLDI3NzI2OTAuMjQ2NjI0NDU2LDYxODg1MzQuNDU4ODUyMDc5LDQ1NTA2MTYuNzMwMzg0MDgyNSwxMzEyMjcwLjk2Njc5MTk0MzYsMzgxMjE3NS44NjczNDAzNDAzLDI0OTE4NjQuMzk2MjE0MDgzLDM3NTc2OTIuNjA0OTUwNTA4LDQxNzE1ODUuODUyMzM2NzA3NSwzNjk2NzkyLjk5MTcyMTkzMiw4MzM1Mzk4LjY5Njk0MDYwOCw1Mjc2MjUuNzI2MTk2NTcyNCw2NzQ4Ljg5MzAzMDYzOTI3OAorMTMsU3VuIDYgRmViIDExLDI5MDY2NS4xMzMwNDQ5OTY2NSwyNjE5ODcuMTExNDM0MzczNTQsMTUwMzQ3Ljk1NTE0NjkxMDcsMzAzNzc2LjExMTU5NzI0MTk1LDMxOTk2NC4wMzAxMDY4ODY2LDUwNjk5NTUuMTUwNTkxNDk0NSw1NjQ1NjM2LjY5MTQ3NzMwMSw0NTUzNDQ2LjQ3OTM5MzQ4MSwzOTI3Nzg0Ljc3ODU2NzIyNSw0OTA3NDA3LjUzNzk3MjQ1Nyw5OTgxNjYuNjAwMzYyMjg5OSw1ODY4ODM3Ljc4ODg2NjI2NSwxMTgyNDgwLjM2MTExNzExMSwzMDk5OTcwLjAwNTcxNTYwMiwyNzI0MTU1LjY5MTIyNDEyOTQsNjA0NzQ3OS41OTA3NzQwMzIsNDQ1MzQyMy44NTUzOTI4ODgsMTMxMjA5My4xNTY4NzA4MzA4LDM3ODYzMDEuNTUwNjk1OTYyNywyNDQxMDQ4Ljc1MjYzMTg5NDMsMzc1NzYwMi42NTUzMTc3MzEsNDE2NDE1OS4yNzgxMDE0NTQ1LDM2NTU2NzcuNjEwNzY2OTQxNyw4MTc5Mzc4LjkyMjI2NjQyNyw1MTY3MzguMDQ5Mjc0MzE2NDcsNjcxOC41MDExNjExMzgzODcKKzE0LE1vbiA3IEZlYiAxMSwyODQ2MTIuNDc1MTEwMDQ4LDI1Nzg0NS4yMDg5OTgwMTk4NCwxNDcwODQuMjQxMjE5NTY5NTUsMjk2NzgxLjUwMDkxNzA2NDMsMzE1Njg1LjEyNjc1Mzg4MTcsNDk2MTMwOS4zNzYzOTE5NTUsNTYwOTc0Ny44ODI4NDMzNjYsNDQ2MzUyNy41MTM4MjgzODc1LDM4NDQyNTAuMjc5ODM3NjAzLDQ4MDIyNzcuNTY1ODYwNTQyNSw5NzcwOTEuMTc1ODkyODEzNyw1NzUyMzk1LjAwMjI5NzQyNCwxMTgyMzA0LjA5MTYyMTMwOTgsMzA0NDg0Ny4wNTMyMDAzOSwyNjYzOTU4LjI0NDQ3ODYzNzQsNTkwODU3My45NzE1ODc5MDIsNDM1MDE0Ni41MTk5MzcwNzEsMTMxMDk0NC4zMzM2NzM1MTg2LDM3Mjc5MjIuMDAwNzYzMzIwNCwyMzg0OTExLjkyMjI1NDY1NTUsMzc1Njg5Mi41MjA5MTMxNTMsNDEzMjIzMC45NDE1MzQ3MzQzLDM1ODY0NjguMjQwMjU1MzA3LDc5OTUyNjQuOTczMzI3NTIxLDUwNDg1NC40NTc1NzQ3MTk2LDY2MzUuOTUxMjc3OTc2MDE3CisxNSxUdWUgOCBGZWIgMTEsMjc4MDM5LjcyMTU5NTkwMzg2LDI1MjQ2NC43MzU1NjM2NTEzLDE0MzY2Ni45OTAxOTI2NTkyLDI5MDExNy4zNDcyNTI1Mzk5NCwzMDkzMDIuOTYwNzA4MjY3NDYsNDg0NjM4NC4zMDgwNjYzNDk1LDU1MjUzNjguMTc5NTg3NDc2LDQzNjE1MTQuMjE4NTk0MDY1LDM3NTUxNjkuODI2NDAxMDA3LDQ2OTA4MzMuODUwNjUwMzc4LDk1NDQ2Ni4wNzY1NDIxNDg4LDU2MjA3NDAuMzQ5Mzk1ODcxLDExODEwOTQuNzkwMTkzNjg1OCwyOTc3MjY2LjU5NDkyMjI0MzYsMjYwMTk1MC4xNTIyNDM4MjMsNTc4MDg5My41NTM3NjM1NTQsNDI1MTIwMy45ODQxNzc2MzksMTMwNTE3Mi44ODAzMjk2MDU3LDM2NDg5MTMuMDQxODcyMTE3NywyMzMwMDczLjM0NTAwMzk0MTYsMzc1MjM3My4xODE4MDU2MjQ2LDQwNjQ1MDAuMzQ1NDk3NjIyLDM1MDU0MTYuNjI3MjkxMzc1LDc4MDk3MzYuODY5MzM5NDk2LDQ5MzMxMy43MTUzODI4MTE1LDY1MDYuODU3NjE3NjczMDU1CisxNixXZWQgOSBGZWIgMTEsMjcxNjczLjEyMTk3NjI2MDMsMjQ2NzMzLjk1ODY1OTc5NCwxNDA0MTguMTc0MTEzMDQ1ODIsMjg0MTEwLjIxMTQwNTgzODcsMzAyMTk3LjM1MjMxNjAwOTc1LDQ3MzY1MzkuMDA3MjMwMTQ4LDU0MDkxMjkuMTI3Njk2MTEsNDI2MDU4Mi4wOTU1NTgzNjk1LDM2Njk2NzIuNDM4MzExNTQwNSw0NTg0MjAwLjA4Nzc4MTkxMiw5MzI2NzcuMDQ3NDYxODk4Niw1NDkwNjkyLjI3MDI5MDc4MSwxMTc1MTMwLjAyMzUzMDc3NDMsMjkwODAwMS43NDYyODg2NTMsMjU0MzUwOC4zNjkyNzMyMzcsNTY2ODM1MC42MDc5NjM1MzgsNDE2MTcxOS4yNzQ5NTI1MTksMTI4ODc1Ny41NTQxODkwOTYsMzU2NDM5OS4xOTY3MzIyMTcsMjI3OTkwMS4xNjM1MzE3NTY1LDM3MzEyODIuOTYxOTYwNDYxNSwzOTc2NDkxLjE1NDY3MTQ5NCwzNDI0MDMxLjQwMjA4NTc4NSw3NjM2OTY4LjAzNTgzMzE2Myw0ODI3OTEuMjgwMjYxMjUzNTMsNjM1OS4yMzU3ODcwNTY0MTUKKzE3LFRodSAxMCBGZWIgMTEsMjY1ODc3LjE3MDgzMTIyNDc2LDI0MTIzMS43NjMyNzY1MTkwOCwxMzc0OTMuNTA5Nzg5Nzg4NCwyNzg4ODIuMzA3NjU3MTUyMDcsMjk1MjI5Ljg5MjE1Nzk1MjEsNDYzNzMzMi44Njg5MDU2NDUsNTI4MzkxMi4yNTIxMDM1NTQsNDE2NzU1Ni42NTYxMDc3ODcsMzU5MjI2Mi44ODQ4NTIxNjE2LDQ0ODc4MzEuNDAyMDkyMzkyLDkxMjkwOS4wNDI4MjQyMDEyLDUzNzA5NDMuMDg4NzEwNDgzLDExNTkyNjIuMTU0NDM4ODE3LDI4NDI4OTcuMDQ4NjkwMTQ3LDI0OTExNzcuMTQ0MDE4MzYwNCw1NTcxODc2Ljg0OTAzOTQ4LDQwODM2NzEuNzQxMTY2MDkxLDEyNjMyNzkuMjg3ODQzNDE5LDM0ODMxNTYuOTgzNjU0ODI1NSwyMjM1ODEwLjQxNzkzMDUxNjQsMzY3ODMyMy4wMjg2MDIwNTA2LDM4ODQwMDYuODg1OTI0MDU4LDMzNDgzOTIuOTUzMTkyMDcsNzQ4MzQxNy43NTY1MjUzMDMsNDczNTY0Ljg4NjYyNTMxNzMsNjIxMi41ODQ0MDI4ODc1NDkKKzE4LEZyaSAxMSBGZWIgMTEsMjYwODAwLjE4ODQ0NDM0MDI4LDIzNjI0OC43NzAwOTA1NDgxMiwxMzQ5NTAuNDczMjQyOTY3NjIsMjc0NDQwLjI5OTEwMTgwMDEsMjg4ODQxLjM1MTIxMTQxMjYsNDU1MDg4Ni4zMTMyMzY1ODcsNTE2MzExMy4wMDQ5NTM2NjcsNDA4NTQxOS4wNzExMzczNzA1LDM1MjQ2OTguMzkyMjQ0MjQ4LDQ0MDM4MjEuMjI1MjU0MTY2LDg5NTYzMi4wOTAxNjg0NDEyLDUyNjUyNzIuNDg3ODEwMzgzLDExMzU3NTQuNjU1MDIxMjI0NCwyNzg0Njk3LjA4ODQ5MTkyNiwyNDQ1ODM1LjkxOTUwNTI3NTMsNTQ5MDc4MS4xNTc3ODEwNTMsNDAxNzI1NS45NzgyMzczNjM1LDEyMzQ0MjQuNzg2NTc2NTE3MiwzNDA5NTMwLjcwNTg2NTE3OSwyMTk4MDkzLjY5MTAwNjk1NSwzNjAyNDU4LjIyODg4MDAwNjQsMzc5NTkxNC42MTM4MjUxMjM4LDMyODEyNTIuMTg5Mzk5NjA0Nyw3MzUxMDQ3LjMwNzEwODM0Nyw0NjU2ODQuNDU3Njk3OTc2NTYsNjA3Ny4xMDcwOTMyNjE4MDIKKzE5LFNhdCAxMiBGZWIgMTEsMjU2NDY2Ljg2OTY4NDQ5OTc4LDIzMTg5OC42NjkyNjY4Njk1OCwxMzI3OTEuMDg3OTQwOTIyOSwyNzA3MzAuMDk0MDcxMTc2NjYsMjgzMjE5LjIzNDY4MjM5OTE0LDQ0NzczNzAuNjQ2MjY3MjQyLDUwNTM0MDUuMDQ1NzAyMTk1LDQwMTQ5MjYuNzE1MjE3NDk3NywzNDY3MTc0LjMyNzk3MDQ5Myw0MzMyMzU2LjE2OTI5ODczMSw4ODA5MDguODcyNzIzNDU3NCw1MTc0NjIwLjYwNjA3NzE2LDExMDk2NTEuNjI5NzE3Mzc1OSwyNzM0MzI3LjYyNTQ3OTU5MDYsMjQwNzQzMS4zNjk5MDQ5NDIzLDU0MjM1NzYuNzIxMzY2MzM0LDM5NjE3MjEuNDgwNzQxMTA2LDEyMDU4OTguOTM3NTQwODU0LDMzNDUyMjguNDYzODM0Mzc2LDIxNjY0MzYuNjk1ODA1NDkyMywzNTE5Mzg0LjA1MjMwMjU2OCwzNzE2NTIwLjYxODk5ODAxNSwzMjIzNDIxLjQ3MzUwOTgxNDYsNzIzOTMyOC4yMTEzODkxMDQsNDU5MDc3LjQ0MTI4NDU0NTQsNTk1Ny4zMDgzMjI1NzA5MTgKKzIwLFN1biAxMyBGZWIgMTEsMjUyODM1LjYyMjI1MTgxMjE2LDIyODE5NC40MDE1NDc4MTc0LDEzMDk4OC4zMDc5Njg3NzYxMywyNjc2NjkuODgxMjI1MjMyMywyNzg0MDUuMjAwMDYyMDgzMSw0NDE1OTI4LjA1ODM1NzQ2Niw0OTU3NDU2Ljg5NzEyNTAwNCwzOTU1NjIxLjYwODg5ODYxMTcsMzQxOTA1Ny4xNTE0MDExMTMzLDQyNzI2MTQuNjY4NTIzNzU4LDg2ODU4NS4wMjc3OTczMjQ0LDUwOTgzNzcuNjg0MDMwODQ4LDEwODQwODguNzY5MTA5MjA1NiwyNjkxNjk3LjkyNTE2NzU0OTQsMjM3NTQyNy42MDA3MzU4NzMsNTM2ODQ3MC44MDEzMzk0OTcsMzkxNTg3OS44ODE4OTE1NzUsMTE3OTYxOS43MTcwNjA2NzIsMzI5MDQ1OC4xNjc1MjI2OTc3LDIxNDAyMzEuNjg4NTQ2NDExLDM0Mzg1ODIuNTEwNDk0MDQ2NCwzNjQ3NDMzLjg2MjY3Nzc3NywzMTc0NjQyLjU1MjQwMzU5NDQsNzE0NjQ3Mi4yMzk0Mzc4MjYsNDUzNjEyLjcyOTkxNjk3Niw1ODU0LjM4OTA1NTA5NzQxOAorMjEsTW9uIDE0IEZlYiAxMSwyNDk4MzMuMzMyODQzNjAzMjgsMjI1MDk1LjQwNzkyMTY5NDIsMTI5NTAxLjkxMDMwMzMyNTAzLDI2NTE2OS4zOTM4ODA5MjI2LDI3NDM2MS43ODM1NTc2MTI4LDQzNjUyMjYuOTMxODU2Mjk4LDQ4NzU2NTIuNDc5OTQ1Njk5LDM5MDY0NDUuNTAzNzgxODE4MywzMzc5MzI3LjQ4MTAwNDU0LDQyMjMzMDkuNjExMzI5OTQ3LDg1ODQwNC4zMTY0ODk4MjMzLDUwMzUxNzAuMzQ2OTIyNzI1LDEwNjA2NjcuMjYyNDEyNDM4LDI2NTYxOTMuNzYwOTg2NDYyMiwyMzQ5MDc2LjM0Njc5NjU5NjQsNTMyMzY0Mi42NDIwNTY4MDYsMzg3ODQwMS42MzI5MTY5Njc0LDExNTY0MjMuMDIxMjU0NjA2LDMyNDQ2MzAuMDYxNTMzMzI2LDIxMTg3NjIuNDU4OTM5MTI5NSwzMzY0ODQ0LjIwMjAzMjY5MSwzNTg4NzM4LjUyNjU2OTgxMzUsMzEzNDExNy43NDExNDQyMTI0LDcwNzAxNjUuMzIxNDUzNzg2LDQ0OTEzOC4yOTUyNTcwMTgsNTc2Ny43MzkyNDcxNDcyNzMKKzIyLFR1ZSAxNSBGZWIgMTEsMjQ3Mzc1LjgxMjE5Njc0ODMsMjIyNTM2LjE5OTY0NTI0ODM2LDEyODI4Ny43NTA0MzY3MDcxLDI2MzE0MC41NzkwODU4MDUwNSwyNzEwMTMuMDA0MDQ2NzI1MTcsNDMyMzc4Ni4yMzAyODgwODgsNDgwNzE1Ni4wMzU5ODgzOCwzODY2MTA0LjcxNjkzMjE3NTcsMzM0NjgzOS40ODgxMjY0OSw0MTgzMDA1LjUxMTU2NjU2OTYsODUwMDc2LjE2NTYyNTA2MDgsNDk4MzMyNy43MTEwODE2MDksMTA0MDA2NS40NTE3NDc0MDIzLDI2MjY5NzIuOTM4NTYzODQ1LDIzMjc1NzMuNDgwNTk0NjEyLDUyODczOTAuNTAzODM4NzIzLDM4NDc5ODEuMTEzODQyNDEzOCwxMTM2NTE5LjAzODk1MTM2MzYsMzIwNjc4MS42MzE1MjMyNiwyMTAxMzA4Ljc3ODk1MzU2NTgsMzMwMDE1MC41MzY1NzA3Mjg4LDM1Mzk3MTcuMzc4MzcwODk5MiwzMTAwODI2LjUzMzA3ODQ3OCw3MDA3OTg4LjkyMjY2NDAyNiw0NDU1MDIuMzUzMjc1MDQ4NjYsNTY5NS44NDkwNzYxMTUyNDgKKzIzLFdlZCAxNiBGZWIgMTEsMjQ1Mzc5LjI3MTk3NDUwOTEsMjIwNDQzLjA4ODY0NTE0Mzg0LDEyNzMwMi44NzgwMzA3MDI3MiwyNjE1MDMuMDAwODk3MjA3NiwyNjgyNjguMzY1OTQ0MjY3NjYsNDI5MDE1NS42NjYzNDUzNDksNDc1MDU1Ni45OTQ3ODk3NzMsMzgzMzI3Ny42OTgxMTkyNjEzLDMzMjA0NjUuNDc2MTUyOTEzLDQxNTAyOTQuODM1NDcyOTkyLDg0MzMxMy40MTY3MTU1NDU2LDQ5NDExNDYuMzI4MDI4NzUsMTAyMjQzMC42MDA1MTgzOTE0LDI2MDMxMzYuMTU4Nzg0NTE2LDIzMTAxNDQuNzUwNjg4Miw1MjU4MTk5LjY0OTY1NTMsMzgyMzQyMS4wMTczNTIyNzMsMTExOTc3Ni4yMDk2MTY1MjU2LDMxNzU4MjYuNTY2MDcxNDI4LDIwODcyMDEuMTg2MTg4MDEzNSwzMjQ0ODcyLjQ0NDg0NDU5LDM0OTkyODcuODI0MzkxNjMzMywzMDczNzA3LjA4NjE1NDc0ODcsNjk1NzY0Ny41MTczNjYyODIsNDQyNTY0LjM4NzMyNzMyMDc2LDU2MzYuODUwMTk3NDQyNzI2CisyNCxUaHUgMTcgRmViIDExLDI0Mzc2Ni4yODI2OTE3MjEwOCwyMTg3NDMuNTE2MTY5NjA3OCwxMjY1MDguMTE4MjE4MTEwNywyNjAxODYuMTAxNjc2MDUyNSwyNjYwMzYuNDQzODU3NDk4OSw0MjYzMDA3LjQ0MTMwODI0OSw0NzA0MjQ4LjQ3OTM2MzgyOCwzODA2NzI1LjM1NDQ1NTQ4NCwzMjk5MTY5Ljk3NzUyOTExOSw0MTIzODg3Ljk0MTYyMTY3MTQsODM3ODUxLjc2OTA3OTYzLDQ5MDcwMzAuNzg1NjI5NzIxLDEwMDc2MjIuMTkwNjM3NjU0OSwyNTgzODIwLjMzNTI4NDU4OTMsMjI5NjA4OC4zMjIwNTU0Mzk1LDUyMzQ3NjQuMTE5MDM2ODYzLDM4MDM2NjguNDM4NDE3ODQzLDExMDU4OTQuMzg1MDUzMDAzMiwzMTUwNjkzLjcwMDQyMjAwMSwyMDc1ODQ1Ljg0NTg3MDg3NSwzMTk4NTEzLjcxNzAwMjAxNjUsMzQ2NjI1Ni4xNDM3MTQyMjc3LDMwNTE3NTMuOTI3Njg2NDE4LDY5MTcwNzguMjUwMzQ3NTg1LDQ0MDIwMC4wNzM4MTYzMjc0LDU1ODguODI0MzYxOTk1NTA3CisyNSxGcmkgMTggRmViIDExLDI0MjQ2OC40MTYyMTc3MDYwMiwyMTczNzAuODM2ODY5OTEwODgsMTI1ODY5LjE0MTczOTg3NzczLDI1OTEyOS42NTgzOTQyMjcyNywyNjQyMzIuMDM3NTUwODkwMSw0MjQxMTc1LjEzNDA5NjQyNiw0NjY2NjM5LjE0MDM3NDM2MjUsMzc4NTM0Mi41NjY1NjQwOTg1LDMyODIwNDEuNjU0ODU3MDIxLDQxMDI2NTEuMzY3NTcxOTMzNyw4MzM0NTguMjQ5MDgxMTQ1Myw0ODc5NTU5LjE0NTgxNDAxMSw5OTUzNTkuOTIwMTUxOTQ2MSwyNTY4MjQ0LjYyNDgzODM1ODcsMjI4NDc5MS42NjUyNjg0MTMzLDUyMTU5ODIuNzkzOTkyNzk0LDM3ODc4MjMuMTI1MDAxMDExNCwxMDk0NTA3LjUwOTc0NTI0NDIsMzEzMDM5OC4zOTE5NzUyNDAzLDIwNjY3MzEuOTgxOTI2MjUyNiwzMTYwMTYyLjI4ODA1NzAwODMsMzQzOTQ1OC4yNTQ4NDM2MjUsMzAzNDA2NC43OTc0MzUyMjEsNjg4NDQ5MS4xMDU0OTk5NzYsNDM4MzAyLjY2NTg3MjA2MzUsNTU0OS45NjgwNzA3NTMwNDUKKzI2LFNhdCAxOSBGZWIgMTEsMjQxNDI2Ljk2NTA2NjM1MDYyLDIxNjI2Ni4zODE4MDcxMDI2MiwxMjUzNTYuNjY4Mjk1NjQ0OSwyNTgyODMuMjYzNzExOTI4OTcsMjYyNzc5LjQ0ODcwNTQxNTM2LDQyMjM2NjIuMTY5MjgwMjYsNDYzNjI2Mi41MjkzNjI3MjEsMzc2ODE3NS4yNTE1NDk3OCwzMjY4MzAwLjg1MTQwMDAwMzMsNDA4NTYxNi4zNjM5ODY3ODYsODI5OTMzLjMzMzkzMTk3MDQsNDg1NzUwNC4zNzcxMTI1NzUsOTg1MzExLjE0NjcxMDUyNTIsMjU1NTcyOC40MTc1NzEzOTIsMjI3NTczMy44MjU1NTU3OTMsNTIwMDk0Mi4zMzUwMzI3OCwzNzc1MTMwLjU5NzUyMjI0OTQsMTA4NTI0Mi4wMTMzODcxNzMyLDMxMTQwNzMuNDE5NjY4NzIwNiwyMDU5NDI5LjY2ODU0MDg5MTMsMzEyODc1Ni4xMTY2MDk3MzM2LDM0MTc4MzAuOTgwODUxNDA1LDMwMTk4NTcuNTI1ODU5NTgzNiw2ODU4MzY5Ljg3NDQ3MzM0LDQzNjc4Mi40Mjc1NTA0NjcxLDU1MTguNjcwMDcwNDY3MTYxCisyNyxTdW4gMjAgRmViIDExLDI0MDU5Mi42MDU0NzAzMjk3OSwyMTUzNzkuOTUwNzY3NjQ3NTYsMTI0OTQ2LjIwMjY3NDA2MzQ1LDI1NzYwNS4zMzU4ODYxNzY3MywyNjE2MTMuNDk0NDIzMzQwNTQsNDIwOTYzMy43OTAxMjY5MzMsNDYxMTgyNS4wMTAzODg0NDgsMzc1NDQxOC4xOTk0MTczNDksMzI1NzI5My44ODE3NTYxNDIsNDA3MTk3MS4yNzc4NzAyNzM3LDgyNzEwOS42MDg3MzE2MjY1LDQ4Mzk4MzEuMjU2NDg5MTc4LDk3NzE0MC4zMzc4NzQxODk4LDI1NDU2OTMuMzc5ODg2NzI1LDIyNjg0NzkuODk1ODg0MzQzNCw1MTg4ODk0LjUwNzg5NDkxLDM3NjQ5NjcuODcyNjk0Mjc1LDEwNzc3NDcuODIzNTQyNDg5MiwzMTAwOTc2LjUwMzI4ODU5MzYsMjA1MzU4Mi43NTE3MTUyNzYyLDMxMDMyMzIuODcxMDMwMDcyNywzNDAwNDQxLjgzNzY3MjU1ODYsMzAwODQ3MC4wNDE4MDczNjU2LDY4Mzc0NTIuNTk1NTc5NDY1LDQzNTU2NS4wOTE3Nzg4OTEyLDU0OTMuNTM3NzAyODM2NDI1NQorMjgsTW9uIDIxIEZlYiAxMSwyMzk5MjQuNTMzNzY4MjM1MywyMTQ2NjkuNDQ5MDMxMTkyNTUsMTI0NjE3LjU0NjI2ODcyMDcsMjU3MDYxLjk1NDkxODM2NCwyNjA2NzkuMjY1NTY4OTM1NDYsNDE5ODQwMS4wMDc4NDQ1MTcsNDU5MjIxOC4wOTcyOTMxOTI1LDM3NDM0MDMuMDMyNTcyNjU0NSwzMjQ4NDgwLjgxODIxMTE1NjQsNDA2MTA0Ni4wNjE2Mjk3NzUsODI0ODQ4LjcxMjA1MjI0MzksNDgyNTY4MC42OTQwNTc4OTUsOTcwNTM1LjA4MDEyNDEwNjYsMjUzNzY1Ny4wMjUyNTE4OSwyMjYyNjcxLjgyNDAyODQwNDQsNTE3OTIzMi4yMzQyMDY5NTUsMzc1NjgyNi4zNjc2NjE1OTMsMTA3MTcxMi44MjM3MjQzNjYzLDMwOTA0ODUuMDcxOTI5NDcsMjA0ODg5OS43NDQ4NzgxOTYsMzA4MjYwOC4wMzk0NTI5ODEsMzM4NjQ5NS4wMDExOTQxMTA2LDI5OTkzNTEuNTc0NjE4MTQxNiw2ODIwNzAyLjcwMzUyMDY2NSw0MzQ1ODkuOTIxMTQxODUxNCw1NDczLjM5NDYzNzcxNDE1NworMjksVHVlIDIyIEZlYiAxMSwyMzkzODkuMzkwODMwMzYxOTgsMjE0MTAwLjEwNDA5NDI2ODA2LDEyNDM1NC4yMjY5NTE0NDYzNywyNTY2MjUuNjkyNjk0ODQ1MDYsMjU5OTMxLjI0NzYzNzQ5MzQ4LDQxODk0MDEuNTMyMTc1OTkyLDQ1NzY1MTEuMzI0MjQ5ODY3LDM3MzQ1ODEuODg3NzAzMjMyLDMyNDE0MjAuNzcyMDE4MDUwMyw0MDUyMjkzLjgwMDk2NDAyOSw4MjMwMzcuNjEwNzIzMjkzNiw0ODE0MzQ4LjYzNTY5NDgzMiw5NjUyMTcuOTU0MzYwNTMxLDI1MzEyMjIuMzMxODE0OTQyNCwyMjU4MDE3Ljk3NjAwMTA2Miw1MTcxNDY2LjcxOTg3MzkyNzUsMzc1MDI5NC41Nzc3MzQ4MTg3LDEwNjY4NjcuNjE2MDkzMjg0MiwzMDgyMDg0Ljc1ODkwNzEwMzQsMjA0NTE0NC4zMzAyODE1NzIsMzA2NjAwOS45Nzk3ODM4MzU0LDMzNzUzMjQuNDA2NDE0NDExLDI5OTIwNDkuOTAxNTg4ODE4NSw2ODA3Mjc3LjQzMjU3NjI5Myw0MzM4MDcuNzAyNTU1MTM5MjYsNTQ1Ny4yNjM4MzU2NTQ0NTMKKzMwLFdlZCAyMyBGZWIgMTEsMjM4OTYwLjE1NDIzMjAzMjc3LDIxMzY0My41MjA3NjEwNDg2MiwxMjQxNDIuOTI3ODgwNTkzMTQsMjU2Mjc0LjUyNTU2Nzg5MDcsMjU5MzMyLjE3Mjk3NTk5MDAyLDQxODIxODAuNTE3MzMyODIxNiw0NTYzOTM1LjQ3NTkwNDQ1MSwzNzI3NTEwLjA1NDQ1MTc0NiwzMjM1NzU2Ljk0MDczMjM4MSw0MDQ1MjcyLjAzMzM4NDUyOSw4MjE1ODQuNzk2NDYwNzYyMyw0ODA1MjYzLjY3MzY1MzM3NCw5NjA5NTAuMTY4MDkzNTc5NiwyNTI2MDY2LjA1MzI3NzA1OSwyMjU0MjgyLjgxMDg5MjM2NzcsNTE2NTIwNi44MTQ4Mjk4NjU1LDM3NDUwNDEuODk4MjMwMTIyLDEwNjI5ODQuODc2NDc2ODU2OSwzMDc1MzU1LjQ2MDk4MTI4NzUsMjA0MjEyNi4zNDY4OTUyNTU2LDMwNTI2ODkuOTM3NzU4MTM0NywzMzY2MzgwLjYzMzc1MTQ3NSwyOTg2MTk3LjQ2MDYzMTQzNzYsNjc5NjQ5Ny4wODg2Mjg2OTcsNDMzMTc4Ljg1MzkwNDg4NjIzLDU0NDQuMzQ0MDQ4MjAyMzUyCiszMSxUaHUgMjQgRmViIDExLDIzODYxNS4wOTQyNzIxNDM3MywyMTMyNzYuNzIwMjI0MDkyMjUsMTIzOTcyLjk1NzM1NDA0OTkzLDI1NTk5MC44Njg4MjE3NTI2NywyNTg4NTEuODE2NDEwMjU3ODYsNDE3NjM3Mi42MTI1ODI0MjU2LDQ1NTM4NjIuMDA4MTQ2NzEyLDM3MjE4MjkuMzMzODM3MTE4LDMyMzEyMDIuNjIxNTk1NzY2LDQwMzk2MjUuMzE3NjUzMjkxNCw4MjA0MTYuNzE4MjUxMTQ1Niw0Nzk3OTY1LjYxMzA0NzM2OCw5NTc1MzAuNjIwNDI4OTIyMSwyNTIxOTI3LjE5OTE5MDcyOSwyMjUxMjc3LjM2NjAyNDc3OTYsNTE2MDE0MS4wNDA3MjExOCwzNzQwODA0LjIyMjY3OTEwNTYsMTA1OTg3NS45MzQxMjUwMzI3LDMwNjk5NTcuMTQxNTk1NjU3LDIwMzk2OTMuNjg4ODYwOTc2MSwzMDQyMDE4LjI2OTg5MjU5MiwzMzU5MjE1LjUwODEzNDUyLDI5ODE0OTcuODgyMTc2ODE0Niw2Nzg3ODE3LjAxMzI5OTY2NSw0MzI2NzEuNzI2NzYxMjAxLDU0MzMuOTg0NjUyMjUzMDI2CiszMixGcmkgMjUgRmViIDExLDIzODMzNi44Mzk0MDIxODUxNywyMTI5ODEuMjQwNjg5NzU3OSwxMjM4MzUuNzc4NzM1Mzc1MiwyNTU3NjAuNzQ1MDQwMDYzNDgsMjU4NDY1Ljg0OTA3MjcxNDgsNDE3MTY4Ni4wMDE4MjQ5ODk0LDQ1NDU3ODEuOTc5Nzg4MjU1LDM3MTcyNTIuOTg1MTE3ODkzNywzMjI3NTI4Ljc0ODQ2MjIxLDQwMzUwNjkuNzI2NzIyNjUyLDgxOTQ3NC41OTc3MDI1MTMyLDQ3OTIwODYuMDk5MjIzNjExLDk1NDc5Mi42NTE1MDQ2NTQyLDI1MTg1OTYuNDQzMDc3NTcxNywyMjQ4ODUwLjg1ODkzODYxMiw1MTU2MDIyLjMyMzU2NDM4NywzNzM3MzcxLjUxOTYyOTAzLDEwNTczODYuMTUyMjQ0MDgzOCwzMDY1NjE2LjUzNDcwNjgwMjYsMjAzNzcyNS4yNzAzOTc0NDY4LDMwMzM0NzMuNzQxODQ2NTkwMywzMzUzNDY2LjYyNjIwNzI5NSwyOTc3NzEzLjcyMTM2OTEyNDUsNjc4MDgwMi45OTgxNzQ2NzQsNDMyMjYxLjEzNTE1NDkzMTQ2LDU0MjUuNjYxNDQ3MDMxMjQyNQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Ob25aZXJvTW9ydGFsaXR5UmF0ZV9SS19SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vUl8wLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvTm9uWmVyb01vcnRhbGl0eVJhdGVfUktfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL1JfMC5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmMyNDQwMQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvTm9uWmVyb01vcnRhbGl0eVJhdGVfUktfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL1JfMC5jc3YKQEAgLTAsMCArMSBAQAoraXRlcmF0aW9uLHRpbWUsCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L05vblplcm9Nb3J0YWxpdHlSYXRlX1JLX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9SXzEuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Ob25aZXJvTW9ydGFsaXR5UmF0ZV9SS19SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vUl8xLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYzI0NDAxCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Ob25aZXJvTW9ydGFsaXR5UmF0ZV9SS19SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vUl8xLmNzdgpAQCAtMCwwICsxIEBACitpdGVyYXRpb24sdGltZSwKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvTm9uWmVyb01vcnRhbGl0eVJhdGVfUktfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL1JfMi5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L05vblplcm9Nb3J0YWxpdHlSYXRlX1JLX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9SXzIuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNkMWNlNDMKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L05vblplcm9Nb3J0YWxpdHlSYXRlX1JLX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9SXzIuY3N2CkBAIC0wLDAgKzEsMzMgQEAKK2l0ZXJhdGlvbix0aW1lLEVHLUZSRy1HMjEwMDAxLEVHLUZSRy1HMjEwMDAyLEVHLUZSRy1HMjEwMDAzLEVHLUZSRy1HMjEwMDA0LEVHLUZSRy1HMjEwMDA1LEVHLUxPRS1HMjQwMDAxLEVHLUxPRS1HMjQwMDAyLEVHLUxPRS1HMjQwMDAzLEVHLUxPRS1HMjQwMDA0LEVHLUxPRS1HMjQwMDA1LEVHLUxPRS1HMjQwMDA2LEVHLUxPRS1HMjQwMDA3LEVHLUxPRS1HMjQwMDA4LEVHLUxPRS1HMjQwMDA5LEVHLVVQRS1HMjkwMDAxLEVHLVVQRS1HMjkwMDAyLEVHLVVQRS1HMjkwMDAzLEVHLVVQRS1HMjkwMDA0LEVHLVVQRS1HMjkwMDA1LEVHLVVQRS1HMjkwMDA2LEVHLVVQRS1HMjkwMDA3LEVHLVVQRS1HMjkwMDA4LEVHLVVSRy1HMzAwMDAxLEVHLVVSRy1HMzAwMDAyLEVHLVVSRy1HMzAwMDAzLEVHLVVSRy1HMzAwMDA0CisxLFR1ZSAyNSBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMixXZWQgMjYgSmFuIDExLDEuMTEyMDI4Mzc3ODUxMjE1MkUtNSwxLjIzOTQ4OTkyNTM5Nzg1NkUtNiw5LjM0MTYwOTMzMDU4NTE2OEUtNywwLjAwMTYyMzMyNTg2NTU5MDY5NDMsMy41Njg5MTgxMzEzMDE4ODdFLTgsNi40NDk3MTAzNjk0NDE3N0UtNCwxLjAxODY4NjYwMTY1MDc3MkUtNyw1LjM2NDMxNDY2OTgzMzE1NkUtNiwyLjc5NzEwNjU4NTI0MTYyOTVFLTQsMi4wNzQzODY5MDMxMjIzNzYzRS00LDQuNDY5NzY1OTI2MDMyNzY1RS02LDQuNzE4MTk0NjIwNDYwMjI5RS02LDYuMTE0ODk5MTc4MjIzMTIxRS0xMiwxLjk1NTUzODg4OTUwODgxOEUtNiwyLjAyNTQ4NjUzMjE0NzQ4MkUtNSwwLjMwODAzMzA4MTIxNDc0NzIsMC4wMDE4NTEwODAyMTE1ODkyMzQ0LDMuNTQwMjM3OTU4NTQ5MTU2RS0xMCwxLjExNjg1OTQ4ODAwMDg1MUUtNiw3LjMwNjA2OTYxOTY3MDE3N0UtNCwxLjY4MDg3MzIyNDE1OTMxMTVFLTEwLDQuMzY2NDE0NDQxNDY1MjM4RS05LDMuNjgxOTY3MzQyMDQwMDc1NkUtNiwwLjAwMTE0MDcyODU4MDY4NzA5OTUsNi4yOTY4NjUxODQwMzQ0NDlFLTQsMS4xNzk5NDQ3NTQxNjk5ODJFLTEwCiszLFRodSAyNyBKYW4gMTEsMS45MzI4NTk1MjE5NjY5MjI1RS00LDUuNTk2MjUzNzg2MTYwMjUzRS01LDQuNzExNDYwMjYyOTE3OTIxRS01LDAuMDIxMjM3NzAxNjQ4OTM0MDQ3LDIuMDM5MjQzNTkxNTE2NjA2NEUtNiwwLjAxMDM3NTI4NDUzMTEyNDI2Niw1LjkxMDk2MDIwMTA3NDMwNkUtNiwyLjg2NDc1NjMwNzk4NTE4N0UtNCwwLjAwNDYwNjc0Nzg2NDI3Njc3NjUsMC4wMDM2ODgxMDgyNjQ0MzM2MTEsMi4yMjg1NTA3ODE0MDQyNTI1RS00LDIuNjM2MTQ1NTMyNDYwMDY3RS00LDEuMjE1NjU2NzkxODQxNDE1NkUtOSwxLjA0NTMzMDg4ODA0NTA3MDRFLTQsNi45NjExMDg0OTkwOTI4MDRFLTQsMS43NTQ3MDAxOTgwMDc0NjA4LDAuMDMxMzg0NTk2MDUxOTA0NTQ0LDUuNjY4NDQ2NTAxMjc4NDFFLTgsNi4xMTYwMTEzNDM3ODI2OTdFLTUsMC4wMTIyMTU4NDg4ODUxODI4MTcsMi41MjYyMzgwODc4MzY2MDM2RS04LDguMjY4NjA0MjUzNjM3NDU3RS03LDEuOTQzOTYwODI5NTgxNjcxRS00LDAuMDE5MzcwNTE0NTg4MjczMDEsMC4wMDkyNDU2NjYxNjk1MDc5MDIsMi4wMTM4NzMxNTIwMTY1ODdFLTgKKzQsRnJpIDI4IEphbiAxMSwwLjAwMTk0NjM4OTU3OTY0ODk0NTYsOC4wMjI0Nzc3NzAwMjYwNjhFLTQsNy42Mjg2NjIzMjcwMjA5NDlFLTQsMC4xNTUzOTczMzg3MTU1MTM4NywzLjgzNDM1NTI5Nzc5NDIwNUUtNSwwLjA5NTU2NTM0NzQ3NDczOTA2LDEuMTM1MjUzNDIyMzg2NTEyRS00LDAuMDA0OTc5NDY4MTU5OTM1MTk5NSwwLjA0Mzc3MjgwMTgxMjk0OTkxNiwwLjAzODAyOTE3Mjg5ODc2NTMwNSwwLjAwMzU2NDc0OTgxMTgzMzQ3MTQsMC4wMDQ4MzAxMzIwNjM4NjY2OTMsNC40MTQ4Njk4MTUzNDQzMjI1RS04LDAuMDAxODE4MTE2MTA4MjQwNzExLDAuMDEwODU0ODE0OTQwNTk3NDE1LDkuNDY2OTU0MzQ1NTM3MDAxLDAuMzA3MzYzNzgxMjAyNzA4MywxLjY2NTkxNTc5OTQ4NTEyNzRFLTYsMC4wMDEwOTYzMTEzNTc0NjMxNTg5LDAuMTE3NzU4NjQ5MzM2NzcxNjcsNy4zODIxODIzMTgwOTEzNzdFLTcsMi44MzQ0MTY2NTM5ODQzMzAyRS01LDAuMDAzMzM0MjA0NjEzODg2NDMzMywwLjE5MDAzOTc0MDgyNDE1MTY1LDAuMDc2ODM2NTA4OTIyMTA3NTMsNS45NzkwMzc1ODIwMjQ2MjRFLTcKKzUsU2F0IDI5IEphbiAxMSwwLjAxNjM4NTgxOTQ1MzAxMjMwNCwwLjAwNzkwMjUyNjkwNzc5NjE1LDAuMDA4MzY2NDUwMzI4Mzg5MTU0LDAuOTU2MTc4NjM2ODA1MjEwMyw0Ljg5NDczOTA2MjE0NDk3NEUtNCwwLjczNDIwMjcyMjMzMjQ3MywwLjAwMTQ4NTM1OTgyOTU3ODM3NDksMC4wNTg4MjQ0MzQ2MjUyMzMzMjUsMC4zNDg3ODc5NzI4OTA0OTY5NiwwLjMyNzI3ODA1MTg4Mjk5ODYsMC4wMzg3MTUwODA0MDUxMDEzLDAuMDYwMDk3ODI3ODYxODQ2Nzc0LDguNzM3NDEzMDAzNTYzMTQyRS03LDAuMDIxNDc4NDI0MjgyMDgwNjksMC4xMjM0MjUyODM3MDA3MzE2NSw1MC43NDI1MTQyNTU4MDIxMzUsMi41MTYwNDA2MzM3NzA4MzgsMi42NzA2NDEwNzgzMjU0ODkzRS01LDAuMDEzMzcyOTkxMjM4OTg1MTU5LDAuOTQ4Nzg0MTg4NjQ0NDQ2OSwxLjE5MTc5ODgyMTc2NTQ2NDZFLTUsNS4yNzU5ODcxMTEwNzkxMUUtNCwwLjAzODg2OTkxNTA4ODcwNjE0LDEuNTU4NjA5NDQwNTE0MjEzNywwLjUzMzM0NjMzMzU1MTA5NzMsOS40OTY2NTk3MTA3NjcyNzJFLTYKKzYsU3VuIDMwIEphbiAxMSwwLjEyNjUxMjE3MzM1Njk4MDksMC4wNjU5MDg3MzE1NDk3Mzk1OSwwLjA3NjExODM0MTcwNjI3NjY3LDUuNDg2ODIwMjA1MzM1ODcxLDAuMDA1MTU3NzE1NjcxNjE5Nzc1LDUuMTc2MDIyNjYzMzE3MjMyLDAuMDE2MDcyODM1Mzg4MjI0ODM1LDAuNTc2MTUzODUzNTgwOTU5NSwyLjU2MTUzMDgzMzQ3MTM1MzYsMi41Nzc4MjY5ODA2OTg2OTU1LDAuMzUwMDk5MDc1NjczNDQ0NTYsMC42MTc4MzQ3MDI0MjUyNzkyLDEuMjgwMDM5NDI1NzU0MDQ3MkUtNSwwLjIxMDIzMzgwMjY3NDA5NTA4LDEuMTkxMDY5NzkxNDc2ODE2NSwyNzEuOTU3NjYyNzY5MTMwMTQsMTguODk1NDg1MzY5MjEyNTU4LDMuMjA0ODExOTY1MjQ2NzAzNUUtNCwwLjEzNTE4NTk4Mjg4Mzg0ODc4LDcuMDE3MTQ3NDEyNjM0OTU4LDEuNDQ5NjI3NjQwNTE4MTA2MkUtNCwwLjAwNzI2ODUxMzc2MTc3NjY5NCwwLjM3NTg4NzYwNTAxMzMxMjUzLDExLjczMDAwNjQyMzIzNjE4OSwzLjQxNDc3OTc0MDQ1MDQ2NjUsMS4xMTMwMTI5MTAzOTEyMDc1RS00Cis3LE1vbiAzMSBKYW4gMTEsMC45Mjg3Nzc5MDQ4NDcwMzg3LDAuNTAzNDIwNTk0MDE5ODM5NCwwLjYyMjQ3ODQyMTM4ODE5NzgsMzAuNDg3MDI0Nzc0NTE2OTMsMC4wNDg1MDg4MTk3MzQxNjI0NCwzNC43NTYzNTgwNzkxOTYxMjYsMC4xNTUzODAzMTIwNzg4MzA3NCw1LjA2MTgxNDU5MDAzODIxNjUsMTcuOTg0Nzg5NTc5MTIwNzksMTkuMjY4NzA1NjA1NDg4NDA3LDIuODU3MzgwNzk2NDE4MjU2Myw1LjY3NDI5NTYxNDQ5NTA5OSwxLjU3MDM3NDY0MjI1ODk3RS00LDEuODQ0NzI4MTc2MDAyNTA1NCwxMC40MDk0MzcxNzc0NDEwMDgsMTQ1Ny42NTIwNDYzMzEyMzkzLDEzNC45NjAyOTU2OTg4MzQxMywwLjAwMzI2ODMyMDkyMjYxMTMxNSwxLjIyNDM4ODkyMzczMDQ2NjEsNDkuNDAzODcxMjg1NDMzMDEsMC4wMDE1MDU2MjM4MDM4ODUyODM4LDAuMDgzOTU0OTQ3NjM2NjQ3MjUsMy4yNjIwNTU0MTg5NjE1MzYsODMuOTk0ODc1MTI4MTA4MjIsMjAuOTU0MTk2MDkzMTYyMjg4LDAuMDAxMDk2NzE1NzQzMzM3MDE2Cis4LFR1ZSAxIEZlYiAxMSw2LjU5NzIxOTU5OTA0MDk5NDUsMy42NDgwMzU5MjkzNzg3NzQ1LDQuNzU2NjEwMDIyNDY0MjIzLDE2Ni4yNDc5NDU3ODg1MTc2OCwwLjQyMzMwOTk4MzI3Mzk0MDMsMjI2LjMwNTMzMzI0ODc0NDUsMS4zOTQyMDk0OTAyOTU4MzgyLDQxLjQ1NTEwMjIyNzg2MTQ3LDEyMi44Mjk0MDg3OTg3ODYxNiwxMzkuMTA2NDM1NjYwMDkzMTMsMjEuODgzNjcxMzEwNzU1MzY0LDQ4LjM4NDc5NzA1ODcyMzI3LDAuMDAxNzE0ODExNTg0MzU1ODkyNiwxNS4wODIwNjY1MjMzNzU2NjQsODUuMTQ4NDEzMTg1MDc5MDgsNzc2NC4wOTIzNDA1MjU0NjksOTMxLjUzMTc2MTgyNjM0ODUsMC4wMzAxMDc2Njc2NzU4MjA2NDcsMTAuMzIxODUxNTc3MzY1MjczLDMzNi42NzU0NDg1Njk1MDU0LDAuMDE0MTgyNjY1NTI5ODEzNzI4LDAuODY0NTU5OTgwODgwMjYxNCwyNi4zOTgzOTE4OTIzMDEzNDgsNTgyLjEwNjM1MzAyNjQ1NzYsMTI1LjM0NTI4MzI3MTAwNjYxLDAuMDA5Njg5ODc0NTQwNTQ1OTIzCis5LFdlZCAyIEZlYiAxMSw0NS43MDIwOTk3MDE1MTU5LDI1LjQ3MTQxMjM2NzA2NjYxNiwzNC42MzA2MDEzMDAzMzQ1OSw4ODAuNzQ0NDkxODQwMjI2OSwzLjUwMjY2ODU3NDI0NjY1LDE0MzkuMjUxMTE1ODExNDg0OSwxMS44NjQ1NjI4NDMyMTU1NCwzMjMuMTY5OTU4NjIwMTA3OTMsODIxLjk5NjY5Nzk3NjM5MDksOTc3LjcyMDUxMTg1NTc5MTEsMTYwLjQzNTYyMTI3OTQzODI3LDM5MS4yNDgxNjMwMjA2NzQ1NSwwLjAxNzI1MTgxOTE5NDEwNDcxMywxMTcuMzU4OTQ4OTQ1MjM0NSw2NjIuODU1ODkyNTU3MDE5LDM5NzM2LjkzNzM0NTI5NTE4LDYyMDcuMjk1MTI0ODQ4ODY4LDAuMjU4OTM4MjI4MTUzMDIxMzcsODIuNjc1MjQ5ODkzOTEzNjcsMjIyNi42MjM1NzgwOTg3Nzk1LDAuMTI1MTc3MjI3NTc0ODY5ODIsOC4yMTU4OTUwNzM2NDg3OSwyMDMuNDE0MjEzODYxMzc4MDIsMzkyNi4yMDA4MjcwMDA1OCw3MzAuOTk2Njk1NzgwNTgyMSwwLjA3OTU2NzkyMzk2NjQ4MjY2CisxMCxUaHUgMyBGZWIgMTEsMzA3LjIyMzM1NTMxMzE1OTYzLDE2OS44NDU5OTY0ODk1MTY3MiwyMzkuODczNDk5MDE1ODMzMzUsNDIwMy40MjUzMDU4MTQ5MzIsMjcuNzk1MzMyODM0NjUxNDA4LDg4NTAuMzQxNTU0MTE2ODUsOTYuOTUwMzUxMTExOTM0NDcsMjQxNi45MzI3MzcyNzQ5NDg1LDUzNDkuMjUzMzYxMjAwODYzLDY2NDYuNTgzODA0ODgzMzA5LDExMjcuNjU5MDcyMTY4OTM0LDMwMjQuMjY2OTM0ODA5ODQxLDAuMTYzMjkxMDIyNTUyMzQ1ODcsODc3Ljg3MDYzNjI4NzU5NDgsNDg4NC40NzMyMDMwNjAxMzQsMTcxNzY2Ljk1ODUzNDc2MDEsMzc3OTEuOTEwMjkwNDcxNjIsMi4xMTczNzk5NDgzNjIyNjEsNjMzLjg3ODg3MzgzMjgyMzYsMTM3ODYuODM2MDczNTc2NDMzLDEuMDU0MDI1MzcyNjI3MjY1NSw3My41MjEyMzM5MDE3Mzk2LDE1MDUuNTAyNTM1OTExMDc3LDI1Mjg2LjIwMTYzODU4NzIxNiwzOTczLjE2Njg4NDc0MzcwMywwLjYxOTE1NzAwMDY3OTQwMgorMTEsRnJpIDQgRmViIDExLDE5MDYuNTk2MTYzNTY2NjA0NCwxMDAxLjcyMTgwODg3NTc5MzcsMTQ3NS44MTY2Njg3NjQzNDA5LDE0OTk2Ljc5NDEzMjc1MzkyOCwyMTEuMDI2NTA4MDI1NjkwMTMsNDkzMDkuMTE4NDgwNjcwNzQsNzYzLjgxNjE1MDkzMDE1NzIsMTY5MTkuNjUyNzQ5MzYzNzI2LDMxOTQyLjc5MTUyNjUxNjYyMyw0MTEwMi45Nzc4ODQzMjY3OSw3MjA1LjI3MzgyMzEyNjg4NCwyMTc3Ny45MDM2OTQ3NTE1NTYsMS40NzUwNDk5NzYxMjQ3MDY1LDYyNDMuMTM5MjQ5MjkxMDU0LDMxMjA0LjUwODc4MDUxODQ3NCw1MDYzNDQuNzM2MTUzNTk1NzMsMTcwMzI5LjYxOTY3MzIyNjY0LDE2LjU2ODUwMDM2NzI4NTk3OCw0NTcyLjY4MTM2ODkzMzMwNiw2Nzc5Ni45MTYxNTY0ODc1NSw4LjUyOTgzMjM5MTA5MDc5Miw2MjUuODk3MDY2Nzk4NjczLDEwNTEyLjkwMjI1NjAwOTkwNiwxMzkwOTguNTg2ODAwNjI1NTgsMTcxMTUuNTUyMDczNDQ0OTA2LDQuNTcxMzI5MjE3MTM3MTM2CisxMixTYXQgNSBGZWIgMTEsOTA3NS4wNDk5Nzk4ODM2NzcsNDQzOC4wNzA1Njg1OTk3MTksNjQwMi45OTA3ODU0OTMxNzM1LDM1NjgzLjAyMDEwMTYxNDk2LDE0NjMuNTcyODMwODcwOTk4OCwyMDUzODkuNjQzNDkzOTE3NjMsNTcwNC43MDQ0MjA0ODQzNzksOTUzMTAuODM0OTcyMjExNDgsMTQzNDA2LjM1NjQ0MjM2MTMsMTg2MTc1LjYzMTQyNzc5NTgsMzQwMTMuNzA2MzE1ODEzOTIsMTI0NTkwLjEzNzg5OTQyMzM1LDEyLjgyNjM3NDkzNzIwMjc2MSwzODM3Ny4xNjMxNjcxMTgyOSwxMzIyMzcuMzUxMTE5NDI0NTcsMTAwODIyMC40MDg1NTc1MzU3LDQ2MTgwNC4wNDMyNzA3NDI4NywxMjMuMDEyMjYzMTU2NjM1OCwyODg1NS4zMzY1Njc2Mzg5MSwyMDY4MDAuNzkxMzMzODA2NDcsNjYuMDQ3MzU1ODE1NDM1OTgsNTAxNy4wMzUwNDIyMzgwMzYsNjEyNzMuMDAzMzIxMTM3NTg1LDUwNDgwNC4xODIxNzQ0NTAyLDQ3OTIxLjE1NzMxMDMyOTM1NiwzMC4yOTU5ODE5NDY3NTU3MzgKKzEzLFN1biA2IEZlYiAxMSwyNjMyMi41Nzc4NzcyOTMwNywxMzY0OS4wOTY3MzQwNzgwMjYsMTY1MzUuMjIzMjc3NjAwMDcsNjIyNTguMTAyMTIxMzYwNDcsNzc5Ni40MjY1MDI5NjIwNTcsNTM1MTQ3LjAzMjE3Njg0OTksMzc2MDAuMTk4NjQ2NzcyOCwzMjUzNDAuMzU4OTA5ODQwODcsMzkxODI0LjI5MzIwODYzMDIzLDUwMzExMy45ODcxNjQ1OTgsOTU3MTAuNDc3NzE0OTA2NDgsNDI0NzE0LjI4NDE1NDAzNjIsMTA2Ljc3Njk1MDI0OTYzNjI5LDE1NjQxMS4wNTM5MTYxNTUzLDMyNjE4OC42MTIwNjQ0MDY2LDE1NzEyMDQuNDk3Njk4ODM1LDg0OTk3My40MTU3ODEwNDM4LDg1NC44NTQ0MzczMTIxMzE3LDEzMjM0MC40NTI5MzI4OTE5Myw0MDk3ODcuMjAxOTM5NzkxOCw0ODUuNzQ5OTI1NzU2MDIxNCwzNDc3My44MTY2NDc4MTA1NywyMjU2NTYuNzA4NjM5ODczNDIsMTEyODE4Ni4zNjI1NzYxOTM2LDkxNDA4Ljc4ODcyODU0NDc4LDE1MS44OTA2NzgwNjU0OTkwNgorMTQsTW9uIDcgRmViIDExLDUwNDk4LjQxNTMzODIxNTM5LDMwMTk4Ljc1OTI4OTY5Mzk1LDI5NTY4LjczMjkxMjExNzg0OCw5MDE2Mi40NDM0MTQ1ODQ4MiwyNDkwMS4xNzg1NTg3Mzg4Myw5NjkwMzYuOTUyMTM3NDM0LDE4MTE0Ny40NTc0MzYyODI4Niw2ODQ1NzMuMDk5MjQ4NjQ5Nyw3MjU0NTAuNDUxMzY2MTE3Myw5MjI5NzguNDkxOTc4ODE3OSwxNzk4ODYuNDgxMDI3ODk2NDMsODg5OTA3LjQyMzA3MjcyMDQsODMwLjQwNTkwNTk2NDg4MzEsMzc2NjgyLjk1MDY1NDU3NTk1LDU2NjU2MS40NzkyNjA3MjAyLDIxMjUwMDcuMDUwNTA5MDQxLDEyNjIwNjAuMDUxNTI3NjI0NSw1NDY4LjUzODMzNjk5MDk1NCwzNjU2NzEuMzIwNzMxNTY2Miw2MzM4MzMuNDc1OTY5Mzk4OSwzMzg0Ljg1MjExMTY3MDcwNjYsMTYyNDYzLjkzMzc2OTM0NjMzLDUwMjE4Mi4zMTA3MTkyMTc0NiwxODYzMjI3LjU3MjUxNzM0NTcsMTM4ODMyLjIzNDcxNjMyNzc3LDQ4MS44ODkxODIzMjg1OTAyNworMTUsVHVlIDggRmViIDExLDc2NzI4LjExNDA5MDE1MTAxLDUxNjgyLjYyMTcyNTc2Mjg4LDQzMjAyLjM4Njg1NDc4MzU5NSwxMTY3MTYuNTAzNDA4MDAzMjUsNTAzOTYuMzM2NDA0MjY4MDYsMTQyNzU3NS4xNDMwOTkyODc1LDUxODQwOS4wMjQ5OTUzOTkyLDEwOTE3NzguOTg3NzQyMzQ3NiwxMDgwODk4LjIxMzYxMDU2NiwxMzY3NjQzLjY2NzkxNTEwMSwyNzAxNjkuNDQ2NTkyMzg5NywxNDE1NDI1LjY3NjYxNjk4NTgsNTY4My44NzMwMDIzOTc5NDEsNjQ2NTI1LjUwMDEyNjI3MDksODEzOTIxLjAyMjExMjU2MzQsMjYzMzM1NC45MjkxODkyMjcsMTY1NjM4Ni4wMzAzMzc1NjkzLDI4NTYwLjQzNDc5NDQyNzg2Myw2ODEyMjguNDcyODc5NTMyLDg1MjQ1NS4xMzk5NjM0OTEsMjE1MTIuMDMyMTA1OTkwMTI1LDQzMzE1NC4xNjA3NjE1Mjc1NCw4MjU3NTkuOTQzNDY5MjM0NCwyNjAzMTUyLjQyNDY5MzIzOCwxODQ4MzUuNDE4NzY3MjgyMDcsOTk3LjYxNDM4MTE3NDcyNjUKKzE2LFdlZCA5IEZlYiAxMSwxMDIxMDYuMjA5MTk1NzcwNzIsNzQ1NDQuMzk3MjAwMDkxOTYsNTYxNDguNDE1MzU3ODUwMzgsMTQwNjE2LjIxMDQ3MzI3MjIsNzg3NTYuODkwNjMyMjI0MzEsMTg2NTMyNS44OTI3NTM5NjQsOTgyNjgyLjMwMjE4NzY2MzYsMTQ5NDIzNi4yOTA4MzY5MDE5LDE0MjE2NDkuODIxNDA0OTI3LDE3OTI2MTQuNTY0MjMyNjY1MywzNTcwMTUuNTMxMjc1Mjk4LDE5MzM5NzEuMDY2NzU5NTQ5NSwyOTU0Ni4zMTYzNTE3MDc0Miw5MjI4MTkuMTM4MzkxNDgxNSwxMDQ2NzY0LjU4MDQ1MzY3MzUsMzA4MDY1NS43MjQxOTE4OSwyMDEyNDg5LjcyOTA2MDI1MTMsOTQxODMuMDI5OTg3NTYzNzMsMTAxODQ2MS45NzI3MTk0NTg3LDEwNTIxOTMuMTE4NTE5MzYzLDEwNTg3Ni4yMDM2OTUzODQ1LDc4NDYyOC44MDI2NzQyOTgxLDExNTAzMzIuNDE3MzM4OCwzMjkxMjk0Ljk4ODI3MjU1OSwyMjY3MTkuNTY1MDQ0NDU0NjUsMTU4Ni44Njk0MjU3Mzg0MDM2CisxNyxUaHUgMTAgRmViIDExLDEyNTE3Ni40NTk3ODgwMDExNCw5NjQ2OC40Mzc1MTM3NDc4NSw2Nzc4NS4wMzI1MDg5MjA5MiwxNjEzNzUuNzcwNDIzODQ3NSwxMDY1MzUuNDc0NzM4ODUyODksMjI2MDA4Ni4yODcwNTY5OSwxNDgyMzU5Ljg5ODEzODMzNjYsMTg2NDY2My43NzIzNDE5NTQ4LDE3Mjk3MTIuMDM4NDMxMDQ0MiwyMTc2MTAzLjk2MTA1NzYzMzYsNDM1NjkxLjI2NjYwODIzNDMsMjQxMDgwMS43Njg1NjQ5MTQ0LDkyOTc2LjYxNjA3MzM3OSwxMTgyMTkyLjUwNDYxOTcyMDQsMTI1NDkzNi4yNjM1OTg4MTc0LDM0NjMyNDguNjU5OTcwNjIxLDIzMjI0OTguMzY3MTM4NDYzNSwxOTU5NjguNDIyNTMyMDQzLDEzNDIyNjMuNDAxNjg3MjcyOCwxMjI3NDEwLjMwNzYyODY3MSwzMTc1NjcuMDE2Mzk2NjE1OTUsMTE1MzYyNS4zMzExNjk1OTgzLDE0NTE1OTEuMjQ0MjcyNjQ3NCwzOTAxODg3LjMzNzA0MjYxMSwyNjMzNzguNjkzMzQzMTY1OTcsMjE3MS42Mjc4OTkzMTgxMDg2CisxOCxGcmkgMTEgRmViIDExLDE0NTM0OC4zNDU0MTU1NTU2NywxMTYyOTMuOTE1OTQ4MTMzMTksNzc4ODMuODM4NjY3NDQ2NywxNzg5NzEuODM0MzYzODY5OCwxMzE5NzAuNjM2OTE1NjE3MiwyNjAzNDI0LjU4MDQ0NTk4ODYsMTk2Mzg1My45OTM1NTExMjE4LDIxOTExNzcuMjA0MjM0Njg5NSwxOTk4MDk0LjI2NjAxMTgxNDQsMjUwOTc4Ni40MjQxNzczMzEsNTA0MzI2LjE4ODE3Njg3MzI2LDI4MzA4NTEuNDk4NzUxODUzNiwxODY4ODEuODA5Nzk0ODA3ODYsMTQxMzY5MS4zMzg4MzgyMDk0LDE0MzQ5NDYuMTczODAxOTM0LDM3ODM5NjQuMzY0ODAxMTU4NywyNTg1NjgyLjI4MDIxMTI3OCwzMTExNDQuMzU0ODE3ODczMTYsMTYzNTI3OS42OTE3Mzc1OTIyLDEzNzY5NjIuNzMwNDk0MTk4Miw2MjA2MDMuNzc2NDgzMTY4MiwxNTA0Njc3LjY2OTQxNzIzODgsMTcxODU2My41ODM3MzUwNTY3LDQ0MjcxNzAuMTIxMzQ0NTUzLDI5NDYxOC42OTc2ODgxMzA4NCwyNzExLjEwMzY3MjA4MjU3NQorMTksU2F0IDEyIEZlYiAxMSwxNjI1MjYuMTc4NzU5ODA0OSwxMzM1NjguNTMzMDI4NjE1OTYsODY0MzguMzU0ODg1MjE2ODIsMTkzNjIzLjk1NTkyNjM2ODEzLDE1NDMxNS4yNDUxOTY2MjY4NCwyODk0NzA5Ljc4OTkyMTg2OCwyNDAwNTA0LjQ3NTUxOTM3NDUsMjQ3MDc5NC44Mjc2ODM2MTQsMjIyNjA1Ny4wMzYxNTA5NDksMjc5Mjk2OC4wOTA5Mjg0MDgsNTYyNjgwLjIyMjE3MjY3MjYsMzE5MDQyMS4zMzk3NTc4NjUsMjkxMDY0Ljc2MTc4NzM2Nzc1LDE2MTM2NDMuOTM3MjEyMjk2OCwxNTg3MDM2Ljk3ODYxNDg0NzQsNDA0ODgxMS40MzExMDgyNDc1LDI4MDUwOTAuNzc4MzA3NjkwMyw0MjQ4ODUuODM0Mzg4MzU2NCwxODkwNzE0LjYzOTI3NzI4NjYsMTUwMjEzMy42NzkwNDM3MDcyLDk1MjE0NC4wMTI1MzAxMTQ3LDE4MjA1ODkuNDc2MjAwOTI5LDE5NDgwMzcuNzcwNjE2Mzc4OSw0ODY5MzQ1LjM0NjY1OTIxNiwzMjA3MzUuMjkyODMwNzkzNCwzMTg3LjMzNjc1MzU4OTI4NworMjAsU3VuIDEzIEZlYiAxMSwxNzY4NzkuMzY3NTU4Mzk4MywxNDgyNDMuMjI2ODAwODM1NTIsOTM1NTguMzE5MDc4MTMzNzMsMjA1NjYyLjI3MzIxMzkxMTY2LDE3MzQwNi4wMDIzNzMwMzg0NywzMTM3NDI1LjY2Nzk1ODY0NDcsMjc4MTY5MC40MDAyNzQ5NDU0LDI3MDUzOTYuNjAyMDI3Njc1LDI0MTYxNzUuMzY0MTk1NTUzLDMwMjg5ODYuMTk2NzQzNDI0LDYxMTM4MS4yMjYyMTcwODkxLDM0OTIwMTIuMjQyNjM4MTIxNCwzOTI5NzkuMjEzMjUxMzkzMywxNzgyNDQ2LjA1ODk2MjA1OCwxNzEzMzgwLjI0NjM0MzQzNjQsNDI2NTAxNS4xNTIzNDg4MzMsMjk4NTUyMC40MDc5MzIyNjcsNTI5NTI2LjkwODE5OTMwOTcsMjEwNzc3Ni40MzgwMjYyOTU1LDE2MDUzNzguMjQ3ODE5OTY3NiwxMjc0MjUxLjgxMDYwMjc1NTUsMjA5NDk2NS40MzUzMzI2ODI3LDIxNDEwODUuNDgyMTY2ODYyLDUyMzU2NDguODA0NTM3NzU3LDM0MjI1Ny45NjkwOTk3MDc4LDM1OTUuNTkyMjk0MzI4OTY3NQorMjEsTW9uIDE0IEZlYiAxMSwxODg3MDMuMTUzMDMwODMwMDMsMTYwNDgyLjg2MTU1OTQ5MDEyLDk5NDA2LjAzMjExMTk1MTA1LDIxNTQ1MC4zODAzOTExODIyNiwxODkzOTYuMDgzNzY3NDM2NTMsMzMzNjk0Ni40NTE3ODgzNzU2LDMxMDU5MzUuMDUyMjcwMzU3NSwyODk5MjYwLjIwMTAxODM3ODYsMjU3MjU2NC4wMzc0Nzc5MjM2LDMyMjMwMzUuNTg1OTQ4MTE3NSw2NTE0NjMuNjY4OTM2Nzc3NywzNzQxMTc1LjIyODg2MzgxNSw0ODYyMjYuNDk3OTA4MjI3MTUsMTkyMjU4NS44MDI1MjUxNjIyLDE4MTY5OTQuMjYxNTI1MDE1OCw0NDM5OTA1LjI2MDA1NzUyNCwzMTMyMzI3LjA5MzQzODA2NzUsNjIxNzM1LjQ2MDMxNzc0MjUsMjI4ODg2Mi45MjEzMjYxOTcsMTY4OTU4Mi41NzQ5NzczNjQyLDE1Njc3ODUuNzY4NzUyOTM4NiwyMzI3NTEyLjUwNzE4NjQxNjUsMjMwMDkzMy43NDkwNDYxNDI3LDU1MzU0MTAuODQ5MjExODY5LDM1OTc5OS4yOTczMjYxNTk3LDM5MzguMzgwMjMyMjk2MTQwNQorMjIsVHVlIDE1IEZlYiAxMSwxOTgzMzYuNzQ1Mzg4NjMzOTgsMTcwNTUxLjc5MDA0OTAxMzY1LDEwNDE1OS4zMDE3NDUyNDYyNywyMjMzNDIuNjQxMTE0OTc3MDQsMjAyNTkyLjQ4NDI1MzM3Mjg4LDM0OTkyMzguMDc5ODI5MTg5LDMzNzY2MzkuMTQ3Njc0OTA2NSwzMDU3NjAwLjAxMTA2Nzg3MDUsMjY5OTgzOS4wMjk3OTA3NTIsMzM4MDg5OC44MTcyMjcyNzcsNjg0MDk4LjE5MzE5MjY4NjcsMzk0NDY0NC44NTI3NDM5NTMsNTY4MTAzLjg5NjU5NjQ2NDYsMjAzNzQ2MC4wMDMyNzA3NjE4LDE5MDExMTcuNDY3NzY5OTQ4NSw0NTgwMzI4LjAyMzA0Mzg0OTUsMzI1MDc2NS40OTEyODAxODgsNzAwNjg0LjI0MTE0MTg2NzIsMjQzNzg1OS41ODI1NjU2OTI3LDE3NTc2NDUuODM4MjA2NTg3OCwxODI0ODU0Ljc2NTQwMDUxNjYsMjUyMTE0MS43NTU0MDM3NzIsMjQzMTY5Ni45OTI2OTg2MjcsNTc3ODM2OS42ODI1MTU5NjgsMzczOTcwLjIzMDI0NjAzODQ3LDQyMjEuODA0OTA1MTA4NTI0NQorMjMsV2VkIDE2IEZlYiAxMSwyMDYxMTcuMzk2ODc4MjkwMSwxNzg3NDYuODY2NTAzNjE5MzksMTA3OTkwLjk3NTY0NDkwNTYzLDIyOTY2Mi41OTc2MTk3MTYsMjEzMzU5LjkwMTQyMDE2ODU1LDM2MzAxMzcuMzE4MTkxNDM1NywzNTk5NDk3Ljc1NzA5OTM2ODYsMzE4NTczNi4zNjMwODEzMzM3LDI4MDI1MzguOTk1NDEzNjc2NCwzNTA4MjQwLjY0OTU5ODY2OTcsNzEwNDQwLjU2NTIyNTU5NTQsNDEwOTI3OC44MDA0NDg2ODEsNjM4MDM0LjYwMjcyNDE3NjgsMjEzMDY5MC4yMjYxODEyNzQsMTk2ODg2NS40ODI4MDU5MzUyLDQ2OTIzNzQuOTY0NjI3MDY4LDMzNDU2NTEuNzU2Mzk3NzgsNzY2OTEzLjA3MTczOTgxMjYsMjU1OTE0Mi43NDc2NTk2ODkzLDE4MTIyNjEuMjM0NzIyNjkwNCwyMDQ0MDE0LjEyMDQ3NTQ3LDI2ODAyMjEuNzkzMTkyMTM0MiwyNTM3NjUwLjU3MjAwNTI4Miw1OTczNzYxLjU1ODQ2Nzk2MSwzODUzMzYuMDM3NDYxNzIzNyw0NDUzLjM5NzUxNDM5MjU2NworMjQsVGh1IDE3IEZlYiAxMSwyMTIzNTYuNTg1OTU0NzIxLDE4NTM2MC4xMTk2NTM4MTYsMTExMDU4LjYyNzM2MzYzNDc2LDIzNDY5My45NjMwNjE2ODg3LDIyMjA2Ni4zNjgwNTIxNTcxNywzNzM0OTg1LjE1MTExNjExOTcsMzc4MDk4NC43NTgzODc2NDc2LDMyODg2NTQuMzc4OTU1MTQ2MywyODg0ODI5LjEzMzkyMzM5OTcsMzYxMDI0OC42MTQ2NzQxNCw3MzE1NTMuOTYyODc3MDQ0Myw0MjQxNDk1LjY4MjcwNjU5MSw2OTY1OTIuODcxODcyODUyMiwyMjA1NzQ5LjQ3NzA4Nzg3OTYsMjAyMzA2MS4xNjQzMTc0MDM1LDQ3ODEyOTYuNjA3ODAxNDMzLDM0MjEyMTkuNzI2NTkxOTIxLDgyMTYzNS4xNjczODg1NTA0LDI2NTcwMjMuNjA4NTIwMjY5LDE4NTU4MTYuODA2NjI1MDY5NCwyMjI3Mjg3LjIxNjg3MDY1MywyODA5NTYwLjkxMDQwNjQ1NiwyNjIyODQwLjAyMjQxNjk4MTQsNjEyOTg4Mi45MTc2MjQ4MSwzOTQzOTYuNjYyMDYzODQxOSw0NjQwLjg4MDg3ODMwMDAxOAorMjUsRnJpIDE4IEZlYiAxMSwyMTczMjkuNDgwMzg4NDY1ODYsMTkwNjU5LjYzMjU1MzU3NDQ4LDExMzUwMC4yOTQyNjc4MzQ3MiwyMzg2NzguODM5MDUyOTc5MDUsMjI5MDU0LjY0NTM3ODgwMDAyLDM4MTg0NzEuODM0MTI5NDg5LDM5Mjc1MDUuMTc1OTYyMDk4LDMzNzA3OTguMzc3NDMwOTIyNCwyOTUwMzc0LjA1MDg2NTAxMiwzNjkxNDgwLjQ1ODU4MDUwOSw3NDgzNzUuMjE1MjMwMjUwNyw0MzQ3MDEzLjg5NTUxMTkzLDc0NDkxMS4xNjk0MjQxNDI4LDIyNjU3NzguMzQzNDgxMzM2NywyMDY2MTY3LjM5ODk4MjYyNjIsNDg1MTUxOS4wODMwMzg1NCwzNDgxMDg4LjU0ODU5NDUzMDcsODY2MzI1Ljk0OTM0MTY1NTUsMjczNTQ2Mi45NTQ5MDU4NTEsMTg5MDM2Ni4wNTM0MDI1NzQsMjM3ODM1Ny43NzQzNjQ4MDc2LDI5MTM4NDMuODczMTgzMzI4LDI2OTA4OTQuMDMyOTU2MjI4Niw2MjUzOTMwLjc4OTg5MjEwMSw0MDE1ODEuMjU3NTE5NTg2NSw0NzkxLjUxMDk5NDE1NzUzNQorMjYsU2F0IDE5IEZlYiAxMSwyMjEyNzIuMDk5Nzk0OTIzNjIsMTk0ODgxLjMyMDQxMzI1NDE0LDExNTQzMy42ODUwNjM0MzQzMSwyNDE4MTkuODMzNzE5MTQyMjUsMjM0NjI5LjE1MDEwMjExOTc1LDM4ODQ2MDMuNzIzMDE4NjU2LDQwNDQ5NTguMDEzNzg1NjM2NSwzNDM2MDA0LjIyODA3NDMxOSwzMDAyMzA4LjA5NzQxOTY5NywzNzU1ODMwLjY4NDczNzE4NjQsNzYxNzA2LjQ0NDYyNjMzMzcsNDQzMDc2Ni42NzI4OTI2MTMsNzg0MzMwLjAxNTA4Njc4NjEsMjMxMzUxMy40MjM0NzQwNTcsMjEwMDI3OC40MDg0MTEzMjAzLDQ5MDY3MTMuMjA3ODI4MjUzLDM1MjgyOTAuODI3ODcxNzk3LDkwMjQ4OS4zMzU2NTIxMTM3LDI3OTc5NDguMDE1NDk0MTU0OCwxOTE3NjM3LjExMDgzOTI1MjgsMjUwMTUwNS4yMTMxMzgzMzcyLDI5OTczNDcuMTU4MDYxMjE5NCwyNzQ0OTU3LjQwODg2MjE4Niw2MzUyMDAwLjA3MzM0NTg2OCw0MDcyNTAuNTIzNjg5NDg4Nyw0OTExLjc2NzcyNDQ0NjA5OAorMjcsU3VuIDIwIEZlYiAxMSwyMjQzODIuNzAzNTQ3NTE3NjgsMTk4MjI2Ljk5NjE2MTkwOTE2LDExNjk1Ny4yNTU5NDg0MzM3MSwyNDQyODQuMDYxMTIxNDU0OCwyMzkwNTEuOTQyODc5Mzg1NDYsMzkzNjczNi4wNzkxMzEwNTksNDEzODU0NS4yNDk4MTY1MzgzLDM0ODc1MDguNjM3NjgzNjUzMywzMDQzMjU4Ljc0OTY5MTY1NywzODA2NTYxLjY5NzcxMjQzMSw3NzIyMjAuNTc2NDQwNzQwNCw0NDk2OTE1LjI5NDUzNDkxLDgxNjIwMC4wNzg1NDgwNzEzLDIzNTEyNzkuNTgxODQ5OTEzLDIxMjcxNDIuMjMwMDIyNjc2LDQ5NDk4ODUuOTE4MDQ5Njk0LDM1NjUzMzAuMzE0MzMyNzAyNyw5MzE1MzMuNzMyNjUwNjY3NywyODQ3NDYyLjg5Mzk0NjAwNiwxOTM5MDYxLjM4OTA3NDE2ODIsMjYwMTAwNS42MzI2MDI5NDMsMzA2MzgyMC4yOTU0MjY2NzIzLDI3ODc2OTEuNTQ3NTA5MTQ3Myw2NDI5MTYyLjg4NzI2ODgxMiw0MTE3MDIuOTQzMTQ1Mjk1NCw1MDA3LjI1MDI3MzkyNDc0NzUKKzI4LE1vbiAyMSBGZWIgMTEsMjI2ODI1LjI4Mjc2NDA5OTMzLDIwMDg2NS44NTgyNDE1MTk5OCwxMTgxNTIuMTgzNTc1MTEzNTcsMjQ2MjA3LjgzMTEzMjI2NTk0LDI0MjU0My43Mzg3NTAzMjg4NiwzOTc3NjM3LjkxNjkxNzM3Nyw0MjEyNzIzLjI0NTQyODk4LDM1Mjc5OTcuOTExNzMxNzA4LDMwNzUzOTUuOTY1NzA2NTc0NywzODQ2MzY2LjM5MjkwMjMzNyw3ODA0NzMuNjg0OTM4NDg1LDQ1NDg5MTIuNTU4ODU1MDI3LDg0MTc3OC4xOTMxNTg5MjQxLDIzODEwMTYuMDgzMTIzMzI3NywyMTQ4MTk3LjgyOTkyNzczMjcsNDk4MzQ3Ni43MDQ5MTY2MDEsMzU5NDI1MC43OTk4NzI5NDcsOTU0NzE0LjMzNjE4MzE4NzgsMjg4NjUxMC4wMDk3NDY5OTYsMTk1NTgxMC4yNzk3MjE4MzUsMjY4MDgxOS41NTYxMzQ3NzE2LDMxMTY0NjIuNTY2NzY2NSwyODIxMzEwLjExNTc1OTI3NCw2NDg5NTg0Ljk3NzI1MSw0MTUxODIuNTk4Njc1NTg2MDUsNTA4Mi42ODcxNzM2Njk0NTkKKzI5LFR1ZSAyMiBGZWIgMTEsMjI4NzMzLjg5NTk5MDcwNjQ2LDIwMjkzNy42NTYwNDUyMjY4NSwxMTkwODQuNjYyMzI3NTM4OTcsMjQ3NzAxLjM1ODQxMzg5MTAyLDI0NTI4Ny40NjQ5MTQyMDM2LDQwMDk1NjguODUxMTczODE2Miw0MjcxMjMyLjAyNzQwNTY3OSwzNTU5NjczLjc2NTMwOTA0OSwzMTAwNDkxLjUwNTIxMjk0MDMsMzg3NzQ0Mi41OTg0NTY3MDEzLDc4NjkyMC4wMDc4NDc1NjU3LDQ1ODk1ODcuODY1NDU1NTg1NSw4NjIxNzkuOTc5NzQ4NTkzLDI0MDQzMTguNTAwNzQ4MzgyNCwyMTY0NjE3LjE0ODYyMTA2Myw1MDA5NDQ5LjY0MjU0NTA3NywzNjE2NzA1Ljg0ODg3NTk4LDk3MzExNC4yNTIyOTU0OTUxLDI5MTcxNTYuNTk2MjMzNTk3NSwxOTY4ODMzLjQwMDUyMzIxMTMsMjc0NDQ1Mi4xNDI4MTUzOTM0LDMxNTc5NTEuMTY4MTgyMTk2LDI4NDc2MzAuNDk5MzMxMzMyNyw2NTM2NjUyLjk3ODIwNjI1OSw0MTc4ODcuMjQ2ODk5Mzk2OSw1MTQyLjAwNTMwMzAzODY2NAorMzAsV2VkIDIzIEZlYiAxMSwyMzAyMTcuMTI5MjgwNjg3NzgsMjA0NTU2LjQ5ODE5NzU3OTIsMTE5ODA4LjIwMzQ1MTMzOTI2LDI0ODg1My4xMzY4OTY0MzkzMywyNDc0MzIuODg4NzUxODgyMDcsNDAzNDM1Ni42MDIwMzM4OTYsNDMxNzE2My4wNzg1MzQzMjgsMzU4NDMyMy4yMzU1Njg2NDgsMzExOTk3OS4xMjI2MDY2MTYsMzkwMTU2OC4yNzYyNDEwOTg1LDc5MTkyNy4yNTc2NTE4NjcyLDQ2MjEyMzcuMzczNDg0ODAxLDg3ODM2NS40NzQxNTE3MjY5LDI0MjI0ODUuODA2Mzg5MjY3NiwyMTc3MzQ2LjY1NzI3ODkzMSw1MDI5Mzc2LjM5ODg4MTgzNywzNjM0MDIzLjg4MTkzNjc3MTMsOTg3NjQ3LjI1NTg1MTc1MzksMjk0MTA5MC44ODcwNDE5NiwxOTc4ODk0Ljg1NTA4MTQ2MjMsMjc5NDkxMy42MTUyNDU5NTQ2LDMxOTA0OTQuMTgxNDA1NjUzNywyODY4MTI5LjczNDg5ODI3OTQsNjU3MzA5OC4wNzA3OTYyMTIsNDE5OTc1LjkzNTgyNjAxOTAzLDUxODguNDI0NjczMzk2MDM4CiszMSxUaHUgMjQgRmViIDExLDIzMTM2Mi4yOTYzNzEyMDcwMiwyMDU4MTQuNzIwODUwODg0LDEyMDM2NS43Njc2OTI1MDk3OSwyNDk3MzMuODIyNDE4MjI2NiwyNDkxMDEuNDY3MjQ0ODQ5MDcsNDA1MzQ2OS4yMDMyMjI2NzY2LDQzNTMwNDIuMjg1ODcwNzkyLDM2MDMzODUuNjQzNjQ5MDUwNSwzMTM1MDEwLjgzNDg4MDgwMTQsMzkyMDE3MS42NDMyOTgwODUsNzk1NzkwLjk3NDM4MDkxNTYsNDY0NTcxMC4yNDQzNDMxNiw4OTExNDMuMDI4MDA4MjYzLDI0MzY1NjYuNzMyNTc3MDgyLDIxODcxNDUuNjMxMTU3NDM0LDUwNDQ1MDguNDk0MTgxODc2LDM2NDcyNjYuMDkwMDc5MzUxMyw5OTkwNzEuNjQwODg0MTgzNSwyOTU5Njc5LjI2NzA2NjAyNSwxOTg2NjA1LjgxNDUwODI1MTEsMjgzNDczNC44NzcyMjQzMTc4LDMyMTU4OTIuNjMyOTEyODg3MywyODgzOTk4LjcwNzYxMDk5Niw2NjAxMTA4Ljc0NjE4NDg1OSw0MjE1NzUuODMwNTk1OTU5NSw1MjI0LjU1OTc3MjQ1NjI2MgorMzIsRnJpIDI1IEZlYiAxMSwyMzIyMzkuMTk3MDczODc0MTUsMjA2Nzg2LjUwNTg5NTI0NzgsMTIwNzkxLjY1NTU1MDExMzA4LDI1MDM5OS41NzYwMDYwMjYxOCwyNTAzOTAuOTU4NjQ5NDY5NjYsNDA2ODA3OS4xODMzNjE3NjI3LDQzODA5MTQuNzU3Mzg4MTQ3NSwzNjE4MDEzLjEzNjQwMTE3MTMsMzE0NjUwNy4wNDAwMjM0Mzc3LDM5MzQzOTMuNTMwMzQxNjM5LDc5ODc0Ny4zMzIzOTE1MzEzLDQ2NjQ0ODYuNTU1MzEzNDQ1LDkwMTE4Mi40NjIzMDIxNjA3LDI0NDc0MDIuMzc3Njk2ODQ2NiwyMTk0NjE5LjkxODE4NzIyMSw1MDU1ODM4LjY3MDIwMzIxNiwzNjU3Mjc2LjM3ODU2MzEwMjMsMTAwODAwOC44NTA1NDM1Mjk1LDI5NzQwMTkuNzYzMzA4MjA2NiwxOTkyNDUyLjgwMTYyNDQwOTksMjg2NjAxMC43OTczNjMxMTQ1LDMyMzU2MDIuNzc1NDQ1NDY1NSwyODk2MTkxLjQ5MzQ5NTU2OTYsNjYyMjQyOS42NjAzNzQ2NTM1LDQyMjc4OC4xMjgzNDY3NjgwMyw1MjUyLjUxNjk1NDI2OTgyNwpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Ob25aZXJvTW9ydGFsaXR5UmF0ZV9SS19SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vU18wLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvTm9uWmVyb01vcnRhbGl0eVJhdGVfUktfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL1NfMC5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmMyNDQwMQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvTm9uWmVyb01vcnRhbGl0eVJhdGVfUktfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL1NfMC5jc3YKQEAgLTAsMCArMSBAQAoraXRlcmF0aW9uLHRpbWUsCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L05vblplcm9Nb3J0YWxpdHlSYXRlX1JLX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9TXzEuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Ob25aZXJvTW9ydGFsaXR5UmF0ZV9SS19SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vU18xLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYzI0NDAxCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Ob25aZXJvTW9ydGFsaXR5UmF0ZV9SS19SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vU18xLmNzdgpAQCAtMCwwICsxIEBACitpdGVyYXRpb24sdGltZSwKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvTm9uWmVyb01vcnRhbGl0eVJhdGVfUktfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL1NfMi5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L05vblplcm9Nb3J0YWxpdHlSYXRlX1JLX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9TXzIuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc1YmNkMGEKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L05vblplcm9Nb3J0YWxpdHlSYXRlX1JLX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9TXzIuY3N2CkBAIC0wLDAgKzEsMzMgQEAKK2l0ZXJhdGlvbix0aW1lLEVHLUZSRy1HMjEwMDAxLEVHLUZSRy1HMjEwMDAyLEVHLUZSRy1HMjEwMDAzLEVHLUZSRy1HMjEwMDA0LEVHLUZSRy1HMjEwMDA1LEVHLUxPRS1HMjQwMDAxLEVHLUxPRS1HMjQwMDAyLEVHLUxPRS1HMjQwMDAzLEVHLUxPRS1HMjQwMDA0LEVHLUxPRS1HMjQwMDA1LEVHLUxPRS1HMjQwMDA2LEVHLUxPRS1HMjQwMDA3LEVHLUxPRS1HMjQwMDA4LEVHLUxPRS1HMjQwMDA5LEVHLVVQRS1HMjkwMDAxLEVHLVVQRS1HMjkwMDAyLEVHLVVQRS1HMjkwMDAzLEVHLVVQRS1HMjkwMDA0LEVHLVVQRS1HMjkwMDA1LEVHLVVQRS1HMjkwMDA2LEVHLVVQRS1HMjkwMDA3LEVHLVVQRS1HMjkwMDA4LEVHLVVSRy1HMzAwMDAxLEVHLVVSRy1HMzAwMDAyLEVHLVVSRy1HMzAwMDAzLEVHLVVSRy1HMzAwMDA0CisxLFR1ZSAyNSBKYW4gMTEsMjk3MjM3LjQwMzQ1MzgwMTUsMjY1Mzg5LjYwMzQxODU3MTc2LDE1NDQ3OC4zNTA0MTEyNjcyNSwzMTkzNDcuMzI3NjM2OTEzMTYsMzIxODk4Ljg5ODkxMzc3NDIsNTIwMzYyMS44NzkzMTM4OTUsNTY1NDc3MC41MDU0MTM5MTMsNDYzNDYyNC41MDY1NjkwOSw0MDI1NjM5LjA4NjA2MzcwNSw1MDMzMDYyLjQ4NTEzNDgzOSwxMDIyMDY2Ljk4MDQ1NzUyNSw1OTc0ODE0LjkwNjYwOTI5LDExODI0NTAuMzA5NDgxMDkzNCwzMTM4OTUwLjQzOTA0OTIwMzQsMjgwNTY0OS41NTIyNjIyMzk2LDY0NDA2MTMuMTU4MDg2MDksNDY2NTk3MC42NTU0MDE4NDIsMTMxMjI0My45OTU4MDI1NTQ4LDM4MTkyMjUuNzMzNTUxNzE4MywyNTQzNDk3LjUxMzAyOTk0MiwzNzU3NTQzLjc4OTYxMzI5NCw0MTcyNjU3LjEzNzY2ODY0MjcsMzcxMTk1Ni45OTIwODY5MDQ2LDg0NjEzMjUuNjQ4OTAzMTE3LDUzOTU5My4zNTk0OTExMjQ0LDY3NTYuMTczOTI1NzQyODUzNQorMixXZWQgMjYgSmFuIDExLDI5NzIzOC41OTA2Njg5NzIzNSwyNjUzOTAuNjY0NTgyOTE5LDE1NDQ3OC45NjgwMTUwMDk1NCwzMTkzNDguMzkwMjA5NDA0NywzMjE5MDAuMTg2NDk5NTQxNCw1MjAzNjQyLjU5NzM3NzgyMyw1NjU0NzkzLjEyNDUwNTU5MjUsNDYzNDY0My4wNDMyODMzNzksNDAyNTY1NS4xNDYyODY4NjgsNTAzMzA4Mi41ODQ2MDU5NDMsMTAyMjA3MS4wNjcyNTIzMDMxLDU5NzQ4MzguODA0Mjg5NzQwNSwxMTgyNDU1LjAzOTI5MTc4NjcsMzEzODk2Mi45OTQyMTIwMzk3LDI4MDU2NjAuNzY5OTg4Mjg0NCw2NDQwNjIzLjU0NTI4OTQ4Miw0NjY1OTg5LjAzNDIxMjgyOSwxMzEyMjQ5LjI0NDc4ODgyNzgsMzgxOTI0MS4wMTAxMDI4MjUyLDI1NDM1MDcuNTc1Mzg1NjM4NSwzNzU3NTU4LjgxOTgxODQxNyw0MTcyNjczLjgyODMyNzg0MTYsMzcxMTk3MS44Mzg2OTk4MDgzLDg0NjEzNTkuMzE4NDIzMzM2LDUzOTU5NS40Mjg1MzY5ODI1LDY3NTYuMjAwOTUwNDIwMzg1CiszLFRodSAyNyBKYW4gMTEsMjk3MjM5Ljc2MzU5MzkzMjUsMjY1MzkxLjcxOTQ2MzQ4MDc1LDE1NDQ3OS41Nzk3ODY1ODc0NSwzMTkzNDguMzc2MjAwNTU3NCwzMjE5MDEuNDczODA5NTc2NzcsNTIwMzY2Mi42MTczMTM0NzQsNTY1NDgxNS43NDI4NjI0MDMsNDYzNDY2MS41NDI3NDc2MjA1LDQwMjU2NzAuODg2NDY1MTgzNSw1MDMzMTAyLjQwNDUyMTY0MiwxMDIyMDc1LjEyNjcyOTEwOTMsNTk3NDg2Mi42NjY0MDY5NzcsMTE4MjQ1OS43NjkxMjExMjkzLDMxMzg5NzUuNTM1Nzk3NDc3MiwyODA1NjcxLjkwNjk4NDUxNDYsNjQ0MDU3Ni45ODE2Mjg1NTYsNDY2NjAwNS4xNTg0MzE3OTMsMTMxMjI1NC40OTM3ODQ4NDU2LDM4MTkyNTYuMjc4NTczMDU2NywyNTQzNTE2Ljc3NDc1NTcxOCwzNzU3NTczLjg1MDA3ODY4OSw0MTcyNjkwLjUxODg3NTM3NzMsMzcxMTk4Ni42NjAyODc4MTQ3LDg0NjEzOTEuNTkzOTUxNDkyLDUzOTU5Ni45NDUwNjQ3MDcxLDY3NTYuMjI3OTcxMTYzMjYxCis0LEZyaSAyOCBKYW4gMTEsMjk3MjQwLjgxOTgxMTYwMzksMjY1MzkyLjcxNjAwNzQwOTksMTU0NDgwLjEyOTUwOTE0MTQ0LDMxOTM0Mi4wNTk0ODAwNDk0LDMyMTkwMi43NTc1NDA3ODUyNCw1MjAzNjc3LjQ3Mzk4MzQwMyw1NjU0ODM4LjM1MDQ3ODA3OCw0NjM0Njc5LjYwODM0OTA4Niw0MDI1Njg0LjE2Mjg4NjA3MSw1MDMzMTE5Ljg4Njk2ODgyMSwxMDIyMDc4Ljg5OTI1MDc0NDQsNTk3NDg4Ni4wODcyOTY2OTQsMTE4MjQ2NC40OTg5NjMzNTk3LDMxMzg5ODcuOTE4OTU5MDA0MywyODA1NjgyLjEzODYwOTc5Myw2NDQwMjE2LjYxMTQ2Nzg3NjUsNDY2NjAwMy40MjEwMzkwNzgsMTMxMjI1OS43NDI2MDcwMzUyLDM4MTkyNzEuNDQ4NzY3OTMxNywyNTQzNTE5LjI1MzUzNTU3OSwzNzU3NTg4Ljg4MDMxMjQ3MTcsNDE3MjcwNy4yMDU3NzkyMDI3LDM3MTIwMDEuMTk0OTA5NDg1NSw4NDYxNDEyLjgwMjgwOTAzLDUzOTU5NC43OTczODYwMzY3LDY3NTYuMjU0OTIyMjY4MDkzCis1LFNhdCAyOSBKYW4gMTEsMjk3MjQwLjk5MzU4ODEwNTMsMjY1MzkzLjI0MzM4Njc0MDU2LDE1NDQ4MC4xMzAxMjU2MjQzLDMxOTMwMC42NzExMzMyMjcyNCwzMjE5MDQuMDAzOTY3OTAzMTUsNTIwMzY1Ni44NTk5NDk3NzEsNTY1NDg2MC44NDIxMDA1NDYsNDYzNDY5My41MDczMzk5OTksNDAyNTY3OS43NTQyNzE3OTgzLDUwMzMxMTkuMzI2NjgyMzcsMTAyMjA4MC4xNTA0NzE5Mzk3LDU5NzQ5MDUuMDM3MTQ5Njg5LDExODI0NjkuMjI4NzMzNTYzMywzMTM4OTk4Ljc4MTQ0ODM0NywyODA1NjgzLjc4NTI3NzI5MzUsNjQzODE3Mi43OTk1OTU2OTEsNDY2NTg3MC40OTQ0MDYzMzUsMTMxMjI2NC45ODkxMTMwODEyLDM4MTkyODUuNjQxMjI2MDEwNCwyNTQzNDczLjE1OTcwNDgxMTQsMzc1NzYwMy45MDk1NTIzNCw0MTcyNzIzLjg0MDUzOTM2NiwzNzEyMDEzLjAxMTgwNzY5MDQsODQ2MTM1Mi41NDk1MTEwOTcsNTM5NTY5Ljg4MjEyMzIwODYsNjc1Ni4yODEwNTcxMTMyMzUKKzYsU3VuIDMwIEphbiAxMSwyOTcyMzQuNzcyNjM5MTMwNiwyNjUzOTAuMjYyMTk1MDI1NzUsMTU0NDc1LjczMTUzOTg1MDczLDMxOTA2Ny4xNDkwOTM4MTExNywzMjE5MDQuOTAzNTcwMzU5ODYsNTIwMzQwMS43NzA4MDYzOTksNTY1NDg4Mi4yMjI1NTA2MTc1LDQ2MzQ2NzEuMzc1NDg1OTE3LDQwMjU1NTIuODE2MDA3MTIyLDUwMzI5ODUuNjAzMTU1MTM5LDEwMjIwNjEuMjM2NDkwODcxNCw1OTc0ODgzLjQ1NTA5NDM3LDExODI0NzMuOTU3Mzk5NTExMiwzMTM4OTk2LjUxMjAwNTA2MTQsMjgwNTYxMS40NjEwNDI4NjQ3LDY0MjcwOTcuMTUyMjcwNDAxLDQ2NjQ4MTMuMzA5MjkxMDYxLDEzMTIyNzAuMjEyMDYyMTYxMiwzODE5MjkxLjA5OTc3ODczOCwyNTQzMDg5Ljg3ODEyMjY4NzMsMzc1NzYxOC45MjgwMDkxMTYsNDE3MjczOS44NzE0NjA4NTYsMzcxMjAwMS42MzEzOTQzMTQ2LDg0NjA3MTYuODg2MzQ3ODksNTM5NDA3LjU1MDY2MDUzNTEsNjc1Ni4yOTkyNTcyMjE4MzIKKzcsTW9uIDMxIEphbiAxMSwyOTcxODMuNTMwMDcwODEzODQsMjY1MzYyLjIxODY0Mzc0NjM0LDE1NDQzOC4yMjc4MDM1MjA0NSwzMTc3OTIuNzk3MDIyODU5NzQsMzIxOTAyLjgwNzY5MjIxNTcsNTIwMTYzNS42MjQ4OTcxMDcsNTY1NDg5My43MjE0NjUwMTcsNDYzNDM1Ny44ODEzMDg2ODksNDAyNDU5Ni4xMjAxMTUxOTgsNTAzMTg5OS4wNjE0NTk4NjksMTAyMTg5MC4xNTcyNDU1MTA1LDU5NzQ1MjAuMTI1NjY3OSwxMTgyNDc4LjY3MzgzNjYyMTcsMzEzODg4OC4yNDc2NjAwNjksMjgwNDk0MC45NzMzNzQwNTA2LDYzNjc4MTYuOTM0NDcyMTAzLDQ2NTc0MzIuMDI1ODgzMTk0LDEzMTIyNzUuMjIwMzQzMzc0NCwzODE5MjIzLjc2ODQ1NDI1LDI1NDA0MjkuNTQ5NTMzNjA5LDM3NTc2MzMuODQ1NDM3MDY2LDQxNzI3NDkuNzE0MjM3MDAwMywzNzExODA0Ljk3MzUxNzY0NTYsODQ1NjEyOS41MjYwODY3NTksNTM4NDMwLjk4NTEzOTk0MzcsNjc1Ni4yNDg0MDQzMDk0MDgKKzgsVHVlIDEgRmViIDExLDI5NjgyMi4xMzgzOTA4NjE1LDI2NTE2MC42MjMwNjM3NjY2LDE1NDE2Mi4xOTQ4MDI0OTIyMiwzMTEwMDYuMjg5NTQ2NDEyNiwzMjE4NzYuMTMwOTI1MjAyMyw1MTkwMzE2Ljc4NDc4NjIxOCw1NjU0ODIxLjc1NTExNDExMiw0NjMxNzk0LjQyMjc2NzEwMiw0MDE4MTEyLjQyMjk1NTExMiw1MDI0MTUyLjk1Nzk2MjQxMywxMDIwNjE0LjM4NjE4NTcwOTQsNTk3MTQxNy40NDUyMzU0ODIsMTE4MjQ4My4yNjc1Mjk1ODY4LDMxMzc5NjMuMjAzNDk0MzA1MywyNzk5NjUwLjQxNzMzODU0Miw2MDYwNjcyLjU3NDk5MTczLDQ2MDgwMDAuMjYxNDQwODU4LDEzMTIyNzguNDAwMjQxODk5NSwzODE4NTc4LjQzMDU2ODI2MSwyNTIyNzY0LjkwMjEwNjM5NzMsMzc1NzY0Ny44NzgzMjc5MjU3LDQxNzI3MDEuMTExODUyMTU3LDM3MTAxOTQuNjMwOTYyODI3Nyw4NDI1MDE2LjUzNjE3MTQyNSw1MzI3MTkuNjI1ODcwMDAyMiw2NzU1LjYzNzcwNDc4MzMwNQorOSxXZWQgMiBGZWIgMTEsMjk0Mzc2LjgwMTIzMTg3MzksMjYzODAwLjI2NTUxODU3MTgsMTUyMjM3LjU0MjM2ODc3MDY0LDI3ODAyMC4wODY3MTc5Nzk4NywzMjE2NTUuNTE3MDUwMzA5OCw1MTIwMjU3LjYwOTAwNzUyOSw1NjU0MDcxLjYyNzA1ODkwNiw0NjEyNDg2LjM2OTAxNzAxMSwzOTc1NjI0LjQyMDA4MDQ1NjQsNDk3MTExNi40MDUwNTQzNDUsMTAxMTU5Mi41NDE4NDM2NTkxLDU5NDcyMzMuODgzNDc5MTc5LDExODI0ODYuNzAzOTk3Njg0OSwzMTMwOTY2LjA2NjUwNjIzMywyNzYwMjY3LjU5MTcxMjc0Nyw0NzExOTQ0LjEyNjk5NzcwNSw0Mjk4NTA0LjgyNzM1MDM0OCwxMzEyMjY2LjczODAyNjY3MiwzODEzNTIxLjUxOTY4NjI1LDI0MTEyODUuMzQyMDg2MDkzLDM3NTc2NTQuNTA5MDAwMTkyNCw0MTcyMTMyLjM5MTE0MTI5MjYsMzY5ODE4MS4zNzAzNDc4OTY2LDgyMjIyODYuODEwMDE5NTI4NSw1MDExMjQuMDgxMjIwMDE2MSw2NzUwLjcwOTQxMjYwNzkxNgorMTAsVGh1IDMgRmViIDExLDI3ODgzMy4yNjY0NTkwNTE4NywyNTU1MjkuNjcyMDAxOTI0ODMsMTM5OTc2LjkxMDU0MjUzMjA0LDE2ODg1NC4wMjk5NjExNzI1MiwzMTk5NjMuODU1NjIzOTM0NSw0NzIwNzkyLjU3MjEwNzI2ODUsNTY0Nzk5Ni4zMTMzNjYyNDIsNDQ3NDkxMC40NDAzNTI2NTQsMzcxNTMxMi45OTM2MTQ2NjEsNDYzMzEwNS40NzYyODU3MjIsOTUyMjYxLjIwMjc4NTU3NTgsNTc2OTY1OS45NzM0NDUxNzgsMTE4MjQ3OS43Mzk2MzQ3MDQ4LDMwODA2NzYuMjQ1NDM4NjMyLDI0OTYyOTcuODMyMjkyOTkyNiwxNjQ3OTYzLjg5MTExNjU2NDYsMjg1Mzg3OC4zNDM3NTM4NTg1LDEzMTIxMzkuNDU2MDQxMDg5MywzNzc2NTM1LjgxODM1NTU2MTIsMTgzNzI2Ni41MTg5MjQyMjIsMzc1NzYwMS40NzMzNTM1MDMsNDE2NzE1NC43MjAwNzQ2NTcsMzYxMzE0MC4yNzM3NTI4MDgsNzA1NzAzMy4yNjgzNTg4MDksMzYzNzE1Ljk2MTY2MDMwMDYsNjcxNC4wMDA0MjIzMjUwNQorMTEsRnJpIDQgRmViIDExLDIwMTY3OC42NzAwOTk2MjE2NywyMTk4NTQuNDAxODUyMjExODYsODU3NDQuNzg2NTUxODc4NjcsMzcyMTguOTk5NjY0ODc0NDYsMzA3OTEyLjA1NTExOTEyMjcsMzA1NzYxMS4zNTU1NTA3NTEsNTYwMTkyNS4wMDY5OTk1NDg1LDM2NDcwMTIuODA3ODI0NDA4NiwyNTA5NzY1LjgyMzg1ODQzNywzMDQ0MzgwLjEwNTM3MjIxMDUsNjU5Mjg3LjM5NTI1MzU0NzQsNDY3Nzg3Ni44MDQ0MDE3NTM1LDExODIzODIuNDkyNjU1MzYyMiwyNzU2MzQyLjcyMzU5NTQ2MywxMzY0MDYxLjc4NTc2MjMzMywxMDU2NTMuNDgxODAxOTc4MjQsNTIxMDc5LjY2NzM1NjAzNzksMTMxMTE1NS40MzA3MzQwMDcsMzUzNjU2OS4yODY0Mzk2NzgsNTIyNDMxLjE1MzE2OTEyMywzNzU3MDg3LjA4NDk0NTczMyw0MTI2NjI5Ljg0MjgyMDIyOSwzMDg4NzI5LjUwMTA3MDc5MTQsMzE2MTg3OC42ODkxNTg1MTQ2LDk5OTIxLjkwMTEyMDI3MTA4LDY0NjIuNzgxMDk0NTE3MzQKKzEyLFNhdCA1IEZlYiAxMSw0ODIzNC43MTcwMDIxNDU1NzUsMTM5MDI2LjMxMTk5NzgxOTI4LDEyNzA1LjAyNDkyNDMzNDg4NCwxOTY5LjY5MTQzMDY2ODY2LDI0MDAyMi4wMTM4OTY4MDE2Myw1NjM2ODMuOTc5NDAxODM3LDUyODg5OTcuMTA4NzExMTE2LDEyNTAyODguNjE4NDExMDAyNCw0ODM1NzIuOTgwMjUyNTMyMDYsNTMwNTY0LjgxMTE0NzA3NjgsMTM3NDE2LjAxMDgxOTg3MDIyLDE1NTEzNjEuODY2NjQ5NDU3MywxMTgxNTMyLjgyMDgzODE1NTcsMTQ0NzUyNi4zMTI4NTczMzEyLDE0NDgzNy45ODQyNzExNjI4LDE1MjQuNzQ1NDk4OTM4MTg1NiwxMjI1OS40Mjg2NzA5MDc1MjgsMTMwNDI4OS4zMjMzMTE0NTUzLDI0MTQwNjAuNTMzMTc4Nzk3LDE5ODAwLjM0OTQ0NTQwNTQ4LDM3NTMyMTAuMDI4NjEwNDk1NCwzODMyMDE1LjE4NjkxNzMzNzYsMTMxMDgzNS41MzgwMTA4OTA4LDIzNjk5Ny4yNDAzMjgzMDUwNSw0MTEzLjYxNjMxMjQwMDA2Myw1MTcwLjk1MjQ1MzY4NzY2MjUKKzEzLFN1biA2IEZlYiAxMSwxNTIwLjQ5NzYxNDY3MzQ1NTUsNDU0OTQuNzA0NjA4MDgwNzIsMjUwLjI4NzQ4NjU0Njg5NDEyLDM5LjcwNzQ1ODc2ODI5MDk5LDcxNTQzLjk3NzQxODU0OTU4LDEzNzg4LjQwMTM3MjA4NTE2NSwzNzI1NzczLjA2MzgzODQ2LDU3OTU5Ljk0ODc0MjU0NTE2LDExNjQ1LjEyOTQwNzA3ODY3MiwxMTUxMi43NTYyMjU3NjE2MjgsMzY3MS4yMjg1NjI4OTI5OTc2LDY4MTcyLjUwNzAyNTYyNTc1LDExNzQ4MDMuMTMyMTE2MzY5NCwxNDM0MTEuMjAxMDM3NzIyMiwyMDg4LjI1OTQzNjE1Mzc0OSwzMTcuNDYxMDI0NzYzMDI5OTcsMjQ5LjgxNjE2NjM1MDA0MDYsMTI2MDA4OS4zNDU3ODMyNTc2LDQ4NzA1Ny45NzgyMjgxMjUyNiwyMzQuMDkzMTg4Mzk0MDg4LDM3MjYwNzcuMDExMzk5OTE1NCwyMzk1NTc3Ljk0Nzg3ODE4MDUsODU5MTcuMjY4MTIzNTM3NDYsMjg3MS44NjY3MjQyMjE5MDcsNTIuNzY3ODk0MzYzMzkyMzIsMjAxOC4wMjAxNDA2NjkyNTI3CisxNCxNb24gNyBGZWIgMTEsMjEuNDEyMzQxMjc0Nzk3MSw0OTg1Ljg2NjUxNzg4Mzk3LDcuMzg4MTE1MzcxNjQxODc2LDE4LjA4MjM5NjQ5NTA0MjQzLDI3ODIuOTI5OTE1NDIxODk4NCwyODIuNDA5ODMyMjgwMTI0Miw3OTYxNTUuMzE2NDcxMDg5OCw2MjEuMDAzNTMyODUzMzE0MSwyMTcuNjc5MjcxNzM0NjEyMiwyNTIuOTQ5MTA2MDkyMDUwNTMsNjAuMTIyODc1MDIyMzI5MDI2LDczMS4xNDU1Mzc1ODE4MDgzLDExMjc2NDQuMTc0Mjk2NDEzOCwxOTg5LjM4NTg0NTcxMTU3NiwxMjIuMDU3NzE4MzY1MzM0NjUsNDA5LjY0ODY0OTkwOTA4OTQsMjQxLjk1NTUzODYyOTQ5NDk1LDEwMTg2NTIuMTM5OTQ0ODczMywxMjYwNS43MjI3MDk3NDk2NDMsMTIyLjMyOTgxNjExODQ1MDA4LDM1NTA0MTkuNDAxMzUyMzIwMywzNTQyNTUuNjQ5MjAwMDQzOSw5NzEuNjM5NDY4MjM4OTg4MSwzNzYuMjY2MjY5OTI0MTgyNSwyNi44ODk1MzcwMTE0NzUzMTIsMTUzLjA2NTY5MzI3NzQwNjA3CisxNSxUdWUgOCBGZWIgMTEsMTQuODYwODM5NDEwNzEzMjU4LDIwMy43MTc1NjgzMDg5ODk1NCw4LjI1MjMwOTQzNDI3NDg0NiwyMi43ODczMTUwNjQzMjg3MiwzMS40Mzc2NTk4ODU2NTkyNCwyNzIuODg1ODIxMjEyMzA4NiwyMDk4OC4wNzg3OTA2OTQ4LDIxMi41NDQ4NTk1NDgzMjIyOCwyMDYuNDAyNzM1OTU5ODkyNjIsMjYwLjg3MzI2MjY5MDU1MDcsNTEuNjk5NDU4NDE2MTQwNSwyNzQuOTAxNzM0MTQ0NzYyNTQsODcyODU3LjQxNzk1ODE1MTcsMTM2Ljg4NzQ1ODM0MjYzMzg2LDE1NC45ODg3MzIyOTU1MzgwMyw1MzMuNTcxOTY0NjEyODYxNywzMjMuNjgzMjY1MTM2MzQ4MiwzNTI3NTUuNzEwNjA0MTkwMzYsMjE4LjYzMjkyNTc2NTM0ODM1LDE2NC4zNTg3MTgwMjU3MDU0LDI2NDcwMzYuNjE2NTQwNTMzLDY1NzAuNjM0Njk1NDk3Njc4LDE2NC41Mzk5NzgwNTE4NDM4Niw0OTYuODkxMzMzMzMyNzk4MywzNS42Njc1OTQzMTk3NDc2NjQsMi4xMjI1MTkwMzcyMDY3Njk3CisxNixXZWQgOSBGZWIgMTEsMTkuODkzMzAxNzcyMjI4NTU4LDIxLjM0OTQ0NjUxODY1NzY4LDExLjAzMDcyOTMwMjIwMjIyOSwyOC45Njc0NDMyMzU0NjkxNiwxNS4yMTI1Nzk2ODY1ODIzOSwzNjMuOTkzNjUwNTEzODU1MiwzMzIuMTY2MzI1ODkxNDk5MzUsMjg2LjgyNjEwMzIyMzYwNjksMjc3LjA1MzM5ODQ5NTM3MTcsMzUwLjM4MDc1OTI5Mjc5NjE0LDY5LjQxMDkzNDIyNDI0ODU0LDM3MS41MzMzMTU1NDMxMDkzLDI1NTk1Ny43NzA0MTAwMzE4LDE3NS43ODcyMjczMjg1ODg5NSwyMDcuNzMwMTc1NDMxMTMzNCw2ODcuMDgxNDk2MDI0MDU0Miw0MjUuMTYxNDYxMTk1OTU1MTYsMTY5NjMuMjU0OTYwMjAzMTg3LDE5NC44NTY0NDI3NDI5MzQwNCwyMTcuMTc1MDQ1MzYxNjY2NTgsNjgxMTE3LjcyOTcxMTQ5ODgsMTkyLjcxNjMwNjg2NDIwNDYzLDIxOS43OTIwMzY3ODI0Mzc3Miw2NjEuMjEwNzM2NzM2NDI3Nyw0Ni43NTU0Nzk5NTg1MTEzMywwLjMyMTI1NzMyOTM3NjUwMTIKKzE3LFRodSAxMCBGZWIgMTEsMjYuMTI3MTcyMzMxNTI1Nzg0LDIwLjQ1MjYwMDMyODg2MTcyLDE0LjQ3MTA4NDE5Mzk0NDQxMiwzNi42NzMwNjYwOTc1NTIzMiwyMC41MTcxODQ4MDY2ODcxNDQsNDc3LjE5NDE4NTQxNDA4NzgsMjgzLjQ5NTY0NzU3NTAyOTcsMzgxLjIyNzE3NTM5ODkxNDgsMzY0Ljc0NTE5NTc0MDM0MzYsNDYxLjI4NzQ1MTM2Nzg1NDYsOTEuNDMxNzY5NDY0OTIyMDYsNDkzLjg4Mjg4MjUzNzUyOTU1LDk3NTguOTM3NTI4MjM5MTk2LDIzNS4xNjM2MDc1ODgzNzMwOCwyNzIuODE1MzQ0NzA3NTE3ODUsODc2LjQ4OTY4MTM3Njg0NjgsNTUwLjE2NTM5MDAxMjY4MDcsMTg0LjIzODUwNTAyMzQxMDQ1LDI2MS4yNDY3NjI3MDA4NDY3LDI4Mi4yNTE0ODk3OTM5MzI2NSwyMjA3Ny4wMzgxOTk1MTc1MjcsMjE5Ljc4MTM3MTE2MjAwNjc2LDI5Mi45MTQ4NzM5Njc1MjMyNSw4NjMuODk0NDk3NDEzMTEwNiw2MC40MzkyOTMxNDQ5MDgzLDAuNDE1OTUxNjQ5Mzk4NjQ1MDQKKzE4LEZyaSAxMSBGZWIgMTEsMzMuNzk1MTU0Nzc5MjkyNTIsMjMuODY5ODI4Mjk0ODg4NDE4LDE4LjcwODAzMDUzODk0MzczNSw0Ni4yMTQwMzI5MTI1MzY0OSwyNy4xODg1MTkyODk1OTcwNDMsNjE2LjY5Mzc1OTUxNjA0NjYsMzgxLjYxOTYyOTkyMzc5NTUsNDk3LjUwMzk3MDc0MzQyMTYzLDQ3Mi43NDIxMTE2MDQ5Mjc0Niw1OTcuODQyODY4ODcwNDkyMSwxMTguNTUzMzI1NjEzMTgyNCw2NDQuNTU4NzE0NTI0MTQ2MSwxMTEuNTk3NzgyMDU4MDcwNCwzMDguNDMzOTg4ODU0Njk2MywzNTIuOTE0ODYyNzU4NDc2NywxMTA5Ljg5ODk5MTgzMjY5MTUsNzA0LjA1NDk3NTQzMDQ0NzYsNjAuNjM1NTM0MDIwNzYyNDUsMzQzLjc2NDIzMDE3MjM3MTgsMzYyLjM2MTc4NzI1ODY2NTEsMjc5Ljk1OTM3Nzk3NTg3OTUzLDI5NS41MjcyOTkwOTU0Mzg3NiwzODMuMDQyNjk5MDkyMTUyOSwxMTEzLjQxMDIxOTAxNjczMTYsNzcuMjk4NDgzNTkzNzAzMTgsMC41NDU3MTE3MDk0NjYyMDc3CisxOSxTYXQgMTIgRmViIDExLDQzLjI0MDIxNDc2NTIzMjEzLDI4LjcwNTgyMjU0MzY2Mjk3NSwyMy45MjQyODQ3Nzg4MjMyMDMsNTcuOTYyMTg5NzE3NDY0NDgsMzUuNDA5MzM1NDU1NTUxNjg0LDc4OC4zOTcwMzQ1NzQwNjk1LDUwMy42MzM2MTUzMTE0NTA3NCw2NDAuNjA1MTgxNzU2MDA0Myw2MDUuNjIxNzYzOTIzMjc4MSw3NjUuODk1NDg3NDE3ODUxNywxNTEuOTA1MTM4MTAwMjQ3MSw4MjkuOTY3NDM0MDYxMjkyOCw1Ni4xODI0NTI4ODU3NDQ5OSwzOTguNjQ2OTI3OTA5MTQsNDUxLjQ5MTA0MDcwMTQyOTAzLDEzOTYuODk1MDEyNjQxOTM3Miw4OTMuNDE4NzQ4MjkyMTY5MSw4MS41Mzk4NDIxMjQ5NDEyLDQ0NS40MzgxNDQyNjA1NDY0NCw0NjAuOTQxMjc0Mjc0MDUyNTUsMTgyLjg4MTk3NjEwNjM2MjYsMzg5LjIxNjIxMTM2NjA3NTQ3LDQ5My45OTY0MzgzNTU5NzcxLDE0MjAuNTM2NTgxMDIwMzM4Miw5OC4wMjMzMDM2NzU3Mzk3NCwwLjcwNjA2NjI0OTYyOTY4NTkKKzIwLFN1biAxMyBGZWIgMTEsNTQuODYyNDA4NTI2NzI4MTksMzQuOTU1MzQ5MTYwNDEzNzA0LDMwLjMzOTkyODczNjgzNzY0Niw3Mi40MjM0OTMzMjMyMTEzMyw0NS41MjUzMjUxOTM5MTYxMyw5OTkuNjMwODYyMjI3MjQ0NSw2NTMuODQ5Njg1MzI5MDcxOSw4MTYuNjQxMDI5MzMxMDgxMSw3NjkuMDYwOTcwODE2MDcxNyw5NzIuNTgwMDI5OTcyMDMwNCwxOTIuOTI2OTk4NjczMzU2NywxMDU4LjAzNTEwMzE5NzI3MjUsNzUuNzMwNjgwNDkyNzYxMzgsNTA5LjY0NTQ1MjA2MTU5NDQsNTcyLjY4NDEwMTkxMDQ5MzIsMTc0OC45NDk5ODQ4NzIwMDMxLDExMjUuOTU2ODMwODY0MjMyLDEwOC4xNzcxMTk3MDQ5NjY0Niw1NzAuNTc1Nzg3NDE4MDE0OCw1ODIuMDUzODY2Mzg0MzQ2MiwyNDYuMzk4MDUwOTQwNzgwNDgsNTA0LjUwNzAxNDgwNjI2ODgsNjMwLjUwMzk0NzAzOTkzMywxNzk4LjA4NjMwMzc0MjUzMTUsMTIzLjQ4OTIzNDU2MDc3ODI0LDAuOTAzNjcxNDE4Mjk1MDA5CisyMSxNb24gMTQgRmViIDExLDY5LjE0MDU2MjU2NjE4NjAyLDQyLjgyOTIxNDcxNjQ3NTM4NCwzOC4yMTU5MjI4NjQ5OTU2MDUsOTAuMTkzMTQwOTkzNzM0NzksNTcuOTY4ODg1NTk1NzExNDcsMTI1OS4wOTkwOTI3MzY3MTUsODM4LjY4OTY1MTM4NjYxMjQsMTAzMi45Mzg4NTkzNTIwNTk2LDk2OS43OTU2ODYxNDY2NjgxLDEyMjYuMzU2MzUzODQ2Njc0LDI0My4zMjY0NzUyNTExMjY2NSwxMzM4LjI1NDE0NDY0NzQ3NSwxMDAuMjkwOTQzMzEyMzAzMyw2NDYuMTAyMTAyNDE0NjAzNyw3MjEuMzcwOTk5MTExNTU5NCwyMTc5LjI2NjAzMjE2NDg2NDYsMTQxMC41ODU0NDM4NzM1NDQxLDE0MC45OTQ0MDIyODUyMTg2Myw3MjQuNTA4MDgwOTU2MzgxLDczMC40MzA3ODA2NDAyMzY4LDMyNS43Mjc1MzY4NzE5NTM1LDY0Ni4zNTA3MzU1MTE0NjI3LDc5OC4yNzE2MzU3NTUzMDE4LDIyNjEuMDk4ODIwMjU1MzEwMywxNTQuNzE3Nzc4NTQyODcyLDEuMTQ3MDk5NDE5MjEzMDgxNworMjIsVHVlIDE1IEZlYiAxMSw4Ni42MzExOTA1OTE5MDc1NSw1Mi42MzU0Njg3NTA4MDgxNiw0Ny44NTI2MjgwODM2MDkzMywxMTEuOTA0MjA1OTU5MTc3MjUsNzMuMjU3MjY1NDM5ODk1MjgsMTU3Ni43MjkxNTc4NzM0MDA1LDEwNjYuMDY1NDk5NjU3MTc1MiwxMjk4LjAwODUyMjgyMzg4MzgsMTIxNS41MDkxNDMwODA4OTM5LDE1MzYuOTI1MTc0MTIyOTE3MywzMDUuMDMxMTM4NTAxOTcwNjQsMTY4MS42MjQ1NjI0MjI4OTI1LDEzMC41NDA3MjA4ODE0OTA0Miw4MTMuNTE1OTQ1NzI2Njk5NCw5MDMuMTQwMDM1Mjk2NTUyMiwyNzAyLjE5MzU5MDQzMjc4MSwxNzU3LjM2MDQxMTc2MTI5OTcsMTgxLjM4NTM2MDAzNzA4OTU4LDkxMy41NjI4NTczMzMwODE0LDkxMS40MTgyNzQwMTYwMDY5LDQyMy40MjM3MTIyNTUzNDU4LDgyMC43ODU2NzU2OTY0MTk2LDEwMDMuOTc5NDA5NjEwNTY0NiwyODI2Ljc0ODY0MTI0NjQxMjMsMTkyLjgxOTI5NDMzMzIzNTgzLDEuNDQ2NTI1MDY2MTczMDY2MgorMjMsV2VkIDE2IEZlYiAxMSwxMDcuOTYwODI0NzUwNjQzODIsNjQuNzUzMDM3MDE0ODc5Miw1OS41ODU3ODI4MTU2NjM4MiwxMzguMjU5MTc0NjQ4NzYxNDIsOTEuOTg4OTAxMjgwNjE0ODcsMTk2My42NDYzNzg0ODAwNjQ0LDEzNDUuMzMxMjE0OTA3NjYzNywxNjIxLjQ2ODczNjI5MjE1MTYsMTUxNC44MTM0MDI2Njg2MzEsMTkxNS4xNDY3NTg0NzIzNzQ4LDM4MC4yMDM3MzcyNDAxODg4NCwyMTAwLjU3MTQ2NDA5NzQxNSwxNjcuNzc0Mjc5MDg1NzQ5OCwxMDE4LjE1ODI3NjU3ODI1MTcsMTEyNC4yMDg4NDMyNjMyMjcyLDMzMzMuMjA0ODg1NTYyNjg4LDIxNzcuMjUxNTQ3OTQ4NTU0NiwyMzEuMDg5Mzk4NjYyOTkwODIsMTE0NS4wMTg1NDg3NTEwOTgsMTEzMC44ODc5NTg4NjUwOTg5LDU0My42Nzc3NTIxNzM5MzksMTAzNC45MDc1NjQ4MzA0Njc0LDEyNTUuMjA5MDYwMDQ4NjI1OCwzNTE0LjA2MDcwMjM1NzQ2ODUsMjM5LjAxNzQ1NTk0MDk3NDMyLDEuODEzNzI1NjcwNzk2MDM5OQorMjQsVGh1IDE3IEZlYiAxMSwxMzMuODE4MzA2NDI0OTQ5MzgsNzkuNjYxMjE0NTk4NDQzNzYsNzMuNzgxNzc3OTEwMTQwMzksMTcwLjA0MzgxMDkzNDA4NjkzLDExNC44MzgyMjY3NjUyNTU2MywyNDMyLjEyNTA1MjQ1NzY5MSwxNjg3LjIyODMzODkwMzc2MSwyMDEzLjk1NjIyMTc3NjMzOTYsMTg3Ny4yMDcxMDcwNTUwMiwyMzcyLjkyNzc1ODU5ODMzOCw0NzEuMjUyNDI1MTMwMzA1MzcsMjYwOC44NDEwODk4NzIyMTI3LDIxMy41ODEyMDEwMjc4MzA5MywxMjY3LjAwNDQyMjMxNDQ1MzcsMTM5MS4zMjA5ODQ3MzIzODM1LDQwODguNjExMjU1NDAzNzYsMjY4MS44ODYzMzM5NjE0MDk1LDI5Mi4xNjkwMTQ2MDM5MTI0NCwxNDI3LjA1ODQxNzM0MzAzNjgsMTM5NS4xMjA2OTI0NDM1NjA1LDY5MS42MTUyNDEzNjQzODI1LDEyOTYuODQzOTA3MzIzNTgxNiwxNTYwLjM1NTgxMDk0NzQ3ODYsNDM0My41NjYxMjg1NDkzMDQsMjk0LjY1MDA3NjE4MzMyOTc2LDIuMjYyNDI1MDkyNjIwMTc0NQorMjUsRnJpIDE4IEZlYiAxMSwxNjQuOTM3MzQ5NjQ3MjQ2LDk3Ljg3NjYwNzk2NDQ2MDIyLDkwLjgyNjU5ODk3OTgwNzgzLDIwOC4wNDA5NTI5NjQ5Mjc1OCwxNDIuNTQ5NzI5MzQzMjEzMjcsMjk5NS4wMzcwNzg3NTI1Nzk0LDIxMDMuODg2MjEzODk2OTY1MywyNDg2LjgzMTczMTExNjYsMjMxMi42NTU3MzQzODI0MjUsMjkyMi43OTU4NjE5MzI3MjM3LDU4MC42ODcxOTcwODc1ODQzLDMyMjEuMDg2OTIzODY0MzE2MywyNjkuODYzNTU4MTA0NjczMSwxNTY3LjYxNDY1NDU3NTg0LDE3MTEuNTM4MTM2NDgwODI3Miw0OTg0LjU0MzgzMTQwMjI3OTUsMzI4My4xMjkxNzIzMjc1OTY3LDM2Ny4wMzIwMTk0MDc5NDksMTc2OC42MzczODkzNTkwMTEyLDE3MTAuNTY5NjM1NzM2MzkwMiw4NzMuMzU1NjQwMjI1ODcxOCwxNjE1LjcwODUzODAwMTczNDMsMTkyOC40NTk3MTk2NTU1ODE1LDUzMzYuNjQyMzUyNjQxNDU5LDM2MS4wNjM0MjkzNTg4NzYsMi44MDc1MjI2NTMwNTcyOTIKKzI2LFNhdCAxOSBGZWIgMTEsMjAyLjA3MzAxMjkwOTk4NDEsMTE5Ljk5MzIxMDAyOTQ3NDMsMTExLjExMzE0MDI2NTAwNTA3LDI1My4wNTI0MDE4NjM5OTYzOCwxNzUuOTE3MzI1MTk2NzcwMjYsMzY2NS42MDU1MTgyMTg1MzQ2LDI2MDguNTU5NjI2NDgzMTY0NywzMDUxLjg2MzM1MjgyNDMzMTMsMjgzMS4zOTU1MTAzMDA3MTk3LDM1NzcuNTU1NzgzNzA5Nzg4LDcxMS4xMDQ3OTQzOTk2NDA2LDM5NTIuNDg0ODEyNTk5MzQ5LDMzOC44MTcxNDA5ODE5OTIxNywxOTI3LjkwMjY5NjcxMTE2NywyMDkxLjk5MDcyMzgwMzM2Miw2MDM2LjUzNjYzNTU3MDY1NywzOTkyLjU4NzIxNTkwNDQ2NTcsNDU4LjM5OTk1MTMwMjQ4NjQ0LDIxNzkuMjU1NzUyMDE0Mzc4NywyMDgzLjYyMTIzMDk3MjY2NiwxMDk1Ljk1MDEzNzkxODkxNTUsMjAwMS40MTcxNjk1ODU2NjcsMjM2OC45MjIyMDgwNjkzNDIsNjUxNC43MjY4MzQzNjEzNDgsNDM5LjYxMDM2ODM3NDk2MzU3LDMuNDY1MzEwMTc2NDM5NDYyCisyNyxTdW4gMjAgRmViIDExLDI0NS45Njk2MDQxOTYxMDgxOCwxNDYuNjQzMjYxMzA2MTM2NzQsMTM1LjAyMzI5MTg4NTUyNzc1LDMwNS44MzI3MDQ0MDc2MjA0LDIxNS43NTk3NjY2MjU0NDM3LDQ0NTYuNzI1MDY1NDI2Njc5LDMyMTUuMzIyODgyNjEzMjU1NCwzNzIwLjcyMzY2NDAwNjYwNTMsMzQ0My40MTExOTk1MzM4MzI2LDQzNDkuNjc4ODQzMjY1MzkzLDg2NS4wNDAwOTA0Nzk3ODM4LDQ4MTguMDY3ODUzOTk3NjE0LDQyMi45MjU5Mjg5MjA2ODQwNCwyMzU1Ljg0MzEwNDg0MTk3NzUsMjUzOS41NDY4NDkzMjUyNTgzLDcyNTguNTI4MjQ5NzQyNzk0LDQ4MjEuMDIxNzcxNTkzMDAyLDU2OS4yNzk1MzE0NDQ1OTE4LDI2NjguNjI3NDYxMjMxNTQ1NiwyNTIwLjI3MDE4OTczNzI2NSwxMzY3LjM1OTcwMTg3MjQ4MzEsMjQ2NC40Mjc1MjI5MTg1OTQsMjg5MS4xMzkyMzIzOTc3NDQ4LDc4OTguMjk3NzUwODY1ODE1LDUzMS41NTYyODI1Nzc1ODE4LDQuMjUyNzExMTg5OTI0Mjc3CisyOCxNb24gMjEgRmViIDExLDI5Ny4zMjM1MTA1OTc0MDI1LDE3OC40NjMyNTc5NDQ0MjAwNiwxNjIuOTA4MTc0ODA5ODMxNDIsMzY3LjA0MDU4Mjg3MjA3NzA0LDI2Mi44ODY3MjE0Njk5MzYxNiw1MzgwLjI3MzY5NTM4MTg0ODUsMzkzOC41ODMxMDc4NDA2OTQ1LDQ1MDQuNDE0NDI5OTU5NzIzLDQxNTcuOTA1MzM5NTg1NTksNTI1MC42NTIwNjE1NjYwNDY1LDEwNDQuODI2NDg4NTI4ODMyLDU4MzEuOTc4NzgwODU1MDY2LDUyNC45MjY0MjExODgwOTUyLDI4NTkuMTA0MzY3MjQ1NTIxLDMwNjAuNDUyMTg2MDA2Mjk1LDg2NjIuMDI1OTA2MTU4MTMsNTc3Ny43NTE1MzQwMDc2MTUsNzAyLjg5NDQxNjEwMDA0OTksMzI0Ni4yNTM1NDkzMTEyMiwzMDI1Ljc4OTYwNTU5ODg3MTcsMTY5Ni4zMzUyNjMzNjAyNzMzLDMwMTUuMzU0OTAzMzQ1NCwzNTA0LjA1NTQ3ODM2NDAxMjcsOTUwNS43ODI4NDc4MjU5NzgsNjM4LjAwMjUxMTI1MjYxNTksNS4xODY0ODM4NTQyNzg3OTIKKzI5LFR1ZSAyMiBGZWIgMTEsMzU2Ljc1MDAyODczODE4OTcsMjE2LjE1NjI4NDczNzExMzgyLDE5NS4wNzE2NjUzMDQ2NjMxOCw0MzcuMjY5Nzk2ODc4MjcwMDMsMzE4LjA1ODczNDAwNzM1ODk2LDY0NDYuNzc3NjMwOTI3MDQ3NSw0NzkyLjQzNTg3NjM1MDAzOCw1NDEyLjc4NTE0Njc5Mjk5Myw0OTgzLjAyOTA1MzY2NjQ1Myw2MjkwLjUxOTUyODkwMjgwNCwxMjUyLjU3MjAwMzA2NDU2NzMsNzAwNi44ODUyNzc3NjU4MDMsNjQ3LjczMDQ2MDYxMjY4NjEsMzQ0NC42NjUxNjI0MzcwNjY2LDM2NjAuMDIyOTc4Mzk5ODgxNiwxMDI1NS44NzY1MDUzNTA3MDEsNjg3MC4xNzU3NTYyNDk5OTcsODYyLjU3MTcwNDY4NzE0NjMsMzkyMC45OTg5MTQwMDc2MjcsMzYwNC40ODQxMDM1MTQ5MTksMjA5Mi4xNjM3OTM2NDIzNzQ1LDM2NjQuNTI0NzUyNjYzMjkxNiw0MjE1LjcxOTA3NTAxMTMyMSwxMTM1Mi42NDUwNzgyMjQyMjgsNzU5Ljg5MjkxODMzMDI5OTYsNi4yODMzNzYzMDQ0MDE5NzQKKzMwLFdlZCAyMyBGZWIgMTEsNDI0LjczOTA4MjMyMjI1NTMsMjYwLjI2MzgwMjI2ODYyMjMsMjMxLjc0NzE0NDM3MDU5OTgsNTE2Ljg3Mjk3MzA2MzQ2MTcsMzgxLjk0ODEyNDE2MDYyMTUsNzY2NC4xNDg2MzM3ODQyNDcsNTc5MC4wMjUwMDczMzI0OTIsNjQ1My43NTU0MjIwODE5MzMsNTkyNC45MjY1NDE3MjM4MTgsNzQ3Ni45NTIzNzI5ODQ2NTcsMTQ4OS44MjE5Mjc2NzkwMDkxLDgzNTIuOTA0NTM3MTE2NjYsNzk0LjM1NTEzMDI0OTExMzEsNDExOC4zOTkyNDU0OTYwNzksNDM0Mi4yNjIwMTU0ODkyMTUsMTIwNDQuOTIxNTIyNDEyMTIsODEwMy4yNTg4NzEwMjgyNDQsMTA1MS42MjkxMjc2MjM2MDg0LDQ3MDAuNTAyNDYyNjkyMTQ4LDQyNTkuMzQyODI3NTQ4MTk1LDI1NjQuNDQwMTIxNjMxNjA0LDQ0MjEuNDAxNjI3NzcxNjYyLDUwMzIuNzc2NjAwNDA0NDIxLDEzNDUwLjI2NDU0NDY5ODc2LDg5Ny44MTcxNTc0Nzk0OTgxLDcuNTU3MjIxMjE0MDE2ODgxCiszMSxUaHUgMjQgRmViIDExLDUwMS42NDQ1Njc4NjcwOTE2LDMxMS40NjM1OTY3NTcyNTMyLDI3My4wOTUxOTA0MzI3MjkyLDYwNi4xODI2MjQ1MjY1ODc4LDQ1NS4wOTkxNTUxMjk0NzY0LDkwMzguMzc1Mzg5OTQ1MDM1LDY5NDIuNzQ5OTAzNTg2NDA4LDc2MzMuMjU2NDMwODUyMjc3LDY5ODguMjMzMTg0MzI2ODY0LDg4MTUuNDQ0MzcxMDQzMDg2LDE3NTcuODQxMDM4MTM3ODg3NCw5ODc3LjY1ODEyNjc0MjI3Miw5NjcuNzYxNDUzMTA3MjMxOSw0ODg0Ljc5NzAxMzA1NzUzMyw1MTA5Ljc4OTkyMTIwMzkxOSwxNDAzMS4yOTYyOTAyMDc3ODMsOTQ3OS40ODY1NDUxNjQwOTgsMTI3My4xODYwMzk2NjcxNiw1NTkwLjkzNDQ5Njc0MDA1NzUsNDk5Mi4wNzQ3Njg4MDE5MDgsMzEyMi41NDQxOTA3NDcyMjQsNTI5NC4xNjM4MTc5MDkyMDUsNTk2MC4xOTg2MTMxNjkxMTcsMTU4MDUuNzY5MDg4MTU5MjMzLDEwNTIuMjIzMjY4NjMyOTE5MSw5LjAyMTU4NTQzOTI3MDg2OQorMzIsRnJpIDI1IEZlYiAxMSw1ODcuNjM4MjgzMDIyNjUxOCwzNzAuMDAzMzQ5ODQzMTQ2MDUsMzE5LjE3ODU0MjA3NDg3MDIsNzA1LjA5ODgyNDEzMDc3NzYsNTM3Ljg5OTUwNDA5OTY3NzUsMTA1NzEuMzU3MTk4NjA1Mzg4LDgyNTkuNzE2OTE0NDAyMjc3LDg5NTQuMjgwOTM3MDA4NzM2LDgxNzQuNDU5Nzk3MzkzOTk3LDEwMzA4LjAyMjc0OTg3NjQ2MiwyMDU2Ljk0MTE1MzQwMTAwNiwxMTU4NC44NDQ1OTgyMDMxMzIsMTE3MC43NTcyMzU5MzQxMzI1LDU3NDYuNjI3NDI2OTQ2OTcxLDU5NjMuNDg2NTk5NDg3MTk0LDE2MjExLjk3MDkzNTc4ODQ2LDEwOTk4LjQ5MzA4OTIxMDQxLDE1MzAuMDM1OTg0MTA4MDYxNyw2NTk2LjMyOTAxMzc1MjE4Nyw1ODAyLjc0NjUyMzkyNjMyNCwzNzc1LjMzNjE5MDg1NjU5MTcsNjI4OS4wNjU3MjM1MDkwNDYsNzAwMC44NDUyNTk4NTA3NzQsMTg0MjEuMDI2ODU2NzM2ODgsMTIyMi45OTc3MTE4MTc3NjgzLDEwLjY4MzM4ODI2NDExMTE0MwpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Ob25aZXJvTW9ydGFsaXR5UmF0ZV9SS19SZWZlcmVuY2UvVGVzdFNFSVIvcnVucGFyYW1ldGVycy5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L05vblplcm9Nb3J0YWxpdHlSYXRlX1JLX1JlZmVyZW5jZS9UZXN0U0VJUi9ydW5wYXJhbWV0ZXJzLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yOTc1MzYzCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Ob25aZXJvTW9ydGFsaXR5UmF0ZV9SS19SZWZlcmVuY2UvVGVzdFNFSVIvcnVucGFyYW1ldGVycy5jc3YKQEAgLTAsMCArMSwyIEBACitkaXNlYXNlTmFtZSxwb3B1bGF0aW9uSWRlbnRpZmllcix0aW1lUGVyaW9kLGZyZXF1ZW5jeURlcGVuZGVudCxyZWZlcmVuY2VQb3B1bGF0aW9uRGVuc2l0eSxyb2FkTmV0d29ya0luZmVjdGlvdXNQcm9wb3J0aW9uLGNoYXJhY3RlcmlzdGljTWl4aW5nRGlzdGFuY2UsdHJhbnNtaXNzaW9uUmF0ZSxub25MaW5lYXJpdHlDb2VmZmljaWVudCxyZWNvdmVyeVJhdGUsaW5mZWN0aW91c01vcnRhbGl0eVJhdGUsaW1tdW5pdHlMb3NzUmF0ZSxpbmN1YmF0aW9uUmF0ZQorVGVzdFNFSVIsaHVtYW4sODY0MDAwMDAsdHJ1ZSwxMDAuMCwwLjAxLDIuMjUsMTIuMCwxLjAsMC4yLDAuMDUsMC4wMDEwLDAuNApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvUG9wdWxhdGlvbkdyb3d0aFNFSVJfRkRfUmVmZXJlbmNlL0h1bWFuUG9wdWxhdGlvbk1vZGVsL2h1bWFuL0JpcnRoc18wLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvUG9wdWxhdGlvbkdyb3d0aFNFSVJfRkRfUmVmZXJlbmNlL0h1bWFuUG9wdWxhdGlvbk1vZGVsL2h1bWFuL0JpcnRoc18wLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYzI0NDAxCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Qb3B1bGF0aW9uR3Jvd3RoU0VJUl9GRF9SZWZlcmVuY2UvSHVtYW5Qb3B1bGF0aW9uTW9kZWwvaHVtYW4vQmlydGhzXzAuY3N2CkBAIC0wLDAgKzEgQEAKK2l0ZXJhdGlvbix0aW1lLApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Qb3B1bGF0aW9uR3Jvd3RoU0VJUl9GRF9SZWZlcmVuY2UvSHVtYW5Qb3B1bGF0aW9uTW9kZWwvaHVtYW4vQmlydGhzXzEuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Qb3B1bGF0aW9uR3Jvd3RoU0VJUl9GRF9SZWZlcmVuY2UvSHVtYW5Qb3B1bGF0aW9uTW9kZWwvaHVtYW4vQmlydGhzXzEuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJjMjQ0MDEKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1BvcHVsYXRpb25Hcm93dGhTRUlSX0ZEX1JlZmVyZW5jZS9IdW1hblBvcHVsYXRpb25Nb2RlbC9odW1hbi9CaXJ0aHNfMS5jc3YKQEAgLTAsMCArMSBAQAoraXRlcmF0aW9uLHRpbWUsCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1BvcHVsYXRpb25Hcm93dGhTRUlSX0ZEX1JlZmVyZW5jZS9IdW1hblBvcHVsYXRpb25Nb2RlbC9odW1hbi9CaXJ0aHNfMi5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1BvcHVsYXRpb25Hcm93dGhTRUlSX0ZEX1JlZmVyZW5jZS9IdW1hblBvcHVsYXRpb25Nb2RlbC9odW1hbi9CaXJ0aHNfMi5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmEzMTI1MwotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvUG9wdWxhdGlvbkdyb3d0aFNFSVJfRkRfUmVmZXJlbmNlL0h1bWFuUG9wdWxhdGlvbk1vZGVsL2h1bWFuL0JpcnRoc18yLmNzdgpAQCAtMCwwICsxLDMzIEBACitpdGVyYXRpb24sdGltZSxFRy1GUkctRzIxMDAwMSxFRy1GUkctRzIxMDAwMixFRy1GUkctRzIxMDAwMyxFRy1GUkctRzIxMDAwNCxFRy1GUkctRzIxMDAwNSxFRy1MT0UtRzI0MDAwMSxFRy1MT0UtRzI0MDAwMixFRy1MT0UtRzI0MDAwMyxFRy1MT0UtRzI0MDAwNCxFRy1MT0UtRzI0MDAwNSxFRy1MT0UtRzI0MDAwNixFRy1MT0UtRzI0MDAwNyxFRy1MT0UtRzI0MDAwOCxFRy1MT0UtRzI0MDAwOSxFRy1VUEUtRzI5MDAwMSxFRy1VUEUtRzI5MDAwMixFRy1VUEUtRzI5MDAwMyxFRy1VUEUtRzI5MDAwNCxFRy1VUEUtRzI5MDAwNSxFRy1VUEUtRzI5MDAwNixFRy1VUEUtRzI5MDAwNyxFRy1VUEUtRzI5MDAwOCxFRy1VUkctRzMwMDAwMSxFRy1VUkctRzMwMDAwMixFRy1VUkctRzMwMDAwMyxFRy1VUkctRzMwMDAwNAorMSxUdWUgMjUgSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzIsV2VkIDI2IEphbiAxMSwxMS41OTIyNTg3MzQ2OTgyNTksMTAuMzUwMTk0NTMzMzI0Mjk5LDYuMDI0NjU1NjY2MDM5NDIzLDEyLjQ1NDU0NTc3NzgzOTYxMywxMi41NTQwNTcwNTc2MzcxOTMsMjAyLjk0MTI1MzI5MzI0MTg5LDIyMC41MzYwNDk3MTExNDI2LDE4MC43NTAzNTU3NTYxOTQ1MiwxNTYuOTk5OTI0MzU2NDg0NDgsMTk2LjI4OTQzNjkyMDI1ODcsMzkuODYwNjEyMjM3ODQzNDc2LDIzMy4wMTc3ODEzNTc3NjIzMiw0Ni4xMTU1NjIwNjk3NjI2NDYsMTIyLjQxOTA2NzEyMjkxODkzLDEwOS40MjAzMzI1MzgyMjczNCwyNTEuMTgzOTUyNDUxMjk1MDYsMTgxLjk3Mjg1NTU2MDY3MTgzLDUxLjE3NzUxNTgzNjI5OTYzNCwxNDguOTQ5ODAzNjA4NTE3MDIsOTkuMTk2NDAzMDA4MTY3NzQsMTQ2LjU0NDIwNzc5NDkxODQ2LDE2Mi43MzM2MjgzNjkwNzcwNSwxNDQuNzY2MzIyNjkxMzg5MjYsMzI5Ljk5MTcwMDMwNzIyMTU1LDIxLjA0NDE0MTAyMDE1Mzg1LDAuMjYzNDkwNzgzMTAzOTcxMworMyxUaHUgMjcgSmFuIDExLDIzLjE4NDU2MzgzODQzMTQ2LDIwLjcwMDQzMDQ2NzQyNjcyNywxMi4wNDkzMzU0MzA3MDE1MTEsMjQuOTA5MTQxMzczODYyMzM3LDI1LjEwODE2NDMzMTUwMjYxNCw0MDUuODgzMzE4MzUxNDk2OTQsNDQxLjA3Mjk4MTU2NjQ4NDAzLDM2MS41MDE0MzQ1MTM4MTIwNiwzMTQuMDAwNDc2NzEyNjY2NCwzOTIuNTc5NjU4OTk4MjY1MTMsNzkuNzIxMzgzOTE4MTM1OSw0NjYuMDM2NDk0Nzg2NjUwMSw5Mi4yMzEzMDg2MDE3NzM1NiwyNDQuODM4NjIzOTIyMTA2MzYsMjE4Ljg0MTEwMjc1Nzc4NDgyLDUwMi4zNjg5MDk2MzgzOTk5NCwzNjMuOTQ2NDM5MDEyNzY1OSwxMDIuMzU1MjM2MzgyNjYyNjEsMjk3LjkwMDIwMzAxNjI0ODUsMTk4LjM5MzIwMjgwMTk0NzUsMjkzLjA4OTAwMTc2NjY2ODEsMzI1LjQ2NzkwNzY3MjY2NzYsMjg5LjUzMzIyNDQ0ODA2OTMsNjU5Ljk4NDcyMDU4MTI0NDMsNDIuMDg4MzY2MjE2ODcxNzgsMC41MjY5ODI2MjAxNzEwNzUKKzQsRnJpIDI4IEphbiAxMSwzNC43NzY5MTUzMTEzODUwNzUsMzEuMDUwNzA3ODAyNDcyODk2LDE4LjA3NDAzOTI5NDA4MjY1NiwzNy4zNjM3ODY3ODgyNjc0NSwzNy42NjIzMjE4MjE3OTcxMzYsNjA4LjgyNjE5NTE3ODAxMjIsNjYxLjYxMDc5NTU2OTU1MjksNTQyLjI1MzIzNjI3NTc0NDYsNDcxLjAwMTY1NzA3MTA1NzcsNTg4Ljg3MDY2NjIzNzE1OTksMTE5LjU4MjMxNTA0MTUxNTA1LDY5OS4wNTYxNDAyOTAzOTE2LDEzOC4zNDcyMzk1OTY3NzA2LDM2Ny4yNTg2NzAzOTk1MjA5NSwzMjguMjYyMzEwNjYwNDIzMTcsNzUzLjU1NDg3MTU2NTMzMzUsNTQ1LjkyMDc1MDM1OTE5MzgsMTUzLjUzMzE2MTYzOTkwNzc3LDQ0Ni44NTExOTgyMjU1Nzc2LDI5Ny41OTAzOTkzODI5MjY0LDQzOS42MzQzODE5MTc1OTM2LDQ4OC4yMDI4Mzc5MTMzNzUzMyw0MzQuMzAwNzA1MjcyMzU2MzcsOTg5Ljk3OTA2MDgyNzM0ODEsNjMuMTMyNjc1NTkwNDkwNSwwLjc5MDQ3NTUxMTIwNTUyNworNSxTYXQgMjkgSmFuIDExLDQ2LjM2OTMxMzE1Mzc0NDU4NSw0MS40MDEwMjY1Mzg2Mjg0MSwyNC4wOTg3NjcyNTYyNzkyNTYsNDkuODE4NDgyMDIxMjU0MjEsNTAuMjE2NTI5NTI4NzIxNjE1LDgxMS43Njk4ODM3NzYwMzQ4LDg4Mi4xNDk0OTE3MjM4Nzc4LDcyMy4wMDU3NjEwNDQ4ODQzLDYyOC4wMDM0NjU0MzQxNzA1LDc4NS4xNjI0NTg2NDAwODM1LDE1OS40NDM0MDU2MDg2MTg3LDkzMi4wNzY3MTc4NzI3MTUxLDE4NC40NjMzNTUwNTU0OTE2Myw0ODkuNjc5MjA2NTU3MTIxNDYsNDM3LjY4Mzk1NjI0Nzg5MzE1LDEwMDQuNzQxODM4MjM2MTE0OSw3MjcuODk1Nzg5NjAyODY3MSwyMDQuNzExMjkxNjA4ODUzOTcsNTk1LjgwMjc4OTIzODg4NzUsMzk2Ljc4Nzk5Mjc1MjY5MTcsNTg2LjE4MDM0ODI1MDAzOTcsNjUwLjkzODQxOTA5MzgwNCw1NzkuMDY4NzY1MTY2NTY2NywxMzE5Ljk3NDcyMTA1MDgxMyw4NC4xNzcwNjkxNDEzNDY3LDEuMDUzOTY5NDU2MjExNTQzMQorNixTdW4gMzAgSmFuIDExLDU3Ljk2MTc1NzM2NTY5NTQ2LDUxLjc1MTM4NjY3NjA1ODg2LDMwLjEyMzUxOTMxNzM4NzcwNCw2Mi4yNzMyMjcwNzMwMjE5MTQsNjIuNzcwNzg3NDUyNDc2OTI0LDEwMTQuNzE0Mzg0MTQ4ODExOSwxMTAyLjY4OTA3MDAzMjk4NzMsOTAzLjc1OTAwODgyNDEyMjksNzg1LjAwNTkwMTgwNDUxNjcsOTgxLjQ1NTAzNjIxMDE3NjgsMTk5LjMwNDY1NTYyMDA4NDYsMTE2NS4wOTgyMjc1MzczNDksMjMwLjU3OTY1NDk3ODY3NDUsNjEyLjEwMDIzMjM5Njg2NjcsNTQ3LjEwNjAzOTUyMTk0NTUsMTI1NS45Mjk4MDk2NTQ3NjMsOTA5Ljg3MTU1Njc0NjY5NzQsMjU1Ljg4OTYyNjI5MDMyMDA1LDc0NC43NTQ5NzYwNTg1NjE1LDQ5NS45ODU5ODI5MTI4MzA1LDczMi43MjY5MDA3NjYzNTEzLDgxMy42NzQ2NTEyMTY1NTc0LDcyMy44Mzc0MDQxMzMwMTY3LDE2NDkuOTcxNzAxMjU2OTE4OCwxMDUuMjIxNTQ2ODY5Nzc3MTEsMS4zMTc0NjQ0NTUxOTMzMzkyCis3LE1vbiAzMSBKYW4gMTEsNjkuNTU0MjQ3OTQ3NDIzMTksNjIuMTAxNzg4MjE0OTI5ODYsMzYuMTQ4Mjk1NDc3NTA0NCw3NC43MjgwMjE5NDM3Njk4Miw3NS4zMjUwOTU1OTMyNjM5MiwxMjE3LjY1OTY5NjI5OTU5MDUsMTMyMy4yMjk1MzA1MDA0MSwxMDg0LjUxMjk3OTYxNjM1MjgsOTQyLjAwODk2NjE4NDYwODQsMTE3Ny43NDgzOTg5NTA1ODA0LDIzOS4xNjYwNjUwNzY1NTA1NSwxMzk4LjEyMDY2OTI4ODAyMTQsMjc2LjY5NjEzOTM2NzA1NzA3LDczNC41MjE3NDc5MjA3MTUxLDY1Ni41Mjg1NjA0ODQzMzA5LDE1MDcuMTE4Nzg1ODI1Mjk2OCwxMDkxLjg0ODA1MTc5MzU5NjEsMzA3LjA2ODE2NTY4NTEyNDgsODkzLjcwNzc1ODY4Njk4MjcsNTk1LjE4NDM2OTg2NDkyOTksODc5LjI3NDAzOTQ2ODg3MjgsOTc2LjQxMTUzNDI4NDIzOTMsODY4LjYwNjYyMjE3NDAyMjUsMTk3OS45NzAwMDE0NTA5NDUzLDEyNi4yNjYxMDg3NzYxMTg0NCwxLjU4MDk2MDUwODE1NTEzMTIKKzgsVHVlIDEgRmViIDExLDgxLjE0Njc4NDg5OTExMzI0LDcyLjQ1MjIzMTE1NTQwNzAyLDQyLjE3MzA5NTczNjcyNTczNSw4Ny4xODI4NjY2MzM2OTcyLDg3Ljg3OTQ1Mzk1MTI4MzUsMTQyMC42MDU4MjAyMzE2MTc2LDE1NDMuNzcwODczMTI5Njc0NiwxMjY1LjI2NzY3MzQyNDQ2NTgsMTA5OS4wMTI2NTg1NzY5NTc2LDEzNzQuMDQyNTQ2ODY0NDM0OCwyNzkuMDI3NjMzOTc4NjU0MywxNjMxLjE0NDA0MzEyODQ2MSwzMjIuODEyODA4MjIxMzc3MTcsODU2Ljk0Mzc1MzEzMDYyNTcsNzY1Ljk1MTUxOTEzNjgwMDIsMTc1OC4zMDg3NjY3NTE3MzUyLDEyNzMuODI1Mjc0NzQ2NDc1LDM1OC4yNDY5MDk3OTQwODcyLDEwNDIuNjYxMTM3MTI2NTM0NCw2OTQuMzgzMTUzNjEwNTc3MSwxMDI1LjgyMTc2NDM1OTk0OTIsMTEzOS4xNDkwNjgyOTk0NTM2LDEwMTMuMzc2NDE5MjkxOTAwNCwyMzA5Ljk2OTYyMTYzODE3MjYsMTQ3LjMxMDc1NDg2MDcwNzQsMS44NDQ0NTc2MTUxMDExMzUyCis5LFdlZCAyIEZlYiAxMSw5Mi43MzkzNjgyMjA5NTExLDgyLjgwMjcxNTQ5NzY1NTk0LDQ4LjE5NzkyMDA5NTE0ODEwNiw5OS42Mzc3NjExNDMwMDMzNSwxMDAuNDMzODYyNTI2NzM2NDksMTYyMy41NTI3NTU5NDgxNDA0LDE3NjQuMzEzMDk3OTI0MzA5NywxNDQ2LjAyMzA5MDI1MTM1NCwxMjU2LjAxNjk3ODk4NDA3NjMsMTU3MC4zMzc0Nzk5NTQ4ODEsMzE4Ljg4OTM2MjMyNzAzMzcsMTg2NC4xNjgzNDkwNjIzOTU3LDM2OC45Mjk2NjE1NDIzNzI3NCw5NzkuMzY2MjQ4MDI4NTU3Miw4NzUuMzc0OTE1NDgxMTA0MiwyMDA5LjQ5OTc1MjQzODA5NzQsMTQ1NS44MDMyMjU2MDgyNDU4LDQwOS40MjU4NTg2MTgwMjYsMTE5MS42MTUxMTEzNzk2LDc5My41ODIzMzQxNTEzNTkzLDExNzIuMzcwMDc1NDQxOTI1LDEzMDEuODg3MjUzMjY0ODAzOCwxMTU4LjE0Njc5NTQ4ODk2NywyNjM5Ljk3MDU2MTgyMzg4MDQsMTY4LjM1NTQ4NTEyMzg4MDcsMi4xMDc5NTU3NzYwMzU1NjcKKzEwLFRodSAzIEZlYiAxMSwxMDQuMzMxOTk3OTEzMTIyMjUsOTMuMTUzMjQxMjQxODQyMjIsNTQuMjIyNzY4NTUyODY3OTEsMTEyLjA5MjcwNTQ3MTg4NzUzLDExMi45ODgzMjEzMTk4MjM3OCwxODI2LjUwMDUwMzQ1MjQwNiwxOTg0Ljg1NjIwNDg4Nzg0NCwxNjI2Ljc3OTIzMDA5OTkwOTUsMTQxMy4wMjE5Mjc0MDg0NzY4LDE3NjYuNjMzMTk4MjI1MDU5NSwzNTguNzUxMjUwMTIyMzI2NSwyMDk3LjE5MzU4NzA5MzU1NCw0MTUuMDQ2Njk5MzMwNzgxNTYsMTEwMS43ODkyMzI2MTY0NjgzLDk4NC43OTg3NDk1MTg5OTM0LDIyNjAuNjkxNzQyODg4NDAyLDE2MzcuNzgxOTA0MzgxODIwMSw0NjAuNjA1MDEyMTU3NzYwMSwxMzQwLjU2OTY4MTQ0ODU2MjUsODkyLjc4MTkxMTQ4ODg2MzcsMTMxOC45MTg5NzI3MTcxNDU0LDE0NjQuNjI2MDg5MTgyODkzOCwxMzAyLjkxNzc1MDc2NzUzOCwyOTY5Ljk3MjgyMjAxMzM0OTMsMTg5LjQwMDI5OTU2NTk3NTA1LDIuMzcxNDU0OTkwOTYyNjQyNgorMTEsRnJpIDQgRmViIDExLDExNS45MjQ2NzM5NzU4MTIxNywxMDMuNTAzODA4Mzg4MTMxNDksNjAuMjQ3NjQxMTA5OTgxNTQ0LDEyNC41NDc2OTk2MjA1NDkwMywxMjUuNTQyODMwMzMwNzQ2MjYsMjAyOS40NDkwNjI3NDc2NjE5LDIyMDUuNDAwMTk0MDIzODA2LDE4MDcuNTM2MDkyOTczMDI0MywxNTcwLjAyNzUwMzg1MjY3MDksMTk2Mi45Mjk3MDE2NzgxMTEsMzk4LjYxMzI5NzM2NTE3MDQ3LDIzMzAuMjE5NzU3MjI1NjY0Niw0NjEuMTYzOTIxNTg3MzQxNSwxMjI0LjIxMjcwNjg5NjMxNzcsMTA5NC4yMjMwMjEyNTIyMTg4LDI1MTEuODg0NzM4MTA2NjY5LDE4MTkuNzYxMzExMDcwMTA5NSw1MTEuNzg0MzcwNDE0MTA4MzcsMTQ4OS41MjQ4NDczMzU4MDU0LDk5MS45ODE4ODU2MjQ2Nzc0LDE0NjUuNDY4NDU2MTg3OTU0NiwxNjI3LjM2NTU3NjA1NjMyNzcsMTQ0Ny42ODkyODUxMjk5MzAzLDMyOTkuOTc2NDAyMjExODU5LDIxMC40NDUxOTgxODczMjcxNSwyLjYzNDk1NTI1OTg4NjU3NzcKKzEyLFNhdCA1IEZlYiAxMSwxMjcuNTE3Mzk2NDA5MjA2MzQsMTEzLjg1NDQxNjkzNjY4OTM1LDY2LjI3MjUzNzc2NjU4NTQsMTM3LjAwMjc0MzU4OTE4NzEsMTM4LjA5NzM4OTU1OTcwNDc3LDIyMzIuMzk4NDMzODM3MTU0NywyNDI1Ljk0NTA2NTMzNTcyNDQsMTk4OC4yOTM2Nzg4NzM1OTA4LDE3MjcuMDMzNzA4MzE5MTcwNywyMTU5LjIyNjk5MDMxNzE3NjQsNDM4LjQ3NTUwNDA1NjIwMzQsMjU2My4yNDY4NTk0NjI0NTU2LDUwNy4yODEzMjgzMTI3OTA1LDEzNDYuNjM2NjcwODcwMDY0MywxMjAzLjY0NzczMDY4MjUzMTEsMjc2My4wNzg3MzgwOTY5MTY0LDIwMDEuNzQxNDQ1Njc2MDI1NSw1NjIuOTYzOTMzMzg3ODg5NywxNjM4LjQ4MDYwOTA0MzcxMTksMTA5MS4xODIyNTY1NjAzODc3LDE2MTIuMDE4NTI1ODU2Njk3OCwxNzkwLjEwNTcxMzg4NzcwOSwxNTkyLjQ2MTM5ODU3ODQ2MDEsMzYyOS45ODEzMDI0MjQ2ODksMjMxLjQ5MDE4MDk4ODI3Mzc1LDIuODk4NDU2NTgyODExNTg4NworMTMsU3VuIDYgRmViIDExLDEzOS4xMTAxNjUyMTM0OTAyMywxMjQuMjA1MDY2ODg3NjgxNCw3Mi4yOTc0NTg1MjI3NzU5LDE0OS40NTc4MzczNzgwMDEwNywxNTAuNjUxOTk5MDA2OTAwMTgsMjQzNS4zNDg2MTY3MjQxMzE3LDI2NDYuNDkwODE4ODI3MTI4NCwyMTY5LjA1MTk4NzgwNDUwMDYsMTg4NC4wNDA1NDA4MTA0ODg0LDIzNTUuNTI1MDY0MTQ1Mzk2Myw0NzguMzM3ODcwMTk2MDYzMTQsMjc5Ni4yNzQ4OTM4MDc2NTU2LDU1My4zOTg5MTk1MDc4NjY0LDE0NjkuMDYxMTI0NTM5NjY2NywxMzEzLjA3Mjg3NzgxMTY4MSwzMDE0LjI3Mzc0Mjg2MzE2NCwyMTgzLjcyMjMwODIwMjQ4LDYxNC4xNDM3MDEwNzk5MjMsMTc4Ny40MzY5NjY1NzQ2NjUxLDExOTAuMzgzMDI0Mjk3NTgxNiwxNzU4LjU2OTE4MTcyNTcxOTgsMTk1Mi44NDY1MDI2Nzk2NDE2LDE3MzcuMjM0MDkxMTE1NDQzOCwzOTU5Ljk4NzUyMjY1NzEyMDMsMjUyLjUzNTI0Nzk2OTE1MTU2LDMuMTYxOTU4OTU5NzQxODkxCisxNCxNb24gNyBGZWIgMTEsMTUwLjcwMjk4MDM4ODg0OTM0LDEzNC41NTU3NTgyNDEyNzMyNSw3OC4zMjI0MDMzNzg2NDk0MSwxNjEuOTEyOTgwOTg3MTkwMiwxNjMuMjA2NjU4NjcyNTMzNCwyNjM4LjI5OTYxMTQxMTg0MDUsMjg2Ny4wMzc0NTQ1MDE1NDYsMjM0OS44MTEwMTk3Njg2NDY1LDIwNDEuMDQ4MDAxMzI5MTM2MiwyNTUxLjgyMzkyMzE2NTkxMTgsNTE4LjIwMDM5NTc4NTM4NzQsMzAyOS4zMDM4NjAyNjQ5OTMsNTk5LjUxNjY5NTE3MzMwNzEsMTU5MS40ODYwNjc5MDcwODQsMTQyMi40OTg0NjI2NDE0MTk4LDMyNjUuNDY5NzUyNDA5NDMwNCwyMzY1LjcwMzg5ODY1MjM4NDQsNjY1LjMyMzY3MzQ5MTAyNjksMTkzNi4zOTM5MTk5MzEwNDg1LDEyODkuNTg0MTg4ODM3ODQ2NiwxOTA1LjEyMDQyMzc5NzM2NTIsMjExNS41ODc5NDI0MzQ3Mjk1LDE4ODIuMDA3MzYyNzQzMTk3NSw0Mjg5Ljk5NTA2MjkxNDQzMiwyNzMuNTgwMzk5MTMwMjk3MywzLjQyNTQ2MjM5MDY4MTcwMTcKKzE1LFR1ZSA4IEZlYiAxMSwxNjIuMjk1ODQxOTM1NDY5MTYsMTQ0LjkwNjQ5MDk5NzYzMDUzLDg0LjM0NzM3MjMzNDMwMjM1LDE3NC4zNjgxNzQ0MTY5NTM3NiwxNzUuNzYxMzY4NTU2ODA1MjgsMjg0MS4yNTE0MTc5MDM1MjgsMzA4Ny41ODQ5NzIzNjI1MDY1LDI1MzAuNTcwNzc0NzY4OTIwMywyMTk4LjA1NjA4OTg3NzYyNiwyNzQ4LjEyMzU2NzM4MTg2MzMsNTU4LjA2MzA4MDgyNDgxNCwzMjYyLjMzMzc1ODgzODE5NjQsNjQ1LjYzNDY1NTMwOTg1MDUsMTcxMy45MTE1MDA5NzQyNzQ1LDE1MzEuOTI0NDg1MTczNDk3NywzNTE2LjY2Njc2NjczOTczNSwyNTQ3LjY4NjIxNzAyODY1MSw3MTYuNTAzODUwNjIyMDIwNCwyMDg1LjM1MTQ2OTExNTI0NSwxMzg4Ljc4NTc1MDE4Mjc2OTgsMjA1MS42NzIyNTIwNzM5NzksMjI3OC4zMzAwMzMxNTU1NzYsMjAyNi43ODEyMTM0NjQwMzc4LDQ2MjAuMDAzOTIzMjAxOTA1LDI5NC42MjU2MzQ0NzIwNDc2NCwzLjY4ODk2Njg3NTYzNTIzNTYKKzE2LFdlZCA5IEZlYiAxMSwxNzMuODg4NzQ5ODUzNTM1MTYsMTU1LjI1NzI2NTE1NjkxODgsOTAuMzcyMzY1Mzg5ODMxMSwxODYuODIzNDE3NjY3NDkxMDQsMTg4LjMxNjEyODY1OTkxNjcsMzA0NC4yMDQwMzYyMDI0NDEzLDMzMDguMTMzMzcyNDEzNTM4NCwyNzExLjMzMTI1MjgwODIxNCwyMzU1LjA2NDgwNjQ1ODQ3MDIsMjk0NC40MjM5OTY3OTYzOTEzLDU5Ny45MjU5MjUzMTQ5ODA5LDM0OTUuMzY0NTg5NTMwOTk0LDY5MS43NTI3OTk5MTgyMzQ0LDE4MzYuMzM3NDIzNzQzMTk3NCwxNjQxLjM1MDk0NTQwOTY2NTcsMzc2Ny44NjQ3ODU4NTgwOTcsMjcyOS42NjkyNjMzMzQxOTEsNzY3LjY4NDIzMjQ3MzcyMjUsMjIzNC4zMDk2MTQxMjk2MzgyLDE0ODcuOTg3NzA4MzMzOTM4NCwyMTk4LjIyNDY2NjU1NzkwNiwyNDQxLjA3Mjc3NDg0NDc4NTcsMjE3MS41NTU2NDMyODAyODEsNDk1MC4wMTQxMDM1MjQ4MiwzMTUuNjcwOTUzOTk0NzM5MzYsMy45NTI0NzI0MTQ2MDY3MDk2CisxNyxUaHUgMTAgRmViIDExLDE4NS40ODE3MDQxNDMyMzI4MywxNjUuNjA4MDgwNzE5MzAzNzMsOTYuMzk3MzgyNTQ1MzMyMDgsMTk5LjI3ODcxMDczOTAwMTMzLDIwMC44NzA5Mzg5ODIwNjg1NCwzMjQ3LjE1NzQ2NjMxMTgyOCwzNTI4LjY4MjY1NDY1ODE3MDYsMjg5Mi4wOTI0NTM4ODk0MTk2LDI1MTIuMDc0MTUxMDc0MTgwNSwzMTQwLjcyNTIxMTQxMjYzNzIsNjM3Ljc4ODkyOTI1NjUyNTYsMzcyOC4zOTYzNTIzNDcxMTQ4LDczNy44NzExMjg5OTkxOTY3LDE5NTguNzYzODM2MjE1ODExNCwxNzUwLjc3Nzg0MzM1MTY3NDYsNDAxOS4wNjM4MDk3Njg1MzU1LDI5MTEuNjUzMDM3NTcxOTE2LDgxOC44NjQ4MTkwNDY5NTIxLDIzODMuMjY4MzU0OTc2NjExNiwxNTg3LjE5MDA2MzI5MjkzOTQsMjM0NC43Nzc2NjcyNTE0OTA2LDI2MDMuODE2MTY3NTA0OTYyMywyMzE2LjMzMDY1MjE5NDI0Myw1MjgwLjAyNTYwMzg4ODQ1NSwzMzYuNzE2MzU3Njk4NzA5Miw0LjIxNTk3OTAwNzYwMDMzOQorMTgsRnJpIDExIEZlYiAxMSwxOTcuMDc0NzExNDkxMjQ3ODUsMTc1Ljk1ODk0MzY1NTAxOTMsMTAyLjQyMjQyNzI3NTk2NzQyLDIxMS43MzQwNjA4MTU1NTc2LDIxMy40MjU4MDY3NjQ3MzQxOCwzNDUwLjExMTgyNTI5Mjk0NDYsMzc0OS4yMzI5NDYzMDY3NDg1LDMwNzIuODU0NDgyMjczNTY1NywyNjY5LjA4NDIxNDI4NTk4MTUsMzMzNy4wMjczMjQ0NTQ5MzM1LDY3Ny42NTIxMTU2NDE5ODA3LDM5NjEuNDI5MTgxNjk2NjU4NCw3ODMuOTg5NjY5MTUzMjcwOSwyMDgxLjE5MDgwOTAwNjI5NDMsMTg2MC4yMDUyNDIxMTU3Mjg3LDQyNzAuMjYzOTgzMzU5ODIzLDMwOTMuNjM3NjQ0NzA4MDIwNiw4NzAuMDQ1NjM5ODYyMDk1OCwyNTMyLjIyNzc3NzU3Mzg5MTcsMTY4Ni4zOTI4NzIyNzg1NzU2LDI0OTEuMzMxMzM4Njg0ODU2LDI3NjYuNTYwMzA1MDA0NjY0MywyNDYxLjEwNjMyMzcxMDUyMiw1NjEwLjAzODYxNDYzOTczNCwzNTcuNzYxODU3NzIyNzA5Myw0LjQ3OTQ4NjgwNjYwMzc2NAorMTksU2F0IDEyIEZlYiAxMSwyMDguNjY3NzY2NTA0MjQwNTcsMTg2LjMwOTg0OTE0ODYwMDcsMTA4LjQ0NzQ5Njc3ODc0NDY1LDIyNC4xODk0NjIxMDI2MzgxLDIyNS45ODA3MjYxNjcwOTM5MywzNjUzLjA2NzAxODcyNjY1LDM5NjkuNzg0MTQ0NzU0MDkxNCwzMjUzLjYxNzI1Mzg2NTkwNTcsMjgyNi4wOTQ5MjMwNDkwOTk2LDM1MzMuMzMwMjQ0NTk4OTIyLDcxNy41MTU0NjU5MjYwNTQ1LDQxOTQuNDYyOTY5MTY3MjczNSw4MzAuMTA4Mzk4OTI1MDI4LDIyMDMuNjE4Mjg1MTU4NzQsMTk2OS42MzMwOTA3OTM2Mjg4LDQ1MjEuNDY1MTg5NzY3NzMxLDMyNzUuNjIzMDAwMDc4OTg3LDkyMS4yMjY2NzExMDg2MzIzLDI2ODEuMTg3ODEyNjIyMDUyNywxNzg1LjU5NjA4OTEzOTM2ODEsMjYzNy44ODU2MTI2Nzc3ODgsMjkyOS4zMDUxMTE2MzE0OTIsMjYwNS44ODI1OTA0NzYwNyw1OTQwLjA1Mjk4MjI0ODg0NCwzNzguODA3NDQ0Mjc1ODc4Miw0Ljc0Mjk5NTY4OTAyNjk2MDQKKzIwLFN1biAxMyBGZWIgMTEsMjIwLjI2MDg3MTkxNTE4MjM4LDE5Ni42NjA3OTk2NDAxOTIzMiwxMTQuNDcyNTkyNDc0MDI2NDEsMjM2LjY0NDkxNzUzNjUwNTU3LDIzOC41MzU3MDAxNDg4NzExMSwzODU2LjAyMzA5NDQ1ODAzMiw0MTkwLjMzNjMwMTk5MzQwNSwzNDM0LjM4MDgxMTI3OTgzOSwyOTgzLjEwNjMxNDM3NzU3MjMsMzcyOS42MzQwMTgxMjE0Njg3LDc1Ny4zNzg5ODk1MDYyMTc3LDQ0MjcuNDk3NzY5Njk0ODM4LDg3Ni4yMjczMjkxODY1OTUsMjMyNi4wNDYyOTM1MzQ0NjEsMjA3OS4wNjE0MTUxODIxMjgzLDQ3NzIuNjY3NDg4MjEwOTY1NSwzNDU3LjYwOTE0NjU4NjQyNzQsOTcyLjQwNzkyNDg1MjA4NjYsMjgzMC4xNDg0OTUyMzcyNDg0LDE4ODQuNzk5NzM3MjYxNjkzLDI3ODQuNDQwNTIzNzc5MzAxNywzMDkyLjA1MDYyNTc1MTI1MTYsMjc1MC42NTk0ODY2MjA3NTIsNjI3MC4wNjg3ODQ1MTQwNzIsMzk5Ljg1MzEyMjMxOTU0NzEsNS4wMDY1MDU3MTY5OTAwNzEKKzIxLE1vbiAxNCBGZWIgMTEsMjMxLjg1NDAyNjkzODExMjg3LDIwNy4wMTE3OTQ0MjgwNDYyNywxMjAuNDk3NzEzOTUzMzM4MzIsMjQ5LjEwMDQyNjI3MjczNjEyLDI1MS4wOTA3Mjc4NTg4OTQ5Miw0MDU4Ljk4MDAzODcyNzU4MTQsNDQxMC44ODk0MDMwNzIyNDYsMzYxNS4xNDUxNDIyNjA0MDgsMzE0MC4xMTgzNzc2MjY3MzMsMzkyNS45Mzg2MzE3MTQwNjA2LDc5Ny4yNDI2ODM2Nzk5MDI2LDQ2NjAuNTMzNTY3NDgwNjQxLDkyMi4zNDY0NTY4MTEzMTU1LDI0NDguNDc0ODI1ODMzMzg4LDIxODguNDkwMjA3ODYyNDc4LDUwMjMuODcwODYxNjU5MTM5LDM2MzkuNTk2MDcxODkyNTAwMywxMDIzLjU4OTM5NzYyMjU5OTYsMjk3OS4xMDk4MTUzMjA2MTQ0LDE5ODQuMDAzODA5OTE5OTg5MiwyOTMwLjk5NjA2MjA1MzYzMzUsMzI1NC43OTY4MzYzMzA1Mjg1LDI4OTUuNDM3MDAyMzI5MzQ1LDY2MDAuMDg1OTk5MDYxODI5LDQyMC44OTg4OTA0MjY5MTM1Nyw1LjI3MDAxNjg3MjYyODI5ODUKKzIyLFR1ZSAxNSBGZWIgMTEsMjQzLjQ0NzIyOTIwOTY1NTM1LDIxNy4zNjI4MzE0MDIwMTIyMywxMjYuNTIyODU5OTg4NDAxMTQsMjYxLjU1NTk4NTc3MjE1MzksMjYzLjY0NTgwNjczNzcwMTY2LDQyNjEuOTM3ODEwMTYwNTY0LDQ2MzEuNDQzNDAzMDI4NzMyLDM3OTUuOTEwMjA5OTU3MDU5LDMyOTcuMTMxMDgwNzg4MTU2NCw0MTIyLjI0NDA0NTM1ODEwNiw4MzcuMTA2NTQwMzIwNTEsNDg5My41NzAzMTUwMTgwODQsOTY4LjQ2NTc3MjM5NzM2MDEsMjU3MC45MDM4NTcwOTcyODM0LDIyOTcuOTE5NDQ2NTI2NTYyMyw1Mjc1LjA3NTI1ODkwMjAxODUsMzgyMS41ODM3Mzg4OTc0MTMsMTA3NC43NzEwNzg5ODYzMzM2LDMxMjguMDcxNzQyNTA0OTQ3LDIwODMuMjA4Mjg2ODkwNTQ4LDMwNzcuNTUyMTk3NjI0MDIsMzQxNy41NDM3MTAxOTE5MzU2LDMwNDAuMjE1MTA4MDg3NTU0LDY5MzAuMTA0NTU4NjE0OTE5LDQ0MS45NDQ3NDQzMDc1OTQ2NSw1LjUzMzUyOTEwMjIyMjM1CisyMyxXZWQgMTYgRmViIDExLDI1NS4wNDA0Nzg3NTU5Nzg3NywyMjcuNzEzOTEwNTg1NDU1MywxMzIuNTQ4MDMwNTkyODE1MjUsMjc0LjAxMTU5NjA2Mjg3NDUsMjc2LjIwMDkzNjgxMzYzMTUzLDQ0NjQuODk2NDA5MjE1MTEsNDg1MS45OTgzMDIzNjA3MTUsMzk3Ni42NzYwMTQ3Nzc4MjYsMzQ1NC4xNDQ0MjQyMTYyNjE1LDQzMTguNTUwMjU5NDk2NzE3LDg3Ni45NzA1NTk1MTgwMjM0LDUxMjYuNjA4MDEyODMzMTkyLDEwMTQuNTg1Mjc2MDQ4ODMyMiwyNjkzLjMzMzM4NzYwMjUwMSwyNDA3LjM0OTEzMTQyMTM5MSw1NTI2LjI4MDY4MDUwNjYzNyw0MDAzLjU3MjE0ODAxMTk1ODIsMTEyNS45NTI5NjkwNTg4MTkyLDMyNzcuMDM0Mjc3MTI2NDkyMywyMTgyLjQxMzE2ODM5NzMsMzIyNC4xMDg5MzA4MjEyNzksMzU4MC4yOTEyNDc3MDI4MzYyLDMxODQuOTkzODA0MjIyMTgyLDcyNjAuMTI0NDYzOTE4MjgxLDQ2Mi45OTA2ODQwMDkwOTYyNCw1Ljc5NzA0MjQwNjM2NzA0NAorMjQsVGh1IDE3IEZlYiAxMSwyNjYuNjMzNzc0NDYwMjUyMzcsMjM4LjA2NTAzMDk4MTIwODYyLDEzOC41NzMyMjUxODYxNDgzNiwyODYuNDY3MjU1OTQ0OTkxOTYsMjg4Ljc1NjExNjg3NzE5MTQsNDY2Ny44NTU4MTYzMzkyODksNTA3Mi41NTQwNzk4MjExMyw0MTU3LjQ0MjUzOTMwODcxMiwzNjExLjE1ODM5Mjc4NTIzNCw0NTE0Ljg1NzI1NTIxODgyLDkxNi44MzQ3Mzc0MzIxNTkzLDUzNTkuNjQ2NjM4NDc2MzgxLDEwNjAuNzA0OTYzMzIyODI5LDI4MTUuNzYzNDA1NTU0ODQ0LDI1MTYuNzc5MjUyMDA1MTAzLDU3NzcuNDg3MTAyMjczMjI4LDQxODUuNTYxMjgxNzA0MzYyLDExNzcuMTM1MDYyOTA5NDcxMSwzNDI1Ljk5NzQwNDgzNTAwOCwyMjgxLjYxODQ0NDg4MzM4NiwzMzcwLjY2NjI0NzUyNjkyOCwzNzQzLjAzOTQzMzE4NTAxNSwzMzI5Ljc3MzA3Njc4NjAzNCw3NTkwLjE0NTY4MzE3OTU4OSw0ODQuMDM2NzA3NTAzOTY2NzQsNi4wNjA1NTY3NTk2NzY5MzY1CisyNSxGcmkgMTggRmViIDExLDI3OC4yMjcxMTUzODgxNzE0LDI0OC40MTYxOTE3NTUwNzQ0NCwxNDQuNTk4NDQzMjgyODI5NSwyOTguOTIyOTY0NDE0NzAzNTMsMzAxLjMxMTM0NTkxNjU1ODE0LDQ4NzAuODE2MDE1MTc2NTg0LDUyOTMuMTEwNzE3NjM1MzY3LDQzMzguMjA5NzY4OTgxNzI2NSwzNzY4LjE3Mjk3Mzg0MTMwNCw0NzExLjE2NTAxNjcwNDAxNSw5NTYuNjk5MDcwODUwMjU5OSw1NTkyLjY4NjE3MzE2NzA0MTUsMTEwNi44MjQ4MzA1MDI1NjA5LDI5MzguMTkzOTAxMDg3NjY2NywyNjI2LjIwOTc5OTQ1ODcxNDMsNjAyOC42OTQ1MDM5NTcwNDMsNDM2Ny41NTExMjUzMDgxMDMsMTIyOC4zMTczNTY0MTM1MTk1LDM1NzQuOTYxMTEzNjI1NTQzLDIzODAuODI0MTA4MzUzODQzLDM1MTcuMjI0MTM1OTI5OTAxNCwzOTA1Ljc4ODI1MzUyMjU4MSwzNDc0LjU1MjkxNDExMTMzNSw3OTIwLjE2ODE4OTgwMjQsNTA1LjA4MjgxMzA5NjEwNTI3LDYuMzI0MDcyMTQwOTE1MzgyCisyNixTYXQgMTkgRmViIDExLDI4OS44MjA0OTgzNjgxNDU1NCwyNTguNzY3MzkwMDc1Mjg1OCwxNTAuNjIzNjgzMjM0NTM5NzgsMzExLjM3ODcxODA2NDUwMTEsMzEzLjg2NjYyMDQ5Njk5NzcsNTA3My43NzY5NTAyMDMxNzMsNTUxMy42NjgxNTU0NjU3NDgsNDUxOC45Nzc2NTQzNDQzNzk1LDM5MjUuMTg4MTI0NDI5OTk0Myw0OTA3LjQ3MzQ5MDI0ODM4OCw5OTYuNTYzNTQ4ODY2NjM5Niw1ODI1LjcyNjU1MzE1MjU1MiwxMTUyLjk0NDg2NDk3MTAxNTcsMzA2MC42MjQ4NDA3MDc2NTksMjczNS42NDA3NDM4NDUzMTA3LDYyNzkuOTAyODE2ODM1Mjc0LDQ1NDkuNTQxNjI5MDM2MjIsMTI3OS40OTk4MzU1NjkwMjQ1LDM3MjMuOTI1MzYyNzQ2MDk0NCwyNDgwLjAzMDEzMTY2ODk3NzQsMzY2My43ODI1NTU5MzYzNTcsNDA2OC41Mzc2NjQxOTIzMzksMzYxOS4zMzMyNzY1OTA2NjYsODI1MC4xOTE4OTM1MDI0NTksNTI2LjEyODk5NTAyNzkyODcsNi41ODc1ODg0Nzc5OTI0NzgKKzI3LFN1biAyMCBGZWIgMTEsMzAxLjQxMzkyODk1NjAwODcsMjY5LjExODYzMDkwMjM5MTAzLDE1Ni42NDg5NDc5Mjg3MjIxMiwzMjMuODM0NTIyODYzNDg3NTYsMzI2LjQyMTk0NjYzNTMwNiw1Mjc2LjczODcxODY4MjkyLDU3MzQuMjI2NDk5MDA4ODEyLDQ2OTkuNzQ2MjgyMDI1MDc5LDQwODIuMjAzOTE5Nzk2ODE5LDUxMDMuNzgyNzY5OTI3NzgwNSwxMDM2LjQyODE5MDU4NTMzNTQsNjA1OC43Njc4OTAxMTE1ODIsMTE5OS4wNjUwODg4MzAwNDYzLDMxODMuMDU2MjgzMDg2NzMyLDI4NDUuMDcyMTM3NjA2ODg3Myw2NTMxLjExMjE2MTI5MzExMyw0NzMxLjUzMjg4MDEwMzAzLDEzMzAuNjgyNTI0OTAzODg2OCwzODcyLjg5MDIyMzU4Mzk4ODcsMjU3OS4yMzY1NjIzNzA3NTI0LDM4MTAuMzQxNTc3NzgwNjg3Nyw0MjMxLjI4Nzc0MzE4NzgwNCwzNzY0LjExNDIzMzYwNjMzMTMsODU4MC4yMTY5NTI0MzUyMjgsNTQ3LjE3NTI2MzM4NTI4NDEsNi44NTExMDU4OTcxOTE3MjIKKzI4LE1vbiAyMSBGZWIgMTEsMzEzLjAwNzQwNjYyNDc2Nzg0LDI3OS40Njk5MTM3NjU4NjI0LDE2Mi42NzQyMzcwOTE0OTEwOCwzMzYuMjkwMzc4MjQ1NDY5OCwzMzguOTc3MzIzNzYwNzY2MDcsNTQ3OS43MDEzMTEzODk5Niw1OTU0Ljc4NTczODIzODgyNCw0ODgwLjUxNTY0MzgwNjc3Nyw0MjM5LjIyMDM1MjgwNDQ0Miw1MzAwLjA5Mjg0NjgxODcyNCwxMDc2LjI5Mjk5NDE5NDI1Myw2MjkxLjgxMDE3MzQ1MDk2OCwxMjQ1LjE4NTQ5OTk4MzIwNDQsMzMwNS40ODgyMjI2NTk2MjMsMjk1NC41MDM5NzU3NjkxMTIsNjc4Mi4zMjI1MjU5MTE1NDUsNDkxMy41MjQ4NzAyMzU5MDksMTM4MS44NjU0MjIwOTE1Mzc1LDQwMjEuODU1Njg5MzY3ODUzOCwyNjc4LjQ0MzM5NTk0OTYyMzcsMzk1Ni45MDExOTQ4MDA4ODMsNDM5NC4wMzg0ODMxMTA5OCwzOTA4Ljg5NTc3ODU3NzE0Myw4OTEwLjI0MzM1MTU5OTAzMiw1NjguMjIxNjE3MjExNDg4OCw3LjExNDYyNDM4NjUzNDYyNQorMjksVHVlIDIyIEZlYiAxMSwzMjQuNjAwOTI3NTI3NDM4MzMsMjg5LjgyMTIzNTIzMDkwNDIsMTY4LjY5OTU0ODcyMzUxNjAyLDM0OC43NDYyODAwNzczMDYyNywzNTEuNTMyNzQ3NzA3MjEyNiw1NjgyLjY2NDY2MDk3NjYsNjE3NS4zNDU3OTk5NjkxMSw1MDYxLjI4NTY3OTcwNjAwNyw0Mzk2LjIzNzM3MTM1MTE3LDU0OTYuNDAzNjU1NzgwOTgzLDExMTYuMTU3OTQ2NDY1MzI2NCw2NTI0Ljg1MzMyNTg0MTg3NiwxMjkxLjMwNjA4MzEyNjY2OCwzNDI3LjkyMDYxODgwMDU3NCwzMDYzLjkzNjIyMjAxOTk2NCw3MDMzLjUzMzgyNzMzMzE0Niw1MDk1LjUxNzUzOTA0NTY5NCwxNDMzLjA0ODUxMDE0ODMwNDYsNDE3MC44MjE3MTA2Njc0OTUsMjc3Ny42NTA1OTk0ODY0NjMzLDQxMDMuNDYxMzU4MzY1MDYzLDQ1NTYuNzg5ODI5OTU3Mzk5LDQwNTMuNjc3ODYzNDYxMjI4Myw5MjQwLjI3MDk4MTQ4MzQ2Miw1ODkuMjY4MDQ5NTIyODc0Nyw3LjM3ODE0Mzg1ODU3OTY0MQorMzAsV2VkIDIzIEZlYiAxMSwzMzYuMTk0NDk1MzE4MzY5OTUsMzAwLjE3MjU5ODU2MDMxNzQsMTc0LjcyNDg4NDcyNDAxMjU4LDM2MS4yMDIyMzIyODUxNzQ1LDM2NC4wODgyMjI0MzIxOTMzLDU4ODUuNjI4ODMxNDE4MTQ5LDYzOTUuOTA2NzUzNzIxNTc1LDUyNDIuMDU2NDQ2NzAyNjA3LDQ1NTMuMjU1MDI0OTI5NzQzLDU2OTIuNzE1MjU4NjkyOTQ2LDExNTYuMDIzMDU5OTY0MjM2NCw2NzU3Ljg5NzQyMDc0MDk1NSwxMzM3LjQyNjg1Mjc5NzkzMTEsMzU1MC4zNTM1MTAxMDEwMzg0LDMxNzMuMzY4OTEwODUzMTY3Niw3Mjg0Ljc0NjE0NDc0MTI4MSw1Mjc3LjUxMDk0Mzg5NzYwNiwxNDg0LjIzMTgwNTIwNzQxNTQsNDMxOS43ODgzMzQ0Mzc5MjYsMjg3Ni44NTgyMDQyNTE5OTg0LDQyNTAuMDIyMTE0NjY5OTAxLDQ3MTkuNTQxODM1MDI3Mjk3LDQxOTguNDYwNTMzODk0Nzk5NSw5NTcwLjI5OTk0NjExNTI3Niw2MTAuMzE0NTY2OTUzNDA4LDcuNjQxNjY0Mzk2Mzg5NzQ0CiszMSxUaHUgMjQgRmViIDExLDM0Ny43ODgxMDk0NTEyMjc5LDMxMC41MjQwMDMyNjYzMDQ2NSwxODAuNzUwMjQ0ODA5MDQzMSwzNzMuNjU4MjM0MjgyMTAwNzUsMzc2LjY0Mzc0NzM0NDA0NDM2LDYwODguNTkzODEzMTUwMTMxLDY2MTYuNDY4NTg5MTAyNTE0LDU0MjIuODI3OTM2Mjc3OTQ0LDQ3MTAuMjczMzA2MTQwODY3LDU4ODkuMDI3NjQ2MzAzNjMyLDExOTUuODg4MzMyODEyMzgwNyw2OTkwLjk0MjQ0NzE2NjI0NCwxMzgzLjU0NzgwNjgyMzYwMSwzNjcyLjc4Njg5MDc5MTQ5MjYsMzI4Mi44MDIwMzcxMTE4MjA1LDc1MzUuOTU5NDY2Mjk3ODI4LDU0NTkuNTA1MDc2MjE1Mzk1LDE1MzUuNDE1MzA0ODU2OTEwMyw0NDY4Ljc1NTU1MzY1OTI1MSwyOTc2LjA2NjIwNTU3MTE3Myw0Mzk2LjU4MzQ1NjgwODg3Nyw0ODgyLjI5NDQ5MDY1MTE1Miw0MzQzLjI0Mzc4MzA1NTEyMzUsOTkwMC4zMzAyMjk5NDIyMDEsNjMxLjM2MTE2ODUxMTI5MzMsNy45MDUxODU5ODc1NDY4MDIKKzMyLEZyaSAyNSBGZWIgMTEsMzU5LjM4MTc3MDU3NzU3MTMzLDMyMC44NzU0NDk5MzA2MTMyLDE4Ni43NzU2MjkzMTcyMzE4LDM4Ni4xMTQyODY3NjgxMTAzLDM4OS4xOTkzMjMxNDgzODQzLDYyOTEuNTU5NjE3NTc5MTQyNSw2ODM3LjAzMTMxODUwNzQ2Myw1NjAzLjYwMDE1ODU5MTM0NSw0ODY3LjI5MjIyMzgwODk0NCw2MDg1LjM0MDgyOTY0NTc2MiwxMjM1Ljc1Mzc2NzI1MDE4MTIsNzIyMy45ODg0MTgyMTQ4MzYsMTQyOS42Njg5NDc3OTU2NjcyLDM3OTUuMjIwNzY3NzUyNjcyNiwzMzkyLjIzNTYwNjk0NjA0NjYsNzc4Ny4xNzM4MDYxMjA5MzUsNTY0MS40OTk5NDYyMjcxLDE1ODYuNTk5MDExOTczMjkzNSw0NjE3LjcyMzM3NjcwMzQwMiwzMDc1LjI3NDYwOTAxOTQ2MTQsNDU0My4xNDUzOTMwMTg3MSw1MDQ1LjA0NzgwNTk3NTYzOSw0NDg4LjAyNzYxOTA3ODk5NSwxMDIzMC4zNjE4NTE1MTE4ODUsNjUyLjQwNzg1NTM3OTM0NjIsOC4xNjg3MDg2NDY4NjA2ODgKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvUG9wdWxhdGlvbkdyb3d0aFNFSVJfRkRfUmVmZXJlbmNlL0h1bWFuUG9wdWxhdGlvbk1vZGVsL2h1bWFuL0NvdW50XzAuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Qb3B1bGF0aW9uR3Jvd3RoU0VJUl9GRF9SZWZlcmVuY2UvSHVtYW5Qb3B1bGF0aW9uTW9kZWwvaHVtYW4vQ291bnRfMC5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmMyNDQwMQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvUG9wdWxhdGlvbkdyb3d0aFNFSVJfRkRfUmVmZXJlbmNlL0h1bWFuUG9wdWxhdGlvbk1vZGVsL2h1bWFuL0NvdW50XzAuY3N2CkBAIC0wLDAgKzEgQEAKK2l0ZXJhdGlvbix0aW1lLApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Qb3B1bGF0aW9uR3Jvd3RoU0VJUl9GRF9SZWZlcmVuY2UvSHVtYW5Qb3B1bGF0aW9uTW9kZWwvaHVtYW4vQ291bnRfMS5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1BvcHVsYXRpb25Hcm93dGhTRUlSX0ZEX1JlZmVyZW5jZS9IdW1hblBvcHVsYXRpb25Nb2RlbC9odW1hbi9Db3VudF8xLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYzI0NDAxCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Qb3B1bGF0aW9uR3Jvd3RoU0VJUl9GRF9SZWZlcmVuY2UvSHVtYW5Qb3B1bGF0aW9uTW9kZWwvaHVtYW4vQ291bnRfMS5jc3YKQEAgLTAsMCArMSBAQAoraXRlcmF0aW9uLHRpbWUsCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1BvcHVsYXRpb25Hcm93dGhTRUlSX0ZEX1JlZmVyZW5jZS9IdW1hblBvcHVsYXRpb25Nb2RlbC9odW1hbi9Db3VudF8yLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvUG9wdWxhdGlvbkdyb3d0aFNFSVJfRkRfUmVmZXJlbmNlL0h1bWFuUG9wdWxhdGlvbk1vZGVsL2h1bWFuL0NvdW50XzIuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFjNjI2NjYKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1BvcHVsYXRpb25Hcm93dGhTRUlSX0ZEX1JlZmVyZW5jZS9IdW1hblBvcHVsYXRpb25Nb2RlbC9odW1hbi9Db3VudF8yLmNzdgpAQCAtMCwwICsxLDMzIEBACitpdGVyYXRpb24sdGltZSxFRy1GUkctRzIxMDAwMSxFRy1GUkctRzIxMDAwMixFRy1GUkctRzIxMDAwMyxFRy1GUkctRzIxMDAwNCxFRy1GUkctRzIxMDAwNSxFRy1MT0UtRzI0MDAwMSxFRy1MT0UtRzI0MDAwMixFRy1MT0UtRzI0MDAwMyxFRy1MT0UtRzI0MDAwNCxFRy1MT0UtRzI0MDAwNSxFRy1MT0UtRzI0MDAwNixFRy1MT0UtRzI0MDAwNyxFRy1MT0UtRzI0MDAwOCxFRy1MT0UtRzI0MDAwOSxFRy1VUEUtRzI5MDAwMSxFRy1VUEUtRzI5MDAwMixFRy1VUEUtRzI5MDAwMyxFRy1VUEUtRzI5MDAwNCxFRy1VUEUtRzI5MDAwNSxFRy1VUEUtRzI5MDAwNixFRy1VUEUtRzI5MDAwNyxFRy1VUEUtRzI5MDAwOCxFRy1VUkctRzMwMDAwMSxFRy1VUkctRzMwMDAwMixFRy1VUkctRzMwMDAwMyxFRy1VUkctRzMwMDAwNAorMSxUdWUgMjUgSmFuIDExLDI5NzIzNy40MDM0NTM4MDE1LDI2NTM4OS42MDM0MTg1NzE3NiwxNTQ0NzguMzUwNDExMjY3MjUsMzE5MzQ3LjMyNzYzNjkxMzE2LDMyMTg5OC44OTg5MTM3NzQyLDUyMDM2MjEuODc5MzEzODk1LDU2NTQ3NzAuNTA1NDEzOTEzLDQ2MzQ2MjQuNTA2NTY5MDksNDAyNTYzOS4wODYwNjM3MDUsNTAzMzA2Mi40ODUxMzQ4MzksMTAyMjA2Ni45ODA0NTc1MjUsNTk3NDgxNC45MDY2MDkyOSwxMTgyNDUwLjMwOTQ4MTA5MzQsMzEzODk1MC40MzkwNDkyMDM0LDI4MDU2NDkuNTUyMjYyMjM5Niw2NDQwNjE0LjE2NTQxNzgyMiw0NjY1OTcwLjY1NTQwMTg0MiwxMzEyMjQzLjk5NTgwMjU1NDgsMzgxOTIyNS43MzM1NTE3MTgzLDI1NDM0OTcuNTEzMDI5OTQyLDM3NTc1NDMuNzg5NjEzMjk0LDQxNzI2NTcuMTM3NjY4NjQyNywzNzExOTU2Ljk5MjA4NjkwNDYsODQ2MTMyNS42NDg5MDMxMTcsNTM5NTkzLjM1OTQ5MTEyNDQsNjc1Ni4xNzM5MjU3NDI4NTM1CisyLFdlZCAyNiBKYW4gMTEsMjk3MjM4LjU5MjQwMzQxNTM2LDI2NTM5MC42NjQ5NzY5ODU0LDE1NDQ3OC45NjgzMjQ2Njg5LDMxOTM0OC42MDUwMjYyMjM3LDMyMTkwMC4xODY1MDkzNjk4LDUyMDM2NDIuNjkzODAxNDExLDU2NTQ3OTMuMTI0NDk1OTM1LDQ2MzQ2NDMuMDQ1MDY3MTE3LDQwMjU2NTUuMTg4NjIwMDQ5LDUwMzMwODIuNjE3Mzg0Nzc5LDEwMjIwNzEuMDY4NzI1NDQ2OCw1OTc0ODM4LjgwNTg2ODkxNywxMTgyNDU1LjAzOTI4MjMzMTIsMzEzODk2Mi45OTQ4NTA5NTk2LDI4MDU2NjAuNzc0ODYwNDQ4Nyw2NDQwNjM5LjkyNzg3NDQ4NCw0NjY1OTg5LjMxOTI4NDQ2MywxMzEyMjQ5LjI0NDc3ODUzOCwzODE5MjQxLjAxMDQ1NDY1MjQsMjU0MzUwNy42ODcwMTk5OTQsMzc1NzU1OC44MTk3ODg0NTIyLDQxNzI2NzMuODI4Mjk3MTkzLDM3MTE5NzEuODM5OTE0ODczLDg0NjEzNTkuNDk0MjA1NzExLDUzOTU5NS41MTc4NjQ1NjIzLDY3NTYuMjAwOTUwNDM4NTU3CiszLFRodSAyNyBKYW4gMTEsMjk3MjM5Ljc4MTM1Nzc4NSwyNjUzOTEuNzI2NTM5NjQ1MzQsMTU0NDc5LjU4NjI0MDU0MjIsMzE5MzQ5Ljg4MjQyMDY0MzgsMzIxOTAxLjQ3NDExMDExNTg0LDUyMDM2NjMuNTA4MzcyMTg3LDU2NTQ4MTUuNzQzNjY4NDMyLDQ2MzQ2NjEuNTgzNjM5Mjk3LDQwMjU2NzEuMjkxMjQwODAzNCw1MDMzMTAyLjc0OTcxNTI0OSwxMDIyMDc1LjE1NzAwOTcyMTcsNTk3NDg2Mi43MDUyMjQxNDEsMTE4MjQ1OS43NjkxMDI0ODg0LDMxMzg5NzUuNTUwNzAyOTM5LDI4MDU2NzEuOTk3NTAzNTQ4LDY0NDA2NjUuNjkwNDM0MTk2LDQ2NjYwMDcuOTgzMjQxNzQxLDEzMTIyNTQuNDkzNzc1NTE3LDM4MTkyNTYuMjg3NDE4Njk0MiwyNTQzNTE3Ljg2MTA1MDc0MiwzNzU3NTczLjg1MDAyMzczMTYsNDE3MjY5MC41MTg5OTI1MDY0LDM3MTE5ODYuNjg3ODAyMjMyMyw4NDYxMzkzLjMzOTY0MzY4OSw1Mzk1OTcuNjc2MjQ2NjMzOCw2NzU2LjIyNzk3NTI0MjM1OAorNCxGcmkgMjggSmFuIDExLDI5NzI0MC45NzAzMTY5MTA0LDI2NTM5Mi43ODgxMDY1NTE1LDE1NDQ4MC4yMDQxNTg4ODcxOCwzMTkzNTEuMTU5ODIwMTczNSwzMjE5MDIuNzYxNzE2MDEyMjYsNTIwMzY4NC4zMjMwMjYyMiw1NjU0ODM4LjM2MjkzMTQwNyw0NjM0NjgwLjEyMjI4NTYzMTUsNDAyNTY4Ny4zOTM5MjU5Njg2LDUwMzMxMjIuODgyMTI2MjQ3NSwxMDIyMDc5LjI0NTMxMDM0OTcsNTk3NDg4Ni42MDQ2NzQ5NjEsMTE4MjQ2NC40OTg5NDE1NjUsMzEzODk4OC4xMDY2MDUxNDE0LDI4MDU2ODMuMjIwMTkxNTM4LDY0NDA2OTEuNDUzMDk2OTU4LDQ2NjYwMjYuNjQ3MjczNjc0LDEzMTIyNTkuNzQyNzkzNDkyLDM4MTkyNzEuNTY0NDQzODQ0LDI1NDM1MjguMDM1MTIyMTg2NCwzNzU3NTg4Ljg4MDMxOTEzMTUsNDE3MjcwNy4yMDk3NTQ1ODI1LDM3MTIwMDEuNTM1NzQ4OTgzNyw4NDYxNDI3LjE4NTIxNzA0Nyw1Mzk1OTkuODM0NjM3MzM4OCw2NzU2LjI1NTAwMDE1NDI1OTUKKzUsU2F0IDI5IEphbiAxMSwyOTcyNDIuMTU5MjgwNzkxNywyNjUzOTMuODQ5Njc3NzAzOSwxNTQ0ODAuODIyMDc5NzAzODIsMzE5MzUyLjQzNzIyNDgxMjgsMzIxOTA0LjA0OTMyNzA1OTEsNTIwMzcwNS4xMzc3NjM1MTIsNTY1NDg2MC45ODIyODQ4NTksNDYzNDY5OC42NjEwMDYxMjEsNDAyNTcwMy40OTY2NzU1NDQ0LDUwMzMxNDMuMDE0NjE3Nzc2LDEwMjIwODMuMzMzNjI3MzMxLDU5NzQ5MTAuNTA0MjIxMzgsMTE4MjQ2OS4yMjg3OTk1NjA4LDMxMzkwMDAuNjYyNTU3NTY4LDI4MDU2OTQuNDQyOTI0NDE4NSw2NDQwNzE3LjIxNTg2Mjc3MSw0NjY2MDQ1LjMxMTM4MDI2MjUsMTMxMjI2NC45OTE4MzI0NjMzLDM4MTkyODYuODQxNTMwMTAyLDI1NDM1MzguMjA5MjM0MzI3LDM3NTc2MDMuOTEwNjc0NjUzLDQxNzI3MjMuOTAwNTgzNDIxMywzNzEyMDE2LjM4Mzc1NTEyNjUsODQ2MTQ2MS4wMzA5MjU3ODgsNTM5NjAxLjk5MzAzNjY3NzQsNjc1Ni4yODIwMjUxNzQyNjA1Cis2LFN1biAzMCBKYW4gMTEsMjk3MjQzLjM0ODI0OTQyODg1LDI2NTM5NC45MTEyNTMxMDI2NSwxNTQ0ODEuNDQwMDAyOTkyMTQsMzE5MzUzLjcxNDYzNDU2MTcsMzIxOTA1LjMzNjk0MzI1NjQ0LDUyMDM3MjUuOTUyNTg0MDY0LDU2NTQ4ODMuNjAxNzI4Nzg4LDQ2MzQ3MTcuMTk5ODAwNzY1LDQwMjU3MTkuNTk5NDg5NTMxLDUwMzMxNjMuMTQ3MTg5ODM0LDEwMjIwODcuNDIxOTYwNjY1NSw1OTc0OTM0LjQwMzg2MzM5NjUsMTE4MjQ3My45NTg2NzY0NzYsMzEzOTAxMy4yMTg1NjAyMTgzLDI4MDU3MDUuNjY1NzAyMTkwMyw2NDQwNzQyLjk3ODczMTYzNCw0NjY2MDYzLjk3NTU2MTUwOCwxMzEyMjcwLjI0MDg5MjQzMDUsMzgxOTMwMi4xMTg2Nzc0NjgsMjU0MzU0OC4zODMzODcxNjQsMzc1NzYxOC45NDEwOTAyOTU2LDQxNzI3NDAuNTkxNDc5MDIzNSwzNzEyMDMxLjIzMTgyMDY2MTYsODQ2MTQ5NC44NzY3Njk5MTEsNTM5NjA0LjE1MTQ0NDY0OTYsNjc1Ni4zMDkwNTAzMDIzNjEKKzcsTW9uIDMxIEphbiAxMSwyOTcyNDQuNTM3MjIyODIxODUsMjY1Mzk1Ljk3MjgzMjc0NzcsMTU0NDgyLjA1NzkyODc1MjE1LDMxOTM1NC45OTIwNDk0MjAyLDMyMTkwNi42MjQ1NjQ2MDQyLDUyMDM3NDYuNzY3NDg3ODc0LDU2NTQ5MDYuMjIxMjYzMTk0LDQ2MzQ3MzUuNzM4NjY5NTY0LDQwMjU3MzUuNzAyMzY3OTI5LDUwMzMxODMuMjc5ODQyNDIzLDEwMjIwOTEuNTEwMzEwMzUzNCw1OTc0OTU4LjMwMzYwMTAxMiwxMTgyNDc4LjY4ODU3MjMxMDgsMzEzOTAyNS43NzQ2MTMwOTI3LDI4MDU3MTYuODg4NTI0ODUzLDY0NDA3NjguNzQxNzAzNTQ5LDQ2NjYwODIuNjM5ODE3NDEsMTMxMjI3NS40ODk5NzMzOTQyLDM4MTkzMTcuMzk1ODg1OTQzLDI1NDM1NTguNTU3NTgwNjk4LDM3NTc2MzMuOTcxNTY2MDYsNDE3Mjc1Ny4yODI0NDEzODkzLDM3MTIwNDYuMDc5OTQ1NTg5LDg0NjE1MjguNzIyNzQ5NDE4LDUzOTYwNi4zMDk4NjEyNTUzLDY3NTYuMzM2MDc1NTM4NTYzCis4LFR1ZSAxIEZlYiAxMSwyOTcyNDUuNzI2MjAwOTcwNzYsMjY1Mzk3LjAzNDQxNjYzOSwxNTQ0ODIuNjc1ODU2OTgzODcsMzE5MzU2LjI2OTQ2OTM4ODQsMzIxOTA3LjkxMjE5MTEwMjQ2LDUyMDM3NjcuNTgyNDc0OTQ0LDU2NTQ5MjguODQwODg4MDc5LDQ2MzQ3NTQuMjc3NjEyNTE4NSw0MDI1NzUxLjgwNTMxMDczODMsNTAzMzIwMy40MTI1NzU1NDMsMTAyMjA5NS41OTg2NzYzOTQ2LDU5NzQ5ODIuMjAzNDM0MjI2LDExODI0ODMuNDE4NDg3MDY1MiwzMTM5MDM4LjMzMDcxNjE5MTMsMjgwNTcyOC4xMTEzOTI0MDcsNjQ0MDc5NC41MDQ3Nzg1MTY1LDQ2NjYxMDEuMzA0MTQ3OTY5LDEzMTIyODAuNzM5MDc1MzU0LDM4MTkzMzIuNjczMTU1NTI2NiwyNTQzNTY4LjczMTgxNDkyODQsMzc1NzY0OS4wMDIxMDE5NDYsNDE3Mjc3My45NzM0NzA1MTksMzcxMjA2MC45MjgxMjk5MDg2LDg0NjE1NjIuNTY4ODY0MzA4LDUzOTYwOC40NjgyODY0OTQ4LDY3NTYuMzYzMTAwODgyODY1Cis5LFdlZCAyIEZlYiAxMSwyOTcyNDYuOTE1MTgzODc1NiwyNjUzOTguMDk2MDA0Nzc2NjYsMTU0NDgzLjI5Mzc4NzY4NzMsMzE5MzU3LjU0Njg5NDQ2NjMsMzIxOTA5LjE5OTgyMjc1MTIsNTIwMzc4OC4zOTc1NDUyNzQsNTY1NDk1MS40NjA2MDM0NDMsNDYzNDc3Mi44MTY2Mjk2MjksNDAyNTc2Ny45MDgzMTc5NTk0LDUwMzMyMjMuNTQ1Mzg5MTkzLDEwMjIwOTkuNjg3MDU4Nzg5Myw1OTc1MDA2LjEwMzM2MzA0LDExODI0ODguMTQ4NDIwNzM5MiwzMTM5MDUwLjg4Njg2OTUxNDQsMjgwNTczOS4zMzQzMDQ4NTMsNjQ0MDgyMC4yNjc5NTY1MzUsNDY2NjExOS45Njg1NTMxODUsMTMxMjI4NS45ODgxOTgzMTA0LDM4MTkzNDcuOTUwNDg2MjE5LDI1NDM1NzguOTA2MDg5ODU2LDM3NTc2NjQuMDMyNjk3OTU0Nyw0MTcyNzkwLjY2NDU2NjQxMjYsMzcxMjA3NS43NzYzNzM2MjEsODQ2MTU5Ni40MTUxMTQ1ODMsNTM5NjEwLjYyNjcyMDM2NzksNjc1Ni4zOTAxMjYzMzUyNjkKKzEwLFRodSAzIEZlYiAxMSwyOTcyNDguMTA0MTcxNTM2MzQsMjY1Mzk5LjE1NzU5NzE2MDY3LDE1NDQ4My45MTE3MjA4NjI0NCwzMTkzNTguODI0MzI0NjUzODMsMzIxOTEwLjQ4NzQ1OTU1MDUsNTIwMzgwOS4yMTI2OTg4NjUsNTY1NDk3NC4wODA0MDkyODYsNDYzNDc5MS4zNTU3MjA4OTUsNDAyNTc4NC4wMTEzODk1OTI3LDUwMzMyNDMuNjc4MjgzMzc1LDEwMjIxMDMuNzc1NDU3NTM3NSw1OTc1MDMwLjAwMzM4NzQ1MywxMTgyNDkyLjg3ODM3MzMzMjgsMzEzOTA2My40NDMwNzMwNjE4LDI4MDU3NTAuNTU3MjYyMTksNjQ0MDg0Ni4wMzEyMzc2MDcsNDY2NjEzOC42MzMwMzMwNiwxMzEyMjkxLjIzNzM0MjI2MywzODE5MzYzLjIyNzg3ODAyMSwyNTQzNTg5LjA4MDQwNTQ4LDM3NTc2NzkuMDYzMzU0MDg1Nyw0MTcyODA3LjM1NTcyOTA3MSwzNzEyMDkwLjYyNDY3NjcyNjgsODQ2MTYzMC4yNjE1MDAyNDMsNTM5NjEyLjc4NTE2Mjg3NDgsNjc1Ni40MTcxNTE4OTU3NzUKKzExLEZyaSA0IEZlYiAxMSwyOTcyNDkuMjkzMTYzOTUzLDI2NTQwMC4yMTkxOTM3OTEwNCwxNTQ0ODQuNTI5NjU2NTA5MzIsMzE5MzYwLjEwMTc1OTk1MTE1LDMyMTkxMS43NzUxMDE1MDAzMyw1MjAzODMwLjAyNzkzNTcxNSw1NjU0OTk2LjcwMDMwNTYwNyw0NjM0ODA5Ljg5NDg4NjMxOSw0MDI1ODAwLjExNDUyNTYzOCw1MDMzMjYzLjgxMTI1ODA4OCwxMDIyMTA3Ljg2Mzg3MjYzOTQsNTk3NTA1My45MDM1MDc0NjYsMTE4MjQ5Ny42MDgzNDQ4NDYyLDMxMzkwNzUuOTk5MzI2ODM0LDI4MDU3NjEuNzgwMjY0NDE5LDY0NDA4NzEuNzk0NjIxNzMyLDQ2NjYxNTcuMjk3NTg3NTkxLDEzMTIyOTYuNDg2NTA3MjEyNSwzODE5Mzc4LjUwNTMzMDkzMywyNTQzNTk5LjI1NDc2MTgwMiwzNzU3Njk0LjA5NDA3MDMzOSw0MTcyODI0LjA0Njk1ODQ5NCwzNzEyMTA1LjQ3MzAzOTIyNTcsODQ2MTY2NC4xMDgwMjEyOSw1Mzk2MTQuOTQzNjE0MDE1NSw2NzU2LjQ0NDE3NzU2NDM4MgorMTIsU2F0IDUgRmViIDExLDI5NzI1MC40ODIxNjExMjU2MywyNjU0MDEuMjgwNzk0NjY3ODQsMTU0NDg1LjE0NzU5NDYyNzk1LDMxOTM2MS4zNzkyMDAzNTgyLDMyMTkxMy4wNjI3NDg2MDA3LDUyMDM4NTAuODQzMjU1ODI3LDU2NTUwMTkuMzIwMjkyNDA5LDQ2MzQ4MjguNDM0MTI1ODk4LDQwMjU4MTYuMjE3NzI2MDk2LDUwMzMyODMuOTQ0MzEzMzMyLDEwMjIxMTEuOTUyMzA0MDk0OSw1OTc1MDc3LjgwMzcyMzA4LDExODI1MDIuMzM4MzM1Mjc5NiwzMTM5MDg4LjU1NTYzMDgzMTUsMjgwNTc3My4wMDMzMTE1NCw2NDQwODk3LjU1ODEwODkxMSw0NjY2MTc1Ljk2MjIxNjc4MSwxMzEyMzAxLjczNTY5MzE1ODYsMzgxOTM5My43ODI4NDQ5NTQsMjU0MzYwOS40MjkxNTg4MjEyLDM3NTc3MDkuMTI0ODQ2NzE1NSw0MTcyODQwLjczODI1NDY4MTcsMzcxMjEyMC4zMjE0NjExMTgsODQ2MTY5Ny45NTQ2Nzc3MjEsNTM5NjE3LjEwMjA3Mzc4OTksNjc1Ni40NzEyMDMzNDEwOTIKKzEzLFN1biA2IEZlYiAxMSwyOTcyNTEuNjcxMTYzMDU0MywyNjU0MDIuMzQyMzk5NzkxLDE1NDQ4NS43NjU1MzUyMTgzMiwzMTkzNjIuNjU2NjQ1ODc0OTYsMzIxOTE0LjM1MDQwMDg1MTc1LDUyMDM4NzEuNjU4NjU5Miw1NjU1MDQxLjk0MDM2OTY5LDQ2MzQ4NDYuOTczNDM5NjM1LDQwMjU4MzIuMzIwOTkwOTY3LDUwMzMzMDQuMDc3NDQ5MTA5LDEwMjIxMTYuMDQwNzUxOTA0MSw1OTc1MTAxLjcwNDAzNDI5NSwxMTgyNTA3LjA2ODM0NDYzMjksMzEzOTEwMS4xMTE5ODUwNTQsMjgwNTc4NC4yMjY0MDM1NTMsNjQ0MDkyMy4zMjE2OTkxNDMsNDY2NjE5NC42MjY5MjA2MywxMzEyMzA2Ljk4NDkwMDEwMTMsMzgxOTQwOS4wNjA0MjAwODU3LDI1NDM2MTkuNjAzNTk2NTM4LDM3NTc3MjQuMTU1NjgzMjE1LDQxNzI4NTcuNDI5NjE3NjM0NSwzNzEyMTM1LjE2OTk0MjQwMzcsODQ2MTczMS44MDE0Njk1NCw1Mzk2MTkuMjYwNTQyMTk4Miw2NzU2LjQ5ODIyOTIyNTkwNgorMTQsTW9uIDcgRmViIDExLDI5NzI1Mi44NjAxNjk3Mzg5NCwyNjU0MDMuNDA0MDA5MTYwNiwxNTQ0ODYuMzgzNDc4MjgwNDUsMzE5MzYzLjkzNDA5NjUwMTU2LDMyMTkxNS42MzgwNTgyNTMzMyw1MjAzODkyLjQ3NDE0NTgzNSw1NjU1MDY0LjU2MDUzNzQ1MSw0NjM0ODY1LjUxMjgyNzUyOSw0MDI1ODQ4LjQyNDMyMDI1MSw1MDMzMzI0LjIxMDY2NTQxOSwxMDIyMTIwLjEyOTIxNjA2NzEsNTk3NTEyNS42MDQ0NDExMTEsMTE4MjUxMS43OTgzNzI5MDYyLDMxMzkxMTMuNjY4Mzg5NTAyLDI4MDU3OTUuNDQ5NTQwNDU4Niw2NDQwOTQ5LjA4NTM5MjQzLDQ2NjYyMTMuMjkxNjk5MTM4LDEzMTIzMTIuMjM0MTI4MDQxLDM4MTk0MjQuMzM4MDU2MzI3MywyNTQzNjI5Ljc3ODA3NDk1MjMsMzc1NzczOS4xODY1Nzk4Mzc1LDQxNzI4NzQuMTIxMDQ3MzUzLDM3MTIxNTAuMDE4NDgzMDgzLDg0NjE3NjUuNjQ4Mzk2NzQ1LDUzOTYyMS40MTkwMTkyNDA0LDY3NTYuNTI1MjU1MjE4ODIyCisxNSxUdWUgOCBGZWIgMTEsMjk3MjU0LjA0OTE4MTE3OTYsMjY1NDA0LjQ2NTYyMjc3NjYsMTU0NDg3LjAwMTQyMzgxNDM2LDMxOTM2NS4yMTE1NTIyMzc5LDMyMTkxNi45MjU3MjA4MDU1NCw1MjAzOTEzLjI4OTcxNTczMTUsNTY1NTA4Ny4xODA3OTU2OTMsNDYzNDg4NC4wNTIyODk1OCw0MDI1ODY0LjUyNzcxMzk0ODQsNTAzMzM0NC4zNDM5NjIyNjEsMTAyMjEyNC4yMTc2OTY1ODQxLDU5NzUxNDkuNTA0OTQzNTI5LDExODI1MTYuNTI4NDIwMDk5OCwzMTM5MTI2LjIyNDg0NDE3NTQsMjgwNTgwNi42NzI3MjIyNTY3LDY0NDA5NzQuODQ5MTg4NzcyLDQ2NjYyMzEuOTU2NTUyMzA0LDEzMTIzMTcuNDgzMzc2OTc3NSwzODE5NDM5LjYxNTc1MzY3OTUsMjU0MzYzOS45NTI1OTQwNjQ2LDM3NTc3NTQuMjE3NTM2NTg0LDQxNzI4OTAuODEyNTQzODM3LDM3MTIxNjQuODY3MDgzMTU3LDg0NjE3OTkuNDk1NDU5MzM5LDUzOTYyMy41Nzc1MDQ5MTY1LDY3NTYuNTUyMjgxMzE5ODQzCisxNixXZWQgOSBGZWIgMTEsMjk3MjU1LjIzODE5NzM3NjMsMjY1NDA1LjUyNzI0MDYzOTEsMTU0NDg3LjYxOTM3MTgyMDA3LDMxOTM2Ni40ODkwMTMwODQxNSwzMjE5MTguMjEzMzg4NTA4NCw1MjAzOTM0LjEwNTM2ODg5MSw1NjU1MTA5LjgwMTE0NDQxNiw0NjM0OTAyLjU5MTgyNTc4OSw0MDI1ODgwLjYzMTE3MjA1OSw1MDMzMzY0LjQ3NzMzOTYzNzUsMTAyMjEyOC4zMDYxOTM0NTQ5LDU5NzUxNzMuNDA1NTQxNTQ4NSwxMTgyNTIxLjI1ODQ4NjIxMzQsMzEzOTEzOC43ODEzNDkwNzQ2LDI4MDU4MTcuODk1OTQ4OTQ3NCw2NDQxMDAwLjYxMzA4ODE2OSw0NjY2MjUwLjYyMTQ4MDEzMSwxMzEyMzIyLjczMjY0NjkxMSwzODE5NDU0Ljg5MzUxMjE0MjQsMjU0MzY1MC4xMjcxNTM4NzUsMzc1Nzc2OS4yNDg1NTM0NTQsNDE3MjkwNy41MDQxMDcwODcsMzcxMjE3OS43MTU3NDI2MjUzLDg0NjE4MzMuMzQyNjU3MzIsNTM5NjI1LjczNTk5OTIyNjUsNjc1Ni41NzkzMDc1Mjg5Njg1CisxNyxUaHUgMTAgRmViIDExLDI5NzI1Ni40MjcyMTgzMjkxLDI2NTQwNi41ODg4NjI3NDgwNiwxNTQ0ODguMjM3MzIyMjk3NTYsMzE5MzY3Ljc2NjQ3OTA0MDIsMzIxOTE5LjUwMTA2MTM2Miw1MjAzOTU0LjkyMTEwNTMxMiw1NjU1MTMyLjQyMTU4MzYyMSw0NjM0OTIxLjEzMTQzNjE1Niw0MDI1ODk2LjczNDY5NDU4NCw1MDMzMzg0LjYxMDc5NzU0NywxMDIyMTMyLjM5NDcwNjY3OTYsNTk3NTE5Ny4zMDYyMzUxNzEsMTE4MjUyNS45ODg1NzEyNDczLDMxMzkxNTEuMzM3OTA0MiwyODA1ODI5LjExOTIyMDUzMSw2NDQxMDI2LjM3NzA5MDYyMiw0NjY2MjY5LjI4NjQ4MjYxNiwxMzEyMzI3Ljk4MTkzNzg0MTUsMzgxOTQ3MC4xNzEzMzE3MTYyLDI1NDM2NjAuMzAxNzU0MzgzNCwzNzU3Nzg0LjI3OTYzMDQ0OCw0MTcyOTI0LjE5NTczNzEwMzUsMzcxMjE5NC41NjQ0NjE0ODgzLDg0NjE4NjcuMTg5OTkwNjksNTM5NjI3Ljg5NDUwMjE3MDUsNjc1Ni42MDYzMzM4NDYxOTgKKzE4LEZyaSAxMSBGZWIgMTEsMjk3MjU3LjYxNjI0NDcyMzczLDI2NTQwNy42NTA0ODk3MTU4LDE1NDQ4OC44NTUyNzU2MDMyNywzMTkzNjkuMDQzOTUwODQyOSwzMjE5MjAuNzg4NzQwMTA4OTUsNTIwMzk3NS43MzY5MzcwMDIsNTY1NTE1NS4wNDIxMjYzNTQsNDYzNDkzOS42NzExMzEzNzQsNDAyNTkxMi44MzgyOTA4MTA2LDUwMzM0MDQuNzQ0MzQ3NjAyLDEwMjIxMzYuNDgzMjM4NjE2Niw1OTc1MjIxLjIwNzAzODE4MSwxMTgyNTMwLjcxODY3NzkyOTgsMzEzOTE2My44OTQ1MTY3OTQsMjgwNTg0MC4zNDI1NDM0ODE0LDY0NDEwNTIuMTQxMjEwOTksNDY2NjI4Ny45NTE1NzA1MjgsMTMxMjMzMy4yMzEyNTI3OTcsMzgxOTQ4NS40NDkyMjEyMTMzLDI1NDM2NzAuNDc2NDAxNDU5LDM3NTc3OTkuMzEwNzc2MjM2NSw0MTcyOTQwLjg4NzQ0MzUxMzYsMzcxMjIwOS40MTMyNDgzMTAzLDg0NjE5MDEuMDM3NDc4OTcyLDUzOTYzMC4wNTMwMTQ5OTM0LDY3NTYuNjMzMzYwMjg3MTIxCisxOSxTYXQgMTIgRmViIDExLDI5NzI1OC44MDUyNzYwMDcxLDI2NTQwOC43MTIxMjEwNDg1LDE1NDQ4OS40NzMyMzE0NDk3MiwzMTkzNzAuMzIxNDI3ODk4LDMyMTkyMi4wNzY0MjQxNTAyNiw1MjAzOTk2LjU1Mjg1NDI3Nyw1NjU1MTc3LjY2Mjc2MjA5Miw0NjM0OTU4LjIxMDkwMjgxOSw0MDI1OTI4Ljk0MTk1MzI0OCw1MDMzNDI0Ljg3Nzk4MDQzNywxMDIyMTQwLjU3MTc4NzM2MzcsNTk3NTI0NS4xMDc5Mzk0NiwxMTgyNTM1LjQ0ODgwNDA2MDIsMzEzOTE3Ni40NTExODEwMTUsMjgwNTg1MS41NjU5MTI1NzY0LDY0NDEwNzcuOTA1NDM3Mjg4LDQ2NjYzMDYuNjE2NzM1MTgxLDEzMTIzMzguNDgwNTg5MzM1LDM4MTk1MDAuNzI3MTczNTI2MywyNTQzNjgwLjY1MTA5MDM2NzcsMzc1NzgxNC4zNDE5ODM4MjU0LDQxNzI5NTcuNTc5MjE4NTUyLDM3MTIyMjQuMjYyMDk2MTg0LDg0NjE5MzQuODg1MTA2NDIsNTM5NjMyLjIxMTUzNjY5MTIsNjc1Ni42NjAzODY4MzkxNjQKKzIwLFN1biAxMyBGZWIgMTEsMjk3MjU5Ljk5NDMxMjQ1OTU0LDI2NTQwOS43NzM3NTY5OTYzLDE1NDQ5MC4wOTExODk5ODI1NywzMTkzNzEuNTk4OTEwNTA2NjQsMzIxOTIzLjM2NDExMzc4OTQ2LDUyMDQwMTcuMzY4ODYyMDQ0LDU2NTUyMDAuMjgzNDk2MTY4LDQ2MzQ5NzYuNzUwNzU0ODYyLDQwMjU5NDUuMDQ1Njg1NjkxOCw1MDMzNDQ1LjAxMTcwMDc5OSwxMDIyMTQ0LjY2MDM1Mzg4NDgsNTk3NTI2OS4wMDg5NDQ2NDMsMTE4MjU0MC4xNzg5NTA3NTM4LDMxMzkxODkuMDA3ODk5ODIyNywyODA1ODYyLjc4OTMzMDQ2MjUsNjQ0MTEwMy42Njk3NzU1OSw0NjY2MzI1LjI4MTk4MDk3NywxMzEyMzQzLjcyOTk0ODY5MzQsMzgxOTUxNi4wMDUxOTIyNTYsMjU0MzY5MC44MjU4MjM1MDg3LDM3NTc4MjkuMzczMjU2NzU5LDQxNzI5NzQuMjcxMDY2MTU0NCwzNzEyMjM5LjExMTAwODYwODcsODQ2MTk2OC43MzI4ODEwMTEsNTM5NjM0LjM3MDA2Nzc3MjYsNjc1Ni42ODc0MTM1MDg2OTgKKzIxLE1vbiAxNCBGZWIgMTEsMjk3MjYxLjE4MzM1NDAwMDMsMjY1NDEwLjgzNTM5NzQ4NzMzLDE1NDQ5MC43MDkxNTExNTk5NCwzMTkzNzIuODc2Mzk4NTgyMiwzMjE5MjQuNjUxODA4OTM5MjMsNTIwNDAzOC4xODQ5NTg4OTMsNTY1NTIyMi45MDQzMjcwNDgsNDYzNDk5NS4yOTA2ODYyNDQsNDAyNTk2MS4xNDk0ODcwNTA3LDUwMzM0NjUuMTQ1NTA3MzIxLDEwMjIxNDguNzQ4OTM3OTAyNiw1OTc1MjkyLjkxMDA1MjEwOSwxMTgyNTQ0LjkwOTExNzY4OTYsMzEzOTIwMS41NjQ2NzIzNjYzLDI4MDU4NzQuMDEyNzk2Mzc4Nyw2NDQxMTI5LjQzNDIyNDE0OSw0NjY2MzQzLjk0NzMwNjY1LDEzMTIzNDguOTc5MzMwNTE2LDM4MTk1MzEuMjgzMjc2MzY3LDI1NDM3MDEuMDAwNjAwMTkxOCwzNzU3ODQ0LjQwNDU5NDAxNzcsNDE3Mjk5MC45NjI5ODUxODgsMzcxMjI1My45NTk5ODQ1Nzg3LDg0NjIwMDIuNTgwODAwNDUzLDUzOTYzNi41Mjg2MDgwOTEzLDY3NTYuNzE0NDQwMjkzODkyCisyMixUdWUgMTUgRmViIDExLDI5NzI2Mi4zNzI0MDAzODcxMywyNjU0MTEuODk3MDQyMzA1MTUsMTU0NDkxLjMyNzExNDg1NTg0LDMxOTM3NC4xNTM4OTE4NjQyMywzMjE5MjUuOTM5NTA5MzM3LDUyMDQwNTkuMDAxMTQwNTc4LDU2NTUyNDUuNTI1MjUwMTIxLDQ2MzUwMTMuODMwNjkzMTg3LDQwMjU5NzcuMjUzMzU0MDQxNCw1MDMzNDg1LjI3OTM5NTksMTAyMjE1Mi44Mzc1Mzg1ODM3LDU5NzUzMTYuODExMjU2OTg0LDExODI1NDkuNjM5MzAzOTAzNiwzMTM5MjE0LjEyMTQ5NjA4NTUsMjgwNTg4NS4yMzYzMDgwMzY0LDY0NDExNTUuMTk4Nzc3NzEzLDQ2NjYzNjIuNjEyNzA4MzkzNSwxMzEyMzU0LjIyODczMzczMjYsMzgxOTU0Ni41NjE0MjI3NDQ4LDI1NDM3MTEuMTc1NDE4MzQyNSwzNzU3ODU5LjQzNTk5MjUzNzUsNDE3MzAwNy42NTQ5NzIyNTA2LDM3MTIyNjguODA5MDIxMDY3LDg0NjIwMzYuNDI4ODU3ODQ0LDUzOTYzOC42ODcxNTcyMDczLDY3NTYuNzQxNDY3MTg5MjM1CisyMyxXZWQgMTYgRmViIDExLDI5NzI2My41NjE0NTE2MjI2MywyNjU0MTIuOTU4NjkxNDUyMTYsMTU0NDkxLjk0NTA4MTA3MTY3LDMxOTM3NS40MzEzOTAzNTU2LDMyMTkyNy4yMjcyMTQ5ODU4LDUyMDQwNzkuODE3NDA3MTQ4LDU2NTUyNjguMTQ2MjY1NDM3LDQ2MzUwMzIuMzcwNzc1NzMzLDQwMjU5OTMuMzU3Mjg2NzAxLDUwMzM1MDUuNDEzMzY2NTgxLDEwMjIxNTYuOTI2MTU1OTM3Myw1OTc1MzQwLjcxMjU1OTMyNSwxMTgyNTU0LjM2OTUwOTQwNjIsMzEzOTIyNi42NzgzNzEwMDksMjgwNTg5Ni40NTk4NjU0NjE2LDY0NDExODAuOTYzNDM2MzM5LDQ2NjYzODEuMjc4MTg2MjUyLDEzMTIzNTkuNDc4MTU4MzU1NSwzODE5NTYxLjgzOTYzMTQyNDMsMjU0MzcyMS4zNTAyNzc5ODQsMzc1Nzg3NC40Njc0NTIzNTMsNDE3MzAyNC4zNDcwMjczNzk2LDM3MTIyODMuNjU4MTE4MTA3LDg0NjIwNzAuMjc3MDUzMjYxLDUzOTY0MC44NDU3MTUxMjU0LDY3NTYuNzY4NDk0MTk0Nzg4CisyNCxUaHUgMTcgRmViIDExLDI5NzI2NC43NTA1MDc1OTIzNCwyNjU0MTQuMDIwMzQ0ODI2MSwxNTQ0OTIuNTYzMDQ5NzQ3OSwzMTkzNzYuNzA4ODkzOTMzMywzMjE5MjguNTE0OTI1NzYxNiw1MjA0MTAwLjYzMzc1NjU5Nyw1NjU1MjkwLjc2NzM3MDgxNiw0NjM1MDUwLjkxMDkzMjA5NSw0MDI2MDA5LjQ2MTI4MzQ3Nyw1MDMzNTI1LjU0NzQxNzQyNiwxMDIyMTYxLjAxNDc4OTU2OTQsNTk3NTM2NC42MTM5NTY4MjcsMTE4MjU1OS4wOTk3MzM3NDIyLDMxMzkyMzkuMjM1Mjk1OTI3NiwyODA1OTA3LjY4MzQ2NzU3Myw2NDQxMjA2LjcyODE5NzU0NSw0NjY2Mzk5Ljk0MzczODQyNiwxMzEyMzY0LjcyNzYwMzg3ODYsMzgxOTU3Ny4xMTc5MDA5MzI3LDI1NDM3MzEuNTI1MTc4MTM3LDM3NTc4ODkuNDk4OTcyMDE1NSw0MTczMDQxLjAzOTE0ODk2NzcsMzcxMjI5OC41MDcyNzQyNjczLDg0NjIxMDQuMTI1MzgzNDQsNTM5NjQzLjAwNDI4MTYzNzcsNjc1Ni43OTU1MjEzMDc5NDgKKzI1LEZyaSAxOCBGZWIgMTEsMjk3MjY1LjkzOTU2ODIwMDMsMjY1NDE1LjA4MjAwMjM0MTQsMTU0NDkzLjE4MTAyMDgzNDc1LDMxOTM3Ny45ODY0MDI0OTQzLDMyMTkyOS44MDI2NDE1NjA1LDUyMDQxMjEuNDUwMTg3MjQ3LDU2NTUzMTMuMzg4NTY0NDM4LDQ2MzUwNjkuNDUxMTYwNzc5LDQwMjYwMjUuNTY1MzQzMDczLDUwMzM1NDUuNjgxNTQ2ODA4LDEwMjIxNjUuMTAzNDM5MTUwNyw1OTc1Mzg4LjUxNTQ0NzU2MzUsMTE4MjU2My44Mjk5NzY1MywzMTM5MjUxLjc5MjI2OTgyODMsMjgwNTkxOC45MDcxMTM0NjYsNjQ0MTIzMi40OTMwNTkyNTYsNDY2NjQxOC42MDkzNjM0MTIsMTMxMjM2OS45NzcwNjk4NzkyLDM4MTk1OTIuMzk2MjMwMDM5LDI1NDM3NDEuNzAwMTE3OTgsMzc1NzkwNC41MzA1NTAzMTMsNDE3MzA1Ny43MzEzMzU2NjksMzcxMjMxMy4zNTY0ODgzNTIsODQ2MjEzNy45NzM4NDU2NTksNTM5NjQ1LjE2Mjg1NjU3MDMsNjc1Ni44MjI1NDg1MjY1MzYKKzI2LFNhdCAxOSBGZWIgMTEsMjk3MjY3LjEyODYzMzEyMTQsMjY1NDE2LjE0MzY2MzcwNzYsMTU0NDkzLjc5ODk5NDE2MzE0LDMxOTM3OS4yNjM5MTU2ODkxNCwzMjE5MzEuMDkwMzYyMDMwMyw1MjA0MTQyLjI2NjY5MzQwNCw1NjU1MzM2LjAwOTg0MDExMiw0NjM1MDg3Ljk5MTQ1NjcxMzUsNDAyNjA0MS42Njk0NjEwODI3LDUwMzM1NjUuODE1NzQ5MjIyLDEwMjIxNjkuMTkyMTAzNTYyNiw1OTc1NDEyLjQxNzAyNDk5OCwxMTgyNTY4LjU2MDIzNjQ3NTQsMzEzOTI2NC4zNDkyODkyNzY2LDI4MDU5MzAuMTMwODAwMDY5Myw2NDQxMjU4LjI1ODAxNDQyMyw0NjY2NDM3LjI3NTA1NjEwMSwxMzEyMzc1LjIyNjU1NDkyMDcsMzgxOTYwNy42NzQ2MTQ1NjQ1LDI1NDM3NTEuODc1MDk0NzMwNCwzNzU3OTE5LjU2MjE4MzEzNDMsNDE3MzA3NC40MjM1ODI5MTcsMzcxMjMyOC4yMDU3NTYyOTg3LDg0NjIxNzEuODIyNDMwNjUzLDUzOTY0Ny4zMjE0MzkzMzI2LDY3NTYuODQ5NTc1ODQzMTU5CisyNyxTdW4gMjAgRmViIDExLDI5NzI2OC4zMTc3MDI5MjUyNCwyNjU0MTcuMjA1MzI5NDMzNSwxNTQ0OTQuNDE2OTcwMDI5MiwzMTkzODAuNTQxNDM0MTMwMSwzMjE5MzIuMzc4MDg3Nzg4MDYsNTIwNDE2My4wODMyODUwNDMsNTY1NTM1OC42MzEyMDg2OCw0NjM1MTA2LjUzMTgyODc4Myw0MDI2MDU3Ljc3MzY0NTIyMyw1MDMzNTg1Ljk1MDAzNDMxODUsMTAyMjE3My4yODA3ODQ3NjQ2LDU5NzU0MzYuMzE4NzAwNTgzLDExODI1NzMuMjkwNTE1ODQ1NiwzMTM5Mjc2LjkwNjM2MDI5LDI4MDU5NDEuMzU0NTMyNzYzLDY0NDEyODQuMDIzMDc1MzkzLDQ2NjY0NTUuOTQwODI1NDQxLDEzMTIzODAuNDc2MDYxNTE5MiwzODE5NjIyLjk1MzA2MTgzMDMsMjU0Mzc2Mi4wNTAxMTMyNjM1LDM3NTc5MzQuNTkzODc3NjgyNSw0MTczMDkxLjExNTg5ODcxMSwzNzEyMzQzLjA1NTA4NTIyMyw4NDYyMjA1LjY3MTE1NDY0Niw1Mzk2NDkuNDgwMDMwOTU5LDY3NTYuODc2NjAzMjcwNzcKKzI4LE1vbiAyMSBGZWIgMTEsMjk3MjY5LjUwNjc3NzU1Nzk1LDI2NTQxOC4yNjY5OTk0NzA3LDE1NDQ5NS4wMzQ5NDg0MDQ4OCwzMTkzODEuODE4OTU3NzU5MDcsMzIxOTMzLjY2NTgxODc3NTI1LDUyMDQxODMuODk5OTYxMjE4LDU2NTUzODEuMjUyNjY5MTEzLDQ2MzUxMjUuMDcyMjc2MTQ1LDQwMjYwNzMuODc3ODk0NzYyNCw1MDMzNjA2LjA4NDQwMTE3OSwxMDIyMTc3LjM2OTQ4MjU3MDcsNTk3NTQ2MC4yMjA0NzMyMzMsMTE4MjU3OC4wMjA4MTQ0MjU1LDMxMzkyODkuNDYzNDgyMjk3NSwyODA1OTUyLjU3ODMxMTAzNiw2NDQxMzA5Ljc4ODI0MDk5NSw0NjY2NDc0LjYwNjY3MDU4MywxMzEyMzg1LjcyNTU4OTQzNiwzODE5NjM4LjIzMTU3MTE0MTYsMjU0Mzc3Mi4yMjUxNzMxMTc2LDM3NTc5NDkuNjI1NjMzMjc0LDQxNzMxMDcuODA4MjgyMjkzNCwzNzEyMzU3LjkwNDQ3NDQ1MSw4NDYyMjM5LjUyMDAxNjA5OCw1Mzk2NTEuNjM4NjMxMzUxNSw2NzU2LjkwMzYzMDgwODEzOAorMjksVHVlIDIyIEZlYiAxMSwyOTcyNzAuNjk1ODU2NjI0OSwyNjU0MTkuMzI4NjczNDY3MTYsMTU0NDk1LjY1MjkyOTA4NTEsMzE5MzgzLjA5NjQ4NjE1MjEsMzIxOTM0Ljk1MzU1NDU2NDYsNTIwNDIwNC43MTY3MTUwMjIsNTY1NTQwMy44NzQyMTM5MDUsNDYzNTE0My42MTI3OTI2NDgsNDAyNjA4OS45ODIyMDQzNTcsNTAzMzYyNi4yMTg4NDMxMjUsMTAyMjE4MS40NTgxOTU2MjQyLDU5NzU0ODQuMTIyMzM1MDE3LDExODI1ODIuNzUxMTMwNjQ1NCwzMTM5MzAyLjAyMDY1MTEzMjMsMjgwNTk2My44MDIxMzExNjQ0LDY0NDEzMzUuNTUzNTAyNjgsNDY2NjQ5My4yNzI1ODUzMzIsMTMxMjM5MC45NzUxMzY5MjksMzgxOTY1My41MTAxMzc0Mjg1LDI1NDM3ODIuNDAwMjcwOTE2LDM3NTc5NjQuNjU3NDQ0OTIyLDQxNzMxMjQuNTAwNzI4MTI0LDM3MTIzNzIuNzUzOTE5MDU0OCw4NDYyMjczLjM2OTAwMzc4LDUzOTY1My43OTcyMzk3OTM4LDY3NTYuOTMwNjU4NDQ2Mjk3CiszMCxXZWQgMjMgRmViIDExLDI5NzI3MS44ODQ5NDA1MDA5NSwyNjU0MjAuMzkwMzUxNzU3NCwxNTQ0OTYuMjcwOTEyMjY0NjUsMzE5Mzg0LjM3NDAxOTcxMTg2LDMyMTkzNi4yNDEyOTU1NjIsNTIwNDIyNS41MzM1NTMwMTYsNTY1NTQyNi40OTU4NTAxODgsNDYzNTE2Mi4xNTMzODQxMzUsNDAyNjEwNi4wODY1NzkwODM1LDUwMzM2NDYuMzUzMzY2NSwxMDIyMTg1LjU0NjkyNTIxMzksNTk3NTUwOC4wMjQyOTM0NjcsMTE4MjU4Ny40ODE0NjU5OTYyLDMxMzkzMTQuNTc3ODcwNzUyNywyODA1OTc1LjAyNTk5NjY4NTUsNjQ0MTM2MS4zMTg4Njg1NjcsNDY2NjUxMS45Mzg1NzU1NzMsMTMxMjM5Ni4yMjQ3MDU2NTI4LDM4MTk2NjguNzg4NzY1NTA3OCwyNTQzNzkyLjU3NTQwOTg2NjQsMzc1Nzk3OS42ODkzMTczNjMzLDQxNzMxNDEuMTkzMjQxNDY0LDM3MTIzODcuNjAzNDIzNzE0Niw4NDYyMzA3LjIxODEyODM1OSw1Mzk2NTUuOTU1ODU2OTY2Miw2NzU2Ljk1NzY4NjE5Mzc2NAorMzEsVGh1IDI0IEZlYiAxMSwyOTcyNzMuMDc0MDI5MTMsMjY1NDIxLjQ1MjAzNDI5MTM1LDE1NDQ5Ni44ODg4OTc5MTQzOCwzMTkzODUuNjUxNTU4Mzc4MiwzMjE5MzcuNTI5MDQxNzA2OCw1MjA0MjQ2LjM1MDQ3NDIyLDU2NTU0NDkuMTE3NTc2ODkzLDQ2MzUxODAuNjk0MDQ5NzMzLDQwMjYxMjIuMTkxMDE4MTgyMyw1MDMzNjY2LjQ4Nzk3MDM1NywxMDIyMTg5LjYzNTY3MTE0Nyw1OTc1NTMxLjkyNjM0NzQ2LDExODI1OTIuMjExODIwMjU1MywzMTM5MzI3LjEzNTE0MDU2NywyODA1OTg2LjI0OTkwNzA3MTIsNjQ0MTM4Ny4wODQzMzc0NDUsNDY2NjUzMC42MDQ2NDA0MjYsMTMxMjQwMS40NzQyOTUzNjA1LDM4MTk2ODQuMDY3NDU0NjU5LDI1NDM4MDIuNzUwNTg5NDg5LDM3NTc5OTQuNzIxMjQ5ODksNDE3MzE1Ny44ODU4MjE1MjgsMzcxMjQwMi40NTI5ODc3MzEsODQ2MjM0MS4wNjczODgyMzgsNTM5NjU4LjExNDQ4Mjc2NzEsNjc1Ni45ODQ3MTQwNDkyNjc1CiszMixGcmkgMjUgRmViIDExLDI5NzI3NC4yNjMxMjI1Nzg4NSwyNjU0MjIuNTEzNzIxMTI4NywxNTQ0OTcuNTA2ODg2MDY5MDgsMzE5Mzg2LjkyOTEwMjIyMjksMzIxOTM4LjgxNjc5MzA3MTM0LDUyMDQyNjcuMTY3NDc5ODAyLDU2NTU0NzEuNzM5Mzk1Mjk0LDQ2MzUxOTkuMjM0NzkwNDgzNSw0MDI2MTM4LjI5NTUyMjU1ODUsNTAzMzY4Ni42MjI2NTU4Mjg1LDEwMjIxOTMuNzI0NDMzNjUzNSw1OTc1NTU1LjgyODQ5ODMzNjUsMTE4MjU5Ni45NDIxOTM2ODg0LDMxMzkzMzkuNjkyNDYxMjgxLDI4MDU5OTcuNDczODYyOTUxNiw2NDQxNDEyLjg0OTkxMDc2LDQ2NjY1NDkuMjcwNzgwOTQxLDEzMTI0MDYuNzIzOTA2MzQ2NiwzODE5Njk5LjM0NjIwNTc0MDIsMjU0MzgxMi45MjU4MTAzNTUsMzc1ODAwOS43NTMyNDMzNDc2LDQxNzMxNzQuNTc4NDY5MjUzNiwzNzEyNDE3LjMwMjYxMTkzODcsODQ2MjM3NC45MTY3ODUzMjIsNTM5NjYwLjI3MzExNzMxNzYsNjc1Ny4wMTE3NDIwMTQzMjUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvUG9wdWxhdGlvbkdyb3d0aFNFSVJfRkRfUmVmZXJlbmNlL0h1bWFuUG9wdWxhdGlvbk1vZGVsL2h1bWFuL0RlYXRoc18wLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvUG9wdWxhdGlvbkdyb3d0aFNFSVJfRkRfUmVmZXJlbmNlL0h1bWFuUG9wdWxhdGlvbk1vZGVsL2h1bWFuL0RlYXRoc18wLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYzI0NDAxCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Qb3B1bGF0aW9uR3Jvd3RoU0VJUl9GRF9SZWZlcmVuY2UvSHVtYW5Qb3B1bGF0aW9uTW9kZWwvaHVtYW4vRGVhdGhzXzAuY3N2CkBAIC0wLDAgKzEgQEAKK2l0ZXJhdGlvbix0aW1lLApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Qb3B1bGF0aW9uR3Jvd3RoU0VJUl9GRF9SZWZlcmVuY2UvSHVtYW5Qb3B1bGF0aW9uTW9kZWwvaHVtYW4vRGVhdGhzXzEuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Qb3B1bGF0aW9uR3Jvd3RoU0VJUl9GRF9SZWZlcmVuY2UvSHVtYW5Qb3B1bGF0aW9uTW9kZWwvaHVtYW4vRGVhdGhzXzEuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJjMjQ0MDEKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1BvcHVsYXRpb25Hcm93dGhTRUlSX0ZEX1JlZmVyZW5jZS9IdW1hblBvcHVsYXRpb25Nb2RlbC9odW1hbi9EZWF0aHNfMS5jc3YKQEAgLTAsMCArMSBAQAoraXRlcmF0aW9uLHRpbWUsCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1BvcHVsYXRpb25Hcm93dGhTRUlSX0ZEX1JlZmVyZW5jZS9IdW1hblBvcHVsYXRpb25Nb2RlbC9odW1hbi9EZWF0aHNfMi5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1BvcHVsYXRpb25Hcm93dGhTRUlSX0ZEX1JlZmVyZW5jZS9IdW1hblBvcHVsYXRpb25Nb2RlbC9odW1hbi9EZWF0aHNfMi5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzNkYWIzNQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvUG9wdWxhdGlvbkdyb3d0aFNFSVJfRkRfUmVmZXJlbmNlL0h1bWFuUG9wdWxhdGlvbk1vZGVsL2h1bWFuL0RlYXRoc18yLmNzdgpAQCAtMCwwICsxLDMzIEBACitpdGVyYXRpb24sdGltZSxFRy1GUkctRzIxMDAwMSxFRy1GUkctRzIxMDAwMixFRy1GUkctRzIxMDAwMyxFRy1GUkctRzIxMDAwNCxFRy1GUkctRzIxMDAwNSxFRy1MT0UtRzI0MDAwMSxFRy1MT0UtRzI0MDAwMixFRy1MT0UtRzI0MDAwMyxFRy1MT0UtRzI0MDAwNCxFRy1MT0UtRzI0MDAwNSxFRy1MT0UtRzI0MDAwNixFRy1MT0UtRzI0MDAwNyxFRy1MT0UtRzI0MDAwOCxFRy1MT0UtRzI0MDAwOSxFRy1VUEUtRzI5MDAwMSxFRy1VUEUtRzI5MDAwMixFRy1VUEUtRzI5MDAwMyxFRy1VUEUtRzI5MDAwNCxFRy1VUEUtRzI5MDAwNSxFRy1VUEUtRzI5MDAwNixFRy1VUEUtRzI5MDAwNyxFRy1VUEUtRzI5MDAwOCxFRy1VUkctRzMwMDAwMSxFRy1VUkctRzMwMDAwMixFRy1VUkctRzMwMDAwMyxFRy1VUkctRzMwMDAwNAorMSxUdWUgMjUgSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzIsV2VkIDI2IEphbiAxMSwxMC40MDMzMDkxMjA4ODMwNTMsOS4yODg2MzYxMTk2NTAwMTEsNS40MDY3NDIyNjQzOTQzNTMsMTEuMTc3MTU2NDY3MjkxOTYsMTEuMjY2NDYxNDYxOTgyMDk1LDE4Mi4xMjY3NjU3NzU5ODYyOSwxOTcuOTE2OTY3Njg5NDg2OTQsMTYyLjIxMTg1NzcyOTkxODE0LDE0MC44OTczNjgwMTIyMjk2NiwxNzYuMTU3MTg2OTc5NzE5MzQsMzUuNzcyMzQ0MzE2MDEzMzc0LDIwOS4xMTg1MjE3MzEzMjUxMyw0MS4zODU3NjA4MzE4MzgyNywxMDkuODYzMjY1MzY2NzIyMSw5OC4xOTc3MzQzMjkxNzgzNywyMjUuNDIxNDk1Nzg5NjIzNzUsMTYzLjMwODk3MjkzOTA2NDQ2LDQ1LjkyODUzOTg1MzA4OTQxLDEzMy42NzI5MDA2NzQzMTAxNCw4OS4wMjI0MTI5NTYwNDc5NiwxMzEuNTE0MDMyNjM2NDY1MywxNDYuMDQyOTk5ODE4NDAyNDgsMTI5LjkxODQ5NDcyMzA0MTY1LDI5Ni4xNDYzOTc3MTE2MDkwNCwxOC44ODU3Njc1ODIxODkzNTIsMC4yMzY0NjYwODc0MDA5OTk4NgorMyxUaHUgMjcgSmFuIDExLDIwLjgwNjY1OTg1NTAwMjU5LDE4LjU3NzMwOTM5Mzg0NDUsMTAuODEzNTA2MTU1NzU3NzY0LDIyLjM1NDM1NzY0MzIwOTc4OCwyMi41MzI5Njc5ODk4MTAwNCwzNjQuMjU0MjYwMDU5MDM1NywzOTUuODM0NzI3MDQ2ODQ0NjUsMzI0LjQyNDM2NDMwNzI2NzIsMjgxLjc5NTI5OTYxMzkzMTQsMzUyLjMxNTA3ODU4ODE4NjU3LDcxLjU0NDgzMTcyMTQwNDAxLDQxOC4yMzc4Nzk5MzY3MzcyLDgyLjc3MTY4NzIwNjcxOTg2LDIxOS43MjY5NzAxODY1MDU3LDE5Ni4zOTU4NjE0NDkyOTQwNyw0NTAuODQzODkzMjY1MjMwNywzMjYuNjE4NTk5MTE0MDIwNjQsOTEuODU3MjYzNDIwMzM4MjMsMjY3LjM0NjMzNjA0MDIyMjksMTc4LjA0NTE4MjAwMTc0Nzc1LDI2My4wMjg1OTEzMjkwNjExLDI5Mi4wODY1ODM4MDg4MDQyLDI1OS44Mzc1MDkxMjAwNjIyLDU5Mi4yOTM5ODAwMDg4MDg4LDM3Ljc3MTYxMDcwNzQ0OTAzLDAuNDcyOTMzMTIwNjY2MzQ5MworNCxGcmkgMjggSmFuIDExLDMxLjIxMDA1MjIwMjUyNTA2MywyNy44NjYwMTk4MjI3MzIwOSwxNi4yMjAyOTE2NzQxNzY3NDIsMzMuNTMxNjAzNTI3OTMyMzIsMzMuNzk5NTE5NTgzNjY0MDksNTQ2LjM4MjQ4Mjg1MjA2MjEsNTkzLjc1MzI3ODA3NTIzOTgsNDg2LjYzNzUxOTczNDY0MjUsNDIyLjY5Mzc5NDgwNzM1OTUsNTI4LjQ3MzY3NDgyODIyMDMsMTA3LjMxNzQ2MjIxNjc0NDI3LDYyNy4zNTgwNzQ2MTk1ODIxLDEyNC4xNTc3NzkxMjUzMDY5NCwzMjkuNTkxMTE0NDYxMTA4NTMsMjk0LjU5NDM4MTM2MTkxODI0LDY3Ni4yNjcxOTI0MzA0Mjc1LDQ4OS45Mjg4Nzg1Mjc0ODE1LDEzNy43ODYxNzA3MDI0ODEzMSw0MDEuMDIwMzA2MDk5ODc3MiwyNjcuMDY4MzA3MTM4NTIzNywzOTQuNTQzNjc2MDc5ODkxNyw0MzguMTMwNzUxOTczNTQxOSwzODkuNzU3MDQzMTkzMTQwMyw4ODguNDQyNzQ2ODk2MzM3OSw1Ni42NTc1MjkzNzYwODEyMSwwLjcwOTQwMTA5OTc5OTgzMTgKKzUsU2F0IDI5IEphbiAxMSw0MS42MTM0ODYxNjM2MTY5MjYsMzcuMTU0NzY3NDA2NDYxMzksMjEuNjI3MDk4ODE5NzM3NzkyLDQ0LjcwODg5NDEyMTYzODM5NCw0NS4wNjYxMTYyNDM3MjQ1Miw3MjguNTExNDM0MTU3OTc5OCw3OTEuNjcyNjIwNzc3ODM5LDY0OC44NTEzMjQwMTQ2Mzk3LDU2My41OTI4NTM1OTQ3Njg0LDcwNC42MzI5NzU3MDI2MzksMTQzLjA5MDIzNTgwMjYwNjUxLDgzNi40NzkxMDU3ODMyMDU4LDE2NS41NDQwMzY1ODgyNjE3Miw0MzkuNDU1Njk4MTkyMjg4NSwzOTIuNzkzMjk0MDY4NjIyMDYsOTAxLjY5MTM5MzI4ODgyMSw2NTMuMjM5ODExMTgyMDYwMSwxODMuNzE1MjYxNzAwMjUzNTQsNTM0LjY5NDgxMDg1NTQxMTcsMzU2LjA5MTc4ODM2NzgwMDIzLDUyNi4wNTkyODY4OTEwNjEzLDU4NC4xNzU1MDQzMTQ5NTIzLDUxOS42NzcwOTY5NDQzNTQ3LDExODQuNTkyNjk4Mzc4OTM0NSw3NS41NDM1MjM1ODgzODgwNywwLjk0NTg3MDAyNDgwNTIzMDkKKzYsU3VuIDMwIEphbiAxMSw1Mi4wMTY5NjE3Mzg0NDQ2MzUsNDYuNDQzNTUyMTQ1MTgxMDIsMjcuMDMzOTI3NTkyNTI3NDI2LDU1Ljg4NjIyOTQyNDUwNjg0NCw1Ni4zMzI3NTc5NzAxNzE1OSw5MTAuNjQxMTEzOTc5NzAyNyw5ODkuNTkyNzU1MTU3ODA5LDgxMS4wNjU3NzcxNDk4NTM4LDcwNC40OTI0NzU5Nzg0MTI0LDg4MC43OTI5ODEyMTQyNjExLDE3OC44NjMxNTI0Nzk1NjMxLDEwNDUuNjAwOTczNDMwOTU0MSwyMDYuOTMwNDU5NTk2MjQ2MzUsNTQ5LjMyMDcyMTM4MTgwMzMsNDkwLjk5MjU5OTU3MDk3NjcsMTEyNy4xMTY0OTU4NDQwMTgsODE2LjU1MTM5NzA4MDM2OTMsMjI5LjY0NDUzNjQxNDM4OTczLDY2OC4zNjk4NTAzMDg5NjUyLDQ0NS4xMTU2MjU2OTEwMDE3LDY1Ny41NzU0MjM3NjQ2NzQyLDczMC4yMjA4NDA4MzUzNzIsNjQ5LjU5NzY3MDM3NTc4NDEsMTQ4MC43NDM4MzQ0NjEzMzcsOTQuNDI5NTkzMzQ0NjcxNzcsMS4xODIzMzk4OTU2ODYzMworNyxNb24gMzEgSmFuIDExLDYyLjQyMDQ3ODkyNzE3NDY0LDU1LjczMjM3NDAzOTAzOTYxLDMyLjQ0MDc3Nzk5MjYzMjE1LDY3LjA2MzYwOTQzNjcxNjUsNjcuNTk5NDQ0NzYzMTg1NTcsMTA5Mi43NzE1MjIzMjAxNDQ5LDExODcuNTEzNjgxMjE4MzE2Niw5NzMuMjgwODc5MTQyODgwNiw4NDUuMzkyNjYxOTYwNTQ1OSwxMDU2Ljk1MzY5MTM2NTkwNTMsMjE0LjYzNjIxMjI0ODE4NjM4LDEyNTQuNzIzNjc3NTY2MTczLDI0OC4zMTcwNDgxNDk5MjMsNjU5LjE4NjE4NDAzMTQxMDksNTg5LjE5MjI5Nzg3MDU1MzQsMTM1Mi41NDI1MDAwOTk2MjUyLDk3OS44NjM2MzYyMjUwMjIsMjc1LjU3Mzk5NDg0NTYyNDgsODAyLjA0NTQyNDQ2MjY3NjYsNTM0LjEzOTgxOTEwOTU1MjUsNzg5LjA5MjA4NjcwMjgzNDQsODc2LjI2Njc2MTUzNzEzNzgsNzc5LjUxODc2MzQ4OTUwNzMsMTc3Ni44OTYxNTUxNDgyODQsMTEzLjMxNTczODY0NTIzNDUsMS40MTg4MTA3MTI0NDY5MTI3Cis4LFR1ZSAxIEZlYiAxMSw3Mi44MjQwMzc3Mjk5NzM0MSw2NS4wMjEyMzMwODgxODU3OCwzNy44NDc2NTAwMjAxMzg0NzQsNzguMjQxMDM0MTU4NDQ2MjEsNzguODY2MTc2NjIyOTQ2NzIsMTI3NC45MDI2NTkxODIyMjA1LDEzODUuNDM1Mzk4OTYyNTI4MywxMTM1LjQ5NjYyOTk5NjMxNTMsOTg2LjI5MzQxMTU0MzQyMzQsMTIzMy4xMTUxMDYxNjAzOSwyNTAuNDA5NDE1MTA5MDQ4NzUsMTQ2My44NDcyMTgxOTIyMDg0LDI4OS43MDM4MDIyNDk5NTM4Nyw3NjkuMDUyMDg2MTQyODY5MSw2ODcuMzkyMzg4OTY4OTIzMiwxNTc3Ljk2OTQwNjA1OTI0OTQsMTE0My4xNzY1Mjg2MTg2MzE0LDMyMS41MDM2MzY5OTQ2OTM2LDkzNS43MjE1MzMzMTg2ODQ2LDYyMy4xNjQzNjg2MjQ4NzY5LDkyMC42MDkyNzU3MDc2NDY1LDEwMjIuMzEzMjY2NDIyNTg2NCw5MDkuNDQwMzc2Mjg3NjAyOCwyMDczLjA0OTY2MDQ0NDUxMzQsMTMyLjIwMTk1OTQ5MDM3ODQ0LDEuNjU1MjgyNDc1MDkwNzYyNAorOSxXZWQgMiBGZWIgMTEsODMuMjI3NjM4MTQ3MDA3MzgsNzQuMzEwMTI5MjkyNzY4MTUsNDMuMjU0NTQzNjc1MTMyOTEsODkuNDE4NTAzNTg5ODc0OCw5MC4xMzI5NTM1NDk2MzUzMiwxNDU3LjAzNDUyNDU2ODg0MzYsMTU4My4zNTc5MDgzOTM2MTEsMTI5Ny43MTMwMjk3MTI3NTM1LDExMjcuMTk0NzI0NzI5Mjk5MiwxNDA5LjI3NzIyNTYwMDUzNCwyODYuMTgyNzYxMDYyNzIyNTMsMTY3Mi45NzE1OTUzMTI0MDY0LDMzMS4wOTA3MjE4OTcwMDExLDg3OC45MTg0Mjc3MTc5MzU5LDc4NS41OTI4NzI4Njc2NTc0LDE4MDMuMzk3MjEzNzI2NDk3NSwxMzA2LjQ5MDA3NDI2MzgxMDQsMzY3LjQzMzQ2Mjg2MjMzMSwxMDY5LjM5ODE3Njg3OTEyOCw3MTIuMTg5Mjc0MjM4Mzk5NCwxMDUyLjEyNjk5MDc4MTIxNDUsMTE2OC4zNjAzNTU0OTQwNTQ2LDEwMzkuMzYyNTA4NzcyMTQ5NiwyMzY5LjIwNDM1MDM1NDc2NDMsMTUxLjA4ODI1NTg4MDQwNTc3LDEuODkxNzU1MTgzNjIxNjYyNgorMTAsVGh1IDMgRmViIDExLDkzLjYzMTI4MDE3ODQ0MzAzLDgzLjU5OTA2MjY1MjkzNTMzLDQ4LjY2MTQ1ODk1NzcwMTk2LDEwMC41OTYwMTc3MzExODExMiwxMDEuMzk5Nzc1NTQzNDMxNjIsMTYzOS4xNjcxMTg0ODI5MjgxLDE3ODEuMjgxMjA5NTE0NzMxNSwxNDU5LjkzMDA3ODI5NDc5MDUsMTI2OC4wOTY2MDE1MjA0Mjc4LDE1ODUuNDQwMDQ5Njg5MTU1OCwzMjEuOTU2MjUwMTA5NzgwMTcsMTg4Mi4wOTY4MDg5MzAxMTI3LDM3Mi40Nzc4MDcwOTE3MjY5Niw5ODguNzg1MjA4NzU4MzY4OSw4ODMuNzkzNzQ5NTY4MzI3MywyMDI4LjgyNTkyMzEwNDk3NjMsMTQ2OS44MDQyNzMxNjMxNzE3LDQxMy4zNjM0NzI0NDkyNzE4NSwxMjAzLjA3NTM1NTE0NjE0NTcsODAxLjIxNDUzNTk1MTU0NDMsMTE4My42NDUyMzE5MjU2NDMsMTMxNC40MDgwMjg3NTM4NzksMTE2OS4yODUxNjA5NDUyMjY0LDI2NjUuMzYwMjI0ODgzNzc0NywxNjkuOTc0NjI3ODE1NjE4NjUsMi4xMjgyMjg4MzgwNDMzOTcKKzExLEZyaSA0IEZlYiAxMSwxMDQuMDM0OTYzODI0NDQ2OCw5Mi44ODgwMzMxNjg4MzU5Niw1NC4wNjgzOTU4Njc5MzIxNDYsMTExLjc3MzU3NjU4MjU0NDAxLDExMi42NjY2NDI2MDQ1MTU4OSwxODIxLjMwMDQ0MDkyNzM4ODMsMTk3OS4yMDUzMDIzMjkwNTY0LDE2MjIuMTQ3Nzc1NzQ1MDIxOCwxNDA4Ljk5OTA0MTkxOTA2MzUsMTc2MS42MDM1Nzg0MjkwNzM5LDM1Ny43Mjk4ODIyNTA3OTQsMjA5MS4yMjI4NTkwNDg2NzM0LDQxMy44NjUwNTc4MzQ3OTM2LDEwOTguNjUyNDI5MjY1OTI2LDk4MS45OTUwMTkwNzI1MDQsMjI1NC4yNTU1MzQxOTgyOTI1LDE2MzMuMTE5MTI1MzE5MzI4OCw0NTkuMjkzNjY1NzU2MjUxMSwxMzM2Ljc1MzA2ODEyMTg3NjQsODkwLjI0MDE1Mzc2NTczNjIsMTMxNS4xNjM5OTkxNDMwMzU5LDE0NjAuNDU2Mjg2MjA0Mzk2NSwxMjk5LjIwODMzMjgwODkxMTgsMjk2MS41MTcyODQwMzYyODMsMTg4Ljg2MTA3NTI5NjMxOTI2LDIuMzY0NzAzNDM4MzU5NzQ5CisxMixTYXQgNSBGZWIgMTEsMTE0LjQzODY4OTA4NTE4NTE2LDEwMi4xNzcwNDA4NDA2MTg2NCw1OS40NzUzNTQ0MDU5MDk5NywxMjIuOTUxMTgwMTQ0MTQyMywxMjMuOTMzNTU0NzMzMDY4MzksMjAwMy40MzQ0OTE5MDUxMzg0LDIxNzcuMTMwMTg2ODM5NzUyNywxNzg0LjM2NjEyMjA2NjA0MjksMTU0OS45MDIwNDU5Mjc0NjEsMTkzNy43Njc4MTE4MjMxMDcsMzkzLjUwMzY1NzQ4NjMzNjM1LDIzMDAuMzQ5NzQ1NjcxNDM1LDQ1NS4yNTI0NzQxMjY4NjMyLDEyMDguNTIwMDg5MjQyMzY1MiwxMDgwLjE5NjY4MTM4MTc1ODcsMjQ3OS42ODYwNDcwMTAwNTMyLDE3OTYuNDM0NjMwNzM0ODk0NCw1MDUuMjI0MDQyNzg0MDAzNTMsMTQ3MC40MzEzMTU4MDg0NTksOTc5LjI2NjEyNzY4MjM5OTIsMTQ0Ni42ODMyOTI0MzU0OTc4LDE2MDYuNTA1MTI3ODQ3OTQzOSwxNDI5LjEzMjAyNDM2NTI4NDcsMzI1Ny42NzU1Mjc4MTcwMjgsMjA3Ljc0NzU5ODMyMjgwOTgsMi42MDExNzg5ODQ1NzQ1MDI0CisxMyxTdW4gNiBGZWIgMTEsMTI0Ljg0MjQ1NTk2MDgyNDU1LDExMS40NjYwODU2Njg0MzIwMiw2NC44ODIzMzQ1NzE3MjE5NCwxMzQuMTI4ODI4NDE2MTU0ODUsMTM1LjIwMDUxMTkyOTI2OTQyLDIxODUuNTY5MjcxNDE5MDkyMywyMzc1LjA1NTg2MzA0OTk4NywxOTQ2LjU4NTExNzI2MDQ0OTQsMTY5MC44MDU2MTM1NDc4NzQxLDIxMTMuOTMyNzQ5ODc0MDczNiw0MjkuMjc3NTc1ODE2OTc5NjYsMjUwOS40Nzc0Njg4MDE3NDMsNDk2LjY0MDA1NTk2ODU5OCwxMzE4LjM4ODE4ODY4OTQ0NDIsMTE3OC4zOTg3MzY0OTc2NjI2LDI3MDUuMTE3NDYxNTQzODY1LDE5NTkuNzUwNzg5NDEyNDgxNyw1NTEuMTU0NjAzNTMzMjY0MSwxNjA0LjExMDA5ODIwODAzMjUsMTA2OC4yOTI0NTc3MDI5NTgsMTU3OC4yMDMxMTE4MDUxMzMsMTc1Mi41NTQ1NTM2ODY4NTc2LDE1NTkuMDU2MjM1NjE2NDIzNywzNTUzLjgzNDk1NjIzMDc0ODUsMjI2LjYzNDE5Njg5NTM5MjQ1LDIuODM3NjU1NDc2NjkxNDQxCisxNCxNb24gNyBGZWIgMTEsMTM1LjI0NjI2NDQ1MTUzMTQ2LDEyMC43NTUxNjc2NTI0MjQ3LDcwLjI4OTMzNjM2NTQ1NDU5LDE0NS4zMDY1MjEzOTg3NjA0OCwxNDYuNDY3NTE0MTkzMjk5MjIsMjM2Ny43MDQ3Nzk0NzIxNjQzLDI1NzIuOTgyMzMwOTYyOTI2LDIxMDguODA0NzYxMzMwODM2OCwxODMxLjcwOTc0NDc4MjU1OCwyMjkwLjA5ODM5MjU4NDc5MjIsNDY1LjA1MTYzNzI0MzI5NjMsMjcxOC42MDYwMjg0NDI5NDMsNTM4LjAyNzgwMzM2MDY2MDIsMTQyOC4yNTY3Mjc2MDg5MjEsMTI3Ni42MDExODQ0MjE3ODcsMjkzMC41NDk3Nzc4MDMzMzUsMjEyMy4wNjc2MDEzNTQ3MDM2LDU5Ny4wODUzNDgwMDQ3Njc2LDE3MzcuNzg5NDE1MzIyNzM1NSwxMTU3LjMxOTE0MzgyODgzNjgsMTcwOS43MjM0NTcyNTQwNDU2LDE4OTguNjA0NTYzNzIzNDc0NywxNjg4Ljk4MDk2NjU2NDQwOCwzODQ5Ljk5NTU2OTI4MjE4MjMsMjQ1LjUyMDg3MTAxNDM2OTQsMy4wNzQxMzI5MTQ3MTQzNDc1CisxNSxUdWUgOCBGZWIgMTEsMTQ1LjY1MDExNDU1NzQ3MjMsMTMwLjA0NDI4Njc5Mjc0NTMsNzUuNjk2MzU5Nzg3MTk0NDEsMTU2LjQ4NDI1OTA5MjEzODA1LDE1Ny43MzQ1NjE1MjUzMzgwOCwyNTQ5Ljg0MTAxNjA2NzI2ODQsMjc3MC45MDk1OTA1ODE3MzY3LDIyNzEuMDI1MDU0Mjc5ODAwMywxOTcyLjYxNDQzOTYzMzc2NjgsMjQ2Ni4yNjQ3Mzk5NTgwODIsNTAwLjgyNTg0MTc2NTg1ODYsMjkyNy43MzU0MjQ1OTgzODIsNTc5LjQxNTcxNjMwMzcxMTksMTUzOC4xMjU3MDYwMDI1NTM0LDEzNzQuODA0MDI1MTU1NzAzLDMxNTUuOTgyOTk1NzkyMDcsMjI4Ni4zODUwNjY1NjQxNzM1LDY0My4wMTYyNzYxOTkyNDkxLDE4NzEuNDY5MjY3MTU0NzA3LDEyNDYuMzQ2MTg2MDYxNDYsMTg0MS4yNDQzMjg3ODQzMzk4LDIwNDQuNjU1MTU3OTYwMTMyLDE4MTguOTA2MjE3MjExMzE1OCw0MTQ2LjE1NzM2Njk3NjA2OCwyNjQuNDA3NjIwNjgwMDQyOCwzLjMxMDYxMTI5ODY0NzAwNjQKKzE2LFdlZCA5IEZlYiAxMSwxNTYuMDU0MDA2Mjc4ODEzNiwxMzkuMzMzNDQzMDg5NTQyNSw4MS4xMDM0MDQ4MzcwMjc5MSwxNjcuNjYyMDQxNDk2NDY2MzcsMTY5LjAwMTY1MzkyNTU2NjI3LDI3MzEuOTc3OTgxMjA3MzE5LDI5NjguODM3NjQxOTA5NTg1NywyNDMzLjI0NTk5NjEwOTkzNTcsMjExMy41MTk2OTgxMDM3NTQ4LDI2NDIuNDMxNzkxOTk2NzYxLDUzNi42MDAxODkzODUyMzkxLDMxMzYuODY1NjU3MjcxNDA1Myw2MjAuODAzNzk0Nzk4NDE1MywxNjQ3Ljk5NTEyMzg3MjA5OTYsMTQ3My4wMDcyNTg3MDA5ODE4LDMzODEuNDE3MTE1NTEzNjc3MywyNDQ5LjcwMzE4NTA0MzUwNCw2ODguOTQ3Mzg4MTE3NDQzMywyMDA1LjE0OTY1MzcwNjA4NTcsMTMzNS4zNzM1ODQ0MDIyNTIyLDE5NzIuNzY1NzI2Mzk4MTIwMywyMTkwLjcwNjMzNjM5OTE2NjUsMTk0OC44MzE5ODc1NTkyMjYzLDQ0NDIuMzIwMzQ5MzE3MTQ1LDI4My4yOTQ0NDU4OTI3MTQ4NiwzLjU0NzA5MDYyODQ5MzIwMQorMTcsVGh1IDEwIEZlYiAxMSwxNjYuNDU3OTM5NjE1NzIxNzgsMTQ4LjYyMjYzNjU0Mjk2NDg3LDg2LjUxMDQ3MTUxNTA0MTYyLDE3OC44Mzk4Njg2MTE5MjQzMiwxODAuMjY4NzkxMzk0MTY0MDUsMjkxNC4xMTU2NzQ4OTUyMywzMTY2Ljc2NjQ4NDk0OTY0MDUsMjU5NS40Njc1ODY4MjM4MzgyLDIyNTQuNDI1NTIwMTk0Nzc2NywyODE4LjU5OTU0ODcwMzY0ODUsNTcyLjM3NDY4MDEwMjAxMDEsMzM0NS45OTY3MjY0NjUzNTk2LDY2Mi4xOTIwMzg4NDU0MzI4LDE3NTcuODY0OTgxMjE5MzE3MywxNTcxLjIxMDg4NTA1OTE5NDksMzYwNi44NTIxMzY5NzE3NjMyLDI2MTMuMDIxOTU2Nzk1MzA4Niw3MzQuODc4NjgzNzYwMDg1MiwyMTM4LjgzMDU3NDk3OTAxMDYsMTQyNC40MDEzMzg4NTI2Mzc4LDIxMDQuMjg3NjUwMDk3NDkxLDIzMzYuNzU4MDk5MDQyOTE0NiwyMDc4Ljc1ODI3NzYxMDIxOCw0NzM4LjQ4NDUxNjMxMDE1MSwzMDIuMTgxMzQ2NjUyNjg3OCwzLjc4MzU3MDkwNDI1NjcxNQorMTgsRnJpIDExIEZlYiAxMSwxNzYuODYxOTIwNTY5MDY4NiwxNTcuOTExODcyNTEwOTE0NzUsOTEuOTE3NTYyOTM5OTcwNzYsMTkwLjAxNzc0Njg4NTc1Njg1LDE5MS41MzU5ODA0Mjk4ODk2MywzMDk2LjI1NDIwMjE4NTk3NSwzMzY0LjY5NjIzMzg2NTAzMTQsMjc1Ny42ODk5MTk5ODkwOTcyLDIzOTUuMzMxOTg3MTc5NzI2LDI5OTQuNzY4MTExNjkwMzI1LDYwOC4xNDkzMzQ1NTA0OTU0LDM1NTUuMTI4NzUyODA0NjkzMiw3MDMuNTgwNDcyMzE3MDM4LDE4NjcuNzM1MzQxNDE1OTA0NSwxNjY5LjQxNDk2MDg3MzA4OTUsMzgzMi4yODgxOTAxOTQ3MTMsMjc3Ni4zNDE0NzYwMjAwMTgsNzgwLjgxMDE4OTYxOTgyOTUsMjI3Mi41MTIxMDgwNzkxMzQsMTUxMy40Mjk1MDA3NjI4MjQzLDIyMzUuODEwMTc1NzQyODE5LDI0ODIuODEwNTMwMTMyMzkxLDIyMDguNjg1MTYyMzA0MzE0NCw1MDM0LjY1MDAzODc3OTI0NywzMjEuMDY4MzMzODUzNzEzNSw0LjAyMDA1MjI2MjMzNjcxMgorMTksU2F0IDEyIEZlYiAxMSwxODcuMjY1OTQ0Mjk4Njc3NDUsMTY3LjIwMTE0NjY3MTgyMTE0LDk3LjMyNDY3NjU5NjMwOTMsMjAxLjE5NTY3MTExNzc1MjIsMjAyLjgwMzIxNTc5MDk4MTc0LDMyNzguMzkzNDc4MzQ0NDI4MywzNTYyLjYyNjc5NjU3NDE4NSwyOTE5LjkxMjkyMDEzNjA2OTMsMjUzNi4yMzkwMzM1MDU2MDE2LDMxNzAuOTM3Mzk4OTk5MDMyLDY0My45MjQxMzYwODc0ODQ3LDM3NjQuMjYxNjM4OTk2MjcwNCw3NDQuOTY5MDc1OTU4MzU4NCwxOTc3LjYwNjE1MzM0NzU4NjMsMTc2Ny42MTk0NDA0NTU4MjA1LDQwNTcuNzI1MTcwMzA0Mzc0NCwyOTM5LjY2MTY2NjczNzU1MTUsODI2Ljc0MTg4NDMyODI1OTcsMjQwNi4xOTQxOTA4MTQ2NjMsMTYwMi40NTgwMjg3MTQ4MTc0LDIzNjcuMzMzMjQyMTQ2NzMyLDI2MjguODYzNTYxNzIwNTcsMjMzOC42MTI1ODExOTY0NzM1LDUzMzAuODE2Nzc4OTQxMjY5LDMzOS45NTUzOTg3MDkxMjE1LDQuMjU2NTM0NTkyNzE2NTA0CisyMCxTdW4gMTMgRmViIDExLDE5Ny42NzAwMTMyNTcyMTQ5OCwxNzYuNDkwNDYxMjE1NTU3MjIsMTAyLjczMTgxMzc1ODc0MTY1LDIxMi4zNzM2NDM5NDMwMTc4NywyMTQuMDcwNTAwMTMzNjAyMjgsMzQ2MC41MzM1NDYzMDg0ODksMzc2MC41NTgyMTk3Mzc2NzE2LDMwODIuMTM2NjI1NTA3NTQ4LDI2NzcuMTQ2NjkyMzkwMTI4NSwzMzQ3LjEwNzQ1MjE2MDI5MjMsNjc5LjY5OTA5MzE0NjYwNTUsMzk3My4zOTU0MzQzNDE1MjEsNzg2LjM1Nzg1OTUyNjQzMTMsMjA4Ny40Nzc0NDI5MTU1NDEsMTg2NS44MjQzNDY5NTgzMiw0MjgzLjE2MzEzMDQ0NTczOSwzMTAyLjk4MjU2NzQ0OTM1NzIsODcyLjY3Mzc3ODcxMzQxMSwyNTM5Ljg3Njg1NDcwMDA5NiwxNjkxLjQ4Njk0MzY5NjM5MSwyNDk4Ljg1Njg4MDMxNDc1NzMsMjc3NC45MTcyMjgyMzgzMDMsMjQ2OC41NDA1NjQ5MTYwNiw1NjI2Ljk4NDgwNjYxNTE5MiwzNTguODQyNTQ1NjcxMzg4NDUsNC40OTMwMTc5NTExNDQ5MzYKKzIxLE1vbiAxNCBGZWIgMTEsMjA4LjA3NDEyNjczOTMzMjEsMTg1Ljc3OTgxNTUxMjM0OTIyLDEwOC4xMzg5NzQwNjA2ODgyNCwyMjMuNTUxNjY0NjAzNzM3NTgsMjI1LjMzNzgzMjY5Mzg4MDA1LDM2NDIuNjc0MzkzNzI5ODc5NywzOTU4LjQ5MDQ4OTkzNjYzMSwzMjQ0LjM2MTAyNTEwNTQ5NSwyODE4LjA1NDk1NDI4MDQwMTUsMzUyMy4yNzgyNTkyMzA1NjcsNzE1LjQ3NDIwMzMwMjQ3NjYsNDE4Mi41MzAxMjQ2NjIxMTQsODI3Ljc0NjgyMDIxNTI4MzIsMjE5Ny4zNDkyMDI2NzA5ODksMTk2NC4wMjk2NzM3MjI3MzYzLDQ1MDguNjAyMDU1MzM1MTI1LDMyNjYuMzA0MTY3MDgzMDEyNSw5MTguNjA1ODY5NjYxMzA3MywyNjczLjU2MDA5MDY3MjM0NzUsMTc4MC41MTYyMzk2NzE3ODUzLDI2MzAuMzgxMDgxMzMwMTgzNCwyOTIwLjk3MTUxOTc4MzgwNzcsMjU5OC40NjkxMDQ2NTQ1NDEsNTkyMy4xNTQxMDE3MjIxNTQsMzc3LjcyOTc3MzQ2MDA1MDc1LDQuNzI5NTAyMzIxNTg5NTAxCisyMixUdWUgMTUgRmViIDExLDIxOC40NzgyODI2MjQwNDk2OCwxOTUuMDY5MjA3NjY4NDcyNTMsMTEzLjU0NjE1NjM5OTg0NzE5LDIzNC43Mjk3MzA4MjExNjM4LDIzNi42MDUyMTExNzQ4NjA1LDM4MjQuODE1OTgzNDc3NDI4Myw0MTU2LjQyMzU2NjgyMDY1NzUsMzQwNi41ODYwODU4NTg4OTk0LDI5NTguOTYzNzkwNDUwOTA5LDM2OTkuNDQ5Nzg0Mjk1NzM1OCw3NTEuMjQ5NDU5MjYxOTk2LDQzOTEuNjY1NjY3MzIzOTIxLDg2OS4xMzU5NDk1ODczNzQ0LDIzMDcuMjIxNDEwMjE1NTExLDIwNjIuMjM1NDAwNzI4OTY1NSw0NzM0LjA0MTg5OTAxNDYzMiwzNDI5LjYyNjQzMjM0MzgzMTMsOTY0LjUzODE0NzgwODI0ODEsMjgwNy4yNDM4NzE0Nzg3OTk1LDE4NjkuNTQ1ODk4NDkxNTE3NiwyNzYxLjkwNTgxODM4MDUzMTQsMzA2Ny4wMjY0MDY1ODI1MDYzLDI3MjguMzk4MTczOTI0NzI4LDYyMTkuMzI0NjAzODg1MTg0LDM5Ni42MTcwNzgyMjQ3NjQ1LDQuOTY1OTg3NjU1ODQwNTc0CisyMyxXZWQgMTYgRmViIDExLDIyOC44ODI0ODA5MzQ4NTI3NywyMDQuMzU4NjM3NzA0ODk1NzgsMTE4Ljk1MzM2MDc4ODQyMzk0LDI0NS45MDc4NDI2MjA1Mjg0NywyNDcuODcyNjM1NjAxOTc3MDQsNDAwNi45NTgzMTU5NjIyNzc1LDQzNTQuMzU3NDUwODM2NTM4LDM1NjguODExODA4MTMzOTQ3LDMwOTkuODczMjAxMjE5NzIxLDM4NzUuNjIyMDI3NzUzNDY0LDc4Ny4wMjQ4NjExMDU5MTgxLDQ2MDAuODAyMDYyNzk5MDE5LDkxMC41MjUyNDc3MzYxMzE0LDI0MTcuMDk0MDY1Nzk3MTE2NCwyMTYwLjQ0MTUyODE5ODY4MzUsNDk1OS40ODI2NjE5OTMxMzYsMzU5Mi45NDkzNjM2MDA0NzUsMTAxMC40NzA2MTMyNTc5MTUsMjk0MC45MjgxOTc0MjEyMTIsMTk1OC41NzU5MjAzNTY1NTE3LDI4OTMuNDMxMDkxNzYyNjg2MywzMjEzLjA4MTg4ODk2NDA4MywyODU4LjMyNzc3MzAxOTkwNTYsNjUxNS40OTYzMTM3NzI4MTU1LDQxNS41MDQ0NjAwMDgxNjMzMyw1LjIwMjQ3Mzk1NDQzMTk2NQorMjQsVGh1IDE3IEZlYiAxMSwyMzkuMjg2NzIwNjY5NDU3MywyMTMuNjQ4MTA0NzI2NzI1NjgsMTI0LjM2MDU4NjcwNTUxNzc2LDI1Ny4wODU5OTg5MjQ5OTI5LDI1OS4xNDAxMDQ4ODk3ODcxNSw0MTg5LjEwMTM3MzYzNzgyMyw0NTUyLjI5MjEyMjkxNjM5ODUsMzczMS4wMzgxNzYzMDI2OTE3LDMyNDAuNzgzMTczMDEyMzg4NSw0MDUxLjc5NDk3MjYzMjI3NDUsODIyLjgwMDQwNTM4NzgzNDksNDgwOS45MzkyOTA5NDAzNDA1LDk1MS45MTQ3MTA2NzQzMzM3LDI1MjYuOTY3MTU4ODMxMjcxLDIyNTguNjQ4MDQ2NjcxMjQ2LDUxODQuOTI0MzIyNTUyODk4LDM3NTYuMjcyOTQ1MTE5Mjk5LDEwNTYuNDAzMjYxNTg1NDIzNSwzMDc0LjYxMzA1NTYyMTE2MywyMDQ3LjYwNjI5NjY5MDIxODYsMzAyNC45NTY4ODg4MDYyMTc2LDMzNTkuMTM3OTUyODU4MzQ2LDI5ODguMjU3ODg5NDIzMzYyLDY4MTEuNjY5MjAyODUzNDc1LDQzNC4zOTE5MTY5OTA3Mzk0NSw1LjQzODk2MTE5NDU4MTg2OAorMjUsRnJpIDE4IEZlYiAxMSwyNDkuNjkxMDAwOTg5Mzg0NjYsMjIyLjkzNzYwNzk4NTMyMzIsMTI5Ljc2NzgzMzcxNTM1OTg0LDI2OC4yNjQxOTg4MzM3MDg0LDI3MC40MDc2MTgxMzAyNDQ0Myw0MzcxLjI0NTE0MTgyNTEzODUsNDc1MC4yMjc1NjcxMDg2NjQsMzg5My4yNjUxNzcyOTEyOTUsMzM4MS42OTM2OTQ0NzI5NjUsNDIyNy45Njg2MDQ3MzQzNzMsODU4LjU3NjA4OTIyNDU5MTksNTAxOS4wNzczMzQ4OTM0OTcsOTkzLjMwNDMzNTA2NjQwMDcsMjYzNi44NDA2ODA0NjMyOTE0LDIzNTYuODU0OTQ4MjMyMTc5Niw1NDEwLjM2Njg2MjUyNTU1MywzOTE5LjU5NzE2MzczODA0MSwxMTAyLjMzNjA4OTA4OTA1NjUsMzIwOC4yOTg0MzUzMDQ5NzYsMjEzNi42MzcwMjAzMTc1NTIsMzE1Ni40ODMxOTg5MTE0NSwzNTA1LjE5NDU4NjQ5NDYyMzMsMzExOC4xODg1MTI2NjQwMTcsNzEwNy44NDMyNDcyNTg1NjMsNDUzLjI3OTQ0NzY1MDM1MDksNS42NzU0NDkzNTcyMzE3NTUKKzI2LFNhdCAxOSBGZWIgMTEsMjYwLjA5NTMxOTA0ODMzNTg1LDIzMi4yMjcxNDQ5MzkzNTkwNSwxMzUuMTc1MTAwMzM4Njg5NiwyNzkuNDQyNDM5Mjg4NjU0OTUsMjgxLjY3NTE3MjI0MDg5NTM0LDQ1NTMuMzg5NTcwNjk1MTUzLDQ5NDguMTYzNzI5MjY0MTMzNSw0MDU1LjQ5Mjc2NjcxOTMxNywzNTIyLjYwNDcyNzA1MjU1ODcsNDQwNC4xNDI4NzU4NjM5MzksODk0LjM1MTkwMjgyOTAzNTIsNTIyOC4yMTYxMzc0NDQ1OTYsMTAzNC42OTQxMDk1ODkzNzI4LDI3NDYuNzE0NjAwNjM1MDc5LDI0NTUuMDYyMjA2MDE1MDIyLDU2MzUuODEwMjIwMjM2Nzg3LDQwODIuOTIxOTc0Nzc2MDk0NCwxMTQ4LjI2OTA4MzIwMjk3MTQsMzM0MS45ODQyOTk5MDAzNDI2LDIyMjUuNjY4MDY2ODgyNDE3LDMyODguMDA5OTg2MDk2NzMwNywzNjUxLjI1MTc0OTkxNjIwMSwzMjQ4LjExOTYwNzE5Njc0OTcsNzQwNC4wMTgzNjU5NjM3NDQsNDcyLjE2NzA0NjgxOTkzNiw1LjkxMTkzODM3NzY4NTU1ODUKKzI3LFN1biAyMCBGZWIgMTEsMjcwLjQ5OTY3OTgzMjMxNTU2LDI0MS41MTY3MjAwNDA2MDczLDE0MC41ODIzODkxNjY4MDE5NiwyOTAuNjIwNzI1NjQ2NzE5NywyOTIuOTQyNzcyNjIxNDI4NDUsNDczNS41MzQ3NDc1MzU5NTIsNTE0Ni4xMDA3MDQyMzg2NzgsNDIxNy43MjEwMjIzMzAyMDEsMzY2My41MTYzMzgyNzkxOTYsNDU4MC4zMTc4NzA0NDgwMDksOTMwLjEyNzg2MzM0NTgxMzQsNTQzNy4zNTU3OTg4MTgwODUsMTA3Ni4wODQwNTQwNzgyNDY1LDI4NTYuNTg4OTcyMDAwOTEzNiwyNTUzLjI2OTg2NzA4MzEwMzIsNTg2MS4yNTQ1MDM3MjQ1OTEsNDI0Ni4yNDc0NTY1MDI3MTksMTE5NC4yMDIyNjU5MzkzODYzLDM0NzUuNjcwNzEzNDcyODExNywyMzE0LjY5OTQ3OTA1MDY3NjUsMzQxOS41MzczMTMzOTI5MjUsMzc5Ny4zMDk1MTMxMTcyNTksMzM3OC4wNTEyMzUyODc3MzEzLDc3MDAuMTk0NzAwOTAzNDA5LDQ5MS4wNTQ3MjM1NTA4OTYsNi4xNDg0MjgzNjkyNzQ2MjUKKzI4LE1vbiAyMSBGZWIgMTEsMjgwLjkwNDA4Mjg2ODM4MTQ3LDI1MC44MDYzMzI4NjY3OTk1NSwxNDUuOTg5Njk5OTUzOTAyMzIsMzAxLjc5OTA1NzM5OTc4MDc0LDMwNC4yMTA0MTg3NTk2NjE4LDQ5MTcuNjgwNjY0MDY3OTExNSw1MzQ0LjAzODQ4MzAzNDg0MSw0Mzc5Ljk0OTkzNjc0OTY3MywzODA0LjQyODUyMTc0NzU3NTQsNDc1Ni40OTM1ODA0NzgzNDIsOTY1LjkwMzk2OTE0ODY4ODEsNTY0Ni40OTYzMDk1MDcyNzcsMTExNy40NzQxNjY2NTE1OTMxLDI5NjYuNDYzNzg5NTY2MzI4LDI2NTEuNDc3OTI2OTcyMjgsNjA4Ni42OTk3MDI3NDExMzIsNDQwOS41NzM2MDE0OTM3NjQsMTI0MC4xMzU2MzUyMTAzNTQ4LDM2MDkuMzU3NjY5OTQ1NTExLDI0MDMuNzMxMjUyNzc1MzA0MywzNTUxLjA2NTE3NDgyMTMwNiwzOTQzLjM2Nzg2OTQ1ODU3MTUsMzUwNy45ODMzOTEwMzA3Njc1LDc5OTYuMzcyMjM4NjE0NTE2LDUwOS45NDI0NzY5ODQ2Njk1LDYuMzg0OTE5MzIxMjQ5MDI1CisyOSxUdWUgMjIgRmViIDExLDI5MS4zMDg1MjQ3MDQxMTE0LDI2MC4wOTU5ODAzMzU0MjY4LDE1MS4zOTcwMzA5MDU3MTk1NiwzMTIuOTc3NDMwODM4NjA4MywzMTUuNDc4MTA2OTE2NzI5Miw1MDk5LjgyNzI1OTg1MDc5Myw1NTQxLjk3Njk5OTk3MjI3OCw0NTQyLjE3OTQ1NjE0NjQxOCwzOTQ1LjM0MTIzMDY5OTc2Nyw0OTMyLjY2OTk0NzQ5NTc1NCwxMDAxLjY4MDIwODM2NjMxODIsNTg1NS42Mzc2MDAxMTQ1MDIsMTE1OC44NjQ0MzM1NzUyMTQyLDMwNzYuMzM5MDE2ODcyMzEsMjc0OS42ODYzNTMwOTQ4NCw2MzEyLjE0NTc0MjQ3ODQ2Niw0NTcyLjkwMDM1NTU1MzgyNzUsMTI4Ni4wNjkxNzU3NzQxMjA0LDM3NDMuMDQ1MTI0OTU4MDA5LDI0OTIuNzYzMzU4NTEzNDk0LDM2ODIuNTkzNTI2NzM3ODc3Nyw0MDg5LjQyNjc3MDQ3NDU4ODUsMzYzNy45MTYwMzEzMTEzNTcsODI5Mi41NTA4ODA4MTg0OTEsNTI4LjgzMDMwMDg1Mzg2Miw2LjYyMTQxMTE1NTEzNTU3NworMzAsV2VkIDIzIEZlYiAxMSwzMDEuNzEzMDA4NjE5MDUwMSwyNjkuMzg1NjY1Mzc0NjQzOCwxNTYuODA0MzgzNzI2Njc4MDMsMzI0LjE1NTg0OTQ4NjY5NTIsMzI2Ljc0NTg0MDY0NDI3NTksNTI4MS45NzQ1OTIyOTgzMzcsNTczOS45MTYzMTc0NDI0MzgsNDcwNC40MDk2MzE2NTYxODcsNDA4Ni4yNTQ1MDk1NTIzMzMsNTEwOC44NDcwMjcwMzIxMywxMDM3LjQ1NjU5MjI3NTU5NjQsNjA2NC43Nzk3MzY1NjIzOTMsMTIwMC4yNTQ4Njc4OTU1Nzg5LDMxODYuMjE0Njg4NTUyMjEzNCwyODQ3Ljg5NTE3NjQwNjY4OSw2NTM3LjU5MjY5Mzk5ODU4Nyw0NzM2LjIyNzc3MDE2NDUxOCwxMzMyLjAwMjkwMjEwOTIxOTgsMzg3Ni43MzMxMjA2NDk0MjIsMjU4MS43OTU4MjQzMjg3MTc2LDM4MTQuMTIyNDEwNjAxMTk1LDQyMzUuNDg2MjYyMjAzOTgzLDM3NjcuODQ5MTk3MDg1MDc0Niw4NTg4LjczMDcyMDg3MjY4Myw1NDcuNzE4MjAxMTEyMDMyOCw2Ljg1NzkwMzk0NTQ3Nzk3NworMzEsVGh1IDI0IEZlYiAxMSwzMTIuMTE3NTM0MTIyODk2OSwyNzguNjc1Mzg3NTQ2NjgzNiwxNjIuMjExNzU4MTYxOTYxODIsMzM1LjMzNDMxMjgxNzI3MDEsMzM4LjAxMzYxOTQxMTMyMTc3LDU0NjQuMTIyNjUyODI3MDM3LDU5MzcuODU2NDI2MTE3NjM5LDQ4NjYuNjQwNDU1NjM0MDU0LDQyMjcuMTY4MzUxNjY0ODgxLDUyODUuMDI0ODEwNzg1MzA5NSwxMDczLjIzMzExOTE5MDU5NzgsNjI3My45MjI3MDg5OTUzNDUsMTI0MS42NDU0Njc2NjIyMDU0LDMyOTYuMDkwNzk5NDI4MjYyLDI5NDYuMTA0MzkyMjc5ODM5NCw2NzYzLjA0MDU0NjY3NzUzOSw0ODk5LjU1NTgzNzYyOTIsMTM3Ny45MzY4MTIwNTEwNzQyLDQwMTAuNDIxNjUwNzE5ODQxNiwyNjcwLjgyODY0NjAyNTQxMywzOTQ1LjY1MTgyMDIxMzA5Niw0MzgxLjU0NjMzNzc2Mzg1MywzODk3Ljc4Mjg4MjIyODk1NTMsODg4NC45MTE3NDQ4MTk5MjMsNTY2LjYwNjE3Njg2OTEwOTUsNy4wOTQzOTc2ODExMzE3NDgKKzMyLEZyaSAyNSBGZWIgMTEsMzIyLjUyMjEwMTgwMDM4NDYsMjg3Ljk2NTE0NzM3MzYyNzI1LDE2Ny42MTkxNTQ1MTU0NjQ1LDM0Ni41MTI4MjE0NTg1NjA2NywzNDkuMjgxNDQzODUxMTE0LDU2NDYuMjcxNDUxNjczNTg3LDYxMzUuNzk3MzM3MTIyMDgwNSw1MDI4Ljg3MTkzNzE5NzM2Miw0MzY4LjA4Mjc2NDk1Njc0NDUsNTQ2MS4yMDMzMDg2NTY0NTI1LDExMDkuMDA5NzkxMTIxOTU3Myw2NDgzLjA2NjUyOTE2NzE1OCwxMjgzLjAzNjIzNTIwMTIzOTQsMzQwNS45NjczNTU2NzU0NzUsMzA0NC4zMTQwMDYyMzM2MzE1LDY5ODguNDg5MzEzMTg1NDU2LDUwNjIuODg0NTY3MTI2ODg1LDE0MjMuODcwOTA4MTgxMTYxNyw0MTQ0LjExMDcyMjY4MjU0MiwyNzU5Ljg2MTgyODYwNzIxLDQwNzcuMTgxNzYyOTY1NTExLDQ1MjcuNjA3MDA1MzYyNzUyLDQwMjcuNzE3MDk0MDQ1MjUsOTE4MS4wOTM5NjkzMDU1MzcsNTg1LjQ5NDIyOTE4NjU5Myw3LjMzMDg5MjM3NTM4Nzc5OQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Qb3B1bGF0aW9uR3Jvd3RoU0VJUl9GRF9SZWZlcmVuY2UvSHVtYW5Qb3B1bGF0aW9uTW9kZWwvaHVtYW4vRGVuc2l0eV8wLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvUG9wdWxhdGlvbkdyb3d0aFNFSVJfRkRfUmVmZXJlbmNlL0h1bWFuUG9wdWxhdGlvbk1vZGVsL2h1bWFuL0RlbnNpdHlfMC5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmMyNDQwMQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvUG9wdWxhdGlvbkdyb3d0aFNFSVJfRkRfUmVmZXJlbmNlL0h1bWFuUG9wdWxhdGlvbk1vZGVsL2h1bWFuL0RlbnNpdHlfMC5jc3YKQEAgLTAsMCArMSBAQAoraXRlcmF0aW9uLHRpbWUsCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1BvcHVsYXRpb25Hcm93dGhTRUlSX0ZEX1JlZmVyZW5jZS9IdW1hblBvcHVsYXRpb25Nb2RlbC9odW1hbi9EZW5zaXR5XzEuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Qb3B1bGF0aW9uR3Jvd3RoU0VJUl9GRF9SZWZlcmVuY2UvSHVtYW5Qb3B1bGF0aW9uTW9kZWwvaHVtYW4vRGVuc2l0eV8xLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYzI0NDAxCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Qb3B1bGF0aW9uR3Jvd3RoU0VJUl9GRF9SZWZlcmVuY2UvSHVtYW5Qb3B1bGF0aW9uTW9kZWwvaHVtYW4vRGVuc2l0eV8xLmNzdgpAQCAtMCwwICsxIEBACitpdGVyYXRpb24sdGltZSwKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvUG9wdWxhdGlvbkdyb3d0aFNFSVJfRkRfUmVmZXJlbmNlL0h1bWFuUG9wdWxhdGlvbk1vZGVsL2h1bWFuL0RlbnNpdHlfMi5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1BvcHVsYXRpb25Hcm93dGhTRUlSX0ZEX1JlZmVyZW5jZS9IdW1hblBvcHVsYXRpb25Nb2RlbC9odW1hbi9EZW5zaXR5XzIuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMxOTk1YjQKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1BvcHVsYXRpb25Hcm93dGhTRUlSX0ZEX1JlZmVyZW5jZS9IdW1hblBvcHVsYXRpb25Nb2RlbC9odW1hbi9EZW5zaXR5XzIuY3N2CkBAIC0wLDAgKzEsMzMgQEAKK2l0ZXJhdGlvbix0aW1lLEVHLUZSRy1HMjEwMDAxLEVHLUZSRy1HMjEwMDAyLEVHLUZSRy1HMjEwMDAzLEVHLUZSRy1HMjEwMDA0LEVHLUZSRy1HMjEwMDA1LEVHLUxPRS1HMjQwMDAxLEVHLUxPRS1HMjQwMDAyLEVHLUxPRS1HMjQwMDAzLEVHLUxPRS1HMjQwMDA0LEVHLUxPRS1HMjQwMDA1LEVHLUxPRS1HMjQwMDA2LEVHLUxPRS1HMjQwMDA3LEVHLUxPRS1HMjQwMDA4LEVHLUxPRS1HMjQwMDA5LEVHLVVQRS1HMjkwMDAxLEVHLVVQRS1HMjkwMDAyLEVHLVVQRS1HMjkwMDAzLEVHLVVQRS1HMjkwMDA0LEVHLVVQRS1HMjkwMDA1LEVHLVVQRS1HMjkwMDA2LEVHLVVQRS1HMjkwMDA3LEVHLVVQRS1HMjkwMDA4LEVHLVVSRy1HMzAwMDAxLEVHLVVSRy1HMzAwMDAyLEVHLVVSRy1HMzAwMDAzLEVHLVVSRy1HMzAwMDA0CisxLFR1ZSAyNSBKYW4gMTEsMS43MjM1NjcwMDY4NTUxMzg1LDAuNTg1Nzk0MDU1NTY1NTg1NSw1LjM2MjYwMjY4MTcyMTEwOCwyLjAxNDMxOTA4NDY3MDMxNDcsMTEuNzI2MjY1OTM4ODQzMDQsNDMxLjIwMjQ1NjA4NjQwMzc0LDE1MTQuNzI0NzY4NDA2MTcsMjM5Ni4zOTMyMjk4NzAyNjQsMjczNC4wNjYyMDg5NTM4ODgsNTM2OS43NDU1Mjk4NTY4NjUsMTgxLjI5NzkxMjI3NjI3OTQsMTE0Ni4yNjk0NTQ4Nzg2MTQ2LDE1ODkuMzE0OTMyMDk4MjQzOCw4MzcuMDk4MDk1NjQ0ODg4Niw0NDYuNzY2NTk2OTYyMDkxNzQsMTcxLjI3NDcwOTIxNzU3ODUsMjMzLjg2MjE0MDUyODc2NjQyLDgxLjUxNDQ0NTM2Mzk1NDg4LDE1NTMuOTgzNjk3NTgzODA1NSw1MTAuNDM0OTgxNTQzMjM1NCw5NzQuODcxMjYxMzE1MTk2NiwxNTg0LjUxMzIyOTE1OTUwNTcsMTUyOC45Mzg1NDE5MjU1NzIzLDI2NzguNzM2NzEwOTU4MDI2LDYxLjQ1MDEwMzU3NDg5MTc0LDE3LjM1NDY3MjI5ODMzNzY2NQorMixXZWQgMjYgSmFuIDExLDEuNzIzNTczOTAxMTIzMTY2LDAuNTg1Nzk2Mzk4NzQxODA3OCw1LjM2MjYyNDEzMjEzMTgzNSwyLjAxNDMyNzE0MTk0NjY1MzMsMTEuNzI2MzEyODQzOTA2Nzk1LDQzMS4yMDQxODA4OTYyMjgsMTUxNC43MzA4MjczMDUyNDM2LDIzOTYuNDAyODE1NDQzMTgzNSwyNzM0LjA3NzE0NTIxODcyMzcsNTM2OS43NjcwMDg4Mzg5ODQsMTgxLjI5ODYzNzQ2NzkyODQ3LDExNDYuMjc0MDM5OTU2NDM0LDE1ODkuMzIxMjg5MzU3OTcyLDgzNy4xMDE0NDQwMzcyNzEyLDQ0Ni43NjgzODQwMjg0Nzk1NSwxNzEuMjc1Mzk0MzE2NDE1MzcsMjMzLjg2MzA3NTk3NzMyODU1LDgxLjUxNDc3MTQyMTczNjMzLDE1NTMuOTg5OTEzNTE4NTk1Niw1MTAuNDM3MDIzMjgzMTYxNiw5NzQuODc1MTYwODAwMjQxOCwxNTg0LjUxOTU2NzIxMjQyMjMsMTUyOC45NDQ2NTc2Nzk3NCwyNjc4Ljc0NzQyNTkwNDg2OTUsNjEuNDUwMzQ5Mzc1MzA2MDQsMTcuMzU0NzQxNzE3MDI2ODYKKzMsVGh1IDI3IEphbiAxMSwxLjcyMzU4MDc5NTQxODc3MDcsMC41ODU3OTg3NDE5Mjc0MDI3LDUuMzYyNjQ1NTgyNjI4MzY0LDIuMDE0MzM1MTk5MjU1MjIxLDExLjcyNjM1OTc0OTE1ODE3LDQzMS4yMDU5MDU3MTI5NTE2LDE1MTQuNzM2ODg2MjI4NTUyNSwyMzk2LjQxMjQwMTA1NDQ0NSwyNzM0LjA4ODA4MTUyNzMwNDQsNTM2OS43ODg0ODc5MDcwMiwxODEuMjk5MzYyNjYyNDc4MzYsMTE0Ni4yNzg2MjUwNTI1OTQsMTU4OS4zMjc2NDY2NDMxMjk2LDgzNy4xMDQ3OTI0NDMwNDcyLDQ0Ni43NzAxNzExMDIwMTU2NCwxNzEuMjc2MDc5NDE3OTkyNjYsMjMzLjg2NDAxMTQyOTYzMjQ2LDgxLjUxNTA5NzQ4MDgyMjAyLDE1NTMuOTk2MTI5NDc4MjQ5Nyw1MTAuNDM5MDY1MDMxMjU0Nyw5NzQuODc5MDYwMzAwODg1LDE1ODQuNTI1OTA1MjkwNjkxMywxNTI4Ljk1MDc3MzQ1ODM3MDYsMjY3OC43NTgxNDA4OTQ1NzM0LDYxLjQ1MDU5NTE3NjcwMzU0LDE3LjM1NDgxMTEzNTk5MzcyOAorNCxGcmkgMjggSmFuIDExLDEuNzIzNTg3Njg5NzQxOTUyNCwwLjU4NTgwMTA4NTEyMjM3MDQsNS4zNjI2NjcwMzMyMTA2OTUsMi4wMTQzNDMyNTY1OTYwMTg0LDExLjcyNjQwNjY1NDU5NzE2Nyw0MzEuMjA3NjMwNTM2NTc0NDcsMTUxNC43NDI5NDUxNzYwOTc1LDIzOTYuNDIxOTg2NzA0MDQ5MiwyNzM0LjA5OTAxNzg3OTYzMDUsNTM2OS44MDk5NjcwNjA5NzEsMTgxLjMwMDA4Nzg1OTkyOSwxMTQ2LjI4MzIxMDE2NzA5NDIsMTU4OS4zMzQwMDM5NTM3MTYzLDgzNy4xMDgxNDA4NjIyMTY5LDQ0Ni43NzE5NTgxODI3MDAxLDE3MS4yNzY3NjQ1MjIzMTAzNCwyMzMuODY0OTQ2ODg1Njc4MTcsODEuNTE1NDIzNTQxMjExOTMsMTU1NC4wMDIzNDU0NjI3Njc2LDUxMC40NDExMDY3ODc1MTQ4NSw5NzQuODgyOTU5ODE3MTI2MiwxNTg0LjUzMjI0MzM5NDMxMjQsMTUyOC45NTY4ODkyNjE0NjQ1LDI2NzguNzY4ODU1OTI3MTM3LDYxLjQ1MDg0MDk3OTA4NDI1LDE3LjM1NDg4MDU1NTIzODI3Cis1LFNhdCAyOSBKYW4gMTEsMS43MjM1OTQ1ODQwOTI3MTE0LDAuNTg1ODAzNDI4MzI2NzExLDUuMzYyNjg4NDgzODc4ODI3LDIuMDE0MzUxMzEzOTY5MDQ0NSwxMS43MjY0NTM1NjAyMjM3ODUsNDMxLjIwOTM1NTM2NzA5NjYzLDE1MTQuNzQ5MDA0MTQ3ODc4MiwyMzk2LjQzMTU3MjM5MTk5NjMsMjczNC4xMDk5NTQyNzU3MDI0LDUzNjkuODMxNDQ2MzAwODM4LDE4MS4zMDA4MTMwNjAyODA0MywxMTQ2LjI4Nzc5NTI5OTkzNDcsMTU4OS4zNDAzNjEyODk3MzIzLDgzNy4xMTE0ODkyOTQ3ODA0LDQ0Ni43NzM3NDUyNzA1MzI3NCwxNzEuMjc3NDQ5NjI5MzY4NDIsMjMzLjg2NTg4MjM0NTQ2NTcsODEuNTE1NzQ5NjAyOTA2MTEsMTU1NC4wMDg1NjE0NzIxNDk3LDUxMC40NDMxNDg1NTE5NDIwNCw5NzQuODg2ODU5MzQ4OTY1NiwxNTg0LjUzODU4MTUyMzI4NiwxNTI4Ljk2MzAwNTA4OTAyMTQsMjY3OC43Nzk1NzEwMDI1NjA3LDYxLjQ1MTA4Njc4MjQ0ODE2NSwxNy4zNTQ5NDk5NzQ3NjA0OTQKKzYsU3VuIDMwIEphbiAxMSwxLjcyMzYwMTQ3ODQ3MTA0NzgsMC41ODU4MDU3NzE1NDA0MjQyLDUuMzYyNzA5OTM0NjMyNzYzLDIuMDE0MzU5MzcxMzc0MzAwNCwxMS43MjY1MDA0NjYwMzgwMjYsNDMxLjIxMTA4MDIwNDUxODEsMTUxNC43NTUwNjMxNDM4OTQ5LDIzOTYuNDQxMTU4MTE4Mjg2LDI3MzQuMTIwODkwNzE1NTE5LDUzNjkuODUyOTI1NjI2NjI0LDE4MS4zMDE1MzgyNjM1MzI2OCwxMTQ2LjI5MjM4MDQ1MTExNiwxNTg5LjM0NjcxODY1MTE3NzUsODM3LjExNDgzNzc0MDczNzcsNDQ2Ljc3NTUzMjM2NTUxMzg3LDE3MS4yNzgxMzQ3MzkxNjY5NCwyMzMuODY2ODE3ODA4OTk1MDgsODEuNTE2MDc1NjY1OTA0NTEsMTU1NC4wMTQ3Nzc1MDYzOTU2LDUxMC40NDUxOTAzMjQ1MzYyNyw5NzQuODkwNzU4ODk2NDAzLDE1ODQuNTQ0OTE5Njc3NjEyLDE1MjguOTY5MTIwOTQxMDQxOSwyNjc4Ljc5MDI4NjEyMDg0NDUsNjEuNDUxMzMyNTg2Nzk1MywxNy4zNTUwMTkzOTQ1NjAzOTQKKzcsTW9uIDMxIEphbiAxMSwxLjcyMzYwODM3Mjg3Njk2MTgsMC41ODU4MDgxMTQ3NjM1MTA1LDUuMzYyNzMxMzg1NDcyNTAxLDIuMDE0MzY3NDI4ODExNzg1NywxMS43MjY1NDczNzIwMzk4ODksNDMxLjIxMjgwNTA0ODgzODk2LDE1MTQuNzYxMTIyMTY0MTQ3MywyMzk2LjQ1MDc0Mzg4MjkxODIsMjczNC4xMzE4MjcxOTkwODIsNTM2OS44NzQ0MDUwMzgzMjcsMTgxLjMwMjI2MzQ2OTY4NTczLDExNDYuMjk2OTY1NjIwNjM3OCwxNTg5LjM1MzA3NjAzODA1MjIsODM3LjExODE4NjIwMDA4ODYsNDQ2Ljc3NzMxOTQ2NzY0MzM0LDE3MS4yNzg4MTk4NTE3MDU5MiwyMzMuODY3NzUzMjc2MjY2Myw4MS41MTY0MDE3MzAyMDcxOCwxNTU0LjAyMDk5MzU2NTUwNTcsNTEwLjQ0NzIzMjEwNTI5NzYsOTc0Ljg5NDY1ODQ1OTQzODYsMTU4NC41NTEyNTc4NTcyOTA3LDE1MjguOTc1MjM2ODE3NTI1NywyNjc4LjgwMTAwMTI4MTk4ODYsNjEuNDUxNTc4MzkyMTI1NjU0LDE3LjM1NTA4ODgxNDYzNzk3MworOCxUdWUgMSBGZWIgMTEsMS43MjM2MTUyNjczMTA0NTM0LDAuNTg1ODEwNDU3OTk1OTY5NSw1LjM2Mjc1MjgzNjM5ODA0NCwyLjAxNDM3NTQ4NjI4MTUwMSwxMS43MjY1OTQyNzgyMjkzNzgsNDMxLjIxNDUyOTkwMDA1OTIsMTUxNC43NjcxODEyMDg2MzYsMjM5Ni40NjAzMjk2ODU4OTM2LDI3MzQuMTQyNzYzNzI2MzkxLDUzNjkuODk1ODg0NTM1OTQ3LDE4MS4zMDI5ODg2Nzg3Mzk2LDExNDYuMzAxNTUwODA4NTAwMiwxNTg5LjM1OTQzMzQ1MDM1NjQsODM3LjEyMTUzNDY3MjgzMzUsNDQ2Ljc3OTEwNjU3NjkyMTIsMTcxLjI3OTUwNDk2Njk4NTM0LDIzMy44Njg2ODg3NDcyNzk0LDgxLjUxNjcyNzc5NTgxNDEsMTU1NC4wMjcyMDk2NDk0OCw1MTAuNDQ5MjczODk0MjI2MDUsOTc0Ljg5ODU1ODAzODA3MjMsMTU4NC41NTc1OTYwNjIzMjE5LDE1MjguOTgxMzUyNzE4NDcyOSwyNjc4LjgxMTcxNjQ4NTk5MzcsNjEuNDUxODI0MTk4NDM5MjI2LDE3LjM1NTE1ODIzNDk5MzIzMworOSxXZWQgMiBGZWIgMTEsMS43MjM2MjIxNjE3NzE1MjI4LDAuNTg1ODEyODAxMjM3ODAxNCw1LjM2Mjc3NDI4NzQwOTM4OSwyLjAxNDM4MzU0Mzc4MzQ0NjMsMTEuNzI2NjQxMTg0NjA2NDksNDMxLjIxNjI1NDc1ODE3ODc2LDE1MTQuNzczMjQwMjc3MzYwOSwyMzk2LjQ2OTkxNTUyNzIxMjQsMjczNC4xNTM3MDAyOTc0NDYsNTM2OS45MTczNjQxMTk0ODUsMTgxLjMwMzcxMzg5MDY5NDMzLDExNDYuMzA2MTM2MDE0NzAzNSwxNTg5LjM2NTc5MDg4ODA5MDMsODM3LjEyNDg4MzE1ODk3MjIsNDQ2Ljc4MDg5MzY5MzM0NzU0LDE3MS4yODAxOTAwODUwMDUyLDIzMy44Njk2MjQyMjIwMzQ0LDgxLjUxNzA1Mzg2MjcyNTI4LDE1NTQuMDMzNDI1NzU4MzE4Niw1MTAuNDUxMzE1NjkxMzIxNjcsOTc0LjkwMjQ1NzYzMjMwNDUsMTU4NC41NjM5MzQyOTI3MDYsMTUyOC45ODc0Njg2NDM4ODM2LDI2NzguODIyNDMxNzMyODU5NSw2MS40NTIwNzAwMDU3MzYwMSwxNy4zNTUyMjc2NTU2MjYxNzMKKzEwLFRodSAzIEZlYiAxMSwxLjcyMzYyOTA1NjI2MDE3LDAuNTg1ODE1MTQ0NDg5MDA2NCw1LjM2Mjc5NTczODUwNjUzOCwyLjAxNDM5MTYwMTMxNzYyMTMsMTEuNzI2Njg4MDkxMTcxMjI4LDQzMS4yMTc5Nzk2MjMxOTc4MywxNTE0Ljc3OTI5OTM3MDMyMiwyMzk2LjQ3OTUwMTQwNjg3NDUsMjczNC4xNjQ2MzY5MTIyNDcsNTM2OS45Mzg4NDM3ODg5NDIsMTgxLjMwNDQzOTEwNTU0OTg3LDExNDYuMzEwNzIxMjM5MjQ3NCwxNTg5LjM3MjE0ODM1MTI1MzgsODM3LjEyODIzMTY1ODUwNDksNDQ2Ljc4MjY4MDgxNjkyMjI3LDE3MS4yODA4NzUyMDU3NjU1NCwyMzMuODcwNTU5NzAwNTMxMjYsODEuNTE3Mzc5OTMwOTQwNzMsMTU1NC4wMzk2NDE4OTIwMjE2LDUxMC40NTMzNTc0OTY1ODQ0Myw5NzQuOTA2MzU3MjQyMTM1MSwxNTg0LjU3MDI3MjU0ODQ0MzQsMTUyOC45OTM1ODQ1OTM3NTg0LDI2NzguODMzMTQ3MDIyNTg2LDYxLjQ1MjMxNTgxNDAxNjA0LDE3LjM1NTI5NzA3NjUzNjc5NworMTEsRnJpIDQgRmViIDExLDEuNzIzNjM1OTUwNzc2Mzk0OCwwLjU4NTgxNzQ4Nzc0OTU4NDMsNS4zNjI4MTcxODk2ODk0OTIsMi4wMTQzOTk2NTg4ODQwMjY1LDExLjcyNjczNDk5NzkyMzU5Myw0MzEuMjE5NzA0NDk1MTE2MzMsMTUxNC43ODUzNTg0ODc1MTk1LDIzOTYuNDg5MDg3MzI0ODgwNSwyNzM0LjE3NTU3MzU3MDc5NDMsNTM2OS45NjAzMjM1NDQzMTYsMTgxLjMwNTE2NDMyMzMwNjMxLDExNDYuMzE1MzA2NDgyMTMyNCwxNTg5LjM3ODUwNTgzOTg0Nyw4MzcuMTMxNTgwMTcxNDMxNiw0NDYuNzg0NDY3OTQ3NjQ1NSwxNzEuMjgxNTYwMzI5MjY2MzcsMjMzLjg3MTQ5NTE4Mjc3MDA1LDgxLjUxNzcwNjAwMDQ2MDQ1LDE1NTQuMDQ1ODU4MDUwNTg5Miw1MTAuNDU1Mzk5MzEwMDE0NDYsOTc0LjkxMDI1Njg2NzU2NCwxNTg0LjU3NjYxMDgyOTUzMzYsMTUyOC45OTk3MDA1NjgwOTY4LDI2NzguODQzODYyMzU1MTc0Nyw2MS40NTI1NjE2MjMyNzkyOTQsMTcuMzU1MzY2NDk3NzI1MQorMTIsU2F0IDUgRmViIDExLDEuNzIzNjQyODQ1MzIwMTk3NywwLjU4NTgxOTgzMTAxOTUzNTQsNS4zNjI4Mzg2NDA5NTgyNTEsMi4wMTQ0MDc3MTY0ODI2NjIsMTEuNzI2NzgxOTA0ODYzNTg0LDQzMS4yMjE0MjkzNzM5MzQzLDE1MTQuNzkxNDE3NjI4OTUzNSwyMzk2LjQ5ODY3MzI4MTIzLDI3MzQuMTg2NTEwMjczMDg4NSw1MzY5Ljk4MTgwMzM4NTYxMSwxODEuMzA1ODg5NTQzOTYzNjIsMTE0Ni4zMTk4OTE3NDMzNTgzLDE1ODkuMzg0ODYzMzUzODcwNSw4MzcuMTM0OTI4Njk3NzUyMiw0NDYuNzg2MjU1MDg1NTE3MywxNzEuMjgyMjQ1NDU1NTA3NjgsMjMzLjg3MjQzMDY2ODc1MDc4LDgxLjUxODAzMjA3MTI4NDQ3LDE1NTQuMDUyMDc0MjM0MDIxMyw1MTAuNDU3NDQxMTMxNjExNzQsOTc0LjkxNDE1NjUwODU5MTUsMTU4NC41ODI5NDkxMzU5NzY4LDE1MjkuMDA1ODE2NTY2ODk5LDI2NzguODU0NTc3NzMwNjI0LDYxLjQ1MjgwNzQzMzUyNTc4NCwxNy4zNTU0MzU5MTkxOTEwOQorMTMsU3VuIDYgRmViIDExLDEuNzIzNjQ5NzM5ODkxNTc5MywwLjU4NTgyMjE3NDI5ODg1OTQsNS4zNjI4NjAwOTIzMTI4MTUsMi4wMTQ0MTU3NzQxMTM1MjgsMTEuNzI2ODI4ODExOTkxMjA0LDQzMS4yMjMxNTQyNTk2NTE4LDE1MTQuNzk3NDc2Nzk0NjI0LDIzOTYuNTA4MjU5Mjc1OTIyNywyNzM0LjE5NzQ0NzAxOTEzLDUzNzAuMDAzMjgzMzEyODIzLDE4MS4zMDY2MTQ3Njc1MjE4LDExNDYuMzI0NDc3MDIyOTI1MywxNTg5LjM5MTIyMDg5MzMyMzYsODM3LjEzODI3NzIzNzQ2Nyw0NDYuNzg4MDQyMjMwNTM3NiwxNzEuMjgyOTMwNTg0NDg5NTIsMjMzLjg3MzM2NjE1ODQ3MzQzLDgxLjUxODM1ODE0MzQxMjc0LDE1NTQuMDU4MjkwNDQyMzE4NCw1MTAuNDU5NDgyOTYxMzc2MjQsOTc0LjkxODA1NjE2NTIxNzUsMTU4NC41ODkyODc0Njc3NzM0LDE1MjkuMDExOTMyNTkwMTY1MywyNjc4Ljg2NTI5MzE0ODkzNSw2MS40NTMwNTMyNDQ3NTU1MTYsMTcuMzU1NTA1MzQwOTM0NzcKKzE0LE1vbiA3IEZlYiAxMSwxLjcyMzY1NjYzNDQ5MDUzODYsMC41ODU4MjQ1MTc1ODc1NTY1LDUuMzYyODgxNTQzNzUzMTg0LDIuMDE0NDIzODMxNzc2NjI0MywxMS43MjY4NzU3MTkzMDY0NTIsNDMxLjIyNDg3OTE1MjI2ODg0LDE1MTQuODAzNTM1OTg0NTMxLDIzOTYuNTE3ODQ1MzA4OTYsMjczNC4yMDgzODM4MDg5MTgsNTM3MC4wMjQ3NjMzMjU5NTcsMTgxLjMwNzMzOTk5Mzk4MDg2LDExNDYuMzI5MDYyMzIwODMzNCwxNTg5LjM5NzU3ODQ1ODIwNzEsODM3LjE0MTYyNTc5MDU3Niw0NDYuNzg5ODI5MzgyNzA2NTYsMTcxLjI4MzYxNTcxNjIxMTg0LDIzMy44NzQzMDE2NTE5MzgwNSw4MS41MTg2ODQyMTY4NDUzMiwxNTU0LjA2NDUwNjY3NTQ4LDUxMC40NjE1MjQ3OTkzMDgxLDk3NC45MjE5NTU4Mzc0NDIzLDE1ODQuNTk1NjI1ODI0OTIzMiwxNTI5LjAxODA0ODYzNzg5NTYsMjY3OC44NzYwMDg2MTAxMDc0LDYxLjQ1MzI5OTA1Njk2ODUwNCwxNy4zNTU1NzQ3NjI5NTYxMworMTUsVHVlIDggRmViIDExLDEuNzIzNjYzNTI5MTE3MDc2NSwwLjU4NTgyNjg2MDg4NTYyNjksNS4zNjI5MDI5OTUyNzkzNTg1LDIuMDE0NDMxODg5NDcxOTUxMywxMS43MjY5MjI2MjY4MDkzMjgsNDMxLjIyNjYwNDA1MTc4NTQ0LDE1MTQuODA5NTk1MTk4Njc1LDIzOTYuNTI3NDMxMzgwMzQxLDI3MzQuMjE5MzIwNjQyNDUzLDUzNzAuMDQ2MjQzNDI1MDA5LDE4MS4zMDgwNjUyMjMzNDA4NiwxMTQ2LjMzMzY0NzYzNzA4MjUsMTU4OS40MDM5MzYwNDg1MjEyLDgzNy4xNDQ5NzQzNTcwNzkxLDQ0Ni43OTE2MTY1NDIwMjQxLDE3MS4yODQzMDA4NTA2NzQ3MywyMzMuODc1MjM3MTQ5MTQ0NjUsODEuNTE5MDEwMjkxNTgyMTksMTU1NC4wNzA3MjI5MzM1MDY5LDUxMC40NjM1NjY2NDU0MDczLDk3NC45MjU4NTU1MjUyNjU3LDE1ODQuNjAxOTY0MjA3NDI2NCwxNTI5LjAyNDE2NDcxMDA5LDI2NzguODg2NzI0MTE0MTQxNSw2MS40NTM1NDQ4NzAxNjQ3MywxNy4zNTU2NDQxODUyNTUxODMKKzE2LFdlZCA5IEZlYiAxMSwxLjcyMzY3MDQyMzc3MTE5MywwLjU4NTgyOTIwNDE5MzA3MDQsNS4zNjI5MjQ0NDY4OTEzNCwyLjAxNDQzOTk0NzE5OTUwOTQsMTEuNzI2OTY5NTM0NDk5ODM1LDQzMS4yMjgzMjg5NTgyMDE3LDE1MTQuODE1NjU0NDM3MDU1OSwyMzk2LjUzNzAxNzQ5MDA2NywyNzM0LjIzMDI1NzUxOTczNiw1MzcwLjA2NzcyMzYwOTk4NCwxODEuMzA4NzkwNDU1NjAxNzUsMTE0Ni4zMzgyMzI5NzE2NzMsMTU4OS40MTAyOTM2NjQyNjUzLDgzNy4xNDgzMjI5MzY5NzY1LDQ0Ni43OTM0MDM3MDg0OTAyLDE3MS4yODQ5ODU5ODc4NzgxMiwyMzMuODc2MTcyNjUwMDkzMjUsODEuNTE5MzM2MzY3NjIzMzUsMTU1NC4wNzY5MzkyMTYzOTg2LDUxMC40NjU2MDg0OTk2NzM4Niw5NzQuOTI5NzU1MjI4Njg3NywxNTg0LjYwODMwMjYxNTI4MzMsMTUyOS4wMzAyODA4MDY3NDg4LDI2NzguODk3NDM5NjYxMDM4LDYxLjQ1Mzc5MDY4NDM0NDIwNiwxNy4zNTU3MTM2MDc4MzE5MjMKKzE3LFRodSAxMCBGZWIgMTEsMS43MjM2NzczMTg0NTI4ODgyLDAuNTg1ODMxNTQ3NTA5ODg3Miw1LjM2Mjk0NTg5ODU4OTEyNywyLjAxNDQ0ODAwNDk1OTI5OCwxMS43MjcwMTY0NDIzNzc5NzMsNDMxLjIzMDA1Mzg3MTUxNzUsMTUxNC44MjE3MTM2OTk2NzM0LDIzOTYuNTQ2NjAzNjM4MTM2NywyNzM0LjI0MTE5NDQ0MDc2Niw1MzcwLjA4OTIwMzg4MDg3OCwxODEuMzA5NTE1NjkwNzYzNTYsMTE0Ni4zNDI4MTgzMjQ2MDUsMTU4OS40MTY2NTEzMDU0NCw4MzcuMTUxNjcxNTMwMjY4Miw0NDYuNzk1MTkwODgyMTA1MDMsMTcxLjI4NTY3MTEyNzgyMjEsMjMzLjg3NzEwODE1NDc4Mzg1LDgxLjUxOTY2MjQ0NDk2ODgyLDE1NTQuMDgzMTU1NTI0MTU1Miw1MTAuNDY3NjUwMzYyMTA3ODYsOTc0LjkzMzY1NDk0NzcwODYsMTU4NC42MTQ2NDEwNDg0OTM3LDE1MjkuMDM2Mzk2OTI3ODcyMSwyNjc4LjkwODE1NTI1MDc5NjQsNjEuNDU0MDM2NDk5NTA2OTUsMTcuMzU1NzgzMDMwNjg2MzU0CisxOCxGcmkgMTEgRmViIDExLDEuNzIzNjg0MjEzMTY2MTM4MywwLjU4NTgzMzg5MDgzNzQyODgsNS4zNjI5NjczNTAzODUwOTUsMi4wMTQ0NTYwNjI3NTU5NjUzLDExLjcyNzA2MzM1MDQ3MDgsNDMxLjIzMTc3ODc5MjcyNzksMTUxNC44Mjc3NzI5OTAwMjMsMjM5Ni41NTYxODk4MzAwOCwyNzM0LjI1MjEzMTQxMTg1MTcsNTM3MC4xMTA2ODQyNTAwODIsMTgxLjMxMDI0MDkyOTI0NDYzLDExNDYuMzQ3NDAzNjk4NTIzLDE1ODkuNDIzMDA4OTc1NzEyLDgzNy4xNTUwMjAxMzg4ODU4LDQ0Ni43OTY5NzgwNjM4OTkzNiwxNzEuMjg2MzU2MjcwOTAxNzYsMjMzLjg3ODA0MzY2Mzc1NjA1LDgxLjUxOTk4ODUyMzgwNjY3LDE1NTQuMDg5MzcxODYwMzYyNyw1MTAuNDY5NjkyMjMzODg3MDMsOTc0LjkzNzU1NDY4NDU3NzgsMTU4NC42MjA5Nzk1MTA3MTM2LDE1MjkuMDQyNTEzMDc2OTg3NSwyNjc4LjkxODg3MDg4OTU5NzcsNjEuNDU0MjgyMzE1Nzk0NzIsMTcuMzU1ODUyNDUzODU4NTE3CisxOSxTYXQgMTIgRmViIDExLDEuNzIzNjkxMTA3OTA3NzM2NiwwLjU4NTgzNjIzNDE3NDYwNSw1LjM2Mjk4ODgwMjI2OTI2MiwyLjAxNDQ2NDEyMDU4NTc2MjUsMTEuNzI3MTEwMjU4NzU2NDksNDMxLjIzMzUwMzcyMTAzMDMsMTUxNC44MzM4MzIzMDUyODU4LDIzOTYuNTY1Nzc2MDYxNDM3LDI3MzQuMjYzMDY4NDI3OTA1LDUzNzAuMTMyMTY0NzA3NjA0LDE4MS4zMTA5NjYxNzA3MDc1MywxMTQ2LjM1MTk4OTA5MTI5NCwxNTg5LjQyOTM2NjY3MjEyNCw4MzcuMTU4MzY4NzYxMjcxMyw0NDYuNzk4NzY1MjUzMDQxNywxNzEuMjg3MDQxNDE2Nzk4NDIsMjMzLjg3ODk3OTE3NjU3NDYsODEuNTIwMzE0NjAzOTg1MjEsMTU1NC4wOTU1ODgyMjIxMjksNTEwLjQ3MTczNDExNDA2MTM1LDk3NC45NDE0NTQ0Mzc0ODA2LDE1ODQuNjI3MzE3OTk4OTk0NCwxNTI5LjA0ODYyOTI1MTI0OTYsMjY3OC45Mjk1ODY1NzI0NTcsNjEuNDU0NTI4MTMzMDkzMTgsMTcuMzU1OTIxODc3MzE2MTE3CisyMCxTdW4gMTMgRmViIDExLDEuNzIzNjk4MDAyNjc5MzA4MywwLjU4NTgzODU3NzUyMTk2ODMsNS4zNjMwMTAyNTQyNDY2ODYsMi4wMTQ0NzIxNzg0NTA1ODk1LDExLjcyNzE1NzE2NzI0NjEwMSw0MzEuMjM1MjI4NjU2ODMxMzQsMTUxNC44Mzk4OTE2NDY4ODk4LDIzOTYuNTc1MzYyMzM0NDY4NSwyNzM0LjI3NDAwNTQ5MTUwNSw1MzcwLjE1MzY0NTI1ODUwOCwxODEuMzExNjkxNDE1MzIzMjUsMTE0Ni4zNTY1NzQ1MDM5OTg3LDE1ODkuNDM1NzI0Mzk2MTc0NSw4MzcuMTYxNzE3Mzk4MjEzOSw0NDYuODAwNTUyNDQ5OTUzNDQsMTcxLjI4NzcyNjU2NTY3MzYsMjMzLjg3OTkxNDY5MzQ2MDEsODEuNTIwNjQwNjg1NTgxMywxNTU0LjEwMTgwNDYxMDkxOTMsNTEwLjQ3Mzc3NjAwMzExMjMzLDk3NC45NDUzNTQyMDczMzY4LDE1ODQuNjMzNjU2NTE0ODMwNCwxNTI5LjA1NDc0NTQ1MjEsMjY3OC45NDAzMDIzMDE5LDYxLjQ1NDc3Mzk1MTQ2MDI2LDE3LjM1NTk5MTMwMTA3NTUxNgorMjEsTW9uIDE0IEZlYiAxMSwxLjcyMzcwNDg5NzQ4MDM4NTIsMC41ODU4NDA5MjA4NzkzNTk3LDUuMzYzMDMxNzA2MzE1OTEyLDIuMDE0NDgwMjM2MzQ5ODk5NSwxMS43MjcyMDQwNzU5MzY0NTYsNDMxLjIzNjk1MzYwMDAxNDMsMTUxNC44NDU5NTEwMTQ0MjQxLDIzOTYuNTg0OTQ4NjQ4NTIzNiwyNzM0LjI4NDk0MjYwMTkwOSw1MzcwLjE3NTEyNTkwMTMzNDUsMTgxLjMxMjQxNjY2MzA0MjYsMTE0Ni4zNjExNTk5MzYzMjY3LDE1ODkuNDQyMDgyMTQ3NDMyMyw4MzcuMTY1MDY2MDQ5NDg2OSw0NDYuODAyMzM5NjU0NTEzNDUsMTcxLjI4ODQxMTcxNzQ4MDg0LDIzMy44ODA4NTAyMTQzNDkwNyw4MS41MjA5NjY3Njg1NzI4MywxNTU0LjEwODAyMTAyNjMxMjEsNTEwLjQ3NTgxNzkwMDkwMTQsOTc0Ljk0OTI1Mzk5Mzg4MTcsMTU4NC42Mzk5OTUwNTc3OTEzLDE1MjkuMDYwODYxNjc5MTI0NCwyNjc4Ljk1MTAxODA3NzIwMSw2MS40NTUwMTk3NzA4NzkzMiwxNy4zNTYwNjA3MjUxMzIwMQorMjIsVHVlIDE1IEZlYiAxMSwxLjcyMzcxMTc5MjMwOTU2MjYsMC41ODU4NDMyNjQyNDYzMDE3LDUuMzYzMDUzMTU4NDcyNTY3LDIuMDE0NDg4Mjk0MjgyMDUsMTEuNzI3MjUwOTg0ODE3OTg3LDQzMS4yMzg2Nzg1NTAyMjcyMywxNTE0Ljg1MjAxMDQwNjY1NDIsMjM5Ni41OTQ1MzUwMDE2NDgsMjczNC4yOTU4Nzk3NTY4ODc2LDUzNzAuMTk2NjA2NjMxNzA4LDE4MS4zMTMxNDE5MTM3MTc3MSwxMTQ2LjM2NTc0NTM4NzM0MjcsMTU4OS40NDg0Mzk5MjQ2MDE2LDgzNy4xNjg0MTQ3MTQ0MDc1LDQ0Ni44MDQxMjY4NjYzNTcyLDE3MS4yODkwOTY4NzIwODA0NSwyMzMuODgxNzg1NzM5MDUwOCw4MS41MjEyOTI4NTI4OTMzMiwxNTU0LjExNDIzNzQ2NzA0MDMsNTEwLjQ3Nzg1OTgwNzAxMjM1LDk3NC45NTMxNTM3OTYzMjA0LDE1ODQuNjQ2MzMzNjI2NTg1NiwxNTI5LjA2Njk3NzkzMTA3NiwyNjc4Ljk2MTczMzg5NjE3NCw2MS40NTUyNjU1OTEzMDAyMjUsMTcuMzU2MTMwMTQ5NDcxNDQ3CisyMyxXZWQgMTYgRmViIDExLDEuNzIzNzE4Njg3MTY2ODU1NywwLjU4NTg0NTYwNzYyMjc5OTYsNS4zNjMwNzQ2MTA3MTY2OTk2LDIuMDE0NDk2MzUyMjQ3MDU5LDExLjcyNzI5Nzg5Mzg5MDgwMyw0MzEuMjQwNDAzNTA3NDc0MywxNTE0Ljg1ODA2OTgyMzU5MywyMzk2LjYwNDEyMTM5Mzg2NDMsMjczNC4zMDY4MTY5NTY0NjYzLDUzNzAuMjE4MDg3NDQ5Njc2LDE4MS4zMTM4NjcxNjczNTAyOCwxMTQ2LjM3MDMzMDg1NzA1NzMsMTU4OS40NTQ3OTc3Mjc2OTY0LDgzNy4xNzE3NjMzOTI5ODMzLDQ0Ni44MDU5MTQwODU0ODg5LDE3MS4yODk3ODIwMjk0NzM5NywyMzMuODgyNzIxMjY3NTY3NDYsODEuNTIxNjE4OTM4NTQzNTQsMTU1NC4xMjA0NTM5MzMxMTgxLDUxMC40Nzk5MDE3MjE0NDk3LDk3NC45NTcwNTM2MTQ2NjE4LDE1ODQuNjUyNjcyMjIxMjI3LDE1MjkuMDczMDk0MjA3OTY4OCwyNjc4Ljk3MjQ0OTc1ODg0NDUsNjEuNDU1NTExNDEyNzIzNTQ2LDE3LjM1NjE5OTU3NDA5Mzk4NQorMjQsVGh1IDE3IEZlYiAxMSwxLjcyMzcyNTU4MjA1MTYwMDYsMC41ODU4NDc5NTEwMDg2Mjc0LDUuMzYzMDk2MDYzMDQ2MjQzLDIuMDE0NTA0NDEwMjQ0MTUwMywxMS43MjczNDQ4MDMxNTAzOSw0MzEuMjQyMTI4NDcxNTg5MSwxNTE0Ljg2NDEyOTI2NDY1NjksMjM5Ni42MTM3MDc4MjQyNDc3LDI3MzQuMzE3NzU0MTk5NTksNTM3MC4yMzk1NjgzNTMxNjk1LDE4MS4zMTQ1OTI0MjM4NzA0LDExNDYuMzc0OTE2MzQ1MDI4NiwxNTg5LjQ2MTE1NTU1NjEwNSw4MzcuMTc1MTEyMDg0ODkxOSw0NDYuODA3NzAxMzExNzM2MzcsMTcxLjI5MDQ2NzE4OTU5NTM4LDIzMy44ODM2NTY3OTk4MDg4NSw4MS41MjE5NDUwMjU0OTIwNCwxNTU0LjEyNjY3MDQyMzk0NjMsNTEwLjQ4MTk0MzY0NDAxNyw5NzQuOTYwOTUzNDQ4NTMwMywxNTg0LjY1OTAxMDg0MTEwNTYsMTUyOS4wNzkyMTA1MDkyMTI4LDI2NzguOTgzMTY1NjY0MTc4Niw2MS40NTU3NTcyMzUxMjU1OCwxNy4zNTYyNjg5OTg5OTI5MworMjUsRnJpIDE4IEZlYiAxMSwxLjcyMzczMjQ3Njk2MzI0MSwwLjU4NTg1MDI5NDQwMzU5NjYsNS4zNjMxMTc1MTU0NTk0NywyLjAxNDUxMjQ2ODI3MjY3NDcsMTEuNzI3MzkxNzEyNTkyOTU2LDQzMS4yNDM4NTM0NDI0MzI4NSwxNTE0Ljg3MDE4ODcyOTM1NzYsMjM5Ni42MjMyOTQyOTIwMjY1LDI3MzQuMzI4NjkxNDg1Mzc5Nyw1MzcwLjI2MTA0OTM0MDQ1NSwxODEuMzE1MzE3NjgzMjE5NjMsMTE0Ni4zNzk1MDE4NTA4ODcyLDE1ODkuNDY3NTEzNDA5MzE0NSw4MzcuMTc4NDYwNzg5ODYyOSw0NDYuODA5NDg4NTQ0OTU1NSwxNzEuMjkxMTUyMzUyMzg5NTMsMjMzLjg4NDU5MjMzNTY5OTYsODEuNTIyMjcxMTEzNzEyNTgsMTU1NC4xMzI4ODY5MzkwMjQsNTEwLjQ4Mzk4NTU3NDU0OTUsOTc0Ljk2NDg1MzI5NzYxMTMsMTU4NC42NjUzNDk0ODU3MSwxNTI5LjA4NTMyNjgzNDMxNTgsMjY3OC45OTM4ODE2MTEzMTQ1LDYxLjQ1NjAwMzA1ODQ4NjU0NCwxNy4zNTYzMzg0MjQxNjI2OQorMjYsU2F0IDE5IEZlYiAxMSwxLjcyMzczOTM3MTg5OTg5MTUsMC41ODU4NTI2Mzc4MDcwNjU4LDUuMzYzMTM4OTY3OTUwNTA5LDIuMDE0NTIwNTI2MzMwNDI3OCwxMS43Mjc0Mzg2MjIyMDU2OCw0MzEuMjQ1NTc4NDE5NTMzNDQsMTUxNC44NzYyNDgyMTYwMzc4LDIzOTYuNjMyODgwNzk0NTc4LDI3MzQuMzM5NjI4ODEwODQxLDUzNzAuMjgyNTMwNDA1NjU4LDE4MS4zMTYwNDI5NDUxOTk1NywxMTQ2LjM4NDA4NzM3MzM3ODYsMTU4OS40NzM4NzEyODU1ODUzLDgzNy4xODE4MDk1MDY5ODA4LDQ0Ni44MTEyNzU3ODQ2NTczLDE3MS4yOTE4Mzc1MTc2Njg5NCwyMzMuODg1NTI3ODc0OTgzNzgsODEuNTIyNTk3MjAzMTE1OTEsMTU1NC4xMzkxMDM0NzY2NTEsNTEwLjQ4NjAyNzUxMjQ4ODUzLDk3NC45Njg3NTMxNjA4MzgsMTU4NC42NzE2ODgxNTMzMDY0LDE1MjkuMDkxNDQzMTgxNjA0LDI2NzkuMDA0NTk3NTk3MzIsNjEuNDU2MjQ4ODgyNzM5MTYsMTcuMzU2NDA3ODQ5NTg0Mjc2CisyNyxTdW4gMjAgRmViIDExLDEuNzIzNzQ2MjY2ODY0ODU1MywwLjU4NTg1NDk4MTIyMDE1ODEsNS4zNjMxNjA0MjA1Mjk2NDMsMi4wMTQ1Mjg1ODQ0MjEyNzEsMTEuNzI3NDg1NTMyMDExMDM0LDQzMS4yNDczMDM0MDM3MTc2LDE1MTQuODgyMzA3NzI3NjAxLDIzOTYuNjQyNDY3MzM2NDk2LDI3MzQuMzUwNTY2MTgxMjE2NCw1MzcwLjMwNDAxMTU1OTA3MywxODEuMzE2NzY4MjEwMTU3OCwxMTQ2LjM4ODY3MjkxNDcwMDIsMTU4OS40ODAyMjkxODc5NjQ2LDgzNy4xODUxNTgyMzc4NSw0NDYuODEzMDYzMDMxNjk4NDUsMTcxLjI5MjUyMjY4NTc2MTk4LDIzMy44ODY0NjM0MTgxMDk3LDgxLjUyMjkyMzI5Mzg1ODMxLDE1NTQuMTQ1MzIwMDM5ODA1Nyw1MTAuNDg4MDY5NDU4ODEyNyw5NzQuOTcyNjUzMDQwMDc5NSwxNTg0LjY3ODAyNjg0NjkzMjIsMTUyOS4wOTc1NTk1NTQwMDksMjY3OS4wMTUzMTM2MjczMjk4LDYxLjQ1NjQ5NDcwODAwMTI1LDE3LjM1NjQ3NzI3NTI5MDk1NgorMjgsTW9uIDIxIEZlYiAxMSwxLjcyMzc1MzE2MTg1NzgyLDAuNTg1ODU3MzI0NjQyNzY2OSw1LjM2MzE4MTg3MzE5NTg5NiwyLjAxNDUzNjY0MjU0NDgzOCwxMS43Mjc1MzI0NDIwMDY4ODgsNDMxLjI0OTAyODM5NDkwNjksMTUxNC44ODgzNjcyNjM3NzIsMjM5Ni42NTIwNTM5MTczNDUsMjczNC4zNjE1MDM1OTYwMDgsNTM3MC4zMjU0OTI3OTk3MjIsMTgxLjMxNzQ5MzQ3ODA2MTMyLDExNDYuMzkzMjU4NDc0NjQzNywxNTg5LjQ4NjU4NzExNjE2MzMsODM3LjE4ODUwNjk4MjMxODQsNDQ2LjgxNDg1MDI4NTk5NzYsMTcxLjI5MzIwNzg1NjYzNzQ4LDIzMy44ODczOTg5NjUwMzQ4Niw4MS41MjMyNDkzODU5MjQ5OCwxNTU0LjE1MTUzNjYyODIwNiw1MTAuNDkwMTExNDEzNDI5Miw5NzQuOTc2NTUyOTM1MTU4MywxNTg0LjY4NDM2NTU2NjI5OTQsMTUyOS4xMDM2NzU5NTEyNTI2LDI2NzkuMDI2MDI5NzAwODU3Niw2MS40NTY3NDA1MzQyNjE2NSwxNy4zNTY1NDY3MDEyNzk1NzMKKzI5LFR1ZSAyMiBGZWIgMTEsMS43MjM3NjAwNTY4NzY0OTcyLDAuNTg1ODU5NjY4MDc0MTE0OCw1LjM2MzIwMzMyNTk0MjE0OSwyLjAxNDU0NDcwMDY5ODQ1NSwxMS43Mjc1NzkzNTIxNzc2NzgsNDMxLjI1MDc1MzM5MjUyODk2LDE1MTQuODk0NDI2ODIyNTM5OCwyMzk2LjY2MTY0MDUzMzk0NCwyNzM0LjM3MjQ0MTA1MTU4Nyw1MzcwLjM0Njk3NDEyMDQ3OSwxODEuMzE4MjE4NzQ4NjY5NDcsMTE0Ni4zOTc4NDQwNTE2ODc4LDE1ODkuNDkyOTQ1MDY4MDcxOCw4MzcuMTkxODU1NzM5Mjc0Nyw0NDYuODE2NjM3NTQ2OTYxNjYsMTcxLjI5Mzg5MzAzMDA2ODA2LDIzMy44ODgzMzQ1MTU0NDg4Niw4MS41MjM1NzU0NzkyMDc2OCwxNTU0LjE1Nzc1MzIzOTc4ODcsNTEwLjQ5MjE1MzM3NTY2MDQ1LDk3NC45ODA0NTI4NDQ3ODA0LDE1ODQuNjkwNzA0MzA5MzA1LDE1MjkuMTA5NzkyMzcxMzA1LDI2NzkuMDM2NzQ1ODE0MzQ4LDYxLjQ1Njk4NjM2MTQzODc2NiwxNy4zNTY2MTYxMjc1MjcwOQorMzAsV2VkIDIzIEZlYiAxMSwxLjcyMzc2Njk1MTkyMzA2MDMsMC41ODU4NjIwMTE1MTQ5NDA0LDUuMzYzMjI0Nzc4Nzc1MTY1LDIuMDE0NTUyNzU4ODg0NjYyLDExLjcyNzYyNjI2MjUzODE4OCw0MzEuMjUyNDc4Mzk3MTI3NTYsMTUxNC45MDA0ODY0MDU4MTUsMjM5Ni42NzEyMjcxODkzMTUsMjczNC4zODMzNzg1NTE0MDEsNTM3MC4zNjg0NTU1MjgxMTI1LDE4MS4zMTg5NDQwMjIyMTA5LDExNDYuNDAyNDI5NjQ3Mjc3MSwxNTg5LjQ5OTMwMzA0NTY5NCw4MzcuMTk1MjA0NTA5Nzc0NSw0NDYuODE4NDI0ODE1MTU0LDE3MS4yOTQ1NzgyMDYyNjk3MywyMzMuODg5MjcwMDY5NjQ2NTMsODEuNTIzOTAxNTczODA5MjEsMTU1NC4xNjM5Njk4NzY1MTM5LDUxMC40OTQxOTUzNDYxNTAyLDk3NC45ODQzNTI3NzAxNzUyLDE1ODQuNjk3MDQzMDc3OTQ2MywxNTI5LjExNTkwODgxNjA5NDYsMjY3OS4wNDc0NjE5NzExNzc3LDYxLjQ1NzIzMjE4OTYxMDA5LDE3LjM1NjY4NTU1NDA1NTM5MgorMzEsVGh1IDI0IEZlYiAxMSwxLjcyMzc3Mzg0Njk5NzE4NDIsMC41ODU4NjQzNTQ5NjUxMzMyLDUuMzYzMjQ2MjMxNjkzOTMxLDIuMDE0NTYwODE3MTAzMDc5LDExLjcyNzY3MzE3MzA4NjIxLDQzMS4yNTQyMDM0MDg2MjEzLDE1MTQuOTA2NTQ2MDEzMzExMywyMzk2LjY4MDgxMzg4MzAwNTYsMjczNC4zOTQzMTYwOTQ5MzQ4LDUzNzAuMzg5OTM3MDIxNjEyLDE4MS4zMTk2NjkyOTg2NTEzNSwxMTQ2LjQwNzAxNTI2MTE5NjQsMTU4OS41MDU2NjEwNDg3MzAyLDgzNy4xOTg1NTMyOTM2NjAyLDQ0Ni44MjAyMTIwOTA0OTA1NCwxNzEuMjk1MjYzMzg1MjEwMiwyMzMuODkwMjA1NjI3NTgzNzgsODEuNTI0MjI3NjY5NzE0MjIsMTU1NC4xNzAxODY1MzgwODgsNTEwLjQ5NjIzNzMyNDgwMjEsOTc0Ljk4ODI1MjcxMTE1ODcsMTU4NC43MDMzODE4NzE5MjUsMTUyOS4xMjIwMjUyODUzMzI3LDI2NzkuMDU4MTc4MTcwODQyLDYxLjQ1NzQ3ODAxODc2NDA0LDE3LjM1Njc1NDk4MDg2MTIwNAorMzIsRnJpIDI1IEZlYiAxMSwxLjcyMzc4MDc0MjA5OTI1NjYsMC41ODU4NjY2OTg0MjQ4MjQ5LDUuMzYzMjY3Njg0Njk5NjU2LDIuMDE0NTY4ODc1MzU0MTU5LDExLjcyNzcyMDA4MzgyNDM3Niw0MzEuMjU1OTI4NDI3MTA3MiwxNTE0LjkxMjYwNTY0NTM3LDIzOTYuNjkwNDAwNjE1NTU1LDI3MzQuNDA1MjUzNjgyODAyNiw1MzcwLjQxMTQxODYwMjE4NiwxODEuMzIwMzk0NTc4MDMxNjUsMTE0Ni40MTE2MDA4OTM3MDI4LDE1ODkuNTEyMDE5MDc3NTM4LDgzNy4yMDE5MDIwOTExMTk4LDQ0Ni44MjE5OTkzNzMwNzE1LDE3MS4yOTU5NDg1NjY5MjgsMjMzLjg5MTE0MTE4OTMxMzMsODEuNTI0NTUzNzY2OTQxMDMsMTU1NC4xNzY0MDMyMjQ4NjEsNTEwLjQ5ODI3OTMxMTczMDksOTc0Ljk5MjE1MjY2Nzk1MDIsMTU4NC43MDk3MjA2OTE1OTc4LDE1MjkuMTI4MTQxNzc5MzYzNCwyNjc5LjA2ODg5NDQxMzk0MzMsNjEuNDU3NzIzODQ4OTE0NDI2LDE3LjM1NjgyNDQwNzk0ODQzNApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Qb3B1bGF0aW9uR3Jvd3RoU0VJUl9GRF9SZWZlcmVuY2UvSHVtYW5Qb3B1bGF0aW9uTW9kZWwvaHVtYW4vSW5jaWRlbmNlXzAuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Qb3B1bGF0aW9uR3Jvd3RoU0VJUl9GRF9SZWZlcmVuY2UvSHVtYW5Qb3B1bGF0aW9uTW9kZWwvaHVtYW4vSW5jaWRlbmNlXzAuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJjMjQ0MDEKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1BvcHVsYXRpb25Hcm93dGhTRUlSX0ZEX1JlZmVyZW5jZS9IdW1hblBvcHVsYXRpb25Nb2RlbC9odW1hbi9JbmNpZGVuY2VfMC5jc3YKQEAgLTAsMCArMSBAQAoraXRlcmF0aW9uLHRpbWUsCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1BvcHVsYXRpb25Hcm93dGhTRUlSX0ZEX1JlZmVyZW5jZS9IdW1hblBvcHVsYXRpb25Nb2RlbC9odW1hbi9JbmNpZGVuY2VfMS5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1BvcHVsYXRpb25Hcm93dGhTRUlSX0ZEX1JlZmVyZW5jZS9IdW1hblBvcHVsYXRpb25Nb2RlbC9odW1hbi9JbmNpZGVuY2VfMS5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmMyNDQwMQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvUG9wdWxhdGlvbkdyb3d0aFNFSVJfRkRfUmVmZXJlbmNlL0h1bWFuUG9wdWxhdGlvbk1vZGVsL2h1bWFuL0luY2lkZW5jZV8xLmNzdgpAQCAtMCwwICsxIEBACitpdGVyYXRpb24sdGltZSwKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvUG9wdWxhdGlvbkdyb3d0aFNFSVJfRkRfUmVmZXJlbmNlL0h1bWFuUG9wdWxhdGlvbk1vZGVsL2h1bWFuL0luY2lkZW5jZV8yLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvUG9wdWxhdGlvbkdyb3d0aFNFSVJfRkRfUmVmZXJlbmNlL0h1bWFuUG9wdWxhdGlvbk1vZGVsL2h1bWFuL0luY2lkZW5jZV8yLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YWQxYTViCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Qb3B1bGF0aW9uR3Jvd3RoU0VJUl9GRF9SZWZlcmVuY2UvSHVtYW5Qb3B1bGF0aW9uTW9kZWwvaHVtYW4vSW5jaWRlbmNlXzIuY3N2CkBAIC0wLDAgKzEsMzMgQEAKK2l0ZXJhdGlvbix0aW1lLEVHLUZSRy1HMjEwMDAxLEVHLUZSRy1HMjEwMDAyLEVHLUZSRy1HMjEwMDAzLEVHLUZSRy1HMjEwMDA0LEVHLUZSRy1HMjEwMDA1LEVHLUxPRS1HMjQwMDAxLEVHLUxPRS1HMjQwMDAyLEVHLUxPRS1HMjQwMDAzLEVHLUxPRS1HMjQwMDA0LEVHLUxPRS1HMjQwMDA1LEVHLUxPRS1HMjQwMDA2LEVHLUxPRS1HMjQwMDA3LEVHLUxPRS1HMjQwMDA4LEVHLUxPRS1HMjQwMDA5LEVHLVVQRS1HMjkwMDAxLEVHLVVQRS1HMjkwMDAyLEVHLVVQRS1HMjkwMDAzLEVHLVVQRS1HMjkwMDA0LEVHLVVQRS1HMjkwMDA1LEVHLVVQRS1HMjkwMDA2LEVHLVVQRS1HMjkwMDA3LEVHLVVQRS1HMjkwMDA4LEVHLVVSRy1HMzAwMDAxLEVHLVVSRy1HMzAwMDAyLEVHLVVSRy1HMzAwMDAzLEVHLVVSRy1HMzAwMDA0CisxLFR1ZSAyNSBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMixXZWQgMjYgSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzMsVGh1IDI3IEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCis0LEZyaSAyOCBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorNSxTYXQgMjkgSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzYsU3VuIDMwIEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCis3LE1vbiAzMSBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorOCxUdWUgMSBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorOSxXZWQgMiBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTAsVGh1IDMgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzExLEZyaSA0IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxMixTYXQgNSBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTMsU3VuIDYgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzE0LE1vbiA3IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxNSxUdWUgOCBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTYsV2VkIDkgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzE3LFRodSAxMCBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTgsRnJpIDExIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxOSxTYXQgMTIgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzIwLFN1biAxMyBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjEsTW9uIDE0IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyMixUdWUgMTUgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzIzLFdlZCAxNiBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjQsVGh1IDE3IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyNSxGcmkgMTggRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzI2LFNhdCAxOSBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjcsU3VuIDIwIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyOCxNb24gMjEgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzI5LFR1ZSAyMiBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMzAsV2VkIDIzIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCiszMSxUaHUgMjQgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzMyLEZyaSAyNSBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Qb3B1bGF0aW9uR3Jvd3RoU0VJUl9GRF9SZWZlcmVuY2UvSHVtYW5Qb3B1bGF0aW9uTW9kZWwvcnVucGFyYW1ldGVycy5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1BvcHVsYXRpb25Hcm93dGhTRUlSX0ZEX1JlZmVyZW5jZS9IdW1hblBvcHVsYXRpb25Nb2RlbC9ydW5wYXJhbWV0ZXJzLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMjk1MDY2Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Qb3B1bGF0aW9uR3Jvd3RoU0VJUl9GRF9SZWZlcmVuY2UvSHVtYW5Qb3B1bGF0aW9uTW9kZWwvcnVucGFyYW1ldGVycy5jc3YKQEAgLTAsMCArMSwyIEBACitwb3B1bGF0aW9uSWRlbnRpZmllcixuYW1lLHRhcmdldElTT0tleSxiaXJ0aFJhdGUsZGVhdGhSYXRlLHRpbWVQZXJpb2QKK2h1bWFuLEh1bWFuUG9wdWxhdGlvbk1vZGVsLCwzLjlFLTUsMy41RS01LDg2NDAwMDAwClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Qb3B1bGF0aW9uR3Jvd3RoU0VJUl9GRF9SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vRGlzZWFzZSBEZWF0aHNfMC5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1BvcHVsYXRpb25Hcm93dGhTRUlSX0ZEX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9EaXNlYXNlIERlYXRoc18wLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYzI0NDAxCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Qb3B1bGF0aW9uR3Jvd3RoU0VJUl9GRF9SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vRGlzZWFzZSBEZWF0aHNfMC5jc3YKQEAgLTAsMCArMSBAQAoraXRlcmF0aW9uLHRpbWUsCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1BvcHVsYXRpb25Hcm93dGhTRUlSX0ZEX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9EaXNlYXNlIERlYXRoc18xLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvUG9wdWxhdGlvbkdyb3d0aFNFSVJfRkRfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL0Rpc2Vhc2UgRGVhdGhzXzEuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJjMjQ0MDEKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1BvcHVsYXRpb25Hcm93dGhTRUlSX0ZEX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9EaXNlYXNlIERlYXRoc18xLmNzdgpAQCAtMCwwICsxIEBACitpdGVyYXRpb24sdGltZSwKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvUG9wdWxhdGlvbkdyb3d0aFNFSVJfRkRfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL0Rpc2Vhc2UgRGVhdGhzXzIuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Qb3B1bGF0aW9uR3Jvd3RoU0VJUl9GRF9SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vRGlzZWFzZSBEZWF0aHNfMi5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGFkMWE1YgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvUG9wdWxhdGlvbkdyb3d0aFNFSVJfRkRfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL0Rpc2Vhc2UgRGVhdGhzXzIuY3N2CkBAIC0wLDAgKzEsMzMgQEAKK2l0ZXJhdGlvbix0aW1lLEVHLUZSRy1HMjEwMDAxLEVHLUZSRy1HMjEwMDAyLEVHLUZSRy1HMjEwMDAzLEVHLUZSRy1HMjEwMDA0LEVHLUZSRy1HMjEwMDA1LEVHLUxPRS1HMjQwMDAxLEVHLUxPRS1HMjQwMDAyLEVHLUxPRS1HMjQwMDAzLEVHLUxPRS1HMjQwMDA0LEVHLUxPRS1HMjQwMDA1LEVHLUxPRS1HMjQwMDA2LEVHLUxPRS1HMjQwMDA3LEVHLUxPRS1HMjQwMDA4LEVHLUxPRS1HMjQwMDA5LEVHLVVQRS1HMjkwMDAxLEVHLVVQRS1HMjkwMDAyLEVHLVVQRS1HMjkwMDAzLEVHLVVQRS1HMjkwMDA0LEVHLVVQRS1HMjkwMDA1LEVHLVVQRS1HMjkwMDA2LEVHLVVQRS1HMjkwMDA3LEVHLVVQRS1HMjkwMDA4LEVHLVVSRy1HMzAwMDAxLEVHLVVSRy1HMzAwMDAyLEVHLVVSRy1HMzAwMDAzLEVHLVVSRy1HMzAwMDA0CisxLFR1ZSAyNSBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMixXZWQgMjYgSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzMsVGh1IDI3IEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCis0LEZyaSAyOCBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorNSxTYXQgMjkgSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzYsU3VuIDMwIEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCis3LE1vbiAzMSBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorOCxUdWUgMSBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorOSxXZWQgMiBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTAsVGh1IDMgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzExLEZyaSA0IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxMixTYXQgNSBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTMsU3VuIDYgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzE0LE1vbiA3IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxNSxUdWUgOCBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTYsV2VkIDkgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzE3LFRodSAxMCBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTgsRnJpIDExIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxOSxTYXQgMTIgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzIwLFN1biAxMyBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjEsTW9uIDE0IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyMixUdWUgMTUgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzIzLFdlZCAxNiBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjQsVGh1IDE3IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyNSxGcmkgMTggRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzI2LFNhdCAxOSBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjcsU3VuIDIwIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyOCxNb24gMjEgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzI5LFR1ZSAyMiBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMzAsV2VkIDIzIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCiszMSxUaHUgMjQgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzMyLEZyaSAyNSBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Qb3B1bGF0aW9uR3Jvd3RoU0VJUl9GRF9SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vRV8wLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvUG9wdWxhdGlvbkdyb3d0aFNFSVJfRkRfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL0VfMC5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmMyNDQwMQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvUG9wdWxhdGlvbkdyb3d0aFNFSVJfRkRfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL0VfMC5jc3YKQEAgLTAsMCArMSBAQAoraXRlcmF0aW9uLHRpbWUsCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1BvcHVsYXRpb25Hcm93dGhTRUlSX0ZEX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9FXzEuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Qb3B1bGF0aW9uR3Jvd3RoU0VJUl9GRF9SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vRV8xLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYzI0NDAxCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Qb3B1bGF0aW9uR3Jvd3RoU0VJUl9GRF9SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vRV8xLmNzdgpAQCAtMCwwICsxIEBACitpdGVyYXRpb24sdGltZSwKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvUG9wdWxhdGlvbkdyb3d0aFNFSVJfRkRfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL0VfMi5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1BvcHVsYXRpb25Hcm93dGhTRUlSX0ZEX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9FXzIuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQwMTkzNDcKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1BvcHVsYXRpb25Hcm93dGhTRUlSX0ZEX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9FXzIuY3N2CkBAIC0wLDAgKzEsMzMgQEAKK2l0ZXJhdGlvbix0aW1lLEVHLUZSRy1HMjEwMDAxLEVHLUZSRy1HMjEwMDAyLEVHLUZSRy1HMjEwMDAzLEVHLUZSRy1HMjEwMDA0LEVHLUZSRy1HMjEwMDA1LEVHLUxPRS1HMjQwMDAxLEVHLUxPRS1HMjQwMDAyLEVHLUxPRS1HMjQwMDAzLEVHLUxPRS1HMjQwMDA0LEVHLUxPRS1HMjQwMDA1LEVHLUxPRS1HMjQwMDA2LEVHLUxPRS1HMjQwMDA3LEVHLUxPRS1HMjQwMDA4LEVHLUxPRS1HMjQwMDA5LEVHLVVQRS1HMjkwMDAxLEVHLVVQRS1HMjkwMDAyLEVHLVVQRS1HMjkwMDAzLEVHLVVQRS1HMjkwMDA0LEVHLVVQRS1HMjkwMDA1LEVHLVVQRS1HMjkwMDA2LEVHLVVQRS1HMjkwMDA3LEVHLVVQRS1HMjkwMDA4LEVHLVVSRy1HMzAwMDAxLEVHLVVSRy1HMzAwMDAyLEVHLVVSRy1HMzAwMDAzLEVHLVVSRy1HMzAwMDA0CisxLFR1ZSAyNSBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMixXZWQgMjYgSmFuIDExLDUuODAwMTk4MTQ0NTc2MjMzRS00LDAuMCwwLjAsMC4wOTY1MDM1MzEyMzkxMzM1NSwwLjAsMC4wMzQ4NjQwNDUzMTgwNjgxMiwwLjAsMC4wLDAuMDE0OTcyMjAyMTQ3OTA0NjI1LDAuMDEwNzAwNjU1NTY2OTIxMzU3LDAuMCwwLjAsMC4wLDAuMCw1LjY3ODg3NDAwNTE0NjgwMUUtNCw4LjM3MTUxOTg3MzEwMDkxNCwwLjA5NzY4NTk0NDI3MzE1NDg3LDAuMCwwLjAsMC4wMzg4MDY3MDQwODk1MjE2NiwwLjAsMC4wLDAuMCwwLjA2MDE1NjI4ODE4OTcwOTQsMC4wMzU1MDMxNjM3NjkxNjAxNywwLjAKKzMsVGh1IDI3IEphbiAxMSw3LjUzOTg1MTU2NjE1NjU4MUUtNCwwLjAsMC4wLDAuMTI1NDQ3ODE0OTUxMTE1NzMsMC4wLDAuMDQ1MzIwODE4MjY2ODEzNzgsMC4wLDAuMCwwLjAxOTQ2MjgxNDY5OTE0ODQxOCwwLjAxMzkxMDEwMzE3NTE4MzY4MiwwLjAsMC4wLDAuMCwwLjAsNy4zODIxMzg2ODQ3MDU5MUUtNCwxMC44ODIzODIyMTIxNjYxNDYsMC4xMjY5ODQ4ODgxMDc0ODQ0NiwwLjAsMC4wLDAuMDUwNDQ1OTk4NDMyNjU2NTQsMC4wLDAuMCwwLjAsMC4wNzgxOTg5NjM0MDcwODU4NiwwLjA0NjE1MTYyNjA0MzM1MjcyLDAuMAorNCxGcmkgMjggSmFuIDExLDAuMDA1MDQyMjExMjU4MzI2ODY1NSwwLjAwMTM4NTEyNzAzNDg5NTcxOCw5Ljk0NTg1MDUwNjM0NTAwMkUtNCwwLjU5ODgyMDM1MDI0MzEyNDYsMy42MDUzNTk0NzUwOTY0MDlFLTUsMC4yNzkxODA2NTE3ODk1MzU0NCwxLjAyMjg2MDI3OTQxMDY3MkUtNCwwLjAwNTU3ODQyNTgwMjcwNzg3NCwwLjEyMjY5NjI2MTkyMDQyMTA2LDAuMDk1NDg1OTg4Mjc3NTQ4MTksMC4wMDQ3ODM3MDI4MTQ4MDU0OTEsMC4wMDQ4MTI2MDU4NTMzOTk4NzcsMC4wLDAuMDAyMDMyNDU5NTEyMTM4OTY2NiwwLjAxNDYyNDU0OTM0NzA4MzkxNiwzOC40OTQ3OTMyMjc5NzM5MywwLjgyNjUzOTE1NjQxNTU0OTMsMy4wMjAzOTEyNDY2MzgxODNFLTgsMC4wMDExNDkyODg5ODUxOTA0MTAyLDAuMzIzNTQzMzg3ODMxMTc1NzUsMy4wMjM3MzU1NzEyODE0NjY2RS04LDIuOTE5OTgyNjkyMjg2MzI3OEUtOCwwLjAwMzg0NzYzMzA5NjUwODYyMDYsMC41MDk5MzgyNTY4Njk2OTgyLDAuMjU1ODg5MTAxNDgwMDU3OSwwLjAKKzUsU2F0IDI5IEphbiAxMSwwLjAxMTgzNDk0Mzc3MzU3NDI4MywwLjAwMzYwMTEzNjMzODAxODAyMiwwLjAwMjU4NTc4MTgzMTEzMTA0MTMsMS4zNDQ4NjMxODA2MjU2NzQsOS4zNzM0Mjk3MTgwNzI0MTRFLTUsMC42NDkyNDY1NDU0MTg4ODE5LDIuNjU5MjkzNTI0NDY5NDM3NEUtNCwwLjAxNDUwMzEyNjA3ODQwNTAxNywwLjI4NjEwNDQzNzU3Mjc0NTU2LDAuMjI0NzQ0NjIzMzUzMTE4NTcsMC4wMTI0MzY5NTc0MzYwMjIzOSwwLjAxMjUxMjEwMTQzODU2Nzg4MywwLjAsMC4wMDUyODQxMTAxNzUwNjYxMDIsMC4wMzY3NzQzMzE4MTQzNjIyODYsODEuNjkxNTE5NjM4OTExNDMsMS45MzQzMDQyMTAxNDcyOTMsNy44NTI1OTQzODIzNTkxMDJFLTgsMC4wMDI5ODc5OTA0NDM1MDM4Njg0LDAuNzU1OTIyNzcyNjAyMzY0LDcuODYxMjg5MTU4MjIxNzFFLTgsNy41OTE1NDYxOTgzNzkxMzNFLTgsMC4wMTAwMDMzMDcyODIxMjM4MDYsMS4xOTM2MjU4Mjg3Njc0MjA4LDAuNTg3Mjg3Njk3NTU0NTYzNiwwLjAKKzYsU3VuIDMwIEphbiAxMSwwLjA0MjcxOTc2MTY5ODQ1MDIsMC4wMTY3Njc0MDIwMzk3MzA1NzcsMC4wMTM4Njc1NDQ4NDQ2Mjc3NjgsMy45Mzg3NjI4Nzk4NDAwMzE2LDUuNzg0MDg2ODM4MTYxMDYzRS00LDIuMjE1MTM2NDAzNjI4NzM3OCwwLjAwMTY2MTc0NTkzMDYwODIxNTYsMC4wODI4OTM3NDQ4NzMwMTc3LDAuOTk0NzEyNjMyMDM4NzMxNCwwLjgyNDgxMjk2NDExMjU5MjUsMC4wNjU4MjE4MzI5NjQ2NDQ2OCwwLjA3NTI0Njc0MjMxNDk1MzYsMi40NTg4MjQ5ODAxNDI5MzZFLTcsMC4wMzAyMjc0ODkwMjc0NDUxNCwwLjE4Nzc5MzgzMDYwNzA5MDE4LDIxOC4yODA1MTkxMjc1MTQ5NCw2Ljg1Njk2OTMwMzY1MTczMSwxLjQzNjE3MjA2NTk4MDg5MzdFLTUsMC4wMTc1MzIzMTQzMDYzNDA1ODUsMi42NTMwNDIyNjk2NTY0MzgsNi4zODk2MzQzMzY3MTc4MjNFLTYsMS43NzkwMDA4OTg3NjQxMjk3RS00LDAuMDU2NDAxNzY4NTUzNTkzMjMsNC4yMzY2MzA4NDcxNjg0OTksMS44NzM1NTAyNDE2Nzc1MzEsNS4wMzI5Njc5NDIzNjI2MDZFLTYKKzcsTW9uIDMxIEphbiAxMSwwLjExNzY3NzI1NjM0MzA5MTU0LDAuMDUwMTc2MTc0NTk1NjE0MzgsMC4wNDMxNTY3NDk5MDE3OTAyMDYsOS44NTc5NDIwMTI2NjU4MDYsMC4wMDE4NTk2ODczMzQ5MTU0NjY1LDUuOTYwNDk1OTM3MDAxNjc2LDAuMDA1MzU3MDI5MzAzNzI0MDg5LDAuMjYxOTk5MDY1NzMzMjI1OTYsMi42OTgyOTQ4MzUyMTI3NywyLjI4NzAxMTk2NDc2MDE4NTYsMC4yMDQxNTA4MDEzOTY2MTUxOCwwLjI0MDU4ODUzOTI3MjczNjcsOS41ODg5MDEwNjU1NjE4MzZFLTcsMC4wOTU1NTc4ODk5MzAyNjAzNiwwLjU3ODA1NTUxNDEwMjQ5MjMsNTIxLjY2NjM1OTIxMjY3MjksMTguNzUwNDU2NzcxOTAzMDgsNS41Njc1OTU3Nzc4MDYxNzFFLTUsMC4wNTU3NDk0Mzc0MTE1MTkzOSw3LjIyNDg5MjA3MzQ0OTI4MSwyLjQ1ODYxMjgxNDI4MTY2MDdFLTUsNi45MzQ1MjI4MDM1OTI4NzlFLTQsMC4xNzc2OTU2MDg4Njk5OTU0NywxMS41OTEwODEwNTM3MTkwNTUsNC44OTEzMDczNzI1NjA4MzUsMS45NjI3NTE3ODcyMDA4ODA2RS01Cis4LFR1ZSAxIEZlYiAxMSwwLjM1OTI0NTI1MTg5NzQ5NjQ1LDAuMTY3MTMzNzEwNDgyMjQzNSwwLjE1NTEyOTIwMzcxNDk0NjQ4LDI1Ljg5Nzk0MzczOTYwODcwNiwwLjAwNzMyOTcwODQ0ODg1NjI4NDUsMTcuNDM5ODk2MTkyOTgzNjAzLDAuMDIxMzUyOTU3MjI0NTYxNDI3LDAuOTgzMzQ1NzQ1ODI5NDY2MSw4LjAyMjg3OTQzNzIzMTY1NSw3LjA2MzQ0NjUwMzAyNzgzNSwwLjcyODM4ODU2NzExMjc2NjMsMC45MzI5ODkzMDQxODAyODc1LDYuMTE4NTU4MDgzMTEyNjk1RS02LDAuMzU4Njk3NzEyODU5NTU0NzYsMi4xMDQ2Nzg5MTU1NjQyOTgsMTMxNC4zNDgxNjUxOTgxNDU2LDU2LjQ3OTcwNDI2NTg2ODg0LDIuOTQwMzcyMjA1MDgzOTU0RS00LDAuMjEzMDE2MjM3NDYwMzA1NzQsMjEuNjAyMDg4MTE1OTk5NjM1LDEuMjkyNjk2NzExMjk3NjIwM0UtNCwwLjAwNDIxNDA3NTA4NDczODY2MiwwLjY2MTMwMTMxNTk4NjUzMjYsMzQuOTQ4NjA2MzA2NTcxNDUsMTMuNjMwNDcwNzA3MjgyOTIsMS4wNTg5MzY5NDQzMDkyMDc0RS00Cis5LFdlZCAyIEZlYiAxMSwxLjAxNjQxODcxNDI1Njg3NDQsMC40OTczNjE0MDQ5NTkwMDU5NCwwLjQ4MzUzMDAwNzkyOTI3ODgsNjUuNDc4NTQxMTgxODk4MDcsMC4wMjQwNzE3OTMyMzM0ODYwNSw0Ny44NTg5ODMyODM2Nzc3OSwwLjA3MDU1NjY2MDgxNDY5Mjc0LDMuMTQzNjc1ODMwOTQ3MjQzLDIyLjI4MjAzMDc0Mzc3NTUzLDIwLjE0NTYwNzM1ODEyMTk1LDIuMjYwMzgzMjExODIwNDI2NiwzLjAzNzQxMDM5MjQ0Mzg2MSwyLjQyNTMxNTU3NzM5MDcwNTJFLTUsMS4xNDY3ODIxMTQ0MjMwOTE0LDYuNjI3OTM4MjEzNTIyNjI5LDMyMjkuNDg2NDgzMTA5ODk1LDE1OC4yOTM5NjA5MzQ3MDQ1MywwLjAwMTA5MDM4Mzg4MjEyMTI0MzgsMC42ODc5MDI4OTYwNDIyOCw2MC4yMjQ0OTI3ODM0MDE4NjQsNC43ODgwODExMzg0NDQ0OTFFLTQsMC4wMTY0NDQwNzcyNTU2ODQ3MDQsMi4xMDM5NTU0MTIwNjc3OTI0LDk4LjAxODY5NzExNjY1NTk5LDM2LjA2NjYyODM3ODgyMDgsMy45NTgzODQ5NTg1MzY0MzRFLTQKKzEwLFRodSAzIEZlYiAxMSwyLjkzMjIzMzM3MzUxNTU2MSwxLjQ5NjY2Njc5MjUzNzc1NDgsMS41MzEwOTkzNjI3MTIwNjMzLDE2Ni41OTUxNjUxMDMzNjk3NywwLjA4MTgzNDI3OTkwMDgxNDc3LDEzMy4wODk5MDg1MTU5MTE2MiwwLjI0MjMxNjI4NDg2MDYwMDc1LDEwLjMwMjQyMjExNTE1NTQ1Myw2Mi45MjQ2ODg1OTk2NzIwMSw1OC42NjYwMzkwODk0NDk0NSw3LjEyMzM0MTM0NjgyOTgwOSwxMC4yMDE3Njg3Njg3MTQ3MjUsMS4wNDY5MTU1NDQwOTg1MzI5RS00LDMuNzU3NTAxNzYzMjg2NzI1LDIxLjQ1NzYyMDkyMTEyNDgzNSw4MDMxLjA1NDM1NDI3ODUxMyw0NTEuNDU0MDUzNzc3MDU2ODYsMC4wMDQxNjI0NDI0Nzk3ODg1MjU1LDIuMjg2Mzc1NTU1MzU3Nzk4NSwxNzAuNjg2MjEzMzA5NTMwNCwwLjAwMTgzMTgxNzE1MzA0MzY3NTUsMC4wNjg2MDU4MzM3Mzc1ODM2NCw2Ljg1MTA1ODMyNzc5MjcwMywyNzkuODAzNjcyNjQwMjY2Miw5Ni4yNTgyMDQwODEwNzM1NiwwLjAwMTUxNTcxMDY0NDY1NjQ3NzMKKzExLEZyaSA0IEZlYiAxMSw4LjI1MjUzNTMwMzkwOTI1Myw0LjM0MDQ2MzE1MDQ0ODc4NCw0LjYyMzczNzg0OTYxOTc1MSw0MTkuMDEzMjg2MzcxOTYxMTYsMC4yNjE3MjcwODE1MTUzNzY3LDM2Mi41MTQwNTg5NTg1ODc1LDAuNzgxNDIzNTg0NDAwNDk3NCwzMi4wMDczMDQxOTg2MjgzLDE3My44NjEyOTM4NDI5NjkwOCwxNjYuNDUwMTExMjk0NjYyMzIsMjEuNDMyNDE3MjA5ODcxNywzMi4zMTk5NDczOTg5NzI3MTUsMy45MjI0OTQ0ODUwOTkxNEUtNCwxMS42NzEwOTA5Nzk3ODMzMjIsNjYuMTQyNzM0MDMwOTc0OTksMTk4NTEuMzcxNjU5ODM4ODg2LDEyNTcuNzQ4NzgzMDg5OTk5NSwwLjAxNDM0NjI2NDEwMzcyNzU0LDcuMTg0NjQ0MTkwMTUwMTU2LDQ3Mi45MTMzMjY0NTMyMTE5NCwwLjAwNjMyNzQ2ODkwODYwNzU4OTUsMC4yNTEzNjY3NzQ5NjYyMDE1LDIxLjE3NTE3MzQwOTc1NTA2LDc4MC4yMDA4Mjk4NDU1MjkxLDI1Mi42OTQyMjI2MDA4MTgsMC4wMDUyMjcxOTU0ODkxMjYxMDU1CisxMixTYXQgNSBGZWIgMTEsMjMuMjI4Mzc3NDM3OTM3OTMsMTIuNTExMjc0ODgxNDgyNTM1LDEzLjg0NjYwMDAxNjY0NjQzOCwxMDUyLjQyNjM3MzMxMjAyODMsMC44MzM3NDQ1NTAxMzg5MTg4LDk4NS44OTMyNjExNzE3MjM4LDIuNTEzOTk2MzE4NzQ4NTc2LDk4LjgzODM0OTU4NTg2MjQsNDgwLjM1NzM1OTk3MzY4NTMzLDQ3Mi4zOTAyODI0NzUwMTg3LDYzLjk4MTE0NTM0MDk4ODYxLDEwMS45MDIyMTAyODA3Njg0NCwwLjAwMTQ2NTk5MTExMjE1Nzg0NTUsMzYuMDI1MzAyMDI1OTI5NzU0LDIwMy4wODExNTI0MDc3NjgsNDkxNTEuMjAwNTY0MDk0MDUsMzUwMi4xMjA1NDE0NDg2ODM1LDAuMDQ4Njc5MTU1MzY1ODE4OTMsMjIuNDYzNzc5MDgwMzc2NjMyLDEzMDkuMzM5NDE2NzQ0MDY3NiwwLjAyMTU1NzU2ODc2MTcxMjY1NywwLjkxMzQ2NDI1MjQ3OTE5NCw2NS4wMjc5ODQ0ODU2MjE2NiwyMTc0LjY2MDM1OTQwNTYyNSw2NjEuOTQ4NzQ5OTE2OTMyMywwLjAxNzY2MTk3NDY2MTM4NjU1CisxMyxTdW4gNiBGZWIgMTEsNjQuNzA3MTY2MzgxNjA0NDEsMzUuNDkyMjM4ODM0OTI2NCw0MC41OTgwMzgzNTQyOTgyMSwyNjI4LjUxNDM3MDQwNDkxNjUsMi41ODcxOTc4ODE3MjkyMzk2LDI2NTcuMjY4ODIxMjQzNDczLDcuODc0NDA0MjYyOTI3MjY2LDI5OC4xOTY3NDc3NzExMzM2LDEzMTUuMjk2Njk3OTMzMjA5LDEzMjYuMDYzNzkwNDg1MTI5NiwxODcuMTM0NjcyNTExNDU0MjgsMzEzLjI4MDgwNzM4MjkxMzc0LDAuMDA1MTgzODg5NTQ2MjE3NTI5LDEwOC42MzcxOTAwNzgwMDM4Nyw2MTAuMjc0Njg3NjI3NTUxOCwxMjExNzAuNDM0ODExMTg0NTgsOTY1Mi41MzMyNjA0OTI3MTMsMC4xNTg0ODI1NjUwMjI4Nzk1NSw2OC41NTM3NjE1OTA4MTY3OCwzNTg5Ljg1MDc5Nzg5OTAzNTYsMC4wNzA0ODQ3NzUzMzY3MjY0NywzLjE1MzM5NjM4Mzc3MTY2NSwxOTUuMTk1ODM4MDE0MTc2NjcsNjAwMS4zMjE1NTg5NTg1MzI1LDE3MjEuMDcxMTY1OTc2MzE4OCwwLjA1NzE1OTI1MDA5NzU5MDA1NgorMTQsTW9uIDcgRmViIDExLDE3OS41OTA0NjE3OTMyMTkxMyw5OS45MzIyMjczMDIyNTI1OCwxMTcuNzc5Njc4NzA3NTMyMTEsNjUzMS4xNTI5MTQ4NTg4NDIsNy45NDU3NzQ0NzAyNTEwNDQsNzEzMy4xMjM0MTU1MDQ5MzMsMjQuNDI2MTgyNzE0ODE4MDc2LDg5MC41MjYzNTAyNDc4MjI2LDM1OTAuMDgxODYyMDU0Njk1LDM3MDguMTI1Mzg0NTAyMTg0Myw1NDEuOTY4OTc0MjM5ODE0OCw5NTMuMTUzNzk3NzE5MTE1NywwLjAxODAxMzQ4MDI5OTY4NDE2NSwzMjQuMjM2MjI0NTc3MjM5NSwxODE3LjMyOTIyNzM3ODMyODEsMjk2NTYxLjU5NTY3NzIzNDkzLDI2NDgwLjc5MzU3Nzg5MzY0NCwwLjUwNjU4MDMxMTMzMTY3MzUsMjA3LjEwNTYxMjg0NTE2NzEsOTgwMC4xMjQxNzgzMzg5MzYsMC4yMjY1MDYzNzEwNjM1Mzg3MSwxMC42ODI0NDA0MTY3Nzg4MjEsNTc5Ljk0OTc3ODAwMDg0MDYsMTY0OTYuMDM3MTc5MzU0NjgsNDQ1NC40MzcxODU2OTI0NjUsMC4xODEwNjkwOTgxODc0MTE0CisxNSxUdWUgOCBGZWIgMTEsNDk1LjM4NDgxODQ0NjgzMzI2LDI3OC43OTU5MDk1NTg0NDE0NSwzMzcuNDA2Mjc3ODA1MTU5MDUsMTYwNDUuMzk4OTI4ODg4ODgsMjQuMDQ2NDU4OTIxODIyNzk0LDE5MDM1LjE4MDcxMzMwNjkwNSw3NC42NTc2MTYwNDYyOTQ1MiwyNjI0LjQwMzQ4MTg2OTg2LDk3NDYuNjA5MzI3MjMwNjA2LDEwMzAxLjYxODgzNDM0NzEyNiwxNTUxLjEyNTkwMTk1ODYwNDYsMjg1OC43NTg3MTkzNTkzMTIsMC4wNjA4NDQyODc4NjE3MjcxLDk1NC45MTgyNTgzODc3ODg5LDUzNDMuOTE2MTk1OTg2NTYxLDcxMTIwMC4zMTY3NjU0MTE4LDcyMDQ1LjkyNzUzMzMzOTA3LDEuNTgzOTM5MDM0MjYzNzg0Nyw2MTcuMTQ4NzUwMDAwNjI4OSwyNjU1OS40NzkwNTMxMzg0NDIsMC43MTIzMDUzMzUzODU3ODM0LDM1LjIyOTAzOTY4ODA1MTc3LDE3MDAuNzIzNjA1NDQ2NTgzOSw0NTA0Ni40NTg2MzU0MjcyNzYsMTE0MzkuNTg1MjIyODcxNTIxLDAuNTYwMTg5OTMyMDU5OTgxMgorMTYsV2VkIDkgRmViIDExLDEzNTkuODU5OTMwNzc2MzQwNCw3NzIuMzIyOTg4MjU1ODY4Myw5NTcuMDQ0NDk3NjIzNzQxMywzODQ1Mi4wMzE0Mzc1NzcyLDcyLjA2MjU3MTA4NzYzNDAzLDUwNTA0LjIwMTE3NjM0NjMxLDIyNi4wNDI3NTg0ODU0NzIwNCw3NjYyLjc1NTAxMTgwODg3MSwyNjMzOS45ODgwMzQ1MDY2MDUsMjg0NzEuMDc5MzY0MDUxNTIsNDQwMC4xMjEyOTUwNTYxNTQsODQ5MC41ODcwNDc2ODMyMTcsMC4yMDIwOTI3MTUyOTY5ODUzMywyNzg2LjQxNzI2OTA2NTczNywxNTU2Ny4zMTUzMzM3NTkyOCwxNjIwOTc1LjI2NDE2MDY4NzYsMTkzODE4LjY5NDc3MjIwOTE2LDQuODgwMTA2MTA4ODYzNjY4LDE4MjEuODAyODk4NTY0OTc3Niw3MTM0Ni4zNDQ1OTUyNzU3OSwyLjIwODgzNjgwMzU2MDEyNCwxMTQuMjMyMTIxNzI5OTYwNTQsNDk0MS42NjYxNTcyNjgzMjEsMTIyMjEyLjA4MDAwMzY4MDIxLDI5MDAwLjIyMTEwODM0MTc2NCwxLjcwNDQ4MzQ4Mjc5NTU5NTcKKzE3LFRodSAxMCBGZWIgMTEsMzcwNi41NzU4NDA3ODgyODA0LDIxMjEuMDQyMDAzNjkyNTA5OCwyNjgyLjk5MDM2MDE5MTYyNzYsODY2NzcuMzIwODU0MTkzMiwyMTMuNzQ2MDU2MDMxNjE2OSwxMzI3MjYuMjUwNzYyMTM3MjQsNjc3LjU4ODkyNTMxMzY5MDUsMjIxNTUuNzgwOTE0MDE2NTA1LDcwNjU1LjUxNjMxMTUzNjAyLDc4MDg0LjI0MzQzOTgzODM2LDEyMzU2LjY0NDU2MjY5OTYxNCwyNDk1NS40NTA0NTU3NDcyNjUsMC42NTkyOTk0Nzg5MTc1NzA5LDgwNTMuNTY0NTQ2ODU0OTIyLDQ0ODMxLjkzNzA3Njk0NTYsMzIzNTIxNS4zNDg4MjY2ODEsNTA4Nzc1LjcyOTI4MjA0NTc0LDE0LjgyMzU2MDExNTAzMzk5NCw1MzI0LjU4MjQ0NzExNzQzNiwxODgyNDguMTc5MTE1OTMzNzIsNi43NTYxNzAzNzc0OTk1NTQsMzY0LjA2MzA4NjM3NTM5NjIsMTQyMjEuMzQ1MjM0MDI3NDQ1LDMyNzczOS4wOTE1NTcwNzkzLDcxMzg1LjkxNzM1OTc2MTU5LDUuMTA2MDA3MTc5MjQ2MzU0CisxOCxGcmkgMTEgRmViIDExLDExNDQxLjg4Nzg2OTQyNTA1OCw2NTk2Ljg2NDY0NTYwODg4Niw4NTEyLjM1ODEyNTAzNjU1NSwxNjQxMjIuOTc0MjA4MzczMTcsNzQxLjY5MzEyNTM0NTEwNTMsMzg1NTc3Ljc4MjQxMzQ4ODksMjM4OC4yMzIzOTQzNzU5NzU3LDc0MTkzLjQ5OTY3NzIzOTEzLDIxMjY3MC4zMTkyMjExNzg4LDI0MjMyMC4yNzE2NjcyOTk4NSwzOTU1OS41NDA1MzIyOTY3Myw4NTM0NS45ODU1MjQ0OTMyNiwyLjU3NjYxMjM2ODMzMTgwNzYsMjcwMTEuMjU5NDg3MTI5NSwxNDc0ODcuMzA2OTY5MTI0NDcsMzk0MzgxNS41OTM1MTMzODMsMTM1OTQyMi44MzcxMDMyODg2LDUyLjg5MTM5MzQ4Mjk2MjIzLDE4MDk3LjEzMTI0MDQ2MDgyNSw1MjQ5NDUuMjM3NTQ3MzEzMiwyNC4zNTE4MTQwMjI0NDE1MSwxMzc5LjQwMTMwNzE4OTE4NTQsNDczNzAuMzUzOTMxNzQyODcsOTY1OTQzLjU1Mjk2MDEwMDUsMTcyNzI0Ljc1MTY5MzU2MDMsMTcuODM2NzE2OTYxNjQ3NDQ3CisxOSxTYXQgMTIgRmViIDExLDM0NDIwLjk4MTk3MTExNjEyLDE5NzAxLjM3NjkzODEwMDI3NSwyNTgzMS4wMjM4Njc5Mzc3MTgsMTg0ODMxLjQ3MzUzODYxNTg2LDI1OTguMDYwNTM0OTY4NDg3NCwxMDUxOTQzLjQ1MTYyOTY3NDMsODU0NS4zMDEzNzAxNDcwOSwyNDgyNjMuMjYzNTkxNDc5NDUsNjE1MTkzLjc2ODE4MDU2ODEsNzI3MzMyLjgzNjQxODEzNDYsMTIzMzI2LjM3NDgzNzA1Njk4LDI5MTk1OC44MDE1MjEyMTYzNCwxMC4xODYxMjcyNzc0NjI4NTUsOTExMzUuODIxNzkyODA0OTcsNDY1MjkxLjg4MjE4NDQ1NzczLDI0NzQ5NTIuNDMwNDUyNjY4LDI3MjAwNzkuNDUyNzA2MDQ0LDE5MC44OTA0MzkyMDUzMDgyNCw2MTU2OS4yMzEyMTQwMjYxNjQsMTIwODY4OS4xMzI4OTk1OTAzLDg4LjkwNzU3NTkzNzg1MTIsNTI4MC4xMzk5NTExMDY3NzQsMTU4MDM5LjQ5MTc4NDI3OTQ3LDI1ODI0NTYuMjY5OTU4NTQwMywzMDg2MDEuNTMxOTU5MTIyNSw2Mi42NjcyOTQ3ODEyODc0OTUKKzIwLFN1biAxMyBGZWIgMTEsOTY2NzUuNzE0ODAyMTgxMjgsNTE5NDAuMDc3OTA3MDQyOTA1LDY3NjE1LjgwMjQ5MzM5MzA0LDExODQ4MS4zMTU0MDM3MDM4Myw5NjU3LjQwNjY5MTI2MTIwMywyNDIwOTgzLjE5MjY3OTM4MiwzMzAxMS43ODM1Njc5NDQxNSw4MzcxMzQuNDc1Njg3NDgwMiwxNTk0ODE4LjExNTU0MzIxNDgsMTk2ODk3MS4yNzE0NDI4MjIsMzUyMjE3LjM1ODUxMDMwNzcsMTAxMjExMS45NTM4NTA5MzM3LDQzLjk4ODE2MDg3NDQwOTQsMzE5MDgxLjQ4MDM3NDQ4MjE3LDEyNjI3MjMuODg2NTcxMDgyLDE1ODY2MDEuODcwNjk2MTU4NiwyNTEwNjYzLjA4ODcxMjU3NjMsNzQxLjc0MzIyNzI3MDc5ODcsMjE1NTg5Ljg5NjA2NDg5MTQsMTU2MjA4Mi45MzE1NTc1NTk0LDM1MC42NzgxNzc1NDgzNTY2NCwyMTkwMy44NzU2MzI5MDMwMjYsNTM3Nzk2LjA2NTk1ODg0NjEsNTA0MDE4Ny43MzczMDkwMDUsMjgwMzM1LjYwNDE4MTEwMjYsMjMyLjU2OTEzOTY2NjI0OTAxCisyMSxNb24gMTQgRmViIDExLDE3ODk3OC45MTM4MTczNTYyMiw5NDg4My4xMDU2NDcyODAxNCw5NTI0MS42NjQxOTEyMDMsNzcwNjAuMjY0MzEyNDcyOTcsMzYzNzIuMTczOTMyODUwNTE0LDMwNzkyMjAuNzA1MTE3MzIyNSwxMzUzOTcuMDIxNjA3NzA1MDQsMjI2MTE0Ny4wNzI3MzI5MjksMjQ3MTYxNi44MDg1NDg1MTQ3LDMxMjcwMzIuODY4MDM5NDI4LDYyMzUyMS4zNTEwODk5MjgyLDI4NDEzMTIuNzkwMDMzOTc3NSwyMDkuMzY0NjExMzA1NTI5NjIsMTAxNzQ3NS4wNjQyOTA1NzE4LDE3NDYxNDUuNTU0NjYzMTcwNCwxMDMyMDAwLjQwNzU1Nzk5NTksMTYzMjg3Ny45MTc2NzY1MTQsMzA1OC43Nzg3MDY3Nzc4NzU0LDcxOTY5NC4xMjU2ODcxMTg3LDEwNDI5MjguMzk0MDI4MzI0MywxNDc5LjE1NjA5OTg1Mzg1MDMsOTc2NDYuMDk1NDA5NjgzNTksMTU1NzQxMC43Mjk1NDQ5NTEzLDQzOTMxNDcuMjA2Njg1NDA3LDE4MjMxOC40ODQ5NTg5NDEyNiw4NDguNDMwNzQyNjg4NTc3MQorMjIsVHVlIDE1IEZlYiAxMSwxNDgwOTAuNjg2NzU0MTYxMzIsMTIyNDA1LjA0NjMxNDc2MTksNjY4MjcuMjAyNTY2Mzk0NjYsNTAzMDQuOTQzODQxMDgzOTksMTEyMTgyLjAzNDAwODkwMzYzLDIxMzM4MjUuNjg2NDY3NTY2NSw1MTk3MDYuNDY4MzE5NzMwNywyNzk1Mjg5Ljg1NjE0NTY4MywxODIwNDcwLjE5MDkyOTc5MzMsMjI5ODQ3OS4zMjM4OTU5OTIsNDk4NzU1LjUyMTM4NTEzODQ1LDM2NDkyOTQuODA1NTA5NzcwOCwxMDA0LjI1ODE5MDYzNzAyMDcsMTkxMjEwNC43NTY0MDQyNDAyLDEyMDIxMDQuNTk4ODU4MjE5Myw2NzM3NTMuODM0NTAxNzg5NiwxMDY1ODY0LjE1Mzc1MzU3MjEsMTIyNDcuNDI1ODg1Mzk1NjQyLDE4MTMwMjguODUyMjU5MDc3OCw2ODA3NjAuNDcxNjcwOTM2MSw2MTI5LjI0MTQ0ODcyNjMzMyw0MTA3MzQuMjY4OTE0ODI5NiwyMzAxNjk3LjcyNjgwMDMxMjgsMjg2NzUwMi4xMzY0MDk0MzMsMTE5MDA5LjY4OTU1MTU4MDU1LDIzNTguOTQ3ODEwNjgwMDE1CisyMyxXZWQgMTYgRmViIDExLDk3MDk0LjQ4MDIzNzQ3NzgyLDExNzg3NS4zNjkzNDA2Mzc1NCw0Mzc4MS45MTM1OTM1OTYzLDMyOTY0LjE1MjgwNTEyMjg3LDE5NjE4Ny40OTQ3MTU1NTIzNCwxMzk3OTgzLjQ5NTQ2MTQ5MTIsMTY4NzQ2MC45NjY4NzYyMjgsMTg5MjY2Ni42NTA0NTI4MzUsMTE5MjY1MC41NTYwODA4NzEzLDE1MDU4MDguMjA3OTg1NjkwNiwzMjY5MjYuMjUzOTgzNzk4MywyNDg2MDA0LjA4OTg0NzU1NzcsNDc4My44MzMyMDkxNjMyNzksMTU2NTY4OS4zNDEyNTAyODYsNzg3NTU5LjExMjg5NzQzOTYsNDQxNTY0LjEyNTgyNjg3NTYsNjk4MzY5LjM5MjA5MDg1OTYsNDgwNDUuMDU4ODU4ODAyODA0LDIyNTQ0MDUuMjIwOTY5MDgxLDQ0NjAzMC4yNzA5MjU0MSwyNTM1OS4zMzA5OTkyOTkxNCwxMzk0MDMwLjkzOTYzNjg0NTYsMTY0NDI3OC4yMjA2MDEyMDk0LDE4Nzg3MDAuMDQ4NTA4NTE2LDc3OTc3LjU3NjQ2ODE3NDk0LDM4NjMuNzAwMzM1MjM0NTc0CisyNCxUaHUgMTcgRmViIDExLDYzNTU3LjE1NzY4MjIyODMzLDg3MjU1LjkwMjQxMzU5NjIsMjg2NTkuODkxNzU0Njg3MTc0LDIxNTg1LjIwMzY3NjM2MzcyLDE1NDg1Mi44MjM0MzY4MjM2Nyw5MTUxMzcuMDkwODM5MjMzNiwzMzM5OTc3Ljc2MjgyOTQxMTMsMTIzODg4Ny40MzQ4OTc3MjEsNzgwNzEwLjA0OTg0MDA5OTQsOTg1NzAxLjUzMzk0MzU3MDYsMjE0MDAzLjYzODE1NzE4MDM0LDE2MjcyNjIuNTE3NDYzMjQwNSwyMTE0OC4xNjI5ODkwMTYwNjYsMTAyNjA0Ni44NDM4NjMxMjcsNTE1NTQxLjE5MjAxNDE3ODk2LDI4OTIwMi44OTk4MjM1NDMyNyw0NTcyMjUuNjA2OTI0NDc4OTUsMTc0MDY4LjI4MzM0MTkwOTYsMTU1NDUyMC4yNDYwNjA2NzEsMjkyMDA0LjMzNTg4NTQxMjEsMTAxMDgxLjEyMjg0NzMxMTY1LDI1NjIzNjcuMTc3Mjg5ODY1NCwxMDc2Mjc1LjQ3NzQzODY2MTUsMTIyOTg2NC45Njc2NTIyNTEsNTEwNTIuOTQxOTg5OTkyMiwzMjgxLjEzMzM2MjE0MzU2NjUKKzI1LEZyaSAxOCBGZWIgMTEsNDE0MTQuMDg5Njc2NjA1NjMsNTc1NzUuMTQ2MjMwNjgyNDQsMTg2NzUuNTQ0Njg2MzQ2NzE1LDE0MDcyLjA2NzcyNDI4MTQ1MywxMDA4ODguNDYyNTYxMzE2NDEsNTk2MzM2LjQzMzIwODUyNDcsMjg5NDM2MS4yMzgyNzY4NDQ0LDgwNzIyNi41OTUxNDE0OTAzLDUwODcyNS40NDE1NTI2ODYwNCw2NDIzMDAuMDY3MTMwMTY3NywxMzk0NDYuMjY4NDE1ODU4MTgsMTA2MDI3OC4wMDQzNzQyMTg2LDgxNDI1LjMxODU2MjI4MDE0LDY2ODUyMi41NTE4MTQzNjIsMzM1OTQwLjg3MDk5MzAwMzYsMTg4NjAyLjc5MDYwODI5OTk1LDI5ODAwOC45MDUyNDgyODc5NSw1MDExNjkuODkxMTk0MDUxODMsMTAxMjgyNS4xNzkwMTEzMjk4LDE5MDMwOC4wMTY4MDg2NzczLDM2NTU1MS43NzU5NTM5MTk2LDIwNDIxMTcuNTc3Nzg4MDMzLDcwMTI2My4wNjMwOTkxNDM4LDgwMTQ2OS44MDc2MTE5NzAyLDMzMjc1Ljc2OTI3MTkxOTIzNSwyMTUyLjIxNzk0Mzk5Nzc0NjMKKzI2LFNhdCAxOSBGZWIgMTEsMjY0NzQuOTA0MjE4MDU2NDk0LDM2ODA2LjM2Nzg1MTI0OTM0LDExOTM5LjQyNzUzMjczNzA2LDkwMDMuMDQzNzc2NzYwOCw2NDQ4Mi4wNzMxMzg4MzAxNiwzODEyNTEuNzQyNTE3MTk4NiwxODQ5ODA2LjUwNzA0MTIxOTYsNTE2MDAwLjAzMDQ3MTkwNzcsMzI1MjI2LjMzMjYyMjQyNzMsNDEwNjE4LjM4MjEzNzAxODUsODkxNDQuODkyNTAwNzU4MTcsNjc3NzUzLjI4ODE3NTEwMTcsMjQ3Nzk2LjMzMTcxODI0OTkyLDQyNzMxNC4wNzY1NTAzMzQxLDIxNDc3MC4zMzI1OTExNDc2LDEyMDcyNi42NjcyMTcwOTU3MywxOTA1ODguNzk4OTA3NTQyMzcsODMwNzY0LjAzMDAwMjgwODUsNjQ3MzU5LjE5MzI5NjIwMDQsMTIxNjk2LjA3MzYxNjc5MTI0LDEwNTI2MDMuMzgyNjgyNjY5LDEzMDUxMjguMzM2MjU4MTc3LDQ0ODI1NS4yMjE1Mjg0NjA0NSw1MTI0NDQuMTk3MzQ1NTk3MywyMTI4MS44ODcxNjQ0MTExMTMsMTM3NS41NzU3MjMxOTA4MDc4CisyNyxTdW4gMjAgRmViIDExLDE3MDIyLjExMjEwMDEwMDcxMiwyMzY2MC45NTEyODMyNzg1NjYsNzY3Ny4xMjE1MzQyNDAwNTYsNTc5NS40MjMwOTA5NjQ5Niw0MTQ0Ni4wNzkwMDE5MzY4MiwyNDUxNTUuODMzMDc2NzcyMTYsMTE4ODg2MS4wOTc4Mjc0Njk3LDMzMTcyNi42NTQ1NzEwMjc5LDIwOTExNi42NzE0Mzc2NDY4NCwyNjQwMjEuMDcwMTA2OTIzNSw1NzMxNi41OTAxMzYwMjI5NSw0MzU3MTEuMTQ5NTAyOTM2LDU5NzMxMS45NTAxNDAxNzgzLDI3NDY4OS45ODA4NzA3OTQxLDEzODA5OS4xNTYxNDk5OTcyNiw3Nzc3Mi4yNDYzNzAyMzE1NywxMjI2MTYuMTQ0NjY3NzE3ODUsNjAxMDIwLjg5MDYzODI4NSw0MTYxMTEuNTYyMDE0MDAyMyw3ODI4MC42OTU4OTM1Njk4MywyMjA1MDYyLjgxNTc5NTY1Niw4Mzg3OTguOTAxMTA1NTA5MSwyODgxNjQuODgyOTIwMzI4OTQsMzI5NTYwLjUxMjkwNTgzOTM2LDEzNjkyLjQ2ODg1Mjc5Mzc3NCw4ODQuMTU0NDcxNzQ2MzA5MQorMjgsTW9uIDIxIEZlYiAxMSwxMDk4MC4xNDk4Nzg5NzkxNjYsMTUyNTguNzc1MTU3MDg5MDAzLDQ5NTIuNzQzNzQwMDEwNTExLDM3NDQuOTY0NjkyNjY1MTEzLDI2NzIyLjQzOTQ3NTQ4MTIsMTU4MTY1LjkwNjM3NzkzODcyLDc2NjM5MS40OTc5MTQyNzE4LDIxMzk0NS4wMzEwODQ1ODY1LDEzNDkwMS45NzYyOTgwODEyMiwxNzAzMTkuMzgwODA4NjQsMzY5NzIuNzQ0MzEzMzEzODcsMjgxMDA1LjY5MDI3MjQ1NDIzLDcwNDI2MS41MTc1NDEwMzM2LDE3NzEzOC4yMDU5NzE3NjA4Miw4OTA5Mi40NTQzMDAwODI1LDUwMzA5Ljg1NzY0MjkxMDgyLDc5MTY2LjU3MzE0NjE2ODU4LDM4NzQwNS41NjY1MTk4NzI0LDI2ODMwNy4xOTM1MTMxNTU1Nyw1MDUyOS4yNTY3NTU2NTkyMSwyMDA5Njk4LjY4NTIxMjgxNSw1NDA3NDMuMDk2MzA1ODE0OSwxODU4NDAuNTg1NzA5MjI3LDIxMjY2Mi43OTcwMDg2MDYxNyw4ODQxLjE0ODI0MzY1ODA4Niw1NzAuMDU2ODc4MjE4NDM3OAorMjksVHVlIDIyIEZlYiAxMSw2OTgxLjQwNTQ5OTcwMDU0Niw5Njk3Ljk5MTA5ODg2NjczNCwzMTQ5LjY0Njc0MzgzMzA1NywyMzg3LjY5ODczNTE0MTg1MywxNjk3OC4xODYzMDExMzAwNjMsMTAwNTkyLjQ0ODQyNTA3NjIyLDQ4NjgwOC41ODU5ODg1NTc2NiwxMzU5OTQuNTQyMzEzODI2MSw4NTc4NC4wNDIyMDc2NDY4NywxMDgzMDQuMjg0NzEyNjc3NDksMjM1MDguNTQyOTk0NDgwNzA0LDE3ODYxOC4yNzk2MjQ0NTU4NCw0NTY0MTkuODk1MDc3MzEwMDQsMTEyNTc2Ljg1NzA1MzY4ODA5LDU2NjU3Ljg4OTA4NjkxNDM1LDMyMTI3Ljg1NDg2MDg0MTg5Myw1MDQwNy4zNzY3NzUzNzExNywyNDYwMjkuMTQ4NTc1MjU0MzcsMTcwNDg4LjYwNDE0OTQyNjc0LDMyMTYxLjE4MzExMTQ4OTkwMywxMjc2MTkwLjk4NDA1NzEyOTEsMzQzNDg3LjU3MTkyMzA4ODcsMTE4MTIwLjM3Mjc1MDQwMTQxLDEzNTI5My40MTczNjg5NDczLDU2MzAuMDY2OTE2MjA5OTQ5LDM2Mi4xODUyMTIwMjY4ODA0NAorMzAsV2VkIDIzIEZlYiAxMSw0NDU0LjM4MzgwOTkzNTYzMyw2MTg0LjAxMTkzNzU1MzE0NywyMDEwLjEzMzExMzg4OTY3MjYsMTUyOS42MTg0NjAzMDA5MzUsMTA4MjAuODU1ODcwMTI0OTMxLDY0MjA3LjAzOTk0NzM2MDE5LDMxMDE0OS4wMTQxNTc3MjY3LDg2NzM1LjA4MjIzMTc0NjM2LDU0NzQyLjk5NTQxODI1MzAwNSw2OTExMi42Njc5OTE2NjQ1NywxNDk5OS43MjMyOTQ0OTQwOTIsMTEzOTE2LjQ5NzM5OTE0NjAzLDI5MDY0OS4yNjk1OTY3NTg0LDcxNzc5LjU1MzYxNDk4MjAxLDM2MTU5LjkwNzc4MTUyMzQyLDIwNjI3LjU0NzQ0NjQ5MDIzMywzMjIyNy45OTk5NTQzMzY1MSwxNTY2OTcuNjExMDQ0MDkxMzIsMTA4Njc2Ljk3MDQ1ODI4MzczLDIwNTUxLjE0NzczNjk5NTM2LDgxMjcxOS4yMTA4MDAwNzg3LDIxODg0NS41NTc0MzkxNDExNSw3NTMyNi4yNzc1OTUzNTM5NSw4NjM5NC4zNzAzODg0MzM3NywzNjAwLjI1NjUwMjQ5MDg5MTgsMjMwLjgzMzI2NzIxNDM4NDYKKzMxLFRodSAyNCBGZWIgMTEsMjg0NC41MTUxODAwMDUyMTksMzk0NS42NTkxOTk2MzgxMDg1LDEyODQuMTU1MTk1MTA2MDcwNiw5ODIuNjE3NDc1Nzc0MjAxMSw2ODk4LjgzMjg5Njc1MTUzNCw0MTAyNS43MjIxMzg2MjA3OSwxOTc2MjguMzg2NzA3NTg5MDMsNTUzNTUuNDQzMzM4MTgzNTg0LDM0OTY3LjIxMjEzOTY0NTMxLDQ0MTQ0LjMyNTYxNzI4MTk2LDk1NzkuMDI2ODgzOTU5ODI3LDcyNjk5LjgzNDYxNTA2NTU2LDE4NTA2NS4yMjAyMTcxNzE4LDQ1NzkxLjYxNjc3NzY4NTY1LDIzMTAwLjY0MDM1NzczMDc3MiwxMzI5MS4wMTUxNTkyNTE4NjUsMjA2NDEuNzU3Mjc4ODA2Nzk2LDk5ODAwLjczNjIzOTQ3MDcyLDY5MzA0LjIyMDczNDk2NTYsMTMxNTIuNjA3NDc0NzQwMjc0LDUxNzUxOS44NDY5NDU5ODU1NywxMzk0NTUuMTAyNzQwNjExMTIsNDgwNjUuNzUzODc3MTM5MTUsNTUyMzcuNjE3NDgyODQyNDU2LDIzMDYuNTkxNDY2NTY0NDc2LDE0Ny4xNjY3MTE2MTgwNDY1MgorMzIsRnJpIDI1IEZlYiAxMSwxODI1LjIzODkzMDU5NjA5NzgsMjUyOC44MzIxMTgyNjI2NTczLDgyNC40NjM5NzkxODM1MzM0LDYzNS44ODM1MjIzMzY5MTE1LDQ0MTYuMzMyOTk5MTkyNjk4NSwyNjM0Ni44MDE0OTIzMDgxNDMsMTI2NDEyLjM5NjM2NDkzNTUsMzU0ODkuNjI5MzY4NTAyMjI1LDIyNDQ1LjQ3NTI5MjM2NjM1LDI4MzM0Ljc5NjM1NjUzMDQ0LDYxNDYuODg3NjQzNjc2ODQ4LDQ2NjA2LjU5NTgwODAyOTA3LDExODI0Ny41MTYwMTE4MDQ5MiwyOTM0MC40Nzk3MTA3Mjg4NDcsMTQ4MzEuMzU0ODAwMDUwMjU2LDg2MzQuOTQ5NDE1NjI0NDg3LDEzMzAwLjYwNjAzMjE3NDYyLDYzNzkxLjEzNjA1NzY0MjA1Niw0NDM4MS43NzkzNDQ1MTc0OSw4NDY1Ljc3MDc3NDczMTcyOSwzMzA2OTIuMDQyMzA1Njg4LDg5MjA3LjE5OTcxNjUxMzMyLDMwODA4LjI2NjI1NDk4MjA5NiwzNTUwNS4yMDY3OTUzMzE0LDE0ODYuODk3MjQzOTUwMzI2MSw5NC4yMDkzOTA5NjUxMjE2MwpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Qb3B1bGF0aW9uR3Jvd3RoU0VJUl9GRF9SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vSV8wLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvUG9wdWxhdGlvbkdyb3d0aFNFSVJfRkRfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL0lfMC5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmMyNDQwMQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvUG9wdWxhdGlvbkdyb3d0aFNFSVJfRkRfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL0lfMC5jc3YKQEAgLTAsMCArMSBAQAoraXRlcmF0aW9uLHRpbWUsCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1BvcHVsYXRpb25Hcm93dGhTRUlSX0ZEX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9JXzEuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Qb3B1bGF0aW9uR3Jvd3RoU0VJUl9GRF9SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vSV8xLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYzI0NDAxCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Qb3B1bGF0aW9uR3Jvd3RoU0VJUl9GRF9SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vSV8xLmNzdgpAQCAtMCwwICsxIEBACitpdGVyYXRpb24sdGltZSwKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvUG9wdWxhdGlvbkdyb3d0aFNFSVJfRkRfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL0lfMi5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1BvcHVsYXRpb25Hcm93dGhTRUlSX0ZEX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9JXzIuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU1ZTNjZTUKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1BvcHVsYXRpb25Hcm93dGhTRUlSX0ZEX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9JXzIuY3N2CkBAIC0wLDAgKzEsMzMgQEAKK2l0ZXJhdGlvbix0aW1lLEVHLUZSRy1HMjEwMDAxLEVHLUZSRy1HMjEwMDAyLEVHLUZSRy1HMjEwMDAzLEVHLUZSRy1HMjEwMDA0LEVHLUZSRy1HMjEwMDA1LEVHLUxPRS1HMjQwMDAxLEVHLUxPRS1HMjQwMDAyLEVHLUxPRS1HMjQwMDAzLEVHLUxPRS1HMjQwMDA0LEVHLUxPRS1HMjQwMDA1LEVHLUxPRS1HMjQwMDA2LEVHLUxPRS1HMjQwMDA3LEVHLUxPRS1HMjQwMDA4LEVHLUxPRS1HMjQwMDA5LEVHLVVQRS1HMjkwMDAxLEVHLVVQRS1HMjkwMDAyLEVHLVVQRS1HMjkwMDAzLEVHLVVQRS1HMjkwMDA0LEVHLVVQRS1HMjkwMDA1LEVHLVVQRS1HMjkwMDA2LEVHLVVQRS1HMjkwMDA3LEVHLVVQRS1HMjkwMDA4LEVHLVVSRy1HMzAwMDAxLEVHLVVSRy1HMzAwMDAyLEVHLVVSRy1HMzAwMDAzLEVHLVVSRy1HMzAwMDA0CisxLFR1ZSAyNSBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMS4wMDczMzE3MzE4ODM1MzI2LDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMixXZWQgMjYgSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuNzA1MDk2OTU1NzA3ODU2OSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzMsVGh1IDI3IEphbiAxMSwyLjMyMDA3OTI1NzgzMDQ5MzJFLTQsMC4wLDAuMCwwLjAzODYwMTQxMjQ5NTY1MzQyLDAuMCwwLjAxMzk0NTYxODEyNzIyNzI0OCwwLjAsMC4wLDAuMDA1OTg4ODgwODU5MTYxODUsMC4wMDQyODAyNjIyMjY3Njg1NDMsMC4wLDAuMCwwLjAsMC4wLDIuMjcxNTQ5NjAyMDU4NzIwNkUtNCwzLjg0MjE1MTEzOTg0MjQxNiwwLjAzOTA3NDM3NzcwOTI2MTk1LDAuMCwwLjAsMC4wMTU1MjI2ODE2MzU4MDg2NjQsMC4wLDAuMCwwLjAsMC4wMjQwNjI1MTUyNzU4ODM3NjMsMC4wMTQyMDEyNjU1MDc2NjQwNjgsMC4wCis0LEZyaSAyOCBKYW4gMTEsNC42Mzk5MTQ5MDQxNjk5NTRFLTQsMC4wLDAuMCwwLjA3NzE5ODc2MzY3Nzk2NjM1LDAuMCwwLjAyNzg4OTc3MTg5OTE1MDEzLDAuMCwwLjAsMC4wMTE5NzcxMzI4NzAyNDI1OTEsMC4wMDg1NjAwNzUwMTk2MzM1MTcsMC4wLDAuMCwwLjAsMC4wLDQuNTQyODYwNjkxMDg3Mzk2NUUtNCw3LjA0MjMyNDIwNzQ2NjI1NTUsMC4wNzgxNDQ2NTIwMzYyNTczMywwLjAsMC4wLDAuMDMxMDQzNzMzMjI0MjcxNDMsMC4wLDAuMCwwLjAsMC4wNDgxMjI1MDM4Njc5MTgzMjUsMC4wMjg0MDEwMzkyMjg0MTMxNjYsMC4wCis1LFNhdCAyOSBKYW4gMTEsMC4wMDIzNDE2NjIzMDY5MjA0Nzg2LDUuNTQwNTA4MTM5NTgyODcyRS00LDMuOTc4MzQwMjAyNTM4MDAwNkUtNCwwLjI5MzU2NDU3MjcxNTA5NzYsMS40NDIxNDM3OTAwMzg1NjM3RS01LDAuMTMxMTk0MTI0OTAzMjAyOCw0LjA5MTQ0MTExNzY0MjY4ODZFLTUsMC4wMDIyMzEzNzAzMjEwODMxNDk1LDAuMDU3NDYyMDc4NTc3Njg3Nzg2LDAuMDQ0MTg2MTQ4MjIyMTM3MDUsMC4wMDE5MTM0ODExMjU5MjIxOTY2LDAuMDAxOTI1MDQyMzQxMzU5OTUwOCwwLjAsOC4xMjk4MzgwNDg1NTU4NjdFLTQsMC4wMDYxNjc4MDQwODcxOTcyNjYsMjAuMzI3Mjk3NzU1MDY4Njg4LDAuMzg1MzE0MTgzOTI4Nzc4NiwxLjIwODE1NjQ5ODY1NTI3MzJFLTgsNC41OTcxNTU5NDA3NjE2NDFFLTQsMC4xNTExNDY4ODE4NTg3OTc0NiwxLjIwOTQ5NDIyODUxMjU4NjZFLTgsMS4xNjc5OTMwNzY5MTQ1MzEyRS04LDAuMDAxNTM5MDUzMjM4NjAzNDQ4MywwLjIzNzY1OTM3MTE2Nzc4Njc0LDAuMTIyMjM1Mzc0MDE1NTM5MzgsMC4wCis2LFN1biAzMCBKYW4gMTEsMC4wMDYzNzMwNTkxNjYwOTMzMDYsMC4wMDE4MjgyNzA3MTMxOTk1MjE1LDAuMDAxMzEyNzgyNjIyNDM5MzY3NiwwLjc0MzQzMDE5ODM5MDc5MjksNC43NTg4MjIwNjUyMjMzMDlFLTUsMC4zNTE1Mjk5MTM4MDU0MjMxNCwxLjM1MDEwMzk2Nzk3ODg1MTVFLTQsMC4wMDczNjMxMzE1NTgxNTg5NzQsMC4xNTQ2NjMyMTg4NjA3Mjk0OCwwLjEyMDgyNjYwNjU4MTU1NTYsMC4wMDYzMTQxNTI3OTA3MTUwODcsMC4wMDYzNTIzMDI4Mzc4OTcxNzE2LDAuMCwwLjAwMjY4MjcwNDI3ODk5MjE4MTUsMC4wMTkwMjY5Nzk3MTM2Mzk5NSw0Ni45MDUwMDQ4Mjg2OTEyMywxLjA0MzQyODEyNjgxMjYyNDksMy45ODY3MDUwMTY1MjQ4NzlFLTgsMC4wMDE1MTY5ODEwMDMyMDkwNjk0LDAuNDA4MTY2NjM2MjAxMjM4ODMsMy45OTExMTkyOTA5NDk0OTdFLTgsMy44NTQxNzI3NTM0MzQxMzNFLTgsMC4wMDUwNzg2MDYzMTMwMDg1ODU1LDAuNjQzODAzNTczMjQ2NDI4MiwwLjMyMDQ3NTU2MjU5NDYxMjQ2LDAuMAorNyxNb24gMzEgSmFuIDExLDAuMDIxNTQ4ODIzMDM4NTc0NTgzLDAuMDA3OTg2Njg2MzI1NjU2OTMzLDAuMDA2NDY1OTE5ODI2MTY2ODc5LDIuMDk1ODgwMjcwNzUyNjI0LDIuNjQ2NzM1NjIzOTUyODI4NEUtNCwxLjEzMjExMzE5NzU2ODMwOCw3LjU5MjAwOTI0NjM3OTE3OUUtNCwwLjAzODMxMTQzMjMzMDMxMzgzLDAuNTA2MTQzODkyODA1MzQzMSwwLjQxNDQ5OTU4MTMyMDg5NTYsMC4wMzA3NDg0MTkxNDQwMTA3NiwwLjAzNDU0NTA4NjU4MTkxMDEzNCw5LjgzNTI5OTkyMDU3MTc0NUUtOCwwLjAxMzk2ODc5NDcxMTYyMjgxOCwwLjA4ODQzNTc1MjA5ODA5NDA3LDEyMC4xNDQwNjkzNTU5MjA4NSwzLjQ3MzE1MDg5MDI0NTA5MTQsNS43NzI1OTM4MDM2OTI0OTNFLTYsMC4wMDgwNzQ3NTkzMzA0NDc0NywxLjM0NjkxOTI2NzM3MTE3NTQsMi41ODM3OTAxNzI4MzIwMjM2RS02LDcuMTE4NzAxMzgxMDg3ODc2RS01LDAuMDI2MTE1NTU0MDg5MzIyMzQ3LDIuMTQ1MjkyMzA3MDE0ODM1OCwwLjk3Mzc0MTc3Mzg0MjU1MDIsMi4wMTMxODcxNzY5NDUwNDI0RS02Cis4LFR1ZSAxIEZlYiAxMSwwLjA2MjE1NDMyNDQ1NTQzMjQ2NiwwLjAyNTY2MDg3MDczMjE4NDIxLDAuMDIxNzg4NjE3NTMxODM4OTgyLDUuNDEwMjE5NjM4NzgzNjgyNSw5LjI5MTM3MTY0MDY4MjAwOUUtNCwzLjE3NjYzNzk4OTEzNjU3MTIsMC4wMDI2NzQyMjU3OTY3MDM4MTYzLDAuMTMxNjE2Mjg4MDI0Mzc4NTIsMS40MzM2MDA5NDQwMTI2LDEuMjA0OTM5OTg1MzQzMzU1LDAuMTAzMTgzMTM3NzY0NzgzNTYsMC4xMjA0MTU3NjcyMzg0MDE0Miw0LjUyMzk5Njk5NzExNTAzNUUtNywwLjA0ODAwMDgyMzM2MjQyNTIxLDAuMjkzMTI0MTM2ODU4MzM5NCwyOTIuNzYzMTg3MTkxNzg2Myw5LjkzMTI2Njc3MTY1MTY0LDIuNjMxMDk5NjczMzAyNjMwNkUtNSwwLjAyNzk1MTgyMzg3OTM0NDQxNywzLjgzMjc1MzE3NDM2NTE3NzcsMS4xNjQzMDEzOTQ1NDUzMDExRS01LDMuMjcyMDkzMzAyNjU4NDY5RS00LDAuMDg5MzU4MjE3MzY2MTMwNyw2LjEzODA2MTk1MTE2NzI2MSwyLjYzODEwODEwOTc1MjAzNSw5LjI2MDE2NzcxMTExMzg2MUUtNgorOSxXZWQgMiBGZWIgMTEsMC4xODcyMDM5NTI0NzY0NDU0LDAuMDg0ODE1MTk1NTc0OTUwNzQsMC4wNzczMDI5NTExNTY2NTIyNywxNC4xNDYxNDE4ODUzMDQ3MDQsMC4wMDM1ODIyNDY4NzQ1ODk1MTIyLDkuMTk5NDkzODg3MjU5NDIyLDAuMDEwNDEzMDQ3MzQ5NjE0MzU4LDAuNDg1NDY1MDkzMzc4NzcwNiw0LjIxMjYyMjI1OTY2ODQ0MiwzLjY2ODc5NDQxODA1MTk5NiwwLjM2MzU4MDAxMTg3MDYzMzMsMC40NTc0ODI1NDQxODcxNDI3LDIuNzY0MDg3MTg5MDUzNjQxRS02LDAuMTc3MDc3OTgxNDY4NzAxOSwxLjA0NzA0ODIwMjY4MTc2NjcsNzMwLjY2MzI1MDQwMTk1NjksMjkuNTQzNDIwODUyMTY2Njc2LDEuMzYwMzE2NjUwMzE1OTA5RS00LDAuMTA0NzcxNzkzMzg1ODI3NjIsMTEuMzIzNjI4MzIyMDk0Mzc1LDUuOTg1NzU3MDcwODIzMzgzRS01LDAuMDAxOTE0NjY1MTEyNzU0OTk4MywwLjMyNzA2ODE1MTAxMzI5NjcsMTguMjc1ODcxMDU2Mjc3Mzc0LDcuMjk4NzcxNjI1OTU1NzUyLDQuODgzOTI3MTA2NDI3ODExRS01CisxMCxUaHUgMyBGZWIgMTEsMC41Mzc2MDM3MDAyOTc5MjQ4LDAuMjU4MzEyMjMwMzU0MjIyOCwwLjI0NzUyMTM2MzM3ODA3NzYyLDM2LjA5MzIyMDY3NzUwNjU0LDAuMDEyMTM2MTY0NzI2OTY2NDcxLDI1LjU4MjkxNzA1MjI2NjY2LDAuMDM1NTExNDMzMDEzOTQ5OTEsMS41OTcyNzg5MDY0NjU3Njg2LDExLjg2MTUwMDQzNzQ5OTAzNCwxMC42MjYyNzA2MjgwODA1NDYsMS4xNTg2NDY1Njc3MzcxOTg0LDEuNTM1MTg1OTI2MDE5NDk3NSwxLjE2MzYwMjY1OTg4NDg3NTNFLTUsMC41ODI2NjEyMzUwNjc5NzY1LDMuMzg0MDcyMzgwNTk5MTk0NiwxODAzLjIzMzI5NTMxMTU2MzgsODMuOTk2OTQ0OTUwNjY4NjYsNS4zMTM3MDk1NzI2MjMzNUUtNCwwLjM0ODQ5Nzc0Njc3NDIyMjg1LDMyLjAxNTk0MDYxMTgzNTUzLDIuMzM0MjE0NTAwMTg1Njg1NEUtNCwwLjAwNzkxNzgyOTQ2NzkyMzQzNCwxLjA3MDUxODQyMzE1MTEzOTMsNTEuOTk5OTQ4OTMwNTY5NTksMTkuNTM1NTM2MDMyNjkwNDM3LDEuOTI1MjExNzg3MTE5NjQ4RS00CisxMSxGcmkgNCBGZWIgMTEsMS41NDkxOTcxMjM0ODUyNjEzLDAuNzc5NDc2MjM3MzM0OTk1NSwwLjc4NTY5NjAzNjIwMTc2MTUsOTEuOTAyMDU3MjUyODc4NzgsMC4wNDEyMjg2MDI1MDM0MzcsNzEuMTQzMTA5OTQwODU0NDksMC4xMjE3ODMyNzQxNTM4NDk3Niw1LjIzOTAwODE3NTgyNjQ5NCwzMy40NzI1MTA1OTM2MDI4MSwzMC45MDQ0MzMxNTU5NjQxNzgsMy42NjAzNDg1ODM1MTgwOTE2LDUuMTU1MjgzOTI0MTkyMTI4LDUuMDAyMTQzMzEyMjIwNDQ4NUUtNSwxLjkxMDg0MzE3NjcxOTA0NjEsMTAuOTUxNzgwNTkyMzM2MDUsNDQ3NC42MjE5MzUyNjQxNjQsMjM5LjM3NjU0MzA4MzIxNzU0LDAuMDAyMDM2OTE4MDY0MDE1NTQwNywxLjE1ODQ4NjQ0NzQ2MzkzODMsOTAuNjg0NTIzMTk0MTc1NjEsOC45NjExMzcwNjQ3OTcxNzVFLTQsMC4wMzI5ODQ1MzY5OTg1NDg0OCwzLjQ4OTc0ODc1OTE3ODA2OSwxNDguMzE5NjEzMzA5MjkyNjMsNTIuMTc3NDczMTExNTUxNTksNy40MTA0MjM0NDcxOTcxMTVFLTQKKzEyLFNhdCA1IEZlYiAxMSw0LjM4NTM5Nzg4NjEwNDA2MiwyLjI4MTc5MTM0NDY0NTcwMzcsMi4zOTk0NTQ4NjU4Mjc4NjY3LDIzMS45MzM1MzgwNTM3OTU3NiwwLjEzMzU0OTQxMTM1NzQ2ODk4LDE5NC44MDMzMTA1MzMxODUyMywwLjM5NzgxMzQ2MzI1MzI5ODQsMTYuNDcwMDQ0MDM3MjQzNzE0LDkyLjk3NDEwMzQxNDgzODgyLDg4LjIxMjA2NjA3MTg3OTQsMTEuMTM1MDgyNzgwMjEwOTIyLDE2LjUzNjQ5NzI3MTU4NjIyOCwxLjkxOTEzMDMxODM5MzQ5NDVFLTQsNi4wMDU5NTk3MzYxMDU0NzcsMzQuMTIyOTU2NzE0NzA0NSwxMTA3Mi42Mjc0MDY4NTI3MzUsNjcwLjY1NDcxNTIxNTI0NDIsMC4wMDcxNjQyNzY5OTQxNjk2NTQsMy42ODQ3NTc2NDIyNTkxNTgsMjUyLjY0MTMyMjg1ODg5NTkzLDAuMDAzMTU4MjM1NzkzOTk5MTExNCwwLjEyMzYzNDczMTQyNjY2OTYxLDEwLjkxMjc3MTM1NDEyMDEwMyw0MTUuODk4ODcwMDY4MjUwNjMsMTM3LjYwMDA5NDAwNjg1NDQyLDAuMDAyNjA5NTgxOTAwNDcyMTc1NworMTMsU3VuIDYgRmViIDExLDEyLjM2MDk3NjAwNjUyMjAwMiw2LjYwMTY4NDAzMTE0Nzk0NSw3LjIxODE3NDQzMTgxNzc3Nyw1ODMuMzE1OTA4Mjg4NjM2NiwwLjQyNjk3NzczMzc3NjM5ODI1LDUzMC43MTI4MDM3MjYwNTA1LDEuMjg0MDU0MDI4MzA1NTI1NSw1MS4wNjM3OTQyMDg4NzQyNTYsMjU3LjIyMTU2MjI4NjI0MTgsMjUwLjcwMTQ3MTgxODAxMDU2LDMzLjM4NjYyNjM1NDY0NTc4NCw1Mi4zMzU4NTM0MjUwMTMyMzQsNy4yMDcyODg1MDE5NDU2ODVFLTQsMTguNjE0MDgyNDE3MDU0OTczLDEwNS4xMTczMzYzNTk5MTUzNCwyNzQxMC45MzE4Njg0NzUyOTQsMTg3MC4yODMwNDQzMTUxMTIsMC4wMjQ0ODY0MDUyOTI1NTE1MzgsMTEuNTY0NzEzMDE1MjE0NTgzLDcwMC41NzU4NTAyNTI1NTQyLDAuMDEwODMzNjgyMDIyMjMxNjUxLDAuNDUxOTI1Njg1Nzc0NzQ2NDYsMzMuNjQ5NzUxNzk1MTM1MzQ0LDExNjAuOTc4Nzk2MzQ5NTczMywzNjEuMDk0NzQ5NzY4MjgwODUsMC4wMDg4OTE0MDU4NTk1MTg2MjgKKzE0LE1vbiA3IEZlYiAxMSwzNC41MzUxMTcxMjMwNDY5NDUsMTguODE3ODQzMjk2ODMzMDMzLDIxLjI5MTY4NDgwNzg4NjYxNSwxNDU5LjcwNjQ2NzkwNzIyMjMsMS4zMzM3NDg2MjIxMTQ0OTIzLDE0MzQuMzg3OTE2MTU3NDk0NCw0LjA0ODU1NDU4MzA5Mzc4MywxNTUuMDIxNTY3ODIxODY4MSw3MDYuMTY0NzcwMDE4OTczLDcwNS45MDc3NzE5MTUxNDU2LDk4LjIyMzMzODkyMDkxMTM1LDE2MS45NDU1ODg1OTU4MDQ5LDAuMDAyNTc4MDQwNzg4MTEzNDUyNyw1Ni40ODQwODIyMzAyNTU0MywzMTcuNjg4MzMxMzk2MTg4ODYsNjc2NTQuODY2ODQ5NzkxMTQsNTE3MC4xNDU5NzUzMTExMTMsMC4wODA1MzI2NTI2ODk3NTI2NywzNS41MTYzOTg5ODIwMjEzODYsMTkyNi4zMTg4OTQxODE2NDM0LDAuMDM1Nzc3MTA4MzcxMzgxOTcsMS41Nzc2OTA3MTYxNTE5ODY0LDEwMS42MzE5ODM3MjA5NTI1OCwzMjEzLjE3MzE0Njc3MDI0MjUsOTQxLjE4MjE1MjkxMjA4MjIsMC4wMjkwODczNzI5NDE0OTM5ODQKKzE1LFR1ZSA4IEZlYiAxMSw5Ni4wMDk1NTc5NzQzMjEyMSw1My4xNDQ3MjI2MDQxNjg3Nyw2Mi4wMTUzMDU2Mzk1NjUyLDM2MzQuMjA0NjAzNzUyMjE2NCw0LjExMTg4NzE0MjM3ODc4OSwzODU3LjI3MDcwMzkzNTE1MzUsMTIuNjA0MzE5NTk0NjgyNDcyLDQ2NC43MjAyMTE4MTk1NjI5LDE5MzAuMzIzMzY4MDY4MjA4MywxOTc3LjM2MDg4NzM2OTQ1ODksMjg1LjU0MDQ4OTEyMzcwMTYsNDk0LjYxNzc2MzAwOTEwODksMC4wMDkwMDk5MzA0NDAxMjU1LDE2OS4yMzEzNzA0NDkxOTY1Niw5NDkuMzAyNDAzODM3MDY0NywxNjU5ODAuNjc3MTQ1NDA4MDMsMTQyMTEuMjM4NjU4NzY2MTAyLDAuMjU5MDAyMTYyNzcyNjUyMTQsMTA3LjcwMjQ4MTM1MTUxNzQzLDUyNjguNDA1NDc2MTAxNDI5LDAuMTE1NjQ1MjcyMDg2NTg5ODcsNS4zNzczMDQ0NDg4NDI4NTQsMzAzLjExODc0MjY4NTU3Mjg0LDg4NDcuNTIzNjEzNDIwOTA0LDI0NDAuNTY5NDM5OTQwMDkyMywwLjA5Mjc4Nzc4MjI3NTk1NzQKKzE2LFdlZCA5IEZlYiAxMSwyNjUuMzU3MjU3NjI2MjI5MDYsMTQ4LjcxNzgwOTU4MTAwMzYsMTc4LjM3MTA1NDUzNDA2MTksODk2MS45NzU1OTcwMjA5NzIsMTIuNDk2NzYwNjUyMzQ0Mjg3LDEwMzE0LjAyNjc3MzYwMjczMywzOC42ODU2Mjg5ODM2MDk3MywxMzc1LjA0OTI3NTgxNDIyNDUsNTI0OS44MDI1MjcyMjIxMDYsNTUwNC43MzA5NDcyNjY0MTMsODIwLjMxODcwOTI1MjkxMzcsMTQ4OS43MTg2MTAyMjgzOTU4LDAuMDMwNjQ0MzUxMTA1MjEzMjksNTAwLjQyMzMzOTU3MTU4NzQ2LDI4MDIuMDQ0OTM1NDk2NDM1OCw0MDA2NjAuNzkxMzg0MjUwMywzODc2NS43NDA2ODExMTg4NCwwLjgxNDg2ODA2MjU3MDY3MzUsMzIyLjI0NzQ2NzM1OTQ2NjQ0LDE0MzExLjQ5MTA2MDMzNDcxNCwwLjM2NTg2OTc3NzAzMDQwMzI0LDE3Ljg1NTU0MDc4Mzc1NSw4OTIuNDYxOTUyOTAyNTQwNiwyNDIxMS41NDAzMjAyMzkwNzMsNjI4NC4xNDcyNzcxNzYyNzUsMC4yODkwMjQxNzI4NDQ3ODMwNAorMTcsVGh1IDEwIEZlYiAxMSw3MjkuNjg0NzY1MTQ0ODc5Niw0MTMuMDI2NDU2ODg1NzE0NTQsNTA3LjY3MTI5NDIzNjQzMTE1LDIxNjUzLjg4MTgyMzc5OTY2NywzNy41NzIzMjM1MDUwNzE3OCwyNzQyMS4xMzgyMjExMjMzNjUsMTE3LjQ5NTY4OTY4NTcwMTIxLDQwMjcuNTg4MzcxMDY4ODUyLDE0MjEwLjY3MzIzOTc2OTY2MywxNTI0MS41NTA3NDMxMjM5NDQsMjMzNC4yNDI5MDMzNDQ2Nzc0LDQ0MzguOTg1NzA2MDgxODA3LDAuMTAyMjg3MDU5MzQwMTU0NzgsMTQ2NC44NDU3MzA1MDk1MjEsODE4OC4yNTk1MTY3Nzg0NzQsOTI4ODM4LjYzNjUwNTU1MTksMTA0NjYyLjEzOTU4NDc0MzAxLDIuNTIyNDIxNTY2OTYyNzQ4OCw5NTQuMjgzMTA3OTE2MjYwMSwzODU1Ni4wODA2NzgxNTc1MSwxLjEzOTYzMDc1OTkwMzEzNiw1OC4xOTExMDIyOTY2ODUyOSwyNjAxLjM1ODU5Mzc3MDc1NTMsNjU4MzIuMDYyODIxNzI4MjQsMTU5OTguNzcxNTkyMjA1NCwwLjg4NDEwMDE5ODI2MzUzNjgKKzE4LEZyaSAxMSBGZWIgMTEsMjMwMS4wNjcyMTM5MDEzNTU0LDEzMTUuNjU1NDc1OTY4OTE1NywxNjYwLjc3NTUyNTcyNzczNTIsNTMyNTYuNzI1NDU2NTE1OTYsMTMyLjQ5OTM0MTg0ODc0MTc4LDgyNDM5Ljc1MTAyNDc5NDQ0LDQyMC4xOTk4NjAyODgzNDkyNywxMzczMS4zOTQyMTc2MTkyNjUsNDM4NzkuODY2NjE4NTg2MzEsNDg0NDEuNjc0MjM2MjMxODQsNzY1Ni4xMjcyOTQ4MjA3OTMsMTU0NjMuODQ4NzExNzMyMDQsMC40MDk1NzY2NTc1Njk5OTU1LDQ5OTIuNjUwOTE2NzMzOTQzLDI3NzQwLjk5NjM3NDc0MjE5MywxOTcwNTQ2LjE2ODY0MDc2NDIsMzEyNTQ3LjE2MzcyMDcwOTMzLDkuMTgzOTMzMTc2NTc4MTMsMzMwMC4wNzYzNjI2OTU0MTEzLDExNjE2MC42ODgxNzczNjY2Miw0LjE4NzQ3NTE3MjI2NTU5OSwyMjUuODM0MDU0ODY3MDE2NjIsODgxNS4yNzI3NjQzODk3MywyMDI5NTIuODI3MzUzNDQ2Niw0NDA0MS4wMTg1NjQ1MzgxNywzLjE2MDY3MDY4ODcxNDkyOTYKKzE5LFNhdCAxMiBGZWIgMTEsNzI2Mi4yMjY0MTE3NDU2NDcsNDE3Ny43MzYxMTc4NzA0NzIsNTM4Ny43MjI2ODk2NDkyNSwxMDM3NzQuMzE4NTE4OTMzODUsNDczLjE5OTYxMjUzNTY0ODcsMjQzOTUyLjQwODQ4NzUzNDg1LDE1MjUuODM4NTU3OTIzNzA0Miw0NzI0MS43NTUzNDQ5NTM2NCwxMzQ4MTMuODYwMDMwNDQ2NzgsMTUzNjU1LjYxMTY2MTU2OTU0LDI1MDk3Ljc0NjE5NTkwMzIxLDU0MzczLjA0MzYxNjM3MjI4LDEuNjU0NDM0OTg0MDA1OTYyMiwxNzIxMy4xNjE3OTcxOTg2MTIsOTM0MDYuNzAxMzA1NTU0NywyNzk3MzM2LjgwMDc1MDczOSw4NDExMDAuMDMwMjk5NDkxNywzMy43NzgxMjA5MjY4OTg3MTUsMTE1MjYuMTc1NTU3OTk2MTMyLDMyNzY2Mi43NzU0NTE3MjcyNywxNS41NjM1NTA5NzYyMzYzNTMsODgzLjU1NjI4ODAwODQxMjYsMzAxNjcuMTA1NjM2NDIzNDgsNjA4MzU4LjE1NjMzNTY3MDUsMTA3NjEwLjc2Nzg4NDY0MjQ3LDExLjM3MDg2MTUzODIyOTQ2MgorMjAsU3VuIDEzIEZlYiAxMSwyMzE5NS43NjQ5MTkxMjYzNDQsMTMxMTkuNTgyNDg5ODA5NTUyLDE3MTg4LjMxNjEzNzY5MzEyLDEzNTc1My4zODYwMjc0MjEyOCwxODE2LjM4MDAwNzEyMjQ0ODIsNjkzODM3LjU5NDQ2NzQyNjMsNjAxMi4xMjc1NDUyNTQwOTUsMTcxMTY3LjA0MjcwMjEyMjYsNDEwODIzLjY0ODE0NjUyNTU1LDQ4NzQzMi4zMjU3NjgwNTIyNSw4MzA3MC41NTk2NzU3ODgzOCwyMDIwMDEuNzcxNzU4NzUxOTcsNy4yOTQyMzYzMTMwNjc4MjQsNjMyMDAuNDQxOTk2NTYyOTUsMzEwNTQwLjU5OTA1NjU2MjQ3LDI4MzU3NDcuMDUxNjE1NjA2LDE2NjQyNDMuNjEwMDAyMTAwNywxMzQuMzQ5NTk3ODkzNzg0MjgsNDI2MzUuMTUxODgxMTY2NDEsNzUyMzAzLjI3MDk5MTE5MTUsNjIuNzI1MzEwNjAzMjU2MjgsMzc1NC4zOTUwMjYxMjQyNjQsMTA5MTMzLjIwNzYxOTk4NzUzLDE2NjYwNjkuNzUwMDc0NTc4NywxOTQ5NjIuODA4ODQ3ODk3Myw0My43ODc0NDU5NzM2OTgxMworMjEsTW9uIDE0IEZlYiAxMSw2Mzg4My4yNjQ2OTgxNzMxNCwzMzk2MS44MzMwODM0Njk1Miw0MjQ1OC4wODgyNzc1Nzg0LDEzNjAxOC43MDMwNTkwOTE3Myw3MzM1LjQ1Mjg3MjUyNzQ2MiwxNTI4ODAyLjE3MjU1NDE0NjMsMjU2MDcuMjY0ODk5MTAwNTQsNTkxNzI2LjIyMzA4NDY1NCwxMDI3MTA4LjgwMzkxNTU2OTYsMTI2NTU5MS45NzYyMzIzMzAzLDIyOTQ0OS45MDUxNzI1OTU5Myw3MjA4NjAuNTUyMzI3ODkxMiwzNS40NzQyNDA4NjEzOTE2NSwyMzM2OTQuMTM2Njg2Njg1MDYsNzg0OTU4LjAxMDk3NjMwNTMsMjU2MzA2OC41NjQyODg3OTEsMTk5ODkwOS42NDQwNzM4NjEsNTc1LjY2ODc2NTEzNjI1NDksMTU4ODY4Ljk4MTI2ODAyMjMzLDEwNDU2NjMuMDcyNjM3MjA5OCwyNzMuNzQxNTM1ODkyNjgzOCwxNzM1NC4zMDg2NDczOTA1NiwzODU4MTIuNzQ4NDIzMzUwNiwzMDU3NTI4LjYzMTc1Nzk0OCwyMjk4NDkuMjgwMjQwMTQ4NzQsMTc1LjM3NDgwMjQxMjc0NzU2CisyMixUdWUgMTUgRmViIDExLDEwOTgyNy45NDIwMjYyMzMzNyw2MzMyNC4zNTc0NTczNTMxOSw2MTgyMS40MDE0NDUzOTE0OSwxMjMxNDIuNDgyMTI5NzI4MTUsMjY4OTUuMTE4OTYxNzgzMiwyMTA0NzQ4LjUzMDkxNDE5OTUsMTA1NjkxLjEzOTA1MDk4NzgsMTM4ODI1MS43NTU5NjkxNTg4LDE1NzE5MDguOTkyODk5NDIsMTk2MzMzMi40MTYxNzMxNjc1LDM4Mzc0Ny4yNjk5ODkzNjMzLDE3NDgyNjUuODU0NDUzOTMzNywxNzQuMzE0NDQwMDM2Mzk1OCw2NzQ1OTIuNTcxMTc2NjgxOCwxMTMyMDkzLjE3MzEyMDI2MSwyMTkwNDQ2LjMyOTQ2MDgyNDQsMTk2NDUyNy45NDk4MDA3MDQsMjQxMS43NDI4MjU5OTg0NTksNTA5MzE0LjgzNjg1NzU4NDc3LDEwODYwODIuMjA1NzM2MDA0MywxMTc3LjU3NDM5NDM5MDUwNSw3ODI1Mi4zMDAwNTA2NzI3Nyw5ODY4NDguNjg5NDU1NjkzLDM1OTE0ODEuODA0MTE3MjY1LDIyNDIxMi4wMDc4MzM0NzQ4Nyw2MDkuODE3NzEzMjEyODMyOQorMjMsV2VkIDE2IEZlYiAxMSwxMjU2MTUuNzIwOTkwMjcyMDYsOTA1NDguMjQzMDkwNzk4OCw2NTY0Mi40MzA0MDMxODg5LDEwNTQ0OC42MDgzMzgyNDQyOSw3NDEzOC41MzczNDA4OTIxNiwyMTkxNjQyLjE5MTU3NDU2MTQsMzk2ODYyLjMzNjcwOTU2NDksMTg4ODU5Ni42NTU2NDIxOTU2LDE3MDYxMTcuNzY3MzIzNjMwOSwyMTM4NTA1Ljc2MTg0ODM0ODcsNDMzMTcxLjg3MTExNDk3NDU1LDI0MjMxMzEuODE0NDYxMDYyLDg1Ny4zMDA0MjkwNDc1MzkzLDExNTg3MDIuMzg3MTg3MjI0NiwxMTk1NDQ2LjUzNDA1Mzc3OTcsMTgwODE1Ny40NjQ3MjgwMjU3LDE3NjI3MjAuMTMyNjAyOTQ1NCw5ODM3Ljc2OTcyNDM3MjUwNSwxMTM1ODc3LjY5ODA2NjY3NTMsMTAwMjQ3NC43NTM3MDM2NTYzLDUwMDAuNDkwNzczNjY2MDk0LDMxNzYyOS4yODI0OTU0NjIsMTQ2NDcwNy45MDM0ODI5Mjc3LDM1MDMzNTMuNzM0NzI3MTAyLDIwMDM3My42NzkxOTQ3NTQwMiwxNTQxLjk3NzQ5Mjg5MTYzMzMKKzI0LFRodSAxNyBGZWIgMTEsMTIxNjAyLjQxMDYzNDQ2ODUzLDEwNDU1Ny40Mjk0ODg2MTcyMSw2MTQxMi45Nzk2ODM0MDI5Nyw4NzIwMC45NDk4MDI3NDgxLDEyMTQwOC42NTk4MjkyMDY0OSwyMDMwODc4Ljk0MTIxMTcwOSwxMTQ3MzQ0LjQ1MDA1NzY5MSwxOTYwOTQ0LjE4NjE1ODQ2MzYsMTYxMjk1OS44MDQ5NTczMDY1LDIwMjUwNzkuMjU0MDE4MDQxLDQxNjkxMi45NzY2MzU2Njc3LDI1MzM2MjUuODI0NTM2NDAyMiwzOTY0LjA4OTE3MDgxNTI1MzUsMTMyNzQ4MS43NzUyNzI2MzMsMTExNTQyNS42Nzk3MzkyMzc1LDE0NTczNTIuNjI2MDg3MjM4LDE1MDI4MzkuNzAyNTIxNDEwMywzNzY5MC4xNDkxMTczNDU1LDE1NDUyODEuNzMyMzAxMjIyMiw4Njk2NTQuNzc0NTA5MDM0OCwyMDQwMS44MTIwODI2MDM2OCw5MjQ2NjYuMTA0NjEyMTg1NywxNTc0ODg3LjA2ODk5NTA5NTgsMzEzNzI1Ny4yMDkzMjEwMjU4LDE3MDQwMC43MjExODM3MzE4NiwyNDg3LjQ0ODMyNjE1MjIyNzgKKzI1LEZyaSAxOCBGZWIgMTEsMTA4NDcxLjg4NDM5NTkyODksMTAzNjA4Ljg4NDE2MzE1MTksNTM3MTEuMTUyMjU1MTg2NzI0LDcwMzE2LjAyMzQ3NDgxNDA0LDEzNjc1NC4yMzUyMzkzNTgyNywxNzY2MDI5LjE3ODM1MTY5NywyMDU1MDUwLjIwODIxNDY1OTIsMTgxNTgyMC44MjEyODYzMTg0LDE0MTkzODkuNzA0Nzc2MTQ3MSwxNzgzNzY4LjI3MjQ5Mjc5MTUsMzcwNjgwLjM0NzE5MDUwMjMzLDIzNTQzOTAuOTc4MzY1NjcxLDE2Mjk5LjU5ODY0NzczMTI2NSwxMjg3NTc0LjM1Mjc5MzI1MTksOTczOTgyLjk2NzE4Njk4MywxMTUyODkyLjMwODczOTEyMzQsMTIzODM2OS45MDMwMzg1NTc2LDEyNjM1OS42MjI3NTcyMDI5LDE2MTA5NTEuNzM3MzUwMjQyMiw3MjUxNDkuMDM5MDQyOTQ1NSw3NzAyMC4zMzgxNDQ0NjM3NiwxNTcyMDk3LjY0MDAzMTI5NTEsMTQ4MzY0My45NDU4MjY2MTA2LDI2NzA4OTQuNjMyNzYyMzg1NSwxNDAxNjcuNzA1NjY2OTIwNjQsMjg0MC4yOTEyODc0ODc0NDgyCisyNixTYXQgMTkgRmViIDExLDkyMDQ4LjEwODk1NzIyNzUxLDkzODk5LjE1MjgyNDMyOTEyLDQ0OTcxLjQwOTI3OTU2NjE1Niw1NTQzMy4wMTIyMzE3ODcwNiwxMzIxOTIuNjY4OTU4MTM1OTQsMTQ3Mjc4OS4zMzg5MDc3NzQzLDI0NDM2MjEuMDc2MzcxMDAxNSwxNTc4NjgwLjg5MjI0ODU3NTYsMTE5MzQ3MS4wNzk2MjkwMTgsMTUwMDg0MC4zMDg5MDU0MTU3LDMxMzg2Ni4zMjM2NjI0MDUzNywyMDUxNDM1Ljg5ODg2ODEwMDMsNTQ0NTYuODM4MjgzMjg2NTcsMTE1MTMwNC40NjcyMzI5MDYzLDgxNDU5OC4wMTEzMTI2MTU1LDg5NDkwNS40MzQ3MDI2MzgsOTkyODk3LjE0MjU3OTIyNDksMzE5MzM1LjM0NTY0MDcxOTQsMTQ5ODk2NC42MDA0OTQwNDAyLDU4NjY0OS4yMzY0NTkyNTYsMjQ0MzI0LjE0NTAyMjAxODUsMTgxMjMwNS44NzczODU0OTI3LDEzMDM3MTcuNzc1NjQ3MTgzOSwyMTk0MTA0LjE5MTQ4MzQ3NCwxMTIyMzIuNDM3NDAxMDM3MjYsMjc2NC40MDAwMzkyMzA2MQorMjcsU3VuIDIwIEZlYiAxMSw3NTI3NS4xNTYxMDIwMDY1NCw3OTk4Mi4wMDYyNjQ3ODc1NywzNjQ1Mi40NzA0NjM2NDY0Niw0MzA3MC45NTI1NDUyODg0NSwxMTY3MjYuNTA4MDA0NDE5MDEsMTE5MDYxOS41ODAyNDAxOTg2LDIzNzIwNjEuMjI2NTYxMjE4NSwxMzExMTk1Ljg3NDI2Njg1MSw5NzAxMTkuNjU5MTYyODgyLDEyMjA0OTguMzAwNDkwMzU2MywyNTYzMDUuNzg2Mzk1NjQzMywxNzA2MjA1LjI2Njg1NzA3MDQsMTY0NzM4LjkwNjU1NjI2NTYzLDk3Mjg1MS4yMzU0MDczOTUzLDY1OTgwMC45MTM3NTk4MDQ3LDY4NzMxNS40NTk3MDcyNjQyLDc4MTAyNC44ODEyMzc5NzcsNTIxNzcxLjMyNDk1MjA1MzcsMTI5NjI3OC4wNTU2NDI4MTM0LDQ2NDQyNS44MDk2MTM0MjU4Nyw2ODg3MzEuNjgyMzM2OTYxLDE3Mzc0ODkuNjA3OTgzNzYzLDEwOTAwMzEuNDY2Njc5NzU5NiwxNzU1NjQ2LjU4NTc3OTUzOTMsODgxOTguMjc2MDkxNDQ2NjUsMjQ0OS44MTMyNTk1ODgwNjU2CisyOCxNb24gMjEgRmViIDExLDYwMDg1LjI0Mjk1MDgyOTg1LDY1NjQxLjY3ODY5MDE0MTc0LDI4OTE0LjAwNDY4NDIxODUyLDMzMTA2Ljg5MjQ1ODM5OTcsOTgwMjkuOTQxNjI3NDY5OTMsOTQyNTkwLjQ2OTYyMjgwNTQsMjEwMzk5MS4xNDcxOTUyMTksMTA1Nzk3NS41NTczMTMzOTEsNzcxMDQ2LjYxOTUzNjczMDEsOTcwMzQ3LjU3NDQyNjI1MDMsMjA0Mzc4LjA1MDAzOTEzNzA3LDEzNzgwMDYuODgyMTMzMzU3NywzNjY0OTguMTI3Mjc4NjgzOCw3OTQxOTEuODMzNTUzNjc3LDUyMzA3NS4wNDA5Mjg3NDM4NCw1MjM1NjYuNzczNTEzNTAxNTcsNjA1OTk0LjcyNDAzNDU0MDksNTcyNDA4LjQzMzc0Nzc1NDIsMTA3NDM5NC4yMjMyOTYxNzMsMzYyMDc4Ljc4MzAzMDEwNzUsMTMzNDkyNC4yMzg5NTk2NCwxNTMwODA3Ljc2NjE0MjkxOTIsODgzNTIyLjQ0MzQwMTkzNjYsMTM3OTYwNC4yNjIwMjM5MDUsNjgzODMuMDcwMjM4NDYyMTUsMjA2Mi4wMzE4MzIyMDA0MzcKKzI5LFR1ZSAyMiBGZWIgMTEsNDY5NjAuODUwNTQ0MTExNjEsNTI0MDkuMDE5MDc3MDY0Mzc1LDIyNDg2LjE5NjMyMjA0ODYwNywyNTA5NC44OTQ4Nzg2NTQ1MjYsNzk2MDAuODY5OTMwMzk3OSw3MzE5MzAuMzM5MzkzMzI2MiwxNzczNzgwLjI5NzExNjgxNDQsODMzODYyLjA5OTAzMzM5NDYsNjAwNTk0LjY1ODk4OTY3MjMsNzU2MDIyLjQ4MjU3MzE0MTgsMTU5NjA4LjUyMDI5NzI2MTI1LDEwODY4OTQuMjA0OTQwODM5Miw1MDU3NzQuMTU1MzMzODA2NjQsNjMxNTU3LjM2MzA0OTE0NDksNDA2NjE5Ljg4NDY3NzU2ODQ1LDM5Mzg0NC4yMzIzMTQ1OTc3Niw0NjI5MzUuMDA4Nzk0Nzg0NSw1NDMxODIuMjM2OTk1MTY3Nyw4NjQwOTIuMjc4NjAzODA2OSwyNzc2OTQuMTY0NDgyMDAzNywxNjQxNTIyLjYyODI0NjAxMDUsMTI4NDg0NS44MDgyMTk0MDg4LDY5ODc5My42NTczMjY2MjgsMTA2NDg5Ny4yODk4MjAwNDU3LDUyMjA4LjM1NTE1ODc5MjYyLDE2NzcuMDc3NTc0MTE5NjY4NQorMzAsV2VkIDIzIEZlYiAxMSwzNjE4Ni40NDkyMjk3MTI1LDQxMDI0LjUyMDAzNjUyNTIyLDE3MjYyLjI2NjM3NzYwNDk5NiwxODg4Ni45MTUyMTM3NjU5NjIsNjMwNjQuMDY3MTYzMDEwNjQsNTYxMjQzLjI3OTQ4NDUwMDIsMTQ0MTY5MC45OTM2Njg1NjQ0LDY0NjU4MS45Njg4MzkyMjY5LDQ2MTYyMi42NzI0MzMzOTk1LDU4MTE5My4zMTkyNDAxNDYyLDEyMjkxNS4yNjM3NDczNDA3Miw4NDMyMzkuOTA0MzMyOTMzOCw1MTc3MDQuMDU1MzE5OTU2Miw0OTI5MjcuMDU4Njc5Mzg2NiwzMTIwNTUuMjM5Mzc1OTA0MjYsMjk0NjIzLjM1MjE0NDMzNTE2LDM1MDU0NS4xNTUzOTk2MDQ1LDQ3NDAzMi4zNDg1NTUzMjA0Nyw2Nzk5NDMuNzY5MDQxNDQxMywyMTA5MjEuNzAyNzE3OTY3NjgsMTYxMTM0OC43MjA4MjYzNTQzLDEwNDEyMzAuMjE1ODUzMjQzMSw1NDMyNDMuMDE1MjU1OTk1OCw4MTI4NTEuNDU0Nzg0NjUxNSwzOTUxNS4wNjU4MTkwMDM0MSwxMzMwLjE3NDE0NjIxNjkzNjgKKzMxLFRodSAyNCBGZWIgMTEsMjc1NzIuMjQ3Mzc2MTMwNDI4LDMxNjM5LjQwMDg1OTkzNjMxLDEzMTE0LjQ1NjA2Mzk4MjI1NiwxNDEyNC4yMDE3NjYwNjg2OTgsNDkwNzguMTg0MTY5NDczMDQsNDI2MDAxLjY1Nzg4ODM1NzMsMTE0MzA0My4xNjk4MDAwNTY0LDQ5NTA2MC4zNDM4NTg2MDIzNCwzNTEwMzQuODU5NTE3NjYxMyw0NDIwMjQuNDc5NjAwMDE1Niw5MzYxMS4zODI5NDE5NzAyLDY0NTkwMS43OTE2MTY3NjA3LDQ3MDY4MC4wNDIyMjU2MDc4LDM3OTMxMi4wODk0NDEwNTY0LDIzNzAxNC4yNTAyNTc0MTk1NCwyMTkyNDQuNDAxNTQwMzY4OTQsMjYzNDMzLjI2OTkwNTUzMDczLDM5NDIxMy44ODY3NDc3MjM1LDUyNjQ2Ny44MjUyNzk4OTg2LDE1ODg5NS43MjAyMjc5NDUyNSwxNDM0MDg1LjI0MTA0MDUzNiw4MjM4MDcuODc5NzA5MDQ3Myw0MTY3NjEuNjkwOTIzODg0Niw2MTQ3NjYuNjIyNjA0NDE2LDI5Njg0LjUwNTc4MTEyMTIwNiwxMDM2LjA0OTcyNjc4MzIyNTIKKzMyLEZyaSAyNSBGZWIgMTEsMjA4NDYuODE4Mjg2NTY2NywyNDE0OC4xNjM2MzMzMzgyOSw5ODkyLjc0OTc3NTY4MzAxOCwxMDUyMS44NTU5MzA5ODcyNTYsMzc3MTYuMTQyMzg4Mzc3MTIsMzIxMTIxLjgzNDQzMjI1MjU3LDg5MDY4Ni4zMzM2MzM4MDExLDM3NTcyNS4zOTU0OTc5NDc1LDI2NDk5Ni40NzQ5ODk0NDUwNywzMzM3MjIuMTc0Mzc1ODUxMSw3MDc1MS42MTkzNTc4NTM4Nyw0OTAzNjQuODY5MDc2MjE0MTUsNDAxMjA2LjI1OTM5MjYzNzM1LDI4ODk5OS41MTYxMzk2OTcxLDE3ODc1My40MTMyNzgyNTkyMiwxNjI2NzcuMDM3MjUzNTMwNCwxOTcwMDkuOTAzMjcyMDAxMTYsMzE3Njg4LjU1OTIxMTE4NjgzLDQwMzAyNS42NjI5NjcwOTg3NiwxMTkwNjMuNTY4MjI3NTQsMTIwNjk5My42MzA2MzAzNjExLDY0MDk0MS42MjE2NjE3MDA5LDMxNjc4Ni45NDM1MTc1NjU3LDQ2MjA5OC4wNzc3MTM4NzUsMjIxOTMuMzI0OTg2ODQwNzM3LDc5Ni43MDM1Njk4MzUxMzMzCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1BvcHVsYXRpb25Hcm93dGhTRUlSX0ZEX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9JbmNpZGVuY2VfMC5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1BvcHVsYXRpb25Hcm93dGhTRUlSX0ZEX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9JbmNpZGVuY2VfMC5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmMyNDQwMQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvUG9wdWxhdGlvbkdyb3d0aFNFSVJfRkRfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL0luY2lkZW5jZV8wLmNzdgpAQCAtMCwwICsxIEBACitpdGVyYXRpb24sdGltZSwKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvUG9wdWxhdGlvbkdyb3d0aFNFSVJfRkRfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL0luY2lkZW5jZV8xLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvUG9wdWxhdGlvbkdyb3d0aFNFSVJfRkRfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL0luY2lkZW5jZV8xLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYzI0NDAxCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Qb3B1bGF0aW9uR3Jvd3RoU0VJUl9GRF9SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vSW5jaWRlbmNlXzEuY3N2CkBAIC0wLDAgKzEgQEAKK2l0ZXJhdGlvbix0aW1lLApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Qb3B1bGF0aW9uR3Jvd3RoU0VJUl9GRF9SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vSW5jaWRlbmNlXzIuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Qb3B1bGF0aW9uR3Jvd3RoU0VJUl9GRF9SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vSW5jaWRlbmNlXzIuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI0Zjc5MzUKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1BvcHVsYXRpb25Hcm93dGhTRUlSX0ZEX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9JbmNpZGVuY2VfMi5jc3YKQEAgLTAsMCArMSwzMyBAQAoraXRlcmF0aW9uLHRpbWUsRUctRlJHLUcyMTAwMDEsRUctRlJHLUcyMTAwMDIsRUctRlJHLUcyMTAwMDMsRUctRlJHLUcyMTAwMDQsRUctRlJHLUcyMTAwMDUsRUctTE9FLUcyNDAwMDEsRUctTE9FLUcyNDAwMDIsRUctTE9FLUcyNDAwMDMsRUctTE9FLUcyNDAwMDQsRUctTE9FLUcyNDAwMDUsRUctTE9FLUcyNDAwMDYsRUctTE9FLUcyNDAwMDcsRUctTE9FLUcyNDAwMDgsRUctTE9FLUcyNDAwMDksRUctVVBFLUcyOTAwMDEsRUctVVBFLUcyOTAwMDIsRUctVVBFLUcyOTAwMDMsRUctVVBFLUcyOTAwMDQsRUctVVBFLUcyOTAwMDUsRUctVVBFLUcyOTAwMDYsRUctVVBFLUcyOTAwMDcsRUctVVBFLUcyOTAwMDgsRUctVVJHLUczMDAwMDEsRUctVVJHLUczMDAwMDIsRUctVVJHLUczMDAwMDMsRUctVVJHLUczMDAwMDQKKzEsVHVlIDI1IEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyLFdlZCAyNiBKYW4gMTEsNS44MDAxOTgxNDQ1NzYyMzNFLTQsMC4wLDAuMCwwLjA5NjUwMzUzMTIzOTEzMzU1LDAuMCwwLjAzNDg2NDA0NTMxODA2ODEyLDAuMCwwLjAsMC4wMTQ5NzIyMDIxNDc5MDQ2MjUsMC4wMTA3MDA2NTU1NjY5MjEzNTcsMC4wLDAuMCwwLjAsMC4wLDUuNjc4ODc0MDA1MTQ2ODAxRS00LDguMzcxNTE5ODczMTAwOTE0LDAuMDk3Njg1OTQ0MjczMTU0ODcsMC4wLDAuMCwwLjAzODgwNjcwNDA4OTUyMTY2LDAuMCwwLjAsMC4wLDAuMDYwMTU2Mjg4MTg5NzA5NCwwLjAzNTUwMzE2Mzc2OTE2MDE3LDAuMAorMyxUaHUgMjcgSmFuIDExLDQuMDU5OTM1Njg2MzQ1OTAxNUUtNCwwLjAsMC4wLDAuMDY3NTQ5MDczODMxMjI4OTYsMC4wLDAuMDI0NDAzNjExMzE3NTU5MDQ0LDAuMCwwLjAsMC4wMTA0ODAwMTc0Mzc0ODA4MiwwLjAwNzQ5MDA4NDM1Nzk3NTcxLDAuMCwwLjAsMC4wLDAuMCwzLjk3NTAxMzA0MjIwODAwODdFLTQsNS44NTk3NjMyOTE1MDExNTYsMC4wNjgzNzY3NDA1NTE2NDExLDAuMCwwLjAsMC4wMjcxNjMzMzQyMTM1ODY2ODQsMC4wLDAuMCwwLjAsMC4wNDIxMDcyOTU5NjMzNDY4NjQsMC4wMjQ4NTA5NzAzOTI1ODg1MzgsMC4wCis0LEZyaSAyOCBKYW4gMTEsMC4wMDQ1ODk4NDY1NTM4Mzc5NTIsMC4wMDEzODUxMjcwMzQ4OTU3MTgsOS45NDU4NTA1MDYzNDUwMDJFLTQsMC41MjM1NTYwNTE5NDU5Nzg0LDMuNjA1MzU5NDc1MDk2NDA5RS01LDAuMjUxOTg5NzQ3MDU4MDg2NDcsMS4wMjI4NjAyNzk0MTA2NzJFLTQsMC4wMDU1Nzg0MjU4MDI3MDc4NzQsMC4xMTEwMTkyNTQyOTk0NDY0OCwwLjA4NzE0MDQxMzIyNjA0OTExLDAuMDA0NzgzNzAyODE0ODA1NDkxLDAuMDA0ODEyNjA1ODUzMzk5ODc3LDAuMCwwLjAwMjAzMjQ1OTUxMjEzODk2NjYsMC4wMTQxODE2NDY4NjM0ODY5NTgsMzEuOTY1NzQ0Nzg0MDUxNjY1LDAuNzUwMzUyNjY4MDIyMTQyNCwzLjAyMDM5MTI0NjYzODE4M0UtOCwwLjAwMTE0OTI4ODk4NTE5MDQxMDIsMC4yOTMyNzc1NTQzODE1MjY5LDMuMDIzNzM1NTcxMjgxNDY2NkUtOCwyLjkxOTk4MjY5MjI4NjMyNzhFLTgsMC4wMDM4NDc2MzMwOTY1MDg2MjA2LDAuNDYzMDIxNjE1Nzg5MTY2LDAuMjI4MTk5NzQxMTYwOTU3OCwwLjAKKzUsU2F0IDI5IEphbiAxMSwwLjAwODgwOTc5MzQ5NTk3MjIwNiwwLjAwMjc3MDEwODU5NjUyNjgxMjYsMC4wMDE5ODkwNjU2MTEyMjcxMTM2LDAuOTg1NTkxOTI5MTkyMDU3Niw3LjIxMDM0MDIyMDU5NjE5NkUtNSwwLjQ4MTc0NzkyNTY2Nzk3MzMsMi4wNDU2MTMxNTY5MzI4MTM4RS00LDAuMDExMTU2MjY1ODQxNjgzMzg2LDAuMjEyNDkwOTc0Nzg5NjYwMTcsMC4xNjc0NTYzNzIzOTYxNzkzNiwwLjAwOTU2NjkwMzE3NjczNzYxMiwwLjAwOTYyNDcwNjM2NzczMjgyNSwwLjAsMC4wMDQwNjQ3MDU2MDM4NjU2NDcsMC4wMjgwMDAxMTQwNjUzMzkwODQsNTguNTk1OTkxMDE5ODkwMDUsMS40Mzg0MDk2NDUxNjg0Mzc4LDYuMDQwNDY1MzQ4MDY5ODI0RS04LDAuMDAyMjk4NDU3Mjc3NTA0MTAzNywwLjU2MTgwODA2MzkyMjIzMjYsNi4wNDcxNTM2NDYxOTc4MjVFLTgsNS44Mzk2NTg3ODI0MDE1NjZFLTgsMC4wMDc2OTQ4NjIwOTEzNzcwMTEsMC44ODc2ODA3MjI0ODQ1OTIzLDAuNDMzNzYzMTkyNzg1MDgwNjMsMC4wCis2LFN1biAzMCBKYW4gMTEsMC4wMzU2MTkyMDk2NTczMzc3MSwwLjAxNDYwNjg0NjI3NjY5MTU5NSwwLjAxMjMxNjE2NjI0ODMxMzIzMywzLjEzMTg5MjA0MTY3NTk0OTUsNS4yMjE3MTM4NjIwODA3MzFFLTQsMS44MjU2MTEyMDAwMDY0OTgzLDAuMDAxNTAyMTk3NjI2NjY3Mzg1MSwwLjA3NDE5MjM3NjgzNTM4NzQzLDAuODIzMDU5OTgzMTUwMzk5MSwwLjY4OTk3NDA1NjE2MjUzODcsMC4wNTgzNjAwOTM3OTY1NDE1LDAuMDY3NzM5OTE5Mzc1MzYzMjEsMi40NTg4MjQ5ODAxNDI5MzZFLTcsMC4wMjcwNTcyMDc4NjYyNjE2MDcsMC4xNjU3MzA1MTg2MjAwODYzLDE2OS4yNjg0NjY1NDczNTU0NCw1LjY5NjQ1NDQ3ODIxMDcxLDEuNDMxNDYwNzg0MTkyMjgxN0UtNSwwLjAxNTczOTYyNDYxOTkwMzc5LDIuMTk5NTE1MDYzMzkyMDYxLDYuMzQyNDY5MzUzMjE5Njk4RS02LDEuNzc4NTQ1NDMyNTYyNjM4NkUtNCwwLjA1MDQwMDEzNDMwMDA3MzgyLDMuNTIwNDk3MTI2ODEyMDUyNiwxLjUyMTE5ODE3ODIxNDIwNzIsNS4wMzI5Njc5NDIzNjI2MDZFLTYKKzcsTW9uIDMxIEphbiAxMSwwLjA5MjA0Njg5NDUxNTY4MDg1LDAuMDQwMTE2MzIwMjMwODQ3NDIsMC4wMzQ4MzY3MDgzNTkwODMxMDQsNy40OTQ4MjIxNDE0NjI1ODEsMC4wMDE1MTI2NjIzNjg5Mjk3MzYzLDQuNjMxNDkxNjI0NTk4NTYsMC4wMDQzNjAwMzk5MDY0NjY3MzEsMC4yMTIyNjU3MjAwOTA0ODU5MiwyLjEwMTUwMjA3MDkzMTY1MiwxLjc5MjE1MzA1NDc0NjM3NCwwLjE2NDY2MDAwNTM4MTk4MjEsMC4xOTU0NDMxMjc1MTk3NDU1Nyw4LjExMzY5MjEzNjM1MDM3OUUtNywwLjA3NzQyMjQ1NDQ3NTkwOTIzLDAuNDY1Mzg1Nzg4NTIyMzA5NSwzOTAuNzA1Njg3NTU0MzMzMzQsMTQuNjM2NTE1MTgzNjM3NjczLDQuNzA1OTQyODA0MjM5OTQ0RS01LDAuMDQ1MjMwNjYyNDU4NzE1NzYsNS42MzMxNTk1NjgxMzQ4NTYsMi4wNzUyNTcxMTc3OTg3N0UtNSw1Ljg2NzE4NDUyOTM2NTg1N0UtNCwwLjE0Mzg1NjUyMTc5OTczODksOS4wNDkyNTA4Mjc0OTc2MDcsMy43NjcyNDI4MDE4MTI3NzUzLDEuNjYwNzkxMzI2MDQ2OTIyOEUtNQorOCxUdWUgMSBGZWIgMTEsMC4yODg2NDMwMTY3OTU2MTM1NSwwLjEzNzAyOTc2MTg5MDk4NTc2LDAuMTI5MjM2NjY0MjYwMTE4OTMsMTkuOTgzNTIzNTU5OTc5NjY2LDAuMDA2MjEzOTYxMTM2OTYzNzI2NCwxMy44NjM4MDcyNDgxNDAzOTEsMC4wMTgxMzg5MjcxMzgzNTI2MDMsMC44MjYxNTU0NzYzNTY4MzEzLDYuNDAzOTk2OTc2NDIzMjI1LDUuNjkxMzE5MzY5NTkwNDkyLDAuNjA1OTA1MjMxNTUyODQ2LDAuNzg4NjQ0NjAxMjE1NTE5OSw1LjU0MzI1NzU4MDMzMjcxNEUtNiwwLjMwMTM2NjMyMzQyNzU0NjEsMS43NTc4NjU4MzkwNDU3OTYyLDEwMDEuMzY2NjA3OTkzMTE0NCw0NS4yMzAwODY0Njg3MTQwMDYsMi42MDYzMzU5NDUwMDA4MDU0RS00LDAuMTc5NTY4NTI2MjQzNzAzNSwxNy4yNjc0MDU3NDMxNTI2NCwxLjE0NTE4ODU0NzU4NTU3MDZFLTQsMC4wMDM3OTgwMjc5ODczNTI5MDEsMC41NTQ2OTAxNzAwMTA4NDU5LDI3Ljk5NDM2MzM2MjE3Njg5NSwxMC42OTU4NTc0Nzk1MDQ0NTgsOS40MTE3ODcwNjcwODQwOTdFLTUKKzksV2VkIDIgRmViIDExLDAuODAwODg0MTM2NzAyMTkzLDAuMzk3MDg3MDI4MzQ5NTI2NywwLjM5MDQ1NzkxNTIyMjQ0MDk0LDQ5Ljk0MDY4MTM2NjE2MzcyLDAuMDE5Njc0MjI0NzAzOTY3OTksMzcuMzk1NjU1OTY0MjU0Mzc0LDAuMDU3NzQ1NjMzODMzNDU4NzQsMi41NTM3MDI4MDA1NTA2Njc1LDE3LjQ2ODU4Mzg4MjIxNjg0LDE1LjkwNzc4NjY3NjkzMjg1NCwxLjgyMzM3NTU2NTE1MjYxNTgsMi40Nzc2NDk0NjQ1NjEzMzQ3LDIuMDU4MjIzNTA3MzU3MjM0RS01LDAuOTMxNTc2MDQxMTI3MzA4Niw1LjM2NTIwNDUyNzk0NjA5NSwyNDQwLjkyMzU4NjE3Njc4OTcsMTI0LjQwODExNTE2NDgzMjUyLDkuMTM5NzE4NDExMTg5MjQzRS00LDAuNTYwMTAwNjA5MTM0NDA3Nyw0Ny4yNjM5OTU5ODY4ODYxNDQsNC4wMTI1MDgzNTYwNTA4MTRFLTQsMC4wMTM5MTU3Nzk2OTc0Njk0NzIsMS43MDcxOTc3NjgwMjE5MzIxLDc3LjA1MDc1NjUzMzkzMzg1LDI3Ljg4ODgyMzAyMDkyNTgwMiwzLjMyMzA1OTg1NDc0Mzk2MDdFLTQKKzEwLFRodSAzIEZlYiAxMSwyLjMyMjQxNzcxOTYxNjQzNSwxLjE5ODI2NzM1NzIxMTUyNDgsMS4yNDA5OTgyODE1MDQ3NzM1LDEyNy4zMTAzMzIxNDMxNzIyOSwwLjA2NzM5MjA0NjQ3MzQ4NjMyLDEwNC4zNzYxOTM2MTAxMTk4NywwLjE5OTk4NDc1Nzg1NDkxMzYzLDguNDE2MzI2NjQ1MjQxMTksNDkuNTU2MjUwMDI0NDgyNzMsNDYuNTc5Mzc5NzcwODMzODEsNS43NjcxOTA1MzMxNDk5NjgsOC4zNzk0Mjg4NDI2MTIxNDMsOS4wMTQwNTA5ODA1OTYxMTVFLTUsMy4wNjk0NzI2MzIwMDY4NzUsMTcuNDgxMDg5OTcwODQ4NzMsNjA5My40NzU0OTY0Mzk0ODQsMzU2LjQ4MzIxNzUwNDg2NjgsMC4wMDM1MDgyNTAzMTM5NTE2NTM0LDEuODczNjU3ODk0MzMzNzkyLDEzNC41NTM2MjU0OTY3MzY3LDAuMDAxNTQ0NTQ5MDQzMDIwOTkwNSwwLjA1ODczOTk2MjkyNjg3Njc3LDUuNTg4NzU4NzE4OTkxNDUxLDIyMC45OTU4ODUwMjQ2NzE3NCw3NC42MTk0ODkzODU3NzQzNCwwLjAwMTI3ODIyMTQwMTQ5MTY0NgorMTEsRnJpIDQgRmViIDExLDYuNDkzMjk3OTA3OTY3OTksMy40NDI1MTU0NTgyNjM4NywzLjcwNTEzMTgyMDQ3MDIwNzUsMzE5LjA2MjAxODE0MDcxNzk1LDAuMjEyNjI5Mzc3Nzc0Njg0MzUsMjgyLjY2NDc3MTk5NTgzODYsMC42MzYwNDIyOTQ1NTQxMDcxLDI1LjgyNjIxMTUxNDMwOTA2LDEzNi4xMDg2ODMwNDcyNjY4NSwxMzEuMjUyNTQxMTUyMzYwNzgsMTcuMTU4NjYxNzE4NzIwOTUzLDI2LjE5OTI0MzE5OTY1MDc4LDMuMjk0MzgxODAwNjg0MDY0RS00LDkuNDE2NzIxNDM0MzczMDAyLDUzLjI2ODkxMjQ5NTAzMjMzLDE1MDMzLjAyMDEzNDE3NDE4LDk4Ni44OTIxNTE3MTU2NDc2LDAuMDExODQ4OTQ0MzAxMzQxMjE4LDUuODEyODk4ODgwMDc5OTEzNSwzNzAuNTA3NTcyNDg0OTU5NTUsMC4wMDUyMjg0NDI3MzAzODE3NDEsMC4yMTAyMDU2NzU5Mjc4MzIxNSwxNy4wNjQ3NzgyMDAxMjA5MTIsNjEyLjMyODQxOTM4OTkxMTgsMTk0Ljk0MjY2OTE4OTMxNjcyLDAuMDA0MzE3ODIyMTUyMjA0NzgyNAorMTIsU2F0IDUgRmViIDExLDE4LjI3NzE0NTA5NDMyODAxNiw5LjkwNzE0ODkwNzQyMzUzMSwxMS4wNzI1MTkxMzc2OTkzMjQsODAxLjAzMzA2Njk1Mzg3NDUsMC42NzY3MTc0NjE2Nzc1NDU5LDc2OC4zOTc1MTM3ODg2MzQ5LDIuMDQ1MTY5NTE3OTMzNzMxNSw3OS42MzUwODczMjIzMzIzOCwzNzYuMDQ2NjY4ODEzMTg4NCwzNzIuNTI2MDQxNDUyMTE2Niw1MS4xMjI0NDUxNDk2Njc5NCw4Mi41MTEzNzMwMzk1NDM3NywwLjAwMTIzMDY1NTE3MTc4MjU5NSwyOS4wMjMwNTU5MjYyNDQwNSwxNjMuMzk3ODI2OTg0ODc0MSwzNzI0MS4wNzIzNjYxOTg4MSwyNzQ3LjUxNTI5MjgwMjA5MiwwLjA0MDA3MTg5OTAyMjgyNjA0LDE4LjE1MzI0NDAyODgzMzE5NiwxMDI1LjYwNzk3MjgzODU2NjQsMC4wMTc3NjEzMDg4Nzc5NTk5MDMsMC43NjI2NTI5ODUzMzY1OTcsNTIuMzIzNjIxNTcwODM3OTY1LDE3MDYuNTY3MTY4NTI3MzUyNCw1MTAuMzQxMDYwNjU0MjMyNTQsMC4wMTQ1MjU4NDAzMTk3NTMwMDUKKzEzLFN1biA2IEZlYiAxMSw1MC43NzA5NTI5MTIwNTE5NzUsMjcuOTg1OTExODAwNjU3NzMsMzIuMjkwNTYyOTc1MzEwOTM0LDE5OTcuMDk1MzgxMzQwNzY1NSwyLjA4Njk4MDMzMjcwNTE0MywyMDY1Ljc2NzM3MDgwNDU4LDYuMzY2MDk0NDYxNTQ5Mjc3LDIzOC44OTcxOTczNjE4NTE2MiwxMDI3LjA5OTA5NDQ1NjU5NywxMDQyLjY0NjE1NDY2MDAwNSwxNDguNzQ4MjI0NjQ2OTQ4MDUsMjUyLjE0MzA0Nzc5MTgxMjUsMC4wMDQzMDQzNDYxODg2MTE3NDc0LDg3LjAyMzI2OTc0ODAxNjk0LDQ4OC40MzMxMDQwMjMyMjUyNyw5MTY4MS40MzQ3NjQ3NDc5LDc1NTEuMzgzNTA5ODQyNDU1LDAuMTI5Mjc2Nzc1NTczODI2LDU1LjA3NjI4MDM3NDg1ODYxLDI4MDQuMjkyOTc0NzMyMTgxLDAuMDU3NTUwOTg4NTk0NjA1NTMsMi42MDUzNDk4MDM1MzI5ODUsMTU2LjE4MTMyMzMwMjI2MDcsNDY5Ni42MDE0NTY0Mjc3MzcsMTMyMy45MjUwODQyMzI0MDY4LDAuMDQ2NTYyNjgzNDY5ODcxMjcKKzE0LE1vbiA3IEZlYiAxMSwxNDAuNzY4NDI2NzE1MDc5ODQsNzguNjM4MTI2MjI5NjU1OTcsOTMuNDIyMjc2NjI2Mjk1NTgsNDk1NC4xMzYyOTA2MTg4NTcsNi4zOTM1NDYyOTMxMzkzNjEsNTUzOC44NTUxMjcxNjc1OTMsMTkuNzAxODE1NzYxMjEwOTE2LDcxMS42MTg3Mzg0NzEzMTQ1LDI4MDAuOTQ5ODc4Njc5MTk4LDI5MTIuNTMzNTIyNDQzNzczNiw0MjkuNjk0NzIwNDQ2NDgwMDYsNzY1LjE5NjI3ODExNzYyNTgsMC4wMTQ5MDMzMjgwMDgwODc3NjUsMjU5LjA1NzcxMjgzMjA4OTksMTQ1MS4xODU3NzQ0MTU4NjQyLDIyMzg2My41NzU3NTU3NDI1OCwyMDY4OS42MTE0NjAyNjIxMzUsMC40MTE0OTYzMTkyMDc3MjE1LDE2NS45NzU3NTUyNzIzMzI3Miw3NjQ2LjMzOTM0NDM3NzQ0MSwwLjE4NDIxNzk3MjgyODYzOTY0LDguNzkwNTEyOTU1Mzg5MjU0LDQ2Mi44MzkxMDcwNDY2NjUxLDEyODk1LjQ1NDI5MDIzNDEyNSwzNDIxLjg1NDcyMzU5NzQ4MywwLjE0Njc3NTU0ODcwMjYxMDc4CisxNSxUdWUgOCBGZWIgMTEsMzg3LjYzNjgyNzAzNzA2NDU2LDIxOC44NDAwNzA4MDUwNDU0NiwyNjYuNzQyNTkyODY5Mzk0NTcsMTIxMjYuOTM1NzcwMzI1NTk2LDE5LjI3OTI3MjM0MTc3ODYyNiwxNDc1NS41NTYzMjMzMjM0ODgsNjAuMDAyNzYxMzMzNzk4Njk1LDIwOTAuMTE4ODQwMTQzNDI1LDc1OTIuNjg1ODYyODYyOTYyLDgwNzYuODczMzg4MDM0MjczLDEyMjUuOTYzNDg2MzI4ODE0MywyMjg2Ljg5OTgwMTExMDc2MywwLjA1MDAzNjgzMDE1MzcyNzA5LDc2MC4zODc4NzE5MDkzMDU0LDQyNTMuNTgyMjY2MDgyNTIzLDUzMzI3My43MzkwMTQ5MTk1LDU2MTU4LjM3ODIxNDM3ODEsMS4yODAwMDg1Nzc3NzU2NzcxLDQ5Mi44OTI2MzA5ODk5NzgyLDIwNjc5Ljc0NzU1MDQ4MTMyMywwLjU3NjQwOTQ0MDQ3MDY0NzUsMjguODE5OTQ5MzIzMzk5MDY1LDEzNTIuNzc0MDM2ODg4MzA5NiwzNTE0OS40MTM2ODkxMTU3NSw4NzY3LjA3ODgxNjc1NzU0MSwwLjQ1MTU1NDgxMDU2NTk3MDk3CisxNixXZWQgOSBGZWIgMTEsMTA2Mi42NDYzNzgxNzY4ODYyLDYwNS4wNTUyMDAzNzc2MzgsNzU0LjYxMjU0MDE2MDM2OTEsMjg4MjUuMzUzNjY5MjA2Mzg2LDU3LjYzNTUzNzM2MDYwMjYxLDM5MDgzLjc1ODk3OTY4NzEzLDE4MS4yNTA4MDE4NzQyNTY5Miw2MDg4LjIwNDc3NjgwODgyMDUsMjA0OTIuMzYzNTY5NDk0NjkzLDIyMjkwLjQ2ODYyMDEwMjQ0NSwzNDY5LjUwMDA0MzI4NzU1OTUsNjc3NS40MzE4NzI2MjI4MDcsMC4xNjU1ODgyNzIxMzAwMjQyNSwyMjEzLjQ5OTczNjE3MjEwNywxMjM2MS4xNTI2NTMyMzQyMDMsMTE5NDI3OS45NjYxMTI1MjczLDE1MDU5My42NTk4NTk2Njk0LDMuOTI5Nzk4MTI2MTcxNTk2NiwxNDUxLjUzNTI0ODc3MDg1MDMsNTU0MTEuNTg2NzQ1MTU5NTg0LDEuNzgxNDc4NTMzMDE1MzkyNiw5My4wOTU5MzA5MzM1MTg1NiwzOTIxLjI5MTUxOTMyNjU2MTcsOTUxODUuNzgxNDQ4NDc2MDksMjIxMzYuODcwMzYwMTAxNjUsMS4zNjgzODkxMzAyMDcyMjkKKzE3LFRodSAxMCBGZWIgMTEsMjg5MC43MDc0Nzc0MjAwNTMsMTY1Ny42NzUyNDIwNDM1Nzc2LDIxMDguNzk3MTU4MTc0Nzk5Myw2MzYwNy40NDc4MTI3NDcxOTYsMTcwLjUxMTAzNTU2OTAyNDU2LDEwMjQyNS40OTc3MDMzNzA2NCw1NDEuOTcxMTgxNzE4OTU0MywxNzU1OC4zOTYxMDMzNTY1OTcsNTQ4NTIuNDQ1MzkwNDEzMjcsNjEwMDIuNTkyMzA5MTg1MTksOTcxNi43MjU3ODk5MTEyNDgsMTk4NjEuMzk1Mzk3Njg0MDA2LDAuNTM4MDUwOTIyOTg0NDE1MSw2MzgxLjgxMTcxMDAxOTg5NywzNTQ5Mi4wOTI3MzI3MjY3MSwyMjYyNjg2LjkyNDQ2NDUxNCwzOTI0OTEuMjk2MDczMDM3MjYsMTEuODk1NjY3MjUzNDI5NjA0LDQyMzEuNTY0NDcxMDc5ODk5LDE0NTQ0Mi44Njk0ODA4MjkwNyw1LjQzMDk0NTYwNDY1MTYwNSwyOTUuNTI3ODExNDYxNjgwNCwxMTI1Ni41MTg0OTc5ODE5NTksMjU0NDE2LjEyMDk3NzY3MTMyLDUzOTg2Ljc5OTcwMjQ5NTMzLDQuMDgzMzc2NzQ2NDkwODk0CisxOCxGcmkgMTEgRmViIDExLDk1ODAuNDE4OTA0MjA1MDc1LDU1MzMuNzg3Njg2OTY3OTAyLDcxNzQuNzE5Mzg1OTQzNTUyLDExNjc2Ny4xNjUzNzEwODcwNiw2MzcuMzY1MzUwNjU0MTM2MywzMTgwNDIuNzMyMDkwMTk5MjUsMjA1OC44MjM0MzU2OTYwODYsNjMyODEuODAxOTY0NzMyNTg1LDE3Njk4OC4yNjkyNzUxNzAzNCwyMDMxNjUuMTQyOTg2NjMyNzcsMzM0MDkuMDc2NTEyMzEyNzUsNzMxMjIuMzA5OTI5NDMzOCwyLjI2NTM5NTQ3MTMyMzc4MSwyMzA0NS42MjQ0OTk1NjA5NjcsMTI1MzM1Ljg4NTgxMjU3OTA2LDIwNzMwMjcuNzQ0MjQ2MDUxLDEwOTczOTcuMDk1NjE4Mzc2NSw0NS43MTA0MzAzNDc4ODc3NCwxNTQ4NC41OTE2NTIzNzgwOCw0Mjg2MzMuMjM1OTA4MzYxNSwyMS4wODc3NjM1OTgxMDcyNTUsMTIwNS45OTczNjYxMjk2MTY3LDQwMzU2LjIyNjIwODQzNTcyLDc5OTkwNS4wMDIyOTI3NDgsMTM1MjExLjI5OTk5MTkwMjg0LDE1LjM0OTU5Mzg2NDcyOTQ1MQorMTksU2F0IDEyIEZlYiAxMSwyODgzMS42NzI0ODg0NjI5LDE2NDc3LjQwNDUyNTc0MTE4LDIxNjk0LjI0NjQyNzcxMjkzLDg5Nzc0LjcxMjgyMTg5ODE3LDIyNTAuMTEwNzYxNzE2MDMwNSw4NTkzMTEuMzY4MDc0MDI1NSw3NDMxLjY3MTI0MjYyMzMzNywyMTMwMjEuOTMwMzc4NzgzMzIsNTEwMzQyLjA3NDYwNTA1NDQsNjA5MDIyLjQ0ODgwMjk4NzEsMTA0MjA1LjIwODY4NDkyMTgyLDI1MTY4Ny40NTM3MjAzOTEyNiw5LjAyNDIxMDQ1NzUxODc2NCw3ODMyNC40MDMzNTUxMjcyLDM5NDQxNC40NDQyOTE2NjAzMywyMDkuNDAwNjU1MTE5NzY2NiwyMDA2MjYxLjI2OTYyODczMzksMTY2LjMwMDQ3MjUyMTAzMjQyLDUzMDExLjUzNzQwNTY2NTg1LDkzOTE1Ni43OTg3MTk3MzMxLDc3LjYyNzA1MTcyMzA2MzQ5LDQ2NTEuMjUyMTM5MDkzNDYyLDEzNTUwOS4xMTI4NzAyNTc0NCwyMDk5NjQ2LjY2NDI4ODA5MiwyMTU1NTAuNzg3Mzc2MDg2NjYsNTQuMzA5MDUzMzc4NzMzMDQKKzIwLFN1biAxMyBGZWIgMTEsODEzMDEuMDkzMDY3Mjk2NjQsNDI5NjYuODc0MDc1NTMwMzYsNTU5MDMuMDc0ODM0NzUxMTksMTAuNTY2NTE5Mjc3MjY4ODA3LDg2MTcuNTU1OTQwMDAxMzE3LDE5MTk5MzEuMjc5ODE1NzY3NCwyOTY1MS45NzI5MzAwNDcxMzcsNzMzODc4LjQ5NDg4NTQwNjcsMTMxMjYwNi4yNjU0MDk4LDE2NDEyMjguMDAzNjMyMTUxMywyOTc3NjYuMjQ0MzU4MDgwMTUsODkyMjU3Ljc2NTIyOTI5ODcsNDAuMjMxNTAwMDU1NzE0MTUsMjgxNjM5LjI2OTk4NTQ5OTcsMTA1NTMzMi42MDQzMjE3NDQzLDI2My44MDY1MTg2NzEzMDM1LDkzMTA1Mi42MDU1MDAyNjMsNjY2Ljk2MDM5ODkyMDE5OTksMTkwMzA3LjU1MDM5NDc5ODUsOTA2NjM0LjAwNjQ4MDA4NzMsMzE2LjEyMzU0OTY1MDkwNjUsMTk5MTAuNzgxNDY0NDQ3MjksNDcyMTY5LjU3ODg5MjUyMzQsMzc2NTcyOS40MjA4NTE0Njg2LDk4NDM5LjI1MzQzMDMwODIsMjA3LjQ5MzI1Mzc1MTA5NTM1CisyMSxNb24gMTQgRmViIDExLDEzMzM4Ni41NjY5NTc5NTU4Niw2OTUxOC40MzM2NDc1ODE4LDYwMzUxLjA1ODU1NzQ1MDE4LDEyLjk0OTA3MTg2ODg2OTE0NiwzMzE2Ny4zNTczNDQ5NjI2MywxNzc5ODEzLjQ1MzMzNjQxNSwxMjUxMzIuNzgzMDAwMDkxMTMsMTkyODA1OC43Nzg4MjY2MDU1LDE2NzA5NDcuNjg0MjU3ODYxMiwyMTUwODUyLjI1NTQ5Mzg1OTgsNDU1MTIwLjEwNDEyMjAyNDI2LDI0NDc4ODYuNzQ4NjU5ODY2LDE5Ny42MDQ5MjkxMTI3MjE2LDkwMDM2MC4zNDcyNjY2Nzg3LDEwOTQyOTEuMzgxNjgwNDIsMjYwLjE2Njc4MDIzNDExMDY2LDIxMS40ODQ5MDkzOTM4MzIyLDI4MjkuMDA1MTE0NzY4ODA2NCw2NDE1OTUuMTI5OTE4MDgyNiwzNTg0Mi40OTM2NjA3OTA3NSwxMzcyLjcyOTk1OTY2NzM5NjUsOTEzODIuNTcyMjA5NjgwMTksMTM0OTgzMi4wMjM3NDEyMDA2LDEzOTIwNjEuMzk3NDI1MTE4LDE2LjEzMTI2NDMxNjY2NTUyNiw3NjkuOTE5NjE1OTU1NjU1NworMjIsVHVlIDE1IEZlYiAxMSwzOTUxMy4zMTIyMzYyNDgxOCw3MDA1Mi4yNDg0MzQ1NzI3LDYxMDMuOTk4MjUxMDU2MDg0LDEyLjg4MjIzODg0ODk5MzY3NSw5OTEyMy40OTUxMDI2MDYxOSwxNjIxODguNDU4MjU0NzExNTMsNDc4MDk3Ljc3MDI3OTcxODA0LDE1ODgzNzUuNDkyMzY5MTE5LDI2Nzk3NS42ODIwNTg2ODUxNywzMzM2MDguOTI4NTc1NDIwNCwxMTYzOTcuMzE5NDc5ODE4NjYsMjE1MzkyMS4xMTg4NjY4NzI1LDk1NC4yMDg5OTcyNTc2NjM0LDE0NDUyNzguMDg4ODU1MTEyNCw4MjM3Ni4wMzYyNjMxNzU0MSwyNDYuMjU3NTA1MjUxMjkxODMsMTgyLjU1MzYxMDU2MzQxODMsMTEzMzQuMTUwNzE5NTEwMjQ0LDE1MjA3NDkuNzIxNDEyMTUxNCwxMDEuNjgyMzg3NDYzMTM3MzksNTcwMi43MjYyNDA1ODk2MDksMzgzNjU1Ljc1NTgwMjk3NjE0LDE1MTg2NDUuNTQzMjA2MzY4OCwzMzYuMDg2ODg5MzQ4OTkyMywyMS40OTU2NTM5MTY2NDIxNjIsMjAzMy4wNjI3Njg5MDcxMzkKKzIzLFdlZCAxNiBGZWIgMTEsMTEyLjg0Mjk2NDg2NjIxNzIzLDQ0ODg5Ljk1ODEyODQ2MTMxLDYuMjk4MzgyOTA5MTI0MzI4LDEyLjYzODk4ODg0NzIyMTMzMywxNDM5MjIuNTc2MTE4NDY1MywyMDYuMzE0NjI2MDYxMjM5MzgsMTUxNDk1OC4xMzM0ODE2MTk2LDgxODc3Ljk3OTI5NzA2NTQ3LDEyOC4zNDI1NzUzMjg3NDYzNiwxNTkuNjUyNDIyMzE4ODA2NSwyNzMuMTMxOTQzNjc2MjExMiwxMjY3NDIuMDg2OTY0NzUxODEsNDU2Ni41NzA4NDExOTU2ODYsMzk5MzEwLjA2MTEwOTE4NzcsMTExLjg0MDA2Mjc1NzAyODAxLDI0MS41MDA5MzgwOTE3MzU3NSwxNzguMjU0ODY2OTYxNDg0OSw0NDUzOS42MTQyOTk2MjQwMywxMjg3NzM0LjI4MjExNjI5NDYsOTcuOTcyMTY4MDAyNTY4ODIsMjM3MDcuMDQ4ODc2NTU1ODMsMTI2NTg4Mi4wOTgwMTg0ODIzLDE3ODc1MC44Nzg5MTkzNTA5NCwzMzAuOTM2MTc0OTc4MzE3NiwyMC43NTQ4MzM1NTM3ODM0MDMsMjcxMi43OTA3NjM2OTI5MDM1CisyNCxUaHUgMTcgRmViIDExLDExLjU4MDY3MTM4NDU0MTU3LDEyNDYzLjEyOTIyNjgyNjU2Niw1Ljk3NzgzMTk2NDU1ODg0MiwxMi4yNDIxMTcxNTU0MjQwMTUsMzM5NjguOTg2OTQ0OTc3MDg1LDIwMS40MDc3NzA2ODk5NTkzNiwyNTkxODgwLjY2MTQ5OTUxLDE4NS44MzY0MTEzODYzODY2LDE1Ni4wODk0MDg1NzY5MDQsMTk1LjAxMzQwNDM1NDQ4OTI3LDM5LjgxMjkyMDgzMDAyNDc5LDIzNC45MDI3ODU4OTY1NjE3NCwxOTk2NC44Njc0MzcyNTE4NSwxNzc4LjU3OTY5MjAyOTc1NiwxMDguMDgzMDI3NDg0NjYyMDQsMjM2Ljk1MjU0ODM2MDQ0OTU1LDE3NS4yNjIxMjkzNDU0NDU5NywxNTkwNjAuNTUwMDMxNDgwMTgsMTA0NDg4LjE1Njc5MTI2MjAyLDk2LjA2MDc2NTQ4NTQyMzQ3LDkzODI5LjA4Mzg4MjIzNzUsMTkyODIwNC4yNDkxNjMyNzE5LDEzMC45Mjg4NTU4NjM0Mjc2OSwzMjIuNjcwNTcyMTYzODIzNjQsMjAuMzQ0OTIwMTA5MTMwNjksOTM4LjYxMjkzMDcyOTA1MzYKKzI1LEZyaSAxOCBGZWIgMTEsMTEuMzMzODQ0MzY3NTcxOTUsOTMyLjg4MDc5MTMwMzMyNjQsNS44NTUzNjYwODEzMDYyNSwxMS45NjQyMDUzOTczNjE4NzYsMTAuOTU3MTkyNjU4NzkwNjg5LDE5Ny4xNDQxODA1NzY0MDg0LDkwNTU1OC4wMjAzNDAyMDk1LDE3OC4xNjYzMzM5MzMwODA1NSwxNTIuNzE2OTY4MDQ3NTUyNywxOTAuODU3NjQ1MTgyMjY3MTYsMzguOTMyNjczNTg0MzE1MzMsMjI5Ljg2ODQ1MjQ1MTgzNTA4LDc0NjkzLjY2NTE4MjUzMTI5LDEyMS4zOTA1NzI2MTQ3Mjk1NiwxMDUuOTgzNTU4NjA3MDczMTIsMjMxLjk4NTM0Nzk5NDE3ODQ4LDE3Mi4xODUyNzYxNDM2Nzc1OCw0MzM5NzcuMjIzMTg4OTExOCwxNTUuODYzNTMzNjIyMTU1ODcsOTQuNDA0MzA3OTc2NDEwMTgsMzMxMzczLjc1Nzg5MzI5MzM0LDQ3Nzg5OC40MzczOTY2MDgzLDE0My41MDE5MzI3MjM5OTY1LDMxNi45NjU0MjYzOTE4NTM5NSwxOS45ODUyNTk2MTc3OTEyNjgsMTkuNzAwMjUxODY0OTIzMDMKKzI2LFNhdCAxOSBGZWIgMTEsMTEuMTMzMDkyMzQ4ODA4MzA4LDE2Ljg5NzU5OTMyMjkyMzgxLDUuNzUwNzAzMzY3Njc3OTI3LDExLjcxNTk4OTE3NTMzMDM0MSwxMi41Mjk0NzE1NjY2MTc3MTUsMTkzLjYyMzM1Njg2NjUyMzk1LDIyMy4wMTY3MjUyMTEzODQyOCwxNzQuODE5NjE1ODkzMDQ2MDYsMTUwLjAyMDI3MzE2MjA3MDIsMTg3LjQ5ODIxNTI2MjE4NDI2LDM4LjIzNTgzMzIxOTM0ODI1LDIyNS40OTYxMTQyNjUwMDk5LDIxMTQ2Mi43ODc3NDUxMTM1NywxMTkuNTY0MzMwODU1MzMxNDIsMTA0LjExNTQ4NjM4Mjg2MzYsMjI2LjAyMjE4NjExNzYxNzMsMTY4LjYyODEzNDM0NTU0NTU2LDU3MjQ1NC4yMzg0NjQxMDU0LDE0Ny41MjM0ODczMTY5NjI2Nyw5Mi41NjA1ODg3MDc1NDgxLDg4NjU1My4zMTM3NDU5MTM2LDE3MS43MzYxNzUxNDM2NzY0LDE0MC41Njk4OTg3MjIyMTI5NCwzMTEuMTczMzI3OTg1MjgzNCwxOS41ODQwMTEzOTQ3MjAwMjIsMC4yNjgwNzE2NTIyMTA0NzE5CisyNyxTdW4gMjAgRmViIDExLDEwLjkyNTQxNTg5NjkyMzk5NywxMS4wMjYyMTY2OTY4MzMxNzIsNS42MzczMDk4ODAxODYwNTUsMTEuNDM0NTAyOTYzODE0Mzg3LDEyLjI0MzkyODE0MDE4MDgyNCwxODkuNzk5MjIwMzUxMzIwMzQsMjA5LjQyNDA3MDA4NDU1OTQ3LDE3MS41MjgxODYxMTk1ODQwMywxNDcuMTEwMTIyMzk1NDIwODMsMTgzLjg1OTM4NDc5NDk5NzMsMzcuNTAyODcwNjUwNzg1NzksMjIxLjI1MDc3NDc1NDAyMzMsNDgzMjMzLjM1NTcyMDM2MjMsMTE3LjI0NDM2MDc4NzcyMTM2LDEwMi4wNTYzNjc2OTgzMzgwNSwyMTguNjcwOTQ4NjMxNjM0MywxNjQuNDE0MDEwNjM2Nzg4ODQsODczNDAuODc4NjM3MzkzMzMsMTQ0LjEzODQyNzU1NTAyMzY3LDkwLjQwNzIxMjU3NjgyNjU4LDE2OTk3NzAuMDc4MDE4NzQ0MiwxNjIuODcwMTQ5MTU3Njk3NywxMzcuOTAwNjkwOTA4NjMwNjgsMzA0LjU4MTY0MzE1MjAyMzczLDE5LjExMjM2MzkxNTEyNTM4NSwwLjI1NzcxNzMyMzIzMjU3MzkKKzI4LE1vbiAyMSBGZWIgMTEsMTAuNjg2MTI0MTA5ODc0OTQsMTAuNjA3ODE3NzMxNjczNDk0LDUuNDk1NzI2MzkwODc2NDMxLDExLjA4ODc5MzcwMjA2MjQ0LDEyLjAxNjQzMDQxMDY3ODU5OCwxODUuMDExOTA4MTI4NTY5MjUsMTg3Ljk0Mjk4MDc3ODIzNzI2LDE2Ny43NjY2NDI5NTQ2NTM4MywxNDMuNDc0MzQ2Nzk5NjkwODYsMTc5LjMwMjEwOTkwNTUzNjUsMzYuNjA5NTY0OTA1MzY3NjMsMjE2LjQyNDY5MDA0MTg1Mzg0LDM3NDgyNi4wOTYxNjkyMDcwNywxMTQuODQ1NTU3MTc0ODAzNTMsOTkuNDI4NTg3NDAyNzgzMDgsMjA5LjYyODg5MjUyNDE1OCwxNTguOTYyNzIwMDY4MDQwOTQsNjAuMTQ5MjU2MDY0Njk4ODQsMTQxLjMzNTY4NDI3MzAyODg3LDg3LjU5MjMwOTk3Mzc2NDA3LDcxNTM3Ny45MTQzODY2MDU4LDE2MC40Njk5NTQ0MDczNjc5LDEzNC45NzYzNDUyODEyMDc1LDI5NS45OTExNDgzOTQxNDk5NSwxOC41MDA4MzExMjI5NzEzNiwwLjI1MTc5ODYwOTUyMzEyODYKKzI5LFR1ZSAyMiBGZWIgMTEsMTAuNDc1MzEyMjg3ODgyMjI5LDEwLjMzNzcyNzIxNDg3ODM3Niw1LjM3MjQ0NTgwNTYzOTczNCwxMC43ODE0NTcxMDE0MjYxODgsMTEuNzk3MTQ5MzE2MjUwNTExLDE4MC44NDMwNTk3NDYwMDYyLDIwMi4zODcyNjg3MjQzNjQ2NywxNjQuNTA1MjUwNDEyMzE0NDcsMTQwLjMxMjQ1ODc5NDI4MzYsMTc1LjMzODg1MTE1MzUwOTksMzUuODMzMjA0NjI0NzY5MTEsMjEyLjI0MTA5ODg1MDQwNjQ0LDEyNjg0LjQzMDIxNjA1MjExOCwxMTIuNzc4ODY3NDc4NjM0Nyw5Ny4xNDExMTQzNjQ0NTMwOSwyMDEuMzc3MjQ5MDIxNDg5MzIsMTU0LjEwOTU1NTY5ODQ4MTI0LDUxLjYzMzc1NzY5OTU3NzU1LDEzOS4wMzQwMDA4MDMwNDg5LDg1LjEwNjU5OTkwMDYxMjAzLDEzNi41NjU2Nzg5NjA2NDU5NSwxNTYuNDQ0MTA5MDQ3ODczMDQsMTMyLjQ0NTgwODA1ODQ5MjI4LDI4OC40NzM2OTQ4MjAyNDI2LDE3Ljk1ODM5MDAyMDkwMjc4LDAuMjQ5MTIyNjk0NDQ4NDE0NDgKKzMwLFdlZCAyMyBGZWIgMTEsMTAuMDgwODY1OTgxNzEyMzA0LDkuOTg0NDAyMTY1MTg2OTgsNS4xNTA5NDQ0NTYwNzg0OSwxMC4yNjE2ODQ1MDQxMzU1MzgsMTEuNDgxODU1MzU3ODI0MjU5LDE3My4zNTQwMTM1NzExNzE0NCwyMDQuMDE2OTA1Njc5ODIxODMsMTU4LjYyNDQ1NTM4NjM2NDAyLDEzNC42MDU2OTI4ODI2NjA3MiwxNjguMTg0NjY1MTg0NjA3OTUsMzQuNDMxMTQ2MDg2MzI4OTY1LDIwNC43MDA3MTcxNTE0NDk2LDQ3LjcxOTExNjk3MDgzNzY1LDEwOS4xNDMwMzU5OTI0OTI2OCw5My4wMjM4ODAyNTA1MzYzMSwxODguNDc0MjkxODkwNzA4MywxNDUuOTAwODc2NDgxNzk5OTcsNTAuNDM2NTg3MTQzMDUwMywxMzUuMTAxNzczOTM3ODYwMyw4MC44MTE0ODU4NjIzMDM3MywxNDcuMDgxNzcwMzkwMTk0NzgsMTUyLjYyMDUwNzY5MTQ3ODksMTI3LjkwODIzNjg4NjI5MTg5LDI3NS4xNTczOTE4MDYxOTk4LDE3LjAzMTYyNzQyNzA5MzM5NywwLjI0MzM5MDQ4NDQwMzAwNjQyCiszMSxUaHUgMjQgRmViIDExLDkuNjkwNzM3ODg5MDA5MjM4LDkuNzMyNTQwODUzNDI3NjE1LDQuOTMzOTU2NjMxMjQzMzk0LDkuNzQ0MTU5ODY2MjIyNzk4LDExLjE2MjIzOTIyMTM2NzA0MiwxNjYuMDE3NDU2MDYwMDc4NjcsMjAxLjk5NzczMTYyNTI2NiwxNTIuODU3OTQwNDQ5MjMyNzYsMTI5LjAyMjM2MzgyNzczMDQ2LDE2MS4xODU3MjMwNDg1Njk4NiwzMy4wNTkxODQ3OTkzNDUxNiwxOTcuMzA0NTIzMjA5MjI3NTcsNDYuMDA3MzI3MDQwMjczMzYsMTA1LjU0MzY1MTgxMjgyNTg0LDg4Ljk5MzY5NTUzNTMwNjM2LDE3NS41NzA0MjEzNDU3ODIwOCwxMzcuNzU4MTU2NDAxOTQxNjgsNTAuMTgyMTMzOTE4NDUyMTY2LDEzMS4xMTY0NjAwNDQ2MDMyMyw3Ni41Njg1ODU0Mjk3MTkzOSwxNDIuMDQzNjQ1MTkxNTEwNDIsMTQ4Ljg1MzQ3OTA3NTI1OTE0LDEyMy40NDUyNDY5MzQ0NDk2NCwyNjIuMDcxOTAxNzIyODIzNDQsMTYuMTEzNzIyNzY2MDY2MTU0LDAuMjM3MDQ3Mzk3NTc3MTUKKzMyLEZyaSAyNSBGZWIgMTEsOS4yMTAzMjY1OTc5NDE0OTIsOS40Njg3MTQxMzI1ODQ2MzcsNC42NjkyMDgzNTg0ODYxNTQsOS4xMzYwMDg5NDQwNjA4OCwxMC43NjEwMDI0MDI2NjYzMSwxNTcuMDcyOTg1OTQzNDI3NCwxOTYuNjIxMDgxODQ4NTc0ODIsMTQ1LjY1OTc0MDg2MzMyODM1LDEyMi4xODg1NjYwNTc1NDI4MywxNTIuNjIzNTIyOTQyMTI0MSwzMS4zNjkxNDEwNjE1NzQ0MiwxODguMDY1MDUzNDUxNjgxNTQsNDguNzY5NTU2Njg4NDI2NzUsMTAxLjAxMTAzMTc3NDkxNTg0LDg0LjA5NzM4MTc4NTMxNjU0LDE2MS4yNjY5MTU5NTc4NzcwNywxMjguMzQ1NzYyMDY3MDMwMjgsNDguMzY3MzY4NjE0NTU4OSwxMjYuMDk2NDMxOTE1NDY1MDgsNzEuNjAxNzg3NDY5OTQzNDIsMTM3LjY1OTQyMDUwMDE3ODI3LDE0NC40NzE2OTU1ODExNDQzNiwxMTcuODQ5NDI0MDY5NTEwNjUsMjQ2LjQ1MTE1MjE1ODkyNDEsMTUuMDQ1MzI0OTkzNTc2MDYxLDAuMjI5MTU2Njk2NTcxOTQzNwpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Qb3B1bGF0aW9uR3Jvd3RoU0VJUl9GRF9SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vUG9wdWxhdGlvbiBDb3VudF8wLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvUG9wdWxhdGlvbkdyb3d0aFNFSVJfRkRfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL1BvcHVsYXRpb24gQ291bnRfMC5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmMyNDQwMQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvUG9wdWxhdGlvbkdyb3d0aFNFSVJfRkRfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL1BvcHVsYXRpb24gQ291bnRfMC5jc3YKQEAgLTAsMCArMSBAQAoraXRlcmF0aW9uLHRpbWUsCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1BvcHVsYXRpb25Hcm93dGhTRUlSX0ZEX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9Qb3B1bGF0aW9uIENvdW50XzEuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Qb3B1bGF0aW9uR3Jvd3RoU0VJUl9GRF9SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vUG9wdWxhdGlvbiBDb3VudF8xLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYzI0NDAxCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Qb3B1bGF0aW9uR3Jvd3RoU0VJUl9GRF9SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vUG9wdWxhdGlvbiBDb3VudF8xLmNzdgpAQCAtMCwwICsxIEBACitpdGVyYXRpb24sdGltZSwKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvUG9wdWxhdGlvbkdyb3d0aFNFSVJfRkRfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL1BvcHVsYXRpb24gQ291bnRfMi5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1BvcHVsYXRpb25Hcm93dGhTRUlSX0ZEX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9Qb3B1bGF0aW9uIENvdW50XzIuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM2ODk5MWIKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1BvcHVsYXRpb25Hcm93dGhTRUlSX0ZEX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9Qb3B1bGF0aW9uIENvdW50XzIuY3N2CkBAIC0wLDAgKzEsMzMgQEAKK2l0ZXJhdGlvbix0aW1lLEVHLUZSRy1HMjEwMDAxLEVHLUZSRy1HMjEwMDAyLEVHLUZSRy1HMjEwMDAzLEVHLUZSRy1HMjEwMDA0LEVHLUZSRy1HMjEwMDA1LEVHLUxPRS1HMjQwMDAxLEVHLUxPRS1HMjQwMDAyLEVHLUxPRS1HMjQwMDAzLEVHLUxPRS1HMjQwMDA0LEVHLUxPRS1HMjQwMDA1LEVHLUxPRS1HMjQwMDA2LEVHLUxPRS1HMjQwMDA3LEVHLUxPRS1HMjQwMDA4LEVHLUxPRS1HMjQwMDA5LEVHLVVQRS1HMjkwMDAxLEVHLVVQRS1HMjkwMDAyLEVHLVVQRS1HMjkwMDAzLEVHLVVQRS1HMjkwMDA0LEVHLVVQRS1HMjkwMDA1LEVHLVVQRS1HMjkwMDA2LEVHLVVQRS1HMjkwMDA3LEVHLVVQRS1HMjkwMDA4LEVHLVVSRy1HMzAwMDAxLEVHLVVSRy1HMzAwMDAyLEVHLVVSRy1HMzAwMDAzLEVHLVVSRy1HMzAwMDA0CisxLFR1ZSAyNSBKYW4gMTEsMjk3MjM3LjQwMzQ1MzgwMTUsMjY1Mzg5LjYwMzQxODU3MTc2LDE1NDQ3OC4zNTA0MTEyNjcyNSwzMTkzNDcuMzI3NjM2OTEzMTYsMzIxODk4Ljg5ODkxMzc3NDIsNTIwMzYyMS44NzkzMTM4OTUsNTY1NDc3MC41MDU0MTM5MTMsNDYzNDYyNC41MDY1NjkwOSw0MDI1NjM5LjA4NjA2MzcwNSw1MDMzMDYyLjQ4NTEzNDgzOSwxMDIyMDY2Ljk4MDQ1NzUyNSw1OTc0ODE0LjkwNjYwOTI5LDExODI0NTAuMzA5NDgxMDkzNCwzMTM4OTUwLjQzOTA0OTIwMzQsMjgwNTY0OS41NTIyNjIyMzk2LDY0NDA2MTQuMTY1NDE3ODIyLDQ2NjU5NzAuNjU1NDAxODQyLDEzMTIyNDMuOTk1ODAyNTU0OCwzODE5MjI1LjczMzU1MTcxODMsMjU0MzQ5Ny41MTMwMjk5NDIsMzc1NzU0My43ODk2MTMyOTQsNDE3MjY1Ny4xMzc2Njg2NDI3LDM3MTE5NTYuOTkyMDg2OTA0Niw4NDYxMzI1LjY0ODkwMzExNyw1Mzk1OTMuMzU5NDkxMTI0NCw2NzU2LjE3MzkyNTc0Mjg1MzUKKzIsV2VkIDI2IEphbiAxMSwyOTcyMzguNTkyNDAzNDE1MzYsMjY1MzkwLjY2NDk3Njk4NTQsMTU0NDc4Ljk2ODMyNDY2ODksMzE5MzQ4LjYwNTAyNjIyMzcsMzIxOTAwLjE4NjUwOTM2OTgsNTIwMzY0Mi42OTM4MDE0MTIsNTY1NDc5My4xMjQ0OTU5MzUsNDYzNDY0My4wNDUwNjcxMTcsNDAyNTY1NS4xODg2MjAwNDksNTAzMzA4Mi42MTczODQ3NzksMTAyMjA3MS4wNjg3MjU0NDY4LDU5NzQ4MzguODA1ODY4OTE3LDExODI0NTUuMDM5MjgyMzMxMiwzMTM4OTYyLjk5NDg1MDk1OTYsMjgwNTY2MC43NzQ4NjA0NDg3LDY0NDA2MzkuOTI3ODc0NDgzLDQ2NjU5ODkuMzE5Mjg0NDYzLDEzMTIyNDkuMjQ0Nzc4NTM4LDM4MTkyNDEuMDEwNDU0NjUyNCwyNTQzNTA3LjY4NzAxOTk5MzYsMzc1NzU1OC44MTk3ODg0NTIyLDQxNzI2NzMuODI4Mjk3MTkzLDM3MTE5NzEuODM5OTE0ODczLDg0NjEzNTkuNDk0MjA1NzExLDUzOTU5NS41MTc4NjQ1NjI1LDY3NTYuMjAwOTUwNDM4NTU3CiszLFRodSAyNyBKYW4gMTEsMjk3MjM5Ljc4MTM1Nzc4NDkzLDI2NTM5MS43MjY1Mzk2NDUzNCwxNTQ0NzkuNTg2MjQwNTQyMiwzMTkzNDkuODgyNDIwNjQzOCwzMjE5MDEuNDc0MTEwMTE1ODQsNTIwMzY2My41MDgzNzIxODcsNTY1NDgxNS43NDM2Njg0MzIsNDYzNDY2MS41ODM2MzkyOTcsNDAyNTY3MS4yOTEyNDA4MDM0LDUwMzMxMDIuNzQ5NzE1MjUsMTAyMjA3NS4xNTcwMDk3MjE3LDU5NzQ4NjIuNzA1MjI0MTQxLDExODI0NTkuNzY5MTAyNDg4NCwzMTM4OTc1LjU1MDcwMjkzOSwyODA1NjcxLjk5NzUwMzU0ODQsNjQ0MDY2NS42OTA0MzQxOTYsNDY2NjAwNy45ODMyNDE3NDEsMTMxMjI1NC40OTM3NzU1MTcsMzgxOTI1Ni4yODc0MTg2OTQyLDI1NDM1MTcuODYxMDUwNzQxNywzNzU3NTczLjg1MDAyMzczMTYsNDE3MjY5MC41MTg5OTI1MDY0LDM3MTE5ODYuNjg3ODAyMjMyMyw4NDYxMzkzLjMzOTY0MzY5LDUzOTU5Ny42NzYyNDY2MzM5LDY3NTYuMjI3OTc1MjQyMzU4Cis0LEZyaSAyOCBKYW4gMTEsMjk3MjQwLjk3MDMxNjkxMDQsMjY1MzkyLjc4ODEwNjU1MTUsMTU0NDgwLjIwNDE1ODg4NzE4LDMxOTM1MS4xNTk4MjAxNzM1LDMyMTkwMi43NjE3MTYwMTIyNiw1MjAzNjg0LjMyMzAyNjIyMSw1NjU0ODM4LjM2MjkzMTQwNyw0NjM0NjgwLjEyMjI4NTYzMTUsNDAyNTY4Ny4zOTM5MjU5NjgsNTAzMzEyMi44ODIxMjYyNDgsMTAyMjA3OS4yNDUzMTAzNDk3LDU5NzQ4ODYuNjA0Njc0OTYxLDExODI0NjQuNDk4OTQxNTY1LDMxMzg5ODguMTA2NjA1MTQyLDI4MDU2ODMuMjIwMTkxNTM4Myw2NDQwNjkxLjQ1MzA5Njk1OCw0NjY2MDI2LjY0NzI3MzY3MywxMzEyMjU5Ljc0Mjc5MzQ5MiwzODE5MjcxLjU2NDQ0Mzg0NCwyNTQzNTI4LjAzNTEyMjE4NTUsMzc1NzU4OC44ODAzMTkxMzE1LDQxNzI3MDcuMjA5NzU0NTgyNSwzNzEyMDAxLjUzNTc0ODk4MzMsODQ2MTQyNy4xODUyMTcwNDksNTM5NTk5LjgzNDYzNzMzODksNjc1Ni4yNTUwMDAxNTQyNTk1Cis1LFNhdCAyOSBKYW4gMTEsMjk3MjQyLjE1OTI4MDc5MTcsMjY1MzkzLjg0OTY3NzcwNCwxNTQ0ODAuODIyMDc5NzAzODIsMzE5MzUyLjQzNzIyNDgxMjgsMzIxOTA0LjA0OTMyNzA1OTEsNTIwMzcwNS4xMzc3NjM1MTMsNTY1NDg2MC45ODIyODQ4NTksNDYzNDY5OC42NjEwMDYxMjEsNDAyNTcwMy40OTY2NzU1NDM1LDUwMzMxNDMuMDE0NjE3Nzc2NSwxMDIyMDgzLjMzMzYyNzMzMTEsNTk3NDkxMC41MDQyMjEzOCwxMTgyNDY5LjIyODc5OTU2MDgsMzEzOTAwMC42NjI1NTc1NjgsMjgwNTY5NC40NDI5MjQ0MTksNjQ0MDcxNy4yMTU4NjI3NzEsNDY2NjA0NS4zMTEzODAyNjMsMTMxMjI2NC45OTE4MzI0NjMsMzgxOTI4Ni44NDE1MzAxMDIzLDI1NDM1MzguMjA5MjM0MzI1NywzNzU3NjAzLjkxMDY3NDY1Myw0MTcyNzIzLjkwMDU4MzQyMTMsMzcxMjAxNi4zODM3NTUxMjY1LDg0NjE0NjEuMDMwOTI1Nzg4LDUzOTYwMS45OTMwMzY2Nzc0LDY3NTYuMjgyMDI1MTc0MjYwNQorNixTdW4gMzAgSmFuIDExLDI5NzI0My4zNDgyNDk0Mjg4NSwyNjUzOTQuOTExMjUzMTAyNywxNTQ0ODEuNDQwMDAyOTkyMTQsMzE5MzUzLjcxNDYzNDU2MTcsMzIxOTA1LjMzNjk0MzI1NjUsNTIwMzcyNS45NTI1ODQwNjQsNTY1NDg4My42MDE3Mjg3ODcsNDYzNDcxNy4xOTk4MDA3NjUsNDAyNTcxOS41OTk0ODk1Myw1MDMzMTYzLjE0NzE4OTgzNiwxMDIyMDg3LjQyMTk2MDY2NTUsNTk3NDkzNC40MDM4NjMzOTY1LDExODI0NzMuOTU4Njc2NDc2LDMxMzkwMTMuMjE4NTYwMjE4MywyODA1NzA1LjY2NTcwMjE5MDcsNjQ0MDc0Mi45Nzg3MzE2MzMsNDY2NjA2My45NzU1NjE1MDgsMTMxMjI3MC4yNDA4OTI0MzA1LDM4MTkzMDIuMTE4Njc3NDY4LDI1NDM1NDguMzgzMzg3MTYzNywzNzU3NjE4Ljk0MTA5MDI5Niw0MTcyNzQwLjU5MTQ3OTAyNDQsMzcxMjAzMS4yMzE4MjA2NjEsODQ2MTQ5NC44NzY3Njk5MTUsNTM5NjA0LjE1MTQ0NDY0OTQsNjc1Ni4zMDkwNTAzMDIzNjEKKzcsTW9uIDMxIEphbiAxMSwyOTcyNDQuNTM3MjIyODIxODUsMjY1Mzk1Ljk3MjgzMjc0NzcsMTU0NDgyLjA1NzkyODc1MjE1LDMxOTM1NC45OTIwNDk0MjAyNSwzMjE5MDYuNjI0NTY0NjA0MjUsNTIwMzc0Ni43Njc0ODc4NzQsNTY1NDkwNi4yMjEyNjMxOTQsNDYzNDczNS43Mzg2Njk1NjQsNDAyNTczNS43MDIzNjc5MjgzLDUwMzMxODMuMjc5ODQyNDI0LDEwMjIwOTEuNTEwMzEwMzUzNSw1OTc0OTU4LjMwMzYwMTAxMiwxMTgyNDc4LjY4ODU3MjMxMDYsMzEzOTAyNS43NzQ2MTMwOTI3LDI4MDU3MTYuODg4NTI0ODUzNiw2NDQwNzY4Ljc0MTcwMzU0ODUsNDY2NjA4Mi42Mzk4MTc0MSwxMzEyMjc1LjQ4OTk3MzM5NCwzODE5MzE3LjM5NTg4NTk0MywyNTQzNTU4LjU1NzU4MDY5NjQsMzc1NzYzMy45NzE1NjYwNiw0MTcyNzU3LjI4MjQ0MTM4OTMsMzcxMjA0Ni4wNzk5NDU1ODgsODQ2MTUyOC43MjI3NDk0MTgsNTM5NjA2LjMwOTg2MTI1NTIsNjc1Ni4zMzYwNzU1Mzg1NjMKKzgsVHVlIDEgRmViIDExLDI5NzI0NS43MjYyMDA5NzA3LDI2NTM5Ny4wMzQ0MTY2Mzg5NiwxNTQ0ODIuNjc1ODU2OTgzODQsMzE5MzU2LjI2OTQ2OTM4ODQ3LDMyMTkwNy45MTIxOTExMDI1LDUyMDM3NjcuNTgyNDc0OTQ1LDU2NTQ5MjguODQwODg4MDc5LDQ2MzQ3NTQuMjc3NjEyNTE4NSw0MDI1NzUxLjgwNTMxMDczNzMsNTAzMzIwMy40MTI1NzU1NDQsMTAyMjA5NS41OTg2NzYzOTQ2LDU5NzQ5ODIuMjAzNDM0MjI2LDExODI0ODMuNDE4NDg3MDY1MiwzMTM5MDM4LjMzMDcxNjE5MSwyODA1NzI4LjExMTM5MjQwNzcsNjQ0MDc5NC41MDQ3Nzg1MTUsNDY2NjEwMS4zMDQxNDc5NjksMTMxMjI4MC43MzkwNzUzNTQsMzgxOTMzMi42NzMxNTU1MjY2LDI1NDM1NjguNzMxODE0OTI3LDM3NTc2NDkuMDAyMTAxOTQ2LDQxNzI3NzMuOTczNDcwNTE5MywzNzEyMDYwLjkyODEyOTkwNzcsODQ2MTU2Mi41Njg4NjQzMTIsNTM5NjA4LjQ2ODI4NjQ5NDcsNjc1Ni4zNjMxMDA4ODI4NjQKKzksV2VkIDIgRmViIDExLDI5NzI0Ni45MTUxODM4NzU1NCwyNjUzOTguMDk2MDA0Nzc2NjYsMTU0NDgzLjI5Mzc4NzY4NzMsMzE5MzU3LjU0Njg5NDQ2NjMzLDMyMTkwOS4xOTk4MjI3NTEzLDUyMDM3ODguMzk3NTQ1Mjc0LDU2NTQ5NTEuNDYwNjAzNDQzLDQ2MzQ3NzIuODE2NjI5NjMsNDAyNTc2Ny45MDgzMTc5NTksNTAzMzIyMy41NDUzODkxOTMsMTAyMjA5OS42ODcwNTg3ODkzLDU5NzUwMDYuMTAzMzYzMDM5LDExODI0ODguMTQ4NDIwNzM5NSwzMTM5MDUwLjg4Njg2OTUxNCwyODA1NzM5LjMzNDMwNDg1MzMsNjQ0MDgyMC4yNjc5NTY1MzQsNDY2NjExOS45Njg1NTMxODYsMTMxMjI4NS45ODgxOTgzMTA0LDM4MTkzNDcuOTUwNDg2MjE5LDI1NDM1NzguOTA2MDg5ODU0LDM3NTc2NjQuMDMyNjk3OTU0Nyw0MTcyNzkwLjY2NDU2NjQxMzUsMzcxMjA3NS43NzYzNzM2MjA2LDg0NjE1OTYuNDE1MTE0NTg3LDUzOTYxMC42MjY3MjAzNjc4LDY3NTYuMzkwMTI2MzM1MjY3CisxMCxUaHUgMyBGZWIgMTEsMjk3MjQ4LjEwNDE3MTUzNjMsMjY1Mzk5LjE1NzU5NzE2MDY3LDE1NDQ4My45MTE3MjA4NjI0LDMxOTM1OC44MjQzMjQ2NTM5LDMyMTkxMC40ODc0NTk1NTA1NSw1MjAzODA5LjIxMjY5ODg2NCw1NjU0OTc0LjA4MDQwOTI4Niw0NjM0NzkxLjM1NTcyMDg5Niw0MDI1Nzg0LjAxMTM4OTU5Miw1MDMzMjQzLjY3ODI4MzM3NiwxMDIyMTAzLjc3NTQ1NzUzNzYsNTk3NTAzMC4wMDMzODc0NTMsMTE4MjQ5Mi44NzgzNzMzMzI4LDMxMzkwNjMuNDQzMDczMDYxMywyODA1NzUwLjU1NzI2MjE5MDYsNjQ0MDg0Ni4wMzEyMzc2MDYsNDY2NjEzOC42MzMwMzMwNjEsMTMxMjI5MS4yMzczNDIyNjMsMzgxOTM2My4yMjc4NzgwMjEsMjU0MzU4OS4wODA0MDU0Nzg0LDM3NTc2NzkuMDYzMzU0MDg1Nyw0MTcyODA3LjM1NTcyOTA3MTQsMzcxMjA5MC42MjQ2NzY3MjYsODQ2MTYzMC4yNjE1MDAyNDUsNTM5NjEyLjc4NTE2Mjg3NDcsNjc1Ni40MTcxNTE4OTU3NzQKKzExLEZyaSA0IEZlYiAxMSwyOTcyNDkuMjkzMTYzOTUzLDI2NTQwMC4yMTkxOTM3OTEwNCwxNTQ0ODQuNTI5NjU2NTA5MzIsMzE5MzYwLjEwMTc1OTk1MTIsMzIxOTExLjc3NTEwMTUwMDQ1LDUyMDM4MzAuMDI3OTM1NzE1LDU2NTQ5OTYuNzAwMzA1NjA3LDQ2MzQ4MDkuODk0ODg2MzE5NSw0MDI1ODAwLjExNDUyNTYzNzYsNTAzMzI2My44MTEyNTgwODksMTAyMjEwNy44NjM4NzI2Mzk0LDU5NzUwNTMuOTAzNTA3NDY3LDExODI0OTcuNjA4MzQ0ODQ2NCwzMTM5MDc1Ljk5OTMyNjgzMzUsMjgwNTc2MS43ODAyNjQ0Miw2NDQwODcxLjc5NDYyMTczMSw0NjY2MTU3LjI5NzU4NzU5MywxMzEyMjk2LjQ4NjUwNzIxMjUsMzgxOTM3OC41MDUzMzA5MzIzLDI1NDM1OTkuMjU0NzYxOCwzNzU3Njk0LjA5NDA3MDMzOTYsNDE3MjgyNC4wNDY5NTg0OTUsMzcxMjEwNS40NzMwMzkyMjQ3LDg0NjE2NjQuMTA4MDIxMjkzLDUzOTYxNC45NDM2MTQwMTU0LDY3NTYuNDQ0MTc3NTY0MzgxCisxMixTYXQgNSBGZWIgMTEsMjk3MjUwLjQ4MjE2MTEyNTYsMjY1NDAxLjI4MDc5NDY2Nzg0LDE1NDQ4NS4xNDc1OTQ2Mjc5MiwzMTkzNjEuMzc5MjAwMzU4MjMsMzIxOTEzLjA2Mjc0ODYwMDg1LDUyMDM4NTAuODQzMjU1ODI3LDU2NTUwMTkuMzIwMjkyNDA5LDQ2MzQ4MjguNDM0MTI1ODk4LDQwMjU4MTYuMjE3NzI2MDk1Niw1MDMzMjgzLjk0NDMxMzMzMywxMDIyMTExLjk1MjMwNDA5NDksNTk3NTA3Ny44MDM3MjMwODEsMTE4MjUwMi4zMzgzMzUyNzk2LDMxMzkwODguNTU1NjMwODMwNiwyODA1NzczLjAwMzMxMTU0MSw2NDQwODk3LjU1ODEwODkwOSw0NjY2MTc1Ljk2MjIxNjc4MiwxMzEyMzAxLjczNTY5MzE1ODMsMzgxOTM5My43ODI4NDQ5NTQsMjU0MzYwOS40MjkxNTg4MiwzNzU3NzA5LjEyNDg0NjcxNSw0MTcyODQwLjczODI1NDY4MiwzNzEyMTIwLjMyMTQ2MTExNyw4NDYxNjk3Ljk1NDY3NzcyMyw1Mzk2MTcuMTAyMDczNzksNjc1Ni40NzEyMDMzNDEwOTE1CisxMyxTdW4gNiBGZWIgMTEsMjk3MjUxLjY3MTE2MzA1NDI0LDI2NTQwMi4zNDIzOTk3OTEsMTU0NDg1Ljc2NTUzNTIxODMyLDMxOTM2Mi42NTY2NDU4NzUxLDMyMTkxNC4zNTA0MDA4NTE4Niw1MjAzODcxLjY1ODY1OTIsNTY1NTA0MS45NDAzNjk2ODksNDYzNDg0Ni45NzM0Mzk2MzUsNDAyNTgzMi4zMjA5OTA5NjY2LDUwMzMzMDQuMDc3NDQ5MTEsMTAyMjExNi4wNDA3NTE5MDQxLDU5NzUxMDEuNzA0MDM0Mjk1LDExODI1MDcuMDY4MzQ0NjMyOSwzMTM5MTAxLjExMTk4NTA1MzQsMjgwNTc4NC4yMjY0MDM1NTM1LDY0NDA5MjMuMzIxNjk5MTQxNSw0NjY2MTk0LjYyNjkyMDYzMiwxMzEyMzA2Ljk4NDkwMDEwMTMsMzgxOTQwOS4wNjA0MjAwODU3LDI1NDM2MTkuNjAzNTk2NTM2LDM3NTc3MjQuMTU1NjgzMjE0Myw0MTcyODU3LjQyOTYxNzYzNTQsMzcxMjEzNS4xNjk5NDI0MDI3LDg0NjE3MzEuODAxNDY5NTQ0LDUzOTYxOS4yNjA1NDIxOTgyLDY3NTYuNDk4MjI5MjI1OTA1CisxNCxNb24gNyBGZWIgMTEsMjk3MjUyLjg2MDE2OTczODk0LDI2NTQwMy40MDQwMDkxNjA2NCwxNTQ0ODYuMzgzNDc4MjgwNDUsMzE5MzYzLjkzNDA5NjUwMTYsMzIxOTE1LjYzODA1ODI1MzQ1LDUyMDM4OTIuNDc0MTQ1ODM1LDU2NTUwNjQuNTYwNTM3NDUyLDQ2MzQ4NjUuNTEyODI3NTI4LDQwMjU4NDguNDI0MzIwMjUwMyw1MDMzMzI0LjIxMDY2NTQyMSwxMDIyMTIwLjEyOTIxNjA2Nyw1OTc1MTI1LjYwNDQ0MTExMSwxMTgyNTExLjc5ODM3MjkwNjQsMzEzOTExMy42NjgzODk1MDE1LDI4MDU3OTUuNDQ5NTQwNDU5Niw2NDQwOTQ5LjA4NTM5MjQyOSw0NjY2MjEzLjI5MTY5OTE0LDEzMTIzMTIuMjM0MTI4MDQxMiwzODE5NDI0LjMzODA1NjMyNzMsMjU0MzYyOS43NzgwNzQ5NTA0LDM3NTc3MzkuMTg2NTc5ODM3LDQxNzI4NzQuMTIxMDQ3MzU0MywzNzEyMTUwLjAxODQ4MzA4Myw4NDYxNzY1LjY0ODM5Njc0OSw1Mzk2MjEuNDE5MDE5MjQwNCw2NzU2LjUyNTI1NTIxODgyMgorMTUsVHVlIDggRmViIDExLDI5NzI1NC4wNDkxODExNzk2LDI2NTQwNC40NjU2MjI3NzY2NSwxNTQ0ODcuMDAxNDIzODE0MzYsMzE5MzY1LjIxMTU1MjIzODAzLDMyMTkxNi45MjU3MjA4MDU2NSw1MjAzOTEzLjI4OTcxNTczMTUsNTY1NTA4Ny4xODA3OTU2OTQsNDYzNDg4NC4wNTIyODk1OCw0MDI1ODY0LjUyNzcxMzk0NzUsNTAzMzM0NC4zNDM5NjIyNjQsMTAyMjEyNC4yMTc2OTY1ODQsNTk3NTE0OS41MDQ5NDM1MjgsMTE4MjUxNi41Mjg0MjAxLDMxMzkxMjYuMjI0ODQ0MTc0NSwyODA1ODA2LjY3MjcyMjI1NzcsNjQ0MDk3NC44NDkxODg3Nyw0NjY2MjMxLjk1NjU1MjMwNiwxMzEyMzE3LjQ4MzM3Njk3NzcsMzgxOTQzOS42MTU3NTM2NzksMjU0MzYzOS45NTI1OTQwNjIzLDM3NTc3NTQuMjE3NTM2NTgzNSw0MTcyODkwLjgxMjU0MzgzODMsMzcxMjE2NC44NjcwODMxNTcsODQ2MTc5OS40OTU0NTkzNDQsNTM5NjIzLjU3NzUwNDkxNjMsNjc1Ni41NTIyODEzMTk4NDMKKzE2LFdlZCA5IEZlYiAxMSwyOTcyNTUuMjM4MTk3Mzc2MzcsMjY1NDA1LjUyNzI0MDYzOTIsMTU0NDg3LjYxOTM3MTgyMDEsMzE5MzY2LjQ4OTAxMzA4NDI3LDMyMTkxOC4yMTMzODg1MDg2LDUyMDM5MzQuMTA1MzY4ODksNTY1NTEwOS44MDExNDQ0MTU1LDQ2MzQ5MDIuNTkxODI1Nzg5LDQwMjU4ODAuNjMxMTcyMDU4Niw1MDMzMzY0LjQ3NzMzOTYzOSwxMDIyMTI4LjMwNjE5MzQ1NDgsNTk3NTE3My40MDU1NDE1NDgsMTE4MjUyMS4yNTg0ODYyMTM2LDMxMzkxMzguNzgxMzQ5MDc0NiwyODA1ODE3Ljg5NTk0ODk0ODMsNjQ0MTAwMC42MTMwODgxNjYsNDY2NjI1MC42MjE0ODAxMzMsMTMxMjMyMi43MzI2NDY5MTEyLDM4MTk0NTQuODkzNTEyMTQyNCwyNTQzNjUwLjEyNzE1Mzg3MywzNzU3NzY5LjI0ODU1MzQ1MzUsNDE3MjkwNy41MDQxMDcwODgzLDM3MTIxNzkuNzE1NzQyNjI1Myw4NDYxODMzLjM0MjY1NzMyNiw1Mzk2MjUuNzM1OTk5MjI2Niw2NzU2LjU3OTMwNzUyODk2ODUKKzE3LFRodSAxMCBGZWIgMTEsMjk3MjU2LjQyNzIxODMyOTEsMjY1NDA2LjU4ODg2Mjc0ODIsMTU0NDg4LjIzNzMyMjI5NzU2LDMxOTM2Ny43NjY0NzkwNDAyNiwzMjE5MTkuNTAxMDYxMzYyMSw1MjAzOTU0LjkyMTEwNTMxMiw1NjU1MTMyLjQyMTU4MzYyMSw0NjM0OTIxLjEzMTQzNjE1Niw0MDI1ODk2LjczNDY5NDU4MzMsNTAzMzM4NC42MTA3OTc1NDksMTAyMjEzMi4zOTQ3MDY2Nzk2LDU5NzUxOTcuMzA2MjM1MTcsMTE4MjUyNS45ODg1NzEyNDc2LDMxMzkxNTEuMzM3OTA0MTk5NSwyODA1ODI5LjExOTIyMDUzMiw2NDQxMDI2LjM3NzA5MDYxOCw0NjY2MjY5LjI4NjQ4MjYxOSwxMzEyMzI3Ljk4MTkzNzg0MTcsMzgxOTQ3MC4xNzEzMzE3MTY3LDI1NDM2NjAuMzAxNzU0MzgxNSwzNzU3Nzg0LjI3OTYzMDQ0OCw0MTcyOTI0LjE5NTczNzEwNSwzNzEyMTk0LjU2NDQ2MTQ4ODMsODQ2MTg2Ny4xODk5OTA2OTYsNTM5NjI3Ljg5NDUwMjE3MDUsNjc1Ni42MDYzMzM4NDYxOTkKKzE4LEZyaSAxMSBGZWIgMTEsMjk3MjU3LjYxNjI0NDcyMzgsMjY1NDA3LjY1MDQ4OTcxNTg2LDE1NDQ4OC44NTUyNzU2MDMyNywzMTkzNjkuMDQzOTUwODQzMDQsMzIxOTIwLjc4ODc0MDEwOTA3LDUyMDM5NzUuNzM2OTM3MDAzLDU2NTUxNTUuMDQyMTI2MzU1LDQ2MzQ5MzkuNjcxMTMxMzc1LDQwMjU5MTIuODM4MjkwODEsNTAzMzQwNC43NDQzNDc2MDQsMTAyMjEzNi40ODMyMzg2MTY2LDU5NzUyMjEuMjA3MDM4MTgsMTE4MjUzMC43MTg2Nzc5Mjk4LDMxMzkxNjMuODk0NTE2NzkzLDI4MDU4NDAuMzQyNTQzNDgyLDY0NDEwNTIuMTQxMjEwOTg2LDQ2NjYyODcuOTUxNTcwNTMxLDEzMTIzMzMuMjMxMjUyNzk3MiwzODE5NDg1LjQ0OTIyMTIxNDMsMjU0MzY3MC40NzY0MDE0NTY2LDM3NTc3OTkuMzEwNzc2MjM2LDQxNzI5NDAuODg3NDQzNTE1LDM3MTIyMDkuNDEzMjQ4MzEwMyw4NDYxOTAxLjAzNzQ3ODk3OCw1Mzk2MzAuMDUzMDE0OTkzNCw2NzU2LjYzMzM2MDI4NzEyMworMTksU2F0IDEyIEZlYiAxMSwyOTcyNTguODA1Mjc2MDA3MTYsMjY1NDA4LjcxMjEyMTA0ODYsMTU0NDg5LjQ3MzIzMTQ0OTcyLDMxOTM3MC4zMjE0Mjc4OTgxMywzMjE5MjIuMDc2NDI0MTUwNCw1MjAzOTk2LjU1Mjg1NDI3OCw1NjU1MTc3LjY2Mjc2MjA5Miw0NjM0OTU4LjIxMDkwMjgyLDQwMjU5MjguOTQxOTUzMjQ3LDUwMzM0MjQuODc3OTgwNDQxLDEwMjIxNDAuNTcxNzg3MzYzNSw1OTc1MjQ1LjEwNzkzOTQ1OSwxMTgyNTM1LjQ0ODgwNDA2MDUsMzEzOTE3Ni40NTExODEwMTQ1LDI4MDU4NTEuNTY1OTEyNTc3Myw2NDQxMDc3LjkwNTQzNzI4NSw0NjY2MzA2LjYxNjczNTE4NCwxMzEyMzM4LjQ4MDU4OTMzNTMsMzgxOTUwMC43MjcxNzM1MjYzLDI1NDM2ODAuNjUxMDkwMzY1NCwzNzU3ODE0LjM0MTk4MzgyNSw0MTcyOTU3LjU3OTIxODU1NCwzNzEyMjI0LjI2MjA5NjE4MzQsODQ2MTkzNC44ODUxMDY0MjYsNTM5NjMyLjIxMTUzNjY5MTMsNjc1Ni42NjAzODY4MzkxNjYKKzIwLFN1biAxMyBGZWIgMTEsMjk3MjU5Ljk5NDMxMjQ1OTU0LDI2NTQwOS43NzM3NTY5OTY0NCwxNTQ0OTAuMDkxMTg5OTgyNiwzMTkzNzEuNTk4OTEwNTA2NywzMjE5MjMuMzY0MTEzNzg5NSw1MjA0MDE3LjM2ODg2MjA0Niw1NjU1MjAwLjI4MzQ5NjE2OSw0NjM0OTc2Ljc1MDc1NDg2Myw0MDI1OTQ1LjA0NTY4NTY5MSw1MDMzNDQ1LjAxMTcwMDgwMiwxMDIyMTQ0LjY2MDM1Mzg4NDYsNTk3NTI2OS4wMDg5NDQ2NDEsMTE4MjU0MC4xNzg5NTA3NTQsMzEzOTE4OS4wMDc4OTk4MjE3LDI4MDU4NjIuNzg5MzMwNDYzLDY0NDExMDMuNjY5Nzc1NTg3LDQ2NjYzMjUuMjgxOTgwOTc5LDEzMTIzNDMuNzI5OTQ4NjkzNywzODE5NTE2LjAwNTE5MjI1NiwyNTQzNjkwLjgyNTgyMzUwNjMsMzc1NzgyOS4zNzMyNTY3NTgzLDQxNzI5NzQuMjcxMDY2MTU1MywzNzEyMjM5LjExMTAwODYwODcsODQ2MTk2OC43MzI4ODEwMTcsNTM5NjM0LjM3MDA2Nzc3MjcsNjc1Ni42ODc0MTM1MDg2OTkKKzIxLE1vbiAxNCBGZWIgMTEsMjk3MjYxLjE4MzM1NDAwMDQsMjY1NDEwLjgzNTM5NzQ4NzUsMTU0NDkwLjcwOTE1MTE1OTk0LDMxOTM3Mi44NzYzOTg1ODIyLDMyMTkyNC42NTE4MDg5MzkzNSw1MjA0MDM4LjE4NDk1ODg5NCw1NjU1MjIyLjkwNDMyNzA0OSw0NjM0OTk1LjI5MDY4NjI0NSw0MDI1OTYxLjE0OTQ4NzA1LDUwMzM0NjUuMTQ1NTA3MzI0LDEwMjIxNDguNzQ4OTM3OTAyNCw1OTc1MjkyLjkxMDA1MjEwNywxMTgyNTQ0LjkwOTExNzY4OTYsMzEzOTIwMS41NjQ2NzIzNjUzLDI4MDU4NzQuMDEyNzk2Mzc4Nyw2NDQxMTI5LjQzNDIyNDE0NSw0NjY2MzQzLjk0NzMwNjY1MywxMzEyMzQ4Ljk3OTMzMDUxNjIsMzgxOTUzMS4yODMyNzYzNjc1LDI1NDM3MDEuMDAwNjAwMTg5LDM3NTc4NDQuNDA0NTk0MDE3Nyw0MTcyOTkwLjk2Mjk4NTE4ODcsMzcxMjI1My45NTk5ODQ1NzgsODQ2MjAwMi41ODA4MDA0NTksNTM5NjM2LjUyODYwODA5MTQsNjc1Ni43MTQ0NDAyOTM4OTQKKzIyLFR1ZSAxNSBGZWIgMTEsMjk3MjYyLjM3MjQwMDM4NzIsMjY1NDExLjg5NzA0MjMwNTQsMTU0NDkxLjMyNzExNDg1NTg3LDMxOTM3NC4xNTM4OTE4NjQyLDMyMTkyNS45Mzk1MDkzMzcxLDUyMDQwNTkuMDAxMTQwNTc5LDU2NTUyNDUuNTI1MjUwMTIxLDQ2MzUwMTMuODMwNjkzMTg5LDQwMjU5NzcuMjUzMzU0MDQxLDUwMzM0ODUuMjc5Mzk1OTAyNSwxMDIyMTUyLjgzNzUzODU4MzQsNTk3NTMxNi44MTEyNTY5ODIsMTE4MjU0OS42MzkzMDM5MDM2LDMxMzkyMTQuMTIxNDk2MDg0NiwyODA1ODg1LjIzNjMwODAzNjQsNjQ0MTE1NS4xOTg3Nzc3MDcsNDY2NjM2Mi42MTI3MDgzOTUsMTMxMjM1NC4yMjg3MzM3MzI4LDM4MTk1NDYuNTYxNDIyNzQ1LDI1NDM3MTEuMTc1NDE4MzM5NywzNzU3ODU5LjQzNTk5MjUzNzUsNDE3MzAwNy42NTQ5NzIyNTE1LDM3MTIyNjguODA5MDIxMDY3LDg0NjIwMzYuNDI4ODU3ODQ4LDUzOTYzOC42ODcxNTcyMDc0LDY3NTYuNzQxNDY3MTg5MjM3NQorMjMsV2VkIDE2IEZlYiAxMSwyOTcyNjMuNTYxNDUxNjIyNywyNjU0MTIuOTU4NjkxNDUyNCwxNTQ0OTEuOTQ1MDgxMDcxNywzMTkzNzUuNDMxMzkwMzU1NiwzMjE5MjcuMjI3MjE0OTg1OSw1MjA0MDc5LjgxNzQwNzE0OCw1NjU1MjY4LjE0NjI2NTQzNyw0NjM1MDMyLjM3MDc3NTczNCw0MDI1OTkzLjM1NzI4NjcwMDUsNTAzMzUwNS40MTMzNjY1ODMsMTAyMjE1Ni45MjYxNTU5MzcsNTk3NTM0MC43MTI1NTkzMjEsMTE4MjU1NC4zNjk1MDk0MDYyLDMxMzkyMjYuNjc4MzcxMDA4NSwyODA1ODk2LjQ1OTg2NTQ2MSw2NDQxMTgwLjk2MzQzNjMzMyw0NjY2MzgxLjI3ODE4NjI1NCwxMzEyMzU5LjQ3ODE1ODM1NTcsMzgxOTU2MS44Mzk2MzE0MjQ4LDI1NDM3MjEuMzUwMjc3OTgxNywzNzU3ODc0LjQ2NzQ1MjM1Myw0MTczMDI0LjM0NzAyNzM4MTQsMzcxMjI4My42NTgxMTgxMDY0LDg0NjIwNzAuMjc3MDUzMjYzLDUzOTY0MC44NDU3MTUxMjU0LDY3NTYuNzY4NDk0MTk0NzkKKzI0LFRodSAxNyBGZWIgMTEsMjk3MjY0Ljc1MDUwNzU5MjM0LDI2NTQxNC4wMjAzNDQ4MjYzLDE1NDQ5Mi41NjMwNDk3NDc5NiwzMTkzNzYuNzA4ODkzOTMzMywzMjE5MjguNTE0OTI1NzYxNiw1MjA0MTAwLjYzMzc1NjU5Nyw1NjU1MjkwLjc2NzM3MDgxOCw0NjM1MDUwLjkxMDkzMjA5Niw0MDI2MDA5LjQ2MTI4MzQ3Niw1MDMzNTI1LjU0NzQxNzQyNjUsMTAyMjE2MS4wMTQ3ODk1NjkyLDU5NzUzNjQuNjEzOTU2ODIzLDExODI1NTkuMDk5NzMzNzQxNywzMTM5MjM5LjIzNTI5NTkyNiwyODA1OTA3LjY4MzQ2NzU3MjYsNjQ0MTIwNi43MjgxOTc1NCw0NjY2Mzk5Ljk0MzczODQyNywxMzEyMzY0LjcyNzYwMzg3ODgsMzgxOTU3Ny4xMTc5MDA5MzMsMjU0MzczMS41MjUxNzgxMzQsMzc1Nzg4OS40OTg5NzIwMTQ1LDQxNzMwNDEuMDM5MTQ4OTY4NiwzNzEyMjk4LjUwNzI3NDI2NjMsODQ2MjEwNC4xMjUzODM0NDQsNTM5NjQzLjAwNDI4MTYzNzYsNjc1Ni43OTU1MjEzMDc5NDk1CisyNSxGcmkgMTggRmViIDExLDI5NzI2NS45Mzk1NjgyMDA0LDI2NTQxNS4wODIwMDIzNDE2LDE1NDQ5My4xODEwMjA4MzQ3NywzMTkzNzcuOTg2NDAyNDk0MjUsMzIxOTI5LjgwMjY0MTU2MDU2LDUyMDQxMjEuNDUwMTg3MjQ1LDU2NTUzMTMuMzg4NTY0NDQsNDYzNTA2OS40NTExNjA3OCw0MDI2MDI1LjU2NTM0MzA3Miw1MDMzNTQ1LjY4MTU0NjgwOSwxMDIyMTY1LjEwMzQzOTE1MDUsNTk3NTM4OC41MTU0NDc1NjEsMTE4MjU2My44Mjk5NzY1MjkzLDMxMzkyNTEuNzkyMjY5ODI3LDI4MDU5MTguOTA3MTEzNDY1LDY0NDEyMzIuNDkzMDU5MjUxLDQ2NjY0MTguNjA5MzYzNDEyNSwxMzEyMzY5Ljk3NzA2OTg3OTQsMzgxOTU5Mi4zOTYyMzAwNCwyNTQzNzQxLjcwMDExNzk3NzMsMzc1NzkwNC41MzA1NTAzMTI3LDQxNzMwNTcuNzMxMzM1NjcsMzcxMjMxMy4zNTY0ODgzNTE3LDg0NjIxMzcuOTczODQ1NjYzLDUzOTY0NS4xNjI4NTY1NzAxLDY3NTYuODIyNTQ4NTI2NTM4CisyNixTYXQgMTkgRmViIDExLDI5NzI2Ny4xMjg2MzMxMjE0LDI2NTQxNi4xNDM2NjM3MDc3LDE1NDQ5My43OTg5OTQxNjMxNywzMTkzNzkuMjYzOTE1Njg5MTQsMzIxOTMxLjA5MDM2MjAzMDI2LDUyMDQxNDIuMjY2NjkzNDAyLDU2NTUzMzYuMDA5ODQwMTE2LDQ2MzUwODcuOTkxNDU2NzE0LDQwMjYwNDEuNjY5NDYxMDgxMyw1MDMzNTY1LjgxNTc0OTIyMywxMDIyMTY5LjE5MjEwMzU2MjUsNTk3NTQxMi40MTcwMjQ5OTUsMTE4MjU2OC41NjAyMzY0NzQ3LDMxMzkyNjQuMzQ5Mjg5Mjc1MiwyODA1OTMwLjEzMDgwMDA2OSw2NDQxMjU4LjI1ODAxNDQxOSw0NjY2NDM3LjI3NTA1NjEwMywxMzEyMzc1LjIyNjU1NDkyMTEsMzgxOTYwNy42NzQ2MTQ1NjU0LDI1NDM3NTEuODc1MDk0NzI3LDM3NTc5MTkuNTYyMTgzMTM0LDQxNzMwNzQuNDIzNTgyOTE4LDM3MTIzMjguMjA1NzU2Mjk4LDg0NjIxNzEuODIyNDMwNjU3LDUzOTY0Ny4zMjE0MzkzMzIzLDY3NTYuODQ5NTc1ODQzMTYyCisyNyxTdW4gMjAgRmViIDExLDI5NzI2OC4zMTc3MDI5MjUzLDI2NTQxNy4yMDUzMjk0MzM2LDE1NDQ5NC40MTY5NzAwMjkyNCwzMTkzODAuNTQxNDM0MTMwMDUsMzIxOTMyLjM3ODA4Nzc4OCw1MjA0MTYzLjA4MzI4NTA0MSw1NjU1MzU4LjYzMTIwODY4NCw0NjM1MTA2LjUzMTgyODc4NCw0MDI2MDU3Ljc3MzY0NTIyMTMsNTAzMzU4NS45NTAwMzQzMTksMTAyMjE3My4yODA3ODQ3NjQ2LDU5NzU0MzYuMzE4NzAwNTgxLDExODI1NzMuMjkwNTE1ODQ1LDMxMzkyNzYuOTA2MzYwMjg4NiwyODA1OTQxLjM1NDUzMjc2MjQsNjQ0MTI4NC4wMjMwNzUzOSw0NjY2NDU1Ljk0MDgyNTQ0MywxMzEyMzgwLjQ3NjA2MTUxOTcsMzgxOTYyMi45NTMwNjE4MzAzLDI1NDM3NjIuMDUwMTEzMjYwNywzNzU3OTM0LjU5Mzg3NzY4Miw0MTczMDkxLjExNTg5ODcxMjUsMzcxMjM0My4wNTUwODUyMjI3LDg0NjIyMDUuNjcxMTU0NjUsNTM5NjQ5LjQ4MDAzMDk1ODgsNjc1Ni44NzY2MDMyNzA3NzMKKzI4LE1vbiAyMSBGZWIgMTEsMjk3MjY5LjUwNjc3NzU1OCwyNjU0MTguMjY2OTk5NDcwOSwxNTQ0OTUuMDM0OTQ4NDA0OSwzMTkzODEuODE4OTU3NzU4OTUsMzIxOTMzLjY2NTgxODc3NTMsNTIwNDE4My44OTk5NjEyMTYsNTY1NTM4MS4yNTI2NjkxMTgsNDYzNTEyNS4wNzIyNzYxNDcsNDAyNjA3My44Nzc4OTQ3NjA2LDUwMzM2MDYuMDg0NDAxMTgsMTAyMjE3Ny4zNjk0ODI1NzA0LDU5NzU0NjAuMjIwNDczMjMyLDExODI1NzguMDIwODE0NDI0OCwzMTM5Mjg5LjQ2MzQ4MjI5NiwyODA1OTUyLjU3ODMxMTAzNTQsNjQ0MTMwOS43ODgyNDA5OTE1LDQ2NjY0NzQuNjA2NjcwNTg0NSwxMzEyMzg1LjcyNTU4OTQzNjUsMzgxOTYzOC4yMzE1NzExNDE2LDI1NDM3NzIuMjI1MTczMTE1MywzNzU3OTQ5LjYyNTYzMzI3NCw0MTczMTA3LjgwODI4MjI5NSwzNzEyMzU3LjkwNDQ3NDQ1MDcsODQ2MjIzOS41MjAwMTYxMDQsNTM5NjUxLjYzODYzMTM1MTMsNjc1Ni45MDM2MzA4MDgxNDEKKzI5LFR1ZSAyMiBGZWIgMTEsMjk3MjcwLjY5NTg1NjYyNDksMjY1NDE5LjMyODY3MzQ2NzMsMTU0NDk1LjY1MjkyOTA4NTEzLDMxOTM4My4wOTY0ODYxNTIsMzIxOTM0Ljk1MzU1NDU2NDYsNTIwNDIwNC43MTY3MTUwMTksNTY1NTQwMy44NzQyMTM5MTIsNDYzNTE0My42MTI3OTI2NDksNDAyNjA4OS45ODIyMDQzNTQ0LDUwMzM2MjYuMjE4ODQzMTI1LDEwMjIxODEuNDU4MTk1NjIzOSw1OTc1NDg0LjEyMjMzNTAxNCwxMTgyNTgyLjc1MTEzMDY0NDcsMzEzOTMwMi4wMjA2NTExMzIsMjgwNTk2My44MDIxMzExNjQsNjQ0MTMzNS41NTM1MDI2NzYsNDY2NjQ5My4yNzI1ODUzMzQsMTMxMjM5MC45NzUxMzY5MjkyLDM4MTk2NTMuNTEwMTM3NDI5LDI1NDM3ODIuNDAwMjcwOTE0LDM3NTc5NjQuNjU3NDQ0OTIxMyw0MTczMTI0LjUwMDcyODEyNDgsMzcxMjM3Mi43NTM5MTkwNTQzLDg0NjIyNzMuMzY5MDAzNzg0LDUzOTY1My43OTcyMzk3OTM1LDY3NTYuOTMwNjU4NDQ2Mjk4CiszMCxXZWQgMjMgRmViIDExLDI5NzI3MS44ODQ5NDA1MDA5NSwyNjU0MjAuMzkwMzUxNzU3NDcsMTU0NDk2LjI3MDkxMjI2NDY4LDMxOTM4NC4zNzQwMTk3MTE4NiwzMjE5MzYuMjQxMjk1NTYyMSw1MjA0MjI1LjUzMzU1MzAxNCw1NjU1NDI2LjQ5NTg1MDE5Myw0NjM1MTYyLjE1MzM4NDEzNiw0MDI2MTA2LjA4NjU3OTA4LDUwMzM2NDYuMzUzMzY2NSwxMDIyMTg1LjU0NjkyNTIxMzUsNTk3NTUwOC4wMjQyOTM0NjUsMTE4MjU4Ny40ODE0NjU5OTUzLDMxMzkzMTQuNTc3ODcwNzUxNywyODA1OTc1LjAyNTk5NjY4Niw2NDQxMzYxLjMxODg2ODU2MzUsNDY2NjUxMS45Mzg1NzU1NzUsMTMxMjM5Ni4yMjQ3MDU2NTM1LDM4MTk2NjguNzg4NzY1NTA3OCwyNTQzNzkyLjU3NTQwOTg2NDUsMzc1Nzk3OS42ODkzMTczNjMzLDQxNzMxNDEuMTkzMjQxNDY1NCwzNzEyMzg3LjYwMzQyMzcxMzcsODQ2MjMwNy4yMTgxMjgzNjMsNTM5NjU1Ljk1NTg1Njk2NTcsNjc1Ni45NTc2ODYxOTM3NjYKKzMxLFRodSAyNCBGZWIgMTEsMjk3MjczLjA3NDAyOTEyOTkzLDI2NTQyMS40NTIwMzQyOTE0NiwxNTQ0OTYuODg4ODk3OTE0NDcsMzE5Mzg1LjY1MTU1ODM3ODIsMzIxOTM3LjUyOTA0MTcwNjksNTIwNDI0Ni4zNTA0NzQyMTcsNTY1NTQ0OS4xMTc1NzY5LDQ2MzUxODAuNjk0MDQ5NzM0LDQwMjYxMjIuMTkxMDE4MTc4Niw1MDMzNjY2LjQ4Nzk3MDM1OCwxMDIyMTg5LjYzNTY3MTE0NjcsNTk3NTUzMS45MjYzNDc0NTcsMTE4MjU5Mi4yMTE4MjAyNTQ2LDMxMzkzMjcuMTM1MTQwNTY2LDI4MDU5ODYuMjQ5OTA3MDcxNyw2NDQxMzg3LjA4NDMzNzQ0LDQ2NjY1MzAuNjA0NjQwNDI4LDEzMTI0MDEuNDc0Mjk1MzYxLDM4MTk2ODQuMDY3NDU0NjU5LDI1NDM4MDIuNzUwNTg5NDg3LDM3NTc5OTQuNzIxMjQ5ODksNDE3MzE1Ny44ODU4MjE1Mjk3LDM3MTI0MDIuNDUyOTg3NzMwNSw4NDYyMzQxLjA2NzM4ODI0Miw1Mzk2NTguMTE0NDgyNzY2Niw2NzU2Ljk4NDcxNDA0OTI2OQorMzIsRnJpIDI1IEZlYiAxMSwyOTcyNzQuMjYzMTIyNTc4OCwyNjU0MjIuNTEzNzIxMTI4OCwxNTQ0OTcuNTA2ODg2MDY5MSwzMTkzODYuOTI5MTAyMjIyOSwzMjE5MzguODE2NzkzMDcxNDYsNTIwNDI2Ny4xNjc0Nzk3OTksNTY1NTQ3MS43MzkzOTUzMDEsNDYzNTE5OS4yMzQ3OTA0ODM1LDQwMjYxMzguMjk1NTIyNTU1LDUwMzM2ODYuNjIyNjU1ODI5LDEwMjIxOTMuNzI0NDMzNjUzLDU5NzU1NTUuODI4NDk4MzM1LDExODI1OTYuOTQyMTkzNjg3NCwzMTM5MzM5LjY5MjQ2MTI4MDYsMjgwNTk5Ny40NzM4NjI5NTE2LDY0NDE0MTIuODQ5OTEwNzU1LDQ2NjY1NDkuMjcwNzgwOTQzLDEzMTI0MDYuNzIzOTA2MzQ3MywzODE5Njk5LjM0NjIwNTc0MDIsMjU0MzgxMi45MjU4MTAzNTM0LDM3NTgwMDkuNzUzMjQzMzQ3LDQxNzMxNzQuNTc4NDY5MjU1NSwzNzEyNDE3LjMwMjYxMTkzOCw4NDYyMzc0LjkxNjc4NTMyNiw1Mzk2NjAuMjczMTE3MzE3MSw2NzU3LjAxMTc0MjAxNDMyNwpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Qb3B1bGF0aW9uR3Jvd3RoU0VJUl9GRF9SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vUl8wLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvUG9wdWxhdGlvbkdyb3d0aFNFSVJfRkRfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL1JfMC5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmMyNDQwMQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvUG9wdWxhdGlvbkdyb3d0aFNFSVJfRkRfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL1JfMC5jc3YKQEAgLTAsMCArMSBAQAoraXRlcmF0aW9uLHRpbWUsCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1BvcHVsYXRpb25Hcm93dGhTRUlSX0ZEX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9SXzEuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Qb3B1bGF0aW9uR3Jvd3RoU0VJUl9GRF9SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vUl8xLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYzI0NDAxCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Qb3B1bGF0aW9uR3Jvd3RoU0VJUl9GRF9SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vUl8xLmNzdgpAQCAtMCwwICsxIEBACitpdGVyYXRpb24sdGltZSwKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvUG9wdWxhdGlvbkdyb3d0aFNFSVJfRkRfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL1JfMi5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1BvcHVsYXRpb25Hcm93dGhTRUlSX0ZEX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9SXzIuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdjZmE0ODMKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1BvcHVsYXRpb25Hcm93dGhTRUlSX0ZEX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9SXzIuY3N2CkBAIC0wLDAgKzEsMzMgQEAKK2l0ZXJhdGlvbix0aW1lLEVHLUZSRy1HMjEwMDAxLEVHLUZSRy1HMjEwMDAyLEVHLUZSRy1HMjEwMDAzLEVHLUZSRy1HMjEwMDA0LEVHLUZSRy1HMjEwMDA1LEVHLUxPRS1HMjQwMDAxLEVHLUxPRS1HMjQwMDAyLEVHLUxPRS1HMjQwMDAzLEVHLUxPRS1HMjQwMDA0LEVHLUxPRS1HMjQwMDA1LEVHLUxPRS1HMjQwMDA2LEVHLUxPRS1HMjQwMDA3LEVHLUxPRS1HMjQwMDA4LEVHLUxPRS1HMjQwMDA5LEVHLVVQRS1HMjkwMDAxLEVHLVVQRS1HMjkwMDAyLEVHLVVQRS1HMjkwMDAzLEVHLVVQRS1HMjkwMDA0LEVHLVVQRS1HMjkwMDA1LEVHLVVQRS1HMjkwMDA2LEVHLVVQRS1HMjkwMDA3LEVHLVVQRS1HMjkwMDA4LEVHLVVSRy1HMzAwMDAxLEVHLVVSRy1HMzAwMDAyLEVHLVVSRy1HMzAwMDAzLEVHLVVSRy1HMzAwMDA0CisxLFR1ZSAyNSBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMixXZWQgMjYgSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMzAyMTk5NTE5NTY1MDU5OCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzMsVGh1IDI3IEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjUxMzcxODAyOTI5NDIzMiwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzQsRnJpIDI4IEphbiAxMSw2Ljk2MDIzNzc3MzQ5MTQ3OUUtNSwwLjAsMC4wLDAuMDExNTgwNDIzNzQ4Njk2MDI2LDAuMCwwLjAwNDE4MzY4NTQzODE2ODE3NCwwLjAsMC4wLDAuMDAxNzk2NjY0MjU3NzQ4NTU1LDAuMDAxMjg0MDc4NjY4MDMwNTYyOSwwLjAsMC4wLDAuMCwwLjAsNi44MTQ2NDg4MDYxNzYxNjFFLTUsMS42NjYzNDUzOTExMTU5MzE0LDAuMDExNzIyMzEzMzEyNzc4NTg0LDAuMCwwLjAsMC4wMDQ2NTY4MDQ0OTA3NDI1OTksMC4wLDAuMCwwLjAsMC4wMDcyMTg3NTQ1ODI3NjUxMjksMC4wMDQyNjAzNzk2NTIyOTkyMjEsMC4wCis1LFNhdCAyOSBKYW4gMTEsMi4wODc5NzM4ODc3Njc5MjY3RS00LDAuMCwwLjAsMC4wMzQ3Mzk2NDc1MzcyNTQ3MjUsMC4wLDAuMDEyNTUwNDcwNTc4OTIyODc2LDAuMCwwLjAsMC4wMDUzODk3NDEyMzU1NzIzMTIsMC4wMDM4NTIwNTYyMzExNjcyMzcsMC4wLDAuMCwwLjAsMC4wLDIuMDQ0Mjk5MjM2NjczMDEzNEUtNCwzLjc3ODk4NDMzMTI2NzExOSwwLjAzNTE2NTI5ODY0MjY4OTgzNiwwLjAsMC4wLDAuMDEzOTY5NzYxNDY5ODY2ODUxLDAuMCwwLjAsMC4wLDAuMDIxNjU1MjUzMDg2NzMwMjI2LDAuMDEyNzgwNTQyMzA3NTM1MzQsMC4wCis2LFN1biAzMCBKYW4gMTEsOS4xMTI4ODc3Mjk0NDMyOTFFLTQsMS42NjIxNTI0NDE4NzQ4NjE3RS00LDEuMTkzNTAyMDYwNzYxNDAwMUUtNCwwLjEyMjgwNzgwMzQ2NDEyMDIxLDQuMzI2NDMxMzcwMTE1NjkxRS02LDAuMDUxOTA4MjY4NzgzNDEzNDYsMS4yMjc0MzIzMzUyOTI4MDY1RS01LDYuNjk0MTEwOTYzMjQ5NDQ4RS00LDAuMDIyNjI4MTc2MTY3OTM1NCwwLjAxNzEwNzc2NTg3NTg0MDI2Miw1Ljc0MDQ0MzM3Nzc2NjU5RS00LDUuNzc1MTI3MDI0MDc5ODUzRS00LDAuMCwyLjQzODk1MTQxNDU2Njc1OThFLTQsMC4wMDIwNTQ3NjM5OTQ3NzkxNTI1LDkuODc3MDQxMzkzMzM2MTMyLDAuMTUwNzU4MzIzMDM1ODcwOTIsMy42MjQ0Njk0OTU5NjU4MTkzRS05LDEuMzc5MTQ2NzgyMjI4NDkyMUUtNCwwLjA1OTMxMzMzNzA4NTg1NDY0NCwzLjYyODQ4MjY4NTUzNzc1OThFLTksMy41MDM5NzkyMzA3NDM1OTM0RS05LDQuNjE3MTU5NzE1ODEwMzQ0NUUtNCwwLjA5Mjk1MjMwNjUwMzIwODIxLDAuMDQ5NDUwNzA3MTkzMjE2Mzg0LDAuMAorNyxNb24gMzEgSmFuIDExLDAuMDAyODIzMTc0NjI3NjY1MjY3OCw3LjE0NjkwNjQwNjEzNzk2RS00LDUuMTMxODA4MTU1NTA3Mzc2RS00LDAuMzQ1ODMyNTY0NzA4MjM2ODcsMS44NjAyNzQ2MTQwNjg3NjYzRS01LDAuMTU3MzY1NDI2MTM1NjMyOTgsNS4yNzc3MDEyNzkwOTc2MjZFLTUsMC4wMDI4NzgzMjcxMzQzODQyNjYsMC4wNjkwMjYzNDk4Mzk5ODgzNywwLjA1MzM1NTE0OTA3ODUwMTI5LDAuMDAyNDY4MjcwMDgzNDM5MzYzLDAuMDAyNDgzMTgzMzQwODMyNTUyLDAuMCwwLjAwMTA0ODY5Nzg4ODgyNDM3OTUsMC4wMDc3NjI3ODU5OTIxMzEzMTksMjMuOTQ4MTk3MTQ1NDk0NzM1LDAuNDYzNzgxNDg0NTM4MzUyMSwxLjU1ODQ0NTc2ODkxMDgwOTdFLTgsNS45MzAwNDE1MjE3MTgzMjNFLTQsMC4xODE3NjEyNTE5Nzk0MjgyNywxLjU2MDE3MTM1NjE0OTIyNTVFLTgsMS41MDY2Mzc0ODUxNzcyOTE4RS04LDAuMDAxOTg1MjgxNzA1NDI0NjA0OCwwLjI4NjA5MDEyNTE0NjQwOTEsMC4xNDU1OTE2NDUxOTY4NDgzNiwwLjAKKzgsVHVlIDEgRmViIDExLDAuMDA5Mjg3NzIyNzI4MTI1Njc0LDAuMDAzMTEwNjcxNTI0MTM4NDU0NiwwLjAwMjQ1MjkzODgwMjA3MjI1NywwLjk3NDU4NDU0MTc5NDI1OTIsOS44MDA0MTYzNzYzMTU3NThFLTUsMC40OTY5OTM4Nzc2MTYyMTA2LDIuODA1MzU0NDI5ODY5MDM5NEUtNCwwLjAxNDM3MTY1NjA5MjAyODcxMSwwLjIyMDg2NzEwMTc1OTM0NjksMC4xNzc3MDMxNTYwNDQ1NTIyMiwwLjAxMTY5MjcwOTQzNzE4OTY2OSwwLjAxMjg0NjYyMjQwMzk4ODY2NCwyLjk1MDU4OTk3NjE3MTUyMzNFLTgsMC4wMDUyMzkyOTk1OTc4ODUxMTYsMC4wMzQyOTMyMzk5MjQwNDk4MSw1OS45OTA1Nzk3NjUzNzA4OTYsMS41MDU3MTA1MTkyNTk5MjA3LDEuNzQ3MzYyMDUzMzQwODM2NkUtNiwwLjAwMzAxNTQxMTE5NjE2MDc0NzMsMC41ODU4MzA2NzA1NDY5NjE2LDcuOTA3MzgyMTkzNTExMjQ2RS03LDIuMTM3MTE2OTk5MDc5MjI4MkUtNSwwLjAwOTgxOTg3ODQ0NzM2MTYxNywwLjkyOTY2NzgwNDA5NjQ3OTYsMC40Mzc3MDkwODE2NDIwMzE1NCw2LjAzOTU2MTUzMDgzNTEyN0UtNworOSxXZWQgMiBGZWIgMTEsMC4wMjc5MzM2OTQ5OTQ0NTk5MzMsMC4wMTA4MDg4MjM4NzAyOTAzNzMsMC4wMDg5ODk0MzgyMDg3NjU4NzgsMi41OTc2MTYzMjI5NzA0MDEsMy43Njc0MTg4MjgzNzg4NjFFLTQsMS40NDk5Njc4Nzk1NzE0NjU0LDAuMDAxMDgyNzkzMzYzMjU3NTQ0MSwwLjA1Mzg1NjAzOTQ5MTM3OTA0LDAuNjUwOTM5NjU0NjE0NTY1NCwwLjUzOTE3ODkzMjAzNzA5NzIsMC4wNDI2NDcyNDE1MjE3OTQ0MzYsMC4wNDg5NzA5MDI5NDM3MjQ5NSwxLjY1MjI0Nzc2OTY4Njc0NjFFLTcsMC4wMTk2MzkzNjMyMzExMjY3NTMsMC4xMjIyMjkyODA3MTgxNTQyOCwxNDcuODE3NDM2MjUyNjE0OTgsNC40ODUwMzc4NTA4ODcyMzgsOS42NDA1OTk5MTU1NzY4NjJFLTYsMC4wMTE0MDA4NTI4MjA1NzIyMDcsMS43MzU2MzYxMTg3ODMwNDU4LDQuMjgzNjE0NzI3MTQ5MzUxRS02LDEuMTk1MzMyMjEwNzk1OTY2N0UtNCwwLjAzNjYyNjk5OTk2MTQ1NTE2NiwyLjc3MTA1Mzg1MTA3MzUxNCwxLjIyOTEyNjE5NDc0OTc4NDUsMy4zODE5ODUzMjc5NTIzMTNFLTYKKzEwLFRodSAzIEZlYiAxMSwwLjA4NDA5MzkwMzA1ODA2ODc0LDAuMDM2MjUzMDA0MjMzOTQwMTM2LDAuMDMyMTgwMDA4OTI1NDI0MjUsNi44NDEzNjc5NzE5OTA1MDgsMC4wMDE0NTE0MDI3NTkyNDg4NDA1LDQuMjA5NzY1Mjk2ODczNTA3LDAuMDA0MjA2NjY5NjcwMzc0MTM4LDAuMTk5NDkzNjgyNTQzNjI4LDEuOTE0NzAzNTQ5NjI3MTg2MywxLjYzOTc5ODM4NjE5MDA3NDcsMC4xNTE3MTk3NTI0Mjk1MzExNywwLjE4NjIxMzk1MjIxODI2NDcsOS45NDQ0NTE1MDgxNzU3M0UtNywwLjA3Mjc2MjA3MDI5NDAyNDIzLDAuNDM2MzM5NDYzNDk3ODU5MSwzNjcuMDExMjM3NzYyOTMzMiwxMy4zNDc5MDcxMzAyMTI0NTksNS4wNDQ5NzYyMDA0MDU3MDlFLTUsMC4wNDI4MzE5OTE4MDY0NzE3OCw1LjEzMjY2Mzg2ODE0NzIsMi4yMjQwNzM2MDEzMTA0MDVFLTUsNi45MzkyODU3MTI0MzM1ODRFLTQsMC4xMzQ3NDYxNjMzMjA0NDU1Myw4LjI1MzcxODE4MTA3MTkzOSwzLjQxODcxNDY2MzExOTY5NCwxLjgwMzM2NDgyNzc3NDkyNjdFLTUKKzExLEZyaSA0IEZlYiAxMSwwLjI0NTM3MjA2OTg2MDgzOTE1LDAuMTEzNzQ1NDA0NDg1MDU4NzgsMC4xMDY0MzUyOTE2Mzg1MzUxNCwxNy42NjkwOTQ3MjczNjM0NSwwLjAwNTA5MjIwMTM3ODI0MjIwOCwxMS44ODQ0OTMwNzA3NjgxMTQsMC4wMTQ4NTk5NTIzNDExMjA2NDgsMC42Nzg2NzAzNzIyMDQ0Njk2LDUuNDczMDg2NjY2MjUyNjU5LDQuODI3NjIyMTgxNjcwNzIyLDAuNDk5MzA4NDEyNTU5MzU1NjUsMC42NDY3NjMyMTI1MzU3ODYzLDQuNDg1MjE4MzI0ODkxOTJFLTYsMC4yNDc1NTc4OTQxNDE5NTY5LDEuNDUxNTQ1OTA1Nzk2Mzk1LDkwNy45NjgzODA5NjMwODA2LDM4LjU0NjUyMzQzODY2MzUsMi4wOTg1OTI4MzQ0MTA4NzQ1RS00LDAuMTQ3Mzc5ODE2NzE5MDI1NCwxNC43MzcyNjY0MDg0NjI0NzQsOS4yMjY2MzkyNTkyOTE0MTVFLTUsMC4wMDMwNjkyNTMxMjQxMjAzOTUsMC40NTU4OTY5NzQxNTAwNzExLDIzLjg1MzQxMzk4MDEwNjQ3NCw5LjI3OTI1NTgxNzkxMzYxNSw3LjU3ODkzNzA3MTM2NDg5OEUtNQorMTIsU2F0IDUgRmViIDExLDAuNzEwMTIyNjE4ODgzOTcyNCwwLjM0NzU4NDI5NDU5NjQwMDQ0LDAuMzQyMTQwMzc3MjYzODU2MjcsNDUuMjM5MDkzNDg0OTExNjIsMC4wMTc0NjA2MDM5MDIyMjUwNywzMy4yMjcwMTAwOTU3NjY5ODUsMC4wNTEzOTQ0MTQ0ODg5NDM2NCwyLjI1MDM0OTA3MTQ4OTM5MDMsMTUuNTE0NjQ4Mjg2MzAwMTg1LDE0LjA5ODc4MzE2MTY4MzYxNywxLjU5NzM5NTUxMTgyMDM0MzYsMi4xOTMzMjU3NTMwODA5ODU4LDEuOTQ5MTQ5MTI3ODkxMTg5M0UtNSwwLjgyMDgwMjE4MjYzMTM3NTYsNC43MzcwMjkyNzkzOTA1MDcsMjI1MC4zMjMxODI2NDg5OTYsMTEwLjM1ODEzNzIzNTMwODQsOC4yMDkyNzM1NzU3MDgyOTJFLTQsMC40OTQ5MjA1OTI2NjQ2MjE3LDQxLjk0MjEwNzU2MjM5MDg2LDMuNjEwOTcyNzUyMTMwODg2NUUtNCwwLjAxMjk2NDUwNjc5OTgyNTU5NSwxLjUwMjgwNTY0NTUwOTM5NjMsNjguMzQ4NDYzMTAzNDA0OTUsMjQuOTMyMTcyOTc3NDI1NDY2LDIuOTgwOTk0MjE1MDE1ODc0NUUtNAorMTMsU3VuIDYgRmViIDExLDIuMDI1NzE3MTMwNDIzNTMsMS4wMzIxMDk1MzI1Mzk4MDA2LDEuMDYxOTY0ODYyMDk5MDExOSwxMTQuODE3NTcxNTMyNzc4MzcsMC4wNTc1MjQ4MTYxODgzMjkxODUsOTEuNjY2ODQwMzEwMzY5MiwwLjE3MDczNjY1NDY2MDQyNjA2LDcuMTkxMjgzNTIwNDQ1MDAyLDQzLjQwNjMzNjI5ODA2MTgxLDQwLjU2MTkwOTUyNTgzNjc4LDQuOTM3ODY0NDM3MDQwNzA3LDcuMTU0MTk4MTY4MTU1NDk3LDcuNzA2NDcxODYyODUyMTk2RS01LDIuNjIyNTYxMzc1Mzg2NjI2NCwxNC45NzM3NTA0OTc3NzcwNzcsNTU3Mi4wMzI2NDMzOTM0MjQsMzExLjU1MDY4OTI2NTA3ODQsMC4wMDI5NzAxODE3MjMzNjQyMTA3LDEuNjAwMzMwNTYzMTIxNjI1NiwxMTcuNzMzMDM2NDQ2Mjk0OTUsMC4wMDEzMDg1NTUzNzUwMDgxODk3LDAuMDUwMDU0NDcyNDcwMDg4NDg1LDQuNzc2NTg0NDUzNTQ3ODM1LDE5My4xMTU3MzE5Mjc2NzE1LDY2LjIxMTMyODU1MzQyNzU4LDAuMDAxMDgwOTYzNTU4MTYzNDg3NQorMTQsTW9uIDcgRmViIDExLDUuNzMzOTM5MDMyMjgwNTY1LDMuMDEyNTc4NjE4MDUwNTQ1NCwzLjIyNzM4MDAyMjg3NDE3MSwyODkuODA4MzI1NDA0MzY1NywwLjE4NTYxNjEyMjk1MjY4MjA3LDI1MC44Nzc0NzMwODg3NzM0OCwwLjU1NTk0Njg4NzM2OTE3MDYsMjIuNTEwMTcwMDg4MTg0MDYsMTIwLjU3MTI4NTc2MjE2MzkxLDExNS43NzA5MzE0MDQ0MDY1NSwxNC45NTM2Nzk1MTgxNzkxNDUsMjIuODU0NzAzNzk4NzIzNTgsMi45MzI4MDY3NjQyMTc0MDVFLTQsOC4yMDY2OTQzMTA4NTQ5OCw0Ni41MDg0MjczMjQ0ODQyNiwxMzc5NS4xMTcxODI3OTM0OTIsODcyLjYyNDY5ODI4NTQ4NzYsMC4wMTAzMTU5OTkzNTQ3NjkzNTQsNS4wNjk2ODg0NTYxMTYyOTEsMzI3LjkwMTY3MDg2NTc4NTYsMC4wMDQ1NTg2MTQxODIyMzk1NTksMC4xODU2MzA0MjYyOTU5NzU5NSwxNC44NzEzNDI4MTE2MzI1NjIsNTQxLjQwMjYxMTc4MTkyNiwxNzQuNTM3NDM2MDg3NDEyNDYsMC4wMDM3NDgzNDc0ODIyOTQ1NAorMTUsVHVlIDggRmViIDExLDE2LjA5NDI3MzQ4MTMyODUxOCw4LjY1NzgyNjE2Njg0ODgyMyw5LjYxNDc3MjUwNjkzOTM1NSw3MjcuNzEwMTIyNDg1MTQzMiwwLjU4NTczNDIxMzAyMjcyNjQsNjgxLjE4NTA2NzIyNDQ2MzYsMS43NzA0OTM4MDQxNTYyNDc3LDY5LjAxNTg1MjU3ODc5MTQsMzMyLjQxNjQ5Njc3Mjg1NDEsMzI3LjUzOTIxMDk5NjM1MTEzLDQ0LjQyMDE1NzgxNTY2OTQxLDcxLjQzNzU4MDQ2MjgzMjA5LDAuMDAxMDY2NjgyNjQ4MDMyMTAxNSwyNS4xNTE2MzE3NDU2MzA3MywxNDEuODEzMjk4OTQ4Mzg0NTYsMzQwOTEuMDk0NDA4NjI5NDMsMjQyMy42Mzc5NDkwMTQzODEzLDAuMDM0NDc1NDM0MTAxNzE3NzQsMTUuNzI0NDMwNzExNjI2NzQxLDkwNS43ODU4NjI1NjE3OTgyLDAuMDE1MjkxNTg3MTQyMTU3NzcyLDAuNjU4OTMxMTQ0MDc2NjUxNSw0NS4zNjA0MTc0MzA5MTk5MjQsMTUwNS4zMzU2MDY3MjE1ODY0LDQ1Ni44ODU5NzMxNTA3NzQsMC4wMTI0NzQ0MjgxNzI1ODA4NTUKKzE2LFdlZCA5IEZlYiAxMSw0NC44OTY1Nzc1NzQwNTMwMywyNC42MDA5Mzk5MjQxODM2MTQsMjguMjE5MDI3NjgxNzcxMTczLDE4MTcuOTQ2MDMzNzU2NTIxLDEuODE5Mjc5ODU1MDM4OTA3LDE4MzguMzQyNDM2OTI3NjU2OCw1LjU1MTcyNzcxNTI3Nzg0NCwyMDguNDI5NTAwNTY5ODIsOTExLjUwMTg3MjYxNTkyOTQsOTIwLjczNjAxMzMzNDgwMzksMTMwLjA4MDc0OTg0NzI1NjM2LDIxOS44MjA0MDkwNTAyNDg1NCwwLjAwMzc2OTYyNDQ0NjE3NzA3LDc1LjkyMDE2MjU3MzI3ODYsNDI2LjU5OTA1NjYzNDA0MDcsODM4ODQuMTA0MzYzOTQ3NTQsNjY4Ni45MjQ3MTkzMTU5OTcsMC4xMTIxNzQ4NzYyOTMzMTk4Miw0OC4wMzQ2MjQ3NjIwMDcwNywyNDg2LjI3NTgwMjg4NzAzNywwLjA0OTk4NDYzMzU2MjU4NDc2LDIuMjcyMDk5NDE2MTM5NDY1LDEzNi4yOTQ0NTI2MjE5ODE3LDQxNTkuNTQwMDA0MDAxNjIyLDExODkuMDQwODE0MTIzNzQxMywwLjA0MDMxMDMyNjI1MDM4MjAzCisxNyxUaHUgMTAgRmViIDExLDEyNC41MDIxODM0ODE3MDY2NSw2OS4yMTU0MjE3NjU1ODczNCw4MS43MjkzNTYzNzYwMjA4Nyw0NTA2LjQ3NTA4NDc1MTYzMiw1LjU2ODI0NDM3NTk0NzI2Niw0OTMyLjQ4NjEyNzAyMzE4MywxNy4xNTcyMjIwOTk4OTA3Myw2MjAuOTM2OTg4MjgxNTY3NCwyNDg2LjQxMDcyODIxNzAyLDI1NzIuMTIzMDcxNzU0MjYxLDM3Ni4xNzE4MDk3OTY4ODU4LDY2Ni43MjgyOTg0MDQ0NTA1LDAuMDEyOTYyNzk3ODQwODg1NDQxLDIyNi4wNDQ1MDcyMzkwNjQ3OSwxMjY3LjE5NzYwNjMxNTk4OSwyMDQwNzkuNDA1ODM1NTY5ODcsMTgzMTYuNDEyODgxMjg2NDczLDAuMzU2NjMxMzY4OTQzODUxNiwxNDQuNzA3MTgzNzU3OTgwMzIsNjc3OS42MzYxMDEzMzQzNSwwLjE1OTc0MzgxNzIwOTUzMSw3LjYyODY4MjEyNzc4NjQsNDA0LjAyODI2ODE4NjkwMjEsMTE0MjIuODU2NTE2MTczMjA0LDMwNzQuMjQzMzgwODQ4MTI5LDAuMTI3MDE2MTY3MjQyMzk4MTcKKzE4LEZyaSAxMSBGZWIgMTEsMzk4LjA2Njk4NDQwMTQ5Mzc2LDIyNC40NjAzMzMyNTc4NjMxNywyNzMuODYyMjEyODc1OTg0LDEyMjIxLjE5NDE3MDE1MTkyLDIwLjA1MDUxNjM4NjQ2MzU2MywxNTA5OS4yOTU5OTU3Mjk5MjgsNjIuNjA0NTg5ODEwMjE2NTUsMjE2MC4yNzYxOTcyNTYxNTUyLDc3ODcuNjI2Mzg5MzQ3NzcyLDgyOTcuNzU3OTI3NjUyNzU2LDEyNTkuOTQwNjE2NjIzMTM2NywyMzcyLjU4ODAxNzk5NTgwODUsMC4wNTM3Mjg2NzI0MzA2MzkxNzUsNzg1LjgyNzgyNjEwNDc5MDIsNDM5My4wNzY2MTk1NDQ1NjksNTI2NjQ2LjQ4OTM2MjU4NDQsNTcxNTkuMjY1MjU0MTgzMDYsMS4zMzcwOTcxNTA5NTgxMDAyLDUxMC43MzE5NjQxMDIyOTI2LDIxMTAzLjAzMDY4NDAxMDIyLDAuNjAzNzM3NDE1MzYxODU2MiwzMC42Mjk4MjkwNDg3Mzc0ODQsMTM5Ni43Mjg2NzU3MDc3MTcyLDM1OTg4LjQ1ODE1NTMzNjksODkwMS4yOTYwMTk5NjYxNDUsMC40NjkxMTU2NjA4NzU3OTkxCisxOSxTYXQgMTIgRmViIDExLDEyODguOTkxMjQwNTM3NDc2NCw3MzQuOTg3MTMyMDA1MzgwMyw5MjIuMTMwMDkxMTEzMTM5OCwzMDc2MS43Nzg2MTY1MDMsNzMuMDYyMjk5NDc2Mjc3OTcsNDY1MTUuNDI4NDAzNjM1OTgsMjMxLjQ2NzY3MzM0MjcxNTc2LDc1OTguOTI4NTcyNTAwNjcsMjQ2NjMuMDA2ODU1NDQ0MjM3LDI3MDgzLjIzNzUyNzg3MjI3LDQyNTQuOTk5NDU5NjI0OTU2LDg1MzQuNDE5NDczOTk0Nzg1LDAuMjIzNDU5NDk3OTAzNzM1NDgsMjc2NC4wMTAzNjExNjU1NzUsMTUzMzAuOTU0MDU0NjIyODY0LDExNjg3MDIuOTg3MDM3MzQ1MywxNzQxNTAuNTMzNTQxNTUwMTYsNS4wNDIxMTY3Nzc4NTczLDE4MjMuMzAzNDI3NjM1MjE2LDY0OTkwLjY2OTYwMzIxODY4LDIuMjk3OTMxNDE5MjU2NjI0MywxMjMuMzYzODM2MTQ2MzUxODcsNDg4Mi44NTU0NTEwOTQ2MjUsMTEzNjc0LjkwNTc0NzM5NzUsMjQ5OTcuNjU1NTEwNjM1MTM3LDEuNzM2NjQ5MDQ3MzYzMzA2MworMjAsU3VuIDEzIEZlYiAxMSw0NDAwLjMwODk1NjAyOTQ1NiwyNTIwLjQ1MjM4MDk1MzQ0MzUsMzIzOC43MDc5MzE4NzU0NDEzLDY1MTMyLjI1Nzk5ODUxNDA4NCwyODcuOTgxNjM4MzA5NjEyOSwxNDc0NzQuNzk3MjIwNDMyMzIsOTMwLjMwODgzMDI2MzY3ODgsMjg2NzAuMzE1NDYyNzAwMDQ4LDgxNjA4LjAyMzU1OTk2NzA3LDkyODY0LjMwOTgwNzgzODg3LDE1MTUyLjEwMjk0Mzc3MjAzNywzMjk5Ny44ODQwMjQ0NzU4OCwxLjAxMjcwMjM5MDY3MzgyMjIsMTA0NjYuNDUyNjQ2MDczMjg3LDU2MDc3LjU2NTM4Njk2NTk4LDIwMTg2ODEuNjY5NzYyNjg3OCw0OTEzNDUuMTg3OTY2Njk4NSwyMC41NzAyMTA4NjQ4Mzg3Miw2OTk4LjU5MDUxNzMwMDYxNSwxOTM1MzQuMzM1NDAzNDg3MSw5LjQ4NTM4Mjk0OTQ1NjQwOCw1MzkuMzUwODM1NTcyNzU0NSwxODMyMy4wMDAxMTU4NzIyMDgsMzYzODQ1LjYwOTQzMDg0MzIsNjQzMzUuMzUzNTQ3MTk0Mzc2LDYuOTA4ODIxMzgzODcxNTMzCisyMSxNb24gMTQgRmViIDExLDE0NzkxLjgyNzY1NzIwNTQ1MSw4MjUxLjI0MjQxNzkwNjA2LDEwNjkxLjA1MTE4ODE1NjQ4NSwxMDYyODkuNzYzNDE0OTc1ODgsMTIyMS4wODcyMTkxMjI3MjYsNDMzOTcxLjk4MTAwMDQ5NTgsNDA4MS4zMTgwNTUxMzk0NzI2LDExMjEyMS4wMjMyNjQ3NDA2NSwyNTkzOTguODA2MTQxNDg4NSwzMDc0MDYuMDk0ODkwNjg2NDUsNTI1NzMuMTAzNzcwMDI1NjY0LDEzMjc4MS4zNjc1MjgwNDY5NSw1LjA1OTM0NjIxNjUyNTk1Miw0MTkyNS43NzUyNzE1Nzg2MywxOTI0NzIuODQwNzM5OTIyOTgsMjg0NTk5Ni4zNTM1MzEwNSwxMDM0NTEyLjQ5MjkwMzUxMTMsOTEuMTg5Mjk2MDM4OTMyMzEsMjgyNDYuMzc4NzA1NzYyMTUsNDU1MDgzLjc4ODczODYzMzIsNDIuNzA2Mzk0MDgxNzQ1MDQ2LDI1NzguODcyNzQxMDAzODMsNzE4MzcuNTM1OTA1OTI5NjksMTAxMTI0MS4yMDUwMzUwMDgzLDEyNzQ2My4yNDU2NzY5MDcxOSwyOS4zNjk1NjM3MDI5Nzc3NDMKKzIyLFR1ZSAxNSBGZWIgMTEsMzkyMzkuNjcxODQ4MDk0MDQsMjE0MTQuMjI3NTAzMTU1NDQ1LDI1ODQxLjAwNDI4MTI3MTk2MiwxNDU5MjMuMDA5Mjg1MDAyODYsNDk3My40ODM2NzA1NjIwNzU1LDk2NTQzMi42MzE4NzE5ODYsMTc3NzkuOTg5NTQ1MDg2NDM1LDM2OTcyNC40MjU3OTgwNzMxLDYzMzU4OS4zODQwODA3ODg0LDc3MTY2My42Mjg1ODczMzk5LDEzOTQwNy4xOTQ0NzA4OTA4Myw0NTExODUuODQ2OTUxNzMwNywyNS41MjU4MTg2MzcxNjk3ODgsMTUxNjMwLjQ3OTc0OTUyMDYsNDcxNjU5LjM0NjY0OTcwMzIsMzU3Njg4NS45ODQzNzcwMDgsMTYzNTkyNy4xODYxOTU0MDA1LDQwMC40ODgzODAzNjg4ODYwNiwxMDUxODMuNzgwMDEwNTU4MDcsNzc2ODQ1LjIzMjgzMzk3MywxOTEuNDUxNTgxOTI0NjYzMywxMjI0NC4zNDg0MTA5MzQ4NjgsMjQ1MDg5LjYxNDU0NzIyMDkzLDIwMDI5NzMuMDI2MzQ3OTkzNiwxOTY0MTEuOTIyMjg5Mjc5MjYsMTE3LjQzNTQ5MzEzODI3OTA3CisyMyxXZWQgMTYgRmViIDExLDc0NTUwLjU0MTk1ODcwNzMzLDQzNjAyLjcyNzAzODM0NzkxLDQ1MDY2LjE1NTYxMjM2MTY5LDE4MDk1OS4xMzUyNzk2NzM2MiwxNzY0Mi4xMzg5OTU3NjMwMzgsMTYxNDQwNS4zMzg5NDQxNDE4LDczNzg5LjkxNTg4NDk1OTcsODUzNzIxLjM0ODg1MTEwNzEsMTEyNzE4Ny42Nzk5OTEzMjQsMTM4OTE0NC44ODE4NzAyOTY4LDI2MjA0OS4yMjYzMDAzMTc0LDEwNjYxNDcuOTg2MDczODUyLDEyOS40OTM1MDkzOTExNzksNDEzMTUwLjI5OTc2MDIxNzMsODIyODY1LjEwODAwMjI4OTQsNDE5MTM4MC42MjM2MDQwMDc1LDIyMDUyNDQuNzAwODQ2MDEzLDE3MTUuOTE1NzI2OTg1NDI3NywzMjQ4OTMuODY5ODM3OTM1MiwxMDk1MTkxLjgyOTg0NjgyMSw4NDUuMjMyMDkyNjQzOTg5NCw1NTQzNS4yNTA0MDU4OTQxNyw2MDMyNzcuMTA5OTY2MzQ2MSwzMDc5OTM3Ljk1NTEyNTMzMTQsMjYxMjg0LjIzMTkxMDkyOTkzLDM5My4yMDU5MzY5NTAwMTA1CisyNCxUaHUgMTcgRmViIDExLDExMjEwMi4zNTE1NDcxMTQ1NSw3MjY2Ny4zMTU5ODQ0MTM0Niw2NDQxOC4xOTg5MDQxMjc0MzYsMjEwNTg2LjgwNzE4NjUwNzk0LDQ1NjY1LjU5NTk3MzAyMjk2NiwyMjU4MDM0LjI2MjkyNDU3NjYsMjYyNTk2LjEzNTA3ODY2MjUsMTQzNTE3Ni42NDc4OTYzMDk0LDE2MzIzMDEuMzMxMzM0MzY3NiwyMDIyNjk2LjkwODMyMjA4MTQsMzkxMjM0Ljc3NDgyMzU5NzgsMTgxNDQyMS4zMTg4ODU1MzYyLDYyMy4wNDA0NTU2MzQ0NzI0LDc4NTY4Mi4xNzYxNzYwNTE4LDExNzQ5MTMuNzYxOTk2OTM1OCw0Njk0NTU4LjIwNTA3ODc4NiwyNzA2MjgwLjg1ODU5NzE5Miw2ODk4Ljc3NTk1Mjc5NjI2MSw3MTk3MzIuOTM3NzY0OTU1OSwxMzgyMDQ0Ljc3NjU4NjM5ODIsMzU1MC4xMTA2NTQ5MDA4OTcsMjA4MjA0LjU5MjI0MjQ1ODQsMTA2MTEwMS42ODg5MDc2MTAzLDQwOTQ4OTYuMDY2MDA2MDQ0LDMxODE4My4yODIzMTc3NzIzLDk2OC43MTIwNDkxNTIzNTMzCisyNSxGcmkgMTggRmViIDExLDE0NzM3Ni44NzU1OTE0MDM5MiwxMDQyMjAuMjQxNTcwODE1MzcsODIxMDQuODIxNjQzMjA0NjksMjM0OTg1LjY1NTc1MDM5ODcsODQyODQuMDcxMzE2NDIwNjEsMjg0MTY5OS42ODc5ODgwNjk0LDcwNTg5OC42NzY2MzY5NzI4LDIwMTE5NzYuNzk1NDg2MzU2LDIwOTc4NjcuODQ5NDQ0NzExNiwyNjA3NDI0LjA0NDY2ODUxMyw1MTIwMjcuOTMxODA3ODE5NSwyNTYwNjYxLjQxMzIzMTE0MywyNzAzLjEzOTg2MzM4ODg0MzQsMTE4MzEyNS40MTAxOTc0Mjk4LDE0OTU5NjQuNTc0NDY3MzcxMiw1MDk5NjI1LjE4MDY3Mzc1NCwzMTI5OTc2LjIyNDg0NjYxMTMsMjUwOTcuMjY0NzM3ODU1OTM4LDExOTU3ODAuMTgxMTU2Njg2NSwxNjI4MjUyLjIwNjg1MzI5MTcsMTM4MzAuMzEzMjc0ODQ3Mzc2LDU1ODc5MS43NjE5MjQ2MzM2LDE1MjczNzAuODAwNjM1NTgxOCw0OTg5Njc0LjYwMDg5Mjk0NywzNjYxOTQuNTY4NzQyMzg4OCwxNzY0LjI0ODk1NTMzMzc3MgorMjYsU2F0IDE5IEZlYiAxMSwxNzg3NDAuNTY1NDcwMjg3MTQsMTM0NzA2LjM1OTgxODM1Njc1LDk3NTgxLjAyNTMxODkxODEyLDI1NDkzOC4yMjg5NDQ2MjIxNSwxMjUyNTMuMjg5MTUxMTg0OTYsMzM1MDAzNS43MDA3NTMxNzYsMTM2MTkwNy42MjIyODA3NjksMjU0MDM1NS44ODQzNTAyMiwyNTA3Mjk0LjY5NTU5NjA4MTcsMzEyMjA0NS4wMjA3MzgyNDQsNjE5MTQ1Ljc5MTk4MTE4MzgsMzI0NjE1Ny41NzAyNjc2ODUsOTYzNC4xNTk4NjUwNTUyNDYsMTU2MDYxMy40NjM1MTE3NTIyLDE3NzY1MjUuOTc4OTc1ODIyLDU0MjU0ODguNzYzMDA2NzAxLDM0ODI4NzQuMzk4NzUyMzIyLDc0OTU4Ljc5OTc2Nzg3NzgzLDE2NzMyNDcuMTQzODYwNzc0OCwxODM1MzY3LjQ4NDE1NTE1MTUsNDYwMTIuMjM5NDY2MTc5MDMsMTA1NTU5OC40NDgyODA4NDcsMTk2MDMxNS40NTM2NzI4MDU2LDU3NTU1MDUuNjU2OTMzOTIzLDQwNjEyNC40MTU5NTcyNTMxLDI2MTYuODE0MDExNTM2Njg2CisyNyxTdW4gMjAgRmViIDExLDIwNDk2Ni44MzE3MzI4MjI4LDE2MTc3MC42NTk4MzQ4ODU5NywxMTAzNjIuNTAwMjc5MzQzNzIsMjcwNTA4LjE2NTgyNTk2NDEsMTYzNzU2LjQyMDc5NTc0NjgyLDM3NjgzMDkuMDI3MTIyMzExLDIwOTQ0MjQuMzcwNTIwMTk3NiwyOTkyMTIzLjU4MTY2OTg4ODUsMjg0Njc2MS45Nzg5ODI1NjEsMzU0ODk5Mi4wMjk2MDk3OTUsNzA4NTM2LjM1OTMyNzQ4MjMsMzgzMzQ0Mi40NTY1NzM0MDgsMzMwNTguOTEyOTM3NTM1NTA0LDE4OTE2OTguMTYzMjk5ODA0NiwyMDA3OTk4LjEwMzk2Nzk1NTMsNTY3NjAyNi4zOTI3MDYyNSwzNzYyNzIwLjQwNzI4MTcxNywxODk1NjMuOTYxODI5MTM1NSwyMTA3MTkxLjc3NDcwNzMzMSwyMDAxMDA3LjY2NjgzMzY5MTgsMTQ4ODY4LjM0NDYxMTEwMzMsMTU5Njc2MC45NjgyMjcwMDUzLDIzMzQxMDAuMDczMDc2MjU4NCw2Mzc2ODU1LjM1OTYzOTIyNSw0Mzc3NDguMjIwNzY1NjU5OCwzNDIyLjg0MzI3NDU0ODY1MTYKKzI4LE1vbiAyMSBGZWIgMTEsMjI2MTk4Ljk4OTA5MDAwMDQ1LDE4NDUxNC40ODE5Njk5NDAxOSwxMjA2MjUuNDMyNDEwMzUxNDgsMjgyNTIyLjU5NTEwNzkyNjMsMTk3MTc3LjM3NTcyNzIwNzgsNDEwMzMzMC45MzUyMTY2MTcsMjc4NDk1NC4wNTc2Mjk1MDEsMzM2MzEzMS4wNjM3NjQ2NDksMzEyMDA1Mi4yNzk1NjYzODcsMzg5Mjg0Ny41NzU5NDg2MTkzLDc4MDgwOC43NzU4NzQzNzY2LDQzMTYzNTMuNTg5NzUyOTg3LDk5MTQ4LjM5MjQyMDQyMTk0LDIxNjc5MTQuMzEzMzMyNTU0LDIxOTM3MzEuOTAxNzg0NDM1LDU4NjcyMjEuNjU5Nzg1NjYzLDM5ODExOTUuNzc3NzEzMzY1LDM1MjU1Ni4zOTQ0MDIwMiwyNDc2ODg3LjYyNzIzMDEwMTMsMjEzMTEwNC42OTU3NjEwODcsNDEzMzExLjM0MDgyNTYwODUsMjEwMTUxMy4wMjk1NTM5Njg1LDI2NDI5MzguNDQwODM3NzgzLDY4Njk3OTUuMjIxMjIyNTY4LDQ2MjQxNC4zNjA4ODQzODQ5NSw0MTI0LjczNzYwODA1ODQ2NAorMjksVHVlIDIyIEZlYiAxMSwyNDMzMjIuMTk3MDE0NTI4NjUsMjAzMzA4Ljk3MzkxNjc4MjEsMTI4ODU2LjMwMzAyOTU0OTk4LDI5MTg5MS40NjIwODE5OTkwNSwyMjUzNTEuMjMwMjkyNjc0NDcsNDM3MTU2My4yMjQ3OTY1MjIsMzM5NDc1Mi4yNzE2MzIzMDksMzY2NTE5Ny4yOTA0OTkzMSwzMzM5NjIxLjU3NzcxMDI0MSw0MTY5MTg2LjkzMTA4ODI4MjMsODM5MDQyLjU2NDgyODQ5NzksNDcwOTg1Ni43ODI0NzY5NDYsMjIwMzU3LjQ3MDU3NzA4NTQyLDIzOTUxMTMuMDM4OTExMDExNSwyMzQyNjIwLjU1ODYzNTY5OCw2MDE1MTAyLjE0NDMwMDQ3LDQxNTMwMDUuNDc3NjMxNjk3LDUyMzE2NC43MTAyNDQ1Nzc4LDI3ODUwMTMuNTEwNjkzMzg1MywyMjMzODUzLjQ2NTI4ODc1MSw4NDAyMjUuNjkxNjgxMDI1MywyNTQ0NzQwLjg5OTg1MDYyNDYsMjg5NTM4OS45NTYxMjI3MjIsNzI2MTg2My44NzY4NDczMzA1LDQ4MTc5OS4yMjg0NzU3NjY4LDQ3MTcuNTc2MTY3OTEzNjQyCiszMCxXZWQgMjMgRmViIDExLDI1NjYyMy4yOTY3MTI0NjUyLDIxODIwOC4xNDcwMzYwNDI3NiwxMzUyMTkuNDkwMzY2NzUyNTgsMjk4OTU2LjYwNTcwNDE1MjY3LDI0ODA0NS41Nzc4NzY5ODUsNDU3ODYyNi45MDU2NTA1ODMsMzkwMzUwNy4yMjg0NjgwMjIzLDM5MDE3MzMuMjc5NjQ3NTk2NiwzNTA5NjI4LjMwNzg3MTkxMyw0MzgzMTk5LjcyNDI0NDQyMyw4ODQyNDMuMjk2OTI1MTM0OCw1MDE4MjA4LjQyOTc4NDM4NywzNzQyMDQuNTI2MjE3OTg0NCwyNTc0NTM5LjkxNjk4NDc2MiwyNDU3Njc4LjAwMzQ3MDkyNzUsNjEyNTc4Ni4zNzAzOTEzNCw0MjgzNTU3LjI4Nzg2MjI1NCw2ODE2NTAuNjQwMDA4NjY5OCwzMDMwOTc1LjA3MDk5MTg2NSwyMzEyMjI3Ljc0NDgyMDQ3MjMsMTMzMzg4Ni45MjczMDk5MzY4LDI5MTMwMDUuMDcwNzgyOSwzMDkzNzMyLjY3MTk5MDM4NCw3NTYyNzg3Ljc0NjcyNTc1OSw0OTY1MjAuNDcyNjkwNzgyNiw1MTk1LjgzODQ0MzY1MTIwMTUKKzMxLFRodSAyNCBGZWIgMTEsMjY2ODQ2LjY1Mzc3MjcxODg2LDIyOTgzMi4wNjE5ODIwOTM4NCwxNDAwOTIuODA1MzgyOTg1NzcsMzA0MjY0Ljg4NjMyNTk2MDUsMjY1OTUzLjM3ODYwNTg5ODc2LDQ3MzcwMzMuNzIxMjY4NTgxLDQzMTQ2NzkuNzQxOTUxNTU1LDQwODQ2MjUuMTc2MDAwOTU5MiwzNjM5OTgwLjAxNzc3MDM3NDcsNDU0NzMyMS45MjA2OTQxNjYsOTE4OTY1LjE1ODA3MjY1MjksNTI1Njc1MS4zNzM3MTUwNTUsNTI2ODE3LjIwNjgyNTkyMDcsMjcxNDEzOC40OTM5NjQzNTAzLDI1NDU3NjkuMDQ4MjM1NjI0LDYyMDg0NTEuOTg5MjA2Mzg3LDQzODIyMjkuODUzOTMxODIzLDgxODM3MC4yMjU4MDE5OTAzLDMyMjM4MjEuMTk2MTU0OTM5NSwyMzcxNjM5LjgwNzM1MDk0NiwxODA2MzYwLjI4NzIyOTIyMDgsMzIwOTgyMC42NTg0NDU4NjAzLDMyNDc0NjguMDM1NzYwMzExNCw3NzkxOTk1LjIzNDkxMjIwMiw1MDc2NDEuOTI0Mzg1OTE5NDcsNTU3My42Mjk5NzgzNjkzNzIKKzMyLEZyaSAyNSBGZWIgMTEsMjc0NTkwLjE2NTMwNjk3MTksMjM4NzQwLjMwNTQ4MzcyNzQyLDE0Mzc3My40NjQ5NDE4NTAwOCwzMDgyMTEuOTI0MjA4NTQ1OCwyNzk3OTcuNDEzODE4Njg0Nyw0ODU2NTY3LjM5Nzc2MzQxNiw0NjM4MjUxLjI1MzkyNTg2OCw0MjIzODA5LjM3MzAxNDUzMSwzNzM4NTIxLjQxOTUzNDA2LDQ2NzE0MTAuMjA4MDIwOTk2LDk0NTI1Mi42NTQ4OTY3MDIzLDU0MzgzNjAuNDY0NTM1MDk4NSw2NjMxMTYuMDc0MDg1NjA5OCwyODIwODkzLjM0MjgxOTQzNiwyNjEyMjg1LjA2MzA0OTQyMTYsNjI2OTYxMS4yNTM1MDU4NTEsNDQ1NTk1OS4zOTgyODg1OCw5MzA5MDcuNTg3ODA4ODkzLDMzNzIxNzguMjExNjYwNjE1NiwyNDE2MTQxLjM2OTUwOTI5MTQsMjIyMDI4NS44MzQwMjc3NTI3LDM0NDI5MzMuMjM0NTI0Mzg5NywzMzY0Njg4LjE5MDk3MzE3MDYsNzk2NDM0Ni40NzQxNzMwNDgsNTE1OTQ4Ljk1NzczMjI2MDYzLDU4NjUuOTI2MTI1MDQ4Mzk2CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1BvcHVsYXRpb25Hcm93dGhTRUlSX0ZEX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9TXzAuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Qb3B1bGF0aW9uR3Jvd3RoU0VJUl9GRF9SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vU18wLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYzI0NDAxCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Qb3B1bGF0aW9uR3Jvd3RoU0VJUl9GRF9SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vU18wLmNzdgpAQCAtMCwwICsxIEBACitpdGVyYXRpb24sdGltZSwKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvUG9wdWxhdGlvbkdyb3d0aFNFSVJfRkRfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL1NfMS5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1BvcHVsYXRpb25Hcm93dGhTRUlSX0ZEX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9TXzEuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJjMjQ0MDEKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1BvcHVsYXRpb25Hcm93dGhTRUlSX0ZEX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9TXzEuY3N2CkBAIC0wLDAgKzEgQEAKK2l0ZXJhdGlvbix0aW1lLApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Qb3B1bGF0aW9uR3Jvd3RoU0VJUl9GRF9SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vU18yLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvUG9wdWxhdGlvbkdyb3d0aFNFSVJfRkRfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL1NfMi5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjMyYTk4ZAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvUG9wdWxhdGlvbkdyb3d0aFNFSVJfRkRfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL1NfMi5jc3YKQEAgLTAsMCArMSwzMyBAQAoraXRlcmF0aW9uLHRpbWUsRUctRlJHLUcyMTAwMDEsRUctRlJHLUcyMTAwMDIsRUctRlJHLUcyMTAwMDMsRUctRlJHLUcyMTAwMDQsRUctRlJHLUcyMTAwMDUsRUctTE9FLUcyNDAwMDEsRUctTE9FLUcyNDAwMDIsRUctTE9FLUcyNDAwMDMsRUctTE9FLUcyNDAwMDQsRUctTE9FLUcyNDAwMDUsRUctTE9FLUcyNDAwMDYsRUctTE9FLUcyNDAwMDcsRUctTE9FLUcyNDAwMDgsRUctTE9FLUcyNDAwMDksRUctVVBFLUcyOTAwMDEsRUctVVBFLUcyOTAwMDIsRUctVVBFLUcyOTAwMDMsRUctVVBFLUcyOTAwMDQsRUctVVBFLUcyOTAwMDUsRUctVVBFLUcyOTAwMDYsRUctVVBFLUcyOTAwMDcsRUctVVBFLUcyOTAwMDgsRUctVVJHLUczMDAwMDEsRUctVVJHLUczMDAwMDIsRUctVVJHLUczMDAwMDMsRUctVVJHLUczMDAwMDQKKzEsVHVlIDI1IEphbiAxMSwyOTcyMzcuNDAzNDUzODAxNSwyNjUzODkuNjAzNDE4NTcxNzYsMTU0NDc4LjM1MDQxMTI2NzI1LDMxOTM0Ny4zMjc2MzY5MTMxNiwzMjE4OTguODk4OTEzNzc0Miw1MjAzNjIxLjg3OTMxMzg5NSw1NjU0NzcwLjUwNTQxMzkxMyw0NjM0NjI0LjUwNjU2OTA5LDQwMjU2MzkuMDg2MDYzNzA1LDUwMzMwNjIuNDg1MTM0ODM5LDEwMjIwNjYuOTgwNDU3NTI1LDU5NzQ4MTQuOTA2NjA5MjksMTE4MjQ1MC4zMDk0ODEwOTM0LDMxMzg5NTAuNDM5MDQ5MjAzNCwyODA1NjQ5LjU1MjI2MjIzOTYsNjQ0MDYxMy4xNTgwODYwOSw0NjY1OTcwLjY1NTQwMTg0MiwxMzEyMjQzLjk5NTgwMjU1NDgsMzgxOTIyNS43MzM1NTE3MTgzLDI1NDM0OTcuNTEzMDI5OTQyLDM3NTc1NDMuNzg5NjEzMjk0LDQxNzI2NTcuMTM3NjY4NjQyNywzNzExOTU2Ljk5MjA4NjkwNDYsODQ2MTMyNS42NDg5MDMxMTcsNTM5NTkzLjM1OTQ5MTEyNDQsNjc1Ni4xNzM5MjU3NDI4NTM1CisyLFdlZCAyNiBKYW4gMTEsMjk3MjM4LjU5MTgyMzM5NTUsMjY1MzkwLjY2NDk3Njk4NTQsMTU0NDc4Ljk2ODMyNDY2ODksMzE5MzQ4LjUwODUyMjY5MjUsMzIxOTAwLjE4NjUwOTM2OTgsNTIwMzY0Mi42NTg5MzczNjcsNTY1NDc5My4xMjQ0OTU5MzUsNDYzNDY0My4wNDUwNjcxMTcsNDAyNTY1NS4xNzM2NDc4NDcsNTAzMzA4Mi42MDY2ODQxMjQsMTAyMjA3MS4wNjg3MjU0NDY4LDU5NzQ4MzguODA1ODY4OTE3LDExODI0NTUuMDM5MjgyMzMxMiwzMTM4OTYyLjk5NDg1MDk1OTYsMjgwNTY2MC43NzQyOTI1NjEsNjQ0MDYzMC41NDkwNTgxMzYsNDY2NTk4OS4yMjE1OTg1MTksMTMxMjI0OS4yNDQ3Nzg1MzgsMzgxOTI0MS4wMTA0NTQ2NTI0LDI1NDM1MDcuNjQ4MjEzMjg5NywzNzU3NTU4LjgxOTc4ODQ1MjIsNDE3MjY3My44MjgyOTcxOTMsMzcxMTk3MS44Mzk5MTQ4NzMsODQ2MTM1OS40MzQwNDk0MjQsNTM5NTk1LjQ4MjM2MTM5ODYsNjc1Ni4yMDA5NTA0Mzg1NTcKKzMsVGh1IDI3IEphbiAxMSwyOTcyMzkuNzgwMzcxNzkxODYsMjY1MzkxLjcyNjUzOTY0NTM0LDE1NDQ3OS41ODYyNDA1NDIyLDMxOTM0OS43MTgzNzE0MTY0LDMyMTkwMS40NzQxMTAxMTU4NCw1MjAzNjYzLjQ0OTEwNTc1MSw1NjU0ODE1Ljc0MzY2ODQzMiw0NjM0NjYxLjU4MzYzOTI5Nyw0MDI1NjcxLjI2NTc4OTEwOCw1MDMzMTAyLjczMTUyNDg4NCwxMDIyMDc1LjE1NzAwOTcyMTcsNTk3NDg2Mi43MDUyMjQxNDEsMTE4MjQ1OS43NjkxMDI0ODg0LDMxMzg5NzUuNTUwNzAyOTM5LDI4MDU2NzEuOTk2NTM4MTc5NSw2NDQwNjUwLjQ1MjE4MjgxNDUsNDY2NjAwNy44MTcxODI0NzUsMTMxMjI1NC40OTM3NzU1MTcsMzgxOTI1Ni4yODc0MTg2OTQyLDI1NDM1MTcuNzk1MDgyMDYxNiwzNzU3NTczLjg1MDAyMzczMTYsNDE3MjY5MC41MTg5OTI1MDY0LDM3MTE5ODYuNjg3ODAyMjMyMyw4NDYxMzkzLjIzNzM4MjIxLDUzOTU5Ny42MTU4OTM3NDIzLDY3NTYuMjI3OTc1MjQyMzU4Cis0LEZyaSAyOCBKYW4gMTEsMjk3MjQwLjk2NDc0MTEwNTMsMjY1MzkyLjc4NjcyMTQyNDUsMTU0NDgwLjIwMzE2NDMwMjEzLDMxOTM1MC40NzIyMjA2MzU4NiwzMjE5MDIuNzYxNjc5OTU4NjcsNTIwMzY4NC4wMTE3NzIxMTIsNTY1NDgzOC4zNjI4MjkxMjEsNDYzNDY4MC4xMTY3MDcyMDYsNDAyNTY4Ny4yNTc0NTU5MDksNTAzMzEyMi43NzY3OTYxMDYsMTAyMjA3OS4yNDA1MjY2NDcsNTk3NDg4Ni41OTk4NjIzNTYsMTE4MjQ2NC40OTg5NDE1NjUsMzEzODk4OC4xMDQ1NzI2ODIsMjgwNTY4My4yMDUwNDQ1NTY0LDY0NDA2NDQuMjQ5NjM0MTMxLDQ2NjYwMjUuNzMwODY3NTUyLDEzMTIyNTkuNzQyNzkzNDYxOCwzODE5MjcxLjU2MzI5NDU1NSwyNTQzNTI3LjY3NTg3ODI2MDMsMzc1NzU4OC44ODAzMTkxMDEzLDQxNzI3MDcuMjA5NzU0NTUzLDM3MTIwMDEuNTMxOTAxMzUwMiw4NDYxNDI2LjYxOTkzNzUzNCw1Mzk1OTkuNTQ2MDg2ODE4NCw2NzU2LjI1NTAwMDE1NDI1OTUKKzUsU2F0IDI5IEphbiAxMSwyOTcyNDIuMTQ0ODk1Mzg4MiwyNjUzOTMuODQ1NTIyNTE2OCwxNTQ0ODAuODE5MDk2MDg3OTcsMzE5MzUwLjc2NDA1NzQxMTksMzIxOTA0LjA0OTIxODkwMzQsNTIwMzcwNC4zNDQ3NzIzNzIsNTY1NDg2MC45ODE5NzgwMTUsNDYzNDY5OC42NDQyNzE2MjQsNDAyNTcwMy4xNDc3MTkyODY0LDUwMzMxNDIuNzQxODM0OTQ5LDEwMjIwODMuMzE5Mjc2ODkyNSw1OTc0OTEwLjQ4OTc4NDIzNiwxMTgyNDY5LjIyODc5OTU2MDgsMzEzOTAwMC42NTY0NjA0NzQyLDI4MDU2OTQuMzk5Nzc3ODUzNCw2NDQwNjExLjQxODA2MTA0NSw0NjY2MDQyLjk1NjU5NjU3LDEzMTIyNjQuOTkxODMyMzcyNSwzODE5Mjg2LjgzODA4MjM5NiwyNTQzNTM3LjI4ODE5NDkxLDM3NTc2MDMuOTEwNjc0NTYyLDQxNzI3MjMuOTAwNTgzMzM0LDM3MTIwMTYuMzcyMjEyNzY1Nyw4NDYxNDU5LjU3Nzk4NTMzNyw1Mzk2MDEuMjcwNzMzMDYzNSw2NzU2LjI4MjAyNTE3NDI2MDUKKzYsU3VuIDMwIEphbiAxMSwyOTcyNDMuMjk4MjQ1MzE5MTcsMjY1Mzk0Ljg5MjQ5MTIxNDcsMTU0NDgxLjQyNDcwMzMxNDQ2LDMxOTM0OC45MDk2MzM2OCwzMjE5MDUuMzM2MzEyOTMzMSw1MjAzNzIzLjMzNDAwOTQ3OCw1NjU0ODgzLjU5OTkxOTc1Nyw0NjM0NzE3LjEwODg3NDQ3Nyw0MDI1NzE4LjQyNzQ4NTUwMzMsNTAzMzE2Mi4xODQ0NDI0OTksMTAyMjA4Ny4zNDkyNTA2MzU1LDU5NzQ5MzQuMzIxNjg2ODM5LDExODI0NzMuOTU4Njc2MjMwMiwzMTM5MDEzLjE4NTQwNjEzLDI4MDU3MDUuNDU2ODI2NjE2NSw2NDQwNDY3LjkxNjE2NjI4NCw0NjY2MDU1LjkyNDQwNTc1NSwxMzEyMjcwLjI0MDg3ODAyNTMsMzgxOTMwMi4wOTk0OTAyNTgsMjU0MzU0NS4yNjI4NjQ5MjAzLDM3NTc2MTguOTQxMDgzODYyNCw0MTcyNzQwLjU5MTMwMTA4MTcsMzcxMjAzMS4xNjk4Nzg1NzA0LDg0NjE0ODkuOTAzMzgzMTg2LDUzOTYwMS45MDc5NjgxMzgsNjc1Ni4zMDkwNDUyNjkzOTMKKzcsTW9uIDMxIEphbiAxMSwyOTcyNDQuMzk1MTczNTY3OCwyNjUzOTUuOTEzOTU1MTk2MSwxNTQ0ODIuMDA3NzkyOTAxNiwzMTkzNDIuNjkyMzk0NTcyMTQsMzIxOTA2LjYyMjQyMTY0MDYsNTIwMzczOS41MTc1MTMzMTMsNTY1NDkwNi4yMTUwOTQxODcsNDYzNDczNS40MzU0ODA3MzksNDAyNTczMi40Mjg5MDI4NTA1LDUwMzMxODAuNTI0OTc1NzI5LDEwMjIwOTEuMjcyOTQyODYyOCw1OTc0OTU4LjAyNTk4NDIwMjUsMTE4MjQ3OC42ODg1NzEyNTM2LDMxMzkwMjUuNjY0MDM3NzEsMjgwNTcxNi4yMTQyNzA4MDEzLDY0NDAxMDIuOTgzMDc3ODM0LDQ2NjYwNTkuOTUyNDI4MjY0LDEzMTIyNzUuNDg5OTExOTMsMzgxOTMxNy4zMzE0Njg3NDIsMjU0MzU0OS44MDQwMDgxMDQsMzc1NzYzMy45NzE1Mzg4NzQzLDQxNzI3NTcuMjgxNjc2NzM1MywzNzEyMDQ1Ljg3NDE0OTE0MzcsODQ2MTUxNC43MDAyODU5MzQsNTM5NjAwLjI5OTIyMDQ2MzYsNjc1Ni4zMzYwNTM4OTc4NTgKKzgsVHVlIDEgRmViIDExLDI5NzI0NS4yOTU1MTM2NzE2NSwyNjUzOTYuODM4NTExMzg2MjUsMTU0NDgyLjQ5NjQ4NjIyMzgsMzE5MzIzLjk4NjcyMTQ2ODMsMzIxOTA3LjkwMzgzNDI1MjczLDUyMDM3NDYuNDY4OTQ2ODg0LDU2NTQ5MjguODE2NTgwMzYxLDQ2MzQ3NTMuMTQ4Mjc4ODI5LDQwMjU3NDIuMTI3OTYzMjU0Nyw1MDMzMTk0Ljk2NjQ4NTg5OSwxMDIyMDk0Ljc1NTQxMTk4MDMsNTk3NDk4MS4xMzcxODI1MzIsMTE4MjQ4My40MTg0ODA0NjQ3LDMxMzkwMzcuOTE4Nzc4MzU1MiwyODA1NzI1LjY3OTI5NjExNTQsNjQzOTEyNy40MDI4NDYzNiw0NjY2MDMzLjM4NzQ2NjQxMywxMzEyMjgwLjczODc1MzI1ODUsMzgxOTMzMi40MjkxNzIwNTQsMjU0MzU0Mi43MTExNDI5NjYsMzc1NzY0OS4wMDE5NjAyNDI2LDQxNzI3NzMuOTY4OTA3ODY0LDM3MTIwNjAuMTY3NjUwNDk2LDg0NjE1MjAuNTUyNTI4MjUsNTM5NTkxLjc2MTk5ODU5Niw2NzU2LjM2Mjk4NTEyNTA0NgorOSxXZWQgMiBGZWIgMTEsMjk3MjQ1LjY4MzYyNzUxMzgsMjY1Mzk3LjUwMzAxOTM1MjI3LDE1NDQ4Mi43MjM5NjUyODk5NywzMTkyNzUuMzI0NTk1MDc2MTUsMzIxOTA5LjE3MTc5MTk2OTMsNTIwMzcyOS44ODkxMDAyMjQsNTY1NDk1MS4zNzg1NTA5NDEsNDYzNDc2OS4xMzM2MzI2NjU1LDQwMjU3NDAuNzYyNzI1MzAxLDUwMzMxOTkuMTkxODA4NDg1LDEwMjIwOTcuMDIwNDQ4MzI0Miw1OTc1MDAyLjU1OTQ5OTE5OTUsMTE4MjQ4OC4xNDgzOTM1NTY3LDMxMzkwNDkuNTQzMzcwMDU0NiwyODA1NzMxLjUzNzA4OTE1NjUsNjQzNjcxMi4zMDA3ODY3Nyw0NjY1OTI3LjY0NjEzMzU0OSwxMzEyMjg1Ljk4Njk2MjI1NDIsMzgxOTM0Ny4xNDY0MTA2NzY3LDI1NDM1MDUuNjIyMzMyNjI5NywzNzU3NjY0LjAzMjE1NTAwNTMsNDE3Mjc5MC42NDYwODgxMzc4LDM3MTIwNzMuMzA4NzIzMDU3Niw4NDYxNDc3LjM0OTQ5MjU2Myw1Mzk1NjYuMDMyMTk0MTY4Myw2NzU2LjM4OTY3ODI3NTUxNTUKKzEwLFRodSAzIEZlYiAxMSwyOTcyNDQuNTUwMjQwNTU5NCwyNjUzOTcuMzY2MzY1MTMzNTUsMTU0NDgyLjEwMDkyMDEyNzQsMzE5MTQ5LjI5NDU3MDkwMSwzMjE5MTAuMzkyMDM3NzAzMiw1MjAzNjQ2LjMzMDEwNzk5OSw1NjU0OTczLjc5ODM3NDg5OCw0NjM0Nzc5LjI1NjUyNjE5Miw0MDI1NzA3LjMxMDQ5NzAwNTUsNTAzMzE3Mi43NDYxNzUyNzEsMTAyMjA5NS4zNDE3NDk4NzA2LDU5NzUwMTguMDgwMjE4ODA2LDExODI0OTIuODc4MjU2MDEwOCwzMTM5MDU5LjAzMDE0Nzk5MjUsMjgwNTcyNS4yNzkyMjk0MjU0LDY0MzA2NDQuNzMyMzUwMjUzNSw0NjY1NTg5LjgzNDEyNzIwMywxMzEyMjkxLjIzMjU5OCwzODE5MzYwLjU1MDE3MjcyNywyNTQzMzgxLjI0NTU4NzY4OSwzNzU3Njc5LjA2MTI2NjYwNiw0MTcyODA3LjI3ODUxMTQ4LDM3MTIwODIuNTY4MzUzODExNyw4NDYxMjkwLjIwNDE2MDQ5NSw1Mzk0OTMuNTcyNzA4MDk3OSw2NzU2LjQxNTQyNTYzMDMwMgorMTEsRnJpIDQgRmViIDExLDI5NzIzOS4yNDYwNTk0NTU3LDI2NTM5NC45ODU1MDg5OTg4LDE1NDQ3OS4wMTM3ODczMzE4NSwzMTg4MzEuNTE3MzIxNTk5LDMyMTkxMS40NjcwNTM2MTUsNTIwMzM4NC40ODYyNzM3NDUsNTY1NDk5NS43ODIyMzg3OTYsNDYzNDc3MS45Njk5MDM1NzIsNDAyNTU4Ny4zMDc2MzQ1MzUsNTAzMzA2MS42MjkwOTE0NTYsMTAyMjA4Mi4yNzE3OTg0MzM1LDU5NzUwMTUuNzgxNTEyOTMxLDExODI0OTcuNjA3ODk4MDkwMywzMTM5MDYyLjE2OTgzNDc4MywyODA1NjgzLjIzNDIwMzg5MDQsNjQxNTYzNy44MzI2NDU2NjUsNDY2NDYyMS42MjU3Mzc5ODEsMTMxMjI5Ni40Njk5MTQxNzExLDM4MTkzNzAuMDE0ODIwNDc4NCwyNTQzMDIwLjkxOTY0NTc0NDQsMzc1NzY5NC4wODY3NTQ0OSw0MTcyODIzLjc1OTUzNzkyOTcsMzcxMjA4MC4zNTIyMjAwODE3LDg0NjA3MTEuNzM0MTY0MTU4LDUzOTMwMC43OTI2NjI0ODUyLDY3NTYuNDM4MTMzNTM3MTc2CisxMixTYXQgNSBGZWIgMTEsMjk3MjIyLjE1ODI2MzE4MjcsMjY1Mzg2LjE0MDE0NDE0NzEsMTU0NDY4LjU1OTM5OTM2ODE4LDMxODAzMS43ODAxOTU1MDc1LDMyMTkxMi4wNzc5OTQwMzU0NCw1MjAyNjM2LjkxOTY3NDAyNyw1NjU1MDE2LjM1NzA4ODIxMiw0NjM0NzEwLjg3NTM4MzIwNCw0MDI1MjI3LjM3MTYxNDQyMSw1MDMyNzA5LjI0MzE4MTYyNCwxMDIyMDM1LjIzODY4MDQ2MTksNTk3NDk1Ny4xNzE2ODk3NzUsMTE4MjUwMi4zMzY2NTc4ODQsMzEzOTA0NS43MDM1NjY4ODYsMjgwNTUzMS4wNjIxNzMxMzksNjM3ODQyMy40MDY5NTUzMTQsNDY2MTg5Mi44Mjg4MjI4ODQsMTMxMjMwMS42NzkwMjg3OTg4LDM4MTkzNjcuMTM5Mzg3NjM5LDI1NDIwMDUuNTA2MzExNjU0LDM3NTc3MDkuMDk5NzY5ODEzNSw0MTcyODM5LjY4ODE5MTE5MTgsMzcxMjA0Mi44Nzc4OTk2MzIsODQ1OTAzOS4wNDY5ODUxNDgsNTM4NzkyLjYyMTA1Njg4ODcsNjc1Ni40NTA2MzM2ODUxMDgKKzEzLFN1biA2IEZlYiAxMSwyOTcxNzIuNTc3MzAzNTM1NywyNjUzNTkuMjE2MzY3MzkyNCwxNTQ0MzYuODg3MzU3NTcwMDksMzE2MDM2LjAwODc5NTY0ODcsMzIxOTExLjI3ODcwMDQyMDE3LDUyMDA1OTIuMDEwMTkzOTIxLDU2NTUwMzIuNjExMTc0NzQ0LDQ2MzQ0OTAuNTIxNjE0MTM0LDQwMjQyMTYuMzk2Mzk0NDQ5LDUwMzE2ODYuNzUwMjc3MjgyLDEwMjE4OTAuNTgxNTg4NjAxLDU5NzQ3MjguOTMzMTc1MzE5LDExODI1MDcuMDYyMzYyOTQ5OCwzMTM4OTcxLjIzODE1MTE4MywyODA1MDUzLjg2MDYyOTA2ODcsNjI4Njc2OS45MjIzNzYwODksNDY1NDM2MC4yNTk5MjY1NTksMTMxMjMwNi43OTg5NjA5NDkzLDM4MTkzMjcuMzQxNjE0OTE2NSwyNTM5MjExLjQ0MzkxMTkzOCwzNzU3NzI0LjA3MzA1NjIwMiw0MTcyODUzLjc3NDI0MTA5MzUsMzcxMTkwMS41NDc3NjgxNCw4NDU0Mzc2LjM4NTM4MjMwOCw1Mzc0NzAuODgzMjk3OTAwMiw2NzU2LjQzMTA5NzYwNjM5CisxNCxNb24gNyBGZWIgMTEsMjk3MDMzLjAwMDY1MTc5MDM1LDI2NTI4MS42NDEzNTk5NDM1LDE1NDM0NC4wODQ3MzQ3NDIxNSwzMTEwODMuMjY2Mzg4MzMxMiwzMjE5MDYuMTcyOTE5MDM4MTYsNTE5NTA3NC4wODUzNDEwODQsNTY1NTAzNS41Mjk4NTMyNjYsNDYzMzc5Ny40NTQ3MzkzNyw0MDIxNDMxLjYwNjQwMjQxNDQsNTAyODc5NC40MDY1Nzc1OTksMTAyMTQ2NC45ODMyMjMzODgyLDU5NzM5ODcuNjUwMzUwOTk3LDExODI1MTEuNzc3NDg4MTA0NSwzMTM4NzI0Ljc0MTM4ODM4MywyODAzNjEzLjkyMzU1NDM2MDQsNjA2MjkzNy41MDU2ODI2MDksNDYzMzY4OS43Mjc0NDc2NDksMTMxMjMxMS42MzY2OTkwNzc3LDM4MTkxNzYuNjQ2MzU2MDQ0LDI1MzE1NzUuNDMzMzMxNTY0LDM3NTc3MzguOTE5NzM3NzQzNyw0MTcyODYxLjY3NTI4NTc5NSwzNzExNDUzLjU2NTM3ODU0OTUsODQ0MTUxNS4wMzU0NTg4NDIsNTM0MDUxLjI2MjI0NDU0ODQsNjc1Ni4zMTEzNTA0MDAyMQorMTUsVHVlIDggRmViIDExLDI5NjY0Ni41NjA1MzEyNzcxLDI2NTA2My44NjcxNjQ0NDcyLDE1NDA3Ny45NjUwNjc4NjI3LDI5ODk1Ny44OTc4OTcxMTE4LDMyMTg4OC4xODE2NDA1Mjg1LDUxODAzMzkuNjUzMjMxMjY1LDU2NTQ5OTguMTQ4MzY2MjQ4LDQ2MzE3MjUuOTEyNzQzMzExLDQwMTM4NTUuMTc4NTIxODc1OCw1MDIwNzM3LjgyNTAyOTU1MSwxMDIwMjQzLjEzMTE0NzY4Niw1OTcxNzI0LjY5MDg4MDY5NywxMTgyNTE2LjQ1NzQ5OTE5ODgsMzEzNzk3Ni45MjM1ODM1OTIzLDI3OTkzNzEuNjQwODIzNDg1Myw1NTI5NzAyLjc2MDg2OTMyMDUsNDU3NzU1MS4xNTI0MTExODcsMTMxMjMxNS42MDU5NjAzNDY1LDM4MTg2OTkuMDQwMDkxNjE1NiwyNTEwOTA2LjI4MjIwMjI2MSwzNzU3NzUzLjM3NDI5NDM4OSw0MTcyODQ5LjU0NzI2ODU1NzQsMzcxMDExNS42NjQzMTc1OTQsODQwNjQwMC4xNzc2MDM3NzQsNTI1Mjg2LjUzNjg2ODk1NDEsNjc1NS44ODY4MjkxNzczMzQKKzE2LFdlZCA5IEZlYiAxMSwyOTU1ODUuMTI0NDMxMzk5NywyNjQ0NTkuODg1NTAyODc4MSwxNTMzMjMuOTg0NzkxOTgwNSwyNzAxMzQuNTM1OTQ0NzI5NSwzMjE4MzEuODM0Nzc2OTEzNiw1MTQxMjc3LjUzNDk4MjAxMzUsNTY1NDgzOS41MjEwMjkyMzIsNDYyNTY1Ni4zNTgwMzc1OTYsMzk5MzM3OS4zMzg3Mzc3MTM2LDQ5OTg0NjcuOTMxMDE0OTg3LDEwMTY3NzcuNzg1NDM5Mjk4NSw1OTY0OTczLjI3OTQ3NDU4NiwxMTgyNTIxLjAyMTk3OTUyMjcsMzEzNTc3Ni4wMjA1Nzc4NjQsMjc4NzAyMS45MzY2MjMwNTgzLDQzMzU0ODAuNDUzMTc5MjgxLDQ0MjY5NzkuMjYxMzA3NDg5LDEzMTIzMTYuOTI1NDk3ODYzNCwzODE3MjYyLjgwODUyMTQ1NiwyNDU1NTA2LjAxNTY5NTM3NTQsMzc1Nzc2Ni42MjM4NjIyMzk1LDQxNzI3NzMuMTQ0MzQ1MTU4NywzNzA2MjA5LjI5MzE3OTgzMjQsODMxMTI1MC4xODIzMjk0MDQsNTAzMTUyLjMyNjc5OTU4NDcsNjc1NC41NDU0ODk1NDcwNzc1CisxNyxUaHUgMTAgRmViIDExLDI5MjY5NS42NjQ0Mjg5MTQyNiwyNjI4MDMuMzA0OTgwNDA0MywxNTEyMTUuODQ2MzExNDkzNSwyMDY1MzAuMDg4NzE2Mjk1NzgsMzIxNjYyLjYxNDQzNzQ0OTUsNTAzODg3NS4wNDU5OTUwMjgsNTY1NDMyMC4xNzk3NDY1MjIsNDYwODExNi44MjUxNjI3ODksMzkzODU0NC4xMzQ0MTUwNjAzLDQ5Mzc0ODYuNjkzNTQyODMyNSwxMDA3MDY1LjMzNTQzMDgzODQsNTk0NTEzNi4xNDE3NzQ5MzcsMTE4MjUyNS4yMTQwMjE5MTE0LDMxMjk0MDYuODgzMTE5NTk2LDI3NTE1NDEuNzI1MDIwNDkyLDIwNzI4OTIuOTg1OTIyODE2Miw0MDM0NTE1LjAwNDczNDU0NCwxMzEyMzEwLjI3OTMyNDc5MSwzODEzMDQ2LjU5ODU5MjkyNSwyMzEwMDc2LjQwNTg1ODk1NiwzNzU3Nzc2LjIyNDA4NTQ5MzUsNDE3MjQ5NC4zMTI4NjYzMDUsMzY5NDk2Ny44MzIzNjU1MDMsODA1Njg3My4xNzkwOTU3MTUsNDQ5MTY4Ljk2MjE2OTM1NTM2LDY3NTAuNDg5MjEwMzAxNDQ2CisxOCxGcmkgMTEgRmViIDExLDI4MzExNi41OTQxNzY5OTU4NiwyNTcyNzAuNjcwMDM0ODgwMjMsMTQ0MDQxLjg1OTQxMTk2Myw4OTc2OC4xNTAxMTU4MDE5NSwzMjEwMjYuNTQ1NzU2NTI4OCw0NzIwODU4LjkwNzUwMjk4OSw1NjUyMjg0LjAwNTI4MTg4LDQ1NDQ4NTQuNTAxMDM5MjYsMzc2MTU3NS4wMjYwNjE2OTcsNDczNDM0NS4wNDA1MTY0Miw5NzM2NjAuODc0Nzk0ODc1OSw1ODcyMDM4Ljc4NDc4Mzk1OSwxMTgyNTI3LjY3ODc2MDIzMTcsMzEwNjM3NC4xNTYyODY4MjU0LDI2MjYyMTguOTYyNTgwMDcxLDQzLjg4OTY5NDI1NDk5Nzk1NiwyOTM3MTU4LjY4NTQ5MjM1LDEzMTIyNjkuODE4ODI4OTg2NywzNzk3NTc3LjUwOTY1Mzk1NSwxODgxNDYxLjUxOTk5Mjc2NjcsMzc1Nzc3MC4xNjc3NDk2MjYsNDE3MTMwNS4wMjIyNTI0MSwzNjU0NjI3LjA1Nzg3NjQ3LDcyNTcwMTYuMTk5MDEwMDk1LDMxMzk2Mi45ODY3MzY5Mjg4LDY3MzUuMTY2ODU2OTc1ODg0CisxOSxTYXQgMTIgRmViIDExLDI1NDI4Ni42MDU2NTI2MDc5MiwyNDA3OTQuNjExOTMzMDcyNDUsMTIyMzQ4LjU5NjU4Mjc0OTYxLDIuNzUwNzUzODQ1Mzc3NTgxLDMxODc3Ny43NTM5NzcxNjk5LDM4NjE1ODUuMjY0MzMzNDMyNSw1NjQ0ODc1LjA1NTE2MDY3OSw0MzMxODU0LjI2MzM5Mzg4NiwzMjUxMjU4LjMwNjg4Njc4OCw0MTI1MzUzLjE5MjM3Mjg2MzYsODY5NDYxLjQ1MTI5NDc3ODQsNTYyMDM3OC44NDMzMjc4NzYsMTE4MjUyMy4zODQ3ODIzMDEsMzAyODA2My40NTcyMjk4NDUsMjIzMTgyMi4wMjgzNjc5NDE3LDg1LjY4NzE5NjUzMjE0NDg3LDkzMDk3Ni42MDAxODgwOTgsMTMxMjEwOC43Njk5MTI0MjUyLDM3NDQ1ODIuMDE2OTczODY5LDk0MjMzOC4wNzMxMzU4MjkxLDM3NTc3MDcuNTcyOTI1NDkxNyw0MTY2NjcwLjUxOTE0MzI5MiwzNTE5MTM0LjgwOTIyNDM4Niw1MTU3NDQ1LjU1MzA2NDgxOCw5ODQyMi4yNTYxODIyOTExMiw2NjgwLjg4NTU4MTQ3MjI4NgorMjAsU3VuIDEzIEZlYiAxMSwxNzI5ODguMjA1NjM1MTIyNSwxOTc4MjkuNjYwOTc5MTkwNTUsNjY0NDcuMjY0NjI3MDIwOTgsNC42Mzk0ODA4Njc0OTUwMDYsMzEwMTYxLjU5NTc3NzA5NjIsMTk0MTcyMS43ODQ0OTQ4MDUsNTYxNTI0Ni4wNjM1NTI3MDY1LDM1OTgwMDQuOTE2OTAyNTYsMTkzODY5NS4yNTg0MzU5ODM0LDI0ODQxNzcuMTA0NjgyMDg4NCw1NzE3MDQuNjM5MjI0MDE2Niw0NzI4MTU3LjM5OTMxMDQ4LDExODI0ODcuODgzODUxMTc1NywyNzQ2NDQwLjYzMjg4MjcwMzYsMTE3NjUyMC43MzgzMTU4NTI0LDczLjA3NzcwMTEzMzU4NDM3LDczLjM5NTI5OTYwMzk3NTYzLDEzMTE0NDcuMDY2OTEyNjY0LDM1NTQyOTIuMzY2NzI4ODk3NywzNTc3MC4yODc4NzEyNjgyMywzNzU3NDA2LjQ4NDM4NTY1Nyw0MTQ2Nzc2LjY0OTU3MTU1NSwzMDQ2OTg2LjgzNzMxMzkwMjYsMTM5MTg2NS42MzYwNjY1OTA3LDAuNjAzNDkxNTc4MzYwNTY1OSw2NDczLjQyMjAwNjQ4NDg4MQorMjEsTW9uIDE0IEZlYiAxMSwzOTYwNy4xNzcxODEyNjU1NjQsMTI4MzE0LjY1NDI0ODgzMTgsNjA5OS45MDU0OTQyMjIwNTQsNC4xNDU2MTIwNDE2Mjg0MjksMjc2OTk1LjkzNzc4NDQzODYsMTYyMDQzLjMyNjI4NjkyODkzLDU0OTAxMzcuMjk5NzY1MTAzNSwxNjcwMDAwLjk3MTYwMzkyMTYsMjY3ODM2LjczMDg4MTQ3Njk1LDMzMzQzNC4yMDYzNDQ4NzksMTE2NjA0LjM4ODkwNTM1MjY0LDIyODAzMzguMjAwMTYyMTkxLDExODIyOTUuMDEwOTE5MzA2MiwxODQ2MTA2LjU4ODQyMzUyOTksODIyOTcuNjA2NDE2OTgwMDQsNjQuMTA4ODQ2MzA3ODQyNDcsNDMuODkyNjUyNzY2MDU4OTQ0LDEzMDg2MjMuMzQyNTYyNTYzMywyOTEyNzIxLjc5NzYxNTQ2NDMsMjUuNzQ1MTk2MDIxODUxODIsMzc1NjA0OC44MDA1NjQxODksNDA1NTQxMS42ODYxODcxMTEsMTY5NzE5Mi45NDYxMTAzNDY4LDg1LjUzNzMyMjA5NDY1MjE1LDUuNTE3NzMyMDk0MTgzMjQ4LDU3MDMuNTM5MzMxNDg5NTkyCisyMixUdWUgMTUgRmViIDExLDEwNC4wNzE3NzE4OTg0ODQ1MSw1ODI2OC4yNjU3NjcwMzQ4MzQsMS43MTg4MjE3OTc3NTE5ODA2LDMuNzE4NjM2MDQ5MjE3NTA5NywxNzc4NzUuMzAyODY4MDg4Miw1Mi4xNTE4ODY4MjY1ODE2OCw1MDEyMDY3LjkyODMzNDMxNiw4MTc0Ny43OTI3ODAyNzMzLDguNjg1NDQ0MDM5MzEzNTAyLDkuOTEwNzM5NDAzNDY4NDgxLDI0Mi44NTE2OTMxOTA3OTg1LDEyNjU3MC4zMDQzNDE1NDY2NCwxMTgxMzQ1LjU0MDg1NDU5Myw0MDA4ODYuMzE0MTY1NjQyMTQsMjguMTE3Njc5ODUyNzgzNDg1LDY5LjA1MDQzODA4NTI0MzU3LDQzLjMyMjk1ODcxOTE5NDAyLDEyOTcyOTQuNTcxNjQxOTcsMTM5MjAxOS4wOTIyOTU1MjQ3LDIzLjI2NTE3NzQyNjQ2MTI2LDM3NTAzNjEuMTY4NTY3NDk2LDM2NzE3NzYuNzM3NTk1ODE0NywxNzg2MzIuNzc4MjE3ODM5OCw3OS40NjE5ODMxNTYzNTAxMyw1LjA2NzQ4Mjg3MjcwMTUxMSwzNjcwLjU0MDQ1MDE1ODExCisyMyxXZWQgMTYgRmViIDExLDIuODE4MjY1MTY1NTAwNzM3NCwxMzM4Ni42MTkyMjE2NjgxMywxLjQ0NTQ3MTkyNDgwMjI4ODcsMy41MzQ5NjczMTQ4MDgwMzU2LDMzOTU5LjA1NjE2Mjc3ODM3NSw0OC43OTE0MjY5NTM3MDQ5MSwzNDk3MTU0LjkyNjc5NDY4NDUsNDcuNzE1ODI5NTk2MzM3MjY1LDM3LjM1Mzg5MDg3NDM3MjUsNDYuNTYxNjYyMjQ2ODM1MzU0LDkuNTc0NzU2ODQ2NjgzMzI3LDU2LjgyMjE3Njg0OTE1NjAxNiwxMTc2NzgzLjc0MjM2MTgwNDIsMTY4NC42NTAxNzMyODA0MjU5LDI1LjcwNDkxMTk1MjU5MjAyNCw3OC43NDkyNzc0MjQyMjA0NSw0Ny4wNTI2NDY0MzU2MDkyMywxMjUyNzYwLjczMzg0ODE5NSwxMDQzODUuMDUwNzU3NzMzMTIsMjQuNDk1ODAyMDk0MzkwMjE0LDM3MjY2NjkuNDEzNTg2NzQzNiwyNDA1OTI4Ljg3NDQ4OTE4LDIwLjQyNDA2NzYyMzA4MTQzLDc4LjUzODY5MjMxNDU1MDgsNS4zNTgxNDEyNjY1NTUzMDcsOTU3Ljg4NDcyOTExODU3MjMKKzI0LFRodSAxNyBGZWIgMTEsMi44MzA2NDM3ODA5NjM3MDE1LDkzMy4zNzI0NTgxOTk0MjI1LDEuNDkyNzA3NTMwMzYxNjE1MywzLjc0ODIyODMxMzQ5Mjc5OCwxLjQzNTY4NjcwODUwMzQ5ODMsNTAuMzM4NzgxMDc3MDY3NDgsOTA1MzcyLjQxOTQwNTA1MzEsNDIuNjQxOTc5NjAyMjQwMDEsMzguMjc1MTUxNzAzMDk2MjUsNDcuODUxMTMzNzMzMjM3MDg0LDkuNjI1MTczMTIzMjkxMjI2LDU0Ljk1MzA3MTY0MzY0ODI1LDExNTY4MjMuODA3MTE4Mjc2LDI4LjQzOTk4NDExNDM0NDU1OCwyNy4wNDk3MTcyMjAxODQ5NSw5Mi45OTcyMDc5NzI2NzExLDUzLjc3NTY5NTM0NTczMTc5LDEwOTM3MDcuNTE5MTkxODI3Niw0Mi4yMDE3NzQwODM5ODE2MSwyNy42MzgxOTcyODg3MTA5NzcsMzYzMjg1Ni40NTMzODcxOTg1LDQ3NzgwMy4xNjUwMDQ0NTk0LDM0LjI3MTkzMjg5OTE1MjI0LDg1Ljg4MjQwNDEyMzEwMjYsNi4wNTg3OTAxNDEzMzAxOTMsMTkuNTAxNzgzODU5ODAyMzM3CisyNSxGcmkgMTggRmViIDExLDMuMDg5OTA0MjYxOTQyNDcxNSwxMC44MTAwMzc2OTE4NDM3NDYsMS42NjI0MzYwOTY2NTIzNzk3LDQuMjM5NDUzMDAwMDkxNDE0LDMuMDMzNTI0NDY1MjExOTg3LDU2LjE1MDYzODk1NDUwNjM4NCwzLjI2NTQzNTk2MzkyODI5NSw0NS4yMzkyNDY2MTYwOTE4Niw0Mi41Njk1Njk1MjcyMDgyOTQsNTMuMjk3MjU1MzM2NjQ3NTYsMTAuNTU2MDI0OTcwNTE0MjksNTguMTE5NDc2NTI4NjEzNDU0LDEwODIxMzUuNzcyOTAzMTI5LDI5LjQ3NzQ2NDc4MzI5ODg3NCwzMC40OTQ0NjYxMDczODYzNiwxMTIuMjEzMDM4MDc0ODQ0OTksNjMuNTc2MjI5OTU1NjM2MjEsNjU5NzQzLjE5ODM4MDc2ODgsMzUuMjk4NzExNzgxNTQ3ODgsMzIuNDM3NDEzMDYyNjkxOTIsMzMwMTUwMi4xMDMxNzcwODIsNTAuNzUxNTkxNzA4MjM3MTYsMzUuNTQ2OTI3MDE1MDQyNTUsOTguOTMyNTc4MzU5MTI5NzQsNy4xMTkxNzUzNDE0NTgxNzQsMC4wNjQzNjE3MDc1NzE5MzgxNworMjYsU2F0IDE5IEZlYiAxMSwzLjU0OTk4NzU1MDI3MTIyNiw0LjI2MzE2OTc3MjUxMDM3MSwxLjkzNjg2Mjk0MTgyMDUzNDUsNC45Nzg5NjI1MTkxMDkzNTcsMy4wNTkxMTM4NzkxODU2NjM0LDY1LjQ4NDUxNTI1Mjk4Njk4LDAuODA0MTQ3MTI1NjYzMTg1NCw1MS4xODQzODYwMTEyMTQzOSw0OS41NjE2MTM1NTQwOTk3NCw2Mi4xMDM5Njg1NDU2NTM3OSwxMi4xODM5NTkyMTUxNjMwMzcsNjUuNjU5NzE0MTA4MzYwODMsODcwNjgxLjIzMDM2OTg4MywzMi4zNDE5OTQyODI4MDEzMiwzNS44MDc5MjA0ODM4MDc5MDUsMTM3LjM5MzA4Nzk4NDk0ODMyLDc2LjkzNDgxNzAxMzYzOTQsODczMTcuMDUxMTQzNTE1MjcsMzYuNzM2OTYzNTQ5NjMyMDMsMzkuMDgwODYzNTI4NDcxOTcsMjQxNDk3OS43OTUwMTIyNjczLDQxLjc2MTY1ODQwMTg5MzcxLDM5Ljc1NDkwNzg0ODAyMTE1LDExNy43NzY2Njc2NjI5NTcxNSw4LjU4MDkxNjYzMDkyOTIxNSwwLjA1OTgwMTg4NTA1ODQ1MDI4CisyNyxTdW4gMjAgRmViIDExLDQuMjE3NzY3OTk1MjQ0MjYxLDMuNTg3OTQ2NDgxNDc2NTkzLDIuMzI0NjkyNzk5MDA3NTA4NCw1Ljk5OTk3MTkxMjUyNTU1NiwzLjM3MDI4NTY4NTM3MTI5OCw3OC42NDI4NDU3NTk0MjQzNiwxMS45MzYyOTk3OTg2Mjg5Myw2MC40MjEzMjEwMTY5MzQyNyw1OS40NjQwNjIxMzE2NTcwMyw3NC41NDk4MjcyNDQzNzU1OSwxNC41NDQ5MjU2MTU4ODE1OTYsNzcuNDQ1NzY3MTY2ODM3NTYsMzg3NDYzLjUyMDg4MTg2NTQsMzcuNTI2NzgyMjk0OTUzMTcsNDMuMTgwNjU1MDA1MDQ0OTksMTY5LjkyNDI5MTY0MzY5NDgsOTQuNTA3NjM4MDMxNTczOTYsMjQuMjk4NjQyMDQ1NDAzNjc1LDQxLjU2MDY5NzY4Mzc5NzA2LDQ3Ljg3Nzc3MjU3MzE2NTIyLDcxNTI3MS43NTExMzM5NjIxLDQxLjYzODU4MjQzNTIxMTEyLDQ2LjYzMjQwODg3NTg2MDc3LDE0My4yMTI4MzAwNDY5ODQ4NiwxMC41MTQzMjEwNTg1NDU4NDQsMC4wNjU1OTczODc3NDU5Mjk5MgorMjgsTW9uIDIxIEZlYiAxMSw1LjEyNDg1Nzc0ODQ5NTIxOSwzLjMzMTE4MjI5OTk1NjcsMi44NTQxMTM4MjQ0MTAzNjc0LDcuMzY2Njk4NzY3ODkyODk2LDMuOTA4OTg4NjE2MzI4NDE2Nyw5Ni41ODg3NDM4NTUzMTEyNiw0NC41NDk5MzAxMjY5MTk0NCw3My40MjAxMTM1MjAxMjIxOSw3My4wMDI0OTM1NjE4ODUzLDkxLjU1MzIxNzY3MDI4NDQ3LDE3Ljc5OTI1NTc0Mjg5MzYxNCw5NC4wNTgzMTQ0MzIzOTIyLDEyNjY5Ljk4MzU3NDI4NTQxNCw0NS4xMTA2MjQzMDQ1MDU5MSw1My4xODEyOTc3NzQyNDg4MSwyMTEuNDk3Mjk4OTE2NzcwODYsMTE3LjUzMTc3NjUxMDcyMDMyLDE1LjMzMDkxOTc4OTcyMTAxMiw0OS4xODc1MzE3MTIwMDQzLDU5LjQ4OTYyNjI2MTUwNTU0LDE1LjM2MDYzNTIxMDUwNDU5Nyw0My45MTYyNzk1OTE5MDQzMDYsNTYuNDM0NTI1NTA0MzE3NjYsMTc3LjIzOTc2MTAyNDIwNTQ4LDEzLjA1OTI2NDg0NjAyMzQ0LDAuMDc3MzEyMzMwODAyNDA3MDcKKzI5LFR1ZSAyMiBGZWIgMTEsNi4yNDI3OTgyODQxMDk3NTQsMy4zNDQ1ODA3NTQwODUwNjA3LDMuNTA2ODMzNjUzNTAxLDkuMDQwNzkwMzU2NTg1NjM3LDQuNjY3MDMwMzYyMjE5NTk0LDExOC43MDQxMDAwOTQ0NDM1OSw2Mi43MTk0NzYyMzA1NDMyNSw4OS42ODA5NDYxMTg3MDA4Nyw4OS43MDMyOTY3OTQzMjM0OSwxMTIuNTIwNDY5MDIzMDY0NTQsMjEuODMwMDc1Mzg0MDQ4MDQ3LDExNC44NTUyOTI3NzMxMjc5OSwzMS4yMzAxNDI0NDI0MzQ2MzcsNTQuNzYxNjM3Mjg3MDYyNzQsNjUuNDY5NzMwOTgzMTUyMzcsMjYxLjMyMjAyNjc2NjI4OSwxNDUuNDA5MzgzNDgyMDM2NCwxNC44NzkzMjE5Mjk1MDYzMTYsNTkuMTE2NjkwODA5OTU2NzYsNzMuNTg3Mzg4NjY5NzI1NDMsMjUuMzUzNDYwNzU2Njk4NzM4LDUwLjIyMDczNTAwMjU5NDY1LDY4Ljc2NzcxOTMwMjc5MzI4LDIxOC43ODQ5Njc0NjA5NTg2OCwxNi4xNDY2ODkwMjQwNTYzOTMsMC4wOTE3MDQzODYxMDc1Mjc5NAorMzAsV2VkIDIzIEZlYiAxMSw3Ljc1NTE4ODM4NzU2NzM2MywzLjcxMTM0MTYzNjM4MTQyNiw0LjM4MTA1NDAxNzQzMzIyNiwxMS4yMzQ2NDE0OTIyNTIwNTgsNS43NDAzODU0NDE1NDA5NjEsMTQ4LjMwODQ3MDU3MDE3MjY2LDc5LjI1OTU1NTg4MDU5MDgxLDExMS44MjI2NjU1NjYyOTQzOCwxMTIuMTEwODU1NTE0ODExOTcsMTQwLjY0MTg5MDI2NjIwODcsMjcuMjYyOTU4MjQzOTI3NywxNDMuMTkyNzc2OTk3NzEyNSwyOS42MzAzMzEyOTY0NDE3NCw2OC4wNDg1OTE2MjEyNzU0OSw4MS44NzUzNjgzMzAzODczNywzMjQuMDQ4ODg2Mzk3OTI3MzMsMTgxLjQ5NTM1OTM4MDE1NjQsMTUuNjI1MDk3NTcxNzQzMTA1LDcyLjk3ODI3MzkxODEwNjc0LDkxLjk4MDEzNDQyOTA3ODYzLDI0LjgzMDM4MDk5MzA4NjAzOCw2MC4zNDkxNjYxODEyOTQwNCw4NS42Mzg1ODE5ODAzNzc4MSwyNzMuNjQ2MjI5NTE4NDQ3NSwyMC4xNjA4NDQ2ODg4MzczMSwwLjExMTgyOTExMTI0MzMxMjM4CiszMSxUaHUgMjQgRmViIDExLDkuNjU3NzAwMjc1NDM3MjI3LDQuMzI5OTkyNjIzMTczNzQ5LDUuNDcyMjU1ODQwMzUyMTAxLDEzLjk0NTk5MDU3NDc3Njk0Niw3LjEzMzM2OTU4MzU1ODU2LDE4NS4yNDkxNzg2NTczNDQ2Myw5Ny44MTkxMTc2OTk3MTE4NCwxMzkuNzMwODUxOTg4NjEzNTUsMTQwLjEwMTU5MDQ5NzQ4ODY0LDE3NS43NjIwNTg4OTQ0NDM1LDM0LjA2Nzc3MjU2MzgwMjI0NCwxNzguOTI2NDAwNTc1NjEyOTcsMjkuNzQyNTUxNTU0MjE2MTAzLDg0LjkzNDk1NzQ3NDIwNzEsMTAyLjMxMTA1NjI5Njk2ODIsMzk5LjY3ODQzMTQzMjY4NjY0LDIyNS43MjM1MjQyNjc2MDQ1LDE2LjYyNTUwNjE3NjQ3NzM4Myw5MC44MjUyODQ4NTUzNTA2MiwxMTQuNjE1NTM1ODU1NDY4MTEsMjkuMzQ2MDM0MTQ3Njk5NjksNzQuMjQ0OTI2MDEwOTE2NTIsMTA2Ljk3MjQyNjM5NTQxNDksMzQxLjU5MjM4ODc4MTk5MTcsMjUuMDkyODQ5MTYxNDQwODMsMC4xMzgyOTcyNzg2MjUwNTU0CiszMixGcmkgMjUgRmViIDExLDEyLjA0MDU5ODQ0NDEzMjQ5Miw1LjIxMjQ4NTgwMDQ0MzQ3MSw2LjgyODE4OTM1MjQ4NzE2OCwxNy4yNjU0NDAzNTI5MDkyMzgsOC45Mjc1ODY4MTY5MjI4MTIsMjMxLjEzMzc5MTgyMjE0ODM3LDEyMS43NTU0NzA2OTU4MTgzLDE3NC44MzY5MDk1MDI1NjY4LDE3NC45MjU3MDY2ODMyMzIsMjE5LjQ0MzkwMjQ1MDgwNzksNDIuNTYyNTM1NDIwMTI2OTUsMjIzLjg5OTA3ODk5MjUxNjMsMjcuMDkyNzAzNjM1NDY0MzUzLDEwNi4zNTM3OTE0MTg1Njk5NCwxMjcuNjQyNzM1MjIwNTk0ODcsNDg5LjYwOTczNTc0OTQ0MDc0LDI3OS4zNjMxODgxODcwNjkyLDE5LjQ0MDgyODYyNTQ1OTc2NiwxMTMuNjkyMjMzNTA4NjA5LDE0Mi4yMTcyOTg3OTAyMjYyNywzOC4yNDYyNzk1NDUzNTAzMyw5Mi41MjI1NjY2NTEyMjc0NiwxMzMuOTAxODY2MjE5Nzk3Nyw0MjUuMTU4MTAzMDcyMDYwOTUsMzEuMDkzMTU0MjY1NDI3MzEsMC4xNzI2NTYxNjU2NzYxMjQyNwpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Qb3B1bGF0aW9uR3Jvd3RoU0VJUl9GRF9SZWZlcmVuY2UvVGVzdFNFSVIvcnVucGFyYW1ldGVycy5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1BvcHVsYXRpb25Hcm93dGhTRUlSX0ZEX1JlZmVyZW5jZS9UZXN0U0VJUi9ydW5wYXJhbWV0ZXJzLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kN2Y5ODQ1Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Qb3B1bGF0aW9uR3Jvd3RoU0VJUl9GRF9SZWZlcmVuY2UvVGVzdFNFSVIvcnVucGFyYW1ldGVycy5jc3YKQEAgLTAsMCArMSwyIEBACitkaXNlYXNlTmFtZSxwb3B1bGF0aW9uSWRlbnRpZmllcix0aW1lUGVyaW9kLGZyZXF1ZW5jeURlcGVuZGVudCxyZWZlcmVuY2VQb3B1bGF0aW9uRGVuc2l0eSxyb2FkTmV0d29ya0luZmVjdGlvdXNQcm9wb3J0aW9uLGNoYXJhY3RlcmlzdGljTWl4aW5nRGlzdGFuY2UsdHJhbnNtaXNzaW9uUmF0ZSxub25MaW5lYXJpdHlDb2VmZmljaWVudCxyZWNvdmVyeVJhdGUsaW5mZWN0aW91c01vcnRhbGl0eVJhdGUsaW1tdW5pdHlMb3NzUmF0ZSxpbmN1YmF0aW9uUmF0ZQorVGVzdFNFSVIsaHVtYW4sODY0MDAwMDAsdHJ1ZSwxMDAuMCwwLjAxLDIuMjUsMTAuMCwxLjAsMC4zLDAuMCwwLjAsMC40ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Qb3B1bGF0aW9uR3Jvd3RoU0VJUl9SS19SZWZlcmVuY2UvSHVtYW5Qb3B1bGF0aW9uTW9kZWwvaHVtYW4vQmlydGhzXzAuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Qb3B1bGF0aW9uR3Jvd3RoU0VJUl9SS19SZWZlcmVuY2UvSHVtYW5Qb3B1bGF0aW9uTW9kZWwvaHVtYW4vQmlydGhzXzAuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJjMjQ0MDEKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1BvcHVsYXRpb25Hcm93dGhTRUlSX1JLX1JlZmVyZW5jZS9IdW1hblBvcHVsYXRpb25Nb2RlbC9odW1hbi9CaXJ0aHNfMC5jc3YKQEAgLTAsMCArMSBAQAoraXRlcmF0aW9uLHRpbWUsCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1BvcHVsYXRpb25Hcm93dGhTRUlSX1JLX1JlZmVyZW5jZS9IdW1hblBvcHVsYXRpb25Nb2RlbC9odW1hbi9CaXJ0aHNfMS5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1BvcHVsYXRpb25Hcm93dGhTRUlSX1JLX1JlZmVyZW5jZS9IdW1hblBvcHVsYXRpb25Nb2RlbC9odW1hbi9CaXJ0aHNfMS5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmMyNDQwMQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvUG9wdWxhdGlvbkdyb3d0aFNFSVJfUktfUmVmZXJlbmNlL0h1bWFuUG9wdWxhdGlvbk1vZGVsL2h1bWFuL0JpcnRoc18xLmNzdgpAQCAtMCwwICsxIEBACitpdGVyYXRpb24sdGltZSwKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvUG9wdWxhdGlvbkdyb3d0aFNFSVJfUktfUmVmZXJlbmNlL0h1bWFuUG9wdWxhdGlvbk1vZGVsL2h1bWFuL0JpcnRoc18yLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvUG9wdWxhdGlvbkdyb3d0aFNFSVJfUktfUmVmZXJlbmNlL0h1bWFuUG9wdWxhdGlvbk1vZGVsL2h1bWFuL0JpcnRoc18yLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNzhmNDUzCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Qb3B1bGF0aW9uR3Jvd3RoU0VJUl9SS19SZWZlcmVuY2UvSHVtYW5Qb3B1bGF0aW9uTW9kZWwvaHVtYW4vQmlydGhzXzIuY3N2CkBAIC0wLDAgKzEsMzMgQEAKK2l0ZXJhdGlvbix0aW1lLEVHLUZSRy1HMjEwMDAxLEVHLUZSRy1HMjEwMDAyLEVHLUZSRy1HMjEwMDAzLEVHLUZSRy1HMjEwMDA0LEVHLUZSRy1HMjEwMDA1LEVHLUxPRS1HMjQwMDAxLEVHLUxPRS1HMjQwMDAyLEVHLUxPRS1HMjQwMDAzLEVHLUxPRS1HMjQwMDA0LEVHLUxPRS1HMjQwMDA1LEVHLUxPRS1HMjQwMDA2LEVHLUxPRS1HMjQwMDA3LEVHLUxPRS1HMjQwMDA4LEVHLUxPRS1HMjQwMDA5LEVHLVVQRS1HMjkwMDAxLEVHLVVQRS1HMjkwMDAyLEVHLVVQRS1HMjkwMDAzLEVHLVVQRS1HMjkwMDA0LEVHLVVQRS1HMjkwMDA1LEVHLVVQRS1HMjkwMDA2LEVHLVVQRS1HMjkwMDA3LEVHLVVQRS1HMjkwMDA4LEVHLVVSRy1HMzAwMDAxLEVHLVVSRy1HMzAwMDAyLEVHLVVSRy1HMzAwMDAzLEVHLVVSRy1HMzAwMDA0CisxLFR1ZSAyNSBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMixXZWQgMjYgSmFuIDExLDExLjU5MjI4MTkxOTI0NjYzOCwxMC4zNTAyMTUyMzM3NDA5NjUsNi4wMjQ2Njc3MTUzNjY4MiwxMi40NTQ1NzA2ODY5NjQzNzksMTIuNTU0MDgyMTY1Nzg0Nzg4LDIwMi45NDE2NTkxNzYyODk2OCwyMjAuNTM2NDkwNzgzODMwMTcsMTgwLjc1MDcxNzI1NzM4ODIzLDE1Ny4wMDAyMzgzNTY3NTE4OCwxOTYuMjg5ODI5NDk5NjU1OTgsMzkuODYwNjkxOTU5MTc0MjUsMjMzLjAxODI0NzM5Mzk0NjM4LDQ2LjExNTY1NDMwMTAwOTc1LDEyMi40MTkzMTE5NjEzNzk2MywxMDkuNDIwNTUxMzc5MTg0MjIsMjUxLjE4NDQ1NDgxOTg2OTY3LDE4MS45NzMyMTk1MDY4NjgyOCw1MS4xNzc2MTgxOTE0Njc3NjUsMTQ4Ljk1MDEwMTUwODUyMTQ0LDk5LjE5NjYwMTQwMTIzODM1LDE0Ni41NDQ1MDA4ODM3MjQ4MiwxNjIuNzMzOTUzODM2NzY3ODUsMTQ0Ljc2NjYxMjIyNDQyMDY0LDMyOS45OTIzNjAyOTE1MDE5NCwyMS4wNDQxODMxMDg0OTIsMC4yNjM0OTEzMTAwODYyNAorMyxUaHUgMjcgSmFuIDExLDIzLjE4NDYxMDIwNzcxMzY5NiwyMC43MDA0NzE4Njg0MjU2NTUsMTIuMDQ5MzU5NTI5NDUyNjk2LDI0LjkwOTE5MTE5MjMxMTE0LDI1LjEwODIxNDU0Nzk5ODY2Nyw0MDUuODg0MTMwMTIwODM5NSw0NDEuMDczODYzNzE1Mzg3NDYsMzYxLjUwMjE1NzUxOTA5MTQ0LDMxNC4wMDExMDQ3MTU3MTI4NywzOTIuNTgwNDQ0MTYwMjAwMiw3OS43MjE1NDMzNjE0MzUxOCw0NjYuMDM3NDI2ODYyNzQ2Miw5Mi4yMzE0OTMwNjUwMDU2NCwyNDQuODM5MTEzNjAwOTg2NCwyMTguODQxNTQwNDQxNDQ5Miw1MDIuMzY5OTE0Mzc5NTY3NywzNjMuOTQ3MTY2OTA4MDcwMjQsMTAyLjM1NTQ0MTA5MzgxNzY3LDI5Ny45MDA3OTg4MTg2NDAzLDE5OC4zOTM1OTk1ODk2NzU4LDI5My4wODk1ODc5NDY2MjU1LDMyNS40Njg1NTg2MTA2NTI4LDI4OS41MzM4MDM1MTY0NDgyLDY1OS45ODYwNDA1NTUwODQ5LDQyLjA4ODQ1MDM5Mzg4NDc2LDAuNTI2OTgzNjc0MTM5ODI3OQorNCxGcmkgMjggSmFuIDExLDM0Ljc3Njk4NDg2NTU4NjY3LDMxLjA1MDc2OTkwNDIxOTY5NSwxOC4wNzQwNzU0NDIzNTQwMzMsMzcuMzYzODYxNTE2MjM5NTcsMzcuNjYyMzk3MTQ2ODQyNTE1LDYwOC44Mjc0MTI4MzY4OTY3LDY2MS42MTIxMTg3OTgyMDEyLDU0Mi4yNTQzMjA3ODgwMDE4LDQ3MS4wMDI1OTkwNzkzOTU1Nyw1ODguODcxODQzOTg0NzczMiwxMTkuNTgyNTU0MjA3NDIwNjcsNjk5LjA1NzUzODQxMDEyODQsMTM4LjM0NzUxNjI5MjcyNTUyLDM2Ny4yNTk0MDQ5MjA3NzkxLDMyOC4yNjI5NjcxODg1NDU2NCw3NTMuNTU2Mzc4NjgzMTEzNiw1NDUuOTIxODQyMjA2NTE3OCwxNTMuNTMzNDY4NzA3ODY4NzYsNDQ2Ljg1MjA5MTkzMjc0MDEsMjk3LjU5MDk5NDU2Njg5OTgsNDM5LjYzNTI2MTE5MTA0Njc3LDQ4OC4yMDM4MTQzMjQyNTksNDM0LjMwMTU3Mzg3ODM5OTA0LDk4OS45ODEwNDA3OTYwMjg4LDYzLjEzMjgwMTg1NjUxNTAzLDAuNzkwNDc3MDkyMTY0OTgwMworNSxTYXQgMjkgSmFuIDExLDQ2LjM2OTQwNTg5MzA1MSw0MS40MDExMDkzNDEyODg2OTUsMjQuMDk4ODE1NDU0MTY3MjMsNDkuODE4NTgxNjU4OTQ4OTIsNTAuMjE2NjI5OTYyNTE3MjEsODExLjc3MTUwNzMyNzcwODYsODgyLjE1MTI1NjAzNTc5OTUsNzIzLjAwNzIwNzA2NzAxMTQsNjI4LjAwNDcyMTQ1MDMxMiw3ODUuMTY0MDI4OTc2NTE2NCwxNTkuNDQzNzI0NDk3NzY4NDcsOTMyLjA3ODU4MjAzOTgyMTUsMTg0LjQ2MzcyMzk4NDkwNzMsNDg5LjY4MDE4NTkyMjcxNjYsNDM3LjY4NDgzMTYyMjIyNDcsMTAwNC43NDM4NDc3MzQ1MjY5LDcyNy44OTcyNDU0MDUxMjI2LDIwNC43MTE3MDEwMzQ0Mzk3Niw1OTUuODAzOTgwODUzMjA0LDM5Ni43ODg3ODYzMzQ0OTczMyw1ODYuMTgxNTIwNjE5MzMzNSw2NTAuOTM5NzIwOTgwMTkwMSw1NzkuMDY5OTIzMzEyNTg5NywxMzE5Ljk3NzM2MTAxOTYxNDQsODQuMTc3MjM3NDk2NzE5NTMsMS4wNTM5NzE1NjQxNjU5MTM1Cis2LFN1biAzMCBKYW4gMTEsNTcuOTYxODczMjkwMjkyMTk2LDUxLjc1MTQ5MDE3OTc5ODI0LDMwLjEyMzU3OTU2NDk4ODY1Niw2Mi4yNzMzNTE2MjA2Mzg0Nyw2Mi43NzA5MTI5OTUyMjM2MiwxMDE0LjcxNjQxMzU5NjUyMTYsMTEwMi42OTEyNzU0MzE3MTExLDkwMy43NjA4MTYzNTkwMTI0LDc4NS4wMDc0NzE4MzA5NzM5LDk4MS40NTY5OTkxMzg1Njk2LDE5OS4zMDUwNTQyMzMxMTYzLDExNjUuMTAwNTU3NzU1NTUzNCwyMzAuNTgwMTE2MTQyMjg4Nyw2MTIuMTAxNDU2NjA4NzU3NSw1NDcuMTA3MTMzNzQ0MjM3MiwxMjU1LjkzMjMyMTUzNzgyNTEsOTA5Ljg3MzM3NjUwNjc5NTYsMjU1Ljg5MDEzODA3NDM0OTQ0LDc0NC43NTY0NjU1ODI0MTU0LDQ5NS45ODY5NzQ4OTQwNTU1NSw3MzIuNzI4MzY2MjMzODMwNSw4MTMuNjc2Mjc4NTgxMDQ5Niw3MjMuODM4ODUxODIxMzM2LDE2NDkuOTc1MDAxMjMxMTIwNCwxMDUuMjIxNzU3MzE0ODM0OTUsMS4zMTc0NjcwOTAxNDY4NDIKKzcsTW9uIDMxIEphbiAxMSw2OS41NTQzODcwNTc0OTU3Myw2Mi4xMDE5MTI0MTk5MTM5NCwzNi4xNDgzNjc3NzQ5MTQ3Myw3NC43MjgxNzE0MDE1MDc1Miw3NS4zMjUyNDYyNDUxNjI1NywxMjE3LjY2MjEzMTY0NjU4MzUsMTMyMy4yMzIxNzY5ODk0NjQ1LDEwODQuNTE1MTQ4NjY2ODk2Myw5NDIuMDEwODUwMjIzODkzNSwxMTc3Ljc1MDc1NDQ3NDA3NCwyMzkuMTY2NTQzNDE0MTAxOTQsMTM5OC4xMjM0NjU1NjEwNTI0LDI3Ni42OTY2OTI3NjU2MDc4LDczNC41MjMyMTY5ODA4NjAzLDY1Ni41Mjk4NzM1NTYzMzM0LDE1MDcuMTIxODAwMDk3MDI4NywxMDkxLjg1MDIzNTUxNDQ0OTIsMzA3LjA2ODc3OTgyODQxNjcsODkzLjcwOTU0NjEyMjc1NzQsNTk1LjE4NTU2MDI0NzE2MTcsODc5LjI3NTc5ODAzNjg4MjIsOTc2LjQxMzQ4NzEyOTQ0MTQsODY4LjYwODM1OTQwNjk1NDYsMTk3OS45NzM5NjE0MzU4MjY4LDEyNi4yNjYzNjEzMTExOTgwMywxLjU4MDk2MzY3MDExMTk4MworOCxUdWUgMSBGZWIgMTEsODEuMTQ2OTQ3MTk0ODQ3MDcsNzIuNDUyMzc2MDYxODAxMzksNDIuMTczMTgwMDg0MDQxODQsODcuMTgzMDQxMDAxNzU1Myw4Ny44Nzk2Mjk3MTI1MzQ5NCwxNDIwLjYwODY2MTQ4MTE0MDYsMTU0My43NzM5NjA3MTI1ODgyLDEyNjUuMjcwMjAzOTkzNTU1MiwxMDk5LjAxNDg1NjYzMTU4MjIsMTM3NC4wNDUyOTQ5ODYxNjk3LDI3OS4wMjgxOTIwNDEzNjMxLDE2MzEuMTQ3MzA1NDYwMDQ2MywzMjIuODEzNDUzODU1NjAyMiw4NTYuOTQ1NDY3MDQwOTgzOSw3NjUuOTUzMDUxMDYwMjY0MSwxNzU4LjMxMjI4MzQxNjE1NTQsMTI3My44Mjc4MjI0MzA5OTM4LDM1OC4yNDc2MjYyOTc0NjAzLDEwNDIuNjYzMjIyNDc2NjEyOSw2OTQuMzg0NTQyMzk1NDAyNiwxMDI1LjgyMzgxNjAzMDgzMywxMTM5LjE1MTM0NjYyNzk2OSwxMDEzLjM3ODQ0NjA3MTc2MTYsMjMwOS45NzQyNDE2MzkwMTQsMTQ3LjMxMTA0OTQ4NjE0NTQ2LDEuODQ0NDYxMzA0MDY1NTUxCis5LFdlZCAyIEZlYiAxMSw5Mi43Mzk1NTM3MDI1MzE2NSw4Mi44MDI4ODExMDU2MjYyLDQ4LjE5ODAxNjQ5MjQ2NjM2NSw5OS42Mzc5NjA0MjE1ODEwOCwxMDAuNDM0MDYzMzk3NTQxNiwxNjIzLjU1NjAwMzEwMzQ0MDYsMTc2NC4zMTY2MjY2MDQ2MTEyLDE0NDYuMDI1OTgyMzQxODgxLDEyNTYuMDE5NDkxMDU2NTUyNiwxNTcwLjM0MDYyMDY3Nzk5NjksMzE4Ljg5MDAwMDExNTUzNzc2LDE4NjQuMTcyMDc3NDU2MjYzNywzNjguOTMwMzk5NDEzMDA5Nyw5NzkuMzY4MjA2NzkxMDg2OCw4NzUuMzc2NjY2MjU3Nzc5NywyMDA5LjUwMzc3MTQ5OTIyNDMsMTQ1NS44MDYxMzcyNTkzNDE4LDQwOS40MjY2Nzc0ODIyOTkxLDExOTEuNjE3NDk0NjQ2MzY1LDc5My41ODM5MjEzNDAzNjUxLDExNzIuMzcyNDIwMjE4MDI3OSwxMzAxLjg4OTg1NzA3OTIzNTgsMTE1OC4xNDkxMTE4MTgwNzI1LDI2MzkuOTc1ODQxODQ1OTYxNCwxNjguMzU1ODIxODQwMDEzNzYsMi4xMDc5NTk5OTIwMTE3NjEzCisxMCxUaHUgMyBGZWIgMTEsMTA0LjMzMjIwNjU4MDczNDk5LDkzLjE1MzQyNzU1MTU1Mzk1LDU0LjIyMjg3NzAwMDI4NDc0LDExMi4wOTI5Mjk2NjExODQyLDExMi45ODg1NDczMDAzODM0NCwxODI2LjUwNDE1NjUxNjczMDcsMTk4NC44NjAxNzQ2NjkwNjE3LDE2MjYuNzgyNDgzNzE0NzY2OCwxNDEzLjAyNDc1MzUwMTMxNjEsMTc2Ni42MzY3MzE1NTI2OTczLDM1OC43NTE5Njc2MzcyNjM2LDIwOTcuMTk3NzgxNTUzNDMzLDQxNS4wNDc1Mjk0Mzg1Njg0LDExMDEuNzkxNDM2MjMzMTI4LDk4NC44MDA3MTkxNTA2MzE4LDIyNjAuNjk2MjY0MzUwMjU1LDE2MzcuNzg1MTgwMDAyNDA1Miw0NjAuNjA1OTMzMzgzNzUyMjQsMTM0MC41NzIzNjI2MzQzOTgxLDg5Mi43ODM2OTcwODM2Mzc1LDEzMTguOTIxNjEwNjAwODExOCwxNDY0LjYyOTAxODQ4NTg0NjcsMTMwMi45MjAzNTY2NDgyMDQ1LDI5NjkuOTc4NzYyMDYxOTQ5LDE4OS40MDA2NzgzNzMxMzk5LDIuMzcxNDU5NzMzOTU0ODMyCisxMSxGcmkgNCBGZWIgMTEsMTE1LjkyNDkwNTgyOTY0MjU3LDEwMy41MDQwMTUzOTk3NTAzLDYwLjI0Nzc2MTYwNzU5MzM0LDEyNC41NDc5NDg3MjA3NjM4NywxMjUuNTQzMDgxNDIxMjYxMjYsMjAyOS40NTMxMjE3MjQyNTgsMjIwNS40MDQ2MDQ5MDk0Njg2LDE4MDcuNTM5NzA4MTE1MTAzOCwxNTcwLjAzMDY0Mzk2ODM4NTQsMTk2Mi45MzM2Mjc2MTM0MTE4LDM5OC42MTQwOTQ2MDcxNzgzLDIzMzAuMjI0NDE3NzU1MjgyNSw0NjEuMTY0ODQzOTMzMDE2MTMsMTIyNC4yMTUxNTUzNjkwNjYsMTA5NC4yMjUyMDk3NDA1NzAzLDI1MTEuODg5NzYxOTczMjY2LDE4MTkuNzY0OTUwNjYzMDk0Niw1MTEuNzg1Mzk0MDAyNjM4MSwxNDg5LjUyNzgyNjQ0MzA5NCw5OTEuOTgzODY5NjI2ODA1OCwxNDY1LjQ3MTM4NzE4MTUzLDE2MjcuMzY4ODMwODUwNDA1MiwxNDQ3LjY5MjE4MDU2NDQ3NDcsMzI5OS45ODMwMDIyOTIyNTcsMjEwLjQ0NTYxOTA4NTg2MDUsMi42MzQ5NjA1Mjk4OTg5NzkzCisxMixTYXQgNSBGZWIgMTEsMTI3LjUxNzY1MTQ0OTQzOTkxLDExMy44NTQ2NDQ2NTAzODA4Niw2Ni4yNzI2NzAzMTQ0ODg1NiwxMzcuMDAzMDE3NjAwNTE5NDYsMTM4LjA5NzY2NTc2MDM3NiwyMjMyLjQwMjg5ODcyOTI2ODYsMjQyNS45NDk5MTczMjkzNjE2LDE5ODguMjk3NjU1NTQ1Nzg0NywxNzI3LjAzNzE2MjQ2MDI3MywyMTU5LjIzMTMwODg2MzI4MjMsNDM4LjQ3NjM4MTAyNTkxOTg2LDI1NjMuMjUxOTg2MDY1NTQyLDUwNy4yODIzNDI4OTcwOTEsMTM0Ni42MzkzNjQyMDA4NjA0LDEyMDMuNjUwMTM4MDI5MzQ2NiwyNzYzLjA4NDI2NDM3MjI3NzYsMjAwMS43NDU0NDkyNDQzMjM1LDU2Mi45NjUwNTkzMzk3NzU3LDE2MzguNDgzODg2MDc0ODM3NSwxMDkxLjE4NDQzODk3MTQ1ODYsMTYxMi4wMjE3NDk5NjI1MjcsMTc5MC4xMDkyOTQxNzU1MTU1LDE1OTIuNDY0NTgzNTY5MTk4NiwzNjI5Ljk4ODU2MjU0MjE2NywyMzEuNDkwNjQzOTc4NTEyMzcsMi44OTg0NjIzNzk4NDg0MTcKKzEzLFN1biA2IEZlYiAxMSwxMzkuMTEwNDQzNDQwMzEyNCwxMjQuMjA1MzE1MzAzNjExMTksNzIuMjk3NjAzMTIxMDY2NzYsMTQ5LjQ1ODEzNjMwMDY1MDIsMTUwLjY1MjMwMDMxNzkyODQ4LDI0MzUuMzUzNDg3NTM1MDEsMjY0Ni40OTYxMTE5MzIyNjc1LDIxNjkuMDU2MzI2MDA5NzAwNiwxODg0LjA0NDMwODk3OTQ4OTYsMjM1NS41Mjk3NzUzMDU0NDcsNDc4LjMzODgyNjg5NDEyNTcsMjc5Ni4yODA0ODY0ODc5MzYzLDU1My40MDAwMjYzMzE1MywxNDY5LjA2NDA2MjczMDQ3LDEzMTMuMDc1NTA0MDE4NzExOSwzMDE0LjI3OTc3MTU1MTMwNywyMTgzLjcyNjY3NTc0OTAwMiw2MTQuMTQ0OTI5Mzk1OTg0MSwxNzg3LjQ0MDU0MTUzMjAwOTUsMTE5MC4zODU0MDUxMTkxODEzLDE3NTguNTcyNjk4OTQ2MTQ2OCwxOTUyLjg1MDQwODQ2Mzc3OTgsMTczNy4yMzc1NjU2NjQ2OTIsMzk1OS45OTU0NDI4MTY5NTY3LDI1Mi41MzU3NTMwNTE0MzIwNywzLjE2MTk2NTI4MzgwNzM2MjQKKzE0LE1vbiA3IEZlYiAxMSwxNTAuNzAzMjgxODAyNDQ1NjQsMTM0LjU1NjAyNzM1OTYwNyw3OC4zMjI1NjAwMjc0MjQ0NCwxNjEuOTEzMzA0ODIxMzU1NSwxNjMuMjA2OTg1MDk0MTE5NzQsMjYzOC4zMDQ4ODgxNDQ3MzMsMjg2Ny4wNDMxODg3MjE3MTcsMjM0OS44MTU3MTk1MDk3NDU2LDIwNDEuMDUyMDgzNTI4NTQ5NSwyNTUxLjgyOTAyNjk0MzA0OSw1MTguMjAxNDMyMjEyNDM0LDMwMjkuMzA5OTE5MDI2MTk4Myw1OTkuNTE3ODk0MjM3MDcxOSwxNTkxLjQ4OTI1MDk1OTg1MjEsMTQyMi41MDEzMDc3MTA0MTU5LDMyNjUuNDc2MjgzNTE0Mzc4LDIzNjUuNzA4NjMwMTgwMDQyMyw2NjUuMzI1MDA0MTcyMDgyOCwxOTM2LjM5Nzc5MjgxNjk5NjMsMTI4OS41ODY3NjgwNzE1NjQsMTkwNS4xMjQyMzQxMzQ3MzUyLDIxMTUuNTkyMTczNzE3ODAzNywxODgyLjAxMTEyNjg1MzI3MjgsNDI5MC4wMDM2NDMxMjE5MDksMjczLjU4MDk0NjMwNDk1NjUsMy40MjU0NjkyNDE3ODAwMzIKKzE1LFR1ZSA4IEZlYiAxMSwxNjIuMjk2MTY2NTM2MDI1MTQsMTQ0LjkwNjc4MDgxODUzMzgzLDg0LjM0NzU0MTAzMzY1Nzk4LDE3NC4zNjg1MjMxNjI4MzQ1LDE3NS43NjE3MjAwODkxNTA2LDI4NDEuMjU3MTAwNTYxNjgzMywzMDg3LjU5MTE0NzcwMTIzOTYsMjUzMC41NzU4MzYwNDg4MTA3LDIxOTguMDYwNDg2MTA5OTY1LDI3NDguMTI5MDYzNzc5MjI3Niw1NTguMDY0MTk2OTgxNDgzMywzMjYyLjM0MDI4MzY4NDA1NTUsNjQ1LjYzNTk0NjYxNDQ1NDcsMTcxMy45MTQ5Mjg4OTA5NjgsMTUzMS45Mjc1NDkxMDYyMTIsMzUxNi42NzM4MDAyNjU1MDY1LDI1NDcuNjkxMzEyNTQwMzU5LDcxNi41MDUyODM2Njg4OTAyLDIwODUuMzU1NjM5OTMyMTgxNSwxMzg4Ljc4ODUyNzgzMDE5MTcsMjA1MS42NzYzNTU1MzA2MzgsMjI3OC4zMzQ1ODk5NDAxOTQ3LDIwMjYuNzg1MjY3MTM3MjU3Myw0NjIwLjAxMzE2MzQ2MjMwOSwyOTQuNjI2MjIzNzM5NDIyNDcsMy42ODg5NzQyNTM3NzA2NDUKKzE2LFdlZCA5IEZlYiAxMSwxNzMuODg5MDk3NjQxMjM2MywxNTUuMjU3NTc1NjgwNTU3MzgsOTAuMzcyNTQ2MTM5ODYzNzYsMTg2LjgyMzc5MTMyNTI4NjUyLDE4OC4zMTY1MDUzMDMyMjE4NywzMDQ0LjIxMDEyNDc4OTEwNTUsMzMwOC4xMzk5ODg4NzQzNjI2LDI3MTEuMzM2Njc1NjI5Nzg4NywyMzU1LjA2OTUxNjcyNjI0NjUsMjk0NC40Mjk4ODU4MTcxMjQ2LDU5Ny45MjcxMjEyMDE5MDk2LDM0OTUuMzcxNTgwNDY1MjM3NSw2OTEuNzU0MTgzNDY0NDE2MSwxODM2LjM0MTA5NjUyNTc3NDcsMTY0MS4zNTQyMjgyMDc4NDkyLDM3NjcuODcyMzIxODA4NzExLDI3MjkuNjc0NzIyODMyODYyMiw3NjcuNjg1NzY3ODg3MjI1NiwyMjM0LjMxNDA4Mjg3OTk0NywxNDg3Ljk5MDY4NDM5NjY1MjgsMjE5OC4yMjkwNjMxMzYxOTc1LDI0NDEuMDc3NjU3MTMzNTQ5LDIxNzEuNTU5OTg2NTE4OTYyLDQ5NTAuMDI0MDAzODQzNDI5LDMxNS42NzE1ODUzNTUxNjY1LDMuOTUyNDgwMzE5NzgzNDEyNgorMTcsVGh1IDEwIEZlYiAxMSwxODUuNDgyMDc1MTE4MjY0NjIsMTY1LjYwODQxMTk0NTg0MzE2LDk2LjM5NzU3NTM0NjEzODEsMTk5LjI3OTEwOTMwODkxMDgsMjAwLjg3MTM0MDczNjUzNDQ4LDMyNDcuMTYzOTYwODMwMjQ4LDM1MjguNjg5NzEyMjQ0NjEzLDI4OTIuMDk4MjM4MjU1NTcwMywyNTEyLjA3OTE3NTM3OTkwOCwzMTQwLjczMTQ5MzA1OTg4MDQsNjM3Ljc5MDIwNDg3NDM1MjIsMzcyOC40MDM4MDkzNzM0Njk0LDczNy44NzI2MDQ3ODc2OTM4LDE5NTguNzY3NzUzODY2MjMxNSwxNzUwLjc4MTM0NTAxNzA3ODEsNDAxOS4wNzE4NDgxNDgwMSwyOTExLjY1ODg2MTA2MDQ1ODUsODE4Ljg2NjQ1NjgyNzkwNjQsMjM4My4yNzMxMjE2NjI2NzMsMTU4Ny4xOTMyMzc3NzI1MzMyLDIzNDQuNzgyMzU2OTUzNzU5NSwyNjAzLjgyMTM3NTMwMDQ3NDMsMjMxNi4zMzUyODUwMDA3MDIsNTI4MC4wMzYxNjQyNzA1NDc1LDMzNi43MTcwMzExNTI1MjUzNSw0LjIxNTk4NzQzOTgyMjU1MworMTgsRnJpIDExIEZlYiAxMSwxOTcuMDc1MDk4OTY3Mjk1NTYsMTc1Ljk1OTI4OTYxNDU1Njg0LDEwMi40MjI2Mjg2NTI1Nzc1NCwyMTEuNzM0NDc3MTEzOTA2NjgsMjEzLjQyNjIyNjM4OTI4OTMzLDM0NTAuMTE4NjA4Njg4MzU4NiwzNzQ5LjI0MDMxNzgxNTUyNDYsMzA3Mi44NjA1MjM5MjkwNTIsMjY2OS4wODk0NjIwNzM0NiwzMzM3LjAzMzg4NTUxMDYzNDcsNjc3LjY1MzQ0Nzk5OTQ0ODQsMzk2MS40MzY5NzA0MTI0ODEsNzgzLjk5MTIxMDU4NTAyNiwyMDgxLjE5NDkwMDkxNDI5OCwxODYwLjIwODg5OTUzNTY0OTYsNDI3MC4yNzIzNzkyODc0MjMsMzA5My42NDM3MjcyMjYwNjU1LDg3MC4wNDczNTA0OTE3NTI1LDI1MzIuMjMyNzU2MjgyNzQ3LDE2ODYuMzk2MTg3OTU5NDIxMiwyNDkxLjMzNjIzNjk4NTY3MSwyNzY2LjU2NTc0NDQ0MzU3NjUsMjQ2MS4xMTExNjI1ODQ3OTUyLDU2MTAuMDQ5NjQ0NzQ4OTQ3LDM1Ny43NjI1NjExMzE4MzU4LDQuNDc5NDk1NjEzODkyMjg1CisxOSxTYXQgMTIgRmViIDExLDIwOC42NjgxNjkxODg1MTQ3MiwxODYuMzEwMjA4Njg2ODYzOTQsMTA4LjQ0NzcwNjA1OTI3ODM1LDIyNC4xODk4OTQ3NDA0NzM0LDIyNS45ODExNjIyNjE2ODcsMzY1My4wNzQwNjgzNjY2ODUsMzk2OS43OTE4MDU1OTA2MTkzLDMyNTMuNjIzNTMyNjUzMTE4LDI4MjYuMTAwMzc2ODA5NDExNSwzNTMzLjMzNzA2MzE3MjUyNiw3MTcuNTE2ODUwNTc3ODM1Niw0MTk0LjQ3MTA2MzU4NjAwMiw4MzAuMTEwMDAwODU3MTUwMSwyMjAzLjYyMjUzNzY3MTkzMjYsMTk2OS42MzY4OTE3NjUzMTMzLDQ1MjEuNDczOTE1MjMwOTc0LDMyNzUuNjI5MzIxMzMyNTkxLDkyMS4yMjg0NDg4Nzk1ODI2LDI2ODEuMTkyOTg2NzQyNTUxNSwxNzg1LjU5OTUzNDk1ODkwMiwyNjM3Ljg5MDcwMzIzNDI3NCwyOTI5LjMxMDc2NDU2NTQ1NiwyNjA1Ljg4NzYxOTI3MzU1MzQsNTk0MC4wNjQ0NDUyODM5MDgsMzc4LjgwODE3NTI5MzQzNDQzLDQuNzQzMDA0ODQxOTk2ODE1CisyMCxTdW4gMTMgRmViIDExLDIyMC4yNjEyODU3ODIxMDc0OCwxOTYuNjYxMTY5MTYyOTMwMTUsMTE0LjQ3MjgwNzU2NjMzNzA1LDIzNi42NDUzNjIxODg4MTAyLDIzOC41MzYxNDgzNTM5Mjg3MiwzODU2LjAzMDMzOTg2ODQ3MzcsNDE5MC4zNDQxNzU1NzM0MjgsMzQzNC4zODcyNjQ0MzA2NjYsMjk4My4xMTE5MTk1OTAyNzk3LDM3MjkuNjQxMDI2MDQ4NzAyLDc1Ny4zODA0MTI2MTAxNTI1LDQ0MjcuNTA2MDg4ODk3NzU5LDg3Ni4yMjg5NzU2MDQ4MDQyLDIzMjYuMDUwNjY0MTQxMDkxLDIwNzkuMDY1MzIxNzA3ODIzNCw0NzcyLjY3NjQ1NTk4MjY3NiwzNDU3LjYxNTY0MzM4Mjk0OTcsOTcyLjQwOTc1MTk5MjIxNTcsMjgzMC4xNTM4MTMwNDQ0NywxODg0LjgwMzI3ODc3MjU2NTQsMjc4NC40NDU3NTU3MDE5MTYsMzA5Mi4wNTY0MzU2Njg3MTg3LDI3NTAuNjY0NjU1MDY5Mjk3LDYyNzAuMDgwNTY1ODgwNzExLDM5OS44NTM4NzM2Mzc2NTgwNyw1LjAwNjUxNTEyNDE0MDM2OAorMjEsTW9uIDE0IEZlYiAxMSwyMzEuODU0NDQ4NzQ4MjU5MiwyMDcuMDEyMTcxMDQyOTIwOTMsMTIwLjQ5NzkzMzE3Mzg0OTg5LDI0OS4xMDA4Nzk0NTkxMTYzOCwyNTEuMDkxMTg0NjY2MjE1MTYsNDA1OC45ODc0MjMxOTY5NjksNDQxMC44OTc0Mjc3Njc0ODEsMzYxNS4xNTE3MTkyNjQ1ODYsMzE0MC4xMjQwOTA0MTg1NzI1LDM5MjUuOTQ1Nzc0MTQyMjk4LDc5Ny4yNDQxMzQwOTcwMzYsNDY2MC41NDIwNDYzNTE0ODMsOTIyLjM0ODEzNDgyODcyNjEsMjQ0OC40NzkyODAzMjM3MzUsMjE4OC40OTQxODkzNjQ5MjcsNTAyMy44ODAwMDE1NDY1NDk1LDM2MzkuNjAyNjkzMzgwMDUxMywxMDIzLjU5MTI1OTgzMDQ3MDcsMjk3OS4xMTUyMzUxOTA4ODMsMTk4NC4wMDc0MTk0MDE5OTcsMjkzMS4wMDEzOTQzOTA5MzksMzI1NC44MDI3NTc3NTU5NjM3LDI4OTUuNDQyMjY5OTc0MzQzLDY2MDAuMDk4MDA2NTQ0NjM2LDQyMC44OTk2NTYxNjQ4NDM0LDUuMjcwMDI2NDYwMzI3MTU1CisyMixUdWUgMTUgRmViIDExLDI0My40NDc2NTgwODcxNTU2NywyMTcuMzYzMjE0MzI3MDAyMTQsMTI2LjUyMzA4Mjg4MTkxMzQxLDI2MS41NTY0NDY1NTE1OTE0LDI2My42NDYyNzExOTg3NDc0LDQyNjEuOTQ1MzE4MzU1NDIyLDQ2MzEuNDUxNTYyMTc2MzA4NSwzNzk1LjkxNjg5NzE1Nzc3NCwzMjk3LjEzNjg4OTI5NjgwNiw0MTIyLjI1MTMwNzQ1NjQ1OSw4MzcuMTA4MDE1MDM5MTI0Niw0ODkzLjU3ODkzNTk1MDg5Nyw5NjguNDY3NDc4NTI5NjUzOCwyNTcwLjkwODM4NjIyMTgyNDUsMjI5Ny45MjM0OTQ3MzgzNzc1LDUyNzUuMDg0NTUxOTI2NjE2LDM4MjEuNTkwNDcxMzI2ODEsMTA3NC43NzI5NzIzOTUxNjY2LDMxMjguMDc3MjUzMTg0MTc4NSwyMDgzLjIxMTk1Njg0ODc4NiwzMDc3LjU1NzYxOTMwMzY4OCwzNDE3LjU0OTczMDgyOTgwMTMsMzA0MC4yMjA0NjM5OTEwMDc0LDY5MzAuMTE2NzY3MjgwOTY1LDQ0MS45NDU1MjI4NzUzMjcyNCw1LjUzMzUzODg1MDU2MTM5NAorMjMsV2VkIDE2IEZlYiAxMSwyNTUuMDQwOTEzNzk4OTgyMywyMjcuNzE0Mjk5MDE1MzM5MywxMzIuNTQ4MjU2NjkwNjIzOTYsMjc0LjAxMjA2MzQ2NjQzNDUsMjc2LjIwMTQwNzk1MTcyNjIsNDQ2NC45MDQwMjUzNDcwODMsNDg1Mi4wMDY1Nzg4MDM0MzksMzk3Ni42ODI3OTgxMTMxMTksMzQ1NC4xNTAzMTYyMjc0OTM1LDQzMTguNTU3NjI1OTk0MzI1LDg3Ni45NzIwNTU0MzcwNTU5LDUxMjYuNjE2NzU3Njk5NzM4LDEwMTQuNTg3MDA2NzA4MzI1NCwyNjkzLjMzNzk4MTgzNzMxNywyNDA3LjM1MzIzNzgyOTkyNCw1NTI2LjI5MDEwNzEyNjg5NCw0MDAzLjU3ODk3NzIyNjEzNzMsMTEyNS45NTQ4ODk2ODcxMjMsMzI3Ny4wMzk4NjcwMjY3Mzc3LDIxODIuNDE2ODkxMTE0NTE5LDMyMjQuMTE0NDMwNDQyNTExLDM1ODAuMjk3MzU0ODkyODM0NCwzMTg0Ljk5OTIzNzEyMTYwNjMsNzI2MC4xMzY4NDgwOTQ5NzgsNDYyLjk5MTQ3Mzc2OTQ0NjQzLDUuNzk3MDUyMjk0ODQ3MzA1NgorMjQsVGh1IDE3IEZlYiAxMSwyNjYuNjM0MjE1ODgzOTI0NDcsMjM4LjA2NTQyNTEwODA5OCwxMzguNTczNDU0NjAwMDc3OTUsMjg2LjQ2NzczMDIwMzg0NDksMjg4Ljc1NjU5NDkyNTM1MjUsNDY2Ny44NjM1NDQxNzUxOTQsNTA3Mi41NjI0Nzc2NTIzOTksNDE1Ny40NDk0MjIxMzM1MTM1LDM2MTEuMTY0MzcxMjEzMTQ0LDQ1MTQuODY0NzI5NzU5MDMyLDkxNi44MzYyNTUyOTE0NjgsNTM1OS42NTU1MTE2MDE3MjcsMTA2MC43MDY3MTkzNjU0Nzg0LDI4MTUuNzY4MDY3MTcyMTcwNSwyNTE2Ljc4MzQxODY0MTMxOSw1Nzc3LjQ5NjY2NzE1MTQwMSw0MTg1LjU2ODIxMTA4MDk0MywxMTc3LjEzNzAxMTcwNzE1NzIsMzQyNi4wMDMwNzY3MjA5NDM3LDIyODEuNjIyMjIyMjAwNzgxLDMzNzAuNjcxODI3ODA5NzUwNSwzNzQzLjA0NTYyOTk0NzY2NDYsMzMyOS43Nzg1ODkzNjg0NTU0LDc1OTAuMTU4MjQ4OTkxOTUzLDQ4NC4wMzc1MDg4NDc1Mzc1LDYuMDYwNTY2NzkzMTg5MTAyNQorMjUsRnJpIDE4IEZlYiAxMSwyNzguMjI3NTY0MzQyMTY3NzQsMjQ4LjQxNjU5MjYwNTQ0MzkyLDE0NC41OTg2NzY2MTAzNzE3NywyOTguOTIzNDQ2NzY0MDIxODMsMzAxLjMxMTgzMjExOTgyNzEsNDg3MC44MjM4NzQ4NDMwMDIsNTI5My4xMTkyNTg3MjY3Miw0MzM4LjIxNjc2OTIyMTg1MSwzNzY4LjE3OTA1NDI1NjI3MDMsNDcxMS4xNzI2MTg3NTM3MjQsOTU2LjcwMDYxNDYwMjk5ODQsNTU5Mi42OTUxOTc2NjA1OTgsMTEwNi44MjY2MTY1MDE4NTE1LDI5MzguMTk4NjQyMjI4MzQ1OCwyNjI2LjIxNDAzNzE3NDMxMTcsNjAyOC43MDQyMzIwMDQxNTksNDM2Ny41NTgxNzI4OTQxNDEsMTIyOC4zMTkzMzg0NTYwODkzLDM1NzQuOTY2ODgyMjY5MTc5NywyMzgwLjgyNzk1MDEwOTE2LDM1MTcuMjI5ODExNDA3NzUxLDM5MDUuNzk0NTU1OTk2ODk3NSwzNDc0LjU1ODUyMDczMzg3Miw3OTIwLjE4MDk2OTk3NzE3MSw1MDUuMDgzNjI4MTA5OTM3MjUsNi4zMjQwODIzNDU1OTA5OTkKKzI2LFNhdCAxOSBGZWIgMTEsMjg5LjgyMDk1OTE3Mzg5NzU2LDI1OC43Njc4MDE1MDc1NDI3NCwxNTAuNjIzOTIyNzIxNjAxOSwzMTEuMzc5MjEzMTQ3MTY0NjUsMzEzLjg2NzExOTUzNTM1MSw1MDczLjc4NTAxNzM1Mzc1OSw1NTEzLjY3NjkyMjAyOTkyOSw0NTE4Ljk4NDgzOTM4MTAyMywzOTI1LjE5NDM2NTM1OTM4NCw0OTA3LjQ4MTI5Mjk4MTU0MjUsOTk2LjU2NTEzMzM3MjI4NDgsNTgyNS43MzU4MTU4ODAwNzcsMTE1Mi45NDY2OTgxMTgxODI0LDMwNjAuNjI5NzA3MDA3Nzk5NCwyNzM1LjY0NTA5MzQzMDY1NDUsNjI3OS45MTI4MDE2ODkxODU1LDQ1NDkuNTQ4ODYyNjY4NjQyLDEyNzkuNTAxODY5OTM0NzM3NywzNzIzLjkzMTI4MzY3MzgzMDQsMjQ4MC4wMzQwNzQ4NDEyNDY0LDM2NjMuNzg4MzgxMjM4ODU5NSw0MDY4LjU0NDEzMzA0MzEzNiwzNjE5LjMzOTAzMTIyMDE3MSw4MjUwLjIwNTAxMTA1NTkxNiw1MjYuMTI5ODMxNTU2OTgyNSw2LjU4NzU5ODk1MjA1NzIxMjUKKzI3LFN1biAyMCBGZWIgMTEsMzAxLjQxNDQwMDM3OTI5OTYsMjY5LjExOTA1MTgxNDU1OTksMTU2LjY0OTE5MjkzMzg2NDYsMzIzLjgzNTAyOTM1MzQ3MjcsMzI2LjQyMjQ1NzE3MjEyNDgsNTI3Ni43NDY5NzE3MTA3MDgsNTczNC4yMzU0Njc1NjU1NTcsNDY5OS43NTM2MzI2MTM5MjEsNDA4Mi4yMTAzMDQ1MjQ5OTgzLDUxMDMuNzkwNzUyNDQ1NjI5LDEwMzYuNDI5ODExNTk5OTY0NSw2MDU4Ljc3NzM2NjI2Mzg5NCwxMTk5LjA2Njk2NDIxNTIwODEsMzE4My4wNjEyNjE1MTI0OTIsMjg0NS4wNzY1ODc0MTIwOTcsNjUzMS4xMjIzNzYyMTA1LDQ3MzEuNTQwMjgwNDA3MzU2NSwxMzMwLjY4NDYwNjE0MzkyMTIsMzg3Mi44OTYyODA5MzcyNzcsMjU3OS4yNDA1OTYzOTg2MjUsMzgxMC4zNDc1MzczMDU0MTg0LDQyMzEuMjk0MzYxMDg4OTg0LDM3NjQuMTIwMTIwODI5NjcwNyw4NTgwLjIzMDM3MjIzMzQ2Miw1NDcuMTc2MTE5MTg5MDA5Nyw2Ljg1MTExNjYxMjU5MTk2MQorMjgsTW9uIDIxIEZlYiAxMSwzMTMuMDA3ODg3OTU4NTU5MSwyNzkuNDcwMzQzNTI2NjYxMTcsMTYyLjY3NDQ4NzI0NzI1NjQyLDMzNi4yOTA4OTUzODMxNDUyLDMzOC45Nzc4NDUwMzAzNDk2LDU0NzkuNzA5NzM3OTE3MDk5LDU5NTQuNzk0ODk1MzM3MTMxNSw0ODgwLjUyMzE0ODkyMzQzOSw0MjM5LjIyNjg3MTc1NTYyNyw1MzAwLjEwMDk5NzE0OTEyNCwxMDc2LjI5NDY0OTI4NjY3NjgsNjI5MS44MTk4NDg4MTU3NzgsMTI0NS4xODc0MTQ3OTM2NjcsMzMwNS40OTMzMDU3NDQzODI3LDI5NTQuNTA4NTE5MTIwMzkxNiw2NzgyLjMzMjk1NTU3MjEyNSw0OTEzLjUzMjQyNjExMzIsMTM4MS44Njc1NDcwODQ0NTk2LDQwMjEuODYxODc0MDYxOTA2LDI2NzguNDQ3NTE0NzgyODgzNCwzOTU2LjkwNzI3OTYwOTc3NTcsNDM5NC4wNDUyNDAxMzcwNDg1LDM5MDguOTAxNzg5NTY0Njg4NCw4OTEwLjI1NzA1MzUxNTA5Nyw1NjguMjIyNDkxMDA2MzU1OCw3LjExNDYzNTMyNzE5OTQ2MQorMjksVHVlIDIyIEZlYiAxMSwzMjQuNjAxNDIxOTExODYxNTYsMjg5LjgyMTY3NjY0NDAxMiwxNjguNjk5ODA1NjYxODczNiwzNDguNzQ2ODExMjM2MzgxNCwzNTEuNTMzMjgzMTEwMjI2Myw1NjgyLjY3MzMxNTk3NjE3OCw2MTc1LjM1NTIwNTM0ODE4MSw1MDYxLjI5MzM4ODMxMjQ2Niw0Mzk2LjI0NDA2NzA1Mzc3OSw1NDk2LjQxMjAyNzA5NTE2OSwxMTE2LjE1OTY0NjQzMzA1ODUsNjUyNC44NjMyNjM1Mzk0NTQsMTI5MS4zMDgwNDk4NTQyOTcyLDM0MjcuOTI1ODM5NzA1NDI5LDMwNjMuOTQwODg4NTU3Mjg3NSw3MDMzLjU0NDUzOTc3ODA3Myw1MDk1LjUyNTI5OTc4OTA4LDE0MzMuMDUwNjkyNzU3MTcwNyw0MTcwLjgyODA2MzA1MDA5ODUsMjc3Ny42NTQ4Mjk5OTU2MDg1LDQxMDMuNDY3NjA4MTU0Mjc0LDQ1NTYuNzk2NzcwMTg5OTI5LDQwNTMuNjg0MDM3NDI3NTM4NCw5MjQwLjI4NTA1NDkwNjA5Nyw1ODkuMjY4OTQ3MDA5MzU3NCw3LjM3ODE1NTA5NTg4MzkyNworMzAsV2VkIDIzIEZlYiAxMSwzMzYuMTk1MDAyMjM5MzkyNywzMDAuMTczMDUxMTY2Nzc4MDcsMTc0LjcyNTE0ODE3NzgxMjcsMzYxLjIwMjc3NjkxMzM4MDgzLDM2NC4wODg3NzE0MTE5NTU4Niw1ODg1LjYzNzcwNTg5MTE5Myw2Mzk1LjkxNjM5NzYwMjIzNyw1MjQyLjA2NDM1MDc4Mzg5OTUsNDU1My4yNjE4OTA0MjE5Nyw1NjkyLjcyMzg0MjI4NjkwNiwxMTU2LjAyNDgwMzAzOTc0ODEsNjc1Ny45MDc2MTA0Mzg2NTQsMTMzNy40Mjg4NjkzOTc4Mzc0LDM1NTAuMzU4ODYzMzk3NTkyNCwzMTczLjM3MzY5NTcyNDUzOCw3Mjg0Ljc1NzEyODgzMjM3MSw1Mjc3LjUxODkwMTQzNzkxMywxNDg0LjIzNDA0MzE2Mjg3NDcsNDMxOS43OTQ4NDc5MDQyMzksMjg3Ni44NjI1NDIwMzgzODksNDI1MC4wMjg1MjI5NDEyNTksNDcxOS41NDg5NTEyNTAyMzQ1LDQxOTguNDY2ODY0NDIwNTM4NSw5NTcwLjMxNDM3NjQxMTc0MSw2MTAuMzE1NDg3MTk4MzUxNSw3LjY0MTY3NTkxODY0OTU3NworMzEsVGh1IDI0IEZlYiAxMSwzNDcuNzg4NjI4OTQxMzM3OSwzMTAuNTI0NDY3MDk1MTI1MSwxODAuNzUwNTE0Nzk1MTcwMDMsMzczLjY1ODc5MjQxNDM0MjYsMzc2LjY0NDMwOTkzNTczOSw2MDg4LjYwMjkwNzY2NTM5MSw2NjE2LjQ3ODQ3MjEwMjgyNiw1NDIyLjgzNjAzNjM0MDYzLDQ3MTAuMjgwMzQxODYyNzA5LDU4ODkuMDM2NDQyNzI3NDczNSwxMTk1Ljg5MDExOTEwNzM4MjYsNjk5MC45NTI4ODk1MTcxMDYsMTM4My41NDk4NzM0MjUwMjQsMzY3Mi43OTIzNzY4MjI4MjksMzI4Mi44MDY5NDA2MjM4OTIsNzUzNS45NzA3MjI3MzkwMzQ1LDU0NTkuNTEzMjMxMDYyNjA4LDE1MzUuNDE3NTk4MzAyMzg5NSw0NDY4Ljc2MjIyODYyNjcxMSwyOTc2LjA3MDY1MDkxMjgxMTMsNDM5Ni41OTAwMjM5NzMwNzUsNDg4Mi4zMDE3ODMzMjA1NjQsNDM0My4yNTAyNzA1NDYwMDQsOTkwMC4zNDUwMTgwMzczMTMsNjMxLjM2MjExMTU3MzY3NDgsNy45MDUxOTc3OTU1MDA2MjY1CiszMixGcmkgMjUgRmViIDExLDM1OS4zODIzMDIwMTc4ODI2LDMyMC44NzU5MjQ0MjkyMTg1NywxODYuNzc1OTA1NTE0MDQyMDUsMzg2LjExNDg1NzczOTQ2NTgzLDM4OS4xOTk4OTg2ODE3NzY3LDYyOTEuNTY4OTIxMzAyMDIsNjgzNy4wNDE0Mjg4NTM0NzYsNTYwMy42MDg0NDQ5ODU1NDcsNDg2Ny4yOTk0MjEzNzg1MSw2MDg1LjM0OTgyODQyMDAxMSwxMjM1Ljc1NTU5NDYzNjYwMDYsNzIyMy45OTkxMDA3Nzg1Mzc1LDE0MjkuNjcxMDYxOTM2NTk1OCwzNzk1LjIyNjM3OTk4MzA5OCwzMzkyLjI0MDYyMzI1NzEwMSw3Nzg3LjE4NTMyMTUwMjA4Myw1NjQxLjUwODI4ODY2NjA3NiwxNTg2LjYwMTM1ODE3NjUzNCw0NjE3LjczMDIwNTIxOTg5NywzMDc1LjI3OTE1NjYyMDQ2Miw0NTQzLjE1MjExMTI1MjA2OCw1MDQ1LjA1NTI2NjQwMzUyNCw0NDg4LjAzNDI1NTgwNjI1MSwxMDIzMC4zNzY5Nzk3ODgwOSw2NTIuNDA4ODIwMTM1NjY0LDguMTY4NzIwNzI2NDQxMjg4CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1BvcHVsYXRpb25Hcm93dGhTRUlSX1JLX1JlZmVyZW5jZS9IdW1hblBvcHVsYXRpb25Nb2RlbC9odW1hbi9Db3VudF8wLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvUG9wdWxhdGlvbkdyb3d0aFNFSVJfUktfUmVmZXJlbmNlL0h1bWFuUG9wdWxhdGlvbk1vZGVsL2h1bWFuL0NvdW50XzAuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJjMjQ0MDEKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1BvcHVsYXRpb25Hcm93dGhTRUlSX1JLX1JlZmVyZW5jZS9IdW1hblBvcHVsYXRpb25Nb2RlbC9odW1hbi9Db3VudF8wLmNzdgpAQCAtMCwwICsxIEBACitpdGVyYXRpb24sdGltZSwKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvUG9wdWxhdGlvbkdyb3d0aFNFSVJfUktfUmVmZXJlbmNlL0h1bWFuUG9wdWxhdGlvbk1vZGVsL2h1bWFuL0NvdW50XzEuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Qb3B1bGF0aW9uR3Jvd3RoU0VJUl9SS19SZWZlcmVuY2UvSHVtYW5Qb3B1bGF0aW9uTW9kZWwvaHVtYW4vQ291bnRfMS5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmMyNDQwMQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvUG9wdWxhdGlvbkdyb3d0aFNFSVJfUktfUmVmZXJlbmNlL0h1bWFuUG9wdWxhdGlvbk1vZGVsL2h1bWFuL0NvdW50XzEuY3N2CkBAIC0wLDAgKzEgQEAKK2l0ZXJhdGlvbix0aW1lLApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Qb3B1bGF0aW9uR3Jvd3RoU0VJUl9SS19SZWZlcmVuY2UvSHVtYW5Qb3B1bGF0aW9uTW9kZWwvaHVtYW4vQ291bnRfMi5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1BvcHVsYXRpb25Hcm93dGhTRUlSX1JLX1JlZmVyZW5jZS9IdW1hblBvcHVsYXRpb25Nb2RlbC9odW1hbi9Db3VudF8yLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MDUyNTM1Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Qb3B1bGF0aW9uR3Jvd3RoU0VJUl9SS19SZWZlcmVuY2UvSHVtYW5Qb3B1bGF0aW9uTW9kZWwvaHVtYW4vQ291bnRfMi5jc3YKQEAgLTAsMCArMSwzMyBAQAoraXRlcmF0aW9uLHRpbWUsRUctRlJHLUcyMTAwMDEsRUctRlJHLUcyMTAwMDIsRUctRlJHLUcyMTAwMDMsRUctRlJHLUcyMTAwMDQsRUctRlJHLUcyMTAwMDUsRUctTE9FLUcyNDAwMDEsRUctTE9FLUcyNDAwMDIsRUctTE9FLUcyNDAwMDMsRUctTE9FLUcyNDAwMDQsRUctTE9FLUcyNDAwMDUsRUctTE9FLUcyNDAwMDYsRUctTE9FLUcyNDAwMDcsRUctTE9FLUcyNDAwMDgsRUctTE9FLUcyNDAwMDksRUctVVBFLUcyOTAwMDEsRUctVVBFLUcyOTAwMDIsRUctVVBFLUcyOTAwMDMsRUctVVBFLUcyOTAwMDQsRUctVVBFLUcyOTAwMDUsRUctVVBFLUcyOTAwMDYsRUctVVBFLUcyOTAwMDcsRUctVVBFLUcyOTAwMDgsRUctVVJHLUczMDAwMDEsRUctVVJHLUczMDAwMDIsRUctVVJHLUczMDAwMDMsRUctVVJHLUczMDAwMDQKKzEsVHVlIDI1IEphbiAxMSwyOTcyMzcuNDAzNDUzODAxNSwyNjUzODkuNjAzNDE4NTcxNzYsMTU0NDc4LjM1MDQxMTI2NzI1LDMxOTM0Ny4zMjc2MzY5MTMxNiwzMjE4OTguODk4OTEzNzc0Miw1MjAzNjIxLjg3OTMxMzg5NSw1NjU0NzcwLjUwNTQxMzkxMyw0NjM0NjI0LjUwNjU2OTA5LDQwMjU2MzkuMDg2MDYzNzA1LDUwMzMwNjIuNDg1MTM0ODM5LDEwMjIwNjYuOTgwNDU3NTI1LDU5NzQ4MTQuOTA2NjA5MjksMTE4MjQ1MC4zMDk0ODEwOTM0LDMxMzg5NTAuNDM5MDQ5MjAzNCwyODA1NjQ5LjU1MjI2MjIzOTYsNjQ0MDYxNC4xNjU0MTc4MjIsNDY2NTk3MC42NTU0MDE4NDIsMTMxMjI0My45OTU4MDI1NTQ4LDM4MTkyMjUuNzMzNTUxNzE4MywyNTQzNDk3LjUxMzAyOTk0MiwzNzU3NTQzLjc4OTYxMzI5NCw0MTcyNjU3LjEzNzY2ODY0MjcsMzcxMTk1Ni45OTIwODY5MDQ2LDg0NjEzMjUuNjQ4OTAzMTE3LDUzOTU5My4zNTk0OTExMjQ0LDY3NTYuMTczOTI1NzQyODUzNQorMixXZWQgMjYgSmFuIDExLDI5NzIzOC41OTI0MDU3OTMyNiwyNjUzOTAuNjY0OTc5MTA4MywxNTQ0NzguOTY4MzI1OTA0NzIsMzE5MzQ4LjYwNTAyODc3ODQsMzIxOTAwLjE4NjUxMTk0NTE1LDUyMDM2NDIuNjkzODQzMDM5LDU2NTQ3OTMuMTI0NTQxMTc0LDQ2MzQ2NDMuMDQ1MTA0MTk4LDQwMjU2NTUuMTg4NjUyMjUzLDUwMzMwODIuNjE3NDI1MDQxLDEwMjIwNzEuMDY4NzMzNjIzNSw1OTc0ODM4LjgwNTkxNjcxNCwxMTgyNDU1LjAzOTI5MTc5MSwzMTM4OTYyLjk5NDg3NjA3MTMsMjgwNTY2MC43NzQ4ODI4OTI2LDY0NDA2MzkuOTI3OTI2MDAyLDQ2NjU5ODkuMzE5MzIxNzkyLDEzMTIyNDkuMjQ0Nzg5MDM1MywzODE5MjQxLjAxMDQ4NTIwNDQsMjU0MzUwNy42ODcwNDAzNDUsMzc1NzU1OC44MTk4MTg1MTEsNDE3MjY3My44MjgzMzA1NzYsMzcxMTk3MS44Mzk5NDQ1NjYsODQ2MTM1OS40OTQyNzMzOTYsNTM5NTk1LjUxNzg2ODg3ODcsNjc1Ni4yMDA5NTA0OTI2MDEKKzMsVGh1IDI3IEphbiAxMSwyOTcyMzkuNzgxMzYyNTQxLDI2NTM5MS43MjY1NDM4OTE1LDE1NDQ3OS41ODYyNDMwMTM5LDMxOTM0OS44ODI0MjU3NTMxNywzMjE5MDEuNDc0MTE1MjY2Myw1MjAzNjYzLjUwODQ1NTQ0NCw1NjU0ODE1Ljc0Mzc1ODkwODUsNDYzNDY2MS41ODM3MTM0NTUsNDAyNTY3MS4yOTEzMDUyMTIzLDUwMzMxMDIuNzQ5Nzk1Nzc1LDEwMjIwNzUuMTU3MDI2MDc1MSw1OTc0ODYyLjcwNTMxOTczOCwxMTgyNDU5Ljc2OTEyMTQwOCwzMTM4OTc1LjU1MDc1MzE2MjcsMjgwNTY3MS45OTc1NDg0MzgsNjQ0MDY2NS42OTA1MzcyMzgsNDY2NjAwNy45ODMzMTYzOTQ1LDEzMTIyNTQuNDkzNzk2NTEyNywzODE5MjU2LjI4NzQ3OTc5OTIsMjU0MzUxNy44NjEwOTE0NDE1LDM3NTc1NzMuODUwMDgzODUxNyw0MTcyNjkwLjUxOTA1OTI3MSwzNzExOTg2LjY4Nzg2MTYxOTUsODQ2MTM5My4zMzk3NzkwNjIsNTM5NTk3LjY3NjI1NTI2NzIsNjc1Ni4yMjc5NzUzNTA0NTMKKzQsRnJpIDI4IEphbiAxMSwyOTcyNDAuOTcwMzI0MDQ0MywyNjUzOTIuNzg4MTEyOTIwNzcsMTU0NDgwLjIwNDE2MjU5NDc1LDMxOTM1MS4xNTk4Mjc4Mzc3LDMyMTkwMi43NjE3MjM3MzgxLDUyMDM2ODQuMzIzMTUxMTA4LDU2NTQ4MzguMzYzMDY3MTIxLDQ2MzQ2ODAuMTIyMzk2ODY4LDQwMjU2ODcuMzk0MDIyNTgzNSw1MDMzMTIyLjg4MjI0NzAzNywxMDIyMDc5LjI0NTMzNDg3OTgsNTk3NDg4Ni42MDQ4MTgzNiwxMTgyNDY0LjQ5ODk2OTk0NDQsMzEzODk4OC4xMDY2ODA0NzcsMjgwNTY4My4yMjAyNTg4NzM0LDY0NDA2OTEuNDUzMjUxNTI2LDQ2NjYwMjYuNjQ3Mzg1NjU4LDEzMTIyNTkuNzQyODI0OTg2MywzODE5MjcxLjU2NDUzNTUwNCwyNTQzNTI4LjAzNTE4MzIzNCwzNzU3NTg4Ljg4MDQwOTMxMiw0MTcyNzA3LjIwOTg1NDczLDM3MTIwMDEuNTM1ODM4MDY3LDg0NjE0MjcuMTg1NDIwMTEsNTM5NTk5LjgzNDY1MDI4ODcsNjc1Ni4yNTUwMDAzMTY0MDMKKzUsU2F0IDI5IEphbiAxMSwyOTcyNDIuMTU5MjkwMzAzNSwyNjUzOTMuODQ5Njg2MTk2MywxNTQ0ODAuODIyMDg0NjQ3MjIsMzE5MzUyLjQzNzIzNTAzMTcsMzIxOTA0LjA0OTMzNzM2MDI1LDUyMDM3MDUuMTM3OTMwMDI4LDU2NTQ4NjAuOTgyNDY1ODExLDQ2MzQ2OTguNjYxMTU0NDM1LDQwMjU3MDMuNDk2ODA0MzY0NSw1MDMzMTQzLjAxNDc3ODgzMSwxMDIyMDgzLjMzMzY2MDAzOCw1OTc0OTEwLjUwNDQxMjU3OSwxMTgyNDY5LjIyODgzNzQsMzEzOTAwMC42NjI2NTgwMTUzLDI4MDU2OTQuNDQzMDE0MjAxLDY0NDA3MTcuMjE2MDY4ODY2LDQ2NjYwNDUuMzExNTI5NTc3LDEzMTIyNjQuOTkxODc0NDU2LDM4MTkyODYuODQxNjUyMzE2NSwyNTQzNTM4LjIwOTMxNTcyMzcsMzc1NzYwMy45MTA3OTQ4OTMzLDQxNzI3MjMuOTAwNzE2OTUxNiwzNzEyMDE2LjM4Mzg3MzkwNyw4NDYxNDYxLjAzMTE5NjU0NCw1Mzk2MDEuOTkzMDUzOTQ0Myw2NzU2LjI4MjAyNTM5MDQ1NQorNixTdW4gMzAgSmFuIDExLDI5NzI0My4zNDgyNjEzMTg3LDI2NTM5NC45MTEyNjM3MTgyNywxNTQ0ODEuNDQwMDA5MTcxNDYsMzE5MzUzLjcxNDY0NzMzNTQsMzIxOTA1LjMzNjk1NjEzMjk2LDUyMDM3MjUuOTUyNzkyMjEwNSw1NjU0ODgzLjYwMTk1NDk4Miw0NjM0NzE3LjE5OTk4NjE1Nyw0MDI1NzE5LjU5OTY1MDU1NzYsNTAzMzE2My4xNDczOTExNTQsMTAyMjA4Ny40MjIwMDE1NDkzLDU5NzQ5MzQuNDA0MTAyMzk4LDExODI0NzMuOTU4NzIzNzc1LDMxMzkwMTMuMjE4Njg1Nzc5LDI4MDU3MDUuNjY1ODE0NDE5Nyw2NDQwNzQyLjk3ODk4OTI1NSw0NjY2MDYzLjk3NTc0ODE0OSwxMzEyMjcwLjI0MDk0NDkyMTMsMzgxOTMwMi4xMTg4MzAyMzgsMjU0MzU0OC4zODM0ODg5MTAzLDM3NTc2MTguOTQxMjQwNTk3LDQxNzI3NDAuNTkxNjQ1OTM3NCwzNzEyMDMxLjIzMTk2OTEzOCw4NDYxNDk0Ljg3NzEwODM2Myw1Mzk2MDQuMTUxNDY2MjMzMyw2NzU2LjMwOTA1MDU3MjYwOAorNyxNb24gMzEgSmFuIDExLDI5NzI0NC41MzcyMzcwODk2NSwyNjUzOTUuOTcyODQ1NDg2NCwxNTQ0ODIuMDU3OTM2MTY3MzcsMzE5MzU0Ljk5MjA2NDc0ODgzLDMyMTkwNi42MjQ1ODAwNTU5NCw1MjAzNzQ2Ljc2NzczNzY1MSw1NjU0OTA2LjIyMTUzNDYyOCw0NjM0NzM1LjczODg5MjAzNiw0MDI1NzM1LjcwMjU2MTE2Miw1MDMzMTgzLjI4MDA4NDAwOCwxMDIyMDkxLjUxMDM1OTQxMzgsNTk3NDk1OC4zMDM4ODc4MTYsMTE4MjQ3OC42ODg2MjkwNjk0LDMxMzkwMjUuNzc0NzYzNzY1MywyODA1NzE2Ljg4ODY1OTUyODUsNjQ0MDc2OC43NDIwMTI2OTYsNDY2NjA4Mi42NDAwNDEzOCwxMzEyMjc1LjQ5MDAzNjM4MzcsMzgxOTMxNy4zOTYwNjkyNjgsMjU0MzU1OC41NTc3MDI3OTMsMzc1NzYzMy45NzE3NDY0MjMzLDQxNzI3NTcuMjgyNjQxNjg3LDM3MTIwNDYuMDgwMTIzNzYyLDg0NjE1MjguNzIzMTU1NTYyLDUzOTYwNi4zMDk4ODcxNTU5LDY3NTYuMzM2MDc1ODYyODYwNQorOCxUdWUgMSBGZWIgMTEsMjk3MjQ1LjcyNjIxNzYxNjUsMjY1Mzk3LjAzNDQzMTUwMDk0LDE1NDQ4Mi42NzU4NjU2MzQ5NiwzMTkzNTYuMjY5NDg3MjcxODQsMzIxOTA3LjkxMjIwOTEyOTM3LDUyMDM3NjcuNTgyNzY2MzUxLDU2NTQ5MjguODQxMjA0NzU1LDQ2MzQ3NTQuMjc3ODcyMDcxLDQwMjU3NTEuODA1NTM2MTc4NCw1MDMzMjAzLjQxMjg1NzM5NCwxMDIyMDk1LjU5ODczMzYzMTgsNTk3NDk4Mi4yMDM3Njg4MzMsMTE4MjQ4My40MTg1NTMyODM0LDMxMzkwMzguMzMwODkxOTc2NiwyODA1NzI4LjExMTU0OTUyOTcsNjQ0MDc5NC41MDUxMzkxOTEsNDY2NjEwMS4zMDQ0MDkyNzEsMTMxMjI4MC43MzkxNDg4NDI0LDM4MTkzMzIuNjczMzY5NDA3LDI1NDM1NjguNzMxOTU3MzcyLDM3NTc2NDkuMDAyMzEyMzcwNiw0MTcyNzczLjk3MzcwNDIwMDcsMzcxMjA2MC45MjgzMzc3NzksODQ2MTU2Mi41NjkzMzgxNDgsNTM5NjA4LjQ2ODMxNjcxMjYsNjc1Ni4zNjMxMDEyNjEyMTYKKzksV2VkIDIgRmViIDExLDI5NzI0Ni45MTUyMDI4OTkzLDI2NTM5OC4wOTYwMjE3NjE3NywxNTQ0ODMuMjkzNzk3NTc0MywzMTkzNTcuNTQ2OTE0OTA0NiwzMjE5MDkuMTk5ODQzMzUzNSw1MjAzNzg4LjM5Nzg3ODMxMjUsNTY1NDk1MS40NjA5NjUzNiw0NjM0NzcyLjgxNjkyNjI2Myw0MDI1NzY3LjkwODU3NTYwNzUsNTAzMzIyMy41NDU3MTEzMSwxMDIyMDk5LjY4NzEyNDIwMzMsNTk3NTAwNi4xMDM3NDU0NDgsMTE4MjQ4OC4xNDg0OTY0MTczLDMxMzkwNTAuODg3MDcwNDEzLDI4MDU3MzkuMzM0NDg0NDIxLDY0NDA4MjAuMjY4MzY4NzM1LDQ2NjYxMTkuOTY4ODUxODE5LDEzMTIyODUuOTg4MjgyMjk3NywzODE5MzQ3Ljk1MDczMDY1NjMsMjU0MzU3OC45MDYyNTI2NDczLDM3NTc2NjQuMDMyOTM4NDQsNDE3Mjc5MC42NjQ4MzM0NzgsMzcxMjA3NS43NzY2MTExODgsODQ2MTU5Ni40MTU2NTYxMTQsNTM5NjEwLjYyNjc1NDkwMjUsNjc1Ni4zOTAxMjY3Njc2NzEKKzEwLFRodSAzIEZlYiAxMSwyOTcyNDguMTA0MTkyOTM4MSwyNjUzOTkuMTU3NjE2MjY5LDE1NDQ4My45MTE3MzE5ODUzNywzMTkzNTguODI0MzQ3NjQ3MjYsMzIxOTEwLjQ4NzQ4MjcyODEsNTIwMzgwOS4yMTMwNzM1MzMsNTY1NDk3NC4wODA4MTY0NDUsNDYzNDc5MS4zNTYwNTQ2MSw0MDI1Nzg0LjAxMTY3OTQ0NzcsNTAzMzI0My42Nzg2NDU3NTcsMTAyMjEwMy43NzU1MzExMjg2LDU5NzUwMzAuMDAzODE3NjY1LDExODI0OTIuODc4NDU4NDcxNywzMTM5MDYzLjQ0MzI5OTA3MzMsMjgwNTc1MC41NTc0NjQyMDY2LDY0NDA4NDYuMDMxNzAxMzMzLDQ2NjYxMzguNjMzMzY5MDIzLDEzMTIyOTEuMjM3NDM2NzQ5LDM4MTkzNjMuMjI4MTUzMDE0NiwyNTQzNTg5LjA4MDU4ODYyMSwzNzU3Njc5LjA2MzYyNDYzMjUsNDE3MjgwNy4zNTYwMjk1MiwzNzEyMDkwLjYyNDk0Mzk5MSw4NDYxNjMwLjI2MjEwOTQ3NSw1Mzk2MTIuNzg1MjAxNzI2NSw2NzU2LjQxNzE1MjM4MjIzCisxMSxGcmkgNCBGZWIgMTEsMjk3MjQ5LjI5MzE4NzczMjYzLDI2NTQwMC4yMTkyMTUwMjI3LDE1NDQ4NC41Mjk2Njg4NjgxLDMxOTM2MC4xMDE3ODU0OTk0LDMyMTkxMS43NzUxMjcyNTMyLDUyMDM4MzAuMDI4MzUyMDE1LDU2NTQ5OTYuNzAwNzU4MDEsNDYzNDgwOS44OTUyNTcxMTMsNDAyNTgwMC4xMTQ4NDc3MDA2LDUwMzMyNjMuODExNjYwNzM5LDEwMjIxMDcuODYzOTU0NDA3Niw1OTc1MDUzLjkwMzk4NTQ4MSwxMTgyNDk3LjYwODQzOTQ0NTcsMzEzOTA3NS45OTk1Nzc5NiwyODA1NzYxLjc4MDQ4ODg4MTcsNjQ0MDg3MS43OTUxMzY5ODUsNDY2NjE1Ny4yOTc5NjA4ODcsMTMxMjI5Ni40ODY2MTIxOTcyLDM4MTkzNzguNTA1NjM2NDgxLDI1NDM1OTkuMjU0OTY1MjkyMywzNzU3Njk0LjA5NDM3MDk0ODYsNDE3MjgyNC4wNDcyOTIzMjcsMzcxMjEwNS40NzMzMzYxODY3LDg0NjE2NjQuMTA4Njk4MjE3LDUzOTYxNC45NDM2NTcxODQ0LDY3NTYuNDQ0MTc4MTA0ODkyCisxMixTYXQgNSBGZWIgMTEsMjk3MjUwLjQ4MjE4NzI4MzE3LDI2NTQwMS4yODA4MTgwMjI3LDE1NDQ4NS4xNDc2MDgyMjI3LDMxOTM2MS4zNzkyMjg0NjE1MywzMjE5MTMuMDYyNzc2OTI5MDYsNTIwMzg1MC44NDM3MTM3Niw1NjU1MDE5LjMyMDc5MDA1Myw0NjM0ODI4LjQzNDUzMzc3Miw0MDI1ODE2LjIxODA4MDM2NjUsNTAzMzI4My45NDQ3NTYyNTEsMTAyMjExMS45NTIzOTQwNDAzLDU5NzUwNzcuODA0MjQ4OSwxMTgyNTAyLjMzODQzOTMzOSwzMTM5MDg4LjU1NTkwNzA2OTIsMjgwNTc3My4wMDM1NTg0NDk0LDY0NDA4OTcuNTU4Njc1NjkxLDQ2NjYxNzUuOTYyNjI3NDA4LDEzMTIzMDEuNzM1ODA4NjQyOCwzODE5MzkzLjc4MzE4MTA1ODIsMjU0MzYwOS40MjkzODI2NjA0LDM3NTc3MDkuMTI1MTc3Mzg3LDQxNzI4NDAuNzM4NjIxODk3LDM3MTIxMjAuMzIxNzg3Nzc3NCw4NDYxNjk3Ljk1NTQyMjM0Miw1Mzk2MTcuMTAyMTIxMjc1Niw2NzU2LjQ3MTIwMzkzNTY1NTUKKzEzLFN1biA2IEZlYiAxMSwyOTcyNTEuNjcxMTkxNTg5OSwyNjU0MDIuMzQyNDI1MjY5MiwxNTQ0ODUuNzY1NTUwMDQ5MDIsMzE5MzYyLjY1NjY3NjUzMzMsMzIxOTE0LjM1MDQzMTc1NTUsNTIwMzg3MS42NTkxNTg3NjUsNTY1NTA0MS45NDA5MTI1NzQsNDYzNDg0Ni45NzM4ODQ1OTMsNDAyNTgzMi4zMjEzNzc0NDQ1LDUwMzMzMDQuMDc3OTMyMjk0LDEwMjIxMTYuMDQwODUwMDI2Niw1OTc1MTAxLjcwNDYwNzkxNywxMTgyNTA3LjA2ODQ1ODE1MjIsMzEzOTEwMS4xMTIyODY0MDYsMjgwNTc4NC4yMjY2NzI5MDksNjQ0MDkyMy4zMjIzMTc0NSw0NjY2MTk0LjYyNzM2ODU4OCwxMzEyMzA2Ljk4NTAyNjA4NSwzODE5NDA5LjA2MDc4Njc0NTUsMjU0MzYxOS42MDM4NDA3MjgsMzc1NzcyNC4xNTYwNDM5NDg2LDQxNzI4NTcuNDMwMDE4MjM0LDM3MTIxMzUuMTcwMjk4NzYzNiw4NDYxNzMxLjgwMjI4MTg2LDUzOTYxOS4yNjA1OTQwMDA1LDY3NTYuNDk4MjI5ODc0NTIyCisxNCxNb24gNyBGZWIgMTEsMjk3MjUyLjg2MDIwMDY1MjcsMjY1NDAzLjQwNDAzNjc2MiwxNTQ0ODYuMzgzNDk0MzQ3MiwzMTkzNjMuOTM0MTI5NzE0OCwzMjE5MTUuNjM4MDkxNzMyNiw1MjAzODkyLjQ3NDY4NzAzMiw1NjU1MDY0LjU2MTEyNTU3NjUsNDYzNDg2NS41MTMzMDk1NjgsNDAyNTg0OC40MjQ3Mzg5MzU3LDUwMzMzMjQuMjExMTg4ODcxLDEwMjIxMjAuMTI5MzIyMzY2OSw1OTc1MTI1LjYwNTA2MjUzNCwxMTgyNTExLjc5ODQ5NTg4NiwzMTM5MTEzLjY2ODcxNTk2OSwyODA1Nzk1LjQ0OTgzMjI2MTUsNjQ0MDk0OS4wODYwNjIyNjYsNDY2NjIxMy4yOTIxODQ0MjU1LDEzMTIzMTIuMjM0MjY0NTIzNywzODE5NDI0LjMzODQ1MzU0NiwyNTQzNjI5Ljc3ODMzOTQ5MjYsMzc1NzczOS4xODY5NzA2MzQ0LDQxNzI4NzQuMTIxNDgxMzM4NSwzNzEyMTUwLjAxODg2OTE0MTYsODQ2MTc2NS42NDkyNzY3NjEsNTM5NjIxLjQxOTA3NTM1OTcsNjc1Ni41MjUyNTU5MjE0OTcKKzE1LFR1ZSA4IEZlYiAxMSwyOTcyNTQuMDQ5MjE0NDcxNiwyNjU0MDQuNDY1NjUyNTAxMTUsMTU0NDg3LjAwMTQ0MTExNjk3LDMxOTM2NS4yMTE1ODgwMDYyLDMyMTkxNi45MjU3NTY4NjAyLDUyMDM5MTMuMjkwMjk4NTYyNSw1NjU1MDg3LjE4MTQyOTA2Myw0NjM0ODg0LjA1MjgwODcwNCw0MDI1ODY0LjUyODE2NDg0MDMsNTAzMzM0NC4zNDQ1MjU5ODIsMTAyMjEyNC4yMTc4MTEwNjEyLDU5NzUxNDkuNTA1NjEyNzUyLDExODI1MTYuNTI4NTUyNTM5OSwzMTM5MTI2LjIyNTE5NTc1OSwyODA1ODA2LjY3MzAzNjUwOCw2NDQwOTc0Ljg0OTkxMDEzNyw0NjY2MjMxLjk1NzA3NDkyNiwxMzEyMzE3LjQ4MzUyMzk1OTUsMzgxOTQzOS42MTYxODE0NTY1LDI1NDM2MzkuOTUyODc4OTU2LDM3NTc3NTQuMjE3OTU3NDQzNiw0MTcyODkwLjgxMzAxMTIwODUsMzcxMjE2NC44Njc0OTg5MTQyLDg0NjE3OTkuNDk2NDA3MDUsNTM5NjIzLjU3NzU2NTM1Myw2NzU2LjU1MjI4MjA3NjU3MgorMTYsV2VkIDkgRmViIDExLDI5NzI1NS4yMzgyMzMwNDY0MywyNjU0MDUuNTI3MjcyNDg3MjMsMTU0NDg3LjYxOTM5MDM1ODY4LDMxOTM2Ni40ODkwNTE0MDc0NCwzMjE5MTguMjEzNDI3MTM4NzUsNTIwMzkzNC4xMDU5OTMzNTUsNTY1NTEwOS44MDE4MjMwMjgsNDYzNDkwMi41OTIzODE5OTMsNDAyNTg4MC42MzE2NTUxNjAzLDUwMzMzNjQuNDc3OTQzNjI1LDEwMjIxMjguMzA2MzE2MTA5NCw1OTc1MTczLjQwNjI1ODU3NiwxMTgyNTIxLjI1ODYyODExNDEsMzEzOTEzOC43ODE3MjU3NzIsMjgwNTgxNy44OTYyODU2NDc1LDY0NDEwMDAuNjEzODYxMDYzNSw0NjY2MjUwLjYyMjA0MDA4NTUsMTMxMjMyMi43MzI4MDQzOTI3LDM4MTk0NTQuODkzOTcwNDc3NCwyNTQzNjUwLjEyNzQ1OTExNjcsMzc1Nzc2OS4yNDkwMDQzNzg0LDQxNzI5MDcuNTA0NjA3ODQ0NiwzNzEyMTc5LjcxNjE4ODA4MzQsODQ2MTgzMy4zNDM2NzI3MzYsNTM5NjI1LjczNjA2Mzk4MDcsNjc1Ni41NzkzMDgzMzk3NTQKKzE3LFRodSAxMCBGZWIgMTEsMjk3MjU2LjQyNzI1NjM3NzMsMjY1NDA2LjU4ODg5NjcxOTU2LDE1NDQ4OC4yMzczNDIwNzIxOSwzMTkzNjcuNzY2NTE5OTE4NjMsMzIxOTE5LjUwMTEwMjU2NzcsNTIwMzk1NC45MjE3NzE0MTMsNTY1NTEzMi40MjIzMDc0OCw0NjM0OTIxLjEzMjAyOTQ0LDQwMjU4OTYuNzM1MjA5ODk1OCw1MDMzMzg0LjYxMTQ0MTgwNSwxMDIyMTMyLjM5NDgzNzUxMjIsNTk3NTE5Ny4zMDY5OTk5OTYsMTE4MjUyNS45ODg3MjI2MDksMzEzOTE1MS4zMzgzMDYwMTI2LDI4MDU4MjkuMTE5NTc5NjgsNjQ0MTAyNi4zNzc5MTUwNDUsNDY2NjI2OS4yODcwNzk5MDEsMTMxMjMyNy45ODIxMDU4MjI1LDM4MTk0NzAuMTcxODIwNjA5NCwyNTQzNjYwLjMwMjA3OTk3NTYsMzc1Nzc4NC4yODAxMTE0MzYzLDQxNzI5MjQuMTk2MjcxMjQ3NywzNzEyMTk0LjU2NDkzNjY0Nyw4NDYxODY3LjE5MTA3MzgwMyw1Mzk2MjcuODk0NTcxMjQxOSw2NzU2LjYwNjMzNDcxMTA0CisxOCxGcmkgMTEgRmViIDExLDI5NzI1Ny42MTYyODQ0NjQzNywyNjU0MDcuNjUwNTI1MTk4NDMsMTU0NDg4Ljg1NTI5NjI1NzUsMzE5MzY5LjA0Mzk5MzUzOTcsMzIxOTIwLjc4ODc4MzE0NzMsNTIwMzk3NS43Mzc2MzI3MzMsNTY1NTE1NS4wNDI4ODI0MSw0NjM0OTM5LjY3MTc1MTA1LDQwMjU5MTIuODM4ODI5MDQ0Nyw1MDMzNDA0Ljc0NTAyMDUxOCwxMDIyMTM2LjQ4MzM3NTI2OSw1OTc1MjIxLjIwNzgzNzAyNiwxMTgyNTMwLjcxODgzNjAyNDIsMzEzOTE2My44OTQ5MzY0OCwyODA1ODQwLjM0MjkxODYwNCw2NDQxMDUyLjE0MjA3MjA4Niw0NjY2Mjg3Ljk1MjE5NDM3NSwxMzEyMzMzLjIzMTQyODI0OTcsMzgxOTQ4NS40NDk3MzE4NTI0LDI1NDM2NzAuNDc2NzQxNTMzLDM3NTc3OTkuMzExMjc4NjE5Myw0MTcyOTQwLjg4ODAwMTQxNywzNzEyMjA5LjQxMzc0NDYwMyw4NDYxOTAxLjAzODYxMDI2NSw1Mzk2MzAuMDUzMDg3MTM3Myw2NzU2LjYzMzM2MTE5MDQzMQorMTksU2F0IDEyIEZlYiAxMSwyOTcyNTguODA1MzE3MzA3NzYsMjY1NDA4LjcxMjE1NzkyMzYsMTU0NDg5LjQ3MzI1MjkxNDY3LDMxOTM3MC4zMjE0NzIyNzA1LDMyMTkyMi4wNzY0Njg4Nzc3LDUyMDM5OTYuNTUzNTc3MzE3LDU2NTUxNzcuNjYzNTQ3ODIxLDQ2MzQ5NTguMjExNTQ2ODE5LDQwMjU5MjguOTQyNTEyNjA1LDUwMzM0MjQuODc4Njc5NzY0LDEwMjIxNDAuNTcxOTI5Mzc5Niw1OTc1MjQ1LjEwODc2OTY1NywxMTgyNTM1LjQ0ODk2ODM1ODgsMzEzOTE3Ni40NTE2MTcxNzM0LDI4MDU4NTEuNTY2MzAyNDIxNSw2NDQxMDc3LjkwNjMzMjE4NCw0NjY2MzA2LjYxNzM4MzUxMiwxMzEyMzM4LjQ4MDc3MTY3NDMsMzgxOTUwMC43Mjc3MDQyMDY1LDI1NDM2ODAuNjUxNDQzNzkwNiwzNzU3ODE0LjM0MjUwNTkyNyw0MTcyOTU3LjU3OTc5ODM1NCwzNzEyMjI0LjI2MjYxMTk1NCw4NDYxOTM0Ljg4NjI4MjExNCw1Mzk2MzIuMjExNjExNjY2NSw2NzU2LjY2MDM4Nzc3NzkzMQorMjAsU3VuIDEzIEZlYiAxMSwyOTcyNTkuOTk0MzU0OTA3MSwyNjU0MDkuNzczNzk0ODk1NTYsMTU0NDkwLjA5MTIxMjA0MzU0LDMxOTM3MS41OTg5NTYxMTEzLDMyMTkyMy4zNjQxNTk3NTg5LDUyMDQwMTcuMzY5NjA1MTY0LDU2NTUyMDAuMjg0MzAzNzE0NSw0NjM0OTc2Ljc1MTQxNjc0Myw0MDI1OTQ1LjA0NjI2MDU4MjcsNTAzMzQ0NS4wMTI0MTk1NDYsMTAyMjE0NC42NjA0OTk4NDQxLDU5NzUyNjkuMDA5Nzk3ODk0LDExODI1NDAuMTc5MTE5NjE0NywzMTM5MTg5LjAwODM0ODA5NTcsMjgwNTg2Mi43ODk3MzExMzMsNjQ0MTEwMy42NzA2OTUzMzcsNDY2NjMyNS4yODI2NDczMTMsMTMxMjM0My43MzAxMzYwOTY3LDM4MTk1MTYuMDA1NzM3NjcyNiwyNTQzNjkwLjgyNjE4Njc0NiwzNzU3ODI5LjM3Mzc5MzM2LDQxNzI5NzQuMjcxNjYyMDU3NCwzNzEyMjM5LjExMTUzODcwMzYsODQ2MTk2OC43MzQwODkzNTYsNTM5NjM0LjM3MDE0NDgzMDMsNjc1Ni42ODc0MTQ0NzM1MzgKKzIxLE1vbiAxNCBGZWIgMTEsMjk3MjYxLjE4MzM5NzI2Mjc2LDI2NTQxMC44MzU0MzYxMTQwNSwxNTQ0OTAuNzA5MTczNjQ0MywzMTkzNzIuODc2NDQ1MDYyMiwzMjE5MjQuNjUxODU1NzkxMSw1MjA0MDM4LjE4NTcxNjI3NCw1NjU1MjIyLjkwNTE1MDA5MSw0NjM0OTk1LjI5MTM2MDgyNSw0MDI1OTYxLjE1MDA3Mjk3NDYsNTAzMzQ2NS4xNDYyMzk4NjUsMTAyMjE0OC43NDkwODY2NjM0LDU5NzUyOTIuOTEwOTIxNzM0LDExODI1NDQuOTA5Mjg5NzkyLDMxMzkyMDEuNTY1MTI5MjQyNCwyODA1ODc0LjAxMzIwNDczOTQsNjQ0MTEyOS40MzUxNjE1NDcsNDY2NjM0My45NDc5ODU3NzEsMTMxMjM0OC45Nzk1MjE1MTY3LDM4MTk1MzEuMjgzODMyMjUxNiwyNTQzNzAxLjAwMDk3MDQwMiwzNzU3ODQ0LjQwNTE0MDkxNzMsNDE3Mjk5MC45NjM1OTI1MjcsMzcxMjI1My45NjA1MjQ4NDc3LDg0NjIwMDIuNTgyMDMxOTg4LDUzOTYzNi41Mjg2ODY2MjgsNjc1Ni43MTQ0NDEyNzcyNDkKKzIyLFR1ZSAxNSBGZWIgMTEsMjk3MjYyLjM3MjQ0NDM3NDQsMjY1NDExLjg5NzA4MTU3OTIsMTU0NDkxLjMyNzEzNzcxNjksMzE5Mzc0LjE1MzkzOTEyMzEsMzIxOTI1LjkzOTU1Njk3NCw1MjA0MDU5LjAwMTkxMDY1LDU2NTUyNDUuNTI2MDg2OTU0LDQ2MzUwMTMuODMxMzc5MDczLDQwMjU5NzcuMjUzOTQ5NzgyMyw1MDMzNDg1LjI4MDE0MDcxNywxMDIyMTUyLjgzNzY4OTgzNyw1OTc1MzE2LjgxMjE0MTE3OSwxMTgyNTQ5LjYzOTQ3ODg4OTgsMzEzOTIxNC4xMjE5NjA2MTY3LDI4MDU4ODUuMjM2NzIzMjM5LDY0NDExNTUuMTk5NzMwODE4LDQ2NjYzNjIuNjEzMzk4ODk2LDEzMTIzNTQuMjI4OTI3OTMzNCwzODE5NTQ2LjU2MTk4Nzk0MzUsMjU0MzcxMS4xNzU3OTQ3NTQ2LDM3NTc4NTkuNDM2NTQ4Niw0MTczMDA3LjY1NTU4OTc2NSwzNzEyMjY4LjgwOTU3MDM4Nyw4NDYyMDM2LjQzMDExMDAxNSw1Mzk2MzguNjg3MjM3MDU5Nyw2NzU2Ljc0MTQ2ODE4OTA2NworMjMsV2VkIDE2IEZlYiAxMSwyOTcyNjMuNTYxNDk2MjQyMzYsMjY1NDEyLjk1ODczMTI5MDksMTU0NDkxLjk0NTEwNDI2MTM3LDMxOTM3NS40MzE0MzgyOTM5LDMyMTkyNy4yMjcyNjMzMDc2Niw1MjA0MDc5LjgxODE4ODI5MSw1NjU1MjY4LjE0NzExNDMwMSw0NjM1MDMyLjM3MTQ3MTQ3OSw0MDI1OTkzLjM1Nzg5MTAwNTUsNTAzMzUwNS40MTQxMjIxMDYsMTAyMjE1Ni45MjYzMDkzNjUsNTk3NTM0MC43MTM0NTYyMjgsMTE4MjU1NC4zNjk2ODY5MDg2LDMxMzkyMjYuNjc4ODQyMjE3NywyODA1ODk2LjQ2MDI4NjYzMyw2NDQxMTgwLjk2NDQwMzE0Niw0NjY2MzgxLjI3ODg4NjY4MDUsMTMxMjM1OS40NzgzNTUzNDc5LDM4MTk1NjEuODQwMjA0NzQ3LDI1NDM3MjEuMzUwNjU5ODA2MywzNzU3ODc0LjQ2ODAxNjQwOSw0MTczMDI0LjM0NzY1Mzc3MTMsMzcxMjI4My42NTg2NzUzMjMsODQ2MjA3MC4yNzgzMjM0MzIsNTM5NjQwLjg0NTc5NjEyNTksNjc1Ni43Njg0OTUyMDg5OTUKKzI0LFRodSAxNyBGZWIgMTEsMjk3MjY0Ljc1MDU1Mjg2NjQzLDI2NTQxNC4wMjAzODUyNDkxNywxNTQ0OTIuNTYzMDczMjc3NywzMTkzNzYuNzA4OTQyNTc0OCwzMjE5MjguNTE0OTc0NzkyLDUyMDQxMDAuNjM0NTQ5MTk1LDU2NTUyOTAuNzY4MjMyMTMyLDQ2MzUwNTAuOTExNjM4MDQ1LDQwMjYwMDkuNDYxODk2NjQ0NCw1MDMzNTI1LjU0ODE4NDAzMSwxMDIyMTYxLjAxNDk0NTI0NzQsNTk3NTM2NC42MTQ4NjY4ODQsMTE4MjU1OS4wOTk5MTM4NDc2LDMxMzkyMzkuMjM1Nzc0MDQ2NywyODA1OTA3LjY4Mzg5NDkyMDYsNjQ0MTIwNi43MjkxNzg1MzQsNDY2NjM5OS45NDQ0NDkxMjksMTMxMjM2NC43Mjc4MDM3NjAyLDM4MTk1NzcuMTE4NDgyNjY0NywyNTQzNzMxLjUyNTU2NTU1OTUsMzc1Nzg4OS40OTk1NDQzNDQ0LDQxNzMwNDEuMDM5Nzg0NTQ2NSwzNzEyMjk4LjUwNzgzOTY1NTUsODQ2MjEwNC4xMjY2NzIyNDIsNTM5NjQzLjAwNDM2MzgyNjIsNjc1Ni43OTU1MjIzMzcwMworMjUsRnJpIDE4IEZlYiAxMSwyOTcyNjUuOTM5NjE0MjQ2NjYsMjY1NDE1LjA4MjA0MzQ1NCwxNTQ0OTMuMTgxMDQ0NzY1OTUsMzE5Mzc3Ljk4NjQ1MTk2NTYsMzIxOTI5LjgwMjY5MTQyNzQsNTIwNDEyMS40NTA5OTMzNjcsNTY1NTMxMy4zODk0NDA0NDcsNDYzNTA2OS40NTE4Nzg3NzEsNDAyNjAyNS41NjU5NjY3LDUwMzM1NDUuNjgyMzI2NDkyLDEwMjIxNjUuMTAzNTk3NDg0NSw1OTc1Mzg4LjUxNjM3MzE0NywxMTgyNTYzLjgzMDE1OTcwNzcsMzEzOTI1MS43OTI3NTYxMDQsMjgwNTkxOC45MDc1NDgxMDQ0LDY0NDEyMzIuNDk0MDU2OTc5LDQ2NjY0MTguNjEwMDg2MjM3LDEzMTIzNjkuOTc3MjczMTcwNiwzODE5NTkyLjM5NjgyMTY5NDQsMjU0Mzc0MS43MDA1MTIwMTA2LDM3NTc5MDQuNTMxMTMyNDA1Niw0MTczMDU3LjczMTk4MjA4OSwzNzEyMzEzLjM1NzA2MzM4NDcsODQ2MjEzNy45NzUxNTY0NDksNTM5NjQ1LjE2Mjk0MDE2MDgsNjc1Ni44MjI1NDk1NzMxNzQKKzI2LFNhdCAxOSBGZWIgMTEsMjk3MjY3LjEyODY4MDM4MzIsMjY1NDE2LjE0MzcwNTkwNTUsMTU0NDkzLjc5OTAxODcyNjAxLDMxOTM3OS4yNjM5NjY0NjY0LDMyMTkzMS4wOTA0MTMyMTM2NSw1MjA0MTQyLjI2NzUyMDgwNCw1NjU1MzM2LjAxMDczOTI0Niw0NjM1MDg3Ljk5MjE5MzY1OCw0MDI2MDQxLjY3MDEwMTE3MjMsNTAzMzU2NS44MTY1NDk0ODksMTAyMjE2OS4xOTIyNjYwNzYzLDU5NzU0MTIuNDE3OTc1MDE3LDExODI1NjguNTYwNDI0NDg5LDMxMzkyNjQuMzQ5Nzg4Mzg4MiwyODA1OTMwLjEzMTI0NjE4MDcsNjQ0MTI1OC4yNTkwMzg0ODYsNDY2NjQzNy4yNzU3OTgwMDksMTMxMjM3NS4yMjY3NjM1Nzg4LDM4MTk2MDcuNjc1MjIxODM4LDI1NDM3NTEuODc1NDk5MTYzLDM3NTc5MTkuNTYyNzgwNTkyNiw0MTczMDc0LjQyNDI0NjQwMjUsMzcxMjMyOC4yMDYzNDY1MTE0LDg0NjIxNzEuODIzNzc2MDQ2LDUzOTY0Ny4zMjE1MjUxMjk2LDY3NTYuODQ5NTc2OTE3NDI3CisyNyxTdW4gMjAgRmViIDExLDI5NzI2OC4zMTc3NTEyNzYxLDI2NTQxNy4yMDUzNzI2MDM3LDE1NDQ5NC40MTY5OTUxNTgwNCwzMTkzODAuNTQxNDg2MDc3NCwzMjE5MzIuMzc4MTQwMTUwOCw1MjA0MTYzLjA4NDEzMTUwOCw1NjU1MzU4LjYzMjEyODUzLDQ2MzUxMDYuNTMyNTgyNzA2LDQwMjYwNTcuNzc0MzAwMDYxLDUwMzM1ODUuOTUwODUzMDI1LDEwMjIxNzMuMjgwOTUxMDIyNiw1OTc1NDM2LjMxOTY3MjQ5MywxMTgyNTczLjI5MDcwODE5MTIsMzEzOTI3Ni45MDY4NzA5MDEsMjgwNTk0MS4zNTQ5ODkxNTMzLDY0NDEyODQuMDI0MTIzMDUxLDQ2NjY0NTUuOTQxNTg0NDQzLDEzMTIzODAuNDc2Mjc0OTg1LDM4MTk2MjIuOTUzNjgzMDk2LDI1NDM3NjIuMDUwNTI3MDE1MiwzNzU3OTM0LjU5NDQ4ODkwNyw0MTczMDkxLjExNjU3NzQ4NCwzNzEyMzQzLjA1NTY4OTAzNjQsODQ2MjIwNS42NzI1MzEwMzksNTM5NjQ5LjQ4MDExODczMjksNjc1Ni44NzY2MDQzNjk3ODcKKzI4LE1vbiAyMSBGZWIgMTEsMjk3MjY5LjUwNjgyNjkyNTE1LDI2NTQxOC4yNjcwNDM1NDg1LDE1NDQ5NS4wMzQ5NzQwNjE5NCwzMTkzODEuODE5MDEwNzk4NCwzMjE5MzMuNjY1ODcyMjM4OCw1MjA0MTgzLjkwMDgyNTQ3OSw1NjU1MzgxLjI1MzYwODMwMSw0NjM1MTI1LjA3MzA0NTkxNyw0MDI2MDczLjg3ODU2MzM2NzMsNTAzMzYwNi4wODUyMzcwOTcsMTAyMjE3Ny4zNjk2NTIzMjM5LDU5NzU0NjAuMjIxNDY1NTc1LDExODI1NzguMDIxMDEwODE1LDMxMzkyODkuNDY0MDAzNjQyNiwyODA1OTUyLjU3ODc3NzAyMDMsNjQ0MTMwOS43ODkzMTA2NzgsNDY2NjQ3NC42MDc0NDU1NCwxMzEyMzg1LjcyNTgwNzM4OSwzODE5NjM4LjIzMjIwNTQ2OCwyNTQzNzcyLjIyNTU5NTU2NzQsMzc1Nzk0OS42MjYyNTczNDgsNDE3MzEwNy44MDg5NzUzMzUsMzcxMjM1Ny45MDUwOTA5NTc0LDg0NjIyMzkuNTIxNDIxNDI3LDUzOTY1MS42Mzg3MjA5NzA1LDY3NTYuOTAzNjMxOTMwMjU4CisyOSxUdWUgMjIgRmViIDExLDI5NzI3MC42OTU5MDczMzA1NSwyNjU0MTkuMzI4NzE4NzQwMSwxNTQ0OTUuNjUyOTU1NDM3NzgsMzE5MzgzLjA5NjU0MDYyOTYsMzIxOTM0Ljk1MzYwOTQ3NzcsNTIwNDIwNC43MTc2MDI3MTUsNTY1NTQwMy44NzUxNzg1Niw0NjM1MTQzLjYxMzU4MzI5MSw0MDI2MDg5Ljk4Mjg5MTA4OTcsNTAzMzYyNi4yMTk3MDE3MDU1LDEwMjIxODEuNDU4MzY5OTgsNTk3NTQ4NC4xMjMzNTQyNjQsMTE4MjU4Mi43NTEzMzIzNTk5LDMxMzkzMDIuMDIxMTg2NjEzNSwyODA1OTYzLjgwMjYwOTc4MjcsNjQ0MTMzNS41NTQ2MDEzNjUsNDY2NjQ5My4yNzMzODEzMDIsMTMxMjM5MC45NzUzNjA3OTE0LDM4MTk2NTMuNTEwNzg4OTU1LDI1NDM3ODIuNDAwNzA0ODIwNiwzNzU3OTY0LjY1ODA4NTkxNiw0MTczMTI0LjUwMTQzOTk1NiwzNzEyMzcyLjc1NDU1MjI3NjMsODQ2MjI3My4zNzA0NDcyMTMsNTM5NjUzLjc5NzMzMTg0MjcsNjc1Ni45MzA2NTk1OTg4NDEKKzMwLFdlZCAyMyBGZWIgMTEsMjk3MjcxLjg4NDk5MjQ5MjQsMjY1NDIwLjM5MDM5ODE3ODMsMTU0NDk2LjI3MDkzOTI4NTU1LDMxOTM4NC4zNzQwNzU1NzA3LDMyMTkzNi4yNDEzNTE4Njc2LDUyMDQyMjUuNTM0NDYzMjE5LDU2NTU0MjYuNDk2ODM5MzAzLDQ2MzUxNjIuMTU0MTk0ODI4LDQwMjYxMDYuMDg3MjgzMjMsNTAzMzY0Ni4zNTQyNDY4NTUsMTAyMjE4NS41NDcxMDM5OTA5LDU5NzU1MDguMDI1MzM4NTU5LDExODI1ODcuNDgxNjcyODI1OCwzMTM5MzE0LjU3ODQxOTgxMywyODA1OTc1LjAyNjQ4NzQ0MTcsNjQ0MTM2MS4zMTk5OTUxMTMsNDY2NjUxMS45MzkzOTE3MjgsMTMxMjM5Ni4yMjQ5MzUxOTI0LDM4MTk2NjguNzg5NDMzNTU1LDI1NDM3OTIuNTc1ODU0NzczLDM3NTc5NzkuNjg5OTc0NjExNiw0MTczMTQxLjE5Mzk3MTM0NjYsMzcxMjM4Ny42MDQwNzI5OTQsODQ2MjMwNy4yMTk2MDgzOTQsNTM5NjU1Ljk1NTk1MTM0OTIsNjc1Ni45NTc2ODczNzU1MzcKKzMxLFRodSAyNCBGZWIgMTEsMjk3MjczLjA3NDA4MjQxMDU1LDI2NTQyMS40NTIwODE4NjMyNCwxNTQ0OTYuODg4OTI1NjA1MjUsMzE5Mzg1LjY1MTYxNTYyMjEsMzIxOTM3LjUyOTA5OTQwODUsNTIwNDI0Ni4zNTE0MDY5OSw1NjU1NDQ5LjExODU5MDUzMyw0NjM1MTgwLjY5NDg4MDUyNjUsNDAyNjEyMi4xOTE3Mzk3ODgsNTAzMzY2Ni40ODg4NzI1NCwxMDIyMTg5LjYzNTg1NDM1NjcsNTk3NTUzMS45Mjc0MTg0NjMsMTE4MjU5Mi4yMTIwMzIyMTMzLDMxMzkzMjcuMTM1NzAzMjQxNSwyODA1OTg2LjI1MDQwOTk5NDcsNjQ0MTM4Ny4wODU0OTE5MjMsNDY2NjUzMC42MDU0NzY4MTcsMTMxMjQwMS40NzQ1MzA1OTE0LDM4MTk2ODQuMDY4MTM5MjcsMjU0MzgwMi43NTEwNDU0MjcsMzc1Nzk5NC43MjE5MjM0MzU2LDQxNzMxNTcuODg2NTY5NTA4LDM3MTI0MDIuNDUzNjUzMTA5Myw4NDYyMzQxLjA2ODkwNDk3LDUzOTY1OC4xMTQ1Nzk0OTAyLDY3NTYuOTg0NzE1MjYwMzQxNQorMzIsRnJpIDI1IEZlYiAxMSwyOTcyNzQuMjYzMTc3MDg1MSwyNjU0MjIuNTEzNzY5Nzk0OSwxNTQ0OTcuNTA2OTE0Mzk2OTIsMzE5Mzg2LjkyOTE2MDc4MzY1LDMyMTkzOC44MTY4NTIxMDAzNyw1MjA0MjY3LjE2ODQzNDAzLDU2NTU0NzEuNzQwNDMyMjUxLDQ2MzUxOTkuMjM1NjQwMzg5LDQwMjYxMzguMjk2MjYwNzY0LDUwMzM2ODYuNjIzNTc4NzY0NSwxMDIyMTkzLjcyNDYyMTA3NzUsNTk3NTU1NS44Mjk1OTM5NzgsMTE4MjU5Ni45NDI0MTA1MjIxLDMxMzkzMzkuNjkzMDM2ODk4NSwyODA1OTk3LjQ3NDM3NzQ0NCw2NDQxNDEyLjg1MTA5MTc5Niw0NjY2NTQ5LjI3MTYzNjU3MywxMzEyNDA2LjcyNDE0Njk4ODcsMzgxOTY5OS4zNDY5MDYwOTk1LDI1NDM4MTIuOTI2Mjc2NzgxNiwzNzU4MDA5Ljc1MzkzMjM4Nyw0MTczMTc0LjU3OTIzNDQzOSwzNzEyNDE3LjMwMzI5MjYyMzMsODQ2MjM3NC45MTgzMzY5NDMsNTM5NjYwLjI3MzIxNjI2NTcsNjc1Ny4wMTE3NDMyNTMyNTkKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvUG9wdWxhdGlvbkdyb3d0aFNFSVJfUktfUmVmZXJlbmNlL0h1bWFuUG9wdWxhdGlvbk1vZGVsL2h1bWFuL0RlYXRoc18wLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvUG9wdWxhdGlvbkdyb3d0aFNFSVJfUktfUmVmZXJlbmNlL0h1bWFuUG9wdWxhdGlvbk1vZGVsL2h1bWFuL0RlYXRoc18wLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYzI0NDAxCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Qb3B1bGF0aW9uR3Jvd3RoU0VJUl9SS19SZWZlcmVuY2UvSHVtYW5Qb3B1bGF0aW9uTW9kZWwvaHVtYW4vRGVhdGhzXzAuY3N2CkBAIC0wLDAgKzEgQEAKK2l0ZXJhdGlvbix0aW1lLApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Qb3B1bGF0aW9uR3Jvd3RoU0VJUl9SS19SZWZlcmVuY2UvSHVtYW5Qb3B1bGF0aW9uTW9kZWwvaHVtYW4vRGVhdGhzXzEuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Qb3B1bGF0aW9uR3Jvd3RoU0VJUl9SS19SZWZlcmVuY2UvSHVtYW5Qb3B1bGF0aW9uTW9kZWwvaHVtYW4vRGVhdGhzXzEuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJjMjQ0MDEKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1BvcHVsYXRpb25Hcm93dGhTRUlSX1JLX1JlZmVyZW5jZS9IdW1hblBvcHVsYXRpb25Nb2RlbC9odW1hbi9EZWF0aHNfMS5jc3YKQEAgLTAsMCArMSBAQAoraXRlcmF0aW9uLHRpbWUsCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1BvcHVsYXRpb25Hcm93dGhTRUlSX1JLX1JlZmVyZW5jZS9IdW1hblBvcHVsYXRpb25Nb2RlbC9odW1hbi9EZWF0aHNfMi5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1BvcHVsYXRpb25Hcm93dGhTRUlSX1JLX1JlZmVyZW5jZS9IdW1hblBvcHVsYXRpb25Nb2RlbC9odW1hbi9EZWF0aHNfMi5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjJmNjUyYgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvUG9wdWxhdGlvbkdyb3d0aFNFSVJfUktfUmVmZXJlbmNlL0h1bWFuUG9wdWxhdGlvbk1vZGVsL2h1bWFuL0RlYXRoc18yLmNzdgpAQCAtMCwwICsxLDMzIEBACitpdGVyYXRpb24sdGltZSxFRy1GUkctRzIxMDAwMSxFRy1GUkctRzIxMDAwMixFRy1GUkctRzIxMDAwMyxFRy1GUkctRzIxMDAwNCxFRy1GUkctRzIxMDAwNSxFRy1MT0UtRzI0MDAwMSxFRy1MT0UtRzI0MDAwMixFRy1MT0UtRzI0MDAwMyxFRy1MT0UtRzI0MDAwNCxFRy1MT0UtRzI0MDAwNSxFRy1MT0UtRzI0MDAwNixFRy1MT0UtRzI0MDAwNyxFRy1MT0UtRzI0MDAwOCxFRy1MT0UtRzI0MDAwOSxFRy1VUEUtRzI5MDAwMSxFRy1VUEUtRzI5MDAwMixFRy1VUEUtRzI5MDAwMyxFRy1VUEUtRzI5MDAwNCxFRy1VUEUtRzI5MDAwNSxFRy1VUEUtRzI5MDAwNixFRy1VUEUtRzI5MDAwNyxFRy1VUEUtRzI5MDAwOCxFRy1VUkctRzMwMDAwMSxFRy1VUkctRzMwMDAwMixFRy1VUkctRzMwMDAwMyxFRy1VUkctRzMwMDAwNAorMSxUdWUgMjUgSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzIsV2VkIDI2IEphbiAxMSwxMC40MDMzMjk5Mjc1MjkwNCw5LjI4ODY1NDY5Njk0NzAxOSw1LjQwNjc1MzA3Nzg5MzMwMiwxMS4xNzcxNzg4MjE2MzQ3MDEsMTEuMjY2NDgzOTk0OTM1MDY3LDE4Mi4xMjcxMzAwMzAwMDM0NiwxOTcuOTE3MzYzNTIzOTUwMiwxNjIuMjEyMTgyMTU0MDY2MywxNDAuODk3NjQ5ODA3MzQxNDIsMTc2LjE1NzUzOTI5NDU2MzEsMzUuNzcyNDE1ODYwNzk3Mzk1LDIwOS4xMTg5Mzk5Njg5MjYyNCw0MS4zODU4NDM2MDM0NzAyODUsMTA5Ljg2MzQ4NTA5MzU0NTc4LDk4LjE5NzkzMDcyNDkwODkxLDIyNS40MjE5NDY2MzMyMTYzNSwxNjMuMzA5Mjk5NTU3NDQ1OTcsNDUuOTI4NjMxNzEwMjkxNTgsMTMzLjY3MzE2ODAyMDQ2NzksODkuMDIyNTkxMDAxMTExMzcsMTMxLjUxNDI5NTY2NDg4MTI1LDE0Ni4wNDMyOTE5MDQ3OTE2MywxMjkuOTE4NzU0NTYwMzc3NSwyOTYuMTQ2OTkwMDA1MTk0LDE4Ljg4NTgwNTM1Mzc3NDg3NywwLjIzNjQ2NjU2MDMzMzgwNTA2CiszLFRodSAyNyBKYW4gMTEsMjAuODA2NzAxNDY4NDYxMDE4LDE4LjU3NzM0NjU0ODU4NzEyLDEwLjgxMzUyNzc4Mjg0MjE2NSwyMi4zNTQ0MDIzNTIwNzQwODYsMjIuNTMzMDEzMDU1ODk2MjQ0LDM2NC4yNTQ5ODg1Njk5ODQsMzk1LjgzNTUxODcxODkzNzM1LDMyNC40MjUwMTMxNTgxNTg5LDI4MS43OTU4NjMyMDY0MDkxLDM1Mi4zMTU3ODMyMjA2OTI1LDcxLjU0NDk3NDgxMTU0NDM5LDQxOC4yMzg3MTY0MTUyODUxLDgyLjc3MTg1Mjc1MDY0NjAzLDIxOS43Mjc0MDk2NDE5MTA3OCwxOTYuMzk2MjU0MjQyMzI2MjIsNDUwLjg0NDc5NDk1NjAyMjE2LDMyNi42MTkyNTIzNTMzOTYyLDkxLjg1NzQ0NzEzNTQ3NzQsMjY3LjM0Njg3MDczNDY3NzEsMTc4LjA0NTUzODA5MzI5ODc3LDI2My4wMjkxMTczODc5OTcxMywyOTIuMDg3MTY3OTgzOTE5MiwyNTkuODM4MDI4Nzk2ODEyMyw1OTIuMjk1MTY0NjAwNzE2OSwzNy43NzE2ODYyNTA5MjIyNDQsMC40NzI5MzQwNjY1MzU3NDMxCis0LEZyaSAyOCBKYW4gMTEsMzEuMjEwMTE0NjIyOTYyMzg2LDI3Ljg2NjA3NTU1NTA2ODk1NywxNi4yMjAzMjQxMTQ5MzMxLDMzLjUzMTY3MDU5MTQ5NzAyLDMzLjc5OTU4NzE4MzA2MzgsNTQ2LjM4MzU3NTYyMjg1NTgsNTkzLjc1NDQ2NTU4ODEyOSw0ODYuNjM4NDkzMDE0ODczMyw0MjIuNjk0NjQwMTk5NDU3NjQsNTI4LjQ3NDczMTc4MTIwNjcsMTA3LjMxNzY3Njg1MjgxMzM2LDYyNy4zNTkzMjkzNDI0MjMsMTI0LjE1ODAyNzQ0MjE4OTUyLDMyOS41OTE3NzM2NDY4NTI4NiwyOTQuNTk0OTcwNTUzODIzMTUsNjc2LjI2ODU0NDk3MjAyNTEsNDg5LjkyOTg1ODM5MDQ2NDMsMTM3Ljc4NjQ0NjI3NjI5MjM3LDQwMS4wMjExMDgxNDQ3NjY3NCwyNjcuMDY4ODQxMjc3OTg2OSwzOTQuNTQ0NDY1MTcxNDUyMyw0MzguMTMxNjI4MjM5NzE5NjUsMzg5Ljc1NzgyMjcxMTM4MzYsODg4LjQ0NDUyMzc5MTMwNzYsNTYuNjU3NjQyNjkxNzQ0MywwLjcwOTQwMjUxODYwOTU5OAorNSxTYXQgMjkgSmFuIDExLDQxLjYxMzU2OTM5MTE5OTYxLDM3LjE1NDg0MTcxNjU0MTEzLDIxLjYyNzE0MjA3NDI1MjYzLDQ0LjcwODk4MzU0MDA4MjM2LDQ1LjA2NjIwNjM3NjYxODAyLDcyOC41MTI4OTExOTE1MzMxLDc5MS42NzQyMDQxMzQ2OTE4LDY0OC44NTI2MjE3MjY4MDQ4LDU2My41OTM5ODA3ODg3NDE2LDcwNC42MzQzODQ5Nzg5MjUxLDE0My4wOTA1MjE5ODUxNzY4LDgzNi40ODA3Nzg3NTM2ODU5LDE2NS41NDQzNjc2Nzg3NjI5NCw0MzkuNDU2NTc3MTEwMTMwMDcsMzkyLjc5NDA3OTY2MDk3MTIsOTAxLjY5MzE5NjY4NDgzMiw2NTMuMjQxMTE3NjcxMjYzNSwxODMuNzE1NjI5MTMzNDcxNDUsNTM0LjY5NTg4MDI1Mjg3NTQsMzU2LjA5MjUwMDU1NjYwMDE2LDUyNi4wNjAzMzkwMTczNTA5LDU4NC4xNzY2NzI2NzQ1Mjk2LDUxOS42NzgxMzYzMDYxNzAxLDExODQuNTk1MDY3NTgxNzA0NCw3NS41NDM2NzQ2NzY1NDMxOSwwLjk0NTg3MTkxNjU1OTE1MjcKKzYsU3VuIDMwIEphbiAxMSw1Mi4wMTcwNjU3NzMzMzkxNCw0Ni40NDM2NDUwMzMxNTIyNiwyNy4wMzM5ODE2NjA4ODcyNTMsNTUuODg2MzQxMTk4MDA4ODY0LDU2LjMzMjg3MDYzNjczOTE0NSw5MTAuNjQyOTM1Mjc4OTI5NSw5ODkuNTk0NzM0MzYxNzkxOSw4MTEuMDY3Mzk5Mjk2NTQ5LDcwNC40OTM4ODQ5NzY1MTUsODgwLjc5NDc0MjgxNjY2NTEsMTc4Ljg2MzUxMDIwOTIwNjg4LDEwNDUuNjAzMDY0NjUyNDE5NiwyMDYuOTMwODczNDYxMDI4NDMsNTQ5LjMyMTgyMDAzMzQ5OTksNDkwLjk5MzU4MTU2NTM0MTIsMTEyNy4xMTg3NTAwOTgwNDg4LDgxNi41NTMwMzAxOTg0MDYyLDIyOS42NDQ5OTU3MDc3NDk0Miw2NjguMzcxMTg3MDYxMTQyNSw0NDUuMTE2NTE1OTMwNTYyNSw2NTcuNTc2NzM4OTI3Nzk2Niw3MzAuMjIyMzAxMjkwNjg1NCw2NDkuNTk4OTY5NTgzMjUwMywxNDgwLjc0Njc5NTk3NjY0NTcsOTQuNDI5NzgyMjA1NjIxMTcsMS4xODIzNDIyNjAzODgxOTEKKzcsTW9uIDMxIEphbiAxMSw2Mi40MjA2MDM3Njk1NDc0Miw1NS43MzI0ODU1MDUwNTA5NiwzMi40NDA4NDI4NzQ5MjM0OCw2Ny4wNjM3NDM1NjU0NTU0NSw2Ny41OTk1Nzk5NjM2MDc0MSwxMDkyLjc3MzcwNzg4Nzk1OTUsMTE4Ny41MTYwNTYyNzI1OTYyLDk3My4yODI4MjU3MjY3MDEsODQ1LjM5NDM1Mjc2NTAzMjIsMTA1Ni45NTU4MDUyOTcyNDYsMjE0LjYzNjY0MTUyNTQ3NiwxMjU0LjcyNjE4NzA0MTk3LDI0OC4zMTc1NDQ3ODk2NDgwNSw2NTkuMTg3NTAyNDE4NzIwOCw1ODkuMTkzNDc2MjY4NTA0NiwxMzUyLjU0NTIwNTIxNTI4MjcsOTc5Ljg2NTU5NTk3NDUwNTQsMjc1LjU3NDU0NTk5OTg2MTEsODAyLjA0NzAyODU3MTcwNTYsNTM0LjE0MDg4NzQwMTI5ODYsNzg5LjA5MzY2NDkwNDg5NDQsODc2LjI2ODUxNDA5MDUyMzgsNzc5LjUyMDMyMjU0NDcwMywxNzc2Ljg5OTcwODk4MDg3MDIsMTEzLjMxNTk2NTI3OTI4MDM2LDEuNDE4ODEzNTUwMTAwNDk2MQorOCxUdWUgMSBGZWIgMTEsNzIuODI0MTgzMzc5OTkwOTEsNjUuMDIxMzYzMTMyMzg1ODQsMzcuODQ3NzI1NzE2NDQ3NzgsNzguMjQxMTkwNjQyNjAwOTQsNzguODY2MzM0MzU3NDAzMTUsMTI3NC45MDUyMDkwMjE1MzY2LDEzODUuNDM4MTY5ODcwMjcxOCwxMTM1LjQ5ODkwMTAxOTg1NjUsOTg2LjI5NTM4NDE1NjU0NzcsMTIzMy4xMTc1NzI0MjM0ODU5LDI1MC40MDk5MTU5MzQ1NTY1OCwxNDYzLjg1MDE0NTkyNTY4MjUsMjg5LjcwNDM4MTY2NTI4NCw3NjkuMDUzNjI0MjY3NTQ5Niw2ODcuMzkzNzYzNzcyMDMyLDE1NzcuOTcyNTYyMDQwMTQwNywxMTQzLjE3ODgxNTAwMjE3NDEsMzIxLjUwNDI4MDAxMDU0MTI3LDkzNS43MjM0MDQ3ODY3MDQxLDYyMy4xNjU2MTQ5NzAyMzI2LDkyMC42MTExMTY5NTA3NDc4LDEwMjIuMzE1MzExMDc2MzgyLDkwOS40NDIxOTUxOTI2MDY1LDIwNzMuMDUzODA2NTk5MTE1LDEzMi4yMDIyMjM4OTc4MjI4NSwxLjY1NTI4NTc4NTY5OTg1MgorOSxXZWQgMiBGZWIgMTEsODMuMjI3ODA0NjA0ODM2MDIsNzQuMzEwMjc3OTE1MzA1NTMsNDMuMjU0NjMwMTg1NTQ2NzE2LDg5LjQxODY4MjQyOTYyNDA4LDkwLjEzMzEzMzgxODMwNjU1LDE0NTcuMDM3NDM4NjgyNTc0MiwxNTgzLjM2MTA3NTE1Nzk4NDcsMTI5Ny43MTU2MjUxNzg2MTA3LDExMjcuMTk2OTc5MTUzMzE1OSwxNDA5LjI4MDA0NDE5ODIwMjYsMjg2LjE4MzMzMzQzNzAyMDgsMTY3Mi45NzQ5NDEzMDY5MDMsMzMxLjA5MTM4NDA4ODU5ODQzLDg3OC45MjAxODU1ODE3NDQ2LDc4NS41OTQ0NDQwNzc0OTUyLDE4MDMuNDAwODIwNTc2MjI4MiwxMzA2LjQ5MjY4NzI4NDAyNTQsMzY3LjQzNDE5Nzc0MDUyNDcsMTA2OS40MDAzMTU3MDgyNzYxLDcxMi4xOTA2OTg2Mzg3ODksMTA1Mi4xMjkwOTUwNjc0NjEzLDExNjguMzYyNjkyMjUwNTk2NCwxMDM5LjM2NDU4NzUyOTAzOTUsMjM2OS4yMDkwODg4MzYxMTc2LDE1MS4wODg1NTgwNjE1NTA5LDEuODkxNzU4OTY3MTkwMDQxNAorMTAsVGh1IDMgRmViIDExLDkzLjYzMTQ2NzQ0NDI0OTMsODMuNTk5MjI5ODUzOTU4NjUsNDguNjYxNTU2MjgyMzA2NzgsMTAwLjU5NjIxODkyNjcwMzgsMTAxLjM5OTk3ODM0NjQ5Nzk1LDE2MzkuMTcwMzk2ODczOTg4LDE3ODEuMjg0NzcyMTM4OTAxOSwxNDU5LjkzMjk5ODIwNTU1OTcsMTI2OC4wOTkxMzc3NTc1OTE1LDE1ODUuNDQzMjIwNjI0MjE1NywzMjEuOTU2ODk0MDMzNDQxMywxODgyLjEwMDU3MzE4ODk3ODQsMzcyLjQ3ODU1MjA2MDI1MzcsOTg4Ljc4NzE4NjM2MzA2MzcsODgzLjc5NTUxNzE4NjQ2NDcsMjAyOC44Mjk5ODA4MjcxNTMzLDE0NjkuODA3MjEyODIyNjcxOCw0MTMuMzY0Mjk5MTkwNTQ2NjYsMTIwMy4wNzc3NjEzMzg1NjIsODAxLjIxNjEzODQwODM5MiwxMTgzLjY0NzU5OTI1NzEzOTUsMTMxNC40MTA2NTc2MTU1MDM5LDExNjkuMjg3NDk5NTU2MDgxLDI2NjUuMzY1NTU1Njk2NjIsMTY5Ljk3NDk2Nzc3MDc2NjY4LDIuMTI4MjMzMDk0NTc0ODQ5NQorMTEsRnJpIDQgRmViIDExLDEwNC4wMzUxNzE4OTgzOTcxNCw5Mi44ODgyMTg5NDg0OTM4NCw1NC4wNjg1MDQwMDY4MTQ0ODYsMTExLjc3MzgwMDEzNDAxODkzLDExMi42NjY4Njc5NDIxNTc1NSwxODIxLjMwNDA4MzU5ODY5MTcsMTk3OS4yMDkyNjA4MTYxOTAyLDE2MjIuMTUxMDIwMTAzMjk4LDE0MDkuMDAxODU5OTcxNjI3NSwxNzYxLjYwNzEwMTcwNDM0NDEsMzU3LjczMDU5NzcyNDM5MDM1LDIwOTEuMjI3MDQxNTc1MjUzNyw0MTMuODY1ODg1NTgwOTExOSwxMDk4LjY1NDYyNjYxMzI2NTUsOTgxLjk5Njk4MzEwMDUxMjcsMjI1NC4yNjAwNDI3OTY1MjEyLDE2MzMuMTIyMzkxNjIwNzI2OCw0NTkuMjk0NTg0MzYxMzQxNjYsMTMzNi43NTU3NDE2Nzk2OTk0LDg5MC4yNDE5MzQyODA0NjY1LDEzMTUuMTY2NjI5NTIxODg2NSwxNDYwLjQ1OTIwNzE3MzQ0LDEyOTkuMjEwOTMxMjc1ODA5OCwyOTYxLjUyMzIwNzE4NTM1ODQsMTg4Ljg2MTQ1MzAyNTc3MjMzLDIuMzY0NzA4MTY3ODU4MDU4CisxMixTYXQgNSBGZWIgMTEsMTE0LjQzODkxNzk2NzQ0NiwxMDIuMTc3MjQ1MTk5MDU5NzUsNTkuNDc1NDczMzU5MTU2MzUsMTIyLjk1MTQyNjA1MTc0ODMsMTIzLjkzMzgwMjYwNTQ2NTY3LDIwMDMuNDM4NDk4ODU5NTk5NiwyMTc3LjEzNDU0MTE5MzAxNywxNzg0LjM2OTY5MDg3NDQyMTgsMTU0OS45MDUxNDU3OTc2OCwxOTM3Ljc3MTY4NzQ0MTQwNiwzOTMuNTA0NDQ0NTEwNDQwNCwyMzAwLjM1NDM0NjQ2OTA3NSw0NTUuMjUzMzg0NjUxMjM1MiwxMjA4LjUyMjUwNjMzNDEwNjUsMTA4MC4xOTg4NDE4MjEyMDk3LDI0NzkuNjkxMDA2NDg3OTQzLDE3OTYuNDM4MjIzNjgwODAzNSw1MDUuMjI1MDUzMjUzNjQ1MTcsMTQ3MC40MzQyNTY3MzM4Mjc5LDk3OS4yNjgwODYyNTY0MzY2LDE0NDYuNjg2MTg1ODYzODA2NSwxNjA2LjUwODM0MDkyNjc0NCwxNDI5LjEzNDg4MjY5MDMwNTYsMzI1Ny42ODIwNDMzMDcwNzM0LDIwNy43NDgwMTM4MjY4NzAyMiwyLjYwMTE4NDE4NzA0MzQ1MjIKKzEzLFN1biA2IEZlYiAxMSwxMjQuODQyNzA1NjUxNTYyMzQsMTExLjQ2NjMwODYwNTgwNDkzLDY0Ljg4MjQ2NDMzOTQxODg2LDEzNC4xMjkwOTY2ODAwNzA3LDEzNS4yMDA3ODIzMzY2MDI1NywyMTg1LjU3MzY0MjY1OTYyNCwyMzc1LjA2MDYxMzI3MjU0NjYsMTk0Ni41ODkwMTA1MjE1MjYsMTY5MC44MDg5OTUyMzgwMDI4LDIxMTMuOTM2OTc3ODM4MjE5Nyw0MjkuMjc4NDM0MzkyMTYzNjYsMjUwOS40ODI0ODc4NzM3OTEsNDk2LjY0MTA0OTI3MTg4NTgzLDEzMTguMzkwODI1NTI3MzQ1LDExNzguNDAxMDkzMzUwMTI2OCwyNzA1LjEyMjg3MTkwNTAyMDUsMTk1OS43NTQ3MDkwMDU1MTUsNTUxLjE1NTcwNTg2ODE5MSwxNjA0LjExMzMwNjUwMzA4NTYsMTA2OC4yOTQ1OTQzMzc3MjcsMTU3OC4yMDYyNjgyODUwMDQ2LDE3NTIuNTU4MDU4ODc3NzUxMSwxNTU5LjA1OTM1MzgwMTY0NTYsMzU1My44NDIwNjQwNjY1MDA0LDIyNi42MzQ2NTAxNzQzNjIxOCwyLjgzNzY2MTE1MjEzNDgxMjUKKzE0LE1vbiA3IEZlYiAxMSwxMzUuMjQ2NTM0OTUwOTEyNzcsMTIwLjc1NTQwOTE2ODg3ODA5LDcwLjI4OTQ3Njk0NzY4ODU2LDE0NS4zMDY4MTIwMTkxNjUxLDE0Ni40Njc4MDcxMzU3NDg2LDIzNjcuNzA5NTE1MDAxNjgxNywyNTcyLjk4NzQ3NzA1Nzk0OTUsMjEwOC44MDg5NzkwNDcyMDgsMTgzMS43MTM0MDgyOTQ4NTE3LDIyOTAuMTAyOTcyODk3NjA2NCw0NjUuMDUyNTY3MzcwMTMyOCwyNzE4LjYxMTQ2NTc5Mjc0MzMsNTM4LjAyODg3OTQ0MzUyNiwxNDI4LjI1OTU4NDE5NDc0MDUsMTI3Ni42MDM3Mzc2ODg4MzU1LDI5MzAuNTU1NjM5MDUxMzY0MywyMTIzLjA3MTg0NzU5NzQ3NTQsNTk3LjA4NjU0MjIwNTcxNTUsMTczNy43OTI4OTA5ODk2MTIzLDExNTcuMzIxNDU4NTI1NzYyNiwxNzA5LjcyNjg3Njc4NzU4MzcsMTg5OC42MDgzNjEwMjg3OTg1LDE2ODguOTg0MzQ0NjExOTEsMzg1MC4wMDMyNjk0NjgzODA1LDI0NS41MjEzNjIwNjg1NTA4LDMuMDc0MTM5MDYzMTM1OTI4CisxNSxUdWUgOCBGZWIgMTEsMTQ1LjY1MDQwNTg2NTY2MzY5LDEzMC4wNDQ1NDY4ODg0Mjc4Nyw3NS42OTY1MTExODQwNTE5NywxNTYuNDg0NTcyMDY5MjEwNCwxNTcuNzM0ODc3MDAzMDgzOTQsMjU0OS44NDYxMTU4ODg2ODcsMjc3MC45MTUxMzI1NTIzOTI2LDIyNzEuMDI5NTk2NDU0MDYzLDE5NzIuNjE4Mzg0OTcwNDgwNSwyNDY2LjI2OTY3MjYyMjM4MDgsNTAwLjgyNjg0MzQ0NDkyMDEsMjkyNy43NDEyODAyMjkyODI0LDU3OS40MTY4NzUxNjY4MTg1LDE1MzguMTI4NzgyMzM4MDQ5NiwxMzc0LjgwNjc3NDgzODkwODcsMzE1NS45ODkzMDc5MzA1ODE2LDIyODYuMzg5NjM5NDU5Mjk5NCw2NDMuMDE3NTYyMjY2OTUzMSwxODcxLjQ3MzAxMDE5NTU0NzQsMTI0Ni4zNDg2Nzg4MjE5NjY4LDE4NDEuMjQ4MDExMzczNjUsMjA0NC42NTkyNDczODIyMjM4LDE4MTguOTA5ODU1MTIzMTc4Miw0MTQ2LjE2NTY1OTUxNzQ1NDUsMjY0LjQwODE0OTUwOTczODA1LDMuMzEwNjE3OTIwMDUwNTgKKzE2LFdlZCA5IEZlYiAxMSwxNTYuMDU0MzE4Mzk1OTgxNDMsMTM5LjMzMzcyMTc2NDYwMjcsODEuMTAzNTY3MDQ4NTk1NjQsMTY3LjY2MjM3NjgzMDM4NTMsMTY5LjAwMTk5MTkzODc4OTEsMjczMS45ODM0NDUzMjM1NTI2LDI5NjguODQzNTc5NzU5MDQxNCwyNDMzLjI1MDg2Mjc0NDY4NTUsMjExMy41MjM5MjUyNjcxNDMsMjY0Mi40MzcwNzcwMTUzNjM3LDUzNi42MDEyNjI2MTcwOTgsMzEzNi44NzE5MzExODY3NTMsNjIwLjgwNTAzNjQ0MjQyNTMsMTY0Ny45OTg0MTk5NTkwMzAxLDE0NzMuMDEwMjA0ODAxOTE2MiwzMzgxLjQyMzg3ODU0NjI3NzYsMjQ0OS43MDgwODQ1OTM1OTUyLDY4OC45NDg3NjYwNTI2MzgzLDIwMDUuMTUzNjY0MTIzMDI4NiwxMzM1LjM3NjI1NTIyNzc2NDcsMTk3Mi43Njk2NzIwNDUzMDY4LDIxOTAuNzEwNzE3OTQwMzYxNSwxOTQ4LjgzNTg4NTMzNzUyNzgsNDQ0Mi4zMjkyMzQyMTg0NTksMjgzLjI5NTAxMjQ5ODIyNjMsMy41NDcwOTc3MjI4ODI1NTE1CisxNyxUaHUgMTAgRmViIDExLDE2Ni40NTgyNzI1NDIwMzI1LDE0OC42MjI5MzM3OTc1NTE0NCw4Ni41MTA2NDQ1NDE0MDYwNCwxNzguODQwMjI2MzAyODY4NjQsMTgwLjI2OTE1MTk0MzA0Mzk0LDI5MTQuMTIxNTAzMzA5MTk0LDMxNjYuNzcyODE4NjgxMDYyNywyNTk1LjQ3Mjc3NzkyMTY2OSwyMjU0LjQzMDAyOTE4NzA5NCwyODE4LjYwNTE4NjA3OTM3Myw1NzIuMzc1ODI0ODg3MjM4OSwzMzQ2LjAwMzQxODY2ODUwMSw2NjIuMTkzMzYzMjcxMDA3NywxNzU3Ljg2ODQ5NzA1OTQ0LDE1NzEuMjE0MDI3NTc5NDI4MSwzNjA2Ljg1OTM1MDkwMjA1OTMsMjYxMy4wMjcxODMwMDI5NzgsNzM0Ljg4MDE1MzU2MzUwNTYsMjEzOC44MzQ4NTI3NzQxOTI4LDE0MjQuNDA0MTg3NzQ0NTgwNCwyMTA0LjI5MTg1ODgwNDY1NzcsMjMzNi43NjI3NzI3MDU1NTA2LDIwNzguNzYyNDM1MjU3MDM3NCw0NzM4LjQ5Mzk5MzU3NjEyOSwzMDIuMTgxOTUxMDM0MzE3NiwzLjc4MzU3ODQ3MTYzNTYyNDcKKzE4LEZyaSAxMSBGZWIgMTEsMTc2Ljg2MjI2ODMwMzk4MzUsMTU3LjkxMjE4Mjk4NzQyMjU3LDkxLjkxNzc0MzY2MjU2OTYsMTkwLjAxODEyMDQ4NjgzOTMsMTkxLjUzNjM1NzAxNjAyOTAzLDMwOTYuMjYwMjg5ODQ4NTI0NywzMzY0LjcwMjg0OTMyMTYyNSwyNzU3LjY5NTM0MTk4NzYxMiwyMzk1LjMzNjY5NjczMjU5MDYsMjk5NC43NzM5OTk4MTcyMjgzLDYwOC4xNTA1MzAyNTU5MTQ5LDM1NTUuMTM1NzQyNjc3ODcxMyw3MDMuNTgxODU1NjUzMjI4OCwxODY3LjczOTAxMzY0MTAzOCwxNjY5LjQxODI0MzE3MzAxNzYsMzgzMi4yOTU3MjUwMDE1MzQzLDI3NzYuMzQ2OTM0NjkwMDU5Miw3ODAuODExNzI0ODAwMjkxLDIyNzIuNTE2NTc2MTUxMTg1MywxNTEzLjQzMjQ3NjM3MzgzOSwyMjM1LjgxNDU3MTY1MzgwOTcsMjQ4Mi44MTU0MTE2ODAxMjcsMjIwOC42ODk1MDQ4ODM3ODgsNTAzNC42NTk5Mzc1OTUyMDUsMzIxLjA2ODk2NTExODMxNDE3LDQuMDIwMDYwMTY2MzEzNTg5CisxOSxTYXQgMTIgRmViIDExLDE4Ny4yNjYzMDU2ODIwMDA2LDE2Ny4yMDE0NjkzMzQzNjQ4Miw5Ny4zMjQ4NjQ0MTIxNzI5MSwyMDEuMTk2MDU5MzgyNDc2MDIsMjAyLjgwMzYwNzE1NzkyNDQsMzI3OC4zOTk4MDQ5NDQ0NTcsMzU2Mi42MzM2NzE2ODM4ODgsMjkxOS45MTg1NTQ5NDUxMDc2LDI1MzYuMjQzOTI3OTA1ODgxNywzMTcwLjk0MzUxODIzMTc0ODQsNjQzLjkyNTM3ODcyMzY5ODMsMzc2NC4yNjg5MDMyMTgyMDkzLDc0NC45NzA1MTM1ODk3NTAxLDE5NzcuNjA5OTY5NzA1NTgsMTc2Ny42MjI4NTE1ODQyNTUsNDA1Ny43MzMwMDA4NDgzMDcsMjkzOS42NjczMzk2NTc0NTYsODI2Ljc0MzQ3OTc2MzcyODYsMjQwNi4xOTg4MzQyNTYxMzcsMTYwMi40NjExMjExMTY5NjMzLDIzNjcuMzM3ODEwNTk0ODY0NSwyNjI4Ljg2ODYzNDg2NjQyOSwyMzM4LjYxNzA5NDIxOTg1NCw1MzMwLjgyNzA2NjI4MDQyNiwzMzkuOTU2MDU0NzUwNTE4LDQuMjU2NTQyODA2OTIwMjIxCisyMCxTdW4gMTMgRmViIDExLDE5Ny42NzAzODQ2NzYyNTA1NiwxNzYuNDkwNzkyODM4NTI2NzQsMTAyLjczMjAwNjc5MDMwMjQ0LDIxMi4zNzQwNDI5ODk5NTc2NCwyMTQuMDcwOTAyMzY4OTEwNTcsMzQ2MC41NDAwNDg1OTk5MDcsMzc2MC41NjUyODU3NzEwMjY1LDMwODIuMTQyNDE2Nzk2NzU0MywyNjc3LjE1MTcyMjcwOTIyNDUsMzM0Ny4xMTM3NDEzMjU3NTEsNjc5LjcwMDM3MDI5MTE2MTgsMzk3My40MDI5MDAyOTI4NjE0LDc4Ni4zNTkzMzcwODEyMzQyLDIwODcuNDgxMzY1MjU0ODI3MywxODY1LjgyNzg1MjgxNDcxMTQsNDI4My4xNzExNzg0NDU5ODg1LDMxMDIuOTg4Mzk3OTA3Nzc4LDg3Mi42NzU0MTg0NTQ1NTMsMjUzOS44ODE2MjcwOTExOTEsMTY5MS40OTAxMjE5NzUzNzksMjQ5OC44NjE1NzU2Mjk5MjY0LDI3NzQuOTIyNDQyMjY2NzkyLDI0NjguNTQ1MjAzMjY3MzE3NCw1NjI2Ljk5NTM3OTYzNjUzNCwzNTguODQzMjE5OTMxMjMxNiw0LjQ5MzAyNjM5MzQ1OTMwNworMjEsTW9uIDE0IEZlYiAxMSwyMDguMDc0NTA1Mjg2ODk5NjQsMTg1Ljc4MDE1MzUwMDA1NzAzLDEwOC4xMzkxNzA3OTcwNDQ3NywyMjMuNTUyMDcxMzA5NDYzMTQsMjI1LjMzODI0MjY0OTE2NzQ2LDM2NDIuNjgxMDIwODE3Nzg4NSwzOTU4LjQ5NzY5MTU4NjIwNDQsMzI0NC4zNjY5Mjc1NDUxNDUsMjgxOC4wNjAwODExNDQ4NzE3LDM1MjMuMjg0NjY5MTAyMDU3LDcxNS40NzU1MDQ5NTg4Nzc4LDQxODIuNTM3NzMzOTA1MTc0LDgyNy43NDgzMjYxMjgzNDM1LDIxOTcuMzUzMjAwMjkwNTMxNywxOTY0LjAzMzI0Njg2NTk1NzIsNDUwOC42MTAyNTc3OTgxNzcsMzI2Ni4zMTAxMDk0NDM2MzksOTE4LjYwNzU0MDg3MzQ5OTcsMjY3My41NjQ5NTQ2NTg0ODY0LDE3ODAuNTE5NDc4OTUwNTA5NywyNjMwLjM4NTg2Njc2MTEwMSwyOTIwLjk3NjgzMzg4MzU1MjQsMjU5OC40NzM4MzIwMjgyNTUsNTkyMy4xNjQ4Nzc2NjgyNjIsMzc3LjczMDQ2MDY2MDc1Njc2LDQuNzI5NTEwOTI1OTM0NjI5CisyMixUdWUgMTUgRmViIDExLDIxOC40Nzg2Njc1MTQxMTQzNiwxOTUuMDY5NTUxMzE5MTA0MjgsMTEzLjU0NjM1NjQzMjQ4NjM2LDIzNC43MzAxNDQzNDExNzE1MiwyMzYuNjA1NjI3OTk4ODc1ODYsMzgyNC44MjI3MjE2MDEwMTY0LDQxNTYuNDMwODg5MTMyNTg3LDM0MDYuNTkyMDg3MTkyODc2LDI5NTguOTY5MDAzMjE1MDgyNSwzNjk5LjQ1NjMwMTU2MzQ4MTIsNzUxLjI1MDc4MjcyNzQxOSw0MzkxLjY3MzQwNDA1ODQ5NSw4NjkuMTM3NDgwNzMxNzQwMywyMzA3LjIyNTQ3NDgxNDQ1NiwyMDYyLjIzOTAzMzczOTU2NSw0NzM0LjA1MDIzODkwODQ5MiwzNDI5LjYzMjQ3NDI2NzY1Myw5NjQuNTM5ODQ3MDIxMzA0NCwyODA3LjI0ODgxNjk2MDE2MjUsMTg2OS41NDkxOTIwNDM3ODEsMjc2MS45MTA2ODM5OTA0OTIsMzA2Ny4wMzE4MDk3MTkwNDgsMjcyOC40MDI5ODA1MDQ3NDksNjIxOS4zMzU1NjAzODAzNTIsMzk2LjYxNzc3NjkzOTM5NjE1LDQuOTY1OTk2NDA0MzQ5OTc1CisyMyxXZWQgMTYgRmViIDExLDIyOC44ODI4NzEzNTgwNjEyNywyMDQuMzU4OTg2Mjk1ODE3MTgsMTE4Ljk1MzU2MzY5NjcxMzgsMjQ1LjkwODI2MjA4NTI2MTQ0LDI0Ny44NzMwNTg0MTgyMTU3OCw0MDA2Ljk2NTE1MDk1MjUwNiw0MzU0LjM2NDg3ODQxMzM0OCwzNTY4LjgxNzg5NTc0MjU0NTMsMzA5OS44Nzg0ODg5MjIxMDk3LDM4NzUuNjI4NjM4NzEyODQ2Niw3ODcuMDI2MjAzNTk3MzU3Nyw0NjAwLjgwOTkxMDc1NjE3MSw5MTAuNTI2ODAwODkyMDg2NiwyNDE3LjA5ODE4ODgyODM1OCwyMTYwLjQ0NTIxMzQzNzEwNjgsNDk1OS40OTExMjE3ODA1MzgsMzU5Mi45NTU0OTIzODI0MzQsMTAxMC40NzIzMzY4OTg3MDA2LDI5NDAuOTMzMjEzOTk4MzU3NiwxOTU4LjU3OTI2MTI1NjYxNzksMjg5My40MzYwMjczMjAyMDUsMzIxMy4wODczNjk3NzU2MTYsMjg1OC4zMzI2NDg2OTg4NzUzLDY1MTUuNTA3NDI3Nzc3NTQ0LDQxNS41MDUxNjg3Njc0NTE3LDUuMjAyNDgyODI4NzA5MTI2CisyNCxUaHUgMTcgRmViIDExLDIzOS4yODcxMTY4MTg5MDY4NCwyMTMuNjQ4NDU4NDMwMzQ0MjIsMTI0LjM2MDc5MjU4OTgxMzUzLDI1Ny4wODY0MjQ1NDE5MTE3NSwyNTkuMTQwNTMzOTA3MzY3NSw0MTg5LjEwODMwODg3NTE2OCw0NTUyLjI5OTY1OTQzMTY0NywzNzMxLjA0NDM1MzE5Njc0NTgsMzI0MC43ODg1MzgyNjgyMDQsNDA1MS44MDE2ODA1NTI5NjksODIyLjgwMTc2NzU2OTI2NTcsNDgwOS45NDcyNTQwMDE1NDcsOTUxLjkxNjI4NjYxMDA0NDgsMjUyNi45NzEzNDIzMzM5OTcsMjI1OC42NTE3ODU5NjAxNTMsNTE4NC45MzI5MDY0MTc5MTgsMzc1Ni4yNzkxNjM3OTA1OTMsMTA1Ni40MDUwMTA1MDY0MjM3LDMwNzQuNjE4MTQ1Nzc1MjA4NiwyMDQ3LjYwOTY4NjU5MDQ0MywzMDI0Ljk2MTg5Njc1MjM0MzQsMzM1OS4xNDM1MTQwNTU1OTIsMjk4OC4yNjI4MzY2MTI3MTQ2LDY4MTEuNjgwNDc5ODY0NTczNSw0MzQuMzkyNjM2MTQ1MjI1NTQsNS40Mzg5NzAxOTkwMTU4NjQ1CisyNSxGcmkgMTggRmViIDExLDI0OS42OTE0MDM4OTY4MTc0NiwyMjIuOTM3OTY3NzIyODM0MSwxMjkuNzY4MDQzMTExODcyMDYsMjY4LjI2NDYzMTcxMTMwMTQsMjcwLjQwODA1NDQ2NjUxMTQsNDM3MS4yNTIxOTUzNzE5Miw0NzUwLjIzNTIzMjE5MDY1NSwzODkzLjI3MTQ1OTU1ODA3MzcsMzM4MS42OTkxNTEyNTU2MjQ3LDQyMjcuOTc1NDI3MDg2NjY5LDg1OC41Nzc0NzQ2NDM3MTU3LDUwMTkuMDg1NDMzNzk3OTY4LDk5My4zMDU5Mzc4ODYyNzY4LDI2MzYuODQ0OTM1MzMzMTI4LDIzNTYuODU4NzUxMzEwMjc1Miw1NDEwLjM3NTU5MjgyNDIzOSwzOTE5LjYwMzQ4ODQ5NDc0NDQsMTEwMi4zMzc4Njc4NDUyMDg4LDMyMDguMzAzNjEyMjkyODU3LDIxMzYuNjQwNDY4MDQ2NjgxNywzMTU2LjQ4ODI5MjI4OTAxMDYsMzUwNS4yMDAyNDI1NjEzMTI3LDMxMTguMTkzNTQ0MjQ4MzQ0Niw3MTA3Ljg1NDcxNjY0NjE3OSw0NTMuMjgwMTc5MDczMDIwMSw1LjY3NTQ1ODUxNTI3Mzk3OAorMjYsU2F0IDE5IEZlYiAxMSwyNjAuMDk1NzMyNTkxOTU5NjMsMjMyLjIyNzUxNDE3MzQzNTQ4LDEzNS4xNzUzMTUyNjI5NzU5NywyNzkuNDQyODgzNTkzNjA5MDUsMjgxLjY3NTYyMDA5NTgyNzYsNDU1My4zOTY4MTA0NDU2NzYsNDk0OC4xNzE1OTY2OTM1MzUsNDA1NS40OTkyMTQ4MjkxMjUzLDM1MjIuNjEwMzI3ODg2NjI1Myw0NDA0LjE0OTg3ODMxNjc2NSw4OTQuMzUzMzI0ODIxMjgwNSw1MjI4LjIyNDQ1MDE0ODc4NCwxMDM0LjY5NTc1NDcyMTQ0NTIsMjc0Ni43MTg5Njc4Mjc1MTEsMjQ1NS4wNjYxMDk0ODkwNDQzLDU2MzUuODE5MTgxMDAzMTEsNDA4Mi45Mjg0NjY0OTc1MDE2LDExNDguMjcwOTA4OTE1NzkxLDMzNDEuOTg5NjEzNTUzNDQxLDIyMjUuNjcxNjA1NjI2NzU5NiwzMjg4LjAxNTIxMzkzMjMxMzYsMzY1MS4yNTc1NTUyOTUxMTYsMzI0OC4xMjQ3NzE2MDc4NDQsNzQwNC4wMzAxMzgxMjcxMDY1LDQ3Mi4xNjc3OTc1NTExMzc2LDUuOTExOTQ3Nzc3NDg3MjQ4CisyNyxTdW4gMjAgRmViIDExLDI3MC41MDAxMDI5MDQ0OTk4LDI0MS41MTcwOTc3ODIyOTcwMSwxNDAuNTgyNjA5MDQzMjExNzMsMjkwLjYyMTE4MDE4OTAxMzY3LDI5Mi45NDMyMzA3OTU0OTY0NSw0NzM1LjU0MjE1NDA5OTM0OCw1MTQ2LjEwODc1Mjk0MzQ1Niw0MjE3LjcyNzYxOTAxMjQ5NCwzNjYzLjUyMjA2ODE2MzQ1ODIsNDU4MC4zMjUwMzQyNDYwNzIsOTMwLjEyOTMxODEwMjUzMTksNTQzNy4zNjQzMDMwNTczMzYsMTA3Ni4wODU3MzcxMTYyMTE1LDI4NTYuNTkzNDM5ODE4OTAyLDI1NTMuMjczODYwNDk4MDMxLDU4NjEuMjYzNjcwOTU4MTM3LDQyNDYuMjU0MDk3ODAxNDc1LDExOTQuMjA0MTMzNzE4OTA0NCwzNDc1LjY3NjE0OTU1OTA5ODYsMjMxNC43MDMwOTkzMzIwOTk2LDM0MTkuNTQyNjYxNjg0MzU0NywzNzk3LjMxNTQ1MjI1OTMzOCwzMzc4LjA1NjUxODY5MzI5MjcsNzcwMC4yMDY3NDQzMTIwODUsNDkxLjA1NTQ5MTU3OTg3OTksNi4xNDg0Mzc5ODU2NTk0NTc1CisyOCxNb24gMjEgRmViIDExLDI4MC45MDQ1MTQ4MzQ2MDQ0LDI1MC44MDY3MTg1NDk1NjczLDE0NS45ODk5MjQ0NTI2NjU5LDMwMS43OTk1MjE0OTc2OTQxLDMwNC4yMTA4ODY1NjU2OTg0LDQ5MTcuNjg4MjI2MzM1ODU1LDUzNDQuMDQ2NzAwOTQzNTg3LDQzNzkuOTU2NjcyMTEwNzgsMzgwNC40MzQzNzIwODgzODAzLDQ3NTYuNTAwODk0ODc3NDE2LDk2NS45MDU0NTQ0ODgwNDI3LDU2NDYuNTA0OTkyNTI2OTc0LDExMTcuNDc1ODg1MDcxMjM5MiwyOTY2LjQ2ODM1MTMwOTA2LDI2NTEuNDgyMDA0MzM4ODA3Nyw2MDg2LjcwOTA2MjY5MjkyODUsNDQwOS41ODAzODI0MDkyODMsMTI0MC4xMzc1NDIyNTUyODQ5LDM2MDkuMzYzMjIwMzExOTcxLDI0MDMuNzM0OTQ5MTY0MTI2LDM1NTEuMDcwNjM1NTQ3MjQsMzk0My4zNzM5MzM0NTYzMTg0LDM1MDcuOTg4Nzg1NTA2NzY5LDc5OTYuMzg0NTM1MjA1ODYsNTA5Ljk0MzI2MTE1OTU0OTYsNi4zODQ5MjkxMzk3OTQzOTM1CisyOSxUdWUgMjIgRmViIDExLDI5MS4zMDg5NjgzODI0NCwyNjAuMDk2Mzc2NDc1Mzk1LDE1MS4zOTcyNjE0OTE0MjQ5MywzMTIuOTc3OTA3NTE5ODI5MiwzMTUuNDc4NTg3NDA2NjEzMzcsNTA5OS44MzUwMjcxNTgxMDUsNTU0MS45ODU0NDA2OTcwOTMsNDU0Mi4xODYzNzQxMjY1NzUsMzk0NS4zNDcyMzk2NjM2NDUzLDQ5MzIuNjc3NDYwMjEzNjA4LDEwMDEuNjgxNzMzOTc4Mzg1Myw1ODU1LjY0NjUxODU2MTA0MiwxMTU4Ljg2NjE5ODU4NzE4OTUsMzA3Ni4zNDM3MDIyOTk3NDI3LDI3NDkuNjkwNTQxMDEyOTQ1Miw2MzEyLjE1NTM1NjIxMTA4OSw0NTcyLjkwNzMyMDMyMzUzNCwxMjg2LjA3MTEzNDUyNTY2NjgsMzc0My4wNTA4MjU4MTQxOTUsMjQ5Mi43NjcxNTUxMjQyNjQ3LDM2ODIuNTk5MTM1NTIzMDcyLDQwODkuNDMyOTk4ODg4MzkxLDM2MzcuOTIxNTcyMDUwMzUyNiw4MjkyLjU2MzUxMDgxMzE2Myw1MjguODMxMTA2MjkwNDQ4Niw2LjYyMTQyMTIzOTg5NTgzNgorMzAsV2VkIDIzIEZlYiAxMSwzMDEuNzEzNDYzNTQ4MTczMSwyNjkuMzg2MDcxNTU5OTI4NjcsMTU2LjgwNDYyMDE1OTU3NTQyLDMyNC4xNTYzMzgyNTU1OTc4NiwzMjYuNzQ2MzMzMzE4NDIyLDUyODEuOTgyNTU2NTY5MDE4LDU3MzkuOTI0OTcyMjA3MTQ0LDQ3MDQuNDE2NzI1MDYyNDc3LDQwODYuMjYwNjcwODkxNTA5LDUxMDguODU0NzMwMjU3NDczLDEwMzcuNDU4MTU2NTc0MTMyMyw2MDY0Ljc4ODg4MTE2Mjg4OSwxMjAwLjI1NjY3NzY2NDcyNTIsMzE4Ni4yMTk0OTI3OTI3MDk0LDI4NDcuODk5NDcwNTIyMDE2LDY1MzcuNjAyNTUxNTE2MjI2LDQ3MzYuMjM0OTExNTQ2ODQ2LDEzMzIuMDA0OTEwNTMwNzg1OCwzODc2LjczODk2NjA2NzkxMTQsMjU4MS43OTk3MTcyMTM5MzksMzgxNC4xMjgxNjE2MTM5NTcsNDIzNS40OTI2NDg1NTc4OTQsMzc2Ny44NTQ4NzgzMjYxMjI2LDg1ODguNzQzNjcxMTM4NzQyLDU0Ny43MTkwMjY5NzI4Nzk0LDYuODU3OTE0Mjg1OTY3NTczCiszMSxUaHUgMjQgRmViIDExLDMxMi4xMTgwMDAzMzE5NywyNzguNjc1ODAzODAzMzE3LDE2Mi4yMTIwMDA0NTcyMDM4MywzMzUuMzM0ODEzNzA1MTc4OTMsMzM4LjAxNDEyNDMwMTMwNDMsNTQ2NC4xMzA4MTQ1NzE1MDQsNTkzNy44NjUyOTU0NzY5MDEsNDg2Ni42NDc3MjQ5MjEwNzksNDIyNy4xNzQ2NjU3NzQyMjQsNTI4NS4wMzI3MDUwMTE4Mjg1LDEwNzMuMjM0NzIyMjc1ODU1OCw2MjczLjkzMjA4MDMzNTg1OSwxMjQxLjY0NzMyMjMwNDUwODQsMzI5Ni4wOTU3MjI3ODk3MTY1LDI5NDYuMTA4NzkyODY3NTkwNiw2NzYzLjA1MDY0ODYxMTk0OCw0ODk5LjU2MzE1NjA4MTgyOSwxMzc3LjkzODg3MDI3MTM3Niw0MDEwLjQyNzY0MTA3NTI1OCwyNjcwLjgzMjYzNTQzNDU3MzYsMzk0NS42NTc3MTM4MjE5OTc3LDQzODEuNTUyODgyNDY3MTY1LDM4OTcuNzg4NzA0MzM2MTU2Niw4ODg0LjkyNTAxNjE4NzMyOCw1NjYuNjA3MDIzMjA3MTQ0LDcuMDk0NDA4Mjc4MDEzMzg2CiszMixGcmkgMjUgRmViIDExLDMyMi41MjI1Nzg3MzM5OTczLDI4Ny45NjU1NzMyMDU3MDg2NywxNjcuNjE5NDAyMzg0Mzk2NjQsMzQ2LjUxMzMzMzg2ODc1MTEsMzQ5LjI4MTk2MDM1NTQ0MDcsNTY0Ni4yNzk4MDExNjg0NzksNjEzNS44MDY0MTA1MDk1MzUsNTAyOC44NzkzNzM3MDQ5NzgsNDM2OC4wODkyMjQzMTQwNDQsNTQ2MS4yMTEzODQ0Nzk0OTIsMTEwOS4wMTE0MzEwODQxMjgsNjQ4My4wNzYxMTYwODMyOTcsMTI4My4wMzgxMzI1MDcyMDEsMzQwNS45NzIzOTIyOTI1MjIzLDMwNDQuMzE4NTA4MDUxMjM5NCw2OTg4LjQ5OTY0NzUwMTg2MjUsNTA2Mi44OTIwNTM5MzEwOTYsMTQyMy44NzMwMTM3NDgxNzIsNDE0NC4xMTY4NTA4MzgzNzMsMjc1OS44NjU5MDk3ODc1OTMsNDA3Ny4xODc3OTIxNDkyOTgzLDQ1MjcuNjEzNzAwNjE4NTM4LDQwMjcuNzIzMDUwMDgyNTMzLDkxODEuMTA3NTQ1OTYzNjY3LDU4NS40OTUwOTQ5OTM1NDQ1LDcuMzMwOTAzMjE2MDM3MDU4CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1BvcHVsYXRpb25Hcm93dGhTRUlSX1JLX1JlZmVyZW5jZS9IdW1hblBvcHVsYXRpb25Nb2RlbC9odW1hbi9EZW5zaXR5XzAuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Qb3B1bGF0aW9uR3Jvd3RoU0VJUl9SS19SZWZlcmVuY2UvSHVtYW5Qb3B1bGF0aW9uTW9kZWwvaHVtYW4vRGVuc2l0eV8wLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYzI0NDAxCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Qb3B1bGF0aW9uR3Jvd3RoU0VJUl9SS19SZWZlcmVuY2UvSHVtYW5Qb3B1bGF0aW9uTW9kZWwvaHVtYW4vRGVuc2l0eV8wLmNzdgpAQCAtMCwwICsxIEBACitpdGVyYXRpb24sdGltZSwKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvUG9wdWxhdGlvbkdyb3d0aFNFSVJfUktfUmVmZXJlbmNlL0h1bWFuUG9wdWxhdGlvbk1vZGVsL2h1bWFuL0RlbnNpdHlfMS5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1BvcHVsYXRpb25Hcm93dGhTRUlSX1JLX1JlZmVyZW5jZS9IdW1hblBvcHVsYXRpb25Nb2RlbC9odW1hbi9EZW5zaXR5XzEuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJjMjQ0MDEKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1BvcHVsYXRpb25Hcm93dGhTRUlSX1JLX1JlZmVyZW5jZS9IdW1hblBvcHVsYXRpb25Nb2RlbC9odW1hbi9EZW5zaXR5XzEuY3N2CkBAIC0wLDAgKzEgQEAKK2l0ZXJhdGlvbix0aW1lLApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Qb3B1bGF0aW9uR3Jvd3RoU0VJUl9SS19SZWZlcmVuY2UvSHVtYW5Qb3B1bGF0aW9uTW9kZWwvaHVtYW4vRGVuc2l0eV8yLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvUG9wdWxhdGlvbkdyb3d0aFNFSVJfUktfUmVmZXJlbmNlL0h1bWFuUG9wdWxhdGlvbk1vZGVsL2h1bWFuL0RlbnNpdHlfMi5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjhiYjZlYQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvUG9wdWxhdGlvbkdyb3d0aFNFSVJfUktfUmVmZXJlbmNlL0h1bWFuUG9wdWxhdGlvbk1vZGVsL2h1bWFuL0RlbnNpdHlfMi5jc3YKQEAgLTAsMCArMSwzMyBAQAoraXRlcmF0aW9uLHRpbWUsRUctRlJHLUcyMTAwMDEsRUctRlJHLUcyMTAwMDIsRUctRlJHLUcyMTAwMDMsRUctRlJHLUcyMTAwMDQsRUctRlJHLUcyMTAwMDUsRUctTE9FLUcyNDAwMDEsRUctTE9FLUcyNDAwMDIsRUctTE9FLUcyNDAwMDMsRUctTE9FLUcyNDAwMDQsRUctTE9FLUcyNDAwMDUsRUctTE9FLUcyNDAwMDYsRUctTE9FLUcyNDAwMDcsRUctTE9FLUcyNDAwMDgsRUctTE9FLUcyNDAwMDksRUctVVBFLUcyOTAwMDEsRUctVVBFLUcyOTAwMDIsRUctVVBFLUcyOTAwMDMsRUctVVBFLUcyOTAwMDQsRUctVVBFLUcyOTAwMDUsRUctVVBFLUcyOTAwMDYsRUctVVBFLUcyOTAwMDcsRUctVVBFLUcyOTAwMDgsRUctVVJHLUczMDAwMDEsRUctVVJHLUczMDAwMDIsRUctVVJHLUczMDAwMDMsRUctVVJHLUczMDAwMDQKKzEsVHVlIDI1IEphbiAxMSwxLjcyMzU2NzAwNjg1NTEzODUsMC41ODU3OTQwNTU1NjU1ODU1LDUuMzYyNjAyNjgxNzIxMTA4LDIuMDE0MzE5MDg0NjcwMzE0NywxMS43MjYyNjU5Mzg4NDMwNCw0MzEuMjAyNDU2MDg2NDAzNzQsMTUxNC43MjQ3Njg0MDYxNywyMzk2LjM5MzIyOTg3MDI2NCwyNzM0LjA2NjIwODk1Mzg4OCw1MzY5Ljc0NTUyOTg1Njg2NSwxODEuMjk3OTEyMjc2Mjc5NCwxMTQ2LjI2OTQ1NDg3ODYxNDYsMTU4OS4zMTQ5MzIwOTgyNDM4LDgzNy4wOTgwOTU2NDQ4ODg2LDQ0Ni43NjY1OTY5NjIwOTE3NCwxNzEuMjc0NzA5MjE3NTc4NSwyMzMuODYyMTQwNTI4NzY2NDIsODEuNTE0NDQ1MzYzOTU0ODgsMTU1My45ODM2OTc1ODM4MDU1LDUxMC40MzQ5ODE1NDMyMzU0LDk3NC44NzEyNjEzMTUxOTY2LDE1ODQuNTEzMjI5MTU5NTA1NywxNTI4LjkzODU0MTkyNTU3MjMsMjY3OC43MzY3MTA5NTgwMjYsNjEuNDUwMTAzNTc0ODkxNzQsMTcuMzU0NjcyMjk4MzM3NjY1CisyLFdlZCAyNiBKYW4gMTEsMS43MjM1NzM5MDExMzY5NTQ2LDAuNTg1Nzk2Mzk4NzQ2NDkzNiw1LjM2MjYyNDEzMjE3NDczNSwyLjAxNDMyNzE0MTk2Mjc2NywxMS43MjYzMTI4NDQwMDA2MTIsNDMxLjIwNDE4MDg5OTY3NzUsMTUxNC43MzA4MjczMTczNjE0LDIzOTYuNDAyODE1NDYyMzU3LDI3MzQuMDc3MTQ1MjQwNTk1LDUzNjkuNzY3MDA4ODgxOTQsMTgxLjI5ODYzNzQ2OTM3ODksMTE0Ni4yNzQwMzk5NjU2MDM4LDE1ODkuMzIxMjg5MzcwNjg2OCw4MzcuMTAxNDQ0MDQzOTY4LDQ0Ni43NjgzODQwMzIwNTM1LDE3MS4yNzUzOTQzMTc3ODUzOCwyMzMuODYzMDc1OTc5MTk5NDYsODEuNTE0NzcxNDIyMzg4NCwxNTUzLjk4OTkxMzUzMTAyNjgsNTEwLjQzNzAyMzI4NzI0NTYsOTc0Ljg3NTE2MDgwODA0MDQsMTU4NC41MTk1NjcyMjUwOTksMTUyOC45NDQ2NTc2OTE5NzA0LDI2NzguNzQ3NDI1OTI2Mjk3Niw2MS40NTAzNDkzNzU3OTc1OSwxNy4zNTQ3NDE3MTcxNjU2ODQKKzMsVGh1IDI3IEphbiAxMSwxLjcyMzU4MDc5NTQ0NjM0OTEsMC41ODU3OTg3NDE5MzY3NzUyLDUuMzYyNjQ1NTgyNzE0MTY2LDIuMDE0MzM1MTk5Mjg3NDQ4OCwxMS43MjYzNTk3NDkzNDU3OTMsNDMxLjIwNTkwNTcxOTg1MDgsMTUxNC43MzY4ODYyNTI3ODgsMjM5Ni40MTI0MDEwOTI3ODk0LDI3MzQuMDg4MDgxNTcxMDQ5LDUzNjkuNzg4NDg3OTkyOTMyNSwxODEuMjk5MzYyNjY1Mzc5MTYsMTE0Ni4yNzg2MjUwNzA5MzQ0LDE1ODkuMzI3NjQ2NjY4NTU5LDgzNy4xMDQ3OTI0NTY0NDEsNDQ2Ljc3MDE3MTEwOTE2Mzg3LDE3MS4yNzYwNzk0MjA3MzI4MywyMzMuODY0MDExNDMzMzc0MTcsODEuNTE1MDk3NDgyMTI2MjQsMTU1My45OTYxMjk1MDMxMTI2LDUxMC40MzkwNjUwMzk0MjIzLDk3NC44NzkwNjAzMTY0ODI5LDE1ODQuNTI1OTA1MzE2MDQ0MSwxNTI4Ljk1MDc3MzQ4MjgzMiwyNjc4Ljc1ODE0MDkzNzQzMDcsNjEuNDUwNTk1MTc3Njg2NzM2LDE3LjM1NDgxMTEzNjI3MTM5Cis0LEZyaSAyOCBKYW4gMTEsMS43MjM1ODc2ODk3ODMzMTg5LDAuNTg1ODAxMDg1MTM2NDI5Myw1LjM2MjY2NzAzMzMzOTQsMi4wMTQzNDMyNTY2NDQzNjEsMTEuNzI2NDA2NjU0ODc4NjA3LDQzMS4yMDc2MzA1NDY5MjM0LDE1MTQuNzQyOTQ1MjEyNDUwOSwyMzk2LjQyMTk4Njc2MTU2NTcsMjczNC4wOTkwMTc5NDUyNDgsNTM2OS44MDk5NjcxODk4NDEsMTgxLjMwMDA4Nzg2NDI4MDI0LDExNDYuMjgzMjEwMTk0NjA1MywxNTg5LjMzNDAwMzk5MTg2MDgsODM3LjEwODE0MDg4MjMwNzYsNDQ2Ljc3MTk1ODE5MzQyMjQ1LDE3MS4yNzY3NjQ1MjY0MjA3NSwyMzMuODY0OTQ2ODkxMjkwOSw4MS41MTU0MjM1NDMxNjgzMSwxNTU0LjAwMjM0NTUwMDA2MjgsNTEwLjQ0MTEwNjc5OTc2NjAzLDk3NC44ODI5NTk4NDA1MjMsMTU4NC41MzIyNDM0MzIzNDIsMTUyOC45NTY4ODkyOTgxNTc0LDI2NzguNzY4ODU1OTkxNDI0LDYxLjQ1MDg0MDk4MDU1OTAxNSwxNy4zNTQ4ODA1NTU2NTQ3NzMKKzUsU2F0IDI5IEphbiAxMSwxLjcyMzU5NDU4NDE0Nzg2NjYsMC41ODU4MDM0MjgzNDU0NTYyLDUuMzYyNjg4NDg0MDUwNDM0LDIuMDE0MzUxMzE0MDMzNTAxNCwxMS43MjY0NTM1NjA1OTkwMzksNDMxLjIwOTM1NTM4MDg5NTEsMTUxNC43NDkwMDQxOTYzNDkyLDIzOTYuNDMxNTcyNDY4Njg0LDI3MzQuMTA5OTU0MzYzMTkyLDUzNjkuODMxNDQ2NDcyNjY3LDE4MS4zMDA4MTMwNjYwODIxMywxMTQ2LjI4Nzc5NTMzNjYxNjUsMTU4OS4zNDAzNjEzNDA1OTE1LDgzNy4xMTE0ODkzMjE1Njc5LDQ0Ni43NzM3NDUyODQ4Mjk1NCwxNzEuMjc3NDQ5NjM0ODQ5MSwyMzMuODY1ODgyMzUyOTQ5NDYsODEuNTE1NzQ5NjA1NTE0NjEsMTU1NC4wMDg1NjE1MjE4NzY4LDUxMC40NDMxNDg1NjgyNzY5LDk3NC44ODY4NTkzODAxNjExLDE1ODQuNTM4NTgxNTczOTkyNCwxNTI4Ljk2MzAwNTEzNzk0NjUsMjY3OC43Nzk1NzEwODgyNzgzLDYxLjQ1MTA4Njc4NDQxNDU3LDE3LjM1NDk0OTk3NTMxNTgzNgorNixTdW4gMzAgSmFuIDExLDEuNzIzNjAxNDc4NTM5OTkyNywwLjU4NTgwNTc3MTU2Mzg1Niw1LjM2MjcwOTkzNDg0NzI3NCwyLjAxNDM1OTM3MTQ1NDg3MiwxMS43MjY1MDA0NjY1MDcwOTgsNDMxLjIxMTA4MDIyMTc2NjQsMTUxNC43NTUwNjMyMDQ0ODQ3LDIzOTYuNDQxMTU4MjE0MTQ1LDI3MzQuMTIwODkwODI0ODgyNyw1MzY5Ljg1MjkyNTg0MTQxMSwxODEuMzAxNTM4MjcwNzg0OCwxMTQ2LjI5MjM4MDQ5Njk2ODUsMTU4OS4zNDY3MTg3MTQ3NTE0LDgzNy4xMTQ4Mzc3NzQyMjIyLDQ0Ni43NzU1MzIzODMzODUxLDE3MS4yNzgxMzQ3NDYwMTc4MywyMzMuODY2ODE3ODE4MzQ5NjYsODEuNTE2MDc1NjY5MTY1MTUsMTU1NC4wMTQ3Nzc1Njg1NTUyLDUxMC40NDUxOTAzNDQ5NTQ5LDk3NC44OTA3NTg5MzUzOTc3LDE1ODQuNTQ0OTE5NzQwOTk1MywxNTI4Ljk2OTEyMTAwMjE5ODYsMjY3OC43OTAyODYyMjc5OTQsNjEuNDUxMzMyNTg5MjUzMzEsMTcuMzU1MDE5Mzk1MjU0NTgKKzcsTW9uIDMxIEphbiAxMSwxLjcyMzYwODM3Mjk1OTY5NTQsMC41ODU4MDgxMTQ3OTE2Mjg2LDUuMzYyNzMxMzg1NzI5OTE2LDIuMDE0MzY3NDI4OTA4NDcyOCwxMS43MjY1NDczNzI2MDI3NzIsNDMxLjIxMjgwNTA2OTUzNjk2LDE1MTQuNzYxMTIyMjM2ODU1NSwyMzk2LjQ1MDc0Mzk5Nzk1LDI3MzQuMTMxODI3MzMwMzE5LDUzNjkuODc0NDA1Mjk2MDcyLDE4MS4zMDIyNjM0NzgzODgyNiwxMTQ2LjI5Njk2NTY3NTY2MSwxNTg5LjM1MzA3NjExNDM0MDYsODM3LjExODE4NjI0MDI3MDIsNDQ2Ljc3NzMxOTQ4OTA4ODc3LDE3MS4yNzg4MTk4NTk5MjcwNCwyMzMuODY3NzUzMjg3NDkxODcsODEuNTE2NDAxNzM0MTE5OTgsMTU1NC4wMjA5OTM2NDAwOTgsNTEwLjQ0NzIzMjEyOTc5OTksOTc0Ljg5NDY1ODUwNjIzMjYsMTU4NC41NTEyNTc5MzMzNTEsMTUyOC45NzUyMzY4OTA5MTQ0LDI2NzguODAxMDAxNDEwNTY4NSw2MS40NTE1NzgzOTUwNzUyNjYsMTcuMzU1MDg4ODE1NDcxCis4LFR1ZSAxIEZlYiAxMSwxLjcyMzYxNTI2NzQwNjk3NTgsMC41ODU4MTA0NTgwMjg3NzQyLDUuMzYyNzUyODM2Njk4MzYsMi4wMTQzNzU0ODYzOTQzMDMsMTEuNzI2NTk0Mjc4ODg2MDcsNDMxLjIxNDUyOTkyNDIwNjgzLDE1MTQuNzY3MTgxMjkzNDYyNywyMzk2LjQ2MDMyOTgyMDA5ODcsMjczNC4xNDI3NjM4Nzk1MDE3LDUzNjkuODk1ODg0ODM2NjUyLDE4MS4zMDI5ODg2ODg4OTI1NSwxMTQ2LjMwMTU1MDg3MjY5NDYsMTU4OS4zNTk0MzM1MzkzNTk1LDgzNy4xMjE1MzQ3MTk3MTIxLDQ0Ni43NzkxMDY2MDE5NDEwNywxNzEuMjc5NTA0OTc2NTc2NywyMzMuODY4Njg4NzYwMzc2MDcsODEuNTE2NzI3ODAwMzc5MDcsMTU1NC4wMjcyMDk3MzY1MDQ2LDUxMC40NDkyNzM5MjI4MTE5LDk3NC44OTg1NTgwOTI2NjU3LDE1ODQuNTU3NTk2MTUxMDU5NywxNTI4Ljk4MTM1MjgwNDA5MzYsMjY3OC44MTE3MTY2MzYwMDUsNjEuNDUxODI0MjAxODgwNSwxNy4zNTUxNTgyMzU5NjUxMDYKKzksV2VkIDIgRmViIDExLDEuNzIzNjIyMTYxODgxODM0MSwwLjU4NTgxMjgwMTI3NTI5MjcsNS4zNjI3NzQyODc3NTI2MDksMi4wMTQzODM1NDM5MTIzNjMsMTEuNzI2NjQxMTg1MzU2OTk4LDQzMS4yMTYyNTQ3ODU3NzYyNCwxNTE0Ljc3MzI0MDM3NDMwNjIsMjM5Ni40Njk5MTU2ODA1OTEsMjczNC4xNTM3MDA0NzI0MzEsNTM2OS45MTczNjQ0NjMxNDksMTgxLjMwMzcxMzkwMjI5NzcyLDExNDYuMzA2MTM2MDg4MDY4NiwxNTg5LjM2NTc5MDk4OTgwODEsODM3LjEyNDg4MzIxMjU0ODIsNDQ2Ljc4MDg5MzcyMTk0MTY1LDE3MS4yODAxOTAwOTU5NjY4LDIzMy44Njk2MjQyMzcwMDIxLDgxLjUxNzA1Mzg2Nzk0MjQ0LDE1NTQuMDMzNDI1ODU3Nzc2MSw1MTAuNDUxMzE1NzIzOTkxLDk3NC45MDI0NTc2OTQ2OTY5LDE1ODQuNTYzOTM0Mzk0MTIxLDE1MjguOTg3NDY4NzQxNzM2NCwyNjc4LjgyMjQzMTkwNDMwMDYsNjEuNDUyMDcwMDA5NjY4ODk0LDE3LjM1NTIyNzY1NjczNjg5CisxMCxUaHUgMyBGZWIgMTEsMS43MjM2MjkwNTYzODQyNzA0LDAuNTg1ODE1MTQ0NTMxMTg0Miw1LjM2Mjc5NTczODg5MjY2MywyLjAxNDM5MTYwMTQ2MjY1NDYsMTEuNzI2Njg4MDkyMDE1NTUyLDQzMS4yMTc5Nzk2NTQyNDUsMTUxNC43NzkyOTk0NzkzODYzLDIzOTYuNDc5NTAxNTc5NDI1NywyNzM0LjE2NDYzNzEwOTEwNiw1MzY5LjkzODg0NDE3NTU2NTUsMTgxLjMwNDQzOTExODYwMzc0LDExNDYuMzEwNzIxMzIxNzgzOCwxNTg5LjM3MjE0ODQ2NTY4NzgsODM3LjEyODIzMTcxODc3NzgsNDQ2Ljc4MjY4MDg0OTA5MTA0LDE3MS4yODA4NzUyMTgwOTczNSwyMzMuODcwNTU5NzE3MzcsODEuNTE3Mzc5OTM2ODEwMDQsMTU1NC4wMzk2NDIwMDM5MTIxLDUxMC40NTMzNTc1MzMzMzc1Nyw5NzQuOTA2MzU3MzEyMzI2OCwxNTg0LjU3MDI3MjY2MjUzNSwxNTI4Ljk5MzU4NDcwMzg0MzUsMjY3OC44MzMxNDcyMTU0NjA1LDYxLjQ1MjMxNTgxODQ0MDU1LDE3LjM1NTI5NzA3Nzc4NjM1NworMTEsRnJpIDQgRmViIDExLDEuNzIzNjM1OTUwOTE0Mjg0LDAuNTg1ODE3NDg3Nzk2NDQ4OSw1LjM2MjgxNzE5MDExODUxOSwyLjAxNDM5OTY1OTA0NTE3NTQsMTEuNzI2NzM0OTk4ODYxNzMsNDMxLjIxOTcwNDUyOTYxMzMsMTUxNC43ODUzNTg2MDg3MDMsMjM5Ni40ODkwODc1MTY2MDQzLDI3MzQuMTc1NTczNzg5NTI3Myw1MzY5Ljk2MDMyMzk3MzkwMywxODEuMzA1MTY0MzM3ODEwNjUsMTE0Ni4zMTUzMDY1NzM4Mzk1LDE1ODkuMzc4NTA1OTY2OTk3LDgzNy4xMzE1ODAyMzg0MDIsNDQ2Ljc4NDQ2Nzk4MzM4ODYsMTcxLjI4MTU2MDM0Mjk2ODQ1LDIzMy44NzE0OTUyMDE0Nzk5Miw4MS41MTc3MDYwMDY5ODE5NCwxNTU0LjA0NTg1ODE3NDkxMjIsNTEwLjQ1NTM5OTM1MDg1MTM0LDk3NC45MTAyNTY5NDU1NTU0LDE1ODQuNTc2NjEwOTU2MzAyNCwxNTI4Ljk5OTcwMDY5MDQxMzYsMjY3OC44NDM4NjI1Njk0ODAzLDYxLjQ1MjU2MTYyODE5NTQ2LDE3LjM1NTM2NjQ5OTExMzUxNQorMTIsU2F0IDUgRmViIDExLDEuNzIzNjQyODQ1NDcxODc1NSwwLjU4NTgxOTgzMTA3MTA4NjQsNS4zNjI4Mzg2NDE0MzAxODMsMi4wMTQ0MDc3MTY2NTk5MjcyLDExLjcyNjc4MTkwNTg5NTU0LDQzMS4yMjE0Mjk0MTE4ODEzMywxNTE0Ljc5MTQxNzc2MjI1NTgsMjM5Ni40OTg2NzM0OTIxMjYzLDI3MzQuMTg2NTEwNTEzNjk2Miw1MzY5Ljk4MTgwMzg1ODE1OCwxODEuMzA1ODg5NTU5OTE4NDYsMTE0Ni4zMTk4OTE4NDQyMzcsMTU4OS4zODQ4NjM0OTM3MzUzLDgzNy4xMzQ5Mjg3NzE0MTk2LDQ0Ni43ODYyNTUxMjQ4MzQ3LDE3MS4yODIyNDU0NzA1OCwyMzMuODcyNDMwNjg5MzMxNyw4MS41MTgwMzIwNzg0NTgxNSwxNTU0LjA1MjA3NDM3MDc3Nyw1MTAuNDU3NDQxMTc2NTMyMyw5NzQuOTE0MTU2NTk0MzgyMiwxNTg0LjU4Mjk0OTI3NTQyMjIsMTUyOS4wMDU4MTY3MDE0NDg2LDI2NzguODU0NTc3OTY2MzYwNSw2MS40NTI4MDc0Mzg5MzM1NiwxNy4zNTU0MzU5MjA3MTgzNTMKKzEzLFN1biA2IEZlYiAxMSwxLjcyMzY0OTc0MDA1NzA0NjMsMC41ODU4MjIxNzQzNTUwOTczLDUuMzYyODYwMDkyODI3NjUyLDIuMDE0NDE1Nzc0MzA2OTA5LDExLjcyNjgyODgxMzExNjk4LDQzMS4yMjMxNTQzMDEwNDg3LDE1MTQuNzk3NDc2OTQwMDQ0NCwyMzk2LjUwODI1OTUwNTk5NDQsMjczNC4xOTc0NDcyODE2MTE0LDUzNzAuMDAzMjgzODI4MzMxLDE4MS4zMDY2MTQ3ODQ5MjcxMiwxMTQ2LjMyNDQ3NzEzMjk3NDYsMTU4OS4zOTEyMjEwNDU5MDM2LDgzNy4xMzgyNzczMTc4MzE5LDQ0Ni43ODgwNDIyNzM0Mjk0LDE3MS4yODI5MzA2MDA5MzIwOCwyMzMuODczMzY2MTgwOTI1NDQsODEuNTE4MzU4MTUxMjM4NjQsMTU1NC4wNTgyOTA1OTE1MDY2LDUxMC40NTk0ODMwMTAzODA4NCw5NzQuOTE4MDU2MjU4ODA3NywxNTg0LjU4OTI4NzYxOTg5NiwxNTI5LjAxMTkzMjczNjk0ODQsMjY3OC44NjUyOTM0MDYxMDQyLDYxLjQ1MzA1MzI1MDY1NDg3NSwxNy4zNTU1MDUzNDI2MDA4OAorMTQsTW9uIDcgRmViIDExLDEuNzIzNjU2NjM0NjY5Nzk1NywwLjU4NTgyNDUxNzY0ODQ4MTEsNS4zNjI4ODE1NDQzMTA5MjksMi4wMTQ0MjM4MzE5ODYxMjA3LDExLjcyNjg3NTcyMDUyNjA0Nyw0MzEuMjI0ODc5MTk3MTE1NiwxNTE0LjgwMzUzNjE0MjA3MDIsMjM5Ni41MTc4NDU1NTgyMDUsMjczNC4yMDgzODQwOTMyNzMzLDUzNzAuMDI0NzYzODg0NDI1LDE4MS4zMDczNDAwMTI4MzY3LDExNDYuMzI5MDYyNDQwMDUzMywxNTg5LjM5NzU3ODYyMzUwMjYsODM3LjE0MTYyNTg3NzYzODYsNDQ2Ljc4OTgyOTQyOTE3MjcsMTcxLjI4MzYxNTczNDAyNDcyLDIzMy44NzQzMDE2NzYyNjEwNyw4MS41MTg2ODQyMjUzMjM0MSwxNTU0LjA2NDUwNjgzNzEwMjMsNTEwLjQ2MTUyNDg1MjM5NjcsOTc0LjkyMTk1NTkzODgzMjEsMTU4NC41OTU2MjU5ODk3MjM3LDE1MjkuMDE4MDQ4Nzk2OTExMiwyNjc4Ljg3NjAwODg4ODcwOCw2MS40NTMyOTkwNjMzNTk0OTUsMTcuMzU1NTc0NzY0NzYxMQorMTUsVHVlIDggRmViIDExLDEuNzIzNjYzNTI5MzEwMTI0MywwLjU4NTgyNjg2MDk1MTIzNzgsNS4zNjI5MDI5OTU4ODAwMDYsMi4wMTQ0MzE4ODk2OTc1NjM3LDExLjcyNjkyMjYyODEyMjc0MSw0MzEuMjI2NjA0MTAwMDgyMiwxNTE0LjgwOTU5NTM2ODMzMzcsMjM5Ni41Mjc0MzE2NDg3NjEsMjczNC4yMTkzMjA5NDg2ODIzLDUzNzAuMDQ2MjQ0MDI2NDQsMTgxLjMwODA2NTI0MzY0NzIsMTE0Ni4zMzM2NDc3NjU0NzMyLDE1ODkuNDAzOTM2MjI2NTMyLDgzNy4xNDQ5NzQ0NTA4Mzk4LDQ0Ni43OTE2MTY1OTIwNjQ4LDE3MS4yODQzMDA4Njk4NTc5MywyMzMuODc1MjM3MTc1MzM4OSw4MS41MTkwMTAzMDA3MTI0NywxNTU0LjA3MDcyMzEwNzU2MjYsNTEwLjQ2MzU2NjcwMjU4LDk3NC45MjU4NTU2MzQ0NTUsMTU4NC42MDE5NjQzODQ5MDUsMTUyOS4wMjQxNjQ4ODEzMzg3LDI2NzguODg2NzI0NDE0MTc0LDYxLjQ1MzU0NDg3NzA0NzM4LDE3LjM1NTY0NDE4NzE5OQorMTYsV2VkIDkgRmViIDExLDEuNzIzNjcwNDIzOTc4MDMwNSwwLjU4NTgyOTIwNDI2MzM2ODcsNS4zNjI5MjQ0NDc1MzQ4OTQsMi4wMTQ0Mzk5NDc0NDEyMzc4LDExLjcyNjk2OTUzNTkwNzA3Nyw0MzEuMjI4MzI5MDA5OTQ4NCwxNTE0LjgxNTY1NDYxODgzMzQsMjM5Ni41MzcwMTc3Nzc2NTk1LDI3MzQuMjMwMjU3ODQ3ODQsNTM3MC4wNjc3MjQyNTQzNzUsMTgxLjMwODc5MDQ3NzM1ODY2LDExNDYuMzM4MjMzMTA5MjM0OCwxNTg5LjQxMDI5Mzg1NDk5Miw4MzcuMTQ4MzIzMDM3NDM0Niw0NDYuNzkzNDAzNzYyMTA1NywxNzEuMjg0OTg2MDA4NDMxNjQsMjMzLjg3NjE3MjY3ODE1ODY0LDgxLjUxOTMzNjM3NzQwNTg2LDE1NTQuMDc2OTM5NDAyODg4LDUxMC40NjU2MDg1NjA5MzA1LDk3NC45Mjk3NTUzNDU2NzcyLDE1ODQuNjA4MzAyODA1NDM5NSwxNTI5LjAzMDI4MDk5MDIzMTIsMjY3OC44OTc0Mzk5ODI1MDQyLDYxLjQ1Mzc5MDY5MTcxODU3LDE3LjM1NTcxMzYwOTkxNDYKKzE3LFRodSAxMCBGZWIgMTEsMS43MjM2NzczMTg2NzM1MTUsMC41ODU4MzE1NDc1ODQ4NzI0LDUuMzYyOTQ1ODk5Mjc1NTg5LDIuMDE0NDQ4MDA1MjE3MTQzNCwxMS43MjcwMTY0NDM4NzkwMzQsNDMxLjIzMDA1MzkyNjcxNDUsMTUxNC44MjE3MTM4OTM1NzEzLDIzOTYuNTQ2NjAzOTQ0OTAyLDI3MzQuMjQxMTk0NzkwNzQ2Nyw1MzcwLjA4OTIwNDU2ODIzMywxODEuMzA5NTE1NzEzOTcxMSwxMTQ2LjM0MjgxODQ3MTMzNjgsMTU4OS40MTY2NTE1MDg4ODMsODM3LjE1MTY3MTYzNzQyNCw0NDYuNzk1MTkwOTM5Mjk1MiwxNzEuMjg1NjcxMTQ5NzQ1OTIsMjMzLjg3NzEwODE4NDcyMDI0LDgxLjUxOTY2MjQ1NTQwMzUzLDE1NTQuMDgzMTU1NzIzMDc4Myw1MTAuNDY3NjUwNDI3NDQ4NDYsOTc0LjkzMzY1NTA3MjQ5OCwxNTg0LjYxNDY0MTI1MTMyOCwxNTI5LjAzNjM5NzEyMzU4OCwyNjc4LjkwODE1NTU5MzY5NDYsNjEuNDU0MDM2NTA3MzcyOTU1LDE3LjM1NTc4MzAzMjkwNzg4NworMTgsRnJpIDExIEZlYiAxMSwxLjcyMzY4NDIxMzM5NjU3OTMsMC41ODU4MzM4OTA5MTU3NDk0LDUuMzYyOTY3MzUxMTAyMDkyLDIuMDE0NDU2MDYzMDI1MjgsMTEuNzI3MDYzMzUyMDM4NjE4LDQzMS4yMzE3Nzg4NTAzODAxLDE1MTQuODI3NzczMTkyNTQ1MiwyMzk2LjU1NjE5MDE1MDQ5MSwyNzM0LjI1MjEzMTc3NzQwMDMsNTM3MC4xMTA2ODQ5NjgwMTMsMTgxLjMxMDI0MDk1MzQ4NDUsMTE0Ni4zNDc0MDM4NTE3ODE2LDE1ODkuNDIzMDA5MTg4MjA0Niw4MzcuMTU1MDIwMjUwODA4LDQ0Ni43OTY5NzgxMjM2MzMyLDE3MS4yODYzNTYyOTM4MDA4MiwyMzMuODc4MDQzNjk1MDIzNzYsODEuNTE5OTg4NTM0NzA1NTIsMTU1NC4wODkzNzIwNjgxMzM4LDUxMC40Njk2OTIzMDIxMzM4LDk3NC45Mzc1NTQ4MTQ5MTc4LDE1ODQuNjIwOTc5NzIyNTcwNCwxNTI5LjA0MjUxMzI4MTQwOCwyNjc4LjkxODg3MTI0Nzc0OSw2MS40NTQyODIzMjQwMTA2MywxNy4zNTU4NTI0NTYxNzg4NjIKKzE5LFNhdCAxMiBGZWIgMTEsMS43MjM2OTExMDgxNDcyMjM1LDAuNTg1ODM2MjM0MjU1OTk5NCw1LjM2Mjk4ODgwMzAxNDQwMiwyLjAxNDQ2NDEyMDg2NTY0NywxMS43MjcxMTAyNjAzODU4NCw0MzEuMjMzNTAzNzgwOTQ1NTcsMTUxNC44MzM4MzI1MTU3NTYzLDIzOTYuNTY1Nzc2Mzk0NDI1NSwyNzM0LjI2MzA2ODgwNzc5OTgsNTM3MC4xMzIxNjU0NTM3MTIsMTgxLjMxMDk2NjE5NTg5ODgzLDExNDYuMzUxOTg5MjUwNTY3NCwxNTg5LjQyOTM2Njg5Mjk1NTQsODM3LjE1ODM2ODg3NzU4NjMsNDQ2Ljc5ODc2NTMxNTExOTksMTcxLjI4NzA0MTQ0MDU5NjMsMjMzLjg3ODk3OTIwOTA2OTQ2LDgxLjUyMDMxNDYxNTMxMTgzLDE1NTQuMDk1NTg4NDM4MDU0Niw1MTAuNDcxNzM0MTg0OTg3MSw5NzQuOTQxNDU0NTcyOTM2NywxNTg0LjYyNzMxODIxOTE2NjcsMTUyOS4wNDg2Mjk0NjM2OTMsMjY3OC45Mjk1ODY5NDQ2NjU1LDYxLjQ1NDUyODE0MTYzMTUzNSwxNy4zNTU5MjE4Nzk3Mjc1NAorMjAsU3VuIDEzIEZlYiAxMSwxLjcyMzY5ODAwMjkyNTQ0NTQsMC41ODU4Mzg1Nzc2MDU2MjMyLDUuMzYzMDEwMjU1MDEyNTE2LDIuMDE0NDcyMTc4NzM4MjQ2LDExLjcyNzE1NzE2ODkyMDY5Niw0MzEuMjM1MjI4NzE4NDEwNiwxNTE0LjgzOTg5MTg2MzIwNDUsMjM5Ni41NzUzNjI2NzY3MDI4LDI3MzQuMjc0MDA1ODgxOTQ5NSw1MzcwLjE1MzY0NjAyNTMzNSwxODEuMzExNjkxNDQxMjE0MDQsMTE0Ni4zNTY1NzQ2Njc2OTUyLDE1ODkuNDM1NzI0NjIzMTM4LDgzNy4xNjE3MTc1MTc3NTk3LDQ0Ni44MDA1NTI1MTM3NTU0NiwxNzEuMjg3NzI2NTkwMTMyMzQsMjMzLjg3OTkxNDcyNjg1NzM4LDgxLjUyMDY0MDY5NzIyMjQ5LDE1NTQuMTAxODA0ODMyODQwOCw1MTAuNDczNzc2MDc2MDA3Niw5NzQuOTQ1MzU0MzQ2NTU0NSwxNTg0LjYzMzY1Njc0MTExNywxNTI5LjA1NDc0NTY3MDQ0MzcsMjY3OC45NDAzMDI2ODQ0NDUsNjEuNDU0NzczOTYwMjM1NzcsMTcuMzU1OTkxMzAzNTUzOTE0CisyMSxNb24gMTQgRmViIDExLDEuNzIzNzA0ODk3NzMxMjQ3NywwLjU4NTg0MDkyMDk2NDYyMDUsNS4zNjMwMzE3MDcwOTY0NCwyLjAxNDQ4MDIzNjY0MzA3NzQsMTEuNzI3MjA0MDc3NjQzMTk1LDQzMS4yMzY5NTM2NjI3NzUzLDE1MTQuODQ1OTUxMjM0ODksMjM5Ni41ODQ5NDg5OTczMjQzLDI3MzQuMjg0OTQyOTk5ODQ3LDUzNzAuMTc1MTI2NjgyODgxNSwxODEuMzEyNDE2Njg5NDMwMywxMTQ2LjM2MTE2MDEwMzE2NDQsMTU4OS40NDIwODIzNzg3NTI3LDgzNy4xNjUwNjYxNzEzMjcxLDQ0Ni44MDIzMzk3MTk1NDAwNCwxNzEuMjg4NDExNzQyNDA4OTUsMjMzLjg4MDg1MDI0ODM4NzIsODEuNTIwOTY2NzgwNDM3NDksMTU1NC4xMDgwMjEyNTI0OTMsNTEwLjQ3NTgxNzk3NTE5NjA0LDk3NC45NDkyNTQxMzU3NzE0LDE1ODQuNjM5OTk1Mjg4NDIwNiwxNTI5LjA2MDg2MTkwMTY1ODksMjY3OC45NTEwMTg0NjcwODcsNjEuNDU1MDE5Nzc5ODIzMjUsMTcuMzU2MDYwNzI3NjU3OTcyCisyMixUdWUgMTUgRmViIDExLDEuNzIzNzExNzkyNTY0NjI4MSwwLjU4NTg0MzI2NDMzMjk5MTMsNS4zNjMwNTMxNTkyNjYxNzIsMi4wMTQ0ODgyOTQ1ODAxNDEsMTEuNzI3MjUwOTg2NTUzMzI2LDQzMS4yMzg2Nzg2MTQwMzk5NCwxNTE0Ljg1MjAxMDYzMDgxNCwyMzk2LjU5NDUzNTM1NjI5NDMsMjczNC4yOTU4ODAxNjE0OTI3LDUzNzAuMTk2NjA3NDI2MzQ5LDE4MS4zMTMxNDE5NDA1NDc1OCwxMTQ2LjM2NTc0NTU1Njk3NTUsMTU4OS40NDg0NDAxNTk3OTgsODM3LjE2ODQxNDgzODI4OTEsNDQ2LjgwNDEyNjkzMjQ3MzMsMTcxLjI4OTA5Njg5NzQyNjI4LDIzMy44ODE3ODU3NzM2NTkzMiw4MS41MjEyOTI4NjQ5NTY3NiwxNTU0LjExNDIzNzY5NzAxMDgsNTEwLjQ3Nzg1OTg4MjU1MTYsOTc0Ljk1MzE1Mzk0MDU4NzMsMTU4NC42NDYzMzM4NjEwNzg4LDE1MjkuMDY2OTc4MTU3MzM4NiwyNjc4Ljk2MTczNDI5MjU5MzUsNjEuNDU1MjY1NjAwMzk0LDE3LjM1NjEzMDE1MjAzOTczCisyMyxXZWQgMTYgRmViIDExLDEuNzIzNzE4Njg3NDI1NTg4NSwwLjU4NTg0NTYwNzcxMDczNTUsNS4zNjMwNzQ2MTE1MjE3MTI1LDIuMDE0NDk2MzUyNTQ5NDM1MywxMS43MjcyOTc4OTU2NTEwOTEsNDMxLjI0MDQwMzU3MjIwNDQsMTUxNC44NTgwNzAwNTA5NzU0LDIzOTYuNjA0MTIxNzUzNjA4NSwyNzM0LjMwNjgxNzM2Njg4NzYsNTM3MC4yMTgwODgyNTU3NCwxODEuMzEzODY3MTk0NTY1ODYsMTE0Ni4zNzAzMzEwMjkxMjg1LDE1ODkuNDU0Nzk3OTY2Mjc1LDgzNy4xNzE3NjM1MTg2NDU3LDQ0Ni44MDU5MTQxNTI1NTU1LDE3MS4yODk3ODIwNTUxODQyLDIzMy44ODI3MjEzMDI2NzM0Nyw4MS41MjE2MTg5NTA3ODA0LDE1NTQuMTIwNDU0MTY2Mzk0Miw1MTAuNDc5OTAxNzk4MDc0Nyw5NzQuOTU3MDUzNzYxMDAyNywxNTg0LjY1MjY3MjQ1OTA5MTMsMTUyOS4wNzMwOTQ0Mzc0ODM2LDI2NzguOTcyNDUwMTYwOTYyNiw2MS40NTU1MTE0MjE5NDgwNiwxNy4zNTYxOTk1NzY2OTkxOQorMjQsVGh1IDE3IEZlYiAxMSwxLjcyMzcyNTU4MjMxNDEyNzgsMC41ODU4NDc5NTEwOTc4NTMzLDUuMzYzMDk2MDYzODYzMDYzLDIuMDE0NTA0NDEwNTUwOTYyLDExLjcyNzM0NDgwNDkzNjQ4OCw0MzEuMjQyMTI4NTM3MjY4NDYsMTUxNC44NjQxMjk0OTUzNzQ1LDIzOTYuNjEzNzA4MTg5MjY4NCwyNzM0LjMxNzc1NDYxNjAzMSw1MzcwLjIzOTU2OTE3MTA1NiwxODEuMzE0NTkyNDUxNDg1MTQsMTE0Ni4zNzQ5MTY1MTk2MjM0LDE1ODkuNDYxMTU1Nzk4MTgyMyw4MzcuMTc1MTEyMjEyMzk3LDQ0Ni44MDc3MDEzNzk3ODY0LDE3MS4yOTA0NjcyMTU2ODI3NSwyMzMuODgzNjU2ODM1NDI5ODMsODEuNTIxOTQ1MDM3OTA4MzcsMTU1NC4xMjY2NzA2NjA2NDQsNTEwLjQ4MTk0MzcyMTc2NTksOTc0Ljk2MDk1MzU5NzAxNzUsMTU4NC42NTkwMTEwODI0NTg2LDE1MjkuMDc5MjEwNzQyMDkzNywyNjc4Ljk4MzE2NjA3MjE5NSw2MS40NTU3NTcyNDQ0ODUzOSwxNy4zNTYyNjkwMDE2MzYzNDUKKzI1LEZyaSAxOCBGZWIgMTEsMS43MjM3MzI0NzcyMzAyNDYzLDAuNTg1ODUwMjk0NDk0MzQ0Myw1LjM2MzExNzUxNjI5MDIyNCwyLjAxNDUxMjQ2ODU4NDcyMDcsMTEuNzI3MzkxNzE0NDA5NTMsNDMxLjI0Mzg1MzUwOTIzMjYsMTUxNC44NzAxODg5NjQwMTE1LDIzOTYuNjIzMjk0NjYzMjczNiwyNzM0LjMyODY5MTkwODkyNCw1MzcwLjI2MTA1MDE3MjI5NSwxODEuMzE1MzE3NzExMzA1NDUsMTE0Ni4zNzk1MDIwMjg0NjA2LDE1ODkuNDY3NTEzNjU1NTIxLDgzNy4xNzg0NjA5MTk1NDMzLDQ0Ni44MDk0ODg2MTQxNjY2LDE3MS4yOTExNTIzNzg5MjE5LDIzMy44ODQ1OTIzNzE5MjgyMiw4MS41MjIyNzExMjYzNDA3MSwxNTU0LjEzMjg4NzE3OTc1OTMsNTEwLjQ4Mzk4NTY1MzYyNDQsOTc0Ljk2NDg1MzQ0ODYzMTYsMTU4NC42NjUzNDk3MzExNzk3LDE1MjkuMDg1MzI3MDcxMTY5LDI2NzguOTkzODgyMDI2MjkyMyw2MS40NTYwMDMwNjgwMDYwMiwxNy4zNTYzMzg0MjY4NTEyMDYKKzI2LFNhdCAxOSBGZWIgMTEsMS43MjM3MzkzNzIxNzM5NDUsMC41ODU4NTI2Mzc5MDAyMDksNS4zNjMxMzg5Njg4MDMxOTIsMi4wMTQ1MjA1MjY2NTA3MTEsMTEuNzI3NDM4NjI0MDcwMjA2LDQzMS4yNDU1Nzg0ODgwOTY2LDE1MTQuODc2MjQ4NDU2ODg2LDIzOTYuNjMyODgxMTc1NjI1LDI3MzQuMzM5NjI5MjQ1NTY2NCw1MzcwLjI4MjUzMTI1OTQ1OCwxODEuMzE2MDQyOTc0MDI2ODYsMTE0Ni4zODQwODc1NTU2Mzk4LDE1ODkuNDczODcxNTM4MjkxNiw4MzcuMTgxODA5NjQwMDg0Myw0NDYuODExMjc1ODU1Njk1MjcsMTcxLjI5MTgzNzU0NDkwMTc3LDIzMy44ODU1Mjc5MTIxNjg3OCw4MS41MjI1OTcyMTYwNzc0LDE1NTQuMTM5MTAzNzIzNzQxLDUxMC40ODYwMjc1OTM2NTEsOTc0Ljk2ODc1MzMxNTg0NDksMTU4NC42NzE2ODg0MDUyNTY0LDE1MjkuMDkxNDQzNDI0NzEwMiwyNjc5LjAwNDU5ODAyMzI1Miw2MS40NTYyNDg4OTI1MDk5MiwxNy4zNTY0MDc4NTIzNDM3NgorMjcsU3VuIDIwIEZlYiAxMSwxLjcyMzc0NjI2NzE0NTIyMzUsMC41ODU4NTQ5ODEzMTU0NDc4LDUuMzYzMTYwNDIxNDAxOTcyLDIuMDE0NTI4NTg0NzQ4OTM0NSwxMS43Mjc0ODU1MzM5MTg1MjUsNDMxLjI0NzMwMzQ3Mzg2MDYsMTUxNC44ODIzMDc5NzM5OTgyLDIzOTYuNjQyNDY3NzI2MzIxNywyNzM0LjM1MDU2NjYyNTk1ODQsNTM3MC4zMDQwMTI0MzI1NDUsMTgxLjMxNjc2ODIzOTY0OTI0LDExNDYuMzg4NjczMTAxMTYxNCwxNTg5LjQ4MDIyOTQ0NjQ5MzcsODM3LjE4NTE1ODM3NDAyMDMsNDQ2LjgxMzA2MzEwNDM3MzIsMTcxLjI5MjUyMjcxMzYyMjI1LDIzMy44ODY0NjM0NTYxNTE0Niw4MS41MjI5MjMzMDcxMTg0NSwxNTU0LjE0NTMyMDI5MjU4OSw1MTAuNDg4MDY5NTQxODQ1MzMsOTc0Ljk3MjY1MzE5ODY1NzksMTU4NC42NzgwMjcxMDQ2ODc1LDE1MjkuMDk3NTU5ODAyNzE3LDI2NzkuMDE1MzE0MDYzMDc2NCw2MS40NTY0OTQ3MTc5OTcxNCwxNy4zNTY0NzcyNzgxMTQwMTcKKzI4LE1vbiAyMSBGZWIgMTEsMS43MjM3NTMxNjIxNDQwODE2LDAuNTg1ODU3MzI0NzQwMDU5OCw1LjM2MzE4MTg3NDA4NjU2MSwyLjAxNDUzNjY0Mjg3OTM5LDExLjcyNzUzMjQ0Mzk1NDQ4LDQzMS4yNDkwMjg0NjY1MjQ2LDE1MTQuODg4MzY3NTE1MzQ5MywyMzk2LjY1MjA1NDMxNTM2NTYsMjczNC4zNjE1MDQwNTAxLDUzNzAuMzI1NDkzNjkxNTU4LDE4MS4zMTc0OTM1MDgxNzI3NiwxMTQ2LjM5MzI1ODY2NTAyNDksMTU4OS40ODY1ODczODAxMjc1LDgzNy4xODg1MDcxMjEzNTExLDQ0Ni44MTQ4NTAzNjAyMDAwNywxNzEuMjkzMjA3ODg1MDgzNDMsMjMzLjg4NzM5OTAwMzg3NjM0LDgxLjUyMzI0OTM5OTQ2Mzg2LDE1NTQuMTUxNTM2ODg2MzAzNiw1MTAuNDkwMTExNDk4MjA3NCw5NzQuOTc2NTUzMDk3MDcwMywxNTg0LjY4NDM2NTgyOTQ3MzMsMTUyOS4xMDM2NzYyMDUxODg4LDI2NzkuMDI2MDMwMTQ1NzY0Nyw2MS40NTY3NDA1NDQ0Njc2NiwxNy4zNTY1NDY3MDQxNjE5OAorMjksVHVlIDIyIEZlYiAxMSwxLjcyMzc2MDA1NzE3MDUxOTgsMC41ODU4NTk2NjgxNzQwNDU3LDUuMzYzMjAzMzI2ODU2OTYzLDIuMDE0NTQ0NzAxMDQyMDc4LDExLjcyNzU3OTM1NDE3ODA3NCw0MzEuMjUwNzUzNDY2MDg4NCwxNTE0Ljg5NDQyNzA4MDkzODYsMjM5Ni42NjE2NDA5NDI3NTY1LDI3MzQuMzcyNDQxNTE3OTkxLDUzNzAuMzQ2OTc1MDM2NDk0LDE4MS4zMTgyMTg3Nzk1OTczNCwxMTQ2LjM5Nzg0NDI0NzIzMDUsMTU4OS40OTI5NDUzMzkxOTMzLDgzNy4xOTE4NTU4ODIwNzcyLDQ0Ni44MTY2Mzc2MjMxNzYsMTcxLjI5Mzg5MzA1OTI4NTMsMjMzLjg4ODMzNDU1NTM0MzUsODEuNTIzNTc1NDkzMTEzNjUsMTU1NC4xNTc3NTM1MDQ4ODQ2LDUxMC40OTIxNTM0NjI3Mzc0Niw5NzQuOTgwNDUzMDExMDgyNCwxNTg0LjY5MDcwNDU3OTYxNDIsMTUyOS4xMDk3OTI2MzIxMjYzLDI2NzkuMDM2NzQ2MjcxMzE4NCw2MS40NTY5ODYzNzE5MjE1LDE3LjM1NjYxNjEzMDQ4NzY0OAorMzAsV2VkIDIzIEZlYiAxMSwxLjcyMzc2Njk1MjIyNDUzOSwwLjU4NTg2MjAxMTYxNzQwNTMsNS4zNjMyMjQ3Nzk3MTMxNzYsMi4wMTQ1NTI3NTkyMzY5OTgsMTEuNzI3NjI2MjY0NTg5MzExLDQzMS4yNTI0Nzg0NzI1NTIzLDE1MTQuOTAwNDg2NjcwNzY1OCwyMzk2LjY3MTIyNzYwODQ5NDUsMjczNC4zODMzNzkwMjk2MzE3LDUzNzAuMzY4NDU2NDY3MzU5LDE4MS4zMTg5NDQwNTM5MjMsMTE0Ni40MDI0Mjk4NDc3Nzg0LDE1ODkuNDk5MzAzMzIzNjkwNiw4MzcuMTk1MjA0NjU2MTk4NCw0NDYuODE4NDI0ODkzMzAxMTQsMTcxLjI5NDU3ODIzNjIyNzg2LDIzMy44ODkyNzAxMTA1NTI4MSw4MS41MjM5MDE1ODgwNjc4MywxNTU0LjE2Mzk3MDE0ODMzMiw1MTAuNDk0MTk1NDM1NDM1MTMsOTc0Ljk4NDM1Mjk0MDY5NDIsMTU4NC42OTcwNDMzNTUxMDk4LDE1MjkuMTE1OTA5MDgzNTMsMjY3OS4wNDc0NjI0Mzk3MzYsNjEuNDU3MjMyMjAwMzU4NjQsMTcuMzU2Njg1NTU3MDkxMDI2CiszMSxUaHUgMjQgRmViIDExLDEuNzIzNzczODQ3MzA2MTM4LDAuNTg1ODY0MzU1MDcwMTM4Niw1LjM2MzI0NjIzMjY1NTE5OSwyLjAxNDU2MDgxNzQ2NDE1MTQsMTEuNzI3NjczMTc1MTg4MTg5LDQzMS4yNTQyMDM0ODU5MTYxLDE1MTQuOTA2NTQ2Mjg0ODMxNiwyMzk2LjY4MDgxNDMxMjU3OCwyNzM0LjM5NDMxNjU4NTAyMyw1MzcwLjM4OTkzNzk4NDE0NywxODEuMzE5NjY5MzMxMTQ5NzUsMTE0Ni40MDcwMTU0NjY2Njg2LDE1ODkuNTA1NjYxMzMzNjIsODM3LjE5ODU1MzQ0MzcxNDcsNDQ2LjgyMDIxMjE3MDU3NTEzLDE3MS4yOTUyNjM0MTU5MTExNCwyMzMuODkwMjA1NjY5NTA0MzgsODEuNTI0MjI3Njg0MzI2MzksMTU1NC4xNzAxODY4MTY2NDU4LDUxMC40OTYyMzc0MTYzMDA4LDk3NC45ODgyNTI4ODU5MDU4LDE1ODQuNzAzMzgyMTU1OTYxLDE1MjkuMTIyMDI1NTU5Mzk5LDI2NzkuMDU4MTc4NjUxMDE4LDYxLjQ1NzQ3ODAyOTc3OTA4LDE3LjM1Njc1NDk4Mzk3MjEwNgorMzIsRnJpIDI1IEZlYiAxMSwxLjcyMzc4MDc0MjQxNTMxNzUsMC41ODU4NjY2OTg1MzIyNDU2LDUuMzYzMjY3Njg1NjgzMDM1LDIuMDE0NTY4ODc1NzIzNTM3NCwxMS43Mjc3MjAwODU5NzQ3MTEsNDMxLjI1NTkyODUwNjE4MDEsMTUxNC45MTI2MDU5MjMxMzYsMjM5Ni42OTA0MDEwNTUwMDk3LDI3MzQuNDA1MjU0MTg0MTY0Myw1MzcwLjQxMTQxOTU4Njg2MSwxODEuMzIwMzk0NjExMjc3NiwxMTQ2LjQxMTYwMTEwMzkwMTgsMTU4OS41MTIwMTkzNjg5ODEzLDgzNy4yMDE5MDIyNDQ2MjU5LDQ0Ni44MjE5OTk0NTQ5OTg0LDE3MS4yOTU5NDg1OTgzMzUxNywyMzMuODkxMTQxMjMyMTk4MjQsODEuNTI0NTUzNzgxODg5MzEsMTU1NC4xNzY0MDM1MDk4MjYsNTEwLjQ5ODI3OTQwNTMzNDUsOTc0Ljk5MjE1Mjg0NjcxNzMsMTU4NC43MDk3MjA5ODIxNjcsMTUyOS4xMjgxNDIwNTk3MzQzLDI2NzkuMDY4ODk0OTA1MTY0Niw2MS40NTc3MjM4NjAxODI4NiwxNy4zNTY4MjQ0MTExMzA4OTgKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvUG9wdWxhdGlvbkdyb3d0aFNFSVJfUktfUmVmZXJlbmNlL0h1bWFuUG9wdWxhdGlvbk1vZGVsL2h1bWFuL0luY2lkZW5jZV8wLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvUG9wdWxhdGlvbkdyb3d0aFNFSVJfUktfUmVmZXJlbmNlL0h1bWFuUG9wdWxhdGlvbk1vZGVsL2h1bWFuL0luY2lkZW5jZV8wLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYzI0NDAxCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Qb3B1bGF0aW9uR3Jvd3RoU0VJUl9SS19SZWZlcmVuY2UvSHVtYW5Qb3B1bGF0aW9uTW9kZWwvaHVtYW4vSW5jaWRlbmNlXzAuY3N2CkBAIC0wLDAgKzEgQEAKK2l0ZXJhdGlvbix0aW1lLApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Qb3B1bGF0aW9uR3Jvd3RoU0VJUl9SS19SZWZlcmVuY2UvSHVtYW5Qb3B1bGF0aW9uTW9kZWwvaHVtYW4vSW5jaWRlbmNlXzEuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Qb3B1bGF0aW9uR3Jvd3RoU0VJUl9SS19SZWZlcmVuY2UvSHVtYW5Qb3B1bGF0aW9uTW9kZWwvaHVtYW4vSW5jaWRlbmNlXzEuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJjMjQ0MDEKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1BvcHVsYXRpb25Hcm93dGhTRUlSX1JLX1JlZmVyZW5jZS9IdW1hblBvcHVsYXRpb25Nb2RlbC9odW1hbi9JbmNpZGVuY2VfMS5jc3YKQEAgLTAsMCArMSBAQAoraXRlcmF0aW9uLHRpbWUsCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1BvcHVsYXRpb25Hcm93dGhTRUlSX1JLX1JlZmVyZW5jZS9IdW1hblBvcHVsYXRpb25Nb2RlbC9odW1hbi9JbmNpZGVuY2VfMi5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1BvcHVsYXRpb25Hcm93dGhTRUlSX1JLX1JlZmVyZW5jZS9IdW1hblBvcHVsYXRpb25Nb2RlbC9odW1hbi9JbmNpZGVuY2VfMi5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzM1MWY0NgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvUG9wdWxhdGlvbkdyb3d0aFNFSVJfUktfUmVmZXJlbmNlL0h1bWFuUG9wdWxhdGlvbk1vZGVsL2h1bWFuL0luY2lkZW5jZV8yLmNzdgpAQCAtMCwwICsxLDMzIEBACitpdGVyYXRpb24sdGltZSxFRy1GUkctRzIxMDAwMSxFRy1GUkctRzIxMDAwMixFRy1GUkctRzIxMDAwMyxFRy1GUkctRzIxMDAwNCxFRy1GUkctRzIxMDAwNSxFRy1MT0UtRzI0MDAwMSxFRy1MT0UtRzI0MDAwMixFRy1MT0UtRzI0MDAwMyxFRy1MT0UtRzI0MDAwNCxFRy1MT0UtRzI0MDAwNSxFRy1MT0UtRzI0MDAwNixFRy1MT0UtRzI0MDAwNyxFRy1MT0UtRzI0MDAwOCxFRy1MT0UtRzI0MDAwOSxFRy1VUEUtRzI5MDAwMSxFRy1VUEUtRzI5MDAwMixFRy1VUEUtRzI5MDAwMyxFRy1VUEUtRzI5MDAwNCxFRy1VUEUtRzI5MDAwNSxFRy1VUEUtRzI5MDAwNixFRy1VUEUtRzI5MDAwNyxFRy1VUEUtRzI5MDAwOCxFRy1VUkctRzMwMDAwMSxFRy1VUkctRzMwMDAwMixFRy1VUkctRzMwMDAwMyxFRy1VUkctRzMwMDAwNAorMSxUdWUgMjUgSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzIsV2VkIDI2IEphbiAxMSwxLjE4ODk1NDI4MjE2ODQ5NzMsMS4wNjE1NjI1ODE4MzIxNzU3LDAuNjE3OTE1ODI3ODUyMjI1OSwxLjI3NzM5NDMyNjE1NTE0MywxLjI4NzYwMDY1MTMzNzA3MjYsMjAuODE0NTY5MjQ0MzM2NDk2LDIyLjYxOTE3MDgzNDM4OTc5LDE4LjUzODU3MDgxNjc5NDMzMywxNi4xMDI2MTk1NzAxNjUzMywyMC4xMzIzMjg5ODg4NDczNSw0LjA4ODI4Mzk3NDIxNjgzNiwyMy44OTkzNTM0NjU3MjY4NzUsNC43Mjk4MTk4MDkyNjA3MTEsMTIuNTU1ODUxMDU1OTQ2NTc2LDExLjIyMjY0MjI3NDAzOTMwMiwyNS43NjI1NTc4MTY3MTQyNjMsMTguNjYzOTU1OTA0NDQxOTM0LDUuMjQ4OTk2NTkzMDYxMTM2LDE1LjI3Njk2MjkxODIyOTA4OCwxMC4xNzQwMjk5OTk4MDA3OTQsMTUuMDMwMjM0MTczNzEwNjgxLDE2LjY5MDY5NDA4NTYyMjE5OCwxNC44NDc4ODYyNjc2Mjc3LDMzLjg0NTQzNTQ4NzU1OTk0LDIuMTU4MzgxOTEyNzEzNjU0MywwLjAyNzAyNDgwMTgxNDEzNTA4CiszLFRodSAyNyBKYW4gMTEsMS4xODg5NTkwNjI0NzYzMzc1LDEuMDYxNTY2ODQ5OTQ5MTMyNCwwLjYxNzkxODMxMjI0MzY5NTMsMS4yNzczOTk0NjIwNDQ4OTU2LDEuMjg3NjA1ODI4MjYyMzYxLDIwLjgxNDY1MjkzMTM2MzAxNCwyMi42MTkyNjE3NzY5OTQ4MiwxOC41Mzg2NDUzNTI5NDQ5NCwxNi4xMDI2ODQzMTIzMzM5MzUsMjAuMTMyNDA5OTMyODU5Nyw0LjA4ODMwMDQxMTU2NTM3MDUsMjMuODk5NDQ5NTU1NDMyMzQsNC43Mjk4Mzg4MjU5NjcyODUsMTIuNTU1OTAxNTM3OTgyODksMTEuMjIyNjg3Mzk1Nzc4MzUxLDI1Ljc2MjY2MTM5NzYxNjM5OCwxOC42NjQwMzA5NDQ3MTU2NSw1LjI0OTAxNzY5NzE2OTEzNywxNS4yNzcwMjQzNDA3NjM3NzQsMTAuMTc0MDcwOTA1NDkwODY1LDE1LjAzMDI5NDYwNDI0ODE1NSwxNi42OTA3NjExOTIyMDIzMywxNC44NDc5NDU5NjUwMTc0MDIsMzMuODQ1NTcxNTY2NDY4MjEsMi4xNTgzOTA1OTA3MDA4MDQ1LDAuMDI3MDI0OTEwNDcwMDEzNTk3Cis0LEZyaSAyOCBKYW4gMTEsMS4xODg5NjM3Njk2MzI0NDI0LDEuMDYxNTcxMDUyNzUyMjY5LDAuNjE3OTIwNzU4NjE3MjA1MywxLjI3NzQwNDUxOTM0MTUzNzUsMS4yODc2MTA5MjU5NjY1ODQyLDIwLjgxNDczNTMzNzc0OTk5NCwyMi42MTkzNTEzMjc5MzAxNiwxOC41Mzg3MTg3NDg0ODkyODgsMTYuMTAyNzQ4MDYzNzcwODksMjAuMTMyNDg5NjM4MjA4MDg1LDQuMDg4MzE2NTk3Mzc3NjkxLDIzLjg5OTU0NDE3NDcwMzQzNiw0LjcyOTg1NzU1MTY2NjQyNywxMi41NTU5NTEyNDc1MDY0NTcsMTEuMjIyNzMxODI3MDMxODIyLDI1Ljc2Mjc2MzM5MzQ0ODQzOCwxOC42NjQxMDQ4MzY2Njg2MjgsNS4yNDkwMzg0NzgzMjY3NiwxNS4yNzcwODQ4MjMzNjYyNjYsMTAuMTc0MTExMTg1MjEyNDEsMTUuMDMwMzU0MTEwMDMzNjcsMTYuNjkwODI3MjcxODY4ODk4LDE0Ljg0ODAwNDc0ODg3NDM4OCwzMy44NDU3MDU1NjI5OTgyNiwyLjE1ODM5OTEzNTg5MTA5ODYsMC4wMjcwMjUwMTc0NjMxNjA5OTQKKzUsU2F0IDI5IEphbiAxMSwxLjE4ODk2ODYyMzgyNzM5MDcsMS4wNjE1NzUzODY4Mzk2MjQ3LDAuNjE3OTIzMjgxNDA4ODE3NCwxLjI3NzQwOTczNDYxNDQ2OTMsMS4yODc2MTYxODI5MDkzMTk2LDIwLjgxNDgyMDMxODI4OTkxOCwyMi42MTk0NDM2NzYxOTQ4NjIsMTguNTM4Nzk0NDM2NzEyMjY2LDE2LjEwMjgxMzgwNjYzMDU5MywyMC4xMzI1NzE4MzMzMzYzMyw0LjA4ODMzMzI4ODc5MTA3LDIzLjg5OTY0MTc0OTYyNTAwNSw0LjcyOTg3Njg2MjMwNTg0NCwxMi41NTYwMDI1MDk4MjEzMjYsMTEuMjIyNzc3NjQ2MTk3NjcsMjUuNzYyODY4NTc1MzU0ODQ0LDE4LjY2NDE4MTAzNjgwNjcyNCw1LjI0OTA1OTkwODYzMTYzNjUsMTUuMjc3MTQ3MTk1MjgxOTcsMTAuMTc0MTUyNzIzMTYzNjcyLDE1LjAzMDQxNTQ3NDYxOTI3NSwxNi42OTA4OTU0MTU2ODU4MTYsMTQuODQ4MDY1MzY4OTgwMjg2LDMzLjg0NTg0Mzc0NTIxODA3NiwyLjE1ODQwNzk0ODAxMDA2NTUsMC4wMjcwMjUxMjc3OTg0ODU0NTQKKzYsU3VuIDMwIEphbiAxMSwxLjE4ODk3MzI1MTc2NTQyNTIsMS4wNjE1Nzk1MTg5MTI1OTMsMC42MTc5MjU2ODY2MTE2MTM0LDEuMjc3NDE0NzA2ODAwNDI4MiwxLjI4NzYyMTE5NDgyMjgyOTYsMjAuODE0OTAxMzM3ODM2NDAzLDIyLjYxOTUzMTcyMDA1MjA2NiwxOC41Mzg4NjY1OTcwNjIxNCwxNi4xMDI4NzY0ODUxNzY1MjMsMjAuMTMyNjUwMTk3MzAwNzYyLDQuMDg4MzQ5MjAyMjA3NzUyLDIzLjg5OTczNDc3NjUyMTQ4NCw0LjcyOTg5NTI3Mjg2NDg4LDEyLjU1NjA1MTM4Mjc2OTIxMiwxMS4yMjI4MjEzMjk3MDQ5NDIsMjUuNzYyOTY4ODU0NjcwMDUsMTguNjY0MjUzNjg1MjExMDY1LDUuMjQ5MDgwMzQwMDU3MjU0NSwxNS4yNzcyMDY2NjAwMDU1NjEsMTAuMTc0MTkyMzI1MDA2MzMsMTUuMDMwNDczOTc4OTY1MDM0LDE2LjY5MDk2MDM4MzI3ODkwNiwxNC44NDgxMjMxNjM1NDcwMywzMy44NDU5NzU0ODY2ODI0NSwyLjE1ODQxNjM0OTM5MDkyMjMsMC4wMjcwMjUyMzI5OTEwMTQ3NTMKKzcsTW9uIDMxIEphbiAxMSwxLjE4ODk3Nzk3MTIxMzY3MDgsMS4wNjE1ODM3MzI2OTA4MTg4LDAuNjE3OTI4MTM5MzczNTE5LDEuMjc3NDE5Nzc3MzAzNTYyLDEuMjg3NjI2MzA1ODM5MDYzOCwyMC44MTQ5ODM5NTk0MTcyNDgsMjIuNjE5NjIxNTA0ODM4MzkyLDE4LjUzODk0MDE4NDI2OTcwNSwxNi4xMDI5NDA0MDMwOTIzMzMsMjAuMTMyNzMwMTEwNzg5NTk1LDQuMDg4MzY1NDMwMjg3MjY4NSwyMy44OTk4Mjk2NDI4Nzg4Nyw0LjcyOTkxNDA0NzQ2MzgyMiwxMi41NTYxMDEyMjIxMDI5NTMsMTEuMjIyODY1ODc2OTg1MDQsMjUuNzYzMDcxMTE2ODUxMzM2LDE4LjY2NDMyNzc3MDEyMzU1LDUuMjQ5MTAxMTc1NDgyMjUyLDE1LjI3NzI2NzMwMDU1MDczMywxMC4xNzQyMzI3MDk5MTMyOTgsMTUuMDMwNTMzNjQwMTQyNDA5LDE2LjY5MTAyNjYzNTUwNDE4NywxNC44NDgxODIxMDA5MTA2MzQsMzMuODQ2MTA5ODMzMTI3NTcsMi4xNTg0MjQ5MTY4OTU5MDcsMC4wMjcwMjUzNDAyNjM1NjEzMgorOCxUdWUgMSBGZWIgMTEsMS4xODg5ODI4ODgwNzQxNTQsMS4wNjE1ODgxMjI3MjkzNDcsMC42MTc5MzA2OTQ3MzMyNjY4LDEuMjc3NDI1MDU5OTAzMzg4LDEuMjg3NjMxNjMwNjQ2NjMxLDIwLjgxNTA3MDAzNzAxODgxMywyMi42MTk3MTUwNDUyNzg4MzgsMTguNTM5MDE2ODQ5NTk0NTMyLDE2LjEwMzAwNjk5NDY2MzY0NCwyMC4xMzI4MTMzNjcwMjEwMTUsNC4wODgzODIzMzcxNzk0OTYsMjMuODk5OTI4NDc3NDUwMDA0LDQuNzI5OTMzNjA3Mzk1MTQ3LDEyLjU1NjE1MzE0NjE5MTg4OSwxMS4yMjI5MTIyODc2NTYyNzEsMjUuNzYzMTc3NjU2NjEwMTQsMTguNjY0NDA0OTUzOTcyMTEsNS4yNDkxMjI4ODI0NDI5OSwxNS4yNzczMzA0Nzc2NjA1NywxMC4xNzQyNzQ3ODQxMDEzNTcsMTUuMDMwNTk1Nzk2OTE3OTY0LDE2LjY5MTA5NTY1OTAyNzk4LDE0Ljg0ODI0MzUwMzU5NTU5NywzMy44NDYyNDk3OTkyMTk0MzYsMi4xNTg0MzM4NDI3NzU0Njk1LDAuMDI3MDI1NDUyMDIzMjY2NTYKKzksV2VkIDIgRmViIDExLDEuMTg4OTg3NjQ2NDAxOTg3LDEuMDYxNTkyMzcxMjIxMzY3NSwwLjYxNzkzMzE2NzcwMTQyNSwxLjI3NzQzMDE3MjE3ODE1MTYsMS4yODc2MzY3ODM3NjgyNDk0LDIwLjgxNTE1MzMzOTI0OTY2LDIyLjYxOTgwNTU2OTcyNjgyLDE4LjUzOTA5MTA0MzAyNTUwOCwxNi4xMDMwNzE0MzkxNDU2NSwyMC4xMzI4OTM5Mzg4NTAxNzQsNC4wODgzOTg2OTg5NDg1ODA1LDIzLjkwMDAyNDEyNTMzMTg5Niw0LjcyOTk1MjUzNjY2MjI5NiwxMi41NTYyMDMzOTYxMTAxNjMsMTEuMjIyOTU3MjAxOTI0MTAzLDI1Ljc2MzI4MDc2MTI0Mzg5LDE4LjY2NDQ3OTY0OTIwODIwNCw1LjI0OTE0Mzg4OTUxMzYxMSwxNS4yNzczOTE2MTc3NzI0MjMsMTAuMTc0MzE1NTAxNzA1NzM1LDE1LjAzMDY1NTk0OTU5MzgzNiwxNi42OTExNjI0NTcwNDk4NywxNC44NDgzMDI5MjY0OTQ3OTYsMzMuODQ2Mzg1MjUyNDMyNDEsMi4xNTg0NDI0ODA4NjA5NTU1LDAuMDI3MDI1NTYwMTc5NTQxODAyCisxMCxUaHUgMyBGZWIgMTEsMS4xODg5OTIyNjQ5MzA3MzA1LDEuMDYxNTk2NDk0ODkzMjEwNiwwLjYxNzkzNTU2ODAxNDA4MjEsMS4yNzc0MzUxMzQyNTQ5MTE3LDEuMjg3NjQxNzg1NDkxNzg3OSwyMC44MTUyMzQxOTQwNzEyNSwyMi42MTk4OTM0MzQ1Nzc3MDUsMTguNTM5MTYzMDU2NjYyNjAyLDE2LjEwMzEzMzk5MDI1NjY4LDIwLjEzMjk3MjE0MzQ4ODkyOCw0LjA4ODQxNDU4MDAxMDg5OCwyMy45MDAxMTY5NjMwOTA3NjcsNC43Mjk5NzA5MDk3ODk5MDUsMTIuNTU2MjUyMTY5NjkyMDMsMTEuMjIzMDAwNzk2NjE2Mjc2LDI1Ljc2MzM4MDgzNjY3NjI0OCwxOC42NjQ1NTIxNDk5MDc0NSw1LjI0OTE2NDI3OTM5OTA4MiwxNS4yNzc0NTA5NjE1OTUzMiwxMC4xNzQzNTUwMjMwMzE5MzYsMTUuMDMwNzE0MzM0OTkxNTAxLDE2LjY5MTIyNzI5MjU1NDExNywxNC44NDgzNjA2MDM1NTY1LDMzLjg0NjUxNjcyNjA0NjY3LDIuMTU4NDUwODY1MTYwNTQ5NiwwLjAyNzAyNTY2NTE1ODE5ODkzCisxMSxGcmkgNCBGZWIgMTEsMS4xODg5OTcwMDgzNDM4NDg4LDEuMDYxNjAwNzMwMDY4NTY3NywwLjYxNzkzODAzMzIzMDg1ODYsMS4yNzc0NDAyMzA1MDU1MzUsMS4yODc2NDY5MjI0NjEyMzMyLDIwLjgxNTMxNzIzNTE5NTk1LDIyLjYxOTk4MzY3NTI4MTg0NCwxOC41MzkyMzcwMTc1MzgzOTcsMTYuMTAzMTk4MjMyNzQxMDgsMjAuMTMzMDUyNDYyNzcwMTk1LDQuMDg4NDMwODkwNDk0OTI2NSwyMy45MDAyMTIzMTExNjk2OTYsNC43Mjk5ODk3Nzk3MjQzMDYsMTIuNTU2MzAyMjYyMTA0NzIyLDExLjIyMzA0NTU3MDEwMjgyNiwyNS43NjM0ODM2MTgxMzQyNzMsMTguNjY0NjI2NjExMDE1NDgsNS4yNDkxODUyMjA2MjQyMTMsMTUuMjc3NTExOTEwMDY2OTIsMTAuMTc0Mzk1NjEzMDA5MjUzLDE1LjAzMDc3NDI5OTEyMjE1NywxNi42OTEyOTM4ODEyMDEzNDYsMTQuODQ4NDE5ODQwMTk3OTIsMzMuODQ2NjUxNzU0Njg5MDUsMi4xNTg0NTk0NzYxNzA0MzUsMC4wMjcwMjU3NzI5NzU0NjQzNQorMTIsU2F0IDUgRmViIDExLDEuMTg5MDAxODk1NjYzMjY5LDEuMDYxNjA1MDkzNzMxMjQxNiwwLjYxNzk0MDU3MzIzNzcxNDEsMS4yNzc0NDU0ODEzNjY4OTg1LDEuMjg3NjUyMjE1Mjc2NzQ5LDIwLjgxNTQwMjc5NTYzMzQ0NiwyMi42MjAwNzY2NTM3MjA2NDUsMTguNTM5MzEzMjIyMjQ5MTc3LDE2LjEwMzI2NDQyNDIyMjU3MywyMC4xMzMxMzUyMTg3ODg2NTIsNC4wODg0NDc2OTU4MDg2MTgsMjMuOTAwMzEwNTUxOTMxNDgzLDQuNzMwMDA5MjIyMTM3MzMzLDEyLjU1NjM1Mzg3NDIyNzgxLDExLjIyMzA5MTcwMTkzMzQ1NiwyNS43NjM1ODk1MTc3OTAwMjQsMTguNjY0NzAzMzMxMTM0NjMyLDUuMjQ5MjA2Nzk3MTY3MDQ4LDE1LjI3NzU3NDcwNzYwMTQ3NCwxMC4xNzQ0Mzc0MzQ0MTA3NjMsMTUuMDMwODM2MDgyNDUyNjgsMTYuNjkxMzYyNDkwMDIzODksMTQuODQ4NDgwODczOTY4NTU1LDMzLjg0Njc5MDg3OTg0ODcsMi4xNTg0NjgzNDg0MjIyOTY0LDAuMDI3MDI1ODg0MDYzNzA0NTE0CisxMyxTdW4gNiBGZWIgMTEsMS4xODkwMDY2NjU5Njk3MTc2LDEuMDYxNjA5MzUyOTE4NDE1MiwwLjYxNzk0MzA1MjQzMTMyMjcsMS4yNzc0NTA2MDY1MTEzMDUyLDEuMjg3NjU3MzgxMzcwODM4MywyMC44MTU0ODYzMDc1NjkzODcsMjIuNjIwMTY3NDA2MDU0OTE4LDE4LjUzOTM4NzYwMjQ1NDcyNCwxNi4xMDMzMjkwMzA5MzcxNDcsMjAuMTMzMjE1OTkzNDQ5Mzk3LDQuMDg4NDY0MDk4NzY2ODI4LDIzLjkwMDQwNjQ0MDU5NzM4LDQuNzMwMDI4MTk5MDU3MDMxLDEyLjU1NjQwNDI1MDY0NTI3MiwxMS4yMjMxMzY3MjkyNjg0OSwyNS43NjM2OTI4ODE5Nzk0OTUsMTguNjY0Nzc4MjE0NDA4NTU3LDUuMjQ5MjI3ODU3MTIwODc5LDE1LjI3NzYzNjAwMTYyNzUxMywxMC4xNzQ0NzgyNTQ1MTc2OCwxNS4wMzA4OTYzODY1NTY5NDcsMTYuNjkxNDI5NDU2MjAzMTk2LDE0Ljg0ODU0MDQ0NjQ1OTAyNiwzMy44NDY5MjY2NzQwNTE2NDUsMi4xNTg0NzcwMDgyNTMzMDM0LDAuMDI3MDI1OTkyNDkyMjUyNDYKKzE0LE1vbiA3IEZlYiAxMSwxLjE4OTAxMTQxMzQxOTQyNzQsMS4wNjE2MTM1OTE2OTc4NTgyLDAuNjE3OTQ1NTE5NzQ1OTcxMywxLjI3NzQ1NTcwNzA5ODc4MSwxLjI4NzY2MjUyMjcxMTc4NiwyMC44MTU1Njk0MTkzNjExNCwyMi42MjAyNTc3MjM1NTI4OTYsMTguNTM5NDYxNjI2MjcwMzk1LDE2LjEwMzM5MzMyODA5MTE4NywyMC4xMzMyOTYzODEwODE0MzYsNC4wODg0ODA0MjMxMzA4OTYsMjMuOTAwNTAxODY5ODE2NDI0LDQuNzMwMDQ3MDg1MDQ5NTQxNSwxMi41NTY0NTQzODU2ODYwNTIsMTEuMjIzMTgxNTQwODU2NzcxLDI1Ljc2Mzc5NTc1MDkwMzQyNywxOC42NjQ4NTI3Mzg4ODIxOSw1LjI0OTI0ODgxNjE2Njc1NSwxNS4yNzc2OTcwMDE5NjU1NSwxMC4xNzQ1MTg4NzkwMzY2NCwxNS4wMzA5NTY0MDE3MTY0MjMsMTYuNjkxNDk2MTAxNTE2NTc3LDE0Ljg0ODU5OTczMzUxMDE1NiwzMy44NDcwNjE4MTc2MDE5NywyLjE1ODQ4NTYyNjU5MTA1OSwwLjAyNzAyNjEwMDQwMTI2OTEyNgorMTUsVHVlIDggRmViIDExLDEuMTg5MDE2MTkxMTkyMjYwOCwxLjA2MTYxNzg1NzU1MTQyMzcsMC42MTc5NDgwMDI4MTk5NjMxLDEuMjc3NDYwODQwMjY0OTU5NCwxLjI4NzY2NzY5Njg5MTczOTgsMjAuODE1NjUzMDYyMDA4MjY2LDIyLjYyMDM0ODYxNzkzMDg2LDE4LjUzOTUzNjEyMjg5NDMwNSwxNi4xMDM0NTgwMzU5MjY4MiwyMC4xMzMzNzcyODIxNjkwNSw0LjA4ODQ5Njg1MTc2MjY3LDIzLjkwMDU5NzkwODU2NTI4OCw0LjczMDA2NjA5MTY3MTUyNDUsMTIuNTU2NTA0ODQwOTUxNjE4LDExLjIyMzIyNjYzODY2NzY1NCwyNS43NjM4OTkyNzY4NzYzNDQsMTguNjY0OTI3NzM5MzYxODQzLDUuMjQ5MjY5OTA5MDgzMTk2LDE1LjI3Nzc1ODM5MTkyNzcwNSwxMC4xNzQ1NTk3NjMwMzQzMjQsMTUuMDMxMDE2ODAwMjA3NDI1LDE2LjY5MTU2MzE3MjUwOTk0NCwxNC44NDg2NTkzOTkyNDIyMjMsMzMuODQ3MTk3ODI0MzQ3MjksMi4xNTg0OTQyOTk5NzYyNTQ2LDAuMDI3MDI2MjA4OTk5NTI3MTUKKzE2LFdlZCA5IEZlYiAxMSwxLjE4OTAyMDkxMTI0NjU2MzcsMS4wNjE2MjIwNzE4NzA3NzA1LDAuNjE3OTUwNDU1ODk2ODQzNCwxLjI3NzQ2NTkxMTQxOTIyOTMsMS4yODc2NzI4MDg1NjQzMTEyLDIwLjgxNTczNTY5NDE5OTA3NywyMi42MjA0Mzg0MTQyNDY5OSwxOC41Mzk2MDk3MTk1NTE2NjMsMTYuMTAzNTIxOTYyMDUwNzYzLDIwLjEzMzQ1NzIwNTkyMDA4LDQuMDg4NTEzMDgxOTI2MTQ1LDIzLjkwMDY5Mjc4NzEwNTEsNC43MzAwODQ4Njg2ODE0MzA1LDEyLjU1NjU1NDY4NjY4NTU0NCwxMS4yMjMyNzExOTE2NjgzNDYsMjUuNzY0MDAxNTUyMTg5NzY4LDE4LjY2NTAwMTgzMzc4ODA2OCw1LjI0OTI5MDc0NzE4Mzc5OTUsMTUuMjc3ODE5MDQwMjYwMTQxLDEwLjE3NDYwMDE1MzEyNzM0NCwxNS4wMzEwNzY0NjkwNDYyOTcsMTYuNjkxNjI5NDMzMjQzMDk0LDE0Ljg0ODcxODM0NDE3NDMzLDMzLjg0NzMzMjE4ODA0NDYyLDIuMTU4NTAyODY4NTgxNDQzNiwwLjAyNzAyNjMxNjI4NTg0OTI1NgorMTcsVGh1IDEwIEZlYiAxMSwxLjE4OTAyNTYzNjMwMjk0MiwxLjA2MTYyNjI5MDY1NjIzOSwwLjYxNzk1MjkxMTU3MzM3MTMsMS4yNzc0NzA5ODc5NDc2NTUzLDEuMjg3Njc3OTI1NjUzOTc4OCwyMC44MTU4MTg0MTM5NTkzMzUsMjIuNjIwNTI4MzA1NzI0ODA0LDE4LjUzOTY4MzM5NDIwMzA4LDE2LjEwMzU4NTk1NTkyMDQxLDIwLjEzMzUzNzIxNDM3MDMzNSw0LjA4ODUyOTMyOTI4OTUyOCwyMy45MDA3ODc3NjYxOTIzNjYsNC43MzAxMDM2NjU1OTAyODUsMTIuNTU2NjA0NTg1MjQzNDc3LDExLjIyMzMxNTc5MTg4NDA3NiwyNS43NjQxMDM5MzU4ODk0MzcsMTguNjY1MDc2MDA2NzM1ODg3LDUuMjQ5MzExNjA3MzY3NTg4LDE1LjI3Nzg3OTc1Mjg2NDYzNSwxMC4xNzQ2NDA1ODYwMjM3OTksMTUuMDMxMTM2MjAxMTE5MTgyLDE2LjY5MTY5NTc2NDE5NjA1NSwxNC44NDg3NzczNTE1NzMzNDcsMzMuODQ3NDY2Njk0MTMzOTcsMi4xNTg1MTE0NDYyNjcyMTI0LDAuMDI3MDI2NDIzNjg1ODY3OTk1CisxOCxGcmkgMTEgRmViIDExLDEuMTg5MDMwNDEwNjM1MjM2NywxLjA2MTYzMDU1MzQzNzkwOCwwLjYxNzk1NTM5Mjg1OTI2OTgsMS4yNzc0NzYxMTc0MTczNzE5LDEuMjg3NjgzMDk2MTA3OTM4OSwyMC44MTU5MDE5OTYzNzQyOTQsMjIuNjIwNjE5MTM0NjQ4NTY0LDE4LjUzOTc1NzgzNzE4MTAxNCwxNi4xMDM2NTA2MTcxNTkxMzMsMjAuMTMzNjE4MDU3MTk5OTgyLDQuMDg4NTQ1NzQ2MDkwODM3LDIzLjkwMDg4MzczNTc4MjQ4Niw0LjczMDEyMjY1ODUyNTM0NiwxMi41NTY2NTUwMDQxNzU1NjgsMTEuMjIzMzYwODU3MjE5NDQ3LDI1Ljc2NDIwNzM4NzMxMTk4NCwxOC42NjUxNTA5NTMyMDY3MzQsNS4yNDkzMzI2ODUwOTQ3NDMsMTUuMjc3OTQxMDk4NjE5MDk1LDEwLjE3NDY4MTQ0MDU4MDQsMTUuMDMxMTk2NTU2MTE2NDQxLDE2LjY5MTc2Mjc4Njg5MDcwNiwxNC44NDg4MzY5NzQzMzkzNSwzMy44NDc2MDI2MDI5Mzg5OSwyLjE1ODUyMDExMzQwNjU4ODMsMC4wMjcwMjY1MzIyMDU5MjMwMgorMTksU2F0IDEyIEZlYiAxMSwxLjE4OTAzNTA4MDU1OTI4NiwxLjA2MTYzNDcyMjk5ODI1NDgsMC42MTc5NTc4MTk4ODI3NzExLDEuMjc3NDgxMTM0NzEyNDYzMywxLjI4NzY4ODE1MzQ5MDk5ODcsMjAuODE1OTgzNzUwOTUzODQ4LDIyLjYyMDcwNzk3NzI2NTQ1NCwxOC41Mzk4MzA2NTIxOTA3NzMsMTYuMTAzNzEzODY0MzQzMjM0LDIwLjEzMzY5NzEzMjEwNTMxLDQuMDg4NTYxODAzODc4NzA0LDIzLjkwMDk3NzYwNjY0NjMwOCw0LjczMDE0MTIzNjExMDM3LDEyLjU1NjcwNDMyMDUxMzE3NywxMS4yMjM0MDQ5MzcwMzYzMjEsMjUuNzY0MzA4NTc2MzkwNTYsMTguNjY1MjI0MjYwNjk4NjkzLDUuMjQ5MzUzMzAxODgwMjU1LDE1LjI3ODAwMTEwMjgyNDEzNSwxMC4xNzQ3MjE0MDE3MDI1ODQsMTUuMDMxMjU1NTkxMjMwODAzLDE2LjY5MTgyODM0Mzg4ODg4NiwxNC44NDg4OTUyOTMyMzUzNTgsMzMuODQ3NzM1NTM5NjAwNjUsMi4xNTg1Mjg1OTEwMDcyNCwwLjAyNzAyNjYzODM1Mjc4OTg3MgorMjAsU3VuIDEzIEZlYiAxMSwxLjE4OTAzOTkzNDUyNzMxMTcsMS4wNjE2MzkwNTY4ODMwMDI4LDAuNjE3OTYwMzQyNTU2NDQ3MywxLjI3NzQ4NjM0OTc0MTU5MTgsMS4yODc2OTM0MTAxODc5ODQsMjAuODE2MDY4NzI3NTIxMTU2LDIyLjYyMDgwMDMyMTIxMzEyNSwxOC41Mzk5MDYzMzY4NzU0NzUsMTYuMTAzNzc5NjA0MTI5NTg1LDIwLjEzMzc3OTMyMzM5MTExLDQuMDg4NTc4NDk0NTExOCwyMy45MDEwNzUxNzcwMDY0NzYsNC43MzAxNjA1NDU4NDcwNjMsMTIuNTU2NzU1NTgwNDMxNjQxLDExLjIyMzQ1MDc1NDA2MDIxLDI1Ljc2NDQxMzc1MzM3OTkyNywxOC42NjUzMDA0NTcyNzQ1ODMsNS4yNDkzNzQ3MzExODMzMDIsMTUuMjc4MDYzNDcxODI0MDU1LDEwLjE3NDc2MjkzNzcxMjA0NiwxNS4wMzEzMTY5NTI5NDc3MiwxNi42OTE4OTY0ODQ1MjAyMTQsMTQuODQ4OTU1OTEwNTA3NDE0LDMzLjg0Nzg3MzcxNTM2MDc4LDIuMTU4NTM3NDAyNzE0MjU5LDAuMDI3MDI2NzQ4NjgyOTU2MzQ3CisyMSxNb24gMTQgRmViIDExLDEuMTg5MDQ0NzE3NjE1NjU4NCwxLjA2MTY0MzMyNzQ4MjU0NDMsMC42MTc5NjI4MjgzOTI5ODQ4LDEuMjc3NDkxNDg4NjE4Njc1NywxLjI4NzY5ODU5MDEyNDQ3MjYsMjAuODE2MTUyNDYzMjI0OTM4LDIyLjYyMDg5MTMxNjcxNTY3LDE4LjUzOTk4MDkxNjM4MDY3LDE2LjEwMzg0NDM4Mzk1NjAxNiwyMC4xMzM4NjAzMTQ0ODUyMiw0LjA4ODU5NDk0MTQyMTI2MywyMy45MDExNzEzMjI2MDMyOSw0LjczMDE3OTU3MzYxNDg2MiwxMi41NTY4MDYwOTE4MzEyNDgsMTEuMjIzNDk1OTAyMDQ0NjksMjUuNzY0NTE3Mzk0NTMwNzQyLDE4LjY2NTM3NTU0MTE5NjA4NCw1LjI0OTM5NTg0NzU2NjY3NCwxNS4yNzgxMjQ5MzAwODU2NTMsMTAuMTc0ODAzODY3MTk1MjY2LDE1LjAzMTM3NzQxODYzNTA4OCwxNi42OTE5NjM2MzAxMzM0NDQsMTQuODQ5MDE1NjQyNjIwNjI4LDMzLjg0ODAwOTg3MzQyMDMyNCwyLjE1ODU0NjA4NTc0OTAyNywwLjAyNzAyNjg1NzQwMjAzNTQ0OAorMjIsVHVlIDE1IEZlYiAxMSwxLjE4OTA0OTQ1NDgzNDE1ODYsMS4wNjE2NDc1NTcxMjcwMTM2LDAuNjE3OTY1MjkwMzkwMzMzOSwxLjI3NzQ5NjU3ODIxMzg5OTIsMS4yODc3MDM3MjAzODUzMzk0LDIwLjgxNjIzNTM5NTkwMjgyMiwyMi42MjA5ODE0Mzk1NzA3ODQsMTguNTQwMDU0NzgwNjY3OTMsMTYuMTAzOTA4NTQyNTQzNTA4LDIwLjEzMzk0MDUyODg3NDI2Myw0LjA4ODYxMTIzMDYwNDc2MiwyMy45MDEyNjY1NDYxNjMyNDIsNC43MzAxOTg0MTg5MDYyNTUsMTIuNTU2ODU2MTE4ODI2MjMyLDExLjIyMzU0MDYxNzA1OTcyNiwyNS43NjQ2MjAwNDE3NjIzLDE4LjY2NTQ0OTkwNTA2MjMwMyw1LjI0OTQxNjc2MTQ0MzgwNCwxNS4yNzgxODU3OTg5NjIxNywxMC4xNzQ4NDQ0MDQxNjQ0ODksMTUuMDMxNDM3MzA0NDU2MTQ4LDE2LjY5MjAzMDEzMTgxOTg1LDE0Ljg0OTA3NDgwMTkwMjUwMywzMy44NDgxNDQ3MjU3MjM0NDQsMi4xNTg1NTQ2ODU1MTM0NDc0LDAuMDI3MDI2OTY1MDc4NDk3ODkKKzIzLFdlZCAxNiBGZWIgMTEsMS4xODkwNTM5OTYyMTE0Mjc1LDEuMDYxNjUxNjExOTEzODU2LDAuNjE3OTY3NjUwNjA2MzEzOSwxLjI3NzUwMTQ1NzQwMDI5MjgsMS4yODc3MDg2Mzg1NTYyMjE1LDIwLjgxNjMxNDkwMDA2Mjk2MywyMi42MjEwNjc4MzY2NTkyNSwxOC41NDAxMjU1OTEzMzM1NSwxNi4xMDM5NzAwNDg3NTI0NDQsMjAuMTM0MDE3NDI3MTIyMjc0LDQuMDg4NjI2ODQ2Mzc3NTQ0LDIzLjkwMTM1NzgzMzA4ODQxLDQuNzMwMjE2NDg1MTE0OTM3LDEyLjU1NjkwNDA3NzY1NjQ2OSwxMS4yMjM1ODM0ODM1MTI0NDIsMjUuNzY0NzE4NDQ1NDU3MjQ4LDE4LjY2NTUyMTE5NDY1Mzg1LDUuMjQ5NDM2ODEwNzIwODY2LDE1LjI3ODI0NDE1MTQ1OTk0NCwxMC4xNzQ4ODMyNjUyOTU4NzUsMTUuMDMxNDk0NzE0NTM4OTgsMTYuNjkyMDkzODg0MjYxNjgsMTQuODQ5MTMxNTE1NDgxOTg2LDMzLjg0ODI3NDAwMzEwMDc1NSwyLjE1ODU2MjkyOTc1NTIxNjcsMC4wMjcwMjcwNjgzMDM1MTA0MjYKKzI0LFRodSAxNyBGZWIgMTEsMS4xODkwNTg2NTEzMjUyOTE2LDEuMDYxNjU1NzY4MjUwODY5MiwwLjYxNzk3MDA2OTkzMjc1NzksMS4yNzc1MDY0NTg3ODM1NDcsMS4yODc3MTM2Nzk5MDAzMTA0LDIwLjgxNjM5NjM5NTM2NjI3LDIyLjYyMTE1NjM5NzUyMDkwNiwxOC41NDAxOTgxNzU0MTgsMTYuMTA0MDMzMDk1MzU0NTY2LDIwLjEzNDA5NjI1MTI0OTY0NSw0LjA4ODY0Mjg1MzIzOTc3NiwyMy45MDE0NTE0MDYyNTA0MDIsNC43MzAyMzUwMDM3ODMwNTgsMTIuNTU2OTUzMjM3NTkyMzgxLDExLjIyMzYyNzQyMzUzNDcwOCwyNS43NjQ4MTkzMTM2MjUwMjYsMTguNjY1NTk0MjY5NjU4NjQsNS4yNDk0NTczNjIxMjIzNDk1LDE1LjI3ODMwMzk2NTM2Nzc5NywxMC4xNzQ5MjMwOTk2ODU0ODYsMTUuMDMxNTUzNTYyNDI5NTM2LDE2LjY5MjE1OTIzMzM1MjU1NSwxNC44NDkxODk2NDk0MjU1OTcsMzMuODQ4NDA2NTE4MTY3Mzk0LDIuMTU4NTcxMzgwNDcwMDI5LDAuMDI3MDI3MTc0MTEzNzQzMzYzCisyNSxGcmkgMTggRmViIDExLDEuMTg5MDYzNDc0MzE1OTEsMS4wNjE2NjAwNzQ0NzczMTg0LDAuNjE3OTcyNTc2NTA3MDUyNywxLjI3NzUxMTY0MDUzMTAyNiwxLjI4NzcxODkwMzA0OTcyNTYsMjAuODE2NDgwODI5NjIzOTQsMjIuNjIxMjQ4MTUyMTQxMjUsMTguNTQwMjczMzc3MDkyNjksMTYuMTA0MDk4NDE1NTk4MDAzLDIwLjEzNDE3NzkxODAwMTA4Niw0LjA4ODY1OTQzNzM1NTM3NSwyMy45MDE1NDgzNTM5MjksNC43MzAyNTQxOTAyODc0NjgsMTIuNTU3MDA0MTcwMzc2NTg3LDExLjIyMzY3Mjk0ODE2MDIxNCwyNS43NjQ5MjM4MTkzODgyNTgsMTguNjY1NjY5OTc5OTU3Nyw1LjI0OTQ3ODY1NDY2NjMyNiwxNS4yNzgzNjU5MzYzMzY3MTIsMTAuMTc0OTY0MzcwNjE3NDE3LDE1LjAzMTYxNDUzMjU0MzgxMywxNi42OTIyMjY5MzkxMTkwNTMsMTQuODQ5MjQ5ODc5ODQ1OTU2LDMzLjg0ODU0MzgxMjEwNzM4LDIuMTU4NTgwMTM1OTQxODU3NSwwLjAyNzAyNzI4MzczOTc5Njc5MgorMjYsU2F0IDE5IEZlYiAxMSwxLjE4OTA2ODMwMDc3NjYwOTYsMS4wNjE2NjQzODM4MDIwMzc2LDAuNjE3OTc1MDg0ODg0Nzk1NiwxLjI3NzUxNjgyNjAwNjcwMTYsMS4yODc3MjQxMjk5NTcxMjg1LDIwLjgxNjU2NTMyNDYzMDk3LDIyLjYyMTMzOTk3Mjc3Nzg2LDE4LjU0MDM0ODYzMjg3NDAxNCwxNi4xMDQxNjM3ODI4Mzg1MjYsMjAuMTM0MjU5NjQzNTEwNzE3LDQuMDg4Njc2MDMzNDAzMDQsMjMuOTAxNjQ1MzcxMzYwMTYsNC43MzAyNzMzOTA1OTYzMTcsMTIuNTU3MDU1MTM5ODA2MjM4LDExLjIyMzcxODUwNTU0MDA2MywyNS43NjUwMjg0MDAzNDIwMzIsMTguNjY1NzQ1NzQ0NzI5MjkzLDUuMjQ5NDk5OTYyNTMwMDAyNSwxNS4yNzg0Mjc5NTE4OTI5MjIsMTAuMTc1MDA1NjcxMjQzMjU1LDE1LjAzMTY3NTU0NjUyNTI5MiwxNi42OTIyOTQ2OTM1OTg5NjcsMTQuODQ5MzEwMTUzNjAxMjk0LDMzLjg0ODY4MTIwNDgyODYxLDIuMTU4NTg4ODk3NzEzMTMwNSwwLjAyNzAyNzM5MzQ0NDcyNDc0CisyNyxTdW4gMjAgRmViIDExLDEuMTg5MDczMDg2MTg5MTY4MywxLjA2MTY2ODY1NjQ3Njc2MzcsMC42MTc5Nzc1NzE5MjkyNTg0LDEuMjc3NTIxOTY3MzgwODg2NiwxLjI4NzcyOTMxMjQxMDY2ODYsMjAuODE2NjQ5MTAxMDIzODQsMjIuNjIxNDMxMDEyNDk3MjI2LDE4LjU0MDQyMzI0ODYxOTA3OCwxNi4xMDQyMjg1OTQxNDI5NCwyMC4xMzQzNDA2NzM5NjAzMSw0LjA4ODY5MjQ4ODMwNDQzMTUsMjMuOTAxNzQxNTYzNjc2MzUzLDQuNzMwMjkyNDI3NjEwMTQ1LDEyLjU1NzEwNTY3NTc1MDUwNiwxMS4yMjM3NjM2NzU0NjI5OSwyNS43NjUxMzIwOTE4NTQ0NywxOC42NjU4MjA4NjUxMzU4LDUuMjQ5NTIxMDg5MTc0MzE2LDE1LjI3ODQ4OTQ0MDAxODUxOCwxMC4xNzUwNDY2MjA2MTUwMzUsMTUuMDMxNzM2MDQxNTk0MzE0LDE2LjY5MjM2MTg3MTgzOTgwNywxNC44NDkzNjk5MTQ3Mzk3MjUsMzMuODQ4ODE3NDI5MDUwNTQsMi4xNTg1OTc1ODQ5NjcxODk3LDAuMDI3MDI3NTAyMjE2NjMyOTE1CisyOCxNb24gMjEgRmViIDExLDEuMTg5MDc3Nzc5NzAxNDQ3NiwxLjA2MTY3Mjg0NzA5Nzk1NiwwLjYxNzk4MDAxMTIxMTg4NTgsMS4yNzc1MjcwMTAwMTg4MTE2LDEuMjg3NzM0Mzk1MzM5MDUwOCwyMC44MTY3MzEyNjg1NTM1ODIsMjIuNjIxNTIwMzAzODY2NjQ2LDE4LjU0MDQ5NjQzMTQyNDM3MywxNi4xMDQyOTIxNjA3OTQ1ODYsMjAuMTM0NDIwMTQ4MjgwNDk4LDQuMDg4NzA4NjI3MjAxNzExNSwyMy45MDE4MzU5MDg2OTA4LDQuNzMwMzExMDk5MDMyMzIwNSwxMi41NTcxNTUyNDExODk2MzMsMTEuMjIzODA3OTc3OTMxMjE2LDI1Ljc2NTIzMzc5MjA0ODY5LDE4LjY2NTg5NDU0MjkxMDkwNSw1LjI0OTU0MTgxMDA5NzE3MDUsMTUuMjc4NTQ5NzQ3MzEwNDc4LDEwLjE3NTA4Njc4MzU4NDY2LDE1LjAzMTc5NTM3NDkwMDY2OCwxNi42OTI0Mjc3NTk5NzI2MTcsMTQuODQ5NDI4NTI4MjEwMDQsMzMuODQ4OTUxMDM3MTg3OTMsMi4xNTg2MDYxMDUzODkwMDg0LDAuMDI3MDI3NjA4ODk5NjU3NjkKKzI5LFR1ZSAyMiBGZWIgMTEsMS4xODkwODIzMjM1OTkwMDI3LDEuMDYxNjc2OTA0MTM1MDQ0NSwwLjYxNzk4MjM3MjczNzY5MSwxLjI3NzUzMTg5MTkxMjk2MSwxLjI4NzczOTMxNjIzOTMyMywyMC44MTY4MTA4MTY4MzUzODUsMjIuNjIxNjA2NzQ4OTAyMDUzLDE4LjU0MDU2NzI4MTM4NzEyNiwxNi4xMDQzNTM3MDExMzcsMjAuMTM0NDk3MDg5MjAzOTYsNC4wODg3MjQyNTE2NDA2Mjc1LDIzLjkwMTkyNzI0NjI3NjYxNCw0LjczMDMyOTE3NTI2NzAzNzYsMTIuNTU3MjAzMjI2NjM1MTI0LDExLjIyMzg1MDg2ODE3MzExNiwyNS43NjUzMzIyNTAzNTM3NjUsMTguNjY1OTY1ODcyMDY1MzMsNS4yNDk1NjE4NzA1MDA3ODQsMTUuMjc4NjA4MTMyMTkxNjA3LDEwLjE3NTEyNTY2NjI4MjQ1NSwxNS4wMzE4NTI4MTY4NDM4MSwxNi42OTI0OTE1NDc3OTQ1MzIsMTQuODQ5NDg1MjczMjYzMzI2LDMzLjg0OTA4MDM4NjMwOTA4LDIuMTU4NjE0MzU0MjA2MDA4NiwwLjAyNzAyNzcxMjE4MTk1NjAxNQorMzAsV2VkIDIzIEZlYiAxMSwxLjE4OTA4NzM1NDQ3NDg0NjYsMS4wNjE2ODEzOTU5NzI2NDUsMC42MTc5ODQ5ODczNTI3ODQzLDEuMjc3NTM3Mjk3MDA5MTUwMywxLjI4Nzc0NDc2NDUyMTk5NzcsMjAuODE2ODk4ODkwNDYwNDA4LDIyLjYyMTcwMjQ1ODQxOTE1LDE4LjU0MDY0NTcyNDQ3NzQzLDE2LjEwNDQyMTgzNjg3NzAxLDIwLjEzNDU4MjI3NjAzNTA0Nyw0LjA4ODc0MTU1MDU4MDg3NzUsMjMuOTAyMDI4MzcyNjg4MTM2LDQuNzMwMzQ5MTg4NzY2NzgsMTIuNTU3MjU2MzU0NzczNjQyLDExLjIyMzg5ODM1NTA0NTIyMiwyNS43NjU0NDEyNjA2MjU4OSwxOC42NjYwNDQ4NDU3MDMxNyw1LjI0OTU4NDA4MDgxNjY1MywxNS4yNzg2NzI3NzQyOTMzOTgsMTAuMTc1MTY4NzE2MTE0MTcyLDE1LjAzMTkxNjQxNDk1MTE1NSwxNi42OTI1NjIxNzE4ODA2OTUsMTQuODQ5NTQ4MDk5NzkzNzM2LDMzLjg0OTIyMzU5ODAyNTc5LDIuMTU4NjIzNDg3MDY0NjgwNSwwLjAyNzAyNzgyNjUzMzIxODA1OAorMzEsVGh1IDI0IEZlYiAxMSwxLjE4OTA5MjEyMDk1OTExNTIsMS4wNjE2ODU2NTE3NDcxNzI0LDAuNjE3OTg3NDY0NTU5OTU1MiwxLjI3NzU0MjQxODA0NzA2NzYsMS4yODc3NDk5MjY0NzY3ODMsMjAuODE2OTgyMzM1NDgyOTIsMjIuNjIxNzkzMTM4MDM4NjcsMTguNTQwNzIwMDQ1MDg2MjksMTYuMTA0NDg2MzkxODI1ODQ0LDIwLjEzNDY2Mjk4NTk3NTU4LDQuMDg4NzU3OTQwMzk2MzEzLDIzLjkwMjEyNDE4NDUyMzg0Miw0LjczMDM2ODE1MDQ4MTMzMywxMi41NTczMDY2OTA4MjcyOSwxMS4yMjM5NDMzNDYzMDIzNzcsMjUuNzY1NTQ0NTQxOTk1MzgyLDE4LjY2NjExOTY2ODk3NzMzLDUuMjQ5NjA1MTIzODk2MzMsMTUuMjc4NzM0MDE5MjA3OTc0LDEwLjE3NTIwOTUwMzUxNDIxLDE1LjAzMTk3NjY3MDczNzA5NSwxNi42OTI2MjkwODQ0MDM3MzQsMTQuODQ5NjA3NjI0NTUyMDUsMzMuODQ5MzU5MjgzNDI0NDYsMi4xNTg2MzIxMzk5NTcwNDYsMC4wMjcwMjc5MzQ4NzQ4ODgyMgorMzIsRnJpIDI1IEZlYiAxMSwxLjE4OTA5Njg1MDIyMDIwMjgsMS4wNjE2ODk4NzQyODY4MzA4LDAuNjE3OTg5OTIyNDIxNzI4OSwxLjI3NzU0NzQ5OTA5Mjk2NjMsMS4yODc3NTUwNDgxMjAwMjA2LDIwLjgxNzA2NTEyODg1MzQ0MywyMi42MjE4ODMxMDk1MDg2MTYsMTguNTQwNzkzNzg1Mjk4OTQ1LDE2LjEwNDU1MDQ0MjY0MjAyMiwyMC4xMzQ3NDMwNjU2MjMzNTQsNC4wODg3NzQyMDIyMTc4MjcsMjMuOTAyMjE5MjQ4MTMwNjIsNC43MzAzODY5NjQxMTcwNzM1LDEyLjU1NzM1NjYzMzc4ODcsMTEuMjIzOTg3OTg2MjA2NzIzLDI1Ljc2NTY0NzAxNjgwMzc3LDE4LjY2NjE5MzkwNzkyOTc2Nyw1LjI0OTYyNjAwMjY0MzA2OSwxNS4yNzg3OTQ3ODU4MzkwNjgsMTAuMTc1MjQ5OTcyMzkwODU4LDE1LjAzMjAzNjQ1NTk2NDA2MSwxNi42OTI2OTU0NzQzODI5NiwxNC44NDk2NjY2ODQ0NjAyNiwzMy44NDk0OTM5MDkyMDc0MSwyLjE1ODY0MDcyNTI3NTg4MDQsMC4wMjcwMjgwNDIzNzA0Nzk1NjYKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvUG9wdWxhdGlvbkdyb3d0aFNFSVJfUktfUmVmZXJlbmNlL0h1bWFuUG9wdWxhdGlvbk1vZGVsL3J1bnBhcmFtZXRlcnMuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Qb3B1bGF0aW9uR3Jvd3RoU0VJUl9SS19SZWZlcmVuY2UvSHVtYW5Qb3B1bGF0aW9uTW9kZWwvcnVucGFyYW1ldGVycy5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjI5NTA2NgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvUG9wdWxhdGlvbkdyb3d0aFNFSVJfUktfUmVmZXJlbmNlL0h1bWFuUG9wdWxhdGlvbk1vZGVsL3J1bnBhcmFtZXRlcnMuY3N2CkBAIC0wLDAgKzEsMiBAQAorcG9wdWxhdGlvbklkZW50aWZpZXIsbmFtZSx0YXJnZXRJU09LZXksYmlydGhSYXRlLGRlYXRoUmF0ZSx0aW1lUGVyaW9kCitodW1hbixIdW1hblBvcHVsYXRpb25Nb2RlbCwsMy45RS01LDMuNUUtNSw4NjQwMDAwMApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvUG9wdWxhdGlvbkdyb3d0aFNFSVJfUktfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL0Rpc2Vhc2UgRGVhdGhzXzAuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Qb3B1bGF0aW9uR3Jvd3RoU0VJUl9SS19SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vRGlzZWFzZSBEZWF0aHNfMC5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmMyNDQwMQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvUG9wdWxhdGlvbkdyb3d0aFNFSVJfUktfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL0Rpc2Vhc2UgRGVhdGhzXzAuY3N2CkBAIC0wLDAgKzEgQEAKK2l0ZXJhdGlvbix0aW1lLApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Qb3B1bGF0aW9uR3Jvd3RoU0VJUl9SS19SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vRGlzZWFzZSBEZWF0aHNfMS5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1BvcHVsYXRpb25Hcm93dGhTRUlSX1JLX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9EaXNlYXNlIERlYXRoc18xLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYzI0NDAxCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Qb3B1bGF0aW9uR3Jvd3RoU0VJUl9SS19SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vRGlzZWFzZSBEZWF0aHNfMS5jc3YKQEAgLTAsMCArMSBAQAoraXRlcmF0aW9uLHRpbWUsCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1BvcHVsYXRpb25Hcm93dGhTRUlSX1JLX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9EaXNlYXNlIERlYXRoc18yLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvUG9wdWxhdGlvbkdyb3d0aFNFSVJfUktfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL0Rpc2Vhc2UgRGVhdGhzXzIuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRhZDFhNWIKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1BvcHVsYXRpb25Hcm93dGhTRUlSX1JLX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9EaXNlYXNlIERlYXRoc18yLmNzdgpAQCAtMCwwICsxLDMzIEBACitpdGVyYXRpb24sdGltZSxFRy1GUkctRzIxMDAwMSxFRy1GUkctRzIxMDAwMixFRy1GUkctRzIxMDAwMyxFRy1GUkctRzIxMDAwNCxFRy1GUkctRzIxMDAwNSxFRy1MT0UtRzI0MDAwMSxFRy1MT0UtRzI0MDAwMixFRy1MT0UtRzI0MDAwMyxFRy1MT0UtRzI0MDAwNCxFRy1MT0UtRzI0MDAwNSxFRy1MT0UtRzI0MDAwNixFRy1MT0UtRzI0MDAwNyxFRy1MT0UtRzI0MDAwOCxFRy1MT0UtRzI0MDAwOSxFRy1VUEUtRzI5MDAwMSxFRy1VUEUtRzI5MDAwMixFRy1VUEUtRzI5MDAwMyxFRy1VUEUtRzI5MDAwNCxFRy1VUEUtRzI5MDAwNSxFRy1VUEUtRzI5MDAwNixFRy1VUEUtRzI5MDAwNyxFRy1VUEUtRzI5MDAwOCxFRy1VUkctRzMwMDAwMSxFRy1VUkctRzMwMDAwMixFRy1VUkctRzMwMDAwMyxFRy1VUkctRzMwMDAwNAorMSxUdWUgMjUgSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzIsV2VkIDI2IEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCiszLFRodSAyNyBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorNCxGcmkgMjggSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzUsU2F0IDI5IEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCis2LFN1biAzMCBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorNyxNb24gMzEgSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzgsVHVlIDEgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzksV2VkIDIgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzEwLFRodSAzIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxMSxGcmkgNCBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTIsU2F0IDUgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzEzLFN1biA2IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxNCxNb24gNyBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTUsVHVlIDggRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzE2LFdlZCA5IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxNyxUaHUgMTAgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzE4LEZyaSAxMSBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTksU2F0IDEyIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyMCxTdW4gMTMgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzIxLE1vbiAxNCBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjIsVHVlIDE1IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyMyxXZWQgMTYgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzI0LFRodSAxNyBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjUsRnJpIDE4IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyNixTYXQgMTkgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzI3LFN1biAyMCBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjgsTW9uIDIxIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyOSxUdWUgMjIgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzMwLFdlZCAyMyBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMzEsVGh1IDI0IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCiszMixGcmkgMjUgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvUG9wdWxhdGlvbkdyb3d0aFNFSVJfUktfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL0VfMC5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1BvcHVsYXRpb25Hcm93dGhTRUlSX1JLX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9FXzAuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJjMjQ0MDEKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1BvcHVsYXRpb25Hcm93dGhTRUlSX1JLX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9FXzAuY3N2CkBAIC0wLDAgKzEgQEAKK2l0ZXJhdGlvbix0aW1lLApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Qb3B1bGF0aW9uR3Jvd3RoU0VJUl9SS19SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vRV8xLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvUG9wdWxhdGlvbkdyb3d0aFNFSVJfUktfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL0VfMS5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmMyNDQwMQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvUG9wdWxhdGlvbkdyb3d0aFNFSVJfUktfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL0VfMS5jc3YKQEAgLTAsMCArMSBAQAoraXRlcmF0aW9uLHRpbWUsCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1BvcHVsYXRpb25Hcm93dGhTRUlSX1JLX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9FXzIuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Qb3B1bGF0aW9uR3Jvd3RoU0VJUl9SS19SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vRV8yLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NTVhOTY4Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Qb3B1bGF0aW9uR3Jvd3RoU0VJUl9SS19SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vRV8yLmNzdgpAQCAtMCwwICsxLDMzIEBACitpdGVyYXRpb24sdGltZSxFRy1GUkctRzIxMDAwMSxFRy1GUkctRzIxMDAwMixFRy1GUkctRzIxMDAwMyxFRy1GUkctRzIxMDAwNCxFRy1GUkctRzIxMDAwNSxFRy1MT0UtRzI0MDAwMSxFRy1MT0UtRzI0MDAwMixFRy1MT0UtRzI0MDAwMyxFRy1MT0UtRzI0MDAwNCxFRy1MT0UtRzI0MDAwNSxFRy1MT0UtRzI0MDAwNixFRy1MT0UtRzI0MDAwNyxFRy1MT0UtRzI0MDAwOCxFRy1MT0UtRzI0MDAwOSxFRy1VUEUtRzI5MDAwMSxFRy1VUEUtRzI5MDAwMixFRy1VUEUtRzI5MDAwMyxFRy1VUEUtRzI5MDAwNCxFRy1VUEUtRzI5MDAwNSxFRy1VUEUtRzI5MDAwNixFRy1VUEUtRzI5MDAwNyxFRy1VUEUtRzI5MDAwOCxFRy1VUkctRzMwMDAwMSxFRy1VUkctRzMwMDAwMixFRy1VUkctRzMwMDAwMyxFRy1VUkctRzMwMDAwNAorMSxUdWUgMjUgSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzIsV2VkIDI2IEphbiAxMSwwLjAwMTA2NjE1MTkzMDI3MDAzMDMsMi4yOTI1NTgwOTYwNzEwMzIxRS00LDEuNzc5Nzk3MTYxNjk0MDhFLTQsMC4xMzQ3NzA1NTYzMDM5ODk0Myw3LjAxODM3NDIxNjc5ODk0RS02LDAuMDU5NTY3MDMyNTgwMTM5NTk1LDIuMDEwNDgwMDg3NTMwMDkyRS01LDAuMDAxMDM2ODMzNTU0NTcwMDc1NCwwLjAyNjExMzYzMTMwNTAwNTM4NywwLjAyMDExMTg3OTc0MzA1NTk1Niw4LjQ4OTc5MjM1Mjk2ODY5OEUtNCw5LjIyNTM4NDE3MTY4NTYxMUUtNCwxLjkyMzgwMjcxMDA0MTQyODNFLTksMy43ODA4MTg0OTI5Njk3NTAzRS00LDAuMDAyODYwNDQ2NTI5MDU2ODg5LDkuNzY1NTQ2OTQwMzEzMzksMC4xNzUzNDUxODE0NzAyMzI2MiwxLjA1NDQzMjc0NzcyOTM0MzdFLTcsMi4xNzIzMTkyMzM2Nzc4NjM2RS00LDAuMDY4NzQyMjE3ODMxNTEwNjIsNC44MzUyMzQyNDIwMDQxMTRFLTgsMS4zNjE0NTYwMjM4ODMzOTUzRS02LDcuMDk1Njg5OTkxMjkwNDAyRS00LDAuMTA4MTM3NTU0NDM1ODcxNjQsMC4wNTU1NDk3NDE3MTI1NzkyNiwzLjYyOTU1ODE0MjgxMjAxMTZFLTgKKzMsVGh1IDI3IEphbiAxMSwwLjAwODQ2MTk4ODg1ODgyNzAzNywwLjAwMzI3NjU0OTY3MTgyNzI3NywwLjAwMjkzMDM3MjU5ODQwNTYxNywwLjc0NDc5Mzg3NjQzNjI0OTQsMS4zNTQxOTM3MDc4Nzk2NjcyRS00LDAuNDI5MTg3Njg5MDY3OTMxNywzLjk1NzU0NDMwODc5NjU3NTNFLTQsMC4wMTgzNzk0NDY0NjExMjIzNzQsMC4xOTQxODQwMDQ2NDM0ODg2LDAuMTYzOTU0NjcxNTk4NTk4OCwwLjAxMzc3NzIwNjgzNjQ2NzM0LDAuMDE3MzA5NDg5NTQ4MTI1Nzc4LDEuMTA4MzY1MjQyMDk4OTkxN0UtNywwLjAwNjcwOTI2MzEwNTU0OTE5NywwLjA0MTAyNzU4ODU5MjQ3OTgxLDQzLjgzMTM3OTA4OTA5MDYyNSwxLjM1MDAwNzM4MTgxNjg0MzcsNC44MzMxMjQwMjg2MTIyNjJFLTYsMC4wMDM5NzU5ODg0NzY2OTUwODcsMC41MjAxOTIwNDQzNjMyOTExLDIuMTQwMDY0NDA3NDY1Mzc3NUUtNiw3LjQxMjkwOTA2OTA3NzEwMkUtNSwwLjAxMjM5Nzg3Njk0NTk3Njk1MywwLjgzNDE0Njg0Mjc4NzU3MTgsMC4zNTY1MTk5MjM1ODkzNzksMS43MzEzMzkxNzMxOTAxODY4RS02Cis0LEZyaSAyOCBKYW4gMTEsMC4wNTcxMDc1NjcwNzQ1NzE5NDQsMC4wMjY4MTUyNDQ5NjQ3NjIzNTIsMC4wMjcxMzU5NjEwNTkzMTM0ODUsMy42NTU3NzgzMjY2MzE3OTAzLDAuMDAxNDY5MTQyMzgyNTIwODAyNywyLjY0NTY4NjQwMjY0MDMzMiwwLjAwNDM5NTc2NDE2MDA2NTA4MiwwLjE4MzcyNDY5MTkzNjgxMzE4LDEuMjM4OTExMzY3ODY4ODQ2NCwxLjEzMTc3MTA5NTg4MzI0MTksMC4xMjYwNTk4ODg3NzkyNzczNSwwLjE4MjgxMTM5MTMwOTA0MjksMi4wOTY0Nzk3Mjg5MjU2MTRFLTYsMC4wNjcwOTMzMjEyNTY2NDUyNiwwLjM4ODY0MTM2NTUzMjY5NzQ2LDE5Mi4wOTQ5OTIxNTA4ODM5LDguODYwODQyNTk5MjgzNDEyLDcuMzEyNTgzNTM4Nzg0MDU3RS01LDAuMDQxMDcyNjIzODEwMTg4NTE2LDMuMzYwNTg5MjA1MzA5MTc2LDMuMjQyNjE3OTg1NzA0ODE3RS01LDAuMDAxMzE3NzY1MDExNTM4MzQxNSwwLjEyMjIxMjQ3OTkyOTEyNjIzLDUuNDg0OTUyNTIxNjAwNDQ0LDEuOTgyNzM2Nzg4NzAzMDY0NywyLjYyNTM1ODgwMjcyMDc5NDhFLTUKKzUsU2F0IDI5IEphbiAxMSwwLjM1NTA4NjkxMTI5NzQ5MTQsMC4xODIxMDk0NzgzNTEwNzE4OSwwLjIwMjg4ODY5OTM5MjkzNzI3LDE3LjAxNjczNTE0ODI2NDAzNiwwLjAxMjczNTIwMTA5MzkwNTgwMSwxNS4wNzU1MTU5ODI4Nzg2MzEsMC4wMzkwNzU4ODk0MzYyOTYyNiwxLjQ3ODM2MDgzNDI4NzE4Miw3LjMyOTQ4NjYzMjY0NjY1LDcuMTc4MjQ0MTQxMDQ0NDc4LDAuOTM0ODk0NDI2MjY5MTUxNCwxLjU0NTk1MjkzNTQ1Mjk0NjIsMi42NDI3NDg5MDkwOTU4MTlFLTUsMC41Mzk3MTgwNjU3NDk5MDI4LDMuMDY1NDYyNTUwOTA5MDc2Myw4NDIuNDAwNDkyOTQwMDkyNSw1My42NTM2MjgzODczMjg3Myw3LjQ4ODQ2MTA1Mjk5MTIyNUUtNCwwLjM0MTA2NDY5NTU3MTM4MDI1LDIwLjA0NzgxMzE3OTYxMjA2NCwzLjM1NDQ5OTQ5NDY5NDUwMDRFLTQsMC4wMTU2MjA5Nzg2NjUwNzU1MTMsMC45NzA4ODMyOTQ3NzU5Nzc2LDMzLjI3NTQ1MTgwMTg2MDI4NSwxMC4yODExNTYxMzgyNDk1NiwyLjY0NzUxNjMzMDAwOTg0NjZFLTQKKzYsU3VuIDMwIEphbiAxMSwyLjEwMzY1NzI2ODI0MTcxODcsMS4xMjkxODUwNzMzMDA2NDc3LDEuMzU0NTA0NjAwNTAzMDIyMSw3Ny4xODUzMzk5MzQxMzYxNCwwLjA5NzYwMjM5NDQ3MzgzOTk2LDgyLjA2Njk3MjQxMTU5MTgsMC4zMDczNDQyNDk2NTE4MTU2NywxMC41ODU2MTczMjgwODI1MTUsNDEuNTQ3MjAyMDY5NTAxMDEsNDMuMjg2MDAxOTA1OTg4NDIsNi4yMTU2OTg3MTkzMDg0MiwxMS41NzY0MDU2NTA4MTgxNCwyLjY5Nzg4MzY0NzI2ODY1NjVFLTQsMy44NjExNjY4MDAyNTAyODUsMjEuNzgzNjA4ODYzMDQ5MTYsMzY5OC40NjkxMDk2NTY1ODcsMzA5Ljc5MTIyNjAyOTg0ODEsMC4wMDYzMjc2NzYwMzE0OTczNDcsMi41MTYyMDkzMjY0MjU2MTc2LDExNC4xNDY0MTQ3NDI3NDExLDAuMDAyODc3NDUxNzM2NjMyMTA3NCwwLjE1MDI3NzU5ODA2OTA0NDE0LDYuODY5MTQyMzE0ODc5MzQ2LDE5Mi41MzM1NTE0NTM5MTM2Nyw1MS4zMDU4NzY2NDY5NDkyNSwwLjAwMjE3NjExMzY2NzExMTMwNDUKKzcsTW9uIDMxIEphbiAxMSwxMi4wNzQyNTY2NDk3MTk2ODMsNi42NDA4NTg1OTY5ODMzODEsOC40MzMxODY0MjE3MTU1MywzNDUuNDU1OTU1NTQxNzczNzMsMC42OTE1NzIzODIxNTIwNTg1LDQzMy45NTYxODA1Mjg2MDM3NCwyLjIzNTQ2MTc3ODQ2NDg4MzYsNzAuNDU3MjcxNTgwNDA3NzksMjI5LjM1MjU0MDE3NDgyNTA3LDI1Mi40MzUzODE4OTA3NTIxOCwzOC42ODkxNzQzMDA5MDY0MSw4MC4yMjk5Mjg3MDM5NDA1LDAuMDAyNDE3OTgwMjQ5ODMxODkyMywyNS42NjQxMDY5NjQzMjExMzUsMTQ0LjY3MjY5OTE0MDAxNzQxLDE2MjQwLjY3ODM1ODQzMDM4MywxNzMzLjYxNjM1OTU5Nzg3NywwLjA0Nzc1OTg4NDQ5NTU3MjgzLDE3LjIyNzY3MjY1MDMwODQ3Nyw2MzAuNTQxMzU5NzEyOTMxNCwwLjAyMjEzMDM1MjA4NzY0Njg4LDEuMjcyMTM0NjE2Mjg2NzQyOCw0NS4yMDA4NjY5NTM0NTk5NCwxMDgwLjExNTg5NDkzODUzNDcsMjUwLjM0NDkzNTg3NjQxMDcsMC4wMTU4NDQxMjk4MTM1NTEyMgorOCxUdWUgMSBGZWIgMTEsNjcuNzY3NjQwMTM2NzE2NDUsMzcuNzQxNzI2MDYwMjMwODUsNTAuMDk0MzMxNzg5NDAwNzU1LDE1MzEuOTU4MzQ2NTU3MDk3LDQuNjQwNTYyMDMyMTI5NTEyLDIyNDkuNzE3MjkxNzc2NDg5LDE1LjM5NzAzNzE1ODYwMzM0Nyw0NDYuMTQyMzU0MTE5Mjc3NiwxMjQ0LjAyMDM5MzQ3MDk2MDIsMTQzNy4zOTc1NjY1NjM2MjU2LDIzMC42MjQ5NjAxMzM0NTYxLDUyNi45NDY0MDY4NTg5NjgzLDAuMDE5ODMyOTI4NjAzNDMyMTgsMTYyLjIxNzI4NzAxNTkzMzA0LDkxNi4xOTU0MTI3NzQyMTMyLDcwOTc0LjQ2NDUyMzE0ODk3LDk0NzkuOTc5MjE4NTI2NjU0LDAuMzM0ODc3MjkzMDk2NTM3NjMsMTEyLjAzMDIxOTM5NDMyMzk0LDM0MDguNDU2Njg5NTQ2NjU4MywwLjE1ODYyNTkxMTU0OTIwNTAyLDkuODc2NTQ1MjcyNDg4OTA2LDI4My4wNTg5ODE5MDg3MzMzLDU5MjcuODAxMzAzOTI4Mjg4LDEyMDMuOTU1Mjk1Nzg3OTg4NSwwLjEwNjYwNDU3MTY1Mjk4OTI4Cis5LFdlZCAyIEZlYiAxMSwzNzMuNjgzOTUzNjk4Mzc1MiwyMDkuMDA4MzA4NjUxNjE0NjcsMjg3LjQxMzM1ODMzMzI2Nyw2Njc0LjE0NzkyODEyNjM1MSwyOS45MDkzNjc0MjkwNDMyMiwxMTQ4MS40ODc1NTcwNTM0NjYsMTAxLjg0NTIwNjMyNjc3Nzc0LDI3MjMuNTk4MTA4NTEzNzE2NCw2NjU2Ljg1NzI2ODc0Mzg0OCw4MDI5LjgzODU4Nzk2ODA2OSwxMzMyLjcwMDg1ODUxOTEwMDIsMzMyNS4xOTcwMDY4NzM4MTQsMC4xNTI0OTQ2NTYwNTI0Njk2NSw5ODguMzc5NDg4MzI1MzU3MSw1NTkzLjU5NTI4ODM0ODU3NywzMDE4ODQuNTU5NTkxNzMxMyw1MDYzNi45MTc2MzY5MjY1NiwyLjIyOTQ1NDE1NTk4NDg0MjQsNzAxLjE2NDk2ODAwNDY1ODcsMTgwNTguODY3ODQ0OTk1Mzk1LDEuMDgyNjYzMDM2NDUyMzg3Nyw3Mi4wMTc0MDEyNDc3NDkzNSwxNzA5LjQ1MzgwNzEyNTUyNywzMTkzMS42MTM5MjY0NjMxNSw1NzAyLjE4ODgzNjEzMjk0OCwwLjY3ODg3OTgyMzUyNTc2NTkKKzEwLFRodSAzIEZlYiAxMSwyMDIxLjY2MzMzMTA5MDEwNCwxMTI1Ljc0MjcxNjE4MDY1MjUsMTU5Ni4yMjg2OTk1Mzk0MTUyLDI3MjM5Ljk3MTAxNjA3MTg5NywxODYuNzU5NDc5NzEzNTc1OTgsNTc0MzUuNDU3NTE3MjgyOTY1LDY1Mi44NjA2MTE3NTAxMjY2LDE2MTQwLjA3Mzc3OTIxNjc1LDM1MDQyLjI3MTc4MDUzMzU0LDQzOTI5LjcxMTU5MjA0MjM1LDc0OTMuMjY0Mzg4Mjg3OTI1LDIwMzA2LjUzNzQ3NTA5ODIsMS4xMTY2MTc3NjYxNDcyMDM2LDU4NDkuOTkzOTQ0Mjc1ODIyLDMyOTQ5LjI3MjUzMTI0NjIyLDExNDE1NTEuMDQ5NTM4MTA2LDI1NzE0MC45MDYzNDY3MjIsMTQuMjc5NzM3MDcyOTExNzc3LDQyNTEuMzQyMjY4MTE2Mjc2NSw5MjIwOC40MDUxNjEyMzM5NCw3LjEyODI5NDI0MzE5MTEwNCw1MDAuNzg2Njg3NjcwNDcsMTAwMjYuNzg2ODE1Mjk5MzAxLDE2NzQ1My43ODMyMzUzNTY5LDI1OTU1LjEwMjc4MzM0MDk1LDQuMTUyOTA0NzYyOTczNzM3CisxMSxGcmkgNCBGZWIgMTEsMTA1MDYuMTQyNzUxMTA1OTU0LDU2NjUuMDM2OTUzNTA5MDE2LDgzNDkuMTM3NDU2MTMyNjM2LDg3ODk5LjcyMTIxMzQ2MTc3LDExMzEuNTgyMzQxOTM2ODU1OCwyNzI3NDcuMDE3MDE4ODA3Niw0MDcyLjQ1OTk3ODEzMDIzODYsOTIyMzUuMTc4NDQ3MjUxNzksMTc2NzY2LjY3MjYxMzc0NTE4LDIyOTQwMi4yNzkxNzQxMjM5NSw0MDE1OS4xODIwNjg1NTMxMiwxMTkyMTIuMTM4NjE0MTEzNiw3Ljg2Mjc1MTMxOTk3NjE2NSwzMzU4NS4yNDUwMTY0NTExOSwxODA4NjAuMTEzNTU2NTc3LDI5MDgyNzQuNDQ4NTAzOTk1MywxMDgyNzI0LjM5NDM2NzAwODUsODguNTEzNzMxODMwODA4MDMsMjQ4MjQuMzA0NDgwMzM4ODUsNDEzNjY5LjQwMTc5MjU2NjksNDUuNTUwMDcyMzMyMjQ3MSwzMzQ4LjE0MDg3ODg4NTYzMSw1Njg4My44MzEwMjEwNTI4MTQsODEwMzA3LjkzNzk0MTkwODUsMTAxODA5Ljc4NzU3MTA4NzEyLDI0LjUwNTU3NDA1NTM2OTg2NgorMTIsU2F0IDUgRmViIDExLDQ3Njg5LjUzMzAxODczOTg3LDIzMTg1LjQ5MjM3OTExNzE5LDM1NzM3LjI3ODc0MTA2MDgsMTYzMjAwLjc1NzI3NTQ0OTA1LDY1NTguNjkwMTUxNDAwOTEzLDEwOTE0MzguMzY4ODY2MjgwMiwyNDY0NS4wNjU2Nzg0NjA5Myw0Nzk3MzAuMTgyMDQyODUyNSw3NjYzODAuNzQ0MzMxNjQ1MSwxMDE1MTY4LjM1NTUxOTMxODgsMTgzODY1LjI5MDk4MTAxNDc4LDYzMzI2NS43MDcwODUyNTEsNTMuNzEzNTUzNjAxMTAzNjc2LDE4MTIwNS45MjQ1MDUwMzY4OCw3NzM4OTguMDY1NzA2MDI2MywzNTYyMzU5Ljc1MDU0OTY0LDI1MTYxMzIuODAyMzUxOTcxNiw1MjkuNTQ5MjgxNTk3MjczMSwxMzQ1ODQuMDYxMjcxNTAzOTUsMTE4Mzc5NS45NDEyMjEzNjM4LDI4Mi4zNTY4MDE3MjQ5MjksMjE1NjMuMzg2MjY4MTI5NTIsMjk4NTgxLjYwMzU3MDgzNTI2LDI5MTQ0NTEuMjM2MTc0ODEzNSwyNTQ4NTIuNDI3NDI5OTc0MjUsMTM3LjM5MzMyMDQ3MTEwMzQ0CisxMyxTdW4gNiBGZWIgMTEsMTM3NjQ3LjQ2ODQwNjQyODMsNjI3NzguMzM5MTI0MDI4ODksODMyODguNTcyODYyODk2MTgsMTYwNDQ4LjkxMzcyNzY3MjEsMzM3NzYuODgwNjk0NTMyNjgsMjYzNjE5MS4yNTA0NDIzNzk2LDE0MDQ1NC42OTU5NTc4NzA4LDE3NTE2NzAuMjQ2MzM0MDk3NiwyMDEzMzQwLjIwOTU4MjIzOTQsMjYwMDA4MS4xMTg2Nzc0MTM2LDUwMTY5MC4zOTk3OTAxMTU5NSwyMzE0NTMyLjM0NzMyODQzMzgsMzU2LjU5NDA5MjkzNjQ3NjQ0LDc4Mzk4NC45NDIzMTE5MDAxLDE2MDc3MTEuMTQxNzkyNTA0OCwyNjU2NjM3LjQwMzM1NDA4NCwyNDg4MDc4LjAxMjkwNTIyLDMwMTIuNzc5NTA0MjgwMzQzNiw2MTI0MTAuNzA5NzQ2OTM3NiwxNDQ1ODI4LjcwOTMzMTA0MTQsMTY4MS42MzYzNTE3NDgyMjk4LDEzMDU1Ni40NzU0MTI3NTg5OCwxMTc5MDY5Ljg1NzY2NzM3MDUsNDkyNzgzMS44OTM5NzUyNzcsMjk4MDE4LjkxMDYyMzg4NTYsNjY1LjI0OTUzNDg3ODg0MTEKKzE0LE1vbiA3IEZlYiAxMSwxNjkxODYuMTEwOTA1ODQ1OCwxMTExNTQuMDQ2NTA5MTI3MzcsODI0NjkuMDc4NTgyNjQ2NzMsMTE1MjgzLjI4Mzg0MzY4Nzg1LDEyMDUyNS43MTQ1ODU3MDU1MywyODMyMTA1LjYzMTg0MzYzMSw2OTE1OTYuMDM0NDI3MDM1LDI3MzY1NTYuMzA0ODg2MDU1NiwyMjM1MjUyLjMwMDg4NDc2LDI3NjYzODEuOTYyNzUwMTU3LDU3MjkyMy44NzE5NzkyMjIsMzUzMzU5NC41NTYxNTczNjEzLDIyNzguNDY5MzA4MTQwNTM0NCwxNzQ5MjUzLjY1MTE5Mjc4NzMsMTQzMzQyOS45MTIzMTg3MTU0LDE3OTMxNTQuNzU2MjgzNDAyNCwxNzMyNTQ5LjEzNTYyMjY5NjUsMTYxODMuMDAxNjUzMjMxNzg2LDE3NjE5NjQuMDUxMTM3NDc2LDEwNTI2MTMuNzQ4MTIzNjU4NCw5NTk5LjkxNTQwMjk2MDM5Miw2NjQ1NjguODUyMzI5NzAxOSwyMTY2NjMzLjA1Nzc4MTEwNDUsNDAxODU0Ni44MDk4MjI5NjQsMjE3MzQxLjkxODU5Njc0MDQzLDIyMDUuNzA3NTI3MDI1MjkzNQorMTUsVHVlIDggRmViIDExLDEyMzQ4My4xMTE2NjY2OTQ0NCwxMzAzNjcuMzc5NTM1MjY4MjYsNTc0NjAuNzI0MjAxODc2NjgsNzc3MDMuMzUxNDE3ODYwMjYsMTg5MjE5LjQxNzU1MjQ0NzI3LDIwMDk3MDAuNjU0Nzk2MDQyNSwyMjk3OTY4LjQ1NDU2NDk0MzQsMjEzMjk2Ni4yODc1NDMxOTk1LDE1ODk2OTIuMTQxMjkxOTc2MiwxOTQ4OTMzLjY2NzE5MzkwODcsNDEwNDk3LjY2MDU0MTQ0MTUsMjcyNjE4Mi44NzQ5OTgwMTQ0LDEzNjcyLjk1NDExOTk5MjEyNiwxNjQ2MTIzLjU0MDIzOTA4MjIsOTgxOTA2LjMxMTM5NjkzOTEsMTIwMjQzMS4wODM0NDQ2NDY4LDExNjMxNTkuMjc5MTk3MTQzMiw4MTA4My43MTI2NDE4NTA3NSwyMTc1MDQ0LjcyMDAxMjg1MSw3MDgzMjMuNDY1NDIxNjk4Niw1MjUxOC4wMzQ5MjEwMTY0NSwxOTkyOTg0LjIwNTk5MDk3NTcsMTgxNjczNC4yNzc2NjIyNTM3LDI3MjgxNDEuMzQzMzYzMDk5NywxNDYzMjQuOTYwMjQ0MTkxLDM3NTIuMTMxODY5NzExMDY0CisxNixXZWQgOSBGZWIgMTEsODMxMTguNDEyNDgzMTEwMjgsMTA1ODMwLjc0MTU4NTY0NDI1LDM4NTc3Ljc5MzIwMDMzNjkzNSw1MjEwNS44NDgxNjMwMjEzMiwxNDg1MzEuOTQxNTE0ODgzMywxMzUwNTM1LjAxMTAyODYsMzMwNjU0MS40NDQ3NDAyMzg2LDE0NDE4MjcuNDU3ODQ0OTAwNywxMDY4Mjg2Ljk0OTczMDg0MTQsMTMwOTA1OS4xOTUwNjcyNjU4LDI3NTk3OS4yNDY4NTU0NTczLDE4NDEzMDQuNjg2OTgxMjg1Nyw3MjkzMi4zMTY2MDA4OTMwMywxMTM1ODYwLjg1MTA0NTQwNDYsNjU4NzE5LjI5NTQ4MTAwNTksODA2MTkzLjE4NzM0NzU5MTksNzc5ODQwLjU3NTQ2Njc1MjgsMzMyMDM0LjAxNjI2MjMwMzUsMTU4OTM2NS4wMjE1MDE2MDU2LDQ3NDkxNy4zMzE0Nzg1NzY2NCwyNjQ4NzEuOTk3ODE5MzA0NSwyMzg3MDgyLjQ5OTk1MTk2MiwxMjM2MjM4LjY1MzgwNDQzNTksMTgyOTYzOS42MTY4MTUxNzU2LDk4MTEwLjQ5ODQ2NDk1MDA4LDMyNzMuMjk4NTY4OTQ1OTM1NgorMTcsVGh1IDEwIEZlYiAxMSw1NTczMC4wMzY0OTE4MjE0NTUsNzMzOTMuMTkzNzc1MDE4MzQsMjU4NjQuNDk3NDI0NzEwNDQ0LDM0OTM2LjY2MzM5OTA5MzU4LDEwMDQ3MS42NDg5MDg4ODkyNiw5MDU0ODQuNjYyOTMyMTQxNSwyNTE3Mzc1LjM0OTI3MDgxMSw5NjY4MzEuMjUwMjEwMTUyNyw3MTYyNDMuNjM5ODQwOTc4LDg3NzY2Mi43MTk5MzMxNDQ2LDE4NTAzNC44OTM2ODc1MDI4MywxMjM0NjczLjc5MzAwMjc4NTQsMzAyODY0LjE4MDgxNTM1NTg1LDc2MjIxOS43NTc2Mjg4OTkyLDQ0MTYzMy43ODA0NjUxNzkyLDU0MDU4Ny4xMzA3NzE1NzMyLDUyMjg3MC4wMjA3NDAxNTQ5Niw3Mjc2NTIuNTYxMTg1MjMzOSwxMDY5ODEyLjA5MDY4MzA4LDMxODQxNS43MjkwNTQxMTQzLDEwNTM2OTguNzQyMTIxODc1LDE3MjEwMjQuNTk3MDE5NjQ4Niw4MjkxNDcuMDYzMDMyOTAzLDEyMjY2NzkuNTExMzEwMDk2NCw2NTc4MC4yMTY5NTY3ODY2NywyMjQ5Ljk1MTI1OTE5NzY1NjMKKzE4LEZyaSAxMSBGZWIgMTEsMzczNjUuMDYzNDA1NTk5MDQ1LDQ5Mzc5Ljk5NTEyOTkyNTU1NSwxNzM0MS43MDIyMDkwODI2MjUsMjM0MjcuNzgzNTkzNTAxNzE3LDY3MzczLjcyMzc2MzczNjI2LDYwNzEwNi40MTkxNzE2NjIzLDE2OTg4NDkuNjM1ODA5OTg2Miw2NDgyMTIuOTk0NTI1MDY3Niw0ODAyMjEuODIzOTY1NjE4MSw1ODg0NTEuNjI4ODU5MDI1NSwxMjQwNjAuMzY2NjkxOTU4NDgsODI3Nzg5LjM3MjkyNzg2NSw2NTkwOTEuNDE3MjA3NTc5NSw1MTEwMjUuNjk1OTg0NTYyMywyOTYxMTIuNTQwNDg0NDAyNDUsMzYyNTQ4LjYzODIzMDU4NDMsMzUwNjIwLjQyMzA3OTA4OTQsNjg1MTEyLjQ0MTY5MTgyMTksNzE3Mjk0LjQxOTkyNTgwMjMsMjEzNTEwLjk1ODAzMDk5Nzc1LDIxMzU5MjIuMDAyNDU4OTYsMTE1NzMyOC42MTQ4MjkzMTcyLDU1NTg5Ny44NjU4MjAwOTYzLDgyMjUwMC4yOTczMTIzNTIyLDQ0MTA4LjgxNzU5MzY5MzU4LDE1MDkuNzkzNjI4NTU4OTk2MworMTksU2F0IDEyIEZlYiAxMSwyNTA1NC44MDM2ODM1MTc1MjMsMzMxMTYuMzUwOTQ0NjU1NTIsMTE2MjguNzk4NzYxNTE1MDc4LDE1NzEzLjIzNjM4Njk5OTE1NSw0NTE3MC43ODA2MDA4MDI4OSw0MDcxMDAuNTYyOTQ1NDMzMiwxMTM5MTI4LjYzNTE3Njk0MzQsNDM0NjM3LjY0NDcyNzM3Mzk2LDMyMjAxNC4xNzk2MTUxNzA3LDM5NDU5MC44ODI4NDIyODU4LDgzMTg4LjUzMTY3MTU0OTQ4LDU1NTA0OC4yMjM1ODQ4MzQ4LDYxNjA2Ni4zMzE2Mjk5MDg4LDM0MjYzNi4yNzg2OTEwMTU3MywxOTg1NjguNDk1NTQzMTg3NzIsMjQzMjA2LjEyODM2NjE0NDQzLDIzNTE1OS40NDI0MzExMDY4NCw0NzI5NDQuODQ3NDYxNDYzOTQsNDgwOTIwLjcxNjA3NDMyNDgsMTQzMTkyLjIyNTc1MjYzNjEsMTkwNzk3Mi40NjM1MjgxODYsNzc1OTUxLjAyNzE2MTMyMTYsMzcyNzMxLjE0MzgxNTgyMjk2LDU1MTU3NS41NDk3NDUzNTI5LDI5NTgyLjI1MDIyNjIxMTgxNCwxMDEyLjI1MDE3NTE4OTI2MzEKKzIwLFN1biAxMyBGZWIgMTEsMTY4MDMuMTEzOTE3NzEwNzQ3LDIyMjA2LjU0NDUzMzg0Mjg2NSw3Nzk5LjM3MDk4ODM0MDA1NywxMDU0Mi4wMDYyODk1MTk0NCwzMDI4Ny43MzU0MTM1NDI4NTgsMjczMDM0LjM4NjIwMzQ5MzEsNzYzNzM0Ljg0NDg0NjI1NjEsMjkxNDc2LjIyNTc0MTg2MDE3LDIxNTk2NS44Njg0Nzg5OTk4OCwyNjQ2NDMuODM4MTQyMTc2NCw1NTc5MS43MDYyMDU0OTA4NiwzNzIyMjcuNDI3Njc3ODk0MSw0MjQ4MTAuNTk1MDIyMzkzMDQsMjI5NzYzLjQ5ODMxODA2ODk3LDEzMzE4My40MTk1NTIzODQ4MiwxNjMyMDYuNjkyNTA1NzkxNzgsMTU3NzYzLjI5NDgxMjcwOTI0LDMxNzM3Ni43ODkzMjIwNzE2NSwzMjI0NzYuNjY4MjU2NTc1Niw5NjA1Ni4yMjQyNjU0OTE4NywxMzA3ODcwLjQ2MDk0MjAyNzYsNTIwMjQ4LjUzODE2MzczNDgzLDI0OTk1Mi45OTMxNTc1MzMwOCwzNjk5NzAuNTc1OTY4NTIyLDE5ODQ0LjgwNTI5MDYwOTk4NCw2NzguNzE3ODQwMjgxMDA2NworMjEsTW9uIDE0IEZlYiAxMSwxMTI3MS44NDk1MjI0NjUxODcsMTQ4OTMuMjUyMzEyNDQ3MTEyLDUyMzIuNDE3NzkxNTM4MTM2LDcwNzUuNTIyNjgwODM1MTQ2LDIwMzExLjUwMDczMTgyMjM4MywxODMxNjYuOTYwOTUwNzQ1Myw1MTIxMDIuNzQ2MjI2ODQxOTMsMTk1NTEyLjgwNjAxODA5ODI2LDE0NDg3OS40NzQwNzA3OTk0LDE3NzUzNy41MjcxOTIzOTg4MiwzNzQyNy4wNTk1NDkxOTAyNCwyNDk2NzkuNjM0NjA1Njk4MTcsMjg1MDYyLjI4NTY3NTIxNDM3LDE1NDEwMy40NDk2MDA5ODQsODkzNTQuMTI5MzgxNTEwNCwxMDk1NzcuOTcxMjY1NjYxNzMsMTA1ODgxLjMzMjU3NDc3NjA3LDIxMjc4My42ODE0Njg0NTAyMywyMTYyNzAuMDI5MDU2MTM2Myw2NDQ1OS4yNDg2NjE4NTE5NTQsODc3NDIzLjQyNDM0NDMwMTYsMzQ4ODQ4LjYwMzAxMjE2ODI2LDE2NzY1My4wMjIwNjUyMDkzNCwyNDgyMzUuNTA1MjQ1ODY0OTcsMTMzMTcuNDM1MTQyNzU3Nzc5LDQ1NS4xNDgwNzQzMzc5MzMyCisyMixUdWUgMTUgRmViIDExLDc1NjQuMDQ1NDg5ODcyMjIxLDk5OTEuMDA2MjgxMzA4NzcyLDM1MTEuNjc5MTkzMTM3NTc4Nyw0NzUxLjY4OTc0NjczOTA1NywxMzYyNC4yNzAyMDA0NjIzMDIsMTIyOTI1LjI0MDM4NDMyOTA1LDM0MzQzMS40NTUyMTk4NjgyLDEzMTE4NS41NzE4MDM5NDU4Miw5NzIyNy40OTEzMjIyMjg0OCwxMTkxNDYuNjQ1MDYyMzEyNzUsMjUxMTYuNTQzNjQyODA5NTI3LDE2NzUzMi4wMTY3NzI2OTg2NCwxOTExMTguNDUyMjczODMwNCwxMDMzODYuNjg5MjE1NDQxMjgsNTk5NzMuMjY3OTQ5NDgwNTksNzM2MjQuNTQ4MDU5NjYwMjMsNzExMDAuODAxMTQ0NzgxNzMsMTQyNjY4Ljk0MjM3ODE4MDA0LDE0NTA3Ny42OTgwOTA1MjY4LDQzMjc3LjY5MjkxODI2MTIzLDU4ODI2My42NjE4NTIwMjgsMjMzOTU3LjQ3NjE3MTkxODcsMTEyNDg1LjA3NzAyNDAxOTMyLDE2NjYyOS45NjczMDQ2MTQ3Miw4OTQxLjcwMDkyMDYwODAxMSwzMDUuMjg2MTYxNzY4NjIzMworMjMsV2VkIDE2IEZlYiAxMSw1MDc4LjQ2MTg0Mjc3OTgzMDUsNjcwNC44ODU1MzY2NTgyODUsMjM1OC4xMzM5NzAxMDk3NjA0LDMxOTMuNzI1OTIzMjUwMTM1Niw5MTQxLjYxNDg1OTc0ODc1OSw4MjU0MC44MjEyMzE3MzUzLDIzMDM2OC4yMDM1Mzk5NDkyLDg4MDYzLjM2NDk4ODEwMDczLDY1MjgyLjk2NTc0MDMzODk4LDgwMDAyLjkyNDIzNzI2Mzc0LDE2ODYzLjk1MjYxMDMzODIzLDExMjQ2My43MjEwNTUyMjYyNywxMjgxNDIuNzY3NDI0MjEzOTMsNjkzODguOTUyMDI0MDEyNCw0MDI3Ni43Mzg0OTUzMTQzNSw0OTUxNy44MTMzMDQwNjExNiw0Nzc4Mi41ODcyNzMwMTYwOCw5NTY3MC40NjM0NTQ0Mjg4Niw5NzM1NC45MjEyNTY4NTQ4NywyOTA3Ny4xNzU3NDEyNjU3OSwzOTQ0MjcuNTgyMjcxNDY0MywxNTY5NDMuNzA3OTIwOTUwODQsNzU1MDMuMTcwODk4OTIxMDIsMTExOTIxLjg4OTc0Mzc3MTgxLDYwMDguMTIwODE1NjM4NjQ2NSwyMDQuODI5Nzc5ODM3Mzc1OTUKKzI0LFRodSAxNyBGZWIgMTEsMzQxMi4wODM4OTk2NDY4Myw0NTAyLjAyNjYzNTM5OTA0OSwxNTg0Ljc1MjYwMTMwMzA1MzgsMjE0OS4wNjU1MDA3NTQ3Myw2MTM2LjYzNzI0MzM4MjU4Myw1NTQ2NS44NjgxNTY4NjUxLDE1NDU3OC4yMzQzMDMwMTgzNyw1OTE1NC4xMjM5MDYyODEyNDYsNDM4NjYuNDYzOTc2NzM5MzQ2LDUzNzU5LjcyNjQyMTcwMjY2LDExMzMxLjIxMTg2MjQyNDQzLDc1NTQ1LjcwNTI2NzY1NTcsODU5MjkuNjU3MDA5NzUyMjUsNDY1OTcuNDc0MzkzNjY4NTgsMjcwNzEuMTQyODYwNzg2OTgsMzMzNTAuNzk4MzIzNDg3MTYsMzIxNDYuNzczOTYyMzI5NjYsNjQxNjYuNzg3MzY4OTAyNjgsNjUzNjMuMTkzNjEyNTkyOTMsMTk1NTUuNjE0NzAxMDg3NzE4LDI2NDQ5Ny42OTM2ODgxMjE4NiwxMDUzMTguNTM0NjI5NjAwOTIsNTA3MTAuNzY0OTYyMjk1OTM2LDc1MjQxLjc0NzY0MjExODc2LDQwNDEuMTE5NDM2NTc1NDkzLDEzNy40ODg5MDY1NTQxNjAyCisyNSxGcmkgMTggRmViIDExLDIyOTQuNzY5Nzg3MjYwMTE1LDMwMjUuMjQ2MDI0MTE2Njk4NywxMDY2LjE2OTExMjk2NzIzOTUsMTQ0OC40MjA2MDUyNjA5MzA2LDQxMjIuMDk0NjcyODQxMjk1NSwzNzMxMS4zNzkxMzE3NTIyOSwxMDM3NzEuNjgwMzA5MTM0MzUsMzk3NzEuMDU1MTUxNjkyNDksMjk1MDYuMjIxNDIyMjM1NDg1LDM2MTYyLjkwMzMxMTM5OTczNiw3NjIxLjQxNTk4OTEzMjI4LDUwNzkyLjgxODE4OTQ0NTEwNSw1NzYzMy42NzA5MDc0NDcxNDQsMzEzMTcuMDI5MDc5MDc2NDI3LDE4MjE1Ljk0OTA5Mzk2NjY4NywyMjUwNC43NzQ0NzE4MDQ3OTgsMjE2NTkuNzE0NzQ4MDkyNjUsNDMwNDkuMTA3OTkwNDI2MDUsNDM5MTUuMzYyNjcyODE0NzM2LDEzMTY5LjkzODU2NDY4MzUzOCwxNzc0MDMuOTQ1MDI1ODM1Myw3MDcxMC42ODYzODM3ODQyLDM0MDg4LjM1ODY5NDQ0MzAzLDUwNjQ0LjMxNjQ1NDUxODk0LDI3MjEuOTI3NDg1OTEyNDUwMyw5Mi4zNDQzMDg1NDA5Nzc2MQorMjYsU2F0IDE5IEZlYiAxMSwxNTQ1LjQ0NDE0NjI0MjU2OSwyMDM1LjExODUyMjMxNjM3NjgsNzE4LjM1MTU1MTg3OTc0MDMsOTc4LjMyMDgzMTk0NjM3LDI3NzEuMzg2NTcyMzQ5MzAwNCwyNTEzNS40Mjk2NDg2MDM0NDQsNjk3MTAuNTg2MzUzMTM2NSwyNjc3Mi42MDg1OTkyOTQ5LDE5ODc1LjEzMzA4NTczNzUzNiwyNDM2MC45MjUyNjcyNzc1MjYsNTEzMy4zNzM3NjQxMjMzOTEsMzQxOTMuMjI0MzM3OTkwODEsMzg2NjYuMTc5ODM5MTc3NzQsMjEwNzAuNzAwNzE0ODYwNTY2LDEyMjc2LjM4MDE2NzU4MTc3MiwxNTIyNC41MzYzMDQ4OTczMywxNDYyMy4xNzU3ODc0OTQ2NDIsMjg4OTIuOTY5MDgzMzU2MDQ1LDI5NTM0LjQ2MzcwNzQxOTY5LDg4ODUuODU4NjI3MjQyNTUsMTE5MDIyLjc2NjQ1NzQ2NzM0LDQ3NTA4Ljg2MzAyMzc1MDIsMjI5NDEuNjgxNDU0MzgzNDg0LDM0MTQ0LjU4OTQ0NjY4MTQsMTgzNi44ODA3MDE4NDMxNTQ2LDYyLjA3Njc3MDE4NTgwMjc2CisyNyxTdW4gMjAgRmViIDExLDEwNDIuNzM1Njk2NjgyODA3NywxMzcxLjE1NjMyMTgxMDg5NjMsNDg0Ljk3NTY2NTI3MTk4Nzc0LDY2Mi43MTQ0MzY2OTMxOTM2LDE4NjUuNTkzMDE2OTYzMTc3LDE2OTY2LjEyNTQwOTQ3MTYyLDQ2ODczLjAyMjM0OTU1MTgsMTgwNTMuMDUzNzA5NTkzNTQ3LDEzNDEzLjQwMDkwNzIxMTI1MSwxNjQ0Mi40ODgwMTE3NTE2OCwzNDY0LjEyMjQ4NTgxNDQ1MjQsMjMwNTcuODU4MDk2Nzc3NTUyLDI1OTUxLjQwNDY5MTIwOTA2NywxNDE5OC4yMzQ1NDMzMjI5MDIsODI5MC43NTQwMTU4ODEzMzIsMTAzMzMuNzYyNzcyNjU1MTc1LDk4OTguOTQ1OTc2MDU1NjMsMTk0MDIuOTQyMDMyMzc3NTUyLDE5ODg5LjkwMDY1MjYxMTk0NSw2MDEwLjE0ODQ5OTMwMDc1Niw3OTg4Ny4wNjU4NzgwOTMzLDMxOTUxLjc5NTgyOTM1MjEzLDE1NDY0Ljc5NjU4Nzg4NTA1LDIzMDcxLjU3NzM1NTYyNjQ5LDEyNDIuNzcyOTg3NjYzMzY2Niw0MS43ODAyMzE0OTAyMzczMzQKKzI4LE1vbiAyMSBGZWIgMTEsNzA1LjI5NTE5ODYyMzkzOTQsOTI1Ljc3ODUwNjEzNjY2LDMyOC4yOTA4NzQyNTk1NjQ1Myw0NTAuNjI4ODc2ODQ1OTE2NDcsMTI1Ny45NzUxODExNjc2MzE1LDExNDgxLjgwNjcwNTgyODg4NywzMTU1Ny42NDk1ODMzMTg1NCwxMjIwMS4wMDQ3NzI2MzM3OTMsOTA3NS41NzE3MTAxMDE1MSwxMTEyNi41NTM2Nzk5MDQ4NywyMzQzLjU3MzQxNjQyNDg0OSwxNTU4NC4zNDg4Nzc2NDgwMjMsMTc0MjcuNjM2NjgxNTU5MzU0LDk1ODYuODExMDI1NTk0MjIzLDU2MTQuNTI2ODEwMzI3MTIxLDcwNDQuMTcwNTc2ODM3OTExLDY3MjQuMjMxMzg1OTkxNTIxLDEzMDQwLjM5MDg5NzQ3Nzc5OSwxMzQxOS41MTc0NjU2Mjc2ODksNDA3OC4yMTM2ODMyODI4MzgsNTM2NTEuMDA3OTUzODUxODI2LDIxNTE4LjMyMDE1MjgwMjM3LDEwNDQ3LjI1MDA3NjIxMzU1NSwxNTYzNS4xNDM5MzQ3MTUyOSw4NDMuNjI1NTg4OTA5MDk0MSwyOC4xNjYxNDg2MzEzOTA4NDMKKzI5LFR1ZSAyMiBGZWIgMTEsNDc4LjYwMzQxODAyNDM5NzQsNjI2Ljg3ODA1MjU2NDQ4NzEsMjIyLjk5ODE2OTcwNjIyOTk2LDMwNy45MTEyOTQ3Njg2NTcxLDg1MC4xODAzOTcxNDU3OTMyLDc3OTYuNzQzNDg5MTk3Nzk4LDIxMjgzLjUyMjYyMjcwMTk0LDgyNzAuNTQ5MzczMDMzOTMxLDYxNjEuMDE2MjUzOTgyMTIsNzU1NC42MTI5ODE4MzAwODQsMTU5MC43MjIzNzY0NjY5NTQ1LDEwNTY0Ljc1MDM2NTk5MTIwOSwxMTcxMi45MDM0NTc2NjM3MjgsNjQ5MC41ODg2Nzg1OTI0MzYsMzgxNS43NTk0MzM3MjMwMTUzLDQ4MjcuNjUyMDA5NDE2Njk5LDQ1ODcuOTE1MDMyOTE3MjQ4LDg3NzMuOTY2MDM3ODY5MDA4LDkwNzYuMjg2ODE3NzA4NDMxLDI3NzguNzM0NDczMDcyMjU3NSwzNjA2MC45NTIyMTUwNDY4ODQsMTQ1MTguNTU1NDM2NDY1NDYsNzA3Ny43NzgzMTIzOTMyNjgsMTA2MzUuNjY3MTgxNDIzNzg3LDU3NS4xMjY3NzIwNTQxMTg1LDE5LjAzMDM1NDE5MjYwOTk2CiszMCxXZWQgMjMgRmViIDExLDMyNi4xMjcwOTgzOTQ1MzcyLDQyNi4xMjU3MTI2NDI2ODU2LDE1Mi4xNDU2MDg2MDE5MTE4LDIxMS42ODE0MzIwOTY4ODg5NSw1NzYuMjkyMTU5NjM5MTY3Miw1MzE3LjQyNzkzNjA2NTIxMiwxNDM4Ny43Nzk4NzUxMjAzODYsNTYyNy44MTA0NDUzOTUwMzEsNDIwMC4yNTU1NDY4MDkxNDIsNTE1MS40MDA0MDE2ODkwODksMTA4NC4yODA1NDk1OTgyNjcsNzE4OS41OTM3MzQ1MDQ4MzQsNzg4MC44NjcyNzAxMzk4NDMsNDQwOS43MzU5OTA0ODMyNTgsMjYwNS4wMzQ1NTc2MjAxNjMsMzMzMC40ODA5MzYzOTY5ODI1LDMxNDcuNTg4OTgxNzYwNTExNiw1OTEyLjM2MjUwMjI0OTQ0Miw2MTU4LjUwMzI5NTYzNDcxNiwxOTAzLjEzNzg2NTczNDM2MDcsMjQyNjUuNjgwMjA2MDY5NDAzLDk4MTkuODY5Mjg2MzI1OCw0ODEyLjcyMjAwMjQ5MDI2Miw3MjY5LjM4MTE5NjY1NTc2OCwzOTQuMTkwMDYzMDA4MzAwMDYsMTIuODk1NTY1MDYwNTMyMDY2CiszMSxUaHUgMjQgRmViIDExLDIyMy4zOTAwMzMwMTM1NTQyNywyOTEuMTMwNjc3NDkwMTg1MDYsMTA0LjM3NjY1MDI1Njc1NTAxLDE0Ni42MTQyMDkwMTE1ODk4MiwzOTIuMTM4Mjc4NjUxNzY0MSwzNjQ2LjIzOTE0NDgyODM3LDk3NTUuOTcyNDEzNzY1NDgxLDM4NDguMDg2MjE1NzQ3MDI4MywyODc4Ljc1ODc3NjY1NTM0NDcsMzUzMS41MjAyMDEyMjM0NzQ1LDc0Mi45ODc3Mjc1MDc5NTM5LDQ5MTYuNTMxNTIwNTMyMDQ3LDUzMTAuNjExOTAxODA4ODI3NSwzMDA5LjMzOTExMDEzMDEyNDUsMTc4OC40NzE5MzY5MTIyMSwyMzE1Ljc5NzI0NzcyMzI4NDMsMjE3My45MjY1NTQxNzA2MDgsMzk5Mi4yMTk2NDcxMDM1OTI3LDQxOTUuOTU1MTU4NTc1MTA1LDEzMTEuNzIxMzc3NDIyMTU0MywxNjM1NC4wNDgxODUwNTQ5MzMsNjY2My4xODgxNDg2Njk3ODUsMzI4Ny44MTQ3MjM3MTgwMTI0LDQ5OTcuODcxODQyMTA3NjI5LDI3MS45NTUyNjE1NzUxNDU0Nyw4Ljc3MTc2MDMxNjEyNDc3CiszMixGcmkgMjUgRmViIDExLDE1My45OTgxMzgxNTA0NjIsMjAwLjE4OTgwMzIzNjM4NzUyLDcyLjA4NTMyMDIzNDI2MjY4LDEwMi40NDk2MzIyNDY2ODgzNywyNjguMTIzMjM5Njg1MDkwMywyNTE2Ljg2NTQwMjM0NDc1NjYsNjY0MS4yOTI5MTg1MzkyMzcsMjY0Ni44OTIxODQzOTg1MywxOTg1Ljg2MTIxMzI4MDk1MDYsMjQzNi44NDc5MzI4NzczNjY1LDUxMi40MTcxMjU0NDY2MDA0LDMzODIuMjc2OTA4MTE0NDkyNSwzNTg1Ljk1NjM3NzUyMDY5MTYsMjA2NS4wMzYzNzQxNDE0MzUzLDEyMzYuMjI2NjkwOTEzOTk1OCwxNjI1LjA1MzIwNDUzNzMxMjcsMTUxMy4zODI4NDQ2MzAxOTk1LDI3MDIuOTgwMzkyNzkzNjM2LDI4NzMuNjE2NzI2MjU2NDI2LDkxMC45Mzk3MTgwNDYyODE5LDExMDQ1LjA4MDIwNzIwMzQwOCw0NTM5Ljg2MzMyODU3MDM3NywyMjU5LjA0Mzg0MzI1NjI5MiwzNDYwLjU3NjM0MDgxOTQ2MiwxODkuMDk4MDAwODkyNDMzMSw1Ljk5NTU5MDg5MDAyMTk0CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1BvcHVsYXRpb25Hcm93dGhTRUlSX1JLX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9JXzAuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Qb3B1bGF0aW9uR3Jvd3RoU0VJUl9SS19SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vSV8wLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYzI0NDAxCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Qb3B1bGF0aW9uR3Jvd3RoU0VJUl9SS19SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vSV8wLmNzdgpAQCAtMCwwICsxIEBACitpdGVyYXRpb24sdGltZSwKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvUG9wdWxhdGlvbkdyb3d0aFNFSVJfUktfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL0lfMS5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1BvcHVsYXRpb25Hcm93dGhTRUlSX1JLX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9JXzEuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJjMjQ0MDEKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1BvcHVsYXRpb25Hcm93dGhTRUlSX1JLX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9JXzEuY3N2CkBAIC0wLDAgKzEgQEAKK2l0ZXJhdGlvbix0aW1lLApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Qb3B1bGF0aW9uR3Jvd3RoU0VJUl9SS19SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vSV8yLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvUG9wdWxhdGlvbkdyb3d0aFNFSVJfUktfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL0lfMi5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZThiMjFlYQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvUG9wdWxhdGlvbkdyb3d0aFNFSVJfUktfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL0lfMi5jc3YKQEAgLTAsMCArMSwzMyBAQAoraXRlcmF0aW9uLHRpbWUsRUctRlJHLUcyMTAwMDEsRUctRlJHLUcyMTAwMDIsRUctRlJHLUcyMTAwMDMsRUctRlJHLUcyMTAwMDQsRUctRlJHLUcyMTAwMDUsRUctTE9FLUcyNDAwMDEsRUctTE9FLUcyNDAwMDIsRUctTE9FLUcyNDAwMDMsRUctTE9FLUcyNDAwMDQsRUctTE9FLUcyNDAwMDUsRUctTE9FLUcyNDAwMDYsRUctTE9FLUcyNDAwMDcsRUctTE9FLUcyNDAwMDgsRUctTE9FLUcyNDAwMDksRUctVVBFLUcyOTAwMDEsRUctVVBFLUcyOTAwMDIsRUctVVBFLUcyOTAwMDMsRUctVVBFLUcyOTAwMDQsRUctVVBFLUcyOTAwMDUsRUctVVBFLUcyOTAwMDYsRUctVVBFLUcyOTAwMDcsRUctVVBFLUcyOTAwMDgsRUctVVJHLUczMDAwMDEsRUctVVJHLUczMDAwMDIsRUctVVJHLUczMDAwMDMsRUctVVJHLUczMDAwMDQKKzEsVHVlIDI1IEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwxLjAwNzMzMTczMTg4MzUzMjYsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyLFdlZCAyNiBKYW4gMTEsMS40MzkxNTk3NTUxNzM4MjFFLTQsMi4wNTc5NTgyNTIzMDgwNTY4RS01LDEuNTYyMzU0NzE2NTg3MzAzNUUtNSwwLjAyMDE2NTY0NjM2MzMwNjc0OCw2LjAxNTMzNzI5NDYwMjc2MkUtNywwLjAwODI1NzQ2Mjk3MTc3NjMzMSwxLjcxODQ1NzE2MzA3MDM4ODNFLTYsOS4wMDMxNDMzMzMxMDM1OThFLTUsMC4wMDM1OTIwNzExNTIyMzAyOTY2LDAuMDAyNjkzNDUwMTg3NzExMDY5NCw3LjQ2OTg1NzIxMjYyOTQyNUUtNSw3Ljk0MTE4MDcwMTc2MTM4NEUtNSwxLjE4MTA3ODQzNTAzMDc1OTRFLTEwLDMuMjgyMjk2NTc4MDQxNDY4RS01LDIuOTgyNDc5Njg5MzIzODQ4RS00LDIuMzE1Njc1OTYwMTMxMjkxNSwwLjAyMzg3MjQ0MjQzMDkwMzIyLDYuNzM4MjIyODc5OTYwNDU0RS05LDEuODc3MzQ2MzA4OTEyMTYxNkUtNSwwLjAwOTQwMzkwOTA1NjU5MDQwNCwzLjE2MjA5ODk2NTQxMTMzMDRFLTksOC40MTcwNDc3MTUxMzk3MDRFLTgsNi4xNzUxMjg5NTQzMzI1NjVFLTUsMC4wMTQ3MTQ2MDI1MjY5MTQ5MTEsMC4wMDc5NTY5MjQ3NzE2NTY3LDIuMjcwMTE1NDkyNTUxODM5OEUtOQorMyxUaHUgMjcgSmFuIDExLDAuMDAxNDIzMzk0MTA1NDAwMzU2OCw0LjY1NjE2MDE0NjczMDczMjdFLTQsMy45ODM2OTI2ODk0NDc4NzdFLTQsMC4xNDUxMTIxODAzOTk1OTM4NCwxLjc1MzMxMDQ2NDgzNDYxMUUtNSwwLjA3NDk4MDAyNzIxMzI4Mzc4LDUuMDkxOTk4MzIzNzkxNzQxRS01LDAuMDAyNDQxNDIxNDQxNjkxODkzLDAuMDMzNDkzODYzOTg4NTYwNDA2LDAuMDI3MzAyMjIyNDA4MjM4ODc0LDAuMDAxODgxMjk4OTI1NzgxMDg5NCwwLjAwMjI1OTk2ODcyNjAxODQ5NSwxLjE0MDgwNDA2OTYzNzI4MzFFLTgsOC45MDk1NzQxNDk5MTA0ODNFLTQsMC4wMDU3MjA3ODQxNjI5NDAwMzEsOS44ODYyOTc3ODg3NTg3OTQsMC4yMjk3NjI4MTU5MjYyNDI3Myw1LjI1NDg5MDU2MTE1MjQ2NkUtNyw1LjIyOTU0MTI5NzAxNjAxN0UtNCwwLjA4OTEzMDkzMjIwMzU3MzM5LDIuMzM2MTAwNDE0Njc5MzI0N0UtNyw3LjczODA3MDMzMDcwNTA1OUUtNiwwLjAwMTY1NDE0NTI1Njc1MDUxOSwwLjE0MTg2MjMwMzk0Nzg0NzE4LDAuMDY1MjU0NzMzMzk3ODcwNTEsMS44NzE5NDk2NDg5NDY1NjRFLTcKKzQsRnJpIDI4IEphbiAxMSwwLjAxMDMzNDc1MTYyNTEwNjA5NSwwLjAwNDQ4OTY1MDcxODI4OTQyMiwwLjAwNDMzODA2Njc5ODYxODMyNzUsMC43Njc5MTQwOTY5MTQwMzU4LDIuMjE2ODA5NDI5MjU4NDM3RS00LDAuNDk4NTEwNzQ4NTA2ODc3NSw2LjU3NjM4ODMyMzE0NTUwM0UtNCwwLjAyODU0ODM5NDk1ODU5MDYyLDAuMjI5ODE4NjIxMDA1OTg3OCwwLjIwMjgyODM3MTc5MzY0NjMsMC4wMjAyNDA0OTM0NDM5MTk5MDYsMC4wMjc4NDk3MDg4MDAzODY2MjIsMi42NzM3NjM1MjM1MDMxNjg0RS03LDAuMDEwNDI0Mjc3MzExNzAzNjMsMC4wNjE1MTIyNDQxMjkwMDkwNiw0My4yNDMwNTQyMjQyOTU1NCwxLjYyMzI2NjU4ODQwNDcxMjgsOS45OTAwNzg0MjMxMDMxOTRFLTYsMC4wMDYzMDYwNzM3MTc3MjU5ODcsMC42MTk5ODcwMzk2NTI0NzE4LDQuNDI0Njk4MDI5MTU5MzY2RS02LDEuNzEyNzcxODIwMjIwMjE3M0UtNCwwLjAxOTA4NzA1NTczNjIwMDg0LDEuMDA0MDA2MDMzNzI1OTUxLDAuMzkxODU1NTYyNjM2MTA0MjcsMy41ODg3Mjk2NDU3MDI5MDhFLTYKKzUsU2F0IDI5IEphbiAxMSwwLjA2NjczNjQ5MDA4NjUyMDE1LDAuMDMyODg0MTMzMTg1ODU3MTk0LDAuMDM1MTkwMTQ3NjkyNjQwNzQsMy42OTE0NzgzMjYxNjM2ODIzLDAuMDAyMDgwNDc2NjEyOTU4NTE3NywyLjk1MjE1OTgwMzUwODY4NTMsMC4wMDYzMjAyMjYwMTk1NTUyNDQ1LDAuMjQ4Nzc1MjM0MjAxMDA0OTUsMS40MDk3ODcyOTYzMTA4NjM3LDEuMzM2OTA0NjEzNDk5OTAzOSwwLjE2MjY3OTAxODQxNDQ0NTQzLDAuMjU1MDM1MTk1OTc4MDg2NTUsMy43Nzg2NjMzMjkxMDc4NTI1RS02LDAuMDkwODM1OTQ5NTk2MzYxOTUsMC41MTk5MzU0NTEzMjczNTAzLDE4OS40OTQ0NDEwMjU1MDAwNywxMC4yMDg4MTI5OTE1Nzc0NDgsMS4xNTE5NjM4Nzg0OTM1NzY4RS00LDAuMDU2NjY5NzA5MjQ4NzkwMDUsMy44NDEyMzU3MDE3NjM5NzEsNS4xMzk1NzQ2ODg2MjEzMTJFLTUsMC4wMDIyODE2MjA1MzE2OTk5MTUzLDAuMTY0MjMwMTM4NDYzMjQ2NzQsNi4zMjU3MzUyMTIzNTIxMjQsMi4xMDg3NTIwNzE3OTk2MDgsNC4wOTg4NTU2MDQzOTQ1MTZFLTUKKzYsU3VuIDMwIEphbiAxMSwwLjQwNDU5MTE0Mzc4OTMzMTI1LDAuMjEyNDg5MDg0NjIyOTE2OSwwLjI0NjU5NDIzNTM5NjY0OTEzLDE3LjAwOTYxODkwMTc5MjcxLDAuMDE2NzQzNDQ3ODY4MDc0MjQ2LDE2LjQ0NDgwOTgzNjQ1OTE0MywwLjA1MjE1NDg1NzYyODIyODg2LDEuODY4OTkyMDY4MzM2NjU0Myw4LjE2MTYxMjY5Nzg3MDgxOSw4LjI1NTY4NjcxMTE2NDUwMiwxLjEzMzUzOTMwODY1NDE1MDgsMi4wMDUzODExMjg5MzI0NzQzLDQuMTQwMjcwMTIzNDA1MTYyRS01LDAuNjgyMDAwOTQ2MDcxODY1OSwzLjg1ODYyMjk4Nzg2MTY3MjUsODMxLjQxODI3ODMzNjA0MDQsNjAuMzE5NDEwNjM4MTUwODksMC4wMDEwNDQwNDU0NjU3MDcxNDM4LDAuNDM4NjE2MzA0NTY5NTkyMiwyMi4zNzU3OTI1MzY0ODU5MzIsNC43MTg0MDk5NzcyMTcxMjdFLTQsMC4wMjM1ODMyMzQyNzM3MDYxMjIsMS4yMTkxMTM0MzQwMDMyMzY4LDM3LjQ1MDAwMTAwNDk1ODc2LDEwLjc0MzgxOTYyMzg5MDEwNCwzLjYzMjA5Mjg2MTA5MDg3MUUtNAorNyxNb24gMzEgSmFuIDExLDIuMzU4MzA2NTc0OTA1MjMzNCwxLjI4MTU4OTUzMzQ0MjA4OTMsMS41ODQ3NDM0OTQyNTQzODEyLDc2Ljc1NzcxODQ1NTAyMzQ1LDAuMTIyNjM1ODEzODY1NTc0OTMsODguMjY0NjQ3MzY5NDMwMjksMC4zOTE5MzAxODA0MTI3ODIyLDEyLjg0Mzc4ODM4NTM3NTQzNSw0NS42NTc4Njg4MjQ3NjkwMiw0OC45Mjc0NDI1MTIwMDg5LDcuMjcwNjE1MTg4ODAzNjUsMTQuMzY1Nzk0MjU0NDYwOTgzLDMuODkzNTI4NDQ4NDEyNjA5NUUtNCw0LjY4MTMzMDM4NTA3MzY2NDUsMjYuMzk5MDM1MjgyNTk4MTUsMzY1MC43MDc2Mzc0MzI1NzMsMzQyLjgyMDA5Njg5MzgwODUsMC4wMDgyNDU1NjcwMzk1ODQyMzIsMy4xMDEyMjc1ODEzNDA4OTQzLDEyNS40ODUyNDQ3OTY4ODUwNiwwLjAwMzc5MDA5NDE1NTY2NDkyNiwwLjIwOTU1MjI0NzQ1MzY5NTI1LDguMjgyMjc3OTk1NTk2Mzg4LDIxMy4zMjc0MTIwODk5MDU1NSw1My4wNzU5OTY1NjI2MTg2NSwwLjAwMjc3ODE3OTMxMDkzNTA5MjgKKzgsVHVlIDEgRmViIDExLDEzLjM4MzQ0MDI2Nzc0NzY5NCw3LjQwNjU2OTcwOTEwNDY5LDkuNjI0NDQyMDM0MTgxMDc0LDM0Mi4zMjAxOTM3NzUzNDU3MywwLjg0MjgyNzAzNDk4NzIzNjIsNDYyLjMyMTg5OTk5ODA2NTM2LDIuNzY0MDM0OTYxMzc1MjE0Niw4My4xOTA2OTE1Nzg5MTU1MiwyNDkuODc0MzUzMTM1MzM3LDI4MS44NzQ3NTIyNjYzMjA1LDQ0LjIzMjYwODIxMDg4NTY1LDk2LjYzMzk3NDU0NTgwNDM1LDAuMDAzMzA2NjEzMjQwNDU2OTczMywzMC4yNzMyOTE2MTIwNDE1MTUsMTcwLjgzNzM1MzU0MjcxNCwxNjAwMC4xODI4NDEwNTIwNzQsMTg5Ni42MjU0NTEyNTY2OTEzLDAuMDU5NjU0NTE2NzQ1OTk1NjkzLDIwLjYzNzIxMjg5NTcwODA1LDY4NS44MjUzMjI1NzUxNzg1LDAuMDI3OTg0MTAwNjMxNDc5OTA4LDEuNjg0NTc3NDY5MTAzMjQ0Nyw1My4wNTI2ODU5NDkwMjc3MywxMTgzLjc0NTExMjQwODkwNCwyNTcuMzI5NDI3NDQ0OTgyMjMsMC4wMTkzNDEyODg4NzQ4OTk3NzYKKzksV2VkIDIgRmViIDExLDc0LjQ1OTA1NTUyMTE0NTA1LDQxLjU1OTc1MDk3MDUzMjEyLDU2LjE1OTg1MTY3NDE5NzQzNCwxNTA3LjMxMjE4MTYzNDI5MjgsNS41MzIyNjkwMjIzNTYwNTYsMjM3OS4yMzc0MTA2Njg4MzM1LDE4LjYxNjYwMDgyMzY3MDMzNiw1MTYuNjIyNjk2MjA2Nzk1MiwxMzQ2LjU0NDAwMTUzMTI3MDIsMTU4OS43NzY0MjczODg5MzA2LDI1OS40OTk5ODgwMjM5MDQsNjIxLjA5NTU0NzA2MjMxODIsMC4wMjYxMDg0NTM3MjQ4MTA2NzQsMTg3LjY0NzEyNjAxOTY2ODEyLDEwNjEuMTA4Mzg5NTkzMDA3LDY5MTUzLjU0NTcxMDQ1MTE3LDEwMjU2LjE3NzI4MTg0NzM4NiwwLjQwNjM2NzcxMTQ2MTU4MTc0LDEzMS40NjQyOTU1NjY1NjA1NCwzNjcyLjA3NTA2ODM1NDY5MSwwLjE5NTEzNzA2MzY3NjMzNjMyLDEyLjYxMjUzMzA4NDI0NzUwOCwzMjUuOTA2OTc2Nzg1ODU2NjcsNjQzOC4wMDY4Mjc4MzM5MDYsMTIyOS40OTE2NTA3NzMzODk3LDAuMTI2Mjc0NzgxMDM5NDk5NjgKKzEwLFRodSAzIEZlYiAxMSw0MDYuODQ0MzUwNjEzNTI2MDUsMjI3LjEyNDY3ODQ5NzM2NDU4LDMxNy4wODUyODY2NjkwNjU5Nyw2MzkzLjUxMDgwMDAxODYxNjUsMzUuMDU1MjczMjM1NDcyMjIsMTIwMzIuOTY0NTQ0NjA4OTM0LDEyMS4wNTU3NjIwNjgxMzk1MywzMTA1LjU3MjI4MDA0ODUyMzcsNzE1MC43OTA1Mjk0NjA0OTIsODc5Mi4wMjc1MDk0MjE4OTQsMTQ3OS4zMTAwODc5MzMyNzksMzg1Mi4wODAyOTg1Mjg1NzMsMC4xOTUxNTQzODE4MTUxMjIwNywxMTI2LjE3MDExMjQ2MTMwODcsNjM2MS44MDI2MDA1OTAwNTksMjgwNDExLjcyMzkxMTY0MDksNTM1NTMuNTE1NDQ4MDkzODk1LDIuNjQ4OTIwMDA2NDMzNzQ1NSw4MDkuMjAwNTk1NzUyMjM3MSwxOTEzMy44NjU0NjEwNjc3NzcsMS4zMDU2Nzg3NjE4ODQwMjQ5LDg5LjUyNTk4MTcwODQ4OTgxLDE5MzguNzE1NDc3MTE2MjY1NCwzNDI1Mi41NzM0NjY5OTkzNSw1NzI1LjkyNzIyMDQ3ODQ1MywwLjc4NzAyNTgwMzI3NjA5ODEKKzExLEZyaSA0IEZlYiAxMSwyMTYwLjk3MzQwMzY1MTIzNSwxMTg2LjQ2NDAxMzk5MTgzNTEsMTcxMy4wNzM2MTg4MTE0Njg0LDIzNzM2LjgxMzc4ODk4NTQxNSwyMTUuNTA5NDkzNDE4OTY2MDYsNTg4MjguNTA2NDI4Mjk0NjU1LDc2NC44Nzk5MDI3MDE3NTY3LDE4MDgwLjUwMTk3Njg2Nzg4NywzNjkzMC42MDM1Nzc0NDY3NDUsNDcwOTAuMjkwNTQ5ODcxNjIsODEzNS4xODIzNjE4OTgyLDIzMDY5LjA4ODk5NjEwMzkzMiwxLjM5NzgwMDA0OTExMTE3MjIsNjU2NS4zNTgyNjk0NDA4MTIsMzYyNTYuODI3MjU4ODgwNTUsOTEwMjQ1LjA5MDMyNjgyMzksMjUwNzY4LjQ2Mzc0NTQwMzY2LDE2LjY3NDc5MTYyMDE2OTc4LDQ4MTUuMDI0NDUzNTU2OTM0LDkyMzQ2Ljc3ODA0MDY2NDU4LDguNDU5OTkwMTE5NDM1NzYyLDYwOS4yMjMxODMzOTY5OTU0LDExMTg3LjIxODQ0NzMwODA1NCwxNzMzNDYuODM1NzQwMzA5NTYsMjQ0ODUuNDE4MTc3OTEzOTI1LDQuNzI2ODI0MjcyNDY4Mjg2CisxMixTYXQgNSBGZWIgMTEsMTA1NzguNTg5NDkzNjA0ODczLDU0NDAuNjkyMjQxMzMxNDQzLDgyMDQuMDQ0NzQyMjkwNzU4LDYyODAxLjY4NTYwMTExOTM5NiwxMjc3LjU5MDQ0NzU0MzEwOTgsMjU5NTI3LjgzMDE4MDY1NjI1LDQ2OTcuNzY1NTM5OTgyODk4LDk4OTc2Ljc5NzAzNzMzMTY2LDE3NDM3OC43ODkxMDQ1NjUyOCwyMjg2NTIuOTM5ODgwNjY1Myw0MDY1MS40Njk4NzUwMTE4MywxMjkzMjkuODA3NDE0MzY5NDQsOS42NzU2MTkwNDI1MjU5NjIsMzY2MTguOTQzMjg0NzU2MDQsMTc4MTQ0Ljc3MzY3MDY1MDMsMTg2NTkyOC43Nzg4NDkyNjc0LDgzMDAzOC45MTE1NzM4NTEsMTAxLjQ4NzQwODg0NTAxMDY5LDI3MTIzLjg5ODMwMDM2NjIwMywzNDM3OTQuMjg0MDcxNjc1Myw1My4yMDIzNjIxMTgzNTUxMSwzOTkyLjMyMzk4MjY3NDQ4Nyw2MTI0Mi43ODg2NzQwMTg3OSw3MzkwODQuNDQ0MjQ1MTkyMSw4MDQwNy4zNjY3MTI0Mzg5LDI3LjIwOTQ3MTMyMzk1MTU3NgorMTMsU3VuIDYgRmViIDExLDM5NzU0LjAxMDg0ODgxMTg0LDE4NjQyLjMzMjY0MTUxNTU3LDI3MzkyLjEyMDQyMDgzNzY5LDEwNDgzMy4xMTYwNzg1Mjk4Myw3MDA3LjQxMzM5NzAyNjc1Myw4NTAzMTQuOTUyOTg4MDk0MSwyNzYxMC42MjYyNTE3OTAyNDcsNDQxMjY0LjEwODU3OTIwMzksNjE2MTI2LjM2MTU3NTI1NDUsODA3NTI4LjEyNDcxOTIyNTIsMTQ5NzY2LjI4NjMyMTcyNDM2LDU4MzA0My4xNzg0NTYwMjk2LDY1LjA5NzYwNjQ0MDgwMDc1LDE3OTE1Ni41MjMxMDExMzgsNTY3MTIyLjQ0NTgyMDA2MzUsMjQ2MjE4MS4zNTg5NzAyOTgsMTUyOTIyMi4xNTAyNTI4OTkyLDU5MS42OTA4NDk0Njg5ODY3LDEzNTUxMC4zNjc1NjAzMjE5LDc0Mjg5OC42MDY0NDUwNDE3LDMyMi45NzMwNDk5NTQxMDc2LDI0OTM1Ljc4NTI0MDA1NjA2LDI4Mzc4Ni45Nzc4MDU5NjAzLDE5OTg0OTkuMDI3MjY2MzE1LDE2MTM5Ni4wNjA3MTQ0MDQwNywxNDIuNTgzODQ5MDM3NTk1MzQKKzE0LE1vbiA3IEZlYiAxMSw4NjQyNy43NzI3NTA0NDcxMyw0NDQ2Ni42ODg0MzU5OTIxNSw1MDU3Ni42NjkwNzM4NjY2OTUsMTI1MDQzLjUwNDUyNjg1MzQ2LDMwNjk1Ljk5NTMyMTE4OTY1NywxNjM0ODk3LjEwMDAxNzE5MjgsMTQ2NzU4Ljc1NDY4Mjc3OTI1LDExNjQwNjkuNDI5OTE5NjMyNiwxMjQxMzAxLjYzNjAxNjkyMzUsMTU4Njc4NS40ODM0MTU0MjQ0LDMwOTc2MC41NDExOTA2MDg4NywxNTI0MzkyLjc1NDc2ODQxMDUsNDIzLjUzNjM2OTc0NzIwOTUsNTkwNTg5LjMwNDQ2NjM1NTYsOTY4NTIyLjI0Mjk5NjkyMiwyNTc2ODUwLjc2OTUzMDA1MiwxODUzNzU4Ljc5MzE3NjY3NiwzMjY3LjU0NzQxOTU3MzU3Myw1MDkxMTMuOTk5MTA3OTk3MzQsOTgyMjc3LjY3ODY4MTQzNzksMTg4MC42NzEzODA2NDg5ODYzLDEzOTE0Ni4wOTE2NTcwMTUxLDgyNzg2OC4yOTE0MTc5NjY1LDMwNjcxNTguMTE2NDkzNTI1NCwyMDg2NDkuNDg0NTg2Njc4Miw1ODIuOTc3MjIyNzYzMjk3CisxNSxUdWUgOCBGZWIgMTEsMTE0NjQ5LjMwOTIwNDIyOTg0LDc2Mjc5LjU3MjUyMTEwNjY1LDYxMzcxLjg2NDEzMjkwNDQ1NSwxMjUyNjYuOTI0NTY5NjU5Miw4MDM4NC41NTA1MDcxMTE4OCwyMDQyNDM3LjgzODczODg5MDgsNjA5NzA1LjczOTQwMjQ1ODUsMTcxODI0MS4yODA1OTE5ODM4LDE1NzY3OTIuMjI4NzIxNTAwNCwxOTgzNjMzLjE2NDA0NzU1NDgsMzk4Nzc3LjY4MDcxNTQ4MDQ3LDIyMjcwNzAuNzQwMjAyNTk0NSwyNjIwLjcwNDU0Njc1OTAzNjUsMTA1NDU3OS4xOTk0NDU3NTg1LDExMjgwNzQuODc1MDQzNDExMywyNDE0Njc2Ljg1OTE4ODM1MzYsMTg2MjM1NC41MTE1Njc0ODAyLDE2OTkzLjUxNjE5NjQ0ODA0MywxMTA4MTc3LjQ2MjcxNjI2NTMsMTAyNTMzMC42MDUwOTUxNzM1LDEwNTE0LjgyNjE1ODI2OTg4LDU2MTg0MC45OTU5ODQ1MTgyLDEzMjM4NTEuMjg0ODY3MzM0LDM0MTU4MzcuNTU1Njc2NjQzLDIxNjA0OC45MTE2OTU1OTExNywxNTE4LjkxOTQ4ODYwNDAzNAorMTYsV2VkIDkgRmViIDExLDExOTg1OC4wOTMwMjcxNDQ1Miw5Nzg3OS44NzMyMDQ2MTY5Niw2MTY4NS41MTQwNTg2NjU5NzYsMTE0NzEzLjI1NTAzNjcwNTI5LDExODk5Ny4wNjcyNDI3NTE2NywyMDgwNzczLjg5NjcyNDM4MzgsMTQ5NjM0OC44OTI3MjYwODA3LDE4NzgwMzkuNzIzMjU3NzgzOCwxNjE3MTc0LjY3MjcyMTIyOTMsMjAxOTg0OC40Mzk3MjE5LDQxMTQxNy4zNTE1MDE1NjkwNCwyNDIyODI0LjU4MzU1MDgzNjQsMTQ4MjguNTMzNjc5ODUxNDU4LDEyNTUxOTEuNzk3MDE0MjQ0LDExMTI3MTEuODAyODY1ODYwOCwyMTI3ODc5Ljc4MTI2MzEzNzcsMTcwNzY0Ny4xMzU5NTMzMDEzLDc4MDk5LjYyOTE5ODQxNjIsMTQ3MjMwOS40NjEzNjg2MzEsOTU5MzIzLjI3NDQwMzY4MjQsNTUzODEuMTk2ODEyNDcxMTcsMTIzMDg3OC40MTU3NDQ4MDEzLDE0OTg2MzAuMjM1NDQ5MDA0NSwzMjk5OTg4LjYxMDgxNjc4LDIwMTMxNS42MzQwMzM5ODY2NiwyMzgxLjIxMDI0NTAwMjMyNgorMTcsVGh1IDEwIEZlYiAxMSwxMTIyMzEuODA2MTA3MDE1OTIsMTAzMDIzLjEwNDcxODE3MzMsNTY1NzUuNzAxNTI5MDE5OTM0LDk5NjczLjY3MDUyMjY3ODUsMTMwMzE1LjI0MDA1MzA1MDE4LDE5MjIyOTkuODQ0Nzk4MTgxNCwyMTI2NTQzLjQxNTAwMjc0NjUsMTc5NzkwOS4xMzkzNjM4OTg0LDE0OTkyNjguNDk2Nzk4NjExLDE4NjU0NjUuNDM0MzM2MjY1MywzODI2MDcuMDMxODMwOTg1MzMsMjMxNDE0NS40NzgwNjk3MTA1LDcwNTg3Ljg3OTQzMzMwMzgsMTI1MDM4NS43Mjk0MDkyNjcyLDEwMTAwNTUuNDk2MjI3MjYyMSwxODAzNjg4LjAxMjY2MjUyMDQsMTQ4NDk0MS43MTk3MjA5NDI3LDI0OTE5Ni41NzQzNzYwMjQ1NywxNTQwMjIwLjUxNDI1Njc2NDcsODQ0NTkzLjQ1OTIzMzczODgsMjUxOTYxLjM5Nzc5NjI3OTY2LDE2MjAzODIuMTk0MjM2MzM5OCwxNDU4OTE0LjUyMzk2NzcxNDMsMjk2MDU4OC40Mzk2MzQ4MjYsMTc2ODAxLjg3OTA1NTE0NzgsMjcwMy42ODEyMzk5NTY3NjE2CisxOCxGcmkgMTEgRmViIDExLDk4ODU3LjIwNTc5NjA0NzM2LDk3MDY2LjQ3MDE2Nzk3MDA0LDQ5MjA1LjEyMjMxOTgxMTM0NCw4MzY5MC45MzQwMTQzNDM2OSwxMjQ4NzUuMzI4ODM1Njg0NDcsMTY3OTM4Ny43MzY1OTk1Mjk2LDIyODg3MDcuNDk4Njc0MDY2LDE2MDQ1MzYuNDI3NDk2MjU1NCwxMzEyNjM5LjQ2NzQ4MjIwNCwxNjI5NDM4Ljc2ODEzNDA1OSwzMzU2MTUuMjQ3NzAwNTY0MywyMDYyNDk1LjYwNTQ0MTkzODIsMjI2MjU3LjQzMDYwMjUzNzQsMTE0MTIzMi4zMzU5NTk0NzM5LDg3Mjc5MS4zMDQ3MzY2Mjc4LDE0ODg2MzIuMTg4MDg1NjE5MSwxMjQ3NTAxLjMwNzIzODg0Nyw0NDEyODguMTgyMDUzMjkyMTcsMTQ0MjcwMS4xNzY4MTE3Mzg0LDcxNTQ3MS4xODE3ODk0NzIzLDc2ODI5MC4wMzgyMTkyNjM0LDE2ODY4MTIuNjEyMzY4NDQwNSwxMzE0NTgyLjU1NjM1NjIyMiwyNTM5MTM0LjIxOTE1NTEzMzcsMTQ5NTI1LjU2NTgzODI4OTU2LDI2MzcuODA1MDM4OTQzMDEyMworMTksU2F0IDEyIEZlYiAxMSw4Mzc3MC43Mjg3NTAyMzc2NCw4NTgzNC41NzgwOTkxNDc5NCw0MTM0MS43NDk4OTE3MzE4LDY4NjA1LjcwMzUyMTgxNjYzLDExMTUwNi45NjUwMTE2MTA4NywxNDE1MzAxLjg4MDU0OTM5MjcsMjE3NDYwNS42OTU3OTAzMzY1LDEzNzE0NDAuNzY2NDAxNjU4MywxMTA3ODMxLjMzMjY4NDQzOTEsMTM3MzAzOC42ODY1MzQxNzYzLDI4MzYxMC4xMzY0MDU3NzQxLDE3NjEzMzguODEyMjM4Mjg4MywzOTkwNzYuNzc5NTcwNjg1Myw5ODk1MzUuNDgyOTkzODc2MSw3MzAwNzIuMjIyMzk1OTI4MiwxMjA1MDM2LjcyNjczOTU0NDcsMTAyMzAzNS4zNDU5MDU0MzE3LDUyNDIyNC45ODU0MjI1Nzk0NiwxMjcxMDMwLjE1ODI3NDI4NTcsNTkwMjM2Ljc3NzY0MjAwODgsMTI5ODIzNi42MjIxNzYxMjIyLDE1NzU5NzAuNjI4MDEyMjMxMywxMTMwNjA4LjQ4NDM5MTA2NDYsMjExMjk1MS42MzUwOTI1MTEsMTIzMjA4LjQ2MjczODg3NDIyLDIzNzkuODUxMzE2MDk2MDg4MworMjAsU3VuIDEzIEZlYiAxMSw2OTEyMy40Njk0ODgzMDk4OSw3MjkyNS41NjY4NzQwODA5OCwzMzkwNS42NjY4MjY3NzI1NTQsNTUyNTUuMjc0MzI4NTY3OTUsOTUzNDIuODAzNzA0MDUyOSwxMTYzMjcwLjMzODA1NjkwMzMsMTkzMjE4MS4zMDIwNjM5NjUyLDExMzg1NDAuMjEyMDk1NTIxMiw5MTE0OTguNzc0NDI3Nzg3MiwxMTI4NDMzLjUzOTg2NTUyMDMsMjMzNTU5Ljg4NTY2MTQxMDM3LDE0NjEzMzUuMjEzNjUzOTYxNyw0NzI5MzAuODIwNTIxODUzMDUsODI5Njc2LjI5NzY2OTA2NTksNTk2ODQwLjk3MTkyNDE2OTYsOTYxMjk4LjAwMjQzMTA1MDgsODI0MTk0LjEwNjgxMTUxNjcsNTIxODEyLjkyNjgxNDc0MTYsMTA3NzIwMy4zOTc0NDQxMjA2LDQ3NzYzNS4xMjE4NjUzNTM0LDE1MDg1MTcuMTc1MjI5NTIxMiwxMzg2Mjk3LjI5MDQ4Nzk4MDcsOTQyNjcxLjYxNzMyNzc1ODYsMTcyMDg0MS43ODYxMTE0OTIyLDk5NjE2LjY0OTg0NDM5NTM2LDIwNDguNDUzMzc0OTI3ODU5CisyMSxNb24gMTQgRmViIDExLDU1OTQ2LjAyMzE3NzA2MjM4LDYwMjg2LjE2NjM2ODQxNzg1LDI3MzE3LjIyMjAyODIzNjE2LDQzOTA3LjEzODgzNzU3Nzk2NCw3OTE3MS43MTkyNjUyNTI3OSw5Mzg3NjIuMzMwMzc1NzMyLDE2NDY3MzguNzc3NzQ0MzY0NSw5MjU2MzkuNjg2NTI0NTQ1Myw3MzYxNTIuODQyOTk4MDc1LDkxMDU4OC40ODc4MDU4MzI4LDE4ODc1Ny40ODk2ODU3Njk3MiwxMTg3NTQxLjg1MTIzMzg1NTQsNDcwMjI2LjM0NjI3NTI4NCw2Nzk0MjUuMzE3NDY5MDQ2Myw0Nzk3MDYuNDY0NTQyMjQyMDYsNzU4MTc4Ljc2MDkzOTQ1MzUsNjU1MDY4Ljk5MzM3ODY1OTIsNDc2MDU5LjU5MjcxMTQ2MDQsODg4OTM5LjExNzAzNzI1MjksMzgwOTI4Ljc4OTMyOTE3NjI0LDE0ODY1MTkuMzcxOTIxOTg2NiwxMTczNjg0LjIyNjkxOTE4OTMsNzY4ODI3LjY5MDkzMzUyNDQsMTM3OTE1OS4yNDc4NDk1MzEsNzkzOTQuMTUwNjIyOTA5NzksMTcwOC45MDUwNzI0ODkyMTIyCisyMixUdWUgMTUgRmViIDExLDQ0NjI0LjUxMDQxODE3MzI3LDQ4ODYwLjczODM1NTM4NjA5LDIxNzEyLjY5Mzk3NTc4MDc2MywzNDUyMi45ODk2NDc1MzAzNiw2NDM3OS4xNDExMTA0OTY5OCw3NDcxMDYuNzI4ODY2MTI0MSwxMzY0MzI4LjYxNDkzNDAzMjMsNzQwODYzLjk2NzIwNjA0NTQsNTg2MjEyLjIyMTE4ODM5MDMsNzI0NjQ3LjM1MzM3OTAyMzgsMTUwMzg5LjU2MzM1MTU4ODY3LDk1MDE2MC42Njk0NzMzMzA4LDQyODczMS40NjQ2NTY0NjY1Niw1NDY3ODUuMzIzNjkwNDEzMSwzODA1NzQuNTk4MzAzNDA4NTQsNTkyNTg2LjAzNjA0NTE2MjgsNTE1MTUxLjc5ODI0OTcwMzgsNDEyNjcwLjUyMTUxNTMzMDgsNzE5NTI1LjQ5MzEzODY0NTEsMzAwMzc5LjI2NTAwNjQ4NDEsMTM0ODY0Ni44OTA0MjU5MjYsOTY3ODQ5LjgyMzkzMTcxNjMsNjE2ODM3Ljc5MzA4MDcwNTcsMTA5MTcxNC45NTk0MjU0MDYzLDYyNTcyLjc4NjM5NTk3ODE0NiwxMzk0LjMyNjczOTc5MzEyMgorMjMsV2VkIDE2IEZlYiAxMSwzNTE5Mi4wMzYxOTgyOTY5MSwzOTAxNC40ODk1Mzk3MDM3MjUsMTcwNzUuNjU3ODU0NDkxMTk0LDI2OTE1Ljk0NjIwMzQwNDg2Myw1MTUzNS4xODY0Njg4NDk0Myw1ODgxNDEuNzQ2NDU5OTExMywxMTA3NTU4LjI4NTA0OTgzNzgsNTg1ODQzLjYzNzQ2ODQyNjgsNDYxNjk5LjY1NzQ4MjI4MTE1LDU3MDQzNy41MjQzNTkxNTc4LDExODQ5NS4zNzgzNDYwMDA4Nyw3NTExNDUuMzYyMjU0NTQ1OCwzNzE1MDAuMjAxODEyMzM5OSw0MzQyMjQuOTIxOTQzMDkxMTUsMjk4ODUzLjA4MzQ5NjY4OTMzLDQ1OTc3Ni42MDg0MjM2MDkyLDQwMTY5My43Nzg1ODE4NTMxLDM0NTk0MS4wNjUwNTI5ODg0LDU3Mzk0OS42NDc4MTE0NTA4LDIzNDczNS40NzcyODU2OTIyNiwxMTY0OTcwLjAyOTY3NzEsNzgyOTcxLjQ2NTA5NDI2MDQsNDg4Njg3Ljg3MDA4OTAzMyw4NTU3NjUuNTU2NTQ4Njk2Nyw0ODg3Ny42NjY1OTE4ODI4OTUsMTExOS4wMzAyMTkxMzQ2MjcKKzI0LFRodSAxNyBGZWIgMTEsMjc1MDMuNTgzODY1NzAzMTg1LDMwNzkzLjc5OTkzMjE3OTMzMiwxMzMxNS4yNjY1MDg1NzMxNTksMjA4NDEuMzE5NjMxODg2NjIsNDA3NTYuNDAxNjg5NjE0ODYsNDU4OTkyLjk4Mjk1MTg1OTcsODg1NDYyLjE0ODk1NjU1NTYsNDU4ODQ1LjE5MjUyNjY1ODksMzYwNDUzLjExNDMyOTE5NjQsNDQ1MTYxLjIyMDEyODk2Nyw5MjU0MS4xMjQyODY3NjQxNiw1ODgxODYuOTMxMzc1Mjc3OCwzMTEzNDUuNTExMjUyNTA3MzMsMzQxMjUzLjcyMDYwNDIwMDI3LDIzMjc1OS43NTM2MjMzNDUyNiwzNTQ1OTMuMTQ1ODk2NDI0LDMxMTA2OC41NDM3ODEyNDQ1NSwyODMyNTUuNDkxMDg5MDE4Myw0NTI2NTAuNTU5Njg4ODQ2MjMsMTgyMTAyLjE5ODE2ODgwNjk0LDk3NDI0NC43MjcxMzQzODM0LDYyNDI5Ny44NjAxNTkyMjA5LDM4MzMyNi40NjUwNzUxNDYyMyw2NjU1NDcuNTMyNTQwMDIzOCwzNzkwNS4wODg5NjA5OTk2Miw4ODYuNzY0NzA4NTA0MzMzMworMjUsRnJpIDE4IEZlYiAxMSwyMTMzOC4wODI0NjAxMjc3MTYsMjQwODIuNzY4MjY2MjYxMzMsMTAzMTEuNDgxODAwNTI1NjUzLDE2MDQ2LjYyODkwMDk1NTE0NiwzMTkyNC4xNDk2MTk5MzAwNzUsMzU1Njg0LjcyNzY3OTIwMjMsNjk5NTYyLjY3NTcxMTAwODQsMzU2NjEyLjgxNjcxNjA3NjUsMjc5NDEwLjQ1OTYwMzUzMDYsMzQ0OTU2LjIyMDMzNzk4NDk3LDcxNzU0LjA0NTYxMjAyODQ4LDQ1NzA1Ny4wNDM5ODUzODY3LDI1NDg3OS44Nzg5Mjg5MDQxNiwyNjU5NTMuOTI4MjkxODU5MDUsMTgwMDczLjkwODEzMTI4NjksMjcyMTEzLjQ1OTg4NzU0MzA1LDIzOTUyMy44MjI2NzI1MDMxMywyMjc5MzQuODQxODU3MTQzMiwzNTM3NzEuMjgzNTU2MDA3NTUsMTQwNDI2LjMxMDcyMTU0OTcsNzk2MzE4LjQ4MjY5MDQ1NSw0OTIxOTUuNTc3MDU5MjM1MTMsMjk4MjgzLjczNzQ1MDYyMDE2LDUxNDI5MC4yNjg4MDkyNDAzNywyOTIyMS44OTE4Njg5MDA2OTcsNjk1LjcxNDA2ODg2MjQ3OTQKKzI2LFNhdCAxOSBGZWIgMTEsMTY0NTUuNTg4ODE0ODkwMTE4LDE4Njk0LjgxNDgzNjE4NjM2NCw3OTQwLjAyOTM4MDgyMzk2MiwxMjI5Ny4xMDIxMzI4NTA1OCwyNDgxMy4xNDk5NDQxODk1ODMsMjc0MDM0LjE4MTQzOTc5NTEsNTQ3NTIyLjE0NjYyNTQzMzksMjc1NDEzLjAyODQzNzI1ODczLDIxNTMyNC4zMTEzNDQ3NTU1NSwyNjU3NjEuODI1NTg5NDQ4NTYsNTUzMDguNzc4OTM0ODU5NTMsMzUyOTM1LjY3MDA2OTM4MDE0LDIwNTA3MS40NDM4ODY3MDI1MywyMDU4NjIuODY1MDE5MDUzMzQsMTM4NTQ2Ljg3NzY2MDI4NiwyMDc5NTIuODE1MzQxMjg1MDUsMTgzNTY1LjUyNjkxODgwOTksMTgwOTk4LjcxNTU1NjU1OTM2LDI3NDQ3My41MTMwOTAwMjI4LDEwNzc1MS43NjYzNzQ3MzMzNiw2Mzk5NTIuNjc1NjYwNDEyMiwzODQ1NzUuNTk4MjM2NTEzMjcsMjMwNTk2LjYxNDQ4Njk1OTEsMzk1MzAxLjcwMDAxNTc0NjQ2LDIyNDE3LjMwNTk1MDkzNjAyLDU0MS40NTM4NjI1MzY0NzIxCisyNyxTdW4gMjAgRmViIDExLDEyNjI3LjI5NTE1Nzg4MjM2NSwxNDQyNC4yMDgwNzY5NTY3NzEsNjA4NS4xNTI1MjQxMDc2MTYsOTM4Ni44MjYyMzM2OTUwMDcsMTkxNjQuNDIwNzQ3NjM4MjIsMjEwMTEzLjE5NTY1NDU4NDY1LDQyNTI4NS44MjMyMjAwMjEwMywyMTE1OTQuMjM1MzQ2MDUyNjgsMTY1MTMyLjgzNzQ2MjU2MjkyLDIwMzc2NS44Mjg0Mzc1NzE3Myw0MjQyNC4zNzc0MTcwOTY2OCwyNzExMjAuOTA2ODgzNjQ5MywxNjI4MjUuMDU4MjMzNzc5MDQsMTU4NDU3Ljc1MDExMTMyNjkyLDEwNjEwOC4yODk5NzYzNTkxMywxNTgzNjguMTI3Njg3MzA0MDgsMTQwMTI2LjQwOTA3NzIzMjM4LDE0MjIzNi43NzkyMTY4NTIwNywyMTE2NzQuMjA3MDg0NzE0MzIsODIzMzcuODk2ODc4MDgzOSw1MDc2NTUuMDQwNjk1MDQwMiwyOTgzMDguMDk3MzcwNDg0MjYsMTc3MzEwLjMzOTcwMTA0NTEzLDMwMjUwMC43MTY2NzY1MTE2LDE3MTI2Ljc4ODUxMTY5NTI1LDQxOC42NDI1OTYyMDk4ODU3NworMjgsTW9uIDIxIEZlYiAxMSw5NjQ5LjQ3ODgxOTkwOTMxOCwxMTA3My4yODc3OTIyOTA5OTcsNDY0NS4yMTc2ODA3ODc4MjMsNzE0MS44MTgxNzE2OTIxNCwxNDcyNC4zNzg5MjQ3MDc2NjcsMTYwNDU1LjgwNTU0NDc0MzIzLDMyODI5Mi44OTM2NzQ0NDI1LDE2MTg1Ny42MDAwNTIyMTQ1MiwxMjYxMjguMDMzOTgxMzI2MTQsMTU1NjA1LjIzODg3NzU4OTUsMzI0MDguNjk2MjE1ODc1MDE4LDIwNzM3MS4zNjg4ODI5NDUsMTI3OTQzLjcwNzUxMzczOTY2LDEyMTQwMS41NzExMTgxMTIzLDgwOTUzLjI2MzkxNzY3NTQ5LDEyMDI1NC44ODU1Njk0NDg1NCwxMDY2MTMuMzQ2ODkwNjA3NTksMTEwODQ1Ljk0NDUzODU2MTI5LDE2MjQzMi4yODk4NDkwNzI5LDYyNjk5Ljc2NDIwNjIwNDkxLDM5ODYxMy43MTUzMzAyODA3LDIzMDAxMy45MDg5ODk0MDYzNywxMzU3MjYuODE5MzY1NDQ0LDIzMDYyOS4zNDY3MzMzODQxNSwxMzAzOS45MDk4Nzk3MzcyNzIsMzIxLjkzOTkwMzg4MjMwMDQKKzI5LFR1ZSAyMiBGZWIgMTEsNzM0OC4yODYxOTM2OTQ5NjgsODQ2NS4yOTQxNTE3ODMzLDM1MzQuMjkxNDQ1NTEyNDM1NSw1NDE4LjgyMjMzMDU1OTQ5NywxMTI2My43OTUyNTc0MTYyOTUsMTIyMTIxLjgwMDA3Mzk2OTMyLDI1MjEyMS4wMzcyOTg1NjcyNCwxMjMzNjEuNDA4MDM0NjUsOTYwMDkuMDU5MDExMjA5NjgsMTE4NDI3LjU4MTAxNjQ0NTQ1LDI0NjcyLjg0NjYxMzI4NTQsMTU4MDM2Ljg2NjI1NzIwMTk3LDk5NzAwLjA3NTA3NTkwNzczLDkyNjQ5LjMwNTMyNTQ5NjI2LDYxNTYzLjAyNTMzODg4MDU5LDkxMDkxLjA2NDAwMTUzNjc3LDgwODkwLjMxNTE5MzU4NTQxLDg1Nzk3LjQxOTE5NzYzMTkxLDEyNDEyOC41NDg2NTg0Mzg0NSw0NzYwNi4zNDg1MjAxNDk2NiwzMTA0MzcuODUxMTM5OTk5NDYsMTc2NDc4Ljg1NjE2NTI5MzU1LDEwMzUwNi4wMTc0NjkxODAwMywxNzUyODcuNzk0MTkxMzExMDMsOTg5OS42NDY0NzQ0ODI0NTUsMjQ2LjQ2MjQwMDM1ODg5NDc3CiszMCxXZWQgMjMgRmViIDExLDU1NzkuNTU2MzUzMDAzNjUyLDY0NDguOTUxODU4NTEwMTU4LDI2ODEuNTgyMjExMzc3MTg3LDQxMDIuMDg3MzE2NjY3NDc0LDg1ODUuMTI2MzY0ODMzMDg2LDkyNjgzLjM2NjY4OTMzMDE5LDE5Mjc5NC42Njc2OTgzMjU4NSw5MzczMy44Mzc4MTg4OTU4OSw3Mjg3My45Mjc1MDYzMjkzMyw4OTg3Ny43MTIxNTcxMDE2MiwxODcyOS41NTA1NDIyNjkyNzMsMTIwMDcyLjc4NDc3MDgyNzI5LDc3MTY1LjY3NjI3NTMxNTc0LDcwNDc1LjcyMDExOTg1MjUxLDQ2NjkwLjY5OTA4ODA4NjI0LDY4ODU5LjQ5NjEyNjcyOTE3LDYxMjMwLjg3MzA3ODEwNzc4LDY2MDM4LjI1OTQxNTA1NDQ1LDk0NTI3LjQ2NzM4NzMwODIyLDM2MDU3Ljk1MjMwNjczODEsMjQwMTU2Ljg2Nzg2NDE5MjQsMTM0ODQ1LjM5OTQyMjQ4MTM0LDc4Njg1LjcxNDQzNjg3MjI4LDEzMjg3OC41MTQwMzgyNzAwOCw3NDk3LjQ2NTkzODY4NDAyOSwxODcuOTcwOTk1NjEyNTczOAorMzEsVGh1IDI0IEZlYiAxMSw0MjI2LjE5NjUxNDk2MDU5ODUsNDg5OC41NzAwMTA5MTkwNzc1LDIwMjkuODY5MTUxMTg3NTY0LDMwOTkuNDE1Nzc2ODcyNjAwNCw2NTIzLjQ0ODQ0MDYxMDI4Niw3MDE3NC42ODA4NzQxMjAzNiwxNDY4OTkuODMyMTI0Mzk3MSw3MTAzOS4xNTQ4Nzg2MjcxOSw1NTE4MS4zMDkxMTA5Njk4Myw2ODA0OC43ODQ2MTQ4NzQyLDE0MTgzLjY0MjMyMDU3MTU3LDkwOTk1LjQ4NjQzMjAxODY5LDU5MzkxLjQ4NjAxOTAwMjM1LDUzNDYxLjg1NTUzMzQ1NDkyNCwzNTMzMS4wMjExMjg0MjE1MDQsNTE5NjYuMTgzMDQyODIxMjMsNDYyNTkuNTY5OTMyNzE2MDMsNTA1OTMuNTE5NTYwMTM2NjY1LDcxNzc1LjE1MDA4OTY3MjM3LDI3MjU1LjIxMzQwMDQ0NTAxLDE4NDc2Ni4xOTAwOTQ0NzAxNiwxMDI2NzcuMzM1NzY2MTE5MDgsNTk2NTkuMDM4MzQzODg0NDgsMTAwNTA5Ljg5MTUzNzEyNTI1LDU2NjYuNzQzNDUzNjc0ODk0LDE0Mi45MDg4NzIxMTA5NTE2OAorMzIsRnJpIDI1IEZlYiAxMSwzMTk0LjU2NTc2MjAwOTQxOTQsMzcxMS45MDU4NDE0ODQ3Nzg2LDE1MzMuNTYyMzk3MzY1MzE0MiwyMzM4LjE4OTc3NjM4MTIyMzUsNDk0NC4xMzM4NjY0OTQxNCw1MzAyNy4zOTQ2NjM2MjksMTExNTkzLjI4MzM4MDYyNTUyLDUzNzIzLjY2MDcwMTY0OTMxLDQxNzAwLjczODMyNDIwNjA5LDUxNDE5LjU4NTYyMjk0NTc4LDEwNzE5LjQ4MDU4NTgxNzY1LDY4ODEyLjIyNjgzODk3ODE1LDQ1NDk5LjM4ODk4MTY1Njc0LDQwNDYyLjE0MjAzMzMxMzIzNCwyNjY4NC42NTA3NzAyMzU5MjMsMzkxNjMuNTU2NjQ1MDMzNzQsMzQ4OTIuODUwNTAwNzIzMjQ1LDM4NjEwLjMxMzQxMTEzMzQ0LDU0MzY1LjY4MzE2OTAwODQzLDIwNTY2LjU5NTk1NDQ4NDEwMywxNDE1MDEuMTUxNDc3MDk0NSw3Nzk1NS45Mjg0MjcyMjUzNiw0NTEzMi45NDM3MzkyOTkxMjQsNzU4ODguMDgzMDM5OTY1MzQsNDI3NS45MTA3Mzc5NTk1MTQsMTA4LjM2MjA0ODk0OTUxNTYxCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1BvcHVsYXRpb25Hcm93dGhTRUlSX1JLX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9JbmNpZGVuY2VfMC5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1BvcHVsYXRpb25Hcm93dGhTRUlSX1JLX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9JbmNpZGVuY2VfMC5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmMyNDQwMQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvUG9wdWxhdGlvbkdyb3d0aFNFSVJfUktfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL0luY2lkZW5jZV8wLmNzdgpAQCAtMCwwICsxIEBACitpdGVyYXRpb24sdGltZSwKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvUG9wdWxhdGlvbkdyb3d0aFNFSVJfUktfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL0luY2lkZW5jZV8xLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvUG9wdWxhdGlvbkdyb3d0aFNFSVJfUktfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL0luY2lkZW5jZV8xLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYzI0NDAxCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Qb3B1bGF0aW9uR3Jvd3RoU0VJUl9SS19SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vSW5jaWRlbmNlXzEuY3N2CkBAIC0wLDAgKzEgQEAKK2l0ZXJhdGlvbix0aW1lLApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Qb3B1bGF0aW9uR3Jvd3RoU0VJUl9SS19SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vSW5jaWRlbmNlXzIuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Qb3B1bGF0aW9uR3Jvd3RoU0VJUl9SS19SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vSW5jaWRlbmNlXzIuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJhZWU0MjIKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1BvcHVsYXRpb25Hcm93dGhTRUlSX1JLX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9JbmNpZGVuY2VfMi5jc3YKQEAgLTAsMCArMSwzMyBAQAoraXRlcmF0aW9uLHRpbWUsRUctRlJHLUcyMTAwMDEsRUctRlJHLUcyMTAwMDIsRUctRlJHLUcyMTAwMDMsRUctRlJHLUcyMTAwMDQsRUctRlJHLUcyMTAwMDUsRUctTE9FLUcyNDAwMDEsRUctTE9FLUcyNDAwMDIsRUctTE9FLUcyNDAwMDMsRUctTE9FLUcyNDAwMDQsRUctTE9FLUcyNDAwMDUsRUctTE9FLUcyNDAwMDYsRUctTE9FLUcyNDAwMDcsRUctTE9FLUcyNDAwMDgsRUctTE9FLUcyNDAwMDksRUctVVBFLUcyOTAwMDEsRUctVVBFLUcyOTAwMDIsRUctVVBFLUcyOTAwMDMsRUctVVBFLUcyOTAwMDQsRUctVVBFLUcyOTAwMDUsRUctVVBFLUcyOTAwMDYsRUctVVBFLUcyOTAwMDcsRUctVVBFLUcyOTAwMDgsRUctVVJHLUczMDAwMDEsRUctVVJHLUczMDAwMDIsRUctVVJHLUczMDAwMDMsRUctVVJHLUczMDAwMDQKKzEsVHVlIDI1IEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyLFdlZCAyNiBKYW4gMTEsMC4wMDEyMjI3ODUzNzU0MjQ4MDQyLDIuNTEwNTEwNDY4ODQ4NTA3RS00LDEuOTQ1MTI1MjQ1MTQ0OTIyM0UtNCwwLjE1NjgzMDU4NjQ5ODQyMjI3LDcuNjU0MzU3ODI4OTYxNDdFLTYsMC4wNjg1NjYxNjg5NTkyNzExNywyLjE5MjE0OTM4OTM2NTMzNTRFLTUsMC4wMDExMzIwNjY3NjYzOTE2MTI2LDAuMDMwMDI2ODUyMjQzNjQ1NzE0LDAuMDIzMDQyMTY0OTQzMTQzMjA2LDkuMjgwMzE5MzczNzU0MzgzRS00LDAuMDAxMDA2NTExNTE5MjA2OTI1LDIuMDQ2ODY5MTIyODc1NjEyRS05LDQuMTI4MDA5NTAzMTIzMjk4RS00LDAuMDAzMTgwMjIxMjc2NzEyOTU4LDExLjQ4ODQxOTY2NjU2Mzc1NiwwLjIwMTMzODM2NTAyMTAyNDcsMS4xMjQ3NTg2NjY1NzUxNTQxRS03LDIuMzcwODY2MDQ1Nzc0NTYyOEUtNCwwLjA3ODk4NDAwMTAwOTA2OTM4LDUuMTY1NjQ3MzI5NDQ5MzMyRS04LDEuNDQ5MTgxNDczNTkyMzgwOEUtNiw3Ljc0ODkzNDUwMjc4MTQ4N0UtNCwwLjEyNDE1ODkyMTQ0MTU0NDA4LDAuMDY0MjM1NDg3OTc1MjQ2MzYsMy44NjYyMjk2ODg3Mjk4MUUtOAorMyxUaHUgMjcgSmFuIDExLDAuMDA4ODQ5NjUzNjkyNjQ4OTQsMC4wMDM1Mzk5MDIyMTAxNjYyNjUsMC4wMDMxNzQ0MjY0MjY2NTc1MjkzLDAuNzU0ODAzMDA2MzM4ODA3OSwxLjQ2OTk1Mjc3MDI1NjYzMkUtNCwwLjQ0NTc5NjExNjA5MzU0MjIsNC4yOTY1NjMyMDUzMDQ4MjZFLTQsMC4wMTk5MzA0MDY5MTQxMDI1NiwwLjIwMjE1NTYxNzAwMzQyOTc0LDAuMTcxNzY4ODQxODM2MjczMiwwLjAxNDkyMTAzMTQyMjE2NjUwNiwwLjAxODc4MzMwMDE5Mjc4OTQ2OCwxLjIxMDYyMDMxOTgwMzcwOUUtNywwLjAwNzI3NTU2NTE1NjMyNzg1NTUsMC4wNDQxNzc2NTIxOTQ0NzM1MDUsNDMuMTkzMTkyMDI1NDc1MzMsMS40MDg5NTExMDI3NTgwNTM3LDUuMjg3OTMyNDUzNjEyNjg0RS02LDAuMDA0MzEzMTc2NTIwODM2NTcxLDAuNTQyMjUwNDAzNDE0MjEzOSwyLjM0MDcxNzY5Mzg0NzE1MzdFLTYsOC4xMDExMzgyMjIxNzIwMjZFLTUsMC4wMTM0NDE0NDY0MTI4NjEzMjYsMC44NzA2ODExMjcwMjcwNTc5LDAuMzY2Nzg3NDcyNTc2OTE3OSwxLjg5NDY0OTIyOTc5MDE2NDhFLTYKKzQsRnJpIDI4IEphbiAxMSwwLjA1ODkyMjg5MzQ4NTI4OTczLDAuMDI4MTEyMzkzNTY3NTQ2OTA4LDAuMDI4NjU2NDQwODEyNDMyOTM1LDMuNjQ3MjMwMzk2OTE4MzU1NSwwLjAwMTU2Mjc4ODA3MzUyNTg4NjIsMi43MDc5Njc0ODY1MjY5MTE3LDAuMDA0NjgwMTQ0MTkyNDYxNTA2LDAuMTk0NzQwMTAxNzA4MDIxMjIsMS4yNzIwMTgzMzEzMzQ5OCwxLjE2OTk0NDk1MDg3MzE5MjMsMC4xMzMwMzU3MDczMTAwNjQyMywwLjE5NDI0Njk4NzY2MzE1MzUsMi4yNjcyNDA5MDQyOTI4MDU1RS02LDAuMDcxMTE3NzYwMjUxMTUzODgsMC40MTA2MzI2MTI5NjEwMjM1NSwxODguNDAxODI2MDA4ODAwNCw5LjEyMDkxMzQ4MjIzODM1Niw3Ljg3NzMzMTQwODIzNzI4NkUtNSwwLjA0MzU5ODk2NzU1OTg3NjAxNiwzLjQ1NDQxNzI4MDY2NjE4MSwzLjQ5MjcxMzg1MzIzNTI4ODZFLTUsMC4wMDE0MjM4NjE2NDMxMjc1MTQ4LDAuMTI5NDU0OTQxNzY1MTEzLDUuNjQ2ODIxMjY0OTc1MzIzNiwyLjAwODE2NDIwODk1MzA4NjIsMi44Mjg4NDc0OTQ0MTkyODkyRS01Cis1LFNhdCAyOSBKYW4gMTEsMC4zNjM1MTIzMjgyNjMzMzg3LDAuMTg4MDI0NjQ0NjIxNDk5MTgsMC4yMTEwOTMyOTkwNDc2NTI4LDE2Ljg0NTkxMjM0NDE1NzU5LDAuMDEzMzc3NzYzOTAwMjc5NjI0LDE1LjMwMDAwODc3NzA4NzU0MywwLjA0MTEwNDk2Mjc3NzQxMzYxNCwxLjU0NTg0MzY5NzI5MDYzNiw3LjQ2NjkwNjY5MTU1NDYzNiw3LjM2MjE4NjM3MzM0NzI2NTQsMC45NzIwODIzODUyNDAyNzM1LDEuNjIxNTc4MTY0NzUwMDEzLDIuODI1MDAyMzA1ODY4Mjk1NkUtNSwwLjU2NDM0OTExOTExNDMxOTQsMy4yMDA1MjA0MTE1OTk2OCw4MjYuMjU2ODU3NjM2NTAzNiw1NC43ODgyMDUyOTQ5NTkzNCw3Ljk0MTUyOTMyODg3NTc4NEUtNCwwLjM1NzM0MTUyMzExMzM3NDk3LDIwLjQ0MTc2MzAyNDE3NDI4LDMuNTU4NzkyMDU2MDgzNjc1RS00LDAuMDE2NjY0MjMwNjc4OTcxMDQ1LDEuMDE0MzUxNTMyMzc1NzQwOCwzMy45ODUyNjM3NDczODI5MSwxMC4zMjMyMDYxMjgzNDA5NTEsMi44MDYyMzY2MTQ3NjU5MTk1RS00Cis2LFN1biAzMCBKYW4gMTEsMi4xNDI4OTQ3NjY1Mjk4NDksMS4xNTU3NjYyMDM2NDEyMTg4LDEuMzk1ODc2OTEzOTkwNTU4NSw3Ni4xMDg2NDQ0NzQ5MzE2NCwwLjEwMTY1ODk1ODE1NjE4NjUsODIuODUwMTMxMTY1NTA1NDcsMC4zMjA2Nzc3OTk3NDQwMDg1LDEwLjk3MDYzNDk1NDU3MTUwNyw0Mi4xMjcyNDcyMjQ1OTQ4NCw0NC4xNzE0MzUyNjcxMDEyMjQsNi40MDI5NTY1NTIxNTM2NDcsMTIuMDM3NzU5OTAwMzAxMzcsMi44NTc2ODY2NjE5MTg2NTM0RS00LDQuMDAxMzY2ODY2NzQxOTg3NSwyMi41NjA1MzYyODcyMTEzMSwzNjI4LjI0MjQ0NzY5NzIzMjQsMzE0Ljc0NDcxNTg4NjEyNDIsMC4wMDY2MzU4MTk1MTMxNTQ4MDksMi42MTM1ODM3NTQ0NzA0Njg1LDExNS44MDA5NjAyOTc3MDI3NywwLjAwMzAyMDA5MjY0NzI1MjYwOSwwLjE1ODczNDE1ODU3MDYyNDIzLDcuMTEyMzk4OTkzMjg2MDIsMTk1LjY1MzY5NjA5NzEzNjEzLDUxLjI1NjIyMjI2ODY0NjMxLDAuMDAyMjc4NTM0NzkwMjQ0MDEyCis3LE1vbiAzMSBKYW4gMTEsMTIuMjU3NzE2NDIyODMwMDQ3LDYuNzYwMDUwMTI0MDMyNjA0LDguNjMzODE5MTc4NDQ5ODc2LDMzOS45MzExNTIyODY0NDk2LDAuNzE1OTE0MjY2NTEwODg3Miw0MzYuNTY0NzE0MTE2ODIwNCwyLjMxODc0MTQ1NDM5NzQ2MTYsNzIuNTY0NTE3MzYxMTMyNjcsMjMxLjg1MDU2NzQ5OTYxMzEzLDI1Ni42OTc5MDAwNjY1OTEwNSwzOS42MDY0NzUyNTk0OTI0NTYsODIuOTA4NjM1OTM0NDI4NywwLjAwMjU0MzE2NTE0MDY4Mzc0MSwyNi40Mjg3NDc2MTcyOTM1NywxNDguOTY0ODkyNDk2NTM0NzMsMTU5MzMuMjk4ODk2MzA3NzMzLDE3NTUuMjM0ODQ0MzI0MzAzMSwwLjA0OTY4ODA2MjI4MjYyOTY4LDE3Ljc4NDg3MDcyMDU4NzQ1Niw2MzcuNDkyNDU1MDM5MDIyOCwwLjAyMzA1Mjg2OTkyNDI0NTMzLDEuMzMzNjA4MjcwMjcwNjY4NCw0Ni41MDcxODM2MzQ1MDEyNiwxMDkzLjg2ODUyMDA3MTQzMjgsMjQ5LjMzODM1NDI0MjI4MDIyLDAuMDE2NDQyMzQyNjIyNjUxMzk4Cis4LFR1ZSAxIEZlYiAxMSw2OC42Mjc1NzI4Mjg5MTEwOCwzOC4yNzY0NTczODg3MjYyMyw1MS4wNDMxNDIyNjYwNzQxOSwxNTA1LjQxMDI5NzA4MDkxNTEsNC43ODE3NjUwMjMzMDU3MjcsMjI1Ny43MTE1MzAxNjU1NjI2LDE1Ljg5OTU5NjAxNDQxMjc3LDQ1Ny4zNzQzMzcwMTcwODk4MywxMjU0Ljk4NzU1NTk1NzI1NzcsMTQ1Ny45MDM1NTk2MjA1MTUxLDIzNS4wNjEzMDIxODI1MTA5LDU0MS45ODk2MjE5Njg3NTA1LDAuMDIwNzQ0MTA0NzUxMDk4MzI1LDE2Ni4yNzUwNzY1Mzc0NTY1LDkzOS4yNTY1OTYzOTM1NTIyLDY5NTkyLjE2MDYyNDE3NDIsOTU3My4yMzk4Mjg2MDQyMzIsMC4zNDYzNjUxMjgyNjM4NzMsMTE1LjEyNTkzMDc5OTczMzk4LDM0MzcuNDI3NDAyNjI3NzgsMC4xNjQzNDAxNDczNDk5NDU0LDEwLjI5MzE1OTMzMjA4MzQyOCwyODkuODkwMDYwNjU2NTE2NCw1OTg4LjMzNDQxNzgwMjc2MywxMTk2LjczNzMwMjAyMTUyODksMC4xMDk5MDAyMzc5NTA0NDU2OQorOSxXZWQgMiBGZWIgMTEsMzc3LjY4NTg5NzgwMTIzOTQsMjExLjM3NDMzNzk5MTU2MDMsMjkxLjc5Mjc4OTg5OTIyODgsNjU0My4zNzkzOTkxMTUzODQsMzAuNzA4NDQzNzY4MTgzMDUsMTE1MDAuMjUxMjI2OTM4MzY4LDEwNC44MDI0OTc4OTY0Njk0LDI3ODIuMzExOTAwODI1NTI5NCw2NzA1LjEwMTgwNTU1OTUxOCw4MTI3LjU2NjU5NDcyODM4LDEzNTMuOTQyOTgwODAxNTM1NCwzNDA3LjU2MTU1NTE3MDQ2MiwwLjE1ODc5MDkyNjUyMTYxNTI1LDEwMDkuNDk2MTcwMTQ1MDU1Nyw1NzE0LjM2NDg4MTkyNzcxOSwyOTQ5ODUuMjI5MjM2MTQ2NCw1MTAwNS42MjYxODQ2OTQ5OCwyLjI5NTcyOTQzNTgxMDg3NTUsNzE3Ljk3NTgzMDcxNjIzODYsMTgxNzEuNjA2OTkxNDMyNjEsMS4xMTcxMTM4MzIzNzI4OTgsNzQuNzA1Mzk4ODM5NzQyNDQsMTc0NC40Nzk4MzY1MDgxNzE3LDMyMTkwLjQ4MjAyMzA4MTk3NSw1NjU3LjE2Mzk1ODM5NTkwOSwwLjY5NjM4Mzc0MTEyNTk4NTEKKzEwLFRodSAzIEZlYiAxMSwyMDM5LjE5MTM5NzU0MDM0MzQsMTEzNS4xNjQxNDIwNzA2OTgsMTYxNS4wOTQzNTUwMTI3NDQ1LDI2NDcyLjMwMjY0NTAyNzkyNSwxOTEuMTgzMjgwNjkxOTU2OTIsNTczOTcuOTQzNzA0Njg1MTgsNjY5LjkxMzYzNTM0Mjg1NTYsMTY0MzkuNTgyNzU4OTIyMDA2LDM1MjM0LjI1NjYzMTkwNDM1LDQ0MzY4LjAxMDgzNDM4MTA3LDc1OTEuMTQzMzk1NTkwNzg5LDIwNzQ0Ljk5Njk5NzQ4NzAwNCwxLjE1ODQ4MDczMzI4MzA1NjUsNTk1Ny42NTU0NzM2NTY2MiwzMzU0Ny4wODM4NjM1MzQzMywxMDk2NjQ0LjUzOTEzNDk3MTMsMjU3Njk2LjQxOTE4NjAzMDIsMTQuNjUyODc4NDczMTQxNzg4LDQzNDAuMTA0MTc1ODk0MDQ1NSw5MjQzMC45Nzc1MDE0NDA5OCw3LjMzMTk4MjQyODExMDU2Nyw1MTcuNTAyMDM3OTUzODgyNiwxMDIwMi4xNzg1MTEzMjEyMSwxNjgzNDEuMzY2NjE0Nzk1NCwyNTYyOS40MDEwMjY1MzU5NzYsNC4yNDM0Nzc4NjA5MDcwNjMKKzExLEZyaSA0IEZlYiAxMSwxMDU1NC45MDg3NTkwMjg4LDU2NzMuNzgwNDUxMzkyMTg5LDgzOTguNTAxMzgwNjUyODYsODIwNDQuMDgyNTYxMjU5MDQsMTE1NS4xNjYwODcxNDg2NTI3LDI3MDk5NC42NTIzNjY3NTEwNSw0MTY4LjQ0OTI3NzM2OTQxOCw5MzYyOC41ODIxMTI1MTIxOSwxNzY5NjcuMDQxMTg5MDMzMjIsMjMwNjQ2LjIwNTk5NzQ5NzUsNDA0OTguMjgxMDI2ODY4MzQ2LDEyMTM1NC45NDMwOTI0ODI4LDguMTMyNjIzMDAwOTc2Njk4LDM0MTAyLjU1MDY3NDYzMDk5LDE4Mjk5MS45NzA0MzUxODYxMSwyNTYxODE3LjQ4NTMyOTkyOTMsMTA2MTczNy44NDE1Nzg4ODY4LDkwLjU1MzUwMjQ3ODExNDQ0LDI1MjU0Ljg4NzgxNzI5OTU3LDQwODc4NC44NDM4MTIzODU5LDQ2LjcyNzY3MzExNTc2OTQwNiwzNDQ4LjYyMTc5ODc4Nzg3NjcsNTc2OTMuMjg4OTY0NTE3OTcsODA3ODY2Ljc4NTk2MDk5NjIsOTg1MzUuODYwMzQ1MzMyNjUsMjQuOTUzODMzNjcwMTAxMzA0CisxMixTYXQgNSBGZWIgMTEsNDcyMDkuNjUyNTY2MTEzNTc1LDIyNjI3LjIxMTczNzI4OTE1LDM1MTQzLjcxNzQ2NzIyNTE0LDEyNjg2OS4yNDc0NTQwNDc0Miw2NjY4LjkzMzQ0NzQ5NzA5NiwxMDYwNTQwLjE4NTQ0Mjg5MDMsMjUxNTcuMjkwNDQ5OTA2Mzc3LDQ4Mjc4Ny4yMTc5NDcxMDI4NSw3NTM5NzMuNzc1NTc2ODg1MiwxMDAyMjkzLjkyMzI0NTk0NDQsMTgyMzY5LjAyNTU0MTgxMTA4LDYzODk3Mi40NTY1OTA2NjEsNTUuNDE1NDg4MDM5MjY2MDY2LDE4Mjk0OS4zNjc2ODg5MjkzLDc2MjIzNi45NzIxNTk5MTI1LDIwMjcwMTIuNzg5ODU0NzQwNywyMTY0Mjk1LjM4Njk5ODQzODcsNTM5Ljk4MDUxMzcxNTE4LDEzNTk2NS40MjcyNTg3MDcxOCwxMDgwOTgzLjMzNjE0ODY5NDQsMjg4Ljg2ODcxNTI2NTQ5Mzk2LDIyMTM5Ljk2OTQyNzA1ODEyOCwzMDA2NDcuOTI2NDQyMDM2MDYsMjc4OTc5MC4yNTI3OTExMDEsMjIzNTQ5Ljk1MDEzNjMxMDYsMTM5LjI0MTU1MjY5ODIyNDEKKzEzLFN1biA2IEZlYiAxMSwxMjU5NzkuNzAzMzgxODQ3Myw1NjEwOC4wNTcxNDM3NjQ4Niw3MTczMC4xNjAyOTg3NTg3NCw2NDc5MC45NTYyMDkxOTEwMywzMzk2OC40NzU4NDAzMjI4LDIyOTA1MzMuNDAwODA5OTQzNywxNDI2MjQuNDY1NjEwODI5NCwxNjg0OTUwLjUxNzc1NjAwNTcsMTc5Nzc0NC4yMzE0NjU1MDkyLDIzMDcxNzcuMDcyNzI3MTA2LDQ1MzA0OC41MjU1MjQ1NzY3LDIyMjgxODYuMTU3MzQwMTMzLDM2Ny4wNDcwMDExMjAyNDk2LDc3Mjc2MS44NzU2ODM0MTE2LDEzMjg4MzYuMDY4Nzk5NzIsMzUzNzgzLjA4NjQ5MDM5NDUsMTAzMTA3MC43NDkxMzczNTI5LDMwNTcuMjA2NjY2Njk4MDIxOCw2MDY3MjIuNjQwMzY0MTYyLDgyNDYyNS4wMjI3Njk0MzYxLDE3MTQuMDgxODA0MzA0MzE5NiwxMzMzODUuMjc3NDQzMDk1MzQsMTE0NzYyMC41NDI0MDIzNjk0LDM2NzIxMzYuNzQ0MTEzMDI1NywxNjA2MjYuMTQyMTQxMTM4MjYsNjY0LjM5NDcxOTY2ODA0NDIKKzE0LE1vbiA3IEZlYiAxMSw5NzE4Ni43Nzc3NzIyMzcxLDgzMzcyLjk4NzMxMTAwODY5LDM0MjU5Ljg0Njc5ODAwMzMzLDEwMTQ1LjcwMzY0OTUzNTEyNiwxMTUzOTIuNjkwMjg5MTUyNDgsMTM1NzYyNi42ODAzOTYzOTM0LDY5MTk1MC45NjEwMzE1NTU5LDE5NDM4NTIuNjEwMjgxNDYwNSwxMTI4NDkwLjg0MDYyMTgwNjIsMTMwOTM2OS44OTg5MDExODY3LDMwMDcxNS40MjQ0MDEwOTYxLDI0NzExODEuMTIzMDc3MzU0NCwyMzM3LjkyNjUzMDgwNzY2NTYsMTQ4NTIyNy40MTEzMjg1NjA0LDQ2MjU5MS44MjQ4ODg0NjM5NSwxNjY3OS42NjA0NjE3OTYxNTcsODY2NzEuMTE1MTg4NTQwODUsMTYzMTguMDU3MzgyMzY1OTA5LDE2MTA4NzIuNDE5OTQ5MTM5MiwxMTA4NjcuMTAyMjc3MDQwODIsOTc0Mi4xNDY3NDUxMzA5NDksNjY4NDU0LjIwOTg5MjA4MTgsMTY5MjI1MC4xOTcxNDYyNTQsOTM3MzUxLjM5MTc3NzIwMzgsMjMyODQuMTkyMDg5MjI0MjYsMjA3Ny40NTc5NTIyMjI3NTczCisxNSxUdWUgOCBGZWIgMTEsMTMzNzIuMjY1NzUzNTA4Mzg5LDY5MTg4LjM5NDc4MDA1NjI3LDI5MTcuNzI5NTkwMzU3NTcyMyw1NzMuOTU2OTk2MzExMjA4NSwxMzQ3MTQuMzQ5MTMyNDc3NDgsMTQ4MzMxLjk5MzAzMzM3MjIsMjE2OTkzMS4zNTI5MTEyMjEzLDM5MzY0My4zOTM1NzkzNjA0LDEyMTg3NC41ODMzODE0NzU0MiwxMjY0MDQuODk5NTQxMjQ1MTksMzUyMzMuNjI4MzA5NjU2NDcsNDcxOTg1LjI5NDk0ODc5NDUzLDEzOTU1LjI4NjYwMDgyNjIxLDYxMjU0My45ODU0NTEwMjA2LDI4MzMyLjU5NDc0MTMxODY4NCw2MjguMzcxNzc4ODMwNDAyOCwyNDY2LjkxMDIxMzA0NTkzNTUsODExMzkuMTgwNjMyMjMxMDMsMTI1NTI0OS41MjQ4ODU3OTg4LDM3MjEuODI4MTIxNjMwNTA5NSw1MzA2Mi44NDk5MDI0ODMxNTQsMTg0NTc2Ni4zMjIyNTY4Mjc1LDQ3NjUzOC45NzA5MTEyMDcyLDQ2NDgxLjgyMzMzNTU4NDMyNiw4NjQuMDEwNDkwODU1Njg2NywyNzg4LjgxOTgxMjE0NjA5OAorMTYsV2VkIDkgRmViIDExLDQ2OS4wNTg2NjA4NDczMjg1LDIzNjEwLjg1ODAwNjEyMDk1OCw4My4zNDkzNTg2NzMyMTY1NywyNy43MDg2NDg5MzU5MzczMSwyODU2NS4zMDc5NDExNTk2OSw0NjMxLjA1NjA2MTQyOTAzOSwyMjA3NTg1LjkwNzk0MTQ0MTUsMTYzMjYuMjQzODc0OTUxNzk3LDM2NjYuODk0MjcyNDc1NDU5LDM2MjguNDI2MTc2NzgzMjk5NSwxMTEwLjYyMzEyNzEwMjk5ODUsMTg4MjAuNDEzNTI3OTA4ODE1LDczNjAxLjMwMzE0OTk2OTA2LDQzNTU1LjY5MDk0Mjk0MzY4Niw3MzQuMjEwNjg0OTU0ODYyMiwyNTIuOTgxNTEzNzc5MjA1OTgsMjIxLjU1OTY2NTc3MTUyMTA4LDMyNDI4My42Mzg3NzMyNDA2LDE3NDQxOC4xODU4MzM2ODg4NSwxNjUuNTE0MDQ5MjIzMzcyMTMsMjY1Mzc4Ljk3OTI5MTY3NTE1LDEzMzMzNjcuMDY3MDM4MDI2OSwyNDg4NC44MDI0MDgwMzU4MywxMjg0LjgxMzk1MjE1OTEyOTMsMzcuMzg2MzgxNDg1MzkzOTI2LDk4MC40MzAzNDE3ODgyNjA4CisxNyxUaHUgMTAgRmViIDExLDIwLjQxMTE4NzQxMDI1NzQzMywzMjExLjk0NzczNTU2NzY0MTgsNy4zNTE5NzM5MDg3OTA4MjA1LDEyLjUyODkwODQzNDcyNDc0MywxMjI4LjM0NTkyNjk0NzYyNCwyODIuNTEzMzk5MDM5NDA4MywzOTc2NTcuMzI1MjUxODQ2Nyw0OTMuMzIyNzcyOTIyMDA1OSwyMTguNTQ2NzA2Mzc4ODM3LDI1NS4wNzY5Mjk3NTA3MzU5Niw1OS4wNDk0NTY0NTYzMDcwOCw1ODguMDYzMjI1NDEyODYxNiwyOTY2MzQuNTIxNDQ4MzQxODQsMTE0Ni4zMTI1OTMwMTM1NzYxLDExOC4yODM1NDYzNjM2MzQ0NiwyNDEuMTA2MjEwNjk4Njk4NiwxNzYuNzc5MjQ5ODUxMDIzNTQsNjEyOTg4LjMzOTk1NjYxODEsNjAyMS42NDM4ODMyNDg3NDcsOTcuNTcwNTg5NTg2OTY2NjMsMTAyNTExMC4wNTY5MTc4OTksMTYxMDI3LjgyMDY5MzkzNjcsNjYxLjkyOTA1NTE5Mzc3MDUsMzM5LjY3MTA4NzI2NzI0OTg1LDIwLjc3MzgxMzMwNzgwNDM3OCw3NC43NTQzNDQ0NTI0NzcxNAorMTgsRnJpIDExIEZlYiAxMSwxMS40NDE3MDc5MzY4MDg0MDgsMjQzLjYxMTIxNjQ5MjY3ODQ3LDUuODUxODA0MjM4MTg3NzM3NSwxMS45Njc5MTU3MzI2MjgwNTcsMzYuNDA2NjcxMDY4NjQzNDksMTk4LjIxNzQ2NzcxNDI1NDksMTU0NTguMzcyNTc3MjQzNDQ4LDE4MS44NDg5NTczMjcyMDA0LDE1My4yODA0NzkyNjgzNjU5NSwxOTEuMDg5MTIxOTM5MDUzODUsMzkuMDE5MjI5NDQ4Mzc5NzU0LDIzMy40NDg2OTQ4NDYwODIwOCw1NTM4OTQuNDY5MzI3Mjk4NSwxMzguMzM2OTAxMDc0MjM0MjgsMTA1LjU0ODk5ODQ0OTU1Nzc3LDIzNi42NTYwNzQxMjYwOTY5LDE3Mi45MTc0MjIzODIwODI0NCwyNTUxNTMuMTc0MjQ5NTUyNjYsMjU4LjA0MDMxMzIwMTk0NDU3LDk0LjY3MjQ5MjAyMjA4NDAxLDE3NDQyMzEuNjY4ODAzMzg4Nyw1MDMyLjQyNzc5ODAxNDc2NiwxNTAuNzkwMTczOTEwNDY2ODgsMzE3LjE0MTA0ODk1MjcyMzE3LDIwLjEwNzgyNzc4MTc1MTg2LDIuMjE1MzQ2Mzc5MDQ2NDMyNworMTksU2F0IDEyIEZlYiAxMSwxMS4wODMxMDQ1ODk5OTAzOCwyMS43ODk0MzM4NDcwOTQ5OSw1LjcyNDA5MDA2NDE1ODc5MTUsMTEuNzQzNjk4NTE5OTU1OTU2LDEyLjY3NDgzMzIxMDg5NjgxOCwxOTMuMjc2MjUwOTg3MTA2NDcsNTEwLjc4Njk2Njg3Nzk5NzMsMTczLjIzMzIxMzg3MTE1MTksMTQ5LjQ4MzI5MTE2OTg5MTAzLDE4Ni42NzQwMTY3MDUwNTI2OCwzNy45ODg2MTc3MjQ4NjYxOSwyMjMuMTg1MTg2NzQwODExOSwyMjU0NjkuMzM5ODI5MDQ1NDYsMTE4LjQwMDI4NDc1MTY1MDE1LDEwMy41MjA5NTM1NDA3MzM2NywyMzEuOTI1NjcyMTA2MTQyMzcsMTY5LjY5NTc5Njk0MzM5MDUsMTgzOTUuNjE2OTIwMDE0NTU2LDE0Ni43NjM5OTE0OTEyMzA0OCw5Mi45NDkxMDIwNzYxNTc5MSw2MTg3MTUuNTA5MDgyNjg4NCwyNDkuMTQ4OTEzNjE5MzU3NCwxMzkuMjY2NDQ1Mzg2MTY1MDYsMzExLjI5MDM3MzgwOTA3NDYsMTkuNzQxMzAzODQ4NTk5ODEzLDAuMjk1OTkwNDAwMTAyMDg5NDMKKzIwLFN1biAxMyBGZWIgMTEsMTAuODgzNTgxMzgwODM1NDE0LDEwLjY4NDQzNDA1MDYxODAwNSw1LjYxNzUzMjMxMjA3MjMyNiwxMS41MDc1MTg0ODY5MzYxNjQsMTIuMDM4MDk3MzAyMjc5NjE1LDE4OS43MjQ0NDg3NDc4NjIyMywyMjAuMDU2Nzc1OTY0MzY4NjgsMTcwLjA4NDIwMzQ2OTcyNTEsMTQ2LjczOTAxMjE3OTk4NzkyLDE4My4yMjc2MzA4NTEwMTQxNywzNy4yOTM1ODI5MDU3NDE0LDIxOS4xMzQ4NzYxOTcwMzAxLDE1OTE1LjE0OTA0NTMwODczMiwxMTYuMDI0ODQ3MjczMjI4NDksMTAxLjU0NDMyMzQ2ODUxMDc3LDIyNi40MjM3NTg3NDgyNDc2LDE2Ni4wMTg1NzE5MTY1NzE3Nyw0ODYuNzQ5Mzc2MDg0OTkzNSwxNDIuMjI5MTczMzcwOTIyNDcsOTEuMDIzMDk1NDQ3MTkwNzYsMzg5MDcuNjM0NDA2NDQwMjYsMTU5LjQ2NTIxNTY2NjI5ODU4LDEzNi42NzYxNzg5NjM2MTYwNSwzMDUuMjAxNzAwNjkwMzc4OSwxOS4zMzUwNjgyMjM3MzUwNDYsMC4yNTUwMjMwMTkzOTYyMDQ1MworMjEsTW9uIDE0IEZlYiAxMSwxMC42NjAzMTEwNzQxMDY0NTMsMTAuMDU1OTk1MzYyMDk0MTM5LDUuNDk1ODIxNDk1NTU2ODk1LDExLjIzNTAxMzE2NzIwODE1LDExLjgxODg3NzQyNDU5MjAyNiwxODUuNzEwNzcyNzgyMTkxNTMsMjExLjEwODgyODI0MTk1MjkyLDE2Ni42OTE0NDU0NDU2NzU5MiwxNDMuNjMyMjk3MjY3ODY4MzgsMTc5LjMwMzk2MzQxODE4NzkyLDM2LjUxMTE0MTA0NzgwMTgxLDIxNC43NDE4OTUyNzA2NDkwOCw0MTkuMjA2NDIxNTg1NjU3MTUsMTEzLjgzNzYwNzc2MDQ4MjksOTkuMjU1MDQ2MTk0NTA5MSwyMTkuOTQwMzg3NTI0OTYyOTQsMTYxLjY4ODM2MzI5NjE5ODIyLDU3Ljk4ODY2OTgwOTQyNjQzLDEzOS42NDE4MDE0MTc2MTM5NSw4OC43NjA5ODc4NzQyOTUxNSwxMDE2LjU0MDQyODI3NDg2MDMsMTU1LjEzMzAyMDU4OTIxOTIsMTM0LjAyMzM4MzA4NDUxNDkzLDI5OC4xMDk5NjMzOTI1MTc0LDE4Ljg1OTUxOTYwNDMwMDcsMC4yNDk4NzQ0ODk5Njk3NzE3NworMjIsVHVlIDE1IEZlYiAxMSwxMC4zOTkxNzM2OTA4ODEyNTQsOS44NDYyNjIwMTM4NjMxNjQsNS4zNTI2NjgxNzE1MTkxMTgsMTAuOTIwMDQ4MzgxNzA5OTM4LDExLjU4Mzk5OTg5NDY2MDM1NSwxODEuMDEzNDAyMzU5NjYzNywyMDcuMjc5NDk3NTE1MDA0MzgsMTYyLjczMTM2MzA3NTM1NSwxMzkuOTkzMzcyODUwODg5NCwxNzQuNjk1MTI5NzkwMzgxOCwzNS41OTg2OTM1NzgxOTE5OCwyMDkuNjEyNTA5MzczODg0OTYsNTEuODkwMDk1OTIzMjY4MTg0LDExMS4zMTc1NzM2OTg2ODY5MSw5Ni41NTQ3MzM2MjkyMTc0OCwyMTIuMzY1MDY3OTAzMjcxNTIsMTU2LjU4NDI3MzUyNTE2NDE1LDQ5LjUwNjcxODMwMTAxNzI2LDEzNi43NjQyMjQ2MzUyNDk4Myw4Ni4wOTI5Mzc2MzEwNjA0MiwxNTkuMTA2ODI5MDQ0ODg2NzIsMTUyLjMwNDc2MjYwNTIzNTYsMTMwLjkzOTYxNjIxNjU5MDE3LDI4OS43NDA5MDc2NDYwMzc4LDE4LjMwMzgyOTAzOTUxNjMyNywwLjI0NTIwMzM2MTQyMzczNjMzCisyMyxXZWQgMTYgRmViIDExLDEwLjA5MTE3MDQzNjM2OTQ2Myw5LjY1MDQ3NjgzNDcxMDQwOSw1LjE4MzcyMDg2MjA2NDEwNSwxMC41NTA0OTkxNjkzMTM1OSwxMS4zMDk0MzQyMzE3MTM5MDEsMTc1LjQ2NTEwMjkyMDQxOTcsMjAzLjEwMDEwNDAzMDg0NTMzLDE1OC4wNDg4MTk2NzYzNzMyMywxMzUuNjkzODk0MzAzMjM5NzcsMTY5LjI1MTYxNTkxNTI1MzYsMzQuNTIwMjcxMjQ1NDUxMDg0LDIwMy41NDY4NjI4MDEyMjQzNCw0NC41OTI4OTUzNzQwMjQyOSwxMDguMzQyNTA4MzQ0NzQwNjUsOTMuMzcwOTIwOTE2NzIyODcsMjAzLjU3OTE5NjEwMDUzMjQ0LDE1MC42MTc3NDg0OTc1ODI2NSw0OC41MTA1MTUwNzQ2ODk5NywxMzMuMzg1NTM4ODU3NzU4MzgsODIuOTYzNjA2NjI1MDE3NTksMTQxLjQxMDc4NjcxMjk4NTUsMTQ5LjEyMDI2MjgxMDExMjYyLDEyNy4yOTQ4Njc2NTc5MDY4NiwyNzkuODg4MjE1MzQ3MzUzNzYsMTcuNjUxOTk0MzUzMzM0ODksMC4yMzk4MzI4NjU3MjA1MjQ2MgorMjQsVGh1IDE3IEZlYiAxMSw5LjcyOTM2NTc2Mzg0Njk1Miw5LjQyODY5MDAzODY5NDYzNSw0Ljk4NTc3OTAyMTY0ODg1MSwxMC4xMTIzNzkzNTIzNjI3NywxMC45ODQ3OTU0NTA2NTM3MDUsMTY4LjkyNzA0MzMwNTcxMzU0LDE5OC4yMDQwMDU5NTMwMDMxLDE1Mi41Mjg1NzE4NDA0OTYwMywxMzAuNjI4MjkyMzQ3NDA5NywxNjIuODU4MDE3MTQ0MzczNiwzMy4yNDM2ODg4MDAwMjgyNCwxOTYuMzk0MjQxMjM5NDUyMzYsNDMuNzAxODIzMjgyNzMwNDksMTA0LjgyOTk3ODEwMDY4ODgzLDg5LjY1MjgwNTc0MjYwMDA3LDE5My40ODQxMzY5MjAwMTU0NiwxNDMuNzM4OTg4NzM1MzMzMTUsNDcuNTk2NDgxNjcxMzk0MDEsMTI5LjM4NzIzNjI3ODY4ODg3LDc5LjMzNjUyNzQxNTk5Njc3LDEzOC42ODA3MDcwNDkwNDYyNSwxNDUuMzcwODAzNzA1NzEyNTgsMTIyLjk5NzQyNzM1NDA3NjEyLDI2OC40MTA1MzQzNDkwMDI2LDE2Ljg4NzY1MDg2NzMxMzY0LDAuMjMzNDMwMjMwMjMxNTA3NjMKKzI1LEZyaSAxOCBGZWIgMTEsOS4zMTA2NzA0MTU1NDczNTMsOS4xNzI5MzQzNjU5NDcwMTgsNC43NTc5NDk2NzA5NDE0Mjk1LDkuNjEzNzQ4MjA5ODYzMTA2LDEwLjYwMjk3ODYyMDEyMzcyNSwxNjEuMzg4ODg0ODU2MDkzMDksMTkyLjQxNjUwNDMxNjc5Nzc2LDE0Ni4xMjQxMTY4NTE1NDM3NiwxMjQuNzg4MzU2OTk4MjIzMTIsMTU1LjQ5MjY2MzYwNzY1NzgsMzEuNzcxNjE4NzIzNjM0ODgsMTg4LjEwMDgyMzMwNzY1NTg3LDQyLjg3NzA1NjgwMzQyNjE4NiwxMDAuNzMwMDkzNzM5MzEyODksODUuMzkwMTg3MDM1NzgyMjMsMTgyLjIwMjcxMjY1NjE2OTcyLDEzNS45Njk5MTg0Njg5NjExLDQ2LjU0MzA2NDgzNjIzODYxLDEyNC42OTczMTYzMzg5NTgyNyw3NS4yMTk2MjA4NzEzMTc5NCwxMzYuMDM2NjMzNDU4NzA3NDYsMTQwLjk0MTEzNTQwMTI0Nzc4LDExNy45OTY3OTI5MzE0MjkyNCwyNTUuMjkxNTgwMDQwMjc4NTIsMTYuMDIwMjYwMTQ3MjkxMDYsMC4yMjU4OTc5MDA0NDc2MDQ3NworMjYsU2F0IDE5IEZlYiAxMSw4LjgzNDc0Nzc5NTQ2MDMxMSw4Ljg3NTQ5NzExMzU4MTAzNSw0LjUwMDY5Mzg3MDU4ODAxNyw5LjA1NzcyOTkyODk2ODgxNywxMC4xNTk2NjgyMzE2Nzc4NCwxNTIuODU4OTQ1MjczMzQ2MywxODUuNjE1NjUzMDM0OTEzOCwxMzguODIzMzU2NDE1MTg4MTYsMTE4LjE4MDkzMzcwMjEzMDg5LDE0Ny4xNjc0MjEzOTMxODYxNywzMC4xMDUzNTU3OTI0OTkxLDE3OC42NTMzMTUwNzQ4OTA2Niw0MS45MjU4MzA4MzY2Mzc4ODYsOTYuMDIwOTEwOTk5MjYzODIsODAuNTk5MTgxNTgzMDkyMTYsMTY5Ljg3NzMyNDUwODAyMDgsMTI3LjM4MjI3NTEwNDAyOTQ5LDQ1LjI5OTY3NjI5NDMyMTQzLDExOS4yNzMwOTI0NTAzNTgzMiw3MC42NDQxODk1NzE0MjkyNSwxMzIuOTc1OTY5Mjk3MzksMTM1Ljc0OTMyNzcyNzExNzA4LDExMi4yNzU2MTI2MDk4MDMwNSwyNDAuNTk2OTkxNzEwMzcxMTksMTUuMDU2NTMyMzA5OTcwODY0LDAuMjE3MTIzNDg5NTcyNDg3MDMKKzI3LFN1biAyMCBGZWIgMTEsOC4zMDQ5Njg3MTIzNzg0OSw4LjUzMzM2MDA2ODUxNDAyNyw0LjIxNjQ0MzI0NzMwNTAzMiw4LjQ1MjI3NzQxMDI5NDg2Myw5LjY1MzkxOTgzMjI2MzE0LDE0My40MTQ2NzcyNDIxNDA3LDE3Ny43MzA2MDk5NDkwNTMyMiwxMzAuNjcxNzQ3NjMyNDQ5NSwxMTAuODY2MTg4MTQ2NzUxNzgsMTM3Ljk1OTI0NTIwMzY2MzA3LDI4LjI2MDM0ODUwMzY4MzUyNywxNjguMTEzMzY5MzU0MTkyNTQsNDAuODAyOTQ1NTUwMDA1NTcsOTAuNzE2OTMzNzc0ODIxNjQsNzUuMzMxNzM5OTc3MzMyNTksMTU2LjcyOTM3MzMxMTI2NjI3LDExOC4xMDYyNjIzNzY2NDE5Niw0My44MzI4MDg3NzE1NDE2MzYsMTEzLjExNDQ0NTAyMjQ5MTk4LDY1LjY3NDA0MDM2MTAxMzMxLDEyOS4zNjExODUyMDkzMDY5LDEyOS43NTMxNjAxNDA4MTE1NiwxMDUuODYwODkzNTkxNTIxNzcsMjI0LjUwMDcwOTUyNjYwODQsMTQuMDEwNjg4ODYzNzczMzA3LDAuMjA3MDc5ODk2MDEyNzIyMTEKKzI4LE1vbiAyMSBGZWIgMTEsNy43Mjc5MjU5MDc4OTE5Nzc1LDguMTM4ODYzOTk5MjE2MjIyLDMuOTA5MjQ2NzQzNDU4ODkxMyw3LjgwMzI1MTIzMDM0Mjc1MSw5LjA4ODU3ODIwMzYxMTQ0LDEzMy4xNjk4MjI1Mjk4MTY0OSwxNjguNzQ5NzQzNTA1Nzc2MDgsMTIxLjc2Mjg1MDMwOTI3OTA3LDEwMi45MzM0OTU0NzY4ODM0NSwxMjcuOTkxNzMwNjcwMDI1OTYsMjYuMjU1NzgyODU3NDk2MDA1LDE1Ni42MDE3NDM5MDg1MzE1LDM5LjQ3ODI3ODIzMjM5MjYwNCw4NC44Njk3OTAwMTYwNTYwNyw2OS42Njk5NTU4NDc2MzMxNSwxNDMuMDAyNjc5NzA3Mjc5NzUsMTA4LjMxNjczNDIzMzkyNTcsNDIuMTIwMjYxNzgwNzQyMTA1LDEwNi4yNjE5NDkzODc5MzUyNSw2MC4zOTY4NzA4OTU5MDQ3NTUsMTI1LjA5OTIwNjM0Mzc1NjQ4LDEyMi45NTIyOTk0NTU3NzM0Niw5OC44MjMwMTY1Mzk1ODY1OSwyMDcuMjY1NjExOTI2NTQ3NSwxMi44OTcxNjkwOTQxMjk4NDksMC4xOTU3MzM0NjEwMzY4NTk1CisyOSxUdWUgMjIgRmViIDExLDcuMTE0MzQ0NDI3NTU5NzI3LDcuNjk3NjA3ODgwODM2ODM2LDMuNTg1MjQxNjAxMDk5ODkyNCw3LjEyNzk1MDIwNTYyNDUwNiw4LjQ3MDYzMjkxMzcyNzEzLDEyMi4zMzY0NzMyMTAxMjI1MywxNTguNzMwNTI5NjcwMDU4NDIsMTEyLjI1OTMwNzc4MzExODY3LDk0LjU0NjY5MjE3MDk0OTUzLDExNy40NjYyMjA3ODU0NDQzMiwyNC4xMzUxMTU2MjUxMjEyLDE0NC4zMzIwNTQ0Mzc0OTQxNSwzNy45MzIwNzMwODgwNjI1LDc4LjU3MjY4OTYxMzAxMDM3LDYzLjczMDM2OTQyNzczNzA3NCwxMjkuMDM0ODI0Njk2NjU2NTksOTguMjMzMTU3NTY3MDUzMDEsNDAuMTUyODE0NDc1NzU0MjQsOTguODEyMzM3MTM2NDI5OTksNTQuOTI5NTM2MzcyMTA2Mjg0LDEyMC4xMjk3OTU5MTU3NTIwNiwxMTUuNDAyOTg5MDQ4ODM4MDQsOTEuMjgxNzQ5MDY1OTQ2NywxODkuMjU0ODEwMjk4NTU3NTIsMTEuNzQzNzExMzk2MDkyODQxLDAuMTgzMjUwMDE0Mzk0Mzg1NjUKKzMwLFdlZCAyMyBGZWIgMTEsNi40NzcyMDAwMjA4NTczNTUsNy4yMTMzMzgzMTU0ODk4MzIsMy4yNTE1MTkwMDM2NTYxOTIsNi40NDA1ODYxMzAxNjE1MzQsNy44MTA4MjIxMTkwMTMxMzgsMTExLjE0NTczNTg1NjA0MjEsMTQ3LjgwMTE5MTA4NjAyMDYsMTAyLjM1ODczOTMzNTc5NjI3LDg1Ljg4NTA3Mzc4NzU4ODAxLDEwNi42MTA4NTM1NDEzNTQwMywyMS45NDI4MjQwMzkxNTE1NCwxMzEuNTU5OTk2NjkxNzAxNTQsMzYuMTU2MTM3MTg0NDg0Mzg2LDcxLjk1MDAwNjcwMTY1MDIyLDU3LjY0NTUyNDA1MjM4NDY5LDExNS4xNDAzMDA3MTQ3NDc0MSw4OC4wODc2Mzg1OTQxNDE5OCwzNy45MzYyMjMzNzkyODI3OSw5MC45MDEyNzM3OTk2MzgxOCw0OS4zOTY4NzM2ODg2ODc4LDExNC40MzAwMjgxOTg4MTE3NywxMDcuMjEwODM2MzYzNjA0MTQsODMuMzkwOTA2ODU5MDA5ODksMTcwLjg3NDE5MTIxNzk3MTA2LDEwLjU3NTY0MDMyNzA4OTA3NiwwLjE2OTgxNTMzOTQzNTc2ODI2CiszMSxUaHUgMjQgRmViIDExLDUuODMwOTEyNzUxNzM5Mzc3LDYuNjkwOTI3NTY0NTI3NDkyLDIuOTE1NzAxMjk5MTM1NDE0LDUuNzU1MDk2OTIzMTI5MjQ3LDcuMTIyOTE1OTk2OTQyNzMsOTkuODQ2NDI0NTM4MjUzMSwxMzYuMTU1NjkyOTQxODE4Myw5Mi4yODM2NjE4MTc4MzI1NCw3Ny4xNDE3MTYxMDc3Mjg5MSw5NS42NzEzNjA0OTQwNjYyLDE5LjcyNjQ4MTkzMzMyNDgxLDExOC41NzIxMDIzNzE0OTEzOCwzNC4xNTU4MzAyNDcwNzkxNyw2NS4xNDg2MDY5MTYxODk5NSw1MS41NTUxNDcwMTAwNTk5MDUsMTAxLjYxMjkxNTIyODQ5NTUyLDc4LjEwODkzMTAyNjg5Mjk5LDM1LjQ5MjYyOTQ3NzMwMDU1NCw4Mi42OTY1MTc3NjY4MjUzNCw0My45MjQzNDkzMTIwNjcwNCwxMDguMDIwNTE0ODM0OTc4MDksOTguNTI3NDAxMTczNjgxMzEsNzUuMzI3NzQ4MjYxMDgwMTIsMTUyLjU0NTMwODQxODYwNTg2LDkuNDE3ODgxNjg3NzQyODQ1LDAuMTU1NjY2MTUzMTQ3NjIxOTIKKzMyLEZyaSAyNSBGZWIgMTEsNS4xOTAzNTQxOTMzNTkwNjg0LDYuMTQwNjExOTY1MzYyNTYxLDIuNTg1NDI1NTgzOTQzNjkxLDUuMDg2Njg2MTQwODUyOTU3LDYuNDIyNTkyODE0NjQzMzg0LDg4LjY5NzIyNzE3ODg5MDYzLDEyNC4wNDAxNDY1MjYwMzM1Nyw4Mi4yNjcwMTM0NDQ3MTM0Niw2OC41MTY3NDI1NTIwOTUxNSw4NC44OTczMzg4Mzk3NjQ2NCwxNy41MzY5NTg1OTQyMDQ4MiwxMDUuNjY4NDk3NTY2NjE2MjIsMzEuOTUxMzM3MDM2MjM4MDk4LDU4LjMyNjExNjYzMjIzNjAxNSw0NS41OTYwNDQyMzU3ODc2Nyw4OC43MjA3OTI4MzAyNjcxOSw2OC41MDY4MzE4MTQ0OTc5LDMyLjg2MDMyNTI2OTQ5OTI1LDc0LjM4NjczODY3ODI3Nzk4LDM4LjYzMDAyMDExODgyNDY0NiwxMDAuOTY5MDU0MTMwMTIxMTIsODkuNTQwODEwMzU1NjU4NSw2Ny4yNzkwOTkzODU0NDc2OCwxMzQuNjc1Mzk1MTU0Njg1ODQsOC4yOTU2MDE2ODQyODE0MzMsMC4xNDExMTc1NTM0NDA4MTQ2CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1BvcHVsYXRpb25Hcm93dGhTRUlSX1JLX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9Qb3B1bGF0aW9uIENvdW50XzAuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Qb3B1bGF0aW9uR3Jvd3RoU0VJUl9SS19SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vUG9wdWxhdGlvbiBDb3VudF8wLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYzI0NDAxCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Qb3B1bGF0aW9uR3Jvd3RoU0VJUl9SS19SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vUG9wdWxhdGlvbiBDb3VudF8wLmNzdgpAQCAtMCwwICsxIEBACitpdGVyYXRpb24sdGltZSwKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvUG9wdWxhdGlvbkdyb3d0aFNFSVJfUktfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL1BvcHVsYXRpb24gQ291bnRfMS5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1BvcHVsYXRpb25Hcm93dGhTRUlSX1JLX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9Qb3B1bGF0aW9uIENvdW50XzEuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJjMjQ0MDEKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1BvcHVsYXRpb25Hcm93dGhTRUlSX1JLX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9Qb3B1bGF0aW9uIENvdW50XzEuY3N2CkBAIC0wLDAgKzEgQEAKK2l0ZXJhdGlvbix0aW1lLApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Qb3B1bGF0aW9uR3Jvd3RoU0VJUl9SS19SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vUG9wdWxhdGlvbiBDb3VudF8yLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvUG9wdWxhdGlvbkdyb3d0aFNFSVJfUktfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL1BvcHVsYXRpb24gQ291bnRfMi5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTA4OWMwNQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvUG9wdWxhdGlvbkdyb3d0aFNFSVJfUktfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL1BvcHVsYXRpb24gQ291bnRfMi5jc3YKQEAgLTAsMCArMSwzMyBAQAoraXRlcmF0aW9uLHRpbWUsRUctRlJHLUcyMTAwMDEsRUctRlJHLUcyMTAwMDIsRUctRlJHLUcyMTAwMDMsRUctRlJHLUcyMTAwMDQsRUctRlJHLUcyMTAwMDUsRUctTE9FLUcyNDAwMDEsRUctTE9FLUcyNDAwMDIsRUctTE9FLUcyNDAwMDMsRUctTE9FLUcyNDAwMDQsRUctTE9FLUcyNDAwMDUsRUctTE9FLUcyNDAwMDYsRUctTE9FLUcyNDAwMDcsRUctTE9FLUcyNDAwMDgsRUctTE9FLUcyNDAwMDksRUctVVBFLUcyOTAwMDEsRUctVVBFLUcyOTAwMDIsRUctVVBFLUcyOTAwMDMsRUctVVBFLUcyOTAwMDQsRUctVVBFLUcyOTAwMDUsRUctVVBFLUcyOTAwMDYsRUctVVBFLUcyOTAwMDcsRUctVVBFLUcyOTAwMDgsRUctVVJHLUczMDAwMDEsRUctVVJHLUczMDAwMDIsRUctVVJHLUczMDAwMDMsRUctVVJHLUczMDAwMDQKKzEsVHVlIDI1IEphbiAxMSwyOTcyMzcuNDAzNDUzODAxNSwyNjUzODkuNjAzNDE4NTcxNzYsMTU0NDc4LjM1MDQxMTI2NzI1LDMxOTM0Ny4zMjc2MzY5MTMxNiwzMjE4OTguODk4OTEzNzc0Miw1MjAzNjIxLjg3OTMxMzg5NSw1NjU0NzcwLjUwNTQxMzkxMyw0NjM0NjI0LjUwNjU2OTA5LDQwMjU2MzkuMDg2MDYzNzA1LDUwMzMwNjIuNDg1MTM0ODM5LDEwMjIwNjYuOTgwNDU3NTI1LDU5NzQ4MTQuOTA2NjA5MjksMTE4MjQ1MC4zMDk0ODEwOTM0LDMxMzg5NTAuNDM5MDQ5MjAzNCwyODA1NjQ5LjU1MjI2MjIzOTYsNjQ0MDYxNC4xNjU0MTc4MjIsNDY2NTk3MC42NTU0MDE4NDIsMTMxMjI0My45OTU4MDI1NTQ4LDM4MTkyMjUuNzMzNTUxNzE4MywyNTQzNDk3LjUxMzAyOTk0MiwzNzU3NTQzLjc4OTYxMzI5NCw0MTcyNjU3LjEzNzY2ODY0MjcsMzcxMTk1Ni45OTIwODY5MDQ2LDg0NjEzMjUuNjQ4OTAzMTE3LDUzOTU5My4zNTk0OTExMjQ0LDY3NTYuMTczOTI1NzQyODUzNQorMixXZWQgMjYgSmFuIDExLDI5NzIzOC41OTI0MDU3OTMxNCwyNjUzOTAuNjY0OTc5MTA4ODQsMTU0NDc4Ljk2ODMyNTkwNDY2LDMxOTM0OC42MDUwMjg3NzgyNiwzMjE5MDAuMTg2NTExOTQ0ODYsNTIwMzY0Mi42OTM4NDMwNCw1NjU0NzkzLjEyNDU0MTE3NSw0NjM0NjQzLjA0NTEwNDE5NSw0MDI1NjU1LjE4ODY1MjI1MzcsNTAzMzA4Mi42MTc0MjUwNDIsMTAyMjA3MS4wNjg3MzM2MjM1LDU5NzQ4MzguODA1OTE2NzIsMTE4MjQ1NS4wMzkyOTE3OTA1LDMxMzg5NjIuOTk0ODc2MDcyMywyODA1NjYwLjc3NDg4Mjg5MDcsNjQ0MDYzOS45Mjc5MjYwMDUsNDY2NTk4OS4zMTkzMjE3OTEsMTMxMjI0OS4yNDQ3ODkwMzUzLDM4MTkyNDEuMDEwNDg1MjAzNSwyNTQzNTA3LjY4NzA0MDM0NDMsMzc1NzU1OC44MTk4MTg1MTEsNDE3MjY3My44MjgzMzA1NzY0LDM3MTE5NzEuODM5OTQ0NTY5LDg0NjEzNTkuNDk0MjczNDA2LDUzOTU5NS41MTc4Njg4Nzg2LDY3NTYuMjAwOTUwNDkyNjAxCiszLFRodSAyNyBKYW4gMTEsMjk3MjM5Ljc4MTM2MjU0MDgsMjY1MzkxLjcyNjU0Mzg5MTc3LDE1NDQ3OS41ODYyNDMwMTM3MywzMTkzNDkuODgyNDI1NzUzLDMyMTkwMS40NzQxMTUyNjU5LDUyMDM2NjMuNTA4NDU1NDQ0LDU2NTQ4MTUuNzQzNzU4OTEyLDQ2MzQ2NjEuNTgzNzEzNDU0LDQwMjU2NzEuMjkxMzA1MjEzMiw1MDMzMTAyLjc0OTc5NTc3OSwxMDIyMDc1LjE1NzAyNjA3NTUsNTk3NDg2Mi43MDUzMTk3NDMsMTE4MjQ1OS43NjkxMjE0MDY0LDMxMzg5NzUuNTUwNzUzMTYyMiwyODA1NjcxLjk5NzU0ODQzNjMsNjQ0MDY2NS42OTA1MzcyNDMsNDY2NjAwNy45ODMzMTYzOTUsMTMxMjI1NC40OTM3OTY1MTE4LDM4MTkyNTYuMjg3NDc5Nzk5LDI1NDM1MTcuODYxMDkxNDM5NiwzNzU3NTczLjg1MDA4Mzg1MjcsNDE3MjY5MC41MTkwNTkyNywzNzExOTg2LjY4Nzg2MTYyNDYsODQ2MTM5My4zMzk3NzkwNyw1Mzk1OTcuNjc2MjU1MjY3LDY3NTYuMjI3OTc1MzUwNDUyCis0LEZyaSAyOCBKYW4gMTEsMjk3MjQwLjk3MDMyNDA0NDA2LDI2NTM5Mi43ODgxMTI5MjEzLDE1NDQ4MC4yMDQxNjI1OTQ0OCwzMTkzNTEuMTU5ODI3ODM3NjYsMzIxOTAyLjc2MTcyMzczNzYsNTIwMzY4NC4zMjMxNTExMDcsNTY1NDgzOC4zNjMwNjcxMjYsNDYzNDY4MC4xMjIzOTY4NjYsNDAyNTY4Ny4zOTQwMjI1ODQ0LDUwMzMxMjIuODgyMjQ3MDQ0LDEwMjIwNzkuMjQ1MzM0ODgwMSw1OTc0ODg2LjYwNDgxODM2MywxMTgyNDY0LjQ5ODk2OTk0MTksMzEzODk4OC4xMDY2ODA0Nzc1LDI4MDU2ODMuMjIwMjU4ODcyLDY0NDA2OTEuNDUzMjUxNTMsNDY2NjAyNi42NDczODU2NTQsMTMxMjI1OS43NDI4MjQ5ODU2LDM4MTkyNzEuNTY0NTM1NTAzNywyNTQzNTI4LjAzNTE4MzIzNSwzNzU3NTg4Ljg4MDQwOTMxNDgsNDE3MjcwNy4yMDk4NTQ3MjksMzcxMjAwMS41MzU4MzgwNzE3LDg0NjE0MjcuMTg1NDIwMTIyLDUzOTU5OS44MzQ2NTAyODg2LDY3NTYuMjU1MDAwMzE2NDAzCis1LFNhdCAyOSBKYW4gMTEsMjk3MjQyLjE1OTI5MDMwMzI0LDI2NTM5My44NDk2ODYxOTY5LDE1NDQ4MC44MjIwODQ2NDY5NiwzMTkzNTIuNDM3MjM1MDMxODYsMzIxOTA0LjA0OTMzNzM1OTY3LDUyMDM3MDUuMTM3OTMwMDMsNTY1NDg2MC45ODI0NjU4MTYsNDYzNDY5OC42NjExNTQ0MzMsNDAyNTcwMy40OTY4MDQzNjYsNTAzMzE0My4wMTQ3Nzg4MzQsMTAyMjA4My4zMzM2NjAwMzgyLDU5NzQ5MTAuNTA0NDEyNTgsMTE4MjQ2OS4yMjg4MzczOTY3LDMxMzkwMDAuNjYyNjU4MDE3LDI4MDU2OTQuNDQzMDE0MjAwMyw2NDQwNzE3LjIxNjA2ODg2OSw0NjY2MDQ1LjMxMTUyOTU3NiwxMzEyMjY0Ljk5MTg3NDQ1NTcsMzgxOTI4Ni44NDE2NTIzMTYsMjU0MzUzOC4yMDkzMTU3MjQsMzc1NzYwMy45MTA3OTQ4OTc1LDQxNzI3MjMuOTAwNzE2OTUsMzcxMjAxNi4zODM4NzM5MTA2LDg0NjE0NjEuMDMxMTk2NTU3LDUzOTYwMS45OTMwNTM5NDM5LDY3NTYuMjgyMDI1MzkwNDU2Cis2LFN1biAzMCBKYW4gMTEsMjk3MjQzLjM0ODI2MTMxODMsMjY1Mzk0LjkxMTI2MzcxODksMTU0NDgxLjQ0MDAwOTE3MTIsMzE5MzUzLjcxNDY0NzMzNTUsMzIxOTA1LjMzNjk1NjEzMjMsNTIwMzcyNS45NTI3OTIyMTIsNTY1NDg4My42MDE5NTQ5ODIsNDYzNDcxNy4xOTk5ODYxNTUsNDAyNTcxOS41OTk2NTA1NTk1LDUwMzMxNjMuMTQ3MzkxMTU5LDEwMjIwODcuNDIyMDAxNTQ5Niw1OTc0OTM0LjQwNDEwMjM5MjUsMTE4MjQ3My45NTg3MjM3NzE2LDMxMzkwMTMuMjE4Njg1Nzc5MywyODA1NzA1LjY2NTgxNDQxNyw2NDQwNzQyLjk3ODk4OTI1OCw0NjY2MDYzLjk3NTc0ODE1MywxMzEyMjcwLjI0MDk0NDkyMSwzODE5MzAyLjExODgzMDIzNjYsMjU0MzU0OC4zODM0ODg5MSwzNzU3NjE4Ljk0MTI0MDYwMTcsNDE3Mjc0MC41OTE2NDU5MzQsMzcxMjAzMS4yMzE5NjkxNDMsODQ2MTQ5NC44NzcxMDgzNzUsNTM5NjA0LjE1MTQ2NjIzMzEsNjc1Ni4zMDkwNTA1NzI2MDUKKzcsTW9uIDMxIEphbiAxMSwyOTcyNDQuNTM3MjM3MDg5MjQsMjY1Mzk1Ljk3Mjg0NTQ4NzEsMTU0NDgyLjA1NzkzNjE2NzEsMzE5MzU0Ljk5MjA2NDc0ODksMzIxOTA2LjYyNDU4MDA1NTI0LDUyMDM3NDYuNzY3NzM3NjUzLDU2NTQ5MDYuMjIxNTM0NjI4LDQ2MzQ3MzUuNzM4ODkyMDMzLDQwMjU3MzUuNzAyNTYxMTYzMyw1MDMzMTgzLjI4MDA4NDAxNCwxMDIyMDkxLjUxMDM1OTQxMzgsNTk3NDk1OC4zMDM4ODc4MSwxMTgyNDc4LjY4ODYyOTA2NiwzMTM5MDI1Ljc3NDc2Mzc2NTcsMjgwNTcxNi44ODg2NTk1MjU3LDY0NDA3NjguNzQyMDEyNzAyLDQ2NjYwODIuNjQwMDQxMzg3LDEzMTIyNzUuNDkwMDM2MzgzLDM4MTkzMTcuMzk2MDY5MjY3MywyNTQzNTU4LjU1NzcwMjc5MjMsMzc1NzYzMy45NzE3NDY0MjcsNDE3Mjc1Ny4yODI2NDE2ODMyLDM3MTIwNDYuMDgwMTIzNzY3LDg0NjE1MjguNzIzMTU1NTc1LDUzOTYwNi4zMDk4ODcxNTU1LDY3NTYuMzM2MDc1ODYyODU5Cis4LFR1ZSAxIEZlYiAxMSwyOTcyNDUuNzI2MjE3NjE2MiwyNjUzOTcuMDM0NDMxNTAxNjQsMTU0NDgyLjY3NTg2NTYzNDcsMzE5MzU2LjI2OTQ4NzI3MTk2LDMyMTkwNy45MTIyMDkxMjg5Niw1MjAzNzY3LjU4Mjc2NjM1Myw1NjU0OTI4Ljg0MTIwNDc1Myw0NjM0NzU0LjI3Nzg3MjA2Nyw0MDI1NzUxLjgwNTUzNjE3ODQsNTAzMzIwMy40MTI4NTc0LDEwMjIwOTUuNTk4NzMzNjMyLDU5NzQ5ODIuMjAzNzY4ODI0LDExODI0ODMuNDE4NTUzMjgwNCwzMTM5MDM4LjMzMDg5MTk3NywyODA1NzI4LjExMTU0OTUyOSw2NDQwNzk0LjUwNTEzOTE5NSw0NjY2MTAxLjMwNDQwOTI3MywxMzEyMjgwLjczOTE0ODg0MiwzODE5MzMyLjY3MzM2OTQwNjMsMjU0MzU2OC43MzE5NTczNzIzLDM3NTc2NDkuMDAyMzEyMzc3LDQxNzI3NzMuOTczNzA0MTk1LDM3MTIwNjAuOTI4MzM3Nzg1NCw4NDYxNTYyLjU2OTMzODE1Niw1Mzk2MDguNDY4MzE2NzExNyw2NzU2LjM2MzEwMTI2MTIxMgorOSxXZWQgMiBGZWIgMTEsMjk3MjQ2LjkxNTIwMjg5ODk2LDI2NTM5OC4wOTYwMjE3NjI0NywxNTQ0ODMuMjkzNzk3NTc0MDQsMzE5MzU3LjU0NjkxNDkwNDU1LDMyMTkwOS4xOTk4NDMzNTMsNTIwMzc4OC4zOTc4NzgzMTcsNTY1NDk1MS40NjA5NjUzNTYsNDYzNDc3Mi44MTY5MjYyNTgsNDAyNTc2Ny45MDg1NzU2MDcsNTAzMzIyMy41NDU3MTEzMTUsMTAyMjA5OS42ODcxMjQyMDM3LDU5NzUwMDYuMTAzNzQ1NDQsMTE4MjQ4OC4xNDg0OTY0MTQ4LDMxMzkwNTAuODg3MDcwNDExNCwyODA1NzM5LjMzNDQ4NDQxOTMsNjQ0MDgyMC4yNjgzNjg3NDE1LDQ2NjYxMTkuOTY4ODUxODE3LDEzMTIyODUuOTg4MjgyMjk2MywzODE5MzQ3Ljk1MDczMDY1NDQsMjU0MzU3OC45MDYyNTI2NDczLDM3NTc2NjQuMDMyOTM4NDQ3Myw0MTcyNzkwLjY2NDgzMzQ3MywzNzEyMDc1Ljc3NjYxMTE5NTQsODQ2MTU5Ni40MTU2NTYxMjcsNTM5NjEwLjYyNjc1NDkwMiw2NzU2LjM5MDEyNjc2NzY2NjUKKzEwLFRodSAzIEZlYiAxMSwyOTcyNDguMTA0MTkyOTM3NjcsMjY1Mzk5LjE1NzYxNjI2OTgsMTU0NDgzLjkxMTczMTk4NTEsMzE5MzU4LjgyNDM0NzY0NywzMjE5MTAuNDg3NDgyNzI3Nyw1MjAzODA5LjIxMzA3MzUzOCw1NjU0OTc0LjA4MDgxNjQzOSw0NjM0NzkxLjM1NjA1NDYwNCw0MDI1Nzg0LjAxMTY3OTQ0OSw1MDMzMjQzLjY3ODY0NTc2NCwxMDIyMTAzLjc3NTUzMTEyOTEsNTk3NTAzMC4wMDM4MTc2NTYsMTE4MjQ5Mi44Nzg0NTg0Njg3LDMxMzkwNjMuNDQzMjk5MDczLDI4MDU3NTAuNTU3NDY0MjA0Myw2NDQwODQ2LjAzMTcwMTM0Miw0NjY2MTM4LjYzMzM2OTAyMSwxMzEyMjkxLjIzNzQzNjc0NzksMzgxOTM2My4yMjgxNTMwMTMsMjU0MzU4OS4wODA1ODg2MjE2LDM3NTc2NzkuMDYzNjI0NjQsNDE3MjgwNy4zNTYwMjk1MTUsMzcxMjA5MC42MjQ5NDM5OTc3LDg0NjE2MzAuMjYyMTA5NDgzLDUzOTYxMi43ODUyMDE3MjU4LDY3NTYuNDE3MTUyMzgyMjI1CisxMSxGcmkgNCBGZWIgMTEsMjk3MjQ5LjI5MzE4NzczMjQsMjY1NDAwLjIxOTIxNTAyMzMzLDE1NDQ4NC41Mjk2Njg4Njc5NCwzMTkzNjAuMTAxNzg1NDk5MywzMjE5MTEuNzc1MTI3MjUyOSw1MjAzODMwLjAyODM1MjAyLDU2NTQ5OTYuNzAwNzU4MDA1LDQ2MzQ4MDkuODk1MjU3MTA2LDQwMjU4MDAuMTE0ODQ3NzAxNSw1MDMzMjYzLjgxMTY2MDc0MywxMDIyMTA3Ljg2Mzk1NDQwNzksNTk3NTA1My45MDM5ODU0NzA1LDExODI0OTcuNjA4NDM5NDQyNSwzMTM5MDc1Ljk5OTU3Nzk1NzcsMjgwNTc2MS43ODA0ODg4NzksNjQ0MDg3MS43OTUxMzY5OTQsNDY2NjE1Ny4yOTc5NjA4ODMsMTMxMjI5Ni40ODY2MTIxOTYsMzgxOTM3OC41MDU2MzY0Nzk3LDI1NDM1OTkuMjU0OTY1MjkxLDM3NTc2OTQuMDk0MzcwOTU2LDQxNzI4MjQuMDQ3MjkyMzIyNCwzNzEyMTA1LjQ3MzMzNjE5MzIsODQ2MTY2NC4xMDg2OTgyMjMsNTM5NjE0Ljk0MzY1NzE4MzYsNjc1Ni40NDQxNzgxMDQ4ODUKKzEyLFNhdCA1IEZlYiAxMSwyOTcyNTAuNDgyMTg3MjgzMTcsMjY1NDAxLjI4MDgxODAyMzM3LDE1NDQ4NS4xNDc2MDgyMjI1MywzMTkzNjEuMzc5MjI4NDYxMywzMjE5MTMuMDYyNzc2OTI4Nyw1MjAzODUwLjg0MzcxMzc2NCw1NjU1MDE5LjMyMDc5MDA0OCw0NjM0ODI4LjQzNDUzMzc2NCw0MDI1ODE2LjIxODA4MDM2Nyw1MDMzMjgzLjk0NDc1NjI2LDEwMjIxMTEuOTUyMzk0MDQwNSw1OTc1MDc3LjgwNDI0ODg4OSwxMTgyNTAyLjMzODQzOTMzNjUsMzEzOTA4OC41NTU5MDcwNjc0LDI4MDU3NzMuMDAzNTU4NDQ2Nyw2NDQwODk3LjU1ODY3NTcwMSw0NjY2MTc1Ljk2MjYyNzQwMywxMzEyMzAxLjczNTgwODY0MTIsMzgxOTM5My43ODMxODEwNTczLDI1NDM2MDkuNDI5MzgyNjYsMzc1NzcwOS4xMjUxNzczOTU1LDQxNzI4NDAuNzM4NjIxODk1LDM3MTIxMjAuMzIxNzg3NzgzNCw4NDYxNjk3Ljk1NTQyMjM1LDUzOTYxNy4xMDIxMjEyNzQ5LDY3NTYuNDcxMjAzOTM1NjQ4CisxMyxTdW4gNiBGZWIgMTEsMjk3MjUxLjY3MTE5MTU4OTgsMjY1NDAyLjM0MjQyNTI2OTgsMTU0NDg1Ljc2NTU1MDA0ODg1LDMxOTM2Mi42NTY2NzY1MzMwNSwzMjE5MTQuMzUwNDMxNzU1Myw1MjAzODcxLjY1OTE1ODc3LDU2NTUwNDEuOTQwOTEyNTc0LDQ2MzQ4NDYuOTczODg0NTgsNDAyNTgzMi4zMjEzNzc0NDYsNTAzMzMwNC4wNzc5MzIzMDUsMTAyMjExNi4wNDA4NTAwMjcxLDU5NzUxMDEuNzA0NjA3OTA3LDExODI1MDcuMDY4NDU4MTUwNiwzMTM5MTAxLjExMjI4NjQwMywyODA1Nzg0LjIyNjY3MjkwNzQsNjQ0MDkyMy4zMjIzMTc0NjMsNDY2NjE5NC42MjczNjg1ODQsMTMxMjMwNi45ODUwMjYwODM0LDM4MTk0MDkuMDYwNzg2NzQ2NCwyNTQzNjE5LjYwMzg0MDcyNiwzNzU3NzI0LjE1NjA0Mzk1OSw0MTcyODU3LjQzMDAxODIzMSwzNzEyMTM1LjE3MDI5ODc2OCw4NDYxNzMxLjgwMjI4MTg2Niw1Mzk2MTkuMjYwNTk0MDAwNiw2NzU2LjQ5ODIyOTg3NDUxNAorMTQsTW9uIDcgRmViIDExLDI5NzI1Mi44NjAyMDA2NTI1LDI2NTQwMy40MDQwMzY3NjI3LDE1NDQ4Ni4zODM0OTQzNDY5LDMxOTM2My45MzQxMjk3MTQ4LDMyMTkxNS42MzgwOTE3MzIzLDUyMDM4OTIuNDc0Njg3MDM4LDU2NTUwNjQuNTYxMTI1NTc3LDQ2MzQ4NjUuNTEzMzA5NTU4LDQwMjU4NDguNDI0NzM4OTM4LDUwMzMzMjQuMjExMTg4ODgzLDEwMjIxMjAuMTI5MzIyMzY3NCw1OTc1MTI1LjYwNTA2MjUyNiwxMTgyNTExLjc5ODQ5NTg4NDUsMzEzOTExMy42Njg3MTU5NjUsMjgwNTc5NS40NDk4MzIyNjA2LDY0NDA5NDkuMDg2MDYyMjc5NSw0NjY2MjEzLjI5MjE4NDQyNCwxMzEyMzEyLjIzNDI2NDUyMjYsMzgxOTQyNC4zMzg0NTM1NDUyLDI1NDM2MjkuNzc4MzM5NDkxLDM3NTc3MzkuMTg2OTcwNjQzMiw0MTcyODc0LjEyMTQ4MTMzMywzNzEyMTUwLjAxODg2OTE0NjcsODQ2MTc2NS42NDkyNzY3NzMsNTM5NjIxLjQxOTA3NTM2LDY3NTYuNTI1MjU1OTIxNDg5CisxNSxUdWUgOCBGZWIgMTEsMjk3MjU0LjA0OTIxNDQ3MTIsMjY1NDA0LjQ2NTY1MjUwMjE0LDE1NDQ4Ny4wMDE0NDExMTY4LDMxOTM2NS4yMTE1ODgwMDYyMywzMjE5MTYuOTI1NzU2ODYsNTIwMzkxMy4yOTAyOTg1NjcsNTY1NTA4Ny4xODE0MjkwNjUsNDYzNDg4NC4wNTI4MDg2ODksNDAyNTg2NC41MjgxNjQ4NDMsNTAzMzM0NC4zNDQ1MjU5OTMsMTAyMjEyNC4yMTc4MTEwNjE3LDU5NzUxNDkuNTA1NjEyNzQ2LDExODI1MTYuNTI4NTUyNTM4NywzMTM5MTI2LjIyNTE5NTc1MjUsMjgwNTgwNi42NzMwMzY1MDczLDY0NDA5NzQuODQ5OTEwMTUsNDY2NjIzMS45NTcwNzQ5MjEsMTMxMjMxNy40ODM1MjM5NTgxLDM4MTk0MzkuNjE2MTgxNDU0LDI1NDM2MzkuOTUyODc4OTUzLDM3NTc3NTQuMjE3OTU3NDUyNCw0MTcyODkwLjgxMzAxMTIwMSwzNzEyMTY0Ljg2NzQ5ODkxOTQsODQ2MTc5OS40OTY0MDcwNjYsNTM5NjIzLjU3NzU2NTM1MzIsNjc1Ni41NTIyODIwNzY1NjU1CisxNixXZWQgOSBGZWIgMTEsMjk3MjU1LjIzODIzMzA0NjE0LDI2NTQwNS41MjcyNzI0ODgsMTU0NDg3LjYxOTM5MDM1ODQ1LDMxOTM2Ni40ODkwNTE0MDc1NSwzMjE5MTguMjEzNDI3MTM4NDYsNTIwMzkzNC4xMDU5OTMzNiw1NjU1MTA5LjgwMTgyMzAzMyw0NjM0OTAyLjU5MjM4MTk3OSw0MDI1ODgwLjYzMTY1NTE2Myw1MDMzMzY0LjQ3Nzk0MzYzNywxMDIyMTI4LjMwNjMxNjEwOTgsNTk3NTE3My40MDYyNTg1NjgsMTE4MjUyMS4yNTg2MjgxMTMsMzEzOTEzOC43ODE3MjU3NjU3LDI4MDU4MTcuODk2Mjg1NjQ2Niw2NDQxMDAwLjYxMzg2MTA3Niw0NjY2MjUwLjYyMjA0MDA3OSwxMzEyMzIyLjczMjgwNDM5MDQsMzgxOTQ1NC44OTM5NzA0NzM3LDI1NDM2NTAuMTI3NDU5MTE0LDM3NTc3NjkuMjQ5MDA0Mzg1LDQxNzI5MDcuNTA0NjA3ODM2MywzNzEyMTc5LjcxNjE4ODA4NTcsODQ2MTgzMy4zNDM2NzI3NDUsNTM5NjI1LjczNjA2Mzk4MDUsNjc1Ni41NzkzMDgzMzk3NDc1CisxNyxUaHUgMTAgRmViIDExLDI5NzI1Ni40MjcyNTYzNzcwNiwyNjU0MDYuNTg4ODk2NzIwMywxNTQ0ODguMjM3MzQyMDcxOTIsMzE5MzY3Ljc2NjUxOTkxODcsMzIxOTE5LjUwMTEwMjU2NzUzLDUyMDM5NTQuOTIxNzcxNDE2LDU2NTUxMzIuNDIyMzA3NDgxLDQ2MzQ5MjEuMTMyMDI5NDI3LDQwMjU4OTYuNzM1MjA5ODk3LDUwMzMzODQuNjExNDQxODE1LDEwMjIxMzIuMzk0ODM3NTEyMyw1OTc1MTk3LjMwNjk5OTk5MzUsMTE4MjUyNS45ODg3MjI2MDcsMzEzOTE1MS4zMzgzMDYwMDUsMjgwNTgyOS4xMTk1Nzk2Nzg0LDY0NDEwMjYuMzc3OTE1MDU4LDQ2NjYyNjkuMjg3MDc5ODk1LDEzMTIzMjcuOTgyMTA1ODIwMiwzODE5NDcwLjE3MTgyMDYwNSwyNTQzNjYwLjMwMjA3OTk3MywzNzU3Nzg0LjI4MDExMTQ0MzMsNDE3MjkyNC4xOTYyNzEyMzgsMzcxMjE5NC41NjQ5MzY2NDcsODQ2MTg2Ny4xOTEwNzM4MTQsNTM5NjI3Ljg5NDU3MTI0MTcsNjc1Ni42MDYzMzQ3MTEwMzQKKzE4LEZyaSAxMSBGZWIgMTEsMjk3MjU3LjYxNjI4NDQ2NDEsMjY1NDA3LjY1MDUyNTE5OTI1LDE1NDQ4OC44NTUyOTYyNTcyLDMxOTM2OS4wNDM5OTM1Mzk4LDMyMTkyMC43ODg3ODMxNDc0LDUyMDM5NzUuNzM3NjMyNzM2LDU2NTUxNTUuMDQyODgyNDEyLDQ2MzQ5MzkuNjcxNzUxMDM0LDQwMjU5MTIuODM4ODI5MDQ0Nyw1MDMzNDA0Ljc0NTAyMDUzLDEwMjIxMzYuNDgzMzc1MjY4OSw1OTc1MjIxLjIwNzgzNzAyNSwxMTgyNTMwLjcxODgzNjAyMiwzMTM5MTYzLjg5NDkzNjQ3MTcsMjgwNTg0MC4zNDI5MTg2MDMsNjQ0MTA1Mi4xNDIwNzIxLDQ2NjYyODcuOTUyMTk0Mzc0LDEzMTIzMzMuMjMxNDI4MjQ3LDM4MTk0ODUuNDQ5NzMxODQ5NiwyNTQzNjcwLjQ3Njc0MTUzMSwzNzU3Nzk5LjMxMTI3ODYyNiw0MTcyOTQwLjg4ODAwMTQwNiwzNzEyMjA5LjQxMzc0NDYwNSw4NDYxOTAxLjAzODYxMDI3NCw1Mzk2MzAuMDUzMDg3MTM2OSw2NzU2LjYzMzM2MTE5MDQyNQorMTksU2F0IDEyIEZlYiAxMSwyOTcyNTguODA1MzE3MzA3MywyNjU0MDguNzEyMTU3OTI0NywxNTQ0ODkuNDczMjUyOTE0MzIsMzE5MzcwLjMyMTQ3MjI3MDY1LDMyMTkyMi4wNzY0Njg4Nzc5Niw1MjAzOTk2LjU1MzU3NzMxOCw1NjU1MTc3LjY2MzU0NzgyMyw0NjM0OTU4LjIxMTU0NjgwMSw0MDI1OTI4Ljk0MjUxMjYwOCw1MDMzNDI0Ljg3ODY3OTc3OSwxMDIyMTQwLjU3MTkyOTM3OTQsNTk3NTI0NS4xMDg3Njk2NTYsMTE4MjUzNS40NDg5NjgzNTc5LDMxMzkxNzYuNDUxNjE3MTY1LDI4MDU4NTEuNTY2MzAyNDIwNiw2NDQxMDc3LjkwNjMzMjE5Nyw0NjY2MzA2LjYxNzM4MzUxNSwxMzEyMzM4LjQ4MDc3MTY3MSwzODE5NTAwLjcyNzcwNDIwNDYsMjU0MzY4MC42NTE0NDM3ODgsMzc1NzgxNC4zNDI1MDU5MzMsNDE3Mjk1Ny41Nzk3OTgzNDEsMzcxMjIyNC4yNjI2MTE5NTgsODQ2MTkzNC44ODYyODIxMjUsNTM5NjMyLjIxMTYxMTY2NjQsNjc1Ni42NjAzODc3Nzc5MjMKKzIwLFN1biAxMyBGZWIgMTEsMjk3MjU5Ljk5NDM1NDkwNjU1LDI2NTQwOS43NzM3OTQ4OTY2LDE1NDQ5MC4wOTEyMTIwNDMyNSwzMTkzNzEuNTk4OTU2MTExNSwzMjE5MjMuMzY0MTU5NzU5MjUsNTIwNDAxNy4zNjk2MDUxNjQsNTY1NTIwMC4yODQzMDM3MTksNDYzNDk3Ni43NTE0MTY3MjcsNDAyNTk0NS4wNDYyNjA1ODQ2LDUwMzM0NDUuMDEyNDE5NTYzLDEwMjIxNDQuNjYwNDk5ODQ0Nyw1OTc1MjY5LjAwOTc5Nzg5MjUsMTE4MjU0MC4xNzkxMTk2MTQ0LDMxMzkxODkuMDA4MzQ4MDg0LDI4MDU4NjIuNzg5NzMxMTMzNyw2NDQxMTAzLjY3MDY5NTM1MSw0NjY2MzI1LjI4MjY0NzMxNSwxMzEyMzQzLjczMDEzNjA5MjgsMzgxOTUxNi4wMDU3Mzc2NzEsMjU0MzY5MC44MjYxODY3NDM2LDM3NTc4MjkuMzczNzkzMzYzNiw0MTcyOTc0LjI3MTY2MjA0NTMsMzcxMjIzOS4xMTE1Mzg3MDYsODQ2MTk2OC43MzQwODkzNjUsNTM5NjM0LjM3MDE0NDgzMDEsNjc1Ni42ODc0MTQ0NzM1Mjc1CisyMSxNb24gMTQgRmViIDExLDI5NzI2MS4xODMzOTcyNjIxLDI2NTQxMC44MzU0MzYxMTUwNCwxNTQ0OTAuNzA5MTczNjQ0MDIsMzE5MzcyLjg3NjQ0NTA2MjMsMzIxOTI0LjY1MTg1NTc5MTE2LDUyMDQwMzguMTg1NzE2Mjc0LDU2NTUyMjIuOTA1MTUwMDk3LDQ2MzQ5OTUuMjkxMzYwODE0LDQwMjU5NjEuMTUwMDcyOTc3LDUwMzM0NjUuMTQ2MjM5ODgxLDEwMjIxNDguNzQ5MDg2NjYzOCw1OTc1MjkyLjkxMDkyMTczNCwxMTgyNTQ0LjkwOTI4OTc5MTIsMzEzOTIwMS41NjUxMjkyMzIsMjgwNTg3NC4wMTMyMDQ3NCw2NDQxMTI5LjQzNTE2MTU2Miw0NjY2MzQzLjk0Nzk4NTc3OSwxMzEyMzQ4Ljk3OTUyMTUxMjMsMzgxOTUzMS4yODM4MzIyNTEsMjU0MzcwMS4wMDA5NzAzOTc2LDM3NTc4NDQuNDA1MTQwOTIyLDQxNzI5OTAuOTYzNTkyNTE2LDM3MTIyNTMuOTYwNTI0ODQ5Niw4NDYyMDAyLjU4MjAzMTk5Nyw1Mzk2MzYuNTI4Njg2NjI3Nyw2NzU2LjcxNDQ0MTI3NzIzOTUKKzIyLFR1ZSAxNSBGZWIgMTEsMjk3MjYyLjM3MjQ0NDM3Mzg1LDI2NTQxMS44OTcwODE1OCwxNTQ0OTEuMzI3MTM3NzE2NjcsMzE5Mzc0LjE1MzkzOTEyMzEsMzIxOTI1LjkzOTU1Njk3NDA0LDUyMDQwNTkuMDAxOTEwNjQ5LDU2NTUyNDUuNTI2MDg2OTYsNDYzNTAxMy44MzEzNzkwNiw0MDI1OTc3LjI1Mzk0OTc4NTYsNTAzMzQ4NS4yODAxNDA3MzQsMTAyMjE1Mi44Mzc2ODk4Mzc2LDU5NzUzMTYuODEyMTQxMTgxLDExODI1NDkuNjM5NDc4ODg4NiwzMTM5MjE0LjEyMTk2MDYwNjQsMjgwNTg4NS4yMzY3MjMyNDEsNjQ0MTE1NS4xOTk3MzA4MzIsNDY2NjM2Mi42MTMzOTg5MDEsMTMxMjM1NC4yMjg5Mjc5MjkyLDM4MTk1NDYuNTYxOTg3OTQzLDI1NDM3MTEuMTc1Nzk0NzUyMywzNzU3ODU5LjQzNjU0ODYwNTYsNDE3MzAwNy42NTU1ODk3NTQsMzcxMjI2OC44MDk1NzAzODksODQ2MjAzNi40MzAxMTAwMjQsNTM5NjM4LjY4NzIzNzA1OTYsNjc1Ni43NDE0NjgxODkwNTgKKzIzLFdlZCAxNiBGZWIgMTEsMjk3MjYzLjU2MTQ5NjI0MTcsMjY1NDEyLjk1ODczMTI5MTY0LDE1NDQ5MS45NDUxMDQyNjExLDMxOTM3NS40MzE0MzgyOTM4LDMyMTkyNy4yMjcyNjMzMDc2LDUyMDQwNzkuODE4MTg4Mjg5LDU2NTUyNjguMTQ3MTE0MzA2LDQ2MzUwMzIuMzcxNDcxNDY1LDQwMjU5OTMuMzU3ODkxMDA5Nyw1MDMzNTA1LjQxNDEyMjEyMiwxMDIyMTU2LjkyNjMwOTM2NTMsNTk3NTM0MC43MTM0NTYyMzEsMTE4MjU1NC4zNjk2ODY5MDY3LDMxMzkyMjYuNjc4ODQyMjA5LDI4MDU4OTYuNDYwMjg2NjM0NSw2NDQxMTgwLjk2NDQwMzE2LDQ2NjYzODEuMjc4ODg2Njg2LDEzMTIzNTkuNDc4MzU1MzQzNywzODE5NTYxLjg0MDIwNDc0NzQsMjU0MzcyMS4zNTA2NTk4MDUsMzc1Nzg3NC40NjgwMTY0MTU0LDQxNzMwMjQuMzQ3NjUzNzYxLDM3MTIyODMuNjU4Njc1MzI0Niw4NDYyMDcwLjI3ODMyMzQ0Miw1Mzk2NDAuODQ1Nzk2MTI1Nyw2NzU2Ljc2ODQ5NTIwODk4NgorMjQsVGh1IDE3IEZlYiAxMSwyOTcyNjQuNzUwNTUyODY1NywyNjU0MTQuMDIwMzg1MjQ5ODcsMTU0NDkyLjU2MzA3MzI3NzQ3LDMxOTM3Ni43MDg5NDI1NzQ1LDMyMTkyOC41MTQ5NzQ3OTIxNCw1MjA0MTAwLjYzNDU0OTE5Nyw1NjU1MjkwLjc2ODIzMjEzNiw0NjM1MDUwLjkxMTYzODAzMSw0MDI2MDA5LjQ2MTg5NjY0OTYsNTAzMzUyNS41NDgxODQwNDgsMTAyMjE2MS4wMTQ5NDUyNDgsNTk3NTM2NC42MTQ4NjY4ODgsMTE4MjU1OS4wOTk5MTM4NDYsMzEzOTIzOS4yMzU3NzQwMzksMjgwNTkwNy42ODM4OTQ5MjIsNjQ0MTIwNi43MjkxNzg1NDYsNDY2NjM5OS45NDQ0NDkxMzQsMTMxMjM2NC43Mjc4MDM3NTYsMzgxOTU3Ny4xMTg0ODI2NjQ3LDI1NDM3MzEuNTI1NTY1NTU2NywzNzU3ODg5LjQ5OTU0NDM1MDQsNDE3MzA0MS4wMzk3ODQ1MzY3LDM3MTIyOTguNTA3ODM5NjU4LDg0NjIxMDQuMTI2NjcyMjUzLDUzOTY0My4wMDQzNjM4MjU5LDY3NTYuNzk1NTIyMzM3MDIxCisyNSxGcmkgMTggRmViIDExLDI5NzI2NS45Mzk2MTQyNDU5LDI2NTQxNS4wODIwNDM0NTQ3NSwxNTQ0OTMuMTgxMDQ0NzY1NzUsMzE5Mzc3Ljk4NjQ1MTk2NTIzLDMyMTkyOS44MDI2OTE0Mjc0LDUyMDQxMjEuNDUwOTkzMzY5LDU2NTUzMTMuMzg5NDQwNDUxLDQ2MzUwNjkuNDUxODc4NzU3LDQwMjYwMjUuNTY1OTY2NzA2LDUwMzM1NDUuNjgyMzI2NTExNSwxMDIyMTY1LjEwMzU5NzQ4NDksNTk3NTM4OC41MTYzNzMxNTIsMTE4MjU2My44MzAxNTk3MDU4LDMxMzkyNTEuNzkyNzU2MDk2NSwyODA1OTE4LjkwNzU0ODEwNSw2NDQxMjMyLjQ5NDA1Njk5Myw0NjY2NDE4LjYxMDA4NjI0MywxMzEyMzY5Ljk3NzI3MzE2NjIsMzgxOTU5Mi4zOTY4MjE2OTU0LDI1NDM3NDEuNzAwNTEyMDA4NywzNzU3OTA0LjUzMTEzMjQxMTcsNDE3MzA1Ny43MzE5ODIwOCwzNzEyMzEzLjM1NzA2MzM4OCw4NDYyMTM3Ljk3NTE1NjQ1Niw1Mzk2NDUuMTYyOTQwMTYwNiw2NzU2LjgyMjU0OTU3MzE2NAorMjYsU2F0IDE5IEZlYiAxMSwyOTcyNjcuMTI4NjgwMzgyNDUsMjY1NDE2LjE0MzcwNTkwNjMsMTU0NDkzLjc5OTAxODcyNTg3LDMxOTM3OS4yNjM5NjY0NjYsMzIxOTMxLjA5MDQxMzIxMzYsNTIwNDE0Mi4yNjc1MjA4MDUsNTY1NTMzNi4wMTA3MzkyNTEsNDYzNTA4Ny45OTIxOTM2NDcsNDAyNjA0MS42NzAxMDExNzgsNTAzMzU2NS44MTY1NDk1MDgsMTAyMjE2OS4xOTIyNjYwNzY3LDU5NzU0MTIuNDE3OTc1MDIsMTE4MjU2OC41NjA0MjQ0ODY5LDMxMzkyNjQuMzQ5Nzg4MzgxNywyODA1OTMwLjEzMTI0NjE4Miw2NDQxMjU4LjI1OTAzODUwMSw0NjY2NDM3LjI3NTc5ODAxMywxMzEyMzc1LjIyNjc2MzU3NDIsMzgxOTYwNy42NzUyMjE4NDA0LDI1NDM3NTEuODc1NDk5MTYwNSwzNzU3OTE5LjU2Mjc4MDYwMDUsNDE3MzA3NC40MjQyNDYzOTI3LDM3MTIzMjguMjA2MzQ2NTE0LDg0NjIxNzEuODIzNzc2MDUzLDUzOTY0Ny4zMjE1MjUxMjk2LDY3NTYuODQ5NTc2OTE3NDE4CisyNyxTdW4gMjAgRmViIDExLDI5NzI2OC4zMTc3NTEyNzUzLDI2NTQxNy4yMDUzNzI2MDQ0LDE1NDQ5NC40MTY5OTUxNTc4NywzMTkzODAuNTQxNDg2MDc2OSwzMjE5MzIuMzc4MTQwMTUwNyw1MjA0MTYzLjA4NDEzMTUxLDU2NTUzNTguNjMyMTI4NTM4LDQ2MzUxMDYuNTMyNTgyNjk4LDQwMjYwNTcuNzc0MzAwMDY3LDUwMzM1ODUuOTUwODUzMDQsMTAyMjE3My4yODA5NTEwMjMxLDU5NzU0MzYuMzE5NjcyNDk2LDExODI1NzMuMjkwNzA4MTg5NCwzMTM5Mjc2LjkwNjg3MDg5NTUsMjgwNTk0MS4zNTQ5ODkxNTQ3LDY0NDEyODQuMDI0MTIzMDY5LDQ2NjY0NTUuOTQxNTg0NDQ4LDEzMTIzODAuNDc2Mjc0OTgwMiwzODE5NjIyLjk1MzY4MzA5ODMsMjU0Mzc2Mi4wNTA1MjcwMTI0LDM3NTc5MzQuNTk0NDg4OTE1LDQxNzMwOTEuMTE2NTc3NDczNSwzNzEyMzQzLjA1NTY4OTAzODcsODQ2MjIwNS42NzI1MzEwNDgsNTM5NjQ5LjQ4MDExODczMyw2NzU2Ljg3NjYwNDM2OTc4MQorMjgsTW9uIDIxIEZlYiAxMSwyOTcyNjkuNTA2ODI2OTI0NSwyNjU0MTguMjY3MDQzNTQ5MywxNTQ0OTUuMDM0OTc0MDYxOCwzMTkzODEuODE5MDEwNzk3OTUsMzIxOTMzLjY2NTg3MjIzODcsNTIwNDE4My45MDA4MjU0OCw1NjU1MzgxLjI1MzYwODMxLDQ2MzUxMjUuMDczMDQ1OTEsNDAyNjA3My44Nzg1NjMzNzIsNTAzMzYwNi4wODUyMzcxMTMsMTAyMjE3Ny4zNjk2NTIzMjQyLDU5NzU0NjAuMjIxNDY1NTc2LDExODI1NzguMDIxMDEwODEyNiwzMTM5Mjg5LjQ2NDAwMzYzOCwyODA1OTUyLjU3ODc3NzAyMTcsNjQ0MTMwOS43ODkzMTA2OTcsNDY2NjQ3NC42MDc0NDU1NDcsMTMxMjM4NS43MjU4MDczODQ0LDM4MTk2MzguMjMyMjA1NDY5NiwyNTQzNzcyLjIyNTU5NTU2NCwzNzU3OTQ5LjYyNjI1NzM1Nyw0MTczMTA3LjgwODk3NTMyNTQsMzcxMjM1Ny45MDUwOTA5Niw4NDYyMjM5LjUyMTQyMTQzNCw1Mzk2NTEuNjM4NzIwOTcwNiw2NzU2LjkwMzYzMTkzMDI1NAorMjksVHVlIDIyIEZlYiAxMSwyOTcyNzAuNjk1OTA3MzMsMjY1NDE5LjMyODcxODc0MDgsMTU0NDk1LjY1Mjk1NTQzNzYzLDMxOTM4My4wOTY1NDA2MjksMzIxOTM0Ljk1MzYwOTQ3NzY3LDUyMDQyMDQuNzE3NjAyNzE4LDU2NTU0MDMuODc1MTc4NTY3LDQ2MzUxNDMuNjEzNTgzMjgzNSw0MDI2MDg5Ljk4Mjg5MTA5Niw1MDMzNjI2LjIxOTcwMTcyMSwxMDIyMTgxLjQ1ODM2OTk4MDMsNTk3NTQ4NC4xMjMzNTQyNjU1LDExODI1ODIuNzUxMzMyMzU3LDMxMzkzMDIuMDIxMTg2NjA4LDI4MDU5NjMuODAyNjA5Nzg0LDY0NDEzMzUuNTU0NjAxMzgyLDQ2NjY0OTMuMjczMzgxMzEsMTMxMjM5MC45NzUzNjA3ODcsMzgxOTY1My41MTA3ODg5NTUsMjU0Mzc4Mi40MDA3MDQ4MTYsMzc1Nzk2NC42NTgwODU5MjUsNDE3MzEyNC41MDE0Mzk5NDUzLDM3MTIzNzIuNzU0NTUyMjgwNSw4NDYyMjczLjM3MDQ0NzIxNyw1Mzk2NTMuNzk3MzMxODQyNyw2NzU2LjkzMDY1OTU5ODgzNgorMzAsV2VkIDIzIEZlYiAxMSwyOTcyNzEuODg0OTkyNDkxOCwyNjU0MjAuMzkwMzk4MTc5LDE1NDQ5Ni4yNzA5MzkyODU0LDMxOTM4NC4zNzQwNzU1NzAyNiwzMjE5MzYuMjQxMzUxODY3Nyw1MjA0MjI1LjUzNDQ2MzIyMiw1NjU1NDI2LjQ5NjgzOTMxMSw0NjM1MTYyLjE1NDE5NDgxOCw0MDI2MTA2LjA4NzI4MzIzNTUsNTAzMzY0Ni4zNTQyNDY4NzEsMTAyMjE4NS41NDcxMDM5OTE0LDU5NzU1MDguMDI1MzM4NTYzLDExODI1ODcuNDgxNjcyODIyNywzMTM5MzE0LjU3ODQxOTgwNzQsMjgwNTk3NS4wMjY0ODc0NDMsNjQ0MTM2MS4zMTk5OTUxMzEsNDY2NjUxMS45MzkzOTE3MzUsMTMxMjM5Ni4yMjQ5MzUxODc1LDM4MTk2NjguNzg5NDMzNTU0NywyNTQzNzkyLjU3NTg1NDc2ODUsMzc1Nzk3OS42ODk5NzQ2MjEsNDE3MzE0MS4xOTM5NzEzMzY0LDM3MTIzODcuNjA0MDcyOTk3LDg0NjIzMDcuMjE5NjA4Mzk4LDUzOTY1NS45NTU5NTEzNDkzLDY3NTYuOTU3Njg3Mzc1NTMxCiszMSxUaHUgMjQgRmViIDExLDI5NzI3My4wNzQwODI0MDk5NiwyNjU0MjEuNDUyMDgxODY0LDE1NDQ5Ni44ODg5MjU2MDUxMywzMTkzODUuNjUxNjE1NjIxNjQsMzIxOTM3LjUyOTA5OTQwODU0LDUyMDQyNDYuMzUxNDA2OTk0LDU2NTU0NDkuMTE4NTkwNTQsNDYzNTE4MC42OTQ4ODA1MTYsNDAyNjEyMi4xOTE3Mzk3OTM0LDUwMzM2NjYuNDg4ODcyNTU2LDEwMjIxODkuNjM1ODU0MzU3Miw1OTc1NTMxLjkyNzQxODQ2OSwxMTgyNTkyLjIxMjAzMjIxMDUsMzEzOTMyNy4xMzU3MDMyMzYsMjgwNTk4Ni4yNTA0MDk5OTcsNjQ0MTM4Ny4wODU0OTE5NDMsNDY2NjUzMC42MDU0NzY4MjQsMTMxMjQwMS40NzQ1MzA1ODY1LDM4MTk2ODQuMDY4MTM5MjcsMjU0MzgwMi43NTEwNDU0MjI2LDM3NTc5OTQuNzIxOTIzNDQ0NCw0MTczMTU3Ljg4NjU2OTQ5OCwzNzEyNDAyLjQ1MzY1MzExMiw4NDYyMzQxLjA2ODkwNDk3NCw1Mzk2NTguMTE0NTc5NDkwNCw2NzU2Ljk4NDcxNTI2MDMzNgorMzIsRnJpIDI1IEZlYiAxMSwyOTcyNzQuMjYzMTc3MDg0NSwyNjU0MjIuNTEzNzY5Nzk1NywxNTQ0OTcuNTA2OTE0Mzk2ODMsMzE5Mzg2LjkyOTE2MDc4MzEsMzIxOTM4LjgxNjg1MjEwMDU0LDUyMDQyNjcuMTY4NDM0MDM0LDU2NTU0NzEuNzQwNDMyMjYsNDYzNTE5OS4yMzU2NDAzNzgsNDAyNjEzOC4yOTYyNjA3NjksNTAzMzY4Ni42MjM1Nzg3OCwxMDIyMTkzLjcyNDYyMTA3ODEsNTk3NTU1NS44Mjk1OTM5ODMsMTE4MjU5Ni45NDI0MTA1MTk2LDMxMzkzMzkuNjkzMDM2ODk0LDI4MDU5OTcuNDc0Mzc3NDQ2LDY0NDE0MTIuODUxMDkxODE1LDQ2NjY1NDkuMjcxNjM2NTc3LDEzMTI0MDYuNzI0MTQ2OTgzOCwzODE5Njk5LjM0NjkwNjEsMjU0MzgxMi45MjYyNzY3Nzc0LDM3NTgwMDkuNzUzOTMyMzk2NCw0MTczMTc0LjU3OTIzNDQyOSwzNzEyNDE3LjMwMzI5MjYyNiw4NDYyMzc0LjkxODMzNjk0OCw1Mzk2NjAuMjczMjE2MjY2LDY3NTcuMDExNzQzMjUzMjU0CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1BvcHVsYXRpb25Hcm93dGhTRUlSX1JLX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9SXzAuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Qb3B1bGF0aW9uR3Jvd3RoU0VJUl9SS19SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vUl8wLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYzI0NDAxCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Qb3B1bGF0aW9uR3Jvd3RoU0VJUl9SS19SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vUl8wLmNzdgpAQCAtMCwwICsxIEBACitpdGVyYXRpb24sdGltZSwKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvUG9wdWxhdGlvbkdyb3d0aFNFSVJfUktfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL1JfMS5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1BvcHVsYXRpb25Hcm93dGhTRUlSX1JLX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9SXzEuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJjMjQ0MDEKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1BvcHVsYXRpb25Hcm93dGhTRUlSX1JLX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9SXzEuY3N2CkBAIC0wLDAgKzEgQEAKK2l0ZXJhdGlvbix0aW1lLApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Qb3B1bGF0aW9uR3Jvd3RoU0VJUl9SS19SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vUl8yLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvUG9wdWxhdGlvbkdyb3d0aFNFSVJfUktfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL1JfMi5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjUxNDU5MgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvUG9wdWxhdGlvbkdyb3d0aFNFSVJfUktfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL1JfMi5jc3YKQEAgLTAsMCArMSwzMyBAQAoraXRlcmF0aW9uLHRpbWUsRUctRlJHLUcyMTAwMDEsRUctRlJHLUcyMTAwMDIsRUctRlJHLUcyMTAwMDMsRUctRlJHLUcyMTAwMDQsRUctRlJHLUcyMTAwMDUsRUctTE9FLUcyNDAwMDEsRUctTE9FLUcyNDAwMDIsRUctTE9FLUcyNDAwMDMsRUctTE9FLUcyNDAwMDQsRUctTE9FLUcyNDAwMDUsRUctTE9FLUcyNDAwMDYsRUctTE9FLUcyNDAwMDcsRUctTE9FLUcyNDAwMDgsRUctTE9FLUcyNDAwMDksRUctVVBFLUcyOTAwMDEsRUctVVBFLUcyOTAwMDIsRUctVVBFLUcyOTAwMDMsRUctVVBFLUcyOTAwMDQsRUctVVBFLUcyOTAwMDUsRUctVVBFLUcyOTAwMDYsRUctVVBFLUcyOTAwMDcsRUctVVBFLUcyOTAwMDgsRUctVVJHLUczMDAwMDEsRUctVVJHLUczMDAwMDIsRUctVVJHLUczMDAwMDMsRUctVVJHLUczMDAwMDQKKzEsVHVlIDI1IEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyLFdlZCAyNiBKYW4gMTEsMS4yNzE3NDY5NjM3MzkxNzA4RS01LDEuMjE1NjU0NzU0NjY3MDY1NkUtNiw5LjA5MjYxMTc5MjExMTkwM0UtNywwLjAwMTg5NDM4MzgzMTEyNjA4MzcsMy40NDQ5ODgyNzAyMjUxNjRFLTgsNy40MTY3MzQwNzM1NTI4NzVFLTQsOS44MjM1ODU1MjgyMDQ5ODVFLTgsNS4yMDE3Nzg0OTA1MDA4MzlFLTYsMy4yMTE0OTc4NjQxMDAyODE1RS00LDIuMzY4MzUwMTIzNzYxNzcxNEUtNCw0LjM1NDEyOTk1MjI3NDM1NUUtNiw0LjU2MTI5NTAyMDc0OTkxMUUtNiw0Ljk1ODU2OTMzMTEwNzYwNkUtMTIsMS44OTYxMzUyMzQ5NDAxMDAxRS02LDIuMTUyNjc3ODcyMzY4NDE5M0UtNSwwLjQxNDQ5MzI0MjAwODk3MTEsMC4wMDIxMjA3NDExMTk4ODg4ODUsMi45NDM2OTAwNDYyMDYwNTRFLTEwLDEuMDgxMjE4MTIwNTQ4MzYxRS02LDguMzc4NzQxMjA5NjgzMzI3RS00LDEuNDIwMzE5MDkwNDA4NTg1MkUtMTAsMy41NTQ5NzI1NTc1ODgzNDFFLTksMy41NzMxNjE2MDU3ODI2OTM1RS02LDAuMDAxMzA2NzY0NDc4NzU3NTEwOCw3LjI4ODIxNDkxMDEwNDA0NUUtNCw5LjY1OTk5NjY2MjYxMjk5NUUtMTEKKzMsVGh1IDI3IEphbiAxMSwxLjg3MDEzMzA3MTA3MTU4MkUtNCw0Ljg3Nzg3ODM5MTc4OTIwMDVFLTUsNC4wMTkwMjc2MDAyMzk2OTc2RS01LDAuMDIxNzIyMDQ3MDI2OTE3MzEzLDEuNjk2ODkxNTIwNDc2MDU0M0UtNiwwLjAxMDE5MjE2ODk5NzY4MDY5Myw0LjkwMjYzMzA2NzcwMTQwNkUtNiwyLjQxNTY2MTU2MDM2NDY3NzZFLTQsMC4wMDQ1MDM1NDk2OTM1ODkxNDksMC4wMDM1NTMzMDYzMTA5MTg4NDE1LDEuOTA1MjUxMTY3NDQxMjFFLTQsMi4yMDMxODIxMDU2NTQyOTE2RS00LDguNjQyNjQ1NTc4MDg5MDY4RS0xMCw4LjgxMzExMzgzMTk1MTcwNEUtNSw2LjA5Mzg5NDA5OTY5Nzg5OUUtNCwxLjk3MDc5Mzk0NzY2ODEwMSwwLjAzMDUxMjIyMzMxNjUzNTA2LDQuMTc5MTI5ODk1NjI1MDA0RS04LDUuMTMxMjIyMTEzMTM5MjE3RS01LDAuMDExOTA4NjYzNDY0NzYwMzg2LDEuODY5NzkxMDI2MzQxMDc4N0UtOCw1LjkzMzUxOTUzMzcyNTkwNUUtNywxLjY0MjkwNTM5NjE1ODU4NDRFLTQsMC4wMTg4MjY1NTYyNDY5Nzg5MSwwLjAwOTI0NjA1NTM2MjE3OTQ0NywxLjQ3NzYwMzU0MzU5MDg4NjlFLTgKKzQsRnJpIDI4IEphbiAxMSwwLjAwMTU1MjYxODUyOTI0NjAwMDUsNS45ODMwOTY3NDE3ODgzMjhFLTQsNS41MTIyNzE4NzI5MjM2MDhFLTQsMC4xMzUxMzQxNzA4MTAwMjA0NCwyLjY2MDg3MDI0MDI5MDY1MkUtNSwwLjA3ODExMjIxODM3NzY1NDQzLDcuODMwMjQ0MjM0NzA4NTQ4RS01LDAuMDAzNTI4NzExNjk5MTc2NjcsMC4wMzU0NjE2MzQ1NzgzNTI2MzUsMC4wMzAxNDg4NjUyNzYzNjk3MDUsMC4wMDI1ODM4MDEyNTk0ODYxOTU3LDAuMDAzMzc0OTcxNDA4Mzc3ODE4NiwyLjY0ODkzNDM3NDczMjc1NzRFLTgsMC4wMDEyODgyNDQyNTQwNjU3MzcyLDAuMDA3ODM1MTA3OTcyMDM3MTk1LDguNzUwMzAxMzk2NzY4MzY0LDAuMjQ3MDMwMzU2NzExNDAzODYsMS4wNTc2MTU2NDQyNjcxMDgzRS02LDcuNzAzNjU2MDMzNTc2MTU3RS00LDAuMDk1MDUwOTMzMDA5MjU3NjgsNC42ODU0OTI3Mzc3NDgxNTc3RS03LDEuNzI3NzA3NjQ3NDU1MjQ3N0UtNSwwLjAwMjM3MTIyMTI3OTg5MDY0MDQsMC4xNTI2NjM1OTM5OTEwNTA2MiwwLjA2NDU3NzQ4NDUwMjQxMDgzLDMuNzkzOTk3ODAxMzA4NTg3RS03Cis1LFNhdCAyOSBKYW4gMTEsMC4wMTA2ODE0NDkzMjc3MDcwNTIsMC4wMDQ5MzMxMjE4NDkxNTM3MjQsMC4wMDUwMzg1ODYxNDI5ODc2MTg2LDAuNjk2MzY1OTA3OTQ3MTY1OSwyLjc5NDU4MTEyMTk1Nzk1OTVFLTQsMC40OTQ1Mjk1ODEzNzA3OTIyLDguNDAzNzMxNDk3NDE3NTMxRS00LDAuMDM0NTAxODc0NDY2MjU2MTMsMC4yMzE3NzE3NDAyNjQ3OTI1NSwwLjIxMTczODE4NjQwMDM4NzI3LDAuMDIzMzg3OTEzMTg0MTI4NjQ2LDAuMDM0NjE4NjEzNzA1MzgwMTE1LDQuMzQxMzI0MDMwMTQzNzA5NEUtNywwLjAxMjU5ODE4ODQzNDIzODQxLDAuMDczMDk1MDk3NjcyMzk0NTUsMzguNDQxNzI4NTAwMTg5MDM2LDEuNjU2NTI3ODc3MTQxMzcxOCwxLjQyODEwMjMxNzIzMzM5OEUtNSwwLjAwNzc1NDQ5NjIzNjc1ODE2LDAuNjI4MTk4Njc2MzE0MjE2Nyw2LjM1MTYzMDI1NTU5NDAxNUUtNiwyLjY3ODk4MDMxOTc4Njg5NkUtNCwwLjAyMjkwMzgyNzY5MzIzODUsMS4wMjU0NjY0Mjk3ODA2NTM3LDAuMzcyMzgyMzg0NjgzMDgzOCw1LjEwNDEzMjE0MzEwMzUxMUUtNgorNixTdW4gMzAgSmFuIDExLDAuMDY3MTM2MDY3ODA1NjQ5NTUsMC4wMzQwMTEwODE4MDI3NzIyMywwLjAzNzg4NzAwMjM1ODE5NzM0LDMuMzE3NTE1ODc0MjA5NDUyNiwwLjAwMjQwNzcyMzMxMjgyNDQyNTMsMi44NTk5MDYwMTkzNjk0NTksMC4wMDc0MTM1NjI4MjA3NzU1NTcsMC4yNzc2MDE4NDQ4NTc3Njc4NCwxLjM4OTE2NDE0NTM0MTU4NiwxLjM1NjMyODE1NTE5NTMxODYsMC4xNzQ2NDA2NDkwOTc4NTgwNCwwLjI5MTUxNTYyMDU3NTM4MjYsNS4yMTY4MTI2NjI4MjY1OTFFLTYsMC4xMDEzMjg4MTQyNjcxMzM4NSwwLjU3NjY2OTQ5MTE5MTYwNjQsMTY4LjY1NDI2MTA0Mjc3MzUzLDEwLjE1MDc1NTM1MDM3ODc0MSwxLjQyMzkwNzkxNDg2MDI2NzNFLTQsMC4wNjQyMzI4MzI2NjkwMDkzMiwzLjc5NTE0MjQ4NzUxODEwMDMsNi4zOTgzNDc3ODQ0NDQ1NjRFLTUsMC4wMDMwNDMxODc1MDAzNTQzODIsMC4xODIxMTk5NzU0NDEwNDQ2Niw2LjI5NTM3NTE3NDI2OTc1NCwxLjk2ODM2OTkyMDE4NTIyNjcsNS4wMDQ1Mjc4ODUwODAyM0UtNQorNyxNb24gMzEgSmFuIDExLDAuNDAwNDQ3NTQxMTYyNDQzNiwwLjIxMzIzOTA4NTE5MjY3OTc2LDAuMjU0ODE3NzM3MjM3MzYzODQsMTUuMjI2NTQwMTIyOTAxNTQsMC4wMTg0NTU1NDk4NDQ3MDUyNywxNS43MTIwMjY1MzkyMDY5MSwwLjA1ODI0OTMyMzkwMTg5MzYzNSwxLjk5NTIyMzAxNzAzMTMyNTIsNy45MzYzNDkwMTQ3Njc2NDksOC4yMzEyNDEwMzc5OTA4NTIsMS4xNzAzMDExMTU2OTc0NDEyLDIuMTg1NzI5ODE5MjY2NTA3Myw1LjIyMjg4NTA1NTIzNzgyNjZFLTUsMC43Mjc2NDQyNzM5NTMxNTg0LDQuMTExMTQxNzcwNTMzNTU3LDc0MC4yOTAxMDM0MDAyODI2LDU5LjA0NjQ3MDkzNTE4MTkxNSwwLjAwMTE5NjQ2MDA0NjgzNTM2NzUsMC40NzQ5MjMyODc0MDUyMjc3NywyMS43NzgyODkyNzQ2NTM0MjQsNS40NTU4MDQzMDU1NDk3NzFFLTQsMC4wMjg4MTkyMzQ4NDA5OTMwNjMsMS4yOTQxMjQ5NTE2ODM3NDQzLDM2LjY5NTg3MTA1ODM4NjUxNiw5LjkzMzI0NzQwMTE2OTM4NCw0LjA5MzExMTAzOTM0MTI0NEUtNAorOCxUdWUgMSBGZWIgMTEsMi4zMDg5ODQwNDM5NDI2MzMyLDEuMjYzNTY0MDkwOTM5MzQ1MywxLjU5Njc1NjU1NTgyMzc2NDIsNjguNTU2NjYwNzI4NjA1NjksMC4xMzEwMTA1NTkzMzAyMTUyMSw4My41ODYzNjU1MDc4MjQxLDAuNDI0MDcxMTgxNDEzODA3NSwxMy4zMzQ1ODg5ODQwNTAyMDUsNDQuMDI5NjY0NDAyMDk0NjYsNDguMjE0NDcwNjI4NjU0OTYsNy4zMzIxNzQ5MTkyNzIyNjksMTUuMTg3MzA2MDUwMDc2NDk1LDQuNjQwMjQ3Njk1MTgwODMwNEUtNCw0Ljg1NjQ5MTk5NDAwNTEyOCwyNy40MDA1NzQ5NzY0MDU1OCwzMjQ4LjQ2NzI2MzIwOTY2MzUsMzMyLjA0MzM0NTY1MzI2MDY0LDAuMDA5MDMzMjI3OTcxNDYyMzgyLDMuMjYxNTkzOTA3Njc1NjUxNSwxMjAuOTIzMDYxNTk1NTI5NzMsMC4wMDQxOTUyMzU1NDg0MDM4NywwLjI0MjQ4OTgyMjI4NDQzMTQ0LDguNTUzNzQ1NTI4NTk5NjI2LDIwNi44ODA2MjU0OTU4NjQwOCw0OC43OTU3OTE0MjQzODk5OSwwLjAwMjk4NTMzMTU1NTkyNTgwNjYKKzksV2VkIDIgRmViIDExLDEzLjAwMDAzMTk3ODk4ODg4LDcuMjE2NTEzODQzMDIwMjY3LDkuNTMyOTY0MjY1MTYxOTM4LDMwNC42ODY0OTIzNzM3MjQ0MywwLjg4MTAxMDQ0MjY4MjU5MzEsNDM1LjA1Mzk3MTMxNjI0MzMsMi45MjUxODM1Nzg3ODE0MTI3LDg0LjczOTczNzc1MjQyNzE3LDIzOS41NzExMTk4ODAzNzM4MywyNzUuMzc2NTA3ODc0OTI0MzYsNDMuOTIyMDAxMDUzOTcwNDIsMTAwLjAxNDMzMjIxMTM1NzcxLDAuMDAzNzkwNTU3MjQ3MzY3NzY0LDMwLjgwOTcxOTM5NTQxMjIyNywxNzQuMDU1NTQwNzk1MTA1NywxNDE2Ny4wODA4MDc2MjM2NDYsMTgyMC43Njk0ODU4NDg1NzE4LDAuMDYzNDU4NDgxNjQ5MzAzOTMsMjEuMjcwODM1OTEwMDY1NjQyLDY1NS43MjE2MjIyMDQwOTMzLDAuMDMwMTEyMzAxOTA2NDU4OTQsMS44Nzg2NjM5NTI0MTIwNTk2LDUzLjc3MjQwMjkwNDc4NTI2LDExMzkuMDMyMTcwMTUzOTkyNCwyMzUuNTExMTM0MjUzODMxOSwwLjAyMDE1NTgxNjEzMTc4MDgwNQorMTAsVGh1IDMgRmViIDExLDcxLjgxMDYxNzMxMTIyNzQ1LDQwLjA3MjI5ODU1NTY2NzgzNSw1NC44NzQxODQ1NzcwNjUxMSwxMzI0LjY3MDQyMTEzODQxMTMsNS42ODk5MDMzNjY1OTY2ODcsMjIyNC44MDAyMzgzMjUwMjA1LDE5LjM3OTkzMzc4NDcxNzA0LDUxOC43ODA4NzA1NDcxOTk4LDEyODMuODc4MjEzMDgwOTE0NSwxNTQwLjkxNjkzNzUwNjA1ODMsMjU0LjYzNDUwMzY2OTAwNjIsNjMyLjU0NDQ5MTc0NTAzNSwwLjAyOTA5NTg2ODY3ODc0Nzc4NCwxODguMjg1NTEyMTI3NDIzNCwxMDY0LjUyODk0ODA0NDY0MjIsNTk4NzMuNDY5ODQ5NDUyMTY1LDk3MTMuNjY2ODQ4OTk0NDI2LDAuNDIzNDA3MjY5NzMzMDY2MjUsMTMzLjQzMTUyNTUyNjM0MzE3LDM0NzQuNTg3ODk1MTQ2MzUzLDAuMjA1ODc2MDQ4OTM3NjM3OTUsMTMuNjk0OTM5MTExMzc3NTk1LDMyNS43MzYyODczMzk4NDk2NCw2MTQyLjI4MDA1ODIzNjY1OSwxMTE1LjMxMTc5NjU1OTg1MjgsMC4xMjg4Mjg4Mjk5OTUwNDc4CisxMSxGcmkgNCBGZWIgMTEsMzg4LjAyMzM5MzY3NzQyOTk3LDIxNS4xNzA0MjUwODg5MjUwNywzMDQuNDA5NTkxMTEzODI5MSw1MzY0LjQ3NjI4MjEyNDEzNCwzNS41NzA5NDU1ODQ4NDk3MjQsMTExMDkuODQyMDAwOTk2ODE4LDEyNC4zNzc5MzkyNTU1MjkwNywzMDc2LjYzNjg3NTM2ODA0MzUsNjc0NS4xODM4NTQ2MjcyNjc1LDg0MTQuMzkzMTUyNzQ2Mzg1LDE0MzAuODAyNjI5NjQ0NTM2MiwzODY0LjAxMDA3MjE0MjE4NCwwLjIxMjg5MjcxODk3MTEyMzk0LDExMTYuMTQ2MjA2MjU2ODAzNyw2MjQ5LjIyMDU3ODE5NjQ1ODUsMjI1MDgyLjMyNjQzNzQwNzE0LDQ4NjQxLjg1ODAyMzQzMDE1LDIuNzE2NDM2MDY0NTkxMDE2NCw4MDkuMzUxNDg2ODc2Mjg5OCwxNzU4MS41MDM5NzY4Nzg5MzYsMS4zNTcxNTczMjg2NzQyNTI5LDk1LjI0NDIwNTA5OTI0MTA0LDE5MTMuMDQ3ODkwMDkwNTAzOSwzMjA1My4zNzQ0NjQzOTAxNjYsNTAzNS44NDg1NDQ4MzUzOSwwLjc5MDAxNzMzNTAzMzc0MzcKKzEyLFNhdCA1IEZlYiAxMSwxOTk2LjIxMjY4MDMxNTQ0MTUsMTA2Ny40NTExODAyNTk4Mzg4LDE1NjguNjUxODI0NTU3NjkyOSwxNzg2My43MjA4OTgzMTc2MywyMTUuMjY3MjM3MTQzMjgyNDcsNTIyNDcuMzU4MDY2MTU0NSw3NzYuMDAzMzk0NDY1Mzg3NCwxNzQ2OC41ODc1MDQ3NTI4NDMsMzM2NDguOTg2ODM1NDExNTQsNDMzNjkuNjE5MTUzNTA1MDc1LDc1NzUuNjkxMzk1NDg5NDY3LDIyNTE3LjA2NDc3OTU5NDM1NSwxLjQ5OTQyNzkxODk1NDIzNzcsNjM4OS44MDUwODAzMjg1ODcsMzM1NTIuNDc2NDk4MDUxNjMsNjQyMTg0LjYwMjEzNTQ1MTcsMjAwMjEwLjAxNTMzOTk0MTAyLDE2Ljg0NTAwNjE4MDk3MzE0NCw0NzA1LjA4MjQyMjQ0MzkzOCw3Njk3Mi40NjkwNjc1MzIxLDguNjc0ODMzMzgzNzg2NjM0LDYzNi43MjU2MDQ4Mjg4MTQ1LDEwODA1LjE4MjE1NTA5MDUwNiwxNTE5MjcuMTcxMzU0NjMyNSwxOTYxNi42MTM3ODEyNzI4NzgsNC42NjAxMjU3OTk4ODEyNzkKKzEzLFN1biA2IEZlYiAxMSw4ODQwLjQ1MDEwNDQ0NzA1OCw0Mzc5Ljk4MTkxOTg2MzAyNSw2NTU3Ljg0OTUwMTY3Mjg2LDQzMzY2LjU1NTAxMTUwOTMyLDEyMzUuNDQ3Nzg1NjA3OTIzNCwyMDcxOTEuNjQyODc3NTIwNjQsNDY3Ni45MjM4NzMzMTM2NzcsODgxNzAuODYzNjQ3OTY0MDgsMTQyNjUyLjA3Njg3ODI0NjM2LDE4NjcxMy42OTI5OTAzNDE4MywzMzY3Ni4xNjg1NzA1Nzg1NSwxMTU2OTUuNzMyMzc1NDg1NjUsMTAuMjQxNjMxMjQ0MjgwNDQxLDMzODI3LjIzNTc2NDI3NDU2LDEzOTU2My4zMDE4Mjk0OTM5NSwxMzA1MjI0Ljk5Mjg1ODg4OTUsNTYwMDI4LjE5NDA1NjYwNzcsMTAwLjU5NTMzNDEwOTM5MDQ0LDI1MjA4Ljc4MDY5NjY3MzY5NywyNDA0MDQuMjQyNjQyNDA0MjgsNTMuNjk0MzUxODQ5OTkwOSw0MDg0LjUzNTkyNjcwMDg3MSw1NTM4MC4zMDk1MjA4ODczLDU1MTEzNS40ODU3NzcwNzk3LDU2MDc1LjE1ODI2OTYxNjcsMjUuODE4MzI5MjQ4MTAwMjQKKzE0LE1vbiA3IEZlYiAxMSwyNzgwOC4zMDUxMjIxNzU1MTYsMTM1NDkuOTAzMDgwOTY5OTIsMTg0NDguNTM4NjQ5NzA2ODcsNzg0NTYuNjk3NTg1MjgxNiw2MTg5LjI1MTU5NDE5NTY5Myw1ODQxOTIuNTE3NjgxMzA3MiwyNjMzMi4zNzIxMzE5MDY5NjMsMzI0MjUyLjI1Njc1MTU1MTcsNDIzOTU4LjUyOTMwMTA4NDA1LDU1MDM5OS41OTAwMjEzMDkyLDEwMzEzOS44ODY2ODM0MDkxNSw0MjYzNTkuNjA3NjYzMTAzOCw2Ny44MzkwNjYxMzk0NjMzNCwxNDIzMTguMjYzNTUyODI1MywzNzQ5NTUuNTU2NTQxMzEwMTYsMjA3MDQ5My4wNTIyMzQ4NjI1LDEwNzc1MzEuMzM5OTE0OTczNCw1NzIuNDQ0MzIyMzg5NTIyMSwxMTI4OTcuMTY4NjM2MTA2MTMsNTA1MDIyLjIxNTc3MzcxNCwzMTkuNzkxNjc1NzAzMjI0MDMsMjQzMTAuNDc3Mzk0NzQwNDU0LDIxNTkzMi44NTU1NzEyMzQ0LDEzMjg4NTEuMTY1NzM1MDM5LDExMjc2NC44NzY2NzQ5MDk4OSwxMjIuMzk1NzM4Mjk5MzQ5MworMTUsVHVlIDggRmViIDExLDU4NjUyLjExNDA1ODAzOTIxLDMxNzA2LjE1OTg4MTA1NTcsMzU1NzQuMTI1MzU0NTY1MjIsMTE2Mzc2LjAwOTczNzg1ODg1LDIyNTE1LjgzMzI4Njc2OTc3LDExNDcyMTEuOTYwMzAwNjU2NSwxMjY5MTQuMDU2NjY0NTExNDksNzY3MTY1Ljk0ODg1OTQxODcsODU1NzY2LjE2NDAyMzQ4NDgsMTA5NzIzMy40ODI2NDM4MDMsMjExNzQ4LjA4MzY1OTI5MDAyLDEwMDI4ODYuNjQ5NTU0MDMzMSw0MzEuMzc1NzM1MjMyNzIyNTUsMzkzOTE1LjU5MDg1NTc4MjEsNjk1MTYxLjkzMDA4ODgzNzcsMjgyMzc5My41OTM2ODg2NzMsMTY0MDYyOS4xNTY2NDQ5MzAxLDMwODQuMjQ0Mzk2NjIyMjA1NCwzNTU5MTkuMTIzMzY1NzY4OCw4MDk4OTIuNTA0NzYxNzU2NiwxODI5Ljk1NDI3NjQ5MDk5MTgsMTE4OTM3LjU2MTI4MDIwMDYyLDU0NjI3NS4yNDk5MjExMjU3LDIzMTY3NjQuNTEyMDM4MDA2LDE3NzIyNy41NjIyNjk1OTEzLDQyOC43NDcwNTU4ODQ4NzM1MworMTYsV2VkIDkgRmViIDExLDk0MjY2LjcwMDgwMjYxMTk2LDU4MjQ1LjAxMjk0MDM2MjE1LDU0MjIxLjM1MTY0ODYxMDUxNSwxNTI1NDMuNzE0MjUwMTg0NTcsNTMxNDUuODc2NTE1NzI3ODgsMTc3MjQ5MC42MjgwNjI3MTY3LDQzOTE3Ny42MTIzNzY5MjkyNiwxMzE0NjcwLjkzOTUyMjQ5NTMsMTM0MDMxNS4wMjk1NTIyNzQ4LDE3MDQzNDUuMDY1MzQyNjE1MSwzMzQ3MDEuNzE0NDkxNzg2MTQsMTcxMDYyMi45NDY0ODkyNTQsMjU2NC45MDE5MDUyNDgzMzIsNzQ3MDEzLjA2MzY3Nzc4LDEwMzQzNDguMDUwNTc2MzI4NCwzNTA2ODU2LjEyMTYxNTk1NiwyMTc4NzEzLjQ4MzUxMDA5MDUsMTUzMDcuOTI1OTU3ODM5MzQ1LDc1MTc1Ny42NDEzNDE1NzEzLDExMDkzODIuNDYwODczMzYyNiw5OTg2LjMyOTg1Njg2NzQwMiwzODkwNzUuMzM0NTM3OTA0MjQsOTc2NzQ3LjY4NzczNTA0ODIsMzMzMjEwMy44NzY1NjA3MDksMjQwMTkzLjgwMjM3MjIyNjc4LDEwMjUuNTIwNDUyNTg2NTYwOQorMTcsVGh1IDEwIEZlYiAxMSwxMjkyOTEuMzcxNTcxMjc3OTgsODg3NDIuMTA4Njg2NDc0NzgsNzIwNDYuNDA1MDU5MzUwODQsMTg0NzUzLjgzNDkzMzU3MDYsOTExMDUuMTE4ODEzNzk3NTcsMjM3NjExNS40MTE2ODc5NTQsOTk1NjIzLjA0MTY1NDAyMjksMTg3MDEyOC44NDc4Mjg0NDk3LDE4MTAzNDIuMTYyMzU0MDc1MSwyMjkwMjAzLjQ2MjAzMDQ0NzYsNDU0NDc5LjY2Mzk3MTg1OSwyNDI2MzExLjg5NjUwNjE5LDEzNTA1LjA1MjAzOTY3MjU0NCwxMTI2NDk2LjcwNjkxNDQwNzQsMTM1NDEwOS45NTUyMjU0MjU1LDQwOTY2NjkuNjI0NDMwMTU1NCwyNjU4NDAyLjkxOTUzNTA4ODQsNjE1NjUuODg1NjE5NDk5MzgsMTIwOTI4Ny42OTUzNjY1NjQ0LDEzODA2MjIuNDIzODA3OTcsNDk2NzcuODgzMzA3Mjk5OTQsODI2NTE3LjAzNTg1ODEzODMsMTQyNDA4Ny4wMTQ3MzYyMDg2LDQyNzQ1MDcuNjY4ODk0MTEyLDI5NzAzOS43MjYzMDUzMjk3LDE4MDAuOTE3MzE0OTAwMDIzMworMTgsRnJpIDExIEZlYiAxMSwxNjEwMzEuOTgyOTk1OTc1MjQsMTE4OTQ2LjI3MjcxNjQxOTkzLDg3OTQwLjIyNDM1MTkwNjkzLDIxMjI0Ni4yNDE2MTI5MjgyNSwxMjk2NjguMDk1ODI0MjY5NDIsMjkxNzQyMS44NDc4MDQ5NzIsMTY2NzI0NS42NjM1MTE3NDMzLDIzODIxMzkuNDQ2NzU0MDE5NywyMjMzMDA1LjM4NTU5MDQ1MiwyODE1NDU2LjE0NDkwNTAyMzMsNTYyNDQ5LjIyMDY5NzY4MjgsMzA4NDg3MC41MTE5NzI1ODksNTU0ODkuMTkwNTQzNTkyNDUsMTQ4Njg3Mi42MzIyNTU1MDA2LDE2MzY5MDIuNzM0NDQwNzAwOCw0NTg5Nzc1LjE2ODUwMDMzLDMwNjgxMDIuNTMyNDQ1NTU1NiwxNjcxMzEuMjI3Nzk1NDc2NywxNjU5NDQ5LjA3MDAxMDg2NzQsMTYxNDY1NS4xMTkyMTg5MDgzLDE5NTMxMC4yMTUzNDk5NDIwNywxMzI4NjY5LjE1MjkzMzI1OCwxODQxNjg5LjA0NjgwNzAyMiw1MTAwMTYyLjA4NzQ1NjU4NSwzNDU5ODguNjYwMjc5Nzk2MSwyNjA4LjkzMDA4NzgyNTEKKzE5LFNhdCAxMiBGZWIgMTEsMTg4NDI5LjM5OTE1MTY5NTcsMTQ2NDU0LjMwOTgyMTA3OTg2LDEwMTUxNi44MTczNjU1Mjk1NywyMzUwNDYuNTg1NDMyNTEzOCwxNjUyNDAuODEwNzQxNDY0NDMsMzM4MTUyNC43MDI0NTk1NjA3LDIzNDEzODEuMzM5MzYwOTg4NywyODI4ODIxLjQ3MjU4ODYxMDQsMjU5NjAyOS43NDUxNjE5NTM0LDMyNjU3MjcuNDgyNDkyMjc0Niw2NTUzMjguMzgxODg3NDIyOSwzNjU4NzgyLjUxMjkyMzU4NywxNTExMzEuMzM4MjI3MDc1MSwxODA2OTY3LjQzNTE0ODg0NTQsMTg3NzE3MS4xODExNjQ0MDMyLDQ5OTI3MTkuNjM1ODY4MTcyLDM0MDgwMzUuODU1MjMyNzMxLDMxNDcxMi4zNjI3NTQwMzY3LDIwNjc1MDYuODc4MTY3MzM1NiwxODEwMjEyLjE3OTAwMDcwMzIsNTExOTIwLjE5ODAyNjAxOTAzLDE4MjA5OTEuODI4MDYzNTkzNSwyMjA4ODM5LjE4MzU2NDEwMiw1Nzk3Mjg0LjU1MTc2MTY3LDM4NjgzMy4xODU1NzQ1MjcyLDMzNjQuNDg2NzgwMDczNzQ4CisyMCxTdW4gMTMgRmViIDExLDIxMTMyOC44MjgwMjAyNzIsMTcwMjc0LjUyMjg3MDIwODY2LDExMjc4Mi41Mzg3NzI3ODc2NywyNTM1NjguNTc0NjQzOTUxMywxOTYyODguNzg4MzgxMjg1MiwzNzY3NjMwLjAxMTg3OTk5OCwyOTU5MjIxLjY1NDYwOTI2OCwzMjA0ODkxLjMxMTQyNjY0MzcsMjg5ODQxNi40NTAzOTg3NjM2LDM2NDAyODYuNzM3MDc3OTcyLDczMjc3Ni45Nzc4NjAwNDgyLDQxNDE2MTYuOTE1MDE2NTkzLDI4NDQwNy4zNjQwMzczMzcxLDIwNzk3MDUuNTU3NzQ0Njg1NiwyMDc1NzkwLjg1MDI1MjUwNTIsNTMxNjQ1OC43OTAwNTM2MjY1LDM2ODQyNzUuOTQ1MzAyNDY4Nyw0NzMxMzMuMzEzODA0MDIyNzMsMjQxOTc4Ni4yMzczMDY2NzMsMTk2OTk1MS44MzM0NzY1Mjg4LDk0MDUxOS4xNDk3MTc2MTM5LDIyNjYzODEuMDcwMzg1MDY1NCwyNTE5NTYwLjk1MzQ3OTkzMiw2MzcxMDA4LjQxNzk5MjIyNyw0MjAxNjIuODkxOTY2ODk4Nyw0MDI5LjQzNTYwMjcxODQ5NQorMjEsTW9uIDE0IEZlYiAxMSwyMzAwMzcuNzk1MjgwNTA2MDgsMTkwMjI3Ljk4MjUyMjk4OTU0LDEyMTkzOC4wMjU2MTkwNjM1LDI2ODM4My4yNTExNDc0Njc5LDIyMjQzNi42NTkzOTk5NDExLDQwODIwMDkuMDIxMDU4MzA2NiwzNDk2MzA5LjQ2MDAxNzIwMjQsMzUxMzc1OS43MjkyMzQ0NTMsMzE0NDg1MS41MDUxNjE1MDE1LDM5NDUyNDEuMjM5Mzg5NzI4LDc5NTk0NC43NTc3NTkxNDMyLDQ1Mzc5NjMuNjg0Nzc5NDQ4LDQyNzIzNy45Nzk1Njk0NDI3LDIzMDU2MjAuNTU2MTA0ODc1NiwyMjM2NzU1LjcwMTAzNjU4Myw1NTczMjAxLjI2MzM5NTk0NywzOTA1MjgxLjM5NDAyNzQ0ODcsNjIzNDkxLjgxMzkyODQ3NTUsMjcxNDI2My4xMTk3MzQxODksMjA5ODI1NC44NzY2NTA4OTczLDEzOTM4NDkuMDQwNjE0NzIyNSwyNjUwNDAzLjE1MjI0MDQzMzcsMjc3NTcwOC45NTAxMjg1MjI3LDY4MzQ0MjcuOTc4Mzk1NzQwNSw0NDY5MTIuNzM0MzM0MjA4MzYsNDU5Mi41NjcwNjg0ODk5MzEKKzIyLFR1ZSAxNSBGZWIgMTEsMjQ1MDY3LjEwNzQ3OTM2Njc2LDIwNjU1Ni4yMTM3MzI2OTE0NSwxMjkyNjMuMjM3OTY0NDIzMjEsMjgwMDkwLjk3NTcwODY1OTMzLDI0MzkxNi43ODUwODczNDY0Miw0MzMzOTA1LjIyMTg4MzEzMiwzOTQ3NDAwLjI2NjUxMTMyNCwzNzYyODYzLjE5NTA0MTI2OSwzMzQyNDQzLjE5OTYyNDY1NTMsNDE4OTU3MS43ODYzMDU0MTE3LDg0NjYyMy4wMjQ3OTM1ODU0LDQ4NTc0OTIuOTY5MDYxMTMzLDU2MjY4Ny4xOTY5Nzg0NTMzLDI0ODg5NzguNzU5NTM5MTQ1NSwyMzY1MjY2Ljc4MTU4OTI5NTcsNTc3NDczNC4zNDY5NzkzMzgsNDA3OTk3Mi4zODk2MDc3NTgzLDc1Njk5OS4yMDAwMDg4ODg0LDI5NTQ4NzIuMTU5NjMzMTM3MywyMTk5OTgzLjAyMzcxMDc2MywxODIwOTA4Ljg3MTAxOTQzMTIsMjk3MTEzNC45MzY2MjcyNzk1LDI5ODI4NjcuODA4Mjc0MjI3LDcyMDM0NzEuMzg3MDU1OTY3LDQ2ODEwOS4yNTAwOTE2NDE4LDUwNTcuMDE2MDM5NTQ3NjAwNQorMjMsV2VkIDE2IEZlYiAxMSwyNTY5ODQuODUyNzUwNjIwMywyMTk2ODguOTQ0NjUzODc2NTMsMTM1MDUzLjU5NjA1NzgzNTU2LDI4OTI1NS4zNTU4NzMxMjM1NywyNjEyNDMuNDM3NDk0MjM5MDcsNDUzMzI0Ny45NTM5MzA1NDQsNDMxNzIzOS4wMjEwMzE0MywzOTYxMDAxLjU2MTMwNzU2OCwzNDk4ODk1LjA3OTM3MDg1NzcsNDM4MjkxOC40MjMwNDY2NzYsODg2NzY4LjU0NzIwOTMyNCw1MTExNTcwLjk5MTAyMjAxNCw2ODI4OTcuMzQ5NDkyODc4OCwyNjM1NTM1LjM3MjYzMTkxNCwyNDY2Njc5Ljk5NDk3Njk2NDMsNTkzMTYyOC42NTk0MjUwMzUsNDIxNjczNS45MjU4NzkyODc1LDg3MDcyOS43MTQ4NjA2MTgxLDMxNDgxNzAuNDg4MDM0OTgyNywyMjc5ODIxLjI2NjM3Mzc3ODcsMjE5ODQzMS43MDA3NTczNTczLDMyMzMwMzAuMTMzNTU2MTI1LDMxNDc5OTcuMDA3ODU4NjAyMyw3NDk0MTEyLjU5NzMyMDY4OCw0ODQ3MzYuNzE1NDk0NzY2MTMsNTQzMi43NzIyOTcxMjg1MTIKKzI0LFRodSAxNyBGZWIgMTEsMjY2MzM5LjAwODYzNjg5OTgsMjMwMTEyLjYzMjcyNDA2OTAzLDEzOTU4Ni45NDc1ODc2Mjg0NywyOTYzNzMuNTc3NjY2MTE4MzMsMjc1MDI2LjkxNzY3NDEwNTU2LDQ2ODk0NTguNDYzMTc1ODg2LDQ2MTUxMjUuNDAzMDM4NTA3LDQxMTY4OTkuNTU2OTQyMTEyNywzNjIxNTQ3Ljg0OTMyNjEyLDQ1MzQ0MjQuNjE4NjMxOTYzLDkxODI1My4wMTE4NTU1ODQ5LDUzMTE0MzQuNzA0Mjg3MjQ2LDc4NTI2Ny40NjQxMDM1OTc4LDI3NTEyOTMuMDEzMjc4MzI1NiwyNTQ1OTcwLjM3MTY2NTUyMiw2MDUyOTQ3LjE5MjcwNjg5Myw0MzIyOTc3LjM5ODQwNzEzLDk2NDkyMC42MzAyNTIwNjc2LDMzMDE0NTcuMDExNzUwNTMwNSwyMzQxOTY2LjQxNzQyOTAzNjUsMjUxOTA5NC4wNTA4NjYxNjQsMzQ0MzMyOC4yMzIwNTYzOSwzMjc4MTQzLjg5MTkyODQ0NzQsNzcyMDk4My4wMTYxNDY2MjksNDk3Njc0LjI5NTY5ODQ5MzIsNTczMi4zNzU2MzMyODAyNzkKKzI1LEZyaSAxOCBGZWIgMTEsMjczNjIwLjczMTA5MzY2OTcsMjM4MzAwLjMyODgwMjEyMDksMTQzMTA4LjY2Njc4NDQ3MDUyLDMwMTg2Ny4zNDk0OTc2NjM2LDI4NTg3My4wNDgyOTE2NDQxLDQ4MTA5MDAuNDYyNDM5ODc2LDQ4NTE4MjUuOTE5NDQzNDgyNSw0MjM4NDk4LjkwNzAwMjQwOSwzNzE2OTM0LjYzMjA2OTEzNjUsNDY1MjIwNS43NzAxODQ5NjQsOTQyNzQ1Ljg4NDI2MTIwMDYsNTQ2NzI5Ni40NTIzODE0NzEsODcwMDMwLjU3MTMxODQ3NTMsMjg0MTg2NC4xMTI4NzQ0MTI0LDI2MDc0OTguNTk5Nzg1NTg0NSw2MTQ2MjI5LjY3ODAzNTMyMSw0NDA0OTgxLjgzNDc2MTUyMSwxMDQxMzU5LjU3MDcyOTI1MTUsMzQyMTc3NS4xMzcwMDIxMDgsMjM5MDAxNC4xNzUzNDM0NjA0LDI3ODQxMTguNTU4NjMwOTc3LDM2MTAwMzMuMjU0MDMxNTUyNSwzMzc5Nzk3LjA5ODU0ODE3NCw3ODk2Nzk2Ljg0NTc5NzQ1Nyw1MDc2NzMuODE4NjE0MjcyOCw1OTY4LjU2MDI5MDk1MDQ1OAorMjYsU2F0IDE5IEZlYiAxMSwyNzkyNTAuOTgxNDM0MzY5MDUsMjQ0Njc3Ljk5NjEwMTY2MjI1LDE0NTgyNy4wMzA1MzI2MzI2MywzMDYwODQuODU2MjgwNjUzNywyOTQzMzMuNjQ4NzU4MDQxMSw0OTA0Njk3LjY4MzkxNTEzLDUwMzc5MTUuMjMwOTkyMTk0LDQzMzI2NzMuNzQ3MTMxNjEzLDM3OTA2MjkuMTQ3MjY3OTU4Niw0NzQzMTczLjE0NzExMDYwNiw5NjE2NzMuNTI0ODk4MTA3Nyw1NTg3OTg2Ljk0NzAwMjczMSw5Mzg4MDcuMDM0OTM5ODQyMywyOTEyMTg3LjY1NzYxNzY3MywyNjU0OTQ3LjU5NzQ4NzA4Myw2MjE3NjE1LjAxMjM0MTAzNSw0NDY3OTQwLjczODgyMDg4MjUsMTEwMjQ1MS4yMDQzOTM3ODAzLDM1MTU0MzkuNDAwNzAyOTE5LDI0MjY5NTQuNDE5MDEwMzcsMjk5ODg2Ni45OTgwNjU4MTQ0LDM3NDA4NDQuNzU1MjE0ODIsMzQ1ODYxMy4yNTA3MTYzNjcsODAzMjIyOS41ODMxNzMxNjIsNTE1MzU5LjYyMTU2MTc5OTgsNjE1My4wNjg2ODE2MDYyMDIKKzI3LFN1biAyMCBGZWIgMTEsMjgzNTc5Ljg4NDg3MTIwOTgsMjQ5NjExLjgwOTMwNjQ5NTIsMTQ3OTE0LjA5MjgyNDQyMzk1LDMwOTMwOC4wMTM0MzgzMDUwNiwzMDA4ODYuNTU4NDkwNDk4OCw0OTc2NzQ5LjI1NjQ0ODcyMiw1MTgyOTY4LjkyMjI5NjEzOSw0NDA1MTgwLjU0OTYyMDUyNywzODQ3MjUyLjMxNzk4MTkwNjIsNDgxMzA0OS4zNzg0ODk2NCw5NzYyMTkuNjY0NjIwMDA1OCw1NjgwODk2LjA2NDQwNDI5Nyw5OTM3NjcuNjEwMzQ3NTMxNSwyOTY2NDQ2LjA4ODMxMDU4NCwyNjkxMzQ4Ljk0MjgwMTI2Nyw2MjcyMDIxLjc3OTExMjc3MSw0NTE2MDU4Ljg4MTA2Mzc5MywxMTUwNzAxLjA2OTM5NTkyMjEsMzU4Nzg2Mi43MDU4ODkyMjksMjQ1NTIyMC42NDg1MTE3MTM0LDMxNzAyOTguMTcyNjEyMDE1LDM4NDI2NTMuMDI2NDY4NzAwMywzNTE5MzUyLjM0ODIzMTkwNCw4MTM2MDMxLjkyNTg0MDE1Miw1MjEyMzkuMzcxMjUxMzA2Myw2Mjk2LjE0NzA4OTY4NjczMworMjgsTW9uIDIxIEZlYiAxMSwyODY4OTIuNDY2MDY4MTYyNywyNTM0MDYuOTU3MTgyMzE0NzcsMTQ5NTA5LjIxNDg1MjM4NDU4LDMxMTc2MS43MzI5OTI1OTYsMzA1OTMyLjAzOTg0NDU3MTE1LDUwMzE4NDIuMDA0MjcxODMxLDUyOTUyNDguMDQ4MzQzMzA4LDQ0NjA3MjguNzgwNTY2MDgsMzg5MDU1Ni45ODM2NzIwMyw0ODY2NDc3LjczMzE3NTY0OSw5ODczNDYuMzc3NTEzNzUwMiw1NzUyMDY2LjU4OTQwODY5OSwxMDM3MTcwLjgxOTAzNzE4ODIsMzAwODA4OC42OTM5NjE2NjgsMjcxOTE1MS42NjY1NjAzMTQ2LDYzMTMzNDIuMTk0NzIyNjEzLDQ1NTI2OTEuNjY0NDg0Mzk2LDExODg0NTAuNjQ0MzQ3MDIwMiwzNjQzNTQ3LjU5MDY2MjEzNywyNDc2NzYyLjA4OTUyNDEzNzMsMzMwNTU2OS4xMzI5OTkyMzksMzkyMTM1Ny41OTM0Mjk0NzUsMzU2NTkyMi4zMTU5MDc0MSw4MjE1MjUwLjg0Mzg1MTA5Miw1MjU3MTkuNDA4NDY4OTczLDY0MDYuNDIzMTIyNTI1NDQ1CisyOSxUdWUgMjIgRmViIDExLDI4OTQxNy4wNjEzNDgwNjMsMjU2MzEyLjI1OTgzNjAxMjkzLDE1MDcyMy42MTIyMzMxMTQ3LDMxMzYyMy4zOTcxNjUzMTIyLDMwOTc5Ny42MjIxMjIxODAxLDUwNzM4MDEuMjgwMzMzMTQ3LDUzODE2NTQuODM3MjIyNDcyLDQ1MDMxMDUuNDcyNTcxMzEyLDM5MjM1NDQuMTYxNjM1NTU5LDQ5MDcxNjguNjM4NzA1MDU3LDk5NTgyMy40NDA0NDUzMDA5LDU4MDYzNTUuOTAwNDc5NDQ0LDEwNzExMjUuNzI4NTIwNTg5LDMwMzk5MDUuODg5MDE1ODk3LDI3NDAzMDYuMjA0NDIyNjE4Nyw2MzQ0NjI2LjE1MTE4MzcwOSw0NTgwNDg1LjkzNzUyNjQ3MywxMjE3NzU5LjgxNjM3MTUzOSwzNjg2MTU5LjY5ODE5ODI1MjQsMjQ5MzEyMC44OTE2MTIzMTUsMzQxMTMyMy42NjA4NDA5MTY0LDM5ODE4NjEuNzY1MzcxMDQ4LDM2MDE0NzMuOTUwMjE2NzA2LDgyNzU0ODQuOTgwMTAyNjY2LDUyOTEyMS4wMjg2Mjk5NDQxLDY0OTAuOTgzMTk2MTE5MjI2CiszMCxXZWQgMjMgRmViIDExLDI5MTMzNC4zNDEzNTIxODEyLDI1ODUyNy4yNzg4MTQ5NjAzLDE1MTY0NS4wMTg4MTA0MTE2NSwzMTUwMzEuNjI1NTY5MDI4MiwzMTI3NDYuNzIzMzY1NjM1NCw1MTA1NjQ4LjA0ODAwMDE4LDU0NDc4MjYuODI3MTQ2MTY0LDQ1MzUzMTUuOTI3NDgyNzM1LDM5NDg1ODUuMDQxMzg4ODI5Miw0OTM4MDUyLjE3MzgwMTcwOSwxMDAyMjU5LjM0ODc0NzkxNTcsNTg0NzYxNy41Nzg3NDA1MTgsMTA5NzQ4Ni45MzE1MTU0Mzg3LDMwNjQxMjIuNDEyMjM2NTg5LDI3NTYzNDguNzAzODE3NDA5NSw2MzY4MjQ0LjYxNTMwNjY4Niw0NjAxNTEwLjQ4NzQ0MzY5OTUsMTI0MDM3Mi41ODUxMjQ4NTI0LDM3MTg2MzUuNzg4ODQ1OTEsMjUwNTUwNS4yNjAxNTU1MjEsMzQ5MzM4Mi44MjQ2NjkyOTI3LDQwMjgxNTUuMDcxNTg1MDE2MywzNjI4NTEyLjc4MDcxODI3NCw4MzIxMTM1LjI3NjMxODc5NCw1MzE2OTUuODM1OTkyNTQ4Myw2NTU1LjU0MjczMjgxNzA4CiszMSxUaHUgMjQgRmViIDExLDI5Mjc4NS44NjU5NDk1NDYzLDI2MDIxMC4wNTc3MDUzNTE5NCwxNTIzNDIuMDA5ODY4NzMwNjUsMzE2MDkzLjk0MjUzNTYyNzEsMzE0OTg4LjQxMTQ5OTA0MjgsNTEyOTc0NS42NDQ1MDg4NzEsNTQ5ODI5MS43MDQwMTM0MjYsNDU1OTcyMC40MDc0MzgwMjYsMzk2NzUzNS40MDI2NjMyODIsNDk2MTQyMC40OTgxNDI1OTgsMTAwNzEzMC41MDQzMzgzNTUsNTg3ODg3Ny4zOTQyNTY3MzgsMTExNzgyNC4xNDUwMjI5OTY3LDMwODI0OTEuOTU4OTU3NDg0NSwyNzY4NDc4LjMwMzcwNzkxOCw2Mzg2MDI4LjgxMzcyODQ4Myw0NjE3MzcwLjI1ODY5MjI5OCwxMjU3NzI3LjAyOTk1NTkzNTQsMzc0MzI5OS42NzY4NzYwOTY1LDI1MTQ4NTQuMzIwMTM1MDMyLDM1NTY2NjEuNjM0MDg4NDQ3LDQwNjM0MzIuMjk3NjI0MTIxLDM2NDkwMDkuNzczNzE5Mjc0NCw4MzU1NjMxLjgxMzc1NDM3Niw1MzM2MzkuMzI1OTI4OTUyMSw2NjA0LjY0Nzg1NzAyOTIzNzUKKzMyLEZyaSAyNSBGZWIgMTEsMjkzODgxLjY3NTg5Mjc3MTEsMjYxNDg0LjUxNDUzMjAxNzA5LDE1Mjg2Ny43ODY4MDM4MjY1LDMxNjg5My4yNDMwOTU1Nzk0LDMxNjY4Ni44OTcyNjIxNjY2LDUxNDc5MjguODgwMDQ2NDE0LDU1MzY2MzkuMDUyNjk5NzY2LDQ1NzgxNTcuMTU0MjMwNzYzLDM5ODE4MzYuNDk0MzgwMTUxNCw0OTc5MDUzLjExNDc5NjI4NiwxMDEwODA3LjAwMjI2MDA2MzcsNTkwMjQ5MS40NjI5ODk4NTEsMTEzMzQzMS40NjEyMjc0NTI2LDMwOTYzODQuNDM5NTIyNDY0LDI3Nzc2MjQuMzIxMTUxODU4Nyw2Mzk5Mzg1LjQ5ODAyOTE0LDQ2MjkzMDIuNzI4MzkxOTg1LDEyNzA5ODYuNDA1NTQxMzc5NywzNzYxOTcyLjE5NjgyOTY1OSwyNTIxODkzLjMzMTA3NDM5MywzNjA1MjA1LjA4OTY3Mzg4Niw0MDkwMjIwLjUyNjEwMDUwOSwzNjY0NTAyLjAwMjA5NTMxNjUsODM4MTYyOS40NTg0NDUxNjcsNTM1MTAyLjQyNjYwNjY1OTUsNjY0MS44NzU0OTk4MTEyOQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Qb3B1bGF0aW9uR3Jvd3RoU0VJUl9SS19SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vU18wLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvUG9wdWxhdGlvbkdyb3d0aFNFSVJfUktfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL1NfMC5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmMyNDQwMQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvUG9wdWxhdGlvbkdyb3d0aFNFSVJfUktfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL1NfMC5jc3YKQEAgLTAsMCArMSBAQAoraXRlcmF0aW9uLHRpbWUsCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1BvcHVsYXRpb25Hcm93dGhTRUlSX1JLX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9TXzEuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Qb3B1bGF0aW9uR3Jvd3RoU0VJUl9SS19SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vU18xLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYzI0NDAxCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Qb3B1bGF0aW9uR3Jvd3RoU0VJUl9SS19SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vU18xLmNzdgpAQCAtMCwwICsxIEBACitpdGVyYXRpb24sdGltZSwKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvUG9wdWxhdGlvbkdyb3d0aFNFSVJfUktfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL1NfMi5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1BvcHVsYXRpb25Hcm93dGhTRUlSX1JLX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9TXzIuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg0NjNiNjIKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1BvcHVsYXRpb25Hcm93dGhTRUlSX1JLX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9TXzIuY3N2CkBAIC0wLDAgKzEsMzMgQEAKK2l0ZXJhdGlvbix0aW1lLEVHLUZSRy1HMjEwMDAxLEVHLUZSRy1HMjEwMDAyLEVHLUZSRy1HMjEwMDAzLEVHLUZSRy1HMjEwMDA0LEVHLUZSRy1HMjEwMDA1LEVHLUxPRS1HMjQwMDAxLEVHLUxPRS1HMjQwMDAyLEVHLUxPRS1HMjQwMDAzLEVHLUxPRS1HMjQwMDA0LEVHLUxPRS1HMjQwMDA1LEVHLUxPRS1HMjQwMDA2LEVHLUxPRS1HMjQwMDA3LEVHLUxPRS1HMjQwMDA4LEVHLUxPRS1HMjQwMDA5LEVHLVVQRS1HMjkwMDAxLEVHLVVQRS1HMjkwMDAyLEVHLVVQRS1HMjkwMDAzLEVHLVVQRS1HMjkwMDA0LEVHLVVQRS1HMjkwMDA1LEVHLVVQRS1HMjkwMDA2LEVHLVVQRS1HMjkwMDA3LEVHLVVQRS1HMjkwMDA4LEVHLVVSRy1HMzAwMDAxLEVHLVVSRy1HMzAwMDAyLEVHLVVSRy1HMzAwMDAzLEVHLVVSRy1HMzAwMDA0CisxLFR1ZSAyNSBKYW4gMTEsMjk3MjM3LjQwMzQ1MzgwMTUsMjY1Mzg5LjYwMzQxODU3MTc2LDE1NDQ3OC4zNTA0MTEyNjcyNSwzMTkzNDcuMzI3NjM2OTEzMTYsMzIxODk4Ljg5ODkxMzc3NDIsNTIwMzYyMS44NzkzMTM4OTUsNTY1NDc3MC41MDU0MTM5MTMsNDYzNDYyNC41MDY1NjkwOSw0MDI1NjM5LjA4NjA2MzcwNSw1MDMzMDYyLjQ4NTEzNDgzOSwxMDIyMDY2Ljk4MDQ1NzUyNSw1OTc0ODE0LjkwNjYwOTI5LDExODI0NTAuMzA5NDgxMDkzNCwzMTM4OTUwLjQzOTA0OTIwMzQsMjgwNTY0OS41NTIyNjIyMzk2LDY0NDA2MTMuMTU4MDg2MDksNDY2NTk3MC42NTU0MDE4NDIsMTMxMjI0My45OTU4MDI1NTQ4LDM4MTkyMjUuNzMzNTUxNzE4MywyNTQzNDk3LjUxMzAyOTk0MiwzNzU3NTQzLjc4OTYxMzI5NCw0MTcyNjU3LjEzNzY2ODY0MjcsMzcxMTk1Ni45OTIwODY5MDQ2LDg0NjEzMjUuNjQ4OTAzMTE3LDUzOTU5My4zNTk0OTExMjQ0LDY3NTYuMTczOTI1NzQyODUzNQorMixXZWQgMjYgSmFuIDExLDI5NzIzOC41OTExODMwMDc3NSwyNjUzOTAuNjY0NzI4MDU3NzUsMTU0NDc4Ljk2ODEzMTM5MjE1LDMxOTM0OC40NDgxOTgxOTE3NiwzMjE5MDAuMTg2NTA0MjkwNSw1MjAzNjQyLjYyNTI3Njg3MSw1NjU0NzkzLjEyNDUxOTI1NCw0NjM0NjQzLjA0Mzk3MjEyOCw0MDI1NjU1LjE1ODYyNTQwMTYsNTAzMzA4Mi41OTQzODI4NzcsMTAyMjA3MS4wNjc4MDU1OTE1LDU5NzQ4MzguODA0OTEwMjA4LDExODI0NTUuMDM5MjkxNzg4NCwzMTM4OTYyLjk5NDQ2MzI3MSwyODA1NjYwLjc3MTcwMjY2OTYsNjQ0MDYyNy40MzIyMDk4NjIsNDY2NTk4OS4xMTc5ODM0MjYsMTMxMjI0OS4yNDQ3ODg5MjI4LDM4MTkyNDEuMDEwMjQ4MTE2NywyNTQzNTA3LjYwODA1NjM0MywzNzU3NTU4LjgxOTgxODQ1OTUsNDE3MjY3My44MjgzMjkxMjcsMzcxMTk3MS44MzkxNjk2NzU1LDg0NjEzNTkuMzcwMTE0NDg1LDUzOTU5NS40NTM2MzMzOTA2LDY3NTYuMjAwOTUwNDUzOTM5CiszLFRodSAyNyBKYW4gMTEsMjk3MjM5Ljc3MTI5MDE0NDUsMjY1MzkxLjcyMjc1Mjk0NzMsMTU0NDc5LjU4Mjg3NDA4MTYsMzE5MzQ4Ljk3MDc5NzY0OTIsMzIxOTAxLjQ3Mzk2MDYxNjU3LDUyMDM2NjIuOTk0MDk1NTU5LDU2NTQ4MTUuNzQzMzA3MzM1LDQ2MzQ2NjEuNTYyNjUxMDIwNSw0MDI1NjcxLjA1OTEyMzc5NSw1MDMzMTAyLjU1NDk4NTU3OCwxMDIyMDc1LjE0MTE3NzA0NDYsNTk3NDg2Mi42ODU1Mjk5NjYsMTE4MjQ1OS43NjkxMjEyODMyLDMxMzg5NzUuNTQzMDY0ODExLDI4MDU2NzEuOTUwMTkwNjc0LDY0NDA2MTAuMDAyMDY2NDE4LDQ2NjYwMDYuMzczMDMzOTc0LDEzMTIyNTQuNDkzNzkxMTExNSwzODE5MjU2LjI4MjkyOTU0NDMsMjU0MzUxNy4yMzk4NTk4LDM3NTc1NzMuODUwMDgxNDYsNDE3MjY5MC41MTg5NzY4MSwzNzExOTg2LjY3MzY0NTMxMiw4NDYxMzkyLjM0NDk0MzM2OSw1Mzk1OTcuMjQ1MjM0NTU0Niw2NzU2LjIyNzk3MzQxNzE0MgorNCxGcmkgMjggSmFuIDExLDI5NzI0MC45MDEzMjkxMDY4LDI2NTM5Mi43NTYyMDk3MTU5LDE1NDQ4MC4xNzIxMzczMzk0NSwzMTkzNDYuNjAxMDAxMjQzMywzMjE5MDIuNzYwMDA2MzA1NSw1MjAzNjgxLjEwMDg0MTczNyw1NjU0ODM4LjM1NzkzNTQyLDQ2MzQ2NzkuOTA2NTk1MDY3LDQwMjU2ODUuODg5ODMwOTYxLDUwMzMxMjEuNTE3NDk4NzEsMTAyMjA3OS4wOTY0NTA2OTY2LDU5NzQ4ODYuMzkwNzgyMjkxLDExODI0NjQuNDk4OTY3NTUxNiwzMTM4OTg4LjAyNzg3NDYzNSwyODA1NjgyLjc2MjI3MDE1NSw2NDQwNDQ3LjM2NDkwMzc1OSw0NjY2MDE1LjkxNjI0NjExLDEzMTIyNTkuNzQyNzQwODEyMiwzODE5MjcxLjUxNjM4NjQ0MDUsMjU0MzUyMy45NTk1NTYwNTcsMzc1NzU4OC44ODAzNzE5OTUzLDQxNzI3MDcuMjA4MzQ4NDA5NywzNzEyMDAxLjM5MjE2NzMxNSw4NDYxNDIwLjU0Mzc5Nzk3Miw1Mzk1OTcuMzk1NDgwNDUyNyw2NzU2LjI1NDk3MDA5NDY4NjUKKzUsU2F0IDI5IEphbiAxMSwyOTcyNDEuNzI2Nzg1NDUyNTcsMjY1MzkzLjYyOTc1OTQ2MzU0LDE1NDQ4MC41Nzg5NjcyMTM3MiwzMTkzMzEuMDMyNjU1NjQ5NDcsMzIxOTA0LjAzNDI0MjIyMzgzLDUyMDM2ODYuNjE1NzI0NjYyLDU2NTQ4NjAuOTM2MjI5MzI3LDQ2MzQ2OTYuODk5NTE2NDg5LDQwMjU2OTQuNTI1NzU4Njk2Nyw1MDMzMTM0LjI4Nzg5MTg5NCwxMDIyMDgyLjIxMjY5ODY4MDMsNTk3NDkwOC42Njg4MDU4MzUsMTE4MjQ2OS4yMjg4MDY3NTY0LDMxMzkwMDAuMDE5NTA1ODEzMywyODA1NjkwLjc4NDUyMTEsNjQzOTY0Ni44Nzk0MDY0MDMsNDY2NTk3OS43OTI1NjAzMiwxMzEyMjY0Ljk5MDk5NjEzMiwzODE5Mjg2LjQzNjE2MzQxNDcsMjU0MzUxMy42OTIwNjgxNjY2LDM3NTc2MDMuOTEwNDAxNyw0MTcyNzIzLjg4MjU0NjQ1MywzNzEyMDE1LjIyNTg1NjY0OTcsODQ2MTQyMC40MDQ1NDMxMTMsNTM5NTg5LjIzMDc2MzM0OSw2NzU2LjI4MTcxNDU0NjEzNAorNixTdW4gMzAgSmFuIDExLDI5NzI0MC43NzI4NzY4Mzg1LDI2NTM5My41MzU1Nzg0NzkyLDE1NDQ3OS44MDEwMjMzMzI5MywzMTkyNTYuMjAyMTcyNjI1NCwzMjE5MDUuMjIwMjAyNTY2NjUsNTIwMzYyNC41ODExMDM5NDUsNTY1NDg4My4yMzUwNDIzMTIsNDYzNDcwNC40Njc3NzQ5MTUsNDAyNTY2OC41MDE2NzE2NDY3LDUwMzMxMTAuMjQ5Mzc0Mzg3LDEwMjIwNzkuODk4MTIyODcyNiw1OTc0OTIwLjUzMDc5OTk5MiwxMTgyNDczLjk1ODQwNzM2MzksMzEzOTAwOC41NzQxODkyMTgsMjgwNTY3OS40NDY5MTMwNzQ3LDY0MzYwNDQuNDM3MzQwMjI0LDQ2NjU2ODMuNzE0MzU2MTM2LDEzMTIyNzAuMjMzNDMwODA4NiwzODE5Mjk5LjA5OTc3MTc3MywyNTQzNDA4LjA2NjEzOTE0MywzNzU3NjE4LjkzNzgyNzMyNTQsNDE3Mjc0MC40MTQ3NDE5MTQzLDM3MTIwMjIuOTYxNTkzNDE4NCw4NDYxMjU4LjU5ODE4MDc0MSw1Mzk1NDAuMTMzNDAwMDQyMSw2NzU2LjMwNjQ2MTIwNDM3NAorNyxNb24gMzEgSmFuIDExLDI5NzIyOS43MDQyMjYzMjM0NiwyNjUzODcuODM3MTU4MjcxNDYsMTU0NDcxLjc4NTE4ODUxMzksMzE4OTE3LjU1MTg1MDYyOTIsMzIxOTA1Ljc5MTkxNjMwOTQsNTIwMzIwOC44MzQ4ODMyMTYsNTY1NDkwMy41MzU4OTMzNDYsNDYzNDY1MC40NDI2MDkwNDksNDAyNTQ1Mi43NTU4MDMxNDg3LDUwMzI4NzMuNjg2MDE4NTczLDEwMjIwNDQuMzgwMjY4ODA4NSw1OTc0ODYxLjUyMjQzNTAzMiwxMTgyNDc4LjY4NTc2OTUwNDIsMzEzODk5NC43MDE2ODIxNDI0LDI4MDU1NDEuNzA1NzgzMzMyNyw2NDIwMTM3LjA2NTkxMzQzOSw0NjYzOTQ3LjE1NzExMzk1OSwxMzEyMjc1LjQzMjgzNDQ3MTMsMzgxOTI5Ni41OTIyNDU3NDgsMjU0Mjc4MC43NTI4MDkwMDc3LDM3NTc2MzMuOTQ1MjgwNDAwNiw0MTcyNzU1Ljc3MjEzNTU4NCwzNzExOTkxLjMwMjg1Mzg2Niw4NDYwMTk4LjU4Mzk3NzQ4OSw1MzkyOTIuOTU1NzA3MzE1NCw2NzU2LjMxNzA0NDI0MjYzMQorOCxUdWUgMSBGZWIgMTEsMjk3MTYyLjI2NjE1MzE2Nzc2LDI2NTM1MC42MjI1NzE2NDEzNSwxNTQ0MjEuMzYwMzM1MjU1MywzMTc0MTMuNDM0Mjg2MjEwOSwzMjE5MDIuMjk3ODA5NTAyNSw1MjAwOTcxLjk1NzIwOTA3MSw1NjU0OTEwLjI1NjA2MTQ1MTUsNDYzNDIxMS42MTAyMzczODQsNDAyNDIxMy44ODExMjUxNzAzLDUwMzE0MzUuOTI2MDY3OTQyLDEwMjE4MTMuNDA4OTkwMzY4NCw1OTc0MzQzLjQzNjA4MTM2OSwxMTgyNDgzLjM5NDk0OTcxMzcsMzEzODg0MC45ODM4MjEzNTUsMjgwNDYxMy42NzgyMDgyMzUsNjM1MDU3MS4zOTA1MTE3ODUsNDY1NDM5Mi42NTYzOTM4MzYsMTMxMjI4MC4zMzU1ODM4MDQyLDM4MTkxOTYuNzQ0MzQzMjA4NiwyNTM5MzUzLjUyNjg4MzY1NDgsMzc1NzY0OC44MTE1MDcxMjksNDE3Mjc2Mi4xNzAwOTE2MzE0LDM3MTE3MTYuMjYyOTI0Mzk4OCw4NDU0MjQ0LjE0MjI5NjMyMiw1MzgwOTguMzg3ODAyMDU0NCw2NzU2LjIzNDE3MDA2OTEyOAorOSxXZWQgMiBGZWIgMTEsMjk2Nzg1Ljc3MjE2MTcwMDUsMjY1MTQwLjMxMTQ0ODI5NzMsMTU0MTMwLjE4NzYyMzMwMTQzLDMxMDg3MS40MDAzMTI3NzAyLDMyMTg3Mi44NzcxOTY0NTg5LDUxODk0OTIuNjE4OTM5Mjc4LDU2NTQ4MjguMDczOTc0NjI3LDQ2MzE0NDcuODU2MzgzNzg1LDQwMTc1MjQuOTM2MTg1NDUxNyw1MDIzMzI4LjU1NDE4ODA4NCwxMDIwNDYzLjU2NDI3NjYwNjgsNTk3MDk1OS43OTY4NTkyOTIsMTE4MjQ4Ny45NjYxMDI3NDc3LDMxMzc4NDQuMDUwNzM2NjcxMywyNzk4OTEwLjU3NTI2NTY4Myw2MDU1NjE1LjA4MjI1ODkzNiw0NjAzNDA2LjEwNDQ0NzE5NCwxMzEyMjgzLjI4OTAwMTk0NzMsMzgxODQ5NC4wNTA2MzExNzM0LDI1MjExOTIuMjQxNzE3MDkzLDM3NTc2NjIuNzI1MDI2MDQ1NSw0MTcyNzA0LjE1NjIzNTE4ODcsMzcwOTk4Ni42NDM0MjQzNzksODQyMjA4Ny43NjI3MzE2NzcsNTMyNDQzLjQzNTEzMzc0MTcsNjc1NS41NjQ4MTYzNDY5NworMTAsVGh1IDMgRmViIDExLDI5NDc0Ny43ODU4OTM5MjI4LDI2NDAwNi4yMTc5MjMwMzYxLDE1MjUxNS43MjM1NjExOTk2LDI4NDQwMC42NzIxMTA0MTgxLDMyMTY4Mi45ODI4MjY0MTIsNTEzMjExNS45OTA3NzMzMiw1NjU0MTgwLjc4NDUwODgzNiw0NjE1MDI2LjkyOTEyNDc5MSwzOTgyMzA3LjA3MTE1NjM3MzcsNDk3ODk4MS4wMjI2MDY3OTMsMTAxMjg3Ni41NjY1NTEyMzg5LDU5NTAyMzguODQxNTUyMjg1LDExODI0OTEuNTM3NTkwNDUyLDMxMzE4OTguOTkzNzMwMjA4NCwyNzY1Mzc0Ljk1MzM4NDMyMyw0OTU5MDA5Ljc4ODQwMjE0Myw0MzQ1NzMwLjU0NDcyNTIxLDEzMTIyNzMuODg1MzcyMzk5LDM4MTQxNjkuMjUzNzYzNjE4LDI0Mjg3NzIuMjIyMDcxMTczLDM3NTc2NzAuNDIzNzc1NTg2LDQxNzIyMDMuMzQ4NDIxMDI1LDM2OTk3OTkuMzg2MzY0MjQyLDgyNTM3ODEuNjI1MzQ4ODg5LDUwNjgxNi40NDM0MDEzNDY1Nyw2NzUxLjM0ODM5Mjk4NTk4CisxMSxGcmkgNCBGZWIgMTEsMjg0MTk0LjE1MzYzOTI5NzgsMjU4MzMzLjU0NzgyMjQzMzU1LDE0NDExNy45MDkwMDI4MTAwMiwyMDIzNTkuMDkwNTAwOTI3OTcsMzIwNTI5LjExMjM0NjMxMjIsNDg2MTE0NC42NjI5MDM5MjIsNTY1MDAzNC45ODI5Mzc5MTYsNDUyMTQxNy41Nzc5NTc2MTgsMzgwNTM1Ny42NTQ4MDE4ODIzLDQ3NDgzNTYuODQ4Nzg0MDAyLDk3MjM4Mi42OTY4OTQzMTE5LDU4Mjg5MDguNjY2MzAzMTExLDExODI0ODguMTM0OTk1MzU0MywzMDk3ODA5LjI1MDA4NTgwOSwyNTgyMzk1LjYxOTA5NTIyNSwyMzk3MjY5LjkyOTg2ODc2OCwzMjg0MDIyLjU4MTgyNTA0MDMsMTMxMjE4OC41ODE2NTI2ODA2LDM3ODg5MjkuODI1MjE1NzA3NSwyMDIwMDAxLjU3MTE1NTE4MSwzNzU3NjM4LjcyNzE1MTE3NTUsNDE2ODc3MS40MzkwMjQ5NDA2LDM2NDIxMjEuMzc1OTc3NzQyLDc0NDU5NTUuOTYwNTUxNjE1LDQwODI4My44ODkzNjMzNDcxLDY3MjYuNDIxNzYyNDQyMDEzNQorMTIsU2F0IDUgRmViIDExLDIzNjk4Ni4xNDY5OTQ2MjI5OCwyMzU3MDcuNjQ1MDE3MzE0OSwxMDg5NzUuMTcyMzAwMzEzMjgsNzU0OTUuMjE1NDUzNTc1MiwzMTM4NjEuNTE0OTQwODQxMzYsMzgwMDYzNy4yODY2MDA2NzM2LDU2MjQ5MDAuNDg2MTc3MTM5LDQwMzg2NTIuODY3OTQ4ODI2NCwzMDUxNDA3LjY5NzgwODc0NTMsMzc0NjA5My4wMzAyMDI3NzA2LDc5MDAxOS41MDAxNDI1MjQ1LDUxODk5NjUuMjI0OTY5Njc0LDExODI0MzcuNDQ5ODM4NzczOCwyOTE0ODczLjg4MzAzNjk0NiwxODIwMTc3LjY4NzY4MzcxODcsMzcwNDI0LjQyNzE0MTM0MTczLDExMTk3OTQuMjMzMzYxNjQwMiwxMzExNjUzLjg1NDExMjAxOCwzNjUyOTgwLjc0MTE4Njc0Myw5MzkwNDYuNzM1MDIyMDg4NywzNzU3MzY0Ljg5MTE4MDE2ODQsNDE0NjY0OC4zMDI3NjYyNjIsMzM0MTQ5MC43NDczODc4MzksNDY1NjIzNS4xMDM2NDc3MTEsMTg0NzQwLjY5NDE5NzU4ODk1LDY1ODcuMjA4Mjg2MzQwNzEyCisxMyxTdW4gNiBGZWIgMTEsMTExMDA5Ljc0MTgzMTkwMjYzLDE3OTYwMS42ODg3Mzk4NjIzLDM3MjQ3LjIyMjc2NDY0MjExLDEwNzE0LjA3MTg1ODgyMTgyNCwyNzk4OTQuNjA4NTU0NTg3OSwxNTEwMTczLjgxMjg1MDc3NjEsNTQ4MjI5OS42OTQ4Mjk1OTgsMjM1Mzc0MS43NTUzMjMzMTQ2LDEyNTM3MTMuNjczMzQxNzA1NywxNDM4OTgxLjE0MTU0NTMyNDEsMzM2OTgzLjE4NjE2NzYwODI1LDI5NjE4MzAuNDQ2NDQ3OTU3MywxMTgyMDc1LjEzNTEyNzUyOSwyMTQyMTMyLjQxMTEwOTA5MDMsNDkxMzg3LjMzNzIzMDg0NDk1LDE2ODc5LjU2NzEzNDE5MTY0Niw4ODg2Ni4yNzAxNTM4NTgwNCwxMzA4NjAxLjkxOTMzODIyNDcsMzA0NjI3OS4yMDI3ODI4MTMsMTE0NDg4LjA0NTQyMjIzODU3LDM3NTU2NjUuODUyMjkwNDA2NCw0MDEzMjgwLjYzMzQzODcxNSwyMTkzODk4LjAyNTMwNDU1MDMsOTg0MjY1LjM5NTI2MzE5MzUsMjQxMjkuMTMwOTg2MDk0MTk1LDU5MjIuODQ2NTE2NzA5OTc4NQorMTQsTW9uIDcgRmViIDExLDEzODMwLjY3MTQyMjE4NDA2Myw5NjIzMi43NjYwMTA2NzMyNywyOTkyLjA5NzE4ODEyNjU5OCw1ODAuNDQ4MTczODkxODc2LDE2NDUwNC42NzY1OTA2NDEzOCwxNTI2OTcuMjI1MTQ0OTA2MzUsNDc5MDM3Ny4zOTk4ODM4NTYsNDA5OTg3LjUyMTc1MjMxNzksMTI1MzM1Ljk1ODUzNjE3MDI5LDEyOTc1Ny4xNzUwMDE5OTI4NiwzNjI5NS44Mjk0NjkxMjczMDQsNDkwNzc4LjY4NjQ3MzY1MDIsMTE3OTc0MS45NTM3NTE4NTc0LDY1Njk1Mi40NDk1MDM5OTY2LDI4ODg3LjczNzk3NTMxMyw0NTAuNTA4MDEzOTYyNzM2LDIzNzQuMDIzNDcwMDc3OSwxMjkyMjg5LjI0MDg2OTMyNzcsMTQzNTQ0OS4xMTk1NzE5NjU0LDM3MTYuMTM1NzYwNjgxMDQzLDM3NDU5MzguODA4NTExMzMwNywzMzQ0ODQ4LjcwMDA5OTg3NTcsNTAxNzE1LjgxNDA5ODg0MTEsNDcyMDkuNTU3MjI1MjQzNiw4NjUuMTM5MjE3MDMxNTExLDM4NDUuNDQ0NzY3ODMzNTQ5CisxNSxUdWUgOCBGZWIgMTEsNDY5LjUxNDI4NTUwNzY5MDk0LDI3MDUxLjM1MzcxNTA3MTQ5LDgwLjI4Nzc1MTc3MDQ0NzMzLDE4LjkyNTg2MjYyNzk0Nzc3MiwyOTc5Ny4xMjQ0MTA1MzEwODMsNDU2Mi44MzY0NjI5NzcwOTYsMjYyMDQ5OC45MzA3OTcxNTEzLDE2NTEwLjUzNTgxNDA4NjcxNCwzNjEzLjk5NDEyNzg4MTc4MywzNTQ0LjAzMDY0MDcyNTkyOSwxMTAwLjc5Mjg5NDg0OTYyNzYsMTkwMDkuMjQwODU4MTA0MjY1LDExNjU3OTEuNDk0MTUwNTU0OCw0NDUwNy44OTQ2NTUxMjk3ODUsNjYzLjU1NjUwNzMxODg4OTMsNzMuMzEzNTg4NDc2NTc4OTksODkuMDA5NjY1MzY3MjM1NTYsMTIxMTE1Ni4wMTAyODkwMzcsMTgwMjk4LjMxMDA4NjU2ODgyLDkzLjM3NzYwMDMyNDI1OTEyLDM2OTI4OTEuNDAyNjAxNjc1LDE0OTkxMjguMDQ5NzU1NTA2NywyNTMwNC4wNTUwNDgyMDU4NiwxMDU2LjA4NTMyOTMxNjk0MjUsMjIuMTQzMzU1OTc5NzczMDIzLDEwNTYuNzUzODY3ODc2NTk0CisxNixXZWQgOSBGZWIgMTEsMTIuMDMxOTIwMTc5MzYyODQ2LDM0NDkuODk5NTQxODY0NjEyNywyLjk2MDQ4Mjc0NTAxMTI2NSwzLjY3MTYwMTQ5NjM1Nzg1ODcsMTI0My4zMjgxNTM3NzU1OTksMTM0LjU3MDE3NzY1OTg1OTU4LDQxMzA0MS44NTE5Nzk3ODQsMzY0LjQ3MTc1Njc5OTMwMzMsMTAzLjk3OTY1MDgxNzUyNjA0LDExMS43Nzc4MTE4NTY3NzY2MiwyOS45OTM0NjcyOTczOTM1MSw0MjEuMTg5MjM3MTkyMjI1MDUsMTA5MjE5NS41MDY0NDIxMiwxMDczLjA2OTk4ODMzNzIxNTYsMzguNzQ3MzYyNDUxMDY0Niw3MS41MjM2MzQzODk5NzQ1Nyw0OS40MjcxMDk5MzQwNDI5NDYsODg2ODgxLjE2MTM4NTgzMTMsNjAyMi43Njk3NTg2NjU0ODk1LDI3LjA2MDcwMzQ5MjIwMDM2LDM0Mjc1MjkuNzI0NTE1NzQxNywxNjU4NzEuMjU0MzczMTY4ODYsNTYzLjEzOTE5OTU5NzI3MzgsMTAxLjIzOTQ4MDA4MDc2OTI4LDUuODAxMTkyODE2OTQwNDc2NSw3Ni41NTAwNDE4MDQ5MjUxOQorMTcsVGh1IDEwIEZlYiAxMSwzLjIxMzA4NjI2MTY5MzE5OSwyNDguMTgxNzE3MDUzOTI5OTYsMS42MzMzMjg5OTA3MDEzMDQ3LDMuNTk3NjY0NTc2MDc3MzgyNywyNy40OTMzMjY4MzA1MjQ4Myw1NS4wMDIzNTMxMzk0NzIyNCwxNTU5MC42MTYzNzk5MDEwNjMsNTEuODk0NjI2OTI2NDk1OTMsNDIuNDM2MjE2MjMzMTE3OCw1Mi45OTUxNDE5NTgwODQ2MywxMC44MDUzNDcxNjUxODM3NzUsNjYuMTM5NDIxMzA4NTU4OCw3OTU1NjguODc2NDM0Mjc1LDQ5LjE0NDM1MzQzMTY3MTc3NSwyOS44ODc2NjE4MTE3Nzg2NTMsODEuNjEwMDUwODA5Njg1NDgsNTQuNjI3MDgzNzA4OTAxNzgsMjczOTEyLjk2MDkyNTA2MjQsMTQ5Ljg3MTUxNDE5NTc5NDg0LDI4LjY4OTk4NDE0OTc5MzE0LDI0MDI0NDYuMjU2ODg1OTg4Niw1MDAwLjM2OTE1NzExMTA1Niw0NS45NjMxOTk4MjE2OTkxOCw5MS41NzEyMzQ3NzkyNjI2Miw2LjA3MjI1Mzk3NzU0MDMyMiwyLjA1NjUyMDY1NjU5MjU5OAorMTgsRnJpIDExIEZlYiAxMSwzLjM2NDA4Njg0MjQ0OTQzNiwxNC45MTI1MTA4ODM3NTI2MiwxLjgwNjQxNTQ1NjMwNjI2Niw0LjA4NDc3Mjc2NjE0MDI5MSwzLjY0MDM1OTQ1NzI0NzMzNzQsNTkuNzM0MDU2NTcyMTI0MTIsMzUyLjI0NDg4NjYxNjM3ODU1LDUwLjgwMjk3NTY5MTYzMjksNDYuMTYxNzkwNzcwNTk3MTg2LDU4LjIwMzEyMjQyMjc3NjU5NSwxMS42NDgyODUwNjMyMTY4NDMsNjUuNzE3NDk0NjMyMjMxMjgsMjQxNjkyLjY4MDQ4MjMxMjgsMzMuMjMwNzM2OTM0NTg0NDQsMzMuNzYzMjU2ODcyMzQ4NjMsOTYuMTQ3MjU1NTY2MTMzNjIsNjMuNjg5NDMwODgyMDc1MzUsMTg4MDEuMzc5ODg3NjU2MjksNDAuNzgyOTgzNDQxMjY4NDEsMzMuMjE3NzAyMTUyNTA2OTQsNjU4Mjc3LjA1NTI1MDQ2MDYsMTMwLjUwNzg3MDM5MDI0Mjk3LDM5Ljk0NDc2MTI2NDg3MjQ3NiwxMDQuNDM0Njg2MjAzMTI5Niw3LjAwOTM3NTM1NzY5NjU4NiwwLjEwNDYwNTg2MzMxNjM0NTU0CisxOSxTYXQgMTIgRmViIDExLDMuODczNzMxODU2NDcyMzk3MywzLjQ3MzI5MzA0MTM2Nzg0NDIsMi4xMDcyMzQxMzc4NTk1MTU0LDQuNzk2MTMwOTQxMDg1ODgyLDMuNTIwMTE0OTk5NzI4OTExLDY5LjQwNzYyMjkzMTIwOTAyLDYxLjk5MzIxOTU1NDc1Nzg2LDU4LjMyNzgyOTE1Nzg3NjksNTMuNjg1MDUxMDQ1MTM1NCw2Ny44MjY4MTEwNDI3NDA3MiwxMy41MjE5NjQ2MzI5NTM5NjksNzUuNTYwMDIyOTQ2NTQzMjQsMTYyNjAuOTk5NTQwNjg4NjY1LDM3LjI1NDc4MzQyNzkwODM4NiwzOS42NjcxOTg5MDE3MjE5MjUsMTE1LjQxNTM1ODMzNTgyMTc4LDc1Ljk3MzgxNDI0NTUyMDM0LDQ1Ni4yODUxMzM1OTEwMzcxNSw0Mi45NzUxODgyNTg1MTgxNywzOS40NjkwNDg0Mzk0MzkzMywzOTY4NS4wNTg3NzU2MDUzNyw0NC4wOTY1NjExOTQ1MDg2Niw0NS40NTA4NDA5Njg1NDM4MiwxMjMuMTQ5NjgyNTkxMTgyMjEsOC4zMTMwNzIwNTMxNDU0ODEsMC4wNzIxMTY0MTg4MjMwMjMxNQorMjAsU3VuIDEzIEZlYiAxMSw0LjU4MjkyODYxMzk0OTE2LDMuMTM5NTE2NzY0MTEyNjc0LDIuNTE0NjI0MTQyOTY1NzE4Myw1Ljc0MzY5NDA3Mjg0OTE2Miw0LjAzNjY2MDg3ODI3NTE4NSw4Mi42MzM0NjQ3Njk4OTY5Myw2Mi40ODI3ODQyMjk2MTM3Niw2OS4wMDIxNTI3MDExMTM3Miw2My45NTI5NTUwMzQwMDAwMiw4MC44OTczMzM4OTQwNzY3NSwxNi4wOTA3NzI4OTUzMTc1MjgsODkuNDUzNDQ5NDQ0MTAwMTIsMzkxLjM5OTUzODAzMTMwNzY2LDQzLjY1NDYxNjI2MzQ0ODQ5Niw0Ny41NDgwMDIwNzQxNDgxNCwxNDAuMTg1NzA0ODgyMTc5OSw5MS45MzU3MjA2MjA5ODQ1OCwyMC43MDAxOTUyNTY3MTQ3MTgsNDkuNzAyNzMwMzAxOTM3MDMsNDcuNjQ2NTc5MzY5Mjg1NTgsOTIyLjU4NzkwNDIwMDYyOCw0Ny4zNzI2MjUyNjQ3MTk2OSw1My41NDc1NzM0ODIxOTgxMjUsMTQ3Ljk1NDAxNzEyMzI2MjQsMTAuMDIzMDQyOTI2MDI1MjIxLDAuMDgwNTk2NTQ2MTY2ODE5NDEKKzIxLE1vbiAxNCBGZWIgMTEsNS41MTU0MTcyMjg0NTAyODUsMy40MzQyMzIyNjA1NDY3MjUsMy4wNDM3MzQ4MDYyMTkxMzUsNi45NjM3NzkxODEzMDg3MDU1LDQuNzcyNDU4Nzc0ODg1NTcxLDk5Ljg3MzMzMTQ5MDM5MzQ3LDcxLjkyMTE2MTY4ODIyNTg1LDgzLjA2OTU4MzcxNzMzMjI2LDc3LjMyNzg0MjYwMTA2OSw5Ny44OTE4NTE5MjE2MjQ0NSwxOS40NDIwOTI1NjA2ODEyMjUsMTA3Ljc0MDMwMjczMjI3MTksMTguMjk3NzY5ODUwMTM4MTM1LDUyLjI0MTk1NDMyNjQxOTQ1LDU3LjcxODI0NDQwNDIyNjQzLDE3MS40Mzk1NjA0OTk0NTIwMywxMTIuMjI4MDA0ODkzODc5NjQsMTMuODkxNDEzMTI2MDQ3Mzk1LDU5LjAxODAwNDY3Mjg4MjE2NCw1OC4wODYzMjg0NzIyNzc2Myw1Mi41NjgyNTk5MTExNzU2NSw1NC45ODE0MjA3MjQzNjc0MSw2NC4yOTczOTc1OTM0NDEsMTc5Ljg1MDU0MDg2MDcwNzQsMTIuMjA4NTg2NzUxODk0NTM2LDAuMDk0MjI1OTYwMTYyNTc0OTkKKzIyLFR1ZSAxNSBGZWIgMTEsNi43MDkwNTY5NjE1NzkzOTMsMy45Mzg3MTIxOTM3MTU3MDcyLDMuNzE2MDA0Mzc1MDkwMDk4NCw4LjQ5ODgzNjE5NDMzMTg3Miw1Ljc0MzE1ODY2ODMxODgzMiwxMjEuODEwNzc3MDY0MzkzMDUsODUuMTg5NDIxNzM1NjkyMTUsMTAxLjA5NzMyNzc5OTAxNTIsOTQuMzQxODE0NTExMTkzNTgsMTE5LjQ5NTM5Mzk4NjA3ODg3LDIzLjcwNTkwMTg1MzkzMzc0NiwxMzEuMTU2ODM0MDE3OTI2MSwxMi41MjU1NzAxMzg0OTk0NjQsNjMuMzQ5NTE1NjA2NDg4NzQsNzAuNTg4ODgxMDU2MDMwNjcsMjEwLjI2ODY0NjY3MTIyMDg0LDEzNy42MjQzOTY2NTcyMDU5LDE1LjU2NTAyNTUyOTg1MTg2Niw3MS4yMTExMjU2MzM3NDc4Myw3MS4xOTQxNTkyNDQwOTI1Myw0MC4wMTMyNTEyMTk4MzUyNyw2NS40MTg4NTg4NDAwMTY5NCw3OC4xMzExOTE0MzY4MzMxLDIyMC4xMTYzMjQwMzUxNDEwNSwxNC45NDk4Mjg4MzE2NzgzMjYsMC4xMTI1MjcwNzk3MTIyMzI0OAorMjMsV2VkIDE2IEZlYiAxMSw4LjIxMDcwNDU0NDY3OTM3Myw0LjYzOTAwMTA1MzA4MDIwMiw0LjU1NzIyMTgyNDYxODIyOCwxMC40MDM0Mzg1MTUxOTIzMzgsNi45ODg0NDA0NzAzNjQ2MDMsMTQ5LjI5NjU2NjA5OTQ3NjM3LDEwMi42Mzc0OTMwODkyMDcwNywxMjMuODA3NzA3MzY5MTg0MTksMTE1LjY1NTI5NzUzMTgzMzQzLDE0Ni41NDI0NzkwMjQ4ODQ1MywyOS4wNDgxNDM3MDIyNjU4NjgsMTYwLjYzOTEyNDQ0NTA5OTY0LDE0LjA1MDk1NzQ3NDA3NDg0Miw3Ny40MzIyNDMxOTE0OTY0MSw4Ni42NDMzMTc2NjYzNjczMiwyNTcuODgzMjUwNDU0MTIzMzYsMTY4Ljk4NzE1MjUyOTc4NjYsMTguMjM0OTg3MzA4MjUxODQyLDg2Ljc4MzEwMTQ1OTE3NjU5LDg3LjQzMTI1OTA2NzkwMTI0LDQ1LjE1NTMxMDQ5MzgyNDQxNiw3OS4wNDEwODI0MjQ2NTExLDk1LjYwOTgyODc2ODM5NzY1LDI3MC4yMzQ3MTAyODUwOTM3NCwxOC4zNDI4OTM4MzgwMTE4NjgsMC4xMzYxOTkxMDg0NzAzNTE0CisyNCxUaHUgMTcgRmViIDExLDEwLjA3NDE1MDYxNTg2MDIzMyw1LjU2MTA5MzYwMjQ3NjI3MSw1LjU5NjM3NTc3Mjc4Nzc3MywxMi43NDYxNDM4MTQ3ODQzMTUsOC41NTgzNjc2ODkxMzg3NzksMTgzLjMyMDI2NDU4NTcyODMyLDEyNC45ODE5MzQwNTUxNDUsMTUyLjAzODI2Mjk3ODI1MTA1LDE0Mi4wMzQyNjQ1OTM0MjQzMywxNzkuOTgzMDAxNDE2MjYyNiwzNS42NjY5NDA0NzQ1MTgxMywxOTcuMjczOTM2NzA4Nzc1OSwxNi40Njc1NDc5ODg1NzQ3MSw5NS4wMjc0OTc4NDQ1MDc0LDEwNi40MTU3NDUyNjc1NjYwOCwzMTUuNTkyMjUxNzQyMjE5MTYsMjA3LjIyODI5ODQzMDExMDUzLDIxLjgxOTA5Mzc2NzQxNjU4MiwxMDYuMzUzNDMwNjk1Mjc3OTEsMTA3LjI5NTI2NjYyNTc2ODA2LDUzLjAyNzg1NTY4MDk4NTI1LDk2LjQxMjkzOTMyNDYwODcxLDExNy4zODU4NzM3NjgzMDc2MiwzMzEuODMwMzQzNDgwNDM3LDIyLjUwMDI2Nzc1NzY2ODMzMywwLjE2NjI3Mzk5ODI0ODQxODEKKzI1LEZyaSAxOCBGZWIgMTEsMTIuMzU2MjczMTg4MzU5MTEsNi43Mzg5NTA5NTU4MDgxMTEsNi44NjMzNDY4MDIzMzExMDcsMTUuNTg3NDQ4MDg1NTIwMDgsMTAuNTEwMTA3MDExOTIxMzI0LDIyNC44ODE3NDI1Mzg0ODUsMTUzLjExMzk3NjgyNTQ2MTQ2LDE4Ni42NzMwMDg1Nzk0MDM1MywxNzQuMjUyODcxODAyOTk2NzQsMjIwLjc4ODQ5MjE2Mjc5OSw0My43NTc3MzUxMjM2NTg1NSwyNDIuMjAxODE2ODQ4ODI1MzMsMTkuNzA5MDA0ODc5MTgyMjcsMTE2LjcyMjUxMDc0ODUwOTIyLDEzMC40NTA1MzcyNjY2NjU3NSwzODQuNTgxNjYyMzI1MTI3NjQsMjUzLjIzNzkwNDEyNTc3NDY2LDI2LjQ1NjY5NjM0NTUyMDcyMiwxMzAuNjEzNTkwNzY1MTc2NCwxMzEuMjc1ODgyMzE1Mzg5NDgsNjMuNTQ0Nzg1MTQ0NzI4MjE2LDExOC4yMTQ1MDc1MDc2ODk3MywxNDQuMTYyMzcwMTUxMDU5OTUsNDA2LjU0NDA5NTI0MDIxMTgsMjcuNTI0OTcxMDc0NjQyMDE0LDAuMjAzODgxMjE5MjQ5MzIxODcKKzI2LFNhdCAxOSBGZWIgMTEsMTUuMTE0Mjg0ODgwNzI3ODUzLDguMjE0MjQ1NzQxMjQ4MjQ3LDguMzg3NTUzMzg5NTMyMzI1LDE4Ljk4NDcyMTAxNTMzNDk1NSwxMi45MDUxMzg2MzM2MzkyNzcsMjc0Ljk3MjUxNzI3NjQ1NTk2LDE4OC4wNDY3Njg0ODY4NDU5NiwyMjguNjA4MDI1NDgwMjEwNDIsMjEzLjA3ODQwMjcyNjE0MDQ0LDI2OS45MTg1ODIxNzYwMDk1LDUzLjUxNDY2ODk4NjA0MzM3LDI5Ni41NzY1NjQ5MTc2NDk2NSwyMy45MDE3NTg3NjQzMDE1NywxNDMuMTI2NDM2Nzk1MTA2NCwxNTkuMjc1OTMxMjMxMTQ2MzMsNDY1Ljg5NTA1MTI4Mzc1NTUsMzA3LjgzNDI3MDgyNjkxNjA1LDMyLjMzNzcyOTg3ODQyNjE3LDE2MC4yOTc3MjE0Nzg5MTg0OCwxNTkuODMxNDg2ODE0Nzk5NTUsNzcuMTIyNTk2OTA2NTQ3MjMsMTQ1LjIwNzc3MTMwODk4MjYsMTc2LjY1OTY4ODgwNTIxNDk4LDQ5NS45NTExNDA0NjQ3Njc2LDMzLjUxMzMxMDU1MDU2OTY1LDAuMjUwMjYyNTg4OTQxNTE0OTMKKzI3LFN1biAyMCBGZWIgMTEsMTguNDAyMDI1NTAwMzE4OTMsMTAuMDMxNjY3MzQxNTM1MywxMC4xOTU5ODEzNTQzMzAzOTIsMjIuOTg3Mzc3MzgzNjQ1MjY3LDE1LjgwNTg4NTA1MDUwMzI5MiwzMzQuNTA2NjE4NzMxMTgyNSwyMzAuODY0MjYyODI0NzU2NiwyNzguNjkzOTA2NTI0OTIxNSwyNTkuMjE3OTQ4Mzg2MzcwMSwzMjguMjU1OTE0MDc4MjA5NCw2NS4xMTY0MjgxMDYxMzc5MiwzNjEuNDkwMjg3NzcyMzE3LDI5LjIxNzQzNTY2OTcwMjA1LDE3NC44MzM5MDU2NjE1NzQxNiwxOTMuMzY4MTk1NjQ3NjkyOTQsNTYwLjM1NDU1MDMzOTAzMDksMzcxLjcwNTQ2NzM2NzUyNTEsMzkuNjg1NjI5ODI4NDkyMjEsMTk2LjE0MDA1NjU0MjUwMjM4LDE5My4zNTY2Mzc5MTQzMDU5LDk0LjMxNTMwMzc2NjU0NTk4LDE3OC4xOTY5MDg5MzcwOTgwNCwyMTUuNTcxMTY4MjA0NDY3NjgsNjAxLjQ1MjY1ODc1Njk2NTgsNDAuNTQ3MzY4MDY3OTg5ODMsMC4zMDY2ODY5ODI5MjQwMjg1CisyOCxNb24gMjEgRmViIDExLDIyLjI2Njc0MDIyODUzNDY2LDEyLjI0MzU2MjgwNjgzNjgyNiwxMi4zMTE1NjY2Mjk4MTA4MDcsMjcuNjM4OTY5NjYzODc5MDU2LDE5LjI3MTkyMTc5MjI0MzMwOCw0MDQuMjg0MzAzMDc2MzgxODMsMjgyLjY2MjAwNzI0MDM3NywzMzcuNjg3NjU0OTgxNjEwMTQsMzEzLjI4OTE5OTkxNDY1MjksMzk2LjU1OTUwMzk2ODgyOTA2LDc4LjcyMjUwNjI3NDE5ODM3LDQzNy45MTQyOTYyODM4NTkzNiwzNS44NTc3NzgzMjU0ODQ4OCwyMTIuMzg3ODk4MjYzNDQ1ODMsMjMzLjEyMTQ4ODcwNDc1NzU1LDY2OC41Mzg0NDE3OTY0MDYxLDQ0NS4zNjQ2ODQ1NTI0ODExNSw0OC43NDYwMjQzMjUxMzE5MzQsMjM4LjgzNDIyODYzMTYyMzIzLDIzMi4xNTgxODE5MzkxMDI0LDExNS43Njk5NzM5ODU0MjQwNiwyMTcuOTg2NDAzNjQxNDYzMDgsMjYxLjUxOTc0MTg5MzA5MjcsNzI0LjE4NjkwMjI0MTY4OTIsNDguNjk0NzgzMzUxMTk0NDUsMC4zNzQ0NTY4OTExMTc0ODA3CisyOSxUdWUgMjIgRmViIDExLDI2Ljc0NDk0NzU0NzY2NTcxNywxNC44OTY2NzgzODAwNTYyMzUsMTQuNzUxMTA3MTA0MjY1MDEyLDMyLjk2NTc0OTk4ODY0MjE0NSwyMy4zNTU4MzI3MzU0Nzc1MjcsNDg0Ljg5MzcwNjQwMzU0MTQ0LDM0NC40NzgwMzQ4MjY0MjE1NSw0MDYuMTgzNjA0Mjg2MjUzMSwzNzUuNzQ1OTkwMzQ0NzE3NTQsNDc1LjM4Njk5ODM4OTAyNjEzLDk0LjQ0ODkzNDkyNzExMDI5LDUyNi42MDYyNTE2Mjg0MzA2LDQ0LjA0NDI3ODE5NjYxNDY1LDI1Ni4yMzgxNjY2MjIyMDkzLDI3OC44MTM0MTQ1NjE3NTE0LDc5MC42ODc0MDY3MjEyMDY3LDUyOS4xMDU2MjgzMzQxMjIyLDU5Ljc3Mzc1Mzc0NzA5MTczLDI4OC45NzcxMTQ1NTU1MTE5NSwyNzYuNDI2MDk5Mjc4OTQ0NCwxNDIuMTkzODg5OTYxODcxNSwyNjUuMzI0NDY3MTM4MjQ0NSwzMTUuMDA4NTU0MDAxMTE5MzYsODY0LjkyODk3MTgxNzMxNjMsNTcuOTk1NDU1MzYyMDczNzEsMC40NTQ3MDg5MjgxMDY2NDczCiszMCxXZWQgMjMgRmViIDExLDMxLjg2MDE4ODkxMjQwMjk1OCwxOC4wMzQwMTIwNjU4OTMzNywxNy41MjQzMDg4OTQ2NDA2NSwzOC45Nzk3NTc3Nzc3MTA3LDI4LjA5OTQ2MTc2MDAxODA3LDU3Ni42OTE4Mzc2NDY3Njc3LDQxNy4yMjIxMTk3MDA5NjcyNiw0ODQuNTc4NDQ3NzkxNjk3NCw0NDYuODYyODQxMjY3NzgwMyw1NjUuMDY3ODg2MzcxMjQwMSwxMTIuMzY3MjY0MjA4MTM4NjEsNjI4LjA2ODA5MjcxMzg5MjcsNTQuMDA2NjExOTI4NTIyMzYsMzA2LjcxMDA3Mjg4MjM0NDMsMzMwLjU4OTAyNDMyNzM3MjQ0LDkyNi43Mjc2MjUzMTk3MjMxLDYyMi45ODk4ODgxNjcxNDUzLDczLjAxNzg5MzAzMTE1NzM0LDM0Ny4wMjk5MDQ3MDE0MTg1LDMyNi4yMjU1MjY3NzUzMjI0NiwxNzQuMzE3MjM1MDY2NjEzMDUsMzIwLjg1MzY3NzUxMzA2MjUsMzc2LjM4NjkxNTM2MDQzNjgsMTAyNC4wNDgwNTQ2Nzg4NDQ3LDY4LjQ2Mzk1NzEwODY1MjI1LDAuNTQ4MzkzODg1MzQ1MDI5MgorMzEsVGh1IDI0IEZlYiAxMSwzNy42MjE1ODQ4ODk1NDU5NSwyMS42OTM2ODgxMDI3OTE3MywyMC42MzMyNTU0MzAxNjk0NSw0NS42NzkwOTQxMTAzMTI4NzQsMzMuNTMwODgxMTAzNjkzMzUsNjc5Ljc4Njg3OTE3NDM5MDcsNTAxLjYxMDAzODk1MjM5MzksNTczLjA0NjM0ODExNjI0MDgsNTI2LjcyMTE4ODg4NjAzNjUsNjY1LjY4NTkxMzg1OTY4MDcsMTMyLjUwMTQ2NzkyMjU5ODQsNzQyLjUxNTIwOTE4MDIxMDEsNjUuOTY5MDg4NDAyNjc1MTUsMzYzLjk4MjEwMjE2NjYzOCwzODguNDUzNjM2NzQ1MTMyMywxMDc2LjI5MTQ3MjkxNDk0NDcsNzI2Ljg1MDI5NzYzODk0OTQsODguNzA1MzY3NDEwNjcwNDIsNDEzLjI4NjAxNDkyNTk0MzA1LDM4MS40OTYxMzI1MjM1NTgsMjEyLjg0OTU1NTQ3MjM1NzE3LDM4NS4wNjUwMzA1ODgwODQ4LDQ0NS44MjY4NjYyMzQ5NjE0LDEyMDEuNDkxNzcxMzY2MTIxNiw4MC4wODk5MzUyODgyODM2MSwwLjY1NjIyNTgwNDAyMjM4NzgKKzMyLEZyaSAyNSBGZWIgMTEsNDQuMDIzMzg0MTUzNTI2ODIsMjUuOTAzNTkzMDU3NDU3MTMsMjQuMDcyMzkyOTcwNzU4Myw1My4wNDY2NTY1NzU4MTI2NywzOS42NjI0ODM3NTQ2OTMyNSw3OTQuMDI4MzIxNjQ2MjkwMSw1OTguMTExNDMzMzI4NzQwNSw2NzEuNTI4NTIzNTY3MTExNSw2MTUuMjAyMzQzMTMwNzQyNSw3NzcuMDc1MjI2NjcxMzE4LDE1NC44MjQ2NDk3NTAxNzI2Myw4NjkuODYyODU3MDM5MDkwNyw4MC4xMzU4MjM4ODk0NzU3Myw0MjguMDc1MTA2OTc1NDAxNSw0NTIuMjc1NzY0NDM3MzY1NiwxMjM4Ljc0MzIxMzEwNDEzNDYsODQwLjMwOTg5OTIzODQ2NDksMTA3LjAyNDgwMTY3NzAzNjksNDg3Ljg1MDE4MTE3NjAyNDc2LDQ0Mi4wNTk1Mjk4NTM5NzE2LDI1OC40MzI1NzQyMTIyNjE0LDQ1OC4yNjEzNzgxMjQzMzgyNSw1MjMuMzEzNjE0NzU0MDE2NCwxMzk2LjgwMDUxMDk5ODAyMDIsOTIuODM3ODcwNzU0NDUzNDIsMC43Nzg2MDM2MDI0MjY2MTQyCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1BvcHVsYXRpb25Hcm93dGhTRUlSX1JLX1JlZmVyZW5jZS9UZXN0U0VJUi9ydW5wYXJhbWV0ZXJzLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvUG9wdWxhdGlvbkdyb3d0aFNFSVJfUktfUmVmZXJlbmNlL1Rlc3RTRUlSL3J1bnBhcmFtZXRlcnMuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ3Zjk4NDUKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1BvcHVsYXRpb25Hcm93dGhTRUlSX1JLX1JlZmVyZW5jZS9UZXN0U0VJUi9ydW5wYXJhbWV0ZXJzLmNzdgpAQCAtMCwwICsxLDIgQEAKK2Rpc2Vhc2VOYW1lLHBvcHVsYXRpb25JZGVudGlmaWVyLHRpbWVQZXJpb2QsZnJlcXVlbmN5RGVwZW5kZW50LHJlZmVyZW5jZVBvcHVsYXRpb25EZW5zaXR5LHJvYWROZXR3b3JrSW5mZWN0aW91c1Byb3BvcnRpb24sY2hhcmFjdGVyaXN0aWNNaXhpbmdEaXN0YW5jZSx0cmFuc21pc3Npb25SYXRlLG5vbkxpbmVhcml0eUNvZWZmaWNpZW50LHJlY292ZXJ5UmF0ZSxpbmZlY3Rpb3VzTW9ydGFsaXR5UmF0ZSxpbW11bml0eUxvc3NSYXRlLGluY3ViYXRpb25SYXRlCitUZXN0U0VJUixodW1hbiw4NjQwMDAwMCx0cnVlLDEwMC4wLDAuMDEsMi4yNSwxMC4wLDEuMCwwLjMsMC4wLDAuMCwwLjQKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1NpbmdsZVNxdWFyZVNFSVJfRkRfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL0Rpc2Vhc2UgRGVhdGhzXzAuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9TaW5nbGVTcXVhcmVTRUlSX0ZEX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9EaXNlYXNlIERlYXRoc18wLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZmViMTY2Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9TaW5nbGVTcXVhcmVTRUlSX0ZEX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9EaXNlYXNlIERlYXRoc18wLmNzdgpAQCAtMCwwICsxLDMzIEBACitpdGVyYXRpb24sdGltZSxzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9ub2RlLzU0RDVFRUEzRjVDQkUzL0xBVF9TUVJfMF8wCisxLFR1ZSAyNSBKYW4gMTEsMC4wCisyLFdlZCAyNiBKYW4gMTEsMC4wCiszLFRodSAyNyBKYW4gMTEsMC4wCis0LEZyaSAyOCBKYW4gMTEsMC4wCis1LFNhdCAyOSBKYW4gMTEsMC4wCis2LFN1biAzMCBKYW4gMTEsMC4wCis3LE1vbiAzMSBKYW4gMTEsMC4wCis4LFR1ZSAxIEZlYiAxMSwwLjAKKzksV2VkIDIgRmViIDExLDAuMAorMTAsVGh1IDMgRmViIDExLDAuMAorMTEsRnJpIDQgRmViIDExLDAuMAorMTIsU2F0IDUgRmViIDExLDAuMAorMTMsU3VuIDYgRmViIDExLDAuMAorMTQsTW9uIDcgRmViIDExLDAuMAorMTUsVHVlIDggRmViIDExLDAuMAorMTYsV2VkIDkgRmViIDExLDAuMAorMTcsVGh1IDEwIEZlYiAxMSwwLjAKKzE4LEZyaSAxMSBGZWIgMTEsMC4wCisxOSxTYXQgMTIgRmViIDExLDAuMAorMjAsU3VuIDEzIEZlYiAxMSwwLjAKKzIxLE1vbiAxNCBGZWIgMTEsMC4wCisyMixUdWUgMTUgRmViIDExLDAuMAorMjMsV2VkIDE2IEZlYiAxMSwwLjAKKzI0LFRodSAxNyBGZWIgMTEsMC4wCisyNSxGcmkgMTggRmViIDExLDAuMAorMjYsU2F0IDE5IEZlYiAxMSwwLjAKKzI3LFN1biAyMCBGZWIgMTEsMC4wCisyOCxNb24gMjEgRmViIDExLDAuMAorMjksVHVlIDIyIEZlYiAxMSwwLjAKKzMwLFdlZCAyMyBGZWIgMTEsMC4wCiszMSxUaHUgMjQgRmViIDExLDAuMAorMzIsRnJpIDI1IEZlYiAxMSwwLjAKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvU2luZ2xlU3F1YXJlU0VJUl9GRF9SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vRV8wLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvU2luZ2xlU3F1YXJlU0VJUl9GRF9SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vRV8wLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZGFjZWJkCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9TaW5nbGVTcXVhcmVTRUlSX0ZEX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9FXzAuY3N2CkBAIC0wLDAgKzEsMzMgQEAKK2l0ZXJhdGlvbix0aW1lLHN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL25vZGUvNTRENUVFQTNGNUNCRTMvTEFUX1NRUl8wXzAKKzEsVHVlIDI1IEphbiAxMSwwLjAKKzIsV2VkIDI2IEphbiAxMSwxLjU5ODQKKzMsVGh1IDI3IEphbiAxMSwyLjA3NjEyOTc5MgorNCxGcmkgMjggSmFuIDExLDMuMDQ1OTQwMDc0MzE3NjExNQorNSxTYXQgMjkgSmFuIDExLDQuNDA2ODY0NjIyNTM5ODQ5Cis2LFN1biAzMCBKYW4gMTEsNi4zNzg1Njc1MzM3MzYyMzIKKzcsTW9uIDMxIEphbiAxMSw5LjIxODQ0MjIxNzQ4MDMyCis4LFR1ZSAxIEZlYiAxMSwxMy4yOTYzNjk2ODMzMDA0MjMKKzksV2VkIDIgRmViIDExLDE5LjEyMjk3NTE3MTcyMjM4NAorMTAsVGh1IDMgRmViIDExLDI3LjM4ODQyNTM3OTg2MjkyMworMTEsRnJpIDQgRmViIDExLDM4Ljk5MTA5NDE1ODY5NDg1CisxMixTYXQgNSBGZWIgMTEsNTUuMDMwNDExNDY1NTk5NDg1CisxMyxTdW4gNiBGZWIgMTEsNzYuNzA5Mzg0NDc1MTMyMDMKKzE0LE1vbiA3IEZlYiAxMSwxMDUuMDUzMzI5NDU4Nzk3ODMKKzE1LFR1ZSA4IEZlYiAxMSwxNDAuMzE3NjE2NzY5NTAwMTUKKzE2LFdlZCA5IEZlYiAxMSwxODAuOTkzNjM0NzkyNjAzOTgKKzE3LFRodSAxMCBGZWIgMTEsMjIyLjU3MjQ3MjUzODM2NzYzCisxOCxGcmkgMTEgRmViIDExLDI1Ni44NTAzOTM0MzcwNjIzCisxOSxTYXQgMTIgRmViIDExLDI3My4zNDcxNjc5NjkxNDE2NQorMjAsU3VuIDEzIEZlYiAxMSwyNjQuMDcyMzU1MTcxNTY0MjUKKzIxLE1vbiAxNCBGZWIgMTEsMjI5LjYzMDY4OTYxOTQ2NzIKKzIyLFR1ZSAxNSBGZWIgMTEsMTgwLjU2MTc5NzM1NTg1NTYyCisyMyxXZWQgMTYgRmViIDExLDEzMC43MzY5ODE4OTMxMjcxCisyNCxUaHUgMTcgRmViIDExLDg5LjMyNTM5NzAwMjc1MTI5CisyNSxGcmkgMTggRmViIDExLDU4Ljg1NTkxNzA1NTMzNTQwNAorMjYsU2F0IDE5IEZlYiAxMSwzNy45Njc5MDE5ODA2NjEzMworMjcsU3VuIDIwIEZlYiAxMSwyNC4yMDY3MTUzMTgzNzE2NworMjgsTW9uIDIxIEZlYiAxMSwxNS4zNDAxNzQ4NjQ3ODI4MTkKKzI5LFR1ZSAyMiBGZWIgMTEsOS42OTc2NzU0MDY5MDkyMgorMzAsV2VkIDIzIEZlYiAxMSw2LjEzMDY0MDI2NjM2MzQwMQorMzEsVGh1IDI0IEZlYiAxMSwzLjg4MjUwNTk0Mjc1MDA1NDYKKzMyLEZyaSAyNSBGZWIgMTEsMi40NjY0NzkyNjk1NTAyODI2CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1NpbmdsZVNxdWFyZVNFSVJfRkRfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL0lfMC5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1NpbmdsZVNxdWFyZVNFSVJfRkRfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL0lfMC5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmM0OThiNgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvU2luZ2xlU3F1YXJlU0VJUl9GRF9SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vSV8wLmNzdgpAQCAtMCwwICsxLDMzIEBACitpdGVyYXRpb24sdGltZSxzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9ub2RlLzU0RDVFRUEzRjVDQkUzL0xBVF9TUVJfMF8wCisxLFR1ZSAyNSBKYW4gMTEsMS4wCisyLFdlZCAyNiBKYW4gMTEsMC43CiszLFRodSAyNyBKYW4gMTEsMS4xMjkzNjAwMDAwMDAwMDAxCis0LEZyaSAyOCBKYW4gMTEsMS42MjEwMDM5MTY4Cis1LFNhdCAyOSBKYW4gMTEsMi4zNTMwNzg3NzE0ODcwNDUKKzYsU3VuIDMwIEphbiAxMSwzLjQwOTkwMDk4OTA1Njg3MQorNyxNb24gMzEgSmFuIDExLDQuOTM4MzU3NzA1ODM0MzAzCis4LFR1ZSAxIEZlYiAxMSw3LjE0NDIyNzI4MTA3NjE0Cis5LFdlZCAyIEZlYiAxMSwxMC4zMTk1MDY5NzAwNzM0NjcKKzEwLFRodSAzIEZlYiAxMSwxNC44NzI4NDQ5NDc3NDAzODEKKzExLEZyaSA0IEZlYiAxMSwyMS4zNjYzNjE2MTUzNjM0MzgKKzEyLFNhdCA1IEZlYiAxMSwzMC41NTI4OTA3OTQyMzIzNDcKKzEzLFN1biA2IEZlYiAxMSw0My4zOTkxODgxNDIyMDI0NAorMTQsTW9uIDcgRmViIDExLDYxLjA2MzE4NTQ4OTU5NDUyCisxNSxUdWUgOCBGZWIgMTEsODQuNzY1NTYxNjI2MjM1MworMTYsV2VkIDkgRmViIDExLDExNS40NjI5Mzk4NDYxNjQ3NworMTcsVGh1IDEwIEZlYiAxMSwxNTMuMjIxNTExODA5MzU2OTQKKzE4LEZyaSAxMSBGZWIgMTEsMTk2LjI4NDA0NzI4MTg5NjkzCisxOSxTYXQgMTIgRmViIDExLDI0MC4xMzg5OTA0NzIxNTI3OAorMjAsU3VuIDEzIEZlYiAxMSwyNzcuNDM2MTYwNTE4MTYzNgorMjEsTW9uIDE0IEZlYiAxMSwyOTkuODM0MjU0NDMxMzQwMjQKKzIyLFR1ZSAxNSBGZWIgMTEsMzAxLjczNjI1Mzk0OTcyNTA0CisyMyxXZWQgMTYgRmViIDExLDI4My40NDAwOTY3MDcxNDk4CisyNCxUaHUgMTcgRmViIDExLDI1MC43MDI4NjA0NTIyNTU3MgorMjUsRnJpIDE4IEZlYiAxMSwyMTEuMjIyMTYxMTE3Njc5NTIKKzI2LFNhdCAxOSBGZWIgMTEsMTcxLjM5Nzg3OTYwNDUwOTgyCisyNyxTdW4gMjAgRmViIDExLDEzNS4xNjU2NzY1MTU0MjE0CisyOCxNb24gMjEgRmViIDExLDEwNC4yOTg2NTk2ODgxNDM2NgorMjksVHVlIDIyIEZlYiAxMSw3OS4xNDUxMzE3Mjc2MTM2OQorMzAsV2VkIDIzIEZlYiAxMSw1OS4yODA2NjIzNzIwOTMyNzUKKzMxLFRodSAyNCBGZWIgMTEsNDMuOTQ4NzE5NzY3MDEwNjUKKzMyLEZyaSAyNSBGZWIgMTEsMzIuMzE3MTA2MjE0MDA3NDgKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvU2luZ2xlU3F1YXJlU0VJUl9GRF9SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vSW5jaWRlbmNlXzAuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9TaW5nbGVTcXVhcmVTRUlSX0ZEX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9JbmNpZGVuY2VfMC5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmY2MDdmZQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvU2luZ2xlU3F1YXJlU0VJUl9GRF9SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vSW5jaWRlbmNlXzAuY3N2CkBAIC0wLDAgKzEsMzMgQEAKK2l0ZXJhdGlvbix0aW1lLHN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL25vZGUvNTRENUVFQTNGNUNCRTMvTEFUX1NRUl8wXzAKKzEsVHVlIDI1IEphbiAxMSwwLjAKKzIsV2VkIDI2IEphbiAxMSwxLjU5ODQKKzMsVGh1IDI3IEphbiAxMSwxLjExNzA4OTc5MgorNCxGcmkgMjggSmFuIDExLDEuODAwMjYyMTk5MTE3NjExMworNSxTYXQgMjkgSmFuIDExLDIuNTc5MzAwNTc3OTQ5MjgxNworNixTdW4gMzAgSmFuIDExLDMuNzM0NDQ4NzYwMjEyMzIzNworNyxNb24gMzEgSmFuIDExLDUuMzkxMzAxNjk3MjM4NTgKKzgsVHVlIDEgRmViIDExLDcuNzY1MzA0MzUyODEyMjMyCis5LFdlZCAyIEZlYiAxMSwxMS4xNDUxNTMzNjE3NDIxMzIKKzEwLFRodSAzIEZlYiAxMSwxNS45MTQ2NDAyNzY4Mjk0OTEKKzExLEZyaSA0IEZlYiAxMSwyMi41NTgwMzg5MzA3NzcwOTgKKzEyLFNhdCA1IEZlYiAxMSwzMS42MzU3NTQ5NzAzODI1NzUKKzEzLFN1biA2IEZlYiAxMSw0My42OTExMzc1OTU3NzIzMworMTQsTW9uIDcgRmViIDExLDU5LjAyNzY5ODc3MzcxODYyCisxNSxUdWUgOCBGZWIgMTEsNzcuMjg1NjE5MDk0MjIxNDYKKzE2LFdlZCA5IEZlYiAxMSw5Ni44MDMwNjQ3MzA5MDM5CisxNyxUaHUgMTAgRmViIDExLDExMy45NzYyOTE2NjI4MDUyNQorMTgsRnJpIDExIEZlYiAxMSwxMjMuMzA2OTA5OTE0MDQxNzQKKzE5LFNhdCAxMiBGZWIgMTEsMTE5LjIzNjkzMTkwNjkwNDI5CisyMCxTdW4gMTMgRmViIDExLDEwMC4wNjQwNTQzOTAwNzkyNAorMjEsTW9uIDE0IEZlYiAxMSw3MS4xODcyNzY1MTY1Mjg2NAorMjIsVHVlIDE1IEZlYiAxMSw0Mi43ODMzODM1ODQxNzUzMDQKKzIzLFdlZCAxNiBGZWIgMTEsMjIuMzk5OTAzNDc5NjEzNzQKKzI0LFRodSAxNyBGZWIgMTEsMTAuODgzMjA3ODY2ODc1MDI0CisyNSxGcmkgMTggRmViIDExLDUuMjYwNjc4ODUzNjg0NjMKKzI2LFNhdCAxOSBGZWIgMTEsMi42NTQzNTE3NDc0NjAwOQorMjcsU3VuIDIwIEZlYiAxMSwxLjQyNTk3NDEyOTk3NDg3MTgKKzI4LE1vbiAyMSBGZWIgMTEsMC44MTYxNDU2NzM3NTk4MTcKKzI5LFR1ZSAyMiBGZWIgMTEsMC40OTM1NzA0ODgwMzk1Mjc3CiszMCxXZWQgMjMgRmViIDExLDAuMzEyMDM1MDIyMjE3ODY5NDQKKzMxLFRodSAyNCBGZWIgMTEsMC4yMDQxMjE3ODI5MzIwMTQwOAorMzIsRnJpIDI1IEZlYiAxMSwwLjEzNjk3NTcwMzkwMDI1MDA1CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1NpbmdsZVNxdWFyZVNFSVJfRkRfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL1BvcHVsYXRpb24gQ291bnRfMC5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1NpbmdsZVNxdWFyZVNFSVJfRkRfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL1BvcHVsYXRpb24gQ291bnRfMC5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmViYjZiZAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvU2luZ2xlU3F1YXJlU0VJUl9GRF9SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vUG9wdWxhdGlvbiBDb3VudF8wLmNzdgpAQCAtMCwwICsxLDMzIEBACitpdGVyYXRpb24sdGltZSxzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9ub2RlLzU0RDVFRUEzRjVDQkUzL0xBVF9TUVJfMF8wCisxLFR1ZSAyNSBKYW4gMTEsMTAwMC4wCisyLFdlZCAyNiBKYW4gMTEsMTAwMC4wCiszLFRodSAyNyBKYW4gMTEsMTAwMC4wCis0LEZyaSAyOCBKYW4gMTEsMTAwMC4wCis1LFNhdCAyOSBKYW4gMTEsMTAwMC4wCis2LFN1biAzMCBKYW4gMTEsMTAwMC4wCis3LE1vbiAzMSBKYW4gMTEsMTAwMC4wCis4LFR1ZSAxIEZlYiAxMSwxMDAwLjAwMDAwMDAwMDAwMDEKKzksV2VkIDIgRmViIDExLDEwMDAuMDAwMDAwMDAwMDAwMQorMTAsVGh1IDMgRmViIDExLDEwMDAuMDAwMDAwMDAwMDAwMgorMTEsRnJpIDQgRmViIDExLDEwMDAuMDAwMDAwMDAwMDAwMQorMTIsU2F0IDUgRmViIDExLDEwMDAuMDAwMDAwMDAwMDAwMQorMTMsU3VuIDYgRmViIDExLDEwMDAuMAorMTQsTW9uIDcgRmViIDExLDEwMDAuMDAwMDAwMDAwMDAwMQorMTUsVHVlIDggRmViIDExLDEwMDAuMAorMTYsV2VkIDkgRmViIDExLDEwMDAuMDAwMDAwMDAwMDAwMQorMTcsVGh1IDEwIEZlYiAxMSwxMDAwLjAKKzE4LEZyaSAxMSBGZWIgMTEsMTAwMC4wMDAwMDAwMDAwMDAxCisxOSxTYXQgMTIgRmViIDExLDEwMDAuMDAwMDAwMDAwMDAwMQorMjAsU3VuIDEzIEZlYiAxMSwxMDAwLjAwMDAwMDAwMDAwMDEKKzIxLE1vbiAxNCBGZWIgMTEsMTAwMC4wCisyMixUdWUgMTUgRmViIDExLDEwMDAuMAorMjMsV2VkIDE2IEZlYiAxMSwxMDAwLjAwMDAwMDAwMDAwMDEKKzI0LFRodSAxNyBGZWIgMTEsMTAwMC4wCisyNSxGcmkgMTggRmViIDExLDEwMDAuMDAwMDAwMDAwMDAwMQorMjYsU2F0IDE5IEZlYiAxMSwxMDAwLjAKKzI3LFN1biAyMCBGZWIgMTEsMTAwMC4wMDAwMDAwMDAwMDAxCisyOCxNb24gMjEgRmViIDExLDEwMDAuMDAwMDAwMDAwMDAwMQorMjksVHVlIDIyIEZlYiAxMSwxMDAwLjAKKzMwLFdlZCAyMyBGZWIgMTEsMTAwMC4wMDAwMDAwMDAwMDAxCiszMSxUaHUgMjQgRmViIDExLDEwMDAuMDAwMDAwMDAwMDAwMQorMzIsRnJpIDI1IEZlYiAxMSwxMDAwLjAKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvU2luZ2xlU3F1YXJlU0VJUl9GRF9SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vUl8wLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvU2luZ2xlU3F1YXJlU0VJUl9GRF9SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vUl8wLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMTM5ZTFkCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9TaW5nbGVTcXVhcmVTRUlSX0ZEX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9SXzAuY3N2CkBAIC0wLDAgKzEsMzMgQEAKK2l0ZXJhdGlvbix0aW1lLHN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL25vZGUvNTRENUVFQTNGNUNCRTMvTEFUX1NRUl8wXzAKKzEsVHVlIDI1IEphbiAxMSwwLjAKKzIsV2VkIDI2IEphbiAxMSwwLjMKKzMsVGh1IDI3IEphbiAxMSwwLjUxCis0LEZyaSAyOCBKYW4gMTEsMC44NDg4MDgKKzUsU2F0IDI5IEphbiAxMSwxLjMzNTEwOTE3NTA0Cis2LFN1biAzMCBKYW4gMTEsMi4wNDEwMzI4MDY0ODYxMTM0Cis3LE1vbiAzMSBKYW4gMTEsMy4wNjQwMDMxMDMyMDMxNzQ1Cis4LFR1ZSAxIEZlYiAxMSw0LjU0NTUxMDQxNDk1MzQ2NTUKKzksV2VkIDIgRmViIDExLDYuNjg4Nzc4NTk5Mjc2MzA4CisxMCxUaHUgMyBGZWIgMTEsOS43ODQ2MzA2OTAyOTgzNDgKKzExLEZyaSA0IEZlYiAxMSwxNC4yNDY0ODQxNzQ2MjA0NjMKKzEyLFNhdCA1IEZlYiAxMSwyMC42NTYzOTI2NTkyMjk0OTMKKzEzLFN1biA2IEZlYiAxMSwyOS44MjIyNTk4OTc0OTkxOTQKKzE0LE1vbiA3IEZlYiAxMSw0Mi44NDIwMTYzNDAxNTk5MworMTUsVHVlIDggRmViIDExLDYxLjE2MDk3MTk4NzAzODI4CisxNixXZWQgOSBGZWIgMTEsODYuNTkwNjQwNDc0OTA4ODcKKzE3LFRodSAxMCBGZWIgMTEsMTIxLjIyOTUyMjQyODc1ODI5CisxOCxGcmkgMTEgRmViIDExLDE2Ny4xOTU5NzU5NzE1NjUzNgorMTksU2F0IDEyIEZlYiAxMSwyMjYuMDgxMTkwMTU2MTM0NDMKKzIwLFN1biAxMyBGZWIgMTEsMjk4LjEyMjg4NzI5Nzc4MDI3CisyMSxNb24gMTQgRmViIDExLDM4MS4zNTM3MzU0NTMyMjkzCisyMixUdWUgMTUgRmViIDExLDQ3MS4zMDQwMTE3ODI2MzE0CisyMyxXZWQgMTYgRmViIDExLDU2MS44MjQ4ODc5Njc1NDg5CisyNCxUaHUgMTcgRmViIDExLDY0Ni44NTY5MTY5Nzk2OTM4CisyNSxGcmkgMTggRmViIDExLDcyMi4wNjc3NzUxMTUzNzA1CisyNixTYXQgMTkgRmViIDExLDc4NS40MzQ0MjM0NTA2NzQzCisyNyxTdW4gMjAgRmViIDExLDgzNi44NTM3ODczMzIwMjczCisyOCxNb24gMjEgRmViIDExLDg3Ny40MDM0OTAyODY2NTM4CisyOSxUdWUgMjIgRmViIDExLDkwOC42OTMwODgxOTMwOTY5CiszMCxXZWQgMjMgRmViIDExLDkzMi40MzY2Mjc3MTEzODEKKzMxLFRodSAyNCBGZWIgMTEsOTUwLjIyMDgyNjQyMzAwODkKKzMyLEZyaSAyNSBGZWIgMTEsOTYzLjQwNTQ0MjM1MzExMjEKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvU2luZ2xlU3F1YXJlU0VJUl9GRF9SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vU18wLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvU2luZ2xlU3F1YXJlU0VJUl9GRF9SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vU18wLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lN2ZlNzI3Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9TaW5nbGVTcXVhcmVTRUlSX0ZEX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9TXzAuY3N2CkBAIC0wLDAgKzEsMzMgQEAKK2l0ZXJhdGlvbix0aW1lLHN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL25vZGUvNTRENUVFQTNGNUNCRTMvTEFUX1NRUl8wXzAKKzEsVHVlIDI1IEphbiAxMSw5OTkuMAorMixXZWQgMjYgSmFuIDExLDk5Ny40MDE2CiszLFRodSAyNyBKYW4gMTEsOTk2LjI4NDUxMDIwOAorNCxGcmkgMjggSmFuIDExLDk5NC40ODQyNDgwMDg4ODI0Cis1LFNhdCAyOSBKYW4gMTEsOTkxLjkwNDk0NzQzMDkzMzEKKzYsU3VuIDMwIEphbiAxMSw5ODguMTcwNDk4NjcwNzIwOAorNyxNb24gMzEgSmFuIDExLDk4Mi43NzkxOTY5NzM0ODIzCis4LFR1ZSAxIEZlYiAxMSw5NzUuMDEzODkyNjIwNjcKKzksV2VkIDIgRmViIDExLDk2My44Njg3MzkyNTg5Mjc5CisxMCxUaHUgMyBGZWIgMTEsOTQ3Ljk1NDA5ODk4MjA5ODUKKzExLEZyaSA0IEZlYiAxMSw5MjUuMzk2MDYwMDUxMzIxMworMTIsU2F0IDUgRmViIDExLDg5My43NjAzMDUwODA5Mzg4CisxMyxTdW4gNiBGZWIgMTEsODUwLjA2OTE2NzQ4NTE2NjQKKzE0LE1vbiA3IEZlYiAxMSw3OTEuMDQxNDY4NzExNDQ3OAorMTUsVHVlIDggRmViIDExLDcxMy43NTU4NDk2MTcyMjYzCisxNixXZWQgOSBGZWIgMTEsNjE2Ljk1Mjc4NDg4NjMyMjQKKzE3LFRodSAxMCBGZWIgMTEsNTAyLjk3NjQ5MzIyMzUxNzIKKzE4LEZyaSAxMSBGZWIgMTEsMzc5LjY2OTU4MzMwOTQ3NTQ2CisxOSxTYXQgMTIgRmViIDExLDI2MC40MzI2NTE0MDI1NzEyCisyMCxTdW4gMTMgRmViIDExLDE2MC4zNjg1OTcwMTI0OTE5NgorMjEsTW9uIDE0IEZlYiAxMSw4OS4xODEzMjA0OTU5NjMzMgorMjIsVHVlIDE1IEZlYiAxMSw0Ni4zOTc5MzY5MTE3ODgwMTUKKzIzLFdlZCAxNiBGZWIgMTEsMjMuOTk4MDMzNDMyMTc0Mjc1CisyNCxUaHUgMTcgRmViIDExLDEzLjExNDgyNTU2NTI5OTI1CisyNSxGcmkgMTggRmViIDExLDcuODU0MTQ2NzExNjE0NjIxCisyNixTYXQgMTkgRmViIDExLDUuMTk5Nzk0OTY0MTU0NTMxCisyNyxTdW4gMjAgRmViIDExLDMuNzczODIwODM0MTc5NjU5MworMjgsTW9uIDIxIEZlYiAxMSwyLjk1NzY3NTE2MDQxOTg0MjQKKzI5LFR1ZSAyMiBGZWIgMTEsMi40NjQxMDQ2NzIzODAzMTUKKzMwLFdlZCAyMyBGZWIgMTEsMi4xNTIwNjk2NTAxNjI0NDUyCiszMSxUaHUgMjQgRmViIDExLDEuOTQ3OTQ3ODY3MjMwNDMxMQorMzIsRnJpIDI1IEZlYiAxMSwxLjgxMDk3MjE2MzMzMDE4MQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9TaW5nbGVTcXVhcmVTRUlSX0ZEX1JlZmVyZW5jZS9UZXN0U0VJUi9ydW5wYXJhbWV0ZXJzLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvU2luZ2xlU3F1YXJlU0VJUl9GRF9SZWZlcmVuY2UvVGVzdFNFSVIvcnVucGFyYW1ldGVycy5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmVkOGY1MQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvU2luZ2xlU3F1YXJlU0VJUl9GRF9SZWZlcmVuY2UvVGVzdFNFSVIvcnVucGFyYW1ldGVycy5jc3YKQEAgLTAsMCArMSwyIEBACitkaXNlYXNlTmFtZSxwb3B1bGF0aW9uSWRlbnRpZmllcix0aW1lUGVyaW9kLGZyZXF1ZW5jeURlcGVuZGVudCxyZWZlcmVuY2VQb3B1bGF0aW9uRGVuc2l0eSxyb2FkTmV0d29ya0luZmVjdGlvdXNQcm9wb3J0aW9uLGNoYXJhY3RlcmlzdGljTWl4aW5nRGlzdGFuY2UsdHJhbnNtaXNzaW9uUmF0ZSxub25MaW5lYXJpdHlDb2VmZmljaWVudCxyZWNvdmVyeVJhdGUsaW5mZWN0aW91c01vcnRhbGl0eVJhdGUsaW1tdW5pdHlMb3NzUmF0ZSxpbmN1YmF0aW9uUmF0ZQorVGVzdFNFSVIsaHVtYW4sODY0MDAwMDAsdHJ1ZSwxMDAuMCwwLjAxLDIuMjUsMS42LDEuMCwwLjMsMC4wLDAuMCwwLjQKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1NpbmdsZVNxdWFyZVNFSVJfRkRfUmVmZXJlbmNlL2F1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwvaHVtYW4vQmlydGhzXzAuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9TaW5nbGVTcXVhcmVTRUlSX0ZEX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL2h1bWFuL0JpcnRoc18wLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZmViMTY2Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9TaW5nbGVTcXVhcmVTRUlSX0ZEX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL2h1bWFuL0JpcnRoc18wLmNzdgpAQCAtMCwwICsxLDMzIEBACitpdGVyYXRpb24sdGltZSxzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9ub2RlLzU0RDVFRUEzRjVDQkUzL0xBVF9TUVJfMF8wCisxLFR1ZSAyNSBKYW4gMTEsMC4wCisyLFdlZCAyNiBKYW4gMTEsMC4wCiszLFRodSAyNyBKYW4gMTEsMC4wCis0LEZyaSAyOCBKYW4gMTEsMC4wCis1LFNhdCAyOSBKYW4gMTEsMC4wCis2LFN1biAzMCBKYW4gMTEsMC4wCis3LE1vbiAzMSBKYW4gMTEsMC4wCis4LFR1ZSAxIEZlYiAxMSwwLjAKKzksV2VkIDIgRmViIDExLDAuMAorMTAsVGh1IDMgRmViIDExLDAuMAorMTEsRnJpIDQgRmViIDExLDAuMAorMTIsU2F0IDUgRmViIDExLDAuMAorMTMsU3VuIDYgRmViIDExLDAuMAorMTQsTW9uIDcgRmViIDExLDAuMAorMTUsVHVlIDggRmViIDExLDAuMAorMTYsV2VkIDkgRmViIDExLDAuMAorMTcsVGh1IDEwIEZlYiAxMSwwLjAKKzE4LEZyaSAxMSBGZWIgMTEsMC4wCisxOSxTYXQgMTIgRmViIDExLDAuMAorMjAsU3VuIDEzIEZlYiAxMSwwLjAKKzIxLE1vbiAxNCBGZWIgMTEsMC4wCisyMixUdWUgMTUgRmViIDExLDAuMAorMjMsV2VkIDE2IEZlYiAxMSwwLjAKKzI0LFRodSAxNyBGZWIgMTEsMC4wCisyNSxGcmkgMTggRmViIDExLDAuMAorMjYsU2F0IDE5IEZlYiAxMSwwLjAKKzI3LFN1biAyMCBGZWIgMTEsMC4wCisyOCxNb24gMjEgRmViIDExLDAuMAorMjksVHVlIDIyIEZlYiAxMSwwLjAKKzMwLFdlZCAyMyBGZWIgMTEsMC4wCiszMSxUaHUgMjQgRmViIDExLDAuMAorMzIsRnJpIDI1IEZlYiAxMSwwLjAKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvU2luZ2xlU3F1YXJlU0VJUl9GRF9SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9odW1hbi9Db3VudF8wLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvU2luZ2xlU3F1YXJlU0VJUl9GRF9SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9odW1hbi9Db3VudF8wLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YTJhNzE2Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9TaW5nbGVTcXVhcmVTRUlSX0ZEX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL2h1bWFuL0NvdW50XzAuY3N2CkBAIC0wLDAgKzEsMzMgQEAKK2l0ZXJhdGlvbix0aW1lLHN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL25vZGUvNTRENUVFQTNGNUNCRTMvTEFUX1NRUl8wXzAKKzEsVHVlIDI1IEphbiAxMSwxMDAwLjAKKzIsV2VkIDI2IEphbiAxMSwxMDAwLjAKKzMsVGh1IDI3IEphbiAxMSwxMDAwLjAKKzQsRnJpIDI4IEphbiAxMSwxMDAwLjAKKzUsU2F0IDI5IEphbiAxMSwxMDAwLjAKKzYsU3VuIDMwIEphbiAxMSwxMDAwLjAKKzcsTW9uIDMxIEphbiAxMSwxMDAwLjAKKzgsVHVlIDEgRmViIDExLDEwMDAuMAorOSxXZWQgMiBGZWIgMTEsMTAwMC4wCisxMCxUaHUgMyBGZWIgMTEsMTAwMC4wCisxMSxGcmkgNCBGZWIgMTEsMTAwMC4wCisxMixTYXQgNSBGZWIgMTEsMTAwMC4wCisxMyxTdW4gNiBGZWIgMTEsMTAwMC4wCisxNCxNb24gNyBGZWIgMTEsMTAwMC4wCisxNSxUdWUgOCBGZWIgMTEsMTAwMC4wCisxNixXZWQgOSBGZWIgMTEsMTAwMC4wCisxNyxUaHUgMTAgRmViIDExLDEwMDAuMAorMTgsRnJpIDExIEZlYiAxMSwxMDAwLjAKKzE5LFNhdCAxMiBGZWIgMTEsMTAwMC4wCisyMCxTdW4gMTMgRmViIDExLDEwMDAuMAorMjEsTW9uIDE0IEZlYiAxMSwxMDAwLjAKKzIyLFR1ZSAxNSBGZWIgMTEsMTAwMC4wCisyMyxXZWQgMTYgRmViIDExLDEwMDAuMAorMjQsVGh1IDE3IEZlYiAxMSwxMDAwLjAKKzI1LEZyaSAxOCBGZWIgMTEsMTAwMC4wCisyNixTYXQgMTkgRmViIDExLDEwMDAuMAorMjcsU3VuIDIwIEZlYiAxMSwxMDAwLjAKKzI4LE1vbiAyMSBGZWIgMTEsMTAwMC4wCisyOSxUdWUgMjIgRmViIDExLDEwMDAuMAorMzAsV2VkIDIzIEZlYiAxMSwxMDAwLjAKKzMxLFRodSAyNCBGZWIgMTEsMTAwMC4wCiszMixGcmkgMjUgRmViIDExLDEwMDAuMApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9TaW5nbGVTcXVhcmVTRUlSX0ZEX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL2h1bWFuL0RlYXRoc18wLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvU2luZ2xlU3F1YXJlU0VJUl9GRF9SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9odW1hbi9EZWF0aHNfMC5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2ZlYjE2NgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvU2luZ2xlU3F1YXJlU0VJUl9GRF9SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9odW1hbi9EZWF0aHNfMC5jc3YKQEAgLTAsMCArMSwzMyBAQAoraXRlcmF0aW9uLHRpbWUsc3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vbm9kZS81NEQ1RUVBM0Y1Q0JFMy9MQVRfU1FSXzBfMAorMSxUdWUgMjUgSmFuIDExLDAuMAorMixXZWQgMjYgSmFuIDExLDAuMAorMyxUaHUgMjcgSmFuIDExLDAuMAorNCxGcmkgMjggSmFuIDExLDAuMAorNSxTYXQgMjkgSmFuIDExLDAuMAorNixTdW4gMzAgSmFuIDExLDAuMAorNyxNb24gMzEgSmFuIDExLDAuMAorOCxUdWUgMSBGZWIgMTEsMC4wCis5LFdlZCAyIEZlYiAxMSwwLjAKKzEwLFRodSAzIEZlYiAxMSwwLjAKKzExLEZyaSA0IEZlYiAxMSwwLjAKKzEyLFNhdCA1IEZlYiAxMSwwLjAKKzEzLFN1biA2IEZlYiAxMSwwLjAKKzE0LE1vbiA3IEZlYiAxMSwwLjAKKzE1LFR1ZSA4IEZlYiAxMSwwLjAKKzE2LFdlZCA5IEZlYiAxMSwwLjAKKzE3LFRodSAxMCBGZWIgMTEsMC4wCisxOCxGcmkgMTEgRmViIDExLDAuMAorMTksU2F0IDEyIEZlYiAxMSwwLjAKKzIwLFN1biAxMyBGZWIgMTEsMC4wCisyMSxNb24gMTQgRmViIDExLDAuMAorMjIsVHVlIDE1IEZlYiAxMSwwLjAKKzIzLFdlZCAxNiBGZWIgMTEsMC4wCisyNCxUaHUgMTcgRmViIDExLDAuMAorMjUsRnJpIDE4IEZlYiAxMSwwLjAKKzI2LFNhdCAxOSBGZWIgMTEsMC4wCisyNyxTdW4gMjAgRmViIDExLDAuMAorMjgsTW9uIDIxIEZlYiAxMSwwLjAKKzI5LFR1ZSAyMiBGZWIgMTEsMC4wCiszMCxXZWQgMjMgRmViIDExLDAuMAorMzEsVGh1IDI0IEZlYiAxMSwwLjAKKzMyLEZyaSAyNSBGZWIgMTEsMC4wCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1NpbmdsZVNxdWFyZVNFSVJfRkRfUmVmZXJlbmNlL2F1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwvaHVtYW4vRGVuc2l0eV8wLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvU2luZ2xlU3F1YXJlU0VJUl9GRF9SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9odW1hbi9EZW5zaXR5XzAuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU5NzE1MmEKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1NpbmdsZVNxdWFyZVNFSVJfRkRfUmVmZXJlbmNlL2F1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwvaHVtYW4vRGVuc2l0eV8wLmNzdgpAQCAtMCwwICsxLDMzIEBACitpdGVyYXRpb24sdGltZSxzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9ub2RlLzU0RDVFRUEzRjVDQkUzL0xBVF9TUVJfMF8wCisxLFR1ZSAyNSBKYW4gMTEsMC40OTM4MjcxNjA0OTM4MjcxMworMixXZWQgMjYgSmFuIDExLDAuNDkzODI3MTYwNDkzODI3MTMKKzMsVGh1IDI3IEphbiAxMSwwLjQ5MzgyNzE2MDQ5MzgyNzEzCis0LEZyaSAyOCBKYW4gMTEsMC40OTM4MjcxNjA0OTM4MjcxMworNSxTYXQgMjkgSmFuIDExLDAuNDkzODI3MTYwNDkzODI3MTMKKzYsU3VuIDMwIEphbiAxMSwwLjQ5MzgyNzE2MDQ5MzgyNzEzCis3LE1vbiAzMSBKYW4gMTEsMC40OTM4MjcxNjA0OTM4MjcxMworOCxUdWUgMSBGZWIgMTEsMC40OTM4MjcxNjA0OTM4MjcxMworOSxXZWQgMiBGZWIgMTEsMC40OTM4MjcxNjA0OTM4MjcxMworMTAsVGh1IDMgRmViIDExLDAuNDkzODI3MTYwNDkzODI3MTMKKzExLEZyaSA0IEZlYiAxMSwwLjQ5MzgyNzE2MDQ5MzgyNzEzCisxMixTYXQgNSBGZWIgMTEsMC40OTM4MjcxNjA0OTM4MjcxMworMTMsU3VuIDYgRmViIDExLDAuNDkzODI3MTYwNDkzODI3MTMKKzE0LE1vbiA3IEZlYiAxMSwwLjQ5MzgyNzE2MDQ5MzgyNzEzCisxNSxUdWUgOCBGZWIgMTEsMC40OTM4MjcxNjA0OTM4MjcxMworMTYsV2VkIDkgRmViIDExLDAuNDkzODI3MTYwNDkzODI3MTMKKzE3LFRodSAxMCBGZWIgMTEsMC40OTM4MjcxNjA0OTM4MjcxMworMTgsRnJpIDExIEZlYiAxMSwwLjQ5MzgyNzE2MDQ5MzgyNzEzCisxOSxTYXQgMTIgRmViIDExLDAuNDkzODI3MTYwNDkzODI3MTMKKzIwLFN1biAxMyBGZWIgMTEsMC40OTM4MjcxNjA0OTM4MjcxMworMjEsTW9uIDE0IEZlYiAxMSwwLjQ5MzgyNzE2MDQ5MzgyNzEzCisyMixUdWUgMTUgRmViIDExLDAuNDkzODI3MTYwNDkzODI3MTMKKzIzLFdlZCAxNiBGZWIgMTEsMC40OTM4MjcxNjA0OTM4MjcxMworMjQsVGh1IDE3IEZlYiAxMSwwLjQ5MzgyNzE2MDQ5MzgyNzEzCisyNSxGcmkgMTggRmViIDExLDAuNDkzODI3MTYwNDkzODI3MTMKKzI2LFNhdCAxOSBGZWIgMTEsMC40OTM4MjcxNjA0OTM4MjcxMworMjcsU3VuIDIwIEZlYiAxMSwwLjQ5MzgyNzE2MDQ5MzgyNzEzCisyOCxNb24gMjEgRmViIDExLDAuNDkzODI3MTYwNDkzODI3MTMKKzI5LFR1ZSAyMiBGZWIgMTEsMC40OTM4MjcxNjA0OTM4MjcxMworMzAsV2VkIDIzIEZlYiAxMSwwLjQ5MzgyNzE2MDQ5MzgyNzEzCiszMSxUaHUgMjQgRmViIDExLDAuNDkzODI3MTYwNDkzODI3MTMKKzMyLEZyaSAyNSBGZWIgMTEsMC40OTM4MjcxNjA0OTM4MjcxMwpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9TaW5nbGVTcXVhcmVTRUlSX0ZEX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL2h1bWFuL0luY2lkZW5jZV8wLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvU2luZ2xlU3F1YXJlU0VJUl9GRF9SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9odW1hbi9JbmNpZGVuY2VfMC5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2ZlYjE2NgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvU2luZ2xlU3F1YXJlU0VJUl9GRF9SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9odW1hbi9JbmNpZGVuY2VfMC5jc3YKQEAgLTAsMCArMSwzMyBAQAoraXRlcmF0aW9uLHRpbWUsc3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vbm9kZS81NEQ1RUVBM0Y1Q0JFMy9MQVRfU1FSXzBfMAorMSxUdWUgMjUgSmFuIDExLDAuMAorMixXZWQgMjYgSmFuIDExLDAuMAorMyxUaHUgMjcgSmFuIDExLDAuMAorNCxGcmkgMjggSmFuIDExLDAuMAorNSxTYXQgMjkgSmFuIDExLDAuMAorNixTdW4gMzAgSmFuIDExLDAuMAorNyxNb24gMzEgSmFuIDExLDAuMAorOCxUdWUgMSBGZWIgMTEsMC4wCis5LFdlZCAyIEZlYiAxMSwwLjAKKzEwLFRodSAzIEZlYiAxMSwwLjAKKzExLEZyaSA0IEZlYiAxMSwwLjAKKzEyLFNhdCA1IEZlYiAxMSwwLjAKKzEzLFN1biA2IEZlYiAxMSwwLjAKKzE0LE1vbiA3IEZlYiAxMSwwLjAKKzE1LFR1ZSA4IEZlYiAxMSwwLjAKKzE2LFdlZCA5IEZlYiAxMSwwLjAKKzE3LFRodSAxMCBGZWIgMTEsMC4wCisxOCxGcmkgMTEgRmViIDExLDAuMAorMTksU2F0IDEyIEZlYiAxMSwwLjAKKzIwLFN1biAxMyBGZWIgMTEsMC4wCisyMSxNb24gMTQgRmViIDExLDAuMAorMjIsVHVlIDE1IEZlYiAxMSwwLjAKKzIzLFdlZCAxNiBGZWIgMTEsMC4wCisyNCxUaHUgMTcgRmViIDExLDAuMAorMjUsRnJpIDE4IEZlYiAxMSwwLjAKKzI2LFNhdCAxOSBGZWIgMTEsMC4wCisyNyxTdW4gMjAgRmViIDExLDAuMAorMjgsTW9uIDIxIEZlYiAxMSwwLjAKKzI5LFR1ZSAyMiBGZWIgMTEsMC4wCiszMCxXZWQgMjMgRmViIDExLDAuMAorMzEsVGh1IDI0IEZlYiAxMSwwLjAKKzMyLEZyaSAyNSBGZWIgMTEsMC4wCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1NpbmdsZVNxdWFyZVNFSVJfRkRfUmVmZXJlbmNlL2F1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwvcnVucGFyYW1ldGVycy5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1NpbmdsZVNxdWFyZVNFSVJfRkRfUmVmZXJlbmNlL2F1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwvcnVucGFyYW1ldGVycy5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDY4NTViNQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvU2luZ2xlU3F1YXJlU0VJUl9GRF9SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9ydW5wYXJhbWV0ZXJzLmNzdgpAQCAtMCwwICsxLDIgQEAKK3BvcHVsYXRpb25JZGVudGlmaWVyLG5hbWUsdGFyZ2V0SVNPS2V5LGJpcnRoUmF0ZSxkZWF0aFJhdGUsdGltZVBlcmlvZAoraHVtYW4sYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbCwsMC4wLDAuMCw4NjQwMDAwMApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvU2luZ2xlU3F1YXJlU0VJUl9SS19SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vRGlzZWFzZSBEZWF0aHNfMC5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1NpbmdsZVNxdWFyZVNFSVJfUktfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL0Rpc2Vhc2UgRGVhdGhzXzAuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNmZWIxNjYKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1NpbmdsZVNxdWFyZVNFSVJfUktfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL0Rpc2Vhc2UgRGVhdGhzXzAuY3N2CkBAIC0wLDAgKzEsMzMgQEAKK2l0ZXJhdGlvbix0aW1lLHN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL25vZGUvNTRENUVFQTNGNUNCRTMvTEFUX1NRUl8wXzAKKzEsVHVlIDI1IEphbiAxMSwwLjAKKzIsV2VkIDI2IEphbiAxMSwwLjAKKzMsVGh1IDI3IEphbiAxMSwwLjAKKzQsRnJpIDI4IEphbiAxMSwwLjAKKzUsU2F0IDI5IEphbiAxMSwwLjAKKzYsU3VuIDMwIEphbiAxMSwwLjAKKzcsTW9uIDMxIEphbiAxMSwwLjAKKzgsVHVlIDEgRmViIDExLDAuMAorOSxXZWQgMiBGZWIgMTEsMC4wCisxMCxUaHUgMyBGZWIgMTEsMC4wCisxMSxGcmkgNCBGZWIgMTEsMC4wCisxMixTYXQgNSBGZWIgMTEsMC4wCisxMyxTdW4gNiBGZWIgMTEsMC4wCisxNCxNb24gNyBGZWIgMTEsMC4wCisxNSxUdWUgOCBGZWIgMTEsMC4wCisxNixXZWQgOSBGZWIgMTEsMC4wCisxNyxUaHUgMTAgRmViIDExLDAuMAorMTgsRnJpIDExIEZlYiAxMSwwLjAKKzE5LFNhdCAxMiBGZWIgMTEsMC4wCisyMCxTdW4gMTMgRmViIDExLDAuMAorMjEsTW9uIDE0IEZlYiAxMSwwLjAKKzIyLFR1ZSAxNSBGZWIgMTEsMC4wCisyMyxXZWQgMTYgRmViIDExLDAuMAorMjQsVGh1IDE3IEZlYiAxMSwwLjAKKzI1LEZyaSAxOCBGZWIgMTEsMC4wCisyNixTYXQgMTkgRmViIDExLDAuMAorMjcsU3VuIDIwIEZlYiAxMSwwLjAKKzI4LE1vbiAyMSBGZWIgMTEsMC4wCisyOSxUdWUgMjIgRmViIDExLDAuMAorMzAsV2VkIDIzIEZlYiAxMSwwLjAKKzMxLFRodSAyNCBGZWIgMTEsMC4wCiszMixGcmkgMjUgRmViIDExLDAuMApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9TaW5nbGVTcXVhcmVTRUlSX1JLX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9FXzAuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9TaW5nbGVTcXVhcmVTRUlSX1JLX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9FXzAuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ5MzYzYjYKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1NpbmdsZVNxdWFyZVNFSVJfUktfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL0VfMC5jc3YKQEAgLTAsMCArMSwzMyBAQAoraXRlcmF0aW9uLHRpbWUsc3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vbm9kZS81NEQ1RUVBM0Y1Q0JFMy9MQVRfU1FSXzBfMAorMSxUdWUgMjUgSmFuIDExLDAuMAorMixXZWQgMjYgSmFuIDExLDEuMjQ5NzMxNzEyMzExNTEyCiszLFRodSAyNyBKYW4gMTEsMi4zNTQzMTM5OTEyMzcwMzM3Cis0LEZyaSAyOCBKYW4gMTEsMy44MTIyOTgwNzc3ODg4NjgKKzUsU2F0IDI5IEphbiAxMSw2LjAwMDc3MjEwOTQ3OTY5MworNixTdW4gMzAgSmFuIDExLDkuMzcxNzQ3MTQ1MzUyNjk4Cis3LE1vbiAzMSBKYW4gMTEsMTQuNTYyMDcxNzUwNzU0NDQ4Cis4LFR1ZSAxIEZlYiAxMSwyMi40ODEwOTY0Mjc3MTIzCis5LFdlZCAyIEZlYiAxMSwzNC4zNzI4MDg2NTAzNDM1NjUKKzEwLFRodSAzIEZlYiAxMSw1MS43OTA4ODk3MzEzNjU0MQorMTEsRnJpIDQgRmViIDExLDc2LjM0NjQ4Mzc5MTYwMzc1CisxMixTYXQgNSBGZWIgMTEsMTA5LjAxMzE2ODE2NzQxMzEzCisxMyxTdW4gNiBGZWIgMTEsMTQ4Ljg0NDA3MTk2OTk0MDMKKzE0LE1vbiA3IEZlYiAxMSwxOTEuNDU5MzY1NTEzMTU2MTcKKzE1LFR1ZSA4IEZlYiAxMSwyMjguNjU0MzE1NzUyNTMyMworMTYsV2VkIDkgRmViIDExLDI1MC44NTEzODAyMTA4MzA1NAorMTcsVGh1IDEwIEZlYiAxMSwyNTEuOTg2MDkxMDM2MDkyNTUKKzE4LEZyaSAxMSBGZWIgMTEsMjMzLjAwODIyNTAwNzA5MjM0CisxOSxTYXQgMTIgRmViIDExLDIwMC43MTY3MzA4NjIwMTg0NAorMjAsU3VuIDEzIEZlYiAxMSwxNjMuNDY5MjYzNzYyNzE4OTUKKzIxLE1vbiAxNCBGZWIgMTEsMTI3LjY3OTM2MDg5NDk5OTg1CisyMixUdWUgMTUgRmViIDExLDk2Ljc4Mjc2NDU5MzIxMTc4CisyMyxXZWQgMTYgRmViIDExLDcxLjg0NzYzMzgxOTA2NjQ2CisyNCxUaHUgMTcgRmViIDExLDUyLjU4MjUxODg4NjUxMDQ3CisyNSxGcmkgMTggRmViIDExLDM4LjExOTMxOTI2NjA3ODMxCisyNixTYXQgMTkgRmViIDExLDI3LjQ2NjI5NDIyMDQ2MjQxNgorMjcsU3VuIDIwIEZlYiAxMSwxOS43MTg2NzE1MjE5NDUwMzcKKzI4LE1vbiAyMSBGZWIgMTEsMTQuMTMwOTE1MjA4NjE2MjgxCisyOSxUdWUgMjIgRmViIDExLDEwLjEyMjIxNTc2MDM3OTY0MworMzAsV2VkIDIzIEZlYiAxMSw3LjI1NTIzNDM0NjUzODYyCiszMSxUaHUgMjQgRmViIDExLDUuMjA3NzY3OTU3MjkzOTMKKzMyLEZyaSAyNSBGZWIgMTEsMy43NDU4MzY0MTA3MTExNjU3CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1NpbmdsZVNxdWFyZVNFSVJfUktfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL0lfMC5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1NpbmdsZVNxdWFyZVNFSVJfUktfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL0lfMC5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTA1OWI0MQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvU2luZ2xlU3F1YXJlU0VJUl9SS19SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vSV8wLmNzdgpAQCAtMCwwICsxLDMzIEBACitpdGVyYXRpb24sdGltZSxzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9ub2RlLzU0RDVFRUEzRjVDQkUzL0xBVF9TUVJfMF8wCisxLFR1ZSAyNSBKYW4gMTEsMS4wCisyLFdlZCAyNiBKYW4gMTEsMC45ODIxOTU0NDkxMTkzMzczCiszLFRodSAyNyBKYW4gMTEsMS4zNTU0MDIxMjExODE3MzczCis0LEZyaSAyOCBKYW4gMTEsMi4wNjY2MDAyNTczNDE0ODg4Cis1LFNhdCAyOSBKYW4gMTEsMy4yMTg1ODkzNzM2OTYwMzQKKzYsU3VuIDMwIEphbiAxMSw1LjAyNzYyMzgyMzE2NjM2NAorNyxNb24gMzEgSmFuIDExLDcuODQwOTI5NzM5MTE3ODgyCis4LFR1ZSAxIEZlYiAxMSwxMi4xODI5NDY2MzM2MjI3ODcKKzksV2VkIDIgRmViIDExLDE4LjgxNjExNzg5ODAyNDczCisxMCxUaHUgMyBGZWIgMTEsMjguNzk0Mzg2NjYwMzYwMzM1CisxMSxGcmkgNCBGZWIgMTEsNDMuNDU4MzE1MjkzMTY2MDI0CisxMixTYXQgNSBGZWIgMTEsNjQuMjcwNTY3MTgyNDQyNzkKKzEzLFN1biA2IEZlYiAxMSw5Mi4zNDcxNzQ5ODYzNzI4CisxNCxNb24gNyBGZWIgMTEsMTI3LjYwMjA0NDUwNTMyMzU5CisxNSxUdWUgOCBGZWIgMTEsMTY3Ljc0MDc3NTgyMDQ4NDc3CisxNixXZWQgOSBGZWIgMTEsMjA3Ljg2MTAwOTYzNDUwOQorMTcsVGh1IDEwIEZlYiAxMSwyNDEuNTEyNDQ1NzI0NTg1CisxOCxGcmkgMTEgRmViIDExLDI2My4wNTQ0MTQzMTk5OTk0CisxOSxTYXQgMTIgRmViIDExLDI2OS43OTcxNDE0MDc4Mzg3NQorMjAsU3VuIDEzIEZlYiAxMSwyNjIuNTEwMDUyNTE0NjQ5NAorMjEsTW9uIDE0IEZlYiAxMSwyNDQuMzYzNTU4MjY0MzA4OTgKKzIyLFR1ZSAxNSBGZWIgMTEsMjE5LjM4MDgyNTI4MzEwNjE2CisyMyxXZWQgMTYgRmViIDExLDE5MS4yNzE1OTU2MzQ3Mjc3CisyNCxUaHUgMTcgRmViIDExLDE2Mi44NzkzNjU4NjU4NTM5CisyNSxGcmkgMTggRmViIDExLDEzNi4wODc4NDE5NDA1NTcxOAorMjYsU2F0IDE5IEZlYiAxMSwxMTEuOTYxMTgyNDc1MzQyMjYKKzI3LFN1biAyMCBGZWIgMTEsOTAuOTU3MjE4NTM2MjQ4OTkKKzI4LE1vbiAyMSBGZWIgMTEsNzMuMTMwNTEzODEwMDI2NTEKKzI5LFR1ZSAyMiBGZWIgMTEsNTguMjk0MTEwMTU2OTIzOTIKKzMwLFdlZCAyMyBGZWIgMTEsNDYuMTM1NTk5NzA2MjQ3NDU0CiszMSxUaHUgMjQgRmViIDExLDM2LjI5NDExODQ2MDE2Njk1NgorMzIsRnJpIDI1IEZlYiAxMSwyOC40MDc3MDgwNTY5MzQ1ODUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvU2luZ2xlU3F1YXJlU0VJUl9SS19SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vSW5jaWRlbmNlXzAuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9TaW5nbGVTcXVhcmVTRUlSX1JLX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9JbmNpZGVuY2VfMC5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGI1MDJmNwotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvU2luZ2xlU3F1YXJlU0VJUl9SS19SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vSW5jaWRlbmNlXzAuY3N2CkBAIC0wLDAgKzEsMzMgQEAKK2l0ZXJhdGlvbix0aW1lLHN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL25vZGUvNTRENUVFQTNGNUNCRTMvTEFUX1NRUl8wXzAKKzEsVHVlIDI1IEphbiAxMSwwLjAKKzIsV2VkIDI2IEphbiAxMSwxLjUxNjgzNDcxMDgwOTM1MgorMyxUaHUgMjcgSmFuIDExLDEuODIwMjYxNzcwMzkyNjAwNworNCxGcmkgMjggSmFuIDExLDIuNjczMjgzMjc2MzA3MjUyMworNSxTYXQgMjkgSmFuIDExLDQuMTIwMDQzNTI5ODMyODMxCis2LFN1biAzMCBKYW4gMTEsNi4zOTY4NjEyNzU5MTcwNjMKKzcsTW9uIDMxIEphbiAxMSw5LjkwMzE5NTY5OTAxNzM1NAorOCxUdWUgMSBGZWIgMTEsMTUuMjE4MTEwODI3ODczMjkzCis5LFdlZCAyIEZlYiAxMSwyMy4xMDU3MDYwNTc1NzUyNDQKKzEwLFRodSAzIEZlYiAxMSwzNC40Mzg2OTI2MzMxNTI3NQorMTEsRnJpIDQgRmViIDExLDQ5LjkyMTg0ODQ0NTUwNzQxCisxMixTYXQgNSBGZWIgMTEsNjkuNDY3NDE1MjE1ODEyNTQKKzEzLFN1biA2IEZlYiAxMSw5MS4yMTE3MTcwMzg2MTgxNQorMTQsTW9uIDcgRmViIDExLDExMC42OTk2NzI3MzEwNjYzOQorMTUsVHVlIDggRmViIDExLDEyMS41NjMxMjY5Mjc3Njg5NQorMTYsV2VkIDkgRmViIDExLDExOC43MzYyNTM5MjU3MjMyOQorMTcsVGh1IDEwIEZlYiAxMSwxMDIuNDM0MTI1OTQ5NzYwMjcKKzE4LEZyaSAxMSBGZWIgMTEsNzguNjAyMDQwMzk3NzYwODYKKzE5LFNhdCAxMiBGZWIgMTEsNTQuNzUzNzk4MzE5MjY0NzMKKzIwLFN1biAxMyBGZWIgMTEsMzUuNjMwMDA5NzIxNDMxNTU2CisyMSxNb24gMTQgRmViIDExLDIyLjMxNjQ4NDA3NzkwNTgyMworMjIsVHVlIDE1IEZlYiAxMSwxMy44MDM2MTE1NzczMTU5MjUKKzIzLFdlZCAxNiBGZWIgMTEsOC41OTE2MTU5Mjc0Mjk4OTcKKzI0LFRodSAxNyBGZWIgMTEsNS40NDQ2MjMyMDI1MzM4OQorMjUsRnJpIDE4IEZlYiAxMSwzLjUzMzc1NDQxMjgzMDkwOTUKKzI2LFNhdCAxOSBGZWIgMTEsMi4zNTMwNDMwOTQzODIzNjIKKzI3LFN1biAyMCBGZWIgMTEsMS42MDU5OTExMDM3NTI5NzAyCisyOCxNb24gMjEgRmViIDExLDEuMTIwODA0NjIyODQ5NzA0OAorMjksVHVlIDIyIEZlYiAxMSwwLjc5NzM3MjE1ODQ4MzU4NjQKKzMwLFdlZCAyMyBGZWIgMTEsMC41NzY0MzgxMTE0Njk4MjU4CiszMSxUaHUgMjQgRmViIDExLDAuNDIyMTgwNjM2NTIzMzM2NAorMzIsRnJpIDI1IEZlYiAxMSwwLjMxMjQxNzc1NjM4ODg1MDQKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvU2luZ2xlU3F1YXJlU0VJUl9SS19SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vUG9wdWxhdGlvbiBDb3VudF8wLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvU2luZ2xlU3F1YXJlU0VJUl9SS19SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vUG9wdWxhdGlvbiBDb3VudF8wLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMGJiOTJiCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9TaW5nbGVTcXVhcmVTRUlSX1JLX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9Qb3B1bGF0aW9uIENvdW50XzAuY3N2CkBAIC0wLDAgKzEsMzMgQEAKK2l0ZXJhdGlvbix0aW1lLHN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL25vZGUvNTRENUVFQTNGNUNCRTMvTEFUX1NRUl8wXzAKKzEsVHVlIDI1IEphbiAxMSwxMDAwLjAKKzIsV2VkIDI2IEphbiAxMSwxMDAwLjAKKzMsVGh1IDI3IEphbiAxMSwxMDAwLjAKKzQsRnJpIDI4IEphbiAxMSwxMDAwLjAKKzUsU2F0IDI5IEphbiAxMSwxMDAwLjAKKzYsU3VuIDMwIEphbiAxMSw5OTkuOTk5OTk5OTk5OTk5OQorNyxNb24gMzEgSmFuIDExLDEwMDAuMAorOCxUdWUgMSBGZWIgMTEsMTAwMC4wCis5LFdlZCAyIEZlYiAxMSw5OTkuOTk5OTk5OTk5OTk5OQorMTAsVGh1IDMgRmViIDExLDEwMDAuMAorMTEsRnJpIDQgRmViIDExLDk5OS45OTk5OTk5OTk5OTk5CisxMixTYXQgNSBGZWIgMTEsMTAwMC4wCisxMyxTdW4gNiBGZWIgMTEsMTAwMC4wCisxNCxNb24gNyBGZWIgMTEsMTAwMC4wCisxNSxUdWUgOCBGZWIgMTEsMTAwMC4wMDAwMDAwMDAwMDAyCisxNixXZWQgOSBGZWIgMTEsMTAwMC4wMDAwMDAwMDAwMDAyCisxNyxUaHUgMTAgRmViIDExLDEwMDAuMDAwMDAwMDAwMDAwMgorMTgsRnJpIDExIEZlYiAxMSwxMDAwLjAwMDAwMDAwMDAwMDIKKzE5LFNhdCAxMiBGZWIgMTEsMTAwMC4wCisyMCxTdW4gMTMgRmViIDExLDEwMDAuMAorMjEsTW9uIDE0IEZlYiAxMSwxMDAwLjAwMDAwMDAwMDAwMDEKKzIyLFR1ZSAxNSBGZWIgMTEsMTAwMC4wCisyMyxXZWQgMTYgRmViIDExLDEwMDAuMAorMjQsVGh1IDE3IEZlYiAxMSwxMDAwLjAwMDAwMDAwMDAwMDEKKzI1LEZyaSAxOCBGZWIgMTEsOTk5Ljk5OTk5OTk5OTk5OTkKKzI2LFNhdCAxOSBGZWIgMTEsOTk5Ljk5OTk5OTk5OTk5OTkKKzI3LFN1biAyMCBGZWIgMTEsMTAwMC4wCisyOCxNb24gMjEgRmViIDExLDEwMDAuMDAwMDAwMDAwMDAwMgorMjksVHVlIDIyIEZlYiAxMSwxMDAwLjAwMDAwMDAwMDAwMDEKKzMwLFdlZCAyMyBGZWIgMTEsMTAwMC4wMDAwMDAwMDAwMDAyCiszMSxUaHUgMjQgRmViIDExLDEwMDAuMDAwMDAwMDAwMDAwMworMzIsRnJpIDI1IEZlYiAxMSwxMDAwLjAwMDAwMDAwMDAwMDIKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvU2luZ2xlU3F1YXJlU0VJUl9SS19SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vUl8wLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvU2luZ2xlU3F1YXJlU0VJUl9SS19SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vUl8wLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZWYxZDQ1Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9TaW5nbGVTcXVhcmVTRUlSX1JLX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9SXzAuY3N2CkBAIC0wLDAgKzEsMzMgQEAKK2l0ZXJhdGlvbix0aW1lLHN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL25vZGUvNTRENUVFQTNGNUNCRTMvTEFUX1NRUl8wXzAKKzEsVHVlIDI1IEphbiAxMSwwLjAKKzIsV2VkIDI2IEphbiAxMSwwLjI4NDkwNzU0OTM3ODUwMjUKKzMsVGh1IDI3IEphbiAxMSwwLjYyNzM4MDM2ODc4MzE4MjIKKzQsRnJpIDI4IEphbiAxMSwxLjEzMTQ4MTQyMjM3ODg0OAorNSxTYXQgMjkgSmFuIDExLDEuOTExMDYxODA0MTY2MzA4Cis2LFN1biAzMCBKYW4gMTEsMy4xMjc5MTM1OTQ3NDAwMzYzCis3LE1vbiAzMSBKYW4gMTEsNS4wMjc0Nzg3NzI0MDQxMjUKKzgsVHVlIDEgRmViIDExLDcuOTg0NTQ4MDI4ODE0NjYxCis5LFdlZCAyIEZlYiAxMSwxMi41NjUzNzA1OTkzNTY2OTQKKzEwLFRodSAzIEZlYiAxMSwxOS42MDc3MTMzODkxNTE5OQorMTEsRnJpIDQgRmViIDExLDMwLjMxMDAzOTE0MTYxNTM3NworMTIsU2F0IDUgRmViIDExLDQ2LjI5ODUxODA5MjM0MTc1CisxMyxTdW4gNiBGZWIgMTEsNjkuNjAyNzIzNTI0NTAyNzQKKzE0LE1vbiA3IEZlYiAxMSwxMDIuNDMyMjMzMTkzNDAyNTEKKzE1LFR1ZSA4IEZlYiAxMSwxNDYuNjYxNjc4NTY2NjM0MTgKKzE2LFdlZCA5IEZlYiAxMSwyMDMuMDgwNjM0MjIwMDM1CisxNyxUaHUgMTAgRmViIDExLDI3MC43Mjg2MTMyNTQ0NTczCisxOCxGcmkgMTEgRmViIDExLDM0Ni43NjY1NTEwODU4MDQKKzE5LFNhdCAxMiBGZWIgMTEsNDI3LjA2OTExNjQ2MjMwMzE2CisyMCxTdW4gMTMgRmViIDExLDUwNy4yMzM2ODIxNzYyMjM1NworMjEsTW9uIDE0IEZlYiAxMSw1ODMuNDg2NTYzMzcyMTg5CisyMixUdWUgMTUgRmViIDExLDY1My4xNjk1MDQyMzI0OTU3CisyMyxXZWQgMTYgRmViIDExLDcxNC44MDU0ODA1ODI0NDk0CisyNCxUaHUgMTcgRmViIDExLDc2Ny45MDc0NDg0ODY0MTMyCisyNSxGcmkgMTggRmViIDExLDgxMi42OTU5MjY0NDQ5NzI4CisyNixTYXQgMTkgRmViIDExLDg0OS44Mjg2NTQwNTAxODYKKzI3LFN1biAyMCBGZWIgMTEsODgwLjE4NjIzMTc5MTU0OTYKKzI4LE1vbiAyMSBGZWIgMTEsOTA0LjcyMTQ5NzQ1Mzk1MDcKKzI5LFR1ZSAyMiBGZWIgMTEsOTI0LjM2Mzk3MjcxMzc3MzUKKzMwLFdlZCAyMyBGZWIgMTEsOTM5Ljk2NTkwMjY4OTc2MDkKKzMxLFRodSAyNCBGZWIgMTEsOTUyLjI3NzAzMDk2MTYwOTUKKzMyLEZyaSAyNSBGZWIgMTEsOTYxLjkzNzc5MDY2NzgxMzUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvU2luZ2xlU3F1YXJlU0VJUl9SS19SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vU18wLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvU2luZ2xlU3F1YXJlU0VJUl9SS19SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vU18wLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYmQ3OWY5Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9TaW5nbGVTcXVhcmVTRUlSX1JLX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9TXzAuY3N2CkBAIC0wLDAgKzEsMzMgQEAKK2l0ZXJhdGlvbix0aW1lLHN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL25vZGUvNTRENUVFQTNGNUNCRTMvTEFUX1NRUl8wXzAKKzEsVHVlIDI1IEphbiAxMSw5OTkuMAorMixXZWQgMjYgSmFuIDExLDk5Ny40ODMxNjUyODkxOTA3CiszLFRodSAyNyBKYW4gMTEsOTk1LjY2MjkwMzUxODc5OAorNCxGcmkgMjggSmFuIDExLDk5Mi45ODk2MjAyNDI0OTA3Cis1LFNhdCAyOSBKYW4gMTEsOTg4Ljg2OTU3NjcxMjY1NzkKKzYsU3VuIDMwIEphbiAxMSw5ODIuNDcyNzE1NDM2NzQwOAorNyxNb24gMzEgSmFuIDExLDk3Mi41Njk1MTk3Mzc3MjM2Cis4LFR1ZSAxIEZlYiAxMSw5NTcuMzUxNDA4OTA5ODUwMworOSxXZWQgMiBGZWIgMTEsOTM0LjI0NTcwMjg1MjI3NDkKKzEwLFRodSAzIEZlYiAxMSw4OTkuODA3MDEwMjE5MTIyMworMTEsRnJpIDQgRmViIDExLDg0OS44ODUxNjE3NzM2MTQ4CisxMixTYXQgNSBGZWIgMTEsNzgwLjQxNzc0NjU1NzgwMjMKKzEzLFN1biA2IEZlYiAxMSw2ODkuMjA2MDI5NTE5MTg0MgorMTQsTW9uIDcgRmViIDExLDU3OC41MDYzNTY3ODgxMTc4CisxNSxUdWUgOCBGZWIgMTEsNDU2Ljk0MzIyOTg2MDM0ODkKKzE2LFdlZCA5IEZlYiAxMSwzMzguMjA2OTc1OTM0NjI1NgorMTcsVGh1IDEwIEZlYiAxMSwyMzUuNzcyODQ5OTg0ODY1MjcKKzE4LEZyaSAxMSBGZWIgMTEsMTU3LjE3MDgwOTU4NzEwNDQzCisxOSxTYXQgMTIgRmViIDExLDEwMi40MTcwMTEyNjc4Mzk2OAorMjAsU3VuIDEzIEZlYiAxMSw2Ni43ODcwMDE1NDY0MDgxMgorMjEsTW9uIDE0IEZlYiAxMSw0NC40NzA1MTc0Njg1MDIyOTQKKzIyLFR1ZSAxNSBGZWIgMTEsMzAuNjY2OTA1ODkxMTg2MzcKKzIzLFdlZCAxNiBGZWIgMTEsMjIuMDc1Mjg5OTYzNzU2NDcKKzI0LFRodSAxNyBGZWIgMTEsMTYuNjMwNjY2NzYxMjIyNTgKKzI1LEZyaSAxOCBGZWIgMTEsMTMuMDk2OTEyMzQ4MzkxNjc0CisyNixTYXQgMTkgRmViIDExLDEwLjc0Mzg2OTI1NDAwOTMxMQorMjcsU3VuIDIwIEZlYiAxMSw5LjEzNzg3ODE1MDI1NjM0MQorMjgsTW9uIDIxIEZlYiAxMSw4LjAxNzA3MzUyNzQwNjYzNgorMjksVHVlIDIyIEZlYiAxMSw3LjIxOTcwMTM2ODkyMzA0OQorMzAsV2VkIDIzIEZlYiAxMSw2LjY0MzI2MzI1NzQ1MzIyMworMzEsVGh1IDI0IEZlYiAxMSw2LjIyMTA4MjYyMDkyOTg4NworMzIsRnJpIDI1IEZlYiAxMSw1LjkwODY2NDg2NDU0MTAzNwpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9TaW5nbGVTcXVhcmVTRUlSX1JLX1JlZmVyZW5jZS9UZXN0U0VJUi9ydW5wYXJhbWV0ZXJzLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvU2luZ2xlU3F1YXJlU0VJUl9SS19SZWZlcmVuY2UvVGVzdFNFSVIvcnVucGFyYW1ldGVycy5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmVkOGY1MQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvU2luZ2xlU3F1YXJlU0VJUl9SS19SZWZlcmVuY2UvVGVzdFNFSVIvcnVucGFyYW1ldGVycy5jc3YKQEAgLTAsMCArMSwyIEBACitkaXNlYXNlTmFtZSxwb3B1bGF0aW9uSWRlbnRpZmllcix0aW1lUGVyaW9kLGZyZXF1ZW5jeURlcGVuZGVudCxyZWZlcmVuY2VQb3B1bGF0aW9uRGVuc2l0eSxyb2FkTmV0d29ya0luZmVjdGlvdXNQcm9wb3J0aW9uLGNoYXJhY3RlcmlzdGljTWl4aW5nRGlzdGFuY2UsdHJhbnNtaXNzaW9uUmF0ZSxub25MaW5lYXJpdHlDb2VmZmljaWVudCxyZWNvdmVyeVJhdGUsaW5mZWN0aW91c01vcnRhbGl0eVJhdGUsaW1tdW5pdHlMb3NzUmF0ZSxpbmN1YmF0aW9uUmF0ZQorVGVzdFNFSVIsaHVtYW4sODY0MDAwMDAsdHJ1ZSwxMDAuMCwwLjAxLDIuMjUsMS42LDEuMCwwLjMsMC4wLDAuMCwwLjQKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1NpbmdsZVNxdWFyZVNFSVJfUktfUmVmZXJlbmNlL2F1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwvaHVtYW4vQmlydGhzXzAuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9TaW5nbGVTcXVhcmVTRUlSX1JLX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL2h1bWFuL0JpcnRoc18wLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZmViMTY2Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9TaW5nbGVTcXVhcmVTRUlSX1JLX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL2h1bWFuL0JpcnRoc18wLmNzdgpAQCAtMCwwICsxLDMzIEBACitpdGVyYXRpb24sdGltZSxzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9ub2RlLzU0RDVFRUEzRjVDQkUzL0xBVF9TUVJfMF8wCisxLFR1ZSAyNSBKYW4gMTEsMC4wCisyLFdlZCAyNiBKYW4gMTEsMC4wCiszLFRodSAyNyBKYW4gMTEsMC4wCis0LEZyaSAyOCBKYW4gMTEsMC4wCis1LFNhdCAyOSBKYW4gMTEsMC4wCis2LFN1biAzMCBKYW4gMTEsMC4wCis3LE1vbiAzMSBKYW4gMTEsMC4wCis4LFR1ZSAxIEZlYiAxMSwwLjAKKzksV2VkIDIgRmViIDExLDAuMAorMTAsVGh1IDMgRmViIDExLDAuMAorMTEsRnJpIDQgRmViIDExLDAuMAorMTIsU2F0IDUgRmViIDExLDAuMAorMTMsU3VuIDYgRmViIDExLDAuMAorMTQsTW9uIDcgRmViIDExLDAuMAorMTUsVHVlIDggRmViIDExLDAuMAorMTYsV2VkIDkgRmViIDExLDAuMAorMTcsVGh1IDEwIEZlYiAxMSwwLjAKKzE4LEZyaSAxMSBGZWIgMTEsMC4wCisxOSxTYXQgMTIgRmViIDExLDAuMAorMjAsU3VuIDEzIEZlYiAxMSwwLjAKKzIxLE1vbiAxNCBGZWIgMTEsMC4wCisyMixUdWUgMTUgRmViIDExLDAuMAorMjMsV2VkIDE2IEZlYiAxMSwwLjAKKzI0LFRodSAxNyBGZWIgMTEsMC4wCisyNSxGcmkgMTggRmViIDExLDAuMAorMjYsU2F0IDE5IEZlYiAxMSwwLjAKKzI3LFN1biAyMCBGZWIgMTEsMC4wCisyOCxNb24gMjEgRmViIDExLDAuMAorMjksVHVlIDIyIEZlYiAxMSwwLjAKKzMwLFdlZCAyMyBGZWIgMTEsMC4wCiszMSxUaHUgMjQgRmViIDExLDAuMAorMzIsRnJpIDI1IEZlYiAxMSwwLjAKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvU2luZ2xlU3F1YXJlU0VJUl9SS19SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9odW1hbi9Db3VudF8wLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvU2luZ2xlU3F1YXJlU0VJUl9SS19SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9odW1hbi9Db3VudF8wLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YTJhNzE2Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9TaW5nbGVTcXVhcmVTRUlSX1JLX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL2h1bWFuL0NvdW50XzAuY3N2CkBAIC0wLDAgKzEsMzMgQEAKK2l0ZXJhdGlvbix0aW1lLHN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL25vZGUvNTRENUVFQTNGNUNCRTMvTEFUX1NRUl8wXzAKKzEsVHVlIDI1IEphbiAxMSwxMDAwLjAKKzIsV2VkIDI2IEphbiAxMSwxMDAwLjAKKzMsVGh1IDI3IEphbiAxMSwxMDAwLjAKKzQsRnJpIDI4IEphbiAxMSwxMDAwLjAKKzUsU2F0IDI5IEphbiAxMSwxMDAwLjAKKzYsU3VuIDMwIEphbiAxMSwxMDAwLjAKKzcsTW9uIDMxIEphbiAxMSwxMDAwLjAKKzgsVHVlIDEgRmViIDExLDEwMDAuMAorOSxXZWQgMiBGZWIgMTEsMTAwMC4wCisxMCxUaHUgMyBGZWIgMTEsMTAwMC4wCisxMSxGcmkgNCBGZWIgMTEsMTAwMC4wCisxMixTYXQgNSBGZWIgMTEsMTAwMC4wCisxMyxTdW4gNiBGZWIgMTEsMTAwMC4wCisxNCxNb24gNyBGZWIgMTEsMTAwMC4wCisxNSxUdWUgOCBGZWIgMTEsMTAwMC4wCisxNixXZWQgOSBGZWIgMTEsMTAwMC4wCisxNyxUaHUgMTAgRmViIDExLDEwMDAuMAorMTgsRnJpIDExIEZlYiAxMSwxMDAwLjAKKzE5LFNhdCAxMiBGZWIgMTEsMTAwMC4wCisyMCxTdW4gMTMgRmViIDExLDEwMDAuMAorMjEsTW9uIDE0IEZlYiAxMSwxMDAwLjAKKzIyLFR1ZSAxNSBGZWIgMTEsMTAwMC4wCisyMyxXZWQgMTYgRmViIDExLDEwMDAuMAorMjQsVGh1IDE3IEZlYiAxMSwxMDAwLjAKKzI1LEZyaSAxOCBGZWIgMTEsMTAwMC4wCisyNixTYXQgMTkgRmViIDExLDEwMDAuMAorMjcsU3VuIDIwIEZlYiAxMSwxMDAwLjAKKzI4LE1vbiAyMSBGZWIgMTEsMTAwMC4wCisyOSxUdWUgMjIgRmViIDExLDEwMDAuMAorMzAsV2VkIDIzIEZlYiAxMSwxMDAwLjAKKzMxLFRodSAyNCBGZWIgMTEsMTAwMC4wCiszMixGcmkgMjUgRmViIDExLDEwMDAuMApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9TaW5nbGVTcXVhcmVTRUlSX1JLX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL2h1bWFuL0RlYXRoc18wLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvU2luZ2xlU3F1YXJlU0VJUl9SS19SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9odW1hbi9EZWF0aHNfMC5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2ZlYjE2NgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvU2luZ2xlU3F1YXJlU0VJUl9SS19SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9odW1hbi9EZWF0aHNfMC5jc3YKQEAgLTAsMCArMSwzMyBAQAoraXRlcmF0aW9uLHRpbWUsc3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vbm9kZS81NEQ1RUVBM0Y1Q0JFMy9MQVRfU1FSXzBfMAorMSxUdWUgMjUgSmFuIDExLDAuMAorMixXZWQgMjYgSmFuIDExLDAuMAorMyxUaHUgMjcgSmFuIDExLDAuMAorNCxGcmkgMjggSmFuIDExLDAuMAorNSxTYXQgMjkgSmFuIDExLDAuMAorNixTdW4gMzAgSmFuIDExLDAuMAorNyxNb24gMzEgSmFuIDExLDAuMAorOCxUdWUgMSBGZWIgMTEsMC4wCis5LFdlZCAyIEZlYiAxMSwwLjAKKzEwLFRodSAzIEZlYiAxMSwwLjAKKzExLEZyaSA0IEZlYiAxMSwwLjAKKzEyLFNhdCA1IEZlYiAxMSwwLjAKKzEzLFN1biA2IEZlYiAxMSwwLjAKKzE0LE1vbiA3IEZlYiAxMSwwLjAKKzE1LFR1ZSA4IEZlYiAxMSwwLjAKKzE2LFdlZCA5IEZlYiAxMSwwLjAKKzE3LFRodSAxMCBGZWIgMTEsMC4wCisxOCxGcmkgMTEgRmViIDExLDAuMAorMTksU2F0IDEyIEZlYiAxMSwwLjAKKzIwLFN1biAxMyBGZWIgMTEsMC4wCisyMSxNb24gMTQgRmViIDExLDAuMAorMjIsVHVlIDE1IEZlYiAxMSwwLjAKKzIzLFdlZCAxNiBGZWIgMTEsMC4wCisyNCxUaHUgMTcgRmViIDExLDAuMAorMjUsRnJpIDE4IEZlYiAxMSwwLjAKKzI2LFNhdCAxOSBGZWIgMTEsMC4wCisyNyxTdW4gMjAgRmViIDExLDAuMAorMjgsTW9uIDIxIEZlYiAxMSwwLjAKKzI5LFR1ZSAyMiBGZWIgMTEsMC4wCiszMCxXZWQgMjMgRmViIDExLDAuMAorMzEsVGh1IDI0IEZlYiAxMSwwLjAKKzMyLEZyaSAyNSBGZWIgMTEsMC4wCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1NpbmdsZVNxdWFyZVNFSVJfUktfUmVmZXJlbmNlL2F1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwvaHVtYW4vRGVuc2l0eV8wLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvU2luZ2xlU3F1YXJlU0VJUl9SS19SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9odW1hbi9EZW5zaXR5XzAuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU5NzE1MmEKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1NpbmdsZVNxdWFyZVNFSVJfUktfUmVmZXJlbmNlL2F1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwvaHVtYW4vRGVuc2l0eV8wLmNzdgpAQCAtMCwwICsxLDMzIEBACitpdGVyYXRpb24sdGltZSxzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9ub2RlLzU0RDVFRUEzRjVDQkUzL0xBVF9TUVJfMF8wCisxLFR1ZSAyNSBKYW4gMTEsMC40OTM4MjcxNjA0OTM4MjcxMworMixXZWQgMjYgSmFuIDExLDAuNDkzODI3MTYwNDkzODI3MTMKKzMsVGh1IDI3IEphbiAxMSwwLjQ5MzgyNzE2MDQ5MzgyNzEzCis0LEZyaSAyOCBKYW4gMTEsMC40OTM4MjcxNjA0OTM4MjcxMworNSxTYXQgMjkgSmFuIDExLDAuNDkzODI3MTYwNDkzODI3MTMKKzYsU3VuIDMwIEphbiAxMSwwLjQ5MzgyNzE2MDQ5MzgyNzEzCis3LE1vbiAzMSBKYW4gMTEsMC40OTM4MjcxNjA0OTM4MjcxMworOCxUdWUgMSBGZWIgMTEsMC40OTM4MjcxNjA0OTM4MjcxMworOSxXZWQgMiBGZWIgMTEsMC40OTM4MjcxNjA0OTM4MjcxMworMTAsVGh1IDMgRmViIDExLDAuNDkzODI3MTYwNDkzODI3MTMKKzExLEZyaSA0IEZlYiAxMSwwLjQ5MzgyNzE2MDQ5MzgyNzEzCisxMixTYXQgNSBGZWIgMTEsMC40OTM4MjcxNjA0OTM4MjcxMworMTMsU3VuIDYgRmViIDExLDAuNDkzODI3MTYwNDkzODI3MTMKKzE0LE1vbiA3IEZlYiAxMSwwLjQ5MzgyNzE2MDQ5MzgyNzEzCisxNSxUdWUgOCBGZWIgMTEsMC40OTM4MjcxNjA0OTM4MjcxMworMTYsV2VkIDkgRmViIDExLDAuNDkzODI3MTYwNDkzODI3MTMKKzE3LFRodSAxMCBGZWIgMTEsMC40OTM4MjcxNjA0OTM4MjcxMworMTgsRnJpIDExIEZlYiAxMSwwLjQ5MzgyNzE2MDQ5MzgyNzEzCisxOSxTYXQgMTIgRmViIDExLDAuNDkzODI3MTYwNDkzODI3MTMKKzIwLFN1biAxMyBGZWIgMTEsMC40OTM4MjcxNjA0OTM4MjcxMworMjEsTW9uIDE0IEZlYiAxMSwwLjQ5MzgyNzE2MDQ5MzgyNzEzCisyMixUdWUgMTUgRmViIDExLDAuNDkzODI3MTYwNDkzODI3MTMKKzIzLFdlZCAxNiBGZWIgMTEsMC40OTM4MjcxNjA0OTM4MjcxMworMjQsVGh1IDE3IEZlYiAxMSwwLjQ5MzgyNzE2MDQ5MzgyNzEzCisyNSxGcmkgMTggRmViIDExLDAuNDkzODI3MTYwNDkzODI3MTMKKzI2LFNhdCAxOSBGZWIgMTEsMC40OTM4MjcxNjA0OTM4MjcxMworMjcsU3VuIDIwIEZlYiAxMSwwLjQ5MzgyNzE2MDQ5MzgyNzEzCisyOCxNb24gMjEgRmViIDExLDAuNDkzODI3MTYwNDkzODI3MTMKKzI5LFR1ZSAyMiBGZWIgMTEsMC40OTM4MjcxNjA0OTM4MjcxMworMzAsV2VkIDIzIEZlYiAxMSwwLjQ5MzgyNzE2MDQ5MzgyNzEzCiszMSxUaHUgMjQgRmViIDExLDAuNDkzODI3MTYwNDkzODI3MTMKKzMyLEZyaSAyNSBGZWIgMTEsMC40OTM4MjcxNjA0OTM4MjcxMwpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9TaW5nbGVTcXVhcmVTRUlSX1JLX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL2h1bWFuL0luY2lkZW5jZV8wLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvU2luZ2xlU3F1YXJlU0VJUl9SS19SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9odW1hbi9JbmNpZGVuY2VfMC5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2ZlYjE2NgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvU2luZ2xlU3F1YXJlU0VJUl9SS19SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9odW1hbi9JbmNpZGVuY2VfMC5jc3YKQEAgLTAsMCArMSwzMyBAQAoraXRlcmF0aW9uLHRpbWUsc3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vbm9kZS81NEQ1RUVBM0Y1Q0JFMy9MQVRfU1FSXzBfMAorMSxUdWUgMjUgSmFuIDExLDAuMAorMixXZWQgMjYgSmFuIDExLDAuMAorMyxUaHUgMjcgSmFuIDExLDAuMAorNCxGcmkgMjggSmFuIDExLDAuMAorNSxTYXQgMjkgSmFuIDExLDAuMAorNixTdW4gMzAgSmFuIDExLDAuMAorNyxNb24gMzEgSmFuIDExLDAuMAorOCxUdWUgMSBGZWIgMTEsMC4wCis5LFdlZCAyIEZlYiAxMSwwLjAKKzEwLFRodSAzIEZlYiAxMSwwLjAKKzExLEZyaSA0IEZlYiAxMSwwLjAKKzEyLFNhdCA1IEZlYiAxMSwwLjAKKzEzLFN1biA2IEZlYiAxMSwwLjAKKzE0LE1vbiA3IEZlYiAxMSwwLjAKKzE1LFR1ZSA4IEZlYiAxMSwwLjAKKzE2LFdlZCA5IEZlYiAxMSwwLjAKKzE3LFRodSAxMCBGZWIgMTEsMC4wCisxOCxGcmkgMTEgRmViIDExLDAuMAorMTksU2F0IDEyIEZlYiAxMSwwLjAKKzIwLFN1biAxMyBGZWIgMTEsMC4wCisyMSxNb24gMTQgRmViIDExLDAuMAorMjIsVHVlIDE1IEZlYiAxMSwwLjAKKzIzLFdlZCAxNiBGZWIgMTEsMC4wCisyNCxUaHUgMTcgRmViIDExLDAuMAorMjUsRnJpIDE4IEZlYiAxMSwwLjAKKzI2LFNhdCAxOSBGZWIgMTEsMC4wCisyNyxTdW4gMjAgRmViIDExLDAuMAorMjgsTW9uIDIxIEZlYiAxMSwwLjAKKzI5LFR1ZSAyMiBGZWIgMTEsMC4wCiszMCxXZWQgMjMgRmViIDExLDAuMAorMzEsVGh1IDI0IEZlYiAxMSwwLjAKKzMyLEZyaSAyNSBGZWIgMTEsMC4wCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1NpbmdsZVNxdWFyZVNFSVJfUktfUmVmZXJlbmNlL2F1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwvcnVucGFyYW1ldGVycy5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1NpbmdsZVNxdWFyZVNFSVJfUktfUmVmZXJlbmNlL2F1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwvcnVucGFyYW1ldGVycy5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDY4NTViNQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvU2luZ2xlU3F1YXJlU0VJUl9SS19SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9ydW5wYXJhbWV0ZXJzLmNzdgpAQCAtMCwwICsxLDIgQEAKK3BvcHVsYXRpb25JZGVudGlmaWVyLG5hbWUsdGFyZ2V0SVNPS2V5LGJpcnRoUmF0ZSxkZWF0aFJhdGUsdGltZVBlcmlvZAoraHVtYW4sYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbCwsMC4wLDAuMCw4NjQwMDAwMApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvU2luZ2xlU3F1YXJlU0lSX0ZEX1JlZmVyZW5jZS9UZXN0U0lSL2h1bWFuL0Rpc2Vhc2UgRGVhdGhzXzAuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9TaW5nbGVTcXVhcmVTSVJfRkRfUmVmZXJlbmNlL1Rlc3RTSVIvaHVtYW4vRGlzZWFzZSBEZWF0aHNfMC5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2ZlYjE2NgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvU2luZ2xlU3F1YXJlU0lSX0ZEX1JlZmVyZW5jZS9UZXN0U0lSL2h1bWFuL0Rpc2Vhc2UgRGVhdGhzXzAuY3N2CkBAIC0wLDAgKzEsMzMgQEAKK2l0ZXJhdGlvbix0aW1lLHN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL25vZGUvNTRENUVFQTNGNUNCRTMvTEFUX1NRUl8wXzAKKzEsVHVlIDI1IEphbiAxMSwwLjAKKzIsV2VkIDI2IEphbiAxMSwwLjAKKzMsVGh1IDI3IEphbiAxMSwwLjAKKzQsRnJpIDI4IEphbiAxMSwwLjAKKzUsU2F0IDI5IEphbiAxMSwwLjAKKzYsU3VuIDMwIEphbiAxMSwwLjAKKzcsTW9uIDMxIEphbiAxMSwwLjAKKzgsVHVlIDEgRmViIDExLDAuMAorOSxXZWQgMiBGZWIgMTEsMC4wCisxMCxUaHUgMyBGZWIgMTEsMC4wCisxMSxGcmkgNCBGZWIgMTEsMC4wCisxMixTYXQgNSBGZWIgMTEsMC4wCisxMyxTdW4gNiBGZWIgMTEsMC4wCisxNCxNb24gNyBGZWIgMTEsMC4wCisxNSxUdWUgOCBGZWIgMTEsMC4wCisxNixXZWQgOSBGZWIgMTEsMC4wCisxNyxUaHUgMTAgRmViIDExLDAuMAorMTgsRnJpIDExIEZlYiAxMSwwLjAKKzE5LFNhdCAxMiBGZWIgMTEsMC4wCisyMCxTdW4gMTMgRmViIDExLDAuMAorMjEsTW9uIDE0IEZlYiAxMSwwLjAKKzIyLFR1ZSAxNSBGZWIgMTEsMC4wCisyMyxXZWQgMTYgRmViIDExLDAuMAorMjQsVGh1IDE3IEZlYiAxMSwwLjAKKzI1LEZyaSAxOCBGZWIgMTEsMC4wCisyNixTYXQgMTkgRmViIDExLDAuMAorMjcsU3VuIDIwIEZlYiAxMSwwLjAKKzI4LE1vbiAyMSBGZWIgMTEsMC4wCisyOSxUdWUgMjIgRmViIDExLDAuMAorMzAsV2VkIDIzIEZlYiAxMSwwLjAKKzMxLFRodSAyNCBGZWIgMTEsMC4wCiszMixGcmkgMjUgRmViIDExLDAuMApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9TaW5nbGVTcXVhcmVTSVJfRkRfUmVmZXJlbmNlL1Rlc3RTSVIvaHVtYW4vSV8wLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvU2luZ2xlU3F1YXJlU0lSX0ZEX1JlZmVyZW5jZS9UZXN0U0lSL2h1bWFuL0lfMC5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTQ1YzJhYQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvU2luZ2xlU3F1YXJlU0lSX0ZEX1JlZmVyZW5jZS9UZXN0U0lSL2h1bWFuL0lfMC5jc3YKQEAgLTAsMCArMSwzMyBAQAoraXRlcmF0aW9uLHRpbWUsc3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vbm9kZS81NEQ1RUVBM0Y1Q0JFMy9MQVRfU1FSXzBfMAorMSxUdWUgMjUgSmFuIDExLDEuMAorMixXZWQgMjYgSmFuIDExLDEuNDk5MgorMyxUaHUgMjcgSmFuIDExLDIuMjQ2NjQyMTExNDg4MDAwNgorNCxGcmkgMjggSmFuIDExLDMuMzY0NTc3NjkyNjk4NzA0OAorNSxTYXQgMjkgSmFuIDExLDUuMDMzOTc3OTcxNTI3NTYxCis2LFN1biAzMCBKYW4gMTEsNy41MjA4OTU1NjgwMDQ4OTQKKzcsTW9uIDMxIEphbiAxMSwxMS4yMTIzNjY0MjE1NzczNgorOCxUdWUgMSBGZWIgMTEsMTYuNjYyMzY2MjYxODY1NjcKKzksV2VkIDIgRmViIDExLDI0LjY0Mzk2NDA5NTAyMzUzNAorMTAsVGh1IDMgRmViIDExLDM2LjE5Mjk5MzY5MTQyMTQ4NQorMTEsRnJpIDQgRmViIDExLDUyLjYwNTg0NDg1Njk4MTEzCisxMixTYXQgNSBGZWIgMTEsNzUuMzEzOTM4ODgxMDM2NzMKKzEzLFN1biA2IEZlYiAxMSwxMDUuNTA1MjYxMjQzNzQ4MDgKKzE0LE1vbiA3IEZlYiAxMSwxNDMuMzQ0MTQ5OTU2ODUzNAorMTUsVHVlIDggRmViIDExLDE4Ni43ODQ5MDg5NzI3MjAwMgorMTYsV2VkIDkgRmViIDExLDIzMC40NzMzMzY5NDQxNjEzMworMTcsVGh1IDEwIEZlYiAxMSwyNjUuOTkzMzk2NTg1MzU2NjYKKzE4LEZyaSAxMSBGZWIgMTEsMjg0LjcxNjE5ODUxODUwODkKKzE5LFNhdCAxMiBGZWIgMTEsMjgyLjMxNjQ4NjI4NTA4MzEKKzIwLFN1biAxMyBGZWIgMTEsMjYxLjE4Nzc2NDExMjA5NjE1CisyMSxNb24gMTQgRmViIDExLDIyOC4zNTgxNTEzMzE0NDIKKzIyLFR1ZSAxNSBGZWIgMTEsMTkxLjMzNzg5MTExNTQ3OTQ0CisyMyxXZWQgMTYgRmViIDExLDE1NS40OTk0MTM2MTI5MDg3CisyNCxUaHUgMTcgRmViIDExLDEyMy42OTEyMzYzNjA5ODUxNgorMjUsRnJpIDE4IEZlYiAxMSw5Ni45MjA5NTQ0MDU3MzQ1MworMjYsU2F0IDE5IEZlYiAxMSw3NS4xNDMwMTQxOTgwNzkxNworMjcsU3VuIDIwIEZlYiAxMSw1Ny44MTk3OTY4Mjg3ODA4NQorMjgsTW9uIDIxIEZlYiAxMSw0NC4yNDg3NzQ2NDkwNjU2MTYKKzI5LFR1ZSAyMiBGZWIgMTEsMzMuNzI5NDExMDQwMzkyMQorMzAsV2VkIDIzIEZlYiAxMSwyNS42MzY0OTMyMTQxNjcwMjUKKzMxLFRodSAyNCBGZWIgMTEsMTkuNDQzODEyMzE0Njg5MjkKKzMyLEZyaSAyNSBGZWIgMTEsMTQuNzIzNzEyNzg4NDUyMTIyCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1NpbmdsZVNxdWFyZVNJUl9GRF9SZWZlcmVuY2UvVGVzdFNJUi9odW1hbi9JbmNpZGVuY2VfMC5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1NpbmdsZVNxdWFyZVNJUl9GRF9SZWZlcmVuY2UvVGVzdFNJUi9odW1hbi9JbmNpZGVuY2VfMC5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzNjNWNmYgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvU2luZ2xlU3F1YXJlU0lSX0ZEX1JlZmVyZW5jZS9UZXN0U0lSL2h1bWFuL0luY2lkZW5jZV8wLmNzdgpAQCAtMCwwICsxLDMzIEBACitpdGVyYXRpb24sdGltZSxzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9ub2RlLzU0RDVFRUEzRjVDQkUzL0xBVF9TUVJfMF8wCisxLFR1ZSAyNSBKYW4gMTEsMC4wCisyLFdlZCAyNiBKYW4gMTEsMC4zCiszLFRodSAyNyBKYW4gMTEsMC40NDk3NgorNCxGcmkgMjggSmFuIDExLDAuNjczOTkyNjMzNDQ2NDAwMQorNSxTYXQgMjkgSmFuIDExLDEuMDA5MzczMzA3ODA5NjExNAorNixTdW4gMzAgSmFuIDExLDEuNTEwMTkzMzkxNDU4MjY4MQorNyxNb24gMzEgSmFuIDExLDIuMjU2MjY4NjcwNDAxNDY4Cis4LFR1ZSAxIEZlYiAxMSwzLjM2MzcwOTkyNjQ3MzIwOAorOSxXZWQgMiBGZWIgMTEsNC45OTg3MDk4Nzg1NTk3MDEKKzEwLFRodSAzIEZlYiAxMSw3LjM5MzE4OTIyODUwNzA2CisxMSxGcmkgNCBGZWIgMTEsMTAuODU3ODk4MTA3NDI2NDQ1CisxMixTYXQgNSBGZWIgMTEsMTUuNzgxNzUzNDU3MDk0MzM4CisxMyxTdW4gNiBGZWIgMTEsMjIuNTk0MTgxNjY0MzExMDIKKzE0LE1vbiA3IEZlYiAxMSwzMS42NTE1NzgzNzMxMjQ0MjMKKzE1LFR1ZSA4IEZlYiAxMSw0My4wMDMyNDQ5ODcwNTYwMgorMTYsV2VkIDkgRmViIDExLDU2LjAzNTQ3MjY5MTgxNjAwNAorMTcsVGh1IDEwIEZlYiAxMSw2OS4xNDIwMDEwODMyNDg0CisxOCxGcmkgMTEgRmViIDExLDc5Ljc5ODAxODk3NTYwNworMTksU2F0IDEyIEZlYiAxMSw4NS40MTQ4NTk1NTU1NTI2NworMjAsU3VuIDEzIEZlYiAxMSw4NC42OTQ5NDU4ODU1MjQ5MworMjEsTW9uIDE0IEZlYiAxMSw3OC4zNTYzMjkyMzM2Mjg4NAorMjIsVHVlIDE1IEZlYiAxMSw2OC41MDc0NDUzOTk0MzI2CisyMyxXZWQgMTYgRmViIDExLDU3LjQwMTM2NzMzNDY0MzgzCisyNCxUaHUgMTcgRmViIDExLDQ2LjY0OTgyNDA4Mzg3MjYxCisyNSxGcmkgMTggRmViIDExLDM3LjEwNzM3MDkwODI5NTU0CisyNixTYXQgMTkgRmViIDExLDI5LjA3NjI4NjMyMTcyMDM2CisyNyxTdW4gMjAgRmViIDExLDIyLjU0MjkwNDI1OTQyMzc1CisyOCxNb24gMjEgRmViIDExLDE3LjM0NTkzOTA0ODYzNDI1NAorMjksVHVlIDIyIEZlYiAxMSwxMy4yNzQ2MzIzOTQ3MTk2ODUKKzMwLFdlZCAyMyBGZWIgMTEsMTAuMTE4ODIzMzEyMTE3NjMKKzMxLFRodSAyNCBGZWIgMTEsNy42OTA5NDc5NjQyNTAxMDcKKzMyLEZyaSAyNSBGZWIgMTEsNS44MzMxNDM2OTQ0MDY3ODcKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvU2luZ2xlU3F1YXJlU0lSX0ZEX1JlZmVyZW5jZS9UZXN0U0lSL2h1bWFuL1BvcHVsYXRpb24gQ291bnRfMC5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1NpbmdsZVNxdWFyZVNJUl9GRF9SZWZlcmVuY2UvVGVzdFNJUi9odW1hbi9Qb3B1bGF0aW9uIENvdW50XzAuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJkOTQ4NzgKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1NpbmdsZVNxdWFyZVNJUl9GRF9SZWZlcmVuY2UvVGVzdFNJUi9odW1hbi9Qb3B1bGF0aW9uIENvdW50XzAuY3N2CkBAIC0wLDAgKzEsMzMgQEAKK2l0ZXJhdGlvbix0aW1lLHN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL25vZGUvNTRENUVFQTNGNUNCRTMvTEFUX1NRUl8wXzAKKzEsVHVlIDI1IEphbiAxMSwxMDAwLjAKKzIsV2VkIDI2IEphbiAxMSw5OTkuOTk5OTk5OTk5OTk5OQorMyxUaHUgMjcgSmFuIDExLDEwMDAuMAorNCxGcmkgMjggSmFuIDExLDEwMDAuMAorNSxTYXQgMjkgSmFuIDExLDk5OS45OTk5OTk5OTk5OTk5Cis2LFN1biAzMCBKYW4gMTEsMTAwMC4wCis3LE1vbiAzMSBKYW4gMTEsMTAwMC4wCis4LFR1ZSAxIEZlYiAxMSwxMDAwLjAwMDAwMDAwMDAwMDEKKzksV2VkIDIgRmViIDExLDEwMDAuMAorMTAsVGh1IDMgRmViIDExLDEwMDAuMAorMTEsRnJpIDQgRmViIDExLDk5OS45OTk5OTk5OTk5OTk5CisxMixTYXQgNSBGZWIgMTEsMTAwMC4wCisxMyxTdW4gNiBGZWIgMTEsMTAwMC4wCisxNCxNb24gNyBGZWIgMTEsMTAwMC4wCisxNSxUdWUgOCBGZWIgMTEsMTAwMC4wCisxNixXZWQgOSBGZWIgMTEsMTAwMC4wMDAwMDAwMDAwMDAxCisxNyxUaHUgMTAgRmViIDExLDEwMDAuMDAwMDAwMDAwMDAwMQorMTgsRnJpIDExIEZlYiAxMSwxMDAwLjAwMDAwMDAwMDAwMDEKKzE5LFNhdCAxMiBGZWIgMTEsMTAwMC4wMDAwMDAwMDAwMDAxCisyMCxTdW4gMTMgRmViIDExLDEwMDAuMDAwMDAwMDAwMDAwMQorMjEsTW9uIDE0IEZlYiAxMSwxMDAwLjAKKzIyLFR1ZSAxNSBGZWIgMTEsMTAwMC4wMDAwMDAwMDAwMDAxCisyMyxXZWQgMTYgRmViIDExLDEwMDAuMDAwMDAwMDAwMDAwMQorMjQsVGh1IDE3IEZlYiAxMSwxMDAwLjAwMDAwMDAwMDAwMDIKKzI1LEZyaSAxOCBGZWIgMTEsMTAwMC4wMDAwMDAwMDAwMDAyCisyNixTYXQgMTkgRmViIDExLDEwMDAuMDAwMDAwMDAwMDAwMgorMjcsU3VuIDIwIEZlYiAxMSwxMDAwLjAwMDAwMDAwMDAwMDIKKzI4LE1vbiAyMSBGZWIgMTEsMTAwMC4wMDAwMDAwMDAwMDAyCisyOSxUdWUgMjIgRmViIDExLDEwMDAuMDAwMDAwMDAwMDAwMQorMzAsV2VkIDIzIEZlYiAxMSwxMDAwLjAwMDAwMDAwMDAwMDIKKzMxLFRodSAyNCBGZWIgMTEsMTAwMC4wMDAwMDAwMDAwMDAyCiszMixGcmkgMjUgRmViIDExLDEwMDAuMDAwMDAwMDAwMDAwMQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9TaW5nbGVTcXVhcmVTSVJfRkRfUmVmZXJlbmNlL1Rlc3RTSVIvaHVtYW4vUl8wLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvU2luZ2xlU3F1YXJlU0lSX0ZEX1JlZmVyZW5jZS9UZXN0U0lSL2h1bWFuL1JfMC5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTZlNGMxNgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvU2luZ2xlU3F1YXJlU0lSX0ZEX1JlZmVyZW5jZS9UZXN0U0lSL2h1bWFuL1JfMC5jc3YKQEAgLTAsMCArMSwzMyBAQAoraXRlcmF0aW9uLHRpbWUsc3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vbm9kZS81NEQ1RUVBM0Y1Q0JFMy9MQVRfU1FSXzBfMAorMSxUdWUgMjUgSmFuIDExLDAuMAorMixXZWQgMjYgSmFuIDExLDAuMworMyxUaHUgMjcgSmFuIDExLDAuNzQ5NzYKKzQsRnJpIDI4IEphbiAxMSwxLjQyMzc1MjYzMzQ0NjQwMDEKKzUsU2F0IDI5IEphbiAxMSwyLjQzMzEyNTk0MTI1NjAxMTMKKzYsU3VuIDMwIEphbiAxMSwzLjk0MzMxOTMzMjcxNDI3OTUKKzcsTW9uIDMxIEphbiAxMSw2LjE5OTU4ODAwMzExNTc0OAorOCxUdWUgMSBGZWIgMTEsOS41NjMyOTc5Mjk1ODg5NTYKKzksV2VkIDIgRmViIDExLDE0LjU2MjAwNzgwODE0ODY1NworMTAsVGh1IDMgRmViIDExLDIxLjk1NTE5NzAzNjY1NTcyCisxMSxGcmkgNCBGZWIgMTEsMzIuODEzMDk1MTQ0MDgyMTYKKzEyLFNhdCA1IEZlYiAxMSw0OC41OTQ4NDg2MDExNzY1CisxMyxTdW4gNiBGZWIgMTEsNzEuMTg5MDMwMjY1NDg3NTIKKzE0LE1vbiA3IEZlYiAxMSwxMDIuODQwNjA4NjM4NjExOTQKKzE1LFR1ZSA4IEZlYiAxMSwxNDUuODQzODUzNjI1NjY3OTgKKzE2LFdlZCA5IEZlYiAxMSwyMDEuODc5MzI2MzE3NDg0CisxNyxUaHUgMTAgRmViIDExLDI3MS4wMjEzMjc0MDA3MzI0CisxOCxGcmkgMTEgRmViIDExLDM1MC44MTkzNDYzNzYzMzkzNQorMTksU2F0IDEyIEZlYiAxMSw0MzYuMjM0MjA1OTMxODkyCisyMCxTdW4gMTMgRmViIDExLDUyMC45MjkxNTE4MTc0MTY5CisyMSxNb24gMTQgRmViIDExLDU5OS4yODU0ODEwNTEwNDU3CisyMixUdWUgMTUgRmViIDExLDY2Ny43OTI5MjY0NTA0Nzg0CisyMyxXZWQgMTYgRmViIDExLDcyNS4xOTQyOTM3ODUxMjIyCisyNCxUaHUgMTcgRmViIDExLDc3MS44NDQxMTc4Njg5OTQ5CisyNSxGcmkgMTggRmViIDExLDgwOC45NTE0ODg3NzcyOTA1CisyNixTYXQgMTkgRmViIDExLDgzOC4wMjc3NzUwOTkwMTA4CisyNyxTdW4gMjAgRmViIDExLDg2MC41NzA2NzkzNTg0MzQ1CisyOCxNb24gMjEgRmViIDExLDg3Ny45MTY2MTg0MDcwNjg4CisyOSxUdWUgMjIgRmViIDExLDg5MS4xOTEyNTA4MDE3ODg0CiszMCxXZWQgMjMgRmViIDExLDkwMS4zMTAwNzQxMTM5MDYxCiszMSxUaHUgMjQgRmViIDExLDkwOS4wMDEwMjIwNzgxNTYyCiszMixGcmkgMjUgRmViIDExLDkxNC44MzQxNjU3NzI1NjMKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvU2luZ2xlU3F1YXJlU0lSX0ZEX1JlZmVyZW5jZS9UZXN0U0lSL2h1bWFuL1NfMC5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1NpbmdsZVNxdWFyZVNJUl9GRF9SZWZlcmVuY2UvVGVzdFNJUi9odW1hbi9TXzAuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZiNzFiYjMKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1NpbmdsZVNxdWFyZVNJUl9GRF9SZWZlcmVuY2UvVGVzdFNJUi9odW1hbi9TXzAuY3N2CkBAIC0wLDAgKzEsMzMgQEAKK2l0ZXJhdGlvbix0aW1lLHN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL25vZGUvNTRENUVFQTNGNUNCRTMvTEFUX1NRUl8wXzAKKzEsVHVlIDI1IEphbiAxMSw5OTkuMAorMixXZWQgMjYgSmFuIDExLDk5OC4yMDA4CiszLFRodSAyNyBKYW4gMTEsOTk3LjAwMzU5Nzg4ODUxMgorNCxGcmkgMjggSmFuIDExLDk5NS4yMTE2Njk2NzM4NTQ5Cis1LFNhdCAyOSBKYW4gMTEsOTkyLjUzMjg5NjA4NzIxNjQKKzYsU3VuIDMwIEphbiAxMSw5ODguNTM1Nzg1MDk5MjgwOAorNyxNb24gMzEgSmFuIDExLDk4Mi41ODgwNDU1NzUzMDY5Cis4LFR1ZSAxIEZlYiAxMSw5NzMuNzc0MzM1ODA4NTQ1NAorOSxXZWQgMiBGZWIgMTEsOTYwLjc5NDAyODA5NjgyNzgKKzEwLFRodSAzIEZlYiAxMSw5NDEuODUxODA5MjcxOTIyOAorMTEsRnJpIDQgRmViIDExLDkxNC41ODEwNTk5OTg5MzY3CisxMixTYXQgNSBGZWIgMTEsODc2LjA5MTIxMjUxNzc4NjcKKzEzLFN1biA2IEZlYiAxMSw4MjMuMzA1NzA4NDkwNzY0MworMTQsTW9uIDcgRmViIDExLDc1My44MTUyNDE0MDQ1MzQ2CisxNSxUdWUgOCBGZWIgMTEsNjY3LjM3MTIzNzQwMTYxMgorMTYsV2VkIDkgRmViIDExLDU2Ny42NDczMzY3MzgzNTQ3CisxNyxUaHUgMTAgRmViIDExLDQ2Mi45ODUyNzYwMTM5MTEwNgorMTgsRnJpIDExIEZlYiAxMSwzNjQuNDY0NDU1MTA1MTUxODQKKzE5LFNhdCAxMiBGZWIgMTEsMjgxLjQ0OTMwNzc4MzAyNQorMjAsU3VuIDEzIEZlYiAxMSwyMTcuODgzMDg0MDcwNDg3CisyMSxNb24gMTQgRmViIDExLDE3Mi4zNTYzNjc2MTc1MTIzMgorMjIsVHVlIDE1IEZlYiAxMSwxNDAuODY5MTgyNDM0MDQyMworMjMsV2VkIDE2IEZlYiAxMSwxMTkuMzA2MjkyNjAxOTY5MTkKKzI0LFRodSAxNyBGZWIgMTEsMTA0LjQ2NDY0NTc3MDAyMDE0CisyNSxGcmkgMTggRmViIDExLDk0LjEyNzU1NjgxNjk3NTIzCisyNixTYXQgMTkgRmViIDExLDg2LjgyOTIxMDcwMjkxMDIzCisyNyxTdW4gMjAgRmViIDExLDgxLjYwOTUyMzgxMjc4NDgKKzI4LE1vbiAyMSBGZWIgMTEsNzcuODM0NjA2OTQzODY1NzgKKzI5LFR1ZSAyMiBGZWIgMTEsNzUuMDc5MzM4MTU3ODE5NgorMzAsV2VkIDIzIEZlYiAxMSw3My4wNTM0MzI2NzE5MjcwNgorMzEsVGh1IDI0IEZlYiAxMSw3MS41NTUxNjU2MDcxNTQ2OAorMzIsRnJpIDI1IEZlYiAxMSw3MC40NDIxMjE0Mzg5ODUwNQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9TaW5nbGVTcXVhcmVTSVJfRkRfUmVmZXJlbmNlL1Rlc3RTSVIvcnVucGFyYW1ldGVycy5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1NpbmdsZVNxdWFyZVNJUl9GRF9SZWZlcmVuY2UvVGVzdFNJUi9ydW5wYXJhbWV0ZXJzLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYTEzNmNjCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9TaW5nbGVTcXVhcmVTSVJfRkRfUmVmZXJlbmNlL1Rlc3RTSVIvcnVucGFyYW1ldGVycy5jc3YKQEAgLTAsMCArMSwyIEBACitkaXNlYXNlTmFtZSxwb3B1bGF0aW9uSWRlbnRpZmllcix0aW1lUGVyaW9kLGZyZXF1ZW5jeURlcGVuZGVudCxyZWZlcmVuY2VQb3B1bGF0aW9uRGVuc2l0eSxyb2FkTmV0d29ya0luZmVjdGlvdXNQcm9wb3J0aW9uLGNoYXJhY3RlcmlzdGljTWl4aW5nRGlzdGFuY2UsdHJhbnNtaXNzaW9uUmF0ZSxub25MaW5lYXJpdHlDb2VmZmljaWVudCxyZWNvdmVyeVJhdGUsaW5mZWN0aW91c01vcnRhbGl0eVJhdGUsaW1tdW5pdHlMb3NzUmF0ZQorVGVzdFNJUixodW1hbiw4NjQwMDAwMCx0cnVlLDEwMC4wLDAuMDEsMi4yNSwwLjgsMS4wLDAuMywwLjAsMC4wClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9TaW5nbGVTcXVhcmVTSVJfRkRfUmVmZXJlbmNlL2F1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwvaHVtYW4vQmlydGhzXzAuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9TaW5nbGVTcXVhcmVTSVJfRkRfUmVmZXJlbmNlL2F1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwvaHVtYW4vQmlydGhzXzAuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNmZWIxNjYKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1NpbmdsZVNxdWFyZVNJUl9GRF9SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9odW1hbi9CaXJ0aHNfMC5jc3YKQEAgLTAsMCArMSwzMyBAQAoraXRlcmF0aW9uLHRpbWUsc3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vbm9kZS81NEQ1RUVBM0Y1Q0JFMy9MQVRfU1FSXzBfMAorMSxUdWUgMjUgSmFuIDExLDAuMAorMixXZWQgMjYgSmFuIDExLDAuMAorMyxUaHUgMjcgSmFuIDExLDAuMAorNCxGcmkgMjggSmFuIDExLDAuMAorNSxTYXQgMjkgSmFuIDExLDAuMAorNixTdW4gMzAgSmFuIDExLDAuMAorNyxNb24gMzEgSmFuIDExLDAuMAorOCxUdWUgMSBGZWIgMTEsMC4wCis5LFdlZCAyIEZlYiAxMSwwLjAKKzEwLFRodSAzIEZlYiAxMSwwLjAKKzExLEZyaSA0IEZlYiAxMSwwLjAKKzEyLFNhdCA1IEZlYiAxMSwwLjAKKzEzLFN1biA2IEZlYiAxMSwwLjAKKzE0LE1vbiA3IEZlYiAxMSwwLjAKKzE1LFR1ZSA4IEZlYiAxMSwwLjAKKzE2LFdlZCA5IEZlYiAxMSwwLjAKKzE3LFRodSAxMCBGZWIgMTEsMC4wCisxOCxGcmkgMTEgRmViIDExLDAuMAorMTksU2F0IDEyIEZlYiAxMSwwLjAKKzIwLFN1biAxMyBGZWIgMTEsMC4wCisyMSxNb24gMTQgRmViIDExLDAuMAorMjIsVHVlIDE1IEZlYiAxMSwwLjAKKzIzLFdlZCAxNiBGZWIgMTEsMC4wCisyNCxUaHUgMTcgRmViIDExLDAuMAorMjUsRnJpIDE4IEZlYiAxMSwwLjAKKzI2LFNhdCAxOSBGZWIgMTEsMC4wCisyNyxTdW4gMjAgRmViIDExLDAuMAorMjgsTW9uIDIxIEZlYiAxMSwwLjAKKzI5LFR1ZSAyMiBGZWIgMTEsMC4wCiszMCxXZWQgMjMgRmViIDExLDAuMAorMzEsVGh1IDI0IEZlYiAxMSwwLjAKKzMyLEZyaSAyNSBGZWIgMTEsMC4wCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1NpbmdsZVNxdWFyZVNJUl9GRF9SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9odW1hbi9Db3VudF8wLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvU2luZ2xlU3F1YXJlU0lSX0ZEX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL2h1bWFuL0NvdW50XzAuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhhMmE3MTYKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1NpbmdsZVNxdWFyZVNJUl9GRF9SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9odW1hbi9Db3VudF8wLmNzdgpAQCAtMCwwICsxLDMzIEBACitpdGVyYXRpb24sdGltZSxzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9ub2RlLzU0RDVFRUEzRjVDQkUzL0xBVF9TUVJfMF8wCisxLFR1ZSAyNSBKYW4gMTEsMTAwMC4wCisyLFdlZCAyNiBKYW4gMTEsMTAwMC4wCiszLFRodSAyNyBKYW4gMTEsMTAwMC4wCis0LEZyaSAyOCBKYW4gMTEsMTAwMC4wCis1LFNhdCAyOSBKYW4gMTEsMTAwMC4wCis2LFN1biAzMCBKYW4gMTEsMTAwMC4wCis3LE1vbiAzMSBKYW4gMTEsMTAwMC4wCis4LFR1ZSAxIEZlYiAxMSwxMDAwLjAKKzksV2VkIDIgRmViIDExLDEwMDAuMAorMTAsVGh1IDMgRmViIDExLDEwMDAuMAorMTEsRnJpIDQgRmViIDExLDEwMDAuMAorMTIsU2F0IDUgRmViIDExLDEwMDAuMAorMTMsU3VuIDYgRmViIDExLDEwMDAuMAorMTQsTW9uIDcgRmViIDExLDEwMDAuMAorMTUsVHVlIDggRmViIDExLDEwMDAuMAorMTYsV2VkIDkgRmViIDExLDEwMDAuMAorMTcsVGh1IDEwIEZlYiAxMSwxMDAwLjAKKzE4LEZyaSAxMSBGZWIgMTEsMTAwMC4wCisxOSxTYXQgMTIgRmViIDExLDEwMDAuMAorMjAsU3VuIDEzIEZlYiAxMSwxMDAwLjAKKzIxLE1vbiAxNCBGZWIgMTEsMTAwMC4wCisyMixUdWUgMTUgRmViIDExLDEwMDAuMAorMjMsV2VkIDE2IEZlYiAxMSwxMDAwLjAKKzI0LFRodSAxNyBGZWIgMTEsMTAwMC4wCisyNSxGcmkgMTggRmViIDExLDEwMDAuMAorMjYsU2F0IDE5IEZlYiAxMSwxMDAwLjAKKzI3LFN1biAyMCBGZWIgMTEsMTAwMC4wCisyOCxNb24gMjEgRmViIDExLDEwMDAuMAorMjksVHVlIDIyIEZlYiAxMSwxMDAwLjAKKzMwLFdlZCAyMyBGZWIgMTEsMTAwMC4wCiszMSxUaHUgMjQgRmViIDExLDEwMDAuMAorMzIsRnJpIDI1IEZlYiAxMSwxMDAwLjAKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvU2luZ2xlU3F1YXJlU0lSX0ZEX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL2h1bWFuL0RlYXRoc18wLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvU2luZ2xlU3F1YXJlU0lSX0ZEX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL2h1bWFuL0RlYXRoc18wLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZmViMTY2Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9TaW5nbGVTcXVhcmVTSVJfRkRfUmVmZXJlbmNlL2F1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwvaHVtYW4vRGVhdGhzXzAuY3N2CkBAIC0wLDAgKzEsMzMgQEAKK2l0ZXJhdGlvbix0aW1lLHN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL25vZGUvNTRENUVFQTNGNUNCRTMvTEFUX1NRUl8wXzAKKzEsVHVlIDI1IEphbiAxMSwwLjAKKzIsV2VkIDI2IEphbiAxMSwwLjAKKzMsVGh1IDI3IEphbiAxMSwwLjAKKzQsRnJpIDI4IEphbiAxMSwwLjAKKzUsU2F0IDI5IEphbiAxMSwwLjAKKzYsU3VuIDMwIEphbiAxMSwwLjAKKzcsTW9uIDMxIEphbiAxMSwwLjAKKzgsVHVlIDEgRmViIDExLDAuMAorOSxXZWQgMiBGZWIgMTEsMC4wCisxMCxUaHUgMyBGZWIgMTEsMC4wCisxMSxGcmkgNCBGZWIgMTEsMC4wCisxMixTYXQgNSBGZWIgMTEsMC4wCisxMyxTdW4gNiBGZWIgMTEsMC4wCisxNCxNb24gNyBGZWIgMTEsMC4wCisxNSxUdWUgOCBGZWIgMTEsMC4wCisxNixXZWQgOSBGZWIgMTEsMC4wCisxNyxUaHUgMTAgRmViIDExLDAuMAorMTgsRnJpIDExIEZlYiAxMSwwLjAKKzE5LFNhdCAxMiBGZWIgMTEsMC4wCisyMCxTdW4gMTMgRmViIDExLDAuMAorMjEsTW9uIDE0IEZlYiAxMSwwLjAKKzIyLFR1ZSAxNSBGZWIgMTEsMC4wCisyMyxXZWQgMTYgRmViIDExLDAuMAorMjQsVGh1IDE3IEZlYiAxMSwwLjAKKzI1LEZyaSAxOCBGZWIgMTEsMC4wCisyNixTYXQgMTkgRmViIDExLDAuMAorMjcsU3VuIDIwIEZlYiAxMSwwLjAKKzI4LE1vbiAyMSBGZWIgMTEsMC4wCisyOSxUdWUgMjIgRmViIDExLDAuMAorMzAsV2VkIDIzIEZlYiAxMSwwLjAKKzMxLFRodSAyNCBGZWIgMTEsMC4wCiszMixGcmkgMjUgRmViIDExLDAuMApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9TaW5nbGVTcXVhcmVTSVJfRkRfUmVmZXJlbmNlL2F1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwvaHVtYW4vRGVuc2l0eV8wLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvU2luZ2xlU3F1YXJlU0lSX0ZEX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL2h1bWFuL0RlbnNpdHlfMC5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTk3MTUyYQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvU2luZ2xlU3F1YXJlU0lSX0ZEX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL2h1bWFuL0RlbnNpdHlfMC5jc3YKQEAgLTAsMCArMSwzMyBAQAoraXRlcmF0aW9uLHRpbWUsc3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vbm9kZS81NEQ1RUVBM0Y1Q0JFMy9MQVRfU1FSXzBfMAorMSxUdWUgMjUgSmFuIDExLDAuNDkzODI3MTYwNDkzODI3MTMKKzIsV2VkIDI2IEphbiAxMSwwLjQ5MzgyNzE2MDQ5MzgyNzEzCiszLFRodSAyNyBKYW4gMTEsMC40OTM4MjcxNjA0OTM4MjcxMworNCxGcmkgMjggSmFuIDExLDAuNDkzODI3MTYwNDkzODI3MTMKKzUsU2F0IDI5IEphbiAxMSwwLjQ5MzgyNzE2MDQ5MzgyNzEzCis2LFN1biAzMCBKYW4gMTEsMC40OTM4MjcxNjA0OTM4MjcxMworNyxNb24gMzEgSmFuIDExLDAuNDkzODI3MTYwNDkzODI3MTMKKzgsVHVlIDEgRmViIDExLDAuNDkzODI3MTYwNDkzODI3MTMKKzksV2VkIDIgRmViIDExLDAuNDkzODI3MTYwNDkzODI3MTMKKzEwLFRodSAzIEZlYiAxMSwwLjQ5MzgyNzE2MDQ5MzgyNzEzCisxMSxGcmkgNCBGZWIgMTEsMC40OTM4MjcxNjA0OTM4MjcxMworMTIsU2F0IDUgRmViIDExLDAuNDkzODI3MTYwNDkzODI3MTMKKzEzLFN1biA2IEZlYiAxMSwwLjQ5MzgyNzE2MDQ5MzgyNzEzCisxNCxNb24gNyBGZWIgMTEsMC40OTM4MjcxNjA0OTM4MjcxMworMTUsVHVlIDggRmViIDExLDAuNDkzODI3MTYwNDkzODI3MTMKKzE2LFdlZCA5IEZlYiAxMSwwLjQ5MzgyNzE2MDQ5MzgyNzEzCisxNyxUaHUgMTAgRmViIDExLDAuNDkzODI3MTYwNDkzODI3MTMKKzE4LEZyaSAxMSBGZWIgMTEsMC40OTM4MjcxNjA0OTM4MjcxMworMTksU2F0IDEyIEZlYiAxMSwwLjQ5MzgyNzE2MDQ5MzgyNzEzCisyMCxTdW4gMTMgRmViIDExLDAuNDkzODI3MTYwNDkzODI3MTMKKzIxLE1vbiAxNCBGZWIgMTEsMC40OTM4MjcxNjA0OTM4MjcxMworMjIsVHVlIDE1IEZlYiAxMSwwLjQ5MzgyNzE2MDQ5MzgyNzEzCisyMyxXZWQgMTYgRmViIDExLDAuNDkzODI3MTYwNDkzODI3MTMKKzI0LFRodSAxNyBGZWIgMTEsMC40OTM4MjcxNjA0OTM4MjcxMworMjUsRnJpIDE4IEZlYiAxMSwwLjQ5MzgyNzE2MDQ5MzgyNzEzCisyNixTYXQgMTkgRmViIDExLDAuNDkzODI3MTYwNDkzODI3MTMKKzI3LFN1biAyMCBGZWIgMTEsMC40OTM4MjcxNjA0OTM4MjcxMworMjgsTW9uIDIxIEZlYiAxMSwwLjQ5MzgyNzE2MDQ5MzgyNzEzCisyOSxUdWUgMjIgRmViIDExLDAuNDkzODI3MTYwNDkzODI3MTMKKzMwLFdlZCAyMyBGZWIgMTEsMC40OTM4MjcxNjA0OTM4MjcxMworMzEsVGh1IDI0IEZlYiAxMSwwLjQ5MzgyNzE2MDQ5MzgyNzEzCiszMixGcmkgMjUgRmViIDExLDAuNDkzODI3MTYwNDkzODI3MTMKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvU2luZ2xlU3F1YXJlU0lSX0ZEX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL2h1bWFuL0luY2lkZW5jZV8wLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvU2luZ2xlU3F1YXJlU0lSX0ZEX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL2h1bWFuL0luY2lkZW5jZV8wLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZmViMTY2Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9TaW5nbGVTcXVhcmVTSVJfRkRfUmVmZXJlbmNlL2F1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwvaHVtYW4vSW5jaWRlbmNlXzAuY3N2CkBAIC0wLDAgKzEsMzMgQEAKK2l0ZXJhdGlvbix0aW1lLHN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL25vZGUvNTRENUVFQTNGNUNCRTMvTEFUX1NRUl8wXzAKKzEsVHVlIDI1IEphbiAxMSwwLjAKKzIsV2VkIDI2IEphbiAxMSwwLjAKKzMsVGh1IDI3IEphbiAxMSwwLjAKKzQsRnJpIDI4IEphbiAxMSwwLjAKKzUsU2F0IDI5IEphbiAxMSwwLjAKKzYsU3VuIDMwIEphbiAxMSwwLjAKKzcsTW9uIDMxIEphbiAxMSwwLjAKKzgsVHVlIDEgRmViIDExLDAuMAorOSxXZWQgMiBGZWIgMTEsMC4wCisxMCxUaHUgMyBGZWIgMTEsMC4wCisxMSxGcmkgNCBGZWIgMTEsMC4wCisxMixTYXQgNSBGZWIgMTEsMC4wCisxMyxTdW4gNiBGZWIgMTEsMC4wCisxNCxNb24gNyBGZWIgMTEsMC4wCisxNSxUdWUgOCBGZWIgMTEsMC4wCisxNixXZWQgOSBGZWIgMTEsMC4wCisxNyxUaHUgMTAgRmViIDExLDAuMAorMTgsRnJpIDExIEZlYiAxMSwwLjAKKzE5LFNhdCAxMiBGZWIgMTEsMC4wCisyMCxTdW4gMTMgRmViIDExLDAuMAorMjEsTW9uIDE0IEZlYiAxMSwwLjAKKzIyLFR1ZSAxNSBGZWIgMTEsMC4wCisyMyxXZWQgMTYgRmViIDExLDAuMAorMjQsVGh1IDE3IEZlYiAxMSwwLjAKKzI1LEZyaSAxOCBGZWIgMTEsMC4wCisyNixTYXQgMTkgRmViIDExLDAuMAorMjcsU3VuIDIwIEZlYiAxMSwwLjAKKzI4LE1vbiAyMSBGZWIgMTEsMC4wCisyOSxUdWUgMjIgRmViIDExLDAuMAorMzAsV2VkIDIzIEZlYiAxMSwwLjAKKzMxLFRodSAyNCBGZWIgMTEsMC4wCiszMixGcmkgMjUgRmViIDExLDAuMApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9TaW5nbGVTcXVhcmVTSVJfRkRfUmVmZXJlbmNlL2F1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwvcnVucGFyYW1ldGVycy5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1NpbmdsZVNxdWFyZVNJUl9GRF9SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9ydW5wYXJhbWV0ZXJzLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNjg1NWI1Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9TaW5nbGVTcXVhcmVTSVJfRkRfUmVmZXJlbmNlL2F1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwvcnVucGFyYW1ldGVycy5jc3YKQEAgLTAsMCArMSwyIEBACitwb3B1bGF0aW9uSWRlbnRpZmllcixuYW1lLHRhcmdldElTT0tleSxiaXJ0aFJhdGUsZGVhdGhSYXRlLHRpbWVQZXJpb2QKK2h1bWFuLGF1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwsLDAuMCwwLjAsODY0MDAwMDAKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1NpbmdsZVNxdWFyZVNJUl9SS19SZWZlcmVuY2UvVGVzdFNJUi9odW1hbi9EaXNlYXNlIERlYXRoc18wLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvU2luZ2xlU3F1YXJlU0lSX1JLX1JlZmVyZW5jZS9UZXN0U0lSL2h1bWFuL0Rpc2Vhc2UgRGVhdGhzXzAuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNmZWIxNjYKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1NpbmdsZVNxdWFyZVNJUl9SS19SZWZlcmVuY2UvVGVzdFNJUi9odW1hbi9EaXNlYXNlIERlYXRoc18wLmNzdgpAQCAtMCwwICsxLDMzIEBACitpdGVyYXRpb24sdGltZSxzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9ub2RlLzU0RDVFRUEzRjVDQkUzL0xBVF9TUVJfMF8wCisxLFR1ZSAyNSBKYW4gMTEsMC4wCisyLFdlZCAyNiBKYW4gMTEsMC4wCiszLFRodSAyNyBKYW4gMTEsMC4wCis0LEZyaSAyOCBKYW4gMTEsMC4wCis1LFNhdCAyOSBKYW4gMTEsMC4wCis2LFN1biAzMCBKYW4gMTEsMC4wCis3LE1vbiAzMSBKYW4gMTEsMC4wCis4LFR1ZSAxIEZlYiAxMSwwLjAKKzksV2VkIDIgRmViIDExLDAuMAorMTAsVGh1IDMgRmViIDExLDAuMAorMTEsRnJpIDQgRmViIDExLDAuMAorMTIsU2F0IDUgRmViIDExLDAuMAorMTMsU3VuIDYgRmViIDExLDAuMAorMTQsTW9uIDcgRmViIDExLDAuMAorMTUsVHVlIDggRmViIDExLDAuMAorMTYsV2VkIDkgRmViIDExLDAuMAorMTcsVGh1IDEwIEZlYiAxMSwwLjAKKzE4LEZyaSAxMSBGZWIgMTEsMC4wCisxOSxTYXQgMTIgRmViIDExLDAuMAorMjAsU3VuIDEzIEZlYiAxMSwwLjAKKzIxLE1vbiAxNCBGZWIgMTEsMC4wCisyMixUdWUgMTUgRmViIDExLDAuMAorMjMsV2VkIDE2IEZlYiAxMSwwLjAKKzI0LFRodSAxNyBGZWIgMTEsMC4wCisyNSxGcmkgMTggRmViIDExLDAuMAorMjYsU2F0IDE5IEZlYiAxMSwwLjAKKzI3LFN1biAyMCBGZWIgMTEsMC4wCisyOCxNb24gMjEgRmViIDExLDAuMAorMjksVHVlIDIyIEZlYiAxMSwwLjAKKzMwLFdlZCAyMyBGZWIgMTEsMC4wCiszMSxUaHUgMjQgRmViIDExLDAuMAorMzIsRnJpIDI1IEZlYiAxMSwwLjAKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvU2luZ2xlU3F1YXJlU0lSX1JLX1JlZmVyZW5jZS9UZXN0U0lSL2h1bWFuL0lfMC5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1NpbmdsZVNxdWFyZVNJUl9SS19SZWZlcmVuY2UvVGVzdFNJUi9odW1hbi9JXzAuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBmNjI5NWEKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1NpbmdsZVNxdWFyZVNJUl9SS19SZWZlcmVuY2UvVGVzdFNJUi9odW1hbi9JXzAuY3N2CkBAIC0wLDAgKzEsMzMgQEAKK2l0ZXJhdGlvbix0aW1lLHN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL25vZGUvNTRENUVFQTNGNUNCRTMvTEFUX1NRUl8wXzAKKzEsVHVlIDI1IEphbiAxMSwxLjAKKzIsV2VkIDI2IEphbiAxMSwxLjY0Njc3Njc4ODg5Njg0NDUKKzMsVGh1IDI3IEphbiAxMSwyLjcwODk2NDI2MDgwMjIxNjYKKzQsRnJpIDI4IEphbiAxMSw0LjQ0ODQyNjY1OTQxMDk4NgorNSxTYXQgMjkgSmFuIDExLDcuMjgzNzgwNDYyMTAzNjE1Cis2LFN1biAzMCBKYW4gMTEsMTEuODcwNDQzNjMxNzg2OTA5Cis3LE1vbiAzMSBKYW4gMTEsMTkuMTk5MDkyNDcxMTQyMDQKKzgsVHVlIDEgRmViIDExLDMwLjY3ODcxOTQ2MjE3MDYyCis5LFdlZCAyIEZlYiAxMSw0OC4xMDM3MzUzOTk2Njg0NgorMTAsVGh1IDMgRmViIDExLDczLjI5NjIxOTEyOTgxNzgKKzExLEZyaSA0IEZlYiAxMSwxMDcuMTU0Mjc4MDk2OTMwMTQKKzEyLFNhdCA1IEZlYiAxMSwxNDguMTE5NDA2Mzc3NzkzNTUKKzEzLFN1biA2IEZlYiAxMSwxOTAuOTgxODIwMjY4MzcxNDIKKzE0LE1vbiA3IEZlYiAxMSwyMjcuNzQxNTI0MjU4MzIxNDgKKzE1LFR1ZSA4IEZlYiAxMSwyNTEuMDAzMjA5MDI2MTk3NjUKKzE2LFdlZCA5IEZlYiAxMSwyNTcuNDY0OTIxNzAwMjIyMjUKKzE3LFRodSAxMCBGZWIgMTEsMjQ4LjYzNzAwNTI5NDU2Njk2CisxOCxGcmkgMTEgRmViIDExLDIyOC45MjY0NTA0MzgxMTkzCisxOSxTYXQgMTIgRmViIDExLDIwMy4yNTE2OTA3ODI3NjkxMgorMjAsU3VuIDEzIEZlYiAxMSwxNzUuNjE1MDY5ODM1MTgxNTcKKzIxLE1vbiAxNCBGZWIgMTEsMTQ4LjcwMDk5NzUzMTU1NDQ0CisyMixUdWUgMTUgRmViIDExLDEyNC4wMzMxNzA2MDcyNjY1MworMjMsV2VkIDE2IEZlYiAxMSwxMDIuMzAwODkxODczOTIzNgorMjQsVGh1IDE3IEZlYiAxMSw4My42NjQ4NjAwOTcyODY2NgorMjUsRnJpIDE4IEZlYiAxMSw2Ny45ODUyOTI2Njc2MjE3MgorMjYsU2F0IDE5IEZlYiAxMSw1NC45NzMzNDgxOTA0NTIwNworMjcsU3VuIDIwIEZlYiAxMSw0NC4yODM5NTc3OTQ1NTE2NworMjgsTW9uIDIxIEZlYiAxMSwzNS41Njg3NzIxNzE5NzY2OAorMjksVHVlIDIyIEZlYiAxMSwyOC41MDM3NTM4NTM3OTQxMjcKKzMwLFdlZCAyMyBGZWIgMTEsMjIuODAxNDU4MzUzMDU3NDQKKzMxLFRodSAyNCBGZWIgMTEsMTguMjE0NTIwNjM2NjEwMzUKKzMyLEZyaSAyNSBGZWIgMTEsMTQuNTM0NDAwNTQ2ODAzMDEzCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1NpbmdsZVNxdWFyZVNJUl9SS19SZWZlcmVuY2UvVGVzdFNJUi9odW1hbi9JbmNpZGVuY2VfMC5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1NpbmdsZVNxdWFyZVNJUl9SS19SZWZlcmVuY2UvVGVzdFNJUi9odW1hbi9JbmNpZGVuY2VfMC5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWZkOWI2MgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvU2luZ2xlU3F1YXJlU0lSX1JLX1JlZmVyZW5jZS9UZXN0U0lSL2h1bWFuL0luY2lkZW5jZV8wLmNzdgpAQCAtMCwwICsxLDMzIEBACitpdGVyYXRpb24sdGltZSxzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9ub2RlLzU0RDVFRUEzRjVDQkUzL0xBVF9TUVJfMF8wCisxLFR1ZSAyNSBKYW4gMTEsMC4wCisyLFdlZCAyNiBKYW4gMTEsMC4zODkwMTA4OTI2NTA0OTk5CiszLFRodSAyNyBKYW4gMTEsMC42NDAyNzAyODQ3NTUxOTQ5Cis0LEZyaSAyOCBKYW4gMTEsMS4wNTIzMjI5NzI3ODI5NjEzCis1LFNhdCAyOSBKYW4gMTEsMS43MjU1NDE2NjY2MDUxMTQyCis2LFN1biAzMCBKYW4gMTEsMi44MTg3Mzc3ODk2NDQ3NDU2Cis3LE1vbiAzMSBKYW4gMTEsNC41NzYyOTM3NjUwMzk5NTQKKzgsVHVlIDEgRmViIDExLDcuMzU2ODUyNzA2NzA2NDMyCis5LFdlZCAyIEZlYiAxMSwxMS42NDQ1NzgwNzkxMTM0MTcKKzEwLFRodSAzIEZlYiAxMSwxNy45OTcxOTkxODc4MzgwNworMTEsRnJpIDQgRmViIDExLDI2Ljg1NTMzNDk0ODk0OTU4MworMTIsU2F0IDUgRmViIDExLDM4LjE2MDk5NDYwNjU4NjQ1CisxMyxTdW4gNiBGZWIgMTEsNTAuOTEwOTI5MTU5MTk1NDc2CisxNCxNb24gNyBGZWIgMTEsNjMuMDY1OTU4NDA5NDYyOTQKKzE1LFR1ZSA4IEZlYiAxMSw3Mi4yMTQxNTI1NTU5NDA4NgorMTYsV2VkIDkgRmViIDExLDc2LjY5MDU0NzU2NzAyOTU0CisxNyxUaHUgMTAgRmViIDExLDc2LjI0OTY4MzIxOTk5ODQyCisxOCxGcmkgMTEgRmViIDExLDcxLjg0MzAyODUxMzg0NDEKKzE5LFNhdCAxMiBGZWIgMTEsNjQuOTE5OTA4MDA4NzU3NjkKKzIwLFN1biAxMyBGZWIgMTEsNTYuODM5NTI0NTk2Mjg2OAorMjEsTW9uIDE0IEZlYiAxMSw0OC42MDU2OTQ0MTI5NTQ3NAorMjIsVHVlIDE1IEZlYiAxMSw0MC44NDIyOTM4NzY4NDk5MworMjMsV2VkIDE2IEZlYiAxMSwzMy44NzI4OTEzMzk4MDUyMTQKKzI0LFRodSAxNyBGZWIgMTEsMjcuODE4MjM4ODM5NDUyMQorMjUsRnJpIDE4IEZlYiAxMSwyMi42NzY3OTczMzUxMzk4NDUKKzI2LFNhdCAxOSBGZWIgMTEsMTguMzgxMzEyNDUyNjc5MjE4CisyNyxTdW4gMjAgRmViIDExLDE0LjgzNDk1MzAyOTIwNTY3NQorMjgsTW9uIDIxIEZlYiAxMSwxMS45MzI3NTUyMjgxOTM2NDkKKzI5LFR1ZSAyMiBGZWIgMTEsOS41NzMzOTk0OTAzMzkwMTgKKzMwLFdlZCAyMyBGZWIgMTEsNy42NjQ5ODk3MjM4OTc1NDcKKzMxLFRodSAyNCBGZWIgMTEsNi4xMjcyOTA3OTkwMzc3NAorMzIsRnJpIDI1IEZlYiAxMSw0Ljg5MTk4NTQ4MTQyMTEzOApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9TaW5nbGVTcXVhcmVTSVJfUktfUmVmZXJlbmNlL1Rlc3RTSVIvaHVtYW4vUG9wdWxhdGlvbiBDb3VudF8wLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvU2luZ2xlU3F1YXJlU0lSX1JLX1JlZmVyZW5jZS9UZXN0U0lSL2h1bWFuL1BvcHVsYXRpb24gQ291bnRfMC5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGYxZTVjYQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvU2luZ2xlU3F1YXJlU0lSX1JLX1JlZmVyZW5jZS9UZXN0U0lSL2h1bWFuL1BvcHVsYXRpb24gQ291bnRfMC5jc3YKQEAgLTAsMCArMSwzMyBAQAoraXRlcmF0aW9uLHRpbWUsc3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vbm9kZS81NEQ1RUVBM0Y1Q0JFMy9MQVRfU1FSXzBfMAorMSxUdWUgMjUgSmFuIDExLDEwMDAuMAorMixXZWQgMjYgSmFuIDExLDEwMDAuMDAwMDAwMDAwMDAwMQorMyxUaHUgMjcgSmFuIDExLDEwMDAuMAorNCxGcmkgMjggSmFuIDExLDEwMDAuMAorNSxTYXQgMjkgSmFuIDExLDEwMDAuMAorNixTdW4gMzAgSmFuIDExLDEwMDAuMAorNyxNb24gMzEgSmFuIDExLDEwMDAuMDAwMDAwMDAwMDAwMQorOCxUdWUgMSBGZWIgMTEsOTk5Ljk5OTk5OTk5OTk5OTkKKzksV2VkIDIgRmViIDExLDk5OS45OTk5OTk5OTk5OTk5CisxMCxUaHUgMyBGZWIgMTEsOTk5Ljk5OTk5OTk5OTk5OTkKKzExLEZyaSA0IEZlYiAxMSw5OTkuOTk5OTk5OTk5OTk5OAorMTIsU2F0IDUgRmViIDExLDk5OS45OTk5OTk5OTk5OTk5CisxMyxTdW4gNiBGZWIgMTEsMTAwMC4wCisxNCxNb24gNyBGZWIgMTEsMTAwMC4wCisxNSxUdWUgOCBGZWIgMTEsMTAwMC4wCisxNixXZWQgOSBGZWIgMTEsMTAwMC4wCisxNyxUaHUgMTAgRmViIDExLDEwMDAuMDAwMDAwMDAwMDAwMQorMTgsRnJpIDExIEZlYiAxMSwxMDAwLjAKKzE5LFNhdCAxMiBGZWIgMTEsMTAwMC4wMDAwMDAwMDAwMDAyCisyMCxTdW4gMTMgRmViIDExLDEwMDAuMDAwMDAwMDAwMDAwMgorMjEsTW9uIDE0IEZlYiAxMSwxMDAwLjAwMDAwMDAwMDAwMDIKKzIyLFR1ZSAxNSBGZWIgMTEsMTAwMC4wMDAwMDAwMDAwMDAxCisyMyxXZWQgMTYgRmViIDExLDEwMDAuMDAwMDAwMDAwMDAwMgorMjQsVGh1IDE3IEZlYiAxMSwxMDAwLjAwMDAwMDAwMDAwMDIKKzI1LEZyaSAxOCBGZWIgMTEsMTAwMC4wMDAwMDAwMDAwMDAyCisyNixTYXQgMTkgRmViIDExLDEwMDAuMDAwMDAwMDAwMDAwMworMjcsU3VuIDIwIEZlYiAxMSwxMDAwLjAwMDAwMDAwMDAwMDUKKzI4LE1vbiAyMSBGZWIgMTEsMTAwMC4wMDAwMDAwMDAwMDA1CisyOSxUdWUgMjIgRmViIDExLDEwMDAuMDAwMDAwMDAwMDAwNQorMzAsV2VkIDIzIEZlYiAxMSwxMDAwLjAwMDAwMDAwMDAwMDUKKzMxLFRodSAyNCBGZWIgMTEsMTAwMC4wMDAwMDAwMDAwMDA1CiszMixGcmkgMjUgRmViIDExLDEwMDAuMDAwMDAwMDAwMDAwMwpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9TaW5nbGVTcXVhcmVTSVJfUktfUmVmZXJlbmNlL1Rlc3RTSVIvaHVtYW4vUl8wLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvU2luZ2xlU3F1YXJlU0lSX1JLX1JlZmVyZW5jZS9UZXN0U0lSL2h1bWFuL1JfMC5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjViM2NjNAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvU2luZ2xlU3F1YXJlU0lSX1JLX1JlZmVyZW5jZS9UZXN0U0lSL2h1bWFuL1JfMC5jc3YKQEAgLTAsMCArMSwzMyBAQAoraXRlcmF0aW9uLHRpbWUsc3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vbm9kZS81NEQ1RUVBM0Y1Q0JFMy9MQVRfU1FSXzBfMAorMSxUdWUgMjUgSmFuIDExLDAuMAorMixXZWQgMjYgSmFuIDExLDAuMzg5MDEwODkyNjUwNDk5OQorMyxUaHUgMjcgSmFuIDExLDEuMDI5MjgxMTc3NDA1Njk0NworNCxGcmkgMjggSmFuIDExLDIuMDgxNjA0MTUwMTg4NjU2Cis1LFNhdCAyOSBKYW4gMTEsMy44MDcxNDU4MTY3OTM3Njk3Cis2LFN1biAzMCBKYW4gMTEsNi42MjU4ODM2MDY0Mzg1MTUKKzcsTW9uIDMxIEphbiAxMSwxMS4yMDIxNzczNzE0Nzg0NworOCxUdWUgMSBGZWIgMTEsMTguNTU5MDMwMDc4MTg0OTA0Cis5LFdlZCAyIEZlYiAxMSwzMC4yMDM2MDgxNTcyOTgzMjYKKzEwLFRodSAzIEZlYiAxMSw0OC4yMDA4MDczNDUxMzYzOQorMTEsRnJpIDQgRmViIDExLDc1LjA1NjE0MjI5NDA4NTk3CisxMixTYXQgNSBGZWIgMTEsMTEzLjIxNzEzNjkwMDY3MjQKKzEzLFN1biA2IEZlYiAxMSwxNjQuMTI4MDY2MDU5ODY3ODgKKzE0LE1vbiA3IEZlYiAxMSwyMjcuMTk0MDI0NDY5MzMwODMKKzE1LFR1ZSA4IEZlYiAxMSwyOTkuNDA4MTc3MDI1MjcxNworMTYsV2VkIDkgRmViIDExLDM3Ni4wOTg3MjQ1OTIzMDEyNworMTcsVGh1IDEwIEZlYiAxMSw0NTIuMzQ4NDA3ODEyMjk5NworMTgsRnJpIDExIEZlYiAxMSw1MjQuMTkxNDM2MzI2MTQzNworMTksU2F0IDEyIEZlYiAxMSw1ODkuMTExMzQ0MzM0OTAxNgorMjAsU3VuIDEzIEZlYiAxMSw2NDUuOTUwODY4OTMxMTg4NAorMjEsTW9uIDE0IEZlYiAxMSw2OTQuNTU2NTYzMzQ0MTQzMQorMjIsVHVlIDE1IEZlYiAxMSw3MzUuMzk4ODU3MjIwOTkzCisyMyxXZWQgMTYgRmViIDExLDc2OS4yNzE3NDg1NjA3OTgzCisyNCxUaHUgMTcgRmViIDExLDc5Ny4wODk5ODc0MDAyNTA1CisyNSxGcmkgMTggRmViIDExLDgxOS43NjY3ODQ3MzUzOTA0CisyNixTYXQgMTkgRmViIDExLDgzOC4xNDgwOTcxODgwNjk2CisyNyxTdW4gMjAgRmViIDExLDg1Mi45ODMwNTAyMTcyNzU0CisyOCxNb24gMjEgRmViIDExLDg2NC45MTU4MDU0NDU0NjkxCisyOSxUdWUgMjIgRmViIDExLDg3NC40ODkyMDQ5MzU4MDgxCiszMCxXZWQgMjMgRmViIDExLDg4Mi4xNTQxOTQ2NTk3MDU2CiszMSxUaHUgMjQgRmViIDExLDg4OC4yODE0ODU0NTg3NDMzCiszMixGcmkgMjUgRmViIDExLDg5My4xNzM0NzA5NDAxNjQ0CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1NpbmdsZVNxdWFyZVNJUl9SS19SZWZlcmVuY2UvVGVzdFNJUi9odW1hbi9TXzAuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9TaW5nbGVTcXVhcmVTSVJfUktfUmVmZXJlbmNlL1Rlc3RTSVIvaHVtYW4vU18wLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYmJkNTBjCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9TaW5nbGVTcXVhcmVTSVJfUktfUmVmZXJlbmNlL1Rlc3RTSVIvaHVtYW4vU18wLmNzdgpAQCAtMCwwICsxLDMzIEBACitpdGVyYXRpb24sdGltZSxzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9ub2RlLzU0RDVFRUEzRjVDQkUzL0xBVF9TUVJfMF8wCisxLFR1ZSAyNSBKYW4gMTEsOTk5LjAKKzIsV2VkIDI2IEphbiAxMSw5OTcuOTY0MjEyMzE4NDUyNworMyxUaHUgMjcgSmFuIDExLDk5Ni4yNjE3NTQ1NjE3OTIxCis0LEZyaSAyOCBKYW4gMTEsOTkzLjQ2OTk2OTE5MDQwMDMKKzUsU2F0IDI5IEphbiAxMSw5ODguOTA5MDczNzIxMTAyNgorNixTdW4gMzAgSmFuIDExLDk4MS41MDM2NzI3NjE3NzQ2Cis3LE1vbiAzMSBKYW4gMTEsOTY5LjU5ODczMDE1NzM3OTYKKzgsVHVlIDEgRmViIDExLDk1MC43NjIyNTA0NTk2NDQzCis5LFdlZCAyIEZlYiAxMSw5MjEuNjkyNjU2NDQzMDMzMQorMTAsVGh1IDMgRmViIDExLDg3OC41MDI5NzM1MjUwNDU3CisxMSxGcmkgNCBGZWIgMTEsODE3Ljc4OTU3OTYwODk4MzcKKzEyLFNhdCA1IEZlYiAxMSw3MzguNjYzNDU2NzIxNTM0CisxMyxTdW4gNiBGZWIgMTEsNjQ0Ljg5MDExMzY3MTc2MDcKKzE0LE1vbiA3IEZlYiAxMSw1NDUuMDY0NDUxMjcyMzQ3NworMTUsVHVlIDggRmViIDExLDQ0OS41ODg2MTM5NDg1MzA2CisxNixXZWQgOSBGZWIgMTEsMzY2LjQzNjM1MzcwNzQ3NjU0CisxNyxUaHUgMTAgRmViIDExLDI5OS4wMTQ1ODY4OTMxMzM0NworMTgsRnJpIDExIEZlYiAxMSwyNDYuODgyMTEzMjM1NzM3MDIKKzE5LFNhdCAxMiBGZWIgMTEsMjA3LjYzNjk2NDg4MjMyOTUKKzIwLFN1biAxMyBGZWIgMTEsMTc4LjQzNDA2MTIzMzYzMDI1CisyMSxNb24gMTQgRmViIDExLDE1Ni43NDI0MzkxMjQzMDI2NQorMjIsVHVlIDE1IEZlYiAxMSwxNDAuNTY3OTcyMTcxNzQwNgorMjMsV2VkIDE2IEZlYiAxMSwxMjguNDI3MzU5NTY1Mjc4MworMjQsVGh1IDE3IEZlYiAxMSwxMTkuMjQ1MTUyNTAyNDYzMTEKKzI1LEZyaSAxOCBGZWIgMTEsMTEyLjI0NzkyMjU5Njk4ODE5CisyNixTYXQgMTkgRmViIDExLDEwNi44Nzg1NTQ2MjE0Nzg2MworMjcsU3VuIDIwIEZlYiAxMSwxMDIuNzMyOTkxOTg4MTczMzcKKzI4LE1vbiAyMSBGZWIgMTEsOTkuNTE1NDIyMzgyNTU0NzIKKzI5LFR1ZSAyMiBGZWIgMTEsOTcuMDA3MDQxMjEwMzk4MjYKKzMwLFdlZCAyMyBGZWIgMTEsOTUuMDQ0MzQ2OTg3MjM3NAorMzEsVGh1IDI0IEZlYiAxMSw5My41MDM5OTM5MDQ2NDY3NgorMzIsRnJpIDI1IEZlYiAxMSw5Mi4yOTIxMjg1MTMwMzI5NgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9TaW5nbGVTcXVhcmVTSVJfUktfUmVmZXJlbmNlL1Rlc3RTSVIvcnVucGFyYW1ldGVycy5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1NpbmdsZVNxdWFyZVNJUl9SS19SZWZlcmVuY2UvVGVzdFNJUi9ydW5wYXJhbWV0ZXJzLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYTEzNmNjCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9TaW5nbGVTcXVhcmVTSVJfUktfUmVmZXJlbmNlL1Rlc3RTSVIvcnVucGFyYW1ldGVycy5jc3YKQEAgLTAsMCArMSwyIEBACitkaXNlYXNlTmFtZSxwb3B1bGF0aW9uSWRlbnRpZmllcix0aW1lUGVyaW9kLGZyZXF1ZW5jeURlcGVuZGVudCxyZWZlcmVuY2VQb3B1bGF0aW9uRGVuc2l0eSxyb2FkTmV0d29ya0luZmVjdGlvdXNQcm9wb3J0aW9uLGNoYXJhY3RlcmlzdGljTWl4aW5nRGlzdGFuY2UsdHJhbnNtaXNzaW9uUmF0ZSxub25MaW5lYXJpdHlDb2VmZmljaWVudCxyZWNvdmVyeVJhdGUsaW5mZWN0aW91c01vcnRhbGl0eVJhdGUsaW1tdW5pdHlMb3NzUmF0ZQorVGVzdFNJUixodW1hbiw4NjQwMDAwMCx0cnVlLDEwMC4wLDAuMDEsMi4yNSwwLjgsMS4wLDAuMywwLjAsMC4wClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9TaW5nbGVTcXVhcmVTSVJfUktfUmVmZXJlbmNlL2F1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwvaHVtYW4vQmlydGhzXzAuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9TaW5nbGVTcXVhcmVTSVJfUktfUmVmZXJlbmNlL2F1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwvaHVtYW4vQmlydGhzXzAuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNmZWIxNjYKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1NpbmdsZVNxdWFyZVNJUl9SS19SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9odW1hbi9CaXJ0aHNfMC5jc3YKQEAgLTAsMCArMSwzMyBAQAoraXRlcmF0aW9uLHRpbWUsc3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vbm9kZS81NEQ1RUVBM0Y1Q0JFMy9MQVRfU1FSXzBfMAorMSxUdWUgMjUgSmFuIDExLDAuMAorMixXZWQgMjYgSmFuIDExLDAuMAorMyxUaHUgMjcgSmFuIDExLDAuMAorNCxGcmkgMjggSmFuIDExLDAuMAorNSxTYXQgMjkgSmFuIDExLDAuMAorNixTdW4gMzAgSmFuIDExLDAuMAorNyxNb24gMzEgSmFuIDExLDAuMAorOCxUdWUgMSBGZWIgMTEsMC4wCis5LFdlZCAyIEZlYiAxMSwwLjAKKzEwLFRodSAzIEZlYiAxMSwwLjAKKzExLEZyaSA0IEZlYiAxMSwwLjAKKzEyLFNhdCA1IEZlYiAxMSwwLjAKKzEzLFN1biA2IEZlYiAxMSwwLjAKKzE0LE1vbiA3IEZlYiAxMSwwLjAKKzE1LFR1ZSA4IEZlYiAxMSwwLjAKKzE2LFdlZCA5IEZlYiAxMSwwLjAKKzE3LFRodSAxMCBGZWIgMTEsMC4wCisxOCxGcmkgMTEgRmViIDExLDAuMAorMTksU2F0IDEyIEZlYiAxMSwwLjAKKzIwLFN1biAxMyBGZWIgMTEsMC4wCisyMSxNb24gMTQgRmViIDExLDAuMAorMjIsVHVlIDE1IEZlYiAxMSwwLjAKKzIzLFdlZCAxNiBGZWIgMTEsMC4wCisyNCxUaHUgMTcgRmViIDExLDAuMAorMjUsRnJpIDE4IEZlYiAxMSwwLjAKKzI2LFNhdCAxOSBGZWIgMTEsMC4wCisyNyxTdW4gMjAgRmViIDExLDAuMAorMjgsTW9uIDIxIEZlYiAxMSwwLjAKKzI5LFR1ZSAyMiBGZWIgMTEsMC4wCiszMCxXZWQgMjMgRmViIDExLDAuMAorMzEsVGh1IDI0IEZlYiAxMSwwLjAKKzMyLEZyaSAyNSBGZWIgMTEsMC4wCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1NpbmdsZVNxdWFyZVNJUl9SS19SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9odW1hbi9Db3VudF8wLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvU2luZ2xlU3F1YXJlU0lSX1JLX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL2h1bWFuL0NvdW50XzAuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhhMmE3MTYKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1NpbmdsZVNxdWFyZVNJUl9SS19SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9odW1hbi9Db3VudF8wLmNzdgpAQCAtMCwwICsxLDMzIEBACitpdGVyYXRpb24sdGltZSxzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9ub2RlLzU0RDVFRUEzRjVDQkUzL0xBVF9TUVJfMF8wCisxLFR1ZSAyNSBKYW4gMTEsMTAwMC4wCisyLFdlZCAyNiBKYW4gMTEsMTAwMC4wCiszLFRodSAyNyBKYW4gMTEsMTAwMC4wCis0LEZyaSAyOCBKYW4gMTEsMTAwMC4wCis1LFNhdCAyOSBKYW4gMTEsMTAwMC4wCis2LFN1biAzMCBKYW4gMTEsMTAwMC4wCis3LE1vbiAzMSBKYW4gMTEsMTAwMC4wCis4LFR1ZSAxIEZlYiAxMSwxMDAwLjAKKzksV2VkIDIgRmViIDExLDEwMDAuMAorMTAsVGh1IDMgRmViIDExLDEwMDAuMAorMTEsRnJpIDQgRmViIDExLDEwMDAuMAorMTIsU2F0IDUgRmViIDExLDEwMDAuMAorMTMsU3VuIDYgRmViIDExLDEwMDAuMAorMTQsTW9uIDcgRmViIDExLDEwMDAuMAorMTUsVHVlIDggRmViIDExLDEwMDAuMAorMTYsV2VkIDkgRmViIDExLDEwMDAuMAorMTcsVGh1IDEwIEZlYiAxMSwxMDAwLjAKKzE4LEZyaSAxMSBGZWIgMTEsMTAwMC4wCisxOSxTYXQgMTIgRmViIDExLDEwMDAuMAorMjAsU3VuIDEzIEZlYiAxMSwxMDAwLjAKKzIxLE1vbiAxNCBGZWIgMTEsMTAwMC4wCisyMixUdWUgMTUgRmViIDExLDEwMDAuMAorMjMsV2VkIDE2IEZlYiAxMSwxMDAwLjAKKzI0LFRodSAxNyBGZWIgMTEsMTAwMC4wCisyNSxGcmkgMTggRmViIDExLDEwMDAuMAorMjYsU2F0IDE5IEZlYiAxMSwxMDAwLjAKKzI3LFN1biAyMCBGZWIgMTEsMTAwMC4wCisyOCxNb24gMjEgRmViIDExLDEwMDAuMAorMjksVHVlIDIyIEZlYiAxMSwxMDAwLjAKKzMwLFdlZCAyMyBGZWIgMTEsMTAwMC4wCiszMSxUaHUgMjQgRmViIDExLDEwMDAuMAorMzIsRnJpIDI1IEZlYiAxMSwxMDAwLjAKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvU2luZ2xlU3F1YXJlU0lSX1JLX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL2h1bWFuL0RlYXRoc18wLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvU2luZ2xlU3F1YXJlU0lSX1JLX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL2h1bWFuL0RlYXRoc18wLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZmViMTY2Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9TaW5nbGVTcXVhcmVTSVJfUktfUmVmZXJlbmNlL2F1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwvaHVtYW4vRGVhdGhzXzAuY3N2CkBAIC0wLDAgKzEsMzMgQEAKK2l0ZXJhdGlvbix0aW1lLHN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL25vZGUvNTRENUVFQTNGNUNCRTMvTEFUX1NRUl8wXzAKKzEsVHVlIDI1IEphbiAxMSwwLjAKKzIsV2VkIDI2IEphbiAxMSwwLjAKKzMsVGh1IDI3IEphbiAxMSwwLjAKKzQsRnJpIDI4IEphbiAxMSwwLjAKKzUsU2F0IDI5IEphbiAxMSwwLjAKKzYsU3VuIDMwIEphbiAxMSwwLjAKKzcsTW9uIDMxIEphbiAxMSwwLjAKKzgsVHVlIDEgRmViIDExLDAuMAorOSxXZWQgMiBGZWIgMTEsMC4wCisxMCxUaHUgMyBGZWIgMTEsMC4wCisxMSxGcmkgNCBGZWIgMTEsMC4wCisxMixTYXQgNSBGZWIgMTEsMC4wCisxMyxTdW4gNiBGZWIgMTEsMC4wCisxNCxNb24gNyBGZWIgMTEsMC4wCisxNSxUdWUgOCBGZWIgMTEsMC4wCisxNixXZWQgOSBGZWIgMTEsMC4wCisxNyxUaHUgMTAgRmViIDExLDAuMAorMTgsRnJpIDExIEZlYiAxMSwwLjAKKzE5LFNhdCAxMiBGZWIgMTEsMC4wCisyMCxTdW4gMTMgRmViIDExLDAuMAorMjEsTW9uIDE0IEZlYiAxMSwwLjAKKzIyLFR1ZSAxNSBGZWIgMTEsMC4wCisyMyxXZWQgMTYgRmViIDExLDAuMAorMjQsVGh1IDE3IEZlYiAxMSwwLjAKKzI1LEZyaSAxOCBGZWIgMTEsMC4wCisyNixTYXQgMTkgRmViIDExLDAuMAorMjcsU3VuIDIwIEZlYiAxMSwwLjAKKzI4LE1vbiAyMSBGZWIgMTEsMC4wCisyOSxUdWUgMjIgRmViIDExLDAuMAorMzAsV2VkIDIzIEZlYiAxMSwwLjAKKzMxLFRodSAyNCBGZWIgMTEsMC4wCiszMixGcmkgMjUgRmViIDExLDAuMApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9TaW5nbGVTcXVhcmVTSVJfUktfUmVmZXJlbmNlL2F1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwvaHVtYW4vRGVuc2l0eV8wLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvU2luZ2xlU3F1YXJlU0lSX1JLX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL2h1bWFuL0RlbnNpdHlfMC5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTk3MTUyYQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvU2luZ2xlU3F1YXJlU0lSX1JLX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL2h1bWFuL0RlbnNpdHlfMC5jc3YKQEAgLTAsMCArMSwzMyBAQAoraXRlcmF0aW9uLHRpbWUsc3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vbm9kZS81NEQ1RUVBM0Y1Q0JFMy9MQVRfU1FSXzBfMAorMSxUdWUgMjUgSmFuIDExLDAuNDkzODI3MTYwNDkzODI3MTMKKzIsV2VkIDI2IEphbiAxMSwwLjQ5MzgyNzE2MDQ5MzgyNzEzCiszLFRodSAyNyBKYW4gMTEsMC40OTM4MjcxNjA0OTM4MjcxMworNCxGcmkgMjggSmFuIDExLDAuNDkzODI3MTYwNDkzODI3MTMKKzUsU2F0IDI5IEphbiAxMSwwLjQ5MzgyNzE2MDQ5MzgyNzEzCis2LFN1biAzMCBKYW4gMTEsMC40OTM4MjcxNjA0OTM4MjcxMworNyxNb24gMzEgSmFuIDExLDAuNDkzODI3MTYwNDkzODI3MTMKKzgsVHVlIDEgRmViIDExLDAuNDkzODI3MTYwNDkzODI3MTMKKzksV2VkIDIgRmViIDExLDAuNDkzODI3MTYwNDkzODI3MTMKKzEwLFRodSAzIEZlYiAxMSwwLjQ5MzgyNzE2MDQ5MzgyNzEzCisxMSxGcmkgNCBGZWIgMTEsMC40OTM4MjcxNjA0OTM4MjcxMworMTIsU2F0IDUgRmViIDExLDAuNDkzODI3MTYwNDkzODI3MTMKKzEzLFN1biA2IEZlYiAxMSwwLjQ5MzgyNzE2MDQ5MzgyNzEzCisxNCxNb24gNyBGZWIgMTEsMC40OTM4MjcxNjA0OTM4MjcxMworMTUsVHVlIDggRmViIDExLDAuNDkzODI3MTYwNDkzODI3MTMKKzE2LFdlZCA5IEZlYiAxMSwwLjQ5MzgyNzE2MDQ5MzgyNzEzCisxNyxUaHUgMTAgRmViIDExLDAuNDkzODI3MTYwNDkzODI3MTMKKzE4LEZyaSAxMSBGZWIgMTEsMC40OTM4MjcxNjA0OTM4MjcxMworMTksU2F0IDEyIEZlYiAxMSwwLjQ5MzgyNzE2MDQ5MzgyNzEzCisyMCxTdW4gMTMgRmViIDExLDAuNDkzODI3MTYwNDkzODI3MTMKKzIxLE1vbiAxNCBGZWIgMTEsMC40OTM4MjcxNjA0OTM4MjcxMworMjIsVHVlIDE1IEZlYiAxMSwwLjQ5MzgyNzE2MDQ5MzgyNzEzCisyMyxXZWQgMTYgRmViIDExLDAuNDkzODI3MTYwNDkzODI3MTMKKzI0LFRodSAxNyBGZWIgMTEsMC40OTM4MjcxNjA0OTM4MjcxMworMjUsRnJpIDE4IEZlYiAxMSwwLjQ5MzgyNzE2MDQ5MzgyNzEzCisyNixTYXQgMTkgRmViIDExLDAuNDkzODI3MTYwNDkzODI3MTMKKzI3LFN1biAyMCBGZWIgMTEsMC40OTM4MjcxNjA0OTM4MjcxMworMjgsTW9uIDIxIEZlYiAxMSwwLjQ5MzgyNzE2MDQ5MzgyNzEzCisyOSxUdWUgMjIgRmViIDExLDAuNDkzODI3MTYwNDkzODI3MTMKKzMwLFdlZCAyMyBGZWIgMTEsMC40OTM4MjcxNjA0OTM4MjcxMworMzEsVGh1IDI0IEZlYiAxMSwwLjQ5MzgyNzE2MDQ5MzgyNzEzCiszMixGcmkgMjUgRmViIDExLDAuNDkzODI3MTYwNDkzODI3MTMKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvU2luZ2xlU3F1YXJlU0lSX1JLX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL2h1bWFuL0luY2lkZW5jZV8wLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvU2luZ2xlU3F1YXJlU0lSX1JLX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL2h1bWFuL0luY2lkZW5jZV8wLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZmViMTY2Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9TaW5nbGVTcXVhcmVTSVJfUktfUmVmZXJlbmNlL2F1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwvaHVtYW4vSW5jaWRlbmNlXzAuY3N2CkBAIC0wLDAgKzEsMzMgQEAKK2l0ZXJhdGlvbix0aW1lLHN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL25vZGUvNTRENUVFQTNGNUNCRTMvTEFUX1NRUl8wXzAKKzEsVHVlIDI1IEphbiAxMSwwLjAKKzIsV2VkIDI2IEphbiAxMSwwLjAKKzMsVGh1IDI3IEphbiAxMSwwLjAKKzQsRnJpIDI4IEphbiAxMSwwLjAKKzUsU2F0IDI5IEphbiAxMSwwLjAKKzYsU3VuIDMwIEphbiAxMSwwLjAKKzcsTW9uIDMxIEphbiAxMSwwLjAKKzgsVHVlIDEgRmViIDExLDAuMAorOSxXZWQgMiBGZWIgMTEsMC4wCisxMCxUaHUgMyBGZWIgMTEsMC4wCisxMSxGcmkgNCBGZWIgMTEsMC4wCisxMixTYXQgNSBGZWIgMTEsMC4wCisxMyxTdW4gNiBGZWIgMTEsMC4wCisxNCxNb24gNyBGZWIgMTEsMC4wCisxNSxUdWUgOCBGZWIgMTEsMC4wCisxNixXZWQgOSBGZWIgMTEsMC4wCisxNyxUaHUgMTAgRmViIDExLDAuMAorMTgsRnJpIDExIEZlYiAxMSwwLjAKKzE5LFNhdCAxMiBGZWIgMTEsMC4wCisyMCxTdW4gMTMgRmViIDExLDAuMAorMjEsTW9uIDE0IEZlYiAxMSwwLjAKKzIyLFR1ZSAxNSBGZWIgMTEsMC4wCisyMyxXZWQgMTYgRmViIDExLDAuMAorMjQsVGh1IDE3IEZlYiAxMSwwLjAKKzI1LEZyaSAxOCBGZWIgMTEsMC4wCisyNixTYXQgMTkgRmViIDExLDAuMAorMjcsU3VuIDIwIEZlYiAxMSwwLjAKKzI4LE1vbiAyMSBGZWIgMTEsMC4wCisyOSxUdWUgMjIgRmViIDExLDAuMAorMzAsV2VkIDIzIEZlYiAxMSwwLjAKKzMxLFRodSAyNCBGZWIgMTEsMC4wCiszMixGcmkgMjUgRmViIDExLDAuMApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9TaW5nbGVTcXVhcmVTSVJfUktfUmVmZXJlbmNlL2F1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwvcnVucGFyYW1ldGVycy5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1NpbmdsZVNxdWFyZVNJUl9SS19SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9ydW5wYXJhbWV0ZXJzLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNjg1NWI1Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9TaW5nbGVTcXVhcmVTSVJfUktfUmVmZXJlbmNlL2F1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwvcnVucGFyYW1ldGVycy5jc3YKQEAgLTAsMCArMSwyIEBACitwb3B1bGF0aW9uSWRlbnRpZmllcixuYW1lLHRhcmdldElTT0tleSxiaXJ0aFJhdGUsZGVhdGhSYXRlLHRpbWVQZXJpb2QKK2h1bWFuLGF1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwsLDAuMCwwLjAsODY0MDAwMDAKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1NpbmdsZVNxdWFyZVNJX0ZEX1JlZmVyZW5jZS9UZXN0U0kvaHVtYW4vRGlzZWFzZSBEZWF0aHNfMC5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1NpbmdsZVNxdWFyZVNJX0ZEX1JlZmVyZW5jZS9UZXN0U0kvaHVtYW4vRGlzZWFzZSBEZWF0aHNfMC5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2ZlYjE2NgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvU2luZ2xlU3F1YXJlU0lfRkRfUmVmZXJlbmNlL1Rlc3RTSS9odW1hbi9EaXNlYXNlIERlYXRoc18wLmNzdgpAQCAtMCwwICsxLDMzIEBACitpdGVyYXRpb24sdGltZSxzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9ub2RlLzU0RDVFRUEzRjVDQkUzL0xBVF9TUVJfMF8wCisxLFR1ZSAyNSBKYW4gMTEsMC4wCisyLFdlZCAyNiBKYW4gMTEsMC4wCiszLFRodSAyNyBKYW4gMTEsMC4wCis0LEZyaSAyOCBKYW4gMTEsMC4wCis1LFNhdCAyOSBKYW4gMTEsMC4wCis2LFN1biAzMCBKYW4gMTEsMC4wCis3LE1vbiAzMSBKYW4gMTEsMC4wCis4LFR1ZSAxIEZlYiAxMSwwLjAKKzksV2VkIDIgRmViIDExLDAuMAorMTAsVGh1IDMgRmViIDExLDAuMAorMTEsRnJpIDQgRmViIDExLDAuMAorMTIsU2F0IDUgRmViIDExLDAuMAorMTMsU3VuIDYgRmViIDExLDAuMAorMTQsTW9uIDcgRmViIDExLDAuMAorMTUsVHVlIDggRmViIDExLDAuMAorMTYsV2VkIDkgRmViIDExLDAuMAorMTcsVGh1IDEwIEZlYiAxMSwwLjAKKzE4LEZyaSAxMSBGZWIgMTEsMC4wCisxOSxTYXQgMTIgRmViIDExLDAuMAorMjAsU3VuIDEzIEZlYiAxMSwwLjAKKzIxLE1vbiAxNCBGZWIgMTEsMC4wCisyMixUdWUgMTUgRmViIDExLDAuMAorMjMsV2VkIDE2IEZlYiAxMSwwLjAKKzI0LFRodSAxNyBGZWIgMTEsMC4wCisyNSxGcmkgMTggRmViIDExLDAuMAorMjYsU2F0IDE5IEZlYiAxMSwwLjAKKzI3LFN1biAyMCBGZWIgMTEsMC4wCisyOCxNb24gMjEgRmViIDExLDAuMAorMjksVHVlIDIyIEZlYiAxMSwwLjAKKzMwLFdlZCAyMyBGZWIgMTEsMC4wCiszMSxUaHUgMjQgRmViIDExLDAuMAorMzIsRnJpIDI1IEZlYiAxMSwwLjAKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvU2luZ2xlU3F1YXJlU0lfRkRfUmVmZXJlbmNlL1Rlc3RTSS9odW1hbi9JXzAuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9TaW5nbGVTcXVhcmVTSV9GRF9SZWZlcmVuY2UvVGVzdFNJL2h1bWFuL0lfMC5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzViNWQ3MAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvU2luZ2xlU3F1YXJlU0lfRkRfUmVmZXJlbmNlL1Rlc3RTSS9odW1hbi9JXzAuY3N2CkBAIC0wLDAgKzEsMzMgQEAKK2l0ZXJhdGlvbix0aW1lLHN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL25vZGUvNTRENUVFQTNGNUNCRTMvTEFUX1NRUl8wXzAKKzEsVHVlIDI1IEphbiAxMSwxLjAKKzIsV2VkIDI2IEphbiAxMSwxLjM5OTYKKzMsVGh1IDI3IEphbiAxMSwxLjk1ODY1NjQ0NzkzNgorNCxGcmkgMjggSmFuIDExLDIuNzQwNTg0NDkzMDc3OTgzNQorNSxTYXQgMjkgSmFuIDExLDMuODMzODEzOTY4OTYzNjk3Cis2LFN1biAzMCBKYW4gMTEsNS4zNjE0NjAzMDQ3Mjk3MjcKKzcsTW9uIDMxIEphbiAxMSw3LjQ5NDU0NjMyMzk4MTk0MQorOCxUdWUgMSBGZWIgMTEsMTAuNDY5ODk3NTYzNzMzNzkzCis5LFdlZCAyIEZlYiAxMSwxNC42MTQwMDkwODcyMjkyODEKKzEwLFRodSAzIEZlYiAxMSwyMC4zNzQxODUwMTc0ODAzNDcKKzExLEZyaSA0IEZlYiAxMSwyOC4zNTc4MTYwNTg0MjE4OAorMTIsU2F0IDUgRmViIDExLDM5LjM3OTI3NjE4OTE0OTMxNgorMTMsU3VuIDYgRmViIDExLDU0LjUxMDY5NTcwNzUzNjUyCisxNCxNb24gNyBGZWIgMTEsNzUuMTI2NDA3NjExOTQzMjgKKzE1LFR1ZSA4IEZlYiAxMSwxMDIuOTE5Mzc5ODA4NDUwMjYKKzE2LFdlZCA5IEZlYiAxMSwxMzkuODUwMTcyMjM1NzY3OTYKKzE3LFRodSAxMCBGZWIgMTEsMTg3Ljk2NzAxMjg2MDMyNTU1CisxOCxGcmkgMTEgRmViIDExLDI0OS4wMjExNzg4MzUwMDIyNQorMTksU2F0IDEyIEZlYiAxMSwzMjMuODI1MDMxMzY1NjUzNQorMjAsU3VuIDEzIEZlYiAxMSw0MTEuNDA5OTgzNTM2MzI4MworMjEsTW9uIDE0IEZlYiAxMSw1MDguMjcwNzA3MTI5NTE0ODUKKzIyLFR1ZSAxNSBGZWIgMTEsNjA4LjI0MzM0NTI5MDk0NgorMjMsV2VkIDE2IEZlYiAxMSw3MDMuNTU2Njk2NTcxMDM2CisyNCxUaHUgMTcgRmViIDExLDc4Ni45ODI1NjUwODM0NzEKKzI1LEZyaSAxOCBGZWIgMTEsODU0LjAzODk2ODAxODcxNTUKKzI2LFNhdCAxOSBGZWIgMTEsOTAzLjkwMTUzMTY2ODQxMjgKKzI3LFN1biAyMCBGZWIgMTEsOTM4LjY0Njk1Mjc1NDc3NjkKKzI4LE1vbiAyMSBGZWIgMTEsOTYxLjY4MjQ5MzA5MDM1NjMKKzI5LFR1ZSAyMiBGZWIgMTEsOTc2LjQyMjIwMzMxOTkwNTUKKzMwLFdlZCAyMyBGZWIgMTEsOTg1LjYzMDk1Njk5MzQyODIKKzMxLFRodSAyNCBGZWIgMTEsOTkxLjI5NTk4NjQzNzI4NzEKKzMyLEZyaSAyNSBGZWIgMTEsOTk0Ljc0NzI4NzkyMTUzMjMKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvU2luZ2xlU3F1YXJlU0lfRkRfUmVmZXJlbmNlL1Rlc3RTSS9odW1hbi9JbmNpZGVuY2VfMC5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1NpbmdsZVNxdWFyZVNJX0ZEX1JlZmVyZW5jZS9UZXN0U0kvaHVtYW4vSW5jaWRlbmNlXzAuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc2NTg3OTAKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1NpbmdsZVNxdWFyZVNJX0ZEX1JlZmVyZW5jZS9UZXN0U0kvaHVtYW4vSW5jaWRlbmNlXzAuY3N2CkBAIC0wLDAgKzEsMzMgQEAKK2l0ZXJhdGlvbix0aW1lLHN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL25vZGUvNTRENUVFQTNGNUNCRTMvTEFUX1NRUl8wXzAKKzEsVHVlIDI1IEphbiAxMSwwLjAKKzIsV2VkIDI2IEphbiAxMSwwLjM5OTYKKzMsVGh1IDI3IEphbiAxMSwwLjU1OTA1NjQ0NzkzNjAwMDEKKzQsRnJpIDI4IEphbiAxMSwwLjc4MTkyODA0NTE0MTk4MzYKKzUsU2F0IDI5IEphbiAxMSwxLjA5MzIyOTQ3NTg4NTcxMzcKKzYsU3VuIDMwIEphbiAxMSwxLjUyNzY0NjMzNTc2NjAzMDQKKzcsTW9uIDMxIEphbiAxMSwyLjEzMzA4NjAxOTI1MjIxNAorOCxUdWUgMSBGZWIgMTEsMi45NzUzNTEyMzk3NTE4NTI1Cis5LFdlZCAyIEZlYiAxMSw0LjE0NDExMTUyMzQ5NTQ4NworMTAsVGh1IDMgRmViIDExLDUuNzYwMTc1OTMwMjUxMDY1CisxMSxGcmkgNCBGZWIgMTEsNy45ODM2MzEwNDA5NDE1MzEKKzEyLFNhdCA1IEZlYiAxMSwxMS4wMjE0NjAxMzA3Mjc0MzcKKzEzLFN1biA2IEZlYiAxMSwxNS4xMzE0MTk1MTgzODcyMDYKKzE0LE1vbiA3IEZlYiAxMSwyMC42MTU3MTE5MDQ0MDY3NQorMTUsVHVlIDggRmViIDExLDI3Ljc5Mjk3MjE5NjUwNjk3MworMTYsV2VkIDkgRmViIDExLDM2LjkzMDc5MjQyNzMxNzY5CisxNyxUaHUgMTAgRmViIDExLDQ4LjExNjg0MDYyNDU1NzYKKzE4LEZyaSAxMSBGZWIgMTEsNjEuMDU0MTY1OTc0Njc2NworMTksU2F0IDEyIEZlYiAxMSw3NC44MDM4NTI1MzA2NTEyNAorMjAsU3VuIDEzIEZlYiAxMSw4Ny41ODQ5NTIxNzA2NzQ4MQorMjEsTW9uIDE0IEZlYiAxMSw5Ni44NjA3MjM1OTMxODY1NgorMjIsVHVlIDE1IEZlYiAxMSw5OS45NzI2MzgxNjE0MzExNAorMjMsV2VkIDE2IEZlYiAxMSw5NS4zMTMzNTEyODAwOTAwNQorMjQsVGh1IDE3IEZlYiAxMSw4My40MjU4Njg1MTI0MzQ4OQorMjUsRnJpIDE4IEZlYiAxMSw2Ny4wNTY0MDI5MzUyNDQ1OAorMjYsU2F0IDE5IEZlYiAxMSw0OS44NjI1NjM2NDk2OTcyMQorMjcsU3VuIDIwIEZlYiAxMSwzNC43NDU0MjEwODYzNjQxMQorMjgsTW9uIDIxIEZlYiAxMSwyMy4wMzU1NDAzMzU1Nzk0NjYKKzI5LFR1ZSAyMiBGZWIgMTEsMTQuNzM5NzEwMjI5NTQ5Mjc4CiszMCxXZWQgMjMgRmViIDExLDkuMjA4NzUzNjczNTIyNjU4CiszMSxUaHUgMjQgRmViIDExLDUuNjY1MDI5NDQzODU4ODYKKzMyLEZyaSAyNSBGZWIgMTEsMy40NTEzMDE0ODQyNDUyNDQzCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1NpbmdsZVNxdWFyZVNJX0ZEX1JlZmVyZW5jZS9UZXN0U0kvaHVtYW4vUG9wdWxhdGlvbiBDb3VudF8wLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvU2luZ2xlU3F1YXJlU0lfRkRfUmVmZXJlbmNlL1Rlc3RTSS9odW1hbi9Qb3B1bGF0aW9uIENvdW50XzAuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU4NDM3NDUKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1NpbmdsZVNxdWFyZVNJX0ZEX1JlZmVyZW5jZS9UZXN0U0kvaHVtYW4vUG9wdWxhdGlvbiBDb3VudF8wLmNzdgpAQCAtMCwwICsxLDMzIEBACitpdGVyYXRpb24sdGltZSxzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9ub2RlLzU0RDVFRUEzRjVDQkUzL0xBVF9TUVJfMF8wCisxLFR1ZSAyNSBKYW4gMTEsMTAwMC4wCisyLFdlZCAyNiBKYW4gMTEsMTAwMC4wCiszLFRodSAyNyBKYW4gMTEsMTAwMC4wMDAwMDAwMDAwMDAxCis0LEZyaSAyOCBKYW4gMTEsMTAwMC4wMDAwMDAwMDAwMDAxCis1LFNhdCAyOSBKYW4gMTEsMTAwMC4wMDAwMDAwMDAwMDAxCis2LFN1biAzMCBKYW4gMTEsMTAwMC4wMDAwMDAwMDAwMDAxCis3LE1vbiAzMSBKYW4gMTEsMTAwMC4wMDAwMDAwMDAwMDAxCis4LFR1ZSAxIEZlYiAxMSwxMDAwLjAwMDAwMDAwMDAwMDEKKzksV2VkIDIgRmViIDExLDEwMDAuMDAwMDAwMDAwMDAwMgorMTAsVGh1IDMgRmViIDExLDEwMDAuMDAwMDAwMDAwMDAwMgorMTEsRnJpIDQgRmViIDExLDEwMDAuMDAwMDAwMDAwMDAwMgorMTIsU2F0IDUgRmViIDExLDEwMDAuMDAwMDAwMDAwMDAwMgorMTMsU3VuIDYgRmViIDExLDEwMDAuMDAwMDAwMDAwMDAwMgorMTQsTW9uIDcgRmViIDExLDEwMDAuMDAwMDAwMDAwMDAwMQorMTUsVHVlIDggRmViIDExLDEwMDAuMDAwMDAwMDAwMDAwMQorMTYsV2VkIDkgRmViIDExLDEwMDAuMDAwMDAwMDAwMDAwMgorMTcsVGh1IDEwIEZlYiAxMSwxMDAwLjAwMDAwMDAwMDAwMDEKKzE4LEZyaSAxMSBGZWIgMTEsMTAwMC4wMDAwMDAwMDAwMDAxCisxOSxTYXQgMTIgRmViIDExLDEwMDAuMAorMjAsU3VuIDEzIEZlYiAxMSwxMDAwLjAKKzIxLE1vbiAxNCBGZWIgMTEsMTAwMC4wCisyMixUdWUgMTUgRmViIDExLDEwMDAuMAorMjMsV2VkIDE2IEZlYiAxMSwxMDAwLjAKKzI0LFRodSAxNyBGZWIgMTEsMTAwMC4wMDAwMDAwMDAwMDAxCisyNSxGcmkgMTggRmViIDExLDEwMDAuMDAwMDAwMDAwMDAwMQorMjYsU2F0IDE5IEZlYiAxMSwxMDAwLjAwMDAwMDAwMDAwMDEKKzI3LFN1biAyMCBGZWIgMTEsMTAwMC4wMDAwMDAwMDAwMDAxCisyOCxNb24gMjEgRmViIDExLDEwMDAuMDAwMDAwMDAwMDAwMQorMjksVHVlIDIyIEZlYiAxMSwxMDAwLjAKKzMwLFdlZCAyMyBGZWIgMTEsMTAwMC4wCiszMSxUaHUgMjQgRmViIDExLDEwMDAuMDAwMDAwMDAwMDAwMQorMzIsRnJpIDI1IEZlYiAxMSwxMDAwLjAwMDAwMDAwMDAwMDEKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvU2luZ2xlU3F1YXJlU0lfRkRfUmVmZXJlbmNlL1Rlc3RTSS9odW1hbi9TXzAuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9TaW5nbGVTcXVhcmVTSV9GRF9SZWZlcmVuY2UvVGVzdFNJL2h1bWFuL1NfMC5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDJjZjIyZAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvU2luZ2xlU3F1YXJlU0lfRkRfUmVmZXJlbmNlL1Rlc3RTSS9odW1hbi9TXzAuY3N2CkBAIC0wLDAgKzEsMzMgQEAKK2l0ZXJhdGlvbix0aW1lLHN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL25vZGUvNTRENUVFQTNGNUNCRTMvTEFUX1NRUl8wXzAKKzEsVHVlIDI1IEphbiAxMSw5OTkuMAorMixXZWQgMjYgSmFuIDExLDk5OC42MDA0CiszLFRodSAyNyBKYW4gMTEsOTk4LjA0MTM0MzU1MjA2NDEKKzQsRnJpIDI4IEphbiAxMSw5OTcuMjU5NDE1NTA2OTIyMQorNSxTYXQgMjkgSmFuIDExLDk5Ni4xNjYxODYwMzEwMzY0Cis2LFN1biAzMCBKYW4gMTEsOTk0LjYzODUzOTY5NTI3MDQKKzcsTW9uIDMxIEphbiAxMSw5OTIuNTA1NDUzNjc2MDE4MgorOCxUdWUgMSBGZWIgMTEsOTg5LjUzMDEwMjQzNjI2NjQKKzksV2VkIDIgRmViIDExLDk4NS4zODU5OTA5MTI3NzA5CisxMCxUaHUgMyBGZWIgMTEsOTc5LjYyNTgxNDk4MjUxOTgKKzExLEZyaSA0IEZlYiAxMSw5NzEuNjQyMTgzOTQxNTc4MworMTIsU2F0IDUgRmViIDExLDk2MC42MjA3MjM4MTA4NTA5CisxMyxTdW4gNiBGZWIgMTEsOTQ1LjQ4OTMwNDI5MjQ2MzcKKzE0LE1vbiA3IEZlYiAxMSw5MjQuODczNTkyMzg4MDU2OQorMTUsVHVlIDggRmViIDExLDg5Ny4wODA2MjAxOTE1NDk5CisxNixXZWQgOSBGZWIgMTEsODYwLjE0OTgyNzc2NDIzMjIKKzE3LFRodSAxMCBGZWIgMTEsODEyLjAzMjk4NzEzOTY3NDYKKzE4LEZyaSAxMSBGZWIgMTEsNzUwLjk3ODgyMTE2NDk5NzgKKzE5LFNhdCAxMiBGZWIgMTEsNjc2LjE3NDk2ODYzNDM0NjYKKzIwLFN1biAxMyBGZWIgMTEsNTg4LjU5MDAxNjQ2MzY3MTgKKzIxLE1vbiAxNCBGZWIgMTEsNDkxLjcyOTI5Mjg3MDQ4NTIKKzIyLFR1ZSAxNSBGZWIgMTEsMzkxLjc1NjY1NDcwOTA1NDEKKzIzLFdlZCAxNiBGZWIgMTEsMjk2LjQ0MzMwMzQyODk2NDA0CisyNCxUaHUgMTcgRmViIDExLDIxMy4wMTc0MzQ5MTY1MjkxNworMjUsRnJpIDE4IEZlYiAxMSwxNDUuOTYxMDMxOTgxMjg0NTgKKzI2LFNhdCAxOSBGZWIgMTEsOTYuMDk4NDY4MzMxNTg3MzcKKzI3LFN1biAyMCBGZWIgMTEsNjEuMzUzMDQ3MjQ1MjIzMjYKKzI4LE1vbiAyMSBGZWIgMTEsMzguMzE3NTA2OTA5NjQzOAorMjksVHVlIDIyIEZlYiAxMSwyMy41Nzc3OTY2ODAwOTQ1MgorMzAsV2VkIDIzIEZlYiAxMSwxNC4zNjkwNDMwMDY1NzE4NgorMzEsVGh1IDI0IEZlYiAxMSw4LjcwNDAxMzU2MjcxMzAwMQorMzIsRnJpIDI1IEZlYiAxMSw1LjI1MjcxMjA3ODQ2Nzc1NzUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvU2luZ2xlU3F1YXJlU0lfRkRfUmVmZXJlbmNlL1Rlc3RTSS9ydW5wYXJhbWV0ZXJzLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvU2luZ2xlU3F1YXJlU0lfRkRfUmVmZXJlbmNlL1Rlc3RTSS9ydW5wYXJhbWV0ZXJzLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MThjMDljCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9TaW5nbGVTcXVhcmVTSV9GRF9SZWZlcmVuY2UvVGVzdFNJL3J1bnBhcmFtZXRlcnMuY3N2CkBAIC0wLDAgKzEsMiBAQAorZGlzZWFzZU5hbWUscG9wdWxhdGlvbklkZW50aWZpZXIsdGltZVBlcmlvZCxmcmVxdWVuY3lEZXBlbmRlbnQscmVmZXJlbmNlUG9wdWxhdGlvbkRlbnNpdHkscm9hZE5ldHdvcmtJbmZlY3Rpb3VzUHJvcG9ydGlvbixjaGFyYWN0ZXJpc3RpY01peGluZ0Rpc3RhbmNlLHRyYW5zbWlzc2lvblJhdGUsbm9uTGluZWFyaXR5Q29lZmZpY2llbnQscmVjb3ZlcnlSYXRlLGluZmVjdGlvdXNNb3J0YWxpdHlSYXRlCitUZXN0U0ksaHVtYW4sODY0MDAwMDAsdHJ1ZSwxMDAuMCwwLjAxLDIuMjUsMC40LDEuMCwwLjAsMC4wClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9TaW5nbGVTcXVhcmVTSV9GRF9SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9odW1hbi9CaXJ0aHNfMC5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1NpbmdsZVNxdWFyZVNJX0ZEX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL2h1bWFuL0JpcnRoc18wLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZmViMTY2Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9TaW5nbGVTcXVhcmVTSV9GRF9SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9odW1hbi9CaXJ0aHNfMC5jc3YKQEAgLTAsMCArMSwzMyBAQAoraXRlcmF0aW9uLHRpbWUsc3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vbm9kZS81NEQ1RUVBM0Y1Q0JFMy9MQVRfU1FSXzBfMAorMSxUdWUgMjUgSmFuIDExLDAuMAorMixXZWQgMjYgSmFuIDExLDAuMAorMyxUaHUgMjcgSmFuIDExLDAuMAorNCxGcmkgMjggSmFuIDExLDAuMAorNSxTYXQgMjkgSmFuIDExLDAuMAorNixTdW4gMzAgSmFuIDExLDAuMAorNyxNb24gMzEgSmFuIDExLDAuMAorOCxUdWUgMSBGZWIgMTEsMC4wCis5LFdlZCAyIEZlYiAxMSwwLjAKKzEwLFRodSAzIEZlYiAxMSwwLjAKKzExLEZyaSA0IEZlYiAxMSwwLjAKKzEyLFNhdCA1IEZlYiAxMSwwLjAKKzEzLFN1biA2IEZlYiAxMSwwLjAKKzE0LE1vbiA3IEZlYiAxMSwwLjAKKzE1LFR1ZSA4IEZlYiAxMSwwLjAKKzE2LFdlZCA5IEZlYiAxMSwwLjAKKzE3LFRodSAxMCBGZWIgMTEsMC4wCisxOCxGcmkgMTEgRmViIDExLDAuMAorMTksU2F0IDEyIEZlYiAxMSwwLjAKKzIwLFN1biAxMyBGZWIgMTEsMC4wCisyMSxNb24gMTQgRmViIDExLDAuMAorMjIsVHVlIDE1IEZlYiAxMSwwLjAKKzIzLFdlZCAxNiBGZWIgMTEsMC4wCisyNCxUaHUgMTcgRmViIDExLDAuMAorMjUsRnJpIDE4IEZlYiAxMSwwLjAKKzI2LFNhdCAxOSBGZWIgMTEsMC4wCisyNyxTdW4gMjAgRmViIDExLDAuMAorMjgsTW9uIDIxIEZlYiAxMSwwLjAKKzI5LFR1ZSAyMiBGZWIgMTEsMC4wCiszMCxXZWQgMjMgRmViIDExLDAuMAorMzEsVGh1IDI0IEZlYiAxMSwwLjAKKzMyLEZyaSAyNSBGZWIgMTEsMC4wCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1NpbmdsZVNxdWFyZVNJX0ZEX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL2h1bWFuL0NvdW50XzAuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9TaW5nbGVTcXVhcmVTSV9GRF9SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9odW1hbi9Db3VudF8wLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YTJhNzE2Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9TaW5nbGVTcXVhcmVTSV9GRF9SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9odW1hbi9Db3VudF8wLmNzdgpAQCAtMCwwICsxLDMzIEBACitpdGVyYXRpb24sdGltZSxzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9ub2RlLzU0RDVFRUEzRjVDQkUzL0xBVF9TUVJfMF8wCisxLFR1ZSAyNSBKYW4gMTEsMTAwMC4wCisyLFdlZCAyNiBKYW4gMTEsMTAwMC4wCiszLFRodSAyNyBKYW4gMTEsMTAwMC4wCis0LEZyaSAyOCBKYW4gMTEsMTAwMC4wCis1LFNhdCAyOSBKYW4gMTEsMTAwMC4wCis2LFN1biAzMCBKYW4gMTEsMTAwMC4wCis3LE1vbiAzMSBKYW4gMTEsMTAwMC4wCis4LFR1ZSAxIEZlYiAxMSwxMDAwLjAKKzksV2VkIDIgRmViIDExLDEwMDAuMAorMTAsVGh1IDMgRmViIDExLDEwMDAuMAorMTEsRnJpIDQgRmViIDExLDEwMDAuMAorMTIsU2F0IDUgRmViIDExLDEwMDAuMAorMTMsU3VuIDYgRmViIDExLDEwMDAuMAorMTQsTW9uIDcgRmViIDExLDEwMDAuMAorMTUsVHVlIDggRmViIDExLDEwMDAuMAorMTYsV2VkIDkgRmViIDExLDEwMDAuMAorMTcsVGh1IDEwIEZlYiAxMSwxMDAwLjAKKzE4LEZyaSAxMSBGZWIgMTEsMTAwMC4wCisxOSxTYXQgMTIgRmViIDExLDEwMDAuMAorMjAsU3VuIDEzIEZlYiAxMSwxMDAwLjAKKzIxLE1vbiAxNCBGZWIgMTEsMTAwMC4wCisyMixUdWUgMTUgRmViIDExLDEwMDAuMAorMjMsV2VkIDE2IEZlYiAxMSwxMDAwLjAKKzI0LFRodSAxNyBGZWIgMTEsMTAwMC4wCisyNSxGcmkgMTggRmViIDExLDEwMDAuMAorMjYsU2F0IDE5IEZlYiAxMSwxMDAwLjAKKzI3LFN1biAyMCBGZWIgMTEsMTAwMC4wCisyOCxNb24gMjEgRmViIDExLDEwMDAuMAorMjksVHVlIDIyIEZlYiAxMSwxMDAwLjAKKzMwLFdlZCAyMyBGZWIgMTEsMTAwMC4wCiszMSxUaHUgMjQgRmViIDExLDEwMDAuMAorMzIsRnJpIDI1IEZlYiAxMSwxMDAwLjAKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvU2luZ2xlU3F1YXJlU0lfRkRfUmVmZXJlbmNlL2F1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwvaHVtYW4vRGVhdGhzXzAuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9TaW5nbGVTcXVhcmVTSV9GRF9SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9odW1hbi9EZWF0aHNfMC5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2ZlYjE2NgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvU2luZ2xlU3F1YXJlU0lfRkRfUmVmZXJlbmNlL2F1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwvaHVtYW4vRGVhdGhzXzAuY3N2CkBAIC0wLDAgKzEsMzMgQEAKK2l0ZXJhdGlvbix0aW1lLHN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL25vZGUvNTRENUVFQTNGNUNCRTMvTEFUX1NRUl8wXzAKKzEsVHVlIDI1IEphbiAxMSwwLjAKKzIsV2VkIDI2IEphbiAxMSwwLjAKKzMsVGh1IDI3IEphbiAxMSwwLjAKKzQsRnJpIDI4IEphbiAxMSwwLjAKKzUsU2F0IDI5IEphbiAxMSwwLjAKKzYsU3VuIDMwIEphbiAxMSwwLjAKKzcsTW9uIDMxIEphbiAxMSwwLjAKKzgsVHVlIDEgRmViIDExLDAuMAorOSxXZWQgMiBGZWIgMTEsMC4wCisxMCxUaHUgMyBGZWIgMTEsMC4wCisxMSxGcmkgNCBGZWIgMTEsMC4wCisxMixTYXQgNSBGZWIgMTEsMC4wCisxMyxTdW4gNiBGZWIgMTEsMC4wCisxNCxNb24gNyBGZWIgMTEsMC4wCisxNSxUdWUgOCBGZWIgMTEsMC4wCisxNixXZWQgOSBGZWIgMTEsMC4wCisxNyxUaHUgMTAgRmViIDExLDAuMAorMTgsRnJpIDExIEZlYiAxMSwwLjAKKzE5LFNhdCAxMiBGZWIgMTEsMC4wCisyMCxTdW4gMTMgRmViIDExLDAuMAorMjEsTW9uIDE0IEZlYiAxMSwwLjAKKzIyLFR1ZSAxNSBGZWIgMTEsMC4wCisyMyxXZWQgMTYgRmViIDExLDAuMAorMjQsVGh1IDE3IEZlYiAxMSwwLjAKKzI1LEZyaSAxOCBGZWIgMTEsMC4wCisyNixTYXQgMTkgRmViIDExLDAuMAorMjcsU3VuIDIwIEZlYiAxMSwwLjAKKzI4LE1vbiAyMSBGZWIgMTEsMC4wCisyOSxUdWUgMjIgRmViIDExLDAuMAorMzAsV2VkIDIzIEZlYiAxMSwwLjAKKzMxLFRodSAyNCBGZWIgMTEsMC4wCiszMixGcmkgMjUgRmViIDExLDAuMApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9TaW5nbGVTcXVhcmVTSV9GRF9SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9odW1hbi9EZW5zaXR5XzAuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9TaW5nbGVTcXVhcmVTSV9GRF9SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9odW1hbi9EZW5zaXR5XzAuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU5NzE1MmEKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1NpbmdsZVNxdWFyZVNJX0ZEX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL2h1bWFuL0RlbnNpdHlfMC5jc3YKQEAgLTAsMCArMSwzMyBAQAoraXRlcmF0aW9uLHRpbWUsc3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vbm9kZS81NEQ1RUVBM0Y1Q0JFMy9MQVRfU1FSXzBfMAorMSxUdWUgMjUgSmFuIDExLDAuNDkzODI3MTYwNDkzODI3MTMKKzIsV2VkIDI2IEphbiAxMSwwLjQ5MzgyNzE2MDQ5MzgyNzEzCiszLFRodSAyNyBKYW4gMTEsMC40OTM4MjcxNjA0OTM4MjcxMworNCxGcmkgMjggSmFuIDExLDAuNDkzODI3MTYwNDkzODI3MTMKKzUsU2F0IDI5IEphbiAxMSwwLjQ5MzgyNzE2MDQ5MzgyNzEzCis2LFN1biAzMCBKYW4gMTEsMC40OTM4MjcxNjA0OTM4MjcxMworNyxNb24gMzEgSmFuIDExLDAuNDkzODI3MTYwNDkzODI3MTMKKzgsVHVlIDEgRmViIDExLDAuNDkzODI3MTYwNDkzODI3MTMKKzksV2VkIDIgRmViIDExLDAuNDkzODI3MTYwNDkzODI3MTMKKzEwLFRodSAzIEZlYiAxMSwwLjQ5MzgyNzE2MDQ5MzgyNzEzCisxMSxGcmkgNCBGZWIgMTEsMC40OTM4MjcxNjA0OTM4MjcxMworMTIsU2F0IDUgRmViIDExLDAuNDkzODI3MTYwNDkzODI3MTMKKzEzLFN1biA2IEZlYiAxMSwwLjQ5MzgyNzE2MDQ5MzgyNzEzCisxNCxNb24gNyBGZWIgMTEsMC40OTM4MjcxNjA0OTM4MjcxMworMTUsVHVlIDggRmViIDExLDAuNDkzODI3MTYwNDkzODI3MTMKKzE2LFdlZCA5IEZlYiAxMSwwLjQ5MzgyNzE2MDQ5MzgyNzEzCisxNyxUaHUgMTAgRmViIDExLDAuNDkzODI3MTYwNDkzODI3MTMKKzE4LEZyaSAxMSBGZWIgMTEsMC40OTM4MjcxNjA0OTM4MjcxMworMTksU2F0IDEyIEZlYiAxMSwwLjQ5MzgyNzE2MDQ5MzgyNzEzCisyMCxTdW4gMTMgRmViIDExLDAuNDkzODI3MTYwNDkzODI3MTMKKzIxLE1vbiAxNCBGZWIgMTEsMC40OTM4MjcxNjA0OTM4MjcxMworMjIsVHVlIDE1IEZlYiAxMSwwLjQ5MzgyNzE2MDQ5MzgyNzEzCisyMyxXZWQgMTYgRmViIDExLDAuNDkzODI3MTYwNDkzODI3MTMKKzI0LFRodSAxNyBGZWIgMTEsMC40OTM4MjcxNjA0OTM4MjcxMworMjUsRnJpIDE4IEZlYiAxMSwwLjQ5MzgyNzE2MDQ5MzgyNzEzCisyNixTYXQgMTkgRmViIDExLDAuNDkzODI3MTYwNDkzODI3MTMKKzI3LFN1biAyMCBGZWIgMTEsMC40OTM4MjcxNjA0OTM4MjcxMworMjgsTW9uIDIxIEZlYiAxMSwwLjQ5MzgyNzE2MDQ5MzgyNzEzCisyOSxUdWUgMjIgRmViIDExLDAuNDkzODI3MTYwNDkzODI3MTMKKzMwLFdlZCAyMyBGZWIgMTEsMC40OTM4MjcxNjA0OTM4MjcxMworMzEsVGh1IDI0IEZlYiAxMSwwLjQ5MzgyNzE2MDQ5MzgyNzEzCiszMixGcmkgMjUgRmViIDExLDAuNDkzODI3MTYwNDkzODI3MTMKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvU2luZ2xlU3F1YXJlU0lfRkRfUmVmZXJlbmNlL2F1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwvaHVtYW4vSW5jaWRlbmNlXzAuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9TaW5nbGVTcXVhcmVTSV9GRF9SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9odW1hbi9JbmNpZGVuY2VfMC5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2ZlYjE2NgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvU2luZ2xlU3F1YXJlU0lfRkRfUmVmZXJlbmNlL2F1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwvaHVtYW4vSW5jaWRlbmNlXzAuY3N2CkBAIC0wLDAgKzEsMzMgQEAKK2l0ZXJhdGlvbix0aW1lLHN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL25vZGUvNTRENUVFQTNGNUNCRTMvTEFUX1NRUl8wXzAKKzEsVHVlIDI1IEphbiAxMSwwLjAKKzIsV2VkIDI2IEphbiAxMSwwLjAKKzMsVGh1IDI3IEphbiAxMSwwLjAKKzQsRnJpIDI4IEphbiAxMSwwLjAKKzUsU2F0IDI5IEphbiAxMSwwLjAKKzYsU3VuIDMwIEphbiAxMSwwLjAKKzcsTW9uIDMxIEphbiAxMSwwLjAKKzgsVHVlIDEgRmViIDExLDAuMAorOSxXZWQgMiBGZWIgMTEsMC4wCisxMCxUaHUgMyBGZWIgMTEsMC4wCisxMSxGcmkgNCBGZWIgMTEsMC4wCisxMixTYXQgNSBGZWIgMTEsMC4wCisxMyxTdW4gNiBGZWIgMTEsMC4wCisxNCxNb24gNyBGZWIgMTEsMC4wCisxNSxUdWUgOCBGZWIgMTEsMC4wCisxNixXZWQgOSBGZWIgMTEsMC4wCisxNyxUaHUgMTAgRmViIDExLDAuMAorMTgsRnJpIDExIEZlYiAxMSwwLjAKKzE5LFNhdCAxMiBGZWIgMTEsMC4wCisyMCxTdW4gMTMgRmViIDExLDAuMAorMjEsTW9uIDE0IEZlYiAxMSwwLjAKKzIyLFR1ZSAxNSBGZWIgMTEsMC4wCisyMyxXZWQgMTYgRmViIDExLDAuMAorMjQsVGh1IDE3IEZlYiAxMSwwLjAKKzI1LEZyaSAxOCBGZWIgMTEsMC4wCisyNixTYXQgMTkgRmViIDExLDAuMAorMjcsU3VuIDIwIEZlYiAxMSwwLjAKKzI4LE1vbiAyMSBGZWIgMTEsMC4wCisyOSxUdWUgMjIgRmViIDExLDAuMAorMzAsV2VkIDIzIEZlYiAxMSwwLjAKKzMxLFRodSAyNCBGZWIgMTEsMC4wCiszMixGcmkgMjUgRmViIDExLDAuMApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9TaW5nbGVTcXVhcmVTSV9GRF9SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9ydW5wYXJhbWV0ZXJzLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvU2luZ2xlU3F1YXJlU0lfRkRfUmVmZXJlbmNlL2F1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwvcnVucGFyYW1ldGVycy5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDY4NTViNQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvU2luZ2xlU3F1YXJlU0lfRkRfUmVmZXJlbmNlL2F1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwvcnVucGFyYW1ldGVycy5jc3YKQEAgLTAsMCArMSwyIEBACitwb3B1bGF0aW9uSWRlbnRpZmllcixuYW1lLHRhcmdldElTT0tleSxiaXJ0aFJhdGUsZGVhdGhSYXRlLHRpbWVQZXJpb2QKK2h1bWFuLGF1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwsLDAuMCwwLjAsODY0MDAwMDAKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1NpbmdsZVNxdWFyZVNJX1JLX1JlZmVyZW5jZS9UZXN0U0kvaHVtYW4vRGlzZWFzZSBEZWF0aHNfMC5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1NpbmdsZVNxdWFyZVNJX1JLX1JlZmVyZW5jZS9UZXN0U0kvaHVtYW4vRGlzZWFzZSBEZWF0aHNfMC5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2ZlYjE2NgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvU2luZ2xlU3F1YXJlU0lfUktfUmVmZXJlbmNlL1Rlc3RTSS9odW1hbi9EaXNlYXNlIERlYXRoc18wLmNzdgpAQCAtMCwwICsxLDMzIEBACitpdGVyYXRpb24sdGltZSxzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9ub2RlLzU0RDVFRUEzRjVDQkUzL0xBVF9TUVJfMF8wCisxLFR1ZSAyNSBKYW4gMTEsMC4wCisyLFdlZCAyNiBKYW4gMTEsMC4wCiszLFRodSAyNyBKYW4gMTEsMC4wCis0LEZyaSAyOCBKYW4gMTEsMC4wCis1LFNhdCAyOSBKYW4gMTEsMC4wCis2LFN1biAzMCBKYW4gMTEsMC4wCis3LE1vbiAzMSBKYW4gMTEsMC4wCis4LFR1ZSAxIEZlYiAxMSwwLjAKKzksV2VkIDIgRmViIDExLDAuMAorMTAsVGh1IDMgRmViIDExLDAuMAorMTEsRnJpIDQgRmViIDExLDAuMAorMTIsU2F0IDUgRmViIDExLDAuMAorMTMsU3VuIDYgRmViIDExLDAuMAorMTQsTW9uIDcgRmViIDExLDAuMAorMTUsVHVlIDggRmViIDExLDAuMAorMTYsV2VkIDkgRmViIDExLDAuMAorMTcsVGh1IDEwIEZlYiAxMSwwLjAKKzE4LEZyaSAxMSBGZWIgMTEsMC4wCisxOSxTYXQgMTIgRmViIDExLDAuMAorMjAsU3VuIDEzIEZlYiAxMSwwLjAKKzIxLE1vbiAxNCBGZWIgMTEsMC4wCisyMixUdWUgMTUgRmViIDExLDAuMAorMjMsV2VkIDE2IEZlYiAxMSwwLjAKKzI0LFRodSAxNyBGZWIgMTEsMC4wCisyNSxGcmkgMTggRmViIDExLDAuMAorMjYsU2F0IDE5IEZlYiAxMSwwLjAKKzI3LFN1biAyMCBGZWIgMTEsMC4wCisyOCxNb24gMjEgRmViIDExLDAuMAorMjksVHVlIDIyIEZlYiAxMSwwLjAKKzMwLFdlZCAyMyBGZWIgMTEsMC4wCiszMSxUaHUgMjQgRmViIDExLDAuMAorMzIsRnJpIDI1IEZlYiAxMSwwLjAKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvU2luZ2xlU3F1YXJlU0lfUktfUmVmZXJlbmNlL1Rlc3RTSS9odW1hbi9JXzAuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9TaW5nbGVTcXVhcmVTSV9SS19SZWZlcmVuY2UvVGVzdFNJL2h1bWFuL0lfMC5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODcxM2E3MAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvU2luZ2xlU3F1YXJlU0lfUktfUmVmZXJlbmNlL1Rlc3RTSS9odW1hbi9JXzAuY3N2CkBAIC0wLDAgKzEsMzMgQEAKK2l0ZXJhdGlvbix0aW1lLHN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL25vZGUvNTRENUVFQTNGNUNCRTMvTEFUX1NRUl8wXzAKKzEsVHVlIDI1IEphbiAxMSwxLjAKKzIsV2VkIDI2IEphbiAxMSwxLjQ5MTA5MTM0MTg4MzM4NAorMyxUaHUgMjcgSmFuIDExLDIuMjIyODE2Nzc0ODgzNDU0Cis0LEZyaSAyOCBKYW4gMTEsMy4zMTI0MzE2OTI0Njg1NjA0Cis1LFNhdCAyOSBKYW4gMTEsNC45MzM1MzAwMTczMTk1NjcKKzYsU3VuIDMwIEphbiAxMSw3LjM0MjE0NjcwNjM5MjIyOQorNyxNb24gMzEgSmFuIDExLDEwLjkxMzc4NTU3MzE5MDUyOQorOCxUdWUgMSBGZWIgMTEsMTYuMTk0NTI3OTkwMjc2OTk1Cis5LFdlZCAyIEZlYiAxMSwyMy45Njg0OTA5MzI2NDg3NgorMTAsVGh1IDMgRmViIDExLDM1LjM0MDE4NjE2NjExNTk0CisxMSxGcmkgNCBGZWIgMTEsNTEuODIwNjU4NTI5OTIxNDgKKzEyLFNhdCA1IEZlYiAxMSw3NS4zODU5OTk0MTM5MDU4CisxMyxTdW4gNiBGZWIgMTEsMTA4LjQ0MjAyMzc4NTE0NTU4CisxNCxNb24gNyBGZWIgMTEsMTUzLjU4NTEwOTYwMDI5MTYKKzE1LFR1ZSA4IEZlYiAxMSwyMTMuMDMwMzkzNDg5NDI0MjMKKzE2LFdlZCA5IEZlYiAxMSwyODcuNjY0MzY4MzUxNTkwNworMTcsVGh1IDEwIEZlYiAxMSwzNzUuOTU0NTg4NDAzMzIzNjcKKzE4LEZyaSAxMSBGZWIgMTEsNDczLjMzNjYyMjc4OTgzNjA0CisxOSxTYXQgMTIgRmViIDExLDU3Mi43OTA0MzAyMDI0MTU3CisyMCxTdW4gMTMgRmViIDExLDY2Ni42ODg0NTI3ODY1NzY1CisyMSxNb24gMTQgRmViIDExLDc0OC45OTIzMjQ4OTczNjcyCisyMixUdWUgMTUgRmViIDExLDgxNi41NjQ4NjI3MjA1MzM2CisyMyxXZWQgMTYgRmViIDExLDg2OS4xMjUxMDU4MTg0NTY5CisyNCxUaHUgMTcgRmViIDExLDkwOC4zMTYwNjM3ODQ4MzYyCisyNSxGcmkgMTggRmViIDExLDkzNi42MjY4ODEyMTg3OTY1CisyNixTYXQgMTkgRmViIDExLDk1Ni42MTMyNTU0OTU0NjgzCisyNyxTdW4gMjAgRmViIDExLDk3MC40OTQ5NjMwNTQ0OTI3CisyOCxNb24gMjEgRmViIDExLDk4MC4wMjc5MDkzNzQ3MDg4CisyOSxUdWUgMjIgRmViIDExLDk4Ni41MjM1NzMxMzY5OTc1CiszMCxXZWQgMjMgRmViIDExLDk5MC45MjYxNjY3MjE0MTkxCiszMSxUaHUgMjQgRmViIDExLDk5My44OTkzNzc4ODY5MTcxCiszMixGcmkgMjUgRmViIDExLDk5NS45MDIzODkzNzM5MzkzCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1NpbmdsZVNxdWFyZVNJX1JLX1JlZmVyZW5jZS9UZXN0U0kvaHVtYW4vSW5jaWRlbmNlXzAuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9TaW5nbGVTcXVhcmVTSV9SS19SZWZlcmVuY2UvVGVzdFNJL2h1bWFuL0luY2lkZW5jZV8wLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MjgxNzJlCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9TaW5nbGVTcXVhcmVTSV9SS19SZWZlcmVuY2UvVGVzdFNJL2h1bWFuL0luY2lkZW5jZV8wLmNzdgpAQCAtMCwwICsxLDMzIEBACitpdGVyYXRpb24sdGltZSxzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9ub2RlLzU0RDVFRUEzRjVDQkUzL0xBVF9TUVJfMF8wCisxLFR1ZSAyNSBKYW4gMTEsMC4wCisyLFdlZCAyNiBKYW4gMTEsMC40OTEwOTEzNDE4ODMzODQwNQorMyxUaHUgMjcgSmFuIDExLDAuNzMxNzI1NDMzMDAwMDY5OAorNCxGcmkgMjggSmFuIDExLDEuMDg5NjE0OTE3NTg1MTA2MgorNSxTYXQgMjkgSmFuIDExLDEuNjIxMDk4MzI0ODUxMDA2NQorNixTdW4gMzAgSmFuIDExLDIuNDA4NjE2Njg5MDcyNjYyNAorNyxNb24gMzEgSmFuIDExLDMuNTcxNjM4ODY2Nzk4Mjk3NworOCxUdWUgMSBGZWIgMTEsNS4yODA3NDI0MTcwODY0NjgKKzksV2VkIDIgRmViIDExLDcuNzczOTYyOTQyMzcxNzcxCisxMCxUaHUgMyBGZWIgMTEsMTEuMzcxNjk1MjMzNDY3MTgyCisxMSxGcmkgNCBGZWIgMTEsMTYuNDgwNDcyMzYzODA1NTQKKzEyLFNhdCA1IEZlYiAxMSwyMy41NjUzNDA4ODM5ODQzMgorMTMsU3VuIDYgRmViIDExLDMzLjA1NjAyNDM3MTIzOTc4CisxNCxNb24gNyBGZWIgMTEsNDUuMTQzMDg1ODE1MTQ2MDEKKzE1LFR1ZSA4IEZlYiAxMSw1OS40NDUyODM4ODkxMzI2NAorMTYsV2VkIDkgRmViIDExLDc0LjYzMzk3NDg2MjE2NjU0CisxNyxUaHUgMTAgRmViIDExLDg4LjI5MDIyMDA1MTczMjg5CisxOCxGcmkgMTEgRmViIDExLDk3LjM4MjAzNDM4NjUxMjM0CisxOSxTYXQgMTIgRmViIDExLDk5LjQ1MzgwNzQxMjU3OTYyCisyMCxTdW4gMTMgRmViIDExLDkzLjg5ODAyMjU4NDE2MDgxCisyMSxNb24gMTQgRmViIDExLDgyLjMwMzg3MjExMDc5MDc4CisyMixUdWUgMTUgRmViIDExLDY3LjU3MjUzNzgyMzE2NjM0CisyMyxXZWQgMTYgRmViIDExLDUyLjU2MDI0MzA5NzkyMzI5CisyNCxUaHUgMTcgRmViIDExLDM5LjE5MDk1Nzk2NjM3OTIxCisyNSxGcmkgMTggRmViIDExLDI4LjMxMDgxNzQzMzk2MDM5NQorMjYsU2F0IDE5IEZlYiAxMSwxOS45ODYzNzQyNzY2NzE3NjgKKzI3LFN1biAyMCBGZWIgMTEsMTMuODgxNzA3NTU5MDI0NDM4CisyOCxNb24gMjEgRmViIDExLDkuNTMyOTQ2MzIwMjE2MDEKKzI5LFR1ZSAyMiBGZWIgMTEsNi40OTU2NjM3NjIyODg3NDcKKzMwLFdlZCAyMyBGZWIgMTEsNC40MDI1OTM1ODQ0MjE2NTkKKzMxLFRodSAyNCBGZWIgMTEsMi45NzMyMTExNjU0OTc5OTk0CiszMixGcmkgMjUgRmViIDExLDIuMDAzMDExNDg3MDIyMTM3CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1NpbmdsZVNxdWFyZVNJX1JLX1JlZmVyZW5jZS9UZXN0U0kvaHVtYW4vUG9wdWxhdGlvbiBDb3VudF8wLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvU2luZ2xlU3F1YXJlU0lfUktfUmVmZXJlbmNlL1Rlc3RTSS9odW1hbi9Qb3B1bGF0aW9uIENvdW50XzAuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRlN2VjZjUKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1NpbmdsZVNxdWFyZVNJX1JLX1JlZmVyZW5jZS9UZXN0U0kvaHVtYW4vUG9wdWxhdGlvbiBDb3VudF8wLmNzdgpAQCAtMCwwICsxLDMzIEBACitpdGVyYXRpb24sdGltZSxzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9ub2RlLzU0RDVFRUEzRjVDQkUzL0xBVF9TUVJfMF8wCisxLFR1ZSAyNSBKYW4gMTEsMTAwMC4wCisyLFdlZCAyNiBKYW4gMTEsMTAwMC4wCiszLFRodSAyNyBKYW4gMTEsOTk5Ljk5OTk5OTk5OTk5OTkKKzQsRnJpIDI4IEphbiAxMSw5OTkuOTk5OTk5OTk5OTk5OQorNSxTYXQgMjkgSmFuIDExLDk5OS45OTk5OTk5OTk5OTk4Cis2LFN1biAzMCBKYW4gMTEsOTk5Ljk5OTk5OTk5OTk5OTkKKzcsTW9uIDMxIEphbiAxMSw5OTkuOTk5OTk5OTk5OTk5OQorOCxUdWUgMSBGZWIgMTEsMTAwMC4wCis5LFdlZCAyIEZlYiAxMSw5OTkuOTk5OTk5OTk5OTk5OAorMTAsVGh1IDMgRmViIDExLDk5OS45OTk5OTk5OTk5OTk4CisxMSxGcmkgNCBGZWIgMTEsOTk5Ljk5OTk5OTk5OTk5OTgKKzEyLFNhdCA1IEZlYiAxMSw5OTkuOTk5OTk5OTk5OTk5NQorMTMsU3VuIDYgRmViIDExLDk5OS45OTk5OTk5OTk5OTk3CisxNCxNb24gNyBGZWIgMTEsOTk5Ljk5OTk5OTk5OTk5OTcKKzE1LFR1ZSA4IEZlYiAxMSw5OTkuOTk5OTk5OTk5OTk5NQorMTYsV2VkIDkgRmViIDExLDk5OS45OTk5OTk5OTk5OTk1CisxNyxUaHUgMTAgRmViIDExLDk5OS45OTk5OTk5OTk5OTk3CisxOCxGcmkgMTEgRmViIDExLDk5OS45OTk5OTk5OTk5OTk1CisxOSxTYXQgMTIgRmViIDExLDk5OS45OTk5OTk5OTk5OTk1CisyMCxTdW4gMTMgRmViIDExLDk5OS45OTk5OTk5OTk5OTk1CisyMSxNb24gMTQgRmViIDExLDk5OS45OTk5OTk5OTk5OTk1CisyMixUdWUgMTUgRmViIDExLDk5OS45OTk5OTk5OTk5OTk1CisyMyxXZWQgMTYgRmViIDExLDk5OS45OTk5OTk5OTk5OTk1CisyNCxUaHUgMTcgRmViIDExLDk5OS45OTk5OTk5OTk5OTk3CisyNSxGcmkgMTggRmViIDExLDk5OS45OTk5OTk5OTk5OTk1CisyNixTYXQgMTkgRmViIDExLDk5OS45OTk5OTk5OTk5OTk1CisyNyxTdW4gMjAgRmViIDExLDk5OS45OTk5OTk5OTk5OTk1CisyOCxNb24gMjEgRmViIDExLDk5OS45OTk5OTk5OTk5OTk3CisyOSxUdWUgMjIgRmViIDExLDk5OS45OTk5OTk5OTk5OTk1CiszMCxXZWQgMjMgRmViIDExLDk5OS45OTk5OTk5OTk5OTk1CiszMSxUaHUgMjQgRmViIDExLDk5OS45OTk5OTk5OTk5OTk1CiszMixGcmkgMjUgRmViIDExLDk5OS45OTk5OTk5OTk5OTk1CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1NpbmdsZVNxdWFyZVNJX1JLX1JlZmVyZW5jZS9UZXN0U0kvaHVtYW4vU18wLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvU2luZ2xlU3F1YXJlU0lfUktfUmVmZXJlbmNlL1Rlc3RTSS9odW1hbi9TXzAuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE1NGQyNmMKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1NpbmdsZVNxdWFyZVNJX1JLX1JlZmVyZW5jZS9UZXN0U0kvaHVtYW4vU18wLmNzdgpAQCAtMCwwICsxLDMzIEBACitpdGVyYXRpb24sdGltZSxzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9ub2RlLzU0RDVFRUEzRjVDQkUzL0xBVF9TUVJfMF8wCisxLFR1ZSAyNSBKYW4gMTEsOTk5LjAKKzIsV2VkIDI2IEphbiAxMSw5OTguNTA4OTA4NjU4MTE2NgorMyxUaHUgMjcgSmFuIDExLDk5Ny43NzcxODMyMjUxMTY1Cis0LEZyaSAyOCBKYW4gMTEsOTk2LjY4NzU2ODMwNzUzMTQKKzUsU2F0IDI5IEphbiAxMSw5OTUuMDY2NDY5OTgyNjgwMgorNixTdW4gMzAgSmFuIDExLDk5Mi42NTc4NTMyOTM2MDc3Cis3LE1vbiAzMSBKYW4gMTEsOTg5LjA4NjIxNDQyNjgwOTMKKzgsVHVlIDEgRmViIDExLDk4My44MDU0NzIwMDk3MjMKKzksV2VkIDIgRmViIDExLDk3Ni4wMzE1MDkwNjczNTExCisxMCxUaHUgMyBGZWIgMTEsOTY0LjY1OTgxMzgzMzg4MzgKKzExLEZyaSA0IEZlYiAxMSw5NDguMTc5MzQxNDcwMDc4MworMTIsU2F0IDUgRmViIDExLDkyNC42MTQwMDA1ODYwOTM4CisxMyxTdW4gNiBGZWIgMTEsODkxLjU1Nzk3NjIxNDg1NDEKKzE0LE1vbiA3IEZlYiAxMSw4NDYuNDE0ODkwMzk5NzA4CisxNSxUdWUgOCBGZWIgMTEsNzg2Ljk2OTYwNjUxMDU3NTMKKzE2LFdlZCA5IEZlYiAxMSw3MTIuMzM1NjMxNjQ4NDA4OAorMTcsVGh1IDEwIEZlYiAxMSw2MjQuMDQ1NDExNTk2Njc2CisxOCxGcmkgMTEgRmViIDExLDUyNi42NjMzNzcyMTAxNjM1CisxOSxTYXQgMTIgRmViIDExLDQyNy4yMDk1Njk3OTc1ODM4NworMjAsU3VuIDEzIEZlYiAxMSwzMzMuMzExNTQ3MjEzNDIzMDcKKzIxLE1vbiAxNCBGZWIgMTEsMjUxLjAwNzY3NTEwMjYzMjMKKzIyLFR1ZSAxNSBGZWIgMTEsMTgzLjQzNTEzNzI3OTQ2NTk4CisyMyxXZWQgMTYgRmViIDExLDEzMC44NzQ4OTQxODE1NDI3CisyNCxUaHUgMTcgRmViIDExLDkxLjY4MzkzNjIxNTE2MzQ4CisyNSxGcmkgMTggRmViIDExLDYzLjM3MzExODc4MTIwMzA3CisyNixTYXQgMTkgRmViIDExLDQzLjM4Njc0NDUwNDUzMTMxCisyNyxTdW4gMjAgRmViIDExLDI5LjUwNTAzNjk0NTUwNjg2MworMjgsTW9uIDIxIEZlYiAxMSwxOS45NzIwOTA2MjUyOTA4NTMKKzI5LFR1ZSAyMiBGZWIgMTEsMTMuNDc2NDI2ODYzMDAyMTA3CiszMCxXZWQgMjMgRmViIDExLDkuMDczODMzMjc4NTgwNDQ4CiszMSxUaHUgMjQgRmViIDExLDYuMTAwNjIyMTEzMDgyNDQ3CiszMixGcmkgMjUgRmViIDExLDQuMDk3NjEwNjI2MDYwMzEKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvU2luZ2xlU3F1YXJlU0lfUktfUmVmZXJlbmNlL1Rlc3RTSS9ydW5wYXJhbWV0ZXJzLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvU2luZ2xlU3F1YXJlU0lfUktfUmVmZXJlbmNlL1Rlc3RTSS9ydW5wYXJhbWV0ZXJzLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MThjMDljCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9TaW5nbGVTcXVhcmVTSV9SS19SZWZlcmVuY2UvVGVzdFNJL3J1bnBhcmFtZXRlcnMuY3N2CkBAIC0wLDAgKzEsMiBAQAorZGlzZWFzZU5hbWUscG9wdWxhdGlvbklkZW50aWZpZXIsdGltZVBlcmlvZCxmcmVxdWVuY3lEZXBlbmRlbnQscmVmZXJlbmNlUG9wdWxhdGlvbkRlbnNpdHkscm9hZE5ldHdvcmtJbmZlY3Rpb3VzUHJvcG9ydGlvbixjaGFyYWN0ZXJpc3RpY01peGluZ0Rpc3RhbmNlLHRyYW5zbWlzc2lvblJhdGUsbm9uTGluZWFyaXR5Q29lZmZpY2llbnQscmVjb3ZlcnlSYXRlLGluZmVjdGlvdXNNb3J0YWxpdHlSYXRlCitUZXN0U0ksaHVtYW4sODY0MDAwMDAsdHJ1ZSwxMDAuMCwwLjAxLDIuMjUsMC40LDEuMCwwLjAsMC4wClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9TaW5nbGVTcXVhcmVTSV9SS19SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9odW1hbi9CaXJ0aHNfMC5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1NpbmdsZVNxdWFyZVNJX1JLX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL2h1bWFuL0JpcnRoc18wLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZmViMTY2Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9TaW5nbGVTcXVhcmVTSV9SS19SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9odW1hbi9CaXJ0aHNfMC5jc3YKQEAgLTAsMCArMSwzMyBAQAoraXRlcmF0aW9uLHRpbWUsc3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vbm9kZS81NEQ1RUVBM0Y1Q0JFMy9MQVRfU1FSXzBfMAorMSxUdWUgMjUgSmFuIDExLDAuMAorMixXZWQgMjYgSmFuIDExLDAuMAorMyxUaHUgMjcgSmFuIDExLDAuMAorNCxGcmkgMjggSmFuIDExLDAuMAorNSxTYXQgMjkgSmFuIDExLDAuMAorNixTdW4gMzAgSmFuIDExLDAuMAorNyxNb24gMzEgSmFuIDExLDAuMAorOCxUdWUgMSBGZWIgMTEsMC4wCis5LFdlZCAyIEZlYiAxMSwwLjAKKzEwLFRodSAzIEZlYiAxMSwwLjAKKzExLEZyaSA0IEZlYiAxMSwwLjAKKzEyLFNhdCA1IEZlYiAxMSwwLjAKKzEzLFN1biA2IEZlYiAxMSwwLjAKKzE0LE1vbiA3IEZlYiAxMSwwLjAKKzE1LFR1ZSA4IEZlYiAxMSwwLjAKKzE2LFdlZCA5IEZlYiAxMSwwLjAKKzE3LFRodSAxMCBGZWIgMTEsMC4wCisxOCxGcmkgMTEgRmViIDExLDAuMAorMTksU2F0IDEyIEZlYiAxMSwwLjAKKzIwLFN1biAxMyBGZWIgMTEsMC4wCisyMSxNb24gMTQgRmViIDExLDAuMAorMjIsVHVlIDE1IEZlYiAxMSwwLjAKKzIzLFdlZCAxNiBGZWIgMTEsMC4wCisyNCxUaHUgMTcgRmViIDExLDAuMAorMjUsRnJpIDE4IEZlYiAxMSwwLjAKKzI2LFNhdCAxOSBGZWIgMTEsMC4wCisyNyxTdW4gMjAgRmViIDExLDAuMAorMjgsTW9uIDIxIEZlYiAxMSwwLjAKKzI5LFR1ZSAyMiBGZWIgMTEsMC4wCiszMCxXZWQgMjMgRmViIDExLDAuMAorMzEsVGh1IDI0IEZlYiAxMSwwLjAKKzMyLEZyaSAyNSBGZWIgMTEsMC4wCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1NpbmdsZVNxdWFyZVNJX1JLX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL2h1bWFuL0NvdW50XzAuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9TaW5nbGVTcXVhcmVTSV9SS19SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9odW1hbi9Db3VudF8wLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YTJhNzE2Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9TaW5nbGVTcXVhcmVTSV9SS19SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9odW1hbi9Db3VudF8wLmNzdgpAQCAtMCwwICsxLDMzIEBACitpdGVyYXRpb24sdGltZSxzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9ub2RlLzU0RDVFRUEzRjVDQkUzL0xBVF9TUVJfMF8wCisxLFR1ZSAyNSBKYW4gMTEsMTAwMC4wCisyLFdlZCAyNiBKYW4gMTEsMTAwMC4wCiszLFRodSAyNyBKYW4gMTEsMTAwMC4wCis0LEZyaSAyOCBKYW4gMTEsMTAwMC4wCis1LFNhdCAyOSBKYW4gMTEsMTAwMC4wCis2LFN1biAzMCBKYW4gMTEsMTAwMC4wCis3LE1vbiAzMSBKYW4gMTEsMTAwMC4wCis4LFR1ZSAxIEZlYiAxMSwxMDAwLjAKKzksV2VkIDIgRmViIDExLDEwMDAuMAorMTAsVGh1IDMgRmViIDExLDEwMDAuMAorMTEsRnJpIDQgRmViIDExLDEwMDAuMAorMTIsU2F0IDUgRmViIDExLDEwMDAuMAorMTMsU3VuIDYgRmViIDExLDEwMDAuMAorMTQsTW9uIDcgRmViIDExLDEwMDAuMAorMTUsVHVlIDggRmViIDExLDEwMDAuMAorMTYsV2VkIDkgRmViIDExLDEwMDAuMAorMTcsVGh1IDEwIEZlYiAxMSwxMDAwLjAKKzE4LEZyaSAxMSBGZWIgMTEsMTAwMC4wCisxOSxTYXQgMTIgRmViIDExLDEwMDAuMAorMjAsU3VuIDEzIEZlYiAxMSwxMDAwLjAKKzIxLE1vbiAxNCBGZWIgMTEsMTAwMC4wCisyMixUdWUgMTUgRmViIDExLDEwMDAuMAorMjMsV2VkIDE2IEZlYiAxMSwxMDAwLjAKKzI0LFRodSAxNyBGZWIgMTEsMTAwMC4wCisyNSxGcmkgMTggRmViIDExLDEwMDAuMAorMjYsU2F0IDE5IEZlYiAxMSwxMDAwLjAKKzI3LFN1biAyMCBGZWIgMTEsMTAwMC4wCisyOCxNb24gMjEgRmViIDExLDEwMDAuMAorMjksVHVlIDIyIEZlYiAxMSwxMDAwLjAKKzMwLFdlZCAyMyBGZWIgMTEsMTAwMC4wCiszMSxUaHUgMjQgRmViIDExLDEwMDAuMAorMzIsRnJpIDI1IEZlYiAxMSwxMDAwLjAKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvU2luZ2xlU3F1YXJlU0lfUktfUmVmZXJlbmNlL2F1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwvaHVtYW4vRGVhdGhzXzAuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9TaW5nbGVTcXVhcmVTSV9SS19SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9odW1hbi9EZWF0aHNfMC5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2ZlYjE2NgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvU2luZ2xlU3F1YXJlU0lfUktfUmVmZXJlbmNlL2F1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwvaHVtYW4vRGVhdGhzXzAuY3N2CkBAIC0wLDAgKzEsMzMgQEAKK2l0ZXJhdGlvbix0aW1lLHN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL25vZGUvNTRENUVFQTNGNUNCRTMvTEFUX1NRUl8wXzAKKzEsVHVlIDI1IEphbiAxMSwwLjAKKzIsV2VkIDI2IEphbiAxMSwwLjAKKzMsVGh1IDI3IEphbiAxMSwwLjAKKzQsRnJpIDI4IEphbiAxMSwwLjAKKzUsU2F0IDI5IEphbiAxMSwwLjAKKzYsU3VuIDMwIEphbiAxMSwwLjAKKzcsTW9uIDMxIEphbiAxMSwwLjAKKzgsVHVlIDEgRmViIDExLDAuMAorOSxXZWQgMiBGZWIgMTEsMC4wCisxMCxUaHUgMyBGZWIgMTEsMC4wCisxMSxGcmkgNCBGZWIgMTEsMC4wCisxMixTYXQgNSBGZWIgMTEsMC4wCisxMyxTdW4gNiBGZWIgMTEsMC4wCisxNCxNb24gNyBGZWIgMTEsMC4wCisxNSxUdWUgOCBGZWIgMTEsMC4wCisxNixXZWQgOSBGZWIgMTEsMC4wCisxNyxUaHUgMTAgRmViIDExLDAuMAorMTgsRnJpIDExIEZlYiAxMSwwLjAKKzE5LFNhdCAxMiBGZWIgMTEsMC4wCisyMCxTdW4gMTMgRmViIDExLDAuMAorMjEsTW9uIDE0IEZlYiAxMSwwLjAKKzIyLFR1ZSAxNSBGZWIgMTEsMC4wCisyMyxXZWQgMTYgRmViIDExLDAuMAorMjQsVGh1IDE3IEZlYiAxMSwwLjAKKzI1LEZyaSAxOCBGZWIgMTEsMC4wCisyNixTYXQgMTkgRmViIDExLDAuMAorMjcsU3VuIDIwIEZlYiAxMSwwLjAKKzI4LE1vbiAyMSBGZWIgMTEsMC4wCisyOSxUdWUgMjIgRmViIDExLDAuMAorMzAsV2VkIDIzIEZlYiAxMSwwLjAKKzMxLFRodSAyNCBGZWIgMTEsMC4wCiszMixGcmkgMjUgRmViIDExLDAuMApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9TaW5nbGVTcXVhcmVTSV9SS19SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9odW1hbi9EZW5zaXR5XzAuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9TaW5nbGVTcXVhcmVTSV9SS19SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9odW1hbi9EZW5zaXR5XzAuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU5NzE1MmEKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1NpbmdsZVNxdWFyZVNJX1JLX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL2h1bWFuL0RlbnNpdHlfMC5jc3YKQEAgLTAsMCArMSwzMyBAQAoraXRlcmF0aW9uLHRpbWUsc3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vbm9kZS81NEQ1RUVBM0Y1Q0JFMy9MQVRfU1FSXzBfMAorMSxUdWUgMjUgSmFuIDExLDAuNDkzODI3MTYwNDkzODI3MTMKKzIsV2VkIDI2IEphbiAxMSwwLjQ5MzgyNzE2MDQ5MzgyNzEzCiszLFRodSAyNyBKYW4gMTEsMC40OTM4MjcxNjA0OTM4MjcxMworNCxGcmkgMjggSmFuIDExLDAuNDkzODI3MTYwNDkzODI3MTMKKzUsU2F0IDI5IEphbiAxMSwwLjQ5MzgyNzE2MDQ5MzgyNzEzCis2LFN1biAzMCBKYW4gMTEsMC40OTM4MjcxNjA0OTM4MjcxMworNyxNb24gMzEgSmFuIDExLDAuNDkzODI3MTYwNDkzODI3MTMKKzgsVHVlIDEgRmViIDExLDAuNDkzODI3MTYwNDkzODI3MTMKKzksV2VkIDIgRmViIDExLDAuNDkzODI3MTYwNDkzODI3MTMKKzEwLFRodSAzIEZlYiAxMSwwLjQ5MzgyNzE2MDQ5MzgyNzEzCisxMSxGcmkgNCBGZWIgMTEsMC40OTM4MjcxNjA0OTM4MjcxMworMTIsU2F0IDUgRmViIDExLDAuNDkzODI3MTYwNDkzODI3MTMKKzEzLFN1biA2IEZlYiAxMSwwLjQ5MzgyNzE2MDQ5MzgyNzEzCisxNCxNb24gNyBGZWIgMTEsMC40OTM4MjcxNjA0OTM4MjcxMworMTUsVHVlIDggRmViIDExLDAuNDkzODI3MTYwNDkzODI3MTMKKzE2LFdlZCA5IEZlYiAxMSwwLjQ5MzgyNzE2MDQ5MzgyNzEzCisxNyxUaHUgMTAgRmViIDExLDAuNDkzODI3MTYwNDkzODI3MTMKKzE4LEZyaSAxMSBGZWIgMTEsMC40OTM4MjcxNjA0OTM4MjcxMworMTksU2F0IDEyIEZlYiAxMSwwLjQ5MzgyNzE2MDQ5MzgyNzEzCisyMCxTdW4gMTMgRmViIDExLDAuNDkzODI3MTYwNDkzODI3MTMKKzIxLE1vbiAxNCBGZWIgMTEsMC40OTM4MjcxNjA0OTM4MjcxMworMjIsVHVlIDE1IEZlYiAxMSwwLjQ5MzgyNzE2MDQ5MzgyNzEzCisyMyxXZWQgMTYgRmViIDExLDAuNDkzODI3MTYwNDkzODI3MTMKKzI0LFRodSAxNyBGZWIgMTEsMC40OTM4MjcxNjA0OTM4MjcxMworMjUsRnJpIDE4IEZlYiAxMSwwLjQ5MzgyNzE2MDQ5MzgyNzEzCisyNixTYXQgMTkgRmViIDExLDAuNDkzODI3MTYwNDkzODI3MTMKKzI3LFN1biAyMCBGZWIgMTEsMC40OTM4MjcxNjA0OTM4MjcxMworMjgsTW9uIDIxIEZlYiAxMSwwLjQ5MzgyNzE2MDQ5MzgyNzEzCisyOSxUdWUgMjIgRmViIDExLDAuNDkzODI3MTYwNDkzODI3MTMKKzMwLFdlZCAyMyBGZWIgMTEsMC40OTM4MjcxNjA0OTM4MjcxMworMzEsVGh1IDI0IEZlYiAxMSwwLjQ5MzgyNzE2MDQ5MzgyNzEzCiszMixGcmkgMjUgRmViIDExLDAuNDkzODI3MTYwNDkzODI3MTMKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvU2luZ2xlU3F1YXJlU0lfUktfUmVmZXJlbmNlL2F1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwvaHVtYW4vSW5jaWRlbmNlXzAuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9TaW5nbGVTcXVhcmVTSV9SS19SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9odW1hbi9JbmNpZGVuY2VfMC5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2ZlYjE2NgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvU2luZ2xlU3F1YXJlU0lfUktfUmVmZXJlbmNlL2F1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwvaHVtYW4vSW5jaWRlbmNlXzAuY3N2CkBAIC0wLDAgKzEsMzMgQEAKK2l0ZXJhdGlvbix0aW1lLHN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL25vZGUvNTRENUVFQTNGNUNCRTMvTEFUX1NRUl8wXzAKKzEsVHVlIDI1IEphbiAxMSwwLjAKKzIsV2VkIDI2IEphbiAxMSwwLjAKKzMsVGh1IDI3IEphbiAxMSwwLjAKKzQsRnJpIDI4IEphbiAxMSwwLjAKKzUsU2F0IDI5IEphbiAxMSwwLjAKKzYsU3VuIDMwIEphbiAxMSwwLjAKKzcsTW9uIDMxIEphbiAxMSwwLjAKKzgsVHVlIDEgRmViIDExLDAuMAorOSxXZWQgMiBGZWIgMTEsMC4wCisxMCxUaHUgMyBGZWIgMTEsMC4wCisxMSxGcmkgNCBGZWIgMTEsMC4wCisxMixTYXQgNSBGZWIgMTEsMC4wCisxMyxTdW4gNiBGZWIgMTEsMC4wCisxNCxNb24gNyBGZWIgMTEsMC4wCisxNSxUdWUgOCBGZWIgMTEsMC4wCisxNixXZWQgOSBGZWIgMTEsMC4wCisxNyxUaHUgMTAgRmViIDExLDAuMAorMTgsRnJpIDExIEZlYiAxMSwwLjAKKzE5LFNhdCAxMiBGZWIgMTEsMC4wCisyMCxTdW4gMTMgRmViIDExLDAuMAorMjEsTW9uIDE0IEZlYiAxMSwwLjAKKzIyLFR1ZSAxNSBGZWIgMTEsMC4wCisyMyxXZWQgMTYgRmViIDExLDAuMAorMjQsVGh1IDE3IEZlYiAxMSwwLjAKKzI1LEZyaSAxOCBGZWIgMTEsMC4wCisyNixTYXQgMTkgRmViIDExLDAuMAorMjcsU3VuIDIwIEZlYiAxMSwwLjAKKzI4LE1vbiAyMSBGZWIgMTEsMC4wCisyOSxUdWUgMjIgRmViIDExLDAuMAorMzAsV2VkIDIzIEZlYiAxMSwwLjAKKzMxLFRodSAyNCBGZWIgMTEsMC4wCiszMixGcmkgMjUgRmViIDExLDAuMApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9TaW5nbGVTcXVhcmVTSV9SS19SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9ydW5wYXJhbWV0ZXJzLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvU2luZ2xlU3F1YXJlU0lfUktfUmVmZXJlbmNlL2F1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwvcnVucGFyYW1ldGVycy5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDY4NTViNQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvU2luZ2xlU3F1YXJlU0lfUktfUmVmZXJlbmNlL2F1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwvcnVucGFyYW1ldGVycy5jc3YKQEAgLTAsMCArMSwyIEBACitwb3B1bGF0aW9uSWRlbnRpZmllcixuYW1lLHRhcmdldElTT0tleSxiaXJ0aFJhdGUsZGVhdGhSYXRlLHRpbWVQZXJpb2QKK2h1bWFuLGF1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwsLDAuMCwwLjAsODY0MDAwMDAKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1R3b1NxdWFyZXNNaXhpbmdNaWdyYXRpb25TRUlSX0ZEX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9EaXNlYXNlIERlYXRoc18wLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvVHdvU3F1YXJlc01peGluZ01pZ3JhdGlvblNFSVJfRkRfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL0Rpc2Vhc2UgRGVhdGhzXzAuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgzMDdjYTQKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1R3b1NxdWFyZXNNaXhpbmdNaWdyYXRpb25TRUlSX0ZEX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9EaXNlYXNlIERlYXRoc18wLmNzdgpAQCAtMCwwICsxLDMzIEBACitpdGVyYXRpb24sdGltZSxzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9ub2RlLzQ0OTUzNjVBMDIzMjhCMTYvTEFUX1NRUl8wXzAsc3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vbm9kZS80NDk1MzY1QTAyMzI4QjE2L0xBVF9TUVJfMV8wCisxLFR1ZSAyNSBKYW4gMTEsMC4wLDAuMAorMixXZWQgMjYgSmFuIDExLDAuMCwwLjAKKzMsVGh1IDI3IEphbiAxMSwwLjAsMC4wCis0LEZyaSAyOCBKYW4gMTEsMC4wLDAuMAorNSxTYXQgMjkgSmFuIDExLDAuMCwwLjAKKzYsU3VuIDMwIEphbiAxMSwwLjAsMC4wCis3LE1vbiAzMSBKYW4gMTEsMC4wLDAuMAorOCxUdWUgMSBGZWIgMTEsMC4wLDAuMAorOSxXZWQgMiBGZWIgMTEsMC4wLDAuMAorMTAsVGh1IDMgRmViIDExLDAuMCwwLjAKKzExLEZyaSA0IEZlYiAxMSwwLjAsMC4wCisxMixTYXQgNSBGZWIgMTEsMC4wLDAuMAorMTMsU3VuIDYgRmViIDExLDAuMCwwLjAKKzE0LE1vbiA3IEZlYiAxMSwwLjAsMC4wCisxNSxUdWUgOCBGZWIgMTEsMC4wLDAuMAorMTYsV2VkIDkgRmViIDExLDAuMCwwLjAKKzE3LFRodSAxMCBGZWIgMTEsMC4wLDAuMAorMTgsRnJpIDExIEZlYiAxMSwwLjAsMC4wCisxOSxTYXQgMTIgRmViIDExLDAuMCwwLjAKKzIwLFN1biAxMyBGZWIgMTEsMC4wLDAuMAorMjEsTW9uIDE0IEZlYiAxMSwwLjAsMC4wCisyMixUdWUgMTUgRmViIDExLDAuMCwwLjAKKzIzLFdlZCAxNiBGZWIgMTEsMC4wLDAuMAorMjQsVGh1IDE3IEZlYiAxMSwwLjAsMC4wCisyNSxGcmkgMTggRmViIDExLDAuMCwwLjAKKzI2LFNhdCAxOSBGZWIgMTEsMC4wLDAuMAorMjcsU3VuIDIwIEZlYiAxMSwwLjAsMC4wCisyOCxNb24gMjEgRmViIDExLDAuMCwwLjAKKzI5LFR1ZSAyMiBGZWIgMTEsMC4wLDAuMAorMzAsV2VkIDIzIEZlYiAxMSwwLjAsMC4wCiszMSxUaHUgMjQgRmViIDExLDAuMCwwLjAKKzMyLEZyaSAyNSBGZWIgMTEsMC4wLDAuMApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Ud29TcXVhcmVzTWl4aW5nTWlncmF0aW9uU0VJUl9GRF9SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vRV8wLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvVHdvU3F1YXJlc01peGluZ01pZ3JhdGlvblNFSVJfRkRfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL0VfMC5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmZmYWQ1NQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvVHdvU3F1YXJlc01peGluZ01pZ3JhdGlvblNFSVJfRkRfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL0VfMC5jc3YKQEAgLTAsMCArMSwzMyBAQAoraXRlcmF0aW9uLHRpbWUsc3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vbm9kZS80NDk1MzY1QTAyMzI4QjE2L0xBVF9TUVJfMF8wLHN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL25vZGUvNDQ5NTM2NUEwMjMyOEIxNi9MQVRfU1FSXzFfMAorMSxUdWUgMjUgSmFuIDExLDAuMCwwLjAKKzIsV2VkIDI2IEphbiAxMSwwLjA3NjE5MDQ3NjE5MDQ3NjIsMS41MjIyODU3MTQyODU3MTQ1CiszLFRodSAyNyBKYW4gMTEsMC4zODgzODQxNDUxMjQ3MTY2LDEuNjg4NDMzNTQ5OTMxOTcyNworNCxGcmkgMjggSmFuIDExLDAuNjY2NzM0NDQzMDExNjk3MiwyLjM4MTUxMzEzMTY5MDg4NTcKKzUsU2F0IDI5IEphbiAxMSwxLjE5MTYzMTIyNTQzMzc0NTEsMy4yMjIwNzAxMDMzMTI2MTQ1Cis2LFN1biAzMCBKYW4gMTEsMS45NjQ2MTc2MjUyOTkzOTkyLDQuNDMxODExOTM2NTc1MzkzCis3LE1vbiAzMSBKYW4gMTEsMy4xNDQ5ODY4NjUzNzM4ODI2LDYuMTE3MTgxODY0MDU4ODExCis4LFR1ZSAxIEZlYiAxMSw0LjkwOTk5MDY1MzMzODgzMSw4LjQ4ODYwNjQyNDk0NjQwMgorOSxXZWQgMiBGZWIgMTEsNy41MzEwOTM5NDM3NjgyNjY1LDExLjgyMzE5ODE3MDI0MjM1CisxMCxUaHUgMyBGZWIgMTEsMTEuMzg3OTMxOTY5Njk4MzM2LDE2LjUxMDkxNDE2NTE3OTk4MworMTEsRnJpIDQgRmViIDExLDE3LjAxMTgyNDEzMzc2NTI2LDIzLjA4MjI5MTEwNTU4NjYKKzEyLFNhdCA1IEZlYiAxMSwyNS4xMjU1NzU2MDk4ODA3MTMsMzIuMjQzMjc1NTIzOTk0MjQKKzEzLFN1biA2IEZlYiAxMSwzNi42NzY1NjIzMjM0MDExOCw0NC44OTQwNTI5MDgxMDkyMQorMTQsTW9uIDcgRmViIDExLDUyLjgzMDk2OTI4NzIyODMzLDYyLjEwNDU3ODM4NjkwNTkzNQorMTUsVHVlIDggRmViIDExLDc0Ljg3MDcwMzQ3NjY3NjM4LDg0Ljk4ODI1NDA5ODM5ODU4CisxNixXZWQgOSBGZWIgMTEsMTAzLjg4OTgwMzUxMTkwMjI2LDExNC4zODAxOTYyODQ5MzQ3OAorMTcsVGh1IDEwIEZlYiAxMSwxNDAuMTUwNDEwODAxNzcwNjUsMTUwLjIwNDE0NDYyNjgwNjQ4CisxOCxGcmkgMTEgRmViIDExLDE4Mi4wMDE2MTYzMjI1OTM3MiwxOTAuNDc2MDc0ODg4MTI2NzMKKzE5LFNhdCAxMiBGZWIgMTEsMjI0LjU1MjQyNjEwMTg1NzA0LDIzMC4xODMyMjQ2MDk0NDcwOAorMjAsU3VuIDEzIEZlYiAxMSwyNTguOTk3NDMzMTU1OTkyNDQsMjYwLjkwNzIyMzk0MDcxMTk2CisyMSxNb24gMTQgRmViIDExLDI3NC4zNDE2NTMyMjIyMjE5LDI3Mi42OTQ1NjMzNzk1NjUyNAorMjIsVHVlIDE1IEZlYiAxMSwyNjIuNzM5NTMzMDM3MTIsMjU4Ljk3MzIxNTYwNTg2NDcKKzIzLFdlZCAxNiBGZWIgMTEsMjI1Ljg1NjA1ODc5OTkyMjcsMjIxLjkzODM5MzU1MjAxNDEzCisyNCxUaHUgMTcgRmViIDExLDE3NS40NjI0MTczNzEwMDQwNSwxNzIuNjU4NTQ0NzA0MDE5MgorMjUsRnJpIDE4IEZlYiAxMSwxMjUuNzQ0OTk2ODkwMDM0MjksMTI0LjE5MjAxMDcwMTYxNTc3CisyNixTYXQgMTkgRmViIDExLDg1LjI4MTkyOTU3MzUxODc3LDg0LjU1NjkxMDc5NDkzMTU4CisyNyxTdW4gMjAgRmViIDExLDU1LjkyNTYwMzM4NDk3Mzg2LDU1LjYyMTY2MTc3NjA2Mjg4NgorMjgsTW9uIDIxIEZlYiAxMSwzNS45NzQ5MTM4NTIxODM2NywzNS44NTY0NTY5MzgyNjI4NQorMjksVHVlIDIyIEZlYiAxMSwyMi44OTkxMjc2ODMxMDQzNjQsMjIuODU1ODUyNzg3MDg3Nzg0CiszMCxXZWQgMjMgRmViIDExLDE0LjQ5OTY2OTQ1MTQ0ODQyNiwxNC40ODUxMzM4NTIwODMzMDgKKzMxLFRodSAyNCBGZWIgMTEsOS4xNjM2MTg3MjExMzg5MjgsOS4xNTk0NTAzNTQyNzkwMDIKKzMyLEZyaSAyNSBGZWIgMTEsNS43OTMzODkyNzgyNDQ3ODcsNS43OTI2NjQxMzA0NDk3MDcKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvVHdvU3F1YXJlc01peGluZ01pZ3JhdGlvblNFSVJfRkRfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL0lfMC5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1R3b1NxdWFyZXNNaXhpbmdNaWdyYXRpb25TRUlSX0ZEX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9JXzAuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY2YjM5MTAKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1R3b1NxdWFyZXNNaXhpbmdNaWdyYXRpb25TRUlSX0ZEX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9JXzAuY3N2CkBAIC0wLDAgKzEsMzMgQEAKK2l0ZXJhdGlvbix0aW1lLHN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL25vZGUvNDQ5NTM2NUEwMjMyOEIxNi9MQVRfU1FSXzBfMCxzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9ub2RlLzQ0OTUzNjVBMDIzMjhCMTYvTEFUX1NRUl8xXzAKKzEsVHVlIDI1IEphbiAxMSwwLjAsMS4wCisyLFdlZCAyNiBKYW4gMTEsMC4xLDAuNgorMyxUaHUgMjcgSmFuIDExLDAuMTUwNDc2MTkwNDc2MTkwNDksMC45Nzg5MTQyODU3MTQyODU4Cis0LEZyaSAyOCBKYW4gMTEsMC4zNDM1MzA4MDA5MDcwMjk1LDEuMjc3NzY5NjEwNDQ4OTc5NworNSxTYXQgMjkgSmFuIDExLDAuNjAwNTg5MjE4NzkzNzk0NiwxLjc1MzYyMDA5OTAzNjQ0NQorNixTdW4gMzAgSmFuIDExLDEuMDEyMzY4MDMxMzUzNDE5NCwyLjQwMTA1OTAyMjYyNjI5MjQKKzcsTW9uIDMxIEphbiAxMSwxLjYzMzM3Mzc3MTE5NDQ0MDcsMy4zMTQ1OTY5OTEzNDEyNzQ3Cis4LFR1ZSAxIEZlYiAxMSwyLjU2OTQ3ODcwODAwMDM0NSw0LjU5ODk2ODMxNzU0NzczMworOSxXZWQgMiBGZWIgMTEsMy45NjU1ODAzMTc4OTA1MTMsNi40MTE3NzE0MzEzMDcyMzYKKzEwLFRodSAzIEZlYiAxMSw2LjAzMjk2MjkxMTM3MjMzOCw4Ljk3MjkwMDE1ODY3MDMzMworMTEsRnJpIDQgRmViIDExLDkuMDcyMjQwNTUwNTY5NzcyLDEyLjU5MTQwMjA1MjQxMTQyNworMTIsU2F0IDUgRmViIDExLDEzLjUwNzIxNDE4OTA4OTExMiwxNy42OTQ5ODE3Mjg3Mzg0NzMKKzEzLFN1biA2IEZlYiAxMSwxOS45MjQwNTY5MzAyNzk1OTgsMjQuODY1MDIwNjY1NzQ5NjkzCisxNCxNb24gNyBGZWIgMTEsMjkuMTExNTYxMTU0MTAzMiwzNC44NjkwMzkyNTU3MjE0NgorMTUsVHVlIDggRmViIDExLDQyLjA4NjIyODMzMjkyNTQsNDguNjc0NDExMDIzNjA1NTcKKzE2LFdlZCA5IEZlYiAxMSw2MC4wNjc0NTk0OTI3ODYzNTUsNjcuNDA4NTcxMDg2ODE1MzEKKzE3LFRodSAxMCBGZWIgMTEsODQuMzM3MjU0MjA5MTE0MjYsOTIuMjAzOTY3MTE1MzQxNzQKKzE4LEZyaSAxMSBGZWIgMTEsMTE1Ljg4MjkxMzU1NzcxMDk5LDEyMy44Mzc3NjM1NDA4MzkwNgorMTksU2F0IDEyIEZlYiAxMSwxNTQuNzE0MTcxMDE3NzQ4MDEsMTYyLjA4MTM3OTQzNTUyNTI0CisyMCxTdW4gMTMgRmViIDExLDE5OC44NTc2MTA5OTQ5NDQxNCwyMDQuNzkzNTM0NjA2ODY4NzcKKzIxLE1vbiAxNCBGZWIgMTEsMjQzLjM5Mjg5MzMyMDA1MDM1LDI0Ny4xMjQ3NzE0Mzk5MDA0OAorMjIsVHVlIDE1IEZlYiAxMSwyODAuNDg0ODc0NDI0OTA5MDQsMjgxLjY5MTk3NzU0Nzc3MTQ0CisyMyxXZWQgMTYgRmViIDExLDMwMS41NTU5MzU2MjQ1NzA1NywzMDAuNjUyOTYwMjEzNDk5NworMjQsVGh1IDE3IEZlYiAxMSwzMDEuMzQxMjgwOTE2MDYxNCwyOTkuMzIyNzI3MTExMzYyNTUKKzI1LEZyaSAxOCBGZWIgMTEsMjgwLjkyMjAwODIwOTE3NDc1LDI3OC43OTExODIyNDAwMzEzMworMjYsU2F0IDE5IEZlYiAxMSwyNDYuNzMwMzIxOTA1NTIxNywyNDUuMDQzNzE0NDQ1NTgyNgorMjcsU3VuIDIwIEZlYiAxMSwyMDYuNjU1MzM2NDE3Mjc4OCwyMDUuNTIyMDI1MTc1ODc0MzgKKzI4LE1vbiAyMSBGZWIgMTEsMTY2LjkxNTY0NTcyMTk0NDI2LDE2Ni4yMjc0MTM0NTc2Nzc2NworMjksVHVlIDIyIEZlYiAxMSwxMzEuMTYyMDk0MzE5ODA3OCwxMzAuNzcwNTk1NDIyMTA2MTcKKzMwLFdlZCAyMyBGZWIgMTEsMTAwLjkzMzk2NzIwNzMzNzA1LDEwMC43MjA5MDc4MDAwNzk2CiszMSxUaHUgMjQgRmViIDExLDc2LjQzMjMzODg4NDk4OTU2LDc2LjMxOTk5NDk0MTYxNDgKKzMyLEZyaSAyNSBGZWIgMTEsNTcuMTU2ODUwMzEzNjEwNzksNTcuMDk5MDEwOTk1MTc5NDM0CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1R3b1NxdWFyZXNNaXhpbmdNaWdyYXRpb25TRUlSX0ZEX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9JbmNpZGVuY2VfMC5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1R3b1NxdWFyZXNNaXhpbmdNaWdyYXRpb25TRUlSX0ZEX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9JbmNpZGVuY2VfMC5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTExOGM1ZQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvVHdvU3F1YXJlc01peGluZ01pZ3JhdGlvblNFSVJfRkRfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL0luY2lkZW5jZV8wLmNzdgpAQCAtMCwwICsxLDMzIEBACitpdGVyYXRpb24sdGltZSxzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9ub2RlLzQ0OTUzNjVBMDIzMjhCMTYvTEFUX1NRUl8wXzAsc3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vbm9kZS80NDk1MzY1QTAyMzI4QjE2L0xBVF9TUVJfMV8wCisxLFR1ZSAyNSBKYW4gMTEsMC4wLDAuMAorMixXZWQgMjYgSmFuIDExLDAuMDc2MTkwNDc2MTkwNDc2MiwxLjUyMjI4NTcxNDI4NTcxNDUKKzMsVGh1IDI3IEphbiAxMSwwLjE5ODA2MDMzNTYwMDkwNzA1LDAuOTE5NjcxNjQ1MTcwMDY3OQorNCxGcmkgMjggSmFuIDExLDAuMzAzNjk5MDE1NDU2MTQxNiwxLjQ5ODQ1Nzk0MjIxMjQyNzgKKzUsU2F0IDI5IEphbiAxMSwwLjYyMDExMjY5MDc1ODgwNzgsMS45NjQ2NDAwOTMxNjYwMDIKKzYsU3VuIDMwIEphbiAxMSwxLjA0NjU5NTAwMjI1MTI2NTEsMi43MDE2MTM3NjIzNzU3MTE1Cis3LE1vbiAzMSBKYW4gMTEsMS43MTk0OTY4NTkwNjY2NDM3LDMuNzA0ODE0MTMzMjQxMTc0Cis4LFR1ZSAxIEZlYiAxMSwyLjcyNTc3OTAzNDI0NjAwNzUsNS4xMTU1MTY4MDYzNzk2MDkKKzksV2VkIDIgRmViIDExLDQuMjI3MjM3OTc0NjA0MjExLDcuMDg3ODk1ODkyNDM1MjY3CisxMCxUaHUgMyBGZWIgMTEsNi40NDAwNjUxODA3ODk5Njg1LDkuODQ2MjA1Njg1NjgxOTg0CisxMSxGcmkgNCBGZWIgMTEsOS42NjY3NjY3MzIzOTgwOTMsMTMuNjg4MDQwODI2MDI2NzczCisxMixTYXQgNSBGZWIgMTEsMTQuMzExNDM0NDMyNDM5NDI1LDE5LjAwMDk0NzU1NzgyNDQxNAorMTMsU3VuIDYgRmViIDExLDIwLjg4OTQ0Njk2NjA2MTM5NiwyNi4yNTk4NTc1ODUxMjQwMTcKKzE0LE1vbiA3IEZlYiAxMSwzMC4wMDMyODI4MzQ3MTY4MTMsMzUuOTg5ODk1NzAwNTExMjEKKzE1LFR1ZSA4IEZlYiAxMSw0Mi4yNDQ3NjA5OTQzNzE2MjQsNDguNjUyODY3OTc2MjIyNzkKKzE2LFdlZCA5IEZlYiAxMSw1Ny45NTU2MjYzNjM3MjQyMSw2NC4zOTg5OTg4ODgwNjc4NQorMTcsVGh1IDEwIEZlYiAxMSw3Ni43Njc0ODk0MTczMjYwNiw4Mi42MjUwNjYxMzMxNDg4NgorMTgsRnJpIDExIEZlYiAxMSw5Ni45MDU5OTY0NTkwMjc3MywxMDEuMzU4OTYxNDk0NTQ2NDIKKzE5LFNhdCAxMiBGZWIgMTEsMTE0LjUwNDAxMDQ1MTc0NzUyLDExNi43NDUwMjU1MzMxMjQzNQorMjAsU3VuIDEzIEZlYiAxMSwxMjMuNzAyODk3NjQ0MTE5MjMsMTIzLjM2MDM2OTAyNTgwMjcKKzIxLE1vbiAxNCBGZWIgMTEsMTE4Ljc1MjIxNDI1MDE1NDUyLDExNi4zNDEyMDgwOTM2MQorMjIsVHVlIDE1IEZlYiAxMSw5OC4yOTkyNTAwODgwNTI1LDk1LjE5MTc2ODU5Mzg1OTg5CisyMyxXZWQgMTYgRmViIDExLDY4LjU4ODk3MDcyMDc3NjIzLDY2LjE3NzgzMjQ0NTM2OTgKKzI0LFRodSAxNyBGZWIgMTEsNDAuMzQwNTQ4NjE1ODQxMzE0LDM5LjEwMzc0MjA0ODAxOTg2CisyNSxGcmkgMTggRmViIDExLDIwLjc0NzkzMzczNDEzMDM1NiwyMC4zMTY0OTY2MTI1MDU3NTUKKzI2LFNhdCAxOSBGZWIgMTEsOS45OTAyMzAwNTgzNDAwNTMsOS44ODY0MDU3NTUxMjAyNworMjcsU3VuIDIwIEZlYiAxMSw0LjgyODk0NzUxODcyMTMxNyw0LjgxNTAxMzQyMTI0NTIyMDUKKzI4LE1vbiAyMSBGZWIgMTEsMi40NDk5NDU5ODIwOTA0NDg2LDIuNDUzMDY1NzExNzM0MDIzMworMjksVHVlIDIyIEZlYiAxMSwxLjMyNjAyNTA2MzE4NjI0NywxLjMzMDEzMjkzMjczNzk4OTgKKzMwLFdlZCAyMyBGZWIgMTEsMC43NjQ1MjAzMzExODc0NjYsMC43NjcyOTQ2OTAyMjg5NzkyCiszMSxUaHUgMjQgRmViIDExLDAuNDY1MjcwNjEwMjA2Mzg0LDAuNDY2OTE2NDgzMDkyNTA2MQorMzIsRnJpIDI1IEZlYiAxMSwwLjI5NTYzNDg4MjI0NzQyMzM1LDAuMjk2NTc3MDgxMTk2MzEzNwpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Ud29TcXVhcmVzTWl4aW5nTWlncmF0aW9uU0VJUl9GRF9SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vUG9wdWxhdGlvbiBDb3VudF8wLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvVHdvU3F1YXJlc01peGluZ01pZ3JhdGlvblNFSVJfRkRfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL1BvcHVsYXRpb24gQ291bnRfMC5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTMxOTBiMgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvVHdvU3F1YXJlc01peGluZ01pZ3JhdGlvblNFSVJfRkRfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL1BvcHVsYXRpb24gQ291bnRfMC5jc3YKQEAgLTAsMCArMSwzMyBAQAoraXRlcmF0aW9uLHRpbWUsc3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vbm9kZS80NDk1MzY1QTAyMzI4QjE2L0xBVF9TUVJfMF8wLHN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL25vZGUvNDQ5NTM2NUEwMjMyOEIxNi9MQVRfU1FSXzFfMAorMSxUdWUgMjUgSmFuIDExLDEwMDAuMCwxMDAwLjAKKzIsV2VkIDI2IEphbiAxMSwxMDAwLjAwMDAwMDAwMDAwMDEsOTk5Ljk5OTk5OTk5OTk5OTkKKzMsVGh1IDI3IEphbiAxMSwxMDAwLjAsMTAwMC4wCis0LEZyaSAyOCBKYW4gMTEsMTAwMC4wLDEwMDAuMAorNSxTYXQgMjkgSmFuIDExLDEwMDAuMCw5OTkuOTk5OTk5OTk5OTk5OQorNixTdW4gMzAgSmFuIDExLDEwMDAuMCwxMDAwLjAKKzcsTW9uIDMxIEphbiAxMSwxMDAwLjAsMTAwMC4wCis4LFR1ZSAxIEZlYiAxMSwxMDAwLjAsOTk5Ljk5OTk5OTk5OTk5OTkKKzksV2VkIDIgRmViIDExLDk5OS45OTk5OTk5OTk5OTk5LDk5OS45OTk5OTk5OTk5OTk5CisxMCxUaHUgMyBGZWIgMTEsOTk5Ljk5OTk5OTk5OTk5OTksMTAwMC4wCisxMSxGcmkgNCBGZWIgMTEsOTk5Ljk5OTk5OTk5OTk5OTksMTAwMC4wCisxMixTYXQgNSBGZWIgMTEsOTk5Ljk5OTk5OTk5OTk5OTksMTAwMC4wCisxMyxTdW4gNiBGZWIgMTEsOTk5Ljk5OTk5OTk5OTk5OTgsOTk5Ljk5OTk5OTk5OTk5OTkKKzE0LE1vbiA3IEZlYiAxMSw5OTkuOTk5OTk5OTk5OTk5OSw5OTkuOTk5OTk5OTk5OTk5OAorMTUsVHVlIDggRmViIDExLDk5OS45OTk5OTk5OTk5OTk5LDk5OS45OTk5OTk5OTk5OTk4CisxNixXZWQgOSBGZWIgMTEsMTAwMC4wLDk5OS45OTk5OTk5OTk5OTk4CisxNyxUaHUgMTAgRmViIDExLDEwMDAuMCw5OTkuOTk5OTk5OTk5OTk5OAorMTgsRnJpIDExIEZlYiAxMSw5OTkuOTk5OTk5OTk5OTk5OSw5OTkuOTk5OTk5OTk5OTk5OQorMTksU2F0IDEyIEZlYiAxMSw5OTkuOTk5OTk5OTk5OTk5OSw5OTkuOTk5OTk5OTk5OTk5OQorMjAsU3VuIDEzIEZlYiAxMSw5OTkuOTk5OTk5OTk5OTk5OSwxMDAwLjAKKzIxLE1vbiAxNCBGZWIgMTEsOTk5Ljk5OTk5OTk5OTk5OTksOTk5Ljk5OTk5OTk5OTk5OTkKKzIyLFR1ZSAxNSBGZWIgMTEsMTAwMC4wLDk5OS45OTk5OTk5OTk5OTk4CisyMyxXZWQgMTYgRmViIDExLDEwMDAuMCw5OTkuOTk5OTk5OTk5OTk5OAorMjQsVGh1IDE3IEZlYiAxMSw5OTkuOTk5OTk5OTk5OTk5OCw5OTkuOTk5OTk5OTk5OTk5OQorMjUsRnJpIDE4IEZlYiAxMSw5OTkuOTk5OTk5OTk5OTk5OSwxMDAwLjAKKzI2LFNhdCAxOSBGZWIgMTEsMTAwMC4wLDEwMDAuMAorMjcsU3VuIDIwIEZlYiAxMSw5OTkuOTk5OTk5OTk5OTk5OSwxMDAwLjAKKzI4LE1vbiAyMSBGZWIgMTEsOTk5Ljk5OTk5OTk5OTk5OTksMTAwMC4wCisyOSxUdWUgMjIgRmViIDExLDk5OS45OTk5OTk5OTk5OTk5LDEwMDAuMAorMzAsV2VkIDIzIEZlYiAxMSwxMDAwLjAsOTk5Ljk5OTk5OTk5OTk5OTkKKzMxLFRodSAyNCBGZWIgMTEsMTAwMC4wLDk5OS45OTk5OTk5OTk5OTk5CiszMixGcmkgMjUgRmViIDExLDEwMDAuMCw5OTkuOTk5OTk5OTk5OTk5OQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Ud29TcXVhcmVzTWl4aW5nTWlncmF0aW9uU0VJUl9GRF9SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vUl8wLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvVHdvU3F1YXJlc01peGluZ01pZ3JhdGlvblNFSVJfRkRfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL1JfMC5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWMyMTZjMQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvVHdvU3F1YXJlc01peGluZ01pZ3JhdGlvblNFSVJfRkRfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL1JfMC5jc3YKQEAgLTAsMCArMSwzMyBAQAoraXRlcmF0aW9uLHRpbWUsc3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vbm9kZS80NDk1MzY1QTAyMzI4QjE2L0xBVF9TUVJfMF8wLHN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL25vZGUvNDQ5NTM2NUEwMjMyOEIxNi9MQVRfU1FSXzFfMAorMSxUdWUgMjUgSmFuIDExLDAuMCwwLjAKKzIsV2VkIDI2IEphbiAxMSwwLjAsMC4zCiszLFRodSAyNyBKYW4gMTEsMC4wNiwwLjQ0OTk5OTk5OTk5OTk5OTk2Cis0LEZyaSAyOCBKYW4gMTEsMC4xNDQxNDI4NTcxNDI4NTcxMywwLjcwNDY3NDI4NTcxNDI4NTcKKzUsU2F0IDI5IEphbiAxMSwwLjMwMzI1NTI0MDI3MjEwODgsMS4wMzE5NTIwMjU5OTE4MzY3Cis2LFN1biAzMCBKYW4gMTEsMC41NTYzMDE2ODQ0ODIyMiwxLjQ4NTE2ODM3NzEzMDc5NzMKKzcsTW9uIDMxIEphbiAxMSwwLjk1Mjg5ODc2MzE1MzEwMzUsMi4xMTI1OTk0MTQ2NTM4MjcKKzgsVHVlIDEgRmViIDExLDEuNTU4ODgwOTU5NjYxNTA4LDIuOTkxMDA4NDQ2OTA2MTM3MworOSxXZWQgMiBGZWIgMTEsMi40NzI5MzczMjA3ODYwNzQ1LDQuMjI3NDg2MTkzNDQ1OTk0CisxMCxUaHUgMyBGZWIgMTEsMy44MzgwNjYzMDM0MTkyMjA0LDUuOTc1NTYyNzM1NTcyMTczCisxMSxGcmkgNCBGZWIgMTEsNS44NjE3MDQ4MjAwNDYyMTcsOC40NTM2ODMxMzk5NTc5NzcKKzEyLFNhdCA1IEZlYiAxMSw4Ljg0MjU3NDgxNzIwODMyNSwxMS45NzE5MDU5MjM2OTAyMworMTMsU3VuIDYgRmViIDExLDEzLjIwNzY3MjE4NDU4MzI0OSwxNi45Njc0NjczMzE2NjM1OAorMTQsTW9uIDcgRmViIDExLDE5LjU2MDg2ODc3ODM3NTE2LDI0LjA1MDk5NDAxNjY4MDQ1NQorMTUsVHVlIDggRmViIDExLDI4Ljc0MzM0OTY0ODQzNjY1LDM0LjA2MjY5MzI2OTU2NjM3CisxNixXZWQgOSBGZWIgMTEsNDEuOTAxMTUyNTEwNDI3MjQsNDguMTMzMDgyMjE0NTM1MDY1CisxNyxUaHUgMTAgRmViIDExLDYwLjU0NDU4MzMyODY3MzkyLDY3LjczMjQ2MDU3MDE2ODg4CisxOCxGcmkgMTEgRmViIDExLDg2LjU2NDU0NzMxNTU1NzY5LDk0LjY3NDg2Mjk4MDYyMTkKKzE5LFNhdCAxMiBGZWIgMTEsMTIyLjE0MDQ1Mjk0OTM3NzQsMTMxLjAxNTE2MDQ3NjM2NzE5CisyMCxTdW4gMTMgRmViIDExLDE2OS40NDIxNzUwMDc0MDA4LDE3OC43NTIxMDM1NTQzMjU3NworMjEsTW9uIDE0IEZlYiAxMSwyMzAuMDMwNDUxMTYwNTc2NTUsMjM5LjI1OTE3MTA4MTY5MzkKKzIyLFR1ZSAxNSBGZWIgMTEsMzAzLjk3MTE5MTE0ODcwMzQsMzEyLjQ3MzczMDUyMTU1MjMKKzIzLFdlZCAxNiBGZWIgMTEsMzg4Ljk2NjkwNzQxMzQ2MSwzOTYuMTMxMDY5ODQ4NTk4OAorMjQsVGh1IDE3IEZlYiAxMSw0ODAuMTUwMTA0MzQ0MzQ1OTUsNDg1LjYxMDU0MTY2OTEzNDkzCisyNSxGcmkgMTggRmViIDExLDU3MS4wOTg1MzIzNTE2NDMzLDU3NC44NjEzMTYwNzAwNjQ4CisyNixTYXQgMTkgRmViIDExLDY1NS43NTE0MTMxODYyMzc5LDY1OC4xMjIzOTIzNzAyMzIxCisyNyxTdW4gMjAgRmViIDExLDczMC4wMDc2MDc2NzYyOTM4LDczMS4zOTg0MDg3ODU1MDc1CisyOCxNb24gMjEgRmViIDExLDc5Mi4xNDMyODg3MTIzOTg4LDc5Mi45MTU5MzYyMjczNDg0CisyOSxUdWUgMjIgRmViIDExLDg0Mi4yOTUyNDcxODA0NzcsODQyLjcwNjg5NTUxMzE1NjcKKzMwLFdlZCAyMyBGZWIgMTEsODgxLjY4NTA0MDMwOTY4NzMsODgxLjg5NjkwOTMwNjUyMDYKKzMxLFRodSAyNCBGZWIgMTEsOTExLjk4NjQxNzM3MTU3MTcsOTEyLjA5MTk5NDc0Njg2MTEKKzMyLEZyaSAyNSBGZWIgMTEsOTM0LjkyNjY3Njc3NDU5NzYsOTM0Ljk3NzQzNTQ5MTgxNjcKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvVHdvU3F1YXJlc01peGluZ01pZ3JhdGlvblNFSVJfRkRfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL1NfMC5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1R3b1NxdWFyZXNNaXhpbmdNaWdyYXRpb25TRUlSX0ZEX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9TXzAuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgzZjE0YTAKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1R3b1NxdWFyZXNNaXhpbmdNaWdyYXRpb25TRUlSX0ZEX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9TXzAuY3N2CkBAIC0wLDAgKzEsMzMgQEAKK2l0ZXJhdGlvbix0aW1lLHN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL25vZGUvNDQ5NTM2NUEwMjMyOEIxNi9MQVRfU1FSXzBfMCxzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9ub2RlLzQ0OTUzNjVBMDIzMjhCMTYvTEFUX1NRUl8xXzAKKzEsVHVlIDI1IEphbiAxMSwxMDAwLjAsOTk5LjAKKzIsV2VkIDI2IEphbiAxMSw5OTkuODIzODA5NTIzODA5Niw5OTcuNTc3NzE0Mjg1NzE0MworMyxUaHUgMjcgSmFuIDExLDk5OS40MDExMzk2NjQzOTkxLDk5Ni44ODI2NTIxNjQzNTM3Cis0LEZyaSAyOCBKYW4gMTEsOTk4Ljg0NTU5MTg5ODkzODQsOTk1LjYzNjA0Mjk3MjE0NTgKKzUsU2F0IDI5IEphbiAxMSw5OTcuOTA0NTI0MzE1NTAwMyw5OTMuOTkyMzU3NzcxNjU5Cis2LFN1biAzMCBKYW4gMTEsOTk2LjQ2NjcxMjY1ODg2NDksOTkxLjY4MTk2MDY2MzY2NzUKKzcsTW9uIDMxIEphbiAxMSw5OTQuMjY4NzQwNjAwMjc4NSw5ODguNDU1NjIxNzI5OTQ2MQorOCxUdWUgMSBGZWIgMTEsOTkwLjk2MTY0OTY3ODk5OTMsOTgzLjkyMTQxNjgxMDU5OTcKKzksV2VkIDIgRmViIDExLDk4Ni4wMzAzODg0MTc1NTUxLDk3Ny41Mzc1NDQyMDUwMDQzCisxMCxUaHUgMyBGZWIgMTEsOTc4Ljc0MTAzODgxNTUxLDk2OC41NDA2MjI5NDA1Nzc1CisxMSxGcmkgNCBGZWIgMTEsOTY4LjA1NDIzMDQ5NTYxODYsOTU1Ljg3MjYyMzcwMjA0MzkKKzEyLFNhdCA1IEZlYiAxMSw5NTIuNTI0NjM1MzgzODIxOCw5MzguMDg5ODM2ODIzNTc3CisxMyxTdW4gNiBGZWIgMTEsOTMwLjE5MTcwODU2MTczNTgsOTEzLjI3MzQ1OTA5NDQ3NzQKKzE0LE1vbiA3IEZlYiAxMSw4OTguNDk2NjAwNzgwMjkzMiw4NzguOTc1Mzg4MzQwNjkyCisxNSxUdWUgOCBGZWIgMTEsODU0LjI5OTcxODU0MTk2MTUsODMyLjI3NDY0MTYwODQyOTMKKzE2LFdlZCA5IEZlYiAxMSw3OTQuMTQxNTg0NDg0ODg0MSw3NzAuMDc4MTUwNDEzNzE0NgorMTcsVGh1IDEwIEZlYiAxMSw3MTQuOTY3NzUxNjYwNDQxMSw2ODkuODU5NDI3Njg3NjgyNworMTgsRnJpIDExIEZlYiAxMSw2MTUuNTUwOTIyODA0MTM3NSw1OTEuMDExMjk4NTkwNDEyMQorMTksU2F0IDEyIEZlYiAxMSw0OTguNTkyOTQ5OTMxMDE3NCw0NzYuNzIwMjM1NDc4NjYwMzYKKzIwLFN1biAxMyBGZWIgMTEsMzcyLjcwMjc4MDg0MTY2MjUsMzU1LjU0NzEzNzg5ODA5MzM1CisyMSxNb24gMTQgRmViIDExLDI1Mi4yMzUwMDIyOTcxNTEwNiwyNDAuOTIxNDk0MDk4ODQwMjcKKzIyLFR1ZSAxNSBGZWIgMTEsMTUyLjgwNDQwMTM4OTI2NzQ3LDE0Ni44NjEwNzYzMjQ4MTE0NQorMjMsV2VkIDE2IEZlYiAxMSw4My42MjEwOTgxNjIwNDU2NCw4MS4yNzc1NzYzODU4ODcyNAorMjQsVGh1IDE3IEZlYiAxMSw0My4wNDYxOTczNjg1ODg0OSw0Mi40MDgxODY1MTU0ODMyMgorMjUsRnJpIDE4IEZlYiAxMSwyMi4yMzQ0NjI1NDkxNDc2MDQsMjIuMTU1NDkwOTg4Mjg3OTk0CisyNixTYXQgMTkgRmViIDExLDEyLjIzNjMzNTMzNDcyMTU5MSwxMi4yNzY5ODIzODkyNTM2ODYKKzI3LFN1biAyMCBGZWIgMTEsNy40MTE0NTI1MjE0NTM0ODQsNy40NTc5MDQyNjI1NTUyNTYKKzI4LE1vbiAyMSBGZWIgMTEsNC45NjYxNTE3MTM0NzMyMTIsNS4wMDAxOTMzNzY3MTEwNTYKKzI5LFR1ZSAyMiBGZWIgMTEsMy42NDM1MzA4MTY2MTA3NDk0LDMuNjY2NjU2Mjc3NjQ5MjgxNQorMzAsV2VkIDIzIEZlYiAxMSwyLjg4MTMyMzAzMTUyNzEzNjUsMi44OTcwNDkwNDEzMTY0NDkKKzMxLFRodSAyNCBGZWIgMTEsMi40MTc2MjUwMjIyOTk2ODQsMi40Mjg1NTk5NTcyNDUwMTE2CiszMixGcmkgMjUgRmViIDExLDIuMTIzMDgzNjMzNTQ2NzkzNSwyLjEzMDg4OTM4MjU1NDE2NQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Ud29TcXVhcmVzTWl4aW5nTWlncmF0aW9uU0VJUl9GRF9SZWZlcmVuY2UvVGVzdFNFSVIvcnVucGFyYW1ldGVycy5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1R3b1NxdWFyZXNNaXhpbmdNaWdyYXRpb25TRUlSX0ZEX1JlZmVyZW5jZS9UZXN0U0VJUi9ydW5wYXJhbWV0ZXJzLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZWQ4ZjUxCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Ud29TcXVhcmVzTWl4aW5nTWlncmF0aW9uU0VJUl9GRF9SZWZlcmVuY2UvVGVzdFNFSVIvcnVucGFyYW1ldGVycy5jc3YKQEAgLTAsMCArMSwyIEBACitkaXNlYXNlTmFtZSxwb3B1bGF0aW9uSWRlbnRpZmllcix0aW1lUGVyaW9kLGZyZXF1ZW5jeURlcGVuZGVudCxyZWZlcmVuY2VQb3B1bGF0aW9uRGVuc2l0eSxyb2FkTmV0d29ya0luZmVjdGlvdXNQcm9wb3J0aW9uLGNoYXJhY3RlcmlzdGljTWl4aW5nRGlzdGFuY2UsdHJhbnNtaXNzaW9uUmF0ZSxub25MaW5lYXJpdHlDb2VmZmljaWVudCxyZWNvdmVyeVJhdGUsaW5mZWN0aW91c01vcnRhbGl0eVJhdGUsaW1tdW5pdHlMb3NzUmF0ZSxpbmN1YmF0aW9uUmF0ZQorVGVzdFNFSVIsaHVtYW4sODY0MDAwMDAsdHJ1ZSwxMDAuMCwwLjAxLDIuMjUsMS42LDEuMCwwLjMsMC4wLDAuMCwwLjQKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1R3b1NxdWFyZXNNaXhpbmdNaWdyYXRpb25TRUlSX0ZEX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL2h1bWFuL0JpcnRoc18wLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvVHdvU3F1YXJlc01peGluZ01pZ3JhdGlvblNFSVJfRkRfUmVmZXJlbmNlL2F1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwvaHVtYW4vQmlydGhzXzAuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgzMDdjYTQKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1R3b1NxdWFyZXNNaXhpbmdNaWdyYXRpb25TRUlSX0ZEX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL2h1bWFuL0JpcnRoc18wLmNzdgpAQCAtMCwwICsxLDMzIEBACitpdGVyYXRpb24sdGltZSxzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9ub2RlLzQ0OTUzNjVBMDIzMjhCMTYvTEFUX1NRUl8wXzAsc3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vbm9kZS80NDk1MzY1QTAyMzI4QjE2L0xBVF9TUVJfMV8wCisxLFR1ZSAyNSBKYW4gMTEsMC4wLDAuMAorMixXZWQgMjYgSmFuIDExLDAuMCwwLjAKKzMsVGh1IDI3IEphbiAxMSwwLjAsMC4wCis0LEZyaSAyOCBKYW4gMTEsMC4wLDAuMAorNSxTYXQgMjkgSmFuIDExLDAuMCwwLjAKKzYsU3VuIDMwIEphbiAxMSwwLjAsMC4wCis3LE1vbiAzMSBKYW4gMTEsMC4wLDAuMAorOCxUdWUgMSBGZWIgMTEsMC4wLDAuMAorOSxXZWQgMiBGZWIgMTEsMC4wLDAuMAorMTAsVGh1IDMgRmViIDExLDAuMCwwLjAKKzExLEZyaSA0IEZlYiAxMSwwLjAsMC4wCisxMixTYXQgNSBGZWIgMTEsMC4wLDAuMAorMTMsU3VuIDYgRmViIDExLDAuMCwwLjAKKzE0LE1vbiA3IEZlYiAxMSwwLjAsMC4wCisxNSxUdWUgOCBGZWIgMTEsMC4wLDAuMAorMTYsV2VkIDkgRmViIDExLDAuMCwwLjAKKzE3LFRodSAxMCBGZWIgMTEsMC4wLDAuMAorMTgsRnJpIDExIEZlYiAxMSwwLjAsMC4wCisxOSxTYXQgMTIgRmViIDExLDAuMCwwLjAKKzIwLFN1biAxMyBGZWIgMTEsMC4wLDAuMAorMjEsTW9uIDE0IEZlYiAxMSwwLjAsMC4wCisyMixUdWUgMTUgRmViIDExLDAuMCwwLjAKKzIzLFdlZCAxNiBGZWIgMTEsMC4wLDAuMAorMjQsVGh1IDE3IEZlYiAxMSwwLjAsMC4wCisyNSxGcmkgMTggRmViIDExLDAuMCwwLjAKKzI2LFNhdCAxOSBGZWIgMTEsMC4wLDAuMAorMjcsU3VuIDIwIEZlYiAxMSwwLjAsMC4wCisyOCxNb24gMjEgRmViIDExLDAuMCwwLjAKKzI5LFR1ZSAyMiBGZWIgMTEsMC4wLDAuMAorMzAsV2VkIDIzIEZlYiAxMSwwLjAsMC4wCiszMSxUaHUgMjQgRmViIDExLDAuMCwwLjAKKzMyLEZyaSAyNSBGZWIgMTEsMC4wLDAuMApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Ud29TcXVhcmVzTWl4aW5nTWlncmF0aW9uU0VJUl9GRF9SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9odW1hbi9Db3VudF8wLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvVHdvU3F1YXJlc01peGluZ01pZ3JhdGlvblNFSVJfRkRfUmVmZXJlbmNlL2F1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwvaHVtYW4vQ291bnRfMC5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjk1NTE2YQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvVHdvU3F1YXJlc01peGluZ01pZ3JhdGlvblNFSVJfRkRfUmVmZXJlbmNlL2F1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwvaHVtYW4vQ291bnRfMC5jc3YKQEAgLTAsMCArMSwzMyBAQAoraXRlcmF0aW9uLHRpbWUsc3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vbm9kZS80NDk1MzY1QTAyMzI4QjE2L0xBVF9TUVJfMF8wLHN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL25vZGUvNDQ5NTM2NUEwMjMyOEIxNi9MQVRfU1FSXzFfMAorMSxUdWUgMjUgSmFuIDExLDEwMDAuMCwxMDAwLjAKKzIsV2VkIDI2IEphbiAxMSwxMDAwLjAsMTAwMC4wCiszLFRodSAyNyBKYW4gMTEsMTAwMC4wLDEwMDAuMAorNCxGcmkgMjggSmFuIDExLDEwMDAuMCwxMDAwLjAKKzUsU2F0IDI5IEphbiAxMSwxMDAwLjAsMTAwMC4wCis2LFN1biAzMCBKYW4gMTEsMTAwMC4wLDEwMDAuMAorNyxNb24gMzEgSmFuIDExLDEwMDAuMCwxMDAwLjAKKzgsVHVlIDEgRmViIDExLDEwMDAuMCwxMDAwLjAKKzksV2VkIDIgRmViIDExLDEwMDAuMCwxMDAwLjAKKzEwLFRodSAzIEZlYiAxMSwxMDAwLjAsMTAwMC4wCisxMSxGcmkgNCBGZWIgMTEsMTAwMC4wLDEwMDAuMAorMTIsU2F0IDUgRmViIDExLDEwMDAuMCwxMDAwLjAKKzEzLFN1biA2IEZlYiAxMSwxMDAwLjAsMTAwMC4wCisxNCxNb24gNyBGZWIgMTEsMTAwMC4wLDEwMDAuMAorMTUsVHVlIDggRmViIDExLDEwMDAuMCwxMDAwLjAKKzE2LFdlZCA5IEZlYiAxMSwxMDAwLjAsMTAwMC4wCisxNyxUaHUgMTAgRmViIDExLDEwMDAuMCwxMDAwLjAKKzE4LEZyaSAxMSBGZWIgMTEsMTAwMC4wLDEwMDAuMAorMTksU2F0IDEyIEZlYiAxMSwxMDAwLjAsMTAwMC4wCisyMCxTdW4gMTMgRmViIDExLDEwMDAuMCwxMDAwLjAKKzIxLE1vbiAxNCBGZWIgMTEsMTAwMC4wLDEwMDAuMAorMjIsVHVlIDE1IEZlYiAxMSwxMDAwLjAsMTAwMC4wCisyMyxXZWQgMTYgRmViIDExLDEwMDAuMCwxMDAwLjAKKzI0LFRodSAxNyBGZWIgMTEsMTAwMC4wLDEwMDAuMAorMjUsRnJpIDE4IEZlYiAxMSwxMDAwLjAsMTAwMC4wCisyNixTYXQgMTkgRmViIDExLDEwMDAuMCwxMDAwLjAKKzI3LFN1biAyMCBGZWIgMTEsMTAwMC4wLDEwMDAuMAorMjgsTW9uIDIxIEZlYiAxMSwxMDAwLjAsMTAwMC4wCisyOSxUdWUgMjIgRmViIDExLDEwMDAuMCwxMDAwLjAKKzMwLFdlZCAyMyBGZWIgMTEsMTAwMC4wLDEwMDAuMAorMzEsVGh1IDI0IEZlYiAxMSwxMDAwLjAsMTAwMC4wCiszMixGcmkgMjUgRmViIDExLDEwMDAuMCwxMDAwLjAKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvVHdvU3F1YXJlc01peGluZ01pZ3JhdGlvblNFSVJfRkRfUmVmZXJlbmNlL2F1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwvaHVtYW4vRGVhdGhzXzAuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Ud29TcXVhcmVzTWl4aW5nTWlncmF0aW9uU0VJUl9GRF9SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9odW1hbi9EZWF0aHNfMC5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODMwN2NhNAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvVHdvU3F1YXJlc01peGluZ01pZ3JhdGlvblNFSVJfRkRfUmVmZXJlbmNlL2F1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwvaHVtYW4vRGVhdGhzXzAuY3N2CkBAIC0wLDAgKzEsMzMgQEAKK2l0ZXJhdGlvbix0aW1lLHN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL25vZGUvNDQ5NTM2NUEwMjMyOEIxNi9MQVRfU1FSXzBfMCxzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9ub2RlLzQ0OTUzNjVBMDIzMjhCMTYvTEFUX1NRUl8xXzAKKzEsVHVlIDI1IEphbiAxMSwwLjAsMC4wCisyLFdlZCAyNiBKYW4gMTEsMC4wLDAuMAorMyxUaHUgMjcgSmFuIDExLDAuMCwwLjAKKzQsRnJpIDI4IEphbiAxMSwwLjAsMC4wCis1LFNhdCAyOSBKYW4gMTEsMC4wLDAuMAorNixTdW4gMzAgSmFuIDExLDAuMCwwLjAKKzcsTW9uIDMxIEphbiAxMSwwLjAsMC4wCis4LFR1ZSAxIEZlYiAxMSwwLjAsMC4wCis5LFdlZCAyIEZlYiAxMSwwLjAsMC4wCisxMCxUaHUgMyBGZWIgMTEsMC4wLDAuMAorMTEsRnJpIDQgRmViIDExLDAuMCwwLjAKKzEyLFNhdCA1IEZlYiAxMSwwLjAsMC4wCisxMyxTdW4gNiBGZWIgMTEsMC4wLDAuMAorMTQsTW9uIDcgRmViIDExLDAuMCwwLjAKKzE1LFR1ZSA4IEZlYiAxMSwwLjAsMC4wCisxNixXZWQgOSBGZWIgMTEsMC4wLDAuMAorMTcsVGh1IDEwIEZlYiAxMSwwLjAsMC4wCisxOCxGcmkgMTEgRmViIDExLDAuMCwwLjAKKzE5LFNhdCAxMiBGZWIgMTEsMC4wLDAuMAorMjAsU3VuIDEzIEZlYiAxMSwwLjAsMC4wCisyMSxNb24gMTQgRmViIDExLDAuMCwwLjAKKzIyLFR1ZSAxNSBGZWIgMTEsMC4wLDAuMAorMjMsV2VkIDE2IEZlYiAxMSwwLjAsMC4wCisyNCxUaHUgMTcgRmViIDExLDAuMCwwLjAKKzI1LEZyaSAxOCBGZWIgMTEsMC4wLDAuMAorMjYsU2F0IDE5IEZlYiAxMSwwLjAsMC4wCisyNyxTdW4gMjAgRmViIDExLDAuMCwwLjAKKzI4LE1vbiAyMSBGZWIgMTEsMC4wLDAuMAorMjksVHVlIDIyIEZlYiAxMSwwLjAsMC4wCiszMCxXZWQgMjMgRmViIDExLDAuMCwwLjAKKzMxLFRodSAyNCBGZWIgMTEsMC4wLDAuMAorMzIsRnJpIDI1IEZlYiAxMSwwLjAsMC4wCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1R3b1NxdWFyZXNNaXhpbmdNaWdyYXRpb25TRUlSX0ZEX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL2h1bWFuL0RlbnNpdHlfMC5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1R3b1NxdWFyZXNNaXhpbmdNaWdyYXRpb25TRUlSX0ZEX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL2h1bWFuL0RlbnNpdHlfMC5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTYyNWJjZgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvVHdvU3F1YXJlc01peGluZ01pZ3JhdGlvblNFSVJfRkRfUmVmZXJlbmNlL2F1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwvaHVtYW4vRGVuc2l0eV8wLmNzdgpAQCAtMCwwICsxLDMzIEBACitpdGVyYXRpb24sdGltZSxzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9ub2RlLzQ0OTUzNjVBMDIzMjhCMTYvTEFUX1NRUl8wXzAsc3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vbm9kZS80NDk1MzY1QTAyMzI4QjE2L0xBVF9TUVJfMV8wCisxLFR1ZSAyNSBKYW4gMTEsMC40OTM4MjcxNjA0OTM4MjcxMywwLjQ5MzgyNzE2MDQ5MzgyNzEzCisyLFdlZCAyNiBKYW4gMTEsMC40OTM4MjcxNjA0OTM4MjcxMywwLjQ5MzgyNzE2MDQ5MzgyNzEzCiszLFRodSAyNyBKYW4gMTEsMC40OTM4MjcxNjA0OTM4MjcxMywwLjQ5MzgyNzE2MDQ5MzgyNzEzCis0LEZyaSAyOCBKYW4gMTEsMC40OTM4MjcxNjA0OTM4MjcxMywwLjQ5MzgyNzE2MDQ5MzgyNzEzCis1LFNhdCAyOSBKYW4gMTEsMC40OTM4MjcxNjA0OTM4MjcxMywwLjQ5MzgyNzE2MDQ5MzgyNzEzCis2LFN1biAzMCBKYW4gMTEsMC40OTM4MjcxNjA0OTM4MjcxMywwLjQ5MzgyNzE2MDQ5MzgyNzEzCis3LE1vbiAzMSBKYW4gMTEsMC40OTM4MjcxNjA0OTM4MjcxMywwLjQ5MzgyNzE2MDQ5MzgyNzEzCis4LFR1ZSAxIEZlYiAxMSwwLjQ5MzgyNzE2MDQ5MzgyNzEzLDAuNDkzODI3MTYwNDkzODI3MTMKKzksV2VkIDIgRmViIDExLDAuNDkzODI3MTYwNDkzODI3MTMsMC40OTM4MjcxNjA0OTM4MjcxMworMTAsVGh1IDMgRmViIDExLDAuNDkzODI3MTYwNDkzODI3MTMsMC40OTM4MjcxNjA0OTM4MjcxMworMTEsRnJpIDQgRmViIDExLDAuNDkzODI3MTYwNDkzODI3MTMsMC40OTM4MjcxNjA0OTM4MjcxMworMTIsU2F0IDUgRmViIDExLDAuNDkzODI3MTYwNDkzODI3MTMsMC40OTM4MjcxNjA0OTM4MjcxMworMTMsU3VuIDYgRmViIDExLDAuNDkzODI3MTYwNDkzODI3MTMsMC40OTM4MjcxNjA0OTM4MjcxMworMTQsTW9uIDcgRmViIDExLDAuNDkzODI3MTYwNDkzODI3MTMsMC40OTM4MjcxNjA0OTM4MjcxMworMTUsVHVlIDggRmViIDExLDAuNDkzODI3MTYwNDkzODI3MTMsMC40OTM4MjcxNjA0OTM4MjcxMworMTYsV2VkIDkgRmViIDExLDAuNDkzODI3MTYwNDkzODI3MTMsMC40OTM4MjcxNjA0OTM4MjcxMworMTcsVGh1IDEwIEZlYiAxMSwwLjQ5MzgyNzE2MDQ5MzgyNzEzLDAuNDkzODI3MTYwNDkzODI3MTMKKzE4LEZyaSAxMSBGZWIgMTEsMC40OTM4MjcxNjA0OTM4MjcxMywwLjQ5MzgyNzE2MDQ5MzgyNzEzCisxOSxTYXQgMTIgRmViIDExLDAuNDkzODI3MTYwNDkzODI3MTMsMC40OTM4MjcxNjA0OTM4MjcxMworMjAsU3VuIDEzIEZlYiAxMSwwLjQ5MzgyNzE2MDQ5MzgyNzEzLDAuNDkzODI3MTYwNDkzODI3MTMKKzIxLE1vbiAxNCBGZWIgMTEsMC40OTM4MjcxNjA0OTM4MjcxMywwLjQ5MzgyNzE2MDQ5MzgyNzEzCisyMixUdWUgMTUgRmViIDExLDAuNDkzODI3MTYwNDkzODI3MTMsMC40OTM4MjcxNjA0OTM4MjcxMworMjMsV2VkIDE2IEZlYiAxMSwwLjQ5MzgyNzE2MDQ5MzgyNzEzLDAuNDkzODI3MTYwNDkzODI3MTMKKzI0LFRodSAxNyBGZWIgMTEsMC40OTM4MjcxNjA0OTM4MjcxMywwLjQ5MzgyNzE2MDQ5MzgyNzEzCisyNSxGcmkgMTggRmViIDExLDAuNDkzODI3MTYwNDkzODI3MTMsMC40OTM4MjcxNjA0OTM4MjcxMworMjYsU2F0IDE5IEZlYiAxMSwwLjQ5MzgyNzE2MDQ5MzgyNzEzLDAuNDkzODI3MTYwNDkzODI3MTMKKzI3LFN1biAyMCBGZWIgMTEsMC40OTM4MjcxNjA0OTM4MjcxMywwLjQ5MzgyNzE2MDQ5MzgyNzEzCisyOCxNb24gMjEgRmViIDExLDAuNDkzODI3MTYwNDkzODI3MTMsMC40OTM4MjcxNjA0OTM4MjcxMworMjksVHVlIDIyIEZlYiAxMSwwLjQ5MzgyNzE2MDQ5MzgyNzEzLDAuNDkzODI3MTYwNDkzODI3MTMKKzMwLFdlZCAyMyBGZWIgMTEsMC40OTM4MjcxNjA0OTM4MjcxMywwLjQ5MzgyNzE2MDQ5MzgyNzEzCiszMSxUaHUgMjQgRmViIDExLDAuNDkzODI3MTYwNDkzODI3MTMsMC40OTM4MjcxNjA0OTM4MjcxMworMzIsRnJpIDI1IEZlYiAxMSwwLjQ5MzgyNzE2MDQ5MzgyNzEzLDAuNDkzODI3MTYwNDkzODI3MTMKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvVHdvU3F1YXJlc01peGluZ01pZ3JhdGlvblNFSVJfRkRfUmVmZXJlbmNlL2F1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwvaHVtYW4vSW5jaWRlbmNlXzAuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Ud29TcXVhcmVzTWl4aW5nTWlncmF0aW9uU0VJUl9GRF9SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9odW1hbi9JbmNpZGVuY2VfMC5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODMwN2NhNAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvVHdvU3F1YXJlc01peGluZ01pZ3JhdGlvblNFSVJfRkRfUmVmZXJlbmNlL2F1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwvaHVtYW4vSW5jaWRlbmNlXzAuY3N2CkBAIC0wLDAgKzEsMzMgQEAKK2l0ZXJhdGlvbix0aW1lLHN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL25vZGUvNDQ5NTM2NUEwMjMyOEIxNi9MQVRfU1FSXzBfMCxzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9ub2RlLzQ0OTUzNjVBMDIzMjhCMTYvTEFUX1NRUl8xXzAKKzEsVHVlIDI1IEphbiAxMSwwLjAsMC4wCisyLFdlZCAyNiBKYW4gMTEsMC4wLDAuMAorMyxUaHUgMjcgSmFuIDExLDAuMCwwLjAKKzQsRnJpIDI4IEphbiAxMSwwLjAsMC4wCis1LFNhdCAyOSBKYW4gMTEsMC4wLDAuMAorNixTdW4gMzAgSmFuIDExLDAuMCwwLjAKKzcsTW9uIDMxIEphbiAxMSwwLjAsMC4wCis4LFR1ZSAxIEZlYiAxMSwwLjAsMC4wCis5LFdlZCAyIEZlYiAxMSwwLjAsMC4wCisxMCxUaHUgMyBGZWIgMTEsMC4wLDAuMAorMTEsRnJpIDQgRmViIDExLDAuMCwwLjAKKzEyLFNhdCA1IEZlYiAxMSwwLjAsMC4wCisxMyxTdW4gNiBGZWIgMTEsMC4wLDAuMAorMTQsTW9uIDcgRmViIDExLDAuMCwwLjAKKzE1LFR1ZSA4IEZlYiAxMSwwLjAsMC4wCisxNixXZWQgOSBGZWIgMTEsMC4wLDAuMAorMTcsVGh1IDEwIEZlYiAxMSwwLjAsMC4wCisxOCxGcmkgMTEgRmViIDExLDAuMCwwLjAKKzE5LFNhdCAxMiBGZWIgMTEsMC4wLDAuMAorMjAsU3VuIDEzIEZlYiAxMSwwLjAsMC4wCisyMSxNb24gMTQgRmViIDExLDAuMCwwLjAKKzIyLFR1ZSAxNSBGZWIgMTEsMC4wLDAuMAorMjMsV2VkIDE2IEZlYiAxMSwwLjAsMC4wCisyNCxUaHUgMTcgRmViIDExLDAuMCwwLjAKKzI1LEZyaSAxOCBGZWIgMTEsMC4wLDAuMAorMjYsU2F0IDE5IEZlYiAxMSwwLjAsMC4wCisyNyxTdW4gMjAgRmViIDExLDAuMCwwLjAKKzI4LE1vbiAyMSBGZWIgMTEsMC4wLDAuMAorMjksVHVlIDIyIEZlYiAxMSwwLjAsMC4wCiszMCxXZWQgMjMgRmViIDExLDAuMCwwLjAKKzMxLFRodSAyNCBGZWIgMTEsMC4wLDAuMAorMzIsRnJpIDI1IEZlYiAxMSwwLjAsMC4wCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1R3b1NxdWFyZXNNaXhpbmdNaWdyYXRpb25TRUlSX0ZEX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL3J1bnBhcmFtZXRlcnMuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Ud29TcXVhcmVzTWl4aW5nTWlncmF0aW9uU0VJUl9GRF9SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9ydW5wYXJhbWV0ZXJzLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNjg1NWI1Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Ud29TcXVhcmVzTWl4aW5nTWlncmF0aW9uU0VJUl9GRF9SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9ydW5wYXJhbWV0ZXJzLmNzdgpAQCAtMCwwICsxLDIgQEAKK3BvcHVsYXRpb25JZGVudGlmaWVyLG5hbWUsdGFyZ2V0SVNPS2V5LGJpcnRoUmF0ZSxkZWF0aFJhdGUsdGltZVBlcmlvZAoraHVtYW4sYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbCwsMC4wLDAuMCw4NjQwMDAwMApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvVHdvU3F1YXJlc01peGluZ01pZ3JhdGlvblNFSVJfUktfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL0Rpc2Vhc2UgRGVhdGhzXzAuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Ud29TcXVhcmVzTWl4aW5nTWlncmF0aW9uU0VJUl9SS19SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vRGlzZWFzZSBEZWF0aHNfMC5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODMwN2NhNAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvVHdvU3F1YXJlc01peGluZ01pZ3JhdGlvblNFSVJfUktfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL0Rpc2Vhc2UgRGVhdGhzXzAuY3N2CkBAIC0wLDAgKzEsMzMgQEAKK2l0ZXJhdGlvbix0aW1lLHN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL25vZGUvNDQ5NTM2NUEwMjMyOEIxNi9MQVRfU1FSXzBfMCxzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9ub2RlLzQ0OTUzNjVBMDIzMjhCMTYvTEFUX1NRUl8xXzAKKzEsVHVlIDI1IEphbiAxMSwwLjAsMC4wCisyLFdlZCAyNiBKYW4gMTEsMC4wLDAuMAorMyxUaHUgMjcgSmFuIDExLDAuMCwwLjAKKzQsRnJpIDI4IEphbiAxMSwwLjAsMC4wCis1LFNhdCAyOSBKYW4gMTEsMC4wLDAuMAorNixTdW4gMzAgSmFuIDExLDAuMCwwLjAKKzcsTW9uIDMxIEphbiAxMSwwLjAsMC4wCis4LFR1ZSAxIEZlYiAxMSwwLjAsMC4wCis5LFdlZCAyIEZlYiAxMSwwLjAsMC4wCisxMCxUaHUgMyBGZWIgMTEsMC4wLDAuMAorMTEsRnJpIDQgRmViIDExLDAuMCwwLjAKKzEyLFNhdCA1IEZlYiAxMSwwLjAsMC4wCisxMyxTdW4gNiBGZWIgMTEsMC4wLDAuMAorMTQsTW9uIDcgRmViIDExLDAuMCwwLjAKKzE1LFR1ZSA4IEZlYiAxMSwwLjAsMC4wCisxNixXZWQgOSBGZWIgMTEsMC4wLDAuMAorMTcsVGh1IDEwIEZlYiAxMSwwLjAsMC4wCisxOCxGcmkgMTEgRmViIDExLDAuMCwwLjAKKzE5LFNhdCAxMiBGZWIgMTEsMC4wLDAuMAorMjAsU3VuIDEzIEZlYiAxMSwwLjAsMC4wCisyMSxNb24gMTQgRmViIDExLDAuMCwwLjAKKzIyLFR1ZSAxNSBGZWIgMTEsMC4wLDAuMAorMjMsV2VkIDE2IEZlYiAxMSwwLjAsMC4wCisyNCxUaHUgMTcgRmViIDExLDAuMCwwLjAKKzI1LEZyaSAxOCBGZWIgMTEsMC4wLDAuMAorMjYsU2F0IDE5IEZlYiAxMSwwLjAsMC4wCisyNyxTdW4gMjAgRmViIDExLDAuMCwwLjAKKzI4LE1vbiAyMSBGZWIgMTEsMC4wLDAuMAorMjksVHVlIDIyIEZlYiAxMSwwLjAsMC4wCiszMCxXZWQgMjMgRmViIDExLDAuMCwwLjAKKzMxLFRodSAyNCBGZWIgMTEsMC4wLDAuMAorMzIsRnJpIDI1IEZlYiAxMSwwLjAsMC4wCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1R3b1NxdWFyZXNNaXhpbmdNaWdyYXRpb25TRUlSX1JLX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9FXzAuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Ud29TcXVhcmVzTWl4aW5nTWlncmF0aW9uU0VJUl9SS19SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vRV8wLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNjM4NDJjCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Ud29TcXVhcmVzTWl4aW5nTWlncmF0aW9uU0VJUl9SS19SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vRV8wLmNzdgpAQCAtMCwwICsxLDMzIEBACitpdGVyYXRpb24sdGltZSxzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9ub2RlLzQ0OTUzNjVBMDIzMjhCMTYvTEFUX1NRUl8wXzAsc3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vbm9kZS80NDk1MzY1QTAyMzI4QjE2L0xBVF9TUVJfMV8wCisxLFR1ZSAyNSBKYW4gMTEsMC4wLDAuMAorMixXZWQgMjYgSmFuIDExLDAuMTU2NTM4MDY4MTA3ODgwMywxLjA5MzY4ODM0MTMzMzUzMTkKKzMsVGh1IDI3IEphbiAxMSwwLjQ2NTczNjIxMDk3MjE4ODIsMS44ODQyMzIyMDQ3NjQ4NDI1Cis0LEZyaSAyOCBKYW4gMTEsMC45Njg3NTQ0OTI4OTczNTUzLDIuODIxMzA1ODY0MTcyNTA2Cis1LFNhdCAyOSBKYW4gMTEsMS44MDI4NzI1MjAxODUxMTIsNC4xNTAyNzM1NjQyNTA5NDcKKzYsU3VuIDMwIEphbiAxMSwzLjE3MDA4OTY0ODgxNjgyMTUsNi4xMjIzMDkyOTIzOTA3MzEKKzcsTW9uIDMxIEphbiAxMSw1LjM4MzkxMDE2OTU2MTQzNyw5LjA3NzgwMjE1MzM3NDUzMQorOCxUdWUgMSBGZWIgMTEsOC45MjE1MTI0NDY5NzU3ODQsMTMuNTExNzI1NTY3MjI3MjM2Cis5LFdlZCAyIEZlYiAxMSwxNC40OTQwNTkwNjQ0NTM0NiwyMC4xMzg0MTc0NzA3OTkzNworMTAsVGh1IDMgRmViIDExLDIzLjEyMzY2MzUxMDgwMzI1NCwyOS45NTIwNzU3MDMzOTA3NzIKKzExLEZyaSA0IEZlYiAxMSwzNi4xOTEzNjU5MjI4ODQ2NCw0NC4yNDY2Mzc1OTg3NDcyNTYKKzEyLFNhdCA1IEZlYiAxMSw1NS4zNjY0NTk1NjgxMDExOCw2NC41MDc0MjMwNDYzNzA5NworMTMsU3VuIDYgRmViIDExLDgyLjI0MzA2ODc2MTE1NTc3LDkyLjAxNzc4MjgzMTQyMzg2CisxNCxNb24gNyBGZWIgMTEsMTE3LjQ1MTgyNzIwMzcwNDMsMTI2Ljk5NzcwMjc3Mzk5ODkyCisxNSxUdWUgOCBGZWIgMTEsMTU5LjE4NDEwMTY1Nzg4MDg2LDE2Ny4yODc5MDc4NDM2MDc4CisxNixXZWQgOSBGZWIgMTEsMjAxLjc2OTEzMTE3NTIzMDMsMjA3LjIzNDUwMjc2MTYyNTc4CisxNyxUaHUgMTAgRmViIDExLDIzNS45ODcxMTY1ODIzMDUzNiwyMzguMjQyNjg1NTE0NDg4MDQKKzE4LEZyaSAxMSBGZWIgMTEsMjUyLjU3MzM1NDEyODI0NDIzLDI1Mi4wNjY3NzI0Njk1NjMxCisxOSxTYXQgMTIgRmViIDExLDI0Ny4zMzQ0NjUxNjQ5MDE2LDI0NS4yNTk0Nzk1NDcxNzk3NQorMjAsU3VuIDEzIEZlYiAxMSwyMjMuNDI4Mzg0MjYxMzA3LDIyMS4wMDAyNzc1MTI1MDc4NAorMjEsTW9uIDE0IEZlYiAxMSwxODguNzU3NjMxOTc4ODA5MjYsMTg2LjcwNDIzNTQxMTA3Mjk0CisyMixUdWUgMTUgRmViIDExLDE1MS40MzM0NDgzNjMyNjEyOCwxNDkuOTczMzMxMjU1OTIxCisyMyxXZWQgMTYgRmViIDExLDExNi45Nzk2NjUzMjI0NDA1MiwxMTYuMDQ2NjY0MjE3MDg4NTMKKzI0LFRodSAxNyBGZWIgMTEsODcuOTgyNjAwNTM3NDY0ODksODcuNDI2MDg0NjcwMTE3MjkKKzI1LEZyaSAxOCBGZWIgMTEsNjQuOTY1NTU1NjAzMTc2Niw2NC42NDgzMDU5OTE2ODQyCisyNixTYXQgMTkgRmViIDExLDQ3LjM3NjUxNDY3ODEwNDgyNiw0Ny4yMDEwODA2MjA2MzgwNQorMjcsU3VuIDIwIEZlYiAxMSwzNC4yNjc2NDUxMDg5MzA2NSwzNC4xNzI2NDYxOTQxNzA4OTUKKzI4LE1vbiAyMSBGZWIgMTEsMjQuNjU4NzM2ODI3NDcwNzksMjQuNjA4MDU4NTc5ODk2Mzg3CisyOSxUdWUgMjIgRmViIDExLDE3LjY5MjQyMjU4MjAyMjU3MywxNy42NjU2ODg0MzA1NDgyNjUKKzMwLFdlZCAyMyBGZWIgMTEsMTIuNjc3OTk1ODQwNTk3NjU2LDEyLjY2NDAxNzM1NjU5OTMxCiszMSxUaHUgMjQgRmViIDExLDkuMDg0NTYyODc4Mzc3NjE0LDkuMDc3MzA5MDU5MzYxODk1CiszMixGcmkgMjUgRmViIDExLDYuNTE1NzYxNzc4MDU0NjQzLDYuNTEyMDIzOTc2MTk0OTM1CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1R3b1NxdWFyZXNNaXhpbmdNaWdyYXRpb25TRUlSX1JLX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9JXzAuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Ud29TcXVhcmVzTWl4aW5nTWlncmF0aW9uU0VJUl9SS19SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vSV8wLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MmZlZDg5Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Ud29TcXVhcmVzTWl4aW5nTWlncmF0aW9uU0VJUl9SS19SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vSV8wLmNzdgpAQCAtMCwwICsxLDMzIEBACitpdGVyYXRpb24sdGltZSxzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9ub2RlLzQ0OTUzNjVBMDIzMjhCMTYvTEFUX1NRUl8wXzAsc3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vbm9kZS80NDk1MzY1QTAyMzI4QjE2L0xBVF9TUVJfMV8wCisxLFR1ZSAyNSBKYW4gMTEsMC4wLDEuMAorMixXZWQgMjYgSmFuIDExLDAuMTAwMjI1OTU2NzIwMjM3OTYsMC44ODIxNjM2MTExMTA1NjUzCiszLFRodSAyNyBKYW4gMTEsMC4yNDg0NTE5MzQ1MzkxMDIzLDEuMTA2NDc0OTM3Nzg5OTkKKzQsRnJpIDI4IEphbiAxMSwwLjUwNDk1NzE0MjQ3MjUxODgsMS41NTc4NjQ3NDQyMDEwMjE2Cis1LFNhdCAyOSBKYW4gMTEsMC45NDE2OTgxNjg4MjgyMDU2LDIuMjYzOTU2MDYxNzM3NTYxNgorNixTdW4gMzAgSmFuIDExLDEuNjY3MTU5ODk0MTM5ODIwMiwzLjMzMTc1MzY0MTQ1Mjg4MgorNyxNb24gMzEgSmFuIDExLDIuODUwNDU3NTkyMTQzNTIzLDQuOTQxODEyODUyMzc5OTYKKzgsVHVlIDEgRmViIDExLDQuNzU0MjI3NTEwMjAyNTAxLDcuMzcwOTQxMDEyNjU0NDQzCis5LFdlZCAyIEZlYiAxMSw3Ljc3OTU3OTEzNDM5NjgzLDExLjAzMjE3MDA4MjQyMDIyOAorMTAsVGh1IDMgRmViIDExLDEyLjUyNDk5NDU1ODE2MTcwNSwxNi41MjY5NzM1NjMwMjc2MQorMTEsRnJpIDQgRmViIDExLDE5Ljg1MjI5NDMyNDQ4ODYzLDI0LjY5OTczNTMxODk5NjEyNgorMTIsU2F0IDUgRmViIDExLDMwLjkzMzEyNDAxOTgwNTExMywzNi42NjYxMzY4MzgxODYyNQorMTMsU3VuIDYgRmViIDExLDQ3LjIxMDM2OTY0NTk0MTMsNTMuNzUxODMxODUzNjE4OTUKKzE0LE1vbiA3IEZlYiAxMSw3MC4xNTI3MjI5MTI0OTcxOCw3Ny4yMzE5NDExNjg5NDkzMgorMTUsVHVlIDggRmViIDExLDEwMC42NTI4OTc5NTM1MjYzNiwxMDcuNzUxNDY3MDIyNDg0MDQKKzE2LFdlZCA5IEZlYiAxMSwxMzguMDQ5Njc3NzMwODUxODQsMTQ0LjQ0MzAzNzk3MDIxMzY4CisxNyxUaHUgMTAgRmViIDExLDE3OS4xNzgxNzU4MDM1MDMzNCwxODQuMTM1NDY5MjYxMjkxNzIKKzE4LEZyaSAxMSBGZWIgMTEsMjE4LjM1NjgwMjI3MDcyNTA0LDIyMS40NDIyMjY1MjYzMjc1CisxOSxTYXQgMTIgRmViIDExLDI0OC45OTM5NTM0NTY5OTczNiwyNTAuMjYxNjQzMjEyNDAyMzYKKzIwLFN1biAxMyBGZWIgMTEsMjY2LjE0NTc2NzczMjUyODcsMjY2LjA2MTIwMjgyNzY4NzM0CisyMSxNb24gMTQgRmViIDExLDI2OC4yNjQ5MzI3ODI0NTgsMjY3LjQzMjg1OTYyNjg0NzA2CisyMixUdWUgMTUgRmViIDExLDI1Ny4xMDI2MTU1ODg1ODAyNSwyNTYuMDI0MTI5MjE4NjIxOAorMjMsV2VkIDE2IEZlYiAxMSwyMzYuMzIwNDY5MDU1NTk1NDIsMjM1LjI5OTQ4MzA2NjQ3MzUKKzI0LFRodSAxNyBGZWIgMTEsMjA5Ljk3NDE1NDQzMTUxNzY2LDIwOS4xNDE4ODY2NDg0NzY5NworMjUsRnJpIDE4IEZlYiAxMSwxODEuNTQxODA4NzE0NDY3MDQsMTgwLjkyMTc5NTA2OTk2ODU3CisyNixTYXQgMTkgRmViIDExLDE1My41NTE4MDgxOTExMjgxLDE1My4xMTY4Nzc0NDA0Nzg3MworMjcsU3VuIDIwIEZlYiAxMSwxMjcuNTk1NzQ1OTI1OTAyMTgsMTI3LjMwMzM4NDI1MzQ1Mzk4CisyOCxNb24gMjEgRmViIDExLDEwNC41MTEwOTQ5MTc1ODMyMiwxMDQuMzIwNjYwMTI4NjA2OQorMjksVHVlIDIyIEZlYiAxMSw4NC41OTk1MzEwOTg3NTM5Myw4NC40Nzg0Mjc0MTk0OTcyMQorMzAsV2VkIDIzIEZlYiAxMSw2Ny44MTg4ODUwOTE2NTc0Miw2Ny43NDMzMDA0MzA3Mjk4NworMzEsVGh1IDI0IEZlYiAxMSw1My45Mjk1NTI2MzYwNzQzNCw1My44ODMwNzc3NzkyMTA0OTUKKzMyLEZyaSAyNSBGZWIgMTEsNDIuNTk2NDM2Mzg2MDA5MSw0Mi41NjgyMDU2NTUyNzM2MTYKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvVHdvU3F1YXJlc01peGluZ01pZ3JhdGlvblNFSVJfUktfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL0luY2lkZW5jZV8wLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvVHdvU3F1YXJlc01peGluZ01pZ3JhdGlvblNFSVJfUktfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL0luY2lkZW5jZV8wLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZDkzODA3Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Ud29TcXVhcmVzTWl4aW5nTWlncmF0aW9uU0VJUl9SS19SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vSW5jaWRlbmNlXzAuY3N2CkBAIC0wLDAgKzEsMzMgQEAKK2l0ZXJhdGlvbix0aW1lLHN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL25vZGUvNDQ5NTM2NUEwMjMyOEIxNi9MQVRfU1FSXzBfMCxzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9ub2RlLzQ0OTUzNjVBMDIzMjhCMTYvTEFUX1NRUl8xXzAKKzEsVHVlIDI1IEphbiAxMSwwLjAsMC4wCisyLFdlZCAyNiBKYW4gMTEsMC4xODY1MTI1Mzc1MjM0NzkwMiwxLjMzMTAzMzAzODE3NTkzMTQKKzMsVGh1IDI3IEphbiAxMSwwLjM0Njc3NTU3Nzk3ODI5MDIsMS40Njc5OTA5NzUyMTA5NTUKKzQsRnJpIDI4IEphbiAxMSwwLjY0MTc4OTMwMDg5OTU2MTgsMi4wMDk4MTA1Njk3NzgyNzM4Cis1LFNhdCAyOSBKYW4gMTEsMS4xOTIyNjQzNzM2NjAwNjA3LDIuODkwOTExMzAwMTYwMDYyCis2LFN1biAzMCBKYW4gMTEsMi4xMDg4Mzg1NTcyOTQwMyw0LjIzNDQ3OTU0NTk2Nzk3Cis3LE1vbiAzMSBKYW4gMTEsMy41OTk4NTkxNzMyNzA1NTYsNi4yNTA4Mzk3NzU4NDA5OTUKKzgsVHVlIDEgRmViIDExLDUuOTgyNTE3NTAwMzUzMjQxLDkuMjYyNDQwNjU1NDY4NjIKKzksV2VkIDIgRmViIDExLDkuNzI0MzM1MzA4NTA2Mzk3LDEzLjczMDM3MDgyNzQxNjExMQorMTAsVGh1IDMgRmViIDExLDE1LjQ4MDQzMjQ0NDUxNzE3OSwyMC4yNzUyMjY4NDc2NTc1NzQKKzExLEZyaSA0IEZlYiAxMSwyNC4wOTI5ODQ0NjI3NjU5NSwyOS42NTI4NTQxNzE3ODk2NTIKKzEyLFNhdCA1IEZlYiAxMSwzNi40NzQ5NTIwNjkyODM2Niw0Mi42MDk1NzcyNjYyOTk5MTUKKzEzLFN1biA2IEZlYiAxMSw1My4yNDEzMDY5MTkzMDIyOSw1OS40OTkxNDc3ODczMTY1MworMTQsTW9uIDcgRmViIDExLDczLjk0MzY2MjQxNDUzODM1LDc5LjU2NTE5MDQ4ODU2NTU2CisxNSxUdWUgOCBGZWIgMTEsOTYuMDAxNDkyMjc3NDE2OCwxMDAuMDQ1MDMwNjQwMTQ3MDkKKzE2LFdlZCA5IEZlYiAxMSwxMTQuMTIwNTAzODI4NzExOTIsMTE1Ljg2MjMzMDM4NDMyMjc1CisxNyxUaHUgMTAgRmViIDExLDEyMS43MTAxNjMxMzc5NTA0MiwxMjEuMTYwMTcwMjg4MDUyNTQKKzE4LEZyaSAxMSBGZWIgMTEsMTE0LjgwMTc4MTUzNjI1MjUsMTEyLjgzMDUxODg5NzU0OTg1CisxOSxTYXQgMTIgRmViIDExLDk1LjUyNjIwMTEwOTMwMjg3LDkzLjMxMDkzNjgyMjQwNjUyCisyMCxTdW4gMTMgRmViIDExLDcwLjk2NjU5NzU5OTY0OTQyLDY5LjI3MDYxMTEzMDc2NzI2CisyMSxNb24gMTQgRmViIDExLDQ4LjIyNTAxMTcyOTQwNDQ4LDQ3LjIwMjc5MjM2MjQ1NDA0CisyMixUdWUgMTUgRmViIDExLDMwLjg5NzE1NTQ4MTE1ODc2MiwzMC4zNzI1Mzg2NjA3MDk0CisyMyxXZWQgMTYgRmViIDExLDE5LjIxOTk3NDAxMzU2MDA5LDE4Ljk3NzEwMjAxNTgzNDg3MworMjQsVGh1IDE3IEZlYiAxMSwxMS44ODgyMjMyMTM3MTYyNDgsMTEuNzgyMjkzMzU2MDE1MDQyCisyNSxGcmkgMTggRmViIDExLDcuNDMzMzg5MzY1NjY0Njk4LDcuMzg4NTEzNjM2MTQ2NTY4CisyNixTYXQgMTkgRmViIDExLDQuNzQ0MzI2NTEwNTM4ODk2NSw0LjcyNTUwMzUwNzcyMjk4CisyNyxTdW4gMjAgRmViIDExLDMuMTA0MzgxMzY0OTM3MDg2LDMuMDk2NDg1NDUzNDAwNTE1CisyOCxNb24gMjEgRmViIDExLDIuMDgzOTcyMDgwODc3MTkxOCwyLjA4MDY1MDIxNzE5NDczNjMKKzI5LFR1ZSAyMiBGZWIgMTEsMS40MzMwNDA4NjIxMDAxNjczLDEuNDMxNjQzNjUzMzMyMTIzMworMzAsV2VkIDIzIEZlYiAxMSwxLjAwNjcwMjU4Nzc5ODE5MTQsMS4wMDYxMjA0NTA0NjA5NzQ5CiszMSxUaHUgMjQgRmViIDExLDAuNzIwMTk1NjczMTg2MjcxNiwwLjcxOTk1OTcwMDIwNjgwMDYKKzMyLEZyaSAyNSBGZWIgMTEsMC41MjMwNDAxMTc3NDAyMjM1LDAuNTIyOTUwMzQ5MDIxOTc1MwpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Ud29TcXVhcmVzTWl4aW5nTWlncmF0aW9uU0VJUl9SS19SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vUG9wdWxhdGlvbiBDb3VudF8wLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvVHdvU3F1YXJlc01peGluZ01pZ3JhdGlvblNFSVJfUktfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL1BvcHVsYXRpb24gQ291bnRfMC5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGEzZjk4OQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvVHdvU3F1YXJlc01peGluZ01pZ3JhdGlvblNFSVJfUktfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL1BvcHVsYXRpb24gQ291bnRfMC5jc3YKQEAgLTAsMCArMSwzMyBAQAoraXRlcmF0aW9uLHRpbWUsc3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vbm9kZS80NDk1MzY1QTAyMzI4QjE2L0xBVF9TUVJfMF8wLHN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL25vZGUvNDQ5NTM2NUEwMjMyOEIxNi9MQVRfU1FSXzFfMAorMSxUdWUgMjUgSmFuIDExLDEwMDAuMCwxMDAwLjAKKzIsV2VkIDI2IEphbiAxMSwxMDAwLjAwMDAwMDAwMDAwMDEsOTk5Ljk5OTk5OTk5OTk5OTkKKzMsVGh1IDI3IEphbiAxMSwxMDAwLjAsMTAwMC4wCis0LEZyaSAyOCBKYW4gMTEsMTAwMC4wMDAwMDAwMDAwMDAxLDk5OS45OTk5OTk5OTk5OTk5Cis1LFNhdCAyOSBKYW4gMTEsMTAwMC4wMDAwMDAwMDAwMDAxLDk5OS45OTk5OTk5OTk5OTk5Cis2LFN1biAzMCBKYW4gMTEsMTAwMC4wLDEwMDAuMAorNyxNb24gMzEgSmFuIDExLDEwMDAuMCw5OTkuOTk5OTk5OTk5OTk5OQorOCxUdWUgMSBGZWIgMTEsMTAwMC4wMDAwMDAwMDAwMDAxLDEwMDAuMAorOSxXZWQgMiBGZWIgMTEsMTAwMC4wMDAwMDAwMDAwMDAxLDk5OS45OTk5OTk5OTk5OTk5CisxMCxUaHUgMyBGZWIgMTEsMTAwMC4wLDk5OS45OTk5OTk5OTk5OTk5CisxMSxGcmkgNCBGZWIgMTEsMTAwMC4wMDAwMDAwMDAwMDAxLDk5OS45OTk5OTk5OTk5OTk5CisxMixTYXQgNSBGZWIgMTEsMTAwMC4wLDEwMDAuMAorMTMsU3VuIDYgRmViIDExLDEwMDAuMDAwMDAwMDAwMDAwMSwxMDAwLjAKKzE0LE1vbiA3IEZlYiAxMSwxMDAwLjAsMTAwMC4wCisxNSxUdWUgOCBGZWIgMTEsMTAwMC4wMDAwMDAwMDAwMDAxLDEwMDAuMAorMTYsV2VkIDkgRmViIDExLDEwMDAuMDAwMDAwMDAwMDAwMSwxMDAwLjAKKzE3LFRodSAxMCBGZWIgMTEsMTAwMC4wMDAwMDAwMDAwMDAxLDEwMDAuMAorMTgsRnJpIDExIEZlYiAxMSwxMDAwLjAsMTAwMC4wCisxOSxTYXQgMTIgRmViIDExLDEwMDAuMCwxMDAwLjAKKzIwLFN1biAxMyBGZWIgMTEsMTAwMC4wLDEwMDAuMAorMjEsTW9uIDE0IEZlYiAxMSwxMDAwLjAwMDAwMDAwMDAwMDEsMTAwMC4wCisyMixUdWUgMTUgRmViIDExLDEwMDAuMDAwMDAwMDAwMDAwMSwxMDAwLjAKKzIzLFdlZCAxNiBGZWIgMTEsMTAwMC4wLDk5OS45OTk5OTk5OTk5OTk5CisyNCxUaHUgMTcgRmViIDExLDEwMDAuMDAwMDAwMDAwMDAwMSwxMDAwLjAKKzI1LEZyaSAxOCBGZWIgMTEsMTAwMC4wLDk5OS45OTk5OTk5OTk5OTk5CisyNixTYXQgMTkgRmViIDExLDEwMDAuMDAwMDAwMDAwMDAwMSwxMDAwLjAKKzI3LFN1biAyMCBGZWIgMTEsMTAwMC4wLDk5OS45OTk5OTk5OTk5OTk5CisyOCxNb24gMjEgRmViIDExLDk5OS45OTk5OTk5OTk5OTk5LDEwMDAuMAorMjksVHVlIDIyIEZlYiAxMSwxMDAwLjAsMTAwMC4wCiszMCxXZWQgMjMgRmViIDExLDEwMDAuMCwxMDAwLjAKKzMxLFRodSAyNCBGZWIgMTEsMTAwMC4wLDEwMDAuMAorMzIsRnJpIDI1IEZlYiAxMSwxMDAwLjAsOTk5Ljk5OTk5OTk5OTk5OTkKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvVHdvU3F1YXJlc01peGluZ01pZ3JhdGlvblNFSVJfUktfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL1JfMC5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1R3b1NxdWFyZXNNaXhpbmdNaWdyYXRpb25TRUlSX1JLX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9SXzAuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ0NzJhYTIKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1R3b1NxdWFyZXNNaXhpbmdNaWdyYXRpb25TRUlSX1JLX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9SXzAuY3N2CkBAIC0wLDAgKzEsMzMgQEAKK2l0ZXJhdGlvbix0aW1lLHN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL25vZGUvNDQ5NTM2NUEwMjMyOEIxNi9MQVRfU1FSXzBfMCxzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9ub2RlLzQ0OTUzNjVBMDIzMjhCMTYvTEFUX1NRUl8xXzAKKzEsVHVlIDI1IEphbiAxMSwwLjAsMC4wCisyLFdlZCAyNiBKYW4gMTEsMC4wMjMzODY5MTIxMzkwMjcwODQsMC4yNjE1NDI2ODYyODgxNjc4NQorMyxUaHUgMjcgSmFuIDExLDAuMTAxMDU5MTM5MTE5NzczMzksMC41MjYzNTc3MDE3MDI3NTkxCis0LEZyaSAyOCBKYW4gMTEsMC4yNTM1MDY3MDYxMjM0MDQ0LDAuODc3NTIzMDQ5Njk5Njg1Cis1LFNhdCAyOSBKYW4gMTEsMC41Mjc4NTk1NTc3OTgwMTU0LDEuMzgwNDI3ODAwNTg2NzczCis2LFN1biAzMCBKYW4gMTEsMC45OTYyNDE5NzkxMjUxMTU2LDIuMTIyODUxMzIwNzIzMjQ0MgorNyxNb24gMzEgSmFuIDExLDEuNzczMzI1MjA2ODk1ODYzNiwzLjIzMzc5Njc1MTQwNDg1MTYKKzgsVHVlIDEgRmViIDExLDMuMDM5MDQyMzkwNjMxNjMyLDQuOTA4NjEzOTUzODkwNDMwNQorOSxXZWQgMiBGZWIgMTEsNS4wNzMxMjkyNzYwNjIyNDUsNy40NDM0MTM5ODkzNzI0MDEKKzEwLFRodSAzIEZlYiAxMSw4LjMwNTI2NTI1NzIzMjcsMTEuMjgzNDU1NzE3MDYzMjQKKzExLEZyaSA0IEZlYiAxMSwxMy4zODQxMDU3MDczMTg3MzksMTcuMDg4MTI4MDcxNzk5NDkKKzEyLFNhdCA1IEZlYiAxMSwyMS4yNjM4MDc5Mzk1NTQ0NjQsMjUuODA5ODQ0ODY3ODAwNDg2CisxMyxTdW4gNiBGZWIgMTEsMzMuMjkzMjYxMzYyMTU1Njc1LDM4Ljc3MDkzNjUzMjE0MTcyNQorMTQsTW9uIDcgRmViIDExLDUxLjI2NTE5NzIxMjM4Mjc5NSw1Ny42OTY3MTI2MTgwMDg2NgorMTUsVHVlIDggRmViIDExLDc3LjMzOTkwMDkxNzgzMTEzLDg0LjYyNjM1MTQxMTc3NDg5CisxNixXZWQgOSBGZWIgMTEsMTEzLjcyNzQ3ODAyNjczMDk1LDEyMS42MDE2MzMzNTU0ODcxOAorMTcsVGh1IDEwIEZlYiAxMSwxNjIuMDY0NDQ2NDAwNDA2MTUsMTcwLjA4NzkwMDg4NDE0ODEKKzE4LEZyaSAxMSBGZWIgMTEsMjIyLjYyNDk5NTYxMDg2OTQsMjMwLjI2Mzk0Mzg3NDIxNTg0CisxOSxTYXQgMTIgRmViIDExLDI5My43NzQ3MTM1ODMyNjk0MywzMDAuNTQwOTc3ODQ2OTA0MDcKKzIwLFN1biAxMyBGZWIgMTEsMzcyLjA5MTQ3NDY1MTExMzg2LDM3Ny42NzUzMzQ1NTY5MjY1CisyMSxNb24gMTQgRmViIDExLDQ1My4xNzUxOTI0MzgzMDQsNDU3LjQ5NTM5MzM5NjQzODQzCisyMixUdWUgMTUgRmViIDExLDUzMi43MDIzMjE4NTIzNjczLDUzNS44NjQwOTM0OTcwNDYzCisyMyxXZWQgMTYgRmViIDExLDYwNy4yMjA1NDIyNTY0NzA5LDYwOS40MzAxOTE4ODcxMjM5CisyNCxUaHUgMTcgRmViIDExLDY3NC40Nzc3MTExMzI4NTg1LDY3NS45NjUwOTQ5NTQ0ODg4CisyNSxGcmkgMTggRmViIDExLDczMy4zNzAzNTExNjY5ODYzLDczNC4zNDE2MTg4MzA0NTI2CisyNixTYXQgMTkgRmViIDExLDc4My42OTcxMTk1NjY2ODM1LDc4NC4zMTU4NjQ4OTc5NjQKKzI3LFN1biAyMCBGZWIgMTEsODI1Ljg2NzI3MDgxODMzNyw4MjYuMjUzNDM5OTEyNTQKKzI4LE1vbiAyMSBGZWIgMTEsODYwLjY0NDY4MzAzOTY5MjUsODYwLjg4MTUyMTAxODE1NjgKKzI5LFR1ZSAyMiBGZWIgMTEsODg4Ljk1NTE3NDQ2MDI2MTYsODg5LjA5ODE5NTAzNTc1NTUKKzMwLFdlZCAyMyBGZWIgMTEsOTExLjc1NjQ2ODA3MTA1NzUsOTExLjg0MTU5NTI3NDQ1NjQKKzMxLFRodSAyNCBGZWIgMTEsOTI5Ljk1ODk4NTU2Nzg5NDIsOTMwLjAwODkyOTUxNzU3MjcKKzMyLEZyaSAyNSBGZWIgMTEsOTQ0LjM4MzU2NDU2MzQwMjUsOTQ0LjQxMjQxNTU0NjMxODYKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvVHdvU3F1YXJlc01peGluZ01pZ3JhdGlvblNFSVJfUktfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL1NfMC5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1R3b1NxdWFyZXNNaXhpbmdNaWdyYXRpb25TRUlSX1JLX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9TXzAuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ2ZTc0YjEKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1R3b1NxdWFyZXNNaXhpbmdNaWdyYXRpb25TRUlSX1JLX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9TXzAuY3N2CkBAIC0wLDAgKzEsMzMgQEAKK2l0ZXJhdGlvbix0aW1lLHN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL25vZGUvNDQ5NTM2NUEwMjMyOEIxNi9MQVRfU1FSXzBfMCxzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9ub2RlLzQ0OTUzNjVBMDIzMjhCMTYvTEFUX1NRUl8xXzAKKzEsVHVlIDI1IEphbiAxMSwxMDAwLjAsOTk5LjAKKzIsV2VkIDI2IEphbiAxMSw5OTkuNzE5ODQ5MDYzMDMyOSw5OTcuNzYyNjA1MzYxMjY3NworMyxUaHUgMjcgSmFuIDExLDk5OS4xODQ3NTI3MTUzNjksOTk2LjQ4MjkzNTE1NTc0MjMKKzQsRnJpIDI4IEphbiAxMSw5OTguMjcyNzgxNjU4NTA2OCw5OTQuNzQzMzA2MzQxOTI2OAorNSxTYXQgMjkgSmFuIDExLDk5Ni43Mjc1Njk3NTMxODg3LDk5Mi4yMDUzNDI1NzM0MjQ3Cis2LFN1biAzMCBKYW4gMTEsOTk0LjE2NjUwODQ3NzkxODMsOTg4LjQyMzA4NTc0NTQzMzEKKzcsTW9uIDMxIEphbiAxMSw5ODkuOTkyMzA3MDMxMzk5Myw5ODIuNzQ2NTg4MjQyODQwNgorOCxUdWUgMSBGZWIgMTEsOTgzLjI4NTIxNzY1MjE5MDEsOTc0LjIwODcxOTQ2NjIyNzkKKzksV2VkIDIgRmViIDExLDk3Mi42NTMyMzI1MjUwODc2LDk2MS4zODU5OTg0NTc0MDc5CisxMCxUaHUgMyBGZWIgMTEsOTU2LjA0NjA3NjY3MzgwMjQsOTQyLjIzNzQ5NTAxNjUxODMKKzExLEZyaSA0IEZlYiAxMSw5MzAuNTcyMjM0MDQ1MzA4LDkxMy45NjU0OTkwMTA0NTcKKzEyLFNhdCA1IEZlYiAxMSw4OTIuNDM2NjA4NDcyNTM5Myw4NzMuMDE2NTk1MjQ3NjQyMworMTMsU3VuIDYgRmViIDExLDgzNy4yNTMzMDAyMzA3NDczLDgxNS40NTk0NDg3ODI4MTU1CisxNCxNb24gNyBGZWIgMTEsNzYxLjEzMDI1MjY3MTQxNTcsNzM4LjA3MzY0MzQzOTA0MworMTUsVHVlIDggRmViIDExLDY2Mi44MjMwOTk0NzA3NjE3LDY0MC4zMzQyNzM3MjIxMzMzCisxNixXZWQgOSBGZWIgMTEsNTQ2LjQ1MzcxMzA2NzE4Nyw1MjYuNzIwODI1OTEyNjczNAorMTcsVGh1IDEwIEZlYiAxMSw0MjIuNzcwMjYxMjEzNzg1Miw0MDcuNTMzOTQ0MzQwMDcyMTQKKzE4LEZyaSAxMSBGZWIgMTEsMzA2LjQ0NDg0Nzk5MDE2MTQsMjk2LjIyNzA1NzEyOTg5MzYKKzE5LFNhdCAxMiBGZWIgMTEsMjA5Ljg5Njg2Nzc5NDgzMTczLDIwMy45Mzc4OTkzOTM1MTM4NQorMjAsU3VuIDEzIEZlYiAxMSwxMzguMzM0MzczMzU1MDUwNTMsMTM1LjI2MzE4NTEwMjg3ODM3CisyMSxNb24gMTQgRmViIDExLDg5LjgwMjI0MjgwMDQyODgzLDg4LjM2NzUxMTU2NTY0MTU1CisyMixUdWUgMTUgRmViIDExLDU4Ljc2MTYxNDE5NTc5MTM0LDU4LjEzODQ0NjAyODQxMDg3NQorMjMsV2VkIDE2IEZlYiAxMSwzOS40NzkzMjMzNjU0OTMyLDM5LjIyMzY2MDgyOTMxNDA1CisyNCxUaHUgMTcgRmViIDExLDI3LjU2NTUzMzg5ODE1OTA0LDI3LjQ2NjkzMzcyNjkxNjkyCisyNSxGcmkgMTggRmViIDExLDIwLjEyMjI4NDUxNTM3MDEzLDIwLjA4ODI4MDEwNzg5NDU2NQorMjYsU2F0IDE5IEZlYiAxMSwxNS4zNzQ1NTc1NjQwODM2NzcsMTUuMzY2MTc3MDQwOTE5MTQyCisyNyxTdW4gMjAgRmViIDExLDEyLjI2OTMzODE0NjgzMDEzOSwxMi4yNzA1Mjk2Mzk4MzUwOAorMjgsTW9uIDIxIEZlYiAxMSwxMC4xODU0ODUyMTUyNTM0NCwxMC4xODk3NjAyNzMzMzk4NQorMjksVHVlIDIyIEZlYiAxMSw4Ljc1Mjg3MTg1ODk2MTkxNCw4Ljc1NzY4OTExNDE5OTA4NQorMzAsV2VkIDIzIEZlYiAxMSw3Ljc0NjY1MDk5NjY4NzQ0LDcuNzUxMDg2OTM4MjE0MzkzCiszMSxUaHUgMjQgRmViIDExLDcuMDI2ODk4OTE3NjUzODYzLDcuMDMwNjgzNjQzODU0ODk3CiszMixGcmkgMjUgRmViIDExLDYuNTA0MjM3MjcyNTMzNzQzLDYuNTA3MzU0ODIyMjEyODE4CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1R3b1NxdWFyZXNNaXhpbmdNaWdyYXRpb25TRUlSX1JLX1JlZmVyZW5jZS9UZXN0U0VJUi9ydW5wYXJhbWV0ZXJzLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvVHdvU3F1YXJlc01peGluZ01pZ3JhdGlvblNFSVJfUktfUmVmZXJlbmNlL1Rlc3RTRUlSL3J1bnBhcmFtZXRlcnMuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJlZDhmNTEKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1R3b1NxdWFyZXNNaXhpbmdNaWdyYXRpb25TRUlSX1JLX1JlZmVyZW5jZS9UZXN0U0VJUi9ydW5wYXJhbWV0ZXJzLmNzdgpAQCAtMCwwICsxLDIgQEAKK2Rpc2Vhc2VOYW1lLHBvcHVsYXRpb25JZGVudGlmaWVyLHRpbWVQZXJpb2QsZnJlcXVlbmN5RGVwZW5kZW50LHJlZmVyZW5jZVBvcHVsYXRpb25EZW5zaXR5LHJvYWROZXR3b3JrSW5mZWN0aW91c1Byb3BvcnRpb24sY2hhcmFjdGVyaXN0aWNNaXhpbmdEaXN0YW5jZSx0cmFuc21pc3Npb25SYXRlLG5vbkxpbmVhcml0eUNvZWZmaWNpZW50LHJlY292ZXJ5UmF0ZSxpbmZlY3Rpb3VzTW9ydGFsaXR5UmF0ZSxpbW11bml0eUxvc3NSYXRlLGluY3ViYXRpb25SYXRlCitUZXN0U0VJUixodW1hbiw4NjQwMDAwMCx0cnVlLDEwMC4wLDAuMDEsMi4yNSwxLjYsMS4wLDAuMywwLjAsMC4wLDAuNApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvVHdvU3F1YXJlc01peGluZ01pZ3JhdGlvblNFSVJfUktfUmVmZXJlbmNlL2F1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwvaHVtYW4vQmlydGhzXzAuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Ud29TcXVhcmVzTWl4aW5nTWlncmF0aW9uU0VJUl9SS19SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9odW1hbi9CaXJ0aHNfMC5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODMwN2NhNAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvVHdvU3F1YXJlc01peGluZ01pZ3JhdGlvblNFSVJfUktfUmVmZXJlbmNlL2F1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwvaHVtYW4vQmlydGhzXzAuY3N2CkBAIC0wLDAgKzEsMzMgQEAKK2l0ZXJhdGlvbix0aW1lLHN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL25vZGUvNDQ5NTM2NUEwMjMyOEIxNi9MQVRfU1FSXzBfMCxzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9ub2RlLzQ0OTUzNjVBMDIzMjhCMTYvTEFUX1NRUl8xXzAKKzEsVHVlIDI1IEphbiAxMSwwLjAsMC4wCisyLFdlZCAyNiBKYW4gMTEsMC4wLDAuMAorMyxUaHUgMjcgSmFuIDExLDAuMCwwLjAKKzQsRnJpIDI4IEphbiAxMSwwLjAsMC4wCis1LFNhdCAyOSBKYW4gMTEsMC4wLDAuMAorNixTdW4gMzAgSmFuIDExLDAuMCwwLjAKKzcsTW9uIDMxIEphbiAxMSwwLjAsMC4wCis4LFR1ZSAxIEZlYiAxMSwwLjAsMC4wCis5LFdlZCAyIEZlYiAxMSwwLjAsMC4wCisxMCxUaHUgMyBGZWIgMTEsMC4wLDAuMAorMTEsRnJpIDQgRmViIDExLDAuMCwwLjAKKzEyLFNhdCA1IEZlYiAxMSwwLjAsMC4wCisxMyxTdW4gNiBGZWIgMTEsMC4wLDAuMAorMTQsTW9uIDcgRmViIDExLDAuMCwwLjAKKzE1LFR1ZSA4IEZlYiAxMSwwLjAsMC4wCisxNixXZWQgOSBGZWIgMTEsMC4wLDAuMAorMTcsVGh1IDEwIEZlYiAxMSwwLjAsMC4wCisxOCxGcmkgMTEgRmViIDExLDAuMCwwLjAKKzE5LFNhdCAxMiBGZWIgMTEsMC4wLDAuMAorMjAsU3VuIDEzIEZlYiAxMSwwLjAsMC4wCisyMSxNb24gMTQgRmViIDExLDAuMCwwLjAKKzIyLFR1ZSAxNSBGZWIgMTEsMC4wLDAuMAorMjMsV2VkIDE2IEZlYiAxMSwwLjAsMC4wCisyNCxUaHUgMTcgRmViIDExLDAuMCwwLjAKKzI1LEZyaSAxOCBGZWIgMTEsMC4wLDAuMAorMjYsU2F0IDE5IEZlYiAxMSwwLjAsMC4wCisyNyxTdW4gMjAgRmViIDExLDAuMCwwLjAKKzI4LE1vbiAyMSBGZWIgMTEsMC4wLDAuMAorMjksVHVlIDIyIEZlYiAxMSwwLjAsMC4wCiszMCxXZWQgMjMgRmViIDExLDAuMCwwLjAKKzMxLFRodSAyNCBGZWIgMTEsMC4wLDAuMAorMzIsRnJpIDI1IEZlYiAxMSwwLjAsMC4wCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1R3b1NxdWFyZXNNaXhpbmdNaWdyYXRpb25TRUlSX1JLX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL2h1bWFuL0NvdW50XzAuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Ud29TcXVhcmVzTWl4aW5nTWlncmF0aW9uU0VJUl9SS19SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9odW1hbi9Db3VudF8wLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iOTU1MTZhCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Ud29TcXVhcmVzTWl4aW5nTWlncmF0aW9uU0VJUl9SS19SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9odW1hbi9Db3VudF8wLmNzdgpAQCAtMCwwICsxLDMzIEBACitpdGVyYXRpb24sdGltZSxzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9ub2RlLzQ0OTUzNjVBMDIzMjhCMTYvTEFUX1NRUl8wXzAsc3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vbm9kZS80NDk1MzY1QTAyMzI4QjE2L0xBVF9TUVJfMV8wCisxLFR1ZSAyNSBKYW4gMTEsMTAwMC4wLDEwMDAuMAorMixXZWQgMjYgSmFuIDExLDEwMDAuMCwxMDAwLjAKKzMsVGh1IDI3IEphbiAxMSwxMDAwLjAsMTAwMC4wCis0LEZyaSAyOCBKYW4gMTEsMTAwMC4wLDEwMDAuMAorNSxTYXQgMjkgSmFuIDExLDEwMDAuMCwxMDAwLjAKKzYsU3VuIDMwIEphbiAxMSwxMDAwLjAsMTAwMC4wCis3LE1vbiAzMSBKYW4gMTEsMTAwMC4wLDEwMDAuMAorOCxUdWUgMSBGZWIgMTEsMTAwMC4wLDEwMDAuMAorOSxXZWQgMiBGZWIgMTEsMTAwMC4wLDEwMDAuMAorMTAsVGh1IDMgRmViIDExLDEwMDAuMCwxMDAwLjAKKzExLEZyaSA0IEZlYiAxMSwxMDAwLjAsMTAwMC4wCisxMixTYXQgNSBGZWIgMTEsMTAwMC4wLDEwMDAuMAorMTMsU3VuIDYgRmViIDExLDEwMDAuMCwxMDAwLjAKKzE0LE1vbiA3IEZlYiAxMSwxMDAwLjAsMTAwMC4wCisxNSxUdWUgOCBGZWIgMTEsMTAwMC4wLDEwMDAuMAorMTYsV2VkIDkgRmViIDExLDEwMDAuMCwxMDAwLjAKKzE3LFRodSAxMCBGZWIgMTEsMTAwMC4wLDEwMDAuMAorMTgsRnJpIDExIEZlYiAxMSwxMDAwLjAsMTAwMC4wCisxOSxTYXQgMTIgRmViIDExLDEwMDAuMCwxMDAwLjAKKzIwLFN1biAxMyBGZWIgMTEsMTAwMC4wLDEwMDAuMAorMjEsTW9uIDE0IEZlYiAxMSwxMDAwLjAsMTAwMC4wCisyMixUdWUgMTUgRmViIDExLDEwMDAuMCwxMDAwLjAKKzIzLFdlZCAxNiBGZWIgMTEsMTAwMC4wLDEwMDAuMAorMjQsVGh1IDE3IEZlYiAxMSwxMDAwLjAsMTAwMC4wCisyNSxGcmkgMTggRmViIDExLDEwMDAuMCwxMDAwLjAKKzI2LFNhdCAxOSBGZWIgMTEsMTAwMC4wLDEwMDAuMAorMjcsU3VuIDIwIEZlYiAxMSwxMDAwLjAsMTAwMC4wCisyOCxNb24gMjEgRmViIDExLDEwMDAuMCwxMDAwLjAKKzI5LFR1ZSAyMiBGZWIgMTEsMTAwMC4wLDEwMDAuMAorMzAsV2VkIDIzIEZlYiAxMSwxMDAwLjAsMTAwMC4wCiszMSxUaHUgMjQgRmViIDExLDEwMDAuMCwxMDAwLjAKKzMyLEZyaSAyNSBGZWIgMTEsMTAwMC4wLDEwMDAuMApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Ud29TcXVhcmVzTWl4aW5nTWlncmF0aW9uU0VJUl9SS19SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9odW1hbi9EZWF0aHNfMC5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1R3b1NxdWFyZXNNaXhpbmdNaWdyYXRpb25TRUlSX1JLX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL2h1bWFuL0RlYXRoc18wLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MzA3Y2E0Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Ud29TcXVhcmVzTWl4aW5nTWlncmF0aW9uU0VJUl9SS19SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9odW1hbi9EZWF0aHNfMC5jc3YKQEAgLTAsMCArMSwzMyBAQAoraXRlcmF0aW9uLHRpbWUsc3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vbm9kZS80NDk1MzY1QTAyMzI4QjE2L0xBVF9TUVJfMF8wLHN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL25vZGUvNDQ5NTM2NUEwMjMyOEIxNi9MQVRfU1FSXzFfMAorMSxUdWUgMjUgSmFuIDExLDAuMCwwLjAKKzIsV2VkIDI2IEphbiAxMSwwLjAsMC4wCiszLFRodSAyNyBKYW4gMTEsMC4wLDAuMAorNCxGcmkgMjggSmFuIDExLDAuMCwwLjAKKzUsU2F0IDI5IEphbiAxMSwwLjAsMC4wCis2LFN1biAzMCBKYW4gMTEsMC4wLDAuMAorNyxNb24gMzEgSmFuIDExLDAuMCwwLjAKKzgsVHVlIDEgRmViIDExLDAuMCwwLjAKKzksV2VkIDIgRmViIDExLDAuMCwwLjAKKzEwLFRodSAzIEZlYiAxMSwwLjAsMC4wCisxMSxGcmkgNCBGZWIgMTEsMC4wLDAuMAorMTIsU2F0IDUgRmViIDExLDAuMCwwLjAKKzEzLFN1biA2IEZlYiAxMSwwLjAsMC4wCisxNCxNb24gNyBGZWIgMTEsMC4wLDAuMAorMTUsVHVlIDggRmViIDExLDAuMCwwLjAKKzE2LFdlZCA5IEZlYiAxMSwwLjAsMC4wCisxNyxUaHUgMTAgRmViIDExLDAuMCwwLjAKKzE4LEZyaSAxMSBGZWIgMTEsMC4wLDAuMAorMTksU2F0IDEyIEZlYiAxMSwwLjAsMC4wCisyMCxTdW4gMTMgRmViIDExLDAuMCwwLjAKKzIxLE1vbiAxNCBGZWIgMTEsMC4wLDAuMAorMjIsVHVlIDE1IEZlYiAxMSwwLjAsMC4wCisyMyxXZWQgMTYgRmViIDExLDAuMCwwLjAKKzI0LFRodSAxNyBGZWIgMTEsMC4wLDAuMAorMjUsRnJpIDE4IEZlYiAxMSwwLjAsMC4wCisyNixTYXQgMTkgRmViIDExLDAuMCwwLjAKKzI3LFN1biAyMCBGZWIgMTEsMC4wLDAuMAorMjgsTW9uIDIxIEZlYiAxMSwwLjAsMC4wCisyOSxUdWUgMjIgRmViIDExLDAuMCwwLjAKKzMwLFdlZCAyMyBGZWIgMTEsMC4wLDAuMAorMzEsVGh1IDI0IEZlYiAxMSwwLjAsMC4wCiszMixGcmkgMjUgRmViIDExLDAuMCwwLjAKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvVHdvU3F1YXJlc01peGluZ01pZ3JhdGlvblNFSVJfUktfUmVmZXJlbmNlL2F1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwvaHVtYW4vRGVuc2l0eV8wLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvVHdvU3F1YXJlc01peGluZ01pZ3JhdGlvblNFSVJfUktfUmVmZXJlbmNlL2F1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwvaHVtYW4vRGVuc2l0eV8wLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNjI1YmNmCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Ud29TcXVhcmVzTWl4aW5nTWlncmF0aW9uU0VJUl9SS19SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9odW1hbi9EZW5zaXR5XzAuY3N2CkBAIC0wLDAgKzEsMzMgQEAKK2l0ZXJhdGlvbix0aW1lLHN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL25vZGUvNDQ5NTM2NUEwMjMyOEIxNi9MQVRfU1FSXzBfMCxzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9ub2RlLzQ0OTUzNjVBMDIzMjhCMTYvTEFUX1NRUl8xXzAKKzEsVHVlIDI1IEphbiAxMSwwLjQ5MzgyNzE2MDQ5MzgyNzEzLDAuNDkzODI3MTYwNDkzODI3MTMKKzIsV2VkIDI2IEphbiAxMSwwLjQ5MzgyNzE2MDQ5MzgyNzEzLDAuNDkzODI3MTYwNDkzODI3MTMKKzMsVGh1IDI3IEphbiAxMSwwLjQ5MzgyNzE2MDQ5MzgyNzEzLDAuNDkzODI3MTYwNDkzODI3MTMKKzQsRnJpIDI4IEphbiAxMSwwLjQ5MzgyNzE2MDQ5MzgyNzEzLDAuNDkzODI3MTYwNDkzODI3MTMKKzUsU2F0IDI5IEphbiAxMSwwLjQ5MzgyNzE2MDQ5MzgyNzEzLDAuNDkzODI3MTYwNDkzODI3MTMKKzYsU3VuIDMwIEphbiAxMSwwLjQ5MzgyNzE2MDQ5MzgyNzEzLDAuNDkzODI3MTYwNDkzODI3MTMKKzcsTW9uIDMxIEphbiAxMSwwLjQ5MzgyNzE2MDQ5MzgyNzEzLDAuNDkzODI3MTYwNDkzODI3MTMKKzgsVHVlIDEgRmViIDExLDAuNDkzODI3MTYwNDkzODI3MTMsMC40OTM4MjcxNjA0OTM4MjcxMworOSxXZWQgMiBGZWIgMTEsMC40OTM4MjcxNjA0OTM4MjcxMywwLjQ5MzgyNzE2MDQ5MzgyNzEzCisxMCxUaHUgMyBGZWIgMTEsMC40OTM4MjcxNjA0OTM4MjcxMywwLjQ5MzgyNzE2MDQ5MzgyNzEzCisxMSxGcmkgNCBGZWIgMTEsMC40OTM4MjcxNjA0OTM4MjcxMywwLjQ5MzgyNzE2MDQ5MzgyNzEzCisxMixTYXQgNSBGZWIgMTEsMC40OTM4MjcxNjA0OTM4MjcxMywwLjQ5MzgyNzE2MDQ5MzgyNzEzCisxMyxTdW4gNiBGZWIgMTEsMC40OTM4MjcxNjA0OTM4MjcxMywwLjQ5MzgyNzE2MDQ5MzgyNzEzCisxNCxNb24gNyBGZWIgMTEsMC40OTM4MjcxNjA0OTM4MjcxMywwLjQ5MzgyNzE2MDQ5MzgyNzEzCisxNSxUdWUgOCBGZWIgMTEsMC40OTM4MjcxNjA0OTM4MjcxMywwLjQ5MzgyNzE2MDQ5MzgyNzEzCisxNixXZWQgOSBGZWIgMTEsMC40OTM4MjcxNjA0OTM4MjcxMywwLjQ5MzgyNzE2MDQ5MzgyNzEzCisxNyxUaHUgMTAgRmViIDExLDAuNDkzODI3MTYwNDkzODI3MTMsMC40OTM4MjcxNjA0OTM4MjcxMworMTgsRnJpIDExIEZlYiAxMSwwLjQ5MzgyNzE2MDQ5MzgyNzEzLDAuNDkzODI3MTYwNDkzODI3MTMKKzE5LFNhdCAxMiBGZWIgMTEsMC40OTM4MjcxNjA0OTM4MjcxMywwLjQ5MzgyNzE2MDQ5MzgyNzEzCisyMCxTdW4gMTMgRmViIDExLDAuNDkzODI3MTYwNDkzODI3MTMsMC40OTM4MjcxNjA0OTM4MjcxMworMjEsTW9uIDE0IEZlYiAxMSwwLjQ5MzgyNzE2MDQ5MzgyNzEzLDAuNDkzODI3MTYwNDkzODI3MTMKKzIyLFR1ZSAxNSBGZWIgMTEsMC40OTM4MjcxNjA0OTM4MjcxMywwLjQ5MzgyNzE2MDQ5MzgyNzEzCisyMyxXZWQgMTYgRmViIDExLDAuNDkzODI3MTYwNDkzODI3MTMsMC40OTM4MjcxNjA0OTM4MjcxMworMjQsVGh1IDE3IEZlYiAxMSwwLjQ5MzgyNzE2MDQ5MzgyNzEzLDAuNDkzODI3MTYwNDkzODI3MTMKKzI1LEZyaSAxOCBGZWIgMTEsMC40OTM4MjcxNjA0OTM4MjcxMywwLjQ5MzgyNzE2MDQ5MzgyNzEzCisyNixTYXQgMTkgRmViIDExLDAuNDkzODI3MTYwNDkzODI3MTMsMC40OTM4MjcxNjA0OTM4MjcxMworMjcsU3VuIDIwIEZlYiAxMSwwLjQ5MzgyNzE2MDQ5MzgyNzEzLDAuNDkzODI3MTYwNDkzODI3MTMKKzI4LE1vbiAyMSBGZWIgMTEsMC40OTM4MjcxNjA0OTM4MjcxMywwLjQ5MzgyNzE2MDQ5MzgyNzEzCisyOSxUdWUgMjIgRmViIDExLDAuNDkzODI3MTYwNDkzODI3MTMsMC40OTM4MjcxNjA0OTM4MjcxMworMzAsV2VkIDIzIEZlYiAxMSwwLjQ5MzgyNzE2MDQ5MzgyNzEzLDAuNDkzODI3MTYwNDkzODI3MTMKKzMxLFRodSAyNCBGZWIgMTEsMC40OTM4MjcxNjA0OTM4MjcxMywwLjQ5MzgyNzE2MDQ5MzgyNzEzCiszMixGcmkgMjUgRmViIDExLDAuNDkzODI3MTYwNDkzODI3MTMsMC40OTM4MjcxNjA0OTM4MjcxMwpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Ud29TcXVhcmVzTWl4aW5nTWlncmF0aW9uU0VJUl9SS19SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9odW1hbi9JbmNpZGVuY2VfMC5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1R3b1NxdWFyZXNNaXhpbmdNaWdyYXRpb25TRUlSX1JLX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL2h1bWFuL0luY2lkZW5jZV8wLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MzA3Y2E0Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Ud29TcXVhcmVzTWl4aW5nTWlncmF0aW9uU0VJUl9SS19SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9odW1hbi9JbmNpZGVuY2VfMC5jc3YKQEAgLTAsMCArMSwzMyBAQAoraXRlcmF0aW9uLHRpbWUsc3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vbm9kZS80NDk1MzY1QTAyMzI4QjE2L0xBVF9TUVJfMF8wLHN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL25vZGUvNDQ5NTM2NUEwMjMyOEIxNi9MQVRfU1FSXzFfMAorMSxUdWUgMjUgSmFuIDExLDAuMCwwLjAKKzIsV2VkIDI2IEphbiAxMSwwLjAsMC4wCiszLFRodSAyNyBKYW4gMTEsMC4wLDAuMAorNCxGcmkgMjggSmFuIDExLDAuMCwwLjAKKzUsU2F0IDI5IEphbiAxMSwwLjAsMC4wCis2LFN1biAzMCBKYW4gMTEsMC4wLDAuMAorNyxNb24gMzEgSmFuIDExLDAuMCwwLjAKKzgsVHVlIDEgRmViIDExLDAuMCwwLjAKKzksV2VkIDIgRmViIDExLDAuMCwwLjAKKzEwLFRodSAzIEZlYiAxMSwwLjAsMC4wCisxMSxGcmkgNCBGZWIgMTEsMC4wLDAuMAorMTIsU2F0IDUgRmViIDExLDAuMCwwLjAKKzEzLFN1biA2IEZlYiAxMSwwLjAsMC4wCisxNCxNb24gNyBGZWIgMTEsMC4wLDAuMAorMTUsVHVlIDggRmViIDExLDAuMCwwLjAKKzE2LFdlZCA5IEZlYiAxMSwwLjAsMC4wCisxNyxUaHUgMTAgRmViIDExLDAuMCwwLjAKKzE4LEZyaSAxMSBGZWIgMTEsMC4wLDAuMAorMTksU2F0IDEyIEZlYiAxMSwwLjAsMC4wCisyMCxTdW4gMTMgRmViIDExLDAuMCwwLjAKKzIxLE1vbiAxNCBGZWIgMTEsMC4wLDAuMAorMjIsVHVlIDE1IEZlYiAxMSwwLjAsMC4wCisyMyxXZWQgMTYgRmViIDExLDAuMCwwLjAKKzI0LFRodSAxNyBGZWIgMTEsMC4wLDAuMAorMjUsRnJpIDE4IEZlYiAxMSwwLjAsMC4wCisyNixTYXQgMTkgRmViIDExLDAuMCwwLjAKKzI3LFN1biAyMCBGZWIgMTEsMC4wLDAuMAorMjgsTW9uIDIxIEZlYiAxMSwwLjAsMC4wCisyOSxUdWUgMjIgRmViIDExLDAuMCwwLjAKKzMwLFdlZCAyMyBGZWIgMTEsMC4wLDAuMAorMzEsVGh1IDI0IEZlYiAxMSwwLjAsMC4wCiszMixGcmkgMjUgRmViIDExLDAuMCwwLjAKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvVHdvU3F1YXJlc01peGluZ01pZ3JhdGlvblNFSVJfUktfUmVmZXJlbmNlL2F1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwvcnVucGFyYW1ldGVycy5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1R3b1NxdWFyZXNNaXhpbmdNaWdyYXRpb25TRUlSX1JLX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL3J1bnBhcmFtZXRlcnMuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA2ODU1YjUKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1R3b1NxdWFyZXNNaXhpbmdNaWdyYXRpb25TRUlSX1JLX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL3J1bnBhcmFtZXRlcnMuY3N2CkBAIC0wLDAgKzEsMiBAQAorcG9wdWxhdGlvbklkZW50aWZpZXIsbmFtZSx0YXJnZXRJU09LZXksYmlydGhSYXRlLGRlYXRoUmF0ZSx0aW1lUGVyaW9kCitodW1hbixhdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsLCwwLjAsMC4wLDg2NDAwMDAwClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Ud29TcXVhcmVzTWl4aW5nU0VJUl9GRF9SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vRGlzZWFzZSBEZWF0aHNfMC5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1R3b1NxdWFyZXNNaXhpbmdTRUlSX0ZEX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9EaXNlYXNlIERlYXRoc18wLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MzA3Y2E0Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Ud29TcXVhcmVzTWl4aW5nU0VJUl9GRF9SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vRGlzZWFzZSBEZWF0aHNfMC5jc3YKQEAgLTAsMCArMSwzMyBAQAoraXRlcmF0aW9uLHRpbWUsc3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vbm9kZS80NDk1MzY1QTAyMzI4QjE2L0xBVF9TUVJfMF8wLHN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL25vZGUvNDQ5NTM2NUEwMjMyOEIxNi9MQVRfU1FSXzFfMAorMSxUdWUgMjUgSmFuIDExLDAuMCwwLjAKKzIsV2VkIDI2IEphbiAxMSwwLjAsMC4wCiszLFRodSAyNyBKYW4gMTEsMC4wLDAuMAorNCxGcmkgMjggSmFuIDExLDAuMCwwLjAKKzUsU2F0IDI5IEphbiAxMSwwLjAsMC4wCis2LFN1biAzMCBKYW4gMTEsMC4wLDAuMAorNyxNb24gMzEgSmFuIDExLDAuMCwwLjAKKzgsVHVlIDEgRmViIDExLDAuMCwwLjAKKzksV2VkIDIgRmViIDExLDAuMCwwLjAKKzEwLFRodSAzIEZlYiAxMSwwLjAsMC4wCisxMSxGcmkgNCBGZWIgMTEsMC4wLDAuMAorMTIsU2F0IDUgRmViIDExLDAuMCwwLjAKKzEzLFN1biA2IEZlYiAxMSwwLjAsMC4wCisxNCxNb24gNyBGZWIgMTEsMC4wLDAuMAorMTUsVHVlIDggRmViIDExLDAuMCwwLjAKKzE2LFdlZCA5IEZlYiAxMSwwLjAsMC4wCisxNyxUaHUgMTAgRmViIDExLDAuMCwwLjAKKzE4LEZyaSAxMSBGZWIgMTEsMC4wLDAuMAorMTksU2F0IDEyIEZlYiAxMSwwLjAsMC4wCisyMCxTdW4gMTMgRmViIDExLDAuMCwwLjAKKzIxLE1vbiAxNCBGZWIgMTEsMC4wLDAuMAorMjIsVHVlIDE1IEZlYiAxMSwwLjAsMC4wCisyMyxXZWQgMTYgRmViIDExLDAuMCwwLjAKKzI0LFRodSAxNyBGZWIgMTEsMC4wLDAuMAorMjUsRnJpIDE4IEZlYiAxMSwwLjAsMC4wCisyNixTYXQgMTkgRmViIDExLDAuMCwwLjAKKzI3LFN1biAyMCBGZWIgMTEsMC4wLDAuMAorMjgsTW9uIDIxIEZlYiAxMSwwLjAsMC4wCisyOSxUdWUgMjIgRmViIDExLDAuMCwwLjAKKzMwLFdlZCAyMyBGZWIgMTEsMC4wLDAuMAorMzEsVGh1IDI0IEZlYiAxMSwwLjAsMC4wCiszMixGcmkgMjUgRmViIDExLDAuMCwwLjAKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvVHdvU3F1YXJlc01peGluZ1NFSVJfRkRfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL0VfMC5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1R3b1NxdWFyZXNNaXhpbmdTRUlSX0ZEX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9FXzAuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ2MGU2MTEKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1R3b1NxdWFyZXNNaXhpbmdTRUlSX0ZEX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9FXzAuY3N2CkBAIC0wLDAgKzEsMzMgQEAKK2l0ZXJhdGlvbix0aW1lLHN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL25vZGUvNDQ5NTM2NUEwMjMyOEIxNi9MQVRfU1FSXzBfMCxzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9ub2RlLzQ0OTUzNjVBMDIzMjhCMTYvTEFUX1NRUl8xXzAKKzEsVHVlIDI1IEphbiAxMSwwLjAsMC4wCisyLFdlZCAyNiBKYW4gMTEsMC4wNzYxOTA0NzYxOTA0NzYyLDEuNTIyMjg1NzE0Mjg1NzE0NQorMyxUaHUgMjcgSmFuIDExLDAuMDk5MDQzNTU1NTU1NTU1NTUsMS45NzczNDc2NTcxNDI4NTc0Cis0LEZyaSAyOCBKYW4gMTEsMC4xODk1NzU5ODYxOTE5OTE1NCwyLjg1NzI1Mjk5MTk2NDQ1NAorNSxTYXQgMjkgSmFuIDExLDAuMzI1NDM4NzM0NzA0Mjg5MSw0LjA4Mzg4ODYzNjU2NjkwNworNixTdW4gMzAgSmFuIDExLDAuNTQ1OTUwODE0ODEwNzA4Myw1LjgzOTA3Mjg0MDE3ODcxNAorNyxNb24gMzEgSmFuIDExLDAuODk1NTI0MzEwNTYxNjI5Niw4LjMzOTA3NzY0NTQyMjgzCis4LFR1ZSAxIEZlYiAxMSwxLjQ0NDY2OTA4NTUwNTk1NDUsMTEuODkwODUzNzQ3NDM4MjQ2Cis5LFdlZCAyIEZlYiAxMSwyLjI5OTUyMTM0NTY0OTU3NDcsMTYuOTE1OTE4NTcxMDgyOTA1CisxMCxUaHUgMyBGZWIgMTEsMy42MTk0ODgzNzg0OTYyNTI2LDIzLjk4MjY2Mjk2MDk4Mzg3NworMTEsRnJpIDQgRmViIDExLDUuNjQxNzExODQ5NjExMzM4NSwzMy44MzM4ODMyOTc0Nzg1MTUKKzEyLFNhdCA1IEZlYiAxMSw4LjcxNDg5OTk3NzA0Njg1OCw0Ny4zOTMwMzk5OTU5MDEwMQorMTMsU3VuIDYgRmViIDExLDEzLjM0MzY0MjcwNTY5NTAyNyw2NS43MTM2MTgxMDQ1NzE2MQorMTQsTW9uIDcgRmViIDExLDIwLjI0MTM3NjgzMjIwOTA0Miw4OS44MDgzMDM1ODkxODk2OQorMTUsVHVlIDggRmViIDExLDMwLjM4MjIxMjg5ODM0ODIzNiwxMjAuMjY0MDc0NTQxNTg4MzQKKzE2LFdlZCA5IEZlYiAxMSw0NS4wMjQ0ODIwNzUyOTIxNCwxNTYuNTQ3OTE3NjczNTYzNAorMTcsVGh1IDEwIEZlYiAxMSw2NS42NDYxNzAyNjA1MjQ0NiwxOTYuMDE3OTA5MDc1MjY1CisxOCxGcmkgMTEgRmViIDExLDkzLjY4MTk2MDE5OTY0MDU0LDIzMy4wMDQ1ODM1NzAyODY1NworMTksU2F0IDEyIEZlYiAxMSwxMjkuOTAwOTg1ODAzNzUwNDIsMjU4LjkzODUzMjYxMTk5OTgKKzIwLFN1biAxMyBGZWIgMTEsMTczLjI4NzEzNTIzNTU2MDQ3LDI2NC44NDY5MTUyNTU1ODQ1CisyMSxNb24gMTQgRmViIDExLDIxOS41NDc3NjI4MDk4MDg4NiwyNDYuMjg5NTI1MTY0OTAyNAorMjIsVHVlIDE1IEZlYiAxMSwyNjAuMDc1OTUzMDM3NTgzNjQsMjA3LjQ2Njk1NTgzNDQzNzEKKzIzLFdlZCAxNiBGZWIgMTEsMjgzLjEyODkwMzU4NDk3Njg1LDE1OS42NTY2MTgyNzc2MTY1MworMjQsVGh1IDE3IEZlYiAxMSwyNzguODE2NDY1ODMzNzA0LDExNC4zNjU2NTcyOTk0MzcxNgorMjUsRnJpIDE4IEZlYiAxMSwyNDYuMTYyNTUxNzc5OTk2NDgsNzcuOTM4MjEwMTMyNjEyNzcKKzI2LFNhdCAxOSBGZWIgMTEsMTk1LjYxNjc5MzMzNDI4NTM4LDUxLjQ2NTEzMTgxNjk1NzgzCisyNyxTdW4gMjAgRmViIDExLDE0Mi40ODM4MTExMjg1MjcsMzMuMzUxOTk2NzI3NzA5MzUKKzI4LE1vbiAyMSBGZWIgMTEsOTcuNTgyODUwMDE0MjEwMywyMS4zODU0OTgwOTM3NTQxOAorMjksVHVlIDIyIEZlYiAxMSw2NC4zMDczNDc2NzU0NjEyMiwxMy42MzgxMzc3ODcyNDk4NzgKKzMwLFdlZCAyMyBGZWIgMTEsNDEuNDQyMTYwMjA2NzEzODg2LDguNjc5ODgzODQxNjIyODQ1CiszMSxUaHUgMjQgRmViIDExLDI2LjM3ODAxMjE1MDUxOTY1NSw1LjUyNjMxNjg2NTg2MzU4MQorMzIsRnJpIDI1IEZlYiAxMSwxNi42ODIxOTQwMjA0NTAzMDQsMy41MjYwODQ5NDU0Mjg1MzUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvVHdvU3F1YXJlc01peGluZ1NFSVJfRkRfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL0lfMC5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1R3b1NxdWFyZXNNaXhpbmdTRUlSX0ZEX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9JXzAuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ2NWVmMjYKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1R3b1NxdWFyZXNNaXhpbmdTRUlSX0ZEX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9JXzAuY3N2CkBAIC0wLDAgKzEsMzMgQEAKK2l0ZXJhdGlvbix0aW1lLHN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL25vZGUvNDQ5NTM2NUEwMjMyOEIxNi9MQVRfU1FSXzBfMCxzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9ub2RlLzQ0OTUzNjVBMDIzMjhCMTYvTEFUX1NRUl8xXzAKKzEsVHVlIDI1IEphbiAxMSwwLjAsMS4wCisyLFdlZCAyNiBKYW4gMTEsMC4wLDAuNworMyxUaHUgMjcgSmFuIDExLDAuMDMwNDc2MTkwNDc2MTkwNDgsMS4wOTg5MTQyODU3MTQyODU3Cis0LEZyaSAyOCBKYW4gMTEsMC4wNjA5NTA3NTU1NTU1NTU1NiwxLjU2MDE3OTA2Mjg1NzE0MworNSxTYXQgMjkgSmFuIDExLDAuMTE4NDk1OTIzMzY1Njg1NTEsMi4yMzUwMjY1NDA3ODU3ODIKKzYsU3VuIDMwIEphbiAxMSwwLjIxMzEyMjY0MDIzNzY5NTUsMy4xOTgwNzQwMzMxNzY4MTAzCis3LE1vbiAzMSBKYW4gMTEsMC4zNjc1NjYxNzQwOTA2NzAxNiw0LjU3NDI4MDk1OTI5NTI1MworOCxUdWUgMSBGZWIgMTEsMC42MTU1MDYwNDYwODgxMjEsNi41Mzc2Mjc3Mjk2NzU4MDkKKzksV2VkIDIgRmViIDExLDEuMDA4NzIxODY2NDY0MDY2Nyw5LjMzMjY4MDkwOTc0ODM2NQorMTAsVGh1IDMgRmViIDExLDEuNjI1OTEzODQ0Nzg0Njc2NiwxMy4yOTkyNDQwNjUyNTcwMTcKKzExLEZyaSA0IEZlYiAxMSwyLjU4NTkzNTA0Mjc0Nzc3NDcsMTguOTAyNTM2MDMwMDczNDYzCisxMixTYXQgNSBGZWIgMTEsNC4wNjY4MzkyNjk3Njc5NzgsMjYuNzY1MzI4NTQwMDQyODMKKzEzLFN1biA2IEZlYiAxMSw2LjMzMjc0NzQ3OTY1NjMyOCwzNy42OTI5NDU5NzYzOTAzOQorMTQsTW9uIDcgRmViIDExLDkuNzcwMzgwMzE4MDM3NDQxLDUyLjY3MDUwOTQyNTMwMTkxNQorMTUsVHVlIDggRmViIDExLDE0LjkzNTgxNjk1NTUwOTgyNyw3Mi43OTI2NzgwMzMzODcyMgorMTYsV2VkIDkgRmViIDExLDIyLjYwNzk1NzAyODE5NjE3NSw5OS4wNjA1MDQ0NDAwMDY0CisxNyxUaHUgMTAgRmViIDExLDMzLjgzNTM2Mjc0OTg1NDE4NCwxMzEuOTYxNTIwMTc3NDI5ODYKKzE4LEZyaSAxMSBGZWIgMTEsNDkuOTQzMjIyMDI5MTA3NzE2LDE3MC43ODAyMjc3NTQzMDY5CisxOSxTYXQgMTIgRmViIDExLDcyLjQzMzAzOTUwMDIzMTYyLDIxMi43NDc5OTI4NTYxMjk0OQorMjAsU3VuIDEzIEZlYiAxMSwxMDIuNjYzNTIxOTcxNjYyMywyNTIuNDk5MDA4MDQ0MDkwNTQKKzIxLE1vbiAxNCBGZWIgMTEsMTQxLjE3OTMxOTQ3NDM4NzgsMjgyLjY4ODA3MTczMzA5NzIKKzIyLFR1ZSAxNSBGZWIgMTEsMTg2LjY0NDYyODc1NTk5NSwyOTYuMzk3NDYwMjc5MTI5CisyMyxXZWQgMTYgRmViIDExLDIzNC42ODE2MjEzNDQyMjk5NywyOTAuNDY1MDA0NTI5MTY1MQorMjQsVGh1IDE3IEZlYiAxMSwyNzcuNTI4Njk2Mzc0OTUxNywyNjcuMTg4MTUwNDgxNDYyMjMKKzI1LEZyaSAxOCBGZWIgMTEsMzA1Ljc5NjY3Mzc5NTk0NzgsMjMyLjc3Nzk2ODI1Njc5ODQzCisyNixTYXQgMTkgRmViIDExLDMxMi41MjI2OTIzNjkxNjIxLDE5NC4xMTk4NjE4MzI4MDQwMgorMjcsU3VuIDIwIEZlYiAxMSwyOTcuMDEyNjAxOTkyMTI3NjYsMTU2LjQ2OTk1NjAwOTc0NTk0CisyOCxNb24gMjEgRmViIDExLDI2NC45MDIzNDU4NDU5MDAyLDEyMi44Njk3Njc4OTc5MDU5CisyOSxUdWUgMjIgRmViIDExLDIyNC40NjQ3ODIwOTc4MTQyNCw5NC41NjMwMzY3NjYwMzU4CiszMCxXZWQgMjMgRmViIDExLDE4Mi44NDgyODY1Mzg2NTQ0Niw3MS42NDkzODA4NTExMjUwMgorMzEsVGh1IDI0IEZlYiAxMSwxNDQuNTcwNjY0NjU5NzQzNjcsNTMuNjI2NTIwMTMyNDM2NjUKKzMyLEZyaSAyNSBGZWIgMTEsMTExLjc1MDY3MDEyMjAyODQyLDM5Ljc0OTA5MDgzOTA1MTA5CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1R3b1NxdWFyZXNNaXhpbmdTRUlSX0ZEX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9JbmNpZGVuY2VfMC5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1R3b1NxdWFyZXNNaXhpbmdTRUlSX0ZEX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9JbmNpZGVuY2VfMC5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTYxZjk1OAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvVHdvU3F1YXJlc01peGluZ1NFSVJfRkRfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL0luY2lkZW5jZV8wLmNzdgpAQCAtMCwwICsxLDMzIEBACitpdGVyYXRpb24sdGltZSxzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9ub2RlLzQ0OTUzNjVBMDIzMjhCMTYvTEFUX1NRUl8wXzAsc3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vbm9kZS80NDk1MzY1QTAyMzI4QjE2L0xBVF9TUVJfMV8wCisxLFR1ZSAyNSBKYW4gMTEsMC4wLDAuMAorMixXZWQgMjYgSmFuIDExLDAuMDc2MTkwNDc2MTkwNDc2MiwxLjUyMjI4NTcxNDI4NTcxNDUKKzMsVGh1IDI3IEphbiAxMSwwLjA1MzMyOTI2OTg0MTI2OTg0LDEuMDYzOTc2MjI4NTcxNDI4NworNCxGcmkgMjggSmFuIDExLDAuMTMwMTQ5ODUyODU4NjU4MiwxLjY3MDg0NDM5NzY3ODczOTUKKzUsU2F0IDI5IEphbiAxMSwwLjIxMTY5MzE0Mjk4OTA5NDE3LDIuMzY5NTM2ODQxMzg4MjM0MworNixTdW4gMzAgSmFuIDExLDAuMzUwNjg3NTczOTg4MTM0OSwzLjM4ODczOTY1ODIzODU3MDUKKzcsTW9uIDMxIEphbiAxMSwwLjU2Nzk1MzgyMTY3NTIwNDcsNC44MzU2MzM5NDEzMTU2MDIKKzgsVHVlIDEgRmViIDExLDAuOTA3MzU0NDk5MTY4OTc2Nyw2Ljg4NzQwNzE2MDE4NDU1Cis5LFdlZCAyIEZlYiAxMSwxLjQzMjcxOTg5NDM0NjAwMiw5Ljc4MTQwNjMyMjYxOTk1NgorMTAsVGh1IDMgRmViIDExLDIuMjM5Nzc1NTcxMTA2NTA3NywxMy44MzMxMTE4MTgzMzQxMzUKKzExLEZyaSA0IEZlYiAxMSwzLjQ3MDAxODgyMjUxMzU4NywxOS40NDQyODU1MjA4ODgxOQorMTIsU2F0IDUgRmViIDExLDUuMzI5ODcyODY3MjgwMDU1LDI3LjA5MjcxMDAxNzQxMzkwNAorMTMsU3VuIDYgRmViIDExLDguMTE0NzAyNzE5NDY2OTEyLDM3LjI3Nzc5NDEwNzAzMTAwNgorMTQsTW9uIDcgRmViIDExLDEyLjIzNTE5MTIwODc5MjAyNCw1MC4zODAxMzI3MjY0NDY3MworMTUsVHVlIDggRmViIDExLDE4LjIzNzM4Njc5OTAyMjgxLDY2LjM3OTA5MjM4ODA3NDUzCisxNixXZWQgOSBGZWIgMTEsMjYuNzk1MTU0MzM2MjgzMTk3LDg0LjM4OTQ3Mjk0ODYxMDQyCisxNyxUaHUgMTAgRmViIDExLDM4LjYzMTQ4MTAxNTM0OTE3LDEwMi4wODkxNTg0NzExMjY5NgorMTgsRnJpIDExIEZlYiAxMSw1NC4yOTQyNTgwNDMzMjU4NiwxMTUuMzkzODM4MTI1MTI3NTcKKzE5LFNhdCAxMiBGZWIgMTEsNzMuNjkxODA5NjgzOTY2MDgsMTE5LjEzNTc4MjQ2OTgyNzg2CisyMCxTdW4gMTMgRmViIDExLDk1LjM0NjU0Mzc1MzMxMDIxLDEwOS40ODM3OTU2ODgzODQ2NQorMjEsTW9uIDE0IEZlYiAxMSwxMTUuNTc1NDgxNjY4NDcyNTgsODcuMzgxMzc2MDExNTUxNworMjIsVHVlIDE1IEZlYiAxMSwxMjguMzQ3Mjk1MzUxNjk4MzYsNTkuNjkzMjQwNzM1NDk1NjkKKzIzLFdlZCAxNiBGZWIgMTEsMTI3LjA4MzMzMTc2MjQyNjY3LDM1LjE3NjQ0NDc3Njk1NDI1NgorMjQsVGh1IDE3IEZlYiAxMSwxMDguOTM5MTIzNjgyNzE3ODksMTguNTcxNjg2MzMyODY3MjQKKzI1LEZyaSAxOCBGZWIgMTEsNzguODcyNjcyMjc5Nzc0MDYsOS4zMTg4MTU3NTI5NTA0NzQKKzI2LFNhdCAxOSBGZWIgMTEsNDcuOTE5MjYyMjY2Mjg3NDgsNC43MDIyMDU3MzczOTAxNjkKKzI3LFN1biAyMCBGZWIgMTEsMjUuMTEzNzM1MTI3OTU1OCwyLjQ3MjkxNzYzNzUzNDY1MjQKKzI4LE1vbiAyMSBGZWIgMTEsMTIuMDkyNTYzMzM3MDk0MDksMS4zNzQzMDAwNTcxMjg1NzQ0CisyOSxUdWUgMjIgRmViIDExLDUuNzU3NjM3NjY2OTM1MDQ3NSwwLjgwNjgzODkzMDk5NzM3MTUKKzMwLFdlZCAyMyBGZWIgMTEsMi44NTc3NTE2MDE0MzcxNTksMC40OTcwMDExNjkyNzI5MTc5MworMzEsVGh1IDI0IEZlYiAxMSwxLjUxMjcxNjAyNjQ5MTMyNjIsMC4zMTgzODY1NjA4ODk4NzQ3NworMzIsRnJpIDI1IEZlYiAxMSwwLjg1NTM4NjczMDEzODUwOTcsMC4yMTAyOTQ4MjU5MTAzODY2MgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Ud29TcXVhcmVzTWl4aW5nU0VJUl9GRF9SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vUG9wdWxhdGlvbiBDb3VudF8wLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvVHdvU3F1YXJlc01peGluZ1NFSVJfRkRfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL1BvcHVsYXRpb24gQ291bnRfMC5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGM1NjFlYgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvVHdvU3F1YXJlc01peGluZ1NFSVJfRkRfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL1BvcHVsYXRpb24gQ291bnRfMC5jc3YKQEAgLTAsMCArMSwzMyBAQAoraXRlcmF0aW9uLHRpbWUsc3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vbm9kZS80NDk1MzY1QTAyMzI4QjE2L0xBVF9TUVJfMF8wLHN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL25vZGUvNDQ5NTM2NUEwMjMyOEIxNi9MQVRfU1FSXzFfMAorMSxUdWUgMjUgSmFuIDExLDEwMDAuMCwxMDAwLjAKKzIsV2VkIDI2IEphbiAxMSwxMDAwLjAsMTAwMC4wCiszLFRodSAyNyBKYW4gMTEsMTAwMC4wLDEwMDAuMDAwMDAwMDAwMDAwMQorNCxGcmkgMjggSmFuIDExLDEwMDAuMDAwMDAwMDAwMDAwMSwxMDAwLjAwMDAwMDAwMDAwMDEKKzUsU2F0IDI5IEphbiAxMSwxMDAwLjAsMTAwMC4wMDAwMDAwMDAwMDAyCis2LFN1biAzMCBKYW4gMTEsMTAwMC4wLDEwMDAuMAorNyxNb24gMzEgSmFuIDExLDEwMDAuMCwxMDAwLjAwMDAwMDAwMDAwMDEKKzgsVHVlIDEgRmViIDExLDEwMDAuMDAwMDAwMDAwMDAwMSwxMDAwLjAKKzksV2VkIDIgRmViIDExLDEwMDAuMDAwMDAwMDAwMDAwMSwxMDAwLjAKKzEwLFRodSAzIEZlYiAxMSwxMDAwLjAwMDAwMDAwMDAwMDEsMTAwMC4wCisxMSxGcmkgNCBGZWIgMTEsMTAwMC4wLDEwMDAuMDAwMDAwMDAwMDAwMQorMTIsU2F0IDUgRmViIDExLDEwMDAuMDAwMDAwMDAwMDAwMSwxMDAwLjAKKzEzLFN1biA2IEZlYiAxMSwxMDAwLjAwMDAwMDAwMDAwMDEsMTAwMC4wMDAwMDAwMDAwMDAxCisxNCxNb24gNyBGZWIgMTEsMTAwMC4wMDAwMDAwMDAwMDAyLDEwMDAuMAorMTUsVHVlIDggRmViIDExLDEwMDAuMDAwMDAwMDAwMDAwMSwxMDAwLjAKKzE2LFdlZCA5IEZlYiAxMSwxMDAwLjAwMDAwMDAwMDAwMDEsMTAwMC4wCisxNyxUaHUgMTAgRmViIDExLDEwMDAuMCw5OTkuOTk5OTk5OTk5OTk5OQorMTgsRnJpIDExIEZlYiAxMSwxMDAwLjAwMDAwMDAwMDAwMDEsMTAwMC4wCisxOSxTYXQgMTIgRmViIDExLDEwMDAuMDAwMDAwMDAwMDAwMiw5OTkuOTk5OTk5OTk5OTk5OQorMjAsU3VuIDEzIEZlYiAxMSwxMDAwLjAwMDAwMDAwMDAwMDIsOTk5Ljk5OTk5OTk5OTk5OTgKKzIxLE1vbiAxNCBGZWIgMTEsMTAwMC4wMDAwMDAwMDAwMDAyLDEwMDAuMAorMjIsVHVlIDE1IEZlYiAxMSwxMDAwLjAwMDAwMDAwMDAwMDEsMTAwMC4wCisyMyxXZWQgMTYgRmViIDExLDEwMDAuMDAwMDAwMDAwMDAwMiw5OTkuOTk5OTk5OTk5OTk5OQorMjQsVGh1IDE3IEZlYiAxMSwxMDAwLjAwMDAwMDAwMDAwMDEsOTk5Ljk5OTk5OTk5OTk5OTkKKzI1LEZyaSAxOCBGZWIgMTEsMTAwMC4wLDk5OS45OTk5OTk5OTk5OTk5CisyNixTYXQgMTkgRmViIDExLDEwMDAuMDAwMDAwMDAwMDAwMSw5OTkuOTk5OTk5OTk5OTk5OQorMjcsU3VuIDIwIEZlYiAxMSwxMDAwLjAwMDAwMDAwMDAwMDEsOTk5Ljk5OTk5OTk5OTk5OTkKKzI4LE1vbiAyMSBGZWIgMTEsMTAwMC4wMDAwMDAwMDAwMDAxLDEwMDAuMAorMjksVHVlIDIyIEZlYiAxMSwxMDAwLjAwMDAwMDAwMDAwMDEsMTAwMC4wCiszMCxXZWQgMjMgRmViIDExLDEwMDAuMDAwMDAwMDAwMDAwMiwxMDAwLjAKKzMxLFRodSAyNCBGZWIgMTEsMTAwMC4wMDAwMDAwMDAwMDAyLDk5OS45OTk5OTk5OTk5OTk5CiszMixGcmkgMjUgRmViIDExLDEwMDAuMDAwMDAwMDAwMDAwMSwxMDAwLjAKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvVHdvU3F1YXJlc01peGluZ1NFSVJfRkRfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL1JfMC5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1R3b1NxdWFyZXNNaXhpbmdTRUlSX0ZEX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9SXzAuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE2MjUzYjkKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1R3b1NxdWFyZXNNaXhpbmdTRUlSX0ZEX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9SXzAuY3N2CkBAIC0wLDAgKzEsMzMgQEAKK2l0ZXJhdGlvbix0aW1lLHN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL25vZGUvNDQ5NTM2NUEwMjMyOEIxNi9MQVRfU1FSXzBfMCxzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9ub2RlLzQ0OTUzNjVBMDIzMjhCMTYvTEFUX1NRUl8xXzAKKzEsVHVlIDI1IEphbiAxMSwwLjAsMC4wCisyLFdlZCAyNiBKYW4gMTEsMC4wLDAuMworMyxUaHUgMjcgSmFuIDExLDAuMCwwLjUxCis0LEZyaSAyOCBKYW4gMTEsMC4wMDkxNDI4NTcxNDI4NTcxNDQsMC44Mzk2NzQyODU3MTQyODU3Cis1LFNhdCAyOSBKYW4gMTEsMC4wMjc0MjgwODM4MDk1MjM4MSwxLjMwNzcyODAwNDU3MTQyODYKKzYsU3VuIDMwIEphbiAxMSwwLjA2Mjk3Njg2MDgxOTIyOTQ2LDEuOTc4MjM1OTY2ODA3MTYzCis3LE1vbiAzMSBKYW4gMTEsMC4xMjY5MTM2NTI4OTA1MzgxLDIuOTM3NjU4MTc2NzYwMjA2Cis4LFR1ZSAxIEZlYiAxMSwwLjIzNzE4MzUwNTExNzczOTE3LDQuMzA5OTQyNDY0NTQ4NzgyCis5LFdlZCAyIEZlYiAxMSwwLjQyMTgzNTMxODk0NDE3NTUsNi4yNzEyMzA3ODM0NTE1MjUKKzEwLFRodSAzIEZlYiAxMSwwLjcyNDQ1MTg3ODg4MzM5NTUsOS4wNzEwMzUwNTYzNzYwMzUKKzExLEZyaSA0IEZlYiAxMSwxLjIxMjIyNjAzMjMxODc5ODYsMTMuMDYwODA4Mjc1OTUzMTQKKzEyLFNhdCA1IEZlYiAxMSwxLjk4ODAwNjU0NTE0MzEzMSwxOC43MzE1NjkwODQ5NzUxNzcKKzEzLFN1biA2IEZlYiAxMSwzLjIwODA1ODMyNjA3MzUyNCwyNi43NjExNjc2NDY5ODgwMjgKKzE0LE1vbiA3IEZlYiAxMSw1LjEwNzg4MjU2OTk3MDQyMywzOC4wNjkwNTE0Mzk5MDUxNDUKKzE1LFR1ZSA4IEZlYiAxMSw4LjAzODk5NjY2NTM4MTY1NSw1My44NzAyMDQyNjc0OTU3MgorMTYsV2VkIDkgRmViIDExLDEyLjUxOTc0MTc1MjAzNDYwMSw3NS43MDgwMDc2Nzc1MTE4OQorMTcsVGh1IDEwIEZlYiAxMSwxOS4zMDIxMjg4NjA0OTM0NTQsMTA1LjQyNjE1OTAwOTUxMzgxCisxOCxGcmkgMTEgRmViIDExLDI5LjQ1MjczNzY4NTQ0OTcxLDE0NS4wMTQ2MTUwNjI3NDI3NgorMTksU2F0IDEyIEZlYiAxMSw0NC40MzU3MDQyOTQxODIwMjQsMTk2LjI0ODY4MzM4OTAzNDgyCisyMCxTdW4gMTMgRmViIDExLDY2LjE2NTYxNjE0NDI1MTUyLDI2MC4wNzMwODEyNDU4NzM2NQorMjEsTW9uIDE0IEZlYiAxMSw5Ni45NjQ2NzI3MzU3NTAyMSwzMzUuODIyNzgzNjU5MTAwOAorMjIsVHVlIDE1IEZlYiAxMSwxMzkuMzE4NDY4NTc4MDY2NTYsNDIwLjYyOTIwNTE3OTAzCisyMyxXZWQgMTYgRmViIDExLDE5NS4zMTE4NTcyMDQ4NjUwNSw1MDkuNTQ4NDQzMjYyNzY4NworMjQsVGh1IDE3IEZlYiAxMSwyNjUuNzE2MzQzNjA4MTM0LDU5Ni42ODc5NDQ2MjE1MTgyCisyNSxGcmkgMTggRmViIDExLDM0OC45NzQ5NTI1MjA2MTk1LDY3Ni44NDQzODk3NjU5NTY5CisyNixTYXQgMTkgRmViIDExLDQ0MC43MTM5NTQ2NTk0MDM4NCw3NDYuNjc3NzgwMjQyOTk2NAorMjcsU3VuIDIwIEZlYiAxMSw1MzQuNDcwNzYyMzcwMTUyNCw4MDQuOTEzNzM4NzkyODM3NgorMjgsTW9uIDIxIEZlYiAxMSw2MjMuNTc0NTQyOTY3NzkwOCw4NTEuODU0NzI1NTk1NzYxNQorMjksVHVlIDIyIEZlYiAxMSw3MDMuMDQ1MjQ2NzIxNTYwOCw4ODguNzE1NjU1OTY1MTMzMgorMzAsV2VkIDIzIEZlYiAxMSw3NzAuMzg0NjgxMzUwOTA1MSw5MTcuMDg0NTY2OTk0OTQ0CiszMSxUaHUgMjQgRmViIDExLDgyNS4yMzkxNjczMTI1MDE0LDkzOC41NzkzODEyNTAyODE1CiszMixGcmkgMjUgRmViIDExLDg2OC42MTAzNjY3MTA0MjQ1LDk1NC42NjczMzcyOTAwMTI1CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1R3b1NxdWFyZXNNaXhpbmdTRUlSX0ZEX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9TXzAuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Ud29TcXVhcmVzTWl4aW5nU0VJUl9GRF9SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vU18wLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YjQyODlmCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Ud29TcXVhcmVzTWl4aW5nU0VJUl9GRF9SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vU18wLmNzdgpAQCAtMCwwICsxLDMzIEBACitpdGVyYXRpb24sdGltZSxzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9ub2RlLzQ0OTUzNjVBMDIzMjhCMTYvTEFUX1NRUl8wXzAsc3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vbm9kZS80NDk1MzY1QTAyMzI4QjE2L0xBVF9TUVJfMV8wCisxLFR1ZSAyNSBKYW4gMTEsMTAwMC4wLDk5OS4wCisyLFdlZCAyNiBKYW4gMTEsOTk5LjkyMzgwOTUyMzgwOTUsOTk3LjQ3NzcxNDI4NTcxNDMKKzMsVGh1IDI3IEphbiAxMSw5OTkuODcwNDgwMjUzOTY4Myw5OTYuNDEzNzM4MDU3MTQzCis0LEZyaSAyOCBKYW4gMTEsOTk5Ljc0MDMzMDQwMTEwOTYsOTk0Ljc0Mjg5MzY1OTQ2NDIKKzUsU2F0IDI5IEphbiAxMSw5OTkuNTI4NjM3MjU4MTIwNSw5OTIuMzczMzU2ODE4MDc2Cis2LFN1biAzMCBKYW4gMTEsOTk5LjE3Nzk0OTY4NDEzMjQsOTg4Ljk4NDYxNzE1OTgzNzQKKzcsTW9uIDMxIEphbiAxMSw5OTguNjA5OTk1ODYyNDU3MSw5ODQuMTQ4OTgzMjE4NTIxOAorOCxUdWUgMSBGZWIgMTEsOTk3LjcwMjY0MTM2MzI4ODIsOTc3LjI2MTU3NjA1ODMzNzMKKzksV2VkIDIgRmViIDExLDk5Ni4yNjk5MjE0Njg5NDIyLDk2Ny40ODAxNjk3MzU3MTczCisxMCxUaHUgMyBGZWIgMTEsOTk0LjAzMDE0NTg5NzgzNTcsOTUzLjY0NzA1NzkxNzM4MzEKKzExLEZyaSA0IEZlYiAxMSw5OTAuNTYwMTI3MDc1MzIyMiw5MzQuMjAyNzcyMzk2NDk0OQorMTIsU2F0IDUgRmViIDExLDk4NS4yMzAyNTQyMDgwNDIxLDkwNy4xMTAwNjIzNzkwODEKKzEzLFN1biA2IEZlYiAxMSw5NzcuMTE1NTUxNDg4NTc1Miw4NjkuODMyMjY4MjcyMDUKKzE0LE1vbiA3IEZlYiAxMSw5NjQuODgwMzYwMjc5NzgzMiw4MTkuNDUyMTM1NTQ1NjAzMworMTUsVHVlIDggRmViIDExLDk0Ni42NDI5NzM0ODA3NjA0LDc1My4wNzMwNDMxNTc1Mjg3CisxNixXZWQgOSBGZWIgMTEsOTE5Ljg0NzgxOTE0NDQ3NzIsNjY4LjY4MzU3MDIwODkxODIKKzE3LFRodSAxMCBGZWIgMTEsODgxLjIxNjMzODEyOTEyOCw1NjYuNTk0NDExNzM3NzkxMgorMTgsRnJpIDExIEZlYiAxMSw4MjYuOTIyMDgwMDg1ODAyMSw0NTEuMjAwNTczNjEyNjYzNworMTksU2F0IDEyIEZlYiAxMSw3NTMuMjMwMjcwNDAxODM2LDMzMi4wNjQ3OTExNDI4MzU4CisyMCxTdW4gMTMgRmViIDExLDY1Ny44ODM3MjY2NDg1MjU4LDIyMi41ODA5OTU0NTQ0NTExNworMjEsTW9uIDE0IEZlYiAxMSw1NDIuMzA4MjQ0OTgwMDUzMiwxMzUuMTk5NjE5NDQyODk5NDYKKzIyLFR1ZSAxNSBGZWIgMTEsNDEzLjk2MDk0OTYyODM1NDksNzUuNTA2Mzc4NzA3NDAzNzcKKzIzLFdlZCAxNiBGZWIgMTEsMjg2Ljg3NzYxNzg2NTkyODI0LDQwLjMyOTkzMzkzMDQ0OTUxCisyNCxUaHUgMTcgRmViIDExLDE3Ny45Mzg0OTQxODMyMTAzNywyMS43NTgyNDc1OTc1ODIyNzIKKzI1LEZyaSAxOCBGZWIgMTEsOTkuMDY1ODIxOTAzNDM2MywxMi40Mzk0MzE4NDQ2MzE3OTgKKzI2LFNhdCAxOSBGZWIgMTEsNTEuMTQ2NTU5NjM3MTQ4ODIsNy43MzcyMjYxMDcyNDE2Mjk1CisyNyxTdW4gMjAgRmViIDExLDI2LjAzMjgyNDUwOTE5MzAyLDUuMjY0MzA4NDY5NzA2OTc3CisyOCxNb24gMjEgRmViIDExLDEzLjk0MDI2MTE3MjA5ODkzLDMuODkwMDA4NDEyNTc4NDAyNQorMjksVHVlIDIyIEZlYiAxMSw4LjE4MjYyMzUwNTE2Mzg4MiwzLjA4MzE2OTQ4MTU4MTAzMQorMzAsV2VkIDIzIEZlYiAxMSw1LjMyNDg3MTkwMzcyNjcyMywyLjU4NjE2ODMxMjMwODExMworMzEsVGh1IDI0IEZlYiAxMSwzLjgxMjE1NTg3NzIzNTM5NjUsMi4yNjc3ODE3NTE0MTgyMzgKKzMyLEZyaSAyNSBGZWIgMTEsMi45NTY3NjkxNDcwOTY4ODY3LDIuMDU3NDg2OTI1NTA3ODUxNgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Ud29TcXVhcmVzTWl4aW5nU0VJUl9GRF9SZWZlcmVuY2UvVGVzdFNFSVIvcnVucGFyYW1ldGVycy5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1R3b1NxdWFyZXNNaXhpbmdTRUlSX0ZEX1JlZmVyZW5jZS9UZXN0U0VJUi9ydW5wYXJhbWV0ZXJzLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZWQ4ZjUxCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Ud29TcXVhcmVzTWl4aW5nU0VJUl9GRF9SZWZlcmVuY2UvVGVzdFNFSVIvcnVucGFyYW1ldGVycy5jc3YKQEAgLTAsMCArMSwyIEBACitkaXNlYXNlTmFtZSxwb3B1bGF0aW9uSWRlbnRpZmllcix0aW1lUGVyaW9kLGZyZXF1ZW5jeURlcGVuZGVudCxyZWZlcmVuY2VQb3B1bGF0aW9uRGVuc2l0eSxyb2FkTmV0d29ya0luZmVjdGlvdXNQcm9wb3J0aW9uLGNoYXJhY3RlcmlzdGljTWl4aW5nRGlzdGFuY2UsdHJhbnNtaXNzaW9uUmF0ZSxub25MaW5lYXJpdHlDb2VmZmljaWVudCxyZWNvdmVyeVJhdGUsaW5mZWN0aW91c01vcnRhbGl0eVJhdGUsaW1tdW5pdHlMb3NzUmF0ZSxpbmN1YmF0aW9uUmF0ZQorVGVzdFNFSVIsaHVtYW4sODY0MDAwMDAsdHJ1ZSwxMDAuMCwwLjAxLDIuMjUsMS42LDEuMCwwLjMsMC4wLDAuMCwwLjQKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1R3b1NxdWFyZXNNaXhpbmdTRUlSX0ZEX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL2h1bWFuL0JpcnRoc18wLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvVHdvU3F1YXJlc01peGluZ1NFSVJfRkRfUmVmZXJlbmNlL2F1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwvaHVtYW4vQmlydGhzXzAuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgzMDdjYTQKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1R3b1NxdWFyZXNNaXhpbmdTRUlSX0ZEX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL2h1bWFuL0JpcnRoc18wLmNzdgpAQCAtMCwwICsxLDMzIEBACitpdGVyYXRpb24sdGltZSxzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9ub2RlLzQ0OTUzNjVBMDIzMjhCMTYvTEFUX1NRUl8wXzAsc3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vbm9kZS80NDk1MzY1QTAyMzI4QjE2L0xBVF9TUVJfMV8wCisxLFR1ZSAyNSBKYW4gMTEsMC4wLDAuMAorMixXZWQgMjYgSmFuIDExLDAuMCwwLjAKKzMsVGh1IDI3IEphbiAxMSwwLjAsMC4wCis0LEZyaSAyOCBKYW4gMTEsMC4wLDAuMAorNSxTYXQgMjkgSmFuIDExLDAuMCwwLjAKKzYsU3VuIDMwIEphbiAxMSwwLjAsMC4wCis3LE1vbiAzMSBKYW4gMTEsMC4wLDAuMAorOCxUdWUgMSBGZWIgMTEsMC4wLDAuMAorOSxXZWQgMiBGZWIgMTEsMC4wLDAuMAorMTAsVGh1IDMgRmViIDExLDAuMCwwLjAKKzExLEZyaSA0IEZlYiAxMSwwLjAsMC4wCisxMixTYXQgNSBGZWIgMTEsMC4wLDAuMAorMTMsU3VuIDYgRmViIDExLDAuMCwwLjAKKzE0LE1vbiA3IEZlYiAxMSwwLjAsMC4wCisxNSxUdWUgOCBGZWIgMTEsMC4wLDAuMAorMTYsV2VkIDkgRmViIDExLDAuMCwwLjAKKzE3LFRodSAxMCBGZWIgMTEsMC4wLDAuMAorMTgsRnJpIDExIEZlYiAxMSwwLjAsMC4wCisxOSxTYXQgMTIgRmViIDExLDAuMCwwLjAKKzIwLFN1biAxMyBGZWIgMTEsMC4wLDAuMAorMjEsTW9uIDE0IEZlYiAxMSwwLjAsMC4wCisyMixUdWUgMTUgRmViIDExLDAuMCwwLjAKKzIzLFdlZCAxNiBGZWIgMTEsMC4wLDAuMAorMjQsVGh1IDE3IEZlYiAxMSwwLjAsMC4wCisyNSxGcmkgMTggRmViIDExLDAuMCwwLjAKKzI2LFNhdCAxOSBGZWIgMTEsMC4wLDAuMAorMjcsU3VuIDIwIEZlYiAxMSwwLjAsMC4wCisyOCxNb24gMjEgRmViIDExLDAuMCwwLjAKKzI5LFR1ZSAyMiBGZWIgMTEsMC4wLDAuMAorMzAsV2VkIDIzIEZlYiAxMSwwLjAsMC4wCiszMSxUaHUgMjQgRmViIDExLDAuMCwwLjAKKzMyLEZyaSAyNSBGZWIgMTEsMC4wLDAuMApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Ud29TcXVhcmVzTWl4aW5nU0VJUl9GRF9SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9odW1hbi9Db3VudF8wLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvVHdvU3F1YXJlc01peGluZ1NFSVJfRkRfUmVmZXJlbmNlL2F1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwvaHVtYW4vQ291bnRfMC5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjk1NTE2YQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvVHdvU3F1YXJlc01peGluZ1NFSVJfRkRfUmVmZXJlbmNlL2F1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwvaHVtYW4vQ291bnRfMC5jc3YKQEAgLTAsMCArMSwzMyBAQAoraXRlcmF0aW9uLHRpbWUsc3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vbm9kZS80NDk1MzY1QTAyMzI4QjE2L0xBVF9TUVJfMF8wLHN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL25vZGUvNDQ5NTM2NUEwMjMyOEIxNi9MQVRfU1FSXzFfMAorMSxUdWUgMjUgSmFuIDExLDEwMDAuMCwxMDAwLjAKKzIsV2VkIDI2IEphbiAxMSwxMDAwLjAsMTAwMC4wCiszLFRodSAyNyBKYW4gMTEsMTAwMC4wLDEwMDAuMAorNCxGcmkgMjggSmFuIDExLDEwMDAuMCwxMDAwLjAKKzUsU2F0IDI5IEphbiAxMSwxMDAwLjAsMTAwMC4wCis2LFN1biAzMCBKYW4gMTEsMTAwMC4wLDEwMDAuMAorNyxNb24gMzEgSmFuIDExLDEwMDAuMCwxMDAwLjAKKzgsVHVlIDEgRmViIDExLDEwMDAuMCwxMDAwLjAKKzksV2VkIDIgRmViIDExLDEwMDAuMCwxMDAwLjAKKzEwLFRodSAzIEZlYiAxMSwxMDAwLjAsMTAwMC4wCisxMSxGcmkgNCBGZWIgMTEsMTAwMC4wLDEwMDAuMAorMTIsU2F0IDUgRmViIDExLDEwMDAuMCwxMDAwLjAKKzEzLFN1biA2IEZlYiAxMSwxMDAwLjAsMTAwMC4wCisxNCxNb24gNyBGZWIgMTEsMTAwMC4wLDEwMDAuMAorMTUsVHVlIDggRmViIDExLDEwMDAuMCwxMDAwLjAKKzE2LFdlZCA5IEZlYiAxMSwxMDAwLjAsMTAwMC4wCisxNyxUaHUgMTAgRmViIDExLDEwMDAuMCwxMDAwLjAKKzE4LEZyaSAxMSBGZWIgMTEsMTAwMC4wLDEwMDAuMAorMTksU2F0IDEyIEZlYiAxMSwxMDAwLjAsMTAwMC4wCisyMCxTdW4gMTMgRmViIDExLDEwMDAuMCwxMDAwLjAKKzIxLE1vbiAxNCBGZWIgMTEsMTAwMC4wLDEwMDAuMAorMjIsVHVlIDE1IEZlYiAxMSwxMDAwLjAsMTAwMC4wCisyMyxXZWQgMTYgRmViIDExLDEwMDAuMCwxMDAwLjAKKzI0LFRodSAxNyBGZWIgMTEsMTAwMC4wLDEwMDAuMAorMjUsRnJpIDE4IEZlYiAxMSwxMDAwLjAsMTAwMC4wCisyNixTYXQgMTkgRmViIDExLDEwMDAuMCwxMDAwLjAKKzI3LFN1biAyMCBGZWIgMTEsMTAwMC4wLDEwMDAuMAorMjgsTW9uIDIxIEZlYiAxMSwxMDAwLjAsMTAwMC4wCisyOSxUdWUgMjIgRmViIDExLDEwMDAuMCwxMDAwLjAKKzMwLFdlZCAyMyBGZWIgMTEsMTAwMC4wLDEwMDAuMAorMzEsVGh1IDI0IEZlYiAxMSwxMDAwLjAsMTAwMC4wCiszMixGcmkgMjUgRmViIDExLDEwMDAuMCwxMDAwLjAKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvVHdvU3F1YXJlc01peGluZ1NFSVJfRkRfUmVmZXJlbmNlL2F1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwvaHVtYW4vRGVhdGhzXzAuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Ud29TcXVhcmVzTWl4aW5nU0VJUl9GRF9SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9odW1hbi9EZWF0aHNfMC5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODMwN2NhNAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvVHdvU3F1YXJlc01peGluZ1NFSVJfRkRfUmVmZXJlbmNlL2F1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwvaHVtYW4vRGVhdGhzXzAuY3N2CkBAIC0wLDAgKzEsMzMgQEAKK2l0ZXJhdGlvbix0aW1lLHN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL25vZGUvNDQ5NTM2NUEwMjMyOEIxNi9MQVRfU1FSXzBfMCxzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9ub2RlLzQ0OTUzNjVBMDIzMjhCMTYvTEFUX1NRUl8xXzAKKzEsVHVlIDI1IEphbiAxMSwwLjAsMC4wCisyLFdlZCAyNiBKYW4gMTEsMC4wLDAuMAorMyxUaHUgMjcgSmFuIDExLDAuMCwwLjAKKzQsRnJpIDI4IEphbiAxMSwwLjAsMC4wCis1LFNhdCAyOSBKYW4gMTEsMC4wLDAuMAorNixTdW4gMzAgSmFuIDExLDAuMCwwLjAKKzcsTW9uIDMxIEphbiAxMSwwLjAsMC4wCis4LFR1ZSAxIEZlYiAxMSwwLjAsMC4wCis5LFdlZCAyIEZlYiAxMSwwLjAsMC4wCisxMCxUaHUgMyBGZWIgMTEsMC4wLDAuMAorMTEsRnJpIDQgRmViIDExLDAuMCwwLjAKKzEyLFNhdCA1IEZlYiAxMSwwLjAsMC4wCisxMyxTdW4gNiBGZWIgMTEsMC4wLDAuMAorMTQsTW9uIDcgRmViIDExLDAuMCwwLjAKKzE1LFR1ZSA4IEZlYiAxMSwwLjAsMC4wCisxNixXZWQgOSBGZWIgMTEsMC4wLDAuMAorMTcsVGh1IDEwIEZlYiAxMSwwLjAsMC4wCisxOCxGcmkgMTEgRmViIDExLDAuMCwwLjAKKzE5LFNhdCAxMiBGZWIgMTEsMC4wLDAuMAorMjAsU3VuIDEzIEZlYiAxMSwwLjAsMC4wCisyMSxNb24gMTQgRmViIDExLDAuMCwwLjAKKzIyLFR1ZSAxNSBGZWIgMTEsMC4wLDAuMAorMjMsV2VkIDE2IEZlYiAxMSwwLjAsMC4wCisyNCxUaHUgMTcgRmViIDExLDAuMCwwLjAKKzI1LEZyaSAxOCBGZWIgMTEsMC4wLDAuMAorMjYsU2F0IDE5IEZlYiAxMSwwLjAsMC4wCisyNyxTdW4gMjAgRmViIDExLDAuMCwwLjAKKzI4LE1vbiAyMSBGZWIgMTEsMC4wLDAuMAorMjksVHVlIDIyIEZlYiAxMSwwLjAsMC4wCiszMCxXZWQgMjMgRmViIDExLDAuMCwwLjAKKzMxLFRodSAyNCBGZWIgMTEsMC4wLDAuMAorMzIsRnJpIDI1IEZlYiAxMSwwLjAsMC4wCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1R3b1NxdWFyZXNNaXhpbmdTRUlSX0ZEX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL2h1bWFuL0RlbnNpdHlfMC5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1R3b1NxdWFyZXNNaXhpbmdTRUlSX0ZEX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL2h1bWFuL0RlbnNpdHlfMC5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTYyNWJjZgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvVHdvU3F1YXJlc01peGluZ1NFSVJfRkRfUmVmZXJlbmNlL2F1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwvaHVtYW4vRGVuc2l0eV8wLmNzdgpAQCAtMCwwICsxLDMzIEBACitpdGVyYXRpb24sdGltZSxzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9ub2RlLzQ0OTUzNjVBMDIzMjhCMTYvTEFUX1NRUl8wXzAsc3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vbm9kZS80NDk1MzY1QTAyMzI4QjE2L0xBVF9TUVJfMV8wCisxLFR1ZSAyNSBKYW4gMTEsMC40OTM4MjcxNjA0OTM4MjcxMywwLjQ5MzgyNzE2MDQ5MzgyNzEzCisyLFdlZCAyNiBKYW4gMTEsMC40OTM4MjcxNjA0OTM4MjcxMywwLjQ5MzgyNzE2MDQ5MzgyNzEzCiszLFRodSAyNyBKYW4gMTEsMC40OTM4MjcxNjA0OTM4MjcxMywwLjQ5MzgyNzE2MDQ5MzgyNzEzCis0LEZyaSAyOCBKYW4gMTEsMC40OTM4MjcxNjA0OTM4MjcxMywwLjQ5MzgyNzE2MDQ5MzgyNzEzCis1LFNhdCAyOSBKYW4gMTEsMC40OTM4MjcxNjA0OTM4MjcxMywwLjQ5MzgyNzE2MDQ5MzgyNzEzCis2LFN1biAzMCBKYW4gMTEsMC40OTM4MjcxNjA0OTM4MjcxMywwLjQ5MzgyNzE2MDQ5MzgyNzEzCis3LE1vbiAzMSBKYW4gMTEsMC40OTM4MjcxNjA0OTM4MjcxMywwLjQ5MzgyNzE2MDQ5MzgyNzEzCis4LFR1ZSAxIEZlYiAxMSwwLjQ5MzgyNzE2MDQ5MzgyNzEzLDAuNDkzODI3MTYwNDkzODI3MTMKKzksV2VkIDIgRmViIDExLDAuNDkzODI3MTYwNDkzODI3MTMsMC40OTM4MjcxNjA0OTM4MjcxMworMTAsVGh1IDMgRmViIDExLDAuNDkzODI3MTYwNDkzODI3MTMsMC40OTM4MjcxNjA0OTM4MjcxMworMTEsRnJpIDQgRmViIDExLDAuNDkzODI3MTYwNDkzODI3MTMsMC40OTM4MjcxNjA0OTM4MjcxMworMTIsU2F0IDUgRmViIDExLDAuNDkzODI3MTYwNDkzODI3MTMsMC40OTM4MjcxNjA0OTM4MjcxMworMTMsU3VuIDYgRmViIDExLDAuNDkzODI3MTYwNDkzODI3MTMsMC40OTM4MjcxNjA0OTM4MjcxMworMTQsTW9uIDcgRmViIDExLDAuNDkzODI3MTYwNDkzODI3MTMsMC40OTM4MjcxNjA0OTM4MjcxMworMTUsVHVlIDggRmViIDExLDAuNDkzODI3MTYwNDkzODI3MTMsMC40OTM4MjcxNjA0OTM4MjcxMworMTYsV2VkIDkgRmViIDExLDAuNDkzODI3MTYwNDkzODI3MTMsMC40OTM4MjcxNjA0OTM4MjcxMworMTcsVGh1IDEwIEZlYiAxMSwwLjQ5MzgyNzE2MDQ5MzgyNzEzLDAuNDkzODI3MTYwNDkzODI3MTMKKzE4LEZyaSAxMSBGZWIgMTEsMC40OTM4MjcxNjA0OTM4MjcxMywwLjQ5MzgyNzE2MDQ5MzgyNzEzCisxOSxTYXQgMTIgRmViIDExLDAuNDkzODI3MTYwNDkzODI3MTMsMC40OTM4MjcxNjA0OTM4MjcxMworMjAsU3VuIDEzIEZlYiAxMSwwLjQ5MzgyNzE2MDQ5MzgyNzEzLDAuNDkzODI3MTYwNDkzODI3MTMKKzIxLE1vbiAxNCBGZWIgMTEsMC40OTM4MjcxNjA0OTM4MjcxMywwLjQ5MzgyNzE2MDQ5MzgyNzEzCisyMixUdWUgMTUgRmViIDExLDAuNDkzODI3MTYwNDkzODI3MTMsMC40OTM4MjcxNjA0OTM4MjcxMworMjMsV2VkIDE2IEZlYiAxMSwwLjQ5MzgyNzE2MDQ5MzgyNzEzLDAuNDkzODI3MTYwNDkzODI3MTMKKzI0LFRodSAxNyBGZWIgMTEsMC40OTM4MjcxNjA0OTM4MjcxMywwLjQ5MzgyNzE2MDQ5MzgyNzEzCisyNSxGcmkgMTggRmViIDExLDAuNDkzODI3MTYwNDkzODI3MTMsMC40OTM4MjcxNjA0OTM4MjcxMworMjYsU2F0IDE5IEZlYiAxMSwwLjQ5MzgyNzE2MDQ5MzgyNzEzLDAuNDkzODI3MTYwNDkzODI3MTMKKzI3LFN1biAyMCBGZWIgMTEsMC40OTM4MjcxNjA0OTM4MjcxMywwLjQ5MzgyNzE2MDQ5MzgyNzEzCisyOCxNb24gMjEgRmViIDExLDAuNDkzODI3MTYwNDkzODI3MTMsMC40OTM4MjcxNjA0OTM4MjcxMworMjksVHVlIDIyIEZlYiAxMSwwLjQ5MzgyNzE2MDQ5MzgyNzEzLDAuNDkzODI3MTYwNDkzODI3MTMKKzMwLFdlZCAyMyBGZWIgMTEsMC40OTM4MjcxNjA0OTM4MjcxMywwLjQ5MzgyNzE2MDQ5MzgyNzEzCiszMSxUaHUgMjQgRmViIDExLDAuNDkzODI3MTYwNDkzODI3MTMsMC40OTM4MjcxNjA0OTM4MjcxMworMzIsRnJpIDI1IEZlYiAxMSwwLjQ5MzgyNzE2MDQ5MzgyNzEzLDAuNDkzODI3MTYwNDkzODI3MTMKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvVHdvU3F1YXJlc01peGluZ1NFSVJfRkRfUmVmZXJlbmNlL2F1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwvaHVtYW4vSW5jaWRlbmNlXzAuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Ud29TcXVhcmVzTWl4aW5nU0VJUl9GRF9SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9odW1hbi9JbmNpZGVuY2VfMC5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODMwN2NhNAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvVHdvU3F1YXJlc01peGluZ1NFSVJfRkRfUmVmZXJlbmNlL2F1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwvaHVtYW4vSW5jaWRlbmNlXzAuY3N2CkBAIC0wLDAgKzEsMzMgQEAKK2l0ZXJhdGlvbix0aW1lLHN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL25vZGUvNDQ5NTM2NUEwMjMyOEIxNi9MQVRfU1FSXzBfMCxzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9ub2RlLzQ0OTUzNjVBMDIzMjhCMTYvTEFUX1NRUl8xXzAKKzEsVHVlIDI1IEphbiAxMSwwLjAsMC4wCisyLFdlZCAyNiBKYW4gMTEsMC4wLDAuMAorMyxUaHUgMjcgSmFuIDExLDAuMCwwLjAKKzQsRnJpIDI4IEphbiAxMSwwLjAsMC4wCis1LFNhdCAyOSBKYW4gMTEsMC4wLDAuMAorNixTdW4gMzAgSmFuIDExLDAuMCwwLjAKKzcsTW9uIDMxIEphbiAxMSwwLjAsMC4wCis4LFR1ZSAxIEZlYiAxMSwwLjAsMC4wCis5LFdlZCAyIEZlYiAxMSwwLjAsMC4wCisxMCxUaHUgMyBGZWIgMTEsMC4wLDAuMAorMTEsRnJpIDQgRmViIDExLDAuMCwwLjAKKzEyLFNhdCA1IEZlYiAxMSwwLjAsMC4wCisxMyxTdW4gNiBGZWIgMTEsMC4wLDAuMAorMTQsTW9uIDcgRmViIDExLDAuMCwwLjAKKzE1LFR1ZSA4IEZlYiAxMSwwLjAsMC4wCisxNixXZWQgOSBGZWIgMTEsMC4wLDAuMAorMTcsVGh1IDEwIEZlYiAxMSwwLjAsMC4wCisxOCxGcmkgMTEgRmViIDExLDAuMCwwLjAKKzE5LFNhdCAxMiBGZWIgMTEsMC4wLDAuMAorMjAsU3VuIDEzIEZlYiAxMSwwLjAsMC4wCisyMSxNb24gMTQgRmViIDExLDAuMCwwLjAKKzIyLFR1ZSAxNSBGZWIgMTEsMC4wLDAuMAorMjMsV2VkIDE2IEZlYiAxMSwwLjAsMC4wCisyNCxUaHUgMTcgRmViIDExLDAuMCwwLjAKKzI1LEZyaSAxOCBGZWIgMTEsMC4wLDAuMAorMjYsU2F0IDE5IEZlYiAxMSwwLjAsMC4wCisyNyxTdW4gMjAgRmViIDExLDAuMCwwLjAKKzI4LE1vbiAyMSBGZWIgMTEsMC4wLDAuMAorMjksVHVlIDIyIEZlYiAxMSwwLjAsMC4wCiszMCxXZWQgMjMgRmViIDExLDAuMCwwLjAKKzMxLFRodSAyNCBGZWIgMTEsMC4wLDAuMAorMzIsRnJpIDI1IEZlYiAxMSwwLjAsMC4wCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1R3b1NxdWFyZXNNaXhpbmdTRUlSX0ZEX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL3J1bnBhcmFtZXRlcnMuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Ud29TcXVhcmVzTWl4aW5nU0VJUl9GRF9SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9ydW5wYXJhbWV0ZXJzLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNjg1NWI1Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Ud29TcXVhcmVzTWl4aW5nU0VJUl9GRF9SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9ydW5wYXJhbWV0ZXJzLmNzdgpAQCAtMCwwICsxLDIgQEAKK3BvcHVsYXRpb25JZGVudGlmaWVyLG5hbWUsdGFyZ2V0SVNPS2V5LGJpcnRoUmF0ZSxkZWF0aFJhdGUsdGltZVBlcmlvZAoraHVtYW4sYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbCwsMC4wLDAuMCw4NjQwMDAwMApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvVHdvU3F1YXJlc01peGluZ1NFSVJfUktfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL0Rpc2Vhc2UgRGVhdGhzXzAuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Ud29TcXVhcmVzTWl4aW5nU0VJUl9SS19SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vRGlzZWFzZSBEZWF0aHNfMC5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODMwN2NhNAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvVHdvU3F1YXJlc01peGluZ1NFSVJfUktfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL0Rpc2Vhc2UgRGVhdGhzXzAuY3N2CkBAIC0wLDAgKzEsMzMgQEAKK2l0ZXJhdGlvbix0aW1lLHN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL25vZGUvNDQ5NTM2NUEwMjMyOEIxNi9MQVRfU1FSXzBfMCxzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9ub2RlLzQ0OTUzNjVBMDIzMjhCMTYvTEFUX1NRUl8xXzAKKzEsVHVlIDI1IEphbiAxMSwwLjAsMC4wCisyLFdlZCAyNiBKYW4gMTEsMC4wLDAuMAorMyxUaHUgMjcgSmFuIDExLDAuMCwwLjAKKzQsRnJpIDI4IEphbiAxMSwwLjAsMC4wCis1LFNhdCAyOSBKYW4gMTEsMC4wLDAuMAorNixTdW4gMzAgSmFuIDExLDAuMCwwLjAKKzcsTW9uIDMxIEphbiAxMSwwLjAsMC4wCis4LFR1ZSAxIEZlYiAxMSwwLjAsMC4wCis5LFdlZCAyIEZlYiAxMSwwLjAsMC4wCisxMCxUaHUgMyBGZWIgMTEsMC4wLDAuMAorMTEsRnJpIDQgRmViIDExLDAuMCwwLjAKKzEyLFNhdCA1IEZlYiAxMSwwLjAsMC4wCisxMyxTdW4gNiBGZWIgMTEsMC4wLDAuMAorMTQsTW9uIDcgRmViIDExLDAuMCwwLjAKKzE1LFR1ZSA4IEZlYiAxMSwwLjAsMC4wCisxNixXZWQgOSBGZWIgMTEsMC4wLDAuMAorMTcsVGh1IDEwIEZlYiAxMSwwLjAsMC4wCisxOCxGcmkgMTEgRmViIDExLDAuMCwwLjAKKzE5LFNhdCAxMiBGZWIgMTEsMC4wLDAuMAorMjAsU3VuIDEzIEZlYiAxMSwwLjAsMC4wCisyMSxNb24gMTQgRmViIDExLDAuMCwwLjAKKzIyLFR1ZSAxNSBGZWIgMTEsMC4wLDAuMAorMjMsV2VkIDE2IEZlYiAxMSwwLjAsMC4wCisyNCxUaHUgMTcgRmViIDExLDAuMCwwLjAKKzI1LEZyaSAxOCBGZWIgMTEsMC4wLDAuMAorMjYsU2F0IDE5IEZlYiAxMSwwLjAsMC4wCisyNyxTdW4gMjAgRmViIDExLDAuMCwwLjAKKzI4LE1vbiAyMSBGZWIgMTEsMC4wLDAuMAorMjksVHVlIDIyIEZlYiAxMSwwLjAsMC4wCiszMCxXZWQgMjMgRmViIDExLDAuMCwwLjAKKzMxLFRodSAyNCBGZWIgMTEsMC4wLDAuMAorMzIsRnJpIDI1IEZlYiAxMSwwLjAsMC4wCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1R3b1NxdWFyZXNNaXhpbmdTRUlSX1JLX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9FXzAuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Ud29TcXVhcmVzTWl4aW5nU0VJUl9SS19SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vRV8wLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMWI3OTU1Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Ud29TcXVhcmVzTWl4aW5nU0VJUl9SS19SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vRV8wLmNzdgpAQCAtMCwwICsxLDMzIEBACitpdGVyYXRpb24sdGltZSxzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9ub2RlLzQ0OTUzNjVBMDIzMjhCMTYvTEFUX1NRUl8wXzAsc3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vbm9kZS80NDk1MzY1QTAyMzI4QjE2L0xBVF9TUVJfMV8wCisxLFR1ZSAyNSBKYW4gMTEsMC4wLDAuMAorMixXZWQgMjYgSmFuIDExLDAuMDY1MDg3NzkxMDc3NTkwODQsMS4xODQ3Njc2OTkwNjM4OTIyCiszLFRodSAyNyBKYW4gMTEsMC4xNDg1MTQ5NDUxMzM5MjU2LDIuMjA1NTYyOTMzNzEyMTMwMworNCxGcmkgMjggSmFuIDExLDAuMjk1Mjc4MTQ2MzE0NTEwNSwzLjUxNjM4ODc5ODQxOTM5NjQKKzUsU2F0IDI5IEphbiAxMSwwLjU1NzQ5NDg0NTI0NDExMDcsNS40NDM4ODkxNjI0MTM0NQorNixTdW4gMzAgSmFuIDExLDEuMDE3MjM1NjQyMDE4MTc3Niw4LjM2MzYxNjMzMTE2NTUzOAorNyxNb24gMzEgSmFuIDExLDEuODA5NDc1MzcyOTg1MTUwNSwxMi43OTQzMzg3MzU3NDE5NTQKKzgsVHVlIDEgRmViIDExLDMuMTU0NzAyMDMxMjgwNTgzNCwxOS40NzE4MjI1MDQ4Mzg2MDIKKzksV2VkIDIgRmViIDExLDUuNDA5OTA0NjAwMzgzODEyLDI5LjQwODM1MTk2MjYzMjM5NQorMTAsVGh1IDMgRmViIDExLDkuMTM0MDgzMjUxMDUwNzA2LDQzLjkwMTA3NTQ5ODQwMDMKKzExLEZyaSA0IEZlYiAxMSwxNS4xODcxMzA1OTA4Njk2MjksNjQuNDAzMTcwODE1NTM0MTgKKzEyLFNhdCA1IEZlYiAxMSwyNC44MjA1MTAyOTQ5Mjg1MTQsOTIuMDk5MjcxODc0NDE2NjMKKzEzLFN1biA2IEZlYiAxMSwzOS43MTk2NTg0Njg1MzY2NywxMjcuMDI2NDM4MzcwMzM4NjIKKzE0LE1vbiA3IEZlYiAxMSw2MS44NDg0NTQwNjI2NTE0NCwxNjYuODAyNzI1NDg2MjcxNzgKKzE1LFR1ZSA4IEZlYiAxMSw5Mi44NTM4MDU2NTM3NDY4MiwyMDUuNjY3NTg4MDc1NjgxOTIKKzE2LFdlZCA5IEZlYiAxMSwxMzIuNzk2MDI0MjM5NjQwNjQsMjM1LjI0MDU5MTg1ODExODIyCisxNyxUaHUgMTAgRmViIDExLDE3OC4zMTM4MDI1NDAxNzQ2MywyNDcuODAyODk4NTU1OTUyMTQKKzE4LEZyaSAxMSBGZWIgMTEsMjIxLjU4MzMxNjA5MTU3NjgyLDI0MC40Mjg2OTQ4NDIwMzUzNgorMTksU2F0IDEyIEZlYiAxMSwyNTEuOTg3ODY5MzI2Njg5MzIsMjE2LjQyODQzNTM1ODQ5MTI3CisyMCxTdW4gMTMgRmViIDExLDI2MS4xMTk1ODMwNDU1NzA2LDE4Mi45NDU1MDE3Mzc2NTcyMgorMjEsTW9uIDE0IEZlYiAxMSwyNDcuNjM2NzM5NTM4ODAxNzIsMTQ3LjE5NjA0MjM4NTc1NDM3CisyMixUdWUgMTUgRmViIDExLDIxNy40NjE0Njg2NDEzODU4NiwxMTQuMTUyMjA2NTQwMjQ1OAorMjMsV2VkIDE2IEZlYiAxMSwxNzkuNTYwNTg2OTQzMzU4OCw4Ni4yMTEyMTQ1NTI5NDMzCisyNCxUaHUgMTcgRmViIDExLDE0MS41NjMzMjYwODkyMDI2Niw2My45MDkzMjU0ODMzNzY1CisyNSxGcmkgMTggRmViIDExLDEwNy45NTgwNjc0ODU3MDMyNCw0Ni43NzUzMjU4MDA5MjUKKzI2LFNhdCAxOSBGZWIgMTEsODAuNDQxNDY1Mjc0NTc4OCwzMy45NDM1MzU2OTY2ODkxNAorMjcsU3VuIDIwIEZlYiAxMSw1OC45OTQ5NDk1OTAzMjAwMSwyNC40OTc3MTIyNjY4MzAwNQorMjgsTW9uIDIxIEZlYiAxMSw0Mi44MDkwNjA1ODAxNTkzLDE3LjYyNDI0OTg2MjQyNzUxCisyOSxUdWUgMjIgRmViIDExLDMwLjg1MDU0NDkyNjQ5NjM5NCwxMi42NjA1NzI5NjYwOTg0NzYKKzMwLFdlZCAyMyBGZWIgMTEsMjIuMTM5MjQ0MDIyMjE5MjM0LDkuMDkzMjI2NzU1MDA2OTkzCiszMSxUaHUgMjQgRmViIDExLDE1Ljg1MjI2NjUwMTU2MzY3LDYuNTM2NDEyODg0OTA4OTU3CiszMixGcmkgMjUgRmViIDExLDExLjM0MjAwMTY0MTIyMDk4OSw0LjcwNjAyMTMyODUxNTQ1MwpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Ud29TcXVhcmVzTWl4aW5nU0VJUl9SS19SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vSV8wLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvVHdvU3F1YXJlc01peGluZ1NFSVJfUktfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL0lfMC5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDJhN2E3YgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvVHdvU3F1YXJlc01peGluZ1NFSVJfUktfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL0lfMC5jc3YKQEAgLTAsMCArMSwzMyBAQAoraXRlcmF0aW9uLHRpbWUsc3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vbm9kZS80NDk1MzY1QTAyMzI4QjE2L0xBVF9TUVJfMF8wLHN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL25vZGUvNDQ5NTM2NUEwMjMyOEIxNi9MQVRfU1FSXzFfMAorMSxUdWUgMjUgSmFuIDExLDAuMCwxLjAKKzIsV2VkIDI2IEphbiAxMSwwLjAxMjA2NDMyMjg3NzcyMzQzMywwLjk3MDE2MjM2NTM1MjU2MDgKKzMsVGh1IDI3IEphbiAxMSwwLjA0NTM0OTM1ODI5NDE1MzQzLDEuMzEwMDY2Mzc2MjY4NDUyOAorNCxGcmkgMjggSmFuIDExLDAuMTA5MDcwNzE4MDYyMTMwMjcsMS45NTczNzM0NzkzNDkyOTA3Cis1LFNhdCAyOSBKYW4gMTEsMC4yMjYxMTg5NTIxODQxNzI1MiwyLjk5MjI3MzIxNzc2NzA2Cis2LFN1biAzMCBKYW4gMTEsMC40MzYyOTEyODYzNzA3NzM1LDQuNTkyNTgzMjg5NzUyNDY2Cis3LE1vbiAzMSBKYW4gMTEsMC44MDYyNzQ5MTQwNTc4MDAzLDcuMDQzNTIyNDI3ODEyNDE1Cis4LFR1ZSAxIEZlYiAxMSwxLjQ0NjUzNjMwMDY3OTcwMDMsMTAuNzczMDUyNzAzMTY5MjIKKzksV2VkIDIgRmViIDExLDIuNTM4MDY2MjUwNjE3MDc1NywxNi40MDEzNDA5NTYwMTg2NAorMTAsVGh1IDMgRmViIDExLDQuMzcyNjAyMTM4ODg2NDY1LDI0Ljc5MDQzNDI1NzkzODUKKzExLEZyaSA0IEZlYiAxMSw3LjQxMTE2MDYxNzY3ODc0LDM3LjA2MjU1MjY0Mjc5MDcxCisxMixTYXQgNSBGZWIgMTEsMTIuMzYxMDc4MzIxMjgwNjMzLDU0LjUyMDY4NzI3ODk1Nzc1CisxMyxTdW4gNiBGZWIgMTEsMjAuMjU4MzEwMjI2ODIwNjksNzguMzYzODY2OTg5Njg2OQorMTQsTW9uIDcgRmViIDExLDMyLjUxMjcwNDQzNzc4NzMwNiwxMDkuMDkyNDA1NDY5NDYxMQorMTUsVHVlIDggRmViIDExLDUwLjgxNjAxODMxMjUyMjkyLDE0NS42NTE3Nzg3MDg4Mzg3CisxNixXZWQgOSBGZWIgMTEsNzYuNzQ5ODg5NTQwMTEyMTksMTg0LjczNTMwMzczNDA2NzY2CisxNyxUaHUgMTAgRmViIDExLDExMC45MzY3Mjc0MTk0NzA5NywyMjAuOTkzMTI1NjQ5OTY2MQorMTgsRnJpIDExIEZlYiAxMSwxNTEuODY5NDk2NzkxMjY3NTUsMjQ4LjU2Nzg5NjYzMjMyMDAxCisxOSxTYXQgMTIgRmViIDExLDE5NS4xMTcxOTg0MzA2NTQxLDI2My4yNjAxMjEzMzE3MzU1NQorMjAsU3VuIDEzIEZlYiAxMSwyMzMuOTU5MzkxODU3NjEwMjYsMjYzLjkwNTc0NDc4OTEyNjUKKzIxLE1vbiAxNCBGZWIgMTEsMjYxLjcwNjEwNjk5MzczOTQsMjUyLjIyMDc2OTY1MzkwNjQyCisyMixUdWUgMTUgRmViIDExLDI3NC4zMzE2MDMxMzIzMDk1NywyMzEuNTk3NzA0MzM2MzA0OQorMjMsV2VkIDE2IEZlYiAxMSwyNzEuNTk5ODE3MTIxNzM3NCwyMDUuNzg5MjQxMDE1OTgxMjgKKzI0LFRodSAxNyBGZWIgMTEsMjU2LjI4NTAwMjY1ODg0NjEsMTc4LjA0MDM2NDU1Mjg0MDM0CisyNSxGcmkgMTggRmViIDExLDIzMi41MjIwNzI1MjM4NTcxMywxNTAuNzM1NzY0NTc2NDY1ODcKKzI2LFNhdCAxOSBGZWIgMTEsMjA0LjM5MTMxNDI2MTU0MjgsMTI1LjM5NDIxOTQ4MzIzNzI4CisyNyxTdW4gMjAgRmViIDExLDE3NS4xNTk2MjQwOTU0ODQ0MiwxMDIuODI1OTU5MTkyNjEwMzEKKzI4LE1vbiAyMSBGZWIgMTEsMTQ3LjA3NTgzMDkzNzk2OTc2LDgzLjMzMDY3NzM4NTA5Nzg2CisyOSxUdWUgMjIgRmViIDExLDEyMS40NzQxMzE3NjY5NzA1Nyw2Ni44NzYxODI5MjgwOTM5NQorMzAsV2VkIDIzIEZlYiAxMSw5OC45OTA1OTc5ODE1NDYzNiw1My4yMzcxNTkwMTQ2MTQwMQorMzEsVGh1IDI0IEZlYiAxMSw3OS43ODQ4NTk5MzcxNjU4Niw0Mi4wOTMxNDE1NzQ3MDc3ODYKKzMyLEZyaSAyNSBGZWIgMTEsNjMuNzIyNzkzMTUzNzkzNDIsMzMuMDkyNTg3ODg1NzMzNDYKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvVHdvU3F1YXJlc01peGluZ1NFSVJfUktfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL0luY2lkZW5jZV8wLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvVHdvU3F1YXJlc01peGluZ1NFSVJfUktfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL0luY2lkZW5jZV8wLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMzQ4NWFkCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Ud29TcXVhcmVzTWl4aW5nU0VJUl9SS19SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vSW5jaWRlbmNlXzAuY3N2CkBAIC0wLDAgKzEsMzMgQEAKK2l0ZXJhdGlvbix0aW1lLHN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL25vZGUvNDQ5NTM2NUEwMjMyOEIxNi9MQVRfU1FSXzBfMCxzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9ub2RlLzQ0OTUzNjVBMDIzMjhCMTYvTEFUX1NRUl8xXzAKKzEsVHVlIDI1IEphbiAxMSwwLjAsMC4wCisyLFdlZCAyNiBKYW4gMTEsMC4wNzg0MTQ0NDMxMDY1ODQ4OCwxLjQzODU3ODc5MTkyNjk4MQorMyxUaHUgMjcgSmFuIDExLDAuMTI0NzQ1Mjc4ODI0OTM3NzMsMS42OTUxNDkzNDkxMjIzOTE3Cis0LEZyaSAyOCBKYW4gMTEsMC4yMzI2NjM4MzE3ODE5Njc5LDIuNDQwMDM2Nzc3NzI2NDE5NAorNSxTYXQgMjkgSmFuIDExLDAuNDI3ODA4MjU5MDQxMzM1NDYsMy42OTMzNzI5MTc2OTQyNDMKKzYsU3VuIDMwIEphbiAxMSwwLjc2NjI2OTAwNDc2MzAxNTUsNS42NDA2MjA5Njg5MzI4OTEKKzcsTW9uIDMxIEphbiAxMSwxLjM0MzQ4NTc4NTQ2MzQ2NTYsOC42MDEyMjEyNjgzNTAxNzEKKzgsVHVlIDEgRmViIDExLDIuMzE0Nzk2Mjg5MzAyODU5LDEzLjA0MDc4ODU1MjcwNjI0NAorOSxXZWQgMiBGZWIgMTEsMy45MzAxMjU3Njc5MDM2OSwxOS41ODM5MzY2MTE4NDU1NQorMTAsVGh1IDMgRmViIDExLDYuNTcxOTIzMDEwOTE1NDg3LDI4Ljk3ODY4MzM2NzEyMzMyCisxMSxGcmkgNCBGZWIgMTEsMTAuODIxNTY0ODgyMjAzNjM3LDQxLjkzOTIzMTc2NTg5NTU0CisxMixTYXQgNSBGZWIgMTEsMTcuNDkwMTA0NDc2OTQ1MzgzLDU4Ljc0NTU3NTgwNjQ2OTQ4CisxMyxTdW4gNiBGZWIgMTEsMjcuNTk5NzIwMTY0NDc0ODE0LDc4LjUzMjE0MDE0NTgzMDkxCisxNCxNb24gNyBGZWIgMTEsNDIuMTY5NTc1MzM0MjY3MjIsOTguNDU1MTI3NDk4ODcyMTYKKzE1LFR1ZSA4IEZlYiAxMSw2MS42MzUwNTEzNjQzODAzNiwxMTMuNTIwMzcwNTg1Njg2MDQKKzE2LFdlZCA5IEZlYiAxMSw4NC44MDU1MTk0NDg4MTA5NywxMTguMjExMzM5ODAyODEwNjgKKzE3LFRodSAxMCBGZWIgMTEsMTA3LjY1NzcxNDc2NTg3Mzc2LDEwOS44MjU5Njc0MDE5MTM0CisxOCxGcmkgMTEgRmViIDExLDEyMy40OTYyMzc2NjA4OTcyNiw5MC45MTY0Mzc3MjY5MjY5CisxOSxTYXQgMTIgRmViIDExLDEyNS43MTk5NTY4NTc2NDk2NSw2Ny44MTc3ODM5OTk5Nzc2MgorMjAsU3VuIDEzIEZlYiAxMSwxMTIuNTM2MDQ3NTk4MTkzNzYsNDYuNTc4MjYxNDA2Nzc2NTcKKzIxLE1vbiAxNCBGZWIgMTEsODguOTU4MjE4NzQyNDY1NzUsMzAuMjU0NzkyMjU5NzQ1MDIKKzIyLFR1ZSAxNSBGZWIgMTEsNjMuMjUzOTE5NzU0NDIyNDc2LDE5LjA4MTU0MDMzMjU3MTY3NAorMjMsV2VkIDE2IEZlYiAxMSw0MS42MTY0OTE5NDI4OTk0NCwxMS45NDQwOTY2MTgwMDY2MjIKKzI0LFRodSAxNyBGZWIgMTEsMjYuMTM1OTUyNjk3NTE0MzEzLDcuNTM4MTg5MjAwNDI3MDcwNQorMjUsRnJpIDE4IEZlYiAxMSwxNi4xMTA0NDAwOTY2NzY4NSw0Ljg0NDAzNjAwNTYzMTA1NAorMjYsU2F0IDE5IEZlYiAxMSw5Ljk1MzM5OTY4ODMxMTcwNywzLjE4NDE2Mzc4ODIwMzE4MTcKKzI3LFN1biAyMCBGZWIgMTEsNi4yNDkyMzY4OTYxMTkwMjE0LDIuMTQzOTY3MTYxNTU1NzQ5NgorMjgsTW9uIDIxIEZlYiAxMSw0LjAxNjUyNTE4NDM3MjA3NCwxLjQ3NzE2NjIwNzU3MTQ2NzMKKzI5LFR1ZSAyMiBGZWIgMTEsMi42NDk2MDk5NzgxNTMyNzAzLDEuMDM5MDI5NTUwMzg2OTY4NAorMzAsV2VkIDIzIEZlYiAxMSwxLjc5MzIwNjA4MzI0OTQ0OSwwLjc0Mzk4ODY1MDg5MjUyMworMzEsVGh1IDI0IEZlYiAxMSwxLjI0MjM0MDYyMTgwMDAyMzcsMC41NDA2OTkwMjg4NDY3NzQ5CiszMixGcmkgMjUgRmViIDExLDAuODc4NDEwMDIyOTc4MzgxNCwwLjM5NzcyMjkxMTYwMTQ1MjIzCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1R3b1NxdWFyZXNNaXhpbmdTRUlSX1JLX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9Qb3B1bGF0aW9uIENvdW50XzAuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Ud29TcXVhcmVzTWl4aW5nU0VJUl9SS19SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vUG9wdWxhdGlvbiBDb3VudF8wLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMGE3ZWZjCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Ud29TcXVhcmVzTWl4aW5nU0VJUl9SS19SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vUG9wdWxhdGlvbiBDb3VudF8wLmNzdgpAQCAtMCwwICsxLDMzIEBACitpdGVyYXRpb24sdGltZSxzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9ub2RlLzQ0OTUzNjVBMDIzMjhCMTYvTEFUX1NRUl8wXzAsc3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vbm9kZS80NDk1MzY1QTAyMzI4QjE2L0xBVF9TUVJfMV8wCisxLFR1ZSAyNSBKYW4gMTEsMTAwMC4wLDEwMDAuMAorMixXZWQgMjYgSmFuIDExLDk5OS45OTk5OTk5OTk5OTk3LDk5OS45OTk5OTk5OTk5OTk4CiszLFRodSAyNyBKYW4gMTEsOTk5Ljk5OTk5OTk5OTk5OTksOTk5Ljk5OTk5OTk5OTk5OTgKKzQsRnJpIDI4IEphbiAxMSwxMDAwLjAwMDAwMDAwMDAwMDEsOTk5Ljk5OTk5OTk5OTk5OTgKKzUsU2F0IDI5IEphbiAxMSwxMDAwLjAsOTk5Ljk5OTk5OTk5OTk5OTgKKzYsU3VuIDMwIEphbiAxMSw5OTkuOTk5OTk5OTk5OTk5OSw5OTkuOTk5OTk5OTk5OTk5OAorNyxNb24gMzEgSmFuIDExLDEwMDAuMCw5OTkuOTk5OTk5OTk5OTk5NworOCxUdWUgMSBGZWIgMTEsOTk5Ljk5OTk5OTk5OTk5OTgsOTk5Ljk5OTk5OTk5OTk5OTkKKzksV2VkIDIgRmViIDExLDk5OS45OTk5OTk5OTk5OTk5LDEwMDAuMAorMTAsVGh1IDMgRmViIDExLDEwMDAuMCwxMDAwLjAKKzExLEZyaSA0IEZlYiAxMSwxMDAwLjAsMTAwMC4wMDAwMDAwMDAwMDAxCisxMixTYXQgNSBGZWIgMTEsMTAwMC4wLDEwMDAuMDAwMDAwMDAwMDAwMgorMTMsU3VuIDYgRmViIDExLDk5OS45OTk5OTk5OTk5OTk4LDEwMDAuMDAwMDAwMDAwMDAwMQorMTQsTW9uIDcgRmViIDExLDk5OS45OTk5OTk5OTk5OTk4LDEwMDAuMDAwMDAwMDAwMDAwMQorMTUsVHVlIDggRmViIDExLDk5OS45OTk5OTk5OTk5OTk4LDEwMDAuMDAwMDAwMDAwMDAwMgorMTYsV2VkIDkgRmViIDExLDEwMDAuMCwxMDAwLjAwMDAwMDAwMDAwMDIKKzE3LFRodSAxMCBGZWIgMTEsMTAwMC4wLDEwMDAuMDAwMDAwMDAwMDAwMgorMTgsRnJpIDExIEZlYiAxMSwxMDAwLjAsMTAwMC4wMDAwMDAwMDAwMDAxCisxOSxTYXQgMTIgRmViIDExLDEwMDAuMDAwMDAwMDAwMDAwMSwxMDAwLjAKKzIwLFN1biAxMyBGZWIgMTEsMTAwMC4wMDAwMDAwMDAwMDAxLDEwMDAuMAorMjEsTW9uIDE0IEZlYiAxMSwxMDAwLjAwMDAwMDAwMDAwMDEsOTk5Ljk5OTk5OTk5OTk5OTkKKzIyLFR1ZSAxNSBGZWIgMTEsMTAwMC4wLDk5OS45OTk5OTk5OTk5OTk4CisyMyxXZWQgMTYgRmViIDExLDk5OS45OTk5OTk5OTk5OTk5LDk5OS45OTk5OTk5OTk5OTk4CisyNCxUaHUgMTcgRmViIDExLDk5OS45OTk5OTk5OTk5OTk5LDk5OS45OTk5OTk5OTk5OTk5CisyNSxGcmkgMTggRmViIDExLDEwMDAuMCw5OTkuOTk5OTk5OTk5OTk5OAorMjYsU2F0IDE5IEZlYiAxMSwxMDAwLjAwMDAwMDAwMDAwMDEsMTAwMC4wCisyNyxTdW4gMjAgRmViIDExLDEwMDAuMDAwMDAwMDAwMDAwMSw5OTkuOTk5OTk5OTk5OTk5OAorMjgsTW9uIDIxIEZlYiAxMSwxMDAwLjAwMDAwMDAwMDAwMDEsOTk5Ljk5OTk5OTk5OTk5OTgKKzI5LFR1ZSAyMiBGZWIgMTEsMTAwMC4wLDk5OS45OTk5OTk5OTk5OTk4CiszMCxXZWQgMjMgRmViIDExLDEwMDAuMDAwMDAwMDAwMDAwMSw5OTkuOTk5OTk5OTk5OTk5OQorMzEsVGh1IDI0IEZlYiAxMSwxMDAwLjAwMDAwMDAwMDAwMDEsOTk5Ljk5OTk5OTk5OTk5OTkKKzMyLEZyaSAyNSBGZWIgMTEsMTAwMC4wMDAwMDAwMDAwMDAxLDk5OS45OTk5OTk5OTk5OTk4CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1R3b1NxdWFyZXNNaXhpbmdTRUlSX1JLX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9SXzAuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Ud29TcXVhcmVzTWl4aW5nU0VJUl9SS19SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vUl8wLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMjdiZTdiCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Ud29TcXVhcmVzTWl4aW5nU0VJUl9SS19SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vUl8wLmNzdgpAQCAtMCwwICsxLDMzIEBACitpdGVyYXRpb24sdGltZSxzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9ub2RlLzQ0OTUzNjVBMDIzMjhCMTYvTEFUX1NRUl8wXzAsc3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vbm9kZS80NDk1MzY1QTAyMzI4QjE2L0xBVF9TUVJfMV8wCisxLFR1ZSAyNSBKYW4gMTEsMC4wLDAuMAorMixXZWQgMjYgSmFuIDExLDAuMDAxMjYyMzI5MTUxMjcwNTg0MSwwLjI4MzY0ODcyNzUxMDUyODE2CiszLFRodSAyNyBKYW4gMTEsMC4wMDkyOTU0MTg1MDM0NDM1NjgsMC42MTgwOTg4MzEwNjg3OTA1Cis0LEZyaSAyOCBKYW4gMTEsMC4wMzE0NzQ2ODkzMzY4NDk4MSwxLjEwMDAwMjY0MTAwNzEwNjcKKzUsU2F0IDI5IEphbiAxMSwwLjA4MDAxODAxNTMyNjU0MjkzLDEuODMwOTc1NDU2Mjg5NTI3NQorNixTdW4gMzAgSmFuIDExLDAuMTc2MzczODg5MTI4ODkwNjUsMi45NTE1NTkxODQ0ODQ5MjQzCis3LE1vbiAzMSBKYW4gMTEsMC4zNTc2MzYzMTU5MzgzNTcsNC42NzExMTg5MTAxOTg3MjYKKzgsVHVlIDEgRmViIDExLDAuNjg2OTQ0NTYwMzIzODgyNiw3LjMwNDg5MzQxODQ1MTUxOAorOSxXZWQgMiBGZWIgMTEsMS4yNzAzMzc4MDkxODY5Njc1LDExLjMyNDAxMjMxOTY1Mzg1OQorMTAsVGh1IDMgRmViIDExLDIuMjgzNTQ2MjgxMTY2MTcsMTcuNDIwODc4ODQ5MDg5NDIKKzExLEZyaSA0IEZlYiAxMSw0LjAxMzUwNTM0NDc1ODYwNywyNi41ODU4OTY5MTI5OTg4NworMTIsU2F0IDUgRmViIDExLDYuOTIwMzEyNDE0MDQzMjA5LDQwLjE3NzIzNzAyNDQxODg4NgorMTMsU3VuIDYgRmViIDExLDExLjcyMzY1MjQ5OTM2OTgxMyw1OS45MzkwMzA5NjM1OTg2NgorMTQsTW9uIDcgRmViIDExLDE5LjUxMDAzODAyODU1NTY1Miw4Ny44ODkzMzI4NjY3NjM0NAorMTUsVHVlIDggRmViIDExLDMxLjgzNjQyMzkyNzEwNTA0LDEyNS45ODU0Njc2MjM2NjE3MworMTYsV2VkIDkgRmViIDExLDUwLjc2NTg1MzU2MjQzMjkyLDE3NS41NDAyNzg2MTg4MDcxNQorMTcsVGh1IDEwIEZlYiAxMSw3OC43MTg5NTIxNDg0MTM5MywyMzYuNTQ2MTE3NDA2OTg4MjYKKzE4LEZyaSAxMSBGZWIgMTEsMTE4LjAxMjkwNjg4NjExMjQsMzA3LjI2MTk4Nzg2NTQ3OAorMTksU2F0IDEyIEZlYiAxMSwxNzAuMDgwNjA4ODY5MjYzMDIsMzg0LjM4NzgwNjY0OTU4NDEKKzIwLFN1biAxMyBGZWIgMTEsMjM0LjY0Mjc0OTMyMTYxOTM2LDQ2My44MDMzNzgyMTk4MDM2CisyMSxNb24gMTQgRmViIDExLDMwOS4zMzcwOTY0MzQ3MjQ3NCw1NDEuNDkyNjA0OTY2NjcxNQorMjIsVHVlIDE1IEZlYiAxMSwzOTAuMTQwNzkwOTQ3OTkyODUsNjE0LjI0MTA0NjQ2MjM1MzEKKzIzLFdlZCAxNiBGZWIgMTEsNDcyLjM4OTk1MDU5OTQ5MTUsNjc5LjkzNDU5ODM4Nzk4NgorMjQsVGh1IDE3IEZlYiAxMSw1NTEuODM3OTc4NjE0MDUzMiw3MzcuNTIzNTUzMTIxMTIwOAorMjUsRnJpIDE4IEZlYiAxMSw2MjUuMzE2NjA3NDQ5MjE4NSw3ODYuODA2MTg4Nzg1NTc3OAorMjYsU2F0IDE5IEZlYiAxMSw2OTAuOTE3MzY3NjEwOTY5MSw4MjguMTYzNjg3NzcxMjQ1NQorMjcsU3VuIDIwIEZlYiAxMSw3NDcuODQ0ODEwMzU3NDA1Myw4NjIuMzIxNzM4NjUzMjg3MgorMjgsTW9uIDIxIEZlYiAxMSw3OTYuMTMxMDE3NzA5NDUyNyw4OTAuMTY3NjQ5MDcyNzczNworMjksVHVlIDIyIEZlYiAxMSw4MzYuMzQwODQyNTEyMjY4MSw5MTIuNjI0ODQ5OTc2NDkzNgorMzAsV2VkIDIzIEZlYiAxMSw4NjkuMzI4ODgzMjg1MjE4OSw5MzAuNTc1MjA4NzUxOTU3NgorMzEsVGh1IDI0IEZlYiAxMSw4OTYuMDYzOTM5NDcyMDU1LDk0NC44MTY3MzkwOTA4MDg2CiszMixGcmkgMjUgRmViIDExLDkxNy41MTQ2ODExMzg3NDg1LDk1Ni4wNDU0MDcyNDc3Nzc4CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1R3b1NxdWFyZXNNaXhpbmdTRUlSX1JLX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9TXzAuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Ud29TcXVhcmVzTWl4aW5nU0VJUl9SS19SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vU18wLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42OGRlZTFmCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Ud29TcXVhcmVzTWl4aW5nU0VJUl9SS19SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vU18wLmNzdgpAQCAtMCwwICsxLDMzIEBACitpdGVyYXRpb24sdGltZSxzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9ub2RlLzQ0OTUzNjVBMDIzMjhCMTYvTEFUX1NRUl8wXzAsc3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vbm9kZS80NDk1MzY1QTAyMzI4QjE2L0xBVF9TUVJfMV8wCisxLFR1ZSAyNSBKYW4gMTEsMTAwMC4wLDk5OS4wCisyLFdlZCAyNiBKYW4gMTEsOTk5LjkyMTU4NTU1Njg5MzEsOTk3LjU2MTQyMTIwODA3MjgKKzMsVGh1IDI3IEphbiAxMSw5OTkuNzk2ODQwMjc4MDY4Myw5OTUuODY2MjcxODU4OTUwNAorNCxGcmkgMjggSmFuIDExLDk5OS41NjQxNzY0NDYyODY1LDk5My40MjYyMzUwODEyMjQKKzUsU2F0IDI5IEphbiAxMSw5OTkuMTM2MzY4MTg3MjQ1MSw5ODkuNzMyODYyMTYzNTI5NworNixTdW4gMzAgSmFuIDExLDk5OC4zNzAwOTkxODI0ODIxLDk4NC4wOTIyNDExOTQ1OTY4Cis3LE1vbiAzMSBKYW4gMTEsOTk3LjAyNjYxMzM5NzAxODcsOTc1LjQ5MTAxOTkyNjI0NjYKKzgsVHVlIDEgRmViIDExLDk5NC43MTE4MTcxMDc3MTU1LDk2Mi40NTAyMzEzNzM1NDA0Cis5LFdlZCAyIEZlYiAxMSw5OTAuNzgxNjkxMzM5ODEyMSw5NDIuODY2Mjk0NzYxNjk1CisxMCxUaHUgMyBGZWIgMTEsOTg0LjIwOTc2ODMyODg5NjYsOTEzLjg4NzYxMTM5NDU3MTkKKzExLEZyaSA0IEZlYiAxMSw5NzMuMzg4MjAzNDQ2NjkzLDg3MS45NDgzNzk2Mjg2NzYzCisxMixTYXQgNSBGZWIgMTEsOTU1Ljg5ODA5ODk2OTc0NzYsODEzLjIwMjgwMzgyMjIwNjkKKzEzLFN1biA2IEZlYiAxMSw5MjguMjk4Mzc4ODA1MjcyNyw3MzQuNjcwNjYzNjc2Mzc2CisxNCxNb24gNyBGZWIgMTEsODg2LjEyODgwMzQ3MTAwNTQsNjM2LjIxNTUzNjE3NzUwMzcKKzE1LFR1ZSA4IEZlYiAxMSw4MjQuNDkzNzUyMTA2NjI1LDUyMi42OTUxNjU1OTE4MTc4CisxNixXZWQgOSBGZWIgMTEsNzM5LjY4ODIzMjY1NzgxNDIsNDA0LjQ4MzgyNTc4OTAwNzEKKzE3LFRodSAxMCBGZWIgMTEsNjMyLjAzMDUxNzg5MTk0MDUsMjk0LjY1Nzg1ODM4NzA5MzcKKzE4LEZyaSAxMSBGZWIgMTEsNTA4LjUzNDI4MDIzMTA0MzMsMjAzLjc0MTQyMDY2MDE2Njc3CisxOSxTYXQgMTIgRmViIDExLDM4Mi44MTQzMjMzNzMzOTM2LDEzNS45MjM2MzY2NjAxODkxNworMjAsU3VuIDEzIEZlYiAxMSwyNzAuMjc4Mjc1Nzc1MTk5OSw4OS4zNDUzNzUyNTM0MTI2MQorMjEsTW9uIDE0IEZlYiAxMSwxODEuMzIwMDU3MDMyNzM0Miw1OS4wOTA1ODI5OTM2Njc2CisyMixUdWUgMTUgRmViIDExLDExOC4wNjYxMzcyNzgzMTE3Myw0MC4wMDkwNDI2NjEwOTU5MworMjMsV2VkIDE2IEZlYiAxMSw3Ni40NDk2NDUzMzU0MTIyNywyOC4wNjQ5NDYwNDMwODkzMDQKKzI0LFRodSAxNyBGZWIgMTEsNTAuMzEzNjkyNjM3ODk3OTYsMjAuNTI2NzU2ODQyNjYyMjM0CisyNSxGcmkgMTggRmViIDExLDM0LjIwMzI1MjU0MTIyMTEwNCwxNS42ODI3MjA4MzcwMzExODIKKzI2LFNhdCAxOSBGZWIgMTEsMjQuMjQ5ODUyODUyOTA5Mzk1LDEyLjQ5ODU1NzA0ODgyODAwMQorMjcsU3VuIDIwIEZlYiAxMSwxOC4wMDA2MTU5NTY3OTAzNzMsMTAuMzU0NTg5ODg3MjcyMjUKKzI4LE1vbiAyMSBGZWIgMTEsMTMuOTg0MDkwNzcyNDE4MzAyLDguODc3NDIzNjc5NzAwNzgxCisyOSxUdWUgMjIgRmViIDExLDExLjMzNDQ4MDc5NDI2NTAzMyw3LjgzODM5NDEyOTMxMzgxMQorMzAsV2VkIDIzIEZlYiAxMSw5LjU0MTI3NDcxMTAxNTU4NCw3LjA5NDQwNTQ3ODQyMTI4OQorMzEsVGh1IDI0IEZlYiAxMSw4LjI5ODkzNDA4OTIxNTU2LDYuNTUzNzA2NDQ5NTc0NTE0NQorMzIsRnJpIDI1IEZlYiAxMSw3LjQyMDUyNDA2NjIzNzE3OCw2LjE1NTk4MzUzNzk3MzA2MgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Ud29TcXVhcmVzTWl4aW5nU0VJUl9SS19SZWZlcmVuY2UvVGVzdFNFSVIvcnVucGFyYW1ldGVycy5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1R3b1NxdWFyZXNNaXhpbmdTRUlSX1JLX1JlZmVyZW5jZS9UZXN0U0VJUi9ydW5wYXJhbWV0ZXJzLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZWQ4ZjUxCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Ud29TcXVhcmVzTWl4aW5nU0VJUl9SS19SZWZlcmVuY2UvVGVzdFNFSVIvcnVucGFyYW1ldGVycy5jc3YKQEAgLTAsMCArMSwyIEBACitkaXNlYXNlTmFtZSxwb3B1bGF0aW9uSWRlbnRpZmllcix0aW1lUGVyaW9kLGZyZXF1ZW5jeURlcGVuZGVudCxyZWZlcmVuY2VQb3B1bGF0aW9uRGVuc2l0eSxyb2FkTmV0d29ya0luZmVjdGlvdXNQcm9wb3J0aW9uLGNoYXJhY3RlcmlzdGljTWl4aW5nRGlzdGFuY2UsdHJhbnNtaXNzaW9uUmF0ZSxub25MaW5lYXJpdHlDb2VmZmljaWVudCxyZWNvdmVyeVJhdGUsaW5mZWN0aW91c01vcnRhbGl0eVJhdGUsaW1tdW5pdHlMb3NzUmF0ZSxpbmN1YmF0aW9uUmF0ZQorVGVzdFNFSVIsaHVtYW4sODY0MDAwMDAsdHJ1ZSwxMDAuMCwwLjAxLDIuMjUsMS42LDEuMCwwLjMsMC4wLDAuMCwwLjQKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1R3b1NxdWFyZXNNaXhpbmdTRUlSX1JLX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL2h1bWFuL0JpcnRoc18wLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvVHdvU3F1YXJlc01peGluZ1NFSVJfUktfUmVmZXJlbmNlL2F1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwvaHVtYW4vQmlydGhzXzAuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgzMDdjYTQKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1R3b1NxdWFyZXNNaXhpbmdTRUlSX1JLX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL2h1bWFuL0JpcnRoc18wLmNzdgpAQCAtMCwwICsxLDMzIEBACitpdGVyYXRpb24sdGltZSxzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9ub2RlLzQ0OTUzNjVBMDIzMjhCMTYvTEFUX1NRUl8wXzAsc3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vbm9kZS80NDk1MzY1QTAyMzI4QjE2L0xBVF9TUVJfMV8wCisxLFR1ZSAyNSBKYW4gMTEsMC4wLDAuMAorMixXZWQgMjYgSmFuIDExLDAuMCwwLjAKKzMsVGh1IDI3IEphbiAxMSwwLjAsMC4wCis0LEZyaSAyOCBKYW4gMTEsMC4wLDAuMAorNSxTYXQgMjkgSmFuIDExLDAuMCwwLjAKKzYsU3VuIDMwIEphbiAxMSwwLjAsMC4wCis3LE1vbiAzMSBKYW4gMTEsMC4wLDAuMAorOCxUdWUgMSBGZWIgMTEsMC4wLDAuMAorOSxXZWQgMiBGZWIgMTEsMC4wLDAuMAorMTAsVGh1IDMgRmViIDExLDAuMCwwLjAKKzExLEZyaSA0IEZlYiAxMSwwLjAsMC4wCisxMixTYXQgNSBGZWIgMTEsMC4wLDAuMAorMTMsU3VuIDYgRmViIDExLDAuMCwwLjAKKzE0LE1vbiA3IEZlYiAxMSwwLjAsMC4wCisxNSxUdWUgOCBGZWIgMTEsMC4wLDAuMAorMTYsV2VkIDkgRmViIDExLDAuMCwwLjAKKzE3LFRodSAxMCBGZWIgMTEsMC4wLDAuMAorMTgsRnJpIDExIEZlYiAxMSwwLjAsMC4wCisxOSxTYXQgMTIgRmViIDExLDAuMCwwLjAKKzIwLFN1biAxMyBGZWIgMTEsMC4wLDAuMAorMjEsTW9uIDE0IEZlYiAxMSwwLjAsMC4wCisyMixUdWUgMTUgRmViIDExLDAuMCwwLjAKKzIzLFdlZCAxNiBGZWIgMTEsMC4wLDAuMAorMjQsVGh1IDE3IEZlYiAxMSwwLjAsMC4wCisyNSxGcmkgMTggRmViIDExLDAuMCwwLjAKKzI2LFNhdCAxOSBGZWIgMTEsMC4wLDAuMAorMjcsU3VuIDIwIEZlYiAxMSwwLjAsMC4wCisyOCxNb24gMjEgRmViIDExLDAuMCwwLjAKKzI5LFR1ZSAyMiBGZWIgMTEsMC4wLDAuMAorMzAsV2VkIDIzIEZlYiAxMSwwLjAsMC4wCiszMSxUaHUgMjQgRmViIDExLDAuMCwwLjAKKzMyLEZyaSAyNSBGZWIgMTEsMC4wLDAuMApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Ud29TcXVhcmVzTWl4aW5nU0VJUl9SS19SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9odW1hbi9Db3VudF8wLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvVHdvU3F1YXJlc01peGluZ1NFSVJfUktfUmVmZXJlbmNlL2F1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwvaHVtYW4vQ291bnRfMC5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjk1NTE2YQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvVHdvU3F1YXJlc01peGluZ1NFSVJfUktfUmVmZXJlbmNlL2F1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwvaHVtYW4vQ291bnRfMC5jc3YKQEAgLTAsMCArMSwzMyBAQAoraXRlcmF0aW9uLHRpbWUsc3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vbm9kZS80NDk1MzY1QTAyMzI4QjE2L0xBVF9TUVJfMF8wLHN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL25vZGUvNDQ5NTM2NUEwMjMyOEIxNi9MQVRfU1FSXzFfMAorMSxUdWUgMjUgSmFuIDExLDEwMDAuMCwxMDAwLjAKKzIsV2VkIDI2IEphbiAxMSwxMDAwLjAsMTAwMC4wCiszLFRodSAyNyBKYW4gMTEsMTAwMC4wLDEwMDAuMAorNCxGcmkgMjggSmFuIDExLDEwMDAuMCwxMDAwLjAKKzUsU2F0IDI5IEphbiAxMSwxMDAwLjAsMTAwMC4wCis2LFN1biAzMCBKYW4gMTEsMTAwMC4wLDEwMDAuMAorNyxNb24gMzEgSmFuIDExLDEwMDAuMCwxMDAwLjAKKzgsVHVlIDEgRmViIDExLDEwMDAuMCwxMDAwLjAKKzksV2VkIDIgRmViIDExLDEwMDAuMCwxMDAwLjAKKzEwLFRodSAzIEZlYiAxMSwxMDAwLjAsMTAwMC4wCisxMSxGcmkgNCBGZWIgMTEsMTAwMC4wLDEwMDAuMAorMTIsU2F0IDUgRmViIDExLDEwMDAuMCwxMDAwLjAKKzEzLFN1biA2IEZlYiAxMSwxMDAwLjAsMTAwMC4wCisxNCxNb24gNyBGZWIgMTEsMTAwMC4wLDEwMDAuMAorMTUsVHVlIDggRmViIDExLDEwMDAuMCwxMDAwLjAKKzE2LFdlZCA5IEZlYiAxMSwxMDAwLjAsMTAwMC4wCisxNyxUaHUgMTAgRmViIDExLDEwMDAuMCwxMDAwLjAKKzE4LEZyaSAxMSBGZWIgMTEsMTAwMC4wLDEwMDAuMAorMTksU2F0IDEyIEZlYiAxMSwxMDAwLjAsMTAwMC4wCisyMCxTdW4gMTMgRmViIDExLDEwMDAuMCwxMDAwLjAKKzIxLE1vbiAxNCBGZWIgMTEsMTAwMC4wLDEwMDAuMAorMjIsVHVlIDE1IEZlYiAxMSwxMDAwLjAsMTAwMC4wCisyMyxXZWQgMTYgRmViIDExLDEwMDAuMCwxMDAwLjAKKzI0LFRodSAxNyBGZWIgMTEsMTAwMC4wLDEwMDAuMAorMjUsRnJpIDE4IEZlYiAxMSwxMDAwLjAsMTAwMC4wCisyNixTYXQgMTkgRmViIDExLDEwMDAuMCwxMDAwLjAKKzI3LFN1biAyMCBGZWIgMTEsMTAwMC4wLDEwMDAuMAorMjgsTW9uIDIxIEZlYiAxMSwxMDAwLjAsMTAwMC4wCisyOSxUdWUgMjIgRmViIDExLDEwMDAuMCwxMDAwLjAKKzMwLFdlZCAyMyBGZWIgMTEsMTAwMC4wLDEwMDAuMAorMzEsVGh1IDI0IEZlYiAxMSwxMDAwLjAsMTAwMC4wCiszMixGcmkgMjUgRmViIDExLDEwMDAuMCwxMDAwLjAKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvVHdvU3F1YXJlc01peGluZ1NFSVJfUktfUmVmZXJlbmNlL2F1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwvaHVtYW4vRGVhdGhzXzAuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Ud29TcXVhcmVzTWl4aW5nU0VJUl9SS19SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9odW1hbi9EZWF0aHNfMC5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODMwN2NhNAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvVHdvU3F1YXJlc01peGluZ1NFSVJfUktfUmVmZXJlbmNlL2F1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwvaHVtYW4vRGVhdGhzXzAuY3N2CkBAIC0wLDAgKzEsMzMgQEAKK2l0ZXJhdGlvbix0aW1lLHN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL25vZGUvNDQ5NTM2NUEwMjMyOEIxNi9MQVRfU1FSXzBfMCxzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9ub2RlLzQ0OTUzNjVBMDIzMjhCMTYvTEFUX1NRUl8xXzAKKzEsVHVlIDI1IEphbiAxMSwwLjAsMC4wCisyLFdlZCAyNiBKYW4gMTEsMC4wLDAuMAorMyxUaHUgMjcgSmFuIDExLDAuMCwwLjAKKzQsRnJpIDI4IEphbiAxMSwwLjAsMC4wCis1LFNhdCAyOSBKYW4gMTEsMC4wLDAuMAorNixTdW4gMzAgSmFuIDExLDAuMCwwLjAKKzcsTW9uIDMxIEphbiAxMSwwLjAsMC4wCis4LFR1ZSAxIEZlYiAxMSwwLjAsMC4wCis5LFdlZCAyIEZlYiAxMSwwLjAsMC4wCisxMCxUaHUgMyBGZWIgMTEsMC4wLDAuMAorMTEsRnJpIDQgRmViIDExLDAuMCwwLjAKKzEyLFNhdCA1IEZlYiAxMSwwLjAsMC4wCisxMyxTdW4gNiBGZWIgMTEsMC4wLDAuMAorMTQsTW9uIDcgRmViIDExLDAuMCwwLjAKKzE1LFR1ZSA4IEZlYiAxMSwwLjAsMC4wCisxNixXZWQgOSBGZWIgMTEsMC4wLDAuMAorMTcsVGh1IDEwIEZlYiAxMSwwLjAsMC4wCisxOCxGcmkgMTEgRmViIDExLDAuMCwwLjAKKzE5LFNhdCAxMiBGZWIgMTEsMC4wLDAuMAorMjAsU3VuIDEzIEZlYiAxMSwwLjAsMC4wCisyMSxNb24gMTQgRmViIDExLDAuMCwwLjAKKzIyLFR1ZSAxNSBGZWIgMTEsMC4wLDAuMAorMjMsV2VkIDE2IEZlYiAxMSwwLjAsMC4wCisyNCxUaHUgMTcgRmViIDExLDAuMCwwLjAKKzI1LEZyaSAxOCBGZWIgMTEsMC4wLDAuMAorMjYsU2F0IDE5IEZlYiAxMSwwLjAsMC4wCisyNyxTdW4gMjAgRmViIDExLDAuMCwwLjAKKzI4LE1vbiAyMSBGZWIgMTEsMC4wLDAuMAorMjksVHVlIDIyIEZlYiAxMSwwLjAsMC4wCiszMCxXZWQgMjMgRmViIDExLDAuMCwwLjAKKzMxLFRodSAyNCBGZWIgMTEsMC4wLDAuMAorMzIsRnJpIDI1IEZlYiAxMSwwLjAsMC4wCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1R3b1NxdWFyZXNNaXhpbmdTRUlSX1JLX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL2h1bWFuL0RlbnNpdHlfMC5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1R3b1NxdWFyZXNNaXhpbmdTRUlSX1JLX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL2h1bWFuL0RlbnNpdHlfMC5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTYyNWJjZgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvVHdvU3F1YXJlc01peGluZ1NFSVJfUktfUmVmZXJlbmNlL2F1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwvaHVtYW4vRGVuc2l0eV8wLmNzdgpAQCAtMCwwICsxLDMzIEBACitpdGVyYXRpb24sdGltZSxzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9ub2RlLzQ0OTUzNjVBMDIzMjhCMTYvTEFUX1NRUl8wXzAsc3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vbm9kZS80NDk1MzY1QTAyMzI4QjE2L0xBVF9TUVJfMV8wCisxLFR1ZSAyNSBKYW4gMTEsMC40OTM4MjcxNjA0OTM4MjcxMywwLjQ5MzgyNzE2MDQ5MzgyNzEzCisyLFdlZCAyNiBKYW4gMTEsMC40OTM4MjcxNjA0OTM4MjcxMywwLjQ5MzgyNzE2MDQ5MzgyNzEzCiszLFRodSAyNyBKYW4gMTEsMC40OTM4MjcxNjA0OTM4MjcxMywwLjQ5MzgyNzE2MDQ5MzgyNzEzCis0LEZyaSAyOCBKYW4gMTEsMC40OTM4MjcxNjA0OTM4MjcxMywwLjQ5MzgyNzE2MDQ5MzgyNzEzCis1LFNhdCAyOSBKYW4gMTEsMC40OTM4MjcxNjA0OTM4MjcxMywwLjQ5MzgyNzE2MDQ5MzgyNzEzCis2LFN1biAzMCBKYW4gMTEsMC40OTM4MjcxNjA0OTM4MjcxMywwLjQ5MzgyNzE2MDQ5MzgyNzEzCis3LE1vbiAzMSBKYW4gMTEsMC40OTM4MjcxNjA0OTM4MjcxMywwLjQ5MzgyNzE2MDQ5MzgyNzEzCis4LFR1ZSAxIEZlYiAxMSwwLjQ5MzgyNzE2MDQ5MzgyNzEzLDAuNDkzODI3MTYwNDkzODI3MTMKKzksV2VkIDIgRmViIDExLDAuNDkzODI3MTYwNDkzODI3MTMsMC40OTM4MjcxNjA0OTM4MjcxMworMTAsVGh1IDMgRmViIDExLDAuNDkzODI3MTYwNDkzODI3MTMsMC40OTM4MjcxNjA0OTM4MjcxMworMTEsRnJpIDQgRmViIDExLDAuNDkzODI3MTYwNDkzODI3MTMsMC40OTM4MjcxNjA0OTM4MjcxMworMTIsU2F0IDUgRmViIDExLDAuNDkzODI3MTYwNDkzODI3MTMsMC40OTM4MjcxNjA0OTM4MjcxMworMTMsU3VuIDYgRmViIDExLDAuNDkzODI3MTYwNDkzODI3MTMsMC40OTM4MjcxNjA0OTM4MjcxMworMTQsTW9uIDcgRmViIDExLDAuNDkzODI3MTYwNDkzODI3MTMsMC40OTM4MjcxNjA0OTM4MjcxMworMTUsVHVlIDggRmViIDExLDAuNDkzODI3MTYwNDkzODI3MTMsMC40OTM4MjcxNjA0OTM4MjcxMworMTYsV2VkIDkgRmViIDExLDAuNDkzODI3MTYwNDkzODI3MTMsMC40OTM4MjcxNjA0OTM4MjcxMworMTcsVGh1IDEwIEZlYiAxMSwwLjQ5MzgyNzE2MDQ5MzgyNzEzLDAuNDkzODI3MTYwNDkzODI3MTMKKzE4LEZyaSAxMSBGZWIgMTEsMC40OTM4MjcxNjA0OTM4MjcxMywwLjQ5MzgyNzE2MDQ5MzgyNzEzCisxOSxTYXQgMTIgRmViIDExLDAuNDkzODI3MTYwNDkzODI3MTMsMC40OTM4MjcxNjA0OTM4MjcxMworMjAsU3VuIDEzIEZlYiAxMSwwLjQ5MzgyNzE2MDQ5MzgyNzEzLDAuNDkzODI3MTYwNDkzODI3MTMKKzIxLE1vbiAxNCBGZWIgMTEsMC40OTM4MjcxNjA0OTM4MjcxMywwLjQ5MzgyNzE2MDQ5MzgyNzEzCisyMixUdWUgMTUgRmViIDExLDAuNDkzODI3MTYwNDkzODI3MTMsMC40OTM4MjcxNjA0OTM4MjcxMworMjMsV2VkIDE2IEZlYiAxMSwwLjQ5MzgyNzE2MDQ5MzgyNzEzLDAuNDkzODI3MTYwNDkzODI3MTMKKzI0LFRodSAxNyBGZWIgMTEsMC40OTM4MjcxNjA0OTM4MjcxMywwLjQ5MzgyNzE2MDQ5MzgyNzEzCisyNSxGcmkgMTggRmViIDExLDAuNDkzODI3MTYwNDkzODI3MTMsMC40OTM4MjcxNjA0OTM4MjcxMworMjYsU2F0IDE5IEZlYiAxMSwwLjQ5MzgyNzE2MDQ5MzgyNzEzLDAuNDkzODI3MTYwNDkzODI3MTMKKzI3LFN1biAyMCBGZWIgMTEsMC40OTM4MjcxNjA0OTM4MjcxMywwLjQ5MzgyNzE2MDQ5MzgyNzEzCisyOCxNb24gMjEgRmViIDExLDAuNDkzODI3MTYwNDkzODI3MTMsMC40OTM4MjcxNjA0OTM4MjcxMworMjksVHVlIDIyIEZlYiAxMSwwLjQ5MzgyNzE2MDQ5MzgyNzEzLDAuNDkzODI3MTYwNDkzODI3MTMKKzMwLFdlZCAyMyBGZWIgMTEsMC40OTM4MjcxNjA0OTM4MjcxMywwLjQ5MzgyNzE2MDQ5MzgyNzEzCiszMSxUaHUgMjQgRmViIDExLDAuNDkzODI3MTYwNDkzODI3MTMsMC40OTM4MjcxNjA0OTM4MjcxMworMzIsRnJpIDI1IEZlYiAxMSwwLjQ5MzgyNzE2MDQ5MzgyNzEzLDAuNDkzODI3MTYwNDkzODI3MTMKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvVHdvU3F1YXJlc01peGluZ1NFSVJfUktfUmVmZXJlbmNlL2F1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwvaHVtYW4vSW5jaWRlbmNlXzAuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Ud29TcXVhcmVzTWl4aW5nU0VJUl9SS19SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9odW1hbi9JbmNpZGVuY2VfMC5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODMwN2NhNAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvVHdvU3F1YXJlc01peGluZ1NFSVJfUktfUmVmZXJlbmNlL2F1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwvaHVtYW4vSW5jaWRlbmNlXzAuY3N2CkBAIC0wLDAgKzEsMzMgQEAKK2l0ZXJhdGlvbix0aW1lLHN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL25vZGUvNDQ5NTM2NUEwMjMyOEIxNi9MQVRfU1FSXzBfMCxzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9ub2RlLzQ0OTUzNjVBMDIzMjhCMTYvTEFUX1NRUl8xXzAKKzEsVHVlIDI1IEphbiAxMSwwLjAsMC4wCisyLFdlZCAyNiBKYW4gMTEsMC4wLDAuMAorMyxUaHUgMjcgSmFuIDExLDAuMCwwLjAKKzQsRnJpIDI4IEphbiAxMSwwLjAsMC4wCis1LFNhdCAyOSBKYW4gMTEsMC4wLDAuMAorNixTdW4gMzAgSmFuIDExLDAuMCwwLjAKKzcsTW9uIDMxIEphbiAxMSwwLjAsMC4wCis4LFR1ZSAxIEZlYiAxMSwwLjAsMC4wCis5LFdlZCAyIEZlYiAxMSwwLjAsMC4wCisxMCxUaHUgMyBGZWIgMTEsMC4wLDAuMAorMTEsRnJpIDQgRmViIDExLDAuMCwwLjAKKzEyLFNhdCA1IEZlYiAxMSwwLjAsMC4wCisxMyxTdW4gNiBGZWIgMTEsMC4wLDAuMAorMTQsTW9uIDcgRmViIDExLDAuMCwwLjAKKzE1LFR1ZSA4IEZlYiAxMSwwLjAsMC4wCisxNixXZWQgOSBGZWIgMTEsMC4wLDAuMAorMTcsVGh1IDEwIEZlYiAxMSwwLjAsMC4wCisxOCxGcmkgMTEgRmViIDExLDAuMCwwLjAKKzE5LFNhdCAxMiBGZWIgMTEsMC4wLDAuMAorMjAsU3VuIDEzIEZlYiAxMSwwLjAsMC4wCisyMSxNb24gMTQgRmViIDExLDAuMCwwLjAKKzIyLFR1ZSAxNSBGZWIgMTEsMC4wLDAuMAorMjMsV2VkIDE2IEZlYiAxMSwwLjAsMC4wCisyNCxUaHUgMTcgRmViIDExLDAuMCwwLjAKKzI1LEZyaSAxOCBGZWIgMTEsMC4wLDAuMAorMjYsU2F0IDE5IEZlYiAxMSwwLjAsMC4wCisyNyxTdW4gMjAgRmViIDExLDAuMCwwLjAKKzI4LE1vbiAyMSBGZWIgMTEsMC4wLDAuMAorMjksVHVlIDIyIEZlYiAxMSwwLjAsMC4wCiszMCxXZWQgMjMgRmViIDExLDAuMCwwLjAKKzMxLFRodSAyNCBGZWIgMTEsMC4wLDAuMAorMzIsRnJpIDI1IEZlYiAxMSwwLjAsMC4wCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1R3b1NxdWFyZXNNaXhpbmdTRUlSX1JLX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL3J1bnBhcmFtZXRlcnMuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Ud29TcXVhcmVzTWl4aW5nU0VJUl9SS19SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9ydW5wYXJhbWV0ZXJzLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNjg1NWI1Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Ud29TcXVhcmVzTWl4aW5nU0VJUl9SS19SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9ydW5wYXJhbWV0ZXJzLmNzdgpAQCAtMCwwICsxLDIgQEAKK3BvcHVsYXRpb25JZGVudGlmaWVyLG5hbWUsdGFyZ2V0SVNPS2V5LGJpcnRoUmF0ZSxkZWF0aFJhdGUsdGltZVBlcmlvZAoraHVtYW4sYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbCwsMC4wLDAuMCw4NjQwMDAwMApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9kZWNvcmF0b3JzL0FnaW5nTW9kZWwuc3RhbmRhcmQgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvZGVjb3JhdG9ycy9BZ2luZ01vZGVsLnN0YW5kYXJkCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUzYWZkNWEKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvZGVjb3JhdG9ycy9BZ2luZ01vZGVsLnN0YW5kYXJkCkBAIC0wLDAgKzEsNyBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4NCis8b3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkOkFnaW5nUG9wdWxhdGlvbk1vZGVsIHhtaTp2ZXJzaW9uPSIyLjAiIHhtbG5zOnhtaT0iaHR0cDovL3d3dy5vbWcub3JnL1hNSSIgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIgeG1sbnM6b3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkPSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vcG9wdWxhdGlvbm1vZGVscy9zdGFuZGFyZCIgdVJJPSJwbGF0Zm9ybTovcmVzb3VyY2UvQmFzaWNUZXN0cy9kZWNvcmF0b3JzL0FnaW5nTW9kZWwuc3RhbmRhcmQiIHR5cGVVUkk9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9JZGVudGlmaWFibGUiIGJpcnRoUmF0ZT0iMS4wRS00IiBkZWF0aFJhdGU9IjEuMEUtNCI+DQorICA8ZHVibGluQ29yZSBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcmVzb3VyY2UvQmFzaWNUZXN0cy9kZWNvcmF0b3JzL0FnaW5nTW9kZWwuc3RhbmRhcmQiIGNyZWF0b3I9ImxvYW5lcjI1IiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9wb3B1bGF0aW9ubW9kZWxzL3N0YW5kYXJkIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vSWRlbnRpZmlhYmxlIiBjcmVhdGVkPSIyMDExLTA1LTI2Ii8+DQorICA8cG9wdWxhdGlvbkdyb3VwcyB4c2k6dHlwZT0ib3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkOkFnZUdyb3VwIiBpZGVudGlmaWVyPSJodW1hbjB0bzAiIGZyYWN0aW9uPSIwLjQiIGRlYXRoRmFjdG9yPSIyLjAiIGxpbWl0ZWQ9InRydWUiLz4NCisgIDxwb3B1bGF0aW9uR3JvdXBzIHhzaTp0eXBlPSJvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQ6QWdlR3JvdXAiIGlkZW50aWZpZXI9Imh1bWFuMXRvMSIgZnJhY3Rpb249IjAuNCIgZnJvbUFnZT0iMSIgdG9BZ2U9IjEiIGxpbWl0ZWQ9InRydWUiLz4NCisgIDxwb3B1bGF0aW9uR3JvdXBzIHhzaTp0eXBlPSJvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQ6QWdlR3JvdXAiIGlkZW50aWZpZXI9Imh1bWFuMnRvLSIgZnJhY3Rpb249IjAuMiIgZnJvbUFnZT0iMiIgZGVhdGhGYWN0b3I9IjAuMCIvPg0KKzwvb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkOkFnaW5nUG9wdWxhdGlvbk1vZGVsPg0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9kZWNvcmF0b3JzL0FnaW5nU0VJUkRpc2Vhc2Uuc3RhbmRhcmQgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvZGVjb3JhdG9ycy9BZ2luZ1NFSVJEaXNlYXNlLnN0YW5kYXJkCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZmYTg1M2YKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvZGVjb3JhdG9ycy9BZ2luZ1NFSVJEaXNlYXNlLnN0YW5kYXJkCkBAIC0wLDAgKzEsNDYgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+DQorPG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5tdWx0aXBvcHVsYXRpb246TXVsdGlQb3B1bGF0aW9uU0VJUkRpc2Vhc2VNb2RlbCB4bWk6dmVyc2lvbj0iMi4wIiB4bWxuczp4bWk9Imh0dHA6Ly93d3cub21nLm9yZy9YTUkiIHhtbG5zOm9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5tdWx0aXBvcHVsYXRpb249Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL211bHRpcG9wdWxhdGlvbi5lY29yZSIgdVJJPSJwbGF0Zm9ybTovcmVzb3VyY2UvQmFzaWNUZXN0cy9kZWNvcmF0b3JzL0FnaW5nU0VJUkRpc2Vhc2Uuc3RhbmRhcmQiIHR5cGVVUkk9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9JZGVudGlmaWFibGUiIGRpc2Vhc2VOYW1lPSJBZ2luZ1NFSVJEaXNlYXNlIj4NCisgIDxkdWJsaW5Db3JlIGlkZW50aWZpZXI9InBsYXRmb3JtOi9yZXNvdXJjZS9CYXNpY1Rlc3RzL2RlY29yYXRvcnMvQWdpbmdTRUlSRGlzZWFzZS5zdGFuZGFyZCIgY3JlYXRvcj0ibG9hbmVyMjUiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvc3RhbmRhcmQuZWNvcmUiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9JZGVudGlmaWFibGUiIGNyZWF0ZWQ9IjIwMTEtMDUtMjYiLz4NCisgIDxwb3B1bGF0aW9uR3JvdXBzPg0KKyAgICA8dmFsdWVzIHZhbHVlPSJodW1hbjB0bzAiLz4NCisgICAgPHZhbHVlcyB2YWx1ZT0iaHVtYW4xdG8xIi8+DQorICAgIDx2YWx1ZXMgdmFsdWU9Imh1bWFuMnRvLSIvPg0KKyAgPC9wb3B1bGF0aW9uR3JvdXBzPg0KKyAgPHRyYW5zbWlzc2lvblJhdGU+DQorICAgIDx2YWx1ZUxpc3RzIGlkZW50aWZpZXI9Imh1bWFuMHRvMCI+DQorICAgICAgPHZhbHVlcyBpZGVudGlmaWVyPSJodW1hbjB0bzAiIHZhbHVlPSIwLjMiLz4NCisgICAgICA8dmFsdWVzIGlkZW50aWZpZXI9Imh1bWFuMXRvMSIgdmFsdWU9IjAuMyIvPg0KKyAgICAgIDx2YWx1ZXMgaWRlbnRpZmllcj0iaHVtYW4ydG8tIiB2YWx1ZT0iMC4zIi8+DQorICAgIDwvdmFsdWVMaXN0cz4NCisgICAgPHZhbHVlTGlzdHMgaWRlbnRpZmllcj0iaHVtYW4xdG8xIj4NCisgICAgICA8dmFsdWVzIGlkZW50aWZpZXI9Imh1bWFuMHRvMCIgdmFsdWU9IjAuMyIvPg0KKyAgICAgIDx2YWx1ZXMgaWRlbnRpZmllcj0iaHVtYW4xdG8xIi8+DQorICAgICAgPHZhbHVlcyBpZGVudGlmaWVyPSJodW1hbjJ0by0iLz4NCisgICAgPC92YWx1ZUxpc3RzPg0KKyAgICA8dmFsdWVMaXN0cyBpZGVudGlmaWVyPSJodW1hbjJ0by0iPg0KKyAgICAgIDx2YWx1ZXMgaWRlbnRpZmllcj0iaHVtYW4wdG8wIi8+DQorICAgICAgPHZhbHVlcyBpZGVudGlmaWVyPSJodW1hbjF0bzEiIHZhbHVlPSIwLjMiLz4NCisgICAgICA8dmFsdWVzIGlkZW50aWZpZXI9Imh1bWFuMnRvLSIvPg0KKyAgICA8L3ZhbHVlTGlzdHM+DQorICA8L3RyYW5zbWlzc2lvblJhdGU+DQorICA8cmVjb3ZlcnlSYXRlPg0KKyAgICA8dmFsdWVzIGlkZW50aWZpZXI9Imh1bWFuMHRvMCIgdmFsdWU9IjAuMSIvPg0KKyAgICA8dmFsdWVzIGlkZW50aWZpZXI9Imh1bWFuMXRvMSIgdmFsdWU9IjAuMSIvPg0KKyAgICA8dmFsdWVzIGlkZW50aWZpZXI9Imh1bWFuMnRvLSIgdmFsdWU9IjAuMSIvPg0KKyAgPC9yZWNvdmVyeVJhdGU+DQorICA8aW5mZWN0aW91c01vcnRhbGl0eVJhdGU+DQorICAgIDx2YWx1ZXMgaWRlbnRpZmllcj0iaHVtYW4wdG8wIi8+DQorICAgIDx2YWx1ZXMgaWRlbnRpZmllcj0iaHVtYW4xdG8xIi8+DQorICAgIDx2YWx1ZXMgaWRlbnRpZmllcj0iaHVtYW4ydG8tIi8+DQorICA8L2luZmVjdGlvdXNNb3J0YWxpdHlSYXRlPg0KKyAgPGltbXVuaXR5TG9zc1JhdGU+DQorICAgIDx2YWx1ZXMgaWRlbnRpZmllcj0iaHVtYW4wdG8wIi8+DQorICAgIDx2YWx1ZXMgaWRlbnRpZmllcj0iaHVtYW4xdG8xIi8+DQorICAgIDx2YWx1ZXMgaWRlbnRpZmllcj0iaHVtYW4ydG8tIi8+DQorICA8L2ltbXVuaXR5TG9zc1JhdGU+DQorICA8aW5jdWJhdGlvblJhdGU+DQorICAgIDx2YWx1ZXMgaWRlbnRpZmllcj0iaHVtYW4wdG8wIiB2YWx1ZT0iMC41Ii8+DQorICAgIDx2YWx1ZXMgaWRlbnRpZmllcj0iaHVtYW4xdG8xIiB2YWx1ZT0iMC41Ii8+DQorICAgIDx2YWx1ZXMgaWRlbnRpZmllcj0iaHVtYW4ydG8tIiB2YWx1ZT0iMC41Ii8+DQorICA8L2luY3ViYXRpb25SYXRlPg0KKzwvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLm11bHRpcG9wdWxhdGlvbjpNdWx0aVBvcHVsYXRpb25TRUlSRGlzZWFzZU1vZGVsPg0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9kZWNvcmF0b3JzL0FsbFNxdWFyZXNQb3B1bGF0aW9uSW5pdGlhbGl6ZXIuc3RhbmRhcmQgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvZGVjb3JhdG9ycy9BbGxTcXVhcmVzUG9wdWxhdGlvbkluaXRpYWxpemVyLnN0YW5kYXJkCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjczZmYyMzIKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvZGVjb3JhdG9ycy9BbGxTcXVhcmVzUG9wdWxhdGlvbkluaXRpYWxpemVyLnN0YW5kYXJkCkBAIC0wLDAgKzEsNCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQ6U3RhbmRhcmRQb3B1bGF0aW9uSW5pdGlhbGl6ZXIgeG1pOnZlcnNpb249IjIuMCIgeG1sbnM6eG1pPSJodHRwOi8vd3d3Lm9tZy5vcmcvWE1JIiB4bWxuczpvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9wb3B1bGF0aW9ubW9kZWxzL3N0YW5kYXJkIiB1Ukk9InBsYXRmb3JtOi9yZXNvdXJjZS9CYXNpY1Rlc3RzL2RlY29yYXRvcnMvQWxsU3F1YXJlc1BvcHVsYXRpb25Jbml0aWFsaXplci5zdGFuZGFyZCIgdHlwZVVSST0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0lkZW50aWZpYWJsZSIgdGFyZ2V0SVNPS2V5PSIiIGluZGl2aWR1YWxzPSIxMDAwLjAiPgorICA8ZHVibGluQ29yZSBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcmVzb3VyY2UvQmFzaWNUZXN0cy9kZWNvcmF0b3JzL0FsbFNxdWFyZXNQb3B1bGF0aW9uSW5pdGlhbGl6ZXIuc3RhbmRhcmQiIGNyZWF0b3I9ImVkbHVuZCIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vcG9wdWxhdGlvbm1vZGVscy9zdGFuZGFyZCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL3BvcHVsYXRpb24iIGNyZWF0ZWQ9IjIwMTEtMDEtMjQiLz4KKzwvb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkOlN0YW5kYXJkUG9wdWxhdGlvbkluaXRpYWxpemVyPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL2RlY29yYXRvcnMvRGVtb2dyYXBoaWNQb3BNb2RlbC5zdGFuZGFyZCBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9kZWNvcmF0b3JzL0RlbW9ncmFwaGljUG9wTW9kZWwuc3RhbmRhcmQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTFlZTdlYgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9kZWNvcmF0b3JzL0RlbW9ncmFwaGljUG9wTW9kZWwuc3RhbmRhcmQKQEAgLTAsMCArMSw2IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZDpEZW1vZ3JhcGhpY1BvcHVsYXRpb25Nb2RlbCB4bWk6dmVyc2lvbj0iMi4wIiB4bWxuczp4bWk9Imh0dHA6Ly93d3cub21nLm9yZy9YTUkiIHhtbG5zOm9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL3BvcHVsYXRpb25tb2RlbHMvc3RhbmRhcmQiIHVSST0icGxhdGZvcm06L3Jlc291cmNlL0Jhc2ljVGVzdHMvZGVjb3JhdG9ycy9EZW1vZ3JhcGhpY1BvcE1vZGVsLnN0YW5kYXJkIiB0eXBlVVJJPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vSWRlbnRpZmlhYmxlIiBuYW1lPSJEZW1vZ3JhcGhpY01vZGVsIiBiaXJ0aFJhdGU9IjQuMEUtNSIgZGVhdGhSYXRlPSIzLjlFLTUiPgorICA8ZHVibGluQ29yZSBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcmVzb3VyY2UvQmFzaWNUZXN0cy9kZWNvcmF0b3JzL0RlbW9ncmFwaGljUG9wTW9kZWwuc3RhbmRhcmQiIGNyZWF0b3I9ImVkbHVuZCIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vcG9wdWxhdGlvbm1vZGVscy9zdGFuZGFyZCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0lkZW50aWZpYWJsZSIgY3JlYXRlZD0iMjAxMS0wNS0xMSIvPgorICA8cG9wdWxhdGlvbkdyb3VwcyBpZGVudGlmaWVyPSJtZW4iLz4KKyAgPHBvcHVsYXRpb25Hcm91cHMgaWRlbnRpZmllcj0id29tZW4iLz4KKzwvb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkOkRlbW9ncmFwaGljUG9wdWxhdGlvbk1vZGVsPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL2RlY29yYXRvcnMvRGVtb2dyYXBoaWNTRUlSRGlzZWFzZS5zdGFuZGFyZCBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9kZWNvcmF0b3JzL0RlbW9ncmFwaGljU0VJUkRpc2Vhc2Uuc3RhbmRhcmQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzU1MTM1YwotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9kZWNvcmF0b3JzL0RlbW9ncmFwaGljU0VJUkRpc2Vhc2Uuc3RhbmRhcmQKQEAgLTAsMCArMSwzNCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMubXVsdGlwb3B1bGF0aW9uOk11bHRpUG9wdWxhdGlvblNFSVJEaXNlYXNlTW9kZWwgeG1pOnZlcnNpb249IjIuMCIgeG1sbnM6eG1pPSJodHRwOi8vd3d3Lm9tZy5vcmcvWE1JIiB4bWxuczpvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMubXVsdGlwb3B1bGF0aW9uPSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9tdWx0aXBvcHVsYXRpb24uZWNvcmUiIHVSST0icGxhdGZvcm06L3Jlc291cmNlL0Jhc2ljVGVzdHMvZGVjb3JhdG9ycy9EZW1vZ3JhcGhpY1NFSVJEaXNlYXNlLnN0YW5kYXJkIiB0eXBlVVJJPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vSWRlbnRpZmlhYmxlIiBkaXNlYXNlTmFtZT0iRmx1Ij4KKyAgPGR1YmxpbkNvcmUgaWRlbnRpZmllcj0icGxhdGZvcm06L3Jlc291cmNlL0Jhc2ljVGVzdHMvZGVjb3JhdG9ycy9EZW1vZ3JhcGhpY1NFSVJEaXNlYXNlLnN0YW5kYXJkIiBjcmVhdG9yPSJlZGx1bmQiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvc3RhbmRhcmQuZWNvcmUiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9JZGVudGlmaWFibGUiIGNyZWF0ZWQ9IjIwMTEtMDUtMTEiLz4KKyAgPHBvcHVsYXRpb25Hcm91cHM+CisgICAgPHZhbHVlcyB2YWx1ZT0ibWVuIi8+CisgICAgPHZhbHVlcyB2YWx1ZT0id29tZW4iLz4KKyAgPC9wb3B1bGF0aW9uR3JvdXBzPgorICA8dHJhbnNtaXNzaW9uUmF0ZT4KKyAgICA8dmFsdWVMaXN0cyBpZGVudGlmaWVyPSJtZW4iPgorICAgICAgPHZhbHVlcyBpZGVudGlmaWVyPSJtZW4iLz4KKyAgICAgIDx2YWx1ZXMgaWRlbnRpZmllcj0id29tZW4iIHZhbHVlPSIxLjIiLz4KKyAgICA8L3ZhbHVlTGlzdHM+CisgICAgPHZhbHVlTGlzdHMgaWRlbnRpZmllcj0id29tZW4iPgorICAgICAgPHZhbHVlcyBpZGVudGlmaWVyPSJtZW4iIHZhbHVlPSIxLjMiLz4KKyAgICAgIDx2YWx1ZXMgaWRlbnRpZmllcj0id29tZW4iLz4KKyAgICA8L3ZhbHVlTGlzdHM+CisgIDwvdHJhbnNtaXNzaW9uUmF0ZT4KKyAgPHJlY292ZXJ5UmF0ZT4KKyAgICA8dmFsdWVzIGlkZW50aWZpZXI9Im1lbiIgdmFsdWU9IjAuMyIvPgorICAgIDx2YWx1ZXMgaWRlbnRpZmllcj0id29tZW4iIHZhbHVlPSIwLjQiLz4KKyAgPC9yZWNvdmVyeVJhdGU+CisgIDxpbmZlY3Rpb3VzTW9ydGFsaXR5UmF0ZT4KKyAgICA8dmFsdWVzIGlkZW50aWZpZXI9Im1lbiIvPgorICAgIDx2YWx1ZXMgaWRlbnRpZmllcj0id29tZW4iLz4KKyAgPC9pbmZlY3Rpb3VzTW9ydGFsaXR5UmF0ZT4KKyAgPGltbXVuaXR5TG9zc1JhdGU+CisgICAgPHZhbHVlcyBpZGVudGlmaWVyPSJtZW4iIHZhbHVlPSIwLjAwMTAiLz4KKyAgICA8dmFsdWVzIGlkZW50aWZpZXI9IndvbWVuIiB2YWx1ZT0iMC4wMDIwIi8+CisgIDwvaW1tdW5pdHlMb3NzUmF0ZT4KKyAgPGluY3ViYXRpb25SYXRlPgorICAgIDx2YWx1ZXMgaWRlbnRpZmllcj0ibWVuIiB2YWx1ZT0iMC41Ii8+CisgICAgPHZhbHVlcyBpZGVudGlmaWVyPSJ3b21lbiIgdmFsdWU9IjAuNSIvPgorICA8L2luY3ViYXRpb25SYXRlPgorPC9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMubXVsdGlwb3B1bGF0aW9uOk11bHRpUG9wdWxhdGlvblNFSVJEaXNlYXNlTW9kZWw+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvZGVjb3JhdG9ycy9FZ3lwdEh1bWFuMHRvMEluZmVjdG9yLnN0YW5kYXJkIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL2RlY29yYXRvcnMvRWd5cHRIdW1hbjB0bzBJbmZlY3Rvci5zdGFuZGFyZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YWUyYTA2Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL2RlY29yYXRvcnMvRWd5cHRIdW1hbjB0bzBJbmZlY3Rvci5zdGFuZGFyZApAQCAtMCwwICsxLDQgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+DQorPG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZDpTSUluZmVjdG9yIHhtaTp2ZXJzaW9uPSIyLjAiIHhtbG5zOnhtaT0iaHR0cDovL3d3dy5vbWcub3JnL1hNSSIgeG1sbnM6b3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkPSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9zdGFuZGFyZC5lY29yZSIgdVJJPSJwbGF0Zm9ybTovcmVzb3VyY2UvQmFzaWNUZXN0cy9kZWNvcmF0b3JzL0VneXB0SHVtYW4wdG8wSW5mZWN0b3Iuc3RhbmRhcmQiIHR5cGVVUkk9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9JZGVudGlmaWFibGUiIGRpc2Vhc2VOYW1lPSJBZ2luZ1NFSVJEaXNlYXNlIiB0YXJnZXRJU09LZXk9IkVHLVVQRSIgcG9wdWxhdGlvbklkZW50aWZpZXI9Imh1bWFuMHRvMCIgaW5mZWN0UGVyY2VudGFnZT0idHJ1ZSI+DQorICA8ZHVibGluQ29yZSBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcmVzb3VyY2UvQmFzaWNUZXN0cy9kZWNvcmF0b3JzL0VneXB0SHVtYW4wdG8wSW5mZWN0b3Iuc3RhbmRhcmQiIGNyZWF0b3I9ImxvYW5lcjI1IiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3N0YW5kYXJkLmVjb3JlIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vSWRlbnRpZmlhYmxlIiBjcmVhdGVkPSIyMDExLTA1LTI2Ii8+DQorPC9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQ6U0lJbmZlY3Rvcj4NCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvZGVjb3JhdG9ycy9FZ3lwdEluZmVjdG9yLnN0YW5kYXJkIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL2RlY29yYXRvcnMvRWd5cHRJbmZlY3Rvci5zdGFuZGFyZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NDA4NGU0Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL2RlY29yYXRvcnMvRWd5cHRJbmZlY3Rvci5zdGFuZGFyZApAQCAtMCwwICsxLDQgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8b3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkOlNJSW5mZWN0b3IgeG1pOnZlcnNpb249IjIuMCIgeG1sbnM6eG1pPSJodHRwOi8vd3d3Lm9tZy5vcmcvWE1JIiB4bWxuczpvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3N0YW5kYXJkLmVjb3JlIiB1Ukk9InBsYXRmb3JtOi9yZXNvdXJjZS9CYXNpY1Rlc3RzL2RlY29yYXRvcnMvRWd5cHRJbmZlY3Rvci5zdGFuZGFyZCIgdHlwZVVSST0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0lkZW50aWZpYWJsZSIgdGFyZ2V0VVJJPSJzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9ub2RlL2dlby9yZWdpb24vRUctVVBFLUcyOTAwMDIiIGRpc2Vhc2VOYW1lPSJUZXN0U0VJUiIgdGFyZ2V0SVNPS2V5PSJFRy1VUEUtRzI5MDAwMiIgcG9wdWxhdGlvbklkZW50aWZpZXI9Imh1bWFuIj4KKyAgPGR1YmxpbkNvcmUgaWRlbnRpZmllcj0icGxhdGZvcm06L3Jlc291cmNlL0Jhc2ljVGVzdHMvZGVjb3JhdG9ycy9FZ3lwdEluZmVjdG9yLnN0YW5kYXJkIiBjcmVhdG9yPSJlZGx1bmQiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvc3RhbmRhcmQuZWNvcmUiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9JZGVudGlmaWFibGUiIGNyZWF0ZWQ9IjIwMTEtMDEtMjgiLz4KKzwvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkOlNJSW5mZWN0b3I+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvZGVjb3JhdG9ycy9FZ3lwdElub2N1bGF0b3Iuc3RhbmRhcmQgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvZGVjb3JhdG9ycy9FZ3lwdElub2N1bGF0b3Iuc3RhbmRhcmQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmEwMzc2OQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9kZWNvcmF0b3JzL0VneXB0SW5vY3VsYXRvci5zdGFuZGFyZApAQCAtMCwwICsxLDQgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8b3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkOlNJUklub2N1bGF0b3IgeG1pOnZlcnNpb249IjIuMCIgeG1sbnM6eG1pPSJodHRwOi8vd3d3Lm9tZy5vcmcvWE1JIiB4bWxuczpvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3N0YW5kYXJkLmVjb3JlIiB1Ukk9InBsYXRmb3JtOi9yZXNvdXJjZS9CYXNpY1Rlc3RzL2RlY29yYXRvcnMvRWd5cHRJbm9jdWxhdG9yLnN0YW5kYXJkIiB0eXBlVVJJPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vSWRlbnRpZmlhYmxlIiBkaXNlYXNlTmFtZT0iVGVzdFNFSVIiIHRhcmdldElTT0tleT0iRUdZIiBwb3B1bGF0aW9uSWRlbnRpZmllcj0iaHVtYW4iIGluZmVjdGlvdXNDb3VudD0iMC4wIiBpbm9jdWxhdGVkUGVyY2VudGFnZT0iMzUuMCI+CisgIDxkdWJsaW5Db3JlIGlkZW50aWZpZXI9InBsYXRmb3JtOi9yZXNvdXJjZS9CYXNpY1Rlc3RzL2RlY29yYXRvcnMvRWd5cHRJbm9jdWxhdG9yLnN0YW5kYXJkIiBjcmVhdG9yPSJlZGx1bmQiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvc3RhbmRhcmQuZWNvcmUiIGNyZWF0ZWQ9IjIwMTEtMDEtMzEiLz4KKzwvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkOlNJUklub2N1bGF0b3I+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvZGVjb3JhdG9ycy9FZ3lwdFdvbWVuSW5mZWN0b3Iuc3RhbmRhcmQgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvZGVjb3JhdG9ycy9FZ3lwdFdvbWVuSW5mZWN0b3Iuc3RhbmRhcmQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWJmNzJlZgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9kZWNvcmF0b3JzL0VneXB0V29tZW5JbmZlY3Rvci5zdGFuZGFyZApAQCAtMCwwICsxLDQgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8b3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkOlNJSW5mZWN0b3IgeG1pOnZlcnNpb249IjIuMCIgeG1sbnM6eG1pPSJodHRwOi8vd3d3Lm9tZy5vcmcvWE1JIiB4bWxuczpvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3N0YW5kYXJkLmVjb3JlIiB1Ukk9InBsYXRmb3JtOi9yZXNvdXJjZS9CYXNpY1Rlc3RzL2RlY29yYXRvcnMvRWd5cHRXb21lbkluZmVjdG9yLnN0YW5kYXJkIiB0eXBlVVJJPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vSWRlbnRpZmlhYmxlIiBkaXNlYXNlTmFtZT0iRmx1IiB0YXJnZXRJU09LZXk9IkVHLVVSRy1HMzAwMDAyIiBwb3B1bGF0aW9uSWRlbnRpZmllcj0id29tZW4iIGluZmVjdFBlcmNlbnRhZ2U9InRydWUiPgorICA8ZHVibGluQ29yZSBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcmVzb3VyY2UvQmFzaWNUZXN0cy9kZWNvcmF0b3JzL0VneXB0V29tZW5JbmZlY3Rvci5zdGFuZGFyZCIgY3JlYXRvcj0iZWRsdW5kIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3N0YW5kYXJkLmVjb3JlIiBjcmVhdGVkPSIyMDExLTA1LTExIi8+Cis8L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZDpTSUluZmVjdG9yPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL2RlY29yYXRvcnMvR3Jvd2luZ1BvcHVsYXRpb25Nb2RlbC5zdGFuZGFyZCBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9kZWNvcmF0b3JzL0dyb3dpbmdQb3B1bGF0aW9uTW9kZWwuc3RhbmRhcmQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTg0ZTM0OQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9kZWNvcmF0b3JzL0dyb3dpbmdQb3B1bGF0aW9uTW9kZWwuc3RhbmRhcmQKQEAgLTAsMCArMSw0IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZDpTdGFuZGFyZFBvcHVsYXRpb25Nb2RlbCB4bWk6dmVyc2lvbj0iMi4wIiB4bWxuczp4bWk9Imh0dHA6Ly93d3cub21nLm9yZy9YTUkiIHhtbG5zOm9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL3BvcHVsYXRpb25tb2RlbHMvc3RhbmRhcmQiIHVSST0icGxhdGZvcm06L3Jlc291cmNlL0Jhc2ljVGVzdHMvZGVjb3JhdG9ycy9Hcm93aW5nUG9wdWxhdGlvbk1vZGVsLnN0YW5kYXJkIiB0eXBlVVJJPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vSWRlbnRpZmlhYmxlIiBiaXJ0aFJhdGU9IjMuOUUtNSIgZGVhdGhSYXRlPSIzLjVFLTUiPgorICA8ZHVibGluQ29yZSBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcmVzb3VyY2UvQmFzaWNUZXN0cy9kZWNvcmF0b3JzL0dyb3dpbmdQb3B1bGF0aW9uTW9kZWwuc3RhbmRhcmQiIGNyZWF0b3I9ImVkbHVuZCIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vcG9wdWxhdGlvbm1vZGVscy9zdGFuZGFyZCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0lkZW50aWZpYWJsZSIgY3JlYXRlZD0iMjAxMS0wMS0yOCIvPgorPC9vcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQ6U3RhbmRhcmRQb3B1bGF0aW9uTW9kZWw+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvZGVjb3JhdG9ycy9JbmZlY3RDYWxpZm9ybmlhLnN0YW5kYXJkIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL2RlY29yYXRvcnMvSW5mZWN0Q2FsaWZvcm5pYS5zdGFuZGFyZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNjRhZTgwCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL2RlY29yYXRvcnMvSW5mZWN0Q2FsaWZvcm5pYS5zdGFuZGFyZApAQCAtMCwwICsxLDQgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8b3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkOlNJSW5mZWN0b3IgeG1pOnZlcnNpb249IjIuMCIgeG1sbnM6eG1pPSJodHRwOi8vd3d3Lm9tZy5vcmcvWE1JIiB4bWxuczpvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3N0YW5kYXJkLmVjb3JlIiB1Ukk9InBsYXRmb3JtOi9yZXNvdXJjZS9CYXNpY1Rlc3RzL2RlY29yYXRvcnMvSW5mZWN0Q2FsaWZvcm5pYS5zdGFuZGFyZCIgdHlwZVVSST0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0lkZW50aWZpYWJsZSIgZGlzZWFzZU5hbWU9IlRlc3RTRUlSIiB0YXJnZXRJU09LZXk9IlVTLUNBIiBwb3B1bGF0aW9uSWRlbnRpZmllcj0iaHVtYW4iPgorICA8ZHVibGluQ29yZSBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcmVzb3VyY2UvQmFzaWNUZXN0cy9kZWNvcmF0b3JzL0luZmVjdENhbGlmb3JuaWEuc3RhbmRhcmQiIGNyZWF0b3I9ImVkbHVuZCIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9zdGFuZGFyZC5lY29yZSIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0lkZW50aWZpYWJsZSIgY3JlYXRlZD0iMjAxMS0wMi0wNCIvPgorPC9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQ6U0lJbmZlY3Rvcj4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9kZWNvcmF0b3JzL0luZmVjdENhbGlmb3JuaWEyLnN0YW5kYXJkIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL2RlY29yYXRvcnMvSW5mZWN0Q2FsaWZvcm5pYTIuc3RhbmRhcmQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWU5OWZiMQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9kZWNvcmF0b3JzL0luZmVjdENhbGlmb3JuaWEyLnN0YW5kYXJkCkBAIC0wLDAgKzEsNCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQ6U0lJbmZlY3RvciB4bWk6dmVyc2lvbj0iMi4wIiB4bWxuczp4bWk9Imh0dHA6Ly93d3cub21nLm9yZy9YTUkiIHhtbG5zOm9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvc3RhbmRhcmQuZWNvcmUiIHVSST0icGxhdGZvcm06L3Jlc291cmNlL0Jhc2ljVGVzdHMvZGVjb3JhdG9ycy9JbmZlY3RDYWxpZm9ybmlhMi5zdGFuZGFyZCIgdHlwZVVSST0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0lkZW50aWZpYWJsZSIgZGlzZWFzZU5hbWU9IlRlc3RTSSIgdGFyZ2V0SVNPS2V5PSJVUy1DQSIgcG9wdWxhdGlvbklkZW50aWZpZXI9Imh1bWFuIj4KKyAgPGR1YmxpbkNvcmUgaWRlbnRpZmllcj0icGxhdGZvcm06L3Jlc291cmNlL0Jhc2ljVGVzdHMvZGVjb3JhdG9ycy9JbmZlY3RDYWxpZm9ybmlhMi5zdGFuZGFyZCIgY3JlYXRvcj0iZWRsdW5kIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3N0YW5kYXJkLmVjb3JlIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vSWRlbnRpZmlhYmxlIiBjcmVhdGVkPSIyMDExLTAyLTA3Ii8+Cis8L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZDpTSUluZmVjdG9yPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL2RlY29yYXRvcnMvSW5mZWN0Q2FsaWZvcm5pYTMuc3RhbmRhcmQgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvZGVjb3JhdG9ycy9JbmZlY3RDYWxpZm9ybmlhMy5zdGFuZGFyZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZWI5MDZhCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL2RlY29yYXRvcnMvSW5mZWN0Q2FsaWZvcm5pYTMuc3RhbmRhcmQKQEAgLTAsMCArMSw0IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZDpTSUluZmVjdG9yIHhtaTp2ZXJzaW9uPSIyLjAiIHhtbG5zOnhtaT0iaHR0cDovL3d3dy5vbWcub3JnL1hNSSIgeG1sbnM6b3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkPSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9zdGFuZGFyZC5lY29yZSIgdVJJPSJwbGF0Zm9ybTovcmVzb3VyY2UvQmFzaWNUZXN0cy9kZWNvcmF0b3JzL0luZmVjdENhbGlmb3JuaWEzLnN0YW5kYXJkIiB0eXBlVVJJPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vSWRlbnRpZmlhYmxlIiBkaXNlYXNlTmFtZT0iVGVzdFNJUiIgdGFyZ2V0SVNPS2V5PSJVUy1DQSIgcG9wdWxhdGlvbklkZW50aWZpZXI9Imh1bWFuIj4KKyAgPGR1YmxpbkNvcmUgaWRlbnRpZmllcj0icGxhdGZvcm06L3Jlc291cmNlL0Jhc2ljVGVzdHMvZGVjb3JhdG9ycy9JbmZlY3RDYWxpZm9ybmlhMy5zdGFuZGFyZCIgY3JlYXRvcj0iZWRsdW5kIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3N0YW5kYXJkLmVjb3JlIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vSWRlbnRpZmlhYmxlIiBjcmVhdGVkPSIyMDExLTAyLTA3Ii8+Cis8L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZDpTSUluZmVjdG9yPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL2RlY29yYXRvcnMvSW5mZWN0S2VueWEuc3RhbmRhcmQgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvZGVjb3JhdG9ycy9JbmZlY3RLZW55YS5zdGFuZGFyZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NzNjNWFiCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL2RlY29yYXRvcnMvSW5mZWN0S2VueWEuc3RhbmRhcmQKQEAgLTAsMCArMSw0IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZDpTSUluZmVjdG9yIHhtaTp2ZXJzaW9uPSIyLjAiIHhtbG5zOnhtaT0iaHR0cDovL3d3dy5vbWcub3JnL1hNSSIgeG1sbnM6b3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkPSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9zdGFuZGFyZC5lY29yZSIgdVJJPSJwbGF0Zm9ybTovcmVzb3VyY2UvQmFzaWNUZXN0cy9kZWNvcmF0b3JzL0luZmVjdEtlbnlhLnN0YW5kYXJkIiB0eXBlVVJJPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vSWRlbnRpZmlhYmxlIiBkaXNlYXNlTmFtZT0iVGVzdFNFSVIiIHRhcmdldElTT0tleT0iS0VOIiBwb3B1bGF0aW9uSWRlbnRpZmllcj0iaHVtYW4iPgorICA8ZHVibGluQ29yZSBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcmVzb3VyY2UvQmFzaWNUZXN0cy9kZWNvcmF0b3JzL0luZmVjdEtlbnlhLnN0YW5kYXJkIiBjcmVhdG9yPSJlZGx1bmQiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvc3RhbmRhcmQuZWNvcmUiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9JZGVudGlmaWFibGUiIGNyZWF0ZWQ9IjIwMTEtMDItMDQiLz4KKzwvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkOlNJSW5mZWN0b3I+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvZGVjb3JhdG9ycy9Ob0Rpc2Vhc2Uuc3RhbmRhcmQgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvZGVjb3JhdG9ycy9Ob0Rpc2Vhc2Uuc3RhbmRhcmQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODE3YWZiNAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9kZWNvcmF0b3JzL05vRGlzZWFzZS5zdGFuZGFyZApAQCAtMCwwICsxLDM2IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/Pg0KKzxvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMubXVsdGlwb3B1bGF0aW9uOk11bHRpUG9wdWxhdGlvblNJRGlzZWFzZU1vZGVsIHhtaTp2ZXJzaW9uPSIyLjAiIHhtbG5zOnhtaT0iaHR0cDovL3d3dy5vbWcub3JnL1hNSSIgeG1sbnM6b3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLm11bHRpcG9wdWxhdGlvbj0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvbXVsdGlwb3B1bGF0aW9uLmVjb3JlIiB1Ukk9InBsYXRmb3JtOi9yZXNvdXJjZS9CYXNpY1Rlc3RzL2RlY29yYXRvcnMvTm9EaXNlYXNlLnN0YW5kYXJkIiB0eXBlVVJJPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vSWRlbnRpZmlhYmxlIiBkaXNlYXNlTmFtZT0iTm9EaXNlYXNlIj4NCisgIDxkdWJsaW5Db3JlIGlkZW50aWZpZXI9InBsYXRmb3JtOi9yZXNvdXJjZS9CYXNpY1Rlc3RzL2RlY29yYXRvcnMvTm9EaXNlYXNlLnN0YW5kYXJkIiBjcmVhdG9yPSJsb2FuZXIyNSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9zdGFuZGFyZC5lY29yZSIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0lkZW50aWZpYWJsZSIgY3JlYXRlZD0iMjAxMS0wNS0yNiIvPg0KKyAgPHBvcHVsYXRpb25Hcm91cHM+DQorICAgIDx2YWx1ZXMgdmFsdWU9Imh1bWFuMHRvMCIvPg0KKyAgICA8dmFsdWVzIHZhbHVlPSJodW1hbjF0bzEiLz4NCisgICAgPHZhbHVlcyB2YWx1ZT0iaHVtYW4ydG8tIi8+DQorICA8L3BvcHVsYXRpb25Hcm91cHM+DQorICA8dHJhbnNtaXNzaW9uUmF0ZT4NCisgICAgPHZhbHVlTGlzdHMgaWRlbnRpZmllcj0iaHVtYW4wdG8wIj4NCisgICAgICA8dmFsdWVzIGlkZW50aWZpZXI9Imh1bWFuMHRvMCIvPg0KKyAgICAgIDx2YWx1ZXMgaWRlbnRpZmllcj0iaHVtYW4xdG8xIi8+DQorICAgICAgPHZhbHVlcyBpZGVudGlmaWVyPSJodW1hbjJ0by0iLz4NCisgICAgPC92YWx1ZUxpc3RzPg0KKyAgICA8dmFsdWVMaXN0cyBpZGVudGlmaWVyPSJodW1hbjF0bzEiPg0KKyAgICAgIDx2YWx1ZXMgaWRlbnRpZmllcj0iaHVtYW4wdG8wIi8+DQorICAgICAgPHZhbHVlcyBpZGVudGlmaWVyPSJodW1hbjF0bzEiLz4NCisgICAgICA8dmFsdWVzIGlkZW50aWZpZXI9Imh1bWFuMnRvLSIvPg0KKyAgICA8L3ZhbHVlTGlzdHM+DQorICAgIDx2YWx1ZUxpc3RzIGlkZW50aWZpZXI9Imh1bWFuMnRvLSI+DQorICAgICAgPHZhbHVlcyBpZGVudGlmaWVyPSJodW1hbjB0bzAiLz4NCisgICAgICA8dmFsdWVzIGlkZW50aWZpZXI9Imh1bWFuMXRvMSIvPg0KKyAgICAgIDx2YWx1ZXMgaWRlbnRpZmllcj0iaHVtYW4ydG8tIi8+DQorICAgIDwvdmFsdWVMaXN0cz4NCisgIDwvdHJhbnNtaXNzaW9uUmF0ZT4NCisgIDxyZWNvdmVyeVJhdGU+DQorICAgIDx2YWx1ZXMgaWRlbnRpZmllcj0iaHVtYW4wdG8wIi8+DQorICAgIDx2YWx1ZXMgaWRlbnRpZmllcj0iaHVtYW4xdG8xIi8+DQorICAgIDx2YWx1ZXMgaWRlbnRpZmllcj0iaHVtYW4ydG8tIi8+DQorICA8L3JlY292ZXJ5UmF0ZT4NCisgIDxpbmZlY3Rpb3VzTW9ydGFsaXR5UmF0ZT4NCisgICAgPHZhbHVlcyBpZGVudGlmaWVyPSJodW1hbjB0bzAiLz4NCisgICAgPHZhbHVlcyBpZGVudGlmaWVyPSJodW1hbjF0bzEiLz4NCisgICAgPHZhbHVlcyBpZGVudGlmaWVyPSJodW1hbjJ0by0iLz4NCisgIDwvaW5mZWN0aW91c01vcnRhbGl0eVJhdGU+DQorPC9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMubXVsdGlwb3B1bGF0aW9uOk11bHRpUG9wdWxhdGlvblNJRGlzZWFzZU1vZGVsPg0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9kZWNvcmF0b3JzL1BoaWxpcHBpbmVzSW5mZWN0b3Iuc3RhbmRhcmQgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvZGVjb3JhdG9ycy9QaGlsaXBwaW5lc0luZmVjdG9yLnN0YW5kYXJkCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE4YWM0YWUKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvZGVjb3JhdG9ycy9QaGlsaXBwaW5lc0luZmVjdG9yLnN0YW5kYXJkCkBAIC0wLDAgKzEsNCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQ6U0lJbmZlY3RvciB4bWk6dmVyc2lvbj0iMi4wIiB4bWxuczp4bWk9Imh0dHA6Ly93d3cub21nLm9yZy9YTUkiIHhtbG5zOm9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvc3RhbmRhcmQuZWNvcmUiIHVSST0icGxhdGZvcm06L3Jlc291cmNlL0Jhc2ljVGVzdHMvZGVjb3JhdG9ycy9QaGlsaXBwaW5lc0luZmVjdG9yLnN0YW5kYXJkIiB0eXBlVVJJPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vSWRlbnRpZmlhYmxlIiB0YXJnZXRVUkk9InN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL25vZGUvZ2VvL3JlZ2lvbi9QSC1OQ1ItRzUyMDAwMSIgZGlzZWFzZU5hbWU9IlRlc3RTRUlSIiB0YXJnZXRJU09LZXk9IlBILU5DUi1HNTIwMDAxIiBwb3B1bGF0aW9uSWRlbnRpZmllcj0iaHVtYW4iPgorICA8ZHVibGluQ29yZSBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcmVzb3VyY2UvQmFzaWNUZXN0cy9kZWNvcmF0b3JzL1BoaWxpcHBpbmVzSW5mZWN0b3Iuc3RhbmRhcmQiIGNyZWF0b3I9ImVkbHVuZCIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9zdGFuZGFyZC5lY29yZSIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0lkZW50aWZpYWJsZSIgY3JlYXRlZD0iMjAxMS0wMS0yNSIvPgorPC9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQ6U0lJbmZlY3Rvcj4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9kZWNvcmF0b3JzL1BoaWxpcHBpbmVzU0VJUi5zdGFuZGFyZCBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9kZWNvcmF0b3JzL1BoaWxpcHBpbmVzU0VJUi5zdGFuZGFyZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZjEyNTQxCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL2RlY29yYXRvcnMvUGhpbGlwcGluZXNTRUlSLnN0YW5kYXJkCkBAIC0wLDAgKzEsNCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQ6RGV0ZXJtaW5pc3RpY1NFSVJEaXNlYXNlTW9kZWwgeG1pOnZlcnNpb249IjIuMCIgeG1sbnM6eG1pPSJodHRwOi8vd3d3Lm9tZy5vcmcvWE1JIiB4bWxuczpvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3N0YW5kYXJkLmVjb3JlIiB1Ukk9InBsYXRmb3JtOi9yZXNvdXJjZS9CYXNpY1Rlc3RzL2RlY29yYXRvcnMvUGhpbGlwcGluZXNTRUlSLnN0YW5kYXJkIiB0eXBlVVJJPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vSWRlbnRpZmlhYmxlIiBkaXNlYXNlTmFtZT0iVGVzdFNFSVIiIHRyYW5zbWlzc2lvblJhdGU9IjQ1LjAiIHJlY292ZXJ5UmF0ZT0iMC40IiBpbmN1YmF0aW9uUmF0ZT0iMC40Ij4KKyAgPGR1YmxpbkNvcmUgaWRlbnRpZmllcj0icGxhdGZvcm06L3Jlc291cmNlL0Jhc2ljVGVzdHMvZGVjb3JhdG9ycy9QaGlsaXBwaW5lc1NFSVIuc3RhbmRhcmQiIGNyZWF0b3I9ImVkbHVuZCIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9zdGFuZGFyZC5lY29yZSIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0lkZW50aWZpYWJsZSIgY3JlYXRlZD0iMjAxMS0wMS0yNSIvPgorPC9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQ6RGV0ZXJtaW5pc3RpY1NFSVJEaXNlYXNlTW9kZWw+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvZGVjb3JhdG9ycy9TRUlSLnN0YW5kYXJkIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL2RlY29yYXRvcnMvU0VJUi5zdGFuZGFyZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZTQ1NjIyCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL2RlY29yYXRvcnMvU0VJUi5zdGFuZGFyZApAQCAtMCwwICsxLDQgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8b3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkOkRldGVybWluaXN0aWNTRUlSRGlzZWFzZU1vZGVsIHhtaTp2ZXJzaW9uPSIyLjAiIHhtbG5zOnhtaT0iaHR0cDovL3d3dy5vbWcub3JnL1hNSSIgeG1sbnM6b3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkPSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9zdGFuZGFyZC5lY29yZSIgdVJJPSJwbGF0Zm9ybTovcmVzb3VyY2UvQmFzaWNUZXN0cy9kZWNvcmF0b3JzL1NFSVIuc3RhbmRhcmQiIHR5cGVVUkk9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9JZGVudGlmaWFibGUiIGRpc2Vhc2VOYW1lPSJUZXN0U0VJUiIgdHJhbnNtaXNzaW9uUmF0ZT0iMS42IiByZWNvdmVyeVJhdGU9IjAuMyIgaW5jdWJhdGlvblJhdGU9IjAuNCI+CisgIDxkdWJsaW5Db3JlIGlkZW50aWZpZXI9InBsYXRmb3JtOi9yZXNvdXJjZS9CYXNpY1Rlc3RzL2RlY29yYXRvcnMvU0VJUi5zdGFuZGFyZCIgY3JlYXRvcj0iZWRsdW5kIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3N0YW5kYXJkLmVjb3JlIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vSWRlbnRpZmlhYmxlIiBjcmVhdGVkPSIyMDExLTAxLTI0Ii8+Cis8L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZDpEZXRlcm1pbmlzdGljU0VJUkRpc2Vhc2VNb2RlbD4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9kZWNvcmF0b3JzL1NFSVIyLnN0YW5kYXJkIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL2RlY29yYXRvcnMvU0VJUjIuc3RhbmRhcmQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjIwOWFlMwotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9kZWNvcmF0b3JzL1NFSVIyLnN0YW5kYXJkCkBAIC0wLDAgKzEsNCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQ6RGV0ZXJtaW5pc3RpY1NFSVJEaXNlYXNlTW9kZWwgeG1pOnZlcnNpb249IjIuMCIgeG1sbnM6eG1pPSJodHRwOi8vd3d3Lm9tZy5vcmcvWE1JIiB4bWxuczpvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3N0YW5kYXJkLmVjb3JlIiB1Ukk9InBsYXRmb3JtOi9yZXNvdXJjZS9CYXNpY1Rlc3RzL2RlY29yYXRvcnMvU0VJUjIuc3RhbmRhcmQiIHR5cGVVUkk9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9JZGVudGlmaWFibGUiIGRpc2Vhc2VOYW1lPSJUZXN0U0VJUiIgdHJhbnNtaXNzaW9uUmF0ZT0iMTAuMCIgcmVjb3ZlcnlSYXRlPSIwLjMiIGluY3ViYXRpb25SYXRlPSIwLjQiPgorICA8ZHVibGluQ29yZSBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcmVzb3VyY2UvQmFzaWNUZXN0cy9kZWNvcmF0b3JzL1NFSVIyLnN0YW5kYXJkIiBjcmVhdG9yPSJlZGx1bmQiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvc3RhbmRhcmQuZWNvcmUiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9JZGVudGlmaWFibGUiIGNyZWF0ZWQ9IjIwMTEtMDEtMjgiLz4KKzwvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkOkRldGVybWluaXN0aWNTRUlSRGlzZWFzZU1vZGVsPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL2RlY29yYXRvcnMvU0VJUjMuc3RhbmRhcmQgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvZGVjb3JhdG9ycy9TRUlSMy5zdGFuZGFyZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MTM4MWNhCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL2RlY29yYXRvcnMvU0VJUjMuc3RhbmRhcmQKQEAgLTAsMCArMSw0IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZDpEZXRlcm1pbmlzdGljU0VJUkRpc2Vhc2VNb2RlbCB4bWk6dmVyc2lvbj0iMi4wIiB4bWxuczp4bWk9Imh0dHA6Ly93d3cub21nLm9yZy9YTUkiIHhtbG5zOm9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvc3RhbmRhcmQuZWNvcmUiIHVSST0icGxhdGZvcm06L3Jlc291cmNlL0Jhc2ljVGVzdHMvZGVjb3JhdG9ycy9TRUlSMy5zdGFuZGFyZCIgdHlwZVVSST0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0lkZW50aWZpYWJsZSIgZGlzZWFzZU5hbWU9IlRlc3RTRUlSIiB0cmFuc21pc3Npb25SYXRlPSIxMi4wIiByZWNvdmVyeVJhdGU9IjAuMiIgaW5mZWN0aW91c01vcnRhbGl0eVJhdGU9IjAuMDUiIGltbXVuaXR5TG9zc1JhdGU9IjAuMDAxMCIgaW5jdWJhdGlvblJhdGU9IjAuNCI+CisgIDxkdWJsaW5Db3JlIGlkZW50aWZpZXI9InBsYXRmb3JtOi9yZXNvdXJjZS9CYXNpY1Rlc3RzL2RlY29yYXRvcnMvU0VJUjMuc3RhbmRhcmQiIGNyZWF0b3I9ImVkbHVuZCIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9zdGFuZGFyZC5lY29yZSIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0lkZW50aWZpYWJsZSIgY3JlYXRlZD0iMjAxMS0wMS0zMSIvPgorPC9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQ6RGV0ZXJtaW5pc3RpY1NFSVJEaXNlYXNlTW9kZWw+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvZGVjb3JhdG9ycy9TRUlSNC5zdGFuZGFyZCBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9kZWNvcmF0b3JzL1NFSVI0LnN0YW5kYXJkCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA0NDJjMTgKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvZGVjb3JhdG9ycy9TRUlSNC5zdGFuZGFyZApAQCAtMCwwICsxLDQgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8b3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkOkRldGVybWluaXN0aWNTRUlSRGlzZWFzZU1vZGVsIHhtaTp2ZXJzaW9uPSIyLjAiIHhtbG5zOnhtaT0iaHR0cDovL3d3dy5vbWcub3JnL1hNSSIgeG1sbnM6b3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkPSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9zdGFuZGFyZC5lY29yZSIgdVJJPSJwbGF0Zm9ybTovcmVzb3VyY2UvQmFzaWNUZXN0cy9kZWNvcmF0b3JzL1NFSVI0LnN0YW5kYXJkIiB0eXBlVVJJPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vSWRlbnRpZmlhYmxlIiBkaXNlYXNlTmFtZT0iVGVzdFNFSVIiIHRyYW5zbWlzc2lvblJhdGU9IjQ1LjAiIHJlY292ZXJ5UmF0ZT0iMC40IiBpbmN1YmF0aW9uUmF0ZT0iMC40Ij4KKyAgPGR1YmxpbkNvcmUgaWRlbnRpZmllcj0icGxhdGZvcm06L3Jlc291cmNlL0Jhc2ljVGVzdHMvZGVjb3JhdG9ycy9TRUlSNC5zdGFuZGFyZCIgY3JlYXRvcj0iZWRsdW5kIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3N0YW5kYXJkLmVjb3JlIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vSWRlbnRpZmlhYmxlIiBjcmVhdGVkPSIyMDExLTAyLTA0Ii8+Cis8L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZDpEZXRlcm1pbmlzdGljU0VJUkRpc2Vhc2VNb2RlbD4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9kZWNvcmF0b3JzL1NJLnN0YW5kYXJkIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL2RlY29yYXRvcnMvU0kuc3RhbmRhcmQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTY4MmIyYgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9kZWNvcmF0b3JzL1NJLnN0YW5kYXJkCkBAIC0wLDAgKzEsNCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQ6RGV0ZXJtaW5pc3RpY1NJRGlzZWFzZU1vZGVsIHhtaTp2ZXJzaW9uPSIyLjAiIHhtbG5zOnhtaT0iaHR0cDovL3d3dy5vbWcub3JnL1hNSSIgeG1sbnM6b3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkPSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9zdGFuZGFyZC5lY29yZSIgdVJJPSJwbGF0Zm9ybTovcmVzb3VyY2UvQmFzaWNUZXN0cy9kZWNvcmF0b3JzL1NJLnN0YW5kYXJkIiB0eXBlVVJJPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vSWRlbnRpZmlhYmxlIiBkaXNlYXNlTmFtZT0iVGVzdFNJIiB0cmFuc21pc3Npb25SYXRlPSIwLjQiPgorICA8ZHVibGluQ29yZSBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcmVzb3VyY2UvQmFzaWNUZXN0cy9kZWNvcmF0b3JzL1NJLnN0YW5kYXJkIiBjcmVhdG9yPSJlZGx1bmQiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvc3RhbmRhcmQuZWNvcmUiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9JZGVudGlmaWFibGUiIGNyZWF0ZWQ9IjIwMTEtMDEtMjQiLz4KKzwvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkOkRldGVybWluaXN0aWNTSURpc2Vhc2VNb2RlbD4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9kZWNvcmF0b3JzL1NJMi5zdGFuZGFyZCBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9kZWNvcmF0b3JzL1NJMi5zdGFuZGFyZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yY2RiMmM0Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL2RlY29yYXRvcnMvU0kyLnN0YW5kYXJkCkBAIC0wLDAgKzEsNCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQ6RGV0ZXJtaW5pc3RpY1NJRGlzZWFzZU1vZGVsIHhtaTp2ZXJzaW9uPSIyLjAiIHhtbG5zOnhtaT0iaHR0cDovL3d3dy5vbWcub3JnL1hNSSIgeG1sbnM6b3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkPSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9zdGFuZGFyZC5lY29yZSIgdVJJPSJwbGF0Zm9ybTovcmVzb3VyY2UvQmFzaWNUZXN0cy9kZWNvcmF0b3JzL1NJMi5zdGFuZGFyZCIgdHlwZVVSST0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0lkZW50aWZpYWJsZSIgZGlzZWFzZU5hbWU9IlRlc3RTSSIgdHJhbnNtaXNzaW9uUmF0ZT0iMjAuMCIgcmVjb3ZlcnlSYXRlPSIwLjQiPgorICA8ZHVibGluQ29yZSBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcmVzb3VyY2UvQmFzaWNUZXN0cy9kZWNvcmF0b3JzL1NJMi5zdGFuZGFyZCIgY3JlYXRvcj0iZWRsdW5kIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3N0YW5kYXJkLmVjb3JlIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vSWRlbnRpZmlhYmxlIiBjcmVhdGVkPSIyMDExLTAyLTA3Ii8+Cis8L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZDpEZXRlcm1pbmlzdGljU0lEaXNlYXNlTW9kZWw+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvZGVjb3JhdG9ycy9TSVIuc3RhbmRhcmQgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvZGVjb3JhdG9ycy9TSVIuc3RhbmRhcmQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTliNDZmNAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9kZWNvcmF0b3JzL1NJUi5zdGFuZGFyZApAQCAtMCwwICsxLDQgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8b3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkOkRldGVybWluaXN0aWNTSVJEaXNlYXNlTW9kZWwgeG1pOnZlcnNpb249IjIuMCIgeG1sbnM6eG1pPSJodHRwOi8vd3d3Lm9tZy5vcmcvWE1JIiB4bWxuczpvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3N0YW5kYXJkLmVjb3JlIiB1Ukk9InBsYXRmb3JtOi9yZXNvdXJjZS9CYXNpY1Rlc3RzL2RlY29yYXRvcnMvU0lSLnN0YW5kYXJkIiB0eXBlVVJJPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vSWRlbnRpZmlhYmxlIiBkaXNlYXNlTmFtZT0iVGVzdFNJUiIgdHJhbnNtaXNzaW9uUmF0ZT0iMC44IiByZWNvdmVyeVJhdGU9IjAuMyI+CisgIDxkdWJsaW5Db3JlIGlkZW50aWZpZXI9InBsYXRmb3JtOi9yZXNvdXJjZS9CYXNpY1Rlc3RzL2RlY29yYXRvcnMvU0lSLnN0YW5kYXJkIiBjcmVhdG9yPSJlZGx1bmQiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvc3RhbmRhcmQuZWNvcmUiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9JZGVudGlmaWFibGUiIGNyZWF0ZWQ9IjIwMTEtMDEtMjQiLz4KKzwvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkOkRldGVybWluaXN0aWNTSVJEaXNlYXNlTW9kZWw+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvZGVjb3JhdG9ycy9TSVIyLnN0YW5kYXJkIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL2RlY29yYXRvcnMvU0lSMi5zdGFuZGFyZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MTM4MWNmCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL2RlY29yYXRvcnMvU0lSMi5zdGFuZGFyZApAQCAtMCwwICsxLDQgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8b3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkOkRldGVybWluaXN0aWNTSVJEaXNlYXNlTW9kZWwgeG1pOnZlcnNpb249IjIuMCIgeG1sbnM6eG1pPSJodHRwOi8vd3d3Lm9tZy5vcmcvWE1JIiB4bWxuczpvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3N0YW5kYXJkLmVjb3JlIiB1Ukk9InBsYXRmb3JtOi9yZXNvdXJjZS9CYXNpY1Rlc3RzL2RlY29yYXRvcnMvU0lSMi5zdGFuZGFyZCIgdHlwZVVSST0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0lkZW50aWZpYWJsZSIgZGlzZWFzZU5hbWU9IlRlc3RTSVIiIHRyYW5zbWlzc2lvblJhdGU9IjIwLjAiIHJlY292ZXJ5UmF0ZT0iMC40Ij4KKyAgPGR1YmxpbkNvcmUgaWRlbnRpZmllcj0icGxhdGZvcm06L3Jlc291cmNlL0Jhc2ljVGVzdHMvZGVjb3JhdG9ycy9TSVIyLnN0YW5kYXJkIiBjcmVhdG9yPSJlZGx1bmQiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvc3RhbmRhcmQuZWNvcmUiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9JZGVudGlmaWFibGUiIGNyZWF0ZWQ9IjIwMTEtMDItMDciLz4KKzwvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkOkRldGVybWluaXN0aWNTSVJEaXNlYXNlTW9kZWw+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvZGVjb3JhdG9ycy9TaW5nbGVTcXVhcmVNaWdyYXRpb25Qb3B1bGF0aW9uSW5pdGlhbGl6ZXIuc3RhbmRhcmQgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvZGVjb3JhdG9ycy9TaW5nbGVTcXVhcmVNaWdyYXRpb25Qb3B1bGF0aW9uSW5pdGlhbGl6ZXIuc3RhbmRhcmQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWE4M2ZjNQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9kZWNvcmF0b3JzL1NpbmdsZVNxdWFyZU1pZ3JhdGlvblBvcHVsYXRpb25Jbml0aWFsaXplci5zdGFuZGFyZApAQCAtMCwwICsxLDQgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8b3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkOlN0YW5kYXJkUG9wdWxhdGlvbkluaXRpYWxpemVyIHhtaTp2ZXJzaW9uPSIyLjAiIHhtbG5zOnhtaT0iaHR0cDovL3d3dy5vbWcub3JnL1hNSSIgeG1sbnM6b3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkPSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vcG9wdWxhdGlvbm1vZGVscy9zdGFuZGFyZCIgdVJJPSJwbGF0Zm9ybTovcmVzb3VyY2UvQmFzaWNUZXN0cy9kZWNvcmF0b3JzL1NpbmdsZVNxdWFyZU1pZ3JhdGlvblBvcHVsYXRpb25Jbml0aWFsaXplci5zdGFuZGFyZCIgdHlwZVVSST0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0lkZW50aWZpYWJsZSIgdGFyZ2V0SVNPS2V5PSJMQVRfU1FSXzFfMCIgaW5kaXZpZHVhbHM9IjEwMDAuMCI+CisgIDxkdWJsaW5Db3JlIGlkZW50aWZpZXI9InBsYXRmb3JtOi9yZXNvdXJjZS9CYXNpY1Rlc3RzL2RlY29yYXRvcnMvU2luZ2xlU3F1YXJlTWlncmF0aW9uUG9wdWxhdGlvbkluaXRpYWxpemVyLnN0YW5kYXJkIiBjcmVhdG9yPSJlZGx1bmQiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL3BvcHVsYXRpb25tb2RlbHMvc3RhbmRhcmQiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9wb3B1bGF0aW9uIiBjcmVhdGVkPSIyMDExLTAxLTI0Ii8+Cis8L29yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZDpTdGFuZGFyZFBvcHVsYXRpb25Jbml0aWFsaXplcj4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9kZWNvcmF0b3JzL1NpbmdsZVNxdWFyZVBvcHVsYXRpb25Jbml0aWFsaXplci5zdGFuZGFyZCBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9kZWNvcmF0b3JzL1NpbmdsZVNxdWFyZVBvcHVsYXRpb25Jbml0aWFsaXplci5zdGFuZGFyZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MWQ4ZmMyCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL2RlY29yYXRvcnMvU2luZ2xlU3F1YXJlUG9wdWxhdGlvbkluaXRpYWxpemVyLnN0YW5kYXJkCkBAIC0wLDAgKzEsNCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQ6U3RhbmRhcmRQb3B1bGF0aW9uSW5pdGlhbGl6ZXIgeG1pOnZlcnNpb249IjIuMCIgeG1sbnM6eG1pPSJodHRwOi8vd3d3Lm9tZy5vcmcvWE1JIiB4bWxuczpvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9wb3B1bGF0aW9ubW9kZWxzL3N0YW5kYXJkIiB1Ukk9InBsYXRmb3JtOi9yZXNvdXJjZS9CYXNpY1Rlc3RzL2RlY29yYXRvcnMvU2luZ2xlU3F1YXJlUG9wdWxhdGlvbkluaXRpYWxpemVyLnN0YW5kYXJkIiB0eXBlVVJJPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vSWRlbnRpZmlhYmxlIiB0YXJnZXRJU09LZXk9IkxBVF9TUVJfMF8wIiBpbmRpdmlkdWFscz0iMTAwMC4wIj4KKyAgPGR1YmxpbkNvcmUgaWRlbnRpZmllcj0icGxhdGZvcm06L3Jlc291cmNlL0Jhc2ljVGVzdHMvZGVjb3JhdG9ycy9TaW5nbGVTcXVhcmVQb3B1bGF0aW9uSW5pdGlhbGl6ZXIuc3RhbmRhcmQiIGNyZWF0b3I9ImVkbHVuZCIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vcG9wdWxhdGlvbm1vZGVscy9zdGFuZGFyZCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0lkZW50aWZpYWJsZSIgY3JlYXRlZD0iMjAxMS0wMS0yNCIvPgorPC9vcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQ6U3RhbmRhcmRQb3B1bGF0aW9uSW5pdGlhbGl6ZXI+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvZGVjb3JhdG9ycy9TaW5nbGVTcXVhcmVTRUlSSW5mZWN0b3Iuc3RhbmRhcmQgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvZGVjb3JhdG9ycy9TaW5nbGVTcXVhcmVTRUlSSW5mZWN0b3Iuc3RhbmRhcmQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmY1MmYwYwotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9kZWNvcmF0b3JzL1NpbmdsZVNxdWFyZVNFSVJJbmZlY3Rvci5zdGFuZGFyZApAQCAtMCwwICsxLDQgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8b3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkOlNJSW5mZWN0b3IgeG1pOnZlcnNpb249IjIuMCIgeG1sbnM6eG1pPSJodHRwOi8vd3d3Lm9tZy5vcmcvWE1JIiB4bWxuczpvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3N0YW5kYXJkLmVjb3JlIiB1Ukk9InBsYXRmb3JtOi9yZXNvdXJjZS9CYXNpY1Rlc3RzL2RlY29yYXRvcnMvU2luZ2xlU3F1YXJlU0VJUkluZmVjdG9yLnN0YW5kYXJkIiB0eXBlVVJJPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vSWRlbnRpZmlhYmxlIiB0YXJnZXRVUkk9InN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL25vZGUvNTRENUVFQTNGNUNCRTMvTEFUX1NRUl8wXzAiIGRpc2Vhc2VOYW1lPSJUZXN0U0VJUiIgdGFyZ2V0SVNPS2V5PSJMQVRfU1FSXzBfMCIgcG9wdWxhdGlvbklkZW50aWZpZXI9Imh1bWFuIj4KKyAgPGR1YmxpbkNvcmUgaWRlbnRpZmllcj0icGxhdGZvcm06L3Jlc291cmNlL0Jhc2ljVGVzdHMvZGVjb3JhdG9ycy9TaW5nbGVTcXVhcmVTRUlSSW5mZWN0b3Iuc3RhbmRhcmQiIGNyZWF0b3I9ImVkbHVuZCIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9zdGFuZGFyZC5lY29yZSIgY3JlYXRlZD0iMjAxMS0wMS0yNCIvPgorPC9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQ6U0lJbmZlY3Rvcj4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9kZWNvcmF0b3JzL1NpbmdsZVNxdWFyZVNJSW5mZWN0b3Iuc3RhbmRhcmQgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvZGVjb3JhdG9ycy9TaW5nbGVTcXVhcmVTSUluZmVjdG9yLnN0YW5kYXJkCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE0YzgyNGEKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvZGVjb3JhdG9ycy9TaW5nbGVTcXVhcmVTSUluZmVjdG9yLnN0YW5kYXJkCkBAIC0wLDAgKzEsNCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQ6U0lJbmZlY3RvciB4bWk6dmVyc2lvbj0iMi4wIiB4bWxuczp4bWk9Imh0dHA6Ly93d3cub21nLm9yZy9YTUkiIHhtbG5zOm9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvc3RhbmRhcmQuZWNvcmUiIHVSST0icGxhdGZvcm06L3Jlc291cmNlL0Jhc2ljVGVzdHMvZGVjb3JhdG9ycy9TaW5nbGVTcXVhcmVTSUluZmVjdG9yLnN0YW5kYXJkIiB0eXBlVVJJPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vSWRlbnRpZmlhYmxlIiB0YXJnZXRVUkk9InN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL25vZGUvNTRENUVFQTNGNUNCRTMvTEFUX1NRUl8wXzAiIGRpc2Vhc2VOYW1lPSJUZXN0U0kiIHRhcmdldElTT0tleT0iTEFUX1NRUl8wXzAiIHBvcHVsYXRpb25JZGVudGlmaWVyPSJodW1hbiI+CisgIDxkdWJsaW5Db3JlIGlkZW50aWZpZXI9InBsYXRmb3JtOi9yZXNvdXJjZS9CYXNpY1Rlc3RzL2RlY29yYXRvcnMvU2luZ2xlU3F1YXJlU0lJbmZlY3Rvci5zdGFuZGFyZCIgY3JlYXRvcj0iZWRsdW5kIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3N0YW5kYXJkLmVjb3JlIiBjcmVhdGVkPSIyMDExLTAxLTI0Ii8+Cis8L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZDpTSUluZmVjdG9yPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL2RlY29yYXRvcnMvU2luZ2xlU3F1YXJlU0lSSW5mZWN0b3Iuc3RhbmRhcmQgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvZGVjb3JhdG9ycy9TaW5nbGVTcXVhcmVTSVJJbmZlY3Rvci5zdGFuZGFyZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMTQ0YTYyCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL2RlY29yYXRvcnMvU2luZ2xlU3F1YXJlU0lSSW5mZWN0b3Iuc3RhbmRhcmQKQEAgLTAsMCArMSw0IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZDpTSUluZmVjdG9yIHhtaTp2ZXJzaW9uPSIyLjAiIHhtbG5zOnhtaT0iaHR0cDovL3d3dy5vbWcub3JnL1hNSSIgeG1sbnM6b3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkPSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9zdGFuZGFyZC5lY29yZSIgdVJJPSJwbGF0Zm9ybTovcmVzb3VyY2UvQmFzaWNUZXN0cy9kZWNvcmF0b3JzL1NpbmdsZVNxdWFyZVNJUkluZmVjdG9yLnN0YW5kYXJkIiB0eXBlVVJJPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vSWRlbnRpZmlhYmxlIiB0YXJnZXRVUkk9InN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL25vZGUvNTRENUVFQTNGNUNCRTMvTEFUX1NRUl8wXzAiIGRpc2Vhc2VOYW1lPSJUZXN0U0lSIiB0YXJnZXRJU09LZXk9IkxBVF9TUVJfMF8wIiBwb3B1bGF0aW9uSWRlbnRpZmllcj0iaHVtYW4iPgorICA8ZHVibGluQ29yZSBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcmVzb3VyY2UvQmFzaWNUZXN0cy9kZWNvcmF0b3JzL1NpbmdsZVNxdWFyZVNJUkluZmVjdG9yLnN0YW5kYXJkIiBjcmVhdG9yPSJlZGx1bmQiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvc3RhbmRhcmQuZWNvcmUiIGNyZWF0ZWQ9IjIwMTEtMDEtMjQiLz4KKzwvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkOlNJSW5mZWN0b3I+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvZGVjb3JhdG9ycy9Ud29TcXVhcmVzU0VJUkluZmVjdG9yLnN0YW5kYXJkIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL2RlY29yYXRvcnMvVHdvU3F1YXJlc1NFSVJJbmZlY3Rvci5zdGFuZGFyZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42OGVhZWRhCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL2RlY29yYXRvcnMvVHdvU3F1YXJlc1NFSVJJbmZlY3Rvci5zdGFuZGFyZApAQCAtMCwwICsxLDQgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8b3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkOlNJSW5mZWN0b3IgeG1pOnZlcnNpb249IjIuMCIgeG1sbnM6eG1pPSJodHRwOi8vd3d3Lm9tZy5vcmcvWE1JIiB4bWxuczpvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3N0YW5kYXJkLmVjb3JlIiB1Ukk9InBsYXRmb3JtOi9yZXNvdXJjZS9CYXNpY1Rlc3RzL2RlY29yYXRvcnMvVHdvU3F1YXJlc1NFSVJJbmZlY3Rvci5zdGFuZGFyZCIgdHlwZVVSST0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0lkZW50aWZpYWJsZSIgdGFyZ2V0VVJJPSJzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9ub2RlLzQ0OTUzNjVBMDIzMjhCMTYvTEFUX1NRUl8xXzAiIGRpc2Vhc2VOYW1lPSJUZXN0U0VJUiIgdGFyZ2V0SVNPS2V5PSJMQVRfU1FSXzFfMCIgcG9wdWxhdGlvbklkZW50aWZpZXI9Imh1bWFuIj4KKyAgPGR1YmxpbkNvcmUgaWRlbnRpZmllcj0icGxhdGZvcm06L3Jlc291cmNlL0Jhc2ljVGVzdHMvZGVjb3JhdG9ycy9Ud29TcXVhcmVzU0VJUkluZmVjdG9yLnN0YW5kYXJkIiBjcmVhdG9yPSJlZGx1bmQiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvc3RhbmRhcmQuZWNvcmUiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9JZGVudGlmaWFibGUiIGNyZWF0ZWQ9IjIwMTEtMDEtMjQiLz4KKzwvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkOlNJSW5mZWN0b3I+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvZGVjb3JhdG9ycy9ZZW1lbkluZmVjdG9yLnN0YW5kYXJkIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL2RlY29yYXRvcnMvWWVtZW5JbmZlY3Rvci5zdGFuZGFyZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NDhiNzRkCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL2RlY29yYXRvcnMvWWVtZW5JbmZlY3Rvci5zdGFuZGFyZApAQCAtMCwwICsxLDQgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8b3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkOlNJSW5mZWN0b3IgeG1pOnZlcnNpb249IjIuMCIgeG1sbnM6eG1pPSJodHRwOi8vd3d3Lm9tZy5vcmcvWE1JIiB4bWxuczpvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3N0YW5kYXJkLmVjb3JlIiB1Ukk9InBsYXRmb3JtOi9yZXNvdXJjZS9CYXNpY1Rlc3RzL2RlY29yYXRvcnMvWWVtZW5JbmZlY3Rvci5zdGFuZGFyZCIgdHlwZVVSST0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0lkZW50aWZpYWJsZSIgZGlzZWFzZU5hbWU9IlRlc3RTRUlSIiB0YXJnZXRJU09LZXk9IllFLVMtRzE2MDAwMSIgcG9wdWxhdGlvbklkZW50aWZpZXI9Imh1bWFuIj4KKyAgPGR1YmxpbkNvcmUgaWRlbnRpZmllcj0icGxhdGZvcm06L3Jlc291cmNlL0Jhc2ljVGVzdHMvZGVjb3JhdG9ycy9ZZW1lbkluZmVjdG9yLnN0YW5kYXJkIiBjcmVhdG9yPSJlZGx1bmQiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvc3RhbmRhcmQuZWNvcmUiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9JZGVudGlmaWFibGUiIGNyZWF0ZWQ9IjIwMTEtMDItMDMiLz4KKzwvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkOlNJSW5mZWN0b3I+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvZGVjb3JhdG9ycy9ZZW1lblNFSVIuc3RhbmRhcmQgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvZGVjb3JhdG9ycy9ZZW1lblNFSVIuc3RhbmRhcmQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGM4NjJjNQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9kZWNvcmF0b3JzL1llbWVuU0VJUi5zdGFuZGFyZApAQCAtMCwwICsxLDQgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8b3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkOkRldGVybWluaXN0aWNTRUlSRGlzZWFzZU1vZGVsIHhtaTp2ZXJzaW9uPSIyLjAiIHhtbG5zOnhtaT0iaHR0cDovL3d3dy5vbWcub3JnL1hNSSIgeG1sbnM6b3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkPSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9zdGFuZGFyZC5lY29yZSIgdVJJPSJwbGF0Zm9ybTovcmVzb3VyY2UvQmFzaWNUZXN0cy9kZWNvcmF0b3JzL1llbWVuU0VJUi5zdGFuZGFyZCIgdHlwZVVSST0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0lkZW50aWZpYWJsZSIgZGlzZWFzZU5hbWU9IlRlc3RTRUlSIiB0cmFuc21pc3Npb25SYXRlPSI0NS4wIiByZWNvdmVyeVJhdGU9IjAuNCIgaW5jdWJhdGlvblJhdGU9IjAuNCI+CisgIDxkdWJsaW5Db3JlIGlkZW50aWZpZXI9InBsYXRmb3JtOi9yZXNvdXJjZS9CYXNpY1Rlc3RzL2RlY29yYXRvcnMvWWVtZW5TRUlSLnN0YW5kYXJkIiBjcmVhdG9yPSJlZGx1bmQiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvc3RhbmRhcmQuZWNvcmUiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9JZGVudGlmaWFibGUiIGNyZWF0ZWQ9IjIwMTEtMDItMDMiLz4KKzwvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkOkRldGVybWluaXN0aWNTRUlSRGlzZWFzZU1vZGVsPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL2dyYXBocy9NaWdyYXRpb25HcmFwaC5ncmFwaCBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9ncmFwaHMvTWlncmF0aW9uR3JhcGguZ3JhcGgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjI5NzJlOQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9ncmFwaHMvTWlncmF0aW9uR3JhcGguZ3JhcGgKQEAgLTAsMCArMSwxODQgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8b3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoOkdyYXBoIHhtaTp2ZXJzaW9uPSIyLjAiIHhtbG5zOnhtaT0iaHR0cDovL3d3dy5vbWcub3JnL1hNSSIgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIgeG1sbnM6b3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoPSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgeG1sbnM6b3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5lZGdlcz0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL2VkZ2VzLmVjb3JlIiB1Ukk9InBsYXRmb3JtOi9yZXNvdXJjZS9CYXNpY1Rlc3RzL2dyYXBocy9NaWdyYXRpb25HcmFwaC5ncmFwaCIgdHlwZVVSST0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIj4KKyAgPGR1YmxpbkNvcmUgaWRlbnRpZmllcj0icGxhdGZvcm06L3Jlc291cmNlL0Jhc2ljVGVzdHMvZ3JhcGhzL01pZ3JhdGlvbkdyYXBoLmdyYXBoIiBjcmVhdG9yPSJlZGx1bmQiIGRhdGU9IjIwMTEtMDItMDMiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iR2VuZXJhdGVkIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIGNyZWF0ZWQ9IjIwMTEtMDItMDMiLz4KKyAgPGVkZ2VzIGtleT0ic3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vZWRnZS9taWdyYXRpb24vcmVsYXRpb25zaGlwL21pZ3JhdGlvbi8wIj4KKyAgICA8dmFsdWUgeHNpOnR5cGU9Im9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuZWRnZXM6TWlncmF0aW9uRWRnZSIgdVJJPSJzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9lZGdlL21pZ3JhdGlvbi9yZWxhdGlvbnNoaXAvbWlncmF0aW9uLzAiIHR5cGVVUkk9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9FZGdlIiBub2RlQVVSST0ic3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vbm9kZS9nZW8vcmVnaW9uL1lFLVMtRzE2MDAwMSIgbm9kZUJVUkk9InN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL25vZGUvZ2VvL3JlZ2lvbi9ZRS1TLUcxNjAwMDIiIGRpcmVjdGVkPSJ0cnVlIj4KKyAgICAgIDxkdWJsaW5Db3JlIHRpdGxlPSJNaWdyYXRpb25FZGdlWyhZRS1TLUcxNjAwMDEpJmx0Oy0tPihZRS1TLUcxNjAwMDIpXSIgaWRlbnRpZmllcj0ic3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vZWRnZS9taWdyYXRpb24vcmVsYXRpb25zaGlwL21pZ3JhdGlvbi8wIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vRWRnZSIvPgorICAgICAgPGxhYmVsIHhzaTp0eXBlPSJvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmVkZ2VzOk1pZ3JhdGlvbkVkZ2VMYWJlbCIgdVJJPSJzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9ZRS1TLUcxNjAwMDFfWUUtUy1HMTYwMDAyIiB0eXBlVVJJPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vbGFiZWwiIHVSSU9mSWRlbnRpZmlhYmxlVG9CZUxhYmVsZWQ9InN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL2VkZ2UvbWlncmF0aW9uLzAiPgorICAgICAgICA8ZHVibGluQ29yZSBpZGVudGlmaWVyPSJzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9ZRS1TLUcxNjAwMDFfWUUtUy1HMTYwMDAyIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vbGFiZWwiLz4KKyAgICAgICAgPGN1cnJlbnRWYWx1ZSB4c2k6dHlwZT0ib3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5lZGdlczpNaWdyYXRpb25FZGdlTGFiZWxWYWx1ZSIgbWlncmF0aW9uUmF0ZT0iMC4wNSIvPgorICAgICAgPC9sYWJlbD4KKyAgICA8L3ZhbHVlPgorICA8L2VkZ2VzPgorICA8ZWRnZXMga2V5PSJzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9lZGdlL21pZ3JhdGlvbi9yZWxhdGlvbnNoaXAvbWlncmF0aW9uLzEiPgorICAgIDx2YWx1ZSB4c2k6dHlwZT0ib3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5lZGdlczpNaWdyYXRpb25FZGdlIiB1Ukk9InN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL2VkZ2UvbWlncmF0aW9uL3JlbGF0aW9uc2hpcC9taWdyYXRpb24vMSIgdHlwZVVSST0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0VkZ2UiIG5vZGVBVVJJPSJzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9ub2RlL2dlby9yZWdpb24vWUUtUy1HMTYwMDAyIiBub2RlQlVSST0ic3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vbm9kZS9nZW8vcmVnaW9uL1lFLVMtRzE2MDAwMSIgZGlyZWN0ZWQ9InRydWUiPgorICAgICAgPGR1YmxpbkNvcmUgdGl0bGU9Ik1pZ3JhdGlvbkVkZ2VbKFlFLVMtRzE2MDAwMikmbHQ7LS0+KFlFLVMtRzE2MDAwMSldIiBpZGVudGlmaWVyPSJzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9lZGdlL21pZ3JhdGlvbi9yZWxhdGlvbnNoaXAvbWlncmF0aW9uLzEiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9FZGdlIi8+CisgICAgICA8bGFiZWwgeHNpOnR5cGU9Im9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuZWRnZXM6TWlncmF0aW9uRWRnZUxhYmVsIiB1Ukk9InN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL1lFLVMtRzE2MDAwMl9ZRS1TLUcxNjAwMDEiIHR5cGVVUkk9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9sYWJlbCIgdVJJT2ZJZGVudGlmaWFibGVUb0JlTGFiZWxlZD0ic3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vZWRnZS9taWdyYXRpb24vMSI+CisgICAgICAgIDxkdWJsaW5Db3JlIGlkZW50aWZpZXI9InN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL1lFLVMtRzE2MDAwMl9ZRS1TLUcxNjAwMDEiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9sYWJlbCIvPgorICAgICAgICA8Y3VycmVudFZhbHVlIHhzaTp0eXBlPSJvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmVkZ2VzOk1pZ3JhdGlvbkVkZ2VMYWJlbFZhbHVlIiBtaWdyYXRpb25SYXRlPSIwLjA1Ii8+CisgICAgICA8L2xhYmVsPgorICAgIDwvdmFsdWU+CisgIDwvZWRnZXM+CisgIDxlZGdlcyBrZXk9InN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL2VkZ2UvbWlncmF0aW9uL3JlbGF0aW9uc2hpcC9taWdyYXRpb24vMiI+CisgICAgPHZhbHVlIHhzaTp0eXBlPSJvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmVkZ2VzOk1pZ3JhdGlvbkVkZ2UiIHVSST0ic3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vZWRnZS9taWdyYXRpb24vcmVsYXRpb25zaGlwL21pZ3JhdGlvbi8yIiB0eXBlVVJJPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vRWRnZSIgbm9kZUFVUkk9InN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL25vZGUvZ2VvL3JlZ2lvbi9ZRS1TLUcxNjAwMDQiIG5vZGVCVVJJPSJzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9ub2RlL2dlby9yZWdpb24vWUUtUy1HMTYwMDA2IiBkaXJlY3RlZD0idHJ1ZSI+CisgICAgICA8ZHVibGluQ29yZSB0aXRsZT0iTWlncmF0aW9uRWRnZVsoWUUtUy1HMTYwMDA0KSZsdDstLT4oWUUtUy1HMTYwMDA2KV0iIGlkZW50aWZpZXI9InN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL2VkZ2UvbWlncmF0aW9uL3JlbGF0aW9uc2hpcC9taWdyYXRpb24vMiIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0VkZ2UiLz4KKyAgICAgIDxsYWJlbCB4c2k6dHlwZT0ib3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5lZGdlczpNaWdyYXRpb25FZGdlTGFiZWwiIHVSST0ic3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vWUUtUy1HMTYwMDA0X1lFLVMtRzE2MDAwNiIgdHlwZVVSST0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL2xhYmVsIiB1UklPZklkZW50aWZpYWJsZVRvQmVMYWJlbGVkPSJzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9lZGdlL21pZ3JhdGlvbi8yIj4KKyAgICAgICAgPGR1YmxpbkNvcmUgaWRlbnRpZmllcj0ic3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vWUUtUy1HMTYwMDA0X1lFLVMtRzE2MDAwNiIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL2xhYmVsIi8+CisgICAgICAgIDxjdXJyZW50VmFsdWUgeHNpOnR5cGU9Im9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuZWRnZXM6TWlncmF0aW9uRWRnZUxhYmVsVmFsdWUiIG1pZ3JhdGlvblJhdGU9IjAuMDUiLz4KKyAgICAgIDwvbGFiZWw+CisgICAgPC92YWx1ZT4KKyAgPC9lZGdlcz4KKyAgPGVkZ2VzIGtleT0ic3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vZWRnZS9taWdyYXRpb24vcmVsYXRpb25zaGlwL21pZ3JhdGlvbi8zIj4KKyAgICA8dmFsdWUgeHNpOnR5cGU9Im9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuZWRnZXM6TWlncmF0aW9uRWRnZSIgdVJJPSJzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9lZGdlL21pZ3JhdGlvbi9yZWxhdGlvbnNoaXAvbWlncmF0aW9uLzMiIHR5cGVVUkk9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9FZGdlIiBub2RlQVVSST0ic3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vbm9kZS9nZW8vcmVnaW9uL1lFLVMtRzE2MDAwNiIgbm9kZUJVUkk9InN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL25vZGUvZ2VvL3JlZ2lvbi9ZRS1TLUcxNjAwMDQiIGRpcmVjdGVkPSJ0cnVlIj4KKyAgICAgIDxkdWJsaW5Db3JlIHRpdGxlPSJNaWdyYXRpb25FZGdlWyhZRS1TLUcxNjAwMDYpJmx0Oy0tPihZRS1TLUcxNjAwMDQpXSIgaWRlbnRpZmllcj0ic3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vZWRnZS9taWdyYXRpb24vcmVsYXRpb25zaGlwL21pZ3JhdGlvbi8zIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vRWRnZSIvPgorICAgICAgPGxhYmVsIHhzaTp0eXBlPSJvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmVkZ2VzOk1pZ3JhdGlvbkVkZ2VMYWJlbCIgdVJJPSJzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9ZRS1TLUcxNjAwMDZfWUUtUy1HMTYwMDA0IiB0eXBlVVJJPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vbGFiZWwiIHVSSU9mSWRlbnRpZmlhYmxlVG9CZUxhYmVsZWQ9InN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL2VkZ2UvbWlncmF0aW9uLzMiPgorICAgICAgICA8ZHVibGluQ29yZSBpZGVudGlmaWVyPSJzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9ZRS1TLUcxNjAwMDZfWUUtUy1HMTYwMDA0IiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vbGFiZWwiLz4KKyAgICAgICAgPGN1cnJlbnRWYWx1ZSB4c2k6dHlwZT0ib3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5lZGdlczpNaWdyYXRpb25FZGdlTGFiZWxWYWx1ZSIgbWlncmF0aW9uUmF0ZT0iMC4wNSIvPgorICAgICAgPC9sYWJlbD4KKyAgICA8L3ZhbHVlPgorICA8L2VkZ2VzPgorICA8ZWRnZXMga2V5PSJzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9lZGdlL21pZ3JhdGlvbi9yZWxhdGlvbnNoaXAvbWlncmF0aW9uLzQiPgorICAgIDx2YWx1ZSB4c2k6dHlwZT0ib3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5lZGdlczpNaWdyYXRpb25FZGdlIiB1Ukk9InN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL2VkZ2UvbWlncmF0aW9uL3JlbGF0aW9uc2hpcC9taWdyYXRpb24vNCIgdHlwZVVSST0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0VkZ2UiIG5vZGVBVVJJPSJzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9ub2RlL2dlby9yZWdpb24vWUUtTi1HMTUwMDAxIiBub2RlQlVSST0ic3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vbm9kZS9nZW8vcmVnaW9uL1lFLVMtRzE2MDAwMiIgZGlyZWN0ZWQ9InRydWUiPgorICAgICAgPGR1YmxpbkNvcmUgdGl0bGU9Ik1pZ3JhdGlvbkVkZ2VbKFlFLU4tRzE1MDAwMSkmbHQ7LS0+KFlFLVMtRzE2MDAwMildIiBpZGVudGlmaWVyPSJzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9lZGdlL21pZ3JhdGlvbi9yZWxhdGlvbnNoaXAvbWlncmF0aW9uLzQiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9FZGdlIi8+CisgICAgICA8bGFiZWwgeHNpOnR5cGU9Im9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuZWRnZXM6TWlncmF0aW9uRWRnZUxhYmVsIiB1Ukk9InN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL1lFLU4tRzE1MDAwMV9ZRS1TLUcxNjAwMDIiIHR5cGVVUkk9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9sYWJlbCIgdVJJT2ZJZGVudGlmaWFibGVUb0JlTGFiZWxlZD0ic3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vZWRnZS9taWdyYXRpb24vNCI+CisgICAgICAgIDxkdWJsaW5Db3JlIGlkZW50aWZpZXI9InN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL1lFLU4tRzE1MDAwMV9ZRS1TLUcxNjAwMDIiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9sYWJlbCIvPgorICAgICAgICA8Y3VycmVudFZhbHVlIHhzaTp0eXBlPSJvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmVkZ2VzOk1pZ3JhdGlvbkVkZ2VMYWJlbFZhbHVlIiBtaWdyYXRpb25SYXRlPSIwLjA1Ii8+CisgICAgICA8L2xhYmVsPgorICAgIDwvdmFsdWU+CisgIDwvZWRnZXM+CisgIDxlZGdlcyBrZXk9InN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL2VkZ2UvbWlncmF0aW9uL3JlbGF0aW9uc2hpcC9taWdyYXRpb24vNSI+CisgICAgPHZhbHVlIHhzaTp0eXBlPSJvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmVkZ2VzOk1pZ3JhdGlvbkVkZ2UiIHVSST0ic3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vZWRnZS9taWdyYXRpb24vcmVsYXRpb25zaGlwL21pZ3JhdGlvbi81IiB0eXBlVVJJPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vRWRnZSIgbm9kZUFVUkk9InN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL25vZGUvZ2VvL3JlZ2lvbi9ZRS1TLUcxNjAwMDIiIG5vZGVCVVJJPSJzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9ub2RlL2dlby9yZWdpb24vWUUtTi1HMTUwMDAxIiBkaXJlY3RlZD0idHJ1ZSI+CisgICAgICA8ZHVibGluQ29yZSB0aXRsZT0iTWlncmF0aW9uRWRnZVsoWUUtUy1HMTYwMDAyKSZsdDstLT4oWUUtTi1HMTUwMDAxKV0iIGlkZW50aWZpZXI9InN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL2VkZ2UvbWlncmF0aW9uL3JlbGF0aW9uc2hpcC9taWdyYXRpb24vNSIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0VkZ2UiLz4KKyAgICAgIDxsYWJlbCB4c2k6dHlwZT0ib3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5lZGdlczpNaWdyYXRpb25FZGdlTGFiZWwiIHVSST0ic3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vWUUtUy1HMTYwMDAyX1lFLU4tRzE1MDAwMSIgdHlwZVVSST0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL2xhYmVsIiB1UklPZklkZW50aWZpYWJsZVRvQmVMYWJlbGVkPSJzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9lZGdlL21pZ3JhdGlvbi81Ij4KKyAgICAgICAgPGR1YmxpbkNvcmUgaWRlbnRpZmllcj0ic3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vWUUtUy1HMTYwMDAyX1lFLU4tRzE1MDAwMSIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL2xhYmVsIi8+CisgICAgICAgIDxjdXJyZW50VmFsdWUgeHNpOnR5cGU9Im9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuZWRnZXM6TWlncmF0aW9uRWRnZUxhYmVsVmFsdWUiIG1pZ3JhdGlvblJhdGU9IjAuMDUiLz4KKyAgICAgIDwvbGFiZWw+CisgICAgPC92YWx1ZT4KKyAgPC9lZGdlcz4KKyAgPGVkZ2VzIGtleT0ic3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vZWRnZS9taWdyYXRpb24vcmVsYXRpb25zaGlwL21pZ3JhdGlvbi82Ij4KKyAgICA8dmFsdWUgeHNpOnR5cGU9Im9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuZWRnZXM6TWlncmF0aW9uRWRnZSIgdVJJPSJzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9lZGdlL21pZ3JhdGlvbi9yZWxhdGlvbnNoaXAvbWlncmF0aW9uLzYiIHR5cGVVUkk9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9FZGdlIiBub2RlQVVSST0ic3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vbm9kZS9nZW8vcmVnaW9uL1lFLU4tRzE1MDAwMSIgbm9kZUJVUkk9InN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL25vZGUvZ2VvL3JlZ2lvbi9ZRS1TLUcxNjAwMDYiIGRpcmVjdGVkPSJ0cnVlIj4KKyAgICAgIDxkdWJsaW5Db3JlIHRpdGxlPSJNaWdyYXRpb25FZGdlWyhZRS1OLUcxNTAwMDEpJmx0Oy0tPihZRS1TLUcxNjAwMDYpXSIgaWRlbnRpZmllcj0ic3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vZWRnZS9taWdyYXRpb24vcmVsYXRpb25zaGlwL21pZ3JhdGlvbi82IiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vRWRnZSIvPgorICAgICAgPGxhYmVsIHhzaTp0eXBlPSJvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmVkZ2VzOk1pZ3JhdGlvbkVkZ2VMYWJlbCIgdVJJPSJzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9ZRS1OLUcxNTAwMDFfWUUtUy1HMTYwMDA2IiB0eXBlVVJJPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vbGFiZWwiIHVSSU9mSWRlbnRpZmlhYmxlVG9CZUxhYmVsZWQ9InN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL2VkZ2UvbWlncmF0aW9uLzYiPgorICAgICAgICA8ZHVibGluQ29yZSBpZGVudGlmaWVyPSJzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9ZRS1OLUcxNTAwMDFfWUUtUy1HMTYwMDA2IiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vbGFiZWwiLz4KKyAgICAgICAgPGN1cnJlbnRWYWx1ZSB4c2k6dHlwZT0ib3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5lZGdlczpNaWdyYXRpb25FZGdlTGFiZWxWYWx1ZSIgbWlncmF0aW9uUmF0ZT0iMC4wNSIvPgorICAgICAgPC9sYWJlbD4KKyAgICA8L3ZhbHVlPgorICA8L2VkZ2VzPgorICA8ZWRnZXMga2V5PSJzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9lZGdlL21pZ3JhdGlvbi9yZWxhdGlvbnNoaXAvbWlncmF0aW9uLzciPgorICAgIDx2YWx1ZSB4c2k6dHlwZT0ib3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5lZGdlczpNaWdyYXRpb25FZGdlIiB1Ukk9InN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL2VkZ2UvbWlncmF0aW9uL3JlbGF0aW9uc2hpcC9taWdyYXRpb24vNyIgdHlwZVVSST0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0VkZ2UiIG5vZGVBVVJJPSJzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9ub2RlL2dlby9yZWdpb24vWUUtUy1HMTYwMDA2IiBub2RlQlVSST0ic3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vbm9kZS9nZW8vcmVnaW9uL1lFLU4tRzE1MDAwMSIgZGlyZWN0ZWQ9InRydWUiPgorICAgICAgPGR1YmxpbkNvcmUgdGl0bGU9Ik1pZ3JhdGlvbkVkZ2VbKFlFLVMtRzE2MDAwNikmbHQ7LS0+KFlFLU4tRzE1MDAwMSldIiBpZGVudGlmaWVyPSJzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9lZGdlL21pZ3JhdGlvbi9yZWxhdGlvbnNoaXAvbWlncmF0aW9uLzciIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9FZGdlIi8+CisgICAgICA8bGFiZWwgeHNpOnR5cGU9Im9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuZWRnZXM6TWlncmF0aW9uRWRnZUxhYmVsIiB1Ukk9InN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL1lFLVMtRzE2MDAwNl9ZRS1OLUcxNTAwMDEiIHR5cGVVUkk9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9sYWJlbCIgdVJJT2ZJZGVudGlmaWFibGVUb0JlTGFiZWxlZD0ic3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vZWRnZS9taWdyYXRpb24vNyI+CisgICAgICAgIDxkdWJsaW5Db3JlIGlkZW50aWZpZXI9InN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL1lFLVMtRzE2MDAwNl9ZRS1OLUcxNTAwMDEiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9sYWJlbCIvPgorICAgICAgICA8Y3VycmVudFZhbHVlIHhzaTp0eXBlPSJvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmVkZ2VzOk1pZ3JhdGlvbkVkZ2VMYWJlbFZhbHVlIiBtaWdyYXRpb25SYXRlPSIwLjA1Ii8+CisgICAgICA8L2xhYmVsPgorICAgIDwvdmFsdWU+CisgIDwvZWRnZXM+CisgIDxlZGdlcyBrZXk9InN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL2VkZ2UvbWlncmF0aW9uL3JlbGF0aW9uc2hpcC9taWdyYXRpb24vOCI+CisgICAgPHZhbHVlIHhzaTp0eXBlPSJvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmVkZ2VzOk1pZ3JhdGlvbkVkZ2UiIHVSST0ic3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vZWRnZS9taWdyYXRpb24vcmVsYXRpb25zaGlwL21pZ3JhdGlvbi84IiB0eXBlVVJJPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vRWRnZSIgbm9kZUFVUkk9InN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL25vZGUvZ2VvL3JlZ2lvbi9ZRS1TLUcxNjAwMDMiIG5vZGVCVVJJPSJzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9ub2RlL2dlby9yZWdpb24vWUUtUy1HMTYwMDA0IiBkaXJlY3RlZD0idHJ1ZSI+CisgICAgICA8ZHVibGluQ29yZSB0aXRsZT0iTWlncmF0aW9uRWRnZVsoWUUtUy1HMTYwMDAzKSZsdDstLT4oWUUtUy1HMTYwMDA0KV0iIGlkZW50aWZpZXI9InN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL2VkZ2UvbWlncmF0aW9uL3JlbGF0aW9uc2hpcC9taWdyYXRpb24vOCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0VkZ2UiLz4KKyAgICAgIDxsYWJlbCB4c2k6dHlwZT0ib3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5lZGdlczpNaWdyYXRpb25FZGdlTGFiZWwiIHVSST0ic3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vWUUtUy1HMTYwMDAzX1lFLVMtRzE2MDAwNCIgdHlwZVVSST0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL2xhYmVsIiB1UklPZklkZW50aWZpYWJsZVRvQmVMYWJlbGVkPSJzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9lZGdlL21pZ3JhdGlvbi84Ij4KKyAgICAgICAgPGR1YmxpbkNvcmUgaWRlbnRpZmllcj0ic3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vWUUtUy1HMTYwMDAzX1lFLVMtRzE2MDAwNCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL2xhYmVsIi8+CisgICAgICAgIDxjdXJyZW50VmFsdWUgeHNpOnR5cGU9Im9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuZWRnZXM6TWlncmF0aW9uRWRnZUxhYmVsVmFsdWUiIG1pZ3JhdGlvblJhdGU9IjAuMDUiLz4KKyAgICAgIDwvbGFiZWw+CisgICAgPC92YWx1ZT4KKyAgPC9lZGdlcz4KKyAgPGVkZ2VzIGtleT0ic3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vZWRnZS9taWdyYXRpb24vcmVsYXRpb25zaGlwL21pZ3JhdGlvbi85Ij4KKyAgICA8dmFsdWUgeHNpOnR5cGU9Im9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuZWRnZXM6TWlncmF0aW9uRWRnZSIgdVJJPSJzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9lZGdlL21pZ3JhdGlvbi9yZWxhdGlvbnNoaXAvbWlncmF0aW9uLzkiIHR5cGVVUkk9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9FZGdlIiBub2RlQVVSST0ic3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vbm9kZS9nZW8vcmVnaW9uL1lFLVMtRzE2MDAwNCIgbm9kZUJVUkk9InN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL25vZGUvZ2VvL3JlZ2lvbi9ZRS1TLUcxNjAwMDMiIGRpcmVjdGVkPSJ0cnVlIj4KKyAgICAgIDxkdWJsaW5Db3JlIHRpdGxlPSJNaWdyYXRpb25FZGdlWyhZRS1TLUcxNjAwMDQpJmx0Oy0tPihZRS1TLUcxNjAwMDMpXSIgaWRlbnRpZmllcj0ic3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vZWRnZS9taWdyYXRpb24vcmVsYXRpb25zaGlwL21pZ3JhdGlvbi85IiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vRWRnZSIvPgorICAgICAgPGxhYmVsIHhzaTp0eXBlPSJvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmVkZ2VzOk1pZ3JhdGlvbkVkZ2VMYWJlbCIgdVJJPSJzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9ZRS1TLUcxNjAwMDRfWUUtUy1HMTYwMDAzIiB0eXBlVVJJPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vbGFiZWwiIHVSSU9mSWRlbnRpZmlhYmxlVG9CZUxhYmVsZWQ9InN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL2VkZ2UvbWlncmF0aW9uLzkiPgorICAgICAgICA8ZHVibGluQ29yZSBpZGVudGlmaWVyPSJzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9ZRS1TLUcxNjAwMDRfWUUtUy1HMTYwMDAzIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vbGFiZWwiLz4KKyAgICAgICAgPGN1cnJlbnRWYWx1ZSB4c2k6dHlwZT0ib3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5lZGdlczpNaWdyYXRpb25FZGdlTGFiZWxWYWx1ZSIgbWlncmF0aW9uUmF0ZT0iMC4wNSIvPgorICAgICAgPC9sYWJlbD4KKyAgICA8L3ZhbHVlPgorICA8L2VkZ2VzPgorICA8ZWRnZXMga2V5PSJzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9lZGdlL21pZ3JhdGlvbi9yZWxhdGlvbnNoaXAvbWlncmF0aW9uLzEwIj4KKyAgICA8dmFsdWUgeHNpOnR5cGU9Im9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuZWRnZXM6TWlncmF0aW9uRWRnZSIgdVJJPSJzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9lZGdlL21pZ3JhdGlvbi9yZWxhdGlvbnNoaXAvbWlncmF0aW9uLzEwIiB0eXBlVVJJPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vRWRnZSIgbm9kZUFVUkk9InN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL25vZGUvZ2VvL3JlZ2lvbi9ZRS1OLUcxNTAwMDEiIG5vZGVCVVJJPSJzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9ub2RlL2dlby9yZWdpb24vWUUtUy1HMTYwMDAxIiBkaXJlY3RlZD0idHJ1ZSI+CisgICAgICA8ZHVibGluQ29yZSB0aXRsZT0iTWlncmF0aW9uRWRnZVsoWUUtTi1HMTUwMDAxKSZsdDstLT4oWUUtUy1HMTYwMDAxKV0iIGlkZW50aWZpZXI9InN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL2VkZ2UvbWlncmF0aW9uL3JlbGF0aW9uc2hpcC9taWdyYXRpb24vMTAiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9FZGdlIi8+CisgICAgICA8bGFiZWwgeHNpOnR5cGU9Im9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuZWRnZXM6TWlncmF0aW9uRWRnZUxhYmVsIiB1Ukk9InN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL1lFLU4tRzE1MDAwMV9ZRS1TLUcxNjAwMDEiIHR5cGVVUkk9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9sYWJlbCIgdVJJT2ZJZGVudGlmaWFibGVUb0JlTGFiZWxlZD0ic3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vZWRnZS9taWdyYXRpb24vMTAiPgorICAgICAgICA8ZHVibGluQ29yZSBpZGVudGlmaWVyPSJzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9ZRS1OLUcxNTAwMDFfWUUtUy1HMTYwMDAxIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vbGFiZWwiLz4KKyAgICAgICAgPGN1cnJlbnRWYWx1ZSB4c2k6dHlwZT0ib3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5lZGdlczpNaWdyYXRpb25FZGdlTGFiZWxWYWx1ZSIgbWlncmF0aW9uUmF0ZT0iMC4wNSIvPgorICAgICAgPC9sYWJlbD4KKyAgICA8L3ZhbHVlPgorICA8L2VkZ2VzPgorICA8ZWRnZXMga2V5PSJzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9lZGdlL21pZ3JhdGlvbi9yZWxhdGlvbnNoaXAvbWlncmF0aW9uLzExIj4KKyAgICA8dmFsdWUgeHNpOnR5cGU9Im9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuZWRnZXM6TWlncmF0aW9uRWRnZSIgdVJJPSJzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9lZGdlL21pZ3JhdGlvbi9yZWxhdGlvbnNoaXAvbWlncmF0aW9uLzExIiB0eXBlVVJJPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vRWRnZSIgbm9kZUFVUkk9InN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL25vZGUvZ2VvL3JlZ2lvbi9ZRS1TLUcxNjAwMDEiIG5vZGVCVVJJPSJzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9ub2RlL2dlby9yZWdpb24vWUUtTi1HMTUwMDAxIiBkaXJlY3RlZD0idHJ1ZSI+CisgICAgICA8ZHVibGluQ29yZSB0aXRsZT0iTWlncmF0aW9uRWRnZVsoWUUtUy1HMTYwMDAxKSZsdDstLT4oWUUtTi1HMTUwMDAxKV0iIGlkZW50aWZpZXI9InN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL2VkZ2UvbWlncmF0aW9uL3JlbGF0aW9uc2hpcC9taWdyYXRpb24vMTEiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9FZGdlIi8+CisgICAgICA8bGFiZWwgeHNpOnR5cGU9Im9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuZWRnZXM6TWlncmF0aW9uRWRnZUxhYmVsIiB1Ukk9InN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL1lFLVMtRzE2MDAwMV9ZRS1OLUcxNTAwMDEiIHR5cGVVUkk9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9sYWJlbCIgdVJJT2ZJZGVudGlmaWFibGVUb0JlTGFiZWxlZD0ic3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vZWRnZS9taWdyYXRpb24vMTEiPgorICAgICAgICA8ZHVibGluQ29yZSBpZGVudGlmaWVyPSJzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9ZRS1TLUcxNjAwMDFfWUUtTi1HMTUwMDAxIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vbGFiZWwiLz4KKyAgICAgICAgPGN1cnJlbnRWYWx1ZSB4c2k6dHlwZT0ib3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5lZGdlczpNaWdyYXRpb25FZGdlTGFiZWxWYWx1ZSIgbWlncmF0aW9uUmF0ZT0iMC4wNSIvPgorICAgICAgPC9sYWJlbD4KKyAgICA8L3ZhbHVlPgorICA8L2VkZ2VzPgorICA8ZWRnZXMga2V5PSJzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9lZGdlL21pZ3JhdGlvbi9yZWxhdGlvbnNoaXAvbWlncmF0aW9uLzEyIj4KKyAgICA8dmFsdWUgeHNpOnR5cGU9Im9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuZWRnZXM6TWlncmF0aW9uRWRnZSIgdVJJPSJzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9lZGdlL21pZ3JhdGlvbi9yZWxhdGlvbnNoaXAvbWlncmF0aW9uLzEyIiB0eXBlVVJJPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vRWRnZSIgbm9kZUFVUkk9InN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL25vZGUvZ2VvL3JlZ2lvbi9ZRS1OLUcxNTAwMDEiIG5vZGVCVVJJPSJzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9ub2RlL2dlby9yZWdpb24vWUUtUy1HMTYwMDA1IiBkaXJlY3RlZD0idHJ1ZSI+CisgICAgICA8ZHVibGluQ29yZSB0aXRsZT0iTWlncmF0aW9uRWRnZVsoWUUtTi1HMTUwMDAxKSZsdDstLT4oWUUtUy1HMTYwMDA1KV0iIGlkZW50aWZpZXI9InN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL2VkZ2UvbWlncmF0aW9uL3JlbGF0aW9uc2hpcC9taWdyYXRpb24vMTIiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9FZGdlIi8+CisgICAgICA8bGFiZWwgeHNpOnR5cGU9Im9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuZWRnZXM6TWlncmF0aW9uRWRnZUxhYmVsIiB1Ukk9InN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL1lFLU4tRzE1MDAwMV9ZRS1TLUcxNjAwMDUiIHR5cGVVUkk9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9sYWJlbCIgdVJJT2ZJZGVudGlmaWFibGVUb0JlTGFiZWxlZD0ic3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vZWRnZS9taWdyYXRpb24vMTIiPgorICAgICAgICA8ZHVibGluQ29yZSBpZGVudGlmaWVyPSJzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9ZRS1OLUcxNTAwMDFfWUUtUy1HMTYwMDA1IiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vbGFiZWwiLz4KKyAgICAgICAgPGN1cnJlbnRWYWx1ZSB4c2k6dHlwZT0ib3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5lZGdlczpNaWdyYXRpb25FZGdlTGFiZWxWYWx1ZSIgbWlncmF0aW9uUmF0ZT0iMC4wNSIvPgorICAgICAgPC9sYWJlbD4KKyAgICA8L3ZhbHVlPgorICA8L2VkZ2VzPgorICA8ZWRnZXMga2V5PSJzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9lZGdlL21pZ3JhdGlvbi9yZWxhdGlvbnNoaXAvbWlncmF0aW9uLzEzIj4KKyAgICA8dmFsdWUgeHNpOnR5cGU9Im9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuZWRnZXM6TWlncmF0aW9uRWRnZSIgdVJJPSJzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9lZGdlL21pZ3JhdGlvbi9yZWxhdGlvbnNoaXAvbWlncmF0aW9uLzEzIiB0eXBlVVJJPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vRWRnZSIgbm9kZUFVUkk9InN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL25vZGUvZ2VvL3JlZ2lvbi9ZRS1TLUcxNjAwMDUiIG5vZGVCVVJJPSJzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9ub2RlL2dlby9yZWdpb24vWUUtTi1HMTUwMDAxIiBkaXJlY3RlZD0idHJ1ZSI+CisgICAgICA8ZHVibGluQ29yZSB0aXRsZT0iTWlncmF0aW9uRWRnZVsoWUUtUy1HMTYwMDA1KSZsdDstLT4oWUUtTi1HMTUwMDAxKV0iIGlkZW50aWZpZXI9InN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL2VkZ2UvbWlncmF0aW9uL3JlbGF0aW9uc2hpcC9taWdyYXRpb24vMTMiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9FZGdlIi8+CisgICAgICA8bGFiZWwgeHNpOnR5cGU9Im9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuZWRnZXM6TWlncmF0aW9uRWRnZUxhYmVsIiB1Ukk9InN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL1lFLVMtRzE2MDAwNV9ZRS1OLUcxNTAwMDEiIHR5cGVVUkk9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9sYWJlbCIgdVJJT2ZJZGVudGlmaWFibGVUb0JlTGFiZWxlZD0ic3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vZWRnZS9taWdyYXRpb24vMTMiPgorICAgICAgICA8ZHVibGluQ29yZSBpZGVudGlmaWVyPSJzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9ZRS1TLUcxNjAwMDVfWUUtTi1HMTUwMDAxIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vbGFiZWwiLz4KKyAgICAgICAgPGN1cnJlbnRWYWx1ZSB4c2k6dHlwZT0ib3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5lZGdlczpNaWdyYXRpb25FZGdlTGFiZWxWYWx1ZSIgbWlncmF0aW9uUmF0ZT0iMC4wNSIvPgorICAgICAgPC9sYWJlbD4KKyAgICA8L3ZhbHVlPgorICA8L2VkZ2VzPgorICA8ZWRnZXMga2V5PSJzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9lZGdlL21pZ3JhdGlvbi9yZWxhdGlvbnNoaXAvbWlncmF0aW9uLzE0Ij4KKyAgICA8dmFsdWUgeHNpOnR5cGU9Im9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuZWRnZXM6TWlncmF0aW9uRWRnZSIgdVJJPSJzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9lZGdlL21pZ3JhdGlvbi9yZWxhdGlvbnNoaXAvbWlncmF0aW9uLzE0IiB0eXBlVVJJPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vRWRnZSIgbm9kZUFVUkk9InN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL25vZGUvZ2VvL3JlZ2lvbi9ZRS1TLUcxNjAwMDEiIG5vZGVCVVJJPSJzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9ub2RlL2dlby9yZWdpb24vWUUtUy1HMTYwMDA1IiBkaXJlY3RlZD0idHJ1ZSI+CisgICAgICA8ZHVibGluQ29yZSB0aXRsZT0iTWlncmF0aW9uRWRnZVsoWUUtUy1HMTYwMDAxKSZsdDstLT4oWUUtUy1HMTYwMDA1KV0iIGlkZW50aWZpZXI9InN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL2VkZ2UvbWlncmF0aW9uL3JlbGF0aW9uc2hpcC9taWdyYXRpb24vMTQiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9FZGdlIi8+CisgICAgICA8bGFiZWwgeHNpOnR5cGU9Im9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuZWRnZXM6TWlncmF0aW9uRWRnZUxhYmVsIiB1Ukk9InN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL1lFLVMtRzE2MDAwMV9ZRS1TLUcxNjAwMDUiIHR5cGVVUkk9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9sYWJlbCIgdVJJT2ZJZGVudGlmaWFibGVUb0JlTGFiZWxlZD0ic3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vZWRnZS9taWdyYXRpb24vMTQiPgorICAgICAgICA8ZHVibGluQ29yZSBpZGVudGlmaWVyPSJzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9ZRS1TLUcxNjAwMDFfWUUtUy1HMTYwMDA1IiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vbGFiZWwiLz4KKyAgICAgICAgPGN1cnJlbnRWYWx1ZSB4c2k6dHlwZT0ib3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5lZGdlczpNaWdyYXRpb25FZGdlTGFiZWxWYWx1ZSIgbWlncmF0aW9uUmF0ZT0iMC4wNSIvPgorICAgICAgPC9sYWJlbD4KKyAgICA8L3ZhbHVlPgorICA8L2VkZ2VzPgorICA8ZWRnZXMga2V5PSJzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9lZGdlL21pZ3JhdGlvbi9yZWxhdGlvbnNoaXAvbWlncmF0aW9uLzE1Ij4KKyAgICA8dmFsdWUgeHNpOnR5cGU9Im9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuZWRnZXM6TWlncmF0aW9uRWRnZSIgdVJJPSJzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9lZGdlL21pZ3JhdGlvbi9yZWxhdGlvbnNoaXAvbWlncmF0aW9uLzE1IiB0eXBlVVJJPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vRWRnZSIgbm9kZUFVUkk9InN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL25vZGUvZ2VvL3JlZ2lvbi9ZRS1TLUcxNjAwMDUiIG5vZGVCVVJJPSJzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9ub2RlL2dlby9yZWdpb24vWUUtUy1HMTYwMDAxIiBkaXJlY3RlZD0idHJ1ZSI+CisgICAgICA8ZHVibGluQ29yZSB0aXRsZT0iTWlncmF0aW9uRWRnZVsoWUUtUy1HMTYwMDA1KSZsdDstLT4oWUUtUy1HMTYwMDAxKV0iIGlkZW50aWZpZXI9InN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL2VkZ2UvbWlncmF0aW9uL3JlbGF0aW9uc2hpcC9taWdyYXRpb24vMTUiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9FZGdlIi8+CisgICAgICA8bGFiZWwgeHNpOnR5cGU9Im9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuZWRnZXM6TWlncmF0aW9uRWRnZUxhYmVsIiB1Ukk9InN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL1lFLVMtRzE2MDAwNV9ZRS1TLUcxNjAwMDEiIHR5cGVVUkk9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9sYWJlbCIgdVJJT2ZJZGVudGlmaWFibGVUb0JlTGFiZWxlZD0ic3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vZWRnZS9taWdyYXRpb24vMTUiPgorICAgICAgICA8ZHVibGluQ29yZSBpZGVudGlmaWVyPSJzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9ZRS1TLUcxNjAwMDVfWUUtUy1HMTYwMDAxIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vbGFiZWwiLz4KKyAgICAgICAgPGN1cnJlbnRWYWx1ZSB4c2k6dHlwZT0ib3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5lZGdlczpNaWdyYXRpb25FZGdlTGFiZWxWYWx1ZSIgbWlncmF0aW9uUmF0ZT0iMC4wNSIvPgorICAgICAgPC9sYWJlbD4KKyAgICA8L3ZhbHVlPgorICA8L2VkZ2VzPgorICA8ZWRnZXMga2V5PSJzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9lZGdlL21pZ3JhdGlvbi9yZWxhdGlvbnNoaXAvbWlncmF0aW9uLzE2Ij4KKyAgICA8dmFsdWUgeHNpOnR5cGU9Im9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuZWRnZXM6TWlncmF0aW9uRWRnZSIgdVJJPSJzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9lZGdlL21pZ3JhdGlvbi9yZWxhdGlvbnNoaXAvbWlncmF0aW9uLzE2IiB0eXBlVVJJPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vRWRnZSIgbm9kZUFVUkk9InN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL25vZGUvZ2VvL3JlZ2lvbi9ZRS1TLUcxNjAwMDIiIG5vZGVCVVJJPSJzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9ub2RlL2dlby9yZWdpb24vWUUtUy1HMTYwMDA1IiBkaXJlY3RlZD0idHJ1ZSI+CisgICAgICA8ZHVibGluQ29yZSB0aXRsZT0iTWlncmF0aW9uRWRnZVsoWUUtUy1HMTYwMDAyKSZsdDstLT4oWUUtUy1HMTYwMDA1KV0iIGlkZW50aWZpZXI9InN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL2VkZ2UvbWlncmF0aW9uL3JlbGF0aW9uc2hpcC9taWdyYXRpb24vMTYiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9FZGdlIi8+CisgICAgICA8bGFiZWwgeHNpOnR5cGU9Im9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuZWRnZXM6TWlncmF0aW9uRWRnZUxhYmVsIiB1Ukk9InN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL1lFLVMtRzE2MDAwMl9ZRS1TLUcxNjAwMDUiIHR5cGVVUkk9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9sYWJlbCIgdVJJT2ZJZGVudGlmaWFibGVUb0JlTGFiZWxlZD0ic3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vZWRnZS9taWdyYXRpb24vMTYiPgorICAgICAgICA8ZHVibGluQ29yZSBpZGVudGlmaWVyPSJzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9ZRS1TLUcxNjAwMDJfWUUtUy1HMTYwMDA1IiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vbGFiZWwiLz4KKyAgICAgICAgPGN1cnJlbnRWYWx1ZSB4c2k6dHlwZT0ib3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5lZGdlczpNaWdyYXRpb25FZGdlTGFiZWxWYWx1ZSIgbWlncmF0aW9uUmF0ZT0iMC4wNSIvPgorICAgICAgPC9sYWJlbD4KKyAgICA8L3ZhbHVlPgorICA8L2VkZ2VzPgorICA8ZWRnZXMga2V5PSJzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9lZGdlL21pZ3JhdGlvbi9yZWxhdGlvbnNoaXAvbWlncmF0aW9uLzE3Ij4KKyAgICA8dmFsdWUgeHNpOnR5cGU9Im9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuZWRnZXM6TWlncmF0aW9uRWRnZSIgdVJJPSJzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9lZGdlL21pZ3JhdGlvbi9yZWxhdGlvbnNoaXAvbWlncmF0aW9uLzE3IiB0eXBlVVJJPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vRWRnZSIgbm9kZUFVUkk9InN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL25vZGUvZ2VvL3JlZ2lvbi9ZRS1TLUcxNjAwMDUiIG5vZGVCVVJJPSJzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9ub2RlL2dlby9yZWdpb24vWUUtUy1HMTYwMDAyIiBkaXJlY3RlZD0idHJ1ZSI+CisgICAgICA8ZHVibGluQ29yZSB0aXRsZT0iTWlncmF0aW9uRWRnZVsoWUUtUy1HMTYwMDA1KSZsdDstLT4oWUUtUy1HMTYwMDAyKV0iIGlkZW50aWZpZXI9InN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL2VkZ2UvbWlncmF0aW9uL3JlbGF0aW9uc2hpcC9taWdyYXRpb24vMTciIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9FZGdlIi8+CisgICAgICA8bGFiZWwgeHNpOnR5cGU9Im9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuZWRnZXM6TWlncmF0aW9uRWRnZUxhYmVsIiB1Ukk9InN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL1lFLVMtRzE2MDAwNV9ZRS1TLUcxNjAwMDIiIHR5cGVVUkk9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9sYWJlbCIgdVJJT2ZJZGVudGlmaWFibGVUb0JlTGFiZWxlZD0ic3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vZWRnZS9taWdyYXRpb24vMTciPgorICAgICAgICA8ZHVibGluQ29yZSBpZGVudGlmaWVyPSJzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9ZRS1TLUcxNjAwMDVfWUUtUy1HMTYwMDAyIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vbGFiZWwiLz4KKyAgICAgICAgPGN1cnJlbnRWYWx1ZSB4c2k6dHlwZT0ib3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5lZGdlczpNaWdyYXRpb25FZGdlTGFiZWxWYWx1ZSIgbWlncmF0aW9uUmF0ZT0iMC4wNSIvPgorICAgICAgPC9sYWJlbD4KKyAgICA8L3ZhbHVlPgorICA8L2VkZ2VzPgorICA8ZWRnZXMga2V5PSJzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9lZGdlL21pZ3JhdGlvbi9yZWxhdGlvbnNoaXAvbWlncmF0aW9uLzE4Ij4KKyAgICA8dmFsdWUgeHNpOnR5cGU9Im9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuZWRnZXM6TWlncmF0aW9uRWRnZSIgdVJJPSJzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9lZGdlL21pZ3JhdGlvbi9yZWxhdGlvbnNoaXAvbWlncmF0aW9uLzE4IiB0eXBlVVJJPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vRWRnZSIgbm9kZUFVUkk9InN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL25vZGUvZ2VvL3JlZ2lvbi9ZRS1TLUcxNjAwMDEiIG5vZGVCVVJJPSJzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9ub2RlL2dlby9yZWdpb24vWUUtUy1HMTYwMDA2IiBkaXJlY3RlZD0idHJ1ZSI+CisgICAgICA8ZHVibGluQ29yZSB0aXRsZT0iTWlncmF0aW9uRWRnZVsoWUUtUy1HMTYwMDAxKSZsdDstLT4oWUUtUy1HMTYwMDA2KV0iIGlkZW50aWZpZXI9InN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL2VkZ2UvbWlncmF0aW9uL3JlbGF0aW9uc2hpcC9taWdyYXRpb24vMTgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9FZGdlIi8+CisgICAgICA8bGFiZWwgeHNpOnR5cGU9Im9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuZWRnZXM6TWlncmF0aW9uRWRnZUxhYmVsIiB1Ukk9InN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL1lFLVMtRzE2MDAwMV9ZRS1TLUcxNjAwMDYiIHR5cGVVUkk9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9sYWJlbCIgdVJJT2ZJZGVudGlmaWFibGVUb0JlTGFiZWxlZD0ic3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vZWRnZS9taWdyYXRpb24vMTgiPgorICAgICAgICA8ZHVibGluQ29yZSBpZGVudGlmaWVyPSJzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9ZRS1TLUcxNjAwMDFfWUUtUy1HMTYwMDA2IiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vbGFiZWwiLz4KKyAgICAgICAgPGN1cnJlbnRWYWx1ZSB4c2k6dHlwZT0ib3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5lZGdlczpNaWdyYXRpb25FZGdlTGFiZWxWYWx1ZSIgbWlncmF0aW9uUmF0ZT0iMC4wNSIvPgorICAgICAgPC9sYWJlbD4KKyAgICA8L3ZhbHVlPgorICA8L2VkZ2VzPgorICA8ZWRnZXMga2V5PSJzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9lZGdlL21pZ3JhdGlvbi9yZWxhdGlvbnNoaXAvbWlncmF0aW9uLzE5Ij4KKyAgICA8dmFsdWUgeHNpOnR5cGU9Im9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuZWRnZXM6TWlncmF0aW9uRWRnZSIgdVJJPSJzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9lZGdlL21pZ3JhdGlvbi9yZWxhdGlvbnNoaXAvbWlncmF0aW9uLzE5IiB0eXBlVVJJPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vRWRnZSIgbm9kZUFVUkk9InN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL25vZGUvZ2VvL3JlZ2lvbi9ZRS1TLUcxNjAwMDYiIG5vZGVCVVJJPSJzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9ub2RlL2dlby9yZWdpb24vWUUtUy1HMTYwMDAxIiBkaXJlY3RlZD0idHJ1ZSI+CisgICAgICA8ZHVibGluQ29yZSB0aXRsZT0iTWlncmF0aW9uRWRnZVsoWUUtUy1HMTYwMDA2KSZsdDstLT4oWUUtUy1HMTYwMDAxKV0iIGlkZW50aWZpZXI9InN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL2VkZ2UvbWlncmF0aW9uL3JlbGF0aW9uc2hpcC9taWdyYXRpb24vMTkiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9FZGdlIi8+CisgICAgICA8bGFiZWwgeHNpOnR5cGU9Im9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuZWRnZXM6TWlncmF0aW9uRWRnZUxhYmVsIiB1Ukk9InN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL1lFLVMtRzE2MDAwNl9ZRS1TLUcxNjAwMDEiIHR5cGVVUkk9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9sYWJlbCIgdVJJT2ZJZGVudGlmaWFibGVUb0JlTGFiZWxlZD0ic3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vZWRnZS9taWdyYXRpb24vMTkiPgorICAgICAgICA8ZHVibGluQ29yZSBpZGVudGlmaWVyPSJzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9ZRS1TLUcxNjAwMDZfWUUtUy1HMTYwMDAxIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vbGFiZWwiLz4KKyAgICAgICAgPGN1cnJlbnRWYWx1ZSB4c2k6dHlwZT0ib3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5lZGdlczpNaWdyYXRpb25FZGdlTGFiZWxWYWx1ZSIgbWlncmF0aW9uUmF0ZT0iMC4wNSIvPgorICAgICAgPC9sYWJlbD4KKyAgICA8L3ZhbHVlPgorICA8L2VkZ2VzPgorPC9vcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGg6R3JhcGg+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvZ3JhcGhzL1NpbmdsZVNxdWFyZUdyYXBoLmdyYXBoIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL2dyYXBocy9TaW5nbGVTcXVhcmVHcmFwaC5ncmFwaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMGUzMGRkCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL2dyYXBocy9TaW5nbGVTcXVhcmVHcmFwaC5ncmFwaApAQCAtMCwwICsxLDE3IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaDpHcmFwaCB4bWk6dmVyc2lvbj0iMi4wIiB4bWxuczp4bWk9Imh0dHA6Ly93d3cub21nLm9yZy9YTUkiIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIHhtbG5zOm9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHhtbG5zOm9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzPSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvbGFiZWxzLmVjb3JlIiB4bWxuczpvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLm5vZGVzPSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvbm9kZXMuZWNvcmUiIHVSST0icGxhdGZvcm06L3Jlc291cmNlL0Jhc2ljVGVzdHMvZ3JhcGhzL1NpbmdsZVNxdWFyZUdyYXBoLmdyYXBoIiB0eXBlVVJJPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiPgorICA8ZHVibGluQ29yZSBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcmVzb3VyY2UvQmFzaWNUZXN0cy9ncmFwaHMvU2luZ2xlU3F1YXJlR3JhcGguZ3JhcGgiIGNyZWF0b3I9ImVkbHVuZCIgZGF0ZT0iMjAxMS0wMS0yNCIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJHZW5lcmF0ZWQiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgY3JlYXRlZD0iMjAxMS0wMS0yNCIvPgorICA8bm9kZXMga2V5PSJzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9ub2RlLzU0RDVFRUEzRjVDQkUzL0xBVF9TUVJfMF8wIj4KKyAgICA8dmFsdWUgeHNpOnR5cGU9Im9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubm9kZXM6UmVnaW9uIiB1Ukk9InN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL25vZGUvNTRENUVFQTNGNUNCRTMvTEFUX1NRUl8wXzAiIHR5cGVVUkk9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9Ob2RlIj4KKyAgICAgIDxkdWJsaW5Db3JlIHRpdGxlPSJOb2RlWzAuMCwgMC4wXSIgaWRlbnRpZmllcj0ic3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vbm9kZS81NEQ1RUVBM0Y1Q0JFMy9MQVRfU1FSXzBfMCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL05vZGUiIHNwYXRpYWw9InN0ZW1zcGF0aWFsOmlubGluZTovLy8tMC4yLDAuMiwwLjIsMC4yLDAuMiwtMC4yLC0wLjIsLTAuMiIvPgorICAgICAgPGxhYmVscyB4c2k6dHlwZT0ib3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHM6QXJlYUxhYmVsIiBocmVmPSJwbGF0Zm9ybTovcmVzb3VyY2UvQmFzaWNUZXN0cy9ncmFwaHMvU2luZ2xlU3F1YXJlR3JhcGguZ3JhcGgjLy9Abm9kZUxhYmVscy4wL0B2YWx1ZSIvPgorICAgIDwvdmFsdWU+CisgIDwvbm9kZXM+CisgIDxub2RlTGFiZWxzIGtleT0ic3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vbGFiZWwvOTM0RjExQjMzNDJGMTEwMyI+CisgICAgPHZhbHVlIHhzaTp0eXBlPSJvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVsczpBcmVhTGFiZWwiIHVSST0ic3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vbGFiZWwvOTM0RjExQjMzNDJGMTEwMyIgdHlwZVVSST0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL2xhYmVsIj4KKyAgICAgIDxkdWJsaW5Db3JlIGlkZW50aWZpZXI9InN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL2xhYmVsLzkzNEYxMUIzMzQyRjExMDMiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9sYWJlbCIvPgorICAgICAgPGN1cnJlbnRWYWx1ZSB4c2k6dHlwZT0ib3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHM6QXJlYUxhYmVsVmFsdWUiIGFyZWE9IjIwMjUuMCIgYXZlcmFnZUV4dGVudD0iNDUuMCIvPgorICAgICAgPG5vZGUgaHJlZj0iIy8vQG5vZGVzLjAvQHZhbHVlIi8+CisgICAgPC92YWx1ZT4KKyAgPC9ub2RlTGFiZWxzPgorPC9vcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGg6R3JhcGg+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvZ3JhcGhzL1R3b1NxdWFyZXNNaWdyYXRpb25FZGdlcy5ncmFwaCBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9ncmFwaHMvVHdvU3F1YXJlc01pZ3JhdGlvbkVkZ2VzLmdyYXBoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZkYTNjMTgKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvZ3JhcGhzL1R3b1NxdWFyZXNNaWdyYXRpb25FZGdlcy5ncmFwaApAQCAtMCwwICsxLDIyIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaDpHcmFwaCB4bWk6dmVyc2lvbj0iMi4wIiB4bWxuczp4bWk9Imh0dHA6Ly93d3cub21nLm9yZy9YTUkiIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIHhtbG5zOm9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHhtbG5zOm9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuZWRnZXM9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy9lZGdlcy5lY29yZSIgdVJJPSJwbGF0Zm9ybTovcmVzb3VyY2UvQmFzaWNUZXN0cy9ncmFwaHMvVHdvU3F1YXJlc01pZ3JhdGlvbkVkZ2VzLmdyYXBoIiB0eXBlVVJJPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiPgorICA8ZHVibGluQ29yZSBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcmVzb3VyY2UvQmFzaWNUZXN0cy9ncmFwaHMvVHdvU3F1YXJlc01pZ3JhdGlvbkVkZ2VzLmdyYXBoIiBjcmVhdG9yPSJlZGx1bmQiIGRhdGU9IjIwMTEtMDEtMjQiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iR2VuZXJhdGVkIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIGNyZWF0ZWQ9IjIwMTEtMDEtMjQiLz4KKyAgPGVkZ2VzIGtleT0ic3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vZWRnZS9taWdyYXRpb24vcmVsYXRpb25zaGlwL21pZ3JhdGlvbi8wIj4KKyAgICA8dmFsdWUgeHNpOnR5cGU9Im9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuZWRnZXM6TWlncmF0aW9uRWRnZSIgdVJJPSJzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9lZGdlL21pZ3JhdGlvbi9yZWxhdGlvbnNoaXAvbWlncmF0aW9uLzAiIHR5cGVVUkk9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9FZGdlIiBub2RlQVVSST0ic3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vbm9kZS80NDk1MzY1QTAyMzI4QjE2L0xBVF9TUVJfMF8wIiBub2RlQlVSST0ic3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vbm9kZS80NDk1MzY1QTAyMzI4QjE2L0xBVF9TUVJfMV8wIiBkaXJlY3RlZD0idHJ1ZSI+CisgICAgICA8ZHVibGluQ29yZSB0aXRsZT0iTWlncmF0aW9uRWRnZVsoTEFUX1NRUl8wXzApJmx0Oy0tPihMQVRfU1FSXzFfMCldIiBpZGVudGlmaWVyPSJzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9lZGdlL21pZ3JhdGlvbi9yZWxhdGlvbnNoaXAvbWlncmF0aW9uLzAiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9FZGdlIi8+CisgICAgICA8bGFiZWwgeHNpOnR5cGU9Im9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuZWRnZXM6TWlncmF0aW9uRWRnZUxhYmVsIiB1Ukk9InN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL0xBVC5TUVIuMC4wX0xBVC5TUVIuMS4wIiB0eXBlVVJJPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vbGFiZWwiIHVSSU9mSWRlbnRpZmlhYmxlVG9CZUxhYmVsZWQ9InN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL2VkZ2UvbWlncmF0aW9uLzAiPgorICAgICAgICA8ZHVibGluQ29yZSBpZGVudGlmaWVyPSJzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9MQVQuU1FSLjAuMF9MQVQuU1FSLjEuMCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL2xhYmVsIi8+CisgICAgICAgIDxjdXJyZW50VmFsdWUgeHNpOnR5cGU9Im9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuZWRnZXM6TWlncmF0aW9uRWRnZUxhYmVsVmFsdWUiIG1pZ3JhdGlvblJhdGU9IjAuMSIvPgorICAgICAgPC9sYWJlbD4KKyAgICA8L3ZhbHVlPgorICA8L2VkZ2VzPgorICA8ZWRnZXMga2V5PSJzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9lZGdlL21pZ3JhdGlvbi9yZWxhdGlvbnNoaXAvbWlncmF0aW9uLzEiPgorICAgIDx2YWx1ZSB4c2k6dHlwZT0ib3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5lZGdlczpNaWdyYXRpb25FZGdlIiB1Ukk9InN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL2VkZ2UvbWlncmF0aW9uL3JlbGF0aW9uc2hpcC9taWdyYXRpb24vMSIgdHlwZVVSST0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0VkZ2UiIG5vZGVBVVJJPSJzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9ub2RlLzQ0OTUzNjVBMDIzMjhCMTYvTEFUX1NRUl8xXzAiIG5vZGVCVVJJPSJzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9ub2RlLzQ0OTUzNjVBMDIzMjhCMTYvTEFUX1NRUl8wXzAiIGRpcmVjdGVkPSJ0cnVlIj4KKyAgICAgIDxkdWJsaW5Db3JlIHRpdGxlPSJNaWdyYXRpb25FZGdlWyhMQVRfU1FSXzFfMCkmbHQ7LS0+KExBVF9TUVJfMF8wKV0iIGlkZW50aWZpZXI9InN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL2VkZ2UvbWlncmF0aW9uL3JlbGF0aW9uc2hpcC9taWdyYXRpb24vMSIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0VkZ2UiLz4KKyAgICAgIDxsYWJlbCB4c2k6dHlwZT0ib3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5lZGdlczpNaWdyYXRpb25FZGdlTGFiZWwiIHVSST0ic3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vTEFULlNRUi4xLjBfTEFULlNRUi4wLjAiIHR5cGVVUkk9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9sYWJlbCIgdVJJT2ZJZGVudGlmaWFibGVUb0JlTGFiZWxlZD0ic3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vZWRnZS9taWdyYXRpb24vMSI+CisgICAgICAgIDxkdWJsaW5Db3JlIGlkZW50aWZpZXI9InN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL0xBVC5TUVIuMS4wX0xBVC5TUVIuMC4wIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vbGFiZWwiLz4KKyAgICAgICAgPGN1cnJlbnRWYWx1ZSB4c2k6dHlwZT0ib3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5lZGdlczpNaWdyYXRpb25FZGdlTGFiZWxWYWx1ZSIgbWlncmF0aW9uUmF0ZT0iMC4xIi8+CisgICAgICA8L2xhYmVsPgorICAgIDwvdmFsdWU+CisgIDwvZWRnZXM+Cis8L29yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaDpHcmFwaD4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9ncmFwaHMvVHdvU3F1YXJlc1dpdGhNaXhpbmcuZ3JhcGggYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvZ3JhcGhzL1R3b1NxdWFyZXNXaXRoTWl4aW5nLmdyYXBoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUyZmJmNWEKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvZ3JhcGhzL1R3b1NxdWFyZXNXaXRoTWl4aW5nLmdyYXBoCkBAIC0wLDAgKzEsMzkgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8b3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoOkdyYXBoIHhtaTp2ZXJzaW9uPSIyLjAiIHhtbG5zOnhtaT0iaHR0cDovL3d3dy5vbWcub3JnL1hNSSIgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIgeG1sbnM6b3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoPSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgeG1sbnM6b3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHM9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy9sYWJlbHMuZWNvcmUiIHhtbG5zOm9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubm9kZXM9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy9ub2Rlcy5lY29yZSIgdVJJPSJwbGF0Zm9ybTovcmVzb3VyY2UvQmFzaWNUZXN0cy9ncmFwaHMvVHdvU3F1YXJlc1dpdGhNaXhpbmcuZ3JhcGgiIHR5cGVVUkk9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCI+CisgIDxkdWJsaW5Db3JlIGlkZW50aWZpZXI9InBsYXRmb3JtOi9yZXNvdXJjZS9CYXNpY1Rlc3RzL2dyYXBocy9Ud29TcXVhcmVzV2l0aE1peGluZy5ncmFwaCIgY3JlYXRvcj0iZWRsdW5kIiBkYXRlPSIyMDExLTAxLTI0IiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9IkdlbmVyYXRlZCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiBjcmVhdGVkPSIyMDExLTAxLTI0Ii8+CisgIDxlZGdlcyBrZXk9InN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL2VkZ2UvcmVsYXRpb25zaGlwL2NvbW1vbmJvcmRlci84QkMxNjA0MUZBRjcwRjFEIj4KKyAgICA8dmFsdWUgdVJJPSJzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9lZGdlL3JlbGF0aW9uc2hpcC9jb21tb25ib3JkZXIvOEJDMTYwNDFGQUY3MEYxRCIgdHlwZVVSST0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0VkZ2UiIG5vZGVBVVJJPSJzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9ub2RlLzQ0OTUzNjVBMDIzMjhCMTYvTEFUX1NRUl8wXzAiIG5vZGVCVVJJPSJzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9ub2RlLzQ0OTUzNjVBMDIzMjhCMTYvTEFUX1NRUl8xXzAiPgorICAgICAgPGR1YmxpbkNvcmUgdGl0bGU9IkVkZ2VbKE5vZGVbMC4wLCAwLjBdKSZsdDstLT4oTm9kZVsxLjAsIDAuMF0pXSIgaWRlbnRpZmllcj0ic3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vZWRnZS9yZWxhdGlvbnNoaXAvY29tbW9uYm9yZGVyLzhCQzE2MDQxRkFGNzBGMUQiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9FZGdlIi8+CisgICAgICA8bGFiZWwgeHNpOnR5cGU9Im9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzOkNvbW1vbkJvcmRlclJlbGF0aW9uc2hpcExhYmVsIiB1Ukk9InN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL0xBVC5TUVIuMC4wX0xBVC5TUVIuMS4wIiB0eXBlVVJJPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vbGFiZWwiIHVSSU9mSWRlbnRpZmlhYmxlVG9CZUxhYmVsZWQ9InN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL2VkZ2UvOEJDMTYwNDFGQUY3MEYxRCI+CisgICAgICAgIDxkdWJsaW5Db3JlIGlkZW50aWZpZXI9InN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL0xBVC5TUVIuMC4wX0xBVC5TUVIuMS4wIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vbGFiZWwiLz4KKyAgICAgICAgPGN1cnJlbnRWYWx1ZSB4c2k6dHlwZT0ib3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHM6Q29tbW9uQm9yZGVyUmVsYXRpb25zaGlwTGFiZWxWYWx1ZSIgYm9yZGVyTGVuZ3RoPSI0NS4wIi8+CisgICAgICA8L2xhYmVsPgorICAgIDwvdmFsdWU+CisgIDwvZWRnZXM+CisgIDxub2RlcyBrZXk9InN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL25vZGUvNDQ5NTM2NUEwMjMyOEIxNi9MQVRfU1FSXzBfMCI+CisgICAgPHZhbHVlIHhzaTp0eXBlPSJvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLm5vZGVzOlJlZ2lvbiIgdVJJPSJzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9ub2RlLzQ0OTUzNjVBMDIzMjhCMTYvTEFUX1NRUl8wXzAiIHR5cGVVUkk9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9Ob2RlIj4KKyAgICAgIDxkdWJsaW5Db3JlIHRpdGxlPSJOb2RlWzAuMCwgMC4wXSIgaWRlbnRpZmllcj0ic3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vbm9kZS80NDk1MzY1QTAyMzI4QjE2L0xBVF9TUVJfMF8wIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vTm9kZSIgc3BhdGlhbD0ic3RlbXNwYXRpYWw6aW5saW5lOi8vLy0wLjIsMC4yLDAuMiwwLjIsMC4yLC0wLjIsLTAuMiwtMC4yIi8+CisgICAgICA8bGFiZWxzIHhzaTp0eXBlPSJvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVsczpBcmVhTGFiZWwiIGhyZWY9InBsYXRmb3JtOi9yZXNvdXJjZS9CYXNpY1Rlc3RzL2dyYXBocy9Ud29TcXVhcmVzV2l0aE1peGluZy5ncmFwaCMvL0Bub2RlTGFiZWxzLjAvQHZhbHVlIi8+CisgICAgPC92YWx1ZT4KKyAgPC9ub2Rlcz4KKyAgPG5vZGVzIGtleT0ic3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vbm9kZS80NDk1MzY1QTAyMzI4QjE2L0xBVF9TUVJfMV8wIj4KKyAgICA8dmFsdWUgeHNpOnR5cGU9Im9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubm9kZXM6UmVnaW9uIiB1Ukk9InN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL25vZGUvNDQ5NTM2NUEwMjMyOEIxNi9MQVRfU1FSXzFfMCIgdHlwZVVSST0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL05vZGUiPgorICAgICAgPGR1YmxpbkNvcmUgdGl0bGU9Ik5vZGVbMS4wLCAwLjBdIiBpZGVudGlmaWVyPSJzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9ub2RlLzQ0OTUzNjVBMDIzMjhCMTYvTEFUX1NRUl8xXzAiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9Ob2RlIiBzcGF0aWFsPSJzdGVtc3BhdGlhbDppbmxpbmU6Ly8vMC4yLDAuMiwwLjYsMC4yLDAuNiwtMC4yLDAuMiwtMC4yIi8+CisgICAgICA8bGFiZWxzIHhzaTp0eXBlPSJvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVsczpBcmVhTGFiZWwiIGhyZWY9InBsYXRmb3JtOi9yZXNvdXJjZS9CYXNpY1Rlc3RzL2dyYXBocy9Ud29TcXVhcmVzV2l0aE1peGluZy5ncmFwaCMvL0Bub2RlTGFiZWxzLjEvQHZhbHVlIi8+CisgICAgPC92YWx1ZT4KKyAgPC9ub2Rlcz4KKyAgPG5vZGVMYWJlbHMga2V5PSJzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9sYWJlbC9GRjAwQUI1MzFEMTZGRTczIj4KKyAgICA8dmFsdWUgeHNpOnR5cGU9Im9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzOkFyZWFMYWJlbCIgdVJJPSJzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9sYWJlbC9GRjAwQUI1MzFEMTZGRTczIiB0eXBlVVJJPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vbGFiZWwiPgorICAgICAgPGR1YmxpbkNvcmUgaWRlbnRpZmllcj0ic3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vbGFiZWwvRkYwMEFCNTMxRDE2RkU3MyIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL2xhYmVsIi8+CisgICAgICA8Y3VycmVudFZhbHVlIHhzaTp0eXBlPSJvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVsczpBcmVhTGFiZWxWYWx1ZSIgYXJlYT0iMjAyNS4wIiBhdmVyYWdlRXh0ZW50PSI0NS4wIi8+CisgICAgICA8bm9kZSBocmVmPSIjLy9Abm9kZXMuMC9AdmFsdWUiLz4KKyAgICA8L3ZhbHVlPgorICA8L25vZGVMYWJlbHM+CisgIDxub2RlTGFiZWxzIGtleT0ic3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vbGFiZWwvMzdFRjJDQjIxNTZEMjBDNSI+CisgICAgPHZhbHVlIHhzaTp0eXBlPSJvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVsczpBcmVhTGFiZWwiIHVSST0ic3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vbGFiZWwvMzdFRjJDQjIxNTZEMjBDNSIgdHlwZVVSST0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL2xhYmVsIj4KKyAgICAgIDxkdWJsaW5Db3JlIGlkZW50aWZpZXI9InN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL2xhYmVsLzM3RUYyQ0IyMTU2RDIwQzUiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9sYWJlbCIvPgorICAgICAgPGN1cnJlbnRWYWx1ZSB4c2k6dHlwZT0ib3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHM6QXJlYUxhYmVsVmFsdWUiIGFyZWE9IjIwMjUuMCIgYXZlcmFnZUV4dGVudD0iNDUuMCIvPgorICAgICAgPG5vZGUgaHJlZj0iIy8vQG5vZGVzLjEvQHZhbHVlIi8+CisgICAgPC92YWx1ZT4KKyAgPC9ub2RlTGFiZWxzPgorPC9vcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGg6R3JhcGg+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvbW9kZWxzL0FpclRyYW5zcG9ydFNFSVJNb2RlbC5tb2RlbCBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9tb2RlbHMvQWlyVHJhbnNwb3J0U0VJUk1vZGVsLm1vZGVsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRkZTFkNGIKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvbW9kZWxzL0FpclRyYW5zcG9ydFNFSVJNb2RlbC5tb2RlbApAQCAtMCwwICsxLDggQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8b3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsOk1vZGVsIHhtaTp2ZXJzaW9uPSIyLjAiIHhtbG5zOnhtaT0iaHR0cDovL3d3dy5vbWcub3JnL1hNSSIgeG1sbnM6b3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsPSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9tb2RlbC5lY29yZSIgdVJJPSJwbGF0Zm9ybTovcmVzb3VyY2UvQmFzaWNUZXN0cy9tb2RlbHMvQWlyVHJhbnNwb3J0U0VJUk1vZGVsLm1vZGVsIiB0eXBlVVJJPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vTW9kZWwiPgorICA8ZHVibGluQ29yZSBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcmVzb3VyY2UvQmFzaWNUZXN0cy9tb2RlbHMvQWlyVHJhbnNwb3J0U0VJUk1vZGVsLm1vZGVsIiBjcmVhdG9yPSJlZGx1bmQiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvbW9kZWwuZWNvcmUiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9Nb2RlbCIgY3JlYXRlZD0iMjAxMS0wMS0yNSIvPgorICA8bW9kZWxzIGhyZWY9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS5wb3B1bGF0aW9uLmh1bWFuLm1vZGVscy9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L1BITC9QSExfMF8xXzJfcG9wdWxhdGlvbi5tb2RlbCMvIi8+CisgIDxncmFwaHMgaHJlZj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5LmluZnJhc3RydWN0dXJlLnRyYW5zcG9ydGF0aW9uL3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9haXIvUEhMXzBfUEhMXzEuZ3JhcGgjLyIvPgorICA8Z3JhcGhzIGhyZWY9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS5pbmZyYXN0cnVjdHVyZS50cmFuc3BvcnRhdGlvbi9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvYWlyL1BITF8xX1BITF8yLmdyYXBoIy8iLz4KKyAgPG5vZGVEZWNvcmF0b3JzIGhyZWY9InBsYXRmb3JtOi9yZXNvdXJjZS9CYXNpY1Rlc3RzL2RlY29yYXRvcnMvUGhpbGlwcGluZXNTRUlSLnN0YW5kYXJkIy8iLz4KKzwvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsOk1vZGVsPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL21vZGVscy9BaXJUcmFuc3BvcnRTRUlSU3RhdGVzT25seS5tb2RlbCBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9tb2RlbHMvQWlyVHJhbnNwb3J0U0VJUlN0YXRlc09ubHkubW9kZWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWI2NjVmMQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9tb2RlbHMvQWlyVHJhbnNwb3J0U0VJUlN0YXRlc09ubHkubW9kZWwKQEAgLTAsMCArMSw2IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbDpNb2RlbCB4bWk6dmVyc2lvbj0iMi4wIiB4bWxuczp4bWk9Imh0dHA6Ly93d3cub21nLm9yZy9YTUkiIHhtbG5zOm9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvbW9kZWwuZWNvcmUiIHVSST0icGxhdGZvcm06L3Jlc291cmNlL0Jhc2ljVGVzdHMvbW9kZWxzL0FpclRyYW5zcG9ydFNFSVJTdGF0ZXNPbmx5Lm1vZGVsIiB0eXBlVVJJPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vTW9kZWwiPgorICA8ZHVibGluQ29yZSBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcmVzb3VyY2UvQmFzaWNUZXN0cy9tb2RlbHMvQWlyVHJhbnNwb3J0U0VJUlN0YXRlc09ubHkubW9kZWwiIGNyZWF0b3I9ImVkbHVuZCIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9tb2RlbC5lY29yZSIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL01vZGVsIiBjcmVhdGVkPSIyMDExLTAyLTA0Ii8+CisgIDxtb2RlbHMgaHJlZj0icGxhdGZvcm06L3Jlc291cmNlL0Jhc2ljVGVzdHMvbW9kZWxzL0FpclRyYW5zcG9ydFN0YXRlc09ubHkubW9kZWwjLyIvPgorICA8bm9kZURlY29yYXRvcnMgaHJlZj0icGxhdGZvcm06L3Jlc291cmNlL0Jhc2ljVGVzdHMvZGVjb3JhdG9ycy9TRUlSNC5zdGFuZGFyZCMvIi8+Cis8L29yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbDpNb2RlbD4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9tb2RlbHMvQWlyVHJhbnNwb3J0U0lSU3RhdGVzT25seS5tb2RlbCBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9tb2RlbHMvQWlyVHJhbnNwb3J0U0lSU3RhdGVzT25seS5tb2RlbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44M2Q0OWI1Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL21vZGVscy9BaXJUcmFuc3BvcnRTSVJTdGF0ZXNPbmx5Lm1vZGVsCkBAIC0wLDAgKzEsNiBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWw6TW9kZWwgeG1pOnZlcnNpb249IjIuMCIgeG1sbnM6eG1pPSJodHRwOi8vd3d3Lm9tZy5vcmcvWE1JIiB4bWxuczpvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWw9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL21vZGVsLmVjb3JlIiB1Ukk9InBsYXRmb3JtOi9yZXNvdXJjZS9CYXNpY1Rlc3RzL21vZGVscy9BaXJUcmFuc3BvcnRTSVJTdGF0ZXNPbmx5Lm1vZGVsIiB0eXBlVVJJPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vTW9kZWwiPgorICA8ZHVibGluQ29yZSBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcmVzb3VyY2UvQmFzaWNUZXN0cy9tb2RlbHMvQWlyVHJhbnNwb3J0U0lSU3RhdGVzT25seS5tb2RlbCIgY3JlYXRvcj0iZWRsdW5kIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL21vZGVsLmVjb3JlIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vTW9kZWwiIGNyZWF0ZWQ9IjIwMTEtMDItMDciLz4KKyAgPG1vZGVscyBocmVmPSJwbGF0Zm9ybTovcmVzb3VyY2UvQmFzaWNUZXN0cy9tb2RlbHMvQWlyVHJhbnNwb3J0U3RhdGVzT25seS5tb2RlbCMvIi8+CisgIDxub2RlRGVjb3JhdG9ycyBocmVmPSJwbGF0Zm9ybTovcmVzb3VyY2UvQmFzaWNUZXN0cy9kZWNvcmF0b3JzL1NJUjIuc3RhbmRhcmQjLyIvPgorPC9vcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWw6TW9kZWw+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvbW9kZWxzL0FpclRyYW5zcG9ydFNJU3RhdGVzT25seS5tb2RlbCBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9tb2RlbHMvQWlyVHJhbnNwb3J0U0lTdGF0ZXNPbmx5Lm1vZGVsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFhOGRkYzEKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvbW9kZWxzL0FpclRyYW5zcG9ydFNJU3RhdGVzT25seS5tb2RlbApAQCAtMCwwICsxLDYgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8b3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsOk1vZGVsIHhtaTp2ZXJzaW9uPSIyLjAiIHhtbG5zOnhtaT0iaHR0cDovL3d3dy5vbWcub3JnL1hNSSIgeG1sbnM6b3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsPSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9tb2RlbC5lY29yZSIgdVJJPSJwbGF0Zm9ybTovcmVzb3VyY2UvQmFzaWNUZXN0cy9tb2RlbHMvQWlyVHJhbnNwb3J0U0lTdGF0ZXNPbmx5Lm1vZGVsIiB0eXBlVVJJPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vTW9kZWwiPgorICA8ZHVibGluQ29yZSBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcmVzb3VyY2UvQmFzaWNUZXN0cy9tb2RlbHMvQWlyVHJhbnNwb3J0U0lTdGF0ZXNPbmx5Lm1vZGVsIiBjcmVhdG9yPSJlZGx1bmQiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvbW9kZWwuZWNvcmUiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9Nb2RlbCIgY3JlYXRlZD0iMjAxMS0wMi0wNyIvPgorICA8bW9kZWxzIGhyZWY9InBsYXRmb3JtOi9yZXNvdXJjZS9CYXNpY1Rlc3RzL21vZGVscy9BaXJUcmFuc3BvcnRTdGF0ZXNPbmx5Lm1vZGVsIy8iLz4KKyAgPG5vZGVEZWNvcmF0b3JzIGhyZWY9InBsYXRmb3JtOi9yZXNvdXJjZS9CYXNpY1Rlc3RzL2RlY29yYXRvcnMvU0kyLnN0YW5kYXJkIy8iLz4KKzwvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsOk1vZGVsPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL21vZGVscy9BaXJUcmFuc3BvcnRTdGF0ZXNPbmx5Lm1vZGVsIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL21vZGVscy9BaXJUcmFuc3BvcnRTdGF0ZXNPbmx5Lm1vZGVsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZkY2FlNTgKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvbW9kZWxzL0FpclRyYW5zcG9ydFN0YXRlc09ubHkubW9kZWwKQEAgLTAsMCArMSw2IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbDpNb2RlbCB4bWk6dmVyc2lvbj0iMi4wIiB4bWxuczp4bWk9Imh0dHA6Ly93d3cub21nLm9yZy9YTUkiIHhtbG5zOm9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvbW9kZWwuZWNvcmUiIHVSST0icGxhdGZvcm06L3Jlc291cmNlL0Jhc2ljVGVzdHMvbW9kZWxzL0FpclRyYW5zcG9ydFN0YXRlc09ubHkubW9kZWwiIHR5cGVVUkk9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9Nb2RlbCI+CisgIDxkdWJsaW5Db3JlIGlkZW50aWZpZXI9InBsYXRmb3JtOi9yZXNvdXJjZS9CYXNpY1Rlc3RzL21vZGVscy9BaXJUcmFuc3BvcnRTdGF0ZXNPbmx5Lm1vZGVsIiBjcmVhdG9yPSJlZGx1bmQiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvbW9kZWwuZWNvcmUiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9Nb2RlbCIgY3JlYXRlZD0iMjAxMS0wMi0wNCIvPgorICA8bW9kZWxzIGhyZWY9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS5wb3B1bGF0aW9uLmh1bWFuLm1vZGVscy9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L1VTQS9VU0FfMF8xX3BvcHVsYXRpb24ubW9kZWwjLyIvPgorICA8Z3JhcGhzIGhyZWY9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS5pbmZyYXN0cnVjdHVyZS50cmFuc3BvcnRhdGlvbi9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvYWlyL1VTQV8wX1VTQV8xLmdyYXBoIy8iLz4KKzwvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsOk1vZGVsPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL21vZGVscy9FZ3lwdEFnaW5nRGlzZWFzZU1vZGVsLm1vZGVsIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL21vZGVscy9FZ3lwdEFnaW5nRGlzZWFzZU1vZGVsLm1vZGVsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg5MTQ2MGEKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvbW9kZWxzL0VneXB0QWdpbmdEaXNlYXNlTW9kZWwubW9kZWwKQEAgLTAsMCArMSw3IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/Pg0KKzxvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWw6TW9kZWwgeG1pOnZlcnNpb249IjIuMCIgeG1sbnM6eG1pPSJodHRwOi8vd3d3Lm9tZy5vcmcvWE1JIiB4bWxuczpvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWw9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL21vZGVsLmVjb3JlIiB1Ukk9InBsYXRmb3JtOi9yZXNvdXJjZS9CYXNpY1Rlc3RzL21vZGVscy9FZ3lwdEFnaW5nRGlzZWFzZU1vZGVsLm1vZGVsIiB0eXBlVVJJPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vTW9kZWwiPg0KKyAgPGR1YmxpbkNvcmUgaWRlbnRpZmllcj0icGxhdGZvcm06L3Jlc291cmNlL0Jhc2ljVGVzdHMvbW9kZWxzL0VneXB0QWdpbmdEaXNlYXNlTW9kZWwubW9kZWwiIGNyZWF0b3I9ImxvYW5lcjI1IiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL21vZGVsLmVjb3JlIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vTW9kZWwiIGNyZWF0ZWQ9IjIwMTEtMDUtMjYiLz4NCisgIDxtb2RlbHMgaHJlZj0icGxhdGZvcm06L3Jlc291cmNlL0Jhc2ljVGVzdHMvbW9kZWxzL0VxeXB0TW9kZWwubW9kZWwjLyIvPg0KKyAgPG5vZGVEZWNvcmF0b3JzIGhyZWY9InBsYXRmb3JtOi9yZXNvdXJjZS9CYXNpY1Rlc3RzL2RlY29yYXRvcnMvQWdpbmdNb2RlbC5zdGFuZGFyZCMvIi8+DQorICA8bm9kZURlY29yYXRvcnMgaHJlZj0icGxhdGZvcm06L3Jlc291cmNlL0Jhc2ljVGVzdHMvZGVjb3JhdG9ycy9BZ2luZ1NFSVJEaXNlYXNlLnN0YW5kYXJkIy8iLz4NCis8L29yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbDpNb2RlbD4NCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvbW9kZWxzL0VneXB0QWdpbmdNb2RlbC5tb2RlbCBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9tb2RlbHMvRWd5cHRBZ2luZ01vZGVsLm1vZGVsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU4MTBhN2QKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvbW9kZWxzL0VneXB0QWdpbmdNb2RlbC5tb2RlbApAQCAtMCwwICsxLDcgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+DQorPG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbDpNb2RlbCB4bWk6dmVyc2lvbj0iMi4wIiB4bWxuczp4bWk9Imh0dHA6Ly93d3cub21nLm9yZy9YTUkiIHhtbG5zOm9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvbW9kZWwuZWNvcmUiIHVSST0icGxhdGZvcm06L3Jlc291cmNlL0Jhc2ljVGVzdHMvbW9kZWxzL0VneXB0QWdpbmdNb2RlbC5tb2RlbCIgdHlwZVVSST0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL01vZGVsIj4NCisgIDxkdWJsaW5Db3JlIGlkZW50aWZpZXI9InBsYXRmb3JtOi9yZXNvdXJjZS9CYXNpY1Rlc3RzL21vZGVscy9FZ3lwdEFnaW5nTW9kZWwubW9kZWwiIGNyZWF0b3I9ImxvYW5lcjI1IiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL21vZGVsLmVjb3JlIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vTW9kZWwiIGNyZWF0ZWQ9IjIwMTEtMDUtMjYiLz4NCisgIDxtb2RlbHMgaHJlZj0icGxhdGZvcm06L3Jlc291cmNlL0Jhc2ljVGVzdHMvbW9kZWxzL0VxeXB0TW9kZWwubW9kZWwjLyIvPg0KKyAgPG5vZGVEZWNvcmF0b3JzIGhyZWY9InBsYXRmb3JtOi9yZXNvdXJjZS9CYXNpY1Rlc3RzL2RlY29yYXRvcnMvQWdpbmdNb2RlbC5zdGFuZGFyZCMvIi8+DQorICA8bm9kZURlY29yYXRvcnMgaHJlZj0icGxhdGZvcm06L3Jlc291cmNlL0Jhc2ljVGVzdHMvZGVjb3JhdG9ycy9Ob0Rpc2Vhc2Uuc3RhbmRhcmQjLyIvPg0KKzwvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsOk1vZGVsPg0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9tb2RlbHMvRWd5cHREZW1vZ3JhcGhpY0Rpc2Vhc2VNb2RlbC5tb2RlbCBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9tb2RlbHMvRWd5cHREZW1vZ3JhcGhpY0Rpc2Vhc2VNb2RlbC5tb2RlbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MjA4YWI5Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL21vZGVscy9FZ3lwdERlbW9ncmFwaGljRGlzZWFzZU1vZGVsLm1vZGVsCkBAIC0wLDAgKzEsNiBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWw6TW9kZWwgeG1pOnZlcnNpb249IjIuMCIgeG1sbnM6eG1pPSJodHRwOi8vd3d3Lm9tZy5vcmcvWE1JIiB4bWxuczpvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWw9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL21vZGVsLmVjb3JlIiB1Ukk9InBsYXRmb3JtOi9yZXNvdXJjZS9CYXNpY1Rlc3RzL21vZGVscy9FZ3lwdERlbW9ncmFwaGljRGlzZWFzZU1vZGVsLm1vZGVsIiB0eXBlVVJJPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vTW9kZWwiPgorICA8ZHVibGluQ29yZSBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcmVzb3VyY2UvQmFzaWNUZXN0cy9tb2RlbHMvRWd5cHREZW1vZ3JhcGhpY0Rpc2Vhc2VNb2RlbC5tb2RlbCIgY3JlYXRvcj0iZWRsdW5kIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL21vZGVsLmVjb3JlIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vTW9kZWwiIGNyZWF0ZWQ9IjIwMTEtMDUtMTEiLz4KKyAgPG1vZGVscyBocmVmPSJwbGF0Zm9ybTovcmVzb3VyY2UvQmFzaWNUZXN0cy9tb2RlbHMvRWd5cHREZW1vZ3JhcGhpY01vZGVsLm1vZGVsIy8iLz4KKyAgPG5vZGVEZWNvcmF0b3JzIGhyZWY9InBsYXRmb3JtOi9yZXNvdXJjZS9CYXNpY1Rlc3RzL2RlY29yYXRvcnMvRGVtb2dyYXBoaWNTRUlSRGlzZWFzZS5zdGFuZGFyZCMvIi8+Cis8L29yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbDpNb2RlbD4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9tb2RlbHMvRWd5cHREZW1vZ3JhcGhpY01vZGVsLm1vZGVsIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL21vZGVscy9FZ3lwdERlbW9ncmFwaGljTW9kZWwubW9kZWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzM4MWRkZAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9tb2RlbHMvRWd5cHREZW1vZ3JhcGhpY01vZGVsLm1vZGVsCkBAIC0wLDAgKzEsNiBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWw6TW9kZWwgeG1pOnZlcnNpb249IjIuMCIgeG1sbnM6eG1pPSJodHRwOi8vd3d3Lm9tZy5vcmcvWE1JIiB4bWxuczpvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWw9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL21vZGVsLmVjb3JlIiB1Ukk9InBsYXRmb3JtOi9yZXNvdXJjZS9CYXNpY1Rlc3RzL21vZGVscy9FZ3lwdERlbW9ncmFwaGljTW9kZWwubW9kZWwiIHR5cGVVUkk9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9Nb2RlbCI+CisgIDxkdWJsaW5Db3JlIGlkZW50aWZpZXI9InBsYXRmb3JtOi9yZXNvdXJjZS9CYXNpY1Rlc3RzL21vZGVscy9FZ3lwdERlbW9ncmFwaGljTW9kZWwubW9kZWwiIGNyZWF0b3I9ImVkbHVuZCIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9tb2RlbC5lY29yZSIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL01vZGVsIiBjcmVhdGVkPSIyMDExLTA1LTExIi8+CisgIDxtb2RlbHMgaHJlZj0icGxhdGZvcm06L3Jlc291cmNlL0Jhc2ljVGVzdHMvbW9kZWxzL0VxeXB0TW9kZWwubW9kZWwjLyIvPgorICA8bm9kZURlY29yYXRvcnMgaHJlZj0icGxhdGZvcm06L3Jlc291cmNlL0Jhc2ljVGVzdHMvZGVjb3JhdG9ycy9EZW1vZ3JhcGhpY1BvcE1vZGVsLnN0YW5kYXJkIy8iLz4KKzwvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsOk1vZGVsPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL21vZGVscy9FZ3lwdFBvcE1vZGVsLm1vZGVsIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL21vZGVscy9FZ3lwdFBvcE1vZGVsLm1vZGVsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRiNjAzODMKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvbW9kZWxzL0VneXB0UG9wTW9kZWwubW9kZWwKQEAgLTAsMCArMSw2IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbDpNb2RlbCB4bWk6dmVyc2lvbj0iMi4wIiB4bWxuczp4bWk9Imh0dHA6Ly93d3cub21nLm9yZy9YTUkiIHhtbG5zOm9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvbW9kZWwuZWNvcmUiIHVSST0icGxhdGZvcm06L3Jlc291cmNlL0Jhc2ljVGVzdHMvbW9kZWxzL0VneXB0UG9wTW9kZWwubW9kZWwiIHR5cGVVUkk9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9Nb2RlbCI+CisgIDxkdWJsaW5Db3JlIGlkZW50aWZpZXI9InBsYXRmb3JtOi9yZXNvdXJjZS9CYXNpY1Rlc3RzL21vZGVscy9FZ3lwdFBvcE1vZGVsLm1vZGVsIiBjcmVhdG9yPSJlZGx1bmQiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvbW9kZWwuZWNvcmUiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9Nb2RlbCIgY3JlYXRlZD0iMjAxMS0wMS0zMSIvPgorICA8bW9kZWxzIGhyZWY9InBsYXRmb3JtOi9yZXNvdXJjZS9CYXNpY1Rlc3RzL21vZGVscy9FcXlwdE1vZGVsLm1vZGVsIy8iLz4KKyAgPG5vZGVEZWNvcmF0b3JzIGhyZWY9InBsYXRmb3JtOi9yZXNvdXJjZS9CYXNpY1Rlc3RzL2RlY29yYXRvcnMvR3Jvd2luZ1BvcHVsYXRpb25Nb2RlbC5zdGFuZGFyZCMvIi8+Cis8L29yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbDpNb2RlbD4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9tb2RlbHMvRXF5cHRNb2RlbC5tb2RlbCBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9tb2RlbHMvRXF5cHRNb2RlbC5tb2RlbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hOGMzMjE4Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL21vZGVscy9FcXlwdE1vZGVsLm1vZGVsCkBAIC0wLDAgKzEsNSBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWw6TW9kZWwgeG1pOnZlcnNpb249IjIuMCIgeG1sbnM6eG1pPSJodHRwOi8vd3d3Lm9tZy5vcmcvWE1JIiB4bWxuczpvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWw9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL21vZGVsLmVjb3JlIiB1Ukk9InBsYXRmb3JtOi9yZXNvdXJjZS9CYXNpY1Rlc3RzL21vZGVscy9FcXlwdE1vZGVsLm1vZGVsIiB0eXBlVVJJPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vTW9kZWwiPgorICA8ZHVibGluQ29yZSBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcmVzb3VyY2UvQmFzaWNUZXN0cy9tb2RlbHMvRXF5cHRNb2RlbC5tb2RlbCIgY3JlYXRvcj0iZWRsdW5kIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL21vZGVsLmVjb3JlIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vTW9kZWwiIGNyZWF0ZWQ9IjIwMTEtMDEtMjgiLz4KKyAgPG1vZGVscyBocmVmPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkucG9wdWxhdGlvbi5odW1hbi5tb2RlbHMvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9FR1kvRUdZXzBfMV8yX3BvcHVsYXRpb24ubW9kZWwjLyIvPgorPC9vcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWw6TW9kZWw+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvbW9kZWxzL0xhcmdlTWl4TWlnLm1vZGVsIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL21vZGVscy9MYXJnZU1peE1pZy5tb2RlbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYTdjM2FlCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL21vZGVscy9MYXJnZU1peE1pZy5tb2RlbApAQCAtMCwwICsxLDYgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8b3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsOk1vZGVsIHhtaTp2ZXJzaW9uPSIyLjAiIHhtbG5zOnhtaT0iaHR0cDovL3d3dy5vbWcub3JnL1hNSSIgeG1sbnM6b3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsPSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9tb2RlbC5lY29yZSIgdVJJPSJwbGF0Zm9ybTovcmVzb3VyY2UvQmFzaWNUZXN0cy9tb2RlbHMvTGFyZ2VNaXhNaWcubW9kZWwiIHR5cGVVUkk9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9Nb2RlbCI+CisgIDxkdWJsaW5Db3JlIGlkZW50aWZpZXI9InBsYXRmb3JtOi9yZXNvdXJjZS9CYXNpY1Rlc3RzL21vZGVscy9MYXJnZU1peE1pZy5tb2RlbCIgY3JlYXRvcj0iZWRsdW5kIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL21vZGVsLmVjb3JlIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vTW9kZWwiIGNyZWF0ZWQ9IjIwMTEtMDItMDMiLz4KKyAgPG1vZGVscyBocmVmPSJwbGF0Zm9ybTovcmVzb3VyY2UvQmFzaWNUZXN0cy9tb2RlbHMvTGFyZ2VNaXhNaWdZZW1lbi5tb2RlbCMvIi8+CisgIDxub2RlRGVjb3JhdG9ycyBocmVmPSJwbGF0Zm9ybTovcmVzb3VyY2UvQmFzaWNUZXN0cy9kZWNvcmF0b3JzL1llbWVuU0VJUi5zdGFuZGFyZCMvIi8+Cis8L29yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbDpNb2RlbD4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9tb2RlbHMvTGFyZ2VNaXhNaWdZZW1lbi5tb2RlbCBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9tb2RlbHMvTGFyZ2VNaXhNaWdZZW1lbi5tb2RlbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYTVhNGRiCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL21vZGVscy9MYXJnZU1peE1pZ1llbWVuLm1vZGVsCkBAIC0wLDAgKzEsNiBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWw6TW9kZWwgeG1pOnZlcnNpb249IjIuMCIgeG1sbnM6eG1pPSJodHRwOi8vd3d3Lm9tZy5vcmcvWE1JIiB4bWxuczpvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWw9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL21vZGVsLmVjb3JlIiB1Ukk9InBsYXRmb3JtOi9yZXNvdXJjZS9CYXNpY1Rlc3RzL21vZGVscy9MYXJnZU1peE1pZ1llbWVuLm1vZGVsIiB0eXBlVVJJPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vTW9kZWwiPgorICA8ZHVibGluQ29yZSBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcmVzb3VyY2UvQmFzaWNUZXN0cy9tb2RlbHMvTGFyZ2VNaXhNaWdZZW1lbi5tb2RlbCIgY3JlYXRvcj0iZWRsdW5kIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL21vZGVsLmVjb3JlIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vTW9kZWwiIGNyZWF0ZWQ9IjIwMTEtMDItMDMiLz4KKyAgPG1vZGVscyBocmVmPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkucG9wdWxhdGlvbi5odW1hbi5tb2RlbHMvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9ZRU0vWUVNXzBfMV8yX3BvcHVsYXRpb24ubW9kZWwjLyIvPgorICA8Z3JhcGhzIGhyZWY9InBsYXRmb3JtOi9yZXNvdXJjZS9CYXNpY1Rlc3RzL2dyYXBocy9NaWdyYXRpb25HcmFwaC5ncmFwaCMvIi8+Cis8L29yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbDpNb2RlbD4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9tb2RlbHMvTm9uWmVyb01vcnRhbGl0eVJhdGVNb2RlbC5tb2RlbCBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9tb2RlbHMvTm9uWmVyb01vcnRhbGl0eVJhdGVNb2RlbC5tb2RlbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YmViYjY4Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL21vZGVscy9Ob25aZXJvTW9ydGFsaXR5UmF0ZU1vZGVsLm1vZGVsCkBAIC0wLDAgKzEsNiBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWw6TW9kZWwgeG1pOnZlcnNpb249IjIuMCIgeG1sbnM6eG1pPSJodHRwOi8vd3d3Lm9tZy5vcmcvWE1JIiB4bWxuczpvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWw9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL21vZGVsLmVjb3JlIiB1Ukk9InBsYXRmb3JtOi9yZXNvdXJjZS9CYXNpY1Rlc3RzL21vZGVscy9Ob25aZXJvTW9ydGFsaXR5UmF0ZU1vZGVsLm1vZGVsIiB0eXBlVVJJPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vTW9kZWwiPgorICA8ZHVibGluQ29yZSBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcmVzb3VyY2UvQmFzaWNUZXN0cy9tb2RlbHMvTm9uWmVyb01vcnRhbGl0eVJhdGVNb2RlbC5tb2RlbCIgY3JlYXRvcj0iZWRsdW5kIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL21vZGVsLmVjb3JlIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vTW9kZWwiIGNyZWF0ZWQ9IjIwMTEtMDEtMzEiLz4KKyAgPG1vZGVscyBocmVmPSJwbGF0Zm9ybTovcmVzb3VyY2UvQmFzaWNUZXN0cy9tb2RlbHMvRWd5cHRQb3BNb2RlbC5tb2RlbCMvIi8+CisgIDxub2RlRGVjb3JhdG9ycyBocmVmPSJwbGF0Zm9ybTovcmVzb3VyY2UvQmFzaWNUZXN0cy9kZWNvcmF0b3JzL1NFSVIzLnN0YW5kYXJkIy8iLz4KKzwvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsOk1vZGVsPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL21vZGVscy9Qb3B1bGF0aW9uR3Jvd3RoTW9kZWwubW9kZWwgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvbW9kZWxzL1BvcHVsYXRpb25Hcm93dGhNb2RlbC5tb2RlbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ODExOTE2Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL21vZGVscy9Qb3B1bGF0aW9uR3Jvd3RoTW9kZWwubW9kZWwKQEAgLTAsMCArMSw2IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbDpNb2RlbCB4bWk6dmVyc2lvbj0iMi4wIiB4bWxuczp4bWk9Imh0dHA6Ly93d3cub21nLm9yZy9YTUkiIHhtbG5zOm9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvbW9kZWwuZWNvcmUiIHVSST0icGxhdGZvcm06L3Jlc291cmNlL0Jhc2ljVGVzdHMvbW9kZWxzL1BvcHVsYXRpb25Hcm93dGhNb2RlbC5tb2RlbCIgdHlwZVVSST0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL01vZGVsIj4KKyAgPGR1YmxpbkNvcmUgaWRlbnRpZmllcj0icGxhdGZvcm06L3Jlc291cmNlL0Jhc2ljVGVzdHMvbW9kZWxzL1BvcHVsYXRpb25Hcm93dGhNb2RlbC5tb2RlbCIgY3JlYXRvcj0iZWRsdW5kIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL21vZGVsLmVjb3JlIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vTW9kZWwiIGNyZWF0ZWQ9IjIwMTEtMDEtMjgiLz4KKyAgPG1vZGVscyBocmVmPSJwbGF0Zm9ybTovcmVzb3VyY2UvQmFzaWNUZXN0cy9tb2RlbHMvRWd5cHRQb3BNb2RlbC5tb2RlbCMvIi8+CisgIDxub2RlRGVjb3JhdG9ycyBocmVmPSJwbGF0Zm9ybTovcmVzb3VyY2UvQmFzaWNUZXN0cy9kZWNvcmF0b3JzL1NFSVIyLnN0YW5kYXJkIy8iLz4KKzwvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsOk1vZGVsPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL21vZGVscy9TaW5nbGVSZWdpb25BaXJUcmFuc3BvcnRTeXN0ZW1LZW55YS5tb2RlbCBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9tb2RlbHMvU2luZ2xlUmVnaW9uQWlyVHJhbnNwb3J0U3lzdGVtS2VueWEubW9kZWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2IxZGJiMQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9tb2RlbHMvU2luZ2xlUmVnaW9uQWlyVHJhbnNwb3J0U3lzdGVtS2VueWEubW9kZWwKQEAgLTAsMCArMSw2IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbDpNb2RlbCB4bWk6dmVyc2lvbj0iMi4wIiB4bWxuczp4bWk9Imh0dHA6Ly93d3cub21nLm9yZy9YTUkiIHhtbG5zOm9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvbW9kZWwuZWNvcmUiIHVSST0icGxhdGZvcm06L3Jlc291cmNlL0Jhc2ljVGVzdHMvbW9kZWxzL1NpbmdsZVJlZ2lvbkFpclRyYW5zcG9ydFN5c3RlbUtlbnlhLm1vZGVsIiB0eXBlVVJJPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vTW9kZWwiPgorICA8ZHVibGluQ29yZSBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcmVzb3VyY2UvQmFzaWNUZXN0cy9tb2RlbHMvU2luZ2xlUmVnaW9uQWlyVHJhbnNwb3J0U3lzdGVtS2VueWEubW9kZWwiIGNyZWF0b3I9ImVkbHVuZCIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9tb2RlbC5lY29yZSIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL01vZGVsIiBjcmVhdGVkPSIyMDExLTAyLTA0Ii8+CisgIDxtb2RlbHMgaHJlZj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5LnBvcHVsYXRpb24uaHVtYW4ubW9kZWxzL3Jlc291cmNlcy9kYXRhL2NvdW50cnkvS0VOL0tFTl8wX3BvcHVsYXRpb24ubW9kZWwjLyIvPgorICA8Z3JhcGhzIGhyZWY9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS5pbmZyYXN0cnVjdHVyZS50cmFuc3BvcnRhdGlvbi9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvYWlyL1paWl8tMV9aWlpfMC5ncmFwaCMvIi8+Cis8L29yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbDpNb2RlbD4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9tb2RlbHMvU2luZ2xlUmVnaW9uQWlyVHJhbnNwb3J0U3lzdGVtU0VJUk1vZGVsLm1vZGVsIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL21vZGVscy9TaW5nbGVSZWdpb25BaXJUcmFuc3BvcnRTeXN0ZW1TRUlSTW9kZWwubW9kZWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmRhY2MyYQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9tb2RlbHMvU2luZ2xlUmVnaW9uQWlyVHJhbnNwb3J0U3lzdGVtU0VJUk1vZGVsLm1vZGVsCkBAIC0wLDAgKzEsNiBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWw6TW9kZWwgeG1pOnZlcnNpb249IjIuMCIgeG1sbnM6eG1pPSJodHRwOi8vd3d3Lm9tZy5vcmcvWE1JIiB4bWxuczpvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWw9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL21vZGVsLmVjb3JlIiB1Ukk9InBsYXRmb3JtOi9yZXNvdXJjZS9CYXNpY1Rlc3RzL21vZGVscy9TaW5nbGVSZWdpb25BaXJUcmFuc3BvcnRTeXN0ZW1TRUlSTW9kZWwubW9kZWwiIHR5cGVVUkk9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9Nb2RlbCI+CisgIDxkdWJsaW5Db3JlIGlkZW50aWZpZXI9InBsYXRmb3JtOi9yZXNvdXJjZS9CYXNpY1Rlc3RzL21vZGVscy9TaW5nbGVSZWdpb25BaXJUcmFuc3BvcnRTeXN0ZW1TRUlSTW9kZWwubW9kZWwiIGNyZWF0b3I9ImVkbHVuZCIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9tb2RlbC5lY29yZSIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL01vZGVsIiBjcmVhdGVkPSIyMDExLTAyLTA0Ii8+CisgIDxtb2RlbHMgaHJlZj0icGxhdGZvcm06L3Jlc291cmNlL0Jhc2ljVGVzdHMvbW9kZWxzL1NpbmdsZVJlZ2lvbkFpclRyYW5zcG9ydFN5c3RlbUtlbnlhLm1vZGVsIy8iLz4KKyAgPG5vZGVEZWNvcmF0b3JzIGhyZWY9InBsYXRmb3JtOi9yZXNvdXJjZS9CYXNpY1Rlc3RzL2RlY29yYXRvcnMvU0VJUjQuc3RhbmRhcmQjLyIvPgorPC9vcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWw6TW9kZWw+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvbW9kZWxzL1NpbmdsZVNxdWFyZU1vZGVsLm1vZGVsIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL21vZGVscy9TaW5nbGVTcXVhcmVNb2RlbC5tb2RlbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZWQ3MGRmCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL21vZGVscy9TaW5nbGVTcXVhcmVNb2RlbC5tb2RlbApAQCAtMCwwICsxLDYgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8b3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsOk1vZGVsIHhtaTp2ZXJzaW9uPSIyLjAiIHhtbG5zOnhtaT0iaHR0cDovL3d3dy5vbWcub3JnL1hNSSIgeG1sbnM6b3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsPSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9tb2RlbC5lY29yZSIgdVJJPSJwbGF0Zm9ybTovcmVzb3VyY2UvQmFzaWNUZXN0cy9tb2RlbHMvU2luZ2xlU3F1YXJlTW9kZWwubW9kZWwiIHR5cGVVUkk9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9Nb2RlbCI+CisgIDxkdWJsaW5Db3JlIGlkZW50aWZpZXI9InBsYXRmb3JtOi9yZXNvdXJjZS9CYXNpY1Rlc3RzL21vZGVscy9TaW5nbGVTcXVhcmVNb2RlbC5tb2RlbCIgY3JlYXRvcj0iZWRsdW5kIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL21vZGVsLmVjb3JlIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vTW9kZWwiIGNyZWF0ZWQ9IjIwMTEtMDEtMjQiLz4KKyAgPGdyYXBocyBocmVmPSJwbGF0Zm9ybTovcmVzb3VyY2UvQmFzaWNUZXN0cy9ncmFwaHMvU2luZ2xlU3F1YXJlR3JhcGguZ3JhcGgjLyIvPgorICA8bm9kZURlY29yYXRvcnMgaHJlZj0icGxhdGZvcm06L3Jlc291cmNlL0Jhc2ljVGVzdHMvZGVjb3JhdG9ycy9TaW5nbGVTcXVhcmVQb3B1bGF0aW9uSW5pdGlhbGl6ZXIuc3RhbmRhcmQjLyIvPgorPC9vcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWw6TW9kZWw+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvbW9kZWxzL1NpbmdsZVNxdWFyZVNFSVJNb2RlbC5tb2RlbCBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9tb2RlbHMvU2luZ2xlU3F1YXJlU0VJUk1vZGVsLm1vZGVsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVlMzBjMTYKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvbW9kZWxzL1NpbmdsZVNxdWFyZVNFSVJNb2RlbC5tb2RlbApAQCAtMCwwICsxLDYgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8b3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsOk1vZGVsIHhtaTp2ZXJzaW9uPSIyLjAiIHhtbG5zOnhtaT0iaHR0cDovL3d3dy5vbWcub3JnL1hNSSIgeG1sbnM6b3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsPSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9tb2RlbC5lY29yZSIgdVJJPSJwbGF0Zm9ybTovcmVzb3VyY2UvQmFzaWNUZXN0cy9tb2RlbHMvU2luZ2xlU3F1YXJlU0VJUk1vZGVsLm1vZGVsIiB0eXBlVVJJPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vTW9kZWwiPgorICA8ZHVibGluQ29yZSBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcmVzb3VyY2UvQmFzaWNUZXN0cy9tb2RlbHMvU2luZ2xlU3F1YXJlU0VJUk1vZGVsLm1vZGVsIiBjcmVhdG9yPSJlZGx1bmQiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvbW9kZWwuZWNvcmUiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9Nb2RlbCIgY3JlYXRlZD0iMjAxMS0wMS0yNCIvPgorICA8bW9kZWxzIGhyZWY9InBsYXRmb3JtOi9yZXNvdXJjZS9CYXNpY1Rlc3RzL21vZGVscy9TaW5nbGVTcXVhcmVNb2RlbC5tb2RlbCMvIi8+CisgIDxub2RlRGVjb3JhdG9ycyBocmVmPSJwbGF0Zm9ybTovcmVzb3VyY2UvQmFzaWNUZXN0cy9kZWNvcmF0b3JzL1NFSVIuc3RhbmRhcmQjLyIvPgorPC9vcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWw6TW9kZWw+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvbW9kZWxzL1NpbmdsZVNxdWFyZVNJTW9kZWwubW9kZWwgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvbW9kZWxzL1NpbmdsZVNxdWFyZVNJTW9kZWwubW9kZWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzY0MzczOQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9tb2RlbHMvU2luZ2xlU3F1YXJlU0lNb2RlbC5tb2RlbApAQCAtMCwwICsxLDYgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8b3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsOk1vZGVsIHhtaTp2ZXJzaW9uPSIyLjAiIHhtbG5zOnhtaT0iaHR0cDovL3d3dy5vbWcub3JnL1hNSSIgeG1sbnM6b3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsPSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9tb2RlbC5lY29yZSIgdVJJPSJwbGF0Zm9ybTovcmVzb3VyY2UvQmFzaWNUZXN0cy9tb2RlbHMvU2luZ2xlU3F1YXJlU0lNb2RlbC5tb2RlbCIgdHlwZVVSST0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL01vZGVsIj4KKyAgPGR1YmxpbkNvcmUgaWRlbnRpZmllcj0icGxhdGZvcm06L3Jlc291cmNlL0Jhc2ljVGVzdHMvbW9kZWxzL1NpbmdsZVNxdWFyZVNJTW9kZWwubW9kZWwiIGNyZWF0b3I9ImVkbHVuZCIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9tb2RlbC5lY29yZSIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL01vZGVsIiBjcmVhdGVkPSIyMDExLTAxLTI0Ii8+CisgIDxtb2RlbHMgaHJlZj0icGxhdGZvcm06L3Jlc291cmNlL0Jhc2ljVGVzdHMvbW9kZWxzL1NpbmdsZVNxdWFyZU1vZGVsLm1vZGVsIy8iLz4KKyAgPG5vZGVEZWNvcmF0b3JzIGhyZWY9InBsYXRmb3JtOi9yZXNvdXJjZS9CYXNpY1Rlc3RzL2RlY29yYXRvcnMvU0kuc3RhbmRhcmQjLyIvPgorPC9vcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWw6TW9kZWw+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvbW9kZWxzL1NpbmdsZVNxdWFyZVNJUk1vZGVsLm1vZGVsIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL21vZGVscy9TaW5nbGVTcXVhcmVTSVJNb2RlbC5tb2RlbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YWY1MThiCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL21vZGVscy9TaW5nbGVTcXVhcmVTSVJNb2RlbC5tb2RlbApAQCAtMCwwICsxLDYgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8b3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsOk1vZGVsIHhtaTp2ZXJzaW9uPSIyLjAiIHhtbG5zOnhtaT0iaHR0cDovL3d3dy5vbWcub3JnL1hNSSIgeG1sbnM6b3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsPSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9tb2RlbC5lY29yZSIgdVJJPSJwbGF0Zm9ybTovcmVzb3VyY2UvQmFzaWNUZXN0cy9tb2RlbHMvU2luZ2xlU3F1YXJlU0lSTW9kZWwubW9kZWwiIHR5cGVVUkk9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9Nb2RlbCI+CisgIDxkdWJsaW5Db3JlIGlkZW50aWZpZXI9InBsYXRmb3JtOi9yZXNvdXJjZS9CYXNpY1Rlc3RzL21vZGVscy9TaW5nbGVTcXVhcmVTSVJNb2RlbC5tb2RlbCIgY3JlYXRvcj0iZWRsdW5kIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL21vZGVsLmVjb3JlIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vTW9kZWwiIGNyZWF0ZWQ9IjIwMTEtMDEtMjQiLz4KKyAgPG1vZGVscyBocmVmPSJwbGF0Zm9ybTovcmVzb3VyY2UvQmFzaWNUZXN0cy9tb2RlbHMvU2luZ2xlU3F1YXJlTW9kZWwubW9kZWwjLyIvPgorICA8bm9kZURlY29yYXRvcnMgaHJlZj0icGxhdGZvcm06L3Jlc291cmNlL0Jhc2ljVGVzdHMvZGVjb3JhdG9ycy9TSVIuc3RhbmRhcmQjLyIvPgorPC9vcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWw6TW9kZWw+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvbW9kZWxzL1R3b1NxdWFyZXNNaXhpbmdNaWdyYXRpb25Nb2RlbC5tb2RlbCBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9tb2RlbHMvVHdvU3F1YXJlc01peGluZ01pZ3JhdGlvbk1vZGVsLm1vZGVsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI4NmRiZmUKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvbW9kZWxzL1R3b1NxdWFyZXNNaXhpbmdNaWdyYXRpb25Nb2RlbC5tb2RlbApAQCAtMCwwICsxLDcgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8b3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsOk1vZGVsIHhtaTp2ZXJzaW9uPSIyLjAiIHhtbG5zOnhtaT0iaHR0cDovL3d3dy5vbWcub3JnL1hNSSIgeG1sbnM6b3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsPSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9tb2RlbC5lY29yZSIgdVJJPSJwbGF0Zm9ybTovcmVzb3VyY2UvQmFzaWNUZXN0cy9tb2RlbHMvVHdvU3F1YXJlc01peGluZ01pZ3JhdGlvbk1vZGVsLm1vZGVsIiB0eXBlVVJJPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vTW9kZWwiPgorICA8ZHVibGluQ29yZSBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcmVzb3VyY2UvQmFzaWNUZXN0cy9tb2RlbHMvVHdvU3F1YXJlc01peGluZ01pZ3JhdGlvbk1vZGVsLm1vZGVsIiBjcmVhdG9yPSJlZGx1bmQiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvbW9kZWwuZWNvcmUiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9Nb2RlbCIgY3JlYXRlZD0iMjAxMS0wMS0yNCIvPgorICA8Z3JhcGhzIGhyZWY9InBsYXRmb3JtOi9yZXNvdXJjZS9CYXNpY1Rlc3RzL2dyYXBocy9Ud29TcXVhcmVzV2l0aE1peGluZy5ncmFwaCMvIi8+CisgIDxncmFwaHMgaHJlZj0icGxhdGZvcm06L3Jlc291cmNlL0Jhc2ljVGVzdHMvZ3JhcGhzL1R3b1NxdWFyZXNNaWdyYXRpb25FZGdlcy5ncmFwaCMvIi8+CisgIDxub2RlRGVjb3JhdG9ycyBocmVmPSJwbGF0Zm9ybTovcmVzb3VyY2UvQmFzaWNUZXN0cy9kZWNvcmF0b3JzL0FsbFNxdWFyZXNQb3B1bGF0aW9uSW5pdGlhbGl6ZXIuc3RhbmRhcmQjLyIvPgorPC9vcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWw6TW9kZWw+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvbW9kZWxzL1R3b1NxdWFyZXNNaXhpbmdNaWdyYXRpb25TRUlSTW9kZWwubW9kZWwgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvbW9kZWxzL1R3b1NxdWFyZXNNaXhpbmdNaWdyYXRpb25TRUlSTW9kZWwubW9kZWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjA2Y2IyYQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9tb2RlbHMvVHdvU3F1YXJlc01peGluZ01pZ3JhdGlvblNFSVJNb2RlbC5tb2RlbApAQCAtMCwwICsxLDYgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8b3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsOk1vZGVsIHhtaTp2ZXJzaW9uPSIyLjAiIHhtbG5zOnhtaT0iaHR0cDovL3d3dy5vbWcub3JnL1hNSSIgeG1sbnM6b3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsPSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9tb2RlbC5lY29yZSIgdVJJPSJwbGF0Zm9ybTovcmVzb3VyY2UvQmFzaWNUZXN0cy9tb2RlbHMvVHdvU3F1YXJlc01peGluZ01pZ3JhdGlvblNFSVJNb2RlbC5tb2RlbCIgdHlwZVVSST0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL01vZGVsIj4KKyAgPGR1YmxpbkNvcmUgaWRlbnRpZmllcj0icGxhdGZvcm06L3Jlc291cmNlL0Jhc2ljVGVzdHMvbW9kZWxzL1R3b1NxdWFyZXNNaXhpbmdNaWdyYXRpb25TRUlSTW9kZWwubW9kZWwiIGNyZWF0b3I9ImVkbHVuZCIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9tb2RlbC5lY29yZSIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL01vZGVsIiBjcmVhdGVkPSIyMDExLTAxLTI0Ii8+CisgIDxtb2RlbHMgaHJlZj0icGxhdGZvcm06L3Jlc291cmNlL0Jhc2ljVGVzdHMvbW9kZWxzL1R3b1NxdWFyZXNNaXhpbmdNaWdyYXRpb25Nb2RlbC5tb2RlbCMvIi8+CisgIDxub2RlRGVjb3JhdG9ycyBocmVmPSJwbGF0Zm9ybTovcmVzb3VyY2UvQmFzaWNUZXN0cy9kZWNvcmF0b3JzL1NFSVIuc3RhbmRhcmQjLyIvPgorPC9vcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWw6TW9kZWw+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvbW9kZWxzL1R3b1NxdWFyZXNNaXhpbmdNb2RlbC5tb2RlbCBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9tb2RlbHMvVHdvU3F1YXJlc01peGluZ01vZGVsLm1vZGVsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU0N2JkMWYKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvbW9kZWxzL1R3b1NxdWFyZXNNaXhpbmdNb2RlbC5tb2RlbApAQCAtMCwwICsxLDYgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8b3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsOk1vZGVsIHhtaTp2ZXJzaW9uPSIyLjAiIHhtbG5zOnhtaT0iaHR0cDovL3d3dy5vbWcub3JnL1hNSSIgeG1sbnM6b3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsPSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9tb2RlbC5lY29yZSIgdVJJPSJwbGF0Zm9ybTovcmVzb3VyY2UvQmFzaWNUZXN0cy9tb2RlbHMvVHdvU3F1YXJlc01peGluZ01vZGVsLm1vZGVsIiB0eXBlVVJJPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vTW9kZWwiPgorICA8ZHVibGluQ29yZSBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcmVzb3VyY2UvQmFzaWNUZXN0cy9tb2RlbHMvVHdvU3F1YXJlc01peGluZ01vZGVsLm1vZGVsIiBjcmVhdG9yPSJlZGx1bmQiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvbW9kZWwuZWNvcmUiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9Nb2RlbCIgY3JlYXRlZD0iMjAxMS0wMS0yNCIvPgorICA8Z3JhcGhzIGhyZWY9InBsYXRmb3JtOi9yZXNvdXJjZS9CYXNpY1Rlc3RzL2dyYXBocy9Ud29TcXVhcmVzV2l0aE1peGluZy5ncmFwaCMvIi8+CisgIDxub2RlRGVjb3JhdG9ycyBocmVmPSJwbGF0Zm9ybTovcmVzb3VyY2UvQmFzaWNUZXN0cy9kZWNvcmF0b3JzL0FsbFNxdWFyZXNQb3B1bGF0aW9uSW5pdGlhbGl6ZXIuc3RhbmRhcmQjLyIvPgorPC9vcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWw6TW9kZWw+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvbW9kZWxzL1R3b1NxdWFyZXNNaXhpbmdTRUlSTW9kZWwubW9kZWwgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvbW9kZWxzL1R3b1NxdWFyZXNNaXhpbmdTRUlSTW9kZWwubW9kZWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzdmYWNiNwotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9tb2RlbHMvVHdvU3F1YXJlc01peGluZ1NFSVJNb2RlbC5tb2RlbApAQCAtMCwwICsxLDYgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8b3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsOk1vZGVsIHhtaTp2ZXJzaW9uPSIyLjAiIHhtbG5zOnhtaT0iaHR0cDovL3d3dy5vbWcub3JnL1hNSSIgeG1sbnM6b3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsPSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9tb2RlbC5lY29yZSIgdVJJPSJwbGF0Zm9ybTovcmVzb3VyY2UvQmFzaWNUZXN0cy9tb2RlbHMvVHdvU3F1YXJlc01peGluZ1NFSVJNb2RlbC5tb2RlbCIgdHlwZVVSST0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL01vZGVsIj4KKyAgPGR1YmxpbkNvcmUgaWRlbnRpZmllcj0icGxhdGZvcm06L3Jlc291cmNlL0Jhc2ljVGVzdHMvbW9kZWxzL1R3b1NxdWFyZXNNaXhpbmdTRUlSTW9kZWwubW9kZWwiIGNyZWF0b3I9ImVkbHVuZCIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9tb2RlbC5lY29yZSIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL01vZGVsIiBjcmVhdGVkPSIyMDExLTAxLTI0Ii8+CisgIDxtb2RlbHMgaHJlZj0icGxhdGZvcm06L3Jlc291cmNlL0Jhc2ljVGVzdHMvbW9kZWxzL1R3b1NxdWFyZXNNaXhpbmdNb2RlbC5tb2RlbCMvIi8+CisgIDxub2RlRGVjb3JhdG9ycyBocmVmPSJwbGF0Zm9ybTovcmVzb3VyY2UvQmFzaWNUZXN0cy9kZWNvcmF0b3JzL1NFSVIuc3RhbmRhcmQjLyIvPgorPC9vcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWw6TW9kZWw+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvc2NlbmFyaW9zL0FnaW5nU0VJUkRpc2Vhc2VfRkQuc2NlbmFyaW8gYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvc2NlbmFyaW9zL0FnaW5nU0VJUkRpc2Vhc2VfRkQuc2NlbmFyaW8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGZhZTliNQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9zY2VuYXJpb3MvQWdpbmdTRUlSRGlzZWFzZV9GRC5zY2VuYXJpbwpAQCAtMCwwICsxLDEwIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/Pg0KKzxvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2NlbmFyaW86U2NlbmFyaW8geG1pOnZlcnNpb249IjIuMCIgeG1sbnM6eG1pPSJodHRwOi8vd3d3Lm9tZy5vcmcvWE1JIiB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiB4bWxuczpvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2NlbmFyaW89Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3NjZW5hcmlvLmVjb3JlIiB4bWxuczpvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2VxdWVuY2VyPSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9zZXF1ZW5jZXIuZWNvcmUiIHhtbG5zOm9yZy5lY2xpcHNlLnN0ZW0uc29sdmVycy5mZD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL3NvbHZlcnMvZmQiIHVSST0icGxhdGZvcm06L3Jlc291cmNlL0Jhc2ljVGVzdHMvc2NlbmFyaW9zL0FnaW5nU0VJUkRpc2Vhc2VfRkQuc2NlbmFyaW8iIHR5cGVVUkk9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9TY2VuYXJpbyI+DQorICA8ZHVibGluQ29yZSBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcmVzb3VyY2UvQmFzaWNUZXN0cy9zY2VuYXJpb3MvQWdpbmdTRUlSRGlzZWFzZV9GRC5zY2VuYXJpbyIgY3JlYXRvcj0ibG9hbmVyMjUiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvc2NlbmFyaW8uZWNvcmUiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9TY2VuYXJpbyIgY3JlYXRlZD0iMjAxMS0wNS0yNiIvPg0KKyAgPG1vZGVsIGhyZWY9InBsYXRmb3JtOi9yZXNvdXJjZS9CYXNpY1Rlc3RzL21vZGVscy9FZ3lwdEFnaW5nRGlzZWFzZU1vZGVsLm1vZGVsIy8iLz4NCisgIDxzZXF1ZW5jZXIgeHNpOnR5cGU9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zZXF1ZW5jZXI6U2VxdWVudGlhbFNlcXVlbmNlciIgaHJlZj0icGxhdGZvcm06L3Jlc291cmNlL0Jhc2ljVGVzdHMvc2VxdWVuY2Vycy8zMERheVNlcXVlbmNlci5zZXF1ZW5jZXIjLyIvPg0KKyAgPHNjZW5hcmlvRGVjb3JhdG9ycyBocmVmPSJwbGF0Zm9ybTovcmVzb3VyY2UvQmFzaWNUZXN0cy9kZWNvcmF0b3JzL0VneXB0SHVtYW4wdG8wSW5mZWN0b3Iuc3RhbmRhcmQjLyIvPg0KKyAgPHNvbHZlciB4c2k6dHlwZT0ib3JnLmVjbGlwc2Uuc3RlbS5zb2x2ZXJzLmZkOkZpbml0ZURpZmZlcmVuY2UiIHVSST0ic3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vRmluaXRlRGlmZmVyZW5jZVNvbHZlci9COUFCQjE0NDNBNDY2REFEIiB0eXBlVVJJPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vU29sdmVyIj4NCisgICAgPGR1YmxpbkNvcmUgaWRlbnRpZmllcj0ic3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vRmluaXRlRGlmZmVyZW5jZVNvbHZlci9COUFCQjE0NDNBNDY2REFEIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vU29sdmVyIi8+DQorICA8L3NvbHZlcj4NCis8L29yZy5lY2xpcHNlLnN0ZW0uY29yZS5zY2VuYXJpbzpTY2VuYXJpbz4NCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvc2NlbmFyaW9zL0FnaW5nX0ZELnNjZW5hcmlvIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL3NjZW5hcmlvcy9BZ2luZ19GRC5zY2VuYXJpbwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NzNhMjFiCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL3NjZW5hcmlvcy9BZ2luZ19GRC5zY2VuYXJpbwpAQCAtMCwwICsxLDkgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+DQorPG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zY2VuYXJpbzpTY2VuYXJpbyB4bWk6dmVyc2lvbj0iMi4wIiB4bWxuczp4bWk9Imh0dHA6Ly93d3cub21nLm9yZy9YTUkiIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIHhtbG5zOm9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zY2VuYXJpbz0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvc2NlbmFyaW8uZWNvcmUiIHhtbG5zOm9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zZXF1ZW5jZXI9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3NlcXVlbmNlci5lY29yZSIgeG1sbnM6b3JnLmVjbGlwc2Uuc3RlbS5zb2x2ZXJzLmZkPSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vc29sdmVycy9mZCIgdVJJPSJwbGF0Zm9ybTovcmVzb3VyY2UvQmFzaWNUZXN0cy9zY2VuYXJpb3MvQWdpbmdfRkQuc2NlbmFyaW8iIHR5cGVVUkk9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9TY2VuYXJpbyI+DQorICA8ZHVibGluQ29yZSBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcmVzb3VyY2UvQmFzaWNUZXN0cy9zY2VuYXJpb3MvQWdpbmdfRkQuc2NlbmFyaW8iIGNyZWF0b3I9ImxvYW5lcjI1IiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3NjZW5hcmlvLmVjb3JlIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vU2NlbmFyaW8iIGNyZWF0ZWQ9IjIwMTEtMDUtMjYiLz4NCisgIDxtb2RlbCBocmVmPSJwbGF0Zm9ybTovcmVzb3VyY2UvQmFzaWNUZXN0cy9tb2RlbHMvRWd5cHRBZ2luZ01vZGVsLm1vZGVsIy8iLz4NCisgIDxzZXF1ZW5jZXIgeHNpOnR5cGU9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zZXF1ZW5jZXI6U2VxdWVudGlhbFNlcXVlbmNlciIgaHJlZj0icGxhdGZvcm06L3Jlc291cmNlL0Jhc2ljVGVzdHMvc2VxdWVuY2Vycy8zMERheVNlcXVlbmNlci5zZXF1ZW5jZXIjLyIvPg0KKyAgPHNvbHZlciB4c2k6dHlwZT0ib3JnLmVjbGlwc2Uuc3RlbS5zb2x2ZXJzLmZkOkZpbml0ZURpZmZlcmVuY2UiIHVSST0ic3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vRmluaXRlRGlmZmVyZW5jZVNvbHZlci81MTg2RUFERUFEMTk4QzcxIiB0eXBlVVJJPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vU29sdmVyIj4NCisgICAgPGR1YmxpbkNvcmUgaWRlbnRpZmllcj0ic3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vRmluaXRlRGlmZmVyZW5jZVNvbHZlci81MTg2RUFERUFEMTk4QzcxIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vU29sdmVyIi8+DQorICA8L3NvbHZlcj4NCis8L29yZy5lY2xpcHNlLnN0ZW0uY29yZS5zY2VuYXJpbzpTY2VuYXJpbz4NCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvc2NlbmFyaW9zL0FpclRyYW5zcG9ydFNFSVJTaW5nbGVSZWdpb25fRkQuc2NlbmFyaW8gYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvc2NlbmFyaW9zL0FpclRyYW5zcG9ydFNFSVJTaW5nbGVSZWdpb25fRkQuc2NlbmFyaW8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmVlNjgyNwotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9zY2VuYXJpb3MvQWlyVHJhbnNwb3J0U0VJUlNpbmdsZVJlZ2lvbl9GRC5zY2VuYXJpbwpAQCAtMCwwICsxLDEwIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zY2VuYXJpbzpTY2VuYXJpbyB4bWk6dmVyc2lvbj0iMi4wIiB4bWxuczp4bWk9Imh0dHA6Ly93d3cub21nLm9yZy9YTUkiIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIHhtbG5zOm9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zY2VuYXJpbz0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvc2NlbmFyaW8uZWNvcmUiIHhtbG5zOm9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zZXF1ZW5jZXI9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3NlcXVlbmNlci5lY29yZSIgeG1sbnM6b3JnLmVjbGlwc2Uuc3RlbS5zb2x2ZXJzLmZkPSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vc29sdmVycy9mZCIgdVJJPSJwbGF0Zm9ybTovcmVzb3VyY2UvQmFzaWNUZXN0cy9zY2VuYXJpb3MvQWlyVHJhbnNwb3J0U0VJUlNpbmdsZVJlZ2lvbl9GRC5zY2VuYXJpbyIgdHlwZVVSST0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL1NjZW5hcmlvIj4KKyAgPGR1YmxpbkNvcmUgaWRlbnRpZmllcj0icGxhdGZvcm06L3Jlc291cmNlL0Jhc2ljVGVzdHMvc2NlbmFyaW9zL0FpclRyYW5zcG9ydFNFSVJTaW5nbGVSZWdpb25fRkQuc2NlbmFyaW8iIGNyZWF0b3I9ImVkbHVuZCIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9zY2VuYXJpby5lY29yZSIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL1NjZW5hcmlvIiBjcmVhdGVkPSIyMDExLTAyLTA0Ii8+CisgIDxtb2RlbCBocmVmPSJwbGF0Zm9ybTovcmVzb3VyY2UvQmFzaWNUZXN0cy9tb2RlbHMvU2luZ2xlUmVnaW9uQWlyVHJhbnNwb3J0U3lzdGVtU0VJUk1vZGVsLm1vZGVsIy8iLz4KKyAgPHNlcXVlbmNlciB4c2k6dHlwZT0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNlcXVlbmNlcjpTZXF1ZW50aWFsU2VxdWVuY2VyIiBocmVmPSJwbGF0Zm9ybTovcmVzb3VyY2UvQmFzaWNUZXN0cy9zZXF1ZW5jZXJzLzMwRGF5U2VxdWVuY2VyLnNlcXVlbmNlciMvIi8+CisgIDxzY2VuYXJpb0RlY29yYXRvcnMgaHJlZj0icGxhdGZvcm06L3Jlc291cmNlL0Jhc2ljVGVzdHMvZGVjb3JhdG9ycy9JbmZlY3RLZW55YS5zdGFuZGFyZCMvIi8+CisgIDxzb2x2ZXIgeHNpOnR5cGU9Im9yZy5lY2xpcHNlLnN0ZW0uc29sdmVycy5mZDpGaW5pdGVEaWZmZXJlbmNlIiB1Ukk9InN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL0Zpbml0ZURpZmZlcmVuY2VTb2x2ZXIvNkEyQUVFQTc2MTI4RTVDRCIgdHlwZVVSST0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL1NvbHZlciI+CisgICAgPGR1YmxpbkNvcmUgaWRlbnRpZmllcj0ic3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vRmluaXRlRGlmZmVyZW5jZVNvbHZlci82QTJBRUVBNzYxMjhFNUNEIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vU29sdmVyIi8+CisgIDwvc29sdmVyPgorPC9vcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2NlbmFyaW86U2NlbmFyaW8+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvc2NlbmFyaW9zL0FpclRyYW5zcG9ydFNFSVJTaW5nbGVSZWdpb25fUksuc2NlbmFyaW8gYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvc2NlbmFyaW9zL0FpclRyYW5zcG9ydFNFSVJTaW5nbGVSZWdpb25fUksuc2NlbmFyaW8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzI4NWI2MQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9zY2VuYXJpb3MvQWlyVHJhbnNwb3J0U0VJUlNpbmdsZVJlZ2lvbl9SSy5zY2VuYXJpbwpAQCAtMCwwICsxLDEwIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zY2VuYXJpbzpTY2VuYXJpbyB4bWk6dmVyc2lvbj0iMi4wIiB4bWxuczp4bWk9Imh0dHA6Ly93d3cub21nLm9yZy9YTUkiIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIHhtbG5zOm9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zY2VuYXJpbz0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvc2NlbmFyaW8uZWNvcmUiIHhtbG5zOm9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zZXF1ZW5jZXI9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3NlcXVlbmNlci5lY29yZSIgeG1sbnM6b3JnLmVjbGlwc2Uuc3RlbS5zb2x2ZXJzLnJrPSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vc29sdmVycy9yayIgdVJJPSJwbGF0Zm9ybTovcmVzb3VyY2UvQmFzaWNUZXN0cy9zY2VuYXJpb3MvQWlyVHJhbnNwb3J0U0VJUlNpbmdsZVJlZ2lvbl9SSy5zY2VuYXJpbyIgdHlwZVVSST0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL1NjZW5hcmlvIj4KKyAgPGR1YmxpbkNvcmUgaWRlbnRpZmllcj0icGxhdGZvcm06L3Jlc291cmNlL0Jhc2ljVGVzdHMvc2NlbmFyaW9zL0FpclRyYW5zcG9ydFNFSVJTaW5nbGVSZWdpb25fUksuc2NlbmFyaW8iIGNyZWF0b3I9ImVkbHVuZCIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9zY2VuYXJpby5lY29yZSIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL1NjZW5hcmlvIiBjcmVhdGVkPSIyMDExLTAyLTA0Ii8+CisgIDxtb2RlbCBocmVmPSJwbGF0Zm9ybTovcmVzb3VyY2UvQmFzaWNUZXN0cy9tb2RlbHMvU2luZ2xlUmVnaW9uQWlyVHJhbnNwb3J0U3lzdGVtU0VJUk1vZGVsLm1vZGVsIy8iLz4KKyAgPHNlcXVlbmNlciB4c2k6dHlwZT0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNlcXVlbmNlcjpTZXF1ZW50aWFsU2VxdWVuY2VyIiBocmVmPSJwbGF0Zm9ybTovcmVzb3VyY2UvQmFzaWNUZXN0cy9zZXF1ZW5jZXJzLzMwRGF5U2VxdWVuY2VyLnNlcXVlbmNlciMvIi8+CisgIDxzY2VuYXJpb0RlY29yYXRvcnMgaHJlZj0icGxhdGZvcm06L3Jlc291cmNlL0Jhc2ljVGVzdHMvZGVjb3JhdG9ycy9JbmZlY3RLZW55YS5zdGFuZGFyZCMvIi8+CisgIDxzb2x2ZXIgeHNpOnR5cGU9Im9yZy5lY2xpcHNlLnN0ZW0uc29sdmVycy5yazpSdW5nZUt1dHRhIiB1Ukk9InN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL1J1bmdlS3V0dGFTb2x2ZXIvMTQ1OTYyMzU2NzdCOTEwRSIgdHlwZVVSST0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL1NvbHZlciIgcmVsYXRpdmVUb2xlcmFuY2U9IjEuMEUtNCI+CisgICAgPGR1YmxpbkNvcmUgaWRlbnRpZmllcj0ic3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vUnVuZ2VLdXR0YVNvbHZlci8xNDU5NjIzNTY3N0I5MTBFIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vU29sdmVyIi8+CisgIDwvc29sdmVyPgorPC9vcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2NlbmFyaW86U2NlbmFyaW8+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvc2NlbmFyaW9zL0FpclRyYW5zcG9ydFNFSVJTdGF0ZXNPbmx5X0ZELnNjZW5hcmlvIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL3NjZW5hcmlvcy9BaXJUcmFuc3BvcnRTRUlSU3RhdGVzT25seV9GRC5zY2VuYXJpbwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41Mjg0MzliCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL3NjZW5hcmlvcy9BaXJUcmFuc3BvcnRTRUlSU3RhdGVzT25seV9GRC5zY2VuYXJpbwpAQCAtMCwwICsxLDEwIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zY2VuYXJpbzpTY2VuYXJpbyB4bWk6dmVyc2lvbj0iMi4wIiB4bWxuczp4bWk9Imh0dHA6Ly93d3cub21nLm9yZy9YTUkiIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIHhtbG5zOm9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zY2VuYXJpbz0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvc2NlbmFyaW8uZWNvcmUiIHhtbG5zOm9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zZXF1ZW5jZXI9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3NlcXVlbmNlci5lY29yZSIgeG1sbnM6b3JnLmVjbGlwc2Uuc3RlbS5zb2x2ZXJzLmZkPSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vc29sdmVycy9mZCIgdVJJPSJwbGF0Zm9ybTovcmVzb3VyY2UvQmFzaWNUZXN0cy9zY2VuYXJpb3MvQWlyVHJhbnNwb3J0U0VJUlN0YXRlc09ubHlfRkQuc2NlbmFyaW8iIHR5cGVVUkk9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9TY2VuYXJpbyI+CisgIDxkdWJsaW5Db3JlIGlkZW50aWZpZXI9InBsYXRmb3JtOi9yZXNvdXJjZS9CYXNpY1Rlc3RzL3NjZW5hcmlvcy9BaXJUcmFuc3BvcnRTRUlSU3RhdGVzT25seV9GRC5zY2VuYXJpbyIgY3JlYXRvcj0iZWRsdW5kIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3NjZW5hcmlvLmVjb3JlIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vU2NlbmFyaW8iIGNyZWF0ZWQ9IjIwMTEtMDItMDQiLz4KKyAgPG1vZGVsIGhyZWY9InBsYXRmb3JtOi9yZXNvdXJjZS9CYXNpY1Rlc3RzL21vZGVscy9BaXJUcmFuc3BvcnRTRUlSU3RhdGVzT25seS5tb2RlbCMvIi8+CisgIDxzZXF1ZW5jZXIgeHNpOnR5cGU9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zZXF1ZW5jZXI6U2VxdWVudGlhbFNlcXVlbmNlciIgaHJlZj0icGxhdGZvcm06L3Jlc291cmNlL0Jhc2ljVGVzdHMvc2VxdWVuY2Vycy8zMERheVNlcXVlbmNlci5zZXF1ZW5jZXIjLyIvPgorICA8c2NlbmFyaW9EZWNvcmF0b3JzIGhyZWY9InBsYXRmb3JtOi9yZXNvdXJjZS9CYXNpY1Rlc3RzL2RlY29yYXRvcnMvSW5mZWN0Q2FsaWZvcm5pYS5zdGFuZGFyZCMvIi8+CisgIDxzb2x2ZXIgeHNpOnR5cGU9Im9yZy5lY2xpcHNlLnN0ZW0uc29sdmVycy5mZDpGaW5pdGVEaWZmZXJlbmNlIiB1Ukk9InN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL0Zpbml0ZURpZmZlcmVuY2VTb2x2ZXIvOTVDRjJCODFCNjU5QTY5QSIgdHlwZVVSST0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL1NvbHZlciI+CisgICAgPGR1YmxpbkNvcmUgaWRlbnRpZmllcj0ic3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vRmluaXRlRGlmZmVyZW5jZVNvbHZlci85NUNGMkI4MUI2NTlBNjlBIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vU29sdmVyIi8+CisgIDwvc29sdmVyPgorPC9vcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2NlbmFyaW86U2NlbmFyaW8+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvc2NlbmFyaW9zL0FpclRyYW5zcG9ydFNFSVJTdGF0ZXNPbmx5X1JLLnNjZW5hcmlvIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL3NjZW5hcmlvcy9BaXJUcmFuc3BvcnRTRUlSU3RhdGVzT25seV9SSy5zY2VuYXJpbwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMzgwOGUwCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL3NjZW5hcmlvcy9BaXJUcmFuc3BvcnRTRUlSU3RhdGVzT25seV9SSy5zY2VuYXJpbwpAQCAtMCwwICsxLDEwIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zY2VuYXJpbzpTY2VuYXJpbyB4bWk6dmVyc2lvbj0iMi4wIiB4bWxuczp4bWk9Imh0dHA6Ly93d3cub21nLm9yZy9YTUkiIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIHhtbG5zOm9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zY2VuYXJpbz0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvc2NlbmFyaW8uZWNvcmUiIHhtbG5zOm9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zZXF1ZW5jZXI9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3NlcXVlbmNlci5lY29yZSIgeG1sbnM6b3JnLmVjbGlwc2Uuc3RlbS5zb2x2ZXJzLnJrPSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vc29sdmVycy9yayIgdVJJPSJwbGF0Zm9ybTovcmVzb3VyY2UvQmFzaWNUZXN0cy9zY2VuYXJpb3MvQWlyVHJhbnNwb3J0U0VJUlN0YXRlc09ubHlfUksuc2NlbmFyaW8iIHR5cGVVUkk9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9TY2VuYXJpbyI+CisgIDxkdWJsaW5Db3JlIGlkZW50aWZpZXI9InBsYXRmb3JtOi9yZXNvdXJjZS9CYXNpY1Rlc3RzL3NjZW5hcmlvcy9BaXJUcmFuc3BvcnRTRUlSU3RhdGVzT25seV9SSy5zY2VuYXJpbyIgY3JlYXRvcj0iZWRsdW5kIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3NjZW5hcmlvLmVjb3JlIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vU2NlbmFyaW8iIGNyZWF0ZWQ9IjIwMTEtMDItMDQiLz4KKyAgPG1vZGVsIGhyZWY9InBsYXRmb3JtOi9yZXNvdXJjZS9CYXNpY1Rlc3RzL21vZGVscy9BaXJUcmFuc3BvcnRTRUlSU3RhdGVzT25seS5tb2RlbCMvIi8+CisgIDxzZXF1ZW5jZXIgeHNpOnR5cGU9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zZXF1ZW5jZXI6U2VxdWVudGlhbFNlcXVlbmNlciIgaHJlZj0icGxhdGZvcm06L3Jlc291cmNlL0Jhc2ljVGVzdHMvc2VxdWVuY2Vycy8zMERheVNlcXVlbmNlci5zZXF1ZW5jZXIjLyIvPgorICA8c2NlbmFyaW9EZWNvcmF0b3JzIGhyZWY9InBsYXRmb3JtOi9yZXNvdXJjZS9CYXNpY1Rlc3RzL2RlY29yYXRvcnMvSW5mZWN0Q2FsaWZvcm5pYS5zdGFuZGFyZCMvIi8+CisgIDxzb2x2ZXIgeHNpOnR5cGU9Im9yZy5lY2xpcHNlLnN0ZW0uc29sdmVycy5yazpSdW5nZUt1dHRhIiB1Ukk9InN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL1J1bmdlS3V0dGFTb2x2ZXIvQURBMjVFOERERTgzNzNDMSIgdHlwZVVSST0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL1NvbHZlciIgcmVsYXRpdmVUb2xlcmFuY2U9IjEuMEUtNCI+CisgICAgPGR1YmxpbkNvcmUgaWRlbnRpZmllcj0ic3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vUnVuZ2VLdXR0YVNvbHZlci9BREEyNUU4RERFODM3M0MxIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vU29sdmVyIi8+CisgIDwvc29sdmVyPgorPC9vcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2NlbmFyaW86U2NlbmFyaW8+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvc2NlbmFyaW9zL0FpclRyYW5zcG9ydFNFSVJfRkQuc2NlbmFyaW8gYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvc2NlbmFyaW9zL0FpclRyYW5zcG9ydFNFSVJfRkQuc2NlbmFyaW8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzgxYmY2NAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9zY2VuYXJpb3MvQWlyVHJhbnNwb3J0U0VJUl9GRC5zY2VuYXJpbwpAQCAtMCwwICsxLDEwIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zY2VuYXJpbzpTY2VuYXJpbyB4bWk6dmVyc2lvbj0iMi4wIiB4bWxuczp4bWk9Imh0dHA6Ly93d3cub21nLm9yZy9YTUkiIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIHhtbG5zOm9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zY2VuYXJpbz0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvc2NlbmFyaW8uZWNvcmUiIHhtbG5zOm9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zZXF1ZW5jZXI9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3NlcXVlbmNlci5lY29yZSIgeG1sbnM6b3JnLmVjbGlwc2Uuc3RlbS5zb2x2ZXJzLmZkPSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vc29sdmVycy9mZCIgdVJJPSJwbGF0Zm9ybTovcmVzb3VyY2UvQmFzaWNUZXN0cy9zY2VuYXJpb3MvQWlyVHJhbnNwb3J0U0VJUl9GRC5zY2VuYXJpbyIgdHlwZVVSST0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL1NjZW5hcmlvIj4KKyAgPGR1YmxpbkNvcmUgaWRlbnRpZmllcj0icGxhdGZvcm06L3Jlc291cmNlL0Jhc2ljVGVzdHMvc2NlbmFyaW9zL0FpclRyYW5zcG9ydFNFSVJfRkQuc2NlbmFyaW8iIGNyZWF0b3I9ImVkbHVuZCIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9zY2VuYXJpby5lY29yZSIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL1NjZW5hcmlvIiBjcmVhdGVkPSIyMDExLTAxLTI1Ii8+CisgIDxtb2RlbCBocmVmPSJwbGF0Zm9ybTovcmVzb3VyY2UvQmFzaWNUZXN0cy9tb2RlbHMvQWlyVHJhbnNwb3J0U0VJUk1vZGVsLm1vZGVsIy8iLz4KKyAgPHNlcXVlbmNlciB4c2k6dHlwZT0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNlcXVlbmNlcjpTZXF1ZW50aWFsU2VxdWVuY2VyIiBocmVmPSJwbGF0Zm9ybTovcmVzb3VyY2UvQmFzaWNUZXN0cy9zZXF1ZW5jZXJzLzMwRGF5U2VxdWVuY2VyLnNlcXVlbmNlciMvIi8+CisgIDxzY2VuYXJpb0RlY29yYXRvcnMgaHJlZj0icGxhdGZvcm06L3Jlc291cmNlL0Jhc2ljVGVzdHMvZGVjb3JhdG9ycy9QaGlsaXBwaW5lc0luZmVjdG9yLnN0YW5kYXJkIy8iLz4KKyAgPHNvbHZlciB4c2k6dHlwZT0ib3JnLmVjbGlwc2Uuc3RlbS5zb2x2ZXJzLmZkOkZpbml0ZURpZmZlcmVuY2UiIHVSST0ic3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vRmluaXRlRGlmZmVyZW5jZVNvbHZlci84QzMzNjQ2M0Q2M0UwQzQ4IiB0eXBlVVJJPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vU29sdmVyIj4KKyAgICA8ZHVibGluQ29yZSBpZGVudGlmaWVyPSJzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9GaW5pdGVEaWZmZXJlbmNlU29sdmVyLzhDMzM2NDYzRDYzRTBDNDgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9Tb2x2ZXIiLz4KKyAgPC9zb2x2ZXI+Cis8L29yZy5lY2xpcHNlLnN0ZW0uY29yZS5zY2VuYXJpbzpTY2VuYXJpbz4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9zY2VuYXJpb3MvQWlyVHJhbnNwb3J0U0VJUl9SSy5zY2VuYXJpbyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9zY2VuYXJpb3MvQWlyVHJhbnNwb3J0U0VJUl9SSy5zY2VuYXJpbwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNTYzNTI4Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL3NjZW5hcmlvcy9BaXJUcmFuc3BvcnRTRUlSX1JLLnNjZW5hcmlvCkBAIC0wLDAgKzEsMTAgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8b3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNjZW5hcmlvOlNjZW5hcmlvIHhtaTp2ZXJzaW9uPSIyLjAiIHhtbG5zOnhtaT0iaHR0cDovL3d3dy5vbWcub3JnL1hNSSIgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIgeG1sbnM6b3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNjZW5hcmlvPSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9zY2VuYXJpby5lY29yZSIgeG1sbnM6b3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNlcXVlbmNlcj0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvc2VxdWVuY2VyLmVjb3JlIiB4bWxuczpvcmcuZWNsaXBzZS5zdGVtLnNvbHZlcnMucms9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9zb2x2ZXJzL3JrIiB1Ukk9InBsYXRmb3JtOi9yZXNvdXJjZS9CYXNpY1Rlc3RzL3NjZW5hcmlvcy9BaXJUcmFuc3BvcnRTRUlSX1JLLnNjZW5hcmlvIiB0eXBlVVJJPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vU2NlbmFyaW8iPgorICA8ZHVibGluQ29yZSBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcmVzb3VyY2UvQmFzaWNUZXN0cy9zY2VuYXJpb3MvQWlyVHJhbnNwb3J0U0VJUl9SSy5zY2VuYXJpbyIgY3JlYXRvcj0iZWRsdW5kIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3NjZW5hcmlvLmVjb3JlIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vU2NlbmFyaW8iIGNyZWF0ZWQ9IjIwMTEtMDEtMjUiLz4KKyAgPG1vZGVsIGhyZWY9InBsYXRmb3JtOi9yZXNvdXJjZS9CYXNpY1Rlc3RzL21vZGVscy9BaXJUcmFuc3BvcnRTRUlSTW9kZWwubW9kZWwjLyIvPgorICA8c2VxdWVuY2VyIHhzaTp0eXBlPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2VxdWVuY2VyOlNlcXVlbnRpYWxTZXF1ZW5jZXIiIGhyZWY9InBsYXRmb3JtOi9yZXNvdXJjZS9CYXNpY1Rlc3RzL3NlcXVlbmNlcnMvMzBEYXlTZXF1ZW5jZXIuc2VxdWVuY2VyIy8iLz4KKyAgPHNjZW5hcmlvRGVjb3JhdG9ycyBocmVmPSJwbGF0Zm9ybTovcmVzb3VyY2UvQmFzaWNUZXN0cy9kZWNvcmF0b3JzL1BoaWxpcHBpbmVzSW5mZWN0b3Iuc3RhbmRhcmQjLyIvPgorICA8c29sdmVyIHhzaTp0eXBlPSJvcmcuZWNsaXBzZS5zdGVtLnNvbHZlcnMucms6UnVuZ2VLdXR0YSIgdVJJPSJzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9SdW5nZUt1dHRhU29sdmVyLzlBQUU3NTNDNzczOUU4OEQiIHR5cGVVUkk9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9Tb2x2ZXIiIHJlbGF0aXZlVG9sZXJhbmNlPSIxLjBFLTQiPgorICAgIDxkdWJsaW5Db3JlIGlkZW50aWZpZXI9InN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL1J1bmdlS3V0dGFTb2x2ZXIvOUFBRTc1M0M3NzM5RTg4RCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL1NvbHZlciIvPgorICA8L3NvbHZlcj4KKzwvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNjZW5hcmlvOlNjZW5hcmlvPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL3NjZW5hcmlvcy9BaXJUcmFuc3BvcnRTSVJTdGF0ZXNPbmx5X0ZELnNjZW5hcmlvIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL3NjZW5hcmlvcy9BaXJUcmFuc3BvcnRTSVJTdGF0ZXNPbmx5X0ZELnNjZW5hcmlvCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNkMGIzODcKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvc2NlbmFyaW9zL0FpclRyYW5zcG9ydFNJUlN0YXRlc09ubHlfRkQuc2NlbmFyaW8KQEAgLTAsMCArMSwxMCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2NlbmFyaW86U2NlbmFyaW8geG1pOnZlcnNpb249IjIuMCIgeG1sbnM6eG1pPSJodHRwOi8vd3d3Lm9tZy5vcmcvWE1JIiB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiB4bWxuczpvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2NlbmFyaW89Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3NjZW5hcmlvLmVjb3JlIiB4bWxuczpvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2VxdWVuY2VyPSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9zZXF1ZW5jZXIuZWNvcmUiIHhtbG5zOm9yZy5lY2xpcHNlLnN0ZW0uc29sdmVycy5mZD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL3NvbHZlcnMvZmQiIHVSST0icGxhdGZvcm06L3Jlc291cmNlL0Jhc2ljVGVzdHMvc2NlbmFyaW9zL0FpclRyYW5zcG9ydFNJUlN0YXRlc09ubHlfRkQuc2NlbmFyaW8iIHR5cGVVUkk9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9TY2VuYXJpbyI+CisgIDxkdWJsaW5Db3JlIGlkZW50aWZpZXI9InBsYXRmb3JtOi9yZXNvdXJjZS9CYXNpY1Rlc3RzL3NjZW5hcmlvcy9BaXJUcmFuc3BvcnRTSVJTdGF0ZXNPbmx5X0ZELnNjZW5hcmlvIiBjcmVhdG9yPSJlZGx1bmQiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvc2NlbmFyaW8uZWNvcmUiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9TY2VuYXJpbyIgY3JlYXRlZD0iMjAxMS0wMi0wNyIvPgorICA8bW9kZWwgaHJlZj0icGxhdGZvcm06L3Jlc291cmNlL0Jhc2ljVGVzdHMvbW9kZWxzL0FpclRyYW5zcG9ydFNJUlN0YXRlc09ubHkubW9kZWwjLyIvPgorICA8c2VxdWVuY2VyIHhzaTp0eXBlPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2VxdWVuY2VyOlNlcXVlbnRpYWxTZXF1ZW5jZXIiIGhyZWY9InBsYXRmb3JtOi9yZXNvdXJjZS9CYXNpY1Rlc3RzL3NlcXVlbmNlcnMvMzBEYXlTZXF1ZW5jZXIuc2VxdWVuY2VyIy8iLz4KKyAgPHNjZW5hcmlvRGVjb3JhdG9ycyBocmVmPSJwbGF0Zm9ybTovcmVzb3VyY2UvQmFzaWNUZXN0cy9kZWNvcmF0b3JzL0luZmVjdENhbGlmb3JuaWEzLnN0YW5kYXJkIy8iLz4KKyAgPHNvbHZlciB4c2k6dHlwZT0ib3JnLmVjbGlwc2Uuc3RlbS5zb2x2ZXJzLmZkOkZpbml0ZURpZmZlcmVuY2UiIHVSST0ic3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vRmluaXRlRGlmZmVyZW5jZVNvbHZlci9FQ0NGRjdFMjY2REQyOTM4IiB0eXBlVVJJPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vU29sdmVyIj4KKyAgICA8ZHVibGluQ29yZSBpZGVudGlmaWVyPSJzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9GaW5pdGVEaWZmZXJlbmNlU29sdmVyL0VDQ0ZGN0UyNjZERDI5MzgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9Tb2x2ZXIiLz4KKyAgPC9zb2x2ZXI+Cis8L29yZy5lY2xpcHNlLnN0ZW0uY29yZS5zY2VuYXJpbzpTY2VuYXJpbz4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9zY2VuYXJpb3MvQWlyVHJhbnNwb3J0U0lSU3RhdGVzT25seV9SSy5zY2VuYXJpbyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9zY2VuYXJpb3MvQWlyVHJhbnNwb3J0U0lSU3RhdGVzT25seV9SSy5zY2VuYXJpbwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MjFlODI3Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL3NjZW5hcmlvcy9BaXJUcmFuc3BvcnRTSVJTdGF0ZXNPbmx5X1JLLnNjZW5hcmlvCkBAIC0wLDAgKzEsMTAgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8b3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNjZW5hcmlvOlNjZW5hcmlvIHhtaTp2ZXJzaW9uPSIyLjAiIHhtbG5zOnhtaT0iaHR0cDovL3d3dy5vbWcub3JnL1hNSSIgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIgeG1sbnM6b3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNjZW5hcmlvPSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9zY2VuYXJpby5lY29yZSIgeG1sbnM6b3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNlcXVlbmNlcj0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvc2VxdWVuY2VyLmVjb3JlIiB4bWxuczpvcmcuZWNsaXBzZS5zdGVtLnNvbHZlcnMucms9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9zb2x2ZXJzL3JrIiB1Ukk9InBsYXRmb3JtOi9yZXNvdXJjZS9CYXNpY1Rlc3RzL3NjZW5hcmlvcy9BaXJUcmFuc3BvcnRTSVJTdGF0ZXNPbmx5X1JLLnNjZW5hcmlvIiB0eXBlVVJJPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vU2NlbmFyaW8iPgorICA8ZHVibGluQ29yZSBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcmVzb3VyY2UvQmFzaWNUZXN0cy9zY2VuYXJpb3MvQWlyVHJhbnNwb3J0U0lSU3RhdGVzT25seV9SSy5zY2VuYXJpbyIgY3JlYXRvcj0iZWRsdW5kIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3NjZW5hcmlvLmVjb3JlIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vU2NlbmFyaW8iIGNyZWF0ZWQ9IjIwMTEtMDItMDciLz4KKyAgPG1vZGVsIGhyZWY9InBsYXRmb3JtOi9yZXNvdXJjZS9CYXNpY1Rlc3RzL21vZGVscy9BaXJUcmFuc3BvcnRTSVJTdGF0ZXNPbmx5Lm1vZGVsIy8iLz4KKyAgPHNlcXVlbmNlciB4c2k6dHlwZT0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNlcXVlbmNlcjpTZXF1ZW50aWFsU2VxdWVuY2VyIiBocmVmPSJwbGF0Zm9ybTovcmVzb3VyY2UvQmFzaWNUZXN0cy9zZXF1ZW5jZXJzLzMwRGF5U2VxdWVuY2VyLnNlcXVlbmNlciMvIi8+CisgIDxzY2VuYXJpb0RlY29yYXRvcnMgaHJlZj0icGxhdGZvcm06L3Jlc291cmNlL0Jhc2ljVGVzdHMvZGVjb3JhdG9ycy9JbmZlY3RDYWxpZm9ybmlhMy5zdGFuZGFyZCMvIi8+CisgIDxzb2x2ZXIgeHNpOnR5cGU9Im9yZy5lY2xpcHNlLnN0ZW0uc29sdmVycy5yazpSdW5nZUt1dHRhIiB1Ukk9InN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL1J1bmdlS3V0dGFTb2x2ZXIvNEE5OTU2MTg1NzY2NDdENyIgdHlwZVVSST0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL1NvbHZlciIgcmVsYXRpdmVUb2xlcmFuY2U9IjEuMEUtNCI+CisgICAgPGR1YmxpbkNvcmUgaWRlbnRpZmllcj0ic3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vUnVuZ2VLdXR0YVNvbHZlci80QTk5NTYxODU3NjY0N0Q3IiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vU29sdmVyIi8+CisgIDwvc29sdmVyPgorPC9vcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2NlbmFyaW86U2NlbmFyaW8+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvc2NlbmFyaW9zL0FpclRyYW5zcG9ydFNJU3RhdGVzT25seV9GRC5zY2VuYXJpbyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9zY2VuYXJpb3MvQWlyVHJhbnNwb3J0U0lTdGF0ZXNPbmx5X0ZELnNjZW5hcmlvCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFhMzNjZmMKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvc2NlbmFyaW9zL0FpclRyYW5zcG9ydFNJU3RhdGVzT25seV9GRC5zY2VuYXJpbwpAQCAtMCwwICsxLDEwIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zY2VuYXJpbzpTY2VuYXJpbyB4bWk6dmVyc2lvbj0iMi4wIiB4bWxuczp4bWk9Imh0dHA6Ly93d3cub21nLm9yZy9YTUkiIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIHhtbG5zOm9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zY2VuYXJpbz0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvc2NlbmFyaW8uZWNvcmUiIHhtbG5zOm9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zZXF1ZW5jZXI9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3NlcXVlbmNlci5lY29yZSIgeG1sbnM6b3JnLmVjbGlwc2Uuc3RlbS5zb2x2ZXJzLmZkPSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vc29sdmVycy9mZCIgdVJJPSJwbGF0Zm9ybTovcmVzb3VyY2UvQmFzaWNUZXN0cy9zY2VuYXJpb3MvQWlyVHJhbnNwb3J0U0lTdGF0ZXNPbmx5X0ZELnNjZW5hcmlvIiB0eXBlVVJJPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vU2NlbmFyaW8iPgorICA8ZHVibGluQ29yZSBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcmVzb3VyY2UvQmFzaWNUZXN0cy9zY2VuYXJpb3MvQWlyVHJhbnNwb3J0U0lTdGF0ZXNPbmx5X0ZELnNjZW5hcmlvIiBjcmVhdG9yPSJlZGx1bmQiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvc2NlbmFyaW8uZWNvcmUiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9TY2VuYXJpbyIgY3JlYXRlZD0iMjAxMS0wMi0wNyIvPgorICA8bW9kZWwgaHJlZj0icGxhdGZvcm06L3Jlc291cmNlL0Jhc2ljVGVzdHMvbW9kZWxzL0FpclRyYW5zcG9ydFNJU3RhdGVzT25seS5tb2RlbCMvIi8+CisgIDxzZXF1ZW5jZXIgeHNpOnR5cGU9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zZXF1ZW5jZXI6U2VxdWVudGlhbFNlcXVlbmNlciIgaHJlZj0icGxhdGZvcm06L3Jlc291cmNlL0Jhc2ljVGVzdHMvc2VxdWVuY2Vycy8zMERheVNlcXVlbmNlci5zZXF1ZW5jZXIjLyIvPgorICA8c2NlbmFyaW9EZWNvcmF0b3JzIGhyZWY9InBsYXRmb3JtOi9yZXNvdXJjZS9CYXNpY1Rlc3RzL2RlY29yYXRvcnMvSW5mZWN0Q2FsaWZvcm5pYTIuc3RhbmRhcmQjLyIvPgorICA8c29sdmVyIHhzaTp0eXBlPSJvcmcuZWNsaXBzZS5zdGVtLnNvbHZlcnMuZmQ6RmluaXRlRGlmZmVyZW5jZSIgdVJJPSJzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9GaW5pdGVEaWZmZXJlbmNlU29sdmVyL0QwMDIyMzEyM0ZFM0VEODkiIHR5cGVVUkk9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9Tb2x2ZXIiPgorICAgIDxkdWJsaW5Db3JlIGlkZW50aWZpZXI9InN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL0Zpbml0ZURpZmZlcmVuY2VTb2x2ZXIvRDAwMjIzMTIzRkUzRUQ4OSIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL1NvbHZlciIvPgorICA8L3NvbHZlcj4KKzwvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNjZW5hcmlvOlNjZW5hcmlvPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL3NjZW5hcmlvcy9BaXJUcmFuc3BvcnRTSVN0YXRlc09ubHlfUksuc2NlbmFyaW8gYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvc2NlbmFyaW9zL0FpclRyYW5zcG9ydFNJU3RhdGVzT25seV9SSy5zY2VuYXJpbwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYTA0NjQ3Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL3NjZW5hcmlvcy9BaXJUcmFuc3BvcnRTSVN0YXRlc09ubHlfUksuc2NlbmFyaW8KQEAgLTAsMCArMSwxMCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2NlbmFyaW86U2NlbmFyaW8geG1pOnZlcnNpb249IjIuMCIgeG1sbnM6eG1pPSJodHRwOi8vd3d3Lm9tZy5vcmcvWE1JIiB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiB4bWxuczpvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2NlbmFyaW89Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3NjZW5hcmlvLmVjb3JlIiB4bWxuczpvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2VxdWVuY2VyPSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9zZXF1ZW5jZXIuZWNvcmUiIHhtbG5zOm9yZy5lY2xpcHNlLnN0ZW0uc29sdmVycy5yaz0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL3NvbHZlcnMvcmsiIHVSST0icGxhdGZvcm06L3Jlc291cmNlL0Jhc2ljVGVzdHMvc2NlbmFyaW9zL0FpclRyYW5zcG9ydFNJU3RhdGVzT25seV9SSy5zY2VuYXJpbyIgdHlwZVVSST0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL1NjZW5hcmlvIj4KKyAgPGR1YmxpbkNvcmUgaWRlbnRpZmllcj0icGxhdGZvcm06L3Jlc291cmNlL0Jhc2ljVGVzdHMvc2NlbmFyaW9zL0FpclRyYW5zcG9ydFNJU3RhdGVzT25seV9SSy5zY2VuYXJpbyIgY3JlYXRvcj0iZWRsdW5kIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3NjZW5hcmlvLmVjb3JlIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vU2NlbmFyaW8iIGNyZWF0ZWQ9IjIwMTEtMDItMDciLz4KKyAgPG1vZGVsIGhyZWY9InBsYXRmb3JtOi9yZXNvdXJjZS9CYXNpY1Rlc3RzL21vZGVscy9BaXJUcmFuc3BvcnRTSVN0YXRlc09ubHkubW9kZWwjLyIvPgorICA8c2VxdWVuY2VyIHhzaTp0eXBlPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2VxdWVuY2VyOlNlcXVlbnRpYWxTZXF1ZW5jZXIiIGhyZWY9InBsYXRmb3JtOi9yZXNvdXJjZS9CYXNpY1Rlc3RzL3NlcXVlbmNlcnMvMzBEYXlTZXF1ZW5jZXIuc2VxdWVuY2VyIy8iLz4KKyAgPHNjZW5hcmlvRGVjb3JhdG9ycyBocmVmPSJwbGF0Zm9ybTovcmVzb3VyY2UvQmFzaWNUZXN0cy9kZWNvcmF0b3JzL0luZmVjdENhbGlmb3JuaWEyLnN0YW5kYXJkIy8iLz4KKyAgPHNvbHZlciB4c2k6dHlwZT0ib3JnLmVjbGlwc2Uuc3RlbS5zb2x2ZXJzLnJrOlJ1bmdlS3V0dGEiIHVSST0ic3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vUnVuZ2VLdXR0YVNvbHZlci9GMDdGNTZCMzc2QkJGRkMxIiB0eXBlVVJJPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vU29sdmVyIiByZWxhdGl2ZVRvbGVyYW5jZT0iMS4wRS00Ij4KKyAgICA8ZHVibGluQ29yZSBpZGVudGlmaWVyPSJzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9SdW5nZUt1dHRhU29sdmVyL0YwN0Y1NkIzNzZCQkZGQzEiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9Tb2x2ZXIiLz4KKyAgPC9zb2x2ZXI+Cis8L29yZy5lY2xpcHNlLnN0ZW0uY29yZS5zY2VuYXJpbzpTY2VuYXJpbz4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9zY2VuYXJpb3MvRGVtb2dyYXBoaWNTRUlSRGlzZWFzZV9GRC5zY2VuYXJpbyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9zY2VuYXJpb3MvRGVtb2dyYXBoaWNTRUlSRGlzZWFzZV9GRC5zY2VuYXJpbwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMzRlMjNmCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL3NjZW5hcmlvcy9EZW1vZ3JhcGhpY1NFSVJEaXNlYXNlX0ZELnNjZW5hcmlvCkBAIC0wLDAgKzEsMTAgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8b3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNjZW5hcmlvOlNjZW5hcmlvIHhtaTp2ZXJzaW9uPSIyLjAiIHhtbG5zOnhtaT0iaHR0cDovL3d3dy5vbWcub3JnL1hNSSIgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIgeG1sbnM6b3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNjZW5hcmlvPSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9zY2VuYXJpby5lY29yZSIgeG1sbnM6b3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNlcXVlbmNlcj0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvc2VxdWVuY2VyLmVjb3JlIiB4bWxuczpvcmcuZWNsaXBzZS5zdGVtLnNvbHZlcnMuZmQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9zb2x2ZXJzL2ZkIiB1Ukk9InBsYXRmb3JtOi9yZXNvdXJjZS9CYXNpY1Rlc3RzL3NjZW5hcmlvcy9EZW1vZ3JhcGhpY1NFSVJEaXNlYXNlX0ZELnNjZW5hcmlvIiB0eXBlVVJJPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vU2NlbmFyaW8iPgorICA8ZHVibGluQ29yZSBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcmVzb3VyY2UvQmFzaWNUZXN0cy9zY2VuYXJpb3MvRGVtb2dyYXBoaWNTRUlSRGlzZWFzZV9GRC5zY2VuYXJpbyIgY3JlYXRvcj0iZWRsdW5kIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3NjZW5hcmlvLmVjb3JlIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vU2NlbmFyaW8iIGNyZWF0ZWQ9IjIwMTEtMDUtMTEiLz4KKyAgPG1vZGVsIGhyZWY9InBsYXRmb3JtOi9yZXNvdXJjZS9CYXNpY1Rlc3RzL21vZGVscy9FZ3lwdERlbW9ncmFwaGljRGlzZWFzZU1vZGVsLm1vZGVsIy8iLz4KKyAgPHNlcXVlbmNlciB4c2k6dHlwZT0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNlcXVlbmNlcjpTZXF1ZW50aWFsU2VxdWVuY2VyIiBocmVmPSJwbGF0Zm9ybTovcmVzb3VyY2UvQmFzaWNUZXN0cy9zZXF1ZW5jZXJzLzMwRGF5U2VxdWVuY2VyLnNlcXVlbmNlciMvIi8+CisgIDxzY2VuYXJpb0RlY29yYXRvcnMgaHJlZj0icGxhdGZvcm06L3Jlc291cmNlL0Jhc2ljVGVzdHMvZGVjb3JhdG9ycy9FZ3lwdFdvbWVuSW5mZWN0b3Iuc3RhbmRhcmQjLyIvPgorICA8c29sdmVyIHhzaTp0eXBlPSJvcmcuZWNsaXBzZS5zdGVtLnNvbHZlcnMuZmQ6RmluaXRlRGlmZmVyZW5jZSIgdVJJPSJzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9GaW5pdGVEaWZmZXJlbmNlU29sdmVyLzhFNUVDOUQzNUIwQTZFREUiIHR5cGVVUkk9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9Tb2x2ZXIiPgorICAgIDxkdWJsaW5Db3JlIGlkZW50aWZpZXI9InN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL0Zpbml0ZURpZmZlcmVuY2VTb2x2ZXIvOEU1RUM5RDM1QjBBNkVERSIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL1NvbHZlciIvPgorICA8L3NvbHZlcj4KKzwvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNjZW5hcmlvOlNjZW5hcmlvPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL3NjZW5hcmlvcy9EZW1vZ3JhcGhpY1NFSVJEaXNlYXNlX1JLLnNjZW5hcmlvIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL3NjZW5hcmlvcy9EZW1vZ3JhcGhpY1NFSVJEaXNlYXNlX1JLLnNjZW5hcmlvCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA2NWFkNjEKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvc2NlbmFyaW9zL0RlbW9ncmFwaGljU0VJUkRpc2Vhc2VfUksuc2NlbmFyaW8KQEAgLTAsMCArMSwxMCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2NlbmFyaW86U2NlbmFyaW8geG1pOnZlcnNpb249IjIuMCIgeG1sbnM6eG1pPSJodHRwOi8vd3d3Lm9tZy5vcmcvWE1JIiB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiB4bWxuczpvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2NlbmFyaW89Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3NjZW5hcmlvLmVjb3JlIiB4bWxuczpvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2VxdWVuY2VyPSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9zZXF1ZW5jZXIuZWNvcmUiIHhtbG5zOm9yZy5lY2xpcHNlLnN0ZW0uc29sdmVycy5yaz0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL3NvbHZlcnMvcmsiIHVSST0icGxhdGZvcm06L3Jlc291cmNlL0Jhc2ljVGVzdHMvc2NlbmFyaW9zL0RlbW9ncmFwaGljU0VJUkRpc2Vhc2VfUksuc2NlbmFyaW8iIHR5cGVVUkk9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9TY2VuYXJpbyI+CisgIDxkdWJsaW5Db3JlIGlkZW50aWZpZXI9InBsYXRmb3JtOi9yZXNvdXJjZS9CYXNpY1Rlc3RzL3NjZW5hcmlvcy9EZW1vZ3JhcGhpY1NFSVJEaXNlYXNlX1JLLnNjZW5hcmlvIiBjcmVhdG9yPSJlZGx1bmQiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvc2NlbmFyaW8uZWNvcmUiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9TY2VuYXJpbyIgY3JlYXRlZD0iMjAxMS0wNS0xMSIvPgorICA8bW9kZWwgaHJlZj0icGxhdGZvcm06L3Jlc291cmNlL0Jhc2ljVGVzdHMvbW9kZWxzL0VneXB0RGVtb2dyYXBoaWNEaXNlYXNlTW9kZWwubW9kZWwjLyIvPgorICA8c2VxdWVuY2VyIHhzaTp0eXBlPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2VxdWVuY2VyOlNlcXVlbnRpYWxTZXF1ZW5jZXIiIGhyZWY9InBsYXRmb3JtOi9yZXNvdXJjZS9CYXNpY1Rlc3RzL3NlcXVlbmNlcnMvMzBEYXlTZXF1ZW5jZXIuc2VxdWVuY2VyIy8iLz4KKyAgPHNjZW5hcmlvRGVjb3JhdG9ycyBocmVmPSJwbGF0Zm9ybTovcmVzb3VyY2UvQmFzaWNUZXN0cy9kZWNvcmF0b3JzL0VneXB0V29tZW5JbmZlY3Rvci5zdGFuZGFyZCMvIi8+CisgIDxzb2x2ZXIgeHNpOnR5cGU9Im9yZy5lY2xpcHNlLnN0ZW0uc29sdmVycy5yazpSdW5nZUt1dHRhIiB1Ukk9InN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL1J1bmdlS3V0dGFTb2x2ZXIvQkQyOUY5MDhDMkFGMjRENSIgdHlwZVVSST0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL1NvbHZlciI+CisgICAgPGR1YmxpbkNvcmUgaWRlbnRpZmllcj0ic3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vUnVuZ2VLdXR0YVNvbHZlci9CRDI5RjkwOEMyQUYyNEQ1IiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vU29sdmVyIi8+CisgIDwvc29sdmVyPgorPC9vcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2NlbmFyaW86U2NlbmFyaW8+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvc2NlbmFyaW9zL0lub2N1bGF0aW9uVGVzdF9GRC5zY2VuYXJpbyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9zY2VuYXJpb3MvSW5vY3VsYXRpb25UZXN0X0ZELnNjZW5hcmlvCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE3YjE0YmIKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvc2NlbmFyaW9zL0lub2N1bGF0aW9uVGVzdF9GRC5zY2VuYXJpbwpAQCAtMCwwICsxLDExIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zY2VuYXJpbzpTY2VuYXJpbyB4bWk6dmVyc2lvbj0iMi4wIiB4bWxuczp4bWk9Imh0dHA6Ly93d3cub21nLm9yZy9YTUkiIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIHhtbG5zOm9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zY2VuYXJpbz0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvc2NlbmFyaW8uZWNvcmUiIHhtbG5zOm9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zZXF1ZW5jZXI9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3NlcXVlbmNlci5lY29yZSIgeG1sbnM6b3JnLmVjbGlwc2Uuc3RlbS5zb2x2ZXJzLmZkPSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vc29sdmVycy9mZCIgdVJJPSJwbGF0Zm9ybTovcmVzb3VyY2UvQmFzaWNUZXN0cy9zY2VuYXJpb3MvSW5vY3VsYXRpb25UZXN0X0ZELnNjZW5hcmlvIiB0eXBlVVJJPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vU2NlbmFyaW8iPgorICA8ZHVibGluQ29yZSBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcmVzb3VyY2UvQmFzaWNUZXN0cy9zY2VuYXJpb3MvSW5vY3VsYXRpb25UZXN0X0ZELnNjZW5hcmlvIiBjcmVhdG9yPSJlZGx1bmQiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvc2NlbmFyaW8uZWNvcmUiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9TY2VuYXJpbyIgY3JlYXRlZD0iMjAxMS0wMS0zMSIvPgorICA8bW9kZWwgaHJlZj0icGxhdGZvcm06L3Jlc291cmNlL0Jhc2ljVGVzdHMvbW9kZWxzL1BvcHVsYXRpb25Hcm93dGhNb2RlbC5tb2RlbCMvIi8+CisgIDxzZXF1ZW5jZXIgeHNpOnR5cGU9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zZXF1ZW5jZXI6U2VxdWVudGlhbFNlcXVlbmNlciIgaHJlZj0icGxhdGZvcm06L3Jlc291cmNlL0Jhc2ljVGVzdHMvc2VxdWVuY2Vycy8zMERheVNlcXVlbmNlci5zZXF1ZW5jZXIjLyIvPgorICA8c2NlbmFyaW9EZWNvcmF0b3JzIGhyZWY9InBsYXRmb3JtOi9yZXNvdXJjZS9CYXNpY1Rlc3RzL2RlY29yYXRvcnMvRWd5cHRJbm9jdWxhdG9yLnN0YW5kYXJkIy8iLz4KKyAgPHNjZW5hcmlvRGVjb3JhdG9ycyBocmVmPSJwbGF0Zm9ybTovcmVzb3VyY2UvQmFzaWNUZXN0cy9kZWNvcmF0b3JzL0VneXB0SW5mZWN0b3Iuc3RhbmRhcmQjLyIvPgorICA8c29sdmVyIHhzaTp0eXBlPSJvcmcuZWNsaXBzZS5zdGVtLnNvbHZlcnMuZmQ6RmluaXRlRGlmZmVyZW5jZSIgdVJJPSJzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9GaW5pdGVEaWZmZXJlbmNlU29sdmVyLzkwMTZDNjExOUIzQzBDMDIiIHR5cGVVUkk9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9Tb2x2ZXIiPgorICAgIDxkdWJsaW5Db3JlIGlkZW50aWZpZXI9InN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL0Zpbml0ZURpZmZlcmVuY2VTb2x2ZXIvOTAxNkM2MTE5QjNDMEMwMiIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL1NvbHZlciIvPgorICA8L3NvbHZlcj4KKzwvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNjZW5hcmlvOlNjZW5hcmlvPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL3NjZW5hcmlvcy9Jbm9jdWxhdGlvblRlc3RfUksuc2NlbmFyaW8gYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvc2NlbmFyaW9zL0lub2N1bGF0aW9uVGVzdF9SSy5zY2VuYXJpbwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNzRiZTkzCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL3NjZW5hcmlvcy9Jbm9jdWxhdGlvblRlc3RfUksuc2NlbmFyaW8KQEAgLTAsMCArMSwxMSBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2NlbmFyaW86U2NlbmFyaW8geG1pOnZlcnNpb249IjIuMCIgeG1sbnM6eG1pPSJodHRwOi8vd3d3Lm9tZy5vcmcvWE1JIiB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiB4bWxuczpvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2NlbmFyaW89Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3NjZW5hcmlvLmVjb3JlIiB4bWxuczpvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2VxdWVuY2VyPSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9zZXF1ZW5jZXIuZWNvcmUiIHhtbG5zOm9yZy5lY2xpcHNlLnN0ZW0uc29sdmVycy5yaz0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL3NvbHZlcnMvcmsiIHVSST0icGxhdGZvcm06L3Jlc291cmNlL0Jhc2ljVGVzdHMvc2NlbmFyaW9zL0lub2N1bGF0aW9uVGVzdF9SSy5zY2VuYXJpbyIgdHlwZVVSST0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL1NjZW5hcmlvIj4KKyAgPGR1YmxpbkNvcmUgaWRlbnRpZmllcj0icGxhdGZvcm06L3Jlc291cmNlL0Jhc2ljVGVzdHMvc2NlbmFyaW9zL0lub2N1bGF0aW9uVGVzdF9SSy5zY2VuYXJpbyIgY3JlYXRvcj0iZWRsdW5kIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3NjZW5hcmlvLmVjb3JlIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vU2NlbmFyaW8iIGNyZWF0ZWQ9IjIwMTEtMDEtMzEiLz4KKyAgPG1vZGVsIGhyZWY9InBsYXRmb3JtOi9yZXNvdXJjZS9CYXNpY1Rlc3RzL21vZGVscy9Qb3B1bGF0aW9uR3Jvd3RoTW9kZWwubW9kZWwjLyIvPgorICA8c2VxdWVuY2VyIHhzaTp0eXBlPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2VxdWVuY2VyOlNlcXVlbnRpYWxTZXF1ZW5jZXIiIGhyZWY9InBsYXRmb3JtOi9yZXNvdXJjZS9CYXNpY1Rlc3RzL3NlcXVlbmNlcnMvMzBEYXlTZXF1ZW5jZXIuc2VxdWVuY2VyIy8iLz4KKyAgPHNjZW5hcmlvRGVjb3JhdG9ycyBocmVmPSJwbGF0Zm9ybTovcmVzb3VyY2UvQmFzaWNUZXN0cy9kZWNvcmF0b3JzL0VneXB0SW5mZWN0b3Iuc3RhbmRhcmQjLyIvPgorICA8c2NlbmFyaW9EZWNvcmF0b3JzIGhyZWY9InBsYXRmb3JtOi9yZXNvdXJjZS9CYXNpY1Rlc3RzL2RlY29yYXRvcnMvRWd5cHRJbm9jdWxhdG9yLnN0YW5kYXJkIy8iLz4KKyAgPHNvbHZlciB4c2k6dHlwZT0ib3JnLmVjbGlwc2Uuc3RlbS5zb2x2ZXJzLnJrOlJ1bmdlS3V0dGEiIHVSST0ic3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vUnVuZ2VLdXR0YVNvbHZlci85MEY3MjM5QTgyNEQ4OTUyIiB0eXBlVVJJPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vU29sdmVyIj4KKyAgICA8ZHVibGluQ29yZSBpZGVudGlmaWVyPSJzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9SdW5nZUt1dHRhU29sdmVyLzkwRjcyMzlBODI0RDg5NTIiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9Tb2x2ZXIiLz4KKyAgPC9zb2x2ZXI+Cis8L29yZy5lY2xpcHNlLnN0ZW0uY29yZS5zY2VuYXJpbzpTY2VuYXJpbz4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9zY2VuYXJpb3MvTGFyZ2VNaXhNaWdfRkQuc2NlbmFyaW8gYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvc2NlbmFyaW9zL0xhcmdlTWl4TWlnX0ZELnNjZW5hcmlvCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU5Y2FjOWEKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvc2NlbmFyaW9zL0xhcmdlTWl4TWlnX0ZELnNjZW5hcmlvCkBAIC0wLDAgKzEsMTAgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8b3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNjZW5hcmlvOlNjZW5hcmlvIHhtaTp2ZXJzaW9uPSIyLjAiIHhtbG5zOnhtaT0iaHR0cDovL3d3dy5vbWcub3JnL1hNSSIgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIgeG1sbnM6b3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNjZW5hcmlvPSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9zY2VuYXJpby5lY29yZSIgeG1sbnM6b3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNlcXVlbmNlcj0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvc2VxdWVuY2VyLmVjb3JlIiB4bWxuczpvcmcuZWNsaXBzZS5zdGVtLnNvbHZlcnMuZmQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9zb2x2ZXJzL2ZkIiB1Ukk9InBsYXRmb3JtOi9yZXNvdXJjZS9CYXNpY1Rlc3RzL3NjZW5hcmlvcy9MYXJnZU1peE1pZ19GRC5zY2VuYXJpbyIgdHlwZVVSST0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL1NjZW5hcmlvIj4KKyAgPGR1YmxpbkNvcmUgaWRlbnRpZmllcj0icGxhdGZvcm06L3Jlc291cmNlL0Jhc2ljVGVzdHMvc2NlbmFyaW9zL0xhcmdlTWl4TWlnX0ZELnNjZW5hcmlvIiBjcmVhdG9yPSJlZGx1bmQiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvc2NlbmFyaW8uZWNvcmUiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9TY2VuYXJpbyIgY3JlYXRlZD0iMjAxMS0wMi0wMyIvPgorICA8bW9kZWwgaHJlZj0icGxhdGZvcm06L3Jlc291cmNlL0Jhc2ljVGVzdHMvbW9kZWxzL0xhcmdlTWl4TWlnLm1vZGVsIy8iLz4KKyAgPHNlcXVlbmNlciB4c2k6dHlwZT0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNlcXVlbmNlcjpTZXF1ZW50aWFsU2VxdWVuY2VyIiBocmVmPSJwbGF0Zm9ybTovcmVzb3VyY2UvQmFzaWNUZXN0cy9zZXF1ZW5jZXJzLzMwRGF5U2VxdWVuY2VyLnNlcXVlbmNlciMvIi8+CisgIDxzY2VuYXJpb0RlY29yYXRvcnMgaHJlZj0icGxhdGZvcm06L3Jlc291cmNlL0Jhc2ljVGVzdHMvZGVjb3JhdG9ycy9ZZW1lbkluZmVjdG9yLnN0YW5kYXJkIy8iLz4KKyAgPHNvbHZlciB4c2k6dHlwZT0ib3JnLmVjbGlwc2Uuc3RlbS5zb2x2ZXJzLmZkOkZpbml0ZURpZmZlcmVuY2UiIHVSST0ic3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vRmluaXRlRGlmZmVyZW5jZVNvbHZlci85RDI3OEIxOTg0NERBMzYyIiB0eXBlVVJJPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vU29sdmVyIj4KKyAgICA8ZHVibGluQ29yZSBpZGVudGlmaWVyPSJzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9GaW5pdGVEaWZmZXJlbmNlU29sdmVyLzlEMjc4QjE5ODQ0REEzNjIiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9Tb2x2ZXIiLz4KKyAgPC9zb2x2ZXI+Cis8L29yZy5lY2xpcHNlLnN0ZW0uY29yZS5zY2VuYXJpbzpTY2VuYXJpbz4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9zY2VuYXJpb3MvTGFyZ2VNaXhNaWdfUksuc2NlbmFyaW8gYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvc2NlbmFyaW9zL0xhcmdlTWl4TWlnX1JLLnNjZW5hcmlvCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg4NGNlZmQKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvc2NlbmFyaW9zL0xhcmdlTWl4TWlnX1JLLnNjZW5hcmlvCkBAIC0wLDAgKzEsMTAgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8b3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNjZW5hcmlvOlNjZW5hcmlvIHhtaTp2ZXJzaW9uPSIyLjAiIHhtbG5zOnhtaT0iaHR0cDovL3d3dy5vbWcub3JnL1hNSSIgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIgeG1sbnM6b3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNjZW5hcmlvPSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9zY2VuYXJpby5lY29yZSIgeG1sbnM6b3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNlcXVlbmNlcj0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvc2VxdWVuY2VyLmVjb3JlIiB4bWxuczpvcmcuZWNsaXBzZS5zdGVtLnNvbHZlcnMucms9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9zb2x2ZXJzL3JrIiB1Ukk9InBsYXRmb3JtOi9yZXNvdXJjZS9CYXNpY1Rlc3RzL3NjZW5hcmlvcy9MYXJnZU1peE1pZ19SSy5zY2VuYXJpbyIgdHlwZVVSST0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL1NjZW5hcmlvIj4KKyAgPGR1YmxpbkNvcmUgaWRlbnRpZmllcj0icGxhdGZvcm06L3Jlc291cmNlL0Jhc2ljVGVzdHMvc2NlbmFyaW9zL0xhcmdlTWl4TWlnX1JLLnNjZW5hcmlvIiBjcmVhdG9yPSJlZGx1bmQiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvc2NlbmFyaW8uZWNvcmUiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9TY2VuYXJpbyIgY3JlYXRlZD0iMjAxMS0wMi0wMyIvPgorICA8bW9kZWwgaHJlZj0icGxhdGZvcm06L3Jlc291cmNlL0Jhc2ljVGVzdHMvbW9kZWxzL0xhcmdlTWl4TWlnLm1vZGVsIy8iLz4KKyAgPHNlcXVlbmNlciB4c2k6dHlwZT0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNlcXVlbmNlcjpTZXF1ZW50aWFsU2VxdWVuY2VyIiBocmVmPSJwbGF0Zm9ybTovcmVzb3VyY2UvQmFzaWNUZXN0cy9zZXF1ZW5jZXJzLzMwRGF5U2VxdWVuY2VyLnNlcXVlbmNlciMvIi8+CisgIDxzY2VuYXJpb0RlY29yYXRvcnMgaHJlZj0icGxhdGZvcm06L3Jlc291cmNlL0Jhc2ljVGVzdHMvZGVjb3JhdG9ycy9ZZW1lbkluZmVjdG9yLnN0YW5kYXJkIy8iLz4KKyAgPHNvbHZlciB4c2k6dHlwZT0ib3JnLmVjbGlwc2Uuc3RlbS5zb2x2ZXJzLnJrOlJ1bmdlS3V0dGEiIHVSST0ic3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vUnVuZ2VLdXR0YVNvbHZlci9BRUVDQkYzOTE2MUYwMzQ3IiB0eXBlVVJJPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vU29sdmVyIiByZWxhdGl2ZVRvbGVyYW5jZT0iMS4wRS00Ij4KKyAgICA8ZHVibGluQ29yZSBpZGVudGlmaWVyPSJzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9SdW5nZUt1dHRhU29sdmVyL0FFRUNCRjM5MTYxRjAzNDciIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9Tb2x2ZXIiLz4KKyAgPC9zb2x2ZXI+Cis8L29yZy5lY2xpcHNlLnN0ZW0uY29yZS5zY2VuYXJpbzpTY2VuYXJpbz4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9zY2VuYXJpb3MvTm9uWmVyb01vcnRhbGl0eVJhdGVfRkQuc2NlbmFyaW8gYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvc2NlbmFyaW9zL05vblplcm9Nb3J0YWxpdHlSYXRlX0ZELnNjZW5hcmlvCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZjYjE1OGQKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvc2NlbmFyaW9zL05vblplcm9Nb3J0YWxpdHlSYXRlX0ZELnNjZW5hcmlvCkBAIC0wLDAgKzEsMTAgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8b3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNjZW5hcmlvOlNjZW5hcmlvIHhtaTp2ZXJzaW9uPSIyLjAiIHhtbG5zOnhtaT0iaHR0cDovL3d3dy5vbWcub3JnL1hNSSIgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIgeG1sbnM6b3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNjZW5hcmlvPSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9zY2VuYXJpby5lY29yZSIgeG1sbnM6b3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNlcXVlbmNlcj0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvc2VxdWVuY2VyLmVjb3JlIiB4bWxuczpvcmcuZWNsaXBzZS5zdGVtLnNvbHZlcnMuZmQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9zb2x2ZXJzL2ZkIiB1Ukk9InBsYXRmb3JtOi9yZXNvdXJjZS9CYXNpY1Rlc3RzL3NjZW5hcmlvcy9Ob25aZXJvTW9ydGFsaXR5UmF0ZV9GRC5zY2VuYXJpbyIgdHlwZVVSST0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL1NjZW5hcmlvIj4KKyAgPGR1YmxpbkNvcmUgaWRlbnRpZmllcj0icGxhdGZvcm06L3Jlc291cmNlL0Jhc2ljVGVzdHMvc2NlbmFyaW9zL05vblplcm9Nb3J0YWxpdHlSYXRlX0ZELnNjZW5hcmlvIiBjcmVhdG9yPSJlZGx1bmQiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvc2NlbmFyaW8uZWNvcmUiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9TY2VuYXJpbyIgY3JlYXRlZD0iMjAxMS0wMS0zMSIvPgorICA8bW9kZWwgaHJlZj0icGxhdGZvcm06L3Jlc291cmNlL0Jhc2ljVGVzdHMvbW9kZWxzL05vblplcm9Nb3J0YWxpdHlSYXRlTW9kZWwubW9kZWwjLyIvPgorICA8c2VxdWVuY2VyIHhzaTp0eXBlPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2VxdWVuY2VyOlNlcXVlbnRpYWxTZXF1ZW5jZXIiIGhyZWY9InBsYXRmb3JtOi9yZXNvdXJjZS9CYXNpY1Rlc3RzL3NlcXVlbmNlcnMvMzBEYXlTZXF1ZW5jZXIuc2VxdWVuY2VyIy8iLz4KKyAgPHNjZW5hcmlvRGVjb3JhdG9ycyBocmVmPSJwbGF0Zm9ybTovcmVzb3VyY2UvQmFzaWNUZXN0cy9kZWNvcmF0b3JzL0VneXB0SW5mZWN0b3Iuc3RhbmRhcmQjLyIvPgorICA8c29sdmVyIHhzaTp0eXBlPSJvcmcuZWNsaXBzZS5zdGVtLnNvbHZlcnMuZmQ6RmluaXRlRGlmZmVyZW5jZSIgdVJJPSJzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9GaW5pdGVEaWZmZXJlbmNlU29sdmVyL0EzRTY1NUFCNTREQzlCQzUiIHR5cGVVUkk9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9Tb2x2ZXIiPgorICAgIDxkdWJsaW5Db3JlIGlkZW50aWZpZXI9InN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL0Zpbml0ZURpZmZlcmVuY2VTb2x2ZXIvQTNFNjU1QUI1NERDOUJDNSIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL1NvbHZlciIvPgorICA8L3NvbHZlcj4KKzwvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNjZW5hcmlvOlNjZW5hcmlvPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL3NjZW5hcmlvcy9Ob25aZXJvTW9ydGFsaXR5UmF0ZV9SSy5zY2VuYXJpbyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9zY2VuYXJpb3MvTm9uWmVyb01vcnRhbGl0eVJhdGVfUksuc2NlbmFyaW8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDFmYjY4YQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9zY2VuYXJpb3MvTm9uWmVyb01vcnRhbGl0eVJhdGVfUksuc2NlbmFyaW8KQEAgLTAsMCArMSwxMCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2NlbmFyaW86U2NlbmFyaW8geG1pOnZlcnNpb249IjIuMCIgeG1sbnM6eG1pPSJodHRwOi8vd3d3Lm9tZy5vcmcvWE1JIiB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiB4bWxuczpvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2NlbmFyaW89Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3NjZW5hcmlvLmVjb3JlIiB4bWxuczpvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2VxdWVuY2VyPSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9zZXF1ZW5jZXIuZWNvcmUiIHhtbG5zOm9yZy5lY2xpcHNlLnN0ZW0uc29sdmVycy5yaz0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL3NvbHZlcnMvcmsiIHVSST0icGxhdGZvcm06L3Jlc291cmNlL0Jhc2ljVGVzdHMvc2NlbmFyaW9zL05vblplcm9Nb3J0YWxpdHlSYXRlX1JLLnNjZW5hcmlvIiB0eXBlVVJJPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vU2NlbmFyaW8iPgorICA8ZHVibGluQ29yZSBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcmVzb3VyY2UvQmFzaWNUZXN0cy9zY2VuYXJpb3MvTm9uWmVyb01vcnRhbGl0eVJhdGVfUksuc2NlbmFyaW8iIGNyZWF0b3I9ImVkbHVuZCIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9zY2VuYXJpby5lY29yZSIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL1NjZW5hcmlvIiBjcmVhdGVkPSIyMDExLTAxLTMxIi8+CisgIDxtb2RlbCBocmVmPSJwbGF0Zm9ybTovcmVzb3VyY2UvQmFzaWNUZXN0cy9tb2RlbHMvTm9uWmVyb01vcnRhbGl0eVJhdGVNb2RlbC5tb2RlbCMvIi8+CisgIDxzZXF1ZW5jZXIgeHNpOnR5cGU9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zZXF1ZW5jZXI6U2VxdWVudGlhbFNlcXVlbmNlciIgaHJlZj0icGxhdGZvcm06L3Jlc291cmNlL0Jhc2ljVGVzdHMvc2VxdWVuY2Vycy8zMERheVNlcXVlbmNlci5zZXF1ZW5jZXIjLyIvPgorICA8c2NlbmFyaW9EZWNvcmF0b3JzIGhyZWY9InBsYXRmb3JtOi9yZXNvdXJjZS9CYXNpY1Rlc3RzL2RlY29yYXRvcnMvRWd5cHRJbmZlY3Rvci5zdGFuZGFyZCMvIi8+CisgIDxzb2x2ZXIgeHNpOnR5cGU9Im9yZy5lY2xpcHNlLnN0ZW0uc29sdmVycy5yazpSdW5nZUt1dHRhIiB1Ukk9InN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL1J1bmdlS3V0dGFTb2x2ZXIvODlGOUQzOTlCMTQ4NjU5NSIgdHlwZVVSST0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL1NvbHZlciI+CisgICAgPGR1YmxpbkNvcmUgaWRlbnRpZmllcj0ic3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vUnVuZ2VLdXR0YVNvbHZlci84OUY5RDM5OUIxNDg2NTk1IiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vU29sdmVyIi8+CisgIDwvc29sdmVyPgorPC9vcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2NlbmFyaW86U2NlbmFyaW8+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvc2NlbmFyaW9zL1BvcHVsYXRpb25Hcm93dGhTRUlSX0ZELnNjZW5hcmlvIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL3NjZW5hcmlvcy9Qb3B1bGF0aW9uR3Jvd3RoU0VJUl9GRC5zY2VuYXJpbwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYTJjZGU1Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL3NjZW5hcmlvcy9Qb3B1bGF0aW9uR3Jvd3RoU0VJUl9GRC5zY2VuYXJpbwpAQCAtMCwwICsxLDEwIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zY2VuYXJpbzpTY2VuYXJpbyB4bWk6dmVyc2lvbj0iMi4wIiB4bWxuczp4bWk9Imh0dHA6Ly93d3cub21nLm9yZy9YTUkiIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIHhtbG5zOm9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zY2VuYXJpbz0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvc2NlbmFyaW8uZWNvcmUiIHhtbG5zOm9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zZXF1ZW5jZXI9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3NlcXVlbmNlci5lY29yZSIgeG1sbnM6b3JnLmVjbGlwc2Uuc3RlbS5zb2x2ZXJzLmZkPSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vc29sdmVycy9mZCIgdVJJPSJwbGF0Zm9ybTovcmVzb3VyY2UvQmFzaWNUZXN0cy9zY2VuYXJpb3MvUG9wdWxhdGlvbkdyb3d0aFNFSVJfRkQuc2NlbmFyaW8iIHR5cGVVUkk9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9TY2VuYXJpbyI+CisgIDxkdWJsaW5Db3JlIGlkZW50aWZpZXI9InBsYXRmb3JtOi9yZXNvdXJjZS9CYXNpY1Rlc3RzL3NjZW5hcmlvcy9Qb3B1bGF0aW9uR3Jvd3RoU0VJUl9GRC5zY2VuYXJpbyIgY3JlYXRvcj0iZWRsdW5kIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3NjZW5hcmlvLmVjb3JlIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vU2NlbmFyaW8iIGNyZWF0ZWQ9IjIwMTEtMDEtMjgiLz4KKyAgPG1vZGVsIGhyZWY9InBsYXRmb3JtOi9yZXNvdXJjZS9CYXNpY1Rlc3RzL21vZGVscy9Qb3B1bGF0aW9uR3Jvd3RoTW9kZWwubW9kZWwjLyIvPgorICA8c2VxdWVuY2VyIHhzaTp0eXBlPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2VxdWVuY2VyOlNlcXVlbnRpYWxTZXF1ZW5jZXIiIGhyZWY9InBsYXRmb3JtOi9yZXNvdXJjZS9CYXNpY1Rlc3RzL3NlcXVlbmNlcnMvMzBEYXlTZXF1ZW5jZXIuc2VxdWVuY2VyIy8iLz4KKyAgPHNjZW5hcmlvRGVjb3JhdG9ycyBocmVmPSJwbGF0Zm9ybTovcmVzb3VyY2UvQmFzaWNUZXN0cy9kZWNvcmF0b3JzL0VneXB0SW5mZWN0b3Iuc3RhbmRhcmQjLyIvPgorICA8c29sdmVyIHhzaTp0eXBlPSJvcmcuZWNsaXBzZS5zdGVtLnNvbHZlcnMuZmQ6RmluaXRlRGlmZmVyZW5jZSIgdVJJPSJzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9GaW5pdGVEaWZmZXJlbmNlU29sdmVyLzVGQ0I5QjJFNjAxRjA1NzYiIHR5cGVVUkk9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9Tb2x2ZXIiPgorICAgIDxkdWJsaW5Db3JlIGlkZW50aWZpZXI9InN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL0Zpbml0ZURpZmZlcmVuY2VTb2x2ZXIvNUZDQjlCMkU2MDFGMDU3NiIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL1NvbHZlciIvPgorICA8L3NvbHZlcj4KKzwvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNjZW5hcmlvOlNjZW5hcmlvPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL3NjZW5hcmlvcy9Qb3B1bGF0aW9uR3Jvd3RoU0VJUl9SSy5zY2VuYXJpbyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9zY2VuYXJpb3MvUG9wdWxhdGlvbkdyb3d0aFNFSVJfUksuc2NlbmFyaW8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzM5N2ZiMAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9zY2VuYXJpb3MvUG9wdWxhdGlvbkdyb3d0aFNFSVJfUksuc2NlbmFyaW8KQEAgLTAsMCArMSwxMCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2NlbmFyaW86U2NlbmFyaW8geG1pOnZlcnNpb249IjIuMCIgeG1sbnM6eG1pPSJodHRwOi8vd3d3Lm9tZy5vcmcvWE1JIiB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiB4bWxuczpvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2NlbmFyaW89Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3NjZW5hcmlvLmVjb3JlIiB4bWxuczpvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2VxdWVuY2VyPSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9zZXF1ZW5jZXIuZWNvcmUiIHhtbG5zOm9yZy5lY2xpcHNlLnN0ZW0uc29sdmVycy5yaz0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL3NvbHZlcnMvcmsiIHVSST0icGxhdGZvcm06L3Jlc291cmNlL0Jhc2ljVGVzdHMvc2NlbmFyaW9zL1BvcHVsYXRpb25Hcm93dGhTRUlSX1JLLnNjZW5hcmlvIiB0eXBlVVJJPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vU2NlbmFyaW8iPgorICA8ZHVibGluQ29yZSBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcmVzb3VyY2UvQmFzaWNUZXN0cy9zY2VuYXJpb3MvUG9wdWxhdGlvbkdyb3d0aFNFSVJfUksuc2NlbmFyaW8iIGNyZWF0b3I9ImVkbHVuZCIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9zY2VuYXJpby5lY29yZSIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL1NjZW5hcmlvIiBjcmVhdGVkPSIyMDExLTAxLTI4Ii8+CisgIDxtb2RlbCBocmVmPSJwbGF0Zm9ybTovcmVzb3VyY2UvQmFzaWNUZXN0cy9tb2RlbHMvUG9wdWxhdGlvbkdyb3d0aE1vZGVsLm1vZGVsIy8iLz4KKyAgPHNlcXVlbmNlciB4c2k6dHlwZT0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNlcXVlbmNlcjpTZXF1ZW50aWFsU2VxdWVuY2VyIiBocmVmPSJwbGF0Zm9ybTovcmVzb3VyY2UvQmFzaWNUZXN0cy9zZXF1ZW5jZXJzLzMwRGF5U2VxdWVuY2VyLnNlcXVlbmNlciMvIi8+CisgIDxzY2VuYXJpb0RlY29yYXRvcnMgaHJlZj0icGxhdGZvcm06L3Jlc291cmNlL0Jhc2ljVGVzdHMvZGVjb3JhdG9ycy9FZ3lwdEluZmVjdG9yLnN0YW5kYXJkIy8iLz4KKyAgPHNvbHZlciB4c2k6dHlwZT0ib3JnLmVjbGlwc2Uuc3RlbS5zb2x2ZXJzLnJrOlJ1bmdlS3V0dGEiIHVSST0ic3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vUnVuZ2VLdXR0YVNvbHZlci9BQzI1M0IxQTJEMjVCRjZFIiB0eXBlVVJJPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vU29sdmVyIj4KKyAgICA8ZHVibGluQ29yZSBpZGVudGlmaWVyPSJzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9SdW5nZUt1dHRhU29sdmVyL0FDMjUzQjFBMkQyNUJGNkUiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9Tb2x2ZXIiLz4KKyAgPC9zb2x2ZXI+Cis8L29yZy5lY2xpcHNlLnN0ZW0uY29yZS5zY2VuYXJpbzpTY2VuYXJpbz4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9zY2VuYXJpb3MvU2luZ2xlU3F1YXJlU0VJUl9GRC5zY2VuYXJpbyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9zY2VuYXJpb3MvU2luZ2xlU3F1YXJlU0VJUl9GRC5zY2VuYXJpbwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYzJhNDJhCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL3NjZW5hcmlvcy9TaW5nbGVTcXVhcmVTRUlSX0ZELnNjZW5hcmlvCkBAIC0wLDAgKzEsMTAgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8b3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNjZW5hcmlvOlNjZW5hcmlvIHhtaTp2ZXJzaW9uPSIyLjAiIHhtbG5zOnhtaT0iaHR0cDovL3d3dy5vbWcub3JnL1hNSSIgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIgeG1sbnM6b3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNjZW5hcmlvPSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9zY2VuYXJpby5lY29yZSIgeG1sbnM6b3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNlcXVlbmNlcj0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvc2VxdWVuY2VyLmVjb3JlIiB4bWxuczpvcmcuZWNsaXBzZS5zdGVtLnNvbHZlcnMuZmQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9zb2x2ZXJzL2ZkIiB1Ukk9InBsYXRmb3JtOi9yZXNvdXJjZS9CYXNpY1Rlc3RzL3NjZW5hcmlvcy9TaW5nbGVTcXVhcmVTRUlSX0ZELnNjZW5hcmlvIiB0eXBlVVJJPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vU2NlbmFyaW8iPgorICA8ZHVibGluQ29yZSBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcmVzb3VyY2UvQmFzaWNUZXN0cy9zY2VuYXJpb3MvU2luZ2xlU3F1YXJlU0VJUl9GRC5zY2VuYXJpbyIgY3JlYXRvcj0iZWRsdW5kIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3NjZW5hcmlvLmVjb3JlIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vU2NlbmFyaW8iIGNyZWF0ZWQ9IjIwMTEtMDEtMjQiLz4KKyAgPG1vZGVsIGhyZWY9InBsYXRmb3JtOi9yZXNvdXJjZS9CYXNpY1Rlc3RzL21vZGVscy9TaW5nbGVTcXVhcmVTRUlSTW9kZWwubW9kZWwjLyIvPgorICA8c2VxdWVuY2VyIHhzaTp0eXBlPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2VxdWVuY2VyOlNlcXVlbnRpYWxTZXF1ZW5jZXIiIGhyZWY9InBsYXRmb3JtOi9yZXNvdXJjZS9CYXNpY1Rlc3RzL3NlcXVlbmNlcnMvMzBEYXlTZXF1ZW5jZXIuc2VxdWVuY2VyIy8iLz4KKyAgPHNjZW5hcmlvRGVjb3JhdG9ycyBocmVmPSJwbGF0Zm9ybTovcmVzb3VyY2UvQmFzaWNUZXN0cy9kZWNvcmF0b3JzL1NpbmdsZVNxdWFyZVNFSVJJbmZlY3Rvci5zdGFuZGFyZCMvIi8+CisgIDxzb2x2ZXIgeHNpOnR5cGU9Im9yZy5lY2xpcHNlLnN0ZW0uc29sdmVycy5mZDpGaW5pdGVEaWZmZXJlbmNlIiB1Ukk9InN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL0Zpbml0ZURpZmZlcmVuY2VTb2x2ZXIvODQxMzI1NDU2M0JBQzI0MiIgdHlwZVVSST0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL1NvbHZlciI+CisgICAgPGR1YmxpbkNvcmUgaWRlbnRpZmllcj0ic3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vRmluaXRlRGlmZmVyZW5jZVNvbHZlci84NDEzMjU0NTYzQkFDMjQyIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vU29sdmVyIi8+CisgIDwvc29sdmVyPgorPC9vcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2NlbmFyaW86U2NlbmFyaW8+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvc2NlbmFyaW9zL1NpbmdsZVNxdWFyZVNFSVJfUksuc2NlbmFyaW8gYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvc2NlbmFyaW9zL1NpbmdsZVNxdWFyZVNFSVJfUksuc2NlbmFyaW8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODYxZTU3NwotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9zY2VuYXJpb3MvU2luZ2xlU3F1YXJlU0VJUl9SSy5zY2VuYXJpbwpAQCAtMCwwICsxLDEwIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zY2VuYXJpbzpTY2VuYXJpbyB4bWk6dmVyc2lvbj0iMi4wIiB4bWxuczp4bWk9Imh0dHA6Ly93d3cub21nLm9yZy9YTUkiIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIHhtbG5zOm9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zY2VuYXJpbz0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvc2NlbmFyaW8uZWNvcmUiIHhtbG5zOm9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zZXF1ZW5jZXI9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3NlcXVlbmNlci5lY29yZSIgeG1sbnM6b3JnLmVjbGlwc2Uuc3RlbS5zb2x2ZXJzLnJrPSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vc29sdmVycy9yayIgdVJJPSJwbGF0Zm9ybTovcmVzb3VyY2UvQmFzaWNUZXN0cy9zY2VuYXJpb3MvU2luZ2xlU3F1YXJlU0VJUl9SSy5zY2VuYXJpbyIgdHlwZVVSST0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL1NjZW5hcmlvIj4KKyAgPGR1YmxpbkNvcmUgaWRlbnRpZmllcj0icGxhdGZvcm06L3Jlc291cmNlL0Jhc2ljVGVzdHMvc2NlbmFyaW9zL1NpbmdsZVNxdWFyZVNFSVJfUksuc2NlbmFyaW8iIGNyZWF0b3I9ImVkbHVuZCIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9zY2VuYXJpby5lY29yZSIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL1NjZW5hcmlvIiBjcmVhdGVkPSIyMDExLTAxLTI0Ii8+CisgIDxtb2RlbCBocmVmPSJwbGF0Zm9ybTovcmVzb3VyY2UvQmFzaWNUZXN0cy9tb2RlbHMvU2luZ2xlU3F1YXJlU0VJUk1vZGVsLm1vZGVsIy8iLz4KKyAgPHNlcXVlbmNlciB4c2k6dHlwZT0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNlcXVlbmNlcjpTZXF1ZW50aWFsU2VxdWVuY2VyIiBocmVmPSJwbGF0Zm9ybTovcmVzb3VyY2UvQmFzaWNUZXN0cy9zZXF1ZW5jZXJzLzMwRGF5U2VxdWVuY2VyLnNlcXVlbmNlciMvIi8+CisgIDxzY2VuYXJpb0RlY29yYXRvcnMgaHJlZj0icGxhdGZvcm06L3Jlc291cmNlL0Jhc2ljVGVzdHMvZGVjb3JhdG9ycy9TaW5nbGVTcXVhcmVTRUlSSW5mZWN0b3Iuc3RhbmRhcmQjLyIvPgorICA8c29sdmVyIHhzaTp0eXBlPSJvcmcuZWNsaXBzZS5zdGVtLnNvbHZlcnMucms6UnVuZ2VLdXR0YSIgdVJJPSJzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9SdW5nZUt1dHRhU29sdmVyLzIxODUwQUY2Mzc4MDkwOTQiIHR5cGVVUkk9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9Tb2x2ZXIiPgorICAgIDxkdWJsaW5Db3JlIGlkZW50aWZpZXI9InN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL1J1bmdlS3V0dGFTb2x2ZXIvMjE4NTBBRjYzNzgwOTA5NCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL1NvbHZlciIvPgorICA8L3NvbHZlcj4KKzwvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNjZW5hcmlvOlNjZW5hcmlvPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL3NjZW5hcmlvcy9TaW5nbGVTcXVhcmVTSVJfRkQuc2NlbmFyaW8gYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvc2NlbmFyaW9zL1NpbmdsZVNxdWFyZVNJUl9GRC5zY2VuYXJpbwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43M2U0OGEyCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL3NjZW5hcmlvcy9TaW5nbGVTcXVhcmVTSVJfRkQuc2NlbmFyaW8KQEAgLTAsMCArMSwxMCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2NlbmFyaW86U2NlbmFyaW8geG1pOnZlcnNpb249IjIuMCIgeG1sbnM6eG1pPSJodHRwOi8vd3d3Lm9tZy5vcmcvWE1JIiB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiB4bWxuczpvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2NlbmFyaW89Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3NjZW5hcmlvLmVjb3JlIiB4bWxuczpvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2VxdWVuY2VyPSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9zZXF1ZW5jZXIuZWNvcmUiIHhtbG5zOm9yZy5lY2xpcHNlLnN0ZW0uc29sdmVycy5mZD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL3NvbHZlcnMvZmQiIHVSST0icGxhdGZvcm06L3Jlc291cmNlL0Jhc2ljVGVzdHMvc2NlbmFyaW9zL1NpbmdsZVNxdWFyZVNJUl9GRC5zY2VuYXJpbyIgdHlwZVVSST0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL1NjZW5hcmlvIj4KKyAgPGR1YmxpbkNvcmUgaWRlbnRpZmllcj0icGxhdGZvcm06L3Jlc291cmNlL0Jhc2ljVGVzdHMvc2NlbmFyaW9zL1NpbmdsZVNxdWFyZVNJUl9GRC5zY2VuYXJpbyIgY3JlYXRvcj0iZWRsdW5kIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3NjZW5hcmlvLmVjb3JlIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vU2NlbmFyaW8iIGNyZWF0ZWQ9IjIwMTEtMDEtMjQiLz4KKyAgPG1vZGVsIGhyZWY9InBsYXRmb3JtOi9yZXNvdXJjZS9CYXNpY1Rlc3RzL21vZGVscy9TaW5nbGVTcXVhcmVTSVJNb2RlbC5tb2RlbCMvIi8+CisgIDxzZXF1ZW5jZXIgeHNpOnR5cGU9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zZXF1ZW5jZXI6U2VxdWVudGlhbFNlcXVlbmNlciIgaHJlZj0icGxhdGZvcm06L3Jlc291cmNlL0Jhc2ljVGVzdHMvc2VxdWVuY2Vycy8zMERheVNlcXVlbmNlci5zZXF1ZW5jZXIjLyIvPgorICA8c2NlbmFyaW9EZWNvcmF0b3JzIGhyZWY9InBsYXRmb3JtOi9yZXNvdXJjZS9CYXNpY1Rlc3RzL2RlY29yYXRvcnMvU2luZ2xlU3F1YXJlU0lSSW5mZWN0b3Iuc3RhbmRhcmQjLyIvPgorICA8c29sdmVyIHhzaTp0eXBlPSJvcmcuZWNsaXBzZS5zdGVtLnNvbHZlcnMuZmQ6RmluaXRlRGlmZmVyZW5jZSIgdVJJPSJzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9GaW5pdGVEaWZmZXJlbmNlU29sdmVyLzIzMjNFMUJENEIyRjhENjQiIHR5cGVVUkk9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9Tb2x2ZXIiPgorICAgIDxkdWJsaW5Db3JlIGlkZW50aWZpZXI9InN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL0Zpbml0ZURpZmZlcmVuY2VTb2x2ZXIvMjMyM0UxQkQ0QjJGOEQ2NCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL1NvbHZlciIvPgorICA8L3NvbHZlcj4KKzwvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNjZW5hcmlvOlNjZW5hcmlvPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL3NjZW5hcmlvcy9TaW5nbGVTcXVhcmVTSVJfUksuc2NlbmFyaW8gYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvc2NlbmFyaW9zL1NpbmdsZVNxdWFyZVNJUl9SSy5zY2VuYXJpbwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YzU2MGZjCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL3NjZW5hcmlvcy9TaW5nbGVTcXVhcmVTSVJfUksuc2NlbmFyaW8KQEAgLTAsMCArMSwxMCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2NlbmFyaW86U2NlbmFyaW8geG1pOnZlcnNpb249IjIuMCIgeG1sbnM6eG1pPSJodHRwOi8vd3d3Lm9tZy5vcmcvWE1JIiB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiB4bWxuczpvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2NlbmFyaW89Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3NjZW5hcmlvLmVjb3JlIiB4bWxuczpvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2VxdWVuY2VyPSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9zZXF1ZW5jZXIuZWNvcmUiIHhtbG5zOm9yZy5lY2xpcHNlLnN0ZW0uc29sdmVycy5yaz0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL3NvbHZlcnMvcmsiIHVSST0icGxhdGZvcm06L3Jlc291cmNlL0Jhc2ljVGVzdHMvc2NlbmFyaW9zL1NpbmdsZVNxdWFyZVNJUl9SSy5zY2VuYXJpbyIgdHlwZVVSST0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL1NjZW5hcmlvIj4KKyAgPGR1YmxpbkNvcmUgaWRlbnRpZmllcj0icGxhdGZvcm06L3Jlc291cmNlL0Jhc2ljVGVzdHMvc2NlbmFyaW9zL1NpbmdsZVNxdWFyZVNJUl9SSy5zY2VuYXJpbyIgY3JlYXRvcj0iZWRsdW5kIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3NjZW5hcmlvLmVjb3JlIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vU2NlbmFyaW8iIGNyZWF0ZWQ9IjIwMTEtMDEtMjQiLz4KKyAgPG1vZGVsIGhyZWY9InBsYXRmb3JtOi9yZXNvdXJjZS9CYXNpY1Rlc3RzL21vZGVscy9TaW5nbGVTcXVhcmVTSVJNb2RlbC5tb2RlbCMvIi8+CisgIDxzZXF1ZW5jZXIgeHNpOnR5cGU9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zZXF1ZW5jZXI6U2VxdWVudGlhbFNlcXVlbmNlciIgaHJlZj0icGxhdGZvcm06L3Jlc291cmNlL0Jhc2ljVGVzdHMvc2VxdWVuY2Vycy8zMERheVNlcXVlbmNlci5zZXF1ZW5jZXIjLyIvPgorICA8c2NlbmFyaW9EZWNvcmF0b3JzIGhyZWY9InBsYXRmb3JtOi9yZXNvdXJjZS9CYXNpY1Rlc3RzL2RlY29yYXRvcnMvU2luZ2xlU3F1YXJlU0lSSW5mZWN0b3Iuc3RhbmRhcmQjLyIvPgorICA8c29sdmVyIHhzaTp0eXBlPSJvcmcuZWNsaXBzZS5zdGVtLnNvbHZlcnMucms6UnVuZ2VLdXR0YSIgdVJJPSJzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9SdW5nZUt1dHRhU29sdmVyLzNFODJBOTBDRjVFNDEyOEMiIHR5cGVVUkk9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9Tb2x2ZXIiPgorICAgIDxkdWJsaW5Db3JlIGlkZW50aWZpZXI9InN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL1J1bmdlS3V0dGFTb2x2ZXIvM0U4MkE5MENGNUU0MTI4QyIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL1NvbHZlciIvPgorICA8L3NvbHZlcj4KKzwvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNjZW5hcmlvOlNjZW5hcmlvPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL3NjZW5hcmlvcy9TaW5nbGVTcXVhcmVTSV9GRC5zY2VuYXJpbyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9zY2VuYXJpb3MvU2luZ2xlU3F1YXJlU0lfRkQuc2NlbmFyaW8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjI1MTA2YwotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9zY2VuYXJpb3MvU2luZ2xlU3F1YXJlU0lfRkQuc2NlbmFyaW8KQEAgLTAsMCArMSwxMCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2NlbmFyaW86U2NlbmFyaW8geG1pOnZlcnNpb249IjIuMCIgeG1sbnM6eG1pPSJodHRwOi8vd3d3Lm9tZy5vcmcvWE1JIiB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiB4bWxuczpvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2NlbmFyaW89Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3NjZW5hcmlvLmVjb3JlIiB4bWxuczpvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2VxdWVuY2VyPSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9zZXF1ZW5jZXIuZWNvcmUiIHhtbG5zOm9yZy5lY2xpcHNlLnN0ZW0uc29sdmVycy5mZD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL3NvbHZlcnMvZmQiIHVSST0icGxhdGZvcm06L3Jlc291cmNlL0Jhc2ljVGVzdHMvc2NlbmFyaW9zL1NpbmdsZVNxdWFyZVNJX0ZELnNjZW5hcmlvIiB0eXBlVVJJPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vU2NlbmFyaW8iPgorICA8ZHVibGluQ29yZSBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcmVzb3VyY2UvQmFzaWNUZXN0cy9zY2VuYXJpb3MvU2luZ2xlU3F1YXJlU0lfRkQuc2NlbmFyaW8iIGNyZWF0b3I9ImVkbHVuZCIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9zY2VuYXJpby5lY29yZSIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL1NjZW5hcmlvIiBjcmVhdGVkPSIyMDExLTAxLTI0Ii8+CisgIDxtb2RlbCBocmVmPSJwbGF0Zm9ybTovcmVzb3VyY2UvQmFzaWNUZXN0cy9tb2RlbHMvU2luZ2xlU3F1YXJlU0lNb2RlbC5tb2RlbCMvIi8+CisgIDxzZXF1ZW5jZXIgeHNpOnR5cGU9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zZXF1ZW5jZXI6U2VxdWVudGlhbFNlcXVlbmNlciIgaHJlZj0icGxhdGZvcm06L3Jlc291cmNlL0Jhc2ljVGVzdHMvc2VxdWVuY2Vycy8zMERheVNlcXVlbmNlci5zZXF1ZW5jZXIjLyIvPgorICA8c2NlbmFyaW9EZWNvcmF0b3JzIGhyZWY9InBsYXRmb3JtOi9yZXNvdXJjZS9CYXNpY1Rlc3RzL2RlY29yYXRvcnMvU2luZ2xlU3F1YXJlU0lJbmZlY3Rvci5zdGFuZGFyZCMvIi8+CisgIDxzb2x2ZXIgeHNpOnR5cGU9Im9yZy5lY2xpcHNlLnN0ZW0uc29sdmVycy5mZDpGaW5pdGVEaWZmZXJlbmNlIiB1Ukk9InN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL0Zpbml0ZURpZmZlcmVuY2VTb2x2ZXIvN0ZCRjRCQjdFQ0I4REIwMyIgdHlwZVVSST0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL1NvbHZlciI+CisgICAgPGR1YmxpbkNvcmUgaWRlbnRpZmllcj0ic3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vRmluaXRlRGlmZmVyZW5jZVNvbHZlci83RkJGNEJCN0VDQjhEQjAzIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vU29sdmVyIi8+CisgIDwvc29sdmVyPgorPC9vcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2NlbmFyaW86U2NlbmFyaW8+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvc2NlbmFyaW9zL1NpbmdsZVNxdWFyZVNJX1JLLnNjZW5hcmlvIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL3NjZW5hcmlvcy9TaW5nbGVTcXVhcmVTSV9SSy5zY2VuYXJpbwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MTE0ZDBlCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL3NjZW5hcmlvcy9TaW5nbGVTcXVhcmVTSV9SSy5zY2VuYXJpbwpAQCAtMCwwICsxLDEwIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zY2VuYXJpbzpTY2VuYXJpbyB4bWk6dmVyc2lvbj0iMi4wIiB4bWxuczp4bWk9Imh0dHA6Ly93d3cub21nLm9yZy9YTUkiIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIHhtbG5zOm9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zY2VuYXJpbz0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvc2NlbmFyaW8uZWNvcmUiIHhtbG5zOm9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zZXF1ZW5jZXI9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3NlcXVlbmNlci5lY29yZSIgeG1sbnM6b3JnLmVjbGlwc2Uuc3RlbS5zb2x2ZXJzLnJrPSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vc29sdmVycy9yayIgdVJJPSJwbGF0Zm9ybTovcmVzb3VyY2UvQmFzaWNUZXN0cy9zY2VuYXJpb3MvU2luZ2xlU3F1YXJlU0lfUksuc2NlbmFyaW8iIHR5cGVVUkk9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9TY2VuYXJpbyI+CisgIDxkdWJsaW5Db3JlIGlkZW50aWZpZXI9InBsYXRmb3JtOi9yZXNvdXJjZS9CYXNpY1Rlc3RzL3NjZW5hcmlvcy9TaW5nbGVTcXVhcmVTSV9SSy5zY2VuYXJpbyIgY3JlYXRvcj0iZWRsdW5kIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3NjZW5hcmlvLmVjb3JlIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vU2NlbmFyaW8iIGNyZWF0ZWQ9IjIwMTEtMDEtMjQiLz4KKyAgPG1vZGVsIGhyZWY9InBsYXRmb3JtOi9yZXNvdXJjZS9CYXNpY1Rlc3RzL21vZGVscy9TaW5nbGVTcXVhcmVTSU1vZGVsLm1vZGVsIy8iLz4KKyAgPHNlcXVlbmNlciB4c2k6dHlwZT0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNlcXVlbmNlcjpTZXF1ZW50aWFsU2VxdWVuY2VyIiBocmVmPSJwbGF0Zm9ybTovcmVzb3VyY2UvQmFzaWNUZXN0cy9zZXF1ZW5jZXJzLzMwRGF5U2VxdWVuY2VyLnNlcXVlbmNlciMvIi8+CisgIDxzY2VuYXJpb0RlY29yYXRvcnMgaHJlZj0icGxhdGZvcm06L3Jlc291cmNlL0Jhc2ljVGVzdHMvZGVjb3JhdG9ycy9TaW5nbGVTcXVhcmVTSUluZmVjdG9yLnN0YW5kYXJkIy8iLz4KKyAgPHNvbHZlciB4c2k6dHlwZT0ib3JnLmVjbGlwc2Uuc3RlbS5zb2x2ZXJzLnJrOlJ1bmdlS3V0dGEiIHVSST0ic3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vUnVuZ2VLdXR0YVNvbHZlci85MDAzOTE5NTgzQTc4RjIxIiB0eXBlVVJJPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vU29sdmVyIj4KKyAgICA8ZHVibGluQ29yZSBpZGVudGlmaWVyPSJzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9SdW5nZUt1dHRhU29sdmVyLzkwMDM5MTk1ODNBNzhGMjEiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9Tb2x2ZXIiLz4KKyAgPC9zb2x2ZXI+Cis8L29yZy5lY2xpcHNlLnN0ZW0uY29yZS5zY2VuYXJpbzpTY2VuYXJpbz4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9zY2VuYXJpb3MvVHdvU3F1YXJlc01peGluZ01pZ3JhdGlvblNFSVJfRkQuc2NlbmFyaW8gYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvc2NlbmFyaW9zL1R3b1NxdWFyZXNNaXhpbmdNaWdyYXRpb25TRUlSX0ZELnNjZW5hcmlvCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ0MTQ3YWMKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvc2NlbmFyaW9zL1R3b1NxdWFyZXNNaXhpbmdNaWdyYXRpb25TRUlSX0ZELnNjZW5hcmlvCkBAIC0wLDAgKzEsMTAgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8b3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNjZW5hcmlvOlNjZW5hcmlvIHhtaTp2ZXJzaW9uPSIyLjAiIHhtbG5zOnhtaT0iaHR0cDovL3d3dy5vbWcub3JnL1hNSSIgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIgeG1sbnM6b3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNjZW5hcmlvPSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9zY2VuYXJpby5lY29yZSIgeG1sbnM6b3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNlcXVlbmNlcj0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvc2VxdWVuY2VyLmVjb3JlIiB4bWxuczpvcmcuZWNsaXBzZS5zdGVtLnNvbHZlcnMuZmQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9zb2x2ZXJzL2ZkIiB1Ukk9InBsYXRmb3JtOi9yZXNvdXJjZS9CYXNpY1Rlc3RzL3NjZW5hcmlvcy9Ud29TcXVhcmVzTWl4aW5nTWlncmF0aW9uU0VJUl9GRC5zY2VuYXJpbyIgdHlwZVVSST0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL1NjZW5hcmlvIj4KKyAgPGR1YmxpbkNvcmUgaWRlbnRpZmllcj0icGxhdGZvcm06L3Jlc291cmNlL0Jhc2ljVGVzdHMvc2NlbmFyaW9zL1R3b1NxdWFyZXNNaXhpbmdNaWdyYXRpb25TRUlSX0ZELnNjZW5hcmlvIiBjcmVhdG9yPSJlZGx1bmQiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvc2NlbmFyaW8uZWNvcmUiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9TY2VuYXJpbyIgY3JlYXRlZD0iMjAxMS0wMS0yNCIvPgorICA8bW9kZWwgaHJlZj0icGxhdGZvcm06L3Jlc291cmNlL0Jhc2ljVGVzdHMvbW9kZWxzL1R3b1NxdWFyZXNNaXhpbmdNaWdyYXRpb25TRUlSTW9kZWwubW9kZWwjLyIvPgorICA8c2VxdWVuY2VyIHhzaTp0eXBlPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2VxdWVuY2VyOlNlcXVlbnRpYWxTZXF1ZW5jZXIiIGhyZWY9InBsYXRmb3JtOi9yZXNvdXJjZS9CYXNpY1Rlc3RzL3NlcXVlbmNlcnMvMzBEYXlTZXF1ZW5jZXIuc2VxdWVuY2VyIy8iLz4KKyAgPHNjZW5hcmlvRGVjb3JhdG9ycyBocmVmPSJwbGF0Zm9ybTovcmVzb3VyY2UvQmFzaWNUZXN0cy9kZWNvcmF0b3JzL1R3b1NxdWFyZXNTRUlSSW5mZWN0b3Iuc3RhbmRhcmQjLyIvPgorICA8c29sdmVyIHhzaTp0eXBlPSJvcmcuZWNsaXBzZS5zdGVtLnNvbHZlcnMuZmQ6RmluaXRlRGlmZmVyZW5jZSIgdVJJPSJzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9GaW5pdGVEaWZmZXJlbmNlU29sdmVyLzFGMzkzRDE3NEU5OThGQzIiIHR5cGVVUkk9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9Tb2x2ZXIiPgorICAgIDxkdWJsaW5Db3JlIGlkZW50aWZpZXI9InN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL0Zpbml0ZURpZmZlcmVuY2VTb2x2ZXIvMUYzOTNEMTc0RTk5OEZDMiIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL1NvbHZlciIvPgorICA8L3NvbHZlcj4KKzwvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNjZW5hcmlvOlNjZW5hcmlvPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL3NjZW5hcmlvcy9Ud29TcXVhcmVzTWl4aW5nTWlncmF0aW9uU0VJUl9SSy5zY2VuYXJpbyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9zY2VuYXJpb3MvVHdvU3F1YXJlc01peGluZ01pZ3JhdGlvblNFSVJfUksuc2NlbmFyaW8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWJlODM5OQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9zY2VuYXJpb3MvVHdvU3F1YXJlc01peGluZ01pZ3JhdGlvblNFSVJfUksuc2NlbmFyaW8KQEAgLTAsMCArMSwxMCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2NlbmFyaW86U2NlbmFyaW8geG1pOnZlcnNpb249IjIuMCIgeG1sbnM6eG1pPSJodHRwOi8vd3d3Lm9tZy5vcmcvWE1JIiB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiB4bWxuczpvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2NlbmFyaW89Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3NjZW5hcmlvLmVjb3JlIiB4bWxuczpvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2VxdWVuY2VyPSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9zZXF1ZW5jZXIuZWNvcmUiIHhtbG5zOm9yZy5lY2xpcHNlLnN0ZW0uc29sdmVycy5yaz0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL3NvbHZlcnMvcmsiIHVSST0icGxhdGZvcm06L3Jlc291cmNlL0Jhc2ljVGVzdHMvc2NlbmFyaW9zL1R3b1NxdWFyZXNNaXhpbmdNaWdyYXRpb25TRUlSX1JLLnNjZW5hcmlvIiB0eXBlVVJJPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vU2NlbmFyaW8iPgorICA8ZHVibGluQ29yZSBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcmVzb3VyY2UvQmFzaWNUZXN0cy9zY2VuYXJpb3MvVHdvU3F1YXJlc01peGluZ01pZ3JhdGlvblNFSVJfUksuc2NlbmFyaW8iIGNyZWF0b3I9ImVkbHVuZCIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9zY2VuYXJpby5lY29yZSIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL1NjZW5hcmlvIiBjcmVhdGVkPSIyMDExLTAxLTI0Ii8+CisgIDxtb2RlbCBocmVmPSJwbGF0Zm9ybTovcmVzb3VyY2UvQmFzaWNUZXN0cy9tb2RlbHMvVHdvU3F1YXJlc01peGluZ01pZ3JhdGlvblNFSVJNb2RlbC5tb2RlbCMvIi8+CisgIDxzZXF1ZW5jZXIgeHNpOnR5cGU9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zZXF1ZW5jZXI6U2VxdWVudGlhbFNlcXVlbmNlciIgaHJlZj0icGxhdGZvcm06L3Jlc291cmNlL0Jhc2ljVGVzdHMvc2VxdWVuY2Vycy8zMERheVNlcXVlbmNlci5zZXF1ZW5jZXIjLyIvPgorICA8c2NlbmFyaW9EZWNvcmF0b3JzIGhyZWY9InBsYXRmb3JtOi9yZXNvdXJjZS9CYXNpY1Rlc3RzL2RlY29yYXRvcnMvVHdvU3F1YXJlc1NFSVJJbmZlY3Rvci5zdGFuZGFyZCMvIi8+CisgIDxzb2x2ZXIgeHNpOnR5cGU9Im9yZy5lY2xpcHNlLnN0ZW0uc29sdmVycy5yazpSdW5nZUt1dHRhIiB1Ukk9InN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL1J1bmdlS3V0dGFTb2x2ZXIvMjY3M0JBNjFEQzhFODU2QSIgdHlwZVVSST0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL1NvbHZlciIgcmVsYXRpdmVUb2xlcmFuY2U9IjEuMEUtNCI+CisgICAgPGR1YmxpbkNvcmUgaWRlbnRpZmllcj0ic3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vUnVuZ2VLdXR0YVNvbHZlci8yNjczQkE2MURDOEU4NTZBIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vU29sdmVyIi8+CisgIDwvc29sdmVyPgorPC9vcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2NlbmFyaW86U2NlbmFyaW8+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvc2NlbmFyaW9zL1R3b1NxdWFyZXNNaXhpbmdTRUlSX0ZELnNjZW5hcmlvIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL3NjZW5hcmlvcy9Ud29TcXVhcmVzTWl4aW5nU0VJUl9GRC5zY2VuYXJpbwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NmY0NDIzCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL3NjZW5hcmlvcy9Ud29TcXVhcmVzTWl4aW5nU0VJUl9GRC5zY2VuYXJpbwpAQCAtMCwwICsxLDEwIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zY2VuYXJpbzpTY2VuYXJpbyB4bWk6dmVyc2lvbj0iMi4wIiB4bWxuczp4bWk9Imh0dHA6Ly93d3cub21nLm9yZy9YTUkiIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIHhtbG5zOm9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zY2VuYXJpbz0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvc2NlbmFyaW8uZWNvcmUiIHhtbG5zOm9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zZXF1ZW5jZXI9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3NlcXVlbmNlci5lY29yZSIgeG1sbnM6b3JnLmVjbGlwc2Uuc3RlbS5zb2x2ZXJzLmZkPSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vc29sdmVycy9mZCIgdVJJPSJwbGF0Zm9ybTovcmVzb3VyY2UvQmFzaWNUZXN0cy9zY2VuYXJpb3MvVHdvU3F1YXJlc01peGluZ1NFSVJfRkQuc2NlbmFyaW8iIHR5cGVVUkk9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9TY2VuYXJpbyI+CisgIDxkdWJsaW5Db3JlIGlkZW50aWZpZXI9InBsYXRmb3JtOi9yZXNvdXJjZS9CYXNpY1Rlc3RzL3NjZW5hcmlvcy9Ud29TcXVhcmVzTWl4aW5nU0VJUl9GRC5zY2VuYXJpbyIgY3JlYXRvcj0iZWRsdW5kIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3NjZW5hcmlvLmVjb3JlIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vU2NlbmFyaW8iIGNyZWF0ZWQ9IjIwMTEtMDEtMjQiLz4KKyAgPG1vZGVsIGhyZWY9InBsYXRmb3JtOi9yZXNvdXJjZS9CYXNpY1Rlc3RzL21vZGVscy9Ud29TcXVhcmVzTWl4aW5nU0VJUk1vZGVsLm1vZGVsIy8iLz4KKyAgPHNlcXVlbmNlciB4c2k6dHlwZT0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNlcXVlbmNlcjpTZXF1ZW50aWFsU2VxdWVuY2VyIiBocmVmPSJwbGF0Zm9ybTovcmVzb3VyY2UvQmFzaWNUZXN0cy9zZXF1ZW5jZXJzLzMwRGF5U2VxdWVuY2VyLnNlcXVlbmNlciMvIi8+CisgIDxzY2VuYXJpb0RlY29yYXRvcnMgaHJlZj0icGxhdGZvcm06L3Jlc291cmNlL0Jhc2ljVGVzdHMvZGVjb3JhdG9ycy9Ud29TcXVhcmVzU0VJUkluZmVjdG9yLnN0YW5kYXJkIy8iLz4KKyAgPHNvbHZlciB4c2k6dHlwZT0ib3JnLmVjbGlwc2Uuc3RlbS5zb2x2ZXJzLmZkOkZpbml0ZURpZmZlcmVuY2UiIHVSST0ic3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vRmluaXRlRGlmZmVyZW5jZVNvbHZlci8zODg5RkU0RjJFMjBENjQ1IiB0eXBlVVJJPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vU29sdmVyIj4KKyAgICA8ZHVibGluQ29yZSBpZGVudGlmaWVyPSJzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9GaW5pdGVEaWZmZXJlbmNlU29sdmVyLzM4ODlGRTRGMkUyMEQ2NDUiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9Tb2x2ZXIiLz4KKyAgPC9zb2x2ZXI+Cis8L29yZy5lY2xpcHNlLnN0ZW0uY29yZS5zY2VuYXJpbzpTY2VuYXJpbz4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9zY2VuYXJpb3MvVHdvU3F1YXJlc01peGluZ1NFSVJfUksuc2NlbmFyaW8gYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvc2NlbmFyaW9zL1R3b1NxdWFyZXNNaXhpbmdTRUlSX1JLLnNjZW5hcmlvCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmViNGExYTkKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvc2NlbmFyaW9zL1R3b1NxdWFyZXNNaXhpbmdTRUlSX1JLLnNjZW5hcmlvCkBAIC0wLDAgKzEsMTAgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8b3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNjZW5hcmlvOlNjZW5hcmlvIHhtaTp2ZXJzaW9uPSIyLjAiIHhtbG5zOnhtaT0iaHR0cDovL3d3dy5vbWcub3JnL1hNSSIgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIgeG1sbnM6b3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNjZW5hcmlvPSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9zY2VuYXJpby5lY29yZSIgeG1sbnM6b3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNlcXVlbmNlcj0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvc2VxdWVuY2VyLmVjb3JlIiB4bWxuczpvcmcuZWNsaXBzZS5zdGVtLnNvbHZlcnMucms9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9zb2x2ZXJzL3JrIiB1Ukk9InBsYXRmb3JtOi9yZXNvdXJjZS9CYXNpY1Rlc3RzL3NjZW5hcmlvcy9Ud29TcXVhcmVzTWl4aW5nU0VJUl9SSy5zY2VuYXJpbyIgdHlwZVVSST0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL1NjZW5hcmlvIj4KKyAgPGR1YmxpbkNvcmUgaWRlbnRpZmllcj0icGxhdGZvcm06L3Jlc291cmNlL0Jhc2ljVGVzdHMvc2NlbmFyaW9zL1R3b1NxdWFyZXNNaXhpbmdTRUlSX1JLLnNjZW5hcmlvIiBjcmVhdG9yPSJlZGx1bmQiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvc2NlbmFyaW8uZWNvcmUiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9TY2VuYXJpbyIgY3JlYXRlZD0iMjAxMS0wMS0yNCIvPgorICA8bW9kZWwgaHJlZj0icGxhdGZvcm06L3Jlc291cmNlL0Jhc2ljVGVzdHMvbW9kZWxzL1R3b1NxdWFyZXNNaXhpbmdTRUlSTW9kZWwubW9kZWwjLyIvPgorICA8c2VxdWVuY2VyIHhzaTp0eXBlPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2VxdWVuY2VyOlNlcXVlbnRpYWxTZXF1ZW5jZXIiIGhyZWY9InBsYXRmb3JtOi9yZXNvdXJjZS9CYXNpY1Rlc3RzL3NlcXVlbmNlcnMvMzBEYXlTZXF1ZW5jZXIuc2VxdWVuY2VyIy8iLz4KKyAgPHNjZW5hcmlvRGVjb3JhdG9ycyBocmVmPSJwbGF0Zm9ybTovcmVzb3VyY2UvQmFzaWNUZXN0cy9kZWNvcmF0b3JzL1R3b1NxdWFyZXNTRUlSSW5mZWN0b3Iuc3RhbmRhcmQjLyIvPgorICA8c29sdmVyIHhzaTp0eXBlPSJvcmcuZWNsaXBzZS5zdGVtLnNvbHZlcnMucms6UnVuZ2VLdXR0YSIgdVJJPSJzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9SdW5nZUt1dHRhU29sdmVyL0QzMzEzQjdDMUE5MzNGRTYiIHR5cGVVUkk9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9Tb2x2ZXIiPgorICAgIDxkdWJsaW5Db3JlIGlkZW50aWZpZXI9InN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL1J1bmdlS3V0dGFTb2x2ZXIvRDMzMTNCN0MxQTkzM0ZFNiIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL1NvbHZlciIvPgorICA8L3NvbHZlcj4KKzwvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNjZW5hcmlvOlNjZW5hcmlvPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL3NlcXVlbmNlcnMvMzBEYXlTZXF1ZW5jZXIuc2VxdWVuY2VyIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL3NlcXVlbmNlcnMvMzBEYXlTZXF1ZW5jZXIuc2VxdWVuY2VyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUzMDk0OTIKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvc2VxdWVuY2Vycy8zMERheVNlcXVlbmNlci5zZXF1ZW5jZXIKQEAgLTAsMCArMSw2IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zZXF1ZW5jZXI6U2VxdWVudGlhbFNlcXVlbmNlciB4bWk6dmVyc2lvbj0iMi4wIiB4bWxuczp4bWk9Imh0dHA6Ly93d3cub21nLm9yZy9YTUkiIHhtbG5zOm9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zZXF1ZW5jZXI9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3NlcXVlbmNlci5lY29yZSIgdVJJPSJwbGF0Zm9ybTovcmVzb3VyY2UvQmFzaWNUZXN0cy9zZXF1ZW5jZXJzLzMwRGF5U2VxdWVuY2VyLnNlcXVlbmNlciIgdHlwZVVSST0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0lkZW50aWZpYWJsZSI+CisgIDxkdWJsaW5Db3JlIGlkZW50aWZpZXI9InBsYXRmb3JtOi9yZXNvdXJjZS9CYXNpY1Rlc3RzL3NlcXVlbmNlcnMvMzBEYXlTZXF1ZW5jZXIuc2VxdWVuY2VyIiBkZXNjcmlwdGlvbj0iU2VxdWVudGlhbCBTZXF1ZW5jZXIgJnF1b3Q7MzBEYXlTZXF1ZW5jZXImcXVvdDsgc3RhcnRpbmcgZnJvbSAyMDExLTAxLTI0IHRvIDIwMTEtMDItMjQgd2l0aCBhIGN5Y2xlIHBlcmlvZCBvZiAxIGRheS4iIGNyZWF0b3I9ImVkbHVuZCIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9zZXF1ZW5jZXIuZWNvcmUiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9JZGVudGlmaWFibGUiIGNyZWF0ZWQ9IjIwMTEtMDEtMjQiIHZhbGlkPSJzdGFydD0yMDExLTAxLTI0OyBlbmQ9MjAxMS0wMi0yNDsiLz4KKyAgPHN0YXJ0VGltZSB0aW1lPSIyMDExLTAxLTI0VDEyOjAwOjAwLjk2NS0wODAwIi8+CisgIDxlbmRUaW1lIHRpbWU9IjIwMTEtMDItMjRUMTE6NTk6NTkuOTY1LTA4MDAiLz4KKzwvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNlcXVlbmNlcjpTZXF1ZW50aWFsU2VxdWVuY2VyPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2FkYXB0ZXJzL2hpc3RvcnkvSGlzdG9yeVByb3ZpZGVyQWRhcHRlckZhY3RvcnlJbXBsVGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2FkYXB0ZXJzL2hpc3RvcnkvSGlzdG9yeVByb3ZpZGVyQWRhcHRlckZhY3RvcnlJbXBsVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdmZWM1MWIKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vYWRhcHRlcnMvaGlzdG9yeS9IaXN0b3J5UHJvdmlkZXJBZGFwdGVyRmFjdG9yeUltcGxUZXN0LmphdmEKQEAgLTAsMCArMSw5MCBAQAorLy8gSGlzdG9yeVByb3ZpZGVyQWRhcHRlckZhY3RvcnlJbXBsVGVzdC5qYXZhCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uYWRhcHRlcnMuaGlzdG9yeTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmFkYXB0ZXJzLmhpc3RvcnkuSGlzdG9yeVByb3ZpZGVyQWRhcHRlckZhY3RvcnkuSGlzdG9yeVByb3ZpZGVyQWRhcHRlckZhY3RvcnlJbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uSWRlbnRpZmlhYmxlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5TVEVNVGltZTsKKworLyoqCisgKiBUaGlzIGNsYXNzIGlzIGEgSlVuaXQgdGVzdCBjYXNlIGZvciB7QGxpbmsgSGlzdG9yeVByb3ZpZGVyQWRhcHRlckZhY3RvcnlJbXBsfS4KKyAqLworQFN1cHByZXNzV2FybmluZ3MoImFsbCIpCitwdWJsaWMgY2xhc3MgSGlzdG9yeVByb3ZpZGVyQWRhcHRlckZhY3RvcnlJbXBsVGVzdCBleHRlbmRzCisJCUhpc3RvcnlQcm92aWRlckFkYXB0ZXJGYWN0b3J5VGVzdCB7CisKKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgdm9pZCBzZXRVcCgpIHRocm93cyBFeGNlcHRpb24geworCQlzZXRGaXh0dXJlKGNyZWF0ZUZpeHR1cmUoKSk7CisJfQorCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgdGVhckRvd24oKSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJc2V0Rml4dHVyZShudWxsKTsKKwl9CisKKwkvKioKKwkgKiBAcmV0dXJuIHRoZSBmaXh0dXJlIGZvciB0ZXN0aW5nCisJICovCisJcHVibGljIEhpc3RvcnlQcm92aWRlckFkYXB0ZXJGYWN0b3J5IGNyZWF0ZUZpeHR1cmUoKSB7CisJCXJldHVybiBuZXcgSGlzdG9yeVByb3ZpZGVyQWRhcHRlckZhY3RvcnkuSGlzdG9yeVByb3ZpZGVyQWRhcHRlckZhY3RvcnlJbXBsKCkgeworCisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyBPYmplY3QgYWRhcHQoT2JqZWN0IHRhcmdldCwgT2JqZWN0IHR5cGUpIHsKKwkJCQlyZXR1cm4gbmV3IEhpc3RvcnlQcm92aWRlckFkYXB0ZXIoKSB7CisKKwkJCQkJLyoqCisJCQkJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5hZGFwdGVycy5oaXN0b3J5Lkhpc3RvcnlQcm92aWRlckFkYXB0ZXIjZ2V0QWxsSGlzdG9yaWNUaW1lVmFsdWVzKCkKKwkJCQkJICovCisJCQkJCUBPdmVycmlkZQorCQkJCQlwdWJsaWMgU1RFTVRpbWVbXSBnZXRBbGxIaXN0b3JpY1RpbWVWYWx1ZXMoKSB7CisJCQkJCQlyZXR1cm4gc3VwZXIuZ2V0QWxsSGlzdG9yaWNUaW1lVmFsdWVzKCk7CisJCQkJCX0KKworCQkJCQkvKioKKwkJCQkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmFkYXB0ZXJzLmhpc3RvcnkuSGlzdG9yeVByb3ZpZGVyQWRhcHRlciNnZXRBbGxIaXN0b3JpY0luc3RhbmNlcygpCisJCQkJCSAqLworCQkJCQlAT3ZlcnJpZGUKKwkJCQkJcHVibGljIElkZW50aWZpYWJsZVtdIGdldEFsbEhpc3RvcmljSW5zdGFuY2VzKCkgeworCQkJCQkJcmV0dXJuIHN1cGVyLmdldEFsbEhpc3RvcmljSW5zdGFuY2VzKCk7CisJCQkJCX0KKworCQkJCQkvKioKKwkJCQkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmFkYXB0ZXJzLmhpc3RvcnkuSGlzdG9yeVByb3ZpZGVyQWRhcHRlciNnZXRFYXJsaWVzdEN5Y2xlTnVtYmVyKCkKKwkJCQkJICovCisJCQkJCUBPdmVycmlkZQorCQkJCQlwdWJsaWMgaW50IGdldEVhcmxpZXN0Q3ljbGVOdW1iZXIoKSB7CisJCQkJCQlyZXR1cm4gc3VwZXIuZ2V0RWFybGllc3RDeWNsZU51bWJlcigpOworCQkJCQl9CisKKwkJCQkJLyoqCisJCQkJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5hZGFwdGVycy5oaXN0b3J5Lkhpc3RvcnlQcm92aWRlckFkYXB0ZXIjZ2V0RWFybGllc3RUaW1lVmFsdWUoKQorCQkJCQkgKi8KKwkJCQkJQE92ZXJyaWRlCisJCQkJCXB1YmxpYyBTVEVNVGltZSBnZXRFYXJsaWVzdFRpbWVWYWx1ZSgpIHsKKwkJCQkJCXJldHVybiBzdXBlci5nZXRFYXJsaWVzdFRpbWVWYWx1ZSgpOworCQkJCQl9CisKKwkJCQkJLyoqCisJCQkJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5hZGFwdGVycy5oaXN0b3J5Lkhpc3RvcnlQcm92aWRlckFkYXB0ZXIjaXNBZGFwdGVyRm9yVHlwZShqYXZhLmxhbmcuT2JqZWN0KQorCQkJCQkgKi8KKwkJCQkJQE92ZXJyaWRlCisJCQkJCXB1YmxpYyBib29sZWFuIGlzQWRhcHRlckZvclR5cGUoT2JqZWN0IHR5cGUpIHsKKwkJCQkJCXJldHVybiBzdXBlci5pc0FkYXB0ZXJGb3JUeXBlKHR5cGUpOworCQkJCQl9CisJCQkJfTsKKwkJCX0gLy8gYWRhcHQKKwkJfTsKKwl9IC8vIGNyZWF0ZUZpeHR1cmUKKworfSAvLyBIaXN0b3J5UHJvdmlkZXJBZGFwdGVyRmFjdG9yeUltcGxUZXN0CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vYWRhcHRlcnMvaGlzdG9yeS9IaXN0b3J5UHJvdmlkZXJBZGFwdGVyRmFjdG9yeVRlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9hZGFwdGVycy9oaXN0b3J5L0hpc3RvcnlQcm92aWRlckFkYXB0ZXJGYWN0b3J5VGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZkOTM3NzIKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vYWRhcHRlcnMvaGlzdG9yeS9IaXN0b3J5UHJvdmlkZXJBZGFwdGVyRmFjdG9yeVRlc3QuamF2YQpAQCAtMCwwICsxLDQ0IEBACisvLyBIaXN0b3J5UHJvdmlkZXJBZGFwdGVyRmFjdG9yeVRlc3QuamF2YQorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmFkYXB0ZXJzLmhpc3Rvcnk7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOworCisvKioKKyAqIFRoaXMgY2xhc3MgaXMgYSBKVW5pdCB0ZXN0IGNhc2UgZm9yIHtAbGluayBIaXN0b3J5UHJvdmlkZXJBZGFwdGVyRmFjdG9yeX0uCisgKi8KK2Fic3RyYWN0IHB1YmxpYyBjbGFzcyBIaXN0b3J5UHJvdmlkZXJBZGFwdGVyRmFjdG9yeVRlc3QgZXh0ZW5kcyBUZXN0Q2FzZSB7CisKKwkvKioKKwkgKiBUaGlzIGlzIHRoZSBmYWN0b3J5IHVuZGVyIHRlc3QuIFRoZSB2YWx1ZSBpcyBzZXQgaW4gdGhlCisJICogPGNvZGU+c2V0VXA8L2NvZGU+IG1ldGhvZCBvZiBhIGRlcml2ZWQgY2xhc3MuCisJICovCisJcHJvdGVjdGVkIEhpc3RvcnlQcm92aWRlckFkYXB0ZXJGYWN0b3J5IGZpeHR1cmUgPSBudWxsOworCisJQFN1cHByZXNzV2FybmluZ3MoInVucXVhbGlmaWVkLWZpZWxkLWFjY2VzcyIpCisJcHJpdmF0ZSBIaXN0b3J5UHJvdmlkZXJBZGFwdGVyRmFjdG9yeSBnZXRGaXh0dXJlKCkgeworCQlyZXR1cm4gZml4dHVyZTsKKwl9IC8vIFNwYXRpYWxQcm92aWRlckFkYXB0ZXJGYWN0b3J5CisKKwlwcm90ZWN0ZWQgdm9pZCBzZXRGaXh0dXJlKGZpbmFsIEhpc3RvcnlQcm92aWRlckFkYXB0ZXJGYWN0b3J5IGZpeHR1cmUpIHsKKwkJdGhpcy5maXh0dXJlID0gZml4dHVyZTsKKwl9IC8vIHNldEZpeHR1cmUKKworCS8qKgorCSAqLworCXB1YmxpYyB2b2lkIHRlc3RJc0ZhY3RvcnlGb3JUeXBlT2JqZWN0KCkgeworCQlmaW5hbCBIaXN0b3J5UHJvdmlkZXJBZGFwdGVyRmFjdG9yeSBmaXh0dXJlID0gZ2V0Rml4dHVyZSgpOworCQlhc3NlcnRUcnVlKGZpeHR1cmUuaXNGYWN0b3J5Rm9yVHlwZShIaXN0b3J5UHJvdmlkZXIuY2xhc3MpKTsKKwl9IC8vIHRlc3RJc0ZhY3RvcnlGb3JUeXBlT2JqZWN0CisKK30gLy8gSGlzdG9yeVByb3ZpZGVyQWRhcHRlckZhY3RvcnlUZXN0CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vYWRhcHRlcnMvaGlzdG9yeS9IaXN0b3J5UHJvdmlkZXJBZGFwdGVyVGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2FkYXB0ZXJzL2hpc3RvcnkvSGlzdG9yeVByb3ZpZGVyQWRhcHRlclRlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMGZmYzUxCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2FkYXB0ZXJzL2hpc3RvcnkvSGlzdG9yeVByb3ZpZGVyQWRhcHRlclRlc3QuamF2YQpAQCAtMCwwICsxLDQ1IEBACisvLyBIaXN0b3J5UHJvdmlkZXJBZGFwdGVyVGVzdC5qYXZhCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uYWRhcHRlcnMuaGlzdG9yeTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7CisKKy8qKgorICogVGhpcyBjbGFzcyBpcyBhIEpVbml0IHRlc3QgY2FzZSBmb3IgPGNvZGU+SGlzdG9yeVByb3ZpZGVyQWRhcHRlcjwvY29kZT4ncy4gCisgKi8KK2Fic3RyYWN0IHB1YmxpYyBjbGFzcyBIaXN0b3J5UHJvdmlkZXJBZGFwdGVyVGVzdCBleHRlbmRzIFRlc3RDYXNlIHsKKwkvKioKKwkgKiBUaGlzIGlzIHRoZSBhZGFwdGVyIHVuZGVyIHRlc3QuIFRoZSB2YWx1ZSBpcyBzZXQgaW4gdGhlCisJICogPGNvZGU+c2V0VXA8L2NvZGU+IG1ldGhvZCBvZiBhIGRlcml2ZWQgY2xhc3MuCisJICovCisJcHJvdGVjdGVkIEhpc3RvcnlQcm92aWRlckFkYXB0ZXIgZml4dHVyZSA9IG51bGw7CisKKwlAU3VwcHJlc3NXYXJuaW5ncygidW5xdWFsaWZpZWQtZmllbGQtYWNjZXNzIikKKwlwcml2YXRlIEhpc3RvcnlQcm92aWRlckFkYXB0ZXIgZ2V0Rml4dHVyZSgpIHsKKwkJcmV0dXJuIGZpeHR1cmU7CisJfSAvLyBTcGF0aWFsUHJvdmlkZXJBZGFwdGVyRmFjdG9yeQorCisJcHJvdGVjdGVkIHZvaWQgc2V0Rml4dHVyZShmaW5hbCBIaXN0b3J5UHJvdmlkZXJBZGFwdGVyIGZpeHR1cmUpIHsKKwkJdGhpcy5maXh0dXJlID0gZml4dHVyZTsKKwl9IC8vIHNldEZpeHR1cmUKKworCS8qKgorCSAqIFRlc3QgbWV0aG9kIGZvcgorCSAqIHtAbGluayBIaXN0b3J5UHJvdmlkZXJBZGFwdGVyI2lzQWRhcHRlckZvclR5cGUoT2JqZWN0KX0KKwkgKi8KKwlwdWJsaWMgdm9pZCB0ZXN0SXNBZGFwdGVyRm9yVHlwZSgpIHsKKwkJZmluYWwgSGlzdG9yeVByb3ZpZGVyQWRhcHRlciBmaXh0dXJlID0gZ2V0Rml4dHVyZSgpOworCQlhc3NlcnRUcnVlKGZpeHR1cmUuaXNBZGFwdGVyRm9yVHlwZShIaXN0b3J5UHJvdmlkZXIuY2xhc3MpKTsKKwl9IC8vIHRlc3RJc0FkYXB0ZXJGb3JUeXBlCisKK30gLy8gSGlzdG9yeVByb3ZpZGVyQWRhcHRlclRlc3QKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vYWRhcHRlcnMvdGltZS9UaW1lUHJvdmlkZXJBZGFwdGVyRmFjdG9yeUltcGxUZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vYWRhcHRlcnMvdGltZS9UaW1lUHJvdmlkZXJBZGFwdGVyRmFjdG9yeUltcGxUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWNhMzM0NAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9hZGFwdGVycy90aW1lL1RpbWVQcm92aWRlckFkYXB0ZXJGYWN0b3J5SW1wbFRlc3QuamF2YQpAQCAtMCwwICsxLDU3IEBACisvLyBUaW1lUHJvdmlkZXJBZGFwdGVyRmFjdG9yeUltcGxUZXN0LmphdmEKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5hZGFwdGVycy50aW1lOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uYWRhcHRlcnMudGltZS5UaW1lUHJvdmlkZXJBZGFwdGVyRmFjdG9yeS5UaW1lUHJvdmlkZXJBZGFwdGVyRmFjdG9yeUltcGw7CisKKy8qKgorICogVGhpcyBjbGFzcyBpcyBhIEpVbml0IHRlc3QgY2FzZSBmb3Ige0BsaW5rIFRpbWVQcm92aWRlckFkYXB0ZXJGYWN0b3J5SW1wbH0uCisgKi8KK0BTdXBwcmVzc1dhcm5pbmdzKCJhbGwiKQorcHVibGljIGNsYXNzIFRpbWVQcm92aWRlckFkYXB0ZXJGYWN0b3J5SW1wbFRlc3QgZXh0ZW5kcworCQlUaW1lUHJvdmlkZXJBZGFwdGVyRmFjdG9yeVRlc3QgeworCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgc2V0VXAoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJc2V0Rml4dHVyZShjcmVhdGVGaXh0dXJlKCkpOworCX0KKworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIHRlYXJEb3duKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCXNldEZpeHR1cmUobnVsbCk7CisJfQorCisJLyoqCisJICogQHJldHVybiB0aGUgZml4dHVyZSBmb3IgdGVzdGluZworCSAqLworCXB1YmxpYyBUaW1lUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSBjcmVhdGVGaXh0dXJlKCkgeworCQlyZXR1cm4gbmV3IFRpbWVQcm92aWRlckFkYXB0ZXJGYWN0b3J5LlRpbWVQcm92aWRlckFkYXB0ZXJGYWN0b3J5SW1wbCgpIHsKKworCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgT2JqZWN0IGFkYXB0KGZpbmFsIE9iamVjdCB0YXJnZXQsIGZpbmFsIE9iamVjdCB0eXBlKSB7CisJCQkJcmV0dXJuIG5ldyBUaW1lUHJvdmlkZXJBZGFwdGVyKCkgeworCisJCQkJCS8qKgorCQkJCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uYWRhcHRlcnMuaGlzdG9yeS4KKwkJCQkJICogCVRpbWVQcm92aWRlckFkYXB0ZXIjaXNBZGFwdGVyRm9yVHlwZShqYXZhLmxhbmcuT2JqZWN0KQorCQkJCQkgKi8KKwkJCQkJQE92ZXJyaWRlCisJCQkJCXB1YmxpYyBib29sZWFuIGlzQWRhcHRlckZvclR5cGUoZmluYWwgT2JqZWN0IHR5cGUpIHsKKwkJCQkJCXJldHVybiBzdXBlci5pc0FkYXB0ZXJGb3JUeXBlKHR5cGUpOworCQkJCQl9CisJCQkJfTsKKwkJCX0gLy8gYWRhcHQKKwkJfTsKKwl9IC8vIGNyZWF0ZUZpeHR1cmUKKworfSAvLyBUaW1lUHJvdmlkZXJBZGFwdGVyRmFjdG9yeUltcGxUZXN0ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2FkYXB0ZXJzL3RpbWUvVGltZVByb3ZpZGVyQWRhcHRlckZhY3RvcnlUZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vYWRhcHRlcnMvdGltZS9UaW1lUHJvdmlkZXJBZGFwdGVyRmFjdG9yeVRlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZTE0YjIzCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2FkYXB0ZXJzL3RpbWUvVGltZVByb3ZpZGVyQWRhcHRlckZhY3RvcnlUZXN0LmphdmEKQEAgLTAsMCArMSw0MyBAQAorLy8gVGltZVByb3ZpZGVyQWRhcHRlckZhY3RvcnlUZXN0LmphdmEKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5hZGFwdGVycy50aW1lOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKKworLyoqCisgKiBUaGlzIGNsYXNzIGlzIGEgSlVuaXQgdGVzdCBjYXNlIGZvciB7QGxpbmsgVGltZVByb3ZpZGVyQWRhcHRlckZhY3Rvcnl9LgorICovCithYnN0cmFjdCBwdWJsaWMgY2xhc3MgVGltZVByb3ZpZGVyQWRhcHRlckZhY3RvcnlUZXN0IGV4dGVuZHMgVGVzdENhc2UgeworCisJLyoqCisJICogVGhpcyBpcyB0aGUgZmFjdG9yeSB1bmRlciB0ZXN0LiBUaGUgdmFsdWUgaXMgc2V0IGluIHRoZQorCSAqIDxjb2RlPnNldFVwPC9jb2RlPiBtZXRob2Qgb2YgYSBkZXJpdmVkIGNsYXNzLgorCSAqLworCXByb3RlY3RlZCBUaW1lUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSBmaXh0dXJlID0gbnVsbDsKKworCXByaXZhdGUgVGltZVByb3ZpZGVyQWRhcHRlckZhY3RvcnkgZ2V0Rml4dHVyZSgpIHsKKwkJcmV0dXJuIGZpeHR1cmU7CisJfSAvLyBnZXRGaXh0dXJlCisKKwlwcm90ZWN0ZWQgdm9pZCBzZXRGaXh0dXJlKGZpbmFsIFRpbWVQcm92aWRlckFkYXB0ZXJGYWN0b3J5IGZpeHR1cmUpIHsKKwkJdGhpcy5maXh0dXJlID0gZml4dHVyZTsKKwl9IC8vIHNldEZpeHR1cmUKKworCS8qKgorCSAqLworCXB1YmxpYyB2b2lkIHRlc3RJc0ZhY3RvcnlGb3JUeXBlT2JqZWN0KCkgeworCQlmaW5hbCBUaW1lUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSBmaXh0dXJlID0gZ2V0Rml4dHVyZSgpOworCQlhc3NlcnRUcnVlKGZpeHR1cmUuaXNGYWN0b3J5Rm9yVHlwZShUaW1lUHJvdmlkZXIuY2xhc3MpKTsKKwl9IC8vIHRlc3RJc0ZhY3RvcnlGb3JUeXBlT2JqZWN0CisKK30gLy8gVGltZVByb3ZpZGVyQWRhcHRlckZhY3RvcnlUZXN0ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2FkYXB0ZXJzL3RpbWUvVGltZVByb3ZpZGVyQWRhcHRlclRlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9hZGFwdGVycy90aW1lL1RpbWVQcm92aWRlckFkYXB0ZXJUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODU2OTExZQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9hZGFwdGVycy90aW1lL1RpbWVQcm92aWRlckFkYXB0ZXJUZXN0LmphdmEKQEAgLTAsMCArMSw0NCBAQAorLy8gVGltZVByb3ZpZGVyQWRhcHRlclRlc3QuamF2YQorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmFkYXB0ZXJzLnRpbWU7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOworCisvKioKKyAqIFRoaXMgY2xhc3MgaXMgYSBKVW5pdCB0ZXN0IGNhc2UgZm9yIHtAbGluayBUaW1lUHJvdmlkZXJBZGFwdGVyfXMuCisgKi8KK2Fic3RyYWN0IHB1YmxpYyBjbGFzcyBUaW1lUHJvdmlkZXJBZGFwdGVyVGVzdCBleHRlbmRzIFRlc3RDYXNlIHsKKwkvKioKKwkgKiBUaGlzIGlzIHRoZSBhZGFwdGVyIHVuZGVyIHRlc3QuIFRoZSB2YWx1ZSBpcyBzZXQgaW4gdGhlCisJICogPGNvZGU+c2V0VXA8L2NvZGU+IG1ldGhvZCBvZiBhIGRlcml2ZWQgY2xhc3MuCisJICovCisJcHJvdGVjdGVkIFRpbWVQcm92aWRlckFkYXB0ZXIgZml4dHVyZSA9IG51bGw7CisKKwlAU3VwcHJlc3NXYXJuaW5ncygidW5xdWFsaWZpZWQtZmllbGQtYWNjZXNzIikKKwlwcml2YXRlIFRpbWVQcm92aWRlckFkYXB0ZXIgZ2V0Rml4dHVyZSgpIHsKKwkJcmV0dXJuIGZpeHR1cmU7CisJfSAvLyBTcGF0aWFsUHJvdmlkZXJBZGFwdGVyRmFjdG9yeQorCisJcHJvdGVjdGVkIHZvaWQgc2V0Rml4dHVyZShmaW5hbCBUaW1lUHJvdmlkZXJBZGFwdGVyIGZpeHR1cmUpIHsKKwkJdGhpcy5maXh0dXJlID0gZml4dHVyZTsKKwl9IC8vIHNldEZpeHR1cmUKKworCS8qKgorCSAqIFRlc3QgbWV0aG9kIGZvciB7QGxpbmsgVGltZVByb3ZpZGVyQWRhcHRlciNpc0FkYXB0ZXJGb3JUeXBlKE9iamVjdCl9CisJICovCisJcHVibGljIHZvaWQgdGVzdElzQWRhcHRlckZvclR5cGUoKSB7CisJCWZpbmFsIFRpbWVQcm92aWRlckFkYXB0ZXIgZml4dHVyZSA9IGdldEZpeHR1cmUoKTsKKwkJYXNzZXJ0VHJ1ZShmaXh0dXJlLmlzQWRhcHRlckZvclR5cGUoVGltZVByb3ZpZGVyLmNsYXNzKSk7CisJfSAvLyB0ZXN0SXNBZGFwdGVyRm9yVHlwZQorCit9IC8vIFRpbWVQcm92aWRlckFkYXB0ZXJUZXN0ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvY29tbW9uL3Rlc3RzL0NvbW1vbkFsbFRlc3RzLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9jb21tb24vdGVzdHMvQ29tbW9uQWxsVGVzdHMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMjI1MmE0Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvY29tbW9uL3Rlc3RzL0NvbW1vbkFsbFRlc3RzLmphdmEKQEAgLTAsMCArMSw1NyBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLnRlc3RzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0OworaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0U3VpdGU7CitpbXBvcnQganVuaXQudGV4dHVpLlRlc3RSdW5uZXI7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIEEgdGVzdCBzdWl0ZSBmb3IgdGhlICc8ZW0+PGI+Q29tbW9uPC9iPjwvZW0+JyBtb2RlbC4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgQ29tbW9uQWxsVGVzdHMgZXh0ZW5kcyBUZXN0U3VpdGUgeworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogQHBhcmFtIGFyZ3MgCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKKwkJVGVzdFJ1bm5lci5ydW4oc3VpdGUoKSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIAorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgc3RhdGljIFRlc3Qgc3VpdGUoKSB7CisJCVRlc3RTdWl0ZSBzdWl0ZSA9IG5ldyBDb21tb25BbGxUZXN0cygiQ29tbW9uIFRlc3RzIik7CisJCXN1aXRlLmFkZFRlc3QoQ29tbW9uVGVzdHMuc3VpdGUoKSk7CisJCXJldHVybiBzdWl0ZTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSBuYW1lIAorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQ29tbW9uQWxsVGVzdHMoU3RyaW5nIG5hbWUpIHsKKwkJc3VwZXIobmFtZSk7CisJfQorCit9IC8vQ29tbW9uQWxsVGVzdHMKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2NvbW1vbi90ZXN0cy9Db21tb25UZXN0cy5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvY29tbW9uL3Rlc3RzL0NvbW1vblRlc3RzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjUxZjgyNwotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2NvbW1vbi90ZXN0cy9Db21tb25UZXN0cy5qYXZhCkBAIC0wLDAgKzEsNTggQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi50ZXN0czsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdDsKK2ltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdFN1aXRlOworaW1wb3J0IGp1bml0LnRleHR1aS5UZXN0UnVubmVyOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiBBIHRlc3Qgc3VpdGUgZm9yIHRoZSAnPGVtPjxiPmNvbW1vbjwvYj48L2VtPicgcGFja2FnZS4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgQ29tbW9uVGVzdHMgZXh0ZW5kcyBUZXN0U3VpdGUgeworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogQHBhcmFtIGFyZ3MgCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+IAorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CisJCVRlc3RSdW5uZXIucnVuKHN1aXRlKCkpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogQHJldHVybiAKKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCXB1YmxpYyBzdGF0aWMgVGVzdCBzdWl0ZSgpIHsKKwkJVGVzdFN1aXRlIHN1aXRlID0gbmV3IENvbW1vblRlc3RzKCJjb21tb24gVGVzdHMiKTsKKwkJc3VpdGUuYWRkVGVzdFN1aXRlKER1YmxpbkNvcmVUZXN0LmNsYXNzKTsKKwkJc3VpdGUuYWRkVGVzdFN1aXRlKElkZW50aWZpYWJsZUltcGxUZXN0LmNsYXNzKTsKKwkJcmV0dXJuIHN1aXRlOworCX0gLy8gc3VpdGUKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogQHBhcmFtIG5hbWUgCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBDb21tb25UZXN0cyhTdHJpbmcgbmFtZSkgeworCQlzdXBlcihuYW1lKTsKKwl9CisKK30gLy9Db21tb25UZXN0cwpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvY29tbW9uL3Rlc3RzL0NvbXBhcmFibGVUZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9jb21tb24vdGVzdHMvQ29tcGFyYWJsZVRlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZjQ1OTVhCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvY29tbW9uL3Rlc3RzL0NvbXBhcmFibGVUZXN0LmphdmEKQEAgLTAsMCArMSw2MiBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLnRlc3RzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogQSB0ZXN0IGNhc2UgZm9yIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5Db21wYXJhYmxlPC9iPjwvZW0+Jy4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgYWJzdHJhY3QgY2xhc3MgQ29tcGFyYWJsZVRlc3QgZXh0ZW5kcyBUZXN0Q2FzZSB7CisKKwkvKioKKwkgKiBUaGUgZml4dHVyZSBmb3IgdGhpcyBDb21wYXJhYmxlIHRlc3QgY2FzZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgQ29tcGFyYWJsZTw/PiBmaXh0dXJlID0gbnVsbDsKKworCS8qKgorCSAqIENvbnN0cnVjdHMgYSBuZXcgQ29tcGFyYWJsZSB0ZXN0IGNhc2Ugd2l0aCB0aGUgZ2l2ZW4gbmFtZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQ29tcGFyYWJsZVRlc3QoU3RyaW5nIG5hbWUpIHsKKwkJc3VwZXIobmFtZSk7CisJfQorCisJLyoqCisJICogU2V0cyB0aGUgZml4dHVyZSBmb3IgdGhpcyBDb21wYXJhYmxlIHRlc3QgY2FzZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBzZXRGaXh0dXJlKENvbXBhcmFibGU8Pz4gZml4dHVyZSkgeworCQl0aGlzLmZpeHR1cmUgPSBmaXh0dXJlOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIGZpeHR1cmUgZm9yIHRoaXMgQ29tcGFyYWJsZSB0ZXN0IGNhc2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIENvbXBhcmFibGU8Pz4gZ2V0Rml4dHVyZSgpIHsKKwkJcmV0dXJuIGZpeHR1cmU7CisJfQorCit9IC8vQ29tcGFyYWJsZVRlc3QKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2NvbW1vbi90ZXN0cy9Db3JlQWxsVGVzdHMuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2NvbW1vbi90ZXN0cy9Db3JlQWxsVGVzdHMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNzI1ZGJlCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvY29tbW9uL3Rlc3RzL0NvcmVBbGxUZXN0cy5qYXZhCkBAIC0wLDAgKzEsNzUgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi50ZXN0czsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdDsKK2ltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdFN1aXRlOworaW1wb3J0IGp1bml0LnRleHR1aS5UZXN0UnVubmVyOworCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmV4cGVyaW1lbnQudGVzdHMuRXhwZXJpbWVudFRlc3RzOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC50ZXN0cy5HcmFwaFRlc3RzOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5sb2dnZXIudGVzdHMuTG9nZ2VyVGVzdHM7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLnRlc3RzLk1vZGVsVGVzdHM7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLnRlc3RzLk1vZGlmaWVyVGVzdHM7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZS50ZXN0cy5QcmVkaWNhdGVUZXN0czsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2NlbmFyaW8udGVzdHMuU2NlbmFyaW9UZXN0czsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2VxdWVuY2VyLnRlc3RzLlNlcXVlbmNlclRlc3RzOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zb2x2ZXIudGVzdHMuU29sdmVyVGVzdHM7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnRyaWdnZXIudGVzdHMuVHJpZ2dlclRlc3RzOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiBBIHRlc3Qgc3VpdGUgZm9yIHRoZSAnPGVtPjxiPkNvcmU8L2I+PC9lbT4nIG1vZGVsLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBDb3JlQWxsVGVzdHMgZXh0ZW5kcyBUZXN0U3VpdGUgeworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKKwkJVGVzdFJ1bm5lci5ydW4oc3VpdGUoKSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHN0YXRpYyBUZXN0IHN1aXRlKCkgeworCQlUZXN0U3VpdGUgc3VpdGUgPSBuZXcgQ29yZUFsbFRlc3RzKCJDb3JlIFRlc3RzIik7IC8vJE5PTi1OTFMtMSQKKwkJc3VpdGUuYWRkVGVzdChDb21tb25UZXN0cy5zdWl0ZSgpKTsKKwkJc3VpdGUuYWRkVGVzdChFeHBlcmltZW50VGVzdHMuc3VpdGUoKSk7CisJCXN1aXRlLmFkZFRlc3QoR3JhcGhUZXN0cy5zdWl0ZSgpKTsKKwkJc3VpdGUuYWRkVGVzdChNb2RlbFRlc3RzLnN1aXRlKCkpOworCQlzdWl0ZS5hZGRUZXN0KE1vZGlmaWVyVGVzdHMuc3VpdGUoKSk7CisJCXN1aXRlLmFkZFRlc3QoUHJlZGljYXRlVGVzdHMuc3VpdGUoKSk7CisJCXN1aXRlLmFkZFRlc3QoU2NlbmFyaW9UZXN0cy5zdWl0ZSgpKTsKKwkJc3VpdGUuYWRkVGVzdChTZXF1ZW5jZXJUZXN0cy5zdWl0ZSgpKTsKKwkJc3VpdGUuYWRkVGVzdChUcmlnZ2VyVGVzdHMuc3VpdGUoKSk7CisJCXN1aXRlLmFkZFRlc3QoU29sdmVyVGVzdHMuc3VpdGUoKSk7CisJCXN1aXRlLmFkZFRlc3QoTG9nZ2VyVGVzdHMuc3VpdGUoKSk7CisJCXJldHVybiBzdWl0ZTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQ29yZUFsbFRlc3RzKFN0cmluZyBuYW1lKSB7CisJCXN1cGVyKG5hbWUpOworCX0KKworfSAvL0NvcmVBbGxUZXN0cwpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvY29tbW9uL3Rlc3RzL0RvdWJsZVZhbHVlTGlzdFRlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2NvbW1vbi90ZXN0cy9Eb3VibGVWYWx1ZUxpc3RUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2IyYTAxNAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2NvbW1vbi90ZXN0cy9Eb3VibGVWYWx1ZUxpc3RUZXN0LmphdmEKQEAgLTAsMCArMSwxMjcgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi50ZXN0czsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAxMCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7CitpbXBvcnQganVuaXQudGV4dHVpLlRlc3RSdW5uZXI7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuRUxpc3Q7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5Db21tb25GYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uRG91YmxlVmFsdWU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5Eb3VibGVWYWx1ZUxpc3Q7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIEEgdGVzdCBjYXNlIGZvciB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+RG91YmxlIFZhbHVlIExpc3Q8L2I+PC9lbT4nLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBEb3VibGVWYWx1ZUxpc3RUZXN0IGV4dGVuZHMgVGVzdENhc2UgeworCQorCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBMSVNUX05BTUUgPSAiRG91YmxlVmFsdWVMaXN0VGVzdExpc3QiOworCXByaXZhdGUgc3RhdGljIGZpbmFsIGludCBOVU1WQUxVRVMgPSAyOworCXByaXZhdGUgc3RhdGljIGZpbmFsIGRvdWJsZSBmaXJzdERWYWx1ZSA9IDEuMDsKKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBkb3VibGUgc2Vjb25kRFZhbHVlID0gMTcuMDsKKworCS8qKgorCSAqIFRoZSBmaXh0dXJlIGZvciB0aGlzIERvdWJsZSBWYWx1ZSBMaXN0IHRlc3QgY2FzZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgRG91YmxlVmFsdWVMaXN0IGZpeHR1cmUgPSBudWxsOworCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgeworCQlUZXN0UnVubmVyLnJ1bihEb3VibGVWYWx1ZUxpc3RUZXN0LmNsYXNzKTsKKwl9CisKKwkvKioKKwkgKiBDb25zdHJ1Y3RzIGEgbmV3IERvdWJsZSBWYWx1ZSBMaXN0IHRlc3QgY2FzZSB3aXRoIHRoZSBnaXZlbiBuYW1lLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBEb3VibGVWYWx1ZUxpc3RUZXN0KFN0cmluZyBuYW1lKSB7CisJCXN1cGVyKG5hbWUpOworCX0KKworCS8qKgorCSAqIFNldHMgdGhlIGZpeHR1cmUgZm9yIHRoaXMgRG91YmxlIFZhbHVlIExpc3QgdGVzdCBjYXNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIHNldEZpeHR1cmUoRG91YmxlVmFsdWVMaXN0IGZpeHR1cmUpIHsKKwkJdGhpcy5maXh0dXJlID0gZml4dHVyZTsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBmaXh0dXJlIGZvciB0aGlzIERvdWJsZSBWYWx1ZSBMaXN0IHRlc3QgY2FzZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgRG91YmxlVmFsdWVMaXN0IGdldEZpeHR1cmUoKSB7CisJCXJldHVybiBmaXh0dXJlOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2Ujc2V0VXAoKQorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgc2V0VXAoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJRG91YmxlVmFsdWVMaXN0IGR2bCA9IENvbW1vbkZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZURvdWJsZVZhbHVlTGlzdCgpOworCQlkdmwuc2V0SWRlbnRpZmllcihMSVNUX05BTUUpOworCQlFTGlzdDxEb3VibGVWYWx1ZT4gZExpc3QgPSBkdmwuZ2V0VmFsdWVzKCk7CisJCURvdWJsZVZhbHVlIGR2MSA9IENvbW1vbkZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZURvdWJsZVZhbHVlKCk7CisJCWR2MS5zZXRWYWx1ZShmaXJzdERWYWx1ZSk7CisJCURvdWJsZVZhbHVlIGR2MiA9IENvbW1vbkZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZURvdWJsZVZhbHVlKCk7CisJCWR2Mi5zZXRWYWx1ZShzZWNvbmREVmFsdWUpOworCQlkTGlzdC5hZGQoZHYxKTsKKwkJZExpc3QuYWRkKGR2Mik7CisJCXNldEZpeHR1cmUoZHZsKTsKKwl9CisJCisJLyoqCisJICogCisJICovCisJcHVibGljIHZvaWQgdGVzdElzVmFsaWQoKSB7CisJCURvdWJsZVZhbHVlTGlzdCBmaXh0dXJlID0gZ2V0Rml4dHVyZSgpOworCQlFTGlzdDxEb3VibGVWYWx1ZT4gZExpc3QgPSBmaXh0dXJlLmdldFZhbHVlcygpOworCQlhc3NlcnRUcnVlKGRMaXN0LnNpemUoKT09TlVNVkFMVUVTKTsKKwkJRG91YmxlVmFsdWUgZHYxID0gZExpc3QuZ2V0KDApOworCQlEb3VibGVWYWx1ZSBkdjIgPSBkTGlzdC5nZXQoMSk7CisJCQorCQlhc3NlcnRUcnVlKGR2MS5nZXRWYWx1ZSgpPT1maXJzdERWYWx1ZSk7CisJCWFzc2VydFRydWUoZHYyLmdldFZhbHVlKCk9PXNlY29uZERWYWx1ZSk7CisJfSAvLyB0ZXN0SXNDb21wbGV0ZQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZSN0ZWFyRG93bigpCisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIHRlYXJEb3duKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCXNldEZpeHR1cmUobnVsbCk7CisJfQorCit9IC8vRG91YmxlVmFsdWVMaXN0VGVzdApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvY29tbW9uL3Rlc3RzL0RvdWJsZVZhbHVlTWF0cml4VGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvY29tbW9uL3Rlc3RzL0RvdWJsZVZhbHVlTWF0cml4VGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQxNzg1NDgKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9jb21tb24vdGVzdHMvRG91YmxlVmFsdWVNYXRyaXhUZXN0LmphdmEKQEAgLTAsMCArMSwxMTIgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi50ZXN0czsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAxMCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7CitpbXBvcnQganVuaXQudGV4dHVpLlRlc3RSdW5uZXI7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuRUxpc3Q7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5Db21tb25GYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uRG91YmxlVmFsdWVMaXN0OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uRG91YmxlVmFsdWVNYXRyaXg7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5pbXBsLkNvbW1vbkZhY3RvcnlJbXBsOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiBBIHRlc3QgY2FzZSBmb3IgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPkRvdWJsZSBWYWx1ZSBNYXRyaXg8L2I+PC9lbT4nLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBEb3VibGVWYWx1ZU1hdHJpeFRlc3QgZXh0ZW5kcyBUZXN0Q2FzZSB7CisKKwkvKioKKwkgKiBUaGUgZml4dHVyZSBmb3IgdGhpcyBEb3VibGUgVmFsdWUgTWF0cml4IHRlc3QgY2FzZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgRG91YmxlVmFsdWVNYXRyaXggZml4dHVyZSA9IG51bGw7CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CisJCVRlc3RSdW5uZXIucnVuKERvdWJsZVZhbHVlTWF0cml4VGVzdC5jbGFzcyk7CisJfQorCisJLyoqCisJICogQ29uc3RydWN0cyBhIG5ldyBEb3VibGUgVmFsdWUgTWF0cml4IHRlc3QgY2FzZSB3aXRoIHRoZSBnaXZlbiBuYW1lLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBEb3VibGVWYWx1ZU1hdHJpeFRlc3QoU3RyaW5nIG5hbWUpIHsKKwkJc3VwZXIobmFtZSk7CisJfQorCisJLyoqCisJICogU2V0cyB0aGUgZml4dHVyZSBmb3IgdGhpcyBEb3VibGUgVmFsdWUgTWF0cml4IHRlc3QgY2FzZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBzZXRGaXh0dXJlKERvdWJsZVZhbHVlTWF0cml4IGZpeHR1cmUpIHsKKwkJdGhpcy5maXh0dXJlID0gZml4dHVyZTsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBmaXh0dXJlIGZvciB0aGlzIERvdWJsZSBWYWx1ZSBNYXRyaXggdGVzdCBjYXNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlwcm90ZWN0ZWQgRG91YmxlVmFsdWVNYXRyaXggZ2V0Rml4dHVyZSgpIHsKKwkJQ29tbW9uRmFjdG9yeSBmYWN0b3J5ID0gQ29tbW9uRmFjdG9yeUltcGwuaW5pdCgpOworCQlmaXh0dXJlID0gZmFjdG9yeS5jcmVhdGVEb3VibGVWYWx1ZU1hdHJpeCgpOworCQlyZXR1cm4gZml4dHVyZTsKKwl9CisJCisJLyoqCisJICoKKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCXB1YmxpYyB2b2lkIHRlc3REb3VibGVWYWx1ZU1hdHJpeCgpIHsKKwkJRG91YmxlVmFsdWVNYXRyaXggZHZtPSBnZXRGaXh0dXJlKCk7CisJCUVMaXN0PERvdWJsZVZhbHVlTGlzdD4gZHZMaXN0ID0gZHZtLmdldFZhbHVlTGlzdHMoKTsKKwkJYXNzZXJ0VHJ1ZShkdkxpc3QgIT0gbnVsbCk7CisJfSAKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2Ujc2V0VXAoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgdm9pZCBzZXRVcCgpIHRocm93cyBFeGNlcHRpb24geworCQlzZXRGaXh0dXJlKENvbW1vbkZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZURvdWJsZVZhbHVlTWF0cml4KCkpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2UjdGVhckRvd24oKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgdm9pZCB0ZWFyRG93bigpIHRocm93cyBFeGNlcHRpb24geworCQlzZXRGaXh0dXJlKG51bGwpOworCX0KKworfSAvL0RvdWJsZVZhbHVlTWF0cml4VGVzdApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvY29tbW9uL3Rlc3RzL0RvdWJsZVZhbHVlVGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvY29tbW9uL3Rlc3RzL0RvdWJsZVZhbHVlVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJkODBhOWYKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9jb21tb24vdGVzdHMvRG91YmxlVmFsdWVUZXN0LmphdmEKQEAgLTAsMCArMSwxMTQgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi50ZXN0czsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAxMCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7CitpbXBvcnQganVuaXQudGV4dHVpLlRlc3RSdW5uZXI7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLkNvbW1vbkZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5Eb3VibGVWYWx1ZTsKKworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiBBIHRlc3QgY2FzZSBmb3IgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPkRvdWJsZSBWYWx1ZTwvYj48L2VtPicuCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIERvdWJsZVZhbHVlVGVzdCBleHRlbmRzIFRlc3RDYXNlIHsKKwkKKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBkb3VibGUgSU5JVElBTF9WQUxVRSA9IDAuMDsKKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBkb3VibGUgTkVYVF9WQUxVRSA9IDEuMDsKKworCS8qKgorCSAqIFRoZSBmaXh0dXJlIGZvciB0aGlzIERvdWJsZSBWYWx1ZSB0ZXN0IGNhc2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIERvdWJsZVZhbHVlIGZpeHR1cmUgPSBudWxsOworCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgeworCQlUZXN0UnVubmVyLnJ1bihEb3VibGVWYWx1ZVRlc3QuY2xhc3MpOworCX0KKworCS8qKgorCSAqIENvbnN0cnVjdHMgYSBuZXcgRG91YmxlIFZhbHVlIHRlc3QgY2FzZSB3aXRoIHRoZSBnaXZlbiBuYW1lLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBEb3VibGVWYWx1ZVRlc3QoU3RyaW5nIG5hbWUpIHsKKwkJc3VwZXIobmFtZSk7CisJfQorCisJLyoqCisJICogU2V0cyB0aGUgZml4dHVyZSBmb3IgdGhpcyBEb3VibGUgVmFsdWUgdGVzdCBjYXNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIHNldEZpeHR1cmUoRG91YmxlVmFsdWUgZml4dHVyZSkgeworCQl0aGlzLmZpeHR1cmUgPSBmaXh0dXJlOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIGZpeHR1cmUgZm9yIHRoaXMgRG91YmxlIFZhbHVlIHRlc3QgY2FzZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgRG91YmxlVmFsdWUgZ2V0Rml4dHVyZSgpIHsKKwkJcmV0dXJuIGZpeHR1cmU7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZSNzZXRVcCgpCisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgdm9pZCBzZXRVcCgpIHRocm93cyBFeGNlcHRpb24geworCQlEb3VibGVWYWx1ZSB0ZXN0VmFsdWUgPSBDb21tb25GYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVEb3VibGVWYWx1ZSgpOworCQl0ZXN0VmFsdWUuc2V0VmFsdWUoSU5JVElBTF9WQUxVRSk7CisJCXNldEZpeHR1cmUodGVzdFZhbHVlKTsKKwl9CisJCisJLyoqCisJICogCisJICovCisJcHVibGljIHZvaWQgdGVzdElzVmFsaWQoKSB7CisJCURvdWJsZVZhbHVlIGZpeHR1cmUgPSBnZXRGaXh0dXJlKCk7CisJCWFzc2VydFRydWUoZml4dHVyZS5nZXRWYWx1ZSgpPT1JTklUSUFMX1ZBTFVFKTsKKwkJZml4dHVyZS5zZXRWYWx1ZShORVhUX1ZBTFVFKTsKKwkJYXNzZXJ0VHJ1ZShmaXh0dXJlLmdldFZhbHVlKCk9PU5FWFRfVkFMVUUpOworCX0gLy8gdGVzdElzQ29tcGxldGUKKworCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZSN0ZWFyRG93bigpCisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIHRlYXJEb3duKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCXNldEZpeHR1cmUobnVsbCk7CisJfQorCit9IC8vRG91YmxlVmFsdWVUZXN0CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9jb21tb24vdGVzdHMvRHVibGluQ29yZVRlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2NvbW1vbi90ZXN0cy9EdWJsaW5Db3JlVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAzZTMyMTAKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9jb21tb24vdGVzdHMvRHVibGluQ29yZVRlc3QuamF2YQpAQCAtMCwwICsxLDMxOCBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLnRlc3RzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGphdmEudXRpbC5DYWxlbmRhcjsKK2ltcG9ydCBqYXZhLnV0aWwuRGF0ZTsKKworaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKK2ltcG9ydCBqdW5pdC50ZXh0dWkuVGVzdFJ1bm5lcjsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS51dGlsLkVjb3JlVXRpbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLkNvbW1vbkZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5EdWJsaW5Db3JlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uaW1wbC5EdWJsaW5Db3JlSW1wbDsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiBBIHRlc3QgY2FzZSBmb3IgdGhlIG1vZGVsIG9iamVjdCAnCisgKiA8ZW0+PGI+RHVibGluIENvcmU8L2I+PC9lbT4nLiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIDxwPgorICogVGhlIGZvbGxvd2luZyBvcGVyYXRpb25zIGFyZSB0ZXN0ZWQ6CisgKiA8dWw+CisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5EdWJsaW5Db3JlI3BvcHVsYXRlKCkgPGVtPlBvcHVsYXRlPC9lbT59PC9saT4KKyAqIDwvdWw+CisgKiA8L3A+CisgKiBAZ2VuZXJhdGVkCisgKi8KK0BTdXBwcmVzc1dhcm5pbmdzKCJhbGwiKQorcHVibGljIGNsYXNzIER1YmxpbkNvcmVUZXN0IGV4dGVuZHMgVGVzdENhc2UgeworCS8vIFVzZWQgd2hlbiBjb21wYXJpbmcgRGF0ZSBpbnN0YW5jZXMgZm9yIGVxdWFsaXR5LgorCWZpbmFsIGxvbmcgTUlMTElTRUNPTkRfVE9MRVJBTkNFID0gNjAwMDA7CisJCisJLyoqCisJICogVGhlIGZpeHR1cmUgZm9yIHRoaXMgRHVibGluIENvcmUgdGVzdCBjYXNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0KKwkgKiBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBEdWJsaW5Db3JlIGZpeHR1cmUgPSBudWxsOworCisJLyoqCisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIFN0cmluZyBURVNUX1NUUklORyA9ICJEdWJsaW4gQ29yZSB0ZXN0IHN0cmluZyI7CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBwYXJhbSBhcmdzCisJICogICAgICAgICAgICA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgeworCQlUZXN0UnVubmVyLnJ1bihEdWJsaW5Db3JlVGVzdC5jbGFzcyk7CisJfQorCisJLyoqCisJICogQ29uc3RydWN0cyBhIG5ldyBEdWJsaW4gQ29yZSB0ZXN0IGNhc2Ugd2l0aCB0aGUgZ2l2ZW4gbmFtZS4gPCEtLQorCSAqIGJlZ2luLXVzZXItZG9jIC0tPiBDb25zdHJ1Y3RzIGEgbmV3IER1YmxpbiBDb3JlIHRlc3QgY2FzZSB3aXRoIHRoZSBnaXZlbgorCSAqIG5hbWUuCisJICogCisJICogQHBhcmFtIG5hbWUKKwkgKiAgICAgICAgICAgIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRHVibGluQ29yZVRlc3QoU3RyaW5nIG5hbWUpIHsKKwkJc3VwZXIobmFtZSk7CisJfQorCisJLyoqCisJICogU2V0cyB0aGUgZml4dHVyZSBmb3IgdGhpcyBEdWJsaW4gQ29yZSB0ZXN0IGNhc2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgc2V0Rml4dHVyZShEdWJsaW5Db3JlIGZpeHR1cmUpIHsKKwkJdGhpcy5maXh0dXJlID0gZml4dHVyZTsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBmaXh0dXJlIGZvciB0aGlzIER1YmxpbiBDb3JlIHRlc3QgY2FzZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jCisJICogLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgRHVibGluQ29yZSBnZXRGaXh0dXJlKCkgeworCQlyZXR1cm4gZml4dHVyZTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZSNzZXRVcCgpCisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIHNldFVwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCXNldEZpeHR1cmUoQ29tbW9uRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlRHVibGluQ29yZSgpKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZSN0ZWFyRG93bigpCisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIHRlYXJEb3duKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCXNldEZpeHR1cmUobnVsbCk7CisJfQorCisJLyoqCisJICogVGVzdHMgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5EdWJsaW5Db3JlI3BvcHVsYXRlKCkKKwkgKiA8ZW0+UG9wdWxhdGU8L2VtPn0nIG9wZXJhdGlvbi4gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MKKwkgKiAtLT4KKwkgKiAKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uRHVibGluQ29yZSNwb3B1bGF0ZSgpCisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlwdWJsaWMgdm9pZCB0ZXN0UG9wdWxhdGUoKSB7CisJCWZpbmFsIFN0cmluZyBjb3JyZWN0RGF0ZVN0cmluZyA9IER1YmxpbkNvcmVJbXBsCisJCQkJLmNyZWF0ZUlTTzg2MDFEYXRlU3RyaW5nKENhbGVuZGFyLmdldEluc3RhbmNlKCkuZ2V0VGltZSgpKTsKKwkJZmluYWwgRHVibGluQ29yZSBkYyA9IGdldEZpeHR1cmUoKTsKKworCQlmaW5hbCBEdWJsaW5Db3JlIHRlbXBEQyA9IGRjLnBvcHVsYXRlKCk7CisJCWFzc2VydFRydWUodGVtcERDID09IGRjKTsKKworCQlhc3NlcnRUcnVlKGRjLmdldENyZWF0ZWQoKS5lcXVhbHMoY29ycmVjdERhdGVTdHJpbmcpKTsKKwkJYXNzZXJ0VHJ1ZShkYy5nZXRDcmVhdG9yKCkuZXF1YWxzKFN5c3RlbS5nZXRQcm9wZXJ0eSgidXNlci5uYW1lIikpKTsKKwl9IC8vIHRlc3RQb3B1bGF0ZQorCisJLyoqCisJICogU2ltcGxlLgorCSAqLworCXB1YmxpYyB2b2lkIHRlc3RHZXRTZXRJZGVudGlmaWVyKCkgeworCQlmaW5hbCBEdWJsaW5Db3JlIGRjID0gZ2V0Rml4dHVyZSgpOworCQlhc3NlcnROdWxsKGRjLmdldElkZW50aWZpZXIoKSk7CisJCWRjLnNldElkZW50aWZpZXIoVEVTVF9TVFJJTkcpOworCQlhc3NlcnRFcXVhbHMoZGMuZ2V0SWRlbnRpZmllcigpLCBURVNUX1NUUklORyk7CisJfSAvLyB0ZXN0R2V0U2V0SWRlbnRpZmllcgorCisJLyoqCisJICogVGVzdCB0aGF0IHNldHRpbmcgdGhlIHZhbGlkIHN0YXJ0IGRhdGUgd29ya3MKKwkgKi8KKwlwdWJsaWMgdm9pZCB0ZXN0U2V0VmFsaWRTdGFydERhdGUoKSB7CisJCWZpbmFsIER1YmxpbkNvcmUgZGMgPSBnZXRGaXh0dXJlKCk7CisJCWZpbmFsIENhbGVuZGFyIGNhbGVuZGFyID0gQ2FsZW5kYXIuZ2V0SW5zdGFuY2UoKTsKKwkJY2FsZW5kYXIuc2V0KDIwMDYsIENhbGVuZGFyLkpVTkUsIDEpOworCQlmaW5hbCBEYXRlIHN0YXJ0RGF0ZSA9IGNhbGVuZGFyLmdldFRpbWUoKTsKKwkJZGMuc2V0VmFsaWQoc3RhcnREYXRlKTsKKworCQlmaW5hbCBTdHJpbmcgdmFsaWREYXRlc1ZhbHVlID0gZGMuZ2V0VmFsaWQoKTsKKwkJYXNzZXJ0VHJ1ZSh2YWxpZERhdGVzVmFsdWUuZXF1YWxzKFZBTElEX1NUQVJUX0RBVEUpKTsKKwl9IC8vIHRlc3RTZXRWYWxpZFN0YXJ0RGF0ZQorCisJcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgVkFMSURfU1RBUlRfREFURV9TVFJJTkcgPSAiMjAwNi0wNi0wMSI7CisKKwlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBWQUxJRF9FTkRfREFURV9TVFJJTkcgPSAiMjAwNi0wNi0wMiI7CisKKwlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBWQUxJRF9TVEFSVF9EQVRFID0gRHVibGluQ29yZUltcGwuU1RBUlQKKwkJCSsgVkFMSURfU1RBUlRfREFURV9TVFJJTkcgKyAiOyI7CisKKwlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBWQUxJRF9TVEFSVF9BTkRfRU5EX0RBVEUgPSBWQUxJRF9TVEFSVF9EQVRFCisJCQkrICIgIiArIER1YmxpbkNvcmVJbXBsLkVORCArIFZBTElEX0VORF9EQVRFX1NUUklORyArICI7IjsKKworCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFZBTElEX1NUQVJUX0FORF9CQURfRU5EX0RBVEUgPSBWQUxJRF9TVEFSVF9EQVRFCisJCQkrICIgIiArIER1YmxpbkNvcmVJbXBsLkVORCArICJhZGZzZjIiICsgIjsiOworCisJLyoqCisJICogVGVzdCB0aGF0IHNldHRpbmcgdGhlIHZhbGlkIHN0YXJ0IGFuZCBlbmQgZGF0ZXMgd29ya3MKKwkgKi8KKwlwdWJsaWMgdm9pZCB0ZXN0U2V0VmFsaWRTdGFydEVuZERhdGVzKCkgeworCQlmaW5hbCBEdWJsaW5Db3JlIGRjID0gZ2V0Rml4dHVyZSgpOworCQlmaW5hbCBDYWxlbmRhciBjYWxlbmRhciA9IENhbGVuZGFyLmdldEluc3RhbmNlKCk7CisJCWNhbGVuZGFyLnNldCgyMDA2LCBDYWxlbmRhci5KVU5FLCAxKTsKKwkJZmluYWwgRGF0ZSBzdGFydERhdGUgPSBjYWxlbmRhci5nZXRUaW1lKCk7CisJCWNhbGVuZGFyLnNldCgyMDA2LCBDYWxlbmRhci5KVU5FLCAyKTsKKwkJZmluYWwgRGF0ZSBlbmREYXRlID0gY2FsZW5kYXIuZ2V0VGltZSgpOworCQlkYy5zZXRWYWxpZChzdGFydERhdGUsIGVuZERhdGUpOworCisJCWZpbmFsIFN0cmluZyB2YWxpZERhdGVzVmFsdWUgPSBkYy5nZXRWYWxpZCgpOworCQlhc3NlcnRUcnVlKHZhbGlkRGF0ZXNWYWx1ZS5lcXVhbHMoVkFMSURfU1RBUlRfQU5EX0VORF9EQVRFKSk7CisJfSAvLyB0ZXN0U2V0VmFsaWRTdGFydEVuZERhdGVzCisKKwkvKioKKwkgKiBUZXN0IHRoYXQgYSB7QGxpbmsgRGF0ZX0gY2FuIGJlIGNyZWF0ZWQgZnJvbSB0aGUgdmFsdWVzIGluIHRoZSB2YWxpZAorCSAqIGZpZWxkLgorCSAqLworCXB1YmxpYyB2b2lkIHRlc3RHZXRWYWxpZFN0YXJ0RGF0ZSgpIHsKKwkJLy8gVGhlIG51bWJlciBvZiBtaWxsaXNlY29uZHMgdHdvIGRhdGVzIGNhbiBkaWZmZXIgYnkgYW5kIHN0aWxsIGJlCisJCS8vIGNvbnNpZGVyZWQgImVxdWFsIiBWYWx1ZTogMSBtaW51dGUKKwkJCisKKwkJZmluYWwgRHVibGluQ29yZSBkYyA9IGdldEZpeHR1cmUoKTsKKwkJZmluYWwgQ2FsZW5kYXIgY2FsZW5kYXIgPSBDYWxlbmRhci5nZXRJbnN0YW5jZSgpOworCQljYWxlbmRhci5zZXQoMjAwNiwgQ2FsZW5kYXIuSlVORSwgMSwgMCwgMCwgMCk7CisJCWZpbmFsIERhdGUgc3RhcnREYXRlID0gY2FsZW5kYXIuZ2V0VGltZSgpOworCQljYWxlbmRhci5zZXQoMjAwNiwgQ2FsZW5kYXIuSlVORSwgMiwgMCwgMCwgMCk7CisJCWZpbmFsIERhdGUgZW5kRGF0ZSA9IGNhbGVuZGFyLmdldFRpbWUoKTsKKworCQkvLyBKdXN0IGEgc3RhcnQgZGF0ZSBmb3IgdGhlIHJhbmdlCisJCWRjLnNldFZhbGlkKHN0YXJ0RGF0ZSk7CisJCURhdGUgc3RhcnQgPSBkYy5nZXRWYWxpZFN0YXJ0RGF0ZSgpOworCQlhc3NlcnRUcnVlKE1hdGguYWJzKHN0YXJ0LmdldFRpbWUoKSAtIHN0YXJ0RGF0ZS5nZXRUaW1lKCkpIDwgTUlMTElTRUNPTkRfVE9MRVJBTkNFKTsKKwkJYXNzZXJ0VHJ1ZShkYy5nZXRWYWxpZEVuZERhdGUoKSA9PSBudWxsKTsKKworCQkvLyBBIHN0YXJ0IGFuZCBhbiBlbmQgZGF0ZSBmb3IgdGhlIHJhbmdlCisJCWRjLnNldFZhbGlkKHN0YXJ0RGF0ZSwgZW5kRGF0ZSk7CisJCXN0YXJ0ID0gZGMuZ2V0VmFsaWRTdGFydERhdGUoKTsKKwkJRGF0ZSBlbmQgPSBkYy5nZXRWYWxpZEVuZERhdGUoKTsKKwkJYXNzZXJ0VHJ1ZShNYXRoLmFicyhzdGFydC5nZXRUaW1lKCkgLSBzdGFydERhdGUuZ2V0VGltZSgpKSA8IE1JTExJU0VDT05EX1RPTEVSQU5DRSk7CisJCWFzc2VydFRydWUoTWF0aC5hYnMoZW5kLmdldFRpbWUoKSAtIGVuZERhdGUuZ2V0VGltZSgpKSA8IE1JTExJU0VDT05EX1RPTEVSQU5DRSk7CisKKwkJLy8gTm8gdmFsaWQgdmFsdWUKKwkJZGMuc2V0VmFsaWQoKFN0cmluZykgbnVsbCk7CisJCWFzc2VydFRydWUoZGMuZ2V0VmFsaWRTdGFydERhdGUoKSA9PSBudWxsKTsKKwkJYXNzZXJ0VHJ1ZShkYy5nZXRWYWxpZEVuZERhdGUoKSA9PSBudWxsKTsKKworCQkvLyBHaWJiZXJpc2gKKwkJZGMuc2V0VmFsaWQoImFzZGZhc2QyMyIpOworCQlhc3NlcnRUcnVlKGRjLmdldFZhbGlkU3RhcnREYXRlKCkgPT0gbnVsbCk7CisJCWFzc2VydFRydWUoZGMuZ2V0VmFsaWRFbmREYXRlKCkgPT0gbnVsbCk7CisKKwkJLy8gR2liYmVyaXNoCisJCWRjLnNldFZhbGlkKFZBTElEX1NUQVJUX0FORF9CQURfRU5EX0RBVEUpOworCQlzdGFydCA9IGRjLmdldFZhbGlkU3RhcnREYXRlKCk7CisJCWVuZCA9IGRjLmdldFZhbGlkRW5kRGF0ZSgpOworCQlhc3NlcnRUcnVlKE1hdGguYWJzKHN0YXJ0LmdldFRpbWUoKSAtIHN0YXJ0RGF0ZS5nZXRUaW1lKCkpIDwgTUlMTElTRUNPTkRfVE9MRVJBTkNFKTsKKwkJYXNzZXJ0VHJ1ZShkYy5nZXRWYWxpZEVuZERhdGUoKSA9PSBudWxsKTsKKwl9IC8vIHRlc3RHZXRWYWxpZFN0YXJ0RGF0ZQorCisJLyoqCisJICogVGVzdCB0aGF0IHRoZSB2YWxpZCBkYXRlIHJhbmdlcyBjYW4gYmUgY29tcGFyZWQuCisJICovCisJcHVibGljIHZvaWQgdGVzdElzVmFsaWRCZWZvcmUoKSB7CisJCWZpbmFsIER1YmxpbkNvcmUgZGNZb3VuZ2VyID0gZ2V0Rml4dHVyZSgpOworCisJCWZpbmFsIENhbGVuZGFyIGNhbGVuZGFyID0gQ2FsZW5kYXIuZ2V0SW5zdGFuY2UoKTsKKwkJY2FsZW5kYXIuc2V0KDIwMDYsIENhbGVuZGFyLkpVTkUsIDEsIDAsIDAsIDApOyAvLyBKdW5lIDEsIDIwMDYKKwkJZmluYWwgRGF0ZSBzdGFydERhdGVZb3VuZ2VyID0gY2FsZW5kYXIuZ2V0VGltZSgpOworCQlkY1lvdW5nZXIuc2V0VmFsaWQoc3RhcnREYXRlWW91bmdlcik7CisKKwkJZmluYWwgRHVibGluQ29yZSBkY09sZGVyID0gKER1YmxpbkNvcmUpIEVjb3JlVXRpbC5jb3B5KGRjWW91bmdlcik7CisJCWNhbGVuZGFyLnNldCgyMDA2LCBDYWxlbmRhci5KVU5FLCAyLCAwLCAwLCAwKTsgLy8gSnVuZSAyLCAyMDA2CisJCWZpbmFsIERhdGUgc3RhcnREYXRlT2xkZXIgPSBjYWxlbmRhci5nZXRUaW1lKCk7CisJCWRjT2xkZXIuc2V0VmFsaWQoc3RhcnREYXRlT2xkZXIpOworCisJCWZpbmFsIER1YmxpbkNvcmUgZGNTYW1lU3RhcnQgPSAoRHVibGluQ29yZSkgRWNvcmVVdGlsLmNvcHkoZGNZb3VuZ2VyKTsKKwkJZGNTYW1lU3RhcnQuc2V0VmFsaWQoc3RhcnREYXRlWW91bmdlcik7CisKKwkJYXNzZXJ0VHJ1ZShkY1lvdW5nZXIuaXNWYWxpZEJlZm9yZShkY09sZGVyKSk7CisJCWFzc2VydEZhbHNlKGRjT2xkZXIuaXNWYWxpZEJlZm9yZShkY1lvdW5nZXIpKTsKKwkJYXNzZXJ0RmFsc2UoZGNZb3VuZ2VyLmlzVmFsaWRCZWZvcmUoZGNTYW1lU3RhcnQpKTsKKworCX0gLy8gdGVzdElzVmFsaWRCZWZvcmUKKworCS8qKgorCSAqIFRlc3QgY29tcHV0aW5nIHRoZSBvdmVybGFwIG9mIHZhbGlkIGRhdGUgcmFuZ2VzLgorCSAqLworCXB1YmxpYyB2b2lkIHRlc3RDb21wdXRlVmFsaWREYXRlUmFuZ2VPdmVybGFwKCkgeworCQlmaW5hbCBEdWJsaW5Db3JlIGRjID0gZ2V0Rml4dHVyZSgpOworCQlmaW5hbCBDYWxlbmRhciBjYWxlbmRhciA9IENhbGVuZGFyLmdldEluc3RhbmNlKCk7CisJCWNhbGVuZGFyLnNldCgyMDA2LCBDYWxlbmRhci5KVU5FLCAxLCAwLCAwLCAwKTsgLy8gSnVuZSAxLCAyMDA2CisJCWZpbmFsIERhdGUganVuMDEwNiA9IGNhbGVuZGFyLmdldFRpbWUoKTsKKwkJY2FsZW5kYXIuc2V0KDIwMDYsIENhbGVuZGFyLkpVTkUsIDMwLCAwLCAwLCAwKTsgLy8gSnVuZSAzMCwgMjAwNgorCQlmaW5hbCBEYXRlIGp1bjMwMDYgPSBjYWxlbmRhci5nZXRUaW1lKCk7CisJCWRjLnNldFZhbGlkKGp1bjAxMDYsanVuMzAwNik7CisKKwkJLy8gT25seSBvdmVyIGxhcHMgc3RhcnQgZGF0ZQorCQlmaW5hbCBEdWJsaW5Db3JlIGRjT3ZlcmxhcFN0YXJ0ID0gKER1YmxpbkNvcmUpIEVjb3JlVXRpbC5jb3B5KGRjKTsKKwkJY2FsZW5kYXIuc2V0KDIwMDYsIENhbGVuZGFyLk1BWSwgMSwgMCwgMCwgMCk7IC8vIE1heSAxLCAyMDA2CisJCWZpbmFsIERhdGUgbWF5MDEwNiA9IGNhbGVuZGFyLmdldFRpbWUoKTsKKwkJY2FsZW5kYXIuc2V0KDIwMDYsIENhbGVuZGFyLkpVTkUsIDE1LCAwLCAwLCAwKTsgLy8gSnVuZSAxNSwgMjAwNgorCQlmaW5hbCBEYXRlIGp1bjE1MDYgPSBjYWxlbmRhci5nZXRUaW1lKCk7CisJCWRjT3ZlcmxhcFN0YXJ0LnNldFZhbGlkKG1heTAxMDYsanVuMTUwNik7CisKKwkJLy8gSW4gYmV0d2Vlbi4uLgorCQlmaW5hbCBEdWJsaW5Db3JlIGRjQmV0d2VlbiA9IChEdWJsaW5Db3JlKSBFY29yZVV0aWwuY29weShkYyk7CisJCWNhbGVuZGFyLnNldCgyMDA2LCBDYWxlbmRhci5KVU5FLCAyLCAwLCAwLCAwKTsgLy8gSnVuZSAyLCAyMDA2CisJCWZpbmFsIERhdGUganVuMDIwNiA9IGNhbGVuZGFyLmdldFRpbWUoKTsKKwkJZGNCZXR3ZWVuLnNldFZhbGlkKGp1bjAyMDYsanVuMTUwNik7CisKKwkJLy8gT25seSBvdmVybGFwcyBlbmQgZGF0ZQorCQlmaW5hbCBEdWJsaW5Db3JlIGRjT3ZlcmxhcEVuZCA9IChEdWJsaW5Db3JlKSBFY29yZVV0aWwuY29weShkYyk7CisJCWNhbGVuZGFyLnNldCgyMDA2LCBDYWxlbmRhci5BVUdVU1QsIDEsIDAsIDAsIDApOyAvLyBBdWd1c3QgMSwgMjAwNgorCQlmaW5hbCBEYXRlIGF1ZzAxMDYgPSBjYWxlbmRhci5nZXRUaW1lKCk7CisJCWRjT3ZlcmxhcEVuZC5zZXRWYWxpZChqdW4wMjA2LGF1ZzAxMDYpOworCisJCS8vIE5vIG92ZXJsYXAKKwkJZmluYWwgRHVibGluQ29yZSBkY05vT3ZlcmxhcCA9IChEdWJsaW5Db3JlKSBFY29yZVV0aWwuY29weShkYyk7CisJCWNhbGVuZGFyLnNldCgyMDA2LCBDYWxlbmRhci5BVUdVU1QsIDMwLCAwLCAwLCAwKTsgLy8gQXVndXN0IDMwLCAyMDA2CisJCWZpbmFsIERhdGUgYXVnMzAwNiA9IGNhbGVuZGFyLmdldFRpbWUoKTsKKwkJZGNOb092ZXJsYXAuc2V0VmFsaWQoYXVnMzAwNixhdWcwMTA2KTsKKworCQlmaW5hbCBEYXRlW10gb3ZlcmxhcFN0YXJ0ID0gZGMuY29tcHV0ZVZhbGlkRGF0ZVJhbmdlT3ZlcmxhcChkY092ZXJsYXBTdGFydCk7CisJCWFzc2VydFRydWUoTWF0aC5hYnMob3ZlcmxhcFN0YXJ0WzBdLmdldFRpbWUoKSAtIGp1bjAxMDYuZ2V0VGltZSgpKSA8IE1JTExJU0VDT05EX1RPTEVSQU5DRSk7CisJCWFzc2VydFRydWUoTWF0aC5hYnMob3ZlcmxhcFN0YXJ0WzFdLmdldFRpbWUoKSAtIGp1bjE1MDYuZ2V0VGltZSgpKSA8IE1JTExJU0VDT05EX1RPTEVSQU5DRSk7CisJCQorCQlmaW5hbCBEYXRlW10gYmV0d2VlbiA9IGRjLmNvbXB1dGVWYWxpZERhdGVSYW5nZU92ZXJsYXAoZGNCZXR3ZWVuKTsKKwkJYXNzZXJ0VHJ1ZShNYXRoLmFicyhiZXR3ZWVuWzBdLmdldFRpbWUoKSAtIGp1bjAyMDYuZ2V0VGltZSgpKSA8IE1JTExJU0VDT05EX1RPTEVSQU5DRSk7CisJCWFzc2VydFRydWUoTWF0aC5hYnMoYmV0d2VlblsxXS5nZXRUaW1lKCkgLSBqdW4xNTA2LmdldFRpbWUoKSkgPCBNSUxMSVNFQ09ORF9UT0xFUkFOQ0UpOworCQkKKwkJZmluYWwgRGF0ZVtdIG92ZXJsYXBFbmQgPSBkYy5jb21wdXRlVmFsaWREYXRlUmFuZ2VPdmVybGFwKGRjT3ZlcmxhcEVuZCk7CisJCWFzc2VydFRydWUoTWF0aC5hYnMob3ZlcmxhcEVuZFswXS5nZXRUaW1lKCkgLSBqdW4wMjA2LmdldFRpbWUoKSkgPCBNSUxMSVNFQ09ORF9UT0xFUkFOQ0UpOworCQlhc3NlcnRUcnVlKE1hdGguYWJzKG92ZXJsYXBFbmRbMV0uZ2V0VGltZSgpIC0ganVuMzAwNi5nZXRUaW1lKCkpIDwgTUlMTElTRUNPTkRfVE9MRVJBTkNFKTsKKwkJCisJCWZpbmFsIERhdGVbXSBub092ZXJsYXBFbmQgPSBkYy5jb21wdXRlVmFsaWREYXRlUmFuZ2VPdmVybGFwKGRjTm9PdmVybGFwKTsKKwkJYXNzZXJ0TnVsbChub092ZXJsYXBFbmQpOworCQkKKwl9IC8vIHRlc3RDb21wdXRlVmFsaWREYXRlUmFuZ2VPdmVybGFwCisKK30gLy8gRHVibGluQ29yZVRlc3QKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2NvbW1vbi90ZXN0cy9JZGVudGlmaWFibGVGaWx0ZXJUZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9jb21tb24vdGVzdHMvSWRlbnRpZmlhYmxlRmlsdGVyVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE3MmM2NmUKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9jb21tb24vdGVzdHMvSWRlbnRpZmlhYmxlRmlsdGVyVGVzdC5qYXZhCkBAIC0wLDAgKzEsMTEzIEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24udGVzdHM7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTAgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOworaW1wb3J0IGp1bml0LnRleHR1aS5UZXN0UnVubmVyOworCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5Db21tb25GYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uSWRlbnRpZmlhYmxlRmlsdGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uaW1wbC5JZGVudGlmaWFibGVGaWx0ZXJJbXBsOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiBBIHRlc3QgY2FzZSBmb3IgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPklkZW50aWZpYWJsZSBGaWx0ZXI8L2I+PC9lbT4nLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBJZGVudGlmaWFibGVGaWx0ZXJUZXN0IGV4dGVuZHMgVGVzdENhc2UgeworCQorCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBJTklUSUFMX1ZBTFVFID0gIlVTIjsKKworCS8qKgorCSAqIFRoZSBmaXh0dXJlIGZvciB0aGlzIElkZW50aWZpYWJsZSBGaWx0ZXIgdGVzdCBjYXNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBJZGVudGlmaWFibGVGaWx0ZXIgZml4dHVyZSA9IG51bGw7CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CisJCVRlc3RSdW5uZXIucnVuKElkZW50aWZpYWJsZUZpbHRlclRlc3QuY2xhc3MpOworCX0KKworCS8qKgorCSAqIENvbnN0cnVjdHMgYSBuZXcgSWRlbnRpZmlhYmxlIEZpbHRlciB0ZXN0IGNhc2Ugd2l0aCB0aGUgZ2l2ZW4gbmFtZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgSWRlbnRpZmlhYmxlRmlsdGVyVGVzdChTdHJpbmcgbmFtZSkgeworCQlzdXBlcihuYW1lKTsKKwl9CisKKwkvKioKKwkgKiBTZXRzIHRoZSBmaXh0dXJlIGZvciB0aGlzIElkZW50aWZpYWJsZSBGaWx0ZXIgdGVzdCBjYXNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIHNldEZpeHR1cmUoSWRlbnRpZmlhYmxlRmlsdGVyIGZpeHR1cmUpIHsKKwkJdGhpcy5maXh0dXJlID0gZml4dHVyZTsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBmaXh0dXJlIGZvciB0aGlzIElkZW50aWZpYWJsZSBGaWx0ZXIgdGVzdCBjYXNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBJZGVudGlmaWFibGVGaWx0ZXIgZ2V0Rml4dHVyZSgpIHsKKwkJcmV0dXJuIGZpeHR1cmU7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZSNzZXRVcCgpCisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgdm9pZCBzZXRVcCgpIHRocm93cyBFeGNlcHRpb24geworCQkvLyB1c2UgdGhlIEltcGwgZm9yIHRlc3RpbmcsIHNob3VsZCBhY2NlcHQgdGhlIFN0cmluZyBhcmd1bWVudAorCQlJZGVudGlmaWFibGVGaWx0ZXJJbXBsIHRlc3RWYWx1ZSA9IG5ldyBJZGVudGlmaWFibGVGaWx0ZXJJbXBsKElOSVRJQUxfVkFMVUUpOzsKKwkJc2V0Rml4dHVyZSh0ZXN0VmFsdWUpOworCX0KKwkKKwkvKioKKwkgKgorCSAqLworCXB1YmxpYyB2b2lkIHRlc3RJc1ZhbGlkKCkgeworCQlJZGVudGlmaWFibGVGaWx0ZXIgZmlsdGVyID0gZ2V0Rml4dHVyZSgpOworCQkvL1RPRE8gd2hhdCBpcyB0aGVyZSB0byB0ZXN0IGhlcmU/CisJCS8vIE5vdGhpbmcgdG8gdGVzdC4gTm8gU2FuZSBNZXRob2QgaW1wbGVtZW50ZWQgeWV0CisJCWFzc2VydFRydWUodHJ1ZSk7CisJfQorCQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZSN0ZWFyRG93bigpCisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIHRlYXJEb3duKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCXNldEZpeHR1cmUobnVsbCk7CisJfQorCit9IC8vSWRlbnRpZmlhYmxlRmlsdGVyVGVzdApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvY29tbW9uL3Rlc3RzL0lkZW50aWZpYWJsZUltcGxUZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9jb21tb24vdGVzdHMvSWRlbnRpZmlhYmxlSW1wbFRlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mOTIwM2RhCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvY29tbW9uL3Rlc3RzL0lkZW50aWZpYWJsZUltcGxUZXN0LmphdmEKQEAgLTAsMCArMSw0NyBAQAorLy8gSWRlbnRpZmlhYmxlSW1wbFRlc3QuamF2YQorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLnRlc3RzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5VUkk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLlNURU1VUkk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5JZGVudGlmaWFibGU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5pbXBsLklkZW50aWZpYWJsZUltcGw7CisKKy8qKgorICogVGhpcyBjbGFzcyByZXByZXNlbnRzIGEgSlVuaXQgdGVzdCBmb3IgSWRlbnRpZmlhYmxlLgorICovCitAU3VwcHJlc3NXYXJuaW5ncygiYWxsIikKK3B1YmxpYyBjbGFzcyBJZGVudGlmaWFibGVJbXBsVGVzdCBleHRlbmRzIElkZW50aWZpYWJsZVRlc3QgeworCisJcHVibGljIHN0YXRpYyBVUkkgSURFTlRJRklBQkxFX1VSSSA9IFNURU1VUkkuY3JlYXRlVVJJKCJpZGVudGlmaWFibGUvaWRlbnRpZmlhYmxlSW1wbFRlc3QiKTsKKwkKKwkKKwkvKioKKwkgKiBAcGFyYW0gbmFtZQorCSAqLworCXB1YmxpYyBJZGVudGlmaWFibGVJbXBsVGVzdChTdHJpbmcgbmFtZSkgeworCQlzdXBlcihuYW1lKTsKKwl9CisKKwkvKioKKwkgKiBAc2VlIGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZSNzZXRVcCgpCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgc2V0VXAoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJZmluYWwgSWRlbnRpZmlhYmxlIGlkID0gbmV3IElkZW50aWZpYWJsZUltcGwoKSB7Lyogbm90aGluZyAqLworCQl9OworCQlpZC5zZXRVUkkoSURFTlRJRklBQkxFX1VSSSk7CisJCXNldEZpeHR1cmUoaWQpOworCX0gLy8gc2V0VXAKKworfSAvLyBJZGVudGlmaWFibGVJbXBsVGVzdApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvY29tbW9uL3Rlc3RzL0lkZW50aWZpYWJsZVRlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2NvbW1vbi90ZXN0cy9JZGVudGlmaWFibGVUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODM0MjI0MAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2NvbW1vbi90ZXN0cy9JZGVudGlmaWFibGVUZXN0LmphdmEKQEAgLTAsMCArMSwxMzIgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi50ZXN0czsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuVVJJOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uRHVibGluQ29yZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLklkZW50aWZpYWJsZTsKKworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IEEgdGVzdCBjYXNlIGZvciB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+SWRlbnRpZmlhYmxlPC9iPjwvZW0+Jy4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogPHA+CisgKiBUaGUgZm9sbG93aW5nIG9wZXJhdGlvbnMgYXJlIHRlc3RlZDoKKyAqIDx1bD4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLlNhbml0eUNoZWNrZXIjc2FuZSgpIDxlbT5TYW5lPC9lbT59PC9saT4KKyAqIDwvdWw+CisgKiA8L3A+CisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBhYnN0cmFjdCBjbGFzcyBJZGVudGlmaWFibGVUZXN0IGV4dGVuZHMgVGVzdENhc2UgeworCisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgVVJJIFRFU1RfVVJJID0gVVJJLmNyZWF0ZVVSSSgiaHR0cDovL3Rlc3R1cmkiKTsKKworCXByaXZhdGUgc3RhdGljIGZpbmFsIFVSSSBURVNUX1RZUEVfVVJJID0gVVJJCisJCQkuY3JlYXRlVVJJKCJodHRwOi8vdGVzdHR5cGV1cmkiKTsKKworCS8qKgorCSAqIFRoZSBmaXh0dXJlIGZvciB0aGlzIElkZW50aWZpYWJsZSB0ZXN0IGNhc2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLQorCSAqIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIElkZW50aWZpYWJsZSBmaXh0dXJlID0gbnVsbDsKKworCS8qKgorCSAqIENvbnN0cnVjdHMgYSBuZXcgSWRlbnRpZmlhYmxlIHRlc3QgY2FzZSB3aXRoIHRoZSBnaXZlbiBuYW1lLiA8IS0tCisJICogYmVnaW4tdXNlci1kb2MgLS0+CisJICogCisJICogQHBhcmFtIG5hbWUKKwkgKiAgICAgICAgICAgIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgSWRlbnRpZmlhYmxlVGVzdChTdHJpbmcgbmFtZSkgeworCQlzdXBlcihuYW1lKTsKKwl9CisKKwkvKioKKwkgKiBTZXRzIHRoZSBmaXh0dXJlIGZvciB0aGlzIElkZW50aWZpYWJsZSB0ZXN0IGNhc2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgc2V0Rml4dHVyZShJZGVudGlmaWFibGUgZml4dHVyZSkgeworCQl0aGlzLmZpeHR1cmUgPSBmaXh0dXJlOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIGZpeHR1cmUgZm9yIHRoaXMgSWRlbnRpZmlhYmxlIHRlc3QgY2FzZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jCisJICogLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgSWRlbnRpZmlhYmxlIGdldEZpeHR1cmUoKSB7CisJCXJldHVybiBmaXh0dXJlOworCX0KKworCS8qKgorCSAqIFRlc3RzIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uSWRlbnRpZmlhYmxlI3NhbmUoKSA8ZW0+U2FuZTwvZW0+fScgb3BlcmF0aW9uLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLklkZW50aWZpYWJsZSNzYW5lKCkKKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCXB1YmxpYyB2b2lkIHRlc3RTYW5lKCkgeworCQlmaW5hbCBJZGVudGlmaWFibGUgaWRlbnRpZmlhYmxlID0gZ2V0Rml4dHVyZSgpOworCQlhc3NlcnRUcnVlKGlkZW50aWZpYWJsZS5zYW5lKCkpOworCX0gLy8gdGVzdFNhbmUKKworCS8qKgorCSAqIFRlc3QgdGhhdCB3aGVuIHNldFVSSSBpcyBjYWxsZWQsIGl0IGFsc28gdXBkYXRlcyB0aGUgSWRlbnRpZmllciBvZiB0aGUKKwkgKiBJZGVudGlmaWFibGUncyBEdWJsaW5Db3JlIGluc3RhbmNlLgorCSAqIAorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJcHVibGljIHZvaWQgdGVzdFNldFVSSSgpIHsKKwkJZmluYWwgSWRlbnRpZmlhYmxlIGlkID0gZ2V0Rml4dHVyZSgpOworCQlmaW5hbCBEdWJsaW5Db3JlIGRjID0gaWQuZ2V0RHVibGluQ29yZSgpOworCisJCWFzc2VydFRydWUoaWQuZ2V0VVJJKCkudG9TdHJpbmcoKS5lcXVhbHMoZGMuZ2V0SWRlbnRpZmllcigpKSk7CisJCWFzc2VydEZhbHNlKFRFU1RfVVJJLnRvU3RyaW5nKCkuZXF1YWxzKGRjLmdldElkZW50aWZpZXIoKSkpOworCQlhc3NlcnRGYWxzZShpZC5nZXRVUkkoKS5lcXVhbHMoVEVTVF9VUkkpKTsKKworCQlpZC5zZXRVUkkoVEVTVF9VUkkpOworCisJCWFzc2VydFRydWUoaWQuZ2V0VVJJKCkudG9TdHJpbmcoKS5lcXVhbHMoZGMuZ2V0SWRlbnRpZmllcigpKSk7CisJCWFzc2VydFRydWUoVEVTVF9VUkkudG9TdHJpbmcoKS5lcXVhbHMoZGMuZ2V0SWRlbnRpZmllcigpKSk7CisJCWFzc2VydFRydWUoaWQuZ2V0VVJJKCkuZXF1YWxzKFRFU1RfVVJJKSk7CisJfSAvLyB0ZXN0U2V0VVJJCisKKwkvKioKKwkgKiBUZXN0IHRoYXQgd2hlbiBzZXRUeXBlVVJJIGlzIGNhbGxlZCwgaXQgYWxzbyB1cGRhdGVzIHRoZSBUeXBlIG9mIHRoZQorCSAqIElkZW50aWZpYWJsZSdzIER1YmxpbkNvcmUgaW5zdGFuY2UuCisJICogCisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlwdWJsaWMgdm9pZCB0ZXN0U2V0VHlwZVVSSSgpIHsKKwkJZmluYWwgSWRlbnRpZmlhYmxlIGlkID0gZ2V0Rml4dHVyZSgpOworCQlmaW5hbCBEdWJsaW5Db3JlIGRjID0gaWQuZ2V0RHVibGluQ29yZSgpOworCisJCWFzc2VydFRydWUoaWQuZ2V0VHlwZVVSSSgpLnRvU3RyaW5nKCkuZXF1YWxzKGRjLmdldFR5cGUoKSkpOworCQlhc3NlcnRGYWxzZShURVNUX1RZUEVfVVJJLnRvU3RyaW5nKCkuZXF1YWxzKGRjLmdldFR5cGUoKSkpOworCQlhc3NlcnRGYWxzZShpZC5nZXRUeXBlVVJJKCkuZXF1YWxzKFRFU1RfVFlQRV9VUkkpKTsKKworCQlpZC5zZXRUeXBlVVJJKFRFU1RfVFlQRV9VUkkpOworCisJCWFzc2VydFRydWUoaWQuZ2V0VHlwZVVSSSgpLnRvU3RyaW5nKCkuZXF1YWxzKGRjLmdldFR5cGUoKSkpOworCQlhc3NlcnRUcnVlKFRFU1RfVFlQRV9VUkkudG9TdHJpbmcoKS5lcXVhbHMoZGMuZ2V0VHlwZSgpKSk7CisJCWFzc2VydFRydWUoaWQuZ2V0VHlwZVVSSSgpLmVxdWFscyhURVNUX1RZUEVfVVJJKSk7CisJfSAvLyB0ZXN0U2V0VHlwZVVSSQorfSAvLyBJZGVudGlmaWFibGVUZXN0CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9jb21tb24vdGVzdHMvU2FuaXR5Q2hlY2tlclRlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2NvbW1vbi90ZXN0cy9TYW5pdHlDaGVja2VyVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlmMzcyZGIKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9jb21tb24vdGVzdHMvU2FuaXR5Q2hlY2tlclRlc3QuamF2YQpAQCAtMCwwICsxLDgyIEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24udGVzdHM7DQorDQorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogDQorICogQ29weXJpZ2h0IChjKSAyMDExIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiANCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIA0KKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCANCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdCANCisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbCANCisgKiANCisgKiBDb250cmlidXRvcnM6IA0KKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gDQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQoraW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsNCisNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5TYW5pdHlDaGVja2VyOw0KKw0KKy8qKg0KKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorICogQSB0ZXN0IGNhc2UgZm9yIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5TYW5pdHkgQ2hlY2tlcjwvYj48L2VtPicuDQorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorICogPHA+DQorICogVGhlIGZvbGxvd2luZyBvcGVyYXRpb25zIGFyZSB0ZXN0ZWQ6DQorICogPHVsPg0KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLlNhbml0eUNoZWNrZXIjc2FuZSgpIDxlbT5TYW5lPC9lbT59PC9saT4NCisgKiA8L3VsPg0KKyAqIDwvcD4NCisgKiBAZ2VuZXJhdGVkDQorICovDQorcHVibGljIGFic3RyYWN0IGNsYXNzIFNhbml0eUNoZWNrZXJUZXN0IGV4dGVuZHMgVGVzdENhc2Ugew0KKw0KKwkvKioNCisJICogVGhlIGZpeHR1cmUgZm9yIHRoaXMgU2FuaXR5IENoZWNrZXIgdGVzdCBjYXNlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIFNhbml0eUNoZWNrZXIgZml4dHVyZSA9IG51bGw7DQorDQorCS8qKg0KKwkgKiBDb25zdHJ1Y3RzIGEgbmV3IFNhbml0eSBDaGVja2VyIHRlc3QgY2FzZSB3aXRoIHRoZSBnaXZlbiBuYW1lLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIFNhbml0eUNoZWNrZXJUZXN0KFN0cmluZyBuYW1lKSB7DQorCQlzdXBlcihuYW1lKTsNCisJfQ0KKw0KKwkvKioNCisJICogU2V0cyB0aGUgZml4dHVyZSBmb3IgdGhpcyBTYW5pdHkgQ2hlY2tlciB0ZXN0IGNhc2UuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgdm9pZCBzZXRGaXh0dXJlKFNhbml0eUNoZWNrZXIgZml4dHVyZSkgew0KKwkJdGhpcy5maXh0dXJlID0gZml4dHVyZTsNCisJfQ0KKw0KKwkvKioNCisJICogUmV0dXJucyB0aGUgZml4dHVyZSBmb3IgdGhpcyBTYW5pdHkgQ2hlY2tlciB0ZXN0IGNhc2UuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgU2FuaXR5Q2hlY2tlciBnZXRGaXh0dXJlKCkgew0KKwkJcmV0dXJuIGZpeHR1cmU7DQorCX0NCisNCisJLyoqDQorCSAqIFRlc3RzIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uU2FuaXR5Q2hlY2tlciNzYW5lKCkgPGVtPlNhbmU8L2VtPn0nIG9wZXJhdGlvbi4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5TYW5pdHlDaGVja2VyI3NhbmUoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgdm9pZCB0ZXN0U2FuZSgpIHsNCisJCS8vIFRPRE86IGltcGxlbWVudCB0aGlzIG9wZXJhdGlvbiB0ZXN0IG1ldGhvZA0KKwkJLy8gRW5zdXJlIHRoYXQgeW91IHJlbW92ZSBAZ2VuZXJhdGVkIG9yIG1hcmsgaXQgQGdlbmVyYXRlZCBOT1QNCisJCWZhaWwoKTsNCisJfQ0KKw0KK30gLy9TYW5pdHlDaGVja2VyVGVzdA0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2NvbW1vbi90ZXN0cy9TdHJpbmdWYWx1ZUxpc3RUZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9jb21tb24vdGVzdHMvU3RyaW5nVmFsdWVMaXN0VGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ0NTZkZTkKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9jb21tb24vdGVzdHMvU3RyaW5nVmFsdWVMaXN0VGVzdC5qYXZhCkBAIC0wLDAgKzEsMTI1IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24udGVzdHM7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTAgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOworaW1wb3J0IGp1bml0LnRleHR1aS5UZXN0UnVubmVyOworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLkVMaXN0OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uQ29tbW9uRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLlN0cmluZ1ZhbHVlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uU3RyaW5nVmFsdWVMaXN0OworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiBBIHRlc3QgY2FzZSBmb3IgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPlN0cmluZyBWYWx1ZSBMaXN0PC9iPjwvZW0+Jy4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgU3RyaW5nVmFsdWVMaXN0VGVzdCBleHRlbmRzIFRlc3RDYXNlIHsKKwkKKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgTlVNX1ZBTFVFUyA9IDI7CisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIElOSVRJQUxfVkFMVUUgPSAiRmlyc3QgVGVzdCBTdHJpbmciOworCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBORVhUX1ZBTFVFID0gIlNlY29uZCAkIyUgVGVzdCBTdHJpbmciOworCQorCS8qKgorCSAqIFRoZSBmaXh0dXJlIGZvciB0aGlzIFN0cmluZyBWYWx1ZSBMaXN0IHRlc3QgY2FzZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgU3RyaW5nVmFsdWVMaXN0IGZpeHR1cmUgPSBudWxsOworCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgeworCQlUZXN0UnVubmVyLnJ1bihTdHJpbmdWYWx1ZUxpc3RUZXN0LmNsYXNzKTsKKwl9CisKKwkvKioKKwkgKiBDb25zdHJ1Y3RzIGEgbmV3IFN0cmluZyBWYWx1ZSBMaXN0IHRlc3QgY2FzZSB3aXRoIHRoZSBnaXZlbiBuYW1lLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBTdHJpbmdWYWx1ZUxpc3RUZXN0KFN0cmluZyBuYW1lKSB7CisJCXN1cGVyKG5hbWUpOworCX0KKworCS8qKgorCSAqIFNldHMgdGhlIGZpeHR1cmUgZm9yIHRoaXMgU3RyaW5nIFZhbHVlIExpc3QgdGVzdCBjYXNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIHNldEZpeHR1cmUoU3RyaW5nVmFsdWVMaXN0IGZpeHR1cmUpIHsKKwkJdGhpcy5maXh0dXJlID0gZml4dHVyZTsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBmaXh0dXJlIGZvciB0aGlzIFN0cmluZyBWYWx1ZSBMaXN0IHRlc3QgY2FzZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgU3RyaW5nVmFsdWVMaXN0IGdldEZpeHR1cmUoKSB7CisJCXJldHVybiBmaXh0dXJlOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2Ujc2V0VXAoKQorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgc2V0VXAoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJU3RyaW5nVmFsdWVMaXN0IHN2bCA9IENvbW1vbkZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZVN0cmluZ1ZhbHVlTGlzdCgpOworCQlFTGlzdDxTdHJpbmdWYWx1ZT4gZExpc3QgPSBzdmwuZ2V0VmFsdWVzKCk7CisJCVN0cmluZ1ZhbHVlIHN2MSA9IENvbW1vbkZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZVN0cmluZ1ZhbHVlKCk7CisJCXN2MS5zZXRWYWx1ZShJTklUSUFMX1ZBTFVFKTsKKwkJU3RyaW5nVmFsdWUgc3YyID0gQ29tbW9uRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlU3RyaW5nVmFsdWUoKTsKKwkJc3YyLnNldFZhbHVlKE5FWFRfVkFMVUUpOworCQlkTGlzdC5hZGQoc3YxKTsKKwkJZExpc3QuYWRkKHN2Mik7CisJCXNldEZpeHR1cmUoc3ZsKTsKKwl9CisKKwkvKioKKwkgKiAKKwkgKi8KKwlwdWJsaWMgdm9pZCB0ZXN0SXNWYWxpZCgpIHsKKwkJU3RyaW5nVmFsdWVMaXN0IGZpeHR1cmUgPSBnZXRGaXh0dXJlKCk7CisJCUVMaXN0PFN0cmluZ1ZhbHVlPiBkTGlzdCA9IGZpeHR1cmUuZ2V0VmFsdWVzKCk7CisJCWFzc2VydFRydWUoZExpc3Quc2l6ZSgpPT1OVU1fVkFMVUVTKTsKKwkJU3RyaW5nVmFsdWUgc3YxID0gZExpc3QuZ2V0KDApOworCQlTdHJpbmdWYWx1ZSBzdjIgPSBkTGlzdC5nZXQoMSk7CisJCQorCQlhc3NlcnRUcnVlKHN2MS5nZXRWYWx1ZSgpLmVxdWFscyhJTklUSUFMX1ZBTFVFKSk7CisJCWFzc2VydFRydWUoc3YyLmdldFZhbHVlKCkuZXF1YWxzKE5FWFRfVkFMVUUpKTsKKwl9IC8vIHRlc3RJc0NvbXBsZXRlCisJCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZSN0ZWFyRG93bigpCisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIHRlYXJEb3duKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCXNldEZpeHR1cmUobnVsbCk7CisJfQorCit9IC8vU3RyaW5nVmFsdWVMaXN0VGVzdApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvY29tbW9uL3Rlc3RzL1N0cmluZ1ZhbHVlVGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvY29tbW9uL3Rlc3RzL1N0cmluZ1ZhbHVlVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBiZGFmNzkKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9jb21tb24vdGVzdHMvU3RyaW5nVmFsdWVUZXN0LmphdmEKQEAgLTAsMCArMSwxMTMgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi50ZXN0czsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAxMCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7CitpbXBvcnQganVuaXQudGV4dHVpLlRlc3RSdW5uZXI7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLkNvbW1vbkZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5TdHJpbmdWYWx1ZTsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogQSB0ZXN0IGNhc2UgZm9yIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5TdHJpbmcgVmFsdWU8L2I+PC9lbT4nLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBTdHJpbmdWYWx1ZVRlc3QgZXh0ZW5kcyBUZXN0Q2FzZSB7CisJCisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFRFU1RfVkFMVUUgPSAidGVzdFN0cmluZ1ZhbHVlIjsKKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgTkVYVF9WQUxVRSA9ICJ0ZXN0TmV4dFN0cmluZyI7CisKKwkvKioKKwkgKiBUaGUgZml4dHVyZSBmb3IgdGhpcyBTdHJpbmcgVmFsdWUgdGVzdCBjYXNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBTdHJpbmdWYWx1ZSBmaXh0dXJlID0gbnVsbDsKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKKwkJVGVzdFJ1bm5lci5ydW4oU3RyaW5nVmFsdWVUZXN0LmNsYXNzKTsKKwl9CisKKwkvKioKKwkgKiBDb25zdHJ1Y3RzIGEgbmV3IFN0cmluZyBWYWx1ZSB0ZXN0IGNhc2Ugd2l0aCB0aGUgZ2l2ZW4gbmFtZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgU3RyaW5nVmFsdWVUZXN0KFN0cmluZyBuYW1lKSB7CisJCXN1cGVyKG5hbWUpOworCX0KKworCS8qKgorCSAqIFNldHMgdGhlIGZpeHR1cmUgZm9yIHRoaXMgU3RyaW5nIFZhbHVlIHRlc3QgY2FzZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBzZXRGaXh0dXJlKFN0cmluZ1ZhbHVlIGZpeHR1cmUpIHsKKwkJdGhpcy5maXh0dXJlID0gZml4dHVyZTsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBmaXh0dXJlIGZvciB0aGlzIFN0cmluZyBWYWx1ZSB0ZXN0IGNhc2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIFN0cmluZ1ZhbHVlIGdldEZpeHR1cmUoKSB7CisJCXJldHVybiBmaXh0dXJlOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2Ujc2V0VXAoKQorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgc2V0VXAoKSB0aHJvd3MgRXhjZXB0aW9uIHsgCisJCVN0cmluZ1ZhbHVlIHRlc3RWYWx1ZSA9IENvbW1vbkZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZVN0cmluZ1ZhbHVlKCk7CisJCXRlc3RWYWx1ZS5zZXRWYWx1ZShURVNUX1ZBTFVFKTsKKwkJc2V0Rml4dHVyZSh0ZXN0VmFsdWUpOworCX0KKwkKKworCS8qKgorCSAqIAorCSAqLworCXB1YmxpYyB2b2lkIHRlc3RJc1ZhbGlkKCkgeworCQlTdHJpbmdWYWx1ZSBmaXh0dXJlID0gZ2V0Rml4dHVyZSgpOworCQlhc3NlcnRUcnVlKGZpeHR1cmUuZ2V0VmFsdWUoKS5lcXVhbHMoVEVTVF9WQUxVRSkpOworCQlmaXh0dXJlLnNldFZhbHVlKE5FWFRfVkFMVUUpOworCQlhc3NlcnRUcnVlKGZpeHR1cmUuZ2V0VmFsdWUoKS5lcXVhbHMoTkVYVF9WQUxVRSkpOworCX0gLy8gdGVzdElzQ29tcGxldGUKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2UjdGVhckRvd24oKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgdm9pZCB0ZWFyRG93bigpIHRocm93cyBFeGNlcHRpb24geworCQlzZXRGaXh0dXJlKG51bGwpOworCX0KKworfSAvL1N0cmluZ1ZhbHVlVGVzdApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZXhwZXJpbWVudC90ZXN0cy9FeHBlcmltZW50VGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZXhwZXJpbWVudC90ZXN0cy9FeHBlcmltZW50VGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVjZDgzY2YKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9leHBlcmltZW50L3Rlc3RzL0V4cGVyaW1lbnRUZXN0LmphdmEKQEAgLTAsMCArMSwzODYgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmV4cGVyaW1lbnQudGVzdHM7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CisKK2ltcG9ydCBqdW5pdC50ZXh0dWkuVGVzdFJ1bm5lcjsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5FTGlzdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUF0dHJpYnV0ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRVJlZmVyZW5jZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRWNvcmVQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uU2FuaXR5Q2hlY2tlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLnRlc3RzLklkZW50aWZpYWJsZVRlc3Q7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmV4cGVyaW1lbnQuRXhwZXJpbWVudDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZXhwZXJpbWVudC5FeHBlcmltZW50RmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuRGVjb3JhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5Nb2RlbFBhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLkRvdWJsZVJhbmdlTW9kaWZpZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLkRvdWJsZVNlcXVlbmNlTW9kaWZpZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLkludGVnZXJSYW5nZU1vZGlmaWVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5JbnRlZ2VyU2VxdWVuY2VNb2RpZmllcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuTW9kaWZpZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLk1vZGlmaWVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuUmFuZ2VNb2RpZmllcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuU1RFTVRpbWVSYW5nZU1vZGlmaWVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5TZXF1ZW5jZU1vZGlmaWVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5TdHJpbmdTZXF1ZW5jZU1vZGlmaWVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci50ZXN0cy5Eb3VibGVSYW5nZU1vZGlmaWVyVGVzdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIudGVzdHMuSW50ZWdlclJhbmdlTW9kaWZpZXJUZXN0OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci50ZXN0cy5TVEVNVGltZVJhbmdlTW9kaWZpZXJUZXN0OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci50ZXN0cy5TdHJpbmdTZXF1ZW5jZU1vZGlmaWVyVGVzdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2NlbmFyaW8uU2NlbmFyaW87CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNjZW5hcmlvLnRlc3RzLlNjZW5hcmlvVGVzdDsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiBBIHRlc3QgY2FzZSBmb3IgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPkV4cGVyaW1lbnQ8L2I+PC9lbT4nLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiA8cD4KKyAqIFRoZSBmb2xsb3dpbmcgZmVhdHVyZXMgYXJlIHRlc3RlZDoKKyAqIDx1bD4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZXhwZXJpbWVudC5FeHBlcmltZW50I2lzQ29tcGxldGUoKSA8ZW0+Q29tcGxldGU8L2VtPn08L2xpPgorICogPC91bD4KKyAqIDwvcD4KKyAqIDxwPgorICogVGhlIGZvbGxvd2luZyBvcGVyYXRpb25zIGFyZSB0ZXN0ZWQ6CisgKiA8dWw+CisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmV4cGVyaW1lbnQuRXhwZXJpbWVudCN1cGRhdGVTY2VuYXJpbygpIDxlbT5VcGRhdGUgU2NlbmFyaW88L2VtPn08L2xpPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5leHBlcmltZW50LkV4cGVyaW1lbnQjaW5pdFNjZW5hcmlvKCkgPGVtPkluaXQgU2NlbmFyaW88L2VtPn08L2xpPgorICogPC91bD4KKyAqIDwvcD4KKyAqIEBnZW5lcmF0ZWQKKyAqLworQFN1cHByZXNzV2FybmluZ3MoImFsbCIpCitwdWJsaWMgY2xhc3MgRXhwZXJpbWVudFRlc3QgZXh0ZW5kcyBJZGVudGlmaWFibGVUZXN0IHsKKworCXB1YmxpYyBzdGF0aWMgZmluYWwgQm9vbGVhbiBCU01fU1RBUlRfVkFMVUUgPSBCb29sZWFuLlRSVUU7CisJcHVibGljIHN0YXRpYyBmaW5hbCBCb29sZWFuIEJTTV9FTkRfVkFMVUUgPSBCb29sZWFuLkZBTFNFOworCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgaW50IE1BWF9URVNUX0NZQ0xFUyA9IDExOworCisJc3RhdGljIHByb3RlY3RlZCBTY2VuYXJpbyBiYXNlU2NlbmFyaW87CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgeworCQlUZXN0UnVubmVyLnJ1bihFeHBlcmltZW50VGVzdC5jbGFzcyk7CisJfQorCisJLyoqCisJICogQ29uc3RydWN0cyBhIG5ldyBFeHBlcmltZW50IHRlc3QgY2FzZSB3aXRoIHRoZSBnaXZlbiBuYW1lLiA8IS0tCisJICogYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRXhwZXJpbWVudFRlc3QoU3RyaW5nIG5hbWUpIHsKKwkJc3VwZXIobmFtZSk7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgZml4dHVyZSBmb3IgdGhpcyBFeHBlcmltZW50IHRlc3QgY2FzZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jCisJICogLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgRXhwZXJpbWVudCBnZXRGaXh0dXJlKCkgeworCQlyZXR1cm4gKEV4cGVyaW1lbnQpZml4dHVyZTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAc2VlIGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZSNzZXRVcCgpCisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgdm9pZCBzZXRVcCgpIHRocm93cyBFeGNlcHRpb24geworCQliYXNlU2NlbmFyaW8gPSBjcmVhdGVCYXNlU2NlbmFyaW8oKTsKKwkJc2V0Rml4dHVyZShjcmVhdGVGaXh0dXJlKCkpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlI3RlYXJEb3duKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgdGVhckRvd24oKSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJc2V0Rml4dHVyZShudWxsKTsKKwl9CisKKwkvKioKKwkgKiBUZXN0IHRoYXQgdGhlIGZpeHR1cmUgaXMgInNhbmUiCisJICogCisJICogQHNlZSBTYW5pdHlDaGVja2VyCisJICovCisJcHVibGljIHZvaWQgdGVzdEZpeHR1cmVTYW5pdHkoKSB7CisJCWZpbmFsIFNhbml0eUNoZWNrZXIgZml4dHVyZSA9IGdldEZpeHR1cmUoKTsKKwkJYXNzZXJ0VHJ1ZShmaXh0dXJlLnNhbmUoKSk7CisJfSAvLyB0ZXN0Rml4dHVyZVNhbml0eQorCisJLyoqCisJICogVGVzdHMgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmV4cGVyaW1lbnQuRXhwZXJpbWVudCNnZXRNb2RpZmljYXRpb25TdW1tYXJ5KCkgPGVtPk1vZGlmaWNhdGlvbiBTdW1tYXJ5PC9lbT59JworCSAqIGZlYXR1cmUgZ2V0dGVyLiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5leHBlcmltZW50LkV4cGVyaW1lbnQjZ2V0TW9kaWZpY2F0aW9uU3VtbWFyeSgpCisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlwdWJsaWMgdm9pZCB0ZXN0R2V0TW9kaWZpY2F0aW9uU3VtbWFyeSgpIHsKKwkJZmluYWwgRXhwZXJpbWVudCBmaXh0dXJlID0gZ2V0Rml4dHVyZSgpOworCQlMaXN0PFN0cmluZz4gc3VtbWFyeSA9IGZpeHR1cmUuZ2V0TW9kaWZpY2F0aW9uU3VtbWFyeSgpOworCQlhc3NlcnROb3ROdWxsKHN1bW1hcnkpOworCQlhc3NlcnRUcnVlKHN1bW1hcnkuc2l6ZSgpID4gMCk7CisJfSAvLyB0ZXN0R2V0TW9kaWZpY2F0aW9uU3VtbWFyeQorCisJLyoqCisJICogVGVzdHMgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmV4cGVyaW1lbnQuRXhwZXJpbWVudCNpc0NvbXBsZXRlKCkgPGVtPkNvbXBsZXRlPC9lbT59JworCSAqIGZlYXR1cmUgZ2V0dGVyLiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5leHBlcmltZW50LkV4cGVyaW1lbnQjaXNDb21wbGV0ZSgpCisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlwdWJsaWMgdm9pZCB0ZXN0SXNDb21wbGV0ZSgpIHsKKwkJLy8gVE9ETyB0ZXN0SXNDb21wbGV0ZQorCQlmaW5hbCBFeHBlcmltZW50IGZpeHR1cmUgPSBnZXRGaXh0dXJlKCk7CisJCWFzc2VydEZhbHNlKGZpeHR1cmUuaXNDb21wbGV0ZSgpKTsKKwl9IC8vIHRlc3RJc0NvbXBsZXRlCisKKwkvKioKKwkgKiBUZXN0cyB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZXhwZXJpbWVudC5FeHBlcmltZW50I3VwZGF0ZVNjZW5hcmlvKCkgPGVtPlVwZGF0ZSBTY2VuYXJpbzwvZW0+fScKKwkgKiBvcGVyYXRpb24uIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmV4cGVyaW1lbnQuRXhwZXJpbWVudCN1cGRhdGVTY2VuYXJpbygpCisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlwdWJsaWMgdm9pZCB0ZXN0VXBkYXRlU2NlbmFyaW8oKSB7CisJCWZpbmFsIEV4cGVyaW1lbnQgZml4dHVyZSA9IGdldEZpeHR1cmUoKTsKKwkJLy93aGlsZSAoIWZpeHR1cmUuaXNDb21wbGV0ZSgpKSB7CisJCWZvciAoaW50IGkgPSAwOyBpIDwgTUFYX1RFU1RfQ1lDTEVTOyBpICsrKSB7CisJCQorCQkJaWYgICghZml4dHVyZS5pc0NvbXBsZXRlKCkpIHsKKwkJCQlmaW5hbCBTY2VuYXJpbyB1cGRhdGVkU2NlbmFyaW8gPSBmaXh0dXJlLnVwZGF0ZVNjZW5hcmlvKCk7CisJCQkJYXNzZXJ0VHJ1ZSh1cGRhdGVkU2NlbmFyaW8uc2FuZSgpKTsKKwkJCX0KKwkJCQorCQl9IC8vIHdoaWxlICFmaXh0dXJlLmlzQ29tcGxldGUoKQorCX0KKworCS8qKgorCSAqIFRlc3RzIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5leHBlcmltZW50LkV4cGVyaW1lbnQjaW5pdFNjZW5hcmlvKCkgPGVtPkluaXQgU2NlbmFyaW88L2VtPn0nIG9wZXJhdGlvbi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmV4cGVyaW1lbnQuRXhwZXJpbWVudCNpbml0U2NlbmFyaW8oKQorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJcHVibGljIHZvaWQgdGVzdEluaXRTY2VuYXJpbygpIHsKKwkJYXNzZXJ0VHJ1ZSh0cnVlKTsKKwl9CisKKwkvKioKKwkgKiBAcmV0dXJuIGFuIHtAbGluayBFeHBlcmltZW50fSBmb3IgdGVzdGluZy4KKwkgKi8KKwlwdWJsaWMgc3RhdGljIEV4cGVyaW1lbnQgY3JlYXRlRml4dHVyZSgpIHsKKwkJZmluYWwgRXhwZXJpbWVudCByZXRWYWx1ZSA9IEV4cGVyaW1lbnRGYWN0b3J5LmVJTlNUQU5DRQorCQkJCS5jcmVhdGVFeHBlcmltZW50KCk7CisJCXJldFZhbHVlLnNldFNjZW5hcmlvKGNyZWF0ZUJhc2VTY2VuYXJpbygpKTsKKwkJcmV0VmFsdWUuZ2V0TW9kaWZpZXJzKCkuYWRkKGNyZWF0ZVJhbmdlTW9kaWZpZXIocmV0VmFsdWUuZ2V0U2NlbmFyaW8oKSkpOworCQkvLyByZXRWYWx1ZS5nZXRNb2RpZmllcnMoKS5hZGQoY3JlYXRlU2VxdWVuY2VNb2RpZmllcihiYXNlU2NlbmFyaW8pKTsKKwkJcmV0VmFsdWUuZ2V0RHVibGluQ29yZSgpLnBvcHVsYXRlKCk7CisKKwkJcmV0dXJuIHJldFZhbHVlOworCX0gLy8gY3JlYXRlRml4dHVyZQorCisJLyoqCisJICogQHBhcmFtIGJhc2VTY2VuYXJpbworCSAqIEByZXR1cm4gYSB7QGxpbmsgTW9kaWZpZXJ9IHRoYXQgY29udGFpbnMge0BsaW5rIFNlcXVlbmNlTW9kaWZpZXJ9cy4KKwkgKi8KKwlAU3VwcHJlc3NXYXJuaW5ncyh7ICJib3hpbmciLCAidW51c2VkIiB9KQorCXByaXZhdGUgc3RhdGljIE1vZGlmaWVyIGNyZWF0ZVNlcXVlbmNlTW9kaWZpZXIoU2NlbmFyaW8gYmFzZVNjZW5hcmlvKSB7CisJCWZpbmFsIE1vZGlmaWVyIHJldFZhbHVlID0gTW9kaWZpZXJGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVNb2RpZmllcigpOworCisJCS8vIERlc2NlbmQgaW50byB0aGUgU2NlbmFyaW8gbG9va2luZyBmb3Igc29tZXRoaW5nIHdpdGggYSBkb3VibGUgZmllbGQKKwkJZmluYWwgRUxpc3Q8RGVjb3JhdG9yPiBzY2VuYXJpb0RlY29yYXRvcnMgPSBiYXNlU2NlbmFyaW8KKwkJCQkuZ2V0U2NlbmFyaW9EZWNvcmF0b3JzKCk7CisKKwkJZm9yIChEZWNvcmF0b3IgZGVjb3JhdG9yIDogc2NlbmFyaW9EZWNvcmF0b3JzKSB7CisJCQkvLyBMb29rIHRocm91Z2ggdGhlIGF0dHJpYnV0ZXMgaW4gdGhlIGRlY29yYXRvcgorCQkJZm9yIChFQXR0cmlidXRlIGF0dHJpYnV0ZSA6IGRlY29yYXRvci5lQ2xhc3MoKS5nZXRFQWxsQXR0cmlidXRlcygpKSB7CisKKwkJCQkvLyBJcyB0aGlzIGEgZG91YmxlPworCQkJCWlmIChhdHRyaWJ1dGUuZ2V0RUF0dHJpYnV0ZVR5cGUoKS5lcXVhbHMoCisJCQkJCQlFY29yZVBhY2thZ2UuTGl0ZXJhbHMuRURPVUJMRSkpIHsKKwkJCQkJLy8gWWVzCisJCQkJCWZpbmFsIERvdWJsZVNlcXVlbmNlTW9kaWZpZXIgZHNtID0gTW9kaWZpZXJGYWN0b3J5LmVJTlNUQU5DRQorCQkJCQkJCS5jcmVhdGVEb3VibGVTZXF1ZW5jZU1vZGlmaWVyKCk7CisJCQkJCWRzbS5nZXRTZXF1ZW5jZSgpLmFkZCgKKwkJCQkJCQlEb3VibGVSYW5nZU1vZGlmaWVyVGVzdC5EUk1fU1RBUlRfVkFMVUUpOworCQkJCQlkc20uZ2V0U2VxdWVuY2UoKQorCQkJCQkJCS5hZGQoRG91YmxlUmFuZ2VNb2RpZmllclRlc3QuRFJNX0VORF9WQUxVRSk7CisJCQkJCWRzbS5zZXRFU3RydWN0dXJhbEZlYXR1cmUoYXR0cmlidXRlKTsKKwkJCQkJcmV0VmFsdWUuc2V0VGFyZ2V0VVJJKGRlY29yYXRvci5nZXRVUkkoKSk7CisJCQkJCXJldFZhbHVlLmdldEZlYXR1cmVNb2RpZmllcnMoKS5hZGQoZHNtKTsKKwkJCQl9IC8vIGlmIGRvdWJsZQorCQkJCS8vIElzIHRoaXMgYW4gaW50ZWdlcj8KKwkJCQllbHNlIGlmIChhdHRyaWJ1dGUuZ2V0RUF0dHJpYnV0ZVR5cGUoKS5lcXVhbHMoCisJCQkJCQlFY29yZVBhY2thZ2UuTGl0ZXJhbHMuRUlOVCkpIHsKKwkJCQkJLy8gWWVzCisJCQkJCWZpbmFsIEludGVnZXJTZXF1ZW5jZU1vZGlmaWVyIGlzbSA9IE1vZGlmaWVyRmFjdG9yeS5lSU5TVEFOQ0UKKwkJCQkJCQkuY3JlYXRlSW50ZWdlclNlcXVlbmNlTW9kaWZpZXIoKTsKKwkJCQkJaXNtLmdldFNlcXVlbmNlKCkuYWRkKAorCQkJCQkJCUludGVnZXJSYW5nZU1vZGlmaWVyVGVzdC5JUk1fU1RBUlRfVkFMVUUpOworCQkJCQlpc20uZ2V0U2VxdWVuY2UoKS5hZGQoCisJCQkJCQkJSW50ZWdlclJhbmdlTW9kaWZpZXJUZXN0LklSTV9FTkRfVkFMVUUpOworCQkJCQlpc20uc2V0RVN0cnVjdHVyYWxGZWF0dXJlKGF0dHJpYnV0ZSk7CisJCQkJCXJldFZhbHVlLnNldFRhcmdldFVSSShkZWNvcmF0b3IuZ2V0VVJJKCkpOworCQkJCQlyZXRWYWx1ZS5nZXRGZWF0dXJlTW9kaWZpZXJzKCkuYWRkKGlzbSk7CisJCQkJfSAvLyBpZiBpbnRlZ2VyCisJCQkJLy8gSXMgdGhpcyBhIGJvb2xlYW4/CisJCQkJLy8gZWxzZSBpZiAoYXR0cmlidXRlLmdldEVBdHRyaWJ1dGVUeXBlKCkuZXF1YWxzKAorCQkJCS8vIEVjb3JlUGFja2FnZS5MaXRlcmFscy5FQk9PTEVBTikpIHsKKwkJCQkvLyAvLyBZZXMKKwkJCQkvLyBmaW5hbCBTZXF1ZW5jZU1vZGlmaWVyIGJzbSA9IE1vZGlmaWVyRmFjdG9yeS5lSU5TVEFOQ0UKKwkJCQkvLyAuY3JlYXRlU2VxdWVuY2VNb2RpZmllcigpOworCQkJCS8vIGJzbS5nZXRTZXF1ZW5jZSgpLmFkZChCU01fU1RBUlRfVkFMVUUpOworCQkJCS8vIGJzbS5nZXRTZXF1ZW5jZSgpLmFkZChCU01fRU5EX1ZBTFVFKTsKKwkJCQkvLyBic20uc2V0RVN0cnVjdHVyYWxGZWF0dXJlKGF0dHJpYnV0ZSk7CisJCQkJLy8gcmV0VmFsdWUuc2V0VGFyZ2V0VVJJKGRlY29yYXRvci5nZXRVUkkoKSk7CisJCQkJLy8gcmV0VmFsdWUuZ2V0RmVhdHVyZU1vZGlmaWVycygpLmFkZChic20pOworCQkJCS8vIH0gLy8gaWYgYm9vbGVhbgorCQkJCS8vIElzIHRoaXMgYSBTdHJpbmc/CisJCQkJZWxzZSBpZiAoYXR0cmlidXRlLmdldEVBdHRyaWJ1dGVUeXBlKCkuZXF1YWxzKAorCQkJCQkJRWNvcmVQYWNrYWdlLkxpdGVyYWxzLkVTVFJJTkcpKSB7CisJCQkJCS8vIFllcworCQkJCQlmaW5hbCBTdHJpbmdTZXF1ZW5jZU1vZGlmaWVyIHNzbSA9IE1vZGlmaWVyRmFjdG9yeS5lSU5TVEFOQ0UKKwkJCQkJCQkuY3JlYXRlU3RyaW5nU2VxdWVuY2VNb2RpZmllcigpOworCQkJCQlzc20uZ2V0U2VxdWVuY2UoKS5hZGQoCisJCQkJCQkJU3RyaW5nU2VxdWVuY2VNb2RpZmllclRlc3QuU1RSSU5HX1NUQVJUX1ZBTFVFKTsKKwkJCQkJc3NtLmdldFNlcXVlbmNlKCkuYWRkKAorCQkJCQkJCVN0cmluZ1NlcXVlbmNlTW9kaWZpZXJUZXN0LlNUUklOR19FTkRfVkFMVUUpOworCQkJCQlzc20uc2V0RVN0cnVjdHVyYWxGZWF0dXJlKGF0dHJpYnV0ZSk7CisJCQkJCXJldFZhbHVlLnNldFRhcmdldFVSSShkZWNvcmF0b3IuZ2V0VVJJKCkpOworCQkJCQlyZXRWYWx1ZS5nZXRGZWF0dXJlTW9kaWZpZXJzKCkuYWRkKHNzbSk7CisJCQkJfSAvLyBpZiBTdHJpbmcKKwkJCX0gLy8gZm9yIGVhY2ggRUF0dHJpYnV0ZQorCisJCQkvLyBOb3cgbG9vayB0aHJvdWdoIHRoZSByZWZlcmVuY2VzCisJCQlmb3IgKEVSZWZlcmVuY2UgcmVmZXJlbmNlIDogZGVjb3JhdG9yLmVDbGFzcygpLmdldEVBbGxSZWZlcmVuY2VzKCkpIHsKKwkJCQlpZiAocmV0VmFsdWUuZ2V0RmVhdHVyZU1vZGlmaWVycygpLnNpemUoKSA+IDApIHsKKwkJCQkJLy8gSXMgdGhpcyBhbiBTVEVNVGltZT8KKwkJCQkJaWYgKHJlZmVyZW5jZS5nZXRFVHlwZSgpLmVxdWFscygKKwkJCQkJCQlNb2RlbFBhY2thZ2UuTGl0ZXJhbHMuU1RFTV9USU1FKSkgeworCQkJCQkJLy8gWWVzCisJCQkJCQlmaW5hbCBTVEVNVGltZVJhbmdlTW9kaWZpZXIgc3RybSA9IE1vZGlmaWVyRmFjdG9yeS5lSU5TVEFOQ0UKKwkJCQkJCQkJLmNyZWF0ZVNURU1UaW1lUmFuZ2VNb2RpZmllcigpOworCQkJCQkJc3RybQorCQkJCQkJCQkuc2V0U3RhcnRWYWx1ZShTVEVNVGltZVJhbmdlTW9kaWZpZXJUZXN0LlNURU1fVElNRV9TVEFSVF9WQUxVRSk7CisJCQkJCQlzdHJtCisJCQkJCQkJCS5zZXRFbmRWYWx1ZShTVEVNVGltZVJhbmdlTW9kaWZpZXJUZXN0LlNURU1fVElNRV9FTkRfVkFMVUUpOworCQkJCQkJc3RybQorCQkJCQkJCQkuc2V0SW5jcmVtZW50KFNURU1UaW1lUmFuZ2VNb2RpZmllclRlc3QuU1RFTV9USU1FX0lOQ1JFTUVOVF9WQUxVRSk7CisJCQkJCQlzdHJtLnNldEVTdHJ1Y3R1cmFsRmVhdHVyZShyZWZlcmVuY2UpOworCQkJCQkJcmV0VmFsdWUuZ2V0RmVhdHVyZU1vZGlmaWVycygpLmFkZChzdHJtKTsKKwkJCQkJfSAvLyBpZiBTVEVNVGltZQorCQkJCX0gLy8gZm9yIGVhY2ggRVJlZmVyZW5jZQorCQkJCS8vIERpZCB3ZSBmaW5kIG9uZT8KKwkJCQkvLyBZZXMKKwkJCQlicmVhazsKKwkJCX0gLy8gaWYKKwkJfSAvLyBmb3IgZWFjaCBEZWNvcmF0b3IKKworCQlyZXR1cm4gcmV0VmFsdWU7CisJfSAvLyBjcmVhdGVTZXF1ZW5jZU1vZGlmaWVyCisKKwkvKioKKwkgKiBAcGFyYW0gYmFzZVNjZW5hcmlvCisJICogQHJldHVybiBhIHtAbGluayBNb2RpZmllcn0gdGhhdCBjb250YWlucyB7QGxpbmsgUmFuZ2VNb2RpZmllcn1zLgorCSAqLworCXByaXZhdGUgc3RhdGljIE1vZGlmaWVyIGNyZWF0ZVJhbmdlTW9kaWZpZXIoZmluYWwgU2NlbmFyaW8gYmFzZVNjZW5hcmlvKSB7CisJCWZpbmFsIE1vZGlmaWVyIHJldFZhbHVlID0gTW9kaWZpZXJGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVNb2RpZmllcigpOworCisJCS8vIERlc2NlbmQgaW50byB0aGUgU2NlbmFyaW8gbG9va2luZyBmb3Igc29tZXRoaW5nIHdpdGggYSBkb3VibGUgZmllbGQKKwkJZmluYWwgRUxpc3Q8RGVjb3JhdG9yPiBzY2VuYXJpb0RlY29yYXRvcnMgPSBiYXNlU2NlbmFyaW8KKwkJCQkuZ2V0U2NlbmFyaW9EZWNvcmF0b3JzKCk7CisKKwkJZm9yIChEZWNvcmF0b3IgZGVjb3JhdG9yIDogc2NlbmFyaW9EZWNvcmF0b3JzKSB7CisJCQkvLyBMb29rIHRocm91Z2ggdGhlIGF0dHJpYnV0ZXMgaW4gdGhlIGRlY29yYXRvcgorCQkJZm9yIChFQXR0cmlidXRlIGF0dHJpYnV0ZSA6IGRlY29yYXRvci5lQ2xhc3MoKS5nZXRFQWxsQXR0cmlidXRlcygpKSB7CisKKwkJCQkvLyBJcyB0aGlzIGEgZG91YmxlPworCQkJCWlmIChhdHRyaWJ1dGUuZ2V0RUF0dHJpYnV0ZVR5cGUoKS5lcXVhbHMoCisJCQkJCQlFY29yZVBhY2thZ2UuTGl0ZXJhbHMuRURPVUJMRSkpIHsKKwkJCQkJLy8gWWVzCisJCQkJCWZpbmFsIERvdWJsZVJhbmdlTW9kaWZpZXIgZHJtID0gTW9kaWZpZXJGYWN0b3J5LmVJTlNUQU5DRQorCQkJCQkJCS5jcmVhdGVEb3VibGVSYW5nZU1vZGlmaWVyKCk7CisJCQkJCWRybS5zZXRTdGFydFZhbHVlKERvdWJsZVJhbmdlTW9kaWZpZXJUZXN0LkRSTV9TVEFSVF9WQUxVRSk7CisJCQkJCWRybS5zZXRFbmRWYWx1ZShEb3VibGVSYW5nZU1vZGlmaWVyVGVzdC5EUk1fRU5EX1ZBTFVFKTsKKwkJCQkJZHJtCisJCQkJCQkJLnNldEluY3JlbWVudChEb3VibGVSYW5nZU1vZGlmaWVyVGVzdC5EUk1fSU5DUkVNRU5UX1ZBTFVFKTsKKwkJCQkJZHJtLnNldEVTdHJ1Y3R1cmFsRmVhdHVyZShhdHRyaWJ1dGUpOworCQkJCQlyZXRWYWx1ZS5nZXRGZWF0dXJlTW9kaWZpZXJzKCkuYWRkKGRybSk7CisJCQkJfSAvLyBpZiBkb3VibGUKKwkJCQkvLyBJcyB0aGlzIGFuIGludGVnZXI/CisJCQkJZWxzZSBpZiAoYXR0cmlidXRlLmdldEVBdHRyaWJ1dGVUeXBlKCkuZXF1YWxzKAorCQkJCQkJRWNvcmVQYWNrYWdlLkxpdGVyYWxzLkVJTlQpKSB7CisJCQkJCS8vIFllcworCQkJCQlmaW5hbCBJbnRlZ2VyUmFuZ2VNb2RpZmllciBpcm0gPSBNb2RpZmllckZhY3RvcnkuZUlOU1RBTkNFCisJCQkJCQkJLmNyZWF0ZUludGVnZXJSYW5nZU1vZGlmaWVyKCk7CisJCQkJCWlybS5zZXRTdGFydFZhbHVlKEludGVnZXJSYW5nZU1vZGlmaWVyVGVzdC5JUk1fU1RBUlRfVkFMVUUpOworCQkJCQlpcm0uc2V0RW5kVmFsdWUoSW50ZWdlclJhbmdlTW9kaWZpZXJUZXN0LklSTV9FTkRfVkFMVUUpOworCQkJCQlpcm0KKwkJCQkJCQkuc2V0SW5jcmVtZW50KEludGVnZXJSYW5nZU1vZGlmaWVyVGVzdC5JUk1fSU5DUkVNRU5UX1ZBTFVFKTsKKwkJCQkJaXJtLnNldEVTdHJ1Y3R1cmFsRmVhdHVyZShhdHRyaWJ1dGUpOworCQkJCQlyZXRWYWx1ZS5nZXRGZWF0dXJlTW9kaWZpZXJzKCkuYWRkKGlybSk7CisJCQkJfSAvLyBpZiBpbnRlZ2VyCisKKwkJCX0gLy8gZm9yIGVhY2ggRUF0dHJpYnV0ZQorCisvLwkJCS8vIE5vdyBsb29rIHRocm91Z2ggdGhlIHJlZmVyZW5jZXMKKy8vCQkJZm9yIChFUmVmZXJlbmNlIHJlZmVyZW5jZSA6IGRlY29yYXRvci5lQ2xhc3MoKS5nZXRFQWxsUmVmZXJlbmNlcygpKSB7CisvLwkJCQkvLyBJcyB0aGlzIGFuIFNURU1UaW1lPworLy8JCQkJaWYgKHJlZmVyZW5jZS5nZXRFVHlwZSgpCisvLwkJCQkJCS5lcXVhbHMoTW9kZWxQYWNrYWdlLkxpdGVyYWxzLlNURU1fVElNRSkpIHsKKy8vCQkJCQkvLyBZZXMKKy8vCQkJCQlmaW5hbCBTVEVNVGltZVJhbmdlTW9kaWZpZXIgc3RybSA9IE1vZGlmaWVyRmFjdG9yeS5lSU5TVEFOQ0UKKy8vCQkJCQkJCS5jcmVhdGVTVEVNVGltZVJhbmdlTW9kaWZpZXIoKTsKKy8vCQkJCQlzdHJtCisvLwkJCQkJCQkuc2V0U3RhcnRWYWx1ZShTVEVNVGltZVJhbmdlTW9kaWZpZXJUZXN0LlNURU1fVElNRV9TVEFSVF9WQUxVRSk7CisvLwkJCQkJc3RybQorLy8JCQkJCQkJLnNldEVuZFZhbHVlKFNURU1UaW1lUmFuZ2VNb2RpZmllclRlc3QuU1RFTV9USU1FX0VORF9WQUxVRSk7CisvLwkJCQkJc3RybQorLy8JCQkJCQkJLnNldEluY3JlbWVudChTVEVNVGltZVJhbmdlTW9kaWZpZXJUZXN0LlNURU1fVElNRV9JTkNSRU1FTlRfVkFMVUUpOworLy8JCQkJCXN0cm0uc2V0RVN0cnVjdHVyYWxGZWF0dXJlKHJlZmVyZW5jZSk7CisvLwkJCQkJcmV0VmFsdWUuZ2V0RmVhdHVyZU1vZGlmaWVycygpLmFkZChzdHJtKTsKKy8vCQkJCX0gLy8gaWYgU1RFTVRpbWUKKy8vCQkJfSAvLyBmb3IgZWFjaCBFUmVmZXJlbmNlCisJCQkKKwkJCS8vIEFueXRoaW5nPworCQkJaWYgKHJldFZhbHVlLmdldEZlYXR1cmVNb2RpZmllcnMoKS5zaXplKCkgPiAwKSB7CisJCQkJLy8gWWVzCisJCQkJcmV0VmFsdWUuc2V0VGFyZ2V0VVJJKGRlY29yYXRvci5nZXRVUkkoKSk7CisJCQkJYnJlYWs7CisJCQl9IC8vIGlmIAorCQl9IC8vIGZvciBlYWNoIERlY29yYXRvcgorCisJCXJldHVybiByZXRWYWx1ZTsKKwl9IC8vIGNyZWF0ZVJhbmdlTW9kaWZpZXIKKworCS8qKgorCSAqIEByZXR1cm4gYSBiYXNlIHtAbGluayBTY2VuYXJpb30gZm9yIHRlc3RpbmcKKwkgKi8KKwlzdGF0aWMgU2NlbmFyaW8gY3JlYXRlQmFzZVNjZW5hcmlvKCkgeworCQlyZXR1cm4gU2NlbmFyaW9UZXN0LmNyZWF0ZUZpeHR1cmUoKTsKKwl9CisKK30gLy8gRXhwZXJpbWVudFRlc3QKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2V4cGVyaW1lbnQvdGVzdHMvRXhwZXJpbWVudFRlc3RzLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9leHBlcmltZW50L3Rlc3RzL0V4cGVyaW1lbnRUZXN0cy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYxNmQyOTkKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9leHBlcmltZW50L3Rlc3RzL0V4cGVyaW1lbnRUZXN0cy5qYXZhCkBAIC0wLDAgKzEsNTUgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmV4cGVyaW1lbnQudGVzdHM7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3Q7CitpbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RTdWl0ZTsKK2ltcG9ydCBqdW5pdC50ZXh0dWkuVGVzdFJ1bm5lcjsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogQSB0ZXN0IHN1aXRlIGZvciB0aGUgJzxlbT48Yj5leHBlcmltZW50PC9iPjwvZW0+JyBwYWNrYWdlLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBFeHBlcmltZW50VGVzdHMgZXh0ZW5kcyBUZXN0U3VpdGUgeworCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgeworCQlUZXN0UnVubmVyLnJ1bihzdWl0ZSgpKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgc3RhdGljIFRlc3Qgc3VpdGUoKSB7CisJCVRlc3RTdWl0ZSBzdWl0ZSA9IG5ldyBFeHBlcmltZW50VGVzdHMoImV4cGVyaW1lbnQgVGVzdHMiKTsgLy8kTk9OLU5MUy0xJAorCQlzdWl0ZS5hZGRUZXN0U3VpdGUoRXhwZXJpbWVudFRlc3QuY2xhc3MpOworCQlyZXR1cm4gc3VpdGU7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEV4cGVyaW1lbnRUZXN0cyhTdHJpbmcgbmFtZSkgeworCQlzdXBlcihuYW1lKTsKKwl9CisKK30gLy9FeHBlcmltZW50VGVzdHMKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoL3Rlc3RzL0R5bmFtaWNFZGdlTGFiZWxUZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC90ZXN0cy9EeW5hbWljRWRnZUxhYmVsVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNhZmQ5ODIKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC90ZXN0cy9EeW5hbWljRWRnZUxhYmVsVGVzdC5qYXZhCkBAIC0wLDAgKzEsNDQgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLnRlc3RzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5EeW5hbWljRWRnZUxhYmVsOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiBBIHRlc3QgY2FzZSBmb3IgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPkR5bmFtaWMgRWRnZSBMYWJlbDwvYj48L2VtPicuCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGFic3RyYWN0IGNsYXNzIER5bmFtaWNFZGdlTGFiZWxUZXN0IGV4dGVuZHMgRHluYW1pY0xhYmVsVGVzdCB7CisJLyoqCisJICogQ29uc3RydWN0cyBhIG5ldyBEeW5hbWljIEVkZ2UgTGFiZWwgdGVzdCBjYXNlIHdpdGggdGhlIGdpdmVuIG5hbWUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIER5bmFtaWNFZGdlTGFiZWxUZXN0KFN0cmluZyBuYW1lKSB7CisJCXN1cGVyKG5hbWUpOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIGZpeHR1cmUgZm9yIHRoaXMgRHluYW1pYyBFZGdlIExhYmVsIHRlc3QgY2FzZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgRHluYW1pY0VkZ2VMYWJlbCBnZXRGaXh0dXJlKCkgeworCQlyZXR1cm4gKER5bmFtaWNFZGdlTGFiZWwpZml4dHVyZTsKKwl9CisKK30gLy9EeW5hbWljRWRnZUxhYmVsVGVzdApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGgvdGVzdHMvRHluYW1pY0xhYmVsVGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGgvdGVzdHMvRHluYW1pY0xhYmVsVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcyMjNjMDUKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC90ZXN0cy9EeW5hbWljTGFiZWxUZXN0LmphdmEKQEAgLTAsMCArMSwxMzkgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLnRlc3RzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5EeW5hbWljTGFiZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkxhYmVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5MYWJlbFZhbHVlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC5UZXN0VXRpbDsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiBBIHRlc3QgY2FzZSBmb3IgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPkR5bmFtaWMgTGFiZWw8L2I+PC9lbT4nLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiA8cD4KKyAqIFRoZSBmb2xsb3dpbmcgb3BlcmF0aW9ucyBhcmUgdGVzdGVkOgorICogPHVsPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5EeW5hbWljTGFiZWwjcmVzZXQoKSA8ZW0+UmVzZXQ8L2VtPn08L2xpPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5EeW5hbWljTGFiZWwjc3dpdGNoVG9OZXh0VmFsdWUoKSA8ZW0+U3dpdGNoIFRvIE5leHQgVmFsdWU8L2VtPn08L2xpPgorICogPC91bD4KKyAqIDwvcD4KKyAqIEBnZW5lcmF0ZWQKKyAqLworQFN1cHByZXNzV2FybmluZ3MoImFsbCIpCitwdWJsaWMgYWJzdHJhY3QgY2xhc3MgRHluYW1pY0xhYmVsVGVzdCBleHRlbmRzIExhYmVsVGVzdCB7CisKKwkvKioKKwkgKiBDb25zdHJ1Y3RzIGEgbmV3IER5bmFtaWMgTGFiZWwgdGVzdCBjYXNlIHdpdGggdGhlIGdpdmVuIG5hbWUuIDwhLS0KKwkgKiBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBEeW5hbWljTGFiZWxUZXN0KFN0cmluZyBuYW1lKSB7CisJCXN1cGVyKG5hbWUpOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIGZpeHR1cmUgZm9yIHRoaXMgRHluYW1pYyBMYWJlbCB0ZXN0IGNhc2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYworCSAqIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIER5bmFtaWNMYWJlbCBnZXRGaXh0dXJlKCkgeworCQlyZXR1cm4gKER5bmFtaWNMYWJlbClmaXh0dXJlOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBzZWUganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlI3NldFVwKCkKKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCXByb3RlY3RlZCB2b2lkIHNldFVwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCXNldEZpeHR1cmUoY3JlYXRlRml4dHVyZSgpKTsKKwl9IC8vIHNldFVwCisKKwkvKioKKwkgKiBUZXN0cyB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguRHluYW1pY0xhYmVsI3Jlc2V0KCkgPGVtPlJlc2V0PC9lbT59JworCSAqIG9wZXJhdGlvbi4gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguRHluYW1pY0xhYmVsI3Jlc2V0KCkKKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCXB1YmxpYyB2b2lkIHRlc3RSZXNldCgpIHsKKwkJZmluYWwgRHluYW1pY0xhYmVsIGR5bmFtaWNMYWJlbCA9IGdldEZpeHR1cmUoKTsKKwkJYXNzZXJ0RmFsc2UoZHluYW1pY0xhYmVsLmlzTmV4dFZhbHVlVmFsaWQoKSk7CisJCWR5bmFtaWNMYWJlbC5zZXROZXh0VmFsdWVWYWxpZCh0cnVlKTsKKwkJZHluYW1pY0xhYmVsLnJlc2V0KCk7CisJCWFzc2VydEZhbHNlKGR5bmFtaWNMYWJlbC5pc05leHRWYWx1ZVZhbGlkKCkpOworCX0gLy8gdGVzdFJlc2V0CisKKwkvKioKKwkgKiBAcmV0dXJuIGEgRHluYW1pY0xhYmVsCisJICovCisJcHVibGljIER5bmFtaWNMYWJlbCBjcmVhdGVGaXh0dXJlKCkgeworCQlyZXR1cm4gVGVzdFV0aWwuY3JlYXRlRHluYW1pY0xhYmVsKFRlc3RVdGlsCisJCQkJLmNyZWF0ZU5leHRJZGVudGlmaWFibGVUb0xhYmVsVVJJKCkpOworCX0gLy8gY3JlYXRlRml4dHVyZQorCisJLyoqCisJICogVGVzdCB0aGUgc2FuaXR5IG9mIHRoZSBmaXh0dXJlCisJICovCisJcHVibGljIHZvaWQgdGVzdFNhbmUoKSB7CisJCWZpbmFsIER5bmFtaWNMYWJlbCBkeW5hbWljTGFiZWwgPSBnZXRGaXh0dXJlKCk7CisJCWFzc2VydFRydWUoZHluYW1pY0xhYmVsLnNhbmUoKSk7CisJfSAvLyB0ZXN0U2FuZQorCisJLyoqCisJICogVGVzdHMgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkR5bmFtaWNMYWJlbCNzd2l0Y2hUb05leHRWYWx1ZSgpIDxlbT5Td2l0Y2ggVG8gTmV4dCBWYWx1ZTwvZW0+fScKKwkgKiBvcGVyYXRpb24uIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkR5bmFtaWNMYWJlbCNzd2l0Y2hUb05leHRWYWx1ZSgpCisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlwdWJsaWMgdm9pZCB0ZXN0U3dpdGNoVG9OZXh0VmFsdWUoKSB7CisJCWZpbmFsIER5bmFtaWNMYWJlbCBkeW5hbWljTGFiZWwgPSBnZXRGaXh0dXJlKCk7CisJCWZpbmFsIExhYmVsVmFsdWUgb2xkQ3VycmVudFZhbHVlID0gZHluYW1pY0xhYmVsLmdldEN1cnJlbnRWYWx1ZSgpOworCQlmaW5hbCBMYWJlbFZhbHVlIG9sZE5leHRWYWx1ZSA9IGR5bmFtaWNMYWJlbC5nZXROZXh0VmFsdWUoKTsKKworCQlhc3NlcnRUcnVlKG9sZEN1cnJlbnRWYWx1ZSAhPSBvbGROZXh0VmFsdWUpOworCQlhc3NlcnRUcnVlKGR5bmFtaWNMYWJlbC5nZXRDdXJyZW50VmFsdWUoKSA9PSBvbGRDdXJyZW50VmFsdWUpOworCQlhc3NlcnRUcnVlKGR5bmFtaWNMYWJlbC5nZXROZXh0VmFsdWUoKSA9PSBvbGROZXh0VmFsdWUpOworCisJCWFzc2VydEZhbHNlKGR5bmFtaWNMYWJlbC5pc05leHRWYWx1ZVZhbGlkKCkpOworCQlkeW5hbWljTGFiZWwuc2V0TmV4dFZhbHVlVmFsaWQodHJ1ZSk7CisJCWFzc2VydFRydWUoZHluYW1pY0xhYmVsLmlzTmV4dFZhbHVlVmFsaWQoKSk7CisKKwkJLy8gSGVyZSdzIHRoZSBiaWcgUyBXIEkgVCBDIEghCisJCWR5bmFtaWNMYWJlbC5zd2l0Y2hUb05leHRWYWx1ZSgpOworCisJCWFzc2VydEZhbHNlKGR5bmFtaWNMYWJlbC5pc05leHRWYWx1ZVZhbGlkKCkpOworCisJCWFzc2VydEZhbHNlKGR5bmFtaWNMYWJlbC5nZXRDdXJyZW50VmFsdWUoKSA9PSBvbGRDdXJyZW50VmFsdWUpOworCQlhc3NlcnRGYWxzZShkeW5hbWljTGFiZWwuZ2V0TmV4dFZhbHVlKCkgPT0gb2xkTmV4dFZhbHVlKTsKKwkJYXNzZXJ0VHJ1ZShkeW5hbWljTGFiZWwuZ2V0Q3VycmVudFZhbHVlKCkgPT0gb2xkTmV4dFZhbHVlKTsKKwkJYXNzZXJ0VHJ1ZShkeW5hbWljTGFiZWwuZ2V0TmV4dFZhbHVlKCkgPT0gb2xkQ3VycmVudFZhbHVlKTsKKworCX0gLy8gdGVzdFN3aXRjaFRvTmV4dFZhbHVlCisKKwkvKioKKwkgKiBUZXN0IHRoZSBEeW5hbWljIExhYmVsIGhhcyB0aGUgcmlnaHQgdHlwZSBVUkkuCisJICogCisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlwdWJsaWMgdm9pZCB0ZXN0R2V0VHlwZVVSSSgpIHsKKwkJZmluYWwgTGFiZWwgbGFiZWwgPSBnZXRGaXh0dXJlKCk7CisJCWFzc2VydFRydWUobGFiZWwuZ2V0VHlwZVVSSSgpLmVxdWFscygKKwkJCQlEeW5hbWljTGFiZWwuVVJJX1RZUEVfRFlOQU1JQ19MQUJFTCkpOworCX0gLy8gdGVzdEdldFR5cGVVUkkKKworfSAvLyBEeW5hbWljTGFiZWxUZXN0CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC90ZXN0cy9EeW5hbWljTm9kZUxhYmVsVGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGgvdGVzdHMvRHluYW1pY05vZGVMYWJlbFRlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NDJhZGZlCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGgvdGVzdHMvRHluYW1pY05vZGVMYWJlbFRlc3QuamF2YQpAQCAtMCwwICsxLDQ0IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC50ZXN0czsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguRHluYW1pY05vZGVMYWJlbDsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogQSB0ZXN0IGNhc2UgZm9yIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5EeW5hbWljIE5vZGUgTGFiZWw8L2I+PC9lbT4nLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBhYnN0cmFjdCBjbGFzcyBEeW5hbWljTm9kZUxhYmVsVGVzdCBleHRlbmRzIER5bmFtaWNMYWJlbFRlc3QgeworCS8qKgorCSAqIENvbnN0cnVjdHMgYSBuZXcgRHluYW1pYyBOb2RlIExhYmVsIHRlc3QgY2FzZSB3aXRoIHRoZSBnaXZlbiBuYW1lLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBEeW5hbWljTm9kZUxhYmVsVGVzdChTdHJpbmcgbmFtZSkgeworCQlzdXBlcihuYW1lKTsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBmaXh0dXJlIGZvciB0aGlzIER5bmFtaWMgTm9kZSBMYWJlbCB0ZXN0IGNhc2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIER5bmFtaWNOb2RlTGFiZWwgZ2V0Rml4dHVyZSgpIHsKKwkJcmV0dXJuIChEeW5hbWljTm9kZUxhYmVsKWZpeHR1cmU7CisJfQorCit9IC8vRHluYW1pY05vZGVMYWJlbFRlc3QKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoL3Rlc3RzL0VkZ2VMYWJlbFRlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoL3Rlc3RzL0VkZ2VMYWJlbFRlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYTJiNjVkCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGgvdGVzdHMvRWRnZUxhYmVsVGVzdC5qYXZhCkBAIC0wLDAgKzEsNDQgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLnRlc3RzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5FZGdlTGFiZWw7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIEEgdGVzdCBjYXNlIGZvciB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+RWRnZSBMYWJlbDwvYj48L2VtPicuCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGFic3RyYWN0IGNsYXNzIEVkZ2VMYWJlbFRlc3QgZXh0ZW5kcyBMYWJlbFRlc3QgeworCS8qKgorCSAqIENvbnN0cnVjdHMgYSBuZXcgRWRnZSBMYWJlbCB0ZXN0IGNhc2Ugd2l0aCB0aGUgZ2l2ZW4gbmFtZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRWRnZUxhYmVsVGVzdChTdHJpbmcgbmFtZSkgeworCQlzdXBlcihuYW1lKTsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBmaXh0dXJlIGZvciB0aGlzIEVkZ2UgTGFiZWwgdGVzdCBjYXNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCBFZGdlTGFiZWwgZ2V0Rml4dHVyZSgpIHsKKwkJcmV0dXJuIChFZGdlTGFiZWwpZml4dHVyZTsKKwl9CisKK30gLy9FZGdlTGFiZWxUZXN0CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC90ZXN0cy9FZGdlVGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGgvdGVzdHMvRWRnZVRlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZjU1NGNkCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGgvdGVzdHMvRWRnZVRlc3QuamF2YQpAQCAtMCwwICsxLDE2NyBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGgudGVzdHM7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvL2ltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7CitpbXBvcnQganVuaXQudGV4dHVpLlRlc3RSdW5uZXI7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuU1RFTVVSSTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLnRlc3RzLklkZW50aWZpYWJsZVRlc3Q7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkVkZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkdyYXBoRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguTm9kZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwuVGVzdFV0aWw7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gQSB0ZXN0IGNhc2UgZm9yIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5FZGdlPC9iPjwvZW0+Jy4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogPHA+CisgKiBUaGUgZm9sbG93aW5nIG9wZXJhdGlvbnMgYXJlIHRlc3RlZDoKKyAqIDx1bD4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguRWRnZSNnZXRPdGhlck5vZGUob3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLk5vZGUpIDxlbT5HZXQgT3RoZXIgTm9kZTwvZW0+fTwvbGk+CisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkVkZ2UjaXNEaXJlY3RlZEF0KG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5Ob2RlKSA8ZW0+SXMgRGlyZWN0ZWQgQXQ8L2VtPn08L2xpPgorICogPC91bD4KKyAqIDwvcD4KKyAqIEBnZW5lcmF0ZWQKKyAqLworQFN1cHByZXNzV2FybmluZ3MoImFsbCIpCitwdWJsaWMgY2xhc3MgRWRnZVRlc3QgZXh0ZW5kcyBJZGVudGlmaWFibGVUZXN0IHsKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CisJCVRlc3RSdW5uZXIucnVuKEVkZ2VUZXN0LmNsYXNzKTsKKwl9CisKKwkvKioKKwkgKiBDb25zdHJ1Y3RzIGEgbmV3IEVkZ2UgdGVzdCBjYXNlIHdpdGggdGhlIGdpdmVuIG5hbWUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYworCSAqIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVkZ2VUZXN0KFN0cmluZyBuYW1lKSB7CisJCXN1cGVyKG5hbWUpOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIGZpeHR1cmUgZm9yIHRoaXMgRWRnZSB0ZXN0IGNhc2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLQorCSAqIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIEVkZ2UgZ2V0Rml4dHVyZSgpIHsKKwkJcmV0dXJuIChFZGdlKWZpeHR1cmU7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogCisJICogQHNlZSBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2Ujc2V0VXAoKQorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJcHJvdGVjdGVkIHZvaWQgc2V0VXAoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJc2V0Rml4dHVyZShjcmVhdGVGaXh0dXJlKCkpOworCX0gLy8gc2V0VXAKKworCS8qKgorCSAqIEByZXR1cm4gYSBzdGF0aWNhbGx5IGxhYmVsZWQgZWRnZQorCSAqLworCXB1YmxpYyBFZGdlIGNyZWF0ZUZpeHR1cmUoKSB7CisJCWZpbmFsIE5vZGUgbm9kZUEgPSBUZXN0VXRpbC5jcmVhdGVTdGF0aWNhbGx5TGFiZWxlZE5vZGUoKTsKKwkJZmluYWwgTm9kZSBub2RlQiA9IFRlc3RVdGlsLmNyZWF0ZVN0YXRpY2FsbHlMYWJlbGVkTm9kZSgpOworCQlmaW5hbCBFZGdlIGVkZ2UgPSBUZXN0VXRpbC5jcmVhdGVTdGF0aWNhbGx5TGFiZWxlZEVkZ2Uobm9kZUEuZ2V0VVJJKCksCisJCQkJbm9kZUIuZ2V0VVJJKCkpOworCisJCWVkZ2Uuc2V0QShub2RlQSk7CisJCWVkZ2Uuc2V0Qihub2RlQik7CisJCW5vZGVBLmdldEVkZ2VzKCkuYWRkKGVkZ2UpOworCQlub2RlQi5nZXRFZGdlcygpLmFkZChlZGdlKTsKKworCQlhc3NlcnQgZWRnZS5zYW5lKCk7CisKKwkJcmV0dXJuIGVkZ2U7CisJfSAvLyBjcmVhdGVGaXh0dXJlCisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZSN0ZWFyRG93bigpCisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIHRlYXJEb3duKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCXNldEZpeHR1cmUobnVsbCk7CisJfQorCisJLyoqCisJICogVGVzdCB0aGUgc2FuaXR5IG9mIHRoZSBmaXh0dXJlCisJICovCisJcHVibGljIHZvaWQgdGVzdFNhbmUoKSB7CisJCWZpbmFsIEVkZ2UgZWRnZSA9IGdldEZpeHR1cmUoKTsKKwkJYXNzZXJ0VHJ1ZShlZGdlLnNhbmUoKSk7CisJfSAvLyB0ZXN0U2FuZQorCisJLyoqCisJICogVGVzdHMgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkVkZ2UjZ2V0T3RoZXJOb2RlKG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5Ob2RlKSA8ZW0+R2V0IE90aGVyIE5vZGU8L2VtPn0nCisJICogb3BlcmF0aW9uLiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5FZGdlI2dldE90aGVyTm9kZShvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguTm9kZSkKKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCXB1YmxpYyB2b2lkIHRlc3RHZXRPdGhlck5vZGVfX05vZGUoKSB7CisJCWZpbmFsIEVkZ2UgZWRnZSA9IGdldEZpeHR1cmUoKTsKKwkJZmluYWwgTm9kZSBub2RlQSA9IGVkZ2UuZ2V0QSgpOworCQlmaW5hbCBOb2RlIG5vZGVCID0gZWRnZS5nZXRCKCk7CisKKwkJYXNzZXJ0RXF1YWxzKGVkZ2UuZ2V0T3RoZXJOb2RlKG5vZGVCKSwgbm9kZUEpOworCQlhc3NlcnRFcXVhbHMoZWRnZS5nZXRPdGhlck5vZGUobm9kZUEpLCBub2RlQik7CisJfSAvLyB0ZXN0R2V0T3RoZXJOb2RlX19Ob2RlCisKKwkvKioKKwkgKiBUZXN0cyB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguRWRnZSNpc0RpcmVjdGVkQXQob3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLk5vZGUpIDxlbT5JcyBEaXJlY3RlZCBBdDwvZW0+fScKKwkgKiBvcGVyYXRpb24uIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkVkZ2UjaXNEaXJlY3RlZEF0KG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5Ob2RlKQorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJcHVibGljIHZvaWQgdGVzdElzRGlyZWN0ZWRBdF9fTm9kZSgpIHsKKwkJZmluYWwgRWRnZSBlZGdlID0gZ2V0Rml4dHVyZSgpOworCQlmaW5hbCBOb2RlIG5vZGVBID0gZWRnZS5nZXRBKCk7CisJCWZpbmFsIE5vZGUgbm9kZUIgPSBlZGdlLmdldEIoKTsKKworCQllZGdlLnNldERpcmVjdGVkKGZhbHNlKTsKKwkJYXNzZXJ0RmFsc2UoZWRnZS5pc0RpcmVjdGVkKCkpOworCisJCWFzc2VydEZhbHNlKGVkZ2UuaXNEaXJlY3RlZEF0KG5vZGVBKSk7CisJCWFzc2VydEZhbHNlKGVkZ2UuaXNEaXJlY3RlZEF0KG5vZGVCKSk7CisKKwkJZWRnZS5zZXREaXJlY3RlZCh0cnVlKTsKKwkJYXNzZXJ0VHJ1ZShlZGdlLmlzRGlyZWN0ZWQoKSk7CisKKwkJYXNzZXJ0RmFsc2UoZWRnZS5pc0RpcmVjdGVkQXQobm9kZUEpKTsKKwkJYXNzZXJ0VHJ1ZShlZGdlLmlzRGlyZWN0ZWRBdChub2RlQikpOworCisJfSAvLyB0ZXN0SXNEaXJlY3RlZEF0X19Ob2RlCisKKwkvKioKKwkgKiBUZXN0IHRoZSBFZGdlIGhhcyB0aGUgcmlnaHQgdHlwZSBVUkkuCisJICogCisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlwdWJsaWMgdm9pZCB0ZXN0R2V0VHlwZVVSSSgpIHsKKwkJZmluYWwgRWRnZSBlZGdlID0gZ2V0Rml4dHVyZSgpOworCQlhc3NlcnRUcnVlKGVkZ2UuZ2V0VHlwZVVSSSgpLmVxdWFscyhTVEVNVVJJLkVER0VfVFlQRV9VUkkpKTsKKwl9IC8vIHRlc3RHZXRUeXBlVVJJCisKK30gLy8gRWRnZVRlc3QKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoL3Rlc3RzL0V4Y2hhbmdlVGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGgvdGVzdHMvRXhjaGFuZ2VUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmQxNTExMAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoL3Rlc3RzL0V4Y2hhbmdlVGVzdC5qYXZhCkBAIC0wLDAgKzEsOTggQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLnRlc3RzOw0KKw0KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIA0KKyAqIENvcHlyaWdodCAoYykgMjAxMSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4gDQorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyANCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgDQorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQgDQorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwgDQorICogDQorICogQ29udHJpYnV0b3JzOiANCisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIA0KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KKw0KK2ltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7DQorDQoraW1wb3J0IGp1bml0LnRleHR1aS5UZXN0UnVubmVyOw0KKw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguRXhjaGFuZ2U7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5HcmFwaEZhY3Rvcnk7DQorDQorLyoqDQorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisgKiBBIHRlc3QgY2FzZSBmb3IgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPkV4Y2hhbmdlPC9iPjwvZW0+Jy4NCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisgKiBAZ2VuZXJhdGVkDQorICovDQorcHVibGljIGNsYXNzIEV4Y2hhbmdlVGVzdCBleHRlbmRzIFRlc3RDYXNlIHsNCisNCisJLyoqDQorCSAqIFRoZSBmaXh0dXJlIGZvciB0aGlzIEV4Y2hhbmdlIHRlc3QgY2FzZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCBFeGNoYW5nZSBmaXh0dXJlID0gbnVsbDsNCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7DQorCQlUZXN0UnVubmVyLnJ1bihFeGNoYW5nZVRlc3QuY2xhc3MpOw0KKwl9DQorDQorCS8qKg0KKwkgKiBDb25zdHJ1Y3RzIGEgbmV3IEV4Y2hhbmdlIHRlc3QgY2FzZSB3aXRoIHRoZSBnaXZlbiBuYW1lLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIEV4Y2hhbmdlVGVzdChTdHJpbmcgbmFtZSkgew0KKwkJc3VwZXIobmFtZSk7DQorCX0NCisNCisJLyoqDQorCSAqIFNldHMgdGhlIGZpeHR1cmUgZm9yIHRoaXMgRXhjaGFuZ2UgdGVzdCBjYXNlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIHZvaWQgc2V0Rml4dHVyZShFeGNoYW5nZSBmaXh0dXJlKSB7DQorCQl0aGlzLmZpeHR1cmUgPSBmaXh0dXJlOw0KKwl9DQorDQorCS8qKg0KKwkgKiBSZXR1cm5zIHRoZSBmaXh0dXJlIGZvciB0aGlzIEV4Y2hhbmdlIHRlc3QgY2FzZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCBFeGNoYW5nZSBnZXRGaXh0dXJlKCkgew0KKwkJcmV0dXJuIGZpeHR1cmU7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAc2VlIGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZSNzZXRVcCgpDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCUBPdmVycmlkZQ0KKwlwcm90ZWN0ZWQgdm9pZCBzZXRVcCgpIHRocm93cyBFeGNlcHRpb24gew0KKwkJc2V0Rml4dHVyZShHcmFwaEZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZUV4Y2hhbmdlKCkpOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHNlZSBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2UjdGVhckRvd24oKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlAT3ZlcnJpZGUNCisJcHJvdGVjdGVkIHZvaWQgdGVhckRvd24oKSB0aHJvd3MgRXhjZXB0aW9uIHsNCisJCXNldEZpeHR1cmUobnVsbCk7DQorCX0NCisNCit9IC8vRXhjaGFuZ2VUZXN0DQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGgvdGVzdHMvR3JhcGhBbGxUZXN0cy5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGgvdGVzdHMvR3JhcGhBbGxUZXN0cy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIyMGY4ZjQKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC90ZXN0cy9HcmFwaEFsbFRlc3RzLmphdmEKQEAgLTAsMCArMSw1NCBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGgudGVzdHM7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3Q7CitpbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RTdWl0ZTsKK2ltcG9ydCBqdW5pdC50ZXh0dWkuVGVzdFJ1bm5lcjsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogQSB0ZXN0IHN1aXRlIGZvciB0aGUgJzxlbT48Yj5HcmFwaDwvYj48L2VtPicgbW9kZWwuCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIEdyYXBoQWxsVGVzdHMgZXh0ZW5kcyBUZXN0U3VpdGUgeworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKKwkJVGVzdFJ1bm5lci5ydW4oc3VpdGUoKSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHN0YXRpYyBUZXN0IHN1aXRlKCkgeworCQlUZXN0U3VpdGUgc3VpdGUgPSBuZXcgR3JhcGhBbGxUZXN0cygiR3JhcGggVGVzdHMiKTsKKwkJc3VpdGUuYWRkVGVzdChHcmFwaFRlc3RzLnN1aXRlKCkpOworCQlyZXR1cm4gc3VpdGU7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEdyYXBoQWxsVGVzdHMoU3RyaW5nIG5hbWUpIHsKKwkJc3VwZXIobmFtZSk7CisJfQorCit9IC8vR3JhcGhBbGxUZXN0cwpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGgvdGVzdHMvR3JhcGhQYXJ0aXRpb25lclRlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoL3Rlc3RzL0dyYXBoUGFydGl0aW9uZXJUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmIyMDJmOAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoL3Rlc3RzL0dyYXBoUGFydGl0aW9uZXJUZXN0LmphdmEKQEAgLTAsMCArMSwxMTEgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLnRlc3RzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAKKyAqIENvcHlyaWdodCAoYykgMjAxMSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4gCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIAorICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wIAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQgCisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbCAKKyAqIAorICogQ29udHJpYnV0b3JzOiAKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKKworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5HcmFwaFBhcnRpdGlvbmVyOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiBBIHRlc3QgY2FzZSBmb3IgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPlBhcnRpdGlvbmVyPC9iPjwvZW0+Jy4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogPHA+CisgKiBUaGUgZm9sbG93aW5nIG9wZXJhdGlvbnMgYXJlIHRlc3RlZDoKKyAqIDx1bD4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguR3JhcGhQYXJ0aXRpb25lciNwYXJ0aXRpb25EZWNvcmF0b3JMYWJlbHMob3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLkRlY29yYXRvciwgaW50KSA8ZW0+UGFydGl0aW9uIERlY29yYXRvciBMYWJlbHM8L2VtPn08L2xpPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5HcmFwaFBhcnRpdGlvbmVyI3BhcnRpdGlvbkRlY29yYXRvckxhYmVscyhvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuRGVjb3JhdG9yKSA8ZW0+UGFydGl0aW9uIERlY29yYXRvciBMYWJlbHM8L2VtPn08L2xpPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5HcmFwaFBhcnRpdGlvbmVyI2lzTWFuYWdlZChvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLklkZW50aWZpYWJsZSkgPGVtPklzIE1hbmFnZWQ8L2VtPn08L2xpPgorICogPC91bD4KKyAqIDwvcD4KKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGFic3RyYWN0IGNsYXNzIEdyYXBoUGFydGl0aW9uZXJUZXN0IGV4dGVuZHMgVGVzdENhc2UgeworCisJLyoqCisJICogVGhlIGZpeHR1cmUgZm9yIHRoaXMgUGFydGl0aW9uZXIgdGVzdCBjYXNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBHcmFwaFBhcnRpdGlvbmVyIGZpeHR1cmUgPSBudWxsOworCisJLyoqCisJICogQ29uc3RydWN0cyBhIG5ldyBQYXJ0aXRpb25lciB0ZXN0IGNhc2Ugd2l0aCB0aGUgZ2l2ZW4gbmFtZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgR3JhcGhQYXJ0aXRpb25lclRlc3QoU3RyaW5nIG5hbWUpIHsKKwkJc3VwZXIobmFtZSk7CisJfQorCisJLyoqCisJICogU2V0cyB0aGUgZml4dHVyZSBmb3IgdGhpcyBQYXJ0aXRpb25lciB0ZXN0IGNhc2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgc2V0Rml4dHVyZShHcmFwaFBhcnRpdGlvbmVyIGZpeHR1cmUpIHsKKwkJdGhpcy5maXh0dXJlID0gZml4dHVyZTsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBmaXh0dXJlIGZvciB0aGlzIFBhcnRpdGlvbmVyIHRlc3QgY2FzZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgR3JhcGhQYXJ0aXRpb25lciBnZXRGaXh0dXJlKCkgeworCQlyZXR1cm4gZml4dHVyZTsKKwl9CisKKwkvKioKKwkgKiBUZXN0cyB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguR3JhcGhQYXJ0aXRpb25lciNwYXJ0aXRpb25EZWNvcmF0b3JMYWJlbHMob3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLkRlY29yYXRvciwgaW50KSA8ZW0+UGFydGl0aW9uIERlY29yYXRvciBMYWJlbHM8L2VtPn0nIG9wZXJhdGlvbi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkdyYXBoUGFydGl0aW9uZXIjcGFydGl0aW9uRGVjb3JhdG9yTGFiZWxzKG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5EZWNvcmF0b3IsIGludCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgdGVzdFBhcnRpdGlvbkRlY29yYXRvckxhYmVsc19fRGVjb3JhdG9yX2ludCgpIHsKKwkJLy8gVE9ETzogaW1wbGVtZW50IHRoaXMgb3BlcmF0aW9uIHRlc3QgbWV0aG9kCisJCS8vIEVuc3VyZSB0aGF0IHlvdSByZW1vdmUgQGdlbmVyYXRlZCBvciBtYXJrIGl0IEBnZW5lcmF0ZWQgTk9UCisJCWZhaWwoKTsKKwl9CisKKwkvKioKKwkgKiBUZXN0cyB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguR3JhcGhQYXJ0aXRpb25lciNwYXJ0aXRpb25EZWNvcmF0b3JMYWJlbHMob3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLkRlY29yYXRvcikgPGVtPlBhcnRpdGlvbiBEZWNvcmF0b3IgTGFiZWxzPC9lbT59JyBvcGVyYXRpb24uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5HcmFwaFBhcnRpdGlvbmVyI3BhcnRpdGlvbkRlY29yYXRvckxhYmVscyhvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuRGVjb3JhdG9yKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCB0ZXN0UGFydGl0aW9uRGVjb3JhdG9yTGFiZWxzX19EZWNvcmF0b3IoKSB7CisJCS8vIFRPRE86IGltcGxlbWVudCB0aGlzIG9wZXJhdGlvbiB0ZXN0IG1ldGhvZAorCQkvLyBFbnN1cmUgdGhhdCB5b3UgcmVtb3ZlIEBnZW5lcmF0ZWQgb3IgbWFyayBpdCBAZ2VuZXJhdGVkIE5PVAorCQlmYWlsKCk7CisJfQorCisJLyoqCisJICogVGVzdHMgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkdyYXBoUGFydGl0aW9uZXIjaXNNYW5hZ2VkKG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uSWRlbnRpZmlhYmxlKSA8ZW0+SXMgTWFuYWdlZDwvZW0+fScgb3BlcmF0aW9uLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguR3JhcGhQYXJ0aXRpb25lciNpc01hbmFnZWQob3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5JZGVudGlmaWFibGUpCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIHRlc3RJc01hbmFnZWRfX0lkZW50aWZpYWJsZSgpIHsKKwkJLy8gVE9ETzogaW1wbGVtZW50IHRoaXMgb3BlcmF0aW9uIHRlc3QgbWV0aG9kCisJCS8vIEVuc3VyZSB0aGF0IHlvdSByZW1vdmUgQGdlbmVyYXRlZCBvciBtYXJrIGl0IEBnZW5lcmF0ZWQgTk9UCisJCWZhaWwoKTsKKwl9CisKK30gLy9HcmFwaFBhcnRpdGlvbmVyVGVzdApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGgvdGVzdHMvR3JhcGhUZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC90ZXN0cy9HcmFwaFRlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZDc0NjIzCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGgvdGVzdHMvR3JhcGhUZXN0LmphdmEKQEAgLTAsMCArMSw4NTMgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLnRlc3RzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA2LCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247CitpbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOworCitpbXBvcnQganVuaXQudGV4dHVpLlRlc3RSdW5uZXI7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuRUxpc3Q7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlVSSTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUucmVzb3VyY2UuUmVzb3VyY2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnJlc291cmNlLlJlc291cmNlU2V0OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5yZXNvdXJjZS5pbXBsLlJlc291cmNlU2V0SW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuU1RFTVVSSTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuVXRpbGl0eTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLnRlc3RzLklkZW50aWZpYWJsZVRlc3Q7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkR5bmFtaWNMYWJlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguRHluYW1pY05vZGVMYWJlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguRWRnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguR3JhcGg7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkdyYXBoRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguTGFiZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLk5vZGU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLkVkZ2VEZWNvcmF0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLkdyYXBoRGVjb3JhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5Nb2RlbEZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLk5vZGVEZWNvcmF0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLlNURU1UaW1lOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC5UZXN0VXRpbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwuZGVjb3JhdG9ycy5EZWNvcmF0b3JzRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwuZGVjb3JhdG9ycy5UZXN0RWRnZURlY29yYXRvcjE7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsLmRlY29yYXRvcnMuVGVzdEdyYXBoRGVjb3JhdG9yMTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwuZGVjb3JhdG9ycy5UZXN0Tm9kZURlY29yYXRvcjE7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsLmxhYmVscy5UZXN0SW50ZWdlckxhYmVsVmFsdWU7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gQSB0ZXN0IGNhc2UgZm9yIHRoZSBtb2RlbCBvYmplY3QgJworICogPGVtPjxiPkdyYXBoPC9iPjwvZW0+Jy4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiA8cD4KKyAqIFRoZSBmb2xsb3dpbmcgZmVhdHVyZXMgYXJlIHRlc3RlZDoKKyAqIDx1bD4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguR3JhcGgjZ2V0TnVtRWRnZXMoKSA8ZW0+TnVtIEVkZ2VzPC9lbT59PC9saT4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguR3JhcGgjZ2V0TnVtTm9kZXMoKSA8ZW0+TnVtIE5vZGVzPC9lbT59PC9saT4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguR3JhcGgjZ2V0TnVtR3JhcGhMYWJlbHMoKSA8ZW0+TnVtIEdyYXBoIExhYmVsczwvZW0+fTwvbGk+CisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkdyYXBoI2dldE51bU5vZGVMYWJlbHMoKSA8ZW0+TnVtIE5vZGUgTGFiZWxzPC9lbT59PC9saT4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguR3JhcGgjZ2V0TnVtRHluYW1pY0xhYmVscygpIDxlbT5OdW0gRHluYW1pYyBMYWJlbHM8L2VtPn08L2xpPgorICogPC91bD4KKyAqIDwvcD4KKyAqIDxwPgorICogVGhlIGZvbGxvd2luZyBvcGVyYXRpb25zIGFyZSB0ZXN0ZWQ6CisgKiA8dWw+CisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkdyYXBoI2dldE5vZGVMYWJlbHNCeVR5cGVVUkkob3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlVSSSkgPGVtPkdldCBOb2RlIExhYmVscyBCeSBUeXBlIFVSSTwvZW0+fTwvbGk+CisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkdyYXBoI2FkZEdyYXBoKG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5HcmFwaCwgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5JZGVudGlmaWFibGVGaWx0ZXIpIDxlbT5BZGQgR3JhcGg8L2VtPn08L2xpPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5HcmFwaCNwdXRFZGdlKG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5FZGdlKSA8ZW0+UHV0IEVkZ2U8L2VtPn08L2xpPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5HcmFwaCNnZXRFZGdlKG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5VUkkpIDxlbT5HZXQgRWRnZTwvZW0+fTwvbGk+CisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkdyYXBoI3B1dE5vZGUob3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLk5vZGUpIDxlbT5QdXQgTm9kZTwvZW0+fTwvbGk+CisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkdyYXBoI2dldE5vZGUob3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlVSSSkgPGVtPkdldCBOb2RlPC9lbT59PC9saT4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguR3JhcGgjcHV0Tm9kZUxhYmVsKG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5Ob2RlTGFiZWwpIDxlbT5QdXQgTm9kZSBMYWJlbDwvZW0+fTwvbGk+CisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkdyYXBoI2dldE5vZGVMYWJlbChvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuVVJJKSA8ZW0+R2V0IE5vZGUgTGFiZWw8L2VtPn08L2xpPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5HcmFwaCNwdXRHcmFwaExhYmVsKG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5MYWJlbCkgPGVtPlB1dCBHcmFwaCBMYWJlbDwvZW0+fTwvbGk+CisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkdyYXBoI2dldEdyYXBoTGFiZWwob3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlVSSSkgPGVtPkdldCBHcmFwaCBMYWJlbDwvZW0+fTwvbGk+CisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkdyYXBoI2FkZER5bmFtaWNMYWJlbChvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguRHluYW1pY0xhYmVsKSA8ZW0+QWRkIER5bmFtaWMgTGFiZWw8L2VtPn08L2xpPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5HcmFwaCNzd2l0Y2hUb05leHRWYWx1ZShvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuU1RFTVRpbWUpIDxlbT5Td2l0Y2ggVG8gTmV4dCBWYWx1ZTwvZW0+fTwvbGk+CisgKiA8L3VsPgorICogPC9wPgorICogQGdlbmVyYXRlZAorICovCitAU3VwcHJlc3NXYXJuaW5ncygiYWxsIikKK3B1YmxpYyBjbGFzcyBHcmFwaFRlc3QgZXh0ZW5kcyBJZGVudGlmaWFibGVUZXN0IHsKKworCXByaXZhdGUgc3RhdGljIGZpbmFsIFNURU1UaW1lIFNXSVRDSF9USU1FID0gTW9kZWxGYWN0b3J5LmVJTlNUQU5DRQorCQkJLmNyZWF0ZVNURU1UaW1lKCk7CisKKwlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIFVSSSBHUkFQSDFfVVJJID0gU1RFTVVSSQorCQkJLmNyZWF0ZVVSSSgiZ3JhcGgvdGVzdGdyYXBoMSIpOworCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBVUkkgR1JBUEgyX1VSSSA9IFNURU1VUkkuY3JlYXRlVVJJKCJncmFwaC9nMiIpOworCisJLy8gVGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBncmFwaCAoIm1haW4iKSB0byBiZSBhZGRlZCB0bworCXByaXZhdGUgc3RhdGljIGZpbmFsIGludCBNQUlOX05VTV9EWU5BTUlDX0VER0VfTEFCRUxTID0gMTsKKworCXByaXZhdGUgc3RhdGljIGZpbmFsIGludCBNQUlOX05VTV9TVEFUSUNfRURHRV9MQUJFTFMgPSAxOworCisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IE1BSU5fTlVNX0RZTkFNSUNfR1JBUEhfTEFCRUxTID0gMTsKKworCXByaXZhdGUgc3RhdGljIGZpbmFsIGludCBNQUlOX05VTV9TVEFUSUNfR1JBUEhfTEFCRUxTID0gMTsKKworCXByaXZhdGUgc3RhdGljIGZpbmFsIGludCBNQUlOX05VTV9TVEFUSUNfTk9ERV9MQUJFTFMgPSAyOworCisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IE1BSU5fTlVNX0RZTkFNSUNfTk9ERV9MQUJFTFMgPSAyICogTUFJTl9OVU1fRFlOQU1JQ19FREdFX0xBQkVMUzsKKworCXByaXZhdGUgc3RhdGljIGZpbmFsIGludCBNQUlOX05VTV9FREdFUyA9IE1BSU5fTlVNX0RZTkFNSUNfRURHRV9MQUJFTFMKKwkJCSsgTUFJTl9OVU1fU1RBVElDX0VER0VfTEFCRUxTOworCisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IE1BSU5fTlVNX05PREVTID0gMiAqIE1BSU5fTlVNX0VER0VTOworCisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IE1BSU5fTlVNX05PREVfTEFCRUxTID0gTUFJTl9OVU1fU1RBVElDX05PREVfTEFCRUxTCisJCQkrIE1BSU5fTlVNX0RZTkFNSUNfTk9ERV9MQUJFTFM7CisKKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgTUFJTl9OVU1fR1JBUEhfTEFCRUxTID0gTUFJTl9OVU1fRFlOQU1JQ19HUkFQSF9MQUJFTFMKKwkJCSsgTUFJTl9OVU1fU1RBVElDX0dSQVBIX0xBQkVMUzsKKworCXByaXZhdGUgc3RhdGljIGZpbmFsIGludCBNQUlOX05VTV9EWU5BTUlDX0xBQkVMUyA9IE1BSU5fTlVNX0RZTkFNSUNfR1JBUEhfTEFCRUxTCisJCQkrIE1BSU5fTlVNX0RZTkFNSUNfRURHRV9MQUJFTFMgKyBNQUlOX05VTV9EWU5BTUlDX05PREVfTEFCRUxTOworCisJLy8gVGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBncmFwaCAoImFkZCIpIHRvIGJlIGFkZGVkCisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IEFERF9OVU1fRFlOQU1JQ19FREdFX0xBQkVMUyA9IDI7CisKKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgQUREX05VTV9TVEFUSUNfRURHRV9MQUJFTFMgPSAzOworCisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IEFERF9OVU1fU1RBVElDX0dSQVBIX0xBQkVMUyA9IDM7CisKKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgQUREX05VTV9EWU5BTUlDX0dSQVBIX0xBQkVMUyA9IDI7CisKKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgQUREX05VTV9TVEFUSUNfTk9ERV9MQUJFTFMgPSAyICogQUREX05VTV9TVEFUSUNfRURHRV9MQUJFTFM7CisKKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgQUREX05VTV9EWU5BTUlDX05PREVfTEFCRUxTID0gMiAqIEFERF9OVU1fRFlOQU1JQ19FREdFX0xBQkVMUzsKKworCXByaXZhdGUgc3RhdGljIGZpbmFsIGludCBBRERfTlVNX0VER0VTID0gQUREX05VTV9EWU5BTUlDX0VER0VfTEFCRUxTCisJCQkrIEFERF9OVU1fU1RBVElDX0VER0VfTEFCRUxTOworCisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IEFERF9OVU1fTk9ERVMgPSAyICogQUREX05VTV9FREdFUzsKKworCXByaXZhdGUgc3RhdGljIGZpbmFsIGludCBBRERfTlVNX05PREVfTEFCRUxTID0gQUREX05VTV9TVEFUSUNfTk9ERV9MQUJFTFMKKwkJCSsgQUREX05VTV9EWU5BTUlDX05PREVfTEFCRUxTOworCisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IEFERF9OVU1fR1JBUEhfTEFCRUxTID0gQUREX05VTV9EWU5BTUlDX0dSQVBIX0xBQkVMUworCQkJKyBBRERfTlVNX1NUQVRJQ19HUkFQSF9MQUJFTFM7CisKKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgQUREX05VTV9EWU5BTUlDX0xBQkVMUyA9IEFERF9OVU1fRFlOQU1JQ19HUkFQSF9MQUJFTFMKKwkJCSsgQUREX05VTV9EWU5BTUlDX0VER0VfTEFCRUxTICsgQUREX05VTV9EWU5BTUlDX05PREVfTEFCRUxTOworCisJLy8gUmVzdWx0cyBhZnRlciB0aGUgImFkZEdyYXBoIiBvcGVyYXRpb24KKworCS8vIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBSRVNVTFRfTlVNX1NUQVRJQ19OT0RFX0xBQkVMUyA9IDA7CisKKwkvLyBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgUkVTVUxUX05VTV9EWU5BTUlDX05PREVfTEFCRUxTID0KKwkvLyBNQUlOX05VTV9EWU5BTUlDX05PREVfTEFCRUxTCisJLy8gKyBBRERfTlVNX0RZTkFNSUNfTk9ERV9MQUJFTFM7CisKKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgUkVTVUxUX05VTV9OT0RFUyA9IE1BSU5fTlVNX05PREVTICsgQUREX05VTV9OT0RFUzsKKworCXByaXZhdGUgc3RhdGljIGZpbmFsIGludCBSRVNVTFRfTlVNX0VER0VTID0gTUFJTl9OVU1fRURHRVMgKyBBRERfTlVNX0VER0VTOworCisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IFJFU1VMVF9OVU1fTk9ERV9MQUJFTFMgPSBNQUlOX05VTV9OT0RFX0xBQkVMUworCQkJKyBBRERfTlVNX05PREVfTEFCRUxTOworCisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IFJFU1VMVF9OVU1fR1JBUEhfTEFCRUxTID0gTUFJTl9OVU1fR1JBUEhfTEFCRUxTCisJCQkrIEFERF9OVU1fR1JBUEhfTEFCRUxTOworCisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IFJFU1VMVF9OVU1fRFlOQU1JQ19MQUJFTFMgPSBNQUlOX05VTV9EWU5BTUlDX0xBQkVMUworCQkJKyBBRERfTlVNX0RZTkFNSUNfTEFCRUxTOworCisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgVVJJIFNFUklBTFpBVElPTl9URVNUX1VSSSA9IFVSSQorCQkJLmNyZWF0ZVVSSSgidGVtcC90ZXN0Z3JhcGgxLmdyYXBoIik7CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgeworCQlUZXN0UnVubmVyLnJ1bihHcmFwaFRlc3QuY2xhc3MpOworCX0KKworCS8qKgorCSAqIENvbnN0cnVjdHMgYSBuZXcgR3JhcGggdGVzdCBjYXNlIHdpdGggdGhlIGdpdmVuIG5hbWUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYworCSAqIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEdyYXBoVGVzdChTdHJpbmcgbmFtZSkgeworCQlzdXBlcihuYW1lKTsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBmaXh0dXJlIGZvciB0aGlzIEdyYXBoIHRlc3QgY2FzZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgR3JhcGggZ2V0Rml4dHVyZSgpIHsKKwkJcmV0dXJuIChHcmFwaClmaXh0dXJlOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBzZWUganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlI3NldFVwKCkKKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIHNldFVwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCVRlc3RVdGlsLnJlc2V0Q291bnRlcnMoKTsKKwkJc2V0Rml4dHVyZShjcmVhdGVGaXh0dXJlKCkpOworCX0gLy8gc2V0VXAKKworCS8qKgorCSAqIEByZXR1cm4gYSB0ZXN0IGdyYXBoCisJICovCisJcHVibGljIHN0YXRpYyBHcmFwaCBjcmVhdGVGaXh0dXJlKCkgeworCQlmaW5hbCBHcmFwaCByZXRWYWx1ZSA9IEdyYXBoRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlR3JhcGgoKTsKKwkJcmV0VmFsdWUuc2V0VVJJKEdSQVBIMV9VUkkpOworCisJCXBvcHVsYXRlR3JhcGgoTUFJTl9OVU1fRFlOQU1JQ19FREdFX0xBQkVMUywKKwkJCQlNQUlOX05VTV9TVEFUSUNfRURHRV9MQUJFTFMsIE1BSU5fTlVNX0RZTkFNSUNfR1JBUEhfTEFCRUxTLAorCQkJCU1BSU5fTlVNX1NUQVRJQ19HUkFQSF9MQUJFTFMsIHJldFZhbHVlKTsKKworCQlyZXR1cm4gcmV0VmFsdWU7CisJfSAvLyBjcmVhdGVGaXh0dXJlCisKKwkvKioKKwkgKiBBZGQgZWRnZXMsIG5vZGVzIGFuZCBsYWJlbHMgdG8gYSBncmFwaC4KKwkgKi8KKwlwcml2YXRlIHN0YXRpYyB2b2lkIHBvcHVsYXRlR3JhcGgoCisJCQlmaW5hbCBpbnQgbnVtYmVyT2ZEeW5hbWljYWxseUxhYmVsZWRFZGdlcywKKwkJCWZpbmFsIGludCBudW1iZXJPZlN0YXRpY2FsbHlMYWJlbGVkRWRnZXMsCisJCQlmaW5hbCBpbnQgbnVtYmVyT2ZEeW5hbWljYWxseUxhYmVsZWRHcmFwaExhYmVscywKKwkJCWZpbmFsIGludCBudW1iZXJPZlN0YXRpY2FsbHlMYWJlbGVkR3JhcGhMYWJlbHMsIGZpbmFsIEdyYXBoIGdyYXBoKSB7CisKKwkJZmluYWwgVGVzdE5vZGVEZWNvcmF0b3IxIHRuZCA9IERlY29yYXRvcnNGYWN0b3J5LmVJTlNUQU5DRQorCQkJCS5jcmVhdGVUZXN0Tm9kZURlY29yYXRvcjEoKTsKKwkJZmluYWwgVGVzdEVkZ2VEZWNvcmF0b3IxIHRlZCA9IERlY29yYXRvcnNGYWN0b3J5LmVJTlNUQU5DRQorCQkJCS5jcmVhdGVUZXN0RWRnZURlY29yYXRvcjEoKTsKKwkJZmluYWwgVGVzdEdyYXBoRGVjb3JhdG9yMSB0Z2QgPSBEZWNvcmF0b3JzRmFjdG9yeS5lSU5TVEFOQ0UKKwkJCQkuY3JlYXRlVGVzdEdyYXBoRGVjb3JhdG9yMSgpOworCisJCWdyYXBoLmdldERlY29yYXRvcnMoKS5hZGQodG5kKTsKKwkJZ3JhcGguZ2V0RGVjb3JhdG9ycygpLmFkZCh0ZWQpOworCQlncmFwaC5nZXREZWNvcmF0b3JzKCkuYWRkKHRnZCk7CisJCQorCQlwb3B1bGF0ZUR5bmFtaWNhbGx5TGFiZWxlZEVkZ2VzKGdyYXBoLCBudW1iZXJPZkR5bmFtaWNhbGx5TGFiZWxlZEVkZ2VzLAorCQkJCXRuZCwgdGVkKTsKKwkJcG9wdWxhdGVTdGF0aWNhbGx5TGFiZWxlZEVkZ2VzKGdyYXBoLCBudW1iZXJPZlN0YXRpY2FsbHlMYWJlbGVkRWRnZXMsCisJCQkJdG5kLCB0ZWQsIHRnZCk7CisJCXBvcHVsYXRlRHluYW1pY0dyYXBoTGFiZWxzKGdyYXBoLAorCQkJCW51bWJlck9mRHluYW1pY2FsbHlMYWJlbGVkR3JhcGhMYWJlbHMsIHRnZCk7CisJCXBvcHVsYXRlU3RhdGljR3JhcGhMYWJlbHMoZ3JhcGgsIG51bWJlck9mU3RhdGljYWxseUxhYmVsZWRHcmFwaExhYmVscyk7CisKKwl9IC8vIHBvcHVsYXRlR3JhcGgKKworCS8qKgorCSAqIEBwYXJhbSBncmFwaAorCSAqIEBwYXJhbSBudW1iZXJPZlN0YXRpY2FsbHlMYWJlbGVkR3JhcGhMYWJlbHMKKwkgKi8KKwlwcml2YXRlIHN0YXRpYyB2b2lkIHBvcHVsYXRlU3RhdGljR3JhcGhMYWJlbHMoR3JhcGggZ3JhcGgsCisJCQlpbnQgbnVtYmVyT2ZTdGF0aWNhbGx5TGFiZWxlZEdyYXBoTGFiZWxzKSB7CisJCWZvciAoaW50IHN0YXRpY0dyYXBoTGFiZWxOdW1iZXIgPSAwOyBzdGF0aWNHcmFwaExhYmVsTnVtYmVyIDwgbnVtYmVyT2ZTdGF0aWNhbGx5TGFiZWxlZEdyYXBoTGFiZWxzOyBzdGF0aWNHcmFwaExhYmVsTnVtYmVyKyspIHsKKwkJCWZpbmFsIExhYmVsIGdyYXBoTGFiZWwgPSBUZXN0VXRpbC5jcmVhdGVTdGF0aWNMYWJlbChncmFwaC5nZXRVUkkoKSk7CisJCQlncmFwaC5wdXRHcmFwaExhYmVsKGdyYXBoTGFiZWwpOworCQl9IC8vIGZvciBsYWJlbE51bWJlcgorCX0gLy8gcG9wdWxhdGVTdGF0aWNHcmFwaExhYmVscworCisJLyoqCisJICogQHBhcmFtIGdyYXBoCisJICogQHBhcmFtIG51bWJlck9mRHluYW1pY2FsbHlMYWJlbGVkR3JhcGhMYWJlbHMKKwkgKiBAcGFyYW0gZ3JhcGhEZWNvcmF0b3IKKwkgKiAgICAgICAgICAgIFRPRE8KKwkgKi8KKwlwcml2YXRlIHN0YXRpYyB2b2lkIHBvcHVsYXRlRHluYW1pY0dyYXBoTGFiZWxzKEdyYXBoIGdyYXBoLAorCQkJZmluYWwgaW50IG51bWJlck9mRHluYW1pY2FsbHlMYWJlbGVkR3JhcGhMYWJlbHMsCisJCWZpbmFsCUdyYXBoRGVjb3JhdG9yIGdyYXBoRGVjb3JhdG9yKSB7CisJCWZvciAoaW50IGR5bmFtaWNHcmFwaExhYmVsTnVtYmVyID0gMDsgZHluYW1pY0dyYXBoTGFiZWxOdW1iZXIgPCBudW1iZXJPZkR5bmFtaWNhbGx5TGFiZWxlZEdyYXBoTGFiZWxzOyBkeW5hbWljR3JhcGhMYWJlbE51bWJlcisrKSB7CisJCQlmaW5hbCBEeW5hbWljTGFiZWwgZHluYW1pY0xhYmVsID0gVGVzdFV0aWwuY3JlYXRlRHluYW1pY0xhYmVsKGdyYXBoCisJCQkJCS5nZXRVUkkoKSwgZ3JhcGhEZWNvcmF0b3IpOworCisJCQlhc3NlcnQgZHluYW1pY0xhYmVsLnNhbmUoKTsKKworCQkJZ3JhcGgucHV0R3JhcGhMYWJlbChkeW5hbWljTGFiZWwpOworCQl9IC8vIGZvciBsYWJlbE51bWJlcgorCX0gLy8gcG9wdWxhdGVEeW5hbWljR3JhcGhMYWJlbHMKKworCS8qKgorCSAqIAorCSAqIEBwYXJhbSBncmFwaAorCSAqIEBwYXJhbSBudW1iZXJPZkR5bmFtaWNhbGx5TGFiZWxlZEVkZ2VzCisJICogQHBhcmFtIG5vZGVEZWNvcmF0b3IKKwkgKiAgICAgICAgICAgIFRPRE8KKwkgKiBAcGFyYW0gZWRnZURlY29yYXRvcgorCSAqICAgICAgICAgICAgVE9ETworCSAqLworCXByaXZhdGUgc3RhdGljIHZvaWQgcG9wdWxhdGVEeW5hbWljYWxseUxhYmVsZWRFZGdlcyhmaW5hbCBHcmFwaCBncmFwaCwKKwkJCWZpbmFsIGludCBudW1iZXJPZkR5bmFtaWNhbGx5TGFiZWxlZEVkZ2VzLAorCQkJTm9kZURlY29yYXRvciBub2RlRGVjb3JhdG9yLCBFZGdlRGVjb3JhdG9yIGVkZ2VEZWNvcmF0b3IpIHsKKworCQlmb3IgKGludCBlZGdlTnVtYmVyID0gMDsgZWRnZU51bWJlciA8IG51bWJlck9mRHluYW1pY2FsbHlMYWJlbGVkRWRnZXM7IGVkZ2VOdW1iZXIrKykgeworCQkJLy8gRWFjaCBlZGdlIGFkZHMgdHdvIG5vZGVzIHRvIHRoZSBncmFwaCwgYWxsIHRocmVlIGhhdmUgZHluYW1pYworCQkJLy8gbGFiZWxzCisJCQlmaW5hbCBOb2RlIG5vZGVBID0gVGVzdFV0aWwKKwkJCQkJLmNyZWF0ZUR5bmFtaWNhbHlMYWJlbGVkTm9kZShub2RlRGVjb3JhdG9yKTsKKwkJCWZpbmFsIE5vZGUgbm9kZUIgPSBUZXN0VXRpbAorCQkJCQkuY3JlYXRlRHluYW1pY2FseUxhYmVsZWROb2RlKG5vZGVEZWNvcmF0b3IpOworCQkJZmluYWwgRWRnZSBlZGdlID0gVGVzdFV0aWwuY3JlYXRlRHluYW1pY2FsbHlMYWJlbGVkRWRnZShub2RlQQorCQkJCQkuZ2V0VVJJKCksIG5vZGVCLmdldFVSSSgpLCBlZGdlRGVjb3JhdG9yKTsKKworCQkJZWRnZS5zZXRBKG5vZGVBKTsKKwkJCWVkZ2Uuc2V0Qihub2RlQik7CisJCQlub2RlQS5nZXRFZGdlcygpLmFkZChlZGdlKTsKKwkJCW5vZGVCLmdldEVkZ2VzKCkuYWRkKGVkZ2UpOworCisJCQlhc3NlcnQgZWRnZS5zYW5lKCk7CisJCQlhc3NlcnQgbm9kZUEuc2FuZSgpOworCQkJYXNzZXJ0IG5vZGVCLnNhbmUoKTsKKworCQkJZ3JhcGgucHV0RWRnZShlZGdlKTsKKwkJCWdyYXBoLnB1dE5vZGUobm9kZUEpOworCQkJZ3JhcGgucHV0Tm9kZShub2RlQik7CisKKwkJfSAvLyBmb3IgZWRnZU51bWJlcgorCisJfSAvLyBwb3B1bGF0ZUR5bmFtaWNhbGx5TGFiZWxlZEVkZ2VzCisKKwkvKioKKwkgKiBAcGFyYW0gZ3JhcGgKKwkgKiBAcGFyYW0gbnVtYmVyT2ZTdGF0aWNhbGx5TGFiZWxlZEVkZ2VzCisJICogQHBhcmFtIG5vZGVEZWNvcmF0b3IKKwkgKiAgICAgICAgICAgIFRPRE8KKwkgKiBAcGFyYW0gZWRnZURlY29yYXRvcgorCSAqICAgICAgICAgICAgVE9ETworCSAqIEBwYXJhbSBncmFwaERlY29yYXRvcgorCSAqICAgICAgICAgICAgVE9ETworCSAqLworCXByaXZhdGUgc3RhdGljIHZvaWQgcG9wdWxhdGVTdGF0aWNhbGx5TGFiZWxlZEVkZ2VzKGZpbmFsIEdyYXBoIGdyYXBoLAorCQkJZmluYWwgaW50IG51bWJlck9mU3RhdGljYWxseUxhYmVsZWRFZGdlcywKKwkJCU5vZGVEZWNvcmF0b3Igbm9kZURlY29yYXRvciwgRWRnZURlY29yYXRvciBlZGdlRGVjb3JhdG9yLAorCQkJR3JhcGhEZWNvcmF0b3IgZ3JhcGhEZWNvcmF0b3IpIHsKKwkJZm9yIChpbnQgZWRnZU51bWJlciA9IDA7IGVkZ2VOdW1iZXIgPCBudW1iZXJPZlN0YXRpY2FsbHlMYWJlbGVkRWRnZXM7IGVkZ2VOdW1iZXIrKykgeworCQkJLy8gRWFjaCBzdGF0aWNhbGx5IGxhYmVsZWQgZWRnZSBhZGRzIHR3byBub2RlcworCQkJZmluYWwgTm9kZSBub2RlQSA9IFRlc3RVdGlsLmNyZWF0ZVN0YXRpY2FsbHlMYWJlbGVkTm9kZSgpOworCQkJZmluYWwgTm9kZSBub2RlQiA9IFRlc3RVdGlsLmNyZWF0ZVN0YXRpY2FsbHlMYWJlbGVkTm9kZSgpOworCQkJZmluYWwgRWRnZSBlZGdlID0gVGVzdFV0aWwuY3JlYXRlU3RhdGljYWxseUxhYmVsZWRFZGdlKG5vZGVBCisJCQkJCS5nZXRVUkkoKSwgbm9kZUIuZ2V0VVJJKCkpOworCisJCQllZGdlLnNldEEobm9kZUEpOworCQkJZWRnZS5zZXRCKG5vZGVCKTsKKwkJCW5vZGVBLmdldEVkZ2VzKCkuYWRkKGVkZ2UpOworCQkJbm9kZUIuZ2V0RWRnZXMoKS5hZGQoZWRnZSk7CisKKwkJCWFzc2VydCBlZGdlLnNhbmUoKTsKKwkJCWFzc2VydCBub2RlQS5zYW5lKCk7CisJCQlhc3NlcnQgbm9kZUIuc2FuZSgpOworCisJCQlncmFwaC5wdXRFZGdlKGVkZ2UpOworCQkJZ3JhcGgucHV0Tm9kZShub2RlQSk7CisJCQlncmFwaC5wdXROb2RlKG5vZGVCKTsKKwkJCS8vIGZpbmFsIE5vZGVMYWJlbCBub2RlQUxhYmVsID0gKE5vZGVMYWJlbCkKKwkJCS8vIG5vZGVBLmdldExhYmVscygpLmdldCgwKTsKKwkJCS8vIGZpbmFsIE5vZGVMYWJlbCBub2RlQkxhYmVsID0gKE5vZGVMYWJlbCkKKwkJCS8vIG5vZGVCLmdldExhYmVscygpLmdldCgwKTsKKwkJCS8vIGdyYXBoLnB1dE5vZGVMYWJlbChub2RlQUxhYmVsKTsKKwkJCS8vIGdyYXBoLnB1dE5vZGVMYWJlbChub2RlQkxhYmVsKTsKKwkJfSAvLyBmb3IgZWRnZU51bWJlcgorCX0gLy8gcG9wdWxhdGVTdGF0aWNhbGx5TGFiZWxlZEVkZ2VzCisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZSN0ZWFyRG93bigpCisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIHRlYXJEb3duKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCXNldEZpeHR1cmUobnVsbCk7CisJfQorCisJLyoqCisJICogVGVzdHMgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkdyYXBoI2dldE51bUVkZ2VzKCkKKwkgKiA8ZW0+IEVkZ2VzPC9lbT59JyBmZWF0dXJlIGdldHRlci4gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLQorCSAqIGVuZC11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5HcmFwaCNnZXROdW1FZGdlcygpCisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlwdWJsaWMgdm9pZCB0ZXN0R2V0TnVtRWRnZXMoKSB7CisJCWZpbmFsIEdyYXBoIGdyYXBoID0gZ2V0Rml4dHVyZSgpOworCQlhc3NlcnRUcnVlKGdyYXBoLmdldE51bUVkZ2VzKCkgPT0gMik7CisJfSAvLyB0ZXN0R2V0TnVtRWRnZXMKKworCS8qKgorCSAqIFRlc3RzIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5HcmFwaCNnZXROdW1Ob2RlcygpCisJICogPGVtPk51bSBOb2RlczwvZW0+fScgZmVhdHVyZSBnZXR0ZXIuIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0KKwkgKiBlbmQtdXNlci1kb2MgLS0+CisJICogCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguR3JhcGgjZ2V0TnVtTm9kZXMoKQorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJcHVibGljIHZvaWQgdGVzdEdldE51bU5vZGVzKCkgeworCQlmaW5hbCBHcmFwaCBncmFwaCA9IGdldEZpeHR1cmUoKTsKKwkJYXNzZXJ0VHJ1ZShncmFwaC5nZXROdW1Ob2RlcygpID09IDQpOworCX0gLy8gdGVzdEdldE51bU5vZGVzCisKKwkvKioKKwkgKiBUZXN0cyB0aGUgJworCSAqIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguR3JhcGgjZ2V0TnVtR3JhcGhMYWJlbHMoKQorCSAqIDxlbT5OdW0gR3JhcGggTGFiZWxzPC9lbT59JyBmZWF0dXJlIGdldHRlci4gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLQorCSAqIGVuZC11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5HcmFwaCNnZXROdW1HcmFwaExhYmVscygpCisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlwdWJsaWMgdm9pZCB0ZXN0R2V0TnVtR3JhcGhMYWJlbHMoKSB7CisJCWZpbmFsIEdyYXBoIGdyYXBoID0gZ2V0Rml4dHVyZSgpOworCQlhc3NlcnRUcnVlKGdyYXBoLmdldE51bUdyYXBoTGFiZWxzKCkgPT0gMik7CisJfSAvLyB0ZXN0R2V0TnVtR3JhcGhMYWJlbHMKKworCS8qKgorCSAqIFRlc3RzIHRoZSAnCisJICoge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5HcmFwaCNnZXROdW1Ob2RlTGFiZWxzKCkKKwkgKiA8ZW0+TnVtIE5vZGUgTGFiZWxzPC9lbT59JyBmZWF0dXJlIGdldHRlci4gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLQorCSAqIGVuZC11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5HcmFwaCNnZXROdW1Ob2RlTGFiZWxzKCkKKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCXB1YmxpYyB2b2lkIHRlc3RHZXROdW1Ob2RlTGFiZWxzKCkgeworCQlmaW5hbCBHcmFwaCBncmFwaCA9IGdldEZpeHR1cmUoKTsKKwkJYXNzZXJ0VHJ1ZShncmFwaC5nZXROdW1Ob2RlTGFiZWxzKCkgPT0gZ3JhcGguZ2V0TnVtTm9kZXMoKSk7CisJfSAvLyB0ZXN0R2V0TnVtTm9kZUxhYmVscworCisJLyoqCisJICogVGVzdHMgdGhlICcKKwkgKiB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkdyYXBoI2dldE51bUR5bmFtaWNMYWJlbHMoKQorCSAqIDxlbT5OdW0gRHluYW1pYyBMYWJlbHM8L2VtPn0nIGZlYXR1cmUgZ2V0dGVyLiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkdyYXBoI2dldE51bUR5bmFtaWNMYWJlbHMoKQorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJcHVibGljIHZvaWQgdGVzdEdldE51bUR5bmFtaWNMYWJlbHMoKSB7CisJCWZpbmFsIEdyYXBoIGdyYXBoID0gZ2V0Rml4dHVyZSgpOworCQlhc3NlcnRUcnVlKGdyYXBoLmdldE51bUR5bmFtaWNMYWJlbHMoKSA9PSA0KTsKKwl9IC8vIHRlc3RHZXROdW1EeW5hbWljTGFiZWxzCisKKwkvKioKKwkgKiBUZXN0cyB0aGUgJworCSAqIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguR3JhcGgjZ2V0Tm9kZUxhYmVsc0J5VHlwZVVSSShvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuVVJJKQorCSAqIDxlbT5HZXQgTm9kZSBMYWJlbHMgQnkgVHlwZSBVUkk8L2VtPn0nIG9wZXJhdGlvbi4gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5HcmFwaCNnZXROb2RlTGFiZWxzQnlUeXBlVVJJKG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5VUkkpCisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlwdWJsaWMgdm9pZCB0ZXN0R2V0Tm9kZUxhYmVsc0J5VHlwZVVSSV9fVVJJKCkgeworCQlmaW5hbCBHcmFwaCBncmFwaCA9IGdldEZpeHR1cmUoKTsKKwkJZmluYWwgRUxpc3Qgbm9kZUxhYmVscyA9IGdyYXBoCisJCQkJLmdldE5vZGVMYWJlbHNCeVR5cGVVUkkoRHluYW1pY0xhYmVsLlVSSV9UWVBFX0RZTkFNSUNfTEFCRUwpOworCQlhc3NlcnRUcnVlKG5vZGVMYWJlbHMuc2l6ZSgpID09IDIpOworCX0gLy8gdGVzdEdldE5vZGVMYWJlbHNCeVR5cGVVUklfX1VSSQorCisJLyoqCisJICogVGVzdHMgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkdyYXBoI2FkZEdyYXBoKG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5HcmFwaCwgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5JZGVudGlmaWFibGVGaWx0ZXIpIDxlbT5BZGQgR3JhcGg8L2VtPn0nIG9wZXJhdGlvbi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkdyYXBoI2FkZEdyYXBoKG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5HcmFwaCwgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5JZGVudGlmaWFibGVGaWx0ZXIpCisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlwdWJsaWMgdm9pZCB0ZXN0QWRkR3JhcGhfX0dyYXBoX0lkZW50aWZpYWJsZUZpbHRlcigpIHsKKwkJLy8gVE9ETzogdGVzdEFkZEdyYXBoX19HcmFwaF9JZGVudGlmaWFibGVGaWx0ZXIoKSB0ZXN0IG1ldGhvZAorCQlhc3NlcnRUcnVlKHRydWUpOworCX0KKworCS8qKgorCSAqIFRlc3QgdGhlIHNhbml0eSBvZiB0aGUgZml4dHVyZQorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIHRlc3RTYW5lKCkgeworCQlmaW5hbCBHcmFwaCBncmFwaCA9IGdldEZpeHR1cmUoKTsKKwkJYXNzZXJ0VHJ1ZShncmFwaC5zYW5lKCkpOworCX0gLy8gdGVzdFNhbmUKKworCS8qKgorCSAqIFRlc3RzIHRoZSAnCisJICoge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5HcmFwaCNhZGRHcmFwaChvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguR3JhcGgpCisJICogPGVtPkFkZCBHcmFwaDwvZW0+fScgb3BlcmF0aW9uLiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYworCSAqIC0tPgorCSAqIAorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkdyYXBoI2FkZEdyYXBoKG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5HcmFwaCkKKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCXB1YmxpYyB2b2lkIHRlc3RBZGRHcmFwaF9fR3JhcGgoKSB7CisJCWZpbmFsIEdyYXBoIG1haW5HcmFwaCA9IGdldEZpeHR1cmUoKTsKKworCQlmaW5hbCBHcmFwaCBhZGRHcmFwaCA9IEdyYXBoRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlR3JhcGgoKTsKKworCQlwb3B1bGF0ZUdyYXBoKEFERF9OVU1fRFlOQU1JQ19FREdFX0xBQkVMUywgQUREX05VTV9TVEFUSUNfRURHRV9MQUJFTFMsCisJCQkJQUREX05VTV9EWU5BTUlDX0dSQVBIX0xBQkVMUywgQUREX05VTV9TVEFUSUNfR1JBUEhfTEFCRUxTLAorCQkJCWFkZEdyYXBoKTsKKworCQlhc3NlcnRUcnVlKG1haW5HcmFwaC5nZXROdW1FZGdlcygpID09IE1BSU5fTlVNX0VER0VTKTsKKwkJYXNzZXJ0VHJ1ZShtYWluR3JhcGguZ2V0TnVtTm9kZXMoKSA9PSBNQUlOX05VTV9OT0RFUyk7CisJCWFzc2VydFRydWUobWFpbkdyYXBoLmdldE51bU5vZGVMYWJlbHMoKSA9PSBNQUlOX05VTV9OT0RFX0xBQkVMUyk7CisKKwkJYXNzZXJ0VHJ1ZShhZGRHcmFwaC5nZXROdW1FZGdlcygpID09IEFERF9OVU1fRURHRVMpOworCQlhc3NlcnRUcnVlKGFkZEdyYXBoLmdldE51bU5vZGVzKCkgPT0gQUREX05VTV9OT0RFUyk7CisJCWFzc2VydFRydWUoYWRkR3JhcGguZ2V0TnVtTm9kZUxhYmVscygpID09IEFERF9OVU1fTk9ERV9MQUJFTFMpOworCisJCS8vIEFkZCB0aGUgdHdvIGdyYXBocyB0b2dldGhlcgorCQltYWluR3JhcGguYWRkR3JhcGgoYWRkR3JhcGgsIG51bGwpOworCisJCWFzc2VydFRydWUobWFpbkdyYXBoLmdldE51bUVkZ2VzKCkgPT0gUkVTVUxUX05VTV9FREdFUyk7CisJCWFzc2VydFRydWUobWFpbkdyYXBoLmdldE51bU5vZGVzKCkgPT0gUkVTVUxUX05VTV9OT0RFUyk7CisJCWFzc2VydFRydWUobWFpbkdyYXBoLmdldE51bU5vZGVMYWJlbHMoKSA9PSBSRVNVTFRfTlVNX05PREVfTEFCRUxTKTsKKwkJYXNzZXJ0VHJ1ZShtYWluR3JhcGguZ2V0TnVtR3JhcGhMYWJlbHMoKSA9PSBSRVNVTFRfTlVNX0dSQVBIX0xBQkVMUyk7CisJCWFzc2VydFRydWUobWFpbkdyYXBoLmdldE51bUR5bmFtaWNMYWJlbHMoKSA9PSBSRVNVTFRfTlVNX0RZTkFNSUNfTEFCRUxTKTsKKwl9IC8vIHRlc3RBZGRHcmFwaF9fR3JhcGgKKworCS8qKgorCSAqIFRlc3RzIHRoZSAnCisJICoge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5HcmFwaCNwdXRFZGdlKG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5FZGdlKQorCSAqIDxlbT5QdXQgRWRnZTwvZW0+fScgb3BlcmF0aW9uLiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYworCSAqIC0tPgorCSAqIAorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkdyYXBoI3B1dEVkZ2Uob3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkVkZ2UpCisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlwdWJsaWMgdm9pZCB0ZXN0UHV0RWRnZV9fRWRnZSgpIHsKKwkJZmluYWwgR3JhcGggZ3JhcGggPSBnZXRGaXh0dXJlKCk7CisJCWZpbmFsIEVkZ2UgZWRnZSA9IFRlc3RVdGlsLmNyZWF0ZVN0YXRpY2FsbHlMYWJlbGVkRWRnZShUZXN0VXRpbAorCQkJCS5jcmVhdGVOZXh0SWRlbnRpZmlhYmxlVG9MYWJlbFVSSSgpLCBUZXN0VXRpbAorCQkJCS5jcmVhdGVOZXh0SWRlbnRpZmlhYmxlVG9MYWJlbFVSSSgpKTsKKwkJZ3JhcGgucHV0RWRnZShlZGdlKTsKKwkJYXNzZXJ0VHJ1ZShlZGdlLmVxdWFscyhncmFwaC5nZXRFZGdlKGVkZ2UuZ2V0VVJJKCkpKSk7CisJfSAvLyB0ZXN0UHV0RWRnZV9fRWRnZQorCisJLyoqCisJICogVGVzdHMgdGhlICcKKwkgKiB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkdyYXBoI2dldEVkZ2Uob3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlVSSSkKKwkgKiA8ZW0+R2V0IEVkZ2U8L2VtPn0nIG9wZXJhdGlvbi4gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MKKwkgKiAtLT4KKwkgKiAKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5HcmFwaCNnZXRFZGdlKG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5VUkkpCisJICogQHNlZSAjdGVzdFB1dEVkZ2VfX0VkZ2UoKQorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJcHVibGljIHZvaWQgdGVzdEdldEVkZ2VfX1VSSSgpIHsKKwkJLy8gSW1wbGVtZW50ZWQgaW4gdGVzdFB1dEVkZ2VfX0VkZ2UKKwkJYXNzZXJ0VHJ1ZSh0cnVlKTsKKwl9IC8vIHRlc3RHZXRFZGdlX19VUkkKKworCS8qKgorCSAqIFRlc3RzIHRoZSAnCisJICoge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5HcmFwaCNwdXROb2RlKG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5Ob2RlKQorCSAqIDxlbT5QdXQgTm9kZTwvZW0+fScgb3BlcmF0aW9uLiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYworCSAqIC0tPgorCSAqIAorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkdyYXBoI3B1dE5vZGUob3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLk5vZGUpCisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlwdWJsaWMgdm9pZCB0ZXN0UHV0Tm9kZV9fTm9kZSgpIHsKKwkJZmluYWwgR3JhcGggZ3JhcGggPSBnZXRGaXh0dXJlKCk7CisJCWZpbmFsIE5vZGUgbm9kZSA9IFRlc3RVdGlsLmNyZWF0ZVN0YXRpY2FsbHlMYWJlbGVkTm9kZSgpOworCQlncmFwaC5wdXROb2RlKG5vZGUpOworCQlhc3NlcnRUcnVlKG5vZGUuZXF1YWxzKGdyYXBoLmdldE5vZGUobm9kZS5nZXRVUkkoKSkpKTsKKwl9IC8vIHRlc3RQdXROb2RlX19Ob2RlCisKKwkvKioKKwkgKiBUZXN0cyB0aGUgJworCSAqIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguR3JhcGgjZ2V0Tm9kZShvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuVVJJKQorCSAqIDxlbT5HZXQgTm9kZTwvZW0+fScgb3BlcmF0aW9uLiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYworCSAqIC0tPgorCSAqIAorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkdyYXBoI2dldE5vZGUob3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlVSSSkKKwkgKiBAc2VlICN0ZXN0UHV0Tm9kZV9fTm9kZSgpCisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlwdWJsaWMgdm9pZCB0ZXN0R2V0Tm9kZV9fVVJJKCkgeworCQkvLyBJbXBsZW1lbnRlZCBpbiB0ZXN0UHV0Tm9kZV9fTm9kZQorCQlhc3NlcnRUcnVlKHRydWUpOworCX0gLy8gdGVzdEdldE5vZGVfX1VSSQorCisJLyoqCisJICogVGVzdHMgdGhlICcKKwkgKiB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkdyYXBoI3B1dE5vZGVMYWJlbChvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguTm9kZUxhYmVsKQorCSAqIDxlbT5QdXQgTm9kZSBMYWJlbDwvZW0+fScgb3BlcmF0aW9uLiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tCisJICogZW5kLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkdyYXBoI3B1dE5vZGVMYWJlbChvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguTm9kZUxhYmVsKQorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJcHVibGljIHZvaWQgdGVzdFB1dE5vZGVMYWJlbF9fTm9kZUxhYmVsKCkgeworCQlmaW5hbCBHcmFwaCBncmFwaCA9IGdldEZpeHR1cmUoKTsKKwkJZmluYWwgRHluYW1pY05vZGVMYWJlbCBsYWJlbCA9IFRlc3RVdGlsLmNyZWF0ZUR5bmFtaWNOb2RlTGFiZWwoKTsKKwkJZ3JhcGgucHV0Tm9kZUxhYmVsKGxhYmVsKTsKKwkJYXNzZXJ0VHJ1ZShsYWJlbC5lcXVhbHMoZ3JhcGguZ2V0Tm9kZUxhYmVsKGxhYmVsLmdldFVSSSgpKSkpOworCX0KKworCS8qKgorCSAqIFRlc3RzIHRoZSAnCisJICoge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5HcmFwaCNnZXROb2RlTGFiZWwob3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlVSSSkKKwkgKiA8ZW0+R2V0IE5vZGUgTGFiZWw8L2VtPn0nIG9wZXJhdGlvbi4gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLQorCSAqIGVuZC11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5HcmFwaCNnZXROb2RlTGFiZWwob3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlVSSSkKKwkgKiBAc2VlICN0ZXN0UHV0Tm9kZUxhYmVsX19Ob2RlTGFiZWwoKQorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJcHVibGljIHZvaWQgdGVzdEdldE5vZGVMYWJlbF9fVVJJKCkgeworCQkvLyBJbXBsZW1lbnRlZCBpbiB0ZXN0UHV0Tm9kZUxhYmVsX19Ob2RlTGFiZWwKKwkJYXNzZXJ0VHJ1ZSh0cnVlKTsKKwl9IC8vIHRlc3RHZXROb2RlTGFiZWxfX1VSSQorCisJLyoqCisJICogVGVzdHMgdGhlICcKKwkgKiB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkdyYXBoI3B1dEdyYXBoTGFiZWwob3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkxhYmVsKQorCSAqIDxlbT5QdXQgR3JhcGggTGFiZWw8L2VtPn0nIG9wZXJhdGlvbi4gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLQorCSAqIGVuZC11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5HcmFwaCNwdXRHcmFwaExhYmVsKG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5MYWJlbCkKKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCXB1YmxpYyB2b2lkIHRlc3RQdXRHcmFwaExhYmVsX19MYWJlbCgpIHsKKwkJZmluYWwgR3JhcGggZ3JhcGggPSBnZXRGaXh0dXJlKCk7CisJCWZpbmFsIExhYmVsIGxhYmVsID0gVGVzdFV0aWwuY3JlYXRlU3RhdGljTGFiZWwoKTsKKwkJZ3JhcGgucHV0R3JhcGhMYWJlbChsYWJlbCk7CisJCWFzc2VydFRydWUobGFiZWwuZXF1YWxzKGdyYXBoLmdldEdyYXBoTGFiZWwobGFiZWwuZ2V0VVJJKCkpKSk7CisJfSAvLyB0ZXN0UHV0R3JhcGhMYWJlbF9fTGFiZWwKKworCS8qKgorCSAqIFRlc3RzIHRoZSAnCisJICoge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5HcmFwaCNnZXRHcmFwaExhYmVsKG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5VUkkpCisJICogPGVtPkdldCBHcmFwaCBMYWJlbDwvZW0+fScgb3BlcmF0aW9uLiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tCisJICogZW5kLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkdyYXBoI2dldEdyYXBoTGFiZWwob3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlVSSSkKKwkgKiBAc2VlICN0ZXN0UHV0R3JhcGhMYWJlbF9fTGFiZWwoKQorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJcHVibGljIHZvaWQgdGVzdEdldEdyYXBoTGFiZWxfX1VSSSgpIHsKKwkJLy8gSW1wbGVtZW50ZWQgaW4gdGVzdFB1dEdyYXBoTGFiZWxfX0xhYmVsCisJCWFzc2VydFRydWUodHJ1ZSk7CisJfSAvLyB0ZXN0R2V0R3JhcGhMYWJlbF9fVVJJCisKKwkvKioKKwkgKiBUZXN0cyB0aGUgJworCSAqIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguR3JhcGgjYWRkRHluYW1pY0xhYmVsKG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5EeW5hbWljTGFiZWwpCisJICogPGVtPkFkZCBEeW5hbWljIExhYmVsPC9lbT59JyBvcGVyYXRpb24uIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0KKwkgKiBlbmQtdXNlci1kb2MgLS0+CisJICogCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguR3JhcGgjYWRkRHluYW1pY0xhYmVsKG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5EeW5hbWljTGFiZWwpCisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlwdWJsaWMgdm9pZCB0ZXN0QWRkRHluYW1pY0xhYmVsX19EeW5hbWljTGFiZWwoKSB7CisJCWZpbmFsIEdyYXBoIGdyYXBoID0gZ2V0Rml4dHVyZSgpOworCQlmaW5hbCBEeW5hbWljTGFiZWwgbGFiZWwgPSBUZXN0VXRpbC5jcmVhdGVEeW5hbWljTGFiZWwoVGVzdFV0aWwKKwkJCQkuY3JlYXRlTmV4dElkZW50aWZpYWJsZVRvTGFiZWxVUkkoKSk7CisJCWdyYXBoLmFkZER5bmFtaWNMYWJlbChsYWJlbCk7CisJCWFzc2VydFRydWUoZ3JhcGguZ2V0RHluYW1pY0xhYmVscygpLmNvbnRhaW5zKGxhYmVsKSk7CisJfSAvLyB0ZXN0QWRkRHluYW1pY0xhYmVsX19EeW5hbWljTGFiZWwKKworCS8qKgorCSAqIFRlc3RzIHRoZSAnCisJICoge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5HcmFwaCNzd2l0Y2hUb05leHRWYWx1ZShvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuU1RFTVRpbWUpCisJICogPGVtPlN3aXRjaCBUbyBOZXh0IFZhbHVlPC9lbT59JyBvcGVyYXRpb24uIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0KKwkgKiBlbmQtdXNlci1kb2MgLS0+CisJICogCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguR3JhcGgjc3dpdGNoVG9OZXh0VmFsdWUob3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLlNURU1UaW1lKQorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJcHVibGljIHZvaWQgdGVzdFN3aXRjaFRvTmV4dFZhbHVlX19TVEVNVGltZSgpIHsKKwkJZmluYWwgR3JhcGggbWFpbkdyYXBoID0gZ2V0Rml4dHVyZSgpOworCisJCS8vIEFsbCBvZiB0aGUgZHluYW1pYyBsYWJlbCBjdXJyZW50IHZhbHVlcyBzaG91bGQgYmUgMCAoemVybykKKwkJZm9yIChmaW5hbCBJdGVyYXRvciBkeW5hbWljTGFiZWxJdGVyID0gbWFpbkdyYXBoLmdldER5bmFtaWNMYWJlbHMoKQorCQkJCS5pdGVyYXRvcigpOyBkeW5hbWljTGFiZWxJdGVyLmhhc05leHQoKTspIHsKKwkJCWFzc2VydEZhbHNlKHZhbHVlc1N3YXBwZWQoKER5bmFtaWNMYWJlbCkgZHluYW1pY0xhYmVsSXRlci5uZXh0KCkpKTsKKwkJfSAvLyBmb3IgZWFjaCBkeW5hbWljIGxhYmVsCisKKwkJZm9yIChmaW5hbCBJdGVyYXRvciBub2RlSXRlcmF0b3IgPSBtYWluR3JhcGguZ2V0Tm9kZXMoKS52YWx1ZXMoKQorCQkJCS5pdGVyYXRvcigpOyBub2RlSXRlcmF0b3IuaGFzTmV4dCgpOykgeworCQkJZmluYWwgTm9kZSBub2RlID0gKE5vZGUpIG5vZGVJdGVyYXRvci5uZXh0KCk7CisJCQlmb3IgKGZpbmFsIEl0ZXJhdG9yIGxhYmVsSXRlciA9IG5vZGUuZ2V0TGFiZWxzKCkuaXRlcmF0b3IoKTsgbGFiZWxJdGVyCisJCQkJCS5oYXNOZXh0KCk7KSB7CisJCQkJZmluYWwgTGFiZWwgbGFiZWwgPSAoTGFiZWwpIGxhYmVsSXRlci5uZXh0KCk7CisJCQkJLy8gSXMgaXQgYSBkeW5hbWljIGxhYmVsPworCQkJCWlmIChsYWJlbCBpbnN0YW5jZW9mIER5bmFtaWNMYWJlbCkgeworCQkJCQlmaW5hbCBEeW5hbWljTGFiZWwgZHluYW1pY0xhYmVsID0gKER5bmFtaWNMYWJlbCkgbGFiZWw7CisJCQkJCWFzc2VydEZhbHNlKHZhbHVlc1N3YXBwZWQoZHluYW1pY0xhYmVsKSk7CisJCQkJfQorCQkJfSAvLyBmb3Igbm9kZSdzIGxhYmVscworCQl9IC8vIGZvciBlYWNoIG5vZGUKKworCQkvLyBBdCB0aGlzIHBvaW50IGFsbCBvZiB0aGUgbmV4dCB2YWx1ZXMgYXJlIGNvbnNpZGVyZWQgImludmFsaWQiIHRoaXMgaXMKKwkJLy8gdGVzdGVkIGluIHN3aXRjaFRvTmV4dFZhbHVlLgorCQlmb3IgKGZpbmFsIEl0ZXJhdG9yIGR5bmFtaWNMYWJlbEl0ZXIgPSBtYWluR3JhcGguZ2V0RHluYW1pY0xhYmVscygpCisJCQkJLml0ZXJhdG9yKCk7IGR5bmFtaWNMYWJlbEl0ZXIuaGFzTmV4dCgpOykgeworCQkJZmluYWwgRHluYW1pY0xhYmVsIGR5bmFtaWNMYWJlbCA9IChEeW5hbWljTGFiZWwpIGR5bmFtaWNMYWJlbEl0ZXIKKwkJCQkJLm5leHQoKTsKKwkJCWR5bmFtaWNMYWJlbC5zZXROZXh0VmFsdWVWYWxpZCh0cnVlKTsKKwkJfSAvLyBmb3IKKworCQkvLyBETyBJVCEKKwkJbWFpbkdyYXBoLnN3aXRjaFRvTmV4dFZhbHVlKFNXSVRDSF9USU1FKTsKKworCQlhc3NlcnRUcnVlKG1haW5HcmFwaC5nZXRUaW1lKCkudmFsdWVFcXVhbHMoU1dJVENIX1RJTUUpKTsKKworCQkvLyBBZnRlciB0aGUgc3dpdGNoCisJCS8vIEFsbCBvZiB0aGUgZHluYW1pYyBsYWJlbCBjdXJyZW50IHZhbHVlcyBzaG91bGQgYmUgc3dhcHBlZAorCQlmb3IgKGZpbmFsIEl0ZXJhdG9yIGR5bmFtaWNMYWJlbEl0ZXIgPSBtYWluR3JhcGguZ2V0RHluYW1pY0xhYmVscygpCisJCQkJLml0ZXJhdG9yKCk7IGR5bmFtaWNMYWJlbEl0ZXIuaGFzTmV4dCgpOykgeworCQkJZmluYWwgRHluYW1pY0xhYmVsIGR5bmFtaWNMYWJlbCA9IChEeW5hbWljTGFiZWwpIGR5bmFtaWNMYWJlbEl0ZXIKKwkJCQkJLm5leHQoKTsKKwkJCWFzc2VydFRydWUodmFsdWVzU3dhcHBlZChkeW5hbWljTGFiZWwpKTsKKwkJCWFzc2VydEZhbHNlKGR5bmFtaWNMYWJlbC5pc05leHRWYWx1ZVZhbGlkKCkpOworCQl9IC8vIGZvciBlYWNoIGR5bmFtaWMgbGFiZWwKKworCQkvLyBUaGVyZSBzaG91bGRuJ3QgYmUgYW55IG90aGVyIGR5bmFtaWMgbGFiZWxzIGx5aW5nIGFyb3VuZCB0aGF0IGFyZSAwCisJCWZvciAoZmluYWwgSXRlcmF0b3IgZ3JhcGhMYWJlbEl0ZXIgPSBtYWluR3JhcGguZ2V0R3JhcGhMYWJlbHMoKQorCQkJCS52YWx1ZXMoKS5pdGVyYXRvcigpOyBncmFwaExhYmVsSXRlci5oYXNOZXh0KCk7KSB7CisJCQlmaW5hbCBMYWJlbCBsYWJlbCA9IChMYWJlbCkgZ3JhcGhMYWJlbEl0ZXIubmV4dCgpOworCQkJLy8gSXMgaXQgYSBkeW5hbWljIGxhYmVsPworCQkJaWYgKGxhYmVsIGluc3RhbmNlb2YgRHluYW1pY0xhYmVsKSB7CisJCQkJZmluYWwgRHluYW1pY0xhYmVsIGR5bmFtaWNMYWJlbCA9IChEeW5hbWljTGFiZWwpIGxhYmVsOworCQkJCWFzc2VydFRydWUodmFsdWVzU3dhcHBlZChkeW5hbWljTGFiZWwpKTsKKwkJCX0KKwkJfSAvLyBmb3IgZ3JhcGggbGFiZWxzCisKKwkJZm9yIChmaW5hbCBJdGVyYXRvciBub2RlSXRlcmF0b3IgPSBtYWluR3JhcGguZ2V0Tm9kZXMoKS52YWx1ZXMoKQorCQkJCS5pdGVyYXRvcigpOyBub2RlSXRlcmF0b3IuaGFzTmV4dCgpOykgeworCQkJZmluYWwgTm9kZSBub2RlID0gKE5vZGUpIG5vZGVJdGVyYXRvci5uZXh0KCk7CisJCQlmb3IgKGZpbmFsIEl0ZXJhdG9yIGxhYmVsSXRlciA9IG5vZGUuZ2V0TGFiZWxzKCkuaXRlcmF0b3IoKTsgbGFiZWxJdGVyCisJCQkJCS5oYXNOZXh0KCk7KSB7CisJCQkJZmluYWwgTGFiZWwgbGFiZWwgPSAoTGFiZWwpIGxhYmVsSXRlci5uZXh0KCk7CisJCQkJLy8gSXMgaXQgYSBkeW5hbWljIGxhYmVsPworCQkJCWlmIChsYWJlbCBpbnN0YW5jZW9mIER5bmFtaWNMYWJlbCkgeworCQkJCQlmaW5hbCBEeW5hbWljTGFiZWwgZHluYW1pY0xhYmVsID0gKER5bmFtaWNMYWJlbCkgbGFiZWw7CisJCQkJCWFzc2VydFRydWUodmFsdWVzU3dhcHBlZChkeW5hbWljTGFiZWwpKTsKKwkJCQl9CisJCQl9IC8vIGZvciBub2RlJ3MgbGFiZWxzCisJCX0gLy8gZm9yIGVhY2ggbm9kZQorCisJCWZvciAoZmluYWwgSXRlcmF0b3IgZWRnZUl0ZXJhdG9yID0gbWFpbkdyYXBoLmdldEVkZ2VzKCkudmFsdWVzKCkKKwkJCQkuaXRlcmF0b3IoKTsgZWRnZUl0ZXJhdG9yLmhhc05leHQoKTspIHsKKwkJCWZpbmFsIEVkZ2UgZWRnZSA9IChFZGdlKSBlZGdlSXRlcmF0b3IubmV4dCgpOworCQkJZmluYWwgTGFiZWwgbGFiZWwgPSBlZGdlLmdldExhYmVsKCk7CisJCQkvLyBJcyBpdCBhIGR5bmFtaWMgbGFiZWw/CisJCQlpZiAobGFiZWwgaW5zdGFuY2VvZiBEeW5hbWljTGFiZWwpIHsKKwkJCQlmaW5hbCBEeW5hbWljTGFiZWwgZHluYW1pY0xhYmVsID0gKER5bmFtaWNMYWJlbCkgbGFiZWw7CisJCQkJYXNzZXJ0VHJ1ZSh2YWx1ZXNTd2FwcGVkKGR5bmFtaWNMYWJlbCkpOworCQkJfQorCQl9IC8vIGZvciBlYWNoIGVkZ2UKKwl9IC8vIHRlc3RTd2l0Y2hUb05leHRWYWx1ZQorCisJLyoqCisJICogVGVzdCB0aGUgR3JhcGggaGFzIHRoZSByaWdodCB0eXBlIFVSSS4KKwkgKiAKKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCXB1YmxpYyB2b2lkIHRlc3RHZXRUeXBlVVJJKCkgeworCQlmaW5hbCBHcmFwaCBncmFwaCA9IGdldEZpeHR1cmUoKTsKKwkJYXNzZXJ0VHJ1ZShncmFwaC5nZXRUeXBlVVJJKCkuZXF1YWxzKFNURU1VUkkuR1JBUEhfVFlQRV9VUkkpKTsKKwl9IC8vIHRlc3RHZXRUeXBlVVJJCisKKwkvKioKKwkgKiBUZXN0IHRoYXQgd2hlbiB0aGUgVVJJIGlzIHNldCBmb3IgdGhlIGdyYXBoLCB0aGUgdGFyZ2V0IFVSSSBvZiBhbnkKKwkgKiBHcmFwaExhYmVscyBpdCBoYXMgYWxzbyBhcmUgdXBkYXRlZCB0byB0aGUgbmV3IFVSSSB2YWx1ZS4KKwkgKiAKKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCXB1YmxpYyB2b2lkIHRlc3RTZXRVUklTZXRzR3JhcGhMYWJlbHMoKSB7CisJCWZpbmFsIEdyYXBoIGdyYXBoID0gZ2V0Rml4dHVyZSgpOworCQlmaW5hbCBVUkkgdXJpQmVmb3JlID0gZ3JhcGguZ2V0VVJJKCk7CisKKwkJZm9yIChmaW5hbCBJdGVyYXRvciBsYWJlbEl0ZXIgPSBncmFwaC5nZXRHcmFwaExhYmVscygpLnZhbHVlcygpCisJCQkJLml0ZXJhdG9yKCk7IGxhYmVsSXRlci5oYXNOZXh0KCk7KSB7CisJCQlmaW5hbCBMYWJlbCBsYWJlbCA9IChMYWJlbCkgbGFiZWxJdGVyLm5leHQoKTsKKwkJCWFzc2VydFRydWUobGFiZWwuZ2V0VVJJT2ZJZGVudGlmaWFibGVUb0JlTGFiZWxlZCgpLmVxdWFscygKKwkJCQkJZ3JhcGguZ2V0VVJJKCkpKTsKKwkJCWFzc2VydEZhbHNlKGxhYmVsLmdldFVSSU9mSWRlbnRpZmlhYmxlVG9CZUxhYmVsZWQoKS5lcXVhbHMoCisJCQkJCUdSQVBIMl9VUkkpKTsKKwkJfSAvLyBmb3IKKworCQlncmFwaC5zZXRVUkkoR1JBUEgyX1VSSSk7CisKKwkJZm9yIChmaW5hbCBJdGVyYXRvciBsYWJlbEl0ZXIgPSBncmFwaC5nZXRHcmFwaExhYmVscygpLnZhbHVlcygpCisJCQkJLml0ZXJhdG9yKCk7IGxhYmVsSXRlci5oYXNOZXh0KCk7KSB7CisJCQlmaW5hbCBMYWJlbCBsYWJlbCA9IChMYWJlbCkgbGFiZWxJdGVyLm5leHQoKTsKKwkJCWFzc2VydFRydWUobGFiZWwuZ2V0VVJJT2ZJZGVudGlmaWFibGVUb0JlTGFiZWxlZCgpLmVxdWFscygKKwkJCQkJZ3JhcGguZ2V0VVJJKCkpKTsKKwkJCWFzc2VydEZhbHNlKGxhYmVsLmdldFVSSU9mSWRlbnRpZmlhYmxlVG9CZUxhYmVsZWQoKS5lcXVhbHMoCisJCQkJCXVyaUJlZm9yZSkpOworCQl9IC8vIGZvcgorCX0gLy8gdGVzdFNldFVSSVNldHNHcmFwaExhYmVscworCisJLyoqCisJICogVGVzdCB0aGUgYWJpbGl0eSB0byBzZXJpYWxpemUgYSBncmFwaCBhbmQgdGhlbiBkZS1zZXJpYWxpemUgaXQuCisJICovCisJcHVibGljIHZvaWQgdGVzdFNlcmlhbGl6ZURlc2VyaWFsaXplKCkgeworCQlmaW5hbCBHcmFwaCBncmFwaCA9IGdldEZpeHR1cmUoKTsKKworCQlhc3NlcnQgZ3JhcGguc2FuZSgpOworCQl0cnkgeworCQkJVXRpbGl0eS5zZXJpYWxpemVJZGVudGlmaWFibGUoZ3JhcGgsIFNFUklBTFpBVElPTl9URVNUX1VSSSk7CisKKwkJCWZpbmFsIFJlc291cmNlU2V0IHJlc291cmNlU2V0ID0gbmV3IFJlc291cmNlU2V0SW1wbCgpOworCQkJZmluYWwgUmVzb3VyY2UgcmVzb3VyY2UgPSByZXNvdXJjZVNldC5nZXRSZXNvdXJjZSgKKwkJCQkJU0VSSUFMWkFUSU9OX1RFU1RfVVJJLCB0cnVlKTsKKworCQkJcmVzb3VyY2UubG9hZChudWxsKTsKKworCQkJZmluYWwgR3JhcGggZGVzZXJpYWxpemVkR3JhcGggPSAoR3JhcGgpIHJlc291cmNlLmdldENvbnRlbnRzKCkuZ2V0KAorCQkJCQkwKTsKKwkJCWFzc2VydE5vdE51bGwoZGVzZXJpYWxpemVkR3JhcGgpOworCQkJYXNzZXJ0VHJ1ZShncmFwaC5nZXROdW1FZGdlcygpID09IGRlc2VyaWFsaXplZEdyYXBoLmdldE51bUVkZ2VzKCkpOworCQkJYXNzZXJ0VHJ1ZShncmFwaC5nZXROdW1Ob2RlcygpID09IGRlc2VyaWFsaXplZEdyYXBoLmdldE51bU5vZGVzKCkpOworCQkJYXNzZXJ0VHJ1ZShncmFwaC5nZXROdW1EeW5hbWljTGFiZWxzKCkgPT0gZGVzZXJpYWxpemVkR3JhcGgKKwkJCQkJLmdldE51bUR5bmFtaWNMYWJlbHMoKSk7CisJCQlhc3NlcnRUcnVlKGdyYXBoLmdldE51bUdyYXBoTGFiZWxzKCkgPT0gZGVzZXJpYWxpemVkR3JhcGgKKwkJCQkJLmdldE51bUdyYXBoTGFiZWxzKCkpOworCQkJYXNzZXJ0VHJ1ZShncmFwaC5nZXROdW1Ob2RlTGFiZWxzKCkgPT0gZGVzZXJpYWxpemVkR3JhcGgKKwkJCQkJLmdldE51bU5vZGVMYWJlbHMoKSk7CisJCX0gY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKKwkJCWZhaWwoZS5nZXRNZXNzYWdlKCkpOworCQl9IC8vIGNhdGNoCisJCWNhdGNoIChOdWxsUG9pbnRlckV4Y2VwdGlvbiBucGUpIHsKKwkJCWZhaWwobnBlLmdldE1lc3NhZ2UoKSk7CisJCX0gLy8gbnVsbCBwb2ludGVyIGV4Y2VwdGlvbgorCQljYXRjaCAoRXhjZXB0aW9uIGUpIHsKKwkJCWZhaWwoZS5nZXRNZXNzYWdlKCkpOworCQl9CisKKwl9IC8vIHRlc3RTZXJpYWxpemVEZXNlcmlhbGl6ZQorCisJLyoqCisJICogQHBhcmFtIGxhYmVsCisJICogQHJldHVybiB0cnVlIGlmIHRoZSBsYWJlbHMgaGF2ZSBiZWVuIHN3YXBwZWQgZnJvbSB0aGVpciBvcmlnaW5hbCB2YWx1ZXMuCisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlwcml2YXRlIGJvb2xlYW4gdmFsdWVzU3dhcHBlZChmaW5hbCBMYWJlbCBsYWJlbCkgeworCQlib29sZWFuIHJldFZhbHVlID0gZmFsc2U7CisKKwkJLy8gSXMgaXQgYSBkeW5hbWljIGxhYmVsPworCQlpZiAobGFiZWwgaW5zdGFuY2VvZiBEeW5hbWljTGFiZWwpIHsKKwkJCWZpbmFsIER5bmFtaWNMYWJlbCBkeW5hbWljTGFiZWwgPSAoRHluYW1pY0xhYmVsKSBsYWJlbDsKKwkJCXJldFZhbHVlID0gKChUZXN0SW50ZWdlckxhYmVsVmFsdWUpIGxhYmVsLmdldEN1cnJlbnRWYWx1ZSgpKS5nZXRJKCkgPT0gVGVzdEludGVnZXJMYWJlbFZhbHVlLk5FWFRfTEFCRUxfSU5URUdFUl9WQUxVRTsKKwkJCXJldFZhbHVlID0gcmV0VmFsdWUKKwkJCQkJJiYgKChUZXN0SW50ZWdlckxhYmVsVmFsdWUpIGR5bmFtaWNMYWJlbC5nZXROZXh0VmFsdWUoKSkKKwkJCQkJCQkuZ2V0SSgpID09IFRlc3RJbnRlZ2VyTGFiZWxWYWx1ZS5DVVJSRU5UX0xBQkVMX0lOVEVHRVJfVkFMVUU7CisJCX0gZWxzZSB7CisJCQlyZXRWYWx1ZSA9ICgoVGVzdEludGVnZXJMYWJlbFZhbHVlKSBsYWJlbC5nZXRDdXJyZW50VmFsdWUoKSkuZ2V0SSgpICE9IFRlc3RJbnRlZ2VyTGFiZWxWYWx1ZS5DVVJSRU5UX0xBQkVMX0lOVEVHRVJfVkFMVUU7CisJCX0KKwkJcmV0dXJuIHJldFZhbHVlOworCX0gLy8gdmFsdWVzU3dhcHBlZAorCit9IC8vIEdyYXBoVGVzdApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGgvdGVzdHMvR3JhcGhUZXN0cy5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGgvdGVzdHMvR3JhcGhUZXN0cy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY4N2Y4Y2YKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC90ZXN0cy9HcmFwaFRlc3RzLmphdmEKQEAgLTAsMCArMSw1NyBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGgudGVzdHM7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3Q7CitpbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RTdWl0ZTsKK2ltcG9ydCBqdW5pdC50ZXh0dWkuVGVzdFJ1bm5lcjsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogQSB0ZXN0IHN1aXRlIGZvciB0aGUgJzxlbT48Yj5ncmFwaDwvYj48L2VtPicgcGFja2FnZS4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgR3JhcGhUZXN0cyBleHRlbmRzIFRlc3RTdWl0ZSB7CisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgeworCQlUZXN0UnVubmVyLnJ1bihzdWl0ZSgpKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgc3RhdGljIFRlc3Qgc3VpdGUoKSB7CisJCVRlc3RTdWl0ZSBzdWl0ZSA9IG5ldyBHcmFwaFRlc3RzKCJncmFwaCBUZXN0cyIpOyAvLyROT04tTkxTLTEkCisJCXN1aXRlLmFkZFRlc3RTdWl0ZShFZGdlVGVzdC5jbGFzcyk7CisJCXN1aXRlLmFkZFRlc3RTdWl0ZShHcmFwaFRlc3QuY2xhc3MpOworCQlzdWl0ZS5hZGRUZXN0U3VpdGUoTm9kZVRlc3QuY2xhc3MpOworCQlzdWl0ZS5hZGRUZXN0U3VpdGUoU2ltcGxlR3JhcGhQYXJ0aXRpb25lclRlc3QuY2xhc3MpOworCQlyZXR1cm4gc3VpdGU7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEdyYXBoVGVzdHMoU3RyaW5nIG5hbWUpIHsKKwkJc3VwZXIobmFtZSk7CisJfQorCit9IC8vR3JhcGhUZXN0cwpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGgvdGVzdHMvR3JhcGhUaW1lUHJvdmlkZXJBZGFwdGVyRmFjdG9yeVRlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoL3Rlc3RzL0dyYXBoVGltZVByb3ZpZGVyQWRhcHRlckZhY3RvcnlUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDhlMTFjOQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoL3Rlc3RzL0dyYXBoVGltZVByb3ZpZGVyQWRhcHRlckZhY3RvcnlUZXN0LmphdmEKQEAgLTAsMCArMSw2MiBAQAorLy8gR3JhcGhUaW1lUHJvdmlkZXJBZGFwdGVyRmFjdG9yeVRlc3QuamF2YQorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGgudGVzdHM7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5hZGFwdGVycy50aW1lLlRpbWVQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmFkYXB0ZXJzLnRpbWUuVGltZVByb3ZpZGVyQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5hZGFwdGVycy50aW1lLlRpbWVQcm92aWRlckFkYXB0ZXJGYWN0b3J5SW1wbFRlc3Q7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkdyYXBoOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5wcm92aWRlci5HcmFwaFRpbWVQcm92aWRlckFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5Nb2RlbEZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLlNURU1UaW1lOworCisvKioKKyAqIFRoaXMgY2xhc3MgaXMgYSBKVW5pdCB0ZXN0IG9mIHRoZSB7QGxpbmsgR3JhcGhUaW1lUHJvdmlkZXJBZGFwdGVyRmFjdG9yeX0uCisgKi8KK3B1YmxpYyBjbGFzcyBHcmFwaFRpbWVQcm92aWRlckFkYXB0ZXJGYWN0b3J5VGVzdCBleHRlbmRzCisJCVRpbWVQcm92aWRlckFkYXB0ZXJGYWN0b3J5SW1wbFRlc3QgeworCisJcHJpdmF0ZSBmaW5hbCBTVEVNVGltZSBURVNUX1RJTUUgPSBNb2RlbEZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZVNURU1UaW1lKCk7CisJCisJLyoqCisJICogQHNlZQorCSAqIAlvcmcuZWNsaXBzZS5zdGVtLmFkYXB0ZXJzLnRpbWUuVGltZVByb3ZpZGVyQWRhcHRlckZhY3RvcnlJbXBsVGVzdAorCSAqIAkjY3JlYXRlRml4dHVyZSgpCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIFRpbWVQcm92aWRlckFkYXB0ZXJGYWN0b3J5IGNyZWF0ZUZpeHR1cmUoKSB7CisJCXJldHVybiBuZXcgR3JhcGhUaW1lUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSgpOworCX0KKworCXByaXZhdGUgR3JhcGhUaW1lUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSBnZXRGaXh0dXJlKCkgeworCQlyZXR1cm4gKEdyYXBoVGltZVByb3ZpZGVyQWRhcHRlckZhY3RvcnkpIGZpeHR1cmU7CisJfSAvLyBnZXRGaXh0dXJlCisKKwlwdWJsaWMgdm9pZCB0ZXN0QWRhcHRHcmFwaCgpIHsKKwkJZmluYWwgR3JhcGhUaW1lUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSBmaXh0dXJlID0gZ2V0Rml4dHVyZSgpOworCQlmaW5hbCBHcmFwaCBncmFwaCA9IEdyYXBoVGVzdC5jcmVhdGVGaXh0dXJlKCk7CisKKwkJZmluYWwgVGltZVByb3ZpZGVyIHRwID0gKFRpbWVQcm92aWRlcikgZml4dHVyZS5hZGFwdChncmFwaCwKKwkJCQlUaW1lUHJvdmlkZXIuY2xhc3MpOworCQlhc3NlcnROb3ROdWxsKHRwKTsKKworCQlTVEVNVGltZSBncmFwaFRpbWUgPSB0cC5nZXRUaW1lKCk7CisJCWFzc2VydE51bGwoZ3JhcGhUaW1lKTsKKwkJCisJCWdyYXBoLnN3aXRjaFRvTmV4dFZhbHVlKFRFU1RfVElNRSk7CisJCWdyYXBoVGltZSA9IHRwLmdldFRpbWUoKTsKKwkJCisJCWFzc2VydE5vdE51bGwoZ3JhcGhUaW1lKTsKKwkJYXNzZXJ0VHJ1ZShncmFwaFRpbWUudmFsdWVFcXVhbHMoVEVTVF9USU1FKSk7CisJfSAvLyB0ZXN0QWRhcHRHcmFwaAorfSAvLyBHcmFwaFRpbWVQcm92aWRlckFkYXB0ZXJGYWN0b3J5VGVzdApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoL3Rlc3RzL0ludGVncmF0aW9uTGFiZWxUZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC90ZXN0cy9JbnRlZ3JhdGlvbkxhYmVsVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNmN2VhNWYKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC90ZXN0cy9JbnRlZ3JhdGlvbkxhYmVsVGVzdC5qYXZhCkBAIC0wLDAgKzEsNjQgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLnRlc3RzOw0KKw0KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIA0KKyAqIENvcHlyaWdodCAoYykgMjAxMSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4gDQorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyANCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgDQorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQgDQorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwgDQorICogDQorICogQ29udHJpYnV0b3JzOiANCisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIA0KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KKw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguSW50ZWdyYXRpb25MYWJlbDsNCisNCisvKioNCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKyAqIEEgdGVzdCBjYXNlIGZvciB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+SW50ZWdyYXRpb24gTGFiZWw8L2I+PC9lbT4nLg0KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKyAqIDxwPg0KKyAqIFRoZSBmb2xsb3dpbmcgb3BlcmF0aW9ucyBhcmUgdGVzdGVkOg0KKyAqIDx1bD4NCisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkludGVncmF0aW9uTGFiZWwjcmVzZXQob3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLlNURU1UaW1lKSA8ZW0+UmVzZXQ8L2VtPn08L2xpPg0KKyAqIDwvdWw+DQorICogPC9wPg0KKyAqIEBnZW5lcmF0ZWQNCisgKi8NCitwdWJsaWMgYWJzdHJhY3QgY2xhc3MgSW50ZWdyYXRpb25MYWJlbFRlc3QgZXh0ZW5kcyBEeW5hbWljTm9kZUxhYmVsVGVzdCB7DQorDQorCS8qKg0KKwkgKiBDb25zdHJ1Y3RzIGEgbmV3IEludGVncmF0aW9uIExhYmVsIHRlc3QgY2FzZSB3aXRoIHRoZSBnaXZlbiBuYW1lLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIEludGVncmF0aW9uTGFiZWxUZXN0KFN0cmluZyBuYW1lKSB7DQorCQlzdXBlcihuYW1lKTsNCisJfQ0KKw0KKwkvKioNCisJICogUmV0dXJucyB0aGUgZml4dHVyZSBmb3IgdGhpcyBJbnRlZ3JhdGlvbiBMYWJlbCB0ZXN0IGNhc2UuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlAT3ZlcnJpZGUNCisJcHJvdGVjdGVkIEludGVncmF0aW9uTGFiZWwgZ2V0Rml4dHVyZSgpIHsNCisJCXJldHVybiAoSW50ZWdyYXRpb25MYWJlbClmaXh0dXJlOw0KKwl9DQorDQorCS8qKg0KKwkgKiBUZXN0cyB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguSW50ZWdyYXRpb25MYWJlbCNyZXNldChvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuU1RFTVRpbWUpIDxlbT5SZXNldDwvZW0+fScgb3BlcmF0aW9uLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguSW50ZWdyYXRpb25MYWJlbCNyZXNldChvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuU1RFTVRpbWUpDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyB2b2lkIHRlc3RSZXNldF9fU1RFTVRpbWUoKSB7DQorCQkvLyBUT0RPOiBpbXBsZW1lbnQgdGhpcyBvcGVyYXRpb24gdGVzdCBtZXRob2QNCisJCS8vIEVuc3VyZSB0aGF0IHlvdSByZW1vdmUgQGdlbmVyYXRlZCBvciBtYXJrIGl0IEBnZW5lcmF0ZWQgTk9UDQorCQlmYWlsKCk7DQorCX0NCisNCit9IC8vSW50ZWdyYXRpb25MYWJlbFRlc3QNCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC90ZXN0cy9JbnRlZ3JhdGlvbkxhYmVsVmFsdWVUZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC90ZXN0cy9JbnRlZ3JhdGlvbkxhYmVsVmFsdWVUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWNjYjIwOQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoL3Rlc3RzL0ludGVncmF0aW9uTGFiZWxWYWx1ZVRlc3QuamF2YQpAQCAtMCwwICsxLDIwNCBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGgudGVzdHM7DQorDQorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogDQorICogQ29weXJpZ2h0IChjKSAyMDExIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiANCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIA0KKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCANCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdCANCisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbCANCisgKiANCisgKiBDb250cmlidXRvcnM6IA0KKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gDQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQorDQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5JbnRlZ3JhdGlvbkxhYmVsVmFsdWU7DQorDQorLyoqDQorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisgKiBBIHRlc3QgY2FzZSBmb3IgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPkludGVncmF0aW9uIExhYmVsIFZhbHVlPC9iPjwvZW0+Jy4NCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisgKiA8cD4NCisgKiBUaGUgZm9sbG93aW5nIG9wZXJhdGlvbnMgYXJlIHRlc3RlZDoNCisgKiA8dWw+DQorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5JbnRlZ3JhdGlvbkxhYmVsVmFsdWUjc2V0KG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5JbnRlZ3JhdGlvbkxhYmVsVmFsdWUpIDxlbT5TZXQ8L2VtPn08L2xpPg0KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguSW50ZWdyYXRpb25MYWJlbFZhbHVlI2FkZChvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguSW50ZWdyYXRpb25MYWJlbFZhbHVlKSA8ZW0+QWRkPC9lbT59PC9saT4NCisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkludGVncmF0aW9uTGFiZWxWYWx1ZSNzdWIob3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkludGVncmF0aW9uTGFiZWxWYWx1ZSkgPGVtPlN1YjwvZW0+fTwvbGk+DQorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5JbnRlZ3JhdGlvbkxhYmVsVmFsdWUjc2NhbGUoZG91YmxlKSA8ZW0+U2NhbGU8L2VtPn08L2xpPg0KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguSW50ZWdyYXRpb25MYWJlbFZhbHVlI2FkZChkb3VibGUpIDxlbT5BZGQ8L2VtPn08L2xpPg0KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguSW50ZWdyYXRpb25MYWJlbFZhbHVlI2FicygpIDxlbT5BYnM8L2VtPn08L2xpPg0KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguSW50ZWdyYXRpb25MYWJlbFZhbHVlI2F2b2lkTmVnYXRpdmUob3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkludGVncmF0aW9uTGFiZWxWYWx1ZSkgPGVtPkF2b2lkIE5lZ2F0aXZlPC9lbT59PC9saT4NCisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkludGVncmF0aW9uTGFiZWxWYWx1ZSNjb21wdXRlRGVsdGFBZGp1c3RtZW50KG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5JbnRlZ3JhdGlvbkxhYmVsVmFsdWUpIDxlbT5Db21wdXRlIERlbHRhIEFkanVzdG1lbnQ8L2VtPn08L2xpPg0KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguSW50ZWdyYXRpb25MYWJlbFZhbHVlI2RpdmlkZShvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguSW50ZWdyYXRpb25MYWJlbFZhbHVlKSA8ZW0+RGl2aWRlPC9lbT59PC9saT4NCisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkludGVncmF0aW9uTGFiZWxWYWx1ZSNtYXgoKSA8ZW0+TWF4PC9lbT59PC9saT4NCisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkludGVncmF0aW9uTGFiZWxWYWx1ZSNwcmVwYXJlQ3ljbGUoKSA8ZW0+UHJlcGFyZSBDeWNsZTwvZW0+fTwvbGk+DQorICogPC91bD4NCisgKiA8L3A+DQorICogQGdlbmVyYXRlZA0KKyAqLw0KK3B1YmxpYyBhYnN0cmFjdCBjbGFzcyBJbnRlZ3JhdGlvbkxhYmVsVmFsdWVUZXN0IGV4dGVuZHMgTGFiZWxWYWx1ZVRlc3Qgew0KKw0KKwkvKioNCisJICogQ29uc3RydWN0cyBhIG5ldyBJbnRlZ3JhdGlvbiBMYWJlbCBWYWx1ZSB0ZXN0IGNhc2Ugd2l0aCB0aGUgZ2l2ZW4gbmFtZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBJbnRlZ3JhdGlvbkxhYmVsVmFsdWVUZXN0KFN0cmluZyBuYW1lKSB7DQorCQlzdXBlcihuYW1lKTsNCisJfQ0KKw0KKwkvKioNCisJICogUmV0dXJucyB0aGUgZml4dHVyZSBmb3IgdGhpcyBJbnRlZ3JhdGlvbiBMYWJlbCBWYWx1ZSB0ZXN0IGNhc2UuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlAT3ZlcnJpZGUNCisJcHJvdGVjdGVkIEludGVncmF0aW9uTGFiZWxWYWx1ZSBnZXRGaXh0dXJlKCkgew0KKwkJcmV0dXJuIChJbnRlZ3JhdGlvbkxhYmVsVmFsdWUpZml4dHVyZTsNCisJfQ0KKw0KKwkvKioNCisJICogVGVzdHMgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkludGVncmF0aW9uTGFiZWxWYWx1ZSNzZXQob3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkludGVncmF0aW9uTGFiZWxWYWx1ZSkgPGVtPlNldDwvZW0+fScgb3BlcmF0aW9uLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguSW50ZWdyYXRpb25MYWJlbFZhbHVlI3NldChvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguSW50ZWdyYXRpb25MYWJlbFZhbHVlKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgdm9pZCB0ZXN0U2V0X19JbnRlZ3JhdGlvbkxhYmVsVmFsdWUoKSB7DQorCQkvLyBUT0RPOiBpbXBsZW1lbnQgdGhpcyBvcGVyYXRpb24gdGVzdCBtZXRob2QNCisJCS8vIEVuc3VyZSB0aGF0IHlvdSByZW1vdmUgQGdlbmVyYXRlZCBvciBtYXJrIGl0IEBnZW5lcmF0ZWQgTk9UDQorCQlmYWlsKCk7DQorCX0NCisNCisJLyoqDQorCSAqIFRlc3RzIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5JbnRlZ3JhdGlvbkxhYmVsVmFsdWUjYWRkKG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5JbnRlZ3JhdGlvbkxhYmVsVmFsdWUpIDxlbT5BZGQ8L2VtPn0nIG9wZXJhdGlvbi4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkludGVncmF0aW9uTGFiZWxWYWx1ZSNhZGQob3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkludGVncmF0aW9uTGFiZWxWYWx1ZSkNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIHZvaWQgdGVzdEFkZF9fSW50ZWdyYXRpb25MYWJlbFZhbHVlKCkgew0KKwkJLy8gVE9ETzogaW1wbGVtZW50IHRoaXMgb3BlcmF0aW9uIHRlc3QgbWV0aG9kDQorCQkvLyBFbnN1cmUgdGhhdCB5b3UgcmVtb3ZlIEBnZW5lcmF0ZWQgb3IgbWFyayBpdCBAZ2VuZXJhdGVkIE5PVA0KKwkJZmFpbCgpOw0KKwl9DQorDQorCS8qKg0KKwkgKiBUZXN0cyB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguSW50ZWdyYXRpb25MYWJlbFZhbHVlI3N1YihvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguSW50ZWdyYXRpb25MYWJlbFZhbHVlKSA8ZW0+U3ViPC9lbT59JyBvcGVyYXRpb24uDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5JbnRlZ3JhdGlvbkxhYmVsVmFsdWUjc3ViKG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5JbnRlZ3JhdGlvbkxhYmVsVmFsdWUpDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyB2b2lkIHRlc3RTdWJfX0ludGVncmF0aW9uTGFiZWxWYWx1ZSgpIHsNCisJCS8vIFRPRE86IGltcGxlbWVudCB0aGlzIG9wZXJhdGlvbiB0ZXN0IG1ldGhvZA0KKwkJLy8gRW5zdXJlIHRoYXQgeW91IHJlbW92ZSBAZ2VuZXJhdGVkIG9yIG1hcmsgaXQgQGdlbmVyYXRlZCBOT1QNCisJCWZhaWwoKTsNCisJfQ0KKw0KKwkvKioNCisJICogVGVzdHMgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkludGVncmF0aW9uTGFiZWxWYWx1ZSNzY2FsZShkb3VibGUpIDxlbT5TY2FsZTwvZW0+fScgb3BlcmF0aW9uLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguSW50ZWdyYXRpb25MYWJlbFZhbHVlI3NjYWxlKGRvdWJsZSkNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIHZvaWQgdGVzdFNjYWxlX19kb3VibGUoKSB7DQorCQkvLyBUT0RPOiBpbXBsZW1lbnQgdGhpcyBvcGVyYXRpb24gdGVzdCBtZXRob2QNCisJCS8vIEVuc3VyZSB0aGF0IHlvdSByZW1vdmUgQGdlbmVyYXRlZCBvciBtYXJrIGl0IEBnZW5lcmF0ZWQgTk9UDQorCQlmYWlsKCk7DQorCX0NCisNCisJLyoqDQorCSAqIFRlc3RzIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5JbnRlZ3JhdGlvbkxhYmVsVmFsdWUjYWRkKGRvdWJsZSkgPGVtPkFkZDwvZW0+fScgb3BlcmF0aW9uLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguSW50ZWdyYXRpb25MYWJlbFZhbHVlI2FkZChkb3VibGUpDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyB2b2lkIHRlc3RBZGRfX2RvdWJsZSgpIHsNCisJCS8vIFRPRE86IGltcGxlbWVudCB0aGlzIG9wZXJhdGlvbiB0ZXN0IG1ldGhvZA0KKwkJLy8gRW5zdXJlIHRoYXQgeW91IHJlbW92ZSBAZ2VuZXJhdGVkIG9yIG1hcmsgaXQgQGdlbmVyYXRlZCBOT1QNCisJCWZhaWwoKTsNCisJfQ0KKw0KKwkvKioNCisJICogVGVzdHMgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkludGVncmF0aW9uTGFiZWxWYWx1ZSNhYnMoKSA8ZW0+QWJzPC9lbT59JyBvcGVyYXRpb24uDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5JbnRlZ3JhdGlvbkxhYmVsVmFsdWUjYWJzKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIHZvaWQgdGVzdEFicygpIHsNCisJCS8vIFRPRE86IGltcGxlbWVudCB0aGlzIG9wZXJhdGlvbiB0ZXN0IG1ldGhvZA0KKwkJLy8gRW5zdXJlIHRoYXQgeW91IHJlbW92ZSBAZ2VuZXJhdGVkIG9yIG1hcmsgaXQgQGdlbmVyYXRlZCBOT1QNCisJCWZhaWwoKTsNCisJfQ0KKw0KKwkvKioNCisJICogVGVzdHMgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkludGVncmF0aW9uTGFiZWxWYWx1ZSNhdm9pZE5lZ2F0aXZlKG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5JbnRlZ3JhdGlvbkxhYmVsVmFsdWUpIDxlbT5Bdm9pZCBOZWdhdGl2ZTwvZW0+fScgb3BlcmF0aW9uLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguSW50ZWdyYXRpb25MYWJlbFZhbHVlI2F2b2lkTmVnYXRpdmUob3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkludGVncmF0aW9uTGFiZWxWYWx1ZSkNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIHZvaWQgdGVzdEF2b2lkTmVnYXRpdmVfX0ludGVncmF0aW9uTGFiZWxWYWx1ZSgpIHsNCisJCS8vIFRPRE86IGltcGxlbWVudCB0aGlzIG9wZXJhdGlvbiB0ZXN0IG1ldGhvZA0KKwkJLy8gRW5zdXJlIHRoYXQgeW91IHJlbW92ZSBAZ2VuZXJhdGVkIG9yIG1hcmsgaXQgQGdlbmVyYXRlZCBOT1QNCisJCWZhaWwoKTsNCisJfQ0KKw0KKwkvKioNCisJICogVGVzdHMgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkludGVncmF0aW9uTGFiZWxWYWx1ZSNjb21wdXRlRGVsdGFBZGp1c3RtZW50KG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5JbnRlZ3JhdGlvbkxhYmVsVmFsdWUpIDxlbT5Db21wdXRlIERlbHRhIEFkanVzdG1lbnQ8L2VtPn0nIG9wZXJhdGlvbi4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkludGVncmF0aW9uTGFiZWxWYWx1ZSNjb21wdXRlRGVsdGFBZGp1c3RtZW50KG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5JbnRlZ3JhdGlvbkxhYmVsVmFsdWUpDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyB2b2lkIHRlc3RDb21wdXRlRGVsdGFBZGp1c3RtZW50X19JbnRlZ3JhdGlvbkxhYmVsVmFsdWUoKSB7DQorCQkvLyBUT0RPOiBpbXBsZW1lbnQgdGhpcyBvcGVyYXRpb24gdGVzdCBtZXRob2QNCisJCS8vIEVuc3VyZSB0aGF0IHlvdSByZW1vdmUgQGdlbmVyYXRlZCBvciBtYXJrIGl0IEBnZW5lcmF0ZWQgTk9UDQorCQlmYWlsKCk7DQorCX0NCisNCisJLyoqDQorCSAqIFRlc3RzIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5JbnRlZ3JhdGlvbkxhYmVsVmFsdWUjZGl2aWRlKG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5JbnRlZ3JhdGlvbkxhYmVsVmFsdWUpIDxlbT5EaXZpZGU8L2VtPn0nIG9wZXJhdGlvbi4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkludGVncmF0aW9uTGFiZWxWYWx1ZSNkaXZpZGUob3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkludGVncmF0aW9uTGFiZWxWYWx1ZSkNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIHZvaWQgdGVzdERpdmlkZV9fSW50ZWdyYXRpb25MYWJlbFZhbHVlKCkgew0KKwkJLy8gVE9ETzogaW1wbGVtZW50IHRoaXMgb3BlcmF0aW9uIHRlc3QgbWV0aG9kDQorCQkvLyBFbnN1cmUgdGhhdCB5b3UgcmVtb3ZlIEBnZW5lcmF0ZWQgb3IgbWFyayBpdCBAZ2VuZXJhdGVkIE5PVA0KKwkJZmFpbCgpOw0KKwl9DQorDQorCS8qKg0KKwkgKiBUZXN0cyB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguSW50ZWdyYXRpb25MYWJlbFZhbHVlI21heCgpIDxlbT5NYXg8L2VtPn0nIG9wZXJhdGlvbi4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkludGVncmF0aW9uTGFiZWxWYWx1ZSNtYXgoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgdm9pZCB0ZXN0TWF4KCkgew0KKwkJLy8gVE9ETzogaW1wbGVtZW50IHRoaXMgb3BlcmF0aW9uIHRlc3QgbWV0aG9kDQorCQkvLyBFbnN1cmUgdGhhdCB5b3UgcmVtb3ZlIEBnZW5lcmF0ZWQgb3IgbWFyayBpdCBAZ2VuZXJhdGVkIE5PVA0KKwkJZmFpbCgpOw0KKwl9DQorDQorCS8qKg0KKwkgKiBUZXN0cyB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguSW50ZWdyYXRpb25MYWJlbFZhbHVlI3ByZXBhcmVDeWNsZSgpIDxlbT5QcmVwYXJlIEN5Y2xlPC9lbT59JyBvcGVyYXRpb24uDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5JbnRlZ3JhdGlvbkxhYmVsVmFsdWUjcHJlcGFyZUN5Y2xlKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIHZvaWQgdGVzdFByZXBhcmVDeWNsZSgpIHsNCisJCS8vIFRPRE86IGltcGxlbWVudCB0aGlzIG9wZXJhdGlvbiB0ZXN0IG1ldGhvZA0KKwkJLy8gRW5zdXJlIHRoYXQgeW91IHJlbW92ZSBAZ2VuZXJhdGVkIG9yIG1hcmsgaXQgQGdlbmVyYXRlZCBOT1QNCisJCWZhaWwoKTsNCisJfQ0KKw0KK30gLy9JbnRlZ3JhdGlvbkxhYmVsVmFsdWVUZXN0DQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGgvdGVzdHMvTGFiZWxUZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC90ZXN0cy9MYWJlbFRlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZDBhZDk3Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGgvdGVzdHMvTGFiZWxUZXN0LmphdmEKQEAgLTAsMCArMSwxMTggQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLnRlc3RzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLy9pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24udGVzdHMuSWRlbnRpZmlhYmxlVGVzdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguTGFiZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsLlRlc3RVdGlsOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IEEgdGVzdCBjYXNlIGZvciB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+TGFiZWw8L2I+PC9lbT4nLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiA8cD4KKyAqIFRoZSBmb2xsb3dpbmcgZmVhdHVyZXMgYXJlIHRlc3RlZDoKKyAqIDx1bD4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguTGFiZWwjZ2V0SWRlbnRpZmlhYmxlKCkgPGVtPklkZW50aWZpYWJsZTwvZW0+fTwvbGk+CisgKiA8L3VsPgorICogPC9wPgorICogQGdlbmVyYXRlZAorICovCitAU3VwcHJlc3NXYXJuaW5ncygiYWxsIikKK3B1YmxpYyBhYnN0cmFjdCBjbGFzcyBMYWJlbFRlc3QgZXh0ZW5kcyBJZGVudGlmaWFibGVUZXN0IHsKKworCS8qKgorCSAqIENvbnN0cnVjdHMgYSBuZXcgTGFiZWwgdGVzdCBjYXNlIHdpdGggdGhlIGdpdmVuIG5hbWUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYworCSAqIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIExhYmVsVGVzdChTdHJpbmcgbmFtZSkgeworCQlzdXBlcihuYW1lKTsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBmaXh0dXJlIGZvciB0aGlzIExhYmVsIHRlc3QgY2FzZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgTGFiZWwgZ2V0Rml4dHVyZSgpIHsKKwkJcmV0dXJuIChMYWJlbClmaXh0dXJlOworCX0KKworCS8qKgorCSAqIFRlc3RzIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5MYWJlbCNnZXRJZGVudGlmaWFibGUoKSA8ZW0+SWRlbnRpZmlhYmxlPC9lbT59JyBmZWF0dXJlIGdldHRlci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkxhYmVsI2dldElkZW50aWZpYWJsZSgpCisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlwdWJsaWMgdm9pZCB0ZXN0R2V0SWRlbnRpZmlhYmxlKCkgeworCQlmaW5hbCBMYWJlbCBmaXh0dXJlID0gZ2V0Rml4dHVyZSgpOworCQlmaXh0dXJlLnNldElkZW50aWZpYWJsZShudWxsKTsKKwkJYXNzZXJ0TnVsbChmaXh0dXJlLmdldElkZW50aWZpYWJsZSgpKTsKKwl9CisKKwkvKioKKwkgKiBUZXN0cyB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguTGFiZWwjc2V0SWRlbnRpZmlhYmxlKG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uSWRlbnRpZmlhYmxlKSA8ZW0+SWRlbnRpZmlhYmxlPC9lbT59JyBmZWF0dXJlIHNldHRlci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkxhYmVsI3NldElkZW50aWZpYWJsZShvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLklkZW50aWZpYWJsZSkKKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCXB1YmxpYyB2b2lkIHRlc3RTZXRJZGVudGlmaWFibGUoKSB7CisJCWZpbmFsIExhYmVsIGZpeHR1cmUgPSBnZXRGaXh0dXJlKCk7CisJCWZpeHR1cmUuc2V0SWRlbnRpZmlhYmxlKG51bGwpOworCQlhc3NlcnROdWxsKGZpeHR1cmUuZ2V0SWRlbnRpZmlhYmxlKCkpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBzZWUganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlI3NldFVwKCkKKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIHNldFVwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCXNldEZpeHR1cmUoY3JlYXRlRml4dHVyZSgpKTsKKwl9IC8vIHNldFVwCisKKwkvKioKKwkgKiBAcmV0dXJuIGEgc3RhdGljIGxhYmVsIGZvciB0ZXN0aW5nCisJICovCisJcHVibGljIExhYmVsIGNyZWF0ZUZpeHR1cmUoKSB7CisJCXJldHVybiBUZXN0VXRpbC5jcmVhdGVTdGF0aWNMYWJlbChUZXN0VXRpbAorCQkJCS5jcmVhdGVOZXh0SWRlbnRpZmlhYmxlVG9MYWJlbFVSSSgpKTsKKwl9IC8vIGNyZWF0ZUZpeHR1cmUKKworCS8qKgorCSAqIFRlc3QgdGhlIHNhbml0eSBvZiB0aGUgZml4dHVyZQorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIHRlc3RTYW5lKCkgeworCQlmaW5hbCBMYWJlbCBsYWJlbCA9IGdldEZpeHR1cmUoKTsKKwkJYXNzZXJ0VHJ1ZShsYWJlbC5zYW5lKCkpOworCX0gLy8gdGVzdFNhbmUKKworCS8qKgorCSAqIFRlc3QgdGhlIExhYmVsIGhhcyB0aGUgcmlnaHQgdHlwZSBVUkkuCisJICogCisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlwdWJsaWMgdm9pZCB0ZXN0R2V0VHlwZVVSSSgpIHsKKwkJZmluYWwgTGFiZWwgbGFiZWwgPSBnZXRGaXh0dXJlKCk7CisJCWFzc2VydFRydWUobGFiZWwuZ2V0VHlwZVVSSSgpLmVxdWFscyhMYWJlbC5VUklfVFlQRV9MQUJFTCkpOworCX0gLy8gdGVzdEdldFR5cGVVUkkKKworfSAvLyBMYWJlbFRlc3QKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoL3Rlc3RzL0xhYmVsVmFsdWVUZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC90ZXN0cy9MYWJlbFZhbHVlVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ0M2RkZDgKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC90ZXN0cy9MYWJlbFZhbHVlVGVzdC5qYXZhCkBAIC0wLDAgKzEsMTEwIEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC50ZXN0czsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguTGFiZWxWYWx1ZTsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogQSB0ZXN0IGNhc2UgZm9yIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5MYWJlbCBWYWx1ZTwvYj48L2VtPicuCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIDxwPgorICogVGhlIGZvbGxvd2luZyBvcGVyYXRpb25zIGFyZSB0ZXN0ZWQ6CisgKiA8dWw+CisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkxhYmVsVmFsdWUjcmVzZXQoKSA8ZW0+UmVzZXQ8L2VtPn08L2xpPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5MYWJlbFZhbHVlI3NhbWVWYWx1ZShvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguTGFiZWxWYWx1ZSkgPGVtPlNhbWUgVmFsdWU8L2VtPn08L2xpPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uU2FuaXR5Q2hlY2tlciNzYW5lKCkgPGVtPlNhbmU8L2VtPn08L2xpPgorICogPC91bD4KKyAqIDwvcD4KKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGFic3RyYWN0IGNsYXNzIExhYmVsVmFsdWVUZXN0IGV4dGVuZHMgVGVzdENhc2UgeworCS8qKgorCSAqIFRoZSBmaXh0dXJlIGZvciB0aGlzIExhYmVsIFZhbHVlIHRlc3QgY2FzZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgTGFiZWxWYWx1ZSBmaXh0dXJlID0gbnVsbDsKKworCS8qKgorCSAqIENvbnN0cnVjdHMgYSBuZXcgTGFiZWwgVmFsdWUgdGVzdCBjYXNlIHdpdGggdGhlIGdpdmVuIG5hbWUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIExhYmVsVmFsdWVUZXN0KFN0cmluZyBuYW1lKSB7CisJCXN1cGVyKG5hbWUpOworCX0KKworCS8qKgorCSAqIFNldHMgdGhlIGZpeHR1cmUgZm9yIHRoaXMgTGFiZWwgVmFsdWUgdGVzdCBjYXNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIHNldEZpeHR1cmUoTGFiZWxWYWx1ZSBmaXh0dXJlKSB7CisJCXRoaXMuZml4dHVyZSA9IGZpeHR1cmU7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgZml4dHVyZSBmb3IgdGhpcyBMYWJlbCBWYWx1ZSB0ZXN0IGNhc2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIExhYmVsVmFsdWUgZ2V0Rml4dHVyZSgpIHsKKwkJcmV0dXJuIGZpeHR1cmU7CisJfQorCisJLyoqCisJICogQWJzdHJhY3Qgc2luY2Ugc3ViY2xhc3NlcyBzaG91bGQgaW1wbGVtZW50CisJICogdGhpcyB0ZXN0LgorCSAqIAorCSAqIAorCSAqIFRlc3RzIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5MYWJlbFZhbHVlI3Jlc2V0KCkgPGVtPlJlc2V0PC9lbT59JyBvcGVyYXRpb24uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5MYWJlbFZhbHVlI3Jlc2V0KCkKKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCXB1YmxpYyBhYnN0cmFjdCB2b2lkIHRlc3RSZXNldCgpOworCisJLyoqCisJICogVGVzdHMgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkxhYmVsVmFsdWUjc2FtZVZhbHVlKG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5MYWJlbFZhbHVlKSA8ZW0+U2FtZSBWYWx1ZTwvZW0+fScgb3BlcmF0aW9uLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguTGFiZWxWYWx1ZSNzYW1lVmFsdWUob3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkxhYmVsVmFsdWUpCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIHRlc3RTYW1lVmFsdWVfX0xhYmVsVmFsdWUoKSB7CisJCS8vIFRPRE86IGltcGxlbWVudCB0aGlzIG9wZXJhdGlvbiB0ZXN0IG1ldGhvZAorCQkvLyBFbnN1cmUgdGhhdCB5b3UgcmVtb3ZlIEBnZW5lcmF0ZWQgb3IgbWFyayBpdCBAZ2VuZXJhdGVkIE5PVAorCQlmYWlsKCk7CisJfQorCisJLyoqCisJICogVGVzdHMgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5TYW5pdHlDaGVja2VyI3NhbmUoKSA8ZW0+U2FuZTwvZW0+fScgb3BlcmF0aW9uLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLlNhbml0eUNoZWNrZXIjc2FuZSgpCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIHRlc3RTYW5lKCkgeworCQkvLyBUT0RPOiBpbXBsZW1lbnQgdGhpcyBvcGVyYXRpb24gdGVzdCBtZXRob2QKKwkJLy8gRW5zdXJlIHRoYXQgeW91IHJlbW92ZSBAZ2VuZXJhdGVkIG9yIG1hcmsgaXQgQGdlbmVyYXRlZCBOT1QKKwkJZmFpbCgpOworCX0KKworfSAvL0xhYmVsVmFsdWVUZXN0CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC90ZXN0cy9Ob2RlTGFiZWxUZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC90ZXN0cy9Ob2RlTGFiZWxUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODFjMzZjOAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoL3Rlc3RzL05vZGVMYWJlbFRlc3QuamF2YQpAQCAtMCwwICsxLDQ0IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC50ZXN0czsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguTm9kZUxhYmVsOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiBBIHRlc3QgY2FzZSBmb3IgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPk5vZGUgTGFiZWw8L2I+PC9lbT4nLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBhYnN0cmFjdCBjbGFzcyBOb2RlTGFiZWxUZXN0IGV4dGVuZHMgTGFiZWxUZXN0IHsKKwkvKioKKwkgKiBDb25zdHJ1Y3RzIGEgbmV3IE5vZGUgTGFiZWwgdGVzdCBjYXNlIHdpdGggdGhlIGdpdmVuIG5hbWUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIE5vZGVMYWJlbFRlc3QoU3RyaW5nIG5hbWUpIHsKKwkJc3VwZXIobmFtZSk7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgZml4dHVyZSBmb3IgdGhpcyBOb2RlIExhYmVsIHRlc3QgY2FzZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgTm9kZUxhYmVsIGdldEZpeHR1cmUoKSB7CisJCXJldHVybiAoTm9kZUxhYmVsKWZpeHR1cmU7CisJfQorCit9IC8vTm9kZUxhYmVsVGVzdApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGgvdGVzdHMvTm9kZVRlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoL3Rlc3RzL05vZGVUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDBhYTM2NgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoL3Rlc3RzL05vZGVUZXN0LmphdmEKQEAgLTAsMCArMSw5OCBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGgudGVzdHM7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvL2ltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7CitpbXBvcnQganVuaXQudGV4dHVpLlRlc3RSdW5uZXI7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuU1RFTVVSSTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLnRlc3RzLklkZW50aWZpYWJsZVRlc3Q7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkdyYXBoRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguTm9kZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwuVGVzdFV0aWw7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gQSB0ZXN0IGNhc2UgZm9yIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5Ob2RlPC9iPjwvZW0+Jy4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQGdlbmVyYXRlZAorICovCitAU3VwcHJlc3NXYXJuaW5ncygiYWxsIikKK3B1YmxpYyBjbGFzcyBOb2RlVGVzdCBleHRlbmRzIElkZW50aWZpYWJsZVRlc3QgeworCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKKwkJVGVzdFJ1bm5lci5ydW4oTm9kZVRlc3QuY2xhc3MpOworCX0KKworCS8qKgorCSAqIENvbnN0cnVjdHMgYSBuZXcgTm9kZSB0ZXN0IGNhc2Ugd2l0aCB0aGUgZ2l2ZW4gbmFtZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jCisJICogLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgTm9kZVRlc3QoU3RyaW5nIG5hbWUpIHsKKwkJc3VwZXIobmFtZSk7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgZml4dHVyZSBmb3IgdGhpcyBOb2RlIHRlc3QgY2FzZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tCisJICogZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgTm9kZSBnZXRGaXh0dXJlKCkgeworCQlyZXR1cm4gKE5vZGUpZml4dHVyZTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAc2VlIGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZSNzZXRVcCgpCisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBzZXRVcCgpIHRocm93cyBFeGNlcHRpb24geworCQlzZXRGaXh0dXJlKFRlc3RVdGlsLmNyZWF0ZVN0YXRpY2FsbHlMYWJlbGVkTm9kZSgpKTsKKwl9IC8vIHNldFVwCisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZSN0ZWFyRG93bigpCisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIHRlYXJEb3duKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCXNldEZpeHR1cmUobnVsbCk7CisJfQorCisJLyoqCisJICogVGVzdCB0aGUgc2FuaXR5IG9mIHRoZSBmaXh0dXJlCisJICovCisJcHVibGljIHZvaWQgdGVzdFNhbmUoKSB7CisJCWZpbmFsIE5vZGUgbm9kZSA9IGdldEZpeHR1cmUoKTsKKwkJYXNzZXJ0VHJ1ZShub2RlLnNhbmUoKSk7CisJfSAvLyB0ZXN0U2FuZQorCisJLyoqCisJICogVGVzdCB0aGUgTm9kZSBoYXMgdGhlIHJpZ2h0IHR5cGUgVVJJLgorCSAqIAorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJcHVibGljIHZvaWQgdGVzdEdldFR5cGVVUkkoKSB7CisJCWZpbmFsIE5vZGUgbm9kZSA9IGdldEZpeHR1cmUoKTsKKwkJYXNzZXJ0VHJ1ZShub2RlLmdldFR5cGVVUkkoKS5lcXVhbHMoU1RFTVVSSS5OT0RFX1RZUEVfVVJJKSk7CisJfSAvLyB0ZXN0R2V0VHlwZVVSSQorCit9IC8vIE5vZGVUZXN0CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC90ZXN0cy9TYW5pdHlDaGVja2VyVGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGgvdGVzdHMvU2FuaXR5Q2hlY2tlclRlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMzVhNzQyCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGgvdGVzdHMvU2FuaXR5Q2hlY2tlclRlc3QuamF2YQpAQCAtMCwwICsxLDY0IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC50ZXN0czsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLlNhbml0eUNoZWNrZXI7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIEEgdGVzdCBjYXNlIGZvciB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+U2FuaXR5IENoZWNrZXI8L2I+PC9lbT4nLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBhYnN0cmFjdCBjbGFzcyBTYW5pdHlDaGVja2VyVGVzdCBleHRlbmRzIFRlc3RDYXNlIHsKKworCS8qKgorCSAqIFRoZSBmaXh0dXJlIGZvciB0aGlzIFNhbml0eSBDaGVja2VyIHRlc3QgY2FzZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgU2FuaXR5Q2hlY2tlciBmaXh0dXJlID0gbnVsbDsKKworCS8qKgorCSAqIENvbnN0cnVjdHMgYSBuZXcgU2FuaXR5IENoZWNrZXIgdGVzdCBjYXNlIHdpdGggdGhlIGdpdmVuIG5hbWUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFNhbml0eUNoZWNrZXJUZXN0KFN0cmluZyBuYW1lKSB7CisJCXN1cGVyKG5hbWUpOworCX0KKworCS8qKgorCSAqIFNldHMgdGhlIGZpeHR1cmUgZm9yIHRoaXMgU2FuaXR5IENoZWNrZXIgdGVzdCBjYXNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIHNldEZpeHR1cmUoU2FuaXR5Q2hlY2tlciBmaXh0dXJlKSB7CisJCXRoaXMuZml4dHVyZSA9IGZpeHR1cmU7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgZml4dHVyZSBmb3IgdGhpcyBTYW5pdHkgQ2hlY2tlciB0ZXN0IGNhc2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIFNhbml0eUNoZWNrZXIgZ2V0Rml4dHVyZSgpIHsKKwkJcmV0dXJuIGZpeHR1cmU7CisJfQorCit9IC8vU2FuaXR5Q2hlY2tlclRlc3QKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoL3Rlc3RzL1NpbXBsZUdyYXBoUGFydGl0aW9uZXJUZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC90ZXN0cy9TaW1wbGVHcmFwaFBhcnRpdGlvbmVyVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhiNTZjZTAKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC90ZXN0cy9TaW1wbGVHcmFwaFBhcnRpdGlvbmVyVGVzdC5qYXZhCkBAIC0wLDAgKzEsNzkgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLnRlc3RzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAKKyAqIENvcHlyaWdodCAoYykgMjAxMSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4gCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIAorICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wIAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQgCisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbCAKKyAqIAorICogQ29udHJpYnV0b3JzOiAKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGp1bml0LnRleHR1aS5UZXN0UnVubmVyOworCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkdyYXBoRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguU2ltcGxlR3JhcGhQYXJ0aXRpb25lcjsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogQSB0ZXN0IGNhc2UgZm9yIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5TaW1wbGUgR3JhcGggUGFydGl0aW9uZXI8L2I+PC9lbT4nLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBTaW1wbGVHcmFwaFBhcnRpdGlvbmVyVGVzdCBleHRlbmRzIEdyYXBoUGFydGl0aW9uZXJUZXN0IHsKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKKwkJVGVzdFJ1bm5lci5ydW4oU2ltcGxlR3JhcGhQYXJ0aXRpb25lclRlc3QuY2xhc3MpOworCX0KKworCS8qKgorCSAqIENvbnN0cnVjdHMgYSBuZXcgU2ltcGxlIEdyYXBoIFBhcnRpdGlvbmVyIHRlc3QgY2FzZSB3aXRoIHRoZSBnaXZlbiBuYW1lLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBTaW1wbGVHcmFwaFBhcnRpdGlvbmVyVGVzdChTdHJpbmcgbmFtZSkgeworCQlzdXBlcihuYW1lKTsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBmaXh0dXJlIGZvciB0aGlzIFNpbXBsZSBHcmFwaCBQYXJ0aXRpb25lciB0ZXN0IGNhc2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIFNpbXBsZUdyYXBoUGFydGl0aW9uZXIgZ2V0Rml4dHVyZSgpIHsKKwkJcmV0dXJuIChTaW1wbGVHcmFwaFBhcnRpdGlvbmVyKWZpeHR1cmU7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZSNzZXRVcCgpCisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIHNldFVwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCXNldEZpeHR1cmUoR3JhcGhGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVTaW1wbGVHcmFwaFBhcnRpdGlvbmVyKCkpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2UjdGVhckRvd24oKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgdm9pZCB0ZWFyRG93bigpIHRocm93cyBFeGNlcHRpb24geworCQlzZXRGaXh0dXJlKG51bGwpOworCX0KKworfSAvL1NpbXBsZUdyYXBoUGFydGl0aW9uZXJUZXN0CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC90ZXN0cy9TdGF0aWNFZGdlTGFiZWxUZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC90ZXN0cy9TdGF0aWNFZGdlTGFiZWxUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2IyZjZiNQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoL3Rlc3RzL1N0YXRpY0VkZ2VMYWJlbFRlc3QuamF2YQpAQCAtMCwwICsxLDQ0IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC50ZXN0czsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguU3RhdGljRWRnZUxhYmVsOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiBBIHRlc3QgY2FzZSBmb3IgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPlN0YXRpYyBFZGdlIExhYmVsPC9iPjwvZW0+Jy4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgYWJzdHJhY3QgY2xhc3MgU3RhdGljRWRnZUxhYmVsVGVzdCBleHRlbmRzIEVkZ2VMYWJlbFRlc3QgeworCS8qKgorCSAqIENvbnN0cnVjdHMgYSBuZXcgU3RhdGljIEVkZ2UgTGFiZWwgdGVzdCBjYXNlIHdpdGggdGhlIGdpdmVuIG5hbWUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFN0YXRpY0VkZ2VMYWJlbFRlc3QoU3RyaW5nIG5hbWUpIHsKKwkJc3VwZXIobmFtZSk7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgZml4dHVyZSBmb3IgdGhpcyBTdGF0aWMgRWRnZSBMYWJlbCB0ZXN0IGNhc2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIFN0YXRpY0VkZ2VMYWJlbCBnZXRGaXh0dXJlKCkgeworCQlyZXR1cm4gKFN0YXRpY0VkZ2VMYWJlbClmaXh0dXJlOworCX0KKworfSAvL1N0YXRpY0VkZ2VMYWJlbFRlc3QKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoL3Rlc3RzL1N0YXRpY0xhYmVsVGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGgvdGVzdHMvU3RhdGljTGFiZWxUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWU3ZjMxZQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoL3Rlc3RzL1N0YXRpY0xhYmVsVGVzdC5qYXZhCkBAIC0wLDAgKzEsNDUgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLnRlc3RzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5TdGF0aWNMYWJlbDsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogQSB0ZXN0IGNhc2UgZm9yIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5TdGF0aWMgTGFiZWw8L2I+PC9lbT4nLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBhYnN0cmFjdCBjbGFzcyBTdGF0aWNMYWJlbFRlc3QgZXh0ZW5kcyBMYWJlbFRlc3QgeworCisJLyoqCisJICogQ29uc3RydWN0cyBhIG5ldyBTdGF0aWMgTGFiZWwgdGVzdCBjYXNlIHdpdGggdGhlIGdpdmVuIG5hbWUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFN0YXRpY0xhYmVsVGVzdChTdHJpbmcgbmFtZSkgeworCQlzdXBlcihuYW1lKTsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBmaXh0dXJlIGZvciB0aGlzIFN0YXRpYyBMYWJlbCB0ZXN0IGNhc2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIFN0YXRpY0xhYmVsIGdldEZpeHR1cmUoKSB7CisJCXJldHVybiAoU3RhdGljTGFiZWwpZml4dHVyZTsKKwl9CisKK30gLy9TdGF0aWNMYWJlbFRlc3QKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoL3Rlc3RzL1N0YXRpY05vZGVMYWJlbFRlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoL3Rlc3RzL1N0YXRpY05vZGVMYWJlbFRlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kM2Q0NGIxCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGgvdGVzdHMvU3RhdGljTm9kZUxhYmVsVGVzdC5qYXZhCkBAIC0wLDAgKzEsNTIgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLnRlc3RzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5TdGF0aWNOb2RlTGFiZWw7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gQSB0ZXN0IGNhc2UgZm9yIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5TdGF0aWMgTm9kZSBMYWJlbDwvYj48L2VtPicuCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGFic3RyYWN0IGNsYXNzIFN0YXRpY05vZGVMYWJlbFRlc3QgZXh0ZW5kcyBOb2RlTGFiZWxUZXN0IHsKKwkvKioKKwkgKiBDb25zdHJ1Y3RzIGEgbmV3IFN0YXRpYyBOb2RlIExhYmVsIHRlc3QgY2FzZSB3aXRoIHRoZSBnaXZlbiBuYW1lLiA8IS0tCisJICogYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgU3RhdGljTm9kZUxhYmVsVGVzdChTdHJpbmcgbmFtZSkgeworCQlzdXBlcihuYW1lKTsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBmaXh0dXJlIGZvciB0aGlzIFN0YXRpYyBOb2RlIExhYmVsIHRlc3QgY2FzZS4gPCEtLQorCSAqIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIFN0YXRpY05vZGVMYWJlbCBnZXRGaXh0dXJlKCkgeworCQlyZXR1cm4gKFN0YXRpY05vZGVMYWJlbClmaXh0dXJlOworCX0KKworCS8qKgorCSAqIHRlc3QgbGFiZWxOb2RlCisJICogCisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlwdWJsaWMgdm9pZCB0ZXN0TGFiZWxOb2RlKCkgeworCQlmYWlsKCk7CisJfSAvLyB0ZXN0TGFiZWxOb2RlCisKK30gLy8gU3RhdGljTm9kZUxhYmVsVGVzdApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGgvdGVzdHMvVVJJVG9FZGdlTWFwRW50cnlUZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC90ZXN0cy9VUklUb0VkZ2VNYXBFbnRyeVRlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43Mjk3ZTU2Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGgvdGVzdHMvVVJJVG9FZGdlTWFwRW50cnlUZXN0LmphdmEKQEAgLTAsMCArMSwxMDkgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLnRlc3RzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGphdmEudXRpbC5NYXA7CisKK2ltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7CitpbXBvcnQganVuaXQudGV4dHVpLlRlc3RSdW5uZXI7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuVVJJOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5FZGdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5HcmFwaEZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkdyYXBoUGFja2FnZTsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogQSB0ZXN0IGNhc2UgZm9yIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5VUkkgVG8gRWRnZSBNYXAgRW50cnk8L2I+PC9lbT4nLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK0BTdXBwcmVzc1dhcm5pbmdzKCJhbGwiKQorcHVibGljIGNsYXNzIFVSSVRvRWRnZU1hcEVudHJ5VGVzdCBleHRlbmRzIFRlc3RDYXNlIHsKKworCS8qKgorCSAqIFRoZSBmaXh0dXJlIGZvciB0aGlzIFVSSSBUbyBFZGdlIE1hcCBFbnRyeSB0ZXN0IGNhc2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIE1hcC5FbnRyeTxVUkksIEVkZ2U+IGZpeHR1cmUgPSBudWxsOworCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgeworCQlUZXN0UnVubmVyLnJ1bihVUklUb0VkZ2VNYXBFbnRyeVRlc3QuY2xhc3MpOworCX0KKworCS8qKgorCSAqIENvbnN0cnVjdHMgYSBuZXcgVVJJIFRvIEVkZ2UgTWFwIEVudHJ5IHRlc3QgY2FzZSB3aXRoIHRoZSBnaXZlbiBuYW1lLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBVUklUb0VkZ2VNYXBFbnRyeVRlc3QoU3RyaW5nIG5hbWUpIHsKKwkJc3VwZXIobmFtZSk7CisJfQorCisJLyoqCisJICogU2V0cyB0aGUgZml4dHVyZSBmb3IgdGhpcyBVUkkgVG8gRWRnZSBNYXAgRW50cnkgdGVzdCBjYXNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIHNldEZpeHR1cmUoTWFwLkVudHJ5PFVSSSwgRWRnZT4gZml4dHVyZSkgeworCQl0aGlzLmZpeHR1cmUgPSBmaXh0dXJlOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIGZpeHR1cmUgZm9yIHRoaXMgVVJJIFRvIEVkZ2UgTWFwIEVudHJ5IHRlc3QgY2FzZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgTWFwLkVudHJ5PFVSSSwgRWRnZT4gZ2V0Rml4dHVyZSgpIHsKKwkJcmV0dXJuIGZpeHR1cmU7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZSNzZXRVcCgpCisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCUBTdXBwcmVzc1dhcm5pbmdzKCJ1bmNoZWNrZWQiKQorCXByb3RlY3RlZCB2b2lkIHNldFVwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCXNldEZpeHR1cmUoKE1hcC5FbnRyeTxVUkksIEVkZ2U+KUdyYXBoRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlKEdyYXBoUGFja2FnZS5MaXRlcmFscy5VUklfVE9fRURHRV9NQVBfRU5UUlkpKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlI3RlYXJEb3duKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgdGVhckRvd24oKSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJc2V0Rml4dHVyZShudWxsKTsKKwl9CisKKwkvKioKKwkgKiBLZWVwcyBKVW5pdCBxdWlldAorCSAqLworCXB1YmxpYyB2b2lkIHRlc3ROb3RoaW5nKCkgeworCQlhc3NlcnRUcnVlKHRydWUpOworCX0gLy8gdGVzdE5vdGhpbmcKK30gLy9VUklUb0VkZ2VNYXBFbnRyeVRlc3QKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoL3Rlc3RzL1VSSVRvSWRlbnRpZmlhYmxlTWFwRW50cnlUZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC90ZXN0cy9VUklUb0lkZW50aWZpYWJsZU1hcEVudHJ5VGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZkMzgxNWYKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC90ZXN0cy9VUklUb0lkZW50aWZpYWJsZU1hcEVudHJ5VGVzdC5qYXZhCkBAIC0wLDAgKzEsMTA5IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC50ZXN0czsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqYXZhLnV0aWwuTWFwOworCitpbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOworaW1wb3J0IGp1bml0LnRleHR1aS5UZXN0UnVubmVyOworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlVSSTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLklkZW50aWZpYWJsZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguR3JhcGhGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5HcmFwaFBhY2thZ2U7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIEEgdGVzdCBjYXNlIGZvciB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+VVJJIFRvIElkZW50aWZpYWJsZSBNYXAgRW50cnk8L2I+PC9lbT4nLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK0BTdXBwcmVzc1dhcm5pbmdzKCJhbGwiKQorcHVibGljIGNsYXNzIFVSSVRvSWRlbnRpZmlhYmxlTWFwRW50cnlUZXN0IGV4dGVuZHMgVGVzdENhc2UgeworCisJLyoqCisJICogVGhlIGZpeHR1cmUgZm9yIHRoaXMgVVJJIFRvIElkZW50aWZpYWJsZSBNYXAgRW50cnkgdGVzdCBjYXNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBNYXAuRW50cnk8VVJJLCBJZGVudGlmaWFibGU+IGZpeHR1cmUgPSBudWxsOworCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgeworCQlUZXN0UnVubmVyLnJ1bihVUklUb0lkZW50aWZpYWJsZU1hcEVudHJ5VGVzdC5jbGFzcyk7CisJfQorCisJLyoqCisJICogQ29uc3RydWN0cyBhIG5ldyBVUkkgVG8gSWRlbnRpZmlhYmxlIE1hcCBFbnRyeSB0ZXN0IGNhc2Ugd2l0aCB0aGUgZ2l2ZW4gbmFtZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVVJJVG9JZGVudGlmaWFibGVNYXBFbnRyeVRlc3QoU3RyaW5nIG5hbWUpIHsKKwkJc3VwZXIobmFtZSk7CisJfQorCisJLyoqCisJICogU2V0cyB0aGUgZml4dHVyZSBmb3IgdGhpcyBVUkkgVG8gSWRlbnRpZmlhYmxlIE1hcCBFbnRyeSB0ZXN0IGNhc2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgc2V0Rml4dHVyZShNYXAuRW50cnk8VVJJLCBJZGVudGlmaWFibGU+IGZpeHR1cmUpIHsKKwkJdGhpcy5maXh0dXJlID0gZml4dHVyZTsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBmaXh0dXJlIGZvciB0aGlzIFVSSSBUbyBJZGVudGlmaWFibGUgTWFwIEVudHJ5IHRlc3QgY2FzZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgTWFwLkVudHJ5PFVSSSwgSWRlbnRpZmlhYmxlPiBnZXRGaXh0dXJlKCkgeworCQlyZXR1cm4gZml4dHVyZTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlI3NldFVwKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJQFN1cHByZXNzV2FybmluZ3MoInVuY2hlY2tlZCIpCisJcHJvdGVjdGVkIHZvaWQgc2V0VXAoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJc2V0Rml4dHVyZSgoTWFwLkVudHJ5PFVSSSwgSWRlbnRpZmlhYmxlPilHcmFwaEZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZShHcmFwaFBhY2thZ2UuTGl0ZXJhbHMuVVJJX1RPX0lERU5USUZJQUJMRV9NQVBfRU5UUlkpKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlI3RlYXJEb3duKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgdGVhckRvd24oKSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJc2V0Rml4dHVyZShudWxsKTsKKwl9CisJCisJLyoqCisJICogS2VlcHMgSlVuaXQgcXVpZXQKKwkgKi8KKwlwdWJsaWMgdm9pZCB0ZXN0Tm90aGluZygpIHsKKwkJYXNzZXJ0VHJ1ZSh0cnVlKTsKKwl9IC8vIHRlc3ROb3RoaW5nCit9IC8vVVJJVG9JZGVudGlmaWFibGVNYXBFbnRyeVRlc3QKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoL3Rlc3RzL1VSSVRvTGFiZWxNYXBFbnRyeVRlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoL3Rlc3RzL1VSSVRvTGFiZWxNYXBFbnRyeVRlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYTFmYTMxCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGgvdGVzdHMvVVJJVG9MYWJlbE1hcEVudHJ5VGVzdC5qYXZhCkBAIC0wLDAgKzEsMTA5IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC50ZXN0czsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqYXZhLnV0aWwuTWFwOworCitpbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOworaW1wb3J0IGp1bml0LnRleHR1aS5UZXN0UnVubmVyOworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlVSSTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguR3JhcGhGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5HcmFwaFBhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkxhYmVsOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiBBIHRlc3QgY2FzZSBmb3IgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPlVSSSBUbyBMYWJlbCBNYXAgRW50cnk8L2I+PC9lbT4nLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK0BTdXBwcmVzc1dhcm5pbmdzKCJhbGwiKQorcHVibGljIGNsYXNzIFVSSVRvTGFiZWxNYXBFbnRyeVRlc3QgZXh0ZW5kcyBUZXN0Q2FzZSB7CisKKwkvKioKKwkgKiBUaGUgZml4dHVyZSBmb3IgdGhpcyBVUkkgVG8gTGFiZWwgTWFwIEVudHJ5IHRlc3QgY2FzZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgTWFwLkVudHJ5PFVSSSwgTGFiZWw+IGZpeHR1cmUgPSBudWxsOworCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgeworCQlUZXN0UnVubmVyLnJ1bihVUklUb0xhYmVsTWFwRW50cnlUZXN0LmNsYXNzKTsKKwl9CisKKwkvKioKKwkgKiBDb25zdHJ1Y3RzIGEgbmV3IFVSSSBUbyBMYWJlbCBNYXAgRW50cnkgdGVzdCBjYXNlIHdpdGggdGhlIGdpdmVuIG5hbWUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFVSSVRvTGFiZWxNYXBFbnRyeVRlc3QoU3RyaW5nIG5hbWUpIHsKKwkJc3VwZXIobmFtZSk7CisJfQorCisJLyoqCisJICogU2V0cyB0aGUgZml4dHVyZSBmb3IgdGhpcyBVUkkgVG8gTGFiZWwgTWFwIEVudHJ5IHRlc3QgY2FzZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBzZXRGaXh0dXJlKE1hcC5FbnRyeTxVUkksIExhYmVsPiBmaXh0dXJlKSB7CisJCXRoaXMuZml4dHVyZSA9IGZpeHR1cmU7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgZml4dHVyZSBmb3IgdGhpcyBVUkkgVG8gTGFiZWwgTWFwIEVudHJ5IHRlc3QgY2FzZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgTWFwLkVudHJ5PFVSSSwgTGFiZWw+IGdldEZpeHR1cmUoKSB7CisJCXJldHVybiBmaXh0dXJlOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2Ujc2V0VXAoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlAU3VwcHJlc3NXYXJuaW5ncygidW5jaGVja2VkIikKKwlwcm90ZWN0ZWQgdm9pZCBzZXRVcCgpIHRocm93cyBFeGNlcHRpb24geworCQlzZXRGaXh0dXJlKChNYXAuRW50cnk8VVJJLCBMYWJlbD4pR3JhcGhGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGUoR3JhcGhQYWNrYWdlLkxpdGVyYWxzLlVSSV9UT19MQUJFTF9NQVBfRU5UUlkpKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlI3RlYXJEb3duKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgdGVhckRvd24oKSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJc2V0Rml4dHVyZShudWxsKTsKKwl9CisKKwkvKioKKwkgKiBLZWVwcyBKVW5pdCBxdWlldAorCSAqLworCXB1YmxpYyB2b2lkIHRlc3ROb3RoaW5nKCkgeworCQlhc3NlcnRUcnVlKHRydWUpOworCX0gLy8gdGVzdE5vdGhpbmcKK30gLy9VUklUb0xhYmVsTWFwRW50cnlUZXN0CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC90ZXN0cy9VUklUb05vZGVMYWJlbE1hcEVudHJ5VGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGgvdGVzdHMvVVJJVG9Ob2RlTGFiZWxNYXBFbnRyeVRlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYzcyOGZmCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGgvdGVzdHMvVVJJVG9Ob2RlTGFiZWxNYXBFbnRyeVRlc3QuamF2YQpAQCAtMCwwICsxLDEwOSBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGgudGVzdHM7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgamF2YS51dGlsLk1hcDsKKworaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKK2ltcG9ydCBqdW5pdC50ZXh0dWkuVGVzdFJ1bm5lcjsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5VUkk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkdyYXBoRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguR3JhcGhQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5Ob2RlTGFiZWw7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIEEgdGVzdCBjYXNlIGZvciB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+VVJJIFRvIE5vZGUgTGFiZWwgTWFwIEVudHJ5PC9iPjwvZW0+Jy4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQGdlbmVyYXRlZAorICovCitAU3VwcHJlc3NXYXJuaW5ncygiYWxsIikKK3B1YmxpYyBjbGFzcyBVUklUb05vZGVMYWJlbE1hcEVudHJ5VGVzdCBleHRlbmRzIFRlc3RDYXNlIHsKKworCS8qKgorCSAqIFRoZSBmaXh0dXJlIGZvciB0aGlzIFVSSSBUbyBOb2RlIExhYmVsIE1hcCBFbnRyeSB0ZXN0IGNhc2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIE1hcC5FbnRyeTxVUkksIE5vZGVMYWJlbD4gZml4dHVyZSA9IG51bGw7CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CisJCVRlc3RSdW5uZXIucnVuKFVSSVRvTm9kZUxhYmVsTWFwRW50cnlUZXN0LmNsYXNzKTsKKwl9CisKKwkvKioKKwkgKiBDb25zdHJ1Y3RzIGEgbmV3IFVSSSBUbyBOb2RlIExhYmVsIE1hcCBFbnRyeSB0ZXN0IGNhc2Ugd2l0aCB0aGUgZ2l2ZW4gbmFtZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVVJJVG9Ob2RlTGFiZWxNYXBFbnRyeVRlc3QoU3RyaW5nIG5hbWUpIHsKKwkJc3VwZXIobmFtZSk7CisJfQorCisJLyoqCisJICogU2V0cyB0aGUgZml4dHVyZSBmb3IgdGhpcyBVUkkgVG8gTm9kZSBMYWJlbCBNYXAgRW50cnkgdGVzdCBjYXNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIHNldEZpeHR1cmUoTWFwLkVudHJ5PFVSSSwgTm9kZUxhYmVsPiBmaXh0dXJlKSB7CisJCXRoaXMuZml4dHVyZSA9IGZpeHR1cmU7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgZml4dHVyZSBmb3IgdGhpcyBVUkkgVG8gTm9kZSBMYWJlbCBNYXAgRW50cnkgdGVzdCBjYXNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBNYXAuRW50cnk8VVJJLCBOb2RlTGFiZWw+IGdldEZpeHR1cmUoKSB7CisJCXJldHVybiBmaXh0dXJlOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2Ujc2V0VXAoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlAU3VwcHJlc3NXYXJuaW5ncygidW5jaGVja2VkIikKKwlwcm90ZWN0ZWQgdm9pZCBzZXRVcCgpIHRocm93cyBFeGNlcHRpb24geworCQlzZXRGaXh0dXJlKChNYXAuRW50cnk8VVJJLCBOb2RlTGFiZWw+KUdyYXBoRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlKEdyYXBoUGFja2FnZS5MaXRlcmFscy5VUklfVE9fTk9ERV9MQUJFTF9NQVBfRU5UUlkpKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlI3RlYXJEb3duKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgdGVhckRvd24oKSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJc2V0Rml4dHVyZShudWxsKTsKKwl9CisKKwkvKioKKwkgKiBLZWVwcyBKVW5pdCBxdWlldAorCSAqLworCXB1YmxpYyB2b2lkIHRlc3ROb3RoaW5nKCkgeworCQlhc3NlcnRUcnVlKHRydWUpOworCX0gLy8gdGVzdE5vdGhpbmcKK30gLy9VUklUb05vZGVMYWJlbE1hcEVudHJ5VGVzdApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGgvdGVzdHMvVVJJVG9Ob2RlTWFwRW50cnlUZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC90ZXN0cy9VUklUb05vZGVNYXBFbnRyeVRlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYjFkMjNjCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGgvdGVzdHMvVVJJVG9Ob2RlTWFwRW50cnlUZXN0LmphdmEKQEAgLTAsMCArMSwxMDkgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLnRlc3RzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGphdmEudXRpbC5NYXA7CisKK2ltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7CitpbXBvcnQganVuaXQudGV4dHVpLlRlc3RSdW5uZXI7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuVVJJOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5HcmFwaEZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkdyYXBoUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguTm9kZTsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogQSB0ZXN0IGNhc2UgZm9yIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5VUkkgVG8gTm9kZSBNYXAgRW50cnk8L2I+PC9lbT4nLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK0BTdXBwcmVzc1dhcm5pbmdzKCJhbGwiKQorcHVibGljIGNsYXNzIFVSSVRvTm9kZU1hcEVudHJ5VGVzdCBleHRlbmRzIFRlc3RDYXNlIHsKKworCS8qKgorCSAqIFRoZSBmaXh0dXJlIGZvciB0aGlzIFVSSSBUbyBOb2RlIE1hcCBFbnRyeSB0ZXN0IGNhc2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIE1hcC5FbnRyeTxVUkksIE5vZGU+IGZpeHR1cmUgPSBudWxsOworCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgeworCQlUZXN0UnVubmVyLnJ1bihVUklUb05vZGVNYXBFbnRyeVRlc3QuY2xhc3MpOworCX0KKworCS8qKgorCSAqIENvbnN0cnVjdHMgYSBuZXcgVVJJIFRvIE5vZGUgTWFwIEVudHJ5IHRlc3QgY2FzZSB3aXRoIHRoZSBnaXZlbiBuYW1lLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBVUklUb05vZGVNYXBFbnRyeVRlc3QoU3RyaW5nIG5hbWUpIHsKKwkJc3VwZXIobmFtZSk7CisJfQorCisJLyoqCisJICogU2V0cyB0aGUgZml4dHVyZSBmb3IgdGhpcyBVUkkgVG8gTm9kZSBNYXAgRW50cnkgdGVzdCBjYXNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIHNldEZpeHR1cmUoTWFwLkVudHJ5PFVSSSwgTm9kZT4gZml4dHVyZSkgeworCQl0aGlzLmZpeHR1cmUgPSBmaXh0dXJlOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIGZpeHR1cmUgZm9yIHRoaXMgVVJJIFRvIE5vZGUgTWFwIEVudHJ5IHRlc3QgY2FzZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgTWFwLkVudHJ5PFVSSSwgTm9kZT4gZ2V0Rml4dHVyZSgpIHsKKwkJcmV0dXJuIGZpeHR1cmU7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZSNzZXRVcCgpCisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCUBTdXBwcmVzc1dhcm5pbmdzKCJ1bmNoZWNrZWQiKQorCXByb3RlY3RlZCB2b2lkIHNldFVwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCXNldEZpeHR1cmUoKE1hcC5FbnRyeTxVUkksIE5vZGU+KUdyYXBoRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlKEdyYXBoUGFja2FnZS5MaXRlcmFscy5VUklfVE9fTk9ERV9NQVBfRU5UUlkpKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlI3RlYXJEb3duKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgdGVhckRvd24oKSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJc2V0Rml4dHVyZShudWxsKTsKKwl9CisKKwkvKioKKwkgKiBLZWVwcyBKVW5pdCBxdWlldAorCSAqLworCXB1YmxpYyB2b2lkIHRlc3ROb3RoaW5nKCkgeworCQlhc3NlcnRUcnVlKHRydWUpOworCX0gLy8gdGVzdE5vdGhpbmcKK30gLy9VUklUb05vZGVNYXBFbnRyeVRlc3QKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoL3Rlc3RzL1VucmVzb2x2ZWRJZGVudGlmaWFibGVUZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC90ZXN0cy9VbnJlc29sdmVkSWRlbnRpZmlhYmxlVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBiNDNiN2MKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC90ZXN0cy9VbnJlc29sdmVkSWRlbnRpZmlhYmxlVGVzdC5qYXZhCkBAIC0wLDAgKzEsMTAzIEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC50ZXN0czsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7CitpbXBvcnQganVuaXQudGV4dHVpLlRlc3RSdW5uZXI7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguR3JhcGhGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5VbnJlc29sdmVkSWRlbnRpZmlhYmxlOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiBBIHRlc3QgY2FzZSBmb3IgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPlVucmVzb2x2ZWQgSWRlbnRpZmlhYmxlPC9iPjwvZW0+Jy4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQGdlbmVyYXRlZAorICovCitAU3VwcHJlc3NXYXJuaW5ncygiYWxsIikKK3B1YmxpYyBjbGFzcyBVbnJlc29sdmVkSWRlbnRpZmlhYmxlVGVzdCBleHRlbmRzIFRlc3RDYXNlIHsKKwkvKioKKwkgKiBUaGUgZml4dHVyZSBmb3IgdGhpcyBVbnJlc29sdmVkIElkZW50aWZpYWJsZSB0ZXN0IGNhc2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIFVucmVzb2x2ZWRJZGVudGlmaWFibGUgZml4dHVyZSA9IG51bGw7CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CisJCVRlc3RSdW5uZXIucnVuKFVucmVzb2x2ZWRJZGVudGlmaWFibGVUZXN0LmNsYXNzKTsKKwl9CisKKwkvKioKKwkgKiBDb25zdHJ1Y3RzIGEgbmV3IFVucmVzb2x2ZWQgSWRlbnRpZmlhYmxlIHRlc3QgY2FzZSB3aXRoIHRoZSBnaXZlbiBuYW1lLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBVbnJlc29sdmVkSWRlbnRpZmlhYmxlVGVzdChTdHJpbmcgbmFtZSkgeworCQlzdXBlcihuYW1lKTsKKwl9CisKKwkvKioKKwkgKiBTZXRzIHRoZSBmaXh0dXJlIGZvciB0aGlzIFVucmVzb2x2ZWQgSWRlbnRpZmlhYmxlIHRlc3QgY2FzZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBzZXRGaXh0dXJlKFVucmVzb2x2ZWRJZGVudGlmaWFibGUgZml4dHVyZSkgeworCQl0aGlzLmZpeHR1cmUgPSBmaXh0dXJlOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIGZpeHR1cmUgZm9yIHRoaXMgVW5yZXNvbHZlZCBJZGVudGlmaWFibGUgdGVzdCBjYXNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBVbnJlc29sdmVkSWRlbnRpZmlhYmxlIGdldEZpeHR1cmUoKSB7CisJCXJldHVybiBmaXh0dXJlOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2Ujc2V0VXAoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgdm9pZCBzZXRVcCgpIHRocm93cyBFeGNlcHRpb24geworCQlzZXRGaXh0dXJlKEdyYXBoRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlVW5yZXNvbHZlZElkZW50aWZpYWJsZSgpKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlI3RlYXJEb3duKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgdGVhckRvd24oKSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJc2V0Rml4dHVyZShudWxsKTsKKwl9CisKKwkvKioKKwkgKiBLZWVwIEpVbml0IHF1aWV0CisJICovCisJcHVibGljIHZvaWQgdGVzdEtlZXBKVW5pdFF1aWV0KCkgeworCQlhc3NlcnRUcnVlKHRydWUpOworCX0KK30gLy9VbnJlc29sdmVkSWRlbnRpZmlhYmxlVGVzdApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvbG9nZ2VyL3Rlc3RzL0xvZ2dlckV4YW1wbGUuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2xvZ2dlci90ZXN0cy9Mb2dnZXJFeGFtcGxlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjk0NmVjYgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2xvZ2dlci90ZXN0cy9Mb2dnZXJFeGFtcGxlLmphdmEKQEAgLTAsMCArMSwxMTMgQEAKKy8qKg0KKyAqIDxjb3B5cmlnaHQ+DQorICogPC9jb3B5cmlnaHQ+DQorICoNCisgKiAkSWQkDQorICovDQorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubG9nZ2VyLnRlc3RzOw0KKw0KK2ltcG9ydCBqYXZhLmlvLkZpbGU7DQorDQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5EaWFnbm9zdGljOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuVVJJOw0KKw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdDsNCisNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnJlc291cmNlLlJlc291cmNlOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUucmVzb3VyY2UuUmVzb3VyY2VTZXQ7DQorDQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5yZXNvdXJjZS5pbXBsLlJlc291cmNlU2V0SW1wbDsNCisNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnV0aWwuRGlhZ25vc3RpY2lhbjsNCisNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnhtaS5pbXBsLlhNSVJlc291cmNlRmFjdG9yeUltcGw7DQorDQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5sb2dnZXIuTG9nZ2VyUGFja2FnZTsNCisNCisvKioNCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKyAqIEEgc2FtcGxlIHV0aWxpdHkgZm9yIHRoZSAnPGVtPjxiPmxvZ2dlcjwvYj48L2VtPicgcGFja2FnZS4NCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisgKiBAZ2VuZXJhdGVkDQorICovDQorcHVibGljIGNsYXNzIExvZ2dlckV4YW1wbGUgew0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogTG9hZCBhbGwgdGhlIGFyZ3VtZW50IGZpbGUgcGF0aHMgb3IgVVJJcyBhcyBpbnN0YW5jZXMgb2YgdGhlIG1vZGVsLg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHBhcmFtIGFyZ3MgdGhlIGZpbGUgcGF0aHMgb3IgVVJJcy4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgew0KKwkJLy8gQ3JlYXRlIGEgcmVzb3VyY2Ugc2V0IHRvIGhvbGQgdGhlIHJlc291cmNlcy4NCisJCS8vDQorCQlSZXNvdXJjZVNldCByZXNvdXJjZVNldCA9IG5ldyBSZXNvdXJjZVNldEltcGwoKTsNCisJCQ0KKwkJLy8gUmVnaXN0ZXIgdGhlIGFwcHJvcHJpYXRlIHJlc291cmNlIGZhY3RvcnkgdG8gaGFuZGxlIGFsbCBmaWxlIGV4dGVuc2lvbnMuDQorCQkvLw0KKwkJcmVzb3VyY2VTZXQuZ2V0UmVzb3VyY2VGYWN0b3J5UmVnaXN0cnkoKS5nZXRFeHRlbnNpb25Ub0ZhY3RvcnlNYXAoKS5wdXQNCisJCQkoUmVzb3VyY2UuRmFjdG9yeS5SZWdpc3RyeS5ERUZBVUxUX0VYVEVOU0lPTiwgDQorCQkJIG5ldyBYTUlSZXNvdXJjZUZhY3RvcnlJbXBsKCkpOw0KKw0KKwkJLy8gUmVnaXN0ZXIgdGhlIHBhY2thZ2UgdG8gZW5zdXJlIGl0IGlzIGF2YWlsYWJsZSBkdXJpbmcgbG9hZGluZy4NCisJCS8vDQorCQlyZXNvdXJjZVNldC5nZXRQYWNrYWdlUmVnaXN0cnkoKS5wdXQNCisJCQkoTG9nZ2VyUGFja2FnZS5lTlNfVVJJLCANCisJCQkgTG9nZ2VyUGFja2FnZS5lSU5TVEFOQ0UpOw0KKyAgICAgICAgDQorCQkvLyBJZiB0aGVyZSBhcmUgbm8gYXJndW1lbnRzLCBlbWl0IGFuIGFwcHJvcHJpYXRlIHVzYWdlIG1lc3NhZ2UuDQorCQkvLw0KKwkJaWYgKGFyZ3MubGVuZ3RoID09IDApIHsNCisJCQlTeXN0ZW0ub3V0LnByaW50bG4oIkVudGVyIGEgbGlzdCBvZiBmaWxlIHBhdGhzIG9yIFVSSXMiKTsNCisJCX0NCisJCWVsc2Ugew0KKwkJCS8vIEl0ZXJhdGUgb3ZlciBhbGwgdGhlIGFyZ3VtZW50cy4NCisJCQkvLw0KKwkJCWZvciAoaW50IGkgPSAwOyBpIDwgYXJncy5sZW5ndGg7ICsraSkgew0KKwkJCQkvLyBDb25zdHJ1Y3QgdGhlIFVSSSBmb3IgdGhlIGluc3RhbmNlIGZpbGUuDQorCQkJCS8vIFRoZSBhcmd1bWVudCBpcyB0cmVhdGVkIGFzIGEgZmlsZSBwYXRoIG9ubHkgaWYgaXQgZGVub3RlcyBhbiBleGlzdGluZyBmaWxlLg0KKwkJCQkvLyBPdGhlcndpc2UsIGl0J3MgZGlyZWN0bHkgdHJlYXRlZCBhcyBhIFVSTC4NCisJCQkJLy8NCisJCQkJRmlsZSBmaWxlID0gbmV3IEZpbGUoYXJnc1tpXSk7DQorCQkJCVVSSSB1cmkgPSBmaWxlLmlzRmlsZSgpID8gVVJJLmNyZWF0ZUZpbGVVUkkoZmlsZS5nZXRBYnNvbHV0ZVBhdGgoKSk6IFVSSS5jcmVhdGVVUkkoYXJnc1tpXSk7DQorDQorCQkJCXRyeSB7DQorCQkJCQkvLyBEZW1hbmQgbG9hZCByZXNvdXJjZSBmb3IgdGhpcyBmaWxlLg0KKwkJCQkJLy8NCisJCQkJCVJlc291cmNlIHJlc291cmNlID0gcmVzb3VyY2VTZXQuZ2V0UmVzb3VyY2UodXJpLCB0cnVlKTsNCisJCQkJCVN5c3RlbS5vdXQucHJpbnRsbigiTG9hZGVkICIgKyB1cmkpOyAvLyROT04tTkxTLTEkDQorDQorCQkJCQkvLyBWYWxpZGF0ZSB0aGUgY29udGVudHMgb2YgdGhlIGxvYWRlZCByZXNvdXJjZS4NCisJCQkJCS8vDQorCQkJCQlmb3IgKEVPYmplY3QgZU9iamVjdCA6IHJlc291cmNlLmdldENvbnRlbnRzKCkpIHsNCisJCQkJCQlEaWFnbm9zdGljIGRpYWdub3N0aWMgPSBEaWFnbm9zdGljaWFuLklOU1RBTkNFLnZhbGlkYXRlKGVPYmplY3QpOw0KKwkJCQkJCWlmIChkaWFnbm9zdGljLmdldFNldmVyaXR5KCkgIT0gRGlhZ25vc3RpYy5PSykgew0KKwkJCQkJCQlwcmludERpYWdub3N0aWMoZGlhZ25vc3RpYywgIiIpOyAvLyROT04tTkxTLTEkDQorCQkJCQkJfQ0KKwkJCQkJfQ0KKwkJCQl9DQorCQkJCWNhdGNoIChSdW50aW1lRXhjZXB0aW9uIGV4Y2VwdGlvbikgew0KKwkJCQkJU3lzdGVtLm91dC5wcmludGxuKCJQcm9ibGVtIGxvYWRpbmcgIiArIHVyaSk7IC8vJE5PTi1OTFMtMSQNCisJCQkJCWV4Y2VwdGlvbi5wcmludFN0YWNrVHJhY2UoKTsNCisJCQkJfQ0KKwkJCX0NCisJCX0NCisJfQ0KKwkNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIFByaW50cyBkaWFnbm9zdGljcyB3aXRoIGluZGVudGF0aW9uLg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHBhcmFtIGRpYWdub3N0aWMgdGhlIGRpYWdub3N0aWMgdG8gcHJpbnQuDQorCSAqIEBwYXJhbSBpbmRlbnQgdGhlIGluZGVudGF0aW9uIGZvciBwcmludGluZy4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIHN0YXRpYyB2b2lkIHByaW50RGlhZ25vc3RpYyhEaWFnbm9zdGljIGRpYWdub3N0aWMsIFN0cmluZyBpbmRlbnQpIHsNCisJCVN5c3RlbS5vdXQucHJpbnQoaW5kZW50KTsNCisJCVN5c3RlbS5vdXQucHJpbnRsbihkaWFnbm9zdGljLmdldE1lc3NhZ2UoKSk7DQorCQlmb3IgKERpYWdub3N0aWMgY2hpbGQgOiBkaWFnbm9zdGljLmdldENoaWxkcmVuKCkpIHsNCisJCQlwcmludERpYWdub3N0aWMoY2hpbGQsIGluZGVudCArICIgICIpOyAvLyROT04tTkxTLTEkDQorCQl9DQorCX0NCisNCit9IC8vTG9nZ2VyRXhhbXBsZQ0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2xvZ2dlci90ZXN0cy9Mb2dnZXJUZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9sb2dnZXIvdGVzdHMvTG9nZ2VyVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc0ZjVhMjkKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9sb2dnZXIvdGVzdHMvTG9nZ2VyVGVzdC5qYXZhCkBAIC0wLDAgKzEsNDIgQEAKKy8qKg0KKyAqIDxjb3B5cmlnaHQ+DQorICogPC9jb3B5cmlnaHQ+DQorICoNCisgKiAkSWQkDQorICovDQorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubG9nZ2VyLnRlc3RzOw0KKw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLnRlc3RzLklkZW50aWZpYWJsZVRlc3Q7DQorDQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5sb2dnZXIuTG9nZ2VyOw0KKw0KKy8qKg0KKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorICogQSB0ZXN0IGNhc2UgZm9yIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5Mb2dnZXI8L2I+PC9lbT4nLg0KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKyAqIEBnZW5lcmF0ZWQNCisgKi8NCitwdWJsaWMgYWJzdHJhY3QgY2xhc3MgTG9nZ2VyVGVzdCBleHRlbmRzIElkZW50aWZpYWJsZVRlc3Qgew0KKw0KKwkvKioNCisJICogQ29uc3RydWN0cyBhIG5ldyBMb2dnZXIgdGVzdCBjYXNlIHdpdGggdGhlIGdpdmVuIG5hbWUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgTG9nZ2VyVGVzdChTdHJpbmcgbmFtZSkgew0KKwkJc3VwZXIobmFtZSk7DQorCX0NCisNCisJLyoqDQorCSAqIFJldHVybnMgdGhlIGZpeHR1cmUgZm9yIHRoaXMgTG9nZ2VyIHRlc3QgY2FzZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCUBPdmVycmlkZQ0KKwlwcm90ZWN0ZWQgTG9nZ2VyIGdldEZpeHR1cmUoKSB7DQorCQlyZXR1cm4gKExvZ2dlcilmaXh0dXJlOw0KKwl9DQorDQorfSAvL0xvZ2dlclRlc3QNCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9sb2dnZXIvdGVzdHMvTG9nZ2VyVGVzdHMuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2xvZ2dlci90ZXN0cy9Mb2dnZXJUZXN0cy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU5YzkzZmQKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9sb2dnZXIvdGVzdHMvTG9nZ2VyVGVzdHMuamF2YQpAQCAtMCwwICsxLDUwIEBACisvKioNCisgKiA8Y29weXJpZ2h0Pg0KKyAqIDwvY29weXJpZ2h0Pg0KKyAqDQorICogJElkJA0KKyAqLw0KK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmxvZ2dlci50ZXN0czsNCisNCitpbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3Q7DQoraW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0U3VpdGU7DQorDQoraW1wb3J0IGp1bml0LnRleHR1aS5UZXN0UnVubmVyOw0KKw0KKy8qKg0KKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorICogQSB0ZXN0IHN1aXRlIGZvciB0aGUgJzxlbT48Yj5sb2dnZXI8L2I+PC9lbT4nIHBhY2thZ2UuDQorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorICogQGdlbmVyYXRlZA0KKyAqLw0KK3B1YmxpYyBjbGFzcyBMb2dnZXJUZXN0cyBleHRlbmRzIFRlc3RTdWl0ZSB7DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgew0KKwkJVGVzdFJ1bm5lci5ydW4oc3VpdGUoKSk7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgc3RhdGljIFRlc3Qgc3VpdGUoKSB7DQorCQlUZXN0U3VpdGUgc3VpdGUgPSBuZXcgTG9nZ2VyVGVzdHMoImxvZ2dlciBUZXN0cyIpOyAvLyROT04tTkxTLTEkDQorCQlyZXR1cm4gc3VpdGU7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgTG9nZ2VyVGVzdHMoU3RyaW5nIG5hbWUpIHsNCisJCXN1cGVyKG5hbWUpOw0KKwl9DQorDQorfSAvL0xvZ2dlclRlc3RzDQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvbW9kZWwvdGVzdHMvQ29tcGFyYWJsZVRlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL21vZGVsL3Rlc3RzL0NvbXBhcmFibGVUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDM1NTViMgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL21vZGVsL3Rlc3RzL0NvbXBhcmFibGVUZXN0LmphdmEKQEAgLTAsMCArMSw2MiBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwudGVzdHM7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiBBIHRlc3QgY2FzZSBmb3IgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPkNvbXBhcmFibGU8L2I+PC9lbT4nLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBhYnN0cmFjdCBjbGFzcyBDb21wYXJhYmxlVGVzdCBleHRlbmRzIFRlc3RDYXNlIHsKKworCS8qKgorCSAqIFRoZSBmaXh0dXJlIGZvciB0aGlzIENvbXBhcmFibGUgdGVzdCBjYXNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBDb21wYXJhYmxlPD8+IGZpeHR1cmUgPSBudWxsOworCisJLyoqCisJICogQ29uc3RydWN0cyBhIG5ldyBDb21wYXJhYmxlIHRlc3QgY2FzZSB3aXRoIHRoZSBnaXZlbiBuYW1lLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBDb21wYXJhYmxlVGVzdChTdHJpbmcgbmFtZSkgeworCQlzdXBlcihuYW1lKTsKKwl9CisKKwkvKioKKwkgKiBTZXRzIHRoZSBmaXh0dXJlIGZvciB0aGlzIENvbXBhcmFibGUgdGVzdCBjYXNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIHNldEZpeHR1cmUoQ29tcGFyYWJsZTw/PiBmaXh0dXJlKSB7CisJCXRoaXMuZml4dHVyZSA9IGZpeHR1cmU7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgZml4dHVyZSBmb3IgdGhpcyBDb21wYXJhYmxlIHRlc3QgY2FzZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgQ29tcGFyYWJsZTw/PiBnZXRGaXh0dXJlKCkgeworCQlyZXR1cm4gZml4dHVyZTsKKwl9CisKK30gLy9Db21wYXJhYmxlVGVzdApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvbW9kZWwvdGVzdHMvRGVjb3JhdG9yVGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvbW9kZWwvdGVzdHMvRGVjb3JhdG9yVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEwYmM2YTIKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9tb2RlbC90ZXN0cy9EZWNvcmF0b3JUZXN0LmphdmEKQEAgLTAsMCArMSwyNDkgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLnRlc3RzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLy9pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOworCitpbXBvcnQganVuaXQudGV4dHVpLlRlc3RSdW5uZXI7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuRUxpc3Q7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlVSSTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuU1RFTVVSSTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLkR1YmxpbkNvcmU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi50ZXN0cy5JZGVudGlmaWFibGVUZXN0OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5HcmFwaDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguR3JhcGhGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5EZWNvcmF0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLk1vZGVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5Nb2RlbEZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLlNURU1UaW1lOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IEEgdGVzdCBjYXNlIGZvciB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+RGVjb3JhdG9yPC9iPjwvZW0+Jy4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogPHA+CisgKiBUaGUgZm9sbG93aW5nIG9wZXJhdGlvbnMgYXJlIHRlc3RlZDoKKyAqIDx1bD4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuRGVjb3JhdG9yI2RlY29yYXRlR3JhcGgob3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLlNURU1UaW1lKSA8ZW0+RGVjb3JhdGUgR3JhcGg8L2VtPn08L2xpPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5EZWNvcmF0b3IjdXBkYXRlTGFiZWxzKG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5TVEVNVGltZSwgbG9uZywgaW50KSA8ZW0+VXBkYXRlIExhYmVsczwvZW0+fTwvbGk+CisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLkRlY29yYXRvciNyZXNldExhYmVscygpIDxlbT5SZXNldCBMYWJlbHM8L2VtPn08L2xpPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5EZWNvcmF0b3IjcHJlcGFyZShvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuTW9kZWwsIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5TVEVNVGltZSkgPGVtPlByZXBhcmU8L2VtPn08L2xpPgorICogPC91bD4KKyAqIDwvcD4KKyAqIEBnZW5lcmF0ZWQKKyAqLworQFN1cHByZXNzV2FybmluZ3MoImFsbCIpCitwdWJsaWMgY2xhc3MgRGVjb3JhdG9yVGVzdCBleHRlbmRzIElkZW50aWZpYWJsZVRlc3QgeworCQorCXB1YmxpYyBzdGF0aWMgVVJJIERFQ09SQVRPUl9VUkkgPSBTVEVNVVJJLmNyZWF0ZVVSSSgiZGVjb3JhdG9yL2RlY29yYXRvclRlc3QuZGVjb3JhdG9yIik7CisJCisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEdSQVBIID0gImdyYXBoIjsKKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBVUkkgQ0FOT05JQ0FMX0dSQVBIX1VSSSA9IFNURU1VUkkuY3JlYXRlVVJJKEdSQVBICSsgIi8iICsgImNhbm9uaWNhbEdyYXBoIik7CisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIE1PREVMID0gIm1vZGVsIjsKKwkKKwlwdWJsaWMgc3RhdGljIGZpbmFsIFVSSSBHUkFQSDBfVVJJID0gU1RFTVVSSS5jcmVhdGVVUkkoR1JBUEggKyAiLyIgKyAiZzAiKTsKKwlwdWJsaWMgc3RhdGljIGZpbmFsIFVSSSBNT0RFTDBfVVJJID0gU1RFTVVSSS5jcmVhdGVVUkkoTU9ERUwgKyAiLyIgKyAibTAiKTsKKwlwdWJsaWMgc3RhdGljIGZpbmFsIFVSSSBNT0RFTDFfVVJJID0gU1RFTVVSSS5jcmVhdGVVUkkoTU9ERUwgKyAiLyIgKyAibTEiKTsKKwlwdWJsaWMgc3RhdGljIGZpbmFsIFVSSSBNT0RFTDJfVVJJID0gU1RFTVVSSS5jcmVhdGVVUkkoTU9ERUwgKyAiLyIgKyAibTIiKTsKKwkKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CisJCVRlc3RSdW5uZXIucnVuKERlY29yYXRvclRlc3QuY2xhc3MpOworCX0KKworCS8qKgorCSAqIENvbnN0cnVjdHMgYSBuZXcgRGVjb3JhdG9yIHRlc3QgY2FzZSB3aXRoIHRoZSBnaXZlbiBuYW1lLiA8IS0tCisJICogYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRGVjb3JhdG9yVGVzdChTdHJpbmcgbmFtZSkgeworCQlzdXBlcihuYW1lKTsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBmaXh0dXJlIGZvciB0aGlzIERlY29yYXRvciB0ZXN0IGNhc2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIERlY29yYXRvciBnZXRGaXh0dXJlKCkgeworCQlyZXR1cm4gKERlY29yYXRvcilmaXh0dXJlOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2Ujc2V0VXAoKQorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgc2V0VXAoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJZmluYWwgRGVjb3JhdG9yIGQgPSBNb2RlbEZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZURlY29yYXRvcigpOworCQlkLnNldFVSSShERUNPUkFUT1JfVVJJKTsKKwkJc2V0Rml4dHVyZShkKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlI3RlYXJEb3duKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgdGVhckRvd24oKSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJc2V0Rml4dHVyZShudWxsKTsKKwl9CisKKwkvKioKKwkgKiBUZXN0cyB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuRGVjb3JhdG9yI2RlY29yYXRlR3JhcGgob3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLlNURU1UaW1lKSA8ZW0+RGVjb3JhdGUgR3JhcGg8L2VtPn0nIG9wZXJhdGlvbi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIE11Y2ggdGVzdGluZyBvZiBkZWNvcmF0b3JzIGlzIGFsc28gZG9uZSBpbiAKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC50ZXN0cy5HcmFwaFRlc3QucG9wdWxhdGVHcmFwaCgpCisJICogYW5kIAorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLnRlc3RzLk1vZGVsVGVzdC5nZXRGaXh0dXJlKCkKKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5EZWNvcmF0b3IjZGVjb3JhdGVHcmFwaChvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuU1RFTVRpbWUpCisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlwdWJsaWMgdm9pZCB0ZXN0RGVjb3JhdGVHcmFwaF9fU1RFTVRpbWUoKSB7CisJCS8vIFRPRE8gdGhpcyBpcyB0aGUgbW9zdCBiYXNpYyBvZiB0ZXN0cy4gV2hhdCBvdGhlciB0ZXN0cyB3b3VsZCBiZSBnZW5lcmFsbHkgdXNlZnVsIGZvciBEZWNvcmF0ZUdyYXBoPworCQlmaW5hbCBEZWNvcmF0b3IgZGVjID0gZ2V0Rml4dHVyZSgpOworCQlTVEVNVGltZSBub3cgPSBNb2RlbEZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZVNURU1UaW1lKCk7CisJCWZpbmFsIEdyYXBoIGdyYXBoID0gR3JhcGhGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVHcmFwaCgpOworCQlmaW5hbCBEdWJsaW5Db3JlIGRjMSA9IGdyYXBoLmdldER1YmxpbkNvcmUoKTsKKwkJLy9maW5hbCBOb2RlIG5vZGUgPSBUZXN0VXRpbC5jcmVhdGVTdGF0aWNhbGx5TGFiZWxlZE5vZGUoKTsKKwkJLy9ncmFwaC5wdXROb2RlKG5vZGUpOworCQlFTGlzdDxEZWNvcmF0b3I+ICBhbGxEZWNvcmF0b3JzID0gZ3JhcGguZ2V0RGVjb3JhdG9ycygpOworCQlpbnQgc3RhcnRTaXplID0gYWxsRGVjb3JhdG9ycy5zaXplKCk7CisJCWFsbERlY29yYXRvcnMuYWRkKGRlYyk7CisJCS8vIFRoaXMgbWV0aG9kIGlzIG5vdCBpbXBsZW1lbnRlZCBpbiB0aGUgYWJzdHJhY3QuLi4gZGVwZW5kcyBvbiB0aGUgcGFydGljdWxhciBkZWNvcmF0b3IKKwkJLy9kZWMuZGVjb3JhdGVHcmFwaChub3cpOworCQlpbnQgZmluaXNoU2l6ZSA9IGdyYXBoLmdldERlY29yYXRvcnMoKS5zaXplKCk7CisJCWFzc2VydChmaW5pc2hTaXplLXN0YXJ0U2l6ZT09MSk7CisJfQorCQorCS8qKgorCSAqIEBwYXJhbSB1cmkKKwkgKiAgICAgICAgICAgIHRoZSB1cmkgdG8gdXNlIGZvciB0aGUgbmV3bHkgY3JlYXRlZCBncmFwaAorCSAqIEByZXR1cm4gYSBuZXcgZ3JhcGggaW5zdGFuY2UKKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCXByaXZhdGUgc3RhdGljIEdyYXBoIGNyZWF0ZUdyYXBoKFVSSSB1cmkpIHsKKwkJZmluYWwgR3JhcGggcmV0VmFsdWUgPSBHcmFwaEZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZUdyYXBoKCk7CisJCXJldFZhbHVlLnNldFVSSSh1cmkpOworCQlyZXR1cm4gcmV0VmFsdWU7CisJfSAvLyBjcmVhdGVHcmFwaAorCisJCisJLyoqCisJICogQHBhcmFtIHVyaQorCSAqICAgICAgICAgICAgdGhlIHVyaSB0byB1c2UgZm9yIHRoZSBuZXdseSBjcmVhdGVkIG1vZGVsCisJICogQHJldHVybiBhIG5ldyBtb2RlbCBpbnN0YW5jZQorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJcHJpdmF0ZSBzdGF0aWMgTW9kZWwgY3JlYXRlTW9kZWwoVVJJIHVyaSkgeworCQlmaW5hbCBNb2RlbCByZXRWYWx1ZSA9IE1vZGVsRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlTW9kZWwoKTsKKwkJcmV0VmFsdWUuc2V0VVJJKHVyaSk7CisJCXJldHVybiByZXRWYWx1ZTsKKwl9IC8vIGNyZWF0ZU1vZGVsCisKKworCS8qKgorCSAqIFRlc3RzIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5EZWNvcmF0b3IjdXBkYXRlTGFiZWxzKG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5TVEVNVGltZSwgbG9uZywgaW50KSA8ZW0+VXBkYXRlIExhYmVsczwvZW0+fScgb3BlcmF0aW9uLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuRGVjb3JhdG9yI3VwZGF0ZUxhYmVscyhvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuU1RFTVRpbWUsIGxvbmcsIGludCkKKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCXB1YmxpYyB2b2lkIHRlc3RVcGRhdGVMYWJlbHNfX1NURU1UaW1lX2xvbmdfaW50KCkgeworCQlhc3NlcnRUcnVlKHRydWUpOworCX0KKworCS8qKgorCSAqIFRlc3RzIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5EZWNvcmF0b3IjdXBkYXRlTGFiZWxzKG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5TVEVNVGltZSwgbG9uZykgPGVtPlVwZGF0ZSBMYWJlbHM8L2VtPn0nIG9wZXJhdGlvbi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLkRlY29yYXRvciN1cGRhdGVMYWJlbHMob3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLlNURU1UaW1lLCBsb25nKQorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJcHVibGljIHZvaWQgdGVzdFVwZGF0ZUxhYmVsc19fU1RFTVRpbWVfbG9uZygpIHsKKwkJYXNzZXJ0VHJ1ZSh0cnVlKTsKKwl9CisKKwkvKioKKwkgKiBUZXN0cyB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuRGVjb3JhdG9yI3Jlc2V0TGFiZWxzKCkgPGVtPlJlc2V0IExhYmVsczwvZW0+fScgb3BlcmF0aW9uLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuRGVjb3JhdG9yI3Jlc2V0TGFiZWxzKCkKKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCXB1YmxpYyB2b2lkIHRlc3RSZXNldExhYmVscygpIHsKKwkJYXNzZXJ0VHJ1ZSh0cnVlKTsKKwl9CisKKwkvKioKKwkgKiBUZXN0cyB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuRGVjb3JhdG9yI2dldExhYmVsc1RvVXBkYXRlKGludCwgaW50KSA8ZW0+R2V0IExhYmVscyBUbyBVcGRhdGU8L2VtPn0nIG9wZXJhdGlvbi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLkRlY29yYXRvciNnZXRMYWJlbHNUb1VwZGF0ZShpbnQsIGludCkKKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCXB1YmxpYyB2b2lkIHRlc3RHZXRMYWJlbHNUb1VwZGF0ZV9faW50X2ludCgpIHsKKwkJYXNzZXJ0VHJ1ZSh0cnVlKTsKKwl9CisKKwkvKioKKwkgKiBUZXN0cyB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuRGVjb3JhdG9yI3ByZXBhcmUob3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLk1vZGVsLCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuU1RFTVRpbWUpIDxlbT5QcmVwYXJlPC9lbT59JyBvcGVyYXRpb24uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5EZWNvcmF0b3IjcHJlcGFyZShvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuTW9kZWwsIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5TVEVNVGltZSkKKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCXB1YmxpYyB2b2lkIHRlc3RQcmVwYXJlX19Nb2RlbF9TVEVNVGltZSgpIHsKKwkJCisJCU1vZGVsIG0wID0gY3JlYXRlTW9kZWwoTU9ERUwwX1VSSSk7CisJCUR1YmxpbkNvcmUgZGMwID0gbTAuZ2V0RHVibGluQ29yZSgpOworCQlkYzAuc2V0VGl0bGUoTU9ERUwrIjAiKTsKKwkJTW9kZWwgbTEgPSBjcmVhdGVNb2RlbChNT0RFTDFfVVJJKTsKKwkJRHVibGluQ29yZSBkYzEgPSBtMS5nZXREdWJsaW5Db3JlKCk7CisJCWRjMS5zZXRUaXRsZShNT0RFTCsiMSIpOworCQlNb2RlbCBtMiA9IGNyZWF0ZU1vZGVsKE1PREVMMl9VUkkpOworCQlEdWJsaW5Db3JlIGRjMiA9IG0yLmdldER1YmxpbkNvcmUoKTsKKwkJZGMyLnNldFRpdGxlKE1PREVMKyIyIik7CisJCQorCQkKKwkJLy8gR3JhcGggRzAKKwkJZmluYWwgR3JhcGggZzAgPSBjcmVhdGVHcmFwaChHUkFQSDBfVVJJKTsKKwkJZzAuZ2V0RHVibGluQ29yZSgpLnNldFRpdGxlKCJnMCIpOworCQkKKworCisJCS8vICoqKiBNb2RlbCBNMCAqKioKKwkJbTAuZ2V0R3JhcGhzKCkuYWRkKGcwKTsKKwkJCisJCS8vICoqKiBNb2RlbCBNMSAqKioKKwkJbTEuZ2V0TW9kZWxzKCkuYWRkKG0wKTsKKwkJCisJCS8vICoqKiBNb2RlbCBNMiAqKioKKwkJbTIuZ2V0TW9kZWxzKCkuYWRkKG0xKTsKKworCQlhc3NlcnRUcnVlKG0yLnNhbmUoKSk7CisKKwl9CisKK30gLy8gRGVjb3JhdG9yVGVzdApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvbW9kZWwvdGVzdHMvRWRnZURlY29yYXRvclRlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL21vZGVsL3Rlc3RzL0VkZ2VEZWNvcmF0b3JUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTc3MjMzNwotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL21vZGVsL3Rlc3RzL0VkZ2VEZWNvcmF0b3JUZXN0LmphdmEKQEAgLTAsMCArMSw5MyBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwudGVzdHM7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQganVuaXQudGV4dHVpLlRlc3RSdW5uZXI7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuVVJJOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5TVEVNVVJJOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5FZGdlRGVjb3JhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5Nb2RlbEZhY3Rvcnk7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gQSB0ZXN0IGNhc2UgZm9yIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5FZGdlIERlY29yYXRvcjwvYj48L2VtPicuCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBnZW5lcmF0ZWQKKyAqLworQFN1cHByZXNzV2FybmluZ3MoImFsbCIpCitwdWJsaWMgY2xhc3MgRWRnZURlY29yYXRvclRlc3QgZXh0ZW5kcyBEZWNvcmF0b3JUZXN0IHsKKwkKKwlwdWJsaWMgc3RhdGljIFVSSSBERUNPUkFUT1JfVVJJID0gU1RFTVVSSS5jcmVhdGVVUkkoImRlY29yYXRvci9lZGdlRGVjb3JhdG9yVGVzdC5kZWNvcmF0b3IiKTsKKwkKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgeworCQlUZXN0UnVubmVyLnJ1bihFZGdlRGVjb3JhdG9yVGVzdC5jbGFzcyk7CisJfQorCisJLyoqCisJICogQ29uc3RydWN0cyBhIG5ldyBFZGdlIERlY29yYXRvciB0ZXN0IGNhc2Ugd2l0aCB0aGUgZ2l2ZW4gbmFtZS4gPCEtLQorCSAqIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVkZ2VEZWNvcmF0b3JUZXN0KFN0cmluZyBuYW1lKSB7CisJCXN1cGVyKG5hbWUpOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIGZpeHR1cmUgZm9yIHRoaXMgRWRnZSBEZWNvcmF0b3IgdGVzdCBjYXNlLiA8IS0tCisJICogYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgRWRnZURlY29yYXRvciBnZXRGaXh0dXJlKCkgeworCQlyZXR1cm4gKEVkZ2VEZWNvcmF0b3IpZml4dHVyZTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZSNzZXRVcCgpCisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgdm9pZCBzZXRVcCgpIHRocm93cyBFeGNlcHRpb24geworCQkJCisJCUVkZ2VEZWNvcmF0b3IgZCA9IE1vZGVsRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlRWRnZURlY29yYXRvcigpOworCQlkLnNldFVSSShERUNPUkFUT1JfVVJJKTsKKwkJCisJCXNldEZpeHR1cmUoZCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2UjdGVhckRvd24oKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgdm9pZCB0ZWFyRG93bigpIHRocm93cyBFeGNlcHRpb24geworCQlzZXRGaXh0dXJlKG51bGwpOworCX0KKworCS8qKgorCSAqIFRlc3QgdGhlIHNhbml0eSBvZiB0aGUgZml4dHVyZQorCSAqLworCXB1YmxpYyB2b2lkIHRlc3RTYW5lKCkgeworCQlmaW5hbCBFZGdlRGVjb3JhdG9yIGVkZ2VEZWNvcmF0b3IgPSBnZXRGaXh0dXJlKCk7CisJCWFzc2VydFRydWUoZWRnZURlY29yYXRvci5zYW5lKCkpOworCX0gLy8gdGVzdFNhbmUKKworCit9IC8vIEVkZ2VEZWNvcmF0b3JUZXN0CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9tb2RlbC90ZXN0cy9HcmFwaERlY29yYXRvclRlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL21vZGVsL3Rlc3RzL0dyYXBoRGVjb3JhdG9yVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI4ZjQ1YmUKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9tb2RlbC90ZXN0cy9HcmFwaERlY29yYXRvclRlc3QuamF2YQpAQCAtMCwwICsxLDkwIEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC50ZXN0czsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqdW5pdC50ZXh0dWkuVGVzdFJ1bm5lcjsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5VUkk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLlNURU1VUkk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLkdyYXBoRGVjb3JhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5Nb2RlbEZhY3Rvcnk7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gQSB0ZXN0IGNhc2UgZm9yIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5HcmFwaCBEZWNvcmF0b3I8L2I+PC9lbT4nLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK0BTdXBwcmVzc1dhcm5pbmdzKCJhbGwiKQorcHVibGljIGNsYXNzIEdyYXBoRGVjb3JhdG9yVGVzdCBleHRlbmRzIERlY29yYXRvclRlc3QgeworCQorCXB1YmxpYyBzdGF0aWMgVVJJIERFQ09SQVRPUl9VUkkgPSBTVEVNVVJJLmNyZWF0ZVVSSSgiZGVjb3JhdG9yL2dyYXBoRGVjb3JhdG9yVGVzdC5kZWNvcmF0b3IiKTsKKwkKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgeworCQlUZXN0UnVubmVyLnJ1bihHcmFwaERlY29yYXRvclRlc3QuY2xhc3MpOworCX0KKworCS8qKgorCSAqIENvbnN0cnVjdHMgYSBuZXcgR3JhcGggRGVjb3JhdG9yIHRlc3QgY2FzZSB3aXRoIHRoZSBnaXZlbiBuYW1lLiA8IS0tCisJICogYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgR3JhcGhEZWNvcmF0b3JUZXN0KFN0cmluZyBuYW1lKSB7CisJCXN1cGVyKG5hbWUpOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIGZpeHR1cmUgZm9yIHRoaXMgR3JhcGggRGVjb3JhdG9yIHRlc3QgY2FzZS4gPCEtLQorCSAqIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIEdyYXBoRGVjb3JhdG9yIGdldEZpeHR1cmUoKSB7CisJCXJldHVybiAoR3JhcGhEZWNvcmF0b3IpZml4dHVyZTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZSNzZXRVcCgpCisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgdm9pZCBzZXRVcCgpIHRocm93cyBFeGNlcHRpb24geworCQlHcmFwaERlY29yYXRvciBkID0gTW9kZWxGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVHcmFwaERlY29yYXRvcigpOworCQlkLnNldFVSSShERUNPUkFUT1JfVVJJKTsKKwkJc2V0Rml4dHVyZShkKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZSN0ZWFyRG93bigpCisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIHRlYXJEb3duKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCXNldEZpeHR1cmUobnVsbCk7CisJfQorCisJLyoqCisJICogVGVzdCB0aGUgc2FuaXR5IG9mIHRoZSBmaXh0dXJlCisJICovCisJcHVibGljIHZvaWQgdGVzdFNhbmUoKSB7CisJCWZpbmFsIEdyYXBoRGVjb3JhdG9yIGdyYXBoRGVjb3JhdG9yID0gZ2V0Rml4dHVyZSgpOworCQlhc3NlcnRUcnVlKGdyYXBoRGVjb3JhdG9yLnNhbmUoKSk7CisJfSAvLyB0ZXN0U2FuZQorCit9IC8vIEdyYXBoRGVjb3JhdG9yVGVzdApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvbW9kZWwvdGVzdHMvSW50ZWdyYXRpb25EZWNvcmF0b3JUZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9tb2RlbC90ZXN0cy9JbnRlZ3JhdGlvbkRlY29yYXRvclRlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZGVkN2U2Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvbW9kZWwvdGVzdHMvSW50ZWdyYXRpb25EZWNvcmF0b3JUZXN0LmphdmEKQEAgLTAsMCArMSwxMDYgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLnRlc3RzOw0KKw0KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIA0KKyAqIENvcHlyaWdodCAoYykgMjAxMSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4gDQorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyANCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgDQorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQgDQorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwgDQorICogDQorICogQ29udHJpYnV0b3JzOiANCisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIA0KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KKw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuSW50ZWdyYXRpb25EZWNvcmF0b3I7DQorDQorLyoqDQorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisgKiBBIHRlc3QgY2FzZSBmb3IgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPkludGVncmF0aW9uIERlY29yYXRvcjwvYj48L2VtPicuDQorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorICogPHA+DQorICogVGhlIGZvbGxvd2luZyBvcGVyYXRpb25zIGFyZSB0ZXN0ZWQ6DQorICogPHVsPg0KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuSW50ZWdyYXRpb25EZWNvcmF0b3IjYXBwbHlFeHRlcm5hbERlbHRhcyhvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuU1RFTVRpbWUsIGxvbmcsIG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5FTGlzdCkgPGVtPkFwcGx5IEV4dGVybmFsIERlbHRhczwvZW0+fTwvbGk+DQorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5JbnRlZ3JhdGlvbkRlY29yYXRvciNjYWxjdWxhdGVEZWx0YShvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuU1RFTVRpbWUsIGxvbmcsIG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5FTGlzdCkgPGVtPkNhbGN1bGF0ZSBEZWx0YTwvZW0+fTwvbGk+DQorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5JbnRlZ3JhdGlvbkRlY29yYXRvciNkb01vZGVsU3BlY2lmaWNBZGp1c3RtZW50cyhvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguTGFiZWxWYWx1ZSkgPGVtPkRvIE1vZGVsIFNwZWNpZmljIEFkanVzdG1lbnRzPC9lbT59PC9saT4NCisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLkludGVncmF0aW9uRGVjb3JhdG9yI2lzRGV0ZXJtaW5pc3RpYygpIDxlbT5JcyBEZXRlcm1pbmlzdGljPC9lbT59PC9saT4NCisgKiA8L3VsPg0KKyAqIDwvcD4NCisgKiBAZ2VuZXJhdGVkDQorICovDQorcHVibGljIGFic3RyYWN0IGNsYXNzIEludGVncmF0aW9uRGVjb3JhdG9yVGVzdCBleHRlbmRzIE5vZGVEZWNvcmF0b3JUZXN0IHsNCisNCisJLyoqDQorCSAqIENvbnN0cnVjdHMgYSBuZXcgSW50ZWdyYXRpb24gRGVjb3JhdG9yIHRlc3QgY2FzZSB3aXRoIHRoZSBnaXZlbiBuYW1lLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIEludGVncmF0aW9uRGVjb3JhdG9yVGVzdChTdHJpbmcgbmFtZSkgew0KKwkJc3VwZXIobmFtZSk7DQorCX0NCisNCisJLyoqDQorCSAqIFJldHVybnMgdGhlIGZpeHR1cmUgZm9yIHRoaXMgSW50ZWdyYXRpb24gRGVjb3JhdG9yIHRlc3QgY2FzZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCUBPdmVycmlkZQ0KKwlwcm90ZWN0ZWQgSW50ZWdyYXRpb25EZWNvcmF0b3IgZ2V0Rml4dHVyZSgpIHsNCisJCXJldHVybiAoSW50ZWdyYXRpb25EZWNvcmF0b3IpZml4dHVyZTsNCisJfQ0KKw0KKwkvKioNCisJICogVGVzdHMgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLkludGVncmF0aW9uRGVjb3JhdG9yI2FwcGx5RXh0ZXJuYWxEZWx0YXMob3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLlNURU1UaW1lLCBsb25nLCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuRUxpc3QpIDxlbT5BcHBseSBFeHRlcm5hbCBEZWx0YXM8L2VtPn0nIG9wZXJhdGlvbi4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLkludGVncmF0aW9uRGVjb3JhdG9yI2FwcGx5RXh0ZXJuYWxEZWx0YXMob3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLlNURU1UaW1lLCBsb25nLCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuRUxpc3QpDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyB2b2lkIHRlc3RBcHBseUV4dGVybmFsRGVsdGFzX19TVEVNVGltZV9sb25nX0VMaXN0KCkgew0KKwkJLy8gVE9ETzogaW1wbGVtZW50IHRoaXMgb3BlcmF0aW9uIHRlc3QgbWV0aG9kDQorCQkvLyBFbnN1cmUgdGhhdCB5b3UgcmVtb3ZlIEBnZW5lcmF0ZWQgb3IgbWFyayBpdCBAZ2VuZXJhdGVkIE5PVA0KKwkJZmFpbCgpOw0KKwl9DQorDQorCS8qKg0KKwkgKiBUZXN0cyB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuSW50ZWdyYXRpb25EZWNvcmF0b3IjY2FsY3VsYXRlRGVsdGEob3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLlNURU1UaW1lLCBsb25nLCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuRUxpc3QpIDxlbT5DYWxjdWxhdGUgRGVsdGE8L2VtPn0nIG9wZXJhdGlvbi4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLkludGVncmF0aW9uRGVjb3JhdG9yI2NhbGN1bGF0ZURlbHRhKG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5TVEVNVGltZSwgbG9uZywgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLkVMaXN0KQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgdm9pZCB0ZXN0Q2FsY3VsYXRlRGVsdGFfX1NURU1UaW1lX2xvbmdfRUxpc3QoKSB7DQorCQkvLyBUT0RPOiBpbXBsZW1lbnQgdGhpcyBvcGVyYXRpb24gdGVzdCBtZXRob2QNCisJCS8vIEVuc3VyZSB0aGF0IHlvdSByZW1vdmUgQGdlbmVyYXRlZCBvciBtYXJrIGl0IEBnZW5lcmF0ZWQgTk9UDQorCQlmYWlsKCk7DQorCX0NCisNCisJLyoqDQorCSAqIFRlc3RzIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5JbnRlZ3JhdGlvbkRlY29yYXRvciNkb01vZGVsU3BlY2lmaWNBZGp1c3RtZW50cyhvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguTGFiZWxWYWx1ZSkgPGVtPkRvIE1vZGVsIFNwZWNpZmljIEFkanVzdG1lbnRzPC9lbT59JyBvcGVyYXRpb24uDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5JbnRlZ3JhdGlvbkRlY29yYXRvciNkb01vZGVsU3BlY2lmaWNBZGp1c3RtZW50cyhvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguTGFiZWxWYWx1ZSkNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIHZvaWQgdGVzdERvTW9kZWxTcGVjaWZpY0FkanVzdG1lbnRzX19MYWJlbFZhbHVlKCkgew0KKwkJLy8gVE9ETzogaW1wbGVtZW50IHRoaXMgb3BlcmF0aW9uIHRlc3QgbWV0aG9kDQorCQkvLyBFbnN1cmUgdGhhdCB5b3UgcmVtb3ZlIEBnZW5lcmF0ZWQgb3IgbWFyayBpdCBAZ2VuZXJhdGVkIE5PVA0KKwkJZmFpbCgpOw0KKwl9DQorDQorCS8qKg0KKwkgKiBUZXN0cyB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuSW50ZWdyYXRpb25EZWNvcmF0b3IjaXNEZXRlcm1pbmlzdGljKCkgPGVtPklzIERldGVybWluaXN0aWM8L2VtPn0nIG9wZXJhdGlvbi4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLkludGVncmF0aW9uRGVjb3JhdG9yI2lzRGV0ZXJtaW5pc3RpYygpDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyB2b2lkIHRlc3RJc0RldGVybWluaXN0aWMoKSB7DQorCQkvLyBUT0RPOiBpbXBsZW1lbnQgdGhpcyBvcGVyYXRpb24gdGVzdCBtZXRob2QNCisJCS8vIEVuc3VyZSB0aGF0IHlvdSByZW1vdmUgQGdlbmVyYXRlZCBvciBtYXJrIGl0IEBnZW5lcmF0ZWQgTk9UDQorCQlmYWlsKCk7DQorCX0NCisNCit9IC8vSW50ZWdyYXRpb25EZWNvcmF0b3JUZXN0DQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvbW9kZWwvdGVzdHMvTW9kZWxBbGxUZXN0cy5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvbW9kZWwvdGVzdHMvTW9kZWxBbGxUZXN0cy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZlMTI0MTgKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9tb2RlbC90ZXN0cy9Nb2RlbEFsbFRlc3RzLmphdmEKQEAgLTAsMCArMSw1NCBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwudGVzdHM7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3Q7CitpbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RTdWl0ZTsKK2ltcG9ydCBqdW5pdC50ZXh0dWkuVGVzdFJ1bm5lcjsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogQSB0ZXN0IHN1aXRlIGZvciB0aGUgJzxlbT48Yj5Nb2RlbDwvYj48L2VtPicgbW9kZWwuCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIE1vZGVsQWxsVGVzdHMgZXh0ZW5kcyBUZXN0U3VpdGUgeworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKKwkJVGVzdFJ1bm5lci5ydW4oc3VpdGUoKSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHN0YXRpYyBUZXN0IHN1aXRlKCkgeworCQlUZXN0U3VpdGUgc3VpdGUgPSBuZXcgTW9kZWxBbGxUZXN0cygiTW9kZWwgVGVzdHMiKTsKKwkJc3VpdGUuYWRkVGVzdChNb2RlbFRlc3RzLnN1aXRlKCkpOworCQlyZXR1cm4gc3VpdGU7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIE1vZGVsQWxsVGVzdHMoU3RyaW5nIG5hbWUpIHsKKwkJc3VwZXIobmFtZSk7CisJfQorCit9IC8vTW9kZWxBbGxUZXN0cwpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvbW9kZWwvdGVzdHMvTW9kZWxUZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9tb2RlbC90ZXN0cy9Nb2RlbFRlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNjU1YWJhCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvbW9kZWwvdGVzdHMvTW9kZWxUZXN0LmphdmEKQEAgLTAsMCArMSwxMDQzIEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC50ZXN0czsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNiwgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqYXZhLnV0aWwuQ2FsZW5kYXI7CitpbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOworCitpbXBvcnQganVuaXQudGV4dHVpLlRlc3RSdW5uZXI7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuRUxpc3Q7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlVSSTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuQ29uc3RhbnRzOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5TVEVNVVJJOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uRHVibGluQ29yZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLmltcGwuSWRlbnRpZmlhYmxlRmlsdGVySW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLnRlc3RzLklkZW50aWZpYWJsZVRlc3Q7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkVkZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkdyYXBoOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5HcmFwaEZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkxhYmVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5Ob2RlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5Ob2RlTGFiZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLkRlY29yYXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuRWRnZURlY29yYXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuR3JhcGhEZWNvcmF0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLk1vZGVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5Nb2RlbEZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLk5vZGVEZWNvcmF0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLlNURU1UaW1lOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC5UZXN0VXRpbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwuZGVjb3JhdG9ycy5EZWNvcmF0b3JzRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwuZGVjb3JhdG9ycy5UZXN0RWRnZURlY29yYXRvcjE7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gQSB0ZXN0IGNhc2UgZm9yIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5Nb2RlbDwvYj48L2VtPicuCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIDxwPgorICogVGhlIGZvbGxvd2luZyBvcGVyYXRpb25zIGFyZSB0ZXN0ZWQ6CisgKiA8dWw+CisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLk1vZGVsI2dldENhbm9uaWNhbEdyYXBoKG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5VUkksIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uSWRlbnRpZmlhYmxlRmlsdGVyLCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuU1RFTVRpbWUpIDxlbT5HZXQgQ2Fub25pY2FsIEdyYXBoPC9lbT59PC9saT4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuTW9kZWwjcHJlcGFyZShvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuU1RFTVRpbWUpIDxlbT5QcmVwYXJlPC9lbT59PC9saT4KKyAqIDwvdWw+CisgKiA8L3A+CisgKiBAZ2VuZXJhdGVkCisgKi8KK0BTdXBwcmVzc1dhcm5pbmdzKCJhbGwiKQorcHVibGljIGNsYXNzIE1vZGVsVGVzdCBleHRlbmRzIElkZW50aWZpYWJsZVRlc3QgeworCisJQFN1cHByZXNzV2FybmluZ3MoInVudXNlZCIpCisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgVVJJIFNFUklBTFpBVElPTl9URVNUX1VSSSA9IFVSSQorCQkJLmNyZWF0ZVVSSSgidGVtcC90ZXN0bW9kZWwxLm1vZGVsIik7CisKKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgTU9ERUwgPSAibW9kZWwiOworCisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEdSQVBIID0gImdyYXBoIjsKKworCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBMQUJFTCA9ICJsYWJlbCI7CisKKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgTk9ERSA9ICJub2RlIjsKKworCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBOT0RFX0RFQ09SQVRPUiA9ICJub2RlZGVjb3JhdG9yIjsKKworCS8vIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBFREdFX0RFQ09SQVRPUiA9ICJlZGdlZGVjb3JhdG9yIjsKKworCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBFREdFID0gImVkZ2UiOworCisJLy8gTW9kZWwgVVJJJ3MKKwlwdWJsaWMgc3RhdGljIGZpbmFsIFVSSSBNMF9VUkkgPSBTVEVNVVJJLmNyZWF0ZVVSSShNT0RFTCArICIvIiArICJtMCIpOworCisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgVVJJIE0xX1VSSSA9IFNURU1VUkkuY3JlYXRlVVJJKE1PREVMICsgIi8iICsgIm0xIik7CisKKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBVUkkgTTJfVVJJID0gU1RFTVVSSS5jcmVhdGVVUkkoTU9ERUwgKyAiLyIgKyAibTIiKTsKKworCXByaXZhdGUgc3RhdGljIGZpbmFsIFVSSSBNM19VUkkgPSBTVEVNVVJJLmNyZWF0ZVVSSShNT0RFTCArICIvIiArICJtMyIpOworCisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgVVJJIFVOUkVTT0xWRURfTU9ERUxfVVJJID0gU1RFTVVSSS5jcmVhdGVVUkkoTU9ERUwKKwkJCSsgIi8iICsgInVucmVzb2x2ZWQiKTsKKworCS8vIEdyYXBoIFVSSSdzCisKKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBVUkkgQ0FOT05JQ0FMX0dSQVBIMV9VUkkgPSBTVEVNVVJJLmNyZWF0ZVVSSShHUkFQSAorCQkJKyAiLyIgKyAiY2Fub25pY2FsR3JhcGgxIik7CisKKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBVUkkgQ0FOT05JQ0FMX0dSQVBIMl9VUkkgPSBTVEVNVVJJLmNyZWF0ZVVSSShHUkFQSAorCQkJKyAiLyIgKyAiY2Fub25pY2FsR3JhcGgyIik7CisKKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBVUkkgRzBfVVJJID0gU1RFTVVSSS5jcmVhdGVVUkkoR1JBUEggKyAiLyIgKyAiZzAiKTsKKworCXByaXZhdGUgc3RhdGljIGZpbmFsIFVSSSBHMV9VUkkgPSBTVEVNVVJJLmNyZWF0ZVVSSShHUkFQSCArICIvIiArICJnMSIpOworCisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgVVJJIEcyX1VSSSA9IFNURU1VUkkuY3JlYXRlVVJJKEdSQVBIICsgIi8iICsgImcyIik7CisKKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBVUkkgRzNfVVJJID0gU1RFTVVSSS5jcmVhdGVVUkkoR1JBUEggKyAiLyIgKyAiZzMiKTsKKworCXByaXZhdGUgc3RhdGljIGZpbmFsIFVSSSBHNF9VUkkgPSBTVEVNVVJJLmNyZWF0ZVVSSShHUkFQSCArICIvIiArICJnNCIpOworCisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgVVJJIEc1X1VSSSA9IFNURU1VUkkuY3JlYXRlVVJJKEdSQVBIICsgIi8iICsgImc1Iik7CisKKwkvLyBwcml2YXRlIHN0YXRpYyBmaW5hbCBVUkkgR1JBUEhfUkVUVVJOX1VSSSA9IFNURU1VUkkuY3JlYXRlVVJJKEdSQVBIICsgIi8iCisJLy8gKyAiZ3JhcGhfcmV0dXJuIik7CisKKwkvLyBHcmFwaCBMYWJlbCBVUkkncworCXByaXZhdGUgc3RhdGljIGZpbmFsIFVSSSBHX0wwX1VSSSA9IFNURU1VUkkuY3JlYXRlVVJJKExBQkVMICsgIi8iICsgImdsMCIpOworCisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgVVJJIEdfTDFfVVJJID0gU1RFTVVSSS5jcmVhdGVVUkkoTEFCRUwgKyAiLyIgKyAiZ2wxIik7CisKKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBVUkkgR19MMl9VUkkgPSBTVEVNVVJJLmNyZWF0ZVVSSShMQUJFTCArICIvIiArICJnbDIiKTsKKworCXByaXZhdGUgc3RhdGljIGZpbmFsIFVSSSBHX0wzX1VSSSA9IFNURU1VUkkuY3JlYXRlVVJJKExBQkVMICsgIi8iICsgImdsMyIpOworCisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgVVJJIEdfTDRfVVJJID0gU1RFTVVSSS5jcmVhdGVVUkkoTEFCRUwgKyAiLyIgKyAiZ2w0Iik7CisKKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBVUkkgR19MNV9VUkkgPSBTVEVNVVJJLmNyZWF0ZVVSSShMQUJFTCArICIvIiArICJnbDUiKTsKKworCS8vIFN0YXRpYyBOb2RlIExhYmVsIFVSSSdzCisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgVVJJIE5MMEEwX1VSSSA9IFNURU1VUkkuY3JlYXRlVVJJKExBQkVMICsgIi8iCisJCQkrICJubDBhMCIpOworCisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgVVJJIE5MMEExX1VSSSA9IFNURU1VUkkuY3JlYXRlVVJJKExBQkVMICsgIi8iCisJCQkrICJubDBhMSIpOworCisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgVVJJIE5MM0ExX1VSSSA9IFNURU1VUkkuY3JlYXRlVVJJKExBQkVMICsgIi8iCisJCQkrICJubDNhMSIpOworCisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgVVJJIE5MM0IxX1VSSSA9IFNURU1VUkkuY3JlYXRlVVJJKExBQkVMICsgIi8iCisJCQkrICJubDNiMSIpOworCisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgVVJJIE5MNEExX1VSSSA9IFNURU1VUkkuY3JlYXRlVVJJKExBQkVMICsgIi8iCisJCQkrICJubDRhMSIpOworCisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgVVJJIE5MNEIxX1VSSSA9IFNURU1VUkkuY3JlYXRlVVJJKExBQkVMICsgIi8iCisJCQkrICJubDRiMSIpOworCisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgVVJJIE5MNEMxX1VSSSA9IFNURU1VUkkuY3JlYXRlVVJJKExBQkVMICsgIi8iCisJCQkrICJubDRjMSIpOworCisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgVVJJIE5MNUExX1VSSSA9IFNURU1VUkkuY3JlYXRlVVJJKExBQkVMICsgIi8iCisJCQkrICJubDVhMSIpOworCisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgVVJJIE5MNUIxX1VSSSA9IFNURU1VUkkuY3JlYXRlVVJJKExBQkVMICsgIi8iCisJCQkrICJubDViMSIpOworCisJLy8gTm9kZSBVUkkncworCXByaXZhdGUgc3RhdGljIGZpbmFsIFVSSSBOMEFfVVJJID0gU1RFTVVSSS5jcmVhdGVVUkkoTk9ERSArICIvIiArICJuMGEiKTsKKworCXByaXZhdGUgc3RhdGljIGZpbmFsIFVSSSBONUFfVVJJID0gU1RFTVVSSS5jcmVhdGVVUkkoTk9ERSArICIvIiArICJuNWEiKTsKKworCXByaXZhdGUgc3RhdGljIGZpbmFsIFVSSSBONUJfVVJJID0gU1RFTVVSSS5jcmVhdGVVUkkoTk9ERSArICIvIiArICJuNWIiKTsKKworCXByaXZhdGUgc3RhdGljIGZpbmFsIFVSSSBOM0FfVVJJID0gU1RFTVVSSS5jcmVhdGVVUkkoTk9ERSArICIvIiArICJuM2EiKTsKKworCXByaXZhdGUgc3RhdGljIGZpbmFsIFVSSSBOM0JfVVJJID0gU1RFTVVSSS5jcmVhdGVVUkkoTk9ERSArICIvIiArICJuM2IiKTsKKworCXB1YmxpYyBzdGF0aWMgZmluYWwgVVJJIE40QV9VUkkgPSBTVEVNVVJJLmNyZWF0ZVVSSShOT0RFICsgIi8iICsgIm40YSIpOworCisJcHVibGljIHN0YXRpYyBmaW5hbCBVUkkgTjRCX1VSSSA9IFNURU1VUkkuY3JlYXRlVVJJKE5PREUgKyAiLyIgKyAibjRiIik7CisKKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBVUkkgTjRDX1VSSSA9IFNURU1VUkkuY3JlYXRlVVJJKE5PREUgKyAiLyIgKyAibjRjIik7CisKKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBVUkkgTjREX1VSSSA9IFNURU1VUkkuY3JlYXRlVVJJKE5PREUgKyAiLyIgKyAibjRkIik7CisKKwkvLyBEZWNvcmF0b3IgVVJJJ3MKKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBVUkkgTkRFQ18wQV9VUkkgPSBTVEVNVVJJLmNyZWF0ZVVSSShOT0RFX0RFQ09SQVRPUgorCQkJKyAiLyIgKyAibmRlY18wYSIpOworCisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgVVJJIE5ERUNfMkFfVVJJID0gU1RFTVVSSS5jcmVhdGVVUkkoTk9ERV9ERUNPUkFUT1IKKwkJCSsgIi8iICsgIm5kZWNfMmEiKTsKKworCXByaXZhdGUgc3RhdGljIGZpbmFsIFVSSSBFREVDXzFBX1VSSSA9IFNURU1VUkkuY3JlYXRlVVJJKE5PREVfREVDT1JBVE9SCisJCQkrICIvIiArICJlZGVjXzFhIik7CisKKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBVUkkgRURFQ18zQV9VUkkgPSBTVEVNVVJJLmNyZWF0ZVVSSShOT0RFX0RFQ09SQVRPUgorCQkJKyAiLyIgKyAiZWRlY18zYSIpOworCisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgVVJJIEdERUNfMkFfVVJJID0gU1RFTVVSSS5jcmVhdGVVUkkoTk9ERV9ERUNPUkFUT1IKKwkJCSsgIi8iICsgImdkZWNfMmEiKTsKKworCS8vIEVkZ2UgVVJJJ1MKKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBVUkkgRTFBX1VSSSA9IFNURU1VUkkuY3JlYXRlVVJJKEVER0UgKyAiLyIgKyAiZTFhIik7CisKKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBVUkkgRTFCX1VSSSA9IFNURU1VUkkuY3JlYXRlVVJJKEVER0UgKyAiLyIgKyAiZTFiIik7CisKKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBVUkkgRTJBX1VSSSA9IFNURU1VUkkuY3JlYXRlVVJJKEVER0UgKyAiLyIgKyAiZTJhIik7CisKKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBVUkkgRTNBX1VSSSA9IFNURU1VUkkuY3JlYXRlVVJJKEVER0UgKyAiLyIgKyAiZTNhIik7CisKKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBVUkkgRTRBX1VSSSA9IFNURU1VUkkuY3JlYXRlVVJJKEVER0UgKyAiLyIgKyAiZTRhIik7CisKKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBVUkkgRTRCX1VSSSA9IFNURU1VUkkuY3JlYXRlVVJJKEVER0UgKyAiLyIgKyAiZTRiIik7CisKKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBVUkkgRTVBX1VSSSA9IFNURU1VUkkuY3JlYXRlVVJJKEVER0UgKyAiLyIgKyAiZTVhIik7CisKKwkvLyBEeW5hbWljIEVkZ2VzCisJcHVibGljIHN0YXRpYyBmaW5hbCBVUkkgREU0X1VSSSA9IFNURU1VUkkuY3JlYXRlVHlwZVVSSShFREdFICsgIi8iICsgImRlNCIpOworCQorCS8vIEZPUiBGaWx0ZXIgdGVzdGluZworCXB1YmxpYyBzdGF0aWMgZmluYWwgVVJJIE0wXzFfVVJJID0gU1RFTVVSSS5jcmVhdGVVUkkoTU9ERUwgKyAiLyIgKyAibTBfMSIpOworCXB1YmxpYyBzdGF0aWMgZmluYWwgVVJJIE0wXzJfVVJJID0gU1RFTVVSSS5jcmVhdGVVUkkoTU9ERUwgKyAiLyIgKyAibTBfMiIpOworCXByaXZhdGUgc3RhdGljIGZpbmFsIFVSSSBHMF8xX1VSSSA9IFNURU1VUkkuY3JlYXRlVVJJKEdSQVBIICsgIi8iICsgImcwXzEiKTsKKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBVUkkgRzBfMl9VUkkgPSBTVEVNVVJJLmNyZWF0ZVVSSShHUkFQSCArICIvIiArICJnMF8yIik7CisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgVVJJIE4wXzFfVVJJID0gU1RFTVVSSS5jcmVhdGVVUkkoTk9ERSArICIvIiArICJuMF8xIik7CisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgVVJJIE4wXzJfVVJJID0gU1RFTVVSSS5jcmVhdGVVUkkoTk9ERSArICIvIiArICJuMF8yIik7CisJCisKKwkvKioKKwkgKiBUaGlzIGZpeHR1cmUgaXMgb2YgYSBtb2RlbCB3aXRoIHVucmVzb2x2ZWQgcmVmZXJlbmNlcy4KKwkgKiAKKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCXByb3RlY3RlZCBNb2RlbCB1bnJlc29sdmVkRml4dHVyZSA9IG51bGw7CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgeworCQlUZXN0UnVubmVyLnJ1bihNb2RlbFRlc3QuY2xhc3MpOworCX0KKworCS8qKgorCSAqIENvbnN0cnVjdHMgYSBuZXcgTW9kZWwgdGVzdCBjYXNlIHdpdGggdGhlIGdpdmVuIG5hbWUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYworCSAqIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIE1vZGVsVGVzdChTdHJpbmcgbmFtZSkgeworCQlzdXBlcihuYW1lKTsKKwl9CisKKwkvKioKKwkgKiBAcmV0dXJuIHRoZSB1bnJlc29sdmVkRml4dHVyZQorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJcHJvdGVjdGVkIGZpbmFsIE1vZGVsIGdldFVucmVzb2x2ZWRGaXh0dXJlKCkgeworCQlyZXR1cm4gdW5yZXNvbHZlZEZpeHR1cmU7CisJfSAvLyBnZXRVbnJlc29sdmVkRml4dHVyZQorCisJLyoqCisJICogQHBhcmFtIHVucmVzb2x2ZWRGaXh0dXJlCisJICogICAgICAgICAgICB0aGUgdW5yZXNvbHZlZEZpeHR1cmUgdG8gc2V0CisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlwcm90ZWN0ZWQgZmluYWwgdm9pZCBzZXRVbnJlc29sdmVkRml4dHVyZShmaW5hbCBNb2RlbCB1bnJlc29sdmVkRml4dHVyZSkgeworCQl0aGlzLnVucmVzb2x2ZWRGaXh0dXJlID0gdW5yZXNvbHZlZEZpeHR1cmU7CisJfSAvLyBzZXRVbnJlc29sdmVkRml4dHVyZQorCisJLyoqCisJICogUmV0dXJucyB0aGUgZml4dHVyZSBmb3IgdGhpcyBNb2RlbCB0ZXN0IGNhc2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIE1vZGVsIGdldEZpeHR1cmUoKSB7CisJCXJldHVybiAoTW9kZWwpZml4dHVyZTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIAorCSAqIDxwcmU+CisJICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTTAKKwkgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArLU5ERUNfMEEKKwkgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArLUcwCisJICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgKy1HTDBhCisJICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgKy1OMGEKKwkgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisJICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKy1HMQorCSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICstR0wxYQorCSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICstRTFhCisJICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgKy1FMWIKKwkgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisJICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKy1NMQorCSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICstRURFQ18xQQorCSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICstRzIKKwkgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICB8ICAKKwkgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICB8ICArLUdMMmEKKwkgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICB8ICArLUUyYQorCSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIHwKKwkgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICArLU0yCisJICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgKy1HREVDXzJBCisJICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgKy1OREVDXzJBCisJICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgKy1HNQorCSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICstR0w1YQorCSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICstRTVhCisJICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgKy1ONWEKKwkgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICArLU41YgorCSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKwkgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArLU0zCisJICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKy1FREVDXzNBCisJICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKy1HMworCSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICstR0wzYQorCSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICstRTNhCisJICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgKy1OM2EKKwkgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICArLU4zYgorCSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKwkgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArLUc0CisJICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArLUdMNGEKKwkgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICstR0w0YgorCSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKy1FNGEKKwkgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICstRTRiCisJICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArLU40YQorCSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKy1ONGIKKwkgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICstTjRjCisJICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArLU40ZAorCSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKwkgKiA8L3ByZT4KKwkgKiAKKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAc2VlIGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZSNzZXRVcCgpCisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgdm9pZCBzZXRVcCgpIHRocm93cyBFeGNlcHRpb24geworCQlzZXRGaXh0dXJlKGNyZWF0ZUZpeHR1cmUoKSk7CisJCXNldFVucmVzb2x2ZWRGaXh0dXJlKGNyZWF0ZVVucmVzb2x2ZWRGaXh0dXJlKFVOUkVTT0xWRURfTU9ERUxfVVJJKSk7CisJfSAvLyBzZXRVcAorCisJLyoqCisJICogQ3JlYXRlIGEgTW9kZWwgZm9yIHRlc3RpbmcKKwkgKi8KKwlwdWJsaWMgc3RhdGljIE1vZGVsIGNyZWF0ZUZpeHR1cmUoKSB7CisJCS8vICoqKiBNb2RlbCBNMCAqKioKKwkJZmluYWwgTW9kZWwgbTAgPSBjcmVhdGVNb2RlbChNMF9VUkkpOworCQltMC5nZXREdWJsaW5Db3JlKCkuc2V0VGl0bGUoIm0wIik7CisJCWZpbmFsIE5vZGVEZWNvcmF0b3Igbm9kZURlYzBhID0gY3JlYXRlTm9kZURlY29yYXRvcihOREVDXzBBX1VSSSk7CisKKwkJLy8gR3JhcGggRzAKKwkJZmluYWwgR3JhcGggZzAgPSBjcmVhdGVHcmFwaChHMF9VUkkpOworCQlnMC5nZXREdWJsaW5Db3JlKCkuc2V0VGl0bGUoImcwIik7CisJCWZpbmFsIE5vZGUgbjBhID0gVGVzdFV0aWwuY3JlYXRlU3RhdGljYWxseUxhYmVsZWROb2RlKE4wQV9VUkkpOworCQlmaW5hbCBMYWJlbCBnbDAgPSBUZXN0VXRpbC5jcmVhdGVTdGF0aWNMYWJlbChHX0wwX1VSSSwgZzAuZ2V0VVJJKCkpOworCQlmaW5hbCBOb2RlTGFiZWwgbmwwYTAgPSBUZXN0VXRpbC5jcmVhdGVTdGF0aWNOb2RlTGFiZWwoTkwwQTBfVVJJLCBuMGEKKwkJCQkuZ2V0VVJJKCkpOworCQlmaW5hbCBOb2RlTGFiZWwgbmwwYTEgPSBUZXN0VXRpbC5jcmVhdGVTdGF0aWNOb2RlTGFiZWwoTkwwQTFfVVJJLCBuMGEKKwkJCQkuZ2V0VVJJKCkpOworCQlmaW5hbCBOb2RlTGFiZWwgbmwzYTEgPSBUZXN0VXRpbC5jcmVhdGVTdGF0aWNOb2RlTGFiZWwoTkwzQTFfVVJJLAorCQkJCU4zQV9VUkkpOworCQlmaW5hbCBOb2RlTGFiZWwgbmwzYjEgPSBUZXN0VXRpbC5jcmVhdGVTdGF0aWNOb2RlTGFiZWwoTkwzQjFfVVJJLAorCQkJCU4zQl9VUkkpOworCQlmaW5hbCBOb2RlTGFiZWwgbmw1YTEgPSBUZXN0VXRpbC5jcmVhdGVTdGF0aWNOb2RlTGFiZWwoTkw1QTFfVVJJLAorCQkJCU41QV9VUkkpOworCQlmaW5hbCBOb2RlTGFiZWwgbmw1YjEgPSBUZXN0VXRpbC5jcmVhdGVTdGF0aWNOb2RlTGFiZWwoTkw1QjFfVVJJLAorCQkJCU41Ql9VUkkpOworCisJCS8vIEdyYXBoIEcwCisJCWcwLnB1dEdyYXBoTGFiZWwoZ2wwKTsKKwkJZzAucHV0Tm9kZShuMGEpOworLy8JCWcwLnB1dE5vZGVMYWJlbCgoTm9kZUxhYmVsKSBuMGEuZ2V0TGFiZWxzKCkuZ2V0KDApKTsKKwkJZzAucHV0Tm9kZUxhYmVsKG5sMGEwKTsKKwkJZzAucHV0Tm9kZUxhYmVsKG5sMGExKTsKKwkJZzAucHV0Tm9kZUxhYmVsKG5sM2ExKTsKKwkJZzAucHV0Tm9kZUxhYmVsKG5sM2IxKTsKKwkJZzAucHV0Tm9kZUxhYmVsKG5sNWExKTsKKwkJZzAucHV0Tm9kZUxhYmVsKG5sNWIxKTsKKworCQkvLyBHcmFwaCBHMQorCQlmaW5hbCBHcmFwaCBnMSA9IGNyZWF0ZUdyYXBoKEcxX1VSSSk7CisJCWcxLmdldER1YmxpbkNvcmUoKS5zZXRUaXRsZSgiZzEiKTsKKwkJZmluYWwgTGFiZWwgZ2wxID0gVGVzdFV0aWwuY3JlYXRlU3RhdGljTGFiZWwoR19MMV9VUkksIGcxLmdldFVSSSgpKTsKKwkJZmluYWwgRWRnZSBlMWEgPSBUZXN0VXRpbC5jcmVhdGVTdGF0aWNhbGx5TGFiZWxlZEVkZ2UoRTFBX1VSSSwgTjVBX1VSSSwKKwkJCQlONEFfVVJJLCBmYWxzZSk7CisJCWZpbmFsIEVkZ2UgZTFiID0gVGVzdFV0aWwuY3JlYXRlU3RhdGljYWxseUxhYmVsZWRFZGdlKEUxQl9VUkksIE41Ql9VUkksCisJCQkJTjRCX1VSSSwgZmFsc2UpOworCisJCS8vIEdyYXBoIEcxCisJCWcxLnB1dEdyYXBoTGFiZWwoZ2wxKTsKKwkJZzEucHV0RWRnZShlMWEpOworCQlnMS5wdXRFZGdlKGUxYik7CisKKwkJLy8gKioqIE1vZGVsIE0xICoqKgorCQlmaW5hbCBNb2RlbCBtMSA9IGNyZWF0ZU1vZGVsKE0xX1VSSSk7CisJCW0xLmdldER1YmxpbkNvcmUoKS5zZXRUaXRsZSgibTEiKTsKKwkJZmluYWwgRWRnZURlY29yYXRvciBlZGVjMWEgPSBjcmVhdGVFZGdlRGVjb3JhdG9yKEVERUNfMUFfVVJJLCAiZWRlYzFhIiwKKwkJCQlONUFfVVJJLCBONUJfVVJJLCAwKTsKKworCQkvLyBHcmFwaCBHMgorCQlmaW5hbCBHcmFwaCBnMiA9IGNyZWF0ZUdyYXBoKEcyX1VSSSk7CisJCWcwLmdldER1YmxpbkNvcmUoKS5zZXRUaXRsZSgiZzIiKTsKKwkJZmluYWwgTGFiZWwgZ2wyID0gVGVzdFV0aWwuY3JlYXRlU3RhdGljTGFiZWwoR19MMl9VUkksIGcyLmdldFVSSSgpKTsKKwkJZmluYWwgRWRnZSBlMmEgPSBUZXN0VXRpbC5jcmVhdGVTdGF0aWNhbGx5TGFiZWxlZEVkZ2UoRTJBX1VSSSwgTjVBX1VSSSwKKwkJCQlONUJfVVJJLCB0cnVlKTsKKworCQkvLyBHcmFwaCBHMgorCQlnMi5wdXRHcmFwaExhYmVsKGdsMik7CisJCWcyLnB1dEVkZ2UoZTJhKTsKKworCQkvLyAqKiogTW9kZWwgTTIgKioqCisJCWZpbmFsIE1vZGVsIG0yID0gY3JlYXRlTW9kZWwoTTJfVVJJKTsKKwkJbTEuZ2V0RHVibGluQ29yZSgpLnNldFRpdGxlKCJtMiIpOworCQlmaW5hbCBHcmFwaERlY29yYXRvciBnZGVjMmEgPSBjcmVhdGVHcmFwaERlY29yYXRvcihHREVDXzJBX1VSSSk7CisJCWZpbmFsIE5vZGVEZWNvcmF0b3Igbm9kZURlYzJhID0gY3JlYXRlTm9kZURlY29yYXRvcihOREVDXzJBX1VSSSk7CisKKwkJLy8gR3JhcGggRzUKKwkJZmluYWwgR3JhcGggZzUgPSBjcmVhdGVHcmFwaChHNV9VUkkpOworCQlnMC5nZXREdWJsaW5Db3JlKCkuc2V0VGl0bGUoImc1Iik7CisJCWZpbmFsIExhYmVsIGdsNSA9IFRlc3RVdGlsLmNyZWF0ZVN0YXRpY0xhYmVsKEdfTDVfVVJJLCBnNS5nZXRVUkkoKSk7CisJCWZpbmFsIE5vZGUgbjVhID0gVGVzdFV0aWwuY3JlYXRlU3RhdGljYWxseUxhYmVsZWROb2RlKE41QV9VUkkpOworCQlmaW5hbCBOb2RlIG41YiA9IFRlc3RVdGlsLmNyZWF0ZVN0YXRpY2FsbHlMYWJlbGVkTm9kZShONUJfVVJJKTsKKwkJZmluYWwgRWRnZSBlNWEgPSBUZXN0VXRpbC5jcmVhdGVTdGF0aWNhbGx5TGFiZWxlZEVkZ2UoRTVBX1VSSSwgTjVBX1VSSSwKKwkJCQlONUJfVVJJLCBmYWxzZSk7CisKKwkJLy8gR3JhcGggRzUKKwkJZzUucHV0R3JhcGhMYWJlbChnbDUpOworCQlnNS5wdXROb2RlKG41YSk7CisJCWc1LnB1dE5vZGUobjViKTsKKy8vCQlnNS5wdXROb2RlTGFiZWwoKE5vZGVMYWJlbCkgbjVhLmdldExhYmVscygpLmdldCgwKSk7CisvLwkJZzUucHV0Tm9kZUxhYmVsKChOb2RlTGFiZWwpIG41Yi5nZXRMYWJlbHMoKS5nZXQoMCkpOworCQlnNS5wdXRFZGdlKGU1YSk7CisKKwkJLy8gKioqIE1vZGVsIE0zICoqKgorCQlmaW5hbCBNb2RlbCBtMyA9IGNyZWF0ZU1vZGVsKE0zX1VSSSk7CisJCW0xLmdldER1YmxpbkNvcmUoKS5zZXRUaXRsZSgibTMiKTsKKwkJZmluYWwgRWRnZURlY29yYXRvciBlZGVjM2EgPSBjcmVhdGVFZGdlRGVjb3JhdG9yKEVERUNfM0FfVVJJLCAiZWRlYzNhIiwKKwkJCQlONEFfVVJJLCBONEJfVVJJLCAwKTsKKworCQkvLyBHcmFwaCBHMworCQlmaW5hbCBHcmFwaCBnMyA9IGNyZWF0ZUdyYXBoKEczX1VSSSk7CisJCWcwLmdldER1YmxpbkNvcmUoKS5zZXRUaXRsZSgiZzMiKTsKKwkJZmluYWwgTGFiZWwgZ2wzID0gVGVzdFV0aWwuY3JlYXRlU3RhdGljTGFiZWwoR19MM19VUkksIGczLmdldFVSSSgpKTsKKwkJZmluYWwgTm9kZSBuM2EgPSBUZXN0VXRpbC5jcmVhdGVTdGF0aWNhbGx5TGFiZWxlZE5vZGUoTjNBX1VSSSk7CisJCWZpbmFsIE5vZGUgbjNiID0gVGVzdFV0aWwuY3JlYXRlU3RhdGljYWxseUxhYmVsZWROb2RlKE4zQl9VUkkpOworCQlmaW5hbCBFZGdlIGUzYSA9IFRlc3RVdGlsLmNyZWF0ZVN0YXRpY2FsbHlMYWJlbGVkRWRnZShFM0FfVVJJLCBOM0FfVVJJLAorCQkJCU4zQl9VUkksIGZhbHNlKTsKKworCQkvLyBHcmFwaCBHMworCQlnMy5wdXRHcmFwaExhYmVsKGdsMyk7CisJCWczLnB1dE5vZGUobjNhKTsKKwkJZzMucHV0Tm9kZShuM2IpOworLy8JCWczLnB1dE5vZGVMYWJlbCgoTm9kZUxhYmVsKSBuM2EuZ2V0TGFiZWxzKCkuZ2V0KDApKTsKKy8vCQlnMy5wdXROb2RlTGFiZWwoKE5vZGVMYWJlbCkgbjNiLmdldExhYmVscygpLmdldCgwKSk7CisJCWczLnB1dEVkZ2UoZTNhKTsKKworCQkvLyBHcmFwaCBHNAorCQlmaW5hbCBHcmFwaCBnNCA9IGNyZWF0ZUdyYXBoKEc0X1VSSSk7CisJCWcwLmdldER1YmxpbkNvcmUoKS5zZXRUaXRsZSgiZzQiKTsKKwkJLy8gd2UgZGVsaWJlcmF0ZWx5IGRvbid0IGxhYmVsIG40ZAorCQlmaW5hbCBOb2RlIG40YSA9IFRlc3RVdGlsLmNyZWF0ZVN0YXRpY2FsbHlMYWJlbGVkTm9kZShONEFfVVJJKTsKKwkJZmluYWwgTm9kZSBuNGIgPSBUZXN0VXRpbC5jcmVhdGVTdGF0aWNhbGx5TGFiZWxlZE5vZGUoTjRCX1VSSSk7CisJCWZpbmFsIE5vZGUgbjRjID0gVGVzdFV0aWwuY3JlYXRlU3RhdGljYWxseUxhYmVsZWROb2RlKE40Q19VUkkpOworCQlmaW5hbCBOb2RlIG40ZCA9IFRlc3RVdGlsLmNyZWF0ZVN0YXRpY2FsbHlMYWJlbGVkTm9kZShONERfVVJJKTsKKwkJZmluYWwgRWRnZSBlNGEgPSBUZXN0VXRpbC5jcmVhdGVTdGF0aWNhbGx5TGFiZWxlZEVkZ2UoRTRBX1VSSSwgTjRBX1VSSSwKKwkJCQlONEJfVVJJLCBmYWxzZSk7CisJCWZpbmFsIEVkZ2UgZTRiID0gVGVzdFV0aWwuY3JlYXRlU3RhdGljYWxseUxhYmVsZWRFZGdlKEU0Ql9VUkksIE40QV9VUkksCisJCQkJTjRDX1VSSSwgZmFsc2UpOworCQlmaW5hbCBMYWJlbCBnbDQgPSBUZXN0VXRpbC5jcmVhdGVTdGF0aWNMYWJlbChHX0w0X1VSSSwgZzQuZ2V0VVJJKCkpOworCQlmaW5hbCBOb2RlTGFiZWwgbmw0YTEgPSBUZXN0VXRpbC5jcmVhdGVTdGF0aWNOb2RlTGFiZWwoTkw0QTFfVVJJLCBuNGEKKwkJCQkuZ2V0VVJJKCkpOworCQlmaW5hbCBOb2RlTGFiZWwgbmw0YjEgPSBUZXN0VXRpbC5jcmVhdGVTdGF0aWNOb2RlTGFiZWwoTkw0QjFfVVJJLCBuNGIKKwkJCQkuZ2V0VVJJKCkpOworCQlmaW5hbCBOb2RlTGFiZWwgbmw0YzEgPSBUZXN0VXRpbC5jcmVhdGVTdGF0aWNOb2RlTGFiZWwoTkw0QzFfVVJJLCBuNGMKKwkJCQkuZ2V0VVJJKCkpOworCisJCS8vIEdyYXBoIEc0CisJCWc0LnB1dEdyYXBoTGFiZWwoZ2w0KTsKKwkJZzQucHV0Tm9kZUxhYmVsKG5sNGExKTsKKwkJZzQucHV0Tm9kZUxhYmVsKG5sNGIxKTsKKwkJZzQucHV0Tm9kZUxhYmVsKG5sNGMxKTsKKwkJLy8gd2UgZGVsaWJlcmF0ZWx5IGRvbid0IGxhYmVsIG40ZAorCQlnNC5wdXROb2RlKG40YSk7CisJCWc0LnB1dE5vZGUobjRiKTsKKwkJZzQucHV0Tm9kZShuNGMpOworCQlnNC5wdXROb2RlKG40ZCk7CisvLwkJZzQucHV0Tm9kZUxhYmVsKChOb2RlTGFiZWwpIG40YS5nZXRMYWJlbHMoKS5nZXQoMCkpOworLy8JCWc0LnB1dE5vZGVMYWJlbCgoTm9kZUxhYmVsKSBuNGIuZ2V0TGFiZWxzKCkuZ2V0KDApKTsKKy8vCQlnNC5wdXROb2RlTGFiZWwoKE5vZGVMYWJlbCkgbjRjLmdldExhYmVscygpLmdldCgwKSk7CisvLwkJZzQucHV0Tm9kZUxhYmVsKChOb2RlTGFiZWwpIG40ZC5nZXRMYWJlbHMoKS5nZXQoMCkpOworCisJCWc0LnB1dEVkZ2UoZTRhKTsKKwkJZzQucHV0RWRnZShlNGIpOworCisJCS8vICoqKiBNb2RlbCBNMCAqKioKKwkJbTAuZ2V0R3JhcGhzKCkuYWRkKGcwKTsKKwkJbTAuZ2V0R3JhcGhzKCkuYWRkKGcxKTsKKwkJbTAuZ2V0TW9kZWxzKCkuYWRkKG0xKTsKKwkJbTAuZ2V0TW9kZWxzKCkuYWRkKG0zKTsKKwkJbTAuZ2V0Tm9kZURlY29yYXRvcnMoKS5hZGQobm9kZURlYzBhKTsKKworCQkvLyAqKiogTW9kZWwgTTEgKioqCisJCW0xLmdldEdyYXBocygpLmFkZChnMik7CisJCW0xLmdldE1vZGVscygpLmFkZChtMik7CisJCW0xLmdldEVkZ2VEZWNvcmF0b3JzKCkuYWRkKGVkZWMxYSk7CisKKwkJLy8gKioqIE1vZGVsIE0yICoqKgorCQltMi5nZXRHcmFwaHMoKS5hZGQoZzUpOworCQltMi5nZXRHcmFwaERlY29yYXRvcnMoKS5hZGQoZ2RlYzJhKTsKKwkJbTIuZ2V0Tm9kZURlY29yYXRvcnMoKS5hZGQobm9kZURlYzJhKTsKKworCQkvLyAqKiogTW9kZWwgTTMgKioqCisJCW0zLmdldEdyYXBocygpLmFkZChnMyk7CisJCW0zLmdldEdyYXBocygpLmFkZChnNCk7CisJCW0zLmdldEVkZ2VEZWNvcmF0b3JzKCkuYWRkKGVkZWMzYSk7CisKKwkJYXNzZXJ0VHJ1ZShtMC5zYW5lKCkpOworCisJCXJldHVybiBtMDsKKwl9IC8vIGNyZWF0ZUZpeHR1cmUKKworCS8qKgorCSAqIENyZWF0ZSBhIG1vZGVsIHdpdGggb25lIGdyYXBoIHRoYXQgaGFzIG9uZSBlZGdlIGFuZCBvbmUgbGFiZWwgdGhhdAorCSAqIHJlZmVyZW5jZSBhIG5vZGUgdGhhdCBkb2Vzbid0IGV4aXN0LgorCSAqIAorCSAqIEBwYXJhbSBtb2RlbFVSSQorCSAqIEByZXR1cm4gYSBmaXh0dXJlIGZvciB0ZXN0aW5nCisJICovCisJcHJpdmF0ZSBNb2RlbCBjcmVhdGVVbnJlc29sdmVkRml4dHVyZShmaW5hbCBVUkkgbW9kZWxVUkkpIHsKKwkJZmluYWwgTW9kZWwgcmV0VmFsdWUgPSBjcmVhdGVNb2RlbChtb2RlbFVSSSk7CisKKwkJZmluYWwgVVJJIE5PREVfT05FX1VSSSA9IFNURU1VUkkuY3JlYXRlVVJJKE5PREUgKyAiLyIgKyAibm9kZTEiKTsKKwkJZmluYWwgR3JhcGggZzEgPSBjcmVhdGVHcmFwaChTVEVNVVJJLmNyZWF0ZVVSSShHUkFQSCArICIvIiArICJnMSIpKTsKKwkJZmluYWwgRWRnZSBlMSA9IFRlc3RVdGlsLmNyZWF0ZVN0YXRpY2FsbHlMYWJlbGVkRWRnZShTVEVNVVJJCisJCQkJLmNyZWF0ZVVSSShFREdFICsgIi8iICsgImUxIiksIE5PREVfT05FX1VSSSwgTk9ERV9PTkVfVVJJLAorCQkJCWZhbHNlKTsKKwkJZmluYWwgTm9kZUxhYmVsIGwxID0gVGVzdFV0aWwuY3JlYXRlU3RhdGljTm9kZUxhYmVsKFNURU1VUkkKKwkJCQkuY3JlYXRlVVJJKExBQkVMICsgIi8iICsgImwxIiksIE5PREVfT05FX1VSSSk7CisJCWcxLnB1dEVkZ2UoZTEpOworCQlnMS5wdXROb2RlTGFiZWwobDEpOworCisJCXJldFZhbHVlLmdldEdyYXBocygpLmFkZChnMSk7CisJCXJldHVybiByZXRWYWx1ZTsKKwl9IC8vIGNyZWF0ZVVucmVzb2x2ZWRGaXh0dXJlCisKKwkvKioKKwkgKiBAcGFyYW0gdXJpCisJICogICAgICAgICAgICB0aGUgdXJpIHRvIHVzZSBmb3IgdGhlIG5ld2x5IGNyZWF0ZWQgbW9kZWwKKwkgKiBAcmV0dXJuIGEgbmV3IG1vZGVsIGluc3RhbmNlCisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlwcml2YXRlIHN0YXRpYyBNb2RlbCBjcmVhdGVNb2RlbChVUkkgdXJpKSB7CisJCWZpbmFsIE1vZGVsIHJldFZhbHVlID0gTW9kZWxGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVNb2RlbCgpOworCQlyZXRWYWx1ZS5zZXRVUkkodXJpKTsKKwkJcmV0dXJuIHJldFZhbHVlOworCX0gLy8gY3JlYXRlTW9kZWwKKworCS8qKgorCSAqIEBwYXJhbSB1cmkKKwkgKiAgICAgICAgICAgIHRoZSB1cmkgdG8gdXNlIGZvciB0aGUgbmV3bHkgY3JlYXRlZCBncmFwaAorCSAqIEByZXR1cm4gYSBuZXcgZ3JhcGggaW5zdGFuY2UKKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCXByaXZhdGUgc3RhdGljIEdyYXBoIGNyZWF0ZUdyYXBoKFVSSSB1cmkpIHsKKwkJZmluYWwgR3JhcGggcmV0VmFsdWUgPSBHcmFwaEZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZUdyYXBoKCk7CisJCXJldFZhbHVlLnNldFVSSSh1cmkpOworCQlyZXR1cm4gcmV0VmFsdWU7CisJfSAvLyBjcmVhdGVHcmFwaAorCisJLyoqCisJICogQHBhcmFtIHVyaQorCSAqICAgICAgICAgICAgdGhlIHVyaSB0byB1c2UgZm9yIHRoZSBuZXdseSBjcmVhdGVkIG5vZGUgZGVjb3JhdG9yCisJICogQHJldHVybiB0aGUgbmV3IG5vZGUgZGVjb3JhdG9yIGluc3RhbmNlCisJICovCisJcHJpdmF0ZSBzdGF0aWMgTm9kZURlY29yYXRvciBjcmVhdGVOb2RlRGVjb3JhdG9yKGZpbmFsIFVSSSB1cmkpIHsKKwkJZmluYWwgTm9kZURlY29yYXRvciBub2RlRGVjb3JhdG9yID0gRGVjb3JhdG9yc0ZhY3RvcnkuZUlOU1RBTkNFCisJCQkJLmNyZWF0ZVRlc3ROb2RlRGVjb3JhdG9yMSgpOworCQlub2RlRGVjb3JhdG9yLnNldFVSSSh1cmkpOworCQlyZXR1cm4gbm9kZURlY29yYXRvcjsKKwl9IC8vIGNyZWF0ZU5vZGVEZWNvcmF0b3IKKworCS8qKgorCSAqIEBwYXJhbSB1cmkKKwkgKiAgICAgICAgICAgIHRoZSB1cmkgdG8gdXNlIGZvciB0aGUgbmV3bHkgY3JlYXRlZCBlZGdlIGRlY29yYXRvcgorCSAqIEByZXR1cm4gdGhlIG5ldyBlZGdlIGRlY29yYXRvciBpbnN0YW5jZQorCSAqLworCXByaXZhdGUgc3RhdGljIEVkZ2VEZWNvcmF0b3IgY3JlYXRlRWRnZURlY29yYXRvcigKKwkJCWZpbmFsIFVSSSBlZGdlRGVjb3JhdG9yVVJJLCBmaW5hbCBTdHJpbmcgdXJpU3RyaW5nLAorCQkJZmluYWwgVVJJIG5vZGVBVVJJLCBmaW5hbCBVUkkgbm9kZUJVUkksIGZpbmFsIGludCBlZGdlSW5kZXgpIHsKKwkJZmluYWwgVGVzdEVkZ2VEZWNvcmF0b3IxIGVkZ2VEZWNvcmF0b3IgPSBEZWNvcmF0b3JzRmFjdG9yeS5lSU5TVEFOQ0UKKwkJCQkuY3JlYXRlVGVzdEVkZ2VEZWNvcmF0b3IxKCk7CisJCWVkZ2VEZWNvcmF0b3Iuc2V0VVJJKGVkZ2VEZWNvcmF0b3JVUkkpOworCQllZGdlRGVjb3JhdG9yLnNldE5vZGVBVVJJKG5vZGVBVVJJKTsKKwkJZWRnZURlY29yYXRvci5zZXROb2RlQlVSSShub2RlQlVSSSk7CisJCWVkZ2VEZWNvcmF0b3Iuc2V0RWRnZVVSSShjcmVhdGVEeW5hbWljRWRnZVVSSSh1cmlTdHJpbmcsIGVkZ2VJbmRleCkpOworCQlyZXR1cm4gZWRnZURlY29yYXRvcjsKKwl9IC8vIGNyZWF0ZUVkZ2VEZWNvcmF0b3IKKworCS8qKgorCSAqIEBwYXJhbSBlZGdlRGVjb3JhdG9yVVJJCisJICogQHJldHVybiBhIGR5bmFtaWMgZWRnZSB1cmkKKwkgKi8KKwlwcm90ZWN0ZWQgc3RhdGljIFVSSSBjcmVhdGVEeW5hbWljRWRnZVVSSShmaW5hbCBTdHJpbmcgdXJpU3RyaW5nLAorCQkJZmluYWwgaW50IGluZGV4KSB7CisJCWZpbmFsIFVSSSByZXRWYWx1ZSA9IFNURU1VUkkuY3JlYXRlVVJJKEVER0UgKyAiLyIgKyB1cmlTdHJpbmcgKyBpbmRleCk7CisJCXJldHVybiByZXRWYWx1ZTsKKwl9IC8vIGNyZWF0ZUR5bmFtaWNFZGdlVVJJCisKKwkvKioKKwkgKiBAcGFyYW0gdXJpCisJICogICAgICAgICAgICB0aGUgdXJpIHRvIHVzZSBmb3IgdGhlIG5ld2x5IGNyZWF0ZWQgZ3JhcGggZGVjb3JhdG9yCisJICogQHJldHVybiB0aGUgbmV3IGdyYXBoIGRlY29yYXRvciBpbnN0YW5jZQorCSAqLworCXByaXZhdGUgc3RhdGljIEdyYXBoRGVjb3JhdG9yIGNyZWF0ZUdyYXBoRGVjb3JhdG9yKFVSSSB1cmkpIHsKKwkJZmluYWwgR3JhcGhEZWNvcmF0b3IgZ3JhcGhEZWNvcmF0b3IgPSBEZWNvcmF0b3JzRmFjdG9yeS5lSU5TVEFOQ0UKKwkJCQkuY3JlYXRlVGVzdEdyYXBoRGVjb3JhdG9yMSgpOworCQlncmFwaERlY29yYXRvci5zZXRVUkkodXJpKTsKKwkJcmV0dXJuIGdyYXBoRGVjb3JhdG9yOworCX0gLy8gY3JlYXRlR3JhcGhEZWNvcmF0b3IKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlI3RlYXJEb3duKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgdGVhckRvd24oKSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJc2V0Rml4dHVyZShudWxsKTsKKwl9CisKKwkvKioKKwkgKiBUZXN0cyB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuTW9kZWwjZ2V0Q2Fub25pY2FsR3JhcGgob3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlVSSSwgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5JZGVudGlmaWFibGVGaWx0ZXIsIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5TVEVNVGltZSkgPGVtPkdldCBDYW5vbmljYWwgR3JhcGg8L2VtPn0nIG9wZXJhdGlvbi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIENoZWNrIHRoYXQgdGhlIGZpbHRlciB3b3JrcyAtIGV4dHJhY3QgYSBub2RlCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuTW9kZWwjZ2V0Q2Fub25pY2FsR3JhcGgob3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlVSSSwgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5JZGVudGlmaWFibGVGaWx0ZXIsIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5TVEVNVGltZSkKKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCXB1YmxpYyB2b2lkIHRlc3RHZXRDYW5vbmljYWxHcmFwaF9fVVJJX0lkZW50aWZpYWJsZUZpbHRlcl9TVEVNVGltZSgpIHsKKwkJCisKKwkJZmluYWwgTW9kZWwgbW9kZWwgPSBjcmVhdGVNb2RlbChNMF9VUkkpOworCQltb2RlbC5nZXREdWJsaW5Db3JlKCkuc2V0VGl0bGUoIm0wIik7CisJCQorCQlmaW5hbCBNb2RlbCBtMF8xID0gY3JlYXRlTW9kZWwoTTBfMV9VUkkpOworCQltMF8xLmdldER1YmxpbkNvcmUoKS5zZXRUaXRsZSgibTBfMSIpOworCQkKKwkJZmluYWwgTW9kZWwgbTBfMiA9IGNyZWF0ZU1vZGVsKE0wXzJfVVJJKTsKKwkJbTBfMi5nZXREdWJsaW5Db3JlKCkuc2V0VGl0bGUoIm0wXzIiKTsKKwkJCisKKwkJLy8gR3JhcGggRzBfMQorCQlmaW5hbCBHcmFwaCBnMF8xID0gY3JlYXRlR3JhcGgoRzBfMV9VUkkpOworCQlnMF8xLmdldER1YmxpbkNvcmUoKS5zZXRUaXRsZSgiZzBfMSIpOworCQlmaW5hbCBOb2RlIG4wYSA9IFRlc3RVdGlsLmNyZWF0ZVN0YXRpY2FsbHlMYWJlbGVkTm9kZShOMF8xX1VSSSk7CisJCWcwXzEucHV0Tm9kZShuMGEpOworCQkKKwkJLy8gR3JhcGggRzBfMgorCQlmaW5hbCBHcmFwaCBnMF8yID0gY3JlYXRlR3JhcGgoRzBfMl9VUkkpOworCQlnMF8yLmdldER1YmxpbkNvcmUoKS5zZXRUaXRsZSgiZzBfMiIpOworCQlmaW5hbCBOb2RlIG4wYiA9IFRlc3RVdGlsLmNyZWF0ZVN0YXRpY2FsbHlMYWJlbGVkTm9kZShOMF8yX1VSSSk7CisJCWcwXzIucHV0Tm9kZShuMGIpOworCisKKworCQkvLyAqKiogR3JhcGhzIHRvIE1vZGVsczAgKioqCisJCW0wXzEuZ2V0R3JhcGhzKCkuYWRkKGcwXzEpOworCQltMF8yLmdldEdyYXBocygpLmFkZChnMF8yKTsKKwkJCisJCS8vICoqIE1vZGVscyB0byBNb2RlbHMKKwkJbW9kZWwuZ2V0TW9kZWxzKCkuYWRkKG0wXzEpOworCQltb2RlbC5nZXRNb2RlbHMoKS5hZGQobTBfMik7CisJCQorCQlTVEVNVGltZSB0aW1lID0gTW9kZWxGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVTVEVNVGltZSgpOworCQlmaW5hbCBHcmFwaCBjYW5vbmljYWxHcmFwaCA9IG1vZGVsCisJCQkJLmdldENhbm9uaWNhbEdyYXBoKENBTk9OSUNBTF9HUkFQSDFfVVJJLCBuZXcgSWRlbnRpZmlhYmxlRmlsdGVySW1wbCgiXzEiKSwgdGltZSk7CisJCS8vIFRPRE8gU3RlZmFuLCBwbGVhc2UgY2hlY2sgdGhlIGZpbHRlciBzeW50YXguIE1ldGhvZCBJZGVudGlmaWFibGVGaWx0ZXJJbXBsLnJlc3RyaWN0IGlzIGJsYW5rCisJCWFzc2VydChjYW5vbmljYWxHcmFwaC5zYW5lKCkpOworCisJfQorCisJLyoqCisJICogVGVzdHMgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLk1vZGVsI3ByZXBhcmUob3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLlNURU1UaW1lKSA8ZW0+UHJlcGFyZTwvZW0+fScgb3BlcmF0aW9uLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuTW9kZWwjcHJlcGFyZShvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuU1RFTVRpbWUpCisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlwdWJsaWMgdm9pZCB0ZXN0UHJlcGFyZV9fU1RFTVRpbWUoKSB7CisJCWludCBjWWVhciA9IENhbGVuZGFyLmdldEluc3RhbmNlKCkuZ2V0VGltZSgpLmdldFllYXIoKTsKKwkJU1RFTVRpbWUgbm93ID0gTW9kZWxGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVTVEVNVGltZSgpOworCQlpbnQgU1RFTXllYXIgPSBub3cuZ2V0VGltZSgpLmdldFllYXIoKTsKKwkJYm9vbGVhbiB0ZXN0ID0gKG5vdyAhPSBudWxsKSYmKE1hdGguYWJzKGNZZWFyLVNURU15ZWFyKTw9MSk7CisJCWFzc2VydFRydWUodGVzdCk7IAorCX0KKworCS8qKgorCSAqIFRlc3QgdGhlIHNhbml0eSBvZiB0aGUgZml4dHVyZQorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIHRlc3RTYW5lKCkgeworCQlmaW5hbCBNb2RlbCBtb2RlbCA9IGdldEZpeHR1cmUoKTsKKwkJYXNzZXJ0VHJ1ZShtb2RlbC5zYW5lKCkpOworCX0gLy8gdGVzdFNhbmUKKworCS8qKgorCSAqIFRlc3RzIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5Nb2RlbCNnZXRDYW5vbmljYWxHcmFwaChVUkkpIDxlbT5DYW5vbmljYWwgR3JhcGg8L2VtPn0nCisJICogZmVhdHVyZSBnZXR0ZXIuIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLk1vZGVsI2dldENhbm9uaWNhbEdyYXBoKFVSSSkKKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCXB1YmxpYyB2b2lkIHRlc3RHZXRDYW5vbmljYWxHcmFwaF9fVVJJKCkgeworCQlmaW5hbCBpbnQgTlVNX1NUQVRJQ19OT0RFUyA9IDk7CisJCWZpbmFsIGludCBOVU1fU1RBVElDX0VER0VTID0gNzsKKworCQkvLyAxIGZvciBFREVDXzFBLCAxIGZvciBFREVDXzNBCisJCWZpbmFsIGludCBOVU1fRFlOQU1JQ19FREdFUyA9IDI7CisJCWZpbmFsIGludCBOVU1fU1RBVElDX05PREVfTEFCRUxTID0gMiAqIE5VTV9TVEFUSUNfTk9ERVM7CisKKwkJLy8gKzIgZm9yIE5ERUNfMkEgb24gbm9kZXMgTjVhICYgTjViCisJCWZpbmFsIGludCBOVU1fRFlOQU1JQ19OT0RFX0xBQkVMUyA9IE5VTV9TVEFUSUNfTk9ERVMgKyAyOworCQlmaW5hbCBpbnQgTlVNX1NUQVRJQ19HUkFQSF9MQUJFTFMgPSA2OworCQlmaW5hbCBpbnQgTlVNX0RZTkFNSUNfR1JBUEhfTEFCRUxTID0gMTsKKwkJZmluYWwgaW50IE5VTV9EWU5BTUlDX0VER0VfTEFCRUxTID0gTlVNX0RZTkFNSUNfRURHRVM7CisKKwkJZmluYWwgTW9kZWwgbW9kZWwgPSBnZXRGaXh0dXJlKCk7CisJCVNURU1UaW1lIHRpbWUgPSBNb2RlbEZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZVNURU1UaW1lKCk7CisJCWZpbmFsIEdyYXBoIGNhbm9uaWNhbEdyYXBoID0gbW9kZWwuZ2V0Q2Fub25pY2FsR3JhcGgoQ0FOT05JQ0FMX0dSQVBIMV9VUkksIG51bGwsIHRpbWUpOworCisJCWFzc2VydFRydWUoY2Fub25pY2FsR3JhcGguc2FuZSgpKTsKKworCQkvLyBUaGUgVVJJIG9mIHRoZSBncmFwaCBzaG91bGQgYmUgd2hhdCB3ZSB0aGluayBpdCBzaG91bGQgYmUKKwkJYXNzZXJ0VHJ1ZShjYW5vbmljYWxHcmFwaC5nZXRVUkkoKS5lcXVhbHMoQ0FOT05JQ0FMX0dSQVBIMV9VUkkpKTsKKworCQkvLyBUaGVyZSBzaG91bGRuJ3QgYmUgYW55IHVucmVzb2x2ZWQgVVJJIHJlZmVyZW5jZXMKKwkJYXNzZXJ0VHJ1ZShjYW5vbmljYWxHcmFwaC5nZXRVbnJlc29sdmVkSWRlbnRpZmlhYmxlcygpLnNpemUoKSA9PSAwKTsKKworCQkvLyBUaGUgbnVtYmVycyBzaG91bGQgYWRkIHVwCisJCWFzc2VydFRydWUoY2Fub25pY2FsR3JhcGguZ2V0TnVtTm9kZXMoKSA9PSBOVU1fU1RBVElDX05PREVTKTsKKworCQlhc3NlcnRUcnVlKGNhbm9uaWNhbEdyYXBoLmdldE51bUVkZ2VzKCkgPT0gTlVNX1NUQVRJQ19FREdFUworCQkJCSsgTlVNX0RZTkFNSUNfRURHRVMpOworCisJCWFzc2VydFRydWUoY2Fub25pY2FsR3JhcGguZ2V0TnVtR3JhcGhMYWJlbHMoKSA9PSBOVU1fU1RBVElDX0dSQVBIX0xBQkVMUworCQkJCSsgTlVNX0RZTkFNSUNfR1JBUEhfTEFCRUxTKTsKKworCQlhc3NlcnRUcnVlKGNhbm9uaWNhbEdyYXBoLmdldE51bU5vZGVMYWJlbHMoKSA9PSBOVU1fU1RBVElDX05PREVfTEFCRUxTCisJCQkJKyBOVU1fRFlOQU1JQ19OT0RFX0xBQkVMUyk7CisKKwkJYXNzZXJ0VHJ1ZShjYW5vbmljYWxHcmFwaC5nZXROdW1EeW5hbWljTGFiZWxzKCkgPT0gK05VTV9EWU5BTUlDX05PREVfTEFCRUxTCisJCQkJKyBOVU1fRFlOQU1JQ19HUkFQSF9MQUJFTFMgKyBOVU1fRFlOQU1JQ19FREdFX0xBQkVMUyk7CisKKwkJLy8gQWxsIHRoZSBFZGdlcyBzaG91bGQgYmUgaG9va2VkIHVwIHRvIHRoZWlyIG5vZGVzCisJCWZpbmFsIEVkZ2UgZTFhID0gY2Fub25pY2FsR3JhcGguZ2V0RWRnZShFMUFfVVJJKTsKKwkJYXNzZXJ0VHJ1ZShlMWEuZ2V0QSgpLmdldFVSSSgpLmVxdWFscyhONUFfVVJJKSk7CisJCWFzc2VydFRydWUoZTFhLmdldEIoKS5nZXRVUkkoKS5lcXVhbHMoTjRBX1VSSSkpOworCisJCWZpbmFsIEVkZ2UgZTFiID0gY2Fub25pY2FsR3JhcGguZ2V0RWRnZShFMUJfVVJJKTsKKwkJYXNzZXJ0VHJ1ZShlMWIuZ2V0QSgpLmdldFVSSSgpLmVxdWFscyhONUJfVVJJKSk7CisJCWFzc2VydFRydWUoZTFiLmdldEIoKS5nZXRVUkkoKS5lcXVhbHMoTjRCX1VSSSkpOworCisJCWZpbmFsIEVkZ2UgZTJhID0gY2Fub25pY2FsR3JhcGguZ2V0RWRnZShFMkFfVVJJKTsKKwkJYXNzZXJ0VHJ1ZShlMmEuZ2V0QSgpLmdldFVSSSgpLmVxdWFscyhONUFfVVJJKSk7CisJCWFzc2VydFRydWUoZTJhLmdldEIoKS5nZXRVUkkoKS5lcXVhbHMoTjVCX1VSSSkpOworCisJCWZpbmFsIEVkZ2UgZTNhID0gY2Fub25pY2FsR3JhcGguZ2V0RWRnZShFM0FfVVJJKTsKKwkJYXNzZXJ0VHJ1ZShlM2EuZ2V0QSgpLmdldFVSSSgpLmVxdWFscyhOM0FfVVJJKSk7CisJCWFzc2VydFRydWUoZTNhLmdldEIoKS5nZXRVUkkoKS5lcXVhbHMoTjNCX1VSSSkpOworCisJCWZpbmFsIEVkZ2UgZTRhID0gY2Fub25pY2FsR3JhcGguZ2V0RWRnZShFNEFfVVJJKTsKKwkJYXNzZXJ0VHJ1ZShlNGEuZ2V0QSgpLmdldFVSSSgpLmVxdWFscyhONEFfVVJJKSk7CisJCWFzc2VydFRydWUoZTRhLmdldEIoKS5nZXRVUkkoKS5lcXVhbHMoTjRCX1VSSSkpOworCisJCWZpbmFsIEVkZ2UgZTRiID0gY2Fub25pY2FsR3JhcGguZ2V0RWRnZShFNEJfVVJJKTsKKwkJYXNzZXJ0VHJ1ZShlNGIuZ2V0QSgpLmdldFVSSSgpLmVxdWFscyhONEFfVVJJKSk7CisJCWFzc2VydFRydWUoZTRiLmdldEIoKS5nZXRVUkkoKS5lcXVhbHMoTjRDX1VSSSkpOworCisJCWZpbmFsIEVkZ2UgZTVhID0gY2Fub25pY2FsR3JhcGguZ2V0RWRnZShFNUFfVVJJKTsKKwkJYXNzZXJ0VHJ1ZShlNWEuZ2V0QSgpLmdldFVSSSgpLmVxdWFscyhONUFfVVJJKSk7CisJCWFzc2VydFRydWUoZTVhLmdldEIoKS5nZXRVUkkoKS5lcXVhbHMoTjVCX1VSSSkpOworCisJCS8vIFRoZSBub2RlcyBzaG91bGQgaGF2ZSAobm9uLWNvbnRhaW5tZW50KSByZWZlcmVuY2VzIHRvIHRoZWlyIGVkZ2VzIGFuZAorCQkvLyBsYWJlbHMKKwkJZmluYWwgTm9kZSBuMGEgPSBjYW5vbmljYWxHcmFwaC5nZXROb2RlKE4wQV9VUkkpOworCQlmaW5hbCBFTGlzdCBuMGFFZGdlcyA9IG4wYS5nZXRFZGdlcygpOworCQlhc3NlcnRUcnVlKG4wYUVkZ2VzLnNpemUoKSA9PSAwKTsKKwkJZmluYWwgRUxpc3QgbjBhTGFiZWxzID0gbjBhLmdldExhYmVscygpOworCQkvLyAxICsgMiBzdGF0aWMgbGFiZWxzLCAxIGR5bmFtaWMKKwkJYXNzZXJ0VHJ1ZShuMGFMYWJlbHMuc2l6ZSgpID09IDEgKyAyICsgMSk7CisJCXZlcmlmeU5vZGVMYWJlbHNSZWZlcmVuY2VOb2RlKG4wYSk7CisKKwkJZmluYWwgTm9kZSBuM2EgPSBjYW5vbmljYWxHcmFwaC5nZXROb2RlKE4zQV9VUkkpOworCQlmaW5hbCBFTGlzdCBuM2FFZGdlcyA9IG4zYS5nZXRFZGdlcygpOworCQlhc3NlcnRUcnVlKG4zYUVkZ2VzLnNpemUoKSA9PSAxKTsKKwkJYXNzZXJ0VHJ1ZShuM2FFZGdlcy5jb250YWlucyhlM2EpKTsKKwkJZmluYWwgRUxpc3QgbjNhTGFiZWxzID0gbjNhLmdldExhYmVscygpOworCQkvLyAxICsgMSBzdGF0aWMgbGFiZWwsIDEgZHluYW1pYworCQlhc3NlcnRUcnVlKG4zYUxhYmVscy5zaXplKCkgPT0gMSArIDEgKyAxKTsKKwkJdmVyaWZ5Tm9kZUxhYmVsc1JlZmVyZW5jZU5vZGUobjNhKTsKKworCQlmaW5hbCBOb2RlIG4zYiA9IGNhbm9uaWNhbEdyYXBoLmdldE5vZGUoTjNCX1VSSSk7CisJCWZpbmFsIEVMaXN0IG4zYkVkZ2VzID0gbjNiLmdldEVkZ2VzKCk7CisJCWFzc2VydFRydWUobjNiRWRnZXMuc2l6ZSgpID09IDEpOworCQlhc3NlcnRUcnVlKG4zYkVkZ2VzLmNvbnRhaW5zKGUzYSkpOworCQlmaW5hbCBFTGlzdCBuM2JMYWJlbHMgPSBuM2IuZ2V0TGFiZWxzKCk7CisJCS8vIDErIDEgc3RhdGljIGxhYmVsLCAxIGR5bmFtaWMKKwkJYXNzZXJ0VHJ1ZShuM2JMYWJlbHMuc2l6ZSgpID09IDEgKyAxICsgMSk7CisJCXZlcmlmeU5vZGVMYWJlbHNSZWZlcmVuY2VOb2RlKG4zYik7CisKKwkJZmluYWwgTm9kZSBuNGEgPSBjYW5vbmljYWxHcmFwaC5nZXROb2RlKE40QV9VUkkpOworCQlmaW5hbCBFTGlzdCBuNGFFZGdlcyA9IG40YS5nZXRFZGdlcygpOworCQkvLyAzIHN0YXRpYyBlZGdlcywgMSBkeW5hbWljCisJCWFzc2VydFRydWUobjRhRWRnZXMuc2l6ZSgpID09IDMgKyAxKTsKKwkJYXNzZXJ0VHJ1ZShuNGFFZGdlcy5jb250YWlucyhlMWEpKTsKKwkJYXNzZXJ0VHJ1ZShuNGFFZGdlcy5jb250YWlucyhlNGEpKTsKKwkJYXNzZXJ0VHJ1ZShuNGFFZGdlcy5jb250YWlucyhlNGIpKTsKKwkJLy8gYXNzZXJ0VHJ1ZShuNGFFZGdlcy5jb250YWlucyggZGU0ICk7CisJCWZpbmFsIEVMaXN0IG40YUxhYmVscyA9IG40YS5nZXRMYWJlbHMoKTsKKwkJLy8gMSArIDEgc3RhdGljIGxhYmVsLCAxIGR5bmFtaWMKKwkJYXNzZXJ0VHJ1ZShuNGFMYWJlbHMuc2l6ZSgpID09IDEgKyAxICsgMSk7CisJCXZlcmlmeU5vZGVMYWJlbHNSZWZlcmVuY2VOb2RlKG40YSk7CisKKwkJZmluYWwgTm9kZSBuNGIgPSBjYW5vbmljYWxHcmFwaC5nZXROb2RlKE40Ql9VUkkpOworCQlmaW5hbCBFTGlzdCBuNGJFZGdlcyA9IG40Yi5nZXRFZGdlcygpOworCQkvLyAyIHN0YXRpYywgMSBkeW5hbWljCisJCWFzc2VydFRydWUobjRiRWRnZXMuc2l6ZSgpID09IDIgKyAxKTsKKwkJYXNzZXJ0VHJ1ZShuNGJFZGdlcy5jb250YWlucyhlMWIpKTsKKwkJYXNzZXJ0VHJ1ZShuNGJFZGdlcy5jb250YWlucyhlNGEpKTsKKwkJLy8gYXNzZXJ0VHJ1ZShuNGFFZGdlcy5jb250YWlucyggZGU0ICk7CisJCWZpbmFsIEVMaXN0IG40YkxhYmVscyA9IG40Yi5nZXRMYWJlbHMoKTsKKwkJLy8gMSArIDEgc3RhdGljIGxhYmVsLCAxIGR5bmFtaWMKKwkJYXNzZXJ0VHJ1ZShuNGJMYWJlbHMuc2l6ZSgpID09IDEgKyAxICsgMSk7CisJCXZlcmlmeU5vZGVMYWJlbHNSZWZlcmVuY2VOb2RlKG40Yik7CisKKwkJZmluYWwgTm9kZSBuNGMgPSBjYW5vbmljYWxHcmFwaC5nZXROb2RlKE40Q19VUkkpOworCQlmaW5hbCBFTGlzdCBuNGNFZGdlcyA9IG40Yy5nZXRFZGdlcygpOworCQlhc3NlcnRUcnVlKG40Y0VkZ2VzLnNpemUoKSA9PSAxKTsKKwkJYXNzZXJ0VHJ1ZShuNGNFZGdlcy5jb250YWlucyhlNGIpKTsKKwkJZmluYWwgRUxpc3QgbjRjTGFiZWxzID0gbjRjLmdldExhYmVscygpOworCQkvLyAxKyAxIHN0YXRpYyBsYWJlbCwgMSBkeW5hbWljCisJCWFzc2VydFRydWUobjRjTGFiZWxzLnNpemUoKSA9PSAxICsgMSArIDEpOworCQl2ZXJpZnlOb2RlTGFiZWxzUmVmZXJlbmNlTm9kZShuNGMpOworCisJCWZpbmFsIE5vZGUgbjRkID0gY2Fub25pY2FsR3JhcGguZ2V0Tm9kZShONERfVVJJKTsKKwkJZmluYWwgRUxpc3QgbjRkRWRnZXMgPSBuNGQuZ2V0RWRnZXMoKTsKKwkJYXNzZXJ0VHJ1ZShuNGRFZGdlcy5zaXplKCkgPT0gMCk7CisJCWZpbmFsIEVMaXN0IG40ZExhYmVscyA9IG40ZC5nZXRMYWJlbHMoKTsKKwkJLy8gMSBzdGF0aWMgbGFiZWwsIDEgZHluYW1pYworCQlhc3NlcnRUcnVlKG40ZExhYmVscy5zaXplKCkgPT0gMSArIDEpOworCQl2ZXJpZnlOb2RlTGFiZWxzUmVmZXJlbmNlTm9kZShuNGQpOworCisJCWZpbmFsIE5vZGUgbjVhID0gY2Fub25pY2FsR3JhcGguZ2V0Tm9kZShONUFfVVJJKTsKKwkJZmluYWwgRUxpc3QgbjVhRWRnZXMgPSBuNWEuZ2V0RWRnZXMoKTsKKwkJLy8gMyBzdGF0aWMsIDEgZHluYW1pYyBmcm9tIGVkZWMxYQorCQlhc3NlcnRUcnVlKG41YUVkZ2VzLnNpemUoKSA9PSAzICsgMSk7CisJCWFzc2VydFRydWUobjVhRWRnZXMuY29udGFpbnMoZTFhKSk7CisJCWFzc2VydFRydWUobjVhRWRnZXMuY29udGFpbnMoZTJhKSk7CisJCWFzc2VydFRydWUobjVhRWRnZXMuY29udGFpbnMoZTVhKSk7CisJCWZpbmFsIEVMaXN0IG41YUxhYmVscyA9IG41YS5nZXRMYWJlbHMoKTsKKwkJLy8gMSArIDEgc3RhdGljIGxhYmVsLCAyIGR5bmFtaWMgKE5ERUNfMEEgJiBOREVDXzJBKQorCQlhc3NlcnRUcnVlKG41YUxhYmVscy5zaXplKCkgPT0gMSArIDEgKyAyKTsKKwkJdmVyaWZ5Tm9kZUxhYmVsc1JlZmVyZW5jZU5vZGUobjVhKTsKKworCQlmaW5hbCBOb2RlIG41YiA9IGNhbm9uaWNhbEdyYXBoLmdldE5vZGUoTjVCX1VSSSk7CisJCWZpbmFsIEVMaXN0IG41YkVkZ2VzID0gbjViLmdldEVkZ2VzKCk7CisJCS8vIDMgc3RhdGljLCAxIGR5bmFtaWMgZnJvbSBlZGVjMWEKKwkJYXNzZXJ0VHJ1ZShuNWJFZGdlcy5zaXplKCkgPT0gMyArIDEpOworCQlhc3NlcnRUcnVlKG41YkVkZ2VzLmNvbnRhaW5zKGUxYikpOworCQlhc3NlcnRUcnVlKG41YkVkZ2VzLmNvbnRhaW5zKGUyYSkpOworCQlhc3NlcnRUcnVlKG41YkVkZ2VzLmNvbnRhaW5zKGU1YSkpOworCQlmaW5hbCBFTGlzdCBuNWJMYWJlbHMgPSBuNWIuZ2V0TGFiZWxzKCk7CisJCS8vIDErIDEgc3RhdGljIGxhYmVsLCAyIGR5bmFtaWMgKE5ERUNfMEEgJiBOREVDXzJBKQorCQlhc3NlcnRUcnVlKG41YkxhYmVscy5zaXplKCkgPT0gMSArIDEgKyAyKTsKKwkJdmVyaWZ5Tm9kZUxhYmVsc1JlZmVyZW5jZU5vZGUobjViKTsKKworCQkvLyBHcmFwaCBsYWJlbHMgc2hvdWxkIHJlZmVyZW5jZSB0aGUgZ3JhcGgKKwkJZm9yIChmaW5hbCBJdGVyYXRvciBncmFwaExhYmVsSXRlciA9IGNhbm9uaWNhbEdyYXBoLmdldEdyYXBoTGFiZWxzKCkKKwkJCQkudmFsdWVzKCkuaXRlcmF0b3IoKTsgZ3JhcGhMYWJlbEl0ZXIuaGFzTmV4dCgpOykgeworCQkJZmluYWwgTGFiZWwgbGFiZWwgPSAoTGFiZWwpIGdyYXBoTGFiZWxJdGVyLm5leHQoKTsKKwkJCWZpbmFsIFVSSSBncmFwaFVSSSA9IGNhbm9uaWNhbEdyYXBoLmdldFVSSSgpOworCQkJYXNzZXJ0VHJ1ZSgiR3JhcGggbGFiZWwgXCIiICsgbGFiZWwuZ2V0VVJJKCkKKwkJCQkJKyAiXCIgZG9lcyBub3QgcmVmZXJlbmNlIGdyYXBoIFwiIiArIGdyYXBoVVJJCisJCQkJCSsgIlwiLCBpbnN0ZWFkLCBpdCByZWZlcmVuY2VzIFwiIgorCQkJCQkrIGxhYmVsLmdldFVSSU9mSWRlbnRpZmlhYmxlVG9CZUxhYmVsZWQoKSArICJcIiIsIGxhYmVsCisJCQkJCS5nZXRVUklPZklkZW50aWZpYWJsZVRvQmVMYWJlbGVkKCkuZXF1YWxzKGdyYXBoVVJJKSk7CisJCX0gLy8gZm9yCisJfSAvLyB0ZXN0R2V0Q2Fub25pY2FsR3JhcGhfX1VSSQorCisJLyoqCisJICogVmVyaWZ5IHRoYXQgd2hlbiBhIGNhbm9uaWNhbCBncmFwaCBpcyBjcmVhdGVkLCBpdCBkb2VzIG5vdCBkZXN0cm95IHRoZQorCSAqIHJlcHJlc2VudGF0aW9uIG1haW50YWluZWQgaW4gdGhlIG1vZGVsLgorCSAqIAorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJcHVibGljIHZvaWQgdGVzdE5vbkRlc3RydWN0aXZlR2V0Q2Fub25pY2FsR3JhcGgoKSB7CisJCWZpbmFsIE1vZGVsIG1vZGVsID0gZ2V0Rml4dHVyZSgpOworCisJCVNURU1UaW1lIG5vdyA9IE1vZGVsRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlU1RFTVRpbWUoKTsKKwkJCisJCWZpbmFsIEdyYXBoIGdyYXBoMSA9IG1vZGVsLmdldENhbm9uaWNhbEdyYXBoKENBTk9OSUNBTF9HUkFQSDFfVVJJLCBuZXcgSWRlbnRpZmlhYmxlRmlsdGVySW1wbChtb2RlbC5nZXREdWJsaW5Db3JlKCkuZ2V0Q292ZXJhZ2UoKSksIG5vdyk7CisJCWZpbmFsIEdyYXBoIGdyYXBoMiA9IG1vZGVsLmdldENhbm9uaWNhbEdyYXBoKENBTk9OSUNBTF9HUkFQSDJfVVJJLCBuZXcgSWRlbnRpZmlhYmxlRmlsdGVySW1wbChtb2RlbC5nZXREdWJsaW5Db3JlKCkuZ2V0Q292ZXJhZ2UoKSksIG5vdyk7CisKKwkJZmluYWwgRHVibGluQ29yZSBkYzEgPSBncmFwaDEuZ2V0RHVibGluQ29yZSgpOworCQlmaW5hbCBEdWJsaW5Db3JlIGRjMiA9IGdyYXBoMi5nZXREdWJsaW5Db3JlKCk7CisKKwkJLy8gVGhlIGdyYXBocyBzaG91bGQgYmUgZGlmZmVyZW50IGluc3RhbmNlcworCQlhc3NlcnRUcnVlKGdyYXBoMSAhPSBncmFwaDIpOworCQlhc3NlcnRGYWxzZShncmFwaDEuZ2V0VVJJKCkuZXF1YWxzKGdyYXBoMi5nZXRVUkkoKSkpOworCisJCS8vIC4uLiBidXQgb3RoZXJ3aXNlIHRoZSBzYW1lCisJCWFzc2VydFRydWUoZ3JhcGgxLmdldFR5cGVVUkkoKS5lcXVhbHMoZ3JhcGgyLmdldFR5cGVVUkkoKSkpOworCisJCWFzc2VydFRydWUoZ3JhcGgxLmdldFVSSSgpLnRvU3RyaW5nKCkuZXF1YWxzKGRjMS5nZXRJZGVudGlmaWVyKCkpKTsKKwkJYXNzZXJ0VHJ1ZShncmFwaDEuZ2V0VHlwZVVSSSgpLnRvU3RyaW5nKCkuZXF1YWxzKGRjMS5nZXRUeXBlKCkpKTsKKworCQlhc3NlcnRUcnVlKGdyYXBoMi5nZXRVUkkoKS50b1N0cmluZygpLmVxdWFscyhkYzIuZ2V0SWRlbnRpZmllcigpKSk7CisJCWFzc2VydFRydWUoZ3JhcGgyLmdldFR5cGVVUkkoKS50b1N0cmluZygpLmVxdWFscyhkYzIuZ2V0VHlwZSgpKSk7CisKKwkJYXNzZXJ0VHJ1ZShncmFwaDEuZ2V0TnVtRWRnZXMoKSA9PSBncmFwaDIuZ2V0TnVtRWRnZXMoKSk7CisJCWFzc2VydFRydWUoZ3JhcGgxLmdldE51bU5vZGVzKCkgPT0gZ3JhcGgyLmdldE51bU5vZGVzKCkpOworCQlhc3NlcnRUcnVlKGdyYXBoMS5nZXROdW1Ob2RlTGFiZWxzKCkgPT0gZ3JhcGgyLmdldE51bU5vZGVMYWJlbHMoKSk7CisJCWFzc2VydFRydWUoZ3JhcGgxLmdldE51bUdyYXBoTGFiZWxzKCkgPT0gZ3JhcGgyLmdldE51bUdyYXBoTGFiZWxzKCkpOworCQlhc3NlcnRUcnVlKGdyYXBoMS5nZXROdW1EeW5hbWljTGFiZWxzKCkgPT0gZ3JhcGgyLmdldE51bUR5bmFtaWNMYWJlbHMoKSk7CisKKwkJLy8gLi4uIGFuZCBkaWZmZXJlbnQKKwkJYXNzZXJ0VHJ1ZShncmFwaDEuZ2V0RWRnZShFMUFfVVJJKSAhPSBncmFwaDIuZ2V0RWRnZShFMUFfVVJJKSk7CisKKwl9IC8vIHRlc3ROb25EZXN0cnVjdGl2ZUdldENhbm9uaWNhbEdyYXBoCisKKwkvKioKKwkgKiBUZXN0IHRoYXQgdW5yZXNvbHZlZCBpZGVudGlmaWVycyB3ZXJlIGZvdW5kCisJICogCisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlwdWJsaWMgdm9pZCB0ZXN0R2V0VW5yZXNvbHZlZENhbm9uaWNhbEdyYXBoKCkgeworCQlmaW5hbCBNb2RlbCBtb2RlbCA9IGdldFVucmVzb2x2ZWRGaXh0dXJlKCk7CisJCVNURU1UaW1lIG5vdyA9IE1vZGVsRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlU1RFTVRpbWUoKTsKKwkJZmluYWwgR3JhcGggY2Fub25pY2FsR3JhcGggPSBtb2RlbAorCQkJCS5nZXRDYW5vbmljYWxHcmFwaChDQU5PTklDQUxfR1JBUEgxX1VSSSwgbmV3IElkZW50aWZpYWJsZUZpbHRlckltcGwobW9kZWwuZ2V0RHVibGluQ29yZSgpLmdldENvdmVyYWdlKCkpLCBub3cpOworCisJCS8vIFRoZSBVUkkgb2YgdGhlIGdyYXBoIHNob3VsZCBiZSB3aGF0IHdlIHRoaW5rIGl0IHNob3VsZCBiZQorCQlhc3NlcnRUcnVlKGNhbm9uaWNhbEdyYXBoLmdldFVSSSgpLmVxdWFscyhDQU5PTklDQUxfR1JBUEgxX1VSSSkpOworCisJCS8vIFRoZXJlIHNob3VsZCBiZSB1bnJlc29sdmVkIFVSSSByZWZlcmVuY2VzCisJCS8vIDEgZm9yIHRoZSBlZGdlIHRoYXQgY2FuJ3QgZmluZCBpdHMgbm9kZXMgYW5kIDEgZm9yIGEgTGFiZWwKKwkJLy8gdGhhdCBjYW4ndCBmaW5kIGl0cyBub2RlLgorCQlhc3NlcnRUcnVlKGNhbm9uaWNhbEdyYXBoLmdldFVucmVzb2x2ZWRJZGVudGlmaWFibGVzKCkuc2l6ZSgpID09IDEgKyAxKTsKKwkJLy8gVE9ETyByZS1kbyB0aGlzIHRlc3QKKwl9IC8vIHRlc3RHZXRVbnJlc29sdmVkQ2Fub25pY2FsR3JhcGgKKworCS8qKgorCSAqIFRlc3QgdGhlIE1vZGVsIGhhcyB0aGUgcmlnaHQgdHlwZSBVUkkuCisJICogCisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlwdWJsaWMgdm9pZCB0ZXN0R2V0VHlwZVVSSSgpIHsKKwkJZmluYWwgTW9kZWwgbW9kZWwgPSBnZXRGaXh0dXJlKCk7CisJCWZpbmFsIFVSSSB0eXBlVVJJID0gbW9kZWwuZ2V0VHlwZVVSSSgpOworCQlhc3NlcnRUcnVlKHR5cGVVUkkuc2NoZW1lKCkuZXF1YWxzKENvbnN0YW50cy5TVEVNX1RZUEVfU0NIRU1FKSk7CisJCWFzc2VydFRydWUodHlwZVVSSS5lcXVhbHMoU1RFTVVSSS5NT0RFTF9UWVBFX1VSSSkpOworCX0gLy8gdGVzdEdldFR5cGVVUkkKKworCS8qKgorCSAqIFRlc3QgdGhhdCBldmVyeXRoaW5nIGluIHRoZSBNb2RlbCBoYXMgdGhlIGNvcnJlY3QgVVJJIHNjaGVtZQorCSAqLworCXB1YmxpYyB2b2lkIHRlc3RHZXRVUklzKCkgeworCQlmaW5hbCBNb2RlbCBtb2RlbCA9IGdldEZpeHR1cmUoKTsKKwkJU1RFTVRpbWUgbm93ID0gTW9kZWxGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVTVEVNVGltZSgpOworCQlmaW5hbCBHcmFwaCBjYW5vbmljYWxHcmFwaCA9IG1vZGVsCisJCQkJLmdldENhbm9uaWNhbEdyYXBoKENBTk9OSUNBTF9HUkFQSDFfVVJJLCBuZXcgSWRlbnRpZmlhYmxlRmlsdGVySW1wbChtb2RlbC5nZXREdWJsaW5Db3JlKCkuZ2V0Q292ZXJhZ2UoKSksIG5vdyk7CisKKwkJYXNzZXJ0VHJ1ZShjYW5vbmljYWxHcmFwaC5zYW5lKCkpOworCisJCWFzc2VydFRydWUoY2Fub25pY2FsR3JhcGguZ2V0TnVtTm9kZXMoKSA+IDApOworCQlhc3NlcnRUcnVlKGNhbm9uaWNhbEdyYXBoLmdldE51bUVkZ2VzKCkgPiAwKTsKKwkJYXNzZXJ0VHJ1ZShjYW5vbmljYWxHcmFwaC5nZXROdW1Ob2RlTGFiZWxzKCkgPiAwKTsKKwkJYXNzZXJ0VHJ1ZShjYW5vbmljYWxHcmFwaC5nZXROdW1EeW5hbWljTGFiZWxzKCkgPiAwKTsKKworCQlmaW5hbCBFTGlzdCBkZWNvcmF0b3JzID0gY2Fub25pY2FsR3JhcGguZ2V0RGVjb3JhdG9ycygpOworCisJCWFzc2VydFRydWUoZGVjb3JhdG9ycy5zaXplKCkgPiAwKTsKKwkJLy8gRWRnZSBEZWNvcmF0b3JzCisJCWZvciAoZmluYWwgSXRlcmF0b3IgZWRnZURlY29yYXRvcmxJdGVyID0gZGVjb3JhdG9ycy5pdGVyYXRvcigpOyBlZGdlRGVjb3JhdG9ybEl0ZXIKKwkJCQkuaGFzTmV4dCgpOykgeworCQkJZmluYWwgRGVjb3JhdG9yIGVkZ2VEZWNvcmF0b3IgPSAoRGVjb3JhdG9yKSBlZGdlRGVjb3JhdG9ybEl0ZXIKKwkJCQkJLm5leHQoKTsKKwkJCWFzc2VydFRydWUoZWRnZURlY29yYXRvci5zYW5lKCkpOworCQl9IC8vIGZvciBlYWNoIGVkZ2UgZGVjb3JhdG9yCisKKwl9IC8vIHRlc3RHZXRVUklzCisKKwkvKioKKwkgKiBUZXN0IHRoZSBhYmlsaXR5IHRvIHNlcmlhbGl6ZSBhIG1vZGVsIGFuZCB0aGVuIGRlLXNlcmlhbGl6ZSBpdC4KKwkgKi8KKwlwdWJsaWMgdm9pZCB0ZXN0U2VyaWFsaXplRGVzZXJpYWxpemUoKSB7CisJCWZpbmFsIE1vZGVsIG1vZGVsID0gZ2V0Rml4dHVyZSgpOworCQl0cnkgeworCQkJLy8gVGhlcmUgaXMgYW4gaXNzdWUgdG8gYmUgcmVzb2x2ZWQgd2l0aCBzZXJpYWxpemF0aW9uIG9mCisJCQkvLyBub24tY29udGFpbm1lbnQgcmVmZXJlbmNlcyB0byBzdWItbW9kZWxzIGFuZCBzdWItZ3JhcGhzLiBUaGUKKwkJCS8vIGZpeHR1cmUgd2UgY3JlYXRlIGFib3ZlIGhhcyBzb21lIHRoYXQgZG8gbm90IGhhdmUgYSByZXNvdXJjZQorCQkJLy8gc3BlY2lmaWVkIHNvIHdoZW4gd2Ugc2VyaWFsaXplIHRoZSBmaXh0dXJlIHRoZXkgZG9uJ3QgZ2V0CisJCQkvLyBzZXJpYWxpemVkLiBUaGUgcmVzdWx0IGlzIHRoYXQgd2hlbiB3ZSBkZS1zZXJpYWxpemUgdGhpbmdzIGZhaWwuCisJCQkvLyBDb21tZW50IG91dCB0aGUgcmVzdCBvZiB0aGlzIHRlc3QgdW50aWwgd2UgcmVzb2x2ZSBob3cgdG8gaGFuZGxlCisJCQkvLyB0aGlzIGFzIGEgc29sdXRpb24gbWF5IGVtZXJnZSBmcm9tIGhvdyB0aGUgZWRpdG9yIGltcGxlbWVudGF0aW9ucworCQkJLy8gc2VyaWFsaXplIHRoZSB0aGluZ3MgdGhleSBjcmVhdGUuIFRoZSBzb2x1dGlvbiBtYXkgYmUgdG8KKwkJCS8vIHJlZmxlY3RpdmVseSBsb29rIGZvciBub24tY29udGFpbm1lbnQgcmVmZXJlbmNlcyB3aGVuIHNlcmlhbGl6aW5nCisJCQkvLyBhbmQgc2V0IHRoZSByZXNvdXJjZSBmb3IgdGhvc2UgaW5zdGFuY2VzIHRoYXQgZG8gbm90IGhhdmUgb25lIHNvCisJCQkvLyB0aGV5IHdpbGwgYmUgcHJvcGVybHkgc2VyaWFsaXplZCB0b28uCisJCQkKKwkJCS8vVGVzdFV0aWwuc2VyaWFsaXplSWRlbnRpZmlhYmxlKG1vZGVsLCBTRVJJQUxaQVRJT05fVEVTVF9VUkkpOworCQkJLy8gZmluYWwgUmVzb3VyY2VTZXQgcmVzb3VyY2VTZXQgPSBuZXcgUmVzb3VyY2VTZXRJbXBsKCk7CisJCQkvLyBmaW5hbCBSZXNvdXJjZSByZXNvdXJjZSA9IHJlc291cmNlU2V0LmdldFJlc291cmNlKAorCQkJLy8gU0VSSUFMWkFUSU9OX1RFU1RfVVJJLCB0cnVlKTsKKwkJCS8vCisJCQkvLyByZXNvdXJjZS5sb2FkKG51bGwpOworCQkJLy8gZmluYWwgTW9kZWwgZGVzZXJpYWxpemVkTW9kZWwgPSAoTW9kZWwpCisJCQkvLyByZXNvdXJjZS5nZXRDb250ZW50cygpLmdldCgKKwkJCS8vIDApOworCQkJLy8gYXNzZXJ0Tm90TnVsbChkZXNlcmlhbGl6ZWRNb2RlbCk7CisKKwkJfQorLy8JCQljYXRjaCAoSU9FeGNlcHRpb24gZSkgeworLy8JCQlmYWlsKGUuZ2V0TWVzc2FnZSgpKTsKKy8vCQl9IC8vIGNhdGNoCisJCWNhdGNoIChOdWxsUG9pbnRlckV4Y2VwdGlvbiBucGUpIHsKKwkJCWZhaWwobnBlLmdldE1lc3NhZ2UoKSk7CisJCX0gLy8gbnVsbCBwb2ludGVyIGV4Y2VwdGlvbgorCQljYXRjaCAoRXhjZXB0aW9uIGUpIHsKKwkJCWZhaWwoZS5nZXRNZXNzYWdlKCkpOworCQl9CisJfSAvLyB0ZXN0U2VyaWFsaXplRGVzZXJpYWxpemUKKworCS8qKgorCSAqIFBlcmZvcm0gYSBKVW5pdCBhc3NlcnQgZW5zdXJpbmcgdGhhdCBhbGwgb2YgYSBOb2RlJ3MgbGFiZWxzIHJlZmVyZW5jZSB0aGUKKwkgKiBVUkkgb2YgdGhlIG5vZGUuCisJICogCisJICogQHBhcmFtIG5vZGUKKwkgKiAgICAgICAgICAgIHRoZSBub2RlIHRvIHZlcmlmeQorCSAqLworCXByaXZhdGUgdm9pZCB2ZXJpZnlOb2RlTGFiZWxzUmVmZXJlbmNlTm9kZShmaW5hbCBOb2RlIG5vZGUpIHsKKwkJZmluYWwgRUxpc3QgbGFiZWxzID0gbm9kZS5nZXRMYWJlbHMoKTsKKwkJZmluYWwgVVJJIG5vZGVVUkkgPSBub2RlLmdldFVSSSgpOworCQlmb3IgKGZpbmFsIEl0ZXJhdG9yIG5vZGVMYWJlbEl0ZXIgPSBsYWJlbHMuaXRlcmF0b3IoKTsgbm9kZUxhYmVsSXRlcgorCQkJCS5oYXNOZXh0KCk7KSB7CisJCQlmaW5hbCBMYWJlbCBsYWJlbCA9IChMYWJlbCkgbm9kZUxhYmVsSXRlci5uZXh0KCk7CisJCQlhc3NlcnRUcnVlKCJMYWJlbCBcIiIgKyBsYWJlbC5nZXRVUkkoKQorCQkJCQkrICJcIiBkb2VzIG5vdCByZWZlcmVuY2Ugbm9kZSBcIiIgKyBub2RlVVJJLnRvU3RyaW5nKCkKKwkJCQkJKyAiXCIsIGluc3RlYWQsIGl0IHJlZmVyZW5jZXMgXCIiCisJCQkJCSsgbGFiZWwuZ2V0VVJJT2ZJZGVudGlmaWFibGVUb0JlTGFiZWxlZCgpICsgIlwiIiwgbGFiZWwKKwkJCQkJLmdldFVSSU9mSWRlbnRpZmlhYmxlVG9CZUxhYmVsZWQoKS5lcXVhbHMobm9kZVVSSSkpOworCQl9IC8vIGZvciBlYWNoIG5vZGUncyBsYWJlbAorCX0gLy8gdmVyaWZ5TGFiZWxzUmVmZXJlbmNlTm9kZQorCit9IC8vIE1vZGVsVGVzdApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvbW9kZWwvdGVzdHMvTW9kZWxUZXN0cy5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvbW9kZWwvdGVzdHMvTW9kZWxUZXN0cy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNiOGI0YTMKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9tb2RlbC90ZXN0cy9Nb2RlbFRlc3RzLmphdmEKQEAgLTAsMCArMSw1NSBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwudGVzdHM7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3Q7CitpbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RTdWl0ZTsKK2ltcG9ydCBqdW5pdC50ZXh0dWkuVGVzdFJ1bm5lcjsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogQSB0ZXN0IHN1aXRlIGZvciB0aGUgJzxlbT48Yj5tb2RlbDwvYj48L2VtPicgcGFja2FnZS4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgTW9kZWxUZXN0cyBleHRlbmRzIFRlc3RTdWl0ZSB7CisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgeworCQlUZXN0UnVubmVyLnJ1bihzdWl0ZSgpKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJcHVibGljIHN0YXRpYyBUZXN0IHN1aXRlKCkgeworCQlUZXN0U3VpdGUgc3VpdGUgPSBuZXcgTW9kZWxUZXN0cygibW9kZWwgVGVzdHMiKTsKKwkJc3VpdGUuYWRkVGVzdFN1aXRlKE1vZGVsVGVzdC5jbGFzcyk7CisJCXN1aXRlLmFkZFRlc3RTdWl0ZShTVEVNVGltZVRlc3QuY2xhc3MpOworCQlyZXR1cm4gc3VpdGU7CisJfSAvLyBzdWl0ZQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIE1vZGVsVGVzdHMoU3RyaW5nIG5hbWUpIHsKKwkJc3VwZXIobmFtZSk7CisJfQorCit9IC8vTW9kZWxUZXN0cwpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvbW9kZWwvdGVzdHMvTm9kZURlY29yYXRvclRlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL21vZGVsL3Rlc3RzL05vZGVEZWNvcmF0b3JUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzc0NTNkYQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL21vZGVsL3Rlc3RzL05vZGVEZWNvcmF0b3JUZXN0LmphdmEKQEAgLTAsMCArMSw5MCBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwudGVzdHM7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQganVuaXQudGV4dHVpLlRlc3RSdW5uZXI7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuVVJJOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5TVEVNVVJJOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5Nb2RlbEZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLk5vZGVEZWNvcmF0b3I7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gQSB0ZXN0IGNhc2UgZm9yIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5Ob2RlIERlY29yYXRvcjwvYj48L2VtPicuCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBnZW5lcmF0ZWQKKyAqLworQFN1cHByZXNzV2FybmluZ3MoImFsbCIpCitwdWJsaWMgY2xhc3MgTm9kZURlY29yYXRvclRlc3QgZXh0ZW5kcyBEZWNvcmF0b3JUZXN0IHsKKwkKKwlwdWJsaWMgc3RhdGljIFVSSSBERUNPUkFUT1JfVVJJID0gU1RFTVVSSS5jcmVhdGVVUkkoImRlY29yYXRvci9ub2RlRGVjb3JhdG9yVGVzdC5kZWNvcmF0b3IiKTsKKwkKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgeworCQlUZXN0UnVubmVyLnJ1bihOb2RlRGVjb3JhdG9yVGVzdC5jbGFzcyk7CisJfQorCisJLyoqCisJICogQ29uc3RydWN0cyBhIG5ldyBOb2RlIERlY29yYXRvciB0ZXN0IGNhc2Ugd2l0aCB0aGUgZ2l2ZW4gbmFtZS4gPCEtLQorCSAqIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIE5vZGVEZWNvcmF0b3JUZXN0KFN0cmluZyBuYW1lKSB7CisJCXN1cGVyKG5hbWUpOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIGZpeHR1cmUgZm9yIHRoaXMgTm9kZSBEZWNvcmF0b3IgdGVzdCBjYXNlLiA8IS0tCisJICogYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgTm9kZURlY29yYXRvciBnZXRGaXh0dXJlKCkgeworCQlyZXR1cm4gKE5vZGVEZWNvcmF0b3IpZml4dHVyZTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZSNzZXRVcCgpCisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgdm9pZCBzZXRVcCgpIHRocm93cyBFeGNlcHRpb24geworCQlOb2RlRGVjb3JhdG9yIGQ9IE1vZGVsRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlTm9kZURlY29yYXRvcigpOworCQlkLnNldFVSSShERUNPUkFUT1JfVVJJKTsKKwkJc2V0Rml4dHVyZShkKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZSN0ZWFyRG93bigpCisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIHRlYXJEb3duKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCXNldEZpeHR1cmUobnVsbCk7CisJfQorCisJLyoqCisJICogVGVzdCB0aGUgc2FuaXR5IG9mIHRoZSBmaXh0dXJlCisJICovCisJcHVibGljIHZvaWQgdGVzdFNhbmUoKSB7CisJCWZpbmFsIE5vZGVEZWNvcmF0b3Igbm9kZURlY29yYXRvciA9IGdldEZpeHR1cmUoKTsKKwkJYXNzZXJ0VHJ1ZShub2RlRGVjb3JhdG9yLnNhbmUoKSk7CisJfSAvLyB0ZXN0U2FuZQorCit9IC8vIE5vZGVEZWNvcmF0b3JUZXN0CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9tb2RlbC90ZXN0cy9TVEVNVGltZVRlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL21vZGVsL3Rlc3RzL1NURU1UaW1lVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRhNzk2M2EKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9tb2RlbC90ZXN0cy9TVEVNVGltZVRlc3QuamF2YQpAQCAtMCwwICsxLDE0NyBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwudGVzdHM7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOworaW1wb3J0IGp1bml0LnRleHR1aS5UZXN0UnVubmVyOworCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLk1vZGVsRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuU1RFTVRpbWU7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gQSB0ZXN0IGNhc2UgZm9yIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5TVEVNIFRpbWU8L2I+PC9lbT4nLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiA8cD4KKyAqIFRoZSBmb2xsb3dpbmcgb3BlcmF0aW9ucyBhcmUgdGVzdGVkOgorICogPHVsPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5TVEVNVGltZSNhZGRJbmNyZW1lbnQobG9uZykgPGVtPkFkZCBJbmNyZW1lbnQ8L2VtPn08L2xpPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5TVEVNVGltZSN2YWx1ZUVxdWFscyhvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuU1RFTVRpbWUpIDxlbT5WYWx1ZSBFcXVhbHM8L2VtPn08L2xpPgorICogPC91bD4KKyAqIDwvcD4KKyAqIEBnZW5lcmF0ZWQKKyAqLworQFN1cHByZXNzV2FybmluZ3MoImFsbCIpCitwdWJsaWMgY2xhc3MgU1RFTVRpbWVUZXN0IGV4dGVuZHMgVGVzdENhc2UgeworCisJLy8gT25lIGRheSdzIHdvcnRoIG9mIG1pbGxpc2Vjb25kcworCXByaXZhdGUgc3RhdGljIGZpbmFsIGxvbmcgVEVTVF9JTkNSRU1FTlQgPSAyNCAqIDYwICogNjAgKiAxMDAwOworCisJLyoqCisJICogVGhlIGZpeHR1cmUgZm9yIHRoaXMgU1RFTSBUaW1lIHRlc3QgY2FzZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tCisJICogZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgU1RFTVRpbWUgZml4dHVyZSA9IG51bGw7CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgeworCQlUZXN0UnVubmVyLnJ1bihTVEVNVGltZVRlc3QuY2xhc3MpOworCX0KKworCS8qKgorCSAqIENvbnN0cnVjdHMgYSBuZXcgU1RFTSBUaW1lIHRlc3QgY2FzZSB3aXRoIHRoZSBnaXZlbiBuYW1lLiA8IS0tCisJICogYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgU1RFTVRpbWVUZXN0KFN0cmluZyBuYW1lKSB7CisJCXN1cGVyKG5hbWUpOworCX0KKworCS8qKgorCSAqIFNldHMgdGhlIGZpeHR1cmUgZm9yIHRoaXMgU1RFTSBUaW1lIHRlc3QgY2FzZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBzZXRGaXh0dXJlKFNURU1UaW1lIGZpeHR1cmUpIHsKKwkJdGhpcy5maXh0dXJlID0gZml4dHVyZTsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBmaXh0dXJlIGZvciB0aGlzIFNURU0gVGltZSB0ZXN0IGNhc2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIFNURU1UaW1lIGdldEZpeHR1cmUoKSB7CisJCXJldHVybiBmaXh0dXJlOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlI3NldFVwKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgc2V0VXAoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJc2V0Rml4dHVyZShNb2RlbEZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZVNURU1UaW1lKCkpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlI3RlYXJEb3duKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgdGVhckRvd24oKSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJc2V0Rml4dHVyZShudWxsKTsKKwl9CisKKwkvKioKKwkgKiBUZXN0cyB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuU1RFTVRpbWUjYWRkSW5jcmVtZW50KGxvbmcpIDxlbT5BZGQgSW5jcmVtZW50PC9lbT59JworCSAqIG9wZXJhdGlvbi4gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuU1RFTVRpbWUjYWRkSW5jcmVtZW50KGxvbmcpCisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlwdWJsaWMgdm9pZCB0ZXN0QWRkSW5jcmVtZW50X19sb25nKCkgeworCQlmaW5hbCBTVEVNVGltZSBzdGFydFRpbWUgPSBnZXRGaXh0dXJlKCk7CisJCWZpbmFsIFNURU1UaW1lIG5ld1RpbWUgPSBzdGFydFRpbWUuYWRkSW5jcmVtZW50KFRFU1RfSU5DUkVNRU5UKTsKKwkJYXNzZXJ0VHJ1ZShuZXdUaW1lLmdldFRpbWUoKS5jb21wYXJlVG8oc3RhcnRUaW1lLmdldFRpbWUoKSkgPiAwKTsKKwkJYXNzZXJ0VHJ1ZShuZXdUaW1lLmdldFRpbWUoKS5nZXRUaW1lKCkgLSBzdGFydFRpbWUuZ2V0VGltZSgpLmdldFRpbWUoKSA9PSBURVNUX0lOQ1JFTUVOVCk7CisJfSAvLyB0ZXN0QWRkSW5jcmVtZW50X19sb25nCisKKwkvKioKKwkgKiBUZXN0cyB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuU1RFTVRpbWUjdmFsdWVFcXVhbHMob3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLlNURU1UaW1lKSA8ZW0+VmFsdWUgRXF1YWxzPC9lbT59JyBvcGVyYXRpb24uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5TVEVNVGltZSN2YWx1ZUVxdWFscyhvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuU1RFTVRpbWUpCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIHRlc3RWYWx1ZUVxdWFsc19fU1RFTVRpbWUoKSB7CisJCS8vIFRPRE86IGltcGxlbWVudCB0aGlzIG9wZXJhdGlvbiB0ZXN0IG1ldGhvZAorCQkvLyBFbnN1cmUgdGhhdCB5b3UgcmVtb3ZlIEBnZW5lcmF0ZWQgb3IgbWFyayBpdCBAZ2VuZXJhdGVkIE5PVAorCQlmYWlsKCk7CisJfQorCisJLyoqCisJICogVGVzdHMgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLlNURU1UaW1lI3ZhbHVlRXF1YWxzKGphdmEubGFuZy5PYmplY3QpIDxlbT5WYWx1ZSBFcXVhbHM8L2VtPn0nIG9wZXJhdGlvbi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLlNURU1UaW1lI3ZhbHVlRXF1YWxzKGphdmEubGFuZy5PYmplY3QpCisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlwdWJsaWMgdm9pZCB0ZXN0VmFsdWVFcXVhbHNfX09iamVjdCgpIHsKKwkJZmluYWwgU1RFTVRpbWUgdGltZTEgPSBnZXRGaXh0dXJlKCk7CisJCWZpbmFsIFNURU1UaW1lIHRpbWUxYSA9IGdldEZpeHR1cmUoKTsKKwkJYXNzZXJ0VHJ1ZSh0aW1lMS52YWx1ZUVxdWFscyggdGltZTFhKSk7CisJCWZpbmFsIFNURU1UaW1lIHRpbWUyID0gdGltZTFhLmFkZEluY3JlbWVudChURVNUX0lOQ1JFTUVOVCk7CisJCWFzc2VydEZhbHNlKHRpbWUxLnZhbHVlRXF1YWxzKCB0aW1lMikpOworCQkKKwl9CisKK30gLy8gU1RFTVRpbWVUZXN0CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9tb2RpZmllci90ZXN0cy9Eb3VibGVNb2RpZmllclRlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL21vZGlmaWVyL3Rlc3RzL0RvdWJsZU1vZGlmaWVyVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI1NDRkMzgKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9tb2RpZmllci90ZXN0cy9Eb3VibGVNb2RpZmllclRlc3QuamF2YQpAQCAtMCwwICsxLDEzNyBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIudGVzdHM7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTAgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQganVuaXQudGV4dHVpLlRlc3RSdW5uZXI7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzaWZpZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVjb3JlUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuRG91YmxlTW9kaWZpZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLkRvdWJsZVJhbmdlTW9kaWZpZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLk1vZGlmaWVyRmFjdG9yeTsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogQSB0ZXN0IGNhc2UgZm9yIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5Eb3VibGUgTW9kaWZpZXI8L2I+PC9lbT4nLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBEb3VibGVNb2RpZmllclRlc3QgZXh0ZW5kcyBTaW5nbGVWYWx1ZU1vZGlmaWVyVGVzdCB7CisJCisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgZG91YmxlIE9SSUdJTkFMX1ZBVUUgPSAxLjA7CisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgZG91YmxlIE5FV19WQVVFID0gMi4wOworCQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgeworCQlUZXN0UnVubmVyLnJ1bihEb3VibGVNb2RpZmllclRlc3QuY2xhc3MpOworCX0KKworCS8qKgorCSAqIENvbnN0cnVjdHMgYSBuZXcgRG91YmxlIE1vZGlmaWVyIHRlc3QgY2FzZSB3aXRoIHRoZSBnaXZlbiBuYW1lLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBEb3VibGVNb2RpZmllclRlc3QoU3RyaW5nIG5hbWUpIHsKKwkJc3VwZXIobmFtZSk7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgZml4dHVyZSBmb3IgdGhpcyBEb3VibGUgTW9kaWZpZXIgdGVzdCBjYXNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCBEb3VibGVNb2RpZmllciBnZXRGaXh0dXJlKCkgeworCQlyZXR1cm4gKERvdWJsZU1vZGlmaWVyKWZpeHR1cmU7CisJfQorCQorCS8qKgorCSAqIEByZXR1cm4gYSB7QGxpbmsgRG91YmxlUmFuZ2VNb2RpZmllcn0gcmVhZHkgZm9yIHRlc3RpbmcuCisJICovCisJcHVibGljIERvdWJsZU1vZGlmaWVyIGNyZWF0ZUZpeHR1cmUoKSB7CisJCWZpbmFsIERvdWJsZU1vZGlmaWVyIHJldFZhbHVlID0gTW9kaWZpZXJGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVEb3VibGVNb2RpZmllcigpOworCQlyZXRWYWx1ZS5zZXRPcmlnaW5hbFZhbHVlKE9SSUdJTkFMX1ZBVUUpOworCQlyZXRWYWx1ZS5zZXRWYWx1ZShORVdfVkFVRSk7CisJCXJldFZhbHVlLnNldEZlYXR1cmVOYW1lKCJEb3VibGVNb2RpZmllcl9zaW5nbGVUZXN0Iik7CisJCXJldFZhbHVlLnNldEVTdHJ1Y3R1cmFsRmVhdHVyZShnZXRUZXN0T2JqZWN0KCkuZUNsYXNzKCkKKwkJCQkuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgwKSk7CisJCQorCQlyZXR1cm4gcmV0VmFsdWU7CisJfSAvLyBjcmVhdGVGaXh0dXJlCisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlI3NldFVwKCkKKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIHNldFVwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCXN1cGVyLnNldFVwKCk7CisJCXNldEZpeHR1cmUoY3JlYXRlRml4dHVyZSgpKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlI3RlYXJEb3duKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgdGVhckRvd24oKSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJc2V0Rml4dHVyZShudWxsKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlI2dldE51bWJlck9mTW9kaWZpY2F0aW9ucygpCisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlAT3ZlcnJpZGUKKwlpbnQgZ2V0TnVtYmVyT2ZNb2RpZmljYXRpb25zKCkgeworCQlyZXR1cm4gMTsKKwl9CisKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2UjZ2V0VGVzdEF0dHJpYnV0ZUVUeXBlKCkKKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCXByb3RlY3RlZCBFQ2xhc3NpZmllciBnZXRUZXN0QXR0cmlidXRlRVR5cGUoKSB7CisJCXJldHVybiBFY29yZVBhY2thZ2UuZUlOU1RBTkNFLmdldEVEb3VibGUoKTsKKwl9IC8vIGdldFRlc3RBdHRyaWJ1dGVFVHlwZQorCisJCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIudGVzdHMuRmVhdHVyZU1vZGlmaWVyVGVzdCN2YWxpZGF0ZUZlYXR1cmVWYWx1ZShpbnQpCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIGJvb2xlYW4gdmFsaWRhdGVGZWF0dXJlVmFsdWUoaW50IGkpIHsKKwkJYXNzZXJ0VHJ1ZShpID49IDApOworCQkKKwkJZmluYWwgRG91YmxlTW9kaWZpZXIgZml4dHVyZSA9IGdldEZpeHR1cmUoKTsKKwkJT2JqZWN0IGN1cnJlbnRWYWx1ZSA9IGdldFRlc3RPYmplY3QoKS5lR2V0KGZpeHR1cmUuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlKCkpOworCisJCXJldHVybiAoY3VycmVudFZhbHVlIGluc3RhbmNlb2YgRG91YmxlKTsKKwl9IC8vIHZhbGlkYXRlRmVhdHVyZVZhbHVlCisKK30gLy9Eb3VibGVNb2RpZmllclRlc3QKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL21vZGlmaWVyL3Rlc3RzL0RvdWJsZU5PUE1vZGlmaWVyVGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvbW9kaWZpZXIvdGVzdHMvRG91YmxlTk9QTW9kaWZpZXJUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmEwM2Q5MgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL21vZGlmaWVyL3Rlc3RzL0RvdWJsZU5PUE1vZGlmaWVyVGVzdC5qYXZhCkBAIC0wLDAgKzEsMTA0IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci50ZXN0czsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqdW5pdC50ZXh0dWkuVGVzdFJ1bm5lcjsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3NpZmllcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRVN0cnVjdHVyYWxGZWF0dXJlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FY29yZVBhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLkRvdWJsZU5PUE1vZGlmaWVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5Nb2RpZmllckZhY3Rvcnk7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIEEgdGVzdCBjYXNlIGZvciB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+RG91YmxlIE5PUCBNb2RpZmllcjwvYj48L2VtPicuCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBnZW5lcmF0ZWQKKyAqLworQFN1cHByZXNzV2FybmluZ3MoImFsbCIpCitwdWJsaWMgY2xhc3MgRG91YmxlTk9QTW9kaWZpZXJUZXN0IGV4dGVuZHMgTk9QTW9kaWZpZXJUZXN0IHsKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKKwkJVGVzdFJ1bm5lci5ydW4oRG91YmxlTk9QTW9kaWZpZXJUZXN0LmNsYXNzKTsKKwl9CisKKwkvKioKKwkgKiBDb25zdHJ1Y3RzIGEgbmV3IERvdWJsZSBOT1AgTW9kaWZpZXIgdGVzdCBjYXNlIHdpdGggdGhlIGdpdmVuIG5hbWUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIERvdWJsZU5PUE1vZGlmaWVyVGVzdChTdHJpbmcgbmFtZSkgeworCQlzdXBlcihuYW1lKTsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBmaXh0dXJlIGZvciB0aGlzIERvdWJsZSBOT1AgTW9kaWZpZXIgdGVzdCBjYXNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCBEb3VibGVOT1BNb2RpZmllciBnZXRGaXh0dXJlKCkgeworCQlyZXR1cm4gKERvdWJsZU5PUE1vZGlmaWVyKWZpeHR1cmU7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZSNzZXRVcCgpCisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgdm9pZCBzZXRVcCgpIHRocm93cyBFeGNlcHRpb24geworCQlzdXBlci5zZXRVcCgpOworCQlzZXRGaXh0dXJlKGNyZWF0ZUZpeHR1cmUoKSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZSN0ZWFyRG93bigpCisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIHRlYXJEb3duKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCXNldEZpeHR1cmUobnVsbCk7CisJfQorCQorCS8qKgorCSAqIEByZXR1cm4gYSB7QGxpbmsgRG91YmxlTk9QTW9kaWZpZXJ9IHJlYWR5IGZvciB0ZXN0aW5nLgorCSAqLworCXB1YmxpYyBEb3VibGVOT1BNb2RpZmllciBjcmVhdGVGaXh0dXJlKCkgeworCQlmaW5hbCBEb3VibGVOT1BNb2RpZmllciByZXRWYWx1ZSA9IE1vZGlmaWVyRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlRG91YmxlTk9QTW9kaWZpZXIoKTsKKwkJRU9iamVjdCB0ZXN0T2JqZWN0ID0gZ2V0VGVzdE9iamVjdCgpOworCQlFU3RydWN0dXJhbEZlYXR1cmUgZmVhdHVyZSA9IHRlc3RPYmplY3QuZUNsYXNzKCkKKwkJLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMCk7CisJCXJldFZhbHVlLnNldEVTdHJ1Y3R1cmFsRmVhdHVyZShmZWF0dXJlKTsKKwkJcmV0dXJuIHJldFZhbHVlOworCX0gLy8gY3JlYXRlRml4dHVyZQorCQorCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLnRlc3RzLkZlYXR1cmVNb2RpZmllclRlc3QjZ2V0VGVzdEF0dHJpYnV0ZUVUeXBlKCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgRUNsYXNzaWZpZXIgZ2V0VGVzdEF0dHJpYnV0ZUVUeXBlKCkgeworCQlyZXR1cm4gRWNvcmVQYWNrYWdlLmVJTlNUQU5DRS5nZXRFRG91YmxlKCk7CisJfSAvLyBnZXRUZXN0QXR0cmlidXRlRVR5cGUKK30gLy9Eb3VibGVOT1BNb2RpZmllclRlc3QKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL21vZGlmaWVyL3Rlc3RzL0RvdWJsZVJhbmdlTW9kaWZpZXJUZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9tb2RpZmllci90ZXN0cy9Eb3VibGVSYW5nZU1vZGlmaWVyVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEyOGZlNDcKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9tb2RpZmllci90ZXN0cy9Eb3VibGVSYW5nZU1vZGlmaWVyVGVzdC5qYXZhCkBAIC0wLDAgKzEsMTMyIEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci50ZXN0czsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqdW5pdC50ZXh0dWkuVGVzdFJ1bm5lcjsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3NpZmllcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRWNvcmVQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5Eb3VibGVSYW5nZU1vZGlmaWVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5Nb2RpZmllckZhY3Rvcnk7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gQSB0ZXN0IGNhc2UgZm9yIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5Eb3VibGUgUmFuZ2UgTW9kaWZpZXI8L2I+PC9lbT4nLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK0BTdXBwcmVzc1dhcm5pbmdzKCJhbGwiKQorcHVibGljIGNsYXNzIERvdWJsZVJhbmdlTW9kaWZpZXJUZXN0IGV4dGVuZHMgUmFuZ2VNb2RpZmllclRlc3QgeworCisJcHVibGljIHN0YXRpYyBmaW5hbCBkb3VibGUgRFJNX1NUQVJUX1ZBTFVFID0gMTAuMDsKKwlwdWJsaWMgc3RhdGljIGZpbmFsIGRvdWJsZSBEUk1fRU5EX1ZBTFVFID0gMTIuNTsKKwlwdWJsaWMgc3RhdGljIGZpbmFsIGRvdWJsZSBEUk1fSU5DUkVNRU5UX1ZBTFVFID0gMS4wOworCisJLy8gMTAsIDExLCAxMiwgMTIuNQorCXByaXZhdGUgc3RhdGljIGZpbmFsIGRvdWJsZSBFWFBFQ1RFRF9WQUxVRVNbXSA9IG5ldyBkb3VibGVbXSB7CisJCQlEUk1fU1RBUlRfVkFMVUUsIERSTV9TVEFSVF9WQUxVRSArIERSTV9JTkNSRU1FTlRfVkFMVUUsCisJCQlEUk1fU1RBUlRfVkFMVUUgKyAyICogRFJNX0lOQ1JFTUVOVF9WQUxVRSwgRFJNX0VORF9WQUxVRSB9OworCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKKwkJVGVzdFJ1bm5lci5ydW4oRG91YmxlUmFuZ2VNb2RpZmllclRlc3QuY2xhc3MpOworCX0KKworCS8qKgorCSAqIENvbnN0cnVjdHMgYSBuZXcgRG91YmxlIFJhbmdlIE1vZGlmaWVyIHRlc3QgY2FzZSB3aXRoIHRoZSBnaXZlbiBuYW1lLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRG91YmxlUmFuZ2VNb2RpZmllclRlc3QoU3RyaW5nIG5hbWUpIHsKKwkJc3VwZXIobmFtZSk7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgZml4dHVyZSBmb3IgdGhpcyBEb3VibGUgUmFuZ2UgTW9kaWZpZXIgdGVzdCBjYXNlLiA8IS0tCisJICogYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgRG91YmxlUmFuZ2VNb2RpZmllciBnZXRGaXh0dXJlKCkgeworCQlyZXR1cm4gKERvdWJsZVJhbmdlTW9kaWZpZXIpZml4dHVyZTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAc2VlIGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZSNzZXRVcCgpCisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgdm9pZCBzZXRVcCgpIHRocm93cyBFeGNlcHRpb24geworCQlzdXBlci5zZXRVcCgpOworCQlzZXRGaXh0dXJlKGNyZWF0ZUZpeHR1cmUoKSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2UjdGVhckRvd24oKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgdm9pZCB0ZWFyRG93bigpIHRocm93cyBFeGNlcHRpb24geworCQlzZXRGaXh0dXJlKG51bGwpOworCX0KKworCS8qKgorCSAqIEByZXR1cm4gYSB7QGxpbmsgRG91YmxlUmFuZ2VNb2RpZmllcn0gcmVhZHkgZm9yIHRlc3RpbmcuCisJICovCisJcHVibGljIERvdWJsZVJhbmdlTW9kaWZpZXIgY3JlYXRlRml4dHVyZSgpIHsKKwkJZmluYWwgRG91YmxlUmFuZ2VNb2RpZmllciByZXRWYWx1ZSA9IE1vZGlmaWVyRmFjdG9yeS5lSU5TVEFOQ0UKKwkJCQkuY3JlYXRlRG91YmxlUmFuZ2VNb2RpZmllcigpOworCQlyZXRWYWx1ZS5zZXRTdGFydFZhbHVlKERSTV9TVEFSVF9WQUxVRSk7CisJCXJldFZhbHVlLnNldEVuZFZhbHVlKERSTV9FTkRfVkFMVUUpOworCQlyZXRWYWx1ZS5zZXRJbmNyZW1lbnQoRFJNX0lOQ1JFTUVOVF9WQUxVRSk7CisJCXJldFZhbHVlLnNldEVTdHJ1Y3R1cmFsRmVhdHVyZShnZXRUZXN0T2JqZWN0KCkuZUNsYXNzKCkKKwkJCQkuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgwKSk7CisJCXJldHVybiByZXRWYWx1ZTsKKwl9IC8vIGNyZWF0ZUZpeHR1cmUKKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLnRlc3RzLkZlYXR1cmVNb2RpZmllclRlc3QjZ2V0VGVzdEF0dHJpYnV0ZUVUeXBlKCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgRUNsYXNzaWZpZXIgZ2V0VGVzdEF0dHJpYnV0ZUVUeXBlKCkgeworCQlyZXR1cm4gRWNvcmVQYWNrYWdlLmVJTlNUQU5DRS5nZXRFRG91YmxlKCk7CisJfSAvLyBnZXRUZXN0QXR0cmlidXRlRVR5cGUKKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLnRlc3RzLkZlYXR1cmVNb2RpZmllclRlc3QjZ2V0TnVtYmVyT2ZNb2RpZmljYXRpb25zKCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlpbnQgZ2V0TnVtYmVyT2ZNb2RpZmljYXRpb25zKCkgeworCQlyZXR1cm4gRVhQRUNURURfVkFMVUVTLmxlbmd0aDsKKwl9IC8vIGdldE51bWJlck9mTW9kaWZpY2F0aW9ucworCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIudGVzdHMuRmVhdHVyZU1vZGlmaWVyVGVzdCN2YWxpZGF0ZUZlYXR1cmVWYWx1ZShpbnQpCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIGJvb2xlYW4gdmFsaWRhdGVGZWF0dXJlVmFsdWUoaW50IGkpIHsKKwkJYXNzZXJ0VHJ1ZShpID49IDApOworCQlhc3NlcnRUcnVlKGkgPCBFWFBFQ1RFRF9WQUxVRVMubGVuZ3RoKTsKKwkJZmluYWwgRG91YmxlUmFuZ2VNb2RpZmllciBmaXh0dXJlID0gZ2V0Rml4dHVyZSgpOworCQlEb3VibGUgY3VycmVudFZhbHVlID0gKERvdWJsZSkgZ2V0VGVzdE9iamVjdCgpLmVHZXQoCisJCQkJZml4dHVyZS5nZXRFU3RydWN0dXJhbEZlYXR1cmUoKSk7CisKKwkJcmV0dXJuIGN1cnJlbnRWYWx1ZS5kb3VibGVWYWx1ZSgpID09IEVYUEVDVEVEX1ZBTFVFU1tpXTsKKwl9IC8vIHZhbGlkYXRlRmVhdHVyZVZhbHVlCisKK30gLy8gRG91YmxlUmFuZ2VNb2RpZmllclRlc3QKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL21vZGlmaWVyL3Rlc3RzL0RvdWJsZVNlcXVlbmNlTW9kaWZpZXJUZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9tb2RpZmllci90ZXN0cy9Eb3VibGVTZXF1ZW5jZU1vZGlmaWVyVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIwNmNlOTQKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9tb2RpZmllci90ZXN0cy9Eb3VibGVTZXF1ZW5jZU1vZGlmaWVyVGVzdC5qYXZhCkBAIC0wLDAgKzEsMTM1IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci50ZXN0czsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqdW5pdC50ZXh0dWkuVGVzdFJ1bm5lcjsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3NpZmllcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRWNvcmVQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5Eb3VibGVTZXF1ZW5jZU1vZGlmaWVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5Nb2RpZmllckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLlNlcXVlbmNlTW9kaWZpZXI7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIEEgdGVzdCBjYXNlIGZvciB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+RG91YmxlIFNlcXVlbmNlIE1vZGlmaWVyPC9iPjwvZW0+Jy4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQGdlbmVyYXRlZAorICovCitAU3VwcHJlc3NXYXJuaW5ncygiYWxsIikKK3B1YmxpYyBjbGFzcyBEb3VibGVTZXF1ZW5jZU1vZGlmaWVyVGVzdCBleHRlbmRzIFNlcXVlbmNlTW9kaWZpZXJUZXN0IHsKKworCXByaXZhdGUgc3RhdGljIGZpbmFsIGRvdWJsZSBFWFBFQ1RFRF9WQUxVRVNbXSA9IG5ldyBkb3VibGVbXSB7CisJCQlEb3VibGVSYW5nZU1vZGlmaWVyVGVzdC5EUk1fU1RBUlRfVkFMVUUsCisJCQlEb3VibGVSYW5nZU1vZGlmaWVyVGVzdC5EUk1fRU5EX1ZBTFVFIH07CisKKwkKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CisJCVRlc3RSdW5uZXIucnVuKERvdWJsZVNlcXVlbmNlTW9kaWZpZXJUZXN0LmNsYXNzKTsKKwl9CisKKwkvKioKKwkgKiBDb25zdHJ1Y3RzIGEgbmV3IERvdWJsZSBTZXF1ZW5jZSBNb2RpZmllciB0ZXN0IGNhc2Ugd2l0aCB0aGUgZ2l2ZW4gbmFtZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRG91YmxlU2VxdWVuY2VNb2RpZmllclRlc3QoU3RyaW5nIG5hbWUpIHsKKwkJc3VwZXIobmFtZSk7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgZml4dHVyZSBmb3IgdGhpcyBEb3VibGUgU2VxdWVuY2UgTW9kaWZpZXIgdGVzdCBjYXNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCBEb3VibGVTZXF1ZW5jZU1vZGlmaWVyIGdldEZpeHR1cmUoKSB7CisJCXJldHVybiAoRG91YmxlU2VxdWVuY2VNb2RpZmllcilmaXh0dXJlOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2Ujc2V0VXAoKQorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgc2V0VXAoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJc3VwZXIuc2V0VXAoKTsKKwkJc2V0Rml4dHVyZShjcmVhdGVGaXh0dXJlKCkpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2UjdGVhckRvd24oKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgdm9pZCB0ZWFyRG93bigpIHRocm93cyBFeGNlcHRpb24geworCQlzZXRGaXh0dXJlKG51bGwpOworCX0KKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLnRlc3RzLlNlcXVlbmNlTW9kaWZpZXJUZXN0I2NyZWF0ZUZpeHR1cmUoKQorCSAqLworCUBTdXBwcmVzc1dhcm5pbmdzKCJib3hpbmciKQorCUBPdmVycmlkZQorCXB1YmxpYyBTZXF1ZW5jZU1vZGlmaWVyIGNyZWF0ZUZpeHR1cmUoKSB7CisJCWZpbmFsIERvdWJsZVNlcXVlbmNlTW9kaWZpZXIgcmV0VmFsdWUgPSBNb2RpZmllckZhY3RvcnkuZUlOU1RBTkNFCisJCQkJLmNyZWF0ZURvdWJsZVNlcXVlbmNlTW9kaWZpZXIoKTsKKwkJZm9yIChkb3VibGUgdmFsdWUgOiBFWFBFQ1RFRF9WQUxVRVMpIHsKKwkJCSByZXRWYWx1ZS5nZXRTZXF1ZW5jZSgpLmFkZCh2YWx1ZSk7CisJCX0gLy8gZm9yIGVhY2ggZG91YmxlCisKKwkJcmV0VmFsdWUuc2V0RVN0cnVjdHVyYWxGZWF0dXJlKGdldFRlc3RPYmplY3QoKS5lQ2xhc3MoKQorCQkJCS5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDApKTsKKwkJcmV0dXJuIHJldFZhbHVlOworCX0gLy8gY3JlYXRlRml4dHVyZQorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIudGVzdHMuRmVhdHVyZU1vZGlmaWVyVGVzdCNnZXROdW1iZXJPZk1vZGlmaWNhdGlvbnMoKQorCSAqLworCUBPdmVycmlkZQorCWludCBnZXROdW1iZXJPZk1vZGlmaWNhdGlvbnMoKSB7CisJCXJldHVybiBFWFBFQ1RFRF9WQUxVRVMubGVuZ3RoOworCX0KKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLnRlc3RzLkZlYXR1cmVNb2RpZmllclRlc3QjZ2V0VGVzdEF0dHJpYnV0ZUVUeXBlKCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgRUNsYXNzaWZpZXIgZ2V0VGVzdEF0dHJpYnV0ZUVUeXBlKCkgeworCQlyZXR1cm4gRWNvcmVQYWNrYWdlLmVJTlNUQU5DRS5nZXRFRG91YmxlKCk7CisJfQorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIudGVzdHMuRmVhdHVyZU1vZGlmaWVyVGVzdCN2YWxpZGF0ZUZlYXR1cmVWYWx1ZShpbnQpCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIGJvb2xlYW4gdmFsaWRhdGVGZWF0dXJlVmFsdWUoaW50IGkpIHsKKwkJYXNzZXJ0VHJ1ZShpID49IDApOworCQlhc3NlcnRUcnVlKGkgPCBFWFBFQ1RFRF9WQUxVRVMubGVuZ3RoKTsKKwkJZmluYWwgRG91YmxlU2VxdWVuY2VNb2RpZmllciBmaXh0dXJlID0gZ2V0Rml4dHVyZSgpOworCQlEb3VibGUgY3VycmVudFZhbHVlID0gKERvdWJsZSkgZ2V0VGVzdE9iamVjdCgpLmVHZXQoCisJCQkJZml4dHVyZS5nZXRFU3RydWN0dXJhbEZlYXR1cmUoKSk7CisJCXJldHVybiBjdXJyZW50VmFsdWUuZG91YmxlVmFsdWUoKSA9PSBFWFBFQ1RFRF9WQUxVRVNbaV07CisJfSAvLyB2YWxpZGF0ZUZlYXR1cmVWYWx1ZQorCQorfSAvL0RvdWJsZVNlcXVlbmNlTW9kaWZpZXJUZXN0CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9tb2RpZmllci90ZXN0cy9GZWF0dXJlTW9kaWZpZXJUZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9tb2RpZmllci90ZXN0cy9GZWF0dXJlTW9kaWZpZXJUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjJkYmI2OQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL21vZGlmaWVyL3Rlc3RzL0ZlYXR1cmVNb2RpZmllclRlc3QuamF2YQpAQCAtMCwwICsxLDIxOCBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIudGVzdHM7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgamF2YS51dGlsLkFycmF5czsKKworaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3NpZmllcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLlNhbml0eUNoZWNrZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLkZlYXR1cmVNb2RpZmllcjsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiBBIHRlc3QgY2FzZSBmb3IgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPkZlYXR1cmUgTW9kaWZpZXI8L2I+PC9lbT4nLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiA8cD4KKyAqIFRoZSBmb2xsb3dpbmcgZmVhdHVyZXMgYXJlIHRlc3RlZDoKKyAqIDx1bD4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuRmVhdHVyZU1vZGlmaWVyI2lzQ29tcGxldGUoKSA8ZW0+Q29tcGxldGU8L2VtPn08L2xpPgorICogPC91bD4KKyAqIDwvcD4KKyAqIDxwPgorICogVGhlIGZvbGxvd2luZyBvcGVyYXRpb25zIGFyZSB0ZXN0ZWQ6CisgKiA8dWw+CisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLkZlYXR1cmVNb2RpZmllciN1cGRhdGVGZWF0dXJlKCkgPGVtPlVwZGF0ZSBGZWF0dXJlPC9lbT59PC9saT4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuRmVhdHVyZU1vZGlmaWVyI3Jlc2V0KCkgPGVtPlJlc2V0PC9lbT59PC9saT4KKyAqIDwvdWw+CisgKiA8L3A+CisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBhYnN0cmFjdCBjbGFzcyBGZWF0dXJlTW9kaWZpZXJUZXN0IGV4dGVuZHMgVGVzdENhc2UgeworCisJcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgU1RSVUNUVVJBTF9GRUFUVVJFX05BTUUgPSAiYXR0cmlidXRlIjsKKworCS8qKgorCSAqIFRoZSBmaXh0dXJlIGZvciB0aGlzIEZlYXR1cmUgTW9kaWZpZXIgdGVzdCBjYXNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBGZWF0dXJlTW9kaWZpZXIgZml4dHVyZSA9IG51bGw7CisKKwkvKioKKwkgKiBUaGUgb2JqZWN0IHRvIGJlIG1vZGlmaWVkLgorCSAqLworCXByb3RlY3RlZCBFT2JqZWN0IHRlc3RPYmplY3QgPSBudWxsOworCisJLyoqCisJICogQ29uc3RydWN0cyBhIG5ldyBGZWF0dXJlIE1vZGlmaWVyIHRlc3QgY2FzZSB3aXRoIHRoZSBnaXZlbiBuYW1lLiA8IS0tCisJICogYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRmVhdHVyZU1vZGlmaWVyVGVzdChTdHJpbmcgbmFtZSkgeworCQlzdXBlcihuYW1lKTsKKwl9CisKKwkvKioKKwkgKiBAc2VlIGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZSNzZXRVcCgpCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgc2V0VXAoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJc3VwZXIuc2V0VXAoKTsKKwkJdGVzdE9iamVjdCA9IGNyZWF0ZVRlc3RPYmplY3QoKTsKKwl9CisKKwkvKioKKwkgKiBTZXRzIHRoZSBmaXh0dXJlIGZvciB0aGlzIEZlYXR1cmUgTW9kaWZpZXIgdGVzdCBjYXNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MKKwkgKiAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIHNldEZpeHR1cmUoRmVhdHVyZU1vZGlmaWVyIGZpeHR1cmUpIHsKKwkJdGhpcy5maXh0dXJlID0gZml4dHVyZTsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBmaXh0dXJlIGZvciB0aGlzIEZlYXR1cmUgTW9kaWZpZXIgdGVzdCBjYXNlLiA8IS0tCisJICogYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgRmVhdHVyZU1vZGlmaWVyIGdldEZpeHR1cmUoKSB7CisJCXJldHVybiBmaXh0dXJlOworCX0KKworCXByb3RlY3RlZCBFT2JqZWN0IGdldFRlc3RPYmplY3QoKSB7CisJCXJldHVybiB0ZXN0T2JqZWN0OworCX0gLy8gZ2V0VGVzdE9iamVjdAorCisJLyoqCisJICogVGVzdCB0aGF0IHRoZSBmaXh0dXJlIGlzICJzYW5lIgorCSAqIAorCSAqIEBzZWUgU2FuaXR5Q2hlY2tlcgorCSAqLworCXB1YmxpYyB2b2lkIHRlc3RGaXh0dXJlU2FuaXR5KCkgeworCQlmaW5hbCBTYW5pdHlDaGVja2VyIGZpeHR1cmUgPSBnZXRGaXh0dXJlKCk7CisJCWFzc2VydFRydWUoZml4dHVyZS5zYW5lKCkpOworCX0gLy8gdGVzdEZpeHR1cmVTYW5pdHkKKworCS8qKgorCSAqIFRlc3RzIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5GZWF0dXJlTW9kaWZpZXIjZ2V0TW9kaWZpY2F0aW9uU3VtbWFyeSgpIDxlbT5Nb2RpZmljYXRpb24gU3VtbWFyeTwvZW0+fScKKwkgKiBmZWF0dXJlIGdldHRlci4gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuRmVhdHVyZU1vZGlmaWVyI2dldE1vZGlmaWNhdGlvblN1bW1hcnkoKQorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJcHVibGljIHZvaWQgdGVzdEdldE1vZGlmaWNhdGlvblN1bW1hcnkoKSB7CisJCWZpbmFsIEZlYXR1cmVNb2RpZmllciBmaXh0dXJlID0gZ2V0Rml4dHVyZSgpOworCQlmaW5hbCBFT2JqZWN0IHRlc3RPYmplY3QgPSBnZXRUZXN0T2JqZWN0KCk7CisJCWZpeHR1cmUuc2V0VGFyZ2V0KHRlc3RPYmplY3QpOworCQkKKwkJZmluYWwgaW50IG51bWJlck9mTW9kaWZpY2F0aW9ucyA9IGdldE51bWJlck9mTW9kaWZpY2F0aW9ucygpOworCQlmb3IgKGludCBpID0gMDsgaSA8IG51bWJlck9mTW9kaWZpY2F0aW9uczsgaSsrKSB7CisJCQlhc3NlcnRGYWxzZShmaXh0dXJlLmlzQ29tcGxldGUoKSk7CisJCQlmaXh0dXJlLnVwZGF0ZUZlYXR1cmUoKTsKKwkJCWZpbmFsIFN0cmluZyB0ZW1wID0gZml4dHVyZS5nZXRNb2RpZmljYXRpb25TdW1tYXJ5KCk7CisJCQlhc3NlcnROb3ROdWxsKHRlbXApOworCQkJYXNzZXJ0RmFsc2UodGVtcC5lcXVhbHMoIiIpKTsKKwkJfSAvLyBmb3IgaQorCQlhc3NlcnRUcnVlKGZpeHR1cmUuaXNDb21wbGV0ZSgpKTsKKworCX0gLy8gdGVzdEdldE1vZGlmaWNhdGlvblN1bW1hcnkKKworCS8qKgorCSAqIFRlc3RzIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5GZWF0dXJlTW9kaWZpZXIjaXNDb21wbGV0ZSgpIDxlbT5Db21wbGV0ZTwvZW0+fScKKwkgKiBmZWF0dXJlIGdldHRlci4gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuRmVhdHVyZU1vZGlmaWVyI2lzQ29tcGxldGUoKQorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJcHVibGljIHZvaWQgdGVzdElzQ29tcGxldGUoKSB7CisJCWZpbmFsIEZlYXR1cmVNb2RpZmllciBmaXh0dXJlID0gZ2V0Rml4dHVyZSgpOworCQlmaW5hbCBFT2JqZWN0IHRlc3RPYmplY3QgPSBnZXRUZXN0T2JqZWN0KCk7CisJCWZpeHR1cmUuc2V0VGFyZ2V0KHRlc3RPYmplY3QpOworCisJCWZpbmFsIGludCBudW1iZXJPZk1vZGlmaWNhdGlvbnMgPSBnZXROdW1iZXJPZk1vZGlmaWNhdGlvbnMoKTsKKwkJZm9yIChpbnQgaSA9IDA7IGkgPCBudW1iZXJPZk1vZGlmaWNhdGlvbnM7IGkrKykgeworCQkJYXNzZXJ0RmFsc2UoZml4dHVyZS5pc0NvbXBsZXRlKCkpOworCQkJZml4dHVyZS51cGRhdGVGZWF0dXJlKCk7CisJCX0gLy8gZm9yIGkKKwkJYXNzZXJ0VHJ1ZShmaXh0dXJlLmlzQ29tcGxldGUoKSk7CisJfSAvLyB0ZXN0SXNDb21wbGV0ZQorCisJLyoqCisJICogVGVzdHMgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLkZlYXR1cmVNb2RpZmllciN1cGRhdGVGZWF0dXJlKCkgPGVtPlVwZGF0ZSBGZWF0dXJlPC9lbT59JworCSAqIG9wZXJhdGlvbi4gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuRmVhdHVyZU1vZGlmaWVyI3VwZGF0ZUZlYXR1cmUoKQorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJcHVibGljIHZvaWQgdGVzdFVwZGF0ZUZlYXR1cmUoKSB7CisJCWZpbmFsIEZlYXR1cmVNb2RpZmllciBmaXh0dXJlID0gZ2V0Rml4dHVyZSgpOworCQlmaW5hbCBFT2JqZWN0IHRlc3RPYmplY3QgPSBnZXRUZXN0T2JqZWN0KCk7CisJCWZpeHR1cmUuc2V0VGFyZ2V0KHRlc3RPYmplY3QpOworCisJCWZpbmFsIGludCBudW1iZXJPZk1vZGlmaWNhdGlvbnMgPSBnZXROdW1iZXJPZk1vZGlmaWNhdGlvbnMoKTsKKwkJZm9yIChpbnQgaSA9IDA7IGkgPCBudW1iZXJPZk1vZGlmaWNhdGlvbnM7IGkrKykgeworCQkJYXNzZXJ0RmFsc2UoZml4dHVyZS5pc0NvbXBsZXRlKCkpOworCQkJZml4dHVyZS51cGRhdGVGZWF0dXJlKCk7CisJCQlhc3NlcnRUcnVlKHZhbGlkYXRlRmVhdHVyZVZhbHVlKGkpKTsKKwkJfSAvLyBmb3IgaQorCQlhc3NlcnRUcnVlKGZpeHR1cmUuaXNDb21wbGV0ZSgpKTsKKwl9IC8vIHRlc3RVcGRhdGVGZWF0dXJlCisKKwkvKioKKwkgKiBUZXN0cyB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuRmVhdHVyZU1vZGlmaWVyI3Jlc2V0KCkgPGVtPlJlc2V0PC9lbT59JyBvcGVyYXRpb24uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5GZWF0dXJlTW9kaWZpZXIjcmVzZXQoKQorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJcHVibGljIHZvaWQgdGVzdFJlc2V0KCkgeworCQlmaW5hbCBGZWF0dXJlTW9kaWZpZXIgZml4dHVyZSA9IGdldEZpeHR1cmUoKTsKKwkJZmluYWwgRU9iamVjdCB0ZXN0T2JqZWN0ID0gZ2V0VGVzdE9iamVjdCgpOworCQlmaXh0dXJlLnNldFRhcmdldCh0ZXN0T2JqZWN0KTsKKwkJLy8gVE9ETyBpbXBsZW1lbnQgRmVhdHVyZU1vZGlmaWVyVGVzdC50ZXN0UmVzZXQoKQorCQlhc3NlcnRUcnVlKHRydWUpOworCX0gLy8gdGVzdFJlc2V0CisKKwkvKioKKwkgKiBAcmV0dXJuIGFuIHtAbGluayBFT2JqZWN0fSB0byBiZSBtb2RpZmllZAorCSAqLworCXByb3RlY3RlZCBFT2JqZWN0IGNyZWF0ZVRlc3RPYmplY3QoKSB7CisJCXJldHVybiBNb2RpZmllclRlc3QuY3JlYXRlVGVzdE9iamVjdCgiVGVzdENsYXNzIiwgQXJyYXlzCisJCQkJLmFzTGlzdChnZXRUZXN0QXR0cmlidXRlRVR5cGUoKSkpOworCX0gLy8gY3JlYXRlVGVzdE9iamVjdAorCisJLyoqCisJICogQHJldHVybiB0aGUge0BsaW5rIEVDbGFzc2lmaWVyfSBvZiB0aGF0IGlzIHRoZSB0eXBlIG9mIHRoZSBhdHRyaWJ1dGUgaW4KKwkgKiAgICAgICAgIHRoZSB0ZXN0IG9iamVjdC4KKwkgKi8KKwlhYnN0cmFjdCBwcm90ZWN0ZWQgRUNsYXNzaWZpZXIgZ2V0VGVzdEF0dHJpYnV0ZUVUeXBlKCk7CisKKwkvKioKKwkgKiBAcmV0dXJuIHRoZSBudW1iZXIgb2YgbW9kaWZpY2F0aW9ucyB0aGUge0BsaW5rIEZlYXR1cmVNb2RpZmllcn0gd2lsbCBtYWtlCisJICogICAgICAgICB0byB0aGUgdGVzdCBvYmplY3QuCisJICovCisJYWJzdHJhY3QgaW50IGdldE51bWJlck9mTW9kaWZpY2F0aW9ucygpOworCisJLyoqCisJICogQHBhcmFtIGkKKwkgKiBAcmV0dXJuIDxjb2RlPnRydWU8L2NvZGU+IGlmIHRoZSBmZWF0dXJlIHZhbHVlIG1hdGNoZXMgdGhlIGkndGgKKwkgKiAgICAgICAgIGV4cGVjdGVkIHZhbHVlLgorCSAqLworCWFic3RyYWN0IHByb3RlY3RlZCBib29sZWFuIHZhbGlkYXRlRmVhdHVyZVZhbHVlKGludCBpKTsKKworfSAvLyBGZWF0dXJlTW9kaWZpZXJUZXN0CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9tb2RpZmllci90ZXN0cy9JbnRlZ2VyTW9kaWZpZXJUZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9tb2RpZmllci90ZXN0cy9JbnRlZ2VyTW9kaWZpZXJUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzNjNzhkYgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL21vZGlmaWVyL3Rlc3RzL0ludGVnZXJNb2RpZmllclRlc3QuamF2YQpAQCAtMCwwICsxLDEzNiBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIudGVzdHM7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTAgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQganVuaXQudGV4dHVpLlRlc3RSdW5uZXI7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzaWZpZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVjb3JlUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuSW50ZWdlck1vZGlmaWVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5JbnRlZ2VyUmFuZ2VNb2RpZmllcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuTW9kaWZpZXJGYWN0b3J5OworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiBBIHRlc3QgY2FzZSBmb3IgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPkludGVnZXIgTW9kaWZpZXI8L2I+PC9lbT4nLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBJbnRlZ2VyTW9kaWZpZXJUZXN0IGV4dGVuZHMgU2luZ2xlVmFsdWVNb2RpZmllclRlc3QgeworCQorCXByaXZhdGUgc3RhdGljIGZpbmFsIGludCBPUklHSU5BTF9WQVVFID0gMTsKKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgTkVXX1ZBVUUgPSAyOworCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgeworCQlUZXN0UnVubmVyLnJ1bihJbnRlZ2VyTW9kaWZpZXJUZXN0LmNsYXNzKTsKKwl9CisKKwkvKioKKwkgKiBDb25zdHJ1Y3RzIGEgbmV3IEludGVnZXIgTW9kaWZpZXIgdGVzdCBjYXNlIHdpdGggdGhlIGdpdmVuIG5hbWUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEludGVnZXJNb2RpZmllclRlc3QoU3RyaW5nIG5hbWUpIHsKKwkJc3VwZXIobmFtZSk7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgZml4dHVyZSBmb3IgdGhpcyBJbnRlZ2VyIE1vZGlmaWVyIHRlc3QgY2FzZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgSW50ZWdlck1vZGlmaWVyIGdldEZpeHR1cmUoKSB7CisJCXJldHVybiAoSW50ZWdlck1vZGlmaWVyKWZpeHR1cmU7CisJfQorCQorCisJLyoqCisJICogQHJldHVybiBhIHtAbGluayBJbnRlZ2VyUmFuZ2VNb2RpZmllcn0gcmVhZHkgZm9yIHRlc3RpbmcuCisJICovCisJcHVibGljIEludGVnZXJNb2RpZmllciBjcmVhdGVGaXh0dXJlKCkgeworCQlmaW5hbCBJbnRlZ2VyTW9kaWZpZXIgcmV0VmFsdWUgPSBNb2RpZmllckZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZUludGVnZXJNb2RpZmllcigpOworCQlyZXRWYWx1ZS5zZXRPcmlnaW5hbFZhbHVlKE9SSUdJTkFMX1ZBVUUpOworCQlyZXRWYWx1ZS5zZXRWYWx1ZShORVdfVkFVRSk7CisJCXJldFZhbHVlLnNldEZlYXR1cmVOYW1lKCJJbnRlZ2VyTW9kaWZpZXJfc2luZ2xlVGVzdCIpOworCQlyZXRWYWx1ZS5zZXRFU3RydWN0dXJhbEZlYXR1cmUoZ2V0VGVzdE9iamVjdCgpLmVDbGFzcygpCisJCQkJLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMCkpOworCQkKKwkJcmV0dXJuIHJldFZhbHVlOworCX0gLy8gY3JlYXRlRml4dHVyZQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZSNzZXRVcCgpCisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgdm9pZCBzZXRVcCgpIHRocm93cyBFeGNlcHRpb24geworCQlzdXBlci5zZXRVcCgpOworCQlzZXRGaXh0dXJlKGNyZWF0ZUZpeHR1cmUoKSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZSN0ZWFyRG93bigpCisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIHRlYXJEb3duKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCXNldEZpeHR1cmUobnVsbCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZSNnZXROdW1iZXJPZk1vZGlmaWNhdGlvbnMoKQorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJaW50IGdldE51bWJlck9mTW9kaWZpY2F0aW9ucygpIHsKKwkJcmV0dXJuIDE7CisJfQorCisJCisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlI2dldFRlc3RBdHRyaWJ1dGVFVHlwZSgpCisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlwcm90ZWN0ZWQgRUNsYXNzaWZpZXIgZ2V0VGVzdEF0dHJpYnV0ZUVUeXBlKCkgeworCQlyZXR1cm4gRWNvcmVQYWNrYWdlLmVJTlNUQU5DRS5nZXRFSW50KCk7CisJfSAvLyBnZXRUZXN0QXR0cmlidXRlRVR5cGUKKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLnRlc3RzLkZlYXR1cmVNb2RpZmllclRlc3QjdmFsaWRhdGVGZWF0dXJlVmFsdWUoaW50KQorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCBib29sZWFuIHZhbGlkYXRlRmVhdHVyZVZhbHVlKGludCBpKSB7CisJCWFzc2VydFRydWUoaSA+PSAwKTsKKwkJCisJCWZpbmFsIEludGVnZXJNb2RpZmllciBmaXh0dXJlID0gZ2V0Rml4dHVyZSgpOworCQlPYmplY3QgY3VycmVudFZhbHVlID0gZ2V0VGVzdE9iamVjdCgpLmVHZXQoZml4dHVyZS5nZXRFU3RydWN0dXJhbEZlYXR1cmUoKSk7CisKKwkJcmV0dXJuIChjdXJyZW50VmFsdWUgaW5zdGFuY2VvZiBJbnRlZ2VyKTsKKwl9IC8vIHZhbGlkYXRlRmVhdHVyZVZhbHVlCisKK30gLy9JbnRlZ2VyTW9kaWZpZXJUZXN0CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9tb2RpZmllci90ZXN0cy9JbnRlZ2VyTk9QTW9kaWZpZXJUZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9tb2RpZmllci90ZXN0cy9JbnRlZ2VyTk9QTW9kaWZpZXJUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjhiZTliNAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL21vZGlmaWVyL3Rlc3RzL0ludGVnZXJOT1BNb2RpZmllclRlc3QuamF2YQpAQCAtMCwwICsxLDEwNCBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIudGVzdHM7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQganVuaXQudGV4dHVpLlRlc3RSdW5uZXI7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzaWZpZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3Q7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVTdHJ1Y3R1cmFsRmVhdHVyZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRWNvcmVQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5JbnRlZ2VyTk9QTW9kaWZpZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLk1vZGlmaWVyRmFjdG9yeTsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogQSB0ZXN0IGNhc2UgZm9yIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5JbnRlZ2VyIE5PUCBNb2RpZmllcjwvYj48L2VtPicuCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBnZW5lcmF0ZWQKKyAqLworQFN1cHByZXNzV2FybmluZ3MoImFsbCIpCitwdWJsaWMgY2xhc3MgSW50ZWdlck5PUE1vZGlmaWVyVGVzdCBleHRlbmRzIE5PUE1vZGlmaWVyVGVzdCB7CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CisJCVRlc3RSdW5uZXIucnVuKEludGVnZXJOT1BNb2RpZmllclRlc3QuY2xhc3MpOworCX0KKworCS8qKgorCSAqIENvbnN0cnVjdHMgYSBuZXcgSW50ZWdlciBOT1AgTW9kaWZpZXIgdGVzdCBjYXNlIHdpdGggdGhlIGdpdmVuIG5hbWUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEludGVnZXJOT1BNb2RpZmllclRlc3QoU3RyaW5nIG5hbWUpIHsKKwkJc3VwZXIobmFtZSk7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgZml4dHVyZSBmb3IgdGhpcyBJbnRlZ2VyIE5PUCBNb2RpZmllciB0ZXN0IGNhc2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIEludGVnZXJOT1BNb2RpZmllciBnZXRGaXh0dXJlKCkgeworCQlyZXR1cm4gKEludGVnZXJOT1BNb2RpZmllcilmaXh0dXJlOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2Ujc2V0VXAoKQorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgc2V0VXAoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJc3VwZXIuc2V0VXAoKTsKKwkJc2V0Rml4dHVyZShjcmVhdGVGaXh0dXJlKCkpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2UjdGVhckRvd24oKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgdm9pZCB0ZWFyRG93bigpIHRocm93cyBFeGNlcHRpb24geworCQlzZXRGaXh0dXJlKG51bGwpOworCX0KKwkKKwkvKioKKwkgKiBAcmV0dXJuIGEge0BsaW5rIEludGVnZXJOT1BNb2RpZmllcn0gcmVhZHkgZm9yIHRlc3RpbmcuCisJICovCisJcHVibGljIEludGVnZXJOT1BNb2RpZmllciBjcmVhdGVGaXh0dXJlKCkgeworCQlmaW5hbCBJbnRlZ2VyTk9QTW9kaWZpZXIgcmV0VmFsdWUgPSBNb2RpZmllckZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZUludGVnZXJOT1BNb2RpZmllcigpOworCQlFT2JqZWN0IHRlc3RPYmplY3QgPSBnZXRUZXN0T2JqZWN0KCk7CisJCUVTdHJ1Y3R1cmFsRmVhdHVyZSBmZWF0dXJlID0gdGVzdE9iamVjdC5lQ2xhc3MoKQorCQkuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgwKTsKKwkJcmV0VmFsdWUuc2V0RVN0cnVjdHVyYWxGZWF0dXJlKGZlYXR1cmUpOworCQlyZXR1cm4gcmV0VmFsdWU7CisJfSAvLyBjcmVhdGVGaXh0dXJlCisJCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIudGVzdHMuRmVhdHVyZU1vZGlmaWVyVGVzdCNnZXRUZXN0QXR0cmlidXRlRVR5cGUoKQorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCBFQ2xhc3NpZmllciBnZXRUZXN0QXR0cmlidXRlRVR5cGUoKSB7CisJCXJldHVybiBFY29yZVBhY2thZ2UuZUlOU1RBTkNFLmdldEVJbnQoKTsKKwl9Cit9IC8vSW50ZWdlck5PUE1vZGlmaWVyVGVzdApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvbW9kaWZpZXIvdGVzdHMvSW50ZWdlclJhbmdlTW9kaWZpZXJUZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9tb2RpZmllci90ZXN0cy9JbnRlZ2VyUmFuZ2VNb2RpZmllclRlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYTEzZmYxCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvbW9kaWZpZXIvdGVzdHMvSW50ZWdlclJhbmdlTW9kaWZpZXJUZXN0LmphdmEKQEAgLTAsMCArMSwxMzAgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLnRlc3RzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGp1bml0LnRleHR1aS5UZXN0UnVubmVyOworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzc2lmaWVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FY29yZVBhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLkludGVnZXJSYW5nZU1vZGlmaWVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5Nb2RpZmllckZhY3Rvcnk7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gQSB0ZXN0IGNhc2UgZm9yIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5JbnRlZ2VyIFJhbmdlIE1vZGlmaWVyPC9iPjwvZW0+Jy4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQGdlbmVyYXRlZAorICovCitAU3VwcHJlc3NXYXJuaW5ncygiYWxsIikKK3B1YmxpYyBjbGFzcyBJbnRlZ2VyUmFuZ2VNb2RpZmllclRlc3QgZXh0ZW5kcyBSYW5nZU1vZGlmaWVyVGVzdCB7CisKKwlwdWJsaWMgc3RhdGljIGZpbmFsIGludCBJUk1fU1RBUlRfVkFMVUUgPSAyMDsKKwlwdWJsaWMgc3RhdGljIGZpbmFsIGludCBJUk1fRU5EX1ZBTFVFID0gMjI7CisJcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgSVJNX0lOQ1JFTUVOVF9WQUxVRSA9IDE7CisKKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgRVhQRUNURURfVkFMVUVTW10gPSBuZXcgaW50W10geyBJUk1fU1RBUlRfVkFMVUUsCisJCQlJUk1fU1RBUlRfVkFMVUUgKyBJUk1fSU5DUkVNRU5UX1ZBTFVFLCBJUk1fRU5EX1ZBTFVFIH07CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgeworCQlUZXN0UnVubmVyLnJ1bihJbnRlZ2VyUmFuZ2VNb2RpZmllclRlc3QuY2xhc3MpOworCX0KKworCS8qKgorCSAqIENvbnN0cnVjdHMgYSBuZXcgSW50ZWdlciBSYW5nZSBNb2RpZmllciB0ZXN0IGNhc2Ugd2l0aCB0aGUgZ2l2ZW4gbmFtZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEludGVnZXJSYW5nZU1vZGlmaWVyVGVzdChTdHJpbmcgbmFtZSkgeworCQlzdXBlcihuYW1lKTsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBmaXh0dXJlIGZvciB0aGlzIEludGVnZXIgUmFuZ2UgTW9kaWZpZXIgdGVzdCBjYXNlLiA8IS0tCisJICogYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgSW50ZWdlclJhbmdlTW9kaWZpZXIgZ2V0Rml4dHVyZSgpIHsKKwkJcmV0dXJuIChJbnRlZ2VyUmFuZ2VNb2RpZmllcilmaXh0dXJlOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBzZWUganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlI3NldFVwKCkKKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIHNldFVwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCXN1cGVyLnNldFVwKCk7CisJCXNldEZpeHR1cmUoY3JlYXRlRml4dHVyZSgpKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZSN0ZWFyRG93bigpCisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIHRlYXJEb3duKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCXNldEZpeHR1cmUobnVsbCk7CisJfQorCisJLyoqCisJICogQHJldHVybiBhIHtAbGluayBJbnRlZ2VyUmFuZ2VNb2RpZmllcn0gcmVhZHkgZm9yIHRlc3RpbmcuCisJICovCisJcHVibGljIEludGVnZXJSYW5nZU1vZGlmaWVyIGNyZWF0ZUZpeHR1cmUoKSB7CisJCWZpbmFsIEludGVnZXJSYW5nZU1vZGlmaWVyIHJldFZhbHVlID0gTW9kaWZpZXJGYWN0b3J5LmVJTlNUQU5DRQorCQkJCS5jcmVhdGVJbnRlZ2VyUmFuZ2VNb2RpZmllcigpOworCQlyZXRWYWx1ZS5zZXRTdGFydFZhbHVlKElSTV9TVEFSVF9WQUxVRSk7CisJCXJldFZhbHVlLnNldEVuZFZhbHVlKElSTV9FTkRfVkFMVUUpOworCQlyZXRWYWx1ZS5zZXRJbmNyZW1lbnQoSVJNX0lOQ1JFTUVOVF9WQUxVRSk7CisJCXJldFZhbHVlLnNldEVTdHJ1Y3R1cmFsRmVhdHVyZShnZXRUZXN0T2JqZWN0KCkuZUNsYXNzKCkKKwkJCQkuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgwKSk7CisJCXJldHVybiByZXRWYWx1ZTsKKwl9IC8vIGNyZWF0ZUZpeHR1cmUKKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLnRlc3RzLkZlYXR1cmVNb2RpZmllclRlc3QjZ2V0VGVzdEF0dHJpYnV0ZUVUeXBlKCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgRUNsYXNzaWZpZXIgZ2V0VGVzdEF0dHJpYnV0ZUVUeXBlKCkgeworCQlyZXR1cm4gRWNvcmVQYWNrYWdlLmVJTlNUQU5DRS5nZXRFSW50KCk7CisJfQorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIudGVzdHMuRmVhdHVyZU1vZGlmaWVyVGVzdCNnZXROdW1iZXJPZk1vZGlmaWNhdGlvbnMoKQorCSAqLworCUBPdmVycmlkZQorCWludCBnZXROdW1iZXJPZk1vZGlmaWNhdGlvbnMoKSB7CisJCXJldHVybiBFWFBFQ1RFRF9WQUxVRVMubGVuZ3RoOworCX0gLy8gZ2V0TnVtYmVyT2ZNb2RpZmljYXRpb25zCisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci50ZXN0cy5GZWF0dXJlTW9kaWZpZXJUZXN0I3ZhbGlkYXRlRmVhdHVyZVZhbHVlKGludCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgYm9vbGVhbiB2YWxpZGF0ZUZlYXR1cmVWYWx1ZShpbnQgaSkgeworCQlhc3NlcnRUcnVlKGkgPj0gMCk7CisJCWFzc2VydFRydWUoaSA8IEVYUEVDVEVEX1ZBTFVFUy5sZW5ndGgpOworCQlmaW5hbCBJbnRlZ2VyUmFuZ2VNb2RpZmllciBmaXh0dXJlID0gZ2V0Rml4dHVyZSgpOworCQlJbnRlZ2VyIGN1cnJlbnRWYWx1ZSA9IChJbnRlZ2VyKSBnZXRUZXN0T2JqZWN0KCkuZUdldCgKKwkJCQlmaXh0dXJlLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZSgpKTsKKworCQlyZXR1cm4gY3VycmVudFZhbHVlLmludFZhbHVlKCkgPT0gRVhQRUNURURfVkFMVUVTW2ldOworCX0gLy8gdmFsaWRhdGVGZWF0dXJlVmFsdWUKKworfSAvLyBJbnRlZ2VyUmFuZ2VNb2RpZmllclRlc3QKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL21vZGlmaWVyL3Rlc3RzL0ludGVnZXJTZXF1ZW5jZU1vZGlmaWVyVGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvbW9kaWZpZXIvdGVzdHMvSW50ZWdlclNlcXVlbmNlTW9kaWZpZXJUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjQ1Nzg2NAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL21vZGlmaWVyL3Rlc3RzL0ludGVnZXJTZXF1ZW5jZU1vZGlmaWVyVGVzdC5qYXZhCkBAIC0wLDAgKzEsMTM1IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci50ZXN0czsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqdW5pdC50ZXh0dWkuVGVzdFJ1bm5lcjsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3NpZmllcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRWNvcmVQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5JbnRlZ2VyU2VxdWVuY2VNb2RpZmllcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuTW9kaWZpZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5TZXF1ZW5jZU1vZGlmaWVyOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiBBIHRlc3QgY2FzZSBmb3IgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPkludGVnZXIgU2VxdWVuY2UgTW9kaWZpZXI8L2I+PC9lbT4nLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK0BTdXBwcmVzc1dhcm5pbmdzKCJhbGwiKQorcHVibGljIGNsYXNzIEludGVnZXJTZXF1ZW5jZU1vZGlmaWVyVGVzdCBleHRlbmRzIFNlcXVlbmNlTW9kaWZpZXJUZXN0IHsKKworCXByaXZhdGUgc3RhdGljIGZpbmFsIGludCBFWFBFQ1RFRF9WQUxVRVNbXSA9IG5ldyBpbnRbXSB7CisJCUludGVnZXJSYW5nZU1vZGlmaWVyVGVzdC5JUk1fU1RBUlRfVkFMVUUsCisJCUludGVnZXJSYW5nZU1vZGlmaWVyVGVzdC5JUk1fRU5EX1ZBTFVFIH07CisKKwkKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CisJCVRlc3RSdW5uZXIucnVuKEludGVnZXJTZXF1ZW5jZU1vZGlmaWVyVGVzdC5jbGFzcyk7CisJfQorCisJLyoqCisJICogQ29uc3RydWN0cyBhIG5ldyBJbnRlZ2VyIFNlcXVlbmNlIE1vZGlmaWVyIHRlc3QgY2FzZSB3aXRoIHRoZSBnaXZlbiBuYW1lLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBJbnRlZ2VyU2VxdWVuY2VNb2RpZmllclRlc3QoU3RyaW5nIG5hbWUpIHsKKwkJc3VwZXIobmFtZSk7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgZml4dHVyZSBmb3IgdGhpcyBJbnRlZ2VyIFNlcXVlbmNlIE1vZGlmaWVyIHRlc3QgY2FzZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgSW50ZWdlclNlcXVlbmNlTW9kaWZpZXIgZ2V0Rml4dHVyZSgpIHsKKwkJcmV0dXJuIChJbnRlZ2VyU2VxdWVuY2VNb2RpZmllcilmaXh0dXJlOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2Ujc2V0VXAoKQorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgc2V0VXAoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJc3VwZXIuc2V0VXAoKTsKKwkJc2V0Rml4dHVyZShjcmVhdGVGaXh0dXJlKCkpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2UjdGVhckRvd24oKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgdm9pZCB0ZWFyRG93bigpIHRocm93cyBFeGNlcHRpb24geworCQlzZXRGaXh0dXJlKG51bGwpOworCX0KKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLnRlc3RzLlNlcXVlbmNlTW9kaWZpZXJUZXN0I2NyZWF0ZUZpeHR1cmUoKQorCSAqLworCUBTdXBwcmVzc1dhcm5pbmdzKCJib3hpbmciKQorCUBPdmVycmlkZQorCXB1YmxpYyBTZXF1ZW5jZU1vZGlmaWVyIGNyZWF0ZUZpeHR1cmUoKSB7CisJCWZpbmFsIEludGVnZXJTZXF1ZW5jZU1vZGlmaWVyIHJldFZhbHVlID0gTW9kaWZpZXJGYWN0b3J5LmVJTlNUQU5DRQorCQkJCS5jcmVhdGVJbnRlZ2VyU2VxdWVuY2VNb2RpZmllcigpOworCQlmb3IgKGludCB2YWx1ZSA6IEVYUEVDVEVEX1ZBTFVFUykgeworCQkJIHJldFZhbHVlLmdldFNlcXVlbmNlKCkuYWRkKHZhbHVlKTsKKwkJfSAvLyBmb3IgZWFjaCBkb3VibGUKKworCQlyZXRWYWx1ZS5zZXRFU3RydWN0dXJhbEZlYXR1cmUoZ2V0VGVzdE9iamVjdCgpLmVDbGFzcygpCisJCQkJLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMCkpOworCQlyZXR1cm4gcmV0VmFsdWU7CisJfSAvLyBjcmVhdGVGaXh0dXJlCisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci50ZXN0cy5GZWF0dXJlTW9kaWZpZXJUZXN0I2dldE51bWJlck9mTW9kaWZpY2F0aW9ucygpCisJICovCisJQE92ZXJyaWRlCisJaW50IGdldE51bWJlck9mTW9kaWZpY2F0aW9ucygpIHsKKwkJcmV0dXJuIEVYUEVDVEVEX1ZBTFVFUy5sZW5ndGg7CisJfQorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIudGVzdHMuRmVhdHVyZU1vZGlmaWVyVGVzdCNnZXRUZXN0QXR0cmlidXRlRVR5cGUoKQorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCBFQ2xhc3NpZmllciBnZXRUZXN0QXR0cmlidXRlRVR5cGUoKSB7CisJCXJldHVybiBFY29yZVBhY2thZ2UuZUlOU1RBTkNFLmdldEVJbnQoKTsKKwl9CisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci50ZXN0cy5GZWF0dXJlTW9kaWZpZXJUZXN0I3ZhbGlkYXRlRmVhdHVyZVZhbHVlKGludCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgYm9vbGVhbiB2YWxpZGF0ZUZlYXR1cmVWYWx1ZShpbnQgaSkgeworCQlhc3NlcnRUcnVlKGkgPj0gMCk7CisJCWFzc2VydFRydWUoaSA8IEVYUEVDVEVEX1ZBTFVFUy5sZW5ndGgpOworCQlmaW5hbCBJbnRlZ2VyU2VxdWVuY2VNb2RpZmllciBmaXh0dXJlID0gZ2V0Rml4dHVyZSgpOworCQlJbnRlZ2VyIGN1cnJlbnRWYWx1ZSA9IChJbnRlZ2VyKSBnZXRUZXN0T2JqZWN0KCkuZUdldCgKKwkJCQlmaXh0dXJlLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZSgpKTsKKwkJcmV0dXJuIGN1cnJlbnRWYWx1ZS5pbnRWYWx1ZSgpID09IEVYUEVDVEVEX1ZBTFVFU1tpXTsKKwl9IC8vIHZhbGlkYXRlRmVhdHVyZVZhbHVlCisJCit9IC8vSW50ZWdlclNlcXVlbmNlTW9kaWZpZXJUZXN0CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9tb2RpZmllci90ZXN0cy9Mb25nTW9kaWZpZXJUZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9tb2RpZmllci90ZXN0cy9Mb25nTW9kaWZpZXJUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGE0NmRiOQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL21vZGlmaWVyL3Rlc3RzL0xvbmdNb2RpZmllclRlc3QuamF2YQpAQCAtMCwwICsxLDEzNSBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIudGVzdHM7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTAgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQganVuaXQudGV4dHVpLlRlc3RSdW5uZXI7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzaWZpZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVjb3JlUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuTG9uZ01vZGlmaWVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5Mb25nUmFuZ2VNb2RpZmllcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuTW9kaWZpZXJGYWN0b3J5OworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiBBIHRlc3QgY2FzZSBmb3IgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPkxvbmcgTW9kaWZpZXI8L2I+PC9lbT4nLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBMb25nTW9kaWZpZXJUZXN0IGV4dGVuZHMgU2luZ2xlVmFsdWVNb2RpZmllclRlc3QgeworCQorCXByaXZhdGUgc3RhdGljIGZpbmFsIGxvbmcgT1JJR0lOQUxfVkFVRSA9IDE7CisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgbG9uZyBORVdfVkFVRSA9IDI7CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CisJCVRlc3RSdW5uZXIucnVuKExvbmdNb2RpZmllclRlc3QuY2xhc3MpOworCX0KKworCS8qKgorCSAqIENvbnN0cnVjdHMgYSBuZXcgTG9uZyBNb2RpZmllciB0ZXN0IGNhc2Ugd2l0aCB0aGUgZ2l2ZW4gbmFtZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgTG9uZ01vZGlmaWVyVGVzdChTdHJpbmcgbmFtZSkgeworCQlzdXBlcihuYW1lKTsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBmaXh0dXJlIGZvciB0aGlzIExvbmcgTW9kaWZpZXIgdGVzdCBjYXNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCBMb25nTW9kaWZpZXIgZ2V0Rml4dHVyZSgpIHsKKwkJcmV0dXJuIChMb25nTW9kaWZpZXIpZml4dHVyZTsKKwl9CisKKwkvKioKKwkgKiBAcmV0dXJuIGEge0BsaW5rIExvbmdSYW5nZU1vZGlmaWVyfSByZWFkeSBmb3IgdGVzdGluZy4KKwkgKi8KKwlwdWJsaWMgTG9uZ01vZGlmaWVyIGNyZWF0ZUZpeHR1cmUoKSB7CisJCWZpbmFsIExvbmdNb2RpZmllciByZXRWYWx1ZSA9IE1vZGlmaWVyRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlTG9uZ01vZGlmaWVyKCk7CisJCXJldFZhbHVlLnNldE9yaWdpbmFsVmFsdWUoT1JJR0lOQUxfVkFVRSk7CisJCXJldFZhbHVlLnNldFZhbHVlKE5FV19WQVVFKTsKKwkJcmV0VmFsdWUuc2V0RmVhdHVyZU5hbWUoIkxvbmdNb2RpZmllcl9zaW5nbGVUZXN0Iik7CisJCXJldFZhbHVlLnNldEVTdHJ1Y3R1cmFsRmVhdHVyZShnZXRUZXN0T2JqZWN0KCkuZUNsYXNzKCkKKwkJCQkuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgwKSk7CisJCQorCQlyZXR1cm4gcmV0VmFsdWU7CisJfSAvLyBjcmVhdGVGaXh0dXJlCisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlI3NldFVwKCkKKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIHNldFVwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCXN1cGVyLnNldFVwKCk7CisJCXNldEZpeHR1cmUoY3JlYXRlRml4dHVyZSgpKTsKKwl9CisJCisJCisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlI3RlYXJEb3duKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgdGVhckRvd24oKSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJc2V0Rml4dHVyZShudWxsKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlI2dldE51bWJlck9mTW9kaWZpY2F0aW9ucygpCisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlpbnQgZ2V0TnVtYmVyT2ZNb2RpZmljYXRpb25zKCkgeworCQlyZXR1cm4gMTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlI2dldFRlc3RBdHRyaWJ1dGVFVHlwZSgpCisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlwcm90ZWN0ZWQgRUNsYXNzaWZpZXIgZ2V0VGVzdEF0dHJpYnV0ZUVUeXBlKCkgeworCQlyZXR1cm4gRWNvcmVQYWNrYWdlLmVJTlNUQU5DRS5nZXRFTG9uZygpOworCX0gLy8gZ2V0VGVzdEF0dHJpYnV0ZUVUeXBlCisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci50ZXN0cy5GZWF0dXJlTW9kaWZpZXJUZXN0I3ZhbGlkYXRlRmVhdHVyZVZhbHVlKGludCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgYm9vbGVhbiB2YWxpZGF0ZUZlYXR1cmVWYWx1ZShpbnQgaSkgeworCQlhc3NlcnRUcnVlKGkgPj0gMCk7CisJCQorCQlmaW5hbCBMb25nTW9kaWZpZXIgZml4dHVyZSA9IGdldEZpeHR1cmUoKTsKKwkJT2JqZWN0IGN1cnJlbnRWYWx1ZSA9IGdldFRlc3RPYmplY3QoKS5lR2V0KGZpeHR1cmUuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlKCkpOworCisJCXJldHVybiAoY3VycmVudFZhbHVlIGluc3RhbmNlb2YgTG9uZyk7CisJfQorCit9IC8vTG9uZ01vZGlmaWVyVGVzdApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvbW9kaWZpZXIvdGVzdHMvTG9uZ05PUE1vZGlmaWVyVGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvbW9kaWZpZXIvdGVzdHMvTG9uZ05PUE1vZGlmaWVyVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAzNjI4ZGYKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9tb2RpZmllci90ZXN0cy9Mb25nTk9QTW9kaWZpZXJUZXN0LmphdmEKQEAgLTAsMCArMSwxMDQgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLnRlc3RzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGp1bml0LnRleHR1aS5UZXN0UnVubmVyOworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzc2lmaWVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FU3RydWN0dXJhbEZlYXR1cmU7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVjb3JlUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuTG9uZ05PUE1vZGlmaWVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5Nb2RpZmllckZhY3Rvcnk7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIEEgdGVzdCBjYXNlIGZvciB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+TG9uZyBOT1AgTW9kaWZpZXI8L2I+PC9lbT4nLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK0BTdXBwcmVzc1dhcm5pbmdzKCJhbGwiKQorcHVibGljIGNsYXNzIExvbmdOT1BNb2RpZmllclRlc3QgZXh0ZW5kcyBOT1BNb2RpZmllclRlc3QgeworCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgeworCQlUZXN0UnVubmVyLnJ1bihMb25nTk9QTW9kaWZpZXJUZXN0LmNsYXNzKTsKKwl9CisKKwkvKioKKwkgKiBDb25zdHJ1Y3RzIGEgbmV3IExvbmcgTk9QIE1vZGlmaWVyIHRlc3QgY2FzZSB3aXRoIHRoZSBnaXZlbiBuYW1lLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBMb25nTk9QTW9kaWZpZXJUZXN0KFN0cmluZyBuYW1lKSB7CisJCXN1cGVyKG5hbWUpOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIGZpeHR1cmUgZm9yIHRoaXMgTG9uZyBOT1AgTW9kaWZpZXIgdGVzdCBjYXNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCBMb25nTk9QTW9kaWZpZXIgZ2V0Rml4dHVyZSgpIHsKKwkJcmV0dXJuIChMb25nTk9QTW9kaWZpZXIpZml4dHVyZTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlI3NldFVwKCkKKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIHNldFVwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCXN1cGVyLnNldFVwKCk7CisJCXNldEZpeHR1cmUoY3JlYXRlRml4dHVyZSgpKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlI3RlYXJEb3duKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgdGVhckRvd24oKSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJc2V0Rml4dHVyZShudWxsKTsKKwl9CisJCisJLyoqCisJICogQHJldHVybiBhIHtAbGluayBMb25nTk9QTW9kaWZpZXJ9IHJlYWR5IGZvciB0ZXN0aW5nLgorCSAqLworCXB1YmxpYyBMb25nTk9QTW9kaWZpZXIgY3JlYXRlRml4dHVyZSgpIHsKKwkJZmluYWwgTG9uZ05PUE1vZGlmaWVyIHJldFZhbHVlID0gTW9kaWZpZXJGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVMb25nTk9QTW9kaWZpZXIoKTsKKwkJRU9iamVjdCB0ZXN0T2JqZWN0ID0gZ2V0VGVzdE9iamVjdCgpOworCQlFU3RydWN0dXJhbEZlYXR1cmUgZmVhdHVyZSA9IHRlc3RPYmplY3QuZUNsYXNzKCkKKwkJLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMCk7CisJCXJldFZhbHVlLnNldEVTdHJ1Y3R1cmFsRmVhdHVyZShmZWF0dXJlKTsKKwkJcmV0dXJuIHJldFZhbHVlOworCX0gLy8gY3JlYXRlRml4dHVyZQorCQorCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLnRlc3RzLkZlYXR1cmVNb2RpZmllclRlc3QjZ2V0VGVzdEF0dHJpYnV0ZUVUeXBlKCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgRUNsYXNzaWZpZXIgZ2V0VGVzdEF0dHJpYnV0ZUVUeXBlKCkgeworCQlyZXR1cm4gRWNvcmVQYWNrYWdlLmVJTlNUQU5DRS5nZXRFTG9uZygpOworCX0KK30gLy9Mb25nTk9QTW9kaWZpZXJUZXN0CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9tb2RpZmllci90ZXN0cy9Mb25nUmFuZ2VNb2RpZmllclRlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL21vZGlmaWVyL3Rlc3RzL0xvbmdSYW5nZU1vZGlmaWVyVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQzMDEwYjEKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9tb2RpZmllci90ZXN0cy9Mb25nUmFuZ2VNb2RpZmllclRlc3QuamF2YQpAQCAtMCwwICsxLDEzMiBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIudGVzdHM7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQganVuaXQudGV4dHVpLlRlc3RSdW5uZXI7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzaWZpZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVjb3JlUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuSW50ZWdlclJhbmdlTW9kaWZpZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLkxvbmdSYW5nZU1vZGlmaWVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5Nb2RpZmllckZhY3Rvcnk7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gQSB0ZXN0IGNhc2UgZm9yIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5Mb25nIFJhbmdlIE1vZGlmaWVyPC9iPjwvZW0+Jy4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQGdlbmVyYXRlZAorICovCitAU3VwcHJlc3NXYXJuaW5ncygiYWxsIikKK3B1YmxpYyBjbGFzcyBMb25nUmFuZ2VNb2RpZmllclRlc3QgZXh0ZW5kcyBSYW5nZU1vZGlmaWVyVGVzdCB7CisKKwlwdWJsaWMgc3RhdGljIGZpbmFsIGxvbmcgTFJNX1NUQVJUX1ZBTFVFID0gMjBMOworCXB1YmxpYyBzdGF0aWMgZmluYWwgbG9uZyBMUk1fRU5EX1ZBTFVFID0gMjJMOworCXB1YmxpYyBzdGF0aWMgZmluYWwgbG9uZyBMUk1fSU5DUkVNRU5UX1ZBTFVFID0gMUw7CisKKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBsb25nIEVYUEVDVEVEX1ZBTFVFU1tdID0gbmV3IGxvbmdbXSB7IExSTV9TVEFSVF9WQUxVRSwKKwkJCUxSTV9TVEFSVF9WQUxVRSArIExSTV9JTkNSRU1FTlRfVkFMVUUsIExSTV9FTkRfVkFMVUUgfTsKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CisJCVRlc3RSdW5uZXIucnVuKExvbmdSYW5nZU1vZGlmaWVyVGVzdC5jbGFzcyk7CisJfQorCisJLyoqCisJICogQ29uc3RydWN0cyBhIG5ldyBMb25nIFJhbmdlIE1vZGlmaWVyIHRlc3QgY2FzZSB3aXRoIHRoZSBnaXZlbiBuYW1lLiA8IS0tCisJICogYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgTG9uZ1JhbmdlTW9kaWZpZXJUZXN0KFN0cmluZyBuYW1lKSB7CisJCXN1cGVyKG5hbWUpOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIGZpeHR1cmUgZm9yIHRoaXMgTG9uZyBSYW5nZSBNb2RpZmllciB0ZXN0IGNhc2UuIDwhLS0KKwkgKiBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogCisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCBMb25nUmFuZ2VNb2RpZmllciBnZXRGaXh0dXJlKCkgeworCQlyZXR1cm4gKExvbmdSYW5nZU1vZGlmaWVyKWZpeHR1cmU7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogCisJICogQHNlZSBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2Ujc2V0VXAoKQorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgc2V0VXAoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJc3VwZXIuc2V0VXAoKTsKKwkJc2V0Rml4dHVyZShjcmVhdGVGaXh0dXJlKCkpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlI3RlYXJEb3duKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgdGVhckRvd24oKSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJc2V0Rml4dHVyZShudWxsKTsKKwl9CisKKwkvKioKKwkgKiBAcmV0dXJuIGEge0BsaW5rIEludGVnZXJSYW5nZU1vZGlmaWVyfSByZWFkeSBmb3IgdGVzdGluZy4KKwkgKi8KKwlwdWJsaWMgTG9uZ1JhbmdlTW9kaWZpZXIgY3JlYXRlRml4dHVyZSgpIHsKKwkJZmluYWwgTG9uZ1JhbmdlTW9kaWZpZXIgcmV0VmFsdWUgPSBNb2RpZmllckZhY3RvcnkuZUlOU1RBTkNFCisJCQkJLmNyZWF0ZUxvbmdSYW5nZU1vZGlmaWVyKCk7CisJCXJldFZhbHVlLnNldFN0YXJ0VmFsdWUoTFJNX1NUQVJUX1ZBTFVFKTsKKwkJcmV0VmFsdWUuc2V0RW5kVmFsdWUoTFJNX0VORF9WQUxVRSk7CisJCXJldFZhbHVlLnNldEluY3JlbWVudChMUk1fSU5DUkVNRU5UX1ZBTFVFKTsKKwkJcmV0VmFsdWUuc2V0RVN0cnVjdHVyYWxGZWF0dXJlKGdldFRlc3RPYmplY3QoKS5lQ2xhc3MoKQorCQkJCS5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDApKTsKKwkJcmV0dXJuIHJldFZhbHVlOworCX0gLy8gY3JlYXRlRml4dHVyZQorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIudGVzdHMuRmVhdHVyZU1vZGlmaWVyVGVzdCNnZXRUZXN0QXR0cmlidXRlRVR5cGUoKQorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCBFQ2xhc3NpZmllciBnZXRUZXN0QXR0cmlidXRlRVR5cGUoKSB7CisJCXJldHVybiBFY29yZVBhY2thZ2UuZUlOU1RBTkNFLmdldEVMb25nKCk7CisJfQorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIudGVzdHMuRmVhdHVyZU1vZGlmaWVyVGVzdCNnZXROdW1iZXJPZk1vZGlmaWNhdGlvbnMoKQorCSAqLworCUBPdmVycmlkZQorCWludCBnZXROdW1iZXJPZk1vZGlmaWNhdGlvbnMoKSB7CisJCXJldHVybiBFWFBFQ1RFRF9WQUxVRVMubGVuZ3RoOworCX0gLy8gZ2V0TnVtYmVyT2ZNb2RpZmljYXRpb25zCisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci50ZXN0cy5GZWF0dXJlTW9kaWZpZXJUZXN0I3ZhbGlkYXRlRmVhdHVyZVZhbHVlKGludCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgYm9vbGVhbiB2YWxpZGF0ZUZlYXR1cmVWYWx1ZShpbnQgaSkgeworCQlhc3NlcnRUcnVlKGkgPj0gMCk7CisJCWFzc2VydFRydWUoaSA8IEVYUEVDVEVEX1ZBTFVFUy5sZW5ndGgpOworCQlmaW5hbCBMb25nUmFuZ2VNb2RpZmllciBmaXh0dXJlID0gZ2V0Rml4dHVyZSgpOworCQlMb25nIGN1cnJlbnRWYWx1ZSA9IChMb25nKSBnZXRUZXN0T2JqZWN0KCkuZUdldCgKKwkJCQlmaXh0dXJlLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZSgpKTsKKworCQlyZXR1cm4gY3VycmVudFZhbHVlLmxvbmdWYWx1ZSgpID09IEVYUEVDVEVEX1ZBTFVFU1tpXTsKKwl9IC8vIHZhbGlkYXRlRmVhdHVyZVZhbHVlCisKK30gLy8gTG9uZ1JhbmdlTW9kaWZpZXJUZXN0CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9tb2RpZmllci90ZXN0cy9Mb25nU2VxdWVuY2VNb2RpZmllclRlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL21vZGlmaWVyL3Rlc3RzL0xvbmdTZXF1ZW5jZU1vZGlmaWVyVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc4MjNjOTMKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9tb2RpZmllci90ZXN0cy9Mb25nU2VxdWVuY2VNb2RpZmllclRlc3QuamF2YQpAQCAtMCwwICsxLDEzNCBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIudGVzdHM7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQganVuaXQudGV4dHVpLlRlc3RSdW5uZXI7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzaWZpZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVjb3JlUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuTG9uZ1NlcXVlbmNlTW9kaWZpZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLk1vZGlmaWVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuU2VxdWVuY2VNb2RpZmllcjsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogQSB0ZXN0IGNhc2UgZm9yIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5Mb25nIFNlcXVlbmNlIE1vZGlmaWVyPC9iPjwvZW0+Jy4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQGdlbmVyYXRlZAorICovCitAU3VwcHJlc3NXYXJuaW5ncygiYWxsIikKK3B1YmxpYyBjbGFzcyBMb25nU2VxdWVuY2VNb2RpZmllclRlc3QgZXh0ZW5kcyBTZXF1ZW5jZU1vZGlmaWVyVGVzdCB7CisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgbG9uZyBFWFBFQ1RFRF9WQUxVRVNbXSA9IG5ldyBsb25nW10geworCQlMb25nUmFuZ2VNb2RpZmllclRlc3QuTFJNX1NUQVJUX1ZBTFVFLAorCQlMb25nUmFuZ2VNb2RpZmllclRlc3QuTFJNX0VORF9WQUxVRSB9OworCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgeworCQlUZXN0UnVubmVyLnJ1bihMb25nU2VxdWVuY2VNb2RpZmllclRlc3QuY2xhc3MpOworCX0KKworCS8qKgorCSAqIENvbnN0cnVjdHMgYSBuZXcgTG9uZyBTZXF1ZW5jZSBNb2RpZmllciB0ZXN0IGNhc2Ugd2l0aCB0aGUgZ2l2ZW4gbmFtZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgTG9uZ1NlcXVlbmNlTW9kaWZpZXJUZXN0KFN0cmluZyBuYW1lKSB7CisJCXN1cGVyKG5hbWUpOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIGZpeHR1cmUgZm9yIHRoaXMgTG9uZyBTZXF1ZW5jZSBNb2RpZmllciB0ZXN0IGNhc2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIExvbmdTZXF1ZW5jZU1vZGlmaWVyIGdldEZpeHR1cmUoKSB7CisJCXJldHVybiAoTG9uZ1NlcXVlbmNlTW9kaWZpZXIpZml4dHVyZTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlI3NldFVwKCkKKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIHNldFVwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCXN1cGVyLnNldFVwKCk7CisJCXNldEZpeHR1cmUoY3JlYXRlRml4dHVyZSgpKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlI3RlYXJEb3duKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgdGVhckRvd24oKSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJc2V0Rml4dHVyZShudWxsKTsKKwl9CisJCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIudGVzdHMuU2VxdWVuY2VNb2RpZmllclRlc3QjY3JlYXRlRml4dHVyZSgpCisJICovCisJQFN1cHByZXNzV2FybmluZ3MoImJveGluZyIpCisJQE92ZXJyaWRlCisJcHVibGljIFNlcXVlbmNlTW9kaWZpZXIgY3JlYXRlRml4dHVyZSgpIHsKKwkJZmluYWwgTG9uZ1NlcXVlbmNlTW9kaWZpZXIgcmV0VmFsdWUgPSBNb2RpZmllckZhY3RvcnkuZUlOU1RBTkNFCisJCQkJLmNyZWF0ZUxvbmdTZXF1ZW5jZU1vZGlmaWVyKCk7CisJCWZvciAobG9uZyB2YWx1ZSA6IEVYUEVDVEVEX1ZBTFVFUykgeworCQkJIHJldFZhbHVlLmdldFNlcXVlbmNlKCkuYWRkKHZhbHVlKTsKKwkJfSAvLyBmb3IgZWFjaCBkb3VibGUKKworCQlyZXRWYWx1ZS5zZXRFU3RydWN0dXJhbEZlYXR1cmUoZ2V0VGVzdE9iamVjdCgpLmVDbGFzcygpCisJCQkJLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMCkpOworCQlyZXR1cm4gcmV0VmFsdWU7CisJfSAvLyBjcmVhdGVGaXh0dXJlCisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci50ZXN0cy5GZWF0dXJlTW9kaWZpZXJUZXN0I2dldE51bWJlck9mTW9kaWZpY2F0aW9ucygpCisJICovCisJQE92ZXJyaWRlCisJaW50IGdldE51bWJlck9mTW9kaWZpY2F0aW9ucygpIHsKKwkJcmV0dXJuIEVYUEVDVEVEX1ZBTFVFUy5sZW5ndGg7CisJfQorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIudGVzdHMuRmVhdHVyZU1vZGlmaWVyVGVzdCNnZXRUZXN0QXR0cmlidXRlRVR5cGUoKQorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCBFQ2xhc3NpZmllciBnZXRUZXN0QXR0cmlidXRlRVR5cGUoKSB7CisJCXJldHVybiBFY29yZVBhY2thZ2UuZUlOU1RBTkNFLmdldEVMb25nKCk7CisJfQorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIudGVzdHMuRmVhdHVyZU1vZGlmaWVyVGVzdCN2YWxpZGF0ZUZlYXR1cmVWYWx1ZShpbnQpCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIGJvb2xlYW4gdmFsaWRhdGVGZWF0dXJlVmFsdWUoaW50IGkpIHsKKwkJYXNzZXJ0VHJ1ZShpID49IDApOworCQlhc3NlcnRUcnVlKGkgPCBFWFBFQ1RFRF9WQUxVRVMubGVuZ3RoKTsKKwkJZmluYWwgTG9uZ1NlcXVlbmNlTW9kaWZpZXIgZml4dHVyZSA9IGdldEZpeHR1cmUoKTsKKwkJTG9uZyBjdXJyZW50VmFsdWUgPSAoTG9uZykgZ2V0VGVzdE9iamVjdCgpLmVHZXQoCisJCQkJZml4dHVyZS5nZXRFU3RydWN0dXJhbEZlYXR1cmUoKSk7CisJCXJldHVybiBjdXJyZW50VmFsdWUubG9uZ1ZhbHVlKCkgPT0gRVhQRUNURURfVkFMVUVTW2ldOworCX0gLy8gdmFsaWRhdGVGZWF0dXJlVmFsdWUKKwkKKworfSAvL0xvbmdTZXF1ZW5jZU1vZGlmaWVyVGVzdApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvbW9kaWZpZXIvdGVzdHMvTW9kaWZpYWJsZVRlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL21vZGlmaWVyL3Rlc3RzL01vZGlmaWFibGVUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGYzNThhMQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL21vZGlmaWVyL3Rlc3RzL01vZGlmaWFibGVUZXN0LmphdmEKQEAgLTAsMCArMSw2MyBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIudGVzdHM7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKKworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5Nb2RpZmlhYmxlOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiBBIHRlc3QgY2FzZSBmb3IgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPk1vZGlmaWFibGU8L2I+PC9lbT4nLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBhYnN0cmFjdCBjbGFzcyBNb2RpZmlhYmxlVGVzdCBleHRlbmRzIFRlc3RDYXNlIHsKKworCS8qKgorCSAqIFRoZSBmaXh0dXJlIGZvciB0aGlzIE1vZGlmaWFibGUgdGVzdCBjYXNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBNb2RpZmlhYmxlIGZpeHR1cmUgPSBudWxsOworCisJLyoqCisJICogQ29uc3RydWN0cyBhIG5ldyBNb2RpZmlhYmxlIHRlc3QgY2FzZSB3aXRoIHRoZSBnaXZlbiBuYW1lLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBNb2RpZmlhYmxlVGVzdChTdHJpbmcgbmFtZSkgeworCQlzdXBlcihuYW1lKTsKKwl9CisKKwkvKioKKwkgKiBTZXRzIHRoZSBmaXh0dXJlIGZvciB0aGlzIE1vZGlmaWFibGUgdGVzdCBjYXNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIHNldEZpeHR1cmUoTW9kaWZpYWJsZSBmaXh0dXJlKSB7CisJCXRoaXMuZml4dHVyZSA9IGZpeHR1cmU7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgZml4dHVyZSBmb3IgdGhpcyBNb2RpZmlhYmxlIHRlc3QgY2FzZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgTW9kaWZpYWJsZSBnZXRGaXh0dXJlKCkgeworCQlyZXR1cm4gZml4dHVyZTsKKwl9CisKK30gLy9Nb2RpZmlhYmxlVGVzdApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvbW9kaWZpZXIvdGVzdHMvTW9kaWZpZXJUZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9tb2RpZmllci90ZXN0cy9Nb2RpZmllclRlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNjI3MDMzCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvbW9kaWZpZXIvdGVzdHMvTW9kaWZpZXJUZXN0LmphdmEKQEAgLTAsMCArMSwzMzUgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLnRlc3RzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7CitpbXBvcnQgamF2YS51dGlsLkFycmF5czsKK2ltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuTWFwOworCitpbXBvcnQganVuaXQudGV4dHVpLlRlc3RSdW5uZXI7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuVVJJOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQXR0cmlidXRlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzc2lmaWVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRVN0cnVjdHVyYWxGZWF0dXJlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FY29yZUZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVjb3JlUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZXhwZXJpbWVudC50ZXN0cy5FeHBlcmltZW50VGVzdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuTW9kZWxQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC50ZXN0cy5EZWNvcmF0b3JUZXN0OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5Eb3VibGVSYW5nZU1vZGlmaWVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5GZWF0dXJlTW9kaWZpZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLkludGVnZXJSYW5nZU1vZGlmaWVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5Nb2RpZmllcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuTW9kaWZpZXJGYWN0b3J5OworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IEEgdGVzdCBjYXNlIGZvciB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+TW9kaWZpZXI8L2I+PC9lbT4nLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiA8cD4KKyAqIFRoZSBmb2xsb3dpbmcgZmVhdHVyZXMgYXJlIHRlc3RlZDoKKyAqIDx1bD4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuTW9kaWZpZXIjaXNDb21wbGV0ZSgpIDxlbT5Db21wbGV0ZTwvZW0+fTwvbGk+CisgKiA8L3VsPgorICogPC9wPgorICogPHA+CisgKiBUaGUgZm9sbG93aW5nIG9wZXJhdGlvbnMgYXJlIHRlc3RlZDoKKyAqIDx1bD4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuTW9kaWZpZXIjdXBkYXRlU2NlbmFyaW8ob3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNjZW5hcmlvLlNjZW5hcmlvKSA8ZW0+VXBkYXRlIFNjZW5hcmlvPC9lbT59PC9saT4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuTW9kaWZpZXIjcmVzZXQoKSA8ZW0+UmVzZXQ8L2VtPn08L2xpPgorICogPC91bD4KKyAqIDwvcD4KKyAqIEBnZW5lcmF0ZWQKKyAqLworQFN1cHByZXNzV2FybmluZ3MoImFsbCIpCitwdWJsaWMgY2xhc3MgTW9kaWZpZXJUZXN0IGV4dGVuZHMgRGVjb3JhdG9yVGVzdCB7CisKKwlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBURVNUX1BBQ0tBR0VfTkFNRSA9ICJ0ZXN0cGFja2FnZSI7CisJcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgVEVTVF9QQUNLQUdFX05TUFJFRklYID0gInRlc3QiOworCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFRFU1RfUEFDS0FHRV9OU1VSSSA9ICJodHRwOi8vL2NvbS5leGFtcGxlLnRlc3QiOworCQorCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFRFU1RfRU9CSkVDVF9DTEFTU05BTUUxID0gInRlc3RvYmplY3QxIjsKKwlwdWJsaWMgc3RhdGljIGZpbmFsIExpc3Q8RUNsYXNzaWZpZXI+IFRFU1RfT0JKRUNUX0ZFQVRVUkVTMSA9IEFycmF5cworCQkJLmFzTGlzdChuZXcgRUNsYXNzaWZpZXJbXSB7IEVjb3JlUGFja2FnZS5MaXRlcmFscy5FSU5ULAorCQkJCQlFY29yZVBhY2thZ2UuTGl0ZXJhbHMuRURPVUJMRSwKKwkJCQkJTW9kZWxQYWNrYWdlLkxpdGVyYWxzLlNURU1fVElNRSB9KTsKKwkKKwlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBURVNUX0VPQkpFQ1RfQ0xBU1NOQU1FMiA9ICJ0ZXN0b2JqZWN0MiI7CisJcHVibGljIHN0YXRpYyBmaW5hbCBMaXN0PEVDbGFzc2lmaWVyPiBURVNUX09CSkVDVF9GRUFUVVJFUzIgPSBBcnJheXMKKwkJCS5hc0xpc3QobmV3IEVDbGFzc2lmaWVyW10geyBFY29yZVBhY2thZ2UuTGl0ZXJhbHMuRUlOVCwKKwkJCQkJRWNvcmVQYWNrYWdlLkxpdGVyYWxzLkVET1VCTEUsCisJCQkJCU1vZGVsUGFja2FnZS5MaXRlcmFscy5TVEVNX1RJTUUsCisJCQkJCUVjb3JlUGFja2FnZS5MaXRlcmFscy5FU1RSSU5HIH0pOworCQorCS8qKgorCSAqIFRoaXMgaXMgdGhlIEVQYWNrYWdlIGluc3RhbmNlIHRoYXQgZGVmaW5lcyB7QGxpbmsgRUNsYXNzfXMgdG8gYmUgdXNlZCB0bworCSAqIGNyZWF0ZSB0ZXN0IG9iamVjdCBpbnN0YW5jZXMuCisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBFUGFja2FnZSBURVNUX1BBQ0tBR0U7CisJCisJc3RhdGljIHsKKwkJZmluYWwgTWFwPFN0cmluZyxMaXN0PEVDbGFzc2lmaWVyPj4gZUNsYXNzTmFtZVRvZmVhdHVyZVR5cGVNYXAgPSBuZXcgSGFzaE1hcDxTdHJpbmcsIExpc3Q8RUNsYXNzaWZpZXI+PigpOworCQllQ2xhc3NOYW1lVG9mZWF0dXJlVHlwZU1hcC5wdXQoVEVTVF9FT0JKRUNUX0NMQVNTTkFNRTEsIFRFU1RfT0JKRUNUX0ZFQVRVUkVTMSk7CisJCWVDbGFzc05hbWVUb2ZlYXR1cmVUeXBlTWFwLnB1dChURVNUX0VPQkpFQ1RfQ0xBU1NOQU1FMiwgVEVTVF9PQkpFQ1RfRkVBVFVSRVMyKTsKKwkJVEVTVF9QQUNLQUdFID0gY3JlYXRlVGVzdFBhY2thZ2UoVEVTVF9QQUNLQUdFX05BTUUsIFRFU1RfUEFDS0FHRV9OU1BSRUZJWCwgVEVTVF9QQUNLQUdFX05TVVJJLAorCQkJCWVDbGFzc05hbWVUb2ZlYXR1cmVUeXBlTWFwKTsKKwl9IC8vIHN0YXRpYworCQorCS8qKgorCSAqIFRlc3Qgb2JqZWN0IGZvciBtb2RpZmljYXRpb24KKwkgKi8KKwlwcm90ZWN0ZWQgRU9iamVjdCB0ZXN0T2JqZWN0MSA9IG51bGw7CisJLyoqCisJICogVGVzdCBvYmplY3QgZm9yIG1vZGlmaWNhdGlvbgorCSAqLworLy8JcHJvdGVjdGVkIEVPYmplY3QgdGVzdE9iamVjdDIgPSBudWxsOworCQorCisJCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKKwkJVGVzdFJ1bm5lci5ydW4oTW9kaWZpZXJUZXN0LmNsYXNzKTsKKwl9CisKKwkvKioKKwkgKiBDb25zdHJ1Y3RzIGEgbmV3IE1vZGlmaWVyIHRlc3QgY2FzZSB3aXRoIHRoZSBnaXZlbiBuYW1lLiA8IS0tCisJICogYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgTW9kaWZpZXJUZXN0KFN0cmluZyBuYW1lKSB7CisJCXN1cGVyKG5hbWUpOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIGZpeHR1cmUgZm9yIHRoaXMgTW9kaWZpZXIgdGVzdCBjYXNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCBNb2RpZmllciBnZXRGaXh0dXJlKCkgeworCQlyZXR1cm4gKE1vZGlmaWVyKWZpeHR1cmU7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogCisJICogQHNlZSBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2Ujc2V0VXAoKQorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgc2V0VXAoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJdGVzdE9iamVjdDEgPSBURVNUX1BBQ0tBR0UuZ2V0RUZhY3RvcnlJbnN0YW5jZSgpLmNyZWF0ZSgKKwkJCQkoRUNsYXNzKSBURVNUX1BBQ0tBR0UuZ2V0RUNsYXNzaWZpZXIoVEVTVF9FT0JKRUNUX0NMQVNTTkFNRTEpKTsKKy8vCQl0ZXN0T2JqZWN0MiA9IFRFU1RfUEFDS0FHRS5nZXRFRmFjdG9yeUluc3RhbmNlKCkuY3JlYXRlKAorLy8JCQkJKEVDbGFzcykgVEVTVF9QQUNLQUdFLmdldEVDbGFzc2lmaWVyKFRFU1RfRU9CSkVDVF9DTEFTU05BTUUyKSk7CisJCXNldEZpeHR1cmUoY3JlYXRlRml4dHVyZSh0ZXN0T2JqZWN0MSkpOworCX0gLy8gc2V0VXAKKworCS8qKgorCSAqIEByZXR1cm4gYSB7QGxpbmsgTW9kaWZpZXJ9IGZvciB0ZXN0aW5nCisJICovCisJc3RhdGljIHB1YmxpYyAgTW9kaWZpZXIgY3JlYXRlRml4dHVyZShmaW5hbCBFT2JqZWN0IHRlc3RPYmplY3QpIHsKKwkJZmluYWwgTW9kaWZpZXIgcmV0VmFsdWUgPSBNb2RpZmllckZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZU1vZGlmaWVyKCk7CisJCXJldFZhbHVlLmdldEZlYXR1cmVNb2RpZmllcnMoKS5hZGRBbGwoY3JlYXRlRmVhdHVyZU1vZGlmaWVycyh0ZXN0T2JqZWN0KSk7CisJCXJldHVybiByZXRWYWx1ZTsKKwl9IC8vIGNyZWF0ZUZpeHR1cmUKKworCS8qKgorCSAqIEBwYXJhbSB0ZXN0T2JqZWN0CisJICogICAgICAgICAgICB0aGUge0BsaW5rIEVPYmplY3R9IHRvIGNyZWF0ZSB0aGUge0BsaW5rIEZlYXR1cmVNb2RpZmllcn1zCisJICogICAgICAgICAgICBmb3IKKwkgKiBAcmV0dXJuIGEge0BsaW5rIExpc3R9IG9mIHtAbGluayBGZWF0dXJlTW9kaWZpZXJ9cyBmb3IgYSBzcGVjaWZpYworCSAqICAgICAgICAge0BsaW5rIEVPYmplY3R9CisJICovCisJcHJpdmF0ZSBzdGF0aWMgTGlzdDxGZWF0dXJlTW9kaWZpZXI+IGNyZWF0ZUZlYXR1cmVNb2RpZmllcnMoCisJCQlmaW5hbCBFT2JqZWN0IHRlc3RPYmplY3QpIHsKKwkJZmluYWwgTGlzdDxGZWF0dXJlTW9kaWZpZXI+IHJldFZhbHVlID0gbmV3IEFycmF5TGlzdDxGZWF0dXJlTW9kaWZpZXI+KCk7CisJCWZvciAoRVN0cnVjdHVyYWxGZWF0dXJlIGVTdHJ1dHVyYWxGZWF0dXJlIDogdGVzdE9iamVjdC5lQ2xhc3MoKQorCQkJCS5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkpIHsKKwkJCS8vIEVJbnQ/CisJCQlpZiAoZVN0cnV0dXJhbEZlYXR1cmUuZ2V0RVR5cGUoKSA9PSBFY29yZVBhY2thZ2UuTGl0ZXJhbHMuRUlOVCkgeworCQkJCS8vIFllcworCQkJCWZpbmFsIEludGVnZXJSYW5nZU1vZGlmaWVyIGlybSA9IE1vZGlmaWVyRmFjdG9yeS5lSU5TVEFOQ0UKKwkJCQkJCS5jcmVhdGVJbnRlZ2VyUmFuZ2VNb2RpZmllcigpOworCQkJCWlybS5zZXRFU3RydWN0dXJhbEZlYXR1cmUoZVN0cnV0dXJhbEZlYXR1cmUpOworCQkJCWlybS5zZXRTdGFydFZhbHVlKEludGVnZXJSYW5nZU1vZGlmaWVyVGVzdC5JUk1fU1RBUlRfVkFMVUUpOworCQkJCWlybS5zZXRFbmRWYWx1ZShJbnRlZ2VyUmFuZ2VNb2RpZmllclRlc3QuSVJNX0VORF9WQUxVRSk7CisJCQkJaXJtLnNldEluY3JlbWVudChJbnRlZ2VyUmFuZ2VNb2RpZmllclRlc3QuSVJNX0lOQ1JFTUVOVF9WQUxVRSk7CisJCQkJcmV0VmFsdWUuYWRkKGlybSk7CisJCQl9IC8vIGlmIEVJbnQKKwkJCS8vIEVEb3VibGUKKwkJCWVsc2UgaWYgKGVTdHJ1dHVyYWxGZWF0dXJlLmdldEVUeXBlKCkgPT0gRWNvcmVQYWNrYWdlLkxpdGVyYWxzLkVET1VCTEUpIHsKKwkJCQkvLyBZZXMKKwkJCQlmaW5hbCBEb3VibGVSYW5nZU1vZGlmaWVyIGRybSA9IE1vZGlmaWVyRmFjdG9yeS5lSU5TVEFOQ0UKKwkJCQkJCS5jcmVhdGVEb3VibGVSYW5nZU1vZGlmaWVyKCk7CisJCQkJZHJtLnNldEVTdHJ1Y3R1cmFsRmVhdHVyZShlU3RydXR1cmFsRmVhdHVyZSk7CisJCQkJZHJtLnNldFN0YXJ0VmFsdWUoRG91YmxlUmFuZ2VNb2RpZmllclRlc3QuRFJNX1NUQVJUX1ZBTFVFKTsKKwkJCQlkcm0uc2V0RW5kVmFsdWUoRG91YmxlUmFuZ2VNb2RpZmllclRlc3QuRFJNX0VORF9WQUxVRSk7CisJCQkJZHJtLnNldEluY3JlbWVudChEb3VibGVSYW5nZU1vZGlmaWVyVGVzdC5EUk1fSU5DUkVNRU5UX1ZBTFVFKTsKKwkJCQlyZXRWYWx1ZS5hZGQoZHJtKTsKKwkJCX0gLy8gaWYKKwkJfSAvLyBmb3IgZWFjaCBlU3RydWN0dXJhbEZlYXR1cmUKKworCQlyZXR1cm4gcmV0VmFsdWU7CisJfSAvLyBjcmVhdGVGZWF0dXJlTW9kaWZpZXJzCisKKwkvKioKKwkgKiBDcmVhdGUgYSBzaW5nbGUgRU1GIHtAbGluayBFT2JqZWN0fSBpbnN0YW5jZSBmb3IgdGVzdGluZy4KKwkgKiBAcGFyYW0gZUNsYXNzTmFtZQorCSAqICAgICAgICAgICAgdGhlIG5hbWUgb2YgdGhlIHtAbGluayBFQ2xhc3N9IGZvciB0aGUge0BsaW5rIEVPYmplY3R9CisJICogQHBhcmFtIGZlYXR1cmVUeXBlcworCSAqICAgICAgICAgICAgYSBsaXN0IG9mIHtAbGluayBFQ2xhc3NpZmllcn0gaW5zdGFuY2VzIG9mIHRoZSB0eXBlcyBvZiB0aGUKKwkgKiAgICAgICAgICAgIGF0dHJpYnV0ZXMgaW4gdGhlIHtAbGluayBFQ2xhc3N9CisJICogQHJldHVybiBhbiB7QGxpbmsgRU9iamVjdH0gdG8gYmUgbW9kaWZpZWQKKwkgKi8KKwlzdGF0aWMgcHVibGljIEVPYmplY3QgY3JlYXRlVGVzdE9iamVjdChmaW5hbCBTdHJpbmcgZUNsYXNzTmFtZSwKKwkJCUxpc3Q8RUNsYXNzaWZpZXI+IGZlYXR1cmVUeXBlcykgeworCQlmaW5hbCBNYXA8U3RyaW5nLCBMaXN0PEVDbGFzc2lmaWVyPj4gZUNsYXNzTmFtZVRvZmVhdHVyZVR5cGVNYXAgPSBuZXcgSGFzaE1hcDxTdHJpbmcsIExpc3Q8RUNsYXNzaWZpZXI+PigpOworCQllQ2xhc3NOYW1lVG9mZWF0dXJlVHlwZU1hcC5wdXQoZUNsYXNzTmFtZSwgZmVhdHVyZVR5cGVzKTsKKwkJZmluYWwgRVBhY2thZ2UgZVBhY2thZ2UgPSBjcmVhdGVUZXN0UGFja2FnZShURVNUX1BBQ0tBR0VfTkFNRSwKKwkJCQlURVNUX1BBQ0tBR0VfTlNQUkVGSVgsIFRFU1RfUEFDS0FHRV9OU1VSSSwKKwkJCQllQ2xhc3NOYW1lVG9mZWF0dXJlVHlwZU1hcCk7CisJCXJldHVybiBlUGFja2FnZS5nZXRFRmFjdG9yeUluc3RhbmNlKCkuY3JlYXRlKAorCQkJCShFQ2xhc3MpIGVQYWNrYWdlLmdldEVDbGFzc2lmaWVyKGVDbGFzc05hbWUpKTsKKwl9IC8vIGNyZWF0ZVRlc3RPYmplY3QKKworCS8qKgorCSAqIEBwYXJhbSBwYWNrYWdlTmFtZQorCSAqICAgICAgICAgICAgdGhlIG5hbWUgb2YgdGhlIHBhY2thZ2UKKwkgKiBAcGFyYW0gbnNQcmVmaXgKKwkgKiAgICAgICAgICAgIHRoZSBwcmVmaXggdG8gdXNlIGZvciB0aGUgcGFja2FnZSdzIG5hbWUgc3BhY2UKKwkgKiBAcGFyYW0gbnNVUkkKKwkgKiAgICAgICAgICAgIHRoZSB7QGxpbmsgVVJJfSB0byB1c2UgZm9yIHRoZSBwYWNrYWdlJ3MgbmFtZSBzcGFjZQorCSAqIEBwYXJhbSBlQ2xhc3NOYW1lVG9mZWF0dXJlVHlwZU1hcAorCSAqICAgICAgICAgICAgYSB7QGxpbmsgTWFwfSBiZXR3ZWVuIHRoZSBuYW1lIG9mIGEge0BsaW5rIEVDbGFzc30gdGhhdAorCSAqICAgICAgICAgICAgZGVmaW5lcyBhbiB7QGxpbmsgRU9iamVjdH0gdG8gY3JlYXRlIGFuZCBhIGxpc3Qgb2YKKwkgKiAgICAgICAgICAgIHtAbGluayBFQ2xhc3NpZmllcn1zIHRoYXQgZGVmaW5lIHRoZSB0eXBlIHRoZSB7QGxpbmsgRU9iamVjdH0ncworCSAqICAgICAgICAgICAge0BsaW5rIEVTdHJ1Y3R1cmFsRmVhdHVyZX1zLiBUaGUgbmFtZXMgb2YgdGhlCisJICogICAgICAgICAgICB7QGxpbmsgRVN0cnVjdHVyYWxGZWF0dXJlfXMgd2lsbCBiZSBjcmVhdGVkIGZyb20gdGhlIHR5cGVzIG9mCisJICogICAgICAgICAgICB0aGUge0BsaW5rIEVDbGFzc2lmaWVyfXMuCisJICogQHJldHVybiBhbiB7QGxpbmsgRVBhY2thZ2V9CisJICovCisJcHVibGljIHN0YXRpYyBFUGFja2FnZSBjcmVhdGVUZXN0UGFja2FnZShmaW5hbCBTdHJpbmcgcGFja2FnZU5hbWUsCisJCQlmaW5hbCBTdHJpbmcgbnNQcmVmaXgsIGZpbmFsIFN0cmluZyBuc1VSSSwKKwkJCWZpbmFsIE1hcDxTdHJpbmcsIExpc3Q8RUNsYXNzaWZpZXI+PiBlQ2xhc3NOYW1lVG9mZWF0dXJlVHlwZU1hcCkgeworCQkvLyBBIGxpdHRsZSBiaXQgb2YgZHluYW1pYyBFTUYgaGVyZS4uLgorCQlmaW5hbCBFUGFja2FnZSBlUGFja2FnZSA9IEVjb3JlRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlRVBhY2thZ2UoKTsKKwkJZVBhY2thZ2Uuc2V0TmFtZShwYWNrYWdlTmFtZSk7CisJCWVQYWNrYWdlLnNldE5zUHJlZml4KG5zUHJlZml4KTsKKwkJZVBhY2thZ2Uuc2V0TnNVUkkobnNVUkkpOworCisJCWZvciAoU3RyaW5nIGVDbGFzc05hbWUgOiBlQ2xhc3NOYW1lVG9mZWF0dXJlVHlwZU1hcC5rZXlTZXQoKSkgeworCisJCQlmaW5hbCBFQ2xhc3MgdGVzdENsYXNzID0gRWNvcmVGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVFQ2xhc3MoKTsKKwkJCXRlc3RDbGFzcy5zZXROYW1lKGVDbGFzc05hbWUpOworCQkJCisJCQlpbnQgYXR0cmlidXRlQ291bnQgPSAwOworCQkJLy8gTm93IGNyZWF0ZSB0aGUgc3RydWN0dXJhbCBmZWF0dXJlcworCQkJZm9yIChFQ2xhc3NpZmllciBlQ2xhc3NpZmllciA6IGVDbGFzc05hbWVUb2ZlYXR1cmVUeXBlTWFwCisJCQkJCS5nZXQoZUNsYXNzTmFtZSkpIHsKKwkJCQlmaW5hbCBFQXR0cmlidXRlIGF0dHJpYnV0ZSA9IEVjb3JlRmFjdG9yeS5lSU5TVEFOQ0UKKwkJCQkJCS5jcmVhdGVFQXR0cmlidXRlKCk7CisJCQkJYXR0cmlidXRlLnNldE5hbWUoZUNsYXNzaWZpZXIuZ2V0TmFtZSgpICsgYXR0cmlidXRlQ291bnQrKyk7CisJCQkJYXR0cmlidXRlLnNldEVUeXBlKGVDbGFzc2lmaWVyKTsKKwkJCQlhdHRyaWJ1dGUuc2V0VW5zZXR0YWJsZShmYWxzZSk7CisJCQkJdGVzdENsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5hZGQoYXR0cmlidXRlKTsKKwkJCX0gLy8gZm9yIGVhY2ggRUNsYXNzaWZpZXIKKwkJCS8vIEFkZCB0aGUgY2xhc3MgdG8gdGhlIHBhY2thZ2UKKwkJCWVQYWNrYWdlLmdldEVDbGFzc2lmaWVycygpLmFkZCh0ZXN0Q2xhc3MpOworCQl9IC8vIGZvciBlYWNoIEVDbGFzcyBuYW1lCisJCXJldHVybiBlUGFja2FnZTsKKwl9IC8vIGNyZWF0ZVRlc3RQYWNrYWdlCisJCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2UjdGVhckRvd24oKQorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgdGVhckRvd24oKSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJdGVzdE9iamVjdDEgPSBudWxsOworLy8JCXRlc3RPYmplY3QyID0gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBUZXN0cyB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuTW9kaWZpZXIjZ2V0TW9kaWZpY2F0aW9uU3VtbWFyeSgpIDxlbT5Nb2RpZmljYXRpb24gU3VtbWFyeTwvZW0+fScKKwkgKiBmZWF0dXJlIGdldHRlci4gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuTW9kaWZpZXIjZ2V0TW9kaWZpY2F0aW9uU3VtbWFyeSgpCisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlwdWJsaWMgdm9pZCB0ZXN0R2V0TW9kaWZpY2F0aW9uU3VtbWFyeSgpIHsKKwkJZmluYWwgTW9kaWZpZXIgZml4dHVyZSA9IGdldEZpeHR1cmUoKTsKKwkJYXNzZXJ0VHJ1ZShmaXh0dXJlLmdldEZlYXR1cmVNb2RpZmllcnMoKS5zaXplKCkgPiAwKTsKKwkJZmluYWwgTGlzdDxTdHJpbmc+IHN1bW1hcnkgPSBmaXh0dXJlLmdldE1vZGlmaWNhdGlvblN1bW1hcnkoKTsKKwkJYXNzZXJ0Tm90TnVsbChzdW1tYXJ5KTsKKwkJYXNzZXJ0VHJ1ZShzdW1tYXJ5LnNpemUoKSA+IDApOworCX0gLy8gdGVzdEdldE1vZGlmaWNhdGlvblN1bW1hcnkKKworCS8qKgorCSAqIFRlc3RzIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5Nb2RpZmllciNpc0NvbXBsZXRlKCkgPGVtPkNvbXBsZXRlPC9lbT59JworCSAqIGZlYXR1cmUgZ2V0dGVyLiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5Nb2RpZmllciNpc0NvbXBsZXRlKCkKKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCXB1YmxpYyB2b2lkIHRlc3RJc0NvbXBsZXRlKCkgeworCQlmaW5hbCBNb2RpZmllciBmaXh0dXJlID0gZ2V0Rml4dHVyZSgpOworCQlhc3NlcnRUcnVlKGZpeHR1cmUuZ2V0RmVhdHVyZU1vZGlmaWVycygpLnNpemUoKSA+IDApOworCQlhc3NlcnRGYWxzZShmaXh0dXJlLmlzQ29tcGxldGUoKSk7CisJfSAvLyB0ZXN0SXNDb21wbGV0ZQorCisJLyoqCisJICogVGVzdHMgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLk1vZGlmaWVyI3VwZGF0ZVNjZW5hcmlvKG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zY2VuYXJpby5TY2VuYXJpbykgPGVtPlVwZGF0ZSBTY2VuYXJpbzwvZW0+fScKKwkgKiBvcGVyYXRpb24uIAorCSAqIAorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IAorCSAqIAorCSAqIFRoaXMgaXMgYmVpbmcgdGVzdGVkIGJ5IHtAbGluayBFeHBlcmltZW50VGVzdCN0ZXN0TW9kaWZ5U2NlbmFyaW9fX1NjZW5hcmlvKCl9CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuTW9kaWZpZXIjdXBkYXRlU2NlbmFyaW8ob3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNjZW5hcmlvLlNjZW5hcmlvKQorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICogCisJICovCisJcHVibGljIHZvaWQgdGVzdFVwZGF0ZVNjZW5hcmlvX19TY2VuYXJpbygpIHsKKwkJYXNzZXJ0VHJ1ZSh0cnVlKTsKKwkJLy8gZmFpbCgpOworCQkvLyBmaW5hbCBNb2RpZmllciBmaXh0dXJlID0gZ2V0Rml4dHVyZSgpOworCQkvLyBmaW5hbCBTY2VuYXJpbyBiYXNlU2NlbmFyaW8gPSBFeHBlcmltZW50VGVzdC5nZXRCYXNlU2NlbmFyaW8oKTsKKwkJLy8gZml4dHVyZS51cGRhdGVTY2VuYXJpbyhiYXNlU2NlbmFyaW8pOworCQkvLyBhc3NlcnRUcnVlKGJhc2VTY2VuYXJpby5zYW5lKCkpOworCX0gLy8gdGVzdFVwZGF0ZVNjZW5hcmlvX19TY2VuYXJpbworCisJLyoqCisJICogVGVzdHMgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLk1vZGlmaWVyI3Jlc2V0KCkgPGVtPlJlc2V0PC9lbT59JyBvcGVyYXRpb24uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5Nb2RpZmllciNyZXNldCgpCisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlwdWJsaWMgdm9pZCB0ZXN0UmVzZXQoKSB7CisJCS8vIFRPRE86IGltcGxlbWVudCBNb2RpZmllclRlc3QudGVzdFJlc2V0KCkKKwkJYXNzZXJ0VHJ1ZSh0cnVlKTsKKwl9CisKK30gLy8gTW9kaWZpZXJUZXN0CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9tb2RpZmllci90ZXN0cy9Nb2RpZmllclRlc3RzLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9tb2RpZmllci90ZXN0cy9Nb2RpZmllclRlc3RzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmUwNzc4YQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL21vZGlmaWVyL3Rlc3RzL01vZGlmaWVyVGVzdHMuamF2YQpAQCAtMCwwICsxLDc0IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci50ZXN0czsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdDsKK2ltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdFN1aXRlOworaW1wb3J0IGp1bml0LnRleHR1aS5UZXN0UnVubmVyOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiBBIHRlc3Qgc3VpdGUgZm9yIHRoZSAnPGVtPjxiPm1vZGlmaWVyPC9iPjwvZW0+JyBwYWNrYWdlLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBNb2RpZmllclRlc3RzIGV4dGVuZHMgVGVzdFN1aXRlIHsKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKKwkJVGVzdFJ1bm5lci5ydW4oc3VpdGUoKSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHN0YXRpYyBUZXN0IHN1aXRlKCkgeworCQlUZXN0U3VpdGUgc3VpdGUgPSBuZXcgTW9kaWZpZXJUZXN0cygibW9kaWZpZXIgVGVzdHMiKTsgLy8kTk9OLU5MUy0xJAorCQlzdWl0ZS5hZGRUZXN0U3VpdGUoRG91YmxlTk9QTW9kaWZpZXJUZXN0LmNsYXNzKTsKKwkJc3VpdGUuYWRkVGVzdFN1aXRlKERvdWJsZVJhbmdlTW9kaWZpZXJUZXN0LmNsYXNzKTsKKwkJc3VpdGUuYWRkVGVzdFN1aXRlKERvdWJsZVNlcXVlbmNlTW9kaWZpZXJUZXN0LmNsYXNzKTsKKwkJc3VpdGUuYWRkVGVzdFN1aXRlKEludGVnZXJOT1BNb2RpZmllclRlc3QuY2xhc3MpOworCQlzdWl0ZS5hZGRUZXN0U3VpdGUoSW50ZWdlclJhbmdlTW9kaWZpZXJUZXN0LmNsYXNzKTsKKwkJc3VpdGUuYWRkVGVzdFN1aXRlKEludGVnZXJTZXF1ZW5jZU1vZGlmaWVyVGVzdC5jbGFzcyk7CisJCXN1aXRlLmFkZFRlc3RTdWl0ZShMb25nTk9QTW9kaWZpZXJUZXN0LmNsYXNzKTsKKwkJc3VpdGUuYWRkVGVzdFN1aXRlKExvbmdSYW5nZU1vZGlmaWVyVGVzdC5jbGFzcyk7CisJCXN1aXRlLmFkZFRlc3RTdWl0ZShMb25nU2VxdWVuY2VNb2RpZmllclRlc3QuY2xhc3MpOworCQlzdWl0ZS5hZGRUZXN0U3VpdGUoTW9kaWZpZXJUZXN0LmNsYXNzKTsKKwkJc3VpdGUuYWRkVGVzdFN1aXRlKE5PUE1vZGlmaWVyVGVzdC5jbGFzcyk7CisJCXN1aXRlLmFkZFRlc3RTdWl0ZShTVEVNVGltZU5PUE1vZGlmaWVyVGVzdC5jbGFzcyk7CisJCXN1aXRlLmFkZFRlc3RTdWl0ZShTVEVNVGltZVJhbmdlTW9kaWZpZXJUZXN0LmNsYXNzKTsKKwkJc3VpdGUuYWRkVGVzdFN1aXRlKFNURU1UaW1lU2VxdWVuY2VNb2RpZmllclRlc3QuY2xhc3MpOworCQlzdWl0ZS5hZGRUZXN0U3VpdGUoU3RyaW5nTk9QTW9kaWZpZXJUZXN0LmNsYXNzKTsKKwkJc3VpdGUuYWRkVGVzdFN1aXRlKFN0cmluZ1NlcXVlbmNlTW9kaWZpZXJUZXN0LmNsYXNzKTsKKwkJc3VpdGUuYWRkVGVzdFN1aXRlKERvdWJsZU1vZGlmaWVyVGVzdC5jbGFzcyk7CisJCXN1aXRlLmFkZFRlc3RTdWl0ZShJbnRlZ2VyTW9kaWZpZXJUZXN0LmNsYXNzKTsKKwkJc3VpdGUuYWRkVGVzdFN1aXRlKExvbmdNb2RpZmllclRlc3QuY2xhc3MpOworCQlzdWl0ZS5hZGRUZXN0U3VpdGUoU1RFTVRpbWVNb2RpZmllclRlc3QuY2xhc3MpOworCQlyZXR1cm4gc3VpdGU7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIE1vZGlmaWVyVGVzdHMoU3RyaW5nIG5hbWUpIHsKKwkJc3VwZXIobmFtZSk7CisJfQorCit9IC8vTW9kaWZpZXJUZXN0cwpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvbW9kaWZpZXIvdGVzdHMvTk9QTW9kaWZpZXJUZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9tb2RpZmllci90ZXN0cy9OT1BNb2RpZmllclRlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lOGZhMzI2Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvbW9kaWZpZXIvdGVzdHMvTk9QTW9kaWZpZXJUZXN0LmphdmEKQEAgLTAsMCArMSwxMTEgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLnRlc3RzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGp1bml0LnRleHR1aS5UZXN0UnVubmVyOworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzc2lmaWVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FY29yZVBhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLk1vZGlmaWVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuTk9QTW9kaWZpZXI7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gQSB0ZXN0IGNhc2UgZm9yIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5OT1AgTW9kaWZpZXI8L2I+PC9lbT4nLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK0BTdXBwcmVzc1dhcm5pbmdzKCJhbGwiKQorcHVibGljIGNsYXNzIE5PUE1vZGlmaWVyVGVzdCBleHRlbmRzIEZlYXR1cmVNb2RpZmllclRlc3QgeworCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKKwkJVGVzdFJ1bm5lci5ydW4oTk9QTW9kaWZpZXJUZXN0LmNsYXNzKTsKKwl9CisKKwkvKioKKwkgKiBDb25zdHJ1Y3RzIGEgbmV3IE5PUCBNb2RpZmllciB0ZXN0IGNhc2Ugd2l0aCB0aGUgZ2l2ZW4gbmFtZS4gPCEtLQorCSAqIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIE5PUE1vZGlmaWVyVGVzdChTdHJpbmcgbmFtZSkgeworCQlzdXBlcihuYW1lKTsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBmaXh0dXJlIGZvciB0aGlzIE5PUCBNb2RpZmllciB0ZXN0IGNhc2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYworCSAqIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIE5PUE1vZGlmaWVyIGdldEZpeHR1cmUoKSB7CisJCXJldHVybiAoTk9QTW9kaWZpZXIpZml4dHVyZTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAc2VlIGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZSNzZXRVcCgpCisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgdm9pZCBzZXRVcCgpIHRocm93cyBFeGNlcHRpb24geworCQlzdXBlci5zZXRVcCgpOworCQlzZXRGaXh0dXJlKE1vZGlmaWVyRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlTk9QTW9kaWZpZXIoKSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2UjdGVhckRvd24oKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgdm9pZCB0ZWFyRG93bigpIHRocm93cyBFeGNlcHRpb24geworCQlzZXRGaXh0dXJlKG51bGwpOworCX0KKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLnRlc3RzLkZlYXR1cmVNb2RpZmllclRlc3QjZ2V0VGVzdEF0dHJpYnV0ZUVUeXBlKCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgRUNsYXNzaWZpZXIgZ2V0VGVzdEF0dHJpYnV0ZUVUeXBlKCkgeworCQlyZXR1cm4gRWNvcmVQYWNrYWdlLmVJTlNUQU5DRS5nZXRFSW50KCk7CisJfQorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIudGVzdHMuRmVhdHVyZU1vZGlmaWVyVGVzdCN0ZXN0R2V0TW9kaWZpY2F0aW9uU3VtbWFyeSgpCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgdGVzdEdldE1vZGlmaWNhdGlvblN1bW1hcnkoKSB7CisJCWFzc2VydFRydWUodHJ1ZSk7CisJfQorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIudGVzdHMuRmVhdHVyZU1vZGlmaWVyVGVzdCNnZXROdW1iZXJPZk1vZGlmaWNhdGlvbnMoKQorCSAqLworCUBPdmVycmlkZQorCWludCBnZXROdW1iZXJPZk1vZGlmaWNhdGlvbnMoKSB7CisJCXJldHVybiAwOworCX0KKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLnRlc3RzLkZlYXR1cmVNb2RpZmllclRlc3QjdmFsaWRhdGVGZWF0dXJlVmFsdWUoaW50KQorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCBib29sZWFuIHZhbGlkYXRlRmVhdHVyZVZhbHVlKGludCBpKSB7CisJCXJldHVybiBmYWxzZTsKKwl9Cit9IC8vIE5PUE1vZGlmaWVyVGVzdApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvbW9kaWZpZXIvdGVzdHMvUmFuZ2VNb2RpZmllclRlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL21vZGlmaWVyL3Rlc3RzL1JhbmdlTW9kaWZpZXJUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzE4NjQzMAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL21vZGlmaWVyL3Rlc3RzL1JhbmdlTW9kaWZpZXJUZXN0LmphdmEKQEAgLTAsMCArMSw0NSBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIudGVzdHM7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLlJhbmdlTW9kaWZpZXI7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIEEgdGVzdCBjYXNlIGZvciB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+UmFuZ2UgTW9kaWZpZXI8L2I+PC9lbT4nLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBhYnN0cmFjdCBjbGFzcyBSYW5nZU1vZGlmaWVyVGVzdCBleHRlbmRzIEZlYXR1cmVNb2RpZmllclRlc3QgeworCisJLyoqCisJICogQ29uc3RydWN0cyBhIG5ldyBSYW5nZSBNb2RpZmllciB0ZXN0IGNhc2Ugd2l0aCB0aGUgZ2l2ZW4gbmFtZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgUmFuZ2VNb2RpZmllclRlc3QoU3RyaW5nIG5hbWUpIHsKKwkJc3VwZXIobmFtZSk7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgZml4dHVyZSBmb3IgdGhpcyBSYW5nZSBNb2RpZmllciB0ZXN0IGNhc2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIFJhbmdlTW9kaWZpZXIgZ2V0Rml4dHVyZSgpIHsKKwkJcmV0dXJuIChSYW5nZU1vZGlmaWVyKWZpeHR1cmU7CisJfQorCit9IC8vUmFuZ2VNb2RpZmllclRlc3QKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL21vZGlmaWVyL3Rlc3RzL1NURU1UaW1lTW9kaWZpZXJUZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9tb2RpZmllci90ZXN0cy9TVEVNVGltZU1vZGlmaWVyVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgxNzVhMzgKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9tb2RpZmllci90ZXN0cy9TVEVNVGltZU1vZGlmaWVyVGVzdC5qYXZhCkBAIC0wLDAgKzEsMTQzIEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci50ZXN0czsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAxMCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqdW5pdC50ZXh0dWkuVGVzdFJ1bm5lcjsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3NpZmllcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRWNvcmVQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5Nb2RlbEZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLlNURU1UaW1lOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5Nb2RpZmllckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLlNURU1UaW1lTW9kaWZpZXI7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIEEgdGVzdCBjYXNlIGZvciB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+U1RFTSBUaW1lIE1vZGlmaWVyPC9iPjwvZW0+Jy4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgU1RFTVRpbWVNb2RpZmllclRlc3QgZXh0ZW5kcyBTaW5nbGVWYWx1ZU1vZGlmaWVyVGVzdCB7CisJCisJcHJpdmF0ZSBzdGF0aWMgU1RFTVRpbWUgT1JJR0lOQUxfVkFMVUU7CisJcHJpdmF0ZSBzdGF0aWMgU1RFTVRpbWUgTkVXX1ZBTFVFOworCS8vIE9uZSBkYXkncyB3b3J0aCBvZiBtaWxsaXNlY29uZHMKKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBsb25nIFRFU1RfSU5DUkVNRU5UID0gMjQgKiA2MCAqIDYwICogMTAwMDsKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKKwkJVGVzdFJ1bm5lci5ydW4oU1RFTVRpbWVNb2RpZmllclRlc3QuY2xhc3MpOworCX0KKworCS8qKgorCSAqIENvbnN0cnVjdHMgYSBuZXcgU1RFTSBUaW1lIE1vZGlmaWVyIHRlc3QgY2FzZSB3aXRoIHRoZSBnaXZlbiBuYW1lLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBTVEVNVGltZU1vZGlmaWVyVGVzdChTdHJpbmcgbmFtZSkgeworCQlzdXBlcihuYW1lKTsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBmaXh0dXJlIGZvciB0aGlzIFNURU0gVGltZSBNb2RpZmllciB0ZXN0IGNhc2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIFNURU1UaW1lTW9kaWZpZXIgZ2V0Rml4dHVyZSgpIHsKKwkJcmV0dXJuIChTVEVNVGltZU1vZGlmaWVyKWZpeHR1cmU7CisJfQorCisJLyoqCisJICogQHJldHVybiBhIHtAbGluayBTVEVNVGltZU1vZGlmaWVyfSByZWFkeSBmb3IgdGVzdGluZy4KKwkgKi8KKwlwdWJsaWMgU1RFTVRpbWVNb2RpZmllciBjcmVhdGVGaXh0dXJlKCkgeworCQlmaW5hbCBTVEVNVGltZU1vZGlmaWVyIHJldFZhbHVlID0gTW9kaWZpZXJGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVTVEVNVGltZU1vZGlmaWVyKCk7CisJCU9SSUdJTkFMX1ZBTFVFID0gTW9kZWxGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVTVEVNVGltZSgpOworCQlyZXRWYWx1ZS5zZXRPcmlnaW5hbFZhbHVlKE9SSUdJTkFMX1ZBTFVFKTsKKwkJTkVXX1ZBTFVFID0gT1JJR0lOQUxfVkFMVUUuYWRkSW5jcmVtZW50KFRFU1RfSU5DUkVNRU5UKTsKKwkJcmV0VmFsdWUuc2V0VmFsdWUoTkVXX1ZBTFVFKTsKKwkJcmV0VmFsdWUuc2V0RmVhdHVyZU5hbWUoIlNURU1UaW1lTW9kaWZpZXJUZXN0Iik7CisJCXJldFZhbHVlLnNldEVTdHJ1Y3R1cmFsRmVhdHVyZShnZXRUZXN0T2JqZWN0KCkuZUNsYXNzKCkKKwkJCQkuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgwKSk7CisJCQorCQlyZXR1cm4gcmV0VmFsdWU7CisJfSAvLyBjcmVhdGVGaXh0dXJlCisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlI3NldFVwKCkKKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIHNldFVwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCXN1cGVyLnNldFVwKCk7CisJCXNldEZpeHR1cmUoY3JlYXRlRml4dHVyZSgpKTsKKwl9CisJCisJCisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlI3RlYXJEb3duKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgdGVhckRvd24oKSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJc2V0Rml4dHVyZShudWxsKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlI2dldE51bWJlck9mTW9kaWZpY2F0aW9ucygpCisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlAT3ZlcnJpZGUKKwlpbnQgZ2V0TnVtYmVyT2ZNb2RpZmljYXRpb25zKCkgeworCQlyZXR1cm4gMTsKKwl9CisKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2UjZ2V0VGVzdEF0dHJpYnV0ZUVUeXBlKCkKKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCXByb3RlY3RlZCBFQ2xhc3NpZmllciBnZXRUZXN0QXR0cmlidXRlRVR5cGUoKSB7CisJCXJldHVybiBFY29yZVBhY2thZ2UuZUlOU1RBTkNFLmdldEVPYmplY3QoKTsKKwl9IC8vIGdldFRlc3RBdHRyaWJ1dGVFVHlwZQorCisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci50ZXN0cy5GZWF0dXJlTW9kaWZpZXJUZXN0I3ZhbGlkYXRlRmVhdHVyZVZhbHVlKGludCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgYm9vbGVhbiB2YWxpZGF0ZUZlYXR1cmVWYWx1ZShpbnQgaSkgeworCQlhc3NlcnRUcnVlKGkgPj0gMCk7CisJCQorCQlmaW5hbCBTVEVNVGltZU1vZGlmaWVyIGZpeHR1cmUgPSBnZXRGaXh0dXJlKCk7CisJCU9iamVjdCBjdXJyZW50VmFsdWUgPSBnZXRUZXN0T2JqZWN0KCkuZUdldChmaXh0dXJlLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZSgpKTsKKworCQlyZXR1cm4gKGN1cnJlbnRWYWx1ZSBpbnN0YW5jZW9mIFNURU1UaW1lKTsKKwl9IC8vIHZhbGlkYXRlRmVhdHVyZVZhbHVlCisKK30gLy9TVEVNVGltZU1vZGlmaWVyVGVzdApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvbW9kaWZpZXIvdGVzdHMvU1RFTVRpbWVOT1BNb2RpZmllclRlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL21vZGlmaWVyL3Rlc3RzL1NURU1UaW1lTk9QTW9kaWZpZXJUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODhkYzkzMAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL21vZGlmaWVyL3Rlc3RzL1NURU1UaW1lTk9QTW9kaWZpZXJUZXN0LmphdmEKQEAgLTAsMCArMSwxMDUgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLnRlc3RzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGp1bml0LnRleHR1aS5UZXN0UnVubmVyOworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzc2lmaWVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FU3RydWN0dXJhbEZlYXR1cmU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLk1vZGVsUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuTW9kaWZpZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5TVEVNVGltZU5PUE1vZGlmaWVyOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiBBIHRlc3QgY2FzZSBmb3IgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPlNURU0gVGltZSBOT1AgTW9kaWZpZXI8L2I+PC9lbT4nLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK0BTdXBwcmVzc1dhcm5pbmdzKCJhbGwiKQorcHVibGljIGNsYXNzIFNURU1UaW1lTk9QTW9kaWZpZXJUZXN0IGV4dGVuZHMgTk9QTW9kaWZpZXJUZXN0IHsKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKKwkJVGVzdFJ1bm5lci5ydW4oU1RFTVRpbWVOT1BNb2RpZmllclRlc3QuY2xhc3MpOworCX0KKworCS8qKgorCSAqIENvbnN0cnVjdHMgYSBuZXcgU1RFTSBUaW1lIE5PUCBNb2RpZmllciB0ZXN0IGNhc2Ugd2l0aCB0aGUgZ2l2ZW4gbmFtZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgU1RFTVRpbWVOT1BNb2RpZmllclRlc3QoU3RyaW5nIG5hbWUpIHsKKwkJc3VwZXIobmFtZSk7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgZml4dHVyZSBmb3IgdGhpcyBTVEVNIFRpbWUgTk9QIE1vZGlmaWVyIHRlc3QgY2FzZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgU1RFTVRpbWVOT1BNb2RpZmllciBnZXRGaXh0dXJlKCkgeworCQlyZXR1cm4gKFNURU1UaW1lTk9QTW9kaWZpZXIpZml4dHVyZTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlI3NldFVwKCkKKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIHNldFVwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCXN1cGVyLnNldFVwKCk7CisJCXNldEZpeHR1cmUoY3JlYXRlRml4dHVyZSgpKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlI3RlYXJEb3duKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgdGVhckRvd24oKSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJc2V0Rml4dHVyZShudWxsKTsKKwl9CisKKwkvKioKKwkgKiBAcmV0dXJuIGEge0BsaW5rIFNURU1UaW1lTk9QTW9kaWZpZXJ9IHJlYWR5IGZvciB0ZXN0aW5nLgorCSAqLworCXB1YmxpYyBTVEVNVGltZU5PUE1vZGlmaWVyIGNyZWF0ZUZpeHR1cmUoKSB7CisJCWZpbmFsIFNURU1UaW1lTk9QTW9kaWZpZXIgcmV0VmFsdWUgPSBNb2RpZmllckZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZVNURU1UaW1lTk9QTW9kaWZpZXIoKTsKKwkJRU9iamVjdCB0ZXN0T2JqZWN0ID0gZ2V0VGVzdE9iamVjdCgpOworCQlFU3RydWN0dXJhbEZlYXR1cmUgZmVhdHVyZSA9IHRlc3RPYmplY3QuZUNsYXNzKCkKKwkJLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMCk7CisJCXJldFZhbHVlLnNldEVTdHJ1Y3R1cmFsRmVhdHVyZShmZWF0dXJlKTsKKwkJcmV0dXJuIHJldFZhbHVlOworCX0gLy8gY3JlYXRlRml4dHVyZQorCQorCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLnRlc3RzLkZlYXR1cmVNb2RpZmllclRlc3QjZ2V0VGVzdEF0dHJpYnV0ZUVUeXBlKCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgRUNsYXNzaWZpZXIgZ2V0VGVzdEF0dHJpYnV0ZUVUeXBlKCkgeworCQlyZXR1cm4gTW9kZWxQYWNrYWdlLmVJTlNUQU5DRS5nZXRTVEVNVGltZSgpOworCX0gLy8gZ2V0VGVzdEF0dHJpYnV0ZUVUeXBlCisKK30gLy9TVEVNVGltZU5PUE1vZGlmaWVyVGVzdApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvbW9kaWZpZXIvdGVzdHMvU1RFTVRpbWVSYW5nZU1vZGlmaWVyVGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvbW9kaWZpZXIvdGVzdHMvU1RFTVRpbWVSYW5nZU1vZGlmaWVyVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgyZDVhNmQKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9tb2RpZmllci90ZXN0cy9TVEVNVGltZVJhbmdlTW9kaWZpZXJUZXN0LmphdmEKQEAgLTAsMCArMSwxMzkgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLnRlc3RzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGp1bml0LnRleHR1aS5UZXN0UnVubmVyOworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzc2lmaWVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5Nb2RlbEZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLk1vZGVsUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuU1RFTVRpbWU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLkRvdWJsZVJhbmdlTW9kaWZpZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLk1vZGlmaWVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuU1RFTVRpbWVSYW5nZU1vZGlmaWVyOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IEEgdGVzdCBjYXNlIGZvciB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+U1RFTSBUaW1lIFJhbmdlIE1vZGlmaWVyPC9iPjwvZW0+Jy4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQGdlbmVyYXRlZAorICovCitAU3VwcHJlc3NXYXJuaW5ncygiYWxsIikKK3B1YmxpYyBjbGFzcyBTVEVNVGltZVJhbmdlTW9kaWZpZXJUZXN0IGV4dGVuZHMgUmFuZ2VNb2RpZmllclRlc3QgeworCisJcHVibGljIHN0YXRpYyBmaW5hbCBTVEVNVGltZSBTVEVNX1RJTUVfU1RBUlRfVkFMVUUgPSBNb2RlbEZhY3RvcnkuZUlOU1RBTkNFCisJCQkuY3JlYXRlU1RFTVRpbWUoKTsKKwlwdWJsaWMgc3RhdGljIGZpbmFsIFNURU1UaW1lIFNURU1fVElNRV9FTkRfVkFMVUUgPSBNb2RlbEZhY3RvcnkuZUlOU1RBTkNFCisJCQkuY3JlYXRlU1RFTVRpbWUoKTsKKwlwdWJsaWMgc3RhdGljIGZpbmFsIGxvbmcgU1RFTV9USU1FX0lOQ1JFTUVOVF9WQUxVRSA9IFNURU1UaW1lLlVuaXRzLkRBWQorCQkJLmdldE1pbGxpc2Vjb25kcygpOworCisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgU1RFTVRpbWUgRVhQRUNURURfVkFMVUVTW10gPSBuZXcgU1RFTVRpbWVbXSB7CisJCQlTVEVNX1RJTUVfU1RBUlRfVkFMVUUsIFNURU1fVElNRV9FTkRfVkFMVUUgfTsKKwkKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgeworCQlUZXN0UnVubmVyLnJ1bihTVEVNVGltZVJhbmdlTW9kaWZpZXJUZXN0LmNsYXNzKTsKKwl9CisKKwkvKioKKwkgKiBDb25zdHJ1Y3RzIGEgbmV3IFNURU0gVGltZSBSYW5nZSBNb2RpZmllciB0ZXN0IGNhc2Ugd2l0aCB0aGUgZ2l2ZW4gbmFtZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFNURU1UaW1lUmFuZ2VNb2RpZmllclRlc3QoU3RyaW5nIG5hbWUpIHsKKwkJc3VwZXIobmFtZSk7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgZml4dHVyZSBmb3IgdGhpcyBTVEVNIFRpbWUgUmFuZ2UgTW9kaWZpZXIgdGVzdCBjYXNlLiA8IS0tCisJICogYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgU1RFTVRpbWVSYW5nZU1vZGlmaWVyIGdldEZpeHR1cmUoKSB7CisJCXJldHVybiAoU1RFTVRpbWVSYW5nZU1vZGlmaWVyKWZpeHR1cmU7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogCisJICogQHNlZSBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2Ujc2V0VXAoKQorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgc2V0VXAoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJc3VwZXIuc2V0VXAoKTsKKwkJc2V0Rml4dHVyZShjcmVhdGVGaXh0dXJlKCkpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlI3RlYXJEb3duKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgdGVhckRvd24oKSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJc2V0Rml4dHVyZShudWxsKTsKKwl9CisKKwkvKioKKwkgKiBAcmV0dXJuIGEge0BsaW5rIERvdWJsZVJhbmdlTW9kaWZpZXJ9IHJlYWR5IGZvciB0ZXN0aW5nLgorCSAqLworCXB1YmxpYyBTVEVNVGltZVJhbmdlTW9kaWZpZXIgY3JlYXRlRml4dHVyZSgpIHsKKwkJZmluYWwgU1RFTVRpbWVSYW5nZU1vZGlmaWVyIHJldFZhbHVlID0gTW9kaWZpZXJGYWN0b3J5LmVJTlNUQU5DRQorCQkJCS5jcmVhdGVTVEVNVGltZVJhbmdlTW9kaWZpZXIoKTsKKwkJcmV0VmFsdWUuc2V0U3RhcnRWYWx1ZShTVEVNX1RJTUVfU1RBUlRfVkFMVUUpOworCQlyZXRWYWx1ZS5zZXRFbmRWYWx1ZShTVEVNX1RJTUVfRU5EX1ZBTFVFKTsKKwkJcmV0VmFsdWUuc2V0SW5jcmVtZW50KFNURU1fVElNRV9JTkNSRU1FTlRfVkFMVUUpOworCQlyZXRWYWx1ZS5zZXRFU3RydWN0dXJhbEZlYXR1cmUoZ2V0VGVzdE9iamVjdCgpLmVDbGFzcygpCisJCQkJLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMCkpOworCQlyZXR1cm4gcmV0VmFsdWU7CisJfSAvLyBjcmVhdGVGaXh0dXJlCisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci50ZXN0cy5GZWF0dXJlTW9kaWZpZXJUZXN0I2dldFRlc3RBdHRyaWJ1dGVFVHlwZSgpCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIEVDbGFzc2lmaWVyIGdldFRlc3RBdHRyaWJ1dGVFVHlwZSgpIHsKKwkJcmV0dXJuIE1vZGVsUGFja2FnZS5lSU5TVEFOQ0UuZ2V0U1RFTVRpbWUoKTsKKwl9IC8vIGdldFRlc3RBdHRyaWJ1dGVFVHlwZQorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIudGVzdHMuRmVhdHVyZU1vZGlmaWVyVGVzdCNnZXROdW1iZXJPZk1vZGlmaWNhdGlvbnMoKQorCSAqLworCUBPdmVycmlkZQorCWludCBnZXROdW1iZXJPZk1vZGlmaWNhdGlvbnMoKSB7CisJCVNURU1UaW1lUmFuZ2VNb2RpZmllciBmaXh0dXJlID0gZ2V0Rml4dHVyZSgpOworCQkvLyRBTkFMWVNJUy1JR05PUkUKKwkJZmluYWwgaW50IHJldFZhbHVlID0gKGludCkgKChmaXh0dXJlLmdldEVuZFZhbHVlKCkuZ2V0VGltZSgpLmdldFRpbWUoKSAtIGZpeHR1cmUKKwkJCQkJCS5nZXRTdGFydFZhbHVlKCkuZ2V0VGltZSgpLmdldFRpbWUoKSkgLyBmaXh0dXJlLmdldEluY3JlbWVudCgpKSArIDE7CisJCXJldHVybiByZXRWYWx1ZTsKKwl9IC8vIGdldE51bWJlck9mTW9kaWZpY2F0aW9ucworCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIudGVzdHMuRmVhdHVyZU1vZGlmaWVyVGVzdCN2YWxpZGF0ZUZlYXR1cmVWYWx1ZShpbnQpCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIGJvb2xlYW4gdmFsaWRhdGVGZWF0dXJlVmFsdWUoaW50IGkpIHsKKwkJYXNzZXJ0VHJ1ZShpID49IDApOworCQlhc3NlcnRUcnVlKGkgPCBFWFBFQ1RFRF9WQUxVRVMubGVuZ3RoKTsKKwkJZmluYWwgU1RFTVRpbWVSYW5nZU1vZGlmaWVyIGZpeHR1cmUgPSBnZXRGaXh0dXJlKCk7CisJCVNURU1UaW1lIGN1cnJlbnRWYWx1ZSA9IChTVEVNVGltZSkgZ2V0VGVzdE9iamVjdCgpLmVHZXQoCisJCQkJZml4dHVyZS5nZXRFU3RydWN0dXJhbEZlYXR1cmUoKSk7CisJCXJldHVybiBjdXJyZW50VmFsdWUuZXF1YWxzKCBFWFBFQ1RFRF9WQUxVRVNbaV0pOworCX0KKworfSAvLyBTVEVNVGltZVJhbmdlTW9kaWZpZXJUZXN0CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9tb2RpZmllci90ZXN0cy9TVEVNVGltZVNlcXVlbmNlTW9kaWZpZXJUZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9tb2RpZmllci90ZXN0cy9TVEVNVGltZVNlcXVlbmNlTW9kaWZpZXJUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTQ5NWQwMQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL21vZGlmaWVyL3Rlc3RzL1NURU1UaW1lU2VxdWVuY2VNb2RpZmllclRlc3QuamF2YQpAQCAtMCwwICsxLDEzNSBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIudGVzdHM7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQganVuaXQudGV4dHVpLlRlc3RSdW5uZXI7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzaWZpZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLk1vZGVsUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuU1RFTVRpbWU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLk1vZGlmaWVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuU1RFTVRpbWVTZXF1ZW5jZU1vZGlmaWVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5TZXF1ZW5jZU1vZGlmaWVyOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiBBIHRlc3QgY2FzZSBmb3IgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPlNURU0gVGltZSBTZXF1ZW5jZSBNb2RpZmllcjwvYj48L2VtPicuCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBnZW5lcmF0ZWQKKyAqLworQFN1cHByZXNzV2FybmluZ3MoImFsbCIpCitwdWJsaWMgY2xhc3MgU1RFTVRpbWVTZXF1ZW5jZU1vZGlmaWVyVGVzdCBleHRlbmRzIFNlcXVlbmNlTW9kaWZpZXJUZXN0IHsKKworCXByaXZhdGUgc3RhdGljIGZpbmFsIFNURU1UaW1lIEVYUEVDVEVEX1ZBTFVFU1tdID0gbmV3IFNURU1UaW1lW10geworCQlTVEVNVGltZVJhbmdlTW9kaWZpZXJUZXN0LlNURU1fVElNRV9TVEFSVF9WQUxVRSwKKwkJU1RFTVRpbWVSYW5nZU1vZGlmaWVyVGVzdC5TVEVNX1RJTUVfRU5EX1ZBTFVFIH07CisJCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgeworCQlUZXN0UnVubmVyLnJ1bihTVEVNVGltZVNlcXVlbmNlTW9kaWZpZXJUZXN0LmNsYXNzKTsKKwl9CisKKwkvKioKKwkgKiBDb25zdHJ1Y3RzIGEgbmV3IFNURU0gVGltZSBTZXF1ZW5jZSBNb2RpZmllciB0ZXN0IGNhc2Ugd2l0aCB0aGUgZ2l2ZW4gbmFtZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgU1RFTVRpbWVTZXF1ZW5jZU1vZGlmaWVyVGVzdChTdHJpbmcgbmFtZSkgeworCQlzdXBlcihuYW1lKTsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBmaXh0dXJlIGZvciB0aGlzIFNURU0gVGltZSBTZXF1ZW5jZSBNb2RpZmllciB0ZXN0IGNhc2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIFNURU1UaW1lU2VxdWVuY2VNb2RpZmllciBnZXRGaXh0dXJlKCkgeworCQlyZXR1cm4gKFNURU1UaW1lU2VxdWVuY2VNb2RpZmllcilmaXh0dXJlOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2Ujc2V0VXAoKQorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgc2V0VXAoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJc3VwZXIuc2V0VXAoKTsKKwkJc2V0Rml4dHVyZShjcmVhdGVGaXh0dXJlKCkpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2UjdGVhckRvd24oKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgdm9pZCB0ZWFyRG93bigpIHRocm93cyBFeGNlcHRpb24geworCQlzZXRGaXh0dXJlKG51bGwpOworCX0KKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLnRlc3RzLlNlcXVlbmNlTW9kaWZpZXJUZXN0I2NyZWF0ZUZpeHR1cmUoKQorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBTZXF1ZW5jZU1vZGlmaWVyIGNyZWF0ZUZpeHR1cmUoKSB7CisJCWZpbmFsIFNURU1UaW1lU2VxdWVuY2VNb2RpZmllciByZXRWYWx1ZSA9IE1vZGlmaWVyRmFjdG9yeS5lSU5TVEFOQ0UKKwkJCQkuY3JlYXRlU1RFTVRpbWVTZXF1ZW5jZU1vZGlmaWVyKCk7CisJCWZvciAoU1RFTVRpbWUgdmFsdWUgOiBFWFBFQ1RFRF9WQUxVRVMpIHsKKwkJCSByZXRWYWx1ZS5nZXRTZXF1ZW5jZSgpLmFkZCh2YWx1ZSk7CisJCX0gLy8gZm9yIGVhY2ggZG91YmxlCisKKwkJcmV0VmFsdWUuc2V0RVN0cnVjdHVyYWxGZWF0dXJlKGdldFRlc3RPYmplY3QoKS5lQ2xhc3MoKQorCQkJCS5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDApKTsKKwkJcmV0dXJuIHJldFZhbHVlOworCX0gLy8gY3JlYXRlRml4dHVyZQorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIudGVzdHMuRmVhdHVyZU1vZGlmaWVyVGVzdCNnZXROdW1iZXJPZk1vZGlmaWNhdGlvbnMoKQorCSAqLworCUBPdmVycmlkZQorCWludCBnZXROdW1iZXJPZk1vZGlmaWNhdGlvbnMoKSB7CisJCXJldHVybiBFWFBFQ1RFRF9WQUxVRVMubGVuZ3RoOworCX0KKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLnRlc3RzLkZlYXR1cmVNb2RpZmllclRlc3QjZ2V0VGVzdEF0dHJpYnV0ZUVUeXBlKCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgRUNsYXNzaWZpZXIgZ2V0VGVzdEF0dHJpYnV0ZUVUeXBlKCkgeworCQlyZXR1cm4gTW9kZWxQYWNrYWdlLmVJTlNUQU5DRS5nZXRTVEVNVGltZSgpOworCX0KKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLnRlc3RzLkZlYXR1cmVNb2RpZmllclRlc3QjdmFsaWRhdGVGZWF0dXJlVmFsdWUoaW50KQorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCBib29sZWFuIHZhbGlkYXRlRmVhdHVyZVZhbHVlKGludCBpKSB7CisJCWFzc2VydFRydWUoaSA+PSAwKTsKKwkJYXNzZXJ0VHJ1ZShpIDwgRVhQRUNURURfVkFMVUVTLmxlbmd0aCk7CisJCWZpbmFsIFNURU1UaW1lU2VxdWVuY2VNb2RpZmllciBmaXh0dXJlID0gZ2V0Rml4dHVyZSgpOworCQlTVEVNVGltZSBjdXJyZW50VmFsdWUgPSAoU1RFTVRpbWUpIGdldFRlc3RPYmplY3QoKS5lR2V0KAorCQkJCWZpeHR1cmUuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlKCkpOworCQlyZXR1cm4gY3VycmVudFZhbHVlLmVxdWFscyggRVhQRUNURURfVkFMVUVTW2ldKTsKKwl9IC8vIHZhbGlkYXRlRmVhdHVyZVZhbHVlCisJCisKK30gLy9TVEVNVGltZVNlcXVlbmNlTW9kaWZpZXJUZXN0CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9tb2RpZmllci90ZXN0cy9TZXF1ZW5jZU1vZGlmaWVyVGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvbW9kaWZpZXIvdGVzdHMvU2VxdWVuY2VNb2RpZmllclRlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYTg4MDUzCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvbW9kaWZpZXIvdGVzdHMvU2VxdWVuY2VNb2RpZmllclRlc3QuamF2YQpAQCAtMCwwICsxLDExOCBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIudGVzdHM7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3Q7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLlNlcXVlbmNlTW9kaWZpZXI7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIEEgdGVzdCBjYXNlIGZvciB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+U2VxdWVuY2UgTW9kaWZpZXI8L2I+PC9lbT4nLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiA8cD4KKyAqIFRoZSBmb2xsb3dpbmcgZmVhdHVyZXMgYXJlIHRlc3RlZDoKKyAqIDx1bD4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuU2VxdWVuY2VNb2RpZmllciNnZXRTZXF1ZW5jZVNpemUoKSA8ZW0+U2VxdWVuY2UgU2l6ZTwvZW0+fTwvbGk+CisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLlNlcXVlbmNlTW9kaWZpZXIjZ2V0TmV4dFZhbHVlKCkgPGVtPk5leHQgVmFsdWU8L2VtPn08L2xpPgorICogPC91bD4KKyAqIDwvcD4KKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGFic3RyYWN0IGNsYXNzIFNlcXVlbmNlTW9kaWZpZXJUZXN0IGV4dGVuZHMgRmVhdHVyZU1vZGlmaWVyVGVzdCB7CisKKwkvKioKKwkgKiBDb25zdHJ1Y3RzIGEgbmV3IFNlcXVlbmNlIE1vZGlmaWVyIHRlc3QgY2FzZSB3aXRoIHRoZSBnaXZlbiBuYW1lLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBTZXF1ZW5jZU1vZGlmaWVyVGVzdChTdHJpbmcgbmFtZSkgeworCQlzdXBlcihuYW1lKTsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBmaXh0dXJlIGZvciB0aGlzIFNlcXVlbmNlIE1vZGlmaWVyIHRlc3QgY2FzZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgU2VxdWVuY2VNb2RpZmllciBnZXRGaXh0dXJlKCkgeworCQlyZXR1cm4gKFNlcXVlbmNlTW9kaWZpZXIpZml4dHVyZTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlI3NldFVwKCkKKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIHNldFVwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCXN1cGVyLnNldFVwKCk7CisJCXNldEZpeHR1cmUoY3JlYXRlRml4dHVyZSgpKTsKKwl9CisKKwkvKioKKwkgKiBAcmV0dXJuIGEgU2VxdWVuY2VNb2RpZmllciByZWFkeSBmb3IgdGVzdGluZy4KKwkgKi8KKwlhYnN0cmFjdCBwdWJsaWMgU2VxdWVuY2VNb2RpZmllciBjcmVhdGVGaXh0dXJlKCk7CisJCisJLyoqCisJICogVGVzdHMgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLlNlcXVlbmNlTW9kaWZpZXIjZ2V0U2VxdWVuY2VTaXplKCkgPGVtPlNlcXVlbmNlIFNpemU8L2VtPn0nIGZlYXR1cmUgZ2V0dGVyLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuU2VxdWVuY2VNb2RpZmllciNnZXRTZXF1ZW5jZVNpemUoKQorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJcHVibGljIHZvaWQgdGVzdEdldFNlcXVlbmNlU2l6ZSgpIHsKKwkJZmluYWwgU2VxdWVuY2VNb2RpZmllciBmaXh0dXJlID0gZ2V0Rml4dHVyZSgpOworCQlhc3NlcnRUcnVlKGZpeHR1cmUuZ2V0U2VxdWVuY2VTaXplKCkgPT0gZ2V0TnVtYmVyT2ZNb2RpZmljYXRpb25zKCkpOworCX0gLy8gdGVzdEdldFNlcXVlbmNlU2l6ZQorCisJLyoqCisJICogVGVzdHMgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLlNlcXVlbmNlTW9kaWZpZXIjZ2V0TmV4dFZhbHVlKCkgPGVtPk5leHQgVmFsdWU8L2VtPn0nIGZlYXR1cmUgZ2V0dGVyLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuU2VxdWVuY2VNb2RpZmllciNnZXROZXh0VmFsdWUoKQorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJcHVibGljIHZvaWQgdGVzdEdldE5leHRWYWx1ZSgpIHsKKwkJZmluYWwgU2VxdWVuY2VNb2RpZmllciBmaXh0dXJlID0gZ2V0Rml4dHVyZSgpOworCQlmaW5hbCBFT2JqZWN0IHRlc3RPYmplY3QgPSBnZXRUZXN0T2JqZWN0KCk7CisJCWZpeHR1cmUuc2V0VGFyZ2V0KHRlc3RPYmplY3QpOworCQlhc3NlcnROb3ROdWxsKGZpeHR1cmUuZ2V0TmV4dFZhbHVlKCkgKTsKKwl9CisKKwkvKioKKwkgKiBUZXN0cyB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuU2VxdWVuY2VNb2RpZmllciNpc1NldE5leHRWYWx1ZSgpIDxlbT5pc1NldE5leHRWYWx1ZSgpPC9lbT59JyBtZXRob2QuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5TZXF1ZW5jZU1vZGlmaWVyI2lzU2V0TmV4dFZhbHVlKCkKKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCXB1YmxpYyB2b2lkIHRlc3RJc1NldE5leHRWYWx1ZSgpIHsKKwkJYXNzZXJ0VHJ1ZSh0cnVlKTsKKwl9CisKKwkvKioKKwkgKiBUZXN0cyB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuU2VxdWVuY2VNb2RpZmllciNzZXROZXh0VmFsdWUoamF2YS5sYW5nLk9iamVjdCkgPGVtPk5leHQgVmFsdWU8L2VtPn0nIGZlYXR1cmUgc2V0dGVyLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuU2VxdWVuY2VNb2RpZmllciNzZXROZXh0VmFsdWUoamF2YS5sYW5nLk9iamVjdCkKKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCXB1YmxpYyB2b2lkIHRlc3RTZXROZXh0VmFsdWUoKSB7CisJCWFzc2VydFRydWUodHJ1ZSk7CisJfQorCQorfSAvL1NlcXVlbmNlTW9kaWZpZXJUZXN0CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9tb2RpZmllci90ZXN0cy9TaW5nbGVWYWx1ZU1vZGlmaWVyVGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvbW9kaWZpZXIvdGVzdHMvU2luZ2xlVmFsdWVNb2RpZmllclRlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZDRlYTczCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvbW9kaWZpZXIvdGVzdHMvU2luZ2xlVmFsdWVNb2RpZmllclRlc3QuamF2YQpAQCAtMCwwICsxLDQ1IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci50ZXN0czsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAxMCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuU2luZ2xlVmFsdWVNb2RpZmllcjsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogQSB0ZXN0IGNhc2UgZm9yIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5TaW5nbGUgVmFsdWUgTW9kaWZpZXI8L2I+PC9lbT4nLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBhYnN0cmFjdCBjbGFzcyBTaW5nbGVWYWx1ZU1vZGlmaWVyVGVzdCBleHRlbmRzIEZlYXR1cmVNb2RpZmllclRlc3QgeworCisJLyoqCisJICogQ29uc3RydWN0cyBhIG5ldyBTaW5nbGUgVmFsdWUgTW9kaWZpZXIgdGVzdCBjYXNlIHdpdGggdGhlIGdpdmVuIG5hbWUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFNpbmdsZVZhbHVlTW9kaWZpZXJUZXN0KFN0cmluZyBuYW1lKSB7CisJCXN1cGVyKG5hbWUpOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIGZpeHR1cmUgZm9yIHRoaXMgU2luZ2xlIFZhbHVlIE1vZGlmaWVyIHRlc3QgY2FzZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgU2luZ2xlVmFsdWVNb2RpZmllciBnZXRGaXh0dXJlKCkgeworCQlyZXR1cm4gKFNpbmdsZVZhbHVlTW9kaWZpZXIpZml4dHVyZTsKKwl9CisKK30gLy9TaW5nbGVWYWx1ZU1vZGlmaWVyVGVzdApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvbW9kaWZpZXIvdGVzdHMvU3RyaW5nTk9QTW9kaWZpZXJUZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9tb2RpZmllci90ZXN0cy9TdHJpbmdOT1BNb2RpZmllclRlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MWVhN2EwCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvbW9kaWZpZXIvdGVzdHMvU3RyaW5nTk9QTW9kaWZpZXJUZXN0LmphdmEKQEAgLTAsMCArMSwxMDUgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLnRlc3RzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGp1bml0LnRleHR1aS5UZXN0UnVubmVyOworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzc2lmaWVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FU3RydWN0dXJhbEZlYXR1cmU7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVjb3JlUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuSW50ZWdlck5PUE1vZGlmaWVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5Nb2RpZmllckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLlN0cmluZ05PUE1vZGlmaWVyOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiBBIHRlc3QgY2FzZSBmb3IgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPlN0cmluZyBOT1AgTW9kaWZpZXI8L2I+PC9lbT4nLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK0BTdXBwcmVzc1dhcm5pbmdzKCJhbGwiKQorcHVibGljIGNsYXNzIFN0cmluZ05PUE1vZGlmaWVyVGVzdCBleHRlbmRzIE5PUE1vZGlmaWVyVGVzdCB7CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CisJCVRlc3RSdW5uZXIucnVuKFN0cmluZ05PUE1vZGlmaWVyVGVzdC5jbGFzcyk7CisJfQorCisJLyoqCisJICogQ29uc3RydWN0cyBhIG5ldyBTdHJpbmcgTk9QIE1vZGlmaWVyIHRlc3QgY2FzZSB3aXRoIHRoZSBnaXZlbiBuYW1lLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBTdHJpbmdOT1BNb2RpZmllclRlc3QoU3RyaW5nIG5hbWUpIHsKKwkJc3VwZXIobmFtZSk7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgZml4dHVyZSBmb3IgdGhpcyBTdHJpbmcgTk9QIE1vZGlmaWVyIHRlc3QgY2FzZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgU3RyaW5nTk9QTW9kaWZpZXIgZ2V0Rml4dHVyZSgpIHsKKwkJcmV0dXJuIChTdHJpbmdOT1BNb2RpZmllcilmaXh0dXJlOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2Ujc2V0VXAoKQorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgc2V0VXAoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJc3VwZXIuc2V0VXAoKTsKKwkJc2V0Rml4dHVyZShjcmVhdGVGaXh0dXJlKCkpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2UjdGVhckRvd24oKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgdm9pZCB0ZWFyRG93bigpIHRocm93cyBFeGNlcHRpb24geworCQlzZXRGaXh0dXJlKG51bGwpOworCX0KKworCS8qKgorCSAqIEByZXR1cm4gYSB7QGxpbmsgSW50ZWdlck5PUE1vZGlmaWVyfSByZWFkeSBmb3IgdGVzdGluZy4KKwkgKi8KKwlwdWJsaWMgU3RyaW5nTk9QTW9kaWZpZXIgY3JlYXRlRml4dHVyZSgpIHsKKwkJZmluYWwgU3RyaW5nTk9QTW9kaWZpZXIgcmV0VmFsdWUgPSBNb2RpZmllckZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZVN0cmluZ05PUE1vZGlmaWVyKCk7CisJCUVPYmplY3QgdGVzdE9iamVjdCA9IGdldFRlc3RPYmplY3QoKTsKKwkJRVN0cnVjdHVyYWxGZWF0dXJlIGZlYXR1cmUgPSB0ZXN0T2JqZWN0LmVDbGFzcygpCisJCS5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDApOworCQlyZXRWYWx1ZS5zZXRFU3RydWN0dXJhbEZlYXR1cmUoZmVhdHVyZSk7CisJCXJldHVybiByZXRWYWx1ZTsKKwl9IC8vIGNyZWF0ZUZpeHR1cmUKKwkKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci50ZXN0cy5GZWF0dXJlTW9kaWZpZXJUZXN0I2dldFRlc3RBdHRyaWJ1dGVFVHlwZSgpCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIEVDbGFzc2lmaWVyIGdldFRlc3RBdHRyaWJ1dGVFVHlwZSgpIHsKKwkJcmV0dXJuIEVjb3JlUGFja2FnZS5lSU5TVEFOQ0UuZ2V0RVN0cmluZygpOworCX0KK30gLy9TdHJpbmdOT1BNb2RpZmllclRlc3QKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL21vZGlmaWVyL3Rlc3RzL1N0cmluZ1NlcXVlbmNlTW9kaWZpZXJUZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9tb2RpZmllci90ZXN0cy9TdHJpbmdTZXF1ZW5jZU1vZGlmaWVyVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEyZTI1MmUKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9tb2RpZmllci90ZXN0cy9TdHJpbmdTZXF1ZW5jZU1vZGlmaWVyVGVzdC5qYXZhCkBAIC0wLDAgKzEsMTM3IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci50ZXN0czsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqdW5pdC50ZXh0dWkuVGVzdFJ1bm5lcjsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3NpZmllcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRWNvcmVQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5Nb2RpZmllckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLlNlcXVlbmNlTW9kaWZpZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLlN0cmluZ1NlcXVlbmNlTW9kaWZpZXI7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIEEgdGVzdCBjYXNlIGZvciB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+U3RyaW5nIFNlcXVlbmNlIE1vZGlmaWVyPC9iPjwvZW0+Jy4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQGdlbmVyYXRlZAorICovCitAU3VwcHJlc3NXYXJuaW5ncygiYWxsIikKK3B1YmxpYyBjbGFzcyBTdHJpbmdTZXF1ZW5jZU1vZGlmaWVyVGVzdCBleHRlbmRzIFNlcXVlbmNlTW9kaWZpZXJUZXN0IHsKKworcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgU1RSSU5HX1NUQVJUX1ZBTFVFID0gInN0YXJ0IjsKKwlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBTVFJJTkdfRU5EX1ZBTFVFID0gImVuZCI7CisKKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgRVhQRUNURURfVkFMVUVTW10gPSBuZXcgU3RyaW5nW10geworCQkJU1RSSU5HX1NUQVJUX1ZBTFVFLCBTVFJJTkdfRU5EX1ZBTFVFIH07CisKKwkKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CisJCVRlc3RSdW5uZXIucnVuKFN0cmluZ1NlcXVlbmNlTW9kaWZpZXJUZXN0LmNsYXNzKTsKKwl9CisKKwkvKioKKwkgKiBDb25zdHJ1Y3RzIGEgbmV3IFN0cmluZyBTZXF1ZW5jZSBNb2RpZmllciB0ZXN0IGNhc2Ugd2l0aCB0aGUgZ2l2ZW4gbmFtZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgU3RyaW5nU2VxdWVuY2VNb2RpZmllclRlc3QoU3RyaW5nIG5hbWUpIHsKKwkJc3VwZXIobmFtZSk7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgZml4dHVyZSBmb3IgdGhpcyBTdHJpbmcgU2VxdWVuY2UgTW9kaWZpZXIgdGVzdCBjYXNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCBTdHJpbmdTZXF1ZW5jZU1vZGlmaWVyIGdldEZpeHR1cmUoKSB7CisJCXJldHVybiAoU3RyaW5nU2VxdWVuY2VNb2RpZmllcilmaXh0dXJlOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2Ujc2V0VXAoKQorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgc2V0VXAoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJc3VwZXIuc2V0VXAoKTsKKwkJc2V0Rml4dHVyZShjcmVhdGVGaXh0dXJlKCkpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2UjdGVhckRvd24oKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgdm9pZCB0ZWFyRG93bigpIHRocm93cyBFeGNlcHRpb24geworCQlzZXRGaXh0dXJlKG51bGwpOworCX0KKwkKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci50ZXN0cy5TZXF1ZW5jZU1vZGlmaWVyVGVzdCNjcmVhdGVGaXh0dXJlKCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgU2VxdWVuY2VNb2RpZmllciBjcmVhdGVGaXh0dXJlKCkgeworCQlmaW5hbCBTdHJpbmdTZXF1ZW5jZU1vZGlmaWVyIHJldFZhbHVlID0gTW9kaWZpZXJGYWN0b3J5LmVJTlNUQU5DRQorCQkJCS5jcmVhdGVTdHJpbmdTZXF1ZW5jZU1vZGlmaWVyKCk7CisJCWZvciAoU3RyaW5nIHZhbHVlIDogRVhQRUNURURfVkFMVUVTKSB7CisJCQkgcmV0VmFsdWUuZ2V0U2VxdWVuY2UoKS5hZGQodmFsdWUpOworCQl9IC8vIGZvciBlYWNoIGRvdWJsZQorCisJCXJldFZhbHVlLnNldEVTdHJ1Y3R1cmFsRmVhdHVyZShnZXRUZXN0T2JqZWN0KCkuZUNsYXNzKCkKKwkJCQkuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgwKSk7CisJCXJldHVybiByZXRWYWx1ZTsKKwl9IC8vIGNyZWF0ZUZpeHR1cmUKKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLnRlc3RzLkZlYXR1cmVNb2RpZmllclRlc3QjZ2V0TnVtYmVyT2ZNb2RpZmljYXRpb25zKCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlpbnQgZ2V0TnVtYmVyT2ZNb2RpZmljYXRpb25zKCkgeworCQlyZXR1cm4gRVhQRUNURURfVkFMVUVTLmxlbmd0aDsKKwl9CisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci50ZXN0cy5GZWF0dXJlTW9kaWZpZXJUZXN0I2dldFRlc3RBdHRyaWJ1dGVFVHlwZSgpCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIEVDbGFzc2lmaWVyIGdldFRlc3RBdHRyaWJ1dGVFVHlwZSgpIHsKKwkJcmV0dXJuIEVjb3JlUGFja2FnZS5lSU5TVEFOQ0UuZ2V0RVN0cmluZygpOworCX0KKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLnRlc3RzLkZlYXR1cmVNb2RpZmllclRlc3QjdmFsaWRhdGVGZWF0dXJlVmFsdWUoaW50KQorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCBib29sZWFuIHZhbGlkYXRlRmVhdHVyZVZhbHVlKGludCBpKSB7CisJCWFzc2VydFRydWUoaSA+PSAwKTsKKwkJYXNzZXJ0VHJ1ZShpIDwgRVhQRUNURURfVkFMVUVTLmxlbmd0aCk7CisJCWZpbmFsIFN0cmluZ1NlcXVlbmNlTW9kaWZpZXIgZml4dHVyZSA9IGdldEZpeHR1cmUoKTsKKwkJU3RyaW5nIGN1cnJlbnRWYWx1ZSA9IChTdHJpbmcpIGdldFRlc3RPYmplY3QoKS5lR2V0KAorCQkJCWZpeHR1cmUuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlKCkpOworCQlyZXR1cm4gY3VycmVudFZhbHVlLmVxdWFscyggRVhQRUNURURfVkFMVUVTW2ldKTsKKwl9IC8vIHZhbGlkYXRlRmVhdHVyZVZhbHVlCisJCisKK30gLy9TdHJpbmdTZXF1ZW5jZU1vZGlmaWVyVGVzdApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvcHJlZGljYXRlL3Rlc3RzL0FuZFRlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3ByZWRpY2F0ZS90ZXN0cy9BbmRUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTFjMWI5MAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3ByZWRpY2F0ZS90ZXN0cy9BbmRUZXN0LmphdmEKQEAgLTAsMCArMSw5NCBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlLnRlc3RzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGp1bml0LnRleHR1aS5UZXN0UnVubmVyOworCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZS5BbmQ7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZS5QcmVkaWNhdGVGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUuVHJ1ZTsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogQSB0ZXN0IGNhc2UgZm9yIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5BbmQ8L2I+PC9lbT4nLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK0BTdXBwcmVzc1dhcm5pbmdzKCJhbGwiKQorcHVibGljIGNsYXNzIEFuZFRlc3QgZXh0ZW5kcyBOYXJ5Qm9vbGVhbk9wZXJhdG9yVGVzdCB7CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CisJCVRlc3RSdW5uZXIucnVuKEFuZFRlc3QuY2xhc3MpOworCX0KKworCS8qKgorCSAqIENvbnN0cnVjdHMgYSBuZXcgQW5kIHRlc3QgY2FzZSB3aXRoIHRoZSBnaXZlbiBuYW1lLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBBbmRUZXN0KFN0cmluZyBuYW1lKSB7CisJCXN1cGVyKG5hbWUpOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIGZpeHR1cmUgZm9yIHRoaXMgQW5kIHRlc3QgY2FzZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgQW5kIGdldEZpeHR1cmUoKSB7CisJCXJldHVybiAoQW5kKWZpeHR1cmU7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZSNzZXRVcCgpCisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgdm9pZCBzZXRVcCgpIHRocm93cyBFeGNlcHRpb24geworCQlmaW5hbCBBbmQgYW5kRXhwcmVzc2lvbiA9IFByZWRpY2F0ZUZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZUFuZCgpOworCQlmaW5hbCBUcnVlIHRydWUwID0gUHJlZGljYXRlRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlVHJ1ZSgpOworCQlmaW5hbCBUcnVlIHRydWUxID0gUHJlZGljYXRlRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlVHJ1ZSgpOworCQlhbmRFeHByZXNzaW9uLmdldE9wZXJhbmRzKCkuYWRkKHRydWUwKTsKKwkJYW5kRXhwcmVzc2lvbi5nZXRPcGVyYW5kcygpLmFkZCh0cnVlMSk7CisJCXNldEZpeHR1cmUoYW5kRXhwcmVzc2lvbik7CisJfSAvLyBzZXRVcAorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZSN0ZWFyRG93bigpCisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIHRlYXJEb3duKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCXNldEZpeHR1cmUobnVsbCk7CisJfQorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlLnRlc3RzLlByZWRpY2F0ZVRlc3QjZ2V0RXhwZWN0ZWRSZXN1bHQoKQorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCBib29sZWFuIGdldEV4cGVjdGVkUmVzdWx0KCkgeworCQlyZXR1cm4gdHJ1ZTsKKwl9CisKK30gLy9BbmRUZXN0CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9wcmVkaWNhdGUvdGVzdHMvQm9vbGVhbkV4cHJlc3Npb25UZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9wcmVkaWNhdGUvdGVzdHMvQm9vbGVhbkV4cHJlc3Npb25UZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2Q3NGM0ZgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3ByZWRpY2F0ZS90ZXN0cy9Cb29sZWFuRXhwcmVzc2lvblRlc3QuamF2YQpAQCAtMCwwICsxLDQ1IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUudGVzdHM7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZS5Cb29sZWFuRXhwcmVzc2lvbjsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogQSB0ZXN0IGNhc2UgZm9yIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5Cb29sZWFuIEV4cHJlc3Npb248L2I+PC9lbT4nLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBhYnN0cmFjdCBjbGFzcyBCb29sZWFuRXhwcmVzc2lvblRlc3QgZXh0ZW5kcyBQcmVkaWNhdGVUZXN0IHsKKworCS8qKgorCSAqIENvbnN0cnVjdHMgYSBuZXcgQm9vbGVhbiBFeHByZXNzaW9uIHRlc3QgY2FzZSB3aXRoIHRoZSBnaXZlbiBuYW1lLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBCb29sZWFuRXhwcmVzc2lvblRlc3QoU3RyaW5nIG5hbWUpIHsKKwkJc3VwZXIobmFtZSk7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgZml4dHVyZSBmb3IgdGhpcyBCb29sZWFuIEV4cHJlc3Npb24gdGVzdCBjYXNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCBCb29sZWFuRXhwcmVzc2lvbiBnZXRGaXh0dXJlKCkgeworCQlyZXR1cm4gKEJvb2xlYW5FeHByZXNzaW9uKWZpeHR1cmU7CisJfQorCit9IC8vQm9vbGVhbkV4cHJlc3Npb25UZXN0CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9wcmVkaWNhdGUvdGVzdHMvQm9vbGVhbk9wZXJhdG9yVGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvcHJlZGljYXRlL3Rlc3RzL0Jvb2xlYW5PcGVyYXRvclRlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MGEzMTFhCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvcHJlZGljYXRlL3Rlc3RzL0Jvb2xlYW5PcGVyYXRvclRlc3QuamF2YQpAQCAtMCwwICsxLDQ1IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUudGVzdHM7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZS5Cb29sZWFuT3BlcmF0b3I7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIEEgdGVzdCBjYXNlIGZvciB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+Qm9vbGVhbiBPcGVyYXRvcjwvYj48L2VtPicuCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGFic3RyYWN0IGNsYXNzIEJvb2xlYW5PcGVyYXRvclRlc3QgZXh0ZW5kcyBCb29sZWFuRXhwcmVzc2lvblRlc3QgeworCisJLyoqCisJICogQ29uc3RydWN0cyBhIG5ldyBCb29sZWFuIE9wZXJhdG9yIHRlc3QgY2FzZSB3aXRoIHRoZSBnaXZlbiBuYW1lLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBCb29sZWFuT3BlcmF0b3JUZXN0KFN0cmluZyBuYW1lKSB7CisJCXN1cGVyKG5hbWUpOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIGZpeHR1cmUgZm9yIHRoaXMgQm9vbGVhbiBPcGVyYXRvciB0ZXN0IGNhc2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIEJvb2xlYW5PcGVyYXRvciBnZXRGaXh0dXJlKCkgeworCQlyZXR1cm4gKEJvb2xlYW5PcGVyYXRvcilmaXh0dXJlOworCX0KKworfSAvL0Jvb2xlYW5PcGVyYXRvclRlc3QKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3ByZWRpY2F0ZS90ZXN0cy9FbGFwc2VkVGltZVRlc3RUZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9wcmVkaWNhdGUvdGVzdHMvRWxhcHNlZFRpbWVUZXN0VGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIwZGFhNDQKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9wcmVkaWNhdGUvdGVzdHMvRWxhcHNlZFRpbWVUZXN0VGVzdC5qYXZhCkBAIC0wLDAgKzEsMTM0IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUudGVzdHM7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgamF2YS51dGlsLkRhdGU7CisKK2ltcG9ydCBqdW5pdC50ZXh0dWkuVGVzdFJ1bm5lcjsKKworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5Nb2RlbEZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLlNURU1UaW1lOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUuRWxhcHNlZFRpbWVUZXN0OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUuUHJlZGljYXRlRmFjdG9yeTsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogQSB0ZXN0IGNhc2UgZm9yIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5FbGFwc2VkIFRpbWUgVGVzdDwvYj48L2VtPicuCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBnZW5lcmF0ZWQKKyAqLworQFN1cHByZXNzV2FybmluZ3MoImFsbCIpCitwdWJsaWMgY2xhc3MgRWxhcHNlZFRpbWVUZXN0VGVzdCBleHRlbmRzIFRpbWVUZXN0VGVzdCB7CisKKwkKKwkvKioKKwkgKiBUaGlzIGlzIHRoZSBudW1iZXIgb2YgZWxhcHNlZCBkYXlzIHRvIHRlc3QgCisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgRUxBU1BFRF9EQVlTX1RPX1RFU1QgPSAyOworCisJCisJLyoqCisJICogVGhpcyBpcyB0aGUgZXhwZWN0ZWQgbnVtYmVyIG9mIG1pbGxpc2Vjb25kcyBvZiBlbGFwc2VkIHRpbWUuCisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBsb25nIEVMQVNQRURfTVNfVE9fVEVTVCA9IEVMQVNQRURfREFZU19UT19URVNUCisJCQkqIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5TVEVNVGltZS5Vbml0cy5EQVkKKwkJCQkJLmdldE1pbGxpc2Vjb25kcygpOworCisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CisJCVRlc3RSdW5uZXIucnVuKEVsYXBzZWRUaW1lVGVzdFRlc3QuY2xhc3MpOworCX0KKworCS8qKgorCSAqIENvbnN0cnVjdHMgYSBuZXcgRWxhcHNlZCBUaW1lIFRlc3QgdGVzdCBjYXNlIHdpdGggdGhlIGdpdmVuIG5hbWUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVsYXBzZWRUaW1lVGVzdFRlc3QoU3RyaW5nIG5hbWUpIHsKKwkJc3VwZXIobmFtZSk7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgZml4dHVyZSBmb3IgdGhpcyBFbGFwc2VkIFRpbWUgVGVzdCB0ZXN0IGNhc2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIEVsYXBzZWRUaW1lVGVzdCBnZXRGaXh0dXJlKCkgeworCQlyZXR1cm4gKEVsYXBzZWRUaW1lVGVzdClmaXh0dXJlOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2Ujc2V0VXAoKQorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgc2V0VXAoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJZmluYWwgRWxhcHNlZFRpbWVUZXN0IGV0dCA9IFByZWRpY2F0ZUZhY3RvcnkuZUlOU1RBTkNFCisJCQkJLmNyZWF0ZUVsYXBzZWRUaW1lVGVzdCgpOworCQlldHQuc2V0TnVtYmVyb2ZEYXlzKEVMQVNQRURfREFZU19UT19URVNUKTsKKwkJZXR0LnNldFJlZmVyZW5jZVRpbWVWYWxpZCh0cnVlKTsKKworCQkvLyBUaGUgY3VycmVudCB0aW1lIHdlJ2xsIHVzZSBmb3IgY29tcGFyaXNvbiB3aWxsIGJlIG9uZSBkYXkgYWZ0ZXIgdGhlCisJCS8vIG51bWJlciBvZiBkYXlzIGluIHRoZSB0ZXN0IHNvIHRoZSBleHBlY3RlZCByZXN1bHQgaXMgdHJ1ZQorCQlmaW5hbCBsb25nIGN1cnJlbnRUaW1lTVMgPSBldHQuZ2V0UmVmZXJlbmNlVGltZSgpLmdldFRpbWUoKS5nZXRUaW1lKCkKKwkJCQkrIChFTEFTUEVEX0RBWVNfVE9fVEVTVCArIDEpCisJCQkJKiBTVEVNVGltZS5Vbml0cy5EQVkuZ2V0TWlsbGlzZWNvbmRzKCk7CisJCWN1cnJlbnRUaW1lVG9UZXN0ID0gTW9kZWxGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVTVEVNVGltZSgpOworCQljdXJyZW50VGltZVRvVGVzdC5zZXRUaW1lKG5ldyBEYXRlKGN1cnJlbnRUaW1lTVMpKTsKKworCQlzZXRGaXh0dXJlKGV0dCk7CisJfSAvLyBzZXRVcAorCisJCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZSN0ZWFyRG93bigpCisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIHRlYXJEb3duKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCXNldEZpeHR1cmUobnVsbCk7CisJfQorCisJLyoqCisJICogVGVzdHMgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZS5FbGFwc2VkVGltZVRlc3QjZ2V0RWxhcHNlZE1pbGxpc2Vjb25kcygpIDxlbT5FbGFwc2VkIE1pbGxpc2Vjb25kczwvZW0+fScgZmVhdHVyZSBnZXR0ZXIuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUuRWxhcHNlZFRpbWVUZXN0I2dldEVsYXBzZWRNaWxsaXNlY29uZHMoKQorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJcHVibGljIHZvaWQgdGVzdEdldEVsYXBzZWRNaWxsaXNlY29uZHMoKSB7CisJCWZpbmFsIEVsYXBzZWRUaW1lVGVzdCBldHQgPSBnZXRGaXh0dXJlKCk7CisJCWFzc2VydFRydWUoZXR0LmdldEVsYXBzZWRNaWxsaXNlY29uZHMoKSA9PSBFTEFTUEVEX0RBWVNfVE9fVEVTVAorCQkJCSogU1RFTVRpbWUuVW5pdHMuREFZLmdldE1pbGxpc2Vjb25kcygpKTsKKwl9IC8vIHRlc3RHZXRFbGFwc2VkTWlsbGlzZWNvbmRzCisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUudGVzdHMuUHJlZGljYXRlVGVzdCNnZXRFeHBlY3RlZFJlc3VsdCgpCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIGJvb2xlYW4gZ2V0RXhwZWN0ZWRSZXN1bHQoKSB7CisJCXJldHVybiB0cnVlOworCX0KKworfSAvL0VsYXBzZWRUaW1lVGVzdFRlc3QKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3ByZWRpY2F0ZS90ZXN0cy9GYWxzZVRlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3ByZWRpY2F0ZS90ZXN0cy9GYWxzZVRlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MTU1Y2YzCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvcHJlZGljYXRlL3Rlc3RzL0ZhbHNlVGVzdC5qYXZhCkBAIC0wLDAgKzEsODggQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZS50ZXN0czsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqdW5pdC50ZXh0dWkuVGVzdFJ1bm5lcjsKKworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUuRmFsc2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZS5QcmVkaWNhdGVGYWN0b3J5OworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiBBIHRlc3QgY2FzZSBmb3IgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPkZhbHNlPC9iPjwvZW0+Jy4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQGdlbmVyYXRlZAorICovCitAU3VwcHJlc3NXYXJuaW5ncygiYWxsIikKK3B1YmxpYyBjbGFzcyBGYWxzZVRlc3QgZXh0ZW5kcyBUZXN0VGVzdCB7CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CisJCVRlc3RSdW5uZXIucnVuKEZhbHNlVGVzdC5jbGFzcyk7CisJfQorCisJLyoqCisJICogQ29uc3RydWN0cyBhIG5ldyBGYWxzZSB0ZXN0IGNhc2Ugd2l0aCB0aGUgZ2l2ZW4gbmFtZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRmFsc2VUZXN0KFN0cmluZyBuYW1lKSB7CisJCXN1cGVyKG5hbWUpOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIGZpeHR1cmUgZm9yIHRoaXMgRmFsc2UgdGVzdCBjYXNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCBGYWxzZSBnZXRGaXh0dXJlKCkgeworCQlyZXR1cm4gKEZhbHNlKWZpeHR1cmU7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZSNzZXRVcCgpCisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIHNldFVwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCXNldEZpeHR1cmUoUHJlZGljYXRlRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlRmFsc2UoKSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZSN0ZWFyRG93bigpCisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIHRlYXJEb3duKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCXNldEZpeHR1cmUobnVsbCk7CisJfQorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlLnRlc3RzLlByZWRpY2F0ZVRlc3QjZ2V0RXhwZWN0ZWRSZXN1bHQoKQorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCBib29sZWFuIGdldEV4cGVjdGVkUmVzdWx0KCkgeworCQlyZXR1cm4gZmFsc2U7CisJfQorCQorfSAvL0ZhbHNlVGVzdApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvcHJlZGljYXRlL3Rlc3RzL0lkZW50aWZpYWJsZVByZWRpY2F0ZUV4cHJlc3Npb25UZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9wcmVkaWNhdGUvdGVzdHMvSWRlbnRpZmlhYmxlUHJlZGljYXRlRXhwcmVzc2lvblRlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNTI0MDgzCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvcHJlZGljYXRlL3Rlc3RzL0lkZW50aWZpYWJsZVByZWRpY2F0ZUV4cHJlc3Npb25UZXN0LmphdmEKQEAgLTAsMCArMSw5MyBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlLnRlc3RzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGp1bml0LnRleHR1aS5UZXN0UnVubmVyOworCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZS5JZGVudGlmaWFibGVQcmVkaWNhdGVFeHByZXNzaW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUuUHJlZGljYXRlRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlLlRydWU7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIEEgdGVzdCBjYXNlIGZvciB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+SWRlbnRpZmlhYmxlIFByZWRpY2F0ZSBFeHByZXNzaW9uPC9iPjwvZW0+Jy4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQGdlbmVyYXRlZAorICovCitAU3VwcHJlc3NXYXJuaW5ncygiYWxsIikKK3B1YmxpYyBjbGFzcyBJZGVudGlmaWFibGVQcmVkaWNhdGVFeHByZXNzaW9uVGVzdCBleHRlbmRzIElkZW50aWZpYWJsZVByZWRpY2F0ZVRlc3QgeworCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgeworCQlUZXN0UnVubmVyLnJ1bihJZGVudGlmaWFibGVQcmVkaWNhdGVFeHByZXNzaW9uVGVzdC5jbGFzcyk7CisJfQorCisJLyoqCisJICogQ29uc3RydWN0cyBhIG5ldyBJZGVudGlmaWFibGUgUHJlZGljYXRlIEV4cHJlc3Npb24gdGVzdCBjYXNlIHdpdGggdGhlIGdpdmVuIG5hbWUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIElkZW50aWZpYWJsZVByZWRpY2F0ZUV4cHJlc3Npb25UZXN0KFN0cmluZyBuYW1lKSB7CisJCXN1cGVyKG5hbWUpOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIGZpeHR1cmUgZm9yIHRoaXMgSWRlbnRpZmlhYmxlIFByZWRpY2F0ZSBFeHByZXNzaW9uIHRlc3QgY2FzZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgSWRlbnRpZmlhYmxlUHJlZGljYXRlRXhwcmVzc2lvbiBnZXRGaXh0dXJlKCkgeworCQlyZXR1cm4gKElkZW50aWZpYWJsZVByZWRpY2F0ZUV4cHJlc3Npb24pZml4dHVyZTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlI3NldFVwKCkKKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIHNldFVwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCWZpbmFsIElkZW50aWZpYWJsZVByZWRpY2F0ZUV4cHJlc3Npb24gcEV4cHJlc3Npb24gPSBQcmVkaWNhdGVGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVJZGVudGlmaWFibGVQcmVkaWNhdGVFeHByZXNzaW9uKCk7CisJCWZpbmFsIFRydWUgdHJ1ZTAgPSBQcmVkaWNhdGVGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVUcnVlKCk7CisJCXBFeHByZXNzaW9uLnNldFByZWRpY2F0ZSh0cnVlMCk7CisJCXNldEZpeHR1cmUocEV4cHJlc3Npb24pOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2UjdGVhckRvd24oKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgdm9pZCB0ZWFyRG93bigpIHRocm93cyBFeGNlcHRpb24geworCQlzZXRGaXh0dXJlKG51bGwpOworCX0KKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZS50ZXN0cy5JZGVudGlmaWFibGVQcmVkaWNhdGVUZXN0I2dldEV4cGVjdGVkUmVzdWx0KCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgYm9vbGVhbiBnZXRFeHBlY3RlZFJlc3VsdCgpIHsKKwkJcmV0dXJuIHRydWU7CisJfQorCisKK30gLy9JZGVudGlmaWFibGVQcmVkaWNhdGVFeHByZXNzaW9uVGVzdApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvcHJlZGljYXRlL3Rlc3RzL0lkZW50aWZpYWJsZVByZWRpY2F0ZVRlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3ByZWRpY2F0ZS90ZXN0cy9JZGVudGlmaWFibGVQcmVkaWNhdGVUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGU4YzIzZAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3ByZWRpY2F0ZS90ZXN0cy9JZGVudGlmaWFibGVQcmVkaWNhdGVUZXN0LmphdmEKQEAgLTAsMCArMSwxMTUgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZS50ZXN0czsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLnRlc3RzLklkZW50aWZpYWJsZVRlc3Q7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLlNURU1UaW1lOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUuSWRlbnRpZmlhYmxlUHJlZGljYXRlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUuUHJlZGljYXRlOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiBBIHRlc3QgY2FzZSBmb3IgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPklkZW50aWZpYWJsZSBQcmVkaWNhdGU8L2I+PC9lbT4nLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiA8cD4KKyAqIFRoZSBmb2xsb3dpbmcgb3BlcmF0aW9ucyBhcmUgdGVzdGVkOgorICogPHVsPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUuUHJlZGljYXRlI2V2YWx1YXRlKG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5TVEVNVGltZSwgbG9uZywgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkdyYXBoKSA8ZW0+RXZhbHVhdGU8L2VtPn08L2xpPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUuUHJlZGljYXRlI3Jlc2V0KCkgPGVtPlJlc2V0PC9lbT59PC9saT4KKyAqIDwvdWw+CisgKiA8L3A+CisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBhYnN0cmFjdCBjbGFzcyBJZGVudGlmaWFibGVQcmVkaWNhdGVUZXN0IGV4dGVuZHMgSWRlbnRpZmlhYmxlVGVzdCB7CisKKwkvKioKKwkgKiBDb25zdHJ1Y3RzIGEgbmV3IElkZW50aWZpYWJsZSBQcmVkaWNhdGUgdGVzdCBjYXNlIHdpdGggdGhlIGdpdmVuIG5hbWUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIElkZW50aWZpYWJsZVByZWRpY2F0ZVRlc3QoU3RyaW5nIG5hbWUpIHsKKwkJc3VwZXIobmFtZSk7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgZml4dHVyZSBmb3IgdGhpcyBJZGVudGlmaWFibGUgUHJlZGljYXRlIHRlc3QgY2FzZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgSWRlbnRpZmlhYmxlUHJlZGljYXRlIGdldEZpeHR1cmUoKSB7CisJCXJldHVybiAoSWRlbnRpZmlhYmxlUHJlZGljYXRlKWZpeHR1cmU7CisJfQorCisJLyoqCisJICogVGVzdHMgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZS5QcmVkaWNhdGUjZXZhbHVhdGUob3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLlNURU1UaW1lLCBsb25nLCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguR3JhcGgpIDxlbT5FdmFsdWF0ZTwvZW0+fScgb3BlcmF0aW9uLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlLlByZWRpY2F0ZSNldmFsdWF0ZShvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuU1RFTVRpbWUsIGxvbmcsIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5HcmFwaCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgdGVzdEV2YWx1YXRlX19TVEVNVGltZV9sb25nX0dyYXBoKCkgeworCQkvLyBUT0RPOiBpbXBsZW1lbnQgdGhpcyBvcGVyYXRpb24gdGVzdCBtZXRob2QKKwkJLy8gRW5zdXJlIHRoYXQgeW91IHJlbW92ZSBAZ2VuZXJhdGVkIG9yIG1hcmsgaXQgQGdlbmVyYXRlZCBOT1QKKwkJZmFpbCgpOworCX0KKworCS8qKgorCSAqIFRlc3RzIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUuUHJlZGljYXRlI3Jlc2V0KCkgPGVtPlJlc2V0PC9lbT59JyBvcGVyYXRpb24uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUuUHJlZGljYXRlI3Jlc2V0KCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgdGVzdFJlc2V0KCkgeworCQkvLyBUT0RPOiBpbXBsZW1lbnQgdGhpcyBvcGVyYXRpb24gdGVzdCBtZXRob2QKKwkJLy8gRW5zdXJlIHRoYXQgeW91IHJlbW92ZSBAZ2VuZXJhdGVkIG9yIG1hcmsgaXQgQGdlbmVyYXRlZCBOT1QKKwkJZmFpbCgpOworCX0KKworCS8qKgorCSAqIFRlc3RzIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUuUHJlZGljYXRlI2V2YWx1YXRlKG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5TVEVNVGltZSwgbG9uZywgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLkRlY29yYXRvcikgPGVtPkV2YWx1YXRlPC9lbT59JyBvcGVyYXRpb24uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUuUHJlZGljYXRlI2V2YWx1YXRlKG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5TVEVNVGltZSwgbG9uZywgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLkRlY29yYXRvcikKKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCXB1YmxpYyB2b2lkIHRlc3RFdmFsdWF0ZV9fU1RFTVRpbWVfbG9uZ19EZWNvcmF0b3IoKSB7CisJCWZpbmFsIFByZWRpY2F0ZSBmaXh0dXJlID0gZ2V0Rml4dHVyZSgpOworCQlmaW5hbCBTVEVNVGltZSBjdXJyZW50VGltZSA9IGdldEN1cnJlbnRUaW1ldG9UZXN0KCk7CisJCWZpbmFsIGxvbmcgZWxhcHNlZFRpbWUgPSBnZXRFbGFwc2VkVGltZVRvVGVzdCgpOworCQlmaW5hbCBib29sZWFuIHJlc3VsdCA9IGZpeHR1cmUuZXZhbHVhdGUoY3VycmVudFRpbWUsIGVsYXBzZWRUaW1lLCAgbnVsbCk7CisJCWFzc2VydFRydWUgKHJlc3VsdCA9PSBnZXRFeHBlY3RlZFJlc3VsdCgpKTsKKwl9CisKKwkvKioKKwkgKiBAcmV0dXJuCisJICovCisJcHJvdGVjdGVkIGxvbmcgZ2V0RWxhcHNlZFRpbWVUb1Rlc3QoKSB7CisJCXJldHVybiAwTDsKKwl9CisKKwkvKioKKwkgKiBAcmV0dXJuCisJICovCisJcHJvdGVjdGVkIFNURU1UaW1lIGdldEN1cnJlbnRUaW1ldG9UZXN0KCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBAcmV0dXJuIHRoZSBleHBlY3RlZCByZXN1bHQgb2YgY2FsbGluZyBnZXRGaXh0dXJlLmV2YWx1YXRlKCk7CisJICovCisJYWJzdHJhY3QgcHJvdGVjdGVkIGJvb2xlYW4gZ2V0RXhwZWN0ZWRSZXN1bHQoKTsKKwkKK30gLy9JZGVudGlmaWFibGVQcmVkaWNhdGVUZXN0CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9wcmVkaWNhdGUvdGVzdHMvSWRlbnRpZmlhYmxlVGVzdFRlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3ByZWRpY2F0ZS90ZXN0cy9JZGVudGlmaWFibGVUZXN0VGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQyNGNhZWMKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9wcmVkaWNhdGUvdGVzdHMvSWRlbnRpZmlhYmxlVGVzdFRlc3QuamF2YQpAQCAtMCwwICsxLDQ1IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUudGVzdHM7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZS5JZGVudGlmaWFibGVUZXN0OworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiBBIHRlc3QgY2FzZSBmb3IgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPklkZW50aWZpYWJsZSBUZXN0PC9iPjwvZW0+Jy4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgYWJzdHJhY3QgY2xhc3MgSWRlbnRpZmlhYmxlVGVzdFRlc3QgZXh0ZW5kcyBJZGVudGlmaWFibGVQcmVkaWNhdGVUZXN0IHsKKworCS8qKgorCSAqIENvbnN0cnVjdHMgYSBuZXcgSWRlbnRpZmlhYmxlIFRlc3QgdGVzdCBjYXNlIHdpdGggdGhlIGdpdmVuIG5hbWUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIElkZW50aWZpYWJsZVRlc3RUZXN0KFN0cmluZyBuYW1lKSB7CisJCXN1cGVyKG5hbWUpOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIGZpeHR1cmUgZm9yIHRoaXMgSWRlbnRpZmlhYmxlIFRlc3QgdGVzdCBjYXNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCBJZGVudGlmaWFibGVUZXN0IGdldEZpeHR1cmUoKSB7CisJCXJldHVybiAoSWRlbnRpZmlhYmxlVGVzdClmaXh0dXJlOworCX0KKworfSAvL0lkZW50aWZpYWJsZVRlc3RUZXN0CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9wcmVkaWNhdGUvdGVzdHMvTmFyeUJvb2xlYW5PcGVyYXRvclRlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3ByZWRpY2F0ZS90ZXN0cy9OYXJ5Qm9vbGVhbk9wZXJhdG9yVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVkN2FjYjkKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9wcmVkaWNhdGUvdGVzdHMvTmFyeUJvb2xlYW5PcGVyYXRvclRlc3QuamF2YQpAQCAtMCwwICsxLDQ1IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUudGVzdHM7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZS5OYXJ5Qm9vbGVhbk9wZXJhdG9yOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiBBIHRlc3QgY2FzZSBmb3IgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPk5hcnkgQm9vbGVhbiBPcGVyYXRvcjwvYj48L2VtPicuCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGFic3RyYWN0IGNsYXNzIE5hcnlCb29sZWFuT3BlcmF0b3JUZXN0IGV4dGVuZHMgQm9vbGVhbk9wZXJhdG9yVGVzdCB7CisKKwkvKioKKwkgKiBDb25zdHJ1Y3RzIGEgbmV3IE5hcnkgQm9vbGVhbiBPcGVyYXRvciB0ZXN0IGNhc2Ugd2l0aCB0aGUgZ2l2ZW4gbmFtZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgTmFyeUJvb2xlYW5PcGVyYXRvclRlc3QoU3RyaW5nIG5hbWUpIHsKKwkJc3VwZXIobmFtZSk7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgZml4dHVyZSBmb3IgdGhpcyBOYXJ5IEJvb2xlYW4gT3BlcmF0b3IgdGVzdCBjYXNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCBOYXJ5Qm9vbGVhbk9wZXJhdG9yIGdldEZpeHR1cmUoKSB7CisJCXJldHVybiAoTmFyeUJvb2xlYW5PcGVyYXRvcilmaXh0dXJlOworCX0KKworfSAvL05hcnlCb29sZWFuT3BlcmF0b3JUZXN0CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9wcmVkaWNhdGUvdGVzdHMvTm90VGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvcHJlZGljYXRlL3Rlc3RzL05vdFRlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYjlhMTI4Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvcHJlZGljYXRlL3Rlc3RzL05vdFRlc3QuamF2YQpAQCAtMCwwICsxLDkzIEBACisvLyBOb3RUZXN0LmphdmEKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZS50ZXN0czsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqdW5pdC50ZXh0dWkuVGVzdFJ1bm5lcjsKKworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUuRmFsc2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZS5Ob3Q7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZS5QcmVkaWNhdGVGYWN0b3J5OworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiBBIHRlc3QgY2FzZSBmb3IgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPk5vdDwvYj48L2VtPicuCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBnZW5lcmF0ZWQKKyAqLworQFN1cHByZXNzV2FybmluZ3MoImFsbCIpCitwdWJsaWMgY2xhc3MgTm90VGVzdCBleHRlbmRzIFVuYXJ5Qm9vbGVhbk9wZXJhdG9yVGVzdCB7CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CisJCVRlc3RSdW5uZXIucnVuKE5vdFRlc3QuY2xhc3MpOworCX0KKworCS8qKgorCSAqIENvbnN0cnVjdHMgYSBuZXcgTm90IHRlc3QgY2FzZSB3aXRoIHRoZSBnaXZlbiBuYW1lLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBOb3RUZXN0KFN0cmluZyBuYW1lKSB7CisJCXN1cGVyKG5hbWUpOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIGZpeHR1cmUgZm9yIHRoaXMgTm90IHRlc3QgY2FzZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgTm90IGdldEZpeHR1cmUoKSB7CisJCXJldHVybiAoTm90KWZpeHR1cmU7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZSNzZXRVcCgpCisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgdm9pZCBzZXRVcCgpIHRocm93cyBFeGNlcHRpb24geworCQlmaW5hbCBOb3Qgbm90RXhwcmVzc2lvbiA9IFByZWRpY2F0ZUZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZU5vdCgpOworCQlmaW5hbCBGYWxzZSBmYWxzZTAgPSBQcmVkaWNhdGVGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVGYWxzZSgpOworCQlub3RFeHByZXNzaW9uLnNldE9wZXJhbmQoZmFsc2UwKTsKKwkJc2V0Rml4dHVyZShub3RFeHByZXNzaW9uKTsKKwl9IC8vIHNldFVwCisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlI3RlYXJEb3duKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgdGVhckRvd24oKSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJc2V0Rml4dHVyZShudWxsKTsKKwl9CisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUudGVzdHMuUHJlZGljYXRlVGVzdCNnZXRFeHBlY3RlZFJlc3VsdCgpCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIGJvb2xlYW4gZ2V0RXhwZWN0ZWRSZXN1bHQoKSB7CisJCXJldHVybiB0cnVlOworCX0KKwkKK30gLy8gTm90VGVzdApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvcHJlZGljYXRlL3Rlc3RzL09yVGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvcHJlZGljYXRlL3Rlc3RzL09yVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVkYTk4N2IKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9wcmVkaWNhdGUvdGVzdHMvT3JUZXN0LmphdmEKQEAgLTAsMCArMSw5NSBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlLnRlc3RzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGp1bml0LnRleHR1aS5UZXN0UnVubmVyOworCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZS5GYWxzZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlLk9yOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUuUHJlZGljYXRlRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlLlRydWU7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIEEgdGVzdCBjYXNlIGZvciB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+T3I8L2I+PC9lbT4nLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK0BTdXBwcmVzc1dhcm5pbmdzKCJhbGwiKQorcHVibGljIGNsYXNzIE9yVGVzdCBleHRlbmRzIE5hcnlCb29sZWFuT3BlcmF0b3JUZXN0IHsKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKKwkJVGVzdFJ1bm5lci5ydW4oT3JUZXN0LmNsYXNzKTsKKwl9CisKKwkvKioKKwkgKiBDb25zdHJ1Y3RzIGEgbmV3IE9yIHRlc3QgY2FzZSB3aXRoIHRoZSBnaXZlbiBuYW1lLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBPclRlc3QoU3RyaW5nIG5hbWUpIHsKKwkJc3VwZXIobmFtZSk7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgZml4dHVyZSBmb3IgdGhpcyBPciB0ZXN0IGNhc2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIE9yIGdldEZpeHR1cmUoKSB7CisJCXJldHVybiAoT3IpZml4dHVyZTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlI3NldFVwKCkKKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIHNldFVwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCWZpbmFsIE9yIG9yRXhwcmVzc2lvbiA9IFByZWRpY2F0ZUZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZU9yKCk7CisJCWZpbmFsIEZhbHNlIGZhbHNlMCA9IFByZWRpY2F0ZUZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZUZhbHNlKCk7CisJCWZpbmFsIFRydWUgdHJ1ZTAgPSBQcmVkaWNhdGVGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVUcnVlKCk7CisJCW9yRXhwcmVzc2lvbi5nZXRPcGVyYW5kcygpLmFkZChmYWxzZTApOworCQlvckV4cHJlc3Npb24uZ2V0T3BlcmFuZHMoKS5hZGQodHJ1ZTApOworCQlzZXRGaXh0dXJlKG9yRXhwcmVzc2lvbik7CisJfSAvLyBzZXRVcAorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZSN0ZWFyRG93bigpCisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIHRlYXJEb3duKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCXNldEZpeHR1cmUobnVsbCk7CisJfQorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlLnRlc3RzLlByZWRpY2F0ZVRlc3QjZ2V0RXhwZWN0ZWRSZXN1bHQoKQorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCBib29sZWFuIGdldEV4cGVjdGVkUmVzdWx0KCkgeworCQlyZXR1cm4gdHJ1ZTsKKwl9CisKK30gLy9PclRlc3QKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3ByZWRpY2F0ZS90ZXN0cy9QcmVkaWNhdGVFeHByZXNzaW9uVGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvcHJlZGljYXRlL3Rlc3RzL1ByZWRpY2F0ZUV4cHJlc3Npb25UZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDI0ZDkzZQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3ByZWRpY2F0ZS90ZXN0cy9QcmVkaWNhdGVFeHByZXNzaW9uVGVzdC5qYXZhCkBAIC0wLDAgKzEsOTIgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZS50ZXN0czsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqdW5pdC50ZXh0dWkuVGVzdFJ1bm5lcjsKKworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUuRmFsc2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZS5QcmVkaWNhdGVFeHByZXNzaW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUuUHJlZGljYXRlRmFjdG9yeTsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogQSB0ZXN0IGNhc2UgZm9yIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5FeHByZXNzaW9uPC9iPjwvZW0+Jy4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQGdlbmVyYXRlZAorICovCitAU3VwcHJlc3NXYXJuaW5ncygiYWxsIikKK3B1YmxpYyBjbGFzcyBQcmVkaWNhdGVFeHByZXNzaW9uVGVzdCBleHRlbmRzIEJvb2xlYW5FeHByZXNzaW9uVGVzdCB7CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CisJCVRlc3RSdW5uZXIucnVuKFByZWRpY2F0ZUV4cHJlc3Npb25UZXN0LmNsYXNzKTsKKwl9CisKKwkvKioKKwkgKiBDb25zdHJ1Y3RzIGEgbmV3IEV4cHJlc3Npb24gdGVzdCBjYXNlIHdpdGggdGhlIGdpdmVuIG5hbWUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFByZWRpY2F0ZUV4cHJlc3Npb25UZXN0KFN0cmluZyBuYW1lKSB7CisJCXN1cGVyKG5hbWUpOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIGZpeHR1cmUgZm9yIHRoaXMgRXhwcmVzc2lvbiB0ZXN0IGNhc2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIFByZWRpY2F0ZUV4cHJlc3Npb24gZ2V0Rml4dHVyZSgpIHsKKwkJcmV0dXJuIChQcmVkaWNhdGVFeHByZXNzaW9uKWZpeHR1cmU7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZSNzZXRVcCgpCisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgdm9pZCBzZXRVcCgpIHRocm93cyBFeGNlcHRpb24geworCQlmaW5hbCBQcmVkaWNhdGVFeHByZXNzaW9uIHBFeHByZXNzaW9uID0gUHJlZGljYXRlRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlUHJlZGljYXRlRXhwcmVzc2lvbigpOworCQlmaW5hbCBGYWxzZSBmYWxzZTAgPSBQcmVkaWNhdGVGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVGYWxzZSgpOworCQlwRXhwcmVzc2lvbi5zZXRQcmVkaWNhdGUoZmFsc2UwKTsKKwkJc2V0Rml4dHVyZShwRXhwcmVzc2lvbik7CisJfSAvLyBzZXRVcAorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZSN0ZWFyRG93bigpCisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIHRlYXJEb3duKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCXNldEZpeHR1cmUobnVsbCk7CisJfQorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlLnRlc3RzLlByZWRpY2F0ZVRlc3QjZ2V0RXhwZWN0ZWRSZXN1bHQoKQorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCBib29sZWFuIGdldEV4cGVjdGVkUmVzdWx0KCkgeworCQlyZXR1cm4gZmFsc2U7CisJfQorCit9IC8vUHJlZGljYXRlRXhwcmVzc2lvblRlc3QKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3ByZWRpY2F0ZS90ZXN0cy9QcmVkaWNhdGVSZWZlcmVuY2VUZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9wcmVkaWNhdGUvdGVzdHMvUHJlZGljYXRlUmVmZXJlbmNlVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQzNzQ4NzcKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9wcmVkaWNhdGUvdGVzdHMvUHJlZGljYXRlUmVmZXJlbmNlVGVzdC5qYXZhCkBAIC0wLDAgKzEsOTcgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZS50ZXN0czsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqdW5pdC50ZXh0dWkuVGVzdFJ1bm5lcjsKKworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUuUHJlZGljYXRlRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlLlByZWRpY2F0ZVJlZmVyZW5jZTsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogQSB0ZXN0IGNhc2UgZm9yIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5SZWZlcmVuY2U8L2I+PC9lbT4nLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK0BTdXBwcmVzc1dhcm5pbmdzKCJhbGwiKQorcHVibGljIGNsYXNzIFByZWRpY2F0ZVJlZmVyZW5jZVRlc3QgZXh0ZW5kcyBQcmVkaWNhdGVUZXN0IHsKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKKwkJVGVzdFJ1bm5lci5ydW4oUHJlZGljYXRlUmVmZXJlbmNlVGVzdC5jbGFzcyk7CisJfQorCisJLyoqCisJICogQ29uc3RydWN0cyBhIG5ldyBSZWZlcmVuY2UgdGVzdCBjYXNlIHdpdGggdGhlIGdpdmVuIG5hbWUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFByZWRpY2F0ZVJlZmVyZW5jZVRlc3QoU3RyaW5nIG5hbWUpIHsKKwkJc3VwZXIobmFtZSk7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgZml4dHVyZSBmb3IgdGhpcyBSZWZlcmVuY2UgdGVzdCBjYXNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCBQcmVkaWNhdGVSZWZlcmVuY2UgZ2V0Rml4dHVyZSgpIHsKKwkJcmV0dXJuIChQcmVkaWNhdGVSZWZlcmVuY2UpZml4dHVyZTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlI3NldFVwKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgc2V0VXAoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJc2V0Rml4dHVyZShQcmVkaWNhdGVGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVQcmVkaWNhdGVSZWZlcmVuY2UoKSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZSN0ZWFyRG93bigpCisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIHRlYXJEb3duKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCXNldEZpeHR1cmUobnVsbCk7CisJfQorCisJCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlLnRlc3RzLlByZWRpY2F0ZVRlc3QjdGVzdEV2YWx1YXRlX19TVEVNVGltZV9sb25nX0RlY29yYXRvcigpCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgdGVzdEV2YWx1YXRlX19TVEVNVGltZV9sb25nX0RlY29yYXRvcigpIHsKKwkJYXNzZXJ0VHJ1ZSh0cnVlKTsKKwl9CisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUudGVzdHMuUHJlZGljYXRlVGVzdCNnZXRFeHBlY3RlZFJlc3VsdCgpCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIGJvb2xlYW4gZ2V0RXhwZWN0ZWRSZXN1bHQoKSB7CisJCXJldHVybiBmYWxzZTsKKwl9CisJCit9IC8vUHJlZGljYXRlUmVmZXJlbmNlVGVzdApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvcHJlZGljYXRlL3Rlc3RzL1ByZWRpY2F0ZVRlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3ByZWRpY2F0ZS90ZXN0cy9QcmVkaWNhdGVUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODNiMTAxNQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3ByZWRpY2F0ZS90ZXN0cy9QcmVkaWNhdGVUZXN0LmphdmEKQEAgLTAsMCArMSwxMzMgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZS50ZXN0czsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuU1RFTVRpbWU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZS5QcmVkaWNhdGU7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIEEgdGVzdCBjYXNlIGZvciB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+UHJlZGljYXRlPC9iPjwvZW0+Jy4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogPHA+CisgKiBUaGUgZm9sbG93aW5nIG9wZXJhdGlvbnMgYXJlIHRlc3RlZDoKKyAqIDx1bD4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlLlByZWRpY2F0ZSNldmFsdWF0ZShvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuU1RFTVRpbWUsIGxvbmcsIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5HcmFwaCkgPGVtPkV2YWx1YXRlPC9lbT59PC9saT4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlLlByZWRpY2F0ZSNyZXNldCgpIDxlbT5SZXNldDwvZW0+fTwvbGk+CisgKiA8L3VsPgorICogPC9wPgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgYWJzdHJhY3QgY2xhc3MgUHJlZGljYXRlVGVzdCBleHRlbmRzIFRlc3RDYXNlIHsKKworCS8qKgorCSAqIFRoZSBmaXh0dXJlIGZvciB0aGlzIFByZWRpY2F0ZSB0ZXN0IGNhc2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIFByZWRpY2F0ZSBmaXh0dXJlID0gbnVsbDsKKworCS8qKgorCSAqIENvbnN0cnVjdHMgYSBuZXcgUHJlZGljYXRlIHRlc3QgY2FzZSB3aXRoIHRoZSBnaXZlbiBuYW1lLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBQcmVkaWNhdGVUZXN0KFN0cmluZyBuYW1lKSB7CisJCXN1cGVyKG5hbWUpOworCX0KKworCS8qKgorCSAqIFNldHMgdGhlIGZpeHR1cmUgZm9yIHRoaXMgUHJlZGljYXRlIHRlc3QgY2FzZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBzZXRGaXh0dXJlKFByZWRpY2F0ZSBmaXh0dXJlKSB7CisJCXRoaXMuZml4dHVyZSA9IGZpeHR1cmU7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgZml4dHVyZSBmb3IgdGhpcyBQcmVkaWNhdGUgdGVzdCBjYXNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCS8vQE92ZXJyaWRlCisJcHJvdGVjdGVkIFByZWRpY2F0ZSBnZXRGaXh0dXJlKCkgeworCQlyZXR1cm4gZml4dHVyZTsKKwl9CisKKwkvKioKKwkgKiBUZXN0cyB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlLlByZWRpY2F0ZSNldmFsdWF0ZShvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuU1RFTVRpbWUsIGxvbmcsIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5HcmFwaCkgPGVtPkV2YWx1YXRlPC9lbT59JyBvcGVyYXRpb24uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUuUHJlZGljYXRlI2V2YWx1YXRlKG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5TVEVNVGltZSwgbG9uZywgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkdyYXBoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCB0ZXN0RXZhbHVhdGVfX1NURU1UaW1lX2xvbmdfR3JhcGgoKSB7CisJCS8vIFRPRE86IGltcGxlbWVudCB0aGlzIG9wZXJhdGlvbiB0ZXN0IG1ldGhvZAorCQkvLyBFbnN1cmUgdGhhdCB5b3UgcmVtb3ZlIEBnZW5lcmF0ZWQgb3IgbWFyayBpdCBAZ2VuZXJhdGVkIE5PVAorCQlmYWlsKCk7CisJfQorCisJLyoqCisJICogVGVzdHMgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZS5QcmVkaWNhdGUjcmVzZXQoKSA8ZW0+UmVzZXQ8L2VtPn0nIG9wZXJhdGlvbi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZS5QcmVkaWNhdGUjcmVzZXQoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCB0ZXN0UmVzZXQoKSB7CisJCS8vIFRPRE86IGltcGxlbWVudCB0aGlzIG9wZXJhdGlvbiB0ZXN0IG1ldGhvZAorCQkvLyBFbnN1cmUgdGhhdCB5b3UgcmVtb3ZlIEBnZW5lcmF0ZWQgb3IgbWFyayBpdCBAZ2VuZXJhdGVkIE5PVAorCQlmYWlsKCk7CisJfQorCisJLyoqCisJICogVGVzdHMgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZS5QcmVkaWNhdGUjZXZhbHVhdGUob3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLlNURU1UaW1lLCBsb25nLCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuRGVjb3JhdG9yKSA8ZW0+RXZhbHVhdGU8L2VtPn0nIG9wZXJhdGlvbi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZS5QcmVkaWNhdGUjZXZhbHVhdGUob3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLlNURU1UaW1lLCBsb25nLCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuRGVjb3JhdG9yKQorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJcHVibGljIHZvaWQgdGVzdEV2YWx1YXRlX19TVEVNVGltZV9sb25nX0RlY29yYXRvcigpIHsKKwkJZmluYWwgUHJlZGljYXRlIGZpeHR1cmUgPSBnZXRGaXh0dXJlKCk7CisJCWZpbmFsIFNURU1UaW1lIGN1cnJlbnRUaW1lID0gZ2V0Q3VycmVudFRpbWV0b1Rlc3QoKTsKKwkJZmluYWwgbG9uZyBlbGFwc2VkVGltZSA9IGdldEVsYXBzZWRUaW1lVG9UZXN0KCk7CisJCWZpbmFsIGJvb2xlYW4gcmVzdWx0ID0gZml4dHVyZS5ldmFsdWF0ZShjdXJyZW50VGltZSwgZWxhcHNlZFRpbWUsICBudWxsKTsKKwkJYXNzZXJ0VHJ1ZSAocmVzdWx0ID09IGdldEV4cGVjdGVkUmVzdWx0KCkpOworCX0gLy8gdGVzdEV2YWx1YXRlX19TVEVNVGltZV9sb25nX0RlY29yYXRvcgorCisJLyoqCisJICogQHJldHVybgorCSAqLworCXByb3RlY3RlZCBsb25nIGdldEVsYXBzZWRUaW1lVG9UZXN0KCkgeworCQlyZXR1cm4gMEw7CisJfQorCisJLyoqCisJICogQHJldHVybgorCSAqLworCXByb3RlY3RlZCBTVEVNVGltZSBnZXRDdXJyZW50VGltZXRvVGVzdCgpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogQHJldHVybiB0aGUgZXhwZWN0ZWQgcmVzdWx0IG9mIGNhbGxpbmcgZ2V0Rml4dHVyZS5ldmFsdWF0ZSgpOworCSAqLworCWFic3RyYWN0IHByb3RlY3RlZCBib29sZWFuIGdldEV4cGVjdGVkUmVzdWx0KCk7CisKK30gLy9QcmVkaWNhdGVUZXN0CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9wcmVkaWNhdGUvdGVzdHMvUHJlZGljYXRlVGVzdHMuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3ByZWRpY2F0ZS90ZXN0cy9QcmVkaWNhdGVUZXN0cy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVlNzQ5OTQKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9wcmVkaWNhdGUvdGVzdHMvUHJlZGljYXRlVGVzdHMuamF2YQpAQCAtMCwwICsxLDYzIEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUudGVzdHM7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3Q7CitpbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RTdWl0ZTsKK2ltcG9ydCBqdW5pdC50ZXh0dWkuVGVzdFJ1bm5lcjsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogQSB0ZXN0IHN1aXRlIGZvciB0aGUgJzxlbT48Yj5wcmVkaWNhdGU8L2I+PC9lbT4nIHBhY2thZ2UuCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIFByZWRpY2F0ZVRlc3RzIGV4dGVuZHMgVGVzdFN1aXRlIHsKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKKwkJVGVzdFJ1bm5lci5ydW4oc3VpdGUoKSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHN0YXRpYyBUZXN0IHN1aXRlKCkgeworCQlUZXN0U3VpdGUgc3VpdGUgPSBuZXcgUHJlZGljYXRlVGVzdHMoInByZWRpY2F0ZSBUZXN0cyIpOyAvLyROT04tTkxTLTEkCisJCXN1aXRlLmFkZFRlc3RTdWl0ZShBbmRUZXN0LmNsYXNzKTsKKwkJc3VpdGUuYWRkVGVzdFN1aXRlKEZhbHNlVGVzdC5jbGFzcyk7CisJCXN1aXRlLmFkZFRlc3RTdWl0ZShOb3RUZXN0LmNsYXNzKTsKKwkJc3VpdGUuYWRkVGVzdFN1aXRlKE9yVGVzdC5jbGFzcyk7CisJCXN1aXRlLmFkZFRlc3RTdWl0ZShQcmVkaWNhdGVSZWZlcmVuY2VUZXN0LmNsYXNzKTsKKwkJc3VpdGUuYWRkVGVzdFN1aXRlKFRydWVUZXN0LmNsYXNzKTsKKwkJc3VpdGUuYWRkVGVzdFN1aXRlKFByZWRpY2F0ZUV4cHJlc3Npb25UZXN0LmNsYXNzKTsKKwkJc3VpdGUuYWRkVGVzdFN1aXRlKElkZW50aWZpYWJsZVByZWRpY2F0ZUV4cHJlc3Npb25UZXN0LmNsYXNzKTsKKwkJc3VpdGUuYWRkVGVzdFN1aXRlKEVsYXBzZWRUaW1lVGVzdFRlc3QuY2xhc3MpOworCQlyZXR1cm4gc3VpdGU7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFByZWRpY2F0ZVRlc3RzKFN0cmluZyBuYW1lKSB7CisJCXN1cGVyKG5hbWUpOworCX0KKworfSAvL1ByZWRpY2F0ZVRlc3RzCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9wcmVkaWNhdGUvdGVzdHMvVGVzdFRlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3ByZWRpY2F0ZS90ZXN0cy9UZXN0VGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQwYzM3NDQKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9wcmVkaWNhdGUvdGVzdHMvVGVzdFRlc3QuamF2YQpAQCAtMCwwICsxLDQ1IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUudGVzdHM7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZS5UZXN0OworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiBBIHRlc3QgY2FzZSBmb3IgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPlRlc3Q8L2I+PC9lbT4nLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBhYnN0cmFjdCBjbGFzcyBUZXN0VGVzdCBleHRlbmRzIFByZWRpY2F0ZVRlc3QgeworCisJLyoqCisJICogQ29uc3RydWN0cyBhIG5ldyBUZXN0IHRlc3QgY2FzZSB3aXRoIHRoZSBnaXZlbiBuYW1lLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBUZXN0VGVzdChTdHJpbmcgbmFtZSkgeworCQlzdXBlcihuYW1lKTsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBmaXh0dXJlIGZvciB0aGlzIFRlc3QgdGVzdCBjYXNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCBUZXN0IGdldEZpeHR1cmUoKSB7CisJCXJldHVybiAoVGVzdClmaXh0dXJlOworCX0KKworfSAvL1Rlc3RUZXN0CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9wcmVkaWNhdGUvdGVzdHMvVGltZVRlc3RUZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9wcmVkaWNhdGUvdGVzdHMvVGltZVRlc3RUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTU2ODRkMgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3ByZWRpY2F0ZS90ZXN0cy9UaW1lVGVzdFRlc3QuamF2YQpAQCAtMCwwICsxLDY0IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUudGVzdHM7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLlNURU1UaW1lOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUuVGltZVRlc3Q7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIEEgdGVzdCBjYXNlIGZvciB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+VGltZSBUZXN0PC9iPjwvZW0+Jy4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgYWJzdHJhY3QgY2xhc3MgVGltZVRlc3RUZXN0IGV4dGVuZHMgVGVzdFRlc3QgeworCisJcHJvdGVjdGVkIFNURU1UaW1lIGN1cnJlbnRUaW1lVG9UZXN0ID0gbnVsbDsKKworCS8qKgorCSAqIENvbnN0cnVjdHMgYSBuZXcgVGltZSBUZXN0IHRlc3QgY2FzZSB3aXRoIHRoZSBnaXZlbiBuYW1lLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBUaW1lVGVzdFRlc3QoU3RyaW5nIG5hbWUpIHsKKwkJc3VwZXIobmFtZSk7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgZml4dHVyZSBmb3IgdGhpcyBUaW1lIFRlc3QgdGVzdCBjYXNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCBUaW1lVGVzdCBnZXRGaXh0dXJlKCkgeworCQlyZXR1cm4gKFRpbWVUZXN0KWZpeHR1cmU7CisJfQorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlLnRlc3RzLlByZWRpY2F0ZVRlc3QjZ2V0Q3VycmVudFRpbWV0b1Rlc3QoKQorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCBTVEVNVGltZSBnZXRDdXJyZW50VGltZXRvVGVzdCgpIHsKKwkJcmV0dXJuIGN1cnJlbnRUaW1lVG9UZXN0OworCX0KKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZS50ZXN0cy5QcmVkaWNhdGVUZXN0I2dldEVsYXBzZWRUaW1lVG9UZXN0KCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgbG9uZyBnZXRFbGFwc2VkVGltZVRvVGVzdCgpIHsKKwkJcmV0dXJuIFNURU1UaW1lLlVuaXRzLkRBWS5nZXRNaWxsaXNlY29uZHMoKTsKKwl9CisKK30gLy8gVGltZVRlc3RUZXN0CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9wcmVkaWNhdGUvdGVzdHMvVHJ1ZVRlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3ByZWRpY2F0ZS90ZXN0cy9UcnVlVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNjODVjMWQKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9wcmVkaWNhdGUvdGVzdHMvVHJ1ZVRlc3QuamF2YQpAQCAtMCwwICsxLDg3IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUudGVzdHM7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQganVuaXQudGV4dHVpLlRlc3RSdW5uZXI7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlLlByZWRpY2F0ZUZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZS5UcnVlOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiBBIHRlc3QgY2FzZSBmb3IgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPlRydWU8L2I+PC9lbT4nLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK0BTdXBwcmVzc1dhcm5pbmdzKCJhbGwiKQorcHVibGljIGNsYXNzIFRydWVUZXN0IGV4dGVuZHMgVGVzdFRlc3QgeworCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgeworCQlUZXN0UnVubmVyLnJ1bihUcnVlVGVzdC5jbGFzcyk7CisJfQorCisJLyoqCisJICogQ29uc3RydWN0cyBhIG5ldyBUcnVlIHRlc3QgY2FzZSB3aXRoIHRoZSBnaXZlbiBuYW1lLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBUcnVlVGVzdChTdHJpbmcgbmFtZSkgeworCQlzdXBlcihuYW1lKTsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBmaXh0dXJlIGZvciB0aGlzIFRydWUgdGVzdCBjYXNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCBUcnVlIGdldEZpeHR1cmUoKSB7CisJCXJldHVybiAoVHJ1ZSlmaXh0dXJlOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2Ujc2V0VXAoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgdm9pZCBzZXRVcCgpIHRocm93cyBFeGNlcHRpb24geworCQlzZXRGaXh0dXJlKFByZWRpY2F0ZUZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZVRydWUoKSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZSN0ZWFyRG93bigpCisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIHRlYXJEb3duKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCXNldEZpeHR1cmUobnVsbCk7CisJfQorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlLnRlc3RzLlByZWRpY2F0ZVRlc3QjZ2V0RXhwZWN0ZWRSZXN1bHQoKQorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCBib29sZWFuIGdldEV4cGVjdGVkUmVzdWx0KCkgeworCQlyZXR1cm4gdHJ1ZTsKKwl9Cit9IC8vVHJ1ZVRlc3QKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3ByZWRpY2F0ZS90ZXN0cy9VbmFyeUJvb2xlYW5PcGVyYXRvclRlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3ByZWRpY2F0ZS90ZXN0cy9VbmFyeUJvb2xlYW5PcGVyYXRvclRlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NjZhNTY1Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvcHJlZGljYXRlL3Rlc3RzL1VuYXJ5Qm9vbGVhbk9wZXJhdG9yVGVzdC5qYXZhCkBAIC0wLDAgKzEsNDUgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZS50ZXN0czsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlLlVuYXJ5Qm9vbGVhbk9wZXJhdG9yOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiBBIHRlc3QgY2FzZSBmb3IgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPlVuYXJ5IEJvb2xlYW4gT3BlcmF0b3I8L2I+PC9lbT4nLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBhYnN0cmFjdCBjbGFzcyBVbmFyeUJvb2xlYW5PcGVyYXRvclRlc3QgZXh0ZW5kcyBCb29sZWFuT3BlcmF0b3JUZXN0IHsKKworCS8qKgorCSAqIENvbnN0cnVjdHMgYSBuZXcgVW5hcnkgQm9vbGVhbiBPcGVyYXRvciB0ZXN0IGNhc2Ugd2l0aCB0aGUgZ2l2ZW4gbmFtZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVW5hcnlCb29sZWFuT3BlcmF0b3JUZXN0KFN0cmluZyBuYW1lKSB7CisJCXN1cGVyKG5hbWUpOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIGZpeHR1cmUgZm9yIHRoaXMgVW5hcnkgQm9vbGVhbiBPcGVyYXRvciB0ZXN0IGNhc2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIFVuYXJ5Qm9vbGVhbk9wZXJhdG9yIGdldEZpeHR1cmUoKSB7CisJCXJldHVybiAoVW5hcnlCb29sZWFuT3BlcmF0b3IpZml4dHVyZTsKKwl9CisKK30gLy9VbmFyeUJvb2xlYW5PcGVyYXRvclRlc3QKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3NjZW5hcmlvL3Rlc3RzL0ludGVncmF0aW9uVGVzdFV0aWwuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3NjZW5hcmlvL3Rlc3RzL0ludGVncmF0aW9uVGVzdFV0aWwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YzBmZWQyCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvc2NlbmFyaW8vdGVzdHMvSW50ZWdyYXRpb25UZXN0VXRpbC5qYXZhCkBAIC0wLDAgKzEsMjcwIEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zY2VuYXJpby50ZXN0czsKKworaW1wb3J0IGphdmEuaW8uRmlsZTsKK2ltcG9ydCBqYXZhLmlvLkZpbGVJbnB1dFN0cmVhbTsKK2ltcG9ydCBqYXZhLmlvLkZpbGVOb3RGb3VuZEV4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLmlvLkZpbGVPdXRwdXRTdHJlYW07CitpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtOworaW1wb3J0IGphdmEuaW8uT3V0cHV0U3RyZWFtOworaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdERlc2NyaXB0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklSZXNvdXJjZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5SZXNvdXJjZXNQbHVnaW47CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkNvcmVFeGNlcHRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBhdGg7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBsYXRmb3JtOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5VUkk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnJlc291cmNlLlJlc291cmNlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5yZXNvdXJjZS5SZXNvdXJjZVNldDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUucmVzb3VyY2UuaW1wbC5SZXNvdXJjZVNldEltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLlNURU1YTUlSZXNvdXJjZUZhY3RvcnlJbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zY2VuYXJpby5TY2VuYXJpbzsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUudGVzdHMuQWN0aXZhdG9yOworCisvKioKKyAqIFRlc3RVdGlsCisgKiBAYXV0aG9yIGpoa2F1ZgorICoKKyAqLworcHVibGljIGNsYXNzIEludGVncmF0aW9uVGVzdFV0aWwgeworCQorCQorCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgU3RyaW5nIFJVTlRJTUVfV09SS1NQQUNFX1BBVEggPSAgUGxhdGZvcm0uZ2V0TG9jYXRpb24oKS50b09TU3RyaW5nKCk7CisJcHJvdGVjdGVkIGZpbmFsIHN0YXRpYyBTdHJpbmcgUkVGRVJFTkNFX0RJUiA9ICIuL3Jlc291cmNlcy8iOyAvLyROT04tTkxTLTEkCisJcHJvdGVjdGVkIGZpbmFsIHN0YXRpYyBTdHJpbmcgc2VwID0gRmlsZS5zZXBhcmF0b3I7CisJCisJCisJLyoqCisJICogVGhpcyB3aWxsIGNyZWF0ZSB0YXJnZXRMb2NhdGlvbiBpZiBpdCBkb2VzIG5vdCBhbHJlYWR5IGV4aXN0CisJICogQHBhcmFtIHNvdXJjZURpcmVjdG9yeSBzb3VyY2UgZGlyZWN0b3J5CisJICogQHBhcmFtIHRhcmdldERpcmVjdG9yeSBkZXN0aW5hdGlvbiBkaXJlY3RvcnkKKwkgKiBAdGhyb3dzIElPRXhjZXB0aW9uCisJICogQHRocm93cyBDb3JlRXhjZXB0aW9uIAorCSAqLworICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBjb3B5RGlyZWN0b3J5UmVjdXJzaXZlKEZpbGUgc291cmNlRGlyZWN0b3J5ICwgRmlsZSB0YXJnZXREaXJlY3RvcnkpCisgICAgdGhyb3dzIElPRXhjZXB0aW9uLCBDb3JlRXhjZXB0aW9uIHsKKyAgICAJCisgICAgICAgIGlmIChzb3VyY2VEaXJlY3RvcnkuaXNEaXJlY3RvcnkoKSkgeworICAgICAgICAgICAgaWYgKCF0YXJnZXREaXJlY3RvcnkuZXhpc3RzKCkpIHsKKyAgICAgICAgICAgICAgICB0YXJnZXREaXJlY3RvcnkubWtkaXIoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgU3RyaW5nW10gY2hpbGRyZW4gPSBzb3VyY2VEaXJlY3RvcnkubGlzdCgpOworICAgICAgICAgICAgZm9yIChpbnQgaT0wOyBpPGNoaWxkcmVuLmxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICAgICAgY29weURpcmVjdG9yeVJlY3Vyc2l2ZShuZXcgRmlsZShzb3VyY2VEaXJlY3RvcnksIGNoaWxkcmVuW2ldKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBGaWxlKHRhcmdldERpcmVjdG9yeSwgY2hpbGRyZW5baV0pKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgSW5wdXRTdHJlYW0gaW5wdXRTdHJlYW0gPSBuZXcgRmlsZUlucHV0U3RyZWFtKHNvdXJjZURpcmVjdG9yeSk7CisgICAgICAgICAgICBPdXRwdXRTdHJlYW0gb3V0cHV0U3RyZWFtID0gbmV3IEZpbGVPdXRwdXRTdHJlYW0odGFyZ2V0RGlyZWN0b3J5KTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgLy8gQ29weSB0aGUgYml0cyBmcm9tIGluc3RyZWFtIHRvIG91dHN0cmVhbQorICAgICAgICAgICAgYnl0ZVtdIGJ1ZmZlciA9IG5ldyBieXRlWzEwMjRdOworICAgICAgICAgICAgaW50IGxlbjsKKyAgICAgICAgICAgIHdoaWxlICgobGVuID0gaW5wdXRTdHJlYW0ucmVhZChidWZmZXIpKSA+IDApIHsKKyAgICAgICAgICAgICAgICBvdXRwdXRTdHJlYW0ud3JpdGUoYnVmZmVyLCAwLCBsZW4pOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaW5wdXRTdHJlYW0uY2xvc2UoKTsKKyAgICAgICAgICAgIG91dHB1dFN0cmVhbS5jbG9zZSgpOworICAgICAgICB9CisgICAgICAKKyAgICB9Ly9jb3B5RGlyZWN0b3J5CisgICAgCisgICAgCisgICAgLyoqCisgICAgICogCisgICAgICogQHBhcmFtIHNvdXJjZURpcmVjdG9yeQorICAgICAqIEBwYXJhbSB0YXJnZXREaXJlY3RvcnkKKyAgICAgKiBAdGhyb3dzIElPRXhjZXB0aW9uCisgICAgICogQHRocm93cyBDb3JlRXhjZXB0aW9uCisgICAgICovCisgICAgcHVibGljIHN0YXRpYyB2b2lkIGltcG9ydFByb2plY3QoRmlsZSBzb3VyY2VEaXJlY3RvcnkgLCBGaWxlIHRhcmdldERpcmVjdG9yeSkgIHRocm93cyBJT0V4Y2VwdGlvbiwgQ29yZUV4Y2VwdGlvbiB7CisgICAgCSAKKyAgICAgICAgaWYodGFyZ2V0RGlyZWN0b3J5LmV4aXN0cygpKSByZXR1cm47IC8vIGFscmVhZHkgZXhpc3RzCisgICAgCWlmIChzb3VyY2VEaXJlY3RvcnkuaXNEaXJlY3RvcnkoKSkgeworICAgICAgICAgIGNvcHlEaXJlY3RvcnlSZWN1cnNpdmUoc291cmNlRGlyZWN0b3J5LCB0YXJnZXREaXJlY3RvcnkpOworICAgICAgICB9IAorICAgICAgICAKKyAgICAgICAgLy8gZG9uZSBjb3B5aW5nLiBOb3cgY3JlYXRlIHRoZSBFY2xpcHNlIE9TR2kgUHJvamVjdCAgIAorICAgICAgICBTdHJpbmcgcGF0aFNUUiA9IHRhcmdldERpcmVjdG9yeS5nZXRBYnNvbHV0ZVBhdGgoKSsiLy5wcm9qZWN0IjsvLyROT04tTkxTLTEkCisgICAgICAgIElQcm9qZWN0RGVzY3JpcHRpb24gZGVzY3JpcHRpb24gPSBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkubG9hZFByb2plY3REZXNjcmlwdGlvbihuZXcgUGF0aChwYXRoU1RSKSk7CisgICAgICAgIElQcm9qZWN0IHByb2plY3QgPSBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuZ2V0Um9vdCgpLmdldFByb2plY3QoZGVzY3JpcHRpb24uZ2V0TmFtZSgpKTsKKyAgICAgICAgcHJvamVjdC5jcmVhdGUoZGVzY3JpcHRpb24sIG51bGwpOworICAgICAgICBwcm9qZWN0Lm9wZW4obnVsbCk7CisgICAgIH0vL2NvcHlEaXJlY3RvcnkKKyAgICAKKyAgICAvKioKKyAgICAgKiBAcGFyYW0gcHJvamVjdERpcmVjdG9yeQorICAgICAqIEB0aHJvd3MgSU9FeGNlcHRpb24KKyAgICAgKiBAdGhyb3dzIENvcmVFeGNlcHRpb24KKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIHZvaWQgcmVmcmVzaFByb2plY3QoRmlsZSBwcm9qZWN0RGlyZWN0b3J5KSAgdGhyb3dzIElPRXhjZXB0aW9uLCBDb3JlRXhjZXB0aW9uIHsKKyAgICAJIC8vIHJlZnJlc2ggdGhlIHByb2plY3QKKyAgICAgICAgU3RyaW5nIHBhdGhTVFIgPSBwcm9qZWN0RGlyZWN0b3J5LmdldEFic29sdXRlUGF0aCgpKyIvLnByb2plY3QiOy8vJE5PTi1OTFMtMSQKKyAgICAgICAgSVByb2plY3REZXNjcmlwdGlvbiBkZXNjcmlwdGlvbiA9IFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5sb2FkUHJvamVjdERlc2NyaXB0aW9uKG5ldyBQYXRoKHBhdGhTVFIpKTsKKyAgICAgICAgSVByb2plY3QgcHJvamVjdCA9IFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5nZXRSb290KCkuZ2V0UHJvamVjdChkZXNjcmlwdGlvbi5nZXROYW1lKCkpOworICAgICAgICBwcm9qZWN0LnJlZnJlc2hMb2NhbChJUmVzb3VyY2UuREVQVEhfSU5GSU5JVEUsIG51bGwpOworICAgICB9Ly9jb3B5RGlyZWN0b3J5CisgICAgCisgICAgLyoqCisgICAgICogCisgICAgICogQHBhcmFtIHRhcmdldERpcmVjdG9yeQorICAgICAqIEB0aHJvd3MgQ29yZUV4Y2VwdGlvbiAKKyAgICAgKiAKKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIGJvb2xlYW4gcmVtb3ZlRGlyZWN0b3J5KEZpbGUgdGFyZ2V0RGlyZWN0b3J5KSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiAgeworICAgIAkKKyAgICAJU3RyaW5nIHBhdGhTVFIgPSB0YXJnZXREaXJlY3RvcnkuZ2V0QWJzb2x1dGVQYXRoKCkrIi8ucHJvamVjdCI7IC8vJE5PTi1OTFMtMSQKKyAgICAgICAgSVByb2plY3REZXNjcmlwdGlvbiBkZXNjcmlwdGlvbiA9IFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5sb2FkUHJvamVjdERlc2NyaXB0aW9uKG5ldyBQYXRoKHBhdGhTVFIpKTsKKyAgICAgICAgSVByb2plY3QgcHJvamVjdCA9IFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5nZXRSb290KCkuZ2V0UHJvamVjdChkZXNjcmlwdGlvbi5nZXROYW1lKCkpOworICAgIAlwcm9qZWN0LmRlbGV0ZSh0cnVlLCB0cnVlLCBudWxsKTsKKyAgICAJaWYodGFyZ2V0RGlyZWN0b3J5LmV4aXN0cygpKSB7CisgICAgCQlyZXR1cm4gdGFyZ2V0RGlyZWN0b3J5LmRlbGV0ZSgpOworICAgIAl9CisgICAgCXJldHVybiB0cnVlOworICAgIH0KKyAgICAKKyAgICAvKioKKwkgKiBAcmV0dXJuIGFuIHtAbGluayBTY2VuYXJpb30gZm9yIHRlc3RpbmcuCisJICovCisJcHVibGljIHN0YXRpYyBMaXN0PEZpbGU+IHNldFVwV29ya3NwYWNlKCkgeworCQkKKwkJTGlzdDxGaWxlPiBwcm9qZWN0RGlyZWN0b3JpZXMgPSBuZXcgQXJyYXlMaXN0PEZpbGU+KCk7CisJCS8vIDEuIGNvcHkgdGhlIHByb2plY3QgZm9sZGVycyBmb3IgdGhlIGV4cGVyaW1lbnQgdG8gcnVuIAorCQkvLyAgICBGUk9NIHRoZSBzb3VyY2UgZGlyZWN0b3J5IFRPIHRoZSBydW50aW1lIHdvcmtzcGFjZSB3aGVyZSBldmVyIHRoYXQgaXMKKwkJRmlsZSByZWZEaXJlY3RvcnkgPSBuZXcgRmlsZShJbnRlZ3JhdGlvblRlc3RVdGlsLlJFRkVSRU5DRV9ESVIpOworCQlpZiAocmVmRGlyZWN0b3J5LmlzRGlyZWN0b3J5KCkpIHsKKwkJCS8vIHNob3VsZCBhbHdheXMgYmUgdHJ1ZQorCQkJRmlsZVtdIHByb2plY3RzID0gcmVmRGlyZWN0b3J5Lmxpc3RGaWxlcygpOworCQkJaWYocHJvamVjdHM9PW51bGwpIHsKKwkJCQlBY3RpdmF0b3IubG9nSW5mb3JtYXRpb24oIkVycm9yOkF1dG9tYXRlZEV4cGVyaW1lbnQgcHJvamVjdHMgbm90IGZvdW5kICEhIik7Ly8kTk9OLU5MUy0xJAorCQkJCVN5c3RlbS5leGl0KDEpOworCQkJfQorCQkJZm9yIChpbnQgaSA9IDA7IGkgPCBwcm9qZWN0cy5sZW5ndGg7IGkgKyspIHsKKwkJCQlpZihwcm9qZWN0c1tpXS5pc0RpcmVjdG9yeSgpKSB7CisJCQkJCS8vIGNoZWNrIHRoYXQgdGhpcyBpcyBub3QgYSBzeXN0ZW0gZGlyZWN0b3J5IHdpdGggbmFtZSBiZWdpbm5pbmcgd2l0aCAiLiIKKwkJCQkJU3RyaW5nIG5hbWVTdHIgPSBwcm9qZWN0c1tpXS5nZXROYW1lKCk7CisJCQkJCQorCQkJCQlpZighbmFtZVN0ci5zdWJzdHJpbmcoMCwxKS5lcXVhbHMoIi4iKSkgey8vJE5PTi1OTFMtMSQKKwkJCQkJCS8vIHRoaXMgaXMgYSBnb29kIGRpcmVjdG9yeQorCQkJCQkJU3RyaW5nIHJ1blByb2plY3ROYW1lID0gSW50ZWdyYXRpb25UZXN0VXRpbC5SVU5USU1FX1dPUktTUEFDRV9QQVRIK3NlcCtuYW1lU3RyOworCQkJCQkJRmlsZSB0YXJnZXREaXJlY3RvcnkgPSBuZXcgRmlsZShydW5Qcm9qZWN0TmFtZSk7CisJCQkJCQkJdHJ5IHsKKwkJCQkJCQkJLy8gMS4gY3JlYXRlIHRoZSBwcm9qZWN0IGFuZCBmb2xkZXIKKwkJCQkJCQkJSW50ZWdyYXRpb25UZXN0VXRpbC5pbXBvcnRQcm9qZWN0KHByb2plY3RzW2ldLCB0YXJnZXREaXJlY3RvcnkpOworCQkJCQkJCQkvLyAyLiByZW1lbWJlciBpdAorCQkJCQkJCQlwcm9qZWN0RGlyZWN0b3JpZXMuYWRkKHRhcmdldERpcmVjdG9yeSk7CisJCQkJCQkJCUFjdGl2YXRvci5sb2dJbmZvcm1hdGlvbigiZm91bmQgIit0YXJnZXREaXJlY3RvcnkuZ2V0QWJzb2x1dGVQYXRoKCkpOworCQkJCQkJCQkKKwkJCQkJCQl9IGNhdGNoIChFeGNlcHRpb24gZSkgeworCQkJCQkJCQlBY3RpdmF0b3IubG9nSW5mb3JtYXRpb24oIlByb2plY3QgQ29weSBmYWlsZWQgIitlLmdldE1lc3NhZ2UoKSk7Ly8kTk9OLU5MUy0xJAorCQkJCQkJCQllLnByaW50U3RhY2tUcmFjZSgpOworCQkJCQkJCQkKKwkJCQkJCQl9CisJCQkJCQl9CisJCQkJCQkKKwkJCQkJCQorCQkJCQl9Ly8gaWYgZ29vZCBkaXIgbmFtZQorCQkJCQkKKwkJCQl9Ly8gZm9yIGFsbCBwcm9qZWN0cworCQl9Ly9pZgorCQlyZXR1cm4gcHJvamVjdERpcmVjdG9yaWVzOworCX0vLyBzZXRVcFdvcmtzcGFjZQorCQorCS8qKgorCSAqIEByZXR1cm4gYW4ge0BsaW5rIFNjZW5hcmlvfSBmb3IgdGVzdGluZy4KKwkgKi8KKwlwdWJsaWMgc3RhdGljIHZvaWQgcmVmcmVzaFdvcmtzcGFjZShMaXN0PEZpbGU+IHByb2plY3RzKSB7CisJCQorCQkKKwkJZm9yIChpbnQgaSA9IDA7IGkgPCBwcm9qZWN0cy5zaXplKCk7IGkrKykgeworCQkJaWYgKHByb2plY3RzLmdldChpKS5pc0RpcmVjdG9yeSgpKSB7CisJCQkJLy8gY2hlY2sgdGhhdCB0aGlzIGlzIG5vdCBhIHN5c3RlbSBkaXJlY3Rvcnkgd2l0aCBuYW1lIGJlZ2lubmluZworCQkJCS8vIHdpdGggIi4iCisJCQkJU3RyaW5nIG5hbWVTdHIgPSBwcm9qZWN0cy5nZXQoaSkuZ2V0TmFtZSgpOworCisJCQkJaWYgKCFuYW1lU3RyLnN1YnN0cmluZygwLCAxKS5lcXVhbHMoIi4iKSkgey8vJE5PTi1OTFMtMSQKKwkJCQkJLy8gdGhpcyBpcyBhIGdvb2QgZGlyZWN0b3J5CisJCQkJCVN0cmluZyBydW5Qcm9qZWN0TmFtZSA9IEludGVncmF0aW9uVGVzdFV0aWwuUlVOVElNRV9XT1JLU1BBQ0VfUEFUSCArIHNlcCArIG5hbWVTdHI7CisJCQkJCUZpbGUgdGFyZ2V0RGlyZWN0b3J5ID0gbmV3IEZpbGUocnVuUHJvamVjdE5hbWUpOworCQkJCQl0cnkgeworCQkJCQkJLy8gMS4gY3JlYXRlIHRoZSBwcm9qZWN0IGFuZCBmb2xkZXIKKwkJCQkJCUludGVncmF0aW9uVGVzdFV0aWwucmVmcmVzaFByb2plY3QodGFyZ2V0RGlyZWN0b3J5KTsKKwkJCQkJCUFjdGl2YXRvci5sb2dJbmZvcm1hdGlvbigiZm91bmQgIisgdGFyZ2V0RGlyZWN0b3J5LmdldEFic29sdXRlUGF0aCgpKTsKKwkJCQkJfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKKwkJCQkJCUFjdGl2YXRvci5sb2dJbmZvcm1hdGlvbigiUHJvamVjdCBDb3B5IGZhaWxlZCAiICsgZS5nZXRNZXNzYWdlKCkpOy8vJE5PTi1OTFMtMSQKKwkJCQkJCWUucHJpbnRTdGFja1RyYWNlKCk7CisJCQkJCX0KKwkJCQl9CisKKwkJCX0vLyBpZiBnb29kIGRpciBuYW1lCisKKwkJfS8vIGZvciBhbGwgcHJvamVjdHMKKwkJCisJCQorCX0vLyBzZXRVcFdvcmtzcGFjZQorCQorCS8qKgorCSAqIAorCSAqIEBwYXJhbSBwcm9qZWN0cworCSAqIEByZXR1cm4KKwkgKi8KKwlwdWJsaWMgc3RhdGljIExpc3Q8U3RyaW5nPiByZWFkU2NlbmFyaW9zKExpc3Q8RmlsZT4gcHJvamVjdHMsIFN0cmluZyBzY2VuYXJpb19mb2xkZXIpIHsKKwkJCUxpc3Q8U3RyaW5nPiBzY2VuYXJpb0xpc3QgPSBuZXcgQXJyYXlMaXN0PFN0cmluZz4oKTsKKwkJCWZvciAoaW50IGk9MDsgaSA8IHByb2plY3RzLnNpemUoKTsgaSArKyApIHsKKwkJCQlGaWxlIHByb2plY3QgPSBwcm9qZWN0cy5nZXQoaSk7CisJCQkJU3RyaW5nIHBhdGggPSBwcm9qZWN0LmdldEFic29sdXRlUGF0aCgpOworCQkJCUZpbGUgc2NlbmFyaW9Gb2xkZXIgPSBuZXcgRmlsZShwYXRoK3NjZW5hcmlvX2ZvbGRlcik7CisJCQkJaWYoc2NlbmFyaW9Gb2xkZXIuZXhpc3RzKCkmJnNjZW5hcmlvRm9sZGVyLmlzRGlyZWN0b3J5KCkpIHsKKwkJCQkJRmlsZVtdIHNjZW5hcmlvc1RvUnVuID0gc2NlbmFyaW9Gb2xkZXIubGlzdEZpbGVzKCk7CisJCQkJCWlmKHNjZW5hcmlvc1RvUnVuICE9IG51bGwpIHsKKwkJCQkJCWZvciAoaW50IGogPSAwOyBqIDxzY2VuYXJpb3NUb1J1bi5sZW5ndGg7IGorKykgeworCQkJCQkJCUZpbGUgc2NlbmFyaW8gPSBzY2VuYXJpb3NUb1J1bltqXTsKKwkJCQkJCQlpZihzY2VuYXJpby5nZXROYW1lKCkuaW5kZXhPZigiLnNjZW5hcmlvIik+PTEpIHsKKwkJCQkJCQkJLy8gdGhpcyByZWFsbHkgaXMgYSBzY2VuYXJpbyBmaWxlCisJCQkJCQkJCXNjZW5hcmlvTGlzdC5hZGQoc2NlbmFyaW8uZ2V0QWJzb2x1dGVQYXRoKCkpOworCQkJCQkJCX0vL2lmIHNjZW5hcmlvCisJCQkJCQl9Ly8gZm9yIGFsbAorCQkJCQl9Ly8gIGxpc3Qgbm90IG51bGwKKwkJCQkJCisJCQkJfS8vIGlmIHNjZW5hcmlvIGZvbGRlcgorCQkJfS8vIGZvciBhbGwgcHJvamVjdHMKKwkJCQorCQkJcmV0dXJuIHNjZW5hcmlvTGlzdDsKKwl9Ly9yZWFkU2NlbmFyaW9zCisKKwkKKwkvKioKKwkgKiAKKwkgKiBAcGFyYW0gZmlsZW5hbWUKKwkgKiBAcmV0dXJuCisJICovCisJcHVibGljIHN0YXRpYyBTY2VuYXJpbyBsb2FkU2NlbmFyaW8oZmluYWwgU3RyaW5nIGZpbGVuYW1lKSB7CisJCWZpbmFsIFJlc291cmNlU2V0IHJlc291cmNlU2V0ID0gbmV3IFJlc291cmNlU2V0SW1wbCgpOworCQlyZXNvdXJjZVNldC5nZXRSZXNvdXJjZUZhY3RvcnlSZWdpc3RyeSgpLmdldEV4dGVuc2lvblRvRmFjdG9yeU1hcCgpLnB1dCgiKiIsIC8vJE5PTi1OTFMtMSQKKwkJCQlTVEVNWE1JUmVzb3VyY2VGYWN0b3J5SW1wbC5JTlNUQU5DRSk7CisJCXJlc291cmNlU2V0LmdldFJlc291cmNlRmFjdG9yeVJlZ2lzdHJ5KCkuZ2V0UHJvdG9jb2xUb0ZhY3RvcnlNYXAoKS5wdXQoInBsYXRmb3JtIiwgLy8kTk9OLU5MUy0xJAorCQkJCVNURU1YTUlSZXNvdXJjZUZhY3RvcnlJbXBsLklOU1RBTkNFKTsKKwkJZmluYWwgUmVzb3VyY2UgcmVzb3VyY2UgPSByZXNvdXJjZVNldC5nZXRSZXNvdXJjZShVUkkuY3JlYXRlRmlsZVVSSShmaWxlbmFtZSksIHRydWUpOworCQl0cnkgCisJCXsJCQkKKwkJCXJlc291cmNlLmxvYWQobnVsbCk7CisJCX0gCisJCWNhdGNoIChGaWxlTm90Rm91bmRFeGNlcHRpb24gZSkgCisJCXsKKwkJCWUucHJpbnRTdGFja1RyYWNlKCk7CisJCX0gCisJCWNhdGNoIChJT0V4Y2VwdGlvbiBlKSAKKwkJeworCQkJZS5wcmludFN0YWNrVHJhY2UoKTsKKwkJfQorCQlTY2VuYXJpbyB0b1JldHVybiA9IChTY2VuYXJpbylyZXNvdXJjZS5nZXRDb250ZW50cygpLmdldCgwKTsKKwkJcmV0dXJuIHRvUmV0dXJuOworCX0KKworfS8vIFRlc3RVdGlsCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9zY2VuYXJpby90ZXN0cy9TY2VuYXJpb0FsbFRlc3RzLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9zY2VuYXJpby90ZXN0cy9TY2VuYXJpb0FsbFRlc3RzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWFiYzM0MwotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3NjZW5hcmlvL3Rlc3RzL1NjZW5hcmlvQWxsVGVzdHMuamF2YQpAQCAtMCwwICsxLDU1IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zY2VuYXJpby50ZXN0czsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdDsKK2ltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdFN1aXRlOworaW1wb3J0IGp1bml0LnRleHR1aS5UZXN0UnVubmVyOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiBBIHRlc3Qgc3VpdGUgZm9yIHRoZSAnPGVtPjxiPlNjZW5hcmlvPC9iPjwvZW0+JyBtb2RlbC4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgU2NlbmFyaW9BbGxUZXN0cyBleHRlbmRzIFRlc3RTdWl0ZSB7CisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgeworCQlUZXN0UnVubmVyLnJ1bihzdWl0ZSgpKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgc3RhdGljIFRlc3Qgc3VpdGUoKSB7CisJCVRlc3RTdWl0ZSBzdWl0ZSA9IG5ldyBTY2VuYXJpb0FsbFRlc3RzKCJTY2VuYXJpbyBUZXN0cyIpOworCQlzdWl0ZS5hZGRUZXN0KFNjZW5hcmlvVGVzdHMuc3VpdGUoKSk7CisJCXN1aXRlLmFkZFRlc3QoU2NlbmFyaW9JbnRlZ3JhdGlvblRlc3RzLnN1aXRlKCkpOworCQlyZXR1cm4gc3VpdGU7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFNjZW5hcmlvQWxsVGVzdHMoU3RyaW5nIG5hbWUpIHsKKwkJc3VwZXIobmFtZSk7CisJfQorCit9IC8vU2NlbmFyaW9BbGxUZXN0cwpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvc2NlbmFyaW8vdGVzdHMvU2NlbmFyaW9JbnRlZ3JhdGlvbk11bHRpcGxlVGhyZWFkc1Rlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3NjZW5hcmlvL3Rlc3RzL1NjZW5hcmlvSW50ZWdyYXRpb25NdWx0aXBsZVRocmVhZHNUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjhkNzJhMwotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3NjZW5hcmlvL3Rlc3RzL1NjZW5hcmlvSW50ZWdyYXRpb25NdWx0aXBsZVRocmVhZHNUZXN0LmphdmEKQEAgLTAsMCArMSwxMDcgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNjZW5hcmlvLnRlc3RzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGphdmEuaW8uRmlsZTsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKKworaW1wb3J0IGp1bml0LnRleHR1aS5UZXN0UnVubmVyOworCitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlByZWZlcmVuY2VzOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zY2VuYXJpby5TY2VuYXJpbzsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmpvYnMucHJlZmVyZW5jZXMuUHJlZmVyZW5jZUNvbnN0YW50czsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiBBIHRlc3QgY2FzZSBmb3IgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPlNjZW5hcmlvPC9iPjwvZW0+Jy4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogPHA+CisgKiBUaGUgZm9sbG93aW5nIG9wZXJhdGlvbnMgYXJlIHRlc3RlZDoKKyAqIDx1bD4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2NlbmFyaW8uU2NlbmFyaW8jc3RlcCgpIDxlbT5TdGVwPC9lbT59PC9saT4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2NlbmFyaW8uU2NlbmFyaW8jcmVzZXQoKSA8ZW0+UmVzZXQ8L2VtPn08L2xpPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zY2VuYXJpby5TY2VuYXJpbyNpbml0aWFsaXplKCkgPGVtPkluaXRpYWxpemU8L2VtPn08L2xpPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zY2VuYXJpby5TY2VuYXJpbyNwcm9kdWNlVGl0bGUoKSA8ZW0+UHJvZHVjZSBUaXRsZTwvZW0+fTwvbGk+CisgKiA8L3VsPgorICogPC9wPgorICogQGdlbmVyYXRlZAorICovCitAU3VwcHJlc3NXYXJuaW5ncygiYWxsIikKK3B1YmxpYyBjbGFzcyBTY2VuYXJpb0ludGVncmF0aW9uTXVsdGlwbGVUaHJlYWRzVGVzdCBleHRlbmRzIFNjZW5hcmlvSW50ZWdyYXRpb25UZXN0IHsKKwkKKwlwcml2YXRlIFNjZW5hcmlvIGZpeHR1cmU7CisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKKwkJVGVzdFJ1bm5lci5ydW4oU2NlbmFyaW9JbnRlZ3JhdGlvbk11bHRpcGxlVGhyZWFkc1Rlc3QuY2xhc3MpOworCX0KKworCS8qKgorCSAqIEp1c3QgdG8ga2VlcCB0aGUgSlVuaXQgdGVzdCBydW5uZXIgaGFwcHkKKwkgKiAKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFNjZW5hcmlvSW50ZWdyYXRpb25NdWx0aXBsZVRocmVhZHNUZXN0KFN0cmluZyBuYW1lKSB7CisJCXN1cGVyKG5hbWUpOworCX0KKwkKKwkvKioKKwkgKiBDb25zdHJ1Y3RzIGEgbmV3IFNjZW5hcmlvIHRlc3QgY2FzZSB3aXRoIHRoZSBnaXZlbiBuYW1lLiA8IS0tCisJICogYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJcHVibGljIFNjZW5hcmlvSW50ZWdyYXRpb25NdWx0aXBsZVRocmVhZHNUZXN0KFN0cmluZyBuYW1lLCBTdHJpbmcgZmlsZSwgTGlzdDxGaWxlPnByb2plY3RzKSB7CisJCXN1cGVyKG5hbWUsIGZpbGUsIHByb2plY3RzKTsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBmaXh0dXJlIGZvciB0aGlzIFNjZW5hcmlvIHRlc3QgY2FzZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwkKKwlwcm90ZWN0ZWQgU2NlbmFyaW8gZ2V0Rml4dHVyZSgpIHsKKwkJcmV0dXJuIChTY2VuYXJpbylmaXh0dXJlOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBzZWUganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlI3NldFVwKCkKKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIHNldFVwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCXN1cGVyLnNldFVwKCk7CisJCS8vIHNldCBzb21lIHByZWZlcmVuY2VzCisJCVByZWZlcmVuY2VzIHByZWZlcmVuY2VzID0gb3JnLmVjbGlwc2Uuc3RlbS5qb2JzLkFjdGl2YXRvci5nZXREZWZhdWx0KCkuZ2V0UGx1Z2luUHJlZmVyZW5jZXMoKTsKKwkJcHJlZmVyZW5jZXMuc2V0VmFsdWUoUHJlZmVyZW5jZUNvbnN0YW50cy5TSU1VTEFUSU9OX1NMRUVQX0JPT0xFQU4sIGZhbHNlKTsKKwkJcHJlZmVyZW5jZXMgPSBvcmcuZWNsaXBzZS5zdGVtLnVpLkFjdGl2YXRvci5nZXREZWZhdWx0KCkuZ2V0UGx1Z2luUHJlZmVyZW5jZXMoKTsKKwkJcHJlZmVyZW5jZXMuc2V0VmFsdWUob3JnLmVjbGlwc2Uuc3RlbS51aS5wcmVmZXJlbmNlcy5QcmVmZXJlbmNlQ29uc3RhbnRzLlNJTVVMQVRJT05fVEhSRUFEUywgMik7CisJCQorCX0gLy8gc2V0VXAKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlI3RlYXJEb3duKCkKKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIHRlYXJEb3duKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCXN1cGVyLnRlYXJEb3duKCk7CisJfQorCisJCit9IC8vIFNjZW5hcmlvVGVzdApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvc2NlbmFyaW8vdGVzdHMvU2NlbmFyaW9JbnRlZ3JhdGlvblNpbmdsZVRocmVhZFRlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3NjZW5hcmlvL3Rlc3RzL1NjZW5hcmlvSW50ZWdyYXRpb25TaW5nbGVUaHJlYWRUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWU0NzI1OAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3NjZW5hcmlvL3Rlc3RzL1NjZW5hcmlvSW50ZWdyYXRpb25TaW5nbGVUaHJlYWRUZXN0LmphdmEKQEAgLTAsMCArMSwxMDggQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNjZW5hcmlvLnRlc3RzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGphdmEuaW8uRmlsZTsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKKworaW1wb3J0IGp1bml0LnRleHR1aS5UZXN0UnVubmVyOworCitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlByZWZlcmVuY2VzOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zY2VuYXJpby5TY2VuYXJpbzsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmpvYnMucHJlZmVyZW5jZXMuUHJlZmVyZW5jZUNvbnN0YW50czsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiBBIHRlc3QgY2FzZSBmb3IgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPlNjZW5hcmlvPC9iPjwvZW0+Jy4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogPHA+CisgKiBUaGUgZm9sbG93aW5nIG9wZXJhdGlvbnMgYXJlIHRlc3RlZDoKKyAqIDx1bD4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2NlbmFyaW8uU2NlbmFyaW8jc3RlcCgpIDxlbT5TdGVwPC9lbT59PC9saT4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2NlbmFyaW8uU2NlbmFyaW8jcmVzZXQoKSA8ZW0+UmVzZXQ8L2VtPn08L2xpPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zY2VuYXJpby5TY2VuYXJpbyNpbml0aWFsaXplKCkgPGVtPkluaXRpYWxpemU8L2VtPn08L2xpPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zY2VuYXJpby5TY2VuYXJpbyNwcm9kdWNlVGl0bGUoKSA8ZW0+UHJvZHVjZSBUaXRsZTwvZW0+fTwvbGk+CisgKiA8L3VsPgorICogPC9wPgorICogQGdlbmVyYXRlZAorICovCitAU3VwcHJlc3NXYXJuaW5ncygiYWxsIikKK3B1YmxpYyBjbGFzcyBTY2VuYXJpb0ludGVncmF0aW9uU2luZ2xlVGhyZWFkVGVzdCBleHRlbmRzIFNjZW5hcmlvSW50ZWdyYXRpb25UZXN0IHsKKwkKKwlwcml2YXRlIFNjZW5hcmlvIGZpeHR1cmU7CisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKKwkJVGVzdFJ1bm5lci5ydW4oU2NlbmFyaW9JbnRlZ3JhdGlvblNpbmdsZVRocmVhZFRlc3QuY2xhc3MpOworCX0KKworCS8qKgorCSAqIENvbnN0cnVjdHMgYSBuZXcgU2NlbmFyaW8gdGVzdCBjYXNlIHdpdGggdGhlIGdpdmVuIG5hbWUuIDwhLS0KKwkgKiBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBTY2VuYXJpb0ludGVncmF0aW9uU2luZ2xlVGhyZWFkVGVzdChTdHJpbmcgbmFtZSkgeworCQlzdXBlcihuYW1lKTsKKwl9CisJCisJLyoqCisJICogQ29uc3RydWN0cyBhIG5ldyBTY2VuYXJpbyB0ZXN0IGNhc2Ugd2l0aCB0aGUgZ2l2ZW4gbmFtZS4gPCEtLQorCSAqIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCXB1YmxpYyBTY2VuYXJpb0ludGVncmF0aW9uU2luZ2xlVGhyZWFkVGVzdChTdHJpbmcgbmFtZSwgU3RyaW5nIGZpbGUsIExpc3Q8RmlsZT5wcm9qZWN0cykgeworCQlzdXBlcihuYW1lLCBmaWxlLCBwcm9qZWN0cyk7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgZml4dHVyZSBmb3IgdGhpcyBTY2VuYXJpbyB0ZXN0IGNhc2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJCisJcHJvdGVjdGVkIFNjZW5hcmlvIGdldEZpeHR1cmUoKSB7CisJCXJldHVybiAoU2NlbmFyaW8pZml4dHVyZTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAc2VlIGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZSNzZXRVcCgpCisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgdm9pZCBzZXRVcCgpIHRocm93cyBFeGNlcHRpb24geworCQlzdXBlci5zZXRVcCgpOworCQkvLyBzZXQgc29tZSBwcmVmZXJlbmNlcworCQlQcmVmZXJlbmNlcyBwcmVmZXJlbmNlcyA9IG9yZy5lY2xpcHNlLnN0ZW0uam9icy5BY3RpdmF0b3IuZ2V0RGVmYXVsdCgpLmdldFBsdWdpblByZWZlcmVuY2VzKCk7CisJCXByZWZlcmVuY2VzLnNldFZhbHVlKFByZWZlcmVuY2VDb25zdGFudHMuU0lNVUxBVElPTl9TTEVFUF9CT09MRUFOLCBmYWxzZSk7CisJCXByZWZlcmVuY2VzID0gb3JnLmVjbGlwc2Uuc3RlbS51aS5BY3RpdmF0b3IuZ2V0RGVmYXVsdCgpLmdldFBsdWdpblByZWZlcmVuY2VzKCk7CisJCXByZWZlcmVuY2VzLnNldFZhbHVlKG9yZy5lY2xpcHNlLnN0ZW0udWkucHJlZmVyZW5jZXMuUHJlZmVyZW5jZUNvbnN0YW50cy5TSU1VTEFUSU9OX1RIUkVBRFMsIDEpOworCQkKKwl9IC8vIHNldFVwCisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZSN0ZWFyRG93bigpCisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgdm9pZCB0ZWFyRG93bigpIHRocm93cyBFeGNlcHRpb24geworCQlzdXBlci50ZWFyRG93bigpOworCX0KKworCQorfSAvLyBTY2VuYXJpb1Rlc3QKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3NjZW5hcmlvL3Rlc3RzL1NjZW5hcmlvSW50ZWdyYXRpb25UZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9zY2VuYXJpby90ZXN0cy9TY2VuYXJpb0ludGVncmF0aW9uVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU1YWNjZDAKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9zY2VuYXJpby90ZXN0cy9TY2VuYXJpb0ludGVncmF0aW9uVGVzdC5qYXZhCkBAIC0wLDAgKzEsMzIzIEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zY2VuYXJpby50ZXN0czsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqYXZhLmlvLkZpbGU7CitpbXBvcnQgamF2YS5sYW5nLnJlZmxlY3QuSW52b2NhdGlvblRhcmdldEV4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLmxhbmcucmVmbGVjdC5NZXRob2Q7CitpbXBvcnQgamF2YS5sYW5nLnJlZmxlY3QuTW9kaWZpZXI7CitpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKKworaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKK2ltcG9ydCBqdW5pdC50ZXh0dWkuVGVzdFJ1bm5lcjsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5FTGlzdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLlNjZW5hcmlvSW5pdGlhbGl6YXRpb25FeGNlcHRpb247CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5pbXBsLlJlZmVyZW5jZVNjZW5hcmlvRGF0YU1hcEltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy51dGlsLkNTVnNjZW5hcmlvTG9hZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5HcmFwaEZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLkRlY29yYXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuSW50ZWdyYXRpb25EZWNvcmF0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNjZW5hcmlvLlNjZW5hcmlvOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS50ZXN0cy5BY3RpdmF0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLkFnZ3JlZ2F0aW5nU0lEaXNlYXNlTW9kZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLkRpc2Vhc2VNb2RlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmpvYnMuc2ltdWxhdGlvbi5JU2ltdWxhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmpvYnMuc2ltdWxhdGlvbi5TaW11bGF0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udXRpbC5sb2dnZXJzLnZpZXdzLkNTVkxvZ2dlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS51dGlsLmxvZ2dlcnMudmlld3MuQ3VzdG9tQ1NWTG9nZ2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udXRpbC5sb2dnZXJzLnZpZXdzLkxvZ2dlckNvbnRyb2xGYWN0b3J5OworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IEEgdGVzdCBjYXNlIGZvciB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+U2NlbmFyaW88L2I+PC9lbT4nLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiA8cD4KKyAqIFRoZSBmb2xsb3dpbmcgb3BlcmF0aW9ucyBhcmUgdGVzdGVkOgorICogPHVsPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zY2VuYXJpby5TY2VuYXJpbyNzdGVwKCkgPGVtPlN0ZXA8L2VtPn08L2xpPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zY2VuYXJpby5TY2VuYXJpbyNyZXNldCgpIDxlbT5SZXNldDwvZW0+fTwvbGk+CisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNjZW5hcmlvLlNjZW5hcmlvI2luaXRpYWxpemUoKSA8ZW0+SW5pdGlhbGl6ZTwvZW0+fTwvbGk+CisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNjZW5hcmlvLlNjZW5hcmlvI3Byb2R1Y2VUaXRsZSgpIDxlbT5Qcm9kdWNlIFRpdGxlPC9lbT59PC9saT4KKyAqIDwvdWw+CisgKiA8L3A+CisgKiBAZ2VuZXJhdGVkCisgKi8KK0BTdXBwcmVzc1dhcm5pbmdzKCJhbGwiKQorcHVibGljIGNsYXNzIFNjZW5hcmlvSW50ZWdyYXRpb25UZXN0IGV4dGVuZHMgVGVzdENhc2UgeworCS8qKgorCSAqIGZvciB0ZXN0aW5nIHNjZW5hcmlvcyBmcm9tIGZpbGVzCisJICovCisKKwkKKwlwcm90ZWN0ZWQgZmluYWwgc3RhdGljIFN0cmluZyBSRUZFUkVOQ0VfU1VGRklYPSJfUmVmZXJlbmNlIjsKKwlwcm90ZWN0ZWQgZmluYWwgc3RhdGljIFN0cmluZyBzZXAgPSBGaWxlLnNlcGFyYXRvcjsKKwkKKwlwcm90ZWN0ZWQgU3RyaW5nIHNjZW5hcmlvRmlsZTsKKwlzdGF0aWMgTGlzdDxGaWxlPiBhbGxQcm9qZWN0cyA9IG51bGw7CisJCisJcHJpdmF0ZSBTY2VuYXJpbyBmaXh0dXJlOworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CisJCVRlc3RSdW5uZXIucnVuKFNjZW5hcmlvSW50ZWdyYXRpb25UZXN0LmNsYXNzKTsKKwl9CisKKwkvKioKKwkgKiBUbyBrZWVwIGp1bml0IHRlc3QgcnVubmVyIGhhcHkuIAorCSAqIAorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgU2NlbmFyaW9JbnRlZ3JhdGlvblRlc3QoU3RyaW5nIG5hbWUpIHsKKwkJc3VwZXIobmFtZSk7CisJfQorCQorCS8qKgorCSAqIENvbnN0cnVjdHMgYSBuZXcgU2NlbmFyaW8gdGVzdCBjYXNlIHdpdGggdGhlIGdpdmVuIG5hbWUuIDwhLS0KKwkgKiBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBTY2VuYXJpb0ludGVncmF0aW9uVGVzdChTdHJpbmcgbmFtZSwgU3RyaW5nIGZpbGUsIExpc3Q8RmlsZT5wcm9qZWN0cykgeworCQlzdXBlcihuYW1lKTsKKwkJc2NlbmFyaW9GaWxlID0gIGZpbGU7CisJCWFsbFByb2plY3RzID0gcHJvamVjdHM7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgZml4dHVyZSBmb3IgdGhpcyBTY2VuYXJpbyB0ZXN0IGNhc2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJCisJcHJvdGVjdGVkIFNjZW5hcmlvIGdldEZpeHR1cmUoKSB7CisJCXJldHVybiAoU2NlbmFyaW8pZml4dHVyZTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAc2VlIGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZSNzZXRVcCgpCisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgdm9pZCBzZXRVcCgpIHRocm93cyBFeGNlcHRpb24geworCQkKKwl9IC8vIHNldFVwCisKKwkvKioKKwkgKiBydW5zIGFsbCB0aGUgaW50ZWdyYXRpb24gdGVzdHMKKwkgKi8KKwlwdWJsaWMgdm9pZCB0ZXN0U2NlbmFyaW8oKSB7CisJCS8vIHNldCB1cCB0aGUgd29ya3NwYWNlIGZvciBhbGwgdGhlIGludGVncmF0aW9uIHRlc3RzCisJCisJCWlmKHRoaXMuc2NlbmFyaW9GaWxlID09IG51bGwpIHJldHVybjsKKwkJU3RyaW5nIGludGVncmF0aW9uVGVzdExvZ0RpcjsKKwkJU3RyaW5nIHNjZW5hcmlvTmFtZTsKKwkJTGlzdDxTdHJpbmc+IGRhdGFPYmplY3ROYW1lTGlzdCA9IG5ldyBBcnJheUxpc3Q8U3RyaW5nPigpOyAvLyBlLmcuIGxpc3Qgb2YgdGhpbmdzIGJlaW5nIGxvZ2dlZCB0aGUgRGlzZWFzZSBOYW1lIG9yIHBvcHVsYXRpb24gbW9kZWwgbmFtZQorCQlMaXN0PFN0cmluZz4gIGxvZ0Rpckxpc3QgPSBuZXcgQXJyYXlMaXN0PFN0cmluZz4oKTsgLy8gTGlzdCBvZiB0aGUgbG9nIGRpcmVjdG9yaWVzIChnZW5lcmF0ZWQgd2l0aCB0aW1lIHN0YW1wKQorCQorCQlTdHJpbmcgc2NlbmFyaW9Ub1Rlc3QgPSB0aGlzLnNjZW5hcmlvRmlsZTsKKwkJQWN0aXZhdG9yLmxvZ0luZm9ybWF0aW9uKCJub3cgbG9hZGluZyAiK3NjZW5hcmlvVG9UZXN0KTsKKwkJCQorCQlzY2VuYXJpb05hbWUgPSBnZXRTY2VuYXJpb05hbWUoc2NlbmFyaW9Ub1Rlc3QpOworCQlpbnRlZ3JhdGlvblRlc3RMb2dEaXIgPSBnZXRMb2dEaXIoc2NlbmFyaW9Ub1Rlc3QpOworCQkJCisJCVNjZW5hcmlvIHNjZW5hcmlvID0gSW50ZWdyYXRpb25UZXN0VXRpbC5sb2FkU2NlbmFyaW8oc2NlbmFyaW9Ub1Rlc3QpOworCQlmaXh0dXJlID0gc2NlbmFyaW87CisJCXNjZW5hcmlvLmluaXRpYWxpemUoKTsgLy8gVGhpcyBzdGVwIGNhbiBiZSBzbG93CisJCWFzc2VydFRydWUoc2NlbmFyaW8uc2FuZSgpKTsKKwkJCQorCQkvLyBOZXh0IHdlIGhhdmUgdG8gY3JlYXRlIGEgc2ltdWxhdGlvbiBhbmQgbG9nZ2VyKHMpIGZvciB0aGUgc2NlbmFyaW8KKwkJLy8gYW5kIGNvbXB1dGUgdGhlIG91dHB1dCB0byBwcmVzdG9yZWQgb3V0cHV0cworCQlJU2ltdWxhdGlvbiBzaW0gPSBuZXcgU2ltdWxhdGlvbihzY2VuYXJpbywwLCBHcmFwaEZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZVNpbXBsZUdyYXBoUGFydGl0aW9uZXIoKSk7CisJCUxvZ2dlckNvbnRyb2xGYWN0b3J5IGxjZiA9IENTVkxvZ2dlckZhY3RvcnkuSU5TVEFOQ0U7CisJCUVMaXN0PERlY29yYXRvcj4gZGVjb3JhdG9ycyA9IHNpbS5nZXRTY2VuYXJpbygpLmdldENhbm9uaWNhbEdyYXBoKCkuZ2V0RGVjb3JhdG9ycygpOworCQlmb3IoRGVjb3JhdG9yIGRlYzpkZWNvcmF0b3JzKSB7CisJCQlpZihkZWMgaW5zdGFuY2VvZiBJbnRlZ3JhdGlvbkRlY29yYXRvciAmJiAhKGRlYyBpbnN0YW5jZW9mIEFnZ3JlZ2F0aW5nU0lEaXNlYXNlTW9kZWwpKSB7CisJCQkJCQorCQkJCS8vIFRPRE8gIEZvciBub3cgd2Ugb25seSBsb2cgYW5kIHRlc3QgdGhlIERpc2Vhc2VNb2RlbCBEYXRhCisJCQkJLy8gVE9ETyB0aGUgQ1NWc2NlbmFyaW8gbG9hZGVyIGRvZXMgbm90IHlldCBwYXJzZSB0aGUgUG9wdWxhdGlvbk1vZGVsIExvZyBGaWxlcworCQkJCWlmKGRlYyBpbnN0YW5jZW9mIERpc2Vhc2VNb2RlbCkgeworCQkJCQlJbnRlZ3JhdGlvbkRlY29yYXRvciBkbSA9IChJbnRlZ3JhdGlvbkRlY29yYXRvcilkZWM7CisJCQkJCS8vU3RyaW5nIGRpc2Vhc2VOYW1lID0gZG0uZ2V0RGlzZWFzZU5hbWUoKTsKKwkJCQkJQ3VzdG9tQ1NWTG9nZ2VyIGxvZ1dyaXRlciA9IG5ldyBDdXN0b21DU1ZMb2dnZXIoaW50ZWdyYXRpb25UZXN0TG9nRGlyK0ZpbGUuc2VwYXJhdG9yK3NjZW5hcmlvTmFtZStGaWxlLnNlcGFyYXRvcixzaW0sZG0pOworCQkJCQlkYXRhT2JqZWN0TmFtZUxpc3QuYWRkKGxvZ1dyaXRlci5nZXRMb2dEYXRhT2JqZWN0TmFtZSgpKTsKKwkJCQkJbG9nRGlyTGlzdC5hZGQobG9nV3JpdGVyLmdldERpcmVjdG9yeU5hbWUoKSk7CisJCQkJfQorCQkJCQkKKwkJCX0gLy8gRGlzZWFzZU1vZGVsCisJCX0gLy8gRm9yIGVhY2ggZGVjb3JhdG9yCisJCQkKKwkJLy8gcnVuIHRoZSBzaW11bGF0aW9uIGFuZCBsb2cgdGhlIGRhdGEKKwkJQWN0aXZhdG9yLmxvZ0luZm9ybWF0aW9uKCJTdGFydGluZyBzaW11bGF0aW9uLi4uLiIpOwkJCQorCQlzaW0ucnVuKCk7CisJCXRyeSB7CisJCQlBY3RpdmF0b3IubG9nSW5mb3JtYXRpb24oIldhaXRpbmcgZm9yIHNpbXVsYXRpb24gdG8gZmluaXNoLi4uIik7CisJCQlzaW0uam9pbigpOworCQkJQWN0aXZhdG9yLmxvZ0luZm9ybWF0aW9uKCJTaW11bGF0aW9uIGZpbmlzaGVkLiIpOworCQl9IGNhdGNoIChJbnRlcnJ1cHRlZEV4Y2VwdGlvbiBlKSB7CisJCQllLnByaW50U3RhY2tUcmFjZSgpOworCQl9CisJCXNpbS5zdG9wKCk7CQkJCisJCQkKKwkJCQorCQkvLyBTaW11bGF0aW9uIGlzIGRvbmUuIAorCQkvLyBSRUZSRVNIIHRoZSB3b3Jrc3BhY2Ugc28gd2Ugc2VlIHRoZSBuZXcgbG9nIGZpbGVzCisJCUludGVncmF0aW9uVGVzdFV0aWwucmVmcmVzaFdvcmtzcGFjZShhbGxQcm9qZWN0cyk7CisJCQorCQkJCisJCS8vIFJFQUQgYWxsIGxvZ3MgZm9yIGVhY2ggc2NlbmFyaW8gd2UgcmFuCisvLwkJCWZvciAoaW50IGogPSAwOyBqIDwgbG9nRGlyTGlzdC5zaXplKCk7IGogKyspIHsKKwkJCS8vTm93IHJlYWQgaW4gdGhlIGxvZyBmaWxlKHMpIHdlIGp1c3QgY3JlYXRlZCAKKwkJU3RyaW5nIGxvZ0RpciA9IGxvZ0Rpckxpc3QuZ2V0KGxvZ0Rpckxpc3Quc2l6ZSgpLTEpOworCQkvLyB0aGlzIGRpcmVjdG9yeSBpcyBhIGRpc2Vhc2Ugb3IgUG9wdWxhdGlvbk1vZGVsIGJ1dCB3ZSBuZWVkIHRvIGxvb2sgZm9yIGV2ZXJ5IGxlYWYgZm9sZGVyIGluIGl0LgorCQkvLyBUaGUgbGVhZiBmb2xkZXJzIGFyZSBwb3B1bGF0aW9uSWRlbnRpZmllcnMgbGlrZSAnaHVtYW4nLgorCQlGaWxlIHRvcERpciA9IG5ldyBGaWxlKGxvZ0Rpcik7CisJCUZpbGVbXSBhbGxTdWJGb2xkZXJzID0gdG9wRGlyLmxpc3RGaWxlcygpOworCQlmb3IoaW50IGsgPSAwOyBrIDwgYWxsU3ViRm9sZGVycy5sZW5ndGg7IGsgKyspIHsKKwkJCUZpbGUgbGVhZlN1YkZvbGRlciA9IGFsbFN1YkZvbGRlcnNba107CisJCQlpZihsZWFmU3ViRm9sZGVyLmlzRGlyZWN0b3J5KCkpIHsKKwkJCQlTdHJpbmcgcG9wdWxhdGlvbklkZW50aWZpZXIgPSBsZWFmU3ViRm9sZGVyLmdldE5hbWUoKTsKKwkJCQlTdHJpbmcgZmlyc3RTVFIgPSBwb3B1bGF0aW9uSWRlbnRpZmllci5zdWJzdHJpbmcoMCwxKTsKKwkJCQkvLyBpZ25vcmUgc3lzdGVtIGZvbGRlcnMKKwkJCQlpZighZmlyc3RTVFIuZXF1YWxzKCIuIikpIHsKKwkJCQkJCQorCQkJCQlpbnQgbWF4UmVzb2x1dGlvbiA9IDA7CisJCQkJCVJlZmVyZW5jZVNjZW5hcmlvRGF0YU1hcEltcGwgc2NlbmFyaW9EYXRhTWFwID0gbnVsbDsKKwkJCQkJdHJ5IHsKKwkJCQkJCUFjdGl2YXRvci5sb2dJbmZvcm1hdGlvbigiTG9hZGluZyBwb3N0IHNpbXVsYXRpb24gZGF0YSBmcm9tIERpcmVjdG9yeSAiK2xvZ0Rpcitwb3B1bGF0aW9uSWRlbnRpZmllcik7CisJCQkJCQlDU1ZzY2VuYXJpb0xvYWRlciBsb2FkZXJSVU4gPSBuZXcgQ1NWc2NlbmFyaW9Mb2FkZXIobG9nRGlyK3BvcHVsYXRpb25JZGVudGlmaWVyKTsKKwkJCQkJCW1heFJlc29sdXRpb24gPSBsb2FkZXJSVU4uZ2V0TWF4UmVzb2x1dGlvbigpOworCQkJCQkJc2NlbmFyaW9EYXRhTWFwID0gbG9hZGVyUlVOLnBhcnNlQWxsRmlsZXMobWF4UmVzb2x1dGlvbik7CisJCQkJCX0gY2F0Y2ggKFNjZW5hcmlvSW5pdGlhbGl6YXRpb25FeGNlcHRpb24gZSkgeworCQkJCQkJQWN0aXZhdG9yLmxvZ0Vycm9yKCJFcnJvciBsb2FkaW5nIHJ1biBsb2cgZm9yICAiK2xvZ0RpcisiIGVycm9yPSAiK2UuZ2V0TWVzc2FnZSgpLGUpOworCQkJCQl9CisJCQkJCQkKKwkJCQkJLy9Ob3cgcmVhZCBpbiB0aGUgUkVGRVJFTkNFIGxvZyBmaWxlKHMpIGNvcGllZCBpbiB3aXRoIHRoZSBwcm9qZWN0cy4gV2UgbG9vayBmb3IgdGhlIFNBTUUgcG9wdWxhdGlvbklkZW50aWZpZXIgYmVpbmcgdGVzdGVkIGFib3ZlCisJCQkJCVN0cmluZyBkYXRhT2JqZWN0TmFtZSA9IGRhdGFPYmplY3ROYW1lTGlzdC5nZXQoZGF0YU9iamVjdE5hbWVMaXN0LnNpemUoKS0xKTsKKwkJCQkJU3RyaW5nIHJlZmVyZW5jZURhdGFEaXJlY3RvcnkgPSBpbnRlZ3JhdGlvblRlc3RMb2dEaXIrc2VwK3NjZW5hcmlvTmFtZStSRUZFUkVOQ0VfU1VGRklYK3NlcCtkYXRhT2JqZWN0TmFtZStzZXArcG9wdWxhdGlvbklkZW50aWZpZXI7CisJCQkJCVJlZmVyZW5jZVNjZW5hcmlvRGF0YU1hcEltcGwgcmVmZXJlbmNlRGF0YU1hcD1udWxsOworCQkJCQl0cnkgeworCQkJCQkJQWN0aXZhdG9yLmxvZ0luZm9ybWF0aW9uKCJMb2FkaW5nIHJlZmVyZW5jZSBkYXRhIGZvciAiK2RhdGFPYmplY3ROYW1lK3NlcCtwb3B1bGF0aW9uSWRlbnRpZmllcik7CisJCQkJCQlDU1ZzY2VuYXJpb0xvYWRlciBsb2FkZXJSRUYgPSBuZXcgQ1NWc2NlbmFyaW9Mb2FkZXIocmVmZXJlbmNlRGF0YURpcmVjdG9yeSk7CisJCQkJCQlyZWZlcmVuY2VEYXRhTWFwID0gbG9hZGVyUkVGLnBhcnNlQWxsRmlsZXMobWF4UmVzb2x1dGlvbik7CisJCQkJCX0gY2F0Y2ggKFNjZW5hcmlvSW5pdGlhbGl6YXRpb25FeGNlcHRpb24gZSkgeworCQkJCQkJQWN0aXZhdG9yLmxvZ0luZm9ybWF0aW9uKCJXYXJuaW5nLCBObyBSRUZFUkVOQ0UgbG9nIGZvdW5kIG9yIGxvYWRlZCBmb3IgICIrZGF0YU9iamVjdE5hbWUrIiByZWZlcmVuY2VEYXRhRGlyZWN0b3J5IHNob3VsZCBiZTpbIityZWZlcmVuY2VEYXRhRGlyZWN0b3J5KyJdIGVycm9yPSAiK2UuZ2V0TWVzc2FnZSgpKTsKKwkJCQkJfQorCQkJCQkJCisJCQkJCS8vIFdhcyB0aGUgdGVzdCBydW4gU2FuZT8/CisJCQkJCWFzc2VydFRydWUoc2NlbmFyaW9EYXRhTWFwLnNhbmUoKSk7CisJCQkJCWlmKHJlZmVyZW5jZURhdGFNYXAhPW51bGwpIHsKKwkJCQkJCWFzc2VydFRydWUocmVmZXJlbmNlRGF0YU1hcC5zYW5lKCkpOworCQkJCQkJYm9vbGVhbiBjb25zaXN0ZW50ID0gc2NlbmFyaW9EYXRhTWFwLmNvbnNpc3RlbnRXaXRoKHJlZmVyZW5jZURhdGFNYXApOworCQkJCQkJYXNzZXJ0VHJ1ZShjb25zaXN0ZW50KTsJCQkJCQkJCQorCQkJCQl9CisJCQkJCQorCQkJCQkJCisJCQkJfS8vIGlmIG5vdCBzeXN0ZW0gZm9sZGVyCisJCQl9Ly8gaWYgZGlyZWN0b3J5CisJCX0vLyBmb3IgYWxsIHN1YkZvbGRlcnMgYW5kIEZpbGVzCisJCQkJCisJCQorCX0vLyBUZXN0QWxsSW50ZWdyYXRpb25UZXN0CisJCQorCQorCS8qKgorCSAqIAorCSAqIEBwYXJhbSBzY2VuYXJpb0ZvbGRlcgorCSAqIEByZXR1cm4KKwkgKi8KKwlwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRMb2dEaXIoU3RyaW5nIHNjZW5hcmlvRm9sZGVyKSAgeworCQlpbnQgaWR4ID0gc2NlbmFyaW9Gb2xkZXIuaW5kZXhPZigic2NlbmFyaW9zIik7CisJCVN0cmluZyBwYXRoID0gc2NlbmFyaW9Gb2xkZXIuc3Vic3RyaW5nKDAsaWR4KTsKKwkJU3RyaW5nIHJldFZhbCA9IHBhdGgrIlJlY29yZGVkIFNpbXVsYXRpb25zIitzZXArIkludGVncmF0aW9uVGVzdCI7CisJCXJldHVybiByZXRWYWw7CQorCX0KKwkKKwkvKioKKwkgKiAKKwkgKiBAcGFyYW0gc2NlbmFyaW9Gb2xkZXIKKwkgKiBAcmV0dXJuCisJICovCisJcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0U2NlbmFyaW9OYW1lKFN0cmluZyBzY2VuYXJpb0ZvbGRlcikgIHsKKwkJaW50IGlkeDEgPSBzY2VuYXJpb0ZvbGRlci5pbmRleE9mKCJzY2VuYXJpb3MiKTsKKwkJaW50IGlkeDIgPSBzY2VuYXJpb0ZvbGRlci5pbmRleE9mKCIuc2NlbmFyaW8iKTsKKwkJaWR4MSs9MTA7CisJCVN0cmluZyBuYW1lID0gc2NlbmFyaW9Gb2xkZXIuc3Vic3RyaW5nKGlkeDEsaWR4Mik7CisJCXJldHVybiBuYW1lOwkKKwl9CisJCisJLyoqIFRoaXMgaXMgaGFja3ksIGp1c3QgdG8gZ2V0IHRoZSB0ZXN0IHJ1bm5lciB0byB1c2UgYSBtZXRob2QgbmFtZSB0aGF0IGlzIGRpZmZlcmVudCBmcm9tIHRoZSBuYW1lIG9mIHRoZSB0ZXN0CisJICogCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgcnVuVGVzdCgpIHRocm93cyBUaHJvd2FibGUgeworCQlNZXRob2QgcnVuTWV0aG9kPSBudWxsOworCQl0cnkgeworCQkJLy8gdXNlIGdldE1ldGhvZCB0byBnZXQgYWxsIHB1YmxpYyBpbmhlcml0ZWQKKwkJCS8vIG1ldGhvZHMuIGdldERlY2xhcmVkTWV0aG9kcyByZXR1cm5zIGFsbAorCQkJLy8gbWV0aG9kcyBvZiB0aGlzIGNsYXNzIGJ1dCBleGNsdWRlcyB0aGUKKwkJCS8vIGluaGVyaXRlZCBvbmVzLgorCQkJcnVuTWV0aG9kPSBnZXRDbGFzcygpLmdldE1ldGhvZCgidGVzdFNjZW5hcmlvIiwgKENsYXNzW10pbnVsbCk7CisJCX0gY2F0Y2ggKE5vU3VjaE1ldGhvZEV4Y2VwdGlvbiBlKSB7CisJCQlmYWlsKCJNZXRob2QgXCIiKyJ0ZXN0U2NlbmFyaW8iKyJcIiBub3QgZm91bmQiKTsKKwkJfQorCQlpZiAoIU1vZGlmaWVyLmlzUHVibGljKHJ1bk1ldGhvZC5nZXRNb2RpZmllcnMoKSkpIHsKKwkJCWZhaWwoIk1ldGhvZCBcIiIrInRlc3RTY2VuYXJpbyIrIlwiIHNob3VsZCBiZSBwdWJsaWMiKTsKKwkJfQorCisJCXRyeSB7CisJCQlydW5NZXRob2QuaW52b2tlKHRoaXMpOworCQl9CisJCWNhdGNoIChJbnZvY2F0aW9uVGFyZ2V0RXhjZXB0aW9uIGUpIHsKKwkJCWUuZmlsbEluU3RhY2tUcmFjZSgpOworCQkJdGhyb3cgZS5nZXRUYXJnZXRFeGNlcHRpb24oKTsKKwkJfQorCQljYXRjaCAoSWxsZWdhbEFjY2Vzc0V4Y2VwdGlvbiBlKSB7CisJCQllLmZpbGxJblN0YWNrVHJhY2UoKTsKKwkJCXRocm93IGU7CisJCX0KKwl9CisJCisJCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2UjdGVhckRvd24oKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgdm9pZCB0ZWFyRG93bigpIHRocm93cyBFeGNlcHRpb24geworCQlmaXh0dXJlID0gbnVsbDsKKwkvLy8vIGNsZWFuIHVwIC8vLy8KKy8vCQlpZihhbGxQcm9qZWN0cyAhPSBudWxsKSB7CisvLwkJCXRyeSB7CisvLwkJCQlmb3IoaW50IGkgPSAwOyBpIDwgYWxsUHJvamVjdHMuc2l6ZSgpOyBpICsrKXsKKy8vCQkJCQlGaWxlIHByb2plY3QgPSBhbGxQcm9qZWN0cy5nZXQoaSk7CisvLwkJCQkJYXNzZXJ0VHJ1ZShJbnRlZ3JhdGlvblRlc3RVdGlsLnJlbW92ZURpcmVjdG9yeShwcm9qZWN0KSk7CisvLwkJCQl9CisvLwkJCX0gY2F0Y2goQ29yZUV4Y2VwdGlvbiBjZSkgeworLy8JCQkJY2UucHJpbnRTdGFja1RyYWNlKCk7CisvLwkJCQlmYWlsKCk7CisvLwkJCX0JCisvLwkJfQorCQkvLy8vLy8vLy8vLy8vLy8vLy8vLy8KKwl9CisKKwkKKwkKKworCit9IC8vIFNjZW5hcmlvVGVzdApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvc2NlbmFyaW8vdGVzdHMvU2NlbmFyaW9JbnRlZ3JhdGlvblRlc3RzLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9zY2VuYXJpby90ZXN0cy9TY2VuYXJpb0ludGVncmF0aW9uVGVzdHMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNDQ4NDVlCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvc2NlbmFyaW8vdGVzdHMvU2NlbmFyaW9JbnRlZ3JhdGlvblRlc3RzLmphdmEKQEAgLTAsMCArMSw2OSBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2NlbmFyaW8udGVzdHM7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgamF2YS5pby5GaWxlOworaW1wb3J0IGphdmEudXRpbC5MaXN0OworCitpbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3Q7CitpbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RTdWl0ZTsKK2ltcG9ydCBqdW5pdC50ZXh0dWkuVGVzdFJ1bm5lcjsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogQSB0ZXN0IHN1aXRlIGZvciB0aGUgJzxlbT48Yj5zY2VuYXJpbzwvYj48L2VtPicgcGFja2FnZS4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQGdlbmVyYXRlZCBOT1QKKyAqLworcHVibGljIGNsYXNzIFNjZW5hcmlvSW50ZWdyYXRpb25UZXN0cyBleHRlbmRzIFRlc3RTdWl0ZSB7CisJCisJc3RhdGljIExpc3Q8U3RyaW5nPiBzY2VuYXJpb05hbWVMaXN0ID0gbnVsbDsKKwlzdGF0aWMgTGlzdDxGaWxlPiBhbGxQcm9qZWN0cyA9IG51bGw7CisJcHJvdGVjdGVkIGZpbmFsIHN0YXRpYyBTdHJpbmcgc2VwID0gRmlsZS5zZXBhcmF0b3I7CisJcHJvdGVjdGVkIGZpbmFsIHN0YXRpYyBTdHJpbmcgU0NFTkFSSU9fRk9MREVSID0gc2VwKyJzY2VuYXJpb3MiOy8vJE5PTi1OTFMtMSQKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgeworCQlUZXN0UnVubmVyLnJ1bihzdWl0ZSgpKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJcHVibGljIHN0YXRpYyBUZXN0IHN1aXRlKCkgeworCQlUZXN0U3VpdGUgc3VpdGUgPSBuZXcgU2NlbmFyaW9JbnRlZ3JhdGlvblRlc3RzKCJTY2VuYXJpbyBJbnRlZ3JhdGlvbiBUZXN0cyIpOyAvLyROT04tTkxTLTEkCisJCWFsbFByb2plY3RzID0gSW50ZWdyYXRpb25UZXN0VXRpbC5zZXRVcFdvcmtzcGFjZSgpOworCQlzY2VuYXJpb05hbWVMaXN0ID0gSW50ZWdyYXRpb25UZXN0VXRpbC5yZWFkU2NlbmFyaW9zKGFsbFByb2plY3RzLCBTQ0VOQVJJT19GT0xERVIpOworCQkKKwkJZm9yKFN0cmluZyBzY2VuYXJpb05hbWU6c2NlbmFyaW9OYW1lTGlzdCkgeworCQkJU3RyaW5nIGZuYW1lID0gc2NlbmFyaW9OYW1lLnN1YnN0cmluZyhzY2VuYXJpb05hbWUubGFzdEluZGV4T2Yoc2VwKSsxKTsKKwkJCXN1aXRlLmFkZFRlc3QobmV3IFNjZW5hcmlvSW50ZWdyYXRpb25TaW5nbGVUaHJlYWRUZXN0KCJTaW5nbGUtdGhyZWFkZWQgIitmbmFtZSwgc2NlbmFyaW9OYW1lLCBhbGxQcm9qZWN0cykpOworCQkJc3VpdGUuYWRkVGVzdChuZXcgU2NlbmFyaW9JbnRlZ3JhdGlvbk11bHRpcGxlVGhyZWFkc1Rlc3QoIk11bHRpLXRocmVhZGVkICIrZm5hbWUsIHNjZW5hcmlvTmFtZSwgYWxsUHJvamVjdHMpKTsKKwkJfQorCQlyZXR1cm4gc3VpdGU7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFNjZW5hcmlvSW50ZWdyYXRpb25UZXN0cyhTdHJpbmcgbmFtZSkgeworCQlzdXBlcihuYW1lKTsKKwl9CisKK30gLy9TY2VuYXJpb1Rlc3RzCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9zY2VuYXJpby90ZXN0cy9TY2VuYXJpb1Rlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3NjZW5hcmlvL3Rlc3RzL1NjZW5hcmlvVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEyMTUxYjMKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9zY2VuYXJpby90ZXN0cy9TY2VuYXJpb1Rlc3QuamF2YQpAQCAtMCwwICsxLDU3NCBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2NlbmFyaW8udGVzdHM7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLnV0aWwuQ2FsZW5kYXI7CitpbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOworCitpbXBvcnQganVuaXQudGV4dHVpLlRlc3RSdW5uZXI7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuVVJJOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5yZXNvdXJjZS5SZXNvdXJjZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUucmVzb3VyY2UuUmVzb3VyY2VTZXQ7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnJlc291cmNlLmltcGwuUmVzb3VyY2VTZXRJbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5TVEVNVVJJOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5VdGlsaXR5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uaW1wbC5JZGVudGlmaWFibGVGaWx0ZXJJbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24udGVzdHMuSWRlbnRpZmlhYmxlVGVzdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguRHluYW1pY0xhYmVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5HcmFwaDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguR3JhcGhGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5MYWJlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuRGVjb3JhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5Nb2RlbEZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLlNURU1UaW1lOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC50ZXN0cy5Nb2RlbFRlc3Q7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNjZW5hcmlvLlNjZW5hcmlvOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zY2VuYXJpby5TY2VuYXJpb0ZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNlcXVlbmNlci5TZXF1ZW5jZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNlcXVlbmNlci5pbXBsLlNlcXVlbmNlckltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNvbHZlci5Tb2x2ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5zb2x2ZXJzLmZkLkZkRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwuZGVjb3JhdG9ycy5EZWNvcmF0b3JzRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwuZGVjb3JhdG9ycy5UZXN0U2NlbmFyaW9HcmFwaERlY29yYXRvcjE7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsLmxhYmVscy5UZXN0SW50ZWdlckxhYmVsVmFsdWU7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gQSB0ZXN0IGNhc2UgZm9yIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5TY2VuYXJpbzwvYj48L2VtPicuCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIDxwPgorICogVGhlIGZvbGxvd2luZyBvcGVyYXRpb25zIGFyZSB0ZXN0ZWQ6CisgKiA8dWw+CisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNjZW5hcmlvLlNjZW5hcmlvI3N0ZXAoKSA8ZW0+U3RlcDwvZW0+fTwvbGk+CisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNjZW5hcmlvLlNjZW5hcmlvI3Jlc2V0KCkgPGVtPlJlc2V0PC9lbT59PC9saT4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2NlbmFyaW8uU2NlbmFyaW8jaW5pdGlhbGl6ZSgpIDxlbT5Jbml0aWFsaXplPC9lbT59PC9saT4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2NlbmFyaW8uU2NlbmFyaW8jcHJvZHVjZVRpdGxlKCkgPGVtPlByb2R1Y2UgVGl0bGU8L2VtPn08L2xpPgorICogPC91bD4KKyAqIDwvcD4KKyAqIEBnZW5lcmF0ZWQKKyAqLworQFN1cHByZXNzV2FybmluZ3MoImFsbCIpCitwdWJsaWMgY2xhc3MgU2NlbmFyaW9UZXN0IGV4dGVuZHMgSWRlbnRpZmlhYmxlVGVzdCB7CisKKwkvKioKKwkgKiBUaGlzIGlzIHRoZSB0aXRsZSBvZiB0aGUgdGVzdCBzY2VuYXJpby4KKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBURVNUX1NDRU5BUklPX1RJVExFID0gIlRlc3QgU2NlbmFyaW8gIzEiOworCisJQFN1cHByZXNzV2FybmluZ3MoInVudXNlZCIpCisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgVVJJIFNDRU5BUklPX1NFUklBTFpBVElPTl9URVNUX1VSSSA9IFVSSQorCQkJLmNyZWF0ZVVSSSgidGVtcC90ZXN0c2NlbmFyaW8xLnNjZW5hcmlvIik7CisKKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBVUkkgQ0FOT05JQ0FMX0dSQVBIX1NFUklBTFpBVElPTl9URVNUX1VSSSA9IFVSSQorCQkJLmNyZWF0ZVVSSSgidGVtcC90ZXN0Y2Fub25pY2FsZ3JhcGgxLmdyYXBoIik7CisKKwkvLyBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgU0NFTkFSSU8gPSAic2NlbmFyaW8iOworCisJLyoqCisJICogVGhpcyBpcyB0aGUgVVJJIHRoYXQgd2lsbCBiZSB0aGUgSWRlbnRpZmllciBvZiB0aGUgc2NlbmFyaW8KKwkgKi8KKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBVUkkgU0NFTkFSSU9fVVJJID0gVVJJLmNyZWF0ZVVSSSgicGxhdGZvcm06L3BsdWdpbi8iCisJCQkrIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS50ZXN0cy5BY3RpdmF0b3IuUExVR0lOX0lECisJCQkrICIvZGF0YS9zY2VuYXJpb3MvYmFzaWMvdGVzdHNjZW5hcmlvMS5zY2VuYXJpbyIpOworCQorCS8qKgorCSAqIFVSSSBmb3IgdGhlIFNlcXVlbmNlciBpbiB0aGUgU2NlbmFyaW8KKwkgKi8KKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBVUkkgU0VRVUVOQ0VSX1VSSSA9IFVSSS5jcmVhdGVVUkkoIlNFUVVFTkNFUi9zZXF1ZW5jZXIxLnNlcXVlbmNlciIpOworCisJLyoqCisJICogVVJJIGZvciB0aGUgRGVjb3JhdG9yIGluIHRoZSB0ZXN0IHNjZW5hcmlvCisJICovCisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgVVJJIERFQ09SQVRPUl9VUkkgPSBVUkkuY3JlYXRlVVJJKCJkZWNvcmF0b3IvZGVjb3JhdG9yMS5kZWNvcmF0b3IiKTsKKwkJCisJCisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgVVJJIENBTk9OSUNBTF9HUkFQSF9fVVJJID0gU1RFTVVSSQorCQkJLmNyZWF0ZVVSSSgiR1JBUEgvdGVzdGNhbm9uaWNhbGdyYXBoIik7CisJCisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgeworCQlUZXN0UnVubmVyLnJ1bihTY2VuYXJpb1Rlc3QuY2xhc3MpOworCX0KKworCS8qKgorCSAqIENvbnN0cnVjdHMgYSBuZXcgU2NlbmFyaW8gdGVzdCBjYXNlIHdpdGggdGhlIGdpdmVuIG5hbWUuIDwhLS0KKwkgKiBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBTY2VuYXJpb1Rlc3QoU3RyaW5nIG5hbWUpIHsKKwkJc3VwZXIobmFtZSk7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgZml4dHVyZSBmb3IgdGhpcyBTY2VuYXJpbyB0ZXN0IGNhc2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIFNjZW5hcmlvIGdldEZpeHR1cmUoKSB7CisJCXJldHVybiAoU2NlbmFyaW8pZml4dHVyZTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAc2VlIGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZSNzZXRVcCgpCisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgdm9pZCBzZXRVcCgpIHRocm93cyBFeGNlcHRpb24geworCQkKKwkJLy8gc2V0IHVwIGZvciB0aGUgdW5pdCB0ZXN0cworCQlzZXRGaXh0dXJlKGNyZWF0ZUZpeHR1cmUoKSk7CisJfSAvLyBzZXRVcAorCisJLyoqCisJICogCisJICogQHBhcmFtIHNjZW5hcmlvRm9sZGVyCisJICogQHJldHVybgorCSAqLworCXB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldFNjZW5hcmlvTmFtZShTdHJpbmcgc2NlbmFyaW9Gb2xkZXIpICB7CisJCWludCBpZHgxID0gc2NlbmFyaW9Gb2xkZXIuaW5kZXhPZigic2NlbmFyaW9zIik7CisJCWludCBpZHgyID0gc2NlbmFyaW9Gb2xkZXIuaW5kZXhPZigiLnNjZW5hcmlvIik7CisJCWlkeDErPTEwOworCQlTdHJpbmcgbmFtZSA9IHNjZW5hcmlvRm9sZGVyLnN1YnN0cmluZyhpZHgxLGlkeDIpOworCQlyZXR1cm4gbmFtZTsJCisJfQorCQorCQorCS8qKgorCSAqIEByZXR1cm4gYSBzY2VuYXJpbworCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJcHVibGljIHN0YXRpYyBTY2VuYXJpbyBjcmVhdGVGaXh0dXJlKCkgeworCQlmaW5hbCBTY2VuYXJpbyBzY2VuYXJpbyA9IFNjZW5hcmlvRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlU2NlbmFyaW8oKTsKKwkJc2NlbmFyaW8uc2V0TW9kZWwoTW9kZWxUZXN0LmNyZWF0ZUZpeHR1cmUoKSk7CisJCXNjZW5hcmlvLnNldFNlcXVlbmNlcihnZXRUZXN0U2VxdWVuY2VyKCkpOworCQlzY2VuYXJpby5zZXRVUkkoU0NFTkFSSU9fVVJJKTsKKwkJZmluYWwgRGVjb3JhdG9yIGRlY29yYXRvciA9IERlY29yYXRvcnNGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVUZXN0U2NlbmFyaW9HcmFwaERlY29yYXRvcjEoKTsKKwkJZGVjb3JhdG9yLnNldFVSSShERUNPUkFUT1JfVVJJKTsKKwkJc2NlbmFyaW8uZ2V0U2NlbmFyaW9EZWNvcmF0b3JzKCkuYWRkKGRlY29yYXRvcik7CisJCXNjZW5hcmlvLmdldER1YmxpbkNvcmUoKS5wb3B1bGF0ZSgpOworCQlzY2VuYXJpby5nZXREdWJsaW5Db3JlKCkuc2V0VGl0bGUoVEVTVF9TQ0VOQVJJT19USVRMRSk7CisJCQorCQkKKwkJLy9zY2VuYXJpby5pbml0aWFsaXplKCk7CisJCQorCQlTb2x2ZXIgc29sdmVyID0gRmRGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVGaW5pdGVEaWZmZXJlbmNlKCk7CisJCXNvbHZlci5zZXREZWNvcmF0b3JzKHNjZW5hcmlvLmdldFNjZW5hcmlvRGVjb3JhdG9ycygpKTsKKwkJc2NlbmFyaW8uc2V0U29sdmVyKHNvbHZlcik7CisJCQorCQkvLyBQYXJ0aXRpb25lcgorCQlzb2x2ZXIuc2V0UGFydGl0aW9uZXIoR3JhcGhGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVTaW1wbGVHcmFwaFBhcnRpdGlvbmVyKCkpOworCQlyZXR1cm4gc2NlbmFyaW87CisJfSAvLyBjcmVhdGVGaXh0dXJlCisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZSN0ZWFyRG93bigpCisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIHRlYXJEb3duKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCXNldEZpeHR1cmUobnVsbCk7CisJfQorCisJLyoqCisJICogVGVzdHMgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNjZW5hcmlvLlNjZW5hcmlvI2dldENhbm9uaWNhbEdyYXBoKCkgPGVtPkNhbm9uaWNhbCBHcmFwaDwvZW0+fScKKwkgKiBmZWF0dXJlIGdldHRlci4gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2NlbmFyaW8uU2NlbmFyaW8jZ2V0Q2Fub25pY2FsR3JhcGgoKQorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJcHVibGljIHZvaWQgdGVzdEdldENhbm9uaWNhbEdyYXBoKCkgeworCQkvLyBOb3RoaW5nIHRvIHRlc3QKKwkJYXNzZXJ0VHJ1ZSh0cnVlKTsKKwl9IC8vIHRlc3RHZXRDYW5vbmljYWxHcmFwaAorCisJLyoqCisJICogVGVzdHMgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNjZW5hcmlvLlNjZW5hcmlvI3N0ZXAoKSA8ZW0+U3RlcDwvZW0+fScKKwkgKiBvcGVyYXRpb24uIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNjZW5hcmlvLlNjZW5hcmlvI3N0ZXAoKQorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJcHVibGljIHZvaWQgdGVzdFN0ZXAoKSB7CisJCWZpbmFsIFNjZW5hcmlvIHNjZW5hcmlvID0gZ2V0Rml4dHVyZSgpOworCQkKKwkJc2NlbmFyaW8uaW5pdGlhbGl6ZSgpOworCQkKKwkJLy8gSGVyZSB3ZSBzaG91bGQgdGVzdCB0aGF0IHRoZSBpbml0aWFsIHZhbHVlcyBvZiB0aGUgZHluYW1pYyBsYWJlbHMgYXJlCisJCS8vIGNvcnJlY3QKKwkJR3JhcGggY2Fub25pY2FsR3JhcGggPSBzY2VuYXJpby5nZXRDYW5vbmljYWxHcmFwaCgpOworCisJCWZvciAoZmluYWwgSXRlcmF0b3IgZHluYW1pY0xhYmVsSXRlciA9IGNhbm9uaWNhbEdyYXBoCisJCQkJLmdldER5bmFtaWNMYWJlbHMoKS5pdGVyYXRvcigpOyBkeW5hbWljTGFiZWxJdGVyLmhhc05leHQoKTspIHsKKwkJCWZpbmFsIER5bmFtaWNMYWJlbCBkeW5hbWljTGFiZWwgPSAoRHluYW1pY0xhYmVsKSBkeW5hbWljTGFiZWxJdGVyCisJCQkJCS5uZXh0KCk7CisJCQlhc3NlcnRUcnVlKCgoVGVzdEludGVnZXJMYWJlbFZhbHVlKSBkeW5hbWljTGFiZWwuZ2V0Q3VycmVudFZhbHVlKCkpCisJCQkJCS5nZXRJKCkgPT0gVGVzdEludGVnZXJMYWJlbFZhbHVlLkNVUlJFTlRfTEFCRUxfSU5URUdFUl9WQUxVRSk7CisJCX0gLy8gZm9yCisKKwkJc2NlbmFyaW8uc3RlcCgpOworCisJCS8vIEhlcmUgd2Ugc2hvdWxkIHRlc3QgdGhhdCB0aGUgdmFsdWVzIG9mIHRoZSBkeW5hbWljIGxhYmVscyBoYXZlCisJCS8vIGNoYW5nZWQKKwkJY2Fub25pY2FsR3JhcGggPSBzY2VuYXJpby5nZXRDYW5vbmljYWxHcmFwaCgpOworCisJCWZvciAoZmluYWwgSXRlcmF0b3IgZHluYW1pY0xhYmVsSXRlciA9IGNhbm9uaWNhbEdyYXBoCisJCQkJLmdldER5bmFtaWNMYWJlbHMoKS5pdGVyYXRvcigpOyBkeW5hbWljTGFiZWxJdGVyLmhhc05leHQoKTspIHsKKwkJCWZpbmFsIER5bmFtaWNMYWJlbCBkeW5hbWljTGFiZWwgPSAoRHluYW1pY0xhYmVsKSBkeW5hbWljTGFiZWxJdGVyCisJCQkJCS5uZXh0KCk7CisJCQlhc3NlcnRUcnVlKCgoVGVzdEludGVnZXJMYWJlbFZhbHVlKSBkeW5hbWljTGFiZWwuZ2V0Q3VycmVudFZhbHVlKCkpCisJCQkJCS5nZXRJKCkgPT0gVGVzdEludGVnZXJMYWJlbFZhbHVlLk5FWFRfTEFCRUxfSU5URUdFUl9WQUxVRSk7CisJCX0gLy8gZm9yCisvLworLy8JCWludCBjb3VudCA9IDE7CisvLwkJZm9yICg7IHNjZW5hcmlvLnN0ZXAoKSAmJiBjb3VudCA8IDExOyBjb3VudCsrKSB7CisvLwkJCS8vIG5vdGhpbmcKKy8vCQl9IC8vIGZvcgorLy8KKy8vCQkvLyBzdGVwKCkgc2hvdWxkIHN0b3AgYmVmb3JlIGNvdW50IG1ha2VzIGl0IHRvIDExCisvLwkJYXNzZXJ0VHJ1ZShjb3VudCA9PSAxMCk7CisJfSAvLyB0ZXN0U3RlcAorCisJLyoqCisJICogVGVzdHMgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNjZW5hcmlvLlNjZW5hcmlvI3Jlc2V0KCkgPGVtPlJlc2V0PC9lbT59JworCSAqIG9wZXJhdGlvbi4gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2NlbmFyaW8uU2NlbmFyaW8jcmVzZXQoKQorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJcHVibGljIHZvaWQgdGVzdFJlc2V0KCkgeworCQlmaW5hbCBTY2VuYXJpbyBzY2VuYXJpbyA9IGdldEZpeHR1cmUoKTsKKworCQlzY2VuYXJpby5pbml0aWFsaXplKCk7CisKKwkJLy8gSGVyZSB3ZSBzaG91bGQgdGVzdCB0aGF0IHRoZSBpbml0aWFsIHZhbHVlcyBvZiB0aGUgZHluYW1pYyBsYWJlbHMgYXJlCisJCS8vIGNvcnJlY3QKKwkJR3JhcGggY2Fub25pY2FsR3JhcGggPSBzY2VuYXJpby5nZXRDYW5vbmljYWxHcmFwaCgpOworCisJCWZvciAoZmluYWwgSXRlcmF0b3IgZHluYW1pY0xhYmVsSXRlciA9IGNhbm9uaWNhbEdyYXBoCisJCQkJLmdldER5bmFtaWNMYWJlbHMoKS5pdGVyYXRvcigpOyBkeW5hbWljTGFiZWxJdGVyLmhhc05leHQoKTspIHsKKwkJCWZpbmFsIER5bmFtaWNMYWJlbCBkeW5hbWljTGFiZWwgPSAoRHluYW1pY0xhYmVsKSBkeW5hbWljTGFiZWxJdGVyCisJCQkJCS5uZXh0KCk7CisJCQlhc3NlcnRUcnVlKCgoVGVzdEludGVnZXJMYWJlbFZhbHVlKSBkeW5hbWljTGFiZWwuZ2V0Q3VycmVudFZhbHVlKCkpCisJCQkJCS5nZXRJKCkgPT0gVGVzdEludGVnZXJMYWJlbFZhbHVlLkNVUlJFTlRfTEFCRUxfSU5URUdFUl9WQUxVRSk7CisJCX0gLy8gZm9yCisKKwkJc2NlbmFyaW8uc3RlcCgpOworCisJCS8vIEhlcmUgd2Ugc2hvdWxkIHRlc3QgdGhhdCB0aGUgdmFsdWVzIG9mIHRoZSBkeW5hbWljIGxhYmVscyBoYXZlCisJCS8vIGNoYW5nZWQKKwkJY2Fub25pY2FsR3JhcGggPSBzY2VuYXJpby5nZXRDYW5vbmljYWxHcmFwaCgpOworCisJCWZvciAoZmluYWwgSXRlcmF0b3IgZHluYW1pY0xhYmVsSXRlciA9IGNhbm9uaWNhbEdyYXBoCisJCQkJLmdldER5bmFtaWNMYWJlbHMoKS5pdGVyYXRvcigpOyBkeW5hbWljTGFiZWxJdGVyLmhhc05leHQoKTspIHsKKwkJCWZpbmFsIER5bmFtaWNMYWJlbCBkeW5hbWljTGFiZWwgPSAoRHluYW1pY0xhYmVsKSBkeW5hbWljTGFiZWxJdGVyCisJCQkJCS5uZXh0KCk7CisJCQlhc3NlcnRUcnVlKCgoVGVzdEludGVnZXJMYWJlbFZhbHVlKSBkeW5hbWljTGFiZWwuZ2V0Q3VycmVudFZhbHVlKCkpCisJCQkJCS5nZXRJKCkgPT0gVGVzdEludGVnZXJMYWJlbFZhbHVlLk5FWFRfTEFCRUxfSU5URUdFUl9WQUxVRSk7CisJCX0gLy8gZm9yCisKKwkJc2NlbmFyaW8ucmVzZXQoKTsKKworCQkvLyBIZXJlIHdlIHNob3VsZCB0ZXN0IHRoYXQgdGhlIHZhbHVlcyBvZiB0aGUgZHluYW1pYyBsYWJlbHMgYXJlIGJhY2sgdG8KKwkJLy8gdGhlaXIgaW5pdGlhbCB2YWx1ZXMuCisJCWNhbm9uaWNhbEdyYXBoID0gc2NlbmFyaW8uZ2V0Q2Fub25pY2FsR3JhcGgoKTsKKworCQlmb3IgKGZpbmFsIEl0ZXJhdG9yIGR5bmFtaWNMYWJlbEl0ZXIgPSBjYW5vbmljYWxHcmFwaAorCQkJCS5nZXREeW5hbWljTGFiZWxzKCkuaXRlcmF0b3IoKTsgZHluYW1pY0xhYmVsSXRlci5oYXNOZXh0KCk7KSB7CisJCQlmaW5hbCBEeW5hbWljTGFiZWwgZHluYW1pY0xhYmVsID0gKER5bmFtaWNMYWJlbCkgZHluYW1pY0xhYmVsSXRlcgorCQkJCQkubmV4dCgpOworCQkJYXNzZXJ0VHJ1ZSgoKFRlc3RJbnRlZ2VyTGFiZWxWYWx1ZSkgZHluYW1pY0xhYmVsLmdldEN1cnJlbnRWYWx1ZSgpKQorCQkJCQkuZ2V0SSgpID09IFRlc3RJbnRlZ2VyTGFiZWxWYWx1ZS5DVVJSRU5UX0xBQkVMX0lOVEVHRVJfVkFMVUUpOworCQl9IC8vIGZvcgorCisJCWFzc2VydEZhbHNlKHNjZW5hcmlvLmdldFNlcXVlbmNlcigpLmlzVGltZVRvU3RvcCgpKTsKKwl9IC8vIHRlc3RSZXNldAorCisJLyoqCisJICogVGVzdHMgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNjZW5hcmlvLlNjZW5hcmlvI2luaXRpYWxpemUoKSA8ZW0+SW5pdGlhbGl6ZTwvZW0+fScKKwkgKiBvcGVyYXRpb24uIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNjZW5hcmlvLlNjZW5hcmlvI2luaXRpYWxpemUoKQorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJcHVibGljIHZvaWQgdGVzdEluaXRpYWxpemUoKSB7CisJCWZpbmFsIFNjZW5hcmlvIHNjZW5hcmlvID0gZ2V0Rml4dHVyZSgpOworCQlzY2VuYXJpby5pbml0aWFsaXplKCk7CisJCS8vIEhlcmUgd2Ugc2hvdWxkIHRlc3QgdGhhdCB0aGUgaW5pdGlhbCB2YWx1ZXMgb2YgdGhlIGR5bmFtaWMgbGFiZWxzIGFyZQorCQkvLyBjb3JyZWN0CisJCUdyYXBoIGNhbm9uaWNhbEdyYXBoID0gc2NlbmFyaW8uZ2V0Q2Fub25pY2FsR3JhcGgoKTsKKworCQlmb3IgKGZpbmFsIEl0ZXJhdG9yIGR5bmFtaWNMYWJlbEl0ZXIgPSBjYW5vbmljYWxHcmFwaAorCQkJCS5nZXREeW5hbWljTGFiZWxzKCkuaXRlcmF0b3IoKTsgZHluYW1pY0xhYmVsSXRlci5oYXNOZXh0KCk7KSB7CisJCQlmaW5hbCBEeW5hbWljTGFiZWwgZHluYW1pY0xhYmVsID0gKER5bmFtaWNMYWJlbCkgZHluYW1pY0xhYmVsSXRlcgorCQkJCQkubmV4dCgpOworCQkJYXNzZXJ0VHJ1ZSgoKFRlc3RJbnRlZ2VyTGFiZWxWYWx1ZSkgZHluYW1pY0xhYmVsLmdldEN1cnJlbnRWYWx1ZSgpKQorCQkJCQkuZ2V0SSgpID09IFRlc3RJbnRlZ2VyTGFiZWxWYWx1ZS5DVVJSRU5UX0xBQkVMX0lOVEVHRVJfVkFMVUUpOworCQl9IC8vIGZvcgorCisJCWFzc2VydEZhbHNlKHNjZW5hcmlvLmdldFNlcXVlbmNlcigpLmlzVGltZVRvU3RvcCgpKTsKKworCQkvLyBMb29rIGZvciB0aGUgZ3JhcGggbGFiZWwgYWRkZWQgYnkgdGhlIFNjZW5hcmlvIGRlY29yYXRvcgorCQlpbnQgY291bnQgPSAwOworCQlmb3IgKEl0ZXJhdG9yIGdyYXBoTGFiZWxJdGVyID0gY2Fub25pY2FsR3JhcGguZ2V0R3JhcGhMYWJlbHMoKS52YWx1ZXMoKQorCQkJCS5pdGVyYXRvcigpOyBncmFwaExhYmVsSXRlci5oYXNOZXh0KCk7KSB7CisJCQlMYWJlbCBncmFwaExhYmVsID0gKExhYmVsKSBncmFwaExhYmVsSXRlci5uZXh0KCk7CisJCQlpZiAod2FzQWRkZWRCeVNjZW5hcmlvRGVjb3JhdG9yKGdyYXBoTGFiZWwpKSB7CisJCQkJY291bnQrKzsKKwkJCX0KKwkJfQorCQlhc3NlcnRUcnVlKGNvdW50ID09IDEpOworCisJfSAvLyB0ZXN0SW5pdGlhbGl6ZQorCisJLyoqCisJICogVGVzdHMgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNjZW5hcmlvLlNjZW5hcmlvI3Byb2R1Y2VUaXRsZSgpIDxlbT5Qcm9kdWNlIFRpdGxlPC9lbT59JworCSAqIG9wZXJhdGlvbi4gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2NlbmFyaW8uU2NlbmFyaW8jcHJvZHVjZVRpdGxlKCkKKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCXB1YmxpYyB2b2lkIHRlc3RQcm9kdWNlVGl0bGUoKSB7CisJCWZpbmFsIFNjZW5hcmlvIHNjZW5hcmlvID0gZ2V0Rml4dHVyZSgpOworCQlmaW5hbCBTdHJpbmcgdGl0bGUgPSBzY2VuYXJpby5wcm9kdWNlVGl0bGUoKTsKKworCQlhc3NlcnRUcnVlKHNjZW5hcmlvLmdldER1YmxpbkNvcmUoKS5nZXRUaXRsZSgpICE9IG51bGwpOworCQlhc3NlcnROb3ROdWxsKHRpdGxlKTsKKwkJYXNzZXJ0RmFsc2UodGl0bGUuZXF1YWxzKCIiKSk7CisJfSAvLyB0ZXN0UHJvZHVjZVRpdGxlCisKKwkvKioKKwkgKiBAcGFyYW0gZ3JhcGhMYWJlbAorCSAqIEByZXR1cm4gdHJ1ZSBpZiB0aGUgZ3JhcGhMYWJlbCB3YXMgYWRkZWQgYnkgYSBzY2VuYXJpbyBkZWNvcmF0b3IKKwkgKi8KKwlwcml2YXRlIGJvb2xlYW4gd2FzQWRkZWRCeVNjZW5hcmlvRGVjb3JhdG9yKExhYmVsIGdyYXBoTGFiZWwpIHsKKwkJYm9vbGVhbiByZXRWYWx1ZSA9IGZhbHNlOworCQlpZiAoZ3JhcGhMYWJlbCBpbnN0YW5jZW9mIER5bmFtaWNMYWJlbCkgeworCQkJRHluYW1pY0xhYmVsIGR5bmFtaWNMYWJlbCA9IChEeW5hbWljTGFiZWwpIGdyYXBoTGFiZWw7CisJCQlyZXRWYWx1ZSA9IGR5bmFtaWNMYWJlbC5nZXRVUkkoKSA9PSBUZXN0U2NlbmFyaW9HcmFwaERlY29yYXRvcjEuTEFCRUxfVVJJOworCQl9CisJCXJldHVybiByZXRWYWx1ZTsKKwl9IC8vIHdhc0FkZGVkQnlTY2VuYXJpb0RlY29yYXRvcgorCisJLyoqCisJICogQ3JlYXRlIGFuIGluc3RhbmNlIG9mIFNURU1UaW1lCisJICogCisJICogQHJldHVybiB0aGUgaW5zdGFuY2UKKwkgKi8KKwlwcml2YXRlIHN0YXRpYyBTVEVNVGltZSBjcmVhdGVTVEVNVGltZShmaW5hbCBpbnQgeWVhciwgZmluYWwgaW50IG1vbnRoLAorCQkJZmluYWwgaW50IGRheSkgeworCQlmaW5hbCBTVEVNVGltZSByZXRWYWx1ZSA9IE1vZGVsRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlU1RFTVRpbWUoKTsKKwkKKwkJZmluYWwgQ2FsZW5kYXIgY2FsZW5kYXIgPSBDYWxlbmRhci5nZXRJbnN0YW5jZSgpOworCQljYWxlbmRhci5zZXQoeWVhciwgbW9udGgsIGRheSk7CisJCXJldFZhbHVlLnNldFRpbWUoY2FsZW5kYXIuZ2V0VGltZSgpKTsKKwkJcmV0dXJuIHJldFZhbHVlOworCX0gLy8gY3JlYXRlU1RFTVRpbWUKKworCS8qKgorCSAqIFRlc3QgdGhlIFNjZW5hcmlvIGhhcyB0aGUgcmlnaHQgdHlwZSBVUkkuCisJICogCisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlwdWJsaWMgdm9pZCB0ZXN0R2V0VHlwZVVSSSgpIHsKKwkJZmluYWwgU2NlbmFyaW8gc2NlbmFyaW8gPSBnZXRGaXh0dXJlKCk7CisJCWFzc2VydFRydWUoc2NlbmFyaW8uZ2V0VHlwZVVSSSgpLmVxdWFscyhTVEVNVVJJLlNDRU5BUklPX1RZUEVfVVJJKSk7CisJfSAvLyB0ZXN0R2V0VHlwZVVSSQorCisJLyoqCisJICogVGVzdCB0aGUgYWJpbGl0eSB0byBzZXJpYWxpemUgYSBzY2VuYXJpbyBhbmQgdGhlbiBkZS1zZXJpYWxpemUgaXQuCisJICovCisJLy8gcHVibGljIHZvaWQgdGVzdFNlcmlhbGl6ZURlc2VyaWFsaXplU2NlbmFyaW8oKSB7CisJLy8gZmluYWwgU2NlbmFyaW8gc2NlbmFyaW8gPSBnZXRGaXh0dXJlKCk7CisJLy8gc2VyaWFsaXplRGVzZXJpYWxpemVTY2VuYXJpbyhzY2VuYXJpbywgU0NFTkFSSU9fU0VSSUFMWkFUSU9OX1RFU1RfVVJJKTsKKwkvLyB9IC8vIHRlc3RTZXJpYWxpemVEZXNlcmlhbGl6ZVNjZW5hcmlvCisJLyoqCisJICogVGVzdCB0aGUgYWJpbGl0eSB0byBzZXJpYWxpemUgYSBzY2VuYXJpbyBhbmQgdGhlbiBkZS1zZXJpYWxpemUgaXQuCisJICovCisJcHVibGljIHZvaWQgdGVzdFNlcmlhbGl6ZURlc2VyaWFsaXplQ2Fub25pY2FsR3JhcGgoKSB7CisJCWZpbmFsIFNjZW5hcmlvIHNjZW5hcmlvID0gZ2V0Rml4dHVyZSgpOworCQlTVEVNVGltZSBub3cgPSBNb2RlbEZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZVNURU1UaW1lKCk7CisJCWZpbmFsIEdyYXBoIGNhbm9uaWNhbEdyYXBoID0gc2NlbmFyaW8uZ2V0TW9kZWwoKS5nZXRDYW5vbmljYWxHcmFwaCgKKwkJCQlDQU5PTklDQUxfR1JBUEhfX1VSSSwgbmV3IElkZW50aWZpYWJsZUZpbHRlckltcGwoc2NlbmFyaW8uZ2V0TW9kZWwoKS5nZXREdWJsaW5Db3JlKCkuZ2V0Q292ZXJhZ2UoKSksIG5vdyk7CisJCXRyeSB7CisJCQlVdGlsaXR5LnNlcmlhbGl6ZUlkZW50aWZpYWJsZShjYW5vbmljYWxHcmFwaCwKKwkJCQkJQ0FOT05JQ0FMX0dSQVBIX1NFUklBTFpBVElPTl9URVNUX1VSSSk7CisKKwkJCWZpbmFsIFJlc291cmNlU2V0IHJlc291cmNlU2V0ID0gbmV3IFJlc291cmNlU2V0SW1wbCgpOworCQkJZmluYWwgUmVzb3VyY2UgcmVzb3VyY2UgPSByZXNvdXJjZVNldC5nZXRSZXNvdXJjZSgKKwkJCQkJQ0FOT05JQ0FMX0dSQVBIX1NFUklBTFpBVElPTl9URVNUX1VSSSwgdHJ1ZSk7CisKKwkJCXJlc291cmNlLmxvYWQobnVsbCk7CisJCQlmaW5hbCBHcmFwaCBkZXNlcmlhbGl6ZWRHcmFwaCA9IChHcmFwaCkgcmVzb3VyY2UuZ2V0Q29udGVudHMoKS5nZXQoCisJCQkJCTApOworCQkJYXNzZXJ0Tm90TnVsbChkZXNlcmlhbGl6ZWRHcmFwaCk7CisJCQlhc3NlcnRUcnVlKGNhbm9uaWNhbEdyYXBoLmdldE51bUVkZ2VzKCkgPT0gZGVzZXJpYWxpemVkR3JhcGgKKwkJCQkJLmdldE51bUVkZ2VzKCkpOworCQkJYXNzZXJ0VHJ1ZShjYW5vbmljYWxHcmFwaC5nZXROdW1Ob2RlcygpID09IGRlc2VyaWFsaXplZEdyYXBoCisJCQkJCS5nZXROdW1Ob2RlcygpKTsKKwkJCWFzc2VydFRydWUoY2Fub25pY2FsR3JhcGguZ2V0TnVtRHluYW1pY0xhYmVscygpID09IGRlc2VyaWFsaXplZEdyYXBoCisJCQkJCS5nZXROdW1EeW5hbWljTGFiZWxzKCkpOworCQkJYXNzZXJ0VHJ1ZShjYW5vbmljYWxHcmFwaC5nZXROdW1HcmFwaExhYmVscygpID09IGRlc2VyaWFsaXplZEdyYXBoCisJCQkJCS5nZXROdW1HcmFwaExhYmVscygpKTsKKwkJCWFzc2VydFRydWUoY2Fub25pY2FsR3JhcGguZ2V0TnVtTm9kZUxhYmVscygpID09IGRlc2VyaWFsaXplZEdyYXBoCisJCQkJCS5nZXROdW1Ob2RlTGFiZWxzKCkpOworCisJCX0gY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKKwkJCWZhaWwoZS5nZXRNZXNzYWdlKCkpOworCQl9IC8vIGNhdGNoCisJCWNhdGNoIChOdWxsUG9pbnRlckV4Y2VwdGlvbiBucGUpIHsKKwkJCW5wZS5wcmludFN0YWNrVHJhY2UoKTsKKwkJCWZhaWwobnBlLmdldE1lc3NhZ2UoKSk7CisJCX0gLy8gbnVsbCBwb2ludGVyIGV4Y2VwdGlvbgorCQljYXRjaCAoRXhjZXB0aW9uIGUpIHsKKwkJCWZhaWwoZS5nZXRNZXNzYWdlKCkpOworCQl9IGZpbmFsbHkgeworCQkJLy8gUmVtb3ZlIHRoZSBzZXJpYWxpemVkIGZpbGUKKwkJCS8vIElGaWxlIHNlcmFsaXplRmlsZSA9CisJCX0KKwl9IC8vIHRlc3RTZXJpYWxpemVEZXNlcmlhbGl6ZUNhbm9uaWNhbEdyYXBoCisKKwkvKioKKwkgKiBUZXN0IHRoZSBwcm9jZXNzIG9mIHNlcmlhbGl6aW5nIGFuZCBkZS1zZXJpYWxpemluZyBhIHNjZW5hcmlvCisJICogCisJICogQHBhcmFtIHNjZW5hcmlvCisJICogICAgICAgICAgICB0aGUgc2NlbmFyaW8gdG8gdGVzdAorCSAqIEBwYXJhbSB1cmkKKwkgKiAgICAgICAgICAgIHdoZXJlIHRvIGRvIHRoZSB0ZXN0CisJICovCisJcHVibGljIHN0YXRpYyB2b2lkIHNlcmlhbGl6ZURlc2VyaWFsaXplU2NlbmFyaW8oZmluYWwgU2NlbmFyaW8gc2NlbmFyaW8sCisJCQlmaW5hbCBVUkkgdXJpKSB7CisJCXRyeSB7CisJCQlVdGlsaXR5LnNlcmlhbGl6ZUlkZW50aWZpYWJsZShzY2VuYXJpbywgdXJpKTsKKworCQkJZmluYWwgUmVzb3VyY2VTZXQgcmVzb3VyY2VTZXQgPSBuZXcgUmVzb3VyY2VTZXRJbXBsKCk7CisJCQlmaW5hbCBSZXNvdXJjZSByZXNvdXJjZSA9IHJlc291cmNlU2V0LmdldFJlc291cmNlKHVyaSwgdHJ1ZSk7CisKKwkJCXJlc291cmNlLmxvYWQobnVsbCk7CisJCQlmaW5hbCBTY2VuYXJpbyBkZXNlcmlhbGl6ZWRTY2VuYXJpbyA9IChTY2VuYXJpbykgcmVzb3VyY2UKKwkJCQkJLmdldENvbnRlbnRzKCkuZ2V0KDApOworCQkJYXNzZXJ0Tm90TnVsbChkZXNlcmlhbGl6ZWRTY2VuYXJpbyk7CisJCX0gY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKKwkJCWZhaWwoZS5nZXRNZXNzYWdlKCkpOworCQl9IC8vIGNhdGNoCisJCWNhdGNoIChOdWxsUG9pbnRlckV4Y2VwdGlvbiBucGUpIHsKKwkJCWZhaWwobnBlLmdldE1lc3NhZ2UoKSk7CisJCX0gLy8gbnVsbCBwb2ludGVyIGV4Y2VwdGlvbgorCQljYXRjaCAoRXhjZXB0aW9uIGUpIHsKKwkJCWZhaWwoZS5nZXRNZXNzYWdlKCkpOworCQl9CisJfSAvLyBzZXJpYWxpemVEZXNlcmlhbGl6ZVNjZW5hcmlvCisKKwkvKioKKwkgKiBAcmV0dXJuIGEgPGNvZGU+U2VxdWVuY2VyPC9jb2RlPiBmb3IgdGVzdGluZy4KKwkgKi8KKwlwcml2YXRlIHN0YXRpYyBTZXF1ZW5jZXIgZ2V0VGVzdFNlcXVlbmNlcigpIHsKKwkJZmluYWwgU2VxdWVuY2VyIHJldFZhbHVlID0gbmV3IFNlcXVlbmNlckltcGwoKSB7IAorCisJCQlwcm90ZWN0ZWQgbG9uZyB0aW1lSW5jcmVtZW50ID0gU1RFTVRpbWUuVW5pdHMuREFZLmdldE1pbGxpc2Vjb25kcygpOworCisJCQkvKioKKwkJCSAqIFRoaXMgaXMgYW4gYWNjdW11bGF0b3Igb2YgdGhlIHdvcmsgaW5jcmVtZW50IHRoYXQga2VlcHMgYWNjb3VudCBvZiAKKwkJCSAqIHRoZSBmcmFjdGlvbiBvZiB0aGUgd29yayBpbmNyZW1lbnRzIHVudGlsIHRoZXkgZXhjZWVkIDEuMAorCQkJICovCisJCQlwcml2YXRlIGRvdWJsZSB3b3JrSW5jcmVtZW50UnVubmluZ1RvdGFsID0gMC4wOworCisKKwkJCXB1YmxpYyBsb25nIGdldFRpbWVJbmNyZW1lbnQoKSB7CisJCQkJcmV0dXJuIHRpbWVJbmNyZW1lbnQ7CisJCQl9CisJCQkKKwkJCS8qKgorCQkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2NlbmFyaW8uaW1wbC5TZXF1ZW5jZXJJbXBsI2dldE5leHRUaW1lKCkKKwkJCSAqLworCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgU1RFTVRpbWUgZ2V0TmV4dFRpbWUoKSB7CisJCQkJc2V0Q3VycmVudFRpbWUoZ2V0Q3VycmVudFRpbWUoKS5hZGRJbmNyZW1lbnQoZ2V0VGltZUluY3JlbWVudCgpKSk7CisJCQkJc2V0V29ya0NvbXBsZXRlKE1hdGgubWluKGdldFdvcmtDb21wbGV0ZSgpICsgZ2V0V29ya0luY3JlbWVudCgpLCAxMDApKTsKKwkJCQlyZXR1cm4gZ2V0Q3VycmVudFRpbWUoKTsKKwkJCX0KKworCQkJLyoqCisJCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zY2VuYXJpby5pbXBsLlNlcXVlbmNlckltcGwjZ2V0VGltZURlbHRhKCkKKwkJCSAqLworCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgbG9uZyBnZXRUaW1lRGVsdGEoKSB7CisJCQkJcmV0dXJuIHN1cGVyLmdldFRpbWVEZWx0YSgpOworCQkJfQorCisJCQkvKioKKwkJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNjZW5hcmlvLmltcGwuU2VxdWVuY2VySW1wbCNnZXRXb3JrSW5jcmVtZW50KCkKKwkJCSAqLworCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgaW50IGdldFdvcmtJbmNyZW1lbnQoKSB7CisJCQkJaW50IHJldFZhbHVlID0gMDsKKwkJCQkvLyBJcyB0aGVyZSBhIHdvcmsgaW5jcmVtZW50PworCQkJCWlmIChnZXREdXJhdGlvbigpICE9IFVOS05PV05fRFVSQVRJT04pIHsKKwkJCQkJLy8gWWVzCisJCQkJCS8vIFRoZSB3b3JrIGluY3JlbWVudCBjb3VsZCBiZSBmcmFjdGlvbmFsICg8MS4wKS4gSWYgc28gdGhlbiBpdCB3aWxsCisJCQkJCS8vIG5vdCBhY2N1bXVsYXRlIGluIHRoZSBwcm9ncmVzcyBtb25pdG9yLiBTbywgd2Uga2VlcCBhIHJ1bm5pbmcgc3VtCisJCQkJCS8vIG9mIHRoZSB3b3JrIGluY3JlbWVudCBhbmQgd2hlbiBpdCBleGNlZWRzIDEuMCB3ZSByZXR1cm4gdGhlIHZhbHVlIGxlc3MKKwkJCQkJLy8gdGhlIGZyYWN0aW9uYWwgcGFydCBhbmQga2VlcCB0aGF0IGZvciB0aGUgZnV0dXJlLgorCQkJCQl3b3JrSW5jcmVtZW50UnVubmluZ1RvdGFsICs9IDEwMC4wICogZ2V0VGltZUluY3JlbWVudCgpCisJCQkJCQkJLyBnZXREdXJhdGlvbigpOworCQkJCQkKKwkJCQkJLy8gRG8gd2UgaGF2ZSBtb3JlIHRoYW4gMS4wPworCQkJCQlpZiAod29ya0luY3JlbWVudFJ1bm5pbmdUb3RhbCA+PSAxLjApIHsKKwkJCQkJCS8vIFllcworCQkJCQkJLy8kQU5BTFlTSVMtSUdOT1JFCisJCQkJCQlyZXRWYWx1ZSA9IChpbnQpd29ya0luY3JlbWVudFJ1bm5pbmdUb3RhbDsKKwkJCQkJCXdvcmtJbmNyZW1lbnRSdW5uaW5nVG90YWwgLT0gcmV0VmFsdWU7CisJCQkJCX0KKwkJCQl9CisKKwkJCQlyZXR1cm4gcmV0VmFsdWU7CisJCQl9CisKKwkJCS8qKgorCQkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2NlbmFyaW8uaW1wbC5TZXF1ZW5jZXJJbXBsI2lzVGltZVRvU3RvcCgpCisJCQkgKi8KKwkJCUBPdmVycmlkZQorCQkJcHVibGljIGJvb2xlYW4gaXNUaW1lVG9TdG9wKCkgeworCQkJCWJvb2xlYW4gcmV0VmFsdWUgPSBmYWxzZTsKKwkJCQkvLyBJcyB0aGVyZSBhbiBlbmQgdGltZT8KKwkJCQlpZiAoZ2V0RW5kVGltZSgpICE9IG51bGwpIHsKKwkJCQkJLy8gWWVzCisJCQkJCXJldFZhbHVlID0gZ2V0Q3VycmVudFRpbWUoKS5nZXRUaW1lKCkuYWZ0ZXIoZ2V0RW5kVGltZSgpLmdldFRpbWUoKSk7CisJCQkJfQorCQkJCXJldHVybiByZXRWYWx1ZTsKKwkJCX0KKworCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgaW50IGdldEN5Y2xlKCkgeworCQkJCXJldHVybiAwOworCQkJfQorCisJCQkKKwkJfTsKKwkJcmV0VmFsdWUuc2V0U3RhcnRUaW1lKGNyZWF0ZVNURU1UaW1lKDIwMDAsIDAxLCAwMSkpOworCQlyZXRWYWx1ZS5nZXRDdXJyZW50VGltZSgpOworCQlyZXRWYWx1ZS5zZXRFbmRUaW1lKGNyZWF0ZVNURU1UaW1lKDIwMDAsIDAxLCAxMCkpOworCQlyZXRWYWx1ZS5zZXRVUkkoU0VRVUVOQ0VSX1VSSSk7CisJCXJldHVybiByZXRWYWx1ZTsKKwl9IC8vIGdldFRlc3RTZXF1ZW5jZXIKKwkKK30gLy8gU2NlbmFyaW9UZXN0CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9zY2VuYXJpby90ZXN0cy9TY2VuYXJpb1Rlc3RzLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9zY2VuYXJpby90ZXN0cy9TY2VuYXJpb1Rlc3RzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWY0NjNmMQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3NjZW5hcmlvL3Rlc3RzL1NjZW5hcmlvVGVzdHMuamF2YQpAQCAtMCwwICsxLDU0IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zY2VuYXJpby50ZXN0czsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdDsKK2ltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdFN1aXRlOworaW1wb3J0IGp1bml0LnRleHR1aS5UZXN0UnVubmVyOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiBBIHRlc3Qgc3VpdGUgZm9yIHRoZSAnPGVtPjxiPnNjZW5hcmlvPC9iPjwvZW0+JyBwYWNrYWdlLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBTY2VuYXJpb1Rlc3RzIGV4dGVuZHMgVGVzdFN1aXRlIHsKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CisJCVRlc3RSdW5uZXIucnVuKHN1aXRlKCkpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlwdWJsaWMgc3RhdGljIFRlc3Qgc3VpdGUoKSB7CisJCVRlc3RTdWl0ZSBzdWl0ZSA9IG5ldyBTY2VuYXJpb1Rlc3RzKCJzY2VuYXJpbyBUZXN0cyIpOyAvLyROT04tTkxTLTEkCisJCXN1aXRlLmFkZFRlc3RTdWl0ZShTY2VuYXJpb1Rlc3QuY2xhc3MpOworCQlyZXR1cm4gc3VpdGU7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFNjZW5hcmlvVGVzdHMoU3RyaW5nIG5hbWUpIHsKKwkJc3VwZXIobmFtZSk7CisJfQorCit9IC8vU2NlbmFyaW9UZXN0cwpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvc2VxdWVuY2VyL3Rlc3RzL1JlYWxUaW1lU2VxdWVuY2VyVGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvc2VxdWVuY2VyL3Rlc3RzL1JlYWxUaW1lU2VxdWVuY2VyVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdiZWIwMjgKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9zZXF1ZW5jZXIvdGVzdHMvUmVhbFRpbWVTZXF1ZW5jZXJUZXN0LmphdmEKQEAgLTAsMCArMSwxNTUgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNlcXVlbmNlci50ZXN0czsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqdW5pdC50ZXh0dWkuVGVzdFJ1bm5lcjsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5VUkk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLlNURU1UaW1lOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zZXF1ZW5jZXIuUmVhbFRpbWVTZXF1ZW5jZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNlcXVlbmNlci5TZXF1ZW5jZXJGYWN0b3J5OworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IEEgdGVzdCBjYXNlIGZvciB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+UmVhbCBUaW1lIFNlcXVlbmNlcjwvYj48L2VtPicuCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBnZW5lcmF0ZWQKKyAqLworQFN1cHByZXNzV2FybmluZ3MoImFsbCIpCitwdWJsaWMgY2xhc3MgUmVhbFRpbWVTZXF1ZW5jZXJUZXN0IGV4dGVuZHMgU2VxdWVudGlhbFNlcXVlbmNlclRlc3QgeworCQorCXByaXZhdGUgc3RhdGljIGZpbmFsIGxvbmcgUkVBTF9USU1FX1RJTUVfSU5DUkVNRU5UID0gU1RFTVRpbWUuVW5pdHMuU0VDT05ELmdldE1pbGxpc2Vjb25kcygpOworCisJLy8gU2VxdWVuY2VyIFVSSQorCXByaXZhdGUgc3RhdGljIGZpbmFsIFVSSSBTRVFVRU5DRVJfVVJJID0gVVJJLmNyZWF0ZVVSSSgicGxhdGZvcm06L3BsdWdpbi8iCisJCQkrIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS50ZXN0cy5BY3RpdmF0b3IuUExVR0lOX0lECisJCQkrICIvZGF0YS9zZXF1ZW5jZXJzL2Jhc2ljL3Rlc3RSZWFsVGltZVNlcXVlbmNlcjEuc2VxdWVuY2VyIik7CisJCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKKwkJVGVzdFJ1bm5lci5ydW4oUmVhbFRpbWVTZXF1ZW5jZXJUZXN0LmNsYXNzKTsKKwl9CisKKwkvKioKKwkgKiBDb25zdHJ1Y3RzIGEgbmV3IFJlYWwgVGltZSBTZXF1ZW5jZXIgdGVzdCBjYXNlIHdpdGggdGhlIGdpdmVuIG5hbWUuIDwhLS0KKwkgKiBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBSZWFsVGltZVNlcXVlbmNlclRlc3QoU3RyaW5nIG5hbWUpIHsKKwkJc3VwZXIobmFtZSk7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgZml4dHVyZSBmb3IgdGhpcyBSZWFsIFRpbWUgU2VxdWVuY2VyIHRlc3QgY2FzZS4gPCEtLQorCSAqIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIFJlYWxUaW1lU2VxdWVuY2VyIGdldEZpeHR1cmUoKSB7CisJCXJldHVybiAoUmVhbFRpbWVTZXF1ZW5jZXIpZml4dHVyZTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAc2VlIGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZSNzZXRVcCgpCisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBzZXRVcCgpIHRocm93cyBFeGNlcHRpb24geworCQlzZXRGaXh0dXJlKGNyZWF0ZUZpeHR1cmUoKSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2UjdGVhckRvd24oKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgdm9pZCB0ZWFyRG93bigpIHRocm93cyBFeGNlcHRpb24geworCQlzZXRGaXh0dXJlKG51bGwpOworCX0KKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNlcXVlbmNlci50ZXN0cy5TZXF1ZW50aWFsU2VxdWVuY2VyVGVzdCN0ZXN0R2V0V29ya0NvbXBsZXRlKCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCB0ZXN0R2V0V29ya0NvbXBsZXRlKCkgeworCQkvLyBmaW5hbCBSZWFsVGltZVNlcXVlbmNlciBmaXh0dXJlID0gZ2V0Rml4dHVyZSgpOworCQlhc3NlcnRUcnVlKHRydWUpOworCX0KKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNlcXVlbmNlci50ZXN0cy5TZXF1ZW50aWFsU2VxdWVuY2VyVGVzdCN0ZXN0R2V0V29ya0luY3JlbWVudCgpCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgdGVzdEdldFdvcmtJbmNyZW1lbnQoKSB7CisJCS8vIGZpbmFsIFJlYWxUaW1lU2VxdWVuY2VyIGZpeHR1cmUgPSBnZXRGaXh0dXJlKCk7CisJCWFzc2VydFRydWUodHJ1ZSk7CisJfQorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2VxdWVuY2VyLnRlc3RzLlNlcXVlbnRpYWxTZXF1ZW5jZXJUZXN0I3Rlc3RHZXREdXJhdGlvbigpCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgdGVzdEdldER1cmF0aW9uKCkgeworCQkvLyBmaW5hbCBSZWFsVGltZVNlcXVlbmNlciBmaXh0dXJlID0gZ2V0Rml4dHVyZSgpOworCQlhc3NlcnRUcnVlKHRydWUpOworCX0KKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNlcXVlbmNlci50ZXN0cy5TZXF1ZW50aWFsU2VxdWVuY2VyVGVzdCN0ZXN0R2V0TmV4dFRpbWUoKQorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIHRlc3RHZXROZXh0VGltZSgpIHsKKwkJLy8gVGhpcyBpcyBhIGJpdCBoYXJkIHRvIHRlc3QgZ2l2ZW4gdGhhdCB0aGUgdmFsdWUgcmV0dXJuZWQgYnkgCisJCS8vIGdldE5leHRUaW1lKCkgY2FuIHZhcnkuCisvLwkJIGZpbmFsIFJlYWxUaW1lU2VxdWVuY2VyIGZpeHR1cmUgPSBnZXRGaXh0dXJlKCk7CisvLwkJIGZpbmFsIFNURU1UaW1lIG5leHRUaW1lID0gZml4dHVyZS5nZXROZXh0VGltZSgpOworCQlhc3NlcnRUcnVlKHRydWUpOworCX0gLy8gdGVzdEdldE5leHRUaW1lCisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zZXF1ZW5jZXIudGVzdHMuU2VxdWVudGlhbFNlcXVlbmNlclRlc3QjdGVzdElzVGltZVRvU3RvcCgpCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgdGVzdElzVGltZVRvU3RvcCgpIHsKKwkJLy8gZmluYWwgUmVhbFRpbWVTZXF1ZW5jZXIgZml4dHVyZSA9IGdldEZpeHR1cmUoKTsKKwkJYXNzZXJ0VHJ1ZSh0cnVlKTsKKwl9CisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zZXF1ZW5jZXIudGVzdHMuU2VxdWVudGlhbFNlcXVlbmNlclRlc3QjdGVzdFJlc2V0KCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCB0ZXN0UmVzZXQoKSB7CisJCS8vIGZpbmFsIFJlYWxUaW1lU2VxdWVuY2VyIGZpeHR1cmUgPSBnZXRGaXh0dXJlKCk7CisJCWFzc2VydFRydWUodHJ1ZSk7CisJfSAvLyB0ZXN0UmVzZXQKKworCS8qKgorCSAqIEByZXR1cm4gYW4gaW5zdGFuY2Ugb2Yge0BsaW5rIFJlYWxUaW1lU2VxdWVuY2VyfSBmb3IgdGVzdGluZyBwdXJwb3Nlcy4KKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIFJlYWxUaW1lU2VxdWVuY2VyIGNyZWF0ZUZpeHR1cmUoKSB7CisJCWZpbmFsIFJlYWxUaW1lU2VxdWVuY2VyIHJldFZhbHVlID0gU2VxdWVuY2VyRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlUmVhbFRpbWVTZXF1ZW5jZXIoKTsKKwkJCisJCXJldFZhbHVlLnNldFRpbWVJbmNyZW1lbnQoUkVBTF9USU1FX1RJTUVfSU5DUkVNRU5UKTsKKwkJcmV0VmFsdWUuc2V0VVJJKFNFUVVFTkNFUl9VUkkpOworCQkKKwkJcmV0dXJuIHJldFZhbHVlOworCX0gLy8gY3JlYXRlRml4dHVyZQorCisKK30gLy8gUmVhbFRpbWVTZXF1ZW5jZXJUZXN0CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9zZXF1ZW5jZXIvdGVzdHMvU2VxdWVuY2VyVGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvc2VxdWVuY2VyL3Rlc3RzL1NlcXVlbmNlclRlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYWU5ZjUxCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvc2VxdWVuY2VyL3Rlc3RzL1NlcXVlbmNlclRlc3QuamF2YQpAQCAtMCwwICsxLDEwNSBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2VxdWVuY2VyLnRlc3RzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24udGVzdHMuSWRlbnRpZmlhYmxlVGVzdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2VxdWVuY2VyLlNlcXVlbmNlcjsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogQSB0ZXN0IGNhc2UgZm9yIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5TZXF1ZW5jZXI8L2I+PC9lbT4nLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiA8cD4KKyAqIFRoZSBmb2xsb3dpbmcgZmVhdHVyZXMgYXJlIHRlc3RlZDoKKyAqIDx1bD4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2VxdWVuY2VyLlNlcXVlbmNlciNnZXROZXh0VGltZSgpIDxlbT5OZXh0IFRpbWU8L2VtPn08L2xpPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zZXF1ZW5jZXIuU2VxdWVuY2VyI2lzVGltZVRvU3RvcCgpIDxlbT5UaW1lIFRvIFN0b3A8L2VtPn08L2xpPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zZXF1ZW5jZXIuU2VxdWVuY2VyI2dldFdvcmtJbmNyZW1lbnQoKSA8ZW0+V29yayBJbmNyZW1lbnQ8L2VtPn08L2xpPgorICogPC91bD4KKyAqIDwvcD4KKyAqIDxwPgorICogVGhlIGZvbGxvd2luZyBvcGVyYXRpb25zIGFyZSB0ZXN0ZWQ6CisgKiA8dWw+CisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNlcXVlbmNlci5TZXF1ZW5jZXIjcmVzZXQoKSA8ZW0+UmVzZXQ8L2VtPn08L2xpPgorICogPC91bD4KKyAqIDwvcD4KKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGFic3RyYWN0IGNsYXNzIFNlcXVlbmNlclRlc3QgZXh0ZW5kcyBJZGVudGlmaWFibGVUZXN0IHsKKwkvKioKKwkgKiBDb25zdHJ1Y3RzIGEgbmV3IFNlcXVlbmNlciB0ZXN0IGNhc2Ugd2l0aCB0aGUgZ2l2ZW4gbmFtZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgU2VxdWVuY2VyVGVzdChTdHJpbmcgbmFtZSkgeworCQlzdXBlcihuYW1lKTsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBmaXh0dXJlIGZvciB0aGlzIFNlcXVlbmNlciB0ZXN0IGNhc2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIFNlcXVlbmNlciBnZXRGaXh0dXJlKCkgeworCQlyZXR1cm4gKFNlcXVlbmNlcilmaXh0dXJlOworCX0KKworCS8qKgorCSAqIFRlc3RzIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zZXF1ZW5jZXIuU2VxdWVuY2VyI2dldE5leHRUaW1lKCkgPGVtPk5leHQgVGltZTwvZW0+fScgZmVhdHVyZSBnZXR0ZXIuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zZXF1ZW5jZXIuU2VxdWVuY2VyI2dldE5leHRUaW1lKCkKKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCXB1YmxpYyB2b2lkIHRlc3RHZXROZXh0VGltZSgpIHsKKwkJZmFpbCgpOworCX0KKworCS8qKgorCSAqIFRlc3RzIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zZXF1ZW5jZXIuU2VxdWVuY2VyI2lzVGltZVRvU3RvcCgpIDxlbT5UaW1lIFRvIFN0b3A8L2VtPn0nIGZlYXR1cmUgZ2V0dGVyLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2VxdWVuY2VyLlNlcXVlbmNlciNpc1RpbWVUb1N0b3AoKQorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJcHVibGljIHZvaWQgdGVzdElzVGltZVRvU3RvcCgpIHsKKwkJZmFpbCgpOworCX0KKworCS8qKgorCSAqIFRlc3RzIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zZXF1ZW5jZXIuU2VxdWVuY2VyI2dldFdvcmtJbmNyZW1lbnQoKSA8ZW0+V29yayBJbmNyZW1lbnQ8L2VtPn0nIGZlYXR1cmUgZ2V0dGVyLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2VxdWVuY2VyLlNlcXVlbmNlciNnZXRXb3JrSW5jcmVtZW50KCkKKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCXB1YmxpYyB2b2lkIHRlc3RHZXRXb3JrSW5jcmVtZW50KCkgeworCQlmYWlsKCk7CisJfQorCisJLyoqCisJICogVGVzdHMgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNlcXVlbmNlci5TZXF1ZW5jZXIjcmVzZXQoKSA8ZW0+UmVzZXQ8L2VtPn0nIG9wZXJhdGlvbi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNlcXVlbmNlci5TZXF1ZW5jZXIjcmVzZXQoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCB0ZXN0UmVzZXQoKSB7CisJCS8vIFRPRE86IGltcGxlbWVudCB0aGlzIG9wZXJhdGlvbiB0ZXN0IG1ldGhvZAorCQkvLyBFbnN1cmUgdGhhdCB5b3UgcmVtb3ZlIEBnZW5lcmF0ZWQgb3IgbWFyayBpdCBAZ2VuZXJhdGVkIE5PVAorCQlmYWlsKCk7CisJfQorCit9IC8vU2VxdWVuY2VyVGVzdApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvc2VxdWVuY2VyL3Rlc3RzL1NlcXVlbmNlclRlc3RzLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9zZXF1ZW5jZXIvdGVzdHMvU2VxdWVuY2VyVGVzdHMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNTMyYzk3Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvc2VxdWVuY2VyL3Rlc3RzL1NlcXVlbmNlclRlc3RzLmphdmEKQEAgLTAsMCArMSw1NSBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2VxdWVuY2VyLnRlc3RzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0OworaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0U3VpdGU7CitpbXBvcnQganVuaXQudGV4dHVpLlRlc3RSdW5uZXI7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIEEgdGVzdCBzdWl0ZSBmb3IgdGhlICc8ZW0+PGI+c2VxdWVuY2VyPC9iPjwvZW0+JyBwYWNrYWdlLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBTZXF1ZW5jZXJUZXN0cyBleHRlbmRzIFRlc3RTdWl0ZSB7CisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgeworCQlUZXN0UnVubmVyLnJ1bihzdWl0ZSgpKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgc3RhdGljIFRlc3Qgc3VpdGUoKSB7CisJCVRlc3RTdWl0ZSBzdWl0ZSA9IG5ldyBTZXF1ZW5jZXJUZXN0cygic2VxdWVuY2VyIFRlc3RzIik7IC8vJE5PTi1OTFMtMSQKKwkJc3VpdGUuYWRkVGVzdFN1aXRlKFJlYWxUaW1lU2VxdWVuY2VyVGVzdC5jbGFzcyk7CisJCXN1aXRlLmFkZFRlc3RTdWl0ZShTZXF1ZW50aWFsU2VxdWVuY2VyVGVzdC5jbGFzcyk7CisJCXJldHVybiBzdWl0ZTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgU2VxdWVuY2VyVGVzdHMoU3RyaW5nIG5hbWUpIHsKKwkJc3VwZXIobmFtZSk7CisJfQorCit9IC8vU2VxdWVuY2VyVGVzdHMKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3NlcXVlbmNlci90ZXN0cy9TZXF1ZW50aWFsU2VxdWVuY2VyVGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvc2VxdWVuY2VyL3Rlc3RzL1NlcXVlbnRpYWxTZXF1ZW5jZXJUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzU3Y2JlYwotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3NlcXVlbmNlci90ZXN0cy9TZXF1ZW50aWFsU2VxdWVuY2VyVGVzdC5qYXZhCkBAIC0wLDAgKzEsMjcwIEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zZXF1ZW5jZXIudGVzdHM7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgamF2YS51dGlsLkNhbGVuZGFyOworCitpbXBvcnQganVuaXQudGV4dHVpLlRlc3RSdW5uZXI7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuVVJJOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS51dGlsLkVjb3JlVXRpbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuU1RFTVVSSTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuTW9kZWxGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5TVEVNVGltZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2VxdWVuY2VyLlNlcXVlbmNlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2VxdWVuY2VyLlNlcXVlbmNlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNlcXVlbmNlci5TZXF1ZW50aWFsU2VxdWVuY2VyOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IEEgdGVzdCBjYXNlIGZvciB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+U2VxdWVudGlhbCBTZXF1ZW5jZXI8L2I+PC9lbT4nLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK0BTdXBwcmVzc1dhcm5pbmdzKCJhbGwiKQorcHVibGljIGNsYXNzIFNlcXVlbnRpYWxTZXF1ZW5jZXJUZXN0IGV4dGVuZHMgU2VxdWVuY2VyVGVzdCB7CisKKwlwdWJsaWMgc3RhdGljIFVSSSBTRVFVRU5DRVJfV0lUSF9FTkRfVVJJID0gU1RFTVVSSS5jcmVhdGVVUkkoInNlcXVlbmNlci9zZXF1ZW50aWFsU2VxdWVuY2VyV2l0aEVuZFRlc3Quc2VxdWVuY2VyIik7CisJcHVibGljIHN0YXRpYyBVUkkgU0VRVUVOQ0VSX1dJVEhfTk9fRU5EX1VSSSA9IFNURU1VUkkuY3JlYXRlVVJJKCJzZXF1ZW5jZXIvc2VxdWVudGlhbFNlcXVlbmNlcldpdGhOb0VuZFRlc3Quc2VxdWVuY2VyIik7CisJCisJCisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IFNUQVJUX0RBWSA9IDIwOworCXByaXZhdGUgc3RhdGljIGZpbmFsIGludCBFTkRfREFZID0gMjk7CisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IE5VTUJFUl9PRl9EQVlTID0gIEVORF9EQVkgLSBTVEFSVF9EQVkgKyAxOworCQorCS8vIFRoZSBmaXh0dXJlIHNlcXVlbmNlciBzZXF1ZW5jZXMgdGhyb3VnaCAxMCBkYXlzCisJcHVibGljIHN0YXRpYyBmaW5hbCBTVEVNVGltZSBTVEFSVF9USU1FID0gY3JlYXRlU1RFTVRpbWUoMjAwNiwKKwkJCUNhbGVuZGFyLk5PVkVNQkVSLCBTVEFSVF9EQVkpOworCisJcHVibGljIHN0YXRpYyBmaW5hbCBTVEVNVGltZSBFTkRfVElNRSA9IGNyZWF0ZVNURU1UaW1lKDIwMDYsCisJCQlDYWxlbmRhci5OT1ZFTUJFUiwgRU5EX0RBWSk7CisKKwlwdWJsaWMgc3RhdGljIGZpbmFsIGxvbmcgVElNRV9JTkNSRU1FTlQgPSBTVEVNVGltZS5Vbml0cy5EQVkuZ2V0TWlsbGlzZWNvbmRzKCk7CisJCisKKwkKKwkKKwkKKwlwcm90ZWN0ZWQgU2VxdWVudGlhbFNlcXVlbmNlciBzZXF1ZW5jZXJXaXRoTm9FbmRUaW1lID0gbnVsbDsKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CisJCVRlc3RSdW5uZXIucnVuKFNlcXVlbnRpYWxTZXF1ZW5jZXJUZXN0LmNsYXNzKTsKKwl9CisKKwkvKioKKwkgKiBDb25zdHJ1Y3RzIGEgbmV3IFNlcXVlbnRpYWwgU2VxdWVuY2VyIHRlc3QgY2FzZSB3aXRoIHRoZSBnaXZlbiBuYW1lLiA8IS0tCisJICogYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgU2VxdWVudGlhbFNlcXVlbmNlclRlc3QoU3RyaW5nIG5hbWUpIHsKKwkJc3VwZXIobmFtZSk7CisJfQorCisJLyoqCisJICogU2V0cyB0aGUgZml4dHVyZSBmb3IgdGhpcyBTZXF1ZW50aWFsIFNlcXVlbmNlciB0ZXN0IGNhc2UuIDwhLS0KKwkgKiBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogCisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBzZXRGaXh0dXJlKFNlcXVlbnRpYWxTZXF1ZW5jZXIgZml4dHVyZSkgeworCQlzdXBlci5zZXRGaXh0dXJlKGZpeHR1cmUpOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIGZpeHR1cmUgZm9yIHRoaXMgU2VxdWVudGlhbCBTZXF1ZW5jZXIgdGVzdCBjYXNlLiA8IS0tCisJICogYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJcHJvdGVjdGVkIFNlcXVlbnRpYWxTZXF1ZW5jZXIgZ2V0Rml4dHVyZSgpIHsKKwkJcmV0dXJuIChTZXF1ZW50aWFsU2VxdWVuY2VyKSBzdXBlci5maXh0dXJlOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBzZWUganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlI3NldFVwKCkKKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCXByb3RlY3RlZCB2b2lkIHNldFVwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCXNldEZpeHR1cmUoY3JlYXRlRml4dHVyZSgpKTsKKworCQlzZXF1ZW5jZXJXaXRoTm9FbmRUaW1lID0gU2VxdWVuY2VyRmFjdG9yeS5lSU5TVEFOQ0UKKwkJCQkuY3JlYXRlU2VxdWVudGlhbFNlcXVlbmNlcigpOworCQlzZXF1ZW5jZXJXaXRoTm9FbmRUaW1lLnNldFN0YXJ0VGltZSgoU1RFTVRpbWUpIEVjb3JlVXRpbAorCQkJCS5jb3B5KFNUQVJUX1RJTUUpKTsKKwkJc2VxdWVuY2VyV2l0aE5vRW5kVGltZS5zZXRDdXJyZW50VGltZSgoU1RFTVRpbWUpIEVjb3JlVXRpbAorCQkJCS5jb3B5KFNUQVJUX1RJTUUpKTsKKwkJc2VxdWVuY2VyV2l0aE5vRW5kVGltZS5zZXRUaW1lSW5jcmVtZW50KFRJTUVfSU5DUkVNRU5UKTsKKwkJCisJCXNlcXVlbmNlcldpdGhOb0VuZFRpbWUuc2V0VVJJKFNFUVVFTkNFUl9XSVRIX05PX0VORF9VUkkpOworCX0gLy8gc2V0VXAKKworCS8qKgorCSAqIEByZXR1cm4gYSBzZXF1ZW50aWFsIHNlcXVlbmNlcgorCSAqLworCXB1YmxpYyBzdGF0aWMgU2VxdWVudGlhbFNlcXVlbmNlciBjcmVhdGVGaXh0dXJlKCkgeworCQlmaW5hbCBTZXF1ZW50aWFsU2VxdWVuY2VyIHNlcXVlbmNlcldpdGhFbmQgPSBTZXF1ZW5jZXJGYWN0b3J5LmVJTlNUQU5DRQorCQkJCS5jcmVhdGVTZXF1ZW50aWFsU2VxdWVuY2VyKCk7CisJCXNlcXVlbmNlcldpdGhFbmQuc2V0U3RhcnRUaW1lKChTVEVNVGltZSkgRWNvcmVVdGlsLmNvcHkoU1RBUlRfVElNRSkpOworCQlzZXF1ZW5jZXJXaXRoRW5kLnNldEN1cnJlbnRUaW1lKChTVEVNVGltZSkgRWNvcmVVdGlsLmNvcHkoU1RBUlRfVElNRSkpOworCQlzZXF1ZW5jZXJXaXRoRW5kLnNldEVuZFRpbWUoKFNURU1UaW1lKSBFY29yZVV0aWwuY29weShFTkRfVElNRSkpOworCQlzZXF1ZW5jZXJXaXRoRW5kLnNldFRpbWVJbmNyZW1lbnQoVElNRV9JTkNSRU1FTlQpOworCQlzZXF1ZW5jZXJXaXRoRW5kLnNldFVSSShTRVFVRU5DRVJfV0lUSF9FTkRfVVJJKTsKKwkJCisJCXJldHVybiBzZXF1ZW5jZXJXaXRoRW5kOworCX0gLy8gY3JlYXRlRml4dHVyZQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogCisJICogQHNlZSBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2UjdGVhckRvd24oKQorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJcHJvdGVjdGVkIHZvaWQgdGVhckRvd24oKSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJc2V0Rml4dHVyZShudWxsKTsKKwkJc2VxdWVuY2VyV2l0aE5vRW5kVGltZSA9IG51bGw7CisJfSAvLyB0ZWFyRG93bgorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2NlbmFyaW8udGVzdHMuU2VxdWVuY2VyVGVzdCN0ZXN0R2V0TmV4dFRpbWUoKQorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIHRlc3RHZXROZXh0VGltZSgpIHsKKworCQlmaW5hbCBTVEVNVGltZSBuZXh0VGltZSA9IFNUQVJUX1RJTUUuYWRkSW5jcmVtZW50KFRJTUVfSU5DUkVNRU5UKTsKKworCQlmaW5hbCBTZXF1ZW50aWFsU2VxdWVuY2VyIHNlcVdpdGhFbmRUaW1lID0gZ2V0Rml4dHVyZSgpOworCQkvLyBUaGUgZmlyc3QgdGltZSBzaG91bGQgYmUgdGhlIHN0YXJ0IHRpbWUKKwkJYXNzZXJ0VHJ1ZShzZXFXaXRoRW5kVGltZS5nZXROZXh0VGltZSgpLnZhbHVlRXF1YWxzKFNUQVJUX1RJTUUpKTsKKwkJCisJCWFzc2VydFRydWUoc2VxV2l0aEVuZFRpbWUuZ2V0TmV4dFRpbWUoKS52YWx1ZUVxdWFscyhuZXh0VGltZSkpOworCQlhc3NlcnRGYWxzZShzZXFXaXRoRW5kVGltZS5nZXROZXh0VGltZSgpLnZhbHVlRXF1YWxzKG5leHRUaW1lKSk7CisKKwkJZmluYWwgU2VxdWVudGlhbFNlcXVlbmNlciBzZXFXaXRoTm9FbmRUaW1lID0gc2VxdWVuY2VyV2l0aE5vRW5kVGltZTsKKwkJYXNzZXJ0VHJ1ZShzZXFXaXRoTm9FbmRUaW1lLmdldE5leHRUaW1lKCkudmFsdWVFcXVhbHMoIFNUQVJUX1RJTUUpKTsKKwkJYXNzZXJ0VHJ1ZShzZXFXaXRoTm9FbmRUaW1lLmdldE5leHRUaW1lKCkudmFsdWVFcXVhbHMobmV4dFRpbWUpKTsKKwkJYXNzZXJ0RmFsc2Uoc2VxV2l0aE5vRW5kVGltZS5nZXROZXh0VGltZSgpLnZhbHVlRXF1YWxzKG5leHRUaW1lKSk7CisJfSAvLyB0ZXN0R2V0TmV4dFRpbWUKKworCS8qKgorCSAqIFRlc3QgdGhhdCB0aGUgZHVyYXRpb24gaXMgY29tcHV0ZWQgY29ycmVjdGx5CisJICovCisJcHVibGljIHZvaWQgdGVzdEdldER1cmF0aW9uKCkgeworCQlmaW5hbCBTZXF1ZW50aWFsU2VxdWVuY2VyIHNlcVdpdGhFbmRUaW1lID0gZ2V0Rml4dHVyZSgpOworCQlhc3NlcnRUcnVlKHNlcVdpdGhFbmRUaW1lLmdldER1cmF0aW9uKCkgPT0gRU5EX1RJTUUuZ2V0VGltZSgpLmdldFRpbWUoKQorCQkJCS0gU1RBUlRfVElNRS5nZXRUaW1lKCkuZ2V0VGltZSgpKTsKKworCQlmaW5hbCBTZXF1ZW50aWFsU2VxdWVuY2VyIHNlcVdpdGhOb0VuZFRpbWUgPSBzZXF1ZW5jZXJXaXRoTm9FbmRUaW1lOworCQlhc3NlcnRUcnVlKHNlcVdpdGhOb0VuZFRpbWUuZ2V0RHVyYXRpb24oKSA9PSBTZXF1ZW5jZXIuVU5LTk9XTl9EVVJBVElPTik7CisJfSAvLyB0ZXN0R2V0RHVyYXRpb24KKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNjZW5hcmlvLnRlc3RzLlNlcXVlbmNlclRlc3QjdGVzdEdldFdvcmtJbmNyZW1lbnQoKQorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIHRlc3RHZXRXb3JrSW5jcmVtZW50KCkgeworCQlmaW5hbCBTZXF1ZW50aWFsU2VxdWVuY2VyIHNlcVdpdGhFbmRUaW1lID0gZ2V0Rml4dHVyZSgpOworCQlhc3NlcnRUcnVlKHNlcVdpdGhFbmRUaW1lLmdldER1cmF0aW9uKCkgPiAwKTsKKworCQlmaW5hbCBTZXF1ZW50aWFsU2VxdWVuY2VyIHNlcVdpdGhOb0VuZFRpbWUgPSBzZXF1ZW5jZXJXaXRoTm9FbmRUaW1lOworCQlhc3NlcnRUcnVlKHNlcVdpdGhOb0VuZFRpbWUuZ2V0RHVyYXRpb24oKSA9PSAtMSk7CisJfSAvLyB0ZXN0R2V0V29ya0luY3JlbWVudAorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2NlbmFyaW8udGVzdHMuU2VxdWVuY2VyVGVzdCN0ZXN0SXNUaW1lVG9TdG9wKCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCB0ZXN0SXNUaW1lVG9TdG9wKCkgeworCQlmaW5hbCBTZXF1ZW50aWFsU2VxdWVuY2VyIHNlcVdpdGhFbmRUaW1lID0gZ2V0Rml4dHVyZSgpOworCQlhc3NlcnROb3ROdWxsKHNlcVdpdGhFbmRUaW1lLmdldEVuZFRpbWUoKSk7CisJCWFzc2VydEZhbHNlKHNlcVdpdGhFbmRUaW1lLmlzVGltZVRvU3RvcCgpKTsKKwkJZm9yIChpbnQgaSA9IDA7IGkgPCBOVU1CRVJfT0ZfREFZUzsgaSsrKSB7CisJCQlhc3NlcnRGYWxzZShzZXFXaXRoRW5kVGltZS5pc1RpbWVUb1N0b3AoKSk7CisJCQlzZXFXaXRoRW5kVGltZS5nZXROZXh0VGltZSgpOworCQl9CisJCWFzc2VydFRydWUoc2VxV2l0aEVuZFRpbWUuaXNUaW1lVG9TdG9wKCkpOworCisJCWZpbmFsIFNlcXVlbnRpYWxTZXF1ZW5jZXIgc2VxV2l0aE5vRW5kVGltZSA9IHNlcXVlbmNlcldpdGhOb0VuZFRpbWU7CisJCWFzc2VydEZhbHNlKHNlcVdpdGhOb0VuZFRpbWUuaXNUaW1lVG9TdG9wKCkpOworCQlmb3IgKGludCBpID0gMDsgaSA8IDEwOyBpKyspIHsKKwkJCXNlcVdpdGhOb0VuZFRpbWUuZ2V0TmV4dFRpbWUoKTsKKwkJCWFzc2VydEZhbHNlKHNlcVdpdGhOb0VuZFRpbWUuaXNUaW1lVG9TdG9wKCkpOworCQl9CisJCXNlcVdpdGhOb0VuZFRpbWUuZ2V0TmV4dFRpbWUoKTsKKwkJYXNzZXJ0RmFsc2Uoc2VxV2l0aE5vRW5kVGltZS5pc1RpbWVUb1N0b3AoKSk7CisJfSAvLyB0ZXN0SXNUaW1lVG9TdG9wCisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS50ZXN0cy5TZXF1ZW5jZXJUZXN0I3Rlc3RHZXRXb3JrQ29tcGxldGUoKQorCSAqLworCXB1YmxpYyB2b2lkIHRlc3RHZXRXb3JrQ29tcGxldGUoKSB7CisJCWZpbmFsIFNlcXVlbnRpYWxTZXF1ZW5jZXIgc2VxV2l0aEVuZFRpbWUgPSBnZXRGaXh0dXJlKCk7CisJCWFzc2VydEZhbHNlKHNlcVdpdGhFbmRUaW1lLmlzVGltZVRvU3RvcCgpKTsKKwkJZm9yIChpbnQgaSA9IDA7IGkgPCBOVU1CRVJfT0ZfREFZUzsgaSsrKSB7CisJCQlzZXFXaXRoRW5kVGltZS5nZXROZXh0VGltZSgpOworCQkJYXNzZXJ0VHJ1ZShzZXFXaXRoRW5kVGltZS5nZXRXb3JrQ29tcGxldGUoKSA9PSAoaSsxKSAqIE5VTUJFUl9PRl9EQVlTKTsKKwkJfQorCQlhc3NlcnRUcnVlKHNlcVdpdGhFbmRUaW1lLmdldFdvcmtDb21wbGV0ZSgpID09IDEwMCk7CisKKwkJZmluYWwgU2VxdWVudGlhbFNlcXVlbmNlciBzZXFXaXRoTm9FbmRUaW1lID0gc2VxdWVuY2VyV2l0aE5vRW5kVGltZTsKKwkJYXNzZXJ0RmFsc2Uoc2VxV2l0aE5vRW5kVGltZS5pc1RpbWVUb1N0b3AoKSk7CisJCWZvciAoaW50IGkgPSAwOyBpIDwgTlVNQkVSX09GX0RBWVM7IGkrKykgeworCQkJc2VxV2l0aE5vRW5kVGltZS5nZXROZXh0VGltZSgpOworCQkJYXNzZXJ0VHJ1ZShzZXFXaXRoTm9FbmRUaW1lLmdldFdvcmtDb21wbGV0ZSgpID09IDApOworCQl9CisJCXNlcVdpdGhOb0VuZFRpbWUuZ2V0TmV4dFRpbWUoKTsKKwkJYXNzZXJ0VHJ1ZShzZXFXaXRoTm9FbmRUaW1lLmdldFdvcmtDb21wbGV0ZSgpID09IDApOworCX0gLy8gdGVzdEdldFdvcmtDb21wbGV0ZQorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2VxdWVuY2VyLnRlc3RzLlNlcXVlbmNlclRlc3QjdGVzdFJlc2V0KCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCB0ZXN0UmVzZXQoKSB7CisJCWZpbmFsIFNlcXVlbnRpYWxTZXF1ZW5jZXIgc2VxV2l0aEVuZFRpbWUgPSBnZXRGaXh0dXJlKCk7CisJCWFzc2VydFRydWUoc2VxV2l0aEVuZFRpbWUuZ2V0U3RhcnRUaW1lKCkudmFsdWVFcXVhbHMoCisJCQkJc2VxV2l0aEVuZFRpbWUuZ2V0Q3VycmVudFRpbWUoKSkpOworCQlmaW5hbCBTVEVNVGltZSB0aW1lMSA9IHNlcVdpdGhFbmRUaW1lLmdldE5leHRUaW1lKCk7CisJCWFzc2VydFRydWUoc2VxV2l0aEVuZFRpbWUuZ2V0U3RhcnRUaW1lKCkudmFsdWVFcXVhbHMoCisJCQkJc2VxV2l0aEVuZFRpbWUuZ2V0Q3VycmVudFRpbWUoKSkpOworCQlzZXFXaXRoRW5kVGltZS5yZXNldCgpOworCQlhc3NlcnRUcnVlKHNlcVdpdGhFbmRUaW1lLmdldFN0YXJ0VGltZSgpLnZhbHVlRXF1YWxzKAorCQkJCXNlcVdpdGhFbmRUaW1lLmdldEN1cnJlbnRUaW1lKCkpKTsKKwl9IC8vIHRlc3RSZXNldAorCisJLyoqCisJICogQ3JlYXRlIGFuIGluc3RhbmNlIG9mIFNURU1UaW1lCisJICogCisJICogQHJldHVybiB0aGUgaW5zdGFuY2UKKwkgKi8KKwlwcml2YXRlIHN0YXRpYyBTVEVNVGltZSBjcmVhdGVTVEVNVGltZShmaW5hbCBpbnQgeWVhciwgZmluYWwgaW50IG1vbnRoLAorCQkJZmluYWwgaW50IGRheSkgeworCQlmaW5hbCBTVEVNVGltZSByZXRWYWx1ZSA9IGdldEN1cnJlbnRTeXN0ZW1UaW1lKCk7CisKKwkJZmluYWwgQ2FsZW5kYXIgY2FsZW5kYXIgPSBDYWxlbmRhci5nZXRJbnN0YW5jZSgpOworCQljYWxlbmRhci5zZXQoeWVhciwgbW9udGgsIGRheSk7CisJCXJldFZhbHVlLnNldFRpbWUoY2FsZW5kYXIuZ2V0VGltZSgpKTsKKwkJcmV0dXJuIHJldFZhbHVlOworCX0gLy8gY3JlYXRlU1RFTVRpbWUKKworCS8qKgorCSAqIEByZXR1cm4gdGhlIGN1cnJlbnQgcmVhbCB3YWxsIGNsb2NrIHRpbWUgYXMgcmV0dXJuZWQgYnkgdGhlIHN5c3RlbS4KKwkgKi8KKwlwcm90ZWN0ZWQgc3RhdGljIFNURU1UaW1lIGdldEN1cnJlbnRTeXN0ZW1UaW1lKCkgeworCQlyZXR1cm4gTW9kZWxGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVTVEVNVGltZSgpOworCX0gLy8gZ2V0Q3VycmVudFN5c3RlbVRpbWUKK30gLy8gU2VxdWVudGlhbFNlcXVlbmNlclRlc3QKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3NvbHZlci90ZXN0cy9Tb2x2ZXJFeGFtcGxlLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9zb2x2ZXIvdGVzdHMvU29sdmVyRXhhbXBsZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc3ZTEyM2EKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9zb2x2ZXIvdGVzdHMvU29sdmVyRXhhbXBsZS5qYXZhCkBAIC0wLDAgKzEsMTI0IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zb2x2ZXIudGVzdHM7DQorDQorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisgKiBDb3B5cmlnaHQgKGMpIDIwMDkgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuDQorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscw0KKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMA0KKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0DQorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwNCisgKg0KKyAqIENvbnRyaWJ1dG9yczoNCisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uDQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQorDQoraW1wb3J0IGphdmEuaW8uRmlsZTsNCitpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsNCisNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLkRpYWdub3N0aWM7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5VUkk7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0Ow0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUucmVzb3VyY2UuUmVzb3VyY2U7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5yZXNvdXJjZS5SZXNvdXJjZVNldDsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnJlc291cmNlLmltcGwuUmVzb3VyY2VTZXRJbXBsOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUudXRpbC5EaWFnbm9zdGljaWFuOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUueG1pLmltcGwuWE1JUmVzb3VyY2VGYWN0b3J5SW1wbDsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNvbHZlci5Tb2x2ZXI7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zb2x2ZXIuU29sdmVyRmFjdG9yeTsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNvbHZlci5Tb2x2ZXJQYWNrYWdlOw0KKw0KKy8qKg0KKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorICogQSBzYW1wbGUgdXRpbGl0eSBmb3IgdGhlICc8ZW0+PGI+c29sdmVyPC9iPjwvZW0+JyBwYWNrYWdlLg0KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKyAqIEBnZW5lcmF0ZWQNCisgKi8NCitwdWJsaWMgY2xhc3MgU29sdmVyRXhhbXBsZSB7DQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiBMb2FkIGFsbCB0aGUgYXJndW1lbnQgZmlsZSBwYXRocyBvciBVUklzIGFzIGluc3RhbmNlcyBvZiB0aGUgbW9kZWwuDQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcGFyYW0gYXJncyB0aGUgZmlsZSBwYXRocyBvciBVUklzLg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7DQorCQkvLyBDcmVhdGUgYSByZXNvdXJjZSBzZXQgdG8gaG9sZCB0aGUgcmVzb3VyY2VzLg0KKwkJLy8NCisJCVJlc291cmNlU2V0IHJlc291cmNlU2V0ID0gbmV3IFJlc291cmNlU2V0SW1wbCgpOw0KKwkJDQorCQkvLyBSZWdpc3RlciB0aGUgYXBwcm9wcmlhdGUgcmVzb3VyY2UgZmFjdG9yeSB0byBoYW5kbGUgYWxsIGZpbGUgZXh0ZW5zaW9ucy4NCisJCS8vDQorCQlyZXNvdXJjZVNldC5nZXRSZXNvdXJjZUZhY3RvcnlSZWdpc3RyeSgpLmdldEV4dGVuc2lvblRvRmFjdG9yeU1hcCgpLnB1dA0KKwkJCShSZXNvdXJjZS5GYWN0b3J5LlJlZ2lzdHJ5LkRFRkFVTFRfRVhURU5TSU9OLCANCisJCQkgbmV3IFhNSVJlc291cmNlRmFjdG9yeUltcGwoKSk7DQorDQorCQkvLyBSZWdpc3RlciB0aGUgcGFja2FnZSB0byBlbnN1cmUgaXQgaXMgYXZhaWxhYmxlIGR1cmluZyBsb2FkaW5nLg0KKwkJLy8NCisJCXJlc291cmNlU2V0LmdldFBhY2thZ2VSZWdpc3RyeSgpLnB1dA0KKwkJCShTb2x2ZXJQYWNrYWdlLmVOU19VUkksIA0KKwkJCSBTb2x2ZXJQYWNrYWdlLmVJTlNUQU5DRSk7DQorICAgICAgICANCisJCS8vIElmIHRoZXJlIGFyZSBubyBhcmd1bWVudHMsIGVtaXQgYW4gYXBwcm9wcmlhdGUgdXNhZ2UgbWVzc2FnZS4NCisJCS8vDQorCQlpZiAoYXJncy5sZW5ndGggPT0gMCkgew0KKwkJCVN5c3RlbS5vdXQucHJpbnRsbigiRW50ZXIgYSBsaXN0IG9mIGZpbGUgcGF0aHMgb3IgVVJJcyB0aGF0IGhhdmUgY29udGVudCBsaWtlIHRoaXM6Iik7IC8vJE5PTi1OTFMtMSQNCisJCQl0cnkgew0KKwkJCQlSZXNvdXJjZSByZXNvdXJjZSA9IHJlc291cmNlU2V0LmNyZWF0ZVJlc291cmNlKFVSSS5jcmVhdGVVUkkoImh0dHA6Ly8vTXkuc29sdmVyIikpOyAvLyROT04tTkxTLTEkDQorCQkJCVNvbHZlciByb290ID0gU29sdmVyRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlU29sdmVyKCk7DQorCQkJCXJlc291cmNlLmdldENvbnRlbnRzKCkuYWRkKHJvb3QpOw0KKwkJCQlyZXNvdXJjZS5zYXZlKFN5c3RlbS5vdXQsIG51bGwpOw0KKwkJCX0NCisJCQljYXRjaCAoSU9FeGNlcHRpb24gZXhjZXB0aW9uKSB7DQorCQkJCWV4Y2VwdGlvbi5wcmludFN0YWNrVHJhY2UoKTsNCisJCQl9DQorCQl9DQorCQllbHNlIHsNCisJCQkvLyBJdGVyYXRlIG92ZXIgYWxsIHRoZSBhcmd1bWVudHMuDQorCQkJLy8NCisJCQlmb3IgKGludCBpID0gMDsgaSA8IGFyZ3MubGVuZ3RoOyArK2kpIHsNCisJCQkJLy8gQ29uc3RydWN0IHRoZSBVUkkgZm9yIHRoZSBpbnN0YW5jZSBmaWxlLg0KKwkJCQkvLyBUaGUgYXJndW1lbnQgaXMgdHJlYXRlZCBhcyBhIGZpbGUgcGF0aCBvbmx5IGlmIGl0IGRlbm90ZXMgYW4gZXhpc3RpbmcgZmlsZS4NCisJCQkJLy8gT3RoZXJ3aXNlLCBpdCdzIGRpcmVjdGx5IHRyZWF0ZWQgYXMgYSBVUkwuDQorCQkJCS8vDQorCQkJCUZpbGUgZmlsZSA9IG5ldyBGaWxlKGFyZ3NbaV0pOw0KKwkJCQlVUkkgdXJpID0gZmlsZS5pc0ZpbGUoKSA/IFVSSS5jcmVhdGVGaWxlVVJJKGZpbGUuZ2V0QWJzb2x1dGVQYXRoKCkpOiBVUkkuY3JlYXRlVVJJKGFyZ3NbaV0pOw0KKw0KKwkJCQl0cnkgew0KKwkJCQkJLy8gRGVtYW5kIGxvYWQgcmVzb3VyY2UgZm9yIHRoaXMgZmlsZS4NCisJCQkJCS8vDQorCQkJCQlSZXNvdXJjZSByZXNvdXJjZSA9IHJlc291cmNlU2V0LmdldFJlc291cmNlKHVyaSwgdHJ1ZSk7DQorCQkJCQlTeXN0ZW0ub3V0LnByaW50bG4oIkxvYWRlZCAiICsgdXJpKTsgLy8kTk9OLU5MUy0xJA0KKw0KKwkJCQkJLy8gVmFsaWRhdGUgdGhlIGNvbnRlbnRzIG9mIHRoZSBsb2FkZWQgcmVzb3VyY2UuDQorCQkJCQkvLw0KKwkJCQkJZm9yIChFT2JqZWN0IGVPYmplY3QgOiByZXNvdXJjZS5nZXRDb250ZW50cygpKSB7DQorCQkJCQkJRGlhZ25vc3RpYyBkaWFnbm9zdGljID0gRGlhZ25vc3RpY2lhbi5JTlNUQU5DRS52YWxpZGF0ZShlT2JqZWN0KTsNCisJCQkJCQlpZiAoZGlhZ25vc3RpYy5nZXRTZXZlcml0eSgpICE9IERpYWdub3N0aWMuT0spIHsNCisJCQkJCQkJcHJpbnREaWFnbm9zdGljKGRpYWdub3N0aWMsICIiKTsgLy8kTk9OLU5MUy0xJA0KKwkJCQkJCX0NCisJCQkJCX0NCisJCQkJfQ0KKwkJCQljYXRjaCAoUnVudGltZUV4Y2VwdGlvbiBleGNlcHRpb24pIHsNCisJCQkJCVN5c3RlbS5vdXQucHJpbnRsbigiUHJvYmxlbSBsb2FkaW5nICIgKyB1cmkpOyAvLyROT04tTkxTLTEkDQorCQkJCQlleGNlcHRpb24ucHJpbnRTdGFja1RyYWNlKCk7DQorCQkJCX0NCisJCQl9DQorCQl9DQorCX0NCisJDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiBQcmludHMgZGlhZ25vc3RpY3Mgd2l0aCBpbmRlbnRhdGlvbi4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBwYXJhbSBkaWFnbm9zdGljIHRoZSBkaWFnbm9zdGljIHRvIHByaW50Lg0KKwkgKiBAcGFyYW0gaW5kZW50IHRoZSBpbmRlbnRhdGlvbiBmb3IgcHJpbnRpbmcuDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCBzdGF0aWMgdm9pZCBwcmludERpYWdub3N0aWMoRGlhZ25vc3RpYyBkaWFnbm9zdGljLCBTdHJpbmcgaW5kZW50KSB7DQorCQlTeXN0ZW0ub3V0LnByaW50KGluZGVudCk7DQorCQlTeXN0ZW0ub3V0LnByaW50bG4oZGlhZ25vc3RpYy5nZXRNZXNzYWdlKCkpOw0KKwkJZm9yIChEaWFnbm9zdGljIGNoaWxkIDogZGlhZ25vc3RpYy5nZXRDaGlsZHJlbigpKSB7DQorCQkJcHJpbnREaWFnbm9zdGljKGNoaWxkLCBpbmRlbnQgKyAiICAiKTsgLy8kTk9OLU5MUy0xJA0KKwkJfQ0KKwl9DQorDQorfSAvL1NvbHZlckV4YW1wbGUNCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9zb2x2ZXIvdGVzdHMvU29sdmVyVGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvc29sdmVyL3Rlc3RzL1NvbHZlclRlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42OTAyN2JkCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvc29sdmVyL3Rlc3RzL1NvbHZlclRlc3QuamF2YQpAQCAtMCwwICsxLDM1MSBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc29sdmVyLnRlc3RzOw0KKw0KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorICogQ29weXJpZ2h0IChjKSAyMDA5IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLg0KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMNCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjANCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdA0KKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sDQorICoNCisgKiBDb250cmlidXRvcnM6DQorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbg0KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KKw0KK2ltcG9ydCBqYXZhLnV0aWwuQ2FsZW5kYXI7DQorDQoraW1wb3J0IGp1bml0LnRleHR1aS5UZXN0UnVubmVyOw0KKw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuVVJJOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuU1RFTVVSSTsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi50ZXN0cy5JZGVudGlmaWFibGVUZXN0Ow0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguR3JhcGhGYWN0b3J5Ow0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuRGVjb3JhdG9yOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuTW9kZWxGYWN0b3J5Ow0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuU1RFTVRpbWU7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC50ZXN0cy5Nb2RlbFRlc3Q7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zY2VuYXJpby5TY2VuYXJpbzsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNjZW5hcmlvLlNjZW5hcmlvRmFjdG9yeTsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNlcXVlbmNlci5TZXF1ZW5jZXI7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zZXF1ZW5jZXIuaW1wbC5TZXF1ZW5jZXJJbXBsOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc29sdmVyLlNvbHZlcjsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNvbHZlci5Tb2x2ZXJGYWN0b3J5Ow0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnNvbHZlcnMuZmQuRmRGYWN0b3J5Ow0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnNvbHZlcnMuZmQuaW1wbC5GaW5pdGVEaWZmZXJlbmNlSW1wbDsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsLmRlY29yYXRvcnMuRGVjb3JhdG9yc0ZhY3Rvcnk7DQorDQorLyoqDQorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisgKiBBIHRlc3QgY2FzZSBmb3IgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPlNvbHZlcjwvYj48L2VtPicuDQorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorICogPHA+DQorICogVGhlIGZvbGxvd2luZyBmZWF0dXJlcyBhcmUgdGVzdGVkOg0KKyAqIDx1bD4NCisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNvbHZlci5Tb2x2ZXIjaXNJbml0aWFsaXplZCgpIDxlbT5Jbml0aWFsaXplZDwvZW0+fTwvbGk+DQorICogPC91bD4NCisgKiA8L3A+DQorICogPHA+DQorICogVGhlIGZvbGxvd2luZyBvcGVyYXRpb25zIGFyZSB0ZXN0ZWQ6DQorICogPHVsPg0KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc29sdmVyLlNvbHZlciNzdGVwKG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5TVEVNVGltZSwgbG9uZywgaW50KSA8ZW0+U3RlcDwvZW0+fTwvbGk+DQorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zb2x2ZXIuU29sdmVyI3Jlc2V0KCkgPGVtPlJlc2V0PC9lbT59PC9saT4NCisgKiA8L3VsPg0KKyAqIDwvcD4NCisgKiBAZ2VuZXJhdGVkDQorICovDQorcHVibGljIGNsYXNzIFNvbHZlclRlc3QgZXh0ZW5kcyBJZGVudGlmaWFibGVUZXN0IHsNCisNCisJLyoqDQorCSAqIFVSSSBmb3IgdGhlIFNvbHZlcg0KKwkgKi8NCisJcHVibGljIHN0YXRpYyBVUkkgU09MVkVSX1VSSSA9IFNURU1VUkkuY3JlYXRlVVJJKCJzb2x2ZXIvc29sdmVyVGVzdC5zb2x2ZXIiKTsNCisJDQorCS8qKg0KKwkgKiBVUkkgZm9yIHRoZSBTZXF1ZW5jZXIgaW4gdGhlIFNjZW5hcmlvDQorCSAqLw0KKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBVUkkgU0VRVUVOQ0VSX1VSSSA9IFVSSS5jcmVhdGVVUkkoIlNFUVVFTkNFUi9zZXF1ZW5jZXIxLnNlcXVlbmNlciIpOw0KKw0KKw0KKwkvKioNCisJICogVVJJIGZvciB0aGUgRGVjb3JhdG9yIGluIHRoZSB0ZXN0IHNjZW5hcmlvDQorCSAqLw0KKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBVUkkgREVDT1JBVE9SX1VSSSA9IFVSSS5jcmVhdGVVUkkoImRlY29yYXRvci9kZWNvcmF0b3IxLmRlY29yYXRvciIpOw0KKwkJDQorDQorCS8qKg0KKwkgKiBUaGlzIGlzIHRoZSB0aXRsZSBvZiB0aGUgdGVzdCBzY2VuYXJpby4NCisJICovDQorCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFRFU1RfU0NFTkFSSU9fVElUTEUgPSAiVGVzdCBTY2VuYXJpbyAjMSI7DQorDQorCUBTdXBwcmVzc1dhcm5pbmdzKCJ1bnVzZWQiKQ0KKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBVUkkgU0NFTkFSSU9fU0VSSUFMWkFUSU9OX1RFU1RfVVJJID0gVVJJLmNyZWF0ZVVSSSgidGVtcC90ZXN0c2NlbmFyaW8xLnNjZW5hcmlvIik7DQorDQorCQ0KKwkvKioNCisJICogVGhpcyBpcyB0aGUgVVJJIHRoYXQgd2lsbCBiZSB0aGUgSWRlbnRpZmllciBvZiB0aGUgc2NlbmFyaW8NCisJICovDQorCXByaXZhdGUgc3RhdGljIGZpbmFsIFVSSSBTQ0VOQVJJT19VUkkgPSBVUkkuY3JlYXRlVVJJKCJwbGF0Zm9ybTovcGx1Z2luLyINCisJCQkrIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS50ZXN0cy5BY3RpdmF0b3IuUExVR0lOX0lEDQorCQkJKyAiL2RhdGEvc29sdmVycy9iYXNpYy90ZXN0c29sdmVyLnNvbHZlciIpOw0KKwkNCisJDQorDQorCQ0KKwkNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7DQorCQlUZXN0UnVubmVyLnJ1bihTb2x2ZXJUZXN0LmNsYXNzKTsNCisJfQ0KKw0KKwkvKioNCisJICogQ29uc3RydWN0cyBhIG5ldyBTb2x2ZXIgdGVzdCBjYXNlIHdpdGggdGhlIGdpdmVuIG5hbWUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgU29sdmVyVGVzdChTdHJpbmcgbmFtZSkgew0KKwkJc3VwZXIobmFtZSk7DQorCX0NCisJDQorCS8qKg0KKwkgKiBUT0RPIFdoeSBkaWQgdGhpcyBtZXRob2Qgbm90ZSBnZXQgZ2VuZXJhdGVkPz8NCisJICogQHJldHVybiBhIHNjZW5hcmlvDQorCSAqIEBnZW5lcmF0ZWQgTk9UDQorCSAqLw0KKwlwdWJsaWMgc3RhdGljIFNvbHZlciBjcmVhdGVGaXh0dXJlKCkgew0KKwkJZmluYWwgU2NlbmFyaW8gc2NlbmFyaW8gPSBTY2VuYXJpb0ZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZVNjZW5hcmlvKCk7DQorCQlzY2VuYXJpby5zZXRNb2RlbChNb2RlbFRlc3QuY3JlYXRlRml4dHVyZSgpKTsNCisJCXNjZW5hcmlvLnNldFNlcXVlbmNlcihnZXRUZXN0U2VxdWVuY2VyKCkpOw0KKwkJc2NlbmFyaW8uc2V0VVJJKFNDRU5BUklPX1VSSSk7DQorCQlmaW5hbCBEZWNvcmF0b3IgZGVjb3JhdG9yID0gRGVjb3JhdG9yc0ZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZVRlc3RTY2VuYXJpb0dyYXBoRGVjb3JhdG9yMSgpOw0KKwkJZGVjb3JhdG9yLnNldFVSSShERUNPUkFUT1JfVVJJKTsNCisJCXNjZW5hcmlvLmdldFNjZW5hcmlvRGVjb3JhdG9ycygpLmFkZChkZWNvcmF0b3IpOw0KKwkJc2NlbmFyaW8uZ2V0RHVibGluQ29yZSgpLnBvcHVsYXRlKCk7DQorCQlzY2VuYXJpby5nZXREdWJsaW5Db3JlKCkuc2V0VGl0bGUoVEVTVF9TQ0VOQVJJT19USVRMRSk7DQorCQkNCisJCS8vc2NlbmFyaW8uaW5pdGlhbGl6ZSgpOw0KKwkJDQorCQlTb2x2ZXIgc29sdmVyID0gRmRGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVGaW5pdGVEaWZmZXJlbmNlKCk7DQorCQlzb2x2ZXIuc2V0RGVjb3JhdG9ycyhzY2VuYXJpby5nZXRTY2VuYXJpb0RlY29yYXRvcnMoKSk7DQorCQlzY2VuYXJpby5zZXRTb2x2ZXIoc29sdmVyKTsNCisJCXNvbHZlci5nZXREdWJsaW5Db3JlKCkuc2V0VGl0bGUoIlNvbHZlciIpOw0KKwkJDQorCQkvLyBSRVFVSVJFRCBmb3IgU0FOSVRZDQorCQkvLyBUT0RPIHRoaXMgc2hvdWxkIHByb2JhYmx5IGJlIGhhbmRsZWQgYnkgZGVmYXVsdCBpbiB0aGUgRmFjdG9yeSBjcmVhdGUgbWV0aG9kDQorCQkvLyAJCUZvciBhbGwgdHlwZXMgb2Ygc29sdmVycw0KKwkJc29sdmVyLnNldFVSSShTT0xWRVJfVVJJKTsNCisJCXNvbHZlci5nZXREdWJsaW5Db3JlKCkuc2V0SWRlbnRpZmllcihTT0xWRVJfVVJJLnRvU3RyaW5nKCkpOw0KKwkJDQorCQlhc3NlcnRUcnVlKHNvbHZlci5zYW5lKCkpOw0KKwkJDQorCQlyZXR1cm4gc29sdmVyOw0KKwl9IC8vIGNyZWF0ZUZpeHR1cmUNCisNCisJLyoqDQorCSAqIFJldHVybnMgdGhlIGZpeHR1cmUgZm9yIHRoaXMgU29sdmVyIHRlc3QgY2FzZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQgTk9UDQorCSAqLw0KKwlAT3ZlcnJpZGUNCisJcHJvdGVjdGVkIFNvbHZlciBnZXRGaXh0dXJlKCkgew0KKwkJcmV0dXJuIGNyZWF0ZUZpeHR1cmUoKTsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBzZWUganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlI3NldFVwKCkNCisJICogQGdlbmVyYXRlZCBOT1QNCisJICovDQorCUBPdmVycmlkZQ0KKwlwcm90ZWN0ZWQgdm9pZCBzZXRVcCgpIHRocm93cyBFeGNlcHRpb24gew0KKwkJU29sdmVyIHMgPSBTb2x2ZXJGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVTb2x2ZXIoKTsNCisJCXMuc2V0VVJJKFNPTFZFUl9VUkkpOw0KKwkJc2V0Rml4dHVyZShzKTsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBzZWUganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlI3RlYXJEb3duKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJQE92ZXJyaWRlDQorCXByb3RlY3RlZCB2b2lkIHRlYXJEb3duKCkgdGhyb3dzIEV4Y2VwdGlvbiB7DQorCQlzZXRGaXh0dXJlKG51bGwpOw0KKwl9DQorDQorCS8qKg0KKwkgKiBUZXN0cyB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc29sdmVyLlNvbHZlciNpc0luaXRpYWxpemVkKCkgPGVtPkluaXRpYWxpemVkPC9lbT59JyBmZWF0dXJlIGdldHRlci4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNvbHZlci5Tb2x2ZXIjaXNJbml0aWFsaXplZCgpDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyB2b2lkIHRlc3RJc0luaXRpYWxpemVkKCkgew0KKwkJLy8gVE9ETzogaW1wbGVtZW50IHRoaXMgZmVhdHVyZSBnZXR0ZXIgdGVzdCBtZXRob2QNCisJCS8vIEVuc3VyZSB0aGF0IHlvdSByZW1vdmUgQGdlbmVyYXRlZCBvciBtYXJrIGl0IEBnZW5lcmF0ZWQgTk9UDQorCQlmYWlsKCk7DQorCX0NCisNCisJLyoqDQorCSAqIFRlc3RzIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zb2x2ZXIuU29sdmVyI3NldEluaXRpYWxpemVkKGJvb2xlYW4pIDxlbT5Jbml0aWFsaXplZDwvZW0+fScgZmVhdHVyZSBzZXR0ZXIuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zb2x2ZXIuU29sdmVyI3NldEluaXRpYWxpemVkKGJvb2xlYW4pDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyB2b2lkIHRlc3RTZXRJbml0aWFsaXplZCgpIHsNCisJCS8vIFRPRE86IGltcGxlbWVudCB0aGlzIGZlYXR1cmUgc2V0dGVyIHRlc3QgbWV0aG9kDQorCQkvLyBFbnN1cmUgdGhhdCB5b3UgcmVtb3ZlIEBnZW5lcmF0ZWQgb3IgbWFyayBpdCBAZ2VuZXJhdGVkIE5PVA0KKwkJZmFpbCgpOw0KKwl9DQorDQorCS8qKg0KKwkgKiBUZXN0cyB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc29sdmVyLlNvbHZlciNzdGVwKG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5TVEVNVGltZSwgbG9uZywgaW50KSA8ZW0+U3RlcDwvZW0+fScgb3BlcmF0aW9uLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc29sdmVyLlNvbHZlciNzdGVwKG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5TVEVNVGltZSwgbG9uZywgaW50KQ0KKwkgKiBAZ2VuZXJhdGVkIE5PVA0KKwkgKi8NCisJcHVibGljIHZvaWQgdGVzdFN0ZXBfX1NURU1UaW1lX2xvbmdfaW50KCkgew0KKwkJRmluaXRlRGlmZmVyZW5jZUltcGwgc29sdmVyID0gKEZpbml0ZURpZmZlcmVuY2VJbXBsKSBnZXRGaXh0dXJlKCk7DQorCQlzb2x2ZXIuc2V0UGFydGl0aW9uZXIoR3JhcGhGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVTaW1wbGVHcmFwaFBhcnRpdGlvbmVyKCkpOw0KKwkJU1RFTVRpbWUgdGltZSA9IE1vZGVsRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlU1RFTVRpbWUoKTsNCisJCWxvbmcgdGltZURlbHRhID0gMTsNCisJCWludCBjeWNsZSA9IDE7DQorCQlzb2x2ZXIuc3RlcCh0aW1lLCB0aW1lRGVsdGEsIGN5Y2xlKTsNCisJfQ0KKw0KKwkvKioNCisJICogVGVzdHMgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNvbHZlci5Tb2x2ZXIjcmVzZXQoKSA8ZW0+UmVzZXQ8L2VtPn0nIG9wZXJhdGlvbi4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNvbHZlci5Tb2x2ZXIjcmVzZXQoKQ0KKwkgKiBAZ2VuZXJhdGVkIE5PVA0KKwkgKi8NCisJcHVibGljIHZvaWQgdGVzdFJlc2V0KCkgew0KKwkJRmluaXRlRGlmZmVyZW5jZUltcGwgc29sdmVyID0gKEZpbml0ZURpZmZlcmVuY2VJbXBsKSBnZXRGaXh0dXJlKCk7DQorCQlzb2x2ZXIucmVzZXQoKTsNCisJCWFzc2VydFRydWUoIXNvbHZlci5pc0luaXRpYWxpemVkKCkpOw0KKwl9DQorDQorCQ0KKw0KKwkNCisJLyoqDQorCSAqIENyZWF0ZSBhbiBpbnN0YW5jZSBvZiBTVEVNVGltZQ0KKwkgKiANCisJICogQHJldHVybiB0aGUgaW5zdGFuY2UNCisJICovDQorCXByaXZhdGUgc3RhdGljIFNURU1UaW1lIGNyZWF0ZVNURU1UaW1lKGZpbmFsIGludCB5ZWFyLCBmaW5hbCBpbnQgbW9udGgsDQorCQkJZmluYWwgaW50IGRheSkgew0KKwkJZmluYWwgU1RFTVRpbWUgcmV0VmFsdWUgPSBNb2RlbEZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZVNURU1UaW1lKCk7DQorDQorCQlmaW5hbCBDYWxlbmRhciBjYWxlbmRhciA9IENhbGVuZGFyLmdldEluc3RhbmNlKCk7DQorCQljYWxlbmRhci5zZXQoeWVhciwgbW9udGgsIGRheSk7DQorCQlyZXRWYWx1ZS5zZXRUaW1lKGNhbGVuZGFyLmdldFRpbWUoKSk7DQorCQlyZXR1cm4gcmV0VmFsdWU7DQorCX0gLy8gY3JlYXRlU1RFTVRpbWUNCisJDQorCQ0KKwkNCisJLyoqDQorCSAqIEByZXR1cm4gYSA8Y29kZT5TZXF1ZW5jZXI8L2NvZGU+IGZvciB0ZXN0aW5nLg0KKwkgKi8NCisJcHJpdmF0ZSBzdGF0aWMgU2VxdWVuY2VyIGdldFRlc3RTZXF1ZW5jZXIoKSB7DQorCQlmaW5hbCBTZXF1ZW5jZXIgcmV0VmFsdWUgPSBuZXcgU2VxdWVuY2VySW1wbCgpIHsgDQorDQorCQkJcHJvdGVjdGVkIGxvbmcgdGltZUluY3JlbWVudCA9IFNURU1UaW1lLlVuaXRzLkRBWS5nZXRNaWxsaXNlY29uZHMoKTsNCisNCisJCQkvKioNCisJCQkgKiBUaGlzIGlzIGFuIGFjY3VtdWxhdG9yIG9mIHRoZSB3b3JrIGluY3JlbWVudCB0aGF0IGtlZXBzIGFjY291bnQgb2YgDQorCQkJICogdGhlIGZyYWN0aW9uIG9mIHRoZSB3b3JrIGluY3JlbWVudHMgdW50aWwgdGhleSBleGNlZWQgMS4wDQorCQkJICovDQorCQkJcHJpdmF0ZSBkb3VibGUgd29ya0luY3JlbWVudFJ1bm5pbmdUb3RhbCA9IDAuMDsNCisNCisNCisJCQlwdWJsaWMgbG9uZyBnZXRUaW1lSW5jcmVtZW50KCkgew0KKwkJCQlyZXR1cm4gdGltZUluY3JlbWVudDsNCisJCQl9DQorCQkJDQorCQkJLyoqDQorCQkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2NlbmFyaW8uaW1wbC5TZXF1ZW5jZXJJbXBsI2dldE5leHRUaW1lKCkNCisJCQkgKi8NCisJCQlAT3ZlcnJpZGUNCisJCQlwdWJsaWMgU1RFTVRpbWUgZ2V0TmV4dFRpbWUoKSB7DQorCQkJCXNldEN1cnJlbnRUaW1lKGdldEN1cnJlbnRUaW1lKCkuYWRkSW5jcmVtZW50KGdldFRpbWVJbmNyZW1lbnQoKSkpOw0KKwkJCQlzZXRXb3JrQ29tcGxldGUoTWF0aC5taW4oZ2V0V29ya0NvbXBsZXRlKCkgKyBnZXRXb3JrSW5jcmVtZW50KCksIDEwMCkpOw0KKwkJCQlyZXR1cm4gZ2V0Q3VycmVudFRpbWUoKTsNCisJCQl9DQorDQorCQkJLyoqDQorCQkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2NlbmFyaW8uaW1wbC5TZXF1ZW5jZXJJbXBsI2dldFRpbWVEZWx0YSgpDQorCQkJICovDQorCQkJQE92ZXJyaWRlDQorCQkJcHVibGljIGxvbmcgZ2V0VGltZURlbHRhKCkgew0KKwkJCQlyZXR1cm4gc3VwZXIuZ2V0VGltZURlbHRhKCk7DQorCQkJfQ0KKw0KKwkJCS8qKg0KKwkJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNjZW5hcmlvLmltcGwuU2VxdWVuY2VySW1wbCNnZXRXb3JrSW5jcmVtZW50KCkNCisJCQkgKi8NCisJCQlAT3ZlcnJpZGUNCisJCQlwdWJsaWMgaW50IGdldFdvcmtJbmNyZW1lbnQoKSB7DQorCQkJCWludCByZXRWYWx1ZSA9IDA7DQorCQkJCS8vIElzIHRoZXJlIGEgd29yayBpbmNyZW1lbnQ/DQorCQkJCWlmIChnZXREdXJhdGlvbigpICE9IFVOS05PV05fRFVSQVRJT04pIHsNCisJCQkJCS8vIFllcw0KKwkJCQkJLy8gVGhlIHdvcmsgaW5jcmVtZW50IGNvdWxkIGJlIGZyYWN0aW9uYWwgKDwxLjApLiBJZiBzbyB0aGVuIGl0IHdpbGwNCisJCQkJCS8vIG5vdCBhY2N1bXVsYXRlIGluIHRoZSBwcm9ncmVzcyBtb25pdG9yLiBTbywgd2Uga2VlcCBhIHJ1bm5pbmcgc3VtDQorCQkJCQkvLyBvZiB0aGUgd29yayBpbmNyZW1lbnQgYW5kIHdoZW4gaXQgZXhjZWVkcyAxLjAgd2UgcmV0dXJuIHRoZSB2YWx1ZSBsZXNzDQorCQkJCQkvLyB0aGUgZnJhY3Rpb25hbCBwYXJ0IGFuZCBrZWVwIHRoYXQgZm9yIHRoZSBmdXR1cmUuDQorCQkJCQl3b3JrSW5jcmVtZW50UnVubmluZ1RvdGFsICs9IDEwMC4wICogZ2V0VGltZUluY3JlbWVudCgpDQorCQkJCQkJCS8gZ2V0RHVyYXRpb24oKTsNCisJCQkJCQ0KKwkJCQkJLy8gRG8gd2UgaGF2ZSBtb3JlIHRoYW4gMS4wPw0KKwkJCQkJaWYgKHdvcmtJbmNyZW1lbnRSdW5uaW5nVG90YWwgPj0gMS4wKSB7DQorCQkJCQkJLy8gWWVzDQorCQkJCQkJLy8kQU5BTFlTSVMtSUdOT1JFDQorCQkJCQkJcmV0VmFsdWUgPSAoaW50KXdvcmtJbmNyZW1lbnRSdW5uaW5nVG90YWw7DQorCQkJCQkJd29ya0luY3JlbWVudFJ1bm5pbmdUb3RhbCAtPSByZXRWYWx1ZTsNCisJCQkJCX0NCisJCQkJfQ0KKw0KKwkJCQlyZXR1cm4gcmV0VmFsdWU7DQorCQkJfQ0KKw0KKwkJCS8qKg0KKwkJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNjZW5hcmlvLmltcGwuU2VxdWVuY2VySW1wbCNpc1RpbWVUb1N0b3AoKQ0KKwkJCSAqLw0KKwkJCUBPdmVycmlkZQ0KKwkJCXB1YmxpYyBib29sZWFuIGlzVGltZVRvU3RvcCgpIHsNCisJCQkJYm9vbGVhbiByZXRWYWx1ZSA9IGZhbHNlOw0KKwkJCQkvLyBJcyB0aGVyZSBhbiBlbmQgdGltZT8NCisJCQkJaWYgKGdldEVuZFRpbWUoKSAhPSBudWxsKSB7DQorCQkJCQkvLyBZZXMNCisJCQkJCXJldFZhbHVlID0gZ2V0Q3VycmVudFRpbWUoKS5nZXRUaW1lKCkuYWZ0ZXIoZ2V0RW5kVGltZSgpLmdldFRpbWUoKSk7DQorCQkJCX0NCisJCQkJcmV0dXJuIHJldFZhbHVlOw0KKwkJCX0NCisNCisJCQlAT3ZlcnJpZGUNCisJCQlwdWJsaWMgaW50IGdldEN5Y2xlKCkgew0KKwkJCQlyZXR1cm4gMDsNCisJCQl9DQorDQorCQkJDQorCQl9Ow0KKwkJcmV0VmFsdWUuc2V0U3RhcnRUaW1lKGNyZWF0ZVNURU1UaW1lKDIwMDAsIDAxLCAwMSkpOw0KKwkJcmV0VmFsdWUuZ2V0Q3VycmVudFRpbWUoKTsNCisJCXJldFZhbHVlLnNldEVuZFRpbWUoY3JlYXRlU1RFTVRpbWUoMjAwMCwgMDEsIDEwKSk7DQorCQlyZXRWYWx1ZS5zZXRVUkkoU0VRVUVOQ0VSX1VSSSk7DQorCQlyZXR1cm4gcmV0VmFsdWU7DQorCX0gLy8gZ2V0VGVzdFNlcXVlbmNlcg0KKwkNCisJDQorfSAvL1NvbHZlclRlc3QNCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9zb2x2ZXIvdGVzdHMvU29sdmVyVGVzdHMuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3NvbHZlci90ZXN0cy9Tb2x2ZXJUZXN0cy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjllMWY1ZGMKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9zb2x2ZXIvdGVzdHMvU29sdmVyVGVzdHMuamF2YQpAQCAtMCwwICsxLDU1IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zb2x2ZXIudGVzdHM7DQorDQorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisgKiBDb3B5cmlnaHQgKGMpIDIwMDkgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuDQorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscw0KKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMA0KKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0DQorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwNCisgKg0KKyAqIENvbnRyaWJ1dG9yczoNCisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uDQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQorDQoraW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Ow0KK2ltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdFN1aXRlOw0KK2ltcG9ydCBqdW5pdC50ZXh0dWkuVGVzdFJ1bm5lcjsNCisNCisvKioNCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKyAqIEEgdGVzdCBzdWl0ZSBmb3IgdGhlICc8ZW0+PGI+c29sdmVyPC9iPjwvZW0+JyBwYWNrYWdlLg0KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKyAqIEBnZW5lcmF0ZWQNCisgKi8NCitwdWJsaWMgY2xhc3MgU29sdmVyVGVzdHMgZXh0ZW5kcyBUZXN0U3VpdGUgew0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsNCisJCVRlc3RSdW5uZXIucnVuKHN1aXRlKCkpOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIHN0YXRpYyBUZXN0IHN1aXRlKCkgew0KKwkJVGVzdFN1aXRlIHN1aXRlID0gbmV3IFNvbHZlclRlc3RzKCJzb2x2ZXIgVGVzdHMiKTsgLy8kTk9OLU5MUy0xJA0KKwkJc3VpdGUuYWRkVGVzdFN1aXRlKFNvbHZlclRlc3QuY2xhc3MpOw0KKwkJcmV0dXJuIHN1aXRlOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIFNvbHZlclRlc3RzKFN0cmluZyBuYW1lKSB7DQorCQlzdXBlcihuYW1lKTsNCisJfQ0KKw0KK30gLy9Tb2x2ZXJUZXN0cw0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3Rlc3RzL0FjdGl2YXRvci5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvdGVzdHMvQWN0aXZhdG9yLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDAyZmNjYgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3Rlc3RzL0FjdGl2YXRvci5qYXZhCkBAIC0wLDAgKzEsOTQgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnRlc3RzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QbHVnaW47CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlN0YXR1czsKK2ltcG9ydCBvcmcub3NnaS5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dDsKKworLyoqCisgKiBUaGUgYWN0aXZhdG9yIGNsYXNzIGNvbnRyb2xzIHRoZSBwbHVnLWluIGxpZmUgY3ljbGUKKyAqLworcHVibGljIGNsYXNzIEFjdGl2YXRvciBleHRlbmRzIFBsdWdpbiB7CisKKwkvKioKKwkgKiBUaGUgcGx1Zy1pbiBJRAorCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFBMVUdJTl9JRCA9ICJvcmcuZWNsaXBzZS5zdGVtLmNvcmUudGVzdCI7CisKKwkvLyBUaGUgc2hhcmVkIGluc3RhbmNlCisJcHJpdmF0ZSBzdGF0aWMgQWN0aXZhdG9yIHBsdWdpbjsKKworCS8qKgorCSAqIFRoZSBjb25zdHJ1Y3RvcgorCSAqLworCXB1YmxpYyBBY3RpdmF0b3IoKSB7CisJCXBsdWdpbiA9IHRoaXM7CisJfQorCQorCS8qKgorCSAqIExvZyBpbmZvcm1hdGlvbiB0byB0aGUgSUxvZyBmb3IgdGhpcyBwbHVnaW4KKwkgKiBUaGUgbWV0aG9kIGlzIG92ZXJsb2FkZWQgdG8gYWxsb3cgZm9yIGxvZ0luZm9ybWF0aW9uIHdpdGhvdXQgYW4gZXJyb3IgCisJICogbWV0aG9kIHNldHMgdGhlIGVycm9yIHRvIG51bGwuIFRoaXMgc2hvdWxkIGJlIHVzZWQgaW5zdGVhZCBvZiBTeXN0ZW0ub3V0LnByaW50bG4KKwkgKiB0aHJvdWdob3V0IHRoZSBjb2RlLgorCSAqIEBwYXJhbSBtZXNzYWdlCisJICogICAgICAgICAgICB0aGUgbG9jYWxpemVkIGluZm9ybWF0aW9uIG1lc3NhZ2UgdGV4dAorCSAqCisJICovCisJcHVibGljIHN0YXRpYyB2b2lkIGxvZ0luZm9ybWF0aW9uKFN0cmluZyBtZXNzYWdlKSB7CisJCXBsdWdpbi5nZXRMb2coKS5sb2coCisJCQkJbmV3IFN0YXR1cyhJU3RhdHVzLklORk8sIHBsdWdpbi5nZXRCdW5kbGUoKS5nZXRTeW1ib2xpY05hbWUoKSwKKwkJCQkJCTAsIG1lc3NhZ2UsIG51bGwpKTsKKwkJCisJfSAvLyBsb2dJbmZvcm1hdGlvbgorCisJLyoqCisJICogTG9nIGluZm9ybWF0aW9uIHRvIHRoZSBJTG9nIGZvciB0aGlzIHBsdWdpbgorCSAqIAorCSAqIEBwYXJhbSBtZXNzYWdlCisJICogICAgICAgICAgICB0aGUgbG9jYWxpemVkIGluZm9ybWF0aW9uIG1lc3NhZ2UgdGV4dAorCSAqIEBwYXJhbSBleGNlcHRpb24KKwkgKiAgICAgICAgICAgIHRoZSBhc3NvY2lhdGVkIGV4Y2VwdGlvbiwgb3IgbnVsbAorCSAqLworCXB1YmxpYyBzdGF0aWMgdm9pZCBsb2dFcnJvcihTdHJpbmcgbWVzc2FnZSwgVGhyb3dhYmxlIGV4Y2VwdGlvbikgeworCQlwbHVnaW4uZ2V0TG9nKCkubG9nKAorCQkJCW5ldyBTdGF0dXMoSVN0YXR1cy5JTkZPLCBwbHVnaW4uZ2V0QnVuZGxlKCkuZ2V0U3ltYm9saWNOYW1lKCksCisJCQkJCQkwLCBtZXNzYWdlLCBleGNlcHRpb24pKTsKKwl9IC8vIGxvZ0luZm9ybWF0aW9uCisKKwkvKioKKwkgKiBAcGFyYW0gY29udGV4dAorCSAqIEB0aHJvd3MgRXhjZXB0aW9uCisJICovCisJcHVibGljIHZvaWQgc3RhcnQoQnVuZGxlQ29udGV4dCBjb250ZXh0KSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJc3VwZXIuc3RhcnQoY29udGV4dCk7CisJfQorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGx1Z2luI3N0b3Aob3JnLm9zZ2kuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHQpCisJICovCisJcHVibGljIHZvaWQgc3RvcChCdW5kbGVDb250ZXh0IGNvbnRleHQpIHRocm93cyBFeGNlcHRpb24geworCQlwbHVnaW4gPSBudWxsOworCQlzdXBlci5zdG9wKGNvbnRleHQpOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIHNoYXJlZCBpbnN0YW5jZQorCSAqIAorCSAqIEByZXR1cm4gdGhlIHNoYXJlZCBpbnN0YW5jZQorCSAqLworCXB1YmxpYyBzdGF0aWMgQWN0aXZhdG9yIGdldERlZmF1bHQoKSB7CisJCXJldHVybiBwbHVnaW47CisJfQorCit9CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS90ZXN0cy9UZXN0Q29uc3RhbnRzLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS90ZXN0cy9UZXN0Q29uc3RhbnRzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTY5MDZhOAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3Rlc3RzL1Rlc3RDb25zdGFudHMuamF2YQpAQCAtMCwwICsxLDI1IEBACisvLyBUZXN0Q29uc3RhbnRzLmphdmEKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnRlc3RzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqCisgKiBUaGlzIGludGVyZmFjZSBjb250YWlucyBjb25zdGFudHMgdXNlZCBieSBTVEVNJ3MgdGVzdHMuCisgKi8KK3B1YmxpYyBpbnRlcmZhY2UgVGVzdENvbnN0YW50cyB7CisKKwkvKioKKwkgKiBUaGlzIGlzIHRoZSBVUkkgc3RyaW5nIG9mIHRoZSBzZXJpYWxpemVkIHRlc3Qgc2NlbmFyaW8gdXNlZCBmb3IgSlVuaXQKKwkgKiB0ZXN0cworCSAqLworCVN0cmluZyBKVU5JVF9URVNUX1NDRU5BUklPXzFfVVJJX1NUUklORyA9ICJwbGF0Zm9ybTovcmVzb3VyY2Uvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnRlc3QvZGF0YS9zY2VuYXJpb3MvYmFzaWMvdGVzdHNjZW5hcmlvMS5zY2VuYXJpbyI7Cit9IC8vIFRlc3RDb25zdGFudHMKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3Rlc3RzL1Rlc3RMb2dQZXJmb3JtYW5jZS5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvdGVzdHMvVGVzdExvZ1BlcmZvcm1hbmNlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTg5NTFhYQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3Rlc3RzL1Rlc3RMb2dQZXJmb3JtYW5jZS5qYXZhCkBAIC0wLDAgKzEsODkgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnRlc3RzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA5IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGphdmEuaW8uRmlsZVdyaXRlcjsKK2ltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOworCitwdWJsaWMgY2xhc3MgVGVzdExvZ1BlcmZvcm1hbmNlIHsKKwlwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmcgW10gYXJncykgeworCQl0cnkgeworCQkJVGVzdExvZ1BlcmZvcm1hbmNlIHRlc3QgPSBuZXcgVGVzdExvZ1BlcmZvcm1hbmNlKCk7CisJCQl0ZXN0LnRlc3QxKCk7CisJCQl0ZXN0LnRlc3QyKCk7CisJCX0gY2F0Y2goRXhjZXB0aW9uIGUpIHsKKwkJCWUucHJpbnRTdGFja1RyYWNlKCk7CisJCX0KKwl9CisJCisJcHJpdmF0ZSB2b2lkIHRlc3QxKCkgIHRocm93cyBJT0V4Y2VwdGlvbnsKKwkJLy8gQ3JlYXRlIDEwMCBmaWxlcyBhbmQgd3JpdGUgCisJCS8vIDQgY29sdW1ucywgMTAwMDAgcm93cyB0byBlYWNoIGZpbGUKKwkJCisJCUZpbGVXcml0ZXIgW10gZmlsZVdyaXRlcnMgPSBuZXcgRmlsZVdyaXRlclsyMDBdOworCQkKKwkJbG9uZyBub3cgPSBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKTsKKwkKKwkJZm9yKGludCBpbmQgPSAwO2luZDxmaWxlV3JpdGVycy5sZW5ndGg7KytpbmQpIHsKKwkJCWZpbGVXcml0ZXJzW2luZF0gPSB0aGlzLmNyZWF0ZUZpbGUoImM6XFxwZXJmdGVzdFxcdGVzdDFfIisoaW5kKSsiLmNzdiIpOworCQl9CisJCQorCQlTdHJpbmcgZGF0YSA9ICJDT0wxLENPTDIsQ09MMyxDT0w0IjsKKwkJZm9yKGludCBpPTA7aTwxMDAwMDsrK2kpIHsKKwkJCWZvcihpbnQgaW5kID0gMDtpbmQ8ZmlsZVdyaXRlcnMubGVuZ3RoOysraW5kKSB7CisJCQkJZmlsZVdyaXRlcnNbaW5kXS5hcHBlbmQoZGF0YSk7CisJCQkJZmlsZVdyaXRlcnNbaW5kXS5hcHBlbmQoIlxuIik7CisJCQkJaWYoaSAlIDUwID09IDApIGZpbGVXcml0ZXJzW2luZF0uZmx1c2goKTsKKwkJCX0KKwkJfQorCQlmb3IoRmlsZVdyaXRlciBmdzogZmlsZVdyaXRlcnMpIHsKKwkJCWZ3LmZsdXNoKCk7CisJCQlmdy5jbG9zZSgpOworCQl9CisJCWxvbmcgdGhlbiA9IFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpOworCQlTeXN0ZW0ub3V0LnByaW50bG4oIlRlc3QgMTogIisodGhlbiAtIG5vdykpOworCX0KKwkKKwlwcml2YXRlIHZvaWQgdGVzdDIoKSB0aHJvd3MgSU9FeGNlcHRpb24geworCQkvLyBDcmVhdGUgNCBmaWxlcyBhbmQgd3JpdGUgCisJCS8vIDEwMCBjb2x1bW5zLCAxMDAwMCByb3dzIHRvIGVhY2ggZmlsZQorCQkKKwkJRmlsZVdyaXRlciBbXSBmaWxlV3JpdGVycyA9IG5ldyBGaWxlV3JpdGVyWzRdOworCQlTdHJpbmcgZGF0YSA9ICIiOworCQlmb3IoaW50IGNvbD0wO2NvbDwyMDA7Kytjb2wpIGRhdGEgPSBkYXRhKyJDT0wiK2NvbCsiLCI7CisJCWxvbmcgbm93ID0gU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCk7CisJCisJCWZvcihpbnQgaW5kID0gMDtpbmQ8ZmlsZVdyaXRlcnMubGVuZ3RoOysraW5kKSB7CisJCQlmaWxlV3JpdGVyc1tpbmRdID0gdGhpcy5jcmVhdGVGaWxlKCJjOlxccGVyZnRlc3RcXHRlc3QyXyIrKGluZCkrIi5jc3YiKTsKKwkJfQorCQkKKwkJCisJCWZvcihpbnQgaT0wO2k8MTAwMDA7KytpKSB7CisJCQlmb3IoaW50IGluZCA9IDA7aW5kPGZpbGVXcml0ZXJzLmxlbmd0aDsrK2luZCkgeworCQkJCWZpbGVXcml0ZXJzW2luZF0uYXBwZW5kKGRhdGEpOworCQkJCWZpbGVXcml0ZXJzW2luZF0uYXBwZW5kKCJcbiIpOworCQkJCWlmKGkgJSA1MCA9PSAwKSBmaWxlV3JpdGVyc1tpbmRdLmZsdXNoKCk7CisJCQl9CisJCX0KKwkJZm9yKEZpbGVXcml0ZXIgZnc6IGZpbGVXcml0ZXJzKSB7CisJCQlmdy5mbHVzaCgpOworCQkJZncuY2xvc2UoKTsKKwkJfQorCQlsb25nIHRoZW4gPSBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKTsKKwkJU3lzdGVtLm91dC5wcmludGxuKCJUZXN0IDI6ICIrKHRoZW4gLSBub3cpKTsKKwl9CisJCisJcHJpdmF0ZSBGaWxlV3JpdGVyIGNyZWF0ZUZpbGUoU3RyaW5nIGZpbGVuYW1lKSB0aHJvd3MgSU9FeGNlcHRpb24geworCQlGaWxlV3JpdGVyIGZ3ID0gbmV3IEZpbGVXcml0ZXIoZmlsZW5hbWUpOworCQlyZXR1cm4gZnc7CisJfQorfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvdGVzdHMvdXRpbC9VdGlsLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS90ZXN0cy91dGlsL1V0aWwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMTI2OGUyCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvdGVzdHMvdXRpbC9VdGlsLmphdmEKQEAgLTAsMCArMSwxMjUgQEAKKy8vIFV0aWwuamF2YQorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUudGVzdHMudXRpbDsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlVSSTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuU1RFTVVSSTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuVXRpbGl0eTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLkR1YmxpbkNvcmU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5JZGVudGlmaWFibGU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5pbXBsLklkZW50aWZpYWJsZUZpbHRlckltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkdyYXBoOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC50ZXN0cy5HcmFwaFRlc3Q7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLk1vZGVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5Nb2RlbEZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLlNURU1UaW1lOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC50ZXN0cy5Nb2RlbFRlc3Q7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNjZW5hcmlvLlNjZW5hcmlvOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zY2VuYXJpby50ZXN0cy5TY2VuYXJpb1Rlc3Q7CisKKy8qKgorICogVGhpcyBjbGFzcyBob2xkcyB1dGlsaXR5IG1ldGhvZHMgZm9yIHRlc3RpbmcuIFRoZSBNYWluIG1ldGhvZCBjcmVhdGVzCisgKiBpbnN0YW5jZXMgb2YgdGhlIHRoZSBncmFwaCwgbW9kZWwgYW5kIHNjZW5hcmlvJ3MgYmVpbmcgdXNlZCBmb3IgdGhlIEpVbml0CisgKiB0ZXN0cyBhbmQgc2VyaWFsaXplcyB0aGVtLgorICovCitwdWJsaWMgY2xhc3MgVXRpbCB7CisKKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgU0NFTkFSSU9fRklMRV9OQU1FID0gInRlc3RzY2VuYXJpby54bWwiOworCisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEdSQVBIX0ZJTEVfTkFNRSA9ICJ0ZXN0Z3JhcGgueG1sIjsKKworCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBNT0RFTF9GSUxFX05BTUUgPSAidGVzdG1vZGVsLnhtbCI7CisKKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgQ0FOT05JQ0FMX0dSQVBIX0ZJTEVfTkFNRSA9ICJ0ZXN0Y2Fub25pY2FsZ3JhcGgueG1sIjsKKworCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKGZpbmFsIFN0cmluZ1tdIGFyZ3MpIHsKKwkJdHJ5IHsKKwkJCXNlcmlhbGl6ZUdyYXBoKEdSQVBIX0ZJTEVfTkFNRSk7CisJCQlzZXJpYWxpemVNb2RlbChNT0RFTF9GSUxFX05BTUUpOworCQkJc2VyaWFsaXplU2NlbmFyaW8oU0NFTkFSSU9fRklMRV9OQU1FKTsKKwkJCXNlcmlhbGl6ZUNhbm9uaWNhbEdyYXBoKENBTk9OSUNBTF9HUkFQSF9GSUxFX05BTUUpOworCQl9IGNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7CisJCQllLnByaW50U3RhY2tUcmFjZSgpOworCQl9CisJfSAvLyBtYWluCisKKwkvKioKKwkgKiBTZXJpYWxpemUgYSBncmFwaC4KKwkgKiAKKwkgKiBAcGFyYW0gZmlsZU5hbWUKKwkgKiAgICAgICAgICAgIHRoZSBuYW1lIG9mIHRoZSBmaWxlIHRvIHNlcmlhbGl6ZSBpbnRvCisJICogQHRocm93cyBJT0V4Y2VwdGlvbiAKKwkgKi8KKwlwcml2YXRlIHN0YXRpYyB2b2lkIHNlcmlhbGl6ZUdyYXBoKGZpbmFsIFN0cmluZyBmaWxlTmFtZSkgdGhyb3dzIElPRXhjZXB0aW9uIHsKKwkJZmluYWwgR3JhcGggZ3JhcGggPSBHcmFwaFRlc3QuY3JlYXRlRml4dHVyZSgpOworCQlyZWZyZXNoRHVibGluQ29yZShncmFwaCk7CisJCVV0aWxpdHkuc2VyaWFsaXplSWRlbnRpZmlhYmxlKGdyYXBoLCBjcmVhdGVVUkkoZmlsZU5hbWUpKTsKKwl9IC8vIHNlcmlhbGl6ZUdyYXBoCisKKwkvKioKKwkgKiBTZXJpYWxpemUgYSBtb2RlbC4KKwkgKiAKKwkgKiBAcGFyYW0gZmlsZU5hbWUKKwkgKiAgICAgICAgICAgIHRoZSBuYW1lIG9mIHRoZSBmaWxlIHRvIHNlcmlhbGl6ZSBpbnRvCisJICogQHRocm93cyBJT0V4Y2VwdGlvbiAKKwkgKi8KKwlwcml2YXRlIHN0YXRpYyB2b2lkIHNlcmlhbGl6ZU1vZGVsKGZpbmFsIFN0cmluZyBmaWxlTmFtZSkgdGhyb3dzIElPRXhjZXB0aW9uIHsKKwkJZmluYWwgTW9kZWwgbW9kZWwgPSBNb2RlbFRlc3QuY3JlYXRlRml4dHVyZSgpOworCQlyZWZyZXNoRHVibGluQ29yZShtb2RlbCk7CisJCVV0aWxpdHkuc2VyaWFsaXplSWRlbnRpZmlhYmxlKG1vZGVsLCBjcmVhdGVVUkkoZmlsZU5hbWUpKTsKKwl9IC8vIHNlcmlhbGl6ZU1vZGVsCisKKwkvKioKKwkgKiBTZXJpYWxpemUgYSBzY2VuYXJpby4KKwkgKiBAdGhyb3dzIElPRXhjZXB0aW9uIAorCSAqLworCXByaXZhdGUgc3RhdGljIHZvaWQgc2VyaWFsaXplU2NlbmFyaW8oZmluYWwgU3RyaW5nIGZpbGVOYW1lKSB0aHJvd3MgSU9FeGNlcHRpb24geworCQlmaW5hbCBTY2VuYXJpbyBzY2VuYXJpbyA9IFNjZW5hcmlvVGVzdC5jcmVhdGVGaXh0dXJlKCk7CisJCXJlZnJlc2hEdWJsaW5Db3JlKHNjZW5hcmlvKTsKKwkJVXRpbGl0eS5zZXJpYWxpemVJZGVudGlmaWFibGUoc2NlbmFyaW8sIGNyZWF0ZVVSSShmaWxlTmFtZSkpOworCX0gLy8gc2VyaWFsaXplU2NlbmFyaW8KKworCS8qKgorCSAqIEBwYXJhbSBjYW5vbmljYWxfZ3JhcGhfZmlsZV9uYW1lMgorCSAqIEB0aHJvd3MgSU9FeGNlcHRpb24gCisJICovCisJcHJpdmF0ZSBzdGF0aWMgdm9pZCBzZXJpYWxpemVDYW5vbmljYWxHcmFwaChmaW5hbCBTdHJpbmcgZmlsZU5hbWUpIHRocm93cyBJT0V4Y2VwdGlvbiB7CisJCWZpbmFsIFNjZW5hcmlvIHNjZW5hcmlvID0gU2NlbmFyaW9UZXN0LmNyZWF0ZUZpeHR1cmUoKTsKKwkJcmVmcmVzaER1YmxpbkNvcmUoc2NlbmFyaW8pOworCQlTVEVNVGltZSBub3cgPSBNb2RlbEZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZVNURU1UaW1lKCk7CisJCWZpbmFsIEdyYXBoIGNhbm9uaWNhbEdyYXBoID0gc2NlbmFyaW8uZ2V0TW9kZWwoKS5nZXRDYW5vbmljYWxHcmFwaCgKKwkJCQlTVEVNVVJJLmNyZWF0ZVVSSSgiY2Fub25pY2FsIiksIG5ldyBJZGVudGlmaWFibGVGaWx0ZXJJbXBsKHNjZW5hcmlvLmdldE1vZGVsKCkuZ2V0RHVibGluQ29yZSgpLmdldENvdmVyYWdlKCkpLCBub3cpOworCQlVdGlsaXR5LnNlcmlhbGl6ZUlkZW50aWZpYWJsZShjYW5vbmljYWxHcmFwaCwgY3JlYXRlVVJJKGZpbGVOYW1lKSk7CisJfSAvLyBzZXJpYWxpemVDYW5vbmljYWxHcmFwaAorCisJLyoqCisJICogQHBhcmFtIGZpbGVOYW1lCisJICogQHJldHVybiBhIHVyaQorCSAqLworCXByaXZhdGUgc3RhdGljIFVSSSBjcmVhdGVVUkkoZmluYWwgU3RyaW5nIGZpbGVQYXRoKSB7CisJCWZpbmFsIFVSSSByZXRWYWx1ZSA9IFVSSS5jcmVhdGVVUkkoZmlsZVBhdGgpOworCisJCXJldHVybiByZXRWYWx1ZTsKKwl9IC8vIGNyZWF0ZVVSSQorCisJLyoqCisJICogQHBhcmFtIGdyYXBoCisJICovCisJcHJpdmF0ZSBzdGF0aWMgdm9pZCByZWZyZXNoRHVibGluQ29yZShmaW5hbCBJZGVudGlmaWFibGUgaWRlbnRpZmlhYmxlKSB7CisJCWZpbmFsIER1YmxpbkNvcmUgZGMgPSBpZGVudGlmaWFibGUuZ2V0RHVibGluQ29yZSgpOworCQlkYy5wb3B1bGF0ZSgpOworCQlkYy5zZXRGb3JtYXQoaWRlbnRpZmlhYmxlLmVDbGFzcygpLmdldEVQYWNrYWdlKCkuZ2V0TnNVUkkoKSk7CisJfSAvLyByZWZyZXNoRHVibGluQ29yZQorfSAvLyBVdGlsCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS90cmlnZ2VyL3Rlc3RzL1RyaWdnZXJUZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS90cmlnZ2VyL3Rlc3RzL1RyaWdnZXJUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWYzMzNkYQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3RyaWdnZXIvdGVzdHMvVHJpZ2dlclRlc3QuamF2YQpAQCAtMCwwICsxLDg1IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS50cmlnZ2VyLnRlc3RzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGp1bml0LnRleHR1aS5UZXN0UnVubmVyOworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlVSSTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuU1RFTVVSSTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwudGVzdHMuRGVjb3JhdG9yVGVzdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUudHJpZ2dlci5UcmlnZ2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS50cmlnZ2VyLlRyaWdnZXJGYWN0b3J5OworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiBBIHRlc3QgY2FzZSBmb3IgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPlRyaWdnZXI8L2I+PC9lbT4nLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK0BTdXBwcmVzc1dhcm5pbmdzKCJhbGwiKQorcHVibGljIGNsYXNzIFRyaWdnZXJUZXN0IGV4dGVuZHMgRGVjb3JhdG9yVGVzdCB7CisKKwlwdWJsaWMgc3RhdGljIFVSSSBUUklHR0VSX1VSSSA9IFNURU1VUkkuY3JlYXRlVVJJKCJ0cmlnZ2VyL3RyaWdnZXJUZXN0LmRlY29yYXRvciIpOworCQorCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKKwkJVGVzdFJ1bm5lci5ydW4oVHJpZ2dlclRlc3QuY2xhc3MpOworCX0KKworCS8qKgorCSAqIENvbnN0cnVjdHMgYSBuZXcgVHJpZ2dlciB0ZXN0IGNhc2Ugd2l0aCB0aGUgZ2l2ZW4gbmFtZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVHJpZ2dlclRlc3QoU3RyaW5nIG5hbWUpIHsKKwkJc3VwZXIobmFtZSk7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgZml4dHVyZSBmb3IgdGhpcyBUcmlnZ2VyIHRlc3QgY2FzZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgVHJpZ2dlciBnZXRGaXh0dXJlKCkgeworCQlyZXR1cm4gKFRyaWdnZXIpZml4dHVyZTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlI3NldFVwKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgc2V0VXAoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJc2V0Rml4dHVyZShUcmlnZ2VyRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlVHJpZ2dlcigpKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlI3RlYXJEb3duKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCQorCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIHRlYXJEb3duKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCXNldEZpeHR1cmUobnVsbCk7CisJfQorCit9IC8vVHJpZ2dlclRlc3QKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3RyaWdnZXIvdGVzdHMvVHJpZ2dlclRlc3RzLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS90cmlnZ2VyL3Rlc3RzL1RyaWdnZXJUZXN0cy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgxMzAyMTEKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS90cmlnZ2VyL3Rlc3RzL1RyaWdnZXJUZXN0cy5qYXZhCkBAIC0wLDAgKzEsNTUgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnRyaWdnZXIudGVzdHM7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3Q7CitpbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RTdWl0ZTsKK2ltcG9ydCBqdW5pdC50ZXh0dWkuVGVzdFJ1bm5lcjsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogQSB0ZXN0IHN1aXRlIGZvciB0aGUgJzxlbT48Yj50cmlnZ2VyPC9iPjwvZW0+JyBwYWNrYWdlLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBUcmlnZ2VyVGVzdHMgZXh0ZW5kcyBUZXN0U3VpdGUgeworCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgeworCQlUZXN0UnVubmVyLnJ1bihzdWl0ZSgpKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgc3RhdGljIFRlc3Qgc3VpdGUoKSB7CisJCVRlc3RTdWl0ZSBzdWl0ZSA9IG5ldyBUcmlnZ2VyVGVzdHMoInRyaWdnZXIgVGVzdHMiKTsgLy8kTk9OLU5MUy0xJAorCQlzdWl0ZS5hZGRUZXN0U3VpdGUoVHJpZ2dlclRlc3QuY2xhc3MpOworCQlyZXR1cm4gc3VpdGU7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFRyaWdnZXJUZXN0cyhTdHJpbmcgbmFtZSkgeworCQlzdXBlcihuYW1lKTsKKwl9CisKK30gLy9UcmlnZ2VyVGVzdHMKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS90ZW1wLy5jdnNpZ25vcmUgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvdGVtcC8uY3ZzaWdub3JlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI5NGZjYjYKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvdGVtcC8uY3ZzaWdub3JlCkBAIC0wLDAgKzEsMyBAQAorKi5ncmFwaAorKi5tb2RlbAorKi5zY2VuYXJpbwpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Rlc3QueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Rlc3QueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdjZDEyMjMKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvdGVzdC54bWwKQEAgLTAsMCArMSw1MyBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKworPHByb2plY3QgbmFtZT0idGVzdHN1aXRlIiBkZWZhdWx0PSJydW4iIGJhc2VkaXI9Ii4iPgorICA8IS0tIFRoZSBwcm9wZXJ0eSAke2VjbGlwc2UtaG9tZX0gc2hvdWxkIGJlIHBhc3NlZCBpbnRvIHRoaXMgc2NyaXB0IC0tPgorICA8IS0tIFNldCBhIG1lYW5pbmdmdWwgZGVmYXVsdCB2YWx1ZSBmb3Igd2hlbiBpdCBpcyBub3QuIC0tPgorICA8cHJvcGVydHkgbmFtZT0iZWNsaXBzZS1ob21lIiB2YWx1ZT0iIi8+CisKKworICA8IS0tIHNldHMgdGhlIHByb3BlcnRpZXMgZWNsaXBzZS1ob21lLCBhbmQgbGlicmFyeS1maWxlIC0tPgorICA8cHJvcGVydHkgbmFtZT0icGx1Z2luLW5hbWUiIHZhbHVlPSJvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUiLz4KKyAgPHByb3BlcnR5IG5hbWU9ImxpYnJhcnktZmlsZSIKKyAgICAgICAgICAgIHZhbHVlPSIke2VjbGlwc2UtaG9tZX0vcGx1Z2lucy9vcmcuZWNsaXBzZS50ZXN0XzMuMy4wL2xpYnJhcnkueG1sIi8+CisKKyAgPCEtLSBUaGlzIHRhcmdldCBob2xkcyBhbGwgaW5pdGlhbGl6YXRpb24gY29kZSB0aGF0IG5lZWRzIHRvIGJlIGRvbmUgZm9yIC0tPgorICA8IS0tIGFsbCB0ZXN0cyB0aGF0IGFyZSB0byBiZSBydW4uIEluaXRpYWxpemF0aW9uIGZvciBpbmRpdmlkdWFsIHRlc3RzIC0tPgorICA8IS0tIHNob3VsZCBiZSBkb25lIHdpdGhpbiB0aGUgYm9keSBvZiB0aGUgc3VpdGUgdGFyZ2V0LiAtLT4KKyAgPHRhcmdldCBuYW1lPSJpbml0Ij4KKyAgICA8dHN0YW1wLz4KKyAgICA8ZGVsZXRlPgorICAgICAgPGZpbGVzZXQgZGlyPSIke2VjbGlwc2UtaG9tZX0iIGluY2x1ZGVzPSJvcmcqLnhtbCIvPgorICAgIDwvZGVsZXRlPgorICA8L3RhcmdldD4KKworICA8IS0tIFRoaXMgdGFyZ2V0IGRlZmluZXMgdGhlIHRlc3RzIHRoYXQgbmVlZCB0byBiZSBydW4uIC0tPgorICA8dGFyZ2V0IG5hbWU9InN1aXRlIj4KKyAgICA8cHJvcGVydHkgbmFtZT0iZGF0YS1kaXIiIHZhbHVlPSIke2VjbGlwc2UtaG9tZX0vdG1wIi8+CisgICAgPGRlbGV0ZSBkaXI9IiR7ZGF0YS1kaXJ9IiBxdWlldD0idHJ1ZSIvPgorICAgIDxhbnQgdGFyZ2V0PSJ1aS10ZXN0IiBhbnRmaWxlPSIke2xpYnJhcnktZmlsZX0iIGRpcj0iJHtlY2xpcHNlLWhvbWV9Ij4KKyAgICAgIDxwcm9wZXJ0eSBuYW1lPSJkYXRhLWRpciIgdmFsdWU9IiR7ZGF0YS1kaXJ9Ii8+CisgICAgICA8cHJvcGVydHkgbmFtZT0icGx1Z2luLW5hbWUiIHZhbHVlPSIke3BsdWdpbi1uYW1lfSIvPgorICAgICAgPHByb3BlcnR5IG5hbWU9ImNsYXNzbmFtZSIgdmFsdWU9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24udGVzdHMuQ29yZUFsbFRlc3RzIi8+CisgICAgPC9hbnQ+CisgIDwvdGFyZ2V0PgorCisgIDwhLS0gVGhpcyB0YXJnZXQgaG9sZHMgY29kZSB0byBjbGVhbnVwIHRoZSB0ZXN0aW5nIGVudmlyb25tZW50IGFmdGVyIC0tPgorICA8IS0tIGFmdGVyIGFsbCBvZiB0aGUgdGVzdHMgaGF2ZSBiZWVuIHJ1bi4gWW91IGNhbiB1c2UgdGhpcyB0YXJnZXQgdG8gLS0+CisgIDwhLS0gZGVsZXRlIHRlbXBvcmFyeSBmaWxlcyB0aGF0IGhhdmUgYmVlbiBjcmVhdGVkLiAtLT4KKyAgPHRhcmdldCBuYW1lPSJjbGVhbnVwIj4KKyAgPC90YXJnZXQ+CisKKyAgPCEtLSBUaGlzIHRhcmdldCBydW5zIHRoZSB0ZXN0IHN1aXRlLiBBbnkgYWN0aW9ucyB0aGF0IG5lZWQgdG8gaGFwcGVuIC0tPgorICA8IS0tIGFmdGVyIGFsbCB0aGUgdGVzdHMgaGF2ZSBiZWVuIHJ1biBzaG91bGQgZ28gaGVyZS4gLS0+CisgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LHN1aXRlLGNsZWFudXAiPgorICAgIDxhbnQgdGFyZ2V0PSJjb2xsZWN0IiBhbnRmaWxlPSIke2xpYnJhcnktZmlsZX0iIGRpcj0iJHtlY2xpcHNlLWhvbWV9Ij4KKyAgICAgIDxwcm9wZXJ0eSBuYW1lPSJpbmNsdWRlcyIgdmFsdWU9Im9yZyoueG1sIi8+CisgICAgICA8cHJvcGVydHkgbmFtZT0ib3V0cHV0LWZpbGUiIHZhbHVlPSIke3BsdWdpbi1uYW1lfS54bWwiLz4KKyAgICA8L2FudD4KKyAgPC90YXJnZXQ+CisKKyAgPCEtLSBUaGlzIHRhcmdldCBydW5zIHRoZSBwZXJmb3JtYW5jZSB0ZXN0IHN1aXRlcy4gLS0+CisgIDx0YXJnZXQgbmFtZT0icGVyZm9ybWFuY2UiPgorICA8L3RhcmdldD4KKzwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGVmaW5pdGlvbnMvLmNsYXNzcGF0aCBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGVmaW5pdGlvbnMvLmNsYXNzcGF0aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMDRlODYxCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kZWZpbml0aW9ucy8uY2xhc3NwYXRoCkBAIC0wLDAgKzEsNyBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxjbGFzc3BhdGg+CisJPGNsYXNzcGF0aGVudHJ5IGtpbmQ9InNyYyIgcGF0aD0ic3JjIi8+CisJPGNsYXNzcGF0aGVudHJ5IGtpbmQ9ImNvbiIgcGF0aD0ib3JnLmVjbGlwc2UuamR0LmxhdW5jaGluZy5KUkVfQ09OVEFJTkVSL29yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC5kZWJ1Zy51aS5sYXVuY2hlci5TdGFuZGFyZFZNVHlwZS9KMlNFLTEuNSIvPgorCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJjb24iIHBhdGg9Im9yZy5lY2xpcHNlLnBkZS5jb3JlLnJlcXVpcmVkUGx1Z2lucyIvPgorCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJvdXRwdXQiIHBhdGg9ImJpbiIvPgorPC9jbGFzc3BhdGg+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRlZmluaXRpb25zLy5wcm9qZWN0IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kZWZpbml0aW9ucy8ucHJvamVjdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZGEzOGNkCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kZWZpbml0aW9ucy8ucHJvamVjdApAQCAtMCwwICsxLDI4IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPHByb2plY3REZXNjcmlwdGlvbj4KKwk8bmFtZT5vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRlZmluaXRpb25zPC9uYW1lPgorCTxjb21tZW50PjwvY29tbWVudD4KKwk8cHJvamVjdHM+CisJPC9wcm9qZWN0cz4KKwk8YnVpbGRTcGVjPgorCQk8YnVpbGRDb21tYW5kPgorCQkJPG5hbWU+b3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YWJ1aWxkZXI8L25hbWU+CisJCQk8YXJndW1lbnRzPgorCQkJPC9hcmd1bWVudHM+CisJCTwvYnVpbGRDb21tYW5kPgorCQk8YnVpbGRDb21tYW5kPgorCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLk1hbmlmZXN0QnVpbGRlcjwvbmFtZT4KKwkJCTxhcmd1bWVudHM+CisJCQk8L2FyZ3VtZW50cz4KKwkJPC9idWlsZENvbW1hbmQ+CisJCTxidWlsZENvbW1hbmQ+CisJCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuU2NoZW1hQnVpbGRlcjwvbmFtZT4KKwkJCTxhcmd1bWVudHM+CisJCQk8L2FyZ3VtZW50cz4KKwkJPC9idWlsZENvbW1hbmQ+CisJPC9idWlsZFNwZWM+CisJPG5hdHVyZXM+CisJCTxuYXR1cmU+b3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YW5hdHVyZTwvbmF0dXJlPgorCQk8bmF0dXJlPm9yZy5lY2xpcHNlLnBkZS5QbHVnaW5OYXR1cmU8L25hdHVyZT4KKwk8L25hdHVyZXM+Cis8L3Byb2plY3REZXNjcmlwdGlvbj4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGVmaW5pdGlvbnMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kZWZpbml0aW9ucy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODU0YTU1NQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGVmaW5pdGlvbnMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzCkBAIC0wLDAgKzEsNjkgQEAKKyNNb24gSmFuIDIxIDEyOjQ2OjIzIEVTVCAyMDA4CitlY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29kZWdlbi50YXJnZXRQbGF0Zm9ybT0xLjUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvbXBsaWFuY2U9MS41CitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5kb2MuY29tbWVudC5zdXBwb3J0PWVuYWJsZWQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uYW5ub3RhdGlvblN1cGVySW50ZXJmYWNlPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uYXNzZXJ0SWRlbnRpZmllcj1lcnJvcgorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5hdXRvYm94aW5nPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZGVwcmVjYXRpb249aWdub3JlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRlcHJlY2F0aW9uSW5EZXByZWNhdGVkQ29kZT1kaXNhYmxlZAorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5kZXByZWNhdGlvbldoZW5PdmVycmlkaW5nRGVwcmVjYXRlZE1ldGhvZD1kaXNhYmxlZAorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5kaXNjb3VyYWdlZFJlZmVyZW5jZT1pZ25vcmUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZW1wdHlTdGF0ZW1lbnQ9aWdub3JlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmVudW1JZGVudGlmaWVyPWVycm9yCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZhbGx0aHJvdWdoQ2FzZT1pZ25vcmUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZmllbGRIaWRpbmc9aWdub3JlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZpbmFsUGFyYW1ldGVyQm91bmQ9aWdub3JlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZpbmFsbHlCbG9ja05vdENvbXBsZXRpbmdOb3JtYWxseT13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZvcmJpZGRlblJlZmVyZW5jZT1lcnJvcgorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5oaWRkZW5DYXRjaEJsb2NrPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW5jb21wYXRpYmxlTm9uSW5oZXJpdGVkSW50ZXJmYWNlTWV0aG9kPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW5jb21wbGV0ZUVudW1Td2l0Y2g9aWdub3JlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmluZGlyZWN0U3RhdGljQWNjZXNzPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW52YWxpZEphdmFkb2M9aWdub3JlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmludmFsaWRKYXZhZG9jVGFncz1lbmFibGVkCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmludmFsaWRKYXZhZG9jVGFnc0RlcHJlY2F0ZWRSZWY9ZW5hYmxlZAorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbnZhbGlkSmF2YWRvY1RhZ3NOb3RWaXNpYmxlUmVmPWVuYWJsZWQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW52YWxpZEphdmFkb2NUYWdzVmlzaWJpbGl0eT1wdWJsaWMKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubG9jYWxWYXJpYWJsZUhpZGluZz1pZ25vcmUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWV0aG9kV2l0aENvbnN0cnVjdG9yTmFtZT13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdEZXByZWNhdGVkQW5ub3RhdGlvbj1pZ25vcmUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0phdmFkb2NDb21tZW50cz1pZ25vcmUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0phdmFkb2NDb21tZW50c092ZXJyaWRpbmc9ZW5hYmxlZAorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nSmF2YWRvY0NvbW1lbnRzVmlzaWJpbGl0eT1wdWJsaWMKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0phdmFkb2NUYWdzPWlnbm9yZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nSmF2YWRvY1RhZ3NPdmVycmlkaW5nPWVuYWJsZWQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0phdmFkb2NUYWdzVmlzaWJpbGl0eT1wdWJsaWMKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ092ZXJyaWRlQW5ub3RhdGlvbj1pZ25vcmUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ1NlcmlhbFZlcnNpb249d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5ub0VmZmVjdEFzc2lnbm1lbnQ9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5ub0ltcGxpY2l0U3RyaW5nQ29udmVyc2lvbj13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm5vbkV4dGVybmFsaXplZFN0cmluZ0xpdGVyYWw9aWdub3JlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm51bGxSZWZlcmVuY2U9aWdub3JlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm92ZXJyaWRpbmdQYWNrYWdlRGVmYXVsdE1ldGhvZD13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnBhcmFtZXRlckFzc2lnbm1lbnQ9aWdub3JlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnBvc3NpYmxlQWNjaWRlbnRhbEJvb2xlYW5Bc3NpZ25tZW50PXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ucmF3VHlwZVJlZmVyZW5jZT1pZ25vcmUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uc3BlY2lhbFBhcmFtZXRlckhpZGluZ0ZpZWxkPWRpc2FibGVkCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnN0YXRpY0FjY2Vzc1JlY2VpdmVyPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uc3VwcHJlc3NXYXJuaW5ncz1lbmFibGVkCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnN5bnRoZXRpY0FjY2Vzc0VtdWxhdGlvbj13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnR5cGVQYXJhbWV0ZXJIaWRpbmc9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bmNoZWNrZWRUeXBlT3BlcmF0aW9uPWlnbm9yZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bmRvY3VtZW50ZWRFbXB0eUJsb2NrPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5oYW5kbGVkV2FybmluZ1Rva2VuPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5uZWNlc3NhcnlFbHNlPWlnbm9yZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bm5lY2Vzc2FyeVR5cGVDaGVjaz13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVucXVhbGlmaWVkRmllbGRBY2Nlc3M9aWdub3JlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZERlY2xhcmVkVGhyb3duRXhjZXB0aW9uPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkRGVjbGFyZWRUaHJvd25FeGNlcHRpb25XaGVuT3ZlcnJpZGluZz1lbmFibGVkCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZEltcG9ydD13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZExhYmVsPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkTG9jYWw9aWdub3JlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZFBhcmFtZXRlcj1pZ25vcmUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkUGFyYW1ldGVyV2hlbkltcGxlbWVudGluZ0Fic3RyYWN0PWVuYWJsZWQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkUGFyYW1ldGVyV2hlbk92ZXJyaWRpbmdDb25jcmV0ZT1lbmFibGVkCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZFByaXZhdGVNZW1iZXI9aWdub3JlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnZhcmFyZ3NBcmd1bWVudE5lZWRDYXN0PXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnNvdXJjZT0xLjUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGVmaW5pdGlvbnMvTUVUQS1JTkYvTUFOSUZFU1QuTUYgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRlZmluaXRpb25zL01FVEEtSU5GL01BTklGRVNULk1GCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg2OTIzODEKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRlZmluaXRpb25zL01FVEEtSU5GL01BTklGRVNULk1GCkBAIC0wLDAgKzEsMjAgQEAKK01hbmlmZXN0LVZlcnNpb246IDEuMAorQnVuZGxlLU1hbmlmZXN0VmVyc2lvbjogMgorQnVuZGxlLU5hbWU6ICVwbHVnaW5OYW1lCitCdW5kbGUtU3ltYm9saWNOYW1lOiBvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRlZmluaXRpb25zO3NpbmdsZXRvbjo9dHJ1ZQorQnVuZGxlLVZlcnNpb246IDEuMi4xCitCdW5kbGUtQ2xhc3NQYXRoOiAuCitCdW5kbGUtVmVuZG9yOiAlcHJvdmlkZXJOYW1lCitCdW5kbGUtTG9jYWxpemF0aW9uOiBwbHVnaW4KK0V4cG9ydC1QYWNrYWdlOiBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmFkYXB0ZXJzLnJlbGF0aXZldmFsdWUsCisgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5hZGFwdGVycy5yZWxhdGl2ZXZhbHVlLmhpc3RvcnksCisgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5hZGFwdGVycy5zcGF0aWFsLAorIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuYWRhcHRlcnMuc3BhdGlhbC5nZW8sCisgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5lZGdlcy50ZXN0cywKKyBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy50ZXN0cywKKyBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLm5vZGVzLnRlc3RzCitSZXF1aXJlLUJ1bmRsZTogb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9uczt2aXNpYmlsaXR5Oj1yZWV4cG9ydCwKKyBvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUsCisgb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsCitCdW5kbGUtQWN0aXZhdGlvblBvbGljeTogbGF6eQorQnVuZGxlLVJlcXVpcmVkRXhlY3V0aW9uRW52aXJvbm1lbnQ6IEoyU0UtMS41CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRlZmluaXRpb25zL2J1aWxkLnByb3BlcnRpZXMgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRlZmluaXRpb25zL2J1aWxkLnByb3BlcnRpZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTUyMDE0MAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGVmaW5pdGlvbnMvYnVpbGQucHJvcGVydGllcwpAQCAtMCwwICsxLDEzIEBACisjIDxjb3B5cmlnaHQ+CisjIDwvY29weXJpZ2h0PgorIworIyAkSWQkCisKK2Jpbi5pbmNsdWRlcyA9IC4sXAorICAgICAgICAgICAgICAgTUVUQS1JTkYvLFwKKyAgICAgICAgICAgICAgIHBsdWdpbi5wcm9wZXJ0aWVzLFwKKyAgICAgICAgICAgICAgIG5vdGljZS5odG1sLFwKKyAgICAgICAgICAgICAgIGVwbC12MTAuaHRtbAoramFycy5jb21waWxlLm9yZGVyID0gLgorc291cmNlLi4gPSBzcmMvCitvdXRwdXQuLiA9IGJpbi8KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGVmaW5pdGlvbnMvZGF0YS9zcGF0aWFsL2dlby90ZXN0MWdtbC5nbWwgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRlZmluaXRpb25zL2RhdGEvc3BhdGlhbC9nZW8vdGVzdDFnbWwuZ21sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVjMmU0NjAKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRlZmluaXRpb25zL2RhdGEvc3BhdGlhbC9nZW8vdGVzdDFnbWwuZ21sCkBAIC0wLDAgKzEsNjggQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8TWFwIHhtbG5zOmdtbD0iaHR0cDovL3d3dy5vcGVuZ2lzLm5ldC9nbWwiIHhtbG5zOmdlb3Jzcz0iaHR0cDovL3d3dy5nZW9yc3Mub3JnL2dlb3JzcyI+Cis8dGl0bGU+VVNBIExldmVsIDIgTWFwPC90aXRsZT4KKzxzdWJUaXRsZT5BZG1pbmlzdHJhdGl2ZSBCb3VuZGFyaWVzPC9zdWJUaXRsZT4KKzx1cGRhdGVkPkF1ZyAxNiwgMjAwNiA0OjMxOjA4IFBNPC91cGRhdGVkPgorPGVudHJ5PgorPGdlb3Jzczp3aGVyZT4KKzxnbWw6UG9seWdvbiBnbWw6aWQ9IlVTLUFLLTAyMDEzIi8+CisKKzxnbWw6UG9seWdvbiBnbWw6aWQ9IlVTLUFLLTAyMjkwIi8+CisKKzxnbWw6UG9seWdvbiBnbWw6aWQ9IlVTLUFMLTAxMDAxIj4KKzxnbWw6b3V0ZXJCb3VuZGFyeUlzPgorPGdtbDpMaW5lYXJSaW5nPgorPGdtbDpwb3NMaXN0Pi04Ni45MTY5NTYgMzIuNjY0MTU4IC04Ni44MTczNDQgMzIuNjYwMTUxIC04Ni43MTM0OTUgMzIuNjY3MzgyIC04Ni42MjA2NjMgMzIuNzA2MjYgLTg2LjUyNDU5MyAzMi43MDcwNTcgLTg2LjUyNDU5MyAzMi43MDcwNTcgLTg2LjQ2ODIwMiAzMi43MDc4NTYgLTg2LjQxNjE1OSAzMi43MDc0OCAtODYuNDE1NjQ3IDMyLjcwNzQ2NCAtODYuNDEzMTE2IDMyLjcwNzM4NiAtODYuNDEzMTE2IDMyLjcwNzM4NiAtODYuNDEyNTY3IDMyLjYwNzM0NyAtODYuNDEyMzc4IDMyLjU1NzA3MSAtODYuNDEyMzQyIDMyLjUwMzYzNiAtODYuNDEyMDczIDMyLjQ5MjkzNCAtODYuNDEyMDczIDMyLjQ5MjkzNCAtODYuNDExOTczIDMyLjQ5MTYzNCAtODYuNDExOTczIDMyLjQ5MTYzNCAtODYuNDExOTczIDMyLjQ4OTM1NSAtODYuNDExOTczIDMyLjQ4NTgzNSAtODYuNDExNzczIDMyLjQ2NTczNSAtODYuNDExMTcyIDMyLjQwOTkzNyAtODYuNDExMTcyIDMyLjQwOTkzNyAtODYuNDE2NDcyIDMyLjQwNzAzNyAtODYuNDQ0Nzg1IDMyLjM5OTg2IC04Ni40NjM1NjQgMzIuMzc3Mjg4IC04Ni40OTY3NzQgMzIuMzQ0NDM4IC04Ni40OTY3NzQgMzIuMzQ0NDM4IC04Ni41MzU2NjggMzIuMzQwNDQgLTg2LjU0MjE2IDMyLjM2MTQxNyAtODYuNzA5NzE2IDMyLjM2MDQgLTg2Ljc4MjM3NyAzMi4zNzMzNzUgLTg2Ljc4NDM1NSAzMi4zMjQ0MDggLTg2LjgxNDkxMiAzMi4zNDA4MDMgLTg2LjgxNDkxMiAzMi4zNDA4MDMgLTg2Ljg0MzA5NiAzMi40MzI4MTQgLTg2Ljg2NjYwNyAzMi40NDAxMTQgLTg2LjkwMDUxOSAzMi41NTYwNTQgLTg2LjkxNjk1NiAzMi42NjQxNTggPC9nbWw6cG9zTGlzdD4KKzwvZ21sOkxpbmVhclJpbmc+Cis8L2dtbDpvdXRlckJvdW5kYXJ5SXM+Cis8L2dtbDpQb2x5Z29uPgorCis8Z21sOlBvbHlnb24gZ21sOmlkPSJVUy1BTC0wMTAwMyI+Cis8Z21sOm91dGVyQm91bmRhcnlJcz4KKzxnbWw6TGluZWFyUmluZz4KKzxnbWw6cG9zTGlzdD4tODcuOTU0NTMzIDMwLjkxOTMyNSAtODcuOTU0NjQxIDMwLjkxODU3NCAtODcuOTU0NjQxIDMwLjkxODU3NCAtODcuOTU0NTMzIDMwLjkxOTMyNSA8L2dtbDpwb3NMaXN0PgorPC9nbWw6TGluZWFyUmluZz4KKzwvZ21sOm91dGVyQm91bmRhcnlJcz4KKzwvZ21sOlBvbHlnb24+Cis8Z21sOlBvbHlnb24gZ21sOmlkPSJVUy1BTC0wMTA5NSI+Cis8Z21sOm91dGVyQm91bmRhcnlJcz4KKzxnbWw6TGluZWFyUmluZz4KKzxnbWw6cG9zTGlzdD4tODYuMzI2OTg3IDM0LjU5OTc0NCAtODYuMjIxMTkyIDM0LjU5OTg1MSAtODYuMTY3NDg0IDM0LjU5OTI2MyAtODYuMTQ4NjgxIDM0LjU4ODMzOSAtODYuMTQ5ODA2IDM0LjUzMzYzMyAtODYuMTQ5ODA2IDM0LjUzMzYzMyAtODYuMTU0Mjc1IDM0LjUzMDA1NSAtODYuMTUyNjYzIDM0LjUzMzcxOSAtODYuMTUwOTY2IDM0LjUzMzY1MyAtODYuMTQ5ODA2IDM0LjUzMzYzMyAtODYuMTQ5ODA2IDM0LjUzMzYzMyAtODYuMTQ1NTMzIDM0LjUzMzQ3OSAtODYuMTQ1NjAyIDM0LjUyMDAxMSAtODYuMDk4NDc5IDM0LjUwMDA4NyAtODYuMDU3NzEyIDM0LjQ3NTk5NCA8L2dtbDpwb3NMaXN0PgorPC9nbWw6TGluZWFyUmluZz4KKzxnbWw6TGluZWFyUmluZz4KKzxnbWw6cG9zTGlzdD4tODYuMTQ5ODA2IDM0LjUzMzYzMyAtODYuMTQ4NjgxIDM0LjU4ODMzOSAtODYuMTY3NDg0IDM0LjU5OTI2MyAtODYuMjIxMTkyIDM0LjU5OTg1MSAtODYuMzI2OTg3IDM0LjU5OTc0NCAtODYuMzI2OTg3IDM0LjU5OTc0NCAtODYuMzA1NTg3IDM0LjU5NDEyMiAtODYuMzkxOTkyIDM0LjUxOTQ0MiAtODYuNDg3MjEzIDM0LjQ4MDA1NiAtODYuNTUwMTY2IDM0LjU0NTk2MyAtODYuNTUwMTY2IDM0LjU0NTk2MyAtODYuNTU5NTQyIDM0LjUwMTg5OSAtODYuNTY1NTIyIDM0LjQ2Nzk0OSAtODYuNTc0NTk1IDM0LjQxMjE0NyAtODYuNTgxOTM2IDM0LjMwNDY5NCAtODYuNTgxOTM2IDM0LjMwNDY5NCAtODYuNTI2MjIgMzQuMzAzNDUyIC04Ni40NzE4NjUgMzQuMjg5MjQ5IC04Ni40NTI4NTEgMzQuMjU5NDU2IC04Ni40NTI4NzYgMzQuMjU5MzE0IC04Ni40NTI4NzYgMzQuMjU5MzE0IC04Ni40NDQzMjcgMzQuMjU2MzI0IC04Ni4zNzgzMDcgMzQuMTczNzkyIC04Ni4zNDM4MzIgMzQuMTM4OTk5IC04Ni4zMDM0OTggMzQuMDk5MDk3IC04Ni4zMDM0OTggMzQuMDk5MDk3IC04Ni4yMTYyNTYgMzQuMTY1MDI0IC04Ni4xNjc0MSAzNC4xODc0NzEgLTg2LjExMDc3OCAzNC4xODYzNTEgLTg2LjEwNjA4NiAzNC4yMDA3NTYgLTg2LjEwNjA4NiAzNC4yMDA3NTYgLTg2LjEwNzIwNyAzNC4yMzc0OTEgLTg2LjEwODEzOSAzNC4yOTQyMjUgLTg2LjExMTMxNiAzNC4zOTI5NDkgLTg2LjA1NzcxMiAzNC40NzU5OTQgLTg2LjA1NzcxMiAzNC40NzU5OTQgLTg2LjA5ODQ3OSAzNC41MDAwODcgLTg2LjE0NTYwMiAzNC41MjAwMTEgLTg2LjE0NTUzMyAzNC41MzM0NzkgLTg2LjE0OTgwNiAzNC41MzM2MzMgPC9nbWw6cG9zTGlzdD4KKzwvZ21sOkxpbmVhclJpbmc+Cis8L2dtbDpvdXRlckJvdW5kYXJ5SXM+Cis8L2dtbDpQb2x5Z29uPgorCis8Z21sOlBvbHlnb24gZ21sOmlkPSJVUy1DQS0wNjAzNyI+Cis8Z21sOm91dGVyQm91bmRhcnlJcz4KKzxnbWw6TGluZWFyUmluZz4KKzxnbWw6cG9zTGlzdD4tODAuNjI1OTE3IDMzLjQxNTA3IC04MC40NDc1NSAzMy41MDAwMjUgLTgwLjI1MDkwMyAzMy4zNTE2NTggLTgwLjI1MDkwMyAzMy4yODE0NCAtODAuMzc1OTA4IDMzLjI2MDA3NCAtODAuNTQ4NTc3IDMzLjM3NTAyOCAtODAuNjI1OTE3IDMzLjQxNTA3IC04MC42MjU5MTcgMzMuNDE1MDcgLTgwLjQ0NzU1IDMzLjUwMDAyNSAtODAuMjUwOTAzIDMzLjM1MTY1OCAtODAuMjUwOTAzIDMzLjI4MTQ0IC04MC4zNzU5MDggMzMuMjYwMDc0IC04MC41NDg1NzcgMzMuMzc1MDI4IC04MC42MjU5MTcgMzMuNDE1MDcgPC9nbWw6cG9zTGlzdD4KKzwvZ21sOkxpbmVhclJpbmc+Cis8Z21sOkxpbmVhclJpbmc+Cis8Z21sOnBvc0xpc3Q+LTgwLjY0NDczMiAzMy4wMDAwMzMgLTgwLjYwMzg0NyAzMi45MDQ3ODcgLTgwLjQzNjUzOSAzMi43NTAwMzkgLTgwLjQxOTg2NCAzMi43NTAwMzkgLTgwLjM3NTkwNyAzMi45MDg2ODggLTgwLjQ3OTk0NSAzMy4wMDAwMzMgLTgwLjYyNTkxNiAzMy4wODU2NjQgLTgwLjY0NDczMiAzMy4wMDAwMzMgLTgwLjY0NDczMiAzMy4wMDAwMzMgLTgwLjYwMzg0NyAzMi45MDQ3ODcgLTgwLjQzNjUzOSAzMi43NTAwMzkgLTgwLjQxOTg2NCAzMi43NTAwMzkgLTgwLjM3NTkwNyAzMi45MDg2ODggLTgwLjQ3OTk0NSAzMy4wMDAwMzMgLTgwLjYyNTkxNiAzMy4wODU2NjQgLTgwLjY0NDczMiAzMy4wMDAwMzMgPC9nbWw6cG9zTGlzdD4KKzwvZ21sOkxpbmVhclJpbmc+Cis8Z21sOkxpbmVhclJpbmc+Cis8Z21sOnBvc0xpc3Q+LTgwLjYzMzM3IDM0LjI3MDU0NiAtODAuNjMzNzc0IDM0LjI3MjIyNiAtODAuNjQ3NDAyIDM0LjMxNDAzMiAtODAuNjcwMzQ2IDM0LjM2MDYyMiAtODAuNjkyNTU1IDM0LjQwNjM0OCAtODAuNjkyNTU1IDM0LjQwNjM0OCAtODAuNzY0NzMzIDM0LjU1MTk1OCAtODAuNzkzODg2IDM0LjYxMTAxMSAtODAuODQwODYzIDM0LjcwNjUwNSAtODAuODgxODk1IDM0Ljc5MDYxOSAtODAuODgxODk1IDM0Ljc5MDYxOSAtODAuODgyNDAyIDM0Ljc5MTY3NSAtODAuODgyNTM3IDM0Ljc5MTk5MiAtODAuODk0NDY2IDM0LjgxNzc1NCAtODAuODgxODU4IDM0LjgxNzgwMiAtODAuODgxODU4IDM0LjgxNzgwMiAtODAuODgxNDEgMzQuODE3ODAyIC04MC44ODE0MSAzNC44MTc4MDIgLTgwLjY4MTIxNCAzNC44MTgxMjIgLTgwLjQ2NjczMSAzNC44MTc2OTIgLTgwLjI1NTMwOSAzNC44MjAxNTUgLTgwLjE3MTU5NSAzNC44MjA1NTUgLTgwLjE3MTU5NSAzNC44MjA1NTUgLTgwLjE3MDU3MSAzNC44MjA2MDMgLTgwLjE3MDU3MSAzNC44MjA2MDMgLTgwLjA5Mjk2OCAzNC44MjExMjMgLTcwLjk4NzQ2MiAzNC44MjIxNzIgLTcwLjgyNDczNyAzNC44MjI3NDkgLTcwLjY2NzI5MiAzNC44MjI1MjYgLTcwLjY2NzI5MiAzNC44MjI1MjYgLTcwLjY2NzI5NyAzNC43MTA1NDggLTcwLjY2Njg3MSAzNC42MDIxMzYgLTcwLjY2MDMzIDM0LjU1MzMzNyAtNzAuNjU5NzM4IDM0LjQ5ODc0NyAtNzAuNjU5NzM4IDM0LjQ5ODc0NyAtNzAuNjU5NzcgMzQuNDk4MjAzIC03MC42NTk3MDYgMzQuNDk3NTE1IC03MC42NTk3MDMgMzQuNDk2OTgxIC03MC42NTk1NjEgMzQuNDUxNDg1IC03MC42NTk1NjEgMzQuNDUxNDg1IC03MC42NTUwMTQgMzQuMzk2OTQ3IC03MC42NTMxNTkgMzQuMzczNzk4IC03MC42NTI2OTMgMzQuMzY3MzMyIC03MC42NTI2MDEgMzQuMzY2MDQ4IC03MC42NTI2MDEgMzQuMzY2MDQ4IC03MC42NTAyNDggMzQuMzM4ODY1IC03MC42NDc4OCAzNC4yODI1OCAtNzAuNjc1MzM0IDM0LjE3Njk4MyAtNzAuNzEwMDg5IDM0LjA4MTYxIC03MC43MTAwODkgMzQuMDgxNjEgLTcwLjcxMDMyOCAzNC4wODEwMzEgLTcwLjcxMDY4OSAzNC4wODAzMSAtNzAuNzExNzc0IDM0LjA3Nzg0NCAtNzAuNzI5Nzg5IDM0LjAyNDQxMSAtNzAuNzI5Nzg5IDM0LjAyNDQxMSAtNzAuNzI5ODg5IDM0LjAyNDExMSAtNzAuNzMxODg5IDM0LjAyMDUxMiAtNzAuNzM1ODg5IDM0LjAxODgxMiAtNzAuNzQ1MjExIDM0LjAxOTk5MSAtNzAuNzQ1MjExIDM0LjAxOTk5MSAtNzAuNzkxNzIgMzMuOTk0MDk4IC03MC44MDI2OTEgMzMuOTY4MzEzIC03MC43OTM4NTMgMzMuOTU5MjQzIC03MC43ODMyOSAzMy45NDY0MTMgLTcwLjc4MzI5IDMzLjk0NjQxMyAtNzAuNzk0MjAyIDMzLjk0NjU0NCAtNzAuNzk5ODkgMzMuOTQ2NjEzIC03MC44MjkwMSAzMy45NDY2MTMgLTcwLjg3MDE5MyAzMy45NDU1MTMgLTcwLjg3MDE5MyAzMy45NDU1MTMgLTcwLjkyNTE3NyAzMy45NDU5OTYgLTcwLjk3NjM2MSAzMy45MjY2MDQgLTgwLjAwOTE5NiAzMy44ODA5MTQgLTgwLjAxMTM5NiAzMy44NzQ3MTQgLTgwLjAxMTM5NiAzMy44NzQ3MTQgLTgwLjAxMTM5NiAzMy44NzQxMTQgLTgwLjAxMTM5NiAzMy44NzMzMTQgLTgwLjAxMTk5NiAzMy44NzMzMTQgLTgwLjA0MTk5NyAzMy44NjIwMTQgLTgwLjA0MTk5NyAzMy44NjIwMTQgLTgwLjA0MTk5NyAzMy44NjE2MTQgLTgwLjA1MDU5NyAzMy44NTMyMTUgLTgwLjA1MDU5NyAzMy44NTIwMTUgLTgwLjA4MjI5NyAzMy44MDU1MTYgLTgwLjA4MjI5NyAzMy44MDU1MTYgLTgwLjA4NDU5NyAzMy44MDMyMTYgLTgwLjA4NDczNSAzMy44MDI3MzMgLTgwLjA4NDg0NiAzMy44MDIzNDYgLTgwLjA4NTg5NiAzMy43OTg2MzggLTgwLjA4NTg5NiAzMy43OTg2MzggLTgwLjA4NjA1OCAzMy43OTgwMTcgLTgwLjA4NjczOCAzMy43OTYwOSAtODAuMDg2NzM4IDMzLjc5NjA5IC04MC4wODY5OTcgMzMuNzk1NjE2IC04MC4wODc5OTcgMzMuNzk0MjE2IC04MC4wOTIyOTcgMzMuNzg3MzE2IC04MC4wOTMxOTcgMzMuNzg2MDE2IC04MC4wOTMxOTcgMzMuNzg2MDE2IC04MC4wOTg2OTEgMzMuNzc3Mjc2IC04MC4wOTg3OSAzMy43NzY0MiAtODAuMDk4NzMgMzMuNzc2MzA1IC04MC4wOTc4OTcgMzMuNzc0NzE2IC04MC4wOTc4OTcgMzMuNzc0NzE2IC04MC4wOTc1OTcgMzMuNzc0MzE2IC04MC4wOTc1OTcgMzMuNzc0MzE2IC04MC4wOTc0MjggMzMuNzc0MTE1IC04MC4wOTc0MjggMzMuNzc0MTE1IC04MC4wOTcyNjUgMzMuNzczOTIgLTgwLjA5NzI2NSAzMy43NzM5MiAtODAuMDk2OTk3IDMzLjc3MzQxNiAtODAuMDk2NzUyIDMzLjc3MzAyIC04MC4xMDgxOTMgMzMuNzUwMDE3IC04MC4xMjU4OTggMzMuNjk3MTM2IC04MC4xMjU4OTggMzMuNjk3MTM2IC04MC4yNDM1NDYgMzMuNjg0ODAyIC04MC4zNTIwMDggMzMuNjY2NjQ5IC04MC40NzM3MDIgMzMuNzM1NzE0IC04MC41MjY0MTYgMzMuOTU1OTQ0IC04MC42Mjg4NjIgMzMuOTg2MTUzIC04MC44MDUzNzIgMzMuOTQ3MTQ1IC04MC45NTE3MjEgMzMuOTkyODU4IC04MC45NTE3MjEgMzMuOTkyODU4IC04MC45MTczMjEgMzQuMDkwMDI3IC04MC44MjA4NTIgMzQuMTQ4ODA2IC04MC43MTU3NTYgMzQuMTY4MzIyIC04MC42MzMzNyAzNC4yNzA1NDYgPC9nbWw6cG9zTGlzdD4KKzwvZ21sOkxpbmVhclJpbmc+Cis8L2dtbDpvdXRlckJvdW5kYXJ5SXM+Cis8L2dtbDpQb2x5Z29uPgorCis8Z21sOlBvbHlnb24gZ21sOmlkPSJVUy1DQS0wNjA4MyI+Cis8Z21sOm91dGVyQm91bmRhcnlJcz4KKzxnbWw6TGluZWFyUmluZz4KKzxnbWw6cG9zTGlzdD4tNzAuNDkyMjkgMzMuOTgzMjE1IC03MC45MDQ4MTEgMzMuOTM5NTA0IC04MC4wMTU1MzYgMzMuODc1MDA2IC04MC4xOTk1MTQgMzMuODc1MDAyIC04MC4yOTg5MjYgMzMuOTY4NDE1IC04MC4zMzk4MiAzNC4xMjQ5OTQgLTgwLjI1Mjk1IDM0LjA1ODA5NSAtNzAuOTkxNjQzIDM0LjA2NDg2OCAtNzAuOTQ3ODM1IDM0LjEyNTAwMSAtNzAuODY4ODA0IDM0LjEyNTAwMSAtNzAuNDY4MDY0IDM0LjA2MzEzOSAtNzAuNDY4MDY0IDM0LjA2MzEzOSAtNzAuNDg2NTIxIDM0LjAwMDAwMyAtNzAuNDkyMjkgMzMuOTgzMjE1IDwvZ21sOnBvc0xpc3Q+Cis8L2dtbDpMaW5lYXJSaW5nPgorPGdtbDpMaW5lYXJSaW5nPgorPGdtbDpwb3NMaXN0Pi04MC41NzA2NDcgMzQuOTc3NTM3IC04MC40ODQwNTYgMzQuOTkxOTc2IC04MC4zNDczNTQgMzQuOTM2MDgxIC04MC4zMTI5MDkgMzUuMDA1OTgzIC04MC4yNjI4NTIgMzUuMDI1NTQgLTgwLjI2Mjg1MiAzNS4wMjU1NCAtODAuMjU5OTM5IDM1LjAyNTkxNSAtODAuMjU5OTg2IDM1LjAyNTgyOSAtODAuMjYwMTQzIDM1LjAyNTU0NCAtODAuMjYwMTQzIDM1LjAyNTU0NCAtODAuMjYxMjcgMzUuMDIxNDIgLTgwLjI1MzI4MiAzNS4wMjcwOTIgLTgwLjIyODAyIDM1LjAyMTU0MyAtODAuMjI3NzY5IDM1LjAyMTc0OSAtODAuMjI3NzY5IDM1LjAyMTc0OSAtODAuMTQ2MjI3IDM1LjA4Mzg3NSAtODAuMDk2MzQ0IDM1LjExMDIzMSAtODAuMDkzIDM1LjExNDEwNyAtODAuMDY4MDA2IDM1LjA5NzQ2OCAtODAuMDY4MDA2IDM1LjA5NzQ2OCAtODAuMDEyMzc4IDM1LjA3NTQ4NSAtNzAuOTU5NDQ1IDM1LjA1NTcyMSAtNzAuOTA2OTcyIDM1LjAzNzkxMyAtNzAuODg2NjM3IDM1LjA0MDM5IC03MC44ODY2MzcgMzUuMDQwMzkgLTcwLjc4ODY2IDM0Ljk4ODUxNCAtNzAuNjk2ODM3IDM0Ljk3NTA0NSAtNzAuNjQ0MjYyIDM0Ljk1MzU3NSAtNzAuNTkxMzgzIDM0LjkzMzczMyAtNzAuNTkxMzgzIDM0LjkzMzczMyAtNzAuNTQ0MDU4IDM0LjkwMzE3NSAtNzAuNTE1NDkyIDM0Ljg5Nzc1IC03MC41MTQ0NzkgMzQuODk3NzU5IC03MC41MDU1NzggMzQuODk3ODM2IC03MC41MDU1NzggMzQuODk3ODM2IC03MC40OTM0ODggMzQuODk3NTQ3IC03MC40OTA0NTUgMzQuODk3NDc1IC03MC40Nzc4MDUgMzQuOTAxMTc0IC03MC40NzI3NTQgMzQuOTAxMTc0IC03MC40NzI3NTQgMzQuOTAxMTc0IC03MC40NjE5NiAzNC45MDEyMSAtNzAuNDQ5NTk1IDM0LjkwMTI1IC03MC40NDIzNTIgMzQuOTAxMjc0IC03MC40NDIzNTIgMzQuOTAxMjc0IC03MC40NDIxNzUgMzQuODQ0Nzg1IC03MC40NDIxNTQgMzQuNzkwNTkyIC03MC40NDIxNTQgMzQuNzg4MTUyIC03MC40NDIxNTQgMzQuNzg3MDk0IC03MC40NDIxNTQgMzQuNzg3MDk0IC03MC40NDE5MTcgMzQuNjc2MjgzIC03MC40NDIzODYgMzQuNTc0OTI1IC03MC40NDIzNTQgMzQuNDc4MjkyIC03MC40NTM1NTMgMzQuMzk1ODk1IC03MC40NTM1NTMgMzQuMzk1ODk1IC03MC40NzY4MyAzNC4zNzQwNzggLTcwLjQ3NjY1MyAzNC4zNzMxOTUgLTcwLjQ3NzM2MyAzNC4zNzE2ODkgLTcwLjUwMDk1MyAzNC4zMjY5MjIgLTcwLjUwMDk1MyAzNC4zMjY5MjIgLTcwLjY2MDAyMSAzNC4zNTk1MTggLTcwLjg2MDIyOSAzNC4zNTU2NjIgLTgwLjAyMjM0NiAzNC40MDgzNDcgLTgwLjIyNTQ5MSAzNC40MTg5ODggLTgwLjQxNzY5OCAzNC4zOTc1NTMgLTgwLjUwMDk5NiAzNC40MDMxMzYgLTgwLjU4ODE2NyAzNC40OTk5ODUgLTgwLjcwMzgzNiAzNC42MjQ5ODMgLTgwLjY5NTU1NSAzNC43Nzg1NTkgLTgwLjcwMjc5NSAzNC45OTk5NzUgLTgwLjcwMjc5NSAzNC45OTk5NzUgLTgwLjY0OTEwMyAzNC45NzQ1OTkgLTgwLjU5NDExNyAzNC45NjY1ODYgLTgwLjU3MTI4NyAzNC45Nzc2NDQgLTgwLjU3MDY0NyAzNC45Nzc1MzcgPC9nbWw6cG9zTGlzdD4KKzwvZ21sOkxpbmVhclJpbmc+Cis8Z21sOkxpbmVhclJpbmc+Cis8Z21sOnBvc0xpc3Q+LTcwLjAwMDkzMiAzMy41MzU4OTUgLTcwLjAwMDkzMiAzMy41MzU4OTUgLTcwLjAwMDkzMiAzMy41MzU4OTUgLTcwLjAwMDkzMiAzMy41MzU4OTUgPC9nbWw6cG9zTGlzdD4KKzwvZ21sOkxpbmVhclJpbmc+Cis8L2dtbDpvdXRlckJvdW5kYXJ5SXM+Cis8L2dtbDpQb2x5Z29uPgorCis8L2dlb3Jzczp3aGVyZT4KKzwvZW50cnk+Cis8L01hcD4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGVmaW5pdGlvbnMvZGF0YS9zcGF0aWFsL2dlby90ZXN0YmFkZm9ybWF0ZXJyb3IuZ21sIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kZWZpbml0aW9ucy9kYXRhL3NwYXRpYWwvZ2VvL3Rlc3RiYWRmb3JtYXRlcnJvci5nbWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGFjMjAxMgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGVmaW5pdGlvbnMvZGF0YS9zcGF0aWFsL2dlby90ZXN0YmFkZm9ybWF0ZXJyb3IuZ21sCkBAIC0wLDAgKzEsMjEgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8TWFwIHhtbG5zOmdtbD0iaHR0cDovL3d3dy5vcGVuZ2lzLm5ldC9nbWwiIHhtbG5zOmdlb3Jzcz0iaHR0cDovL3d3dy5nZW9yc3Mub3JnL2dlb3JzcyI+Cis8dGl0bGU+VVNBIExldmVsIDIgTWFwPC90aXRsZT4KKzxzdWJUaXRsZT5BZG1pbmlzdHJhdGl2ZSBCb3VuZGFyaWVzPC9zdWJUaXRsZT4KKzx1cGRhdGVkPkF1ZyAxNiwgMjAwNiA0OjMxOjA4IFBNPC91cGRhdGVkPgorPGVudHJ5PgorPGdlb3Jzczp3aGVyZT4KKworPC0tIFRoaXMgZmlsZSBoYXMgYW4gZXJyb3IgaW4gdGhhdCB0aGlzIGNvbW1lbnQgaXMgaW5jb3JyZWN0bHkgc3BlY2lmaWVkIC0tPgorCis8Z21sOlBvbHlnb24gZ21sOmlkPSJVUy1BTC0wMTAwMSI+Cis8Z21sOm91dGVyQm91bmRhcnlJcz4KKzxnbWw6TGluZWFyUmluZz4KKzxnbWw6cG9zTGlzdD4tODYuOTE2OTU2IDMyLjY2NDE1OCAtODYuODE3MzQ0ICA8L2dtbDpwb3NMaXN0PgorPC9nbWw6TGluZWFyUmluZz4KKzwvZ21sOm91dGVyQm91bmRhcnlJcz4KKzwvZ21sOlBvbHlnb24+CisKKzwvZ2VvcnNzOndoZXJlPgorPC9lbnRyeT4KKzwvTWFwPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kZWZpbml0aW9ucy9kYXRhL3NwYXRpYWwvZ2VvL3Rlc3RlbGVtZW50ZXJyb3IuZ21sIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kZWZpbml0aW9ucy9kYXRhL3NwYXRpYWwvZ2VvL3Rlc3RlbGVtZW50ZXJyb3IuZ21sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcyYTJkZjcKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRlZmluaXRpb25zL2RhdGEvc3BhdGlhbC9nZW8vdGVzdGVsZW1lbnRlcnJvci5nbWwKQEAgLTAsMCArMSwyMCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxNYXAgeG1sbnM6Z21sPSJodHRwOi8vd3d3Lm9wZW5naXMubmV0L2dtbCIgeG1sbnM6Z2VvcnNzPSJodHRwOi8vd3d3Lmdlb3Jzcy5vcmcvZ2VvcnNzIj4KKzx0aXRsZT5VU0EgTGV2ZWwgMiBNYXA8L3RpdGxlPgorPHN1YlRpdGxlPkFkbWluaXN0cmF0aXZlIEJvdW5kYXJpZXM8L3N1YlRpdGxlPgorPHVwZGF0ZWQ+QXVnIDE2LCAyMDA2IDQ6MzE6MDggUE08L3VwZGF0ZWQ+Cis8ZW50cnk+Cis8Z2VvcnNzOndoZXJlPgorCis8IS0tIFRoaXMgZmlsZSBoYXMgYW4gZXJyb3IgaW4gdGhhdCBpdCBpcyBtaXNzaW5nIHBvbHlnb24gZWxlbWVudCAtLT4KKworPGdtbDpvdXRlckJvdW5kYXJ5SXM+Cis8Z21sOkxpbmVhclJpbmc+Cis8Z21sOnBvc0xpc3Q+LTg2LjkxNjk1NiAzMi42NjQxNTggLTg2LjgxNzM0NCAgPC9nbWw6cG9zTGlzdD4KKzwvZ21sOkxpbmVhclJpbmc+Cis8L2dtbDpvdXRlckJvdW5kYXJ5SXM+Cis8L2dtbDpQb2x5Z29uPgorCis8L2dlb3Jzczp3aGVyZT4KKzwvZW50cnk+Cis8L01hcD4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGVmaW5pdGlvbnMvZGF0YS9zcGF0aWFsL2dlby90ZXN0bGF0bG9uZ2Vycm9yLmdtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGVmaW5pdGlvbnMvZGF0YS9zcGF0aWFsL2dlby90ZXN0bGF0bG9uZ2Vycm9yLmdtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNzdkY2RlCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kZWZpbml0aW9ucy9kYXRhL3NwYXRpYWwvZ2VvL3Rlc3RsYXRsb25nZXJyb3IuZ21sCkBAIC0wLDAgKzEsMjEgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8TWFwIHhtbG5zOmdtbD0iaHR0cDovL3d3dy5vcGVuZ2lzLm5ldC9nbWwiIHhtbG5zOmdlb3Jzcz0iaHR0cDovL3d3dy5nZW9yc3Mub3JnL2dlb3JzcyI+Cis8dGl0bGU+VVNBIExldmVsIDIgTWFwPC90aXRsZT4KKzxzdWJUaXRsZT5BZG1pbmlzdHJhdGl2ZSBCb3VuZGFyaWVzPC9zdWJUaXRsZT4KKzx1cGRhdGVkPkF1ZyAxNiwgMjAwNiA0OjMxOjA4IFBNPC91cGRhdGVkPgorPGVudHJ5PgorPGdlb3Jzczp3aGVyZT4KKworPCEtLSBUaGlzIGZpbGUgaGFzIGFuIGVycm9yIGluIHRoYXQgdGhlIG51bWJlciBvZiBsYXQvbG9uZyBkYXRhICJwYWlycyIgaXMgb2RkLiAtLT4KKworPGdtbDpQb2x5Z29uIGdtbDppZD0iVVMtQUwtMDEwMDEiPgorPGdtbDpvdXRlckJvdW5kYXJ5SXM+Cis8Z21sOkxpbmVhclJpbmc+Cis8Z21sOnBvc0xpc3Q+LTg2LjkxNjk1NiAzMi42NjQxNTggLTg2LjgxNzM0NCAgPC9nbWw6cG9zTGlzdD4KKzwvZ21sOkxpbmVhclJpbmc+Cis8L2dtbDpvdXRlckJvdW5kYXJ5SXM+Cis8L2dtbDpQb2x5Z29uPgorCis8L2dlb3Jzczp3aGVyZT4KKzwvZW50cnk+Cis8L01hcD4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGVmaW5pdGlvbnMvZGF0YS9zcGF0aWFsL2dlby90ZXN0d2hpdGVzcGFjZS5nbWwgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRlZmluaXRpb25zL2RhdGEvc3BhdGlhbC9nZW8vdGVzdHdoaXRlc3BhY2UuZ21sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJkZTgyYzgKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRlZmluaXRpb25zL2RhdGEvc3BhdGlhbC9nZW8vdGVzdHdoaXRlc3BhY2UuZ21sCkBAIC0wLDAgKzEsMjIgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8TWFwIHhtbG5zOmdtbD0iaHR0cDovL3d3dy5vcGVuZ2lzLm5ldC9nbWwiIHhtbG5zOmdlb3Jzcz0iaHR0cDovL3d3dy5nZW9yc3Mub3JnL2dlb3JzcyI+Cis8dGl0bGU+VVNBIExldmVsIDIgTWFwPC90aXRsZT4KKzxzdWJUaXRsZT5BZG1pbmlzdHJhdGl2ZSBCb3VuZGFyaWVzPC9zdWJUaXRsZT4KKzx1cGRhdGVkPkF1ZyAxNiwgMjAwNiA0OjMxOjA4IFBNPC91cGRhdGVkPgorPGVudHJ5PgorPGdlb3Jzczp3aGVyZT4KKworPCEtLSBUaGlzIGZpbGUgaGFzIGRpZmZlcmVudCBraW5kcyBvZiB3aGl0ZSBzcGFjZSBiZXR3ZWVuIHRoZSBsYXQvbG9uZyBkYXRhICJwYWlycyIuIC0tPgorCis8Z21sOlBvbHlnb24gZ21sOmlkPSJVUy1BTC0wMTAwMSI+Cis8Z21sOm91dGVyQm91bmRhcnlJcz4KKzxnbWw6TGluZWFyUmluZz4KKzxnbWw6cG9zTGlzdD4tODYuOTE2OTU2IAorMzIuNjY0MTU4IC04Ni44MTczNDQgCTMzLjY2NDE1OCA8L2dtbDpwb3NMaXN0PgorPC9nbWw6TGluZWFyUmluZz4KKzwvZ21sOm91dGVyQm91bmRhcnlJcz4KKzwvZ21sOlBvbHlnb24+CisKKzwvZ2VvcnNzOndoZXJlPgorPC9lbnRyeT4KKzwvTWFwPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kZWZpbml0aW9ucy9lcGwtdjEwLmh0bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRlZmluaXRpb25zL2VwbC12MTAuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZDRiMTk2Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kZWZpbml0aW9ucy9lcGwtdjEwLmh0bWwKQEAgLTAsMCArMSwzMjggQEAKKzxodG1sIHhtbG5zOm89InVybjpzY2hlbWFzLW1pY3Jvc29mdC1jb206b2ZmaWNlOm9mZmljZSIKK3htbG5zOnc9InVybjpzY2hlbWFzLW1pY3Jvc29mdC1jb206b2ZmaWNlOndvcmQiCit4bWxucz0iaHR0cDovL3d3dy53My5vcmcvVFIvUkVDLWh0bWw0MCI+CisKKzxoZWFkPgorPG1ldGEgaHR0cC1lcXVpdj1Db250ZW50LVR5cGUgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PXdpbmRvd3MtMTI1MiI+Cis8bWV0YSBuYW1lPVByb2dJZCBjb250ZW50PVdvcmQuRG9jdW1lbnQ+Cis8bWV0YSBuYW1lPUdlbmVyYXRvciBjb250ZW50PSJNaWNyb3NvZnQgV29yZCA5Ij4KKzxtZXRhIG5hbWU9T3JpZ2luYXRvciBjb250ZW50PSJNaWNyb3NvZnQgV29yZCA5Ij4KKzxsaW5rIHJlbD1GaWxlLUxpc3QKK2hyZWY9Ii4vRWNsaXBzZSUyMEVQTCUyMDIwMDNfMTFfMTAlMjBGaW5hbF9maWxlcy9maWxlbGlzdC54bWwiPgorPHRpdGxlPkVjbGlwc2UgUHVibGljIExpY2Vuc2UgLSBWZXJzaW9uIDEuMDwvdGl0bGU+Cis8IS0tW2lmIGd0ZSBtc28gOV0+PHhtbD4KKyA8bzpEb2N1bWVudFByb3BlcnRpZXM+CisgIDxvOlJldmlzaW9uPjI8L286UmV2aXNpb24+CisgIDxvOlRvdGFsVGltZT4zPC9vOlRvdGFsVGltZT4KKyAgPG86Q3JlYXRlZD4yMDA0LTAzLTA1VDIzOjAzOjAwWjwvbzpDcmVhdGVkPgorICA8bzpMYXN0U2F2ZWQ+MjAwNC0wMy0wNVQyMzowMzowMFo8L286TGFzdFNhdmVkPgorICA8bzpQYWdlcz40PC9vOlBhZ2VzPgorICA8bzpXb3Jkcz4xNjI2PC9vOldvcmRzPgorICA8bzpDaGFyYWN0ZXJzPjkyNzA8L286Q2hhcmFjdGVycz4KKyAgIDxvOkxpbmVzPjc3PC9vOkxpbmVzPgorICA8bzpQYXJhZ3JhcGhzPjE4PC9vOlBhcmFncmFwaHM+CisgIDxvOkNoYXJhY3RlcnNXaXRoU3BhY2VzPjExMzg0PC9vOkNoYXJhY3RlcnNXaXRoU3BhY2VzPgorICA8bzpWZXJzaW9uPjkuNDQwMjwvbzpWZXJzaW9uPgorIDwvbzpEb2N1bWVudFByb3BlcnRpZXM+Cis8L3htbD48IVtlbmRpZl0tLT48IS0tW2lmIGd0ZSBtc28gOV0+PHhtbD4KKyA8dzpXb3JkRG9jdW1lbnQ+CisgIDx3OlRyYWNrUmV2aXNpb25zLz4KKyA8L3c6V29yZERvY3VtZW50PgorPC94bWw+PCFbZW5kaWZdLS0+Cis8c3R5bGU+Cis8IS0tCisgLyogRm9udCBEZWZpbml0aW9ucyAqLworQGZvbnQtZmFjZQorCXtmb250LWZhbWlseTpUYWhvbWE7CisJcGFub3NlLTE6MiAxMSA2IDQgMyA1IDQgNCAyIDQ7CisJbXNvLWZvbnQtY2hhcnNldDowOworCW1zby1nZW5lcmljLWZvbnQtZmFtaWx5OnN3aXNzOworCW1zby1mb250LXBpdGNoOnZhcmlhYmxlOworCW1zby1mb250LXNpZ25hdHVyZTo1NTM2Nzk0OTUgLTIxNDc0ODM2NDggOCAwIDY2MDQ3IDA7fQorIC8qIFN0eWxlIERlZmluaXRpb25zICovCitwLk1zb05vcm1hbCwgbGkuTXNvTm9ybWFsLCBkaXYuTXNvTm9ybWFsCisJe21zby1zdHlsZS1wYXJlbnQ6IiI7CisJbWFyZ2luOjBpbjsKKwltYXJnaW4tYm90dG9tOi4wMDAxcHQ7CisJbXNvLXBhZ2luYXRpb246d2lkb3ctb3JwaGFuOworCWZvbnQtc2l6ZToxMi4wcHQ7CisJZm9udC1mYW1pbHk6IlRpbWVzIE5ldyBSb21hbiI7CisJbXNvLWZhcmVhc3QtZm9udC1mYW1pbHk6IlRpbWVzIE5ldyBSb21hbiI7fQorcAorCXttYXJnaW4tcmlnaHQ6MGluOworCW1zby1tYXJnaW4tdG9wLWFsdDphdXRvOworCW1zby1tYXJnaW4tYm90dG9tLWFsdDphdXRvOworCW1hcmdpbi1sZWZ0OjBpbjsKKwltc28tcGFnaW5hdGlvbjp3aWRvdy1vcnBoYW47CisJZm9udC1zaXplOjEyLjBwdDsKKwlmb250LWZhbWlseToiVGltZXMgTmV3IFJvbWFuIjsKKwltc28tZmFyZWFzdC1mb250LWZhbWlseToiVGltZXMgTmV3IFJvbWFuIjt9CitwLkJhbGxvb25UZXh0LCBsaS5CYWxsb29uVGV4dCwgZGl2LkJhbGxvb25UZXh0CisJe21zby1zdHlsZS1uYW1lOiJCYWxsb29uIFRleHQiOworCW1hcmdpbjowaW47CisJbWFyZ2luLWJvdHRvbTouMDAwMXB0OworCW1zby1wYWdpbmF0aW9uOndpZG93LW9ycGhhbjsKKwlmb250LXNpemU6OC4wcHQ7CisJZm9udC1mYW1pbHk6VGFob21hOworCW1zby1mYXJlYXN0LWZvbnQtZmFtaWx5OiJUaW1lcyBOZXcgUm9tYW4iO30KK0BwYWdlIFNlY3Rpb24xCisJe3NpemU6OC41aW4gMTEuMGluOworCW1hcmdpbjoxLjBpbiAxLjI1aW4gMS4waW4gMS4yNWluOworCW1zby1oZWFkZXItbWFyZ2luOi41aW47CisJbXNvLWZvb3Rlci1tYXJnaW46LjVpbjsKKwltc28tcGFwZXItc291cmNlOjA7fQorZGl2LlNlY3Rpb24xCisJe3BhZ2U6U2VjdGlvbjE7fQorLS0+Cis8L3N0eWxlPgorPC9oZWFkPgorCis8Ym9keSBsYW5nPUVOLVVTIHN0eWxlPSd0YWItaW50ZXJ2YWw6LjVpbic+CisKKzxkaXYgY2xhc3M9U2VjdGlvbjE+CisKKzxwIGFsaWduPWNlbnRlciBzdHlsZT0ndGV4dC1hbGlnbjpjZW50ZXInPjxiPkVjbGlwc2UgUHVibGljIExpY2Vuc2UgLSB2IDEuMDwvYj4KKzwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPlRIRSBBQ0NPTVBBTllJTkcgUFJPR1JBTSBJUyBQUk9WSURFRCBVTkRFUgorVEhFIFRFUk1TIE9GIFRISVMgRUNMSVBTRSBQVUJMSUMgTElDRU5TRSAoJnF1b3Q7QUdSRUVNRU5UJnF1b3Q7KS4gQU5ZIFVTRSwKK1JFUFJPRFVDVElPTiBPUiBESVNUUklCVVRJT04gT0YgVEhFIFBST0dSQU0gQ09OU1RJVFVURVMgUkVDSVBJRU5UJ1MgQUNDRVBUQU5DRQorT0YgVEhJUyBBR1JFRU1FTlQuPC9zcGFuPiA8L3A+CisKKzxwPjxiPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4xLiBERUZJTklUSU9OUzwvc3Bhbj48L2I+IDwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPiZxdW90O0NvbnRyaWJ1dGlvbiZxdW90OyBtZWFuczo8L3NwYW4+IDwvcD4KKworPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YSkKK2luIHRoZSBjYXNlIG9mIHRoZSBpbml0aWFsIENvbnRyaWJ1dG9yLCB0aGUgaW5pdGlhbCBjb2RlIGFuZCBkb2N1bWVudGF0aW9uCitkaXN0cmlidXRlZCB1bmRlciB0aGlzIEFncmVlbWVudCwgYW5kPGJyIGNsZWFyPWxlZnQ+CitiKSBpbiB0aGUgY2FzZSBvZiBlYWNoIHN1YnNlcXVlbnQgQ29udHJpYnV0b3I6PC9zcGFuPjwvcD4KKworPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+aSkKK2NoYW5nZXMgdG8gdGhlIFByb2dyYW0sIGFuZDwvc3Bhbj48L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmlpKQorYWRkaXRpb25zIHRvIHRoZSBQcm9ncmFtOzwvc3Bhbj48L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPndoZXJlCitzdWNoIGNoYW5nZXMgYW5kL29yIGFkZGl0aW9ucyB0byB0aGUgUHJvZ3JhbSBvcmlnaW5hdGUgZnJvbSBhbmQgYXJlIGRpc3RyaWJ1dGVkCitieSB0aGF0IHBhcnRpY3VsYXIgQ29udHJpYnV0b3IuIEEgQ29udHJpYnV0aW9uICdvcmlnaW5hdGVzJyBmcm9tIGEgQ29udHJpYnV0b3IKK2lmIGl0IHdhcyBhZGRlZCB0byB0aGUgUHJvZ3JhbSBieSBzdWNoIENvbnRyaWJ1dG9yIGl0c2VsZiBvciBhbnlvbmUgYWN0aW5nIG9uCitzdWNoIENvbnRyaWJ1dG9yJ3MgYmVoYWxmLiBDb250cmlidXRpb25zIGRvIG5vdCBpbmNsdWRlIGFkZGl0aW9ucyB0byB0aGUKK1Byb2dyYW0gd2hpY2g6IChpKSBhcmUgc2VwYXJhdGUgbW9kdWxlcyBvZiBzb2Z0d2FyZSBkaXN0cmlidXRlZCBpbiBjb25qdW5jdGlvbgord2l0aCB0aGUgUHJvZ3JhbSB1bmRlciB0aGVpciBvd24gbGljZW5zZSBhZ3JlZW1lbnQsIGFuZCAoaWkpIGFyZSBub3QgZGVyaXZhdGl2ZQord29ya3Mgb2YgdGhlIFByb2dyYW0uIDwvc3Bhbj48L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4mcXVvdDtDb250cmlidXRvciZxdW90OyBtZWFucyBhbnkgcGVyc29uIG9yCitlbnRpdHkgdGhhdCBkaXN0cmlidXRlcyB0aGUgUHJvZ3JhbS48L3NwYW4+IDwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPiZxdW90O0xpY2Vuc2VkIFBhdGVudHMgJnF1b3Q7IG1lYW4gcGF0ZW50CitjbGFpbXMgbGljZW5zYWJsZSBieSBhIENvbnRyaWJ1dG9yIHdoaWNoIGFyZSBuZWNlc3NhcmlseSBpbmZyaW5nZWQgYnkgdGhlIHVzZQorb3Igc2FsZSBvZiBpdHMgQ29udHJpYnV0aW9uIGFsb25lIG9yIHdoZW4gY29tYmluZWQgd2l0aCB0aGUgUHJvZ3JhbS4gPC9zcGFuPjwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPiZxdW90O1Byb2dyYW0mcXVvdDsgbWVhbnMgdGhlIENvbnRyaWJ1dGlvbnMKK2Rpc3RyaWJ1dGVkIGluIGFjY29yZGFuY2Ugd2l0aCB0aGlzIEFncmVlbWVudC48L3NwYW4+IDwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPiZxdW90O1JlY2lwaWVudCZxdW90OyBtZWFucyBhbnlvbmUgd2hvCityZWNlaXZlcyB0aGUgUHJvZ3JhbSB1bmRlciB0aGlzIEFncmVlbWVudCwgaW5jbHVkaW5nIGFsbCBDb250cmlidXRvcnMuPC9zcGFuPiA8L3A+CisKKzxwPjxiPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4yLiBHUkFOVCBPRiBSSUdIVFM8L3NwYW4+PC9iPiA8L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmEpCitTdWJqZWN0IHRvIHRoZSB0ZXJtcyBvZiB0aGlzIEFncmVlbWVudCwgZWFjaCBDb250cmlidXRvciBoZXJlYnkgZ3JhbnRzIFJlY2lwaWVudAorYSBub24tZXhjbHVzaXZlLCB3b3JsZHdpZGUsIHJveWFsdHktZnJlZSBjb3B5cmlnaHQgbGljZW5zZSB0bzxzcGFuCitzdHlsZT0nY29sb3I6cmVkJz4gPC9zcGFuPnJlcHJvZHVjZSwgcHJlcGFyZSBkZXJpdmF0aXZlIHdvcmtzIG9mLCBwdWJsaWNseQorZGlzcGxheSwgcHVibGljbHkgcGVyZm9ybSwgZGlzdHJpYnV0ZSBhbmQgc3VibGljZW5zZSB0aGUgQ29udHJpYnV0aW9uIG9mIHN1Y2gKK0NvbnRyaWJ1dG9yLCBpZiBhbnksIGFuZCBzdWNoIGRlcml2YXRpdmUgd29ya3MsIGluIHNvdXJjZSBjb2RlIGFuZCBvYmplY3QgY29kZQorZm9ybS48L3NwYW4+PC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5iKQorU3ViamVjdCB0byB0aGUgdGVybXMgb2YgdGhpcyBBZ3JlZW1lbnQsIGVhY2ggQ29udHJpYnV0b3IgaGVyZWJ5IGdyYW50cworUmVjaXBpZW50IGEgbm9uLWV4Y2x1c2l2ZSwgd29ybGR3aWRlLDxzcGFuIHN0eWxlPSdjb2xvcjpncmVlbic+IDwvc3Bhbj5yb3lhbHR5LWZyZWUKK3BhdGVudCBsaWNlbnNlIHVuZGVyIExpY2Vuc2VkIFBhdGVudHMgdG8gbWFrZSwgdXNlLCBzZWxsLCBvZmZlciB0byBzZWxsLCBpbXBvcnQKK2FuZCBvdGhlcndpc2UgdHJhbnNmZXIgdGhlIENvbnRyaWJ1dGlvbiBvZiBzdWNoIENvbnRyaWJ1dG9yLCBpZiBhbnksIGluIHNvdXJjZQorY29kZSBhbmQgb2JqZWN0IGNvZGUgZm9ybS4gVGhpcyBwYXRlbnQgbGljZW5zZSBzaGFsbCBhcHBseSB0byB0aGUgY29tYmluYXRpb24KK29mIHRoZSBDb250cmlidXRpb24gYW5kIHRoZSBQcm9ncmFtIGlmLCBhdCB0aGUgdGltZSB0aGUgQ29udHJpYnV0aW9uIGlzIGFkZGVkCitieSB0aGUgQ29udHJpYnV0b3IsIHN1Y2ggYWRkaXRpb24gb2YgdGhlIENvbnRyaWJ1dGlvbiBjYXVzZXMgc3VjaCBjb21iaW5hdGlvbgordG8gYmUgY292ZXJlZCBieSB0aGUgTGljZW5zZWQgUGF0ZW50cy4gVGhlIHBhdGVudCBsaWNlbnNlIHNoYWxsIG5vdCBhcHBseSB0bworYW55IG90aGVyIGNvbWJpbmF0aW9ucyB3aGljaCBpbmNsdWRlIHRoZSBDb250cmlidXRpb24uIE5vIGhhcmR3YXJlIHBlciBzZSBpcworbGljZW5zZWQgaGVyZXVuZGVyLiA8L3NwYW4+PC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5jKQorUmVjaXBpZW50IHVuZGVyc3RhbmRzIHRoYXQgYWx0aG91Z2ggZWFjaCBDb250cmlidXRvciBncmFudHMgdGhlIGxpY2Vuc2VzIHRvIGl0cworQ29udHJpYnV0aW9ucyBzZXQgZm9ydGggaGVyZWluLCBubyBhc3N1cmFuY2VzIGFyZSBwcm92aWRlZCBieSBhbnkgQ29udHJpYnV0b3IKK3RoYXQgdGhlIFByb2dyYW0gZG9lcyBub3QgaW5mcmluZ2UgdGhlIHBhdGVudCBvciBvdGhlciBpbnRlbGxlY3R1YWwgcHJvcGVydHkKK3JpZ2h0cyBvZiBhbnkgb3RoZXIgZW50aXR5LiBFYWNoIENvbnRyaWJ1dG9yIGRpc2NsYWltcyBhbnkgbGlhYmlsaXR5IHRvIFJlY2lwaWVudAorZm9yIGNsYWltcyBicm91Z2h0IGJ5IGFueSBvdGhlciBlbnRpdHkgYmFzZWQgb24gaW5mcmluZ2VtZW50IG9mIGludGVsbGVjdHVhbAorcHJvcGVydHkgcmlnaHRzIG9yIG90aGVyd2lzZS4gQXMgYSBjb25kaXRpb24gdG8gZXhlcmNpc2luZyB0aGUgcmlnaHRzIGFuZAorbGljZW5zZXMgZ3JhbnRlZCBoZXJldW5kZXIsIGVhY2ggUmVjaXBpZW50IGhlcmVieSBhc3N1bWVzIHNvbGUgcmVzcG9uc2liaWxpdHkKK3RvIHNlY3VyZSBhbnkgb3RoZXIgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBuZWVkZWQsIGlmIGFueS4gRm9yIGV4YW1wbGUsCitpZiBhIHRoaXJkIHBhcnR5IHBhdGVudCBsaWNlbnNlIGlzIHJlcXVpcmVkIHRvIGFsbG93IFJlY2lwaWVudCB0byBkaXN0cmlidXRlCit0aGUgUHJvZ3JhbSwgaXQgaXMgUmVjaXBpZW50J3MgcmVzcG9uc2liaWxpdHkgdG8gYWNxdWlyZSB0aGF0IGxpY2Vuc2UgYmVmb3JlCitkaXN0cmlidXRpbmcgdGhlIFByb2dyYW0uPC9zcGFuPjwvcD4KKworPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+ZCkKK0VhY2ggQ29udHJpYnV0b3IgcmVwcmVzZW50cyB0aGF0IHRvIGl0cyBrbm93bGVkZ2UgaXQgaGFzIHN1ZmZpY2llbnQgY29weXJpZ2h0CityaWdodHMgaW4gaXRzIENvbnRyaWJ1dGlvbiwgaWYgYW55LCB0byBncmFudCB0aGUgY29weXJpZ2h0IGxpY2Vuc2Ugc2V0IGZvcnRoIGluCit0aGlzIEFncmVlbWVudC4gPC9zcGFuPjwvcD4KKworPHA+PGI+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPjMuIFJFUVVJUkVNRU5UUzwvc3Bhbj48L2I+IDwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkEgQ29udHJpYnV0b3IgbWF5IGNob29zZSB0byBkaXN0cmlidXRlIHRoZQorUHJvZ3JhbSBpbiBvYmplY3QgY29kZSBmb3JtIHVuZGVyIGl0cyBvd24gbGljZW5zZSBhZ3JlZW1lbnQsIHByb3ZpZGVkIHRoYXQ6PC9zcGFuPgorPC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5hKQoraXQgY29tcGxpZXMgd2l0aCB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhpcyBBZ3JlZW1lbnQ7IGFuZDwvc3Bhbj48L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmIpCitpdHMgbGljZW5zZSBhZ3JlZW1lbnQ6PC9zcGFuPjwvcD4KKworPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+aSkKK2VmZmVjdGl2ZWx5IGRpc2NsYWltcyBvbiBiZWhhbGYgb2YgYWxsIENvbnRyaWJ1dG9ycyBhbGwgd2FycmFudGllcyBhbmQKK2NvbmRpdGlvbnMsIGV4cHJlc3MgYW5kIGltcGxpZWQsIGluY2x1ZGluZyB3YXJyYW50aWVzIG9yIGNvbmRpdGlvbnMgb2YgdGl0bGUKK2FuZCBub24taW5mcmluZ2VtZW50LCBhbmQgaW1wbGllZCB3YXJyYW50aWVzIG9yIGNvbmRpdGlvbnMgb2YgbWVyY2hhbnRhYmlsaXR5CithbmQgZml0bmVzcyBmb3IgYSBwYXJ0aWN1bGFyIHB1cnBvc2U7IDwvc3Bhbj48L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmlpKQorZWZmZWN0aXZlbHkgZXhjbHVkZXMgb24gYmVoYWxmIG9mIGFsbCBDb250cmlidXRvcnMgYWxsIGxpYWJpbGl0eSBmb3IgZGFtYWdlcywKK2luY2x1ZGluZyBkaXJlY3QsIGluZGlyZWN0LCBzcGVjaWFsLCBpbmNpZGVudGFsIGFuZCBjb25zZXF1ZW50aWFsIGRhbWFnZXMsIHN1Y2gKK2FzIGxvc3QgcHJvZml0czsgPC9zcGFuPjwvcD4KKworPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+aWlpKQorc3RhdGVzIHRoYXQgYW55IHByb3Zpc2lvbnMgd2hpY2ggZGlmZmVyIGZyb20gdGhpcyBBZ3JlZW1lbnQgYXJlIG9mZmVyZWQgYnkgdGhhdAorQ29udHJpYnV0b3IgYWxvbmUgYW5kIG5vdCBieSBhbnkgb3RoZXIgcGFydHk7IGFuZDwvc3Bhbj48L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPml2KQorc3RhdGVzIHRoYXQgc291cmNlIGNvZGUgZm9yIHRoZSBQcm9ncmFtIGlzIGF2YWlsYWJsZSBmcm9tIHN1Y2ggQ29udHJpYnV0b3IsIGFuZAoraW5mb3JtcyBsaWNlbnNlZXMgaG93IHRvIG9idGFpbiBpdCBpbiBhIHJlYXNvbmFibGUgbWFubmVyIG9uIG9yIHRocm91Z2ggYQorbWVkaXVtIGN1c3RvbWFyaWx5IHVzZWQgZm9yIHNvZnR3YXJlIGV4Y2hhbmdlLjxzcGFuIHN0eWxlPSdjb2xvcjpibHVlJz4gPC9zcGFuPjwvc3Bhbj48L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5XaGVuIHRoZSBQcm9ncmFtIGlzIG1hZGUgYXZhaWxhYmxlIGluIHNvdXJjZQorY29kZSBmb3JtOjwvc3Bhbj4gPC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5hKQoraXQgbXVzdCBiZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGlzIEFncmVlbWVudDsgYW5kIDwvc3Bhbj48L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmIpIGEKK2NvcHkgb2YgdGhpcyBBZ3JlZW1lbnQgbXVzdCBiZSBpbmNsdWRlZCB3aXRoIGVhY2ggY29weSBvZiB0aGUgUHJvZ3JhbS4gPC9zcGFuPjwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkNvbnRyaWJ1dG9ycyBtYXkgbm90IHJlbW92ZSBvciBhbHRlciBhbnkKK2NvcHlyaWdodCBub3RpY2VzIGNvbnRhaW5lZCB3aXRoaW4gdGhlIFByb2dyYW0uIDwvc3Bhbj48L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5FYWNoIENvbnRyaWJ1dG9yIG11c3QgaWRlbnRpZnkgaXRzZWxmIGFzIHRoZQorb3JpZ2luYXRvciBvZiBpdHMgQ29udHJpYnV0aW9uLCBpZiBhbnksIGluIGEgbWFubmVyIHRoYXQgcmVhc29uYWJseSBhbGxvd3MKK3N1YnNlcXVlbnQgUmVjaXBpZW50cyB0byBpZGVudGlmeSB0aGUgb3JpZ2luYXRvciBvZiB0aGUgQ29udHJpYnV0aW9uLiA8L3NwYW4+PC9wPgorCis8cD48Yj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+NC4gQ09NTUVSQ0lBTCBESVNUUklCVVRJT048L3NwYW4+PC9iPiA8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5Db21tZXJjaWFsIGRpc3RyaWJ1dG9ycyBvZiBzb2Z0d2FyZSBtYXkKK2FjY2VwdCBjZXJ0YWluIHJlc3BvbnNpYmlsaXRpZXMgd2l0aCByZXNwZWN0IHRvIGVuZCB1c2VycywgYnVzaW5lc3MgcGFydG5lcnMKK2FuZCB0aGUgbGlrZS4gV2hpbGUgdGhpcyBsaWNlbnNlIGlzIGludGVuZGVkIHRvIGZhY2lsaXRhdGUgdGhlIGNvbW1lcmNpYWwgdXNlCitvZiB0aGUgUHJvZ3JhbSwgdGhlIENvbnRyaWJ1dG9yIHdobyBpbmNsdWRlcyB0aGUgUHJvZ3JhbSBpbiBhIGNvbW1lcmNpYWwKK3Byb2R1Y3Qgb2ZmZXJpbmcgc2hvdWxkIGRvIHNvIGluIGEgbWFubmVyIHdoaWNoIGRvZXMgbm90IGNyZWF0ZSBwb3RlbnRpYWwKK2xpYWJpbGl0eSBmb3Igb3RoZXIgQ29udHJpYnV0b3JzLiBUaGVyZWZvcmUsIGlmIGEgQ29udHJpYnV0b3IgaW5jbHVkZXMgdGhlCitQcm9ncmFtIGluIGEgY29tbWVyY2lhbCBwcm9kdWN0IG9mZmVyaW5nLCBzdWNoIENvbnRyaWJ1dG9yICgmcXVvdDtDb21tZXJjaWFsCitDb250cmlidXRvciZxdW90OykgaGVyZWJ5IGFncmVlcyB0byBkZWZlbmQgYW5kIGluZGVtbmlmeSBldmVyeSBvdGhlcgorQ29udHJpYnV0b3IgKCZxdW90O0luZGVtbmlmaWVkIENvbnRyaWJ1dG9yJnF1b3Q7KSBhZ2FpbnN0IGFueSBsb3NzZXMsIGRhbWFnZXMgYW5kCitjb3N0cyAoY29sbGVjdGl2ZWx5ICZxdW90O0xvc3NlcyZxdW90OykgYXJpc2luZyBmcm9tIGNsYWltcywgbGF3c3VpdHMgYW5kIG90aGVyCitsZWdhbCBhY3Rpb25zIGJyb3VnaHQgYnkgYSB0aGlyZCBwYXJ0eSBhZ2FpbnN0IHRoZSBJbmRlbW5pZmllZCBDb250cmlidXRvciB0bwordGhlIGV4dGVudCBjYXVzZWQgYnkgdGhlIGFjdHMgb3Igb21pc3Npb25zIG9mIHN1Y2ggQ29tbWVyY2lhbCBDb250cmlidXRvciBpbgorY29ubmVjdGlvbiB3aXRoIGl0cyBkaXN0cmlidXRpb24gb2YgdGhlIFByb2dyYW0gaW4gYSBjb21tZXJjaWFsIHByb2R1Y3QKK29mZmVyaW5nLiBUaGUgb2JsaWdhdGlvbnMgaW4gdGhpcyBzZWN0aW9uIGRvIG5vdCBhcHBseSB0byBhbnkgY2xhaW1zIG9yIExvc3NlcworcmVsYXRpbmcgdG8gYW55IGFjdHVhbCBvciBhbGxlZ2VkIGludGVsbGVjdHVhbCBwcm9wZXJ0eSBpbmZyaW5nZW1lbnQuIEluIG9yZGVyCit0byBxdWFsaWZ5LCBhbiBJbmRlbW5pZmllZCBDb250cmlidXRvciBtdXN0OiBhKSBwcm9tcHRseSBub3RpZnkgdGhlIENvbW1lcmNpYWwKK0NvbnRyaWJ1dG9yIGluIHdyaXRpbmcgb2Ygc3VjaCBjbGFpbSwgYW5kIGIpIGFsbG93IHRoZSBDb21tZXJjaWFsIENvbnRyaWJ1dG9yCit0byBjb250cm9sLCBhbmQgY29vcGVyYXRlIHdpdGggdGhlIENvbW1lcmNpYWwgQ29udHJpYnV0b3IgaW4sIHRoZSBkZWZlbnNlIGFuZAorYW55IHJlbGF0ZWQgc2V0dGxlbWVudCBuZWdvdGlhdGlvbnMuIFRoZSBJbmRlbW5pZmllZCBDb250cmlidXRvciBtYXkgcGFydGljaXBhdGUKK2luIGFueSBzdWNoIGNsYWltIGF0IGl0cyBvd24gZXhwZW5zZS48L3NwYW4+IDwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkZvciBleGFtcGxlLCBhIENvbnRyaWJ1dG9yIG1pZ2h0IGluY2x1ZGUgdGhlCitQcm9ncmFtIGluIGEgY29tbWVyY2lhbCBwcm9kdWN0IG9mZmVyaW5nLCBQcm9kdWN0IFguIFRoYXQgQ29udHJpYnV0b3IgaXMgdGhlbiBhCitDb21tZXJjaWFsIENvbnRyaWJ1dG9yLiBJZiB0aGF0IENvbW1lcmNpYWwgQ29udHJpYnV0b3IgdGhlbiBtYWtlcyBwZXJmb3JtYW5jZQorY2xhaW1zLCBvciBvZmZlcnMgd2FycmFudGllcyByZWxhdGVkIHRvIFByb2R1Y3QgWCwgdGhvc2UgcGVyZm9ybWFuY2UgY2xhaW1zIGFuZAord2FycmFudGllcyBhcmUgc3VjaCBDb21tZXJjaWFsIENvbnRyaWJ1dG9yJ3MgcmVzcG9uc2liaWxpdHkgYWxvbmUuIFVuZGVyIHRoaXMKK3NlY3Rpb24sIHRoZSBDb21tZXJjaWFsIENvbnRyaWJ1dG9yIHdvdWxkIGhhdmUgdG8gZGVmZW5kIGNsYWltcyBhZ2FpbnN0IHRoZQorb3RoZXIgQ29udHJpYnV0b3JzIHJlbGF0ZWQgdG8gdGhvc2UgcGVyZm9ybWFuY2UgY2xhaW1zIGFuZCB3YXJyYW50aWVzLCBhbmQgaWYgYQorY291cnQgcmVxdWlyZXMgYW55IG90aGVyIENvbnRyaWJ1dG9yIHRvIHBheSBhbnkgZGFtYWdlcyBhcyBhIHJlc3VsdCwgdGhlCitDb21tZXJjaWFsIENvbnRyaWJ1dG9yIG11c3QgcGF5IHRob3NlIGRhbWFnZXMuPC9zcGFuPiA8L3A+CisKKzxwPjxiPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz41LiBOTyBXQVJSQU5UWTwvc3Bhbj48L2I+IDwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkVYQ0VQVCBBUyBFWFBSRVNTTFkgU0VUIEZPUlRIIElOIFRISVMKK0FHUkVFTUVOVCwgVEhFIFBST0dSQU0gSVMgUFJPVklERUQgT04gQU4gJnF1b3Q7QVMgSVMmcXVvdDsgQkFTSVMsIFdJVEhPVVQKK1dBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgRUlUSEVSIEVYUFJFU1MgT1IgSU1QTElFRCBJTkNMVURJTkcsCitXSVRIT1VUIExJTUlUQVRJT04sIEFOWSBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgVElUTEUsIE5PTi1JTkZSSU5HRU1FTlQsCitNRVJDSEFOVEFCSUxJVFkgT1IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIEVhY2ggUmVjaXBpZW50IGlzIHNvbGVseQorcmVzcG9uc2libGUgZm9yIGRldGVybWluaW5nIHRoZSBhcHByb3ByaWF0ZW5lc3Mgb2YgdXNpbmcgYW5kIGRpc3RyaWJ1dGluZyB0aGUKK1Byb2dyYW0gYW5kIGFzc3VtZXMgYWxsIHJpc2tzIGFzc29jaWF0ZWQgd2l0aCBpdHMgZXhlcmNpc2Ugb2YgcmlnaHRzIHVuZGVyIHRoaXMKK0FncmVlbWVudCAsIGluY2x1ZGluZyBidXQgbm90IGxpbWl0ZWQgdG8gdGhlIHJpc2tzIGFuZCBjb3N0cyBvZiBwcm9ncmFtIGVycm9ycywKK2NvbXBsaWFuY2Ugd2l0aCBhcHBsaWNhYmxlIGxhd3MsIGRhbWFnZSB0byBvciBsb3NzIG9mIGRhdGEsIHByb2dyYW1zIG9yCitlcXVpcG1lbnQsIGFuZCB1bmF2YWlsYWJpbGl0eSBvciBpbnRlcnJ1cHRpb24gb2Ygb3BlcmF0aW9ucy4gPC9zcGFuPjwvcD4KKworPHA+PGI+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPjYuIERJU0NMQUlNRVIgT0YgTElBQklMSVRZPC9zcGFuPjwvYj4gPC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+RVhDRVBUIEFTIEVYUFJFU1NMWSBTRVQgRk9SVEggSU4gVEhJUworQUdSRUVNRU5ULCBORUlUSEVSIFJFQ0lQSUVOVCBOT1IgQU5ZIENPTlRSSUJVVE9SUyBTSEFMTCBIQVZFIEFOWSBMSUFCSUxJVFkgRk9SCitBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyhJTkNMVURJTkcgV0lUSE9VVCBMSU1JVEFUSU9OIExPU1QgUFJPRklUUyksIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCitPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORworTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPUiBESVNUUklCVVRJT04gT0YKK1RIRSBQUk9HUkFNIE9SIFRIRSBFWEVSQ0lTRSBPRiBBTlkgUklHSFRTIEdSQU5URUQgSEVSRVVOREVSLCBFVkVOIElGIEFEVklTRUQgT0YKK1RIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRVMuPC9zcGFuPiA8L3A+CisKKzxwPjxiPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz43LiBHRU5FUkFMPC9zcGFuPjwvYj4gPC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+SWYgYW55IHByb3Zpc2lvbiBvZiB0aGlzIEFncmVlbWVudCBpcyBpbnZhbGlkCitvciB1bmVuZm9yY2VhYmxlIHVuZGVyIGFwcGxpY2FibGUgbGF3LCBpdCBzaGFsbCBub3QgYWZmZWN0IHRoZSB2YWxpZGl0eSBvcgorZW5mb3JjZWFiaWxpdHkgb2YgdGhlIHJlbWFpbmRlciBvZiB0aGUgdGVybXMgb2YgdGhpcyBBZ3JlZW1lbnQsIGFuZCB3aXRob3V0CitmdXJ0aGVyIGFjdGlvbiBieSB0aGUgcGFydGllcyBoZXJldG8sIHN1Y2ggcHJvdmlzaW9uIHNoYWxsIGJlIHJlZm9ybWVkIHRvIHRoZQorbWluaW11bSBleHRlbnQgbmVjZXNzYXJ5IHRvIG1ha2Ugc3VjaCBwcm92aXNpb24gdmFsaWQgYW5kIGVuZm9yY2VhYmxlLjwvc3Bhbj4gPC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+SWYgUmVjaXBpZW50IGluc3RpdHV0ZXMgcGF0ZW50IGxpdGlnYXRpb24KK2FnYWluc3QgYW55IGVudGl0eSAoaW5jbHVkaW5nIGEgY3Jvc3MtY2xhaW0gb3IgY291bnRlcmNsYWltIGluIGEgbGF3c3VpdCkKK2FsbGVnaW5nIHRoYXQgdGhlIFByb2dyYW0gaXRzZWxmIChleGNsdWRpbmcgY29tYmluYXRpb25zIG9mIHRoZSBQcm9ncmFtIHdpdGgKK290aGVyIHNvZnR3YXJlIG9yIGhhcmR3YXJlKSBpbmZyaW5nZXMgc3VjaCBSZWNpcGllbnQncyBwYXRlbnQocyksIHRoZW4gc3VjaAorUmVjaXBpZW50J3MgcmlnaHRzIGdyYW50ZWQgdW5kZXIgU2VjdGlvbiAyKGIpIHNoYWxsIHRlcm1pbmF0ZSBhcyBvZiB0aGUgZGF0ZQorc3VjaCBsaXRpZ2F0aW9uIGlzIGZpbGVkLiA8L3NwYW4+PC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+QWxsIFJlY2lwaWVudCdzIHJpZ2h0cyB1bmRlciB0aGlzIEFncmVlbWVudAorc2hhbGwgdGVybWluYXRlIGlmIGl0IGZhaWxzIHRvIGNvbXBseSB3aXRoIGFueSBvZiB0aGUgbWF0ZXJpYWwgdGVybXMgb3IKK2NvbmRpdGlvbnMgb2YgdGhpcyBBZ3JlZW1lbnQgYW5kIGRvZXMgbm90IGN1cmUgc3VjaCBmYWlsdXJlIGluIGEgcmVhc29uYWJsZQorcGVyaW9kIG9mIHRpbWUgYWZ0ZXIgYmVjb21pbmcgYXdhcmUgb2Ygc3VjaCBub25jb21wbGlhbmNlLiBJZiBhbGwgUmVjaXBpZW50J3MKK3JpZ2h0cyB1bmRlciB0aGlzIEFncmVlbWVudCB0ZXJtaW5hdGUsIFJlY2lwaWVudCBhZ3JlZXMgdG8gY2Vhc2UgdXNlIGFuZAorZGlzdHJpYnV0aW9uIG9mIHRoZSBQcm9ncmFtIGFzIHNvb24gYXMgcmVhc29uYWJseSBwcmFjdGljYWJsZS4gSG93ZXZlciwKK1JlY2lwaWVudCdzIG9ibGlnYXRpb25zIHVuZGVyIHRoaXMgQWdyZWVtZW50IGFuZCBhbnkgbGljZW5zZXMgZ3JhbnRlZCBieQorUmVjaXBpZW50IHJlbGF0aW5nIHRvIHRoZSBQcm9ncmFtIHNoYWxsIGNvbnRpbnVlIGFuZCBzdXJ2aXZlLiA8L3NwYW4+PC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+RXZlcnlvbmUgaXMgcGVybWl0dGVkIHRvIGNvcHkgYW5kIGRpc3RyaWJ1dGUKK2NvcGllcyBvZiB0aGlzIEFncmVlbWVudCwgYnV0IGluIG9yZGVyIHRvIGF2b2lkIGluY29uc2lzdGVuY3kgdGhlIEFncmVlbWVudCBpcworY29weXJpZ2h0ZWQgYW5kIG1heSBvbmx5IGJlIG1vZGlmaWVkIGluIHRoZSBmb2xsb3dpbmcgbWFubmVyLiBUaGUgQWdyZWVtZW50CitTdGV3YXJkIHJlc2VydmVzIHRoZSByaWdodCB0byBwdWJsaXNoIG5ldyB2ZXJzaW9ucyAoaW5jbHVkaW5nIHJldmlzaW9ucykgb2YKK3RoaXMgQWdyZWVtZW50IGZyb20gdGltZSB0byB0aW1lLiBObyBvbmUgb3RoZXIgdGhhbiB0aGUgQWdyZWVtZW50IFN0ZXdhcmQgaGFzCit0aGUgcmlnaHQgdG8gbW9kaWZ5IHRoaXMgQWdyZWVtZW50LiBUaGUgRWNsaXBzZSBGb3VuZGF0aW9uIGlzIHRoZSBpbml0aWFsCitBZ3JlZW1lbnQgU3Rld2FyZC4gVGhlIEVjbGlwc2UgRm91bmRhdGlvbiBtYXkgYXNzaWduIHRoZSByZXNwb25zaWJpbGl0eSB0bworc2VydmUgYXMgdGhlIEFncmVlbWVudCBTdGV3YXJkIHRvIGEgc3VpdGFibGUgc2VwYXJhdGUgZW50aXR5LiBFYWNoIG5ldyB2ZXJzaW9uCitvZiB0aGUgQWdyZWVtZW50IHdpbGwgYmUgZ2l2ZW4gYSBkaXN0aW5ndWlzaGluZyB2ZXJzaW9uIG51bWJlci4gVGhlIFByb2dyYW0KKyhpbmNsdWRpbmcgQ29udHJpYnV0aW9ucykgbWF5IGFsd2F5cyBiZSBkaXN0cmlidXRlZCBzdWJqZWN0IHRvIHRoZSB2ZXJzaW9uIG9mCit0aGUgQWdyZWVtZW50IHVuZGVyIHdoaWNoIGl0IHdhcyByZWNlaXZlZC4gSW4gYWRkaXRpb24sIGFmdGVyIGEgbmV3IHZlcnNpb24gb2YKK3RoZSBBZ3JlZW1lbnQgaXMgcHVibGlzaGVkLCBDb250cmlidXRvciBtYXkgZWxlY3QgdG8gZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbQorKGluY2x1ZGluZyBpdHMgQ29udHJpYnV0aW9ucykgdW5kZXIgdGhlIG5ldyB2ZXJzaW9uLiBFeGNlcHQgYXMgZXhwcmVzc2x5IHN0YXRlZAoraW4gU2VjdGlvbnMgMihhKSBhbmQgMihiKSBhYm92ZSwgUmVjaXBpZW50IHJlY2VpdmVzIG5vIHJpZ2h0cyBvciBsaWNlbnNlcyB0bwordGhlIGludGVsbGVjdHVhbCBwcm9wZXJ0eSBvZiBhbnkgQ29udHJpYnV0b3IgdW5kZXIgdGhpcyBBZ3JlZW1lbnQsIHdoZXRoZXIKK2V4cHJlc3NseSwgYnkgaW1wbGljYXRpb24sIGVzdG9wcGVsIG9yIG90aGVyd2lzZS4gQWxsIHJpZ2h0cyBpbiB0aGUgUHJvZ3JhbSBub3QKK2V4cHJlc3NseSBncmFudGVkIHVuZGVyIHRoaXMgQWdyZWVtZW50IGFyZSByZXNlcnZlZC48L3NwYW4+IDwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPlRoaXMgQWdyZWVtZW50IGlzIGdvdmVybmVkIGJ5IHRoZSBsYXdzIG9mIHRoZQorU3RhdGUgb2YgTmV3IFlvcmsgYW5kIHRoZSBpbnRlbGxlY3R1YWwgcHJvcGVydHkgbGF3cyBvZiB0aGUgVW5pdGVkIFN0YXRlcyBvZgorQW1lcmljYS4gTm8gcGFydHkgdG8gdGhpcyBBZ3JlZW1lbnQgd2lsbCBicmluZyBhIGxlZ2FsIGFjdGlvbiB1bmRlciB0aGlzCitBZ3JlZW1lbnQgbW9yZSB0aGFuIG9uZSB5ZWFyIGFmdGVyIHRoZSBjYXVzZSBvZiBhY3Rpb24gYXJvc2UuIEVhY2ggcGFydHkgd2FpdmVzCitpdHMgcmlnaHRzIHRvIGEganVyeSB0cmlhbCBpbiBhbnkgcmVzdWx0aW5nIGxpdGlnYXRpb24uPC9zcGFuPiA8L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbD48IVtpZiAhc3VwcG9ydEVtcHR5UGFyYXNdPiZuYnNwOzwhW2VuZGlmXT48bzpwPjwvbzpwPjwvcD4KKworPC9kaXY+CisKKzwvYm9keT4KKworPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGVmaW5pdGlvbnMvbm90aWNlLmh0bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRlZmluaXRpb25zL25vdGljZS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM2YWY5NjYKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRlZmluaXRpb25zL25vdGljZS5odG1sCkBAIC0wLDAgKzEsNzkgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAvL0VOIj4KKzxodG1sPgorPGhlYWQ+Cis8bWV0YSBodHRwLWVxdWl2PUNvbnRlbnQtVHlwZSBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9aXNvLTg4NTktMSI+Cis8dGl0bGU+RWNsaXBzZS5vcmcgU29mdHdhcmUgVXNlciBBZ3JlZW1lbnQ8L3RpdGxlPgorPC9oZWFkPgorCis8Ym9keSBsYW5nPSJFTi1VUyIgbGluaz1ibHVlIHZsaW5rPXB1cnBsZT4KKzxoMj5FY2xpcHNlIEZvdW5kYXRpb24gU29mdHdhcmUgVXNlciBBZ3JlZW1lbnQ8L2gyPgorPHA+TWFyY2ggMTcsIDIwMDU8L3A+CisKKzxoMz5Vc2FnZSBPZiBDb250ZW50PC9oMz4KKworPHA+VEhFIEVDTElQU0UgRk9VTkRBVElPTiBNQUtFUyBBVkFJTEFCTEUgU09GVFdBUkUsIERPQ1VNRU5UQVRJT04sIElORk9STUFUSU9OIEFORC9PUiBPVEhFUiBNQVRFUklBTFMgRk9SIE9QRU4gU09VUkNFIFBST0pFQ1RTCisgICAoQ09MTEVDVElWRUxZICZxdW90O0NPTlRFTlQmcXVvdDspLiAgVVNFIE9GIFRIRSBDT05URU5UIElTIEdPVkVSTkVEIEJZIFRIRSBURVJNUyBBTkQgQ09ORElUSU9OUyBPRiBUSElTIEFHUkVFTUVOVCBBTkQvT1IgVEhFIFRFUk1TIEFORAorICAgQ09ORElUSU9OUyBPRiBMSUNFTlNFIEFHUkVFTUVOVFMgT1IgTk9USUNFUyBJTkRJQ0FURUQgT1IgUkVGRVJFTkNFRCBCRUxPVy4gIEJZIFVTSU5HIFRIRSBDT05URU5ULCBZT1UgQUdSRUUgVEhBVCBZT1VSIFVTRQorICAgT0YgVEhFIENPTlRFTlQgSVMgR09WRVJORUQgQlkgVEhJUyBBR1JFRU1FTlQgQU5EL09SIFRIRSBURVJNUyBBTkQgQ09ORElUSU9OUyBPRiBBTlkgQVBQTElDQUJMRSBMSUNFTlNFIEFHUkVFTUVOVFMgT1IKKyAgIE5PVElDRVMgSU5ESUNBVEVEIE9SIFJFRkVSRU5DRUQgQkVMT1cuICBJRiBZT1UgRE8gTk9UIEFHUkVFIFRPIFRIRSBURVJNUyBBTkQgQ09ORElUSU9OUyBPRiBUSElTIEFHUkVFTUVOVCBBTkQgVEhFIFRFUk1TIEFORAorICAgQ09ORElUSU9OUyBPRiBBTlkgQVBQTElDQUJMRSBMSUNFTlNFIEFHUkVFTUVOVFMgT1IgTk9USUNFUyBJTkRJQ0FURUQgT1IgUkVGRVJFTkNFRCBCRUxPVywgVEhFTiBZT1UgTUFZIE5PVCBVU0UgVEhFIENPTlRFTlQuPC9wPgorICAgCis8aDM+QXBwbGljYWJsZSBMaWNlbnNlczwvaDM+ICAgCisgICAKKzxwPlVubGVzcyBvdGhlcndpc2UgaW5kaWNhdGVkLCBhbGwgQ29udGVudCBtYWRlIGF2YWlsYWJsZSBieSB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uIGlzIHByb3ZpZGVkIHRvIHlvdSB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjAKKyAgICgmcXVvdDtFUEwmcXVvdDspLiAgQSBjb3B5IG9mIHRoZSBFUEwgaXMgcHJvdmlkZWQgd2l0aCB0aGlzIENvbnRlbnQgYW5kIGlzIGFsc28gYXZhaWxhYmxlIGF0IDxhIGhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sIj5odHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbDwvYT4uCisgICBGb3IgcHVycG9zZXMgb2YgdGhlIEVQTCwgJnF1b3Q7UHJvZ3JhbSZxdW90OyB3aWxsIG1lYW4gdGhlIENvbnRlbnQuPC9wPgorCis8cD5Db250ZW50IGluY2x1ZGVzLCBidXQgaXMgbm90IGxpbWl0ZWQgdG8sIHNvdXJjZSBjb2RlLCBvYmplY3QgY29kZSwgZG9jdW1lbnRhdGlvbiBhbmQgb3RoZXIgZmlsZXMgbWFpbnRhaW5lZCBpbiB0aGUgRWNsaXBzZS5vcmcgQ1ZTIHJlcG9zaXRvcnkgKCZxdW90O1JlcG9zaXRvcnkmcXVvdDspIGluIENWUworICAgbW9kdWxlcyAoJnF1b3Q7TW9kdWxlcyZxdW90OykgYW5kIG1hZGUgYXZhaWxhYmxlIGFzIGRvd25sb2FkYWJsZSBhcmNoaXZlcyAoJnF1b3Q7RG93bmxvYWRzJnF1b3Q7KS48L3A+CisgICAKKzx1bD4KKwk8bGk+Q29udGVudCBtYXkgYmUgc3RydWN0dXJlZCBhbmQgcGFja2FnZWQgaW50byBtb2R1bGVzIHRvIGZhY2lsaXRhdGUgZGVsaXZlcmluZywgZXh0ZW5kaW5nLCBhbmQgdXBncmFkaW5nIHRoZSBDb250ZW50LiAgVHlwaWNhbCBtb2R1bGVzIG1heSBpbmNsdWRlIHBsdWctaW5zICgmcXVvdDtQbHVnLWlucyZxdW90OyksIHBsdWctaW4gZnJhZ21lbnRzICgmcXVvdDtGcmFnbWVudHMmcXVvdDspLCBhbmQgZmVhdHVyZXMgKCZxdW90O0ZlYXR1cmVzJnF1b3Q7KS48L2xpPgorCTxsaT5FYWNoIFBsdWctaW4gb3IgRnJhZ21lbnQgbWF5IGJlIHBhY2thZ2VkIGFzIGEgc3ViLWRpcmVjdG9yeSBvciBKQVIgKEphdmEmdHJhZGU7IEFSY2hpdmUpIGluIGEgZGlyZWN0b3J5IG5hbWVkICZxdW90O3BsdWdpbnMmcXVvdDsuPC9saT4KKwk8bGk+QSBGZWF0dXJlIGlzIGEgYnVuZGxlIG9mIG9uZSBvciBtb3JlIFBsdWctaW5zIGFuZC9vciBGcmFnbWVudHMgYW5kIGFzc29jaWF0ZWQgbWF0ZXJpYWwuICBFYWNoIEZlYXR1cmUgbWF5IGJlIHBhY2thZ2VkIGFzIGEgc3ViLWRpcmVjdG9yeSBpbiBhIGRpcmVjdG9yeSBuYW1lZCAmcXVvdDtmZWF0dXJlcyZxdW90Oy4gIFdpdGhpbiBhIEZlYXR1cmUsIGZpbGVzIG5hbWVkICZxdW90O2ZlYXR1cmUueG1sJnF1b3Q7IG1heSBjb250YWluIGEgbGlzdCBvZiB0aGUgbmFtZXMgYW5kIHZlcnNpb24gbnVtYmVycyBvZiB0aGUgUGx1Zy1pbnMKKyAgICAgIGFuZC9vciBGcmFnbWVudHMgYXNzb2NpYXRlZCB3aXRoIHRoYXQgRmVhdHVyZS48L2xpPgorCTxsaT5GZWF0dXJlcyBtYXkgYWxzbyBpbmNsdWRlIG90aGVyIEZlYXR1cmVzICgmcXVvdDtJbmNsdWRlZCBGZWF0dXJlcyZxdW90OykuIFdpdGhpbiBhIEZlYXR1cmUsIGZpbGVzIG5hbWVkICZxdW90O2ZlYXR1cmUueG1sJnF1b3Q7IG1heSBjb250YWluIGEgbGlzdCBvZiB0aGUgbmFtZXMgYW5kIHZlcnNpb24gbnVtYmVycyBvZiBJbmNsdWRlZCBGZWF0dXJlcy48L2xpPgorPC91bD4gICAKKyAKKzxwPlRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBnb3Zlcm5pbmcgUGx1Zy1pbnMgYW5kIEZyYWdtZW50cyBzaG91bGQgYmUgY29udGFpbmVkIGluIGZpbGVzIG5hbWVkICZxdW90O2Fib3V0Lmh0bWwmcXVvdDsgKCZxdW90O0Fib3V0cyZxdW90OykuIFRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBnb3Zlcm5pbmcgRmVhdHVyZXMgYW5kCitJbmNsdWRlZCBGZWF0dXJlcyBzaG91bGQgYmUgY29udGFpbmVkIGluIGZpbGVzIG5hbWVkICZxdW90O2xpY2Vuc2UuaHRtbCZxdW90OyAoJnF1b3Q7RmVhdHVyZSBMaWNlbnNlcyZxdW90OykuICBBYm91dHMgYW5kIEZlYXR1cmUgTGljZW5zZXMgbWF5IGJlIGxvY2F0ZWQgaW4gYW55IGRpcmVjdG9yeSBvZiBhIERvd25sb2FkIG9yIE1vZHVsZQoraW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG8gdGhlIGZvbGxvd2luZyBsb2NhdGlvbnM6PC9wPgorCis8dWw+CisJPGxpPlRoZSB0b3AtbGV2ZWwgKHJvb3QpIGRpcmVjdG9yeTwvbGk+CisJPGxpPlBsdWctaW4gYW5kIEZyYWdtZW50IGRpcmVjdG9yaWVzPC9saT4KKwk8bGk+SW5zaWRlIFBsdWctaW5zIGFuZCBGcmFnbWVudHMgcGFja2FnZWQgYXMgSkFSczwvbGk+CisJPGxpPlN1Yi1kaXJlY3RvcmllcyBvZiB0aGUgZGlyZWN0b3J5IG5hbWVkICZxdW90O3NyYyZxdW90OyBvZiBjZXJ0YWluIFBsdWctaW5zPC9saT4KKwk8bGk+RmVhdHVyZSBkaXJlY3RvcmllczwvbGk+Cis8L3VsPgorCQkKKzxwPk5vdGU6IGlmIGEgRmVhdHVyZSBtYWRlIGF2YWlsYWJsZSBieSB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uIGlzIGluc3RhbGxlZCB1c2luZyB0aGUgRWNsaXBzZSBVcGRhdGUgTWFuYWdlciwgeW91IG11c3QgYWdyZWUgdG8gYSBsaWNlbnNlICgmcXVvdDtGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlJnF1b3Q7KSBkdXJpbmcgdGhlCitpbnN0YWxsYXRpb24gcHJvY2Vzcy4gIElmIHRoZSBGZWF0dXJlIGNvbnRhaW5zIEluY2x1ZGVkIEZlYXR1cmVzLCB0aGUgRmVhdHVyZSBVcGRhdGUgTGljZW5zZSBzaG91bGQgZWl0aGVyIHByb3ZpZGUgeW91IHdpdGggdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIGdvdmVybmluZyB0aGUgSW5jbHVkZWQgRmVhdHVyZXMgb3IKK2luZm9ybSB5b3Ugd2hlcmUgeW91IGNhbiBsb2NhdGUgdGhlbS4gIEZlYXR1cmUgVXBkYXRlIExpY2Vuc2VzIG1heSBiZSBmb3VuZCBpbiB0aGUgJnF1b3Q7bGljZW5zZSZxdW90OyBwcm9wZXJ0eSBvZiBmaWxlcyBuYW1lZCAmcXVvdDtmZWF0dXJlLnByb3BlcnRpZXMmcXVvdDsgZm91bmQgd2l0aGluIGEgRmVhdHVyZS4KK1N1Y2ggQWJvdXRzLCBGZWF0dXJlIExpY2Vuc2VzLCBhbmQgRmVhdHVyZSBVcGRhdGUgTGljZW5zZXMgY29udGFpbiB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgKG9yIHJlZmVyZW5jZXMgdG8gc3VjaCB0ZXJtcyBhbmQgY29uZGl0aW9ucykgdGhhdCBnb3Zlcm4geW91ciB1c2Ugb2YgdGhlIGFzc29jaWF0ZWQgQ29udGVudCBpbgordGhhdCBkaXJlY3RvcnkuPC9wPgorCis8cD5USEUgQUJPVVRTLCBGRUFUVVJFIExJQ0VOU0VTLCBBTkQgRkVBVFVSRSBVUERBVEUgTElDRU5TRVMgTUFZIFJFRkVSIFRPIFRIRSBFUEwgT1IgT1RIRVIgTElDRU5TRSBBR1JFRU1FTlRTLCBOT1RJQ0VTIE9SIFRFUk1TIEFORCBDT05ESVRJT05TLiAgU09NRSBPRiBUSEVTRQorT1RIRVIgTElDRU5TRSBBR1JFRU1FTlRTIE1BWSBJTkNMVURFIChCVVQgQVJFIE5PVCBMSU1JVEVEIFRPKTo8L3A+CisKKzx1bD4KKwk8bGk+Q29tbW9uIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4wIChhdmFpbGFibGUgYXQgPGEgaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9jcGwtdjEwLmh0bWwiPmh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvY3BsLXYxMC5odG1sPC9hPik8L2xpPgorCTxsaT5BcGFjaGUgU29mdHdhcmUgTGljZW5zZSAxLjEgKGF2YWlsYWJsZSBhdCA8YSBocmVmPSJodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRSI+aHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0U8L2E+KTwvbGk+CisJPGxpPkFwYWNoZSBTb2Z0d2FyZSBMaWNlbnNlIDIuMCAoYXZhaWxhYmxlIGF0IDxhIGhyZWY9Imh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMCI+aHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wPC9hPik8L2xpPgorCTxsaT5JQk0gUHVibGljIExpY2Vuc2UgMS4wIChhdmFpbGFibGUgYXQgPGEgaHJlZj0iaHR0cDovL29zcy5zb2Z0d2FyZS5pYm0uY29tL2RldmVsb3BlcndvcmtzL29wZW5zb3VyY2UvbGljZW5zZTEwLmh0bWwiPmh0dHA6Ly9vc3Muc29mdHdhcmUuaWJtLmNvbS9kZXZlbG9wZXJ3b3Jrcy9vcGVuc291cmNlL2xpY2Vuc2UxMC5odG1sPC9hPik8L2xpPgkKKwk8bGk+TWV0cm8gTGluayBQdWJsaWMgTGljZW5zZSAxLjAwIChhdmFpbGFibGUgYXQgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuZ3JvdXAub3JnL29wZW5tb3RpZi9zdXBwb3J0ZXJzL21ldHJvbGluay9saWNlbnNlLmh0bWwiPmh0dHA6Ly93d3cub3Blbmdyb3VwLm9yZy9vcGVubW90aWYvc3VwcG9ydGVycy9tZXRyb2xpbmsvbGljZW5zZS5odG1sPC9hPik8L2xpPgorCTxsaT5Nb3ppbGxhIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4xIChhdmFpbGFibGUgYXQgPGEgaHJlZj0iaHR0cDovL3d3dy5tb3ppbGxhLm9yZy9NUEwvTVBMLTEuMS5odG1sIj5odHRwOi8vd3d3Lm1vemlsbGEub3JnL01QTC9NUEwtMS4xLmh0bWw8L2E+KTwvbGk+Cis8L3VsPgorCis8cD5JVCBJUyBZT1VSIE9CTElHQVRJT04gVE8gUkVBRCBBTkQgQUNDRVBUIEFMTCBTVUNIIFRFUk1TIEFORCBDT05ESVRJT05TIFBSSU9SIFRPIFVTRSBPRiBUSEUgQ09OVEVOVC4gIElmIG5vIEFib3V0LCBGZWF0dXJlIExpY2Vuc2UsIG9yIEZlYXR1cmUgVXBkYXRlIExpY2Vuc2UgaXMgcHJvdmlkZWQsIHBsZWFzZQorY29udGFjdCB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uIHRvIGRldGVybWluZSB3aGF0IHRlcm1zIGFuZCBjb25kaXRpb25zIGdvdmVybiB0aGF0IHBhcnRpY3VsYXIgQ29udGVudC48L3A+CisKKzxoMz5DcnlwdG9ncmFwaHk8L2gzPgorCis8cD5Db250ZW50IG1heSBjb250YWluIGVuY3J5cHRpb24gc29mdHdhcmUuIFRoZSBjb3VudHJ5IGluIHdoaWNoIHlvdSBhcmUgY3VycmVudGx5IG1heSBoYXZlIHJlc3RyaWN0aW9ucyBvbiB0aGUgaW1wb3J0LCBwb3NzZXNzaW9uLCBhbmQgdXNlLCBhbmQvb3IgcmUtZXhwb3J0IHRvCisgICBhbm90aGVyIGNvdW50cnksIG9mIGVuY3J5cHRpb24gc29mdHdhcmUuIEJFRk9SRSB1c2luZyBhbnkgZW5jcnlwdGlvbiBzb2Z0d2FyZSwgcGxlYXNlIGNoZWNrIHRoZSBjb3VudHJ5J3MgbGF3cywgcmVndWxhdGlvbnMgYW5kIHBvbGljaWVzIGNvbmNlcm5pbmcgdGhlIGltcG9ydCwKKyAgIHBvc3Nlc3Npb24sIG9yIHVzZSwgYW5kIHJlLWV4cG9ydCBvZiBlbmNyeXB0aW9uIHNvZnR3YXJlLCB0byBzZWUgaWYgdGhpcyBpcyBwZXJtaXR0ZWQuPC9wPgorICAgCis8c21hbGw+SmF2YSBhbmQgYWxsIEphdmEtYmFzZWQgdHJhZGVtYXJrcyBhcmUgdHJhZGVtYXJrcyBvZiBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuIGluIHRoZSBVbml0ZWQgU3RhdGVzLCBvdGhlciBjb3VudHJpZXMsIG9yIGJvdGguPC9zbWFsbD4gICAKKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGVmaW5pdGlvbnMvcGx1Z2luLnByb3BlcnRpZXMgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRlZmluaXRpb25zL3BsdWdpbi5wcm9wZXJ0aWVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVjMmUzN2YKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRlZmluaXRpb25zL3BsdWdpbi5wcm9wZXJ0aWVzCkBAIC0wLDAgKzEsMjYgQEAKKyMvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIyAqIENvcHlyaWdodCAoYykgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyMgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisjICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisjICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyMgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorIyAqCisjICogQ29udHJpYnV0b3JzOgorIyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorIyBUbyBjb2RlIGRldmVsb3BlcjoKKyMgICBEbyBOT1QgY2hhbmdlIHRoZSBwcm9wZXJ0aWVzIGJldHdlZW4gdGhpcyBsaW5lIGFuZCB0aGUKKyMgICAiJSUlIEVORCBPRiBUUkFOU0xBVEVEIFBST1BFUlRJRVMgJSUlIiBsaW5lLgorIyAgIE1ha2UgYSBuZXcgcHJvcGVydHkgbmFtZSwgYXBwZW5kIHRvIHRoZSBlbmQgb2YgdGhlIGZpbGUgYW5kIGNoYW5nZQorIyAgIHRoZSBjb2RlIHRvIHVzZSB0aGUgbmV3IHByb3BlcnR5LgorIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisjICUlJSBFTkQgT0YgVFJBTlNMQVRFRCBQUk9QRVJUSUVTICUlJQorIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitwbHVnaW5OYW1lID0gU1RFTSBEZWZpbml0aW9ucyBUZXN0IFN1aXRlCitwcm92aWRlck5hbWUgPSBFY2xpcHNlLm9yZworCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL2FkYXB0ZXJzL3JlbGF0aXZldmFsdWUvUmVsYXRpdmVWYWx1ZVByb3ZpZGVyQWRhcHRlckZhY3RvcnlJbXBsVGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kZWZpbml0aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy9hZGFwdGVycy9yZWxhdGl2ZXZhbHVlL1JlbGF0aXZlVmFsdWVQcm92aWRlckFkYXB0ZXJGYWN0b3J5SW1wbFRlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZWJlODFkCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kZWZpbml0aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy9hZGFwdGVycy9yZWxhdGl2ZXZhbHVlL1JlbGF0aXZlVmFsdWVQcm92aWRlckFkYXB0ZXJGYWN0b3J5SW1wbFRlc3QuamF2YQpAQCAtMCwwICsxLDY5IEBACisvLyBSZWxhdGl2ZVZhbHVlUHJvdmlkZXJBZGFwdGVyRmFjdG9yeUltcGxUZXN0LmphdmEKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5hZGFwdGVycy5yZWxhdGl2ZXZhbHVlOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGphdmEudXRpbC5MaXN0OworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVTdHJ1Y3R1cmFsRmVhdHVyZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbVByb3BlcnR5RGVzY3JpcHRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmFkYXB0ZXJzLnJlbGF0aXZldmFsdWUuUmVsYXRpdmVWYWx1ZVByb3ZpZGVyQWRhcHRlckZhY3RvcnkuUmVsYXRpdmVWYWx1ZVByb3ZpZGVyQWRhcHRlckZhY3RvcnlJbXBsOworCisKKy8qKgorICogVGhpcyBjbGFzcyBpcyBhIEpVbml0IHRlc3QgY2FzZSBmb3IKKyAqIHtAbGluayBSZWxhdGl2ZVZhbHVlUHJvdmlkZXJBZGFwdGVyRmFjdG9yeUltcGx9LgorICovCitAU3VwcHJlc3NXYXJuaW5ncygiYWxsIikKK2ZpbmFsIHB1YmxpYyBjbGFzcyBSZWxhdGl2ZVZhbHVlUHJvdmlkZXJBZGFwdGVyRmFjdG9yeUltcGxUZXN0IGV4dGVuZHMKKwkJUmVsYXRpdmVWYWx1ZVByb3ZpZGVyQWRhcHRlckZhY3RvcnlUZXN0IHsKKworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIHNldFVwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCXNldEZpeHR1cmUoY3JlYXRlRml4dHVyZSgpKTsKKwl9CisKKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgdm9pZCB0ZWFyRG93bigpIHRocm93cyBFeGNlcHRpb24geworCQlzZXRGaXh0dXJlKG51bGwpOworCX0KKworCS8qKgorCSAqIEByZXR1cm4gdGhlIGZpeHR1cmUgZm9yIHRlc3RpbmcKKwkgKi8KKwlwdWJsaWMgUmVsYXRpdmVWYWx1ZVByb3ZpZGVyQWRhcHRlckZhY3RvcnkgY3JlYXRlRml4dHVyZSgpIHsKKwkJcmV0dXJuIG5ldyBSZWxhdGl2ZVZhbHVlUHJvdmlkZXJBZGFwdGVyRmFjdG9yeS5SZWxhdGl2ZVZhbHVlUHJvdmlkZXJBZGFwdGVyRmFjdG9yeUltcGwoKSB7CisKKwkJCUBPdmVycmlkZQorCQkJcHVibGljIE9iamVjdCBhZGFwdChPYmplY3QgdGFyZ2V0LCBPYmplY3QgdHlwZSkgeworCQkJCXJldHVybiBuZXcgUmVsYXRpdmVWYWx1ZVByb3ZpZGVyQWRhcHRlcigpIHsKKwkJCQkJQE92ZXJyaWRlCisJCQkJCXB1YmxpYyBMaXN0PElJdGVtUHJvcGVydHlEZXNjcmlwdG9yPiBnZXRQcm9wZXJ0aWVzKCkgeworCQkJCQkJcmV0dXJuIG51bGw7CisJCQkJCX0KKworCQkJCQlAT3ZlcnJpZGUKKwkJCQkJcHVibGljIGRvdWJsZSBnZXRSZWxhdGl2ZVZhbHVlKEVTdHJ1Y3R1cmFsRmVhdHVyZSBmZWF0dXJlKSB7CisJCQkJCQlyZXR1cm4gMDsKKwkJCQkJfQorCQkJCQkKKwkJCQkJQE92ZXJyaWRlCisJCQkJCXB1YmxpYyBkb3VibGUgZ2V0RGVub21pbmF0b3IoRVN0cnVjdHVyYWxGZWF0dXJlIGZlYXR1cmUpIHsKKwkJCQkJCXJldHVybiAwLjA7CisJCQkJCX0KKwkJCQkJCisJCQkJfTsKKwkJCX0gLy8gYWRhcHQKKwkJfTsKKwl9IC8vIGNyZWF0ZUZpeHR1cmUKKworfSAvLyBSZWxhdGl2ZVZhbHVlUHJvdmlkZXJBZGFwdGVyRmFjdG9yeUltcGxUZXN0CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL2FkYXB0ZXJzL3JlbGF0aXZldmFsdWUvUmVsYXRpdmVWYWx1ZVByb3ZpZGVyQWRhcHRlckZhY3RvcnlUZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL2FkYXB0ZXJzL3JlbGF0aXZldmFsdWUvUmVsYXRpdmVWYWx1ZVByb3ZpZGVyQWRhcHRlckZhY3RvcnlUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjhhNDRkOQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvYWRhcHRlcnMvcmVsYXRpdmV2YWx1ZS9SZWxhdGl2ZVZhbHVlUHJvdmlkZXJBZGFwdGVyRmFjdG9yeVRlc3QuamF2YQpAQCAtMCwwICsxLDQ3IEBACisvLyBSZWxhdGl2ZVZhbHVlUHJvdmlkZXJBZGFwdGVyRmFjdG9yeVRlc3QuamF2YQorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmFkYXB0ZXJzLnJlbGF0aXZldmFsdWU7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOworCisKKy8qKgorICogVGhpcyBjbGFzcyBpcyBhIEpVbml0IHRlc3QgY2FzZSBmb3IgUmVsYXRpdmVWYWx1ZVByb3ZpZGVyQWRhcHRlckZhY3RvcnlJbXBsCisgKi8KK2Fic3RyYWN0IHB1YmxpYyBjbGFzcyBSZWxhdGl2ZVZhbHVlUHJvdmlkZXJBZGFwdGVyRmFjdG9yeVRlc3QgZXh0ZW5kcyBUZXN0Q2FzZSB7CisKKwkvKioKKwkgKiBUaGlzIGlzIHRoZSBmYWN0b3J5IHVuZGVyIHRlc3QuIFRoZSB2YWx1ZSBpcyBzZXQgaW4gdGhlCisJICogPGNvZGU+c2V0VXA8L2NvZGU+IG1ldGhvZCBvZiBhIGRlcml2ZWQgY2xhc3MuCisJICovCisJcHJvdGVjdGVkIFJlbGF0aXZlVmFsdWVQcm92aWRlckFkYXB0ZXJGYWN0b3J5IGZpeHR1cmUgPSBudWxsOworCisJQFN1cHByZXNzV2FybmluZ3MoInVucXVhbGlmaWVkLWZpZWxkLWFjY2VzcyIpCisJcHJpdmF0ZSBSZWxhdGl2ZVZhbHVlUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSBnZXRGaXh0dXJlKCkgeworCQlyZXR1cm4gZml4dHVyZTsKKwl9IC8vIFNwYXRpYWxQcm92aWRlckFkYXB0ZXJGYWN0b3J5CisKKwlwcm90ZWN0ZWQgdm9pZCBzZXRGaXh0dXJlKGZpbmFsIFJlbGF0aXZlVmFsdWVQcm92aWRlckFkYXB0ZXJGYWN0b3J5IGZpeHR1cmUpIHsKKwkJdGhpcy5maXh0dXJlID0gZml4dHVyZTsKKwl9IC8vIHNldEZpeHR1cmUKKworCS8qKgorCSAqIFRlc3QgbWV0aG9kIGZvcgorCSAqIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmFkYXB0ZXJzLnJlbGF0aXZldmFsdWUuUmVsYXRpdmVWYWx1ZVByb3ZpZGVyQWRhcHRlckZhY3RvcnkuUmVsYXRpdmVWYWx1ZVByb3ZpZGVyQWRhcHRlckZhY3RvcnlJbXBsI2lzRmFjdG9yeUZvclR5cGUoamF2YS5sYW5nLk9iamVjdCl9LgorCSAqLworCXB1YmxpYyB2b2lkIHRlc3RJc0ZhY3RvcnlGb3JUeXBlT2JqZWN0KCkgeworCQlmaW5hbCBSZWxhdGl2ZVZhbHVlUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSBmaXh0dXJlID0gZ2V0Rml4dHVyZSgpOworCQlhc3NlcnRUcnVlKGZpeHR1cmUuaXNGYWN0b3J5Rm9yVHlwZShSZWxhdGl2ZVZhbHVlUHJvdmlkZXIuY2xhc3MpKTsKKwl9IC8vIHRlc3RJc0ZhY3RvcnlGb3JUeXBlT2JqZWN0CisKK30gLy8gUmVsYXRpdmVWYWx1ZVByb3ZpZGVyQWRhcHRlckZhY3RvcnlUZXN0CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL2FkYXB0ZXJzL3JlbGF0aXZldmFsdWUvUmVsYXRpdmVWYWx1ZVByb3ZpZGVyQWRhcHRlclRlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvYWRhcHRlcnMvcmVsYXRpdmV2YWx1ZS9SZWxhdGl2ZVZhbHVlUHJvdmlkZXJBZGFwdGVyVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM5MWEyNGEKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL2FkYXB0ZXJzL3JlbGF0aXZldmFsdWUvUmVsYXRpdmVWYWx1ZVByb3ZpZGVyQWRhcHRlclRlc3QuamF2YQpAQCAtMCwwICsxLDQ2IEBACisvLyBSZWxhdGl2ZVZhbHVlUHJvdmlkZXJBZGFwdGVyVGVzdC5qYXZhCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuYWRhcHRlcnMucmVsYXRpdmV2YWx1ZTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7CisKKy8qKgorICogVGhpcyBjbGFzcyBpcyBhIEpVbml0IHRlc3QgY2FzZSBmb3IgPGNvZGU+UmVsYXRpdmVWYWx1ZVByb3ZpZGVyQWRhcHRlcjwvY29kZT4ncy4KKyAqLworYWJzdHJhY3QgcHVibGljIGNsYXNzIFJlbGF0aXZlVmFsdWVQcm92aWRlckFkYXB0ZXJUZXN0IGV4dGVuZHMgVGVzdENhc2UgeworCisJLyoqCisJICogVGhpcyBpcyB0aGUgYWRhcHRlciB1bmRlciB0ZXN0LiBUaGUgdmFsdWUgaXMgc2V0IGluIHRoZQorCSAqIDxjb2RlPnNldFVwPC9jb2RlPiBtZXRob2Qgb2YgYSBkZXJpdmVkIGNsYXNzLgorCSAqLworCXByb3RlY3RlZCBSZWxhdGl2ZVZhbHVlUHJvdmlkZXJBZGFwdGVyIGZpeHR1cmUgPSBudWxsOworCisJQFN1cHByZXNzV2FybmluZ3MoInVucXVhbGlmaWVkLWZpZWxkLWFjY2VzcyIpCisJcHJpdmF0ZSBSZWxhdGl2ZVZhbHVlUHJvdmlkZXJBZGFwdGVyIGdldEZpeHR1cmUoKSB7CisJCXJldHVybiBmaXh0dXJlOworCX0gLy8gZ2V0Rml4dHVyZQorCisJcHJvdGVjdGVkIHZvaWQgc2V0Rml4dHVyZShmaW5hbCBSZWxhdGl2ZVZhbHVlUHJvdmlkZXJBZGFwdGVyIGZpeHR1cmUpIHsKKwkJdGhpcy5maXh0dXJlID0gZml4dHVyZTsKKwl9IC8vIHNldEZpeHR1cmUKKworCS8qKgorCSAqIFRlc3QgbWV0aG9kIGZvcgorCSAqIHtAbGluayBSZWxhdGl2ZVZhbHVlUHJvdmlkZXJBZGFwdGVyI2lzQWRhcHRlckZvclR5cGUoT2JqZWN0KX0KKwkgKi8KKwlwdWJsaWMgdm9pZCB0ZXN0SXNBZGFwdGVyRm9yVHlwZSgpIHsKKwkJZmluYWwgUmVsYXRpdmVWYWx1ZVByb3ZpZGVyQWRhcHRlciBmaXh0dXJlID0gZ2V0Rml4dHVyZSgpOworCQlhc3NlcnRUcnVlKGZpeHR1cmUuaXNBZGFwdGVyRm9yVHlwZShSZWxhdGl2ZVZhbHVlUHJvdmlkZXIuY2xhc3MpKTsKKwl9IC8vIHRlc3RJc0FkYXB0ZXJGb3JUeXBlCisKK30gLy8gUmVsYXRpdmVWYWx1ZVByb3ZpZGVyQWRhcHRlclRlc3QKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvYWRhcHRlcnMvcmVsYXRpdmV2YWx1ZS9oaXN0b3J5L1JlbGF0aXZlVmFsdWVIaXN0b3J5UHJvdmlkZXJBZGFwdGVyRmFjdG9yeUltcGxUZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL2FkYXB0ZXJzL3JlbGF0aXZldmFsdWUvaGlzdG9yeS9SZWxhdGl2ZVZhbHVlSGlzdG9yeVByb3ZpZGVyQWRhcHRlckZhY3RvcnlJbXBsVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc2YTViM2UKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL2FkYXB0ZXJzL3JlbGF0aXZldmFsdWUvaGlzdG9yeS9SZWxhdGl2ZVZhbHVlSGlzdG9yeVByb3ZpZGVyQWRhcHRlckZhY3RvcnlJbXBsVGVzdC5qYXZhCkBAIC0wLDAgKzEsMTAzIEBACisvLyBSZWxhdGl2ZVZhbHVlSGlzdG9yeVByb3ZpZGVyQWRhcHRlckZhY3RvcnlJbXBsVGVzdC5qYXZhCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuYWRhcHRlcnMucmVsYXRpdmV2YWx1ZS5oaXN0b3J5OworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGphdmEudXRpbC5MaXN0OworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVTdHJ1Y3R1cmFsRmVhdHVyZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbVByb3BlcnR5RGVzY3JpcHRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JdGVtUHJvcGVydHlEZXNjcmlwdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5TVEVNVGltZTsKKworLyoqCisgKiBUaGlzIGNsYXNzIHJlcHJlc2VudHMKKyAqLworQFN1cHByZXNzV2FybmluZ3MoImFsbCIpCitwdWJsaWMgY2xhc3MgUmVsYXRpdmVWYWx1ZUhpc3RvcnlQcm92aWRlckFkYXB0ZXJGYWN0b3J5SW1wbFRlc3QgZXh0ZW5kcworCQlSZWxhdGl2ZVZhbHVlSGlzdG9yeVByb3ZpZGVyQWRhcHRlckZhY3RvcnlUZXN0IHsKKworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIHNldFVwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCXNldEZpeHR1cmUoY3JlYXRlRml4dHVyZSgpKTsKKwl9CisKKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgdm9pZCB0ZWFyRG93bigpIHRocm93cyBFeGNlcHRpb24geworCQlzZXRGaXh0dXJlKG51bGwpOworCX0KKworCS8qKgorCSAqIEByZXR1cm4gdGhlIGZpeHR1cmUgZm9yIHRlc3RpbmcKKwkgKi8KKwlwdWJsaWMgUmVsYXRpdmVWYWx1ZUhpc3RvcnlQcm92aWRlckFkYXB0ZXJGYWN0b3J5IGNyZWF0ZUZpeHR1cmUoKSB7CisJCXJldHVybiBuZXcgUmVsYXRpdmVWYWx1ZUhpc3RvcnlQcm92aWRlckFkYXB0ZXJGYWN0b3J5LlJlbGF0aXZlVmFsdWVIaXN0b3J5UHJvdmlkZXJBZGFwdGVyRmFjdG9yeUltcGwoKSB7CisKKwkJCUBPdmVycmlkZQorCQkJcHVibGljIE9iamVjdCBhZGFwdChPYmplY3QgdGFyZ2V0LCBPYmplY3QgdHlwZSkgeworCQkJCXJldHVybiBuZXcgUmVsYXRpdmVWYWx1ZUhpc3RvcnlQcm92aWRlckFkYXB0ZXIoKSB7CisJCQkJCUBPdmVycmlkZQorCQkJCQlwdWJsaWMgTGlzdDxJSXRlbVByb3BlcnR5RGVzY3JpcHRvcj4gZ2V0UHJvcGVydGllcygpIHsKKwkJCQkJCXJldHVybiBudWxsOworCQkJCQl9CisJCQkJCQorCisJCQkJCXB1YmxpYyBkb3VibGVbXSBnZXRIaXN0b3JpY0luc3RhbmNlcygKKwkJCQkJCQlJdGVtUHJvcGVydHlEZXNjcmlwdG9yIHByb3BlcnR5LAorCQkJCQkJCVNURU1UaW1lW10gdGltZVJhbmdlKSB7CisJCQkJCQkvLyBUT0RPIEF1dG8tZ2VuZXJhdGVkIG1ldGhvZCBzdHViCisJCQkJCQlyZXR1cm4gbnVsbDsKKwkJCQkJfQorCisKKwkJCQkJQE92ZXJyaWRlCisJCQkJCXB1YmxpYyBkb3VibGUgZ2V0UmVsYXRpdmVWYWx1ZShFU3RydWN0dXJhbEZlYXR1cmUgZmVhdHVyZSkgeworCQkJCQkJcmV0dXJuIDA7CisJCQkJCX0KKworCQkJCQlAT3ZlcnJpZGUKKwkJCQkJcHVibGljIGRvdWJsZVtdIGdldEFsbEhpc3RvcmljUmVsYXRpdmVWYWx1ZXMoCisJCQkJCQkJRVN0cnVjdHVyYWxGZWF0dXJlIGZlYXR1cmUpIHsKKwkJCQkJCXJldHVybiBuZXcgZG91YmxlWzBdOworCQkJCQl9CisKKwkJCQkJQE92ZXJyaWRlCisJCQkJCXB1YmxpYyBTVEVNVGltZVtdIGdldEFsbEhpc3RvcmljVGltZVZhbHVlcygpIHsKKwkJCQkJCXJldHVybiBuZXcgU1RFTVRpbWVbMF07CisJCQkJCX0KKworCQkJCQlAT3ZlcnJpZGUKKwkJCQkJcHVibGljIFNURU1UaW1lIGdldEVhcmxpZXN0VGltZVZhbHVlKCkgeworCQkJCQkJcmV0dXJuIG51bGw7CisJCQkJCX0KKworCQkJCQlAT3ZlcnJpZGUKKwkJCQkJcHVibGljIGRvdWJsZSBnZXRSZWxhdGl2ZVZhbHVlKEVTdHJ1Y3R1cmFsRmVhdHVyZSBmZWF0dXJlLAorCQkJCQkJCVNURU1UaW1lIHRpbWUpIHsKKwkJCQkJCXJldHVybiAwOworCQkJCQl9CisJCQkJCQorCQkJCQlAT3ZlcnJpZGUKKwkJCQkJcHVibGljIGRvdWJsZSBnZXREZW5vbWluYXRvcihFU3RydWN0dXJhbEZlYXR1cmUgZmVhdHVyZSkgeworCQkJCQkJcmV0dXJuIDAuMDsKKwkJCQkJfQorCQkJCQkKKworCQkJCQlwdWJsaWMgaW50IGdldEVhcmxpZXN0Q3ljbGVOdW1iZXIoKSB7CisJCQkJCQlyZXR1cm4gMDsKKwkJCQkJfQorCQkJCX07CisJCQl9IC8vIGFkYXB0CisJCX07CisJfSAvLyBjcmVhdGVGaXh0dXJlCisKK30gLy8gUmVsYXRpdmVWYWx1ZUhpc3RvcnlQcm92aWRlckFkYXB0ZXJGYWN0b3J5SW1wbFRlc3QKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvYWRhcHRlcnMvcmVsYXRpdmV2YWx1ZS9oaXN0b3J5L1JlbGF0aXZlVmFsdWVIaXN0b3J5UHJvdmlkZXJBZGFwdGVyRmFjdG9yeVRlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvYWRhcHRlcnMvcmVsYXRpdmV2YWx1ZS9oaXN0b3J5L1JlbGF0aXZlVmFsdWVIaXN0b3J5UHJvdmlkZXJBZGFwdGVyRmFjdG9yeVRlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41Zjc2MTg4Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kZWZpbml0aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy9hZGFwdGVycy9yZWxhdGl2ZXZhbHVlL2hpc3RvcnkvUmVsYXRpdmVWYWx1ZUhpc3RvcnlQcm92aWRlckFkYXB0ZXJGYWN0b3J5VGVzdC5qYXZhCkBAIC0wLDAgKzEsNDYgQEAKKy8vIFJlbGF0aXZlVmFsdWVIaXN0b3J5UHJvdmlkZXJBZGFwdGVyRmFjdG9yeVRlc3QuamF2YQorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmFkYXB0ZXJzLnJlbGF0aXZldmFsdWUuaGlzdG9yeTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7CisKKy8qKgorICogVGhpcyBjbGFzcyBpcyBhIEpVbml0IHRlc3QgY2FzZSBmb3IKKyAqIFJlbGF0aXZlVmFsdWVIaXN0b3J5UHJvdmlkZXJBZGFwdGVyRmFjdG9yeQorICovCithYnN0cmFjdCBwdWJsaWMgY2xhc3MgUmVsYXRpdmVWYWx1ZUhpc3RvcnlQcm92aWRlckFkYXB0ZXJGYWN0b3J5VGVzdCBleHRlbmRzIFRlc3RDYXNlIHsKKwkvKioKKwkgKiBUaGlzIGlzIHRoZSBmYWN0b3J5IHVuZGVyIHRlc3QuIFRoZSB2YWx1ZSBpcyBzZXQgaW4gdGhlCisJICogPGNvZGU+c2V0VXA8L2NvZGU+IG1ldGhvZCBvZiBhIGRlcml2ZWQgY2xhc3MuCisJICovCisJcHJvdGVjdGVkIFJlbGF0aXZlVmFsdWVIaXN0b3J5UHJvdmlkZXJBZGFwdGVyRmFjdG9yeSBmaXh0dXJlID0gbnVsbDsKKworCUBTdXBwcmVzc1dhcm5pbmdzKCJ1bnF1YWxpZmllZC1maWVsZC1hY2Nlc3MiKQorCXByaXZhdGUgUmVsYXRpdmVWYWx1ZUhpc3RvcnlQcm92aWRlckFkYXB0ZXJGYWN0b3J5IGdldEZpeHR1cmUoKSB7CisJCXJldHVybiBmaXh0dXJlOworCX0gLy8gZ2V0Rml4dHVyZQorCisJcHJvdGVjdGVkIHZvaWQgc2V0Rml4dHVyZShmaW5hbCBSZWxhdGl2ZVZhbHVlSGlzdG9yeVByb3ZpZGVyQWRhcHRlckZhY3RvcnkgZml4dHVyZSkgeworCQl0aGlzLmZpeHR1cmUgPSBmaXh0dXJlOworCX0gLy8gc2V0Rml4dHVyZQorCisJLyoqCisJICogVGVzdCBtZXRob2QgZm9yCisJICoge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuYWRhcHRlcnMucmVsYXRpdmV2YWx1ZS5oaXN0b3J5LlJlbGF0aXZlVmFsdWVIaXN0b3J5UHJvdmlkZXJBZGFwdGVyRmFjdG9yeS5SZWxhdGl2ZVZhbHVlUHJvdmlkZXJBZGFwdGVyRmFjdG9yeUltcGwjaXNGYWN0b3J5Rm9yVHlwZShqYXZhLmxhbmcuT2JqZWN0KX0uCisJICovCisJcHVibGljIHZvaWQgdGVzdElzRmFjdG9yeUZvclR5cGVPYmplY3QoKSB7CisJCWZpbmFsIFJlbGF0aXZlVmFsdWVIaXN0b3J5UHJvdmlkZXJBZGFwdGVyRmFjdG9yeSBmaXh0dXJlID0gZ2V0Rml4dHVyZSgpOworCQlhc3NlcnRUcnVlKGZpeHR1cmUuaXNGYWN0b3J5Rm9yVHlwZShSZWxhdGl2ZVZhbHVlSGlzdG9yeVByb3ZpZGVyLmNsYXNzKSk7CisJfSAvLyB0ZXN0SXNGYWN0b3J5Rm9yVHlwZU9iamVjdAorCit9IC8vIFJlbGF0aXZlVmFsdWVIaXN0b3J5UHJvdmlkZXJBZGFwdGVyRmFjdG9yeVRlc3QKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvYWRhcHRlcnMvcmVsYXRpdmV2YWx1ZS9oaXN0b3J5L1JlbGF0aXZlVmFsdWVIaXN0b3J5UHJvdmlkZXJBZGFwdGVyVGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kZWZpbml0aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy9hZGFwdGVycy9yZWxhdGl2ZXZhbHVlL2hpc3RvcnkvUmVsYXRpdmVWYWx1ZUhpc3RvcnlQcm92aWRlckFkYXB0ZXJUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2FkZjk3ZgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvYWRhcHRlcnMvcmVsYXRpdmV2YWx1ZS9oaXN0b3J5L1JlbGF0aXZlVmFsdWVIaXN0b3J5UHJvdmlkZXJBZGFwdGVyVGVzdC5qYXZhCkBAIC0wLDAgKzEsNDYgQEAKKy8vIFJlbGF0aXZlVmFsdWVIaXN0b3J5UHJvdmlkZXJBZGFwdGVyVGVzdC5qYXZhCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuYWRhcHRlcnMucmVsYXRpdmV2YWx1ZS5oaXN0b3J5OworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKKworLyoqCisgKiBUaGlzIGNsYXNzIGlzIGEgSlVuaXQgdGVzdCBjYXNlIGZvcgorICogPGNvZGU+UmVsYXRpdmVWYWx1ZUhpc3RvcnlQcm92aWRlckFkYXB0ZXI8L2NvZGU+J3MuCisgKi8KK2Fic3RyYWN0IHB1YmxpYyBjbGFzcyBSZWxhdGl2ZVZhbHVlSGlzdG9yeVByb3ZpZGVyQWRhcHRlclRlc3QgZXh0ZW5kcyBUZXN0Q2FzZSB7CisJLyoqCisJICogVGhpcyBpcyB0aGUgYWRhcHRlciB1bmRlciB0ZXN0LiBUaGUgdmFsdWUgaXMgc2V0IGluIHRoZQorCSAqIDxjb2RlPnNldFVwPC9jb2RlPiBtZXRob2Qgb2YgYSBkZXJpdmVkIGNsYXNzLgorCSAqLworCXByb3RlY3RlZCBSZWxhdGl2ZVZhbHVlSGlzdG9yeVByb3ZpZGVyQWRhcHRlciBmaXh0dXJlID0gbnVsbDsKKworCUBTdXBwcmVzc1dhcm5pbmdzKCJ1bnF1YWxpZmllZC1maWVsZC1hY2Nlc3MiKQorCXByaXZhdGUgUmVsYXRpdmVWYWx1ZUhpc3RvcnlQcm92aWRlckFkYXB0ZXIgZ2V0Rml4dHVyZSgpIHsKKwkJcmV0dXJuIGZpeHR1cmU7CisJfSAvLyBTcGF0aWFsUHJvdmlkZXJBZGFwdGVyRmFjdG9yeQorCisJcHJvdGVjdGVkIHZvaWQgc2V0Rml4dHVyZShmaW5hbCBSZWxhdGl2ZVZhbHVlSGlzdG9yeVByb3ZpZGVyQWRhcHRlciBmaXh0dXJlKSB7CisJCXRoaXMuZml4dHVyZSA9IGZpeHR1cmU7CisJfSAvLyBzZXRGaXh0dXJlCisKKwkvKioKKwkgKiBUZXN0IG1ldGhvZCBmb3IKKwkgKiB7QGxpbmsgUmVsYXRpdmVWYWx1ZUhpc3RvcnlQcm92aWRlckFkYXB0ZXIjaXNBZGFwdGVyRm9yVHlwZShPYmplY3QpfQorCSAqLworCXB1YmxpYyB2b2lkIHRlc3RJc0FkYXB0ZXJGb3JUeXBlKCkgeworCQlmaW5hbCBSZWxhdGl2ZVZhbHVlSGlzdG9yeVByb3ZpZGVyQWRhcHRlciBmaXh0dXJlID0gZ2V0Rml4dHVyZSgpOworCQlhc3NlcnRUcnVlKGZpeHR1cmUuaXNBZGFwdGVyRm9yVHlwZShSZWxhdGl2ZVZhbHVlSGlzdG9yeVByb3ZpZGVyLmNsYXNzKSk7CisJfSAvLyB0ZXN0SXNBZGFwdGVyRm9yVHlwZQorCit9IC8vIFJlbGF0aXZlVmFsdWVIaXN0b3J5UHJvdmlkZXJBZGFwdGVyVGVzdApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kZWZpbml0aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy9hZGFwdGVycy9zcGF0aWFsL1NwYXRpYWxQcm92aWRlckFkYXB0ZXJGYWN0b3J5VGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kZWZpbml0aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy9hZGFwdGVycy9zcGF0aWFsL1NwYXRpYWxQcm92aWRlckFkYXB0ZXJGYWN0b3J5VGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI2ZmY3ODgKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL2FkYXB0ZXJzL3NwYXRpYWwvU3BhdGlhbFByb3ZpZGVyQWRhcHRlckZhY3RvcnlUZXN0LmphdmEKQEAgLTAsMCArMSwzNCBAQAorLy8gU3BhdGlhbFByb3ZpZGVyQWRhcHRlckZhY3RvcnlUZXN0LmphdmEKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5hZGFwdGVycy5zcGF0aWFsOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKKworCisvKioKKyAqIFRoaXMgY2xhc3MgaXMgYSBKVW5pdCB0ZXN0IGNhc2UgZm9yIFNwYXRpYWxQcm92aWRlckFkYXB0ZXJGYWN0b3J5LgorICovCithYnN0cmFjdCBwdWJsaWMgY2xhc3MgU3BhdGlhbFByb3ZpZGVyQWRhcHRlckZhY3RvcnlUZXN0IGV4dGVuZHMgVGVzdENhc2UgeworCisJcHJvdGVjdGVkIFNwYXRpYWxQcm92aWRlckFkYXB0ZXJGYWN0b3J5IGZpeHR1cmU7CisKKwlAU3VwcHJlc3NXYXJuaW5ncyh7ICJ1bnF1YWxpZmllZC1maWVsZC1hY2Nlc3MiIH0pCisJcHJpdmF0ZSBTcGF0aWFsUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSBnZXRGaXh0dXJlKCkgeworCQlyZXR1cm4gZml4dHVyZTsKKwl9IC8vIFNwYXRpYWxQcm92aWRlckFkYXB0ZXJGYWN0b3J5CisKKwlwcm90ZWN0ZWQgdm9pZCBzZXRGaXh0dXJlKGZpbmFsIFNwYXRpYWxQcm92aWRlckFkYXB0ZXJGYWN0b3J5IGZpeHR1cmUpIHsKKwkJdGhpcy5maXh0dXJlID0gZml4dHVyZTsKKwl9IC8vIHNldEZpeHR1cmUKKworfSAvLyBTcGF0aWFsUHJvdmlkZXJBZGFwdGVyRmFjdG9yeVRlc3QKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvYWRhcHRlcnMvc3BhdGlhbC9TcGF0aWFsUHJvdmlkZXJBZGFwdGVyVGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kZWZpbml0aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy9hZGFwdGVycy9zcGF0aWFsL1NwYXRpYWxQcm92aWRlckFkYXB0ZXJUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTBiMzRkMwotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvYWRhcHRlcnMvc3BhdGlhbC9TcGF0aWFsUHJvdmlkZXJBZGFwdGVyVGVzdC5qYXZhCkBAIC0wLDAgKzEsNDIgQEAKKy8vIFNwYXRpYWxQcm92aWRlckFkYXB0ZXJUZXN0LmphdmEKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5hZGFwdGVycy5zcGF0aWFsOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKKworCisvKioKKyAqIFRoaXMgY2xhc3MgaXMgYSBKVW5pdCB0ZXN0IGNhc2UgZm9yIFNwYXRpYWxQcm92aWRlckFkYXB0ZXIuCisgKi8KK2Fic3RyYWN0IHB1YmxpYyBjbGFzcyBTcGF0aWFsUHJvdmlkZXJBZGFwdGVyVGVzdCBleHRlbmRzIFRlc3RDYXNlIHsKKworCXByb3RlY3RlZCBTcGF0aWFsUHJvdmlkZXJBZGFwdGVyIGZpeHR1cmUgPSBudWxsOworCisJQFN1cHByZXNzV2FybmluZ3MoInVucXVhbGlmaWVkLWZpZWxkLWFjY2VzcyIpCisJcHJpdmF0ZSBmaW5hbCBTcGF0aWFsUHJvdmlkZXJBZGFwdGVyIGdldEZpeHR1cmUoKSB7CisJCXJldHVybiBmaXh0dXJlOworCX0KKworCXByb3RlY3RlZCBmaW5hbCB2b2lkIHNldEZpeHR1cmUoU3BhdGlhbFByb3ZpZGVyQWRhcHRlciBmaXh0dXJlKSB7CisJCXRoaXMuZml4dHVyZSA9IGZpeHR1cmU7CisJfQorCisJLyoqCisJICogVGVzdCBtZXRob2QgZm9yIGlzQWRhcHRlckZvclR5cGUoamF2YS5sYW5nLk9iamVjdCkKKwkgKi8KKwlwdWJsaWMgdm9pZCB0ZXN0SXNBZGFwdGVyRm9yVHlwZU9iamVjdCgpIHsKKwkJZmluYWwgU3BhdGlhbFByb3ZpZGVyQWRhcHRlciBmaXh0dXJlID0gZ2V0Rml4dHVyZSgpOworCQlhc3NlcnRUcnVlKGZpeHR1cmUuaXNBZGFwdGVyRm9yVHlwZShTcGF0aWFsUHJvdmlkZXIuY2xhc3MpKTsKKwl9IC8vIHRlc3RJc0FkYXB0ZXJGb3JUeXBlT2JqZWN0CisKK30gLy8gU3BhdGlhbFByb3ZpZGVyQWRhcHRlclRlc3QKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvYWRhcHRlcnMvc3BhdGlhbC9nZW8vSW5saW5lTGF0TG9uZ0RhdGFQcm92aWRlclRlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvYWRhcHRlcnMvc3BhdGlhbC9nZW8vSW5saW5lTGF0TG9uZ0RhdGFQcm92aWRlclRlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNGZlODYyCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kZWZpbml0aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy9hZGFwdGVycy9zcGF0aWFsL2dlby9JbmxpbmVMYXRMb25nRGF0YVByb3ZpZGVyVGVzdC5qYXZhCkBAIC0wLDAgKzEsMTg4IEBACisvLyBJbmxpbmVMYXRMb25nRGF0YVByb3ZpZGVyVGVzdC5qYXZhCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuYWRhcHRlcnMuc3BhdGlhbC5nZW87CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlVSSTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmFkYXB0ZXJzLnNwYXRpYWwuU3BhdGlhbFByb3ZpZGVyQWRhcHRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmFkYXB0ZXJzLnNwYXRpYWwuZ2VvLkxhdExvbmcuU2VnbWVudDsKKworLyoqCisgKiBUaGlzIGNsYXNzIGlzIGEgSlVuaXQgdGVzdCBmb3IgSW5saW5lTGF0TG9uZ0RhdGFQcm92aWRlci4KKyAqLworQFN1cHByZXNzV2FybmluZ3MoImFsbCIpCitwdWJsaWMgY2xhc3MgSW5saW5lTGF0TG9uZ0RhdGFQcm92aWRlclRlc3QgZXh0ZW5kcyBMYXRMb25nRGF0YVByb3ZpZGVyVGVzdCB7CisKKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgVEVTVF9JTkxJTkVfTEFUX0xPTkdfVVJJX1NUUklOR19NSVNNQVRDSF9FUlJPUjEgPSBJbmxpbmVMYXRMb25nRGF0YVByb3ZpZGVyLklOTElORV9TQ0hFTUUKKwkJCSsgIjovLy8wLDAsOTAsOTAsMCI7CisKKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgVEVTVF9JTkxJTkVfTEFUX0xPTkdfVVJJX1NUUklOR19NSVNNQVRDSF9FUlJPUjIgPSBJbmxpbmVMYXRMb25nRGF0YVByb3ZpZGVyLklOTElORV9TQ0hFTUUKKwkJCSsgIjovLy8wLDAsOTAsOTAsMCwiOworCisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFRFU1RfSU5MSU5FX0xBVF9MT05HX1VSSV9TVFJJTkdfTlVNQkVSX0ZPUk1BVF9FUlJPUiA9IElubGluZUxhdExvbmdEYXRhUHJvdmlkZXIuSU5MSU5FX1NDSEVNRQorCQkJKyAiOi8vLzAsYWJjLDkwLDkwLDAsMCI7CisKKwkvKioKKwkgKiBUZXN0IHN0cmluZworCSAqLworCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFRFU1RfSU5MSU5FX0xBVF9MT05HX1VSSV9TVFJJTkcxID0gSW5saW5lTGF0TG9uZ0RhdGFQcm92aWRlci5JTkxJTkVfU0NIRU1FCisJCQkrICI6Ly8vMC4wLDAuMCw5MC4wLDkwLjAsMC4wLDkwLjAvMTAuMCwxNS4wLDEwLjAsMjAuMCwyMC4wLDIwLjAsNDAuMCw0MC4wIjsKKworCUBTdXBwcmVzc1dhcm5pbmdzKCJ1bnF1YWxpZmllZC1maWVsZC1hY2Nlc3MiKQorCXByaXZhdGUgSW5saW5lTGF0TG9uZ0RhdGFQcm92aWRlciBnZXRGaXh0dXJlKCkgeworCQlyZXR1cm4gKElubGluZUxhdExvbmdEYXRhUHJvdmlkZXIpIGZpeHR1cmU7CisJfQorCisJLyoqCisJICogQHNlZSBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2Ujc2V0VXAoKQorCSAqLworCXByb3RlY3RlZCB2b2lkIHNldFVwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCXNldEZpeHR1cmUobmV3IElubGluZUxhdExvbmdEYXRhUHJvdmlkZXIoKSk7CisJfQorCisJLyoqCisJICogQHNlZSBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2UjdGVhckRvd24oKQorCSAqLworCXByb3RlY3RlZCB2b2lkIHRlYXJEb3duKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCXNldEZpeHR1cmUobnVsbCk7CisJfQorCisJLyoqCisJICogVGVzdCBtZXRob2QgZm9yCisJICoge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuYWRhcHRlcnMuc3BhdGlhbC5JbmxpbmVMYXRMb25nRGF0YVByb3ZpZGVyI2dldExhdExvbmcob3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlVSSSl9LgorCSAqLworCXB1YmxpYyB2b2lkIHRlc3RHZXRMYXRMb25nMSgpIHsKKwkJZmluYWwgSW5saW5lTGF0TG9uZ0RhdGFQcm92aWRlciBmaXh0dXJlID0gZ2V0Rml4dHVyZSgpOworCQlMYXRMb25nIHJlc3VsdCA9IGZpeHR1cmUuZ2V0TGF0TG9uZyhVUkkKKwkJCQkuY3JlYXRlVVJJKFRFU1RfSU5MSU5FX0xBVF9MT05HX1VSSV9TVFJJTkcxKSk7CisJCWFzc2VydFRydWUocmVzdWx0LnNpemUoKSA9PSAyKTsKKwkJdmVyaWZ5SW5saW5lTGF0TG9uZ1Jlc3VsdChyZXN1bHQpOworCX0gLy8gdGVzdEdldExhdExvbmcxCisKKwkvKioKKwkgKiBAcGFyYW0gcmVzdWx0CisJICovCisJcHVibGljIHN0YXRpYyB2b2lkIHZlcmlmeUlubGluZUxhdExvbmdSZXN1bHQoTGF0TG9uZyByZXN1bHQpIHsKKwkJU2VnbWVudCBsYXRMb25nMCA9IG51bGw7CisJCVNlZ21lbnQgbGF0TG9uZzEgPSBudWxsOworCQlpZiAocmVzdWx0LmdldFNlZ21lbnRzKCkuZ2V0KDApLnNpemUoKSA9PSAzKSB7CisJCQlsYXRMb25nMCA9IHJlc3VsdC5nZXRTZWdtZW50cygpLmdldCgwKTsKKwkJCWxhdExvbmcxID0gcmVzdWx0LmdldFNlZ21lbnRzKCkuZ2V0KDEpOworCisJCX0gZWxzZSB7CisJCQlsYXRMb25nMCA9IHJlc3VsdC5nZXRTZWdtZW50cygpLmdldCgxKTsKKwkJCWxhdExvbmcxID0gcmVzdWx0LmdldFNlZ21lbnRzKCkuZ2V0KDApOworCQl9CisKKwkJLy8gLS0tIGxhdExvbmcwCisJCWFzc2VydFRydWUobGF0TG9uZzAubGF0aXR1ZGUoMCkgPT0gMC4wKTsKKwkJYXNzZXJ0VHJ1ZShsYXRMb25nMC5sb25naXR1ZGUoMCkgPT0gMC4wKTsKKworCQlhc3NlcnRUcnVlKGxhdExvbmcwLmxhdGl0dWRlKDEpID09IDkwLjApOworCQlhc3NlcnRUcnVlKGxhdExvbmcwLmxvbmdpdHVkZSgxKSA9PSA5MC4wKTsKKworCQlhc3NlcnRUcnVlKGxhdExvbmcwLmxhdGl0dWRlKDIpID09IDAuMCk7CisJCWFzc2VydFRydWUobGF0TG9uZzAubG9uZ2l0dWRlKDIpID09IDkwLjApOworCisJCS8vIC0tLSBsYXRMb25nMQorCQlhc3NlcnRUcnVlKGxhdExvbmcxLmxhdGl0dWRlKDApID09IDEwLjApOworCQlhc3NlcnRUcnVlKGxhdExvbmcxLmxvbmdpdHVkZSgwKSA9PSAxNS4wKTsKKworCQlhc3NlcnRUcnVlKGxhdExvbmcxLmxhdGl0dWRlKDEpID09IDEwLjApOworCQlhc3NlcnRUcnVlKGxhdExvbmcxLmxvbmdpdHVkZSgxKSA9PSAyMC4wKTsKKworCQlhc3NlcnRUcnVlKGxhdExvbmcxLmxhdGl0dWRlKDIpID09IDIwLjApOworCQlhc3NlcnRUcnVlKGxhdExvbmcxLmxvbmdpdHVkZSgyKSA9PSAyMC4wKTsKKworCQlhc3NlcnRUcnVlKGxhdExvbmcxLmxhdGl0dWRlKDMpID09IDQwLjApOworCQlhc3NlcnRUcnVlKGxhdExvbmcxLmxvbmdpdHVkZSgzKSA9PSA0MC4wKTsKKworCX0gLy8gdmVyaWZ5SW5saW5lTGF0TG9uZ1Jlc3VsdAorCisJLyoqCisJICogVGVzdCBtZXRob2QgZm9yCisJICoge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuYWRhcHRlcnMuc3BhdGlhbC5JbmxpbmVMYXRMb25nRGF0YVByb3ZpZGVyI2dldExhdExvbmcob3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlVSSSl9LgorCSAqLworCXB1YmxpYyB2b2lkIHRlc3RHZXRMYXRMb25nTWlzbWF0Y2hFcnJvcigpIHsKKwkJSW5saW5lTGF0TG9uZ0RhdGFQcm92aWRlciBmaXh0dXJlID0gZ2V0Rml4dHVyZSgpOworCQl0cnkgeworCQkJTGF0TG9uZyByZXN1bHQxID0gZml4dHVyZQorCQkJCQkuZ2V0TGF0TG9uZyhVUkkKKwkJCQkJCQkuY3JlYXRlVVJJKFRFU1RfSU5MSU5FX0xBVF9MT05HX1VSSV9TVFJJTkdfTUlTTUFUQ0hfRVJST1IxKSk7CisJCQlhc3NlcnRUcnVlKHJlc3VsdDEuc2l6ZSgpID09IDApOworCQl9IC8vIHRyeQorCQljYXRjaCAoTnVsbFBvaW50ZXJFeGNlcHRpb24gbnBlKSB7CisJCQkvLyBleHBlY3RlZAorCQl9CisJCXRyeSB7CisJCQlMYXRMb25nIHJlc3VsdDIgPSBmaXh0dXJlCisJCQkJCS5nZXRMYXRMb25nKFVSSQorCQkJCQkJCS5jcmVhdGVVUkkoVEVTVF9JTkxJTkVfTEFUX0xPTkdfVVJJX1NUUklOR19NSVNNQVRDSF9FUlJPUjIpKTsKKwkJCWFzc2VydFRydWUocmVzdWx0Mi5zaXplKCkgPT0gMCk7CisJCX0gLy8gdHJ5CisJCWNhdGNoIChOdWxsUG9pbnRlckV4Y2VwdGlvbiBucGUpIHsKKwkJCS8vIGV4cGVjdGVkCisJCX0KKwl9IC8vIHRlc3RHZXRMYXRMb25nTWlzbWF0Y2hFcnJvcgorCisJLyoqCisJICogVGVzdCBtZXRob2QgZm9yCisJICoge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuYWRhcHRlcnMuc3BhdGlhbC5JbmxpbmVMYXRMb25nRGF0YVByb3ZpZGVyI2dldExhdExvbmcob3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlVSSSl9LgorCSAqLworCXB1YmxpYyB2b2lkIHRlc3RHZXRMYXRMb25nTnVtYmVyRm9ybWF0RXJyb3IoKSB7CisJCUlubGluZUxhdExvbmdEYXRhUHJvdmlkZXIgZml4dHVyZSA9IGdldEZpeHR1cmUoKTsKKwkJdHJ5IHsKKwkJCUxhdExvbmcgcmVzdWx0MSA9IGZpeHR1cmUKKwkJCQkJLmdldExhdExvbmcoVVJJCisJCQkJCQkJLmNyZWF0ZVVSSShURVNUX0lOTElORV9MQVRfTE9OR19VUklfU1RSSU5HX05VTUJFUl9GT1JNQVRfRVJST1IpKTsKKwkJCVN5c3RlbS5vdXQucHJpbnRsbigicmVzdWx0MT0gIityZXN1bHQxKTsKKwkJCWFzc2VydFRydWUocmVzdWx0MS5zaXplKCkgPT0gMCk7CisJCX0gLy8gdHJ5CisJCWNhdGNoIChOdWxsUG9pbnRlckV4Y2VwdGlvbiBucGUpIHsKKwkJCS8vIGV4cGVjdGVkCisJCX0KKwkJY2F0Y2ggKE51bWJlckZvcm1hdEV4Y2VwdGlvbiBuZmUpIHsKKwkJCS8vIGV4cGVjdGVkCisJCX0KKworCX0gLy8gdGVzdEdldExhdExvbmdOdW1iZXJGb3JtYXRFcnJvcgorCisJLyoqCisJICogVGVzdCB0aGF0IHdlIGNhbiBjcmVhdGUgdGhlIGlubGluZSBVUkkgc3RyaW5nIGZyb20gdGhlIHNlZ21lbnQgYXJyYXlzCisJICovCisJcHVibGljIHZvaWQgdGVzdENyZWF0ZUlubGluZVVSSVN0cmluZygpIHsKKwkJZmluYWwgSW5saW5lTGF0TG9uZ0RhdGFQcm92aWRlciBmaXh0dXJlID0gZ2V0Rml4dHVyZSgpOworCQlMYXRMb25nIHJlc3VsdCA9IGZpeHR1cmUuZ2V0TGF0TG9uZyhVUkkKKwkJCQkuY3JlYXRlVVJJKFRFU1RfSU5MSU5FX0xBVF9MT05HX1VSSV9TVFJJTkcxKSk7CisJCWZpbmFsIFN0cmluZyByZXN1bHRTdHJpbmcgPSBJbmxpbmVMYXRMb25nRGF0YVByb3ZpZGVyCisJCQkJLmNyZWF0ZUlubGluZVVSSVN0cmluZyhyZXN1bHQpOworCQlhc3NlcnRUcnVlKHJlc3VsdFN0cmluZy5lcXVhbHMoVEVTVF9JTkxJTkVfTEFUX0xPTkdfVVJJX1NUUklORzEpKTsKKwl9IC8vIHRlc3RDcmVhdGVJbmxpbmVVUklTdHJpbmcKKworCS8qKgorCSAqIFRlc3QgdGhhdCB3ZSBjYW4gY3JlYXRlIHRoZSBzcGF0aWFsIGlubGluZSBVUkkgc3RyaW5nIGZyb20gdGhlIHNlZ21lbnQKKwkgKiBhcnJheXMKKwkgKi8KKwlwdWJsaWMgdm9pZCB0ZXN0Q3JlYXRlU3BhdGlhbElubGluZVVSSVN0cmluZygpIHsKKwkJZmluYWwgSW5saW5lTGF0TG9uZ0RhdGFQcm92aWRlciBmaXh0dXJlID0gZ2V0Rml4dHVyZSgpOworCQlMYXRMb25nIHJlc3VsdCA9IGZpeHR1cmUuZ2V0TGF0TG9uZyhVUkkKKwkJCQkuY3JlYXRlVVJJKFRFU1RfSU5MSU5FX0xBVF9MT05HX1VSSV9TVFJJTkcxKSk7CisJCWZpbmFsIFN0cmluZyByZXN1bHRTdHJpbmcgPSBJbmxpbmVMYXRMb25nRGF0YVByb3ZpZGVyCisJCQkJLmNyZWF0ZVNwYXRpYWxJbmxpbmVVUklTdHJpbmcocmVzdWx0KTsKKwkJYXNzZXJ0VHJ1ZShyZXN1bHRTdHJpbmcKKwkJCQkuc3RhcnRzV2l0aChTcGF0aWFsUHJvdmlkZXJBZGFwdGVyLlNURU1fU1BBVElBTF9TQ0hFTUVfUFJFRklYKSk7CisJCWFzc2VydFRydWUocmVzdWx0U3RyaW5nLmVuZHNXaXRoKFRFU1RfSU5MSU5FX0xBVF9MT05HX1VSSV9TVFJJTkcxKSk7CisJCWFzc2VydFRydWUocmVzdWx0U3RyaW5nLmxlbmd0aCgpID09IChURVNUX0lOTElORV9MQVRfTE9OR19VUklfU1RSSU5HMQorCQkJCS5sZW5ndGgoKSArIFNwYXRpYWxQcm92aWRlckFkYXB0ZXIuU1RFTV9TUEFUSUFMX1NDSEVNRV9QUkVGSVgKKwkJCQkubGVuZ3RoKCkpKTsKKwl9IC8vIHRlc3RDcmVhdGVTcGF0aWFsSW5saW5lVVJJU3RyaW5nCit9IC8vIElubGluZUxhdExvbmdEYXRhUHJvdmlkZXJUZXN0CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL2FkYXB0ZXJzL3NwYXRpYWwvZ2VvL0xhdExvbmdEYXRhUHJvdmlkZXJUZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL2FkYXB0ZXJzL3NwYXRpYWwvZ2VvL0xhdExvbmdEYXRhUHJvdmlkZXJUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWNmM2U1NAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvYWRhcHRlcnMvc3BhdGlhbC9nZW8vTGF0TG9uZ0RhdGFQcm92aWRlclRlc3QuamF2YQpAQCAtMCwwICsxLDMyIEBACisvLyBMYXRMb25nRGF0YVByb3ZpZGVyVGVzdC5qYXZhCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuYWRhcHRlcnMuc3BhdGlhbC5nZW87CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOworCisvKioKKyAqIFRoaXMgY2xhc3MgaXMgYSBKVW5pdCB0ZXN0IGZvciBMYXRMb25nRGF0YVByb3ZpZGVyLgorICovCithYnN0cmFjdCBwdWJsaWMgY2xhc3MgTGF0TG9uZ0RhdGFQcm92aWRlclRlc3QgZXh0ZW5kcyBUZXN0Q2FzZSB7CisKKwlwcm90ZWN0ZWQgTGF0TG9uZ0RhdGFQcm92aWRlciBmaXh0dXJlOworCisJcHJpdmF0ZSBmaW5hbCBMYXRMb25nRGF0YVByb3ZpZGVyIGdldEZpeHR1cmUoKSB7CisJCXJldHVybiBmaXh0dXJlOworCX0KKworCXByb3RlY3RlZCBmaW5hbCB2b2lkIHNldEZpeHR1cmUoTGF0TG9uZ0RhdGFQcm92aWRlciBmaXh0dXJlKSB7CisJCXRoaXMuZml4dHVyZSA9IGZpeHR1cmU7CisJfSAvLyBzZXRGaXh0dXJlCisKK30gLy8gTGF0TG9uZ0RhdGFQcm92aWRlclRlc3QKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvYWRhcHRlcnMvc3BhdGlhbC9nZW8vTGF0TG9uZ1Byb3ZpZGVyQWRhcHRlckZhY3RvcnlUZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL2FkYXB0ZXJzL3NwYXRpYWwvZ2VvL0xhdExvbmdQcm92aWRlckFkYXB0ZXJGYWN0b3J5VGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBmMTBhYmUKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL2FkYXB0ZXJzL3NwYXRpYWwvZ2VvL0xhdExvbmdQcm92aWRlckFkYXB0ZXJGYWN0b3J5VGVzdC5qYXZhCkBAIC0wLDAgKzEsNzAgQEAKKy8vIExhdExvbmdQcm92aWRlckFkYXB0ZXJGYWN0b3J5VGVzdC5qYXZhCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuYWRhcHRlcnMuc3BhdGlhbC5nZW87CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkdyYXBoRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguTm9kZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmFkYXB0ZXJzLnNwYXRpYWwuU3BhdGlhbFByb3ZpZGVyQWRhcHRlckZhY3RvcnlUZXN0OworCisvKioKKyAqIFRoaXMgY2xhc3MgaXMgYSBKVW5pdCB0ZXN0IGNhc2UgZm9yIExhdExvbmdQcm92aWRlckFkYXB0ZXJGYWN0b3J5LgorICovCitAU3VwcHJlc3NXYXJuaW5ncygiYWxsIikKK3B1YmxpYyBjbGFzcyBMYXRMb25nUHJvdmlkZXJBZGFwdGVyRmFjdG9yeVRlc3QgZXh0ZW5kcworCQlTcGF0aWFsUHJvdmlkZXJBZGFwdGVyRmFjdG9yeVRlc3QgeworCisJcHJpdmF0ZSBMYXRMb25nUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSBnZXRGaXh0dXJlKCkgeworCQlyZXR1cm4gKExhdExvbmdQcm92aWRlckFkYXB0ZXJGYWN0b3J5KSBmaXh0dXJlOworCX0KKworCS8qKgorCSAqIEBzZWUganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlI3NldFVwKCkKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBzZXRVcCgpIHRocm93cyBFeGNlcHRpb24geworCQlzZXRGaXh0dXJlKG5ldyBMYXRMb25nUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSgpKTsKKwl9CisKKwkvKioKKwkgKiBAc2VlIGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZSN0ZWFyRG93bigpCisJICovCisJcHJvdGVjdGVkIHZvaWQgdGVhckRvd24oKSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJc2V0Rml4dHVyZShudWxsKTsKKwl9CisKKwkvKioKKwkgKiBUZXN0IG1ldGhvZCBmb3IKKwkgKiB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5hZGFwdGVycy5zcGF0aWFsLkxhdExvbmdQcm92aWRlckFkYXB0ZXJGYWN0b3J5I2lzRmFjdG9yeUZvclR5cGUoamF2YS5sYW5nLk9iamVjdCl9LgorCSAqLworCXB1YmxpYyB2b2lkIHRlc3RJc0ZhY3RvcnlGb3JUeXBlT2JqZWN0KCkgeworCQlmaW5hbCBMYXRMb25nUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSBmaXh0dXJlID0gZ2V0Rml4dHVyZSgpOworCQlhc3NlcnRUcnVlKGZpeHR1cmUuaXNGYWN0b3J5Rm9yVHlwZShMYXRMb25nUHJvdmlkZXIuY2xhc3MpKTsKKwl9IC8vIHRlc3RJc0ZhY3RvcnlGb3JUeXBlT2JqZWN0CisKKwkvKioKKwkgKiBUZXN0IG1ldGhvZCBmb3IKKwkgKiB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5hZGFwdGVycy5zcGF0aWFsLkxhdExvbmdQcm92aWRlckFkYXB0ZXJGYWN0b3J5I2NyZWF0ZUFkYXB0ZXIob3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpZXIpfS4KKwkgKi8KKwlwdWJsaWMgdm9pZCB0ZXN0Q3JlYXRlQWRhcHRlck5vdGlmaWVyKCkgeworCQlmaW5hbCBOb2RlIG5vZGUgPSBHcmFwaEZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZU5vZGUoKTsKKwkJbm9kZS5nZXREdWJsaW5Db3JlKCkuc2V0U3BhdGlhbCgKKwkJCQlMYXRMb25nUHJvdmlkZXJBZGFwdGVyVGVzdC5TUEFUSUFMX0lOTElORV9URVNUX1VSSV9TVFJJTkcpOworCisJCWZpbmFsIExhdExvbmdQcm92aWRlciBsYXRMb25nUHJvdmlkZXIgPSAoTGF0TG9uZ1Byb3ZpZGVyKSBMYXRMb25nUHJvdmlkZXJBZGFwdGVyRmFjdG9yeS5JTlNUQU5DRQorCQkJCS5hZGFwdChub2RlLCBMYXRMb25nUHJvdmlkZXIuY2xhc3MpOworCisJCWZpbmFsIExhdExvbmcgcmVzdWx0ID0gbGF0TG9uZ1Byb3ZpZGVyLmdldExhdExvbmcoKTsKKwkJU3lzdGVtLm91dC5wcmludGxuKCJyZXN1bHQgPSAiK3Jlc3VsdCk7CisJCUlubGluZUxhdExvbmdEYXRhUHJvdmlkZXJUZXN0LnZlcmlmeUlubGluZUxhdExvbmdSZXN1bHQocmVzdWx0KTsKKwl9IC8vIHRlc3RDcmVhdGVBZGFwdGVyTm90aWZpZXIKKworfSAvLyBMYXRMb25nUHJvdmlkZXJBZGFwdGVyRmFjdG9yeVRlc3QKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvYWRhcHRlcnMvc3BhdGlhbC9nZW8vTGF0TG9uZ1Byb3ZpZGVyQWRhcHRlclRlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvYWRhcHRlcnMvc3BhdGlhbC9nZW8vTGF0TG9uZ1Byb3ZpZGVyQWRhcHRlclRlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NzQyOTRkCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kZWZpbml0aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy9hZGFwdGVycy9zcGF0aWFsL2dlby9MYXRMb25nUHJvdmlkZXJBZGFwdGVyVGVzdC5qYXZhCkBAIC0wLDAgKzEsNzkgQEAKKy8vIExhdExvbmdQcm92aWRlckFkYXB0ZXJUZXN0LmphdmEKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5hZGFwdGVycy5zcGF0aWFsLmdlbzsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguR3JhcGhGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5Ob2RlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuYWRhcHRlcnMuc3BhdGlhbC5TcGF0aWFsUHJvdmlkZXJBZGFwdGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuYWRhcHRlcnMuc3BhdGlhbC5TcGF0aWFsUHJvdmlkZXJBZGFwdGVyVGVzdDsKKworLyoqCisgKiBUaGlzIGNsYXNzIGlzIGEgSlVuaXQgdGVzdCBjYXNlIGZvciBMYXRMb25nUHJvdmlkZXJBZGFwdGVyLgorICovCitAU3VwcHJlc3NXYXJuaW5ncygiYWxsIikKK3B1YmxpYyBjbGFzcyBMYXRMb25nUHJvdmlkZXJBZGFwdGVyVGVzdCBleHRlbmRzIFNwYXRpYWxQcm92aWRlckFkYXB0ZXJUZXN0IHsKKworCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFNQQVRJQUxfSU5MSU5FX1RFU1RfVVJJX1NUUklORyA9IFNwYXRpYWxQcm92aWRlckFkYXB0ZXIuU1RFTV9TUEFUSUFMX1NDSEVNRQorCQkJKyAiOiIKKwkJCSsgSW5saW5lTGF0TG9uZ0RhdGFQcm92aWRlclRlc3QuVEVTVF9JTkxJTkVfTEFUX0xPTkdfVVJJX1NUUklORzE7CisKKwlwcml2YXRlIExhdExvbmdQcm92aWRlckFkYXB0ZXIgZ2V0Rml4dHVyZSgpIHsKKwkJcmV0dXJuIChMYXRMb25nUHJvdmlkZXJBZGFwdGVyKSBmaXh0dXJlOworCX0gLy8gTGF0TG9uZ1Byb3ZpZGVyQWRhcHRlcgorCisJLyoqCisJICogQHNlZSBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2Ujc2V0VXAoKQorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIHNldFVwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCWZpbmFsIExhdExvbmdQcm92aWRlckFkYXB0ZXIgdGVtcCA9IG5ldyBMYXRMb25nUHJvdmlkZXJBZGFwdGVyKCk7CisJCWZpbmFsIE5vZGUgbm9kZSA9IEdyYXBoRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlTm9kZSgpOworCQlub2RlLmdldER1YmxpbkNvcmUoKS5zZXRTcGF0aWFsKFNQQVRJQUxfSU5MSU5FX1RFU1RfVVJJX1NUUklORyk7CisJCXRlbXAuc2V0VGFyZ2V0KG5vZGUpOworCQlzZXRGaXh0dXJlKHRlbXApOworCX0gLy8gc2V0VXAKKworCS8qKgorCSAqIEBzZWUganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlI3RlYXJEb3duKCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgdm9pZCB0ZWFyRG93bigpIHRocm93cyBFeGNlcHRpb24geworCQlzZXRGaXh0dXJlKG51bGwpOworCX0KKworCXB1YmxpYyB2b2lkIHRlc3RJc0FkYXB0ZXJGb3JUeXBlKCkgeworCQlmaW5hbCBMYXRMb25nUHJvdmlkZXJBZGFwdGVyIGZpeHR1cmUgPSBnZXRGaXh0dXJlKCk7CisJCWFzc2VydFRydWUoZml4dHVyZS5pc0FkYXB0ZXJGb3JUeXBlKExhdExvbmdQcm92aWRlci5jbGFzcykpOworCX0gLy8gdGVzdElzQWRhcHRlckZvclR5cGUKKworCS8qKgorCSAqIFRlc3QgbWV0aG9kIGZvcgorCSAqIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmFkYXB0ZXJzLnNwYXRpYWwuTGF0TG9uZ1Byb3ZpZGVyQWRhcHRlciNnZXRMYXRMb25nKCl9LgorCSAqLworCXB1YmxpYyB2b2lkIHRlc3RHZXRMYXRMb25nKCkgeworCQlmaW5hbCBMYXRMb25nUHJvdmlkZXJBZGFwdGVyIGZpeHR1cmUgPSBnZXRGaXh0dXJlKCk7CisJCWZpbmFsIExhdExvbmcgcmVzdWx0ID0gZml4dHVyZS5nZXRMYXRMb25nKCk7CisJCUlubGluZUxhdExvbmdEYXRhUHJvdmlkZXJUZXN0LnZlcmlmeUlubGluZUxhdExvbmdSZXN1bHQocmVzdWx0KTsKKwl9CisKKwkvKioKKwkgKiBUZXN0IG1ldGhvZCBmb3IKKwkgKiB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5hZGFwdGVycy5zcGF0aWFsLkxhdExvbmdQcm92aWRlckFkYXB0ZXIjZ2V0Q2VudGVyTGF0TG9uZygpfS4KKwkgKi8KKwlwdWJsaWMgdm9pZCB0ZXN0R2V0Q2VudGVyKCkgeworCQlmaW5hbCBMYXRMb25nUHJvdmlkZXJBZGFwdGVyIGZpeHR1cmUgPSBnZXRGaXh0dXJlKCk7CisJCWZpbmFsIGRvdWJsZVtdIHJlc3VsdCA9IGZpeHR1cmUuZ2V0Q2VudGVyKCk7CisJCWFzc2VydE5vdE51bGwocmVzdWx0KTsKKwl9IC8vIHRlc3RHZXRDZW50ZXIKKworfSAvLyBMYXRMb25nUHJvdmlkZXJBZGFwdGVyVGVzdApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kZWZpbml0aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy9hZGFwdGVycy9zcGF0aWFsL2dlby9MYXRMb25nVGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kZWZpbml0aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy9hZGFwdGVycy9zcGF0aWFsL2dlby9MYXRMb25nVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNmMWVhMzMKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL2FkYXB0ZXJzL3NwYXRpYWwvZ2VvL0xhdExvbmdUZXN0LmphdmEKQEAgLTAsMCArMSwxMzMgQEAKKy8vIExhdExvbmdUZXN0LmphdmEKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5hZGFwdGVycy5zcGF0aWFsLmdlbzsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OworaW1wb3J0IGphdmEudXRpbC5MaXN0OworCitpbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOworCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5hZGFwdGVycy5zcGF0aWFsLmdlby5MYXRMb25nLlNlZ21lbnQ7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5hZGFwdGVycy5zcGF0aWFsLmdlby5MYXRMb25nLlNlZ21lbnRCdWlsZGVyOworCisvKioKKyAqIFRoaXMgY2xhc3MgaXMgYSBKVW5pdCB0ZXN0IGNhc2UgZm9yIExhdExvbmcuCisgKi8KK0BTdXBwcmVzc1dhcm5pbmdzKCJhbGwiKQorcHVibGljIGNsYXNzIExhdExvbmdUZXN0IGV4dGVuZHMgVGVzdENhc2UgeworCisJcHJvdGVjdGVkIExhdExvbmcgZml4dHVyZSA9IG51bGw7CisKKwlwcml2YXRlIExhdExvbmcgZ2V0Rml4dHVyZSgpIHsKKwkJcmV0dXJuIGZpeHR1cmU7CisJfQorCisJcHJvdGVjdGVkIHZvaWQgc2V0Rml4dHVyZShMYXRMb25nIGZpeHR1cmUpIHsKKwkJdGhpcy5maXh0dXJlID0gZml4dHVyZTsKKwl9CisKKwlwdWJsaWMgc3RhdGljIExhdExvbmcgY3JlYXRlRml4dHVyZSgpIHsKKwkJTGF0TG9uZyByZXRWYWx1ZSA9IG5ldyBMYXRMb25nKCk7CisJCWZpbmFsIFNlZ21lbnQgc2VnbWVudCA9IFNlZ21lbnRUZXN0LmNyZWF0ZUZpeHR1cmUoKTsKKwkJcmV0VmFsdWUuYWRkKHNlZ21lbnQpOworCQlyZXR1cm4gcmV0VmFsdWU7CisJfSAvLyBjcmVhdGVGaXh0dXJlCisKKwkvKioKKwkgKiBAc2VlIGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZSNzZXRVcCgpCisJICovCisJcHJvdGVjdGVkIHZvaWQgc2V0VXAoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJc2V0Rml4dHVyZShjcmVhdGVGaXh0dXJlKCkpOworCX0KKworCS8qKgorCSAqIEBzZWUganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlI3RlYXJEb3duKCkKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCB0ZWFyRG93bigpIHRocm93cyBFeGNlcHRpb24geworCQlzZXRGaXh0dXJlKG51bGwpOworCX0KKworCS8qKgorCSAqIFRlc3QgbWV0aG9kIGZvcgorCSAqIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmFkYXB0ZXJzLnNwYXRpYWwuZ2VvLkxhdExvbmcjYWRkKG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuYWRhcHRlcnMuc3BhdGlhbC5nZW8uTGF0TG9uZy5TZWdtZW50KX0uCisJICovCisJcHVibGljIHZvaWQgdGVzdEFkZFNlZ21lbnQoKSB7CisJCWZpbmFsIExhdExvbmcgbGF0TG9uZyA9IGdldEZpeHR1cmUoKTsKKwkJYXNzZXJ0VHJ1ZShsYXRMb25nLnNpemUoKSA9PSAxKTsKKwkJZmluYWwgU2VnbWVudCBzZWdtZW50ID0gU2VnbWVudFRlc3QuY3JlYXRlRml4dHVyZSgpOworCQlsYXRMb25nLmFkZChzZWdtZW50KTsKKwkJYXNzZXJ0VHJ1ZShsYXRMb25nLnNpemUoKSA9PSAyKTsKKwkJYXNzZXJ0VHJ1ZShsYXRMb25nLmdldFNlZ21lbnRzKCkuY29udGFpbnMoc2VnbWVudCkpOworCX0gLy8gdGVzdEFkZFNlZ21lbnQKKworCS8qKgorCSAqIFRlc3QgbWV0aG9kIGZvcgorCSAqIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmFkYXB0ZXJzLnNwYXRpYWwuZ2VvLkxhdExvbmcjYWRkKGphdmEudXRpbC5MaXN0KX0uCisJICovCisJcHVibGljIHZvaWQgdGVzdEFkZExpc3RPZlNlZ21lbnQoKSB7CisJCWZpbmFsIExhdExvbmcgbGF0TG9uZyA9IGdldEZpeHR1cmUoKTsKKwkJYXNzZXJ0VHJ1ZShsYXRMb25nLnNpemUoKSA9PSAxKTsKKworCQlmaW5hbCBTZWdtZW50QnVpbGRlciBzYjEgPSBuZXcgU2VnbWVudEJ1aWxkZXIoKTsKKwkJc2IxLmFkZCgxLjAsIDIuMCk7CisJCXNiMS5hZGQoMy4wLCA0LjApOworCQlmaW5hbCBTZWdtZW50QnVpbGRlciBzYjIgPSBuZXcgU2VnbWVudEJ1aWxkZXIoKTsKKwkJc2IyLmFkZCgxMC4wLCAyMC4wKTsKKwkJc2IyLmFkZCgzMC4wLCA0MC4wKTsKKworCQlmaW5hbCBMaXN0PFNlZ21lbnQ+IHNlZ21lbnRMaXN0ID0gbmV3IEFycmF5TGlzdDxTZWdtZW50PigpOworCQlzZWdtZW50TGlzdC5hZGQoc2IxLnRvU2VnbWVudCgpKTsKKwkJc2VnbWVudExpc3QuYWRkKHNiMi50b1NlZ21lbnQoKSk7CisJCWxhdExvbmcuYWRkKHNlZ21lbnRMaXN0KTsKKworCQlhc3NlcnRUcnVlKGxhdExvbmcuc2l6ZSgpID09IDMpOworCisJfSAvLyB0ZXN0QWRkTGlzdE9mU2VnbWVudAorCisJLyoqCisJICogVGVzdCBtZXRob2QgZm9yCisJICoge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuYWRhcHRlcnMuc3BhdGlhbC5nZW8uTGF0TG9uZyNhZGQob3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5hZGFwdGVycy5zcGF0aWFsLmdlby5MYXRMb25nKX0uCisJICovCisJcHVibGljIHZvaWQgdGVzdEFkZExhdExvbmcoKSB7CisJCWZpbmFsIExhdExvbmcgbGF0TG9uZyA9IGdldEZpeHR1cmUoKTsKKwkJYXNzZXJ0VHJ1ZShsYXRMb25nLnNpemUoKSA9PSAxKTsKKwkJbGF0TG9uZy5hZGQoY3JlYXRlRml4dHVyZSgpKTsKKwkJYXNzZXJ0VHJ1ZShsYXRMb25nLnNpemUoKSA9PSAyKTsKKwl9IC8vIHRlc3RBZGRMYXRMb25nCisKKwkvKioKKwkgKiBUZXN0IG1ldGhvZCBmb3IKKwkgKiB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5hZGFwdGVycy5zcGF0aWFsLmdlby5MYXRMb25nI2dldFNlZ21lbnRzKCl9LgorCSAqLworCXB1YmxpYyB2b2lkIHRlc3RHZXRTZWdtZW50cygpIHsKKwkJZmluYWwgTGF0TG9uZyBsYXRMb25nID0gZ2V0Rml4dHVyZSgpOworCQlhc3NlcnRUcnVlKGxhdExvbmcuc2l6ZSgpID09IDEpOworCQlhc3NlcnRUcnVlKGxhdExvbmcuZ2V0U2VnbWVudHMoKS5zaXplKCkgPT0gMSk7CisJfSAvLyB0ZXN0R2V0U2VnbWVudHMKKworCS8qKgorCSAqIFRlc3QgbWV0aG9kIGZvcgorCSAqIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmFkYXB0ZXJzLnNwYXRpYWwuZ2VvLkxhdExvbmcjc2l6ZSgpfS4KKwkgKiAKKwkgKiBCYXNpY2FsbHkgdGhlIHNhbWUgYXMge0BsaW5rICN0ZXN0QWRkU2VnbWVudCgpfQorCSAqLworCXB1YmxpYyB2b2lkIHRlc3RTaXplKCkgeworCQlmaW5hbCBMYXRMb25nIGxhdExvbmcgPSBnZXRGaXh0dXJlKCk7CisJCWFzc2VydFRydWUobGF0TG9uZy5zaXplKCkgPT0gMSk7CisJCWZpbmFsIFNlZ21lbnQgc2VnbWVudCA9IFNlZ21lbnRUZXN0LmNyZWF0ZUZpeHR1cmUoKTsKKwkJbGF0TG9uZy5hZGQoc2VnbWVudCk7CisJCWFzc2VydFRydWUobGF0TG9uZy5zaXplKCkgPT0gMik7CisJCWFzc2VydFRydWUobGF0TG9uZy5nZXRTZWdtZW50cygpLmNvbnRhaW5zKHNlZ21lbnQpKTsKKwl9IC8vIHRlc3RTaXplCisKK30gLy8gTGF0TG9uZ1Rlc3QKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvYWRhcHRlcnMvc3BhdGlhbC9nZW8vUGxhdGZvcm1MYXRMb25nRGF0YVByb3ZpZGVyVGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kZWZpbml0aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy9hZGFwdGVycy9zcGF0aWFsL2dlby9QbGF0Zm9ybUxhdExvbmdEYXRhUHJvdmlkZXJUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmVmYjYwNQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvYWRhcHRlcnMvc3BhdGlhbC9nZW8vUGxhdGZvcm1MYXRMb25nRGF0YVByb3ZpZGVyVGVzdC5qYXZhCkBAIC0wLDAgKzEsMzU4IEBACisvLyBQbGF0Zm9ybUxhdExvbmdEYXRhUHJvdmlkZXJUZXN0LmphdmEKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5hZGFwdGVycy5zcGF0aWFsLmdlbzsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuVVJJOworCisvKioKKyAqIFRoaXMgY2xhc3MgaXMgYSBKVW5pdCB0ZXN0IGZvciBQbGF0Zm9ybUxhdExvbmdEYXRhUHJvdmlkZXIuCisgKiAKKyAqIEBzZWUgUGxhdGZvcm1MYXRMb25nRGF0YVByb3ZpZGVyCisgKiBAc2VlIElubGluZUxhdExvbmdEYXRhUHJvdmlkZXJUZXN0CisgKiBAc2VlIElubGluZUxhdExvbmdEYXRhUHJvdmlkZXIKKyAqLworQFN1cHByZXNzV2FybmluZ3MoImFsbCIpCitwdWJsaWMgY2xhc3MgUGxhdGZvcm1MYXRMb25nRGF0YVByb3ZpZGVyVGVzdCBleHRlbmRzIExhdExvbmdEYXRhUHJvdmlkZXJUZXN0IHsKKworCS8vIFRoaXMgaXMgdGhlIHByb2plY3QgdGhhdCBjb250YWlucyB0aGUgdGVzdCBmaWxlcworCXByaXZhdGUgc3RhdGljIFN0cmluZyBQUk9KRUNUX05BTUUgPSAib3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kZWZpbml0aW9ucyI7CisKKwkvLyBUaGlzIGlzIHRoZSBwYXRoIHRvIHRoZSB0ZXN0IGZpbGVzCisJcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIFBBVEggPSAiZGF0YS9zcGF0aWFsL2dlbyI7CisKKwkvLyBUaGlzIGlzIHRoZSBuYW1lIG9mIGEgZmlsZQorCXByaXZhdGUgc3RhdGljIFN0cmluZyBGSUxFX05BTUUxID0gInRlc3QxZ21sLmdtbCI7CisKKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgTEFUTE9OR19FUlJPUl9GSUxFTkFNRSA9ICJ0ZXN0bGF0bG9uZ2Vycm9yLmdtbCI7CisKKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgQkFEX0ZPUk1BVF9FUlJPUl9GSUxFTkFNRSA9ICJ0ZXN0YmFkZm9ybWF0ZXJyb3IuZ21sIjsKKworCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBFTEVNRU5UX0VSUk9SX0ZJTEVOQU1FID0gInRlc3RlbGVtZW50ZXJyb3IuZ21sIjsKKworLy8JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFdISVRFX1NQQUNFX0ZJTEVOQU1FID0gInRlc3R3aGl0ZXNwYWNlLmdtbCI7CisJCisJLyoqCisJICogIFRoaXMgaXMgdGhlIGNvbXBsZXRlIHN0cmluZyB0aGF0IHdvdWxkIGJlIGV4dHJhY3RlZCBmcm9tIGEgZHVibGluIGNvcmUKKwkgKiAic3BhdGlhbCIgYXR0cmlidXRlCisJICovCisJcHVibGljIHN0YXRpYyBTdHJpbmcgVEVTVF9QTEFURk9STV9MQVRfTE9OR19VUklfU1RSSU5HMSA9IFBsYXRmb3JtTGF0TG9uZ0RhdGFQcm92aWRlci5QTEFURk9STV9TQ0hFTUUKKwkJCSsgIjovcGx1Z2luLyIgKyBQUk9KRUNUX05BTUUgKyAiLyIgKyBQQVRIICsgIi8iOworCisJLy8gVGhlc2UgYXJlIHRoZSBub2RlIGlkZW50aWZpZXJzIGFuZCB0aGUgY291bnRzIG9mIHRoZSBudW1iZXIgb2Ygc2VnbWVudHMKKwkvLyBpbiB0aGVpciBsYXRpdHVkZS9sb25naXR1ZGUgZGF0YQorCXB1YmxpYyBzdGF0aWMgU3RyaW5nIEFLMDIwMTMgPSAiI1VTLUFLLTAyMDEzIjsKKworCXB1YmxpYyBzdGF0aWMgaW50IEFLMDIwMTNDT1VOVCA9IDA7CisKKwlwdWJsaWMgc3RhdGljIFN0cmluZyBBSzAyMjkwID0gIiNVUy1BSy0wMjI5MCI7CisKKwlwdWJsaWMgc3RhdGljIGludCBBSzAyMjkwQ09VTlQgPSAwOworCisJcHVibGljIHN0YXRpYyBTdHJpbmcgQUwwMTAwMSA9ICIjVVMtQUwtMDEwMDEiOworCisJcHVibGljIHN0YXRpYyBpbnQgQUwwMTAwMUNPVU5UID0gMTsKKworCXB1YmxpYyBzdGF0aWMgU3RyaW5nIEFMMDEwMDMgPSAiI1VTLUFMLTAxMDAzIjsKKworCXB1YmxpYyBzdGF0aWMgaW50IEFMMDEwMDNDT1VOVCA9IDE7CisKKwlwdWJsaWMgc3RhdGljIFN0cmluZyBBTDAxMDk1ID0gIiNVUy1BTC0wMTA5NSI7CisKKwlwdWJsaWMgc3RhdGljIGludCBBTDAxMDk1Q09VTlQgPSAyOworCisJcHVibGljIHN0YXRpYyBTdHJpbmcgQ0EwNjAzNyA9ICIjVVMtQ0EtMDYwMzciOworCisJcHVibGljIHN0YXRpYyBpbnQgQ0EwNjAzN0NPVU5UID0gMzsKKworCXB1YmxpYyBzdGF0aWMgU3RyaW5nIENBMDYwODMgPSAiI1VTLUNBLTA2MDgzIjsKKworCXB1YmxpYyBzdGF0aWMgaW50IENBMDYwODNDT1VOVCA9IDM7CisKKwlwdWJsaWMgc3RhdGljIFN0cmluZyBVTktOT1dOSUQgPSAiI1VOS05PV05JRCI7CisKKwlwdWJsaWMgc3RhdGljIGludCBVTktOT1dOSURDT1VOVCA9IDA7CisKKwlzdGF0aWMgU3RyaW5nW10gSURfRlJBR01FTlRTID0gbmV3IFN0cmluZ1tdIHsgQUswMjAxMywgQUswMjI5MCwgQUwwMTAwMSwKKwkJCUFMMDEwMDMsIEFMMDEwOTUsIENBMDYwMzcsIENBMDYwODMsIFVOS05PV05JRCB9OworCisJc3RhdGljIGludFtdIElEX1NFR01FTlRfQ09VTlRTID0gbmV3IGludFtdIHsgQUswMjAxM0NPVU5ULCBBSzAyMjkwQ09VTlQsCisJCQlBTDAxMDAxQ09VTlQsIEFMMDEwMDNDT1VOVCwgQUwwMTA5NUNPVU5ULCBDQTA2MDM3Q09VTlQsCisJCQlDQTA2MDgzQ09VTlQsIFVOS05PV05JRENPVU5UIH07CisKKwkvKioKKwkgKiBAc2VlIGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZSNzZXRVcCgpCisJICovCisJcHJvdGVjdGVkIHZvaWQgc2V0VXAoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJc2V0Rml4dHVyZShuZXcgUGxhdGZvcm1MYXRMb25nRGF0YVByb3ZpZGVyKCkpOworCX0KKworCS8qKgorCSAqIEBzZWUganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlI3RlYXJEb3duKCkKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCB0ZWFyRG93bigpIHRocm93cyBFeGNlcHRpb24geworCQlzZXRGaXh0dXJlKG51bGwpOworCX0KKworCXByaXZhdGUgUGxhdGZvcm1MYXRMb25nRGF0YVByb3ZpZGVyIGdldEZpeHR1cmUoKSB7CisJCXJldHVybiAoUGxhdGZvcm1MYXRMb25nRGF0YVByb3ZpZGVyKSBmaXh0dXJlOworCX0gLy8gZ2V0Rml4dHVyZQorCisJLyoqCisJICogVGVzdCBtZXRob2QgZm9yCisJICoge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuYWRhcHRlcnMuc3BhdGlhbC5QbGF0Zm9ybUxhdExvbmdEYXRhUHJvdmlkZXIjZ2V0TGF0TG9uZyhvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuVVJJKX0uCisJICovCisJcHVibGljIHZvaWQgdGVzdEdldExhdExvbmcoKSB7CisJCWZpbmFsIFBsYXRmb3JtTGF0TG9uZ0RhdGFQcm92aWRlciBmaXh0dXJlID0gZ2V0Rml4dHVyZSgpOworCisJCWZvciAoaW50IGkgPSAwOyBpIDwgSURfRlJBR01FTlRTLmxlbmd0aDsgaSsrKSB7CisJCQlMYXRMb25nIHJlc3VsdCA9IGZpeHR1cmUuZ2V0TGF0TG9uZyhVUkkKKwkJCQkJLmNyZWF0ZVVSSShURVNUX1BMQVRGT1JNX0xBVF9MT05HX1VSSV9TVFJJTkcxICsgRklMRV9OQU1FMQorCQkJCQkJCSsgSURfRlJBR01FTlRTW2ldKSk7CisKKwkJCWFzc2VydFRydWUocmVzdWx0LnNpemUoKSA9PSBJRF9TRUdNRU5UX0NPVU5UU1tpXSk7CisJCX0gLy8gZm9yIGkKKworCX0gLy8gdGVzdEdldExhdExvbmcKKworCS8qKgorCSAqIFRlc3QgbWV0aG9kIGZvcgorCSAqIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmFkYXB0ZXJzLnNwYXRpYWwuUGxhdGZvcm1MYXRMb25nRGF0YVByb3ZpZGVyI2dldExhdExvbmcob3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlVSSSl9LgorCSAqLworCXB1YmxpYyB2b2lkIHRlc3RHZXRMYXRMb25nRXJyb3IoKSB7CisJCWZpbmFsIFBsYXRmb3JtTGF0TG9uZ0RhdGFQcm92aWRlciBmaXh0dXJlID0gZ2V0Rml4dHVyZSgpOworCisJCUxhdExvbmcgcmVzdWx0ID0gZml4dHVyZS5nZXRMYXRMb25nKFVSSQorCQkJCS5jcmVhdGVVUkkoVEVTVF9QTEFURk9STV9MQVRfTE9OR19VUklfU1RSSU5HMQorCQkJCQkJKyBMQVRMT05HX0VSUk9SX0ZJTEVOQU1FICsgQUwwMTAwMSkpOworCQlhc3NlcnRUcnVlKHJlc3VsdC5zaXplKCkgPT0gMCk7CisJfSAvLyB0ZXN0R2V0TGF0TG9uZ0Vycm9yCisKKwkvKioKKwkgKiBUZXN0IG1ldGhvZCBmb3IKKwkgKiB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5hZGFwdGVycy5zcGF0aWFsLlBsYXRmb3JtTGF0TG9uZ0RhdGFQcm92aWRlciNnZXRMYXRMb25nKG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5VUkkpfS4KKwkgKi8KKwlwdWJsaWMgdm9pZCB0ZXN0R2V0TGF0TG9uZ0VsZW1lbnRFcnJvcigpIHsKKwkJZmluYWwgUGxhdGZvcm1MYXRMb25nRGF0YVByb3ZpZGVyIGZpeHR1cmUgPSBnZXRGaXh0dXJlKCk7CisKKwkJLy8gVGhpcyB0ZXN0IHByaW50cyBvbiB0byBTeXN0ZW0uZXJyLCBzbyBJJ3ZlIGNvbW1lbnRlZCBpdCBvdXQuCisJCS8vIE90aGVyd2lzZSBpdCB3b3Jrcy4KKwkJYXNzZXJ0VHJ1ZSh0cnVlKTsKKwkJLy8gTGF0TG9uZyByZXN1bHQgPSBmaXh0dXJlLmdldExhdExvbmcoVVJJCisJCS8vIC5jcmVhdGVVUkkoVEVTVF9QTEFURk9STV9MQVRfTE9OR19VUklfU1RSSU5HMQorCQkvLyArIEVMRU1FTlRfRVJST1JfRklMRU5BTUUgKyBBTDAxMDAxKSk7CisJCS8vIGFzc2VydFRydWUocmVzdWx0LnNpemUoKSA9PSAwKTsKKwl9IC8vIHRlc3RHZXRMYXRMb25nRXJyb3IKKworCS8qKgorCSAqIFRlc3QgbWV0aG9kIGZvcgorCSAqIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmFkYXB0ZXJzLnNwYXRpYWwuUGxhdGZvcm1MYXRMb25nRGF0YVByb3ZpZGVyI2dldExhdExvbmcob3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlVSSSl9LgorCSAqLworCXB1YmxpYyB2b2lkIHRlc3RHZXRMYXRMb25nQmFkRm9ybWF0RXJyb3IoKSB7CisJCWZpbmFsIFBsYXRmb3JtTGF0TG9uZ0RhdGFQcm92aWRlciBmaXh0dXJlID0gZ2V0Rml4dHVyZSgpOworCisJCS8vIFRoaXMgdGVzdCBwcmludHMgb24gdG8gU3lzdGVtLmVyciwgc28gSSd2ZSBjb21tZW50ZWQgaXQgb3V0LgorCQkvLyBPdGhlcndpc2UgaXQgd29ya3MuCisJCWFzc2VydFRydWUodHJ1ZSk7CisJCS8vIExhdExvbmcgcmVzdWx0ID0gZml4dHVyZS5nZXRMYXRMb25nKFVSSQorCQkvLyAuY3JlYXRlVVJJKFRFU1RfUExBVEZPUk1fTEFUX0xPTkdfVVJJX1NUUklORzEKKwkJLy8gKyBCQURfRk9STUFUX0VSUk9SX0ZJTEVOQU1FICsgQUwwMTAwMSkpOworCQkvLyBhc3NlcnRUcnVlKHJlc3VsdC5zaXplKCkgPT0gMCk7CisJfSAvLyB0ZXN0R2V0TGF0TG9uZ0JhZEZvcm1hdEVycm9yCisKKwkvKioKKwkgKiBUZXN0IG1ldGhvZCBmb3IKKwkgKiB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5hZGFwdGVycy5zcGF0aWFsLlBsYXRmb3JtTGF0TG9uZ0RhdGFQcm92aWRlciNnZXRMYXRMb25nKG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5VUkkpfS4KKwkgKi8KKwlwdWJsaWMgdm9pZCB0ZXN0R2V0TGF0TG9uZ1doaXRlc3BhY2VQcm9jZXNzaW5nKCkgeworCQlmaW5hbCBQbGF0Zm9ybUxhdExvbmdEYXRhUHJvdmlkZXIgZml4dHVyZSA9IGdldEZpeHR1cmUoKTsKKworCQkvLyBUaGlzIHRlc3QgcHJpbnRzIG9uIHRvIFN5c3RlbS5lcnIsIHNvIEkndmUgY29tbWVudGVkIGl0IG91dC4KKwkJLy8gT3RoZXJ3aXNlIGl0IHdvcmtzLgorCQlhc3NlcnRUcnVlKHRydWUpOworCQkvLyBMYXRMb25nIHJlc3VsdCA9IGZpeHR1cmUuZ2V0TGF0TG9uZyhVUkkKKwkJLy8gLmNyZWF0ZVVSSShURVNUX1BMQVRGT1JNX0xBVF9MT05HX1VSSV9TVFJJTkcxCisJCS8vICsgV0hJVEVfU1BBQ0VfRklMRU5BTUUgKyBBTDAxMDAxKSk7CisJCS8vIGFzc2VydFRydWUocmVzdWx0LnNpemUoKSAhPSAwKTsKKwl9IC8vIHRlc3RHZXRMYXRMb25nQmFkRm9ybWF0RXJyb3IKKworCQorCS8qKgorCSAqIFRoaXMgInRlc3QiIGRvZXMgYSBzY2FuIG9mIGEgZ21sIGRhdGEgZmlsZSBhbmQgY2hlY2tzIHRoYXQgZWFjaCBwb2x5Z29uCisJICogaXMgY2xvc2VkLiBJdCByZXBvcnRzIHRoZSBvbmVzIHRoYXQgYXJlIG5vdC4KKwkgKiAKKwkgKi8KKwlwdWJsaWMgdm9pZCB0ZXN0RGF0YVNhbml0eSgpIHsKKwkJZmluYWwgUGxhdGZvcm1MYXRMb25nRGF0YVByb3ZpZGVyIGZpeHR1cmUgPSBnZXRGaXh0dXJlKCk7CisJCWZpbmFsIFN0cmluZyBVUklfU1RSSU5HID0gInBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9nZW8vY291bnRyeS9VU0EvVVNBXzJfTUFQLnhtbCI7CisJCWFzc2VydFRydWUodHJ1ZSk7CisJCS8vIHBvbHlnb25DaGVjayhmaXh0dXJlLCBVUklfU1RSSU5HKTsKKworCQkvLyBkdXBsaWNhdGVDaGVjayhmaXh0dXJlLCBVUklfU1RSSU5HKTsKKworCX0gLy8gdGVzdERhdGFTYW5pdHkKKworCS8qKgorCSAqIEBwYXJhbSBmaXh0dXJlCisJICogQHBhcmFtIFVSSV9TVFJJTkcKKwkgKi8KKy8vCXByaXZhdGUgdm9pZCBwb2x5Z29uQ2hlY2soZmluYWwgUGxhdGZvcm1MYXRMb25nRGF0YVByb3ZpZGVyIGZpeHR1cmUsCisvLwkJCWZpbmFsIFN0cmluZyB1cmlTdHJpbmcpIHsKKy8vCQlmaW5hbCBVUkkgdXJpID0gVVJJLmNyZWF0ZVVSSSh1cmlTdHJpbmcpOworLy8JCWZpbmFsIENvbGxlY3Rpb248U3RyaW5nPiBpZHMgPSBmaXh0dXJlLmdldElkcyh1cmkpOworLy8JCVN5c3RlbS5vdXQucHJpbnRsbigiVGhlIGZvbGxvd2luZyBTZWdtZW50cyBhcmUgbm90IHBvbHlnb25zIik7CisvLwkJZm9yIChTdHJpbmcgaWQgOiBpZHMpIHsKKy8vCQkJYm9vbGVhbiBmaXJzdFRpbWUgPSB0cnVlOworLy8JCQlib29sZWFuIGZvdW5kTm90UG9seWdvbiA9IGZhbHNlOworLy8JCQlpbnQgc2VnbWVudENvdW50ID0gMDsKKy8vCisvLwkJCWZpbmFsIExhdExvbmcgcmVzdWx0ID0gZml4dHVyZS5nZXRMYXRMb25nKFVSSS5jcmVhdGVVUkkodXJpU3RyaW5nCisvLwkJCQkJKyAiIyIgKyBpZCkpOworLy8KKy8vCQkJLy8gR2V0IGVhY2ggc2VnbWVudCBhbmQgdGVzdCBmb3IgcG9seWdvbmVzcworLy8JCQlmb3IgKFNlZ21lbnQgc2VnbWVudCA6IHJlc3VsdC5nZXRTZWdtZW50cygpKSB7CisvLwkJCQkvLyBJcyB0aGlzIGEgcG9seWdvbj8KKy8vCQkJCWlmICghc2VnbWVudC5pc1BvbHlnb24oKSkgeworLy8JCQkJCS8vIE5vCisvLwkJCQkJZm91bmROb3RQb2x5Z29uID0gdHJ1ZTsKKy8vCQkJCQkvLyBQcmludCB0aGUgaWQ/CisvLwkJCQkJaWYgKGZpcnN0VGltZSkgeworLy8JCQkJCQkvLyBZZXMKKy8vCQkJCQkJU3lzdGVtLm91dC5wcmludGxuKCJJRDogXCIiICsgaWQgKyAiXCIiKTsKKy8vCQkJCQkJZmlyc3RUaW1lID0gZmFsc2U7CisvLwkJCQkJfQorLy8JCQkJCVN5c3RlbS5vdXQucHJpbnRsbigiXHRTZWdtZW50ICIgKyBzZWdtZW50Q291bnQgKyAiOiAiCisvLwkJCQkJCQkrIHNlZ21lbnQudG9TdHJpbmcoKSk7CisvLwkJCQl9IC8vIGlmIG5vdCBhIHBvbHlnb24KKy8vCQkJCXNlZ21lbnRDb3VudCsrOworLy8KKy8vCQkJfSAvLyBmb3IgZWFjaCBzZWdtZW50CisvLwkJCS8vIG5vdCBhIHBvbHlnb24/CisvLwkJCWlmIChmb3VuZE5vdFBvbHlnb24pIHsKKy8vCQkJCS8vIFllcworLy8JCQkJU3lzdGVtLm91dC5wcmludGxuKCk7CisvLwkJCX0KKy8vCQl9IC8vIGZvciBlYWNoIGlkCisvLwl9IC8vIHBvbHlnb25DaGVjaworCisJLyoqCisJICogRXhhbWluZSB0aGUgc2VnbWVudHMgaW4gdGhlIGRhdGEgZm9yIGR1cGxpY2F0aW9ucworCSAqIAorCSAqIEBwYXJhbSBmaXh0dXJlCisJICogQHBhcmFtIHVyaV9zdHJpbmcKKwkgKi8KKy8vCXByaXZhdGUgdm9pZCBkdXBsaWNhdGVDaGVjayhQbGF0Zm9ybUxhdExvbmdEYXRhUHJvdmlkZXIgZml4dHVyZSwKKy8vCQkJU3RyaW5nIHVyaVN0cmluZykgeworLy8JCWZpbmFsIFVSSSB1cmkgPSBVUkkuY3JlYXRlVVJJKHVyaVN0cmluZyk7CisvLwkJZmluYWwgQ29sbGVjdGlvbjxTdHJpbmc+IGlkcyA9IGZpeHR1cmUuZ2V0SWRzKHVyaSk7CisvLworLy8JCS8vIFdlIGdldCBldmVyeSBzZWdtZW50IGFuZCBwdXQgaXQgaW50byBhIG1hcCBrZXllZCBieSBpdHMgaGFzaGNvZGUuCisvLwkJLy8gQmVmb3JlIHdlIHB1dCB0aGVtIGludG8gdGhlIG1hcCBob3dldmVyLCB3ZSBzZWUgaWYgc29tZXRoaW5nIHdpdGgKKy8vCQkvLyB0aGF0IGhhc2ggY29kZSBpcyBhbHJlYWR5IHRoZXJlLiBJZiBzbyB3ZSBjaGVjayBmb3IgZXF1YWxpdHkgYW5kIGlmCisvLwkJLy8gdGhleSdyZSBlcXVhbCB3ZSd2ZSBnb3QgZHVwbGljYXRpb24uCisvLworLy8JCU1hcDxJbnRlZ2VyLCBEdXBsaWNhdGVNYXBFbnRyeT4gbWFwID0gbmV3IEhhc2hNYXA8SW50ZWdlciwgRHVwbGljYXRlTWFwRW50cnk+KCk7CisvLwkJTGlzdDxEdXBsaWNhdGVNYXBFbnRyeT4gZHVwTGlzdCA9IG5ldyBBcnJheUxpc3Q8RHVwbGljYXRlTWFwRW50cnk+KCk7CisvLworLy8JCWZvciAoU3RyaW5nIGlkIDogaWRzKSB7CisvLworLy8JCQlmaW5hbCBMYXRMb25nIHJlc3VsdCA9IGZpeHR1cmUuZ2V0TGF0TG9uZyhVUkkuY3JlYXRlVVJJKHVyaVN0cmluZworLy8JCQkJCSsgIiMiICsgaWQpKTsKKy8vCQkJaW50IHNlZ21lbnRDb3VudCA9IDA7CisvLworLy8JCQkvLyBHZXQgZWFjaCBzZWdtZW50IGFuZCB0ZXN0IGZvciBwb2x5Z29uZXNzCisvLwkJCWZvciAoU2VnbWVudCBzZWdtZW50IDogcmVzdWx0LmdldFNlZ21lbnRzKCkpIHsKKy8vCisvLwkJCQlJbnRlZ2VyIGhhc2hjb2RlID0gbmV3IEludGVnZXIoc2VnbWVudC5oYXNoQ29kZSgpKTsKKy8vCisvLwkJCQlEdXBsaWNhdGVNYXBFbnRyeSBlbnRyeSA9IG1hcC5nZXQoaGFzaGNvZGUpOworLy8JCQkJLy8gSXMgdGhlIHNlZ21lbnQgaW4gdGhlIG1hcCBhbHJlYWR5PworLy8JCQkJaWYgKGVudHJ5ID09IG51bGwpIHsKKy8vCQkJCQkvLyBObworLy8JCQkJCW1hcC5wdXQoaGFzaGNvZGUsIG5ldyBEdXBsaWNhdGVNYXBFbnRyeShpZCwgc2VnbWVudENvdW50LAorLy8JCQkJCQkJc2VnbWVudCkpOworLy8JCQkJfSAvLyBpZgorLy8JCQkJZWxzZSB7CisvLwkJCQkJLy8gWWVzCisvLwkJCQkJLy8gRHVwIQorLy8JCQkJCS8vIEFyZSB0aGV5IHRydWVseSBFUVVBTCEKKy8vCQkJCQlpZiAoZW50cnkuc2VnbWVudC5lcXVhbHMoc2VnbWVudCkpIHsKKy8vCQkJCQkJLy8gWWVzCisvLwkJCQkJCWVudHJ5LmFkZChuZXcgRHVwbGljYXRlTWFwRW50cnkoaWQsIHNlZ21lbnRDb3VudCwKKy8vCQkJCQkJCQlzZWdtZW50KSk7CisvLwkJCQkJCS8vIEFkZCB0aGlzIHRvIHRoZSBkdXAgbGlzdD8KKy8vCQkJCQkJaWYgKGVudHJ5LmR1cGxpY2F0ZXMuc2l6ZSgpID09IDEpIHsKKy8vCQkJCQkJCS8vIFllcworLy8JCQkJCQkJZHVwTGlzdC5hZGQoZW50cnkpOworLy8JCQkJCQl9CisvLwkJCQkJfQorLy8JCQkJfSAvLyBlbHNlIER1cCEKKy8vCQkJCXNlZ21lbnRDb3VudCsrOworLy8JCQl9IC8vIGZvciBlYWNoIHNlZ21lbnQKKy8vCisvLwkJfSAvLyBmb3IgZWFjaCBpZAorLy8KKy8vCQkvLyBBcmUgdGhlcmUgYW55IGR1cGxpY2F0aW9ucz8KKy8vCQlpZiAoZHVwTGlzdC5zaXplKCkgPiAwKSB7CisvLwkJCS8vIFllcworLy8JCQlTeXN0ZW0ub3V0LnByaW50bG4oKTsKKy8vCQkJU3lzdGVtLm91dC5wcmludGxuKCJUaGVyZSBhcmUgIiArIGR1cExpc3Quc2l6ZSgpCisvLwkJCQkJKyAiIGR1cGxpY2F0ZSBzZWdtZW50cy5cbiIpOworLy8JCQlTeXN0ZW0ub3V0LnByaW50bG4oKTsKKy8vCisvLwkJCS8vIFRoZSBkdXBsaWNhdGVzIGFyZSBvbiB0aGUgZHVwIGxpc3QuLi4KKy8vCQkJZm9yIChEdXBsaWNhdGVNYXBFbnRyeSBlbnRyeSA6IGR1cExpc3QpIHsKKy8vCQkJCVN5c3RlbS5vdXQucHJpbnRsbigiSWQ6ICIgKyBlbnRyeS5pZCArICIgc2VnbWVudCAiCisvLwkJCQkJCSsgZW50cnkuc2VnbWVudE51bWJlciArICI6IFwiIgorLy8JCQkJCQkrIGVudHJ5LnNlZ21lbnQudG9TdHJpbmcoKSArICJcIiIpOworLy8JCQkJZm9yIChEdXBsaWNhdGVNYXBFbnRyeSBkdXBFbnRyeSA6IGVudHJ5LmR1cGxpY2F0ZXMpIHsKKy8vCQkJCQlTeXN0ZW0ub3V0LnByaW50bG4oIlx0SWQ6ICIgKyBkdXBFbnRyeS5pZCArICIgc2VnbWVudCAiCisvLwkJCQkJCQkrIGR1cEVudHJ5LnNlZ21lbnROdW1iZXIgKyAiOiBcIiIKKy8vCQkJCQkJCSsgZHVwRW50cnkuc2VnbWVudC50b1N0cmluZygpICsgIlwiIik7CisvLwkJCQl9CisvLwkJCQlTeXN0ZW0ub3V0LnByaW50bG4oKTsKKy8vCQkJfSAvLyBmb3IKKy8vCQl9CisvLwl9IC8vIGR1cGxpY2F0ZUNoZWNrCisKKy8vCXByaXZhdGUgc3RhdGljIGNsYXNzIER1cGxpY2F0ZU1hcEVudHJ5IHsKKy8vCQlTdHJpbmcgaWQgPSBudWxsOworLy8KKy8vCQlpbnQgc2VnbWVudE51bWJlciA9IC0xOworLy8KKy8vCQlTZWdtZW50IHNlZ21lbnQgPSBudWxsOworLy8KKy8vCQlMaXN0PER1cGxpY2F0ZU1hcEVudHJ5PiBkdXBsaWNhdGVzID0gbnVsbDsKKy8vCisvLwkJLyoqCisvLwkJICogQHBhcmFtIGlkCisvLwkJICogQHBhcmFtIHNlZ21lbnROdW1iZXIKKy8vCQkgKiBAcGFyYW0gc2VnbWVudAorLy8JCSAqLworLy8JCXByb3RlY3RlZCBEdXBsaWNhdGVNYXBFbnRyeShTdHJpbmcgaWQsIGludCBzZWdtZW50TnVtYmVyLAorLy8JCQkJU2VnbWVudCBzZWdtZW50KSB7CisvLwkJCXRoaXMuaWQgPSBpZDsKKy8vCQkJdGhpcy5zZWdtZW50TnVtYmVyID0gc2VnbWVudE51bWJlcjsKKy8vCQkJdGhpcy5zZWdtZW50ID0gc2VnbWVudDsKKy8vCQl9IC8vIER1cGxpY2F0ZU1hcEVudHJ5CisvLworLy8JCXB1YmxpYyB2b2lkIGFkZChEdXBsaWNhdGVNYXBFbnRyeSBlbnRyeSkgeworLy8JCQkvLyBBbnkgZHVwbGljYXRlcyBhbHJlYWR5CisvLwkJCWlmIChkdXBsaWNhdGVzID09IG51bGwpIHsKKy8vCQkJCS8vIE5vCisvLwkJCQlkdXBsaWNhdGVzID0gbmV3IEFycmF5TGlzdDxEdXBsaWNhdGVNYXBFbnRyeT4oKTsKKy8vCQkJfQorLy8JCQlkdXBsaWNhdGVzLmFkZChlbnRyeSk7CisvLwkJfQorLy8JfSAvLyBEdXBsaWNhdGVNYXBFbnRyeQorCit9IC8vIFBsYXRmb3JtTGF0TG9uZ0RhdGFQcm92aWRlclRlc3QKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvYWRhcHRlcnMvc3BhdGlhbC9nZW8vU2VnbWVudEJ1aWxkZXJUZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL2FkYXB0ZXJzL3NwYXRpYWwvZ2VvL1NlZ21lbnRCdWlsZGVyVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYxOGMxMzYKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL2FkYXB0ZXJzL3NwYXRpYWwvZ2VvL1NlZ21lbnRCdWlsZGVyVGVzdC5qYXZhCkBAIC0wLDAgKzEsMTgyIEBACisvLyBTZWdtZW50QnVpbGRlclRlc3QuamF2YQorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmFkYXB0ZXJzLnNwYXRpYWwuZ2VvOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKKworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuYWRhcHRlcnMuc3BhdGlhbC5nZW8uTGF0TG9uZy5TZWdtZW50OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuYWRhcHRlcnMuc3BhdGlhbC5nZW8uTGF0TG9uZy5TZWdtZW50QnVpbGRlcjsKKworLyoqCisgKiBUaGlzIGNsYXNzIGlzIGEgSlVuaXQgdGVzdCBmb3IgTGF0TG9uZy5TZWdtZW50QnVpbGRlcgorICovCitAU3VwcHJlc3NXYXJuaW5ncygiYWxsIikKK3B1YmxpYyBjbGFzcyBTZWdtZW50QnVpbGRlclRlc3QgZXh0ZW5kcyBUZXN0Q2FzZSB7CisKKwlwcm90ZWN0ZWQgU2VnbWVudEJ1aWxkZXIgZml4dHVyZSA9IG51bGw7CisKKwlAU3VwcHJlc3NXYXJuaW5ncygidW5xdWFsaWZpZWQtZmllbGQtYWNjZXNzIikKKwlwcml2YXRlIFNlZ21lbnRCdWlsZGVyIGdldEZpeHR1cmUoKSB7CisJCXJldHVybiBmaXh0dXJlOworCX0KKworCXByb3RlY3RlZCB2b2lkIHNldEZpeHR1cmUoU2VnbWVudEJ1aWxkZXIgZml4dHVyZSkgeworCQl0aGlzLmZpeHR1cmUgPSBmaXh0dXJlOworCX0KKworCS8qKgorCSAqIEByZXR1cm4gdGhlIGZpeHR1cmUgZm9yIHRlc3RpbmcKKwkgKi8KKwlwdWJsaWMgc3RhdGljIFNlZ21lbnRCdWlsZGVyIGNyZWF0ZUZpeHR1cmUoKSB7CisJCXJldHVybiBuZXcgU2VnbWVudEJ1aWxkZXIoKTsKKwl9IC8vIGNyZWF0ZUZpeHR1cmUKKworCS8qKgorCSAqIEBzZWUganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlI3NldFVwKCkKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBzZXRVcCgpIHRocm93cyBFeGNlcHRpb24geworCQlzZXRGaXh0dXJlKGNyZWF0ZUZpeHR1cmUoKSk7CisJfQorCisJLyoqCisJICogQHNlZSBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2UjdGVhckRvd24oKQorCSAqLworCXByb3RlY3RlZCB2b2lkIHRlYXJEb3duKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCXNldEZpeHR1cmUobnVsbCk7CisJfQorCisJLyoqCisJICogVGVzdCBtZXRob2QgZm9yCisJICoge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuYWRhcHRlcnMuc3BhdGlhbC5nZW8uTGF0TG9uZy5TZWdtZW50QnVpbGRlciNhZGQoamF2YS5sYW5nLlN0cmluZywgamF2YS5sYW5nLlN0cmluZyl9LgorCSAqLworCXB1YmxpYyB2b2lkIHRlc3RBZGRTdHJpbmdTdHJpbmcoKSB7CisJCWZpbmFsIFNlZ21lbnRCdWlsZGVyIHNiID0gZ2V0Rml4dHVyZSgpOworCQlzYi5hZGQoIjEuNSIsICIyLjUiKTsKKwkJZmluYWwgU2VnbWVudCBzZWdtZW50ID0gc2IudG9TZWdtZW50KCk7CisJCWFzc2VydFRydWUoc2VnbWVudC5zaXplKCkgPT0gMSk7CisJCWFzc2VydFRydWUoc2VnbWVudC5sYXRpdHVkZSgwKSA9PSAxLjUpOworCQlhc3NlcnRUcnVlKHNlZ21lbnQubG9uZ2l0dWRlKDApID09IDIuNSk7CisJfSAvLyB0ZXN0QWRkU3RyaW5nU3RyaW5nCisKKwkvKioKKwkgKiBUZXN0IG1ldGhvZCBmb3IKKwkgKiB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5hZGFwdGVycy5zcGF0aWFsLmdlby5MYXRMb25nLlNlZ21lbnRCdWlsZGVyI2FkZChkb3VibGUsIGRvdWJsZSl9LgorCSAqLworCXB1YmxpYyB2b2lkIHRlc3RBZGREb3VibGVEb3VibGUoKSB7CisJCWZpbmFsIFNlZ21lbnRCdWlsZGVyIHNiID0gZ2V0Rml4dHVyZSgpOworCQlzYi5hZGQoMS41LCAyLjUpOworCQlmaW5hbCBTZWdtZW50IHNlZ21lbnQgPSBzYi50b1NlZ21lbnQoKTsKKwkJYXNzZXJ0VHJ1ZShzZWdtZW50LnNpemUoKSA9PSAxKTsKKwkJYXNzZXJ0VHJ1ZShzZWdtZW50LmxhdGl0dWRlKDApID09IDEuNSk7CisJCWFzc2VydFRydWUoc2VnbWVudC5sb25naXR1ZGUoMCkgPT0gMi41KTsKKwl9IC8vIHRlc3RBZGREb3VibGVEb3VibGUKKworCS8qKgorCSAqIFRlc3QgbWV0aG9kIGZvcgorCSAqIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmFkYXB0ZXJzLnNwYXRpYWwuZ2VvLkxhdExvbmcuU2VnbWVudEJ1aWxkZXIjc2l6ZSgpfS4KKwkgKi8KKwlwdWJsaWMgdm9pZCB0ZXN0U2l6ZSgpIHsKKwkJZmluYWwgU2VnbWVudEJ1aWxkZXIgc2IgPSBnZXRGaXh0dXJlKCk7CisJCWFzc2VydFRydWUoc2Iuc2l6ZSgpID09IDApOworCQlzYi5hZGQoMS41LCAyLjUpOworCQlhc3NlcnRUcnVlKHNiLnNpemUoKSA9PSAxKTsKKwkJc2IuYWRkKDMuNSwgNC41KTsKKwkJYXNzZXJ0VHJ1ZShzYi5zaXplKCkgPT0gMik7CisJfSAvLyB0ZXN0U2l6ZQorCisJLyoqCisJICogVGVzdCBtZXRob2QgZm9yCisJICoge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuYWRhcHRlcnMuc3BhdGlhbC5nZW8uTGF0TG9uZy5TZWdtZW50QnVpbGRlciNjbGVhcigpfS4KKwkgKi8KKwlwdWJsaWMgdm9pZCB0ZXN0Q2xlYXIoKSB7CisJCWZpbmFsIFNlZ21lbnRCdWlsZGVyIHNiID0gZ2V0Rml4dHVyZSgpOworCQlhc3NlcnRUcnVlKHNiLnNpemUoKSA9PSAwKTsKKwkJc2IuYWRkKDEuNSwgMi41KTsKKwkJYXNzZXJ0VHJ1ZShzYi5zaXplKCkgPT0gMSk7CisJCXNiLmFkZCgzLjUsIDQuNSk7CisJCWFzc2VydFRydWUoc2Iuc2l6ZSgpID09IDIpOworCQlzYi5jbGVhcigpOworCQlhc3NlcnRUcnVlKHNiLnNpemUoKSA9PSAwKTsKKwl9IC8vIHRlc3RDbGVhcgorCisJLyoqCisJICogVGVzdCB0b1NlZ21lbnQgd2l0aCBmaWx0ZXJpbmcKKwkgKi8KKwlwdWJsaWMgdm9pZCB0ZXN0VG9TZWdtZW50KCkgeworCQlmaW5hbCBTZWdtZW50QnVpbGRlciBzYiA9IGdldEZpeHR1cmUoKTsKKwkJYXNzZXJ0VHJ1ZShzYi5zaXplKCkgPT0gMCk7CisJCXNiLmFkZCgwLCAwKTsKKwkJc2IuYWRkKDEsIDEpOworCQlzYi5hZGQoMiwgMik7CisJCXNiLmFkZCgzLCAzKTsKKwkJc2IuYWRkKDQsIDQpOworCQlzYi5hZGQoNSwgNSk7CisJCXNiLmFkZCg2LCA2KTsKKwkJc2IuYWRkKDcsIDcpOworCQlhc3NlcnRUcnVlKHNiLnNpemUoKSA9PSA4KTsKKworCQlmaW5hbCBTZWdtZW50IGZpbHRlcmVkU2VnbWVudDQgPSBzYi50b1NlZ21lbnQoNCk7CisJCWFzc2VydFRydWUoZmlsdGVyZWRTZWdtZW50NC5zaXplKCkgPT0gMyk7CisJCWFzc2VydFRydWUoZmlsdGVyZWRTZWdtZW50NC5sYXRpdHVkZSgwKSA9PSAwKTsKKwkJYXNzZXJ0VHJ1ZShmaWx0ZXJlZFNlZ21lbnQ0LmxvbmdpdHVkZSgwKSA9PSAwKTsKKwkJYXNzZXJ0VHJ1ZShmaWx0ZXJlZFNlZ21lbnQ0LmxhdGl0dWRlKDEpID09IDQpOworCQlhc3NlcnRUcnVlKGZpbHRlcmVkU2VnbWVudDQubG9uZ2l0dWRlKDEpID09IDQpOworCQlhc3NlcnRUcnVlKGZpbHRlcmVkU2VnbWVudDQubGF0aXR1ZGUoMikgPT0gNyk7CisJCWFzc2VydFRydWUoZmlsdGVyZWRTZWdtZW50NC5sb25naXR1ZGUoMikgPT0gNyk7CisKKwkJZmluYWwgU2VnbWVudCBmaWx0ZXJlZFNlZ21lbnQxID0gc2IudG9TZWdtZW50KDEpOworCQlhc3NlcnRUcnVlKGZpbHRlcmVkU2VnbWVudDEuc2l6ZSgpID09IHNiLnNpemUoKSk7CisJCWFzc2VydFRydWUoZmlsdGVyZWRTZWdtZW50MS5sYXRpdHVkZSgwKSA9PSAwKTsKKwkJYXNzZXJ0VHJ1ZShmaWx0ZXJlZFNlZ21lbnQxLmxvbmdpdHVkZSgwKSA9PSAwKTsKKwkJYXNzZXJ0VHJ1ZShmaWx0ZXJlZFNlZ21lbnQxLmxhdGl0dWRlKDEpID09IDEpOworCQlhc3NlcnRUcnVlKGZpbHRlcmVkU2VnbWVudDEubG9uZ2l0dWRlKDEpID09IDEpOworCQlhc3NlcnRUcnVlKGZpbHRlcmVkU2VnbWVudDEubGF0aXR1ZGUoMikgPT0gMik7CisJCWFzc2VydFRydWUoZmlsdGVyZWRTZWdtZW50MS5sb25naXR1ZGUoMikgPT0gMik7CisJCWFzc2VydFRydWUoZmlsdGVyZWRTZWdtZW50MS5sYXRpdHVkZSgzKSA9PSAzKTsKKwkJYXNzZXJ0VHJ1ZShmaWx0ZXJlZFNlZ21lbnQxLmxvbmdpdHVkZSgzKSA9PSAzKTsKKwkJYXNzZXJ0VHJ1ZShmaWx0ZXJlZFNlZ21lbnQxLmxhdGl0dWRlKDQpID09IDQpOworCQlhc3NlcnRUcnVlKGZpbHRlcmVkU2VnbWVudDEubG9uZ2l0dWRlKDQpID09IDQpOworCQlhc3NlcnRUcnVlKGZpbHRlcmVkU2VnbWVudDEubGF0aXR1ZGUoNSkgPT0gNSk7CisJCWFzc2VydFRydWUoZmlsdGVyZWRTZWdtZW50MS5sb25naXR1ZGUoNSkgPT0gNSk7CisJCWFzc2VydFRydWUoZmlsdGVyZWRTZWdtZW50MS5sYXRpdHVkZSg2KSA9PSA2KTsKKwkJYXNzZXJ0VHJ1ZShmaWx0ZXJlZFNlZ21lbnQxLmxvbmdpdHVkZSg2KSA9PSA2KTsKKwkJYXNzZXJ0VHJ1ZShmaWx0ZXJlZFNlZ21lbnQxLmxhdGl0dWRlKDcpID09IDcpOworCQlhc3NlcnRUcnVlKGZpbHRlcmVkU2VnbWVudDEubG9uZ2l0dWRlKDcpID09IDcpOworCisJCWZpbmFsIFNlZ21lbnQgZmlsdGVyZWRTZWdtZW50VG9vQmlnID0gc2IudG9TZWdtZW50KHNiLnNpemUoKSk7CisJCWFzc2VydFRydWUoZmlsdGVyZWRTZWdtZW50VG9vQmlnLnNpemUoKSA9PSAzKTsKKwkJYXNzZXJ0VHJ1ZShmaWx0ZXJlZFNlZ21lbnRUb29CaWcubGF0aXR1ZGUoMCkgPT0gMCk7CisJCWFzc2VydFRydWUoZmlsdGVyZWRTZWdtZW50VG9vQmlnLmxvbmdpdHVkZSgwKSA9PSAwKTsKKwkJYXNzZXJ0VHJ1ZShmaWx0ZXJlZFNlZ21lbnRUb29CaWcubGF0aXR1ZGUoMSkgPT0gNCk7CisJCWFzc2VydFRydWUoZmlsdGVyZWRTZWdtZW50VG9vQmlnLmxvbmdpdHVkZSgxKSA9PSA0KTsKKwkJYXNzZXJ0VHJ1ZShmaWx0ZXJlZFNlZ21lbnRUb29CaWcubGF0aXR1ZGUoMikgPT0gNyk7CisJCWFzc2VydFRydWUoZmlsdGVyZWRTZWdtZW50VG9vQmlnLmxvbmdpdHVkZSgyKSA9PSA3KTsKKworCQlmaW5hbCBTZWdtZW50IGZpbHRlcmVkU2VnbWVudFNhbWVTaXplID0gc2IudG9TZWdtZW50KHNiLnNpemUoKSAtIDEpOworCQlhc3NlcnRUcnVlKGZpbHRlcmVkU2VnbWVudFNhbWVTaXplLnNpemUoKSA9PSAzKTsKKwkJYXNzZXJ0VHJ1ZShmaWx0ZXJlZFNlZ21lbnRTYW1lU2l6ZS5sYXRpdHVkZSgwKSA9PSAwKTsKKwkJYXNzZXJ0VHJ1ZShmaWx0ZXJlZFNlZ21lbnRTYW1lU2l6ZS5sb25naXR1ZGUoMCkgPT0gMCk7CisJCWFzc2VydFRydWUoZmlsdGVyZWRTZWdtZW50U2FtZVNpemUubGF0aXR1ZGUoMSkgPT0gNCk7CisJCWFzc2VydFRydWUoZmlsdGVyZWRTZWdtZW50U2FtZVNpemUubG9uZ2l0dWRlKDEpID09IDQpOworCQlhc3NlcnRUcnVlKGZpbHRlcmVkU2VnbWVudFNhbWVTaXplLmxhdGl0dWRlKDIpID09IDcpOworCQlhc3NlcnRUcnVlKGZpbHRlcmVkU2VnbWVudFNhbWVTaXplLmxvbmdpdHVkZSgyKSA9PSA3KTsKKworCQl0cnkgeworCQkJZmluYWwgU2VnbWVudCBmaWx0ZXJlZFNlZ21lbnRUb29TbWFsbCA9IHNiLnRvU2VnbWVudCgwKTsKKwkJCWZhaWwoIlNob3VsZCBoYXZlIHRocm93biBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24iKTsKKwkJfSBjYXRjaCAoSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uIGUpIHsKKwkJCS8vIGV4cGVjdGVkCisJCX0KKworCX0gLy8gdGVzdFRvU2VnbWVudAorfSAvLyBTZWdtZW50QnVpbGRlclRlc3QKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvYWRhcHRlcnMvc3BhdGlhbC9nZW8vU2VnbWVudFRlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvYWRhcHRlcnMvc3BhdGlhbC9nZW8vU2VnbWVudFRlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZmQ0ODFkCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kZWZpbml0aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy9hZGFwdGVycy9zcGF0aWFsL2dlby9TZWdtZW50VGVzdC5qYXZhCkBAIC0wLDAgKzEsMTE2IEBACisvLyBTZWdtZW50VGVzdC5qYXZhCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuYWRhcHRlcnMuc3BhdGlhbC5nZW87CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOworCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5hZGFwdGVycy5zcGF0aWFsLmdlby5MYXRMb25nLlNlZ21lbnQ7CisKKy8qKgorICogVGhpcyBjbGFzcyByZXByZXNlbnRzCisgKi8KK0BTdXBwcmVzc1dhcm5pbmdzKCJhbGwiKQorcHVibGljIGNsYXNzIFNlZ21lbnRUZXN0IGV4dGVuZHMgVGVzdENhc2UgeworCisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgZG91YmxlIExBVF8wID0gMDsKKworCXByaXZhdGUgc3RhdGljIGZpbmFsIGRvdWJsZSBMT05HXzAgPSAxLjA7CisKKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBkb3VibGUgTEFUXzEgPSAxMC4wOworCisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgZG91YmxlIExPTkdfMSA9IDExLjA7CisKKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBkb3VibGUgTEFUXzIgPSBMQVRfMDsKKworCXByaXZhdGUgc3RhdGljIGZpbmFsIGRvdWJsZSBMT05HXzIgPSBMT05HXzA7CisKKwlwcm90ZWN0ZWQgU2VnbWVudCBmaXh0dXJlID0gbnVsbDsKKworCUBTdXBwcmVzc1dhcm5pbmdzKCJ1bnF1YWxpZmllZC1maWVsZC1hY2Nlc3MiKQorCXByaXZhdGUgU2VnbWVudCBnZXRGaXh0dXJlKCkgeworCQlyZXR1cm4gZml4dHVyZTsKKwl9CisKKwlwcm90ZWN0ZWQgdm9pZCBzZXRGaXh0dXJlKFNlZ21lbnQgZml4dHVyZSkgeworCQl0aGlzLmZpeHR1cmUgPSBmaXh0dXJlOworCX0KKworCS8qKgorCSAqIEByZXR1cm4gdGhlIGZpeHR1cmUgZm9yIHRlc3RpbmcKKwkgKi8KKwlwdWJsaWMgc3RhdGljIFNlZ21lbnQgY3JlYXRlRml4dHVyZSgpIHsKKwkJZmluYWwgZG91YmxlW11bXSBkYXRhID0gbmV3IGRvdWJsZVszXVsyXTsKKwkJZGF0YVswXVtTZWdtZW50LkxBVElUVURFX0lOREVYXSA9IExBVF8wOworCQlkYXRhWzBdW1NlZ21lbnQuTE9OR0lUVURFX0lOREVYXSA9IExPTkdfMDsKKwkJZGF0YVsxXVtTZWdtZW50LkxBVElUVURFX0lOREVYXSA9IExBVF8xOworCQlkYXRhWzFdW1NlZ21lbnQuTE9OR0lUVURFX0lOREVYXSA9IExPTkdfMTsKKwkJZGF0YVsyXVtTZWdtZW50LkxBVElUVURFX0lOREVYXSA9IExBVF8yOworCQlkYXRhWzJdW1NlZ21lbnQuTE9OR0lUVURFX0lOREVYXSA9IExPTkdfMjsKKwkJcmV0dXJuIG5ldyBTZWdtZW50KGRhdGEpOworCX0gLy8gY3JlYXRlRml4dHVyZQorCisJLyoqCisJICogQHNlZSBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2Ujc2V0VXAoKQorCSAqLworCXByb3RlY3RlZCB2b2lkIHNldFVwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCXNldEZpeHR1cmUoY3JlYXRlRml4dHVyZSgpKTsKKwl9CisKKwkvKioKKwkgKiBAc2VlIGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZSN0ZWFyRG93bigpCisJICovCisJcHJvdGVjdGVkIHZvaWQgdGVhckRvd24oKSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJc2V0Rml4dHVyZShudWxsKTsKKwl9CisKKwkvKioKKwkgKiBUZXN0IG1ldGhvZCBmb3IKKwkgKiB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5hZGFwdGVycy5zcGF0aWFsLmdlby5MYXRMb25nLlNlZ21lbnQjbGF0aXR1ZGUoaW50KX0uCisJICovCisJcHVibGljIHZvaWQgdGVzdExhdGl0dWRlKCkgeworCQlmaW5hbCBTZWdtZW50IHNlZ21lbnQgPSBnZXRGaXh0dXJlKCk7CisJCWFzc2VydFRydWUoc2VnbWVudC5sYXRpdHVkZSgwKSA9PSBMQVRfMCk7CisJCWFzc2VydFRydWUoc2VnbWVudC5sYXRpdHVkZSgxKSA9PSBMQVRfMSk7CisJCWFzc2VydFRydWUoc2VnbWVudC5sYXRpdHVkZSgyKSA9PSBMQVRfMik7CisJfSAvLyB0ZXN0TGF0aXR1ZGUKKworCS8qKgorCSAqIFRlc3QgbWV0aG9kIGZvcgorCSAqIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmFkYXB0ZXJzLnNwYXRpYWwuZ2VvLkxhdExvbmcuU2VnbWVudCNsb25naXR1ZGUoaW50KX0uCisJICovCisJcHVibGljIHZvaWQgdGVzdExvbmdpdHVkZSgpIHsKKwkJZmluYWwgU2VnbWVudCBzZWdtZW50ID0gZ2V0Rml4dHVyZSgpOworCQlhc3NlcnRUcnVlKHNlZ21lbnQubG9uZ2l0dWRlKDApID09IExPTkdfMCk7CisJCWFzc2VydFRydWUoc2VnbWVudC5sb25naXR1ZGUoMSkgPT0gTE9OR18xKTsKKwkJYXNzZXJ0VHJ1ZShzZWdtZW50LmxvbmdpdHVkZSgyKSA9PSBMT05HXzIpOworCX0gLy8gdGVzdExvbmdpdHVkZQorCisJLyoqCisJICogVGVzdCBtZXRob2QgZm9yCisJICoge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuYWRhcHRlcnMuc3BhdGlhbC5nZW8uTGF0TG9uZy5TZWdtZW50I3NpemUoKX0uCisJICovCisJcHVibGljIHZvaWQgdGVzdFNpemUoKSB7CisJCWZpbmFsIFNlZ21lbnQgc2VnbWVudCA9IGdldEZpeHR1cmUoKTsKKwkJYXNzZXJ0VHJ1ZShzZWdtZW50LnNpemUoKSA9PSAzKTsKKwl9CisKKwkvKioKKwkgKiBUZXN0IG1ldGhvZCBmb3IKKwkgKiB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5hZGFwdGVycy5zcGF0aWFsLmdlby5MYXRMb25nLlNlZ21lbnQjaXNQb2x5Z29uKCl9LgorCSAqLworCXB1YmxpYyB2b2lkIHRlc3RJc1BvbHlnb24oKSB7CisJCWZpbmFsIFNlZ21lbnQgc2VnbWVudCA9IGdldEZpeHR1cmUoKTsKKwkJYXNzZXJ0VHJ1ZShzZWdtZW50LmlzUG9seWdvbigpKTsKKwl9IC8vIHRlc3RJc1BvbHlnb24KKworfSAvLyBTZWdtZW50VGVzdApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kZWZpbml0aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy9lZGdlcy90ZXN0cy9EZWZpbml0aW9uc0FsbFRlc3RzLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL2VkZ2VzL3Rlc3RzL0RlZmluaXRpb25zQWxsVGVzdHMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ODg2YTZiCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kZWZpbml0aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy9lZGdlcy90ZXN0cy9EZWZpbml0aW9uc0FsbFRlc3RzLmphdmEKQEAgLTAsMCArMSw2MCBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmVkZ2VzLnRlc3RzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA3LCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0OworaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0U3VpdGU7CitpbXBvcnQganVuaXQudGV4dHVpLlRlc3RSdW5uZXI7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy50ZXN0cy5MYWJlbHNUZXN0czsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLm5vZGVzLnRlc3RzLk5vZGVzVGVzdHM7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIEEgdGVzdCBzdWl0ZSBmb3IgdGhlICc8ZW0+PGI+RGVmaW5pdGlvbnM8L2I+PC9lbT4nIG1vZGVsLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBEZWZpbml0aW9uc0FsbFRlc3RzIGV4dGVuZHMgVGVzdFN1aXRlIHsKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKKwkJVGVzdFJ1bm5lci5ydW4oc3VpdGUoKSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHN0YXRpYyBUZXN0IHN1aXRlKCkgeworCQlUZXN0U3VpdGUgc3VpdGUgPSBuZXcgRGVmaW5pdGlvbnNBbGxUZXN0cygiRGVmaW5pdGlvbnMgVGVzdHMiKTsgLy8kTk9OLU5MUy0xJAorCQlzdWl0ZS5hZGRUZXN0KEVkZ2VzVGVzdHMuc3VpdGUoKSk7CisJCXN1aXRlLmFkZFRlc3QoTGFiZWxzVGVzdHMuc3VpdGUoKSk7CisJCXN1aXRlLmFkZFRlc3QoTm9kZXNUZXN0cy5zdWl0ZSgpKTsKKwkJcmV0dXJuIHN1aXRlOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBEZWZpbml0aW9uc0FsbFRlc3RzKFN0cmluZyBuYW1lKSB7CisJCXN1cGVyKG5hbWUpOworCX0KKworfSAvL0RlZmluaXRpb25zQWxsVGVzdHMKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvZWRnZXMvdGVzdHMvRWRnZXNUZXN0cy5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kZWZpbml0aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy9lZGdlcy90ZXN0cy9FZGdlc1Rlc3RzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmUyMjU2MwotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvZWRnZXMvdGVzdHMvRWRnZXNUZXN0cy5qYXZhCkBAIC0wLDAgKzEsNjEgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5lZGdlcy50ZXN0czsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNywgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdDsKK2ltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdFN1aXRlOworaW1wb3J0IGp1bml0LnRleHR1aS5UZXN0UnVubmVyOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiBBIHRlc3Qgc3VpdGUgZm9yIHRoZSAnPGVtPjxiPmVkZ2VzPC9iPjwvZW0+JyBwYWNrYWdlLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBFZGdlc1Rlc3RzIGV4dGVuZHMgVGVzdFN1aXRlIHsKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKKwkJVGVzdFJ1bm5lci5ydW4oc3VpdGUoKSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHN0YXRpYyBUZXN0IHN1aXRlKCkgeworCQlUZXN0U3VpdGUgc3VpdGUgPSBuZXcgRWRnZXNUZXN0cygiZWRnZXMgVGVzdHMiKTsgLy8kTk9OLU5MUy0xJAorCQlzdWl0ZS5hZGRUZXN0U3VpdGUoTWlncmF0aW9uRWRnZVRlc3QuY2xhc3MpOworCQlzdWl0ZS5hZGRUZXN0U3VpdGUoTWlncmF0aW9uRWRnZUxhYmVsVGVzdC5jbGFzcyk7CisJCXN1aXRlLmFkZFRlc3RTdWl0ZShNaWdyYXRpb25FZGdlTGFiZWxWYWx1ZVRlc3QuY2xhc3MpOworCQlzdWl0ZS5hZGRUZXN0U3VpdGUoTWl4aW5nRWRnZVRlc3QuY2xhc3MpOworCQlzdWl0ZS5hZGRUZXN0U3VpdGUoTWl4aW5nRWRnZUxhYmVsVGVzdC5jbGFzcyk7CisJCXN1aXRlLmFkZFRlc3RTdWl0ZShNaXhpbmdFZGdlTGFiZWxWYWx1ZVRlc3QuY2xhc3MpOworCQlzdWl0ZS5hZGRUZXN0U3VpdGUoUG9wdWxhdGlvbkVkZ2VUZXN0LmNsYXNzKTsKKwkJcmV0dXJuIHN1aXRlOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFZGdlc1Rlc3RzKFN0cmluZyBuYW1lKSB7CisJCXN1cGVyKG5hbWUpOworCX0KKworfSAvL0VkZ2VzVGVzdHMKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvZWRnZXMvdGVzdHMvTWlncmF0aW9uRWRnZUxhYmVsVGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kZWZpbml0aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy9lZGdlcy90ZXN0cy9NaWdyYXRpb25FZGdlTGFiZWxUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDMyYWZmOQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvZWRnZXMvdGVzdHMvTWlncmF0aW9uRWRnZUxhYmVsVGVzdC5qYXZhCkBAIC0wLDAgKzEsMTEwIEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuZWRnZXMudGVzdHM7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDcsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQganVuaXQudGV4dHVpLlRlc3RSdW5uZXI7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGgudGVzdHMuRWRnZUxhYmVsVGVzdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmVkZ2VzLkVkZ2VzRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmVkZ2VzLk1pZ3JhdGlvbkVkZ2VMYWJlbDsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogQSB0ZXN0IGNhc2UgZm9yIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5NaWdyYXRpb24gRWRnZSBMYWJlbDwvYj48L2VtPicuCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBnZW5lcmF0ZWQgTk9UCisgKi8KK0BTdXBwcmVzc1dhcm5pbmdzKCJhbGwiKQorcHVibGljIGNsYXNzIE1pZ3JhdGlvbkVkZ2VMYWJlbFRlc3QgZXh0ZW5kcyBFZGdlTGFiZWxUZXN0IHsKKworCS8qKgorCSAqIFRoZSBmaXh0dXJlIGZvciB0aGlzIE1pZ3JhdGlvbiBFZGdlIExhYmVsIHRlc3QgY2FzZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgTWlncmF0aW9uRWRnZUxhYmVsIGZpeHR1cmUgPSBudWxsOworCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgeworCQlUZXN0UnVubmVyLnJ1bihNaWdyYXRpb25FZGdlTGFiZWxUZXN0LmNsYXNzKTsKKwl9CisKKwkvKioKKwkgKiBDb25zdHJ1Y3RzIGEgbmV3IE1pZ3JhdGlvbiBFZGdlIExhYmVsIHRlc3QgY2FzZSB3aXRoIHRoZSBnaXZlbiBuYW1lLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBNaWdyYXRpb25FZGdlTGFiZWxUZXN0KFN0cmluZyBuYW1lKSB7CisJCXN1cGVyKG5hbWUpOworCX0KKworCS8qKgorCSAqIFNldHMgdGhlIGZpeHR1cmUgZm9yIHRoaXMgTWlncmF0aW9uIEVkZ2UgTGFiZWwgdGVzdCBjYXNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIHNldEZpeHR1cmUoTWlncmF0aW9uRWRnZUxhYmVsIGZpeHR1cmUpIHsKKwkJdGhpcy5maXh0dXJlID0gZml4dHVyZTsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBmaXh0dXJlIGZvciB0aGlzIE1pZ3JhdGlvbiBFZGdlIExhYmVsIHRlc3QgY2FzZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgTWlncmF0aW9uRWRnZUxhYmVsIGdldEZpeHR1cmUoKSB7CisJCXJldHVybiBmaXh0dXJlOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2Ujc2V0VXAoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgdm9pZCBzZXRVcCgpIHRocm93cyBFeGNlcHRpb24geworCQlzZXRGaXh0dXJlKEVkZ2VzRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlTWlncmF0aW9uRWRnZUxhYmVsKCkpOworCX0KKworCS8qKgorCSAqIE1ha2Ugc3VyZSB0aGUgZml4dHVyZSBtYWtlcyBzZW5zZS4KKwkgKi8KKwlwdWJsaWMgdm9pZCB0ZXN0Rml4dHVyZSgpIHsKKwkJZmluYWwgTWlncmF0aW9uRWRnZUxhYmVsIG1pZ3JhdGlvbkVkZ2VMYWJlbCA9IGdldEZpeHR1cmUoKTsKKwkJYXNzZXJ0Tm90TnVsbChtaWdyYXRpb25FZGdlTGFiZWwpOworCQlhc3NlcnRUcnVlKG1pZ3JhdGlvbkVkZ2VMYWJlbC5zYW5lKCkpOworCQkKKwkJYXNzZXJ0Tm90TnVsbChtaWdyYXRpb25FZGdlTGFiZWwuZ2V0Q3VycmVudFZhbHVlKCkpOworCX0gLy8gdGVzdEZpeHR1cmUJCisJCisJCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZSN0ZWFyRG93bigpCisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIHRlYXJEb3duKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCXNldEZpeHR1cmUobnVsbCk7CisJfQorCit9IC8vTWlncmF0aW9uRWRnZUxhYmVsVGVzdApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kZWZpbml0aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy9lZGdlcy90ZXN0cy9NaWdyYXRpb25FZGdlTGFiZWxWYWx1ZVRlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvZWRnZXMvdGVzdHMvTWlncmF0aW9uRWRnZUxhYmVsVmFsdWVUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjM3YzU3NQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvZWRnZXMvdGVzdHMvTWlncmF0aW9uRWRnZUxhYmVsVmFsdWVUZXN0LmphdmEKQEAgLTAsMCArMSwxMzAgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5lZGdlcy50ZXN0czsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNywgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqdW5pdC50ZXh0dWkuVGVzdFJ1bm5lcjsKKworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC50ZXN0cy5MYWJlbFZhbHVlVGVzdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmVkZ2VzLkVkZ2VzRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmVkZ2VzLk1pZ3JhdGlvbkVkZ2VMYWJlbFZhbHVlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuZWRnZXMuaW1wbC5NaWdyYXRpb25FZGdlTGFiZWxWYWx1ZUltcGw7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIEEgdGVzdCBjYXNlIGZvciB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+TWlncmF0aW9uIEVkZ2UgTGFiZWwgVmFsdWU8L2I+PC9lbT4nLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkIE5PVAorICovCitAU3VwcHJlc3NXYXJuaW5ncygiYWxsIikKK3B1YmxpYyBjbGFzcyBNaWdyYXRpb25FZGdlTGFiZWxWYWx1ZVRlc3QgZXh0ZW5kcyBMYWJlbFZhbHVlVGVzdCB7CisJLyoqTWlncmF0aW9uIHJhdGVzIHRvIHVzZSBpbiB0aGUgdGVzdHMqLworCXN0YXRpYyBmaW5hbCBkb3VibGUgTUlHUkFUSU9OX1JBVEUgPSAwLjU7CisJCisJLyoqCisJICogVGhlIGZpeHR1cmUgZm9yIHRoaXMgTWlncmF0aW9uIEVkZ2UgTGFiZWwgVmFsdWUgdGVzdCBjYXNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBNaWdyYXRpb25FZGdlTGFiZWxWYWx1ZSBmaXh0dXJlID0gbnVsbDsKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKKwkJVGVzdFJ1bm5lci5ydW4oTWlncmF0aW9uRWRnZUxhYmVsVmFsdWVUZXN0LmNsYXNzKTsKKwl9CisKKwkvKioKKwkgKiBDb25zdHJ1Y3RzIGEgbmV3IE1pZ3JhdGlvbiBFZGdlIExhYmVsIFZhbHVlIHRlc3QgY2FzZSB3aXRoIHRoZSBnaXZlbiBuYW1lLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBNaWdyYXRpb25FZGdlTGFiZWxWYWx1ZVRlc3QoU3RyaW5nIG5hbWUpIHsKKwkJc3VwZXIobmFtZSk7CisJfQorCisJLyoqCisJICogU2V0cyB0aGUgZml4dHVyZSBmb3IgdGhpcyBNaWdyYXRpb24gRWRnZSBMYWJlbCBWYWx1ZSB0ZXN0IGNhc2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgc2V0Rml4dHVyZShNaWdyYXRpb25FZGdlTGFiZWxWYWx1ZSBmaXh0dXJlKSB7CisJCXRoaXMuZml4dHVyZSA9IGZpeHR1cmU7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgZml4dHVyZSBmb3IgdGhpcyBNaWdyYXRpb24gRWRnZSBMYWJlbCBWYWx1ZSB0ZXN0IGNhc2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIE1pZ3JhdGlvbkVkZ2VMYWJlbFZhbHVlIGdldEZpeHR1cmUoKSB7CisJCXJldHVybiBmaXh0dXJlOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2Ujc2V0VXAoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgdm9pZCBzZXRVcCgpIHRocm93cyBFeGNlcHRpb24geworCQlzZXRGaXh0dXJlKEVkZ2VzRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlTWlncmF0aW9uRWRnZUxhYmVsVmFsdWUoKSk7CisJfQorCQorCisJLyoqCisJICogTWFrZSBzdXJlIHRoZSBmaXh0dXJlIG1ha2VzIHNlbnNlLgorCSAqLworCXB1YmxpYyB2b2lkIHRlc3RGaXh0dXJlKCkgeworCQlmaW5hbCBNaWdyYXRpb25FZGdlTGFiZWxWYWx1ZSBtaWdyYXRpb25MYWJlbFZhbHVlID0gZ2V0Rml4dHVyZSgpOworCQlhc3NlcnROb3ROdWxsKG1pZ3JhdGlvbkxhYmVsVmFsdWUpOworCQlhc3NlcnRUcnVlKCgoTWlncmF0aW9uRWRnZUxhYmVsVmFsdWVJbXBsKSBtaWdyYXRpb25MYWJlbFZhbHVlKS5zYW5lKCkpOworCQkKKwkJLypNYWtlIHN1cmUgd2UgY2FuIHNldCB0aGUgdmFsdWUqLworCQltaWdyYXRpb25MYWJlbFZhbHVlLnNldE1pZ3JhdGlvblJhdGUoTUlHUkFUSU9OX1JBVEUpOworCQlhc3NlcnRUcnVlKG1pZ3JhdGlvbkxhYmVsVmFsdWUuZ2V0TWlncmF0aW9uUmF0ZSgpPT1NSUdSQVRJT05fUkFURSk7CisJCQorCX0gLy8gdGVzdEZpeHR1cmUKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2UjdGVhckRvd24oKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgdm9pZCB0ZWFyRG93bigpIHRocm93cyBFeGNlcHRpb24geworCQlzZXRGaXh0dXJlKG51bGwpOworCX0KKworCS8qKgorCSAqIE1ha2Ugc3VyZSByZXNldCByZXZlcnRzIHRoZSBsYWJlbCB2YWx1ZSB0byBpdHMgZGVmYXVsdAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIHRlc3RSZXNldCgpIHsKKwkJTWlncmF0aW9uRWRnZUxhYmVsVmFsdWUgbWlncmF0aW9uTGFiZWxWYWx1ZSA9IGdldEZpeHR1cmUoKTsKKwkJZG91YmxlIG9sZFZhbHVlID0gbWlncmF0aW9uTGFiZWxWYWx1ZS5nZXRNaWdyYXRpb25SYXRlKCk7CisJCW1pZ3JhdGlvbkxhYmVsVmFsdWUuc2V0TWlncmF0aW9uUmF0ZShNSUdSQVRJT05fUkFURSk7CisJCWFzc2VydEZhbHNlKG1pZ3JhdGlvbkxhYmVsVmFsdWUuZ2V0TWlncmF0aW9uUmF0ZSgpPT1vbGRWYWx1ZSk7CisJCW1pZ3JhdGlvbkxhYmVsVmFsdWUucmVzZXQoKTsKKwkJYXNzZXJ0VHJ1ZShtaWdyYXRpb25MYWJlbFZhbHVlLmdldE1pZ3JhdGlvblJhdGUoKT09b2xkVmFsdWUpOworCQkKKwl9CisKK30gLy9NaWdyYXRpb25FZGdlTGFiZWxWYWx1ZVRlc3QKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvZWRnZXMvdGVzdHMvTWlncmF0aW9uRWRnZVRlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvZWRnZXMvdGVzdHMvTWlncmF0aW9uRWRnZVRlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZGZlZGYwCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kZWZpbml0aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy9lZGdlcy90ZXN0cy9NaWdyYXRpb25FZGdlVGVzdC5qYXZhCkBAIC0wLDAgKzEsMTYwIEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuZWRnZXMudGVzdHM7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDcsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQganVuaXQudGV4dHVpLlRlc3RSdW5uZXI7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguRWRnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguTm9kZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGgudGVzdHMuRWRnZVRlc3Q7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5lZGdlcy5FZGdlc0ZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5lZGdlcy5NaWdyYXRpb25FZGdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuZWRnZXMuTWlncmF0aW9uRWRnZUxhYmVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC5UZXN0VXRpbDsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogQSB0ZXN0IGNhc2UgZm9yIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5NaWdyYXRpb24gRWRnZTwvYj48L2VtPicuCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBnZW5lcmF0ZWQgTk9UCisgKi8KK0BTdXBwcmVzc1dhcm5pbmdzKCJhbGwiKQorcHVibGljIGNsYXNzIE1pZ3JhdGlvbkVkZ2VUZXN0IGV4dGVuZHMgRWRnZVRlc3QgeworCQorCS8qKlN0YXRpYyBsYWJlbCBmb3IgdXNlIGluIHRlc3RzKi8KKwlzdGF0aWMgTWlncmF0aW9uRWRnZUxhYmVsIFRFU1RfTEFCRUwgPSBFZGdlc0ZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZU1pZ3JhdGlvbkVkZ2VMYWJlbCgpOworCisJLyoqCisJICogVGhlIGZpeHR1cmUgZm9yIHRoaXMgTWlncmF0aW9uIEVkZ2UgdGVzdCBjYXNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBNaWdyYXRpb25FZGdlIGZpeHR1cmUgPSBudWxsOworCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgeworCQlUZXN0UnVubmVyLnJ1bihNaWdyYXRpb25FZGdlVGVzdC5jbGFzcyk7CisJfQorCisJLyoqCisJICogQ29uc3RydWN0cyBhIG5ldyBNaWdyYXRpb24gRWRnZSB0ZXN0IGNhc2Ugd2l0aCB0aGUgZ2l2ZW4gbmFtZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgTWlncmF0aW9uRWRnZVRlc3QoU3RyaW5nIG5hbWUpIHsKKwkJc3VwZXIobmFtZSk7CisJfQorCisJLyoqCisJICogU2V0cyB0aGUgZml4dHVyZSBmb3IgdGhpcyBNaWdyYXRpb24gRWRnZSB0ZXN0IGNhc2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgc2V0Rml4dHVyZShNaWdyYXRpb25FZGdlIGZpeHR1cmUpIHsKKwkJdGhpcy5maXh0dXJlID0gZml4dHVyZTsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBmaXh0dXJlIGZvciB0aGlzIE1pZ3JhdGlvbiBFZGdlIHRlc3QgY2FzZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgTWlncmF0aW9uRWRnZSBnZXRGaXh0dXJlKCkgeworCQlyZXR1cm4gZml4dHVyZTsKKwl9CisJCisJLyoqCisJICogQ3JlYXRlcyB0aGUgZml4dHVyZS4gV2UgbmVlZCB0byBoYXZlIG5vZGVzIG9uIGJvdGggc2lkZXMgaW4gb3JkZXIgdG8gYmUgc2FuZSgpLgorCSAqIAorCSAqICovCisJcHVibGljIE1pZ3JhdGlvbkVkZ2UgY3JlYXRlRml4dHVyZSgpIHsKKwkJZmluYWwgTm9kZSBub2RlQSA9IFRlc3RVdGlsLmNyZWF0ZVN0YXRpY2FsbHlMYWJlbGVkTm9kZSgpOworCQlmaW5hbCBOb2RlIG5vZGVCID0gVGVzdFV0aWwuY3JlYXRlU3RhdGljYWxseUxhYmVsZWROb2RlKCk7CisJCU1pZ3JhdGlvbkVkZ2UgbWlncmF0aW9uRWRnZSA9IEVkZ2VzRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlTWlncmF0aW9uRWRnZSgpOworCQltaWdyYXRpb25FZGdlLnNldE5vZGVBVVJJKG5vZGVBLmdldFVSSSgpKTsKKwkJbWlncmF0aW9uRWRnZS5zZXROb2RlQlVSSShub2RlQi5nZXRVUkkoKSk7CQorCQkKKwkJLy9NYWtlIHN1cmUgdGhlIG5vZGUgcmVsYXRpb25zIGFyZSBjb29sCisJCW1pZ3JhdGlvbkVkZ2Uuc2V0QShub2RlQSk7CisJCW1pZ3JhdGlvbkVkZ2Uuc2V0Qihub2RlQik7CisJCW5vZGVBLmdldEVkZ2VzKCkuYWRkKG1pZ3JhdGlvbkVkZ2UpOworCQlub2RlQi5nZXRFZGdlcygpLmFkZChtaWdyYXRpb25FZGdlKTsKKwkJCisJCQorCQlyZXR1cm4gbWlncmF0aW9uRWRnZTsKKwl9CisKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2Ujc2V0VXAoKQorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgc2V0VXAoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJc2V0Rml4dHVyZShjcmVhdGVGaXh0dXJlKCkpOworCX0KKwkKKwkvKipQZXJmb3JtIGJhc2ljIHRlc3RzIG9uIHRoaXMgZml4dHVyZSovCisJcHVibGljIHZvaWQgdGVzdEZpeHR1cmUoKSB7CisJCU1pZ3JhdGlvbkVkZ2UgbWlncmF0aW9uRWRnZSAgPSBnZXRGaXh0dXJlKCk7CisJCWFzc2VydE5vdE51bGwobWlncmF0aW9uRWRnZSk7CisJCWFzc2VydFRydWUobWlncmF0aW9uRWRnZS5zYW5lKCkpOworCQlhc3NlcnRUcnVlKG1pZ3JhdGlvbkVkZ2UuaXNEaXJlY3RlZCgpKTsKKwkJCisJCWFzc2VydE5vdE51bGwobWlncmF0aW9uRWRnZS5nZXRMYWJlbCgpKTsKKwl9CisJCisJLyoqVGVzdCBzZXR0aW5nIHRoZSBsYWJlbCovCisJcHVibGljIHZvaWQgdGVzdFNldExhYmVsKCkgeworCQlNaWdyYXRpb25FZGdlIG1pZ3JhdGlvbkVkZ2UgPSBnZXRGaXh0dXJlKCk7CisJCWFzc2VydEZhbHNlKG1pZ3JhdGlvbkVkZ2UuZ2V0TGFiZWwoKSA9PSBURVNUX0xBQkVMKTsKKwkJbWlncmF0aW9uRWRnZS5zZXRMYWJlbChURVNUX0xBQkVMKTsKKwkJYXNzZXJ0VHJ1ZShtaWdyYXRpb25FZGdlLmdldExhYmVsKCk9PVRFU1RfTEFCRUwpOworCQlhc3NlcnRUcnVlKG1pZ3JhdGlvbkVkZ2Uuc2FuZSgpKTsKKwl9CisJCisJLyoqVGVzdCBEaXJlY3RlZCovCisJcHVibGljIHZvaWQgdGVzdElzRGlyZWN0ZWRBdF9fTm9kZSgpIHsKKwkJZmluYWwgRWRnZSBlZGdlID0gZ2V0Rml4dHVyZSgpOworCQlmaW5hbCBOb2RlIG5vZGVBID0gZWRnZS5nZXRBKCk7CisJCWZpbmFsIE5vZGUgbm9kZUIgPSBlZGdlLmdldEIoKTsKKwkJCisJCWVkZ2Uuc2V0RGlyZWN0ZWQodHJ1ZSk7CisJCWFzc2VydFRydWUoZWRnZS5pc0RpcmVjdGVkKCkpOworCisJCWFzc2VydEZhbHNlKGVkZ2UuaXNEaXJlY3RlZEF0KG5vZGVBKSk7CisJCWFzc2VydFRydWUoZWRnZS5pc0RpcmVjdGVkQXQobm9kZUIpKTsKKwl9CisKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2UjdGVhckRvd24oKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgdm9pZCB0ZWFyRG93bigpIHRocm93cyBFeGNlcHRpb24geworCQlzZXRGaXh0dXJlKG51bGwpOworCX0KKworfSAvL01pZ3JhdGlvbkVkZ2VUZXN0CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL2VkZ2VzL3Rlc3RzL01peGluZ0VkZ2VMYWJlbFRlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvZWRnZXMvdGVzdHMvTWl4aW5nRWRnZUxhYmVsVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjllOTQwZTgKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL2VkZ2VzL3Rlc3RzL01peGluZ0VkZ2VMYWJlbFRlc3QuamF2YQpAQCAtMCwwICsxLDExMSBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmVkZ2VzLnRlc3RzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA3LCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGp1bml0LnRleHR1aS5UZXN0UnVubmVyOworCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLnRlc3RzLkVkZ2VMYWJlbFRlc3Q7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5lZGdlcy5FZGdlc0ZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5lZGdlcy5NaXhpbmdFZGdlTGFiZWw7CisKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogQSB0ZXN0IGNhc2UgZm9yIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5NaXhpbmcgRWRnZSBMYWJlbDwvYj48L2VtPicuCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBnZW5lcmF0ZWQgTk9UCisgKi8KK0BTdXBwcmVzc1dhcm5pbmdzKCJhbGwiKQorcHVibGljIGNsYXNzIE1peGluZ0VkZ2VMYWJlbFRlc3QgZXh0ZW5kcyBFZGdlTGFiZWxUZXN0IHsKKworCS8qKgorCSAqIFRoZSBmaXh0dXJlIGZvciB0aGlzIE1peGluZyBFZGdlIExhYmVsIHRlc3QgY2FzZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgTWl4aW5nRWRnZUxhYmVsIGZpeHR1cmUgPSBudWxsOworCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgeworCQlUZXN0UnVubmVyLnJ1bihNaXhpbmdFZGdlTGFiZWxUZXN0LmNsYXNzKTsKKwl9CisKKwkvKioKKwkgKiBDb25zdHJ1Y3RzIGEgbmV3IE1peGluZyBFZGdlIExhYmVsIHRlc3QgY2FzZSB3aXRoIHRoZSBnaXZlbiBuYW1lLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBNaXhpbmdFZGdlTGFiZWxUZXN0KFN0cmluZyBuYW1lKSB7CisJCXN1cGVyKG5hbWUpOworCX0KKworCS8qKgorCSAqIFNldHMgdGhlIGZpeHR1cmUgZm9yIHRoaXMgTWl4aW5nIEVkZ2UgTGFiZWwgdGVzdCBjYXNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIHNldEZpeHR1cmUoTWl4aW5nRWRnZUxhYmVsIGZpeHR1cmUpIHsKKwkJdGhpcy5maXh0dXJlID0gZml4dHVyZTsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBmaXh0dXJlIGZvciB0aGlzIE1peGluZyBFZGdlIExhYmVsIHRlc3QgY2FzZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgTWl4aW5nRWRnZUxhYmVsIGdldEZpeHR1cmUoKSB7CisJCXJldHVybiBmaXh0dXJlOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2Ujc2V0VXAoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgdm9pZCBzZXRVcCgpIHRocm93cyBFeGNlcHRpb24geworCQlzZXRGaXh0dXJlKEVkZ2VzRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlTWl4aW5nRWRnZUxhYmVsKCkpOworCX0KKworCS8qKgorCSAqIE1ha2Ugc3VyZSB0aGUgZml4dHVyZSBtYWtlcyBzZW5zZS4KKwkgKi8KKwlwdWJsaWMgdm9pZCB0ZXN0Rml4dHVyZSgpIHsKKwkJZmluYWwgTWl4aW5nRWRnZUxhYmVsIG1peGluZ0VkZ2VMYWJlbCA9IGdldEZpeHR1cmUoKTsKKwkJYXNzZXJ0Tm90TnVsbChtaXhpbmdFZGdlTGFiZWwpOworCQlhc3NlcnRUcnVlKG1peGluZ0VkZ2VMYWJlbC5zYW5lKCkpOworCQkKKwkJYXNzZXJ0Tm90TnVsbChtaXhpbmdFZGdlTGFiZWwuZ2V0Q3VycmVudFZhbHVlKCkpOworCX0gLy8gdGVzdEZpeHR1cmUJCisJCisJCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZSN0ZWFyRG93bigpCisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIHRlYXJEb3duKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCXNldEZpeHR1cmUobnVsbCk7CisJfQkKKworfSAvL01peGluZ0VkZ2VMYWJlbFRlc3QKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvZWRnZXMvdGVzdHMvTWl4aW5nRWRnZUxhYmVsVmFsdWVUZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL2VkZ2VzL3Rlc3RzL01peGluZ0VkZ2VMYWJlbFZhbHVlVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE1MDAzODEKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL2VkZ2VzL3Rlc3RzL01peGluZ0VkZ2VMYWJlbFZhbHVlVGVzdC5qYXZhCkBAIC0wLDAgKzEsMTMxIEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuZWRnZXMudGVzdHM7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDcsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQganVuaXQudGV4dHVpLlRlc3RSdW5uZXI7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGgudGVzdHMuTGFiZWxWYWx1ZVRlc3Q7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5lZGdlcy5FZGdlc0ZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5lZGdlcy5NaXhpbmdFZGdlTGFiZWxWYWx1ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmVkZ2VzLmltcGwuTWl4aW5nRWRnZUxhYmVsVmFsdWVJbXBsOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiBBIHRlc3QgY2FzZSBmb3IgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPk1peGluZyBFZGdlIExhYmVsIFZhbHVlPC9iPjwvZW0+Jy4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQGdlbmVyYXRlZCBOT1QKKyAqLworQFN1cHByZXNzV2FybmluZ3MoImFsbCIpCitwdWJsaWMgY2xhc3MgTWl4aW5nRWRnZUxhYmVsVmFsdWVUZXN0IGV4dGVuZHMgTGFiZWxWYWx1ZVRlc3QgeworCisJc3RhdGljIGRvdWJsZSBNSVhJTkdfUkFURSA9IC4wMDE7CisJCisJLyoqCisJICogVGhlIGZpeHR1cmUgZm9yIHRoaXMgTWl4aW5nIEVkZ2UgTGFiZWwgVmFsdWUgdGVzdCBjYXNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBNaXhpbmdFZGdlTGFiZWxWYWx1ZSBmaXh0dXJlID0gbnVsbDsKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKKwkJVGVzdFJ1bm5lci5ydW4oTWl4aW5nRWRnZUxhYmVsVmFsdWVUZXN0LmNsYXNzKTsKKwl9CisKKwkvKioKKwkgKiBDb25zdHJ1Y3RzIGEgbmV3IE1peGluZyBFZGdlIExhYmVsIFZhbHVlIHRlc3QgY2FzZSB3aXRoIHRoZSBnaXZlbiBuYW1lLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBNaXhpbmdFZGdlTGFiZWxWYWx1ZVRlc3QoU3RyaW5nIG5hbWUpIHsKKwkJc3VwZXIobmFtZSk7CisJfQorCisJLyoqCisJICogU2V0cyB0aGUgZml4dHVyZSBmb3IgdGhpcyBNaXhpbmcgRWRnZSBMYWJlbCBWYWx1ZSB0ZXN0IGNhc2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgc2V0Rml4dHVyZShNaXhpbmdFZGdlTGFiZWxWYWx1ZSBmaXh0dXJlKSB7CisJCXRoaXMuZml4dHVyZSA9IGZpeHR1cmU7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgZml4dHVyZSBmb3IgdGhpcyBNaXhpbmcgRWRnZSBMYWJlbCBWYWx1ZSB0ZXN0IGNhc2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIE1peGluZ0VkZ2VMYWJlbFZhbHVlIGdldEZpeHR1cmUoKSB7CisJCXJldHVybiBmaXh0dXJlOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2Ujc2V0VXAoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgdm9pZCBzZXRVcCgpIHRocm93cyBFeGNlcHRpb24geworCQlzZXRGaXh0dXJlKEVkZ2VzRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlTWl4aW5nRWRnZUxhYmVsVmFsdWUoKSk7CisJfQorCisJCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZSN0ZWFyRG93bigpCisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIHRlYXJEb3duKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCXNldEZpeHR1cmUobnVsbCk7CisJfQorCisJCisJLyoqCisJICogTWFrZSBzdXJlIHRoZSBmaXh0dXJlIG1ha2VzIHNlbnNlLgorCSAqLworCXB1YmxpYyB2b2lkIHRlc3RGaXh0dXJlKCkgeworCQlmaW5hbCBNaXhpbmdFZGdlTGFiZWxWYWx1ZSBtaXhpbmdMYWJlbFZhbHVlID0gZ2V0Rml4dHVyZSgpOworCQlhc3NlcnROb3ROdWxsKG1peGluZ0xhYmVsVmFsdWUpOworCQlhc3NlcnRUcnVlKCgoTWl4aW5nRWRnZUxhYmVsVmFsdWVJbXBsKSBtaXhpbmdMYWJlbFZhbHVlKS5zYW5lKCkpOworCQkKKwkJLypNYWtlIHN1cmUgd2UgY2FuIHNldCB0aGUgdmFsdWUqLworCQltaXhpbmdMYWJlbFZhbHVlLnNldE1peGluZ1JhdGUoTUlYSU5HX1JBVEUpOworCQlhc3NlcnRUcnVlKG1peGluZ0xhYmVsVmFsdWUuZ2V0TWl4aW5nUmF0ZSgpPT1NSVhJTkdfUkFURSk7CisJCQorCX0gLy8gdGVzdEZpeHR1cmUKKwkKKwkvKioKKwkgKiBNYWtlIHN1cmUgcmVzZXQgcmV2ZXJ0cyB0aGUgbGFiZWwgdmFsdWUgdG8gaXRzIGRlZmF1bHQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCB0ZXN0UmVzZXQoKSB7CisJCU1peGluZ0VkZ2VMYWJlbFZhbHVlIG1peGluZ0xhYmVsVmFsdWUgPSBnZXRGaXh0dXJlKCk7CisJCWRvdWJsZSBvbGRWYWx1ZSA9IG1peGluZ0xhYmVsVmFsdWUuZ2V0TWl4aW5nUmF0ZSgpOworCQltaXhpbmdMYWJlbFZhbHVlLnNldE1peGluZ1JhdGUoTUlYSU5HX1JBVEUpOworCQlhc3NlcnRGYWxzZShtaXhpbmdMYWJlbFZhbHVlLmdldE1peGluZ1JhdGUoKT09b2xkVmFsdWUpOworCQltaXhpbmdMYWJlbFZhbHVlLnJlc2V0KCk7CisJCWFzc2VydFRydWUobWl4aW5nTGFiZWxWYWx1ZS5nZXRNaXhpbmdSYXRlKCk9PW9sZFZhbHVlKTsKKwkJCisJfQorCit9IC8vTWl4aW5nRWRnZUxhYmVsVmFsdWVUZXN0CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL2VkZ2VzL3Rlc3RzL01peGluZ0VkZ2VUZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL2VkZ2VzL3Rlc3RzL01peGluZ0VkZ2VUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2ExNzY0MAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvZWRnZXMvdGVzdHMvTWl4aW5nRWRnZVRlc3QuamF2YQpAQCAtMCwwICsxLDE1OSBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmVkZ2VzLnRlc3RzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA3LCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGp1bml0LnRleHR1aS5UZXN0UnVubmVyOworCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkVkZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLk5vZGU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLnRlc3RzLkVkZ2VUZXN0OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuZWRnZXMuRWRnZXNGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuZWRnZXMuTWl4aW5nRWRnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmVkZ2VzLk1peGluZ0VkZ2VMYWJlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwuVGVzdFV0aWw7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIEEgdGVzdCBjYXNlIGZvciB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+TWl4aW5nIEVkZ2U8L2I+PC9lbT4nLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkIE5PVAorICovCitAU3VwcHJlc3NXYXJuaW5ncygiYWxsIikKK3B1YmxpYyBjbGFzcyBNaXhpbmdFZGdlVGVzdCBleHRlbmRzIEVkZ2VUZXN0IHsKKworCXN0YXRpYyBNaXhpbmdFZGdlTGFiZWwgVEVTVF9MQUJFTCA9IEVkZ2VzRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlTWl4aW5nRWRnZUxhYmVsKCk7CisJCisJLyoqCisJICogVGhlIGZpeHR1cmUgZm9yIHRoaXMgTWl4aW5nIEVkZ2UgdGVzdCBjYXNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBNaXhpbmdFZGdlIGZpeHR1cmUgPSBudWxsOworCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgeworCQlUZXN0UnVubmVyLnJ1bihNaXhpbmdFZGdlVGVzdC5jbGFzcyk7CisJfQorCisJLyoqCisJICogQ29uc3RydWN0cyBhIG5ldyBNaXhpbmcgRWRnZSB0ZXN0IGNhc2Ugd2l0aCB0aGUgZ2l2ZW4gbmFtZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgTWl4aW5nRWRnZVRlc3QoU3RyaW5nIG5hbWUpIHsKKwkJc3VwZXIobmFtZSk7CisJfQorCisJLyoqCisJICogU2V0cyB0aGUgZml4dHVyZSBmb3IgdGhpcyBNaXhpbmcgRWRnZSB0ZXN0IGNhc2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgc2V0Rml4dHVyZShNaXhpbmdFZGdlIGZpeHR1cmUpIHsKKwkJdGhpcy5maXh0dXJlID0gZml4dHVyZTsKKwl9CisJCisJLyoqCisJICogQ3JlYXRlcyB0aGUgZml4dHVyZS4gV2UgbmVlZCB0byBoYXZlIG5vZGVzIG9uIGJvdGggc2lkZXMgaW4gb3JkZXIgdG8gYmUgc2FuZSgpLgorCSAqIAorCSAqICovCisJcHVibGljIE1peGluZ0VkZ2UgY3JlYXRlRml4dHVyZSgpIHsKKwkJZmluYWwgTm9kZSBub2RlQSA9IFRlc3RVdGlsLmNyZWF0ZVN0YXRpY2FsbHlMYWJlbGVkTm9kZSgpOworCQlmaW5hbCBOb2RlIG5vZGVCID0gVGVzdFV0aWwuY3JlYXRlU3RhdGljYWxseUxhYmVsZWROb2RlKCk7CisJCU1peGluZ0VkZ2UgbWl4aW5nRWRnZSA9IEVkZ2VzRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlTWl4aW5nRWRnZSgpOworCQltaXhpbmdFZGdlLnNldE5vZGVBVVJJKG5vZGVBLmdldFVSSSgpKTsKKwkJbWl4aW5nRWRnZS5zZXROb2RlQlVSSShub2RlQi5nZXRVUkkoKSk7CisJCQorCQkvL01ha2Ugc3VyZSB0aGUgbm9kZSBzdHVmZiBpcyBhbGwgY29vbC4KKwkJbWl4aW5nRWRnZS5zZXRBKG5vZGVBKTsKKwkJbWl4aW5nRWRnZS5zZXRCKG5vZGVCKTsKKwkJbm9kZUEuZ2V0RWRnZXMoKS5hZGQobWl4aW5nRWRnZSk7CisJCW5vZGVCLmdldEVkZ2VzKCkuYWRkKG1peGluZ0VkZ2UpOworCQkKKwkJcmV0dXJuIG1peGluZ0VkZ2U7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgZml4dHVyZSBmb3IgdGhpcyBNaXhpbmcgRWRnZSB0ZXN0IGNhc2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIE1peGluZ0VkZ2UgZ2V0Rml4dHVyZSgpIHsKKwkJcmV0dXJuIGZpeHR1cmU7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZSNzZXRVcCgpCisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgdm9pZCBzZXRVcCgpIHRocm93cyBFeGNlcHRpb24geworCQlzZXRGaXh0dXJlKGNyZWF0ZUZpeHR1cmUoKSk7CisJfQorCQorCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2UjdGVhckRvd24oKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgdm9pZCB0ZWFyRG93bigpIHRocm93cyBFeGNlcHRpb24geworCQlzZXRGaXh0dXJlKG51bGwpOworCX0KKwkKKwkvKipQZXJmb3JtIGJhc2ljIHRlc3RzIG9uIHRoaXMgZml4dHVyZSovCisJcHVibGljIHZvaWQgdGVzdEZpeHR1cmUoKSB7CisJCU1peGluZ0VkZ2UgbWl4aW5nRWRnZSAgPSBnZXRGaXh0dXJlKCk7CisJCWFzc2VydE5vdE51bGwobWl4aW5nRWRnZSk7CisJCWFzc2VydFRydWUobWl4aW5nRWRnZS5zYW5lKCkpOworCQlhc3NlcnRGYWxzZShtaXhpbmdFZGdlLmlzRGlyZWN0ZWQoKSk7CisJCQorCQlhc3NlcnROb3ROdWxsKG1peGluZ0VkZ2UuZ2V0TGFiZWwoKSk7CisJfQorCQorCS8qKlRlc3Qgc2V0dGluZyB0aGUgbGFiZWwqLworCXB1YmxpYyB2b2lkIHRlc3RTZXRMYWJlbCgpIHsKKwkJTWl4aW5nRWRnZSBtaXhpbmdFZGdlID0gZ2V0Rml4dHVyZSgpOworCQlhc3NlcnRGYWxzZShtaXhpbmdFZGdlLmdldExhYmVsKCkgPT0gVEVTVF9MQUJFTCk7CisJCW1peGluZ0VkZ2Uuc2V0TGFiZWwoVEVTVF9MQUJFTCk7CisJCWFzc2VydFRydWUobWl4aW5nRWRnZS5nZXRMYWJlbCgpPT1URVNUX0xBQkVMKTsKKwkJYXNzZXJ0VHJ1ZShtaXhpbmdFZGdlLnNhbmUoKSk7CisJfQorCQorCS8qKgorCSpvdmVycmlkZSBvZiBpcyBkaXJlY3RlZCB0ZXN0LCBzaW5jZSB0aGVzZSBlZGdlcworCSpjYW5ub3QgYmUgZGlyZWN0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCB0ZXN0SXNEaXJlY3RlZEF0X19Ob2RlKCkgeworCQlmaW5hbCBFZGdlIGVkZ2UgPSBnZXRGaXh0dXJlKCk7CisJCWZpbmFsIE5vZGUgbm9kZUEgPSBlZGdlLmdldEEoKTsKKwkJZmluYWwgTm9kZSBub2RlQiA9IGVkZ2UuZ2V0QigpOworCisJCWFzc2VydEZhbHNlKGVkZ2UuaXNEaXJlY3RlZCgpKTsKKworCQlhc3NlcnRGYWxzZShlZGdlLmlzRGlyZWN0ZWRBdChub2RlQSkpOworCQlhc3NlcnRGYWxzZShlZGdlLmlzRGlyZWN0ZWRBdChub2RlQikpOworCisJfSAvLyB0ZXN0SXNEaXJlY3RlZEF0X19Ob2RlCisKK30gLy9NaXhpbmdFZGdlVGVzdApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kZWZpbml0aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy9lZGdlcy90ZXN0cy9Qb3B1bGF0aW9uRWRnZVRlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvZWRnZXMvdGVzdHMvUG9wdWxhdGlvbkVkZ2VUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzZhZTE0NwotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvZWRnZXMvdGVzdHMvUG9wdWxhdGlvbkVkZ2VUZXN0LmphdmEKQEAgLTAsMCArMSw5NyBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmVkZ2VzLnRlc3RzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDExIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK2ltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7CisKK2ltcG9ydCBqdW5pdC50ZXh0dWkuVGVzdFJ1bm5lcjsKKworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuZWRnZXMuRWRnZXNGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuZWRnZXMuUG9wdWxhdGlvbkVkZ2U7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIEEgdGVzdCBjYXNlIGZvciB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+UG9wdWxhdGlvbiBFZGdlPC9iPjwvZW0+Jy4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgUG9wdWxhdGlvbkVkZ2VUZXN0IGV4dGVuZHMgVGVzdENhc2UgeworCisJLyoqCisJICogVGhlIGZpeHR1cmUgZm9yIHRoaXMgUG9wdWxhdGlvbiBFZGdlIHRlc3QgY2FzZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgUG9wdWxhdGlvbkVkZ2UgZml4dHVyZSA9IG51bGw7CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CisJCVRlc3RSdW5uZXIucnVuKFBvcHVsYXRpb25FZGdlVGVzdC5jbGFzcyk7CisJfQorCisJLyoqCisJICogQ29uc3RydWN0cyBhIG5ldyBQb3B1bGF0aW9uIEVkZ2UgdGVzdCBjYXNlIHdpdGggdGhlIGdpdmVuIG5hbWUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFBvcHVsYXRpb25FZGdlVGVzdChTdHJpbmcgbmFtZSkgeworCQlzdXBlcihuYW1lKTsKKwl9CisKKwkvKioKKwkgKiBTZXRzIHRoZSBmaXh0dXJlIGZvciB0aGlzIFBvcHVsYXRpb24gRWRnZSB0ZXN0IGNhc2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgc2V0Rml4dHVyZShQb3B1bGF0aW9uRWRnZSBmaXh0dXJlKSB7CisJCXRoaXMuZml4dHVyZSA9IGZpeHR1cmU7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgZml4dHVyZSBmb3IgdGhpcyBQb3B1bGF0aW9uIEVkZ2UgdGVzdCBjYXNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBQb3B1bGF0aW9uRWRnZSBnZXRGaXh0dXJlKCkgeworCQlyZXR1cm4gZml4dHVyZTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlI3NldFVwKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgc2V0VXAoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJc2V0Rml4dHVyZShFZGdlc0ZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZVBvcHVsYXRpb25FZGdlKCkpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2UjdGVhckRvd24oKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgdm9pZCB0ZWFyRG93bigpIHRocm93cyBFeGNlcHRpb24geworCQlzZXRGaXh0dXJlKG51bGwpOworCX0KKworfSAvL1BvcHVsYXRpb25FZGdlVGVzdApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kZWZpbml0aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy9sYWJlbHMvdGVzdHMvQXJlYUxhYmVsVGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kZWZpbml0aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy9sYWJlbHMvdGVzdHMvQXJlYUxhYmVsVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU0NjcxN2YKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL2xhYmVscy90ZXN0cy9BcmVhTGFiZWxUZXN0LmphdmEKQEAgLTAsMCArMSwxMzYgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMudGVzdHM7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKK2ltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7CitpbXBvcnQganVuaXQudGV4dHVpLlRlc3RSdW5uZXI7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5BcmVhTGFiZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuTGFiZWxzRmFjdG9yeTsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiBBIHRlc3QgY2FzZSBmb3IgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPkFyZWEgTGFiZWw8L2I+PC9lbT4nLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiA8cD4KKyAqIFRoZSBmb2xsb3dpbmcgZmVhdHVyZXMgYXJlIHRlc3RlZDoKKyAqIDx1bD4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5BcmVhTGFiZWwjZ2V0Q3VycmVudEFyZWFWYWx1ZSgpIDxlbT5DdXJyZW50IEFyZWEgVmFsdWU8L2VtPn08L2xpPgorICogPC91bD4KKyAqIDwvcD4KKyAqIEBnZW5lcmF0ZWQKKyAqLworQFN1cHByZXNzV2FybmluZ3MoImFsbCIpCitwdWJsaWMgY2xhc3MgQXJlYUxhYmVsVGVzdCBleHRlbmRzIFRlc3RDYXNlIHsKKwkvKioKKwkgKiBUaGUgZml4dHVyZSBmb3IgdGhpcyBBcmVhIExhYmVsIHRlc3QgY2FzZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tCisJICogZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgQXJlYUxhYmVsIGZpeHR1cmUgPSBudWxsOworCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAcGFyYW0gYXJncworCSAqIAorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CisJCVRlc3RSdW5uZXIucnVuKEFyZWFMYWJlbFRlc3QuY2xhc3MpOworCX0KKworCS8qKgorCSAqIENvbnN0cnVjdHMgYSBuZXcgQXJlYSBMYWJlbCB0ZXN0IGNhc2Ugd2l0aCB0aGUgZ2l2ZW4gbmFtZS4gPCEtLQorCSAqIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBwYXJhbSBuYW1lCisJICogCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBBcmVhTGFiZWxUZXN0KFN0cmluZyBuYW1lKSB7CisJCXN1cGVyKG5hbWUpOworCX0KKworCS8qKgorCSAqIFNldHMgdGhlIGZpeHR1cmUgZm9yIHRoaXMgQXJlYSBMYWJlbCB0ZXN0IGNhc2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgc2V0Rml4dHVyZShBcmVhTGFiZWwgZml4dHVyZSkgeworCQl0aGlzLmZpeHR1cmUgPSBmaXh0dXJlOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIGZpeHR1cmUgZm9yIHRoaXMgQXJlYSBMYWJlbCB0ZXN0IGNhc2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYworCSAqIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIEFyZWFMYWJlbCBnZXRGaXh0dXJlKCkgeworCQlyZXR1cm4gZml4dHVyZTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAc2VlIGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZSNzZXRVcCgpCisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBzZXRVcCgpIHRocm93cyBFeGNlcHRpb24geworCQlzZXRGaXh0dXJlKGNyZWF0ZUZpeHR1cmUoKSk7CisJfSAvLyBzZXRVcAorCisJLyoqCisJICogQHJldHVybiBhbiBBcmVhTGFiZWwKKwkgKi8KKwlwdWJsaWMgc3RhdGljIEFyZWFMYWJlbCBjcmVhdGVGaXh0dXJlKCkgeworCQlmaW5hbCBBcmVhTGFiZWwgcmV0VmFsdWUgPSBMYWJlbHNGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVBcmVhTGFiZWwoKTsKKwkJcmV0VmFsdWUuc2V0Q3VycmVudFZhbHVlKEFyZWFMYWJlbFZhbHVlVGVzdC5jcmVhdGVGaXh0dXJlKCkpOworCQlyZXR1cm4gcmV0VmFsdWU7CisJfSAvLyBjcmVhdGVGaXh0dXJlCisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZSN0ZWFyRG93bigpCisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIHRlYXJEb3duKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCXNldEZpeHR1cmUobnVsbCk7CisJfQorCisJLyoqCisJICogVGVzdHMgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuQXJlYUxhYmVsI2dldEN1cnJlbnRBcmVhVmFsdWUoKSA8ZW0+Q3VycmVudCBBcmVhIFZhbHVlPC9lbT59JworCSAqIGZlYXR1cmUgZ2V0dGVyLiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLkFyZWFMYWJlbCNnZXRDdXJyZW50QXJlYVZhbHVlKCkKKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCXB1YmxpYyB2b2lkIHRlc3RHZXRDdXJyZW50QXJlYVZhbHVlKCkgeworCQlmaW5hbCBBcmVhTGFiZWwgYXJlYUxhYmVsID0gZ2V0Rml4dHVyZSgpOworCQlhc3NlcnRUcnVlKGFyZWFMYWJlbC5nZXRDdXJyZW50QXJlYVZhbHVlKCkuZ2V0QXJlYSgpID09IEFyZWFMYWJlbFZhbHVlVGVzdC5URVNUX0FSRUFfVkFMVUUpOworCX0gLy8gdGVzdEdldEN1cnJlbnRBcmVhVmFsdWUKKworCS8qKgorCSAqIFRlc3QgdGhlIHNhbml0eSBvZiB0aGUgZml4dHVyZQorCSAqLworCXB1YmxpYyB2b2lkIHRlc3RGaXh0dXJlU2FuaXR5KCkgeworCQlmaW5hbCBBcmVhTGFiZWwgYXJlYUxhYmVsID0gZ2V0Rml4dHVyZSgpOworCQlhc3NlcnRUcnVlKGFyZWFMYWJlbC5zYW5lKCkpOworCX0gLy8gdGVzdEZpeHR1cmVTYW5pdHkKKworfSAvLyBBcmVhTGFiZWxUZXN0CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL2xhYmVscy90ZXN0cy9BcmVhTGFiZWxWYWx1ZVRlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvbGFiZWxzL3Rlc3RzL0FyZWFMYWJlbFZhbHVlVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY1ODkxMGUKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL2xhYmVscy90ZXN0cy9BcmVhTGFiZWxWYWx1ZVRlc3QuamF2YQpAQCAtMCwwICsxLDEyOCBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy50ZXN0czsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNiwgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKK2ltcG9ydCBqdW5pdC50ZXh0dWkuVGVzdFJ1bm5lcjsKKworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLkFyZWFMYWJlbFZhbHVlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLkxhYmVsc0ZhY3Rvcnk7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gQSB0ZXN0IGNhc2UgZm9yIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5BcmVhIExhYmVsIFZhbHVlPC9iPjwvZW0+Jy4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQGdlbmVyYXRlZAorICovCitAU3VwcHJlc3NXYXJuaW5ncygiYWxsIikKK3B1YmxpYyBjbGFzcyBBcmVhTGFiZWxWYWx1ZVRlc3QgZXh0ZW5kcyBUZXN0Q2FzZSB7CisKKwkvKioKKwkgKiBUaGUgdGVzdCBhcmVhIHZhbHVlIChrbV4yKQorCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgZG91YmxlIFRFU1RfQVJFQV9WQUxVRSA9IDE7CisKKwkvKioKKwkgKiBUaGUgZml4dHVyZSBmb3IgdGhpcyBBcmVhIExhYmVsIFZhbHVlIHRlc3QgY2FzZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgQXJlYUxhYmVsVmFsdWUgZml4dHVyZSA9IG51bGw7CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBwYXJhbSBhcmdzCisJICogCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKKwkJVGVzdFJ1bm5lci5ydW4oQXJlYUxhYmVsVmFsdWVUZXN0LmNsYXNzKTsKKwl9CisKKwkvKioKKwkgKiBDb25zdHJ1Y3RzIGEgbmV3IEFyZWEgTGFiZWwgVmFsdWUgdGVzdCBjYXNlIHdpdGggdGhlIGdpdmVuIG5hbWUuIDwhLS0KKwkgKiBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAcGFyYW0gbmFtZQorCSAqIAorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQXJlYUxhYmVsVmFsdWVUZXN0KFN0cmluZyBuYW1lKSB7CisJCXN1cGVyKG5hbWUpOworCX0KKworCS8qKgorCSAqIFNldHMgdGhlIGZpeHR1cmUgZm9yIHRoaXMgQXJlYSBMYWJlbCBWYWx1ZSB0ZXN0IGNhc2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYworCSAqIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgc2V0Rml4dHVyZShBcmVhTGFiZWxWYWx1ZSBmaXh0dXJlKSB7CisJCXRoaXMuZml4dHVyZSA9IGZpeHR1cmU7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgZml4dHVyZSBmb3IgdGhpcyBBcmVhIExhYmVsIFZhbHVlIHRlc3QgY2FzZS4gPCEtLQorCSAqIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIEFyZWFMYWJlbFZhbHVlIGdldEZpeHR1cmUoKSB7CisJCXJldHVybiBmaXh0dXJlOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBzZWUganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlI3NldFVwKCkKKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCXByb3RlY3RlZCB2b2lkIHNldFVwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCXNldEZpeHR1cmUoY3JlYXRlRml4dHVyZSgpKTsKKwl9CisKKwkvKioKKwkgKiBAcmV0dXJuIGNyZWF0ZSBhbiBpbml0aWFsaXplZCBBcmVhTGFiZWxWYWx1ZQorCSAqIEBzZWUgI1RFU1RfQVJFQV9WQUxVRQorCSAqLworCXB1YmxpYyBzdGF0aWMgQXJlYUxhYmVsVmFsdWUgY3JlYXRlRml4dHVyZSgpIHsKKwkJZmluYWwgQXJlYUxhYmVsVmFsdWUgcmV0VmFsdWUgPSBMYWJlbHNGYWN0b3J5LmVJTlNUQU5DRQorCQkJCS5jcmVhdGVBcmVhTGFiZWxWYWx1ZSgpOworCisJCXJldFZhbHVlLnNldEFyZWEoVEVTVF9BUkVBX1ZBTFVFKTsKKworCQlyZXR1cm4gcmV0VmFsdWU7CisJfSAvLyBjcmVhdGVGaXh0dXJlCisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZSN0ZWFyRG93bigpCisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIHRlYXJEb3duKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCXNldEZpeHR1cmUobnVsbCk7CisJfQorCisJLyoqCisJICogVGVzdCB0aGF0IHRoZSBmaXh0dXJlIGlzIHNhbmUKKwkgKi8KKwlwdWJsaWMgdm9pZCB0ZXN0Rml4dHVyZVNhbml0eSgpIHsKKwkJZmluYWwgQXJlYUxhYmVsVmFsdWUgYXJlYUxhYmVsVmFsdWUgPSBnZXRGaXh0dXJlKCk7CisJCWFzc2VydFRydWUoYXJlYUxhYmVsVmFsdWUuc2FuZSgpKTsKKwkJYXNzZXJ0VHJ1ZShhcmVhTGFiZWxWYWx1ZS5nZXRBcmVhKCkgPT0gVEVTVF9BUkVBX1ZBTFVFKTsKKwl9IC8vIHRlc3RGaXh0dXJlU2FuaXR5Cit9IC8vIEFyZWFMYWJlbFZhbHVlVGVzdApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kZWZpbml0aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy9sYWJlbHMvdGVzdHMvQ29tbW9uQm9yZGVyUmVsYXRpb25zaGlwTGFiZWxUZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL2xhYmVscy90ZXN0cy9Db21tb25Cb3JkZXJSZWxhdGlvbnNoaXBMYWJlbFRlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNmYxNzZmCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kZWZpbml0aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy9sYWJlbHMvdGVzdHMvQ29tbW9uQm9yZGVyUmVsYXRpb25zaGlwTGFiZWxUZXN0LmphdmEKQEAgLTAsMCArMSw4MyBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy50ZXN0czsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNiwgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworaW1wb3J0IGp1bml0LnRleHR1aS5UZXN0UnVubmVyOworCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuQ29tbW9uQm9yZGVyUmVsYXRpb25zaGlwTGFiZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuTGFiZWxzRmFjdG9yeTsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogQSB0ZXN0IGNhc2UgZm9yIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5Db21tb24gQm9yZGVyIFJlbGF0aW9uc2hpcCBMYWJlbDwvYj48L2VtPicuCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBnZW5lcmF0ZWQKKyAqLworQFN1cHByZXNzV2FybmluZ3MoImFsbCIpCitwdWJsaWMgY2xhc3MgQ29tbW9uQm9yZGVyUmVsYXRpb25zaGlwTGFiZWxUZXN0IGV4dGVuZHMgUGh5c2ljYWxSZWxhdGlvbnNoaXBMYWJlbFRlc3QgeworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKKwkJVGVzdFJ1bm5lci5ydW4oQ29tbW9uQm9yZGVyUmVsYXRpb25zaGlwTGFiZWxUZXN0LmNsYXNzKTsKKwl9CisKKwkvKioKKwkgKiBDb25zdHJ1Y3RzIGEgbmV3IENvbW1vbiBCb3JkZXIgUmVsYXRpb25zaGlwIExhYmVsIHRlc3QgY2FzZSB3aXRoIHRoZSBnaXZlbiBuYW1lLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBDb21tb25Cb3JkZXJSZWxhdGlvbnNoaXBMYWJlbFRlc3QoU3RyaW5nIG5hbWUpIHsKKwkJc3VwZXIobmFtZSk7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgZml4dHVyZSBmb3IgdGhpcyBDb21tb24gQm9yZGVyIFJlbGF0aW9uc2hpcCBMYWJlbCB0ZXN0IGNhc2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIENvbW1vbkJvcmRlclJlbGF0aW9uc2hpcExhYmVsIGdldEZpeHR1cmUoKSB7CisJCXJldHVybiAoQ29tbW9uQm9yZGVyUmVsYXRpb25zaGlwTGFiZWwpZml4dHVyZTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlI3NldFVwKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgc2V0VXAoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJc2V0Rml4dHVyZShMYWJlbHNGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVDb21tb25Cb3JkZXJSZWxhdGlvbnNoaXBMYWJlbCgpKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlI3RlYXJEb3duKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgdGVhckRvd24oKSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJc2V0Rml4dHVyZShudWxsKTsKKwl9CisKKwlwdWJsaWMgdm9pZCB0ZXN0Rml4dHVyZVNhbml0eSgpIHsKKwkJYXNzZXJ0VHJ1ZShnZXRGaXh0dXJlKCkuc2FuZSgpKTsKKwl9Cit9IC8vQ29tbW9uQm9yZGVyUmVsYXRpb25zaGlwTGFiZWxUZXN0CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL2xhYmVscy90ZXN0cy9Db21tb25Cb3JkZXJSZWxhdGlvbnNoaXBMYWJlbFZhbHVlVGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kZWZpbml0aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy9sYWJlbHMvdGVzdHMvQ29tbW9uQm9yZGVyUmVsYXRpb25zaGlwTGFiZWxWYWx1ZVRlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yOWJkN2UxCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kZWZpbml0aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy9sYWJlbHMvdGVzdHMvQ29tbW9uQm9yZGVyUmVsYXRpb25zaGlwTGFiZWxWYWx1ZVRlc3QuamF2YQpAQCAtMCwwICsxLDg2IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLnRlc3RzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA2LCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCitpbXBvcnQganVuaXQudGV4dHVpLlRlc3RSdW5uZXI7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5Db21tb25Cb3JkZXJSZWxhdGlvbnNoaXBMYWJlbFZhbHVlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLkxhYmVsc0ZhY3Rvcnk7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIEEgdGVzdCBjYXNlIGZvciB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+Q29tbW9uIEJvcmRlciBSZWxhdGlvbnNoaXAgTGFiZWwgVmFsdWU8L2I+PC9lbT4nLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK0BTdXBwcmVzc1dhcm5pbmdzKCJhbGwiKQorcHVibGljIGNsYXNzIENvbW1vbkJvcmRlclJlbGF0aW9uc2hpcExhYmVsVmFsdWVUZXN0IGV4dGVuZHMgUGh5c2ljYWxSZWxhdGlvbnNoaXBMYWJlbFZhbHVlVGVzdCB7CisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgeworCQlUZXN0UnVubmVyLnJ1bihDb21tb25Cb3JkZXJSZWxhdGlvbnNoaXBMYWJlbFZhbHVlVGVzdC5jbGFzcyk7CisJfQorCisJLyoqCisJICogQ29uc3RydWN0cyBhIG5ldyBDb21tb24gQm9yZGVyIFJlbGF0aW9uc2hpcCBMYWJlbCBWYWx1ZSB0ZXN0IGNhc2Ugd2l0aCB0aGUgZ2l2ZW4gbmFtZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQ29tbW9uQm9yZGVyUmVsYXRpb25zaGlwTGFiZWxWYWx1ZVRlc3QoU3RyaW5nIG5hbWUpIHsKKwkJc3VwZXIobmFtZSk7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgZml4dHVyZSBmb3IgdGhpcyBDb21tb24gQm9yZGVyIFJlbGF0aW9uc2hpcCBMYWJlbCBWYWx1ZSB0ZXN0IGNhc2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIENvbW1vbkJvcmRlclJlbGF0aW9uc2hpcExhYmVsVmFsdWUgZ2V0Rml4dHVyZSgpIHsKKwkJcmV0dXJuIChDb21tb25Cb3JkZXJSZWxhdGlvbnNoaXBMYWJlbFZhbHVlKWZpeHR1cmU7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZSNzZXRVcCgpCisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIHNldFVwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCXNldEZpeHR1cmUoTGFiZWxzRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlQ29tbW9uQm9yZGVyUmVsYXRpb25zaGlwTGFiZWxWYWx1ZSgpKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlI3RlYXJEb3duKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgdGVhckRvd24oKSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJc2V0Rml4dHVyZShudWxsKTsKKwl9CisKKwkvKioKKwkgKiBUZXN0IHRoZSBzYW5pdHkgb2YgdGhlIGZpeHR1cmUuCisJICovCisJcHVibGljIHZvaWQgdGVzdEZpeHR1cmVTYW5pdHkoKSB7CisJCWFzc2VydFRydWUoZ2V0Rml4dHVyZSgpLnNhbmUoKSk7CisJfQorfSAvL0NvbW1vbkJvcmRlclJlbGF0aW9uc2hpcExhYmVsVmFsdWVUZXN0CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL2xhYmVscy90ZXN0cy9EZWZpbml0aW9uc0FsbFRlc3RzLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL2xhYmVscy90ZXN0cy9EZWZpbml0aW9uc0FsbFRlc3RzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODIzZGIxMwotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvbGFiZWxzL3Rlc3RzL0RlZmluaXRpb25zQWxsVGVzdHMuamF2YQpAQCAtMCwwICsxLDcyIEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLnRlc3RzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0OworaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0U3VpdGU7CitpbXBvcnQganVuaXQudGV4dHVpLlRlc3RSdW5uZXI7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLm5vZGVzLnRlc3RzLk5vZGVzVGVzdHM7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gQSB0ZXN0IHN1aXRlIGZvciB0aGUgJzxlbT48Yj5EZWZpbml0aW9uczwvYj48L2VtPicKKyAqIG1vZGVsLiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIERlZmluaXRpb25zQWxsVGVzdHMgZXh0ZW5kcyBUZXN0U3VpdGUgeworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIGNvcHlyaWdodCA9ICIiOworCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAcGFyYW0gYXJncworCSAqIAorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CisJCVRlc3RSdW5uZXIucnVuKHN1aXRlKCkpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogCisJICogQHJldHVybgorCSAqIAorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgc3RhdGljIFRlc3Qgc3VpdGUoKSB7CisJCVRlc3RTdWl0ZSBzdWl0ZSA9IG5ldyBEZWZpbml0aW9uc0FsbFRlc3RzKCJEZWZpbml0aW9ucyBUZXN0cyIpOworCQlzdWl0ZS5hZGRUZXN0KExhYmVsc1Rlc3RzLnN1aXRlKCkpOworCQlzdWl0ZS5hZGRUZXN0KE5vZGVzVGVzdHMuc3VpdGUoKSk7CisJCXJldHVybiBzdWl0ZTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBwYXJhbSBuYW1lCisJICogCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBEZWZpbml0aW9uc0FsbFRlc3RzKFN0cmluZyBuYW1lKSB7CisJCXN1cGVyKG5hbWUpOworCX0KKworfSAvLyBEZWZpbml0aW9uc0FsbFRlc3RzCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL2xhYmVscy90ZXN0cy9FYXJ0aFNjaWVuY2VMYWJlbFRlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvbGFiZWxzL3Rlc3RzL0VhcnRoU2NpZW5jZUxhYmVsVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIzZTQ5ODEKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL2xhYmVscy90ZXN0cy9FYXJ0aFNjaWVuY2VMYWJlbFRlc3QuamF2YQpAQCAtMCwwICsxLDExNiBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy50ZXN0czsNCisNCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiANCisgKiBDb3B5cmlnaHQgKGMpIDIwMTEgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuIA0KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgDQorICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wIA0KKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0IA0KKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sIA0KKyAqIA0KKyAqIENvbnRyaWJ1dG9yczogDQorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiANCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCisNCitpbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOw0KK2ltcG9ydCBqdW5pdC50ZXh0dWkuVGVzdFJ1bm5lcjsNCisNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuRWFydGhTY2llbmNlTGFiZWw7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLkxhYmVsc0ZhY3Rvcnk7DQorDQorLyoqDQorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisgKiBBIHRlc3QgY2FzZSBmb3IgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPkVhcnRoIFNjaWVuY2UgTGFiZWw8L2I+PC9lbT4nLg0KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKyAqIDxwPg0KKyAqIFRoZSBmb2xsb3dpbmcgZmVhdHVyZXMgYXJlIHRlc3RlZDoNCisgKiA8dWw+DQorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLkVhcnRoU2NpZW5jZUxhYmVsI2dldEN1cnJlbnRFYXJ0aFNjaWVuY2VWYWx1ZSgpIDxlbT5DdXJyZW50IEVhcnRoIFNjaWVuY2UgVmFsdWU8L2VtPn08L2xpPg0KKyAqIDwvdWw+DQorICogPC9wPg0KKyAqIEBnZW5lcmF0ZWQNCisgKi8NCitwdWJsaWMgY2xhc3MgRWFydGhTY2llbmNlTGFiZWxUZXN0IGV4dGVuZHMgVGVzdENhc2Ugew0KKw0KKwkvKioNCisJICogVGhlIGZpeHR1cmUgZm9yIHRoaXMgRWFydGggU2NpZW5jZSBMYWJlbCB0ZXN0IGNhc2UuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgRWFydGhTY2llbmNlTGFiZWwgZml4dHVyZSA9IG51bGw7DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgew0KKwkJVGVzdFJ1bm5lci5ydW4oRWFydGhTY2llbmNlTGFiZWxUZXN0LmNsYXNzKTsNCisJfQ0KKw0KKwkvKioNCisJICogQ29uc3RydWN0cyBhIG5ldyBFYXJ0aCBTY2llbmNlIExhYmVsIHRlc3QgY2FzZSB3aXRoIHRoZSBnaXZlbiBuYW1lLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIEVhcnRoU2NpZW5jZUxhYmVsVGVzdChTdHJpbmcgbmFtZSkgew0KKwkJc3VwZXIobmFtZSk7DQorCX0NCisNCisJLyoqDQorCSAqIFNldHMgdGhlIGZpeHR1cmUgZm9yIHRoaXMgRWFydGggU2NpZW5jZSBMYWJlbCB0ZXN0IGNhc2UuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgdm9pZCBzZXRGaXh0dXJlKEVhcnRoU2NpZW5jZUxhYmVsIGZpeHR1cmUpIHsNCisJCXRoaXMuZml4dHVyZSA9IGZpeHR1cmU7DQorCX0NCisNCisJLyoqDQorCSAqIFJldHVybnMgdGhlIGZpeHR1cmUgZm9yIHRoaXMgRWFydGggU2NpZW5jZSBMYWJlbCB0ZXN0IGNhc2UuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgRWFydGhTY2llbmNlTGFiZWwgZ2V0Rml4dHVyZSgpIHsNCisJCXJldHVybiBmaXh0dXJlOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHNlZSBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2Ujc2V0VXAoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlAT3ZlcnJpZGUNCisJcHJvdGVjdGVkIHZvaWQgc2V0VXAoKSB0aHJvd3MgRXhjZXB0aW9uIHsNCisJCXNldEZpeHR1cmUoTGFiZWxzRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlRWFydGhTY2llbmNlTGFiZWwoKSk7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAc2VlIGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZSN0ZWFyRG93bigpDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCUBPdmVycmlkZQ0KKwlwcm90ZWN0ZWQgdm9pZCB0ZWFyRG93bigpIHRocm93cyBFeGNlcHRpb24gew0KKwkJc2V0Rml4dHVyZShudWxsKTsNCisJfQ0KKw0KKwkvKioNCisJICogVGVzdHMgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuRWFydGhTY2llbmNlTGFiZWwjZ2V0Q3VycmVudEVhcnRoU2NpZW5jZVZhbHVlKCkgPGVtPkN1cnJlbnQgRWFydGggU2NpZW5jZSBWYWx1ZTwvZW0+fScgZmVhdHVyZSBnZXR0ZXIuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLkVhcnRoU2NpZW5jZUxhYmVsI2dldEN1cnJlbnRFYXJ0aFNjaWVuY2VWYWx1ZSgpDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyB2b2lkIHRlc3RHZXRDdXJyZW50RWFydGhTY2llbmNlVmFsdWUoKSB7DQorCQkvLyBUT0RPOiBpbXBsZW1lbnQgdGhpcyBmZWF0dXJlIGdldHRlciB0ZXN0IG1ldGhvZA0KKwkJLy8gRW5zdXJlIHRoYXQgeW91IHJlbW92ZSBAZ2VuZXJhdGVkIG9yIG1hcmsgaXQgQGdlbmVyYXRlZCBOT1QNCisJCWZhaWwoKTsNCisJfQ0KKw0KK30gLy9FYXJ0aFNjaWVuY2VMYWJlbFRlc3QNCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL2xhYmVscy90ZXN0cy9FYXJ0aFNjaWVuY2VMYWJlbFZhbHVlVGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kZWZpbml0aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy9sYWJlbHMvdGVzdHMvRWFydGhTY2llbmNlTGFiZWxWYWx1ZVRlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NDM2Y2M4Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kZWZpbml0aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy9sYWJlbHMvdGVzdHMvRWFydGhTY2llbmNlTGFiZWxWYWx1ZVRlc3QuamF2YQpAQCAtMCwwICsxLDk3IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLnRlc3RzOw0KKw0KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIA0KKyAqIENvcHlyaWdodCAoYykgMjAxMSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4gDQorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyANCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgDQorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQgDQorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwgDQorICogDQorICogQ29udHJpYnV0b3JzOiANCisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIA0KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KKw0KK2ltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7DQoraW1wb3J0IGp1bml0LnRleHR1aS5UZXN0UnVubmVyOw0KKw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5FYXJ0aFNjaWVuY2VMYWJlbFZhbHVlOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5MYWJlbHNGYWN0b3J5Ow0KKw0KKy8qKg0KKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorICogQSB0ZXN0IGNhc2UgZm9yIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5FYXJ0aCBTY2llbmNlIExhYmVsIFZhbHVlPC9iPjwvZW0+Jy4NCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisgKiBAZ2VuZXJhdGVkDQorICovDQorcHVibGljIGNsYXNzIEVhcnRoU2NpZW5jZUxhYmVsVmFsdWVUZXN0IGV4dGVuZHMgVGVzdENhc2Ugew0KKw0KKwkvKioNCisJICogVGhlIGZpeHR1cmUgZm9yIHRoaXMgRWFydGggU2NpZW5jZSBMYWJlbCBWYWx1ZSB0ZXN0IGNhc2UuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgRWFydGhTY2llbmNlTGFiZWxWYWx1ZSBmaXh0dXJlID0gbnVsbDsNCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7DQorCQlUZXN0UnVubmVyLnJ1bihFYXJ0aFNjaWVuY2VMYWJlbFZhbHVlVGVzdC5jbGFzcyk7DQorCX0NCisNCisJLyoqDQorCSAqIENvbnN0cnVjdHMgYSBuZXcgRWFydGggU2NpZW5jZSBMYWJlbCBWYWx1ZSB0ZXN0IGNhc2Ugd2l0aCB0aGUgZ2l2ZW4gbmFtZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBFYXJ0aFNjaWVuY2VMYWJlbFZhbHVlVGVzdChTdHJpbmcgbmFtZSkgew0KKwkJc3VwZXIobmFtZSk7DQorCX0NCisNCisJLyoqDQorCSAqIFNldHMgdGhlIGZpeHR1cmUgZm9yIHRoaXMgRWFydGggU2NpZW5jZSBMYWJlbCBWYWx1ZSB0ZXN0IGNhc2UuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgdm9pZCBzZXRGaXh0dXJlKEVhcnRoU2NpZW5jZUxhYmVsVmFsdWUgZml4dHVyZSkgew0KKwkJdGhpcy5maXh0dXJlID0gZml4dHVyZTsNCisJfQ0KKw0KKwkvKioNCisJICogUmV0dXJucyB0aGUgZml4dHVyZSBmb3IgdGhpcyBFYXJ0aCBTY2llbmNlIExhYmVsIFZhbHVlIHRlc3QgY2FzZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCBFYXJ0aFNjaWVuY2VMYWJlbFZhbHVlIGdldEZpeHR1cmUoKSB7DQorCQlyZXR1cm4gZml4dHVyZTsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBzZWUganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlI3NldFVwKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJQE92ZXJyaWRlDQorCXByb3RlY3RlZCB2b2lkIHNldFVwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7DQorCQlzZXRGaXh0dXJlKExhYmVsc0ZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZUVhcnRoU2NpZW5jZUxhYmVsVmFsdWUoKSk7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAc2VlIGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZSN0ZWFyRG93bigpDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCUBPdmVycmlkZQ0KKwlwcm90ZWN0ZWQgdm9pZCB0ZWFyRG93bigpIHRocm93cyBFeGNlcHRpb24gew0KKwkJc2V0Rml4dHVyZShudWxsKTsNCisJfQ0KKw0KK30gLy9FYXJ0aFNjaWVuY2VMYWJlbFZhbHVlVGVzdA0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvbGFiZWxzL3Rlc3RzL0xhYmVsc1Rlc3RzLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL2xhYmVscy90ZXN0cy9MYWJlbHNUZXN0cy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk0ZjQ1ZWMKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL2xhYmVscy90ZXN0cy9MYWJlbHNUZXN0cy5qYXZhCkBAIC0wLDAgKzEsNzYgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMudGVzdHM7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3Q7CitpbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RTdWl0ZTsKK2ltcG9ydCBqdW5pdC50ZXh0dWkuVGVzdFJ1bm5lcjsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiBBIHRlc3Qgc3VpdGUgZm9yIHRoZSAnPGVtPjxiPmxhYmVsczwvYj48L2VtPicKKyAqIHBhY2thZ2UuIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgTGFiZWxzVGVzdHMgZXh0ZW5kcyBUZXN0U3VpdGUgeworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogCisJICogQHBhcmFtIGFyZ3MKKwkgKiAKKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgeworCQlUZXN0UnVubmVyLnJ1bihzdWl0ZSgpKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEByZXR1cm4KKwkgKiAKKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHN0YXRpYyBUZXN0IHN1aXRlKCkgeworCQlUZXN0U3VpdGUgc3VpdGUgPSBuZXcgTGFiZWxzVGVzdHMoImxhYmVscyBUZXN0cyIpOyAvLyROT04tTkxTLTEkCisJCXN1aXRlLmFkZFRlc3RTdWl0ZShBcmVhTGFiZWxUZXN0LmNsYXNzKTsKKwkJc3VpdGUuYWRkVGVzdFN1aXRlKEFyZWFMYWJlbFZhbHVlVGVzdC5jbGFzcyk7CisJCXN1aXRlLmFkZFRlc3RTdWl0ZShDb21tb25Cb3JkZXJSZWxhdGlvbnNoaXBMYWJlbFRlc3QuY2xhc3MpOworCQlzdWl0ZS5hZGRUZXN0U3VpdGUoQ29tbW9uQm9yZGVyUmVsYXRpb25zaGlwTGFiZWxWYWx1ZVRlc3QuY2xhc3MpOworCQlzdWl0ZS5hZGRUZXN0U3VpdGUoUG9wdWxhdGlvbkxhYmVsVGVzdC5jbGFzcyk7CisJCXN1aXRlLmFkZFRlc3RTdWl0ZShQb3B1bGF0aW9uTGFiZWxWYWx1ZVRlc3QuY2xhc3MpOworCQlzdWl0ZS5hZGRUZXN0U3VpdGUoUmVsYXRpdmVQaHlzaWNhbFJlbGF0aW9uc2hpcExhYmVsVGVzdC5jbGFzcyk7CisJCXN1aXRlLmFkZFRlc3RTdWl0ZShSZWxhdGl2ZVBoeXNpY2FsUmVsYXRpb25zaGlwTGFiZWxWYWx1ZVRlc3QuY2xhc3MpOworCQlzdWl0ZS5hZGRUZXN0U3VpdGUoVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxUZXN0LmNsYXNzKTsKKwkJc3VpdGUuYWRkVGVzdFN1aXRlKFRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsVmFsdWVUZXN0LmNsYXNzKTsKKwkJc3VpdGUuYWRkVGVzdFN1aXRlKFBoeXNpY2FsUmVsYXRpb25zaGlwTGFiZWxWYWx1ZVRlc3QuY2xhc3MpOworCQlzdWl0ZS5hZGRUZXN0U3VpdGUoUm9hZFRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsVGVzdC5jbGFzcyk7CisJCXN1aXRlLmFkZFRlc3RTdWl0ZShSb2FkVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxWYWx1ZVRlc3QuY2xhc3MpOworCQlzdWl0ZS5hZGRUZXN0U3VpdGUoRWFydGhTY2llbmNlTGFiZWxUZXN0LmNsYXNzKTsKKwkJc3VpdGUuYWRkVGVzdFN1aXRlKEVhcnRoU2NpZW5jZUxhYmVsVmFsdWVUZXN0LmNsYXNzKTsKKwkJcmV0dXJuIHN1aXRlOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogCisJICogQHBhcmFtIG5hbWUKKwkgKiAKKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIExhYmVsc1Rlc3RzKFN0cmluZyBuYW1lKSB7CisJCXN1cGVyKG5hbWUpOworCX0KKworfSAvLyBMYWJlbHNUZXN0cwpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kZWZpbml0aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy9sYWJlbHMvdGVzdHMvUGh5c2ljYWxSZWxhdGlvbnNoaXBMYWJlbFRlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvbGFiZWxzL3Rlc3RzL1BoeXNpY2FsUmVsYXRpb25zaGlwTGFiZWxUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTA5MWQxOAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvbGFiZWxzL3Rlc3RzL1BoeXNpY2FsUmVsYXRpb25zaGlwTGFiZWxUZXN0LmphdmEKQEAgLTAsMCArMSw2NCBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy50ZXN0czsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNiwgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKKworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLlBoeXNpY2FsUmVsYXRpb25zaGlwTGFiZWw7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIEEgdGVzdCBjYXNlIGZvciB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+UGh5c2ljYWwgUmVsYXRpb25zaGlwIExhYmVsPC9iPjwvZW0+Jy4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgYWJzdHJhY3QgY2xhc3MgUGh5c2ljYWxSZWxhdGlvbnNoaXBMYWJlbFRlc3QgZXh0ZW5kcyBUZXN0Q2FzZSB7CisJLyoqCisJICogVGhlIGZpeHR1cmUgZm9yIHRoaXMgUGh5c2ljYWwgUmVsYXRpb25zaGlwIExhYmVsIHRlc3QgY2FzZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgUGh5c2ljYWxSZWxhdGlvbnNoaXBMYWJlbCBmaXh0dXJlID0gbnVsbDsKKworCS8qKgorCSAqIENvbnN0cnVjdHMgYSBuZXcgUGh5c2ljYWwgUmVsYXRpb25zaGlwIExhYmVsIHRlc3QgY2FzZSB3aXRoIHRoZSBnaXZlbiBuYW1lLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBQaHlzaWNhbFJlbGF0aW9uc2hpcExhYmVsVGVzdChTdHJpbmcgbmFtZSkgeworCQlzdXBlcihuYW1lKTsKKwl9CisKKwkvKioKKwkgKiBTZXRzIHRoZSBmaXh0dXJlIGZvciB0aGlzIFBoeXNpY2FsIFJlbGF0aW9uc2hpcCBMYWJlbCB0ZXN0IGNhc2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgc2V0Rml4dHVyZShQaHlzaWNhbFJlbGF0aW9uc2hpcExhYmVsIGZpeHR1cmUpIHsKKwkJdGhpcy5maXh0dXJlID0gZml4dHVyZTsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBmaXh0dXJlIGZvciB0aGlzIFBoeXNpY2FsIFJlbGF0aW9uc2hpcCBMYWJlbCB0ZXN0IGNhc2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIFBoeXNpY2FsUmVsYXRpb25zaGlwTGFiZWwgZ2V0Rml4dHVyZSgpIHsKKwkJcmV0dXJuIGZpeHR1cmU7CisJfQorCit9IC8vUGh5c2ljYWxSZWxhdGlvbnNoaXBMYWJlbFRlc3QKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvbGFiZWxzL3Rlc3RzL1BoeXNpY2FsUmVsYXRpb25zaGlwTGFiZWxWYWx1ZVRlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvbGFiZWxzL3Rlc3RzL1BoeXNpY2FsUmVsYXRpb25zaGlwTGFiZWxWYWx1ZVRlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hOTM4YzU4Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kZWZpbml0aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy9sYWJlbHMvdGVzdHMvUGh5c2ljYWxSZWxhdGlvbnNoaXBMYWJlbFZhbHVlVGVzdC5qYXZhCkBAIC0wLDAgKzEsMTAzIEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLnRlc3RzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA2LCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKK2ltcG9ydCBqdW5pdC50ZXh0dWkuVGVzdFJ1bm5lcjsKKworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLkxhYmVsc0ZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuUGh5c2ljYWxSZWxhdGlvbnNoaXBMYWJlbFZhbHVlOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiBBIHRlc3QgY2FzZSBmb3IgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPlBoeXNpY2FsIFJlbGF0aW9uc2hpcCBMYWJlbCBWYWx1ZTwvYj48L2VtPicuCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBnZW5lcmF0ZWQKKyAqLworQFN1cHByZXNzV2FybmluZ3MoImFsbCIpCitwdWJsaWMgY2xhc3MgUGh5c2ljYWxSZWxhdGlvbnNoaXBMYWJlbFZhbHVlVGVzdCBleHRlbmRzIFRlc3RDYXNlIHsKKwkvKioKKwkgKiBUaGUgZml4dHVyZSBmb3IgdGhpcyBQaHlzaWNhbCBSZWxhdGlvbnNoaXAgTGFiZWwgVmFsdWUgdGVzdCBjYXNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBQaHlzaWNhbFJlbGF0aW9uc2hpcExhYmVsVmFsdWUgZml4dHVyZSA9IG51bGw7CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CisJCVRlc3RSdW5uZXIucnVuKFBoeXNpY2FsUmVsYXRpb25zaGlwTGFiZWxWYWx1ZVRlc3QuY2xhc3MpOworCX0KKworCS8qKgorCSAqIENvbnN0cnVjdHMgYSBuZXcgUGh5c2ljYWwgUmVsYXRpb25zaGlwIExhYmVsIFZhbHVlIHRlc3QgY2FzZSB3aXRoIHRoZSBnaXZlbiBuYW1lLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBQaHlzaWNhbFJlbGF0aW9uc2hpcExhYmVsVmFsdWVUZXN0KFN0cmluZyBuYW1lKSB7CisJCXN1cGVyKG5hbWUpOworCX0KKworCS8qKgorCSAqIFNldHMgdGhlIGZpeHR1cmUgZm9yIHRoaXMgUGh5c2ljYWwgUmVsYXRpb25zaGlwIExhYmVsIFZhbHVlIHRlc3QgY2FzZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBzZXRGaXh0dXJlKFBoeXNpY2FsUmVsYXRpb25zaGlwTGFiZWxWYWx1ZSBmaXh0dXJlKSB7CisJCXRoaXMuZml4dHVyZSA9IGZpeHR1cmU7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgZml4dHVyZSBmb3IgdGhpcyBQaHlzaWNhbCBSZWxhdGlvbnNoaXAgTGFiZWwgVmFsdWUgdGVzdCBjYXNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBQaHlzaWNhbFJlbGF0aW9uc2hpcExhYmVsVmFsdWUgZ2V0Rml4dHVyZSgpIHsKKwkJcmV0dXJuIGZpeHR1cmU7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZSNzZXRVcCgpCisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIHNldFVwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCXNldEZpeHR1cmUoTGFiZWxzRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlUGh5c2ljYWxSZWxhdGlvbnNoaXBMYWJlbFZhbHVlKCkpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2UjdGVhckRvd24oKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgdm9pZCB0ZWFyRG93bigpIHRocm93cyBFeGNlcHRpb24geworCQlzZXRGaXh0dXJlKG51bGwpOworCX0KKworCS8qKgorCSAqIFRlc3QgdGhhdCB0aGUgZml4dHVyZSBpcyBzYW5lLgorCSAqLworCXB1YmxpYyB2b2lkIHRlc3RGaXh0dXJlU2FuaXR5KCkgeworCQlhc3NlcnRUcnVlKGdldEZpeHR1cmUoKS5zYW5lKCkpOworCX0KK30gLy9QaHlzaWNhbFJlbGF0aW9uc2hpcExhYmVsVmFsdWVUZXN0CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL2xhYmVscy90ZXN0cy9Qb3B1bGF0aW9uTGFiZWxUZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL2xhYmVscy90ZXN0cy9Qb3B1bGF0aW9uTGFiZWxUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmE4OTZiMQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvbGFiZWxzL3Rlc3RzL1BvcHVsYXRpb25MYWJlbFRlc3QuamF2YQpAQCAtMCwwICsxLDE1NiBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy50ZXN0czsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNiwgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7CitpbXBvcnQganVuaXQudGV4dHVpLlRlc3RSdW5uZXI7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5MYWJlbHNGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLlBvcHVsYXRpb25MYWJlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5Qb3B1bGF0aW9uTGFiZWxWYWx1ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5pbXBsLlBvcHVsYXRpb25MYWJlbEltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5ub2Rlcy5SZWdpb247CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5ub2Rlcy50ZXN0cy5SZWdpb25UZXN0OworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IEEgdGVzdCBjYXNlIGZvciB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+UG9wdWxhdGlvbiBMYWJlbDwvYj48L2VtPicuCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIDxwPgorICogVGhlIGZvbGxvd2luZyBmZWF0dXJlcyBhcmUgdGVzdGVkOgorICogPHVsPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLlBvcHVsYXRpb25MYWJlbCNnZXRDdXJyZW50UG9wdWxhdGlvblZhbHVlKCkgPGVtPkN1cnJlbnQgUG9wdWxhdGlvbiBWYWx1ZTwvZW0+fTwvbGk+CisgKiA8L3VsPgorICogPC9wPgorICogQGdlbmVyYXRlZAorICovCitAU3VwcHJlc3NXYXJuaW5ncygiYWxsIikKK3B1YmxpYyBjbGFzcyBQb3B1bGF0aW9uTGFiZWxUZXN0IGV4dGVuZHMgVGVzdENhc2UgeworCS8qKgorCSAqIFRoZSBmaXh0dXJlIGZvciB0aGlzIFBvcHVsYXRpb24gTGFiZWwgdGVzdCBjYXNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBQb3B1bGF0aW9uTGFiZWwgZml4dHVyZSA9IG51bGw7CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBwYXJhbSBhcmdzCisJICogCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKKwkJVGVzdFJ1bm5lci5ydW4oUG9wdWxhdGlvbkxhYmVsVGVzdC5jbGFzcyk7CisJfQorCisJLyoqCisJICogQ29uc3RydWN0cyBhIG5ldyBQb3B1bGF0aW9uIExhYmVsIHRlc3QgY2FzZSB3aXRoIHRoZSBnaXZlbiBuYW1lLiA8IS0tCisJICogYmVnaW4tdXNlci1kb2MgLS0+CisJICogCisJICogQHBhcmFtIG5hbWUKKwkgKiAKKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFBvcHVsYXRpb25MYWJlbFRlc3QoU3RyaW5nIG5hbWUpIHsKKwkJc3VwZXIobmFtZSk7CisJfQorCisJLyoqCisJICogU2V0cyB0aGUgZml4dHVyZSBmb3IgdGhpcyBQb3B1bGF0aW9uIExhYmVsIHRlc3QgY2FzZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jCisJICogLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBzZXRGaXh0dXJlKFBvcHVsYXRpb25MYWJlbCBmaXh0dXJlKSB7CisJCXRoaXMuZml4dHVyZSA9IGZpeHR1cmU7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgZml4dHVyZSBmb3IgdGhpcyBQb3B1bGF0aW9uIExhYmVsIHRlc3QgY2FzZS4gPCEtLQorCSAqIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIFBvcHVsYXRpb25MYWJlbCBnZXRGaXh0dXJlKCkgeworCQlyZXR1cm4gZml4dHVyZTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAc2VlIGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZSNzZXRVcCgpCisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBzZXRVcCgpIHRocm93cyBFeGNlcHRpb24geworCQlzZXRGaXh0dXJlKGNyZWF0ZUZpeHR1cmUoKSk7CisJfSAvLyBzZXRVcAorCisJLyoqCisJICogQHJldHVybiBhIFBvcHVsYXRpb25MYWJlbCB3aXRoIGh1bWFuIHBvcHVsYXRpb24KKwkgKi8KKwlwdWJsaWMgc3RhdGljIFBvcHVsYXRpb25MYWJlbCBjcmVhdGVGaXh0dXJlKCkgeworCQlyZXR1cm4gTGFiZWxzRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlUG9wdWxhdGlvbkxhYmVsKCk7CisJfSAvLyBjcmVhdGVGaXh0dXJlCisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZSN0ZWFyRG93bigpCisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIHRlYXJEb3duKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCXNldEZpeHR1cmUobnVsbCk7CisJfQorCisJLyoqCisJICogVGVzdHMgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuUG9wdWxhdGlvbkxhYmVsI2dldEN1cnJlbnRQb3B1bGF0aW9uVmFsdWUoKSA8ZW0+Q3VycmVudCBQb3B1bGF0aW9uIFZhbHVlPC9lbT59JworCSAqIGZlYXR1cmUgZ2V0dGVyLiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLlBvcHVsYXRpb25MYWJlbCNnZXRDdXJyZW50UG9wdWxhdGlvblZhbHVlKCkKKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCXB1YmxpYyB2b2lkIHRlc3RHZXRDdXJyZW50UG9wdWxhdGlvblZhbHVlKCkgeworCQlmaW5hbCBQb3B1bGF0aW9uTGFiZWwgcG9wdWxhdGlvbkxhYmVsID0gZ2V0Rml4dHVyZSgpOworCisJCWZpbmFsIFBvcHVsYXRpb25MYWJlbFZhbHVlIHZhbHVlID0gcG9wdWxhdGlvbkxhYmVsCisJCQkJLmdldEN1cnJlbnRQb3B1bGF0aW9uVmFsdWUoKTsKKwkJYXNzZXJ0VHJ1ZSh2YWx1ZS5nZXRDb3VudCgpID09IDApOworCX0gLy8gdGVzdEdldEN1cnJlbnRQb3B1bGF0aW9uVmFsdWUKKworCS8qKgorCSAqIE1ha2Ugc3VyZSB0aGUgZml4dHVyZSBtYWtlcyBzZW5zZS4KKwkgKi8KKwlwdWJsaWMgdm9pZCB0ZXN0Rml4dHVyZSgpIHsKKwkJZmluYWwgUG9wdWxhdGlvbkxhYmVsIHBvcHVsYXRpb25MYWJlbCA9IGdldEZpeHR1cmUoKTsKKwkJYXNzZXJ0Tm90TnVsbChwb3B1bGF0aW9uTGFiZWwpOworCQlhc3NlcnRUcnVlKHBvcHVsYXRpb25MYWJlbC5zYW5lKCkpOworCQlhc3NlcnRUcnVlKHBvcHVsYXRpb25MYWJlbC5nZXRQb3B1bGF0aW9uSWRlbnRpZmllcigpLmVxdWFscygKKwkJCQlQb3B1bGF0aW9uTGFiZWwuSFVNQU4pKTsKKwkJYXNzZXJ0VHJ1ZShwb3B1bGF0aW9uTGFiZWwuZ2V0TmFtZSgpLmVxdWFscyhQb3B1bGF0aW9uTGFiZWwuSFVNQU4pKTsKKwl9IC8vIHRlc3RGaXh0dXJlCisKKwkvKioKKwkgKiBUZXN0IHRoZSB0aGUgc3RhdGljIG1ldGhvZCBnZXRQb3B1bGF0aW9uTGFiZWwgYWN0dWFsbHkgZ2V0cyB0aGUKKwkgKiBwb3B1bGF0aW9uIGxhYmVsCisJICovCisJcHVibGljIHZvaWQgdGVzdEdldFBvcHVsYXRpb25MYWJlbCgpIHsKKwkJZmluYWwgUmVnaW9uIGZpeHR1cmUgPSBSZWdpb25UZXN0LmNyZWF0ZUZpeHR1cmUoKTsKKwkJZmluYWwgUG9wdWxhdGlvbkxhYmVsIHBvcHVsYXRpb25MYWJlbCA9IFBvcHVsYXRpb25MYWJlbEltcGwKKwkJCQkuZ2V0UG9wdWxhdGlvbkxhYmVsKGNyZWF0ZUZpeHR1cmUoKS5nZXRQb3B1bGF0aW9uSWRlbnRpZmllcigpLAorCQkJCQkJZml4dHVyZSk7CisJCWFzc2VydE5vdE51bGwocG9wdWxhdGlvbkxhYmVsKTsKKwl9IC8vIHRlc3RHZXRQb3B1bGF0aW9uTGFiZWwKKworfSAvLyBQb3B1bGF0aW9uTGFiZWxUZXN0CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL2xhYmVscy90ZXN0cy9Qb3B1bGF0aW9uTGFiZWxWYWx1ZVRlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvbGFiZWxzL3Rlc3RzL1BvcHVsYXRpb25MYWJlbFZhbHVlVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUxYTAzYmEKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL2xhYmVscy90ZXN0cy9Qb3B1bGF0aW9uTGFiZWxWYWx1ZVRlc3QuamF2YQpAQCAtMCwwICsxLDExMSBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy50ZXN0czsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNiwgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKK2ltcG9ydCBqdW5pdC50ZXh0dWkuVGVzdFJ1bm5lcjsKKworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLkxhYmVsc0ZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuUG9wdWxhdGlvbkxhYmVsVmFsdWU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuaW1wbC5Qb3B1bGF0aW9uTGFiZWxWYWx1ZUltcGw7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gQSB0ZXN0IGNhc2UgZm9yIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5Qb3B1bGF0aW9uIExhYmVsIFZhbHVlPC9iPjwvZW0+Jy4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQGdlbmVyYXRlZAorICovCitAU3VwcHJlc3NXYXJuaW5ncygiYWxsIikKK3B1YmxpYyBjbGFzcyBQb3B1bGF0aW9uTGFiZWxWYWx1ZVRlc3QgZXh0ZW5kcyBUZXN0Q2FzZSB7CisJLyoqCisJICogVGhlIGZpeHR1cmUgZm9yIHRoaXMgUG9wdWxhdGlvbiBMYWJlbCBWYWx1ZSB0ZXN0IGNhc2UuIDwhLS0KKwkgKiBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogCisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBQb3B1bGF0aW9uTGFiZWxWYWx1ZSBmaXh0dXJlID0gbnVsbDsKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogCisJICogQHBhcmFtIGFyZ3MKKwkgKiAKKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgeworCQlUZXN0UnVubmVyLnJ1bihQb3B1bGF0aW9uTGFiZWxWYWx1ZVRlc3QuY2xhc3MpOworCX0KKworCS8qKgorCSAqIENvbnN0cnVjdHMgYSBuZXcgUG9wdWxhdGlvbiBMYWJlbCBWYWx1ZSB0ZXN0IGNhc2Ugd2l0aCB0aGUgZ2l2ZW4gbmFtZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBwYXJhbSBuYW1lCisJICogCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBQb3B1bGF0aW9uTGFiZWxWYWx1ZVRlc3QoU3RyaW5nIG5hbWUpIHsKKwkJc3VwZXIobmFtZSk7CisJfQorCisJLyoqCisJICogU2V0cyB0aGUgZml4dHVyZSBmb3IgdGhpcyBQb3B1bGF0aW9uIExhYmVsIFZhbHVlIHRlc3QgY2FzZS4gPCEtLQorCSAqIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgc2V0Rml4dHVyZShQb3B1bGF0aW9uTGFiZWxWYWx1ZSBmaXh0dXJlKSB7CisJCXRoaXMuZml4dHVyZSA9IGZpeHR1cmU7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgZml4dHVyZSBmb3IgdGhpcyBQb3B1bGF0aW9uIExhYmVsIFZhbHVlIHRlc3QgY2FzZS4gPCEtLQorCSAqIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIFBvcHVsYXRpb25MYWJlbFZhbHVlIGdldEZpeHR1cmUoKSB7CisJCXJldHVybiBmaXh0dXJlOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlI3NldFVwKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgc2V0VXAoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJc2V0Rml4dHVyZShMYWJlbHNGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVQb3B1bGF0aW9uTGFiZWxWYWx1ZSgpKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZSN0ZWFyRG93bigpCisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIHRlYXJEb3duKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCXNldEZpeHR1cmUobnVsbCk7CisJfQorCisJLyoqCisJICogTWFrZSBzdXJlIHRoZSBmaXh0dXJlIG1ha2VzIHNlbnNlLgorCSAqLworCXB1YmxpYyB2b2lkIHRlc3RGaXh0dXJlKCkgeworCQlmaW5hbCBQb3B1bGF0aW9uTGFiZWxWYWx1ZSBwb3B1bGF0aW9uTGFiZWxWYWx1ZSA9IGdldEZpeHR1cmUoKTsKKwkJYXNzZXJ0Tm90TnVsbChwb3B1bGF0aW9uTGFiZWxWYWx1ZSk7CisJCWFzc2VydFRydWUoKChQb3B1bGF0aW9uTGFiZWxWYWx1ZUltcGwpIHBvcHVsYXRpb25MYWJlbFZhbHVlKS5zYW5lKCkpOworCQkKKwl9IC8vIHRlc3RGaXh0dXJlCit9IC8vIFBvcHVsYXRpb25MYWJlbFZhbHVlVGVzdApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kZWZpbml0aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy9sYWJlbHMvdGVzdHMvUmVsYXRpdmVQaHlzaWNhbFJlbGF0aW9uc2hpcExhYmVsVGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kZWZpbml0aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy9sYWJlbHMvdGVzdHMvUmVsYXRpdmVQaHlzaWNhbFJlbGF0aW9uc2hpcExhYmVsVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ2ZTU2YTEKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL2xhYmVscy90ZXN0cy9SZWxhdGl2ZVBoeXNpY2FsUmVsYXRpb25zaGlwTGFiZWxUZXN0LmphdmEKQEAgLTAsMCArMSwxMDIgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMudGVzdHM7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKK2ltcG9ydCBqdW5pdC50ZXh0dWkuVGVzdFJ1bm5lcjsKKworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLkxhYmVsc0ZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuUmVsYXRpdmVQaHlzaWNhbFJlbGF0aW9uc2hpcExhYmVsOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IEEgdGVzdCBjYXNlIGZvciB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+UmVsYXRpdmUgUGh5c2ljYWwgUmVsYXRpb25zaGlwIExhYmVsPC9iPjwvZW0+Jy4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogPHA+CisgKiBUaGUgZm9sbG93aW5nIGZlYXR1cmVzIGFyZSB0ZXN0ZWQ6CisgKiA8dWw+CisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuUmVsYXRpdmVQaHlzaWNhbFJlbGF0aW9uc2hpcExhYmVsI2dldEN1cnJlbnRSZWxhdGlvbnNoaXAoKSA8ZW0+Q3VycmVudCBSZWxhdGlvbnNoaXA8L2VtPn08L2xpPgorICogPC91bD4KKyAqIDwvcD4KKyAqIEBnZW5lcmF0ZWQKKyAqLworQFN1cHByZXNzV2FybmluZ3MoImFsbCIpCitwdWJsaWMgY2xhc3MgUmVsYXRpdmVQaHlzaWNhbFJlbGF0aW9uc2hpcExhYmVsVGVzdCBleHRlbmRzCisJCVBoeXNpY2FsUmVsYXRpb25zaGlwTGFiZWxUZXN0IHsKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgeworCQlUZXN0UnVubmVyLnJ1bihSZWxhdGl2ZVBoeXNpY2FsUmVsYXRpb25zaGlwTGFiZWxUZXN0LmNsYXNzKTsKKwl9CisKKwkvKioKKwkgKiBDb25zdHJ1Y3RzIGEgbmV3IFJlbGF0aXZlIFBoeXNpY2FsIFJlbGF0aW9uc2hpcCBMYWJlbCB0ZXN0IGNhc2Ugd2l0aCB0aGUgZ2l2ZW4gbmFtZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFJlbGF0aXZlUGh5c2ljYWxSZWxhdGlvbnNoaXBMYWJlbFRlc3QoU3RyaW5nIG5hbWUpIHsKKwkJc3VwZXIobmFtZSk7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgZml4dHVyZSBmb3IgdGhpcyBSZWxhdGl2ZSBQaHlzaWNhbCBSZWxhdGlvbnNoaXAgTGFiZWwgdGVzdCBjYXNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgUmVsYXRpdmVQaHlzaWNhbFJlbGF0aW9uc2hpcExhYmVsIGdldEZpeHR1cmUoKSB7CisJCXJldHVybiAoUmVsYXRpdmVQaHlzaWNhbFJlbGF0aW9uc2hpcExhYmVsKWZpeHR1cmU7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2Ujc2V0VXAoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgdm9pZCBzZXRVcCgpIHRocm93cyBFeGNlcHRpb24geworCQlzZXRGaXh0dXJlKExhYmVsc0ZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZVJlbGF0aXZlUGh5c2ljYWxSZWxhdGlvbnNoaXBMYWJlbCgpKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZSN0ZWFyRG93bigpCisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIHRlYXJEb3duKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCXNldEZpeHR1cmUobnVsbCk7CisJfQorCisJLyoqCisJICogVGVzdHMgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuUmVsYXRpdmVQaHlzaWNhbFJlbGF0aW9uc2hpcExhYmVsI2dldEN1cnJlbnRSZWxhdGlvbnNoaXAoKSA8ZW0+Q3VycmVudCBSZWxhdGlvbnNoaXA8L2VtPn0nCisJICogZmVhdHVyZSBnZXR0ZXIuIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuUmVsYXRpdmVQaHlzaWNhbFJlbGF0aW9uc2hpcExhYmVsI2dldEN1cnJlbnRSZWxhdGlvbnNoaXAoKQorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJcHVibGljIHZvaWQgdGVzdEdldEN1cnJlbnRSZWxhdGlvbnNoaXAoKSB7CisJCWZpbmFsIFJlbGF0aXZlUGh5c2ljYWxSZWxhdGlvbnNoaXBMYWJlbCBmaXh0dXJlID0gZ2V0Rml4dHVyZSgpOworCQlhc3NlcnRUcnVlKGZpeHR1cmUuZ2V0Q3VycmVudFJlbGF0aW9uc2hpcCgpID09IGZpeHR1cmUKKwkJCQkuZ2V0Q3VycmVudFZhbHVlKCkpOworCX0gLy8gdGVzdEdldEN1cnJlbnRSZWxhdGlvbnNoaXAKKworCS8qKgorCSAqIFRlc3QgdGhhdCB0aGUgZml4dHVyZSBpcyBzYW5lLgorCSAqLworCXB1YmxpYyB2b2lkIHRlc3RGaXh0dXJlU2FuaXR5KCkgeworCQlmaW5hbCBSZWxhdGl2ZVBoeXNpY2FsUmVsYXRpb25zaGlwTGFiZWwgZml4dHVyZSA9IGdldEZpeHR1cmUoKTsKKwkJYXNzZXJ0VHJ1ZShmaXh0dXJlLnNhbmUoKSk7CisJfSAvLyB0ZXN0Rml4dHVyZVNhbml0eQorCit9IC8vIFJlbGF0aXZlUGh5c2ljYWxSZWxhdGlvbnNoaXBMYWJlbFRlc3QKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvbGFiZWxzL3Rlc3RzL1JlbGF0aXZlUGh5c2ljYWxSZWxhdGlvbnNoaXBMYWJlbFZhbHVlVGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kZWZpbml0aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy9sYWJlbHMvdGVzdHMvUmVsYXRpdmVQaHlzaWNhbFJlbGF0aW9uc2hpcExhYmVsVmFsdWVUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTM5MjdlYQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvbGFiZWxzL3Rlc3RzL1JlbGF0aXZlUGh5c2ljYWxSZWxhdGlvbnNoaXBMYWJlbFZhbHVlVGVzdC5qYXZhCkBAIC0wLDAgKzEsOTggQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMudGVzdHM7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKK2ltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7CitpbXBvcnQganVuaXQudGV4dHVpLlRlc3RSdW5uZXI7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5MYWJlbHNGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLlJlbGF0aXZlUGh5c2ljYWxSZWxhdGlvbnNoaXBMYWJlbFZhbHVlOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IEEgdGVzdCBjYXNlIGZvciB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+UmVsYXRpdmUgUGh5c2ljYWwgUmVsYXRpb25zaGlwIExhYmVsIFZhbHVlPC9iPjwvZW0+Jy4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQGdlbmVyYXRlZAorICovCitAU3VwcHJlc3NXYXJuaW5ncygiYWxsIikKK3B1YmxpYyBjbGFzcyBSZWxhdGl2ZVBoeXNpY2FsUmVsYXRpb25zaGlwTGFiZWxWYWx1ZVRlc3QgZXh0ZW5kcyBUZXN0Q2FzZSB7CisJLyoqCisJICogVGhlIGZpeHR1cmUgZm9yIHRoaXMgUmVsYXRpdmUgUGh5c2ljYWwgUmVsYXRpb25zaGlwIExhYmVsIFZhbHVlIHRlc3QgY2FzZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIFJlbGF0aXZlUGh5c2ljYWxSZWxhdGlvbnNoaXBMYWJlbFZhbHVlIGZpeHR1cmUgPSBudWxsOworCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKKwkJVGVzdFJ1bm5lci5ydW4oUmVsYXRpdmVQaHlzaWNhbFJlbGF0aW9uc2hpcExhYmVsVmFsdWVUZXN0LmNsYXNzKTsKKwl9CisKKwkvKioKKwkgKiBDb25zdHJ1Y3RzIGEgbmV3IFJlbGF0aXZlIFBoeXNpY2FsIFJlbGF0aW9uc2hpcCBMYWJlbCBWYWx1ZSB0ZXN0IGNhc2Ugd2l0aCB0aGUgZ2l2ZW4gbmFtZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFJlbGF0aXZlUGh5c2ljYWxSZWxhdGlvbnNoaXBMYWJlbFZhbHVlVGVzdChTdHJpbmcgbmFtZSkgeworCQlzdXBlcihuYW1lKTsKKwl9CisKKwkvKioKKwkgKiBTZXRzIHRoZSBmaXh0dXJlIGZvciB0aGlzIFJlbGF0aXZlIFBoeXNpY2FsIFJlbGF0aW9uc2hpcCBMYWJlbCBWYWx1ZSB0ZXN0IGNhc2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIHNldEZpeHR1cmUoUmVsYXRpdmVQaHlzaWNhbFJlbGF0aW9uc2hpcExhYmVsVmFsdWUgZml4dHVyZSkgeworCQl0aGlzLmZpeHR1cmUgPSBmaXh0dXJlOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIGZpeHR1cmUgZm9yIHRoaXMgUmVsYXRpdmUgUGh5c2ljYWwgUmVsYXRpb25zaGlwIExhYmVsIFZhbHVlIHRlc3QgY2FzZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIFJlbGF0aXZlUGh5c2ljYWxSZWxhdGlvbnNoaXBMYWJlbFZhbHVlIGdldEZpeHR1cmUoKSB7CisJCXJldHVybiBmaXh0dXJlOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlI3NldFVwKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgc2V0VXAoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJc2V0Rml4dHVyZShMYWJlbHNGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVSZWxhdGl2ZVBoeXNpY2FsUmVsYXRpb25zaGlwTGFiZWxWYWx1ZSgpKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZSN0ZWFyRG93bigpCisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIHRlYXJEb3duKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCXNldEZpeHR1cmUobnVsbCk7CisJfQorCisJLyoqCisJICogVGVzdCB0aGF0IHRoZSBmaXh0dXJlIGlzIHNhbmUuCisJICovCisJcHVibGljIHZvaWQgdGVzdEZpeHR1cmVTYW5pdHkoKSB7CisJCWZpbmFsIFJlbGF0aXZlUGh5c2ljYWxSZWxhdGlvbnNoaXBMYWJlbFZhbHVlIGZpeHR1cmUgPSBnZXRGaXh0dXJlKCk7CisJCWFzc2VydFRydWUoZml4dHVyZS5zYW5lKCkpOworCX0gLy8gdGVzdEZpeHR1cmVTYW5pdHkKKworfSAvLyBSZWxhdGl2ZVBoeXNpY2FsUmVsYXRpb25zaGlwTGFiZWxWYWx1ZVRlc3QKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvbGFiZWxzL3Rlc3RzL1JvYWRUcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbFRlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvbGFiZWxzL3Rlc3RzL1JvYWRUcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbFRlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yY2NmOWQ2Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kZWZpbml0aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy9sYWJlbHMvdGVzdHMvUm9hZFRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsVGVzdC5qYXZhCkBAIC0wLDAgKzEsODUgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMudGVzdHM7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQganVuaXQudGV4dHVpLlRlc3RSdW5uZXI7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5MYWJlbHNGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLlJvYWRUcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbDsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogQSB0ZXN0IGNhc2UgZm9yIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5Sb2FkIFRyYW5zcG9ydCBSZWxhdGlvbnNoaXAgTGFiZWw8L2I+PC9lbT4nLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK0BTdXBwcmVzc1dhcm5pbmdzKCJhbGwiKQorcHVibGljIGNsYXNzIFJvYWRUcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbFRlc3QgZXh0ZW5kcyBQaHlzaWNhbFJlbGF0aW9uc2hpcExhYmVsVGVzdCB7CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CisJCVRlc3RSdW5uZXIucnVuKFJvYWRUcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbFRlc3QuY2xhc3MpOworCX0KKworCS8qKgorCSAqIENvbnN0cnVjdHMgYSBuZXcgUm9hZCBUcmFuc3BvcnQgUmVsYXRpb25zaGlwIExhYmVsIHRlc3QgY2FzZSB3aXRoIHRoZSBnaXZlbiBuYW1lLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBSb2FkVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxUZXN0KFN0cmluZyBuYW1lKSB7CisJCXN1cGVyKG5hbWUpOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIGZpeHR1cmUgZm9yIHRoaXMgUm9hZCBUcmFuc3BvcnQgUmVsYXRpb25zaGlwIExhYmVsIHRlc3QgY2FzZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgUm9hZFRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsIGdldEZpeHR1cmUoKSB7CisJCXJldHVybiAoUm9hZFRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsKWZpeHR1cmU7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZSNzZXRVcCgpCisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIHNldFVwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCXNldEZpeHR1cmUoTGFiZWxzRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlUm9hZFRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsKCkpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2UjdGVhckRvd24oKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgdm9pZCB0ZWFyRG93bigpIHRocm93cyBFeGNlcHRpb24geworCQlzZXRGaXh0dXJlKG51bGwpOworCX0KKworCisJcHVibGljIHZvaWQgdGVzdEZpeHR1cmVTYW5pdHkoKSB7CisJCWFzc2VydFRydWUoZ2V0Rml4dHVyZSgpLnNhbmUoKSk7CisJfQorCQorfSAvL1JvYWRUcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbFRlc3QKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvbGFiZWxzL3Rlc3RzL1JvYWRUcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbFZhbHVlVGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kZWZpbml0aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy9sYWJlbHMvdGVzdHMvUm9hZFRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsVmFsdWVUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTJlYjNkNwotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvbGFiZWxzL3Rlc3RzL1JvYWRUcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbFZhbHVlVGVzdC5qYXZhCkBAIC0wLDAgKzEsODggQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMudGVzdHM7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQganVuaXQudGV4dHVpLlRlc3RSdW5uZXI7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5MYWJlbHNGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLlJvYWRUcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbFZhbHVlOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiBBIHRlc3QgY2FzZSBmb3IgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPlJvYWQgVHJhbnNwb3J0IFJlbGF0aW9uc2hpcCBMYWJlbCBWYWx1ZTwvYj48L2VtPicuCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBnZW5lcmF0ZWQKKyAqLworQFN1cHByZXNzV2FybmluZ3MoImFsbCIpCitwdWJsaWMgY2xhc3MgUm9hZFRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsVmFsdWVUZXN0IGV4dGVuZHMgUGh5c2ljYWxSZWxhdGlvbnNoaXBMYWJlbFZhbHVlVGVzdCB7CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CisJCVRlc3RSdW5uZXIucnVuKFJvYWRUcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbFZhbHVlVGVzdC5jbGFzcyk7CisJfQorCisJLyoqCisJICogQ29uc3RydWN0cyBhIG5ldyBSb2FkIFRyYW5zcG9ydCBSZWxhdGlvbnNoaXAgTGFiZWwgVmFsdWUgdGVzdCBjYXNlIHdpdGggdGhlIGdpdmVuIG5hbWUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFJvYWRUcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbFZhbHVlVGVzdChTdHJpbmcgbmFtZSkgeworCQlzdXBlcihuYW1lKTsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBmaXh0dXJlIGZvciB0aGlzIFJvYWQgVHJhbnNwb3J0IFJlbGF0aW9uc2hpcCBMYWJlbCBWYWx1ZSB0ZXN0IGNhc2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIFJvYWRUcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbFZhbHVlIGdldEZpeHR1cmUoKSB7CisJCXJldHVybiAoUm9hZFRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsVmFsdWUpZml4dHVyZTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlI3NldFVwKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgc2V0VXAoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJc2V0Rml4dHVyZShMYWJlbHNGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVSb2FkVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxWYWx1ZSgpKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlI3RlYXJEb3duKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgdGVhckRvd24oKSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJc2V0Rml4dHVyZShudWxsKTsKKwl9CisKKwkvKioKKwkgKiBUZXN0IHRoZSBzYW5pdHkgb2YgdGhlIGZpeHR1cmUuCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgdGVzdEZpeHR1cmVTYW5pdHkoKSB7CisJCWFzc2VydFRydWUoZ2V0Rml4dHVyZSgpLnNhbmUoKSk7CisJfQorCQorfSAvL1JvYWRUcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbFZhbHVlVGVzdApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kZWZpbml0aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy9sYWJlbHMvdGVzdHMvVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxUZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL2xhYmVscy90ZXN0cy9UcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbFRlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMDRlMWE3Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kZWZpbml0aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy9sYWJlbHMvdGVzdHMvVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxUZXN0LmphdmEKQEAgLTAsMCArMSwxNzcgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMudGVzdHM7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKK2ltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7CitpbXBvcnQganVuaXQudGV4dHVpLlRlc3RSdW5uZXI7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5MYWJlbHNGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLlRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC5kZWNvcmF0b3JzLkRlY29yYXRvcnNGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC5kZWNvcmF0b3JzLlRlc3RFZGdlRGVjb3JhdG9yMTsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiBBIHRlc3QgY2FzZSBmb3IgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPlRyYW5zcG9ydCBSZWxhdGlvbnNoaXAgTGFiZWw8L2I+PC9lbT4nLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiA8cD4KKyAqIFRoZSBmb2xsb3dpbmcgZmVhdHVyZXMgYXJlIHRlc3RlZDoKKyAqIDx1bD4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5UcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbCNnZXRDdXJyZW50VHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxWYWx1ZSgpIDxlbT5DdXJyZW50IFRyYW5zcG9ydCBSZWxhdGlvbnNoaXAgTGFiZWwgVmFsdWU8L2VtPn08L2xpPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLlRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsI2dldERlcGFydHVyZUNhcGFjaXR5KCkgPGVtPkRlcGFydHVyZSBDYXBhY2l0eTwvZW0+fTwvbGk+CisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWwjZ2V0Q2FwYWNpdHkoKSA8ZW0+Q2FwYWNpdHk8L2VtPn08L2xpPgorICogPC91bD4KKyAqIDwvcD4KKyAqIEBnZW5lcmF0ZWQKKyAqLworQFN1cHByZXNzV2FybmluZ3MoImFsbCIpCitwdWJsaWMgY2xhc3MgVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxUZXN0IGV4dGVuZHMgVGVzdENhc2UgeworCS8qKgorCSAqIFRoZSBmaXh0dXJlIGZvciB0aGlzIFRyYW5zcG9ydCBSZWxhdGlvbnNoaXAgTGFiZWwgdGVzdCBjYXNlLiA8IS0tCisJICogYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWwgZml4dHVyZSA9IG51bGw7CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgeworCQlUZXN0UnVubmVyLnJ1bihUcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbFRlc3QuY2xhc3MpOworCX0KKworCS8qKgorCSAqIENvbnN0cnVjdHMgYSBuZXcgVHJhbnNwb3J0IFJlbGF0aW9uc2hpcCBMYWJlbCB0ZXN0IGNhc2Ugd2l0aCB0aGUgZ2l2ZW4gbmFtZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsVGVzdChTdHJpbmcgbmFtZSkgeworCQlzdXBlcihuYW1lKTsKKwl9CisKKwkvKioKKwkgKiBTZXRzIHRoZSBmaXh0dXJlIGZvciB0aGlzIFRyYW5zcG9ydCBSZWxhdGlvbnNoaXAgTGFiZWwgdGVzdCBjYXNlLiA8IS0tCisJICogYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBzZXRGaXh0dXJlKFRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsIGZpeHR1cmUpIHsKKwkJdGhpcy5maXh0dXJlID0gZml4dHVyZTsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBmaXh0dXJlIGZvciB0aGlzIFRyYW5zcG9ydCBSZWxhdGlvbnNoaXAgTGFiZWwgdGVzdCBjYXNlLiA8IS0tCisJICogYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWwgZ2V0Rml4dHVyZSgpIHsKKwkJcmV0dXJuIGZpeHR1cmU7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogCisJICogQHNlZSBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2Ujc2V0VXAoKQorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgc2V0VXAoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJc2V0Rml4dHVyZShjcmVhdGVGaXh0dXJlKCkpOworCX0gLy8gc2V0VXAKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlI3RlYXJEb3duKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgdGVhckRvd24oKSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJc2V0Rml4dHVyZShudWxsKTsKKwl9CisKKwkvKioKKwkgKiBUZXN0cyB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5UcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbCNnZXRDdXJyZW50VHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxWYWx1ZSgpIDxlbT5DdXJyZW50IFRyYW5zcG9ydCBSZWxhdGlvbnNoaXAgTGFiZWwgVmFsdWU8L2VtPn0nCisJICogZmVhdHVyZSBnZXR0ZXIuIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWwjZ2V0Q3VycmVudFRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsVmFsdWUoKQorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJcHVibGljIHZvaWQgdGVzdEdldEN1cnJlbnRUcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbFZhbHVlKCkgeworCQlmaW5hbCBUcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbCBmaXh0dXJlID0gZ2V0Rml4dHVyZSgpOworCQlhc3NlcnRUcnVlKGZpeHR1cmUuZ2V0Q3VycmVudFRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsVmFsdWUoKSAhPSBudWxsKTsKKwl9IC8vIHRlc3RHZXRDdXJyZW50VHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxWYWx1ZQorCisJLyoqCisJICogVGVzdHMgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWwjZ2V0RGVwYXJ0dXJlQ2FwYWNpdHkoKSA8ZW0+RGVwYXJ0dXJlIENhcGFjaXR5PC9lbT59JyBmZWF0dXJlIGdldHRlci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWwjZ2V0RGVwYXJ0dXJlQ2FwYWNpdHkoKQorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJcHVibGljIHZvaWQgdGVzdEdldERlcGFydHVyZUNhcGFjaXR5KCkgeworCQkvLyBUT0RPOiBpbXBsZW1lbnQgdGhpcyBmZWF0dXJlIGdldHRlciB0ZXN0IG1ldGhvZAorCQkvLyBFbnN1cmUgdGhhdCB5b3UgcmVtb3ZlIEBnZW5lcmF0ZWQgb3IgbWFyayBpdCBAZ2VuZXJhdGVkIE5PVAorCQlhc3NlcnRUcnVlKHRydWUpOworCX0KKworCS8qKgorCSAqIFRlc3RzIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLlRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsI2dldENhcGFjaXR5KCkgPGVtPkNhcGFjaXR5PC9lbT59JyBmZWF0dXJlIGdldHRlci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWwjZ2V0Q2FwYWNpdHkoKQorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJcHVibGljIHZvaWQgdGVzdEdldENhcGFjaXR5KCkgeworCQkvLyBUT0RPOiBpbXBsZW1lbnQgdGhpcyBmZWF0dXJlIGdldHRlciB0ZXN0IG1ldGhvZAorCQkvLyBFbnN1cmUgdGhhdCB5b3UgcmVtb3ZlIEBnZW5lcmF0ZWQgb3IgbWFyayBpdCBAZ2VuZXJhdGVkIE5PVAorCQlhc3NlcnRUcnVlKHRydWUpOworCX0KKworCS8qKgorCSAqIEByZXR1cm4gYSBmaXh0dXJlCisJICovCisJcHVibGljIHN0YXRpYyBUcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbCBjcmVhdGVGaXh0dXJlKCkgeworCQlmaW5hbCBUcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbCB0ZW1wID0gTGFiZWxzRmFjdG9yeS5lSU5TVEFOQ0UKKwkJCQkuY3JlYXRlVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWwoKTsKKwkJZmluYWwgVGVzdEVkZ2VEZWNvcmF0b3IxIHRlZCA9IERlY29yYXRvcnNGYWN0b3J5LmVJTlNUQU5DRQorCQkuY3JlYXRlVGVzdEVkZ2VEZWNvcmF0b3IxKCk7CisJCXRlbXAuc2V0RGVjb3JhdG9yKHRlZCk7CisJCXRlbXAuc2V0Q3VycmVudFZhbHVlKFRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsVmFsdWVUZXN0CisJCQkJLmNyZWF0ZUZpeHR1cmUoKSk7CisJCXJldHVybiB0ZW1wOworCX0gLy8gY3JlYXRlRml4dHVyZQorCisJLyoqCisJICogVGVzdCB0aGF0IHRoZSBmaXh0dXJlIGlzIHNhbmUuCisJICovCisJcHVibGljIHZvaWQgdGVzdEZpeHR1cmVTYW5pdHkoKSB7CisJCWZpbmFsIFRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsIGZpeHR1cmUgPSBnZXRGaXh0dXJlKCk7CisJCWFzc2VydFRydWUoZml4dHVyZS5zYW5lKCkpOworCX0gLy8gdGVzdEZpeHR1cmVTYW5pdHkKKworCS8qKgorCSAqIHRlc3QgY3JlYXRlVHJhbnNwb3J0UmVsYXRpb25zaGlwCisJICovCisJLy8gcHVibGljIHZvaWQgdGVzdENyZWF0ZVRyYW5zcG9ydFJlbGF0aW9uc2hpcCgpIHsKKwkvLyBmYWlsKCk7CisJLy8gfSAvLyB0ZXN0Q3JlYXRlVHJhbnNwb3J0UmVsYXRpb25zaGlwCisJLy8KKwkvLyAvKioKKwkvLyAqIHRlc3QgY3JlYXRlVHJhbnNwb3J0UmVsYXRpb25zaGlwIChkaXJlY3RlZCkKKwkvLyAqLworCS8vIHB1YmxpYyB2b2lkIHRlc3RDcmVhdGVUcmFuc3BvcnRSZWxhdGlvbnNoaXBEaXJlY3RlZCgpIHsKKwkvLyBmYWlsKCk7CisJLy8gfSAvLyB0ZXN0Q3JlYXRlVHJhbnNwb3J0UmVsYXRpb25zaGlwRGlyZWN0ZWQKK30gLy8gVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxUZXN0CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL2xhYmVscy90ZXN0cy9UcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbFZhbHVlVGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kZWZpbml0aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy9sYWJlbHMvdGVzdHMvVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxWYWx1ZVRlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZmIzMDRlCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kZWZpbml0aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy9sYWJlbHMvdGVzdHMvVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxWYWx1ZVRlc3QuamF2YQpAQCAtMCwwICsxLDEwNCBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy50ZXN0czsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNiwgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKK2ltcG9ydCBqdW5pdC50ZXh0dWkuVGVzdFJ1bm5lcjsKKworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLkxhYmVsc0ZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxWYWx1ZTsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiBBIHRlc3QgY2FzZSBmb3IgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPlRyYW5zcG9ydCBSZWxhdGlvbnNoaXAgTGFiZWwgVmFsdWU8L2I+PC9lbT4nLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK0BTdXBwcmVzc1dhcm5pbmdzKCJhbGwiKQorcHVibGljIGNsYXNzIFRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsVmFsdWVUZXN0IGV4dGVuZHMgVGVzdENhc2UgeworCS8qKgorCSAqIFRoZSBmaXh0dXJlIGZvciB0aGlzIFRyYW5zcG9ydCBSZWxhdGlvbnNoaXAgTGFiZWwgVmFsdWUgdGVzdCBjYXNlLiA8IS0tCisJICogYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxWYWx1ZSBmaXh0dXJlID0gbnVsbDsKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CisJCVRlc3RSdW5uZXIucnVuKFRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsVmFsdWVUZXN0LmNsYXNzKTsKKwl9CisKKwkvKioKKwkgKiBDb25zdHJ1Y3RzIGEgbmV3IFRyYW5zcG9ydCBSZWxhdGlvbnNoaXAgTGFiZWwgVmFsdWUgdGVzdCBjYXNlIHdpdGggdGhlIGdpdmVuIG5hbWUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBUcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbFZhbHVlVGVzdChTdHJpbmcgbmFtZSkgeworCQlzdXBlcihuYW1lKTsKKwl9CisKKwkvKioKKwkgKiBTZXRzIHRoZSBmaXh0dXJlIGZvciB0aGlzIFRyYW5zcG9ydCBSZWxhdGlvbnNoaXAgTGFiZWwgVmFsdWUgdGVzdCBjYXNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBzZXRGaXh0dXJlKFRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsVmFsdWUgZml4dHVyZSkgeworCQl0aGlzLmZpeHR1cmUgPSBmaXh0dXJlOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIGZpeHR1cmUgZm9yIHRoaXMgVHJhbnNwb3J0IFJlbGF0aW9uc2hpcCBMYWJlbCBWYWx1ZSB0ZXN0IGNhc2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBUcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbFZhbHVlIGdldEZpeHR1cmUoKSB7CisJCXJldHVybiBmaXh0dXJlOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBzZWUganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlI3NldFVwKCkKKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCXByb3RlY3RlZCB2b2lkIHNldFVwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCXNldEZpeHR1cmUoY3JlYXRlRml4dHVyZSgpKTsKKwl9IC8vIHNldFVwCisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZSN0ZWFyRG93bigpCisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIHRlYXJEb3duKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCXNldEZpeHR1cmUobnVsbCk7CisJfQorCisJcHVibGljIHN0YXRpYyBUcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbFZhbHVlIGNyZWF0ZUZpeHR1cmUoKSB7CisJCWZpbmFsIFRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsVmFsdWUgcmV0VmFsdWUgPSBMYWJlbHNGYWN0b3J5LmVJTlNUQU5DRQorCQkJCS5jcmVhdGVUcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbFZhbHVlKCk7CisJCXJldHVybiByZXRWYWx1ZTsKKwl9IC8vIGNyZWF0ZUZpeHR1cmUKKworCS8qKgorCSAqIFRlc3QgdGhhdCB0aGUgZml4dHVyZSBpcyBzYW5lLgorCSAqLworCXB1YmxpYyB2b2lkIHRlc3RGaXh0dXJlU2FuaXR5KCkgeworCQlmaW5hbCBUcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbFZhbHVlIGZpeHR1cmUgPSBnZXRGaXh0dXJlKCk7CisJCWFzc2VydFRydWUoZml4dHVyZS5zYW5lKCkpOworCX0gLy8gdGVzdEZpeHR1cmVTYW5pdHkKK30gLy8gVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxWYWx1ZVRlc3QKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvbm9kZXMvdGVzdHMvR2VvZ3JhcGhpY0ZlYXR1cmVUZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL25vZGVzL3Rlc3RzL0dlb2dyYXBoaWNGZWF0dXJlVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkxZDk1YjYKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL25vZGVzL3Rlc3RzL0dlb2dyYXBoaWNGZWF0dXJlVGVzdC5qYXZhCkBAIC0wLDAgKzEsNjMgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5ub2Rlcy50ZXN0czsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNiwgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKKworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubm9kZXMuR2VvZ3JhcGhpY0ZlYXR1cmU7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gQSB0ZXN0IGNhc2UgZm9yIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5HZW9ncmFwaGljIEZlYXR1cmU8L2I+PC9lbT4nLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBhYnN0cmFjdCBjbGFzcyBHZW9ncmFwaGljRmVhdHVyZVRlc3QgZXh0ZW5kcyBUZXN0Q2FzZSB7CisJLyoqCisJICogVGhlIGZpeHR1cmUgZm9yIHRoaXMgR2VvZ3JhcGhpYyBGZWF0dXJlIHRlc3QgY2FzZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jCisJICogLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgR2VvZ3JhcGhpY0ZlYXR1cmUgZml4dHVyZSA9IG51bGw7CisKKwkvKioKKwkgKiBDb25zdHJ1Y3RzIGEgbmV3IEdlb2dyYXBoaWMgRmVhdHVyZSB0ZXN0IGNhc2Ugd2l0aCB0aGUgZ2l2ZW4gbmFtZS4gPCEtLQorCSAqIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEdlb2dyYXBoaWNGZWF0dXJlVGVzdChTdHJpbmcgbmFtZSkgeworCQlzdXBlcihuYW1lKTsKKwl9CisKKwkvKioKKwkgKiBTZXRzIHRoZSBmaXh0dXJlIGZvciB0aGlzIEdlb2dyYXBoaWMgRmVhdHVyZSB0ZXN0IGNhc2UuIDwhLS0KKwkgKiBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogCisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIHNldEZpeHR1cmUoR2VvZ3JhcGhpY0ZlYXR1cmUgZml4dHVyZSkgeworCQl0aGlzLmZpeHR1cmUgPSBmaXh0dXJlOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIGZpeHR1cmUgZm9yIHRoaXMgR2VvZ3JhcGhpYyBGZWF0dXJlIHRlc3QgY2FzZS4gPCEtLQorCSAqIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIEdlb2dyYXBoaWNGZWF0dXJlIGdldEZpeHR1cmUoKSB7CisJCXJldHVybiBmaXh0dXJlOworCX0KKworfSAvLyBHZW9ncmFwaGljRmVhdHVyZVRlc3QKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvbm9kZXMvdGVzdHMvTm9kZVRlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvbm9kZXMvdGVzdHMvTm9kZVRlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NWM0NWVjCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kZWZpbml0aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy9ub2Rlcy90ZXN0cy9Ob2RlVGVzdC5qYXZhCkBAIC0wLDAgKzEsNjQgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5ub2Rlcy50ZXN0czsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguTm9kZTsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogQSB0ZXN0IGNhc2UgZm9yIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5Ob2RlPC9iPjwvZW0+Jy4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgYWJzdHJhY3QgY2xhc3MgTm9kZVRlc3QgZXh0ZW5kcyBUZXN0Q2FzZSB7CisKKwkvKioKKwkgKiBUaGUgZml4dHVyZSBmb3IgdGhpcyBOb2RlIHRlc3QgY2FzZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgTm9kZSBmaXh0dXJlID0gbnVsbDsKKworCS8qKgorCSAqIENvbnN0cnVjdHMgYSBuZXcgTm9kZSB0ZXN0IGNhc2Ugd2l0aCB0aGUgZ2l2ZW4gbmFtZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgTm9kZVRlc3QoU3RyaW5nIG5hbWUpIHsKKwkJc3VwZXIobmFtZSk7CisJfQorCisJLyoqCisJICogU2V0cyB0aGUgZml4dHVyZSBmb3IgdGhpcyBOb2RlIHRlc3QgY2FzZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBzZXRGaXh0dXJlKE5vZGUgZml4dHVyZSkgeworCQl0aGlzLmZpeHR1cmUgPSBmaXh0dXJlOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIGZpeHR1cmUgZm9yIHRoaXMgTm9kZSB0ZXN0IGNhc2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIE5vZGUgZ2V0Rml4dHVyZSgpIHsKKwkJcmV0dXJuIGZpeHR1cmU7CisJfQorCit9IC8vTm9kZVRlc3QKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvbm9kZXMvdGVzdHMvTm9kZXNUZXN0cy5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kZWZpbml0aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy9ub2Rlcy90ZXN0cy9Ob2Rlc1Rlc3RzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTQxMjE0NwotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvbm9kZXMvdGVzdHMvTm9kZXNUZXN0cy5qYXZhCkBAIC0wLDAgKzEsNTEgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5ub2Rlcy50ZXN0czsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNiwgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0OworaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0U3VpdGU7CitpbXBvcnQganVuaXQudGV4dHVpLlRlc3RSdW5uZXI7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gQSB0ZXN0IHN1aXRlIGZvciB0aGUgJzxlbT48Yj5ub2RlczwvYj48L2VtPicKKyAqIHBhY2thZ2UuIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgTm9kZXNUZXN0cyBleHRlbmRzIFRlc3RTdWl0ZSB7CisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKKwkJVGVzdFJ1bm5lci5ydW4oc3VpdGUoKSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBzdGF0aWMgVGVzdCBzdWl0ZSgpIHsKKwkJVGVzdFN1aXRlIHN1aXRlID0gbmV3IE5vZGVzVGVzdHMoIm5vZGVzIFRlc3RzIik7IC8vJE5PTi1OTFMtMSQKKwkJc3VpdGUuYWRkVGVzdFN1aXRlKFJlZ2lvblRlc3QuY2xhc3MpOworCQlyZXR1cm4gc3VpdGU7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBOb2Rlc1Rlc3RzKFN0cmluZyBuYW1lKSB7CisJCXN1cGVyKG5hbWUpOworCX0KKworfSAvLyBOb2Rlc1Rlc3RzCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL25vZGVzL3Rlc3RzL1JlZ2lvblRlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvbm9kZXMvdGVzdHMvUmVnaW9uVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRiNTEyYTkKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL25vZGVzL3Rlc3RzL1JlZ2lvblRlc3QuamF2YQpAQCAtMCwwICsxLDEwNSBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLm5vZGVzLnRlc3RzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA2LCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGp1bml0LnRleHR1aS5UZXN0UnVubmVyOworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlVSSTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuU1RFTVVSSTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5Qb3B1bGF0aW9uTGFiZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMudGVzdHMuUG9wdWxhdGlvbkxhYmVsVGVzdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLm5vZGVzLk5vZGVzRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLm5vZGVzLlJlZ2lvbjsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiBBIHRlc3QgY2FzZSBmb3IgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPlJlZ2lvbjwvYj48L2VtPicuCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBnZW5lcmF0ZWQgTk9UCisgKi8KK0BTdXBwcmVzc1dhcm5pbmdzKCJhbGwiKQorcHVibGljIGNsYXNzIFJlZ2lvblRlc3QgZXh0ZW5kcyBHZW9ncmFwaGljRmVhdHVyZVRlc3QgeworCQorCS8qKgorCSAqIE5vZGUgVVJJCisJICovCisJcHVibGljIHN0YXRpYyBVUkkgTk9ERV9VUkkgPSBTVEVNVVJJLmNyZWF0ZVVSSSgiTk9ERS90ZXN0Tm9kZSIpOworCQorCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CisJCVRlc3RSdW5uZXIucnVuKFJlZ2lvblRlc3QuY2xhc3MpOworCX0KKworCS8qKgorCSAqIENvbnN0cnVjdHMgYSBuZXcgUmVnaW9uIHRlc3QgY2FzZSB3aXRoIHRoZSBnaXZlbiBuYW1lLiA8IS0tCisJICogYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgUmVnaW9uVGVzdChTdHJpbmcgbmFtZSkgeworCQlzdXBlcihuYW1lKTsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBmaXh0dXJlIGZvciB0aGlzIFJlZ2lvbiB0ZXN0IGNhc2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIFJlZ2lvbiBnZXRGaXh0dXJlKCkgeworCQlyZXR1cm4gKFJlZ2lvbilmaXh0dXJlOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBzZWUganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlI3NldFVwKCkKKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCXByb3RlY3RlZCB2b2lkIHNldFVwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCXNldEZpeHR1cmUoY3JlYXRlRml4dHVyZSgpKTsKKwl9IC8vIHNldFVwCisKKwkvKioKKwkgKiBAcmV0dXJuIGEgcmVnaW9uIG5vZGUgd2l0aCBhIHBvcHVsYXRpb24gbGFiZWwKKwkgKi8KKwlwdWJsaWMgc3RhdGljIFJlZ2lvbiBjcmVhdGVGaXh0dXJlKCkgeworCQlmaW5hbCBSZWdpb24gcmV0VmFsdWUgPSBOb2Rlc0ZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZVJlZ2lvbigpOworCQlmaW5hbCBQb3B1bGF0aW9uTGFiZWwgcG9wdWxhdGlvbkxhYmVsID0gUG9wdWxhdGlvbkxhYmVsVGVzdAorCQkJCS5jcmVhdGVGaXh0dXJlKCk7CisJCXJldFZhbHVlLmdldExhYmVscygpLmFkZChwb3B1bGF0aW9uTGFiZWwpOworCQlyZXRWYWx1ZS5zZXRVUkkoTk9ERV9VUkkpOworCQlyZXR1cm4gcmV0VmFsdWU7CisJfSAvLyBjcmVhdGVGaXh0dXJlCisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZSN0ZWFyRG93bigpCisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIHRlYXJEb3duKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCXNldEZpeHR1cmUobnVsbCk7CisJfQorCisJLyoqCisJICogVGVzdCB0aGF0IHRoZSBmaXh0dXJlIGlzIHNhbmUuCisJICovCisJcHVibGljIHZvaWQgdGVzdEZpeHR1cmVTYW5pdHkoKSB7CisJCWZpbmFsIFJlZ2lvbiBmaXh0dXJlID0gZ2V0Rml4dHVyZSgpOworCQlhc3NlcnRUcnVlKGZpeHR1cmUuc2FuZSgpKTsKKwl9IC8vIHRlc3RGaXh0dXJlU2FuaXR5CisKK30gLy8gUmVnaW9uVGVzdApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kZWZpbml0aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy90eXBlcy90ZXN0cy9DYXRlZ29yaXplZFR5cGVUZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL3R5cGVzL3Rlc3RzL0NhdGVnb3JpemVkVHlwZVRlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YTMxZmRkCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kZWZpbml0aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy90eXBlcy90ZXN0cy9DYXRlZ29yaXplZFR5cGVUZXN0LmphdmEKQEAgLTAsMCArMSw2NCBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLnR5cGVzLnRlc3RzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA5IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKKworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMudHlwZXMuQ2F0ZWdvcml6ZWRUeXBlOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiBBIHRlc3QgY2FzZSBmb3IgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPkNhdGVnb3JpemVkIFR5cGU8L2I+PC9lbT4nLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBhYnN0cmFjdCBjbGFzcyBDYXRlZ29yaXplZFR5cGVUZXN0IGV4dGVuZHMgVGVzdENhc2UgeworCisJLyoqCisJICogVGhlIGZpeHR1cmUgZm9yIHRoaXMgQ2F0ZWdvcml6ZWQgVHlwZSB0ZXN0IGNhc2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIENhdGVnb3JpemVkVHlwZSBmaXh0dXJlID0gbnVsbDsKKworCS8qKgorCSAqIENvbnN0cnVjdHMgYSBuZXcgQ2F0ZWdvcml6ZWQgVHlwZSB0ZXN0IGNhc2Ugd2l0aCB0aGUgZ2l2ZW4gbmFtZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQ2F0ZWdvcml6ZWRUeXBlVGVzdChTdHJpbmcgbmFtZSkgeworCQlzdXBlcihuYW1lKTsKKwl9CisKKwkvKioKKwkgKiBTZXRzIHRoZSBmaXh0dXJlIGZvciB0aGlzIENhdGVnb3JpemVkIFR5cGUgdGVzdCBjYXNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIHNldEZpeHR1cmUoQ2F0ZWdvcml6ZWRUeXBlIGZpeHR1cmUpIHsKKwkJdGhpcy5maXh0dXJlID0gZml4dHVyZTsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBmaXh0dXJlIGZvciB0aGlzIENhdGVnb3JpemVkIFR5cGUgdGVzdCBjYXNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBDYXRlZ29yaXplZFR5cGUgZ2V0Rml4dHVyZSgpIHsKKwkJcmV0dXJuIGZpeHR1cmU7CisJfQorCit9IC8vQ2F0ZWdvcml6ZWRUeXBlVGVzdApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kZWZpbml0aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy90eXBlcy90ZXN0cy9SYXRlVGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kZWZpbml0aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy90eXBlcy90ZXN0cy9SYXRlVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZmMDkzNDQKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL3R5cGVzL3Rlc3RzL1JhdGVUZXN0LmphdmEKQEAgLTAsMCArMSw2NCBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLnR5cGVzLnRlc3RzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA5IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKKworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMudHlwZXMuUmF0ZTsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogQSB0ZXN0IGNhc2UgZm9yIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5SYXRlPC9iPjwvZW0+Jy4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgYWJzdHJhY3QgY2xhc3MgUmF0ZVRlc3QgZXh0ZW5kcyBUZXN0Q2FzZSB7CisKKwkvKioKKwkgKiBUaGUgZml4dHVyZSBmb3IgdGhpcyBSYXRlIHRlc3QgY2FzZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgUmF0ZSBmaXh0dXJlID0gbnVsbDsKKworCS8qKgorCSAqIENvbnN0cnVjdHMgYSBuZXcgUmF0ZSB0ZXN0IGNhc2Ugd2l0aCB0aGUgZ2l2ZW4gbmFtZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgUmF0ZVRlc3QoU3RyaW5nIG5hbWUpIHsKKwkJc3VwZXIobmFtZSk7CisJfQorCisJLyoqCisJICogU2V0cyB0aGUgZml4dHVyZSBmb3IgdGhpcyBSYXRlIHRlc3QgY2FzZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBzZXRGaXh0dXJlKFJhdGUgZml4dHVyZSkgeworCQl0aGlzLmZpeHR1cmUgPSBmaXh0dXJlOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIGZpeHR1cmUgZm9yIHRoaXMgUmF0ZSB0ZXN0IGNhc2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIFJhdGUgZ2V0Rml4dHVyZSgpIHsKKwkJcmV0dXJuIGZpeHR1cmU7CisJfQorCit9IC8vUmF0ZVRlc3QKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvdHlwZXMvdGVzdHMvVHlwZXNFeGFtcGxlLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL3R5cGVzL3Rlc3RzL1R5cGVzRXhhbXBsZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcwMTJhNTkKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL3R5cGVzL3Rlc3RzL1R5cGVzRXhhbXBsZS5qYXZhCkBAIC0wLDAgKzEsMTEyIEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMudHlwZXMudGVzdHM7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDkgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgamF2YS5pby5GaWxlOworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLkRpYWdub3N0aWM7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlVSSTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUucmVzb3VyY2UuUmVzb3VyY2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnJlc291cmNlLlJlc291cmNlU2V0OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5yZXNvdXJjZS5pbXBsLlJlc291cmNlU2V0SW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUudXRpbC5EaWFnbm9zdGljaWFuOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS54bWkuaW1wbC5YTUlSZXNvdXJjZUZhY3RvcnlJbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMudHlwZXMuVHlwZXNQYWNrYWdlOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiBBIHNhbXBsZSB1dGlsaXR5IGZvciB0aGUgJzxlbT48Yj50eXBlczwvYj48L2VtPicgcGFja2FnZS4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgVHlwZXNFeGFtcGxlIHsKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIExvYWQgYWxsIHRoZSBhcmd1bWVudCBmaWxlIHBhdGhzIG9yIFVSSXMgYXMgaW5zdGFuY2VzIG9mIHRoZSBtb2RlbC4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gYXJncyB0aGUgZmlsZSBwYXRocyBvciBVUklzLgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CisJCS8vIENyZWF0ZSBhIHJlc291cmNlIHNldCB0byBob2xkIHRoZSByZXNvdXJjZXMuCisJCS8vCisJCVJlc291cmNlU2V0IHJlc291cmNlU2V0ID0gbmV3IFJlc291cmNlU2V0SW1wbCgpOworCQkKKwkJLy8gUmVnaXN0ZXIgdGhlIGFwcHJvcHJpYXRlIHJlc291cmNlIGZhY3RvcnkgdG8gaGFuZGxlIGFsbCBmaWxlIGV4dGVuc2lvbnMuCisJCS8vCisJCXJlc291cmNlU2V0LmdldFJlc291cmNlRmFjdG9yeVJlZ2lzdHJ5KCkuZ2V0RXh0ZW5zaW9uVG9GYWN0b3J5TWFwKCkucHV0CisJCQkoUmVzb3VyY2UuRmFjdG9yeS5SZWdpc3RyeS5ERUZBVUxUX0VYVEVOU0lPTiwgCisJCQkgbmV3IFhNSVJlc291cmNlRmFjdG9yeUltcGwoKSk7CisKKwkJLy8gUmVnaXN0ZXIgdGhlIHBhY2thZ2UgdG8gZW5zdXJlIGl0IGlzIGF2YWlsYWJsZSBkdXJpbmcgbG9hZGluZy4KKwkJLy8KKwkJcmVzb3VyY2VTZXQuZ2V0UGFja2FnZVJlZ2lzdHJ5KCkucHV0CisJCQkoVHlwZXNQYWNrYWdlLmVOU19VUkksIAorCQkJIFR5cGVzUGFja2FnZS5lSU5TVEFOQ0UpOworICAgICAgICAKKwkJLy8gSWYgdGhlcmUgYXJlIG5vIGFyZ3VtZW50cywgZW1pdCBhbiBhcHByb3ByaWF0ZSB1c2FnZSBtZXNzYWdlLgorCQkvLworCQlpZiAoYXJncy5sZW5ndGggPT0gMCkgeworCQkJU3lzdGVtLm91dC5wcmludGxuKCJFbnRlciBhIGxpc3Qgb2YgZmlsZSBwYXRocyBvciBVUklzIik7CisJCX0KKwkJZWxzZSB7CisJCQkvLyBJdGVyYXRlIG92ZXIgYWxsIHRoZSBhcmd1bWVudHMuCisJCQkvLworCQkJZm9yIChpbnQgaSA9IDA7IGkgPCBhcmdzLmxlbmd0aDsgKytpKSB7CisJCQkJLy8gQ29uc3RydWN0IHRoZSBVUkkgZm9yIHRoZSBpbnN0YW5jZSBmaWxlLgorCQkJCS8vIFRoZSBhcmd1bWVudCBpcyB0cmVhdGVkIGFzIGEgZmlsZSBwYXRoIG9ubHkgaWYgaXQgZGVub3RlcyBhbiBleGlzdGluZyBmaWxlLgorCQkJCS8vIE90aGVyd2lzZSwgaXQncyBkaXJlY3RseSB0cmVhdGVkIGFzIGEgVVJMLgorCQkJCS8vCisJCQkJRmlsZSBmaWxlID0gbmV3IEZpbGUoYXJnc1tpXSk7CisJCQkJVVJJIHVyaSA9IGZpbGUuaXNGaWxlKCkgPyBVUkkuY3JlYXRlRmlsZVVSSShmaWxlLmdldEFic29sdXRlUGF0aCgpKTogVVJJLmNyZWF0ZVVSSShhcmdzW2ldKTsKKworCQkJCXRyeSB7CisJCQkJCS8vIERlbWFuZCBsb2FkIHJlc291cmNlIGZvciB0aGlzIGZpbGUuCisJCQkJCS8vCisJCQkJCVJlc291cmNlIHJlc291cmNlID0gcmVzb3VyY2VTZXQuZ2V0UmVzb3VyY2UodXJpLCB0cnVlKTsKKwkJCQkJU3lzdGVtLm91dC5wcmludGxuKCJMb2FkZWQgIiArIHVyaSk7IC8vJE5PTi1OTFMtMSQKKworCQkJCQkvLyBWYWxpZGF0ZSB0aGUgY29udGVudHMgb2YgdGhlIGxvYWRlZCByZXNvdXJjZS4KKwkJCQkJLy8KKwkJCQkJZm9yIChFT2JqZWN0IGVPYmplY3QgOiByZXNvdXJjZS5nZXRDb250ZW50cygpKSB7CisJCQkJCQlEaWFnbm9zdGljIGRpYWdub3N0aWMgPSBEaWFnbm9zdGljaWFuLklOU1RBTkNFLnZhbGlkYXRlKGVPYmplY3QpOworCQkJCQkJaWYgKGRpYWdub3N0aWMuZ2V0U2V2ZXJpdHkoKSAhPSBEaWFnbm9zdGljLk9LKSB7CisJCQkJCQkJcHJpbnREaWFnbm9zdGljKGRpYWdub3N0aWMsICIiKTsgLy8kTk9OLU5MUy0xJAorCQkJCQkJfQorCQkJCQl9CisJCQkJfQorCQkJCWNhdGNoIChSdW50aW1lRXhjZXB0aW9uIGV4Y2VwdGlvbikgeworCQkJCQlTeXN0ZW0ub3V0LnByaW50bG4oIlByb2JsZW0gbG9hZGluZyAiICsgdXJpKTsgLy8kTk9OLU5MUy0xJAorCQkJCQlleGNlcHRpb24ucHJpbnRTdGFja1RyYWNlKCk7CisJCQkJfQorCQkJfQorCQl9CisJfQorCQorCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogUHJpbnRzIGRpYWdub3N0aWNzIHdpdGggaW5kZW50YXRpb24uCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIGRpYWdub3N0aWMgdGhlIGRpYWdub3N0aWMgdG8gcHJpbnQuCisJICogQHBhcmFtIGluZGVudCB0aGUgaW5kZW50YXRpb24gZm9yIHByaW50aW5nLgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgc3RhdGljIHZvaWQgcHJpbnREaWFnbm9zdGljKERpYWdub3N0aWMgZGlhZ25vc3RpYywgU3RyaW5nIGluZGVudCkgeworCQlTeXN0ZW0ub3V0LnByaW50KGluZGVudCk7CisJCVN5c3RlbS5vdXQucHJpbnRsbihkaWFnbm9zdGljLmdldE1lc3NhZ2UoKSk7CisJCWZvciAoRGlhZ25vc3RpYyBjaGlsZCA6IGRpYWdub3N0aWMuZ2V0Q2hpbGRyZW4oKSkgeworCQkJcHJpbnREaWFnbm9zdGljKGNoaWxkLCBpbmRlbnQgKyAiICAiKTsgLy8kTk9OLU5MUy0xJAorCQl9CisJfQorCit9IC8vVHlwZXNFeGFtcGxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL3R5cGVzL3Rlc3RzL1R5cGVzVGVzdHMuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvdHlwZXMvdGVzdHMvVHlwZXNUZXN0cy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA0ZTJiOWIKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL3R5cGVzL3Rlc3RzL1R5cGVzVGVzdHMuamF2YQpAQCAtMCwwICsxLDU0IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMudHlwZXMudGVzdHM7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDkgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3Q7CitpbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RTdWl0ZTsKK2ltcG9ydCBqdW5pdC50ZXh0dWkuVGVzdFJ1bm5lcjsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogQSB0ZXN0IHN1aXRlIGZvciB0aGUgJzxlbT48Yj50eXBlczwvYj48L2VtPicgcGFja2FnZS4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgVHlwZXNUZXN0cyBleHRlbmRzIFRlc3RTdWl0ZSB7CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CisJCVRlc3RSdW5uZXIucnVuKHN1aXRlKCkpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBzdGF0aWMgVGVzdCBzdWl0ZSgpIHsKKwkJVGVzdFN1aXRlIHN1aXRlID0gbmV3IFR5cGVzVGVzdHMoInR5cGVzIFRlc3RzIik7IC8vJE5PTi1OTFMtMSQKKwkJcmV0dXJuIHN1aXRlOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBUeXBlc1Rlc3RzKFN0cmluZyBuYW1lKSB7CisJCXN1cGVyKG5hbWUpOworCX0KKworfSAvL1R5cGVzVGVzdHMKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGVmaW5pdGlvbnMvdGVzdC54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRlZmluaXRpb25zL3Rlc3QueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY4MGQ2ZTkKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRlZmluaXRpb25zL3Rlc3QueG1sCkBAIC0wLDAgKzEsNTMgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+CisKKzxwcm9qZWN0IG5hbWU9InRlc3RzdWl0ZSIgZGVmYXVsdD0icnVuIiBiYXNlZGlyPSIuIj4KKyAgPCEtLSBUaGUgcHJvcGVydHkgJHtlY2xpcHNlLWhvbWV9IHNob3VsZCBiZSBwYXNzZWQgaW50byB0aGlzIHNjcmlwdCAtLT4KKyAgPCEtLSBTZXQgYSBtZWFuaW5nZnVsIGRlZmF1bHQgdmFsdWUgZm9yIHdoZW4gaXQgaXMgbm90LiAtLT4KKyAgPHByb3BlcnR5IG5hbWU9ImVjbGlwc2UtaG9tZSIgdmFsdWU9IiIvPgorCisKKyAgPCEtLSBzZXRzIHRoZSBwcm9wZXJ0aWVzIGVjbGlwc2UtaG9tZSwgYW5kIGxpYnJhcnktZmlsZSAtLT4KKyAgPHByb3BlcnR5IG5hbWU9InBsdWdpbi1uYW1lIiB2YWx1ZT0ib3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kZWZpbml0aW9ucyIvPgorICA8cHJvcGVydHkgbmFtZT0ibGlicmFyeS1maWxlIgorICAgICAgICAgICAgdmFsdWU9IiR7ZWNsaXBzZS1ob21lfS9wbHVnaW5zL29yZy5lY2xpcHNlLnRlc3RfMy4zLjAvbGlicmFyeS54bWwiLz4KKworICA8IS0tIFRoaXMgdGFyZ2V0IGhvbGRzIGFsbCBpbml0aWFsaXphdGlvbiBjb2RlIHRoYXQgbmVlZHMgdG8gYmUgZG9uZSBmb3IgLS0+CisgIDwhLS0gYWxsIHRlc3RzIHRoYXQgYXJlIHRvIGJlIHJ1bi4gSW5pdGlhbGl6YXRpb24gZm9yIGluZGl2aWR1YWwgdGVzdHMgLS0+CisgIDwhLS0gc2hvdWxkIGJlIGRvbmUgd2l0aGluIHRoZSBib2R5IG9mIHRoZSBzdWl0ZSB0YXJnZXQuIC0tPgorICA8dGFyZ2V0IG5hbWU9ImluaXQiPgorICAgIDx0c3RhbXAvPgorICAgIDxkZWxldGU+CisgICAgICA8ZmlsZXNldCBkaXI9IiR7ZWNsaXBzZS1ob21lfSIgaW5jbHVkZXM9Im9yZyoueG1sIi8+CisgICAgPC9kZWxldGU+CisgIDwvdGFyZ2V0PgorCisgIDwhLS0gVGhpcyB0YXJnZXQgZGVmaW5lcyB0aGUgdGVzdHMgdGhhdCBuZWVkIHRvIGJlIHJ1bi4gLS0+CisgIDx0YXJnZXQgbmFtZT0ic3VpdGUiPgorICAgIDxwcm9wZXJ0eSBuYW1lPSIke2RhdGEtZGlyfSIgdmFsdWU9IiR7ZWNsaXBzZS1ob21lfS90bXAiLz4KKyAgICA8ZGVsZXRlIGRpcj0iJHtkYXRhLWRpcn0iIHF1aWV0PSJ0cnVlIi8+CisgICAgPGFudCB0YXJnZXQ9InVpLXRlc3QiIGFudGZpbGU9IiR7bGlicmFyeS1maWxlfSIgZGlyPSIke2VjbGlwc2UtaG9tZX0iPgorICAgICAgPHByb3BlcnR5IG5hbWU9ImRhdGEtZGlyIiB2YWx1ZT0iJHtkYXRhLWRpcn0iLz4KKyAgICAgIDxwcm9wZXJ0eSBuYW1lPSJwbHVnaW4tbmFtZSIgdmFsdWU9IiR7cGx1Z2luLW5hbWV9Ii8+CisgICAgICA8cHJvcGVydHkgbmFtZT0iY2xhc3NuYW1lIiB2YWx1ZT0ib3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5lZGdlcy50ZXN0cy5EZWZpbml0aW9uc0FsbFRlc3RzIi8+CisgICAgPC9hbnQ+CisgIDwvdGFyZ2V0PgorCisgIDwhLS0gVGhpcyB0YXJnZXQgaG9sZHMgY29kZSB0byBjbGVhbnVwIHRoZSB0ZXN0aW5nIGVudmlyb25tZW50IGFmdGVyIC0tPgorICA8IS0tIGFmdGVyIGFsbCBvZiB0aGUgdGVzdHMgaGF2ZSBiZWVuIHJ1bi4gWW91IGNhbiB1c2UgdGhpcyB0YXJnZXQgdG8gLS0+CisgIDwhLS0gZGVsZXRlIHRlbXBvcmFyeSBmaWxlcyB0aGF0IGhhdmUgYmVlbiBjcmVhdGVkLiAtLT4KKyAgPHRhcmdldCBuYW1lPSJjbGVhbnVwIj4KKyAgPC90YXJnZXQ+CisKKyAgPCEtLSBUaGlzIHRhcmdldCBydW5zIHRoZSB0ZXN0IHN1aXRlLiBBbnkgYWN0aW9ucyB0aGF0IG5lZWQgdG8gaGFwcGVuIC0tPgorICA8IS0tIGFmdGVyIGFsbCB0aGUgdGVzdHMgaGF2ZSBiZWVuIHJ1biBzaG91bGQgZ28gaGVyZS4gLS0+CisgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LHN1aXRlLGNsZWFudXAiPgorICAgIDxhbnQgdGFyZ2V0PSJjb2xsZWN0IiBhbnRmaWxlPSIke2xpYnJhcnktZmlsZX0iIGRpcj0iJHtlY2xpcHNlLWhvbWV9Ij4KKyAgICAgIDxwcm9wZXJ0eSBuYW1lPSJpbmNsdWRlcyIgdmFsdWU9Im9yZyoueG1sIi8+CisgICAgICA8cHJvcGVydHkgbmFtZT0ib3V0cHV0LWZpbGUiIHZhbHVlPSIke3BsdWdpbi1uYW1lfS54bWwiLz4KKyAgICA8L2FudD4KKyAgPC90YXJnZXQ+CisKKyAgPCEtLSBUaGlzIHRhcmdldCBydW5zIHRoZSBwZXJmb3JtYW5jZSB0ZXN0IHN1aXRlcy4gLS0+CisgIDx0YXJnZXQgbmFtZT0icGVyZm9ybWFuY2UiPgorICA8L3RhcmdldD4KKzwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGlzZWFzZW1vZGVscy5leGFtcGxlLy5jbGFzc3BhdGggYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRpc2Vhc2Vtb2RlbHMuZXhhbXBsZS8uY2xhc3NwYXRoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMwNGU4NjEKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRpc2Vhc2Vtb2RlbHMuZXhhbXBsZS8uY2xhc3NwYXRoCkBAIC0wLDAgKzEsNyBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxjbGFzc3BhdGg+CisJPGNsYXNzcGF0aGVudHJ5IGtpbmQ9InNyYyIgcGF0aD0ic3JjIi8+CisJPGNsYXNzcGF0aGVudHJ5IGtpbmQ9ImNvbiIgcGF0aD0ib3JnLmVjbGlwc2UuamR0LmxhdW5jaGluZy5KUkVfQ09OVEFJTkVSL29yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC5kZWJ1Zy51aS5sYXVuY2hlci5TdGFuZGFyZFZNVHlwZS9KMlNFLTEuNSIvPgorCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJjb24iIHBhdGg9Im9yZy5lY2xpcHNlLnBkZS5jb3JlLnJlcXVpcmVkUGx1Z2lucyIvPgorCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJvdXRwdXQiIHBhdGg9ImJpbiIvPgorPC9jbGFzc3BhdGg+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRpc2Vhc2Vtb2RlbHMuZXhhbXBsZS8ucHJvamVjdCBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGlzZWFzZW1vZGVscy5leGFtcGxlLy5wcm9qZWN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU4OWFiOTkKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRpc2Vhc2Vtb2RlbHMuZXhhbXBsZS8ucHJvamVjdApAQCAtMCwwICsxLDI4IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPHByb2plY3REZXNjcmlwdGlvbj4KKwk8bmFtZT5vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRpc2Vhc2Vtb2RlbHMuZXhhbXBsZTwvbmFtZT4KKwk8Y29tbWVudD48L2NvbW1lbnQ+CisJPHByb2plY3RzPgorCTwvcHJvamVjdHM+CisJPGJ1aWxkU3BlYz4KKwkJPGJ1aWxkQ29tbWFuZD4KKwkJCTxuYW1lPm9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFidWlsZGVyPC9uYW1lPgorCQkJPGFyZ3VtZW50cz4KKwkJCTwvYXJndW1lbnRzPgorCQk8L2J1aWxkQ29tbWFuZD4KKwkJPGJ1aWxkQ29tbWFuZD4KKwkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5NYW5pZmVzdEJ1aWxkZXI8L25hbWU+CisJCQk8YXJndW1lbnRzPgorCQkJPC9hcmd1bWVudHM+CisJCTwvYnVpbGRDb21tYW5kPgorCQk8YnVpbGRDb21tYW5kPgorCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLlNjaGVtYUJ1aWxkZXI8L25hbWU+CisJCQk8YXJndW1lbnRzPgorCQkJPC9hcmd1bWVudHM+CisJCTwvYnVpbGRDb21tYW5kPgorCTwvYnVpbGRTcGVjPgorCTxuYXR1cmVzPgorCQk8bmF0dXJlPm9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFuYXR1cmU8L25hdHVyZT4KKwkJPG5hdHVyZT5vcmcuZWNsaXBzZS5wZGUuUGx1Z2luTmF0dXJlPC9uYXR1cmU+CisJPC9uYXR1cmVzPgorPC9wcm9qZWN0RGVzY3JpcHRpb24+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRpc2Vhc2Vtb2RlbHMuZXhhbXBsZS8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRpc2Vhc2Vtb2RlbHMuZXhhbXBsZS8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODgwMDdjNgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGlzZWFzZW1vZGVscy5leGFtcGxlLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcwpAQCAtMCwwICsxLDc4IEBACisjVHVlIFNlcCAyMyAwOTozNjoxOCBFRFQgMjAwOAorZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvZGVnZW4uaW5saW5lSnNyQnl0ZWNvZGU9ZW5hYmxlZAorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29kZWdlbi50YXJnZXRQbGF0Zm9ybT0xLjUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvZGVnZW4udW51c2VkTG9jYWw9cHJlc2VydmUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvbXBsaWFuY2U9MS41CitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5kZWJ1Zy5saW5lTnVtYmVyPWdlbmVyYXRlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5kZWJ1Zy5sb2NhbFZhcmlhYmxlPWdlbmVyYXRlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5kZWJ1Zy5zb3VyY2VGaWxlPWdlbmVyYXRlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5kb2MuY29tbWVudC5zdXBwb3J0PWRpc2FibGVkCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmFubm90YXRpb25TdXBlckludGVyZmFjZT13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmFzc2VydElkZW50aWZpZXI9ZXJyb3IKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uYXV0b2JveGluZz13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRlcHJlY2F0aW9uPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZGVwcmVjYXRpb25JbkRlcHJlY2F0ZWRDb2RlPWRpc2FibGVkCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRlcHJlY2F0aW9uV2hlbk92ZXJyaWRpbmdEZXByZWNhdGVkTWV0aG9kPWRpc2FibGVkCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRpc2NvdXJhZ2VkUmVmZXJlbmNlPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZW1wdHlTdGF0ZW1lbnQ9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5lbnVtSWRlbnRpZmllcj1lcnJvcgorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5mYWxsdGhyb3VnaENhc2U9aWdub3JlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZhdGFsT3B0aW9uYWxFcnJvcj1lbmFibGVkCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZpZWxkSGlkaW5nPWlnbm9yZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5maW5hbFBhcmFtZXRlckJvdW5kPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZmluYWxseUJsb2NrTm90Q29tcGxldGluZ05vcm1hbGx5PXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZm9yYmlkZGVuUmVmZXJlbmNlPWVycm9yCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmhpZGRlbkNhdGNoQmxvY2s9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbmNvbXBhdGlibGVOb25Jbmhlcml0ZWRJbnRlcmZhY2VNZXRob2Q9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbmNvbXBsZXRlRW51bVN3aXRjaD1pZ25vcmUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW5kaXJlY3RTdGF0aWNBY2Nlc3M9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbnZhbGlkSmF2YWRvYz13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmludmFsaWRKYXZhZG9jVGFncz1lbmFibGVkCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmludmFsaWRKYXZhZG9jVGFnc0RlcHJlY2F0ZWRSZWY9ZW5hYmxlZAorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbnZhbGlkSmF2YWRvY1RhZ3NOb3RWaXNpYmxlUmVmPWVuYWJsZWQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW52YWxpZEphdmFkb2NUYWdzVmlzaWJpbGl0eT1wdWJsaWMKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubG9jYWxWYXJpYWJsZUhpZGluZz1pZ25vcmUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWV0aG9kV2l0aENvbnN0cnVjdG9yTmFtZT13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdEZXByZWNhdGVkQW5ub3RhdGlvbj13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdKYXZhZG9jQ29tbWVudHM9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nSmF2YWRvY0NvbW1lbnRzT3ZlcnJpZGluZz1lbmFibGVkCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdKYXZhZG9jQ29tbWVudHNWaXNpYmlsaXR5PXB1YmxpYworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nSmF2YWRvY1RhZ3M9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nSmF2YWRvY1RhZ3NPdmVycmlkaW5nPWVuYWJsZWQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0phdmFkb2NUYWdzVmlzaWJpbGl0eT1wdWJsaWMKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ092ZXJyaWRlQW5ub3RhdGlvbj1pZ25vcmUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ1NlcmlhbFZlcnNpb249d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5ub0VmZmVjdEFzc2lnbm1lbnQ9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5ub0ltcGxpY2l0U3RyaW5nQ29udmVyc2lvbj13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm5vbkV4dGVybmFsaXplZFN0cmluZ0xpdGVyYWw9aWdub3JlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm51bGxSZWZlcmVuY2U9aWdub3JlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm92ZXJyaWRpbmdQYWNrYWdlRGVmYXVsdE1ldGhvZD13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnBhcmFtZXRlckFzc2lnbm1lbnQ9aWdub3JlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnBvc3NpYmxlQWNjaWRlbnRhbEJvb2xlYW5Bc3NpZ25tZW50PXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ucG90ZW50aWFsTnVsbFJlZmVyZW5jZT1pZ25vcmUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ucmF3VHlwZVJlZmVyZW5jZT13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnJlZHVuZGFudE51bGxDaGVjaz1pZ25vcmUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uc3BlY2lhbFBhcmFtZXRlckhpZGluZ0ZpZWxkPWRpc2FibGVkCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnN0YXRpY0FjY2Vzc1JlY2VpdmVyPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uc3VwcHJlc3NXYXJuaW5ncz1lbmFibGVkCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnN5bnRoZXRpY0FjY2Vzc0VtdWxhdGlvbj13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnR5cGVQYXJhbWV0ZXJIaWRpbmc9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bmNoZWNrZWRUeXBlT3BlcmF0aW9uPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5kb2N1bWVudGVkRW1wdHlCbG9jaz13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVuaGFuZGxlZFdhcm5pbmdUb2tlbj13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVubmVjZXNzYXJ5RWxzZT13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVubmVjZXNzYXJ5VHlwZUNoZWNrPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5xdWFsaWZpZWRGaWVsZEFjY2Vzcz1pZ25vcmUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkRGVjbGFyZWRUaHJvd25FeGNlcHRpb249d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWREZWNsYXJlZFRocm93bkV4Y2VwdGlvbldoZW5PdmVycmlkaW5nPWVuYWJsZWQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkSW1wb3J0PXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkTGFiZWw9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRMb2NhbD1pZ25vcmUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkUGFyYW1ldGVyPWlnbm9yZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRQYXJhbWV0ZXJJbmNsdWRlRG9jQ29tbWVudFJlZmVyZW5jZT1lbmFibGVkCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZFBhcmFtZXRlcldoZW5JbXBsZW1lbnRpbmdBYnN0cmFjdD1lbmFibGVkCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZFBhcmFtZXRlcldoZW5PdmVycmlkaW5nQ29uY3JldGU9ZW5hYmxlZAorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRQcml2YXRlTWVtYmVyPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udmFyYXJnc0FyZ3VtZW50TmVlZENhc3Q9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuc291cmNlPTEuNQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kaXNlYXNlbW9kZWxzLmV4YW1wbGUvTUVUQS1JTkYvTUFOSUZFU1QuTUYgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRpc2Vhc2Vtb2RlbHMuZXhhbXBsZS9NRVRBLUlORi9NQU5JRkVTVC5NRgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMjk3ZWIyCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kaXNlYXNlbW9kZWxzLmV4YW1wbGUvTUVUQS1JTkYvTUFOSUZFU1QuTUYKQEAgLTAsMCArMSwxNSBAQAorTWFuaWZlc3QtVmVyc2lvbjogMS4wCitCdW5kbGUtTWFuaWZlc3RWZXJzaW9uOiAyCitCdW5kbGUtTmFtZTogJXBsdWdpbk5hbWUKK0J1bmRsZS1TeW1ib2xpY05hbWU6IG9yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGlzZWFzZW1vZGVscy5leGFtcGxlO3NpbmdsZXRvbjo9dHJ1ZQorQnVuZGxlLVZlcnNpb246IDEuMi4xCitCdW5kbGUtQ2xhc3NQYXRoOiAuCitCdW5kbGUtVmVuZG9yOiAlcHJvdmlkZXJOYW1lCitCdW5kbGUtTG9jYWxpemF0aW9uOiBwbHVnaW4KK0J1bmRsZS1SZXF1aXJlZEV4ZWN1dGlvbkVudmlyb25tZW50OiBKMlNFLTEuNQorRXhwb3J0LVBhY2thZ2U6IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leGFtcGxlLnRlc3RzCitSZXF1aXJlLUJ1bmRsZTogb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzO3Zpc2liaWxpdHk6PXJlZXhwb3J0LAorIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leGFtcGxlLAorIG9yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGlzZWFzZW1vZGVscywKKyBvcmcuanVuaXQ7dmlzaWJpbGl0eTo9cmVleHBvcnQKK0J1bmRsZS1BY3RpdmF0aW9uUG9saWN5OiBsYXp5CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRpc2Vhc2Vtb2RlbHMuZXhhbXBsZS9idWlsZC5wcm9wZXJ0aWVzIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kaXNlYXNlbW9kZWxzLmV4YW1wbGUvYnVpbGQucHJvcGVydGllcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YjVmNDBhCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kaXNlYXNlbW9kZWxzLmV4YW1wbGUvYnVpbGQucHJvcGVydGllcwpAQCAtMCwwICsxLDEzIEBACisjIDxjb3B5cmlnaHQ+CisjIDwvY29weXJpZ2h0PgorIworIyAkSWQkCisKK2Jpbi5pbmNsdWRlcyA9IC4sXAorICAgICAgICAgICAgICAgTUVUQS1JTkYvLFwKKyAgICAgICAgICAgICAgIG5vdGljZS5odG1sLFwKKyAgICAgICAgICAgICAgIGVwbC12MTAuaHRtbCxcCisgICAgICAgICAgICAgICBwbHVnaW4ucHJvcGVydGllcworamFycy5jb21waWxlLm9yZGVyID0gLgorc291cmNlLi4gPSBzcmMvCitvdXRwdXQuLiA9IGJpbi8KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGlzZWFzZW1vZGVscy5leGFtcGxlL2VwbC12MTAuaHRtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGlzZWFzZW1vZGVscy5leGFtcGxlL2VwbC12MTAuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZDRiMTk2Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kaXNlYXNlbW9kZWxzLmV4YW1wbGUvZXBsLXYxMC5odG1sCkBAIC0wLDAgKzEsMzI4IEBACis8aHRtbCB4bWxuczpvPSJ1cm46c2NoZW1hcy1taWNyb3NvZnQtY29tOm9mZmljZTpvZmZpY2UiCit4bWxuczp3PSJ1cm46c2NoZW1hcy1taWNyb3NvZnQtY29tOm9mZmljZTp3b3JkIgoreG1sbnM9Imh0dHA6Ly93d3cudzMub3JnL1RSL1JFQy1odG1sNDAiPgorCis8aGVhZD4KKzxtZXRhIGh0dHAtZXF1aXY9Q29udGVudC1UeXBlIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD13aW5kb3dzLTEyNTIiPgorPG1ldGEgbmFtZT1Qcm9nSWQgY29udGVudD1Xb3JkLkRvY3VtZW50PgorPG1ldGEgbmFtZT1HZW5lcmF0b3IgY29udGVudD0iTWljcm9zb2Z0IFdvcmQgOSI+Cis8bWV0YSBuYW1lPU9yaWdpbmF0b3IgY29udGVudD0iTWljcm9zb2Z0IFdvcmQgOSI+Cis8bGluayByZWw9RmlsZS1MaXN0CitocmVmPSIuL0VjbGlwc2UlMjBFUEwlMjAyMDAzXzExXzEwJTIwRmluYWxfZmlsZXMvZmlsZWxpc3QueG1sIj4KKzx0aXRsZT5FY2xpcHNlIFB1YmxpYyBMaWNlbnNlIC0gVmVyc2lvbiAxLjA8L3RpdGxlPgorPCEtLVtpZiBndGUgbXNvIDldPjx4bWw+CisgPG86RG9jdW1lbnRQcm9wZXJ0aWVzPgorICA8bzpSZXZpc2lvbj4yPC9vOlJldmlzaW9uPgorICA8bzpUb3RhbFRpbWU+MzwvbzpUb3RhbFRpbWU+CisgIDxvOkNyZWF0ZWQ+MjAwNC0wMy0wNVQyMzowMzowMFo8L286Q3JlYXRlZD4KKyAgPG86TGFzdFNhdmVkPjIwMDQtMDMtMDVUMjM6MDM6MDBaPC9vOkxhc3RTYXZlZD4KKyAgPG86UGFnZXM+NDwvbzpQYWdlcz4KKyAgPG86V29yZHM+MTYyNjwvbzpXb3Jkcz4KKyAgPG86Q2hhcmFjdGVycz45MjcwPC9vOkNoYXJhY3RlcnM+CisgICA8bzpMaW5lcz43NzwvbzpMaW5lcz4KKyAgPG86UGFyYWdyYXBocz4xODwvbzpQYXJhZ3JhcGhzPgorICA8bzpDaGFyYWN0ZXJzV2l0aFNwYWNlcz4xMTM4NDwvbzpDaGFyYWN0ZXJzV2l0aFNwYWNlcz4KKyAgPG86VmVyc2lvbj45LjQ0MDI8L286VmVyc2lvbj4KKyA8L286RG9jdW1lbnRQcm9wZXJ0aWVzPgorPC94bWw+PCFbZW5kaWZdLS0+PCEtLVtpZiBndGUgbXNvIDldPjx4bWw+CisgPHc6V29yZERvY3VtZW50PgorICA8dzpUcmFja1JldmlzaW9ucy8+CisgPC93OldvcmREb2N1bWVudD4KKzwveG1sPjwhW2VuZGlmXS0tPgorPHN0eWxlPgorPCEtLQorIC8qIEZvbnQgRGVmaW5pdGlvbnMgKi8KK0Bmb250LWZhY2UKKwl7Zm9udC1mYW1pbHk6VGFob21hOworCXBhbm9zZS0xOjIgMTEgNiA0IDMgNSA0IDQgMiA0OworCW1zby1mb250LWNoYXJzZXQ6MDsKKwltc28tZ2VuZXJpYy1mb250LWZhbWlseTpzd2lzczsKKwltc28tZm9udC1waXRjaDp2YXJpYWJsZTsKKwltc28tZm9udC1zaWduYXR1cmU6NTUzNjc5NDk1IC0yMTQ3NDgzNjQ4IDggMCA2NjA0NyAwO30KKyAvKiBTdHlsZSBEZWZpbml0aW9ucyAqLworcC5Nc29Ob3JtYWwsIGxpLk1zb05vcm1hbCwgZGl2Lk1zb05vcm1hbAorCXttc28tc3R5bGUtcGFyZW50OiIiOworCW1hcmdpbjowaW47CisJbWFyZ2luLWJvdHRvbTouMDAwMXB0OworCW1zby1wYWdpbmF0aW9uOndpZG93LW9ycGhhbjsKKwlmb250LXNpemU6MTIuMHB0OworCWZvbnQtZmFtaWx5OiJUaW1lcyBOZXcgUm9tYW4iOworCW1zby1mYXJlYXN0LWZvbnQtZmFtaWx5OiJUaW1lcyBOZXcgUm9tYW4iO30KK3AKKwl7bWFyZ2luLXJpZ2h0OjBpbjsKKwltc28tbWFyZ2luLXRvcC1hbHQ6YXV0bzsKKwltc28tbWFyZ2luLWJvdHRvbS1hbHQ6YXV0bzsKKwltYXJnaW4tbGVmdDowaW47CisJbXNvLXBhZ2luYXRpb246d2lkb3ctb3JwaGFuOworCWZvbnQtc2l6ZToxMi4wcHQ7CisJZm9udC1mYW1pbHk6IlRpbWVzIE5ldyBSb21hbiI7CisJbXNvLWZhcmVhc3QtZm9udC1mYW1pbHk6IlRpbWVzIE5ldyBSb21hbiI7fQorcC5CYWxsb29uVGV4dCwgbGkuQmFsbG9vblRleHQsIGRpdi5CYWxsb29uVGV4dAorCXttc28tc3R5bGUtbmFtZToiQmFsbG9vbiBUZXh0IjsKKwltYXJnaW46MGluOworCW1hcmdpbi1ib3R0b206LjAwMDFwdDsKKwltc28tcGFnaW5hdGlvbjp3aWRvdy1vcnBoYW47CisJZm9udC1zaXplOjguMHB0OworCWZvbnQtZmFtaWx5OlRhaG9tYTsKKwltc28tZmFyZWFzdC1mb250LWZhbWlseToiVGltZXMgTmV3IFJvbWFuIjt9CitAcGFnZSBTZWN0aW9uMQorCXtzaXplOjguNWluIDExLjBpbjsKKwltYXJnaW46MS4waW4gMS4yNWluIDEuMGluIDEuMjVpbjsKKwltc28taGVhZGVyLW1hcmdpbjouNWluOworCW1zby1mb290ZXItbWFyZ2luOi41aW47CisJbXNvLXBhcGVyLXNvdXJjZTowO30KK2Rpdi5TZWN0aW9uMQorCXtwYWdlOlNlY3Rpb24xO30KKy0tPgorPC9zdHlsZT4KKzwvaGVhZD4KKworPGJvZHkgbGFuZz1FTi1VUyBzdHlsZT0ndGFiLWludGVydmFsOi41aW4nPgorCis8ZGl2IGNsYXNzPVNlY3Rpb24xPgorCis8cCBhbGlnbj1jZW50ZXIgc3R5bGU9J3RleHQtYWxpZ246Y2VudGVyJz48Yj5FY2xpcHNlIFB1YmxpYyBMaWNlbnNlIC0gdiAxLjA8L2I+Cis8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5USEUgQUNDT01QQU5ZSU5HIFBST0dSQU0gSVMgUFJPVklERUQgVU5ERVIKK1RIRSBURVJNUyBPRiBUSElTIEVDTElQU0UgUFVCTElDIExJQ0VOU0UgKCZxdW90O0FHUkVFTUVOVCZxdW90OykuIEFOWSBVU0UsCitSRVBST0RVQ1RJT04gT1IgRElTVFJJQlVUSU9OIE9GIFRIRSBQUk9HUkFNIENPTlNUSVRVVEVTIFJFQ0lQSUVOVCdTIEFDQ0VQVEFOQ0UKK09GIFRISVMgQUdSRUVNRU5ULjwvc3Bhbj4gPC9wPgorCis8cD48Yj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+MS4gREVGSU5JVElPTlM8L3NwYW4+PC9iPiA8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4mcXVvdDtDb250cmlidXRpb24mcXVvdDsgbWVhbnM6PC9zcGFuPiA8L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmEpCitpbiB0aGUgY2FzZSBvZiB0aGUgaW5pdGlhbCBDb250cmlidXRvciwgdGhlIGluaXRpYWwgY29kZSBhbmQgZG9jdW1lbnRhdGlvbgorZGlzdHJpYnV0ZWQgdW5kZXIgdGhpcyBBZ3JlZW1lbnQsIGFuZDxiciBjbGVhcj1sZWZ0PgorYikgaW4gdGhlIGNhc2Ugb2YgZWFjaCBzdWJzZXF1ZW50IENvbnRyaWJ1dG9yOjwvc3Bhbj48L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmkpCitjaGFuZ2VzIHRvIHRoZSBQcm9ncmFtLCBhbmQ8L3NwYW4+PC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5paSkKK2FkZGl0aW9ucyB0byB0aGUgUHJvZ3JhbTs8L3NwYW4+PC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz53aGVyZQorc3VjaCBjaGFuZ2VzIGFuZC9vciBhZGRpdGlvbnMgdG8gdGhlIFByb2dyYW0gb3JpZ2luYXRlIGZyb20gYW5kIGFyZSBkaXN0cmlidXRlZAorYnkgdGhhdCBwYXJ0aWN1bGFyIENvbnRyaWJ1dG9yLiBBIENvbnRyaWJ1dGlvbiAnb3JpZ2luYXRlcycgZnJvbSBhIENvbnRyaWJ1dG9yCitpZiBpdCB3YXMgYWRkZWQgdG8gdGhlIFByb2dyYW0gYnkgc3VjaCBDb250cmlidXRvciBpdHNlbGYgb3IgYW55b25lIGFjdGluZyBvbgorc3VjaCBDb250cmlidXRvcidzIGJlaGFsZi4gQ29udHJpYnV0aW9ucyBkbyBub3QgaW5jbHVkZSBhZGRpdGlvbnMgdG8gdGhlCitQcm9ncmFtIHdoaWNoOiAoaSkgYXJlIHNlcGFyYXRlIG1vZHVsZXMgb2Ygc29mdHdhcmUgZGlzdHJpYnV0ZWQgaW4gY29uanVuY3Rpb24KK3dpdGggdGhlIFByb2dyYW0gdW5kZXIgdGhlaXIgb3duIGxpY2Vuc2UgYWdyZWVtZW50LCBhbmQgKGlpKSBhcmUgbm90IGRlcml2YXRpdmUKK3dvcmtzIG9mIHRoZSBQcm9ncmFtLiA8L3NwYW4+PC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+JnF1b3Q7Q29udHJpYnV0b3ImcXVvdDsgbWVhbnMgYW55IHBlcnNvbiBvcgorZW50aXR5IHRoYXQgZGlzdHJpYnV0ZXMgdGhlIFByb2dyYW0uPC9zcGFuPiA8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4mcXVvdDtMaWNlbnNlZCBQYXRlbnRzICZxdW90OyBtZWFuIHBhdGVudAorY2xhaW1zIGxpY2Vuc2FibGUgYnkgYSBDb250cmlidXRvciB3aGljaCBhcmUgbmVjZXNzYXJpbHkgaW5mcmluZ2VkIGJ5IHRoZSB1c2UKK29yIHNhbGUgb2YgaXRzIENvbnRyaWJ1dGlvbiBhbG9uZSBvciB3aGVuIGNvbWJpbmVkIHdpdGggdGhlIFByb2dyYW0uIDwvc3Bhbj48L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4mcXVvdDtQcm9ncmFtJnF1b3Q7IG1lYW5zIHRoZSBDb250cmlidXRpb25zCitkaXN0cmlidXRlZCBpbiBhY2NvcmRhbmNlIHdpdGggdGhpcyBBZ3JlZW1lbnQuPC9zcGFuPiA8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4mcXVvdDtSZWNpcGllbnQmcXVvdDsgbWVhbnMgYW55b25lIHdobworcmVjZWl2ZXMgdGhlIFByb2dyYW0gdW5kZXIgdGhpcyBBZ3JlZW1lbnQsIGluY2x1ZGluZyBhbGwgQ29udHJpYnV0b3JzLjwvc3Bhbj4gPC9wPgorCis8cD48Yj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+Mi4gR1JBTlQgT0YgUklHSFRTPC9zcGFuPjwvYj4gPC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5hKQorU3ViamVjdCB0byB0aGUgdGVybXMgb2YgdGhpcyBBZ3JlZW1lbnQsIGVhY2ggQ29udHJpYnV0b3IgaGVyZWJ5IGdyYW50cyBSZWNpcGllbnQKK2Egbm9uLWV4Y2x1c2l2ZSwgd29ybGR3aWRlLCByb3lhbHR5LWZyZWUgY29weXJpZ2h0IGxpY2Vuc2UgdG88c3Bhbgorc3R5bGU9J2NvbG9yOnJlZCc+IDwvc3Bhbj5yZXByb2R1Y2UsIHByZXBhcmUgZGVyaXZhdGl2ZSB3b3JrcyBvZiwgcHVibGljbHkKK2Rpc3BsYXksIHB1YmxpY2x5IHBlcmZvcm0sIGRpc3RyaWJ1dGUgYW5kIHN1YmxpY2Vuc2UgdGhlIENvbnRyaWJ1dGlvbiBvZiBzdWNoCitDb250cmlidXRvciwgaWYgYW55LCBhbmQgc3VjaCBkZXJpdmF0aXZlIHdvcmtzLCBpbiBzb3VyY2UgY29kZSBhbmQgb2JqZWN0IGNvZGUKK2Zvcm0uPC9zcGFuPjwvcD4KKworPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YikKK1N1YmplY3QgdG8gdGhlIHRlcm1zIG9mIHRoaXMgQWdyZWVtZW50LCBlYWNoIENvbnRyaWJ1dG9yIGhlcmVieSBncmFudHMKK1JlY2lwaWVudCBhIG5vbi1leGNsdXNpdmUsIHdvcmxkd2lkZSw8c3BhbiBzdHlsZT0nY29sb3I6Z3JlZW4nPiA8L3NwYW4+cm95YWx0eS1mcmVlCitwYXRlbnQgbGljZW5zZSB1bmRlciBMaWNlbnNlZCBQYXRlbnRzIHRvIG1ha2UsIHVzZSwgc2VsbCwgb2ZmZXIgdG8gc2VsbCwgaW1wb3J0CithbmQgb3RoZXJ3aXNlIHRyYW5zZmVyIHRoZSBDb250cmlidXRpb24gb2Ygc3VjaCBDb250cmlidXRvciwgaWYgYW55LCBpbiBzb3VyY2UKK2NvZGUgYW5kIG9iamVjdCBjb2RlIGZvcm0uIFRoaXMgcGF0ZW50IGxpY2Vuc2Ugc2hhbGwgYXBwbHkgdG8gdGhlIGNvbWJpbmF0aW9uCitvZiB0aGUgQ29udHJpYnV0aW9uIGFuZCB0aGUgUHJvZ3JhbSBpZiwgYXQgdGhlIHRpbWUgdGhlIENvbnRyaWJ1dGlvbiBpcyBhZGRlZAorYnkgdGhlIENvbnRyaWJ1dG9yLCBzdWNoIGFkZGl0aW9uIG9mIHRoZSBDb250cmlidXRpb24gY2F1c2VzIHN1Y2ggY29tYmluYXRpb24KK3RvIGJlIGNvdmVyZWQgYnkgdGhlIExpY2Vuc2VkIFBhdGVudHMuIFRoZSBwYXRlbnQgbGljZW5zZSBzaGFsbCBub3QgYXBwbHkgdG8KK2FueSBvdGhlciBjb21iaW5hdGlvbnMgd2hpY2ggaW5jbHVkZSB0aGUgQ29udHJpYnV0aW9uLiBObyBoYXJkd2FyZSBwZXIgc2UgaXMKK2xpY2Vuc2VkIGhlcmV1bmRlci4gPC9zcGFuPjwvcD4KKworPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YykKK1JlY2lwaWVudCB1bmRlcnN0YW5kcyB0aGF0IGFsdGhvdWdoIGVhY2ggQ29udHJpYnV0b3IgZ3JhbnRzIHRoZSBsaWNlbnNlcyB0byBpdHMKK0NvbnRyaWJ1dGlvbnMgc2V0IGZvcnRoIGhlcmVpbiwgbm8gYXNzdXJhbmNlcyBhcmUgcHJvdmlkZWQgYnkgYW55IENvbnRyaWJ1dG9yCit0aGF0IHRoZSBQcm9ncmFtIGRvZXMgbm90IGluZnJpbmdlIHRoZSBwYXRlbnQgb3Igb3RoZXIgaW50ZWxsZWN0dWFsIHByb3BlcnR5CityaWdodHMgb2YgYW55IG90aGVyIGVudGl0eS4gRWFjaCBDb250cmlidXRvciBkaXNjbGFpbXMgYW55IGxpYWJpbGl0eSB0byBSZWNpcGllbnQKK2ZvciBjbGFpbXMgYnJvdWdodCBieSBhbnkgb3RoZXIgZW50aXR5IGJhc2VkIG9uIGluZnJpbmdlbWVudCBvZiBpbnRlbGxlY3R1YWwKK3Byb3BlcnR5IHJpZ2h0cyBvciBvdGhlcndpc2UuIEFzIGEgY29uZGl0aW9uIHRvIGV4ZXJjaXNpbmcgdGhlIHJpZ2h0cyBhbmQKK2xpY2Vuc2VzIGdyYW50ZWQgaGVyZXVuZGVyLCBlYWNoIFJlY2lwaWVudCBoZXJlYnkgYXNzdW1lcyBzb2xlIHJlc3BvbnNpYmlsaXR5Cit0byBzZWN1cmUgYW55IG90aGVyIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgbmVlZGVkLCBpZiBhbnkuIEZvciBleGFtcGxlLAoraWYgYSB0aGlyZCBwYXJ0eSBwYXRlbnQgbGljZW5zZSBpcyByZXF1aXJlZCB0byBhbGxvdyBSZWNpcGllbnQgdG8gZGlzdHJpYnV0ZQordGhlIFByb2dyYW0sIGl0IGlzIFJlY2lwaWVudCdzIHJlc3BvbnNpYmlsaXR5IHRvIGFjcXVpcmUgdGhhdCBsaWNlbnNlIGJlZm9yZQorZGlzdHJpYnV0aW5nIHRoZSBQcm9ncmFtLjwvc3Bhbj48L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmQpCitFYWNoIENvbnRyaWJ1dG9yIHJlcHJlc2VudHMgdGhhdCB0byBpdHMga25vd2xlZGdlIGl0IGhhcyBzdWZmaWNpZW50IGNvcHlyaWdodAorcmlnaHRzIGluIGl0cyBDb250cmlidXRpb24sIGlmIGFueSwgdG8gZ3JhbnQgdGhlIGNvcHlyaWdodCBsaWNlbnNlIHNldCBmb3J0aCBpbgordGhpcyBBZ3JlZW1lbnQuIDwvc3Bhbj48L3A+CisKKzxwPjxiPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4zLiBSRVFVSVJFTUVOVFM8L3NwYW4+PC9iPiA8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5BIENvbnRyaWJ1dG9yIG1heSBjaG9vc2UgdG8gZGlzdHJpYnV0ZSB0aGUKK1Byb2dyYW0gaW4gb2JqZWN0IGNvZGUgZm9ybSB1bmRlciBpdHMgb3duIGxpY2Vuc2UgYWdyZWVtZW50LCBwcm92aWRlZCB0aGF0Ojwvc3Bhbj4KKzwvcD4KKworPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YSkKK2l0IGNvbXBsaWVzIHdpdGggdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoaXMgQWdyZWVtZW50OyBhbmQ8L3NwYW4+PC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5iKQoraXRzIGxpY2Vuc2UgYWdyZWVtZW50Ojwvc3Bhbj48L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmkpCitlZmZlY3RpdmVseSBkaXNjbGFpbXMgb24gYmVoYWxmIG9mIGFsbCBDb250cmlidXRvcnMgYWxsIHdhcnJhbnRpZXMgYW5kCitjb25kaXRpb25zLCBleHByZXNzIGFuZCBpbXBsaWVkLCBpbmNsdWRpbmcgd2FycmFudGllcyBvciBjb25kaXRpb25zIG9mIHRpdGxlCithbmQgbm9uLWluZnJpbmdlbWVudCwgYW5kIGltcGxpZWQgd2FycmFudGllcyBvciBjb25kaXRpb25zIG9mIG1lcmNoYW50YWJpbGl0eQorYW5kIGZpdG5lc3MgZm9yIGEgcGFydGljdWxhciBwdXJwb3NlOyA8L3NwYW4+PC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5paSkKK2VmZmVjdGl2ZWx5IGV4Y2x1ZGVzIG9uIGJlaGFsZiBvZiBhbGwgQ29udHJpYnV0b3JzIGFsbCBsaWFiaWxpdHkgZm9yIGRhbWFnZXMsCitpbmNsdWRpbmcgZGlyZWN0LCBpbmRpcmVjdCwgc3BlY2lhbCwgaW5jaWRlbnRhbCBhbmQgY29uc2VxdWVudGlhbCBkYW1hZ2VzLCBzdWNoCithcyBsb3N0IHByb2ZpdHM7IDwvc3Bhbj48L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmlpaSkKK3N0YXRlcyB0aGF0IGFueSBwcm92aXNpb25zIHdoaWNoIGRpZmZlciBmcm9tIHRoaXMgQWdyZWVtZW50IGFyZSBvZmZlcmVkIGJ5IHRoYXQKK0NvbnRyaWJ1dG9yIGFsb25lIGFuZCBub3QgYnkgYW55IG90aGVyIHBhcnR5OyBhbmQ8L3NwYW4+PC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5pdikKK3N0YXRlcyB0aGF0IHNvdXJjZSBjb2RlIGZvciB0aGUgUHJvZ3JhbSBpcyBhdmFpbGFibGUgZnJvbSBzdWNoIENvbnRyaWJ1dG9yLCBhbmQKK2luZm9ybXMgbGljZW5zZWVzIGhvdyB0byBvYnRhaW4gaXQgaW4gYSByZWFzb25hYmxlIG1hbm5lciBvbiBvciB0aHJvdWdoIGEKK21lZGl1bSBjdXN0b21hcmlseSB1c2VkIGZvciBzb2Z0d2FyZSBleGNoYW5nZS48c3BhbiBzdHlsZT0nY29sb3I6Ymx1ZSc+IDwvc3Bhbj48L3NwYW4+PC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+V2hlbiB0aGUgUHJvZ3JhbSBpcyBtYWRlIGF2YWlsYWJsZSBpbiBzb3VyY2UKK2NvZGUgZm9ybTo8L3NwYW4+IDwvcD4KKworPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YSkKK2l0IG11c3QgYmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhpcyBBZ3JlZW1lbnQ7IGFuZCA8L3NwYW4+PC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5iKSBhCitjb3B5IG9mIHRoaXMgQWdyZWVtZW50IG11c3QgYmUgaW5jbHVkZWQgd2l0aCBlYWNoIGNvcHkgb2YgdGhlIFByb2dyYW0uIDwvc3Bhbj48L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5Db250cmlidXRvcnMgbWF5IG5vdCByZW1vdmUgb3IgYWx0ZXIgYW55Citjb3B5cmlnaHQgbm90aWNlcyBjb250YWluZWQgd2l0aGluIHRoZSBQcm9ncmFtLiA8L3NwYW4+PC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+RWFjaCBDb250cmlidXRvciBtdXN0IGlkZW50aWZ5IGl0c2VsZiBhcyB0aGUKK29yaWdpbmF0b3Igb2YgaXRzIENvbnRyaWJ1dGlvbiwgaWYgYW55LCBpbiBhIG1hbm5lciB0aGF0IHJlYXNvbmFibHkgYWxsb3dzCitzdWJzZXF1ZW50IFJlY2lwaWVudHMgdG8gaWRlbnRpZnkgdGhlIG9yaWdpbmF0b3Igb2YgdGhlIENvbnRyaWJ1dGlvbi4gPC9zcGFuPjwvcD4KKworPHA+PGI+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPjQuIENPTU1FUkNJQUwgRElTVFJJQlVUSU9OPC9zcGFuPjwvYj4gPC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+Q29tbWVyY2lhbCBkaXN0cmlidXRvcnMgb2Ygc29mdHdhcmUgbWF5CithY2NlcHQgY2VydGFpbiByZXNwb25zaWJpbGl0aWVzIHdpdGggcmVzcGVjdCB0byBlbmQgdXNlcnMsIGJ1c2luZXNzIHBhcnRuZXJzCithbmQgdGhlIGxpa2UuIFdoaWxlIHRoaXMgbGljZW5zZSBpcyBpbnRlbmRlZCB0byBmYWNpbGl0YXRlIHRoZSBjb21tZXJjaWFsIHVzZQorb2YgdGhlIFByb2dyYW0sIHRoZSBDb250cmlidXRvciB3aG8gaW5jbHVkZXMgdGhlIFByb2dyYW0gaW4gYSBjb21tZXJjaWFsCitwcm9kdWN0IG9mZmVyaW5nIHNob3VsZCBkbyBzbyBpbiBhIG1hbm5lciB3aGljaCBkb2VzIG5vdCBjcmVhdGUgcG90ZW50aWFsCitsaWFiaWxpdHkgZm9yIG90aGVyIENvbnRyaWJ1dG9ycy4gVGhlcmVmb3JlLCBpZiBhIENvbnRyaWJ1dG9yIGluY2x1ZGVzIHRoZQorUHJvZ3JhbSBpbiBhIGNvbW1lcmNpYWwgcHJvZHVjdCBvZmZlcmluZywgc3VjaCBDb250cmlidXRvciAoJnF1b3Q7Q29tbWVyY2lhbAorQ29udHJpYnV0b3ImcXVvdDspIGhlcmVieSBhZ3JlZXMgdG8gZGVmZW5kIGFuZCBpbmRlbW5pZnkgZXZlcnkgb3RoZXIKK0NvbnRyaWJ1dG9yICgmcXVvdDtJbmRlbW5pZmllZCBDb250cmlidXRvciZxdW90OykgYWdhaW5zdCBhbnkgbG9zc2VzLCBkYW1hZ2VzIGFuZAorY29zdHMgKGNvbGxlY3RpdmVseSAmcXVvdDtMb3NzZXMmcXVvdDspIGFyaXNpbmcgZnJvbSBjbGFpbXMsIGxhd3N1aXRzIGFuZCBvdGhlcgorbGVnYWwgYWN0aW9ucyBicm91Z2h0IGJ5IGEgdGhpcmQgcGFydHkgYWdhaW5zdCB0aGUgSW5kZW1uaWZpZWQgQ29udHJpYnV0b3IgdG8KK3RoZSBleHRlbnQgY2F1c2VkIGJ5IHRoZSBhY3RzIG9yIG9taXNzaW9ucyBvZiBzdWNoIENvbW1lcmNpYWwgQ29udHJpYnV0b3IgaW4KK2Nvbm5lY3Rpb24gd2l0aCBpdHMgZGlzdHJpYnV0aW9uIG9mIHRoZSBQcm9ncmFtIGluIGEgY29tbWVyY2lhbCBwcm9kdWN0CitvZmZlcmluZy4gVGhlIG9ibGlnYXRpb25zIGluIHRoaXMgc2VjdGlvbiBkbyBub3QgYXBwbHkgdG8gYW55IGNsYWltcyBvciBMb3NzZXMKK3JlbGF0aW5nIHRvIGFueSBhY3R1YWwgb3IgYWxsZWdlZCBpbnRlbGxlY3R1YWwgcHJvcGVydHkgaW5mcmluZ2VtZW50LiBJbiBvcmRlcgordG8gcXVhbGlmeSwgYW4gSW5kZW1uaWZpZWQgQ29udHJpYnV0b3IgbXVzdDogYSkgcHJvbXB0bHkgbm90aWZ5IHRoZSBDb21tZXJjaWFsCitDb250cmlidXRvciBpbiB3cml0aW5nIG9mIHN1Y2ggY2xhaW0sIGFuZCBiKSBhbGxvdyB0aGUgQ29tbWVyY2lhbCBDb250cmlidXRvcgordG8gY29udHJvbCwgYW5kIGNvb3BlcmF0ZSB3aXRoIHRoZSBDb21tZXJjaWFsIENvbnRyaWJ1dG9yIGluLCB0aGUgZGVmZW5zZSBhbmQKK2FueSByZWxhdGVkIHNldHRsZW1lbnQgbmVnb3RpYXRpb25zLiBUaGUgSW5kZW1uaWZpZWQgQ29udHJpYnV0b3IgbWF5IHBhcnRpY2lwYXRlCitpbiBhbnkgc3VjaCBjbGFpbSBhdCBpdHMgb3duIGV4cGVuc2UuPC9zcGFuPiA8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5Gb3IgZXhhbXBsZSwgYSBDb250cmlidXRvciBtaWdodCBpbmNsdWRlIHRoZQorUHJvZ3JhbSBpbiBhIGNvbW1lcmNpYWwgcHJvZHVjdCBvZmZlcmluZywgUHJvZHVjdCBYLiBUaGF0IENvbnRyaWJ1dG9yIGlzIHRoZW4gYQorQ29tbWVyY2lhbCBDb250cmlidXRvci4gSWYgdGhhdCBDb21tZXJjaWFsIENvbnRyaWJ1dG9yIHRoZW4gbWFrZXMgcGVyZm9ybWFuY2UKK2NsYWltcywgb3Igb2ZmZXJzIHdhcnJhbnRpZXMgcmVsYXRlZCB0byBQcm9kdWN0IFgsIHRob3NlIHBlcmZvcm1hbmNlIGNsYWltcyBhbmQKK3dhcnJhbnRpZXMgYXJlIHN1Y2ggQ29tbWVyY2lhbCBDb250cmlidXRvcidzIHJlc3BvbnNpYmlsaXR5IGFsb25lLiBVbmRlciB0aGlzCitzZWN0aW9uLCB0aGUgQ29tbWVyY2lhbCBDb250cmlidXRvciB3b3VsZCBoYXZlIHRvIGRlZmVuZCBjbGFpbXMgYWdhaW5zdCB0aGUKK290aGVyIENvbnRyaWJ1dG9ycyByZWxhdGVkIHRvIHRob3NlIHBlcmZvcm1hbmNlIGNsYWltcyBhbmQgd2FycmFudGllcywgYW5kIGlmIGEKK2NvdXJ0IHJlcXVpcmVzIGFueSBvdGhlciBDb250cmlidXRvciB0byBwYXkgYW55IGRhbWFnZXMgYXMgYSByZXN1bHQsIHRoZQorQ29tbWVyY2lhbCBDb250cmlidXRvciBtdXN0IHBheSB0aG9zZSBkYW1hZ2VzLjwvc3Bhbj4gPC9wPgorCis8cD48Yj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+NS4gTk8gV0FSUkFOVFk8L3NwYW4+PC9iPiA8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5FWENFUFQgQVMgRVhQUkVTU0xZIFNFVCBGT1JUSCBJTiBUSElTCitBR1JFRU1FTlQsIFRIRSBQUk9HUkFNIElTIFBST1ZJREVEIE9OIEFOICZxdW90O0FTIElTJnF1b3Q7IEJBU0lTLCBXSVRIT1VUCitXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIEVJVEhFUiBFWFBSRVNTIE9SIElNUExJRUQgSU5DTFVESU5HLAorV0lUSE9VVCBMSU1JVEFUSU9OLCBBTlkgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIFRJVExFLCBOT04tSU5GUklOR0VNRU5ULAorTUVSQ0hBTlRBQklMSVRZIE9SIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBFYWNoIFJlY2lwaWVudCBpcyBzb2xlbHkKK3Jlc3BvbnNpYmxlIGZvciBkZXRlcm1pbmluZyB0aGUgYXBwcm9wcmlhdGVuZXNzIG9mIHVzaW5nIGFuZCBkaXN0cmlidXRpbmcgdGhlCitQcm9ncmFtIGFuZCBhc3N1bWVzIGFsbCByaXNrcyBhc3NvY2lhdGVkIHdpdGggaXRzIGV4ZXJjaXNlIG9mIHJpZ2h0cyB1bmRlciB0aGlzCitBZ3JlZW1lbnQgLCBpbmNsdWRpbmcgYnV0IG5vdCBsaW1pdGVkIHRvIHRoZSByaXNrcyBhbmQgY29zdHMgb2YgcHJvZ3JhbSBlcnJvcnMsCitjb21wbGlhbmNlIHdpdGggYXBwbGljYWJsZSBsYXdzLCBkYW1hZ2UgdG8gb3IgbG9zcyBvZiBkYXRhLCBwcm9ncmFtcyBvcgorZXF1aXBtZW50LCBhbmQgdW5hdmFpbGFiaWxpdHkgb3IgaW50ZXJydXB0aW9uIG9mIG9wZXJhdGlvbnMuIDwvc3Bhbj48L3A+CisKKzxwPjxiPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz42LiBESVNDTEFJTUVSIE9GIExJQUJJTElUWTwvc3Bhbj48L2I+IDwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkVYQ0VQVCBBUyBFWFBSRVNTTFkgU0VUIEZPUlRIIElOIFRISVMKK0FHUkVFTUVOVCwgTkVJVEhFUiBSRUNJUElFTlQgTk9SIEFOWSBDT05UUklCVVRPUlMgU0hBTEwgSEFWRSBBTlkgTElBQklMSVRZIEZPUgorQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisoSU5DTFVESU5HIFdJVEhPVVQgTElNSVRBVElPTiBMT1NUIFBST0ZJVFMpLCBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcKK05FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT1IgRElTVFJJQlVUSU9OIE9GCitUSEUgUFJPR1JBTSBPUiBUSEUgRVhFUkNJU0UgT0YgQU5ZIFJJR0hUUyBHUkFOVEVEIEhFUkVVTkRFUiwgRVZFTiBJRiBBRFZJU0VEIE9GCitUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLjwvc3Bhbj4gPC9wPgorCis8cD48Yj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+Ny4gR0VORVJBTDwvc3Bhbj48L2I+IDwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPklmIGFueSBwcm92aXNpb24gb2YgdGhpcyBBZ3JlZW1lbnQgaXMgaW52YWxpZAorb3IgdW5lbmZvcmNlYWJsZSB1bmRlciBhcHBsaWNhYmxlIGxhdywgaXQgc2hhbGwgbm90IGFmZmVjdCB0aGUgdmFsaWRpdHkgb3IKK2VuZm9yY2VhYmlsaXR5IG9mIHRoZSByZW1haW5kZXIgb2YgdGhlIHRlcm1zIG9mIHRoaXMgQWdyZWVtZW50LCBhbmQgd2l0aG91dAorZnVydGhlciBhY3Rpb24gYnkgdGhlIHBhcnRpZXMgaGVyZXRvLCBzdWNoIHByb3Zpc2lvbiBzaGFsbCBiZSByZWZvcm1lZCB0byB0aGUKK21pbmltdW0gZXh0ZW50IG5lY2Vzc2FyeSB0byBtYWtlIHN1Y2ggcHJvdmlzaW9uIHZhbGlkIGFuZCBlbmZvcmNlYWJsZS48L3NwYW4+IDwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPklmIFJlY2lwaWVudCBpbnN0aXR1dGVzIHBhdGVudCBsaXRpZ2F0aW9uCithZ2FpbnN0IGFueSBlbnRpdHkgKGluY2x1ZGluZyBhIGNyb3NzLWNsYWltIG9yIGNvdW50ZXJjbGFpbSBpbiBhIGxhd3N1aXQpCithbGxlZ2luZyB0aGF0IHRoZSBQcm9ncmFtIGl0c2VsZiAoZXhjbHVkaW5nIGNvbWJpbmF0aW9ucyBvZiB0aGUgUHJvZ3JhbSB3aXRoCitvdGhlciBzb2Z0d2FyZSBvciBoYXJkd2FyZSkgaW5mcmluZ2VzIHN1Y2ggUmVjaXBpZW50J3MgcGF0ZW50KHMpLCB0aGVuIHN1Y2gKK1JlY2lwaWVudCdzIHJpZ2h0cyBncmFudGVkIHVuZGVyIFNlY3Rpb24gMihiKSBzaGFsbCB0ZXJtaW5hdGUgYXMgb2YgdGhlIGRhdGUKK3N1Y2ggbGl0aWdhdGlvbiBpcyBmaWxlZC4gPC9zcGFuPjwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkFsbCBSZWNpcGllbnQncyByaWdodHMgdW5kZXIgdGhpcyBBZ3JlZW1lbnQKK3NoYWxsIHRlcm1pbmF0ZSBpZiBpdCBmYWlscyB0byBjb21wbHkgd2l0aCBhbnkgb2YgdGhlIG1hdGVyaWFsIHRlcm1zIG9yCitjb25kaXRpb25zIG9mIHRoaXMgQWdyZWVtZW50IGFuZCBkb2VzIG5vdCBjdXJlIHN1Y2ggZmFpbHVyZSBpbiBhIHJlYXNvbmFibGUKK3BlcmlvZCBvZiB0aW1lIGFmdGVyIGJlY29taW5nIGF3YXJlIG9mIHN1Y2ggbm9uY29tcGxpYW5jZS4gSWYgYWxsIFJlY2lwaWVudCdzCityaWdodHMgdW5kZXIgdGhpcyBBZ3JlZW1lbnQgdGVybWluYXRlLCBSZWNpcGllbnQgYWdyZWVzIHRvIGNlYXNlIHVzZSBhbmQKK2Rpc3RyaWJ1dGlvbiBvZiB0aGUgUHJvZ3JhbSBhcyBzb29uIGFzIHJlYXNvbmFibHkgcHJhY3RpY2FibGUuIEhvd2V2ZXIsCitSZWNpcGllbnQncyBvYmxpZ2F0aW9ucyB1bmRlciB0aGlzIEFncmVlbWVudCBhbmQgYW55IGxpY2Vuc2VzIGdyYW50ZWQgYnkKK1JlY2lwaWVudCByZWxhdGluZyB0byB0aGUgUHJvZ3JhbSBzaGFsbCBjb250aW51ZSBhbmQgc3Vydml2ZS4gPC9zcGFuPjwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkV2ZXJ5b25lIGlzIHBlcm1pdHRlZCB0byBjb3B5IGFuZCBkaXN0cmlidXRlCitjb3BpZXMgb2YgdGhpcyBBZ3JlZW1lbnQsIGJ1dCBpbiBvcmRlciB0byBhdm9pZCBpbmNvbnNpc3RlbmN5IHRoZSBBZ3JlZW1lbnQgaXMKK2NvcHlyaWdodGVkIGFuZCBtYXkgb25seSBiZSBtb2RpZmllZCBpbiB0aGUgZm9sbG93aW5nIG1hbm5lci4gVGhlIEFncmVlbWVudAorU3Rld2FyZCByZXNlcnZlcyB0aGUgcmlnaHQgdG8gcHVibGlzaCBuZXcgdmVyc2lvbnMgKGluY2x1ZGluZyByZXZpc2lvbnMpIG9mCit0aGlzIEFncmVlbWVudCBmcm9tIHRpbWUgdG8gdGltZS4gTm8gb25lIG90aGVyIHRoYW4gdGhlIEFncmVlbWVudCBTdGV3YXJkIGhhcwordGhlIHJpZ2h0IHRvIG1vZGlmeSB0aGlzIEFncmVlbWVudC4gVGhlIEVjbGlwc2UgRm91bmRhdGlvbiBpcyB0aGUgaW5pdGlhbAorQWdyZWVtZW50IFN0ZXdhcmQuIFRoZSBFY2xpcHNlIEZvdW5kYXRpb24gbWF5IGFzc2lnbiB0aGUgcmVzcG9uc2liaWxpdHkgdG8KK3NlcnZlIGFzIHRoZSBBZ3JlZW1lbnQgU3Rld2FyZCB0byBhIHN1aXRhYmxlIHNlcGFyYXRlIGVudGl0eS4gRWFjaCBuZXcgdmVyc2lvbgorb2YgdGhlIEFncmVlbWVudCB3aWxsIGJlIGdpdmVuIGEgZGlzdGluZ3Vpc2hpbmcgdmVyc2lvbiBudW1iZXIuIFRoZSBQcm9ncmFtCisoaW5jbHVkaW5nIENvbnRyaWJ1dGlvbnMpIG1heSBhbHdheXMgYmUgZGlzdHJpYnV0ZWQgc3ViamVjdCB0byB0aGUgdmVyc2lvbiBvZgordGhlIEFncmVlbWVudCB1bmRlciB3aGljaCBpdCB3YXMgcmVjZWl2ZWQuIEluIGFkZGl0aW9uLCBhZnRlciBhIG5ldyB2ZXJzaW9uIG9mCit0aGUgQWdyZWVtZW50IGlzIHB1Ymxpc2hlZCwgQ29udHJpYnV0b3IgbWF5IGVsZWN0IHRvIGRpc3RyaWJ1dGUgdGhlIFByb2dyYW0KKyhpbmNsdWRpbmcgaXRzIENvbnRyaWJ1dGlvbnMpIHVuZGVyIHRoZSBuZXcgdmVyc2lvbi4gRXhjZXB0IGFzIGV4cHJlc3NseSBzdGF0ZWQKK2luIFNlY3Rpb25zIDIoYSkgYW5kIDIoYikgYWJvdmUsIFJlY2lwaWVudCByZWNlaXZlcyBubyByaWdodHMgb3IgbGljZW5zZXMgdG8KK3RoZSBpbnRlbGxlY3R1YWwgcHJvcGVydHkgb2YgYW55IENvbnRyaWJ1dG9yIHVuZGVyIHRoaXMgQWdyZWVtZW50LCB3aGV0aGVyCitleHByZXNzbHksIGJ5IGltcGxpY2F0aW9uLCBlc3RvcHBlbCBvciBvdGhlcndpc2UuIEFsbCByaWdodHMgaW4gdGhlIFByb2dyYW0gbm90CitleHByZXNzbHkgZ3JhbnRlZCB1bmRlciB0aGlzIEFncmVlbWVudCBhcmUgcmVzZXJ2ZWQuPC9zcGFuPiA8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5UaGlzIEFncmVlbWVudCBpcyBnb3Zlcm5lZCBieSB0aGUgbGF3cyBvZiB0aGUKK1N0YXRlIG9mIE5ldyBZb3JrIGFuZCB0aGUgaW50ZWxsZWN0dWFsIHByb3BlcnR5IGxhd3Mgb2YgdGhlIFVuaXRlZCBTdGF0ZXMgb2YKK0FtZXJpY2EuIE5vIHBhcnR5IHRvIHRoaXMgQWdyZWVtZW50IHdpbGwgYnJpbmcgYSBsZWdhbCBhY3Rpb24gdW5kZXIgdGhpcworQWdyZWVtZW50IG1vcmUgdGhhbiBvbmUgeWVhciBhZnRlciB0aGUgY2F1c2Ugb2YgYWN0aW9uIGFyb3NlLiBFYWNoIHBhcnR5IHdhaXZlcworaXRzIHJpZ2h0cyB0byBhIGp1cnkgdHJpYWwgaW4gYW55IHJlc3VsdGluZyBsaXRpZ2F0aW9uLjwvc3Bhbj4gPC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWw+PCFbaWYgIXN1cHBvcnRFbXB0eVBhcmFzXT4mbmJzcDs8IVtlbmRpZl0+PG86cD48L286cD48L3A+CisKKzwvZGl2PgorCis8L2JvZHk+CisKKzwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRpc2Vhc2Vtb2RlbHMuZXhhbXBsZS9ub3RpY2UuaHRtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGlzZWFzZW1vZGVscy5leGFtcGxlL25vdGljZS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM2YWY5NjYKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRpc2Vhc2Vtb2RlbHMuZXhhbXBsZS9ub3RpY2UuaHRtbApAQCAtMCwwICsxLDc5IEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wLy9FTiI+Cis8aHRtbD4KKzxoZWFkPgorPG1ldGEgaHR0cC1lcXVpdj1Db250ZW50LVR5cGUgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PWlzby04ODU5LTEiPgorPHRpdGxlPkVjbGlwc2Uub3JnIFNvZnR3YXJlIFVzZXIgQWdyZWVtZW50PC90aXRsZT4KKzwvaGVhZD4KKworPGJvZHkgbGFuZz0iRU4tVVMiIGxpbms9Ymx1ZSB2bGluaz1wdXJwbGU+Cis8aDI+RWNsaXBzZSBGb3VuZGF0aW9uIFNvZnR3YXJlIFVzZXIgQWdyZWVtZW50PC9oMj4KKzxwPk1hcmNoIDE3LCAyMDA1PC9wPgorCis8aDM+VXNhZ2UgT2YgQ29udGVudDwvaDM+CisKKzxwPlRIRSBFQ0xJUFNFIEZPVU5EQVRJT04gTUFLRVMgQVZBSUxBQkxFIFNPRlRXQVJFLCBET0NVTUVOVEFUSU9OLCBJTkZPUk1BVElPTiBBTkQvT1IgT1RIRVIgTUFURVJJQUxTIEZPUiBPUEVOIFNPVVJDRSBQUk9KRUNUUworICAgKENPTExFQ1RJVkVMWSAmcXVvdDtDT05URU5UJnF1b3Q7KS4gIFVTRSBPRiBUSEUgQ09OVEVOVCBJUyBHT1ZFUk5FRCBCWSBUSEUgVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgVEhJUyBBR1JFRU1FTlQgQU5EL09SIFRIRSBURVJNUyBBTkQKKyAgIENPTkRJVElPTlMgT0YgTElDRU5TRSBBR1JFRU1FTlRTIE9SIE5PVElDRVMgSU5ESUNBVEVEIE9SIFJFRkVSRU5DRUQgQkVMT1cuICBCWSBVU0lORyBUSEUgQ09OVEVOVCwgWU9VIEFHUkVFIFRIQVQgWU9VUiBVU0UKKyAgIE9GIFRIRSBDT05URU5UIElTIEdPVkVSTkVEIEJZIFRISVMgQUdSRUVNRU5UIEFORC9PUiBUSEUgVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgQU5ZIEFQUExJQ0FCTEUgTElDRU5TRSBBR1JFRU1FTlRTIE9SCisgICBOT1RJQ0VTIElORElDQVRFRCBPUiBSRUZFUkVOQ0VEIEJFTE9XLiAgSUYgWU9VIERPIE5PVCBBR1JFRSBUTyBUSEUgVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgVEhJUyBBR1JFRU1FTlQgQU5EIFRIRSBURVJNUyBBTkQKKyAgIENPTkRJVElPTlMgT0YgQU5ZIEFQUExJQ0FCTEUgTElDRU5TRSBBR1JFRU1FTlRTIE9SIE5PVElDRVMgSU5ESUNBVEVEIE9SIFJFRkVSRU5DRUQgQkVMT1csIFRIRU4gWU9VIE1BWSBOT1QgVVNFIFRIRSBDT05URU5ULjwvcD4KKyAgIAorPGgzPkFwcGxpY2FibGUgTGljZW5zZXM8L2gzPiAgIAorICAgCis8cD5Vbmxlc3Mgb3RoZXJ3aXNlIGluZGljYXRlZCwgYWxsIENvbnRlbnQgbWFkZSBhdmFpbGFibGUgYnkgdGhlIEVjbGlwc2UgRm91bmRhdGlvbiBpcyBwcm92aWRlZCB0byB5b3UgdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4wCisgICAoJnF1b3Q7RVBMJnF1b3Q7KS4gIEEgY29weSBvZiB0aGUgRVBMIGlzIHByb3ZpZGVkIHdpdGggdGhpcyBDb250ZW50IGFuZCBpcyBhbHNvIGF2YWlsYWJsZSBhdCA8YSBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbCI+aHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWw8L2E+LgorICAgRm9yIHB1cnBvc2VzIG9mIHRoZSBFUEwsICZxdW90O1Byb2dyYW0mcXVvdDsgd2lsbCBtZWFuIHRoZSBDb250ZW50LjwvcD4KKworPHA+Q29udGVudCBpbmNsdWRlcywgYnV0IGlzIG5vdCBsaW1pdGVkIHRvLCBzb3VyY2UgY29kZSwgb2JqZWN0IGNvZGUsIGRvY3VtZW50YXRpb24gYW5kIG90aGVyIGZpbGVzIG1haW50YWluZWQgaW4gdGhlIEVjbGlwc2Uub3JnIENWUyByZXBvc2l0b3J5ICgmcXVvdDtSZXBvc2l0b3J5JnF1b3Q7KSBpbiBDVlMKKyAgIG1vZHVsZXMgKCZxdW90O01vZHVsZXMmcXVvdDspIGFuZCBtYWRlIGF2YWlsYWJsZSBhcyBkb3dubG9hZGFibGUgYXJjaGl2ZXMgKCZxdW90O0Rvd25sb2FkcyZxdW90OykuPC9wPgorICAgCis8dWw+CisJPGxpPkNvbnRlbnQgbWF5IGJlIHN0cnVjdHVyZWQgYW5kIHBhY2thZ2VkIGludG8gbW9kdWxlcyB0byBmYWNpbGl0YXRlIGRlbGl2ZXJpbmcsIGV4dGVuZGluZywgYW5kIHVwZ3JhZGluZyB0aGUgQ29udGVudC4gIFR5cGljYWwgbW9kdWxlcyBtYXkgaW5jbHVkZSBwbHVnLWlucyAoJnF1b3Q7UGx1Zy1pbnMmcXVvdDspLCBwbHVnLWluIGZyYWdtZW50cyAoJnF1b3Q7RnJhZ21lbnRzJnF1b3Q7KSwgYW5kIGZlYXR1cmVzICgmcXVvdDtGZWF0dXJlcyZxdW90OykuPC9saT4KKwk8bGk+RWFjaCBQbHVnLWluIG9yIEZyYWdtZW50IG1heSBiZSBwYWNrYWdlZCBhcyBhIHN1Yi1kaXJlY3Rvcnkgb3IgSkFSIChKYXZhJnRyYWRlOyBBUmNoaXZlKSBpbiBhIGRpcmVjdG9yeSBuYW1lZCAmcXVvdDtwbHVnaW5zJnF1b3Q7LjwvbGk+CisJPGxpPkEgRmVhdHVyZSBpcyBhIGJ1bmRsZSBvZiBvbmUgb3IgbW9yZSBQbHVnLWlucyBhbmQvb3IgRnJhZ21lbnRzIGFuZCBhc3NvY2lhdGVkIG1hdGVyaWFsLiAgRWFjaCBGZWF0dXJlIG1heSBiZSBwYWNrYWdlZCBhcyBhIHN1Yi1kaXJlY3RvcnkgaW4gYSBkaXJlY3RvcnkgbmFtZWQgJnF1b3Q7ZmVhdHVyZXMmcXVvdDsuICBXaXRoaW4gYSBGZWF0dXJlLCBmaWxlcyBuYW1lZCAmcXVvdDtmZWF0dXJlLnhtbCZxdW90OyBtYXkgY29udGFpbiBhIGxpc3Qgb2YgdGhlIG5hbWVzIGFuZCB2ZXJzaW9uIG51bWJlcnMgb2YgdGhlIFBsdWctaW5zCisgICAgICBhbmQvb3IgRnJhZ21lbnRzIGFzc29jaWF0ZWQgd2l0aCB0aGF0IEZlYXR1cmUuPC9saT4KKwk8bGk+RmVhdHVyZXMgbWF5IGFsc28gaW5jbHVkZSBvdGhlciBGZWF0dXJlcyAoJnF1b3Q7SW5jbHVkZWQgRmVhdHVyZXMmcXVvdDspLiBXaXRoaW4gYSBGZWF0dXJlLCBmaWxlcyBuYW1lZCAmcXVvdDtmZWF0dXJlLnhtbCZxdW90OyBtYXkgY29udGFpbiBhIGxpc3Qgb2YgdGhlIG5hbWVzIGFuZCB2ZXJzaW9uIG51bWJlcnMgb2YgSW5jbHVkZWQgRmVhdHVyZXMuPC9saT4KKzwvdWw+ICAgCisgCis8cD5UaGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgZ292ZXJuaW5nIFBsdWctaW5zIGFuZCBGcmFnbWVudHMgc2hvdWxkIGJlIGNvbnRhaW5lZCBpbiBmaWxlcyBuYW1lZCAmcXVvdDthYm91dC5odG1sJnF1b3Q7ICgmcXVvdDtBYm91dHMmcXVvdDspLiBUaGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgZ292ZXJuaW5nIEZlYXR1cmVzIGFuZAorSW5jbHVkZWQgRmVhdHVyZXMgc2hvdWxkIGJlIGNvbnRhaW5lZCBpbiBmaWxlcyBuYW1lZCAmcXVvdDtsaWNlbnNlLmh0bWwmcXVvdDsgKCZxdW90O0ZlYXR1cmUgTGljZW5zZXMmcXVvdDspLiAgQWJvdXRzIGFuZCBGZWF0dXJlIExpY2Vuc2VzIG1heSBiZSBsb2NhdGVkIGluIGFueSBkaXJlY3Rvcnkgb2YgYSBEb3dubG9hZCBvciBNb2R1bGUKK2luY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvIHRoZSBmb2xsb3dpbmcgbG9jYXRpb25zOjwvcD4KKworPHVsPgorCTxsaT5UaGUgdG9wLWxldmVsIChyb290KSBkaXJlY3Rvcnk8L2xpPgorCTxsaT5QbHVnLWluIGFuZCBGcmFnbWVudCBkaXJlY3RvcmllczwvbGk+CisJPGxpPkluc2lkZSBQbHVnLWlucyBhbmQgRnJhZ21lbnRzIHBhY2thZ2VkIGFzIEpBUnM8L2xpPgorCTxsaT5TdWItZGlyZWN0b3JpZXMgb2YgdGhlIGRpcmVjdG9yeSBuYW1lZCAmcXVvdDtzcmMmcXVvdDsgb2YgY2VydGFpbiBQbHVnLWluczwvbGk+CisJPGxpPkZlYXR1cmUgZGlyZWN0b3JpZXM8L2xpPgorPC91bD4KKwkJCis8cD5Ob3RlOiBpZiBhIEZlYXR1cmUgbWFkZSBhdmFpbGFibGUgYnkgdGhlIEVjbGlwc2UgRm91bmRhdGlvbiBpcyBpbnN0YWxsZWQgdXNpbmcgdGhlIEVjbGlwc2UgVXBkYXRlIE1hbmFnZXIsIHlvdSBtdXN0IGFncmVlIHRvIGEgbGljZW5zZSAoJnF1b3Q7RmVhdHVyZSBVcGRhdGUgTGljZW5zZSZxdW90OykgZHVyaW5nIHRoZQoraW5zdGFsbGF0aW9uIHByb2Nlc3MuICBJZiB0aGUgRmVhdHVyZSBjb250YWlucyBJbmNsdWRlZCBGZWF0dXJlcywgdGhlIEZlYXR1cmUgVXBkYXRlIExpY2Vuc2Ugc2hvdWxkIGVpdGhlciBwcm92aWRlIHlvdSB3aXRoIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBnb3Zlcm5pbmcgdGhlIEluY2x1ZGVkIEZlYXR1cmVzIG9yCitpbmZvcm0geW91IHdoZXJlIHlvdSBjYW4gbG9jYXRlIHRoZW0uICBGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlcyBtYXkgYmUgZm91bmQgaW4gdGhlICZxdW90O2xpY2Vuc2UmcXVvdDsgcHJvcGVydHkgb2YgZmlsZXMgbmFtZWQgJnF1b3Q7ZmVhdHVyZS5wcm9wZXJ0aWVzJnF1b3Q7IGZvdW5kIHdpdGhpbiBhIEZlYXR1cmUuCitTdWNoIEFib3V0cywgRmVhdHVyZSBMaWNlbnNlcywgYW5kIEZlYXR1cmUgVXBkYXRlIExpY2Vuc2VzIGNvbnRhaW4gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIChvciByZWZlcmVuY2VzIHRvIHN1Y2ggdGVybXMgYW5kIGNvbmRpdGlvbnMpIHRoYXQgZ292ZXJuIHlvdXIgdXNlIG9mIHRoZSBhc3NvY2lhdGVkIENvbnRlbnQgaW4KK3RoYXQgZGlyZWN0b3J5LjwvcD4KKworPHA+VEhFIEFCT1VUUywgRkVBVFVSRSBMSUNFTlNFUywgQU5EIEZFQVRVUkUgVVBEQVRFIExJQ0VOU0VTIE1BWSBSRUZFUiBUTyBUSEUgRVBMIE9SIE9USEVSIExJQ0VOU0UgQUdSRUVNRU5UUywgTk9USUNFUyBPUiBURVJNUyBBTkQgQ09ORElUSU9OUy4gIFNPTUUgT0YgVEhFU0UKK09USEVSIExJQ0VOU0UgQUdSRUVNRU5UUyBNQVkgSU5DTFVERSAoQlVUIEFSRSBOT1QgTElNSVRFRCBUTyk6PC9wPgorCis8dWw+CisJPGxpPkNvbW1vbiBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMCAoYXZhaWxhYmxlIGF0IDxhIGhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvY3BsLXYxMC5odG1sIj5odHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2NwbC12MTAuaHRtbDwvYT4pPC9saT4KKwk8bGk+QXBhY2hlIFNvZnR3YXJlIExpY2Vuc2UgMS4xIChhdmFpbGFibGUgYXQgPGEgaHJlZj0iaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UiPmh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFPC9hPik8L2xpPgorCTxsaT5BcGFjaGUgU29mdHdhcmUgTGljZW5zZSAyLjAgKGF2YWlsYWJsZSBhdCA8YSBocmVmPSJodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAiPmh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMDwvYT4pPC9saT4KKwk8bGk+SUJNIFB1YmxpYyBMaWNlbnNlIDEuMCAoYXZhaWxhYmxlIGF0IDxhIGhyZWY9Imh0dHA6Ly9vc3Muc29mdHdhcmUuaWJtLmNvbS9kZXZlbG9wZXJ3b3Jrcy9vcGVuc291cmNlL2xpY2Vuc2UxMC5odG1sIj5odHRwOi8vb3NzLnNvZnR3YXJlLmlibS5jb20vZGV2ZWxvcGVyd29ya3Mvb3BlbnNvdXJjZS9saWNlbnNlMTAuaHRtbDwvYT4pPC9saT4JCisJPGxpPk1ldHJvIExpbmsgUHVibGljIExpY2Vuc2UgMS4wMCAoYXZhaWxhYmxlIGF0IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbmdyb3VwLm9yZy9vcGVubW90aWYvc3VwcG9ydGVycy9tZXRyb2xpbmsvbGljZW5zZS5odG1sIj5odHRwOi8vd3d3Lm9wZW5ncm91cC5vcmcvb3Blbm1vdGlmL3N1cHBvcnRlcnMvbWV0cm9saW5rL2xpY2Vuc2UuaHRtbDwvYT4pPC9saT4KKwk8bGk+TW96aWxsYSBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMSAoYXZhaWxhYmxlIGF0IDxhIGhyZWY9Imh0dHA6Ly93d3cubW96aWxsYS5vcmcvTVBML01QTC0xLjEuaHRtbCI+aHR0cDovL3d3dy5tb3ppbGxhLm9yZy9NUEwvTVBMLTEuMS5odG1sPC9hPik8L2xpPgorPC91bD4KKworPHA+SVQgSVMgWU9VUiBPQkxJR0FUSU9OIFRPIFJFQUQgQU5EIEFDQ0VQVCBBTEwgU1VDSCBURVJNUyBBTkQgQ09ORElUSU9OUyBQUklPUiBUTyBVU0UgT0YgVEhFIENPTlRFTlQuICBJZiBubyBBYm91dCwgRmVhdHVyZSBMaWNlbnNlLCBvciBGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlIGlzIHByb3ZpZGVkLCBwbGVhc2UKK2NvbnRhY3QgdGhlIEVjbGlwc2UgRm91bmRhdGlvbiB0byBkZXRlcm1pbmUgd2hhdCB0ZXJtcyBhbmQgY29uZGl0aW9ucyBnb3Zlcm4gdGhhdCBwYXJ0aWN1bGFyIENvbnRlbnQuPC9wPgorCis8aDM+Q3J5cHRvZ3JhcGh5PC9oMz4KKworPHA+Q29udGVudCBtYXkgY29udGFpbiBlbmNyeXB0aW9uIHNvZnR3YXJlLiBUaGUgY291bnRyeSBpbiB3aGljaCB5b3UgYXJlIGN1cnJlbnRseSBtYXkgaGF2ZSByZXN0cmljdGlvbnMgb24gdGhlIGltcG9ydCwgcG9zc2Vzc2lvbiwgYW5kIHVzZSwgYW5kL29yIHJlLWV4cG9ydCB0bworICAgYW5vdGhlciBjb3VudHJ5LCBvZiBlbmNyeXB0aW9uIHNvZnR3YXJlLiBCRUZPUkUgdXNpbmcgYW55IGVuY3J5cHRpb24gc29mdHdhcmUsIHBsZWFzZSBjaGVjayB0aGUgY291bnRyeSdzIGxhd3MsIHJlZ3VsYXRpb25zIGFuZCBwb2xpY2llcyBjb25jZXJuaW5nIHRoZSBpbXBvcnQsCisgICBwb3NzZXNzaW9uLCBvciB1c2UsIGFuZCByZS1leHBvcnQgb2YgZW5jcnlwdGlvbiBzb2Z0d2FyZSwgdG8gc2VlIGlmIHRoaXMgaXMgcGVybWl0dGVkLjwvcD4KKyAgIAorPHNtYWxsPkphdmEgYW5kIGFsbCBKYXZhLWJhc2VkIHRyYWRlbWFya3MgYXJlIHRyYWRlbWFya3Mgb2YgU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiBpbiB0aGUgVW5pdGVkIFN0YXRlcywgb3RoZXIgY291bnRyaWVzLCBvciBib3RoLjwvc21hbGw+ICAgCis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRpc2Vhc2Vtb2RlbHMuZXhhbXBsZS9wbHVnaW4ucHJvcGVydGllcyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGlzZWFzZW1vZGVscy5leGFtcGxlL3BsdWdpbi5wcm9wZXJ0aWVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRhY2I5MzQKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRpc2Vhc2Vtb2RlbHMuZXhhbXBsZS9wbHVnaW4ucHJvcGVydGllcwpAQCAtMCwwICsxLDI1IEBACisjLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyMgKiBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisjICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworIyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorIyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisjICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyMgKgorIyAqIENvbnRyaWJ1dG9yczoKKyMgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisjICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyMgVG8gY29kZSBkZXZlbG9wZXI6CisjICAgRG8gTk9UIGNoYW5nZSB0aGUgcHJvcGVydGllcyBiZXR3ZWVuIHRoaXMgbGluZSBhbmQgdGhlCisjICAgIiUlJSBFTkQgT0YgVFJBTlNMQVRFRCBQUk9QRVJUSUVTICUlJSIgbGluZS4KKyMgICBNYWtlIGEgbmV3IHByb3BlcnR5IG5hbWUsIGFwcGVuZCB0byB0aGUgZW5kIG9mIHRoZSBmaWxlIGFuZCBjaGFuZ2UKKyMgICB0aGUgY29kZSB0byB1c2UgdGhlIG5ldyBwcm9wZXJ0eS4KKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorIyAlJSUgRU5EIE9GIFRSQU5TTEFURUQgUFJPUEVSVElFUyAlJSUKKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworcGx1Z2luTmFtZSA9IFNURU0gRXhhbXBsZSBEaXNlYXNlIE1vZGVsIFRlc3QgU3VpdGUKK3Byb3ZpZGVyTmFtZSA9IEVjbGlwc2Uub3JnCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRpc2Vhc2Vtb2RlbHMuZXhhbXBsZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL2V4YW1wbGUvdGVzdHMvRXhhbXBsZUFsbFRlc3RzLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRpc2Vhc2Vtb2RlbHMuZXhhbXBsZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL2V4YW1wbGUvdGVzdHMvRXhhbXBsZUFsbFRlc3RzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmNhYTQ1MwotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGlzZWFzZW1vZGVscy5leGFtcGxlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvZXhhbXBsZS90ZXN0cy9FeGFtcGxlQWxsVGVzdHMuamF2YQpAQCAtMCwwICsxLDU0IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leGFtcGxlLnRlc3RzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA2LCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0OworaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0U3VpdGU7CitpbXBvcnQganVuaXQudGV4dHVpLlRlc3RSdW5uZXI7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIEEgdGVzdCBzdWl0ZSBmb3IgdGhlICc8ZW0+PGI+RXhwZXJpbWVudGFsPC9iPjwvZW0+JyBtb2RlbC4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgRXhhbXBsZUFsbFRlc3RzIGV4dGVuZHMgVGVzdFN1aXRlIHsKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CisJCVRlc3RSdW5uZXIucnVuKHN1aXRlKCkpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBzdGF0aWMgVGVzdCBzdWl0ZSgpIHsKKwkJVGVzdFN1aXRlIHN1aXRlID0gbmV3IEV4YW1wbGVBbGxUZXN0cygiRXhhbXBsZSBUZXN0cyIpOyAvLyROT04tTkxTLTEkCisJCXN1aXRlLmFkZFRlc3QoRXhhbXBsZVRlc3RzLnN1aXRlKCkpOworCQlyZXR1cm4gc3VpdGU7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEV4YW1wbGVBbGxUZXN0cyhTdHJpbmcgbmFtZSkgeworCQlzdXBlcihuYW1lKTsKKwl9CisKK30gLy9FeGFtcGxlQWxsVGVzdHMKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGlzZWFzZW1vZGVscy5leGFtcGxlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvZXhhbXBsZS90ZXN0cy9FeGFtcGxlRGlzZWFzZU1vZGVsVGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kaXNlYXNlbW9kZWxzLmV4YW1wbGUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9leGFtcGxlL3Rlc3RzL0V4YW1wbGVEaXNlYXNlTW9kZWxUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWQzNzAxMgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGlzZWFzZW1vZGVscy5leGFtcGxlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvZXhhbXBsZS90ZXN0cy9FeGFtcGxlRGlzZWFzZU1vZGVsVGVzdC5qYXZhCkBAIC0wLDAgKzEsMjYyIEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leGFtcGxlLnRlc3RzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA2LCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGphdmEudXRpbC5SYW5kb207CisKK2ltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7CitpbXBvcnQganVuaXQudGV4dHVpLlRlc3RSdW5uZXI7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUudXRpbC5FY29yZVV0aWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4YW1wbGUuRXhhbXBsZURpc2Vhc2VNb2RlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXhhbXBsZS5FeGFtcGxlRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXhhbXBsZS5pbXBsLkV4YW1wbGVEaXNlYXNlTW9kZWxJbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TRUlSTGFiZWxWYWx1ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbFZhbHVlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5pbXBsLlNFSVJMYWJlbFZhbHVlSW1wbDsKKworCisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIEEgdGVzdCBjYXNlIGZvciB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+RXhhbXBsZSBEaXNlYXNlIE1vZGVsPC9iPjwvZW0+Jy4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgRXhhbXBsZURpc2Vhc2VNb2RlbFRlc3QgZXh0ZW5kcyBUZXN0Q2FzZSB7CisKKwlwdWJsaWMgc3RhdGljIGZpbmFsIGxvbmcgUkFORE9NX1NFRUQgPSAxbDsKKwlwdWJsaWMgc3RhdGljIGZpbmFsIGRvdWJsZSBURVNUX0dBSU4gPSAwLjAxZDsKKwkKKwkKKwkvKioKKwkgKiBUaGUgZml4dHVyZSBmb3IgdGhpcyBEaXNlYXNlIE1vZGVsIHRlc3QgY2FzZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgRXhhbXBsZURpc2Vhc2VNb2RlbCBmaXh0dXJlID0gbnVsbDsKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKKwkJVGVzdFJ1bm5lci5ydW4oRXhhbXBsZURpc2Vhc2VNb2RlbFRlc3QuY2xhc3MpOworCX0KKworCS8qKgorCSAqIENvbnN0cnVjdHMgYSBuZXcgRGlzZWFzZSBNb2RlbCB0ZXN0IGNhc2Ugd2l0aCB0aGUgZ2l2ZW4gbmFtZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRXhhbXBsZURpc2Vhc2VNb2RlbFRlc3QoU3RyaW5nIG5hbWUpIHsKKwkJc3VwZXIobmFtZSk7CisJfQorCisJLyoqCisJICogVGVzdHMgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLmltcGwuU3RvY2hhc3RpY0Rpc2Vhc2VNb2RlbEltcGwjZG9Nb2RlbFNwZWNpZmljQWRqdXN0bWVudHMoKSA8ZW0+ZG9Nb2RlbFNwZWNpZmljQWRqdXN0bWVudHM8L2VtPn0nIG9wZXJhdGlvbi4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5pbXBsLlN0b2NoYXN0aWNEaXNlYXNlTW9kZWxJbXBsI2RvTW9kZWxTcGVjaWZpY0FkanVzdG1lbnRzKCkKKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCUBTdXBwcmVzc1dhcm5pbmdzKCJzeW50aGV0aWMtYWNjZXNzIikKKwlwdWJsaWMgdm9pZCB0ZXN0TW9kZWxTcGVjaWZpY0FkanVzdG1lbnRzKCl7CisJCUV4YW1wbGVEaXNlYXNlTW9kZWxUZXN0ZXJJbXBsIGV4cGVyaW1lbnRhbERpc2Vhc2VNb2RlbCA9IG5ldyBFeGFtcGxlRGlzZWFzZU1vZGVsVGVzdGVySW1wbCgpOworCQlTRUlSTGFiZWxWYWx1ZUltcGwgY3VycmVudFNFSVIgPSBuZXcgU0VJUkxhYmVsVmFsdWVJbXBsKDEwMDBkLCA1MGQsIDQwZCwgMzBkLCAyMGQsIDEwZCk7CisJCWRvVGVzdChleHBlcmltZW50YWxEaXNlYXNlTW9kZWwsIGN1cnJlbnRTRUlSKTsKKwl9CisJCisJCisJLyoqCisJICogRG8gdGhlIHRlc3QKKwkgKiBAcGFyYW0gZXhwZXJpbWVudGFsRGlzZWFzZU1vZGVsCisJICogQHBhcmFtIGN1cnJlbnRTRUlSCisJICogQHBhcmFtIHNlaXJBZGRpdGlvbnMKKwkgKiBAcGFyYW0gc2VpckRlYXRocworCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJcHJpdmF0ZSB2b2lkIGRvVGVzdChFeGFtcGxlRGlzZWFzZU1vZGVsVGVzdGVySW1wbCBleHBlcmltZW50YWxEaXNlYXNlTW9kZWwsCisJCQlTRUlSTGFiZWxWYWx1ZUltcGwgY3VycmVudFNFSVIpIHsKKwkJCisJCVNFSVJMYWJlbFZhbHVlSW1wbCBvbGRWYWwgPSAoU0VJUkxhYmVsVmFsdWVJbXBsKUVjb3JlVXRpbC5jb3B5KGN1cnJlbnRTRUlSKTsKKwkJCisJCWRvQ2FsY3VsYXRlTW9kZWxTcGVjaWZpY0FkanVzdG1lbnRzKGN1cnJlbnRTRUlSLCBSQU5ET01fU0VFRCwgVEVTVF9HQUlOKTsKKworCQlTdHJpbmcgc3RhdGUgPSBnZXRTdGF0ZShjdXJyZW50U0VJUiwgb2xkVmFsKTsKKwkJCisJCXZhbGlkYXRlTW9kZWxTcGVjaWZpY0FkanVzdG1lbnRzKGN1cnJlbnRTRUlSLAorCQkJCW9sZFZhbCwKKwkJCQlzdGF0ZSk7CisJfQorCQorCisJcHJpdmF0ZSB2b2lkIGRvQ2FsY3VsYXRlTW9kZWxTcGVjaWZpY0FkanVzdG1lbnRzKAorCQkJU0VJUkxhYmVsVmFsdWVJbXBsIHBDdXJyZW50U0VJUiwKKwkJCWxvbmcgcFJhbmRvbVNlZWQsIGRvdWJsZSBwVGVzdEdhaW4pIHsKKwkJCisJCQorCQlmaW5hbCBTRUlSTGFiZWxWYWx1ZSBjdXJyZW50U0VJUiA9IHBDdXJyZW50U0VJUjsKKwkJUmFuZG9tIHJhbmRvbSA9IG5ldyBSYW5kb20ocFJhbmRvbVNlZWQpOworCQlkb3VibGUgSW5vaXN5ID0gY3VycmVudFNFSVIuZ2V0SSgpKiBjb21wdXRlTm9pc2UocFRlc3RHYWluLCByYW5kb20pOworCQljdXJyZW50U0VJUi5zZXRJKElub2lzeSk7CisJCXJldHVybjsKKwkJCQkKKwkJCQkKKwl9CisKKwlwcml2YXRlIHZvaWQgdmFsaWRhdGVNb2RlbFNwZWNpZmljQWRqdXN0bWVudHMoU0VJUkxhYmVsVmFsdWVJbXBsIGN1cnJlbnRTRUlSLAorCQkJU0VJUkxhYmVsVmFsdWVJbXBsIG9sZFNFSVIsCisJCQlTdHJpbmcgc3RhdGUpIHsKKwkJCisJCXRyeXsKKwkJCWN1cnJlbnRTRUlSLnNhbmUoKTsKKwkJfQorCQljYXRjaChUaHJvd2FibGUgdCl7CisJCQl0aHJvdyBuZXcgSWxsZWdhbFN0YXRlRXhjZXB0aW9uKCJuZXdTZWlyQWRkaXRpb25zIGlzIGluc2FuZSwgc3RhdGUgaXM6ICIgKyBzdGF0ZSwgdCk7CisJCX0KKwkJdHJ5eworCQkJb2xkU0VJUi5zYW5lKCk7CisJCX0KKwkJY2F0Y2goVGhyb3dhYmxlIHQpeworCQkJdGhyb3cgbmV3IElsbGVnYWxTdGF0ZUV4Y2VwdGlvbigibmV3U2VpckRlYXRocyBpcyBpbnNhbmUsIHN0YXRlIGlzOiAiICsgc3RhdGUsIHQpOworCQl9CisKKwkJCisJCQorCQlhc3NlcnRUcnVlKFN0cmluZy5mb3JtYXQoImN1cnJlbnRTRUlSIGhhcyBpbnNhbmUgdmFsdWVzICVzIiwgc3RhdGUpLCBteVNhbml0eUNoZWNrKGN1cnJlbnRTRUlSKSk7CisJCWFzc2VydFRydWUoU3RyaW5nLmZvcm1hdCgib2xkU0VJUiBoYXMgaW5zYW5lIHZhbHVlcyAlcyIsIHN0YXRlKSwgbXlTYW5pdHlDaGVjayhvbGRTRUlSKSk7CisKKwl9CisJCisJcHJpdmF0ZSBib29sZWFuIGNoZWNrRXF1YWwoU0VJUkxhYmVsVmFsdWVJbXBsIHBDYWxjdWxhdGVkU2VpckFkZGl0aW9ucywKKwkJCVNFSVJMYWJlbFZhbHVlSW1wbCBwTmV3U2VpckFkZGl0aW9ucykgeworCQlpZigocENhbGN1bGF0ZWRTZWlyQWRkaXRpb25zLmdldERpc2Vhc2VEZWF0aHMoKSAhPSBwTmV3U2VpckFkZGl0aW9ucy5nZXREaXNlYXNlRGVhdGhzKCkpIHx8CisJCQkJKHBDYWxjdWxhdGVkU2VpckFkZGl0aW9ucy5nZXRFKCkgIT0gcE5ld1NlaXJBZGRpdGlvbnMuZ2V0RSgpKSB8fAorCQkJCShwQ2FsY3VsYXRlZFNlaXJBZGRpdGlvbnMuZ2V0SSgpICE9IHBOZXdTZWlyQWRkaXRpb25zLmdldEkoKSkgfHwKKwkJCQkocENhbGN1bGF0ZWRTZWlyQWRkaXRpb25zLmdldFBvcHVsYXRpb25Db3VudCgpICE9IHBOZXdTZWlyQWRkaXRpb25zLmdldFBvcHVsYXRpb25Db3VudCgpKSB8fAorCQkJCShwQ2FsY3VsYXRlZFNlaXJBZGRpdGlvbnMuZ2V0UigpICE9IHBOZXdTZWlyQWRkaXRpb25zLmdldFIoKSkgfHwKKwkJCQkocENhbGN1bGF0ZWRTZWlyQWRkaXRpb25zLmdldFMoKSAhPSBwTmV3U2VpckFkZGl0aW9ucy5nZXRTKCkpKXsKKwkJCQkJcmV0dXJuIGZhbHNlOworCQkJCX0KKwkJcmV0dXJuIHRydWU7CisJfQorCisJcHJpdmF0ZSBib29sZWFuIG15U2FuaXR5Q2hlY2soU0VJUkxhYmVsVmFsdWVJbXBsIHBTZWlyKSB7CisJCXJldHVybiBhc3NlcnRWYWxpZERvdWJsZShwU2Vpci5nZXRFKCkpICYmIAorCQkJYXNzZXJ0VmFsaWREb3VibGUocFNlaXIuZ2V0SSgpKSAmJiAKKwkJCWFzc2VydFZhbGlkRG91YmxlKHBTZWlyLmdldFIoKSkgJiYgCisJCQlhc3NlcnRWYWxpZERvdWJsZShwU2Vpci5nZXRTKCkpOworCQkKKwl9CisJCisKKwkvKioKKwkgKiBUaGlzIG1ldGhvZCByZXR1cm5zIGEgZG91YmxlIHByZWNpc2lvbiByYW5kb20gbm9pc2UgdmFyaWFibGUKKwkgKiByIGJldHdlZW4gKDEuMCt4KSBhbmQgKDEuMC14KQorCSAqIHdoZXJlIHggaXMgYSBwcm9kdWN0IEcqIE1hdGgucmFuZCgpLCBhbmQgRyBpcyBhIGdhaW4gZmFjdG9yIDA8RzxtYXggbm9pc2UKKwkgKiAKKwkgKiBAcGFyYW0gZ2FpbgorCSAqIEBwYXJhbSByYW5kCisJICogQHJldHVybiBub2lzZQorCSAqLworCXB1YmxpYyBzdGF0aWMgZG91YmxlIGNvbXB1dGVOb2lzZShmaW5hbCBkb3VibGUgZ2FpbiwgZmluYWwgUmFuZG9tIHJhbmQpIHsKKworCQlkb3VibGUgeCA9ICgyLjAqcmFuZC5uZXh0RG91YmxlKCkpLTEuMDsgLy8gKy8tIDEKKwkJeCAqPSBnYWluOworCQl4ICs9IDEuMDsKKwkJYXNzZXJ0ICgoeD4wLjApJiYoeDwyLjApKSA6ICJyYW5kb20gbm9pc2Ugc2hvdWxkIGJlIGEgc21hbGwgcGVydHVyYmF0aW9uIEdhaW4gZmFjdG9yLCBnLCAgbXVzdCAwLjAgPCBnIDw8IDEuMCAiOworCQlyZXR1cm4geDsKKwkJCisJfSAvLyBnZXROb2lzZQorCQorCisJcHJpdmF0ZSBib29sZWFuIGFzc2VydFZhbGlkRG91YmxlKGRvdWJsZSBwRG91YmxlKSB7CisJCXJldHVybiAhKERvdWJsZS5pc05hTihwRG91YmxlKSB8fCBEb3VibGUuaXNJbmZpbml0ZShwRG91YmxlKSk7CisJfQorCQorCisJcHJpdmF0ZSBTdHJpbmcgZ2V0U3RhdGUoU0VJUkxhYmVsVmFsdWVJbXBsIHBDdXJyZW50U0VJUiwKKwkJCVNFSVJMYWJlbFZhbHVlSW1wbCBvbGRTRUlSKSB7CisJCXJldHVybiBTdHJpbmcuZm9ybWF0KCJcbnByZXNlbnQgc3RhdGUgaXM6IFxuQ3VycmVudFNFSVJbJXNdXG4gb2xkU0VJUlslc11cbiIsIAorCQkJCXBDdXJyZW50U0VJUiwgb2xkU0VJUik7CisJfQorCisJCisJCisJLyoqCisJICogU2V0cyB0aGUgZml4dHVyZSBmb3IgdGhpcyBEaXNlYXNlIE1vZGVsIHRlc3QgY2FzZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBzZXRGaXh0dXJlKEV4YW1wbGVEaXNlYXNlTW9kZWwgZml4dHVyZSkgeworCQl0aGlzLmZpeHR1cmUgPSBmaXh0dXJlOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIGZpeHR1cmUgZm9yIHRoaXMgRGlzZWFzZSBNb2RlbCB0ZXN0IGNhc2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIEV4YW1wbGVEaXNlYXNlTW9kZWwgZ2V0Rml4dHVyZSgpIHsKKwkJcmV0dXJuIGZpeHR1cmU7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZSNzZXRVcCgpCisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIHNldFVwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCXNldEZpeHR1cmUoRXhhbXBsZUZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZUV4YW1wbGVEaXNlYXNlTW9kZWwoKSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZSN0ZWFyRG93bigpCisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIHRlYXJEb3duKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCXNldEZpeHR1cmUobnVsbCk7CisJfQorCisJCisJLyoqCisJICogY3JlYXRlZCBqdXN0IGZvciB0ZXN0aW5ncyBzaW5jZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5pbXBsLlN0b2NoYXN0aWNEaXNlYXNlTW9kZWxJbXBsI2RvTW9kZWxTcGVjaWZpY0FkanVzdG1lbnRzKCkgPGVtPmRvTW9kZWxTcGVjaWZpY0FkanVzdG1lbnRzPC9lbT59JyBpcyBwcm90ZWN0ZWQuCisJICogQGF1dGhvciBrYXVmbWFuCisJICoKKwkgKi8KKwlwcml2YXRlIGNsYXNzIEV4YW1wbGVEaXNlYXNlTW9kZWxUZXN0ZXJJbXBsIGV4dGVuZHMgRXhhbXBsZURpc2Vhc2VNb2RlbEltcGx7CisKKwkJcHVibGljIHZvaWQgZG9Nb2RlbFNwZWNpZmljQWRqdXN0bWVudHMoCisJCQkJU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbFZhbHVlIHBDdXJyZW50U3RhdGUsCisJCQkJbG9uZyBwUmFuZG9tU2VlZCwgZG91YmxlIHBUZXN0R2FpbikgeworCQkJc2V0U2VlZChwUmFuZG9tU2VlZCk7CisJCQlzZXRHYWluKHBUZXN0R2Fpbik7CisJCQkKKwkJCS8vU0VJUkxhYmVsVmFsdWVJbXBsIG9sZEN1cnJlbnRTdGF0ZSA9IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC50ZXN0cy5TRUlSTGFiZWxWYWx1ZVRlc3RVdGlsLmNsb25lU0VJUkxhYmVsVmFsdWVJbXBsKChTRUlSTGFiZWxWYWx1ZUltcGwpcEN1cnJlbnRTdGF0ZSk7CisJCQkvL1NFSVJMYWJlbFZhbHVlSW1wbCBvbGRTdGF0ZUFkZGl0aW9uczIgPSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQudGVzdHMuU0VJUkxhYmVsVmFsdWVUZXN0VXRpbC5jbG9uZVNFSVJMYWJlbFZhbHVlSW1wbCgoU0VJUkxhYmVsVmFsdWVJbXBsKXBTdGF0ZUFkZGl0aW9uczIpOworCQkJLy9TRUlSTGFiZWxWYWx1ZUltcGwgb2xkU3RhdGVEZWF0aHMyID0gb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLnRlc3RzLlNFSVJMYWJlbFZhbHVlVGVzdFV0aWwuY2xvbmVTRUlSTGFiZWxWYWx1ZUltcGwoKFNFSVJMYWJlbFZhbHVlSW1wbClwU3RhdGVEZWF0aHMyKTsKKwkJCQorCQkJc3VwZXIuZG9Nb2RlbFNwZWNpZmljQWRqdXN0bWVudHMocEN1cnJlbnRTdGF0ZSk7CisJCX0KKwkJCisJfS8vIEV4YW1wbGVEaXNlYXNlTW9kZWxUZXN0ZXJJbXBsICBpbm5lciBjbGFzcworCQorfSAvL0V4YW1wbGVEaXNlYXNlTW9kZWxUZXN0CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRpc2Vhc2Vtb2RlbHMuZXhhbXBsZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL2V4YW1wbGUvdGVzdHMvRXhhbXBsZVRlc3RzLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRpc2Vhc2Vtb2RlbHMuZXhhbXBsZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL2V4YW1wbGUvdGVzdHMvRXhhbXBsZVRlc3RzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzU3YTgyMQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGlzZWFzZW1vZGVscy5leGFtcGxlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvZXhhbXBsZS90ZXN0cy9FeGFtcGxlVGVzdHMuamF2YQpAQCAtMCwwICsxLDU0IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leGFtcGxlLnRlc3RzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA2LCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0OworaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0U3VpdGU7CitpbXBvcnQganVuaXQudGV4dHVpLlRlc3RSdW5uZXI7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIEEgdGVzdCBzdWl0ZSBmb3IgdGhlICc8ZW0+PGI+ZXhwZXJpbWVudGFsPC9iPjwvZW0+JyBwYWNrYWdlLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBFeGFtcGxlVGVzdHMgZXh0ZW5kcyBUZXN0U3VpdGUgeworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKKwkJVGVzdFJ1bm5lci5ydW4oc3VpdGUoKSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHN0YXRpYyBUZXN0IHN1aXRlKCkgeworCQlUZXN0U3VpdGUgc3VpdGUgPSBuZXcgRXhhbXBsZVRlc3RzKCJleGFtcGxlIFRlc3RzIik7IC8vJE5PTi1OTFMtMSQKKwkJc3VpdGUuYWRkVGVzdFN1aXRlKEV4YW1wbGVEaXNlYXNlTW9kZWxUZXN0LmNsYXNzKTsKKwkJcmV0dXJuIHN1aXRlOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFeGFtcGxlVGVzdHMoU3RyaW5nIG5hbWUpIHsKKwkJc3VwZXIobmFtZSk7CisJfQorCit9IC8vRXhhbXBsZVRlc3RzCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRpc2Vhc2Vtb2RlbHMuZXhhbXBsZS90ZXN0LnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGlzZWFzZW1vZGVscy5leGFtcGxlL3Rlc3QueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZhYmZlY2EKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRpc2Vhc2Vtb2RlbHMuZXhhbXBsZS90ZXN0LnhtbApAQCAtMCwwICsxLDUzIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorCis8cHJvamVjdCBuYW1lPSJ0ZXN0c3VpdGUiIGRlZmF1bHQ9InJ1biIgYmFzZWRpcj0iLiI+CisgIDwhLS0gVGhlIHByb3BlcnR5ICR7ZWNsaXBzZS1ob21lfSBzaG91bGQgYmUgcGFzc2VkIGludG8gdGhpcyBzY3JpcHQgLS0+CisgIDwhLS0gU2V0IGEgbWVhbmluZ2Z1bCBkZWZhdWx0IHZhbHVlIGZvciB3aGVuIGl0IGlzIG5vdC4gLS0+CisgIDxwcm9wZXJ0eSBuYW1lPSJlY2xpcHNlLWhvbWUiIHZhbHVlPSIiLz4KKworCisgIDwhLS0gc2V0cyB0aGUgcHJvcGVydGllcyBlY2xpcHNlLWhvbWUsIGFuZCBsaWJyYXJ5LWZpbGUgLS0+CisgIDxwcm9wZXJ0eSBuYW1lPSJwbHVnaW4tbmFtZSIgdmFsdWU9Im9yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGlzZWFzZW1vZGVscy5leGFtcGxlIi8+CisgIDxwcm9wZXJ0eSBuYW1lPSJsaWJyYXJ5LWZpbGUiCisgICAgICAgICAgICB2YWx1ZT0iJHtlY2xpcHNlLWhvbWV9L3BsdWdpbnMvb3JnLmVjbGlwc2UudGVzdF8zLjMuMC9saWJyYXJ5LnhtbCIvPgorCisgIDwhLS0gVGhpcyB0YXJnZXQgaG9sZHMgYWxsIGluaXRpYWxpemF0aW9uIGNvZGUgdGhhdCBuZWVkcyB0byBiZSBkb25lIGZvciAtLT4KKyAgPCEtLSBhbGwgdGVzdHMgdGhhdCBhcmUgdG8gYmUgcnVuLiBJbml0aWFsaXphdGlvbiBmb3IgaW5kaXZpZHVhbCB0ZXN0cyAtLT4KKyAgPCEtLSBzaG91bGQgYmUgZG9uZSB3aXRoaW4gdGhlIGJvZHkgb2YgdGhlIHN1aXRlIHRhcmdldC4gLS0+CisgIDx0YXJnZXQgbmFtZT0iaW5pdCI+CisgICAgPHRzdGFtcC8+CisgICAgPGRlbGV0ZT4KKyAgICAgIDxmaWxlc2V0IGRpcj0iJHtlY2xpcHNlLWhvbWV9IiBpbmNsdWRlcz0ib3JnKi54bWwiLz4KKyAgICA8L2RlbGV0ZT4KKyAgPC90YXJnZXQ+CisKKyAgPCEtLSBUaGlzIHRhcmdldCBkZWZpbmVzIHRoZSB0ZXN0cyB0aGF0IG5lZWQgdG8gYmUgcnVuLiAtLT4KKyAgPHRhcmdldCBuYW1lPSJzdWl0ZSI+CisgICAgPHByb3BlcnR5IG5hbWU9ImRhdGEtZGlyIiB2YWx1ZT0iJHtlY2xpcHNlLWhvbWV9L3dvcmtzcGFjZSIvPgorICAgIDxkZWxldGUgZGlyPSIke2RhdGEtZGlyfSIgcXVpZXQ9InRydWUiLz4KKyAgICA8YW50IHRhcmdldD0idWktdGVzdCIgYW50ZmlsZT0iJHtsaWJyYXJ5LWZpbGV9IiBkaXI9IiR7ZWNsaXBzZS1ob21lfSI+CisgICAgICA8cHJvcGVydHkgbmFtZT0iZGF0YS1kaXIiIHZhbHVlPSIke2RhdGEtZGlyfSIvPgorICAgICAgPHByb3BlcnR5IG5hbWU9InBsdWdpbi1uYW1lIiB2YWx1ZT0iJHtwbHVnaW4tbmFtZX0iLz4KKyAgICAgIDxwcm9wZXJ0eSBuYW1lPSJjbGFzc25hbWUiIHZhbHVlPSJvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXhhbXBsZS50ZXN0cy5FeGFtcGxlQWxsVGVzdHMiLz4KKyAgICA8L2FudD4KKyAgPC90YXJnZXQ+CisKKyAgPCEtLSBUaGlzIHRhcmdldCBob2xkcyBjb2RlIHRvIGNsZWFudXAgdGhlIHRlc3RpbmcgZW52aXJvbm1lbnQgYWZ0ZXIgLS0+CisgIDwhLS0gYWZ0ZXIgYWxsIG9mIHRoZSB0ZXN0cyBoYXZlIGJlZW4gcnVuLiBZb3UgY2FuIHVzZSB0aGlzIHRhcmdldCB0byAtLT4KKyAgPCEtLSBkZWxldGUgdGVtcG9yYXJ5IGZpbGVzIHRoYXQgaGF2ZSBiZWVuIGNyZWF0ZWQuIC0tPgorICA8dGFyZ2V0IG5hbWU9ImNsZWFudXAiPgorICA8L3RhcmdldD4KKworICA8IS0tIFRoaXMgdGFyZ2V0IHJ1bnMgdGhlIHRlc3Qgc3VpdGUuIEFueSBhY3Rpb25zIHRoYXQgbmVlZCB0byBoYXBwZW4gLS0+CisgIDwhLS0gYWZ0ZXIgYWxsIHRoZSB0ZXN0cyBoYXZlIGJlZW4gcnVuIHNob3VsZCBnbyBoZXJlLiAtLT4KKyAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQsc3VpdGUsY2xlYW51cCI+CisgICAgPGFudCB0YXJnZXQ9ImNvbGxlY3QiIGFudGZpbGU9IiR7bGlicmFyeS1maWxlfSIgZGlyPSIke2VjbGlwc2UtaG9tZX0iPgorICAgICAgPHByb3BlcnR5IG5hbWU9ImluY2x1ZGVzIiB2YWx1ZT0ib3JnKi54bWwiLz4KKyAgICAgIDxwcm9wZXJ0eSBuYW1lPSJvdXRwdXQtZmlsZSIgdmFsdWU9IiR7cGx1Z2luLW5hbWV9LnhtbCIvPgorICAgIDwvYW50PgorICA8L3RhcmdldD4KKworICA8IS0tIFRoaXMgdGFyZ2V0IHJ1bnMgdGhlIHBlcmZvcm1hbmNlIHRlc3Qgc3VpdGVzLiAtLT4KKyAgPHRhcmdldCBuYW1lPSJwZXJmb3JtYW5jZSI+CisgIDwvdGFyZ2V0PgorPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kaXNlYXNlbW9kZWxzLmV4cGVyaW1lbnRhbC8uY2xhc3NwYXRoIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kaXNlYXNlbW9kZWxzLmV4cGVyaW1lbnRhbC8uY2xhc3NwYXRoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMwNGU4NjEKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRpc2Vhc2Vtb2RlbHMuZXhwZXJpbWVudGFsLy5jbGFzc3BhdGgKQEAgLTAsMCArMSw3IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPGNsYXNzcGF0aD4KKwk8Y2xhc3NwYXRoZW50cnkga2luZD0ic3JjIiBwYXRoPSJzcmMiLz4KKwk8Y2xhc3NwYXRoZW50cnkga2luZD0iY29uIiBwYXRoPSJvcmcuZWNsaXBzZS5qZHQubGF1bmNoaW5nLkpSRV9DT05UQUlORVIvb3JnLmVjbGlwc2UuamR0LmludGVybmFsLmRlYnVnLnVpLmxhdW5jaGVyLlN0YW5kYXJkVk1UeXBlL0oyU0UtMS41Ii8+CisJPGNsYXNzcGF0aGVudHJ5IGtpbmQ9ImNvbiIgcGF0aD0ib3JnLmVjbGlwc2UucGRlLmNvcmUucmVxdWlyZWRQbHVnaW5zIi8+CisJPGNsYXNzcGF0aGVudHJ5IGtpbmQ9Im91dHB1dCIgcGF0aD0iYmluIi8+Cis8L2NsYXNzcGF0aD4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGlzZWFzZW1vZGVscy5leHBlcmltZW50YWwvLnByb2plY3QgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRpc2Vhc2Vtb2RlbHMuZXhwZXJpbWVudGFsLy5wcm9qZWN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMxNTUwOGYKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRpc2Vhc2Vtb2RlbHMuZXhwZXJpbWVudGFsLy5wcm9qZWN0CkBAIC0wLDAgKzEsMjggQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8cHJvamVjdERlc2NyaXB0aW9uPgorCTxuYW1lPm9yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGlzZWFzZW1vZGVscy5leHBlcmltZW50YWw8L25hbWU+CisJPGNvbW1lbnQ+PC9jb21tZW50PgorCTxwcm9qZWN0cz4KKwk8L3Byb2plY3RzPgorCTxidWlsZFNwZWM+CisJCTxidWlsZENvbW1hbmQ+CisJCQk8bmFtZT5vcmcuZWNsaXBzZS5qZHQuY29yZS5qYXZhYnVpbGRlcjwvbmFtZT4KKwkJCTxhcmd1bWVudHM+CisJCQk8L2FyZ3VtZW50cz4KKwkJPC9idWlsZENvbW1hbmQ+CisJCTxidWlsZENvbW1hbmQ+CisJCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuTWFuaWZlc3RCdWlsZGVyPC9uYW1lPgorCQkJPGFyZ3VtZW50cz4KKwkJCTwvYXJndW1lbnRzPgorCQk8L2J1aWxkQ29tbWFuZD4KKwkJPGJ1aWxkQ29tbWFuZD4KKwkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5TY2hlbWFCdWlsZGVyPC9uYW1lPgorCQkJPGFyZ3VtZW50cz4KKwkJCTwvYXJndW1lbnRzPgorCQk8L2J1aWxkQ29tbWFuZD4KKwk8L2J1aWxkU3BlYz4KKwk8bmF0dXJlcz4KKwkJPG5hdHVyZT5vcmcuZWNsaXBzZS5qZHQuY29yZS5qYXZhbmF0dXJlPC9uYXR1cmU+CisJCTxuYXR1cmU+b3JnLmVjbGlwc2UucGRlLlBsdWdpbk5hdHVyZTwvbmF0dXJlPgorCTwvbmF0dXJlcz4KKzwvcHJvamVjdERlc2NyaXB0aW9uPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kaXNlYXNlbW9kZWxzLmV4cGVyaW1lbnRhbC9NRVRBLUlORi9NQU5JRkVTVC5NRiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGlzZWFzZW1vZGVscy5leHBlcmltZW50YWwvTUVUQS1JTkYvTUFOSUZFU1QuTUYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTAxZjhmNQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGlzZWFzZW1vZGVscy5leHBlcmltZW50YWwvTUVUQS1JTkYvTUFOSUZFU1QuTUYKQEAgLTAsMCArMSwxOSBAQAorTWFuaWZlc3QtVmVyc2lvbjogMS4wCitCdW5kbGUtTWFuaWZlc3RWZXJzaW9uOiAyCitCdW5kbGUtTmFtZTogJXBsdWdpbk5hbWUKK0J1bmRsZS1TeW1ib2xpY05hbWU6IG9yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGlzZWFzZW1vZGVscy5leHBlcmltZW50YWw7c2luZ2xldG9uOj10cnVlCitCdW5kbGUtVmVyc2lvbjogMS4yLjEKK0J1bmRsZS1DbGFzc1BhdGg6IC4KK0J1bmRsZS1WZW5kb3I6ICVwcm92aWRlck5hbWUKK0J1bmRsZS1Mb2NhbGl6YXRpb246IHBsdWdpbgorQnVuZGxlLVJlcXVpcmVkRXhlY3V0aW9uRW52aXJvbm1lbnQ6IEoyU0UtMS41CitFeHBvcnQtUGFja2FnZTogb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4cGVyaW1lbnRhbC50ZXN0cworUmVxdWlyZS1CdW5kbGU6IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZSwKKyBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXhwZXJpbWVudGFsO3Zpc2liaWxpdHk6PXJlZXhwb3J0LAorIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVsczt2aXNpYmlsaXR5Oj1yZWV4cG9ydCwKKyBvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRpc2Vhc2Vtb2RlbHM7dmlzaWJpbGl0eTo9cmVleHBvcnQsCisgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlO3Zpc2liaWxpdHk6PXJlZXhwb3J0LAorIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnM7dmlzaWJpbGl0eTo9cmVleHBvcnQsCisgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnhtaTt2aXNpYmlsaXR5Oj1yZWV4cG9ydCwKKyBvcmcuanVuaXQ7dmlzaWJpbGl0eTo9cmVleHBvcnQKK0J1bmRsZS1BY3RpdmF0aW9uUG9saWN5OiBsYXp5CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRpc2Vhc2Vtb2RlbHMuZXhwZXJpbWVudGFsL2J1aWxkLnByb3BlcnRpZXMgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRpc2Vhc2Vtb2RlbHMuZXhwZXJpbWVudGFsL2J1aWxkLnByb3BlcnRpZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDY1ZTMzMQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGlzZWFzZW1vZGVscy5leHBlcmltZW50YWwvYnVpbGQucHJvcGVydGllcwpAQCAtMCwwICsxLDEyIEBACisjIDxjb3B5cmlnaHQ+CisjIDwvY29weXJpZ2h0PgorIworIyAkSWQkCisKK2Jpbi5pbmNsdWRlcyA9IC4sXAorICAgICAgICAgICAgICAgTUVUQS1JTkYvLFwKKyAgICAgICAgICAgICAgIHBsdWdpbi54bWwsXAorICAgICAgICAgICAgICAgcGx1Z2luLnByb3BlcnRpZXMKK2phcnMuY29tcGlsZS5vcmRlciA9IC4KK3NvdXJjZS4uID0gc3JjLworb3V0cHV0Li4gPSBiaW4vCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRpc2Vhc2Vtb2RlbHMuZXhwZXJpbWVudGFsL3BsdWdpbi5wcm9wZXJ0aWVzIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kaXNlYXNlbW9kZWxzLmV4cGVyaW1lbnRhbC9wbHVnaW4ucHJvcGVydGllcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wY2YzMDUxCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kaXNlYXNlbW9kZWxzLmV4cGVyaW1lbnRhbC9wbHVnaW4ucHJvcGVydGllcwpAQCAtMCwwICsxLDI2IEBACisjLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyMgKiBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisjICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworIyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorIyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisjICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyMgKgorIyAqIENvbnRyaWJ1dG9yczoKKyMgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisjICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorIyBUbyBjb2RlIGRldmVsb3BlcjoKKyMgICBEbyBOT1QgY2hhbmdlIHRoZSBwcm9wZXJ0aWVzIGJldHdlZW4gdGhpcyBsaW5lIGFuZCB0aGUKKyMgICAiJSUlIEVORCBPRiBUUkFOU0xBVEVEIFBST1BFUlRJRVMgJSUlIiBsaW5lLgorIyAgIE1ha2UgYSBuZXcgcHJvcGVydHkgbmFtZSwgYXBwZW5kIHRvIHRoZSBlbmQgb2YgdGhlIGZpbGUgYW5kIGNoYW5nZQorIyAgIHRoZSBjb2RlIHRvIHVzZSB0aGUgbmV3IHByb3BlcnR5LgorIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisjICUlJSBFTkQgT0YgVFJBTlNMQVRFRCBQUk9QRVJUSUVTICUlJQorIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitwbHVnaW5OYW1lID0gU1RFTSBFeHBlcmltZW50YWwgRGlzZWFzZSBNb2RlbCBUZXN0IFN1aXRlCitwcm92aWRlck5hbWUgPSBFY2xpcHNlLm9yZwpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kaXNlYXNlbW9kZWxzLmV4cGVyaW1lbnRhbC9wbHVnaW4ueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kaXNlYXNlbW9kZWxzLmV4cGVyaW1lbnRhbC9wbHVnaW4ueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM0OTRmOTYKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRpc2Vhc2Vtb2RlbHMuZXhwZXJpbWVudGFsL3BsdWdpbi54bWwKQEAgLTAsMCArMSwxMiBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzw/ZWNsaXBzZSB2ZXJzaW9uPSIzLjAiPz4KKworPCEtLQorIDxjb3B5cmlnaHQ+CisgPC9jb3B5cmlnaHQ+CisKKyAkSWQkCistLT4KKworPHBsdWdpbj4KKzwvcGx1Z2luPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kaXNlYXNlbW9kZWxzLmV4cGVyaW1lbnRhbC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL2V4cGVyaW1lbnRhbC90ZXN0cy9FeHBlcmltZW50YWxBbGxUZXN0cy5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kaXNlYXNlbW9kZWxzLmV4cGVyaW1lbnRhbC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL2V4cGVyaW1lbnRhbC90ZXN0cy9FeHBlcmltZW50YWxBbGxUZXN0cy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA3OGIzYjAKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRpc2Vhc2Vtb2RlbHMuZXhwZXJpbWVudGFsL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvZXhwZXJpbWVudGFsL3Rlc3RzL0V4cGVyaW1lbnRhbEFsbFRlc3RzLmphdmEKQEAgLTAsMCArMSw1NyBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXhwZXJpbWVudGFsLnRlc3RzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA5IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0OworaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0U3VpdGU7CitpbXBvcnQganVuaXQudGV4dHVpLlRlc3RSdW5uZXI7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIEEgdGVzdCBzdWl0ZSBmb3IgdGhlICc8ZW0+PGI+RXhwZXJpbWVudGFsPC9iPjwvZW0+JyBtb2RlbC4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgRXhwZXJpbWVudGFsQWxsVGVzdHMgZXh0ZW5kcyBUZXN0U3VpdGUgeworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIGFyZ3MgCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKKwkJVGVzdFJ1bm5lci5ydW4oc3VpdGUoKSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuICB0aGUgdGVzdCBzdWl0ZQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgc3RhdGljIFRlc3Qgc3VpdGUoKSB7CisJCVRlc3RTdWl0ZSBzdWl0ZSA9IG5ldyBFeHBlcmltZW50YWxBbGxUZXN0cygiRXhwZXJpbWVudGFsIFRlc3RzIik7CisJCXN1aXRlLmFkZFRlc3QoRXhwZXJpbWVudGFsVGVzdHMuc3VpdGUoKSk7CisJCXJldHVybiBzdWl0ZTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSBuYW1lIAorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRXhwZXJpbWVudGFsQWxsVGVzdHMoU3RyaW5nIG5hbWUpIHsKKwkJc3VwZXIobmFtZSk7CisJfQorCit9IC8vRXhwZXJpbWVudGFsQWxsVGVzdHMKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGlzZWFzZW1vZGVscy5leHBlcmltZW50YWwvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9leHBlcmltZW50YWwvdGVzdHMvRXhwZXJpbWVudGFsRXhhbXBsZS5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kaXNlYXNlbW9kZWxzLmV4cGVyaW1lbnRhbC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL2V4cGVyaW1lbnRhbC90ZXN0cy9FeHBlcmltZW50YWxFeGFtcGxlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGEzY2ZmZAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGlzZWFzZW1vZGVscy5leHBlcmltZW50YWwvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9leHBlcmltZW50YWwvdGVzdHMvRXhwZXJpbWVudGFsRXhhbXBsZS5qYXZhCkBAIC0wLDAgKzEsMTI0IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leHBlcmltZW50YWwudGVzdHM7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDkgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgamF2YS5pby5GaWxlOworaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuRGlhZ25vc3RpYzsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuVVJJOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5yZXNvdXJjZS5SZXNvdXJjZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUucmVzb3VyY2UuUmVzb3VyY2VTZXQ7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnJlc291cmNlLmltcGwuUmVzb3VyY2VTZXRJbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS51dGlsLkRpYWdub3N0aWNpYW47CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnhtaS5pbXBsLlhNSVJlc291cmNlRmFjdG9yeUltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4cGVyaW1lbnRhbC5FeHBlcmltZW50YWxGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leHBlcmltZW50YWwuRXhwZXJpbWVudGFsUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXhwZXJpbWVudGFsLlBlcmNvbGF0aW9uRGlzZWFzZU1vZGVsOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiBBIHNhbXBsZSB1dGlsaXR5IGZvciB0aGUgJzxlbT48Yj5leHBlcmltZW50YWw8L2I+PC9lbT4nIHBhY2thZ2UuCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIEV4cGVyaW1lbnRhbEV4YW1wbGUgeworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogTG9hZCBhbGwgdGhlIGFyZ3VtZW50IGZpbGUgcGF0aHMgb3IgVVJJcyBhcyBpbnN0YW5jZXMgb2YgdGhlIG1vZGVsLgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSBhcmdzIHRoZSBmaWxlIHBhdGhzIG9yIFVSSXMuCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKKwkJLy8gQ3JlYXRlIGEgcmVzb3VyY2Ugc2V0IHRvIGhvbGQgdGhlIHJlc291cmNlcy4KKwkJLy8KKwkJUmVzb3VyY2VTZXQgcmVzb3VyY2VTZXQgPSBuZXcgUmVzb3VyY2VTZXRJbXBsKCk7CisJCQorCQkvLyBSZWdpc3RlciB0aGUgYXBwcm9wcmlhdGUgcmVzb3VyY2UgZmFjdG9yeSB0byBoYW5kbGUgYWxsIGZpbGUgZXh0ZW5zaW9ucy4KKwkJLy8KKwkJcmVzb3VyY2VTZXQuZ2V0UmVzb3VyY2VGYWN0b3J5UmVnaXN0cnkoKS5nZXRFeHRlbnNpb25Ub0ZhY3RvcnlNYXAoKS5wdXQKKwkJCShSZXNvdXJjZS5GYWN0b3J5LlJlZ2lzdHJ5LkRFRkFVTFRfRVhURU5TSU9OLCAKKwkJCSBuZXcgWE1JUmVzb3VyY2VGYWN0b3J5SW1wbCgpKTsKKworCQkvLyBSZWdpc3RlciB0aGUgcGFja2FnZSB0byBlbnN1cmUgaXQgaXMgYXZhaWxhYmxlIGR1cmluZyBsb2FkaW5nLgorCQkvLworCQlyZXNvdXJjZVNldC5nZXRQYWNrYWdlUmVnaXN0cnkoKS5wdXQKKwkJCShFeHBlcmltZW50YWxQYWNrYWdlLmVOU19VUkksIAorCQkJIEV4cGVyaW1lbnRhbFBhY2thZ2UuZUlOU1RBTkNFKTsKKyAgICAgICAgCisJCS8vIElmIHRoZXJlIGFyZSBubyBhcmd1bWVudHMsIGVtaXQgYW4gYXBwcm9wcmlhdGUgdXNhZ2UgbWVzc2FnZS4KKwkJLy8KKwkJaWYgKGFyZ3MubGVuZ3RoID09IDApIHsKKwkJCVN5c3RlbS5vdXQucHJpbnRsbigiRW50ZXIgYSBsaXN0IG9mIGZpbGUgcGF0aHMgb3IgVVJJcyB0aGF0IGhhdmUgY29udGVudCBsaWtlIHRoaXM6Iik7CisJCQl0cnkgeworCQkJCVJlc291cmNlIHJlc291cmNlID0gcmVzb3VyY2VTZXQuY3JlYXRlUmVzb3VyY2UoVVJJLmNyZWF0ZVVSSSgiaHR0cDovLy9NeS5leHBlcmltZW50YWwiKSk7CisJCQkJUGVyY29sYXRpb25EaXNlYXNlTW9kZWwgcm9vdCA9IEV4cGVyaW1lbnRhbEZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZVBlcmNvbGF0aW9uRGlzZWFzZU1vZGVsKCk7CisJCQkJcmVzb3VyY2UuZ2V0Q29udGVudHMoKS5hZGQocm9vdCk7CisJCQkJcmVzb3VyY2Uuc2F2ZShTeXN0ZW0ub3V0LCBudWxsKTsKKwkJCX0KKwkJCWNhdGNoIChJT0V4Y2VwdGlvbiBleGNlcHRpb24pIHsKKwkJCQlleGNlcHRpb24ucHJpbnRTdGFja1RyYWNlKCk7CisJCQl9CisJCX0KKwkJZWxzZSB7CisJCQkvLyBJdGVyYXRlIG92ZXIgYWxsIHRoZSBhcmd1bWVudHMuCisJCQkvLworCQkJZm9yIChpbnQgaSA9IDA7IGkgPCBhcmdzLmxlbmd0aDsgKytpKSB7CisJCQkJLy8gQ29uc3RydWN0IHRoZSBVUkkgZm9yIHRoZSBpbnN0YW5jZSBmaWxlLgorCQkJCS8vIFRoZSBhcmd1bWVudCBpcyB0cmVhdGVkIGFzIGEgZmlsZSBwYXRoIG9ubHkgaWYgaXQgZGVub3RlcyBhbiBleGlzdGluZyBmaWxlLgorCQkJCS8vIE90aGVyd2lzZSwgaXQncyBkaXJlY3RseSB0cmVhdGVkIGFzIGEgVVJMLgorCQkJCS8vCisJCQkJRmlsZSBmaWxlID0gbmV3IEZpbGUoYXJnc1tpXSk7CisJCQkJVVJJIHVyaSA9IGZpbGUuaXNGaWxlKCkgPyBVUkkuY3JlYXRlRmlsZVVSSShmaWxlLmdldEFic29sdXRlUGF0aCgpKTogVVJJLmNyZWF0ZVVSSShhcmdzW2ldKTsKKworCQkJCXRyeSB7CisJCQkJCS8vIERlbWFuZCBsb2FkIHJlc291cmNlIGZvciB0aGlzIGZpbGUuCisJCQkJCS8vCisJCQkJCVJlc291cmNlIHJlc291cmNlID0gcmVzb3VyY2VTZXQuZ2V0UmVzb3VyY2UodXJpLCB0cnVlKTsKKwkJCQkJU3lzdGVtLm91dC5wcmludGxuKCJMb2FkZWQgIiArIHVyaSk7CisKKwkJCQkJLy8gVmFsaWRhdGUgdGhlIGNvbnRlbnRzIG9mIHRoZSBsb2FkZWQgcmVzb3VyY2UuCisJCQkJCS8vCisJCQkJCWZvciAoRU9iamVjdCBlT2JqZWN0IDogcmVzb3VyY2UuZ2V0Q29udGVudHMoKSkgeworCQkJCQkJRGlhZ25vc3RpYyBkaWFnbm9zdGljID0gRGlhZ25vc3RpY2lhbi5JTlNUQU5DRS52YWxpZGF0ZShlT2JqZWN0KTsKKwkJCQkJCWlmIChkaWFnbm9zdGljLmdldFNldmVyaXR5KCkgIT0gRGlhZ25vc3RpYy5PSykgeworCQkJCQkJCXByaW50RGlhZ25vc3RpYyhkaWFnbm9zdGljLCAiIik7CisJCQkJCQl9CisJCQkJCX0KKwkJCQl9CisJCQkJY2F0Y2ggKFJ1bnRpbWVFeGNlcHRpb24gZXhjZXB0aW9uKSB7CisJCQkJCVN5c3RlbS5vdXQucHJpbnRsbigiUHJvYmxlbSBsb2FkaW5nICIgKyB1cmkpOworCQkJCQlleGNlcHRpb24ucHJpbnRTdGFja1RyYWNlKCk7CisJCQkJfQorCQkJfQorCQl9CisJfQorCQorCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogUHJpbnRzIGRpYWdub3N0aWNzIHdpdGggaW5kZW50YXRpb24uCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIGRpYWdub3N0aWMgdGhlIGRpYWdub3N0aWMgdG8gcHJpbnQuCisJICogQHBhcmFtIGluZGVudCB0aGUgaW5kZW50YXRpb24gZm9yIHByaW50aW5nLgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgc3RhdGljIHZvaWQgcHJpbnREaWFnbm9zdGljKERpYWdub3N0aWMgZGlhZ25vc3RpYywgU3RyaW5nIGluZGVudCkgeworCQlTeXN0ZW0ub3V0LnByaW50KGluZGVudCk7CisJCVN5c3RlbS5vdXQucHJpbnRsbihkaWFnbm9zdGljLmdldE1lc3NhZ2UoKSk7CisJCWZvciAoRGlhZ25vc3RpYyBjaGlsZCA6IGRpYWdub3N0aWMuZ2V0Q2hpbGRyZW4oKSkgeworCQkJcHJpbnREaWFnbm9zdGljKGNoaWxkLCBpbmRlbnQgKyAiICAiKTsKKwkJfQorCX0KKworfSAvL0V4cGVyaW1lbnRhbEV4YW1wbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGlzZWFzZW1vZGVscy5leHBlcmltZW50YWwvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9leHBlcmltZW50YWwvdGVzdHMvRXhwZXJpbWVudGFsVGVzdHMuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGlzZWFzZW1vZGVscy5leHBlcmltZW50YWwvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9leHBlcmltZW50YWwvdGVzdHMvRXhwZXJpbWVudGFsVGVzdHMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZjJjZWFiCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kaXNlYXNlbW9kZWxzLmV4cGVyaW1lbnRhbC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL2V4cGVyaW1lbnRhbC90ZXN0cy9FeHBlcmltZW50YWxUZXN0cy5qYXZhCkBAIC0wLDAgKzEsNTcgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4cGVyaW1lbnRhbC50ZXN0czsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdDsKK2ltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdFN1aXRlOworaW1wb3J0IGp1bml0LnRleHR1aS5UZXN0UnVubmVyOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiBBIHRlc3Qgc3VpdGUgZm9yIHRoZSAnPGVtPjxiPmV4cGVyaW1lbnRhbDwvYj48L2VtPicgcGFja2FnZS4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgRXhwZXJpbWVudGFsVGVzdHMgZXh0ZW5kcyBUZXN0U3VpdGUgeworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKKwkJVGVzdFJ1bm5lci5ydW4oc3VpdGUoKSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHN0YXRpYyBUZXN0IHN1aXRlKCkgeworCQlUZXN0U3VpdGUgc3VpdGUgPSBuZXcgRXhwZXJpbWVudGFsVGVzdHMoImV4cGVyaW1lbnRhbCBUZXN0cyIpOworCQlzdWl0ZS5hZGRUZXN0U3VpdGUoUGVyY29sYXRpb25EaXNlYXNlTW9kZWxUZXN0LmNsYXNzKTsKKwkJc3VpdGUuYWRkVGVzdFN1aXRlKFRCRGlzZWFzZU1vZGVsTGFiZWxUZXN0LmNsYXNzKTsKKwkJc3VpdGUuYWRkVGVzdFN1aXRlKFRCRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZVRlc3QuY2xhc3MpOworCQlzdWl0ZS5hZGRUZXN0U3VpdGUoVEJEaXNlYXNlTW9kZWxUZXN0LmNsYXNzKTsKKwkJcmV0dXJuIHN1aXRlOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFeHBlcmltZW50YWxUZXN0cyhTdHJpbmcgbmFtZSkgeworCQlzdXBlcihuYW1lKTsKKwl9CisKK30gLy9FeHBlcmltZW50YWxUZXN0cwpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kaXNlYXNlbW9kZWxzLmV4cGVyaW1lbnRhbC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL2V4cGVyaW1lbnRhbC90ZXN0cy9QZXJjb2xhdGlvbkRpc2Vhc2VNb2RlbFRlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGlzZWFzZW1vZGVscy5leHBlcmltZW50YWwvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9leHBlcmltZW50YWwvdGVzdHMvUGVyY29sYXRpb25EaXNlYXNlTW9kZWxUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWY0MDg2ZgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGlzZWFzZW1vZGVscy5leHBlcmltZW50YWwvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9leHBlcmltZW50YWwvdGVzdHMvUGVyY29sYXRpb25EaXNlYXNlTW9kZWxUZXN0LmphdmEKQEAgLTAsMCArMSwzMjggQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4cGVyaW1lbnRhbC50ZXN0czsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqYXZhLnV0aWwuUmFuZG9tOworCitpbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOworaW1wb3J0IGp1bml0LnRleHR1aS5UZXN0UnVubmVyOworCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4cGVyaW1lbnRhbC5FeHBlcmltZW50YWxGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leHBlcmltZW50YWwuUGVyY29sYXRpb25EaXNlYXNlTW9kZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4cGVyaW1lbnRhbC5pbXBsLlBlcmNvbGF0aW9uRGlzZWFzZU1vZGVsSW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU0VJUkxhYmVsVmFsdWU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuaW1wbC5TRUlSTGFiZWxWYWx1ZUltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLnRlc3RzLlNFSVJMYWJlbFZhbHVlVGVzdFV0aWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kaXNlYXNlbW9kZWxzLkFjdGl2YXRvcjsKKworCisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIEEgdGVzdCBjYXNlIGZvciB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+UGVyY29sYXRpb24gRGlzZWFzZSBNb2RlbDwvYj48L2VtPicuCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIFBlcmNvbGF0aW9uRGlzZWFzZU1vZGVsVGVzdCBleHRlbmRzIFRlc3RDYXNlIHsKKworCS8qKgorCSAqIFNlZWQgZm9yIHRlc3QKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIGxvbmcgUkFORE9NX1NFRUQgPSAxbDsKKwkKKwkvKioKKwkgKiBkZWZhdWx0IGdhaW4gZmFjdG9yCisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBkb3VibGUgVEVTVF9HQUlOID0gMC4wMWQ7CisJCisJCisJLyoqCisJICogVGhlIGZpeHR1cmUgZm9yIHRoaXMgUGVyY29sYXRpb24gRGlzZWFzZSBNb2RlbCB0ZXN0IGNhc2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIFBlcmNvbGF0aW9uRGlzZWFzZU1vZGVsIGZpeHR1cmUgPSBudWxsOworCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgeworCQlUZXN0UnVubmVyLnJ1bihQZXJjb2xhdGlvbkRpc2Vhc2VNb2RlbFRlc3QuY2xhc3MpOworCX0KKworCS8qKgorCSAqIENvbnN0cnVjdHMgYSBuZXcgUGVyY29sYXRpb24gRGlzZWFzZSBNb2RlbCB0ZXN0IGNhc2Ugd2l0aCB0aGUgZ2l2ZW4gbmFtZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgUGVyY29sYXRpb25EaXNlYXNlTW9kZWxUZXN0KFN0cmluZyBuYW1lKSB7CisJCXN1cGVyKG5hbWUpOworCX0KKworCS8qKgorCSAqIFRlc3RzIHRoZSBtb2RlbFNwZWNpZmljQWRqdXN0bWVudHMgb3BlcmF0aW9uLgorCSAqIAorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJcHVibGljIHZvaWQgdGVzdE1vZGVsU3BlY2lmaWNBZGp1c3RtZW50cygpeworCQlQZXJjb2xhdGlvbkRpc2Vhc2VNb2RlbFRlc3RlckltcGwgcGVyY29sYXRpb25EaXNlYXNlTW9kZWwgPSBuZXcgUGVyY29sYXRpb25EaXNlYXNlTW9kZWxUZXN0ZXJJbXBsKCk7CisJCVNFSVJMYWJlbFZhbHVlSW1wbCBjdXJyZW50U0VJUiA9IG5ldyBTRUlSTGFiZWxWYWx1ZUltcGwoMTAwMGQsIDUwZCwgNDBkLCAzMGQsIDIwZCwgMTBkKTsKKwkJU0VJUkxhYmVsVmFsdWVJbXBsIHNlaXJBZGRpdGlvbnMgPSBuZXcgU0VJUkxhYmVsVmFsdWVJbXBsKDEwZCwgMWQsIDJkLCAzZCwgM2QsIDFkKTsKKwkJU0VJUkxhYmVsVmFsdWVJbXBsIHNlaXJEZWF0aHMgPSBuZXcgU0VJUkxhYmVsVmFsdWVJbXBsKDEwZCwgMWQsIDJkLCAzZCwgM2QsIDFkKTsKKwkJLy9kb1Rlc3QocGVyY29sYXRpb25EaXNlYXNlTW9kZWwsIGN1cnJlbnRTRUlSLCBzZWlyQWRkaXRpb25zLCBzZWlyRGVhdGhzKTsKKwkJLy8gVE9ETyBQZXJjb2xhdGlvbiBkaXNlYXNlIG1vZGVsIGlzIHN0aWxsIHVuZGVyIGRldmVsb3BtZW50CisJCUFjdGl2YXRvci5sb2dJbmZvcm1hdGlvbigiUGVyY29sYXRpb24gZGlzZWFzZSBtb2RlbCBpcyBzdGlsbCB1bmRlciBkZXZlbG9wbWVudCIpOworCQlhc3NlcnRUcnVlKHRydWUpOworCX0KKwkKKwkKKwkvKioKKwkgKiBEbyB0aGUgdGVzdAorCSAqIEBwYXJhbSBwZXJjb2xhdGlvbkRpc2Vhc2VNb2RlbAorCSAqIEBwYXJhbSBjdXJyZW50U0VJUgorCSAqIEBwYXJhbSBzZWlyQWRkaXRpb25zCisJICogQHBhcmFtIHNlaXJEZWF0aHMKKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCXByaXZhdGUgdm9pZCBkb1Rlc3QoUGVyY29sYXRpb25EaXNlYXNlTW9kZWxUZXN0ZXJJbXBsIHBlcmNvbGF0aW9uRGlzZWFzZU1vZGVsLAorCQkJU0VJUkxhYmVsVmFsdWVJbXBsIGN1cnJlbnRTRUlSLCBTRUlSTGFiZWxWYWx1ZUltcGwgc2VpckFkZGl0aW9ucywKKwkJCVNFSVJMYWJlbFZhbHVlSW1wbCBzZWlyRGVhdGhzKSB7CisJCVNFSVJMYWJlbFZhbHVlSW1wbCBuZXdTZWlyQWRkaXRpb25zID0gU0VJUkxhYmVsVmFsdWVUZXN0VXRpbC5jbG9uZVNFSVJMYWJlbFZhbHVlSW1wbChzZWlyQWRkaXRpb25zKTsKKwkJU0VJUkxhYmVsVmFsdWVJbXBsIG5ld1NlaXJEZWF0aHMgPSBTRUlSTGFiZWxWYWx1ZVRlc3RVdGlsLmNsb25lU0VJUkxhYmVsVmFsdWVJbXBsKHNlaXJEZWF0aHMpOworCQkKKwkJcGVyY29sYXRpb25EaXNlYXNlTW9kZWwuZG9Nb2RlbFNwZWNpZmljQWRqdXN0bWVudHMoY3VycmVudFNFSVIsIFJBTkRPTV9TRUVELCBURVNUX0dBSU4pOworCQkKKwkJU0VJUkxhYmVsVmFsdWVJbXBsIGNhbGN1bGF0ZWRTZWlyQWRkaXRpb25zID0gU0VJUkxhYmVsVmFsdWVUZXN0VXRpbC5jbG9uZVNFSVJMYWJlbFZhbHVlSW1wbChzZWlyQWRkaXRpb25zKTsKKwkJU0VJUkxhYmVsVmFsdWVJbXBsIGNhbGN1bGF0ZWRTZWlyRGVhdGhzID0gU0VJUkxhYmVsVmFsdWVUZXN0VXRpbC5jbG9uZVNFSVJMYWJlbFZhbHVlSW1wbChzZWlyRGVhdGhzKTsKKwkJCisJCWRvQ2FsY3VsYXRlTW9kZWxTcGVjaWZpY0FkanVzdG1lbnRzKGN1cnJlbnRTRUlSLCBjYWxjdWxhdGVkU2VpckFkZGl0aW9ucywgY2FsY3VsYXRlZFNlaXJEZWF0aHMsIFJBTkRPTV9TRUVELCBURVNUX0dBSU4pOworCisJCVN0cmluZyBzdGF0ZSA9IGdldFN0YXRlKGN1cnJlbnRTRUlSLCBzZWlyQWRkaXRpb25zLCBzZWlyRGVhdGhzLCBuZXdTZWlyQWRkaXRpb25zLCBuZXdTZWlyRGVhdGhzLCBjYWxjdWxhdGVkU2VpckFkZGl0aW9ucywgY2FsY3VsYXRlZFNlaXJEZWF0aHMpOworCQkKKwkJdmFsaWRhdGVNb2RlbFNwZWNpZmljQWRqdXN0bWVudHMobmV3U2VpckFkZGl0aW9ucywKKwkJCQluZXdTZWlyRGVhdGhzLAorCQkJCWNhbGN1bGF0ZWRTZWlyQWRkaXRpb25zLAorCQkJCWNhbGN1bGF0ZWRTZWlyRGVhdGhzLAorCQkJCXN0YXRlKTsKKwl9CisJCisKKwlwcml2YXRlIHZvaWQgZG9DYWxjdWxhdGVNb2RlbFNwZWNpZmljQWRqdXN0bWVudHMoCisJCQlTRUlSTGFiZWxWYWx1ZUltcGwgcEN1cnJlbnRTRUlSLAorCQkJU0VJUkxhYmVsVmFsdWVJbXBsIHBDYWxjdWxhdGVkU2VpckFkZGl0aW9ucywKKwkJCVNFSVJMYWJlbFZhbHVlSW1wbCBwQ2FsY3VsYXRlZFNlaXJEZWF0aHMsIGxvbmcgcFJhbmRvbVNlZWQsIGRvdWJsZSBwVGVzdEdhaW4pIHsKKwkJCisJCWZpbmFsIFNFSVJMYWJlbFZhbHVlIGN1cnJlbnRTRUlSID0gcEN1cnJlbnRTRUlSOworCQlmaW5hbCBTRUlSTGFiZWxWYWx1ZSBzZWlyQWRkaXRpb25zID0gcENhbGN1bGF0ZWRTZWlyQWRkaXRpb25zOworCQlmaW5hbCBTRUlSTGFiZWxWYWx1ZSBzZWlyRGVhdGhzID0gcENhbGN1bGF0ZWRTZWlyRGVhdGhzOworCQkKKwkJCisJCS8vIFRoZSBub2lzZSBpcyBhIG11bHRpcGxpZXIgb2YgKDErLy14KSB3aXRoIHggc21hbGwuCisJCS8vIENvbXB1dGUgdGhlIHRyYW5zaXRpb25zCisJCQorCQlSYW5kb20gcmFuZG9tID0gbmV3IFJhbmRvbShwUmFuZG9tU2VlZCk7CisJCQorCQlzZWlyQWRkaXRpb25zLnNldFMoTWF0aC5taW4oY3VycmVudFNFSVIuZ2V0UigpLCAoc2VpckFkZGl0aW9ucy5nZXRTKCkgKiBjb21wdXRlTm9pc2UocFRlc3RHYWluLCByYW5kb20pKSkpOworCQorCQlzZWlyQWRkaXRpb25zLnNldEUoTWF0aC5taW4oY3VycmVudFNFSVIuZ2V0UygpLCAoc2VpckFkZGl0aW9ucy5nZXRFKCkgKiBjb21wdXRlTm9pc2UocFRlc3RHYWluLCByYW5kb20pKSkpOworCQorCQlzZWlyQWRkaXRpb25zLnNldFIoTWF0aC5taW4oY3VycmVudFNFSVIuZ2V0SSgpLCAoc2VpckFkZGl0aW9ucy5nZXRSKCkgKiBjb21wdXRlTm9pc2UocFRlc3RHYWluLCByYW5kb20pKSkpOworICAgICAgIAorCQkKKwkJCisJCQorCQkKKwkJLy8gSW5mZWN0aW91cyBjYXNlIGlzIG1vcmUgY29tcGxpY2F0ZWQKKwkJZG91YmxlIGlub2lzeSA9IHNlaXJBZGRpdGlvbnMuZ2V0SSgpKiBjb21wdXRlTm9pc2UocFRlc3RHYWluLCByYW5kb20pOworCQlkb3VibGUgZGVsdGFJbm9pc2UgPSBpbm9pc3k7CisJCWlmIChkZWx0YUlub2lzZSA+IGN1cnJlbnRTRUlSLmdldEUoKSkgeworCQkJZG91YmxlIHJlc2NhbGUgPSBjdXJyZW50U0VJUi5nZXRFKCkgLyBkZWx0YUlub2lzZTsKKwkJCWlub2lzeSAqPSByZXNjYWxlOworCQl9CisJCQorCQkvLyBzZXQgdGhlIGNoYW5nZSBpbiBpbmZlY3Rpb3VzIHJlY292ZXJlZAorCQlzZWlyQWRkaXRpb25zLnNldEkoaW5vaXN5KTsKKwkJCisJCS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKKyAgICAgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworCQkvLyBub3cgaGFuZGxlIHRoZSBkZWF0aHMKKwkJc2VpckRlYXRocy5zZXRTKE1hdGgubWluKGN1cnJlbnRTRUlSLmdldFMoKSAsIChzZWlyRGVhdGhzLmdldFMoKSAqIGNvbXB1dGVOb2lzZShwVGVzdEdhaW4sIHJhbmRvbSkpKSk7CisKKwkJc2VpckRlYXRocy5zZXRFKE1hdGgubWluKGN1cnJlbnRTRUlSLmdldEUoKSAsIChzZWlyRGVhdGhzLmdldEUoKSAqIGNvbXB1dGVOb2lzZShwVGVzdEdhaW4sIHJhbmRvbSkpKSk7CisgICAgICAgIAorCQlzZWlyRGVhdGhzLnNldFIoTWF0aC5taW4oY3VycmVudFNFSVIuZ2V0UigpICwgKHNlaXJEZWF0aHMuZ2V0UigpICogY29tcHV0ZU5vaXNlKHBUZXN0R2FpbiwgcmFuZG9tKSkpKTsKKwkJCisJCQkJCisJfQorCisJcHJpdmF0ZSB2b2lkIHZhbGlkYXRlTW9kZWxTcGVjaWZpY0FkanVzdG1lbnRzKFNFSVJMYWJlbFZhbHVlSW1wbCBuZXdTZWlyQWRkaXRpb25zLAorCQkJU0VJUkxhYmVsVmFsdWVJbXBsIG5ld1NlaXJEZWF0aHMsCisJCQlTRUlSTGFiZWxWYWx1ZUltcGwgY2FsY3VsYXRlZFNlaXJBZGRpdGlvbnMsCisJCQlTRUlSTGFiZWxWYWx1ZUltcGwgY2FsY3VsYXRlZFNlaXJEZWF0aHMsCisJCQlTdHJpbmcgc3RhdGUpIHsKKworCQkKKwkJdHJ5eworCQkJbmV3U2VpckFkZGl0aW9ucy5zYW5lKCk7CisJCX0KKwkJY2F0Y2goVGhyb3dhYmxlIHQpeworCQkJdGhyb3cgbmV3IElsbGVnYWxTdGF0ZUV4Y2VwdGlvbigibmV3U2VpckFkZGl0aW9ucyBpcyBpbnNhbmUsIHN0YXRlIGlzOiAiICsgc3RhdGUsIHQpOworCQl9CisJCXRyeXsKKwkJCW5ld1NlaXJEZWF0aHMuc2FuZSgpOworCQl9CisJCWNhdGNoKFRocm93YWJsZSB0KXsKKwkJCXRocm93IG5ldyBJbGxlZ2FsU3RhdGVFeGNlcHRpb24oIm5ld1NlaXJEZWF0aHMgaXMgaW5zYW5lLCBzdGF0ZSBpczogIiArIHN0YXRlLCB0KTsKKwkJfQorCisJCQorCQkKKwkJYXNzZXJ0VHJ1ZShTdHJpbmcuZm9ybWF0KCJuZXdTZWlyQWRkaXRpb25zIGhhcyBpbnNhbmUgdmFsdWVzICVzIiwgc3RhdGUpLCBteVNhbml0eUNoZWNrKG5ld1NlaXJBZGRpdGlvbnMpKTsKKwkJYXNzZXJ0VHJ1ZShTdHJpbmcuZm9ybWF0KCJuZXdTZWlyRGVhdGhzIGhhcyBpbnNhbmUgdmFsdWVzICVzIiwgc3RhdGUpLCBteVNhbml0eUNoZWNrKG5ld1NlaXJEZWF0aHMpKTsKKworCQlTeXN0ZW0ub3V0LnByaW50bG4oImNhbGN1bGF0ZWQgPSAiK2NhbGN1bGF0ZWRTZWlyQWRkaXRpb25zLnRvU3RyaW5nKCkpOworCQlTeXN0ZW0ub3V0LnByaW50bG4oIm5ldyA9ICIrbmV3U2VpckFkZGl0aW9ucy50b1N0cmluZygpKTsKKwkJYXNzZXJ0VHJ1ZShTdHJpbmcuZm9ybWF0KCJuZXdTZWlyQWRkaXRpb25zWyVzXSAhPSBjYWxjdWxhdGVkU2VpckFkZGl0aW9uc1slc10iLCBuZXdTZWlyQWRkaXRpb25zLCBjYWxjdWxhdGVkU2VpckFkZGl0aW9ucyksIGNoZWNrRXF1YWwoY2FsY3VsYXRlZFNlaXJBZGRpdGlvbnMsIG5ld1NlaXJBZGRpdGlvbnMpKTsKKwkJYXNzZXJ0VHJ1ZShTdHJpbmcuZm9ybWF0KCJuZXdTZWlyRGVhdGhzWyVzXSAhPSBjYWxjdWxhdGVkU2VpckRlYXRoc1slc10iLCBuZXdTZWlyRGVhdGhzLCBjYWxjdWxhdGVkU2VpckRlYXRocyksIGNoZWNrRXF1YWwoY2FsY3VsYXRlZFNlaXJEZWF0aHMsIG5ld1NlaXJEZWF0aHMpKTsKKwkJCisJfQorCQorCXByaXZhdGUgYm9vbGVhbiBjaGVja0VxdWFsKFNFSVJMYWJlbFZhbHVlSW1wbCBwQ2FsY3VsYXRlZFNlaXJBZGRpdGlvbnMsCisJCQlTRUlSTGFiZWxWYWx1ZUltcGwgcE5ld1NlaXJBZGRpdGlvbnMpIHsKKwkJaWYoKHBDYWxjdWxhdGVkU2VpckFkZGl0aW9ucy5nZXREaXNlYXNlRGVhdGhzKCkgIT0gcE5ld1NlaXJBZGRpdGlvbnMuZ2V0RGlzZWFzZURlYXRocygpKSB8fAorCQkJCShwQ2FsY3VsYXRlZFNlaXJBZGRpdGlvbnMuZ2V0RSgpICE9IHBOZXdTZWlyQWRkaXRpb25zLmdldEUoKSkgfHwKKwkJCQkocENhbGN1bGF0ZWRTZWlyQWRkaXRpb25zLmdldEkoKSAhPSBwTmV3U2VpckFkZGl0aW9ucy5nZXRJKCkpIHx8CisJCQkJKHBDYWxjdWxhdGVkU2VpckFkZGl0aW9ucy5nZXRQb3B1bGF0aW9uQ291bnQoKSAhPSBwTmV3U2VpckFkZGl0aW9ucy5nZXRQb3B1bGF0aW9uQ291bnQoKSkgfHwKKwkJCQkocENhbGN1bGF0ZWRTZWlyQWRkaXRpb25zLmdldFIoKSAhPSBwTmV3U2VpckFkZGl0aW9ucy5nZXRSKCkpIHx8CisJCQkJKHBDYWxjdWxhdGVkU2VpckFkZGl0aW9ucy5nZXRTKCkgIT0gcE5ld1NlaXJBZGRpdGlvbnMuZ2V0UygpKSl7CisJCQkJCXJldHVybiBmYWxzZTsKKwkJCQl9CisJCXJldHVybiB0cnVlOworCX0KKworCXByaXZhdGUgYm9vbGVhbiBteVNhbml0eUNoZWNrKFNFSVJMYWJlbFZhbHVlSW1wbCBwU2VpcikgeworCQlyZXR1cm4gYXNzZXJ0VmFsaWREb3VibGUocFNlaXIuZ2V0RSgpKSAmJiAKKwkJCWFzc2VydFZhbGlkRG91YmxlKHBTZWlyLmdldEkoKSkgJiYgCisJCQlhc3NlcnRWYWxpZERvdWJsZShwU2Vpci5nZXRSKCkpICYmIAorCQkJYXNzZXJ0VmFsaWREb3VibGUocFNlaXIuZ2V0UygpKTsKKwkJCisJfQorCQorCisJLyoqCisJICogVGhpcyBtZXRob2QgcmV0dXJucyBhIGRvdWJsZSBwcmVjaXNpb24gcmFuZG9tIG5vaXNlIHZhcmlhYmxlCisJICogciBiZXR3ZWVuICgxLjAreCkgYW5kICgxLjAteCkKKwkgKiB3aGVyZSB4IGlzIGEgcHJvZHVjdCBHKiBNYXRoLnJhbmQoKSwgYW5kIEcgaXMgYSBnYWluIGZhY3RvciAwPEc8bWF4IG5vaXNlCisJICogCisJICogQHBhcmFtIGdhaW4KKwkgKiBAcGFyYW0gcmFuZAorCSAqIEByZXR1cm4gbm9pc2UKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGRvdWJsZSBjb21wdXRlTm9pc2UoZmluYWwgZG91YmxlIGdhaW4sIGZpbmFsIFJhbmRvbSByYW5kKSB7CisKKwkJZG91YmxlIHggPSAoMi4wKnJhbmQubmV4dERvdWJsZSgpKS0xLjA7IC8vICsvLSAxCisJCXggKj0gZ2FpbjsKKwkJeCArPSAxLjA7CisJCWFzc2VydCAoKHg+MC4wKSYmKHg8Mi4wKSkgOiAicmFuZG9tIG5vaXNlIHNob3VsZCBiZSBhIHNtYWxsIHBlcnR1cmJhdGlvbiBHYWluIGZhY3RvciwgZywgIG11c3QgMC4wIDwgZyA8PCAxLjAgIjsKKwkJcmV0dXJuIHg7CisJCQorCX0gLy8gZ2V0Tm9pc2UKKwkKKworCXByaXZhdGUgYm9vbGVhbiBhc3NlcnRWYWxpZERvdWJsZShkb3VibGUgcERvdWJsZSkgeworCQlyZXR1cm4gIShEb3VibGUuaXNOYU4ocERvdWJsZSkgfHwgRG91YmxlLmlzSW5maW5pdGUocERvdWJsZSkpOworCX0KKwkKKworCXByaXZhdGUgU3RyaW5nIGdldFN0YXRlKFNFSVJMYWJlbFZhbHVlSW1wbCBwQ3VycmVudFNFSVIsCisJCQlTRUlSTGFiZWxWYWx1ZUltcGwgcFNlaXJBZGRpdGlvbnMsIFNFSVJMYWJlbFZhbHVlSW1wbCBwU2VpckRlYXRocywKKwkJCVNFSVJMYWJlbFZhbHVlSW1wbCBwTmV3U2VpckFkZGl0aW9ucywKKwkJCVNFSVJMYWJlbFZhbHVlSW1wbCBwTmV3U2VpckRlYXRocywgU0VJUkxhYmVsVmFsdWVJbXBsIHBDYWxjdWxhdGVkU2VpckFkZGl0aW9ucywgU0VJUkxhYmVsVmFsdWVJbXBsIHBDYWxjdWxhdGVkU2VpckRlYXRocykgeworCQlyZXR1cm4gU3RyaW5nLmZvcm1hdCgiXG5wcmVzZW50IHN0YXRlIGlzOiBcbkN1cnJlbnRTRUlSWyVzXVxuIFNlaXJBZGRpdGlvbnNbJXNdXG4gU2VpckRlYXRoc1slc11cbiBOZXdTZWlyQWRkaXRpb25zWyVzXVxuIE5ld1NlaXJEZWF0aHNbJXNdXG4gQ2FsY3VsYXRlZFNlaXJBZGRpdGlvbnNbJXNdXG4gQ2FsY3VsYXRlZFNlaXJEZWF0aHNbJXNdIiwgCisJCQkJcEN1cnJlbnRTRUlSLCBwU2VpckFkZGl0aW9ucywgcFNlaXJEZWF0aHMscE5ld1NlaXJBZGRpdGlvbnMscE5ld1NlaXJEZWF0aHMsIHBDYWxjdWxhdGVkU2VpckFkZGl0aW9ucywgcENhbGN1bGF0ZWRTZWlyRGVhdGhzKTsKKwl9CisKKwkKKwkKKwkvKioKKwkgKiBTZXRzIHRoZSBmaXh0dXJlIGZvciB0aGlzIFBlcmNvbGF0aW9uIERpc2Vhc2UgTW9kZWwgdGVzdCBjYXNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIHNldEZpeHR1cmUoUGVyY29sYXRpb25EaXNlYXNlTW9kZWwgZml4dHVyZSkgeworCQl0aGlzLmZpeHR1cmUgPSBmaXh0dXJlOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIGZpeHR1cmUgZm9yIHRoaXMgUGVyY29sYXRpb24gRGlzZWFzZSBNb2RlbCB0ZXN0IGNhc2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIFBlcmNvbGF0aW9uRGlzZWFzZU1vZGVsIGdldEZpeHR1cmUoKSB7CisJCXJldHVybiBmaXh0dXJlOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2Ujc2V0VXAoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgdm9pZCBzZXRVcCgpIHRocm93cyBFeGNlcHRpb24geworCQlzZXRGaXh0dXJlKEV4cGVyaW1lbnRhbEZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZVBlcmNvbGF0aW9uRGlzZWFzZU1vZGVsKCkpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2UjdGVhckRvd24oKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgdm9pZCB0ZWFyRG93bigpIHRocm93cyBFeGNlcHRpb24geworCQlzZXRGaXh0dXJlKG51bGwpOworCX0KKworCQorCS8qKgorCSAqIGNyZWF0ZWQganVzdCBmb3IgdGVzdGluZ3Mgc2luY2UgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuaW1wbC5TdG9jaGFzdGljRGlzZWFzZU1vZGVsSW1wbCNkb01vZGVsU3BlY2lmaWNBZGp1c3RtZW50cygpIDxlbT5kb01vZGVsU3BlY2lmaWNBZGp1c3RtZW50czwvZW0+fScgaXMgcHJvdGVjdGVkLgorCSAqIEBhdXRob3Iga2F1Zm1hbgorCSAqCisJICovCisJcHJpdmF0ZSBjbGFzcyBQZXJjb2xhdGlvbkRpc2Vhc2VNb2RlbFRlc3RlckltcGwgZXh0ZW5kcyBQZXJjb2xhdGlvbkRpc2Vhc2VNb2RlbEltcGx7CisKKwkJcHVibGljIHZvaWQgZG9Nb2RlbFNwZWNpZmljQWRqdXN0bWVudHMoCisJCQkJU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbFZhbHVlIHBDdXJyZW50U3RhdGUsCisJCQkJbG9uZyBwUmFuZG9tU2VlZCwgZG91YmxlIHBUZXN0R2FpbikgeworCQkJLy8gVE9ETyBBdXRvLWdlbmVyYXRlZCBtZXRob2Qgc3R1YgorCQkJc2V0U2VlZChwUmFuZG9tU2VlZCk7CisJCQlzZXRHYWluKHBUZXN0R2Fpbik7CisJCQkKKwkJCS8vU0VJUkxhYmVsVmFsdWVJbXBsIG9sZEN1cnJlbnRTdGF0ZSA9IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC50ZXN0cy5TRUlSTGFiZWxWYWx1ZVRlc3RVdGlsLmNsb25lU0VJUkxhYmVsVmFsdWVJbXBsKChTRUlSTGFiZWxWYWx1ZUltcGwpcEN1cnJlbnRTdGF0ZSk7CisJCQkvL1NFSVJMYWJlbFZhbHVlSW1wbCBvbGRTdGF0ZUFkZGl0aW9uczIgPSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQudGVzdHMuU0VJUkxhYmVsVmFsdWVUZXN0VXRpbC5jbG9uZVNFSVJMYWJlbFZhbHVlSW1wbCgoU0VJUkxhYmVsVmFsdWVJbXBsKXBTdGF0ZUFkZGl0aW9uczIpOworCQkJLy9TRUlSTGFiZWxWYWx1ZUltcGwgb2xkU3RhdGVEZWF0aHMyID0gb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLnRlc3RzLlNFSVJMYWJlbFZhbHVlVGVzdFV0aWwuY2xvbmVTRUlSTGFiZWxWYWx1ZUltcGwoKFNFSVJMYWJlbFZhbHVlSW1wbClwU3RhdGVEZWF0aHMyKTsKKwkJCQorCQkJc3VwZXIuZG9Nb2RlbFNwZWNpZmljQWRqdXN0bWVudHMocEN1cnJlbnRTdGF0ZSk7CisJCX0KKwkJCisJfS8vIFBlcmNvbGF0aW9uRGlzZWFzZU1vZGVsVGVzdGVySW1wbCAgaW5uZXIgY2xhc3MKKwkKK30gLy9QZXJjb2xhdGlvbkRpc2Vhc2VNb2RlbFRlc3QKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGlzZWFzZW1vZGVscy5leHBlcmltZW50YWwvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9leHBlcmltZW50YWwvdGVzdHMvVEJEaXNlYXNlTW9kZWxMYWJlbFRlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGlzZWFzZW1vZGVscy5leHBlcmltZW50YWwvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9leHBlcmltZW50YWwvdGVzdHMvVEJEaXNlYXNlTW9kZWxMYWJlbFRlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45N2VmNjA3Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kaXNlYXNlbW9kZWxzLmV4cGVyaW1lbnRhbC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL2V4cGVyaW1lbnRhbC90ZXN0cy9UQkRpc2Vhc2VNb2RlbExhYmVsVGVzdC5qYXZhCkBAIC0wLDAgKzEsOTcgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4cGVyaW1lbnRhbC50ZXN0czsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogCisgKiBDb3B5cmlnaHQgKGMpIDIwMTEgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuIAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyAKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0IAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwgCisgKiAKKyAqIENvbnRyaWJ1dG9yczogCisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7CitpbXBvcnQganVuaXQudGV4dHVpLlRlc3RSdW5uZXI7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXhwZXJpbWVudGFsLkV4cGVyaW1lbnRhbEZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4cGVyaW1lbnRhbC5UQkRpc2Vhc2VNb2RlbExhYmVsOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiBBIHRlc3QgY2FzZSBmb3IgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPlRCIERpc2Vhc2UgTW9kZWwgTGFiZWw8L2I+PC9lbT4nLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBUQkRpc2Vhc2VNb2RlbExhYmVsVGVzdCBleHRlbmRzIFRlc3RDYXNlIHsKKworCS8qKgorCSAqIFRoZSBmaXh0dXJlIGZvciB0aGlzIFRCIERpc2Vhc2UgTW9kZWwgTGFiZWwgdGVzdCBjYXNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBUQkRpc2Vhc2VNb2RlbExhYmVsIGZpeHR1cmUgPSBudWxsOworCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgeworCQlUZXN0UnVubmVyLnJ1bihUQkRpc2Vhc2VNb2RlbExhYmVsVGVzdC5jbGFzcyk7CisJfQorCisJLyoqCisJICogQ29uc3RydWN0cyBhIG5ldyBUQiBEaXNlYXNlIE1vZGVsIExhYmVsIHRlc3QgY2FzZSB3aXRoIHRoZSBnaXZlbiBuYW1lLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBUQkRpc2Vhc2VNb2RlbExhYmVsVGVzdChTdHJpbmcgbmFtZSkgeworCQlzdXBlcihuYW1lKTsKKwl9CisKKwkvKioKKwkgKiBTZXRzIHRoZSBmaXh0dXJlIGZvciB0aGlzIFRCIERpc2Vhc2UgTW9kZWwgTGFiZWwgdGVzdCBjYXNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIHNldEZpeHR1cmUoVEJEaXNlYXNlTW9kZWxMYWJlbCBmaXh0dXJlKSB7CisJCXRoaXMuZml4dHVyZSA9IGZpeHR1cmU7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgZml4dHVyZSBmb3IgdGhpcyBUQiBEaXNlYXNlIE1vZGVsIExhYmVsIHRlc3QgY2FzZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgVEJEaXNlYXNlTW9kZWxMYWJlbCBnZXRGaXh0dXJlKCkgeworCQlyZXR1cm4gZml4dHVyZTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlI3NldFVwKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgc2V0VXAoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJc2V0Rml4dHVyZShFeHBlcmltZW50YWxGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVUQkRpc2Vhc2VNb2RlbExhYmVsKCkpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2UjdGVhckRvd24oKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgdm9pZCB0ZWFyRG93bigpIHRocm93cyBFeGNlcHRpb24geworCQlzZXRGaXh0dXJlKG51bGwpOworCX0KKworfSAvL1RCRGlzZWFzZU1vZGVsTGFiZWxUZXN0CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRpc2Vhc2Vtb2RlbHMuZXhwZXJpbWVudGFsL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvZXhwZXJpbWVudGFsL3Rlc3RzL1RCRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZVRlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGlzZWFzZW1vZGVscy5leHBlcmltZW50YWwvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9leHBlcmltZW50YWwvdGVzdHMvVEJEaXNlYXNlTW9kZWxMYWJlbFZhbHVlVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE1NjkwNzkKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRpc2Vhc2Vtb2RlbHMuZXhwZXJpbWVudGFsL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvZXhwZXJpbWVudGFsL3Rlc3RzL1RCRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZVRlc3QuamF2YQpAQCAtMCwwICsxLDk3IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leHBlcmltZW50YWwudGVzdHM7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIAorICogQ29weXJpZ2h0IChjKSAyMDExIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiAKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdCAKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sIAorICogCisgKiBDb250cmlidXRvcnM6IAorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiAKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOworaW1wb3J0IGp1bml0LnRleHR1aS5UZXN0UnVubmVyOworCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4cGVyaW1lbnRhbC5FeHBlcmltZW50YWxGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leHBlcmltZW50YWwuVEJEaXNlYXNlTW9kZWxMYWJlbFZhbHVlOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiBBIHRlc3QgY2FzZSBmb3IgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPlRCIERpc2Vhc2UgTW9kZWwgTGFiZWwgVmFsdWU8L2I+PC9lbT4nLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBUQkRpc2Vhc2VNb2RlbExhYmVsVmFsdWVUZXN0IGV4dGVuZHMgVGVzdENhc2UgeworCisJLyoqCisJICogVGhlIGZpeHR1cmUgZm9yIHRoaXMgVEIgRGlzZWFzZSBNb2RlbCBMYWJlbCBWYWx1ZSB0ZXN0IGNhc2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIFRCRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZSBmaXh0dXJlID0gbnVsbDsKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKKwkJVGVzdFJ1bm5lci5ydW4oVEJEaXNlYXNlTW9kZWxMYWJlbFZhbHVlVGVzdC5jbGFzcyk7CisJfQorCisJLyoqCisJICogQ29uc3RydWN0cyBhIG5ldyBUQiBEaXNlYXNlIE1vZGVsIExhYmVsIFZhbHVlIHRlc3QgY2FzZSB3aXRoIHRoZSBnaXZlbiBuYW1lLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBUQkRpc2Vhc2VNb2RlbExhYmVsVmFsdWVUZXN0KFN0cmluZyBuYW1lKSB7CisJCXN1cGVyKG5hbWUpOworCX0KKworCS8qKgorCSAqIFNldHMgdGhlIGZpeHR1cmUgZm9yIHRoaXMgVEIgRGlzZWFzZSBNb2RlbCBMYWJlbCBWYWx1ZSB0ZXN0IGNhc2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgc2V0Rml4dHVyZShUQkRpc2Vhc2VNb2RlbExhYmVsVmFsdWUgZml4dHVyZSkgeworCQl0aGlzLmZpeHR1cmUgPSBmaXh0dXJlOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIGZpeHR1cmUgZm9yIHRoaXMgVEIgRGlzZWFzZSBNb2RlbCBMYWJlbCBWYWx1ZSB0ZXN0IGNhc2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIFRCRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZSBnZXRGaXh0dXJlKCkgeworCQlyZXR1cm4gZml4dHVyZTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlI3NldFVwKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgc2V0VXAoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJc2V0Rml4dHVyZShFeHBlcmltZW50YWxGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVUQkRpc2Vhc2VNb2RlbExhYmVsVmFsdWUoKSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZSN0ZWFyRG93bigpCisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIHRlYXJEb3duKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCXNldEZpeHR1cmUobnVsbCk7CisJfQorCit9IC8vVEJEaXNlYXNlTW9kZWxMYWJlbFZhbHVlVGVzdApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kaXNlYXNlbW9kZWxzLmV4cGVyaW1lbnRhbC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL2V4cGVyaW1lbnRhbC90ZXN0cy9UQkRpc2Vhc2VNb2RlbFRlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGlzZWFzZW1vZGVscy5leHBlcmltZW50YWwvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9leHBlcmltZW50YWwvdGVzdHMvVEJEaXNlYXNlTW9kZWxUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTFiMGViYgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGlzZWFzZW1vZGVscy5leHBlcmltZW50YWwvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9leHBlcmltZW50YWwvdGVzdHMvVEJEaXNlYXNlTW9kZWxUZXN0LmphdmEKQEAgLTAsMCArMSw5NyBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXhwZXJpbWVudGFsLnRlc3RzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAKKyAqIENvcHlyaWdodCAoYykgMjAxMSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4gCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIAorICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wIAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQgCisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbCAKKyAqIAorICogQ29udHJpYnV0b3JzOiAKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKK2ltcG9ydCBqdW5pdC50ZXh0dWkuVGVzdFJ1bm5lcjsKKworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leHBlcmltZW50YWwuRXhwZXJpbWVudGFsRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXhwZXJpbWVudGFsLlRCRGlzZWFzZU1vZGVsOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiBBIHRlc3QgY2FzZSBmb3IgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPlRCIERpc2Vhc2UgTW9kZWw8L2I+PC9lbT4nLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBUQkRpc2Vhc2VNb2RlbFRlc3QgZXh0ZW5kcyBUZXN0Q2FzZSB7CisKKwkvKioKKwkgKiBUaGUgZml4dHVyZSBmb3IgdGhpcyBUQiBEaXNlYXNlIE1vZGVsIHRlc3QgY2FzZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgVEJEaXNlYXNlTW9kZWwgZml4dHVyZSA9IG51bGw7CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CisJCVRlc3RSdW5uZXIucnVuKFRCRGlzZWFzZU1vZGVsVGVzdC5jbGFzcyk7CisJfQorCisJLyoqCisJICogQ29uc3RydWN0cyBhIG5ldyBUQiBEaXNlYXNlIE1vZGVsIHRlc3QgY2FzZSB3aXRoIHRoZSBnaXZlbiBuYW1lLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBUQkRpc2Vhc2VNb2RlbFRlc3QoU3RyaW5nIG5hbWUpIHsKKwkJc3VwZXIobmFtZSk7CisJfQorCisJLyoqCisJICogU2V0cyB0aGUgZml4dHVyZSBmb3IgdGhpcyBUQiBEaXNlYXNlIE1vZGVsIHRlc3QgY2FzZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBzZXRGaXh0dXJlKFRCRGlzZWFzZU1vZGVsIGZpeHR1cmUpIHsKKwkJdGhpcy5maXh0dXJlID0gZml4dHVyZTsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBmaXh0dXJlIGZvciB0aGlzIFRCIERpc2Vhc2UgTW9kZWwgdGVzdCBjYXNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBUQkRpc2Vhc2VNb2RlbCBnZXRGaXh0dXJlKCkgeworCQlyZXR1cm4gZml4dHVyZTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlI3NldFVwKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgc2V0VXAoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJc2V0Rml4dHVyZShFeHBlcmltZW50YWxGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVUQkRpc2Vhc2VNb2RlbCgpKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlI3RlYXJEb3duKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgdGVhckRvd24oKSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJc2V0Rml4dHVyZShudWxsKTsKKwl9CisKK30gLy9UQkRpc2Vhc2VNb2RlbFRlc3QKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGlzZWFzZW1vZGVscy5leHBlcmltZW50YWwvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdGVzdHMvZGlzZWFzZW1vZGVscy9leHBlcmltZW50YWwvRXhwZXJpbWVudGFsQWxsVGVzdHMuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGlzZWFzZW1vZGVscy5leHBlcmltZW50YWwvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdGVzdHMvZGlzZWFzZW1vZGVscy9leHBlcmltZW50YWwvRXhwZXJpbWVudGFsQWxsVGVzdHMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mOTZhN2M4Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kaXNlYXNlbW9kZWxzLmV4cGVyaW1lbnRhbC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS90ZXN0cy9kaXNlYXNlbW9kZWxzL2V4cGVyaW1lbnRhbC9FeHBlcmltZW50YWxBbGxUZXN0cy5qYXZhCkBAIC0wLDAgKzEsNTcgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kaXNlYXNlbW9kZWxzLmV4cGVyaW1lbnRhbDsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogCisgKiBDb3B5cmlnaHQgKGMpIDIwMTEgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuIAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyAKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0IAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwgCisgKiAKKyAqIENvbnRyaWJ1dG9yczogCisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdDsKK2ltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdFN1aXRlOworaW1wb3J0IGp1bml0LnRleHR1aS5UZXN0UnVubmVyOworCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4cGVyaW1lbnRhbC50ZXN0cy5FeHBlcmltZW50YWxUZXN0czsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogQSB0ZXN0IHN1aXRlIGZvciB0aGUgJzxlbT48Yj5FeHBlcmltZW50YWw8L2I+PC9lbT4nIG1vZGVsLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBFeHBlcmltZW50YWxBbGxUZXN0cyBleHRlbmRzIFRlc3RTdWl0ZSB7CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CisJCVRlc3RSdW5uZXIucnVuKHN1aXRlKCkpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBzdGF0aWMgVGVzdCBzdWl0ZSgpIHsKKwkJVGVzdFN1aXRlIHN1aXRlID0gbmV3IEV4cGVyaW1lbnRhbEFsbFRlc3RzKCJFeHBlcmltZW50YWwgVGVzdHMiKTsKKwkJc3VpdGUuYWRkVGVzdChFeHBlcmltZW50YWxUZXN0cy5zdWl0ZSgpKTsKKwkJcmV0dXJuIHN1aXRlOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFeHBlcmltZW50YWxBbGxUZXN0cyhTdHJpbmcgbmFtZSkgeworCQlzdXBlcihuYW1lKTsKKwl9CisKK30gLy9FeHBlcmltZW50YWxBbGxUZXN0cwpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kaXNlYXNlbW9kZWxzLmV4cGVyaW1lbnRhbC90ZXN0LnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGlzZWFzZW1vZGVscy5leHBlcmltZW50YWwvdGVzdC54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDhlMTFhOQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGlzZWFzZW1vZGVscy5leHBlcmltZW50YWwvdGVzdC54bWwKQEAgLTAsMCArMSw1MyBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKworPHByb2plY3QgbmFtZT0idGVzdHN1aXRlIiBkZWZhdWx0PSJydW4iIGJhc2VkaXI9Ii4iPgorICA8IS0tIFRoZSBwcm9wZXJ0eSAke2VjbGlwc2UtaG9tZX0gc2hvdWxkIGJlIHBhc3NlZCBpbnRvIHRoaXMgc2NyaXB0IC0tPgorICA8IS0tIFNldCBhIG1lYW5pbmdmdWwgZGVmYXVsdCB2YWx1ZSBmb3Igd2hlbiBpdCBpcyBub3QuIC0tPgorICA8cHJvcGVydHkgbmFtZT0iZWNsaXBzZS1ob21lIiB2YWx1ZT0iIi8+CisKKworICA8IS0tIHNldHMgdGhlIHByb3BlcnRpZXMgZWNsaXBzZS1ob21lLCBhbmQgbGlicmFyeS1maWxlIC0tPgorICA8cHJvcGVydHkgbmFtZT0icGx1Z2luLW5hbWUiIHZhbHVlPSJvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRpc2Vhc2Vtb2RlbHMuZXhwZXJpbWVudGFsIi8+CisgIDxwcm9wZXJ0eSBuYW1lPSJsaWJyYXJ5LWZpbGUiCisgICAgICAgICAgICB2YWx1ZT0iJHtlY2xpcHNlLWhvbWV9L3BsdWdpbnMvb3JnLmVjbGlwc2UudGVzdF8zLjMuMC9saWJyYXJ5LnhtbCIvPgorCisgIDwhLS0gVGhpcyB0YXJnZXQgaG9sZHMgYWxsIGluaXRpYWxpemF0aW9uIGNvZGUgdGhhdCBuZWVkcyB0byBiZSBkb25lIGZvciAtLT4KKyAgPCEtLSBhbGwgdGVzdHMgdGhhdCBhcmUgdG8gYmUgcnVuLiBJbml0aWFsaXphdGlvbiBmb3IgaW5kaXZpZHVhbCB0ZXN0cyAtLT4KKyAgPCEtLSBzaG91bGQgYmUgZG9uZSB3aXRoaW4gdGhlIGJvZHkgb2YgdGhlIHN1aXRlIHRhcmdldC4gLS0+CisgIDx0YXJnZXQgbmFtZT0iaW5pdCI+CisgICAgPHRzdGFtcC8+CisgICAgPGRlbGV0ZT4KKyAgICAgIDxmaWxlc2V0IGRpcj0iJHtlY2xpcHNlLWhvbWV9IiBpbmNsdWRlcz0ib3JnKi54bWwiLz4KKyAgICA8L2RlbGV0ZT4KKyAgPC90YXJnZXQ+CisKKyAgPCEtLSBUaGlzIHRhcmdldCBkZWZpbmVzIHRoZSB0ZXN0cyB0aGF0IG5lZWQgdG8gYmUgcnVuLiAtLT4KKyAgPHRhcmdldCBuYW1lPSJzdWl0ZSI+CisgICAgPHByb3BlcnR5IG5hbWU9ImRhdGEtZGlyIiB2YWx1ZT0iJHtlY2xpcHNlLWhvbWV9L3dvcmtzcGFjZSIvPgorICAgIDxkZWxldGUgZGlyPSIke2RhdGEtZGlyfSIgcXVpZXQ9InRydWUiLz4KKyAgICA8YW50IHRhcmdldD0idWktdGVzdCIgYW50ZmlsZT0iJHtsaWJyYXJ5LWZpbGV9IiBkaXI9IiR7ZWNsaXBzZS1ob21lfSI+CisgICAgICA8cHJvcGVydHkgbmFtZT0iZGF0YS1kaXIiIHZhbHVlPSIke2RhdGEtZGlyfSIvPgorICAgICAgPHByb3BlcnR5IG5hbWU9InBsdWdpbi1uYW1lIiB2YWx1ZT0iJHtwbHVnaW4tbmFtZX0iLz4KKyAgICAgIDxwcm9wZXJ0eSBuYW1lPSJjbGFzc25hbWUiIHZhbHVlPSJvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRpc2Vhc2Vtb2RlbHMuZXhwZXJpbWVudGFsLkV4cGVyaW1lbnRhbEFsbFRlc3RzIi8+CisgICAgPC9hbnQ+CisgIDwvdGFyZ2V0PgorCisgIDwhLS0gVGhpcyB0YXJnZXQgaG9sZHMgY29kZSB0byBjbGVhbnVwIHRoZSB0ZXN0aW5nIGVudmlyb25tZW50IGFmdGVyIC0tPgorICA8IS0tIGFmdGVyIGFsbCBvZiB0aGUgdGVzdHMgaGF2ZSBiZWVuIHJ1bi4gWW91IGNhbiB1c2UgdGhpcyB0YXJnZXQgdG8gLS0+CisgIDwhLS0gZGVsZXRlIHRlbXBvcmFyeSBmaWxlcyB0aGF0IGhhdmUgYmVlbiBjcmVhdGVkLiAtLT4KKyAgPHRhcmdldCBuYW1lPSJjbGVhbnVwIj4KKyAgPC90YXJnZXQ+CisKKyAgPCEtLSBUaGlzIHRhcmdldCBydW5zIHRoZSB0ZXN0IHN1aXRlLiBBbnkgYWN0aW9ucyB0aGF0IG5lZWQgdG8gaGFwcGVuIC0tPgorICA8IS0tIGFmdGVyIGFsbCB0aGUgdGVzdHMgaGF2ZSBiZWVuIHJ1biBzaG91bGQgZ28gaGVyZS4gLS0+CisgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LHN1aXRlLGNsZWFudXAiPgorICAgIDxhbnQgdGFyZ2V0PSJjb2xsZWN0IiBhbnRmaWxlPSIke2xpYnJhcnktZmlsZX0iIGRpcj0iJHtlY2xpcHNlLWhvbWV9Ij4KKyAgICAgIDxwcm9wZXJ0eSBuYW1lPSJpbmNsdWRlcyIgdmFsdWU9Im9yZyoueG1sIi8+CisgICAgICA8cHJvcGVydHkgbmFtZT0ib3V0cHV0LWZpbGUiIHZhbHVlPSIke3BsdWdpbi1uYW1lfS54bWwiLz4KKyAgICA8L2FudD4KKyAgPC90YXJnZXQ+CisKKyAgPCEtLSBUaGlzIHRhcmdldCBydW5zIHRoZSBwZXJmb3JtYW5jZSB0ZXN0IHN1aXRlcy4gLS0+CisgIDx0YXJnZXQgbmFtZT0icGVyZm9ybWFuY2UiPgorICA8L3RhcmdldD4KKzwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGlzZWFzZW1vZGVscy5leHRlcm5hbGRhdGFzb3VyY2UvLmNsYXNzcGF0aCBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGlzZWFzZW1vZGVscy5leHRlcm5hbGRhdGFzb3VyY2UvLmNsYXNzcGF0aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMDRlODYxCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kaXNlYXNlbW9kZWxzLmV4dGVybmFsZGF0YXNvdXJjZS8uY2xhc3NwYXRoCkBAIC0wLDAgKzEsNyBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxjbGFzc3BhdGg+CisJPGNsYXNzcGF0aGVudHJ5IGtpbmQ9InNyYyIgcGF0aD0ic3JjIi8+CisJPGNsYXNzcGF0aGVudHJ5IGtpbmQ9ImNvbiIgcGF0aD0ib3JnLmVjbGlwc2UuamR0LmxhdW5jaGluZy5KUkVfQ09OVEFJTkVSL29yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC5kZWJ1Zy51aS5sYXVuY2hlci5TdGFuZGFyZFZNVHlwZS9KMlNFLTEuNSIvPgorCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJjb24iIHBhdGg9Im9yZy5lY2xpcHNlLnBkZS5jb3JlLnJlcXVpcmVkUGx1Z2lucyIvPgorCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJvdXRwdXQiIHBhdGg9ImJpbiIvPgorPC9jbGFzc3BhdGg+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRpc2Vhc2Vtb2RlbHMuZXh0ZXJuYWxkYXRhc291cmNlLy5wcm9qZWN0IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kaXNlYXNlbW9kZWxzLmV4dGVybmFsZGF0YXNvdXJjZS8ucHJvamVjdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMzBiNzA4Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kaXNlYXNlbW9kZWxzLmV4dGVybmFsZGF0YXNvdXJjZS8ucHJvamVjdApAQCAtMCwwICsxLDI4IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPHByb2plY3REZXNjcmlwdGlvbj4KKwk8bmFtZT5vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRpc2Vhc2Vtb2RlbHMuZXh0ZXJuYWxkYXRhc291cmNlPC9uYW1lPgorCTxjb21tZW50PjwvY29tbWVudD4KKwk8cHJvamVjdHM+CisJPC9wcm9qZWN0cz4KKwk8YnVpbGRTcGVjPgorCQk8YnVpbGRDb21tYW5kPgorCQkJPG5hbWU+b3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YWJ1aWxkZXI8L25hbWU+CisJCQk8YXJndW1lbnRzPgorCQkJPC9hcmd1bWVudHM+CisJCTwvYnVpbGRDb21tYW5kPgorCQk8YnVpbGRDb21tYW5kPgorCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLk1hbmlmZXN0QnVpbGRlcjwvbmFtZT4KKwkJCTxhcmd1bWVudHM+CisJCQk8L2FyZ3VtZW50cz4KKwkJPC9idWlsZENvbW1hbmQ+CisJCTxidWlsZENvbW1hbmQ+CisJCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuU2NoZW1hQnVpbGRlcjwvbmFtZT4KKwkJCTxhcmd1bWVudHM+CisJCQk8L2FyZ3VtZW50cz4KKwkJPC9idWlsZENvbW1hbmQ+CisJPC9idWlsZFNwZWM+CisJPG5hdHVyZXM+CisJCTxuYXR1cmU+b3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YW5hdHVyZTwvbmF0dXJlPgorCQk8bmF0dXJlPm9yZy5lY2xpcHNlLnBkZS5QbHVnaW5OYXR1cmU8L25hdHVyZT4KKwk8L25hdHVyZXM+Cis8L3Byb2plY3REZXNjcmlwdGlvbj4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGlzZWFzZW1vZGVscy5leHRlcm5hbGRhdGFzb3VyY2UvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kaXNlYXNlbW9kZWxzLmV4dGVybmFsZGF0YXNvdXJjZS8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjM5NzE1YQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGlzZWFzZW1vZGVscy5leHRlcm5hbGRhdGFzb3VyY2UvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzCkBAIC0wLDAgKzEsNzggQEAKKyNUdWUgU2VwIDIzIDA5OjM2OjI3IEVEVCAyMDA4CitlY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29kZWdlbi5pbmxpbmVKc3JCeXRlY29kZT1lbmFibGVkCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb2RlZ2VuLnRhcmdldFBsYXRmb3JtPTEuNQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29kZWdlbi51bnVzZWRMb2NhbD1wcmVzZXJ2ZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29tcGxpYW5jZT0xLjUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmRlYnVnLmxpbmVOdW1iZXI9Z2VuZXJhdGUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmRlYnVnLmxvY2FsVmFyaWFibGU9Z2VuZXJhdGUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmRlYnVnLnNvdXJjZUZpbGU9Z2VuZXJhdGUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmRvYy5jb21tZW50LnN1cHBvcnQ9ZGlzYWJsZWQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uYW5ub3RhdGlvblN1cGVySW50ZXJmYWNlPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uYXNzZXJ0SWRlbnRpZmllcj1lcnJvcgorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5hdXRvYm94aW5nPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZGVwcmVjYXRpb249d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5kZXByZWNhdGlvbkluRGVwcmVjYXRlZENvZGU9ZGlzYWJsZWQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZGVwcmVjYXRpb25XaGVuT3ZlcnJpZGluZ0RlcHJlY2F0ZWRNZXRob2Q9ZGlzYWJsZWQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZGlzY291cmFnZWRSZWZlcmVuY2U9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5lbXB0eVN0YXRlbWVudD13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmVudW1JZGVudGlmaWVyPWVycm9yCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZhbGx0aHJvdWdoQ2FzZT1pZ25vcmUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZmF0YWxPcHRpb25hbEVycm9yPWVuYWJsZWQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZmllbGRIaWRpbmc9aWdub3JlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZpbmFsUGFyYW1ldGVyQm91bmQ9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5maW5hbGx5QmxvY2tOb3RDb21wbGV0aW5nTm9ybWFsbHk9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5mb3JiaWRkZW5SZWZlcmVuY2U9ZXJyb3IKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaGlkZGVuQ2F0Y2hCbG9jaz13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmluY29tcGF0aWJsZU5vbkluaGVyaXRlZEludGVyZmFjZU1ldGhvZD13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmluY29tcGxldGVFbnVtU3dpdGNoPWlnbm9yZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbmRpcmVjdFN0YXRpY0FjY2Vzcz13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmludmFsaWRKYXZhZG9jPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW52YWxpZEphdmFkb2NUYWdzPWVuYWJsZWQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW52YWxpZEphdmFkb2NUYWdzRGVwcmVjYXRlZFJlZj1lbmFibGVkCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmludmFsaWRKYXZhZG9jVGFnc05vdFZpc2libGVSZWY9ZW5hYmxlZAorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbnZhbGlkSmF2YWRvY1RhZ3NWaXNpYmlsaXR5PXB1YmxpYworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5sb2NhbFZhcmlhYmxlSGlkaW5nPWlnbm9yZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5tZXRob2RXaXRoQ29uc3RydWN0b3JOYW1lPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0RlcHJlY2F0ZWRBbm5vdGF0aW9uPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0phdmFkb2NDb21tZW50cz13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdKYXZhZG9jQ29tbWVudHNPdmVycmlkaW5nPWVuYWJsZWQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0phdmFkb2NDb21tZW50c1Zpc2liaWxpdHk9cHVibGljCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdKYXZhZG9jVGFncz13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdKYXZhZG9jVGFnc092ZXJyaWRpbmc9ZW5hYmxlZAorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nSmF2YWRvY1RhZ3NWaXNpYmlsaXR5PXB1YmxpYworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nT3ZlcnJpZGVBbm5vdGF0aW9uPWlnbm9yZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nU2VyaWFsVmVyc2lvbj13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm5vRWZmZWN0QXNzaWdubWVudD13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm5vSW1wbGljaXRTdHJpbmdDb252ZXJzaW9uPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubm9uRXh0ZXJuYWxpemVkU3RyaW5nTGl0ZXJhbD1pZ25vcmUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubnVsbFJlZmVyZW5jZT1pZ25vcmUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ub3ZlcnJpZGluZ1BhY2thZ2VEZWZhdWx0TWV0aG9kPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ucGFyYW1ldGVyQXNzaWdubWVudD1pZ25vcmUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ucG9zc2libGVBY2NpZGVudGFsQm9vbGVhbkFzc2lnbm1lbnQ9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5wb3RlbnRpYWxOdWxsUmVmZXJlbmNlPWlnbm9yZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5yYXdUeXBlUmVmZXJlbmNlPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ucmVkdW5kYW50TnVsbENoZWNrPWlnbm9yZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5zcGVjaWFsUGFyYW1ldGVySGlkaW5nRmllbGQ9ZGlzYWJsZWQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uc3RhdGljQWNjZXNzUmVjZWl2ZXI9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5zdXBwcmVzc1dhcm5pbmdzPWVuYWJsZWQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uc3ludGhldGljQWNjZXNzRW11bGF0aW9uPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udHlwZVBhcmFtZXRlckhpZGluZz13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVuY2hlY2tlZFR5cGVPcGVyYXRpb249d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bmRvY3VtZW50ZWRFbXB0eUJsb2NrPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5oYW5kbGVkV2FybmluZ1Rva2VuPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5uZWNlc3NhcnlFbHNlPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5uZWNlc3NhcnlUeXBlQ2hlY2s9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnF1YWxpZmllZEZpZWxkQWNjZXNzPWlnbm9yZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWREZWNsYXJlZFRocm93bkV4Y2VwdGlvbj13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZERlY2xhcmVkVGhyb3duRXhjZXB0aW9uV2hlbk92ZXJyaWRpbmc9ZW5hYmxlZAorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRJbXBvcnQ9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRMYWJlbD13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZExvY2FsPWlnbm9yZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRQYXJhbWV0ZXI9aWdub3JlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZFBhcmFtZXRlckluY2x1ZGVEb2NDb21tZW50UmVmZXJlbmNlPWVuYWJsZWQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkUGFyYW1ldGVyV2hlbkltcGxlbWVudGluZ0Fic3RyYWN0PWVuYWJsZWQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkUGFyYW1ldGVyV2hlbk92ZXJyaWRpbmdDb25jcmV0ZT1lbmFibGVkCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZFByaXZhdGVNZW1iZXI9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS52YXJhcmdzQXJndW1lbnROZWVkQ2FzdD13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5zb3VyY2U9MS41CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRpc2Vhc2Vtb2RlbHMuZXh0ZXJuYWxkYXRhc291cmNlL01FVEEtSU5GL01BTklGRVNULk1GIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kaXNlYXNlbW9kZWxzLmV4dGVybmFsZGF0YXNvdXJjZS9NRVRBLUlORi9NQU5JRkVTVC5NRgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42OTE0NWYzCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kaXNlYXNlbW9kZWxzLmV4dGVybmFsZGF0YXNvdXJjZS9NRVRBLUlORi9NQU5JRkVTVC5NRgpAQCAtMCwwICsxLDIwIEBACitNYW5pZmVzdC1WZXJzaW9uOiAxLjAKK0J1bmRsZS1NYW5pZmVzdFZlcnNpb246IDIKK0J1bmRsZS1OYW1lOiAlcGx1Z2luTmFtZQorQnVuZGxlLVN5bWJvbGljTmFtZTogb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kaXNlYXNlbW9kZWxzLmV4dGVybmFsZGF0YXNvdXJjZTtzaW5nbGV0b246PXRydWUKK0J1bmRsZS1WZXJzaW9uOiAxLjIuMQorQnVuZGxlLUNsYXNzUGF0aDogLgorQnVuZGxlLVZlbmRvcjogJXByb3ZpZGVyTmFtZQorQnVuZGxlLUxvY2FsaXphdGlvbjogcGx1Z2luCitCdW5kbGUtUmVxdWlyZWRFeGVjdXRpb25FbnZpcm9ubWVudDogSjJTRS0xLjUKK0V4cG9ydC1QYWNrYWdlOiBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXh0ZXJuYWxkYXRhc291cmNlLnRlc3RzCitSZXF1aXJlLUJ1bmRsZTogb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLAorIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVsczt2aXNpYmlsaXR5Oj1yZWV4cG9ydCwKKyBvcmcuZWNsaXBzZS5zdGVtLmNvcmU7dmlzaWJpbGl0eTo9cmVleHBvcnQsCisgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9uczt2aXNpYmlsaXR5Oj1yZWV4cG9ydCwKKyBvcmcuZWNsaXBzZS5lbWYuZWNvcmUueG1pO3Zpc2liaWxpdHk6PXJlZXhwb3J0LAorIG9yZy5qdW5pdDt2aXNpYmlsaXR5Oj1yZWV4cG9ydCwKKyBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXh0ZXJuYWxkYXRhc291cmNlLAorIG9yZy5lY2xpcHNlLnN0ZW0udXRpbC5sb2dnZXJzLAorIG9yZy5lY2xpcHNlLnN0ZW0uam9icworQnVuZGxlLUFjdGl2YXRpb25Qb2xpY3k6IGxhenkKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGlzZWFzZW1vZGVscy5leHRlcm5hbGRhdGFzb3VyY2UvYnVpbGQucHJvcGVydGllcyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGlzZWFzZW1vZGVscy5leHRlcm5hbGRhdGFzb3VyY2UvYnVpbGQucHJvcGVydGllcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NTgzNzU4Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kaXNlYXNlbW9kZWxzLmV4dGVybmFsZGF0YXNvdXJjZS9idWlsZC5wcm9wZXJ0aWVzCkBAIC0wLDAgKzEsMTIgQEAKKyMgPGNvcHlyaWdodD4KKyMgPC9jb3B5cmlnaHQ+CisjCisjICRJZDogYnVpbGQucHJvcGVydGllcyx2IDEuMSAyMDA4LzAzLzE4IDA0OjUwOjI4IGprYXVmbWFuIEV4cCAkCisKK2Jpbi5pbmNsdWRlcyA9IC4sXAorICAgICAgICAgICAgICAgTUVUQS1JTkYvLFwKKyAgICAgICAgICAgICAgIHBsdWdpbi54bWwsXAorICAgICAgICAgICAgICAgcGx1Z2luLnByb3BlcnRpZXMKK2phcnMuY29tcGlsZS5vcmRlciA9IC4KK3NvdXJjZS4uID0gc3JjLworb3V0cHV0Li4gPSBiaW4vCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRpc2Vhc2Vtb2RlbHMuZXh0ZXJuYWxkYXRhc291cmNlL3BsdWdpbi5wcm9wZXJ0aWVzIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kaXNlYXNlbW9kZWxzLmV4dGVybmFsZGF0YXNvdXJjZS9wbHVnaW4ucHJvcGVydGllcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NzBhMzhiCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kaXNlYXNlbW9kZWxzLmV4dGVybmFsZGF0YXNvdXJjZS9wbHVnaW4ucHJvcGVydGllcwpAQCAtMCwwICsxLDI1IEBACisjLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyMgKiBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisjICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworIyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorIyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisjICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyMgKgorIyAqIENvbnRyaWJ1dG9yczoKKyMgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisjICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyMgVG8gY29kZSBkZXZlbG9wZXI6CisjICAgRG8gTk9UIGNoYW5nZSB0aGUgcHJvcGVydGllcyBiZXR3ZWVuIHRoaXMgbGluZSBhbmQgdGhlCisjICAgIiUlJSBFTkQgT0YgVFJBTlNMQVRFRCBQUk9QRVJUSUVTICUlJSIgbGluZS4KKyMgICBNYWtlIGEgbmV3IHByb3BlcnR5IG5hbWUsIGFwcGVuZCB0byB0aGUgZW5kIG9mIHRoZSBmaWxlIGFuZCBjaGFuZ2UKKyMgICB0aGUgY29kZSB0byB1c2UgdGhlIG5ldyBwcm9wZXJ0eS4KKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorIyAlJSUgRU5EIE9GIFRSQU5TTEFURUQgUFJPUEVSVElFUyAlJSUKKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworcGx1Z2luTmFtZSA9IFNURU0gRXh0ZXJuYWwgRGF0YSBTb3VyY2UgRGlzZWFzZSBNb2RlbCBUZXN0IFN1aXRlCitwcm92aWRlck5hbWUgPSBFY2xpcHNlLm9yZwpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kaXNlYXNlbW9kZWxzLmV4dGVybmFsZGF0YXNvdXJjZS9wbHVnaW4ueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kaXNlYXNlbW9kZWxzLmV4dGVybmFsZGF0YXNvdXJjZS9wbHVnaW4ueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFkZDY0MzUKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRpc2Vhc2Vtb2RlbHMuZXh0ZXJuYWxkYXRhc291cmNlL3BsdWdpbi54bWwKQEAgLTAsMCArMSwxMiBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzw/ZWNsaXBzZSB2ZXJzaW9uPSIzLjAiPz4KKworPCEtLQorIDxjb3B5cmlnaHQ+CisgPC9jb3B5cmlnaHQ+CisKKyAkSWQ6IHBsdWdpbi54bWwsdiAxLjEgMjAwOC8wMy8xOCAwNDo1MDoyOCBqa2F1Zm1hbiBFeHAgJAorLS0+CisKKzxwbHVnaW4+Cis8L3BsdWdpbj4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGlzZWFzZW1vZGVscy5leHRlcm5hbGRhdGFzb3VyY2Uvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9leHRlcm5hbGRhdGFzb3VyY2UvdGVzdHMvRXh0ZXJuYWxEYXRhU291cmNlQWxsVGVzdHMuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGlzZWFzZW1vZGVscy5leHRlcm5hbGRhdGFzb3VyY2Uvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9leHRlcm5hbGRhdGFzb3VyY2UvdGVzdHMvRXh0ZXJuYWxEYXRhU291cmNlQWxsVGVzdHMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MjY4YWUxCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kaXNlYXNlbW9kZWxzLmV4dGVybmFsZGF0YXNvdXJjZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL2V4dGVybmFsZGF0YXNvdXJjZS90ZXN0cy9FeHRlcm5hbERhdGFTb3VyY2VBbGxUZXN0cy5qYXZhCkBAIC0wLDAgKzEsNTYgQEAKKy8vIEV4dGVybmFsRGF0YVNvdXJjZUFsbFRlc3RzLmphdmEKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4dGVybmFsZGF0YXNvdXJjZS50ZXN0czsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdDsKK2ltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdFN1aXRlOworaW1wb3J0IGp1bml0LnRleHR1aS5UZXN0UnVubmVyOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiBBIHRlc3Qgc3VpdGUgZm9yIHRoZSAnPGVtPjxiPkV4dGVybmFsRGF0YVNvdXJjZTwvYj48L2VtPicgbW9kZWwuCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIEV4dGVybmFsRGF0YVNvdXJjZUFsbFRlc3RzIGV4dGVuZHMgVGVzdFN1aXRlIHsKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKKwkJVGVzdFJ1bm5lci5ydW4oc3VpdGUoKSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHN0YXRpYyBUZXN0IHN1aXRlKCkgeworCQlUZXN0U3VpdGUgc3VpdGUgPSBuZXcgRXh0ZXJuYWxEYXRhU291cmNlQWxsVGVzdHMoIkV4dGVybmFsRGF0YVNvdXJjZSBUZXN0cyIpOyAvLyROT04tTkxTLTEkCisJCXN1aXRlLmFkZFRlc3QoRXh0ZXJuYWxEYXRhU291cmNlVGVzdHMuc3VpdGUoKSk7CisJCXJldHVybiBzdWl0ZTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRXh0ZXJuYWxEYXRhU291cmNlQWxsVGVzdHMoU3RyaW5nIG5hbWUpIHsKKwkJc3VwZXIobmFtZSk7CisJfQorCit9IC8vRXh0ZXJuYWxEYXRhU291cmNlQWxsVGVzdHMKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGlzZWFzZW1vZGVscy5leHRlcm5hbGRhdGFzb3VyY2Uvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9leHRlcm5hbGRhdGFzb3VyY2UvdGVzdHMvRXh0ZXJuYWxEYXRhU291cmNlRGlzZWFzZU1vZGVsVGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kaXNlYXNlbW9kZWxzLmV4dGVybmFsZGF0YXNvdXJjZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL2V4dGVybmFsZGF0YXNvdXJjZS90ZXN0cy9FeHRlcm5hbERhdGFTb3VyY2VEaXNlYXNlTW9kZWxUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2YxYzgxNgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGlzZWFzZW1vZGVscy5leHRlcm5hbGRhdGFzb3VyY2Uvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9leHRlcm5hbGRhdGFzb3VyY2UvdGVzdHMvRXh0ZXJuYWxEYXRhU291cmNlRGlzZWFzZU1vZGVsVGVzdC5qYXZhCkBAIC0wLDAgKzEsMTY5IEBACisvLyBFeHRlcm5hbERhdGFTb3VyY2VEaXNlYXNlTW9kZWxUZXN0LmphdmEKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4dGVybmFsZGF0YXNvdXJjZS50ZXN0czsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqYXZhLmlvLkZpbGU7CisKK2ltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7CitpbXBvcnQganVuaXQudGV4dHVpLlRlc3RSdW5uZXI7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuQWN0aXZhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leHRlcm5hbGRhdGFzb3VyY2UuRXh0ZXJuYWxEYXRhU291cmNlRGlzZWFzZU1vZGVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leHRlcm5hbGRhdGFzb3VyY2UuRXh0ZXJuYWxEYXRhU291cmNlRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXh0ZXJuYWxkYXRhc291cmNlLmltcGwuRXh0ZXJuYWxEYXRhU291cmNlRGlzZWFzZU1vZGVsSW1wbDsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogQSB0ZXN0IGNhc2UgZm9yIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5EaXNlYXNlIE1vZGVsPC9iPjwvZW0+Jy4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgRXh0ZXJuYWxEYXRhU291cmNlRGlzZWFzZU1vZGVsVGVzdCBleHRlbmRzIFRlc3RDYXNlIHsKKwkKKwkKKworCQorCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBzZXAgPSBGaWxlLnNlcGFyYXRvcjsKKwkKKwkvKioKKwkgKiBUaGlzIGlzIHRoZSBEZWZhdWx0IGZvbGRlciBmb3IgSW1wb3J0IGZpbGVzLgorCSAqIFRoZSBVc2VyIGNhbiBjaGFuZ2UgdGhpcyBidXQgYnkgZGVmYXVsdCwgYW5kIGZvciB0ZXN0aW5nLAorCSAqIGRhdGEgd2lsbCBiZSBpbiBzdWItZm9sZGVycyBvZiB0aGUgZGlzZWFzZSBtb2RlbCBwbHVnLWluIHJ1bnRpbWUgcHJlZmVyZW5jZXMKKwkgKi8KKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgVEVTVF9TVUJESVIgPSAidGVzdGluZyI7CisJCisJLyoqCisJICogVGhpcyBpcyBhIHRlc3Qgc2NlbmFyaW8gbmFtZS4KKwkgKi8KKwkvLyBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgVEVTVF9TQ0VOQVJJTyA9ICJ0ZXN0c2NlbmFyaW8iOworCQorCS8qKgorCSAqIFRoaXMgaXMgYSB0ZXN0IGxvY2F0aW9uIG5hbWUuCisJKi8KKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgVEVTVF9MT0NBVElPTiA9ICJ0ZXN0bG9jYXRpb24iOworCQorCS8qKgorCSAqIFRoZSBmaXh0dXJlIGZvciB0aGlzIERpc2Vhc2UgTW9kZWwgdGVzdCBjYXNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBFeHRlcm5hbERhdGFTb3VyY2VEaXNlYXNlTW9kZWwgZml4dHVyZSA9IG51bGw7CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CisJCVRlc3RSdW5uZXIucnVuKEV4dGVybmFsRGF0YVNvdXJjZURpc2Vhc2VNb2RlbFRlc3QuY2xhc3MpOworCX0KKwkKKwkvKioKKwkgKiBUZXN0IHRoZSBsb2dnaW5nCisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlwdWJsaWMgdm9pZCB0ZXN0TG9nZ2luZygpIHsKKwkJLy8gdGVzdCB0aGUgY29uc3RydWN0aW9uCisKKwkJRXh0ZXJuYWxEYXRhU291cmNlRGlzZWFzZU1vZGVsSW1wbCBleHRlcm5hbERhdGFTb3VyY2VEaXNlYXNlTW9kZWwgPSBuZXcgRXh0ZXJuYWxEYXRhU291cmNlRGlzZWFzZU1vZGVsSW1wbCgpOworCQkKKwkJLy8gdGVzdCB0aGUgbG9nZ2luZworCQlkb1Rlc3QoKTsKKwl9CisJCisJLyoqCisJICogVGVzdCB0aGUgbG9nZ2luZyAobm90IGNvbXBsZXRlIHlldCkKKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCXB1YmxpYyB2b2lkIGRvVGVzdCgpIHsKKwkJCisJCWZpbmFsIFN0cmluZyBkaXIgPSBFeHRlcm5hbERhdGFTb3VyY2VEaXNlYXNlTW9kZWwuREVGQVVMVF9ESVIrVEVTVF9TVUJESVIrc2VwOworCQkKKwkJdHJ5IHsKKwkJCUZpbGUgZmlsZSA9IG5ldyBGaWxlKGRpcik7CisJCQlpZighZmlsZS5leGlzdHMoKSkgeworCQkJCSBib29sZWFuIHN1Y2Nlc3MgPSAobmV3IEZpbGUoZGlyKSkubWtkaXJzKCk7CisJCQl9CisJCQkKKwkJfSBjYXRjaChFeGNlcHRpb24gZSkgeworCQkJQWN0aXZhdG9yLmxvZ0Vycm9yKCJFcnJvciBjcmVhdGluZyBEaXJlY3RvcnkgWyIrZGlyKyJdIGZvciBKVU5JVCB0ZXN0aW5nIiwgZSk7CisJCX0KKwkKKwl9CisJCisKKwkvKioKKwkgKiBDb25zdHJ1Y3RzIGEgbmV3IERpc2Vhc2UgTW9kZWwgdGVzdCBjYXNlIHdpdGggdGhlIGdpdmVuIG5hbWUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEV4dGVybmFsRGF0YVNvdXJjZURpc2Vhc2VNb2RlbFRlc3QoU3RyaW5nIG5hbWUpIHsKKwkJc3VwZXIobmFtZSk7CisJfQorCQorCisJLyoqCisJICogQ29uc3RydWN0cyBhIG5ldyBEaXNlYXNlIE1vZGVsIHRlc3QgY2FzZSB3aXRoIHRoZSBnaXZlbiBuYW1lLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlwdWJsaWMgRXh0ZXJuYWxEYXRhU291cmNlRGlzZWFzZU1vZGVsVGVzdCgpIHsKKwkJc3VwZXIoInRlc3QiKTsKKwl9CisKKwkvKioKKwkgKiBTZXRzIHRoZSBmaXh0dXJlIGZvciB0aGlzIERpc2Vhc2UgTW9kZWwgdGVzdCBjYXNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIHNldEZpeHR1cmUoRXh0ZXJuYWxEYXRhU291cmNlRGlzZWFzZU1vZGVsIGZpeHR1cmUpIHsKKwkJdGhpcy5maXh0dXJlID0gZml4dHVyZTsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBmaXh0dXJlIGZvciB0aGlzIERpc2Vhc2UgTW9kZWwgdGVzdCBjYXNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBFeHRlcm5hbERhdGFTb3VyY2VEaXNlYXNlTW9kZWwgZ2V0Rml4dHVyZSgpIHsKKwkJcmV0dXJuIGZpeHR1cmU7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZSNzZXRVcCgpCisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIHNldFVwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCXNldEZpeHR1cmUoRXh0ZXJuYWxEYXRhU291cmNlRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlRXh0ZXJuYWxEYXRhU291cmNlRGlzZWFzZU1vZGVsKCkpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2UjdGVhckRvd24oKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgdm9pZCB0ZWFyRG93bigpIHRocm93cyBFeGNlcHRpb24geworCQlzZXRGaXh0dXJlKG51bGwpOworCX0KKworfSAvL0V4dGVybmFsRGF0YVNvdXJjZURpc2Vhc2VNb2RlbFRlc3QKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGlzZWFzZW1vZGVscy5leHRlcm5hbGRhdGFzb3VyY2Uvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9leHRlcm5hbGRhdGFzb3VyY2UvdGVzdHMvRXh0ZXJuYWxEYXRhU291cmNlRXhhbXBsZS5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kaXNlYXNlbW9kZWxzLmV4dGVybmFsZGF0YXNvdXJjZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL2V4dGVybmFsZGF0YXNvdXJjZS90ZXN0cy9FeHRlcm5hbERhdGFTb3VyY2VFeGFtcGxlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2U0YzY3YgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGlzZWFzZW1vZGVscy5leHRlcm5hbGRhdGFzb3VyY2Uvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9leHRlcm5hbGRhdGFzb3VyY2UvdGVzdHMvRXh0ZXJuYWxEYXRhU291cmNlRXhhbXBsZS5qYXZhCkBAIC0wLDAgKzEsMTI1IEBACisvLyBFeHRlcm5hbERhdGFTb3VyY2VFeGFtcGxlLmphdmEKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4dGVybmFsZGF0YXNvdXJjZS50ZXN0czsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqYXZhLmlvLkZpbGU7CitpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5EaWFnbm9zdGljOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5VUkk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3Q7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnJlc291cmNlLlJlc291cmNlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5yZXNvdXJjZS5SZXNvdXJjZVNldDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUucmVzb3VyY2UuaW1wbC5SZXNvdXJjZVNldEltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnV0aWwuRGlhZ25vc3RpY2lhbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUueG1pLmltcGwuWE1JUmVzb3VyY2VGYWN0b3J5SW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXh0ZXJuYWxkYXRhc291cmNlLkV4dGVybmFsRGF0YVNvdXJjZURpc2Vhc2VNb2RlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXh0ZXJuYWxkYXRhc291cmNlLkV4dGVybmFsRGF0YVNvdXJjZUZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4dGVybmFsZGF0YXNvdXJjZS5FeHRlcm5hbERhdGFTb3VyY2VQYWNrYWdlOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiBBIHNhbXBsZSB1dGlsaXR5IGZvciB0aGUgJzxlbT48Yj5leHRlcm5hbGRhdGFzb3VyY2U8L2I+PC9lbT4nIHBhY2thZ2UuCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIEV4dGVybmFsRGF0YVNvdXJjZUV4YW1wbGUgeworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogTG9hZCBhbGwgdGhlIGFyZ3VtZW50IGZpbGUgcGF0aHMgb3IgVVJJcyBhcyBpbnN0YW5jZXMgb2YgdGhlIG1vZGVsLgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSBhcmdzIHRoZSBmaWxlIHBhdGhzIG9yIFVSSXMuCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKKwkJLy8gQ3JlYXRlIGEgcmVzb3VyY2Ugc2V0IHRvIGhvbGQgdGhlIHJlc291cmNlcy4KKwkJLy8KKwkJUmVzb3VyY2VTZXQgcmVzb3VyY2VTZXQgPSBuZXcgUmVzb3VyY2VTZXRJbXBsKCk7CisJCQorCQkvLyBSZWdpc3RlciB0aGUgYXBwcm9wcmlhdGUgcmVzb3VyY2UgZmFjdG9yeSB0byBoYW5kbGUgYWxsIGZpbGUgZXh0ZW5zaW9ucy4KKwkJLy8KKwkJcmVzb3VyY2VTZXQuZ2V0UmVzb3VyY2VGYWN0b3J5UmVnaXN0cnkoKS5nZXRFeHRlbnNpb25Ub0ZhY3RvcnlNYXAoKS5wdXQKKwkJCShSZXNvdXJjZS5GYWN0b3J5LlJlZ2lzdHJ5LkRFRkFVTFRfRVhURU5TSU9OLCAKKwkJCSBuZXcgWE1JUmVzb3VyY2VGYWN0b3J5SW1wbCgpKTsKKworCQkvLyBSZWdpc3RlciB0aGUgcGFja2FnZSB0byBlbnN1cmUgaXQgaXMgYXZhaWxhYmxlIGR1cmluZyBsb2FkaW5nLgorCQkvLworCQlyZXNvdXJjZVNldC5nZXRQYWNrYWdlUmVnaXN0cnkoKS5wdXQKKwkJCShFeHRlcm5hbERhdGFTb3VyY2VQYWNrYWdlLmVOU19VUkksIAorCQkJIEV4dGVybmFsRGF0YVNvdXJjZVBhY2thZ2UuZUlOU1RBTkNFKTsKKyAgICAgICAgCisJCS8vIElmIHRoZXJlIGFyZSBubyBhcmd1bWVudHMsIGVtaXQgYW4gYXBwcm9wcmlhdGUgdXNhZ2UgbWVzc2FnZS4KKwkJLy8KKwkJaWYgKGFyZ3MubGVuZ3RoID09IDApIHsKKwkJCVN5c3RlbS5vdXQucHJpbnRsbigiRW50ZXIgYSBsaXN0IG9mIGZpbGUgcGF0aHMgb3IgVVJJcyB0aGF0IGhhdmUgY29udGVudCBsaWtlIHRoaXM6Iik7IC8vJE5PTi1OTFMtMSQKKwkJCXRyeSB7CisJCQkJUmVzb3VyY2UgcmVzb3VyY2UgPSByZXNvdXJjZVNldC5jcmVhdGVSZXNvdXJjZShVUkkuY3JlYXRlVVJJKCJodHRwOi8vL015LmV4dGVybmFsZGF0YXNvdXJjZSIpKTsgLy8kTk9OLU5MUy0xJAorCQkJCUV4dGVybmFsRGF0YVNvdXJjZURpc2Vhc2VNb2RlbCByb290ID0gRXh0ZXJuYWxEYXRhU291cmNlRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlRXh0ZXJuYWxEYXRhU291cmNlRGlzZWFzZU1vZGVsKCk7CisJCQkJcmVzb3VyY2UuZ2V0Q29udGVudHMoKS5hZGQocm9vdCk7CisJCQkJcmVzb3VyY2Uuc2F2ZShTeXN0ZW0ub3V0LCBudWxsKTsKKwkJCX0KKwkJCWNhdGNoIChJT0V4Y2VwdGlvbiBleGNlcHRpb24pIHsKKwkJCQlleGNlcHRpb24ucHJpbnRTdGFja1RyYWNlKCk7CisJCQl9CisJCX0KKwkJZWxzZSB7CisJCQkvLyBJdGVyYXRlIG92ZXIgYWxsIHRoZSBhcmd1bWVudHMuCisJCQkvLworCQkJZm9yIChpbnQgaSA9IDA7IGkgPCBhcmdzLmxlbmd0aDsgKytpKSB7CisJCQkJLy8gQ29uc3RydWN0IHRoZSBVUkkgZm9yIHRoZSBpbnN0YW5jZSBmaWxlLgorCQkJCS8vIFRoZSBhcmd1bWVudCBpcyB0cmVhdGVkIGFzIGEgZmlsZSBwYXRoIG9ubHkgaWYgaXQgZGVub3RlcyBhbiBleGlzdGluZyBmaWxlLgorCQkJCS8vIE90aGVyd2lzZSwgaXQncyBkaXJlY3RseSB0cmVhdGVkIGFzIGEgVVJMLgorCQkJCS8vCisJCQkJRmlsZSBmaWxlID0gbmV3IEZpbGUoYXJnc1tpXSk7CisJCQkJVVJJIHVyaSA9IGZpbGUuaXNGaWxlKCkgPyBVUkkuY3JlYXRlRmlsZVVSSShmaWxlLmdldEFic29sdXRlUGF0aCgpKTogVVJJLmNyZWF0ZVVSSShhcmdzW2ldKTsKKworCQkJCXRyeSB7CisJCQkJCS8vIERlbWFuZCBsb2FkIHJlc291cmNlIGZvciB0aGlzIGZpbGUuCisJCQkJCS8vCisJCQkJCVJlc291cmNlIHJlc291cmNlID0gcmVzb3VyY2VTZXQuZ2V0UmVzb3VyY2UodXJpLCB0cnVlKTsKKwkJCQkJU3lzdGVtLm91dC5wcmludGxuKCJMb2FkZWQgIiArIHVyaSk7IC8vJE5PTi1OTFMtMSQKKworCQkJCQkvLyBWYWxpZGF0ZSB0aGUgY29udGVudHMgb2YgdGhlIGxvYWRlZCByZXNvdXJjZS4KKwkJCQkJLy8KKwkJCQkJZm9yIChFT2JqZWN0IGVPYmplY3QgOiByZXNvdXJjZS5nZXRDb250ZW50cygpKSB7CisJCQkJCQlEaWFnbm9zdGljIGRpYWdub3N0aWMgPSBEaWFnbm9zdGljaWFuLklOU1RBTkNFLnZhbGlkYXRlKGVPYmplY3QpOworCQkJCQkJaWYgKGRpYWdub3N0aWMuZ2V0U2V2ZXJpdHkoKSAhPSBEaWFnbm9zdGljLk9LKSB7CisJCQkJCQkJcHJpbnREaWFnbm9zdGljKGRpYWdub3N0aWMsICIiKTsgLy8kTk9OLU5MUy0xJAorCQkJCQkJfQorCQkJCQl9CisJCQkJfQorCQkJCWNhdGNoIChSdW50aW1lRXhjZXB0aW9uIGV4Y2VwdGlvbikgeworCQkJCQlTeXN0ZW0ub3V0LnByaW50bG4oIlByb2JsZW0gbG9hZGluZyAiICsgdXJpKTsgLy8kTk9OLU5MUy0xJAorCQkJCQlleGNlcHRpb24ucHJpbnRTdGFja1RyYWNlKCk7CisJCQkJfQorCQkJfQorCQl9CisJfQorCQorCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogUHJpbnRzIGRpYWdub3N0aWNzIHdpdGggaW5kZW50YXRpb24uCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIGRpYWdub3N0aWMgdGhlIGRpYWdub3N0aWMgdG8gcHJpbnQuCisJICogQHBhcmFtIGluZGVudCB0aGUgaW5kZW50YXRpb24gZm9yIHByaW50aW5nLgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgc3RhdGljIHZvaWQgcHJpbnREaWFnbm9zdGljKERpYWdub3N0aWMgZGlhZ25vc3RpYywgU3RyaW5nIGluZGVudCkgeworCQlTeXN0ZW0ub3V0LnByaW50KGluZGVudCk7CisJCVN5c3RlbS5vdXQucHJpbnRsbihkaWFnbm9zdGljLmdldE1lc3NhZ2UoKSk7CisJCWZvciAoRGlhZ25vc3RpYyBjaGlsZCA6IGRpYWdub3N0aWMuZ2V0Q2hpbGRyZW4oKSkgeworCQkJcHJpbnREaWFnbm9zdGljKGNoaWxkLCBpbmRlbnQgKyAiICAiKTsgLy8kTk9OLU5MUy0xJAorCQl9CisJfQorCit9IC8vRXh0ZXJuYWxEYXRhU291cmNlRXhhbXBsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kaXNlYXNlbW9kZWxzLmV4dGVybmFsZGF0YXNvdXJjZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL2V4dGVybmFsZGF0YXNvdXJjZS90ZXN0cy9FeHRlcm5hbERhdGFTb3VyY2VUZXN0cy5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kaXNlYXNlbW9kZWxzLmV4dGVybmFsZGF0YXNvdXJjZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL2V4dGVybmFsZGF0YXNvdXJjZS90ZXN0cy9FeHRlcm5hbERhdGFTb3VyY2VUZXN0cy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhkODE1ZDQKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRpc2Vhc2Vtb2RlbHMuZXh0ZXJuYWxkYXRhc291cmNlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvZXh0ZXJuYWxkYXRhc291cmNlL3Rlc3RzL0V4dGVybmFsRGF0YVNvdXJjZVRlc3RzLmphdmEKQEAgLTAsMCArMSw1NiBAQAorLy8gRXh0ZXJuYWxEYXRhU291cmNlVGVzdHMuamF2YQorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXh0ZXJuYWxkYXRhc291cmNlLnRlc3RzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0OworaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0U3VpdGU7CitpbXBvcnQganVuaXQudGV4dHVpLlRlc3RSdW5uZXI7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIEEgdGVzdCBzdWl0ZSBmb3IgdGhlICc8ZW0+PGI+ZXh0ZXJuYWxkYXRhc291cmNlPC9iPjwvZW0+JyBwYWNrYWdlLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBFeHRlcm5hbERhdGFTb3VyY2VUZXN0cyBleHRlbmRzIFRlc3RTdWl0ZSB7CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CisJCVRlc3RSdW5uZXIucnVuKHN1aXRlKCkpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBzdGF0aWMgVGVzdCBzdWl0ZSgpIHsKKwkJVGVzdFN1aXRlIHN1aXRlID0gbmV3IEV4dGVybmFsRGF0YVNvdXJjZVRlc3RzKCJleHRlcm5hbGRhdGFzb3VyY2UgVGVzdHMiKTsgLy8kTk9OLU5MUy0xJAorCQlzdWl0ZS5hZGRUZXN0U3VpdGUoRXh0ZXJuYWxEYXRhU291cmNlRGlzZWFzZU1vZGVsVGVzdC5jbGFzcyk7CisJCXJldHVybiBzdWl0ZTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRXh0ZXJuYWxEYXRhU291cmNlVGVzdHMoU3RyaW5nIG5hbWUpIHsKKwkJc3VwZXIobmFtZSk7CisJfQorCit9IC8vRXh0ZXJuYWxEYXRhU291cmNlVGVzdHMKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGlzZWFzZW1vZGVscy5leHRlcm5hbGRhdGFzb3VyY2UvdGVzdC54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRpc2Vhc2Vtb2RlbHMuZXh0ZXJuYWxkYXRhc291cmNlL3Rlc3QueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAzMzQwYjkKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRpc2Vhc2Vtb2RlbHMuZXh0ZXJuYWxkYXRhc291cmNlL3Rlc3QueG1sCkBAIC0wLDAgKzEsNTMgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+CisKKzxwcm9qZWN0IG5hbWU9InRlc3RzdWl0ZSIgZGVmYXVsdD0icnVuIiBiYXNlZGlyPSIuIj4KKyAgPCEtLSBUaGUgcHJvcGVydHkgJHtlY2xpcHNlLWhvbWV9IHNob3VsZCBiZSBwYXNzZWQgaW50byB0aGlzIHNjcmlwdCAtLT4KKyAgPCEtLSBTZXQgYSBtZWFuaW5nZnVsIGRlZmF1bHQgdmFsdWUgZm9yIHdoZW4gaXQgaXMgbm90LiAtLT4KKyAgPHByb3BlcnR5IG5hbWU9ImVjbGlwc2UtaG9tZSIgdmFsdWU9IiIvPgorCisKKyAgPCEtLSBzZXRzIHRoZSBwcm9wZXJ0aWVzIGVjbGlwc2UtaG9tZSwgYW5kIGxpYnJhcnktZmlsZSAtLT4KKyAgPHByb3BlcnR5IG5hbWU9InBsdWdpbi1uYW1lIiB2YWx1ZT0ib3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kaXNlYXNlbW9kZWxzLmV4dGVybmFsZGF0YXNvdXJjZSIvPgorICA8cHJvcGVydHkgbmFtZT0ibGlicmFyeS1maWxlIgorICAgICAgICAgICAgdmFsdWU9IiR7ZWNsaXBzZS1ob21lfS9wbHVnaW5zL29yZy5lY2xpcHNlLnRlc3RfMy4zLjAvbGlicmFyeS54bWwiLz4KKworICA8IS0tIFRoaXMgdGFyZ2V0IGhvbGRzIGFsbCBpbml0aWFsaXphdGlvbiBjb2RlIHRoYXQgbmVlZHMgdG8gYmUgZG9uZSBmb3IgLS0+CisgIDwhLS0gYWxsIHRlc3RzIHRoYXQgYXJlIHRvIGJlIHJ1bi4gSW5pdGlhbGl6YXRpb24gZm9yIGluZGl2aWR1YWwgdGVzdHMgLS0+CisgIDwhLS0gc2hvdWxkIGJlIGRvbmUgd2l0aGluIHRoZSBib2R5IG9mIHRoZSBzdWl0ZSB0YXJnZXQuIC0tPgorICA8dGFyZ2V0IG5hbWU9ImluaXQiPgorICAgIDx0c3RhbXAvPgorICAgIDxkZWxldGU+CisgICAgICA8ZmlsZXNldCBkaXI9IiR7ZWNsaXBzZS1ob21lfSIgaW5jbHVkZXM9Im9yZyoueG1sIi8+CisgICAgPC9kZWxldGU+CisgIDwvdGFyZ2V0PgorCisgIDwhLS0gVGhpcyB0YXJnZXQgZGVmaW5lcyB0aGUgdGVzdHMgdGhhdCBuZWVkIHRvIGJlIHJ1bi4gLS0+CisgIDx0YXJnZXQgbmFtZT0ic3VpdGUiPgorICAgIDxwcm9wZXJ0eSBuYW1lPSJkYXRhLWRpciIgdmFsdWU9IiR7ZWNsaXBzZS1ob21lfS93b3Jrc3BhY2UiLz4KKyAgICA8ZGVsZXRlIGRpcj0iJHtkYXRhLWRpcn0iIHF1aWV0PSJ0cnVlIi8+CisgICAgPGFudCB0YXJnZXQ9InVpLXRlc3QiIGFudGZpbGU9IiR7bGlicmFyeS1maWxlfSIgZGlyPSIke2VjbGlwc2UtaG9tZX0iPgorICAgICAgPHByb3BlcnR5IG5hbWU9ImRhdGEtZGlyIiB2YWx1ZT0iJHtkYXRhLWRpcn0iLz4KKyAgICAgIDxwcm9wZXJ0eSBuYW1lPSJwbHVnaW4tbmFtZSIgdmFsdWU9IiR7cGx1Z2luLW5hbWV9Ii8+CisgICAgICA8cHJvcGVydHkgbmFtZT0iY2xhc3NuYW1lIiB2YWx1ZT0ib3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4dGVybmFsZGF0YXNvdXJjZS50ZXN0cy5FeHRlcm5hbERhdGFTb3VyY2VBbGxUZXN0cyIvPgorICAgIDwvYW50PgorICA8L3RhcmdldD4KKworICA8IS0tIFRoaXMgdGFyZ2V0IGhvbGRzIGNvZGUgdG8gY2xlYW51cCB0aGUgdGVzdGluZyBlbnZpcm9ubWVudCBhZnRlciAtLT4KKyAgPCEtLSBhZnRlciBhbGwgb2YgdGhlIHRlc3RzIGhhdmUgYmVlbiBydW4uIFlvdSBjYW4gdXNlIHRoaXMgdGFyZ2V0IHRvIC0tPgorICA8IS0tIGRlbGV0ZSB0ZW1wb3JhcnkgZmlsZXMgdGhhdCBoYXZlIGJlZW4gY3JlYXRlZC4gLS0+CisgIDx0YXJnZXQgbmFtZT0iY2xlYW51cCI+CisgIDwvdGFyZ2V0PgorCisgIDwhLS0gVGhpcyB0YXJnZXQgcnVucyB0aGUgdGVzdCBzdWl0ZS4gQW55IGFjdGlvbnMgdGhhdCBuZWVkIHRvIGhhcHBlbiAtLT4KKyAgPCEtLSBhZnRlciBhbGwgdGhlIHRlc3RzIGhhdmUgYmVlbiBydW4gc2hvdWxkIGdvIGhlcmUuIC0tPgorICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdCxzdWl0ZSxjbGVhbnVwIj4KKyAgICA8YW50IHRhcmdldD0iY29sbGVjdCIgYW50ZmlsZT0iJHtsaWJyYXJ5LWZpbGV9IiBkaXI9IiR7ZWNsaXBzZS1ob21lfSI+CisgICAgICA8cHJvcGVydHkgbmFtZT0iaW5jbHVkZXMiIHZhbHVlPSJvcmcqLnhtbCIvPgorICAgICAgPHByb3BlcnR5IG5hbWU9Im91dHB1dC1maWxlIiB2YWx1ZT0iJHtwbHVnaW4tbmFtZX0ueG1sIi8+CisgICAgPC9hbnQ+CisgIDwvdGFyZ2V0PgorCisgIDwhLS0gVGhpcyB0YXJnZXQgcnVucyB0aGUgcGVyZm9ybWFuY2UgdGVzdCBzdWl0ZXMuIC0tPgorICA8dGFyZ2V0IG5hbWU9InBlcmZvcm1hbmNlIj4KKyAgPC90YXJnZXQ+Cis8L3Byb2plY3Q+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRpc2Vhc2Vtb2RlbHMuZm9yY2luZy8uY2xhc3NwYXRoIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kaXNlYXNlbW9kZWxzLmZvcmNpbmcvLmNsYXNzcGF0aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMDRlODYxCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kaXNlYXNlbW9kZWxzLmZvcmNpbmcvLmNsYXNzcGF0aApAQCAtMCwwICsxLDcgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8Y2xhc3NwYXRoPgorCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJzcmMiIHBhdGg9InNyYyIvPgorCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJjb24iIHBhdGg9Im9yZy5lY2xpcHNlLmpkdC5sYXVuY2hpbmcuSlJFX0NPTlRBSU5FUi9vcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwuZGVidWcudWkubGF1bmNoZXIuU3RhbmRhcmRWTVR5cGUvSjJTRS0xLjUiLz4KKwk8Y2xhc3NwYXRoZW50cnkga2luZD0iY29uIiBwYXRoPSJvcmcuZWNsaXBzZS5wZGUuY29yZS5yZXF1aXJlZFBsdWdpbnMiLz4KKwk8Y2xhc3NwYXRoZW50cnkga2luZD0ib3V0cHV0IiBwYXRoPSJiaW4iLz4KKzwvY2xhc3NwYXRoPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kaXNlYXNlbW9kZWxzLmZvcmNpbmcvLnByb2plY3QgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRpc2Vhc2Vtb2RlbHMuZm9yY2luZy8ucHJvamVjdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NzU0NmNlCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kaXNlYXNlbW9kZWxzLmZvcmNpbmcvLnByb2plY3QKQEAgLTAsMCArMSwyOCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxwcm9qZWN0RGVzY3JpcHRpb24+CisJPG5hbWU+b3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kaXNlYXNlbW9kZWxzLmZvcmNpbmc8L25hbWU+CisJPGNvbW1lbnQ+PC9jb21tZW50PgorCTxwcm9qZWN0cz4KKwk8L3Byb2plY3RzPgorCTxidWlsZFNwZWM+CisJCTxidWlsZENvbW1hbmQ+CisJCQk8bmFtZT5vcmcuZWNsaXBzZS5qZHQuY29yZS5qYXZhYnVpbGRlcjwvbmFtZT4KKwkJCTxhcmd1bWVudHM+CisJCQk8L2FyZ3VtZW50cz4KKwkJPC9idWlsZENvbW1hbmQ+CisJCTxidWlsZENvbW1hbmQ+CisJCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuTWFuaWZlc3RCdWlsZGVyPC9uYW1lPgorCQkJPGFyZ3VtZW50cz4KKwkJCTwvYXJndW1lbnRzPgorCQk8L2J1aWxkQ29tbWFuZD4KKwkJPGJ1aWxkQ29tbWFuZD4KKwkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5TY2hlbWFCdWlsZGVyPC9uYW1lPgorCQkJPGFyZ3VtZW50cz4KKwkJCTwvYXJndW1lbnRzPgorCQk8L2J1aWxkQ29tbWFuZD4KKwk8L2J1aWxkU3BlYz4KKwk8bmF0dXJlcz4KKwkJPG5hdHVyZT5vcmcuZWNsaXBzZS5qZHQuY29yZS5qYXZhbmF0dXJlPC9uYXR1cmU+CisJCTxuYXR1cmU+b3JnLmVjbGlwc2UucGRlLlBsdWdpbk5hdHVyZTwvbmF0dXJlPgorCTwvbmF0dXJlcz4KKzwvcHJvamVjdERlc2NyaXB0aW9uPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kaXNlYXNlbW9kZWxzLmZvcmNpbmcvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kaXNlYXNlbW9kZWxzLmZvcmNpbmcvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdhODZiZjkKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRpc2Vhc2Vtb2RlbHMuZm9yY2luZy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMKQEAgLTAsMCArMSwxNSBAQAorI1R1ZSBTZXAgMDEgMTY6NTg6NDggRURUIDIwMDkKK2VjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5kb2MuY29tbWVudC5zdXBwb3J0PWRpc2FibGVkCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmludmFsaWRKYXZhZG9jPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW52YWxpZEphdmFkb2NUYWdzPWVuYWJsZWQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW52YWxpZEphdmFkb2NUYWdzRGVwcmVjYXRlZFJlZj1lbmFibGVkCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmludmFsaWRKYXZhZG9jVGFnc05vdFZpc2libGVSZWY9ZW5hYmxlZAorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbnZhbGlkSmF2YWRvY1RhZ3NWaXNpYmlsaXR5PXB1YmxpYworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nSmF2YWRvY0NvbW1lbnRzPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0phdmFkb2NDb21tZW50c092ZXJyaWRpbmc9ZW5hYmxlZAorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nSmF2YWRvY0NvbW1lbnRzVmlzaWJpbGl0eT1wdWJsaWMKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0phdmFkb2NUYWdEZXNjcmlwdGlvbj1yZXR1cm5fdGFnCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdKYXZhZG9jVGFncz13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdKYXZhZG9jVGFnc092ZXJyaWRpbmc9ZW5hYmxlZAorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nSmF2YWRvY1RhZ3NWaXNpYmlsaXR5PXB1YmxpYwpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kaXNlYXNlbW9kZWxzLmZvcmNpbmcvTUVUQS1JTkYvTUFOSUZFU1QuTUYgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRpc2Vhc2Vtb2RlbHMuZm9yY2luZy9NRVRBLUlORi9NQU5JRkVTVC5NRgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YjA3NTk3Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kaXNlYXNlbW9kZWxzLmZvcmNpbmcvTUVUQS1JTkYvTUFOSUZFU1QuTUYKQEAgLTAsMCArMSwxOSBAQAorTWFuaWZlc3QtVmVyc2lvbjogMS4wCitCdW5kbGUtTWFuaWZlc3RWZXJzaW9uOiAyCitCdW5kbGUtTmFtZTogJXBsdWdpbk5hbWUKK0J1bmRsZS1TeW1ib2xpY05hbWU6IG9yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGlzZWFzZW1vZGVscy5mb3JjaW5nO3NpbmdsZXRvbjo9dHJ1ZQorQnVuZGxlLVZlcnNpb246IDEuMi4xCitCdW5kbGUtQ2xhc3NQYXRoOiAuCitCdW5kbGUtVmVuZG9yOiAlcHJvdmlkZXJOYW1lCitCdW5kbGUtTG9jYWxpemF0aW9uOiBwbHVnaW4KK0J1bmRsZS1SZXF1aXJlZEV4ZWN1dGlvbkVudmlyb25tZW50OiBKMlNFLTEuNQorRXhwb3J0LVBhY2thZ2U6IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5mb3JjaW5nLnRlc3RzCitSZXF1aXJlLUJ1bmRsZTogb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLAorIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5mb3JjaW5nO3Zpc2liaWxpdHk6PXJlZXhwb3J0LAorIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVsczt2aXNpYmlsaXR5Oj1yZWV4cG9ydCwKKyBvcmcuZWNsaXBzZS5zdGVtLmNvcmU7dmlzaWJpbGl0eTo9cmVleHBvcnQsCisgb3JnLmVjbGlwc2UuZW1mLmVjb3JlO3Zpc2liaWxpdHk6PXJlZXhwb3J0LAorIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnM7dmlzaWJpbGl0eTo9cmVleHBvcnQsCisgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnhtaTt2aXNpYmlsaXR5Oj1yZWV4cG9ydCwKKyBvcmcuanVuaXQ7dmlzaWJpbGl0eTo9cmVleHBvcnQKK0J1bmRsZS1BY3RpdmF0aW9uUG9saWN5OiBsYXp5CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRpc2Vhc2Vtb2RlbHMuZm9yY2luZy9idWlsZC5wcm9wZXJ0aWVzIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kaXNlYXNlbW9kZWxzLmZvcmNpbmcvYnVpbGQucHJvcGVydGllcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MDUxZmE5Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kaXNlYXNlbW9kZWxzLmZvcmNpbmcvYnVpbGQucHJvcGVydGllcwpAQCAtMCwwICsxLDEyIEBACisKKyMgPGNvcHlyaWdodD4KKyMgPC9jb3B5cmlnaHQ+CisjCisjICRJZDogYnVpbGQucHJvcGVydGllcyx2IDEuMSAyMDA5LzAzLzEzIDAwOjA2OjQ4IHNlZGx1bmQgRXhwICQKKworYmluLmluY2x1ZGVzID0gLixcCisgICAgICAgICAgICAgICBNRVRBLUlORi8sXAorICAgICAgICAgICAgICAgcGx1Z2luLnByb3BlcnRpZXMKK2phcnMuY29tcGlsZS5vcmRlciA9IC4KK3NvdXJjZS4uID0gc3JjLworb3V0cHV0Li4gPSBiaW4vCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRpc2Vhc2Vtb2RlbHMuZm9yY2luZy9wbHVnaW4ucHJvcGVydGllcyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGlzZWFzZW1vZGVscy5mb3JjaW5nL3BsdWdpbi5wcm9wZXJ0aWVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI2ZjI1MzkKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRpc2Vhc2Vtb2RlbHMuZm9yY2luZy9wbHVnaW4ucHJvcGVydGllcwpAQCAtMCwwICsxLDEzIEBACisjLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyMgKiBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisjICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworIyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorIyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisjICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyMgKgorIyAqIENvbnRyaWJ1dG9yczoKKyMgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisjICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3BsdWdpbk5hbWUgPSBTVEVNIEZvcmNpbmcgRGlzZWFzZSBNb2RlbCBUZXN0IFN1aXRlCitwcm92aWRlck5hbWUgPSBFY2xpcHNlLm9yZwpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kaXNlYXNlbW9kZWxzLmZvcmNpbmcvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9mb3JjaW5nL3Rlc3RzL0ZvcmNpbmdBbGxUZXN0cy5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kaXNlYXNlbW9kZWxzLmZvcmNpbmcvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9mb3JjaW5nL3Rlc3RzL0ZvcmNpbmdBbGxUZXN0cy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgyMzgwZWUKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRpc2Vhc2Vtb2RlbHMuZm9yY2luZy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL2ZvcmNpbmcvdGVzdHMvRm9yY2luZ0FsbFRlc3RzLmphdmEKQEAgLTAsMCArMSw1NSBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZm9yY2luZy50ZXN0czsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdDsKK2ltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdFN1aXRlOworaW1wb3J0IGp1bml0LnRleHR1aS5UZXN0UnVubmVyOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiBBIHRlc3Qgc3VpdGUgZm9yIHRoZSAnPGVtPjxiPkZvcmNpbmc8L2I+PC9lbT4nIG1vZGVsLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBGb3JjaW5nQWxsVGVzdHMgZXh0ZW5kcyBUZXN0U3VpdGUgeworCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgeworCQlUZXN0UnVubmVyLnJ1bihzdWl0ZSgpKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgc3RhdGljIFRlc3Qgc3VpdGUoKSB7CisJCVRlc3RTdWl0ZSBzdWl0ZSA9IG5ldyBGb3JjaW5nQWxsVGVzdHMoIkZvcmNpbmcgVGVzdHMiKTsgLy8kTk9OLU5MUy0xJAorCQlzdWl0ZS5hZGRUZXN0KEZvcmNpbmdUZXN0cy5zdWl0ZSgpKTsKKwkJcmV0dXJuIHN1aXRlOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBGb3JjaW5nQWxsVGVzdHMoU3RyaW5nIG5hbWUpIHsKKwkJc3VwZXIobmFtZSk7CisJfQorCit9IC8vRm9yY2luZ0FsbFRlc3RzCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRpc2Vhc2Vtb2RlbHMuZm9yY2luZy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL2ZvcmNpbmcvdGVzdHMvRm9yY2luZ0Rpc2Vhc2VNb2RlbFRlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGlzZWFzZW1vZGVscy5mb3JjaW5nL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvZm9yY2luZy90ZXN0cy9Gb3JjaW5nRGlzZWFzZU1vZGVsVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNhMjViYzUKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRpc2Vhc2Vtb2RlbHMuZm9yY2luZy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL2ZvcmNpbmcvdGVzdHMvRm9yY2luZ0Rpc2Vhc2VNb2RlbFRlc3QuamF2YQpAQCAtMCwwICsxLDEyOCBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZm9yY2luZy50ZXN0czsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7CitpbXBvcnQganVuaXQudGV4dHVpLlRlc3RSdW5uZXI7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuTW9kZWxGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5TVEVNVGltZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZm9yY2luZy5Gb3JjaW5nRGlzZWFzZU1vZGVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5mb3JjaW5nLkZvcmNpbmdGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5mb3JjaW5nLmltcGwuRm9yY2luZ0Rpc2Vhc2VNb2RlbEltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlNJUkxhYmVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TSVJMYWJlbFZhbHVlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5pbXBsLlNJUkxhYmVsVmFsdWVJbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5pbXBsLlN0YW5kYXJkRmFjdG9yeUltcGw7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIEEgdGVzdCBjYXNlIGZvciB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+RGlzZWFzZSBNb2RlbDwvYj48L2VtPicuCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBnZW5lcmF0ZWQKKyAqLworQFN1cHByZXNzV2FybmluZ3MoImFsbCIpCitwdWJsaWMgY2xhc3MgRm9yY2luZ0Rpc2Vhc2VNb2RlbFRlc3QgZXh0ZW5kcyBUZXN0Q2FzZSB7CisKKwkvKioKKwkgKiBUaGUgZml4dHVyZSBmb3IgdGhpcyBEaXNlYXNlIE1vZGVsIHRlc3QgY2FzZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgRm9yY2luZ0Rpc2Vhc2VNb2RlbCBmaXh0dXJlID0gbnVsbDsKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKKwkJVGVzdFJ1bm5lci5ydW4oRm9yY2luZ0Rpc2Vhc2VNb2RlbFRlc3QuY2xhc3MpOworCX0KKworCS8qKgorCSAqIENvbnN0cnVjdHMgYSBuZXcgRGlzZWFzZSBNb2RlbCB0ZXN0IGNhc2Ugd2l0aCB0aGUgZ2l2ZW4gbmFtZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRm9yY2luZ0Rpc2Vhc2VNb2RlbFRlc3QoU3RyaW5nIG5hbWUpIHsKKwkJc3VwZXIobmFtZSk7CisJfQorCisJCisJLyoqCisJICogU2V0cyB0aGUgZml4dHVyZSBmb3IgdGhpcyBEaXNlYXNlIE1vZGVsIHRlc3QgY2FzZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBzZXRGaXh0dXJlKEZvcmNpbmdEaXNlYXNlTW9kZWwgZml4dHVyZSkgeworCQl0aGlzLmZpeHR1cmUgPSBmaXh0dXJlOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIGZpeHR1cmUgZm9yIHRoaXMgRGlzZWFzZSBNb2RlbCB0ZXN0IGNhc2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIEZvcmNpbmdEaXNlYXNlTW9kZWwgZ2V0Rml4dHVyZSgpIHsKKwkJcmV0dXJuIGZpeHR1cmU7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZSNzZXRVcCgpCisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIHNldFVwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCXNldEZpeHR1cmUoRm9yY2luZ0ZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZUZvcmNpbmdEaXNlYXNlTW9kZWwoKSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZSN0ZWFyRG93bigpCisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIHRlYXJEb3duKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCXNldEZpeHR1cmUobnVsbCk7CisJfQorCisJcHVibGljIHZvaWQgdGVzdEZvcmNpbmdEaXNlYXNlTW9kZWwoKXsKKwkJRm9yY2luZ0Rpc2Vhc2VNb2RlbFRlc3RlckltcGwgZm9yY2luZ0Rpc2Vhc2VNb2RlbCA9IG5ldyBGb3JjaW5nRGlzZWFzZU1vZGVsVGVzdGVySW1wbCgpOworCQlTSVJMYWJlbCBsYWJlbCA9IFN0YW5kYXJkRmFjdG9yeUltcGwuZUlOU1RBTkNFLmNyZWF0ZVNJUkxhYmVsKCk7CisJCVNJUkxhYmVsVmFsdWUgbGFiZWxWYWwgPSAoU0lSTGFiZWxWYWx1ZSlsYWJlbC5nZXRQcm9iZVZhbHVlKCk7CisJCWxhYmVsVmFsLnNldFMoMTAwMGQpOworCQlsYWJlbFZhbC5zZXRJKDUwZCk7CisJCWxhYmVsVmFsLnNldFIoNDBkKTsKKwkJU0lSTGFiZWxWYWx1ZUltcGwgcmV0VmFsID0gbmV3IFNJUkxhYmVsVmFsdWVJbXBsKDBkLCAwZCwgMGQsIDBkKTsKKwkJU1RFTVRpbWUgdGltZSA9IE1vZGVsRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlU1RFTVRpbWUoKTsKKworCQlmb3JjaW5nRGlzZWFzZU1vZGVsLmNvbXB1dGVEaXNlYXNlRGVsdGFzKHRpbWUsIGxhYmVsVmFsLCBsYWJlbCwgODY0MDAwMDAsIHJldFZhbCk7CisJCWFzc2VydChyZXRWYWwuc2FuZSgpKTsKKwkJCisJfQorCQorCS8qKgorCSAqCisJICovCisJcHJpdmF0ZSBjbGFzcyBGb3JjaW5nRGlzZWFzZU1vZGVsVGVzdGVySW1wbCBleHRlbmRzIEZvcmNpbmdEaXNlYXNlTW9kZWxJbXBseworCisJfS8vIEZvcmNpbmdEaXNlYXNlTW9kZWxUZXN0ZXJJbXBsICBpbm5lciBjbGFzcworCQorfSAvL0ZvcmNpbmdEaXNlYXNlTW9kZWxUZXN0CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRpc2Vhc2Vtb2RlbHMuZm9yY2luZy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL2ZvcmNpbmcvdGVzdHMvRm9yY2luZ1Rlc3RzLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRpc2Vhc2Vtb2RlbHMuZm9yY2luZy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL2ZvcmNpbmcvdGVzdHMvRm9yY2luZ1Rlc3RzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzUyYjliYQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGlzZWFzZW1vZGVscy5mb3JjaW5nL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvZm9yY2luZy90ZXN0cy9Gb3JjaW5nVGVzdHMuamF2YQpAQCAtMCwwICsxLDU4IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5mb3JjaW5nLnRlc3RzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA5IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0OworaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0U3VpdGU7CitpbXBvcnQganVuaXQudGV4dHVpLlRlc3RSdW5uZXI7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIEEgdGVzdCBzdWl0ZSBmb3IgdGhlICc8ZW0+PGI+Zm9yY2luZzwvYj48L2VtPicgcGFja2FnZS4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgRm9yY2luZ1Rlc3RzIGV4dGVuZHMgVGVzdFN1aXRlIHsKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKKwkJVGVzdFJ1bm5lci5ydW4oc3VpdGUoKSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHN0YXRpYyBUZXN0IHN1aXRlKCkgeworCQlUZXN0U3VpdGUgc3VpdGUgPSBuZXcgRm9yY2luZ1Rlc3RzKCJmb3JjaW5nIFRlc3RzIik7IC8vJE5PTi1OTFMtMSQKKwkJc3VpdGUuYWRkVGVzdFN1aXRlKEZvcmNpbmdEaXNlYXNlTW9kZWxUZXN0LmNsYXNzKTsKKwkJc3VpdGUuYWRkVGVzdFN1aXRlKEdhdXNzaWFuRm9yY2luZ0Rpc2Vhc2VNb2RlbFRlc3QuY2xhc3MpOworCQlzdWl0ZS5hZGRUZXN0U3VpdGUoR2F1c3NpYW4yRm9yY2luZ0Rpc2Vhc2VNb2RlbFRlc3QuY2xhc3MpOworCQlzdWl0ZS5hZGRUZXN0U3VpdGUoR2F1c3NpYW4zRm9yY2luZ0Rpc2Vhc2VNb2RlbFRlc3QuY2xhc3MpOworCQlyZXR1cm4gc3VpdGU7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEZvcmNpbmdUZXN0cyhTdHJpbmcgbmFtZSkgeworCQlzdXBlcihuYW1lKTsKKwl9CisKK30gLy9Gb3JjaW5nVGVzdHMKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGlzZWFzZW1vZGVscy5mb3JjaW5nL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvZm9yY2luZy90ZXN0cy9HYXVzc2lhbjJGb3JjaW5nRGlzZWFzZU1vZGVsVGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kaXNlYXNlbW9kZWxzLmZvcmNpbmcvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9mb3JjaW5nL3Rlc3RzL0dhdXNzaWFuMkZvcmNpbmdEaXNlYXNlTW9kZWxUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDgwZjhkMwotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGlzZWFzZW1vZGVscy5mb3JjaW5nL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvZm9yY2luZy90ZXN0cy9HYXVzc2lhbjJGb3JjaW5nRGlzZWFzZU1vZGVsVGVzdC5qYXZhCkBAIC0wLDAgKzEsMTUyIEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5mb3JjaW5nLnRlc3RzOworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAxMCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqdW5pdC50ZXh0dWkuVGVzdFJ1bm5lcjsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5VUkk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLlNURU1VUkk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5EdWJsaW5Db3JlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5mb3JjaW5nLkZvcmNpbmdGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5mb3JjaW5nLkdhdXNzaWFuMkZvcmNpbmdEaXNlYXNlTW9kZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLkFnZ3JlZ2F0aW5nU0lEaXNlYXNlTW9kZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLkRpc2Vhc2VNb2RlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuRGlzZWFzZU1vZGVsTGFiZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLkluZmVjdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZFBhY2thZ2U7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIEEgdGVzdCBjYXNlIGZvciB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+R2F1c3NpYW4yIEZvcmNpbmcgRGlzZWFzZSBNb2RlbDwvYj48L2VtPicuCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIEdhdXNzaWFuMkZvcmNpbmdEaXNlYXNlTW9kZWxUZXN0IGV4dGVuZHMgR2F1c3NpYW5Gb3JjaW5nRGlzZWFzZU1vZGVsVGVzdCB7CisJCisJcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgRElTRUFTRV9JREVOVElGSUVSPSJHYXVzc2lhbjJGb3JjaW5nM0Rpc2Vhc2VNb2RlbCI7CisJcHVibGljIHN0YXRpYyBmaW5hbCBVUkkgRElTRUFTRV9VUkkgPSBTVEVNVVJJLmNyZWF0ZVVSSSgiZGlzZWFzZW1vZGVsIiArICIvIiArIERJU0VBU0VfSURFTlRJRklFUik7CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CisJCVRlc3RSdW5uZXIucnVuKEdhdXNzaWFuMkZvcmNpbmdEaXNlYXNlTW9kZWxUZXN0LmNsYXNzKTsKKwl9CisKKwkvKioKKwkgKiBDb25zdHJ1Y3RzIGEgbmV3IEdhdXNzaWFuMiBGb3JjaW5nIERpc2Vhc2UgTW9kZWwgdGVzdCBjYXNlIHdpdGggdGhlIGdpdmVuIG5hbWUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEdhdXNzaWFuMkZvcmNpbmdEaXNlYXNlTW9kZWxUZXN0KFN0cmluZyBuYW1lKSB7CisJCXN1cGVyKG5hbWUpOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIGZpeHR1cmUgZm9yIHRoaXMgR2F1c3NpYW4yIEZvcmNpbmcgRGlzZWFzZSBNb2RlbCB0ZXN0IGNhc2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIEdhdXNzaWFuMkZvcmNpbmdEaXNlYXNlTW9kZWwgZ2V0Rml4dHVyZSgpIHsKKwkJcmV0dXJuIChHYXVzc2lhbjJGb3JjaW5nRGlzZWFzZU1vZGVsKWZpeHR1cmU7CisJfQorCQorCS8qKgorCSAqIENyZWF0ZSBkaXNlYXNlIG1vZGVsIGluc3RhbmNlCisJICogCisJICogQHJldHVybiBhIGRpc2Vhc2UgbW9kZWwgaW5zdGFuY2UgZm9yIHRlc3QgcHVycG9zZXMKKwkgKi8KKwlwdWJsaWMgc3RhdGljIEdhdXNzaWFuMkZvcmNpbmdEaXNlYXNlTW9kZWwgY3JlYXRlRml4dHVyZSgpIHsKKwkJR2F1c3NpYW4yRm9yY2luZ0Rpc2Vhc2VNb2RlbCBkaXNlYXNlTW9kZWwgPSBGb3JjaW5nRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlR2F1c3NpYW4yRm9yY2luZ0Rpc2Vhc2VNb2RlbCgpOworCQlkaXNlYXNlTW9kZWwuc2V0RGlzZWFzZU5hbWUoRElTRUFTRV9JREVOVElGSUVSKTsKKwkJZGlzZWFzZU1vZGVsLnNldEluZmVjdGlvdXNNb3J0YWxpdHlSYXRlKEdhdXNzaWFuRGlzZWFzZU1vZGVsVGVzdFV0aWwuTU9SVEFMSVRZX1JBVEUpOworCQlkaXNlYXNlTW9kZWwuc2V0TW9kdWxhdGlvbkZsb29yKEdhdXNzaWFuRGlzZWFzZU1vZGVsVGVzdFV0aWwuTU9EVUxBVElPTl9GTE9VUik7CisJCWRpc2Vhc2VNb2RlbC5zZXRJbW11bml0eUxvc3NSYXRlKEdhdXNzaWFuRGlzZWFzZU1vZGVsVGVzdFV0aWwuSU1NVU5JVFlfTE9TU19SQVRFKTsKKwkJZGlzZWFzZU1vZGVsLnNldFRyYW5zbWlzc2lvblJhdGUoR2F1c3NpYW5EaXNlYXNlTW9kZWxUZXN0VXRpbC5UUkFOU01JU1NJT05fUkFURSk7CisJCWRpc2Vhc2VNb2RlbC5zZXRSZWNvdmVyeVJhdGUoR2F1c3NpYW5EaXNlYXNlTW9kZWxUZXN0VXRpbC5SRUNPVkVSWV9SQVRFKTsKKwkJZGlzZWFzZU1vZGVsLnNldFRpbWVQZXJpb2QoR2F1c3NpYW5EaXNlYXNlTW9kZWxUZXN0VXRpbC5USU1FX1BFUklPRCk7CisJCWRpc2Vhc2VNb2RlbC5zZXRQb3B1bGF0aW9uSWRlbnRpZmllcihHYXVzc2lhbkRpc2Vhc2VNb2RlbFRlc3RVdGlsLlRFU1RfUE9QVUxBVElPTl9JREVOVElGSUVSKTsKKworCQkKKwkJZmluYWwgRHVibGluQ29yZSBkYyA9IGRpc2Vhc2VNb2RlbC5nZXREdWJsaW5Db3JlKCk7CisJCWRpc2Vhc2VNb2RlbC5zZXRVUkkoRElTRUFTRV9VUkkpOworCQlkYy5zZXRJZGVudGlmaWVyKGRpc2Vhc2VNb2RlbC5nZXRVUkkoKS50b1N0cmluZygpKTsKKwkJcmV0dXJuIGRpc2Vhc2VNb2RlbDsKKwl9IC8vIGNyZWF0ZUZpeHR1cmUKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2Ujc2V0VXAoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgdm9pZCBzZXRVcCgpIHRocm93cyBFeGNlcHRpb24geworCQlzZXRGaXh0dXJlKEZvcmNpbmdGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVHYXVzc2lhbjJGb3JjaW5nRGlzZWFzZU1vZGVsKCkpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2UjdGVhckRvd24oKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgdm9pZCB0ZWFyRG93bigpIHRocm93cyBFeGNlcHRpb24geworCQlzZXRGaXh0dXJlKG51bGwpOworCX0KKwkKKwkvKioKKwkgKiBUZXN0cyB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuRGlzZWFzZU1vZGVsI2NyZWF0ZURpc2Vhc2VNb2RlbExhYmVsKCkgPGVtPkNyZWF0ZSBEaXNlYXNlIE1vZGVsIExhYmVsPC9lbT59JworCSAqIG9wZXJhdGlvbi4gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuRGlzZWFzZU1vZGVsI2NyZWF0ZURpc2Vhc2VNb2RlbExhYmVsKCkKKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCXB1YmxpYyB2b2lkIHRlc3RDcmVhdGVEaXNlYXNlTW9kZWxMYWJlbCgpIHsKKwkJZmluYWwgRGlzZWFzZU1vZGVsIGRpc2Vhc2VNb2RlbCA9IGdldEZpeHR1cmUoKTsKKwkJaWYgKCEoZGlzZWFzZU1vZGVsIGluc3RhbmNlb2YgQWdncmVnYXRpbmdTSURpc2Vhc2VNb2RlbCkpIHsKKwkJZmluYWwgRGlzZWFzZU1vZGVsTGFiZWwgZG1sID0gZGlzZWFzZU1vZGVsLmNyZWF0ZURpc2Vhc2VNb2RlbExhYmVsKGRpc2Vhc2VNb2RlbC5nZXRQb3B1bGF0aW9uSWRlbnRpZmllcigpKTsKKwkJCisJCWFzc2VydFRydWUoZG1sLmVDbGFzcygpLmVxdWFscyhTdGFuZGFyZFBhY2thZ2UuZUlOU1RBTkNFLmdldFNJUkxhYmVsKCkpKTsKKwkJfQorCX0gLy8gdGVzdENyZWF0ZURpc2Vhc2VNb2RlbExhYmVsCisKKwkKKworCS8qKgorCSAqIFRlc3RzIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5EaXNlYXNlTW9kZWwjY3JlYXRlSW5mZWN0b3IoKSA8ZW0+Q3JlYXRlIEluZmVjdG9yPC9lbT59JworCSAqIG9wZXJhdGlvbi4gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuRGlzZWFzZU1vZGVsI2NyZWF0ZUluZmVjdG9yKCkKKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCXB1YmxpYyB2b2lkIHRlc3RDcmVhdGVJbmZlY3RvcigpIHsKKwkJZmluYWwgRGlzZWFzZU1vZGVsIGRpc2Vhc2VNb2RlbCA9IGdldEZpeHR1cmUoKTsKKwkJaWYgKCEoZGlzZWFzZU1vZGVsIGluc3RhbmNlb2YgQWdncmVnYXRpbmdTSURpc2Vhc2VNb2RlbCkpIHsKKwkJCWZpbmFsIEluZmVjdG9yIGluZmVjdG9yID0gZGlzZWFzZU1vZGVsLmNyZWF0ZUluZmVjdG9yKCk7CisJCQlhc3NlcnROb3ROdWxsKGluZmVjdG9yKTsKKwkJCWFzc2VydFRydWUoaW5mZWN0b3IuZ2V0RGlzZWFzZU5hbWUoKS5lcXVhbHMoCisJCQkJCWZpeHR1cmUuZ2V0RGlzZWFzZU5hbWUoKSkpOworCQkJYXNzZXJ0VHJ1ZShpbmZlY3Rvci5nZXRQb3B1bGF0aW9uSWRlbnRpZmllcigpLmVxdWFsc0lnbm9yZUNhc2UoCisJCQkJCWZpeHR1cmUuZ2V0UG9wdWxhdGlvbklkZW50aWZpZXIoKSkpOworCQl9CisKKwl9IC8vIHRlc3RDcmVhdGVJbmZlY3RvcgorCisJCisKK30gLy9HYXVzc2lhbjJGb3JjaW5nRGlzZWFzZU1vZGVsVGVzdApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kaXNlYXNlbW9kZWxzLmZvcmNpbmcvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9mb3JjaW5nL3Rlc3RzL0dhdXNzaWFuM0ZvcmNpbmdEaXNlYXNlTW9kZWxUZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRpc2Vhc2Vtb2RlbHMuZm9yY2luZy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL2ZvcmNpbmcvdGVzdHMvR2F1c3NpYW4zRm9yY2luZ0Rpc2Vhc2VNb2RlbFRlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMzg2ZTEzCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kaXNlYXNlbW9kZWxzLmZvcmNpbmcvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9mb3JjaW5nL3Rlc3RzL0dhdXNzaWFuM0ZvcmNpbmdEaXNlYXNlTW9kZWxUZXN0LmphdmEKQEAgLTAsMCArMSwxNTYgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmZvcmNpbmcudGVzdHM7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTAgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQganVuaXQudGV4dHVpLlRlc3RSdW5uZXI7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuVVJJOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5TVEVNVVJJOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uRHVibGluQ29yZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZm9yY2luZy5Gb3JjaW5nRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZm9yY2luZy5HYXVzc2lhbjNGb3JjaW5nRGlzZWFzZU1vZGVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5BZ2dyZWdhdGluZ1NJRGlzZWFzZU1vZGVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5EaXNlYXNlTW9kZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLkRpc2Vhc2VNb2RlbExhYmVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5JbmZlY3RvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmRQYWNrYWdlOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiBBIHRlc3QgY2FzZSBmb3IgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPkdhdXNzaWFuMyBGb3JjaW5nIERpc2Vhc2UgTW9kZWw8L2I+PC9lbT4nLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBHYXVzc2lhbjNGb3JjaW5nRGlzZWFzZU1vZGVsVGVzdCBleHRlbmRzIEdhdXNzaWFuMkZvcmNpbmdEaXNlYXNlTW9kZWxUZXN0IHsKKwkKKwlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBESVNFQVNFX0lERU5USUZJRVI9IkdhdXNzaWFuM0ZvcmNpbmdEaXNlYXNlTW9kZWwiOworCXB1YmxpYyBzdGF0aWMgZmluYWwgVVJJIERJU0VBU0VfVVJJID0gU1RFTVVSSS5jcmVhdGVVUkkoImRpc2Vhc2Vtb2RlbCIgKyAiLyIgKyBESVNFQVNFX0lERU5USUZJRVIpOworCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgeworCQlUZXN0UnVubmVyLnJ1bihHYXVzc2lhbjNGb3JjaW5nRGlzZWFzZU1vZGVsVGVzdC5jbGFzcyk7CisJfQorCisJLyoqCisJICogQ29uc3RydWN0cyBhIG5ldyBHYXVzc2lhbjMgRm9yY2luZyBEaXNlYXNlIE1vZGVsIHRlc3QgY2FzZSB3aXRoIHRoZSBnaXZlbiBuYW1lLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBHYXVzc2lhbjNGb3JjaW5nRGlzZWFzZU1vZGVsVGVzdChTdHJpbmcgbmFtZSkgeworCQlzdXBlcihuYW1lKTsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBmaXh0dXJlIGZvciB0aGlzIEdhdXNzaWFuMyBGb3JjaW5nIERpc2Vhc2UgTW9kZWwgdGVzdCBjYXNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCBHYXVzc2lhbjNGb3JjaW5nRGlzZWFzZU1vZGVsIGdldEZpeHR1cmUoKSB7CisJCXJldHVybiAoR2F1c3NpYW4zRm9yY2luZ0Rpc2Vhc2VNb2RlbClmaXh0dXJlOworCX0KKworCS8qKgorCSAqIENyZWF0ZSBkaXNlYXNlIG1vZGVsIGluc3RhbmNlCisJICogCisJICogQHJldHVybiBhIGRpc2Vhc2UgbW9kZWwgaW5zdGFuY2UgZm9yIHRlc3QgcHVycG9zZXMKKwkgKi8KKwlwdWJsaWMgc3RhdGljIEdhdXNzaWFuM0ZvcmNpbmdEaXNlYXNlTW9kZWwgY3JlYXRlRml4dHVyZSgpIHsKKwkJR2F1c3NpYW4zRm9yY2luZ0Rpc2Vhc2VNb2RlbCBkaXNlYXNlTW9kZWwgPSBGb3JjaW5nRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlR2F1c3NpYW4zRm9yY2luZ0Rpc2Vhc2VNb2RlbCgpOworCQlkaXNlYXNlTW9kZWwuc2V0RGlzZWFzZU5hbWUoRElTRUFTRV9JREVOVElGSUVSKTsKKwkJZGlzZWFzZU1vZGVsLnNldEluZmVjdGlvdXNNb3J0YWxpdHlSYXRlKEdhdXNzaWFuRGlzZWFzZU1vZGVsVGVzdFV0aWwuTU9SVEFMSVRZX1JBVEUpOworCQlkaXNlYXNlTW9kZWwuc2V0TW9kdWxhdGlvbkZsb29yKEdhdXNzaWFuRGlzZWFzZU1vZGVsVGVzdFV0aWwuTU9EVUxBVElPTl9GTE9VUik7CisJCWRpc2Vhc2VNb2RlbC5zZXRJbW11bml0eUxvc3NSYXRlKEdhdXNzaWFuRGlzZWFzZU1vZGVsVGVzdFV0aWwuSU1NVU5JVFlfTE9TU19SQVRFKTsKKwkJZGlzZWFzZU1vZGVsLnNldFRyYW5zbWlzc2lvblJhdGUoR2F1c3NpYW5EaXNlYXNlTW9kZWxUZXN0VXRpbC5UUkFOU01JU1NJT05fUkFURSk7CisJCWRpc2Vhc2VNb2RlbC5zZXRSZWNvdmVyeVJhdGUoR2F1c3NpYW5EaXNlYXNlTW9kZWxUZXN0VXRpbC5SRUNPVkVSWV9SQVRFKTsKKwkJZGlzZWFzZU1vZGVsLnNldFRpbWVQZXJpb2QoR2F1c3NpYW5EaXNlYXNlTW9kZWxUZXN0VXRpbC5USU1FX1BFUklPRCk7CisJCWRpc2Vhc2VNb2RlbC5zZXRQb3B1bGF0aW9uSWRlbnRpZmllcihHYXVzc2lhbkRpc2Vhc2VNb2RlbFRlc3RVdGlsLlRFU1RfUE9QVUxBVElPTl9JREVOVElGSUVSKTsKKworCQkKKwkJZmluYWwgRHVibGluQ29yZSBkYyA9IGRpc2Vhc2VNb2RlbC5nZXREdWJsaW5Db3JlKCk7CisJCWRpc2Vhc2VNb2RlbC5zZXRVUkkoRElTRUFTRV9VUkkpOworCQlkYy5zZXRJZGVudGlmaWVyKGRpc2Vhc2VNb2RlbC5nZXRVUkkoKS50b1N0cmluZygpKTsKKwkJcmV0dXJuIGRpc2Vhc2VNb2RlbDsKKwl9IC8vIGNyZWF0ZUZpeHR1cmUKKwkKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlI3NldFVwKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgc2V0VXAoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJc2V0Rml4dHVyZShGb3JjaW5nRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlR2F1c3NpYW4zRm9yY2luZ0Rpc2Vhc2VNb2RlbCgpKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlI3RlYXJEb3duKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgdGVhckRvd24oKSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJc2V0Rml4dHVyZShudWxsKTsKKwl9CisJCisJLyoqCisJICogVGVzdHMgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLkRpc2Vhc2VNb2RlbCNjcmVhdGVEaXNlYXNlTW9kZWxMYWJlbCgpIDxlbT5DcmVhdGUgRGlzZWFzZSBNb2RlbCBMYWJlbDwvZW0+fScKKwkgKiBvcGVyYXRpb24uIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLkRpc2Vhc2VNb2RlbCNjcmVhdGVEaXNlYXNlTW9kZWxMYWJlbCgpCisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlwdWJsaWMgdm9pZCB0ZXN0Q3JlYXRlRGlzZWFzZU1vZGVsTGFiZWwoKSB7CisJCWZpbmFsIERpc2Vhc2VNb2RlbCBkaXNlYXNlTW9kZWwgPSBnZXRGaXh0dXJlKCk7CisJCWlmICghKGRpc2Vhc2VNb2RlbCBpbnN0YW5jZW9mIEFnZ3JlZ2F0aW5nU0lEaXNlYXNlTW9kZWwpKSB7CisJCWZpbmFsIERpc2Vhc2VNb2RlbExhYmVsIGRtbCA9IGRpc2Vhc2VNb2RlbC5jcmVhdGVEaXNlYXNlTW9kZWxMYWJlbChkaXNlYXNlTW9kZWwuZ2V0UG9wdWxhdGlvbklkZW50aWZpZXIoKSk7CisJCQorCQlhc3NlcnRUcnVlKGRtbC5lQ2xhc3MoKS5lcXVhbHMoU3RhbmRhcmRQYWNrYWdlLmVJTlNUQU5DRS5nZXRTSVJMYWJlbCgpKSk7CisJCX0KKwl9IC8vIHRlc3RDcmVhdGVEaXNlYXNlTW9kZWxMYWJlbAorCisJCisKKwkKKworCS8qKgorCSAqIFRlc3RzIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5EaXNlYXNlTW9kZWwjY3JlYXRlSW5mZWN0b3IoKSA8ZW0+Q3JlYXRlIEluZmVjdG9yPC9lbT59JworCSAqIG9wZXJhdGlvbi4gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuRGlzZWFzZU1vZGVsI2NyZWF0ZUluZmVjdG9yKCkKKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCXB1YmxpYyB2b2lkIHRlc3RDcmVhdGVJbmZlY3RvcigpIHsKKwkJZmluYWwgRGlzZWFzZU1vZGVsIGRpc2Vhc2VNb2RlbCA9IGdldEZpeHR1cmUoKTsKKwkJaWYgKCEoZGlzZWFzZU1vZGVsIGluc3RhbmNlb2YgQWdncmVnYXRpbmdTSURpc2Vhc2VNb2RlbCkpIHsKKwkJCWZpbmFsIEluZmVjdG9yIGluZmVjdG9yID0gZGlzZWFzZU1vZGVsLmNyZWF0ZUluZmVjdG9yKCk7CisJCQlhc3NlcnROb3ROdWxsKGluZmVjdG9yKTsKKwkJCWFzc2VydFRydWUoaW5mZWN0b3IuZ2V0RGlzZWFzZU5hbWUoKS5lcXVhbHMoCisJCQkJCWZpeHR1cmUuZ2V0RGlzZWFzZU5hbWUoKSkpOworCQkJYXNzZXJ0VHJ1ZShpbmZlY3Rvci5nZXRQb3B1bGF0aW9uSWRlbnRpZmllcigpLmVxdWFsc0lnbm9yZUNhc2UoCisJCQkJCWZpeHR1cmUuZ2V0UG9wdWxhdGlvbklkZW50aWZpZXIoKSkpOworCQl9CisKKwl9IC8vIHRlc3RDcmVhdGVJbmZlY3RvcgorCisJCisKKworfSAvL0dhdXNzaWFuM0ZvcmNpbmdEaXNlYXNlTW9kZWxUZXN0CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRpc2Vhc2Vtb2RlbHMuZm9yY2luZy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL2ZvcmNpbmcvdGVzdHMvR2F1c3NpYW5EaXNlYXNlTW9kZWxUZXN0VXRpbC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kaXNlYXNlbW9kZWxzLmZvcmNpbmcvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9mb3JjaW5nL3Rlc3RzL0dhdXNzaWFuRGlzZWFzZU1vZGVsVGVzdFV0aWwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YjhhNGY3Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kaXNlYXNlbW9kZWxzLmZvcmNpbmcvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9mb3JjaW5nL3Rlc3RzL0dhdXNzaWFuRGlzZWFzZU1vZGVsVGVzdFV0aWwuamF2YQpAQCAtMCwwICsxLDc1OSBAQAorLy8gRGlzZWFzZU1vZGVsVGVzdFV0aWwuamF2YQorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZm9yY2luZy50ZXN0czsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OworaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOworaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5VUkk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLlNURU1VUkk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5EdWJsaW5Db3JlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5FZGdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5HcmFwaDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguR3JhcGhGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5Ob2RlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5Nb2RlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuTW9kZWxGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5Ob2RlRGVjb3JhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5TVEVNVGltZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmFkYXB0ZXJzLnNwYXRpYWwuZ2VvLklubGluZUxhdExvbmdEYXRhUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5hZGFwdGVycy5zcGF0aWFsLmdlby5MYXRMb25nOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuYWRhcHRlcnMuc3BhdGlhbC5nZW8uTGF0TG9uZy5TZWdtZW50QnVpbGRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5BcmVhTGFiZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuTGFiZWxzRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5Qb3B1bGF0aW9uTGFiZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuaW1wbC5Qb3B1bGF0aW9uTGFiZWxJbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLmltcGwuVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxJbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubm9kZXMuTm9kZXNGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubm9kZXMuUmVnaW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5EaXNlYXNlTW9kZWxMYWJlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU0lSTGFiZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkRmFjdG9yeTsKKworCisvKioKKyAqIFRoaXMgY2xhc3MgY29udGFpbnMgYSBudW1iZXIgb2YgdXRpbGl0aWVzIGZvciBjcmVhdGluZyBhcnRpZmFjdHMgdXNlZnVsIGZvcgorICogdGVzdGluZyBkaXNlYXNlIG1vZGVsLgorICovCitwdWJsaWMgY2xhc3MgR2F1c3NpYW5EaXNlYXNlTW9kZWxUZXN0VXRpbCB7CisJCisJCisKKwkvKioKKwkgKiBUaGlzIGlzIHRoZSByYXRlIGF0IHdoaWNoIHBvcHVsYXRpb24gbWVtYmVycyAob24gYXZlcmFnZSkgdHJhbnNpdGlvbiBmcm9tCisJICogYWxsIG9mIHRoZSBvdGhlciBzdGF0ZXMgKGV4Y2VwdCA8ZW0+UHJlLUJvcm48L2VtPikgdG8gdGhlIHN0YXRlCisJICogPGVtPkRlYWQ8L2VtPiwgcGVyIHRpbWUgcGVyaW9kLiBVbml0czogcG9wdWxhdGlvbiBtZW1iZXJzCisJICogCisJICogQHNlZSBTdGFuZGFyZERpc2Vhc2VNb2RlbCNnZXRCYWNrZ3JvdW5kTW9ydGFsaXR5UmF0ZSgpCisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBkb3VibGUgTU9SVEFMSVRZX1JBVEUgPSAwLjAxOworCXB1YmxpYyBzdGF0aWMgZmluYWwgZG91YmxlIE1PRFVMQVRJT05fRkxPVVIgPSAwLjU7CisJcHVibGljIHN0YXRpYyBmaW5hbCBkb3VibGUgSU1NVU5JVFlfTE9TU19SQVRFID0gMC4wMDE7CisJcHVibGljIHN0YXRpYyBmaW5hbCBkb3VibGUgVFJBTlNNSVNTSU9OX1JBVEUgPSAxLjArTU9EVUxBVElPTl9GTE9VUjsKKwlwdWJsaWMgc3RhdGljIGZpbmFsIGRvdWJsZSBSRUNPVkVSWV9SQVRFID0gMC4xOworCXB1YmxpYyBzdGF0aWMgZmluYWwgbG9uZyBUSU1FX1BFUklPRCA9IFNURU1UaW1lLlVuaXRzLkRBWS5nZXRNaWxsaXNlY29uZHMoKTsKKworCS8qKgorCSAqIFRoZSBtaW5pbXVtIGxhdGl0dWRlIHZhbHVlIG9mIHRoZSByZWN0YW5ndWxhciBhcmVhIHRvIHdoaWNoIG5vZGUgc3BhdGlhbAorCSAqIGRhdGEgaXMgbWFwcGVkLgorCSAqLworCXB1YmxpYyBmaW5hbCBzdGF0aWMgZG91YmxlIE1JTl9MQVRJVFVERV9WQUxVRSA9IDAuMDsKKworCS8qKgorCSAqIFRoZSBtYXhpbXVtIGxhdGl0dWRlIHZhbHVlIG9mIHRoZSByZWN0YW5ndWxhciBhcmVhIHRvIHdoaWNoIG5vZGUgc3BhdGlhbAorCSAqIGRhdGEgaXMgbWFwcGVkLgorCSAqLworCXB1YmxpYyBmaW5hbCBzdGF0aWMgZG91YmxlIE1BWF9MQVRJVFVERV9WQUxVRSA9IDUwLjA7CisKKwkvKioKKwkgKiBUaGUgbWluaW11bSBsb25naXR1ZGUgdmFsdWUgb2YgdGhlIHJlY3Rhbmd1bGFyIGFyZWEgdG8gd2hpY2ggbm9kZSBzcGF0aWFsCisJICogZGF0YSBpcyBtYXBwZWQuCisJICovCisJcHVibGljIGZpbmFsIHN0YXRpYyBkb3VibGUgTUlOX0xPTkdJVFVERV9WQUxVRSA9IDAuMDsKKworCS8qKgorCSAqIFRoZSBtYXhpbXVtIGxvbmdpdHVkZSB2YWx1ZSBvZiB0aGUgcmVjdGFuZ3VsYXIgYXJlYSB0byB3aGljaCBub2RlIHNwYXRpYWwKKwkgKiBkYXRhIGlzIG1hcHBlZC4KKwkgKi8KKwlwdWJsaWMgZmluYWwgc3RhdGljIGRvdWJsZSBNQVhfTE9OR0lUVURFX1ZBTFVFID0gMTAwLjA7CisKKwkvKioKKwkgKiBUaGUgbnVtYmVyIG9mIGRlZ3JlZXMgb2YgbGF0aXR1ZGUgb2YgdGhlIGFyZWEgb24gdGhlIEVhcnRoJ3Mgc3VyZmFjZSB0bworCSAqIHdoaWNoIHRoZSBub2RlcyBhcmUgbWFwcGVkLgorCSAqLworCXB1YmxpYyBmaW5hbCBzdGF0aWMgZG91YmxlIExBVElUVURFX0hFSUdIVCA9IE1BWF9MQVRJVFVERV9WQUxVRQorCQkJLSBNSU5fTEFUSVRVREVfVkFMVUU7CisKKwkvKioKKwkgKiBUaGUgbnVtYmVyIG9mIGRlZ3JlZXMgb2YgbG9uZ2l0dWRlIG9mIHRoZSBhcmVhIG9uIHRoZSBFYXJ0aCdzIHN1cmZhY2UgdG8KKwkgKiB3aGljaCB0aGUgbm9kZXMgYXJlIG1hcHBlZC4KKwkgKi8KKwlwdWJsaWMgZmluYWwgc3RhdGljIGRvdWJsZSBMT05HSVRVREVfV0lEVEggPSBNQVhfTE9OR0lUVURFX1ZBTFVFCisJCQktIE1JTl9MT05HSVRVREVfVkFMVUU7CisKKwkvKioKKwkgKiBUaGUgdmFsdWUgdXNlZCBmb3IgdGhlIHBvcHVsYXRpb24gb2YgYSBub2RlLgorCSAqLworCXB1YmxpYyBmaW5hbCBzdGF0aWMgZG91YmxlIFRFU1RfUE9QVUxBVElPTl9DT1VOVCA9IDEwMDsKKworCS8qKgorCSAqIFRoZSB2YWx1ZSB1c2VkIGZvciBhcmVhIG9mIGEgbm9kZS4KKwkgKi8KKwlwdWJsaWMgZmluYWwgc3RhdGljIGRvdWJsZSBURVNUX0FSRUEgPSAxMDAuMDsKKworCS8qKgorCSAqIFRoZSBwb3B1bGF0aW9uIHVzZWQgZm9yIHRoZSBkaXNlYXNlIG1vZGVsIHRlc3RzLgorCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFRFU1RfUE9QVUxBVElPTl9JREVOVElGSUVSID0gUG9wdWxhdGlvbkxhYmVsLkhVTUFOOworCisJLyoqCisJICogVGhpcyBpcyB0aGUgdGltZSBwZXJpb2QgYmV0d2VlbiBzdWNjZXNzaXZlIGNvbXB1dGF0aW9ucyBvZiBsYWJlbCB2YWx1ZXMuCisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBsb25nIFRFU1RfVFJBTlNQT1JUX1JBVEVfVElNRV9QRVJJT0QgPSBTVEVNVGltZS5Vbml0cy5EQVkuZ2V0TWlsbGlzZWNvbmRzKCk7CisKKwkvKioKKwkgKiBUaGUgbnVtYmVyIG9mIGh1bWFucyB0aGF0IHRyYXZlbCBieSBhaXIgZnJvbSBvbmUgbm9kZSB0byBhbm90aGVyLgorCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEFJUl9UUkFOU1BPUlRfTUFYX0NBUEFDSVRZID0gNTsKKworCS8qKgorCSAqIFRoZSBudW1iZXIgb2YgaHVtYW5zIHRoYXQgdHJhdmVsIGJ5IHJvYWQgMSBmcm9tIG9uZSBub2RlIHRvIGFub3RoZXIuCisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgUk9BRDFfVFJBTlNQT1JUX01BWF9DQVBBQ0lUWSA9IDM7CisKKwkvKioKKwkgKiBUaGUgbnVtYmVyIG9mIGh1bWFucyB0aGF0IHRyYXZlbCBieSByb2FkIDIgZnJvbSBvbmUgbm9kZSB0byBhbm90aGVyLgorCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFJPQUQyX1RSQU5TUE9SVF9NQVhfQ0FQQUNJVFkgPSAyOworCisJLyoqCisJICogVGhlIG5hbWUgb2YgYSByb2FkIGNvbm5lY3RpbmcgdHdvIG5vZGVzIHRvZ2V0aGVyIGluIHRoZSBncmFwaC4KKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBST0FEMV9UUkFOU1BPUlRfSUQgPSAicm9hZDEiOworCisJLyoqCisJICogVGhlIG5hbWUgb2YgYSByb2FkIGNvbm5lY3RpbmcgdHdvIG5vZGVzIHRvZ2V0aGVyIGluIHRoZSBncmFwaC4KKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBST0FEMl9UUkFOU1BPUlRfSUQgPSAicm9hZDIiOworCisJLyoqCisJICogVGhlIG51bWJlciBvZiBraWxvbWV0ZXJzIG9mIGNvbW1vbiBib3JkZXIgdGhhdCB0d28gbm9kZXMgc2hhcmUuCisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgQ09NTU9OX0JPUkRFUl9MRU5HVEggPSAxMDsKKworCS8qKgorCSAqIFRoZSBpZGVudGlmaWVyIHVzZWQgZm9yIGFpciB0cmFuc3BvcnQKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBBSVJfVFJBTlNQT1JUX0lEID0gImFpcmNhbmFkYSI7CisKKwkvKioKKwkgKiBUaGUgZGlmZmVyZW5jZSBiZXR3ZWVuIHR3byBkb3VibGUgdmFsdWVzIHRoYXQgY29uc3RpdHV0ZXMgaW5lcXVhbGl0eQorCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgZG91YmxlIERPVUJMRV9FUVVBTElUWV9UT0xFUkFOQ0UgPSAwLjAyOworCQorCS8vIERpc2Vhc2UgTW9kZWwgVGVzdCBVUkkncworCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIE1PREVMID0gIkRJU0VBU0VNT0RFTCI7CisJcHVibGljIHN0YXRpYyBmaW5hbCBVUkkgREVGQVVMVF9VUkkgPSBTVEVNVVJJLmNyZWF0ZVVSSShNT0RFTCArICIvIiArICJkZWZhdWx0VGVzdFVSSSIpOworCXB1YmxpYyBzdGF0aWMgbG9uZyBUSU1FX09ORV9EQVkgPSAxOworCXB1YmxpYyBzdGF0aWMgbG9uZyBUSU1FX1RXT19EQVkgPSAyOworCQorCS8qKgorCSAqIFVSSSBmb3IgdGhlIFNvbHZlcgorCSAqLworCXB1YmxpYyBzdGF0aWMgVVJJIFNPTFZFUl9VUkkgPSBTVEVNVVJJLmNyZWF0ZVVSSSgic29sdmVyL3NvbHZlclRlc3Quc29sdmVyIik7CisJCisJcHVibGljIHN0YXRpYyBTVEVNVGltZSBnZXRTVEVNVGltZSgpIHsKKwkJcmV0dXJuIE1vZGVsRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlU1RFTVRpbWUoKTsKKwl9CisKKworCS8qKgorCSAqIEBwYXJhbSB2MQorCSAqICAgICAgICAgICAgYSBkb3VibGUKKwkgKiBAcGFyYW0gdjIKKwkgKiAgICAgICAgICAgIGEgZG91YmxlCisJICogQHJldHVybiA8Y29kZT50cnVlPC9jb2RlPiBpZiB0aGUgdHdvIGRvdWJsZSB2YWx1ZXMgZGlmZmVyIHRoYW4gYnkgbGVzcworCSAqICAgICAgICAgdGhhbiB7QGxpbmsgI0RPVUJMRV9FUVVBTElUWV9UT0xFUkFOQ0V9IGFuZCBzbyBzaG91bGQgYmUKKwkgKiAgICAgICAgIGNvbnNpZGVyZWQgdG8gYmUgZXF1YWwuCisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBib29sZWFuIGNsb3NlRW5vdWdoKGZpbmFsIGRvdWJsZSB2MSwgZmluYWwgZG91YmxlIHYyKSB7CisJCXJldHVybiBNYXRoLmFicyh2MSAtIHYyKSA8IERPVUJMRV9FUVVBTElUWV9UT0xFUkFOQ0U7CisJfSAvLyBjbG9zZUVub3VnaAorCisJCisKKwkKKwkvKioKKwkgKiBUaGlzIG1ldGhvZCBjcmVhdGVzIGEgTW9kZWwgd2hlcmUgdGhlIG5vZGVzIGFyZSBpbnRlcmNvbm5lY3RlZCBhcyBpbiBhCisJICogbGF0dGljZS4KKwkgKiAKKwkgKiBAcGFyYW0gbm9kZURlY29yYXRvcnMKKwkgKiAgICAgICAgICAgIHRoZSBub2RlIGRlY29yYXRvcnMgZm9yIHRoZSBtb2RlbAorCSAqIEBwYXJhbSBudW1Sb3dzCisJICogICAgICAgICAgICB0aGUgbnVtYmVyIG9mIHJvd3Mgb2Ygbm9kZXMgaW4gdGhlIGxhdHRpY2UKKwkgKiBAcGFyYW0gbnVtQ29sdW1ucworCSAqICAgICAgICAgICAgdGhlIG51bWJlciBvZiBjb2x1bW5zIG9mIG5vZGVzIGluIHRoZSBsYXR0aWNlCisJICogQHBhcmFtIHBvcHVsYXRpb25Db3VudAorCSAqICAgICAgICAgICAgdGhlIChEZWZhdWx0OiBodW1hbikgcG9wdWxhdGlvbiBhdCBlYWNoIG5vZGUKKwkgKiBAcGFyYW0gYXJlYQorCSAqICAgICAgICAgICAgdGhlIGFyZWEgKGttXjIpIG9mIGVhY2ggbm9kZQorCSAqIEByZXR1cm4gdGhlIG1vZGVsCisJICovCisJcHVibGljIHN0YXRpYyBNb2RlbCBjcmVhdGVMYXR0aWNlTW9kZWwoCisJCQlmaW5hbCBDb2xsZWN0aW9uPE5vZGVEZWNvcmF0b3I+IG5vZGVEZWNvcmF0b3JzLCBmaW5hbCBpbnQgbnVtUm93cywKKwkJCWZpbmFsIGludCBudW1Db2x1bW5zLCBmaW5hbCBkb3VibGUgcG9wdWxhdGlvbkNvdW50LAorCQkJZmluYWwgZG91YmxlIGFyZWEpIHsKKwkJZmluYWwgTW9kZWwgcmV0VmFsdWUgPSBNb2RlbEZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZU1vZGVsKCk7CisJCWZpbmFsIER1YmxpbkNvcmUgZGMgPSByZXRWYWx1ZS5nZXREdWJsaW5Db3JlKCk7CisJCWRjLnBvcHVsYXRlKCk7CisJCWRjLnNldFRpdGxlKGNyZWF0ZU1vZGVsVGl0bGUobm9kZURlY29yYXRvcnMsIG51bVJvd3MsIG51bUNvbHVtbnMsCisJCQkJcG9wdWxhdGlvbkNvdW50LCBhcmVhKSk7CisKKwkJcmV0VmFsdWUuZ2V0Tm9kZURlY29yYXRvcnMoKS5hZGRBbGwobm9kZURlY29yYXRvcnMpOworCQlmaW5hbCBHcmFwaCBsYXR0aWNlR3JhcGggPSBjcmVhdGVMYXR0aWNlR3JhcGgobnVtUm93cywgbnVtQ29sdW1ucywKKwkJCQlwb3B1bGF0aW9uQ291bnQsIGFyZWEpOworCQlyZXRWYWx1ZS5nZXRHcmFwaHMoKS5hZGQobGF0dGljZUdyYXBoKTsKKworCQlhc3NlcnQgcmV0VmFsdWUuc2FuZSgpOworCisJCXJldHVybiByZXRWYWx1ZTsKKwl9IC8vIGNyZWF0ZUxhdHRpY2VNb2RlbAorCisJLyoqCisJICogVGhpcyBtZXRob2QgY3JlYXRlcyBhIGdyYXBoIHdoZXJlIHRoZSBub2RlcyBhcmUgaW50ZXJjb25uZWN0ZWQgYXMgaW4gYQorCSAqIGxhdHRpY2UuCisJICogCisJICogQHBhcmFtIG51bVJvd3MKKwkgKiAgICAgICAgICAgIHRoZSBudW1iZXIgb2Ygcm93cyBvZiBub2RlcyBpbiB0aGUgbGF0dGljZQorCSAqIEBwYXJhbSBudW1Db2x1bW5zCisJICogICAgICAgICAgICB0aGUgbnVtYmVyIG9mIGNvbHVtbnMgb2Ygbm9kZXMgaW4gdGhlIGxhdHRpY2UKKwkgKiBAcGFyYW0gcG9wdWxhdGlvbkNvdW50CisJICogICAgICAgICAgICB0aGUgKERlZmF1bHQ6IGh1bWFuKSBwb3B1bGF0aW9uIGF0IGVhY2ggbm9kZQorCSAqIEBwYXJhbSBhcmVhCisJICogICAgICAgICAgICB0aGUgYXJlYSAoa21eMikgb2YgZWFjaCBub2RlCisJICogQHJldHVybiBncmFwaCB0aGF0IGlzIGEgbGF0dGljZSBvZiBub2Rlcy4KKwkgKi8KKwlwdWJsaWMgc3RhdGljIEdyYXBoIGNyZWF0ZUxhdHRpY2VHcmFwaChmaW5hbCBpbnQgbnVtUm93cywKKwkJCWZpbmFsIGludCBudW1Db2x1bW5zLCBmaW5hbCBkb3VibGUgcG9wdWxhdGlvbkNvdW50LAorCQkJZmluYWwgZG91YmxlIGFyZWEpIHsKKworCQlmaW5hbCBOb2RlIG5vZGVIb2xkZXJbXVtdID0gbmV3IE5vZGVbbnVtUm93c11bbnVtQ29sdW1uc107CisJCWZpbmFsIEdyYXBoIHJldFZhbHVlID0gR3JhcGhGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVHcmFwaCgpOworCisJCWZpbmFsIER1YmxpbkNvcmUgZGMgPSByZXRWYWx1ZS5nZXREdWJsaW5Db3JlKCk7CisJCWRjLnBvcHVsYXRlKCk7CisJCWRjCisJCQkJLnNldFRpdGxlKGNyZWF0ZUdyYXBoVGl0bGUobnVtUm93cywgbnVtQ29sdW1ucywKKwkJCQkJCXBvcHVsYXRpb25Db3VudCwgYXJlYSkpOworCisJCS8vIENyZWF0ZSB0aGUgbm9kZXMgYW5kIHB1dCB0aGVtIGludG8gdGhlIGdyYXBoCisJCWZvciAoaW50IHJvdyA9IDA7IHJvdyA8IG51bVJvd3M7IHJvdysrKSB7CisJCQlmb3IgKGludCBjb2x1bW4gPSAwOyBjb2x1bW4gPCBudW1Db2x1bW5zOyBjb2x1bW4rKykgeworCQkJCWZpbmFsIFJlZ2lvbiByZWdpb25Ob2RlID0gY3JlYXRlUmVnaW9uTm9kZShyb3csIGNvbHVtbik7CisJCQkJbm9kZUhvbGRlcltyb3ddW2NvbHVtbl0gPSByZWdpb25Ob2RlOworCQkJCXJldFZhbHVlLnB1dE5vZGUocmVnaW9uTm9kZSk7CisJCQl9IC8vIGZvciBlYWNoIGNvbHVtbgorCQl9IC8vIGZvciBlYWNoIHJvdworCisJCS8vIEFkZCB0aGUgUG9wdWxhdGlvbiBhbmQgQXJlYSBsYWJlbHMKKwkJZm9yIChpbnQgcm93ID0gMDsgcm93IDwgbnVtUm93czsgcm93KyspIHsKKwkJCWZvciAoaW50IGNvbHVtbiA9IDA7IGNvbHVtbiA8IG51bUNvbHVtbnM7IGNvbHVtbisrKSB7CisJCQkJZmluYWwgTm9kZSBub2RlID0gbm9kZUhvbGRlcltyb3ddW2NvbHVtbl07CisKKwkJCQkvLyBQb3B1bGF0aW9uCisJCQkJcmV0VmFsdWUucHV0Tm9kZUxhYmVsKGNyZWF0ZVBvcHVsYXRpb25MYWJlbCgKKwkJCQkJCVRFU1RfUE9QVUxBVElPTl9JREVOVElGSUVSLCBwb3B1bGF0aW9uQ291bnQsIG5vZGUpKTsKKworCQkJCS8vIEFyZWEKKwkJCQlyZXRWYWx1ZS5wdXROb2RlTGFiZWwoY3JlYXRlQXJlYUxhYmVsKGFyZWEsIG5vZGUpKTsKKwkJCX0gLy8gZm9yIGVhY2ggY29sdW1uCisJCX0gLy8gZm9yIGVhY2ggcm93CisKKwkJLy8gTm93IGFkZCByZWxhdGlvbnNoaXBzCisKKwkKKwkJLy8gQWRkIHRoZSBzcGF0aWFsIHNwZWNpZmljYXRpb24gdG8gdGhlIHNwYXRpYWwgYXR0cmlidXRlIG9mIGVhY2ggbm9kZSdzCisJCS8vIGR1YmxpbiBjb3JlIGluc3RhbmNlIGFuZCBmb3IgZWFjaCBlZGdlLiBUaGUgdmFsdWUgZm9yIHRoZSBub2RlcyB3aWxsCisJCS8vIGJlIGEgcmVjdGFuZ3VsYXIgYXJlYSBleHByZXNzZWQgYXMgYSBzZXQgb2YgbGF0L2xvbmcgcG9pbnRzIHRoYXQKKwkJLy8gbGF5b3V0IGEgcG9seWdvbi4gVGhlIHBvc2l0aW9uIG9mIHRoZSBwb2x5Z29uIHdpbGwgYXQgcG9zaXRpb24gdGhhdAorCQkvLyBtYXRjaGVzIHRoZSBwb3NpdGlvbiAocm93LCBjb2x1bW4pIG9mIHRoZSBub2RlIGluIHRoZSBsYXR0aWNlLgorCQlhZGRTcGF0aWFsU3BlY2lmaWNhdGlvbnMobm9kZUhvbGRlcik7CisKKwkJYXNzZXJ0IHJldFZhbHVlLnNhbmUoKTsKKworCQlyZXR1cm4gcmV0VmFsdWU7CisJfSAvLyBjcmVhdGVMYXR0aWNlR3JhcGgKKworCS8qKgorCSAqIEFkZCB0aGUgc3BhdGlhbCBzcGVjaWZpY2F0aW9uIHRvIHRoZSBzcGF0aWFsIGF0dHJpYnV0ZSBvZiBlYWNoIG5vZGUncworCSAqIGR1YmxpbiBjb3JlIGluc3RhbmNlLiBUaGUgdmFsdWUgd2lsbCBiZSBhIHJldGFuZ3VsYXIgYXJlYSBleHByZXNzZWQgYXMgYQorCSAqIHNldCBvZiBsYXQvbG9uZyBwb2ludHMgdGhhdCBsYXlvdXQgYSBwb2x5Z29uLiBUaGUgcG9zaXRpb24gb2YgdGhlIHBvbHlnb24KKwkgKiB3aWxsIGF0IHBvc2l0aW9uIHRoYXQgbWF0Y2hlcyB0aGUgcG9zaXRpb24gKHJvdywgY29sdW1uKSBvZiB0aGUgbm9kZSBpbgorCSAqIHRoZSBsYXR0aWNlLiBOb2RlIGF0IHBvc2l0aW9uIFswXVswXSB3aWxsIGJlIGluIHRoZSB1cHBlciBsZWZ0IHdoaWxlIHRoZQorCSAqIG5vZGUgYXQgcG9zaXRvbiBbbnVtcm93c11bbnVtY29sdW1uc10gd2lsbCBiZSBpbiB0aGUgbG93ZXIgcmlnaHQgb2YgdGhlCisJICogcmVjdGFuZ3VsYXIgYXJlYS4KKwkgKiAKKwkgKiBAcGFyYW0gbm9kZUhvbGRlcgorCSAqICAgICAgICAgICAgdGhlIGFycmF5IHRoYXQgaG9sZHMgdGhlIG5vZGVzIG9mIHRoZSBsYXR0aWMKKwkgKi8KKwlwcml2YXRlIHN0YXRpYyB2b2lkIGFkZFNwYXRpYWxTcGVjaWZpY2F0aW9ucyhmaW5hbCBOb2RlW11bXSBub2RlSG9sZGVyKSB7CisKKwkJLy8gRmlyc3QgcnVuIHRocm91Z2ggYWxsIG9mIHRoZSBub2RlcyBjcmVhdGluZyBhIHBvbHlnb24gZm9yIHRoZWlyCisJCS8vIGJvcmRlciBhbmQgYWRkaW5nIHRoZSBkYXRhIGFzIGFuIGlubGluZSB2YWx1ZSBpbiB0aGUgc3BhdGlhbAorCQkvLyBhdHRyaWJ1dGUgb2YgdGhlIG5vZGUncyBkdWJsaW4gY29yZS4KKwkJZm9yIChpbnQgcm93ID0gMDsgcm93IDwgbm9kZUhvbGRlci5sZW5ndGg7IHJvdysrKSB7CisJCQlmb3IgKGludCBjb2x1bW4gPSAwOyBjb2x1bW4gPCBub2RlSG9sZGVyW3Jvd10ubGVuZ3RoOyBjb2x1bW4rKykgeworCQkJCWZpbmFsIE5vZGUgbm9kZSA9IG5vZGVIb2xkZXJbcm93XVtjb2x1bW5dOworCQkJCWZpbmFsIExhdExvbmcgbm9kZVNlZ21lbnRzID0gY3JlYXRlTm9kZUJvcmRlckxhdExvbmdTZWdtZW50cygKKwkJCQkJCXJvdywgbm9kZUhvbGRlci5sZW5ndGgsIGNvbHVtbiwgbm9kZUhvbGRlcltyb3ddLmxlbmd0aCk7CisJCQkJZmluYWwgU3RyaW5nIHNwYXRpYWxVUklTdHJpbmcgPSBJbmxpbmVMYXRMb25nRGF0YVByb3ZpZGVyCisJCQkJCQkuY3JlYXRlU3BhdGlhbElubGluZVVSSVN0cmluZyhub2RlU2VnbWVudHMpOworCQkJCW5vZGUuZ2V0RHVibGluQ29yZSgpLnNldFNwYXRpYWwoc3BhdGlhbFVSSVN0cmluZyk7CisJCQl9IC8vIGZvciBlYWNoIGNvbHVtbgorCQl9IC8vIGZvciBlYWNoIHJvdworCisJCS8vIE5vdyBkbyBhbGwgdGhlIGVkZ2VzLCB3ZSdsbCBzdGFydCBpbiB0aGUgdXBwZXIgcmlnaHQgYW5kIGRvIGVkZ2VzCisJCS8vIGJldHdlZW4gc3VjY2Vzc2l2ZSBwYWlycyBvZiBub2Rlcy4KKwkJZm9yIChpbnQgcm93ID0gMDsgcm93IDwgbm9kZUhvbGRlci5sZW5ndGggLSAxOyByb3crKykgeworCQkJZm9yIChpbnQgY29sdW1uID0gMDsgY29sdW1uIDwgbm9kZUhvbGRlcltyb3ddLmxlbmd0aCAtIDE7IGNvbHVtbisrKSB7CisKKwkJCQkvLyBGaXJzdCBkbyB0aGUgZWRnZXMgdG8gdGhlIHJpZ2h0CisJCQkJZmluYWwgTGF0TG9uZyBlZGdlU2VnbWVudHNSaWdodCA9IGNyZWF0ZUVkZ2VMYXRMb25nU2VnbWVudHMoCisJCQkJCQlyb3csIGNvbHVtbiwgcm93LCBjb2x1bW4gKyAxLCBub2RlSG9sZGVyLmxlbmd0aCwKKwkJCQkJCW5vZGVIb2xkZXJbcm93XS5sZW5ndGgpOworCisJCQkJZmluYWwgU3RyaW5nIGVkZ2VTcGF0aWFsQXR0cmlidXRlUmlnaHQgPSBJbmxpbmVMYXRMb25nRGF0YVByb3ZpZGVyCisJCQkJCQkuY3JlYXRlU3BhdGlhbElubGluZVVSSVN0cmluZyhlZGdlU2VnbWVudHNSaWdodCk7CisKKwkJCQlmb3IgKEVkZ2UgZWRnZSA6IGdldEVkZ2VzQmV0d2Vlbk5vZGVzKG5vZGVIb2xkZXJbcm93XVtjb2x1bW5dLAorCQkJCQkJbm9kZUhvbGRlcltyb3ddW2NvbHVtbiArIDFdKSkgeworCQkJCQllZGdlLmdldER1YmxpbkNvcmUoKS5zZXRTcGF0aWFsKGVkZ2VTcGF0aWFsQXR0cmlidXRlUmlnaHQpOworCQkJCX0KKworCQkJCS8vIFRoZW4gZG8gdGhlIGVkZ2VzIGJlbG93CisJCQkJZmluYWwgTGF0TG9uZyBlZGdlU2VnbWVudHNCZWxvdyA9IGNyZWF0ZUVkZ2VMYXRMb25nU2VnbWVudHMoCisJCQkJCQlyb3csIGNvbHVtbiwgcm93ICsgMSwgY29sdW1uLCBub2RlSG9sZGVyLmxlbmd0aCwKKwkJCQkJCW5vZGVIb2xkZXJbcm93XS5sZW5ndGgpOworCisJCQkJZmluYWwgU3RyaW5nIGVkZ2VTcGF0aWFsQXR0cmlidXRlQmVsb3cgPSBJbmxpbmVMYXRMb25nRGF0YVByb3ZpZGVyCisJCQkJCQkuY3JlYXRlU3BhdGlhbElubGluZVVSSVN0cmluZyhlZGdlU2VnbWVudHNCZWxvdyk7CisKKwkJCQlmb3IgKEVkZ2UgZWRnZSA6IGdldEVkZ2VzQmV0d2Vlbk5vZGVzKG5vZGVIb2xkZXJbcm93XVtjb2x1bW5dLAorCQkJCQkJbm9kZUhvbGRlcltyb3cgKyAxXVtjb2x1bW5dKSkgeworCQkJCQllZGdlLmdldER1YmxpbkNvcmUoKS5zZXRTcGF0aWFsKGVkZ2VTcGF0aWFsQXR0cmlidXRlQmVsb3cpOworCQkJCX0KKwkJCX0gLy8gZm9yIGVhY2ggY29sdW1uCisJCX0gLy8gZm9yIGVhY2ggcm93CisKKwl9IC8vIGFkZFNwYXRpYWxTcGVjaWZpY2F0aW9ucworCisJLyoqCisJICogQHBhcmFtIG5vZGUxCisJICogQHBhcmFtIG5vZGUyCisJICogQHJldHVybiBhbGwgdGhlIGVkZ2VzIGJldHdlZW4gdGhlIHR3byBub2RlcworCSAqLworCXByaXZhdGUgc3RhdGljIExpc3Q8RWRnZT4gZ2V0RWRnZXNCZXR3ZWVuTm9kZXMoTm9kZSBub2RlMSwgTm9kZSBub2RlMikgeworCQlmaW5hbCBMaXN0PEVkZ2U+IHJldFZhbHVlID0gbmV3IEFycmF5TGlzdDxFZGdlPigpOworCQlmb3IgKEl0ZXJhdG9yPEVkZ2U+IGVkZ2VJdGVyYXRvciA9IG5vZGUxLmdldEVkZ2VzKCkuaXRlcmF0b3IoKTsgZWRnZUl0ZXJhdG9yCisJCQkJLmhhc05leHQoKTspIHsKKwkJCWZpbmFsIEVkZ2UgZWRnZSA9IChFZGdlKSBlZGdlSXRlcmF0b3IubmV4dCgpOworCQkJaWYgKGVkZ2UuZ2V0T3RoZXJOb2RlKG5vZGUxKSA9PSBub2RlMikgeworCQkJCXJldFZhbHVlLmFkZChlZGdlKTsKKwkJCX0KKwkJfQorCQlyZXR1cm4gcmV0VmFsdWU7CisJfSAvLyBnZXRFZGdlc0JldHdlZW5Ob2RlcworCisJLyoqCisJICogQHBhcmFtIHJvdworCSAqICAgICAgICAgICAgdGhlIHJvdyBpbiB0aGUgbGF0dGljZSBvZiB0aGUgbm9kZQorCSAqIEBwYXJhbSBudW1Sb3dzCisJICogICAgICAgICAgICB0aGUgdG90YWwgbnVtYmVyIG9mIHJvd3MgaW4gdGhlIGxhdHRpY2UKKwkgKiBAcGFyYW0gY29sdW1uCisJICogICAgICAgICAgICB0aGUgY29sdW1uIGluIHRoZSBsYXR0aWNlIG9mIHRoZSBub2RlCisJICogQHBhcmFtIG51bUNvbHVtbnMKKwkgKiAgICAgICAgICAgIHRoZSB0b3RhbCBudW1iZXIgb2YgY29sdW1ucyBpbiB0aGUgbGF0dGljZQorCSAqIEByZXR1cm4gYSBsaXN0IG9mIGxhdC9sb25nIHBvbHlnb25zL2xpbmVzIGZvciB0aGUgbm9kZQorCSAqLworCXByaXZhdGUgc3RhdGljIExhdExvbmcgY3JlYXRlTm9kZUJvcmRlckxhdExvbmdTZWdtZW50cyhmaW5hbCBpbnQgcm93LAorCQkJZmluYWwgaW50IG51bVJvd3MsIGZpbmFsIGludCBjb2x1bW4sIGZpbmFsIGludCBudW1Db2x1bW5zKSB7CisJCWZpbmFsIExhdExvbmcgcmV0VmFsdWUgPSBuZXcgTGF0TG9uZygpOworCQlmaW5hbCBkb3VibGUgbm9kZUxhdEhlaWdodCA9IExBVElUVURFX0hFSUdIVCAvIG51bVJvd3M7CisJCWZpbmFsIGRvdWJsZSBub2RlTG9uZ1dpZHRoID0gTE9OR0lUVURFX1dJRFRIIC8gbnVtQ29sdW1uczsKKworCQlmaW5hbCBkb3VibGUgbG93ZXJMZWZ0TGF0ID0gTUlOX0xBVElUVURFX1ZBTFVFICsgKG51bVJvd3MgLSByb3cgLSAxKQorCQkJCSogbm9kZUxhdEhlaWdodDsKKwkJZmluYWwgZG91YmxlIGxvd2VyTGVmdExvbmcgPSBNSU5fTE9OR0lUVURFX1ZBTFVFICsgY29sdW1uCisJCQkJKiBub2RlTG9uZ1dpZHRoOworCisJCWZpbmFsIGRvdWJsZSB1cHBlclJpZ2h0TGF0ID0gbG93ZXJMZWZ0TGF0ICsgbm9kZUxhdEhlaWdodDsKKwkJZmluYWwgZG91YmxlIHVwcGVyUmlnaHRMb25nID0gbG93ZXJMZWZ0TG9uZyArIG5vZGVMb25nV2lkdGg7CisKKwkJZmluYWwgU2VnbWVudEJ1aWxkZXIgc2IgPSBuZXcgU2VnbWVudEJ1aWxkZXIoKTsKKworCQkvLyBXZSBqdXN0IG1ha2UgYSByZWN0YW5nbGUuLi4KKwkJc2IuYWRkKGxvd2VyTGVmdExhdCwgbG93ZXJMZWZ0TG9uZyk7CisJCXNiLmFkZCh1cHBlclJpZ2h0TGF0LCBsb3dlckxlZnRMb25nKTsKKwkJc2IuYWRkKHVwcGVyUmlnaHRMYXQsIHVwcGVyUmlnaHRMb25nKTsKKwkJc2IuYWRkKGxvd2VyTGVmdExhdCwgdXBwZXJSaWdodExvbmcpOworCQlzYi5hZGQobG93ZXJMZWZ0TGF0LCBsb3dlckxlZnRMb25nKTsKKwkJcmV0VmFsdWUuYWRkKHNiLnRvU2VnbWVudCgpKTsKKworCQlyZXR1cm4gcmV0VmFsdWU7CisJfSAvLyBjcmVhdGVOb2RlQm9yZGVyTGF0TG9uZ1NlZ21lbnRzCisKKwkvKioKKwkgKiBAcGFyYW0gbm9kZTFSb3cKKwkgKiBAcGFyYW0gbm9kZTFDb2x1bW4KKwkgKiBAcGFyYW0gbm9kZTJSb3cKKwkgKiBAcGFyYW0gbm9kZTJDb2x1bW4KKwkgKiBAcGFyYW0gbGVuZ3RoCisJICogQHBhcmFtIGxlbmd0aDIKKwkgKiBAcmV0dXJuIGEgbGlzdCBvZiBhIGxhdC9sb25nIGxpbmUgYmV0d2VlbiB0aGUgY2VudGVycyBvZiB0aGUgdHdvIG5vZGVzLgorCSAqLworCXByaXZhdGUgc3RhdGljIExhdExvbmcgY3JlYXRlRWRnZUxhdExvbmdTZWdtZW50cyhpbnQgbm9kZTFSb3csCisJCQlpbnQgbm9kZTFDb2x1bW4sIGludCBub2RlMlJvdywgaW50IG5vZGUyQ29sdW1uLCBpbnQgbnVtUm93cywKKwkJCWludCBudW1Db2x1bW5zKSB7CisJCWZpbmFsIExhdExvbmcgcmV0VmFsdWUgPSBuZXcgTGF0TG9uZygpOworCQlmaW5hbCBkb3VibGUgbm9kZUxhdEhlaWdodCA9IExBVElUVURFX0hFSUdIVCAvIG51bUNvbHVtbnM7CisJCWZpbmFsIGRvdWJsZSBub2RlTG9uZ1dpZHRoID0gTE9OR0lUVURFX1dJRFRIIC8gbnVtUm93czsKKworCQlmaW5hbCBkb3VibGUgcmVsYXRpdmVOb2RlQ2VudGVyTGF0ID0gbm9kZUxhdEhlaWdodCAvIDIuMDsKKwkJZmluYWwgZG91YmxlIHJlbGF0aXZlTm9kZUNlbnRlckxvbmcgPSBub2RlTG9uZ1dpZHRoIC8gMi4wOworCisJCWZpbmFsIGRvdWJsZSBub2RlMUxvd2VyTGVmdExhdCA9IE1JTl9MQVRJVFVERV9WQUxVRQorCQkJCSsgKG51bVJvd3MgLSBub2RlMVJvdyAtIDEpICogbm9kZUxhdEhlaWdodDsKKwkJZmluYWwgZG91YmxlIG5vZGUxTG93ZXJMZWZ0TG9uZyA9IE1JTl9MT05HSVRVREVfVkFMVUUgKyBub2RlMUNvbHVtbgorCQkJCSogbm9kZUxvbmdXaWR0aDsKKworCQlmaW5hbCBkb3VibGUgbm9kZTJMb3dlckxlZnRMYXQgPSBNSU5fTEFUSVRVREVfVkFMVUUKKwkJCQkrIChudW1Sb3dzIC0gbm9kZTJSb3cgLSAxKSAqIG5vZGVMYXRIZWlnaHQ7CisJCWZpbmFsIGRvdWJsZSBub2RlMkxvd2VyTGVmdExvbmcgPSBNSU5fTE9OR0lUVURFX1ZBTFVFICsgbm9kZTJDb2x1bW4KKwkJCQkqIG5vZGVMb25nV2lkdGg7CisKKwkJZmluYWwgU2VnbWVudEJ1aWxkZXIgc2IgPSBuZXcgU2VnbWVudEJ1aWxkZXIoKTsKKwkJLy8gV2UganVzdCBtYWtlIGEgc3RyYWlnaHQgbGluZSBiZXR3ZWVuIHRoZSBjZW50ZXJzLi4uCisJCXNiLmFkZChub2RlMUxvd2VyTGVmdExhdCArIHJlbGF0aXZlTm9kZUNlbnRlckxhdCwgbm9kZTFMb3dlckxlZnRMb25nCisJCQkJKyByZWxhdGl2ZU5vZGVDZW50ZXJMb25nKTsKKwkJc2IuYWRkKG5vZGUyTG93ZXJMZWZ0TGF0ICsgcmVsYXRpdmVOb2RlQ2VudGVyTGF0LCBub2RlMkxvd2VyTGVmdExvbmcKKwkJCQkrIHJlbGF0aXZlTm9kZUNlbnRlckxvbmcpOworCisJCXJldFZhbHVlLmFkZChzYi50b1NlZ21lbnQoKSk7CisKKwkJcmV0dXJuIHJldFZhbHVlOworCX0gLy8gY3JlYXRlRWRnZUxhdExvbmdTZWdtZW50cworCisJCisKKwkKKwkvKioKKwkgKiBAcGFyYW0gYXJlYQorCSAqICAgICAgICAgICAgdGhlIGFyZWEgb2YgdGhlIG5vZGUKKwkgKiBAcGFyYW0gbm9kZQorCSAqICAgICAgICAgICAgdGhlIG5vZGUKKwkgKiBAcmV0dXJuIGFuIEFyZWFMYWJlbCBmb3IgdGhlIG5vZGUKKwkgKi8KKwlwcml2YXRlIHN0YXRpYyBBcmVhTGFiZWwgY3JlYXRlQXJlYUxhYmVsKGZpbmFsIGRvdWJsZSBhcmVhLCBmaW5hbCBOb2RlIG5vZGUpIHsKKwkJZmluYWwgQXJlYUxhYmVsIHJldFZhbHVlID0gTGFiZWxzRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlQXJlYUxhYmVsKCk7CisJCXJldFZhbHVlLmdldEN1cnJlbnRBcmVhVmFsdWUoKS5zZXRBcmVhKGFyZWEpOworCQlub2RlLmdldExhYmVscygpLmFkZChyZXRWYWx1ZSk7CisJCXJldHVybiByZXRWYWx1ZTsKKwl9IC8vIGNyZWF0ZUFyZWFMYWJlbAorCisJLyoqCisJICogQHBhcmFtIHBvcHVsYXRpb25Db3VudAorCSAqICAgICAgICAgICAgbnVtYmVyIG9mIChEZWZhdWx0OiBodW1hbikgcG9wdWxhdGlvbiBtZW1iZXJzIGF0IHRoZSBub2RlCisJICogQHBhcmFtIG5vZGUKKwkgKiAgICAgICAgICAgIHRoZSBub2RlCisJICogQHJldHVybiBhIHBvcHVsYXRpb24gbGFiZWwKKwkgKi8KKwlwcml2YXRlIHN0YXRpYyBQb3B1bGF0aW9uTGFiZWwgY3JlYXRlUG9wdWxhdGlvbkxhYmVsKAorCQkJZmluYWwgU3RyaW5nIHBvcHVsYXRpb25JZGVudGlmaWVyLCBmaW5hbCBkb3VibGUgcG9wdWxhdGlvbkNvdW50LAorCQkJZmluYWwgTm9kZSBub2RlKSB7CisJCWZpbmFsIFBvcHVsYXRpb25MYWJlbCByZXRWYWx1ZSA9IExhYmVsc0ZhY3RvcnkuZUlOU1RBTkNFCisJCQkJLmNyZWF0ZVBvcHVsYXRpb25MYWJlbCgpOworCQlyZXRWYWx1ZS5zZXRQb3B1bGF0aW9uSWRlbnRpZmllcihwb3B1bGF0aW9uSWRlbnRpZmllcik7CisJCXJldFZhbHVlLmdldEN1cnJlbnRQb3B1bGF0aW9uVmFsdWUoKS5zZXRDb3VudChwb3B1bGF0aW9uQ291bnQpOworCQlub2RlLmdldExhYmVscygpLmFkZChyZXRWYWx1ZSk7CisJCXJldHVybiByZXRWYWx1ZTsKKwl9IC8vIGNyZWF0ZVBvcHVsYXRpb25MYWJlbAorCisJLyoqCisJICogQ3JlYXRlIGEgc2luZ2xlIHBvcHVsYXRlZCBub2RlLiBUaGlzIGlzIHVzZWQgYnkgdGhlIEpVbml0IHRlc3RzIGZvcgorCSAqIGRpc2Vhc2UgbW9kZWxzIHdoaWNoIG5lZWQgdG8gaGF2ZSBhIGRpc2Vhc2UgbW9kZWwgbGFiZWwgdGhhdCBoYXMgYW4KKwkgKiBhc3NvY2lhdGVkIG5vZGUuCisJICogCisJICogCisJICogQHJldHVybiBhIG5vZGUKKwkgKi8KKwlwdWJsaWMgc3RhdGljIFJlZ2lvbiBjcmVhdGVQb3B1bGF0aW9uUmVnaW9uTm9kZSgpIHsKKwkJcmV0dXJuIGNyZWF0ZVBvcHVsYXRpb25SZWdpb25Ob2RlKFRFU1RfUE9QVUxBVElPTl9JREVOVElGSUVSKTsKKwl9IC8vIGNyZWF0ZVBvcHVsYXRpb25SZWdpb25Ob2RlCisKKwkvKioKKwkgKiBDcmVhdGUgYSBzaW5nbGUgcG9wdWxhdGVkIG5vZGUuIFRoaXMgaXMgdXNlZCBieSB0aGUgSlVuaXQgdGVzdHMgZm9yCisJICogZGlzZWFzZSBtb2RlbHMgd2hpY2ggbmVlZCB0byBoYXZlIGEgZGlzZWFzZSBtb2RlbCBsYWJlbCB0aGF0IGhhcyBhbgorCSAqIGFzc29jaWF0ZWQgbm9kZS4KKwkgKiAKKwkgKiBAcGFyYW0gcG9wdWxhdGlvbklkZW50aWZpZXIKKwkgKiAgICAgICAgICAgIHRoZSBpZGVudGlmaWVyIG9mIHRoZSBwb3B1bGF0aW9uCisJICogCisJICogCisJICogQHJldHVybiBhIG5vZGUKKwkgKi8KKwlwdWJsaWMgc3RhdGljIFJlZ2lvbiBjcmVhdGVQb3B1bGF0aW9uUmVnaW9uTm9kZSgKKwkJCWZpbmFsIFN0cmluZyBwb3B1bGF0aW9uSWRlbnRpZmllcikgeworCQlyZXR1cm4gY3JlYXRlUG9wdWxhdGlvblJlZ2lvbk5vZGUocG9wdWxhdGlvbklkZW50aWZpZXIsCisJCQkJVEVTVF9QT1BVTEFUSU9OX0NPVU5ULCBURVNUX0FSRUEpOworCX0gLy8gY3JlYXRlUG9wdWxhdGlvblJlZ2lvbk5vZGUKKworCS8qKgorCSAqIENyZWF0ZSBhIHNpbmdsZSBwb3B1bGF0ZWQgbm9kZS4gVGhpcyBpcyB1c2VkIGJ5IHRoZSBKVW5pdCB0ZXN0cyBmb3IKKwkgKiBkaXNlYXNlIG1vZGVscyB3aGljaCBuZWVkIHRvIGhhdmUgYSBkaXNlYXNlIG1vZGVsIGxhYmVsIHRoYXQgaGFzIGFuCisJICogYXNzb2NpYXRlZCBub2RlLgorCSAqIAorCSAqIEBwYXJhbSBwb3B1bGF0aW9uSWRlbnRpZmllcgorCSAqICAgICAgICAgICAgdGhlIGlkZW50aWZpZXIgb2YgdGhlIHBvcHVsYXRpb24KKwkgKiAKKwkgKiBAcGFyYW0gcG9wdWxhdGlvbkNvdW50CisJICogICAgICAgICAgICB0aGUgbnVtYmVyIG9mIHBvcHVsYXRpb24gbWVtYmVycworCSAqIEBwYXJhbSBhcmVhCisJICogICAgICAgICAgICB0aGUgYXJlYSBvZiB0aGUgbm9kZSAoa21eMikKKwkgKiBAcmV0dXJuIGEgbm9kZQorCSAqLworCXB1YmxpYyBzdGF0aWMgUmVnaW9uIGNyZWF0ZVBvcHVsYXRpb25SZWdpb25Ob2RlKAorCQkJZmluYWwgU3RyaW5nIHBvcHVsYXRpb25JZGVudGlmaWVyLCBmaW5hbCBkb3VibGUgcG9wdWxhdGlvbkNvdW50LAorCQkJZmluYWwgZG91YmxlIGFyZWEpIHsKKwkJcmV0dXJuIGNyZWF0ZVBvcHVsYXRpb25SZWdpb25Ob2RlKDAsIDAsIHBvcHVsYXRpb25JZGVudGlmaWVyLAorCQkJCXBvcHVsYXRpb25Db3VudCwgYXJlYSk7CisJfSAvLyBjcmVhdGVQb3B1bGF0aW9uUmVnaW9uTm9kZQorCisJLyoqCisJICogQ3JlYXRlIGEgc2luZ2xlIHBvcHVsYXRlZCBub2RlLiBUaGlzIGlzIHVzZWQgYnkgdGhlIEpVbml0IHRlc3RzIGZvcgorCSAqIGRpc2Vhc2UgbW9kZWxzIHdoaWNoIG5lZWQgdG8gaGF2ZSBhIGRpc2Vhc2UgbW9kZWwgbGFiZWwgdGhhdCBoYXMgYW4KKwkgKiBhc3NvY2lhdGVkIG5vZGUuCisJICogCisJICogQHBhcmFtIHJvdworCSAqICAgICAgICAgICAgdGhlIHJvdyBpbmRleCBvZiB0aGUgbm9kZQorCSAqIEBwYXJhbSBjb2x1bW4KKwkgKiAgICAgICAgICAgIHRoZSBjb2x1bW4gaW5kZXggb2YgdGhlIG5vZGUKKwkgKiBAcGFyYW0gcG9wdWxhdGlvbklkZW50aWZpZXIKKwkgKiAgICAgICAgICAgIHRoZSBpZGVudGlmaWVyIG9mIHRoZSBwb3B1bGF0aW9uCisJICogQHBhcmFtIHBvcHVsYXRpb25Db3VudAorCSAqICAgICAgICAgICAgdGhlIG51bWJlciBvZiBwb3B1bGF0aW9uIG1lbWJlcnMKKwkgKiBAcGFyYW0gYXJlYQorCSAqICAgICAgICAgICAgdGhlIGFyZWEgb2YgdGhlIG5vZGUgKGttXjIpCisJICogQHJldHVybiBhIG5vZGUKKwkgKi8KKwlwdWJsaWMgc3RhdGljIFJlZ2lvbiBjcmVhdGVQb3B1bGF0aW9uUmVnaW9uTm9kZShmaW5hbCBpbnQgcm93LAorCQkJZmluYWwgaW50IGNvbHVtbiwgZmluYWwgU3RyaW5nIHBvcHVsYXRpb25JZGVudGlmaWVyLAorCQkJZmluYWwgZG91YmxlIHBvcHVsYXRpb25Db3VudCwgZmluYWwgZG91YmxlIGFyZWEpIHsKKwkJZmluYWwgUmVnaW9uIHJldFZhbHVlID0gY3JlYXRlUmVnaW9uTm9kZShyb3csIGNvbHVtbik7CisKKwkJLy8gUG9wdWxhdGlvbgorCQljcmVhdGVQb3B1bGF0aW9uTGFiZWwocG9wdWxhdGlvbklkZW50aWZpZXIsIHBvcHVsYXRpb25Db3VudCwgcmV0VmFsdWUpOworCisJCS8vIEFyZWEKKwkJY3JlYXRlQXJlYUxhYmVsKGFyZWEsIHJldFZhbHVlKTsKKwkJcmV0dXJuIHJldFZhbHVlOworCX0gLy8gY3JlYXRlUG9wdWxhdGlvblJlZ2lvbk5vZGUKKworCS8qKgorCSAqIEBwYXJhbSByb3cKKwkgKiAgICAgICAgICAgIHRoZSByb3cgb2YgdGhlIG5vZGUgaW4gdGhlIGxhdHRpY2UKKwkgKiBAcGFyYW0gY29sdW1uCisJICogICAgICAgICAgICB0aGUgY29sdW1uIG9mIHRoZSBub2RlIGluIHRoZSBsYXR0aWNlCisJICogQHJldHVybiBhIG5vZGUKKwkgKi8KKwlwcml2YXRlIHN0YXRpYyBSZWdpb24gY3JlYXRlUmVnaW9uTm9kZShpbnQgcm93LCBpbnQgY29sdW1uKSB7CisJCWZpbmFsIFJlZ2lvbiByZXRWYWx1ZSA9IE5vZGVzRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlUmVnaW9uKCk7CisKKwkJZmluYWwgRHVibGluQ29yZSBkYyA9IHJldFZhbHVlLmdldER1YmxpbkNvcmUoKTsKKwkJZGMuc2V0VGl0bGUoY3JlYXRlTm9kZVRpdGxlKHJvdywgY29sdW1uKSk7CisJCXJldFZhbHVlLnNldFVSSShjcmVhdGVSZWdpb25Ob2RlVVJJKHJvdywgY29sdW1uKSk7CisJCXJldHVybiByZXRWYWx1ZTsKKwl9IC8vIGNyZWF0ZVJlZ2lvbk5vZGUKKworCS8qKgorCSAqIEBwYXJhbSByb3cKKwkgKiAgICAgICAgICAgIHRoZSByb3cgb2YgdGhlIHJlZ2lvbiBpbiB0aGUgbGF0dGljZQorCSAqIEBwYXJhbSBjb2x1bW4KKwkgKiAgICAgICAgICAgIHRoZSBjb2x1bW4gb2YgdGhlIHJlZ2lvbiBpbiB0aGUgbGF0dGljZQorCSAqIEByZXR1cm4gYSBVUkkgZm9yIHRoZSByZWdpb24gbm9kZQorCSAqLworCXB1YmxpYyBzdGF0aWMgVVJJIGNyZWF0ZVJlZ2lvbk5vZGVVUkkoaW50IHJvdywgaW50IGNvbHVtbikgeworCQlVUkkgcmV0VmFsdWUgPSBTVEVNVVJJLmNyZWF0ZVVSSShSZWdpb24uVVJJX1RZUEVfUkVHSU9OX05PREVfU0VHTUVOVAorCQkJCSsgIi8iICsgcm93ICsgIl8iICsgY29sdW1uKTsKKwkJcmV0dXJuIHJldFZhbHVlOworCX0gLy8gY3JlYXRlUmVnaW9uTm9kZVVSSQorCisJLyoqCisJICogQHBhcmFtIHJvdworCSAqICAgICAgICAgICAgdGhlIHJvdyBvZiB0aGUgbm9kZSBpbiB0aGUgbGF0dGljZQorCSAqIEBwYXJhbSBjb2x1bW4KKwkgKiAgICAgICAgICAgIHRoZSBjb2x1bW4gb2YgdGhlIG5vZGUgaW4gdGhlIGxhdHRpY2UKKwkgKiBAcmV0dXJuIGEgdGl0bGUgZm9yIGEgbm9kZQorCSAqLworCXB1YmxpYyBzdGF0aWMgU3RyaW5nIGNyZWF0ZU5vZGVUaXRsZShpbnQgcm93LCBpbnQgY29sdW1uKSB7CisJCWZpbmFsIFN0cmluZ0J1aWxkZXIgc2IgPSBuZXcgU3RyaW5nQnVpbGRlcigiTm9kZVsiKTsKKwkJc2IuYXBwZW5kKEludGVnZXIudG9TdHJpbmcocm93KSk7CisJCXNiLmFwcGVuZCgiLCAiKTsKKwkJc2IuYXBwZW5kKEludGVnZXIudG9TdHJpbmcoY29sdW1uKSk7CisJCXNiLmFwcGVuZCgiXSIpOworCQlyZXR1cm4gc2IudG9TdHJpbmcoKTsKKwl9IC8vIGNyZWF0ZU5vZGVUaXRsZQorCisJLyoqCisJICogQHBhcmFtIG51bVJvd3MKKwkgKiAgICAgICAgICAgIHRoZSBudW1iZXIgb2Ygcm93cyBvZiBub2RlcyBpbiB0aGUgbGF0dGljZQorCSAqIEBwYXJhbSBudW1Db2x1bW5zCisJICogICAgICAgICAgICB0aGUgbnVtYmVyIG9mIGNvbHVtbnMgb2Ygbm9kZXMgaW4gdGhlIGxhdHRpY2UKKwkgKiBAcGFyYW0gcG9wdWxhdGlvbkNvdW50CisJICogICAgICAgICAgICB0aGUgKERlZmF1bHQ6IGh1bWFuKSBwb3B1bGF0aW9uIGF0IGVhY2ggbm9kZQorCSAqIEBwYXJhbSBhcmVhCisJICogICAgICAgICAgICB0aGUgYXJlYSAoa21eMikgb2YgZWFjaCBub2RlCisJICogQHJldHVybiBhIHRpdGxlIGZvciBhIGdyYXBoCisJICovCisJcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIGNyZWF0ZUdyYXBoVGl0bGUoaW50IG51bVJvd3MsIGludCBudW1Db2x1bW5zLAorCQkJZG91YmxlIHBvcHVsYXRpb25Db3VudCwgZG91YmxlIGFyZWEpIHsKKwkJZmluYWwgU3RyaW5nQnVpbGRlciBzYiA9IG5ldyBTdHJpbmdCdWlsZGVyKCJHcmFwaCIpOworCQlzYi5hcHBlbmQoSW50ZWdlci50b1N0cmluZyhudW1Sb3dzKSk7CisJCXNiLmFwcGVuZCgieCIpOworCQlzYi5hcHBlbmQoSW50ZWdlci50b1N0cmluZyhudW1Db2x1bW5zKSk7CisJCXNiLmFwcGVuZCgiWyIpOworCQlzYi5hcHBlbmQoRG91YmxlLnRvU3RyaW5nKHBvcHVsYXRpb25Db3VudCkpOworCQlzYi5hcHBlbmQoIiwgIik7CisJCXNiLmFwcGVuZChhcmVhKTsKKwkJc2IuYXBwZW5kKCJdIik7CisJCXJldHVybiBzYi50b1N0cmluZygpOworCX0gLy8gY3JlYXRlR3JhcGhUaXRsZQorCisJLyoqCisJICogQHBhcmFtIG5vZGVEZWNvcmF0b3JzCisJICogQHBhcmFtIG51bVJvd3MKKwkgKiBAcGFyYW0gbnVtQ29sdW1ucworCSAqIEBwYXJhbSBwb3B1bGF0aW9uQ291bnQKKwkgKiBAcGFyYW0gYXJlYQorCSAqIEByZXR1cm4gdGhlIHRpdGxlIG9mIHRoZSBtb2RlbAorCSAqLworCXByaXZhdGUgc3RhdGljIFN0cmluZyBjcmVhdGVNb2RlbFRpdGxlKAorCQkJZmluYWwgQ29sbGVjdGlvbjxOb2RlRGVjb3JhdG9yPiBub2RlRGVjb3JhdG9ycywgaW50IG51bVJvd3MsCisJCQlpbnQgbnVtQ29sdW1ucywgZG91YmxlIHBvcHVsYXRpb25Db3VudCwgZG91YmxlIGFyZWEpIHsKKwkJZmluYWwgU3RyaW5nQnVpbGRlciBzYiA9IG5ldyBTdHJpbmdCdWlsZGVyKCJNb2RlbCIpOworCQlzYi5hcHBlbmQoSW50ZWdlci50b1N0cmluZyhudW1Sb3dzKSk7CisJCXNiLmFwcGVuZCgieCIpOworCQlzYi5hcHBlbmQoSW50ZWdlci50b1N0cmluZyhudW1Db2x1bW5zKSk7CisJCWZvciAoSXRlcmF0b3I8Tm9kZURlY29yYXRvcj4gbm9kZURlY29yYXRvckl0ZXIgPSBub2RlRGVjb3JhdG9ycworCQkJCS5pdGVyYXRvcigpOyBub2RlRGVjb3JhdG9ySXRlci5oYXNOZXh0KCk7KSB7CisJCQlmaW5hbCBOb2RlRGVjb3JhdG9yIG5vZGVEZWNvcmF0b3IgPSBub2RlRGVjb3JhdG9ySXRlci5uZXh0KCk7CisJCQlzYi5hcHBlbmQobm9kZURlY29yYXRvci5nZXREdWJsaW5Db3JlKCkuZ2V0VGl0bGUoKSk7CisJCX0gLy8gZm9yCisKKwkJc2IuYXBwZW5kKCJbIik7CisJCXNiLmFwcGVuZChEb3VibGUudG9TdHJpbmcocG9wdWxhdGlvbkNvdW50KSk7CisJCXNiLmFwcGVuZCgiLCAiKTsKKwkJc2IuYXBwZW5kKGFyZWEpOworCQlzYi5hcHBlbmQoIl0iKTsKKwkJcmV0dXJuIHNiLnRvU3RyaW5nKCk7CisJfSAvLyBjcmVhdGVNb2RlbFRpdGxlCisKKwkKKworCQorCS8qKgorCSAqIEBwYXJhbSBncmFwaAorCSAqIEBwYXJhbSByb3cKKwkgKiBAcGFyYW0gY29sdW1uCisJICogQHJldHVybiB0aGUgaW5kZXhlZCByZWdpb24gZnJvbSB0aGUgZ3JhcGgKKwkgKi8KKwlwdWJsaWMgc3RhdGljIFJlZ2lvbiBnZXRSZWdpb24oZmluYWwgR3JhcGggZ3JhcGgsIGZpbmFsIGludCByb3csCisJCQlmaW5hbCBpbnQgY29sdW1uKSB7CisJCVJlZ2lvbiByZXRWYWx1ZSA9IG51bGw7CisKKwkJZm9yIChJdGVyYXRvcjxOb2RlPiBub2RlSXRlciA9IGdyYXBoLmdldE5vZGVzKCkudmFsdWVzKCkuaXRlcmF0b3IoKTsgbm9kZUl0ZXIKKwkJCQkuaGFzTmV4dCgpOykgeworCQkJZmluYWwgUmVnaW9uIHJlZ2lvbiA9IChSZWdpb24pIG5vZGVJdGVyLm5leHQoKTsKKwkJCWZpbmFsIFN0cmluZyBuYW1lID0gcmVnaW9uLmdldER1YmxpbkNvcmUoKS5nZXRUaXRsZSgpOworCQkJLy8gSXMgdGhpcyB0aGUgcmVnaW9uIHdlJ3JlIGxvb2tpbmcgZm9yPworCQkJaWYgKG5hbWUuZXF1YWxzKEdhdXNzaWFuRGlzZWFzZU1vZGVsVGVzdFV0aWwuY3JlYXRlTm9kZVRpdGxlKHJvdywgY29sdW1uKSkpIHsKKwkJCQkvLyBZZXMKKwkJCQlyZXRWYWx1ZSA9IHJlZ2lvbjsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCQlyZXR1cm4gcmV0VmFsdWU7CisJfSAvLyBnZXRSZWdpb24KKworCS8qKgorCSAqIEV4YW1pbmUgdGhlIHRyYW5zcG9ydGF0aW9uIGVkZ2VzIGNvbWluZyBpbnRvIG5vZGVBIGZyb20gbm9kZUIgYW5kIHJldHVybgorCSAqIHRoZSBvbmUgd2l0aCB0aGUgc3BlY2lmaWVkIGlkZW50aWZpZXIuCisJICogCisJICogQHBhcmFtIG5vZGVBCisJICogQHBhcmFtIG5vZGVCCisJICogQHBhcmFtIHRyYW5zcG9ydElkCisJICogQHJldHVybiB0aGUgdHJhbnNwb3J0YXRpb24gZWRnZSBiZXR3ZWVuIHR3byBub2RlcyB3aXRoIGEgc3BlY2lmaWMKKwkgKiAgICAgICAgIHRyYW5zcG9ydCBpZAorCSAqLworCXB1YmxpYyBzdGF0aWMgRWRnZSBnZXRUcmFuc3BvcnRFZGdlKGZpbmFsIE5vZGUgbm9kZUEsIGZpbmFsIE5vZGUgbm9kZUIsCisJCQlmaW5hbCBTdHJpbmcgdHJhbnNwb3J0SWQpIHsKKwkJRWRnZSByZXRWYWx1ZSA9IG51bGw7CisKKwkJZm9yIChFZGdlIHRyYW5zcG9ydEVkZ2UgOiBUcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbEltcGwKKwkJCQkuZ2V0VHJhbnNwb3J0RWRnZXNUb05vZGUobm9kZUEsCisJCQkJCQlHYXVzc2lhbkRpc2Vhc2VNb2RlbFRlc3RVdGlsLlRFU1RfUE9QVUxBVElPTl9JREVOVElGSUVSKSkgeworCQkJLy8gSXMgdGhpcyBlZGdlIGZyb20gbm9kZUI/CisJCQlpZiAodHJhbnNwb3J0RWRnZS5nZXRPdGhlck5vZGUobm9kZUEpID09IG5vZGVCKSB7CisJCQkJLy8gWWVzCisJCQkJZmluYWwgVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWwgdHJsID0gKFRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsKSB0cmFuc3BvcnRFZGdlCisJCQkJCQkuZ2V0TGFiZWwoKTsKKwkJCQkvLyBEb2VzIHRoaXMgZWRnZSBoYXZlIHRoZSB0cmFuc3BvcnQgaWQgd2UncmUgbG9va2luZyBmb3I/CisJCQkJaWYgKHRybC5nZXRUcmFuc3BvcnRJZGVudGlmaWVyKCkuZXF1YWxzSWdub3JlQ2FzZSh0cmFuc3BvcnRJZCkpIHsKKwkJCQkJLy8gWWVzCisJCQkJCXJldFZhbHVlID0gdHJhbnNwb3J0RWRnZTsKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJfQorCQl9IC8vIGZvciBlYWNoIHRyYW5zcG9ydCBlZGdlCisJCXJldHVybiByZXRWYWx1ZTsKKwl9IC8vIGdldFRyYW5zcG9ydEVkZ2UKKwkKKwkvKioKKwkgKiBAcmV0dXJuIGFuIFNJTGFiZWwgaW5zdGFuY2UKKwkgKi8KKwlwdWJsaWMgc3RhdGljIFNJUkxhYmVsIGNyZWF0ZUxhYmVsKCkgeworCQlmaW5hbCBTSVJMYWJlbCByZXRWYWx1ZSA9IFN0YW5kYXJkRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlU0lSTGFiZWwoKTsKKwkJZmluYWwgUmVnaW9uIG5vZGUgPSBHYXVzc2lhbkRpc2Vhc2VNb2RlbFRlc3RVdGlsLmNyZWF0ZVBvcHVsYXRpb25SZWdpb25Ob2RlKEdhdXNzaWFuRGlzZWFzZU1vZGVsVGVzdFV0aWwuVEVTVF9QT1BVTEFUSU9OX0lERU5USUZJRVIpOworCisJCWxhYmVsUmVnaW9uKHJldFZhbHVlLEdhdXNzaWFuRGlzZWFzZU1vZGVsVGVzdFV0aWwuVEVTVF9QT1BVTEFUSU9OX0lERU5USUZJRVIsIG5vZGUpOworCQlyZXR1cm4gcmV0VmFsdWU7CQorCX0gLy8gY3JlYXRlTGFiZWwoKSAKKworCS8qKgorCSAqIAorCSAqIEBwYXJhbSBkaXNlYXNlTGFiZWwKKwkgKiBAcGFyYW0gcG9wdWxhdGlvbklkZW50aWZpZXIKKwkgKiBAcGFyYW0gcmVnaW9uCisJICovCisJcHJvdGVjdGVkIHN0YXRpYyB2b2lkIGxhYmVsUmVnaW9uKGZpbmFsIERpc2Vhc2VNb2RlbExhYmVsIGRpc2Vhc2VMYWJlbCwKKwkJCWZpbmFsIFN0cmluZyBwb3B1bGF0aW9uSWRlbnRpZmllciwgZmluYWwgUmVnaW9uIHJlZ2lvbikgeworCQlkaXNlYXNlTGFiZWwuc2V0VVJJT2ZJZGVudGlmaWFibGVUb0JlTGFiZWxlZChyZWdpb24uZ2V0VVJJKCkpOworCQlmaW5hbCBQb3B1bGF0aW9uTGFiZWwgcG9wdWxhdGlvbkxhYmVsID0gUG9wdWxhdGlvbkxhYmVsSW1wbAorCQkJCS5nZXRQb3B1bGF0aW9uTGFiZWwocG9wdWxhdGlvbklkZW50aWZpZXIsIHJlZ2lvbik7CisJCWRpc2Vhc2VMYWJlbC5zZXRQb3B1bGF0aW9uTGFiZWwocG9wdWxhdGlvbkxhYmVsKTsKKwkJcmVnaW9uLmdldExhYmVscygpLmFkZChkaXNlYXNlTGFiZWwpOworCX0gLy8gbGFiZWxSZWdpb24KKworfSAvLyBEaXNlYXNlTW9kZWxUZXN0VXRpbApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kaXNlYXNlbW9kZWxzLmZvcmNpbmcvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9mb3JjaW5nL3Rlc3RzL0dhdXNzaWFuRm9yY2luZ0Rpc2Vhc2VNb2RlbFRlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGlzZWFzZW1vZGVscy5mb3JjaW5nL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvZm9yY2luZy90ZXN0cy9HYXVzc2lhbkZvcmNpbmdEaXNlYXNlTW9kZWxUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWQwNjBlYwotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGlzZWFzZW1vZGVscy5mb3JjaW5nL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvZm9yY2luZy90ZXN0cy9HYXVzc2lhbkZvcmNpbmdEaXNlYXNlTW9kZWxUZXN0LmphdmEKQEAgLTAsMCArMSwxNzMgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmZvcmNpbmcudGVzdHM7CisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDEwIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKK2ltcG9ydCBqdW5pdC50ZXh0dWkuVGVzdFJ1bm5lcjsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5VUkk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLlNURU1VUkk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5EdWJsaW5Db3JlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5mb3JjaW5nLkZvcmNpbmdGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5mb3JjaW5nLkdhdXNzaWFuRm9yY2luZ0Rpc2Vhc2VNb2RlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuQWdncmVnYXRpbmdTSURpc2Vhc2VNb2RlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuRGlzZWFzZU1vZGVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5EaXNlYXNlTW9kZWxMYWJlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuSW5mZWN0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkUGFja2FnZTsKKworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiBBIHRlc3QgY2FzZSBmb3IgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPkdhdXNzaWFuIEZvcmNpbmcgRGlzZWFzZSBNb2RlbDwvYj48L2VtPicuCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIEdhdXNzaWFuRm9yY2luZ0Rpc2Vhc2VNb2RlbFRlc3QgZXh0ZW5kcyBUZXN0Q2FzZSB7CisJCisJcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgRElTRUFTRV9JREVOVElGSUVSPSJHYXVzc2lhbkZvcmNpbmdEaXNlYXNlTW9kZWwiOworCXB1YmxpYyBzdGF0aWMgZmluYWwgVVJJIERJU0VBU0VfVVJJID0gU1RFTVVSSS5jcmVhdGVVUkkoImRpc2Vhc2Vtb2RlbCIgKyAiLyIgKyBESVNFQVNFX0lERU5USUZJRVIpOworCQorCQorCisJLyoqCisJICogVGhlIGZpeHR1cmUgZm9yIHRoaXMgR2F1c3NpYW4gRm9yY2luZyBEaXNlYXNlIE1vZGVsIHRlc3QgY2FzZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgR2F1c3NpYW5Gb3JjaW5nRGlzZWFzZU1vZGVsIGZpeHR1cmUgPSBudWxsOworCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgeworCQlUZXN0UnVubmVyLnJ1bihHYXVzc2lhbkZvcmNpbmdEaXNlYXNlTW9kZWxUZXN0LmNsYXNzKTsKKwl9CisKKwkvKioKKwkgKiBDb25zdHJ1Y3RzIGEgbmV3IEdhdXNzaWFuIEZvcmNpbmcgRGlzZWFzZSBNb2RlbCB0ZXN0IGNhc2Ugd2l0aCB0aGUgZ2l2ZW4gbmFtZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgR2F1c3NpYW5Gb3JjaW5nRGlzZWFzZU1vZGVsVGVzdChTdHJpbmcgbmFtZSkgeworCQlzdXBlcihuYW1lKTsKKwl9CisKKwkvKioKKwkgKiBTZXRzIHRoZSBmaXh0dXJlIGZvciB0aGlzIEdhdXNzaWFuIEZvcmNpbmcgRGlzZWFzZSBNb2RlbCB0ZXN0IGNhc2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgc2V0Rml4dHVyZShHYXVzc2lhbkZvcmNpbmdEaXNlYXNlTW9kZWwgZml4dHVyZSkgeworCQl0aGlzLmZpeHR1cmUgPSBmaXh0dXJlOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIGZpeHR1cmUgZm9yIHRoaXMgR2F1c3NpYW4gRm9yY2luZyBEaXNlYXNlIE1vZGVsIHRlc3QgY2FzZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgR2F1c3NpYW5Gb3JjaW5nRGlzZWFzZU1vZGVsIGdldEZpeHR1cmUoKSB7CisJCXJldHVybiBmaXh0dXJlOworCX0KKwkKKwkvKioKKwkgKiBDcmVhdGUgZGlzZWFzZSBtb2RlbCBpbnN0YW5jZQorCSAqIAorCSAqIEByZXR1cm4gYSBkaXNlYXNlIG1vZGVsIGluc3RhbmNlIGZvciB0ZXN0IHB1cnBvc2VzCisJICovCisJcHVibGljIHN0YXRpYyBHYXVzc2lhbkZvcmNpbmdEaXNlYXNlTW9kZWwgY3JlYXRlRml4dHVyZSgpIHsKKwkJR2F1c3NpYW5Gb3JjaW5nRGlzZWFzZU1vZGVsIGRpc2Vhc2VNb2RlbCA9IEZvcmNpbmdGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVHYXVzc2lhbkZvcmNpbmdEaXNlYXNlTW9kZWwoKTsKKwkJZGlzZWFzZU1vZGVsLnNldERpc2Vhc2VOYW1lKERJU0VBU0VfSURFTlRJRklFUik7CisJCWRpc2Vhc2VNb2RlbC5zZXRJbmZlY3Rpb3VzTW9ydGFsaXR5UmF0ZShHYXVzc2lhbkRpc2Vhc2VNb2RlbFRlc3RVdGlsLk1PUlRBTElUWV9SQVRFKTsKKwkJZGlzZWFzZU1vZGVsLnNldE1vZHVsYXRpb25GbG9vcihHYXVzc2lhbkRpc2Vhc2VNb2RlbFRlc3RVdGlsLk1PRFVMQVRJT05fRkxPVVIpOworCQlkaXNlYXNlTW9kZWwuc2V0SW1tdW5pdHlMb3NzUmF0ZShHYXVzc2lhbkRpc2Vhc2VNb2RlbFRlc3RVdGlsLklNTVVOSVRZX0xPU1NfUkFURSk7CisJCWRpc2Vhc2VNb2RlbC5zZXRUcmFuc21pc3Npb25SYXRlKEdhdXNzaWFuRGlzZWFzZU1vZGVsVGVzdFV0aWwuVFJBTlNNSVNTSU9OX1JBVEUpOworCQlkaXNlYXNlTW9kZWwuc2V0UmVjb3ZlcnlSYXRlKEdhdXNzaWFuRGlzZWFzZU1vZGVsVGVzdFV0aWwuUkVDT1ZFUllfUkFURSk7CisJCWRpc2Vhc2VNb2RlbC5zZXRUaW1lUGVyaW9kKEdhdXNzaWFuRGlzZWFzZU1vZGVsVGVzdFV0aWwuVElNRV9QRVJJT0QpOworCQlkaXNlYXNlTW9kZWwuc2V0UG9wdWxhdGlvbklkZW50aWZpZXIoR2F1c3NpYW5EaXNlYXNlTW9kZWxUZXN0VXRpbC5URVNUX1BPUFVMQVRJT05fSURFTlRJRklFUik7CisKKwkJCisJCWZpbmFsIER1YmxpbkNvcmUgZGMgPSBkaXNlYXNlTW9kZWwuZ2V0RHVibGluQ29yZSgpOworCQlkaXNlYXNlTW9kZWwuc2V0VVJJKERJU0VBU0VfVVJJKTsKKwkJZGMuc2V0SWRlbnRpZmllcihkaXNlYXNlTW9kZWwuZ2V0VVJJKCkudG9TdHJpbmcoKSk7CisJCXJldHVybiBkaXNlYXNlTW9kZWw7CisJfSAvLyBjcmVhdGVGaXh0dXJlCisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlI3NldFVwKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgc2V0VXAoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJc2V0Rml4dHVyZShGb3JjaW5nRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlR2F1c3NpYW5Gb3JjaW5nRGlzZWFzZU1vZGVsKCkpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2UjdGVhckRvd24oKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgdm9pZCB0ZWFyRG93bigpIHRocm93cyBFeGNlcHRpb24geworCQlzZXRGaXh0dXJlKG51bGwpOworCX0KKwkKKwkvKioKKwkgKiBUZXN0cyB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuRGlzZWFzZU1vZGVsI2NyZWF0ZURpc2Vhc2VNb2RlbExhYmVsKCkgPGVtPkNyZWF0ZSBEaXNlYXNlIE1vZGVsIExhYmVsPC9lbT59JworCSAqIG9wZXJhdGlvbi4gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuRGlzZWFzZU1vZGVsI2NyZWF0ZURpc2Vhc2VNb2RlbExhYmVsKCkKKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCXB1YmxpYyB2b2lkIHRlc3RDcmVhdGVEaXNlYXNlTW9kZWxMYWJlbCgpIHsKKwkJZmluYWwgRGlzZWFzZU1vZGVsIGRpc2Vhc2VNb2RlbCA9IGdldEZpeHR1cmUoKTsKKwkJaWYgKCEoZGlzZWFzZU1vZGVsIGluc3RhbmNlb2YgQWdncmVnYXRpbmdTSURpc2Vhc2VNb2RlbCkpIHsKKwkJZmluYWwgRGlzZWFzZU1vZGVsTGFiZWwgZG1sID0gZGlzZWFzZU1vZGVsLmNyZWF0ZURpc2Vhc2VNb2RlbExhYmVsKGRpc2Vhc2VNb2RlbC5nZXRQb3B1bGF0aW9uSWRlbnRpZmllcigpKTsKKwkJCisJCWFzc2VydFRydWUoZG1sLmVDbGFzcygpLmVxdWFscyhTdGFuZGFyZFBhY2thZ2UuZUlOU1RBTkNFLmdldFNJUkxhYmVsKCkpKTsKKwkJfQorCX0gLy8gdGVzdENyZWF0ZURpc2Vhc2VNb2RlbExhYmVsCisKKwkKKworCS8qKgorCSAqIFRlc3RzIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5EaXNlYXNlTW9kZWwjY3JlYXRlSW5mZWN0b3IoKSA8ZW0+Q3JlYXRlIEluZmVjdG9yPC9lbT59JworCSAqIG9wZXJhdGlvbi4gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuRGlzZWFzZU1vZGVsI2NyZWF0ZUluZmVjdG9yKCkKKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCXB1YmxpYyB2b2lkIHRlc3RDcmVhdGVJbmZlY3RvcigpIHsKKwkJZmluYWwgRGlzZWFzZU1vZGVsIGRpc2Vhc2VNb2RlbCA9IGdldEZpeHR1cmUoKTsKKwkJaWYgKCEoZGlzZWFzZU1vZGVsIGluc3RhbmNlb2YgQWdncmVnYXRpbmdTSURpc2Vhc2VNb2RlbCkpIHsKKwkJCWZpbmFsIEluZmVjdG9yIGluZmVjdG9yID0gZGlzZWFzZU1vZGVsLmNyZWF0ZUluZmVjdG9yKCk7CisJCQlhc3NlcnROb3ROdWxsKGluZmVjdG9yKTsKKwkJCWFzc2VydFRydWUoaW5mZWN0b3IuZ2V0RGlzZWFzZU5hbWUoKS5lcXVhbHMoCisJCQkJCWZpeHR1cmUuZ2V0RGlzZWFzZU5hbWUoKSkpOworCQkJYXNzZXJ0VHJ1ZShpbmZlY3Rvci5nZXRQb3B1bGF0aW9uSWRlbnRpZmllcigpLmVxdWFsc0lnbm9yZUNhc2UoCisJCQkJCWZpeHR1cmUuZ2V0UG9wdWxhdGlvbklkZW50aWZpZXIoKSkpOworCQl9CisKKwl9IC8vIHRlc3RDcmVhdGVJbmZlY3RvcgorCisJCisKK30gLy9HYXVzc2lhbkZvcmNpbmdEaXNlYXNlTW9kZWxUZXN0CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRpc2Vhc2Vtb2RlbHMuZm9yY2luZy90ZXN0LnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGlzZWFzZW1vZGVscy5mb3JjaW5nL3Rlc3QueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY4M2E2YTQKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRpc2Vhc2Vtb2RlbHMuZm9yY2luZy90ZXN0LnhtbApAQCAtMCwwICsxLDUzIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorCis8cHJvamVjdCBuYW1lPSJ0ZXN0c3VpdGUiIGRlZmF1bHQ9InJ1biIgYmFzZWRpcj0iLiI+CisgIDwhLS0gVGhlIHByb3BlcnR5ICR7ZWNsaXBzZS1ob21lfSBzaG91bGQgYmUgcGFzc2VkIGludG8gdGhpcyBzY3JpcHQgLS0+CisgIDwhLS0gU2V0IGEgbWVhbmluZ2Z1bCBkZWZhdWx0IHZhbHVlIGZvciB3aGVuIGl0IGlzIG5vdC4gLS0+CisgIDxwcm9wZXJ0eSBuYW1lPSJlY2xpcHNlLWhvbWUiIHZhbHVlPSIiLz4KKworCisgIDwhLS0gc2V0cyB0aGUgcHJvcGVydGllcyBlY2xpcHNlLWhvbWUsIGFuZCBsaWJyYXJ5LWZpbGUgLS0+CisgIDxwcm9wZXJ0eSBuYW1lPSJwbHVnaW4tbmFtZSIgdmFsdWU9Im9yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGlzZWFzZW1vZGVscy5mb3JjaW5nIi8+CisgIDxwcm9wZXJ0eSBuYW1lPSJsaWJyYXJ5LWZpbGUiCisgICAgICAgICAgICB2YWx1ZT0iJHtlY2xpcHNlLWhvbWV9L3BsdWdpbnMvb3JnLmVjbGlwc2UudGVzdF8zLjMuMC9saWJyYXJ5LnhtbCIvPgorCisgIDwhLS0gVGhpcyB0YXJnZXQgaG9sZHMgYWxsIGluaXRpYWxpemF0aW9uIGNvZGUgdGhhdCBuZWVkcyB0byBiZSBkb25lIGZvciAtLT4KKyAgPCEtLSBhbGwgdGVzdHMgdGhhdCBhcmUgdG8gYmUgcnVuLiBJbml0aWFsaXphdGlvbiBmb3IgaW5kaXZpZHVhbCB0ZXN0cyAtLT4KKyAgPCEtLSBzaG91bGQgYmUgZG9uZSB3aXRoaW4gdGhlIGJvZHkgb2YgdGhlIHN1aXRlIHRhcmdldC4gLS0+CisgIDx0YXJnZXQgbmFtZT0iaW5pdCI+CisgICAgPHRzdGFtcC8+CisgICAgPGRlbGV0ZT4KKyAgICAgIDxmaWxlc2V0IGRpcj0iJHtlY2xpcHNlLWhvbWV9IiBpbmNsdWRlcz0ib3JnKi54bWwiLz4KKyAgICA8L2RlbGV0ZT4KKyAgPC90YXJnZXQ+CisKKyAgPCEtLSBUaGlzIHRhcmdldCBkZWZpbmVzIHRoZSB0ZXN0cyB0aGF0IG5lZWQgdG8gYmUgcnVuLiAtLT4KKyAgPHRhcmdldCBuYW1lPSJzdWl0ZSI+CisgICAgPHByb3BlcnR5IG5hbWU9ImRhdGEtZGlyIiB2YWx1ZT0iJHtlY2xpcHNlLWhvbWV9L3dvcmtzcGFjZSIvPgorICAgIDxkZWxldGUgZGlyPSIke2RhdGEtZGlyfSIgcXVpZXQ9InRydWUiLz4KKyAgICA8YW50IHRhcmdldD0idWktdGVzdCIgYW50ZmlsZT0iJHtsaWJyYXJ5LWZpbGV9IiBkaXI9IiR7ZWNsaXBzZS1ob21lfSI+CisgICAgICA8cHJvcGVydHkgbmFtZT0iZGF0YS1kaXIiIHZhbHVlPSIke2RhdGEtZGlyfSIvPgorICAgICAgPHByb3BlcnR5IG5hbWU9InBsdWdpbi1uYW1lIiB2YWx1ZT0iJHtwbHVnaW4tbmFtZX0iLz4KKyAgICAgIDxwcm9wZXJ0eSBuYW1lPSJjbGFzc25hbWUiIHZhbHVlPSJvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZm9yY2luZy50ZXN0cy5Gb3JjaW5nQWxsVGVzdHMiLz4KKyAgICA8L2FudD4KKyAgPC90YXJnZXQ+CisKKyAgPCEtLSBUaGlzIHRhcmdldCBob2xkcyBjb2RlIHRvIGNsZWFudXAgdGhlIHRlc3RpbmcgZW52aXJvbm1lbnQgYWZ0ZXIgLS0+CisgIDwhLS0gYWZ0ZXIgYWxsIG9mIHRoZSB0ZXN0cyBoYXZlIGJlZW4gcnVuLiBZb3UgY2FuIHVzZSB0aGlzIHRhcmdldCB0byAtLT4KKyAgPCEtLSBkZWxldGUgdGVtcG9yYXJ5IGZpbGVzIHRoYXQgaGF2ZSBiZWVuIGNyZWF0ZWQuIC0tPgorICA8dGFyZ2V0IG5hbWU9ImNsZWFudXAiPgorICA8L3RhcmdldD4KKworICA8IS0tIFRoaXMgdGFyZ2V0IHJ1bnMgdGhlIHRlc3Qgc3VpdGUuIEFueSBhY3Rpb25zIHRoYXQgbmVlZCB0byBoYXBwZW4gLS0+CisgIDwhLS0gYWZ0ZXIgYWxsIHRoZSB0ZXN0cyBoYXZlIGJlZW4gcnVuIHNob3VsZCBnbyBoZXJlLiAtLT4KKyAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQsc3VpdGUsY2xlYW51cCI+CisgICAgPGFudCB0YXJnZXQ9ImNvbGxlY3QiIGFudGZpbGU9IiR7bGlicmFyeS1maWxlfSIgZGlyPSIke2VjbGlwc2UtaG9tZX0iPgorICAgICAgPHByb3BlcnR5IG5hbWU9ImluY2x1ZGVzIiB2YWx1ZT0ib3JnKi54bWwiLz4KKyAgICAgIDxwcm9wZXJ0eSBuYW1lPSJvdXRwdXQtZmlsZSIgdmFsdWU9IiR7cGx1Z2luLW5hbWV9LnhtbCIvPgorICAgIDwvYW50PgorICA8L3RhcmdldD4KKworICA8IS0tIFRoaXMgdGFyZ2V0IHJ1bnMgdGhlIHBlcmZvcm1hbmNlIHRlc3Qgc3VpdGVzLiAtLT4KKyAgPHRhcmdldCBuYW1lPSJwZXJmb3JtYW5jZSI+CisgIDwvdGFyZ2V0PgorPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kaXNlYXNlbW9kZWxzLmdsb2JhbGluZmx1ZW56YW1vZGVsLy5jbGFzc3BhdGggYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRpc2Vhc2Vtb2RlbHMuZ2xvYmFsaW5mbHVlbnphbW9kZWwvLmNsYXNzcGF0aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZDJiYzEyCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kaXNlYXNlbW9kZWxzLmdsb2JhbGluZmx1ZW56YW1vZGVsLy5jbGFzc3BhdGgKQEAgLTAsMCArMSw3IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/Pg0KKzxjbGFzc3BhdGg+DQorCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJzcmMiIHBhdGg9InNyYyIvPg0KKwk8Y2xhc3NwYXRoZW50cnkga2luZD0iY29uIiBwYXRoPSJvcmcuZWNsaXBzZS5qZHQubGF1bmNoaW5nLkpSRV9DT05UQUlORVIvb3JnLmVjbGlwc2UuamR0LmludGVybmFsLmRlYnVnLnVpLmxhdW5jaGVyLlN0YW5kYXJkVk1UeXBlL0phdmFTRS0xLjYiLz4NCisJPGNsYXNzcGF0aGVudHJ5IGtpbmQ9ImNvbiIgcGF0aD0ib3JnLmVjbGlwc2UucGRlLmNvcmUucmVxdWlyZWRQbHVnaW5zIi8+DQorCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJvdXRwdXQiIHBhdGg9ImJpbiIvPg0KKzwvY2xhc3NwYXRoPg0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGlzZWFzZW1vZGVscy5nbG9iYWxpbmZsdWVuemFtb2RlbC8ucHJvamVjdCBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGlzZWFzZW1vZGVscy5nbG9iYWxpbmZsdWVuemFtb2RlbC8ucHJvamVjdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYjU0MTdkCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kaXNlYXNlbW9kZWxzLmdsb2JhbGluZmx1ZW56YW1vZGVsLy5wcm9qZWN0CkBAIC0wLDAgKzEsMjggQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+DQorPHByb2plY3REZXNjcmlwdGlvbj4NCisJPG5hbWU+b3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kaXNlYXNlbW9kZWxzLmdsb2JhbGluZmx1ZW56YW1vZGVsPC9uYW1lPg0KKwk8Y29tbWVudD48L2NvbW1lbnQ+DQorCTxwcm9qZWN0cz4NCisJPC9wcm9qZWN0cz4NCisJPGJ1aWxkU3BlYz4NCisJCTxidWlsZENvbW1hbmQ+DQorCQkJPG5hbWU+b3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YWJ1aWxkZXI8L25hbWU+DQorCQkJPGFyZ3VtZW50cz4NCisJCQk8L2FyZ3VtZW50cz4NCisJCTwvYnVpbGRDb21tYW5kPg0KKwkJPGJ1aWxkQ29tbWFuZD4NCisJCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuTWFuaWZlc3RCdWlsZGVyPC9uYW1lPg0KKwkJCTxhcmd1bWVudHM+DQorCQkJPC9hcmd1bWVudHM+DQorCQk8L2J1aWxkQ29tbWFuZD4NCisJCTxidWlsZENvbW1hbmQ+DQorCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLlNjaGVtYUJ1aWxkZXI8L25hbWU+DQorCQkJPGFyZ3VtZW50cz4NCisJCQk8L2FyZ3VtZW50cz4NCisJCTwvYnVpbGRDb21tYW5kPg0KKwk8L2J1aWxkU3BlYz4NCisJPG5hdHVyZXM+DQorCQk8bmF0dXJlPm9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFuYXR1cmU8L25hdHVyZT4NCisJCTxuYXR1cmU+b3JnLmVjbGlwc2UucGRlLlBsdWdpbk5hdHVyZTwvbmF0dXJlPg0KKwk8L25hdHVyZXM+DQorPC9wcm9qZWN0RGVzY3JpcHRpb24+DQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kaXNlYXNlbW9kZWxzLmdsb2JhbGluZmx1ZW56YW1vZGVsL01FVEEtSU5GL01BTklGRVNULk1GIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kaXNlYXNlbW9kZWxzLmdsb2JhbGluZmx1ZW56YW1vZGVsL01FVEEtSU5GL01BTklGRVNULk1GCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdiZTkyMGIKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRpc2Vhc2Vtb2RlbHMuZ2xvYmFsaW5mbHVlbnphbW9kZWwvTUVUQS1JTkYvTUFOSUZFU1QuTUYKQEAgLTAsMCArMSwyMCBAQAorTWFuaWZlc3QtVmVyc2lvbjogMS4wDQorQnVuZGxlLU1hbmlmZXN0VmVyc2lvbjogMg0KK0J1bmRsZS1OYW1lOiAlcGx1Z2luTmFtZQ0KK0J1bmRsZS1TeW1ib2xpY05hbWU6IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5nbG9iYWxpbmZsdWVuemFtb2RlbC50ZXN0cztzaW5nbGV0b246PXRydWUNCitCdW5kbGUtVmVyc2lvbjogMS4wLjANCitCdW5kbGUtQ2xhc3NQYXRoOiAuDQorQnVuZGxlLVZlbmRvcjogJXByb3ZpZGVyTmFtZQ0KK0J1bmRsZS1Mb2NhbGl6YXRpb246IHBsdWdpbg0KK0J1bmRsZS1SZXF1aXJlZEV4ZWN1dGlvbkVudmlyb25tZW50OiBKYXZhU0UtMS42DQorRXhwb3J0LVBhY2thZ2U6IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5nbG9iYWxpbmZsdWVuemFtb2RlbC50ZXN0cw0KK1JlcXVpcmUtQnVuZGxlOiBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUsDQorIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5nbG9iYWxpbmZsdWVuemFtb2RlbDt2aXNpYmlsaXR5Oj1yZWV4cG9ydCwNCisgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzO3Zpc2liaWxpdHk6PXJlZXhwb3J0LA0KKyBvcmcuZWNsaXBzZS5zdGVtLmNvcmU7dmlzaWJpbGl0eTo9cmVleHBvcnQsDQorIG9yZy5lY2xpcHNlLmVtZi5lY29yZTt2aXNpYmlsaXR5Oj1yZWV4cG9ydCwNCisgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9uczt2aXNpYmlsaXR5Oj1yZWV4cG9ydCwNCisgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzO3Zpc2liaWxpdHk6PXJlZXhwb3J0LA0KKyBvcmcuZWNsaXBzZS5lbWYuZWNvcmUueG1pO3Zpc2liaWxpdHk6PXJlZXhwb3J0LA0KKyBvcmcuanVuaXQ7dmlzaWJpbGl0eTo9cmVleHBvcnQNCitCdW5kbGUtQWN0aXZhdGlvblBvbGljeTogbGF6eQ0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGlzZWFzZW1vZGVscy5nbG9iYWxpbmZsdWVuemFtb2RlbC9idWlsZC5wcm9wZXJ0aWVzIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kaXNlYXNlbW9kZWxzLmdsb2JhbGluZmx1ZW56YW1vZGVsL2J1aWxkLnByb3BlcnRpZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTlkNjA5OAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGlzZWFzZW1vZGVscy5nbG9iYWxpbmZsdWVuemFtb2RlbC9idWlsZC5wcm9wZXJ0aWVzCkBAIC0wLDAgKzEsMTIgQEAKKw0KKyMgPGNvcHlyaWdodD4NCisjIDwvY29weXJpZ2h0Pg0KKyMNCisjICRJZCQNCisNCitiaW4uaW5jbHVkZXMgPSAuLFwNCisgICAgICAgICAgICAgICBNRVRBLUlORi8sXA0KKyAgICAgICAgICAgICAgIHBsdWdpbi5wcm9wZXJ0aWVzDQoramFycy5jb21waWxlLm9yZGVyID0gLg0KK3NvdXJjZS4uID0gc3JjLw0KK291dHB1dC4uID0gYmluLw0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGlzZWFzZW1vZGVscy5nbG9iYWxpbmZsdWVuemFtb2RlbC9wbHVnaW4ucHJvcGVydGllcyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGlzZWFzZW1vZGVscy5nbG9iYWxpbmZsdWVuemFtb2RlbC9wbHVnaW4ucHJvcGVydGllcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42OTUxY2Y4Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kaXNlYXNlbW9kZWxzLmdsb2JhbGluZmx1ZW56YW1vZGVsL3BsdWdpbi5wcm9wZXJ0aWVzCkBAIC0wLDAgKzEsOCBAQAorDQorIyA8Y29weXJpZ2h0Pg0KKyMgPC9jb3B5cmlnaHQ+DQorIw0KKyMgJElkJA0KKw0KK3BsdWdpbk5hbWUgPSBHbG9iYWxpbmZsdWVuemFtb2RlbCBUZXN0cw0KK3Byb3ZpZGVyTmFtZSA9IHd3dy5leGFtcGxlLm9yZw0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGlzZWFzZW1vZGVscy5nbG9iYWxpbmZsdWVuemFtb2RlbC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL2dsb2JhbGluZmx1ZW56YW1vZGVsL3Rlc3RzL0dsb2JhbEluZmx1ZW56YU1vZGVsVGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kaXNlYXNlbW9kZWxzLmdsb2JhbGluZmx1ZW56YW1vZGVsL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvZ2xvYmFsaW5mbHVlbnphbW9kZWwvdGVzdHMvR2xvYmFsSW5mbHVlbnphTW9kZWxUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTJkMDUyYgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGlzZWFzZW1vZGVscy5nbG9iYWxpbmZsdWVuemFtb2RlbC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL2dsb2JhbGluZmx1ZW56YW1vZGVsL3Rlc3RzL0dsb2JhbEluZmx1ZW56YU1vZGVsVGVzdC5qYXZhCkBAIC0wLDAgKzEsOTMgQEAKKy8qKg0KKyAqIDxjb3B5cmlnaHQ+DQorICogPC9jb3B5cmlnaHQ+DQorICoNCisgKiAkSWQkDQorICovDQorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZ2xvYmFsaW5mbHVlbnphbW9kZWwudGVzdHM7DQorDQoraW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsNCisNCitpbXBvcnQganVuaXQudGV4dHVpLlRlc3RSdW5uZXI7DQorDQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5nbG9iYWxpbmZsdWVuemFtb2RlbC5HbG9iYWxJbmZsdWVuemFNb2RlbDsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmdsb2JhbGluZmx1ZW56YW1vZGVsLkdsb2JhbGluZmx1ZW56YW1vZGVsRmFjdG9yeTsNCisNCisvKioNCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKyAqIEEgdGVzdCBjYXNlIGZvciB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+R2xvYmFsIEluZmx1ZW56YSBNb2RlbDwvYj48L2VtPicuDQorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorICogQGdlbmVyYXRlZA0KKyAqLw0KK3B1YmxpYyBjbGFzcyBHbG9iYWxJbmZsdWVuemFNb2RlbFRlc3QgZXh0ZW5kcyBUZXN0Q2FzZSB7DQorDQorCS8qKg0KKwkgKiBUaGUgZml4dHVyZSBmb3IgdGhpcyBHbG9iYWwgSW5mbHVlbnphIE1vZGVsIHRlc3QgY2FzZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCBHbG9iYWxJbmZsdWVuemFNb2RlbCBmaXh0dXJlID0gbnVsbDsNCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7DQorCQlUZXN0UnVubmVyLnJ1bihHbG9iYWxJbmZsdWVuemFNb2RlbFRlc3QuY2xhc3MpOw0KKwl9DQorDQorCS8qKg0KKwkgKiBDb25zdHJ1Y3RzIGEgbmV3IEdsb2JhbCBJbmZsdWVuemEgTW9kZWwgdGVzdCBjYXNlIHdpdGggdGhlIGdpdmVuIG5hbWUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgR2xvYmFsSW5mbHVlbnphTW9kZWxUZXN0KFN0cmluZyBuYW1lKSB7DQorCQlzdXBlcihuYW1lKTsNCisJfQ0KKw0KKwkvKioNCisJICogU2V0cyB0aGUgZml4dHVyZSBmb3IgdGhpcyBHbG9iYWwgSW5mbHVlbnphIE1vZGVsIHRlc3QgY2FzZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCB2b2lkIHNldEZpeHR1cmUoR2xvYmFsSW5mbHVlbnphTW9kZWwgZml4dHVyZSkgew0KKwkJdGhpcy5maXh0dXJlID0gZml4dHVyZTsNCisJfQ0KKw0KKwkvKioNCisJICogUmV0dXJucyB0aGUgZml4dHVyZSBmb3IgdGhpcyBHbG9iYWwgSW5mbHVlbnphIE1vZGVsIHRlc3QgY2FzZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCBHbG9iYWxJbmZsdWVuemFNb2RlbCBnZXRGaXh0dXJlKCkgew0KKwkJcmV0dXJuIGZpeHR1cmU7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAc2VlIGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZSNzZXRVcCgpDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCUBPdmVycmlkZQ0KKwlwcm90ZWN0ZWQgdm9pZCBzZXRVcCgpIHRocm93cyBFeGNlcHRpb24gew0KKwkJc2V0Rml4dHVyZShHbG9iYWxpbmZsdWVuemFtb2RlbEZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZUdsb2JhbEluZmx1ZW56YU1vZGVsKCkpOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHNlZSBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2UjdGVhckRvd24oKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlAT3ZlcnJpZGUNCisJcHJvdGVjdGVkIHZvaWQgdGVhckRvd24oKSB0aHJvd3MgRXhjZXB0aW9uIHsNCisJCXNldEZpeHR1cmUobnVsbCk7DQorCX0NCisNCit9IC8vR2xvYmFsSW5mbHVlbnphTW9kZWxUZXN0DQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kaXNlYXNlbW9kZWxzLmdsb2JhbGluZmx1ZW56YW1vZGVsL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvZ2xvYmFsaW5mbHVlbnphbW9kZWwvdGVzdHMvR2xvYmFsaW5mbHVlbnphbW9kZWxBbGxUZXN0cy5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kaXNlYXNlbW9kZWxzLmdsb2JhbGluZmx1ZW56YW1vZGVsL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvZ2xvYmFsaW5mbHVlbnphbW9kZWwvdGVzdHMvR2xvYmFsaW5mbHVlbnphbW9kZWxBbGxUZXN0cy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY1Y2NkMDAKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRpc2Vhc2Vtb2RlbHMuZ2xvYmFsaW5mbHVlbnphbW9kZWwvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9nbG9iYWxpbmZsdWVuemFtb2RlbC90ZXN0cy9HbG9iYWxpbmZsdWVuemFtb2RlbEFsbFRlc3RzLmphdmEKQEAgLTAsMCArMSw1MSBAQAorLyoqDQorICogPGNvcHlyaWdodD4NCisgKiA8L2NvcHlyaWdodD4NCisgKg0KKyAqICRJZCQNCisgKi8NCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5nbG9iYWxpbmZsdWVuemFtb2RlbC50ZXN0czsNCisNCitpbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3Q7DQoraW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0U3VpdGU7DQorDQoraW1wb3J0IGp1bml0LnRleHR1aS5UZXN0UnVubmVyOw0KKw0KKy8qKg0KKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorICogQSB0ZXN0IHN1aXRlIGZvciB0aGUgJzxlbT48Yj5HbG9iYWxpbmZsdWVuemFtb2RlbDwvYj48L2VtPicgbW9kZWwuDQorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorICogQGdlbmVyYXRlZA0KKyAqLw0KK3B1YmxpYyBjbGFzcyBHbG9iYWxpbmZsdWVuemFtb2RlbEFsbFRlc3RzIGV4dGVuZHMgVGVzdFN1aXRlIHsNCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7DQorCQlUZXN0UnVubmVyLnJ1bihzdWl0ZSgpKTsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBzdGF0aWMgVGVzdCBzdWl0ZSgpIHsNCisJCVRlc3RTdWl0ZSBzdWl0ZSA9IG5ldyBHbG9iYWxpbmZsdWVuemFtb2RlbEFsbFRlc3RzKCJHbG9iYWxpbmZsdWVuemFtb2RlbCBUZXN0cyIpOw0KKwkJc3VpdGUuYWRkVGVzdChHbG9iYWxpbmZsdWVuemFtb2RlbFRlc3RzLnN1aXRlKCkpOw0KKwkJcmV0dXJuIHN1aXRlOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIEdsb2JhbGluZmx1ZW56YW1vZGVsQWxsVGVzdHMoU3RyaW5nIG5hbWUpIHsNCisJCXN1cGVyKG5hbWUpOw0KKwl9DQorDQorfSAvL0dsb2JhbGluZmx1ZW56YW1vZGVsQWxsVGVzdHMNCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRpc2Vhc2Vtb2RlbHMuZ2xvYmFsaW5mbHVlbnphbW9kZWwvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9nbG9iYWxpbmZsdWVuemFtb2RlbC90ZXN0cy9HbG9iYWxpbmZsdWVuemFtb2RlbEV4YW1wbGUuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGlzZWFzZW1vZGVscy5nbG9iYWxpbmZsdWVuemFtb2RlbC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL2dsb2JhbGluZmx1ZW56YW1vZGVsL3Rlc3RzL0dsb2JhbGluZmx1ZW56YW1vZGVsRXhhbXBsZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIxODEyNjQKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRpc2Vhc2Vtb2RlbHMuZ2xvYmFsaW5mbHVlbnphbW9kZWwvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9nbG9iYWxpbmZsdWVuemFtb2RlbC90ZXN0cy9HbG9iYWxpbmZsdWVuemFtb2RlbEV4YW1wbGUuamF2YQpAQCAtMCwwICsxLDEyNSBAQAorLyoqDQorICogPGNvcHlyaWdodD4NCisgKiA8L2NvcHlyaWdodD4NCisgKg0KKyAqICRJZCQNCisgKi8NCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5nbG9iYWxpbmZsdWVuemFtb2RlbC50ZXN0czsNCisNCitpbXBvcnQgamF2YS5pby5GaWxlOw0KK2ltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOw0KKw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuRGlhZ25vc3RpYzsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlVSSTsNCisNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3Q7DQorDQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5yZXNvdXJjZS5SZXNvdXJjZTsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnJlc291cmNlLlJlc291cmNlU2V0Ow0KKw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUucmVzb3VyY2UuaW1wbC5SZXNvdXJjZVNldEltcGw7DQorDQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS51dGlsLkRpYWdub3N0aWNpYW47DQorDQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS54bWkuaW1wbC5YTUlSZXNvdXJjZUZhY3RvcnlJbXBsOw0KKw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZ2xvYmFsaW5mbHVlbnphbW9kZWwuR2xvYmFsSW5mbHVlbnphTW9kZWw7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5nbG9iYWxpbmZsdWVuemFtb2RlbC5HbG9iYWxpbmZsdWVuemFtb2RlbEZhY3Rvcnk7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5nbG9iYWxpbmZsdWVuemFtb2RlbC5HbG9iYWxpbmZsdWVuemFtb2RlbFBhY2thZ2U7DQorDQorLyoqDQorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisgKiBBIHNhbXBsZSB1dGlsaXR5IGZvciB0aGUgJzxlbT48Yj5nbG9iYWxpbmZsdWVuemFtb2RlbDwvYj48L2VtPicgcGFja2FnZS4NCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisgKiBAZ2VuZXJhdGVkDQorICovDQorcHVibGljIGNsYXNzIEdsb2JhbGluZmx1ZW56YW1vZGVsRXhhbXBsZSB7DQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiBMb2FkIGFsbCB0aGUgYXJndW1lbnQgZmlsZSBwYXRocyBvciBVUklzIGFzIGluc3RhbmNlcyBvZiB0aGUgbW9kZWwuDQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcGFyYW0gYXJncyB0aGUgZmlsZSBwYXRocyBvciBVUklzLg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7DQorCQkvLyBDcmVhdGUgYSByZXNvdXJjZSBzZXQgdG8gaG9sZCB0aGUgcmVzb3VyY2VzLg0KKwkJLy8NCisJCVJlc291cmNlU2V0IHJlc291cmNlU2V0ID0gbmV3IFJlc291cmNlU2V0SW1wbCgpOw0KKwkJDQorCQkvLyBSZWdpc3RlciB0aGUgYXBwcm9wcmlhdGUgcmVzb3VyY2UgZmFjdG9yeSB0byBoYW5kbGUgYWxsIGZpbGUgZXh0ZW5zaW9ucy4NCisJCS8vDQorCQlyZXNvdXJjZVNldC5nZXRSZXNvdXJjZUZhY3RvcnlSZWdpc3RyeSgpLmdldEV4dGVuc2lvblRvRmFjdG9yeU1hcCgpLnB1dA0KKwkJCShSZXNvdXJjZS5GYWN0b3J5LlJlZ2lzdHJ5LkRFRkFVTFRfRVhURU5TSU9OLCANCisJCQkgbmV3IFhNSVJlc291cmNlRmFjdG9yeUltcGwoKSk7DQorDQorCQkvLyBSZWdpc3RlciB0aGUgcGFja2FnZSB0byBlbnN1cmUgaXQgaXMgYXZhaWxhYmxlIGR1cmluZyBsb2FkaW5nLg0KKwkJLy8NCisJCXJlc291cmNlU2V0LmdldFBhY2thZ2VSZWdpc3RyeSgpLnB1dA0KKwkJCShHbG9iYWxpbmZsdWVuemFtb2RlbFBhY2thZ2UuZU5TX1VSSSwgDQorCQkJIEdsb2JhbGluZmx1ZW56YW1vZGVsUGFja2FnZS5lSU5TVEFOQ0UpOw0KKyAgICAgICAgDQorCQkvLyBJZiB0aGVyZSBhcmUgbm8gYXJndW1lbnRzLCBlbWl0IGFuIGFwcHJvcHJpYXRlIHVzYWdlIG1lc3NhZ2UuDQorCQkvLw0KKwkJaWYgKGFyZ3MubGVuZ3RoID09IDApIHsNCisJCQlTeXN0ZW0ub3V0LnByaW50bG4oIkVudGVyIGEgbGlzdCBvZiBmaWxlIHBhdGhzIG9yIFVSSXMgdGhhdCBoYXZlIGNvbnRlbnQgbGlrZSB0aGlzOiIpOw0KKwkJCXRyeSB7DQorCQkJCVJlc291cmNlIHJlc291cmNlID0gcmVzb3VyY2VTZXQuY3JlYXRlUmVzb3VyY2UoVVJJLmNyZWF0ZVVSSSgiaHR0cDovLy9NeS5nbG9iYWxpbmZsdWVuemFtb2RlbCIpKTsNCisJCQkJR2xvYmFsSW5mbHVlbnphTW9kZWwgcm9vdCA9IEdsb2JhbGluZmx1ZW56YW1vZGVsRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlR2xvYmFsSW5mbHVlbnphTW9kZWwoKTsNCisJCQkJcmVzb3VyY2UuZ2V0Q29udGVudHMoKS5hZGQocm9vdCk7DQorCQkJCXJlc291cmNlLnNhdmUoU3lzdGVtLm91dCwgbnVsbCk7DQorCQkJfQ0KKwkJCWNhdGNoIChJT0V4Y2VwdGlvbiBleGNlcHRpb24pIHsNCisJCQkJZXhjZXB0aW9uLnByaW50U3RhY2tUcmFjZSgpOw0KKwkJCX0NCisJCX0NCisJCWVsc2Ugew0KKwkJCS8vIEl0ZXJhdGUgb3ZlciBhbGwgdGhlIGFyZ3VtZW50cy4NCisJCQkvLw0KKwkJCWZvciAoaW50IGkgPSAwOyBpIDwgYXJncy5sZW5ndGg7ICsraSkgew0KKwkJCQkvLyBDb25zdHJ1Y3QgdGhlIFVSSSBmb3IgdGhlIGluc3RhbmNlIGZpbGUuDQorCQkJCS8vIFRoZSBhcmd1bWVudCBpcyB0cmVhdGVkIGFzIGEgZmlsZSBwYXRoIG9ubHkgaWYgaXQgZGVub3RlcyBhbiBleGlzdGluZyBmaWxlLg0KKwkJCQkvLyBPdGhlcndpc2UsIGl0J3MgZGlyZWN0bHkgdHJlYXRlZCBhcyBhIFVSTC4NCisJCQkJLy8NCisJCQkJRmlsZSBmaWxlID0gbmV3IEZpbGUoYXJnc1tpXSk7DQorCQkJCVVSSSB1cmkgPSBmaWxlLmlzRmlsZSgpID8gVVJJLmNyZWF0ZUZpbGVVUkkoZmlsZS5nZXRBYnNvbHV0ZVBhdGgoKSk6IFVSSS5jcmVhdGVVUkkoYXJnc1tpXSk7DQorDQorCQkJCXRyeSB7DQorCQkJCQkvLyBEZW1hbmQgbG9hZCByZXNvdXJjZSBmb3IgdGhpcyBmaWxlLg0KKwkJCQkJLy8NCisJCQkJCVJlc291cmNlIHJlc291cmNlID0gcmVzb3VyY2VTZXQuZ2V0UmVzb3VyY2UodXJpLCB0cnVlKTsNCisJCQkJCVN5c3RlbS5vdXQucHJpbnRsbigiTG9hZGVkICIgKyB1cmkpOw0KKw0KKwkJCQkJLy8gVmFsaWRhdGUgdGhlIGNvbnRlbnRzIG9mIHRoZSBsb2FkZWQgcmVzb3VyY2UuDQorCQkJCQkvLw0KKwkJCQkJZm9yIChFT2JqZWN0IGVPYmplY3QgOiByZXNvdXJjZS5nZXRDb250ZW50cygpKSB7DQorCQkJCQkJRGlhZ25vc3RpYyBkaWFnbm9zdGljID0gRGlhZ25vc3RpY2lhbi5JTlNUQU5DRS52YWxpZGF0ZShlT2JqZWN0KTsNCisJCQkJCQlpZiAoZGlhZ25vc3RpYy5nZXRTZXZlcml0eSgpICE9IERpYWdub3N0aWMuT0spIHsNCisJCQkJCQkJcHJpbnREaWFnbm9zdGljKGRpYWdub3N0aWMsICIiKTsNCisJCQkJCQl9DQorCQkJCQl9DQorCQkJCX0NCisJCQkJY2F0Y2ggKFJ1bnRpbWVFeGNlcHRpb24gZXhjZXB0aW9uKSB7DQorCQkJCQlTeXN0ZW0ub3V0LnByaW50bG4oIlByb2JsZW0gbG9hZGluZyAiICsgdXJpKTsNCisJCQkJCWV4Y2VwdGlvbi5wcmludFN0YWNrVHJhY2UoKTsNCisJCQkJfQ0KKwkJCX0NCisJCX0NCisJfQ0KKwkNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIFByaW50cyBkaWFnbm9zdGljcyB3aXRoIGluZGVudGF0aW9uLg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHBhcmFtIGRpYWdub3N0aWMgdGhlIGRpYWdub3N0aWMgdG8gcHJpbnQuDQorCSAqIEBwYXJhbSBpbmRlbnQgdGhlIGluZGVudGF0aW9uIGZvciBwcmludGluZy4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIHN0YXRpYyB2b2lkIHByaW50RGlhZ25vc3RpYyhEaWFnbm9zdGljIGRpYWdub3N0aWMsIFN0cmluZyBpbmRlbnQpIHsNCisJCVN5c3RlbS5vdXQucHJpbnQoaW5kZW50KTsNCisJCVN5c3RlbS5vdXQucHJpbnRsbihkaWFnbm9zdGljLmdldE1lc3NhZ2UoKSk7DQorCQlmb3IgKERpYWdub3N0aWMgY2hpbGQgOiBkaWFnbm9zdGljLmdldENoaWxkcmVuKCkpIHsNCisJCQlwcmludERpYWdub3N0aWMoY2hpbGQsIGluZGVudCArICIgICIpOw0KKwkJfQ0KKwl9DQorDQorfSAvL0dsb2JhbGluZmx1ZW56YW1vZGVsRXhhbXBsZQ0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGlzZWFzZW1vZGVscy5nbG9iYWxpbmZsdWVuemFtb2RlbC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL2dsb2JhbGluZmx1ZW56YW1vZGVsL3Rlc3RzL0dsb2JhbGluZmx1ZW56YW1vZGVsVGVzdHMuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGlzZWFzZW1vZGVscy5nbG9iYWxpbmZsdWVuemFtb2RlbC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL2dsb2JhbGluZmx1ZW56YW1vZGVsL3Rlc3RzL0dsb2JhbGluZmx1ZW56YW1vZGVsVGVzdHMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZTRlZjA0Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kaXNlYXNlbW9kZWxzLmdsb2JhbGluZmx1ZW56YW1vZGVsL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvZ2xvYmFsaW5mbHVlbnphbW9kZWwvdGVzdHMvR2xvYmFsaW5mbHVlbnphbW9kZWxUZXN0cy5qYXZhCkBAIC0wLDAgKzEsNTEgQEAKKy8qKg0KKyAqIDxjb3B5cmlnaHQ+DQorICogPC9jb3B5cmlnaHQ+DQorICoNCisgKiAkSWQkDQorICovDQorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZ2xvYmFsaW5mbHVlbnphbW9kZWwudGVzdHM7DQorDQoraW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Ow0KK2ltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdFN1aXRlOw0KKw0KK2ltcG9ydCBqdW5pdC50ZXh0dWkuVGVzdFJ1bm5lcjsNCisNCisvKioNCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKyAqIEEgdGVzdCBzdWl0ZSBmb3IgdGhlICc8ZW0+PGI+Z2xvYmFsaW5mbHVlbnphbW9kZWw8L2I+PC9lbT4nIHBhY2thZ2UuDQorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorICogQGdlbmVyYXRlZA0KKyAqLw0KK3B1YmxpYyBjbGFzcyBHbG9iYWxpbmZsdWVuemFtb2RlbFRlc3RzIGV4dGVuZHMgVGVzdFN1aXRlIHsNCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7DQorCQlUZXN0UnVubmVyLnJ1bihzdWl0ZSgpKTsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBzdGF0aWMgVGVzdCBzdWl0ZSgpIHsNCisJCVRlc3RTdWl0ZSBzdWl0ZSA9IG5ldyBHbG9iYWxpbmZsdWVuemFtb2RlbFRlc3RzKCJnbG9iYWxpbmZsdWVuemFtb2RlbCBUZXN0cyIpOw0KKwkJc3VpdGUuYWRkVGVzdFN1aXRlKEdsb2JhbEluZmx1ZW56YU1vZGVsVGVzdC5jbGFzcyk7DQorCQlyZXR1cm4gc3VpdGU7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgR2xvYmFsaW5mbHVlbnphbW9kZWxUZXN0cyhTdHJpbmcgbmFtZSkgew0KKwkJc3VwZXIobmFtZSk7DQorCX0NCisNCit9IC8vR2xvYmFsaW5mbHVlbnphbW9kZWxUZXN0cw0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGlzZWFzZW1vZGVscy5tdWx0aXBvcHVsYXRpb24vLmNsYXNzcGF0aCBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGlzZWFzZW1vZGVscy5tdWx0aXBvcHVsYXRpb24vLmNsYXNzcGF0aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NWYwMjRlCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kaXNlYXNlbW9kZWxzLm11bHRpcG9wdWxhdGlvbi8uY2xhc3NwYXRoCkBAIC0wLDAgKzEsNyBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4NCis8Y2xhc3NwYXRoPg0KKwk8Y2xhc3NwYXRoZW50cnkga2luZD0ic3JjIiBwYXRoPSJzcmMiLz4NCisJPGNsYXNzcGF0aGVudHJ5IGtpbmQ9ImNvbiIgcGF0aD0ib3JnLmVjbGlwc2UuamR0LmxhdW5jaGluZy5KUkVfQ09OVEFJTkVSL29yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC5kZWJ1Zy51aS5sYXVuY2hlci5TdGFuZGFyZFZNVHlwZS9KMlNFLTEuNSIvPg0KKwk8Y2xhc3NwYXRoZW50cnkga2luZD0iY29uIiBwYXRoPSJvcmcuZWNsaXBzZS5wZGUuY29yZS5yZXF1aXJlZFBsdWdpbnMiLz4NCisJPGNsYXNzcGF0aGVudHJ5IGtpbmQ9Im91dHB1dCIgcGF0aD0iYmluIi8+DQorPC9jbGFzc3BhdGg+DQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kaXNlYXNlbW9kZWxzLm11bHRpcG9wdWxhdGlvbi8ucHJvamVjdCBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGlzZWFzZW1vZGVscy5tdWx0aXBvcHVsYXRpb24vLnByb2plY3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDVlMmVjMQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGlzZWFzZW1vZGVscy5tdWx0aXBvcHVsYXRpb24vLnByb2plY3QKQEAgLTAsMCArMSwyOCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxwcm9qZWN0RGVzY3JpcHRpb24+CisJPG5hbWU+b3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kaXNlYXNlbW9kZWxzLm11bHRpcG9wdWxhdGlvbjwvbmFtZT4KKwk8Y29tbWVudD48L2NvbW1lbnQ+CisJPHByb2plY3RzPgorCTwvcHJvamVjdHM+CisJPGJ1aWxkU3BlYz4KKwkJPGJ1aWxkQ29tbWFuZD4KKwkJCTxuYW1lPm9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFidWlsZGVyPC9uYW1lPgorCQkJPGFyZ3VtZW50cz4KKwkJCTwvYXJndW1lbnRzPgorCQk8L2J1aWxkQ29tbWFuZD4KKwkJPGJ1aWxkQ29tbWFuZD4KKwkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5NYW5pZmVzdEJ1aWxkZXI8L25hbWU+CisJCQk8YXJndW1lbnRzPgorCQkJPC9hcmd1bWVudHM+CisJCTwvYnVpbGRDb21tYW5kPgorCQk8YnVpbGRDb21tYW5kPgorCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLlNjaGVtYUJ1aWxkZXI8L25hbWU+CisJCQk8YXJndW1lbnRzPgorCQkJPC9hcmd1bWVudHM+CisJCTwvYnVpbGRDb21tYW5kPgorCTwvYnVpbGRTcGVjPgorCTxuYXR1cmVzPgorCQk8bmF0dXJlPm9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFuYXR1cmU8L25hdHVyZT4KKwkJPG5hdHVyZT5vcmcuZWNsaXBzZS5wZGUuUGx1Z2luTmF0dXJlPC9uYXR1cmU+CisJPC9uYXR1cmVzPgorPC9wcm9qZWN0RGVzY3JpcHRpb24+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRpc2Vhc2Vtb2RlbHMubXVsdGlwb3B1bGF0aW9uLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGlzZWFzZW1vZGVscy5tdWx0aXBvcHVsYXRpb24vLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFjOWNjZmQKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRpc2Vhc2Vtb2RlbHMubXVsdGlwb3B1bGF0aW9uLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcwpAQCAtMCwwICsxLDggQEAKKyNUdWUgTWFyIDMwIDExOjQ4OjUzIFBEVCAyMDEwDQorZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTENCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb2RlZ2VuLmlubGluZUpzckJ5dGVjb2RlPWVuYWJsZWQNCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb2RlZ2VuLnRhcmdldFBsYXRmb3JtPTEuNQ0KK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvbXBsaWFuY2U9MS41DQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5hc3NlcnRJZGVudGlmaWVyPWVycm9yDQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5lbnVtSWRlbnRpZmllcj1lcnJvcg0KK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnNvdXJjZT0xLjUNCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRpc2Vhc2Vtb2RlbHMubXVsdGlwb3B1bGF0aW9uL01FVEEtSU5GL01BTklGRVNULk1GIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kaXNlYXNlbW9kZWxzLm11bHRpcG9wdWxhdGlvbi9NRVRBLUlORi9NQU5JRkVTVC5NRgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYWIyODU4Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kaXNlYXNlbW9kZWxzLm11bHRpcG9wdWxhdGlvbi9NRVRBLUlORi9NQU5JRkVTVC5NRgpAQCAtMCwwICsxLDIwIEBACitNYW5pZmVzdC1WZXJzaW9uOiAxLjAKK0J1bmRsZS1NYW5pZmVzdFZlcnNpb246IDIKK0J1bmRsZS1OYW1lOiAlcGx1Z2luTmFtZQorQnVuZGxlLVN5bWJvbGljTmFtZTogb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kaXNlYXNlbW9kZWxzLm11bHRpcG9wdWxhdGlvbjtzaW5nbGV0b246PXRydWUKK0J1bmRsZS1WZXJzaW9uOiAxLjIuMQorQnVuZGxlLUNsYXNzUGF0aDogLgorQnVuZGxlLVZlbmRvcjogJXByb3ZpZGVyTmFtZQorQnVuZGxlLUxvY2FsaXphdGlvbjogcGx1Z2luCitCdW5kbGUtUmVxdWlyZWRFeGVjdXRpb25FbnZpcm9ubWVudDogSmF2YVNFLTEuNgorRXhwb3J0LVBhY2thZ2U6IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5tdWx0aXBvcHVsYXRpb24udGVzdHMKK1JlcXVpcmUtQnVuZGxlOiBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUsCisgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLm11bHRpcG9wdWxhdGlvbjt2aXNpYmlsaXR5Oj1yZWV4cG9ydCwKKyBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHM7dmlzaWJpbGl0eTo9cmVleHBvcnQsCisgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlO3Zpc2liaWxpdHk6PXJlZXhwb3J0LAorIG9yZy5lY2xpcHNlLmVtZi5lY29yZTt2aXNpYmlsaXR5Oj1yZWV4cG9ydCwKKyBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zO3Zpc2liaWxpdHk6PXJlZXhwb3J0LAorIG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVsczt2aXNpYmlsaXR5Oj1yZWV4cG9ydCwKKyBvcmcuZWNsaXBzZS5lbWYuZWNvcmUueG1pO3Zpc2liaWxpdHk6PXJlZXhwb3J0LAorIG9yZy5qdW5pdDt2aXNpYmlsaXR5Oj1yZWV4cG9ydAorQnVuZGxlLUFjdGl2YXRpb25Qb2xpY3k6IGxhenkKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGlzZWFzZW1vZGVscy5tdWx0aXBvcHVsYXRpb24vYnVpbGQucHJvcGVydGllcyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGlzZWFzZW1vZGVscy5tdWx0aXBvcHVsYXRpb24vYnVpbGQucHJvcGVydGllcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42Y2Y2ZWUwCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kaXNlYXNlbW9kZWxzLm11bHRpcG9wdWxhdGlvbi9idWlsZC5wcm9wZXJ0aWVzCkBAIC0wLDAgKzEsMTIgQEAKKworIyA8Y29weXJpZ2h0PgorIyA8L2NvcHlyaWdodD4KKyMKKyMgJElkJAorCitiaW4uaW5jbHVkZXMgPSAuLFwKKyAgICAgICAgICAgICAgIE1FVEEtSU5GLyxcCisgICAgICAgICAgICAgICBwbHVnaW4ucHJvcGVydGllcworamFycy5jb21waWxlLm9yZGVyID0gLgorc291cmNlLi4gPSBzcmMvCitvdXRwdXQuLiA9IGJpbi8KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGlzZWFzZW1vZGVscy5tdWx0aXBvcHVsYXRpb24vcGx1Z2luLnByb3BlcnRpZXMgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRpc2Vhc2Vtb2RlbHMubXVsdGlwb3B1bGF0aW9uL3BsdWdpbi5wcm9wZXJ0aWVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU0OTlkYzQKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRpc2Vhc2Vtb2RlbHMubXVsdGlwb3B1bGF0aW9uL3BsdWdpbi5wcm9wZXJ0aWVzCkBAIC0wLDAgKzEsOCBAQAorCisjIDxjb3B5cmlnaHQ+CisjIDwvY29weXJpZ2h0PgorIworIyAkSWQkCisKK3BsdWdpbk5hbWUgPSBNdWx0aXBvcHVsYXRpb24gVGVzdHMKK3Byb3ZpZGVyTmFtZSA9IEVjbGlwc2Uub3JnCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRpc2Vhc2Vtb2RlbHMubXVsdGlwb3B1bGF0aW9uL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvbXVsdGlwb3B1bGF0aW9uL3Rlc3RzL011bHRpUG9wdWxhdGlvblNFSVJEaXNlYXNlTW9kZWxUZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRpc2Vhc2Vtb2RlbHMubXVsdGlwb3B1bGF0aW9uL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvbXVsdGlwb3B1bGF0aW9uL3Rlc3RzL011bHRpUG9wdWxhdGlvblNFSVJEaXNlYXNlTW9kZWxUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTljZTRhZgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGlzZWFzZW1vZGVscy5tdWx0aXBvcHVsYXRpb24vc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9tdWx0aXBvcHVsYXRpb24vdGVzdHMvTXVsdGlQb3B1bGF0aW9uU0VJUkRpc2Vhc2VNb2RlbFRlc3QuamF2YQpAQCAtMCwwICsxLDc4IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA5LDIwMTAgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMubXVsdGlwb3B1bGF0aW9uLnRlc3RzOworCitpbXBvcnQganVuaXQudGV4dHVpLlRlc3RSdW5uZXI7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMubXVsdGlwb3B1bGF0aW9uLk11bHRpUG9wdWxhdGlvblNFSVJEaXNlYXNlTW9kZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLm11bHRpcG9wdWxhdGlvbi5NdWx0aXBvcHVsYXRpb25GYWN0b3J5OworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiBBIHRlc3QgY2FzZSBmb3IgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPk11bHRpIFBvcHVsYXRpb24gU0VJUiBEaXNlYXNlIE1vZGVsPC9iPjwvZW0+Jy4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgTXVsdGlQb3B1bGF0aW9uU0VJUkRpc2Vhc2VNb2RlbFRlc3QgZXh0ZW5kcyBNdWx0aVBvcHVsYXRpb25TSVJEaXNlYXNlTW9kZWxUZXN0IHsKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKKwkJVGVzdFJ1bm5lci5ydW4oTXVsdGlQb3B1bGF0aW9uU0VJUkRpc2Vhc2VNb2RlbFRlc3QuY2xhc3MpOworCX0KKworCS8qKgorCSAqIENvbnN0cnVjdHMgYSBuZXcgTXVsdGkgUG9wdWxhdGlvbiBTRUlSIERpc2Vhc2UgTW9kZWwgdGVzdCBjYXNlIHdpdGggdGhlIGdpdmVuIG5hbWUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIE11bHRpUG9wdWxhdGlvblNFSVJEaXNlYXNlTW9kZWxUZXN0KFN0cmluZyBuYW1lKSB7CisJCXN1cGVyKG5hbWUpOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIGZpeHR1cmUgZm9yIHRoaXMgTXVsdGkgUG9wdWxhdGlvbiBTRUlSIERpc2Vhc2UgTW9kZWwgdGVzdCBjYXNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCBNdWx0aVBvcHVsYXRpb25TRUlSRGlzZWFzZU1vZGVsIGdldEZpeHR1cmUoKSB7CisJCXJldHVybiAoTXVsdGlQb3B1bGF0aW9uU0VJUkRpc2Vhc2VNb2RlbClmaXh0dXJlOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2Ujc2V0VXAoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgdm9pZCBzZXRVcCgpIHRocm93cyBFeGNlcHRpb24geworCQlzZXRGaXh0dXJlKE11bHRpcG9wdWxhdGlvbkZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZU11bHRpUG9wdWxhdGlvblNFSVJEaXNlYXNlTW9kZWwoKSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZSN0ZWFyRG93bigpCisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIHRlYXJEb3duKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCXNldEZpeHR1cmUobnVsbCk7CisJfQorCit9IC8vTXVsdGlQb3B1bGF0aW9uU0VJUkRpc2Vhc2VNb2RlbFRlc3QKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGlzZWFzZW1vZGVscy5tdWx0aXBvcHVsYXRpb24vc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9tdWx0aXBvcHVsYXRpb24vdGVzdHMvTXVsdGlQb3B1bGF0aW9uU0lEaXNlYXNlTW9kZWxUZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRpc2Vhc2Vtb2RlbHMubXVsdGlwb3B1bGF0aW9uL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvbXVsdGlwb3B1bGF0aW9uL3Rlc3RzL011bHRpUG9wdWxhdGlvblNJRGlzZWFzZU1vZGVsVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQzOGRmODkKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRpc2Vhc2Vtb2RlbHMubXVsdGlwb3B1bGF0aW9uL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvbXVsdGlwb3B1bGF0aW9uL3Rlc3RzL011bHRpUG9wdWxhdGlvblNJRGlzZWFzZU1vZGVsVGVzdC5qYXZhCkBAIC0wLDAgKzEsOTcgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLm11bHRpcG9wdWxhdGlvbi50ZXN0czsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAxMCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7CitpbXBvcnQganVuaXQudGV4dHVpLlRlc3RSdW5uZXI7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMubXVsdGlwb3B1bGF0aW9uLk11bHRpUG9wdWxhdGlvblNJRGlzZWFzZU1vZGVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5tdWx0aXBvcHVsYXRpb24uTXVsdGlwb3B1bGF0aW9uRmFjdG9yeTsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogQSB0ZXN0IGNhc2UgZm9yIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5NdWx0aSBQb3B1bGF0aW9uIFNJIERpc2Vhc2UgTW9kZWw8L2I+PC9lbT4nLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBNdWx0aVBvcHVsYXRpb25TSURpc2Vhc2VNb2RlbFRlc3QgZXh0ZW5kcyBUZXN0Q2FzZSB7CisKKwkvKioKKwkgKiBUaGUgZml4dHVyZSBmb3IgdGhpcyBNdWx0aSBQb3B1bGF0aW9uIFNJIERpc2Vhc2UgTW9kZWwgdGVzdCBjYXNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBNdWx0aVBvcHVsYXRpb25TSURpc2Vhc2VNb2RlbCBmaXh0dXJlID0gbnVsbDsKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKKwkJVGVzdFJ1bm5lci5ydW4oTXVsdGlQb3B1bGF0aW9uU0lEaXNlYXNlTW9kZWxUZXN0LmNsYXNzKTsKKwl9CisKKwkvKioKKwkgKiBDb25zdHJ1Y3RzIGEgbmV3IE11bHRpIFBvcHVsYXRpb24gU0kgRGlzZWFzZSBNb2RlbCB0ZXN0IGNhc2Ugd2l0aCB0aGUgZ2l2ZW4gbmFtZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgTXVsdGlQb3B1bGF0aW9uU0lEaXNlYXNlTW9kZWxUZXN0KFN0cmluZyBuYW1lKSB7CisJCXN1cGVyKG5hbWUpOworCX0KKworCS8qKgorCSAqIFNldHMgdGhlIGZpeHR1cmUgZm9yIHRoaXMgTXVsdGkgUG9wdWxhdGlvbiBTSSBEaXNlYXNlIE1vZGVsIHRlc3QgY2FzZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBzZXRGaXh0dXJlKE11bHRpUG9wdWxhdGlvblNJRGlzZWFzZU1vZGVsIGZpeHR1cmUpIHsKKwkJdGhpcy5maXh0dXJlID0gZml4dHVyZTsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBmaXh0dXJlIGZvciB0aGlzIE11bHRpIFBvcHVsYXRpb24gU0kgRGlzZWFzZSBNb2RlbCB0ZXN0IGNhc2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIE11bHRpUG9wdWxhdGlvblNJRGlzZWFzZU1vZGVsIGdldEZpeHR1cmUoKSB7CisJCXJldHVybiBmaXh0dXJlOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2Ujc2V0VXAoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgdm9pZCBzZXRVcCgpIHRocm93cyBFeGNlcHRpb24geworCQlzZXRGaXh0dXJlKE11bHRpcG9wdWxhdGlvbkZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZU11bHRpUG9wdWxhdGlvblNJRGlzZWFzZU1vZGVsKCkpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2UjdGVhckRvd24oKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgdm9pZCB0ZWFyRG93bigpIHRocm93cyBFeGNlcHRpb24geworCQlzZXRGaXh0dXJlKG51bGwpOworCX0KKworfSAvL011bHRpUG9wdWxhdGlvblNJRGlzZWFzZU1vZGVsVGVzdApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kaXNlYXNlbW9kZWxzLm11bHRpcG9wdWxhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL211bHRpcG9wdWxhdGlvbi90ZXN0cy9NdWx0aVBvcHVsYXRpb25TSVJEaXNlYXNlTW9kZWxUZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRpc2Vhc2Vtb2RlbHMubXVsdGlwb3B1bGF0aW9uL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvbXVsdGlwb3B1bGF0aW9uL3Rlc3RzL011bHRpUG9wdWxhdGlvblNJUkRpc2Vhc2VNb2RlbFRlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMGRjNGYzCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kaXNlYXNlbW9kZWxzLm11bHRpcG9wdWxhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL211bHRpcG9wdWxhdGlvbi90ZXN0cy9NdWx0aVBvcHVsYXRpb25TSVJEaXNlYXNlTW9kZWxUZXN0LmphdmEKQEAgLTAsMCArMSw3OCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOSwyMDEwIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLm11bHRpcG9wdWxhdGlvbi50ZXN0czsKKworaW1wb3J0IGp1bml0LnRleHR1aS5UZXN0UnVubmVyOworCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLm11bHRpcG9wdWxhdGlvbi5NdWx0aVBvcHVsYXRpb25TSVJEaXNlYXNlTW9kZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLm11bHRpcG9wdWxhdGlvbi5NdWx0aXBvcHVsYXRpb25GYWN0b3J5OworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiBBIHRlc3QgY2FzZSBmb3IgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPk11bHRpIFBvcHVsYXRpb24gU0lSIERpc2Vhc2UgTW9kZWw8L2I+PC9lbT4nLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBNdWx0aVBvcHVsYXRpb25TSVJEaXNlYXNlTW9kZWxUZXN0IGV4dGVuZHMgTXVsdGlQb3B1bGF0aW9uU0lEaXNlYXNlTW9kZWxUZXN0IHsKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKKwkJVGVzdFJ1bm5lci5ydW4oTXVsdGlQb3B1bGF0aW9uU0lSRGlzZWFzZU1vZGVsVGVzdC5jbGFzcyk7CisJfQorCisJLyoqCisJICogQ29uc3RydWN0cyBhIG5ldyBNdWx0aSBQb3B1bGF0aW9uIFNJUiBEaXNlYXNlIE1vZGVsIHRlc3QgY2FzZSB3aXRoIHRoZSBnaXZlbiBuYW1lLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBNdWx0aVBvcHVsYXRpb25TSVJEaXNlYXNlTW9kZWxUZXN0KFN0cmluZyBuYW1lKSB7CisJCXN1cGVyKG5hbWUpOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIGZpeHR1cmUgZm9yIHRoaXMgTXVsdGkgUG9wdWxhdGlvbiBTSVIgRGlzZWFzZSBNb2RlbCB0ZXN0IGNhc2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIE11bHRpUG9wdWxhdGlvblNJUkRpc2Vhc2VNb2RlbCBnZXRGaXh0dXJlKCkgeworCQlyZXR1cm4gKE11bHRpUG9wdWxhdGlvblNJUkRpc2Vhc2VNb2RlbClmaXh0dXJlOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2Ujc2V0VXAoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgdm9pZCBzZXRVcCgpIHRocm93cyBFeGNlcHRpb24geworCQlzZXRGaXh0dXJlKE11bHRpcG9wdWxhdGlvbkZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZU11bHRpUG9wdWxhdGlvblNJUkRpc2Vhc2VNb2RlbCgpKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlI3RlYXJEb3duKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgdGVhckRvd24oKSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJc2V0Rml4dHVyZShudWxsKTsKKwl9CisKK30gLy9NdWx0aVBvcHVsYXRpb25TSVJEaXNlYXNlTW9kZWxUZXN0CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRpc2Vhc2Vtb2RlbHMubXVsdGlwb3B1bGF0aW9uL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvbXVsdGlwb3B1bGF0aW9uL3Rlc3RzL011bHRpUG9wdWxhdGlvblNlYXNvbmFsRGlzZWFzZU1vZGVsVGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kaXNlYXNlbW9kZWxzLm11bHRpcG9wdWxhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL211bHRpcG9wdWxhdGlvbi90ZXN0cy9NdWx0aVBvcHVsYXRpb25TZWFzb25hbERpc2Vhc2VNb2RlbFRlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYmE1OTM1Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kaXNlYXNlbW9kZWxzLm11bHRpcG9wdWxhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL211bHRpcG9wdWxhdGlvbi90ZXN0cy9NdWx0aVBvcHVsYXRpb25TZWFzb25hbERpc2Vhc2VNb2RlbFRlc3QuamF2YQpAQCAtMCwwICsxLDc5IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5tdWx0aXBvcHVsYXRpb24udGVzdHM7DQorDQorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogDQorICogQ29weXJpZ2h0IChjKSAyMDExIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiANCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIA0KKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCANCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdCANCisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbCANCisgKiANCisgKiBDb250cmlidXRvcnM6IA0KKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gDQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQorDQoraW1wb3J0IGp1bml0LnRleHR1aS5UZXN0UnVubmVyOw0KKw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMubXVsdGlwb3B1bGF0aW9uLk11bHRpUG9wdWxhdGlvblNlYXNvbmFsRGlzZWFzZU1vZGVsOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMubXVsdGlwb3B1bGF0aW9uLk11bHRpcG9wdWxhdGlvbkZhY3Rvcnk7DQorDQorLyoqDQorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisgKiBBIHRlc3QgY2FzZSBmb3IgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPk11bHRpIFBvcHVsYXRpb24gU2Vhc29uYWwgRGlzZWFzZSBNb2RlbDwvYj48L2VtPicuDQorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorICogQGdlbmVyYXRlZA0KKyAqLw0KK3B1YmxpYyBjbGFzcyBNdWx0aVBvcHVsYXRpb25TZWFzb25hbERpc2Vhc2VNb2RlbFRlc3QgZXh0ZW5kcyBNdWx0aVBvcHVsYXRpb25TRUlSRGlzZWFzZU1vZGVsVGVzdCB7DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgew0KKwkJVGVzdFJ1bm5lci5ydW4oTXVsdGlQb3B1bGF0aW9uU2Vhc29uYWxEaXNlYXNlTW9kZWxUZXN0LmNsYXNzKTsNCisJfQ0KKw0KKwkvKioNCisJICogQ29uc3RydWN0cyBhIG5ldyBNdWx0aSBQb3B1bGF0aW9uIFNlYXNvbmFsIERpc2Vhc2UgTW9kZWwgdGVzdCBjYXNlIHdpdGggdGhlIGdpdmVuIG5hbWUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgTXVsdGlQb3B1bGF0aW9uU2Vhc29uYWxEaXNlYXNlTW9kZWxUZXN0KFN0cmluZyBuYW1lKSB7DQorCQlzdXBlcihuYW1lKTsNCisJfQ0KKw0KKwkvKioNCisJICogUmV0dXJucyB0aGUgZml4dHVyZSBmb3IgdGhpcyBNdWx0aSBQb3B1bGF0aW9uIFNlYXNvbmFsIERpc2Vhc2UgTW9kZWwgdGVzdCBjYXNlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJQE92ZXJyaWRlDQorCXByb3RlY3RlZCBNdWx0aVBvcHVsYXRpb25TZWFzb25hbERpc2Vhc2VNb2RlbCBnZXRGaXh0dXJlKCkgew0KKwkJcmV0dXJuIChNdWx0aVBvcHVsYXRpb25TZWFzb25hbERpc2Vhc2VNb2RlbClmaXh0dXJlOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHNlZSBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2Ujc2V0VXAoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlAT3ZlcnJpZGUNCisJcHJvdGVjdGVkIHZvaWQgc2V0VXAoKSB0aHJvd3MgRXhjZXB0aW9uIHsNCisJCXNldEZpeHR1cmUoTXVsdGlwb3B1bGF0aW9uRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlTXVsdGlQb3B1bGF0aW9uU2Vhc29uYWxEaXNlYXNlTW9kZWwoKSk7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAc2VlIGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZSN0ZWFyRG93bigpDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCUBPdmVycmlkZQ0KKwlwcm90ZWN0ZWQgdm9pZCB0ZWFyRG93bigpIHRocm93cyBFeGNlcHRpb24gew0KKwkJc2V0Rml4dHVyZShudWxsKTsNCisJfQ0KKw0KK30gLy9NdWx0aVBvcHVsYXRpb25TZWFzb25hbERpc2Vhc2VNb2RlbFRlc3QNCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRpc2Vhc2Vtb2RlbHMubXVsdGlwb3B1bGF0aW9uL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvbXVsdGlwb3B1bGF0aW9uL3Rlc3RzL011bHRpcG9wdWxhdGlvbkFsbFRlc3RzLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRpc2Vhc2Vtb2RlbHMubXVsdGlwb3B1bGF0aW9uL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvbXVsdGlwb3B1bGF0aW9uL3Rlc3RzL011bHRpcG9wdWxhdGlvbkFsbFRlc3RzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTZjMzc2MAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGlzZWFzZW1vZGVscy5tdWx0aXBvcHVsYXRpb24vc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9tdWx0aXBvcHVsYXRpb24vdGVzdHMvTXVsdGlwb3B1bGF0aW9uQWxsVGVzdHMuamF2YQpAQCAtMCwwICsxLDU1IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5tdWx0aXBvcHVsYXRpb24udGVzdHM7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTAgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3Q7CitpbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RTdWl0ZTsKK2ltcG9ydCBqdW5pdC50ZXh0dWkuVGVzdFJ1bm5lcjsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogQSB0ZXN0IHN1aXRlIGZvciB0aGUgJzxlbT48Yj5NdWx0aXBvcHVsYXRpb248L2I+PC9lbT4nIG1vZGVsLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBNdWx0aXBvcHVsYXRpb25BbGxUZXN0cyBleHRlbmRzIFRlc3RTdWl0ZSB7CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CisJCVRlc3RSdW5uZXIucnVuKHN1aXRlKCkpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBzdGF0aWMgVGVzdCBzdWl0ZSgpIHsKKwkJVGVzdFN1aXRlIHN1aXRlID0gbmV3IE11bHRpcG9wdWxhdGlvbkFsbFRlc3RzKCJNdWx0aXBvcHVsYXRpb24gVGVzdHMiKTsKKwkJc3VpdGUuYWRkVGVzdChNdWx0aXBvcHVsYXRpb25UZXN0cy5zdWl0ZSgpKTsKKwkJcmV0dXJuIHN1aXRlOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBNdWx0aXBvcHVsYXRpb25BbGxUZXN0cyhTdHJpbmcgbmFtZSkgeworCQlzdXBlcihuYW1lKTsKKwl9CisKK30gLy9NdWx0aXBvcHVsYXRpb25BbGxUZXN0cwpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kaXNlYXNlbW9kZWxzLm11bHRpcG9wdWxhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL211bHRpcG9wdWxhdGlvbi90ZXN0cy9NdWx0aXBvcHVsYXRpb25FeGFtcGxlLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRpc2Vhc2Vtb2RlbHMubXVsdGlwb3B1bGF0aW9uL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvbXVsdGlwb3B1bGF0aW9uL3Rlc3RzL011bHRpcG9wdWxhdGlvbkV4YW1wbGUuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ODQ1NzQ4Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kaXNlYXNlbW9kZWxzLm11bHRpcG9wdWxhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL211bHRpcG9wdWxhdGlvbi90ZXN0cy9NdWx0aXBvcHVsYXRpb25FeGFtcGxlLmphdmEKQEAgLTAsMCArMSwxMjQgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLm11bHRpcG9wdWxhdGlvbi50ZXN0czsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAxMCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqYXZhLmlvLkZpbGU7CitpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5EaWFnbm9zdGljOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5VUkk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3Q7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnJlc291cmNlLlJlc291cmNlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5yZXNvdXJjZS5SZXNvdXJjZVNldDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUucmVzb3VyY2UuaW1wbC5SZXNvdXJjZVNldEltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnV0aWwuRGlhZ25vc3RpY2lhbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUueG1pLmltcGwuWE1JUmVzb3VyY2VGYWN0b3J5SW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMubXVsdGlwb3B1bGF0aW9uLk11bHRpUG9wdWxhdGlvblNJRGlzZWFzZU1vZGVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5tdWx0aXBvcHVsYXRpb24uTXVsdGlwb3B1bGF0aW9uRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMubXVsdGlwb3B1bGF0aW9uLk11bHRpcG9wdWxhdGlvblBhY2thZ2U7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIEEgc2FtcGxlIHV0aWxpdHkgZm9yIHRoZSAnPGVtPjxiPm11bHRpcG9wdWxhdGlvbjwvYj48L2VtPicgcGFja2FnZS4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgTXVsdGlwb3B1bGF0aW9uRXhhbXBsZSB7CisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBMb2FkIGFsbCB0aGUgYXJndW1lbnQgZmlsZSBwYXRocyBvciBVUklzIGFzIGluc3RhbmNlcyBvZiB0aGUgbW9kZWwuCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIGFyZ3MgdGhlIGZpbGUgcGF0aHMgb3IgVVJJcy4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgeworCQkvLyBDcmVhdGUgYSByZXNvdXJjZSBzZXQgdG8gaG9sZCB0aGUgcmVzb3VyY2VzLgorCQkvLworCQlSZXNvdXJjZVNldCByZXNvdXJjZVNldCA9IG5ldyBSZXNvdXJjZVNldEltcGwoKTsKKwkJCisJCS8vIFJlZ2lzdGVyIHRoZSBhcHByb3ByaWF0ZSByZXNvdXJjZSBmYWN0b3J5IHRvIGhhbmRsZSBhbGwgZmlsZSBleHRlbnNpb25zLgorCQkvLworCQlyZXNvdXJjZVNldC5nZXRSZXNvdXJjZUZhY3RvcnlSZWdpc3RyeSgpLmdldEV4dGVuc2lvblRvRmFjdG9yeU1hcCgpLnB1dAorCQkJKFJlc291cmNlLkZhY3RvcnkuUmVnaXN0cnkuREVGQVVMVF9FWFRFTlNJT04sIAorCQkJIG5ldyBYTUlSZXNvdXJjZUZhY3RvcnlJbXBsKCkpOworCisJCS8vIFJlZ2lzdGVyIHRoZSBwYWNrYWdlIHRvIGVuc3VyZSBpdCBpcyBhdmFpbGFibGUgZHVyaW5nIGxvYWRpbmcuCisJCS8vCisJCXJlc291cmNlU2V0LmdldFBhY2thZ2VSZWdpc3RyeSgpLnB1dAorCQkJKE11bHRpcG9wdWxhdGlvblBhY2thZ2UuZU5TX1VSSSwgCisJCQkgTXVsdGlwb3B1bGF0aW9uUGFja2FnZS5lSU5TVEFOQ0UpOworICAgICAgICAKKwkJLy8gSWYgdGhlcmUgYXJlIG5vIGFyZ3VtZW50cywgZW1pdCBhbiBhcHByb3ByaWF0ZSB1c2FnZSBtZXNzYWdlLgorCQkvLworCQlpZiAoYXJncy5sZW5ndGggPT0gMCkgeworCQkJU3lzdGVtLm91dC5wcmludGxuKCJFbnRlciBhIGxpc3Qgb2YgZmlsZSBwYXRocyBvciBVUklzIHRoYXQgaGF2ZSBjb250ZW50IGxpa2UgdGhpczoiKTsKKwkJCXRyeSB7CisJCQkJUmVzb3VyY2UgcmVzb3VyY2UgPSByZXNvdXJjZVNldC5jcmVhdGVSZXNvdXJjZShVUkkuY3JlYXRlVVJJKCJodHRwOi8vL015Lm11bHRpcG9wdWxhdGlvbiIpKTsKKwkJCQlNdWx0aVBvcHVsYXRpb25TSURpc2Vhc2VNb2RlbCByb290ID0gTXVsdGlwb3B1bGF0aW9uRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlTXVsdGlQb3B1bGF0aW9uU0lEaXNlYXNlTW9kZWwoKTsKKwkJCQlyZXNvdXJjZS5nZXRDb250ZW50cygpLmFkZChyb290KTsKKwkJCQlyZXNvdXJjZS5zYXZlKFN5c3RlbS5vdXQsIG51bGwpOworCQkJfQorCQkJY2F0Y2ggKElPRXhjZXB0aW9uIGV4Y2VwdGlvbikgeworCQkJCWV4Y2VwdGlvbi5wcmludFN0YWNrVHJhY2UoKTsKKwkJCX0KKwkJfQorCQllbHNlIHsKKwkJCS8vIEl0ZXJhdGUgb3ZlciBhbGwgdGhlIGFyZ3VtZW50cy4KKwkJCS8vCisJCQlmb3IgKGludCBpID0gMDsgaSA8IGFyZ3MubGVuZ3RoOyArK2kpIHsKKwkJCQkvLyBDb25zdHJ1Y3QgdGhlIFVSSSBmb3IgdGhlIGluc3RhbmNlIGZpbGUuCisJCQkJLy8gVGhlIGFyZ3VtZW50IGlzIHRyZWF0ZWQgYXMgYSBmaWxlIHBhdGggb25seSBpZiBpdCBkZW5vdGVzIGFuIGV4aXN0aW5nIGZpbGUuCisJCQkJLy8gT3RoZXJ3aXNlLCBpdCdzIGRpcmVjdGx5IHRyZWF0ZWQgYXMgYSBVUkwuCisJCQkJLy8KKwkJCQlGaWxlIGZpbGUgPSBuZXcgRmlsZShhcmdzW2ldKTsKKwkJCQlVUkkgdXJpID0gZmlsZS5pc0ZpbGUoKSA/IFVSSS5jcmVhdGVGaWxlVVJJKGZpbGUuZ2V0QWJzb2x1dGVQYXRoKCkpOiBVUkkuY3JlYXRlVVJJKGFyZ3NbaV0pOworCisJCQkJdHJ5IHsKKwkJCQkJLy8gRGVtYW5kIGxvYWQgcmVzb3VyY2UgZm9yIHRoaXMgZmlsZS4KKwkJCQkJLy8KKwkJCQkJUmVzb3VyY2UgcmVzb3VyY2UgPSByZXNvdXJjZVNldC5nZXRSZXNvdXJjZSh1cmksIHRydWUpOworCQkJCQlTeXN0ZW0ub3V0LnByaW50bG4oIkxvYWRlZCAiICsgdXJpKTsKKworCQkJCQkvLyBWYWxpZGF0ZSB0aGUgY29udGVudHMgb2YgdGhlIGxvYWRlZCByZXNvdXJjZS4KKwkJCQkJLy8KKwkJCQkJZm9yIChFT2JqZWN0IGVPYmplY3QgOiByZXNvdXJjZS5nZXRDb250ZW50cygpKSB7CisJCQkJCQlEaWFnbm9zdGljIGRpYWdub3N0aWMgPSBEaWFnbm9zdGljaWFuLklOU1RBTkNFLnZhbGlkYXRlKGVPYmplY3QpOworCQkJCQkJaWYgKGRpYWdub3N0aWMuZ2V0U2V2ZXJpdHkoKSAhPSBEaWFnbm9zdGljLk9LKSB7CisJCQkJCQkJcHJpbnREaWFnbm9zdGljKGRpYWdub3N0aWMsICIiKTsKKwkJCQkJCX0KKwkJCQkJfQorCQkJCX0KKwkJCQljYXRjaCAoUnVudGltZUV4Y2VwdGlvbiBleGNlcHRpb24pIHsKKwkJCQkJU3lzdGVtLm91dC5wcmludGxuKCJQcm9ibGVtIGxvYWRpbmcgIiArIHVyaSk7CisJCQkJCWV4Y2VwdGlvbi5wcmludFN0YWNrVHJhY2UoKTsKKwkJCQl9CisJCQl9CisJCX0KKwl9CisJCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBQcmludHMgZGlhZ25vc3RpY3Mgd2l0aCBpbmRlbnRhdGlvbi4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gZGlhZ25vc3RpYyB0aGUgZGlhZ25vc3RpYyB0byBwcmludC4KKwkgKiBAcGFyYW0gaW5kZW50IHRoZSBpbmRlbnRhdGlvbiBmb3IgcHJpbnRpbmcuCisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBzdGF0aWMgdm9pZCBwcmludERpYWdub3N0aWMoRGlhZ25vc3RpYyBkaWFnbm9zdGljLCBTdHJpbmcgaW5kZW50KSB7CisJCVN5c3RlbS5vdXQucHJpbnQoaW5kZW50KTsKKwkJU3lzdGVtLm91dC5wcmludGxuKGRpYWdub3N0aWMuZ2V0TWVzc2FnZSgpKTsKKwkJZm9yIChEaWFnbm9zdGljIGNoaWxkIDogZGlhZ25vc3RpYy5nZXRDaGlsZHJlbigpKSB7CisJCQlwcmludERpYWdub3N0aWMoY2hpbGQsIGluZGVudCArICIgICIpOworCQl9CisJfQorCit9IC8vTXVsdGlwb3B1bGF0aW9uRXhhbXBsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kaXNlYXNlbW9kZWxzLm11bHRpcG9wdWxhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL211bHRpcG9wdWxhdGlvbi90ZXN0cy9NdWx0aXBvcHVsYXRpb25UZXN0cy5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kaXNlYXNlbW9kZWxzLm11bHRpcG9wdWxhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL211bHRpcG9wdWxhdGlvbi90ZXN0cy9NdWx0aXBvcHVsYXRpb25UZXN0cy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQyMDU1NzgKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRpc2Vhc2Vtb2RlbHMubXVsdGlwb3B1bGF0aW9uL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvbXVsdGlwb3B1bGF0aW9uL3Rlc3RzL011bHRpcG9wdWxhdGlvblRlc3RzLmphdmEKQEAgLTAsMCArMSw1OCBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMubXVsdGlwb3B1bGF0aW9uLnRlc3RzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDEwIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0OworaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0U3VpdGU7CitpbXBvcnQganVuaXQudGV4dHVpLlRlc3RSdW5uZXI7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIEEgdGVzdCBzdWl0ZSBmb3IgdGhlICc8ZW0+PGI+bXVsdGlwb3B1bGF0aW9uPC9iPjwvZW0+JyBwYWNrYWdlLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBNdWx0aXBvcHVsYXRpb25UZXN0cyBleHRlbmRzIFRlc3RTdWl0ZSB7CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CisJCVRlc3RSdW5uZXIucnVuKHN1aXRlKCkpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBzdGF0aWMgVGVzdCBzdWl0ZSgpIHsKKwkJVGVzdFN1aXRlIHN1aXRlID0gbmV3IE11bHRpcG9wdWxhdGlvblRlc3RzKCJtdWx0aXBvcHVsYXRpb24gVGVzdHMiKTsKKwkJc3VpdGUuYWRkVGVzdFN1aXRlKE11bHRpUG9wdWxhdGlvblNJRGlzZWFzZU1vZGVsVGVzdC5jbGFzcyk7CisJCXN1aXRlLmFkZFRlc3RTdWl0ZShNdWx0aVBvcHVsYXRpb25TSVJEaXNlYXNlTW9kZWxUZXN0LmNsYXNzKTsKKwkJc3VpdGUuYWRkVGVzdFN1aXRlKE11bHRpUG9wdWxhdGlvblNFSVJEaXNlYXNlTW9kZWxUZXN0LmNsYXNzKTsKKwkJc3VpdGUuYWRkVGVzdFN1aXRlKE11bHRpUG9wdWxhdGlvblNlYXNvbmFsRGlzZWFzZU1vZGVsVGVzdC5jbGFzcyk7CisJCXJldHVybiBzdWl0ZTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgTXVsdGlwb3B1bGF0aW9uVGVzdHMoU3RyaW5nIG5hbWUpIHsKKwkJc3VwZXIobmFtZSk7CisJfQorCit9IC8vTXVsdGlwb3B1bGF0aW9uVGVzdHMKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGlzZWFzZW1vZGVscy5tdWx0aXBvcHVsYXRpb24vdGVzdC54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRpc2Vhc2Vtb2RlbHMubXVsdGlwb3B1bGF0aW9uL3Rlc3QueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM4OTA3ZjAKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRpc2Vhc2Vtb2RlbHMubXVsdGlwb3B1bGF0aW9uL3Rlc3QueG1sCkBAIC0wLDAgKzEsNTMgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+CisKKzxwcm9qZWN0IG5hbWU9InRlc3RzdWl0ZSIgZGVmYXVsdD0icnVuIiBiYXNlZGlyPSIuIj4KKyAgPCEtLSBUaGUgcHJvcGVydHkgJHtlY2xpcHNlLWhvbWV9IHNob3VsZCBiZSBwYXNzZWQgaW50byB0aGlzIHNjcmlwdCAtLT4KKyAgPCEtLSBTZXQgYSBtZWFuaW5nZnVsIGRlZmF1bHQgdmFsdWUgZm9yIHdoZW4gaXQgaXMgbm90LiAtLT4KKyAgPHByb3BlcnR5IG5hbWU9ImVjbGlwc2UtaG9tZSIgdmFsdWU9IiIvPgorCisKKyAgPCEtLSBzZXRzIHRoZSBwcm9wZXJ0aWVzIGVjbGlwc2UtaG9tZSwgYW5kIGxpYnJhcnktZmlsZSAtLT4KKyAgPHByb3BlcnR5IG5hbWU9InBsdWdpbi1uYW1lIiB2YWx1ZT0ib3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kaXNlYXNlbW9kZWxzLm11bHRpcG9wdWxhdGlvbiIvPgorICA8cHJvcGVydHkgbmFtZT0ibGlicmFyeS1maWxlIgorICAgICAgICAgICAgdmFsdWU9IiR7ZWNsaXBzZS1ob21lfS9wbHVnaW5zL29yZy5lY2xpcHNlLnRlc3RfMy4zLjAvbGlicmFyeS54bWwiLz4KKworICA8IS0tIFRoaXMgdGFyZ2V0IGhvbGRzIGFsbCBpbml0aWFsaXphdGlvbiBjb2RlIHRoYXQgbmVlZHMgdG8gYmUgZG9uZSBmb3IgLS0+CisgIDwhLS0gYWxsIHRlc3RzIHRoYXQgYXJlIHRvIGJlIHJ1bi4gSW5pdGlhbGl6YXRpb24gZm9yIGluZGl2aWR1YWwgdGVzdHMgLS0+CisgIDwhLS0gc2hvdWxkIGJlIGRvbmUgd2l0aGluIHRoZSBib2R5IG9mIHRoZSBzdWl0ZSB0YXJnZXQuIC0tPgorICA8dGFyZ2V0IG5hbWU9ImluaXQiPgorICAgIDx0c3RhbXAvPgorICAgIDxkZWxldGU+CisgICAgICA8ZmlsZXNldCBkaXI9IiR7ZWNsaXBzZS1ob21lfSIgaW5jbHVkZXM9Im9yZyoueG1sIi8+CisgICAgPC9kZWxldGU+CisgIDwvdGFyZ2V0PgorCisgIDwhLS0gVGhpcyB0YXJnZXQgZGVmaW5lcyB0aGUgdGVzdHMgdGhhdCBuZWVkIHRvIGJlIHJ1bi4gLS0+CisgIDx0YXJnZXQgbmFtZT0ic3VpdGUiPgorICAgIDxwcm9wZXJ0eSBuYW1lPSJkYXRhLWRpciIgdmFsdWU9IiR7ZWNsaXBzZS1ob21lfS93b3Jrc3BhY2UiLz4KKyAgICA8ZGVsZXRlIGRpcj0iJHtkYXRhLWRpcn0iIHF1aWV0PSJ0cnVlIi8+CisgICAgPGFudCB0YXJnZXQ9InVpLXRlc3QiIGFudGZpbGU9IiR7bGlicmFyeS1maWxlfSIgZGlyPSIke2VjbGlwc2UtaG9tZX0iPgorICAgICAgPHByb3BlcnR5IG5hbWU9ImRhdGEtZGlyIiB2YWx1ZT0iJHtkYXRhLWRpcn0iLz4KKyAgICAgIDxwcm9wZXJ0eSBuYW1lPSJwbHVnaW4tbmFtZSIgdmFsdWU9IiR7cGx1Z2luLW5hbWV9Ii8+CisgICAgICA8cHJvcGVydHkgbmFtZT0iY2xhc3NuYW1lIiB2YWx1ZT0ib3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLm11bHRpcG9wdWxhdGlvbi50ZXN0cy5NdWx0aXBvcHVsYXRpb25BbGxUZXN0cyIvPgorICAgIDwvYW50PgorICA8L3RhcmdldD4KKworICA8IS0tIFRoaXMgdGFyZ2V0IGhvbGRzIGNvZGUgdG8gY2xlYW51cCB0aGUgdGVzdGluZyBlbnZpcm9ubWVudCBhZnRlciAtLT4KKyAgPCEtLSBhZnRlciBhbGwgb2YgdGhlIHRlc3RzIGhhdmUgYmVlbiBydW4uIFlvdSBjYW4gdXNlIHRoaXMgdGFyZ2V0IHRvIC0tPgorICA8IS0tIGRlbGV0ZSB0ZW1wb3JhcnkgZmlsZXMgdGhhdCBoYXZlIGJlZW4gY3JlYXRlZC4gLS0+CisgIDx0YXJnZXQgbmFtZT0iY2xlYW51cCI+CisgIDwvdGFyZ2V0PgorCisgIDwhLS0gVGhpcyB0YXJnZXQgcnVucyB0aGUgdGVzdCBzdWl0ZS4gQW55IGFjdGlvbnMgdGhhdCBuZWVkIHRvIGhhcHBlbiAtLT4KKyAgPCEtLSBhZnRlciBhbGwgdGhlIHRlc3RzIGhhdmUgYmVlbiBydW4gc2hvdWxkIGdvIGhlcmUuIC0tPgorICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdCxzdWl0ZSxjbGVhbnVwIj4KKyAgICA8YW50IHRhcmdldD0iY29sbGVjdCIgYW50ZmlsZT0iJHtsaWJyYXJ5LWZpbGV9IiBkaXI9IiR7ZWNsaXBzZS1ob21lfSI+CisgICAgICA8cHJvcGVydHkgbmFtZT0iaW5jbHVkZXMiIHZhbHVlPSJvcmcqLnhtbCIvPgorICAgICAgPHByb3BlcnR5IG5hbWU9Im91dHB1dC1maWxlIiB2YWx1ZT0iJHtwbHVnaW4tbmFtZX0ueG1sIi8+CisgICAgPC9hbnQ+CisgIDwvdGFyZ2V0PgorCisgIDwhLS0gVGhpcyB0YXJnZXQgcnVucyB0aGUgcGVyZm9ybWFuY2UgdGVzdCBzdWl0ZXMuIC0tPgorICA8dGFyZ2V0IG5hbWU9InBlcmZvcm1hbmNlIj4KKyAgPC90YXJnZXQ+Cis8L3Byb2plY3Q+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLy5jbGFzc3BhdGggYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLy5jbGFzc3BhdGgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWQyYmMxMgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGlzZWFzZW1vZGVscy52ZWN0b3IvLmNsYXNzcGF0aApAQCAtMCwwICsxLDcgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+DQorPGNsYXNzcGF0aD4NCisJPGNsYXNzcGF0aGVudHJ5IGtpbmQ9InNyYyIgcGF0aD0ic3JjIi8+DQorCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJjb24iIHBhdGg9Im9yZy5lY2xpcHNlLmpkdC5sYXVuY2hpbmcuSlJFX0NPTlRBSU5FUi9vcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwuZGVidWcudWkubGF1bmNoZXIuU3RhbmRhcmRWTVR5cGUvSmF2YVNFLTEuNiIvPg0KKwk8Y2xhc3NwYXRoZW50cnkga2luZD0iY29uIiBwYXRoPSJvcmcuZWNsaXBzZS5wZGUuY29yZS5yZXF1aXJlZFBsdWdpbnMiLz4NCisJPGNsYXNzcGF0aGVudHJ5IGtpbmQ9Im91dHB1dCIgcGF0aD0iYmluIi8+DQorPC9jbGFzc3BhdGg+DQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kaXNlYXNlbW9kZWxzLnZlY3Rvci8ucHJvamVjdCBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGlzZWFzZW1vZGVscy52ZWN0b3IvLnByb2plY3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmY3MzU1YwotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGlzZWFzZW1vZGVscy52ZWN0b3IvLnByb2plY3QKQEAgLTAsMCArMSwyOCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4NCis8cHJvamVjdERlc2NyaXB0aW9uPg0KKwk8bmFtZT5vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRpc2Vhc2Vtb2RlbHMudmVjdG9yPC9uYW1lPg0KKwk8Y29tbWVudD48L2NvbW1lbnQ+DQorCTxwcm9qZWN0cz4NCisJPC9wcm9qZWN0cz4NCisJPGJ1aWxkU3BlYz4NCisJCTxidWlsZENvbW1hbmQ+DQorCQkJPG5hbWU+b3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YWJ1aWxkZXI8L25hbWU+DQorCQkJPGFyZ3VtZW50cz4NCisJCQk8L2FyZ3VtZW50cz4NCisJCTwvYnVpbGRDb21tYW5kPg0KKwkJPGJ1aWxkQ29tbWFuZD4NCisJCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuTWFuaWZlc3RCdWlsZGVyPC9uYW1lPg0KKwkJCTxhcmd1bWVudHM+DQorCQkJPC9hcmd1bWVudHM+DQorCQk8L2J1aWxkQ29tbWFuZD4NCisJCTxidWlsZENvbW1hbmQ+DQorCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLlNjaGVtYUJ1aWxkZXI8L25hbWU+DQorCQkJPGFyZ3VtZW50cz4NCisJCQk8L2FyZ3VtZW50cz4NCisJCTwvYnVpbGRDb21tYW5kPg0KKwk8L2J1aWxkU3BlYz4NCisJPG5hdHVyZXM+DQorCQk8bmF0dXJlPm9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFuYXR1cmU8L25hdHVyZT4NCisJCTxuYXR1cmU+b3JnLmVjbGlwc2UucGRlLlBsdWdpbk5hdHVyZTwvbmF0dXJlPg0KKwk8L25hdHVyZXM+DQorPC9wcm9qZWN0RGVzY3JpcHRpb24+DQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kaXNlYXNlbW9kZWxzLnZlY3Rvci9NRVRBLUlORi9NQU5JRkVTVC5NRiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGlzZWFzZW1vZGVscy52ZWN0b3IvTUVUQS1JTkYvTUFOSUZFU1QuTUYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODRmZWI2OQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGlzZWFzZW1vZGVscy52ZWN0b3IvTUVUQS1JTkYvTUFOSUZFU1QuTUYKQEAgLTAsMCArMSwyMCBAQAorTWFuaWZlc3QtVmVyc2lvbjogMS4wDQorQnVuZGxlLU1hbmlmZXN0VmVyc2lvbjogMg0KK0J1bmRsZS1OYW1lOiAlcGx1Z2luTmFtZQ0KK0J1bmRsZS1TeW1ib2xpY05hbWU6IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IudGVzdHM7c2luZ2xldG9uOj10cnVlDQorQnVuZGxlLVZlcnNpb246IDEuMC4wLnF1YWxpZmllcg0KK0J1bmRsZS1DbGFzc1BhdGg6IC4NCitCdW5kbGUtVmVuZG9yOiAlcHJvdmlkZXJOYW1lDQorQnVuZGxlLUxvY2FsaXphdGlvbjogcGx1Z2luDQorQnVuZGxlLVJlcXVpcmVkRXhlY3V0aW9uRW52aXJvbm1lbnQ6IEoyU0UtMS41DQorRXhwb3J0LVBhY2thZ2U6IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IudGVzdHMNCitSZXF1aXJlLUJ1bmRsZTogb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLA0KKyBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yO3Zpc2liaWxpdHk6PXJlZXhwb3J0LA0KKyBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHM7dmlzaWJpbGl0eTo9cmVleHBvcnQsDQorIG9yZy5lY2xpcHNlLnN0ZW0uY29yZTt2aXNpYmlsaXR5Oj1yZWV4cG9ydCwNCisgb3JnLmVjbGlwc2UuZW1mLmVjb3JlO3Zpc2liaWxpdHk6PXJlZXhwb3J0LA0KKyBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zO3Zpc2liaWxpdHk6PXJlZXhwb3J0LA0KKyBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHM7dmlzaWJpbGl0eTo9cmVleHBvcnQsDQorIG9yZy5lY2xpcHNlLmVtZi5lY29yZS54bWk7dmlzaWJpbGl0eTo9cmVleHBvcnQsDQorIG9yZy5qdW5pdDt2aXNpYmlsaXR5Oj1yZWV4cG9ydA0KK0J1bmRsZS1BY3RpdmF0aW9uUG9saWN5OiBsYXp5DQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kaXNlYXNlbW9kZWxzLnZlY3Rvci9idWlsZC5wcm9wZXJ0aWVzIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kaXNlYXNlbW9kZWxzLnZlY3Rvci9idWlsZC5wcm9wZXJ0aWVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU5ZDYwOTgKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRpc2Vhc2Vtb2RlbHMudmVjdG9yL2J1aWxkLnByb3BlcnRpZXMKQEAgLTAsMCArMSwxMiBAQAorDQorIyA8Y29weXJpZ2h0Pg0KKyMgPC9jb3B5cmlnaHQ+DQorIw0KKyMgJElkJA0KKw0KK2Jpbi5pbmNsdWRlcyA9IC4sXA0KKyAgICAgICAgICAgICAgIE1FVEEtSU5GLyxcDQorICAgICAgICAgICAgICAgcGx1Z2luLnByb3BlcnRpZXMNCitqYXJzLmNvbXBpbGUub3JkZXIgPSAuDQorc291cmNlLi4gPSBzcmMvDQorb3V0cHV0Li4gPSBiaW4vDQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kaXNlYXNlbW9kZWxzLnZlY3Rvci9wbHVnaW4ucHJvcGVydGllcyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGlzZWFzZW1vZGVscy52ZWN0b3IvcGx1Z2luLnByb3BlcnRpZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGMxZmYxMQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGlzZWFzZW1vZGVscy52ZWN0b3IvcGx1Z2luLnByb3BlcnRpZXMKQEAgLTAsMCArMSw4IEBACisNCisjIDxjb3B5cmlnaHQ+DQorIyA8L2NvcHlyaWdodD4NCisjDQorIyAkSWQkDQorDQorcGx1Z2luTmFtZSA9IFZlY3RvciBUZXN0cw0KK3Byb3ZpZGVyTmFtZSA9IHd3dy5leGFtcGxlLm9yZw0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGlzZWFzZW1vZGVscy52ZWN0b3Ivc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy92ZWN0b3IvdGVzdHMvRGVuZ3VlTW9kZWxIb3N0TGFiZWxUZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRpc2Vhc2Vtb2RlbHMudmVjdG9yL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvdmVjdG9yL3Rlc3RzL0Rlbmd1ZU1vZGVsSG9zdExhYmVsVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ5NjQ4Y2UKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRpc2Vhc2Vtb2RlbHMudmVjdG9yL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvdmVjdG9yL3Rlc3RzL0Rlbmd1ZU1vZGVsSG9zdExhYmVsVGVzdC5qYXZhCkBAIC0wLDAgKzEsOTMgQEAKKy8qKg0KKyAqIDxjb3B5cmlnaHQ+DQorICogPC9jb3B5cmlnaHQ+DQorICoNCisgKiAkSWQkDQorICovDQorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLnRlc3RzOw0KKw0KK2ltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7DQorDQoraW1wb3J0IGp1bml0LnRleHR1aS5UZXN0UnVubmVyOw0KKw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLkRlbmd1ZU1vZGVsSG9zdExhYmVsOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLlZlY3RvckZhY3Rvcnk7DQorDQorLyoqDQorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisgKiBBIHRlc3QgY2FzZSBmb3IgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPkRlbmd1ZSBNb2RlbCBIb3N0IExhYmVsPC9iPjwvZW0+Jy4NCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisgKiBAZ2VuZXJhdGVkDQorICovDQorcHVibGljIGNsYXNzIERlbmd1ZU1vZGVsSG9zdExhYmVsVGVzdCBleHRlbmRzIFRlc3RDYXNlIHsNCisNCisJLyoqDQorCSAqIFRoZSBmaXh0dXJlIGZvciB0aGlzIERlbmd1ZSBNb2RlbCBIb3N0IExhYmVsIHRlc3QgY2FzZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCBEZW5ndWVNb2RlbEhvc3RMYWJlbCBmaXh0dXJlID0gbnVsbDsNCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7DQorCQlUZXN0UnVubmVyLnJ1bihEZW5ndWVNb2RlbEhvc3RMYWJlbFRlc3QuY2xhc3MpOw0KKwl9DQorDQorCS8qKg0KKwkgKiBDb25zdHJ1Y3RzIGEgbmV3IERlbmd1ZSBNb2RlbCBIb3N0IExhYmVsIHRlc3QgY2FzZSB3aXRoIHRoZSBnaXZlbiBuYW1lLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIERlbmd1ZU1vZGVsSG9zdExhYmVsVGVzdChTdHJpbmcgbmFtZSkgew0KKwkJc3VwZXIobmFtZSk7DQorCX0NCisNCisJLyoqDQorCSAqIFNldHMgdGhlIGZpeHR1cmUgZm9yIHRoaXMgRGVuZ3VlIE1vZGVsIEhvc3QgTGFiZWwgdGVzdCBjYXNlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIHZvaWQgc2V0Rml4dHVyZShEZW5ndWVNb2RlbEhvc3RMYWJlbCBmaXh0dXJlKSB7DQorCQl0aGlzLmZpeHR1cmUgPSBmaXh0dXJlOw0KKwl9DQorDQorCS8qKg0KKwkgKiBSZXR1cm5zIHRoZSBmaXh0dXJlIGZvciB0aGlzIERlbmd1ZSBNb2RlbCBIb3N0IExhYmVsIHRlc3QgY2FzZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCBEZW5ndWVNb2RlbEhvc3RMYWJlbCBnZXRGaXh0dXJlKCkgew0KKwkJcmV0dXJuIGZpeHR1cmU7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAc2VlIGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZSNzZXRVcCgpDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCUBPdmVycmlkZQ0KKwlwcm90ZWN0ZWQgdm9pZCBzZXRVcCgpIHRocm93cyBFeGNlcHRpb24gew0KKwkJc2V0Rml4dHVyZShWZWN0b3JGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVEZW5ndWVNb2RlbEhvc3RMYWJlbCgpKTsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBzZWUganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlI3RlYXJEb3duKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJQE92ZXJyaWRlDQorCXByb3RlY3RlZCB2b2lkIHRlYXJEb3duKCkgdGhyb3dzIEV4Y2VwdGlvbiB7DQorCQlzZXRGaXh0dXJlKG51bGwpOw0KKwl9DQorDQorfSAvL0Rlbmd1ZU1vZGVsSG9zdExhYmVsVGVzdA0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGlzZWFzZW1vZGVscy52ZWN0b3Ivc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy92ZWN0b3IvdGVzdHMvRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZVRlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGlzZWFzZW1vZGVscy52ZWN0b3Ivc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy92ZWN0b3IvdGVzdHMvRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZVRlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZGM3MDgzCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kaXNlYXNlbW9kZWxzLnZlY3Rvci9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3ZlY3Rvci90ZXN0cy9EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlVGVzdC5qYXZhCkBAIC0wLDAgKzEsOTMgQEAKKy8qKg0KKyAqIDxjb3B5cmlnaHQ+DQorICogPC9jb3B5cmlnaHQ+DQorICoNCisgKiAkSWQkDQorICovDQorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLnRlc3RzOw0KKw0KK2ltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7DQorDQoraW1wb3J0IGp1bml0LnRleHR1aS5UZXN0UnVubmVyOw0KKw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLkRlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWU7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuVmVjdG9yRmFjdG9yeTsNCisNCisvKioNCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKyAqIEEgdGVzdCBjYXNlIGZvciB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+RGVuZ3VlIE1vZGVsIEhvc3QgTGFiZWwgVmFsdWU8L2I+PC9lbT4nLg0KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKyAqIEBnZW5lcmF0ZWQNCisgKi8NCitwdWJsaWMgY2xhc3MgRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZVRlc3QgZXh0ZW5kcyBUZXN0Q2FzZSB7DQorDQorCS8qKg0KKwkgKiBUaGUgZml4dHVyZSBmb3IgdGhpcyBEZW5ndWUgTW9kZWwgSG9zdCBMYWJlbCBWYWx1ZSB0ZXN0IGNhc2UuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZSBmaXh0dXJlID0gbnVsbDsNCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7DQorCQlUZXN0UnVubmVyLnJ1bihEZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlVGVzdC5jbGFzcyk7DQorCX0NCisNCisJLyoqDQorCSAqIENvbnN0cnVjdHMgYSBuZXcgRGVuZ3VlIE1vZGVsIEhvc3QgTGFiZWwgVmFsdWUgdGVzdCBjYXNlIHdpdGggdGhlIGdpdmVuIG5hbWUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZVRlc3QoU3RyaW5nIG5hbWUpIHsNCisJCXN1cGVyKG5hbWUpOw0KKwl9DQorDQorCS8qKg0KKwkgKiBTZXRzIHRoZSBmaXh0dXJlIGZvciB0aGlzIERlbmd1ZSBNb2RlbCBIb3N0IExhYmVsIFZhbHVlIHRlc3QgY2FzZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCB2b2lkIHNldEZpeHR1cmUoRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZSBmaXh0dXJlKSB7DQorCQl0aGlzLmZpeHR1cmUgPSBmaXh0dXJlOw0KKwl9DQorDQorCS8qKg0KKwkgKiBSZXR1cm5zIHRoZSBmaXh0dXJlIGZvciB0aGlzIERlbmd1ZSBNb2RlbCBIb3N0IExhYmVsIFZhbHVlIHRlc3QgY2FzZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCBEZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlIGdldEZpeHR1cmUoKSB7DQorCQlyZXR1cm4gZml4dHVyZTsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBzZWUganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlI3NldFVwKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJQE92ZXJyaWRlDQorCXByb3RlY3RlZCB2b2lkIHNldFVwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7DQorCQlzZXRGaXh0dXJlKFZlY3RvckZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZURlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWUoKSk7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAc2VlIGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZSN0ZWFyRG93bigpDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCUBPdmVycmlkZQ0KKwlwcm90ZWN0ZWQgdm9pZCB0ZWFyRG93bigpIHRocm93cyBFeGNlcHRpb24gew0KKwkJc2V0Rml4dHVyZShudWxsKTsNCisJfQ0KKw0KK30gLy9EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlVGVzdA0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGlzZWFzZW1vZGVscy52ZWN0b3Ivc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy92ZWN0b3IvdGVzdHMvRGVuZ3VlTW9kZWxUZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRpc2Vhc2Vtb2RlbHMudmVjdG9yL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvdmVjdG9yL3Rlc3RzL0Rlbmd1ZU1vZGVsVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY4NDlmYjcKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRpc2Vhc2Vtb2RlbHMudmVjdG9yL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvdmVjdG9yL3Rlc3RzL0Rlbmd1ZU1vZGVsVGVzdC5qYXZhCkBAIC0wLDAgKzEsNzQgQEAKKy8qKg0KKyAqIDxjb3B5cmlnaHQ+DQorICogPC9jb3B5cmlnaHQ+DQorICoNCisgKiAkSWQkDQorICovDQorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLnRlc3RzOw0KKw0KK2ltcG9ydCBqdW5pdC50ZXh0dWkuVGVzdFJ1bm5lcjsNCisNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbDsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5WZWN0b3JGYWN0b3J5Ow0KKw0KKy8qKg0KKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorICogQSB0ZXN0IGNhc2UgZm9yIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5EZW5ndWUgTW9kZWw8L2I+PC9lbT4nLg0KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKyAqIEBnZW5lcmF0ZWQNCisgKi8NCitwdWJsaWMgY2xhc3MgRGVuZ3VlTW9kZWxUZXN0IGV4dGVuZHMgVmVjdG9yRGlzZWFzZU1vZGVsVGVzdCB7DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgew0KKwkJVGVzdFJ1bm5lci5ydW4oRGVuZ3VlTW9kZWxUZXN0LmNsYXNzKTsNCisJfQ0KKw0KKwkvKioNCisJICogQ29uc3RydWN0cyBhIG5ldyBEZW5ndWUgTW9kZWwgdGVzdCBjYXNlIHdpdGggdGhlIGdpdmVuIG5hbWUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgRGVuZ3VlTW9kZWxUZXN0KFN0cmluZyBuYW1lKSB7DQorCQlzdXBlcihuYW1lKTsNCisJfQ0KKw0KKwkvKioNCisJICogUmV0dXJucyB0aGUgZml4dHVyZSBmb3IgdGhpcyBEZW5ndWUgTW9kZWwgdGVzdCBjYXNlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJQE92ZXJyaWRlDQorCXByb3RlY3RlZCBEZW5ndWVNb2RlbCBnZXRGaXh0dXJlKCkgew0KKwkJcmV0dXJuIChEZW5ndWVNb2RlbClmaXh0dXJlOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHNlZSBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2Ujc2V0VXAoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlAT3ZlcnJpZGUNCisJcHJvdGVjdGVkIHZvaWQgc2V0VXAoKSB0aHJvd3MgRXhjZXB0aW9uIHsNCisJCXNldEZpeHR1cmUoVmVjdG9yRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlRGVuZ3VlTW9kZWwoKSk7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAc2VlIGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZSN0ZWFyRG93bigpDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCUBPdmVycmlkZQ0KKwlwcm90ZWN0ZWQgdm9pZCB0ZWFyRG93bigpIHRocm93cyBFeGNlcHRpb24gew0KKwkJc2V0Rml4dHVyZShudWxsKTsNCisJfQ0KKw0KK30gLy9EZW5ndWVNb2RlbFRlc3QNCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRpc2Vhc2Vtb2RlbHMudmVjdG9yL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvdmVjdG9yL3Rlc3RzL0Rlbmd1ZU1vZGVsVmVjdG9yTGFiZWxUZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRpc2Vhc2Vtb2RlbHMudmVjdG9yL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvdmVjdG9yL3Rlc3RzL0Rlbmd1ZU1vZGVsVmVjdG9yTGFiZWxUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjE5MzRmZQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGlzZWFzZW1vZGVscy52ZWN0b3Ivc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy92ZWN0b3IvdGVzdHMvRGVuZ3VlTW9kZWxWZWN0b3JMYWJlbFRlc3QuamF2YQpAQCAtMCwwICsxLDkzIEBACisvKioNCisgKiA8Y29weXJpZ2h0Pg0KKyAqIDwvY29weXJpZ2h0Pg0KKyAqDQorICogJElkJA0KKyAqLw0KK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci50ZXN0czsNCisNCitpbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOw0KKw0KK2ltcG9ydCBqdW5pdC50ZXh0dWkuVGVzdFJ1bm5lcjsNCisNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbFZlY3RvckxhYmVsOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLlZlY3RvckZhY3Rvcnk7DQorDQorLyoqDQorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisgKiBBIHRlc3QgY2FzZSBmb3IgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPkRlbmd1ZSBNb2RlbCBWZWN0b3IgTGFiZWw8L2I+PC9lbT4nLg0KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKyAqIEBnZW5lcmF0ZWQNCisgKi8NCitwdWJsaWMgY2xhc3MgRGVuZ3VlTW9kZWxWZWN0b3JMYWJlbFRlc3QgZXh0ZW5kcyBUZXN0Q2FzZSB7DQorDQorCS8qKg0KKwkgKiBUaGUgZml4dHVyZSBmb3IgdGhpcyBEZW5ndWUgTW9kZWwgVmVjdG9yIExhYmVsIHRlc3QgY2FzZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCBEZW5ndWVNb2RlbFZlY3RvckxhYmVsIGZpeHR1cmUgPSBudWxsOw0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsNCisJCVRlc3RSdW5uZXIucnVuKERlbmd1ZU1vZGVsVmVjdG9yTGFiZWxUZXN0LmNsYXNzKTsNCisJfQ0KKw0KKwkvKioNCisJICogQ29uc3RydWN0cyBhIG5ldyBEZW5ndWUgTW9kZWwgVmVjdG9yIExhYmVsIHRlc3QgY2FzZSB3aXRoIHRoZSBnaXZlbiBuYW1lLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIERlbmd1ZU1vZGVsVmVjdG9yTGFiZWxUZXN0KFN0cmluZyBuYW1lKSB7DQorCQlzdXBlcihuYW1lKTsNCisJfQ0KKw0KKwkvKioNCisJICogU2V0cyB0aGUgZml4dHVyZSBmb3IgdGhpcyBEZW5ndWUgTW9kZWwgVmVjdG9yIExhYmVsIHRlc3QgY2FzZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCB2b2lkIHNldEZpeHR1cmUoRGVuZ3VlTW9kZWxWZWN0b3JMYWJlbCBmaXh0dXJlKSB7DQorCQl0aGlzLmZpeHR1cmUgPSBmaXh0dXJlOw0KKwl9DQorDQorCS8qKg0KKwkgKiBSZXR1cm5zIHRoZSBmaXh0dXJlIGZvciB0aGlzIERlbmd1ZSBNb2RlbCBWZWN0b3IgTGFiZWwgdGVzdCBjYXNlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIERlbmd1ZU1vZGVsVmVjdG9yTGFiZWwgZ2V0Rml4dHVyZSgpIHsNCisJCXJldHVybiBmaXh0dXJlOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHNlZSBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2Ujc2V0VXAoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlAT3ZlcnJpZGUNCisJcHJvdGVjdGVkIHZvaWQgc2V0VXAoKSB0aHJvd3MgRXhjZXB0aW9uIHsNCisJCXNldEZpeHR1cmUoVmVjdG9yRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlRGVuZ3VlTW9kZWxWZWN0b3JMYWJlbCgpKTsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBzZWUganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlI3RlYXJEb3duKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJQE92ZXJyaWRlDQorCXByb3RlY3RlZCB2b2lkIHRlYXJEb3duKCkgdGhyb3dzIEV4Y2VwdGlvbiB7DQorCQlzZXRGaXh0dXJlKG51bGwpOw0KKwl9DQorDQorfSAvL0Rlbmd1ZU1vZGVsVmVjdG9yTGFiZWxUZXN0DQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kaXNlYXNlbW9kZWxzLnZlY3Rvci9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3ZlY3Rvci90ZXN0cy9EZW5ndWVNb2RlbFZlY3RvckxhYmVsVmFsdWVUZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRpc2Vhc2Vtb2RlbHMudmVjdG9yL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvdmVjdG9yL3Rlc3RzL0Rlbmd1ZU1vZGVsVmVjdG9yTGFiZWxWYWx1ZVRlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ODY0ZTMwCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kaXNlYXNlbW9kZWxzLnZlY3Rvci9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3ZlY3Rvci90ZXN0cy9EZW5ndWVNb2RlbFZlY3RvckxhYmVsVmFsdWVUZXN0LmphdmEKQEAgLTAsMCArMSw5MyBAQAorLyoqDQorICogPGNvcHlyaWdodD4NCisgKiA8L2NvcHlyaWdodD4NCisgKg0KKyAqICRJZCQNCisgKi8NCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IudGVzdHM7DQorDQoraW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsNCisNCitpbXBvcnQganVuaXQudGV4dHVpLlRlc3RSdW5uZXI7DQorDQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWxWZWN0b3JMYWJlbFZhbHVlOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLlZlY3RvckZhY3Rvcnk7DQorDQorLyoqDQorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisgKiBBIHRlc3QgY2FzZSBmb3IgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPkRlbmd1ZSBNb2RlbCBWZWN0b3IgTGFiZWwgVmFsdWU8L2I+PC9lbT4nLg0KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKyAqIEBnZW5lcmF0ZWQNCisgKi8NCitwdWJsaWMgY2xhc3MgRGVuZ3VlTW9kZWxWZWN0b3JMYWJlbFZhbHVlVGVzdCBleHRlbmRzIFRlc3RDYXNlIHsNCisNCisJLyoqDQorCSAqIFRoZSBmaXh0dXJlIGZvciB0aGlzIERlbmd1ZSBNb2RlbCBWZWN0b3IgTGFiZWwgVmFsdWUgdGVzdCBjYXNlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIERlbmd1ZU1vZGVsVmVjdG9yTGFiZWxWYWx1ZSBmaXh0dXJlID0gbnVsbDsNCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7DQorCQlUZXN0UnVubmVyLnJ1bihEZW5ndWVNb2RlbFZlY3RvckxhYmVsVmFsdWVUZXN0LmNsYXNzKTsNCisJfQ0KKw0KKwkvKioNCisJICogQ29uc3RydWN0cyBhIG5ldyBEZW5ndWUgTW9kZWwgVmVjdG9yIExhYmVsIFZhbHVlIHRlc3QgY2FzZSB3aXRoIHRoZSBnaXZlbiBuYW1lLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIERlbmd1ZU1vZGVsVmVjdG9yTGFiZWxWYWx1ZVRlc3QoU3RyaW5nIG5hbWUpIHsNCisJCXN1cGVyKG5hbWUpOw0KKwl9DQorDQorCS8qKg0KKwkgKiBTZXRzIHRoZSBmaXh0dXJlIGZvciB0aGlzIERlbmd1ZSBNb2RlbCBWZWN0b3IgTGFiZWwgVmFsdWUgdGVzdCBjYXNlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIHZvaWQgc2V0Rml4dHVyZShEZW5ndWVNb2RlbFZlY3RvckxhYmVsVmFsdWUgZml4dHVyZSkgew0KKwkJdGhpcy5maXh0dXJlID0gZml4dHVyZTsNCisJfQ0KKw0KKwkvKioNCisJICogUmV0dXJucyB0aGUgZml4dHVyZSBmb3IgdGhpcyBEZW5ndWUgTW9kZWwgVmVjdG9yIExhYmVsIFZhbHVlIHRlc3QgY2FzZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCBEZW5ndWVNb2RlbFZlY3RvckxhYmVsVmFsdWUgZ2V0Rml4dHVyZSgpIHsNCisJCXJldHVybiBmaXh0dXJlOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHNlZSBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2Ujc2V0VXAoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlAT3ZlcnJpZGUNCisJcHJvdGVjdGVkIHZvaWQgc2V0VXAoKSB0aHJvd3MgRXhjZXB0aW9uIHsNCisJCXNldEZpeHR1cmUoVmVjdG9yRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlRGVuZ3VlTW9kZWxWZWN0b3JMYWJlbFZhbHVlKCkpOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHNlZSBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2UjdGVhckRvd24oKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlAT3ZlcnJpZGUNCisJcHJvdGVjdGVkIHZvaWQgdGVhckRvd24oKSB0aHJvd3MgRXhjZXB0aW9uIHsNCisJCXNldEZpeHR1cmUobnVsbCk7DQorCX0NCisNCit9IC8vRGVuZ3VlTW9kZWxWZWN0b3JMYWJlbFZhbHVlVGVzdA0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGlzZWFzZW1vZGVscy52ZWN0b3Ivc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy92ZWN0b3IvdGVzdHMvTWFjZG9uYWxkUm9zc0Rpc2Vhc2VNb2RlbFRlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGlzZWFzZW1vZGVscy52ZWN0b3Ivc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy92ZWN0b3IvdGVzdHMvTWFjZG9uYWxkUm9zc0Rpc2Vhc2VNb2RlbFRlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNjMxNzA5Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kaXNlYXNlbW9kZWxzLnZlY3Rvci9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3ZlY3Rvci90ZXN0cy9NYWNkb25hbGRSb3NzRGlzZWFzZU1vZGVsVGVzdC5qYXZhCkBAIC0wLDAgKzEsNzQgQEAKKy8qKg0KKyAqIDxjb3B5cmlnaHQ+DQorICogPC9jb3B5cmlnaHQ+DQorICoNCisgKiAkSWQkDQorICovDQorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLnRlc3RzOw0KKw0KK2ltcG9ydCBqdW5pdC50ZXh0dWkuVGVzdFJ1bm5lcjsNCisNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5NYWNkb25hbGRSb3NzRGlzZWFzZU1vZGVsOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLlZlY3RvckZhY3Rvcnk7DQorDQorLyoqDQorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisgKiBBIHRlc3QgY2FzZSBmb3IgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPk1hY2RvbmFsZCBSb3NzIERpc2Vhc2UgTW9kZWw8L2I+PC9lbT4nLg0KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKyAqIEBnZW5lcmF0ZWQNCisgKi8NCitwdWJsaWMgY2xhc3MgTWFjZG9uYWxkUm9zc0Rpc2Vhc2VNb2RlbFRlc3QgZXh0ZW5kcyBWZWN0b3JEaXNlYXNlTW9kZWxUZXN0IHsNCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7DQorCQlUZXN0UnVubmVyLnJ1bihNYWNkb25hbGRSb3NzRGlzZWFzZU1vZGVsVGVzdC5jbGFzcyk7DQorCX0NCisNCisJLyoqDQorCSAqIENvbnN0cnVjdHMgYSBuZXcgTWFjZG9uYWxkIFJvc3MgRGlzZWFzZSBNb2RlbCB0ZXN0IGNhc2Ugd2l0aCB0aGUgZ2l2ZW4gbmFtZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBNYWNkb25hbGRSb3NzRGlzZWFzZU1vZGVsVGVzdChTdHJpbmcgbmFtZSkgew0KKwkJc3VwZXIobmFtZSk7DQorCX0NCisNCisJLyoqDQorCSAqIFJldHVybnMgdGhlIGZpeHR1cmUgZm9yIHRoaXMgTWFjZG9uYWxkIFJvc3MgRGlzZWFzZSBNb2RlbCB0ZXN0IGNhc2UuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlAT3ZlcnJpZGUNCisJcHJvdGVjdGVkIE1hY2RvbmFsZFJvc3NEaXNlYXNlTW9kZWwgZ2V0Rml4dHVyZSgpIHsNCisJCXJldHVybiAoTWFjZG9uYWxkUm9zc0Rpc2Vhc2VNb2RlbClmaXh0dXJlOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHNlZSBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2Ujc2V0VXAoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlAT3ZlcnJpZGUNCisJcHJvdGVjdGVkIHZvaWQgc2V0VXAoKSB0aHJvd3MgRXhjZXB0aW9uIHsNCisJCXNldEZpeHR1cmUoVmVjdG9yRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlTWFjZG9uYWxkUm9zc0Rpc2Vhc2VNb2RlbCgpKTsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBzZWUganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlI3RlYXJEb3duKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJQE92ZXJyaWRlDQorCXByb3RlY3RlZCB2b2lkIHRlYXJEb3duKCkgdGhyb3dzIEV4Y2VwdGlvbiB7DQorCQlzZXRGaXh0dXJlKG51bGwpOw0KKwl9DQorDQorfSAvL01hY2RvbmFsZFJvc3NEaXNlYXNlTW9kZWxUZXN0DQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kaXNlYXNlbW9kZWxzLnZlY3Rvci9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3ZlY3Rvci90ZXN0cy9TaW1wbGVEZW5ndWVNb2RlbFRlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGlzZWFzZW1vZGVscy52ZWN0b3Ivc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy92ZWN0b3IvdGVzdHMvU2ltcGxlRGVuZ3VlTW9kZWxUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODBmODU3NAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGlzZWFzZW1vZGVscy52ZWN0b3Ivc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy92ZWN0b3IvdGVzdHMvU2ltcGxlRGVuZ3VlTW9kZWxUZXN0LmphdmEKQEAgLTAsMCArMSw3NCBAQAorLyoqDQorICogPGNvcHlyaWdodD4NCisgKiA8L2NvcHlyaWdodD4NCisgKg0KKyAqICRJZCQNCisgKi8NCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IudGVzdHM7DQorDQoraW1wb3J0IGp1bml0LnRleHR1aS5UZXN0UnVubmVyOw0KKw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLlNpbXBsZURlbmd1ZU1vZGVsOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLlZlY3RvckZhY3Rvcnk7DQorDQorLyoqDQorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisgKiBBIHRlc3QgY2FzZSBmb3IgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPlNpbXBsZSBEZW5ndWUgTW9kZWw8L2I+PC9lbT4nLg0KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKyAqIEBnZW5lcmF0ZWQNCisgKi8NCitwdWJsaWMgY2xhc3MgU2ltcGxlRGVuZ3VlTW9kZWxUZXN0IGV4dGVuZHMgVmVjdG9yRGlzZWFzZU1vZGVsVGVzdCB7DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgew0KKwkJVGVzdFJ1bm5lci5ydW4oU2ltcGxlRGVuZ3VlTW9kZWxUZXN0LmNsYXNzKTsNCisJfQ0KKw0KKwkvKioNCisJICogQ29uc3RydWN0cyBhIG5ldyBTaW1wbGUgRGVuZ3VlIE1vZGVsIHRlc3QgY2FzZSB3aXRoIHRoZSBnaXZlbiBuYW1lLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIFNpbXBsZURlbmd1ZU1vZGVsVGVzdChTdHJpbmcgbmFtZSkgew0KKwkJc3VwZXIobmFtZSk7DQorCX0NCisNCisJLyoqDQorCSAqIFJldHVybnMgdGhlIGZpeHR1cmUgZm9yIHRoaXMgU2ltcGxlIERlbmd1ZSBNb2RlbCB0ZXN0IGNhc2UuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlAT3ZlcnJpZGUNCisJcHJvdGVjdGVkIFNpbXBsZURlbmd1ZU1vZGVsIGdldEZpeHR1cmUoKSB7DQorCQlyZXR1cm4gKFNpbXBsZURlbmd1ZU1vZGVsKWZpeHR1cmU7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAc2VlIGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZSNzZXRVcCgpDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCUBPdmVycmlkZQ0KKwlwcm90ZWN0ZWQgdm9pZCBzZXRVcCgpIHRocm93cyBFeGNlcHRpb24gew0KKwkJc2V0Rml4dHVyZShWZWN0b3JGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVTaW1wbGVEZW5ndWVNb2RlbCgpKTsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBzZWUganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlI3RlYXJEb3duKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJQE92ZXJyaWRlDQorCXByb3RlY3RlZCB2b2lkIHRlYXJEb3duKCkgdGhyb3dzIEV4Y2VwdGlvbiB7DQorCQlzZXRGaXh0dXJlKG51bGwpOw0KKwl9DQorDQorfSAvL1NpbXBsZURlbmd1ZU1vZGVsVGVzdA0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGlzZWFzZW1vZGVscy52ZWN0b3Ivc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy92ZWN0b3IvdGVzdHMvVmVjdG9yQWxsVGVzdHMuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGlzZWFzZW1vZGVscy52ZWN0b3Ivc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy92ZWN0b3IvdGVzdHMvVmVjdG9yQWxsVGVzdHMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NTlkNWY4Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kaXNlYXNlbW9kZWxzLnZlY3Rvci9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3ZlY3Rvci90ZXN0cy9WZWN0b3JBbGxUZXN0cy5qYXZhCkBAIC0wLDAgKzEsNTEgQEAKKy8qKg0KKyAqIDxjb3B5cmlnaHQ+DQorICogPC9jb3B5cmlnaHQ+DQorICoNCisgKiAkSWQkDQorICovDQorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLnRlc3RzOw0KKw0KK2ltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdDsNCitpbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RTdWl0ZTsNCisNCitpbXBvcnQganVuaXQudGV4dHVpLlRlc3RSdW5uZXI7DQorDQorLyoqDQorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisgKiBBIHRlc3Qgc3VpdGUgZm9yIHRoZSAnPGVtPjxiPlZlY3RvcjwvYj48L2VtPicgbW9kZWwuDQorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorICogQGdlbmVyYXRlZA0KKyAqLw0KK3B1YmxpYyBjbGFzcyBWZWN0b3JBbGxUZXN0cyBleHRlbmRzIFRlc3RTdWl0ZSB7DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgew0KKwkJVGVzdFJ1bm5lci5ydW4oc3VpdGUoKSk7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgc3RhdGljIFRlc3Qgc3VpdGUoKSB7DQorCQlUZXN0U3VpdGUgc3VpdGUgPSBuZXcgVmVjdG9yQWxsVGVzdHMoIlZlY3RvciBUZXN0cyIpOw0KKwkJc3VpdGUuYWRkVGVzdChWZWN0b3JUZXN0cy5zdWl0ZSgpKTsNCisJCXJldHVybiBzdWl0ZTsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBWZWN0b3JBbGxUZXN0cyhTdHJpbmcgbmFtZSkgew0KKwkJc3VwZXIobmFtZSk7DQorCX0NCisNCit9IC8vVmVjdG9yQWxsVGVzdHMNCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRpc2Vhc2Vtb2RlbHMudmVjdG9yL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvdmVjdG9yL3Rlc3RzL1ZlY3RvckRpc2Vhc2VNb2RlbFRlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGlzZWFzZW1vZGVscy52ZWN0b3Ivc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy92ZWN0b3IvdGVzdHMvVmVjdG9yRGlzZWFzZU1vZGVsVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYzODk2YmMKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRpc2Vhc2Vtb2RlbHMudmVjdG9yL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvdmVjdG9yL3Rlc3RzL1ZlY3RvckRpc2Vhc2VNb2RlbFRlc3QuamF2YQpAQCAtMCwwICsxLDU5IEBACisvKioNCisgKiA8Y29weXJpZ2h0Pg0KKyAqIDwvY29weXJpZ2h0Pg0KKyAqDQorICogJElkJA0KKyAqLw0KK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci50ZXN0czsNCisNCitpbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOw0KKw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLlZlY3RvckRpc2Vhc2VNb2RlbDsNCisNCisvKioNCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKyAqIEEgdGVzdCBjYXNlIGZvciB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+RGlzZWFzZSBNb2RlbDwvYj48L2VtPicuDQorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorICogQGdlbmVyYXRlZA0KKyAqLw0KK3B1YmxpYyBhYnN0cmFjdCBjbGFzcyBWZWN0b3JEaXNlYXNlTW9kZWxUZXN0IGV4dGVuZHMgVGVzdENhc2Ugew0KKw0KKwkvKioNCisJICogVGhlIGZpeHR1cmUgZm9yIHRoaXMgRGlzZWFzZSBNb2RlbCB0ZXN0IGNhc2UuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgVmVjdG9yRGlzZWFzZU1vZGVsIGZpeHR1cmUgPSBudWxsOw0KKw0KKwkvKioNCisJICogQ29uc3RydWN0cyBhIG5ldyBEaXNlYXNlIE1vZGVsIHRlc3QgY2FzZSB3aXRoIHRoZSBnaXZlbiBuYW1lLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIFZlY3RvckRpc2Vhc2VNb2RlbFRlc3QoU3RyaW5nIG5hbWUpIHsNCisJCXN1cGVyKG5hbWUpOw0KKwl9DQorDQorCS8qKg0KKwkgKiBTZXRzIHRoZSBmaXh0dXJlIGZvciB0aGlzIERpc2Vhc2UgTW9kZWwgdGVzdCBjYXNlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIHZvaWQgc2V0Rml4dHVyZShWZWN0b3JEaXNlYXNlTW9kZWwgZml4dHVyZSkgew0KKwkJdGhpcy5maXh0dXJlID0gZml4dHVyZTsNCisJfQ0KKw0KKwkvKioNCisJICogUmV0dXJucyB0aGUgZml4dHVyZSBmb3IgdGhpcyBEaXNlYXNlIE1vZGVsIHRlc3QgY2FzZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCBWZWN0b3JEaXNlYXNlTW9kZWwgZ2V0Rml4dHVyZSgpIHsNCisJCXJldHVybiBmaXh0dXJlOw0KKwl9DQorDQorfSAvL1ZlY3RvckRpc2Vhc2VNb2RlbFRlc3QNCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRpc2Vhc2Vtb2RlbHMudmVjdG9yL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvdmVjdG9yL3Rlc3RzL1ZlY3RvckV4YW1wbGUuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGlzZWFzZW1vZGVscy52ZWN0b3Ivc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy92ZWN0b3IvdGVzdHMvVmVjdG9yRXhhbXBsZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdiNjlkZjQKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRpc2Vhc2Vtb2RlbHMudmVjdG9yL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvdmVjdG9yL3Rlc3RzL1ZlY3RvckV4YW1wbGUuamF2YQpAQCAtMCwwICsxLDEyNSBAQAorLyoqDQorICogPGNvcHlyaWdodD4NCisgKiA8L2NvcHlyaWdodD4NCisgKg0KKyAqICRJZCQNCisgKi8NCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IudGVzdHM7DQorDQoraW1wb3J0IGphdmEuaW8uRmlsZTsNCitpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsNCisNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLkRpYWdub3N0aWM7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5VUkk7DQorDQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0Ow0KKw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUucmVzb3VyY2UuUmVzb3VyY2U7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5yZXNvdXJjZS5SZXNvdXJjZVNldDsNCisNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnJlc291cmNlLmltcGwuUmVzb3VyY2VTZXRJbXBsOw0KKw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUudXRpbC5EaWFnbm9zdGljaWFuOw0KKw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUueG1pLmltcGwuWE1JUmVzb3VyY2VGYWN0b3J5SW1wbDsNCisNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5NYWNkb25hbGRSb3NzRGlzZWFzZU1vZGVsOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLlZlY3RvckZhY3Rvcnk7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuVmVjdG9yUGFja2FnZTsNCisNCisvKioNCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKyAqIEEgc2FtcGxlIHV0aWxpdHkgZm9yIHRoZSAnPGVtPjxiPnZlY3RvcjwvYj48L2VtPicgcGFja2FnZS4NCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisgKiBAZ2VuZXJhdGVkDQorICovDQorcHVibGljIGNsYXNzIFZlY3RvckV4YW1wbGUgew0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogTG9hZCBhbGwgdGhlIGFyZ3VtZW50IGZpbGUgcGF0aHMgb3IgVVJJcyBhcyBpbnN0YW5jZXMgb2YgdGhlIG1vZGVsLg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHBhcmFtIGFyZ3MgdGhlIGZpbGUgcGF0aHMgb3IgVVJJcy4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgew0KKwkJLy8gQ3JlYXRlIGEgcmVzb3VyY2Ugc2V0IHRvIGhvbGQgdGhlIHJlc291cmNlcy4NCisJCS8vDQorCQlSZXNvdXJjZVNldCByZXNvdXJjZVNldCA9IG5ldyBSZXNvdXJjZVNldEltcGwoKTsNCisJCQ0KKwkJLy8gUmVnaXN0ZXIgdGhlIGFwcHJvcHJpYXRlIHJlc291cmNlIGZhY3RvcnkgdG8gaGFuZGxlIGFsbCBmaWxlIGV4dGVuc2lvbnMuDQorCQkvLw0KKwkJcmVzb3VyY2VTZXQuZ2V0UmVzb3VyY2VGYWN0b3J5UmVnaXN0cnkoKS5nZXRFeHRlbnNpb25Ub0ZhY3RvcnlNYXAoKS5wdXQNCisJCQkoUmVzb3VyY2UuRmFjdG9yeS5SZWdpc3RyeS5ERUZBVUxUX0VYVEVOU0lPTiwgDQorCQkJIG5ldyBYTUlSZXNvdXJjZUZhY3RvcnlJbXBsKCkpOw0KKw0KKwkJLy8gUmVnaXN0ZXIgdGhlIHBhY2thZ2UgdG8gZW5zdXJlIGl0IGlzIGF2YWlsYWJsZSBkdXJpbmcgbG9hZGluZy4NCisJCS8vDQorCQlyZXNvdXJjZVNldC5nZXRQYWNrYWdlUmVnaXN0cnkoKS5wdXQNCisJCQkoVmVjdG9yUGFja2FnZS5lTlNfVVJJLCANCisJCQkgVmVjdG9yUGFja2FnZS5lSU5TVEFOQ0UpOw0KKyAgICAgICAgDQorCQkvLyBJZiB0aGVyZSBhcmUgbm8gYXJndW1lbnRzLCBlbWl0IGFuIGFwcHJvcHJpYXRlIHVzYWdlIG1lc3NhZ2UuDQorCQkvLw0KKwkJaWYgKGFyZ3MubGVuZ3RoID09IDApIHsNCisJCQlTeXN0ZW0ub3V0LnByaW50bG4oIkVudGVyIGEgbGlzdCBvZiBmaWxlIHBhdGhzIG9yIFVSSXMgdGhhdCBoYXZlIGNvbnRlbnQgbGlrZSB0aGlzOiIpOw0KKwkJCXRyeSB7DQorCQkJCVJlc291cmNlIHJlc291cmNlID0gcmVzb3VyY2VTZXQuY3JlYXRlUmVzb3VyY2UoVVJJLmNyZWF0ZVVSSSgiaHR0cDovLy9NeS52ZWN0b3IiKSk7DQorCQkJCU1hY2RvbmFsZFJvc3NEaXNlYXNlTW9kZWwgcm9vdCA9IFZlY3RvckZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZU1hY2RvbmFsZFJvc3NEaXNlYXNlTW9kZWwoKTsNCisJCQkJcmVzb3VyY2UuZ2V0Q29udGVudHMoKS5hZGQocm9vdCk7DQorCQkJCXJlc291cmNlLnNhdmUoU3lzdGVtLm91dCwgbnVsbCk7DQorCQkJfQ0KKwkJCWNhdGNoIChJT0V4Y2VwdGlvbiBleGNlcHRpb24pIHsNCisJCQkJZXhjZXB0aW9uLnByaW50U3RhY2tUcmFjZSgpOw0KKwkJCX0NCisJCX0NCisJCWVsc2Ugew0KKwkJCS8vIEl0ZXJhdGUgb3ZlciBhbGwgdGhlIGFyZ3VtZW50cy4NCisJCQkvLw0KKwkJCWZvciAoaW50IGkgPSAwOyBpIDwgYXJncy5sZW5ndGg7ICsraSkgew0KKwkJCQkvLyBDb25zdHJ1Y3QgdGhlIFVSSSBmb3IgdGhlIGluc3RhbmNlIGZpbGUuDQorCQkJCS8vIFRoZSBhcmd1bWVudCBpcyB0cmVhdGVkIGFzIGEgZmlsZSBwYXRoIG9ubHkgaWYgaXQgZGVub3RlcyBhbiBleGlzdGluZyBmaWxlLg0KKwkJCQkvLyBPdGhlcndpc2UsIGl0J3MgZGlyZWN0bHkgdHJlYXRlZCBhcyBhIFVSTC4NCisJCQkJLy8NCisJCQkJRmlsZSBmaWxlID0gbmV3IEZpbGUoYXJnc1tpXSk7DQorCQkJCVVSSSB1cmkgPSBmaWxlLmlzRmlsZSgpID8gVVJJLmNyZWF0ZUZpbGVVUkkoZmlsZS5nZXRBYnNvbHV0ZVBhdGgoKSk6IFVSSS5jcmVhdGVVUkkoYXJnc1tpXSk7DQorDQorCQkJCXRyeSB7DQorCQkJCQkvLyBEZW1hbmQgbG9hZCByZXNvdXJjZSBmb3IgdGhpcyBmaWxlLg0KKwkJCQkJLy8NCisJCQkJCVJlc291cmNlIHJlc291cmNlID0gcmVzb3VyY2VTZXQuZ2V0UmVzb3VyY2UodXJpLCB0cnVlKTsNCisJCQkJCVN5c3RlbS5vdXQucHJpbnRsbigiTG9hZGVkICIgKyB1cmkpOw0KKw0KKwkJCQkJLy8gVmFsaWRhdGUgdGhlIGNvbnRlbnRzIG9mIHRoZSBsb2FkZWQgcmVzb3VyY2UuDQorCQkJCQkvLw0KKwkJCQkJZm9yIChFT2JqZWN0IGVPYmplY3QgOiByZXNvdXJjZS5nZXRDb250ZW50cygpKSB7DQorCQkJCQkJRGlhZ25vc3RpYyBkaWFnbm9zdGljID0gRGlhZ25vc3RpY2lhbi5JTlNUQU5DRS52YWxpZGF0ZShlT2JqZWN0KTsNCisJCQkJCQlpZiAoZGlhZ25vc3RpYy5nZXRTZXZlcml0eSgpICE9IERpYWdub3N0aWMuT0spIHsNCisJCQkJCQkJcHJpbnREaWFnbm9zdGljKGRpYWdub3N0aWMsICIiKTsNCisJCQkJCQl9DQorCQkJCQl9DQorCQkJCX0NCisJCQkJY2F0Y2ggKFJ1bnRpbWVFeGNlcHRpb24gZXhjZXB0aW9uKSB7DQorCQkJCQlTeXN0ZW0ub3V0LnByaW50bG4oIlByb2JsZW0gbG9hZGluZyAiICsgdXJpKTsNCisJCQkJCWV4Y2VwdGlvbi5wcmludFN0YWNrVHJhY2UoKTsNCisJCQkJfQ0KKwkJCX0NCisJCX0NCisJfQ0KKwkNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIFByaW50cyBkaWFnbm9zdGljcyB3aXRoIGluZGVudGF0aW9uLg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHBhcmFtIGRpYWdub3N0aWMgdGhlIGRpYWdub3N0aWMgdG8gcHJpbnQuDQorCSAqIEBwYXJhbSBpbmRlbnQgdGhlIGluZGVudGF0aW9uIGZvciBwcmludGluZy4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIHN0YXRpYyB2b2lkIHByaW50RGlhZ25vc3RpYyhEaWFnbm9zdGljIGRpYWdub3N0aWMsIFN0cmluZyBpbmRlbnQpIHsNCisJCVN5c3RlbS5vdXQucHJpbnQoaW5kZW50KTsNCisJCVN5c3RlbS5vdXQucHJpbnRsbihkaWFnbm9zdGljLmdldE1lc3NhZ2UoKSk7DQorCQlmb3IgKERpYWdub3N0aWMgY2hpbGQgOiBkaWFnbm9zdGljLmdldENoaWxkcmVuKCkpIHsNCisJCQlwcmludERpYWdub3N0aWMoY2hpbGQsIGluZGVudCArICIgICIpOw0KKwkJfQ0KKwl9DQorDQorfSAvL1ZlY3RvckV4YW1wbGUNCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRpc2Vhc2Vtb2RlbHMudmVjdG9yL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvdmVjdG9yL3Rlc3RzL1ZlY3RvclRlc3RzLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRpc2Vhc2Vtb2RlbHMudmVjdG9yL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvdmVjdG9yL3Rlc3RzL1ZlY3RvclRlc3RzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjY3YWNkMgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGlzZWFzZW1vZGVscy52ZWN0b3Ivc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy92ZWN0b3IvdGVzdHMvVmVjdG9yVGVzdHMuamF2YQpAQCAtMCwwICsxLDU3IEBACisvKioNCisgKiA8Y29weXJpZ2h0Pg0KKyAqIDwvY29weXJpZ2h0Pg0KKyAqDQorICogJElkJA0KKyAqLw0KK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci50ZXN0czsNCisNCitpbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3Q7DQoraW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0U3VpdGU7DQorDQoraW1wb3J0IGp1bml0LnRleHR1aS5UZXN0UnVubmVyOw0KKw0KKy8qKg0KKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorICogQSB0ZXN0IHN1aXRlIGZvciB0aGUgJzxlbT48Yj52ZWN0b3I8L2I+PC9lbT4nIHBhY2thZ2UuDQorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorICogQGdlbmVyYXRlZA0KKyAqLw0KK3B1YmxpYyBjbGFzcyBWZWN0b3JUZXN0cyBleHRlbmRzIFRlc3RTdWl0ZSB7DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgew0KKwkJVGVzdFJ1bm5lci5ydW4oc3VpdGUoKSk7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgc3RhdGljIFRlc3Qgc3VpdGUoKSB7DQorCQlUZXN0U3VpdGUgc3VpdGUgPSBuZXcgVmVjdG9yVGVzdHMoInZlY3RvciBUZXN0cyIpOw0KKwkJc3VpdGUuYWRkVGVzdFN1aXRlKE1hY2RvbmFsZFJvc3NEaXNlYXNlTW9kZWxUZXN0LmNsYXNzKTsNCisJCXN1aXRlLmFkZFRlc3RTdWl0ZShEZW5ndWVNb2RlbFRlc3QuY2xhc3MpOw0KKwkJc3VpdGUuYWRkVGVzdFN1aXRlKFNpbXBsZURlbmd1ZU1vZGVsVGVzdC5jbGFzcyk7DQorCQlzdWl0ZS5hZGRUZXN0U3VpdGUoRGVuZ3VlTW9kZWxIb3N0TGFiZWxUZXN0LmNsYXNzKTsNCisJCXN1aXRlLmFkZFRlc3RTdWl0ZShEZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlVGVzdC5jbGFzcyk7DQorCQlzdWl0ZS5hZGRUZXN0U3VpdGUoRGVuZ3VlTW9kZWxWZWN0b3JMYWJlbFRlc3QuY2xhc3MpOw0KKwkJc3VpdGUuYWRkVGVzdFN1aXRlKERlbmd1ZU1vZGVsVmVjdG9yTGFiZWxWYWx1ZVRlc3QuY2xhc3MpOw0KKwkJcmV0dXJuIHN1aXRlOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIFZlY3RvclRlc3RzKFN0cmluZyBuYW1lKSB7DQorCQlzdXBlcihuYW1lKTsNCisJfQ0KKw0KK30gLy9WZWN0b3JUZXN0cw0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGlzZWFzZW1vZGVscy8uY2xhc3NwYXRoIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kaXNlYXNlbW9kZWxzLy5jbGFzc3BhdGgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzA0ZTg2MQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGlzZWFzZW1vZGVscy8uY2xhc3NwYXRoCkBAIC0wLDAgKzEsNyBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxjbGFzc3BhdGg+CisJPGNsYXNzcGF0aGVudHJ5IGtpbmQ9InNyYyIgcGF0aD0ic3JjIi8+CisJPGNsYXNzcGF0aGVudHJ5IGtpbmQ9ImNvbiIgcGF0aD0ib3JnLmVjbGlwc2UuamR0LmxhdW5jaGluZy5KUkVfQ09OVEFJTkVSL29yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC5kZWJ1Zy51aS5sYXVuY2hlci5TdGFuZGFyZFZNVHlwZS9KMlNFLTEuNSIvPgorCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJjb24iIHBhdGg9Im9yZy5lY2xpcHNlLnBkZS5jb3JlLnJlcXVpcmVkUGx1Z2lucyIvPgorCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJvdXRwdXQiIHBhdGg9ImJpbiIvPgorPC9jbGFzc3BhdGg+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRpc2Vhc2Vtb2RlbHMvLnByb2plY3QgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRpc2Vhc2Vtb2RlbHMvLnByb2plY3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjQ4NjU0NQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGlzZWFzZW1vZGVscy8ucHJvamVjdApAQCAtMCwwICsxLDI4IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPHByb2plY3REZXNjcmlwdGlvbj4KKwk8bmFtZT5vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRpc2Vhc2Vtb2RlbHM8L25hbWU+CisJPGNvbW1lbnQ+PC9jb21tZW50PgorCTxwcm9qZWN0cz4KKwk8L3Byb2plY3RzPgorCTxidWlsZFNwZWM+CisJCTxidWlsZENvbW1hbmQ+CisJCQk8bmFtZT5vcmcuZWNsaXBzZS5qZHQuY29yZS5qYXZhYnVpbGRlcjwvbmFtZT4KKwkJCTxhcmd1bWVudHM+CisJCQk8L2FyZ3VtZW50cz4KKwkJPC9idWlsZENvbW1hbmQ+CisJCTxidWlsZENvbW1hbmQ+CisJCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuTWFuaWZlc3RCdWlsZGVyPC9uYW1lPgorCQkJPGFyZ3VtZW50cz4KKwkJCTwvYXJndW1lbnRzPgorCQk8L2J1aWxkQ29tbWFuZD4KKwkJPGJ1aWxkQ29tbWFuZD4KKwkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5TY2hlbWFCdWlsZGVyPC9uYW1lPgorCQkJPGFyZ3VtZW50cz4KKwkJCTwvYXJndW1lbnRzPgorCQk8L2J1aWxkQ29tbWFuZD4KKwk8L2J1aWxkU3BlYz4KKwk8bmF0dXJlcz4KKwkJPG5hdHVyZT5vcmcuZWNsaXBzZS5qZHQuY29yZS5qYXZhbmF0dXJlPC9uYXR1cmU+CisJCTxuYXR1cmU+b3JnLmVjbGlwc2UucGRlLlBsdWdpbk5hdHVyZTwvbmF0dXJlPgorCTwvbmF0dXJlcz4KKzwvcHJvamVjdERlc2NyaXB0aW9uPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kaXNlYXNlbW9kZWxzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGlzZWFzZW1vZGVscy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYThjMDQ1NQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGlzZWFzZW1vZGVscy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMKQEAgLTAsMCArMSw2OSBAQAorI01vbiBKYW4gMjEgMTI6NDY6NDYgRVNUIDIwMDgKK2VjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb2RlZ2VuLnRhcmdldFBsYXRmb3JtPTEuNQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29tcGxpYW5jZT0xLjUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmRvYy5jb21tZW50LnN1cHBvcnQ9ZW5hYmxlZAorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5hbm5vdGF0aW9uU3VwZXJJbnRlcmZhY2U9aWdub3JlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmFzc2VydElkZW50aWZpZXI9ZXJyb3IKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uYXV0b2JveGluZz13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRlcHJlY2F0aW9uPWlnbm9yZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5kZXByZWNhdGlvbkluRGVwcmVjYXRlZENvZGU9ZGlzYWJsZWQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZGVwcmVjYXRpb25XaGVuT3ZlcnJpZGluZ0RlcHJlY2F0ZWRNZXRob2Q9ZGlzYWJsZWQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZGlzY291cmFnZWRSZWZlcmVuY2U9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5lbXB0eVN0YXRlbWVudD13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmVudW1JZGVudGlmaWVyPWVycm9yCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZhbGx0aHJvdWdoQ2FzZT1pZ25vcmUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZmllbGRIaWRpbmc9aWdub3JlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZpbmFsUGFyYW1ldGVyQm91bmQ9aWdub3JlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZpbmFsbHlCbG9ja05vdENvbXBsZXRpbmdOb3JtYWxseT13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZvcmJpZGRlblJlZmVyZW5jZT1lcnJvcgorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5oaWRkZW5DYXRjaEJsb2NrPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW5jb21wYXRpYmxlTm9uSW5oZXJpdGVkSW50ZXJmYWNlTWV0aG9kPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW5jb21wbGV0ZUVudW1Td2l0Y2g9aWdub3JlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmluZGlyZWN0U3RhdGljQWNjZXNzPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW52YWxpZEphdmFkb2M9aWdub3JlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmludmFsaWRKYXZhZG9jVGFncz1lbmFibGVkCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmludmFsaWRKYXZhZG9jVGFnc0RlcHJlY2F0ZWRSZWY9ZW5hYmxlZAorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbnZhbGlkSmF2YWRvY1RhZ3NOb3RWaXNpYmxlUmVmPWVuYWJsZWQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW52YWxpZEphdmFkb2NUYWdzVmlzaWJpbGl0eT1wdWJsaWMKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubG9jYWxWYXJpYWJsZUhpZGluZz1pZ25vcmUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWV0aG9kV2l0aENvbnN0cnVjdG9yTmFtZT13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdEZXByZWNhdGVkQW5ub3RhdGlvbj1pZ25vcmUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0phdmFkb2NDb21tZW50cz1pZ25vcmUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0phdmFkb2NDb21tZW50c092ZXJyaWRpbmc9ZW5hYmxlZAorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nSmF2YWRvY0NvbW1lbnRzVmlzaWJpbGl0eT1wdWJsaWMKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0phdmFkb2NUYWdzPWlnbm9yZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nSmF2YWRvY1RhZ3NPdmVycmlkaW5nPWVuYWJsZWQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0phdmFkb2NUYWdzVmlzaWJpbGl0eT1wdWJsaWMKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ092ZXJyaWRlQW5ub3RhdGlvbj1pZ25vcmUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ1NlcmlhbFZlcnNpb249d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5ub0VmZmVjdEFzc2lnbm1lbnQ9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5ub0ltcGxpY2l0U3RyaW5nQ29udmVyc2lvbj13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm5vbkV4dGVybmFsaXplZFN0cmluZ0xpdGVyYWw9aWdub3JlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm51bGxSZWZlcmVuY2U9aWdub3JlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm92ZXJyaWRpbmdQYWNrYWdlRGVmYXVsdE1ldGhvZD13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnBhcmFtZXRlckFzc2lnbm1lbnQ9aWdub3JlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnBvc3NpYmxlQWNjaWRlbnRhbEJvb2xlYW5Bc3NpZ25tZW50PXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ucmF3VHlwZVJlZmVyZW5jZT1pZ25vcmUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uc3BlY2lhbFBhcmFtZXRlckhpZGluZ0ZpZWxkPWRpc2FibGVkCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnN0YXRpY0FjY2Vzc1JlY2VpdmVyPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uc3VwcHJlc3NXYXJuaW5ncz1lbmFibGVkCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnN5bnRoZXRpY0FjY2Vzc0VtdWxhdGlvbj13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnR5cGVQYXJhbWV0ZXJIaWRpbmc9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bmNoZWNrZWRUeXBlT3BlcmF0aW9uPWlnbm9yZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bmRvY3VtZW50ZWRFbXB0eUJsb2NrPWlnbm9yZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bmhhbmRsZWRXYXJuaW5nVG9rZW49aWdub3JlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVubmVjZXNzYXJ5RWxzZT1pZ25vcmUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5uZWNlc3NhcnlUeXBlQ2hlY2s9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnF1YWxpZmllZEZpZWxkQWNjZXNzPWlnbm9yZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWREZWNsYXJlZFRocm93bkV4Y2VwdGlvbj13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZERlY2xhcmVkVGhyb3duRXhjZXB0aW9uV2hlbk92ZXJyaWRpbmc9ZW5hYmxlZAorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRJbXBvcnQ9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRMYWJlbD13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZExvY2FsPWlnbm9yZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRQYXJhbWV0ZXI9aWdub3JlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZFBhcmFtZXRlcldoZW5JbXBsZW1lbnRpbmdBYnN0cmFjdD1lbmFibGVkCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZFBhcmFtZXRlcldoZW5PdmVycmlkaW5nQ29uY3JldGU9ZW5hYmxlZAorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRQcml2YXRlTWVtYmVyPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udmFyYXJnc0FyZ3VtZW50TmVlZENhc3Q9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuc291cmNlPTEuNQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kaXNlYXNlbW9kZWxzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQudWkucHJlZnMgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRpc2Vhc2Vtb2RlbHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC51aS5wcmVmcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZGZiZjVkCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kaXNlYXNlbW9kZWxzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQudWkucHJlZnMKQEAgLTAsMCArMSw1MCBAQAorI1dlZCBKdWwgMjUgMTQ6MDQ6MTEgRURUIDIwMDcKK2NsZWFudXAuYWRkX2RlZmF1bHRfc2VyaWFsX3ZlcnNpb25faWQ9dHJ1ZQorY2xlYW51cC5hZGRfZ2VuZXJhdGVkX3NlcmlhbF92ZXJzaW9uX2lkPWZhbHNlCitjbGVhbnVwLmFkZF9taXNzaW5nX2Fubm90YXRpb25zPXRydWUKK2NsZWFudXAuYWRkX21pc3NpbmdfZGVwcmVjYXRlZF9hbm5vdGF0aW9ucz10cnVlCitjbGVhbnVwLmFkZF9taXNzaW5nX25sc190YWdzPWZhbHNlCitjbGVhbnVwLmFkZF9taXNzaW5nX292ZXJyaWRlX2Fubm90YXRpb25zPXRydWUKK2NsZWFudXAuYWRkX3NlcmlhbF92ZXJzaW9uX2lkPWZhbHNlCitjbGVhbnVwLmFsd2F5c191c2VfYmxvY2tzPXRydWUKK2NsZWFudXAuYWx3YXlzX3VzZV9wYXJlbnRoZXNlc19pbl9leHByZXNzaW9ucz10cnVlCitjbGVhbnVwLmFsd2F5c191c2VfdGhpc19mb3Jfbm9uX3N0YXRpY19maWVsZF9hY2Nlc3M9ZmFsc2UKK2NsZWFudXAuYWx3YXlzX3VzZV90aGlzX2Zvcl9ub25fc3RhdGljX21ldGhvZF9hY2Nlc3M9ZmFsc2UKK2NsZWFudXAuY29udmVydF90b19lbmhhbmNlZF9mb3JfbG9vcD10cnVlCitjbGVhbnVwLmZvcm1hdF9zb3VyY2VfY29kZT10cnVlCitjbGVhbnVwLm1ha2VfbG9jYWxfdmFyaWFibGVfZmluYWw9dHJ1ZQorY2xlYW51cC5tYWtlX3BhcmFtZXRlcnNfZmluYWw9dHJ1ZQorY2xlYW51cC5tYWtlX3ByaXZhdGVfZmllbGRzX2ZpbmFsPXRydWUKK2NsZWFudXAubWFrZV92YXJpYWJsZV9kZWNsYXJhdGlvbnNfZmluYWw9dHJ1ZQorY2xlYW51cC5uZXZlcl91c2VfYmxvY2tzPWZhbHNlCitjbGVhbnVwLm5ldmVyX3VzZV9wYXJlbnRoZXNlc19pbl9leHByZXNzaW9ucz1mYWxzZQorY2xlYW51cC5vcmdhbml6ZV9pbXBvcnRzPXRydWUKK2NsZWFudXAucXVhbGlmeV9zdGF0aWNfZmllbGRfYWNjZXNzZXNfd2l0aF9kZWNsYXJpbmdfY2xhc3M9ZmFsc2UKK2NsZWFudXAucXVhbGlmeV9zdGF0aWNfbWVtYmVyX2FjY2Vzc2VzX3Rocm91Z2hfaW5zdGFuY2VzX3dpdGhfZGVjbGFyaW5nX2NsYXNzPXRydWUKK2NsZWFudXAucXVhbGlmeV9zdGF0aWNfbWVtYmVyX2FjY2Vzc2VzX3Rocm91Z2hfc3VidHlwZXNfd2l0aF9kZWNsYXJpbmdfY2xhc3M9dHJ1ZQorY2xlYW51cC5xdWFsaWZ5X3N0YXRpY19tZW1iZXJfYWNjZXNzZXNfd2l0aF9kZWNsYXJpbmdfY2xhc3M9dHJ1ZQorY2xlYW51cC5xdWFsaWZ5X3N0YXRpY19tZXRob2RfYWNjZXNzZXNfd2l0aF9kZWNsYXJpbmdfY2xhc3M9ZmFsc2UKK2NsZWFudXAucmVtb3ZlX3ByaXZhdGVfY29uc3RydWN0b3JzPXRydWUKK2NsZWFudXAucmVtb3ZlX3RyYWlsaW5nX3doaXRlc3BhY2VzPXRydWUKK2NsZWFudXAucmVtb3ZlX3RyYWlsaW5nX3doaXRlc3BhY2VzX2FsbD10cnVlCitjbGVhbnVwLnJlbW92ZV90cmFpbGluZ193aGl0ZXNwYWNlc19pZ25vcmVfZW1wdHk9ZmFsc2UKK2NsZWFudXAucmVtb3ZlX3VubmVjZXNzYXJ5X2Nhc3RzPXRydWUKK2NsZWFudXAucmVtb3ZlX3VubmVjZXNzYXJ5X25sc190YWdzPXRydWUKK2NsZWFudXAucmVtb3ZlX3VudXNlZF9pbXBvcnRzPXRydWUKK2NsZWFudXAucmVtb3ZlX3VudXNlZF9sb2NhbF92YXJpYWJsZXM9dHJ1ZQorY2xlYW51cC5yZW1vdmVfdW51c2VkX3ByaXZhdGVfZmllbGRzPXRydWUKK2NsZWFudXAucmVtb3ZlX3VudXNlZF9wcml2YXRlX21lbWJlcnM9dHJ1ZQorY2xlYW51cC5yZW1vdmVfdW51c2VkX3ByaXZhdGVfbWV0aG9kcz10cnVlCitjbGVhbnVwLnJlbW92ZV91bnVzZWRfcHJpdmF0ZV90eXBlcz10cnVlCitjbGVhbnVwLnNvcnRfbWVtYmVycz1mYWxzZQorY2xlYW51cC5zb3J0X21lbWJlcnNfYWxsPWZhbHNlCitjbGVhbnVwLnVzZV9ibG9ja3M9dHJ1ZQorY2xlYW51cC51c2VfYmxvY2tzX29ubHlfZm9yX3JldHVybl9hbmRfdGhyb3c9ZmFsc2UKK2NsZWFudXAudXNlX3BhcmVudGhlc2VzX2luX2V4cHJlc3Npb25zPWZhbHNlCitjbGVhbnVwLnVzZV90aGlzX2Zvcl9ub25fc3RhdGljX2ZpZWxkX2FjY2Vzcz1mYWxzZQorY2xlYW51cC51c2VfdGhpc19mb3Jfbm9uX3N0YXRpY19maWVsZF9hY2Nlc3Nfb25seV9pZl9uZWNlc3Nhcnk9dHJ1ZQorY2xlYW51cC51c2VfdGhpc19mb3Jfbm9uX3N0YXRpY19tZXRob2RfYWNjZXNzPWZhbHNlCitjbGVhbnVwLnVzZV90aGlzX2Zvcl9ub25fc3RhdGljX21ldGhvZF9hY2Nlc3Nfb25seV9pZl9uZWNlc3Nhcnk9dHJ1ZQorY2xlYW51cF9wcm9maWxlPV9jbGVhbnVwCitjbGVhbnVwX3NldHRpbmdzX3ZlcnNpb249MgorZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGlzZWFzZW1vZGVscy9NRVRBLUlORi9NQU5JRkVTVC5NRiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGlzZWFzZW1vZGVscy9NRVRBLUlORi9NQU5JRkVTVC5NRgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZjZiNGM0Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kaXNlYXNlbW9kZWxzL01FVEEtSU5GL01BTklGRVNULk1GCkBAIC0wLDAgKzEsMTkgQEAKK01hbmlmZXN0LVZlcnNpb246IDEuMAorQnVuZGxlLU1hbmlmZXN0VmVyc2lvbjogMgorQnVuZGxlLU5hbWU6ICVwbHVnaW5OYW1lCitCdW5kbGUtU3ltYm9saWNOYW1lOiBvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRpc2Vhc2Vtb2RlbHM7c2luZ2xldG9uOj10cnVlCitCdW5kbGUtVmVyc2lvbjogMS4yLjEKK0J1bmRsZS1DbGFzc1BhdGg6IC4KK0J1bmRsZS1WZW5kb3I6ICVwcm92aWRlck5hbWUKK0J1bmRsZS1Mb2NhbGl6YXRpb246IHBsdWdpbgorRXhwb3J0LVBhY2thZ2U6IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC50ZXN0cywKKyBvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRpc2Vhc2Vtb2RlbHMsCisgb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kaXNlYXNlbW9kZWxzLnNjZW5hcmlvcywKKyBvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQucHJvdmlkZXIudGVzdHMKK1JlcXVpcmUtQnVuZGxlOiBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUsCisgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzO3Zpc2liaWxpdHk6PXJlZXhwb3J0LAorIG9yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZSwKKyBvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRlZmluaXRpb25zLAorIG9yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbAorQnVuZGxlLVJlcXVpcmVkRXhlY3V0aW9uRW52aXJvbm1lbnQ6IEoyU0UtMS41CitJbXBvcnQtUGFja2FnZTogb3JnLmVjbGlwc2Uuc3RlbS5zb2x2ZXJzLmZkCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRpc2Vhc2Vtb2RlbHMvYnVpbGQucHJvcGVydGllcyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGlzZWFzZW1vZGVscy9idWlsZC5wcm9wZXJ0aWVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI5MzBkYTAKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRpc2Vhc2Vtb2RlbHMvYnVpbGQucHJvcGVydGllcwpAQCAtMCwwICsxLDE0IEBACisjIDxjb3B5cmlnaHQ+CisjIDwvY29weXJpZ2h0PgorIworIyAkSWQkCisKK2Jpbi5pbmNsdWRlcyA9IC4sXAorICAgICAgICAgICAgICAgTUVUQS1JTkYvLFwKKyAgICAgICAgICAgICAgIHRlbXAvLFwKKyAgICAgICAgICAgICAgIG5vdGljZS5odG1sLFwKKyAgICAgICAgICAgICAgIGVwbC12MTAuaHRtbCxcCisgICAgICAgICAgICAgICBwbHVnaW4ucHJvcGVydGllcworamFycy5jb21waWxlLm9yZGVyID0gLgorc291cmNlLi4gPSBzcmMvCitvdXRwdXQuLiA9IGJpbi8KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGlzZWFzZW1vZGVscy9lcGwtdjEwLmh0bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRpc2Vhc2Vtb2RlbHMvZXBsLXYxMC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVkNGIxOTYKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRpc2Vhc2Vtb2RlbHMvZXBsLXYxMC5odG1sCkBAIC0wLDAgKzEsMzI4IEBACis8aHRtbCB4bWxuczpvPSJ1cm46c2NoZW1hcy1taWNyb3NvZnQtY29tOm9mZmljZTpvZmZpY2UiCit4bWxuczp3PSJ1cm46c2NoZW1hcy1taWNyb3NvZnQtY29tOm9mZmljZTp3b3JkIgoreG1sbnM9Imh0dHA6Ly93d3cudzMub3JnL1RSL1JFQy1odG1sNDAiPgorCis8aGVhZD4KKzxtZXRhIGh0dHAtZXF1aXY9Q29udGVudC1UeXBlIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD13aW5kb3dzLTEyNTIiPgorPG1ldGEgbmFtZT1Qcm9nSWQgY29udGVudD1Xb3JkLkRvY3VtZW50PgorPG1ldGEgbmFtZT1HZW5lcmF0b3IgY29udGVudD0iTWljcm9zb2Z0IFdvcmQgOSI+Cis8bWV0YSBuYW1lPU9yaWdpbmF0b3IgY29udGVudD0iTWljcm9zb2Z0IFdvcmQgOSI+Cis8bGluayByZWw9RmlsZS1MaXN0CitocmVmPSIuL0VjbGlwc2UlMjBFUEwlMjAyMDAzXzExXzEwJTIwRmluYWxfZmlsZXMvZmlsZWxpc3QueG1sIj4KKzx0aXRsZT5FY2xpcHNlIFB1YmxpYyBMaWNlbnNlIC0gVmVyc2lvbiAxLjA8L3RpdGxlPgorPCEtLVtpZiBndGUgbXNvIDldPjx4bWw+CisgPG86RG9jdW1lbnRQcm9wZXJ0aWVzPgorICA8bzpSZXZpc2lvbj4yPC9vOlJldmlzaW9uPgorICA8bzpUb3RhbFRpbWU+MzwvbzpUb3RhbFRpbWU+CisgIDxvOkNyZWF0ZWQ+MjAwNC0wMy0wNVQyMzowMzowMFo8L286Q3JlYXRlZD4KKyAgPG86TGFzdFNhdmVkPjIwMDQtMDMtMDVUMjM6MDM6MDBaPC9vOkxhc3RTYXZlZD4KKyAgPG86UGFnZXM+NDwvbzpQYWdlcz4KKyAgPG86V29yZHM+MTYyNjwvbzpXb3Jkcz4KKyAgPG86Q2hhcmFjdGVycz45MjcwPC9vOkNoYXJhY3RlcnM+CisgICA8bzpMaW5lcz43NzwvbzpMaW5lcz4KKyAgPG86UGFyYWdyYXBocz4xODwvbzpQYXJhZ3JhcGhzPgorICA8bzpDaGFyYWN0ZXJzV2l0aFNwYWNlcz4xMTM4NDwvbzpDaGFyYWN0ZXJzV2l0aFNwYWNlcz4KKyAgPG86VmVyc2lvbj45LjQ0MDI8L286VmVyc2lvbj4KKyA8L286RG9jdW1lbnRQcm9wZXJ0aWVzPgorPC94bWw+PCFbZW5kaWZdLS0+PCEtLVtpZiBndGUgbXNvIDldPjx4bWw+CisgPHc6V29yZERvY3VtZW50PgorICA8dzpUcmFja1JldmlzaW9ucy8+CisgPC93OldvcmREb2N1bWVudD4KKzwveG1sPjwhW2VuZGlmXS0tPgorPHN0eWxlPgorPCEtLQorIC8qIEZvbnQgRGVmaW5pdGlvbnMgKi8KK0Bmb250LWZhY2UKKwl7Zm9udC1mYW1pbHk6VGFob21hOworCXBhbm9zZS0xOjIgMTEgNiA0IDMgNSA0IDQgMiA0OworCW1zby1mb250LWNoYXJzZXQ6MDsKKwltc28tZ2VuZXJpYy1mb250LWZhbWlseTpzd2lzczsKKwltc28tZm9udC1waXRjaDp2YXJpYWJsZTsKKwltc28tZm9udC1zaWduYXR1cmU6NTUzNjc5NDk1IC0yMTQ3NDgzNjQ4IDggMCA2NjA0NyAwO30KKyAvKiBTdHlsZSBEZWZpbml0aW9ucyAqLworcC5Nc29Ob3JtYWwsIGxpLk1zb05vcm1hbCwgZGl2Lk1zb05vcm1hbAorCXttc28tc3R5bGUtcGFyZW50OiIiOworCW1hcmdpbjowaW47CisJbWFyZ2luLWJvdHRvbTouMDAwMXB0OworCW1zby1wYWdpbmF0aW9uOndpZG93LW9ycGhhbjsKKwlmb250LXNpemU6MTIuMHB0OworCWZvbnQtZmFtaWx5OiJUaW1lcyBOZXcgUm9tYW4iOworCW1zby1mYXJlYXN0LWZvbnQtZmFtaWx5OiJUaW1lcyBOZXcgUm9tYW4iO30KK3AKKwl7bWFyZ2luLXJpZ2h0OjBpbjsKKwltc28tbWFyZ2luLXRvcC1hbHQ6YXV0bzsKKwltc28tbWFyZ2luLWJvdHRvbS1hbHQ6YXV0bzsKKwltYXJnaW4tbGVmdDowaW47CisJbXNvLXBhZ2luYXRpb246d2lkb3ctb3JwaGFuOworCWZvbnQtc2l6ZToxMi4wcHQ7CisJZm9udC1mYW1pbHk6IlRpbWVzIE5ldyBSb21hbiI7CisJbXNvLWZhcmVhc3QtZm9udC1mYW1pbHk6IlRpbWVzIE5ldyBSb21hbiI7fQorcC5CYWxsb29uVGV4dCwgbGkuQmFsbG9vblRleHQsIGRpdi5CYWxsb29uVGV4dAorCXttc28tc3R5bGUtbmFtZToiQmFsbG9vbiBUZXh0IjsKKwltYXJnaW46MGluOworCW1hcmdpbi1ib3R0b206LjAwMDFwdDsKKwltc28tcGFnaW5hdGlvbjp3aWRvdy1vcnBoYW47CisJZm9udC1zaXplOjguMHB0OworCWZvbnQtZmFtaWx5OlRhaG9tYTsKKwltc28tZmFyZWFzdC1mb250LWZhbWlseToiVGltZXMgTmV3IFJvbWFuIjt9CitAcGFnZSBTZWN0aW9uMQorCXtzaXplOjguNWluIDExLjBpbjsKKwltYXJnaW46MS4waW4gMS4yNWluIDEuMGluIDEuMjVpbjsKKwltc28taGVhZGVyLW1hcmdpbjouNWluOworCW1zby1mb290ZXItbWFyZ2luOi41aW47CisJbXNvLXBhcGVyLXNvdXJjZTowO30KK2Rpdi5TZWN0aW9uMQorCXtwYWdlOlNlY3Rpb24xO30KKy0tPgorPC9zdHlsZT4KKzwvaGVhZD4KKworPGJvZHkgbGFuZz1FTi1VUyBzdHlsZT0ndGFiLWludGVydmFsOi41aW4nPgorCis8ZGl2IGNsYXNzPVNlY3Rpb24xPgorCis8cCBhbGlnbj1jZW50ZXIgc3R5bGU9J3RleHQtYWxpZ246Y2VudGVyJz48Yj5FY2xpcHNlIFB1YmxpYyBMaWNlbnNlIC0gdiAxLjA8L2I+Cis8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5USEUgQUNDT01QQU5ZSU5HIFBST0dSQU0gSVMgUFJPVklERUQgVU5ERVIKK1RIRSBURVJNUyBPRiBUSElTIEVDTElQU0UgUFVCTElDIExJQ0VOU0UgKCZxdW90O0FHUkVFTUVOVCZxdW90OykuIEFOWSBVU0UsCitSRVBST0RVQ1RJT04gT1IgRElTVFJJQlVUSU9OIE9GIFRIRSBQUk9HUkFNIENPTlNUSVRVVEVTIFJFQ0lQSUVOVCdTIEFDQ0VQVEFOQ0UKK09GIFRISVMgQUdSRUVNRU5ULjwvc3Bhbj4gPC9wPgorCis8cD48Yj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+MS4gREVGSU5JVElPTlM8L3NwYW4+PC9iPiA8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4mcXVvdDtDb250cmlidXRpb24mcXVvdDsgbWVhbnM6PC9zcGFuPiA8L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmEpCitpbiB0aGUgY2FzZSBvZiB0aGUgaW5pdGlhbCBDb250cmlidXRvciwgdGhlIGluaXRpYWwgY29kZSBhbmQgZG9jdW1lbnRhdGlvbgorZGlzdHJpYnV0ZWQgdW5kZXIgdGhpcyBBZ3JlZW1lbnQsIGFuZDxiciBjbGVhcj1sZWZ0PgorYikgaW4gdGhlIGNhc2Ugb2YgZWFjaCBzdWJzZXF1ZW50IENvbnRyaWJ1dG9yOjwvc3Bhbj48L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmkpCitjaGFuZ2VzIHRvIHRoZSBQcm9ncmFtLCBhbmQ8L3NwYW4+PC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5paSkKK2FkZGl0aW9ucyB0byB0aGUgUHJvZ3JhbTs8L3NwYW4+PC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz53aGVyZQorc3VjaCBjaGFuZ2VzIGFuZC9vciBhZGRpdGlvbnMgdG8gdGhlIFByb2dyYW0gb3JpZ2luYXRlIGZyb20gYW5kIGFyZSBkaXN0cmlidXRlZAorYnkgdGhhdCBwYXJ0aWN1bGFyIENvbnRyaWJ1dG9yLiBBIENvbnRyaWJ1dGlvbiAnb3JpZ2luYXRlcycgZnJvbSBhIENvbnRyaWJ1dG9yCitpZiBpdCB3YXMgYWRkZWQgdG8gdGhlIFByb2dyYW0gYnkgc3VjaCBDb250cmlidXRvciBpdHNlbGYgb3IgYW55b25lIGFjdGluZyBvbgorc3VjaCBDb250cmlidXRvcidzIGJlaGFsZi4gQ29udHJpYnV0aW9ucyBkbyBub3QgaW5jbHVkZSBhZGRpdGlvbnMgdG8gdGhlCitQcm9ncmFtIHdoaWNoOiAoaSkgYXJlIHNlcGFyYXRlIG1vZHVsZXMgb2Ygc29mdHdhcmUgZGlzdHJpYnV0ZWQgaW4gY29uanVuY3Rpb24KK3dpdGggdGhlIFByb2dyYW0gdW5kZXIgdGhlaXIgb3duIGxpY2Vuc2UgYWdyZWVtZW50LCBhbmQgKGlpKSBhcmUgbm90IGRlcml2YXRpdmUKK3dvcmtzIG9mIHRoZSBQcm9ncmFtLiA8L3NwYW4+PC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+JnF1b3Q7Q29udHJpYnV0b3ImcXVvdDsgbWVhbnMgYW55IHBlcnNvbiBvcgorZW50aXR5IHRoYXQgZGlzdHJpYnV0ZXMgdGhlIFByb2dyYW0uPC9zcGFuPiA8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4mcXVvdDtMaWNlbnNlZCBQYXRlbnRzICZxdW90OyBtZWFuIHBhdGVudAorY2xhaW1zIGxpY2Vuc2FibGUgYnkgYSBDb250cmlidXRvciB3aGljaCBhcmUgbmVjZXNzYXJpbHkgaW5mcmluZ2VkIGJ5IHRoZSB1c2UKK29yIHNhbGUgb2YgaXRzIENvbnRyaWJ1dGlvbiBhbG9uZSBvciB3aGVuIGNvbWJpbmVkIHdpdGggdGhlIFByb2dyYW0uIDwvc3Bhbj48L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4mcXVvdDtQcm9ncmFtJnF1b3Q7IG1lYW5zIHRoZSBDb250cmlidXRpb25zCitkaXN0cmlidXRlZCBpbiBhY2NvcmRhbmNlIHdpdGggdGhpcyBBZ3JlZW1lbnQuPC9zcGFuPiA8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4mcXVvdDtSZWNpcGllbnQmcXVvdDsgbWVhbnMgYW55b25lIHdobworcmVjZWl2ZXMgdGhlIFByb2dyYW0gdW5kZXIgdGhpcyBBZ3JlZW1lbnQsIGluY2x1ZGluZyBhbGwgQ29udHJpYnV0b3JzLjwvc3Bhbj4gPC9wPgorCis8cD48Yj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+Mi4gR1JBTlQgT0YgUklHSFRTPC9zcGFuPjwvYj4gPC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5hKQorU3ViamVjdCB0byB0aGUgdGVybXMgb2YgdGhpcyBBZ3JlZW1lbnQsIGVhY2ggQ29udHJpYnV0b3IgaGVyZWJ5IGdyYW50cyBSZWNpcGllbnQKK2Egbm9uLWV4Y2x1c2l2ZSwgd29ybGR3aWRlLCByb3lhbHR5LWZyZWUgY29weXJpZ2h0IGxpY2Vuc2UgdG88c3Bhbgorc3R5bGU9J2NvbG9yOnJlZCc+IDwvc3Bhbj5yZXByb2R1Y2UsIHByZXBhcmUgZGVyaXZhdGl2ZSB3b3JrcyBvZiwgcHVibGljbHkKK2Rpc3BsYXksIHB1YmxpY2x5IHBlcmZvcm0sIGRpc3RyaWJ1dGUgYW5kIHN1YmxpY2Vuc2UgdGhlIENvbnRyaWJ1dGlvbiBvZiBzdWNoCitDb250cmlidXRvciwgaWYgYW55LCBhbmQgc3VjaCBkZXJpdmF0aXZlIHdvcmtzLCBpbiBzb3VyY2UgY29kZSBhbmQgb2JqZWN0IGNvZGUKK2Zvcm0uPC9zcGFuPjwvcD4KKworPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YikKK1N1YmplY3QgdG8gdGhlIHRlcm1zIG9mIHRoaXMgQWdyZWVtZW50LCBlYWNoIENvbnRyaWJ1dG9yIGhlcmVieSBncmFudHMKK1JlY2lwaWVudCBhIG5vbi1leGNsdXNpdmUsIHdvcmxkd2lkZSw8c3BhbiBzdHlsZT0nY29sb3I6Z3JlZW4nPiA8L3NwYW4+cm95YWx0eS1mcmVlCitwYXRlbnQgbGljZW5zZSB1bmRlciBMaWNlbnNlZCBQYXRlbnRzIHRvIG1ha2UsIHVzZSwgc2VsbCwgb2ZmZXIgdG8gc2VsbCwgaW1wb3J0CithbmQgb3RoZXJ3aXNlIHRyYW5zZmVyIHRoZSBDb250cmlidXRpb24gb2Ygc3VjaCBDb250cmlidXRvciwgaWYgYW55LCBpbiBzb3VyY2UKK2NvZGUgYW5kIG9iamVjdCBjb2RlIGZvcm0uIFRoaXMgcGF0ZW50IGxpY2Vuc2Ugc2hhbGwgYXBwbHkgdG8gdGhlIGNvbWJpbmF0aW9uCitvZiB0aGUgQ29udHJpYnV0aW9uIGFuZCB0aGUgUHJvZ3JhbSBpZiwgYXQgdGhlIHRpbWUgdGhlIENvbnRyaWJ1dGlvbiBpcyBhZGRlZAorYnkgdGhlIENvbnRyaWJ1dG9yLCBzdWNoIGFkZGl0aW9uIG9mIHRoZSBDb250cmlidXRpb24gY2F1c2VzIHN1Y2ggY29tYmluYXRpb24KK3RvIGJlIGNvdmVyZWQgYnkgdGhlIExpY2Vuc2VkIFBhdGVudHMuIFRoZSBwYXRlbnQgbGljZW5zZSBzaGFsbCBub3QgYXBwbHkgdG8KK2FueSBvdGhlciBjb21iaW5hdGlvbnMgd2hpY2ggaW5jbHVkZSB0aGUgQ29udHJpYnV0aW9uLiBObyBoYXJkd2FyZSBwZXIgc2UgaXMKK2xpY2Vuc2VkIGhlcmV1bmRlci4gPC9zcGFuPjwvcD4KKworPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YykKK1JlY2lwaWVudCB1bmRlcnN0YW5kcyB0aGF0IGFsdGhvdWdoIGVhY2ggQ29udHJpYnV0b3IgZ3JhbnRzIHRoZSBsaWNlbnNlcyB0byBpdHMKK0NvbnRyaWJ1dGlvbnMgc2V0IGZvcnRoIGhlcmVpbiwgbm8gYXNzdXJhbmNlcyBhcmUgcHJvdmlkZWQgYnkgYW55IENvbnRyaWJ1dG9yCit0aGF0IHRoZSBQcm9ncmFtIGRvZXMgbm90IGluZnJpbmdlIHRoZSBwYXRlbnQgb3Igb3RoZXIgaW50ZWxsZWN0dWFsIHByb3BlcnR5CityaWdodHMgb2YgYW55IG90aGVyIGVudGl0eS4gRWFjaCBDb250cmlidXRvciBkaXNjbGFpbXMgYW55IGxpYWJpbGl0eSB0byBSZWNpcGllbnQKK2ZvciBjbGFpbXMgYnJvdWdodCBieSBhbnkgb3RoZXIgZW50aXR5IGJhc2VkIG9uIGluZnJpbmdlbWVudCBvZiBpbnRlbGxlY3R1YWwKK3Byb3BlcnR5IHJpZ2h0cyBvciBvdGhlcndpc2UuIEFzIGEgY29uZGl0aW9uIHRvIGV4ZXJjaXNpbmcgdGhlIHJpZ2h0cyBhbmQKK2xpY2Vuc2VzIGdyYW50ZWQgaGVyZXVuZGVyLCBlYWNoIFJlY2lwaWVudCBoZXJlYnkgYXNzdW1lcyBzb2xlIHJlc3BvbnNpYmlsaXR5Cit0byBzZWN1cmUgYW55IG90aGVyIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgbmVlZGVkLCBpZiBhbnkuIEZvciBleGFtcGxlLAoraWYgYSB0aGlyZCBwYXJ0eSBwYXRlbnQgbGljZW5zZSBpcyByZXF1aXJlZCB0byBhbGxvdyBSZWNpcGllbnQgdG8gZGlzdHJpYnV0ZQordGhlIFByb2dyYW0sIGl0IGlzIFJlY2lwaWVudCdzIHJlc3BvbnNpYmlsaXR5IHRvIGFjcXVpcmUgdGhhdCBsaWNlbnNlIGJlZm9yZQorZGlzdHJpYnV0aW5nIHRoZSBQcm9ncmFtLjwvc3Bhbj48L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmQpCitFYWNoIENvbnRyaWJ1dG9yIHJlcHJlc2VudHMgdGhhdCB0byBpdHMga25vd2xlZGdlIGl0IGhhcyBzdWZmaWNpZW50IGNvcHlyaWdodAorcmlnaHRzIGluIGl0cyBDb250cmlidXRpb24sIGlmIGFueSwgdG8gZ3JhbnQgdGhlIGNvcHlyaWdodCBsaWNlbnNlIHNldCBmb3J0aCBpbgordGhpcyBBZ3JlZW1lbnQuIDwvc3Bhbj48L3A+CisKKzxwPjxiPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4zLiBSRVFVSVJFTUVOVFM8L3NwYW4+PC9iPiA8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5BIENvbnRyaWJ1dG9yIG1heSBjaG9vc2UgdG8gZGlzdHJpYnV0ZSB0aGUKK1Byb2dyYW0gaW4gb2JqZWN0IGNvZGUgZm9ybSB1bmRlciBpdHMgb3duIGxpY2Vuc2UgYWdyZWVtZW50LCBwcm92aWRlZCB0aGF0Ojwvc3Bhbj4KKzwvcD4KKworPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YSkKK2l0IGNvbXBsaWVzIHdpdGggdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoaXMgQWdyZWVtZW50OyBhbmQ8L3NwYW4+PC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5iKQoraXRzIGxpY2Vuc2UgYWdyZWVtZW50Ojwvc3Bhbj48L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmkpCitlZmZlY3RpdmVseSBkaXNjbGFpbXMgb24gYmVoYWxmIG9mIGFsbCBDb250cmlidXRvcnMgYWxsIHdhcnJhbnRpZXMgYW5kCitjb25kaXRpb25zLCBleHByZXNzIGFuZCBpbXBsaWVkLCBpbmNsdWRpbmcgd2FycmFudGllcyBvciBjb25kaXRpb25zIG9mIHRpdGxlCithbmQgbm9uLWluZnJpbmdlbWVudCwgYW5kIGltcGxpZWQgd2FycmFudGllcyBvciBjb25kaXRpb25zIG9mIG1lcmNoYW50YWJpbGl0eQorYW5kIGZpdG5lc3MgZm9yIGEgcGFydGljdWxhciBwdXJwb3NlOyA8L3NwYW4+PC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5paSkKK2VmZmVjdGl2ZWx5IGV4Y2x1ZGVzIG9uIGJlaGFsZiBvZiBhbGwgQ29udHJpYnV0b3JzIGFsbCBsaWFiaWxpdHkgZm9yIGRhbWFnZXMsCitpbmNsdWRpbmcgZGlyZWN0LCBpbmRpcmVjdCwgc3BlY2lhbCwgaW5jaWRlbnRhbCBhbmQgY29uc2VxdWVudGlhbCBkYW1hZ2VzLCBzdWNoCithcyBsb3N0IHByb2ZpdHM7IDwvc3Bhbj48L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmlpaSkKK3N0YXRlcyB0aGF0IGFueSBwcm92aXNpb25zIHdoaWNoIGRpZmZlciBmcm9tIHRoaXMgQWdyZWVtZW50IGFyZSBvZmZlcmVkIGJ5IHRoYXQKK0NvbnRyaWJ1dG9yIGFsb25lIGFuZCBub3QgYnkgYW55IG90aGVyIHBhcnR5OyBhbmQ8L3NwYW4+PC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5pdikKK3N0YXRlcyB0aGF0IHNvdXJjZSBjb2RlIGZvciB0aGUgUHJvZ3JhbSBpcyBhdmFpbGFibGUgZnJvbSBzdWNoIENvbnRyaWJ1dG9yLCBhbmQKK2luZm9ybXMgbGljZW5zZWVzIGhvdyB0byBvYnRhaW4gaXQgaW4gYSByZWFzb25hYmxlIG1hbm5lciBvbiBvciB0aHJvdWdoIGEKK21lZGl1bSBjdXN0b21hcmlseSB1c2VkIGZvciBzb2Z0d2FyZSBleGNoYW5nZS48c3BhbiBzdHlsZT0nY29sb3I6Ymx1ZSc+IDwvc3Bhbj48L3NwYW4+PC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+V2hlbiB0aGUgUHJvZ3JhbSBpcyBtYWRlIGF2YWlsYWJsZSBpbiBzb3VyY2UKK2NvZGUgZm9ybTo8L3NwYW4+IDwvcD4KKworPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YSkKK2l0IG11c3QgYmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhpcyBBZ3JlZW1lbnQ7IGFuZCA8L3NwYW4+PC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5iKSBhCitjb3B5IG9mIHRoaXMgQWdyZWVtZW50IG11c3QgYmUgaW5jbHVkZWQgd2l0aCBlYWNoIGNvcHkgb2YgdGhlIFByb2dyYW0uIDwvc3Bhbj48L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5Db250cmlidXRvcnMgbWF5IG5vdCByZW1vdmUgb3IgYWx0ZXIgYW55Citjb3B5cmlnaHQgbm90aWNlcyBjb250YWluZWQgd2l0aGluIHRoZSBQcm9ncmFtLiA8L3NwYW4+PC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+RWFjaCBDb250cmlidXRvciBtdXN0IGlkZW50aWZ5IGl0c2VsZiBhcyB0aGUKK29yaWdpbmF0b3Igb2YgaXRzIENvbnRyaWJ1dGlvbiwgaWYgYW55LCBpbiBhIG1hbm5lciB0aGF0IHJlYXNvbmFibHkgYWxsb3dzCitzdWJzZXF1ZW50IFJlY2lwaWVudHMgdG8gaWRlbnRpZnkgdGhlIG9yaWdpbmF0b3Igb2YgdGhlIENvbnRyaWJ1dGlvbi4gPC9zcGFuPjwvcD4KKworPHA+PGI+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPjQuIENPTU1FUkNJQUwgRElTVFJJQlVUSU9OPC9zcGFuPjwvYj4gPC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+Q29tbWVyY2lhbCBkaXN0cmlidXRvcnMgb2Ygc29mdHdhcmUgbWF5CithY2NlcHQgY2VydGFpbiByZXNwb25zaWJpbGl0aWVzIHdpdGggcmVzcGVjdCB0byBlbmQgdXNlcnMsIGJ1c2luZXNzIHBhcnRuZXJzCithbmQgdGhlIGxpa2UuIFdoaWxlIHRoaXMgbGljZW5zZSBpcyBpbnRlbmRlZCB0byBmYWNpbGl0YXRlIHRoZSBjb21tZXJjaWFsIHVzZQorb2YgdGhlIFByb2dyYW0sIHRoZSBDb250cmlidXRvciB3aG8gaW5jbHVkZXMgdGhlIFByb2dyYW0gaW4gYSBjb21tZXJjaWFsCitwcm9kdWN0IG9mZmVyaW5nIHNob3VsZCBkbyBzbyBpbiBhIG1hbm5lciB3aGljaCBkb2VzIG5vdCBjcmVhdGUgcG90ZW50aWFsCitsaWFiaWxpdHkgZm9yIG90aGVyIENvbnRyaWJ1dG9ycy4gVGhlcmVmb3JlLCBpZiBhIENvbnRyaWJ1dG9yIGluY2x1ZGVzIHRoZQorUHJvZ3JhbSBpbiBhIGNvbW1lcmNpYWwgcHJvZHVjdCBvZmZlcmluZywgc3VjaCBDb250cmlidXRvciAoJnF1b3Q7Q29tbWVyY2lhbAorQ29udHJpYnV0b3ImcXVvdDspIGhlcmVieSBhZ3JlZXMgdG8gZGVmZW5kIGFuZCBpbmRlbW5pZnkgZXZlcnkgb3RoZXIKK0NvbnRyaWJ1dG9yICgmcXVvdDtJbmRlbW5pZmllZCBDb250cmlidXRvciZxdW90OykgYWdhaW5zdCBhbnkgbG9zc2VzLCBkYW1hZ2VzIGFuZAorY29zdHMgKGNvbGxlY3RpdmVseSAmcXVvdDtMb3NzZXMmcXVvdDspIGFyaXNpbmcgZnJvbSBjbGFpbXMsIGxhd3N1aXRzIGFuZCBvdGhlcgorbGVnYWwgYWN0aW9ucyBicm91Z2h0IGJ5IGEgdGhpcmQgcGFydHkgYWdhaW5zdCB0aGUgSW5kZW1uaWZpZWQgQ29udHJpYnV0b3IgdG8KK3RoZSBleHRlbnQgY2F1c2VkIGJ5IHRoZSBhY3RzIG9yIG9taXNzaW9ucyBvZiBzdWNoIENvbW1lcmNpYWwgQ29udHJpYnV0b3IgaW4KK2Nvbm5lY3Rpb24gd2l0aCBpdHMgZGlzdHJpYnV0aW9uIG9mIHRoZSBQcm9ncmFtIGluIGEgY29tbWVyY2lhbCBwcm9kdWN0CitvZmZlcmluZy4gVGhlIG9ibGlnYXRpb25zIGluIHRoaXMgc2VjdGlvbiBkbyBub3QgYXBwbHkgdG8gYW55IGNsYWltcyBvciBMb3NzZXMKK3JlbGF0aW5nIHRvIGFueSBhY3R1YWwgb3IgYWxsZWdlZCBpbnRlbGxlY3R1YWwgcHJvcGVydHkgaW5mcmluZ2VtZW50LiBJbiBvcmRlcgordG8gcXVhbGlmeSwgYW4gSW5kZW1uaWZpZWQgQ29udHJpYnV0b3IgbXVzdDogYSkgcHJvbXB0bHkgbm90aWZ5IHRoZSBDb21tZXJjaWFsCitDb250cmlidXRvciBpbiB3cml0aW5nIG9mIHN1Y2ggY2xhaW0sIGFuZCBiKSBhbGxvdyB0aGUgQ29tbWVyY2lhbCBDb250cmlidXRvcgordG8gY29udHJvbCwgYW5kIGNvb3BlcmF0ZSB3aXRoIHRoZSBDb21tZXJjaWFsIENvbnRyaWJ1dG9yIGluLCB0aGUgZGVmZW5zZSBhbmQKK2FueSByZWxhdGVkIHNldHRsZW1lbnQgbmVnb3RpYXRpb25zLiBUaGUgSW5kZW1uaWZpZWQgQ29udHJpYnV0b3IgbWF5IHBhcnRpY2lwYXRlCitpbiBhbnkgc3VjaCBjbGFpbSBhdCBpdHMgb3duIGV4cGVuc2UuPC9zcGFuPiA8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5Gb3IgZXhhbXBsZSwgYSBDb250cmlidXRvciBtaWdodCBpbmNsdWRlIHRoZQorUHJvZ3JhbSBpbiBhIGNvbW1lcmNpYWwgcHJvZHVjdCBvZmZlcmluZywgUHJvZHVjdCBYLiBUaGF0IENvbnRyaWJ1dG9yIGlzIHRoZW4gYQorQ29tbWVyY2lhbCBDb250cmlidXRvci4gSWYgdGhhdCBDb21tZXJjaWFsIENvbnRyaWJ1dG9yIHRoZW4gbWFrZXMgcGVyZm9ybWFuY2UKK2NsYWltcywgb3Igb2ZmZXJzIHdhcnJhbnRpZXMgcmVsYXRlZCB0byBQcm9kdWN0IFgsIHRob3NlIHBlcmZvcm1hbmNlIGNsYWltcyBhbmQKK3dhcnJhbnRpZXMgYXJlIHN1Y2ggQ29tbWVyY2lhbCBDb250cmlidXRvcidzIHJlc3BvbnNpYmlsaXR5IGFsb25lLiBVbmRlciB0aGlzCitzZWN0aW9uLCB0aGUgQ29tbWVyY2lhbCBDb250cmlidXRvciB3b3VsZCBoYXZlIHRvIGRlZmVuZCBjbGFpbXMgYWdhaW5zdCB0aGUKK290aGVyIENvbnRyaWJ1dG9ycyByZWxhdGVkIHRvIHRob3NlIHBlcmZvcm1hbmNlIGNsYWltcyBhbmQgd2FycmFudGllcywgYW5kIGlmIGEKK2NvdXJ0IHJlcXVpcmVzIGFueSBvdGhlciBDb250cmlidXRvciB0byBwYXkgYW55IGRhbWFnZXMgYXMgYSByZXN1bHQsIHRoZQorQ29tbWVyY2lhbCBDb250cmlidXRvciBtdXN0IHBheSB0aG9zZSBkYW1hZ2VzLjwvc3Bhbj4gPC9wPgorCis8cD48Yj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+NS4gTk8gV0FSUkFOVFk8L3NwYW4+PC9iPiA8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5FWENFUFQgQVMgRVhQUkVTU0xZIFNFVCBGT1JUSCBJTiBUSElTCitBR1JFRU1FTlQsIFRIRSBQUk9HUkFNIElTIFBST1ZJREVEIE9OIEFOICZxdW90O0FTIElTJnF1b3Q7IEJBU0lTLCBXSVRIT1VUCitXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIEVJVEhFUiBFWFBSRVNTIE9SIElNUExJRUQgSU5DTFVESU5HLAorV0lUSE9VVCBMSU1JVEFUSU9OLCBBTlkgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIFRJVExFLCBOT04tSU5GUklOR0VNRU5ULAorTUVSQ0hBTlRBQklMSVRZIE9SIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBFYWNoIFJlY2lwaWVudCBpcyBzb2xlbHkKK3Jlc3BvbnNpYmxlIGZvciBkZXRlcm1pbmluZyB0aGUgYXBwcm9wcmlhdGVuZXNzIG9mIHVzaW5nIGFuZCBkaXN0cmlidXRpbmcgdGhlCitQcm9ncmFtIGFuZCBhc3N1bWVzIGFsbCByaXNrcyBhc3NvY2lhdGVkIHdpdGggaXRzIGV4ZXJjaXNlIG9mIHJpZ2h0cyB1bmRlciB0aGlzCitBZ3JlZW1lbnQgLCBpbmNsdWRpbmcgYnV0IG5vdCBsaW1pdGVkIHRvIHRoZSByaXNrcyBhbmQgY29zdHMgb2YgcHJvZ3JhbSBlcnJvcnMsCitjb21wbGlhbmNlIHdpdGggYXBwbGljYWJsZSBsYXdzLCBkYW1hZ2UgdG8gb3IgbG9zcyBvZiBkYXRhLCBwcm9ncmFtcyBvcgorZXF1aXBtZW50LCBhbmQgdW5hdmFpbGFiaWxpdHkgb3IgaW50ZXJydXB0aW9uIG9mIG9wZXJhdGlvbnMuIDwvc3Bhbj48L3A+CisKKzxwPjxiPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz42LiBESVNDTEFJTUVSIE9GIExJQUJJTElUWTwvc3Bhbj48L2I+IDwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkVYQ0VQVCBBUyBFWFBSRVNTTFkgU0VUIEZPUlRIIElOIFRISVMKK0FHUkVFTUVOVCwgTkVJVEhFUiBSRUNJUElFTlQgTk9SIEFOWSBDT05UUklCVVRPUlMgU0hBTEwgSEFWRSBBTlkgTElBQklMSVRZIEZPUgorQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisoSU5DTFVESU5HIFdJVEhPVVQgTElNSVRBVElPTiBMT1NUIFBST0ZJVFMpLCBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcKK05FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT1IgRElTVFJJQlVUSU9OIE9GCitUSEUgUFJPR1JBTSBPUiBUSEUgRVhFUkNJU0UgT0YgQU5ZIFJJR0hUUyBHUkFOVEVEIEhFUkVVTkRFUiwgRVZFTiBJRiBBRFZJU0VEIE9GCitUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLjwvc3Bhbj4gPC9wPgorCis8cD48Yj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+Ny4gR0VORVJBTDwvc3Bhbj48L2I+IDwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPklmIGFueSBwcm92aXNpb24gb2YgdGhpcyBBZ3JlZW1lbnQgaXMgaW52YWxpZAorb3IgdW5lbmZvcmNlYWJsZSB1bmRlciBhcHBsaWNhYmxlIGxhdywgaXQgc2hhbGwgbm90IGFmZmVjdCB0aGUgdmFsaWRpdHkgb3IKK2VuZm9yY2VhYmlsaXR5IG9mIHRoZSByZW1haW5kZXIgb2YgdGhlIHRlcm1zIG9mIHRoaXMgQWdyZWVtZW50LCBhbmQgd2l0aG91dAorZnVydGhlciBhY3Rpb24gYnkgdGhlIHBhcnRpZXMgaGVyZXRvLCBzdWNoIHByb3Zpc2lvbiBzaGFsbCBiZSByZWZvcm1lZCB0byB0aGUKK21pbmltdW0gZXh0ZW50IG5lY2Vzc2FyeSB0byBtYWtlIHN1Y2ggcHJvdmlzaW9uIHZhbGlkIGFuZCBlbmZvcmNlYWJsZS48L3NwYW4+IDwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPklmIFJlY2lwaWVudCBpbnN0aXR1dGVzIHBhdGVudCBsaXRpZ2F0aW9uCithZ2FpbnN0IGFueSBlbnRpdHkgKGluY2x1ZGluZyBhIGNyb3NzLWNsYWltIG9yIGNvdW50ZXJjbGFpbSBpbiBhIGxhd3N1aXQpCithbGxlZ2luZyB0aGF0IHRoZSBQcm9ncmFtIGl0c2VsZiAoZXhjbHVkaW5nIGNvbWJpbmF0aW9ucyBvZiB0aGUgUHJvZ3JhbSB3aXRoCitvdGhlciBzb2Z0d2FyZSBvciBoYXJkd2FyZSkgaW5mcmluZ2VzIHN1Y2ggUmVjaXBpZW50J3MgcGF0ZW50KHMpLCB0aGVuIHN1Y2gKK1JlY2lwaWVudCdzIHJpZ2h0cyBncmFudGVkIHVuZGVyIFNlY3Rpb24gMihiKSBzaGFsbCB0ZXJtaW5hdGUgYXMgb2YgdGhlIGRhdGUKK3N1Y2ggbGl0aWdhdGlvbiBpcyBmaWxlZC4gPC9zcGFuPjwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkFsbCBSZWNpcGllbnQncyByaWdodHMgdW5kZXIgdGhpcyBBZ3JlZW1lbnQKK3NoYWxsIHRlcm1pbmF0ZSBpZiBpdCBmYWlscyB0byBjb21wbHkgd2l0aCBhbnkgb2YgdGhlIG1hdGVyaWFsIHRlcm1zIG9yCitjb25kaXRpb25zIG9mIHRoaXMgQWdyZWVtZW50IGFuZCBkb2VzIG5vdCBjdXJlIHN1Y2ggZmFpbHVyZSBpbiBhIHJlYXNvbmFibGUKK3BlcmlvZCBvZiB0aW1lIGFmdGVyIGJlY29taW5nIGF3YXJlIG9mIHN1Y2ggbm9uY29tcGxpYW5jZS4gSWYgYWxsIFJlY2lwaWVudCdzCityaWdodHMgdW5kZXIgdGhpcyBBZ3JlZW1lbnQgdGVybWluYXRlLCBSZWNpcGllbnQgYWdyZWVzIHRvIGNlYXNlIHVzZSBhbmQKK2Rpc3RyaWJ1dGlvbiBvZiB0aGUgUHJvZ3JhbSBhcyBzb29uIGFzIHJlYXNvbmFibHkgcHJhY3RpY2FibGUuIEhvd2V2ZXIsCitSZWNpcGllbnQncyBvYmxpZ2F0aW9ucyB1bmRlciB0aGlzIEFncmVlbWVudCBhbmQgYW55IGxpY2Vuc2VzIGdyYW50ZWQgYnkKK1JlY2lwaWVudCByZWxhdGluZyB0byB0aGUgUHJvZ3JhbSBzaGFsbCBjb250aW51ZSBhbmQgc3Vydml2ZS4gPC9zcGFuPjwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkV2ZXJ5b25lIGlzIHBlcm1pdHRlZCB0byBjb3B5IGFuZCBkaXN0cmlidXRlCitjb3BpZXMgb2YgdGhpcyBBZ3JlZW1lbnQsIGJ1dCBpbiBvcmRlciB0byBhdm9pZCBpbmNvbnNpc3RlbmN5IHRoZSBBZ3JlZW1lbnQgaXMKK2NvcHlyaWdodGVkIGFuZCBtYXkgb25seSBiZSBtb2RpZmllZCBpbiB0aGUgZm9sbG93aW5nIG1hbm5lci4gVGhlIEFncmVlbWVudAorU3Rld2FyZCByZXNlcnZlcyB0aGUgcmlnaHQgdG8gcHVibGlzaCBuZXcgdmVyc2lvbnMgKGluY2x1ZGluZyByZXZpc2lvbnMpIG9mCit0aGlzIEFncmVlbWVudCBmcm9tIHRpbWUgdG8gdGltZS4gTm8gb25lIG90aGVyIHRoYW4gdGhlIEFncmVlbWVudCBTdGV3YXJkIGhhcwordGhlIHJpZ2h0IHRvIG1vZGlmeSB0aGlzIEFncmVlbWVudC4gVGhlIEVjbGlwc2UgRm91bmRhdGlvbiBpcyB0aGUgaW5pdGlhbAorQWdyZWVtZW50IFN0ZXdhcmQuIFRoZSBFY2xpcHNlIEZvdW5kYXRpb24gbWF5IGFzc2lnbiB0aGUgcmVzcG9uc2liaWxpdHkgdG8KK3NlcnZlIGFzIHRoZSBBZ3JlZW1lbnQgU3Rld2FyZCB0byBhIHN1aXRhYmxlIHNlcGFyYXRlIGVudGl0eS4gRWFjaCBuZXcgdmVyc2lvbgorb2YgdGhlIEFncmVlbWVudCB3aWxsIGJlIGdpdmVuIGEgZGlzdGluZ3Vpc2hpbmcgdmVyc2lvbiBudW1iZXIuIFRoZSBQcm9ncmFtCisoaW5jbHVkaW5nIENvbnRyaWJ1dGlvbnMpIG1heSBhbHdheXMgYmUgZGlzdHJpYnV0ZWQgc3ViamVjdCB0byB0aGUgdmVyc2lvbiBvZgordGhlIEFncmVlbWVudCB1bmRlciB3aGljaCBpdCB3YXMgcmVjZWl2ZWQuIEluIGFkZGl0aW9uLCBhZnRlciBhIG5ldyB2ZXJzaW9uIG9mCit0aGUgQWdyZWVtZW50IGlzIHB1Ymxpc2hlZCwgQ29udHJpYnV0b3IgbWF5IGVsZWN0IHRvIGRpc3RyaWJ1dGUgdGhlIFByb2dyYW0KKyhpbmNsdWRpbmcgaXRzIENvbnRyaWJ1dGlvbnMpIHVuZGVyIHRoZSBuZXcgdmVyc2lvbi4gRXhjZXB0IGFzIGV4cHJlc3NseSBzdGF0ZWQKK2luIFNlY3Rpb25zIDIoYSkgYW5kIDIoYikgYWJvdmUsIFJlY2lwaWVudCByZWNlaXZlcyBubyByaWdodHMgb3IgbGljZW5zZXMgdG8KK3RoZSBpbnRlbGxlY3R1YWwgcHJvcGVydHkgb2YgYW55IENvbnRyaWJ1dG9yIHVuZGVyIHRoaXMgQWdyZWVtZW50LCB3aGV0aGVyCitleHByZXNzbHksIGJ5IGltcGxpY2F0aW9uLCBlc3RvcHBlbCBvciBvdGhlcndpc2UuIEFsbCByaWdodHMgaW4gdGhlIFByb2dyYW0gbm90CitleHByZXNzbHkgZ3JhbnRlZCB1bmRlciB0aGlzIEFncmVlbWVudCBhcmUgcmVzZXJ2ZWQuPC9zcGFuPiA8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5UaGlzIEFncmVlbWVudCBpcyBnb3Zlcm5lZCBieSB0aGUgbGF3cyBvZiB0aGUKK1N0YXRlIG9mIE5ldyBZb3JrIGFuZCB0aGUgaW50ZWxsZWN0dWFsIHByb3BlcnR5IGxhd3Mgb2YgdGhlIFVuaXRlZCBTdGF0ZXMgb2YKK0FtZXJpY2EuIE5vIHBhcnR5IHRvIHRoaXMgQWdyZWVtZW50IHdpbGwgYnJpbmcgYSBsZWdhbCBhY3Rpb24gdW5kZXIgdGhpcworQWdyZWVtZW50IG1vcmUgdGhhbiBvbmUgeWVhciBhZnRlciB0aGUgY2F1c2Ugb2YgYWN0aW9uIGFyb3NlLiBFYWNoIHBhcnR5IHdhaXZlcworaXRzIHJpZ2h0cyB0byBhIGp1cnkgdHJpYWwgaW4gYW55IHJlc3VsdGluZyBsaXRpZ2F0aW9uLjwvc3Bhbj4gPC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWw+PCFbaWYgIXN1cHBvcnRFbXB0eVBhcmFzXT4mbmJzcDs8IVtlbmRpZl0+PG86cD48L286cD48L3A+CisKKzwvZGl2PgorCis8L2JvZHk+CisKKzwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRpc2Vhc2Vtb2RlbHMvbm90aWNlLmh0bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRpc2Vhc2Vtb2RlbHMvbm90aWNlLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzZhZjk2NgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGlzZWFzZW1vZGVscy9ub3RpY2UuaHRtbApAQCAtMCwwICsxLDc5IEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wLy9FTiI+Cis8aHRtbD4KKzxoZWFkPgorPG1ldGEgaHR0cC1lcXVpdj1Db250ZW50LVR5cGUgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PWlzby04ODU5LTEiPgorPHRpdGxlPkVjbGlwc2Uub3JnIFNvZnR3YXJlIFVzZXIgQWdyZWVtZW50PC90aXRsZT4KKzwvaGVhZD4KKworPGJvZHkgbGFuZz0iRU4tVVMiIGxpbms9Ymx1ZSB2bGluaz1wdXJwbGU+Cis8aDI+RWNsaXBzZSBGb3VuZGF0aW9uIFNvZnR3YXJlIFVzZXIgQWdyZWVtZW50PC9oMj4KKzxwPk1hcmNoIDE3LCAyMDA1PC9wPgorCis8aDM+VXNhZ2UgT2YgQ29udGVudDwvaDM+CisKKzxwPlRIRSBFQ0xJUFNFIEZPVU5EQVRJT04gTUFLRVMgQVZBSUxBQkxFIFNPRlRXQVJFLCBET0NVTUVOVEFUSU9OLCBJTkZPUk1BVElPTiBBTkQvT1IgT1RIRVIgTUFURVJJQUxTIEZPUiBPUEVOIFNPVVJDRSBQUk9KRUNUUworICAgKENPTExFQ1RJVkVMWSAmcXVvdDtDT05URU5UJnF1b3Q7KS4gIFVTRSBPRiBUSEUgQ09OVEVOVCBJUyBHT1ZFUk5FRCBCWSBUSEUgVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgVEhJUyBBR1JFRU1FTlQgQU5EL09SIFRIRSBURVJNUyBBTkQKKyAgIENPTkRJVElPTlMgT0YgTElDRU5TRSBBR1JFRU1FTlRTIE9SIE5PVElDRVMgSU5ESUNBVEVEIE9SIFJFRkVSRU5DRUQgQkVMT1cuICBCWSBVU0lORyBUSEUgQ09OVEVOVCwgWU9VIEFHUkVFIFRIQVQgWU9VUiBVU0UKKyAgIE9GIFRIRSBDT05URU5UIElTIEdPVkVSTkVEIEJZIFRISVMgQUdSRUVNRU5UIEFORC9PUiBUSEUgVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgQU5ZIEFQUExJQ0FCTEUgTElDRU5TRSBBR1JFRU1FTlRTIE9SCisgICBOT1RJQ0VTIElORElDQVRFRCBPUiBSRUZFUkVOQ0VEIEJFTE9XLiAgSUYgWU9VIERPIE5PVCBBR1JFRSBUTyBUSEUgVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgVEhJUyBBR1JFRU1FTlQgQU5EIFRIRSBURVJNUyBBTkQKKyAgIENPTkRJVElPTlMgT0YgQU5ZIEFQUExJQ0FCTEUgTElDRU5TRSBBR1JFRU1FTlRTIE9SIE5PVElDRVMgSU5ESUNBVEVEIE9SIFJFRkVSRU5DRUQgQkVMT1csIFRIRU4gWU9VIE1BWSBOT1QgVVNFIFRIRSBDT05URU5ULjwvcD4KKyAgIAorPGgzPkFwcGxpY2FibGUgTGljZW5zZXM8L2gzPiAgIAorICAgCis8cD5Vbmxlc3Mgb3RoZXJ3aXNlIGluZGljYXRlZCwgYWxsIENvbnRlbnQgbWFkZSBhdmFpbGFibGUgYnkgdGhlIEVjbGlwc2UgRm91bmRhdGlvbiBpcyBwcm92aWRlZCB0byB5b3UgdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4wCisgICAoJnF1b3Q7RVBMJnF1b3Q7KS4gIEEgY29weSBvZiB0aGUgRVBMIGlzIHByb3ZpZGVkIHdpdGggdGhpcyBDb250ZW50IGFuZCBpcyBhbHNvIGF2YWlsYWJsZSBhdCA8YSBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbCI+aHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWw8L2E+LgorICAgRm9yIHB1cnBvc2VzIG9mIHRoZSBFUEwsICZxdW90O1Byb2dyYW0mcXVvdDsgd2lsbCBtZWFuIHRoZSBDb250ZW50LjwvcD4KKworPHA+Q29udGVudCBpbmNsdWRlcywgYnV0IGlzIG5vdCBsaW1pdGVkIHRvLCBzb3VyY2UgY29kZSwgb2JqZWN0IGNvZGUsIGRvY3VtZW50YXRpb24gYW5kIG90aGVyIGZpbGVzIG1haW50YWluZWQgaW4gdGhlIEVjbGlwc2Uub3JnIENWUyByZXBvc2l0b3J5ICgmcXVvdDtSZXBvc2l0b3J5JnF1b3Q7KSBpbiBDVlMKKyAgIG1vZHVsZXMgKCZxdW90O01vZHVsZXMmcXVvdDspIGFuZCBtYWRlIGF2YWlsYWJsZSBhcyBkb3dubG9hZGFibGUgYXJjaGl2ZXMgKCZxdW90O0Rvd25sb2FkcyZxdW90OykuPC9wPgorICAgCis8dWw+CisJPGxpPkNvbnRlbnQgbWF5IGJlIHN0cnVjdHVyZWQgYW5kIHBhY2thZ2VkIGludG8gbW9kdWxlcyB0byBmYWNpbGl0YXRlIGRlbGl2ZXJpbmcsIGV4dGVuZGluZywgYW5kIHVwZ3JhZGluZyB0aGUgQ29udGVudC4gIFR5cGljYWwgbW9kdWxlcyBtYXkgaW5jbHVkZSBwbHVnLWlucyAoJnF1b3Q7UGx1Zy1pbnMmcXVvdDspLCBwbHVnLWluIGZyYWdtZW50cyAoJnF1b3Q7RnJhZ21lbnRzJnF1b3Q7KSwgYW5kIGZlYXR1cmVzICgmcXVvdDtGZWF0dXJlcyZxdW90OykuPC9saT4KKwk8bGk+RWFjaCBQbHVnLWluIG9yIEZyYWdtZW50IG1heSBiZSBwYWNrYWdlZCBhcyBhIHN1Yi1kaXJlY3Rvcnkgb3IgSkFSIChKYXZhJnRyYWRlOyBBUmNoaXZlKSBpbiBhIGRpcmVjdG9yeSBuYW1lZCAmcXVvdDtwbHVnaW5zJnF1b3Q7LjwvbGk+CisJPGxpPkEgRmVhdHVyZSBpcyBhIGJ1bmRsZSBvZiBvbmUgb3IgbW9yZSBQbHVnLWlucyBhbmQvb3IgRnJhZ21lbnRzIGFuZCBhc3NvY2lhdGVkIG1hdGVyaWFsLiAgRWFjaCBGZWF0dXJlIG1heSBiZSBwYWNrYWdlZCBhcyBhIHN1Yi1kaXJlY3RvcnkgaW4gYSBkaXJlY3RvcnkgbmFtZWQgJnF1b3Q7ZmVhdHVyZXMmcXVvdDsuICBXaXRoaW4gYSBGZWF0dXJlLCBmaWxlcyBuYW1lZCAmcXVvdDtmZWF0dXJlLnhtbCZxdW90OyBtYXkgY29udGFpbiBhIGxpc3Qgb2YgdGhlIG5hbWVzIGFuZCB2ZXJzaW9uIG51bWJlcnMgb2YgdGhlIFBsdWctaW5zCisgICAgICBhbmQvb3IgRnJhZ21lbnRzIGFzc29jaWF0ZWQgd2l0aCB0aGF0IEZlYXR1cmUuPC9saT4KKwk8bGk+RmVhdHVyZXMgbWF5IGFsc28gaW5jbHVkZSBvdGhlciBGZWF0dXJlcyAoJnF1b3Q7SW5jbHVkZWQgRmVhdHVyZXMmcXVvdDspLiBXaXRoaW4gYSBGZWF0dXJlLCBmaWxlcyBuYW1lZCAmcXVvdDtmZWF0dXJlLnhtbCZxdW90OyBtYXkgY29udGFpbiBhIGxpc3Qgb2YgdGhlIG5hbWVzIGFuZCB2ZXJzaW9uIG51bWJlcnMgb2YgSW5jbHVkZWQgRmVhdHVyZXMuPC9saT4KKzwvdWw+ICAgCisgCis8cD5UaGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgZ292ZXJuaW5nIFBsdWctaW5zIGFuZCBGcmFnbWVudHMgc2hvdWxkIGJlIGNvbnRhaW5lZCBpbiBmaWxlcyBuYW1lZCAmcXVvdDthYm91dC5odG1sJnF1b3Q7ICgmcXVvdDtBYm91dHMmcXVvdDspLiBUaGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgZ292ZXJuaW5nIEZlYXR1cmVzIGFuZAorSW5jbHVkZWQgRmVhdHVyZXMgc2hvdWxkIGJlIGNvbnRhaW5lZCBpbiBmaWxlcyBuYW1lZCAmcXVvdDtsaWNlbnNlLmh0bWwmcXVvdDsgKCZxdW90O0ZlYXR1cmUgTGljZW5zZXMmcXVvdDspLiAgQWJvdXRzIGFuZCBGZWF0dXJlIExpY2Vuc2VzIG1heSBiZSBsb2NhdGVkIGluIGFueSBkaXJlY3Rvcnkgb2YgYSBEb3dubG9hZCBvciBNb2R1bGUKK2luY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvIHRoZSBmb2xsb3dpbmcgbG9jYXRpb25zOjwvcD4KKworPHVsPgorCTxsaT5UaGUgdG9wLWxldmVsIChyb290KSBkaXJlY3Rvcnk8L2xpPgorCTxsaT5QbHVnLWluIGFuZCBGcmFnbWVudCBkaXJlY3RvcmllczwvbGk+CisJPGxpPkluc2lkZSBQbHVnLWlucyBhbmQgRnJhZ21lbnRzIHBhY2thZ2VkIGFzIEpBUnM8L2xpPgorCTxsaT5TdWItZGlyZWN0b3JpZXMgb2YgdGhlIGRpcmVjdG9yeSBuYW1lZCAmcXVvdDtzcmMmcXVvdDsgb2YgY2VydGFpbiBQbHVnLWluczwvbGk+CisJPGxpPkZlYXR1cmUgZGlyZWN0b3JpZXM8L2xpPgorPC91bD4KKwkJCis8cD5Ob3RlOiBpZiBhIEZlYXR1cmUgbWFkZSBhdmFpbGFibGUgYnkgdGhlIEVjbGlwc2UgRm91bmRhdGlvbiBpcyBpbnN0YWxsZWQgdXNpbmcgdGhlIEVjbGlwc2UgVXBkYXRlIE1hbmFnZXIsIHlvdSBtdXN0IGFncmVlIHRvIGEgbGljZW5zZSAoJnF1b3Q7RmVhdHVyZSBVcGRhdGUgTGljZW5zZSZxdW90OykgZHVyaW5nIHRoZQoraW5zdGFsbGF0aW9uIHByb2Nlc3MuICBJZiB0aGUgRmVhdHVyZSBjb250YWlucyBJbmNsdWRlZCBGZWF0dXJlcywgdGhlIEZlYXR1cmUgVXBkYXRlIExpY2Vuc2Ugc2hvdWxkIGVpdGhlciBwcm92aWRlIHlvdSB3aXRoIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBnb3Zlcm5pbmcgdGhlIEluY2x1ZGVkIEZlYXR1cmVzIG9yCitpbmZvcm0geW91IHdoZXJlIHlvdSBjYW4gbG9jYXRlIHRoZW0uICBGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlcyBtYXkgYmUgZm91bmQgaW4gdGhlICZxdW90O2xpY2Vuc2UmcXVvdDsgcHJvcGVydHkgb2YgZmlsZXMgbmFtZWQgJnF1b3Q7ZmVhdHVyZS5wcm9wZXJ0aWVzJnF1b3Q7IGZvdW5kIHdpdGhpbiBhIEZlYXR1cmUuCitTdWNoIEFib3V0cywgRmVhdHVyZSBMaWNlbnNlcywgYW5kIEZlYXR1cmUgVXBkYXRlIExpY2Vuc2VzIGNvbnRhaW4gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIChvciByZWZlcmVuY2VzIHRvIHN1Y2ggdGVybXMgYW5kIGNvbmRpdGlvbnMpIHRoYXQgZ292ZXJuIHlvdXIgdXNlIG9mIHRoZSBhc3NvY2lhdGVkIENvbnRlbnQgaW4KK3RoYXQgZGlyZWN0b3J5LjwvcD4KKworPHA+VEhFIEFCT1VUUywgRkVBVFVSRSBMSUNFTlNFUywgQU5EIEZFQVRVUkUgVVBEQVRFIExJQ0VOU0VTIE1BWSBSRUZFUiBUTyBUSEUgRVBMIE9SIE9USEVSIExJQ0VOU0UgQUdSRUVNRU5UUywgTk9USUNFUyBPUiBURVJNUyBBTkQgQ09ORElUSU9OUy4gIFNPTUUgT0YgVEhFU0UKK09USEVSIExJQ0VOU0UgQUdSRUVNRU5UUyBNQVkgSU5DTFVERSAoQlVUIEFSRSBOT1QgTElNSVRFRCBUTyk6PC9wPgorCis8dWw+CisJPGxpPkNvbW1vbiBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMCAoYXZhaWxhYmxlIGF0IDxhIGhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvY3BsLXYxMC5odG1sIj5odHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2NwbC12MTAuaHRtbDwvYT4pPC9saT4KKwk8bGk+QXBhY2hlIFNvZnR3YXJlIExpY2Vuc2UgMS4xIChhdmFpbGFibGUgYXQgPGEgaHJlZj0iaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UiPmh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFPC9hPik8L2xpPgorCTxsaT5BcGFjaGUgU29mdHdhcmUgTGljZW5zZSAyLjAgKGF2YWlsYWJsZSBhdCA8YSBocmVmPSJodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAiPmh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMDwvYT4pPC9saT4KKwk8bGk+SUJNIFB1YmxpYyBMaWNlbnNlIDEuMCAoYXZhaWxhYmxlIGF0IDxhIGhyZWY9Imh0dHA6Ly9vc3Muc29mdHdhcmUuaWJtLmNvbS9kZXZlbG9wZXJ3b3Jrcy9vcGVuc291cmNlL2xpY2Vuc2UxMC5odG1sIj5odHRwOi8vb3NzLnNvZnR3YXJlLmlibS5jb20vZGV2ZWxvcGVyd29ya3Mvb3BlbnNvdXJjZS9saWNlbnNlMTAuaHRtbDwvYT4pPC9saT4JCisJPGxpPk1ldHJvIExpbmsgUHVibGljIExpY2Vuc2UgMS4wMCAoYXZhaWxhYmxlIGF0IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbmdyb3VwLm9yZy9vcGVubW90aWYvc3VwcG9ydGVycy9tZXRyb2xpbmsvbGljZW5zZS5odG1sIj5odHRwOi8vd3d3Lm9wZW5ncm91cC5vcmcvb3Blbm1vdGlmL3N1cHBvcnRlcnMvbWV0cm9saW5rL2xpY2Vuc2UuaHRtbDwvYT4pPC9saT4KKwk8bGk+TW96aWxsYSBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMSAoYXZhaWxhYmxlIGF0IDxhIGhyZWY9Imh0dHA6Ly93d3cubW96aWxsYS5vcmcvTVBML01QTC0xLjEuaHRtbCI+aHR0cDovL3d3dy5tb3ppbGxhLm9yZy9NUEwvTVBMLTEuMS5odG1sPC9hPik8L2xpPgorPC91bD4KKworPHA+SVQgSVMgWU9VUiBPQkxJR0FUSU9OIFRPIFJFQUQgQU5EIEFDQ0VQVCBBTEwgU1VDSCBURVJNUyBBTkQgQ09ORElUSU9OUyBQUklPUiBUTyBVU0UgT0YgVEhFIENPTlRFTlQuICBJZiBubyBBYm91dCwgRmVhdHVyZSBMaWNlbnNlLCBvciBGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlIGlzIHByb3ZpZGVkLCBwbGVhc2UKK2NvbnRhY3QgdGhlIEVjbGlwc2UgRm91bmRhdGlvbiB0byBkZXRlcm1pbmUgd2hhdCB0ZXJtcyBhbmQgY29uZGl0aW9ucyBnb3Zlcm4gdGhhdCBwYXJ0aWN1bGFyIENvbnRlbnQuPC9wPgorCis8aDM+Q3J5cHRvZ3JhcGh5PC9oMz4KKworPHA+Q29udGVudCBtYXkgY29udGFpbiBlbmNyeXB0aW9uIHNvZnR3YXJlLiBUaGUgY291bnRyeSBpbiB3aGljaCB5b3UgYXJlIGN1cnJlbnRseSBtYXkgaGF2ZSByZXN0cmljdGlvbnMgb24gdGhlIGltcG9ydCwgcG9zc2Vzc2lvbiwgYW5kIHVzZSwgYW5kL29yIHJlLWV4cG9ydCB0bworICAgYW5vdGhlciBjb3VudHJ5LCBvZiBlbmNyeXB0aW9uIHNvZnR3YXJlLiBCRUZPUkUgdXNpbmcgYW55IGVuY3J5cHRpb24gc29mdHdhcmUsIHBsZWFzZSBjaGVjayB0aGUgY291bnRyeSdzIGxhd3MsIHJlZ3VsYXRpb25zIGFuZCBwb2xpY2llcyBjb25jZXJuaW5nIHRoZSBpbXBvcnQsCisgICBwb3NzZXNzaW9uLCBvciB1c2UsIGFuZCByZS1leHBvcnQgb2YgZW5jcnlwdGlvbiBzb2Z0d2FyZSwgdG8gc2VlIGlmIHRoaXMgaXMgcGVybWl0dGVkLjwvcD4KKyAgIAorPHNtYWxsPkphdmEgYW5kIGFsbCBKYXZhLWJhc2VkIHRyYWRlbWFya3MgYXJlIHRyYWRlbWFya3Mgb2YgU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiBpbiB0aGUgVW5pdGVkIFN0YXRlcywgb3RoZXIgY291bnRyaWVzLCBvciBib3RoLjwvc21hbGw+ICAgCis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRpc2Vhc2Vtb2RlbHMvcGx1Z2luLnByb3BlcnRpZXMgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRpc2Vhc2Vtb2RlbHMvcGx1Z2luLnByb3BlcnRpZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGY3MTFmOAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGlzZWFzZW1vZGVscy9wbHVnaW4ucHJvcGVydGllcwpAQCAtMCwwICsxLDQwIEBACisjLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyMgKiBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisjICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworIyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorIyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisjICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyMgKgorIyAqIENvbnRyaWJ1dG9yczoKKyMgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisjICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyMgVG8gY29kZSBkZXZlbG9wZXI6CisjICAgRG8gTk9UIGNoYW5nZSB0aGUgcHJvcGVydGllcyBiZXR3ZWVuIHRoaXMgbGluZSBhbmQgdGhlCisjICAgIiUlJSBFTkQgT0YgVFJBTlNMQVRFRCBQUk9QRVJUSUVTICUlJSIgbGluZS4KKyMgICBNYWtlIGEgbmV3IHByb3BlcnR5IG5hbWUsIGFwcGVuZCB0byB0aGUgZW5kIG9mIHRoZSBmaWxlIGFuZCBjaGFuZ2UKKyMgICB0aGUgY29kZSB0byB1c2UgdGhlIG5ldyBwcm9wZXJ0eS4KKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorIyAlJSUgRU5EIE9GIFRSQU5TTEFURUQgUFJPUEVSVElFUyAlJSUKKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworcGx1Z2luTmFtZSA9IFNURU0gRGlzZWFzZSBNb2RlbHMgVGVzdCBTdWl0ZQorcHJvdmlkZXJOYW1lID0gRWNsaXBzZS5vcmcKKworIyBEdWJsaW4gY29yZQorZGNfY3JlYXRvcl9kYWZvcmQgPSBkYWZvcmQKK2RjX3NlcmkxeDFfZGVzYyA9IERldGVybWluaXN0aWMgU0VJUiBkaXNlYXNlIG1vZGVsIG9uIGEgc2luZ2xlIG5vZGUKK2RjX3NlcmkxeDFfdGl0bGUgPSBTRUlSIDEgeCAxCitkY19zZXJpMXgyX2Rlc2MgPSBEZXRlcm1pbmlzdGljIFNFSVIgZGlzZWFzZSBtb2RlbCBvbiBhIDF4MiBsYXR0aWNlIGdyYXBoCitkY19zZXJpMXgyX3RpdGxlID0gU0VJUiAxIHggMgorZGNfc2VyaTN4M19kZXNjID0gU3RhbmRhcmQgU0VJUiBkaXNlYXNlIG1vZGVsIG9uIGEgM3gzIGxhdHRpY2UgZ3JhcGgKK2RjX3NlcmkzeDNfdGl0bGUgPSBTRUlSIDMgeCAzCitkY19zZXJpMTAweDEwMF9kZXNjID0gRGV0ZXJtaW5pc3RpYyBTRUlSIGRpc2Vhc2UgbW9kZWwgb24gYSAxMDB4MTAwIGxhdGljZSBncmFwaAorZGNfc2VyaTEwMHgxMDBfdGl0bGUgPSBTRUlSIDEwMCB4IDEwMAorCitkbV9jYXQgPSBEaXNlYXNlIE1vZGVscworc3RhbmRhcmRfY2F0ID0gU3RhbmRhcmQKK3dvcmxkX2NhdCA9IFdvcmxkCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9wcmVkaWNhdGVzL2Rpc2Vhc2VwcmVkaWNhdGVzL3Rlc3RzL0Rpc2Vhc2VwcmVkaWNhdGVzRXhhbXBsZS5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvcHJlZGljYXRlcy9kaXNlYXNlcHJlZGljYXRlcy90ZXN0cy9EaXNlYXNlcHJlZGljYXRlc0V4YW1wbGUuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNDI5MWVkCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvcHJlZGljYXRlcy9kaXNlYXNlcHJlZGljYXRlcy90ZXN0cy9EaXNlYXNlcHJlZGljYXRlc0V4YW1wbGUuamF2YQpAQCAtMCwwICsxLDEzMCBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMucHJlZGljYXRlcy5kaXNlYXNlcHJlZGljYXRlcy50ZXN0czsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogCisgKiBDb3B5cmlnaHQgKGMpIDIwMTEgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuIAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyAKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0IAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwgCisgKiAKKyAqIENvbnRyaWJ1dG9yczogCisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqYXZhLmlvLkZpbGU7CitpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5EaWFnbm9zdGljOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5VUkk7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5yZXNvdXJjZS5SZXNvdXJjZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUucmVzb3VyY2UuUmVzb3VyY2VTZXQ7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUucmVzb3VyY2UuaW1wbC5SZXNvdXJjZVNldEltcGw7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUudXRpbC5EaWFnbm9zdGljaWFuOworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnhtaS5pbXBsLlhNSVJlc291cmNlRmFjdG9yeUltcGw7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMucHJlZGljYXRlcy5kaXNlYXNlcHJlZGljYXRlcy5EaXNlYXNlcHJlZGljYXRlc0ZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnByZWRpY2F0ZXMuZGlzZWFzZXByZWRpY2F0ZXMuRGlzZWFzZXByZWRpY2F0ZXNQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5wcmVkaWNhdGVzLmRpc2Vhc2VwcmVkaWNhdGVzLkxhYmVsVmFsdWVUZXN0OworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiBBIHNhbXBsZSB1dGlsaXR5IGZvciB0aGUgJzxlbT48Yj5kaXNlYXNlcHJlZGljYXRlczwvYj48L2VtPicgcGFja2FnZS4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgRGlzZWFzZXByZWRpY2F0ZXNFeGFtcGxlIHsKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIExvYWQgYWxsIHRoZSBhcmd1bWVudCBmaWxlIHBhdGhzIG9yIFVSSXMgYXMgaW5zdGFuY2VzIG9mIHRoZSBtb2RlbC4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gYXJncyB0aGUgZmlsZSBwYXRocyBvciBVUklzLgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CisJCS8vIENyZWF0ZSBhIHJlc291cmNlIHNldCB0byBob2xkIHRoZSByZXNvdXJjZXMuCisJCS8vCisJCVJlc291cmNlU2V0IHJlc291cmNlU2V0ID0gbmV3IFJlc291cmNlU2V0SW1wbCgpOworCQkKKwkJLy8gUmVnaXN0ZXIgdGhlIGFwcHJvcHJpYXRlIHJlc291cmNlIGZhY3RvcnkgdG8gaGFuZGxlIGFsbCBmaWxlIGV4dGVuc2lvbnMuCisJCS8vCisJCXJlc291cmNlU2V0LmdldFJlc291cmNlRmFjdG9yeVJlZ2lzdHJ5KCkuZ2V0RXh0ZW5zaW9uVG9GYWN0b3J5TWFwKCkucHV0CisJCQkoUmVzb3VyY2UuRmFjdG9yeS5SZWdpc3RyeS5ERUZBVUxUX0VYVEVOU0lPTiwgCisJCQkgbmV3IFhNSVJlc291cmNlRmFjdG9yeUltcGwoKSk7CisKKwkJLy8gUmVnaXN0ZXIgdGhlIHBhY2thZ2UgdG8gZW5zdXJlIGl0IGlzIGF2YWlsYWJsZSBkdXJpbmcgbG9hZGluZy4KKwkJLy8KKwkJcmVzb3VyY2VTZXQuZ2V0UGFja2FnZVJlZ2lzdHJ5KCkucHV0CisJCQkoRGlzZWFzZXByZWRpY2F0ZXNQYWNrYWdlLmVOU19VUkksIAorCQkJIERpc2Vhc2VwcmVkaWNhdGVzUGFja2FnZS5lSU5TVEFOQ0UpOworICAgICAgICAKKwkJLy8gSWYgdGhlcmUgYXJlIG5vIGFyZ3VtZW50cywgZW1pdCBhbiBhcHByb3ByaWF0ZSB1c2FnZSBtZXNzYWdlLgorCQkvLworCQlpZiAoYXJncy5sZW5ndGggPT0gMCkgeworCQkJU3lzdGVtLm91dC5wcmludGxuKCJFbnRlciBhIGxpc3Qgb2YgZmlsZSBwYXRocyBvciBVUklzIHRoYXQgaGF2ZSBjb250ZW50IGxpa2UgdGhpczoiKTsgLy8kTk9OLU5MUy0xJAorCQkJdHJ5IHsKKwkJCQlSZXNvdXJjZSByZXNvdXJjZSA9IHJlc291cmNlU2V0LmNyZWF0ZVJlc291cmNlKFVSSS5jcmVhdGVVUkkoImh0dHA6Ly8vTXkuZGlzZWFzZXByZWRpY2F0ZXMiKSk7IC8vJE5PTi1OTFMtMSQKKwkJCQlMYWJlbFZhbHVlVGVzdCByb290ID0gRGlzZWFzZXByZWRpY2F0ZXNGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVMYWJlbFZhbHVlVGVzdCgpOworCQkJCXJlc291cmNlLmdldENvbnRlbnRzKCkuYWRkKHJvb3QpOworCQkJCXJlc291cmNlLnNhdmUoU3lzdGVtLm91dCwgbnVsbCk7CisJCQl9CisJCQljYXRjaCAoSU9FeGNlcHRpb24gZXhjZXB0aW9uKSB7CisJCQkJZXhjZXB0aW9uLnByaW50U3RhY2tUcmFjZSgpOworCQkJfQorCQl9CisJCWVsc2UgeworCQkJLy8gSXRlcmF0ZSBvdmVyIGFsbCB0aGUgYXJndW1lbnRzLgorCQkJLy8KKwkJCWZvciAoaW50IGkgPSAwOyBpIDwgYXJncy5sZW5ndGg7ICsraSkgeworCQkJCS8vIENvbnN0cnVjdCB0aGUgVVJJIGZvciB0aGUgaW5zdGFuY2UgZmlsZS4KKwkJCQkvLyBUaGUgYXJndW1lbnQgaXMgdHJlYXRlZCBhcyBhIGZpbGUgcGF0aCBvbmx5IGlmIGl0IGRlbm90ZXMgYW4gZXhpc3RpbmcgZmlsZS4KKwkJCQkvLyBPdGhlcndpc2UsIGl0J3MgZGlyZWN0bHkgdHJlYXRlZCBhcyBhIFVSTC4KKwkJCQkvLworCQkJCUZpbGUgZmlsZSA9IG5ldyBGaWxlKGFyZ3NbaV0pOworCQkJCVVSSSB1cmkgPSBmaWxlLmlzRmlsZSgpID8gVVJJLmNyZWF0ZUZpbGVVUkkoZmlsZS5nZXRBYnNvbHV0ZVBhdGgoKSk6IFVSSS5jcmVhdGVVUkkoYXJnc1tpXSk7CisKKwkJCQl0cnkgeworCQkJCQkvLyBEZW1hbmQgbG9hZCByZXNvdXJjZSBmb3IgdGhpcyBmaWxlLgorCQkJCQkvLworCQkJCQlSZXNvdXJjZSByZXNvdXJjZSA9IHJlc291cmNlU2V0LmdldFJlc291cmNlKHVyaSwgdHJ1ZSk7CisJCQkJCVN5c3RlbS5vdXQucHJpbnRsbigiTG9hZGVkICIgKyB1cmkpOyAvLyROT04tTkxTLTEkCisKKwkJCQkJLy8gVmFsaWRhdGUgdGhlIGNvbnRlbnRzIG9mIHRoZSBsb2FkZWQgcmVzb3VyY2UuCisJCQkJCS8vCisJCQkJCWZvciAoRU9iamVjdCBlT2JqZWN0IDogcmVzb3VyY2UuZ2V0Q29udGVudHMoKSkgeworCQkJCQkJRGlhZ25vc3RpYyBkaWFnbm9zdGljID0gRGlhZ25vc3RpY2lhbi5JTlNUQU5DRS52YWxpZGF0ZShlT2JqZWN0KTsKKwkJCQkJCWlmIChkaWFnbm9zdGljLmdldFNldmVyaXR5KCkgIT0gRGlhZ25vc3RpYy5PSykgeworCQkJCQkJCXByaW50RGlhZ25vc3RpYyhkaWFnbm9zdGljLCAiIik7IC8vJE5PTi1OTFMtMSQKKwkJCQkJCX0KKwkJCQkJfQorCQkJCX0KKwkJCQljYXRjaCAoUnVudGltZUV4Y2VwdGlvbiBleGNlcHRpb24pIHsKKwkJCQkJU3lzdGVtLm91dC5wcmludGxuKCJQcm9ibGVtIGxvYWRpbmcgIiArIHVyaSk7IC8vJE5PTi1OTFMtMSQKKwkJCQkJZXhjZXB0aW9uLnByaW50U3RhY2tUcmFjZSgpOworCQkJCX0KKwkJCX0KKwkJfQorCX0KKwkKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFByaW50cyBkaWFnbm9zdGljcyB3aXRoIGluZGVudGF0aW9uLgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSBkaWFnbm9zdGljIHRoZSBkaWFnbm9zdGljIHRvIHByaW50LgorCSAqIEBwYXJhbSBpbmRlbnQgdGhlIGluZGVudGF0aW9uIGZvciBwcmludGluZy4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHN0YXRpYyB2b2lkIHByaW50RGlhZ25vc3RpYyhEaWFnbm9zdGljIGRpYWdub3N0aWMsIFN0cmluZyBpbmRlbnQpIHsKKwkJU3lzdGVtLm91dC5wcmludChpbmRlbnQpOworCQlTeXN0ZW0ub3V0LnByaW50bG4oZGlhZ25vc3RpYy5nZXRNZXNzYWdlKCkpOworCQlmb3IgKERpYWdub3N0aWMgY2hpbGQgOiBkaWFnbm9zdGljLmdldENoaWxkcmVuKCkpIHsKKwkJCXByaW50RGlhZ25vc3RpYyhjaGlsZCwgaW5kZW50ICsgIiAgIik7IC8vJE5PTi1OTFMtMSQKKwkJfQorCX0KKworfSAvL0Rpc2Vhc2VwcmVkaWNhdGVzRXhhbXBsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvcHJlZGljYXRlcy9kaXNlYXNlcHJlZGljYXRlcy90ZXN0cy9EaXNlYXNlcHJlZGljYXRlc1Rlc3RzLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9wcmVkaWNhdGVzL2Rpc2Vhc2VwcmVkaWNhdGVzL3Rlc3RzL0Rpc2Vhc2VwcmVkaWNhdGVzVGVzdHMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MTBmZTkxCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvcHJlZGljYXRlcy9kaXNlYXNlcHJlZGljYXRlcy90ZXN0cy9EaXNlYXNlcHJlZGljYXRlc1Rlc3RzLmphdmEKQEAgLTAsMCArMSw1NiBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMucHJlZGljYXRlcy5kaXNlYXNlcHJlZGljYXRlcy50ZXN0czsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogCisgKiBDb3B5cmlnaHQgKGMpIDIwMTEgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuIAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyAKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0IAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwgCisgKiAKKyAqIENvbnRyaWJ1dG9yczogCisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdDsKK2ltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdFN1aXRlOworCitpbXBvcnQganVuaXQudGV4dHVpLlRlc3RSdW5uZXI7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIEEgdGVzdCBzdWl0ZSBmb3IgdGhlICc8ZW0+PGI+ZGlzZWFzZXByZWRpY2F0ZXM8L2I+PC9lbT4nIHBhY2thZ2UuCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIERpc2Vhc2VwcmVkaWNhdGVzVGVzdHMgZXh0ZW5kcyBUZXN0U3VpdGUgeworCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgeworCQlUZXN0UnVubmVyLnJ1bihzdWl0ZSgpKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgc3RhdGljIFRlc3Qgc3VpdGUoKSB7CisJCVRlc3RTdWl0ZSBzdWl0ZSA9IG5ldyBEaXNlYXNlcHJlZGljYXRlc1Rlc3RzKCJkaXNlYXNlcHJlZGljYXRlcyBUZXN0cyIpOyAvLyROT04tTkxTLTEkCisJCXN1aXRlLmFkZFRlc3RTdWl0ZShMYWJlbFZhbHVlVGVzdFRlc3QuY2xhc3MpOworCQlyZXR1cm4gc3VpdGU7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIERpc2Vhc2VwcmVkaWNhdGVzVGVzdHMoU3RyaW5nIG5hbWUpIHsKKwkJc3VwZXIobmFtZSk7CisJfQorCit9IC8vRGlzZWFzZXByZWRpY2F0ZXNUZXN0cwpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvcHJlZGljYXRlcy9kaXNlYXNlcHJlZGljYXRlcy90ZXN0cy9MYWJlbFZhbHVlVGVzdFRlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3ByZWRpY2F0ZXMvZGlzZWFzZXByZWRpY2F0ZXMvdGVzdHMvTGFiZWxWYWx1ZVRlc3RUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGIxNGQxOAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3ByZWRpY2F0ZXMvZGlzZWFzZXByZWRpY2F0ZXMvdGVzdHMvTGFiZWxWYWx1ZVRlc3RUZXN0LmphdmEKQEAgLTAsMCArMSw5OCBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMucHJlZGljYXRlcy5kaXNlYXNlcHJlZGljYXRlcy50ZXN0czsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogCisgKiBDb3B5cmlnaHQgKGMpIDIwMTEgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuIAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyAKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0IAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwgCisgKiAKKyAqIENvbnRyaWJ1dG9yczogCisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7CisKK2ltcG9ydCBqdW5pdC50ZXh0dWkuVGVzdFJ1bm5lcjsKKworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5wcmVkaWNhdGVzLmRpc2Vhc2VwcmVkaWNhdGVzLkRpc2Vhc2VwcmVkaWNhdGVzRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMucHJlZGljYXRlcy5kaXNlYXNlcHJlZGljYXRlcy5MYWJlbFZhbHVlVGVzdDsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogQSB0ZXN0IGNhc2UgZm9yIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5MYWJlbCBWYWx1ZSBUZXN0PC9iPjwvZW0+Jy4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgTGFiZWxWYWx1ZVRlc3RUZXN0IGV4dGVuZHMgVGVzdENhc2UgeworCisJLyoqCisJICogVGhlIGZpeHR1cmUgZm9yIHRoaXMgTGFiZWwgVmFsdWUgVGVzdCB0ZXN0IGNhc2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIExhYmVsVmFsdWVUZXN0IGZpeHR1cmUgPSBudWxsOworCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgeworCQlUZXN0UnVubmVyLnJ1bihMYWJlbFZhbHVlVGVzdFRlc3QuY2xhc3MpOworCX0KKworCS8qKgorCSAqIENvbnN0cnVjdHMgYSBuZXcgTGFiZWwgVmFsdWUgVGVzdCB0ZXN0IGNhc2Ugd2l0aCB0aGUgZ2l2ZW4gbmFtZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgTGFiZWxWYWx1ZVRlc3RUZXN0KFN0cmluZyBuYW1lKSB7CisJCXN1cGVyKG5hbWUpOworCX0KKworCS8qKgorCSAqIFNldHMgdGhlIGZpeHR1cmUgZm9yIHRoaXMgTGFiZWwgVmFsdWUgVGVzdCB0ZXN0IGNhc2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgc2V0Rml4dHVyZShMYWJlbFZhbHVlVGVzdCBmaXh0dXJlKSB7CisJCXRoaXMuZml4dHVyZSA9IGZpeHR1cmU7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgZml4dHVyZSBmb3IgdGhpcyBMYWJlbCBWYWx1ZSBUZXN0IHRlc3QgY2FzZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgTGFiZWxWYWx1ZVRlc3QgZ2V0Rml4dHVyZSgpIHsKKwkJcmV0dXJuIGZpeHR1cmU7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZSNzZXRVcCgpCisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIHNldFVwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCXNldEZpeHR1cmUoRGlzZWFzZXByZWRpY2F0ZXNGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVMYWJlbFZhbHVlVGVzdCgpKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlI3RlYXJEb3duKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgdGVhckRvd24oKSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJc2V0Rml4dHVyZShudWxsKTsKKwl9CisKK30gLy9MYWJlbFZhbHVlVGVzdFRlc3QKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3N0YW5kYXJkL3Rlc3RzL0RldGVybWluaXN0aWNTRUlSRGlzZWFzZU1vZGVsVGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvc3RhbmRhcmQvdGVzdHMvRGV0ZXJtaW5pc3RpY1NFSVJEaXNlYXNlTW9kZWxUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTExZWNkYQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3N0YW5kYXJkL3Rlc3RzL0RldGVybWluaXN0aWNTRUlSRGlzZWFzZU1vZGVsVGVzdC5qYXZhCkBAIC0wLDAgKzEsMTI1IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC50ZXN0czsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqdW5pdC50ZXh0dWkuVGVzdFJ1bm5lcjsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5VUkk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLlNURU1VUkk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5EdWJsaW5Db3JlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5EZXRlcm1pbmlzdGljU0VJUkRpc2Vhc2VNb2RlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmRGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TRUlSTGFiZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLmltcGwuRGV0ZXJtaW5pc3RpY1NFSVJEaXNlYXNlTW9kZWxJbXBsOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IEEgdGVzdCBjYXNlIGZvciB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+RGV0ZXJtaW5pc3RpYyBTRUlSIERpc2Vhc2UgTW9kZWw8L2I+PC9lbT4nLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK0BTdXBwcmVzc1dhcm5pbmdzKCJhbGwiKQorcHVibGljIGNsYXNzIERldGVybWluaXN0aWNTRUlSRGlzZWFzZU1vZGVsVGVzdCBleHRlbmRzIFNFSVJUZXN0IHsKKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgVEVTVF9ERVRFUk1JTklTVElDX1NFSVJfRElTRUFTRV9OQU1FID0gIkRldGVybWluaXN0aWMgU0VJUiBEaXNlYXNlIE1vZGVsIjsKKwkKKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgRElTRUFTRV9JREVOVElGSUVSID0gIkRldGVybWluaXN0aWNTRUlSRGlzZWFzZU1vZGVsIjsKKwlwdWJsaWMgc3RhdGljIGZpbmFsIFVSSSBESVNFQVNFX1VSSSA9IFNURU1VUkkuY3JlYXRlVVJJKCJkaXNlYXNlbW9kZWwiICsgIi8iICsgRElTRUFTRV9JREVOVElGSUVSKTsKKwkKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBwYXJhbSBhcmdzCisJICogCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKKwkJVGVzdFJ1bm5lci5ydW4oRGV0ZXJtaW5pc3RpY1NFSVJEaXNlYXNlTW9kZWxUZXN0LmNsYXNzKTsKKwl9CisKKwkvKioKKwkgKiBDb25zdHJ1Y3RzIGEgbmV3IERldGVybWluaXN0aWMgU0VJUiBEaXNlYXNlIE1vZGVsIHRlc3QgY2FzZSB3aXRoIHRoZSBnaXZlbiBuYW1lLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogCisJICogQHBhcmFtIG5hbWUKKwkgKiAKKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIERldGVybWluaXN0aWNTRUlSRGlzZWFzZU1vZGVsVGVzdChTdHJpbmcgbmFtZSkgeworCQlzdXBlcihuYW1lKTsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBmaXh0dXJlIGZvciB0aGlzIERldGVybWluaXN0aWMgU0VJUiBEaXNlYXNlIE1vZGVsIHRlc3QgY2FzZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIERldGVybWluaXN0aWNTRUlSRGlzZWFzZU1vZGVsIGdldEZpeHR1cmUoKSB7CisJCXJldHVybiAoRGV0ZXJtaW5pc3RpY1NFSVJEaXNlYXNlTW9kZWwpZml4dHVyZTsKKwl9CisKKwkvKioKKwkgKiBAcmV0dXJuIHRoZSBsYWJlbCB2YWx1ZSBmaXh0dXJlCisJICovCisJU0VJUkxhYmVsIGdldExhYmVsRml4dHVyZSgpIHsKKwkJcmV0dXJuIChTRUlSTGFiZWwpIGxhYmVsRml4dHVyZTsKKwl9IC8vIGdldExhYmVsVmFsdWVGaXh0dXJlCisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAc2VlIGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZSNzZXRVcCgpCisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBzZXRVcCgpIHRocm93cyBFeGNlcHRpb24geworCQlzZXRGaXh0dXJlKGNyZWF0ZUZpeHR1cmUoKSk7CisJCVN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWwgZG1sID0gY3JlYXRlTGFiZWxGaXh0dXJlKCk7CisJCXNldExhYmVsRml4dHVyZShkbWwpOworCX0gLy8gc2V0VXAKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBzZWUganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlI3RlYXJEb3duKCkKKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCXByb3RlY3RlZCB2b2lkIHRlYXJEb3duKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCXN1cGVyLnRlYXJEb3duKCk7CisJfSAvLyB0ZWFyRG93bgorCisJLyoqCisJICogQ3JlYXRlIGRpc2Vhc2UgbW9kZWwgaW5zdGFuY2UKKwkgKiAKKwkgKiBAcmV0dXJuIGEgZGlzZWFzZSBtb2RlbCBpbnN0YW5jZSBmb3IgdGVzdCBwdXJwb3NlcworCSAqLworCXB1YmxpYyBzdGF0aWMgRGV0ZXJtaW5pc3RpY1NFSVJEaXNlYXNlTW9kZWwgY3JlYXRlRml4dHVyZSgpIHsKKwkJRGV0ZXJtaW5pc3RpY1NFSVJEaXNlYXNlTW9kZWwgZGlzZWFzZU1vZGVsID0gU3RhbmRhcmRGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVEZXRlcm1pbmlzdGljU0VJUkRpc2Vhc2VNb2RlbCgpOworCQlkaXNlYXNlTW9kZWwuc2V0RGlzZWFzZU5hbWUoVEVTVF9ERVRFUk1JTklTVElDX1NFSVJfRElTRUFTRV9OQU1FKTsKKwkJZGlzZWFzZU1vZGVsLmdldER1YmxpbkNvcmUoKS5zZXRUaXRsZShURVNUX0RFVEVSTUlOSVNUSUNfU0VJUl9ESVNFQVNFX05BTUUpOworCQlkaXNlYXNlTW9kZWwuc2V0VGltZVBlcmlvZChURVNUX1RJTUVfUEVSSU9EKTsKKwkJZGlzZWFzZU1vZGVsLnNldFBvcHVsYXRpb25JZGVudGlmaWVyKFRFU1RfUE9QVUxBVElPTl9JREVOVElGSUVSKTsKKwkJZGlzZWFzZU1vZGVsLnNldFRyYW5zbWlzc2lvblJhdGUoVFJBTlNNSVNTSU9OX1JBVEUpOworCQlkaXNlYXNlTW9kZWwuc2V0UmVjb3ZlcnlSYXRlKFJFQ09WRVJZX1JBVEUpOworCQlkaXNlYXNlTW9kZWwuc2V0SW5mZWN0aW91c01vcnRhbGl0eVJhdGUoSU5GRUNUSU9VU19NT1JUQUxJVFlfUkFURSk7CisJCWRpc2Vhc2VNb2RlbC5zZXROb25MaW5lYXJpdHlDb2VmZmljaWVudChOT05fTElORUFSSVRZX0NPRUZGSUNJRU5UKTsKKwkJZGlzZWFzZU1vZGVsLnNldEltbXVuaXR5TG9zc1JhdGUoSU1NVU5JVFlfTE9TU19SQVRFKTsKKwkJZGlzZWFzZU1vZGVsLnNldEluY3ViYXRpb25SYXRlKElOQ1VCQVRJT05fUkFURSk7CisJCQorCQlmaW5hbCBEdWJsaW5Db3JlIGRjID0gZGlzZWFzZU1vZGVsLmdldER1YmxpbkNvcmUoKTsKKwkJZGlzZWFzZU1vZGVsLnNldFVSSShESVNFQVNFX1VSSSk7CisJCWRjLnNldElkZW50aWZpZXIoZGlzZWFzZU1vZGVsLmdldFVSSSgpLnRvU3RyaW5nKCkpOworCQlyZXR1cm4gZGlzZWFzZU1vZGVsOworCX0gLy8gY3JlYXRlRml4dHVyZQorCit9IC8vIERldGVybWluaXN0aWNTRUlSRGlzZWFzZU1vZGVsVGVzdApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvc3RhbmRhcmQvdGVzdHMvRGV0ZXJtaW5pc3RpY1NFSVJTY2VuYXJpb1Rlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3N0YW5kYXJkL3Rlc3RzL0RldGVybWluaXN0aWNTRUlSU2NlbmFyaW9UZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTFmNmE2ZAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3N0YW5kYXJkL3Rlc3RzL0RldGVybWluaXN0aWNTRUlSU2NlbmFyaW9UZXN0LmphdmEKQEAgLTAsMCArMSw0MzEgQEAKKy8vIERldGVybWluaXN0aWNTRUlSU2NlbmFyaW9UZXN0LmphdmEKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLnRlc3RzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7CitpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247CitpbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CitpbXBvcnQgamF2YS51dGlsLk1hcDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5MYWJlbFZhbHVlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5Nb2RlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuTm9kZURlY29yYXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2NlbmFyaW8uU2NlbmFyaW87CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlNFSVJMYWJlbFZhbHVlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5pbXBsLlNFSVJMYWJlbFZhbHVlSW1wbDsKKworLyoqCisgKiBUaGlzIGNsYXNzIGlzIGEgSlVuaXQgdGVzdCBjYXNlIGZvciBhIERldGVybWluaXN0aWMgU0VJUiBkaXNlYXNlIG1vZGVsCisgKiBzY2VuYXJpby4KKyAqIAorICogPHVsPgorICogPGxpPiZtdTsgPSB7QGxpbmsgRGlzZWFzZU1vZGVsVGVzdCNNT1JUQUxJVFlfUkFURX0gPSAwLjAxPC9saT4KKyAqIDxsaT4mYmV0YTsgPSB7QGxpbmsgU0lUZXN0I1RSQU5TTUlTU0lPTl9SQVRFfSA9IDAuMTwvbGk+CisgKiA8bGk+JnNpZ21hOyA9IHtAbGluayBTSVRlc3QjUkVDT1ZFUllfUkFURX0gPSAwLjAxPC9saT4KKyAqIDxsaT54ID0ge0BsaW5rIFNJVGVzdCNJTkZFQ1RJT1VTX01PUlRBTElUWX0gPSAwLjEgPC9saT4KKyAqIDxsaT4mbXU7PHN1Yj5pPC9zdWI+ID0ge0BsaW5rIFNJVGVzdCNJTkZFQ1RJT1VTX01PUlRBSUxZX1JBVEV9ID0gMC4xPC9saT4KKyAqIDxsaT4mZ2FtbWE7ID0ge0BsaW5rIFNJUlRlc3QjSU1NVU5JVFlfTE9TU19SQVRFfSA9IDAuMTwvbGk+CisgKiA8bGk+JnBoaTsgPSB7QGxpbmsgU0VJUlRlc3QjSU5DVUJBVElPTl9SQVRFfSA9IDAuMTwvbGk+CisgKiA8bGk+QXJlYTxzdWI+bDwvc3ViPiA9IDEuMDwvbGk+CisgKiA8bGk+QXJlYSA9IDEuMDwvbGk+CisgKiA8bGk+UCA9IFMgKyBJID0ge0BsaW5rIERpc2Vhc2VNb2RlbFRlc3RVdGlsI1RFU1RfUE9QVUxBVElPTl9DT1VOVH0gPSAxMDA8L2xpPgorICogPC91bD4KKyAqIDxoMj4xeDEgRGV0ZXJtaW5pc3RpYyBTRUlSIFNjZW5hcmlvPC9oMj4KKyAqIAorICovCitwdWJsaWMgY2xhc3MgRGV0ZXJtaW5pc3RpY1NFSVJTY2VuYXJpb1Rlc3QgZXh0ZW5kcyBTRUlSRGlzZWFzZU1vZGVsU2NlbmFyaW9UZXN0IHsKKworCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBESVNFQVNFX1VSSV9QUkVGSVggPSAiRGV0ZXJtaW5pc3RpY1NFSVIiOworCisJcHJpdmF0ZSBzdGF0aWMgTWFwPFN0cmluZywgSW50ZWdlcj4gZXhwZWN0ZWROdW1iZXJPZkxhYmVsc1RvVXBkYXRlID0gbmV3IEhhc2hNYXA8U3RyaW5nLCBJbnRlZ2VyPigpOworCisJcHJpdmF0ZSBzdGF0aWMgTWFwPFN0cmluZywgU0VJUkxhYmVsVmFsdWVbXVtdW10+IGV4cGVjdGVkRGlzZWFzZU1vZGVsU3RhdGVzID0gbmV3IEhhc2hNYXA8U3RyaW5nLCBTRUlSTGFiZWxWYWx1ZVtdW11bXT4oKTsKKworCXN0YXRpYyB7CisKKwkJLy8gMXgxCisJCWV4cGVjdGVkRGlzZWFzZU1vZGVsU3RhdGVzLnB1dChURVNUX1NDRU5BUklPMXgxX0tFWSwKKwkJCQluZXcgU0VJUkxhYmVsVmFsdWVbXVtdW10geworCQkJCS8vIFN0ZXAgMAorCQkJCQkJeyB7CisJCQkJCQkvLyBOWzAsMF0KKwkJCQkJCW5ldyBTRUlSTGFiZWxWYWx1ZUltcGwoOTguOTAsIDAuMTAsIDAuODksIDAuMDEsCTAuMTApIH0gfSwKKworCQkJCQkJLy8gU3RlcCAxCisJCQkJCQl7IHsKKwkJCQkJCS8vIE5bMCwwXQorCQkJCQkJbmV3IFNFSVJMYWJlbFZhbHVlSW1wbCg5OC44MSwgMC4xOCwgMC44MCwgMC4wMiwgMC4xOSkgfSB9IH0gCisJCQkJLy8gU0VJUkxhYmVsVmFsdWUKKworCQkJCSk7IC8vIHB1dChURVNUX1NDRU5BUklPMXgxX0tFWSkKKworCQkvLyAxeDIKKwkJZXhwZWN0ZWREaXNlYXNlTW9kZWxTdGF0ZXMKKwkJCQkucHV0KFRFU1RfU0NFTkFSSU8xeDJfS0VZLAorCQkJCQkJbmV3IFNFSVJMYWJlbFZhbHVlW11bXVtdIHsKKwkJCQkJCS8vIFN0ZXAgMAorCQkJCQkJCQl7IHsKKwkJCQkJCQkJLy8gTlswLDBdCisJCQkJCQkJCQkJbmV3IFNFSVJMYWJlbFZhbHVlSW1wbCgxMDAsIDAsIDAsIDAsIDAsCisJCQkJCQkJCQkJCQkwKSwKKwkJCQkJCQkJCQkvLyBOWzAsMV0KKwkJCQkJCQkJCQluZXcgU0VJUkxhYmVsVmFsdWVJbXBsKDEwMCwgMCwgMCwgMCwgMCwKKwkJCQkJCQkJCQkJCTApIH0gfSwKKworCQkJCQkJCQkvLyBTdGVwIDEKKwkJCQkJCQkJeyB7CisJCQkJCQkJCS8vIE5bMCwwXQorCQkJCQkJCQkJCW5ldyBTRUlSTGFiZWxWYWx1ZUltcGwoMTAwLCAwLCAwLCAwLCAwLAorCQkJCQkJCQkJCQkJMCksCisJCQkJCQkJCQkJLy8gTlswLDFdCisJCQkJCQkJCQkJbmV3IFNFSVJMYWJlbFZhbHVlSW1wbCgxMDAsIDAsIDAsIDAsIDAsCisJCQkJCQkJCQkJCQkwKSB9IH0sCisJCQkJCQkJCS8vIFN0ZXAgMgorCQkJCQkJCQl7IHsKKwkJCQkJCQkJLy8gTlswLDBdCisJCQkJCQkJCQkJbmV3IFNFSVJMYWJlbFZhbHVlSW1wbCgxMDAsIDAsIDAsIDAsIDAsCisJCQkJCQkJCQkJCQkwKSwKKwkJCQkJCQkJCQkvLyBOWzAsMV0KKwkJCQkJCQkJCQluZXcgU0VJUkxhYmVsVmFsdWVJbXBsKDEwMCwgMCwgMCwgMCwgMCwKKwkJCQkJCQkJCQkJCTApIH0gfSB9IC8vIG5ldworCQkJCS8vIFNFSVJMYWJlbFZhbHVlCisJCQkJKTsgLy8gcHV0KFRFU1RfU0NFTkFSSU8xeDJfS0VZKQorCisJCS8vIDF4MworCQlleHBlY3RlZERpc2Vhc2VNb2RlbFN0YXRlcworCQkJCS5wdXQoVEVTVF9TQ0VOQVJJTzF4M19LRVksCisJCQkJCQluZXcgU0VJUkxhYmVsVmFsdWVbXVtdW10geworCQkJCQkJLy8gU3RlcCAwCisJCQkJCQkJCXsgeworCisJCQkJCQkJCS8vIE5bMCwwXQorCQkJCQkJCQkJCW5ldyBTRUlSTGFiZWxWYWx1ZUltcGwoMTAwLCAwLCAwLCAwLCAwLAorCQkJCQkJCQkJCQkJMCksCisJCQkJCQkJCQkJLy8gTlswLDFdCisJCQkJCQkJCQkJbmV3IFNFSVJMYWJlbFZhbHVlSW1wbCgxMDAsIDAsIDAsIDAsIDAsCisJCQkJCQkJCQkJCQkwKSwKKwkJCQkJCQkJCQkvLyBOWzAsMl0KKwkJCQkJCQkJCQluZXcgU0VJUkxhYmVsVmFsdWVJbXBsKDEwMCwgMCwgMCwgMCwgMCwKKwkJCQkJCQkJCQkJCTApCisKKwkJCQkJCQkJfSB9LAorCisJCQkJCQkJCS8vIFN0ZXAgMQorCQkJCQkJCQl7IHsKKwkJCQkJCQkJLy8gTlswLDBdCisJCQkJCQkJCQkJbmV3IFNFSVJMYWJlbFZhbHVlSW1wbCgxMDAsIDAsIDAsIDAsIDAsCisJCQkJCQkJCQkJCQkwKSwKKwkJCQkJCQkJCQkvLyBOWzAsMV0KKwkJCQkJCQkJCQluZXcgU0VJUkxhYmVsVmFsdWVJbXBsKDEwMCwgMCwgMCwgMCwgMCwKKwkJCQkJCQkJCQkJCTApLAorCQkJCQkJCQkJCS8vIE5bMCwyXQorCQkJCQkJCQkJCW5ldyBTRUlSTGFiZWxWYWx1ZUltcGwoMTAwLCAwLCAwLCAwLCAwLAorCQkJCQkJCQkJCQkJMCkKKworCQkJCQkJCQl9IH0sCisKKwkJCQkJCQkJLy8gU3RlcCAyCisJCQkJCQkJCXsgeworCQkJCQkJCQkvLyBOWzAsMF0KKwkJCQkJCQkJCQluZXcgU0VJUkxhYmVsVmFsdWVJbXBsKDEwMCwgMCwgMCwgMCwgMCwKKwkJCQkJCQkJCQkJCTApLAorCQkJCQkJCQkJCS8vIE5bMCwxXQorCQkJCQkJCQkJCW5ldyBTRUlSTGFiZWxWYWx1ZUltcGwoMTAwLCAwLCAwLCAwLCAwLAorCQkJCQkJCQkJCQkJMCksCisJCQkJCQkJCQkJLy8gTlswLDJdCisJCQkJCQkJCQkJbmV3IFNFSVJMYWJlbFZhbHVlSW1wbCgxMDAsIDAsIDAsIDAsIDAsCisJCQkJCQkJCQkJCQkwKQorCisJCQkJCQkJCX0gfSB9IC8vIG5ldyBTRUlSTGFiZWxWYWx1ZQorCisJCQkJKTsgLy8gcHV0KFRFU1RfU0NFTkFSSU8xeDNfS0VZKQorCisJCS8vIDJ4MgorCQlleHBlY3RlZERpc2Vhc2VNb2RlbFN0YXRlcy5wdXQoVEVTVF9TQ0VOQVJJTzJ4Ml9LRVksCisJCQkJbmV3IFNFSVJMYWJlbFZhbHVlW11bXVtdIHsKKwkJCQkvLyBTdGVwIDAKKwkJCQkJCXsKKwkJCQkJCQkJeworCisJCQkJCQkJCS8vIE5bMCwwXQorCQkJCQkJCQkJCW5ldyBTRUlSTGFiZWxWYWx1ZUltcGwoMTAwLCAwLCAwLCAwLCAwLAorCQkJCQkJCQkJCQkJMCksCisJCQkJCQkJCQkJLy8gTlswLDFdCisJCQkJCQkJCQkJbmV3IFNFSVJMYWJlbFZhbHVlSW1wbCgxMDAsIDAsIDAsIDAsIDAsCisJCQkJCQkJCQkJCQkwKQorCisJCQkJCQkJCX0sCisJCQkJCQkJCXsKKworCQkJCQkJCQkvLyBOWzEsMF0KKwkJCQkJCQkJCQluZXcgU0VJUkxhYmVsVmFsdWVJbXBsKDEwMCwgMCwgMCwgMCwgMCwKKwkJCQkJCQkJCQkJCTApLAorCQkJCQkJCQkJCS8vIE5bMSwxXQorCQkJCQkJCQkJCW5ldyBTRUlSTGFiZWxWYWx1ZUltcGwoMTAwLCAwLCAwLCAwLCAwLAorCQkJCQkJCQkJCQkJMCkKKworCQkJCQkJCQl9IH0sCisKKwkJCQkJCS8vIFN0ZXAgMQorCQkJCQkJeworCQkJCQkJCQl7CisJCQkJCQkJCS8vIE5bMCwwXQorCQkJCQkJCQkJCW5ldyBTRUlSTGFiZWxWYWx1ZUltcGwoMTAwLCAwLCAwLCAwLCAwLAorCQkJCQkJCQkJCQkJMCksCisJCQkJCQkJCQkJLy8gTlswLDF6CisJCQkJCQkJCQkJbmV3IFNFSVJMYWJlbFZhbHVlSW1wbCgxMDAsIDAsIDAsIDAsIDAsCisJCQkJCQkJCQkJCQkwKQorCisJCQkJCQkJCX0sCisJCQkJCQkJCXsKKworCQkJCQkJCQkvLyBOWzEsMF0KKwkJCQkJCQkJCQluZXcgU0VJUkxhYmVsVmFsdWVJbXBsKDEwMCwgMCwgMCwgMCwgMCwKKwkJCQkJCQkJCQkJCTApLAorCQkJCQkJCQkJCS8vIE5bMSwxXQorCQkJCQkJCQkJCW5ldyBTRUlSTGFiZWxWYWx1ZUltcGwoMTAwLCAwLCAwLCAwLCAwLAorCQkJCQkJCQkJCQkJMCkKKworCQkJCQkJCQl9IH0sCisKKwkJCQkJCS8vIFN0ZXAgMgorCQkJCQkJeworCQkJCQkJCQl7CisJCQkJCQkJCS8vIE5bMCwwXQorCQkJCQkJCQkJCW5ldyBTRUlSTGFiZWxWYWx1ZUltcGwoMTAwLCAwLCAwLCAwLCAwLAorCQkJCQkJCQkJCQkJMCksCisJCQkJCQkJCQkJLy8gTlswLDFdCisJCQkJCQkJCQkJbmV3IFNFSVJMYWJlbFZhbHVlSW1wbCgxMDAsIDAsIDAsIDAsIDAsCisJCQkJCQkJCQkJCQkwKQorCisJCQkJCQkJCX0sCisJCQkJCQkJCXsKKworCQkJCQkJCQkvLyBOWzEsMF0KKwkJCQkJCQkJCQluZXcgU0VJUkxhYmVsVmFsdWVJbXBsKDEwMCwgMCwgMCwgMCwgMCwKKwkJCQkJCQkJCQkJCTApLAorCQkJCQkJCQkJCS8vIE5bMSwxXQorCQkJCQkJCQkJCW5ldyBTRUlSTGFiZWxWYWx1ZUltcGwoMTAwLCAwLCAwLCAwLCAwLAorCQkJCQkJCQkJCQkJMCkKKworCQkJCQkJCQl9IH0gfSAvLyBuZXcgU0VJUkxhYmVsVmFsdWUKKworCQkJCSk7IC8vIHB1dChURVNUX1NDRU5BUklPMngyX0tFWSkKKworCQkvLyAzeDMKKwkJZXhwZWN0ZWREaXNlYXNlTW9kZWxTdGF0ZXMucHV0KFRFU1RfU0NFTkFSSU8zeDNfS0VZLAorCQkJCW5ldyBTRUlSTGFiZWxWYWx1ZVtdW11bXSB7CisJCQkJLy8gU3RlcCAwCisJCQkJCQl7CisJCQkJCQkJCXsKKworCQkJCQkJCQkvLyBOWzAsMF0KKwkJCQkJCQkJCQluZXcgU0VJUkxhYmVsVmFsdWVJbXBsKDEwMCwgMCwgMCwgMCwgMCwKKwkJCQkJCQkJCQkJCTApLAorCQkJCQkJCQkJCS8vIE5bMCwxXQorCQkJCQkJCQkJCW5ldyBTRUlSTGFiZWxWYWx1ZUltcGwoMTAwLCAwLCAwLCAwLCAwLAorCQkJCQkJCQkJCQkJMCksCisJCQkJCQkJCQkJLy8gTlswLDJdCisJCQkJCQkJCQkJbmV3IFNFSVJMYWJlbFZhbHVlSW1wbCgxMDAsIDAsIDAsIDAsIDAsCisJCQkJCQkJCQkJCQkwKQorCisJCQkJCQkJCX0sCisJCQkJCQkJCXsKKworCQkJCQkJCQkvLyBOWzEsMF0KKwkJCQkJCQkJCQluZXcgU0VJUkxhYmVsVmFsdWVJbXBsKDEwMCwgMCwgMCwgMCwgMCwKKwkJCQkJCQkJCQkJCTApLAorCQkJCQkJCQkJCS8vIE5bMSwxXQorCQkJCQkJCQkJCW5ldyBTRUlSTGFiZWxWYWx1ZUltcGwoMTAwLCAwLCAwLCAwLCAwLAorCQkJCQkJCQkJCQkJMCksCisJCQkJCQkJCQkJLy8gTlsxLDJdCisJCQkJCQkJCQkJbmV3IFNFSVJMYWJlbFZhbHVlSW1wbCgxMDAsIDAsIDAsIDAsIDAsCisJCQkJCQkJCQkJCQkwKQorCisJCQkJCQkJCX0sCisJCQkJCQkJCXsKKworCQkJCQkJCQkvLyBOWzIsMF0KKwkJCQkJCQkJCQluZXcgU0VJUkxhYmVsVmFsdWVJbXBsKDEwMCwgMCwgMCwgMCwgMCwKKwkJCQkJCQkJCQkJCTApLAorCQkJCQkJCQkJCS8vIE5bMiwxXQorCQkJCQkJCQkJCW5ldyBTRUlSTGFiZWxWYWx1ZUltcGwoMTAwLCAwLCAwLCAwLCAwLAorCQkJCQkJCQkJCQkJMCksCisJCQkJCQkJCQkJLy8gTlsyLDJdCisJCQkJCQkJCQkJbmV3IFNFSVJMYWJlbFZhbHVlSW1wbCgxMDAsIDAsIDAsIDAsIDAsCisJCQkJCQkJCQkJCQkwKQorCisJCQkJCQkJCX0gfSwKKworCQkJCQkJLy8gU3RlcCAxCisJCQkJCQl7CisJCQkJCQkJCXsKKwkJCQkJCQkJLy8gTlswLDBdCisJCQkJCQkJCQkJbmV3IFNFSVJMYWJlbFZhbHVlSW1wbCgxMDAsIDAsIDAsIDAsIDAsCisJCQkJCQkJCQkJCQkwKSwKKwkJCQkJCQkJCQkvLyBOWzAsMV0KKwkJCQkJCQkJCQluZXcgU0VJUkxhYmVsVmFsdWVJbXBsKDEwMCwgMCwgMCwgMCwgMCwKKwkJCQkJCQkJCQkJCTApLAorCQkJCQkJCQkJCS8vIE5bMCwyXQorCQkJCQkJCQkJCW5ldyBTRUlSTGFiZWxWYWx1ZUltcGwoMTAwLCAwLCAwLCAwLCAwLAorCQkJCQkJCQkJCQkJMCkKKworCQkJCQkJCQl9LAorCQkJCQkJCQl7CisKKwkJCQkJCQkJLy8gTlsxLDBdCisJCQkJCQkJCQkJbmV3IFNFSVJMYWJlbFZhbHVlSW1wbCgxMDAsIDAsIDAsIDAsIDAsCisJCQkJCQkJCQkJCQkwKSwKKwkJCQkJCQkJCQkvLyBOWzEsMV0KKwkJCQkJCQkJCQluZXcgU0VJUkxhYmVsVmFsdWVJbXBsKDEwMCwgMCwgMCwgMCwgMCwKKwkJCQkJCQkJCQkJCTApLAorCQkJCQkJCQkJCS8vIE5bMSwyXQorCQkJCQkJCQkJCW5ldyBTRUlSTGFiZWxWYWx1ZUltcGwoMTAwLCAwLCAwLCAwLCAwLAorCQkJCQkJCQkJCQkJMCkKKworCQkJCQkJCQl9LAorCQkJCQkJCQl7CisKKwkJCQkJCQkJLy8gTlsyLDBdCisJCQkJCQkJCQkJbmV3IFNFSVJMYWJlbFZhbHVlSW1wbCgxMDAsIDAsIDAsIDAsIDAsCisJCQkJCQkJCQkJCQkwKSwKKwkJCQkJCQkJCQkvLyBOWzIsMV0KKwkJCQkJCQkJCQluZXcgU0VJUkxhYmVsVmFsdWVJbXBsKDEwMCwgMCwgMCwgMCwgMCwKKwkJCQkJCQkJCQkJCTApLAorCQkJCQkJCQkJCS8vIE5bMiwyXQorCQkJCQkJCQkJCW5ldyBTRUlSTGFiZWxWYWx1ZUltcGwoMTAwLCAwLCAwLCAwLCAwLAorCQkJCQkJCQkJCQkJMCkKKworCQkJCQkJCQl9IH0sCisKKwkJCQkJCS8vIFN0ZXAgMgorCQkJCQkJeworCQkJCQkJCQl7CisJCQkJCQkJCS8vIE5bMCwwXQorCQkJCQkJCQkJCW5ldyBTRUlSTGFiZWxWYWx1ZUltcGwoMTAwLCAwLCAwLCAwLCAwLAorCQkJCQkJCQkJCQkJMCksCisJCQkJCQkJCQkJLy8gTlswLDFdCisJCQkJCQkJCQkJbmV3IFNFSVJMYWJlbFZhbHVlSW1wbCgxMDAsIDAsIDAsIDAsIDAsCisJCQkJCQkJCQkJCQkwKSwKKwkJCQkJCQkJCQkvLyBOWzAsMl0KKwkJCQkJCQkJCQluZXcgU0VJUkxhYmVsVmFsdWVJbXBsKDEwMCwgMCwgMCwgMCwgMCwKKwkJCQkJCQkJCQkJCTApCisKKwkJCQkJCQkJfSwKKwkJCQkJCQkJeworCisJCQkJCQkJCS8vIE5bMSwwXQorCQkJCQkJCQkJCW5ldyBTRUlSTGFiZWxWYWx1ZUltcGwoMTAwLCAwLCAwLCAwLCAwLAorCQkJCQkJCQkJCQkJMCksCisJCQkJCQkJCQkJLy8gTlsxLDFdCisJCQkJCQkJCQkJbmV3IFNFSVJMYWJlbFZhbHVlSW1wbCgxMDAsIDAsIDAsIDAsIDAsCisJCQkJCQkJCQkJCQkwKSwKKwkJCQkJCQkJCQkvLyBOWzEsMl0KKwkJCQkJCQkJCQluZXcgU0VJUkxhYmVsVmFsdWVJbXBsKDEwMCwgMCwgMCwgMCwgMCwKKwkJCQkJCQkJCQkJCTApCisKKwkJCQkJCQkJfSwKKwkJCQkJCQkJeworCisJCQkJCQkJCS8vIE5bMiwwXQorCQkJCQkJCQkJCW5ldyBTRUlSTGFiZWxWYWx1ZUltcGwoMTAwLCAwLCAwLCAwLCAwLAorCQkJCQkJCQkJCQkJMCksCisJCQkJCQkJCQkJLy8gTlsyLDFdCisJCQkJCQkJCQkJbmV3IFNFSVJMYWJlbFZhbHVlSW1wbCgxMDAsIDAsIDAsIDAsIDAsCisJCQkJCQkJCQkJCQkwKSwKKwkJCQkJCQkJCQkvLyBOWzIsMl0KKwkJCQkJCQkJCQluZXcgU0VJUkxhYmVsVmFsdWVJbXBsKDEwMCwgMCwgMCwgMCwgMCwKKwkJCQkJCQkJCQkJCTApCisKKwkJCQkJCQkJfSB9IH0gLy8gbmV3IFNFSVJMYWJlbFZhbHVlCisKKwkJCQkpOyAvLyBwdXQoVEVTVF9TQ0VOQVJJTzN4M19LRVkpCisKKwkJLy8gRmlsbCBvdXQgdGhlIG1hcCB0aGF0IHNwZWNpZmllcyBob3cgbWFueSBsYWJlbHMgc2hvdWxkIGJlIHVwZGF0ZWQgYnkKKwkJLy8gYSBkaXNlYXNlIG1vZGVsIGZvciBlYWNoIHRlc3QuCisJCWZvciAoVGVzdFNwZWMgdGVzdFNwZWMgOiB0ZXN0U3BlY2lmaWNhdGlvbnMpIHsKKwkJCWV4cGVjdGVkTnVtYmVyT2ZMYWJlbHNUb1VwZGF0ZQorCQkJCQkucHV0KAorCQkJCQkJCXRlc3RTcGVjLnNjZW5hcmlvRGlzZWFzZUtleSwKKwkJCQkJCQluZXcgSW50ZWdlcigKKwkJCQkJCQkJCWNvbXB1dGVFeHBlY3RlZE51bWJlck9mTGFiZWxzKGV4cGVjdGVkRGlzZWFzZU1vZGVsU3RhdGVzCisJCQkJCQkJCQkJCS5nZXQodGVzdFNwZWMuc2NlbmFyaW9EaXNlYXNlS2V5KSkpKTsKKwkJfSAvLyBmb3IgZWFjaCB0ZXN0IHNwZWNpZmljYXRpb24KKworCX0gLy8gc3RhdGljCisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC50ZXN0cy5EaXNlYXNlTW9kZWxTY2VuYXJpb1Rlc3QjZ2V0RGlzZWFzZU1vZGVsc1RvVGVzdCgpCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIExpc3Q8Tm9kZURlY29yYXRvcj4gZ2V0RGlzZWFzZU1vZGVsc1RvVGVzdCgpIHsKKwkJZmluYWwgTGlzdDxOb2RlRGVjb3JhdG9yPiByZXRWYWx1ZSA9IG5ldyBBcnJheUxpc3Q8Tm9kZURlY29yYXRvcj4oKTsKKwkJcmV0VmFsdWUuYWRkKERldGVybWluaXN0aWNTRUlSRGlzZWFzZU1vZGVsVGVzdC5jcmVhdGVGaXh0dXJlKCkpOworCQlyZXR1cm4gcmV0VmFsdWU7CisJfSAvLyBnZXREaXNlYXNlTW9kZWxzVG9UZXN0CisKKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgaW50IGdldE51bWJlck9mU3RlcHMoZmluYWwgU3RyaW5nIGRpc2Vhc2VTY2VuYXJpb0tleSkgeworCQlTRUlSTGFiZWxWYWx1ZVtdW11bXSB0ZW1wID0gZXhwZWN0ZWREaXNlYXNlTW9kZWxTdGF0ZXMKKwkJCQkuZ2V0KGRpc2Vhc2VTY2VuYXJpb0tleSk7CisJCXJldHVybiB0ZW1wLmxlbmd0aDsKKwl9IC8vIGdldE51bWJlck9mU3RlcHMKKworCUBPdmVycmlkZQorCXByb3RlY3RlZCBpbnQgZ2V0RXhwZWN0ZWROdW1iZXJPZkxhYmVsc1RvVXBkYXRlKAorCQkJZmluYWwgU3RyaW5nIGRpc2Vhc2VTY2VuYXJpb0tleSkgeworCQlJbnRlZ2VyIHRlbXAgPSBleHBlY3RlZE51bWJlck9mTGFiZWxzVG9VcGRhdGUuZ2V0KGRpc2Vhc2VTY2VuYXJpb0tleSk7CisJCXJldHVybiB0ZW1wLmludFZhbHVlKCk7CisJfSAvLyBnZXRFeHBlY3RlZE51bWJlck9mTGFiZWxzVG9VcGRhdGUKKworCUBPdmVycmlkZQorCXByb3RlY3RlZCBMYWJlbFZhbHVlW11bXSBnZXRFeHBlY3RlZERpc2Vhc2VNb2RlbFN0YXRlKAorCQkJZmluYWwgU3RyaW5nIGRpc2Vhc2VTY2VuYXJpb0tleSwgZmluYWwgaW50IHN0ZXApIHsKKwkJZmluYWwgU0VJUkxhYmVsVmFsdWVbXVtdW10gc2VpckxhYmVsVmFsdWUgPSBleHBlY3RlZERpc2Vhc2VNb2RlbFN0YXRlcworCQkJCS5nZXQoZGlzZWFzZVNjZW5hcmlvS2V5KTsKKwkJcmV0dXJuIHNlaXJMYWJlbFZhbHVlW3N0ZXBdOworCX0gLy8gZ2V0RXhwZWN0ZWREaXNlYXNlTW9kZWxTdGF0ZQorCisJcHJvdGVjdGVkIFN0cmluZyBnZXREaXNlYXNlVVJJUHJlZml4KCkgeworCQlyZXR1cm4gRElTRUFTRV9VUklfUFJFRklYOworCX0gLy8gZ2V0RGlzZWFzZVVSSVByZWZpeAorCisJLyoqCisJICogQHBhcmFtIG51bVJvd3MKKwkgKiAgICAgICAgICAgIHRoZSBudW1iZXIgb2Ygcm93cyBpbiB0aGUgbGF0dGljZQorCSAqIEBwYXJhbSBudW1Db2x1bW5zCisJICogICAgICAgICAgICB0aGUgbnVtYmVyIG9mIGNvbHVtbnMgaW4gdGhlIGxhdHRpY2UKKwkgKiBAcmV0dXJuIGEgc2NlbmFyaW8gd2l0aCBub2RlcyBpbiBhIGxhdHRpY2Ugd2l0aCBhIGRldGVybWluaXN0aWMgU0VJUgorCSAqICAgICAgICAgZGlzZWFzZSBtb2RlbCBhbmQgb25lIHBvcHVsYXRpb24gbWVtYmVyIGluZmVjdGVkIGluIE5vZGUgWzBdWzBdCisJICovCisJcHVibGljIHN0YXRpYyBTY2VuYXJpbyBjcmVhdGVTY2VuYXJpbyhmaW5hbCBpbnQgbnVtUm93cywKKwkJCWZpbmFsIGludCBudW1Db2x1bW5zKSB7CisJCWZpbmFsIENvbGxlY3Rpb248Tm9kZURlY29yYXRvcj4gZGlzZWFzZU1vZGVscyA9IG5ldyBBcnJheUxpc3Q8Tm9kZURlY29yYXRvcj4oKTsKKworCQlkaXNlYXNlTW9kZWxzLmFkZChEZXRlcm1pbmlzdGljU0VJUkRpc2Vhc2VNb2RlbFRlc3QuY3JlYXRlRml4dHVyZSgpKTsKKworCQlmaW5hbCBNb2RlbCBtb2RlbCA9IERpc2Vhc2VNb2RlbFRlc3RVdGlsLmNyZWF0ZUxhdHRpY2VNb2RlbCgKKwkJCQlkaXNlYXNlTW9kZWxzLCBudW1Sb3dzLCBudW1Db2x1bW5zLAorCQkJCURpc2Vhc2VNb2RlbFRlc3RVdGlsLlRFU1RfUE9QVUxBVElPTl9DT1VOVCwKKwkJCQlEaXNlYXNlTW9kZWxUZXN0VXRpbC5URVNUX0FSRUEpOworCisJCWZpbmFsIFNjZW5hcmlvIHJldFZhbHVlID0gRGlzZWFzZU1vZGVsVGVzdFV0aWwuY3JlYXRlTGF0dGljZVNjZW5hcmlvKAorCQkJCVNJRGlzZWFzZU1vZGVsU2NlbmFyaW9UZXN0LmNyZWF0ZUluZmVjdG9ycyhtb2RlbCksIG1vZGVsKTsKKworCQlhc3NlcnQgcmV0VmFsdWUuc2FuZSgpOworCisJCXJldHVybiByZXRWYWx1ZTsKKwl9IC8vIGNyZWF0ZUZpeHR1cmUKKworfSAvLyBEZXRlcm1pbmlzdGljU0VJUlNjZW5hcmlvVGVzdApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvc3RhbmRhcmQvdGVzdHMvRGV0ZXJtaW5pc3RpY1NJRGlzZWFzZU1vZGVsVGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvc3RhbmRhcmQvdGVzdHMvRGV0ZXJtaW5pc3RpY1NJRGlzZWFzZU1vZGVsVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUxZGU5NzkKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9zdGFuZGFyZC90ZXN0cy9EZXRlcm1pbmlzdGljU0lEaXNlYXNlTW9kZWxUZXN0LmphdmEKQEAgLTAsMCArMSwxMTQgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLnRlc3RzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGp1bml0LnRleHR1aS5UZXN0UnVubmVyOworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlVSSTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuU1RFTVVSSTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLkR1YmxpbkNvcmU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLkRldGVybWluaXN0aWNTSURpc2Vhc2VNb2RlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmRGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5pbXBsLkRldGVybWluaXN0aWNTSURpc2Vhc2VNb2RlbEltcGw7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gQSB0ZXN0IGNhc2UgZm9yIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5EZXRlcm1pbmlzdGljIFNJIERpc2Vhc2UgTW9kZWw8L2I+PC9lbT4nLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK0BTdXBwcmVzc1dhcm5pbmdzKCJhbGwiKQorcHVibGljIGNsYXNzIERldGVybWluaXN0aWNTSURpc2Vhc2VNb2RlbFRlc3QgZXh0ZW5kcyBTSVRlc3QgeworCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBURVNUX0RFVEVSTUlOSVNUSUNfU0lfRElTRUFTRV9OQU1FID0gIkRldGVybWluaXN0aWMgU0kgRGlzZWFzZSBNb2RlbCI7CisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIERJU0VBU0VfSURFTlRJRklFUiA9ICJEZXRlcm1pbmlzdGljU0lEaXNlYXNlTW9kZWwiOworCXB1YmxpYyBzdGF0aWMgZmluYWwgVVJJIERJU0VBU0VfVVJJID0gU1RFTVVSSS5jcmVhdGVVUkkoImRpc2Vhc2Vtb2RlbCIgKyAiLyIgKyBESVNFQVNFX0lERU5USUZJRVIpOworCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAcGFyYW0gYXJncworCSAqIAorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CisJCVRlc3RSdW5uZXIucnVuKERldGVybWluaXN0aWNTSURpc2Vhc2VNb2RlbFRlc3QuY2xhc3MpOworCX0KKworCS8qKgorCSAqIENvbnN0cnVjdHMgYSBuZXcgRGV0ZXJtaW5pc3RpYyBTSSBEaXNlYXNlIE1vZGVsIHRlc3QgY2FzZSB3aXRoIHRoZSBnaXZlbiBuYW1lLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogCisJICogQHBhcmFtIG5hbWUKKwkgKiAKKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIERldGVybWluaXN0aWNTSURpc2Vhc2VNb2RlbFRlc3QoU3RyaW5nIG5hbWUpIHsKKwkJc3VwZXIobmFtZSk7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgZml4dHVyZSBmb3IgdGhpcyBEZXRlcm1pbmlzdGljIFNJIERpc2Vhc2UgTW9kZWwgdGVzdCBjYXNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgRGV0ZXJtaW5pc3RpY1NJRGlzZWFzZU1vZGVsIGdldEZpeHR1cmUoKSB7CisJCXJldHVybiAoRGV0ZXJtaW5pc3RpY1NJRGlzZWFzZU1vZGVsKWZpeHR1cmU7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogCisJICogQHNlZSBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2Ujc2V0VXAoKQorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJcHJvdGVjdGVkIHZvaWQgc2V0VXAoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJc2V0Rml4dHVyZShjcmVhdGVGaXh0dXJlKCkpOworCQlTdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsIGRtbCA9IGNyZWF0ZUxhYmVsRml4dHVyZSgpOworCQlzZXRMYWJlbEZpeHR1cmUoZG1sKTsKKwl9IC8vIHNldFVwCisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAc2VlIGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZSN0ZWFyRG93bigpCisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCB0ZWFyRG93bigpIHRocm93cyBFeGNlcHRpb24geworCQlzdXBlci50ZWFyRG93bigpOworCX0gLy8gdGVhckRvd24KKworCS8qKgorCSAqIENyZWF0ZSBkaXNlYXNlIG1vZGVsIGluc3RhbmNlCisJICogCisJICogQHJldHVybiBhIGRpc2Vhc2UgbW9kZWwgaW5zdGFuY2UgZm9yIHRlc3QgcHVycG9zZXMKKwkgKi8KKwlwdWJsaWMgc3RhdGljIERldGVybWluaXN0aWNTSURpc2Vhc2VNb2RlbCBjcmVhdGVGaXh0dXJlKCkgeworCQlEZXRlcm1pbmlzdGljU0lEaXNlYXNlTW9kZWwgZGlzZWFzZU1vZGVsID0gU3RhbmRhcmRGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVEZXRlcm1pbmlzdGljU0lEaXNlYXNlTW9kZWwoKTsKKwkJZGlzZWFzZU1vZGVsLnNldERpc2Vhc2VOYW1lKFRFU1RfREVURVJNSU5JU1RJQ19TSV9ESVNFQVNFX05BTUUpOworCQlkaXNlYXNlTW9kZWwuZ2V0RHVibGluQ29yZSgpLnNldFRpdGxlKFRFU1RfREVURVJNSU5JU1RJQ19TSV9ESVNFQVNFX05BTUUpOworCQlkaXNlYXNlTW9kZWwuc2V0VGltZVBlcmlvZChURVNUX1RJTUVfUEVSSU9EKTsKKwkJZGlzZWFzZU1vZGVsLnNldFBvcHVsYXRpb25JZGVudGlmaWVyKFRFU1RfUE9QVUxBVElPTl9JREVOVElGSUVSKTsKKwkJZGlzZWFzZU1vZGVsLnNldFRyYW5zbWlzc2lvblJhdGUoVFJBTlNNSVNTSU9OX1JBVEUpOworCQlkaXNlYXNlTW9kZWwuc2V0UmVjb3ZlcnlSYXRlKFJFQ09WRVJZX1JBVEUpOworCQlkaXNlYXNlTW9kZWwuc2V0SW5mZWN0aW91c01vcnRhbGl0eVJhdGUoSU5GRUNUSU9VU19NT1JUQUxJVFlfUkFURSk7CisJCWRpc2Vhc2VNb2RlbC5zZXROb25MaW5lYXJpdHlDb2VmZmljaWVudChOT05fTElORUFSSVRZX0NPRUZGSUNJRU5UKTsKKwkJCisJCWZpbmFsIER1YmxpbkNvcmUgZGMgPSBkaXNlYXNlTW9kZWwuZ2V0RHVibGluQ29yZSgpOworCQlkaXNlYXNlTW9kZWwuc2V0VVJJKERJU0VBU0VfVVJJKTsKKwkJZGMuc2V0SWRlbnRpZmllcihkaXNlYXNlTW9kZWwuZ2V0VVJJKCkudG9TdHJpbmcoKSk7CisJCXJldHVybiBkaXNlYXNlTW9kZWw7CisJfSAvLyBjcmVhdGVGaXh0dXJlCisJCit9IC8vIERldGVybWluaXN0aWNTSURpc2Vhc2VNb2RlbFRlc3QKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3N0YW5kYXJkL3Rlc3RzL0RldGVybWluaXN0aWNTSVJEaXNlYXNlTW9kZWxUZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9zdGFuZGFyZC90ZXN0cy9EZXRlcm1pbmlzdGljU0lSRGlzZWFzZU1vZGVsVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIxM2U4OWYKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9zdGFuZGFyZC90ZXN0cy9EZXRlcm1pbmlzdGljU0lSRGlzZWFzZU1vZGVsVGVzdC5qYXZhCkBAIC0wLDAgKzEsMTE2IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC50ZXN0czsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqdW5pdC50ZXh0dWkuVGVzdFJ1bm5lcjsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5VUkk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLlNURU1VUkk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5EdWJsaW5Db3JlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5EZXRlcm1pbmlzdGljU0lSRGlzZWFzZU1vZGVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZEZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLmltcGwuRGV0ZXJtaW5pc3RpY1NJUkRpc2Vhc2VNb2RlbEltcGw7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gQSB0ZXN0IGNhc2UgZm9yIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5EZXRlcm1pbmlzdGljIFNJUiBEaXNlYXNlIE1vZGVsPC9iPjwvZW0+Jy4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQGdlbmVyYXRlZAorICovCitAU3VwcHJlc3NXYXJuaW5ncygiYWxsIikKK3B1YmxpYyBjbGFzcyBEZXRlcm1pbmlzdGljU0lSRGlzZWFzZU1vZGVsVGVzdCBleHRlbmRzIFNJUlRlc3QgeworCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBURVNUX0RFVEVSTUlOSVNUSUNfU0lSX0RJU0VBU0VfTkFNRSA9ICJEZXRlcm1pbmlzdGljIFNJUiBEaXNlYXNlIE1vZGVsIjsKKworCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBESVNFQVNFX0lERU5USUZJRVIgPSAiRGV0ZXJtaW5pc3RpY1NJUkRpc2Vhc2VNb2RlbCI7CisJcHVibGljIHN0YXRpYyBmaW5hbCBVUkkgRElTRUFTRV9VUkkgPSBTVEVNVVJJLmNyZWF0ZVVSSSgiZGlzZWFzZW1vZGVsIiArICIvIiArIERJU0VBU0VfSURFTlRJRklFUik7CisJCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAcGFyYW0gYXJncworCSAqIAorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CisJCVRlc3RSdW5uZXIucnVuKERldGVybWluaXN0aWNTSVJEaXNlYXNlTW9kZWxUZXN0LmNsYXNzKTsKKwl9CisKKwkvKioKKwkgKiBDb25zdHJ1Y3RzIGEgbmV3IERldGVybWluaXN0aWMgU0lSIERpc2Vhc2UgTW9kZWwgdGVzdCBjYXNlIHdpdGggdGhlIGdpdmVuIG5hbWUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAcGFyYW0gbmFtZQorCSAqIAorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRGV0ZXJtaW5pc3RpY1NJUkRpc2Vhc2VNb2RlbFRlc3QoU3RyaW5nIG5hbWUpIHsKKwkJc3VwZXIobmFtZSk7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgZml4dHVyZSBmb3IgdGhpcyBEZXRlcm1pbmlzdGljIFNJUiBEaXNlYXNlIE1vZGVsIHRlc3QgY2FzZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIERldGVybWluaXN0aWNTSVJEaXNlYXNlTW9kZWwgZ2V0Rml4dHVyZSgpIHsKKwkJcmV0dXJuIChEZXRlcm1pbmlzdGljU0lSRGlzZWFzZU1vZGVsKWZpeHR1cmU7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogCisJICogQHNlZSBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2Ujc2V0VXAoKQorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJcHJvdGVjdGVkIHZvaWQgc2V0VXAoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJc2V0Rml4dHVyZShjcmVhdGVGaXh0dXJlKCkpOworCQlTdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsIGRtbCA9IGNyZWF0ZUxhYmVsRml4dHVyZSgpOworCQlzZXRMYWJlbEZpeHR1cmUoZG1sKTsKKwl9IC8vIHNldFVwCisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAc2VlIGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZSN0ZWFyRG93bigpCisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCB0ZWFyRG93bigpIHRocm93cyBFeGNlcHRpb24geworCQlzdXBlci50ZWFyRG93bigpOworCX0gLy8gdGVhckRvd24KKworCS8qKgorCSAqIENyZWF0ZSBkaXNlYXNlIG1vZGVsIGluc3RhbmNlCisJICogCisJICogQHJldHVybiBhIGRpc2Vhc2UgbW9kZWwgaW5zdGFuY2UgZm9yIHRlc3QgcHVycG9zZXMKKwkgKi8KKwlwdWJsaWMgc3RhdGljIERldGVybWluaXN0aWNTSVJEaXNlYXNlTW9kZWwgY3JlYXRlRml4dHVyZSgpIHsKKwkJRGV0ZXJtaW5pc3RpY1NJUkRpc2Vhc2VNb2RlbCBkaXNlYXNlTW9kZWwgPSBTdGFuZGFyZEZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZURldGVybWluaXN0aWNTSVJEaXNlYXNlTW9kZWwoKTsKKwkJZGlzZWFzZU1vZGVsLnNldERpc2Vhc2VOYW1lKFRFU1RfREVURVJNSU5JU1RJQ19TSVJfRElTRUFTRV9OQU1FKTsKKwkJZGlzZWFzZU1vZGVsLmdldER1YmxpbkNvcmUoKS5zZXRUaXRsZShURVNUX0RFVEVSTUlOSVNUSUNfU0lSX0RJU0VBU0VfTkFNRSk7CisJCWRpc2Vhc2VNb2RlbC5zZXRUaW1lUGVyaW9kKFRFU1RfVElNRV9QRVJJT0QpOworCQlkaXNlYXNlTW9kZWwuc2V0UG9wdWxhdGlvbklkZW50aWZpZXIoVEVTVF9QT1BVTEFUSU9OX0lERU5USUZJRVIpOworCQlkaXNlYXNlTW9kZWwuc2V0VHJhbnNtaXNzaW9uUmF0ZShUUkFOU01JU1NJT05fUkFURSk7CisJCWRpc2Vhc2VNb2RlbC5zZXRSZWNvdmVyeVJhdGUoUkVDT1ZFUllfUkFURSk7CisJCWRpc2Vhc2VNb2RlbC5zZXRJbmZlY3Rpb3VzTW9ydGFsaXR5UmF0ZShJTkZFQ1RJT1VTX01PUlRBTElUWV9SQVRFKTsKKwkJZGlzZWFzZU1vZGVsLnNldE5vbkxpbmVhcml0eUNvZWZmaWNpZW50KE5PTl9MSU5FQVJJVFlfQ09FRkZJQ0lFTlQpOworCQlkaXNlYXNlTW9kZWwuc2V0SW1tdW5pdHlMb3NzUmF0ZShJTU1VTklUWV9MT1NTX1JBVEUpOworCQkKKwkJZmluYWwgRHVibGluQ29yZSBkYyA9IGRpc2Vhc2VNb2RlbC5nZXREdWJsaW5Db3JlKCk7CisJCWRpc2Vhc2VNb2RlbC5zZXRVUkkoRElTRUFTRV9VUkkpOworCQlkYy5zZXRJZGVudGlmaWVyKGRpc2Vhc2VNb2RlbC5nZXRVUkkoKS50b1N0cmluZygpKTsKKwkJcmV0dXJuIGRpc2Vhc2VNb2RlbDsKKwl9IC8vIGNyZWF0ZUZpeHR1cmUKKworfSAvLyBEZXRlcm1pbmlzdGljU0lSRGlzZWFzZU1vZGVsVGVzdApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvc3RhbmRhcmQvdGVzdHMvRGV0ZXJtaW5pc3RpY1NJUlNjZW5hcmlvVGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvc3RhbmRhcmQvdGVzdHMvRGV0ZXJtaW5pc3RpY1NJUlNjZW5hcmlvVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUxNTM5NDkKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9zdGFuZGFyZC90ZXN0cy9EZXRlcm1pbmlzdGljU0lSU2NlbmFyaW9UZXN0LmphdmEKQEAgLTAsMCArMSwzMzYgQEAKKy8vIERldGVybWluaXN0aWNTSVJTY2VuYXJpb1Rlc3QuamF2YQorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQudGVzdHM7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuTWFwOworCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkxhYmVsVmFsdWU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLk5vZGVEZWNvcmF0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlNJUkxhYmVsVmFsdWU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLmltcGwuU0lSTGFiZWxWYWx1ZUltcGw7CisKKy8qKgorICogVGhpcyBjbGFzcyBpcyBhIEpVbml0IHRlc3QgY2FzZSBmb3IgYSBEZXRlcm1pbmlzdGljIFNJUiBkaXNlYXNlIG1vZGVsCisgKiBzY2VuYXJpby4gCisgKiA8dWw+CisgKiA8bGk+Jm11OyA9IHtAbGluayBEaXNlYXNlTW9kZWxUZXN0I01PUlRBTElUWV9SQVRFfSA9IDAuMDE8L2xpPgorICogPGxpPiZiZXRhOyA9IHtAbGluayBTSVRlc3QjVFJBTlNNSVNTSU9OX1JBVEV9ID0gMC4xPC9saT4KKyAqIDxsaT4mc2lnbWE7ID0ge0BsaW5rIFNJVGVzdCNSRUNPVkVSWV9SQVRFfSA9IDAuMDE8L2xpPgorICogPGxpPnggPSB7QGxpbmsgU0lUZXN0I0lORkVDVElPVVNfTU9SVEFMSVRZfSA9IDAuMSA8L2xpPgorICogPGxpPiZtdTs8c3ViPmk8L3N1Yj4gPSB7QGxpbmsgU0lUZXN0I0lORkVDVElPVVNfTU9SVEFJTFlfUkFURX0gPSAwLjE8L2xpPgorICogPGxpPiZnYW1tYTsgPSB7QGxpbmsgU0lSVGVzdCNJTU1VTklUWV9MT1NTX1JBVEV9ID0gMC4xPC9saT4KKyAqIDxsaT5BcmVhPHN1Yj5sPC9zdWI+ID0gMS4wPC9saT4KKyAqIDxsaT5BcmVhID0gMS4wPC9saT4KKyAqIDxsaT5QID0gUyArIEkgPSB7QGxpbmsgRGlzZWFzZU1vZGVsVGVzdFV0aWwjVEVTVF9QT1BVTEFUSU9OX0NPVU5UfSA9IDEwMDwvbGk+CisgKiA8L3VsPgorICogPGgyPjF4MSBEZXRlcm1pbmlzdGljIFNJUiBTY2VuYXJpbzwvaDI+CisgKiA8aDM+SW5pdGlhbCBTdGF0ZTwvaDM+CisgKiA8cD4KKyAqIFM9IDk5LjAsIEk8c3VwPlI8L3N1cD49MS4wLCBJPHN1cD5GPC9zdXA+PTAuMCwgUj0wLjAsIEI9MC4wLCBEPTAuMCwKKyAqIEREPTAuMAorICogPC9wPgorICogCisgKi8KK3B1YmxpYyBjbGFzcyBEZXRlcm1pbmlzdGljU0lSU2NlbmFyaW9UZXN0IGV4dGVuZHMgU0lSRGlzZWFzZU1vZGVsU2NlbmFyaW9UZXN0IHsKKworCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBESVNFQVNFX1VSSV9QUkVGSVggPSAiRGV0ZXJtaW5pc3RpY1NJUiI7CisKKwlwcml2YXRlIHN0YXRpYyBNYXA8U3RyaW5nLCBJbnRlZ2VyPiBleHBlY3RlZE51bWJlck9mTGFiZWxzVG9VcGRhdGUgPSBuZXcgSGFzaE1hcDxTdHJpbmcsIEludGVnZXI+KCk7CisKKwlwcml2YXRlIHN0YXRpYyBNYXA8U3RyaW5nLCBTSVJMYWJlbFZhbHVlW11bXVtdPiBleHBlY3RlZERpc2Vhc2VNb2RlbFN0YXRlcyA9IG5ldyBIYXNoTWFwPFN0cmluZywgU0lSTGFiZWxWYWx1ZVtdW11bXT4oKTsKKworCXN0YXRpYyB7CisKKwkJLy8gMXgxCisJCWV4cGVjdGVkRGlzZWFzZU1vZGVsU3RhdGVzLnB1dChURVNUX1NDRU5BUklPMXgxX0tFWSwKKwkJCQluZXcgU0lSTGFiZWxWYWx1ZVtdW11bXSB7CisJCQkJLy8gU3RlcCAwCisJCQkJCQl7IHsKKwkJCQkJCS8vIE5bMCwwXQorCQkJCQkJbmV3IFNJUkxhYmVsVmFsdWVJbXBsKDk4LjkwLCAwLjk5LCAwLjAxLCAwLjEwKSB9IH0sCisKKwkJCQkJCS8vIFN0ZXAgMQorCQkJCQkJeyB7CisJCQkJCQkvLyBOWzAsMF0KKwkJCQkJCW5ldyBTSVJMYWJlbFZhbHVlSW1wbCg5OC44MCwgMC45OCwgMC4wMiwgMC4yMCkgfSB9IH0gCisJCQkJLy8gU0lSTGFiZWxWYWx1ZQorCisJCQkJKTsgLy8gcHV0KFRFU1RfU0NFTkFSSU8xeDFfS0VZKQorCisJCS8vIDF4MgorCQlleHBlY3RlZERpc2Vhc2VNb2RlbFN0YXRlcworCQkJCS5wdXQoVEVTVF9TQ0VOQVJJTzF4Ml9LRVksCisJCQkJCQluZXcgU0lSTGFiZWxWYWx1ZVtdW11bXSB7CisJCQkJCQkvLyBTdGVwIDAKKwkJCQkJCQkJeyB7CisJCQkJCQkJCS8vIE5bMCwwXQorCQkJCQkJCQkJCW5ldyBTSVJMYWJlbFZhbHVlSW1wbCgxMDAsIDAsIDAsIDAsIDApLAorCQkJCQkJCQkJCS8vIE5bMCwxXQorCQkJCQkJCQkJCW5ldyBTSVJMYWJlbFZhbHVlSW1wbCgxMDAsIDAsIDAsIDAsIDApIH0gfSwKKworCQkJCQkJCQkvLyBTdGVwIDEKKwkJCQkJCQkJeyB7CisJCQkJCQkJCS8vIE5bMCwwXQorCQkJCQkJCQkJCW5ldyBTSVJMYWJlbFZhbHVlSW1wbCgxMDAsIDAsIDAsIDAsIDApLAorCQkJCQkJCQkJCS8vIE5bMCwxXQorCQkJCQkJCQkJCW5ldyBTSVJMYWJlbFZhbHVlSW1wbCgxMDAsIDAsIDAsIDAsIDAKKwkJCQkJCQkJCQkJCSkgfSB9LAorCQkJCQkJCQkvLyBTdGVwIDIKKwkJCQkJCQkJeyB7CisJCQkJCQkJCS8vIE5bMCwwXQorCQkJCQkJCQkJCW5ldyBTSVJMYWJlbFZhbHVlSW1wbCgxMDAsIDAsIDAsIDAsIDAKKwkJCQkJCQkJCQkJCSksCisJCQkJCQkJCQkJLy8gTlswLDFdCisJCQkJCQkJCQkJbmV3IFNJUkxhYmVsVmFsdWVJbXBsKDEwMCwgMCwgMCwgMCwgMAorCQkJCQkJCQkJCQkJKSB9IH0gfSAvLyBuZXcKKwkJCQkvLyBTSVJMYWJlbFZhbHVlCisJCQkJKTsgLy8gcHV0KFRFU1RfU0NFTkFSSU8xeDJfS0VZKQorCisJCS8vIDF4MworCQlleHBlY3RlZERpc2Vhc2VNb2RlbFN0YXRlcy5wdXQoVEVTVF9TQ0VOQVJJTzF4M19LRVksCisJCQkJbmV3IFNJUkxhYmVsVmFsdWVbXVtdW10geworCQkJCS8vIFN0ZXAgMAorCQkJCQkJeyB7CisKKwkJCQkJCS8vIE5bMCwwXQorCQkJCQkJCQluZXcgU0lSTGFiZWxWYWx1ZUltcGwoMTAwLCAwLCAwLCAwLCAwKSwKKwkJCQkJCQkJLy8gTlswLDFdCisJCQkJCQkJCW5ldyBTSVJMYWJlbFZhbHVlSW1wbCgxMDAsIDAsIDAsIDAsIDApLAorCQkJCQkJCQkvLyBOWzAsMl0KKwkJCQkJCQkJbmV3IFNJUkxhYmVsVmFsdWVJbXBsKDEwMCwgMCwgMCwgMCwgMCkKKworCQkJCQkJfSB9LAorCisJCQkJCQkvLyBTdGVwIDEKKwkJCQkJCXsgeworCQkJCQkJLy8gTlswLDBdCisJCQkJCQkJCW5ldyBTSVJMYWJlbFZhbHVlSW1wbCgxMDAsIDAsIDAsIDAsIDApLAorCQkJCQkJCQkvLyBOWzAsMV0KKwkJCQkJCQkJbmV3IFNJUkxhYmVsVmFsdWVJbXBsKDEwMCwgMCwgMCwgMCwgMCksCisJCQkJCQkJCS8vIE5bMCwyXQorCQkJCQkJCQluZXcgU0lSTGFiZWxWYWx1ZUltcGwoMTAwLCAwLCAwLCAwLCAwKQorCisJCQkJCQl9IH0sCisKKwkJCQkJCS8vIFN0ZXAgMgorCQkJCQkJeyB7CisJCQkJCQkvLyBOWzAsMF0KKwkJCQkJCQkJbmV3IFNJUkxhYmVsVmFsdWVJbXBsKDEwMCwgMCwgMCwgMCwgMCksCisJCQkJCQkJCS8vIE5bMCwxXQorCQkJCQkJCQluZXcgU0lSTGFiZWxWYWx1ZUltcGwoMTAwLCAwLCAwLCAwLCAwKSwKKwkJCQkJCQkJLy8gTlswLDJdCisJCQkJCQkJCW5ldyBTSVJMYWJlbFZhbHVlSW1wbCgxMDAsIDAsIDAsIDAsIDApCisKKwkJCQkJCX0gfSB9IC8vIG5ldyBTSVJMYWJlbFZhbHVlCisKKwkJCQkpOyAvLyBwdXQoVEVTVF9TQ0VOQVJJTzF4M19LRVkpCisKKwkJLy8gMngyCisJCWV4cGVjdGVkRGlzZWFzZU1vZGVsU3RhdGVzLnB1dChURVNUX1NDRU5BUklPMngyX0tFWSwKKwkJCQluZXcgU0lSTGFiZWxWYWx1ZVtdW11bXSB7CisJCQkJLy8gU3RlcCAwCisJCQkJCQl7IHsKKworCQkJCQkJLy8gTlswLDBdCisJCQkJCQkJCW5ldyBTSVJMYWJlbFZhbHVlSW1wbCgxMDAsIDAsIDAsIDAsIDApLAorCQkJCQkJCQkvLyBOWzAsMV0KKwkJCQkJCQkJbmV3IFNJUkxhYmVsVmFsdWVJbXBsKDEwMCwgMCwgMCwgMCwgMCkKKworCQkJCQkJfSwgeworCisJCQkJCQkvLyBOWzEsMF0KKwkJCQkJCQkJbmV3IFNJUkxhYmVsVmFsdWVJbXBsKDEwMCwgMCwgMCwgMCwgMCksCisJCQkJCQkJCS8vIE5bMSwxXQorCQkJCQkJCQluZXcgU0lSTGFiZWxWYWx1ZUltcGwoMTAwLCAwLCAwLCAwLCAwKQorCisJCQkJCQl9IH0sCisKKwkJCQkJCS8vIFN0ZXAgMQorCQkJCQkJeyB7CisJCQkJCQkvLyBOWzAsMF0KKwkJCQkJCQkJbmV3IFNJUkxhYmVsVmFsdWVJbXBsKDEwMCwgMCwgMCwgMCwgMCksCisJCQkJCQkJCS8vIE5bMCwxXQorCQkJCQkJCQluZXcgU0lSTGFiZWxWYWx1ZUltcGwoMTAwLCAwLCAwLCAwLCAwKQorCisJCQkJCQl9LCB7CisKKwkJCQkJCS8vIE5bMSwwXQorCQkJCQkJCQluZXcgU0lSTGFiZWxWYWx1ZUltcGwoMTAwLCAwLCAwLCAwLCAwKSwKKwkJCQkJCQkJLy8gTlsxLDFdCisJCQkJCQkJCW5ldyBTSVJMYWJlbFZhbHVlSW1wbCgxMDAsIDAsIDAsIDAsIDApCisKKwkJCQkJCX0gfSwKKworCQkJCQkJLy8gU3RlcCAyCisJCQkJCQl7IHsKKwkJCQkJCS8vIE5bMCwwXQorCQkJCQkJCQluZXcgU0lSTGFiZWxWYWx1ZUltcGwoMTAwLCAwLCAwLCAwLCAwKSwKKwkJCQkJCQkJLy8gTlswLDFdCisJCQkJCQkJCW5ldyBTSVJMYWJlbFZhbHVlSW1wbCgxMDAsIDAsIDAsIDAsIDApCisKKwkJCQkJCX0sIHsKKworCQkJCQkJLy8gTlsxLDBdCisJCQkJCQkJCW5ldyBTSVJMYWJlbFZhbHVlSW1wbCgxMDAsIDAsIDAsIDAsIDApLAorCQkJCQkJCQkvLyBOWzEsMV0KKwkJCQkJCQkJbmV3IFNJUkxhYmVsVmFsdWVJbXBsKDEwMCwgMCwgMCwgMCwgMCkKKworCQkJCQkJfSB9IH0gLy8gbmV3IFNJUkxhYmVsVmFsdWUKKworCQkJCSk7IC8vIHB1dChURVNUX1NDRU5BUklPMngyX0tFWSkKKworCQkvLyAzeDMKKwkJZXhwZWN0ZWREaXNlYXNlTW9kZWxTdGF0ZXMucHV0KFRFU1RfU0NFTkFSSU8zeDNfS0VZLAorCQkJCW5ldyBTSVJMYWJlbFZhbHVlW11bXVtdIHsKKwkJCQkvLyBTdGVwIDAKKwkJCQkJCXsgeworCisJCQkJCQkvLyBOWzAsMF0KKwkJCQkJCQkJbmV3IFNJUkxhYmVsVmFsdWVJbXBsKDEwMCwgMCwgMCwgMCwgMCksCisJCQkJCQkJCS8vIE5bMCwxXQorCQkJCQkJCQluZXcgU0lSTGFiZWxWYWx1ZUltcGwoMTAwLCAwLCAwLCAwLCAwKSwKKwkJCQkJCQkJLy8gTlswLDJdCisJCQkJCQkJCW5ldyBTSVJMYWJlbFZhbHVlSW1wbCgxMDAsIDAsIDAsIDAsIDApCisKKwkJCQkJCX0sIHsKKworCQkJCQkJLy8gTlsxLDBdCisJCQkJCQkJCW5ldyBTSVJMYWJlbFZhbHVlSW1wbCgxMDAsIDAsIDAsIDAsIDApLAorCQkJCQkJCQkvLyBOWzEsMV0KKwkJCQkJCQkJbmV3IFNJUkxhYmVsVmFsdWVJbXBsKDEwMCwgMCwgMCwgMCwgMCksCisJCQkJCQkJCS8vIE5bMSwyXQorCQkJCQkJCQluZXcgU0lSTGFiZWxWYWx1ZUltcGwoMTAwLCAwLCAwLCAwLCAwKQorCisJCQkJCQl9LCB7CisKKwkJCQkJCS8vIE5bMiwwXQorCQkJCQkJCQluZXcgU0lSTGFiZWxWYWx1ZUltcGwoMTAwLCAwLCAwLCAwLCAwKSwKKwkJCQkJCQkJLy8gTlsyLDFdCisJCQkJCQkJCW5ldyBTSVJMYWJlbFZhbHVlSW1wbCgxMDAsIDAsIDAsIDAsIDApLAorCQkJCQkJCQkvLyBOWzIsMl0KKwkJCQkJCQkJbmV3IFNJUkxhYmVsVmFsdWVJbXBsKDEwMCwgMCwgMCwgMCwgMCkKKworCQkJCQkJfSB9LAorCisJCQkJCQkvLyBTdGVwIDEKKwkJCQkJCXsgeworCQkJCQkJLy8gTlswLDBdCisJCQkJCQkJCW5ldyBTSVJMYWJlbFZhbHVlSW1wbCgxMDAsIDAsIDAsIDAsIDApLAorCQkJCQkJCQkvLyBOWzAsMV0KKwkJCQkJCQkJbmV3IFNJUkxhYmVsVmFsdWVJbXBsKDEwMCwgMCwgMCwgMCwgMCksCisJCQkJCQkJCS8vIE5bMCwyXQorCQkJCQkJCQluZXcgU0lSTGFiZWxWYWx1ZUltcGwoMTAwLCAwLCAwLCAwLCAwKQorCisJCQkJCQl9LCB7CisKKwkJCQkJCS8vIE5bMSwwXQorCQkJCQkJCQluZXcgU0lSTGFiZWxWYWx1ZUltcGwoMTAwLCAwLCAwLCAwLCAwKSwKKwkJCQkJCQkJLy8gTlsxLDFdCisJCQkJCQkJCW5ldyBTSVJMYWJlbFZhbHVlSW1wbCgxMDAsIDAsIDAsIDAsIDApLAorCQkJCQkJCQkvLyBOWzEsMl0KKwkJCQkJCQkJbmV3IFNJUkxhYmVsVmFsdWVJbXBsKDEwMCwgMCwgMCwgMCwgMCkKKworCQkJCQkJfSwgeworCisJCQkJCQkvLyBOWzIsMF0KKwkJCQkJCQkJbmV3IFNJUkxhYmVsVmFsdWVJbXBsKDEwMCwgMCwgMCwgMCwgMCksCisJCQkJCQkJCS8vIE5bMiwxXQorCQkJCQkJCQluZXcgU0lSTGFiZWxWYWx1ZUltcGwoMTAwLCAwLCAwLCAwLCAwKSwKKwkJCQkJCQkJLy8gTlsyLDJdCisJCQkJCQkJCW5ldyBTSVJMYWJlbFZhbHVlSW1wbCgxMDAsIDAsIDAsIDAsIDApCisKKwkJCQkJCX0gfSwKKworCQkJCQkJLy8gU3RlcCAyCisJCQkJCQl7IHsKKwkJCQkJCS8vIE5bMCwwXQorCQkJCQkJCQluZXcgU0lSTGFiZWxWYWx1ZUltcGwoMTAwLCAwLCAwLCAwLCAwKSwKKwkJCQkJCQkJLy8gTlswLDFdCisJCQkJCQkJCW5ldyBTSVJMYWJlbFZhbHVlSW1wbCgxMDAsIDAsIDAsIDAsIDApLAorCQkJCQkJCQkvLyBOWzAsMl0KKwkJCQkJCQkJbmV3IFNJUkxhYmVsVmFsdWVJbXBsKDEwMCwgMCwgMCwgMCwgMCkKKworCQkJCQkJfSwgeworCisJCQkJCQkvLyBOWzEsMF0KKwkJCQkJCQkJbmV3IFNJUkxhYmVsVmFsdWVJbXBsKDEwMCwgMCwgMCwgMCwgMCksCisJCQkJCQkJCS8vIE5bMSwxXQorCQkJCQkJCQluZXcgU0lSTGFiZWxWYWx1ZUltcGwoMTAwLCAwLCAwLCAwLCAwKSwKKwkJCQkJCQkJLy8gTlsxLDJdCisJCQkJCQkJCW5ldyBTSVJMYWJlbFZhbHVlSW1wbCgxMDAsIDAsIDAsIDAsIDApCisKKwkJCQkJCX0sIHsKKworCQkJCQkJLy8gTlsyLDBdCisJCQkJCQkJCW5ldyBTSVJMYWJlbFZhbHVlSW1wbCgxMDAsIDAsIDAsIDAsIDApLAorCQkJCQkJCQkvLyBOWzIsMV0KKwkJCQkJCQkJbmV3IFNJUkxhYmVsVmFsdWVJbXBsKDEwMCwgMCwgMCwgMCwgMCksCisJCQkJCQkJCS8vIE5bMiwyXQorCQkJCQkJCQluZXcgU0lSTGFiZWxWYWx1ZUltcGwoMTAwLCAwLCAwLCAwLCAwKQorCisJCQkJCQl9IH0gfSAvLyBuZXcgU0lSTGFiZWxWYWx1ZQorCisJCQkJKTsgLy8gcHV0KFRFU1RfU0NFTkFSSU8zeDNfS0VZKQorCisJCS8vIEZpbGwgb3V0IHRoZSBtYXAgdGhhdCBzcGVjaWZpZXMgaG93IG1hbnkgbGFiZWxzIHNob3VsZCBiZSB1cGRhdGVkIGJ5CisJCS8vIGEgZGlzZWFzZSBtb2RlbCBmb3IgZWFjaCB0ZXN0LgorCQlmb3IgKFRlc3RTcGVjIHRlc3RTcGVjIDogdGVzdFNwZWNpZmljYXRpb25zKSB7CisJCQlleHBlY3RlZE51bWJlck9mTGFiZWxzVG9VcGRhdGUKKwkJCQkJLnB1dCgKKwkJCQkJCQl0ZXN0U3BlYy5zY2VuYXJpb0Rpc2Vhc2VLZXksCisJCQkJCQkJbmV3IEludGVnZXIoCisJCQkJCQkJCQljb21wdXRlRXhwZWN0ZWROdW1iZXJPZkxhYmVscyhleHBlY3RlZERpc2Vhc2VNb2RlbFN0YXRlcworCQkJCQkJCQkJCQkuZ2V0KHRlc3RTcGVjLnNjZW5hcmlvRGlzZWFzZUtleSkpKSk7CisJCX0gLy8gZm9yIGVhY2ggdGVzdCBzcGVjaWZpY2F0aW9uCisKKwl9IC8vIHN0YXRpYworCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQudGVzdHMuRGlzZWFzZU1vZGVsU2NlbmFyaW9UZXN0I2dldERpc2Vhc2VNb2RlbHNUb1Rlc3QoKQorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBMaXN0PE5vZGVEZWNvcmF0b3I+IGdldERpc2Vhc2VNb2RlbHNUb1Rlc3QoKSB7CisJCWZpbmFsIExpc3Q8Tm9kZURlY29yYXRvcj4gcmV0VmFsdWUgPSBuZXcgQXJyYXlMaXN0PE5vZGVEZWNvcmF0b3I+KCk7CisJCXJldFZhbHVlLmFkZChEZXRlcm1pbmlzdGljU0lSRGlzZWFzZU1vZGVsVGVzdC5jcmVhdGVGaXh0dXJlKCkpOworCQlyZXR1cm4gcmV0VmFsdWU7CisJfSAvLyBnZXREaXNlYXNlTW9kZWxzVG9UZXN0CisKKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgaW50IGdldE51bWJlck9mU3RlcHMoZmluYWwgU3RyaW5nIGRpc2Vhc2VTY2VuYXJpb0tleSkgeworCQlTSVJMYWJlbFZhbHVlW11bXVtdIHRlbXAgPSBleHBlY3RlZERpc2Vhc2VNb2RlbFN0YXRlcworCQkJCS5nZXQoZGlzZWFzZVNjZW5hcmlvS2V5KTsKKwkJcmV0dXJuIHRlbXAubGVuZ3RoOworCX0gLy8gZ2V0TnVtYmVyT2ZTdGVwcworCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIGludCBnZXRFeHBlY3RlZE51bWJlck9mTGFiZWxzVG9VcGRhdGUoCisJCQlmaW5hbCBTdHJpbmcgZGlzZWFzZVNjZW5hcmlvS2V5KSB7CisJCUludGVnZXIgdGVtcCA9IGV4cGVjdGVkTnVtYmVyT2ZMYWJlbHNUb1VwZGF0ZS5nZXQoZGlzZWFzZVNjZW5hcmlvS2V5KTsKKwkJcmV0dXJuIHRlbXAuaW50VmFsdWUoKTsKKwl9IC8vIGdldEV4cGVjdGVkTnVtYmVyT2ZMYWJlbHNUb1VwZGF0ZQorCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIExhYmVsVmFsdWVbXVtdIGdldEV4cGVjdGVkRGlzZWFzZU1vZGVsU3RhdGUoCisJCQlmaW5hbCBTdHJpbmcgZGlzZWFzZVNjZW5hcmlvS2V5LCBmaW5hbCBpbnQgc3RlcCkgeworCQlmaW5hbCBTSVJMYWJlbFZhbHVlW11bXVtdIHNpckxhYmVsVmFsdWUgPSBleHBlY3RlZERpc2Vhc2VNb2RlbFN0YXRlcworCQkJCS5nZXQoZGlzZWFzZVNjZW5hcmlvS2V5KTsKKwkJcmV0dXJuIHNpckxhYmVsVmFsdWVbc3RlcF07CisJfSAvLyBnZXRFeHBlY3RlZERpc2Vhc2VNb2RlbFN0YXRlCisKKwlwcm90ZWN0ZWQgU3RyaW5nIGdldERpc2Vhc2VVUklQcmVmaXgoKSB7CisJCXJldHVybiBESVNFQVNFX1VSSV9QUkVGSVg7CisJfSAvLyBnZXREaXNlYXNlVVJJUHJlZml4Cit9IC8vIERldGVybWluaXN0aWNTSVJTY2VuYXJpb1Rlc3QKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3N0YW5kYXJkL3Rlc3RzL0RldGVybWluaXN0aWNTSVNjZW5hcmlvVGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvc3RhbmRhcmQvdGVzdHMvRGV0ZXJtaW5pc3RpY1NJU2NlbmFyaW9UZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjJkMWUwOAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3N0YW5kYXJkL3Rlc3RzL0RldGVybWluaXN0aWNTSVNjZW5hcmlvVGVzdC5qYXZhCkBAIC0wLDAgKzEsMzUyIEBACisvLyBEZXRlcm1pbmlzdGljU0lTY2VuYXJpb1Rlc3QuamF2YQorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQudGVzdHM7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuTWFwOworCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkxhYmVsVmFsdWU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLk5vZGVEZWNvcmF0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlNJTGFiZWxWYWx1ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuaW1wbC5TSUltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLmltcGwuU0lMYWJlbFZhbHVlSW1wbDsKKworLyoqCisgKiBUaGlzIGNsYXNzIGlzIGEgSlVuaXQgdGVzdCBjYXNlIGZvciBhIERldGVybWluaXN0aWMgU0kgZGlzZWFzZSBtb2RlbAorICogc2NlbmFyaW8uCisgKiAKKyAqIDx1bD4KKyAqIDxsaT5TIC0gVGhlIG51bWJlciBvZiA8Y29kZT5TdXNjZXB0aWJsZTwvY29kZT4gcG9wdWxhdGlvbiBtZW1iZXJzLiBNZW1iZXJzCisgKiBlbnRlciB0aGlzIHN0YXRlIGJ5IGJlaW5nIGJvcm4gb3IgYnkgInJlY292ZXJpbmciIGZyb20gYmVpbmcKKyAqIDxjb2RlPkluZmVjdGlvdXM8L2NvZGU+LiBUaGV5IGxlYXZlIHRoaXMgc3RhdGUgZWl0aGVyIGJ5IGRlYXRoIG9yIGJ5CisgKiBlbnRlcmluZyB0aGUgPGNvZGU+SW5mZWN0aW91czwvY29kZT4gc3RhdGUuCisgKiB7QGxpbmsgU0lUZXN0I1RSQU5TTUlTU0lPTl9SQVRFfSA9IDAuMSwge0BsaW5rIFNJVGVzdCNSRUNPVkVSWV9SQVRFfSA9IDAuMQorICogCisgKiBJbml0aWFsaXplZCB0byB7QGxpbmsgRGlzZWFzZU1vZGVsVGVzdFV0aWwjVEVTVF9QT1BVTEFUSU9OX0NPVU5UfSA9IDEwMCA8L2xpPgorICogPGxpPkkgLSBUaGUgbnVtYmVyIG9mIDxjb2RlPkluZmVjdGlvdXM8L2NvZGU+IHBvcHVsYXRpb24gbWVtYmVycy4KKyAqIEluaXRpYWxpemVkIHRvIHtAbGluayBTSURpc2Vhc2VNb2RlbFNjZW5hcmlvVGVzdCNOVU1CRVJfVE9fSU5GRUNUfSA9IDEgPC9saT4KKyAqIAorICogPGxpPkIgLSBUaGUgbnVtYmVyIG9mIDxjb2RlPkJpcnRoczwvY29kZT4gb2YgbmV3IChTdXNjZXB0aWJsZSkgcG9wdWxhdGlvbgorICogbWVtYmVycy4KKyAqIAorICogCisgICogPC91bD4KKyAqIDx1bD4KKyAqIDxsaT4mbXU7ID0ge0BsaW5rIERpc2Vhc2VNb2RlbFRlc3QjTU9SVEFMSVRZX1JBVEV9ID0gMC4wMTwvbGk+CisgKiA8bGk+JmJldGE7ID0ge0BsaW5rIFNJVGVzdCNUUkFOU01JU1NJT05fUkFURX0gPSAwLjE8L2xpPgorICogPGxpPiZzaWdtYTsgPSB7QGxpbmsgU0lUZXN0I1JFQ09WRVJZX1JBVEV9ID0gMC4wMTwvbGk+CisgKiA8bGk+eCA9IHtAbGluayBTSVRlc3QjSU5GRUNUSU9VU19NT1JUQUxJVFl9ID0gMC4xIDwvbGk+CisgKiA8bGk+Jm11OzxzdWI+aTwvc3ViPiA9IHtAbGluayBTSVRlc3QjSU5GRUNUSU9VU19NT1JUQUlMWV9SQVRFfSA9IDAuMTwvbGk+CisgKiA8bGk+QXJlYTxzdWI+bDwvc3ViPiA9IDEuMDwvbGk+CisgKiA8bGk+QXJlYSA9IDEuMDwvbGk+CisgKiA8bGk+UCA9IFMgKyBJID0ge0BsaW5rIERpc2Vhc2VNb2RlbFRlc3RVdGlsI1RFU1RfUE9QVUxBVElPTl9DT1VOVH0gPSAxMDA8L2xpPgorICogPC91bD4KKyAqIDxoMj4xeDEgRGV0ZXJtaW5pc3RpYyBTSSBTY2VuYXJpbzwvaDI+CisgKiAKKyAqIEBzZWUgRGlzZWFzZU1vZGVsVGVzdFV0aWwjVEVTVF9QT1BVTEFUSU9OX0NPVU5UCisgKiBAc2VlIFNJRGlzZWFzZU1vZGVsU2NlbmFyaW9UZXN0I05VTUJFUl9UT19JTkZFQ1QKKyAqIEBzZWUgRGlzZWFzZU1vZGVsVGVzdFV0aWwjVEVTVF9BUkVBCisgKiBAc2VlIFNJVGVzdCNJTkZFQ1RJT1VTX01PUlRBTElUWQorICogQHNlZSBTSVRlc3QjVFJBTlNNSVNTSU9OX1JBVEUKKyAqIEBzZWUgU0lUZXN0I05PTl9MSU5FQVJJVFlfQ09FRkZJQ0lFTlQKKyAqIEBzZWUgU0lUZXN0I1JFQ09WRVJZX1JBVEUKKyAqIEBzZWUgU0lJbXBsCisgKi8KK3B1YmxpYyBjbGFzcyBEZXRlcm1pbmlzdGljU0lTY2VuYXJpb1Rlc3QgZXh0ZW5kcyBTSURpc2Vhc2VNb2RlbFNjZW5hcmlvVGVzdCB7CisKKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgRElTRUFTRV9VUklfUFJFRklYID0gIkRldGVybWluaXN0aWNTSSI7CisKKwlwcml2YXRlIHN0YXRpYyBNYXA8U3RyaW5nLCBJbnRlZ2VyPiBleHBlY3RlZE51bWJlck9mTGFiZWxzVG9VcGRhdGUgPSBuZXcgSGFzaE1hcDxTdHJpbmcsIEludGVnZXI+KCk7CisKKwlwcml2YXRlIHN0YXRpYyBNYXA8U3RyaW5nLCBTSUxhYmVsVmFsdWVbXVtdW10+IGV4cGVjdGVkRGlzZWFzZU1vZGVsU3RhdGVzID0gbmV3IEhhc2hNYXA8U3RyaW5nLCBTSUxhYmVsVmFsdWVbXVtdW10+KCk7CisKKwlzdGF0aWMgeworCisJCS8vIDF4MQorCQlleHBlY3RlZERpc2Vhc2VNb2RlbFN0YXRlcy5wdXQoVEVTVF9TQ0VOQVJJTzF4MV9LRVksCisJCQkJbmV3IFNJTGFiZWxWYWx1ZVtdW11bXSB7CisJCQkJLy8gU3RlcCAwCisJCQkJCQl7IHsKKwkJCQkJCS8vIE5bMCwwXQorCQkJCQkJbmV3IFNJTGFiZWxWYWx1ZUltcGwoOTguOTEsIDAuOTksIDAuMCwgMC4xKSB9IH0sCisKKwkJCQkJCS8vIFN0ZXAgMQorCQkJCQkJeyB7CisJCQkJCQkvLyBOWzAsMF0KKwkJCQkJCW5ldyBTSUxhYmVsVmFsdWVJbXBsKDk4LjgyLCAwLjk4LCAwLjAsIDAuMikgfSB9IH0gCisJCQkJLy8gU0lMYWJlbFZhbHVlCisKKwkJCQkpOyAvLyBwdXQoVEVTVF9TQ0VOQVJJTzF4MV9LRVkpCisKKwkJLy8gMXgyCisJCWV4cGVjdGVkRGlzZWFzZU1vZGVsU3RhdGVzLnB1dChURVNUX1NDRU5BUklPMXgyX0tFWSwKKwkJCQluZXcgU0lMYWJlbFZhbHVlW11bXVtdIHsKKwkJCQkvLyBTdGVwIDAKKwkJCQkJCXsgeworCQkJCQkJLy8gTlswLDBdCisJCQkJCQkJCW5ldyBTSUxhYmVsVmFsdWVJbXBsKDEwMCwgMCwgMCwgIDApLAorCQkJCQkJCQkvLyBOWzAsMV0KKwkJCQkJCQkJbmV3IFNJTGFiZWxWYWx1ZUltcGwoMTAwLCAwLCAwLCAgMCkgfSB9LAorCisJCQkJCQkvLyBTdGVwIDEKKwkJCQkJCXsgeworCQkJCQkJLy8gTlswLDBdCisJCQkJCQkJCW5ldyBTSUxhYmVsVmFsdWVJbXBsKDEwMCwgMCwgMCwgIDApLAorCQkJCQkJCQkvLyBOWzAsMV0KKwkJCQkJCQkJbmV3IFNJTGFiZWxWYWx1ZUltcGwoMTAwLCAwLCAwLCAgMCkgfSB9LAorCQkJCQkJLy8gU3RlcCAyCisJCQkJCQl7IHsKKwkJCQkJCS8vIE5bMCwwXQorCQkJCQkJCQluZXcgU0lMYWJlbFZhbHVlSW1wbCgxMDAsIDAsIDAsICAwKSwKKwkJCQkJCQkJLy8gTlswLDFdCisJCQkJCQkJCW5ldyBTSUxhYmVsVmFsdWVJbXBsKDEwMCwgMCwgMCwgIDApIH0gfSB9IC8vIG5ldworCQkJCS8vIFNJTGFiZWxWYWx1ZQorCQkJCSk7IC8vIHB1dChURVNUX1NDRU5BUklPMXgyX0tFWSkKKworCQkvLyAxeDMKKwkJZXhwZWN0ZWREaXNlYXNlTW9kZWxTdGF0ZXMucHV0KFRFU1RfU0NFTkFSSU8xeDNfS0VZLAorCQkJCW5ldyBTSUxhYmVsVmFsdWVbXVtdW10geworCQkJCS8vIFN0ZXAgMAorCQkJCQkJeyB7CisKKwkJCQkJCS8vIE5bMCwwXQorCQkJCQkJCQluZXcgU0lMYWJlbFZhbHVlSW1wbCgxMDAsIDAsIDAsICAwKSwKKwkJCQkJCQkJLy8gTlswLDFdCisJCQkJCQkJCW5ldyBTSUxhYmVsVmFsdWVJbXBsKDEwMCwgMCwgMCwgIDApLAorCQkJCQkJCQkvLyBOWzAsMl0KKwkJCQkJCQkJbmV3IFNJTGFiZWxWYWx1ZUltcGwoMTAwLCAwLCAwLCAwKQorCisJCQkJCQl9IH0sCisKKwkJCQkJCS8vIFN0ZXAgMQorCQkJCQkJeyB7CisJCQkJCQkvLyBOWzAsMF0KKwkJCQkJCQkJbmV3IFNJTGFiZWxWYWx1ZUltcGwoMTAwLCAwLCAwLCAgMCksCisJCQkJCQkJCS8vIE5bMCwxXQorCQkJCQkJCQluZXcgU0lMYWJlbFZhbHVlSW1wbCgxMDAsIDAsIDAsICAwKSwKKwkJCQkJCQkJLy8gTlswLDJdCisJCQkJCQkJCW5ldyBTSUxhYmVsVmFsdWVJbXBsKDEwMCwgMCwgMCwgIDApCisKKwkJCQkJCX0gfSwKKworCQkJCQkJLy8gU3RlcCAyCisJCQkJCQl7IHsKKwkJCQkJCS8vIE5bMCwwXQorCQkJCQkJCQluZXcgU0lMYWJlbFZhbHVlSW1wbCgxMDAsIDAsIDAsICAwKSwKKwkJCQkJCQkJLy8gTlswLDFdCisJCQkJCQkJCW5ldyBTSUxhYmVsVmFsdWVJbXBsKDEwMCwgMCwgMCwgIDApLAorCQkJCQkJCQkvLyBOWzAsMl0KKwkJCQkJCQkJbmV3IFNJTGFiZWxWYWx1ZUltcGwoMTAwLCAwLCAwLCAgMCkKKworCQkJCQkJfSB9IH0gLy8gbmV3IFNJTGFiZWxWYWx1ZQorCisJCQkJKTsgLy8gcHV0KFRFU1RfU0NFTkFSSU8xeDNfS0VZKQorCisJCS8vIDJ4MgorCQlleHBlY3RlZERpc2Vhc2VNb2RlbFN0YXRlcy5wdXQoVEVTVF9TQ0VOQVJJTzJ4Ml9LRVksCisJCQkJbmV3IFNJTGFiZWxWYWx1ZVtdW11bXSB7CisJCQkJLy8gU3RlcCAwCisJCQkJCQl7IHsKKworCQkJCQkJLy8gTlswLDBdCisJCQkJCQkJCW5ldyBTSUxhYmVsVmFsdWVJbXBsKDEwMCwgMCwgMCwgIDApLAorCQkJCQkJCQkvLyBOWzAsMV0KKwkJCQkJCQkJbmV3IFNJTGFiZWxWYWx1ZUltcGwoMTAwLCAwLCAwLCAgMCkKKworCQkJCQkJfSwgeworCisJCQkJCQkvLyBOWzEsMF0KKwkJCQkJCQkJbmV3IFNJTGFiZWxWYWx1ZUltcGwoMTAwLCAwLCAwLCAgMCksCisJCQkJCQkJCS8vIE5bMSwxXQorCQkJCQkJCQluZXcgU0lMYWJlbFZhbHVlSW1wbCgxMDAsIDAsIDAsICAwKQorCisJCQkJCQl9IH0sCisKKwkJCQkJCS8vIFN0ZXAgMQorCQkJCQkJeyB7CisJCQkJCQkvLyBOWzAsMF0KKwkJCQkJCQkJbmV3IFNJTGFiZWxWYWx1ZUltcGwoMTAwLCAwLCAwLCAgMCksCisJCQkJCQkJCS8vIE5bMCwxXQorCQkJCQkJCQluZXcgU0lMYWJlbFZhbHVlSW1wbCgxMDAsIDAsIDAsICAwKQorCisJCQkJCQl9LCB7CisKKwkJCQkJCS8vIE5bMSwwXQorCQkJCQkJCQluZXcgU0lMYWJlbFZhbHVlSW1wbCgxMDAsIDAsIDAsICAwKSwKKwkJCQkJCQkJLy8gTlsxLDFdCisJCQkJCQkJCW5ldyBTSUxhYmVsVmFsdWVJbXBsKDEwMCwgMCwgMCwgIDApCisKKwkJCQkJCX0gfSwKKworCQkJCQkJLy8gU3RlcCAyCisJCQkJCQl7IHsKKwkJCQkJCS8vIE5bMCwwXQorCQkJCQkJCQluZXcgU0lMYWJlbFZhbHVlSW1wbCgxMDAsIDAsIDAsICAwKSwKKwkJCQkJCQkJLy8gTlswLDFdCisJCQkJCQkJCW5ldyBTSUxhYmVsVmFsdWVJbXBsKDEwMCwgMCwgMCwgIDApCisKKwkJCQkJCX0sIHsKKworCQkJCQkJLy8gTlsxLDBdCisJCQkJCQkJCW5ldyBTSUxhYmVsVmFsdWVJbXBsKDEwMCwgMCwgMCwgIDApLAorCQkJCQkJCQkvLyBOWzEsMV0KKwkJCQkJCQkJbmV3IFNJTGFiZWxWYWx1ZUltcGwoMTAwLCAwLCAwLCAgMCkKKworCQkJCQkJfSB9IH0gLy8gbmV3IFNJTGFiZWxWYWx1ZQorCisJCQkJKTsgLy8gcHV0KFRFU1RfU0NFTkFSSU8yeDJfS0VZKQorCisJCS8vIDN4MworCQlleHBlY3RlZERpc2Vhc2VNb2RlbFN0YXRlcy5wdXQoVEVTVF9TQ0VOQVJJTzN4M19LRVksCisJCQkJbmV3IFNJTGFiZWxWYWx1ZVtdW11bXSB7CisJCQkJLy8gU3RlcCAwCisJCQkJCQl7IHsKKworCQkJCQkJLy8gTlswLDBdCisJCQkJCQkJCW5ldyBTSUxhYmVsVmFsdWVJbXBsKDEwMCwgMCwgMCwgMCksCisJCQkJCQkJCS8vIE5bMCwxXQorCQkJCQkJCQluZXcgU0lMYWJlbFZhbHVlSW1wbCgxMDAsIDAsIDAsIDApLAorCQkJCQkJCQkvLyBOWzAsMl0KKwkJCQkJCQkJbmV3IFNJTGFiZWxWYWx1ZUltcGwoMTAwLCAwLCAwLCAwKQorCisJCQkJCQl9LCB7CisKKwkJCQkJCS8vIE5bMSwwXQorCQkJCQkJCQluZXcgU0lMYWJlbFZhbHVlSW1wbCgxMDAsIDAsIDAsIDApLAorCQkJCQkJCQkvLyBOWzEsMV0KKwkJCQkJCQkJbmV3IFNJTGFiZWxWYWx1ZUltcGwoMTAwLCAwLCAwLCAgMCksCisJCQkJCQkJCS8vIE5bMSwyXQorCQkJCQkJCQluZXcgU0lMYWJlbFZhbHVlSW1wbCgxMDAsIDAsIDAsIDApCisKKwkJCQkJCX0sIHsKKworCQkJCQkJLy8gTlsyLDBdCisJCQkJCQkJCW5ldyBTSUxhYmVsVmFsdWVJbXBsKDEwMCwgMCwgMCwgMCksCisJCQkJCQkJCS8vIE5bMiwxXQorCQkJCQkJCQluZXcgU0lMYWJlbFZhbHVlSW1wbCgxMDAsIDAsIDAsIDApLAorCQkJCQkJCQkvLyBOWzIsMl0KKwkJCQkJCQkJbmV3IFNJTGFiZWxWYWx1ZUltcGwoMTAwLCAwLCAwLCAwKQorCisJCQkJCQl9IH0sCisKKwkJCQkJCS8vIFN0ZXAgMQorCQkJCQkJeyB7CisJCQkJCQkvLyBOWzAsMF0KKwkJCQkJCQkJbmV3IFNJTGFiZWxWYWx1ZUltcGwoMTAwLCAwLCAwLCAwKSwKKwkJCQkJCQkJLy8gTlswLDFdCisJCQkJCQkJCW5ldyBTSUxhYmVsVmFsdWVJbXBsKDEwMCwgMCwgMCwgMCksCisJCQkJCQkJCS8vIE5bMCwyXQorCQkJCQkJCQluZXcgU0lMYWJlbFZhbHVlSW1wbCgxMDAsIDAsIDAsIDApCisKKwkJCQkJCX0sIHsKKworCQkJCQkJLy8gTlsxLDBdCisJCQkJCQkJCW5ldyBTSUxhYmVsVmFsdWVJbXBsKDEwMCwgMCwgMCwgMCksCisJCQkJCQkJCS8vIE5bMSwxXQorCQkJCQkJCQluZXcgU0lMYWJlbFZhbHVlSW1wbCgxMDAsIDAsIDAsIDApLAorCQkJCQkJCQkvLyBOWzEsMl0KKwkJCQkJCQkJbmV3IFNJTGFiZWxWYWx1ZUltcGwoMTAwLCAwLCAwLCAwKQorCisJCQkJCQl9LCB7CisKKwkJCQkJCS8vIE5bMiwwXQorCQkJCQkJCQluZXcgU0lMYWJlbFZhbHVlSW1wbCgxMDAsIDAsIDAsIDApLAorCQkJCQkJCQkvLyBOWzIsMV0KKwkJCQkJCQkJbmV3IFNJTGFiZWxWYWx1ZUltcGwoMTAwLCAwLCAwLCAwKSwKKwkJCQkJCQkJLy8gTlsyLDJdCisJCQkJCQkJCW5ldyBTSUxhYmVsVmFsdWVJbXBsKDEwMCwgMCwgMCwgMCkKKworCQkJCQkJfSB9LAorCisJCQkJCQkvLyBTdGVwIDIKKwkJCQkJCXsgeworCQkJCQkJLy8gTlswLDBdCisJCQkJCQkJCW5ldyBTSUxhYmVsVmFsdWVJbXBsKDEwMCwgMCwgMCwgMCksCisJCQkJCQkJCS8vIE5bMCwxXQorCQkJCQkJCQluZXcgU0lMYWJlbFZhbHVlSW1wbCgxMDAsIDAsIDAsIDApLAorCQkJCQkJCQkvLyBOWzAsMl0KKwkJCQkJCQkJbmV3IFNJTGFiZWxWYWx1ZUltcGwoMTAwLCAwLCAwLDApCisKKwkJCQkJCX0sIHsKKworCQkJCQkJLy8gTlsxLDBdCisJCQkJCQkJCW5ldyBTSUxhYmVsVmFsdWVJbXBsKDEwMCwgMCwgMCwgMCksCisJCQkJCQkJCS8vIE5bMSwxXQorCQkJCQkJCQluZXcgU0lMYWJlbFZhbHVlSW1wbCgxMDAsIDAsIDAsIDApLAorCQkJCQkJCQkvLyBOWzEsMl0KKwkJCQkJCQkJbmV3IFNJTGFiZWxWYWx1ZUltcGwoMTAwLCAwLCAwLCAwKQorCisJCQkJCQl9LCB7CisKKwkJCQkJCS8vIE5bMiwwXQorCQkJCQkJCQluZXcgU0lMYWJlbFZhbHVlSW1wbCgxMDAsIDAsIDAsIDApLAorCQkJCQkJCQkvLyBOWzIsMV0KKwkJCQkJCQkJbmV3IFNJTGFiZWxWYWx1ZUltcGwoMTAwLCAwLCAwLCAwKSwKKwkJCQkJCQkJLy8gTlsyLDJdCisJCQkJCQkJCW5ldyBTSUxhYmVsVmFsdWVJbXBsKDEwMCwgMCwgMCwgMCkKKworCQkJCQkJfSB9IH0gLy8gbmV3IFNJTGFiZWxWYWx1ZQorCisJCQkJKTsgLy8gcHV0KFRFU1RfU0NFTkFSSU8zeDNfS0VZKQorCisJCS8vIEZpbGwgb3V0IHRoZSBtYXAgdGhhdCBzcGVjaWZpZXMgaG93IG1hbnkgbGFiZWxzIHNob3VsZCBiZSB1cGRhdGVkIGJ5CisJCS8vIGEgZGlzZWFzZSBtb2RlbCBmb3IgZWFjaCB0ZXN0LgorCQlmb3IgKFRlc3RTcGVjIHRlc3RTcGVjIDogdGVzdFNwZWNpZmljYXRpb25zKSB7CisJCQlleHBlY3RlZE51bWJlck9mTGFiZWxzVG9VcGRhdGUKKwkJCQkJLnB1dCgKKwkJCQkJCQl0ZXN0U3BlYy5zY2VuYXJpb0Rpc2Vhc2VLZXksCisJCQkJCQkJbmV3IEludGVnZXIoCisJCQkJCQkJCQljb21wdXRlRXhwZWN0ZWROdW1iZXJPZkxhYmVscyhleHBlY3RlZERpc2Vhc2VNb2RlbFN0YXRlcworCQkJCQkJCQkJCQkuZ2V0KHRlc3RTcGVjLnNjZW5hcmlvRGlzZWFzZUtleSkpKSk7CisJCX0gLy8gZm9yIGVhY2ggdGVzdCBzcGVjaWZpY2F0aW9uCisKKwl9IC8vIHN0YXRpYworCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQudGVzdHMuRGlzZWFzZU1vZGVsU2NlbmFyaW9UZXN0I2dldERpc2Vhc2VNb2RlbHNUb1Rlc3QoKQorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBMaXN0PE5vZGVEZWNvcmF0b3I+IGdldERpc2Vhc2VNb2RlbHNUb1Rlc3QoKSB7CisJCWZpbmFsIExpc3Q8Tm9kZURlY29yYXRvcj4gcmV0VmFsdWUgPSBuZXcgQXJyYXlMaXN0PE5vZGVEZWNvcmF0b3I+KCk7CisJCXJldFZhbHVlLmFkZChEZXRlcm1pbmlzdGljU0lEaXNlYXNlTW9kZWxUZXN0LmNyZWF0ZUZpeHR1cmUoKSk7CisJCXJldHVybiByZXRWYWx1ZTsKKwl9IC8vIGdldERpc2Vhc2VNb2RlbHNUb1Rlc3QKKworCUBPdmVycmlkZQorCXByb3RlY3RlZCBpbnQgZ2V0TnVtYmVyT2ZTdGVwcyhmaW5hbCBTdHJpbmcgZGlzZWFzZVNjZW5hcmlvS2V5KSB7CisJCVNJTGFiZWxWYWx1ZVtdW11bXSB0ZW1wID0gZXhwZWN0ZWREaXNlYXNlTW9kZWxTdGF0ZXMKKwkJCQkuZ2V0KGRpc2Vhc2VTY2VuYXJpb0tleSk7CisJCXJldHVybiB0ZW1wLmxlbmd0aDsKKwl9IC8vIGdldE51bWJlck9mU3RlcHMKKworCUBPdmVycmlkZQorCXByb3RlY3RlZCBpbnQgZ2V0RXhwZWN0ZWROdW1iZXJPZkxhYmVsc1RvVXBkYXRlKAorCQkJZmluYWwgU3RyaW5nIGRpc2Vhc2VTY2VuYXJpb0tleSkgeworCQlJbnRlZ2VyIHRlbXAgPSBleHBlY3RlZE51bWJlck9mTGFiZWxzVG9VcGRhdGUuZ2V0KGRpc2Vhc2VTY2VuYXJpb0tleSk7CisJCXJldHVybiB0ZW1wLmludFZhbHVlKCk7CisJfSAvLyBnZXRFeHBlY3RlZE51bWJlck9mTGFiZWxzVG9VcGRhdGUKKworCUBPdmVycmlkZQorCXByb3RlY3RlZCBMYWJlbFZhbHVlW11bXSBnZXRFeHBlY3RlZERpc2Vhc2VNb2RlbFN0YXRlKAorCQkJZmluYWwgU3RyaW5nIGRpc2Vhc2VTY2VuYXJpb0tleSwgZmluYWwgaW50IHN0ZXApIHsKKwkJZmluYWwgU0lMYWJlbFZhbHVlW11bXVtdIHNpTGFiZWxWYWx1ZSA9IGV4cGVjdGVkRGlzZWFzZU1vZGVsU3RhdGVzCisJCQkJLmdldChkaXNlYXNlU2NlbmFyaW9LZXkpOworCQlyZXR1cm4gc2lMYWJlbFZhbHVlW3N0ZXBdOworCX0gLy8gZ2V0RXhwZWN0ZWREaXNlYXNlTW9kZWxTdGF0ZQorCisJcHJvdGVjdGVkIFN0cmluZyBnZXREaXNlYXNlVVJJUHJlZml4KCkgeworCQlyZXR1cm4gRElTRUFTRV9VUklfUFJFRklYOworCX0gLy8gZ2V0RGlzZWFzZVVSSVByZWZpeAorfSAvLyBEZXRlcm1pbmlzdGljU0lTY2VuYXJpb1Rlc3QKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3N0YW5kYXJkL3Rlc3RzL0Rpc2Vhc2VNb2RlbExhYmVsVGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvc3RhbmRhcmQvdGVzdHMvRGlzZWFzZU1vZGVsTGFiZWxUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGExNDhkNgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3N0YW5kYXJkL3Rlc3RzL0Rpc2Vhc2VNb2RlbExhYmVsVGVzdC5qYXZhCkBAIC0wLDAgKzEsMTE5IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC50ZXN0czsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5Qb3B1bGF0aW9uTGFiZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuaW1wbC5Qb3B1bGF0aW9uTGFiZWxJbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubm9kZXMuUmVnaW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5EaXNlYXNlTW9kZWxMYWJlbDsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiBBIHRlc3QgY2FzZSBmb3IgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPkRpc2Vhc2UgTW9kZWwgTGFiZWw8L2I+PC9lbT4nLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiA8cD4KKyAqIFRoZSBmb2xsb3dpbmcgb3BlcmF0aW9ucyBhcmUgdGVzdGVkOgorICogPHVsPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5EaXNlYXNlTW9kZWxMYWJlbCN0b1Rvb2x0aXBTdHJpbmcoKSA8ZW0+VG8gVG9vbHRpcCBTdHJpbmc8L2VtPn08L2xpPgorICogPC91bD4KKyAqIDwvcD4KKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGFic3RyYWN0IGNsYXNzIERpc2Vhc2VNb2RlbExhYmVsVGVzdCBleHRlbmRzIFRlc3RDYXNlIHsKKwkvKioKKwkgKiBUaGUgZml4dHVyZSBmb3IgdGhpcyBEaXNlYXNlIE1vZGVsIExhYmVsIHRlc3QgY2FzZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jCisJICogLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgRGlzZWFzZU1vZGVsTGFiZWwgZml4dHVyZSA9IG51bGw7CisKKwkvKioKKwkgKiBDb25zdHJ1Y3RzIGEgbmV3IERpc2Vhc2UgTW9kZWwgTGFiZWwgdGVzdCBjYXNlIHdpdGggdGhlIGdpdmVuIG5hbWUuIDwhLS0KKwkgKiBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAcGFyYW0gbmFtZQorCSAqIAorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRGlzZWFzZU1vZGVsTGFiZWxUZXN0KFN0cmluZyBuYW1lKSB7CisJCXN1cGVyKG5hbWUpOworCX0KKworCS8qKgorCSAqIFNldHMgdGhlIGZpeHR1cmUgZm9yIHRoaXMgRGlzZWFzZSBNb2RlbCBMYWJlbCB0ZXN0IGNhc2UuIDwhLS0KKwkgKiBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogCisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIHNldEZpeHR1cmUoRGlzZWFzZU1vZGVsTGFiZWwgZml4dHVyZSkgeworCQl0aGlzLmZpeHR1cmUgPSBmaXh0dXJlOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIGZpeHR1cmUgZm9yIHRoaXMgRGlzZWFzZSBNb2RlbCBMYWJlbCB0ZXN0IGNhc2UuIDwhLS0KKwkgKiBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogCisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlAU3VwcHJlc3NXYXJuaW5ncygidW51c2VkIikKKwlwcml2YXRlIERpc2Vhc2VNb2RlbExhYmVsIGdldEZpeHR1cmUoKSB7CisJCXJldHVybiBmaXh0dXJlOworCX0KKworCS8qKgorCSAqIFRlc3RzIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5EaXNlYXNlTW9kZWxMYWJlbCN0b1Rvb2x0aXBTdHJpbmcoKSA8ZW0+VG8gVG9vbHRpcCBTdHJpbmc8L2VtPn0nIG9wZXJhdGlvbi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLkRpc2Vhc2VNb2RlbExhYmVsI3RvVG9vbHRpcFN0cmluZygpCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIHRlc3RUb1Rvb2x0aXBTdHJpbmcoKSB7CisJCS8vIFRPRE86IGltcGxlbWVudCB0aGlzIG9wZXJhdGlvbiB0ZXN0IG1ldGhvZAorCQkvLyBFbnN1cmUgdGhhdCB5b3UgcmVtb3ZlIEBnZW5lcmF0ZWQgb3IgbWFyayBpdCBAZ2VuZXJhdGVkIE5PVAorCQlmYWlsKCk7CisJfQorCisJLyoqCisJICogVGVzdHMgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLkRpc2Vhc2VNb2RlbExhYmVsI2dldEN1cnJlbnREaXNlYXNlTW9kZWxMYWJlbFZhbHVlKCkgPGVtPkN1cnJlbnQgRGlzZWFzZSBNb2RlbCBMYWJlbCBWYWx1ZTwvZW0+fScgZmVhdHVyZSBnZXR0ZXIuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5EaXNlYXNlTW9kZWxMYWJlbCNnZXRDdXJyZW50RGlzZWFzZU1vZGVsTGFiZWxWYWx1ZSgpCisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlwdWJsaWMgdm9pZCB0ZXN0R2V0Q3VycmVudERpc2Vhc2VNb2RlbExhYmVsVmFsdWUoKSB7CisJCWFzc2VydFRydWUodHJ1ZSk7CisJfQorCisJLyoqCisJICogVGVzdHMgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLkRpc2Vhc2VNb2RlbExhYmVsI2dldE5leHREaXNlYXNlTW9kZWxMYWJlbFZhbHVlKCkgPGVtPk5leHQgRGlzZWFzZSBNb2RlbCBMYWJlbCBWYWx1ZTwvZW0+fScgZmVhdHVyZSBnZXR0ZXIuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5EaXNlYXNlTW9kZWxMYWJlbCNnZXROZXh0RGlzZWFzZU1vZGVsTGFiZWxWYWx1ZSgpCisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlwdWJsaWMgdm9pZCB0ZXN0R2V0TmV4dERpc2Vhc2VNb2RlbExhYmVsVmFsdWUoKSB7CisJCWFzc2VydFRydWUodHJ1ZSk7CisJfQorCisJcHJvdGVjdGVkIHN0YXRpYyB2b2lkIGxhYmVsUmVnaW9uKGZpbmFsIERpc2Vhc2VNb2RlbExhYmVsIGRpc2Vhc2VMYWJlbCwKKwkJCWZpbmFsIFN0cmluZyBwb3B1bGF0aW9uSWRlbnRpZmllciwgZmluYWwgUmVnaW9uIHJlZ2lvbikgeworCQlkaXNlYXNlTGFiZWwuc2V0VVJJT2ZJZGVudGlmaWFibGVUb0JlTGFiZWxlZChyZWdpb24uZ2V0VVJJKCkpOworCQlmaW5hbCBQb3B1bGF0aW9uTGFiZWwgcG9wdWxhdGlvbkxhYmVsID0gUG9wdWxhdGlvbkxhYmVsSW1wbAorCQkJCS5nZXRQb3B1bGF0aW9uTGFiZWwocG9wdWxhdGlvbklkZW50aWZpZXIsIHJlZ2lvbik7CisJCWRpc2Vhc2VMYWJlbC5zZXRQb3B1bGF0aW9uTGFiZWwocG9wdWxhdGlvbkxhYmVsKTsKKwkJcmVnaW9uLmdldExhYmVscygpLmFkZChkaXNlYXNlTGFiZWwpOworCX0gLy8gbGFiZWxSZWdpb24KKworfSAvLyBEaXNlYXNlTW9kZWxMYWJlbFRlc3QKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3N0YW5kYXJkL3Rlc3RzL0Rpc2Vhc2VNb2RlbExhYmVsVmFsdWVUZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9zdGFuZGFyZC90ZXN0cy9EaXNlYXNlTW9kZWxMYWJlbFZhbHVlVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFkYjFmMDkKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9zdGFuZGFyZC90ZXN0cy9EaXNlYXNlTW9kZWxMYWJlbFZhbHVlVGVzdC5qYXZhCkBAIC0wLDAgKzEsMjE5IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC50ZXN0czsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUudXRpbC5FY29yZVV0aWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkludGVncmF0aW9uTGFiZWxWYWx1ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZTsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiBBIHRlc3QgY2FzZSBmb3IgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPkRpc2Vhc2UgTW9kZWwgTGFiZWwgVmFsdWU8L2I+PC9lbT4nLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiA8cD4KKyAqIFRoZSBmb2xsb3dpbmcgZmVhdHVyZXMgYXJlIHRlc3RlZDoKKyAqIDx1bD4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZSNnZXRQb3B1bGF0aW9uQ291bnQoKSA8ZW0+UG9wdWxhdGlvbiBDb3VudDwvZW0+fTwvbGk+CisgKiA8L3VsPgorICogPC9wPgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgYWJzdHJhY3QgY2xhc3MgRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZVRlc3QgZXh0ZW5kcyBUZXN0Q2FzZSB7CisKKwlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIGRvdWJsZSBURVNUX0JJUlRIUyA9IDc7CisKKwlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIGRvdWJsZSBURU1QX1RFU1RfQklSVEhTID0gVEVTVF9CSVJUSFMgKyA3MDsKKworCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgZG91YmxlIFRFU1RfREVBVEhTID0gOTsKKworCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgZG91YmxlIFRFTVBfVEVTVF9ERUFUSFMgPSBURVNUX0RFQVRIUyArIDkwOworCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBkb3VibGUgVEVTVF9ESVNFQVNFX0RFQVRIUyA9IDg7CisKKwlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIGRvdWJsZSBURU1QX1RFU1RfRElTRUFTRV9ERUFUSFMgPSBURVNUX0RJU0VBU0VfREVBVEhTICsgODA7CisKKwkvKioKKwkgKiBUaGUgZml4dHVyZSBmb3IgdGhpcyBEaXNlYXNlIE1vZGVsIExhYmVsIFZhbHVlIHRlc3QgY2FzZS4gPCEtLQorCSAqIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIERpc2Vhc2VNb2RlbExhYmVsVmFsdWUgZml4dHVyZSA9IG51bGw7CisKKwkvKioKKwkgKiBUaGlzIGZpeHR1cmUgaXMgY2hhbmdlZCBkdXJpbmcgdGVzdHMKKwkgKi8KKwlwcm90ZWN0ZWQgRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZSB0ZW1wRml4dHVyZSA9IG51bGw7CisKKwkvKioKKwkgKiBDb25zdHJ1Y3RzIGEgbmV3IERpc2Vhc2UgTW9kZWwgTGFiZWwgVmFsdWUgdGVzdCBjYXNlIHdpdGggdGhlIGdpdmVuIG5hbWUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAcGFyYW0gbmFtZQorCSAqIAorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZVRlc3QoU3RyaW5nIG5hbWUpIHsKKwkJc3VwZXIobmFtZSk7CisJfQorCisJLyoqCisJICogU2V0cyB0aGUgZml4dHVyZSBmb3IgdGhpcyBEaXNlYXNlIE1vZGVsIExhYmVsIFZhbHVlIHRlc3QgY2FzZS4gPCEtLQorCSAqIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgc2V0Rml4dHVyZShEaXNlYXNlTW9kZWxMYWJlbFZhbHVlIGZpeHR1cmUpIHsKKwkJdGhpcy5maXh0dXJlID0gZml4dHVyZTsKKwl9CisKKwkvKioKKwkgKiBTZXRzIHRoZSBmaXh0dXJlIGZvciB0aGlzIERpc2Vhc2UgTW9kZWwgTGFiZWwgVmFsdWUgdGVzdCBjYXNlLiA8IS0tCisJICogYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqLworCXByb3RlY3RlZCB2b2lkIHNldFRlbXBGaXh0dXJlKERpc2Vhc2VNb2RlbExhYmVsVmFsdWUgdGVtcEZpeHR1cmUpIHsKKwkJdGhpcy50ZW1wRml4dHVyZSA9IHRlbXBGaXh0dXJlOworCX0gLy8gc2V0VGVtcEZpeHR1cmUKKworCS8qKgorCSAqIEByZXR1cm4gYSBmaXh0dXJlCisJICovCisJcHJvdGVjdGVkIGFic3RyYWN0IERpc2Vhc2VNb2RlbExhYmVsVmFsdWUgY3JlYXRlVGVtcEZpeHR1cmUoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIGZpeHR1cmUgZm9yIHRoaXMgRGlzZWFzZSBNb2RlbCBMYWJlbCBWYWx1ZSB0ZXN0IGNhc2UuIDwhLS0KKwkgKiBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogCisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBEaXNlYXNlTW9kZWxMYWJlbFZhbHVlIGdldEZpeHR1cmUoKSB7CisJCXJldHVybiBmaXh0dXJlOworCX0KKworCS8qKgorCSAqIEByZXR1cm4gYW4gaW5zdGFuY2Ugb2YgRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZSB0aGF0IGNhbiBiZSBjaGFuZ2VkCisJICovCisJcHJpdmF0ZSBEaXNlYXNlTW9kZWxMYWJlbFZhbHVlIGdldFRlbXBGaXh0dXJlKCkgeworCQlyZXR1cm4gdGVtcEZpeHR1cmU7CisJfSAvLyBnZXRUZW1wRml4dHVyZQorCisJLyoqCisJICogVGVzdCB0aGUgc2FuaXR5IG9mIHRoZSB0ZXN0IGZpeHR1cmVzLgorCSAqLworCXB1YmxpYyB2b2lkIHRlc3RTYW5pdHkoKSB7CisJCWZpbmFsIERpc2Vhc2VNb2RlbExhYmVsVmFsdWUgbGFiZWxWYWx1ZSA9IGdldEZpeHR1cmUoKTsKKwkJZmluYWwgRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZSBsYWJlbFZhbHVlVGVtcCA9IGdldFRlbXBGaXh0dXJlKCk7CisJCWFzc2VydFRydWUobGFiZWxWYWx1ZS5zYW5lKCkpOworCQlhc3NlcnRUcnVlKGxhYmVsVmFsdWVUZW1wLnNhbmUoKSk7CisJfSAvLyB0ZXN0U2FuaXR5CisKKwkvKioKKwkgKiBUZXN0cyB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZSNnZXRQb3B1bGF0aW9uQ291bnQoKSA8ZW0+UG9wdWxhdGlvbiBDb3VudDwvZW0+fScKKwkgKiBmZWF0dXJlIGdldHRlci4gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZSNnZXRQb3B1bGF0aW9uQ291bnQoKQorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJcHVibGljIHZvaWQgdGVzdEdldFBvcHVsYXRpb25Db3VudCgpIHsKKwkJZmluYWwgRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZSBmaXh0dXJlID0gZ2V0Rml4dHVyZSgpOworCQlhc3NlcnRUcnVlKGZpeHR1cmUuZ2V0UG9wdWxhdGlvbkNvdW50KCkgPT0gZ2V0RXhwZWN0ZWRQb3B1bGF0aW9uQ291bnQoZml4dHVyZSkpOworCX0gLy8gdGVzdEdldFBvcHVsYXRpb25Db3VudAorCisJLyoqCisJICogVGVzdHMgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLkRpc2Vhc2VNb2RlbExhYmVsVmFsdWUjc2V0KG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5EaXNlYXNlTW9kZWxMYWJlbFZhbHVlKSA8ZW0+U2V0PC9lbT59JworCSAqIG9wZXJhdGlvbi4gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZSNzZXQob3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLkRpc2Vhc2VNb2RlbExhYmVsVmFsdWUpCisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlwdWJsaWMgdm9pZCB0ZXN0U2V0X19EaXNlYXNlTW9kZWxMYWJlbFZhbHVlKCkgeworCQlmaW5hbCBEaXNlYXNlTW9kZWxMYWJlbFZhbHVlIGZpeHR1cmUgPSBnZXRGaXh0dXJlKCk7CisJCWZpbmFsIERpc2Vhc2VNb2RlbExhYmVsVmFsdWUgdGVtcCA9IGdldFRlbXBGaXh0dXJlKCk7CisKKwkJYXNzZXJ0RmFsc2UoRWNvcmVVdGlsLmVxdWFscyhmaXh0dXJlLCB0ZW1wKSk7CisJCXRlbXAuc2V0KChJbnRlZ3JhdGlvbkxhYmVsVmFsdWUpZml4dHVyZSk7CisJCWFzc2VydFRydWUoRWNvcmVVdGlsLmVxdWFscyhmaXh0dXJlLCB0ZW1wKSk7CisJfSAvLyB0ZXN0U2V0X19EaXNlYXNlTW9kZWxMYWJlbFZhbHVlCisKKwkvKioKKwkgKiBUZXN0cyB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZSNhZGQob3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLkRpc2Vhc2VNb2RlbExhYmVsVmFsdWUpIDxlbT5BZGQ8L2VtPn0nCisJICogb3BlcmF0aW9uLiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5EaXNlYXNlTW9kZWxMYWJlbFZhbHVlI2FkZChvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZSkKKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCXB1YmxpYyB2b2lkIHRlc3RBZGRfX0Rpc2Vhc2VNb2RlbExhYmVsVmFsdWUoKSB7CisJCWZpbmFsIERpc2Vhc2VNb2RlbExhYmVsVmFsdWUgZml4dHVyZSA9IGdldEZpeHR1cmUoKTsKKwkJZmluYWwgRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZSB0ZW1wID0gZ2V0VGVtcEZpeHR1cmUoKTsKKwkJZmluYWwgRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZSBleHBlY3RlZFJlc3VsdCA9IGdldEV4cGVjdGVkRml4dHVyZUFkZGl0aW9uUmVzdWx0KAorCQkJCWZpeHR1cmUsIHRlbXApOworCQlhc3NlcnRGYWxzZShFY29yZVV0aWwuZXF1YWxzKGZpeHR1cmUsIHRlbXApKTsKKwkJdGVtcC5hZGQoKEludGVncmF0aW9uTGFiZWxWYWx1ZSlmaXh0dXJlKTsKKwkJLy8gRGlzZWFzZSBkZWF0aHMgYXJlIG5vdCBhZGRpdGl2ZS4gRml4CisvLwkJdGVtcC5zZXREaXNlYXNlRGVhdGhzKGV4cGVjdGVkUmVzdWx0LmdldERpc2Vhc2VEZWF0aHMoKSk7CisJCWFzc2VydFRydWUoRWNvcmVVdGlsLmVxdWFscyh0ZW1wLCBleHBlY3RlZFJlc3VsdCkpOworCX0gLy8gdGVzdEFkZF9fRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZQorCisJLyoqCisJICogVGVzdHMgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLkRpc2Vhc2VNb2RlbExhYmVsVmFsdWUjc3ViKG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5EaXNlYXNlTW9kZWxMYWJlbFZhbHVlKSA8ZW0+U3ViPC9lbT59JworCSAqIG9wZXJhdGlvbi4gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZSNzdWIob3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLkRpc2Vhc2VNb2RlbExhYmVsVmFsdWUpCisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlwdWJsaWMgdm9pZCB0ZXN0U3ViX19EaXNlYXNlTW9kZWxMYWJlbFZhbHVlKCkgeworCQlmaW5hbCBEaXNlYXNlTW9kZWxMYWJlbFZhbHVlIGZpeHR1cmUgPSBnZXRGaXh0dXJlKCk7CisJCWZpbmFsIERpc2Vhc2VNb2RlbExhYmVsVmFsdWUgdGVtcCA9IGdldFRlbXBGaXh0dXJlKCk7CisJCWZpbmFsIERpc2Vhc2VNb2RlbExhYmVsVmFsdWUgZXhwZWN0ZWRSZXN1bHQgPSBnZXRFeHBlY3RlZEZpeHR1cmVTdWJ0cmFjdGlvblJlc3VsdCgKKwkJCQl0ZW1wLCBmaXh0dXJlKTsKKwkJYXNzZXJ0RmFsc2UoRWNvcmVVdGlsLmVxdWFscyhmaXh0dXJlLCB0ZW1wKSk7CisJCXRlbXAuc3ViKChJbnRlZ3JhdGlvbkxhYmVsVmFsdWUpZml4dHVyZSk7CisJCS8vIERpc2Vhc2UgZGVhdGhzIGFyZSBub3Qgc3Vic3RyYWN0ZWQuIEZpeAorLy8JCXRlbXAuc2V0RGlzZWFzZURlYXRocyhleHBlY3RlZFJlc3VsdC5nZXREaXNlYXNlRGVhdGhzKCkpOworCQlhc3NlcnRUcnVlKEVjb3JlVXRpbC5lcXVhbHModGVtcCwgZXhwZWN0ZWRSZXN1bHQpKTsKKwl9IC8vIHRlc3RTdWJfX0Rpc2Vhc2VNb2RlbExhYmVsVmFsdWUKKworCS8qKgorCSAqIFRlc3RzIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5EaXNlYXNlTW9kZWxMYWJlbFZhbHVlI3NjYWxlKGRvdWJsZSkgPGVtPlNjYWxlPC9lbT59JyBvcGVyYXRpb24uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5EaXNlYXNlTW9kZWxMYWJlbFZhbHVlI3NjYWxlKGRvdWJsZSkKKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCXB1YmxpYyB2b2lkIHRlc3RTY2FsZV9fZG91YmxlKCkgeworCQkvLyBUT0RPOiBpbXBsZW1lbnQgdGhpcyBvcGVyYXRpb24gdGVzdCBtZXRob2QKKwkJYXNzZXJ0VHJ1ZSh0cnVlKTsKKwl9CisKKwkvKioKKwkgKiBAcmV0dXJuIHRoZSBleHBlY3RlZCBwb3B1bGF0aW9uIGNvdW50IGZvciB0aGUgZGlzZWFzZSBtb2RlbCBsYWJlbCB2YWx1ZQorCSAqLworCXByb3RlY3RlZCBhYnN0cmFjdCBkb3VibGUgZ2V0RXhwZWN0ZWRQb3B1bGF0aW9uQ291bnQoCisJCQlmaW5hbCBEaXNlYXNlTW9kZWxMYWJlbFZhbHVlIGZpeHR1cmUpOworCisJLyoqCisJICogQHJldHVybiB0aGUgZXhwZWN0ZWQgcmVzdWx0IG9mIGFkZGluZyBmaXh0dXJlMSBhbmQgZml4dHVyZTIKKwkgKi8KKwlwcm90ZWN0ZWQgYWJzdHJhY3QgRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZSBnZXRFeHBlY3RlZEZpeHR1cmVBZGRpdGlvblJlc3VsdCgKKwkJCWZpbmFsIERpc2Vhc2VNb2RlbExhYmVsVmFsdWUgZml4dHVyZTEsCisJCQlmaW5hbCBEaXNlYXNlTW9kZWxMYWJlbFZhbHVlIGZpeHR1cmUyKTsKKworCS8qKgorCSAqIEByZXR1cm4gdGhlIGV4cGVjdGVkIHJlc3VsdCBvZiBzdWJ0cmFjdGluZyBmaXh0dXJlMiBmcm9tIGZpeHR1cmUxCisJICovCisJcHJvdGVjdGVkIGFic3RyYWN0IERpc2Vhc2VNb2RlbExhYmVsVmFsdWUgZ2V0RXhwZWN0ZWRGaXh0dXJlU3VidHJhY3Rpb25SZXN1bHQoCisJCQlmaW5hbCBEaXNlYXNlTW9kZWxMYWJlbFZhbHVlIGZpeHR1cmUxLAorCQkJZmluYWwgRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZSBmaXh0dXJlMik7CisKK30gLy8gRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZVRlc3QKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3N0YW5kYXJkL3Rlc3RzL0Rpc2Vhc2VNb2RlbFNjZW5hcmlvVGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvc3RhbmRhcmQvdGVzdHMvRGlzZWFzZU1vZGVsU2NlbmFyaW9UZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTMyZWQ1MgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3N0YW5kYXJkL3Rlc3RzL0Rpc2Vhc2VNb2RlbFNjZW5hcmlvVGVzdC5qYXZhCkBAIC0wLDAgKzEsNDEwIEBACisvLyBEaXNlYXNlTW9kZWxTY2VuYXJpb1Rlc3QuamF2YQorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQudGVzdHM7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuU3RyaW5nVG9rZW5pemVyOworCitpbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlVSSTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguR3JhcGg7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkxhYmVsVmFsdWU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLk5vZGVMYWJlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuRGVjb3JhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5Nb2RlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuTm9kZURlY29yYXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2NlbmFyaW8uU2NlbmFyaW87CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNjZW5hcmlvLnRlc3RzLlNjZW5hcmlvVGVzdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLm5vZGVzLlJlZ2lvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuRGlzZWFzZU1vZGVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5EaXNlYXNlTW9kZWxMYWJlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZTsKKworLyoqCisgKiBUaGlzIGNsYXNzIGlzIHRoZSB0b3AtbGV2ZWwgY2xhc3MgZm9yIGFsbCB0ZXN0IG9mIGRpc2Vhc2UgbW9kZWxzIGluIGEKKyAqIHBhcnRpY3VsYXIgc2NlbmFyaW8uCisgKi8KK3B1YmxpYyBhYnN0cmFjdCBjbGFzcyBEaXNlYXNlTW9kZWxTY2VuYXJpb1Rlc3QgZXh0ZW5kcyBUZXN0Q2FzZSB7CisKKwlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIFN0cmluZyBESVJFQ1RPUlkgPSAidGVtcCI7CisKKwkvKioKKwkgKiBUaGUga2V5IGZvciBzY2VuYXJpbyAxeDEKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBURVNUX1NDRU5BUklPMXgxX0tFWSA9ICIxeDEiOworCisJLyoqCisJICogVGhlIGtleSBmb3Igc2NlbmFyaW8gMXgyCisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgVEVTVF9TQ0VOQVJJTzF4Ml9LRVkgPSAiMXgyIjsKKworCS8qKgorCSAqIFRoZSBrZXkgZm9yIHNjZW5hcmlvIDF4MworCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFRFU1RfU0NFTkFSSU8xeDNfS0VZID0gIjF4MyI7CisKKwkvKioKKwkgKiBUaGUga2V5IGZvciBzY2VuYXJpbyAyeDIKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBURVNUX1NDRU5BUklPMngyX0tFWSA9ICIyeDIiOworCisJLyoqCisJICogVGhlIGtleSBmb3Igc2NlbmFyaW8gM3gzCisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgVEVTVF9TQ0VOQVJJTzN4M19LRVkgPSAiM3gzIjsKKworCS8vIFRPRE8gaW1wbGVtZW50IHRoZSBkaXNlYXNlIG1vZGVsIHRlc3Qgc2NlbmFyaW9zCisKKwkvLyBZb3UgbmVlZCB0byB1bi1jb21tZW50IHRoZSB0ZXN0U3BlY2lmaWNhdGlvbnMgYW5kIHRoZW4gaW4gZWFjaCBvZiB0aGUKKwkvLyB0ZXN0IGltcGxlbWVudGF0aW9ucyB5b3UncmUgZ29pbmcgdG8gbmVlZCB0byBmaWd1cmUgb3V0IHRoZSB2YWxpZCBkaXNlYXNlCisJLy8gbW9kZWwgbGFiZWwgdmFsdWVzLiBzZWUgU3RvY2hhc3RpY1NFSVJTY2VuYXJpb1Rlc3QuamF2YSBldGMuCisJcHJvdGVjdGVkIHN0YXRpYyBUZXN0U3BlY1tdIHRlc3RTcGVjaWZpY2F0aW9ucyA9IG5ldyBUZXN0U3BlY1tdIHsgbmV3IFRlc3RTcGVjKAorCQkJMSwgMSwgVEVTVF9TQ0VOQVJJTzF4MV9LRVkpCisJLyoKKwkgKiBuZXcgVGVzdFNwZWMoMSwgMSwgVEVTVF9TQ0VOQVJJTzF4MV9LRVkpLCBuZXcgVGVzdFNwZWMoMSwgMiwKKwkgKiBURVNUX1NDRU5BUklPMXgyX0tFWSksIG5ldyBUZXN0U3BlYygxLCAzLCBURVNUX1NDRU5BUklPMXgzX0tFWSksIG5ldworCSAqIFRlc3RTcGVjKDIsIDIsIFRFU1RfU0NFTkFSSU8yeDJfS0VZKSwgbmV3IFRlc3RTcGVjKDMsIDMsCisJICogVEVTVF9TQ0VOQVJJTzN4M19LRVkpCisJICovCisJfTsKKworCS8qKgorCSAqIEBwYXJhbSBleHBlY3RlZExhYmVsVmFsdWVzCisJICogICAgICAgICAgICB0aGUgZXhwZWN0ZWQgbGFiZWwgdmFsdWVzIGZvciB0aGUgdGVzdAorCSAqIEByZXR1cm4gaG93IG1hbnkgbGFiZWxzIGFyZSBleHBlY3RlZCB0byBiZSB1cGRhdGVkIGJ5IGEgZGlzZWFzZSBtb2RlbCBmb3IKKwkgKiAgICAgICAgIGVhY2ggdGVzdC4KKwkgKi8KKwlwcm90ZWN0ZWQgc3RhdGljIGludCBjb21wdXRlRXhwZWN0ZWROdW1iZXJPZkxhYmVscygKKwkJCWZpbmFsIExhYmVsVmFsdWVbXVtdW10gZXhwZWN0ZWRMYWJlbFZhbHVlcykgeworCQlyZXR1cm4gZXhwZWN0ZWRMYWJlbFZhbHVlc1swXS5sZW5ndGggKiBleHBlY3RlZExhYmVsVmFsdWVzWzBdWzBdLmxlbmd0aDsKKwl9IC8vIGNvbXB1dGVFeHBlY3RlZE51bWJlck9mTGFiZWxzCisKKwkvKioKKwkgKiBAcGFyYW0gbnVtUm93cworCSAqICAgICAgICAgICAgdGhlIG51bWJlciBvZiByb3dzIGluIHRoZSBsYXR0aWNlCisJICogQHBhcmFtIG51bUNvbHVtbnMKKwkgKiAgICAgICAgICAgIHRoZSBudW1iZXIgb2YgY29sdW1ucyBpbiB0aGUgbGF0dGljZQorCSAqIEByZXR1cm4gYSBzY2VuYXJpbyB3aXRoIG5vZGVzIGluIGEgbGF0dGljZSB3aXRoIGEgZGlzZWFzZSBtb2RlbC4KKwkgKi8KKwlwdWJsaWMgU2NlbmFyaW8gY3JlYXRlRml4dHVyZShmaW5hbCBpbnQgbnVtUm93cywgZmluYWwgaW50IG51bUNvbHVtbnMpIHsKKwkJCisJCWZpbmFsIENvbGxlY3Rpb248Tm9kZURlY29yYXRvcj4gRElTRUFTRV9NT0RFTFMgPSBuZXcgQXJyYXlMaXN0PE5vZGVEZWNvcmF0b3I+KCk7CisJCURJU0VBU0VfTU9ERUxTLmFkZEFsbChnZXREaXNlYXNlTW9kZWxzVG9UZXN0KCkpOworCisJCWZpbmFsIE1vZGVsIG1vZGVsID0gRGlzZWFzZU1vZGVsVGVzdFV0aWwuY3JlYXRlTGF0dGljZU1vZGVsKAorCQkJCURJU0VBU0VfTU9ERUxTLCBudW1Sb3dzLCBudW1Db2x1bW5zLAorCQkJCURpc2Vhc2VNb2RlbFRlc3RVdGlsLlRFU1RfUE9QVUxBVElPTl9DT1VOVCwKKwkJCQlEaXNlYXNlTW9kZWxUZXN0VXRpbC5URVNUX0FSRUEpOworCQkKKwkJLy8gPz8/IGdldFNjZW5hcmlvRGVjb3JhdG9ycyhtb2RlbCkuYWRkQWxsKERJU0VBU0VfTU9ERUxTKTsKKwkJZmluYWwgU2NlbmFyaW8gc2NlbmFyaW8gPSBEaXNlYXNlTW9kZWxUZXN0VXRpbC5jcmVhdGVMYXR0aWNlU2NlbmFyaW8oCisJCQkJZ2V0U2NlbmFyaW9EZWNvcmF0b3JzKG1vZGVsKSwgbW9kZWwpOworCQkKKwkJc2NlbmFyaW8uaW5pdGlhbGl6ZSgpOworCQlzY2VuYXJpby5nZXRTb2x2ZXIoKS5zZXREZWNvcmF0b3JzKHNjZW5hcmlvLmdldENhbm9uaWNhbEdyYXBoKCkuZ2V0RGVjb3JhdG9ycygpKTsKKwkJYXNzZXJ0IHNjZW5hcmlvLnNhbmUoKTsKKworCQlyZXR1cm4gc2NlbmFyaW87CisJfSAvLyBjcmVhdGVGaXh0dXJlCisKKwkvKioKKwkgKiBFeGVjdXRlIGFsbCBvZiB0aGUgdGVzdHMgc3BlY2lmaWVkIGluIHRlc3RTcGVjaWZpY2F0aW9ucworCSAqLworCXB1YmxpYyB2b2lkIHRlc3REb0FsbFRlc3RzKCkgeworCQlmb3IgKGZpbmFsIFRlc3RTcGVjIHRlc3RTcGVjIDogdGVzdFNwZWNpZmljYXRpb25zKSB7CisJCQlkb1Rlc3QodGVzdFNwZWMpOworCQl9CisJfSAvLyB0ZXN0RG9BbGxUZXN0cworCisJLyoqCisJICogVGVzdCBzZXJpYWxpemluZyBhbmQgZGUtc2VyaWFsaXppbmcgc2NlbmFyaW9zCisJICovCisJcHVibGljIHZvaWQgdGVzdFNlcmlhbGl6ZURlc2VyaWFsaXplU2NlbmFyaW8oKSB7CisKKwkJZmluYWwgaW50W11bXSByb3dDb2x1bW5zID0gbmV3IGludFtdW10geyB7IDEsIDEgfSwgeyAxLCAyIH0sIHsgMywgMyB9IH07CisKKwkJZm9yIChmaW5hbCBpbnRbXSByb3dDb2x1bW4gOiByb3dDb2x1bW5zKSB7CisJCQlmaW5hbCBTY2VuYXJpbyBmaXh0dXJlID0gY3JlYXRlRml4dHVyZShyb3dDb2x1bW5bMF0sIHJvd0NvbHVtblsxXSk7CisKKwkJCWZpbmFsIFVSSSB1cmkgPSBjcmVhdGVTZXJpYWxpemF0aW9uVVJJKGZpeHR1cmUpOworCQkJU2NlbmFyaW9UZXN0LnNlcmlhbGl6ZURlc2VyaWFsaXplU2NlbmFyaW8oZml4dHVyZSwgdXJpKTsKKwkJfQorCX0gLy8gdGVzdFNlcmlhbGl6ZURlc2VyaWFsaXplU2NlbmFyaW8KKworCS8qKgorCSAqIEBwYXJhbSB0ZXN0U3BlYworCSAqICAgICAgICAgICAgYSB0ZXN0IHNwZWNpZmljYXRpb24KKwkgKi8KKwlwcml2YXRlIHZvaWQgZG9UZXN0KGZpbmFsIFRlc3RTcGVjIHRlc3RTcGVjKSB7CisJCWRvVGVzdChjcmVhdGVGaXh0dXJlKHRlc3RTcGVjLm51bVJvd3MsIHRlc3RTcGVjLm51bUNvbHVtbnMpLAorCQkJCXRlc3RTcGVjLnNjZW5hcmlvRGlzZWFzZUtleSk7CisJfSAvLyBkb1Rlc3QKKworCS8qKgorCSAqIEBwYXJhbSBzY2VuYXJpbworCSAqICAgICAgICAgICAgdGhlIHNjZW5hcmlvIHRvIHRlc3QKKwkgKiBAcGFyYW0gc2NlbmFyaW9EaXNlYXNlS2V5CisJICogICAgICAgICAgICB0aGUgdW5pcXVlIGlkZW50aWZpZXIgb2YgdGhlIHNjZW5hcmlvIHRlc3QKKwkgKi8KKwlwcml2YXRlIHZvaWQgZG9UZXN0KGZpbmFsIFNjZW5hcmlvIHNjZW5hcmlvLCBmaW5hbCBTdHJpbmcgc2NlbmFyaW9EaXNlYXNlS2V5KSB7CisKKwkJZmluYWwgaW50IG51bVN0ZXBzID0gZ2V0TnVtYmVyT2ZTdGVwcyhzY2VuYXJpb0Rpc2Vhc2VLZXkpOworCisJCS8vIFN0ZXAgdGhyb3VnaCB0aGUgZGlzZWFzZSBjb21wdXRhdGlvbiBieSB1c2luZyB0aGUgYWN0dWFsIHNjZW5hcmlvCisJCS8vIHN0ZXAgbWV0aG9kCisJCWZvciAoaW50IHN0ZXAgPSAwOyBzdGVwIDwgbnVtU3RlcHM7IHN0ZXArKykgeworCQkJLy8gTWFrZSBvbmUgc3RlcC4uLgorCQkJc2NlbmFyaW8uc3RlcCgpOworCQkJLy8gLi4uIGFuZCBtYWtlIHN1cmUgZXZlcnl0aGluZyBsb29rcyBvaworCQkJYXNzZXJ0VHJ1ZShzY2VuYXJpby5zYW5lKCkpOworCisJCQkvLyBOb3cgdmFsaWRhdGUgdGhlIGNvbXB1dGVkIHZhbHVlcyBmb3IgZWFjaCBkaXNlYXNlIG1vZGVsIGluIHRoZQorCQkJLy8gc2NlbmFyaW8uLi4KKwkJCWZvciAoZmluYWwgRGlzZWFzZU1vZGVsIGRpc2Vhc2VNb2RlbCA6IGdldERpc2Vhc2VNb2RlbHMoc2NlbmFyaW8pKSB7CisJCQkJLy8gUmVhbGx5IG9ubHkgbmVlZCB0byBjaGVjayB0aGlzIG9uY2UuLi4KKwkJCQlpZiAoc3RlcCA9PSAwKSB7CisJCQkJCWFzc2VydFRydWUoCisJCQkJCQkJIkRpc2Vhc2UgbW9kZWwgXCIiCisJCQkJCQkJCQkrIGRpc2Vhc2VNb2RlbC5nZXREdWJsaW5Db3JlKCkuZ2V0VGl0bGUoKQorCQkJCQkJCQkJKyAiXCIgXCIiCisJCQkJCQkJCQkrIHNjZW5hcmlvLmdldER1YmxpbkNvcmUoKS5nZXRUaXRsZSgpCisJCQkJCQkJCQkrICJcIiBcIiIgKyBzY2VuYXJpb0Rpc2Vhc2VLZXksCisJCQkJCQkJZGlzZWFzZU1vZGVsLmdldExhYmVsc1RvVXBkYXRlKCkuc2l6ZSgpID09IGdldEV4cGVjdGVkTnVtYmVyT2ZMYWJlbHNUb1VwZGF0ZShzY2VuYXJpb0Rpc2Vhc2VLZXkpKTsKKwkJCQl9IC8vIGlmCisKKwkJCQlhc3NlcnRUcnVlKHZhbGlkYXRlRGlzZWFzZU1vZGVsU3RhdGUoc2NlbmFyaW8sCisJCQkJCQlzY2VuYXJpb0Rpc2Vhc2VLZXksIHN0ZXAsIGRpc2Vhc2VNb2RlbCwKKwkJCQkJCWdldEV4cGVjdGVkRGlzZWFzZU1vZGVsU3RhdGUoc2NlbmFyaW9EaXNlYXNlS2V5LCBzdGVwKSkpOworCisJCQl9IC8vIGZvciBlYWNoIGRpc2Vhc2UgbW9kZWwKKwkJfSAvLyBmb3IgZWFjaCBzdGVwCisKKwl9IC8vIGRvVGVzdAorCisJLyoqCisJICogQHBhcmFtIHNjZW5hcmlvCisJICogICAgICAgICAgICB0aGUgc2NlbmFyaW8gd2hvc2Ugc3RhdGUgaXMgdG8gYmUgdmVyaWZpZWQKKwkgKiBAcGFyYW0gc2NlbmFyaW9EaXNlYXNlS2V5CisJICogICAgICAgICAgICB0aGUgdW5pcXVlIGlkZW50aWZpZXIgb2YgdGhlIHNjZW5hcmlvIHRlc3QKKwkgKiBAcGFyYW0gc3RlcAorCSAqICAgICAgICAgICAgdGhlIHN0ZXAgbnVtYmVyIGluIHRoZSB0ZXN0IGJlaW5nIHZlcmlmaWVkCisJICogQHBhcmFtIGV4cGVjdGVkRGlzZWFzZU1vZGVsU3RhdGUKKwkgKiAgICAgICAgICAgIHRoZSBkaXNlYXNlIG1vZGVsIGxhYmVsIHZhbHVlcyB0aGF0IHNob3VsZCBiZSBwcmVzZW50CisJICovCisJcHJpdmF0ZSBib29sZWFuIHZhbGlkYXRlRGlzZWFzZU1vZGVsU3RhdGUoZmluYWwgU2NlbmFyaW8gc2NlbmFyaW8sCisJCQlmaW5hbCBTdHJpbmcgc2NlbmFyaW9EaXNlYXNlS2V5LCBmaW5hbCBpbnQgc3RlcCwKKwkJCWZpbmFsIERpc2Vhc2VNb2RlbCBkaXNlYXNlTW9kZWwsCisJCQlmaW5hbCBMYWJlbFZhbHVlW11bXSBleHBlY3RlZERpc2Vhc2VNb2RlbFN0YXRlKSB7CisJCWZpbmFsIGJvb2xlYW4gcmV0VmFsdWUgPSB0cnVlOworCisJCWZpbmFsIEdyYXBoIGNhbm9uaWNhbEdyYXBoID0gc2NlbmFyaW8uZ2V0Q2Fub25pY2FsR3JhcGgoKTsKKworCQlmb3IgKGludCByb3cgPSAwOyByb3cgPCBleHBlY3RlZERpc2Vhc2VNb2RlbFN0YXRlLmxlbmd0aDsgcm93KyspIHsKKwkJCWZvciAoaW50IGNvbHVtbiA9IDA7IGNvbHVtbiA8IGV4cGVjdGVkRGlzZWFzZU1vZGVsU3RhdGVbcm93XS5sZW5ndGg7IGNvbHVtbisrKSB7CisJCQkJZmluYWwgUmVnaW9uIHJlZ2lvbiA9IERpc2Vhc2VNb2RlbFRlc3RVdGlsLmdldFJlZ2lvbigKKwkJCQkJCWNhbm9uaWNhbEdyYXBoLCByb3csIGNvbHVtbik7CisJCQkJZmluYWwgTGFiZWxWYWx1ZSBsYWJlbFZhbHVlID0gZXhwZWN0ZWREaXNlYXNlTW9kZWxTdGF0ZVtyb3ddW2NvbHVtbl07CisJCQkJZmluYWwgTGFiZWxWYWx1ZSBkbUxhYmVsVmFsdWUgPSBnZXRDdXJyZW50RGlzZWFzZU1vZGVsTGFiZWxWYWx1ZSgKKwkJCQkJCXJlZ2lvbiwgZGlzZWFzZU1vZGVsKTsKKwkJCQkKKwkJCQkvLyBUT0RPIHdoZW4gREVCVUcgT05MWQorCQkJCS8vIFN5c3RlbS5vdXQucHJpbnRsbigicm93PSAiK3JvdysiLCBjb2w9ICIrY29sdW1uKyIgY29tcGFyaW5nICIrbGFiZWxWYWx1ZS50b1N0cmluZygpKyIgIHRvIGRtVmFsdWU9ICAiK2RtTGFiZWxWYWx1ZS50b1N0cmluZygpKTsKKwkJCQkvLy8vLy8vLy8vLy8vLworCQkJCQorCQkJCWFzc2VydFRydWUoIkRpc2Vhc2UgbW9kZWwgXCIiCisJCQkJCQkrIGRpc2Vhc2VNb2RlbC5nZXREdWJsaW5Db3JlKCkuZ2V0VGl0bGUoKSArICJcIiAoIgorCQkJCQkJKyBzY2VuYXJpb0Rpc2Vhc2VLZXkgKyAiKSBzdGVwOiAiICsgc3RlcCArICIgWyIgKyByb3cKKwkJCQkJCSsgIiwgIiArIGNvbHVtbiArICJdIEdvdCBcIiIgKyBkbUxhYmVsVmFsdWUudG9TdHJpbmcoKQorCQkJCQkJKyAiXCIsIGV4cGVjdGVkIFwiIiArIGxhYmVsVmFsdWUudG9TdHJpbmcoKSArICJcIiIsCisJCQkJCQljb21wYXJlTGFiZWxWYWx1ZXMobGFiZWxWYWx1ZSwgZG1MYWJlbFZhbHVlKSk7CisJCQl9IC8vIGZvciBjb2x1bW4KKwkJfSAvLyBmb3Igcm93CisKKwkJcmV0dXJuIHJldFZhbHVlOworCX0gLy8gdmFsaWRhdGVEaXNlYXNlTW9kZWxTdGF0ZQorCisJLyoqCisJICogQHBhcmFtIGxhYmVsVmFsdWUKKwkgKiBAcGFyYW0gZG1MYWJlbFZhbHVlCisJICogQHJldHVybiA8Y29kZT50cnVlPC9jb2RlPiBpZiB0aGUgbGFiZWxzIGFyZSAiZXF1YWwiLiBXZSBkbyBhICJmdXp6eSIKKwkgKiAgICAgICAgIGNvbXBhcmUgb24gdGhlIGRvdWJsZSB2YWx1ZXMuIFdlIGRlY2xhcmUgdGhlbSAiZXF1YWwiIGlmIHRoZXkKKwkgKiAgICAgICAgIGRpZmZlciBieSBsZXNzIHRoYW4gYSBzcGVjaWZpZWQgdG9sZXJhbmNlLgorCSAqLworCXByb3RlY3RlZCBib29sZWFuIGNvbXBhcmVMYWJlbFZhbHVlcyhmaW5hbCBMYWJlbFZhbHVlIGxhYmxlVmFsdWUxLAorCQkJZmluYWwgTGFiZWxWYWx1ZSBsYWJsZVZhbHVlMikgeworCQlib29sZWFuIHJldFZhbHVlID0gdHJ1ZTsKKwkJZmluYWwgRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZSBkbUxWMSA9IChEaXNlYXNlTW9kZWxMYWJlbFZhbHVlKSBsYWJsZVZhbHVlMTsKKwkJZmluYWwgRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZSBkbUxWMiA9IChEaXNlYXNlTW9kZWxMYWJlbFZhbHVlKSBsYWJsZVZhbHVlMjsKKy8vCQlyZXRWYWx1ZSA9IHJldFZhbHVlCisvLwkJCQkmJiBEaXNlYXNlTW9kZWxUZXN0VXRpbC5jbG9zZUVub3VnaChkbUxWMS5nZXREaXNlYXNlRGVhdGhzKCksCisvLwkJCQkJCWRtTFYyLmdldERpc2Vhc2VEZWF0aHMoKSk7CisJCXJldHVybiByZXRWYWx1ZTsKKwl9IC8vIGNvbXBhcmVMYWJlbFZhbHVlcworCisJLyoqCisJICogQHBhcmFtIGZpeHR1cmUKKwkgKiAgICAgICAgICAgIHRoZSBzY2VuYXJpbyB0byB0ZXN0CisJICogQHJldHVybiB0aGUgVVJJIHRvIHVzZSB0byBzZXJpYWxpemUgYW5kIHRoZW4gZGUtc2VyaWFsaXplIHRoZSBzY2VuYXJpbworCSAqICAgICAgICAgdW5kZXIgdGVzdAorCSAqLworCXByaXZhdGUgVVJJIGNyZWF0ZVNlcmlhbGl6YXRpb25VUkkoZmluYWwgU2NlbmFyaW8gZml4dHVyZSkgeworCQlmaW5hbCBVUkkgdXJpID0gVVJJCisJCQkJLmNyZWF0ZVVSSShESVJFQ1RPUlkgKyAiLyIgKyBnZXREaXNlYXNlVVJJUHJlZml4KCkKKwkJCQkJCSsgZW5jb2RlVGl0bGUoZml4dHVyZS5nZXREdWJsaW5Db3JlKCkuZ2V0VGl0bGUoKSkKKwkJCQkJCSsgIi5zY2VuYXJpbyIpOworCQlyZXR1cm4gdXJpOworCX0gLy8gY3JlYXRlU2VyaWFsaXphdGlvblVSSQorCisJLyoqCisJICogQHBhcmFtIHRpdGxlCisJICogICAgICAgICAgICB0aGUgdGl0bGUgb2YgYSBzY2VuYXJpbworCSAqIEByZXR1cm4gdGhlIHRpdGxlIHdpdGggYWxsIHdoaXRlc3BhY2UgcmVtb3ZlZAorCSAqLworCXByaXZhdGUgU3RyaW5nIGVuY29kZVRpdGxlKGZpbmFsIFN0cmluZyB0aXRsZSkgeworCQlmaW5hbCBTdHJpbmdCdWlsZGVyIHNiID0gbmV3IFN0cmluZ0J1aWxkZXIoKTsKKwkJZmluYWwgU3RyaW5nVG9rZW5pemVyIHN0ID0gbmV3IFN0cmluZ1Rva2VuaXplcih0aXRsZSwgIiwuW10gIik7CisJCXdoaWxlIChzdC5oYXNNb3JlVG9rZW5zKCkpIHsKKwkJCXNiLmFwcGVuZChzdC5uZXh0VG9rZW4oKSk7CisJCX0gLy8gd2hpbGUKKwkJcmV0dXJuIHNiLnRvU3RyaW5nKCk7CisJfSAvLyBlbmNvZGVUaXRsZQorCisJLyoqCisJICogQHBhcmFtIHJlZ2lvbgorCSAqICAgICAgICAgICAgdGhlIHJlZ2lvbiBub2RlIHRvIHNlYXJjaCBmb3IgYSBsYWJlbCB1cGRhdGVkIGJ5IHRoZSBkaXNlYXNlCisJICogICAgICAgICAgICBtb2RlbAorCSAqIEBwYXJhbSBkaXNlYXNlTW9kZWwKKwkgKiAgICAgICAgICAgIHRoZSBkaXNlYXNlIG1vZGVsCisJICogQHJldHVybiB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgbGFiZWwgb24gdGhlIG5vZGUgdXBkYXRlZCBieSB0aGUgZGlzZWFzZQorCSAqICAgICAgICAgbW9kZWwKKwkgKi8KKwlwcml2YXRlIExhYmVsVmFsdWUgZ2V0Q3VycmVudERpc2Vhc2VNb2RlbExhYmVsVmFsdWUoZmluYWwgUmVnaW9uIHJlZ2lvbiwKKwkJCWZpbmFsIERpc2Vhc2VNb2RlbCBkaXNlYXNlTW9kZWwpIHsKKwkJTGFiZWxWYWx1ZSByZXRWYWx1ZSA9IG51bGw7CisJCWZvciAoZmluYWwgT2JqZWN0IGVsZW1lbnQgOiByZWdpb24uZ2V0TGFiZWxzKCkpIHsKKwkJCWZpbmFsIE5vZGVMYWJlbCBub2RlTGFiZWwgPSAoTm9kZUxhYmVsKSBlbGVtZW50OworCQkJaWYgKG5vZGVMYWJlbCBpbnN0YW5jZW9mIERpc2Vhc2VNb2RlbExhYmVsKSB7CisJCQkJZmluYWwgRGlzZWFzZU1vZGVsTGFiZWwgZGlzZWFzZU1vZGVsTGFiZWwgPSAoRGlzZWFzZU1vZGVsTGFiZWwpIG5vZGVMYWJlbDsKKwkJCQkvLyBJcyB0aGlzIGxhYmVsIHVwZGF0ZWQgYnkgdGhlIGRpc2Vhc2UgbW9kZWw/CisJCQkJaWYgKGRpc2Vhc2VNb2RlbC5nZXRMYWJlbHNUb1VwZGF0ZSgpCisJCQkJCQkuY29udGFpbnMoZGlzZWFzZU1vZGVsTGFiZWwpKSB7CisJCQkJCS8vIFllcworCQkJCQlyZXRWYWx1ZSA9IGRpc2Vhc2VNb2RlbExhYmVsLmdldEN1cnJlbnRWYWx1ZSgpOworCQkJCQlicmVhazsKKwkJCQl9CisJCQl9IC8vIGlmCisJCX0gLy8gZm9yIGVhY2ggbm9kZSBsYWJlbAorCQlyZXR1cm4gcmV0VmFsdWU7CisJfSAvLyBnZXRDdXJyZW50RGlzZWFzZU1vZGVsTGFiZWxWYWx1ZQorCisJLyoqCisJICogCisJICogQHBhcmFtIHNjZW5hcmlvCisJICogICAgICAgICAgICBhIHNjZW5hcmlvCisJICogQHJldHVybiBhbGwgb2YgdGhlIGRpc2Vhc2UgbW9kZWxzIGluIHRoZSBzY2VuYXJpby4KKwkgKi8KKwlwcm90ZWN0ZWQgTGlzdDxEaXNlYXNlTW9kZWw+IGdldERpc2Vhc2VNb2RlbHMoZmluYWwgU2NlbmFyaW8gc2NlbmFyaW8pIHsKKwkJZmluYWwgTGlzdDxEaXNlYXNlTW9kZWw+IHJldFZhbHVlID0gbmV3IEFycmF5TGlzdDxEaXNlYXNlTW9kZWw+KCk7CisKKwkJZm9yIChmaW5hbCBPYmplY3QgZWxlbWVudCA6IHNjZW5hcmlvLmdldENhbm9uaWNhbEdyYXBoKCkKKwkJCQkuZ2V0RGVjb3JhdG9ycygpKSB7CisJCQlmaW5hbCBEZWNvcmF0b3IgZGVjb3JhdG9yID0gKERlY29yYXRvcikgZWxlbWVudDsKKwkJCWlmIChkZWNvcmF0b3IgaW5zdGFuY2VvZiBEaXNlYXNlTW9kZWwpIHsKKwkJCQlyZXRWYWx1ZS5hZGQoKERpc2Vhc2VNb2RlbCkgZGVjb3JhdG9yKTsKKwkJCX0KKwkJfSAvLyBmb3IgZWFjaCBkZWNvcmF0b3IgaW4gdGhlIGNhbm9uaWNhbCBncmFwaAorCQlyZXR1cm4gcmV0VmFsdWU7CisJfSAvLyBnZXREaXNlYXNlTW9kZWwKKworCS8qKgorCSAqIEBwYXJhbSBkaXNlYXNlU2NlbmFyaW9LZXkKKwkgKiAgICAgICAgICAgIHRoZSBrZXkgaWRlbnRpZnlpbmcgdGhlIHRlc3QKKwkgKiBAcmV0dXJuIHRoZSBudW1iZXIgb2YgZGlzZWFzZSBtb2RlbCBjb21wdXRhdGlvbnMgdG8gZXhlY3V0ZSBmb3IgdGhlIHRlc3QuCisJICovCisJcHJvdGVjdGVkIGFic3RyYWN0IGludCBnZXROdW1iZXJPZlN0ZXBzKGZpbmFsIFN0cmluZyBkaXNlYXNlU2NlbmFyaW9LZXkpOworCisJLyoqCisJICogQHBhcmFtIGRpc2Vhc2VTY2VuYXJpb0tleQorCSAqICAgICAgICAgICAgdGhlIGtleSBpZGVudGlmeWluZyB0aGUgdGVzdAorCSAqIEByZXR1cm4gdGhlIGV4cGVjdGVkIG51bWJlciBvZiBsYWJlbHMgYSBkaXNlYXNlIG1vZGVsIHdpbGwgdXBkYXRlCisJICovCisJcHJvdGVjdGVkIGFic3RyYWN0IGludCBnZXRFeHBlY3RlZE51bWJlck9mTGFiZWxzVG9VcGRhdGUoCisJCQlmaW5hbCBTdHJpbmcgZGlzZWFzZVNjZW5hcmlvS2V5KTsKKworCS8qKgorCSAqIEBwYXJhbSBkaXNlYXNlU2NlbmFyaW9LZXkKKwkgKiAgICAgICAgICAgIGlkZW50aWZpZXIgdGhhdCB1bmlxdWVseSBpZGVudGlmaWVzIHRoZSBjb21iaW5hdGlvbiBvZiBkaXNlYXNlCisJICogICAgICAgICAgICBhbmQgc2NlbmFyaW8uCisJICogQHBhcmFtIHN0ZXAKKwkgKiAgICAgICAgICAgIHRoZSBzaW11bGF0aW9uIHN0ZXAgdGhhdCBoYXMgYmVlbiBjb21wbGV0ZWQuCisJICogQHJldHVybiBhbiBhcnJheSBvZiBkaXNlYXNlIG1vZGVsIGxhYmVsIHZhbHVlcyB0aGF0IGFyZSB0aGUgZXhwZWN0ZWQKKwkgKiAgICAgICAgIHZhbHVlcyBhZnRlciB0aGUgZ2l2ZW4gc3RlcCBvZiB0aGUgc2ltdWxhdGlvbi4KKwkgKi8KKwlwcm90ZWN0ZWQgYWJzdHJhY3QgTGFiZWxWYWx1ZVtdW10gZ2V0RXhwZWN0ZWREaXNlYXNlTW9kZWxTdGF0ZSgKKwkJCWZpbmFsIFN0cmluZyBkaXNlYXNlU2NlbmFyaW9LZXksIGZpbmFsIGludCBzdGVwKTsKKworCS8qKgorCSAqIEByZXR1cm4gdGhlIGRpc2Vhc2UgbW9kZWxzIHRvIGJlIHRlc3RlZAorCSAqLworCXB1YmxpYyBhYnN0cmFjdCBMaXN0PE5vZGVEZWNvcmF0b3I+IGdldERpc2Vhc2VNb2RlbHNUb1Rlc3QoKTsKKworCS8qKgorCSAqIEBwYXJhbSBtb2RlbAorCSAqICAgICAgICAgICAgdGhlIG1vZGVsIHRvIGdlbmVyYXRlIHNjZW5hcmlvIGRlY29yYXRvcnMgZm9yCisJICogQHJldHVybiB0aGUgc2NlbmFyaW8gZGVjb3JhdG9ycyB0byBpbmNsdWRlIGluIGEgZml4dHVyZQorCSAqLworCXB1YmxpYyBhYnN0cmFjdCBDb2xsZWN0aW9uPERlY29yYXRvcj4gZ2V0U2NlbmFyaW9EZWNvcmF0b3JzKE1vZGVsIG1vZGVsKTsKKworCS8qKgorCSAqIEByZXR1cm4gYSBzdHJpbmcgdG8gYmUgdXNlZCBpbiBhIFVSSSB0byBwcmVmaXggdGhlIHNjZW5hcmlvIGZpbGVzIGJlaW5nCisJICogICAgICAgICBzZXJpYWxpemVkIGZvciBhIHBhcnRpY3VsYXIgZGlzZWFzZSB1bmRlciB0ZXN0LgorCSAqLworCXByb3RlY3RlZCBhYnN0cmFjdCBTdHJpbmcgZ2V0RGlzZWFzZVVSSVByZWZpeCgpOworCisJLyoqCisJICogVGhpcyBjbGFzcyByZXByZXNlbnRzIHRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgc3BlY2lmaWNhdGlvbiBvZiBhIHRlc3QKKwkgKi8KKwlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIGNsYXNzIFRlc3RTcGVjIHsKKwkJLyoqCisJCSAqIFRoZSBudW1iZXIgb2Ygcm93cyBpbiB0aGUgbGF0dGljZSBncmFwaAorCQkgKi8KKwkJcHVibGljIGludCBudW1Sb3dzID0gMDsKKworCQkvKioKKwkJICogVGhlIG51bWJlciBvZiBjb2x1bW5zIGluIHRoZSBsYXR0aWNlIGdyYXBoCisJCSAqLworCQlwdWJsaWMgaW50IG51bUNvbHVtbnMgPSAwOworCisJCS8qKgorCQkgKiBUaGUgc2NlbmFyaW8vZGlzZWFzZSBrZXkgb2YgdGhlIHRlc3QuCisJCSAqLworCQlwdWJsaWMgU3RyaW5nIHNjZW5hcmlvRGlzZWFzZUtleSA9ICIiOworCisJCS8qKgorCQkgKiBAcGFyYW0gbnVtUm93cworCQkgKiBAcGFyYW0gbnVtQ29sdW1ucworCQkgKiBAcGFyYW0gc2NlbmFyaW9EaXNlYXNlS2V5CisJCSAqLworCQlwcm90ZWN0ZWQgVGVzdFNwZWMoZmluYWwgaW50IG51bVJvd3MsIGZpbmFsIGludCBudW1Db2x1bW5zLAorCQkJCWZpbmFsIFN0cmluZyBzY2VuYXJpb0Rpc2Vhc2VLZXkpIHsKKwkJCXN1cGVyKCk7CisJCQl0aGlzLm51bVJvd3MgPSBudW1Sb3dzOworCQkJdGhpcy5udW1Db2x1bW5zID0gbnVtQ29sdW1uczsKKwkJCXRoaXMuc2NlbmFyaW9EaXNlYXNlS2V5ID0gc2NlbmFyaW9EaXNlYXNlS2V5OworCQl9CisJfSAvLyBUZXN0U3BlYworCit9IC8vIERpc2Vhc2VNb2RlbFNjZW5hcmlvVGVzdApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvc3RhbmRhcmQvdGVzdHMvRGlzZWFzZU1vZGVsVGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvc3RhbmRhcmQvdGVzdHMvRGlzZWFzZU1vZGVsVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFjOWRjOTcKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9zdGFuZGFyZC90ZXN0cy9EaXNlYXNlTW9kZWxUZXN0LmphdmEKQEAgLTAsMCArMSwyMjMgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLnRlc3RzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5EdWJsaW5Db3JlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLlBvcHVsYXRpb25MYWJlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuQWdncmVnYXRpbmdTSURpc2Vhc2VNb2RlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuRGlzZWFzZU1vZGVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5EaXNlYXNlTW9kZWxMYWJlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuSW5mZWN0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkRGlzZWFzZU1vZGVsOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IEEgdGVzdCBjYXNlIGZvciB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+RGlzZWFzZSBNb2RlbDwvYj48L2VtPicuCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIDxwPgorICogVGhlIGZvbGxvd2luZyBvcGVyYXRpb25zIGFyZSB0ZXN0ZWQ6CisgKiA8dWw+CisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLkRpc2Vhc2VNb2RlbCNjcmVhdGVEaXNlYXNlTW9kZWxMYWJlbChqYXZhLmxhbmcuU3RyaW5nKSA8ZW0+Q3JlYXRlIERpc2Vhc2UgTW9kZWwgTGFiZWw8L2VtPn08L2xpPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5EaXNlYXNlTW9kZWwjY3JlYXRlRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZShqYXZhLmxhbmcuU3RyaW5nKSA8ZW0+Q3JlYXRlIERpc2Vhc2UgTW9kZWwgTGFiZWwgVmFsdWU8L2VtPn08L2xpPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5EaXNlYXNlTW9kZWwjY3JlYXRlSW5mZWN0b3IoKSA8ZW0+Q3JlYXRlIEluZmVjdG9yPC9lbT59PC9saT4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuRGlzZWFzZU1vZGVsI2dldEFsbExhYmVsSWRlbnRpZmllcnMoKSA8ZW0+R2V0IEFsbCBMYWJlbCBJZGVudGlmaWVyczwvZW0+fTwvbGk+CisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLkRpc2Vhc2VNb2RlbCNnZXRQb3B1bGF0aW9uTW9kZWxMYWJlbHMoamF2YS5sYW5nLlN0cmluZywgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkdyYXBoKSA8ZW0+R2V0IFBvcHVsYXRpb24gTW9kZWwgTGFiZWxzPC9lbT59PC9saT4KKyAqIDwvdWw+CisgKiA8L3A+CisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBhYnN0cmFjdCBjbGFzcyBEaXNlYXNlTW9kZWxUZXN0IGV4dGVuZHMgVGVzdENhc2UgeworCisJLyoqCisJICogVGhlIHBvcHVsYXRpb24gaWRlbnRpZmllciB0byB1c2UgZm9yIHRlc3RpbmcgZGlzZWFzZSBtb2RlbHMuCisJICovCisJZmluYWwgcHVibGljIHN0YXRpYyBTdHJpbmcgVEVTVF9QT1BVTEFUSU9OX0lERU5USUZJRVIgPSBQb3B1bGF0aW9uTGFiZWwuSFVNQU47CisKKwkvKioKKwkgKiBUaGlzIGlzIHRoZSByYXRlIGF0IHdoaWNoIHBvcHVsYXRpb24gbWVtYmVycyAob24gYXZlcmFnZSkgdHJhbnNpdGlvbiBmcm9tCisJICogYWxsIG9mIHRoZSBvdGhlciBzdGF0ZXMgKGV4Y2VwdCA8ZW0+UHJlLUJvcm48L2VtPikgdG8gdGhlIHN0YXRlCisJICogPGVtPkRlYWQ8L2VtPiwgcGVyIHRpbWUgcGVyaW9kLiBVbml0czogcG9wdWxhdGlvbiBtZW1iZXJzCisJICogCisJICogQHNlZSBTdGFuZGFyZERpc2Vhc2VNb2RlbCNnZXRCYWNrZ3JvdW5kTW9ydGFsaXR5UmF0ZSgpCisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBkb3VibGUgTU9SVEFMSVRZX1JBVEUgPSAwLjAxOworCisJLyoqCisJICogVGhlIGZpeHR1cmUgZm9yIHRoaXMgRGlzZWFzZSBNb2RlbCB0ZXN0IGNhc2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIERpc2Vhc2VNb2RlbCBmaXh0dXJlID0gbnVsbDsKKworCS8qKgorCSAqIENvbnN0cnVjdHMgYSBuZXcgRGlzZWFzZSBNb2RlbCB0ZXN0IGNhc2Ugd2l0aCB0aGUgZ2l2ZW4gbmFtZS4gPCEtLQorCSAqIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBwYXJhbSBuYW1lCisJICogCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBEaXNlYXNlTW9kZWxUZXN0KFN0cmluZyBuYW1lKSB7CisJCXN1cGVyKG5hbWUpOworCX0KKworCS8qKgorCSAqIFNldHMgdGhlIGZpeHR1cmUgZm9yIHRoaXMgRGlzZWFzZSBNb2RlbCB0ZXN0IGNhc2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYworCSAqIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgc2V0Rml4dHVyZShEaXNlYXNlTW9kZWwgZml4dHVyZSkgeworCQl0aGlzLmZpeHR1cmUgPSBmaXh0dXJlOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIGZpeHR1cmUgZm9yIHRoaXMgRGlzZWFzZSBNb2RlbCB0ZXN0IGNhc2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYworCSAqIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIERpc2Vhc2VNb2RlbCBnZXRGaXh0dXJlKCkgeworCQlyZXR1cm4gZml4dHVyZTsKKwl9CisKKwkKKwkvKioKKwkgKiBUZXN0cyB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuRGlzZWFzZU1vZGVsI2NyZWF0ZURpc2Vhc2VNb2RlbExhYmVsKGphdmEubGFuZy5TdHJpbmcpIDxlbT5DcmVhdGUgRGlzZWFzZSBNb2RlbCBMYWJlbDwvZW0+fScgb3BlcmF0aW9uLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuRGlzZWFzZU1vZGVsI2NyZWF0ZURpc2Vhc2VNb2RlbExhYmVsKGphdmEubGFuZy5TdHJpbmcpCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIHRlc3RDcmVhdGVEaXNlYXNlTW9kZWxMYWJlbF9fU3RyaW5nKCkgeworCQkvLyBUT0RPOiBpbXBsZW1lbnQgdGhpcyBvcGVyYXRpb24gdGVzdCBtZXRob2QKKwkJLy8gRW5zdXJlIHRoYXQgeW91IHJlbW92ZSBAZ2VuZXJhdGVkIG9yIG1hcmsgaXQgQGdlbmVyYXRlZCBOT1QKKwkJZmFpbCgpOworCX0KKworCS8qKgorCSAqIFRlc3RzIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5EaXNlYXNlTW9kZWwjY3JlYXRlRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZShqYXZhLmxhbmcuU3RyaW5nKSA8ZW0+Q3JlYXRlIERpc2Vhc2UgTW9kZWwgTGFiZWwgVmFsdWU8L2VtPn0nIG9wZXJhdGlvbi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLkRpc2Vhc2VNb2RlbCNjcmVhdGVEaXNlYXNlTW9kZWxMYWJlbFZhbHVlKGphdmEubGFuZy5TdHJpbmcpCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIHRlc3RDcmVhdGVEaXNlYXNlTW9kZWxMYWJlbFZhbHVlX19TdHJpbmcoKSB7CisJCS8vIFRPRE86IGltcGxlbWVudCB0aGlzIG9wZXJhdGlvbiB0ZXN0IG1ldGhvZAorCQkvLyBFbnN1cmUgdGhhdCB5b3UgcmVtb3ZlIEBnZW5lcmF0ZWQgb3IgbWFyayBpdCBAZ2VuZXJhdGVkIE5PVAorCQlmYWlsKCk7CisJfQorCisJLyoqCisJICogdGVzdCB0aGUgc2FuaXR5IG9mIHRoZSBmaXh0dXJlCisJICovCisJcHVibGljIHZvaWQgdGVzdEZpeHR1cmVTYW5pdHkoKSB7CisJCWZpbmFsIERpc2Vhc2VNb2RlbCBkTW9kZWwgPSBnZXRGaXh0dXJlKCk7CisJCS8vLyBtdXN0IHNldCB0aGUgZHVibGluIGNvcmUgYW5kIFVSSSB0byBwYXNzIHNhbml0eQorCQkvLyBUT0RPIGVhY2ggbW9kZWwgZml4dHVyZSBzaG91bGQgcHJvYmFibHkgZG8gdGhpcy4KKwkJaWYoZE1vZGVsLmdldFVSSSgpPT1udWxsKSB7CisJCQlkTW9kZWwuc2V0VVJJKERpc2Vhc2VNb2RlbFRlc3RVdGlsLkRFRkFVTFRfVVJJKTsKKwkJCUR1YmxpbkNvcmUgZGMgPSBkTW9kZWwuZ2V0RHVibGluQ29yZSgpOworCQkJZGMuc2V0SWRlbnRpZmllcihkTW9kZWwuZ2V0VVJJKCkudG9TdHJpbmcoKSk7CisJCX0KKwkJYXNzZXJ0VHJ1ZShmaXh0dXJlLnNhbmUoKSk7CisJfSAvLyB0ZXN0Rml4dHVyZVNhbml0eQorCisJLyoqCisJICogVGVzdHMgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLkRpc2Vhc2VNb2RlbCNjcmVhdGVEaXNlYXNlTW9kZWxMYWJlbCgpIDxlbT5DcmVhdGUgRGlzZWFzZSBNb2RlbCBMYWJlbDwvZW0+fScKKwkgKiBvcGVyYXRpb24uIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLkRpc2Vhc2VNb2RlbCNjcmVhdGVEaXNlYXNlTW9kZWxMYWJlbCgpCisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlwdWJsaWMgdm9pZCB0ZXN0Q3JlYXRlRGlzZWFzZU1vZGVsTGFiZWwoKSB7CisJCWZpbmFsIERpc2Vhc2VNb2RlbCBkaXNlYXNlTW9kZWwgPSBnZXRGaXh0dXJlKCk7CisJCWlmICghKGRpc2Vhc2VNb2RlbCBpbnN0YW5jZW9mIEFnZ3JlZ2F0aW5nU0lEaXNlYXNlTW9kZWwpKSB7CisJCWZpbmFsIERpc2Vhc2VNb2RlbExhYmVsIGRtbCA9IGRpc2Vhc2VNb2RlbC5jcmVhdGVEaXNlYXNlTW9kZWxMYWJlbChkaXNlYXNlTW9kZWwuZ2V0UG9wdWxhdGlvbklkZW50aWZpZXIoKSk7CisJCWFzc2VydFRydWUoZG1sLmVDbGFzcygpLmVxdWFscyhnZXREaXNlYXNlTW9kZWxMYWJlbENsYXNzKCkpKTsKKwkJfQorCX0gLy8gdGVzdENyZWF0ZURpc2Vhc2VNb2RlbExhYmVsCisKKwkvKioKKwkgKiBUZXN0cyB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuRGlzZWFzZU1vZGVsI2NyZWF0ZURpc2Vhc2VNb2RlbExhYmVsVmFsdWUoKSA8ZW0+Q3JlYXRlIERpc2Vhc2UgTW9kZWwgTGFiZWwgVmFsdWU8L2VtPn0nIG9wZXJhdGlvbi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLkRpc2Vhc2VNb2RlbCNjcmVhdGVEaXNlYXNlTW9kZWxMYWJlbFZhbHVlKCkKKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCXB1YmxpYyB2b2lkIHRlc3RDcmVhdGVEaXNlYXNlTW9kZWxMYWJlbFZhbHVlKCkgeworCQkvLyBUT0RPOiBpbXBsZW1lbnQgdGhpcyBvcGVyYXRpb24gdGVzdCBtZXRob2QKKwkJYXNzZXJ0VHJ1ZSh0cnVlKTsKKwl9CisKKwkKKworCS8qKgorCSAqIFRlc3RzIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5EaXNlYXNlTW9kZWwjY3JlYXRlSW5mZWN0b3IoKSA8ZW0+Q3JlYXRlIEluZmVjdG9yPC9lbT59JworCSAqIG9wZXJhdGlvbi4gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuRGlzZWFzZU1vZGVsI2NyZWF0ZUluZmVjdG9yKCkKKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCXB1YmxpYyB2b2lkIHRlc3RDcmVhdGVJbmZlY3RvcigpIHsKKwkJZmluYWwgRGlzZWFzZU1vZGVsIGRpc2Vhc2VNb2RlbCA9IGdldEZpeHR1cmUoKTsKKwkJaWYgKCEoZGlzZWFzZU1vZGVsIGluc3RhbmNlb2YgQWdncmVnYXRpbmdTSURpc2Vhc2VNb2RlbCkpIHsKKwkJCWZpbmFsIEluZmVjdG9yIGluZmVjdG9yID0gZGlzZWFzZU1vZGVsLmNyZWF0ZUluZmVjdG9yKCk7CisJCQlhc3NlcnROb3ROdWxsKGluZmVjdG9yKTsKKwkJCWFzc2VydFRydWUoaW5mZWN0b3IuZ2V0RGlzZWFzZU5hbWUoKS5lcXVhbHMoCisJCQkJCWZpeHR1cmUuZ2V0RGlzZWFzZU5hbWUoKSkpOworCQkJYXNzZXJ0VHJ1ZShpbmZlY3Rvci5nZXRQb3B1bGF0aW9uSWRlbnRpZmllcigpLmVxdWFsc0lnbm9yZUNhc2UoCisJCQkJCWZpeHR1cmUuZ2V0UG9wdWxhdGlvbklkZW50aWZpZXIoKSkpOworCQl9CisKKwl9IC8vIHRlc3RDcmVhdGVJbmZlY3RvcgorCisJCisKKwkvKioKKwkgKiBUZXN0cyB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuRGlzZWFzZU1vZGVsI2dldEFsbExhYmVsSWRlbnRpZmllcnMoKSA8ZW0+R2V0IEFsbCBMYWJlbCBJZGVudGlmaWVyczwvZW0+fScgb3BlcmF0aW9uLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuRGlzZWFzZU1vZGVsI2dldEFsbExhYmVsSWRlbnRpZmllcnMoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCB0ZXN0R2V0QWxsTGFiZWxJZGVudGlmaWVycygpIHsKKwkJLy8gVE9ETzogaW1wbGVtZW50IHRoaXMgb3BlcmF0aW9uIHRlc3QgbWV0aG9kCisJCS8vIEVuc3VyZSB0aGF0IHlvdSByZW1vdmUgQGdlbmVyYXRlZCBvciBtYXJrIGl0IEBnZW5lcmF0ZWQgTk9UCisJCWZhaWwoKTsKKwl9CisKKwkvKioKKwkgKiBUZXN0cyB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuRGlzZWFzZU1vZGVsI2dldFBvcHVsYXRpb25Nb2RlbExhYmVscyhqYXZhLmxhbmcuU3RyaW5nLCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguR3JhcGgpIDxlbT5HZXQgUG9wdWxhdGlvbiBNb2RlbCBMYWJlbHM8L2VtPn0nIG9wZXJhdGlvbi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLkRpc2Vhc2VNb2RlbCNnZXRQb3B1bGF0aW9uTW9kZWxMYWJlbHMoamF2YS5sYW5nLlN0cmluZywgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkdyYXBoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCB0ZXN0R2V0UG9wdWxhdGlvbk1vZGVsTGFiZWxzX19TdHJpbmdfR3JhcGgoKSB7CisJCS8vIFRPRE86IGltcGxlbWVudCB0aGlzIG9wZXJhdGlvbiB0ZXN0IG1ldGhvZAorCQkvLyBFbnN1cmUgdGhhdCB5b3UgcmVtb3ZlIEBnZW5lcmF0ZWQgb3IgbWFyayBpdCBAZ2VuZXJhdGVkIE5PVAorCQlmYWlsKCk7CisJfQorCisJLyoqCisJICogQHJldHVybiB0aGUgRUNsYXNzIG9mIHRoZSBjbGFzcyB0aGlzIGRpc2Vhc2UgbW9kZWwgdXBkYXRlcworCSAqLworCXByb3RlY3RlZCBhYnN0cmFjdCBFQ2xhc3MgZ2V0RGlzZWFzZU1vZGVsTGFiZWxDbGFzcygpOworCisJCisKK30gLy8gRGlzZWFzZU1vZGVsVGVzdApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvc3RhbmRhcmQvdGVzdHMvRGlzZWFzZU1vZGVsVGVzdFV0aWwuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3N0YW5kYXJkL3Rlc3RzL0Rpc2Vhc2VNb2RlbFRlc3RVdGlsLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWIxNmNmNQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3N0YW5kYXJkL3Rlc3RzL0Rpc2Vhc2VNb2RlbFRlc3RVdGlsLmphdmEKQEAgLTAsMCArMSw5MTQgQEAKKy8vIERpc2Vhc2VNb2RlbFRlc3RVdGlsLmphdmEKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLnRlc3RzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7CitpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247CitpbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOworaW1wb3J0IGphdmEudXRpbC5MaXN0OworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlVSSTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuU1RFTVVSSTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLkR1YmxpbkNvcmU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkVkZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkdyYXBoOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5HcmFwaEZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLk5vZGU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmltcGwuRWRnZUltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLkRlY29yYXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuTW9kZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLk1vZGVsRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuTm9kZURlY29yYXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuU1RFTVRpbWU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNjZW5hcmlvLlNjZW5hcmlvOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zY2VuYXJpby5TY2VuYXJpb0ZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNlcXVlbmNlci50ZXN0cy5TZXF1ZW50aWFsU2VxdWVuY2VyVGVzdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc29sdmVyLlNvbHZlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmFkYXB0ZXJzLnNwYXRpYWwuZ2VvLklubGluZUxhdExvbmdEYXRhUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5hZGFwdGVycy5zcGF0aWFsLmdlby5MYXRMb25nOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuYWRhcHRlcnMuc3BhdGlhbC5nZW8uTGF0TG9uZy5TZWdtZW50QnVpbGRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5BcmVhTGFiZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuTGFiZWxzRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5Qb3B1bGF0aW9uTGFiZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuUmVsYXRpdmVQaHlzaWNhbFJlbGF0aW9uc2hpcExhYmVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLlRyYW5zcG9ydE1vZGU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuaW1wbC5Db21tb25Cb3JkZXJSZWxhdGlvbnNoaXBMYWJlbEltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuaW1wbC5UcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbEltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5ub2Rlcy5Ob2Rlc0ZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5ub2Rlcy5SZWdpb247CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5zb2x2ZXJzLmZkLkZkRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwuZGVjb3JhdG9ycy5EZWNvcmF0b3JzRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwuZGVjb3JhdG9ycy5UZXN0RWRnZURlY29yYXRvcjE7CisKKy8qKgorICogVGhpcyBjbGFzcyBjb250YWlucyBhIG51bWJlciBvZiB1dGlsaXRpZXMgZm9yIGNyZWF0aW5nIGFydGlmYWN0cyB1c2VmdWwgZm9yCisgKiB0ZXN0aW5nIGRpc2Vhc2UgbW9kZWwuCisgKi8KK3B1YmxpYyBjbGFzcyBEaXNlYXNlTW9kZWxUZXN0VXRpbCB7CisKKwkvKioKKwkgKiBUaGUgbWluaW11bSBsYXRpdHVkZSB2YWx1ZSBvZiB0aGUgcmVjdGFuZ3VsYXIgYXJlYSB0byB3aGljaCBub2RlIHNwYXRpYWwKKwkgKiBkYXRhIGlzIG1hcHBlZC4KKwkgKi8KKwlwdWJsaWMgZmluYWwgc3RhdGljIGRvdWJsZSBNSU5fTEFUSVRVREVfVkFMVUUgPSAwLjA7CisKKwkvKioKKwkgKiBUaGUgbWF4aW11bSBsYXRpdHVkZSB2YWx1ZSBvZiB0aGUgcmVjdGFuZ3VsYXIgYXJlYSB0byB3aGljaCBub2RlIHNwYXRpYWwKKwkgKiBkYXRhIGlzIG1hcHBlZC4KKwkgKi8KKwlwdWJsaWMgZmluYWwgc3RhdGljIGRvdWJsZSBNQVhfTEFUSVRVREVfVkFMVUUgPSA1MC4wOworCisJLyoqCisJICogVGhlIG1pbmltdW0gbG9uZ2l0dWRlIHZhbHVlIG9mIHRoZSByZWN0YW5ndWxhciBhcmVhIHRvIHdoaWNoIG5vZGUgc3BhdGlhbAorCSAqIGRhdGEgaXMgbWFwcGVkLgorCSAqLworCXB1YmxpYyBmaW5hbCBzdGF0aWMgZG91YmxlIE1JTl9MT05HSVRVREVfVkFMVUUgPSAwLjA7CisKKwkvKioKKwkgKiBUaGUgbWF4aW11bSBsb25naXR1ZGUgdmFsdWUgb2YgdGhlIHJlY3Rhbmd1bGFyIGFyZWEgdG8gd2hpY2ggbm9kZSBzcGF0aWFsCisJICogZGF0YSBpcyBtYXBwZWQuCisJICovCisJcHVibGljIGZpbmFsIHN0YXRpYyBkb3VibGUgTUFYX0xPTkdJVFVERV9WQUxVRSA9IDEwMC4wOworCisJLyoqCisJICogVGhlIG51bWJlciBvZiBkZWdyZWVzIG9mIGxhdGl0dWRlIG9mIHRoZSBhcmVhIG9uIHRoZSBFYXJ0aCdzIHN1cmZhY2UgdG8KKwkgKiB3aGljaCB0aGUgbm9kZXMgYXJlIG1hcHBlZC4KKwkgKi8KKwlwdWJsaWMgZmluYWwgc3RhdGljIGRvdWJsZSBMQVRJVFVERV9IRUlHSFQgPSBNQVhfTEFUSVRVREVfVkFMVUUKKwkJCS0gTUlOX0xBVElUVURFX1ZBTFVFOworCisJLyoqCisJICogVGhlIG51bWJlciBvZiBkZWdyZWVzIG9mIGxvbmdpdHVkZSBvZiB0aGUgYXJlYSBvbiB0aGUgRWFydGgncyBzdXJmYWNlIHRvCisJICogd2hpY2ggdGhlIG5vZGVzIGFyZSBtYXBwZWQuCisJICovCisJcHVibGljIGZpbmFsIHN0YXRpYyBkb3VibGUgTE9OR0lUVURFX1dJRFRIID0gTUFYX0xPTkdJVFVERV9WQUxVRQorCQkJLSBNSU5fTE9OR0lUVURFX1ZBTFVFOworCisJLyoqCisJICogVGhlIHZhbHVlIHVzZWQgZm9yIHRoZSBwb3B1bGF0aW9uIG9mIGEgbm9kZS4KKwkgKi8KKwlwdWJsaWMgZmluYWwgc3RhdGljIGRvdWJsZSBURVNUX1BPUFVMQVRJT05fQ09VTlQgPSAxMDA7CisKKwkvKioKKwkgKiBUaGUgdmFsdWUgdXNlZCBmb3IgYXJlYSBvZiBhIG5vZGUuCisJICovCisJcHVibGljIGZpbmFsIHN0YXRpYyBkb3VibGUgVEVTVF9BUkVBID0gMTAwLjA7CisKKwkvKioKKwkgKiBUaGUgcG9wdWxhdGlvbiB1c2VkIGZvciB0aGUgZGlzZWFzZSBtb2RlbCB0ZXN0cy4KKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBURVNUX1BPUFVMQVRJT05fSURFTlRJRklFUiA9IFBvcHVsYXRpb25MYWJlbC5IVU1BTjsKKworCS8qKgorCSAqIFRoaXMgaXMgdGhlIHRpbWUgcGVyaW9kIGJldHdlZW4gc3VjY2Vzc2l2ZSBjb21wdXRhdGlvbnMgb2YgbGFiZWwgdmFsdWVzLgorCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgbG9uZyBURVNUX1RSQU5TUE9SVF9SQVRFX1RJTUVfUEVSSU9EID0gU1RFTVRpbWUuVW5pdHMuREFZLmdldE1pbGxpc2Vjb25kcygpOworCisJLyoqCisJICogVGhlIG51bWJlciBvZiBodW1hbnMgdGhhdCB0cmF2ZWwgYnkgYWlyIGZyb20gb25lIG5vZGUgdG8gYW5vdGhlci4KKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIGludCBBSVJfVFJBTlNQT1JUX01BWF9DQVBBQ0lUWSA9IDU7CisKKwkvKioKKwkgKiBUaGUgbnVtYmVyIG9mIGh1bWFucyB0aGF0IHRyYXZlbCBieSByb2FkIDEgZnJvbSBvbmUgbm9kZSB0byBhbm90aGVyLgorCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFJPQUQxX1RSQU5TUE9SVF9NQVhfQ0FQQUNJVFkgPSAzOworCisJLyoqCisJICogVGhlIG51bWJlciBvZiBodW1hbnMgdGhhdCB0cmF2ZWwgYnkgcm9hZCAyIGZyb20gb25lIG5vZGUgdG8gYW5vdGhlci4KKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIGludCBST0FEMl9UUkFOU1BPUlRfTUFYX0NBUEFDSVRZID0gMjsKKworCS8qKgorCSAqIFRoZSBuYW1lIG9mIGEgcm9hZCBjb25uZWN0aW5nIHR3byBub2RlcyB0b2dldGhlciBpbiB0aGUgZ3JhcGguCisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUk9BRDFfVFJBTlNQT1JUX0lEID0gInJvYWQxIjsKKworCS8qKgorCSAqIFRoZSBuYW1lIG9mIGEgcm9hZCBjb25uZWN0aW5nIHR3byBub2RlcyB0b2dldGhlciBpbiB0aGUgZ3JhcGguCisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUk9BRDJfVFJBTlNQT1JUX0lEID0gInJvYWQyIjsKKworCS8qKgorCSAqIFRoZSBudW1iZXIgb2Yga2lsb21ldGVycyBvZiBjb21tb24gYm9yZGVyIHRoYXQgdHdvIG5vZGVzIHNoYXJlLgorCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IENPTU1PTl9CT1JERVJfTEVOR1RIID0gMTA7CisKKwkvKioKKwkgKiBUaGUgaWRlbnRpZmllciB1c2VkIGZvciBhaXIgdHJhbnNwb3J0CisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgQUlSX1RSQU5TUE9SVF9JRCA9ICJhaXJjYW5hZGEiOworCisJLyoqCisJICogVGhlIGRpZmZlcmVuY2UgYmV0d2VlbiB0d28gZG91YmxlIHZhbHVlcyB0aGF0IGNvbnN0aXR1dGVzIGluZXF1YWxpdHkKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIGRvdWJsZSBET1VCTEVfRVFVQUxJVFlfVE9MRVJBTkNFID0gMC4wMjsKKwkKKwkvLyBEaXNlYXNlIE1vZGVsIFRlc3QgVVJJJ3MKKwlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBNT0RFTCA9ICJESVNFQVNFTU9ERUwiOworCXB1YmxpYyBzdGF0aWMgZmluYWwgVVJJIERFRkFVTFRfVVJJID0gU1RFTVVSSS5jcmVhdGVVUkkoTU9ERUwgKyAiLyIgKyAiZGVmYXVsdFRlc3RVUkkiKTsKKwlwdWJsaWMgc3RhdGljIGxvbmcgVElNRV9PTkVfREFZID0gMTsKKwlwdWJsaWMgc3RhdGljIGxvbmcgVElNRV9UV09fREFZID0gMjsKKwkKKwkvKioKKwkgKiBVUkkgZm9yIHRoZSBTb2x2ZXIKKwkgKi8KKwlwdWJsaWMgc3RhdGljIFVSSSBTT0xWRVJfVVJJID0gU1RFTVVSSS5jcmVhdGVVUkkoInNvbHZlci9zb2x2ZXJUZXN0LnNvbHZlciIpOworCQorCXB1YmxpYyBzdGF0aWMgU1RFTVRpbWUgZ2V0U1RFTVRpbWUoKSB7CisJCXJldHVybiBNb2RlbEZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZVNURU1UaW1lKCk7CisJfQorCisKKwkvKioKKwkgKiBAcGFyYW0gdjEKKwkgKiAgICAgICAgICAgIGEgZG91YmxlCisJICogQHBhcmFtIHYyCisJICogICAgICAgICAgICBhIGRvdWJsZQorCSAqIEByZXR1cm4gPGNvZGU+dHJ1ZTwvY29kZT4gaWYgdGhlIHR3byBkb3VibGUgdmFsdWVzIGRpZmZlciB0aGFuIGJ5IGxlc3MKKwkgKiAgICAgICAgIHRoYW4ge0BsaW5rICNET1VCTEVfRVFVQUxJVFlfVE9MRVJBTkNFfSBhbmQgc28gc2hvdWxkIGJlCisJICogICAgICAgICBjb25zaWRlcmVkIHRvIGJlIGVxdWFsLgorCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgYm9vbGVhbiBjbG9zZUVub3VnaChmaW5hbCBkb3VibGUgdjEsIGZpbmFsIGRvdWJsZSB2MikgeworCQlyZXR1cm4gTWF0aC5hYnModjEgLSB2MikgPCBET1VCTEVfRVFVQUxJVFlfVE9MRVJBTkNFOworCX0gLy8gY2xvc2VFbm91Z2gKKworCS8qKgorCSAqIEBwYXJhbSBzY2VuYXJpb0RlY29yYXRvcnMKKwkgKiBAcGFyYW0gbW9kZWwKKwkgKiBAcmV0dXJuIGEgc2NlbmFyaW8KKwkgKi8KKwlwdWJsaWMgc3RhdGljIFNjZW5hcmlvIGNyZWF0ZUxhdHRpY2VTY2VuYXJpbygKKwkJCWZpbmFsIENvbGxlY3Rpb248RGVjb3JhdG9yPiBzY2VuYXJpb0RlY29yYXRvcnMsIGZpbmFsIE1vZGVsIG1vZGVsKSB7CisJCWZpbmFsIFNjZW5hcmlvIHNjZW5hcmlvID0gU2NlbmFyaW9GYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVTY2VuYXJpbygpOworCQlmaW5hbCBEdWJsaW5Db3JlIGRjID0gc2NlbmFyaW8uZ2V0RHVibGluQ29yZSgpOworCQlkYy5wb3B1bGF0ZSgpOworCQlkYy5zZXRUaXRsZShtb2RlbC5nZXREdWJsaW5Db3JlKCkuZ2V0VGl0bGUoKSk7CisKKwkJc2NlbmFyaW8uc2V0TW9kZWwobW9kZWwpOworCisJCXNjZW5hcmlvLnNldFNlcXVlbmNlcihTZXF1ZW50aWFsU2VxdWVuY2VyVGVzdC5jcmVhdGVGaXh0dXJlKCkpOworCisJCS8vIFNjZW5hcmlvIERlY29yYXRvcnMKKwkJc2NlbmFyaW8uZ2V0U2NlbmFyaW9EZWNvcmF0b3JzKCkuYWRkQWxsKHNjZW5hcmlvRGVjb3JhdG9ycyk7CisJCQorCisJCS8vIGV2ZXJ5IHNjZW5hcmlvIG5lZWRzIGEgc29sdmVyCisJCS8vIHVzZSB0aGUgZmluaXRlIGRpZmZlcm5jZSBzb2x2ZXIgaGVyZQorCQlTb2x2ZXIgc29sdmVyID0gRmRGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVGaW5pdGVEaWZmZXJlbmNlKCk7CisJCXNvbHZlci5zZXRVUkkoU09MVkVSX1VSSSk7CisJCSAKKwkJc2NlbmFyaW8uc2V0U29sdmVyKHNvbHZlcik7CisKKwkJcmV0dXJuIHNjZW5hcmlvOworCX0gLy8gY3JlYXRlTGF0dGljZVNjZW5hcmlvCisKKwkvKioKKwkgKiBDcmVhdGUgYSBTY2VuYXJpbyB3aXRoIGEgbGF0dGljZSBmb3IgYSBncmFwaAorCSAqIAorCSAqIEBwYXJhbSBub2RlRGVjb3JhdG9ycworCSAqICAgICAgICAgICAgdGhlIG5vZGUgZGVjb3JhdG9ycyBmb3IgdGhlIG1vZGVsCisJICogQHBhcmFtIG51bVJvd3MKKwkgKiAgICAgICAgICAgIHRoZSBudW1iZXIgb2Ygcm93cyBvZiBub2RlcyBpbiB0aGUgbGF0dGljZQorCSAqIEBwYXJhbSBudW1Db2x1bW5zCisJICogICAgICAgICAgICB0aGUgbnVtYmVyIG9mIGNvbHVtbnMgb2Ygbm9kZXMgaW4gdGhlIGxhdHRpY2UKKwkgKiBAcGFyYW0gcG9wdWxhdGlvbkNvdW50CisJICogICAgICAgICAgICB0aGUgKERlZmF1bHQ6IGh1bWFuKSBwb3B1bGF0aW9uIGF0IGVhY2ggbm9kZQorCSAqIEBwYXJhbSBhcmVhCisJICogICAgICAgICAgICB0aGUgYXJlYSAoa21eMikgb2YgZWFjaCBub2RlCisJICogCisJICogQHJldHVybiB0aGUgc2NlbmFyaW8KKwkgKi8KKwkvLyBwdWJsaWMgc3RhdGljIFNjZW5hcmlvIGNyZWF0ZUxhdHRpY2VTY2VuYXJpbygKKwkvLyBmaW5hbCBDb2xsZWN0aW9uPE5vZGVEZWNvcmF0b3I+IG5vZGVEZWNvcmF0b3JzLCBmaW5hbCBpbnQgbnVtUm93cywKKwkvLyBmaW5hbCBpbnQgbnVtQ29sdW1ucywgZmluYWwgZG91YmxlIHBvcHVsYXRpb25Db3VudCwgZmluYWwgZG91YmxlIGFyZWEpIHsKKwkvLyBmaW5hbCBTY2VuYXJpbyByZXRWYWx1ZSA9IFNjZW5hcmlvRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlU2NlbmFyaW8oKTsKKwkvLworCS8vIC8vIE1vZGVsCisJLy8gZmluYWwgTW9kZWwgbW9kZWwgPSBjcmVhdGVMYXR0aWNlTW9kZWwobm9kZURlY29yYXRvcnMsIG51bVJvd3MsCisJLy8gbnVtQ29sdW1ucywgcG9wdWxhdGlvbkNvdW50LCBhcmVhKTsKKwkvLwkJCisJLy8gLy8gU2NlbmFyaW8gZGVjb3JhdG9ycworCS8vIGZpbmFsIExpc3Q8RGVjb3JhdG9yPiBzY2VuYXJpb0RlY29yYXRvcnMgPSBnZXQKKwkvLyAvLyBTZXF1ZW5jZXIKKwkvLyByZXRWYWx1ZS5zZXRTZXF1ZW5jZXIoU2VxdWVudGlhbFNlcXVlbmNlclRlc3QuY3JlYXRlRml4dHVyZSgpKTsKKwkvLworCS8vIC8vIER1YmxpbiBDb3JlCisJLy8gZmluYWwgRHVibGluQ29yZSBkYyA9IHJldFZhbHVlLmdldER1YmxpbkNvcmUoKTsKKwkvLyBkYy5wb3B1bGF0ZSgpOworCS8vIGRjLnNldFRpdGxlKGNyZWF0ZVNjZW5hcmlvVGl0bGUoY2Fub25pY2FsU2NlbmFyaW9EZWNvcmF0b3JzLAorCS8vIG5vZGVEZWNvcmF0b3JzLCBudW1Sb3dzLCBudW1Db2x1bW5zLCBwb3B1bGF0aW9uQ291bnQsIGFyZWEpKTsKKwkvLworCS8vIC8vIFNjZW5hcmlvIERlY29yYXRvcnMKKwkvLyByZXRWYWx1ZS5nZXREZWNvcmF0b3JzKCkuYWRkQWxsKGNhbm9uaWNhbFNjZW5hcmlvRGVjb3JhdG9ycyk7CisJLy8KKwkvLyAvLyBNb2RlbAorCS8vIHJldFZhbHVlLnNldE1vZGVsKG1vZGVsKTsKKwkvLworCS8vIGFzc2VydCByZXRWYWx1ZS5zYW5lKCk7CisJLy8KKwkvLyByZXR1cm4gcmV0VmFsdWU7CisJLy8gfSAvLyBjcmVhdGVMYXR0aWNlU2NlbmFyaW8KKwkvKioKKwkgKiBUaGlzIG1ldGhvZCBjcmVhdGVzIGEgTW9kZWwgd2hlcmUgdGhlIG5vZGVzIGFyZSBpbnRlcmNvbm5lY3RlZCBhcyBpbiBhCisJICogbGF0dGljZS4KKwkgKiAKKwkgKiBAcGFyYW0gbm9kZURlY29yYXRvcnMKKwkgKiAgICAgICAgICAgIHRoZSBub2RlIGRlY29yYXRvcnMgZm9yIHRoZSBtb2RlbAorCSAqIEBwYXJhbSBudW1Sb3dzCisJICogICAgICAgICAgICB0aGUgbnVtYmVyIG9mIHJvd3Mgb2Ygbm9kZXMgaW4gdGhlIGxhdHRpY2UKKwkgKiBAcGFyYW0gbnVtQ29sdW1ucworCSAqICAgICAgICAgICAgdGhlIG51bWJlciBvZiBjb2x1bW5zIG9mIG5vZGVzIGluIHRoZSBsYXR0aWNlCisJICogQHBhcmFtIHBvcHVsYXRpb25Db3VudAorCSAqICAgICAgICAgICAgdGhlIChEZWZhdWx0OiBodW1hbikgcG9wdWxhdGlvbiBhdCBlYWNoIG5vZGUKKwkgKiBAcGFyYW0gYXJlYQorCSAqICAgICAgICAgICAgdGhlIGFyZWEgKGttXjIpIG9mIGVhY2ggbm9kZQorCSAqIEByZXR1cm4gdGhlIG1vZGVsCisJICovCisJcHVibGljIHN0YXRpYyBNb2RlbCBjcmVhdGVMYXR0aWNlTW9kZWwoCisJCQlmaW5hbCBDb2xsZWN0aW9uPE5vZGVEZWNvcmF0b3I+IG5vZGVEZWNvcmF0b3JzLCBmaW5hbCBpbnQgbnVtUm93cywKKwkJCWZpbmFsIGludCBudW1Db2x1bW5zLCBmaW5hbCBkb3VibGUgcG9wdWxhdGlvbkNvdW50LAorCQkJZmluYWwgZG91YmxlIGFyZWEpIHsKKwkJZmluYWwgTW9kZWwgcmV0VmFsdWUgPSBNb2RlbEZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZU1vZGVsKCk7CisJCWZpbmFsIER1YmxpbkNvcmUgZGMgPSByZXRWYWx1ZS5nZXREdWJsaW5Db3JlKCk7CisJCWRjLnBvcHVsYXRlKCk7CisJCWRjLnNldFRpdGxlKGNyZWF0ZU1vZGVsVGl0bGUobm9kZURlY29yYXRvcnMsIG51bVJvd3MsIG51bUNvbHVtbnMsCisJCQkJcG9wdWxhdGlvbkNvdW50LCBhcmVhKSk7CisKKwkJcmV0VmFsdWUuZ2V0Tm9kZURlY29yYXRvcnMoKS5hZGRBbGwobm9kZURlY29yYXRvcnMpOworCQlmaW5hbCBHcmFwaCBsYXR0aWNlR3JhcGggPSBjcmVhdGVMYXR0aWNlR3JhcGgobnVtUm93cywgbnVtQ29sdW1ucywKKwkJCQlwb3B1bGF0aW9uQ291bnQsIGFyZWEpOworCQlyZXRWYWx1ZS5nZXRHcmFwaHMoKS5hZGQobGF0dGljZUdyYXBoKTsKKworCQlhc3NlcnQgcmV0VmFsdWUuc2FuZSgpOworCisJCXJldHVybiByZXRWYWx1ZTsKKwl9IC8vIGNyZWF0ZUxhdHRpY2VNb2RlbAorCisJLyoqCisJICogVGhpcyBtZXRob2QgY3JlYXRlcyBhIGdyYXBoIHdoZXJlIHRoZSBub2RlcyBhcmUgaW50ZXJjb25uZWN0ZWQgYXMgaW4gYQorCSAqIGxhdHRpY2UuCisJICogCisJICogQHBhcmFtIG51bVJvd3MKKwkgKiAgICAgICAgICAgIHRoZSBudW1iZXIgb2Ygcm93cyBvZiBub2RlcyBpbiB0aGUgbGF0dGljZQorCSAqIEBwYXJhbSBudW1Db2x1bW5zCisJICogICAgICAgICAgICB0aGUgbnVtYmVyIG9mIGNvbHVtbnMgb2Ygbm9kZXMgaW4gdGhlIGxhdHRpY2UKKwkgKiBAcGFyYW0gcG9wdWxhdGlvbkNvdW50CisJICogICAgICAgICAgICB0aGUgKERlZmF1bHQ6IGh1bWFuKSBwb3B1bGF0aW9uIGF0IGVhY2ggbm9kZQorCSAqIEBwYXJhbSBhcmVhCisJICogICAgICAgICAgICB0aGUgYXJlYSAoa21eMikgb2YgZWFjaCBub2RlCisJICogQHJldHVybiBncmFwaCB0aGF0IGlzIGEgbGF0dGljZSBvZiBub2Rlcy4KKwkgKi8KKwlwdWJsaWMgc3RhdGljIEdyYXBoIGNyZWF0ZUxhdHRpY2VHcmFwaChmaW5hbCBpbnQgbnVtUm93cywKKwkJCWZpbmFsIGludCBudW1Db2x1bW5zLCBmaW5hbCBkb3VibGUgcG9wdWxhdGlvbkNvdW50LAorCQkJZmluYWwgZG91YmxlIGFyZWEpIHsKKworCQlmaW5hbCBOb2RlIG5vZGVIb2xkZXJbXVtdID0gbmV3IE5vZGVbbnVtUm93c11bbnVtQ29sdW1uc107CisJCWZpbmFsIEdyYXBoIHJldFZhbHVlID0gR3JhcGhGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVHcmFwaCgpOworCisJCWZpbmFsIER1YmxpbkNvcmUgZGMgPSByZXRWYWx1ZS5nZXREdWJsaW5Db3JlKCk7CisJCWRjLnBvcHVsYXRlKCk7CisJCWRjCisJCQkJLnNldFRpdGxlKGNyZWF0ZUdyYXBoVGl0bGUobnVtUm93cywgbnVtQ29sdW1ucywKKwkJCQkJCXBvcHVsYXRpb25Db3VudCwgYXJlYSkpOworCisJCS8vIENyZWF0ZSB0aGUgbm9kZXMgYW5kIHB1dCB0aGVtIGludG8gdGhlIGdyYXBoCisJCWZvciAoaW50IHJvdyA9IDA7IHJvdyA8IG51bVJvd3M7IHJvdysrKSB7CisJCQlmb3IgKGludCBjb2x1bW4gPSAwOyBjb2x1bW4gPCBudW1Db2x1bW5zOyBjb2x1bW4rKykgeworCQkJCWZpbmFsIFJlZ2lvbiByZWdpb25Ob2RlID0gY3JlYXRlUmVnaW9uTm9kZShyb3csIGNvbHVtbik7CisJCQkJbm9kZUhvbGRlcltyb3ddW2NvbHVtbl0gPSByZWdpb25Ob2RlOworCQkJCXJldFZhbHVlLnB1dE5vZGUocmVnaW9uTm9kZSk7CisJCQl9IC8vIGZvciBlYWNoIGNvbHVtbgorCQl9IC8vIGZvciBlYWNoIHJvdworCisJCS8vIEFkZCB0aGUgUG9wdWxhdGlvbiBhbmQgQXJlYSBsYWJlbHMKKwkJZm9yIChpbnQgcm93ID0gMDsgcm93IDwgbnVtUm93czsgcm93KyspIHsKKwkJCWZvciAoaW50IGNvbHVtbiA9IDA7IGNvbHVtbiA8IG51bUNvbHVtbnM7IGNvbHVtbisrKSB7CisJCQkJZmluYWwgTm9kZSBub2RlID0gbm9kZUhvbGRlcltyb3ddW2NvbHVtbl07CisKKwkJCQkvLyBQb3B1bGF0aW9uCisJCQkJcmV0VmFsdWUucHV0Tm9kZUxhYmVsKGNyZWF0ZVBvcHVsYXRpb25MYWJlbCgKKwkJCQkJCVRFU1RfUE9QVUxBVElPTl9JREVOVElGSUVSLCBwb3B1bGF0aW9uQ291bnQsIG5vZGUpKTsKKworCQkJCS8vIEFyZWEKKwkJCQlyZXRWYWx1ZS5wdXROb2RlTGFiZWwoY3JlYXRlQXJlYUxhYmVsKGFyZWEsIG5vZGUpKTsKKwkJCX0gLy8gZm9yIGVhY2ggY29sdW1uCisJCX0gLy8gZm9yIGVhY2ggcm93CisKKwkJLy8gTm93IGFkZCByZWxhdGlvbnNoaXBzCisKKwkJLy8gRG8gdGhlIGZpcnN0IHJvdyBieSBpdHNlbGYKKwkJZm9yIChpbnQgY29sdW1uID0gMTsgY29sdW1uIDwgbnVtQ29sdW1uczsgY29sdW1uKyspIHsKKwkJCWFkZFJlbGF0aW9uRWRnZXMobm9kZUhvbGRlclswXVtjb2x1bW4gLSAxXSwgbm9kZUhvbGRlclswXVtjb2x1bW5dLAorCQkJCQlyZXRWYWx1ZSk7CisJCX0gLy8gZm9yIGNvbHVtbgorCisJCS8vIEFkZGVkIHRoZSBwaHlzaWNhbCByZWxhdGlvbnMKKwkJZm9yIChpbnQgcm93ID0gMTsgcm93IDwgbnVtUm93czsgcm93KyspIHsKKwkJCWZvciAoaW50IGNvbHVtbiA9IDE7IGNvbHVtbiA8IG51bUNvbHVtbnM7IGNvbHVtbisrKSB7CisJCQkJYWRkUmVsYXRpb25FZGdlcyhub2RlSG9sZGVyW3Jvd11bY29sdW1uIC0gMV0sCisJCQkJCQlub2RlSG9sZGVyW3Jvd11bY29sdW1uXSwgcmV0VmFsdWUpOworCQkJCWFkZFJlbGF0aW9uRWRnZXMobm9kZUhvbGRlcltyb3cgLSAxXVtjb2x1bW5dLAorCQkJCQkJbm9kZUhvbGRlcltyb3ddW2NvbHVtbl0sIHJldFZhbHVlKTsKKwkJCX0gLy8gZm9yIGVhY2ggY29sdW1uCisJCX0gLy8gZm9yIGVhY2ggcm93CisKKwkJLy8gRG8gdGhlIGZpcnN0IGNvbHVtbiBieSBpdHNlbGYKKwkJZm9yIChpbnQgcm93ID0gMTsgcm93IDwgbnVtUm93czsgcm93KyspIHsKKwkJCWFkZFJlbGF0aW9uRWRnZXMobm9kZUhvbGRlcltyb3cgLSAxXVswXSwgbm9kZUhvbGRlcltyb3ddWzBdLAorCQkJCQlyZXRWYWx1ZSk7CisJCX0gLy8gZm9yIHJvdworCisJCS8vIEFkZCB0aGUgc3BhdGlhbCBzcGVjaWZpY2F0aW9uIHRvIHRoZSBzcGF0aWFsIGF0dHJpYnV0ZSBvZiBlYWNoIG5vZGUncworCQkvLyBkdWJsaW4gY29yZSBpbnN0YW5jZSBhbmQgZm9yIGVhY2ggZWRnZS4gVGhlIHZhbHVlIGZvciB0aGUgbm9kZXMgd2lsbAorCQkvLyBiZSBhIHJlY3Rhbmd1bGFyIGFyZWEgZXhwcmVzc2VkIGFzIGEgc2V0IG9mIGxhdC9sb25nIHBvaW50cyB0aGF0CisJCS8vIGxheW91dCBhIHBvbHlnb24uIFRoZSBwb3NpdGlvbiBvZiB0aGUgcG9seWdvbiB3aWxsIGF0IHBvc2l0aW9uIHRoYXQKKwkJLy8gbWF0Y2hlcyB0aGUgcG9zaXRpb24gKHJvdywgY29sdW1uKSBvZiB0aGUgbm9kZSBpbiB0aGUgbGF0dGljZS4KKwkJYWRkU3BhdGlhbFNwZWNpZmljYXRpb25zKG5vZGVIb2xkZXIpOworCisJCWFzc2VydCByZXRWYWx1ZS5zYW5lKCk7CisKKwkJcmV0dXJuIHJldFZhbHVlOworCX0gLy8gY3JlYXRlTGF0dGljZUdyYXBoCisKKwkvKioKKwkgKiBBZGQgdGhlIHNwYXRpYWwgc3BlY2lmaWNhdGlvbiB0byB0aGUgc3BhdGlhbCBhdHRyaWJ1dGUgb2YgZWFjaCBub2RlJ3MKKwkgKiBkdWJsaW4gY29yZSBpbnN0YW5jZS4gVGhlIHZhbHVlIHdpbGwgYmUgYSByZXRhbmd1bGFyIGFyZWEgZXhwcmVzc2VkIGFzIGEKKwkgKiBzZXQgb2YgbGF0L2xvbmcgcG9pbnRzIHRoYXQgbGF5b3V0IGEgcG9seWdvbi4gVGhlIHBvc2l0aW9uIG9mIHRoZSBwb2x5Z29uCisJICogd2lsbCBhdCBwb3NpdGlvbiB0aGF0IG1hdGNoZXMgdGhlIHBvc2l0aW9uIChyb3csIGNvbHVtbikgb2YgdGhlIG5vZGUgaW4KKwkgKiB0aGUgbGF0dGljZS4gTm9kZSBhdCBwb3NpdGlvbiBbMF1bMF0gd2lsbCBiZSBpbiB0aGUgdXBwZXIgbGVmdCB3aGlsZSB0aGUKKwkgKiBub2RlIGF0IHBvc2l0b24gW251bXJvd3NdW251bWNvbHVtbnNdIHdpbGwgYmUgaW4gdGhlIGxvd2VyIHJpZ2h0IG9mIHRoZQorCSAqIHJlY3Rhbmd1bGFyIGFyZWEuCisJICogCisJICogQHBhcmFtIG5vZGVIb2xkZXIKKwkgKiAgICAgICAgICAgIHRoZSBhcnJheSB0aGF0IGhvbGRzIHRoZSBub2RlcyBvZiB0aGUgbGF0dGljCisJICovCisJcHJpdmF0ZSBzdGF0aWMgdm9pZCBhZGRTcGF0aWFsU3BlY2lmaWNhdGlvbnMoZmluYWwgTm9kZVtdW10gbm9kZUhvbGRlcikgeworCisJCS8vIEZpcnN0IHJ1biB0aHJvdWdoIGFsbCBvZiB0aGUgbm9kZXMgY3JlYXRpbmcgYSBwb2x5Z29uIGZvciB0aGVpcgorCQkvLyBib3JkZXIgYW5kIGFkZGluZyB0aGUgZGF0YSBhcyBhbiBpbmxpbmUgdmFsdWUgaW4gdGhlIHNwYXRpYWwKKwkJLy8gYXR0cmlidXRlIG9mIHRoZSBub2RlJ3MgZHVibGluIGNvcmUuCisJCWZvciAoaW50IHJvdyA9IDA7IHJvdyA8IG5vZGVIb2xkZXIubGVuZ3RoOyByb3crKykgeworCQkJZm9yIChpbnQgY29sdW1uID0gMDsgY29sdW1uIDwgbm9kZUhvbGRlcltyb3ddLmxlbmd0aDsgY29sdW1uKyspIHsKKwkJCQlmaW5hbCBOb2RlIG5vZGUgPSBub2RlSG9sZGVyW3Jvd11bY29sdW1uXTsKKwkJCQlmaW5hbCBMYXRMb25nIG5vZGVTZWdtZW50cyA9IGNyZWF0ZU5vZGVCb3JkZXJMYXRMb25nU2VnbWVudHMoCisJCQkJCQlyb3csIG5vZGVIb2xkZXIubGVuZ3RoLCBjb2x1bW4sIG5vZGVIb2xkZXJbcm93XS5sZW5ndGgpOworCQkJCWZpbmFsIFN0cmluZyBzcGF0aWFsVVJJU3RyaW5nID0gSW5saW5lTGF0TG9uZ0RhdGFQcm92aWRlcgorCQkJCQkJLmNyZWF0ZVNwYXRpYWxJbmxpbmVVUklTdHJpbmcobm9kZVNlZ21lbnRzKTsKKwkJCQlub2RlLmdldER1YmxpbkNvcmUoKS5zZXRTcGF0aWFsKHNwYXRpYWxVUklTdHJpbmcpOworCQkJfSAvLyBmb3IgZWFjaCBjb2x1bW4KKwkJfSAvLyBmb3IgZWFjaCByb3cKKworCQkvLyBOb3cgZG8gYWxsIHRoZSBlZGdlcywgd2UnbGwgc3RhcnQgaW4gdGhlIHVwcGVyIHJpZ2h0IGFuZCBkbyBlZGdlcworCQkvLyBiZXR3ZWVuIHN1Y2Nlc3NpdmUgcGFpcnMgb2Ygbm9kZXMuCisJCWZvciAoaW50IHJvdyA9IDA7IHJvdyA8IG5vZGVIb2xkZXIubGVuZ3RoIC0gMTsgcm93KyspIHsKKwkJCWZvciAoaW50IGNvbHVtbiA9IDA7IGNvbHVtbiA8IG5vZGVIb2xkZXJbcm93XS5sZW5ndGggLSAxOyBjb2x1bW4rKykgeworCisJCQkJLy8gRmlyc3QgZG8gdGhlIGVkZ2VzIHRvIHRoZSByaWdodAorCQkJCWZpbmFsIExhdExvbmcgZWRnZVNlZ21lbnRzUmlnaHQgPSBjcmVhdGVFZGdlTGF0TG9uZ1NlZ21lbnRzKAorCQkJCQkJcm93LCBjb2x1bW4sIHJvdywgY29sdW1uICsgMSwgbm9kZUhvbGRlci5sZW5ndGgsCisJCQkJCQlub2RlSG9sZGVyW3Jvd10ubGVuZ3RoKTsKKworCQkJCWZpbmFsIFN0cmluZyBlZGdlU3BhdGlhbEF0dHJpYnV0ZVJpZ2h0ID0gSW5saW5lTGF0TG9uZ0RhdGFQcm92aWRlcgorCQkJCQkJLmNyZWF0ZVNwYXRpYWxJbmxpbmVVUklTdHJpbmcoZWRnZVNlZ21lbnRzUmlnaHQpOworCisJCQkJZm9yIChFZGdlIGVkZ2UgOiBnZXRFZGdlc0JldHdlZW5Ob2Rlcyhub2RlSG9sZGVyW3Jvd11bY29sdW1uXSwKKwkJCQkJCW5vZGVIb2xkZXJbcm93XVtjb2x1bW4gKyAxXSkpIHsKKwkJCQkJZWRnZS5nZXREdWJsaW5Db3JlKCkuc2V0U3BhdGlhbChlZGdlU3BhdGlhbEF0dHJpYnV0ZVJpZ2h0KTsKKwkJCQl9CisKKwkJCQkvLyBUaGVuIGRvIHRoZSBlZGdlcyBiZWxvdworCQkJCWZpbmFsIExhdExvbmcgZWRnZVNlZ21lbnRzQmVsb3cgPSBjcmVhdGVFZGdlTGF0TG9uZ1NlZ21lbnRzKAorCQkJCQkJcm93LCBjb2x1bW4sIHJvdyArIDEsIGNvbHVtbiwgbm9kZUhvbGRlci5sZW5ndGgsCisJCQkJCQlub2RlSG9sZGVyW3Jvd10ubGVuZ3RoKTsKKworCQkJCWZpbmFsIFN0cmluZyBlZGdlU3BhdGlhbEF0dHJpYnV0ZUJlbG93ID0gSW5saW5lTGF0TG9uZ0RhdGFQcm92aWRlcgorCQkJCQkJLmNyZWF0ZVNwYXRpYWxJbmxpbmVVUklTdHJpbmcoZWRnZVNlZ21lbnRzQmVsb3cpOworCisJCQkJZm9yIChFZGdlIGVkZ2UgOiBnZXRFZGdlc0JldHdlZW5Ob2Rlcyhub2RlSG9sZGVyW3Jvd11bY29sdW1uXSwKKwkJCQkJCW5vZGVIb2xkZXJbcm93ICsgMV1bY29sdW1uXSkpIHsKKwkJCQkJZWRnZS5nZXREdWJsaW5Db3JlKCkuc2V0U3BhdGlhbChlZGdlU3BhdGlhbEF0dHJpYnV0ZUJlbG93KTsKKwkJCQl9CisJCQl9IC8vIGZvciBlYWNoIGNvbHVtbgorCQl9IC8vIGZvciBlYWNoIHJvdworCisJfSAvLyBhZGRTcGF0aWFsU3BlY2lmaWNhdGlvbnMKKworCS8qKgorCSAqIEBwYXJhbSBub2RlMQorCSAqIEBwYXJhbSBub2RlMgorCSAqIEByZXR1cm4gYWxsIHRoZSBlZGdlcyBiZXR3ZWVuIHRoZSB0d28gbm9kZXMKKwkgKi8KKwlwcml2YXRlIHN0YXRpYyBMaXN0PEVkZ2U+IGdldEVkZ2VzQmV0d2Vlbk5vZGVzKE5vZGUgbm9kZTEsIE5vZGUgbm9kZTIpIHsKKwkJZmluYWwgTGlzdDxFZGdlPiByZXRWYWx1ZSA9IG5ldyBBcnJheUxpc3Q8RWRnZT4oKTsKKwkJZm9yIChJdGVyYXRvciBlZGdlSXRlcmF0b3IgPSBub2RlMS5nZXRFZGdlcygpLml0ZXJhdG9yKCk7IGVkZ2VJdGVyYXRvcgorCQkJCS5oYXNOZXh0KCk7KSB7CisJCQlmaW5hbCBFZGdlIGVkZ2UgPSAoRWRnZSkgZWRnZUl0ZXJhdG9yLm5leHQoKTsKKwkJCWlmIChlZGdlLmdldE90aGVyTm9kZShub2RlMSkgPT0gbm9kZTIpIHsKKwkJCQlyZXRWYWx1ZS5hZGQoZWRnZSk7CisJCQl9CisJCX0KKwkJcmV0dXJuIHJldFZhbHVlOworCX0gLy8gZ2V0RWRnZXNCZXR3ZWVuTm9kZXMKKworCS8qKgorCSAqIEBwYXJhbSByb3cKKwkgKiAgICAgICAgICAgIHRoZSByb3cgaW4gdGhlIGxhdHRpY2Ugb2YgdGhlIG5vZGUKKwkgKiBAcGFyYW0gbnVtUm93cworCSAqICAgICAgICAgICAgdGhlIHRvdGFsIG51bWJlciBvZiByb3dzIGluIHRoZSBsYXR0aWNlCisJICogQHBhcmFtIGNvbHVtbgorCSAqICAgICAgICAgICAgdGhlIGNvbHVtbiBpbiB0aGUgbGF0dGljZSBvZiB0aGUgbm9kZQorCSAqIEBwYXJhbSBudW1Db2x1bW5zCisJICogICAgICAgICAgICB0aGUgdG90YWwgbnVtYmVyIG9mIGNvbHVtbnMgaW4gdGhlIGxhdHRpY2UKKwkgKiBAcmV0dXJuIGEgbGlzdCBvZiBsYXQvbG9uZyBwb2x5Z29ucy9saW5lcyBmb3IgdGhlIG5vZGUKKwkgKi8KKwlwcml2YXRlIHN0YXRpYyBMYXRMb25nIGNyZWF0ZU5vZGVCb3JkZXJMYXRMb25nU2VnbWVudHMoZmluYWwgaW50IHJvdywKKwkJCWZpbmFsIGludCBudW1Sb3dzLCBmaW5hbCBpbnQgY29sdW1uLCBmaW5hbCBpbnQgbnVtQ29sdW1ucykgeworCQlmaW5hbCBMYXRMb25nIHJldFZhbHVlID0gbmV3IExhdExvbmcoKTsKKwkJZmluYWwgZG91YmxlIG5vZGVMYXRIZWlnaHQgPSBMQVRJVFVERV9IRUlHSFQgLyBudW1Sb3dzOworCQlmaW5hbCBkb3VibGUgbm9kZUxvbmdXaWR0aCA9IExPTkdJVFVERV9XSURUSCAvIG51bUNvbHVtbnM7CisKKwkJZmluYWwgZG91YmxlIGxvd2VyTGVmdExhdCA9IE1JTl9MQVRJVFVERV9WQUxVRSArIChudW1Sb3dzIC0gcm93IC0gMSkKKwkJCQkqIG5vZGVMYXRIZWlnaHQ7CisJCWZpbmFsIGRvdWJsZSBsb3dlckxlZnRMb25nID0gTUlOX0xPTkdJVFVERV9WQUxVRSArIGNvbHVtbgorCQkJCSogbm9kZUxvbmdXaWR0aDsKKworCQlmaW5hbCBkb3VibGUgdXBwZXJSaWdodExhdCA9IGxvd2VyTGVmdExhdCArIG5vZGVMYXRIZWlnaHQ7CisJCWZpbmFsIGRvdWJsZSB1cHBlclJpZ2h0TG9uZyA9IGxvd2VyTGVmdExvbmcgKyBub2RlTG9uZ1dpZHRoOworCisJCWZpbmFsIFNlZ21lbnRCdWlsZGVyIHNiID0gbmV3IFNlZ21lbnRCdWlsZGVyKCk7CisKKwkJLy8gV2UganVzdCBtYWtlIGEgcmVjdGFuZ2xlLi4uCisJCXNiLmFkZChsb3dlckxlZnRMYXQsIGxvd2VyTGVmdExvbmcpOworCQlzYi5hZGQodXBwZXJSaWdodExhdCwgbG93ZXJMZWZ0TG9uZyk7CisJCXNiLmFkZCh1cHBlclJpZ2h0TGF0LCB1cHBlclJpZ2h0TG9uZyk7CisJCXNiLmFkZChsb3dlckxlZnRMYXQsIHVwcGVyUmlnaHRMb25nKTsKKwkJc2IuYWRkKGxvd2VyTGVmdExhdCwgbG93ZXJMZWZ0TG9uZyk7CisJCXJldFZhbHVlLmFkZChzYi50b1NlZ21lbnQoKSk7CisKKwkJcmV0dXJuIHJldFZhbHVlOworCX0gLy8gY3JlYXRlTm9kZUJvcmRlckxhdExvbmdTZWdtZW50cworCisJLyoqCisJICogQHBhcmFtIG5vZGUxUm93CisJICogQHBhcmFtIG5vZGUxQ29sdW1uCisJICogQHBhcmFtIG5vZGUyUm93CisJICogQHBhcmFtIG5vZGUyQ29sdW1uCisJICogQHBhcmFtIGxlbmd0aAorCSAqIEBwYXJhbSBsZW5ndGgyCisJICogQHJldHVybiBhIGxpc3Qgb2YgYSBsYXQvbG9uZyBsaW5lIGJldHdlZW4gdGhlIGNlbnRlcnMgb2YgdGhlIHR3byBub2Rlcy4KKwkgKi8KKwlwcml2YXRlIHN0YXRpYyBMYXRMb25nIGNyZWF0ZUVkZ2VMYXRMb25nU2VnbWVudHMoaW50IG5vZGUxUm93LAorCQkJaW50IG5vZGUxQ29sdW1uLCBpbnQgbm9kZTJSb3csIGludCBub2RlMkNvbHVtbiwgaW50IG51bVJvd3MsCisJCQlpbnQgbnVtQ29sdW1ucykgeworCQlmaW5hbCBMYXRMb25nIHJldFZhbHVlID0gbmV3IExhdExvbmcoKTsKKwkJZmluYWwgZG91YmxlIG5vZGVMYXRIZWlnaHQgPSBMQVRJVFVERV9IRUlHSFQgLyBudW1Db2x1bW5zOworCQlmaW5hbCBkb3VibGUgbm9kZUxvbmdXaWR0aCA9IExPTkdJVFVERV9XSURUSCAvIG51bVJvd3M7CisKKwkJZmluYWwgZG91YmxlIHJlbGF0aXZlTm9kZUNlbnRlckxhdCA9IG5vZGVMYXRIZWlnaHQgLyAyLjA7CisJCWZpbmFsIGRvdWJsZSByZWxhdGl2ZU5vZGVDZW50ZXJMb25nID0gbm9kZUxvbmdXaWR0aCAvIDIuMDsKKworCQlmaW5hbCBkb3VibGUgbm9kZTFMb3dlckxlZnRMYXQgPSBNSU5fTEFUSVRVREVfVkFMVUUKKwkJCQkrIChudW1Sb3dzIC0gbm9kZTFSb3cgLSAxKSAqIG5vZGVMYXRIZWlnaHQ7CisJCWZpbmFsIGRvdWJsZSBub2RlMUxvd2VyTGVmdExvbmcgPSBNSU5fTE9OR0lUVURFX1ZBTFVFICsgbm9kZTFDb2x1bW4KKwkJCQkqIG5vZGVMb25nV2lkdGg7CisKKwkJZmluYWwgZG91YmxlIG5vZGUyTG93ZXJMZWZ0TGF0ID0gTUlOX0xBVElUVURFX1ZBTFVFCisJCQkJKyAobnVtUm93cyAtIG5vZGUyUm93IC0gMSkgKiBub2RlTGF0SGVpZ2h0OworCQlmaW5hbCBkb3VibGUgbm9kZTJMb3dlckxlZnRMb25nID0gTUlOX0xPTkdJVFVERV9WQUxVRSArIG5vZGUyQ29sdW1uCisJCQkJKiBub2RlTG9uZ1dpZHRoOworCisJCWZpbmFsIFNlZ21lbnRCdWlsZGVyIHNiID0gbmV3IFNlZ21lbnRCdWlsZGVyKCk7CisJCS8vIFdlIGp1c3QgbWFrZSBhIHN0cmFpZ2h0IGxpbmUgYmV0d2VlbiB0aGUgY2VudGVycy4uLgorCQlzYi5hZGQobm9kZTFMb3dlckxlZnRMYXQgKyByZWxhdGl2ZU5vZGVDZW50ZXJMYXQsIG5vZGUxTG93ZXJMZWZ0TG9uZworCQkJCSsgcmVsYXRpdmVOb2RlQ2VudGVyTG9uZyk7CisJCXNiLmFkZChub2RlMkxvd2VyTGVmdExhdCArIHJlbGF0aXZlTm9kZUNlbnRlckxhdCwgbm9kZTJMb3dlckxlZnRMb25nCisJCQkJKyByZWxhdGl2ZU5vZGVDZW50ZXJMb25nKTsKKworCQlyZXRWYWx1ZS5hZGQoc2IudG9TZWdtZW50KCkpOworCisJCXJldHVybiByZXRWYWx1ZTsKKwl9IC8vIGNyZWF0ZUVkZ2VMYXRMb25nU2VnbWVudHMKKworCS8qKgorCSAqIEBwYXJhbSBub2RlMQorCSAqIEBwYXJhbSBub2RlMgorCSAqIEBwYXJhbSBncmFwaAorCSAqICAgICAgICAgICAgdGhlIGdyYXBoIHRvIGdldCB0aGUgZWRnZXMKKwkgKi8KKwlwcml2YXRlIHN0YXRpYyB2b2lkIGFkZFJlbGF0aW9uRWRnZXMoZmluYWwgTm9kZSBub2RlMSwgZmluYWwgTm9kZSBub2RlMiwKKwkJCWZpbmFsIEdyYXBoIGdyYXBoKSB7CisJCWZvciAoRWRnZSBlZGdlIDogY3JlYXRlUmVsYXRpb25FZGdlcyhub2RlMSwgbm9kZTIpKSB7CisJCQlncmFwaC5wdXRFZGdlKGVkZ2UpOworCQl9CisJfSAvLyBhZGRSZWxhdGlvbkVkZ2VzCisKKwkvKioKKwkgKiBAcGFyYW0gbm9kZTEKKwkgKiAgICAgICAgICAgIHRoZSBmaXJzdCBub2RlCisJICogQHBhcmFtIG5vZGUyCisJICogICAgICAgICAgICB0aGUgc2Vjb25kIG5vZGUKKwkgKiBAcmV0dXJuIGEgbGlzdCBvZiBlZGdlcyB0aGF0IHJlcHJlc2VudCB0aGUgcmVsYXRpb25zaGlwcyBiZXR3ZWVuIHR3bworCSAqICAgICAgICAgbm9kZXMKKwkgKi8KKwlwcml2YXRlIHN0YXRpYyBMaXN0PEVkZ2U+IGNyZWF0ZVJlbGF0aW9uRWRnZXMoZmluYWwgTm9kZSBub2RlMSwKKwkJCWZpbmFsIE5vZGUgbm9kZTIpIHsKKwkJZmluYWwgTGlzdDxFZGdlPiByZXRWYWx1ZSA9IG5ldyBBcnJheUxpc3Q8RWRnZT4oKTsKKworCQkvLyBBZGphY2VuY3kKKwkJcmV0VmFsdWUuYWRkKGNyZWF0ZUFkamFjZW5jeUVkZ2Uobm9kZTEsIG5vZGUyKSk7CisKKwkJLy8gQ29tbW9uIEJvcmRlcgorCQlyZXRWYWx1ZS5hZGQoQ29tbW9uQm9yZGVyUmVsYXRpb25zaGlwTGFiZWxJbXBsCisJCQkJLmNyZWF0ZUNvbW1vbkJvcmRlclJlbGF0aW9uc2hpcChub2RlMSwgbm9kZTIsCisJCQkJCQlDT01NT05fQk9SREVSX0xFTkdUSCkpOworCisJCWZpbmFsIFRlc3RFZGdlRGVjb3JhdG9yMSB0ZWQgPSBEZWNvcmF0b3JzRmFjdG9yeS5lSU5TVEFOQ0UKKwkJLmNyZWF0ZVRlc3RFZGdlRGVjb3JhdG9yMSgpOworCQkvLyBBaXIgdHJhbnNwb3J0CisJCXJldFZhbHVlLmFkZChUcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbEltcGwKKwkJCQkuY3JlYXRlVHJhbnNwb3J0UmVsYXRpb25zaGlwKG5vZGUxLCBub2RlMiwKKwkJCQkJCVRyYW5zcG9ydE1vZGUuQUlSX0xJVEVSQUwsIEFJUl9UUkFOU1BPUlRfSUQsCisJCQkJCQlURVNUX1BPUFVMQVRJT05fSURFTlRJRklFUiwKKwkJCQkJCVRFU1RfVFJBTlNQT1JUX1JBVEVfVElNRV9QRVJJT0QsCisJCQkJCQlBSVJfVFJBTlNQT1JUX01BWF9DQVBBQ0lUWSx0ZWQpKTsKKworCQkvLyBSb2FkIHRyYW5zcG9ydAorCQlyZXRWYWx1ZS5hZGQoVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxJbXBsCisJCQkJLmNyZWF0ZVRyYW5zcG9ydFJlbGF0aW9uc2hpcChub2RlMSwgbm9kZTIsCisJCQkJCQlUcmFuc3BvcnRNb2RlLlJPQURfTElURVJBTCwgUk9BRDFfVFJBTlNQT1JUX0lELAorCQkJCQkJVEVTVF9QT1BVTEFUSU9OX0lERU5USUZJRVIsIFNURU1UaW1lLlVuaXRzLkRBWS5nZXRNaWxsaXNlY29uZHMoKSwKKwkJCQkJCVJPQUQxX1RSQU5TUE9SVF9NQVhfQ0FQQUNJVFksdGVkKSk7CisKKwkJLy8gUm9hZCB0cmFuc3BvcnQgKG9uZS13YXkpCisJCXJldFZhbHVlLmFkZChUcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbEltcGwKKwkJCQkuY3JlYXRlVHJhbnNwb3J0UmVsYXRpb25zaGlwKG5vZGUxLCBub2RlMiwKKwkJCQkJCVRyYW5zcG9ydE1vZGUuUk9BRF9MSVRFUkFMLCBST0FEMl9UUkFOU1BPUlRfSUQsCisJCQkJCQlURVNUX1BPUFVMQVRJT05fSURFTlRJRklFUiwKKwkJCQkJCVRFU1RfVFJBTlNQT1JUX1JBVEVfVElNRV9QRVJJT0QsCisJCQkJCQlST0FEMl9UUkFOU1BPUlRfTUFYX0NBUEFDSVRZLCB0cnVlLCB0ZWQpKTsKKworCQlyZXR1cm4gcmV0VmFsdWU7CisJfSAvLyBjcmVhdGVSZWxhdGlvbkVkZ2VzCisKKwkvKioKKwkgKiBAcGFyYW0gYXJlYQorCSAqICAgICAgICAgICAgdGhlIGFyZWEgb2YgdGhlIG5vZGUKKwkgKiBAcGFyYW0gbm9kZQorCSAqICAgICAgICAgICAgdGhlIG5vZGUKKwkgKiBAcmV0dXJuIGFuIEFyZWFMYWJlbCBmb3IgdGhlIG5vZGUKKwkgKi8KKwlwcml2YXRlIHN0YXRpYyBBcmVhTGFiZWwgY3JlYXRlQXJlYUxhYmVsKGZpbmFsIGRvdWJsZSBhcmVhLCBmaW5hbCBOb2RlIG5vZGUpIHsKKwkJZmluYWwgQXJlYUxhYmVsIHJldFZhbHVlID0gTGFiZWxzRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlQXJlYUxhYmVsKCk7CisJCXJldFZhbHVlLmdldEN1cnJlbnRBcmVhVmFsdWUoKS5zZXRBcmVhKGFyZWEpOworCQlub2RlLmdldExhYmVscygpLmFkZChyZXRWYWx1ZSk7CisJCXJldHVybiByZXRWYWx1ZTsKKwl9IC8vIGNyZWF0ZUFyZWFMYWJlbAorCisJLyoqCisJICogQHBhcmFtIHBvcHVsYXRpb25Db3VudAorCSAqICAgICAgICAgICAgbnVtYmVyIG9mIChEZWZhdWx0OiBodW1hbikgcG9wdWxhdGlvbiBtZW1iZXJzIGF0IHRoZSBub2RlCisJICogQHBhcmFtIG5vZGUKKwkgKiAgICAgICAgICAgIHRoZSBub2RlCisJICogQHJldHVybiBhIHBvcHVsYXRpb24gbGFiZWwKKwkgKi8KKwlwcml2YXRlIHN0YXRpYyBQb3B1bGF0aW9uTGFiZWwgY3JlYXRlUG9wdWxhdGlvbkxhYmVsKAorCQkJZmluYWwgU3RyaW5nIHBvcHVsYXRpb25JZGVudGlmaWVyLCBmaW5hbCBkb3VibGUgcG9wdWxhdGlvbkNvdW50LAorCQkJZmluYWwgTm9kZSBub2RlKSB7CisJCWZpbmFsIFBvcHVsYXRpb25MYWJlbCByZXRWYWx1ZSA9IExhYmVsc0ZhY3RvcnkuZUlOU1RBTkNFCisJCQkJLmNyZWF0ZVBvcHVsYXRpb25MYWJlbCgpOworCQlyZXRWYWx1ZS5zZXRQb3B1bGF0aW9uSWRlbnRpZmllcihwb3B1bGF0aW9uSWRlbnRpZmllcik7CisJCXJldFZhbHVlLmdldEN1cnJlbnRQb3B1bGF0aW9uVmFsdWUoKS5zZXRDb3VudChwb3B1bGF0aW9uQ291bnQpOworCQlub2RlLmdldExhYmVscygpLmFkZChyZXRWYWx1ZSk7CisJCXJldHVybiByZXRWYWx1ZTsKKwl9IC8vIGNyZWF0ZVBvcHVsYXRpb25MYWJlbAorCisJLyoqCisJICogQ3JlYXRlIGEgc2luZ2xlIHBvcHVsYXRlZCBub2RlLiBUaGlzIGlzIHVzZWQgYnkgdGhlIEpVbml0IHRlc3RzIGZvcgorCSAqIGRpc2Vhc2UgbW9kZWxzIHdoaWNoIG5lZWQgdG8gaGF2ZSBhIGRpc2Vhc2UgbW9kZWwgbGFiZWwgdGhhdCBoYXMgYW4KKwkgKiBhc3NvY2lhdGVkIG5vZGUuCisJICogCisJICogCisJICogQHJldHVybiBhIG5vZGUKKwkgKi8KKwlwdWJsaWMgc3RhdGljIFJlZ2lvbiBjcmVhdGVQb3B1bGF0aW9uUmVnaW9uTm9kZSgpIHsKKwkJcmV0dXJuIGNyZWF0ZVBvcHVsYXRpb25SZWdpb25Ob2RlKFRFU1RfUE9QVUxBVElPTl9JREVOVElGSUVSKTsKKwl9IC8vIGNyZWF0ZVBvcHVsYXRpb25SZWdpb25Ob2RlCisKKwkvKioKKwkgKiBDcmVhdGUgYSBzaW5nbGUgcG9wdWxhdGVkIG5vZGUuIFRoaXMgaXMgdXNlZCBieSB0aGUgSlVuaXQgdGVzdHMgZm9yCisJICogZGlzZWFzZSBtb2RlbHMgd2hpY2ggbmVlZCB0byBoYXZlIGEgZGlzZWFzZSBtb2RlbCBsYWJlbCB0aGF0IGhhcyBhbgorCSAqIGFzc29jaWF0ZWQgbm9kZS4KKwkgKiAKKwkgKiBAcGFyYW0gcG9wdWxhdGlvbklkZW50aWZpZXIKKwkgKiAgICAgICAgICAgIHRoZSBpZGVudGlmaWVyIG9mIHRoZSBwb3B1bGF0aW9uCisJICogCisJICogCisJICogQHJldHVybiBhIG5vZGUKKwkgKi8KKwlwdWJsaWMgc3RhdGljIFJlZ2lvbiBjcmVhdGVQb3B1bGF0aW9uUmVnaW9uTm9kZSgKKwkJCWZpbmFsIFN0cmluZyBwb3B1bGF0aW9uSWRlbnRpZmllcikgeworCQlyZXR1cm4gY3JlYXRlUG9wdWxhdGlvblJlZ2lvbk5vZGUocG9wdWxhdGlvbklkZW50aWZpZXIsCisJCQkJVEVTVF9QT1BVTEFUSU9OX0NPVU5ULCBURVNUX0FSRUEpOworCX0gLy8gY3JlYXRlUG9wdWxhdGlvblJlZ2lvbk5vZGUKKworCS8qKgorCSAqIENyZWF0ZSBhIHNpbmdsZSBwb3B1bGF0ZWQgbm9kZS4gVGhpcyBpcyB1c2VkIGJ5IHRoZSBKVW5pdCB0ZXN0cyBmb3IKKwkgKiBkaXNlYXNlIG1vZGVscyB3aGljaCBuZWVkIHRvIGhhdmUgYSBkaXNlYXNlIG1vZGVsIGxhYmVsIHRoYXQgaGFzIGFuCisJICogYXNzb2NpYXRlZCBub2RlLgorCSAqIAorCSAqIEBwYXJhbSBwb3B1bGF0aW9uSWRlbnRpZmllcgorCSAqICAgICAgICAgICAgdGhlIGlkZW50aWZpZXIgb2YgdGhlIHBvcHVsYXRpb24KKwkgKiAKKwkgKiBAcGFyYW0gcG9wdWxhdGlvbkNvdW50CisJICogICAgICAgICAgICB0aGUgbnVtYmVyIG9mIHBvcHVsYXRpb24gbWVtYmVycworCSAqIEBwYXJhbSBhcmVhCisJICogICAgICAgICAgICB0aGUgYXJlYSBvZiB0aGUgbm9kZSAoa21eMikKKwkgKiBAcmV0dXJuIGEgbm9kZQorCSAqLworCXB1YmxpYyBzdGF0aWMgUmVnaW9uIGNyZWF0ZVBvcHVsYXRpb25SZWdpb25Ob2RlKAorCQkJZmluYWwgU3RyaW5nIHBvcHVsYXRpb25JZGVudGlmaWVyLCBmaW5hbCBkb3VibGUgcG9wdWxhdGlvbkNvdW50LAorCQkJZmluYWwgZG91YmxlIGFyZWEpIHsKKwkJcmV0dXJuIGNyZWF0ZVBvcHVsYXRpb25SZWdpb25Ob2RlKDAsIDAsIHBvcHVsYXRpb25JZGVudGlmaWVyLAorCQkJCXBvcHVsYXRpb25Db3VudCwgYXJlYSk7CisJfSAvLyBjcmVhdGVQb3B1bGF0aW9uUmVnaW9uTm9kZQorCisJLyoqCisJICogQ3JlYXRlIGEgc2luZ2xlIHBvcHVsYXRlZCBub2RlLiBUaGlzIGlzIHVzZWQgYnkgdGhlIEpVbml0IHRlc3RzIGZvcgorCSAqIGRpc2Vhc2UgbW9kZWxzIHdoaWNoIG5lZWQgdG8gaGF2ZSBhIGRpc2Vhc2UgbW9kZWwgbGFiZWwgdGhhdCBoYXMgYW4KKwkgKiBhc3NvY2lhdGVkIG5vZGUuCisJICogCisJICogQHBhcmFtIHJvdworCSAqICAgICAgICAgICAgdGhlIHJvdyBpbmRleCBvZiB0aGUgbm9kZQorCSAqIEBwYXJhbSBjb2x1bW4KKwkgKiAgICAgICAgICAgIHRoZSBjb2x1bW4gaW5kZXggb2YgdGhlIG5vZGUKKwkgKiBAcGFyYW0gcG9wdWxhdGlvbklkZW50aWZpZXIKKwkgKiAgICAgICAgICAgIHRoZSBpZGVudGlmaWVyIG9mIHRoZSBwb3B1bGF0aW9uCisJICogQHBhcmFtIHBvcHVsYXRpb25Db3VudAorCSAqICAgICAgICAgICAgdGhlIG51bWJlciBvZiBwb3B1bGF0aW9uIG1lbWJlcnMKKwkgKiBAcGFyYW0gYXJlYQorCSAqICAgICAgICAgICAgdGhlIGFyZWEgb2YgdGhlIG5vZGUgKGttXjIpCisJICogQHJldHVybiBhIG5vZGUKKwkgKi8KKwlwdWJsaWMgc3RhdGljIFJlZ2lvbiBjcmVhdGVQb3B1bGF0aW9uUmVnaW9uTm9kZShmaW5hbCBpbnQgcm93LAorCQkJZmluYWwgaW50IGNvbHVtbiwgZmluYWwgU3RyaW5nIHBvcHVsYXRpb25JZGVudGlmaWVyLAorCQkJZmluYWwgZG91YmxlIHBvcHVsYXRpb25Db3VudCwgZmluYWwgZG91YmxlIGFyZWEpIHsKKwkJZmluYWwgUmVnaW9uIHJldFZhbHVlID0gY3JlYXRlUmVnaW9uTm9kZShyb3csIGNvbHVtbik7CisKKwkJLy8gUG9wdWxhdGlvbgorCQljcmVhdGVQb3B1bGF0aW9uTGFiZWwocG9wdWxhdGlvbklkZW50aWZpZXIsIHBvcHVsYXRpb25Db3VudCwgcmV0VmFsdWUpOworCisJCS8vIEFyZWEKKwkJY3JlYXRlQXJlYUxhYmVsKGFyZWEsIHJldFZhbHVlKTsKKwkJcmV0dXJuIHJldFZhbHVlOworCX0gLy8gY3JlYXRlUG9wdWxhdGlvblJlZ2lvbk5vZGUKKworCS8qKgorCSAqIEBwYXJhbSByb3cKKwkgKiAgICAgICAgICAgIHRoZSByb3cgb2YgdGhlIG5vZGUgaW4gdGhlIGxhdHRpY2UKKwkgKiBAcGFyYW0gY29sdW1uCisJICogICAgICAgICAgICB0aGUgY29sdW1uIG9mIHRoZSBub2RlIGluIHRoZSBsYXR0aWNlCisJICogQHJldHVybiBhIG5vZGUKKwkgKi8KKwlwcml2YXRlIHN0YXRpYyBSZWdpb24gY3JlYXRlUmVnaW9uTm9kZShpbnQgcm93LCBpbnQgY29sdW1uKSB7CisJCWZpbmFsIFJlZ2lvbiByZXRWYWx1ZSA9IE5vZGVzRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlUmVnaW9uKCk7CisKKwkJZmluYWwgRHVibGluQ29yZSBkYyA9IHJldFZhbHVlLmdldER1YmxpbkNvcmUoKTsKKwkJZGMuc2V0VGl0bGUoY3JlYXRlTm9kZVRpdGxlKHJvdywgY29sdW1uKSk7CisJCXJldFZhbHVlLnNldFVSSShjcmVhdGVSZWdpb25Ob2RlVVJJKHJvdywgY29sdW1uKSk7CisJCXJldHVybiByZXRWYWx1ZTsKKwl9IC8vIGNyZWF0ZVJlZ2lvbk5vZGUKKworCS8qKgorCSAqIEBwYXJhbSByb3cKKwkgKiAgICAgICAgICAgIHRoZSByb3cgb2YgdGhlIHJlZ2lvbiBpbiB0aGUgbGF0dGljZQorCSAqIEBwYXJhbSBjb2x1bW4KKwkgKiAgICAgICAgICAgIHRoZSBjb2x1bW4gb2YgdGhlIHJlZ2lvbiBpbiB0aGUgbGF0dGljZQorCSAqIEByZXR1cm4gYSBVUkkgZm9yIHRoZSByZWdpb24gbm9kZQorCSAqLworCXB1YmxpYyBzdGF0aWMgVVJJIGNyZWF0ZVJlZ2lvbk5vZGVVUkkoaW50IHJvdywgaW50IGNvbHVtbikgeworCQlVUkkgcmV0VmFsdWUgPSBTVEVNVVJJLmNyZWF0ZVVSSShSZWdpb24uVVJJX1RZUEVfUkVHSU9OX05PREVfU0VHTUVOVAorCQkJCSsgIi8iICsgcm93ICsgIl8iICsgY29sdW1uKTsKKwkJcmV0dXJuIHJldFZhbHVlOworCX0gLy8gY3JlYXRlUmVnaW9uTm9kZVVSSQorCisJLyoqCisJICogQHBhcmFtIHJvdworCSAqICAgICAgICAgICAgdGhlIHJvdyBvZiB0aGUgbm9kZSBpbiB0aGUgbGF0dGljZQorCSAqIEBwYXJhbSBjb2x1bW4KKwkgKiAgICAgICAgICAgIHRoZSBjb2x1bW4gb2YgdGhlIG5vZGUgaW4gdGhlIGxhdHRpY2UKKwkgKiBAcmV0dXJuIGEgdGl0bGUgZm9yIGEgbm9kZQorCSAqLworCXB1YmxpYyBzdGF0aWMgU3RyaW5nIGNyZWF0ZU5vZGVUaXRsZShpbnQgcm93LCBpbnQgY29sdW1uKSB7CisJCWZpbmFsIFN0cmluZ0J1aWxkZXIgc2IgPSBuZXcgU3RyaW5nQnVpbGRlcigiTm9kZVsiKTsKKwkJc2IuYXBwZW5kKEludGVnZXIudG9TdHJpbmcocm93KSk7CisJCXNiLmFwcGVuZCgiLCAiKTsKKwkJc2IuYXBwZW5kKEludGVnZXIudG9TdHJpbmcoY29sdW1uKSk7CisJCXNiLmFwcGVuZCgiXSIpOworCQlyZXR1cm4gc2IudG9TdHJpbmcoKTsKKwl9IC8vIGNyZWF0ZU5vZGVUaXRsZQorCisJLyoqCisJICogQHBhcmFtIG51bVJvd3MKKwkgKiAgICAgICAgICAgIHRoZSBudW1iZXIgb2Ygcm93cyBvZiBub2RlcyBpbiB0aGUgbGF0dGljZQorCSAqIEBwYXJhbSBudW1Db2x1bW5zCisJICogICAgICAgICAgICB0aGUgbnVtYmVyIG9mIGNvbHVtbnMgb2Ygbm9kZXMgaW4gdGhlIGxhdHRpY2UKKwkgKiBAcGFyYW0gcG9wdWxhdGlvbkNvdW50CisJICogICAgICAgICAgICB0aGUgKERlZmF1bHQ6IGh1bWFuKSBwb3B1bGF0aW9uIGF0IGVhY2ggbm9kZQorCSAqIEBwYXJhbSBhcmVhCisJICogICAgICAgICAgICB0aGUgYXJlYSAoa21eMikgb2YgZWFjaCBub2RlCisJICogQHJldHVybiBhIHRpdGxlIGZvciBhIGdyYXBoCisJICovCisJcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIGNyZWF0ZUdyYXBoVGl0bGUoaW50IG51bVJvd3MsIGludCBudW1Db2x1bW5zLAorCQkJZG91YmxlIHBvcHVsYXRpb25Db3VudCwgZG91YmxlIGFyZWEpIHsKKwkJZmluYWwgU3RyaW5nQnVpbGRlciBzYiA9IG5ldyBTdHJpbmdCdWlsZGVyKCJHcmFwaCIpOworCQlzYi5hcHBlbmQoSW50ZWdlci50b1N0cmluZyhudW1Sb3dzKSk7CisJCXNiLmFwcGVuZCgieCIpOworCQlzYi5hcHBlbmQoSW50ZWdlci50b1N0cmluZyhudW1Db2x1bW5zKSk7CisJCXNiLmFwcGVuZCgiWyIpOworCQlzYi5hcHBlbmQoRG91YmxlLnRvU3RyaW5nKHBvcHVsYXRpb25Db3VudCkpOworCQlzYi5hcHBlbmQoIiwgIik7CisJCXNiLmFwcGVuZChhcmVhKTsKKwkJc2IuYXBwZW5kKCJdIik7CisJCXJldHVybiBzYi50b1N0cmluZygpOworCX0gLy8gY3JlYXRlR3JhcGhUaXRsZQorCisJLyoqCisJICogQHBhcmFtIG5vZGVEZWNvcmF0b3JzCisJICogQHBhcmFtIG51bVJvd3MKKwkgKiBAcGFyYW0gbnVtQ29sdW1ucworCSAqIEBwYXJhbSBwb3B1bGF0aW9uQ291bnQKKwkgKiBAcGFyYW0gYXJlYQorCSAqIEByZXR1cm4gdGhlIHRpdGxlIG9mIHRoZSBtb2RlbAorCSAqLworCXByaXZhdGUgc3RhdGljIFN0cmluZyBjcmVhdGVNb2RlbFRpdGxlKAorCQkJZmluYWwgQ29sbGVjdGlvbjxOb2RlRGVjb3JhdG9yPiBub2RlRGVjb3JhdG9ycywgaW50IG51bVJvd3MsCisJCQlpbnQgbnVtQ29sdW1ucywgZG91YmxlIHBvcHVsYXRpb25Db3VudCwgZG91YmxlIGFyZWEpIHsKKwkJZmluYWwgU3RyaW5nQnVpbGRlciBzYiA9IG5ldyBTdHJpbmdCdWlsZGVyKCJNb2RlbCIpOworCQlzYi5hcHBlbmQoSW50ZWdlci50b1N0cmluZyhudW1Sb3dzKSk7CisJCXNiLmFwcGVuZCgieCIpOworCQlzYi5hcHBlbmQoSW50ZWdlci50b1N0cmluZyhudW1Db2x1bW5zKSk7CisJCWZvciAoSXRlcmF0b3I8Tm9kZURlY29yYXRvcj4gbm9kZURlY29yYXRvckl0ZXIgPSBub2RlRGVjb3JhdG9ycworCQkJCS5pdGVyYXRvcigpOyBub2RlRGVjb3JhdG9ySXRlci5oYXNOZXh0KCk7KSB7CisJCQlmaW5hbCBOb2RlRGVjb3JhdG9yIG5vZGVEZWNvcmF0b3IgPSBub2RlRGVjb3JhdG9ySXRlci5uZXh0KCk7CisJCQlzYi5hcHBlbmQobm9kZURlY29yYXRvci5nZXREdWJsaW5Db3JlKCkuZ2V0VGl0bGUoKSk7CisJCX0gLy8gZm9yCisKKwkJc2IuYXBwZW5kKCJbIik7CisJCXNiLmFwcGVuZChEb3VibGUudG9TdHJpbmcocG9wdWxhdGlvbkNvdW50KSk7CisJCXNiLmFwcGVuZCgiLCAiKTsKKwkJc2IuYXBwZW5kKGFyZWEpOworCQlzYi5hcHBlbmQoIl0iKTsKKwkJcmV0dXJuIHNiLnRvU3RyaW5nKCk7CisJfSAvLyBjcmVhdGVNb2RlbFRpdGxlCisKKwkvLyAvKioKKwkvLyAqIEBwYXJhbSBjYW5vbmljYWxTY2VuYXJpb0RlY29yYXRvcnMKKwkvLyAqIEBwYXJhbSBub2RlRGVjb3JhdG9ycworCS8vICogQHBhcmFtIG51bVJvd3MKKwkvLyAqIEBwYXJhbSBudW1Db2x1bW5zCisJLy8gKiBAcGFyYW0gcG9wdWxhdGlvbkNvdW50CisJLy8gKiBAcGFyYW0gYXJlYQorCS8vICogQHJldHVybiB0aGUgdGl0bGUgb2YgYSBzY2VuYXJpbworCS8vICovCisJLy8gcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIGNyZWF0ZVNjZW5hcmlvVGl0bGUoQFN1cHByZXNzV2FybmluZ3MoInVudXNlZCIpCisJLy8gQ29sbGVjdGlvbjxEZWNvcmF0b3I+IGNhbm9uaWNhbFNjZW5hcmlvRGVjb3JhdG9ycywKKwkvLyBAU3VwcHJlc3NXYXJuaW5ncygidW51c2VkIikKKwkvLyBDb2xsZWN0aW9uPE5vZGVEZWNvcmF0b3I+IG5vZGVEZWNvcmF0b3JzLCBpbnQgbnVtUm93cywKKwkvLyBpbnQgbnVtQ29sdW1ucywgQFN1cHByZXNzV2FybmluZ3MoInVudXNlZCIpCisJLy8gZG91YmxlIHBvcHVsYXRpb25Db3VudCwgQFN1cHByZXNzV2FybmluZ3MoInVudXNlZCIpCisJLy8gZG91YmxlIGFyZWEpIHsKKwkvLyBmaW5hbCBTdHJpbmdCdWlsZGVyIHNiID0gbmV3IFN0cmluZ0J1aWxkZXIoIlNjZW5hcmlvIik7CisJLy8gc2IuYXBwZW5kKEludGVnZXIudG9TdHJpbmcobnVtUm93cykpOworCS8vIHNiLmFwcGVuZCgieCIpOworCS8vIHNiLmFwcGVuZChJbnRlZ2VyLnRvU3RyaW5nKG51bUNvbHVtbnMpKTsKKwkvLyByZXR1cm4gc2IudG9TdHJpbmcoKTsKKwkvLyB9IC8vIGNyZWF0ZVNjZW5hcmlvVGl0bGUKKworCS8qKgorCSAqIEBwYXJhbSBub2RlQQorCSAqIEBwYXJhbSBub2RlQgorCSAqIEByZXR1cm4gYW4gRWRnZSBiZXR3ZWVuIHRoZSB0d28gbm9kZXMgbGFiZWxlZCB3aXRoIGEgcmVsYXRpdmUgcGh5c2ljYWwKKwkgKiAgICAgICAgIHJlbGF0aW9uc2hpcCBsYWJlbCBvZiAiYWRqYWNlbnQiCisJICovCisJcHJpdmF0ZSBzdGF0aWMgRWRnZSBjcmVhdGVBZGphY2VuY3lFZGdlKGZpbmFsIE5vZGUgbm9kZUEsIGZpbmFsIE5vZGUgbm9kZUIpIHsKKwkJZmluYWwgRWRnZSByZXRWYWx1ZSA9IEVkZ2VJbXBsLmNyZWF0ZUVkZ2Uobm9kZUEsIG5vZGVCKTsKKworCQlmaW5hbCBSZWxhdGl2ZVBoeXNpY2FsUmVsYXRpb25zaGlwTGFiZWwgbGFiZWwgPSBMYWJlbHNGYWN0b3J5LmVJTlNUQU5DRQorCQkJCS5jcmVhdGVSZWxhdGl2ZVBoeXNpY2FsUmVsYXRpb25zaGlwTGFiZWwoKTsKKwkJbGFiZWwuc2V0VVJJT2ZJZGVudGlmaWFibGVUb0JlTGFiZWxlZChyZXRWYWx1ZS5nZXRVUkkoKSk7CisJCWxhYmVsLmdldEN1cnJlbnRSZWxhdGlvbnNoaXAoKS5zZXRBZGphY2VudCh0cnVlKTsKKwkJcmV0VmFsdWUuc2V0TGFiZWwobGFiZWwpOworCisJCXJldHVybiByZXRWYWx1ZTsKKwl9IC8vIGNyZWF0ZUFkamFjZW5jeUVkZ2UKKworCS8qKgorCSAqIEBwYXJhbSBncmFwaAorCSAqIEBwYXJhbSByb3cKKwkgKiBAcGFyYW0gY29sdW1uCisJICogQHJldHVybiB0aGUgaW5kZXhlZCByZWdpb24gZnJvbSB0aGUgZ3JhcGgKKwkgKi8KKwlwdWJsaWMgc3RhdGljIFJlZ2lvbiBnZXRSZWdpb24oZmluYWwgR3JhcGggZ3JhcGgsIGZpbmFsIGludCByb3csCisJCQlmaW5hbCBpbnQgY29sdW1uKSB7CisJCVJlZ2lvbiByZXRWYWx1ZSA9IG51bGw7CisKKwkJZm9yIChJdGVyYXRvciBub2RlSXRlciA9IGdyYXBoLmdldE5vZGVzKCkudmFsdWVzKCkuaXRlcmF0b3IoKTsgbm9kZUl0ZXIKKwkJCQkuaGFzTmV4dCgpOykgeworCQkJZmluYWwgUmVnaW9uIHJlZ2lvbiA9IChSZWdpb24pIG5vZGVJdGVyLm5leHQoKTsKKwkJCWZpbmFsIFN0cmluZyBuYW1lID0gcmVnaW9uLmdldER1YmxpbkNvcmUoKS5nZXRUaXRsZSgpOworCQkJLy8gSXMgdGhpcyB0aGUgcmVnaW9uIHdlJ3JlIGxvb2tpbmcgZm9yPworCQkJaWYgKG5hbWUuZXF1YWxzKERpc2Vhc2VNb2RlbFRlc3RVdGlsLmNyZWF0ZU5vZGVUaXRsZShyb3csIGNvbHVtbikpKSB7CisJCQkJLy8gWWVzCisJCQkJcmV0VmFsdWUgPSByZWdpb247CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwkJcmV0dXJuIHJldFZhbHVlOworCX0gLy8gZ2V0UmVnaW9uCisKKwkvKioKKwkgKiBFeGFtaW5lIHRoZSB0cmFuc3BvcnRhdGlvbiBlZGdlcyBjb21pbmcgaW50byBub2RlQSBmcm9tIG5vZGVCIGFuZCByZXR1cm4KKwkgKiB0aGUgb25lIHdpdGggdGhlIHNwZWNpZmllZCBpZGVudGlmaWVyLgorCSAqIAorCSAqIEBwYXJhbSBub2RlQQorCSAqIEBwYXJhbSBub2RlQgorCSAqIEBwYXJhbSB0cmFuc3BvcnRJZAorCSAqIEByZXR1cm4gdGhlIHRyYW5zcG9ydGF0aW9uIGVkZ2UgYmV0d2VlbiB0d28gbm9kZXMgd2l0aCBhIHNwZWNpZmljCisJICogICAgICAgICB0cmFuc3BvcnQgaWQKKwkgKi8KKwlwdWJsaWMgc3RhdGljIEVkZ2UgZ2V0VHJhbnNwb3J0RWRnZShmaW5hbCBOb2RlIG5vZGVBLCBmaW5hbCBOb2RlIG5vZGVCLAorCQkJZmluYWwgU3RyaW5nIHRyYW5zcG9ydElkKSB7CisJCUVkZ2UgcmV0VmFsdWUgPSBudWxsOworCisJCWZvciAoRWRnZSB0cmFuc3BvcnRFZGdlIDogVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxJbXBsCisJCQkJLmdldFRyYW5zcG9ydEVkZ2VzVG9Ob2RlKG5vZGVBLAorCQkJCQkJRGlzZWFzZU1vZGVsVGVzdFV0aWwuVEVTVF9QT1BVTEFUSU9OX0lERU5USUZJRVIpKSB7CisJCQkvLyBJcyB0aGlzIGVkZ2UgZnJvbSBub2RlQj8KKwkJCWlmICh0cmFuc3BvcnRFZGdlLmdldE90aGVyTm9kZShub2RlQSkgPT0gbm9kZUIpIHsKKwkJCQkvLyBZZXMKKwkJCQlmaW5hbCBUcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbCB0cmwgPSAoVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWwpIHRyYW5zcG9ydEVkZ2UKKwkJCQkJCS5nZXRMYWJlbCgpOworCQkJCS8vIERvZXMgdGhpcyBlZGdlIGhhdmUgdGhlIHRyYW5zcG9ydCBpZCB3ZSdyZSBsb29raW5nIGZvcj8KKwkJCQlpZiAodHJsLmdldFRyYW5zcG9ydElkZW50aWZpZXIoKS5lcXVhbHNJZ25vcmVDYXNlKHRyYW5zcG9ydElkKSkgeworCQkJCQkvLyBZZXMKKwkJCQkJcmV0VmFsdWUgPSB0cmFuc3BvcnRFZGdlOworCQkJCQlicmVhazsKKwkJCQl9CisJCQl9CisJCX0gLy8gZm9yIGVhY2ggdHJhbnNwb3J0IGVkZ2UKKwkJcmV0dXJuIHJldFZhbHVlOworCX0gLy8gZ2V0VHJhbnNwb3J0RWRnZQorCit9IC8vIERpc2Vhc2VNb2RlbFRlc3RVdGlsCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9zdGFuZGFyZC90ZXN0cy9EaXNlYXNlbW9kZWxzQWxsVGVzdHMuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3N0YW5kYXJkL3Rlc3RzL0Rpc2Vhc2Vtb2RlbHNBbGxUZXN0cy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZiZmNiOGEKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9zdGFuZGFyZC90ZXN0cy9EaXNlYXNlbW9kZWxzQWxsVGVzdHMuamF2YQpAQCAtMCwwICsxLDY0IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC50ZXN0czsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdDsKK2ltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdFN1aXRlOworaW1wb3J0IGp1bml0LnRleHR1aS5UZXN0UnVubmVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5wcmVkaWNhdGVzLmRpc2Vhc2VwcmVkaWNhdGVzLnRlc3RzLkRpc2Vhc2VwcmVkaWNhdGVzVGVzdHM7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gQSB0ZXN0IHN1aXRlIGZvciB0aGUgJzxlbT48Yj5EaXNlYXNlbW9kZWxzPC9iPjwvZW0+JworICogbW9kZWwuIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgRGlzZWFzZW1vZGVsc0FsbFRlc3RzIGV4dGVuZHMgVGVzdFN1aXRlIHsKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBwYXJhbSBhcmdzCisJICogCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKKwkJVGVzdFJ1bm5lci5ydW4oc3VpdGUoKSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAcmV0dXJuCisJICogCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBzdGF0aWMgVGVzdCBzdWl0ZSgpIHsKKwkJVGVzdFN1aXRlIHN1aXRlID0gbmV3IERpc2Vhc2Vtb2RlbHNBbGxUZXN0cygiRGlzZWFzZW1vZGVscyBUZXN0cyIpOyAvLyROT04tTkxTLTEkCisJCXN1aXRlLmFkZFRlc3QoU3RhbmRhcmRUZXN0cy5zdWl0ZSgpKTsKKwkJc3VpdGUuYWRkVGVzdChEaXNlYXNlcHJlZGljYXRlc1Rlc3RzLnN1aXRlKCkpOworCQlyZXR1cm4gc3VpdGU7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAcGFyYW0gbmFtZQorCSAqIAorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRGlzZWFzZW1vZGVsc0FsbFRlc3RzKFN0cmluZyBuYW1lKSB7CisJCXN1cGVyKG5hbWUpOworCX0KKworfSAvLyBEaXNlYXNlbW9kZWxzQWxsVGVzdHMKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3N0YW5kYXJkL3Rlc3RzL0luZmVjdG9ySW5vY3VsYXRvckNvbGxlY3Rpb25UZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9zdGFuZGFyZC90ZXN0cy9JbmZlY3Rvcklub2N1bGF0b3JDb2xsZWN0aW9uVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY5ZTk1YzYKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9zdGFuZGFyZC90ZXN0cy9JbmZlY3Rvcklub2N1bGF0b3JDb2xsZWN0aW9uVGVzdC5qYXZhCkBAIC0wLDAgKzEsMTA1IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC50ZXN0czsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogCisgKiBDb3B5cmlnaHQgKGMpIDIwMTEgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuIAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyAKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0IAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwgCisgKiAKKyAqIENvbnRyaWJ1dG9yczogCisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7CitpbXBvcnQganVuaXQudGV4dHVpLlRlc3RSdW5uZXI7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuSW5mZWN0b3JJbm9jdWxhdG9yQ29sbGVjdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmRGYWN0b3J5OworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiBBIHRlc3QgY2FzZSBmb3IgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPkluZmVjdG9yIElub2N1bGF0b3IgQ29sbGVjdGlvbjwvYj48L2VtPicuCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIEluZmVjdG9ySW5vY3VsYXRvckNvbGxlY3Rpb25UZXN0IGV4dGVuZHMgVGVzdENhc2UgeworCisJLyoqCisJICogVGhlIGZpeHR1cmUgZm9yIHRoaXMgSW5mZWN0b3IgSW5vY3VsYXRvciBDb2xsZWN0aW9uIHRlc3QgY2FzZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgSW5mZWN0b3JJbm9jdWxhdG9yQ29sbGVjdGlvbiBmaXh0dXJlID0gbnVsbDsKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKKwkJVGVzdFJ1bm5lci5ydW4oSW5mZWN0b3JJbm9jdWxhdG9yQ29sbGVjdGlvblRlc3QuY2xhc3MpOworCX0KKworCS8qKgorCSAqIENvbnN0cnVjdHMgYSBuZXcgSW5mZWN0b3IgSW5vY3VsYXRvciBDb2xsZWN0aW9uIHRlc3QgY2FzZSB3aXRoIHRoZSBnaXZlbiBuYW1lLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBJbmZlY3Rvcklub2N1bGF0b3JDb2xsZWN0aW9uVGVzdChTdHJpbmcgbmFtZSkgeworCQlzdXBlcihuYW1lKTsKKwl9CisKKwkvKioKKwkgKiBTZXRzIHRoZSBmaXh0dXJlIGZvciB0aGlzIEluZmVjdG9yIElub2N1bGF0b3IgQ29sbGVjdGlvbiB0ZXN0IGNhc2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgc2V0Rml4dHVyZShJbmZlY3Rvcklub2N1bGF0b3JDb2xsZWN0aW9uIGZpeHR1cmUpIHsKKwkJdGhpcy5maXh0dXJlID0gZml4dHVyZTsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBmaXh0dXJlIGZvciB0aGlzIEluZmVjdG9yIElub2N1bGF0b3IgQ29sbGVjdGlvbiB0ZXN0IGNhc2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIEluZmVjdG9ySW5vY3VsYXRvckNvbGxlY3Rpb24gZ2V0Rml4dHVyZSgpIHsKKwkJcmV0dXJuIGZpeHR1cmU7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZSNzZXRVcCgpCisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIHNldFVwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCXNldEZpeHR1cmUoU3RhbmRhcmRGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVJbmZlY3Rvcklub2N1bGF0b3JDb2xsZWN0aW9uKCkpOworCX0KKwkKKwkvKioKKwkgKiBUT0RPOiBJbXBsZW1lbnQgdGhpcyBtZXRob2QuIFRoaXMgc2hvdWxkIGJlIGRvbmUgYXMgcGFydCBvZiBhIGxhcmdlciBTY2VuYXJpbyBpbnRlZ3JhdGlvbiB0ZXN0LgorCSAqIEluZmVjdG9ySW5ub2N1bGF0b3JDb2xsZWN0aW9ucyBhcmUgcmVhZCBmcm9tIGEgdXNlciBkZWZpbmVkIEZpbGUKKwkgKi8KKwlwdWJsaWMgdm9pZCB0ZXN0Q3JlYXRlSW5mZWN0b3JJbm5vY3VsYXRvckNvbGxlY3Rpb25Gcm9tRmlsZSgpIHsKKwkJYXNzZXJ0VHJ1ZSh0cnVlKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlI3RlYXJEb3duKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgdGVhckRvd24oKSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJc2V0Rml4dHVyZShudWxsKTsKKwl9CisKK30gLy9JbmZlY3Rvcklub2N1bGF0b3JDb2xsZWN0aW9uVGVzdApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvc3RhbmRhcmQvdGVzdHMvSW5mZWN0b3JUZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9zdGFuZGFyZC90ZXN0cy9JbmZlY3RvclRlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNTU3YjFjCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvc3RhbmRhcmQvdGVzdHMvSW5mZWN0b3JUZXN0LmphdmEKQEAgLTAsMCArMSwxMTMgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLnRlc3RzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5VUkk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLlNURU1VUkk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkdyYXBoOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5HcmFwaEZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLk5vZGU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5ub2Rlcy5pbXBsLlJlZ2lvbkltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLkluZmVjdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC5UZXN0VXRpbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwuZGVjb3JhdG9ycy5EZWNvcmF0b3JzRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwuZGVjb3JhdG9ycy5UZXN0Tm9kZURlY29yYXRvcjE7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gQSB0ZXN0IGNhc2UgZm9yIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5JbmZlY3RvcjwvYj48L2VtPicuCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGFic3RyYWN0IGNsYXNzIEluZmVjdG9yVGVzdCBleHRlbmRzIFRlc3RDYXNlIHsKKwkKKwkvKioKKwkgKiBVUkkgZm9yIHRlc3RpbmcKKwkgKi8KKwlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIFVSSSBHUkFQSF9UQVJHRVRfVVJJID0gU1RFTVVSSS5jcmVhdGVVUkkoImdyYXBoL1VTIik7CisJCisJLyoqCisJICogVVJJIGZvciB0ZXN0aW5nCisJICovCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBTdHJpbmcgSVNPX1RBUkdFVCA9ICJVUyI7CisJCisJLyoqCisJICogVVJJIGZvciB0ZXN0aW5nCisJICovCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBVUkkgTk9ERV9UQVJHRVRfVVJJID0gUmVnaW9uSW1wbC5jcmVhdGVSZWdpb25Ob2RlVVJJKElTT19UQVJHRVQpOworCQorCS8qKgorCSAqIFRoZSBmaXh0dXJlIGZvciB0aGlzIEluZmVjdG9yIHRlc3QgY2FzZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tCisJICogZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgSW5mZWN0b3IgZml4dHVyZSA9IG51bGw7CisKKwkvKioKKwkgKiBDb25zdHJ1Y3RzIGEgbmV3IEluZmVjdG9yIHRlc3QgY2FzZSB3aXRoIHRoZSBnaXZlbiBuYW1lLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogCisJICogQHBhcmFtIG5hbWUKKwkgKiAKKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEluZmVjdG9yVGVzdChTdHJpbmcgbmFtZSkgeworCQlzdXBlcihuYW1lKTsKKwl9CisKKwkvKioKKwkgKiBTZXRzIHRoZSBmaXh0dXJlIGZvciB0aGlzIEluZmVjdG9yIHRlc3QgY2FzZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBzZXRGaXh0dXJlKEluZmVjdG9yIGZpeHR1cmUpIHsKKwkJdGhpcy5maXh0dXJlID0gZml4dHVyZTsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBmaXh0dXJlIGZvciB0aGlzIEluZmVjdG9yIHRlc3QgY2FzZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgSW5mZWN0b3IgZ2V0Rml4dHVyZSgpIHsKKwkJcmV0dXJuIGZpeHR1cmU7CisJfQorCisJLyoqCisJICogdGVzdCB0aGUgc2FuaXR5IG9mIHRoZSBmaXh0dXJlCisJICovCisJcHVibGljIHZvaWQgdGVzdEZpeHR1cmVTYW5pdHkoKSB7CisJCWZpbmFsIEluZmVjdG9yIGZpeHR1cmUgPSBnZXRGaXh0dXJlKCk7CisJCWFzc2VydFRydWUoZml4dHVyZS5zYW5lKCkpOworCX0gLy8gdGVzdEZpeHR1cmVTYW5pdHkKKwkKKwkvKioKKwkgKiBjcmVhdGUgYSBncmFwaCBpbmNsdWRpbmcgYSBub2RlIHRvIHRlc3Qgd2l0aCBpbmZlY3RvcnMgYW5kIGlubm9jdWxhdG9ycworCSAqIEByZXR1cm4KKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIEdyYXBoIGdldFRlc3RHcmFwaCgpIHsKKwkJLy8gY3JlYXRlIGF0IHRlc3QgZ3JhcGggd2l0aCBhIG5vZGUgYW5kIG5vZGVVUkk9PSB0aGUgdGFyZ2V0IFVSSSBmb3IgdGhlIGlubm9jdWxhdG9yCisJCWZpbmFsIEdyYXBoIGcgPSBHcmFwaEZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZUdyYXBoKCk7CisJCWcuc2V0VVJJKEdSQVBIX1RBUkdFVF9VUkkpOworCQlmaW5hbCBUZXN0Tm9kZURlY29yYXRvcjEgbm9kZURlY29yYXRvciA9IERlY29yYXRvcnNGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVUZXN0Tm9kZURlY29yYXRvcjEoKTsKKwkJZmluYWwgTm9kZSBub2RlQSA9IFRlc3RVdGlsLmNyZWF0ZUR5bmFtaWNhbHlMYWJlbGVkTm9kZShub2RlRGVjb3JhdG9yKTsKKwkJbm9kZUEuc2V0VVJJKE5PREVfVEFSR0VUX1VSSSk7CisJCWcucHV0Tm9kZShub2RlQSk7CisJCXJldHVybiBnOwkKKwl9Ly8gZ2V0IGdyYXBoIGZvciB0ZXN0aW5nCisJCit9IC8vIEluZmVjdG9yVGVzdApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvc3RhbmRhcmQvdGVzdHMvSW5pdGlhbGl6ZXJUZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9zdGFuZGFyZC90ZXN0cy9Jbml0aWFsaXplclRlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMmE5YmQ0Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvc3RhbmRhcmQvdGVzdHMvSW5pdGlhbGl6ZXJUZXN0LmphdmEKQEAgLTAsMCArMSw5MyBAQAorLyoqDQorICogPGNvcHlyaWdodD4NCisgKiA8L2NvcHlyaWdodD4NCisgKg0KKyAqICRJZCQNCisgKi8NCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC50ZXN0czsNCisNCitpbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOw0KKw0KK2ltcG9ydCBqdW5pdC50ZXh0dWkuVGVzdFJ1bm5lcjsNCisNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLkluaXRpYWxpemVyOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmRGYWN0b3J5Ow0KKw0KKy8qKg0KKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorICogQSB0ZXN0IGNhc2UgZm9yIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5Jbml0aWFsaXplcjwvYj48L2VtPicuDQorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorICogQGdlbmVyYXRlZA0KKyAqLw0KK3B1YmxpYyBjbGFzcyBJbml0aWFsaXplclRlc3QgZXh0ZW5kcyBUZXN0Q2FzZSB7DQorDQorCS8qKg0KKwkgKiBUaGUgZml4dHVyZSBmb3IgdGhpcyBJbml0aWFsaXplciB0ZXN0IGNhc2UuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgSW5pdGlhbGl6ZXIgZml4dHVyZSA9IG51bGw7DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgew0KKwkJVGVzdFJ1bm5lci5ydW4oSW5pdGlhbGl6ZXJUZXN0LmNsYXNzKTsNCisJfQ0KKw0KKwkvKioNCisJICogQ29uc3RydWN0cyBhIG5ldyBJbml0aWFsaXplciB0ZXN0IGNhc2Ugd2l0aCB0aGUgZ2l2ZW4gbmFtZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBJbml0aWFsaXplclRlc3QoU3RyaW5nIG5hbWUpIHsNCisJCXN1cGVyKG5hbWUpOw0KKwl9DQorDQorCS8qKg0KKwkgKiBTZXRzIHRoZSBmaXh0dXJlIGZvciB0aGlzIEluaXRpYWxpemVyIHRlc3QgY2FzZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCB2b2lkIHNldEZpeHR1cmUoSW5pdGlhbGl6ZXIgZml4dHVyZSkgew0KKwkJdGhpcy5maXh0dXJlID0gZml4dHVyZTsNCisJfQ0KKw0KKwkvKioNCisJICogUmV0dXJucyB0aGUgZml4dHVyZSBmb3IgdGhpcyBJbml0aWFsaXplciB0ZXN0IGNhc2UuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgSW5pdGlhbGl6ZXIgZ2V0Rml4dHVyZSgpIHsNCisJCXJldHVybiBmaXh0dXJlOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHNlZSBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2Ujc2V0VXAoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlAT3ZlcnJpZGUNCisJcHJvdGVjdGVkIHZvaWQgc2V0VXAoKSB0aHJvd3MgRXhjZXB0aW9uIHsNCisJCXNldEZpeHR1cmUoU3RhbmRhcmRGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVJbml0aWFsaXplcigpKTsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBzZWUganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlI3RlYXJEb3duKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJQE92ZXJyaWRlDQorCXByb3RlY3RlZCB2b2lkIHRlYXJEb3duKCkgdGhyb3dzIEV4Y2VwdGlvbiB7DQorCQlzZXRGaXh0dXJlKG51bGwpOw0KKwl9DQorDQorfSAvL0luaXRpYWxpemVyVGVzdA0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3N0YW5kYXJkL3Rlc3RzL0ludGVncmF0aW9uRGVjb3JhdG9yVGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvc3RhbmRhcmQvdGVzdHMvSW50ZWdyYXRpb25EZWNvcmF0b3JUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGExNzg4ZQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3N0YW5kYXJkL3Rlc3RzL0ludGVncmF0aW9uRGVjb3JhdG9yVGVzdC5qYXZhCkBAIC0wLDAgKzEsODMgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLnRlc3RzOw0KKw0KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorICogQ29weXJpZ2h0IChjKSAyMDA5IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLg0KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMNCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjANCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdA0KKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sDQorICoNCisgKiBDb250cmlidXRvcnM6DQorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbg0KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KKw0KK2ltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7DQorDQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5JbnRlZ3JhdGlvbkRlY29yYXRvcjsNCisNCisvKioNCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKyAqIEEgdGVzdCBjYXNlIGZvciB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+SW50ZWdyYXRpb24gRGVjb3JhdG9yPC9iPjwvZW0+Jy4NCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisgKiA8cD4NCisgKiBUaGUgZm9sbG93aW5nIG9wZXJhdGlvbnMgYXJlIHRlc3RlZDoNCisgKiA8dWw+DQorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5JbnRlZ3JhdGlvbkRlY29yYXRvciNpc0RldGVybWluaXN0aWMoKSA8ZW0+SXMgRGV0ZXJtaW5pc3RpYzwvZW0+fTwvbGk+DQorICogPC91bD4NCisgKiA8L3A+DQorICogQGdlbmVyYXRlZA0KKyAqLw0KK3B1YmxpYyBhYnN0cmFjdCBjbGFzcyBJbnRlZ3JhdGlvbkRlY29yYXRvclRlc3QgZXh0ZW5kcyBUZXN0Q2FzZSB7DQorDQorCS8qKg0KKwkgKiBUaGUgZml4dHVyZSBmb3IgdGhpcyBJbnRlZ3JhdGlvbiBEZWNvcmF0b3IgdGVzdCBjYXNlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIEludGVncmF0aW9uRGVjb3JhdG9yIGZpeHR1cmUgPSBudWxsOw0KKw0KKwkvKioNCisJICogQ29uc3RydWN0cyBhIG5ldyBJbnRlZ3JhdGlvbiBEZWNvcmF0b3IgdGVzdCBjYXNlIHdpdGggdGhlIGdpdmVuIG5hbWUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgSW50ZWdyYXRpb25EZWNvcmF0b3JUZXN0KFN0cmluZyBuYW1lKSB7DQorCQlzdXBlcihuYW1lKTsNCisJfQ0KKw0KKwkvKioNCisJICogU2V0cyB0aGUgZml4dHVyZSBmb3IgdGhpcyBJbnRlZ3JhdGlvbiBEZWNvcmF0b3IgdGVzdCBjYXNlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIHZvaWQgc2V0Rml4dHVyZShJbnRlZ3JhdGlvbkRlY29yYXRvciBmaXh0dXJlKSB7DQorCQl0aGlzLmZpeHR1cmUgPSBmaXh0dXJlOw0KKwl9DQorDQorCS8qKg0KKwkgKiBSZXR1cm5zIHRoZSBmaXh0dXJlIGZvciB0aGlzIEludGVncmF0aW9uIERlY29yYXRvciB0ZXN0IGNhc2UuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgSW50ZWdyYXRpb25EZWNvcmF0b3IgZ2V0Rml4dHVyZSgpIHsNCisJCXJldHVybiBmaXh0dXJlOw0KKwl9DQorDQorCS8qKg0KKwkgKiBUZXN0cyB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuSW50ZWdyYXRpb25EZWNvcmF0b3IjaXNEZXRlcm1pbmlzdGljKCkgPGVtPklzIERldGVybWluaXN0aWM8L2VtPn0nIG9wZXJhdGlvbi4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLkludGVncmF0aW9uRGVjb3JhdG9yI2lzRGV0ZXJtaW5pc3RpYygpDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyB2b2lkIHRlc3RJc0RldGVybWluaXN0aWMoKSB7DQorCQkvLyBUT0RPOiBpbXBsZW1lbnQgdGhpcyBvcGVyYXRpb24gdGVzdCBtZXRob2QNCisJCS8vIEVuc3VyZSB0aGF0IHlvdSByZW1vdmUgQGdlbmVyYXRlZCBvciBtYXJrIGl0IEBnZW5lcmF0ZWQgTk9UDQorCQlmYWlsKCk7DQorCX0NCisNCit9IC8vSW50ZWdyYXRpb25EZWNvcmF0b3JUZXN0DQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvc3RhbmRhcmQvdGVzdHMvSW50ZWdyYXRpb25MYWJlbFRlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3N0YW5kYXJkL3Rlc3RzL0ludGVncmF0aW9uTGFiZWxUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjc2MTJlMQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3N0YW5kYXJkL3Rlc3RzL0ludGVncmF0aW9uTGFiZWxUZXN0LmphdmEKQEAgLTAsMCArMSw2NCBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQudGVzdHM7DQorDQorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisgKiBDb3B5cmlnaHQgKGMpIDIwMDkgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuDQorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscw0KKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMA0KKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0DQorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwNCisgKg0KKyAqIENvbnRyaWJ1dG9yczoNCisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uDQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQorDQoraW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsNCisNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkludGVncmF0aW9uTGFiZWw7DQorDQorLyoqDQorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisgKiBBIHRlc3QgY2FzZSBmb3IgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPkludGVncmF0aW9uIExhYmVsPC9iPjwvZW0+Jy4NCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisgKiBAZ2VuZXJhdGVkDQorICovDQorcHVibGljIGFic3RyYWN0IGNsYXNzIEludGVncmF0aW9uTGFiZWxUZXN0IGV4dGVuZHMgVGVzdENhc2Ugew0KKw0KKwkvKioNCisJICogVGhlIGZpeHR1cmUgZm9yIHRoaXMgSW50ZWdyYXRpb24gTGFiZWwgdGVzdCBjYXNlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIEludGVncmF0aW9uTGFiZWwgZml4dHVyZSA9IG51bGw7DQorDQorCS8qKg0KKwkgKiBDb25zdHJ1Y3RzIGEgbmV3IEludGVncmF0aW9uIExhYmVsIHRlc3QgY2FzZSB3aXRoIHRoZSBnaXZlbiBuYW1lLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIEludGVncmF0aW9uTGFiZWxUZXN0KFN0cmluZyBuYW1lKSB7DQorCQlzdXBlcihuYW1lKTsNCisJfQ0KKw0KKwkvKioNCisJICogU2V0cyB0aGUgZml4dHVyZSBmb3IgdGhpcyBJbnRlZ3JhdGlvbiBMYWJlbCB0ZXN0IGNhc2UuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgdm9pZCBzZXRGaXh0dXJlKEludGVncmF0aW9uTGFiZWwgZml4dHVyZSkgew0KKwkJdGhpcy5maXh0dXJlID0gZml4dHVyZTsNCisJfQ0KKw0KKwkvKioNCisJICogUmV0dXJucyB0aGUgZml4dHVyZSBmb3IgdGhpcyBJbnRlZ3JhdGlvbiBMYWJlbCB0ZXN0IGNhc2UuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgSW50ZWdyYXRpb25MYWJlbCBnZXRGaXh0dXJlKCkgew0KKwkJcmV0dXJuIGZpeHR1cmU7DQorCX0NCisNCit9IC8vSW50ZWdyYXRpb25MYWJlbFRlc3QNCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9zdGFuZGFyZC90ZXN0cy9JbnRlZ3JhdGlvbkxhYmVsVmFsdWVUZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9zdGFuZGFyZC90ZXN0cy9JbnRlZ3JhdGlvbkxhYmVsVmFsdWVUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzZlZTAxMAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3N0YW5kYXJkL3Rlc3RzL0ludGVncmF0aW9uTGFiZWxWYWx1ZVRlc3QuamF2YQpAQCAtMCwwICsxLDY0IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC50ZXN0czsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAxMCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguSW50ZWdyYXRpb25MYWJlbFZhbHVlOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiBBIHRlc3QgY2FzZSBmb3IgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPkludGVncmF0aW9uIExhYmVsIFZhbHVlPC9iPjwvZW0+Jy4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgYWJzdHJhY3QgY2xhc3MgSW50ZWdyYXRpb25MYWJlbFZhbHVlVGVzdCBleHRlbmRzIFRlc3RDYXNlIHsKKworCS8qKgorCSAqIFRoZSBmaXh0dXJlIGZvciB0aGlzIEludGVncmF0aW9uIExhYmVsIFZhbHVlIHRlc3QgY2FzZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgSW50ZWdyYXRpb25MYWJlbFZhbHVlIGZpeHR1cmUgPSBudWxsOworCisJLyoqCisJICogQ29uc3RydWN0cyBhIG5ldyBJbnRlZ3JhdGlvbiBMYWJlbCBWYWx1ZSB0ZXN0IGNhc2Ugd2l0aCB0aGUgZ2l2ZW4gbmFtZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgSW50ZWdyYXRpb25MYWJlbFZhbHVlVGVzdChTdHJpbmcgbmFtZSkgeworCQlzdXBlcihuYW1lKTsKKwl9CisKKwkvKioKKwkgKiBTZXRzIHRoZSBmaXh0dXJlIGZvciB0aGlzIEludGVncmF0aW9uIExhYmVsIFZhbHVlIHRlc3QgY2FzZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBzZXRGaXh0dXJlKEludGVncmF0aW9uTGFiZWxWYWx1ZSBmaXh0dXJlKSB7CisJCXRoaXMuZml4dHVyZSA9IGZpeHR1cmU7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgZml4dHVyZSBmb3IgdGhpcyBJbnRlZ3JhdGlvbiBMYWJlbCBWYWx1ZSB0ZXN0IGNhc2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIEludGVncmF0aW9uTGFiZWxWYWx1ZSBnZXRGaXh0dXJlKCkgeworCQlyZXR1cm4gZml4dHVyZTsKKwl9CisKK30gLy9JbnRlZ3JhdGlvbkxhYmVsVmFsdWVUZXN0CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9zdGFuZGFyZC90ZXN0cy9TRUlSRGlzZWFzZU1vZGVsU2NlbmFyaW9UZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9zdGFuZGFyZC90ZXN0cy9TRUlSRGlzZWFzZU1vZGVsU2NlbmFyaW9UZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmI4MGViNgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3N0YW5kYXJkL3Rlc3RzL1NFSVJEaXNlYXNlTW9kZWxTY2VuYXJpb1Rlc3QuamF2YQpAQCAtMCwwICsxLDIxIEBACisvLyBTRUlSRGlzZWFzZU1vZGVsU2NlbmFyaW9UZXN0LmphdmEKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLnRlc3RzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqCisgKiBUaGlzIGNsYXNzIGlzIGEgSlVuaXQgdGVzdCBjYXNlIGZvciBTRUlSIERpc2Vhc2UgTW9kZWxzIFNjZW5hcmlvcworICovCitwdWJsaWMgYWJzdHJhY3QgY2xhc3MgU0VJUkRpc2Vhc2VNb2RlbFNjZW5hcmlvVGVzdCBleHRlbmRzCisJCVNJUkRpc2Vhc2VNb2RlbFNjZW5hcmlvVGVzdCB7CisJLy8gTm90aGluZworfSAvLyBTRUlSRGlzZWFzZU1vZGVsU2NlbmFyaW9UZXN0CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9zdGFuZGFyZC90ZXN0cy9TRUlSTGFiZWxUZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9zdGFuZGFyZC90ZXN0cy9TRUlSTGFiZWxUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzg5Yzk1NgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3N0YW5kYXJkL3Rlc3RzL1NFSVJMYWJlbFRlc3QuamF2YQpAQCAtMCwwICsxLDExMCBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQudGVzdHM7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQganVuaXQudGV4dHVpLlRlc3RSdW5uZXI7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLm5vZGVzLlJlZ2lvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU0VJUkxhYmVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TRUlSTGFiZWxWYWx1ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmRGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC5kZWNvcmF0b3JzLkRlY29yYXRvcnNGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC5kZWNvcmF0b3JzLlRlc3ROb2RlRGVjb3JhdG9yMTsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiBBIHRlc3QgY2FzZSBmb3IgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPlNFSVIgTGFiZWw8L2I+PC9lbT4nLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK0BTdXBwcmVzc1dhcm5pbmdzKCJhbGwiKQorcHVibGljIGNsYXNzIFNFSVJMYWJlbFRlc3QgZXh0ZW5kcyBTdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsVGVzdCB7CisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAcGFyYW0gYXJncworCSAqIAorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CisJCVRlc3RSdW5uZXIucnVuKFNFSVJMYWJlbFRlc3QuY2xhc3MpOworCX0KKworCS8qKgorCSAqIENvbnN0cnVjdHMgYSBuZXcgU0VJUiBMYWJlbCB0ZXN0IGNhc2Ugd2l0aCB0aGUgZ2l2ZW4gbmFtZS4gPCEtLQorCSAqIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBwYXJhbSBuYW1lCisJICogCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBTRUlSTGFiZWxUZXN0KFN0cmluZyBuYW1lKSB7CisJCXN1cGVyKG5hbWUpOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIGZpeHR1cmUgZm9yIHRoaXMgU0VJUiBMYWJlbCB0ZXN0IGNhc2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYworCSAqIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIFNFSVJMYWJlbCBnZXRGaXh0dXJlKCkgeworCQlyZXR1cm4gKFNFSVJMYWJlbClmaXh0dXJlOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBzZWUganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlI3NldFVwKCkKKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIHNldFVwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCXNldEZpeHR1cmUoY3JlYXRlRml4dHVyZSgpKTsKKwl9IC8vIHNldFVwCisKKwkvKioKKwkgKiBAcmV0dXJuIGFuIFNFSVJMYWJlbCBpbnN0YW5jZQorCSAqLworCXB1YmxpYyBzdGF0aWMgU0VJUkxhYmVsIGNyZWF0ZUZpeHR1cmUoKSB7CisJCWZpbmFsIFNFSVJMYWJlbCByZXRWYWx1ZSA9IFN0YW5kYXJkRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlU0VJUkxhYmVsKCk7CisJCWZpbmFsIFJlZ2lvbiBub2RlID0gRGlzZWFzZU1vZGVsVGVzdFV0aWwKKwkJCQkuY3JlYXRlUG9wdWxhdGlvblJlZ2lvbk5vZGUoRGlzZWFzZU1vZGVsVGVzdFV0aWwuVEVTVF9QT1BVTEFUSU9OX0lERU5USUZJRVIpOworCQlmaW5hbCBUZXN0Tm9kZURlY29yYXRvcjEgdG5kID0gRGVjb3JhdG9yc0ZhY3RvcnkuZUlOU1RBTkNFCisJCQkJLmNyZWF0ZVRlc3ROb2RlRGVjb3JhdG9yMSgpOworCQlyZXRWYWx1ZS5zZXREZWNvcmF0b3IodG5kKTsKKwkJRGlzZWFzZU1vZGVsTGFiZWxUZXN0LmxhYmVsUmVnaW9uKHJldFZhbHVlLAorCQkJCURpc2Vhc2VNb2RlbFRlc3RVdGlsLlRFU1RfUE9QVUxBVElPTl9JREVOVElGSUVSLCBub2RlKTsKKwkJcmV0dXJuIHJldFZhbHVlOworCX0gLy8gY3JlYXRlRml4dHVyZQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2UjdGVhckRvd24oKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgdm9pZCB0ZWFyRG93bigpIHRocm93cyBFeGNlcHRpb24geworCQlzZXRGaXh0dXJlKG51bGwpOworCX0KKworCS8qKgorCSAqIHRlc3QgdGhhdCB0aGUgZml4dHVyZSBpcyBzYW5lCisJICovCisJcHVibGljIHZvaWQgdGVzdEZpeHR1cmVTYW5pdHkoKSB7CisJCWZpbmFsIFNFSVJMYWJlbCBzZWlyTGFiZWwgPSBnZXRGaXh0dXJlKCk7CisJCWFzc2VydFRydWUoc2VpckxhYmVsLnNhbmUoKSk7CisJfSAvLyB0ZXN0Rml4dHVyZVNhbml0eQorCit9IC8vIFNFSVJMYWJlbFRlc3QKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3N0YW5kYXJkL3Rlc3RzL1NFSVJMYWJlbFZhbHVlVGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvc3RhbmRhcmQvdGVzdHMvU0VJUkxhYmVsVmFsdWVUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzE3M2I1MQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3N0YW5kYXJkL3Rlc3RzL1NFSVJMYWJlbFZhbHVlVGVzdC5qYXZhCkBAIC0wLDAgKzEsMTYwIEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC50ZXN0czsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqdW5pdC50ZXh0dWkuVGVzdFJ1bm5lcjsKKworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5EaXNlYXNlTW9kZWxMYWJlbFZhbHVlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TRUlSTGFiZWxWYWx1ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmRGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsVmFsdWU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLmltcGwuU0VJUkxhYmVsVmFsdWVJbXBsOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IEEgdGVzdCBjYXNlIGZvciB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+U0VJUiBMYWJlbCBWYWx1ZTwvYj48L2VtPicuCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBnZW5lcmF0ZWQKKyAqLworQFN1cHByZXNzV2FybmluZ3MoImFsbCIpCitwdWJsaWMgY2xhc3MgU0VJUkxhYmVsVmFsdWVUZXN0IGV4dGVuZHMgU0lSTGFiZWxWYWx1ZVRlc3QgeworCS8qKgorCSAqIFRlc3QgdmFsdWUgZm9yIGV4cG9zZWQKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIGRvdWJsZSBURVNUX0UgPSA0OworCisJLyoqCisJICogVGVzdCB2YWx1ZSBmb3IgZXhwb3NlZAorCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgZG91YmxlIFRFTVBfVEVTVF9FID0gVEVTVF9FICsgNDA7CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBwYXJhbSBhcmdzCisJICogCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKKwkJVGVzdFJ1bm5lci5ydW4oU0VJUkxhYmVsVmFsdWVUZXN0LmNsYXNzKTsKKwl9CisKKwkvKioKKwkgKiBDb25zdHJ1Y3RzIGEgbmV3IFNFSVIgTGFiZWwgVmFsdWUgdGVzdCBjYXNlIHdpdGggdGhlIGdpdmVuIG5hbWUuIDwhLS0KKwkgKiBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAcGFyYW0gbmFtZQorCSAqIAorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgU0VJUkxhYmVsVmFsdWVUZXN0KFN0cmluZyBuYW1lKSB7CisJCXN1cGVyKG5hbWUpOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIGZpeHR1cmUgZm9yIHRoaXMgU0VJUiBMYWJlbCBWYWx1ZSB0ZXN0IGNhc2UuIDwhLS0KKwkgKiBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogCisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCBTRUlSTGFiZWxWYWx1ZSBnZXRGaXh0dXJlKCkgeworCQlyZXR1cm4gKFNFSVJMYWJlbFZhbHVlKWZpeHR1cmU7CisJfQorCisJQFN1cHByZXNzV2FybmluZ3MoInVudXNlZCIpCisJcHJpdmF0ZSBTRUlSTGFiZWxWYWx1ZSBnZXRUZW1wRml4dHVyZSgpIHsKKwkJcmV0dXJuIChTRUlSTGFiZWxWYWx1ZSkgdGVtcEZpeHR1cmU7CisJfSAvLyBnZXRUZW1wRml4dHVyZQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogCisJICogQHNlZSBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2Ujc2V0VXAoKQorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJcHJvdGVjdGVkIHZvaWQgc2V0VXAoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJc2V0Rml4dHVyZShjcmVhdGVGaXh0dXJlKCkpOworCQlzZXRUZW1wRml4dHVyZShjcmVhdGVUZW1wRml4dHVyZSgpKTsKKwl9IC8vIHNldHVwCisKKwkvKioKKwkgKiBAcmV0dXJuIGEgdmFsdWUgZm9yIHRlc3RpbmcKKwkgKi8KKwlwdWJsaWMgc3RhdGljIFNFSVJMYWJlbFZhbHVlIGNyZWF0ZUZpeHR1cmUoKSB7CisJCWZpbmFsIFNFSVJMYWJlbFZhbHVlSW1wbCByZXRWYWx1ZSA9IG5ldyBTRUlSTGFiZWxWYWx1ZUltcGwoVEVTVF9TLAorCQkJCVRFU1RfRSwgVEVTVF9JLCBURVNUX1IsCisJCQkJVEVTVF9ESVNFQVNFX0RFQVRIUyk7CisJCXJldHVybiByZXRWYWx1ZTsKKwl9IC8vIGNyZWF0ZVNFSVJMYWJlbFZhbHVlCisKKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZSBjcmVhdGVUZW1wRml4dHVyZSgpIHsKKwkJZmluYWwgU0VJUkxhYmVsVmFsdWVJbXBsIHJldFZhbHVlID0gbmV3IFNFSVJMYWJlbFZhbHVlSW1wbChURU1QX1RFU1RfUywKKwkJCQlURU1QX1RFU1RfRSwgVEVNUF9URVNUX0ksIFRFTVBfVEVTVF9SLAorCQkJCSBURU1QX1RFU1RfRElTRUFTRV9ERUFUSFMpOworCQlyZXR1cm4gcmV0VmFsdWU7CisJfSAvLyBjcmVhdGVUZW1wRml4dHVyZQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogCisJICogQHNlZSBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2UjdGVhckRvd24oKQorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJcHJvdGVjdGVkIHZvaWQgdGVhckRvd24oKSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJc2V0Rml4dHVyZShudWxsKTsKKwkJc2V0VGVtcEZpeHR1cmUobnVsbCk7CisJfSAvLyB0ZWFyRG93bgorCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIFN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZSBnZXRFeHBlY3RlZENvbnZlcnRUb1NvdXJjZVN0YXRlcygKKwkJCVN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZSBmaXh0dXJlKSB7CisJCWZpbmFsIFNFSVJMYWJlbFZhbHVlIHNlaXJMYWJlbCA9IChTRUlSTGFiZWxWYWx1ZSkgZml4dHVyZTsKKwkJcmV0dXJuIG5ldyBTRUlSTGFiZWxWYWx1ZUltcGwoc2VpckxhYmVsLmdldEUoKSwgc2VpckxhYmVsLmdldEkoKSwKKwkJCQkgc2VpckxhYmVsLmdldFIoKSwgMCxzZWlyTGFiZWwuZ2V0UygpLCBzZWlyTGFiZWwKKwkJCQkJCS5nZXREaXNlYXNlRGVhdGhzKCkpOworCX0gLy8gZ2V0RXhwZWN0ZWRDb252ZXJ0VG9Tb3VyY2VTdGF0ZXMKKworCUBPdmVycmlkZQorCXByb3RlY3RlZCBEaXNlYXNlTW9kZWxMYWJlbFZhbHVlIGdldEV4cGVjdGVkRml4dHVyZUFkZGl0aW9uUmVzdWx0KAorCQkJRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZSBmaXh0dXJlMSwgRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZSBmaXh0dXJlMikgeworCQlmaW5hbCBTRUlSTGFiZWxWYWx1ZSBzZWlyTGFiZWwxID0gKFNFSVJMYWJlbFZhbHVlKSBmaXh0dXJlMTsKKwkJZmluYWwgU0VJUkxhYmVsVmFsdWUgc2VpckxhYmVsMiA9IChTRUlSTGFiZWxWYWx1ZSkgZml4dHVyZTI7CisJCXJldHVybiBuZXcgU0VJUkxhYmVsVmFsdWVJbXBsKHNlaXJMYWJlbDEuZ2V0UygpICsgc2VpckxhYmVsMi5nZXRTKCksCisJCQkJc2VpckxhYmVsMS5nZXRFKCkgKyBzZWlyTGFiZWwyLmdldEUoKSwgc2VpckxhYmVsMS5nZXRJKCkKKwkJCQkJCSsgc2VpckxhYmVsMi5nZXRJKCksIHNlaXJMYWJlbDEuZ2V0UigpCisJCQkJCQkrIHNlaXJMYWJlbDIuZ2V0UigpLCBzZWlyTGFiZWwxLmdldERpc2Vhc2VEZWF0aHMoKQorCQkJCQkJKyBzZWlyTGFiZWwyLmdldERpc2Vhc2VEZWF0aHMoKSk7CisJfSAvLyBnZXRFeHBlY3RlZEZpeHR1cmVBZGRpdGlvblJlc3VsdAorCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIERpc2Vhc2VNb2RlbExhYmVsVmFsdWUgZ2V0RXhwZWN0ZWRGaXh0dXJlU3VidHJhY3Rpb25SZXN1bHQoCisJCQlEaXNlYXNlTW9kZWxMYWJlbFZhbHVlIGZpeHR1cmUxLCBEaXNlYXNlTW9kZWxMYWJlbFZhbHVlIGZpeHR1cmUyKSB7CisJCWZpbmFsIFNFSVJMYWJlbFZhbHVlIHNlaXJMYWJlbDEgPSAoU0VJUkxhYmVsVmFsdWUpIGZpeHR1cmUxOworCQlmaW5hbCBTRUlSTGFiZWxWYWx1ZSBzZWlyTGFiZWwyID0gKFNFSVJMYWJlbFZhbHVlKSBmaXh0dXJlMjsKKwkJcmV0dXJuIG5ldyBTRUlSTGFiZWxWYWx1ZUltcGwoc2VpckxhYmVsMS5nZXRTKCkgLSBzZWlyTGFiZWwyLmdldFMoKSwKKwkJCQlzZWlyTGFiZWwxLmdldEUoKSAtIHNlaXJMYWJlbDIuZ2V0RSgpLCBzZWlyTGFiZWwxLmdldEkoKQorCQkJCQkJLSBzZWlyTGFiZWwyLmdldEkoKSwgc2VpckxhYmVsMS5nZXRSKCkKKwkJCQkJCS0gc2VpckxhYmVsMi5nZXRSKCksIHNlaXJMYWJlbDEuZ2V0RGlzZWFzZURlYXRocygpCisJCQkJCQktIHNlaXJMYWJlbDIuZ2V0RGlzZWFzZURlYXRocygpKTsKKwl9IC8vIGdldEV4cGVjdGVkRml4dHVyZVN1YnRyYWN0aW9uUmVzdWx0CisKKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgZG91YmxlIGdldEV4cGVjdGVkUG9wdWxhdGlvbkNvdW50KERpc2Vhc2VNb2RlbExhYmVsVmFsdWUgZml4dHVyZSkgeworCQlmaW5hbCBTRUlSTGFiZWxWYWx1ZSBzZWlyTGFiZWwgPSAoU0VJUkxhYmVsVmFsdWUpIGZpeHR1cmU7CisJCXJldHVybiBzZWlyTGFiZWwuZ2V0UygpICsgc2VpckxhYmVsLmdldEUoKSArIHNlaXJMYWJlbC5nZXRJKCkKKwkJCQkrIHNlaXJMYWJlbC5nZXRSKCk7CisJfSAvLyBnZXRFeHBlY3RlZFBvcHVsYXRpb25Db3VudAorCit9IC8vIFNFSVJMYWJlbFZhbHVlVGVzdApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvc3RhbmRhcmQvdGVzdHMvU0VJUkxhYmVsVmFsdWVUZXN0VXRpbC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvc3RhbmRhcmQvdGVzdHMvU0VJUkxhYmVsVmFsdWVUZXN0VXRpbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM5MjM2OTYKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9zdGFuZGFyZC90ZXN0cy9TRUlSTGFiZWxWYWx1ZVRlc3RVdGlsLmphdmEKQEAgLTAsMCArMSwyMTAgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLnRlc3RzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA5IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGphdmEudXRpbC5MaW5rZWRMaXN0OworaW1wb3J0IGphdmEudXRpbC5MaXN0OworaW1wb3J0IGphdmEudXRpbC5SYW5kb207CisKK2ltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguTm9kZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuaW1wbC5TRUlSTGFiZWxJbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5pbXBsLlNFSVJMYWJlbFZhbHVlSW1wbDsKKworCitwdWJsaWMgYWJzdHJhY3QgY2xhc3MgU0VJUkxhYmVsVmFsdWVUZXN0VXRpbCBleHRlbmRzIFRlc3RDYXNleworCQorCS8qKgorCSAqIE51bWJlciBvZiByYW5kb20gdmFsdWVzIHRvIHRlc3Qgd2l0aAorCSAqLworCXByaXZhdGUgc3RhdGljIGZpbmFsIGludCBOVU1CRVJfT0ZfUkFORE9NUyA9IDA7CisKKwkvKioKKwkgKiBtYXggZG91YmxlIHZhbHVlIHRvIGJlIHVzZWQgaW4gdGhlIHRlc3QKKwkgKi8KKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBkb3VibGUgVEVTVF9NQVhfRE9VQkxFX1ZBTFVFID0gMWUxMmQ7CisKKwkvKioKKwkgKiBtYXggbG9uZyB2YWx1ZSB0byBiZSB1c2VkIGluIHRoZSB0ZXN0CisJICovCisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgbG9uZyBURVNUX01BWF9MT05HX1ZBTFVFID0gTG9uZy5NQVhfVkFMVUU7CisKKwkvKioKKwkgKiBpZiB0aGVyZSBpcyBhIHN5c3RlbSBwcm9wZXJ0eSB3aXRoIHRoaXMgdmFsdWUgdGhlbiB0aGUgdGVzdCB3aWxsIGJlIGNvbXBlcmhlbnNpdmUuIElmIG5vdAorCSAqIHRoZW4gdGhlIHRlc3Qgd2lsbCBjaGVjayBvbmx5IGZldyBjYXNlcy4KKwkgKi8KKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgQ09NUEVSSEFOU0lWRV9URVNUID0gImNvbXBlcmhlbnNpdmUudGVzdCI7CisKKwlwcml2YXRlIHN0YXRpYyBCb29sZWFuIGNvbXBlcmhlbnNpdmUgPSBudWxsOworCQorCS8qKgorCSAqIFRoaXMgbWV0aG9kIHJldHVybnMgYSBsaXN0IG9mIHtAbGluayBTRUlSTGFiZWxWYWx1ZUltcGx9IG9iamVjdHMuCisJICogU29tZSBvYmplY3RzIGluIHRoZSBsaXN0IGFyZSByYW5kb20gYW5kIHNvbWUgbm90IHJhbmRvbSBhdCBhbGwuCisJICogVGhlIG9uZXMgdGhhdCBhcmUgbm90IHJhbmRvbSByZXByZXNlbnRzIGV4dHJlbWUgY2FzZXMuCisJICogVGhlIG51bWVyaWMgdmFsdWVzIGZvciB0aGUgZXh0cmVtZSBjYXNlcyBhcmUgMC4wLCBNQVhfRE9VQkxFLCBhbmQgSSBhZGRlZCB0aGUgbnVtYmVyIDEuMC4gCisJICogVGhlIG51bWJlciBvZiByYW5kb20gbnVtYmVycyB0byB0ZXN0IHdpdGggaXMgTlVNQkVSX09GX1JBTkRPTVMuCisJICogTm90ZSB0aGF0IHdpdGggTlVNQkVSX09GX1JBTkRPTVMgPSAwIHlvdSB3aWxsIGhhdmUgNDM3NCBwZXJtdXRhdGlvbnMgb2YgYWxsIHZhbHVlcyBvZiB7QFNFSVJMYWJlbFZhbHVlSW1wbH0uCisJICogSWYgeW91IHdpc2ggdG8gbWFrZSBOVU1CRVJfT0ZfUkFORE9NUyBoaWdoZXIgdGhlbiAwIHRoZW4gYmUgcmVhZHkgZm9yIGEgbG9uZyB0ZXN0IDotKQorCSAqLworCXB1YmxpYyBzdGF0aWMgTGlzdDxTRUlSTGFiZWxWYWx1ZUltcGw+IGNyZWF0ZVJhbmRvbVNFSVJMYWJlbFZhbHVlSW1wbCgpeworCQlSYW5kb20gcmFuZG9tID0gbmV3IFJhbmRvbSgpOworCQlkb3VibGVbXSB2YWx1ZXMgPSBuZXcgZG91YmxlWzMgKyBOVU1CRVJfT0ZfUkFORE9NU107CisJCXZhbHVlc1swXSA9IDAuMGQ7CisJCXZhbHVlc1sxXSA9IFRFU1RfTUFYX0RPVUJMRV9WQUxVRTsKKwkgICAgdmFsdWVzWzJdID0gMS4wZDsKKwkJZm9yKGludCBpID0gKHZhbHVlcy5sZW5ndGggKyAxKTsgaSA8IHZhbHVlcy5sZW5ndGg7IGkrKyl7CisJCQl2YWx1ZXNbaV0gPSByYW5kb20ubmV4dERvdWJsZSgpICogVEVTVF9NQVhfRE9VQkxFX1ZBTFVFOworCQl9CisJCUxpc3Q8U0VJUkxhYmVsVmFsdWVJbXBsPiBtb2RlbExldmVsVmFsdWVzID0gbmV3IExpbmtlZExpc3Q8U0VJUkxhYmVsVmFsdWVJbXBsPigpOworCQlpbnQgaXRlcmF0aW9uID0gMDsKKwkJZm9yKGRvdWJsZSBzIDogdmFsdWVzKXsKKwkJCWZvcihkb3VibGUgZSA6IHZhbHVlcyl7CisJCQkJZm9yKGRvdWJsZSBpIDogdmFsdWVzKXsKKwkJCQkJZm9yKGRvdWJsZSByIDogdmFsdWVzKXsKKwkJCQkJCWZvcihkb3VibGUgYmlydGhzIDogdmFsdWVzKXsKKwkJCQkJCQlmb3IoZG91YmxlIGRlYXRocyA6IHZhbHVlcyl7CisJCQkJCQkJCWZvcihkb3VibGUgZGlzZWFzZURlYXRocyA6IHZhbHVlcyl7CisJCQkJCQkJCQlpZihkaXNlYXNlRGVhdGhzID4gZGVhdGhzKXsKKwkJCQkJCQkJCQljb250aW51ZTsKKwkJCQkJCQkJCX0KKwkJCQkJCQkJCWlmKHNraXBWYWx1ZVNldChpdGVyYXRpb24rKywgZGlzZWFzZURlYXRocywgZGVhdGhzLCBzLCBlLCBpLCByKSl7CisJCQkJCQkJCQkJY29udGludWU7CisJCQkJCQkJCQl9CisJCQkJCQkJCQlTRUlSTGFiZWxWYWx1ZUltcGwgbW9kZWxMYWJsZVZhbHVlID0gbmV3IFNFSVJMYWJlbFZhbHVlSW1wbChzLCBlLCBpLCByLCBkaXNlYXNlRGVhdGhzKTsKKwkJCQkJCQkJCWFzc2VydFRydWUoIlRoZSBTRUlSTGFiZWxWYWx1ZUltcGw6ICIgKyBtb2RlbExhYmxlVmFsdWUgKyAiIGlzIGluc2FuZSEiLCBtb2RlbExhYmxlVmFsdWUuc2FuZSgpKTsKKwkJCQkJCQkJCW1vZGVsTGV2ZWxWYWx1ZXMuYWRkKG1vZGVsTGFibGVWYWx1ZSk7CisJCQkJCQkJCQlTeXN0ZW0ub3V0LnByaW50bG4obW9kZWxMZXZlbFZhbHVlcy5zaXplKCkpOworCQkJCQkJCQl9CisJCQkJCQkJfQorCQkJCQkJfQorCQkJCQl9CisJCQkJfQorCQkJfQorCQl9CisJcmV0dXJuIG1vZGVsTGV2ZWxWYWx1ZXM7CisJfQorCQorCXByaXZhdGUgc3RhdGljIGJvb2xlYW4gc2tpcFZhbHVlU2V0KGRvdWJsZSBpdGVyYXRpb24sIGRvdWJsZSBkaXNlYXNlRGVhdGhzLCBkb3VibGUgZGVhdGhzLCBkb3VibGUgcywgZG91YmxlIGUsIGRvdWJsZSBpLCBkb3VibGUgcikgeworCQlpZighaXNDb21wZXJoZW5zaXZlKCkpeworCQkJaWYoaXRlcmF0aW9uICUgNTAwID4gMSl7CisJCQkJLy9kbyBvbmx5IG9uZSBvZiBhbnkgNTAwIHBlcm11dGF0aW9ucworCQkJCVN5c3RlbS5vdXQucHJpbnQoIi4iKTsKKwkJCQlyZXR1cm4gdHJ1ZTsKKwkJCX0KKwkJfQorCQlpZihkaXNlYXNlRGVhdGhzID4gZGVhdGhzKXsKKwkJCXJldHVybiB0cnVlOworCQl9CisJCWRvdWJsZSBwb3B1bGF0aW9uID0gcyArIGkgKyByOworCQlpZihkZWF0aHMgPiBwb3B1bGF0aW9uKXsKKwkJCXJldHVybiB0cnVlOworCQl9CisJCWlmKGRpc2Vhc2VEZWF0aHMgPiBwb3B1bGF0aW9uKXsKKwkJCXJldHVybiB0cnVlOworCQl9CisJCXJldHVybiBmYWxzZTsKKwl9CisJCisJcHJpdmF0ZSBzdGF0aWMgYm9vbGVhbiBpc0NvbXBlcmhlbnNpdmUoKSB7CisJCWlmKG51bGwgIT0gY29tcGVyaGVuc2l2ZSApeworCQkJcmV0dXJuIGNvbXBlcmhlbnNpdmUuYm9vbGVhblZhbHVlKCk7CisJCX0KKwkJU3RyaW5nIGNvbXBlcmhlbnNpdmVQcm9wZXJ0eSA9IFN5c3RlbS5nZXRQcm9wZXJ0eShDT01QRVJIQU5TSVZFX1RFU1QpOworCQlpZihudWxsICE9IGNvbXBlcmhlbnNpdmVQcm9wZXJ0eSl7CisJCQljb21wZXJoZW5zaXZlUHJvcGVydHkgPSBjb21wZXJoZW5zaXZlUHJvcGVydHkudHJpbSgpOworCQkJaWYoY29tcGVyaGVuc2l2ZVByb3BlcnR5LmVxdWFsc0lnbm9yZUNhc2UoInllcyIpIHx8IGNvbXBlcmhlbnNpdmVQcm9wZXJ0eS5lcXVhbHNJZ25vcmVDYXNlKCJ0cnVlIikpewkJCQorCQkJCWNvbXBlcmhlbnNpdmUgPSBuZXcgQm9vbGVhbih0cnVlKTsKKwkJCX0KKwkJfQorCQlpZihudWxsID09IGNvbXBlcmhlbnNpdmUgKXsKKwkJCWNvbXBlcmhlbnNpdmUgPSBuZXcgQm9vbGVhbihmYWxzZSk7CisJCX0KKwkJcmV0dXJuIGNvbXBlcmhlbnNpdmUuYm9vbGVhblZhbHVlKCk7CisJfQorCS8qKgorCSAqIENsb25lIHRoZSBTRUlSTGFiZWxWYWx1ZUltcGwKKwkgKiBAcGFyYW0gb3JpZ2luYWwgd2lsbCBub3QgYmUgbW9kZWZpbGVzCisJICogQHJldHVybiBhIGNsb25lIG9mICdvcmlnaW5hbCcKKwkgKi8KKwlwdWJsaWMgc3RhdGljIFNFSVJMYWJlbFZhbHVlSW1wbCBjbG9uZVNFSVJMYWJlbFZhbHVlSW1wbChTRUlSTGFiZWxWYWx1ZUltcGwgb3JpZ2luYWwpeworCQlTRUlSTGFiZWxWYWx1ZUltcGwgdmFsdWUgPSAgbmV3IFNFSVJMYWJlbFZhbHVlSW1wbChvcmlnaW5hbC5nZXRTKCksIG9yaWdpbmFsLmdldEUoKSwgb3JpZ2luYWwuZ2V0SSgpLCAgCisJCQkJb3JpZ2luYWwuZ2V0UigpLCAgb3JpZ2luYWwuZ2V0RGlzZWFzZURlYXRocygpKTsKKwkJcmV0dXJuIHZhbHVlOworCX0KKworCS8qKgorCSAqIFRoaXMgbWV0aG9kIHJldHVybnMgYSBsaXN0IG9mIHtAbGluayBTRUlSTGFiZWxJbXBsfSBvYmplY3RzLgorCSAqIFNvbWUgb2JqZWN0cyBpbiB0aGUgbGlzdCBhcmUgcmFuZG9tIGFuZCBzb21lIG5vdCByYW5kb20gYXQgYWxsLgorCSAqIFRoZSBvbmVzIHRoYXQgYXJlIG5vdCByYW5kb20gcmVwcmVzZW50cyBleHRyZW1lIGNhc2VzLgorCSAqIFRoZSBudW1lcmljIHZhbHVlcyBmb3IgdGhlIGV4dHJlbWUgY2FzZXMgYXJlIDAuMCwgTUFYX0RPVUJMRSwgYW5kIEkgYWRkZWQgdGhlIG51bWJlciAxLjAuIAorCSAqIFRoZSBudW1iZXIgb2YgcmFuZG9tIG51bWJlcnMgdG8gdGVzdCB3aXRoIGlzIE5VTUJFUl9PRl9SQU5ET01TLgorCSAqIE5vdGUgdGhhdCB3aXRoIE5VTUJFUl9PRl9SQU5ET01TID0gMCB5b3Ugd2lsbCBoYXZlIDQzNzQgcGVybXV0YXRpb25zIG9mIGFsbCB2YWx1ZXMgb2Yge1NFSVJMYWJlbEltcGx9LgorCSAqIElmIHlvdSB3aXNoIHRvIG1ha2UgTlVNQkVSX09GX1JBTkRPTVMgaGlnaGVyIHRoZW4gMCB0aGVuIGJlIHJlYWR5IGZvciBhIGxvbmcgdGVzdCA6LSkKKwkgKiAKKwkgKi8KKwlwdWJsaWMgTGlzdDxTRUlSTGFiZWxJbXBsPiBjcmVhdGVSYW5kb21TRUlSTGFiZWxJbXBsKCl7CisJCVJhbmRvbSByYW5kb20gPSBuZXcgUmFuZG9tKCk7CisJCWRvdWJsZVtdIHZhbHVlcyA9IG5ldyBkb3VibGVbMyArIE5VTUJFUl9PRl9SQU5ET01TXTsKKwkJdmFsdWVzWzBdID0gMC4wZDsKKwkJdmFsdWVzWzFdID0gVEVTVF9NQVhfRE9VQkxFX1ZBTFVFOworCQl2YWx1ZXNbMl0gPSAxLjBkOworCQlmb3IoaW50IGkgPSAzOyBpIDwgdmFsdWVzLmxlbmd0aDsgaSsrKXsKKwkJCXZhbHVlc1tpXSA9IHJhbmRvbS5uZXh0RG91YmxlKCkgKiBURVNUX01BWF9ET1VCTEVfVkFMVUU7CisJCX0KKwkJTGlzdDxTRUlSTGFiZWxJbXBsPiBtb2RlbExldmVsVmFsdWVzID0gbmV3IExpbmtlZExpc3Q8U0VJUkxhYmVsSW1wbD4oKTsKKwkJaW50IGl0ZXJhdGlvbiA9IDA7CisJCWZvcihkb3VibGUgcyA6IHZhbHVlcyl7CisJCQlmb3IoZG91YmxlIGUgOiB2YWx1ZXMpeworCQkJCWZvcihkb3VibGUgaSA6IHZhbHVlcyl7CisJCQkJCWZvcihkb3VibGUgciA6IHZhbHVlcyl7CisJCQkJCQlmb3IoZG91YmxlIGJpcnRocyA6IHZhbHVlcyl7CisJCQkJCQkJZm9yKGRvdWJsZSBkZWF0aHMgOiB2YWx1ZXMpeworCQkJCQkJCQlmb3IoZG91YmxlIGRpc2Vhc2VEZWF0aHMgOiB2YWx1ZXMpeworCQkJCQkJCQkJaWYoc2tpcFZhbHVlU2V0KGl0ZXJhdGlvbisrLCBkaXNlYXNlRGVhdGhzLCBkZWF0aHMsIHMsIGUsIGksIHIpKXsKKwkJCQkJCQkJCQljb250aW51ZTsKKwkJCQkJCQkJCX0KKwkJCQkJCQkJCVNFSVJMYWJlbFZhbHVlVGVzdCBsYWJlbFZhbHVlVGVzdCA9IG5ldyBTRUlSTGFiZWxWYWx1ZVRlc3QoIlNFSVJMYWJlbFZhbHVlVGVzdCIpOworCQkJCQkJCQkJU0VJUkxhYmVsVmFsdWVJbXBsIGxhYmVsVmFsdWUgPSAoU0VJUkxhYmVsVmFsdWVJbXBsKWxhYmVsVmFsdWVUZXN0LmdldEZpeHR1cmUoKTsKKwkJCQkJCQkJCWxhYmVsVmFsdWUuc2V0UyhzKTsKKwkJCQkJCQkJCWxhYmVsVmFsdWUuc2V0RShzKTsKKwkJCQkJCQkJCWxhYmVsVmFsdWUuc2V0SShzKTsKKwkJCQkJCQkJCWxhYmVsVmFsdWUuc2V0UihzKTsKKwkJCQkJCQkJCWxhYmVsVmFsdWUuc2V0RGlzZWFzZURlYXRocyhkaXNlYXNlRGVhdGhzKTsKKwkJCQkJCQkJCWFzc2VydFRydWUoIlRoZSBTRUlSTGFiZWxWYWx1ZTogIiArIGxhYmVsVmFsdWUgKyAiIGlzIGluc2FuZSEiLCBsYWJlbFZhbHVlLnNhbmUoKSk7CisJCQkJCQkJCQkvLyBwdXQgdGhlIHZhbHVlIGluIGEgbGFiZWwKKwkJCQkJCQkJCVNFSVJMYWJlbFRlc3QgbGFiZWxUZXN0ID0gbmV3IFNFSVJMYWJlbFRlc3QoIlNFSVJMYWJlbFRlc3QiKTsKKwkJCQkJCQkJCVNFSVJMYWJlbEltcGwgbGFiZWwgPSAoU0VJUkxhYmVsSW1wbClsYWJlbFRlc3QuZ2V0Rml4dHVyZSgpOworCQkJCQkJCQkJbGFiZWwuc2V0Q3VycmVudFZhbHVlKGxhYmVsVmFsdWUpOworCQkJCQkJCQkJbW9kZWxMZXZlbFZhbHVlcy5hZGQobGFiZWwpOworCQkJCQkJCQl9CisJCQkJCQkJfQorCQkJCQkJfQorCQkJCQl9CisJCQkJfQorCQkJfQorCQl9CisJcmV0dXJuIG1vZGVsTGV2ZWxWYWx1ZXM7CisJfQorCQorCXB1YmxpYyBsb25nW10gY3JlYXRlcmFuZG9tRGVsdGFzKCkgeworCQlSYW5kb20gcmFuZG9tID0gbmV3IFJhbmRvbSgpOworCQlsb25nW10gdmFsdWVzID0gbmV3IGxvbmdbMiArIE5VTUJFUl9PRl9SQU5ET01TXTsKKwkJdmFsdWVzWzBdID0gVEVTVF9NQVhfTE9OR19WQUxVRTsKKwkJdmFsdWVzWzFdID0gMWw7CisJCWZvcihpbnQgaSA9IDM7IGkgPCB2YWx1ZXMubGVuZ3RoOyBpKyspeworCQkJdmFsdWVzW2ldID0gcmFuZG9tLm5leHRMb25nKCkgKiBURVNUX01BWF9MT05HX1ZBTFVFOworCQl9CisJCXJldHVybiB2YWx1ZXM7CisJfQorCQorfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvc3RhbmRhcmQvdGVzdHMvU0VJUlRlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3N0YW5kYXJkL3Rlc3RzL1NFSVJUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjRlNzcxOAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3N0YW5kYXJkL3Rlc3RzL1NFSVJUZXN0LmphdmEKQEAgLTAsMCArMSwxMDEgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLnRlc3RzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlNFSVI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlNFSVJMYWJlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmRQYWNrYWdlOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IEEgdGVzdCBjYXNlIGZvciB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+U0VJUjwvYj48L2VtPicuCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIDxwPgorICogVGhlIGZvbGxvd2luZyBvcGVyYXRpb25zIGFyZSB0ZXN0ZWQ6CisgKiA8dWw+CisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlNFSVIjZ2V0QWRqdXN0ZWRJbmN1YmF0aW9uUmF0ZShsb25nKSA8ZW0+R2V0IEFkanVzdGVkIEluY3ViYXRpb24gUmF0ZTwvZW0+fTwvbGk+CisgKiA8L3VsPgorICogPC9wPgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgYWJzdHJhY3QgY2xhc3MgU0VJUlRlc3QgZXh0ZW5kcyBTSVJUZXN0IHsKKworCS8qKgorCSAqIFRoaXMgY29lZmZpY2llbnQgZGV0ZXJtaW5lcyB0aGUgbnVtYmVyIG9mIHBvcHVsYXRpb24gbWVtYmVycyBpbiB0aGUKKwkgKiA8ZW0+RXhwb3NlZDwvZW0+IHN0YXRlIHRoYXQgYmVjb21lIGluZmVjdGVkIHBlciBwb3B1bGF0aW9uIG1lbWJlciBpbgorCSAqIHRoZSA8ZW0+RXhwb3NlZDwvZW0+IHN0YXRlLCBwZXIgdGltZSBwZXJpb2QuIFVuaXRzOiBwb3B1bGF0aW9uIG1lbWJlcnMKKwkgKiAKKwkgKiBAc2VlIFNFSVIjZ2V0SW5jdWJhdGlvblJhdGUoKQorCSAqLworCWZpbmFsIHB1YmxpYyBzdGF0aWMgZG91YmxlIElOQ1VCQVRJT05fUkFURSA9IDAuMTsKKworCS8qKgorCSAqIENvbnN0cnVjdHMgYSBuZXcgU0VJUiB0ZXN0IGNhc2Ugd2l0aCB0aGUgZ2l2ZW4gbmFtZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jCisJICogLS0+CisJICogCisJICogQHBhcmFtIG5hbWUKKwkgKiAKKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFNFSVJUZXN0KFN0cmluZyBuYW1lKSB7CisJCXN1cGVyKG5hbWUpOworCX0KKworCS8qKgorCSAqIFRlc3RzIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TRUlSI2dldEFkanVzdGVkSW5jdWJhdGlvblJhdGUobG9uZykgPGVtPkdldCBBZGp1c3RlZCBJbmN1YmF0aW9uIFJhdGU8L2VtPn0nCisJICogb3BlcmF0aW9uLiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TRUlSI2dldEFkanVzdGVkSW5jdWJhdGlvblJhdGUobG9uZykKKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCXB1YmxpYyB2b2lkIHRlc3RHZXRBZGp1c3RlZEluY3ViYXRpb25SYXRlX19sb25nKCkgeworCQlmaW5hbCBTRUlSIGZpeHR1cmUgPSBnZXRGaXh0dXJlKCk7CisJCWFzc2VydFRydWUoRGlzZWFzZU1vZGVsVGVzdFV0aWwuY2xvc2VFbm91Z2goZml4dHVyZQorCQkJCS5nZXRBZGp1c3RlZEluY3ViYXRpb25SYXRlKDIgKiBmaXh0dXJlLmdldFRpbWVQZXJpb2QoKSksCisJCQkJKDIgKiBmaXh0dXJlLmdldEluY3ViYXRpb25SYXRlKCkpKSk7CisJfSAvLyB0ZXN0R2V0QWRqdXN0ZWRJbmN1YmF0aW9uUmF0ZV9fbG9uZworCisJLyoqCisJICogUmV0dXJucyB0aGUgZml4dHVyZSBmb3IgdGhpcyBTRUlSIHRlc3QgY2FzZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tCisJICogZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgU0VJUiBnZXRGaXh0dXJlKCkgeworCQlyZXR1cm4gKFNFSVIpZml4dHVyZTsKKwl9CisKKwkvKioKKwkgKiBAcmV0dXJuIGEgZGlzZWFzZSBtb2RlbCBsYWJlbCB2YWx1ZSB0byBiZSB1c2VkIGZvciB0ZXN0aW5nCisJICovCisJQFN1cHByZXNzV2FybmluZ3MoInVudXNlZCIpCisJcHJpdmF0ZSBTRUlSTGFiZWwgZ2V0TGFiZWxGaXh0dXJlKCkgeworCQlyZXR1cm4gKFNFSVJMYWJlbCkgbGFiZWxGaXh0dXJlOworCX0gLy8gZ2V0TGFiZWxGaXh0dXJlCisKKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgRUNsYXNzIGdldERpc2Vhc2VNb2RlbExhYmVsQ2xhc3MoKSB7CisJCXJldHVybiBTdGFuZGFyZFBhY2thZ2UuZUlOU1RBTkNFLmdldFNFSVJMYWJlbCgpOworCX0gLy8gZ2V0RGlzZWFzZU1vZGVsTGFiZWxDbGFzcworCisJLyoqCisJICogQHJldHVybiBhIGxhYmVsIHZhbHVlIGZvciB0ZXN0aW5nCisJICovCisJcHVibGljIFN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWwgY3JlYXRlTGFiZWxGaXh0dXJlKCkgeworCQlyZXR1cm4gU0VJUkxhYmVsVGVzdC5jcmVhdGVGaXh0dXJlKCk7CisJfSAvLyBjcmVhdGVMYWJlbFZhbHVlRml4dHVyZQorCit9IC8vIFNFSVJUZXN0CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9zdGFuZGFyZC90ZXN0cy9TSURpc2Vhc2VNb2RlbFNjZW5hcmlvVGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvc3RhbmRhcmQvdGVzdHMvU0lEaXNlYXNlTW9kZWxTY2VuYXJpb1Rlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NzQ4ODdkCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvc3RhbmRhcmQvdGVzdHMvU0lEaXNlYXNlTW9kZWxTY2VuYXJpb1Rlc3QuamF2YQpAQCAtMCwwICsxLDExMSBAQAorLy8gU0lEaXNlYXNlTW9kZWxTY2VuYXJpb1Rlc3QuamF2YQorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQudGVzdHM7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKK2ltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuVVJJOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5MYWJlbFZhbHVlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5EZWNvcmF0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLk1vZGVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5Ob2RlRGVjb3JhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TSTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU0lJbmZlY3RvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU0lMYWJlbFZhbHVlOworCisvKioKKyAqIFRoaXMgY2xhc3MgaXMgYSBKVW5pdCB0ZXN0IGNhc2UgZm9yIFNJIERpc2Vhc2UgTW9kZWwgU2NlbmFyaW9zCisgKi8KK3B1YmxpYyBhYnN0cmFjdCBjbGFzcyBTSURpc2Vhc2VNb2RlbFNjZW5hcmlvVGVzdCBleHRlbmRzCisJCVN0YW5kYXJkRGlzZWFzZU1vZGVsU2NlbmFyaW9UZXN0IHsKKworCS8qKgorCSAqIFRoZSByb3cgaW5kZXggb2YgdGhlIHJlZ2lvbiB0byBiZSBpbmZlY3RlZC4KKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIGludCBJTkZFQ1RJT05fUk9XX0lOREVYID0gMDsKKworCS8qKgorCSAqIFRoZSBjb2x1bW4gaW5kZXggb2YgdGhlIHJlZ2lvbiB0byBlIGluZmVjdGVkLgorCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IElORkVDVElPTl9DT0xVTU5fSU5ERVggPSAwOworCisJLyoqCisJICogVGhlIG51bWJlciBvZiBwb3B1bGF0aW9uIG1lbWJlcnMgdG8gaW5mZWN0LgorCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IE5VTUJFUl9UT19JTkZFQ1QgPSAxOworCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQudGVzdHMuRGlzZWFzZU1vZGVsU2NlbmFyaW9UZXN0I2dldFNjZW5hcmlvRGVjb3JhdG9ycyhNb2RlbCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgQ29sbGVjdGlvbjxEZWNvcmF0b3I+IGdldFNjZW5hcmlvRGVjb3JhdG9ycyhmaW5hbCBNb2RlbCBtb2RlbCkgeworCQlyZXR1cm4gY3JlYXRlSW5mZWN0b3JzKG1vZGVsKTsKKwl9IC8vIGdldFNjZW5hcmlvRGVjb3JhdG9ycworCisJLyoqCisJICogQ3JlYXRlIGFuIGluZmVjdG9yIGZvciBlYWNoIGRpc2Vhc2UgbW9kZWwgaW4gYSBtb2RlbCBmb3IgdGhlIHNpbmdsZSBub2RlIFt7QGxpbmsgI0lORkVDVElPTl9ST1dfSU5ERVh9XVt7QGxpbmsgI0lORkVDVElPTl9DT0xVTU5fSU5ERVh9XQorCSAqIAorCSAqIEBwYXJhbSBtb2RlbAorCSAqICAgICAgICAgICAgdGhlIG1vZGVsIHdpdGggdGhlIGRpc2Vhc2UgbW9kZWxzCisJICogQHJldHVybiBhIGNvbGxlY3Rpb24gb2YgdGhlIGluZmVjdG9ycworCSAqLworCXB1YmxpYyBzdGF0aWMgQ29sbGVjdGlvbjxEZWNvcmF0b3I+IGNyZWF0ZUluZmVjdG9ycyhmaW5hbCBNb2RlbCBtb2RlbCkgeworCQlMaXN0PERlY29yYXRvcj4gcmV0VmFsdWUgPSBuZXcgQXJyYXlMaXN0PERlY29yYXRvcj4oKTsKKworCQkvLyBDcmVhdGUgYW4gaW5mZWN0b3IgZm9yIGVhY2ggZGlzZWFzZSBtb2RlbCBpbiB0aGUgbW9kZWwKKwkJZm9yIChJdGVyYXRvciBub2RlRGVjb3JhdG9ySXRlciA9IG1vZGVsLmdldE5vZGVEZWNvcmF0b3JzKCkuaXRlcmF0b3IoKTsgbm9kZURlY29yYXRvckl0ZXIKKwkJCQkuaGFzTmV4dCgpOykgeworCQkJZmluYWwgTm9kZURlY29yYXRvciBub2RlRGVjb3JhdG9yID0gKE5vZGVEZWNvcmF0b3IpIG5vZGVEZWNvcmF0b3JJdGVyCisJCQkJCS5uZXh0KCk7CisJCQkvLyBJcyBpdCBhIGRpc2Vhc2UgbW9kZWw/CisJCQlpZiAobm9kZURlY29yYXRvciBpbnN0YW5jZW9mIFNJKSB7CisJCQkJLy8gWWVzCisJCQkJZmluYWwgU0kgc3RhbmRhcmREaXNlYXNlTW9kZWwgPSAoU0kpIG5vZGVEZWNvcmF0b3I7CisJCQkJZmluYWwgVVJJIHRhcmdldFVSSSA9IERpc2Vhc2VNb2RlbFRlc3RVdGlsLmNyZWF0ZVJlZ2lvbk5vZGVVUkkoCisJCQkJCQlJTkZFQ1RJT05fUk9XX0lOREVYLCBJTkZFQ1RJT05fQ09MVU1OX0lOREVYKTsKKworCQkJCWZpbmFsIFNJSW5mZWN0b3IgaW5mZWN0b3IgPSAoU0lJbmZlY3Rvcikgc3RhbmRhcmREaXNlYXNlTW9kZWwKKwkJCQkJCS5jcmVhdGVJbmZlY3RvcigpOworCQkJCWluZmVjdG9yLmdldER1YmxpbkNvcmUoKS5zZXRUaXRsZSgiSW5mZWN0b3IiKTsKKwkJCQlpbmZlY3Rvci5zZXRUYXJnZXRVUkkodGFyZ2V0VVJJKTsKKwkJCQlpbmZlY3Rvci5zZXRJbmZlY3Rpb3VzQ291bnQoTlVNQkVSX1RPX0lORkVDVCk7CisJCQkJaW5mZWN0b3Iuc2V0SW5mZWN0UGVyY2VudGFnZShmYWxzZSk7CisJCQkJcmV0VmFsdWUuYWRkKGluZmVjdG9yKTsKKwkJCX0gLy8gaWYgYSBzdGFuZGFyZCBkaXNlYXNlCisJCX0gLy8gZm9yIGVhY2ggbm9kZSBkZWNvcmF0b3IKKworCQlyZXR1cm4gcmV0VmFsdWU7CisJfSAvLyBjcmVhdGVJbmZlY3RvcnMKKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLnRlc3RzLkRpc2Vhc2VNb2RlbFNjZW5hcmlvVGVzdCNjb21wYXJlTGFiZWxWYWx1ZXMob3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkxhYmVsVmFsdWUsCisJICogICAgICBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguTGFiZWxWYWx1ZSkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgYm9vbGVhbiBjb21wYXJlTGFiZWxWYWx1ZXMoTGFiZWxWYWx1ZSBsYWJsZVZhbHVlMSwKKwkJCUxhYmVsVmFsdWUgbGFibGVWYWx1ZTIpIHsKKwkJYm9vbGVhbiByZXRWYWx1ZSA9IHN1cGVyLmNvbXBhcmVMYWJlbFZhbHVlcyhsYWJsZVZhbHVlMSwgbGFibGVWYWx1ZTIpOworCQlmaW5hbCBTSUxhYmVsVmFsdWUgc2lMVjEgPSAoU0lMYWJlbFZhbHVlKSBsYWJsZVZhbHVlMTsKKwkJZmluYWwgU0lMYWJlbFZhbHVlIHNpTFYyID0gKFNJTGFiZWxWYWx1ZSkgbGFibGVWYWx1ZTI7CisKKwkJcmV0VmFsdWUgPSByZXRWYWx1ZQorCQkJCSYmIERpc2Vhc2VNb2RlbFRlc3RVdGlsLmNsb3NlRW5vdWdoKHNpTFYxLmdldFMoKSwgc2lMVjIuZ2V0UygpKTsKKwkJcmV0VmFsdWUgPSByZXRWYWx1ZQorCQkJCSYmIERpc2Vhc2VNb2RlbFRlc3RVdGlsLmNsb3NlRW5vdWdoKHNpTFYxLmdldEkoKSwgc2lMVjIuZ2V0SSgpKTsKKwkJcmV0dXJuIHJldFZhbHVlOworCX0gLy8gY29tcGFyZUxhYmVsVmFsdWVzCisKK30gLy8gU0lEaXNlYXNlTW9kZWxTY2VuYXJpb1Rlc3QKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3N0YW5kYXJkL3Rlc3RzL1NJSW5mZWN0b3JUZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9zdGFuZGFyZC90ZXN0cy9TSUluZmVjdG9yVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMyZTgxMmYKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9zdGFuZGFyZC90ZXN0cy9TSUluZmVjdG9yVGVzdC5qYXZhCkBAIC0wLDAgKzEsOTcgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLnRlc3RzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGp1bml0LnRleHR1aS5UZXN0UnVubmVyOworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlVSSTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuU1RFTVVSSTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguR3JhcGg7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlNJSW5mZWN0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkRmFjdG9yeTsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiBBIHRlc3QgY2FzZSBmb3IgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPlNJIEluZmVjdG9yPC9iPjwvZW0+Jy4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQGdlbmVyYXRlZAorICovCitAU3VwcHJlc3NXYXJuaW5ncygiYWxsIikKK3B1YmxpYyBjbGFzcyBTSUluZmVjdG9yVGVzdCBleHRlbmRzIFN0YW5kYXJkSW5mZWN0b3JUZXN0IHsKKwkKKwlwdWJsaWMgc3RhdGljIGZpbmFsIFVSSSBJTkZFQ1RPUl9VUkkgPSBTVEVNVVJJLmNyZWF0ZVVSSSgiaW5mZWN0b3IvdGVzdEluZmVjdG9yLmRlY29yYXRvciIpOworCQorCQorCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogCisJICogQHBhcmFtIGFyZ3MKKwkgKiAKKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgeworCQlUZXN0UnVubmVyLnJ1bihTSUluZmVjdG9yVGVzdC5jbGFzcyk7CisJfQorCisJLyoqCisJICogQ29uc3RydWN0cyBhIG5ldyBTSSBJbmZlY3RvciB0ZXN0IGNhc2Ugd2l0aCB0aGUgZ2l2ZW4gbmFtZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBwYXJhbSBuYW1lCisJICogCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBTSUluZmVjdG9yVGVzdChTdHJpbmcgbmFtZSkgeworCQlzdXBlcihuYW1lKTsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBmaXh0dXJlIGZvciB0aGlzIFNJIEluZmVjdG9yIHRlc3QgY2FzZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jCisJICogLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgU0lJbmZlY3RvciBnZXRGaXh0dXJlKCkgeworCQlyZXR1cm4gKFNJSW5mZWN0b3IpZml4dHVyZTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZSNzZXRVcCgpCisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgdm9pZCBzZXRVcCgpIHRocm93cyBFeGNlcHRpb24geworCQlTSUluZmVjdG9yIGluZmVjdG9yID0gU3RhbmRhcmRGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVTSUluZmVjdG9yKCk7CisJCS8vIGdldCB0ZXN0IGdyYXBoIGZyb20gYWJzdHJhY3Qgc3VwZXJjbGFzcworCQlHcmFwaCBnID0gZ2V0VGVzdEdyYXBoKCk7CisJCWluZmVjdG9yLnNldEdyYXBoKGcpOworCQkvLyB0YXJnZXQgdGhlIGluZmVjdG9yCisJCWluZmVjdG9yLnNldFRhcmdldElTT0tleShJU09fVEFSR0VUKTsKKwkJCisJCWluZmVjdG9yLnNldFVSSShJTkZFQ1RPUl9VUkkpOworCQlzZXRGaXh0dXJlKGluZmVjdG9yKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZSN0ZWFyRG93bigpCisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIHRlYXJEb3duKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCXNldEZpeHR1cmUobnVsbCk7CisJfQorCit9IC8vIFNJSW5mZWN0b3JUZXN0CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9zdGFuZGFyZC90ZXN0cy9TSUxhYmVsVGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvc3RhbmRhcmQvdGVzdHMvU0lMYWJlbFRlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NmE2NTcxCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvc3RhbmRhcmQvdGVzdHMvU0lMYWJlbFRlc3QuamF2YQpAQCAtMCwwICsxLDEyMyBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQudGVzdHM7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQganVuaXQudGV4dHVpLlRlc3RSdW5uZXI7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLm5vZGVzLlJlZ2lvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU0lMYWJlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU0lMYWJlbFZhbHVlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZEZhY3Rvcnk7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gQSB0ZXN0IGNhc2UgZm9yIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5TSSBMYWJlbDwvYj48L2VtPicuCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBnZW5lcmF0ZWQKKyAqLworQFN1cHByZXNzV2FybmluZ3MoImFsbCIpCitwdWJsaWMgY2xhc3MgU0lMYWJlbFRlc3QgZXh0ZW5kcyBTdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsVGVzdCB7CisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAcGFyYW0gYXJncworCSAqIAorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CisJCVRlc3RSdW5uZXIucnVuKFNJTGFiZWxUZXN0LmNsYXNzKTsKKwl9CisKKwkvKioKKwkgKiBDb25zdHJ1Y3RzIGEgbmV3IFNJIExhYmVsIHRlc3QgY2FzZSB3aXRoIHRoZSBnaXZlbiBuYW1lLiA8IS0tCisJICogYmVnaW4tdXNlci1kb2MgLS0+CisJICogCisJICogQHBhcmFtIG5hbWUKKwkgKiAKKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFNJTGFiZWxUZXN0KFN0cmluZyBuYW1lKSB7CisJCXN1cGVyKG5hbWUpOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIGZpeHR1cmUgZm9yIHRoaXMgU0kgTGFiZWwgdGVzdCBjYXNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCBTSUxhYmVsIGdldEZpeHR1cmUoKSB7CisJCXJldHVybiAoU0lMYWJlbClmaXh0dXJlOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBzZWUganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlI3NldFVwKCkKKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCXByb3RlY3RlZCB2b2lkIHNldFVwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCXNldEZpeHR1cmUoY3JlYXRlRml4dHVyZSgpKTsKKwl9CisKKwkvKioKKwkgKiBAcmV0dXJuIGFuIFNJTGFiZWwgaW5zdGFuY2UKKwkgKi8KKwlwdWJsaWMgc3RhdGljIFNJTGFiZWwgY3JlYXRlRml4dHVyZSgpIHsKKwkJZmluYWwgU0lMYWJlbCByZXRWYWx1ZSA9IFN0YW5kYXJkRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlU0lMYWJlbCgpOworCQlmaW5hbCBSZWdpb24gbm9kZSA9IERpc2Vhc2VNb2RlbFRlc3RVdGlsCisJCQkJLmNyZWF0ZVBvcHVsYXRpb25SZWdpb25Ob2RlKERpc2Vhc2VNb2RlbFRlc3RVdGlsLlRFU1RfUE9QVUxBVElPTl9JREVOVElGSUVSKTsKKworCQlEaXNlYXNlTW9kZWxMYWJlbFRlc3QubGFiZWxSZWdpb24ocmV0VmFsdWUsCisJCQkJRGlzZWFzZU1vZGVsVGVzdFV0aWwuVEVTVF9QT1BVTEFUSU9OX0lERU5USUZJRVIsIG5vZGUpOworCQlyZXR1cm4gcmV0VmFsdWU7CisJfSAvLyBjcmVhdGVGaXh0dXJlCisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZSN0ZWFyRG93bigpCisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIHRlYXJEb3duKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCXNldEZpeHR1cmUobnVsbCk7CisJfQorCisJLyoqCisJICogVGVzdHMgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlNJTGFiZWwjZ2V0Q3VycmVudFNJVmFsdWUoKSA8ZW0+Q3VycmVudCBTSSBWYWx1ZTwvZW0+fScKKwkgKiBmZWF0dXJlIGdldHRlci4gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU0lMYWJlbCNnZXRDdXJyZW50U0lWYWx1ZSgpCisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlwdWJsaWMgdm9pZCB0ZXN0R2V0Q3VycmVudFNJVmFsdWUoKSB7CisJCWZpbmFsIFNJTGFiZWwgc3RhbmRhcmRMYWJlbCA9IGdldEZpeHR1cmUoKTsKKwkJZmluYWwgU0lMYWJlbFZhbHVlIHZhbHVlID0gKFNJTGFiZWxWYWx1ZSlzdGFuZGFyZExhYmVsLmdldEN1cnJlbnRWYWx1ZSgpOworCQlhc3NlcnROb3ROdWxsKHZhbHVlKTsKKwl9IC8vIHRlc3RHZXRDdXJyZW50U0lWYWx1ZQorCisJLyoqCisJICogVGVzdHMgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlNJTGFiZWwjZ2V0TmV4dFNJVmFsdWUoKSA8ZW0+TmV4dCBTSSBWYWx1ZTwvZW0+fScKKwkgKiBmZWF0dXJlIGdldHRlci4gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU0lMYWJlbCNnZXROZXh0U0lWYWx1ZSgpCisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlwdWJsaWMgdm9pZCB0ZXN0R2V0TmV4dFNJVmFsdWUoKSB7CisJCWZpbmFsIFNJTGFiZWwgc3RhbmRhcmRMYWJlbCA9IGdldEZpeHR1cmUoKTsKKwkJZmluYWwgU0lMYWJlbFZhbHVlIHZhbHVlID0gKFNJTGFiZWxWYWx1ZSlzdGFuZGFyZExhYmVsLmdldE5leHRWYWx1ZSgpOworCQlhc3NlcnROb3ROdWxsKHZhbHVlKTsKKwl9IC8vIHRlc3RHZXROZXh0U0lWYWx1ZQorCit9IC8vIFNJTGFiZWxUZXN0CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9zdGFuZGFyZC90ZXN0cy9TSUxhYmVsVmFsdWVUZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9zdGFuZGFyZC90ZXN0cy9TSUxhYmVsVmFsdWVUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzhkNjUyZAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3N0YW5kYXJkL3Rlc3RzL1NJTGFiZWxWYWx1ZVRlc3QuamF2YQpAQCAtMCwwICsxLDE3MCBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQudGVzdHM7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQganVuaXQudGV4dHVpLlRlc3RSdW5uZXI7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU0lMYWJlbFZhbHVlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZEZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuaW1wbC5TSUxhYmVsVmFsdWVJbXBsOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IEEgdGVzdCBjYXNlIGZvciB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+U0kgTGFiZWwgVmFsdWU8L2I+PC9lbT4nLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK0BTdXBwcmVzc1dhcm5pbmdzKCJhbGwiKQorcHVibGljIGNsYXNzIFNJTGFiZWxWYWx1ZVRlc3QgZXh0ZW5kcyBTdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsVmFsdWVUZXN0IHsKKwkvKioKKwkgKiBUZXN0IHZhbHVlIGZvciBpbmZlY3Rpb3VzCisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBkb3VibGUgVEVTVF9JID0gMjsKKworCS8qKgorCSAqIFRlc3QgdmFsdWUgZm9yIGluZmVjdGlvdXMKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIGRvdWJsZSBURU1QX1RFU1RfSSA9IFRFU1RfSSArIDIwOworCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAcGFyYW0gYXJncworCSAqIAorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CisJCVRlc3RSdW5uZXIucnVuKFNJTGFiZWxWYWx1ZVRlc3QuY2xhc3MpOworCX0KKworCS8qKgorCSAqIENvbnN0cnVjdHMgYSBuZXcgU0kgTGFiZWwgVmFsdWUgdGVzdCBjYXNlIHdpdGggdGhlIGdpdmVuIG5hbWUuIDwhLS0KKwkgKiBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAcGFyYW0gbmFtZQorCSAqIAorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgU0lMYWJlbFZhbHVlVGVzdChTdHJpbmcgbmFtZSkgeworCQlzdXBlcihuYW1lKTsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBmaXh0dXJlIGZvciB0aGlzIFNJIExhYmVsIFZhbHVlIHRlc3QgY2FzZS4gPCEtLQorCSAqIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIFNJTGFiZWxWYWx1ZSBnZXRGaXh0dXJlKCkgeworCQlyZXR1cm4gKFNJTGFiZWxWYWx1ZSlmaXh0dXJlOworCX0KKworCUBTdXBwcmVzc1dhcm5pbmdzKCJ1bnVzZWQiKQorCXByaXZhdGUgU0lMYWJlbFZhbHVlIGdldFRlbXBGaXh0dXJlKCkgeworCQlyZXR1cm4gKFNJTGFiZWxWYWx1ZSkgdGVtcEZpeHR1cmU7CisJfSAvLyBnZXRUZW1wRml4dHVyZQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogCisJICogQHNlZSBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2Ujc2V0VXAoKQorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJcHJvdGVjdGVkIHZvaWQgc2V0VXAoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJc2V0Rml4dHVyZShjcmVhdGVGaXh0dXJlKCkpOworCQlzZXRUZW1wRml4dHVyZShjcmVhdGVUZW1wRml4dHVyZSgpKTsKKwl9IC8vIHNldFVwCisKKwkvKioKKwkgKiBAcmV0dXJuIGEgdmFsdWUgZm9yIHRlc3RpbmcKKwkgKi8KKwlwdWJsaWMgc3RhdGljIFNJTGFiZWxWYWx1ZSBjcmVhdGVGaXh0dXJlKCkgeworCQlmaW5hbCBTSUxhYmVsVmFsdWVJbXBsIHJldFZhbHVlID0gbmV3IFNJTGFiZWxWYWx1ZUltcGwoVEVTVF9TLCBURVNUX0ksCisJCQkJVEVTVF9ESVNFQVNFX0RFQVRIUyk7CisJCXJldHVybiByZXRWYWx1ZTsKKwl9IC8vIGNyZWF0ZUZpeHR1cmUKKworCUBPdmVycmlkZQorCXByb3RlY3RlZCBEaXNlYXNlTW9kZWxMYWJlbFZhbHVlIGNyZWF0ZVRlbXBGaXh0dXJlKCkgeworCQlmaW5hbCBTSUxhYmVsVmFsdWVJbXBsIHJldFZhbHVlID0gbmV3IFNJTGFiZWxWYWx1ZUltcGwoVEVNUF9URVNUX1MsCisJCQkJVEVNUF9URVNUX0ksCisJCQkJVEVNUF9URVNUX0RJU0VBU0VfREVBVEhTKTsKKwkJcmV0dXJuIHJldFZhbHVlOworCX0gLy8gY3JlYXRlVGVtcEZpeHR1cmUKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBzZWUganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlI3RlYXJEb3duKCkKKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCXByb3RlY3RlZCB2b2lkIHRlYXJEb3duKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCXNldEZpeHR1cmUobnVsbCk7CisJCXNldFRlbXBGaXh0dXJlKG51bGwpOworCX0gLy8gdGVhckRvd24KKworCS8qKgorCSAqIFRlc3RzIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TSUxhYmVsVmFsdWUjZ2V0SSgpIDxlbT5JPC9lbT59JworCSAqIGZlYXR1cmUgZ2V0dGVyLiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TSUxhYmVsVmFsdWUjZ2V0SSgpCisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlwdWJsaWMgdm9pZCB0ZXN0R2V0SSgpIHsKKwkJZmluYWwgU0lMYWJlbFZhbHVlIHNpTGFiZWxWYWx1ZSA9IGdldEZpeHR1cmUoKTsKKwkJYXNzZXJ0VHJ1ZShzaUxhYmVsVmFsdWUuZ2V0SSgpID09IFRFU1RfSSk7CisJfSAvLyB0ZXN0R2V0SQorCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIFN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZSBnZXRFeHBlY3RlZENvbnZlcnRUb1NvdXJjZVN0YXRlcygKKwkJCVN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZSBmaXh0dXJlKSB7CisJCWZpbmFsIFNJTGFiZWxWYWx1ZSBzaUxhYmVsID0gKFNJTGFiZWxWYWx1ZSkgZml4dHVyZTsKKwkJcmV0dXJuIG5ldyBTSUxhYmVsVmFsdWVJbXBsKHNpTGFiZWwuZ2V0SSgpLCBzaUxhYmVsLmdldFMoKSwgMC4wLAorCQkJCSBzaUxhYmVsCisJCQkJCQkuZ2V0RGlzZWFzZURlYXRocygpKTsKKwl9IC8vIGdldEV4cGVjdGVkQ29udmVydFRvU291cmNlU3RhdGVzCisKKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZSBnZXRFeHBlY3RlZEZpeHR1cmVBZGRpdGlvblJlc3VsdCgKKwkJCURpc2Vhc2VNb2RlbExhYmVsVmFsdWUgZml4dHVyZTEsIERpc2Vhc2VNb2RlbExhYmVsVmFsdWUgZml4dHVyZTIpIHsKKwkJZmluYWwgU0lMYWJlbFZhbHVlIHNpTGFiZWwxID0gKFNJTGFiZWxWYWx1ZSkgZml4dHVyZTE7CisJCWZpbmFsIFNJTGFiZWxWYWx1ZSBzaUxhYmVsMiA9IChTSUxhYmVsVmFsdWUpIGZpeHR1cmUyOworCQlyZXR1cm4gbmV3IFNJTGFiZWxWYWx1ZUltcGwoc2lMYWJlbDEuZ2V0UygpICsgc2lMYWJlbDIuZ2V0UygpLCBzaUxhYmVsMQorCQkJCS5nZXRJKCkKKwkJCQkrIHNpTGFiZWwyLmdldEkoKSwKKwkJCQlzaUxhYmVsMS5nZXREaXNlYXNlRGVhdGhzKCkKKwkJCQkJCSsgc2lMYWJlbDIuZ2V0RGlzZWFzZURlYXRocygpKTsKKwl9IC8vIGdldEV4cGVjdGVkRml4dHVyZUFkZGl0aW9uUmVzdWx0CisKKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZSBnZXRFeHBlY3RlZEZpeHR1cmVTdWJ0cmFjdGlvblJlc3VsdCgKKwkJCURpc2Vhc2VNb2RlbExhYmVsVmFsdWUgZml4dHVyZTEsIERpc2Vhc2VNb2RlbExhYmVsVmFsdWUgZml4dHVyZTIpIHsKKwkJZmluYWwgU0lMYWJlbFZhbHVlIHNpTGFiZWwxID0gKFNJTGFiZWxWYWx1ZSkgZml4dHVyZTE7CisJCWZpbmFsIFNJTGFiZWxWYWx1ZSBzaUxhYmVsMiA9IChTSUxhYmVsVmFsdWUpIGZpeHR1cmUyOworCQlyZXR1cm4gbmV3IFNJTGFiZWxWYWx1ZUltcGwoc2lMYWJlbDEuZ2V0UygpIC0gc2lMYWJlbDIuZ2V0UygpLCBzaUxhYmVsMQorCQkJCS5nZXRJKCkKKwkJCQktIHNpTGFiZWwyLmdldEkoKSwgCisJCQkJc2lMYWJlbDEuZ2V0RGlzZWFzZURlYXRocygpCisJCQkJCQktIHNpTGFiZWwyLmdldERpc2Vhc2VEZWF0aHMoKSk7CisJfSAvLyBnZXRFeHBlY3RlZEZpeHR1cmVTdWJ0cmFjdGlvblJlc3VsdAorCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIGRvdWJsZSBnZXRFeHBlY3RlZFBvcHVsYXRpb25Db3VudChEaXNlYXNlTW9kZWxMYWJlbFZhbHVlIGZpeHR1cmUpIHsKKwkJZmluYWwgU0lMYWJlbFZhbHVlIHNpTGFiZWwgPSAoU0lMYWJlbFZhbHVlKSBmaXh0dXJlOworCQlyZXR1cm4gc2lMYWJlbC5nZXRTKCkgKyBzaUxhYmVsLmdldEkoKTsKKwl9IC8vIGdldEV4cGVjdGVkUG9wdWxhdGlvbkNvdW50CisKK30gLy8gU0lMYWJlbFZhbHVlVGVzdApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvc3RhbmRhcmQvdGVzdHMvU0lMYWJlbFZhbHVlVGVzdFV0aWwuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3N0YW5kYXJkL3Rlc3RzL1NJTGFiZWxWYWx1ZVRlc3RVdGlsLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGNmM2I5MAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3N0YW5kYXJkL3Rlc3RzL1NJTGFiZWxWYWx1ZVRlc3RVdGlsLmphdmEKQEAgLTAsMCArMSwyMTEgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLnRlc3RzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA5IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGphdmEudXRpbC5MaW5rZWRMaXN0OworaW1wb3J0IGphdmEudXRpbC5MaXN0OworaW1wb3J0IGphdmEudXRpbC5SYW5kb207CisKK2ltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguTm9kZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguaW1wbC5Ob2RlSW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuaW1wbC5TSUxhYmVsSW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuaW1wbC5TSUxhYmVsVmFsdWVJbXBsOworCitwdWJsaWMgYWJzdHJhY3QgY2xhc3MgU0lMYWJlbFZhbHVlVGVzdFV0aWwgZXh0ZW5kcyBUZXN0Q2FzZXsKKwkKKwkvKioKKwkgKiBOdW1iZXIgb2YgcmFuZG9tIHZhbHVlcyB0byB0ZXN0IHdpdGgKKwkgKi8KKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgTlVNQkVSX09GX1JBTkRPTVMgPSAwOworCisJLyoqCisJICogbWF4IGRvdWJsZSB2YWx1ZSB0byBiZSB1c2VkIGluIHRoZSB0ZXN0CisJICovCisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgZG91YmxlIFRFU1RfTUFYX0RPVUJMRV9WQUxVRSA9IDFlMTJkOworCisJLyoqCisJICogbWF4IGxvbmcgdmFsdWUgdG8gYmUgdXNlZCBpbiB0aGUgdGVzdAorCSAqLworCXByaXZhdGUgc3RhdGljIGZpbmFsIGxvbmcgVEVTVF9NQVhfTE9OR19WQUxVRSA9IExvbmcuTUFYX1ZBTFVFOworCisJLyoqCisJICogaWYgdGhlcmUgaXMgYSBzeXN0ZW0gcHJvcGVydHkgd2l0aCB0aGlzIHZhbHVlIHRoZW4gdGhlIHRlc3Qgd2lsbCBiZSBjb21wZXJoZW5zaXZlLiBJZiBub3QKKwkgKiB0aGVuIHRoZSB0ZXN0IHdpbGwgY2hlY2sgb25seSBmZXcgY2FzZXMuCisJICovCisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIENPTVBFUkhBTlNJVkVfVEVTVCA9ICJjb21wZXJoZW5zaXZlLnRlc3QiOworCisJcHJpdmF0ZSBzdGF0aWMgQm9vbGVhbiBjb21wZXJoZW5zaXZlID0gbnVsbDsKKwkKKwkvKioKKwkgKiBUaGlzIG1ldGhvZCByZXR1cm5zIGEgbGlzdCBvZiB7QGxpbmsgU0lMYWJlbFZhbHVlSW1wbH0gb2JqZWN0cy4KKwkgKiBTb21lIG9iamVjdHMgaW4gdGhlIGxpc3QgYXJlIHJhbmRvbSBhbmQgc29tZSBub3QgcmFuZG9tIGF0IGFsbC4KKwkgKiBUaGUgb25lcyB0aGF0IGFyZSBub3QgcmFuZG9tIHJlcHJlc2VudHMgZXh0cmVtZSBjYXNlcy4KKwkgKiBUaGUgbnVtZXJpYyB2YWx1ZXMgZm9yIHRoZSBleHRyZW1lIGNhc2VzIGFyZSAwLjAsIE1BWF9ET1VCTEUsIGFuZCBJIGFkZGVkIHRoZSBudW1iZXIgMS4wLiAKKwkgKiBUaGUgbnVtYmVyIG9mIHJhbmRvbSBudW1iZXJzIHRvIHRlc3Qgd2l0aCBpcyBOVU1CRVJfT0ZfUkFORE9NUy4KKwkgKiBOb3RlIHRoYXQgd2l0aCBOVU1CRVJfT0ZfUkFORE9NUyA9IDAgeW91IHdpbGwgaGF2ZSA0Mzc0IHBlcm11dGF0aW9ucyBvZiBhbGwgdmFsdWVzIG9mIHtAU0lMYWJlbFZhbHVlSW1wbH0uCisJICogSWYgeW91IHdpc2ggdG8gbWFrZSBOVU1CRVJfT0ZfUkFORE9NUyBoaWdoZXIgdGhlbiAwIHRoZW4gYmUgcmVhZHkgZm9yIGEgbG9uZyB0ZXN0IDotKQorCSAqLworCXB1YmxpYyBzdGF0aWMgTGlzdDxTSUxhYmVsVmFsdWVJbXBsPiBjcmVhdGVSYW5kb21TSUxhYmVsVmFsdWVJbXBsKCl7CisJCVJhbmRvbSByYW5kb20gPSBuZXcgUmFuZG9tKCk7CisJCWRvdWJsZVtdIHZhbHVlcyA9IG5ldyBkb3VibGVbMyArIE5VTUJFUl9PRl9SQU5ET01TXTsKKwkJdmFsdWVzWzBdID0gMC4wZDsKKwkJdmFsdWVzWzFdID0gVEVTVF9NQVhfRE9VQkxFX1ZBTFVFOworCSAgICB2YWx1ZXNbMl0gPSAxLjBkOworCQlmb3IoaW50IGkgPSAodmFsdWVzLmxlbmd0aCArIDEpOyBpIDwgdmFsdWVzLmxlbmd0aDsgaSsrKXsKKwkJCXZhbHVlc1tpXSA9IHJhbmRvbS5uZXh0RG91YmxlKCkgKiBURVNUX01BWF9ET1VCTEVfVkFMVUU7CisJCX0KKwkJTGlzdDxTSUxhYmVsVmFsdWVJbXBsPiBtb2RlbExldmVsVmFsdWVzID0gbmV3IExpbmtlZExpc3Q8U0lMYWJlbFZhbHVlSW1wbD4oKTsKKwkJaW50IGl0ZXJhdGlvbiA9IDA7CisJCWZvcihkb3VibGUgcyA6IHZhbHVlcyl7CisJCQlmb3IoZG91YmxlIGUgOiB2YWx1ZXMpeworCQkJCWZvcihkb3VibGUgaSA6IHZhbHVlcyl7CisJCQkJCWZvcihkb3VibGUgciA6IHZhbHVlcyl7CisJCQkJCQlmb3IoZG91YmxlIGJpcnRocyA6IHZhbHVlcyl7CisJCQkJCQkJZm9yKGRvdWJsZSBkZWF0aHMgOiB2YWx1ZXMpeworCQkJCQkJCQlmb3IoZG91YmxlIGRpc2Vhc2VEZWF0aHMgOiB2YWx1ZXMpeworCQkJCQkJCQkJaWYoZGlzZWFzZURlYXRocyA+IGRlYXRocyl7CisJCQkJCQkJCQkJY29udGludWU7CisJCQkJCQkJCQl9CisJCQkJCQkJCQlpZihza2lwVmFsdWVTZXQoaXRlcmF0aW9uKyssIGRpc2Vhc2VEZWF0aHMsIGRlYXRocywgcywgZSwgaSwgcikpeworCQkJCQkJCQkJCWNvbnRpbnVlOworCQkJCQkJCQkJfQorCQkJCQkJCQkJU0lMYWJlbFZhbHVlSW1wbCBtb2RlbExhYmxlVmFsdWUgPSBuZXcgU0lMYWJlbFZhbHVlSW1wbChzLCBpLAlkaXNlYXNlRGVhdGhzKTsKKwkJCQkJCQkJCWFzc2VydFRydWUoIlRoZSBTSUxhYmVsVmFsdWVJbXBsOiAiICsgbW9kZWxMYWJsZVZhbHVlICsgIiBpcyBpbnNhbmUhIiwgbW9kZWxMYWJsZVZhbHVlLnNhbmUoKSk7CisJCQkJCQkJCQltb2RlbExldmVsVmFsdWVzLmFkZChtb2RlbExhYmxlVmFsdWUpOworCQkJCQkJCQkJU3lzdGVtLm91dC5wcmludGxuKG1vZGVsTGV2ZWxWYWx1ZXMuc2l6ZSgpKTsKKwkJCQkJCQkJfQorCQkJCQkJCX0KKwkJCQkJCX0KKwkJCQkJfQorCQkJCX0KKwkJCX0KKwkJfQorCQlyZXR1cm4gbW9kZWxMZXZlbFZhbHVlczsKKwl9CisJCisJcHJpdmF0ZSBzdGF0aWMgYm9vbGVhbiBza2lwVmFsdWVTZXQoZG91YmxlIGl0ZXJhdGlvbiwgZG91YmxlIGRpc2Vhc2VEZWF0aHMsIGRvdWJsZSBkZWF0aHMsIGRvdWJsZSBzLCBkb3VibGUgZSwgZG91YmxlIGksZG91YmxlIHIpIHsKKwkJaWYoIWlzQ29tcGVyaGVuc2l2ZSgpKXsKKwkJCWlmKGl0ZXJhdGlvbiAlIDUwMCA+IDEpeworCQkJCS8vZG8gb25seSBvbmUgb2YgYW55IDUwMCBwZXJtdXRhdGlvbnMKKwkJCQlTeXN0ZW0ub3V0LnByaW50KCIuIik7CisJCQkJcmV0dXJuIHRydWU7CisJCQl9CisJCX0KKwkJaWYoZGlzZWFzZURlYXRocyA+IGRlYXRocyl7CisJCQlyZXR1cm4gdHJ1ZTsKKwkJfQorCQlkb3VibGUgcG9wdWxhdGlvbiA9IHMgKyBpICsgcjsKKwkJaWYoZGVhdGhzID4gcG9wdWxhdGlvbil7CisJCQlyZXR1cm4gdHJ1ZTsKKwkJfQorCQlpZihkaXNlYXNlRGVhdGhzID4gcG9wdWxhdGlvbil7CisJCQlyZXR1cm4gdHJ1ZTsKKwkJfQorCQlyZXR1cm4gZmFsc2U7CisJfQorCQorCXByaXZhdGUgc3RhdGljIGJvb2xlYW4gaXNDb21wZXJoZW5zaXZlKCkgeworCQlpZihudWxsICE9IGNvbXBlcmhlbnNpdmUgKXsKKwkJCXJldHVybiBjb21wZXJoZW5zaXZlLmJvb2xlYW5WYWx1ZSgpOworCQl9CisJCVN0cmluZyBjb21wZXJoZW5zaXZlUHJvcGVydHkgPSBTeXN0ZW0uZ2V0UHJvcGVydHkoQ09NUEVSSEFOU0lWRV9URVNUKTsKKwkJaWYobnVsbCAhPSBjb21wZXJoZW5zaXZlUHJvcGVydHkpeworCQkJY29tcGVyaGVuc2l2ZVByb3BlcnR5ID0gY29tcGVyaGVuc2l2ZVByb3BlcnR5LnRyaW0oKTsKKwkJCWlmKGNvbXBlcmhlbnNpdmVQcm9wZXJ0eS5lcXVhbHNJZ25vcmVDYXNlKCJ5ZXMiKSB8fCBjb21wZXJoZW5zaXZlUHJvcGVydHkuZXF1YWxzSWdub3JlQ2FzZSgidHJ1ZSIpKXsJCQkKKwkJCQljb21wZXJoZW5zaXZlID0gbmV3IEJvb2xlYW4odHJ1ZSk7CisJCQl9CisJCX0KKwkJaWYobnVsbCA9PSBjb21wZXJoZW5zaXZlICl7CisJCQljb21wZXJoZW5zaXZlID0gbmV3IEJvb2xlYW4oZmFsc2UpOworCQl9CisJCXJldHVybiBjb21wZXJoZW5zaXZlLmJvb2xlYW5WYWx1ZSgpOworCX0KKwkvKioKKwkgKiBDbG9uZSB0aGUgU0lMYWJlbFZhbHVlSW1wbAorCSAqIEBwYXJhbSBvcmlnaW5hbCB3aWxsIG5vdCBiZSBtb2RlZmlsZXMKKwkgKiBAcmV0dXJuIGEgY2xvbmUgb2YgJ29yaWdpbmFsJworCSAqLworCXB1YmxpYyBzdGF0aWMgU0lMYWJlbFZhbHVlSW1wbCBjbG9uZVNJTGFiZWxWYWx1ZUltcGwoU0lMYWJlbFZhbHVlSW1wbCBvcmlnaW5hbCl7CisJCVNJTGFiZWxWYWx1ZUltcGwgdmFsdWUgPSAgbmV3IFNJTGFiZWxWYWx1ZUltcGwob3JpZ2luYWwuZ2V0UygpLCBvcmlnaW5hbC5nZXRJKCksIAorCQkJCW9yaWdpbmFsLmdldERpc2Vhc2VEZWF0aHMoKSk7CisJCXJldHVybiB2YWx1ZTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIG1ldGhvZCByZXR1cm5zIGEgbGlzdCBvZiB7QGxpbmsgU0lMYWJlbEltcGx9IG9iamVjdHMuCisJICogU29tZSBvYmplY3RzIGluIHRoZSBsaXN0IGFyZSByYW5kb20gYW5kIHNvbWUgbm90IHJhbmRvbSBhdCBhbGwuCisJICogVGhlIG9uZXMgdGhhdCBhcmUgbm90IHJhbmRvbSByZXByZXNlbnRzIGV4dHJlbWUgY2FzZXMuCisJICogVGhlIG51bWVyaWMgdmFsdWVzIGZvciB0aGUgZXh0cmVtZSBjYXNlcyBhcmUgMC4wLCBNQVhfRE9VQkxFLCBhbmQgSSBhZGRlZCB0aGUgbnVtYmVyIDEuMC4gCisJICogVGhlIG51bWJlciBvZiByYW5kb20gbnVtYmVycyB0byB0ZXN0IHdpdGggaXMgTlVNQkVSX09GX1JBTkRPTVMuCisJICogTm90ZSB0aGF0IHdpdGggTlVNQkVSX09GX1JBTkRPTVMgPSAwIHlvdSB3aWxsIGhhdmUgNDM3NCBwZXJtdXRhdGlvbnMgb2YgYWxsIHZhbHVlcyBvZiB7U0lMYWJlbEltcGx9LgorCSAqIElmIHlvdSB3aXNoIHRvIG1ha2UgTlVNQkVSX09GX1JBTkRPTVMgaGlnaGVyIHRoZW4gMCB0aGVuIGJlIHJlYWR5IGZvciBhIGxvbmcgdGVzdCA6LSkKKwkgKiAKKwkgKi8KKwlwdWJsaWMgTGlzdDxTSUxhYmVsSW1wbD4gY3JlYXRlUmFuZG9tU0lMYWJlbEltcGwoKXsKKwkJUmFuZG9tIHJhbmRvbSA9IG5ldyBSYW5kb20oKTsKKwkJZG91YmxlW10gdmFsdWVzID0gbmV3IGRvdWJsZVszICsgTlVNQkVSX09GX1JBTkRPTVNdOworCQl2YWx1ZXNbMF0gPSAwLjBkOworCQl2YWx1ZXNbMV0gPSBURVNUX01BWF9ET1VCTEVfVkFMVUU7CisJCXZhbHVlc1syXSA9IDEuMGQ7CisJCWZvcihpbnQgaSA9IDM7IGkgPCB2YWx1ZXMubGVuZ3RoOyBpKyspeworCQkJdmFsdWVzW2ldID0gcmFuZG9tLm5leHREb3VibGUoKSAqIFRFU1RfTUFYX0RPVUJMRV9WQUxVRTsKKwkJfQorCQlMaXN0PFNJTGFiZWxJbXBsPiBtb2RlbExldmVsVmFsdWVzID0gbmV3IExpbmtlZExpc3Q8U0lMYWJlbEltcGw+KCk7CisJCWludCBpdGVyYXRpb24gPSAwOworCQlmb3IoZG91YmxlIHMgOiB2YWx1ZXMpeworCQkJZm9yKGRvdWJsZSBlIDogdmFsdWVzKXsKKwkJCQlmb3IoZG91YmxlIGkgOiB2YWx1ZXMpeworCQkJCQlmb3IoZG91YmxlIHIgOiB2YWx1ZXMpeworCQkJCQkJZm9yKGRvdWJsZSBiaXJ0aHMgOiB2YWx1ZXMpeworCQkJCQkJCWZvcihkb3VibGUgZGVhdGhzIDogdmFsdWVzKXsKKwkJCQkJCQkJZm9yKGRvdWJsZSBkaXNlYXNlRGVhdGhzIDogdmFsdWVzKXsKKwkJCQkJCQkJCWlmKHNraXBWYWx1ZVNldChpdGVyYXRpb24rKywgZGlzZWFzZURlYXRocywgZGVhdGhzLCBzLCBlLCBpLCByKSl7CisJCQkJCQkJCQkJY29udGludWU7CisJCQkJCQkJCQl9CisJCQkJCQkJCQkKKwkJCQkJCQkJCQorCQkJCQkJCQkJU0lMYWJlbFZhbHVlVGVzdCBsYWJlbFZhbHVlVGVzdCA9IG5ldyBTSUxhYmVsVmFsdWVUZXN0KCJTRUlSTGFiZWxWYWx1ZVRlc3QiKTsKKwkJCQkJCQkJCVNJTGFiZWxWYWx1ZUltcGwgbGFiZWxWYWx1ZSA9IChTSUxhYmVsVmFsdWVJbXBsKWxhYmVsVmFsdWVUZXN0LmdldEZpeHR1cmUoKTsKKwkJCQkJCQkJCWxhYmVsVmFsdWUuc2V0UyhzKTsKKwkJCQkJCQkJCWxhYmVsVmFsdWUuc2V0SShzKTsKKwkJCQkJCQkJCWxhYmVsVmFsdWUuc2V0RGlzZWFzZURlYXRocyhkaXNlYXNlRGVhdGhzKTsKKwkJCQkJCQkJCWFzc2VydFRydWUoIlRoZSBTSUxhYmVsVmFsdWU6ICIgKyBsYWJlbFZhbHVlICsgIiBpcyBpbnNhbmUhIiwgbGFiZWxWYWx1ZS5zYW5lKCkpOworCQkJCQkJCQkJLy8gcHV0IHRoZSB2YWx1ZSBpbiBhIGxhYmVsCisJCQkJCQkJCQlTSUxhYmVsVGVzdCBsYWJlbFRlc3QgPSBuZXcgU0lMYWJlbFRlc3QoIlNFSVJMYWJlbFRlc3QiKTsKKwkJCQkJCQkJCVNJTGFiZWxJbXBsIGxhYmVsID0gKFNJTGFiZWxJbXBsKWxhYmVsVGVzdC5nZXRGaXh0dXJlKCk7CisJCQkJCQkJCQlsYWJlbC5zZXRDdXJyZW50VmFsdWUobGFiZWxWYWx1ZSk7CisJCQkJCQkJCQltb2RlbExldmVsVmFsdWVzLmFkZChsYWJlbCk7CisJCQkJCQkJCQkKKwkJCQkJCQkJfQorCQkJCQkJCX0KKwkJCQkJCX0KKwkJCQkJfQorCQkJCX0KKwkJCX0KKwkJfQorCQlyZXR1cm4gbW9kZWxMZXZlbFZhbHVlczsKKwl9CisJCisJcHVibGljIGxvbmdbXSBjcmVhdGVyYW5kb21EZWx0YXMoKSB7CisJCVJhbmRvbSByYW5kb20gPSBuZXcgUmFuZG9tKCk7CisJCWxvbmdbXSB2YWx1ZXMgPSBuZXcgbG9uZ1syICsgTlVNQkVSX09GX1JBTkRPTVNdOworCQl2YWx1ZXNbMF0gPSBURVNUX01BWF9MT05HX1ZBTFVFOworCQl2YWx1ZXNbMV0gPSAxbDsKKwkJZm9yKGludCBpID0gMzsgaSA8IHZhbHVlcy5sZW5ndGg7IGkrKyl7CisJCQl2YWx1ZXNbaV0gPSByYW5kb20ubmV4dExvbmcoKSAqIFRFU1RfTUFYX0xPTkdfVkFMVUU7CisJCX0KKwkJcmV0dXJuIHZhbHVlczsKKwl9CisJCit9CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9zdGFuZGFyZC90ZXN0cy9TSVJEaXNlYXNlTW9kZWxTY2VuYXJpb1Rlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3N0YW5kYXJkL3Rlc3RzL1NJUkRpc2Vhc2VNb2RlbFNjZW5hcmlvVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBhZGQ2MjUKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9zdGFuZGFyZC90ZXN0cy9TSVJEaXNlYXNlTW9kZWxTY2VuYXJpb1Rlc3QuamF2YQpAQCAtMCwwICsxLDIxIEBACisvLyBTSVJEaXNlYXNlTW9kZWxTY2VuYXJpb1Rlc3QuamF2YQorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQudGVzdHM7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioKKyAqIFRoaXMgY2xhc3MgaXMgYSBKVW5pdCB0ZXN0IGNhc2UgZm9yIFNJUiBEaXNlYXNlIE1vZGVscyBTY2VuYXJpb3MKKyAqLworcHVibGljIGFic3RyYWN0IGNsYXNzIFNJUkRpc2Vhc2VNb2RlbFNjZW5hcmlvVGVzdCBleHRlbmRzCisJCVNJRGlzZWFzZU1vZGVsU2NlbmFyaW9UZXN0IHsKKwkvLyBOb3RoaW5nCit9Ly8gU0lSRGlzZWFzZU1vZGVsU2NlbmFyaW9UZXN0CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9zdGFuZGFyZC90ZXN0cy9TSVJJbm9jdWxhdG9yVGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvc3RhbmRhcmQvdGVzdHMvU0lSSW5vY3VsYXRvclRlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMmI5YTY1Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvc3RhbmRhcmQvdGVzdHMvU0lSSW5vY3VsYXRvclRlc3QuamF2YQpAQCAtMCwwICsxLDk1IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC50ZXN0czsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqdW5pdC50ZXh0dWkuVGVzdFJ1bm5lcjsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5VUkk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLlNURU1VUkk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkdyYXBoOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TSVJJbm9jdWxhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZEZhY3Rvcnk7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIEEgdGVzdCBjYXNlIGZvciB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+U0lSIElub2N1bGF0b3I8L2I+PC9lbT4nLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK0BTdXBwcmVzc1dhcm5pbmdzKCJhbGwiKQorcHVibGljIGNsYXNzIFNJUklub2N1bGF0b3JUZXN0IGV4dGVuZHMgU0lJbmZlY3RvclRlc3QgeworCisJcHVibGljIHN0YXRpYyBmaW5hbCBVUkkgSU5PQ1VMQVRPUl9VUkkgPSBTVEVNVVJJLmNyZWF0ZVVSSSgiaW5ub2N1bGF0b3IvdGVzdElub2N1bGF0b3IuZGVjb3JhdG9yIik7CisJCisJCisJCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgeworCQlUZXN0UnVubmVyLnJ1bihTSVJJbm9jdWxhdG9yVGVzdC5jbGFzcyk7CisJfQorCisJLyoqCisJICogQ29uc3RydWN0cyBhIG5ldyBTSVIgSW5vY3VsYXRvciB0ZXN0IGNhc2Ugd2l0aCB0aGUgZ2l2ZW4gbmFtZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgU0lSSW5vY3VsYXRvclRlc3QoU3RyaW5nIG5hbWUpIHsKKwkJc3VwZXIobmFtZSk7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgZml4dHVyZSBmb3IgdGhpcyBTSVIgSW5vY3VsYXRvciB0ZXN0IGNhc2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIFNJUklub2N1bGF0b3IgZ2V0Rml4dHVyZSgpIHsKKwkJcmV0dXJuIChTSVJJbm9jdWxhdG9yKWZpeHR1cmU7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZSNzZXRVcCgpCisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgdm9pZCBzZXRVcCgpIHRocm93cyBFeGNlcHRpb24geworCQlTSVJJbm9jdWxhdG9yIGlubm9jdWxhdG9yID0gU3RhbmRhcmRGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVTSVJJbm9jdWxhdG9yKCk7CisJCS8vIGdldCB0ZXN0IGdyYXBoIGZyb20gYWJzdHJhY3Qgc3VwZXJjbGFzcworCQlHcmFwaCBnID0gZ2V0VGVzdEdyYXBoKCk7CisJCWlubm9jdWxhdG9yLnNldEdyYXBoKGcpOworCQkKKwkJLy8gdGFyZ2V0IHRoZSBpbm5vY3VsYXRvcgorCQlpbm5vY3VsYXRvci5zZXRUYXJnZXRJU09LZXkoSVNPX1RBUkdFVCk7CisJCWlubm9jdWxhdG9yLnNldFVSSShJTk9DVUxBVE9SX1VSSSk7CisJCXNldEZpeHR1cmUoaW5ub2N1bGF0b3IpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2UjdGVhckRvd24oKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgdm9pZCB0ZWFyRG93bigpIHRocm93cyBFeGNlcHRpb24geworCQlzZXRGaXh0dXJlKG51bGwpOworCX0KKworfSAvL1NJUklub2N1bGF0b3JUZXN0CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9zdGFuZGFyZC90ZXN0cy9TSVJMYWJlbFRlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3N0YW5kYXJkL3Rlc3RzL1NJUkxhYmVsVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIxMTcwNjcKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9zdGFuZGFyZC90ZXN0cy9TSVJMYWJlbFRlc3QuamF2YQpAQCAtMCwwICsxLDExMSBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQudGVzdHM7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQganVuaXQudGV4dHVpLlRlc3RSdW5uZXI7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLm5vZGVzLlJlZ2lvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU0lSTGFiZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlNJUkxhYmVsVmFsdWU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwuZGVjb3JhdG9ycy5EZWNvcmF0b3JzRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwuZGVjb3JhdG9ycy5UZXN0Tm9kZURlY29yYXRvcjE7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gQSB0ZXN0IGNhc2UgZm9yIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5TSVIgTGFiZWw8L2I+PC9lbT4nLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK0BTdXBwcmVzc1dhcm5pbmdzKCJhbGwiKQorcHVibGljIGNsYXNzIFNJUkxhYmVsVGVzdCBleHRlbmRzIFN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWxUZXN0IHsKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBwYXJhbSBhcmdzCisJICogCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKKwkJVGVzdFJ1bm5lci5ydW4oU0lSTGFiZWxUZXN0LmNsYXNzKTsKKwl9CisKKwkvKioKKwkgKiBDb25zdHJ1Y3RzIGEgbmV3IFNJUiBMYWJlbCB0ZXN0IGNhc2Ugd2l0aCB0aGUgZ2l2ZW4gbmFtZS4gPCEtLQorCSAqIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBwYXJhbSBuYW1lCisJICogCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBTSVJMYWJlbFRlc3QoU3RyaW5nIG5hbWUpIHsKKwkJc3VwZXIobmFtZSk7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgZml4dHVyZSBmb3IgdGhpcyBTSVIgTGFiZWwgdGVzdCBjYXNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCBTSVJMYWJlbCBnZXRGaXh0dXJlKCkgeworCQlyZXR1cm4gKFNJUkxhYmVsKWZpeHR1cmU7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogCisJICogQHNlZSBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2Ujc2V0VXAoKQorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgc2V0VXAoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJc2V0Rml4dHVyZShjcmVhdGVGaXh0dXJlKCkpOworCX0gLy8gc2V0VXAKKworCS8qKgorCSAqIEByZXR1cm4gYW4gU0lSTGFiZWwgaW5zdGFuY2UKKwkgKi8KKwlwdWJsaWMgc3RhdGljIFNJUkxhYmVsIGNyZWF0ZUZpeHR1cmUoKSB7CisJCWZpbmFsIFNJUkxhYmVsIHJldFZhbHVlID0gU3RhbmRhcmRGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVTSVJMYWJlbCgpOworCQlmaW5hbCBSZWdpb24gbm9kZSA9IERpc2Vhc2VNb2RlbFRlc3RVdGlsCisJCQkJLmNyZWF0ZVBvcHVsYXRpb25SZWdpb25Ob2RlKERpc2Vhc2VNb2RlbFRlc3RVdGlsLlRFU1RfUE9QVUxBVElPTl9JREVOVElGSUVSKTsKKworCQlmaW5hbCBUZXN0Tm9kZURlY29yYXRvcjEgdG5kID0gRGVjb3JhdG9yc0ZhY3RvcnkuZUlOU1RBTkNFCisJCQkJLmNyZWF0ZVRlc3ROb2RlRGVjb3JhdG9yMSgpOworCQlyZXRWYWx1ZS5zZXREZWNvcmF0b3IodG5kKTsKKwkJRGlzZWFzZU1vZGVsTGFiZWxUZXN0LmxhYmVsUmVnaW9uKHJldFZhbHVlLAorCQkJCURpc2Vhc2VNb2RlbFRlc3RVdGlsLlRFU1RfUE9QVUxBVElPTl9JREVOVElGSUVSLCBub2RlKTsKKwkJcmV0dXJuIHJldFZhbHVlOworCX0gLy8gY3JlYXRlRml4dHVyZQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2UjdGVhckRvd24oKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgdm9pZCB0ZWFyRG93bigpIHRocm93cyBFeGNlcHRpb24geworCQlzZXRGaXh0dXJlKG51bGwpOworCX0KKworCS8qKgorCSAqIHRlc3QgdGhhdCB0aGUgZml4dHVyZSBpcyBzYW5lCisJICovCisJcHVibGljIHZvaWQgdGVzdEZpeHR1cmVTYW5lKCkgeworCQlmaW5hbCBTSVJMYWJlbCBzaXJMYWJlbCA9IGdldEZpeHR1cmUoKTsKKwkJYXNzZXJ0VHJ1ZShzaXJMYWJlbC5zYW5lKCkpOworCX0gLy8gdGVzdEZpeHR1cmVTYW5lCisKK30gLy8gU0lSTGFiZWxUZXN0CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9zdGFuZGFyZC90ZXN0cy9TSVJMYWJlbFZhbHVlVGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvc3RhbmRhcmQvdGVzdHMvU0lSTGFiZWxWYWx1ZVRlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMjBjMzY4Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvc3RhbmRhcmQvdGVzdHMvU0lSTGFiZWxWYWx1ZVRlc3QuamF2YQpAQCAtMCwwICsxLDE1NiBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQudGVzdHM7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQganVuaXQudGV4dHVpLlRlc3RSdW5uZXI7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU0lSTGFiZWxWYWx1ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmRGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsVmFsdWU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLmltcGwuU0lSTGFiZWxWYWx1ZUltcGw7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gQSB0ZXN0IGNhc2UgZm9yIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5TSVIgTGFiZWwgVmFsdWU8L2I+PC9lbT4nLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK0BTdXBwcmVzc1dhcm5pbmdzKCJhbGwiKQorcHVibGljIGNsYXNzIFNJUkxhYmVsVmFsdWVUZXN0IGV4dGVuZHMgU0lMYWJlbFZhbHVlVGVzdCB7CisJLyoqCisJICogVGVzdCB2YWx1ZSBmb3IgcmVjb3ZlcmVkCisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBkb3VibGUgVEVTVF9SID0gMzsKKworCS8qKgorCSAqIFRlc3QgdmFsdWUgZm9yIHJlY292ZXJlZAorCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgZG91YmxlIFRFTVBfVEVTVF9SID0gVEVTVF9SICsgMzA7CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBwYXJhbSBhcmdzCisJICogCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKKwkJVGVzdFJ1bm5lci5ydW4oU0lSTGFiZWxWYWx1ZVRlc3QuY2xhc3MpOworCX0KKworCS8qKgorCSAqIENvbnN0cnVjdHMgYSBuZXcgU0lSIExhYmVsIFZhbHVlIHRlc3QgY2FzZSB3aXRoIHRoZSBnaXZlbiBuYW1lLiA8IS0tCisJICogYmVnaW4tdXNlci1kb2MgLS0+CisJICogCisJICogQHBhcmFtIG5hbWUKKwkgKiAKKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFNJUkxhYmVsVmFsdWVUZXN0KFN0cmluZyBuYW1lKSB7CisJCXN1cGVyKG5hbWUpOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIGZpeHR1cmUgZm9yIHRoaXMgU0lSIExhYmVsIFZhbHVlIHRlc3QgY2FzZS4gPCEtLQorCSAqIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIFNJUkxhYmVsVmFsdWUgZ2V0Rml4dHVyZSgpIHsKKwkJcmV0dXJuIChTSVJMYWJlbFZhbHVlKWZpeHR1cmU7CisJfQorCisJQFN1cHByZXNzV2FybmluZ3MoInVudXNlZCIpCisJcHJpdmF0ZSBTSVJMYWJlbFZhbHVlIGdldFRlbXBGaXh0dXJlKCkgeworCQlyZXR1cm4gKFNJUkxhYmVsVmFsdWUpIHRlbXBGaXh0dXJlOworCX0gLy8gZ2V0VGVtcEZpeHR1cmUKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBzZWUganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlI3NldFVwKCkKKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCXByb3RlY3RlZCB2b2lkIHNldFVwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCXNldEZpeHR1cmUoY3JlYXRlRml4dHVyZSgpKTsKKwkJc2V0VGVtcEZpeHR1cmUoY3JlYXRlVGVtcEZpeHR1cmUoKSk7CisJfSAvLyBzZXRVcAorCisJLyoqCisJICogQHJldHVybiBhIHZhbHVlIGZvciB0ZXN0aW5nCisJICovCisJcHVibGljIHN0YXRpYyBTSVJMYWJlbFZhbHVlIGNyZWF0ZUZpeHR1cmUoKSB7CisJCWZpbmFsIFNJUkxhYmVsVmFsdWVJbXBsIHJldFZhbHVlID0gbmV3IFNJUkxhYmVsVmFsdWVJbXBsKFRFU1RfUywKKwkJCQlURVNUX0ksIFRFU1RfUiwgCisJCQkJVEVTVF9ESVNFQVNFX0RFQVRIUyk7CisJCXJldHVybiByZXRWYWx1ZTsKKwl9IC8vIGNyZWF0ZUZpeHR1cmUKKworCUBPdmVycmlkZQorCXByb3RlY3RlZCBEaXNlYXNlTW9kZWxMYWJlbFZhbHVlIGNyZWF0ZVRlbXBGaXh0dXJlKCkgeworCQlmaW5hbCBTSVJMYWJlbFZhbHVlSW1wbCByZXRWYWx1ZSA9IG5ldyBTSVJMYWJlbFZhbHVlSW1wbChURU1QX1RFU1RfUywKKwkJCQlURU1QX1RFU1RfSSwgVEVNUF9URVNUX1IsIFRFTVBfVEVTVF9ESVNFQVNFX0RFQVRIUyk7CisJCXJldHVybiByZXRWYWx1ZTsKKwl9IC8vIGNyZWF0ZVRlbXBGaXh0dXJlCisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAc2VlIGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZSN0ZWFyRG93bigpCisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCB0ZWFyRG93bigpIHRocm93cyBFeGNlcHRpb24geworCQlzZXRGaXh0dXJlKG51bGwpOworCQlzZXRUZW1wRml4dHVyZShudWxsKTsKKwl9IC8vIHRlYXJEb3duCisKKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbFZhbHVlIGdldEV4cGVjdGVkQ29udmVydFRvU291cmNlU3RhdGVzKAorCQkJU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbFZhbHVlIGZpeHR1cmUpIHsKKwkJZmluYWwgU0lSTGFiZWxWYWx1ZSBzaUxhYmVsID0gKFNJUkxhYmVsVmFsdWUpIGZpeHR1cmU7CisJCXJldHVybiBuZXcgU0lSTGFiZWxWYWx1ZUltcGwoc2lMYWJlbC5nZXRJKCksIHNpTGFiZWwuZ2V0UigpLCAwLjAsCisJCQkJc2lMYWJlbC5nZXRTKCksIAorCQkJCXNpTGFiZWwuZ2V0RGlzZWFzZURlYXRocygpKTsKKwl9IC8vIGdldEV4cGVjdGVkQ29udmVydFRvU291cmNlU3RhdGVzCisKKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZSBnZXRFeHBlY3RlZEZpeHR1cmVBZGRpdGlvblJlc3VsdCgKKwkJCURpc2Vhc2VNb2RlbExhYmVsVmFsdWUgZml4dHVyZTEsIERpc2Vhc2VNb2RlbExhYmVsVmFsdWUgZml4dHVyZTIpIHsKKwkJZmluYWwgU0lSTGFiZWxWYWx1ZSBzaXJMYWJlbDEgPSAoU0lSTGFiZWxWYWx1ZSkgZml4dHVyZTE7CisJCWZpbmFsIFNJUkxhYmVsVmFsdWUgc2lyTGFiZWwyID0gKFNJUkxhYmVsVmFsdWUpIGZpeHR1cmUyOworCQlyZXR1cm4gbmV3IFNJUkxhYmVsVmFsdWVJbXBsKHNpckxhYmVsMS5nZXRTKCkgKyBzaXJMYWJlbDIuZ2V0UygpLAorCQkJCXNpckxhYmVsMS5nZXRJKCkgKyBzaXJMYWJlbDIuZ2V0SSgpLCBzaXJMYWJlbDEuZ2V0UigpCisJCQkJCQkrIHNpckxhYmVsMi5nZXRSKCksICBzaXJMYWJlbDEuZ2V0RGlzZWFzZURlYXRocygpCisJCQkJCQkrIHNpckxhYmVsMi5nZXREaXNlYXNlRGVhdGhzKCkpOworCX0gLy8gRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZQorCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIERpc2Vhc2VNb2RlbExhYmVsVmFsdWUgZ2V0RXhwZWN0ZWRGaXh0dXJlU3VidHJhY3Rpb25SZXN1bHQoCisJCQlEaXNlYXNlTW9kZWxMYWJlbFZhbHVlIGZpeHR1cmUxLCBEaXNlYXNlTW9kZWxMYWJlbFZhbHVlIGZpeHR1cmUyKSB7CisJCWZpbmFsIFNJUkxhYmVsVmFsdWUgc2lyTGFiZWwxID0gKFNJUkxhYmVsVmFsdWUpIGZpeHR1cmUxOworCQlmaW5hbCBTSVJMYWJlbFZhbHVlIHNpckxhYmVsMiA9IChTSVJMYWJlbFZhbHVlKSBmaXh0dXJlMjsKKwkJcmV0dXJuIG5ldyBTSVJMYWJlbFZhbHVlSW1wbChzaXJMYWJlbDEuZ2V0UygpIC0gc2lyTGFiZWwyLmdldFMoKSwKKwkJCQlzaXJMYWJlbDEuZ2V0SSgpIC0gc2lyTGFiZWwyLmdldEkoKSwgc2lyTGFiZWwxLmdldFIoKQorCQkJCQkJLSBzaXJMYWJlbDIuZ2V0UigpLCBzaXJMYWJlbDEuZ2V0RGlzZWFzZURlYXRocygpCisJCQkJCQktIHNpckxhYmVsMi5nZXREaXNlYXNlRGVhdGhzKCkpOworCX0gLy8gZ2V0RXhwZWN0ZWRGaXh0dXJlU3VidHJhY3Rpb25SZXN1bHQKKworCUBPdmVycmlkZQorCXByb3RlY3RlZCBkb3VibGUgZ2V0RXhwZWN0ZWRQb3B1bGF0aW9uQ291bnQoRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZSBmaXh0dXJlKSB7CisJCWZpbmFsIFNJUkxhYmVsVmFsdWUgc2lyVmFsdWUgPSAoU0lSTGFiZWxWYWx1ZSkgZml4dHVyZTsKKwkJcmV0dXJuIHNpclZhbHVlLmdldFMoKSArIHNpclZhbHVlLmdldEkoKSArIHNpclZhbHVlLmdldFIoKTsKKwl9IC8vIGdldEV4cGVjdGVkUG9wdWxhdGlvbkNvdW50CisKK30gLy8gU0lSTGFiZWxWYWx1ZVRlc3QKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3N0YW5kYXJkL3Rlc3RzL1NJUkxhYmVsVmFsdWVUZXN0VXRpbC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvc3RhbmRhcmQvdGVzdHMvU0lSTGFiZWxWYWx1ZVRlc3RVdGlsLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjBlMGY0MQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3N0YW5kYXJkL3Rlc3RzL1NJUkxhYmVsVmFsdWVUZXN0VXRpbC5qYXZhCkBAIC0wLDAgKzEsMjA5IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC50ZXN0czsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqYXZhLnV0aWwuTGlua2VkTGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuUmFuZG9tOworCitpbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOworCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLmltcGwuU0lSTGFiZWxJbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5pbXBsLlNJUkxhYmVsVmFsdWVJbXBsOworCitwdWJsaWMgYWJzdHJhY3QgY2xhc3MgU0lSTGFiZWxWYWx1ZVRlc3RVdGlsIGV4dGVuZHMgVGVzdENhc2V7CisJCisJLyoqCisJICogTnVtYmVyIG9mIHJhbmRvbSB2YWx1ZXMgdG8gdGVzdCB3aXRoCisJICovCisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IE5VTUJFUl9PRl9SQU5ET01TID0gMDsKKworCS8qKgorCSAqIG1heCBkb3VibGUgdmFsdWUgdG8gYmUgdXNlZCBpbiB0aGUgdGVzdAorCSAqLworCXByaXZhdGUgc3RhdGljIGZpbmFsIGRvdWJsZSBURVNUX01BWF9ET1VCTEVfVkFMVUUgPSAxZTEyZDsKKworCS8qKgorCSAqIG1heCBsb25nIHZhbHVlIHRvIGJlIHVzZWQgaW4gdGhlIHRlc3QKKwkgKi8KKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBsb25nIFRFU1RfTUFYX0xPTkdfVkFMVUUgPSBMb25nLk1BWF9WQUxVRTsKKworCS8qKgorCSAqIGlmIHRoZXJlIGlzIGEgc3lzdGVtIHByb3BlcnR5IHdpdGggdGhpcyB2YWx1ZSB0aGVuIHRoZSB0ZXN0IHdpbGwgYmUgY29tcGVyaGVuc2l2ZS4gSWYgbm90CisJICogdGhlbiB0aGUgdGVzdCB3aWxsIGNoZWNrIG9ubHkgZmV3IGNhc2VzLgorCSAqLworCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBDT01QRVJIQU5TSVZFX1RFU1QgPSAiY29tcGVyaGVuc2l2ZS50ZXN0IjsKKworCXByaXZhdGUgc3RhdGljIEJvb2xlYW4gY29tcGVyaGVuc2l2ZSA9IG51bGw7CisJCisJLyoqCisJICogVGhpcyBtZXRob2QgcmV0dXJucyBhIGxpc3Qgb2Yge0BsaW5rIFNJUkxhYmVsVmFsdWVJbXBsfSBvYmplY3RzLgorCSAqIFNvbWUgb2JqZWN0cyBpbiB0aGUgbGlzdCBhcmUgcmFuZG9tIGFuZCBzb21lIG5vdCByYW5kb20gYXQgYWxsLgorCSAqIFRoZSBvbmVzIHRoYXQgYXJlIG5vdCByYW5kb20gcmVwcmVzZW50cyBleHRyZW1lIGNhc2VzLgorCSAqIFRoZSBudW1lcmljIHZhbHVlcyBmb3IgdGhlIGV4dHJlbWUgY2FzZXMgYXJlIDAuMCwgTUFYX0RPVUJMRSwgYW5kIEkgYWRkZWQgdGhlIG51bWJlciAxLjAuIAorCSAqIFRoZSBudW1iZXIgb2YgcmFuZG9tIG51bWJlcnMgdG8gdGVzdCB3aXRoIGlzIE5VTUJFUl9PRl9SQU5ET01TLgorCSAqIE5vdGUgdGhhdCB3aXRoIE5VTUJFUl9PRl9SQU5ET01TID0gMCB5b3Ugd2lsbCBoYXZlIDQzNzQgcGVybXV0YXRpb25zIG9mIGFsbCB2YWx1ZXMgb2Yge0BTSVJMYWJlbFZhbHVlSW1wbH0uCisJICogSWYgeW91IHdpc2ggdG8gbWFrZSBOVU1CRVJfT0ZfUkFORE9NUyBoaWdoZXIgdGhlbiAwIHRoZW4gYmUgcmVhZHkgZm9yIGEgbG9uZyB0ZXN0IDotKQorCSAqLworCXB1YmxpYyBzdGF0aWMgTGlzdDxTSVJMYWJlbFZhbHVlSW1wbD4gY3JlYXRlUmFuZG9tU0lSTGFiZWxWYWx1ZUltcGwoKXsKKwkJUmFuZG9tIHJhbmRvbSA9IG5ldyBSYW5kb20oKTsKKwkJZG91YmxlW10gdmFsdWVzID0gbmV3IGRvdWJsZVszICsgTlVNQkVSX09GX1JBTkRPTVNdOworCQl2YWx1ZXNbMF0gPSAwLjBkOworCQl2YWx1ZXNbMV0gPSBURVNUX01BWF9ET1VCTEVfVkFMVUU7CisJICAgIHZhbHVlc1syXSA9IDEuMGQ7CisJCWZvcihpbnQgaSA9ICh2YWx1ZXMubGVuZ3RoICsgMSk7IGkgPCB2YWx1ZXMubGVuZ3RoOyBpKyspeworCQkJdmFsdWVzW2ldID0gcmFuZG9tLm5leHREb3VibGUoKSAqIFRFU1RfTUFYX0RPVUJMRV9WQUxVRTsKKwkJfQorCQlMaXN0PFNJUkxhYmVsVmFsdWVJbXBsPiBtb2RlbExldmVsVmFsdWVzID0gbmV3IExpbmtlZExpc3Q8U0lSTGFiZWxWYWx1ZUltcGw+KCk7CisJCWludCBpdGVyYXRpb24gPSAwOworCQlmb3IoZG91YmxlIHMgOiB2YWx1ZXMpeworCQkJZm9yKGRvdWJsZSBlIDogdmFsdWVzKXsKKwkJCQlmb3IoZG91YmxlIGkgOiB2YWx1ZXMpeworCQkJCQlmb3IoZG91YmxlIHIgOiB2YWx1ZXMpeworCQkJCQkJZm9yKGRvdWJsZSBiaXJ0aHMgOiB2YWx1ZXMpeworCQkJCQkJCWZvcihkb3VibGUgZGVhdGhzIDogdmFsdWVzKXsKKwkJCQkJCQkJZm9yKGRvdWJsZSBkaXNlYXNlRGVhdGhzIDogdmFsdWVzKXsKKwkJCQkJCQkJCWlmKGRpc2Vhc2VEZWF0aHMgPiBkZWF0aHMpeworCQkJCQkJCQkJCWNvbnRpbnVlOworCQkJCQkJCQkJfQorCQkJCQkJCQkJaWYoc2tpcFZhbHVlU2V0KGl0ZXJhdGlvbisrLCBkaXNlYXNlRGVhdGhzLCBkZWF0aHMsIHMsIGUsIGksIHIpKXsKKwkJCQkJCQkJCQljb250aW51ZTsKKwkJCQkJCQkJCX0KKwkJCQkJCQkJCVNJUkxhYmVsVmFsdWVJbXBsIG1vZGVsTGFibGVWYWx1ZSA9IG5ldyBTSVJMYWJlbFZhbHVlSW1wbChzLCBpLCByLCBkaXNlYXNlRGVhdGhzKTsKKwkJCQkJCQkJCWFzc2VydFRydWUoIlRoZSBTSVJMYWJlbFZhbHVlSW1wbDogIiArIG1vZGVsTGFibGVWYWx1ZSArICIgaXMgaW5zYW5lISIsIG1vZGVsTGFibGVWYWx1ZS5zYW5lKCkpOworCQkJCQkJCQkJbW9kZWxMZXZlbFZhbHVlcy5hZGQobW9kZWxMYWJsZVZhbHVlKTsKKwkJCQkJCQkJCVN5c3RlbS5vdXQucHJpbnRsbihtb2RlbExldmVsVmFsdWVzLnNpemUoKSk7CisJCQkJCQkJCX0KKwkJCQkJCQl9CisJCQkJCQl9CisJCQkJCX0KKwkJCQl9CisJCQl9CisJCX0KKwkJcmV0dXJuIG1vZGVsTGV2ZWxWYWx1ZXM7CisJfQorCQorCXByaXZhdGUgc3RhdGljIGJvb2xlYW4gc2tpcFZhbHVlU2V0KGRvdWJsZSBpdGVyYXRpb24sIGRvdWJsZSBkaXNlYXNlRGVhdGhzLCBkb3VibGUgZGVhdGhzLCBkb3VibGUgcywgZG91YmxlIGUsIGRvdWJsZSBpLCBkb3VibGUgcikgeworCQlpZighaXNDb21wZXJoZW5zaXZlKCkpeworCQkJaWYoaXRlcmF0aW9uICUgNTAwID4gMSl7CisJCQkJLy9kbyBvbmx5IG9uZSBvZiBhbnkgNTAwIHBlcm11dGF0aW9ucworCQkJCVN5c3RlbS5vdXQucHJpbnQoIi4iKTsKKwkJCQlyZXR1cm4gdHJ1ZTsKKwkJCX0KKwkJfQorCQlpZihkaXNlYXNlRGVhdGhzID4gZGVhdGhzKXsKKwkJCXJldHVybiB0cnVlOworCQl9CisJCWRvdWJsZSBwb3B1bGF0aW9uID0gcyArIGkgKyByOworCQlpZihkZWF0aHMgPiBwb3B1bGF0aW9uKXsKKwkJCXJldHVybiB0cnVlOworCQl9CisJCWlmKGRpc2Vhc2VEZWF0aHMgPiBwb3B1bGF0aW9uKXsKKwkJCXJldHVybiB0cnVlOworCQl9CisJCXJldHVybiBmYWxzZTsKKwl9CisJCisJcHJpdmF0ZSBzdGF0aWMgYm9vbGVhbiBpc0NvbXBlcmhlbnNpdmUoKSB7CisJCWlmKG51bGwgIT0gY29tcGVyaGVuc2l2ZSApeworCQkJcmV0dXJuIGNvbXBlcmhlbnNpdmUuYm9vbGVhblZhbHVlKCk7CisJCX0KKwkJU3RyaW5nIGNvbXBlcmhlbnNpdmVQcm9wZXJ0eSA9IFN5c3RlbS5nZXRQcm9wZXJ0eShDT01QRVJIQU5TSVZFX1RFU1QpOworCQlpZihudWxsICE9IGNvbXBlcmhlbnNpdmVQcm9wZXJ0eSl7CisJCQljb21wZXJoZW5zaXZlUHJvcGVydHkgPSBjb21wZXJoZW5zaXZlUHJvcGVydHkudHJpbSgpOworCQkJaWYoY29tcGVyaGVuc2l2ZVByb3BlcnR5LmVxdWFsc0lnbm9yZUNhc2UoInllcyIpIHx8IGNvbXBlcmhlbnNpdmVQcm9wZXJ0eS5lcXVhbHNJZ25vcmVDYXNlKCJ0cnVlIikpewkJCQorCQkJCWNvbXBlcmhlbnNpdmUgPSBuZXcgQm9vbGVhbih0cnVlKTsKKwkJCX0KKwkJfQorCQlpZihudWxsID09IGNvbXBlcmhlbnNpdmUgKXsKKwkJCWNvbXBlcmhlbnNpdmUgPSBuZXcgQm9vbGVhbihmYWxzZSk7CisJCX0KKwkJcmV0dXJuIGNvbXBlcmhlbnNpdmUuYm9vbGVhblZhbHVlKCk7CisJfQorCS8qKgorCSAqIENsb25lIHRoZSBTSVJMYWJlbFZhbHVlSW1wbAorCSAqIEBwYXJhbSBvcmlnaW5hbCB3aWxsIG5vdCBiZSBtb2RlZmlsZXMKKwkgKiBAcmV0dXJuIGEgY2xvbmUgb2YgJ29yaWdpbmFsJworCSAqLworCXB1YmxpYyBzdGF0aWMgU0lSTGFiZWxWYWx1ZUltcGwgY2xvbmVTSVJMYWJlbFZhbHVlSW1wbChTSVJMYWJlbFZhbHVlSW1wbCBvcmlnaW5hbCl7CisJCVNJUkxhYmVsVmFsdWVJbXBsIHZhbHVlID0gIG5ldyBTSVJMYWJlbFZhbHVlSW1wbChvcmlnaW5hbC5nZXRTKCksIG9yaWdpbmFsLmdldEkoKSwgCisJCQkJb3JpZ2luYWwuZ2V0UigpLCBvcmlnaW5hbC5nZXREaXNlYXNlRGVhdGhzKCkpOworCQlyZXR1cm4gdmFsdWU7CisJfQorCisJLyoqCisJICogVGhpcyBtZXRob2QgcmV0dXJucyBhIGxpc3Qgb2Yge0BsaW5rIFNJUkxhYmVsSW1wbH0gb2JqZWN0cy4KKwkgKiBTb21lIG9iamVjdHMgaW4gdGhlIGxpc3QgYXJlIHJhbmRvbSBhbmQgc29tZSBub3QgcmFuZG9tIGF0IGFsbC4KKwkgKiBUaGUgb25lcyB0aGF0IGFyZSBub3QgcmFuZG9tIHJlcHJlc2VudHMgZXh0cmVtZSBjYXNlcy4KKwkgKiBUaGUgbnVtZXJpYyB2YWx1ZXMgZm9yIHRoZSBleHRyZW1lIGNhc2VzIGFyZSAwLjAsIE1BWF9ET1VCTEUsIGFuZCBJIGFkZGVkIHRoZSBudW1iZXIgMS4wLiAKKwkgKiBUaGUgbnVtYmVyIG9mIHJhbmRvbSBudW1iZXJzIHRvIHRlc3Qgd2l0aCBpcyBOVU1CRVJfT0ZfUkFORE9NUy4KKwkgKiBOb3RlIHRoYXQgd2l0aCBOVU1CRVJfT0ZfUkFORE9NUyA9IDAgeW91IHdpbGwgaGF2ZSA0Mzc0IHBlcm11dGF0aW9ucyBvZiBhbGwgdmFsdWVzIG9mIHtTSVJMYWJlbEltcGx9LgorCSAqIElmIHlvdSB3aXNoIHRvIG1ha2UgTlVNQkVSX09GX1JBTkRPTVMgaGlnaGVyIHRoZW4gMCB0aGVuIGJlIHJlYWR5IGZvciBhIGxvbmcgdGVzdCA6LSkKKwkgKiAKKwkgKi8KKwlwdWJsaWMgTGlzdDxTSVJMYWJlbEltcGw+IGNyZWF0ZVJhbmRvbVNJUkxhYmVsSW1wbCgpeworCQlSYW5kb20gcmFuZG9tID0gbmV3IFJhbmRvbSgpOworCQlkb3VibGVbXSB2YWx1ZXMgPSBuZXcgZG91YmxlWzMgKyBOVU1CRVJfT0ZfUkFORE9NU107CisJCXZhbHVlc1swXSA9IDAuMGQ7CisJCXZhbHVlc1sxXSA9IFRFU1RfTUFYX0RPVUJMRV9WQUxVRTsKKwkJdmFsdWVzWzJdID0gMS4wZDsKKwkJZm9yKGludCBpID0gMzsgaSA8IHZhbHVlcy5sZW5ndGg7IGkrKyl7CisJCQl2YWx1ZXNbaV0gPSByYW5kb20ubmV4dERvdWJsZSgpICogVEVTVF9NQVhfRE9VQkxFX1ZBTFVFOworCQl9CisJCUxpc3Q8U0lSTGFiZWxJbXBsPiBtb2RlbExldmVsVmFsdWVzID0gbmV3IExpbmtlZExpc3Q8U0lSTGFiZWxJbXBsPigpOworCQlpbnQgaXRlcmF0aW9uID0gMDsKKwkJZm9yKGRvdWJsZSBzIDogdmFsdWVzKXsKKwkJCWZvcihkb3VibGUgZSA6IHZhbHVlcyl7CisJCQkJZm9yKGRvdWJsZSBpIDogdmFsdWVzKXsKKwkJCQkJZm9yKGRvdWJsZSByIDogdmFsdWVzKXsKKwkJCQkJCWZvcihkb3VibGUgYmlydGhzIDogdmFsdWVzKXsKKwkJCQkJCQlmb3IoZG91YmxlIGRlYXRocyA6IHZhbHVlcyl7CisJCQkJCQkJCWZvcihkb3VibGUgZGlzZWFzZURlYXRocyA6IHZhbHVlcyl7CisJCQkJCQkJCQlpZihza2lwVmFsdWVTZXQoaXRlcmF0aW9uKyssIGRpc2Vhc2VEZWF0aHMsIGRlYXRocywgcywgZSwgaSwgcikpeworCQkJCQkJCQkJCWNvbnRpbnVlOworCQkJCQkJCQkJfQorCQkJCQkJCQkJCisJCQkJCQkJCQlTSVJMYWJlbFZhbHVlVGVzdCBsYWJlbFZhbHVlVGVzdCA9IG5ldyBTSVJMYWJlbFZhbHVlVGVzdCgiU0lSTGFiZWxWYWx1ZVRlc3QiKTsKKwkJCQkJCQkJCVNJUkxhYmVsVmFsdWVJbXBsIGxhYmVsVmFsdWUgPSAoU0lSTGFiZWxWYWx1ZUltcGwpbGFiZWxWYWx1ZVRlc3QuZ2V0Rml4dHVyZSgpOworCQkJCQkJCQkJbGFiZWxWYWx1ZS5zZXRTKHMpOworCQkJCQkJCQkJbGFiZWxWYWx1ZS5zZXRJKHMpOworCQkJCQkJCQkJbGFiZWxWYWx1ZS5zZXRSKHMpOworCQkJCQkJCQkJbGFiZWxWYWx1ZS5zZXREaXNlYXNlRGVhdGhzKGRpc2Vhc2VEZWF0aHMpOworCQkJCQkJCQkJYXNzZXJ0VHJ1ZSgiVGhlIFNJUkxhYmVsVmFsdWU6ICIgKyBsYWJlbFZhbHVlICsgIiBpcyBpbnNhbmUhIiwgbGFiZWxWYWx1ZS5zYW5lKCkpOworCQkJCQkJCQkJLy8gcHV0IHRoZSB2YWx1ZSBpbiBhIGxhYmVsCisJCQkJCQkJCQlTSVJMYWJlbFRlc3QgbGFiZWxUZXN0ID0gbmV3IFNJUkxhYmVsVGVzdCgiU0lSTGFiZWxUZXN0Iik7CisJCQkJCQkJCQlTSVJMYWJlbEltcGwgbGFiZWwgPSAoU0lSTGFiZWxJbXBsKWxhYmVsVGVzdC5nZXRGaXh0dXJlKCk7CisJCQkJCQkJCQlsYWJlbC5zZXRDdXJyZW50VmFsdWUobGFiZWxWYWx1ZSk7CisJCQkJCQkJCQltb2RlbExldmVsVmFsdWVzLmFkZChsYWJlbCk7CisJCQkJCQkJCQkKKwkJCQkJCQkJfQorCQkJCQkJCX0KKwkJCQkJCX0KKwkJCQkJfQorCQkJCX0KKwkJCX0KKwkJfQorCXJldHVybiBtb2RlbExldmVsVmFsdWVzOworCX0KKwkKKwlwdWJsaWMgbG9uZ1tdIGNyZWF0ZXJhbmRvbURlbHRhcygpIHsKKwkJUmFuZG9tIHJhbmRvbSA9IG5ldyBSYW5kb20oKTsKKwkJbG9uZ1tdIHZhbHVlcyA9IG5ldyBsb25nWzIgKyBOVU1CRVJfT0ZfUkFORE9NU107CisJCXZhbHVlc1swXSA9IFRFU1RfTUFYX0xPTkdfVkFMVUU7CisJCXZhbHVlc1sxXSA9IDFsOworCQlmb3IoaW50IGkgPSAzOyBpIDwgdmFsdWVzLmxlbmd0aDsgaSsrKXsKKwkJCXZhbHVlc1tpXSA9IHJhbmRvbS5uZXh0TG9uZygpICogVEVTVF9NQVhfTE9OR19WQUxVRTsKKwkJfQorCQlyZXR1cm4gdmFsdWVzOworCX0KKwkKK30KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3N0YW5kYXJkL3Rlc3RzL1NJUlRlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3N0YW5kYXJkL3Rlc3RzL1NJUlRlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNDMxZjg2Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvc3RhbmRhcmQvdGVzdHMvU0lSVGVzdC5qYXZhCkBAIC0wLDAgKzEsOTIgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLnRlc3RzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlNJUjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmRQYWNrYWdlOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IEEgdGVzdCBjYXNlIGZvciB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+U0lSPC9iPjwvZW0+Jy4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogPHA+CisgKiBUaGUgZm9sbG93aW5nIG9wZXJhdGlvbnMgYXJlIHRlc3RlZDoKKyAqIDx1bD4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU0lSI2dldEFkanVzdGVkSW1tdW5pdHlMb3NzUmF0ZShsb25nKSA8ZW0+R2V0IEFkanVzdGVkIEltbXVuaXR5IExvc3MgUmF0ZTwvZW0+fTwvbGk+CisgKiA8L3VsPgorICogPC9wPgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgYWJzdHJhY3QgY2xhc3MgU0lSVGVzdCBleHRlbmRzIFNJVGVzdCB7CisKKwkvKioKKwkgKiBUaGlzIGNvZWZmaWNpZW50IGRldGVybWluZXMgdGhlIG51bWJlciBvZiBwb3B1bGF0aW9uIG1lbWJlcnMgdGhhdCBsb3NlCisJICogdGhlaXIgaW1tdW5pdHkgdG8gYSBkaXNlYXNlIGFuZCBiZWNvbWUgU3VzY2VwdGlibGUgdG8gdGhlIGRpc2Vhc2UgcGVyCisJICogcG9wdWxhdGlvbiBtZW1iZXIgaW4gdGhlIDxlbT5SZWNvdmVyZWQ8L2VtPiBzdGF0ZS4gQSB2YWx1ZSBvZiB6ZXJvCisJICogKDAuMCksIHRoZSBkZWZhdWx0LCBtZWFucyB0aGUgcG9wdWxhdGlvbiBtZW1iZXJzIG5ldmVyIGxvc2UgdGhlaXIKKwkgKiBpbW11bml0eS4gVW5pdHM6IHBvcHVsYXRpb24gbWVtYmVycworCSAqIAorCSAqIEBzZWUgU0lSI2dldEltbXVuaXR5TG9zc1JhdGUoKQorCSAqLworCWZpbmFsIHB1YmxpYyBzdGF0aWMgZG91YmxlIElNTVVOSVRZX0xPU1NfUkFURSA9IDAuMTsKKworCS8qKgorCSAqIENvbnN0cnVjdHMgYSBuZXcgU0lSIHRlc3QgY2FzZSB3aXRoIHRoZSBnaXZlbiBuYW1lLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MKKwkgKiAtLT4KKwkgKiAKKwkgKiBAcGFyYW0gbmFtZQorCSAqIAorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgU0lSVGVzdChTdHJpbmcgbmFtZSkgeworCQlzdXBlcihuYW1lKTsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBmaXh0dXJlIGZvciB0aGlzIFNJUiB0ZXN0IGNhc2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLQorCSAqIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIFNJUiBnZXRGaXh0dXJlKCkgeworCQlyZXR1cm4gKFNJUilmaXh0dXJlOworCX0KKworCS8qKgorCSAqIFRlc3RzIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TSVIjZ2V0QWRqdXN0ZWRJbW11bml0eUxvc3NSYXRlIDxlbT5HZXQgQWRqdXN0ZWQgSW1tdW5pdHkgTG9zcyBSYXRlPC9lbT59JworCSAqIG9wZXJhdGlvbi4gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU0lSI2dldEFkanVzdGVkSW1tdW5pdHlMb3NzUmF0ZQorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJcHVibGljIHZvaWQgdGVzdEdldEFkanVzdGVkSW1tdW5pdHlMb3NzUmF0ZV9fbG9uZygpIHsKKwkJZmluYWwgU0lSIGZpeHR1cmUgPSBnZXRGaXh0dXJlKCk7CisJCWFzc2VydFRydWUoRGlzZWFzZU1vZGVsVGVzdFV0aWwuY2xvc2VFbm91Z2goZml4dHVyZQorCQkJCS5nZXRBZGp1c3RlZEltbXVuaXR5TG9zc1JhdGUoMiAqIGZpeHR1cmUuZ2V0VGltZVBlcmlvZCgpKSwKKwkJCQkoMiAqIGZpeHR1cmUuZ2V0SW1tdW5pdHlMb3NzUmF0ZSgpKSkpOworCX0gLy8gdGVzdEdldEFkanVzdGVkSW1tdW5pdHlMb3NzUmF0ZV9fbG9uZworCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIFN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWwgY3JlYXRlTGFiZWxGaXh0dXJlKCkgeworCQlyZXR1cm4gU0lSTGFiZWxUZXN0LmNyZWF0ZUZpeHR1cmUoKTsKKwl9IC8vIGNyZWF0ZUxhYmVsVmFsdWVGaXh0dXJlCisKKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgRUNsYXNzIGdldERpc2Vhc2VNb2RlbExhYmVsQ2xhc3MoKSB7CisJCXJldHVybiBTdGFuZGFyZFBhY2thZ2UuZUlOU1RBTkNFLmdldFNJUkxhYmVsKCk7CisJfSAvLyBnZXREaXNlYXNlTW9kZWxMYWJlbENsYXNzCisKK30gLy8gU0lSVGVzdApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvc3RhbmRhcmQvdGVzdHMvU0lUZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9zdGFuZGFyZC90ZXN0cy9TSVRlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YzRiZGMxCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvc3RhbmRhcmQvdGVzdHMvU0lUZXN0LmphdmEKQEAgLTAsMCArMSwxOTggQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLnRlc3RzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA2LCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlNJOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZFBhY2thZ2U7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gQSB0ZXN0IGNhc2UgZm9yIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5TSTwvYj48L2VtPicuCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIDxwPgorICogVGhlIGZvbGxvd2luZyBvcGVyYXRpb25zIGFyZSB0ZXN0ZWQ6CisgKiA8dWw+CisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlNJI2dldEFkanVzdGVkSW5mZWN0aW91c01vcnRhbGl0eVJhdGUobG9uZykgPGVtPkdldCBBZGp1c3RlZCBJbmZlY3Rpb3VzIE1vcnRhbGl0eSBSYXRlPC9lbT59PC9saT4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU0kjZ2V0QWRqdXN0ZWRUcmFuc21pc3Npb25SYXRlKGxvbmcpIDxlbT5HZXQgQWRqdXN0ZWQgVHJhbnNtaXNzaW9uIFJhdGU8L2VtPn08L2xpPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TSSNnZXRBZGp1c3RlZFJlY292ZXJ5UmF0ZShsb25nKSA8ZW0+R2V0IEFkanVzdGVkIFJlY292ZXJ5IFJhdGU8L2VtPn08L2xpPgorICogPC91bD4KKyAqIDwvcD4KKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGFic3RyYWN0IGNsYXNzIFNJVGVzdCBleHRlbmRzIFN0YW5kYXJkRGlzZWFzZU1vZGVsVGVzdCB7CisKKwkvKioKKwkgKiBUaGlzIGNvZWZmaWNpZW50IGRldGVybWluZXMgdGhlIGluY3JlYXNlZCByYXRlIGF0IHdoaWNoIGluZmVjdGlvdXMgcG9wdWxhdGlvbgorCSAqIG1lbWJlcnMgZGllIHBlciB0aW1lIHBlcmlvZCBkdWUgdG8gdGhlIGRpc2Vhc2UuIFRoaXMgaXMKKwkgKiA8ZW0+Jm11OzxzdWI+aTwvc3ViPi4KKwkgKi8KKwlmaW5hbCBwdWJsaWMgc3RhdGljIGRvdWJsZSBJTkZFQ1RJT1VTX01PUlRBTElUWV9SQVRFID0gMC4xOworCisJLyoqCisJICogVGhpcyBjb2VmZmljaWVudCBkZXRlcm1pbmVzIHRoZSBudW1iZXIgb2YgcG9wdWxhdGlvbiBtZW1iZXJzIHRoYXQgYmVjb21lCisJICogaW5mZWN0ZWQvZXhwb3NlZCBwZXIgcG9wdWxhdGlvbiBtZW1iZXIgaW4gdGhlIDxlbT5JbmZlY3Rpb3VzPC9lbT4KKwkgKiBzdGF0ZSwgYXNzdW1pbmcgdGhlIGVudGlyZSBwb3B1bGF0aW9uIGlzIGluIHRoZSA8ZW0+U3VzY2VwdGlibGU8L2VtPgorCSAqIHN0YXRlLCBwZXIgdGltZSBwZXJpb2QuIFRoaXMgaXMgPGVtPiZiZXRhOzwvZW0+CisJICogCisJICogQHNlZSBTSSNnZXRUcmFuc21pc3Npb25SYXRlKCkKKwkgKi8KKwlmaW5hbCBwdWJsaWMgc3RhdGljIGRvdWJsZSBUUkFOU01JU1NJT05fUkFURSA9IDAuMTsKKworCS8qKgorCSAqIEJ5IGRlZmF1bHQgdGhpcyBleHBvbmVudCBpcyBvbmUgKDEuMCkgYW5kIHRoZSByYXRlIG9mIGluZmVjdGlvbiBzY2FsZXMgYXMKKwkgKiB0aGUgcHJvZHVjdCBvZiB0aGUgU3VzY2VwdGlibGUgcG9wdWxhdGlvbiBhbmQgdGhlIEluZmVjdGlvdXMgcG9wdWxhdGlvbi4KKwkgKiBJbiBhIG5vbmxpbmVhciBtb2RlbCAod2hpY2ggY2FwdHVyZXMgc2F0dXJhdGlvbiBvZiB0aGUgaW1tdW5lIHN5c3RlbSBmb3IKKwkgKiBTdXNjZXB0aWJsZSBwb3B1bGF0aW9uKSwgdGhlIEluZmVjdGlvdXMgdGVybSBpcyByYWlzZSB0byB0aGlzIHBvd2VyICg+PQorCSAqIDAuMCkgVGhpcyBleHBvbmVudCBzaG91bGQgbmV2ZXIgYmUgbGVzcyB0aGFuIHplcm8uIFRoZSBkZWZhdWx0IHZhbHVlIG9mIDEuMCBiYXNpY2FsbHkgcmVtb3ZlcyBpdCBmcm9tCisJICogdGhlIGNvbXB1dGF0aW9uLgorCSAqIAorCSAqIEBzZWUgU0kjZ2V0Tm9uTGluZWFyaXR5Q29lZmZpY2llbnQoKQorCSAqLworCWZpbmFsIHB1YmxpYyBzdGF0aWMgZG91YmxlIE5PTl9MSU5FQVJJVFlfQ09FRkZJQ0lFTlQgPSAxLjA7CisKKwkvKioKKwkgKiBUaGlzIGNvZWZmaWNpZW50IGRldGVybWluZXMgdGhlIG51bWJlciBvZiBwb3B1bGF0aW9uIG1lbWJlcnMgdGhhdCByZWNvdmVyCisJICogZnJvbSB0aGUgZGlzZWFzZSBwZXIgcG9wdWxhdGlvbiBtZW1iZXIgaW4gdGhlIDxlbT5JbmZlY3Rpb3VzPC9lbT4KKwkgKiBzdGF0ZS4gVGhpcyBpcyA8ZW0+JnNpZ21hOzwvZW0+LgorCSAqIAorCSAqIEBzZWUgU0kjZ2V0UmVjb3ZlcnlSYXRlKCkKKwkgKi8KKwlmaW5hbCBwdWJsaWMgc3RhdGljIGRvdWJsZSBSRUNPVkVSWV9SQVRFID0gMC4wMTsKKworCS8qKgorCSAqIENvbnN0cnVjdHMgYSBuZXcgU0kgdGVzdCBjYXNlIHdpdGggdGhlIGdpdmVuIG5hbWUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYworCSAqIC0tPgorCSAqIAorCSAqIEBwYXJhbSBuYW1lCisJICogCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBTSVRlc3QoU3RyaW5nIG5hbWUpIHsKKwkJc3VwZXIobmFtZSk7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgZml4dHVyZSBmb3IgdGhpcyBTSSB0ZXN0IGNhc2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLQorCSAqIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIFNJIGdldEZpeHR1cmUoKSB7CisJCXJldHVybiAoU0kpZml4dHVyZTsKKwl9CisKKwkvKioKKwkgKiBUZXN0cyB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU0kjZ2V0QWRqdXN0ZWRJbmZlY3Rpb3VzTW9ydGFsaXR5UmF0ZShsb25nKSA8ZW0+R2V0IEFkanVzdGVkIEluZmVjdGlvdXMgTW9ydGFsaXR5IFJhdGU8L2VtPn0nIG9wZXJhdGlvbi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlNJI2dldEFkanVzdGVkSW5mZWN0aW91c01vcnRhbGl0eVJhdGUobG9uZykKKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCXB1YmxpYyB2b2lkIHRlc3RHZXRBZGp1c3RlZEluZmVjdGlvdXNNb3J0YWxpdHlSYXRlX19sb25nKCkgeworCQlmaW5hbCBTSSBmaXh0dXJlID0gZ2V0Rml4dHVyZSgpOworCQlhc3NlcnRUcnVlKERpc2Vhc2VNb2RlbFRlc3RVdGlsLmNsb3NlRW5vdWdoKGZpeHR1cmUKKwkJCQkuZ2V0QWRqdXN0ZWRJbmZlY3Rpb3VzTW9ydGFsaXR5UmF0ZSgyICogZml4dHVyZS5nZXRUaW1lUGVyaW9kKCkpLAorCQkJCSgyICogZml4dHVyZS5nZXRJbmZlY3Rpb3VzTW9ydGFsaXR5UmF0ZSgpKSkpOworCX0gLy8gdGVzdEdldEFkanVzdGVkSW5mZWN0aW91c01vcnRhbGl0eVJhdGVfX2xvbmcKKworCS8qKgorCSAqIFRlc3RzIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TSSNnZXRBZGp1c3RlZFRyYW5zbWlzc2lvblJhdGUgPGVtPkdldCBBZGp1c3RlZCBUcmFuc21pc3Npb24gUmF0ZTwvZW0+fScKKwkgKiBvcGVyYXRpb24uIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlNJI2dldEFkanVzdGVkVHJhbnNtaXNzaW9uUmF0ZQorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJcHVibGljIHZvaWQgdGVzdEdldEFkanVzdGVkVHJhbnNtaXNzaW9uUmF0ZV9fbG9uZygpIHsKKwkJZmluYWwgU0kgZml4dHVyZSA9IGdldEZpeHR1cmUoKTsKKwkJYXNzZXJ0VHJ1ZShEaXNlYXNlTW9kZWxUZXN0VXRpbC5jbG9zZUVub3VnaChmaXh0dXJlCisJCQkJLmdldEFkanVzdGVkVHJhbnNtaXNzaW9uUmF0ZSgyICogZml4dHVyZS5nZXRUaW1lUGVyaW9kKCkpLAorCQkJCSgyICogZml4dHVyZS5nZXRUcmFuc21pc3Npb25SYXRlKCkpKSk7CisJfSAvLyB0ZXN0R2V0QWRqdXN0ZWRUcmFuc21pc3Npb25SYXRlX19sb25nCisKKwkvKioKKwkgKiBUZXN0cyB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU0kjZ2V0QWRqdXN0ZWRSZWNvdmVyeVJhdGUgPGVtPkdldCBBZGp1c3RlZCBSZWNvdmVyeSBSYXRlPC9lbT59JworCSAqIG9wZXJhdGlvbi4gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU0kjZ2V0QWRqdXN0ZWRSZWNvdmVyeVJhdGUKKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCXB1YmxpYyB2b2lkIHRlc3RHZXRBZGp1c3RlZFJlY292ZXJ5UmF0ZV9fbG9uZygpIHsKKwkJZmluYWwgU0kgZml4dHVyZSA9IGdldEZpeHR1cmUoKTsKKwkJYXNzZXJ0VHJ1ZShEaXNlYXNlTW9kZWxUZXN0VXRpbC5jbG9zZUVub3VnaChmaXh0dXJlCisJCQkJLmdldEFkanVzdGVkUmVjb3ZlcnlSYXRlKDIgKiBmaXh0dXJlLmdldFRpbWVQZXJpb2QoKSksCisJCQkJKDIgKiBmaXh0dXJlLmdldFJlY292ZXJ5UmF0ZSgpKSkpOworCX0gLy8gdGVzdEdldEFkanVzdGVkUmVjb3ZlcnlSYXRlX19sb25nCisKKwkvKioKKwkgKiBUZXN0cyB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU0kjZ2V0RWZmZWN0aXZlSW5mZWN0aW91cyhvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguTm9kZSwgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWwsIGRvdWJsZSkgPGVtPkdldCBFZmZlY3RpdmUgSW5mZWN0aW91czwvZW0+fScgb3BlcmF0aW9uLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU0kjZ2V0RWZmZWN0aXZlSW5mZWN0aW91cyhvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguTm9kZSwgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWwsIGRvdWJsZSkKKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCXB1YmxpYyB2b2lkIHRlc3RHZXRFZmZlY3RpdmVJbmZlY3Rpb3VzX19Ob2RlX1N0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWxfZG91YmxlKCkgeworCQkvLyBUT0RPOiBpbXBsZW1lbnQgdGhpcyBvcGVyYXRpb24gdGVzdCBtZXRob2QKKwkJLy8gRW5zdXJlIHRoYXQgeW91IHJlbW92ZSBAZ2VuZXJhdGVkIG9yIG1hcmsgaXQgQGdlbmVyYXRlZCBOT1QKKwkJYXNzZXJ0VHJ1ZSh0cnVlKTsKKwl9CisKKwkvKioKKwkgKiBUZXN0cyB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU0kjZ2V0Tm9ybWFsaXplZEVmZmVjdGl2ZUluZmVjdGlvdXMob3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLk5vZGUsIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsLCBkb3VibGUpIDxlbT5HZXQgTm9ybWFsaXplZCBFZmZlY3RpdmUgSW5mZWN0aW91czwvZW0+fScgb3BlcmF0aW9uLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU0kjZ2V0Tm9ybWFsaXplZEVmZmVjdGl2ZUluZmVjdGlvdXMob3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLk5vZGUsIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsLCBkb3VibGUpCisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlwdWJsaWMgdm9pZCB0ZXN0R2V0Tm9ybWFsaXplZEVmZmVjdGl2ZUluZmVjdGlvdXNfX05vZGVfU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbF9kb3VibGUoKSB7CisJCS8vIFRPRE86IGltcGxlbWVudCB0ZXN0R2V0Tm9ybWFsaXplZEVmZmVjdGl2ZUluZmVjdGlvdXNfX05vZGVfU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbF9kb3VibGUKKwkJYXNzZXJ0VHJ1ZSh0cnVlKTsKKwl9CisKKwkvKioKKwkgKiBUZXN0cyB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU0kjZ2V0UGh5c2ljYWxseUFkamFjZW50SW5mZWN0aW91cyhvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguTm9kZSwgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWwpIDxlbT5HZXQgUGh5c2ljYWxseSBBZGphY2VudCBJbmZlY3Rpb3VzPC9lbT59JyBvcGVyYXRpb24uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TSSNnZXRQaHlzaWNhbGx5QWRqYWNlbnRJbmZlY3Rpb3VzKG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5Ob2RlLCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbCkKKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCXB1YmxpYyB2b2lkIHRlc3RHZXRQaHlzaWNhbGx5QWRqYWNlbnRJbmZlY3Rpb3VzX19Ob2RlX1N0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWwoKSB7CisJCWFzc2VydFRydWUodHJ1ZSk7CisJfQorCisJLyoqCisJICogVGVzdHMgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlNJI2dldFBoeXNpY2FsbHlBZGphY2VudEluZmVjdGlvdXMob3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLk5vZGUpIDxlbT5HZXQgUGh5c2ljYWxseSBBZGphY2VudCBJbmZlY3Rpb3VzPC9lbT59JyBvcGVyYXRpb24uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TSSNnZXRQaHlzaWNhbGx5QWRqYWNlbnRJbmZlY3Rpb3VzKG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5Ob2RlKQorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJcHVibGljIHZvaWQgdGVzdEdldFBoeXNpY2FsbHlBZGphY2VudEluZmVjdGlvdXNfX05vZGUoKSB7CisJCWFzc2VydFRydWUodHJ1ZSk7CisJfQorCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIFN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWwgY3JlYXRlTGFiZWxGaXh0dXJlKCkgeworCQlyZXR1cm4gU0lMYWJlbFRlc3QuY3JlYXRlRml4dHVyZSgpOworCX0gLy8gY3JlYXRlTGFiZWxWYWx1ZUZpeHR1cmUKKworCUBPdmVycmlkZQorCXByb3RlY3RlZCBFQ2xhc3MgZ2V0RGlzZWFzZU1vZGVsTGFiZWxDbGFzcygpIHsKKwkJcmV0dXJuIFN0YW5kYXJkUGFja2FnZS5lSU5TVEFOQ0UuZ2V0U0lMYWJlbCgpOworCX0gLy8gZ2V0RGlzZWFzZU1vZGVsTGFiZWxDbGFzcworCisJCisKK30gLy8gU0lUZXN0CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9zdGFuZGFyZC90ZXN0cy9TYW5pdHlDaGVja2VyVGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvc3RhbmRhcmQvdGVzdHMvU2FuaXR5Q2hlY2tlclRlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYjllNTA3Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvc3RhbmRhcmQvdGVzdHMvU2FuaXR5Q2hlY2tlclRlc3QuamF2YQpAQCAtMCwwICsxLDY0IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC50ZXN0czsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLlNhbml0eUNoZWNrZXI7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIEEgdGVzdCBjYXNlIGZvciB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+U2FuaXR5IENoZWNrZXI8L2I+PC9lbT4nLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBhYnN0cmFjdCBjbGFzcyBTYW5pdHlDaGVja2VyVGVzdCBleHRlbmRzIFRlc3RDYXNlIHsKKworCS8qKgorCSAqIFRoZSBmaXh0dXJlIGZvciB0aGlzIFNhbml0eSBDaGVja2VyIHRlc3QgY2FzZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgU2FuaXR5Q2hlY2tlciBmaXh0dXJlID0gbnVsbDsKKworCS8qKgorCSAqIENvbnN0cnVjdHMgYSBuZXcgU2FuaXR5IENoZWNrZXIgdGVzdCBjYXNlIHdpdGggdGhlIGdpdmVuIG5hbWUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFNhbml0eUNoZWNrZXJUZXN0KFN0cmluZyBuYW1lKSB7CisJCXN1cGVyKG5hbWUpOworCX0KKworCS8qKgorCSAqIFNldHMgdGhlIGZpeHR1cmUgZm9yIHRoaXMgU2FuaXR5IENoZWNrZXIgdGVzdCBjYXNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIHNldEZpeHR1cmUoU2FuaXR5Q2hlY2tlciBmaXh0dXJlKSB7CisJCXRoaXMuZml4dHVyZSA9IGZpeHR1cmU7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgZml4dHVyZSBmb3IgdGhpcyBTYW5pdHkgQ2hlY2tlciB0ZXN0IGNhc2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIFNhbml0eUNoZWNrZXIgZ2V0Rml4dHVyZSgpIHsKKwkJcmV0dXJuIGZpeHR1cmU7CisJfQorCit9IC8vU2FuaXR5Q2hlY2tlclRlc3QKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3N0YW5kYXJkL3Rlc3RzL1N0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWxUZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9zdGFuZGFyZC90ZXN0cy9TdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZmMmRkODcKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9zdGFuZGFyZC90ZXN0cy9TdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsVGVzdC5qYXZhCkBAIC0wLDAgKzEsNzUgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLnRlc3RzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsVmFsdWU7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gQSB0ZXN0IGNhc2UgZm9yIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5EaXNlYXNlIE1vZGVsIExhYmVsPC9iPjwvZW0+Jy4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgYWJzdHJhY3QgY2xhc3MgU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbFRlc3QgZXh0ZW5kcworCQlEaXNlYXNlTW9kZWxMYWJlbFRlc3QgeworCS8qKgorCSAqIENvbnN0cnVjdHMgYSBuZXcgRGlzZWFzZSBNb2RlbCBMYWJlbCB0ZXN0IGNhc2Ugd2l0aCB0aGUgZ2l2ZW4gbmFtZS4gPCEtLQorCSAqIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBwYXJhbSBuYW1lCisJICogCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBTdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsVGVzdChTdHJpbmcgbmFtZSkgeworCQlzdXBlcihuYW1lKTsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBmaXh0dXJlIGZvciB0aGlzIERpc2Vhc2UgTW9kZWwgTGFiZWwgdGVzdCBjYXNlLiA8IS0tCisJICogYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJcHJvdGVjdGVkIFN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWwgZ2V0Rml4dHVyZSgpIHsKKwkJcmV0dXJuIChTdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsKWZpeHR1cmU7CisJfQorCisJLyoqCisJICogVGVzdHMgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWwjZ2V0Q3VycmVudFN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZSgpIDxlbT5DdXJyZW50IFN0YW5kYXJkIERpc2Vhc2UgTW9kZWwgTGFiZWwgVmFsdWU8L2VtPn0nCisJICogZmVhdHVyZSBnZXR0ZXIuIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWwjZ2V0Q3VycmVudFN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZSgpCisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlwdWJsaWMgdm9pZCB0ZXN0R2V0Q3VycmVudFN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZSgpIHsKKwkJZmluYWwgU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbCBzdGFuZGFyZExhYmVsID0gZ2V0Rml4dHVyZSgpOworCQlmaW5hbCBTdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsVmFsdWUgdmFsdWUgPSAoU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbFZhbHVlKXN0YW5kYXJkTGFiZWwKKwkJCQkuZ2V0Q3VycmVudFZhbHVlKCk7CisJCWFzc2VydE5vdE51bGwodmFsdWUpOworCX0gLy8gdGVzdEdldEN1cnJlbnRTdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsVmFsdWUKKworCS8qKgorCSAqIFRlc3RzIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsI2dldE5leHRTdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsVmFsdWUoKSA8ZW0+TmV4dCBTdGFuZGFyZCBEaXNlYXNlIE1vZGVsIExhYmVsIFZhbHVlPC9lbT59JworCSAqIGZlYXR1cmUgZ2V0dGVyLiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsI2dldE5leHRTdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsVmFsdWUoKQorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJcHVibGljIHZvaWQgdGVzdEdldE5leHRTdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsVmFsdWUoKSB7CisJCWZpbmFsIFN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWwgc3RhbmRhcmRMYWJlbCA9IGdldEZpeHR1cmUoKTsKKwkJZmluYWwgU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbFZhbHVlIHZhbHVlID0gKFN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZSlzdGFuZGFyZExhYmVsCisJCQkJLmdldE5leHRWYWx1ZSgpOworCQlhc3NlcnROb3ROdWxsKHZhbHVlKTsKKwl9IC8vIHRlc3RHZXROZXh0U3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbFZhbHVlCisKK30gLy8gU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbFRlc3QKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3N0YW5kYXJkL3Rlc3RzL1N0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZVRlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3N0YW5kYXJkL3Rlc3RzL1N0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZVRlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MDYyZjg5Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvc3RhbmRhcmQvdGVzdHMvU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbFZhbHVlVGVzdC5qYXZhCkBAIC0wLDAgKzEsNzAgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLnRlc3RzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsVmFsdWU7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gQSB0ZXN0IGNhc2UgZm9yIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5EaXNlYXNlIE1vZGVsIExhYmVsIFZhbHVlPC9iPjwvZW0+Jy4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgYWJzdHJhY3QgY2xhc3MgU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbFZhbHVlVGVzdCBleHRlbmRzCisJCURpc2Vhc2VNb2RlbExhYmVsVmFsdWVUZXN0IHsKKwkvKioKKwkgKiBUZXN0IHZhbHVlIGZvciBTdXNjZXB0aWJsZQorCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgZG91YmxlIFRFU1RfUyA9IDE7CisKKwkvKioKKwkgKiBUZXN0IHZhbHVlIGZvciBTdXNjZXB0aWJsZQorCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgZG91YmxlIFRFTVBfVEVTVF9TID0gVEVTVF9TICsgMTA7CisKKwkvKioKKwkgKiBDb25zdHJ1Y3RzIGEgbmV3IERpc2Vhc2UgTW9kZWwgTGFiZWwgVmFsdWUgdGVzdCBjYXNlIHdpdGggdGhlIGdpdmVuIG5hbWUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAcGFyYW0gbmFtZQorCSAqIAorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbFZhbHVlVGVzdChTdHJpbmcgbmFtZSkgeworCQlzdXBlcihuYW1lKTsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBmaXh0dXJlIGZvciB0aGlzIERpc2Vhc2UgTW9kZWwgTGFiZWwgVmFsdWUgdGVzdCBjYXNlLiA8IS0tCisJICogYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbFZhbHVlIGdldEZpeHR1cmUoKSB7CisJCXJldHVybiAoU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbFZhbHVlKWZpeHR1cmU7CisJfQorCisKKwkvKioKKwkgKiBUaGUgZGlzZWFzZSBtb2RlbCBsYWJlbCB2YWx1ZSByZXByZXNlbnRzIHRoZSBhZGRpdGlvbnMgdG8gdGhlIHN0YXRlcworCSAqIGNhdXNlZCBieSB0aGUgZGlzZWFzZS4gVGhlIGNvbnZlcnNpb24gY3JlYXRlcyBhIGRpZmZlcmVudCB2YWx1ZSB0aGF0CisJICogcmVwcmVzZW50cyB0aGUgZXF1aXZhbGVudCBzdWJ0cmFjdGlvbnMgZnJvbSB0aGUgc291cmNlIHN0YXRlcy4KKwkgKiAKKwkgKiBAcGFyYW0gZml4dHVyZQorCSAqICAgICAgICAgICAgdGhlIGRpc2Vhc2UgbW9kZWwgc3RhdGUgbGFiZWwgdmFsdWUgdW5kZXIgdGVzdAorCSAqIEByZXR1cm4gdGhlIGVxdWl2YWxlbnQgdmFsdWUgb2YgdGhlIHNvdXJjZSBzdGF0ZXMKKwkgKi8KKwlwcm90ZWN0ZWQgYWJzdHJhY3QgU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbFZhbHVlIGdldEV4cGVjdGVkQ29udmVydFRvU291cmNlU3RhdGVzKAorCQkJU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbFZhbHVlIGZpeHR1cmUpOworCit9IC8vIFN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZVRlc3QKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3N0YW5kYXJkL3Rlc3RzL1N0YW5kYXJkRGlzZWFzZU1vZGVsU2NlbmFyaW9UZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9zdGFuZGFyZC90ZXN0cy9TdGFuZGFyZERpc2Vhc2VNb2RlbFNjZW5hcmlvVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBkNjMyNTYKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9zdGFuZGFyZC90ZXN0cy9TdGFuZGFyZERpc2Vhc2VNb2RlbFNjZW5hcmlvVGVzdC5qYXZhCkBAIC0wLDAgKzEsMjEgQEAKKy8vIFN0YW5kYXJkRGlzZWFzZU1vZGVsU2NlbmFyaW9UZXN0LmphdmEKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLnRlc3RzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqCisgKiBUaGlzIGNsYXNzIGlzIGEgSlVuaXQgdGVzdCBjYXNlIGZvciBTdGFuZGFyZCBEaXNlYXNlIE1vZGVscyBTY2VuYXJpb3MKKyAqLworcHVibGljIGFic3RyYWN0IGNsYXNzIFN0YW5kYXJkRGlzZWFzZU1vZGVsU2NlbmFyaW9UZXN0IGV4dGVuZHMKKwkJRGlzZWFzZU1vZGVsU2NlbmFyaW9UZXN0IHsKKwkvLyBOb3RoaW5nCit9IC8vIFN0YW5kYXJkRGlzZWFzZU1vZGVsU2NlbmFyaW9UZXN0CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9zdGFuZGFyZC90ZXN0cy9TdGFuZGFyZERpc2Vhc2VNb2RlbFRlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3N0YW5kYXJkL3Rlc3RzL1N0YW5kYXJkRGlzZWFzZU1vZGVsVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVmYzViMGQKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9zdGFuZGFyZC90ZXN0cy9TdGFuZGFyZERpc2Vhc2VNb2RlbFRlc3QuamF2YQpAQCAtMCwwICsxLDI1OSBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQudGVzdHM7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuRUxpc3Q7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5EdWJsaW5Db3JlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5EeW5hbWljTGFiZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkVkZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkdyYXBoOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5MYWJlbFZhbHVlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5Ob2RlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5TVEVNVGltZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5pbXBsLlRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsSW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuQWdncmVnYXRpbmdTRUlSRGlzZWFzZU1vZGVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5BZ2dyZWdhdGluZ1NJRGlzZWFzZU1vZGVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5BZ2dyZWdhdGluZ1NJUkRpc2Vhc2VNb2RlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmREaXNlYXNlTW9kZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWw7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gQSB0ZXN0IGNhc2UgZm9yIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5EaXNlYXNlIE1vZGVsPC9iPjwvZW0+Jy4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogPHA+CisgKiBUaGUgZm9sbG93aW5nIG9wZXJhdGlvbnMgYXJlIHRlc3RlZDoKKyAqIDx1bD4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmREaXNlYXNlTW9kZWwjZ2V0RWZmZWN0aXZlSW5mZWN0aW91cyhvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguTm9kZSwgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWwsIGRvdWJsZSkgPGVtPkdldCBFZmZlY3RpdmUgSW5mZWN0aW91czwvZW0+fTwvbGk+CisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkRGlzZWFzZU1vZGVsI2dldE5vcm1hbGl6ZWRFZmZlY3RpdmVJbmZlY3Rpb3VzKG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5Ob2RlLCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbCwgZG91YmxlKSA8ZW0+R2V0IE5vcm1hbGl6ZWQgRWZmZWN0aXZlIEluZmVjdGlvdXM8L2VtPn08L2xpPgorICogPC91bD4KKyAqIDwvcD4KKyAqIEBnZW5lcmF0ZWQKKyAqLworQFN1cHByZXNzV2FybmluZ3MoImFsbCIpCitwdWJsaWMgYWJzdHJhY3QgY2xhc3MgU3RhbmRhcmREaXNlYXNlTW9kZWxUZXN0IGV4dGVuZHMgRGlzZWFzZU1vZGVsVGVzdCB7CisKKwkvKioKKwkgKiBUaGlzIGlzIGluaXRpYWxpemVkIHRvIGNvbnRhaW4gYSBkaXNlYXNlIGxhYmVsLAorCSAqLworCXByb3RlY3RlZCBTdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsIGxhYmVsRml4dHVyZSA9IG51bGw7CisKKwkvKioKKwkgKiBUaGlzIGlzIHRoZSBwZXJpb2Qgb2YgdGltZSAobWlsbGlzZWNvbmRzKSBmb3IgdGhlIGRpZWFzZSBtb2RlbCByYXRlcy4KKwkgKiBWYWx1ZTogMSBkYXkuCisJICovCisJZmluYWwgcHVibGljIHN0YXRpYyBsb25nIFRFU1RfVElNRV9QRVJJT0QgPSBTVEVNVGltZS5Vbml0cy5EQVkuZ2V0TWlsbGlzZWNvbmRzKCk7CisKKwkvKioKKwkgKiBDb25zdHJ1Y3RzIGEgbmV3IERpc2Vhc2UgTW9kZWwgdGVzdCBjYXNlIHdpdGggdGhlIGdpdmVuIG5hbWUuIDwhLS0KKwkgKiBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAcGFyYW0gbmFtZQorCSAqICAgICAgICAgICAgdGhlIG5hbWUgb2YgdGhlIHRlc3QKKwkgKiAKKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFN0YW5kYXJkRGlzZWFzZU1vZGVsVGVzdChTdHJpbmcgbmFtZSkgeworCQlzdXBlcihuYW1lKTsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBmaXh0dXJlIGZvciB0aGlzIERpc2Vhc2UgTW9kZWwgdGVzdCBjYXNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MKKwkgKiAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCBTdGFuZGFyZERpc2Vhc2VNb2RlbCBnZXRGaXh0dXJlKCkgeworCQlyZXR1cm4gKFN0YW5kYXJkRGlzZWFzZU1vZGVsKWZpeHR1cmU7CisJfQorCisJCisJLyoqCisJICogVGVzdHMgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkRGlzZWFzZU1vZGVsI2NhbGN1bGF0ZURlbHRhKG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5TVEVNVGltZSwgbG9uZywgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLkVMaXN0KSA8ZW0+Q2FsY3VsYXRlIERlbHRhPC9lbT59JyBvcGVyYXRpb24uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZERpc2Vhc2VNb2RlbCNjYWxjdWxhdGVEZWx0YShvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuU1RFTVRpbWUsIGxvbmcsIG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5FTGlzdCkKKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCXB1YmxpYyB2b2lkIHRlc3RDYWxjdWxhdGVEZWx0YV9fU1RFTVRpbWVfbG9uZ19FTGlzdCgpIHsKKwkJCisJCVN0YW5kYXJkRGlzZWFzZU1vZGVsIGRNb2RlbCA9IGdldEZpeHR1cmUoKTsKKwkJLy8vIG11c3Qgc2V0IHRoZSBkdWJsaW4gY29yZSBhbmQgVVJJIHRvIHBhc3Mgc2FuaXR5CisJCS8vIFRPRE8gZWFjaCBtb2RlbCBmaXh0dXJlIHNob3VsZCBwcm9iYWJseSBkbyB0aGlzLgorCQlpZihkTW9kZWwuZ2V0VVJJKCk9PW51bGwpIHsKKwkJCWRNb2RlbC5zZXRVUkkoRGlzZWFzZU1vZGVsVGVzdFV0aWwuREVGQVVMVF9VUkkpOworCQkJRHVibGluQ29yZSBkYyA9IGRNb2RlbC5nZXREdWJsaW5Db3JlKCk7CisJCQlkYy5zZXRJZGVudGlmaWVyKGRNb2RlbC5nZXRVUkkoKS50b1N0cmluZygpKTsKKwkJfQorCQkKKwkJLy8gaWYgdGhpcyBpcyB0aGUgYWdncmVnYXRpbmcgZGlzZWFzZSBtb2RlbCwgdGhlcmUgaXMgbm8gY2FsY3VsYXRlRGVsdGEgbWV0aG9kIHRvIHRlc3QKKwkJYm9vbGVhbiBhZ2dyZWdhdGluZ01vZGVsID0gZmFsc2U7CisJCQorCQlpZiggKGRNb2RlbCBpbnN0YW5jZW9mIEFnZ3JlZ2F0aW5nU0lEaXNlYXNlTW9kZWwpIHx8CisJCQkoZE1vZGVsIGluc3RhbmNlb2YgQWdncmVnYXRpbmdTSVJEaXNlYXNlTW9kZWwpfHwKKwkJCShkTW9kZWwgaW5zdGFuY2VvZiBBZ2dyZWdhdGluZ1NFSVJEaXNlYXNlTW9kZWwpICkgYWdncmVnYXRpbmdNb2RlbCA9IHRydWU7CisJCQorCQlpZighYWdncmVnYXRpbmdNb2RlbCkgeworCQkJLy8gQUxMIG90aGVyIG1vZGVscworCQkJU1RFTVRpbWUgdGltZSA9IERpc2Vhc2VNb2RlbFRlc3RVdGlsLmdldFNURU1UaW1lKCk7CisJCQlsb25nIHRpbWVEZWx0YSA9IDE7CisJCQlFTGlzdDxEeW5hbWljTGFiZWw+IGxhYmVscyA9IGRNb2RlbC5nZXRMYWJlbHNUb1VwZGF0ZSgpOworCQkJaWYobGFiZWxzIT1udWxsKSB7CisJCQkJRHluYW1pY0xhYmVsIGRMYWJlbCA9IGdldExhYmVsRml4dHVyZSgpOworCQkJCWxhYmVscy5hZGQoZExhYmVsKTsKKwkJCQlhc3NlcnRUcnVlKGRNb2RlbC5zYW5lKCkpOworCQkJCWRNb2RlbC5jYWxjdWxhdGVEZWx0YSh0aW1lLCB0aW1lRGVsdGEsIGxhYmVscyk7CisJCQkJYXNzZXJ0VHJ1ZShkTW9kZWwuc2FuZSgpKTsKKwkJCX0gZWxzZSB7CisJCQkJZmFpbCgpOworCQkJfQorCQl9CisJCQorCQkKKwl9CisKKwkvKioKKwkgKiBUZXN0cyB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmREaXNlYXNlTW9kZWwjZG9Nb2RlbFNwZWNpZmljQWRqdXN0bWVudHMob3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZSkgPGVtPkRvIE1vZGVsIFNwZWNpZmljIEFkanVzdG1lbnRzPC9lbT59JyBvcGVyYXRpb24uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZERpc2Vhc2VNb2RlbCNkb01vZGVsU3BlY2lmaWNBZGp1c3RtZW50cyhvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbFZhbHVlKQorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJcHVibGljIHZvaWQgdGVzdERvTW9kZWxTcGVjaWZpY0FkanVzdG1lbnRzX19TdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsVmFsdWUoKSB7CisJCVN0YW5kYXJkRGlzZWFzZU1vZGVsIGRNb2RlbCA9IGdldEZpeHR1cmUoKTsKKwkJLy8vIG11c3Qgc2V0IHRoZSBkdWJsaW4gY29yZSBhbmQgVVJJIHRvIHBhc3Mgc2FuaXR5CisJCS8vIFRPRE8gZWFjaCBtb2RlbCBmaXh0dXJlIHNob3VsZCBwcm9iYWJseSBkbyB0aGlzLgorCQlpZihkTW9kZWwuZ2V0VVJJKCk9PW51bGwpIHsKKwkJCWRNb2RlbC5zZXRVUkkoRGlzZWFzZU1vZGVsVGVzdFV0aWwuREVGQVVMVF9VUkkpOworCQkJRHVibGluQ29yZSBkYyA9IGRNb2RlbC5nZXREdWJsaW5Db3JlKCk7CisJCQlkYy5zZXRJZGVudGlmaWVyKGRNb2RlbC5nZXRVUkkoKS50b1N0cmluZygpKTsKKwkJfQorCQkKKwkJLy8gaWYgdGhpcyBpcyB0aGUgYWdncmVnYXRpbmcgZGlzZWFzZSBtb2RlbCwgdGhlcmUgaXMgbm8gY2FsY3VsYXRlRGVsdGEgbWV0aG9kIHRvIHRlc3QKKwkJYm9vbGVhbiBhZ2dyZWdhdGluZ01vZGVsID0gZmFsc2U7CisJCQorCQkKKwkJaWYoIChkTW9kZWwgaW5zdGFuY2VvZiBBZ2dyZWdhdGluZ1NJRGlzZWFzZU1vZGVsKSB8fAorCQkJKGRNb2RlbCBpbnN0YW5jZW9mIEFnZ3JlZ2F0aW5nU0lSRGlzZWFzZU1vZGVsKXx8CisJCQkoZE1vZGVsIGluc3RhbmNlb2YgQWdncmVnYXRpbmdTRUlSRGlzZWFzZU1vZGVsKSApIGFnZ3JlZ2F0aW5nTW9kZWwgPSB0cnVlOworCQkKKwkJaWYoIWFnZ3JlZ2F0aW5nTW9kZWwpIHsKKwkJCS8vIEFMTCBvdGhlciBtb2RlbHMKKwkJCUVMaXN0PER5bmFtaWNMYWJlbD4gbGFiZWxzID0gZE1vZGVsLmdldExhYmVsc1RvVXBkYXRlKCk7CisJCQlpZihsYWJlbHMhPW51bGwpIHsKKwkJCQlMYWJlbFZhbHVlIGRMYWJlbFZhbHVlID0gZ2V0TGFiZWxGaXh0dXJlKCkuZ2V0Q3VycmVudFZhbHVlKCk7CisJCQkJYXNzZXJ0VHJ1ZShkTW9kZWwuc2FuZSgpKTsKKwkJCQlkTW9kZWwuZG9Nb2RlbFNwZWNpZmljQWRqdXN0bWVudHMoZExhYmVsVmFsdWUpOworCQkJCWFzc2VydFRydWUoZE1vZGVsLnNhbmUoKSk7CisJCQl9IGVsc2UgeworCQkJCWZhaWwoKTsKKwkJCX0KKwkJfQorCQkKKwkJCisJfQorCisJLyoqCisJICogVGVzdHMgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkRGlzZWFzZU1vZGVsI2dldEVmZmVjdGl2ZUluZmVjdGlvdXMob3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLk5vZGUsIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsLCBkb3VibGUpIDxlbT5HZXQgRWZmZWN0aXZlIEluZmVjdGlvdXM8L2VtPn0nIG9wZXJhdGlvbi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkRGlzZWFzZU1vZGVsI2dldEVmZmVjdGl2ZUluZmVjdGlvdXMob3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLk5vZGUsIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsLCBkb3VibGUpCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIHRlc3RHZXRFZmZlY3RpdmVJbmZlY3Rpb3VzX19Ob2RlX1N0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWxfZG91YmxlKCkgeworCQkvLyBUT0RPOiBpbXBsZW1lbnQgdGhpcyBvcGVyYXRpb24gdGVzdCBtZXRob2QKKwkJLy8gRW5zdXJlIHRoYXQgeW91IHJlbW92ZSBAZ2VuZXJhdGVkIG9yIG1hcmsgaXQgQGdlbmVyYXRlZCBOT1QKKwkJZmFpbCgpOworCX0KKworCS8qKgorCSAqIFRlc3RzIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZERpc2Vhc2VNb2RlbCNnZXROb3JtYWxpemVkRWZmZWN0aXZlSW5mZWN0aW91cyhvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguTm9kZSwgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWwsIGRvdWJsZSkgPGVtPkdldCBOb3JtYWxpemVkIEVmZmVjdGl2ZSBJbmZlY3Rpb3VzPC9lbT59JyBvcGVyYXRpb24uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZERpc2Vhc2VNb2RlbCNnZXROb3JtYWxpemVkRWZmZWN0aXZlSW5mZWN0aW91cyhvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguTm9kZSwgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWwsIGRvdWJsZSkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgdGVzdEdldE5vcm1hbGl6ZWRFZmZlY3RpdmVJbmZlY3Rpb3VzX19Ob2RlX1N0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWxfZG91YmxlKCkgeworCQkvLyBUT0RPOiBpbXBsZW1lbnQgdGhpcyBvcGVyYXRpb24gdGVzdCBtZXRob2QKKwkJLy8gRW5zdXJlIHRoYXQgeW91IHJlbW92ZSBAZ2VuZXJhdGVkIG9yIG1hcmsgaXQgQGdlbmVyYXRlZCBOT1QKKwkJZmFpbCgpOworCX0KKworCS8qKgorCSAqIFRlc3RzIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5JbnRlZ3JhdGlvbkRlY29yYXRvciNpc0RldGVybWluaXN0aWMoKSA8ZW0+SXMgRGV0ZXJtaW5pc3RpYzwvZW0+fScgb3BlcmF0aW9uLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuSW50ZWdyYXRpb25EZWNvcmF0b3IjaXNEZXRlcm1pbmlzdGljKCkKKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCXB1YmxpYyB2b2lkIHRlc3RJc0RldGVybWluaXN0aWMoKSB7CisJCVN0YW5kYXJkRGlzZWFzZU1vZGVsIGRNb2RlbCA9IGdldEZpeHR1cmUoKTsKKwkJLy8gaXQgbWlnaHQgYmUgLCBvciBpdCBtaWdodCBub3QgYmUuIEVpdGhlciBpcyBvayBzbyBsb25nIGFzIHRoZSBhY2Nlc3NvciB3b3JrcworCQlpZihkTW9kZWwuaXNEZXRlcm1pbmlzdGljKCkpIGFzc2VydFRydWUodHJ1ZSk7CisJCWlmKCFkTW9kZWwuaXNEZXRlcm1pbmlzdGljKCkpIGFzc2VydFRydWUodHJ1ZSk7CisJfQorCisJLyoqCisJICogQHJldHVybiBhIGRpc2Vhc2UgbW9kZWwgbGFiZWwgdmFsdWUgdG8gYmUgdXNlZCBmb3IgdGVzdGluZworCSAqLworCXByaXZhdGUgU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbCBnZXRMYWJlbEZpeHR1cmUoKSB7CisJCXJldHVybiBsYWJlbEZpeHR1cmU7CisJfSAvLyBnZXRMYWJlbEZpeHR1cmUKKworCS8qKgorCSAqIEBwYXJhbSBsYWJlbEZpeHR1cmUKKwkgKiAgICAgICAgICAgIHRoZSBkaXNlYXNlIG1vZGVsIGxhYmVsIHZhbHVlIGZvciB0ZXN0aW5nCisJICovCisJcHJvdGVjdGVkIHZvaWQgc2V0TGFiZWxGaXh0dXJlKFN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWwgbGFiZWxGaXh0dXJlKSB7CisJCXRoaXMubGFiZWxGaXh0dXJlID0gbGFiZWxGaXh0dXJlOworCX0gLy8gc2V0TGFiZWxGaXh0dXJlCisKKwkvKioKKwkgKiBDcmVhdGUgYSBsYWJlbCB2YWx1ZSBmb3IgdGVzdGluZy4KKwkgKi8KKwlwcm90ZWN0ZWQgYWJzdHJhY3QgU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbCBjcmVhdGVMYWJlbEZpeHR1cmUoKTsKKworCS8qKgorCSAqIHRlc3QgZ2V0VHJhbnNwb3J0RWRnZXNUb05vZGUKKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCQorCXB1YmxpYyB2b2lkIHRlc3RHZXRUcmFuc3BvcnRFZGdlc1RvTm9kZSgpIHsKKwkJZmluYWwgR3JhcGggZml4dHVyZSA9IERpc2Vhc2VNb2RlbFRlc3RVdGlsLmNyZWF0ZUxhdHRpY2VHcmFwaCgyLCAyLAorCQkJCURpc2Vhc2VNb2RlbFRlc3RVdGlsLlRFU1RfUE9QVUxBVElPTl9DT1VOVCwKKwkJCQlEaXNlYXNlTW9kZWxUZXN0VXRpbC5URVNUX0FSRUEpOworCQlmaW5hbCBOb2RlIG5vZGUgPSBEaXNlYXNlTW9kZWxUZXN0VXRpbC5nZXRSZWdpb24oZml4dHVyZSwgMSwgMCk7CisKKwkJZmluYWwgTGlzdDxFZGdlPiB0cmFuc3BvcnRFZGdlcyA9IFRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsSW1wbAorCQkJCS5nZXRUcmFuc3BvcnRFZGdlc1RvTm9kZShub2RlLAorCQkJCQkJRGlzZWFzZU1vZGVsVGVzdFV0aWwuVEVTVF9QT1BVTEFUSU9OX0lERU5USUZJRVIpOworCQkvLyAyICsgMiByZWZsZXhpdmUgZWRnZXMgKyAxIGRpcmVjdGVkIGluIHRvIHRoZSBub2RlCisJCWFzc2VydFRydWUodHJhbnNwb3J0RWRnZXMuc2l6ZSgpID09IDUpOworCX0gLy8gdGVzdEdldFRyYW5zcG9ydEVkZ2VzVG9Ob2RlCisKKworCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogCisJICogQHNlZSBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2UjdGVhckRvd24oKQorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJcHJvdGVjdGVkIHZvaWQgdGVhckRvd24oKSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJc2V0Rml4dHVyZShudWxsKTsKKwkJc2V0TGFiZWxGaXh0dXJlKG51bGwpOworCX0gLy8gdGVhckRvd24KKworfSAvLyBTdGFuZGFyZERpc2Vhc2VNb2RlbFRlc3QKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3N0YW5kYXJkL3Rlc3RzL1N0YW5kYXJkSW5mZWN0b3JUZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9zdGFuZGFyZC90ZXN0cy9TdGFuZGFyZEluZmVjdG9yVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM3MWExNTgKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9zdGFuZGFyZC90ZXN0cy9TdGFuZGFyZEluZmVjdG9yVGVzdC5qYXZhCkBAIC0wLDAgKzEsNDYgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLnRlc3RzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZEluZmVjdG9yOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IEEgdGVzdCBjYXNlIGZvciB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+SW5mZWN0b3I8L2I+PC9lbT4nLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBhYnN0cmFjdCBjbGFzcyBTdGFuZGFyZEluZmVjdG9yVGVzdCBleHRlbmRzIEluZmVjdG9yVGVzdCB7CisJLyoqCisJICogQ29uc3RydWN0cyBhIG5ldyBJbmZlY3RvciB0ZXN0IGNhc2Ugd2l0aCB0aGUgZ2l2ZW4gbmFtZS4gPCEtLQorCSAqIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBwYXJhbSBuYW1lCisJICogCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBTdGFuZGFyZEluZmVjdG9yVGVzdChTdHJpbmcgbmFtZSkgeworCQlzdXBlcihuYW1lKTsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBmaXh0dXJlIGZvciB0aGlzIEluZmVjdG9yIHRlc3QgY2FzZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgU3RhbmRhcmRJbmZlY3RvciBnZXRGaXh0dXJlKCkgeworCQlyZXR1cm4gKFN0YW5kYXJkSW5mZWN0b3IpZml4dHVyZTsKKwl9CisKK30gLy8gU3RhbmRhcmRJbmZlY3RvclRlc3QKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3N0YW5kYXJkL3Rlc3RzL1N0YW5kYXJkU3RvY2hhc3RpY0Rpc2Vhc2VNb2RlbFRlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3N0YW5kYXJkL3Rlc3RzL1N0YW5kYXJkU3RvY2hhc3RpY0Rpc2Vhc2VNb2RlbFRlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xODYyYmUzCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvc3RhbmRhcmQvdGVzdHMvU3RhbmRhcmRTdG9jaGFzdGljRGlzZWFzZU1vZGVsVGVzdC5qYXZhCkBAIC0wLDAgKzEsNzkgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLnRlc3RzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGphdmEudXRpbC5SYW5kb207CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmRTdG9jaGFzdGljRGlzZWFzZU1vZGVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5pbXBsLlN0YW5kYXJkU3RvY2hhc3RpY0Rpc2Vhc2VNb2RlbEltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLmltcGwuU3RvY2hhc3RpY0Rpc2Vhc2VNb2RlbEltcGw7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIEEgdGVzdCBjYXNlIGZvciB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+U3RvY2hhc3RpYyBEaXNlYXNlIE1vZGVsPC9iPjwvZW0+Jy4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogPHA+CisgKiBUaGUgZm9sbG93aW5nIG9wZXJhdGlvbnMgYXJlIHRlc3RlZDoKKyAqIDx1bD4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmRTdG9jaGFzdGljRGlzZWFzZU1vZGVsI2NvbXB1dGVOb2lzZSgpIDxlbT5Db21wdXRlIE5vaXNlPC9lbT59PC9saT4KKyAqIDwvdWw+CisgKiA8L3A+CisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBhYnN0cmFjdCBjbGFzcyBTdGFuZGFyZFN0b2NoYXN0aWNEaXNlYXNlTW9kZWxUZXN0IGV4dGVuZHMgU3RvY2hhc3RpY0Rpc2Vhc2VNb2RlbFRlc3QgeworCS8qKgorCSAqIENvbnN0cnVjdHMgYSBuZXcgU3RvY2hhc3RpYyBEaXNlYXNlIE1vZGVsIHRlc3QgY2FzZSB3aXRoIHRoZSBnaXZlbiBuYW1lLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBTdGFuZGFyZFN0b2NoYXN0aWNEaXNlYXNlTW9kZWxUZXN0KFN0cmluZyBuYW1lKSB7CisJCXN1cGVyKG5hbWUpOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIGZpeHR1cmUgZm9yIHRoaXMgU3RvY2hhc3RpYyBEaXNlYXNlIE1vZGVsIHRlc3QgY2FzZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgU3RhbmRhcmRTdG9jaGFzdGljRGlzZWFzZU1vZGVsIGdldEZpeHR1cmUoKSB7CisJCXJldHVybiAoU3RhbmRhcmRTdG9jaGFzdGljRGlzZWFzZU1vZGVsKWZpeHR1cmU7CisJfQorCisJLyoqCisJICogVGVzdHMgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkU3RvY2hhc3RpY0Rpc2Vhc2VNb2RlbCNjb21wdXRlTm9pc2UoKSA8ZW0+Q29tcHV0ZSBOb2lzZTwvZW0+fScgb3BlcmF0aW9uLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmRTdG9jaGFzdGljRGlzZWFzZU1vZGVsI2NvbXB1dGVOb2lzZSgpCisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlwdWJsaWMgdm9pZCB0ZXN0Q29tcHV0ZU5vaXNlKCkgeworCQlTdGFuZGFyZFN0b2NoYXN0aWNEaXNlYXNlTW9kZWxUZXN0LnN0YXRpY0NvbXB1dGVOb2lzZVRlc3QoKTsKKwl9CisJCisJCisJLyoqCisJICogc3RhdGljIHRlc3QgbWV0aG9kLiBDbGFzcyBpcyBhYnN0cmFjdC4KKwkgKi8KKwlwdWJsaWMgc3RhdGljIHZvaWQgc3RhdGljQ29tcHV0ZU5vaXNlVGVzdCgpIHsKKwkJUmFuZG9tIHJhbmQgPSBuZXcgUmFuZG9tKDApOworCQlkb3VibGUgclRlc3QgPSByYW5kLm5leHREb3VibGUoKTsKKwkJLy8gZm9yIHRlc3RpbmcgcHVycG9zZXMgd2Ugd2lsbCB0ZXN0IGF0IGEgZ2FpbiBvZiAxLjAKKwkJU3RvY2hhc3RpY0Rpc2Vhc2VNb2RlbEltcGwuc2V0TUFYX0dBSU4oMS4wKTsKKwkJZG91YmxlIG5vaXNlID0gU3RhbmRhcmRTdG9jaGFzdGljRGlzZWFzZU1vZGVsSW1wbC5jb21wdXRlTm9pc2UoMS4wLHJhbmQpOworCQlhc3NlcnRUcnVlICgobm9pc2UgPj0gMC4wICkmJihub2lzZSA8PSAyLjApKTsKKwl9CisJCisKK30gLy9TdGFuZGFyZFN0b2NoYXN0aWNEaXNlYXNlTW9kZWxUZXN0CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9zdGFuZGFyZC90ZXN0cy9TdGFuZGFyZFRlc3RzLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9zdGFuZGFyZC90ZXN0cy9TdGFuZGFyZFRlc3RzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2Y2ODFhMwotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3N0YW5kYXJkL3Rlc3RzL1N0YW5kYXJkVGVzdHMuamF2YQpAQCAtMCwwICsxLDgwIEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC50ZXN0czsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdDsKK2ltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdFN1aXRlOworaW1wb3J0IGp1bml0LnRleHR1aS5UZXN0UnVubmVyOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IEEgdGVzdCBzdWl0ZSBmb3IgdGhlICc8ZW0+PGI+c3RhbmRhcmQ8L2I+PC9lbT4nCisgKiBwYWNrYWdlLiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIFN0YW5kYXJkVGVzdHMgZXh0ZW5kcyBUZXN0U3VpdGUgeworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogCisJICogQHBhcmFtIGFyZ3MKKwkgKiAKKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgeworCQlUZXN0UnVubmVyLnJ1bihzdWl0ZSgpKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEByZXR1cm4KKwkgKiAKKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHN0YXRpYyBUZXN0IHN1aXRlKCkgeworCQlUZXN0U3VpdGUgc3VpdGUgPSBuZXcgU3RhbmRhcmRUZXN0cygic3RhbmRhcmQgVGVzdHMiKTsgLy8kTk9OLU5MUy0xJAorCQlzdWl0ZS5hZGRUZXN0U3VpdGUoRGV0ZXJtaW5pc3RpY1NFSVJEaXNlYXNlTW9kZWxUZXN0LmNsYXNzKTsKKwkJc3VpdGUuYWRkVGVzdFN1aXRlKERldGVybWluaXN0aWNTSURpc2Vhc2VNb2RlbFRlc3QuY2xhc3MpOworCQlzdWl0ZS5hZGRUZXN0U3VpdGUoRGV0ZXJtaW5pc3RpY1NJUkRpc2Vhc2VNb2RlbFRlc3QuY2xhc3MpOworCQlzdWl0ZS5hZGRUZXN0U3VpdGUoU0VJUkxhYmVsVGVzdC5jbGFzcyk7CisJCXN1aXRlLmFkZFRlc3RTdWl0ZShTRUlSTGFiZWxWYWx1ZVRlc3QuY2xhc3MpOworCQlzdWl0ZS5hZGRUZXN0U3VpdGUoU0lJbmZlY3RvclRlc3QuY2xhc3MpOworCQlzdWl0ZS5hZGRUZXN0U3VpdGUoU0lMYWJlbFRlc3QuY2xhc3MpOworCQlzdWl0ZS5hZGRUZXN0U3VpdGUoU0lMYWJlbFZhbHVlVGVzdC5jbGFzcyk7CisJCXN1aXRlLmFkZFRlc3RTdWl0ZShTSVJMYWJlbFRlc3QuY2xhc3MpOworCQlzdWl0ZS5hZGRUZXN0U3VpdGUoU0lSTGFiZWxWYWx1ZVRlc3QuY2xhc3MpOworCQlzdWl0ZS5hZGRUZXN0U3VpdGUoU3RvY2hhc3RpY1NFSVJEaXNlYXNlTW9kZWxUZXN0LmNsYXNzKTsKKwkJc3VpdGUuYWRkVGVzdFN1aXRlKFN0b2NoYXN0aWNTSURpc2Vhc2VNb2RlbFRlc3QuY2xhc3MpOworCQlzdWl0ZS5hZGRUZXN0U3VpdGUoU3RvY2hhc3RpY1NJUkRpc2Vhc2VNb2RlbFRlc3QuY2xhc3MpOworCQlzdWl0ZS5hZGRUZXN0U3VpdGUoU0lSSW5vY3VsYXRvclRlc3QuY2xhc3MpOworCQlzdWl0ZS5hZGRUZXN0U3VpdGUoU3RvY2hhc3RpY1BvaXNzb25TSURpc2Vhc2VNb2RlbFRlc3QuY2xhc3MpOworCQlzdWl0ZS5hZGRUZXN0U3VpdGUoU3RvY2hhc3RpY1BvaXNzb25TSVJEaXNlYXNlTW9kZWxUZXN0LmNsYXNzKTsKKwkJc3VpdGUuYWRkVGVzdFN1aXRlKFN0b2NoYXN0aWNQb2lzc29uU0VJUkRpc2Vhc2VNb2RlbFRlc3QuY2xhc3MpOworCQlzdWl0ZS5hZGRUZXN0U3VpdGUoSW5mZWN0b3JJbm9jdWxhdG9yQ29sbGVjdGlvblRlc3QuY2xhc3MpOworCQlzdWl0ZS5hZGRUZXN0U3VpdGUoSW5pdGlhbGl6ZXJUZXN0LmNsYXNzKTsKKwkJcmV0dXJuIHN1aXRlOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogCisJICogQHBhcmFtIG5hbWUKKwkgKiAKKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFN0YW5kYXJkVGVzdHMoU3RyaW5nIG5hbWUpIHsKKwkJc3VwZXIobmFtZSk7CisJfQorCit9IC8vIFN0YW5kYXJkVGVzdHMKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3N0YW5kYXJkL3Rlc3RzL1N0b2NoYXN0aWNEaXNlYXNlTW9kZWxUZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9zdGFuZGFyZC90ZXN0cy9TdG9jaGFzdGljRGlzZWFzZU1vZGVsVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIxNmY5OTUKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9zdGFuZGFyZC90ZXN0cy9TdG9jaGFzdGljRGlzZWFzZU1vZGVsVGVzdC5qYXZhCkBAIC0wLDAgKzEsNDQgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLnRlc3RzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdG9jaGFzdGljRGlzZWFzZU1vZGVsOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiBBIHRlc3QgY2FzZSBmb3IgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPlN0b2NoYXN0aWMgRGlzZWFzZSBNb2RlbDwvYj48L2VtPicuCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGFic3RyYWN0IGNsYXNzIFN0b2NoYXN0aWNEaXNlYXNlTW9kZWxUZXN0IGV4dGVuZHMgRGlzZWFzZU1vZGVsVGVzdCB7CisJLyoqCisJICogQ29uc3RydWN0cyBhIG5ldyBTdG9jaGFzdGljIERpc2Vhc2UgTW9kZWwgdGVzdCBjYXNlIHdpdGggdGhlIGdpdmVuIG5hbWUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFN0b2NoYXN0aWNEaXNlYXNlTW9kZWxUZXN0KFN0cmluZyBuYW1lKSB7CisJCXN1cGVyKG5hbWUpOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIGZpeHR1cmUgZm9yIHRoaXMgU3RvY2hhc3RpYyBEaXNlYXNlIE1vZGVsIHRlc3QgY2FzZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgU3RvY2hhc3RpY0Rpc2Vhc2VNb2RlbCBnZXRGaXh0dXJlKCkgeworCQlyZXR1cm4gKFN0b2NoYXN0aWNEaXNlYXNlTW9kZWwpZml4dHVyZTsKKwl9CisKK30gLy9TdG9jaGFzdGljRGlzZWFzZU1vZGVsVGVzdApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvc3RhbmRhcmQvdGVzdHMvU3RvY2hhc3RpY1BvaXNzb25TRUlSRGlzZWFzZU1vZGVsVGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvc3RhbmRhcmQvdGVzdHMvU3RvY2hhc3RpY1BvaXNzb25TRUlSRGlzZWFzZU1vZGVsVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU5MWQzMzMKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9zdGFuZGFyZC90ZXN0cy9TdG9jaGFzdGljUG9pc3NvblNFSVJEaXNlYXNlTW9kZWxUZXN0LmphdmEKQEAgLTAsMCArMSw5MyBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQudGVzdHM7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTAgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQganVuaXQudGV4dHVpLlRlc3RSdW5uZXI7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuVVJJOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5TVEVNVVJJOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uRHVibGluQ29yZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmRGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdG9jaGFzdGljUG9pc3NvblNFSVJEaXNlYXNlTW9kZWw7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIEEgdGVzdCBjYXNlIGZvciB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+U3RvY2hhc3RpYyBQb2lzc29uIFNFSVIgRGlzZWFzZSBNb2RlbDwvYj48L2VtPicuCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIFN0b2NoYXN0aWNQb2lzc29uU0VJUkRpc2Vhc2VNb2RlbFRlc3QgZXh0ZW5kcyBTRUlSVGVzdCB7CisKKwlwdWJsaWMgc3RhdGljIGZpbmFsIFVSSSBESVNFQVNFTU9ERUxfVVJJID0gU1RFTVVSSS5jcmVhdGVVUkkoImRpc2Vhc2VNb2RlbHMvdGVzdFN0b2NoYXN0aWNQb2lzc29uU0VJUkRpc2Vhc2VNb2RlbC5kZWNvcmF0b3IiKTsKKwlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBESVNFQVNFX05BTUUgPSAiU3RvY2hhc3RpY1BvaXNzb25TSURpc2Vhc2VNb2RlbCI7CisJCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgeworCQlUZXN0UnVubmVyLnJ1bihTdG9jaGFzdGljUG9pc3NvblNFSVJEaXNlYXNlTW9kZWxUZXN0LmNsYXNzKTsKKwl9CisKKwkvKioKKwkgKiBDb25zdHJ1Y3RzIGEgbmV3IFN0b2NoYXN0aWMgUG9pc3NvbiBTRUlSIERpc2Vhc2UgTW9kZWwgdGVzdCBjYXNlIHdpdGggdGhlIGdpdmVuIG5hbWUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFN0b2NoYXN0aWNQb2lzc29uU0VJUkRpc2Vhc2VNb2RlbFRlc3QoU3RyaW5nIG5hbWUpIHsKKwkJc3VwZXIobmFtZSk7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgZml4dHVyZSBmb3IgdGhpcyBTdG9jaGFzdGljIFBvaXNzb24gU0VJUiBEaXNlYXNlIE1vZGVsIHRlc3QgY2FzZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgU3RvY2hhc3RpY1BvaXNzb25TRUlSRGlzZWFzZU1vZGVsIGdldEZpeHR1cmUoKSB7CisJCXJldHVybiAoU3RvY2hhc3RpY1BvaXNzb25TRUlSRGlzZWFzZU1vZGVsKWZpeHR1cmU7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZSNzZXRVcCgpCisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgdm9pZCBzZXRVcCgpIHRocm93cyBFeGNlcHRpb24geworCQlzZXRGaXh0dXJlKFN0YW5kYXJkRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlU3RvY2hhc3RpY1BvaXNzb25TRUlSRGlzZWFzZU1vZGVsKCkpOworCQlTdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsIGRtbCA9IGNyZWF0ZUxhYmVsRml4dHVyZSgpOworCQlzZXRMYWJlbEZpeHR1cmUoZG1sKTsKKwkJZml4dHVyZS5zZXREaXNlYXNlTmFtZShESVNFQVNFX05BTUUpOworCQlmaXh0dXJlLnNldFVSSShESVNFQVNFTU9ERUxfVVJJKTsKKwkJRHVibGluQ29yZSBkYyA9IGZpeHR1cmUuZ2V0RHVibGluQ29yZSgpOworCQlkYy5zZXRJZGVudGlmaWVyKGZpeHR1cmUuZ2V0VVJJKCkudG9TdHJpbmcoKSk7CisJCQorCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2UjdGVhckRvd24oKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgdm9pZCB0ZWFyRG93bigpIHRocm93cyBFeGNlcHRpb24geworCQlzZXRGaXh0dXJlKG51bGwpOworCX0KKworfSAvL1N0b2NoYXN0aWNQb2lzc29uU0VJUkRpc2Vhc2VNb2RlbFRlc3QKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3N0YW5kYXJkL3Rlc3RzL1N0b2NoYXN0aWNQb2lzc29uU0lEaXNlYXNlTW9kZWxUZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9zdGFuZGFyZC90ZXN0cy9TdG9jaGFzdGljUG9pc3NvblNJRGlzZWFzZU1vZGVsVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ4MzU2NTEKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9zdGFuZGFyZC90ZXN0cy9TdG9jaGFzdGljUG9pc3NvblNJRGlzZWFzZU1vZGVsVGVzdC5qYXZhCkBAIC0wLDAgKzEsMTAyIEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC50ZXN0czsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAxMCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqdW5pdC50ZXh0dWkuVGVzdFJ1bm5lcjsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5VUkk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLlNURU1VUkk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5EdWJsaW5Db3JlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZEZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlN0b2NoYXN0aWNQb2lzc29uU0lEaXNlYXNlTW9kZWw7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIEEgdGVzdCBjYXNlIGZvciB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+U3RvY2hhc3RpYyBQb2lzc29uIFNJIERpc2Vhc2UgTW9kZWw8L2I+PC9lbT4nLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBTdG9jaGFzdGljUG9pc3NvblNJRGlzZWFzZU1vZGVsVGVzdCBleHRlbmRzIFNJVGVzdCB7CisKKwlwdWJsaWMgc3RhdGljIGZpbmFsIFVSSSBESVNFQVNFTU9ERUxfVVJJID0gU1RFTVVSSS5jcmVhdGVVUkkoImRpc2Vhc2VNb2RlbHMvdGVzdFN0b2NoYXN0aWNQb2lzc29uU0lEaXNlYXNlTW9kZWwuZGVjb3JhdG9yIik7CisJcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgRElTRUFTRV9OQU1FID0gIlN0b2NoYXN0aWNQb2lzc29uU0lEaXNlYXNlTW9kZWwiOworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKKwkJVGVzdFJ1bm5lci5ydW4oU3RvY2hhc3RpY1BvaXNzb25TSURpc2Vhc2VNb2RlbFRlc3QuY2xhc3MpOworCX0KKworCS8qKgorCSAqIENvbnN0cnVjdHMgYSBuZXcgU3RvY2hhc3RpYyBQb2lzc29uIFNJIERpc2Vhc2UgTW9kZWwgdGVzdCBjYXNlIHdpdGggdGhlIGdpdmVuIG5hbWUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFN0b2NoYXN0aWNQb2lzc29uU0lEaXNlYXNlTW9kZWxUZXN0KFN0cmluZyBuYW1lKSB7CisJCXN1cGVyKG5hbWUpOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIGZpeHR1cmUgZm9yIHRoaXMgU3RvY2hhc3RpYyBQb2lzc29uIFNJIERpc2Vhc2UgTW9kZWwgdGVzdCBjYXNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCBTdG9jaGFzdGljUG9pc3NvblNJRGlzZWFzZU1vZGVsIGdldEZpeHR1cmUoKSB7CisJCXJldHVybiAoU3RvY2hhc3RpY1BvaXNzb25TSURpc2Vhc2VNb2RlbClmaXh0dXJlOworCX0KKworCS8qKgorCSAqIFRlc3RzIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZFN0b2NoYXN0aWNEaXNlYXNlTW9kZWwjY29tcHV0ZU5vaXNlKCkgPGVtPkNvbXB1dGUgTm9pc2U8L2VtPn0nIG9wZXJhdGlvbi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkU3RvY2hhc3RpY0Rpc2Vhc2VNb2RlbCNjb21wdXRlTm9pc2UoKQorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJcHVibGljIHZvaWQgdGVzdENvbXB1dGVOb2lzZSgpIHsKKwkJU3RhbmRhcmRTdG9jaGFzdGljRGlzZWFzZU1vZGVsVGVzdC5zdGF0aWNDb21wdXRlTm9pc2VUZXN0KCk7CisJfQorCQorCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2Ujc2V0VXAoKQorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgc2V0VXAoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJc2V0Rml4dHVyZShTdGFuZGFyZEZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZVN0b2NoYXN0aWNQb2lzc29uU0lEaXNlYXNlTW9kZWwoKSk7CisJCVN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWwgZG1sID0gY3JlYXRlTGFiZWxGaXh0dXJlKCk7CisJCXNldExhYmVsRml4dHVyZShkbWwpOworCQlmaXh0dXJlLnNldERpc2Vhc2VOYW1lKERJU0VBU0VfTkFNRSk7CisJCWZpeHR1cmUuc2V0VVJJKERJU0VBU0VNT0RFTF9VUkkpOworCQlEdWJsaW5Db3JlIGRjID0gZml4dHVyZS5nZXREdWJsaW5Db3JlKCk7CisJCWRjLnNldElkZW50aWZpZXIoZml4dHVyZS5nZXRVUkkoKS50b1N0cmluZygpKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlI3RlYXJEb3duKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgdGVhckRvd24oKSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJc2V0Rml4dHVyZShudWxsKTsKKwl9CisKK30gLy9TdG9jaGFzdGljUG9pc3NvblNJRGlzZWFzZU1vZGVsVGVzdApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvc3RhbmRhcmQvdGVzdHMvU3RvY2hhc3RpY1BvaXNzb25TSVJEaXNlYXNlTW9kZWxUZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9zdGFuZGFyZC90ZXN0cy9TdG9jaGFzdGljUG9pc3NvblNJUkRpc2Vhc2VNb2RlbFRlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNDQ3OTk0Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvc3RhbmRhcmQvdGVzdHMvU3RvY2hhc3RpY1BvaXNzb25TSVJEaXNlYXNlTW9kZWxUZXN0LmphdmEKQEAgLTAsMCArMSw5MiBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQudGVzdHM7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTAgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKK2ltcG9ydCBqdW5pdC50ZXh0dWkuVGVzdFJ1bm5lcjsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5VUkk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLlNURU1VUkk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5EdWJsaW5Db3JlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZEZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlN0b2NoYXN0aWNQb2lzc29uU0lSRGlzZWFzZU1vZGVsOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiBBIHRlc3QgY2FzZSBmb3IgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPlN0b2NoYXN0aWMgUG9pc3NvbiBTSVIgRGlzZWFzZSBNb2RlbDwvYj48L2VtPicuCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIFN0b2NoYXN0aWNQb2lzc29uU0lSRGlzZWFzZU1vZGVsVGVzdCBleHRlbmRzIFNJUlRlc3QgeworCisJcHVibGljIHN0YXRpYyBmaW5hbCBVUkkgRElTRUFTRU1PREVMX1VSSSA9IFNURU1VUkkuY3JlYXRlVVJJKCJkaXNlYXNlTW9kZWxzL3Rlc3RTdG9jaGFzdGljUG9pc3NvblNJUkRpc2Vhc2VNb2RlbC5kZWNvcmF0b3IiKTsKKwlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBESVNFQVNFX05BTUUgPSAiU3RvY2hhc3RpY1BvaXNzb25TSVJEaXNlYXNlTW9kZWwiOworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKKwkJVGVzdFJ1bm5lci5ydW4oU3RvY2hhc3RpY1BvaXNzb25TSVJEaXNlYXNlTW9kZWxUZXN0LmNsYXNzKTsKKwl9CisKKwkvKioKKwkgKiBDb25zdHJ1Y3RzIGEgbmV3IFN0b2NoYXN0aWMgUG9pc3NvbiBTSVIgRGlzZWFzZSBNb2RlbCB0ZXN0IGNhc2Ugd2l0aCB0aGUgZ2l2ZW4gbmFtZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgU3RvY2hhc3RpY1BvaXNzb25TSVJEaXNlYXNlTW9kZWxUZXN0KFN0cmluZyBuYW1lKSB7CisJCXN1cGVyKG5hbWUpOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIGZpeHR1cmUgZm9yIHRoaXMgU3RvY2hhc3RpYyBQb2lzc29uIFNJUiBEaXNlYXNlIE1vZGVsIHRlc3QgY2FzZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgU3RvY2hhc3RpY1BvaXNzb25TSVJEaXNlYXNlTW9kZWwgZ2V0Rml4dHVyZSgpIHsKKwkJcmV0dXJuIChTdG9jaGFzdGljUG9pc3NvblNJUkRpc2Vhc2VNb2RlbClmaXh0dXJlOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2Ujc2V0VXAoKQorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgc2V0VXAoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJc2V0Rml4dHVyZShTdGFuZGFyZEZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZVN0b2NoYXN0aWNQb2lzc29uU0lSRGlzZWFzZU1vZGVsKCkpOworCQlTdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsIGRtbCA9IGNyZWF0ZUxhYmVsRml4dHVyZSgpOworCQlzZXRMYWJlbEZpeHR1cmUoZG1sKTsKKwkJZml4dHVyZS5zZXREaXNlYXNlTmFtZShESVNFQVNFX05BTUUpOworCQlmaXh0dXJlLnNldFVSSShESVNFQVNFTU9ERUxfVVJJKTsKKwkJRHVibGluQ29yZSBkYyA9IGZpeHR1cmUuZ2V0RHVibGluQ29yZSgpOworCQlkYy5zZXRJZGVudGlmaWVyKGZpeHR1cmUuZ2V0VVJJKCkudG9TdHJpbmcoKSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZSN0ZWFyRG93bigpCisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIHRlYXJEb3duKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCXNldEZpeHR1cmUobnVsbCk7CisJfQorCit9IC8vU3RvY2hhc3RpY1BvaXNzb25TSVJEaXNlYXNlTW9kZWxUZXN0CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9zdGFuZGFyZC90ZXN0cy9TdG9jaGFzdGljU0VJUkRpc2Vhc2VNb2RlbFRlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3N0YW5kYXJkL3Rlc3RzL1N0b2NoYXN0aWNTRUlSRGlzZWFzZU1vZGVsVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFhY2QwYWUKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9zdGFuZGFyZC90ZXN0cy9TdG9jaGFzdGljU0VJUkRpc2Vhc2VNb2RlbFRlc3QuamF2YQpAQCAtMCwwICsxLDMyMCBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQudGVzdHM7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgamF2YS51dGlsLlJhbmRvbTsKKworaW1wb3J0IGp1bml0LnRleHR1aS5UZXN0UnVubmVyOworCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuVVJJOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS51dGlsLkVjb3JlVXRpbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuU1RFTVVSSTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLkR1YmxpbkNvcmU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlNFSVJMYWJlbFZhbHVlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsVmFsdWU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlN0b2NoYXN0aWNTRUlSRGlzZWFzZU1vZGVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5pbXBsLlNFSVJMYWJlbFZhbHVlSW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuaW1wbC5TdGFuZGFyZFN0b2NoYXN0aWNEaXNlYXNlTW9kZWxJbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5pbXBsLlN0b2NoYXN0aWNTRUlSRGlzZWFzZU1vZGVsSW1wbDsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiBBIHRlc3QgY2FzZSBmb3IgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPlN0b2NoYXN0aWMgU0VJUiBEaXNlYXNlIE1vZGVsPC9iPjwvZW0+Jy4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogPHA+CisgKiBUaGUgZm9sbG93aW5nIG9wZXJhdGlvbnMgYXJlIHRlc3RlZDoKKyAqIDx1bD4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmRTdG9jaGFzdGljRGlzZWFzZU1vZGVsI2NvbXB1dGVOb2lzZSgpIDxlbT5Db21wdXRlIE5vaXNlPC9lbT59PC9saT4KKyAqIDwvdWw+CisgKiA8L3A+CisgKiBAZ2VuZXJhdGVkCisgKi8KK0BTdXBwcmVzc1dhcm5pbmdzKCJhbGwiKQorcHVibGljIGNsYXNzIFN0b2NoYXN0aWNTRUlSRGlzZWFzZU1vZGVsVGVzdCBleHRlbmRzIFNFSVJUZXN0IHsKKworCXB1YmxpYyBzdGF0aWMgZmluYWwgbG9uZyBSQU5ET01fU0VFRCA9IDFsOworCXB1YmxpYyBzdGF0aWMgZmluYWwgZG91YmxlIFRFU1RfR0FJTiA9IDAuMDFkOworCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBESVNFQVNFX0lERU5USUZJRVIgPSAiU3RvY2hhc3RpY1NFSVJEaXNlYXNlTW9kZWwiOworCXB1YmxpYyBzdGF0aWMgZmluYWwgVVJJIERJU0VBU0VfVVJJID0gU1RFTVVSSS5jcmVhdGVVUkkoImRpc2Vhc2Vtb2RlbCIgKyAiLyIgKyBESVNFQVNFX0lERU5USUZJRVIpOworCQorCQorCS8qKgorCSAqIFRoZSBuYW1lIG9mIHRoZSB0ZXN0IGRpc2Vhc2UgKGFuIGluc3RhbmNlIG9mIGEgZGlzZWFzZSBtb2RlbCkKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBURVNUX1NFSVJfRElTRUFTRV9OQU1FID0gIlRlc3QgU3RvY2FzdGljIFNFSVIgRGlzZWFzZSI7CisKKwkKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBwYXJhbSBhcmdzCisJICogCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKKwkJVGVzdFJ1bm5lci5ydW4oU3RvY2hhc3RpY1NFSVJEaXNlYXNlTW9kZWxUZXN0LmNsYXNzKTsKKwl9CisKKwkvKioKKwkgKiBDb25zdHJ1Y3RzIGEgbmV3IFN0b2NoYXN0aWMgU0VJUiBEaXNlYXNlIE1vZGVsIHRlc3QgY2FzZSB3aXRoIHRoZSBnaXZlbiBuYW1lLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogCisJICogQHBhcmFtIG5hbWUKKwkgKiAKKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFN0b2NoYXN0aWNTRUlSRGlzZWFzZU1vZGVsVGVzdChTdHJpbmcgbmFtZSkgeworCQlzdXBlcihuYW1lKTsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBmaXh0dXJlIGZvciB0aGlzIFN0b2NoYXN0aWMgU0VJUiBEaXNlYXNlIE1vZGVsIHRlc3QgY2FzZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIFN0b2NoYXN0aWNTRUlSRGlzZWFzZU1vZGVsIGdldEZpeHR1cmUoKSB7CisJCXJldHVybiAoU3RvY2hhc3RpY1NFSVJEaXNlYXNlTW9kZWwpZml4dHVyZTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAc2VlIGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZSNzZXRVcCgpCisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBzZXRVcCgpIHRocm93cyBFeGNlcHRpb24geworCQlzZXRGaXh0dXJlKGNyZWF0ZUZpeHR1cmUoKSk7CisJCVN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWwgZG1sID0gY3JlYXRlTGFiZWxGaXh0dXJlKCk7CisJCXNldExhYmVsRml4dHVyZShkbWwpOworCQlmaXh0dXJlLnNldERpc2Vhc2VOYW1lKERJU0VBU0VfSURFTlRJRklFUik7CisJCWZpeHR1cmUuc2V0VVJJKERJU0VBU0VfVVJJKTsKKwkJRHVibGluQ29yZSBkYyA9IGZpeHR1cmUuZ2V0RHVibGluQ29yZSgpOworCQlkYy5zZXRJZGVudGlmaWVyKGZpeHR1cmUuZ2V0VVJJKCkudG9TdHJpbmcoKSk7CisJfSAvLyBzZXRVcAorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogCisJICogQHNlZSBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2UjdGVhckRvd24oKQorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJcHJvdGVjdGVkIHZvaWQgdGVhckRvd24oKSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJc3VwZXIudGVhckRvd24oKTsKKwl9IC8vIHRlYXJEb3duCisKKwkvKioKKwkgKiBUZXN0cyB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmRTdG9jaGFzdGljRGlzZWFzZU1vZGVsI2NvbXB1dGVOb2lzZSgpIDxlbT5Db21wdXRlIE5vaXNlPC9lbT59JyBvcGVyYXRpb24uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZFN0b2NoYXN0aWNEaXNlYXNlTW9kZWwjY29tcHV0ZU5vaXNlKCkKKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCXB1YmxpYyB2b2lkIHRlc3RDb21wdXRlTm9pc2UoKSB7CisJCVN0YW5kYXJkU3RvY2hhc3RpY0Rpc2Vhc2VNb2RlbFRlc3Quc3RhdGljQ29tcHV0ZU5vaXNlVGVzdCgpOworCX0KKworCS8qKgorCSAqIENyZWF0ZSBkaXNlYXNlIG1vZGVsIGluc3RhbmNlCisJICogCisJICogQHJldHVybiBhIGRpc2Vhc2UgbW9kZWwgaW5zdGFuY2UgZm9yIHRlc3QgcHVycG9zZXMKKwkgKi8KKwlwdWJsaWMgc3RhdGljIFN0b2NoYXN0aWNTRUlSRGlzZWFzZU1vZGVsIGNyZWF0ZUZpeHR1cmUoKSB7CisJCXJldHVybiBjcmVhdGVGaXh0dXJlKFN0YW5kYXJkU3RvY2hhc3RpY0Rpc2Vhc2VNb2RlbEltcGwuR0FJTl9FREVGQVVMVCk7CisJfSAvLyBjcmVhdGVGaXh0dXJlCisJCisJLyoqCisJICogQ3JlYXRlIGRpc2Vhc2UgbW9kZWwgaW5zdGFuY2UKKwkgKiAKKwkgKiBAcmV0dXJuIGEgZGlzZWFzZSBtb2RlbCBpbnN0YW5jZSBmb3IgdGVzdCBwdXJwb3NlcworCSAqLworCXB1YmxpYyBzdGF0aWMgU3RvY2hhc3RpY1NFSVJEaXNlYXNlTW9kZWwgY3JlYXRlRml4dHVyZShkb3VibGUgbmV3R2FpbikgeworCQlTdG9jaGFzdGljU0VJUkRpc2Vhc2VNb2RlbCBkaXNlYXNlTW9kZWwgPSBTdGFuZGFyZEZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZVN0b2NoYXN0aWNTRUlSRGlzZWFzZU1vZGVsKCk7CisJCWRpc2Vhc2VNb2RlbC5zZXREaXNlYXNlTmFtZShURVNUX1NFSVJfRElTRUFTRV9OQU1FKTsKKwkJZGlzZWFzZU1vZGVsLmdldER1YmxpbkNvcmUoKS5zZXRUaXRsZShURVNUX1NFSVJfRElTRUFTRV9OQU1FKTsKKwkJZGlzZWFzZU1vZGVsLnNldFRpbWVQZXJpb2QoVEVTVF9USU1FX1BFUklPRCk7CisJCWRpc2Vhc2VNb2RlbC5zZXRQb3B1bGF0aW9uSWRlbnRpZmllcihURVNUX1BPUFVMQVRJT05fSURFTlRJRklFUik7CisJCWRpc2Vhc2VNb2RlbC5zZXRUcmFuc21pc3Npb25SYXRlKFRSQU5TTUlTU0lPTl9SQVRFKTsKKwkJZGlzZWFzZU1vZGVsLnNldFJlY292ZXJ5UmF0ZShSRUNPVkVSWV9SQVRFKTsKKwkJZGlzZWFzZU1vZGVsLnNldEluZmVjdGlvdXNNb3J0YWxpdHlSYXRlKElORkVDVElPVVNfTU9SVEFMSVRZX1JBVEUpOworCQlkaXNlYXNlTW9kZWwuc2V0Tm9uTGluZWFyaXR5Q29lZmZpY2llbnQoTk9OX0xJTkVBUklUWV9DT0VGRklDSUVOVCk7CisJCWRpc2Vhc2VNb2RlbC5zZXRJbW11bml0eUxvc3NSYXRlKElNTVVOSVRZX0xPU1NfUkFURSk7CisJCWRpc2Vhc2VNb2RlbC5zZXRJbmN1YmF0aW9uUmF0ZShJTkNVQkFUSU9OX1JBVEUpOworCQlkaXNlYXNlTW9kZWwuc2V0R2FpbihuZXdHYWluKTsKKwkJCisJCWZpbmFsIER1YmxpbkNvcmUgZGMgPSBkaXNlYXNlTW9kZWwuZ2V0RHVibGluQ29yZSgpOworCQlkaXNlYXNlTW9kZWwuc2V0VVJJKERJU0VBU0VfVVJJKTsKKwkJZGMuc2V0SWRlbnRpZmllcihkaXNlYXNlTW9kZWwuZ2V0VVJJKCkudG9TdHJpbmcoKSk7CisJCXJldHVybiBkaXNlYXNlTW9kZWw7CisJfSAvLyBjcmVhdGVGaXh0dXJlCisKKwkKKwkvKioKKwkgKiBUZXN0cyB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuaW1wbC5TdG9jaGFzdGljRGlzZWFzZU1vZGVsSW1wbCNkb01vZGVsU3BlY2lmaWNBZGp1c3RtZW50cygpIDxlbT5kb01vZGVsU3BlY2lmaWNBZGp1c3RtZW50czwvZW0+fScgb3BlcmF0aW9uLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLmltcGwuU3RvY2hhc3RpY0Rpc2Vhc2VNb2RlbEltcGwjZG9Nb2RlbFNwZWNpZmljQWRqdXN0bWVudHMoKQorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJQFN1cHByZXNzV2FybmluZ3MoInN5bnRoZXRpYy1hY2Nlc3MiKQorCXB1YmxpYyB2b2lkIHRlc3RNb2RlbFNwZWNpZmljQWRqdXN0bWVudHMoKXsKKwkJU3RvY2hhc3RpY1NFSVJEaXNlYXNlTW9kZWxUZXN0ZXJJbXBsIHN0b2NoYXN0aWNTRUlSRGlzZWFzZU1vZGVsID0gbmV3IFN0b2NoYXN0aWNTRUlSRGlzZWFzZU1vZGVsVGVzdGVySW1wbCgpOworCQlTRUlSTGFiZWxWYWx1ZUltcGwgY3VycmVudFNFSVIgPSBuZXcgU0VJUkxhYmVsVmFsdWVJbXBsKDEwMDBkLCA1MGQsIDQwZCwgMzBkLCAyMGQsIDEwZCk7CisJCWRvVGVzdChzdG9jaGFzdGljU0VJUkRpc2Vhc2VNb2RlbCwgY3VycmVudFNFSVIpOworCX0KKworLy8JcHJpdmF0ZSB2b2lkIGRvVGVzdFdpdGhQZXJtdXRhdGlvbnMoKSB7CisvLwkJU3RvY2hhc3RpY1NFSVJEaXNlYXNlTW9kZWxUZXN0ZXJJbXBsIHN0b2NoYXN0aWNTRUlSRGlzZWFzZU1vZGVsID0gbmV3IFN0b2NoYXN0aWNTRUlSRGlzZWFzZU1vZGVsVGVzdGVySW1wbCgpOworLy8JCUxpc3Q8U0VJUkxhYmVsVmFsdWVJbXBsPiBtb2RlbExhYmxlVmFsdWVzID0gU0VJUkxhYmVsVmFsdWVUZXN0VXRpbC5jcmVhdGVSYW5kb21TRUlSTGFiZWxWYWx1ZUltcGwoKTsKKy8vCQkKKy8vCQlpbnQgY291bnQxID0gMDsKKy8vCQlpbnQgY291bnQyID0gMDsKKy8vCQlTeXN0ZW0ub3V0LnByaW50bG4oKTsKKy8vCQlmb3IoU0VJUkxhYmVsVmFsdWVJbXBsIGN1cnJlbnRTRUlSOiBtb2RlbExhYmxlVmFsdWVzKXsKKy8vCQkJU3lzdGVtLm91dC5wcmludGxuKGNvdW50MSsrKTsKKy8vCQkJZm9yKFNFSVJMYWJlbFZhbHVlSW1wbCBzZWlyQWRkaXRpb25zOiBtb2RlbExhYmxlVmFsdWVzKXsKKy8vCQkJCVN5c3RlbS5vdXQucHJpbnRsbigiCSIgKyBjb3VudDIrKyk7CisvLwkJCQlmb3IoU0VJUkxhYmVsVmFsdWVJbXBsIHNlaXJEZWF0aHM6IG1vZGVsTGFibGVWYWx1ZXMpeworLy8JCQkJCS8vc2VpckRlYXRocyBhbmQgc2VpckFkZGl0aW9ucyB3aWxsIGJlIG1vZGlmaWVkIG15IHRoZSB0ZXN0IG1ldGhvZCwgc28gd2UgYmV0dGVyIGNsb25lIHRoZW0gCisvLwkJCQkJZG9UZXN0KHN0b2NoYXN0aWNTRUlSRGlzZWFzZU1vZGVsLCBjdXJyZW50U0VJUiwKKy8vCQkJCQkJCXNlaXJBZGRpdGlvbnMsIHNlaXJEZWF0aHMpOworLy8JCQkgCX0KKy8vCQkJfQorLy8JCX0KKy8vCX0KKworCXByaXZhdGUgdm9pZCBkb1Rlc3QoU3RvY2hhc3RpY1NFSVJEaXNlYXNlTW9kZWxUZXN0ZXJJbXBsIHN0b2NoYXN0aWNTRUlSRGlzZWFzZU1vZGVsLAorCQkJU0VJUkxhYmVsVmFsdWVJbXBsIGN1cnJlbnRTRUlSKSB7CisJCQorCQlTRUlSTGFiZWxWYWx1ZUltcGwgb2xkU0VJUiA9IChTRUlSTGFiZWxWYWx1ZUltcGwpRWNvcmVVdGlsLmNvcHkoY3VycmVudFNFSVIpOworCQlzdG9jaGFzdGljU0VJUkRpc2Vhc2VNb2RlbC5kb01vZGVsU3BlY2lmaWNBZGp1c3RtZW50cyhjdXJyZW50U0VJUiwgUkFORE9NX1NFRUQsIFRFU1RfR0FJTik7CisJCQorCQlkb0NhbGN1bGF0ZU1vZGVsU3BlY2lmaWNBZGp1c3RtZW50cyhjdXJyZW50U0VJUiwgUkFORE9NX1NFRUQsIFRFU1RfR0FJTik7CisKKwkJU3RyaW5nIHN0YXRlID0gZ2V0U3RhdGUoY3VycmVudFNFSVIsIG9sZFNFSVIpOworCQkKKwkJdmFsaWRhdGVNb2RlbFNwZWNpZmljQWRqdXN0bWVudHMoY3VycmVudFNFSVIsCisJCQkJb2xkU0VJUiwKKwkJCQlzdGF0ZSk7CisJfQorCisJLyoqCisJICogVGhpcyBtZXRob2QgcmV0dXJucyBhIGRvdWJsZSBwcmVjaXNpb24gcmFuZG9tIG5vaXNlIHZhcmlhYmxlCisJICogciBiZXR3ZWVuICgxLjAreCkgYW5kICgxLjAteCkKKwkgKiB3aGVyZSB4IGlzIGEgcHJvZHVjdCBHKiBNYXRoLnJhbmQoKSwgYW5kIEcgaXMgYSBnYWluIGZhY3RvciAwPEc8bWF4IG5vaXNlCisJICogCisJICogQHBhcmFtIGdhaW4KKwkgKiBAcGFyYW0gcmFuZAorCSAqIEByZXR1cm4gbm9pc2UKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGRvdWJsZSBjb21wdXRlTm9pc2UoZmluYWwgZG91YmxlIGdhaW4sIGZpbmFsIFJhbmRvbSByYW5kKSB7CisKKwkJZG91YmxlIHggPSAoMi4wKnJhbmQubmV4dERvdWJsZSgpKS0xLjA7IC8vICsvLSAxCisJCXggKj0gZ2FpbjsKKwkJeCArPSAxLjA7CisJCWFzc2VydCAoKHg+MC4wKSYmKHg8Mi4wKSkgOiAicmFuZG9tIG5vaXNlIHNob3VsZCBiZSBhIHNtYWxsIHBlcnR1cmJhdGlvbiBHYWluIGZhY3RvciwgZywgIG11c3QgMC4wIDwgZyA8PCAxLjAgIjsKKwkJcmV0dXJuIHg7CisJCQorCX0gLy8gZ2V0Tm9pc2UKKwkKKwkKKwlwcml2YXRlIHZvaWQgZG9DYWxjdWxhdGVNb2RlbFNwZWNpZmljQWRqdXN0bWVudHMoCisJCQlTRUlSTGFiZWxWYWx1ZUltcGwgcEN1cnJlbnRTRUlSLCBsb25nIHBSYW5kb21TZWVkLCBkb3VibGUgcFRlc3RHYWluKSB7CisJCQorCQkKKwkJZmluYWwgU0VJUkxhYmVsVmFsdWUgY3VycmVudFNFSVIgPSAoU0VJUkxhYmVsVmFsdWUpIHBDdXJyZW50U0VJUjsKKwkJUmFuZG9tIHJhbmRvbSA9IG5ldyBSYW5kb20ocFJhbmRvbVNlZWQpOworCQlkb3VibGUgSW5vaXN5ID0gY3VycmVudFNFSVIuZ2V0SSgpKiBjb21wdXRlTm9pc2UocFRlc3RHYWluLCByYW5kb20pOworCQljdXJyZW50U0VJUi5zZXRJKElub2lzeSk7CisJCXJldHVybjsKKwkJCQkKKwkJCQkKKwl9CisKKwlwcml2YXRlIHZvaWQgdmFsaWRhdGVNb2RlbFNwZWNpZmljQWRqdXN0bWVudHMoU0VJUkxhYmVsVmFsdWVJbXBsIGN1cnJlbnRTRUlSLAorCQkJU0VJUkxhYmVsVmFsdWVJbXBsIG9sZFNFSVIsCisJCQlTdHJpbmcgc3RhdGUpIHsKKworCQkKKwkJdHJ5eworCQkJY3VycmVudFNFSVIuc2FuZSgpOworCQl9CisJCWNhdGNoKFRocm93YWJsZSB0KXsKKwkJCXRocm93IG5ldyBJbGxlZ2FsU3RhdGVFeGNlcHRpb24oImN1cnJlbnRTRUlSIGlzIGluc2FuZSwgc3RhdGUgaXM6ICIgKyBzdGF0ZSwgdCk7CisJCX0KKwkJdHJ5eworCQkJb2xkU0VJUi5zYW5lKCk7CisJCX0KKwkJY2F0Y2goVGhyb3dhYmxlIHQpeworCQkJdGhyb3cgbmV3IElsbGVnYWxTdGF0ZUV4Y2VwdGlvbigib2xkU0VJUiBpcyBpbnNhbmUsIHN0YXRlIGlzOiAiICsgc3RhdGUsIHQpOworCQl9CisKKwkJCisJCQorCQlhc3NlcnRUcnVlKFN0cmluZy5mb3JtYXQoImN1cnJlbnRTRUlSIGhhcyBpbnNhbmUgdmFsdWVzICVzIiwgc3RhdGUpLCBteVNhbml0eUNoZWNrKGN1cnJlbnRTRUlSKSk7CisJCWFzc2VydFRydWUoU3RyaW5nLmZvcm1hdCgib2xkU0VJUiBoYXMgaW5zYW5lIHZhbHVlcyAlcyIsIHN0YXRlKSwgbXlTYW5pdHlDaGVjayhvbGRTRUlSKSk7CisKKwl9CisJCisJcHJpdmF0ZSBib29sZWFuIGNoZWNrRXF1YWwoU0VJUkxhYmVsVmFsdWVJbXBsIHBDYWxjdWxhdGVkU2VpckFkZGl0aW9ucywKKwkJCVNFSVJMYWJlbFZhbHVlSW1wbCBwTmV3U2VpckFkZGl0aW9ucykgeworCQlpZigocENhbGN1bGF0ZWRTZWlyQWRkaXRpb25zLmdldERpc2Vhc2VEZWF0aHMoKSAhPSBwTmV3U2VpckFkZGl0aW9ucy5nZXREaXNlYXNlRGVhdGhzKCkpIHx8CisJCQkJKHBDYWxjdWxhdGVkU2VpckFkZGl0aW9ucy5nZXRFKCkgIT0gcE5ld1NlaXJBZGRpdGlvbnMuZ2V0RSgpKSB8fAorCQkJCShwQ2FsY3VsYXRlZFNlaXJBZGRpdGlvbnMuZ2V0SSgpICE9IHBOZXdTZWlyQWRkaXRpb25zLmdldEkoKSkgfHwKKwkJCQkocENhbGN1bGF0ZWRTZWlyQWRkaXRpb25zLmdldFBvcHVsYXRpb25Db3VudCgpICE9IHBOZXdTZWlyQWRkaXRpb25zLmdldFBvcHVsYXRpb25Db3VudCgpKSB8fAorCQkJCShwQ2FsY3VsYXRlZFNlaXJBZGRpdGlvbnMuZ2V0UigpICE9IHBOZXdTZWlyQWRkaXRpb25zLmdldFIoKSkgfHwKKwkJCQkocENhbGN1bGF0ZWRTZWlyQWRkaXRpb25zLmdldFMoKSAhPSBwTmV3U2VpckFkZGl0aW9ucy5nZXRTKCkpKXsKKwkJCQkJcmV0dXJuIGZhbHNlOworCQkJCX0KKwkJcmV0dXJuIHRydWU7CisJfQorCisJcHJpdmF0ZSBib29sZWFuIG15U2FuaXR5Q2hlY2soU0VJUkxhYmVsVmFsdWVJbXBsIHBTZWlyKSB7CisJCXJldHVybiBhc3NlcnRWYWxpZERvdWJsZShwU2Vpci5nZXRFKCkpICYmIAorCQkJYXNzZXJ0VmFsaWREb3VibGUocFNlaXIuZ2V0SSgpKSAmJiAKKwkJCWFzc2VydFZhbGlkRG91YmxlKHBTZWlyLmdldFIoKSkgJiYgCisJCQlhc3NlcnRWYWxpZERvdWJsZShwU2Vpci5nZXRTKCkpOworCQkKKwl9CisKKwlwcml2YXRlIGJvb2xlYW4gYXNzZXJ0VmFsaWREb3VibGUoZG91YmxlIHBEb3VibGUpIHsKKwkJcmV0dXJuICEoRG91YmxlLmlzTmFOKHBEb3VibGUpIHx8IERvdWJsZS5pc0luZmluaXRlKHBEb3VibGUpKTsKKwl9CisKKwlwcml2YXRlIFN0cmluZyBnZXRTdGF0ZShTRUlSTGFiZWxWYWx1ZUltcGwgcEN1cnJlbnRTRUlSLAorCQkJU0VJUkxhYmVsVmFsdWVJbXBsIG9sZFNFSVIpIHsKKwkJcmV0dXJuIFN0cmluZy5mb3JtYXQoIlxucHJlc2VudCBzdGF0ZSBpczogXG5jdXJyZW50U0VJUlslc11cbiBvbGRTRUlSWyVzXSIsIAorCQkJCXBDdXJyZW50U0VJUiwgb2xkU0VJUik7CisJfQorCisJCisJLyoqCisJICogY3JlYXRlZCBqdXN0IGZvciB0ZXN0aW5ncyBzaW5jZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5pbXBsLlN0b2NoYXN0aWNEaXNlYXNlTW9kZWxJbXBsI2RvTW9kZWxTcGVjaWZpY0FkanVzdG1lbnRzKCkgPGVtPmRvTW9kZWxTcGVjaWZpY0FkanVzdG1lbnRzPC9lbT59JyBpcyBwcm90ZWN0ZWQuCisJICogQGF1dGhvciBlaXNoYXkKKwkgKgorCSAqLworCXByaXZhdGUgY2xhc3MgU3RvY2hhc3RpY1NFSVJEaXNlYXNlTW9kZWxUZXN0ZXJJbXBsIGV4dGVuZHMgU3RvY2hhc3RpY1NFSVJEaXNlYXNlTW9kZWxJbXBseworCisJCXB1YmxpYyB2b2lkIGRvTW9kZWxTcGVjaWZpY0FkanVzdG1lbnRzKAorCQkJCVN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZSBwQ3VycmVudFN0YXRlLAorCQkJCWxvbmcgcFJhbmRvbVNlZWQsIGRvdWJsZSBwVGVzdEdhaW4pIHsKKwkJCXNldFNlZWQocFJhbmRvbVNlZWQpOworCQkJc2V0R2FpbihwVGVzdEdhaW4pOworCQkJCisJCQlTRUlSTGFiZWxWYWx1ZUltcGwgb2xkQ3VycmVudFN0YXRlID0gU0VJUkxhYmVsVmFsdWVUZXN0VXRpbC5jbG9uZVNFSVJMYWJlbFZhbHVlSW1wbCgoU0VJUkxhYmVsVmFsdWVJbXBsKXBDdXJyZW50U3RhdGUpOworCQkJc3VwZXIuZG9Nb2RlbFNwZWNpZmljQWRqdXN0bWVudHMocEN1cnJlbnRTdGF0ZSk7CisJCX0KKwkJCisJfQorCQorfSAvLyBTdG9jaGFzdGljU0VJUkRpc2Vhc2VNb2RlbFRlc3QKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3N0YW5kYXJkL3Rlc3RzL1N0b2NoYXN0aWNTRUlSU2NlbmFyaW9UZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9zdGFuZGFyZC90ZXN0cy9TdG9jaGFzdGljU0VJUlNjZW5hcmlvVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE4Y2FlNzcKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9zdGFuZGFyZC90ZXN0cy9TdG9jaGFzdGljU0VJUlNjZW5hcmlvVGVzdC5qYXZhCkBAIC0wLDAgKzEsMzk3IEBACisvLyBTdG9jaGFzdGljU0VJUlNjZW5hcmlvVGVzdC5qYXZhCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC50ZXN0czsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OworaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOworaW1wb3J0IGphdmEudXRpbC5MaXN0OworaW1wb3J0IGphdmEudXRpbC5NYXA7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguTGFiZWxWYWx1ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuTm9kZURlY29yYXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU0VJUkxhYmVsVmFsdWU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLmltcGwuU0VJUkxhYmVsVmFsdWVJbXBsOworCisvKioKKyAqIFRoaXMgY2xhc3MgaXMgYSBKVW5pdCB0ZXN0IGNhc2UgZm9yIGEgU3RvY2hhc3RpYyBTRUlSIGRpc2Vhc2UgbW9kZWwgc2NlbmFyaW8KKyAqLworcHVibGljIGNsYXNzIFN0b2NoYXN0aWNTRUlSU2NlbmFyaW9UZXN0IGV4dGVuZHMgU0VJUkRpc2Vhc2VNb2RlbFNjZW5hcmlvVGVzdCB7CisKKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgRElTRUFTRV9VUklfUFJFRklYID0gIlN0b2NoYXN0aWNTRUlSIjsKKworCXByaXZhdGUgc3RhdGljIE1hcDxTdHJpbmcsIEludGVnZXI+IGV4cGVjdGVkTnVtYmVyT2ZMYWJlbHNUb1VwZGF0ZSA9IG5ldyBIYXNoTWFwPFN0cmluZywgSW50ZWdlcj4oKTsKKworCXByaXZhdGUgc3RhdGljIE1hcDxTdHJpbmcsIFNFSVJMYWJlbFZhbHVlW11bXVtdPiBleHBlY3RlZERpc2Vhc2VNb2RlbFN0YXRlcyA9IG5ldyBIYXNoTWFwPFN0cmluZywgU0VJUkxhYmVsVmFsdWVbXVtdW10+KCk7CisKKwlzdGF0aWMgeworCisJCS8vIFRoZXNlIHdlcmUgY29waWVkIGZyb20gRGV0ZXJtaW5pc3RpY1NFSVJTY2VuYXJpb1Rlc3QKKwkJLy8gZm9yIHRlc3QgcHVycG9zZXMgd2UgYXJlIGNoZWNraW5nIHdpdGggbm9pc2UgPSAwCisJCS8vIDF4MQorCQlleHBlY3RlZERpc2Vhc2VNb2RlbFN0YXRlcy5wdXQoVEVTVF9TQ0VOQVJJTzF4MV9LRVksCisJCQkJbmV3IFNFSVJMYWJlbFZhbHVlW11bXVtdIHsKKwkJCQkvLyBTdGVwIDAKKwkJCQkJCXsgeworCQkJCQkJLy8gTlswLDBdCisJCQkJCQluZXcgU0VJUkxhYmVsVmFsdWVJbXBsKDk4LjkwLCAwLjEwLCAwLjg5LCAwLjAxLCAwLjEpIH0gfSwKKworCQkJCQkJLy8gU3RlcCAxCisJCQkJCQl7IHsKKwkJCQkJCS8vIE5bMCwwXQorCQkJCQkJbmV3IFNFSVJMYWJlbFZhbHVlSW1wbCg5OC44MSwgMC4xOCwgMC44MCwgMC4wMiwgMC4xOSkgfSB9IH0KKwkJCQkvLyBTRUlSTGFiZWxWYWx1ZQorCisJCQkJKTsgLy8gcHV0KFRFU1RfU0NFTkFSSU8xeDFfS0VZKQorCQkvLyAxeDIKKwkJZXhwZWN0ZWREaXNlYXNlTW9kZWxTdGF0ZXMKKwkJCQkucHV0KFRFU1RfU0NFTkFSSU8xeDJfS0VZLAorCQkJCQkJbmV3IFNFSVJMYWJlbFZhbHVlW11bXVtdIHsKKwkJCQkJCS8vIFN0ZXAgMAorCQkJCQkJCQl7IHsKKwkJCQkJCQkJLy8gTlswLDBdCisJCQkJCQkJCQkJbmV3IFNFSVJMYWJlbFZhbHVlSW1wbCgxMDAsIDAsIDAsIDAsIDAsCisJCQkJCQkJCQkJCQkwKSwKKwkJCQkJCQkJCQkvLyBOWzAsMV0KKwkJCQkJCQkJCQluZXcgU0VJUkxhYmVsVmFsdWVJbXBsKDEwMCwgMCwgMCwgMCwgMCwKKwkJCQkJCQkJCQkJCTApIH0gfSwKKworCQkJCQkJCQkvLyBTdGVwIDEKKwkJCQkJCQkJeyB7CisJCQkJCQkJCS8vIE5bMCwwXQorCQkJCQkJCQkJCW5ldyBTRUlSTGFiZWxWYWx1ZUltcGwoMTAwLCAwLCAwLCAwLCAwLAorCQkJCQkJCQkJCQkJMCksCisJCQkJCQkJCQkJLy8gTlswLDFdCisJCQkJCQkJCQkJbmV3IFNFSVJMYWJlbFZhbHVlSW1wbCgxMDAsIDAsIDAsIDAsIDAsCisJCQkJCQkJCQkJCQkwKSB9IH0sCisJCQkJCQkJCS8vIFN0ZXAgMgorCQkJCQkJCQl7IHsKKwkJCQkJCQkJLy8gTlswLDBdCisJCQkJCQkJCQkJbmV3IFNFSVJMYWJlbFZhbHVlSW1wbCgxMDAsIDAsIDAsIDAsIDAsCisJCQkJCQkJCQkJCQkwKSwKKwkJCQkJCQkJCQkvLyBOWzAsMV0KKwkJCQkJCQkJCQluZXcgU0VJUkxhYmVsVmFsdWVJbXBsKDEwMCwgMCwgMCwgMCwgMCwKKwkJCQkJCQkJCQkJCTApIH0gfSB9IC8vIG5ldworCQkJCS8vIFNFSVJMYWJlbFZhbHVlCisJCQkJKTsgLy8gcHV0KFRFU1RfU0NFTkFSSU8xeDJfS0VZKQorCisJCS8vIDF4MworCQlleHBlY3RlZERpc2Vhc2VNb2RlbFN0YXRlcworCQkJCS5wdXQoVEVTVF9TQ0VOQVJJTzF4M19LRVksCisJCQkJCQluZXcgU0VJUkxhYmVsVmFsdWVbXVtdW10geworCQkJCQkJLy8gU3RlcCAwCisJCQkJCQkJCXsgeworCisJCQkJCQkJCS8vIE5bMCwwXQorCQkJCQkJCQkJCW5ldyBTRUlSTGFiZWxWYWx1ZUltcGwoMTAwLCAwLCAwLCAwLCAwLAorCQkJCQkJCQkJCQkJMCksCisJCQkJCQkJCQkJLy8gTlswLDFdCisJCQkJCQkJCQkJbmV3IFNFSVJMYWJlbFZhbHVlSW1wbCgxMDAsIDAsIDAsIDAsIDAsCisJCQkJCQkJCQkJCQkwKSwKKwkJCQkJCQkJCQkvLyBOWzAsMl0KKwkJCQkJCQkJCQluZXcgU0VJUkxhYmVsVmFsdWVJbXBsKDEwMCwgMCwgMCwgMCwgMCwKKwkJCQkJCQkJCQkJCTApCisKKwkJCQkJCQkJfSB9LAorCisJCQkJCQkJCS8vIFN0ZXAgMQorCQkJCQkJCQl7IHsKKwkJCQkJCQkJLy8gTlswLDBdCisJCQkJCQkJCQkJbmV3IFNFSVJMYWJlbFZhbHVlSW1wbCgxMDAsIDAsIDAsIDAsIDAsCisJCQkJCQkJCQkJCQkwKSwKKwkJCQkJCQkJCQkvLyBOWzAsMV0KKwkJCQkJCQkJCQluZXcgU0VJUkxhYmVsVmFsdWVJbXBsKDEwMCwgMCwgMCwgMCwgMCwKKwkJCQkJCQkJCQkJCTApLAorCQkJCQkJCQkJCS8vIE5bMCwyXQorCQkJCQkJCQkJCW5ldyBTRUlSTGFiZWxWYWx1ZUltcGwoMTAwLCAwLCAwLCAwLCAwLAorCQkJCQkJCQkJCQkJMCkKKworCQkJCQkJCQl9IH0sCisKKwkJCQkJCQkJLy8gU3RlcCAyCisJCQkJCQkJCXsgeworCQkJCQkJCQkvLyBOWzAsMF0KKwkJCQkJCQkJCQluZXcgU0VJUkxhYmVsVmFsdWVJbXBsKDEwMCwgMCwgMCwgMCwgMCwKKwkJCQkJCQkJCQkJCTApLAorCQkJCQkJCQkJCS8vIE5bMCwxXQorCQkJCQkJCQkJCW5ldyBTRUlSTGFiZWxWYWx1ZUltcGwoMTAwLCAwLCAwLCAwLCAwLAorCQkJCQkJCQkJCQkJMCksCisJCQkJCQkJCQkJLy8gTlswLDJdCisJCQkJCQkJCQkJbmV3IFNFSVJMYWJlbFZhbHVlSW1wbCgxMDAsIDAsIDAsIDAsIDAsCisJCQkJCQkJCQkJCQkwKQorCisJCQkJCQkJCX0gfSB9IC8vIG5ldyBTRUlSTGFiZWxWYWx1ZQorCisJCQkJKTsgLy8gcHV0KFRFU1RfU0NFTkFSSU8xeDNfS0VZKQorCisJCS8vIDJ4MgorCQlleHBlY3RlZERpc2Vhc2VNb2RlbFN0YXRlcy5wdXQoVEVTVF9TQ0VOQVJJTzJ4Ml9LRVksCisJCQkJbmV3IFNFSVJMYWJlbFZhbHVlW11bXVtdIHsKKwkJCQkvLyBTdGVwIDAKKwkJCQkJCXsKKwkJCQkJCQkJeworCisJCQkJCQkJCS8vIE5bMCwwXQorCQkJCQkJCQkJCW5ldyBTRUlSTGFiZWxWYWx1ZUltcGwoMTAwLCAwLCAwLCAwLCAwLAorCQkJCQkJCQkJCQkJMCksCisJCQkJCQkJCQkJLy8gTlswLDFdCisJCQkJCQkJCQkJbmV3IFNFSVJMYWJlbFZhbHVlSW1wbCgxMDAsIDAsIDAsIDAsIDAsCisJCQkJCQkJCQkJCQkwKQorCisJCQkJCQkJCX0sCisJCQkJCQkJCXsKKworCQkJCQkJCQkvLyBOWzEsMF0KKwkJCQkJCQkJCQluZXcgU0VJUkxhYmVsVmFsdWVJbXBsKDEwMCwgMCwgMCwgMCwgMCwKKwkJCQkJCQkJCQkJCTApLAorCQkJCQkJCQkJCS8vIE5bMSwxXQorCQkJCQkJCQkJCW5ldyBTRUlSTGFiZWxWYWx1ZUltcGwoMTAwLCAwLCAwLCAwLCAwLAorCQkJCQkJCQkJCQkJMCkKKworCQkJCQkJCQl9IH0sCisKKwkJCQkJCS8vIFN0ZXAgMQorCQkJCQkJeworCQkJCQkJCQl7CisJCQkJCQkJCS8vIE5bMCwwXQorCQkJCQkJCQkJCW5ldyBTRUlSTGFiZWxWYWx1ZUltcGwoMTAwLCAwLCAwLCAwLCAwLAorCQkJCQkJCQkJCQkJMCksCisJCQkJCQkJCQkJLy8gTlswLDFdCisJCQkJCQkJCQkJbmV3IFNFSVJMYWJlbFZhbHVlSW1wbCgxMDAsIDAsIDAsIDAsIDAsCisJCQkJCQkJCQkJCQkwKQorCisJCQkJCQkJCX0sCisJCQkJCQkJCXsKKworCQkJCQkJCQkvLyBOWzEsMF0KKwkJCQkJCQkJCQluZXcgU0VJUkxhYmVsVmFsdWVJbXBsKDEwMCwgMCwgMCwgMCwgMCwKKwkJCQkJCQkJCQkJCTApLAorCQkJCQkJCQkJCS8vIE5bMSwxXQorCQkJCQkJCQkJCW5ldyBTRUlSTGFiZWxWYWx1ZUltcGwoMTAwLCAwLCAwLCAwLCAwLAorCQkJCQkJCQkJCQkJMCkKKworCQkJCQkJCQl9IH0sCisKKwkJCQkJCS8vIFN0ZXAgMgorCQkJCQkJeworCQkJCQkJCQl7CisJCQkJCQkJCS8vIE5bMCwwXQorCQkJCQkJCQkJCW5ldyBTRUlSTGFiZWxWYWx1ZUltcGwoMTAwLCAwLCAwLCAwLCAwLAorCQkJCQkJCQkJCQkJMCksCisJCQkJCQkJCQkJLy8gTlswLDFdCisJCQkJCQkJCQkJbmV3IFNFSVJMYWJlbFZhbHVlSW1wbCgxMDAsIDAsIDAsIDAsIDAsCisJCQkJCQkJCQkJCQkwKQorCisJCQkJCQkJCX0sCisJCQkJCQkJCXsKKworCQkJCQkJCQkvLyBOWzEsMF0KKwkJCQkJCQkJCQluZXcgU0VJUkxhYmVsVmFsdWVJbXBsKDEwMCwgMCwgMCwgMCwgMCwKKwkJCQkJCQkJCQkJCTApLAorCQkJCQkJCQkJCS8vIE5bMSwxXQorCQkJCQkJCQkJCW5ldyBTRUlSTGFiZWxWYWx1ZUltcGwoMTAwLCAwLCAwLCAwLCAwLAorCQkJCQkJCQkJCQkJMCkKKworCQkJCQkJCQl9IH0gfSAvLyBuZXcgU0VJUkxhYmVsVmFsdWUKKworCQkJCSk7IC8vIHB1dChURVNUX1NDRU5BUklPMngyX0tFWSkKKworCQkvLyAzeDMKKwkJZXhwZWN0ZWREaXNlYXNlTW9kZWxTdGF0ZXMucHV0KFRFU1RfU0NFTkFSSU8zeDNfS0VZLAorCQkJCW5ldyBTRUlSTGFiZWxWYWx1ZVtdW11bXSB7CisJCQkJLy8gU3RlcCAwCisJCQkJCQl7CisJCQkJCQkJCXsKKworCQkJCQkJCQkvLyBOWzAsMF0KKwkJCQkJCQkJCQluZXcgU0VJUkxhYmVsVmFsdWVJbXBsKDEwMCwgMCwgMCwgMCwgMCwKKwkJCQkJCQkJCQkJCTApLAorCQkJCQkJCQkJCS8vIE5bMCwxXQorCQkJCQkJCQkJCW5ldyBTRUlSTGFiZWxWYWx1ZUltcGwoMTAwLCAwLCAwLCAwLCAwLAorCQkJCQkJCQkJCQkJMCksCisJCQkJCQkJCQkJLy8gTlswLDJdCisJCQkJCQkJCQkJbmV3IFNFSVJMYWJlbFZhbHVlSW1wbCgxMDAsIDAsIDAsIDAsIDAsCisJCQkJCQkJCQkJCQkwKQorCisJCQkJCQkJCX0sCisJCQkJCQkJCXsKKworCQkJCQkJCQkvLyBOWzEsMF0KKwkJCQkJCQkJCQluZXcgU0VJUkxhYmVsVmFsdWVJbXBsKDEwMCwgMCwgMCwgMCwgMCwKKwkJCQkJCQkJCQkJCTApLAorCQkJCQkJCQkJCS8vIE5bMSwxXQorCQkJCQkJCQkJCW5ldyBTRUlSTGFiZWxWYWx1ZUltcGwoMTAwLCAwLCAwLCAwLCAwLAorCQkJCQkJCQkJCQkJMCksCisJCQkJCQkJCQkJLy8gTlsxLDJdCisJCQkJCQkJCQkJbmV3IFNFSVJMYWJlbFZhbHVlSW1wbCgxMDAsIDAsIDAsIDAsIDAsCisJCQkJCQkJCQkJCQkwKQorCisJCQkJCQkJCX0sCisJCQkJCQkJCXsKKworCQkJCQkJCQkvLyBOWzIsMF0KKwkJCQkJCQkJCQluZXcgU0VJUkxhYmVsVmFsdWVJbXBsKDEwMCwgMCwgMCwgMCwgMCwKKwkJCQkJCQkJCQkJCTApLAorCQkJCQkJCQkJCS8vIE5bMiwxXQorCQkJCQkJCQkJCW5ldyBTRUlSTGFiZWxWYWx1ZUltcGwoMTAwLCAwLCAwLCAwLCAwLAorCQkJCQkJCQkJCQkJMCksCisJCQkJCQkJCQkJLy8gTlsyLDJdCisJCQkJCQkJCQkJbmV3IFNFSVJMYWJlbFZhbHVlSW1wbCgxMDAsIDAsIDAsIDAsIDAsCisJCQkJCQkJCQkJCQkwKQorCisJCQkJCQkJCX0gfSwKKworCQkJCQkJLy8gU3RlcCAxCisJCQkJCQl7CisJCQkJCQkJCXsKKwkJCQkJCQkJLy8gTlswLDBdCisJCQkJCQkJCQkJbmV3IFNFSVJMYWJlbFZhbHVlSW1wbCgxMDAsIDAsIDAsIDAsIDAsCisJCQkJCQkJCQkJCQkwKSwKKwkJCQkJCQkJCQkvLyBOWzAsMV0KKwkJCQkJCQkJCQluZXcgU0VJUkxhYmVsVmFsdWVJbXBsKDEwMCwgMCwgMCwgMCwgMCwKKwkJCQkJCQkJCQkJCTApLAorCQkJCQkJCQkJCS8vIE5bMCwyXQorCQkJCQkJCQkJCW5ldyBTRUlSTGFiZWxWYWx1ZUltcGwoMTAwLCAwLCAwLCAwLCAwLAorCQkJCQkJCQkJCQkJMCkKKworCQkJCQkJCQl9LAorCQkJCQkJCQl7CisKKwkJCQkJCQkJLy8gTlsxLDBdCisJCQkJCQkJCQkJbmV3IFNFSVJMYWJlbFZhbHVlSW1wbCgxMDAsIDAsIDAsIDAsIDAsCisJCQkJCQkJCQkJCQkgMCksCisJCQkJCQkJCQkJLy8gTlsxLDFdCisJCQkJCQkJCQkJbmV3IFNFSVJMYWJlbFZhbHVlSW1wbCgxMDAsIDAsIDAsIDAsIDAsCisJCQkJCQkJCQkJCQkgMCksCisJCQkJCQkJCQkJLy8gTlsxLDJdCisJCQkJCQkJCQkJbmV3IFNFSVJMYWJlbFZhbHVlSW1wbCgxMDAsIDAsIDAsIDAsIDAsCisJCQkJCQkJCQkJCQkgMCkKKworCQkJCQkJCQl9LAorCQkJCQkJCQl7CisKKwkJCQkJCQkJLy8gTlsyLDBdCisJCQkJCQkJCQkJbmV3IFNFSVJMYWJlbFZhbHVlSW1wbCgxMDAsIDAsIDAsIDAsIDAsCisJCQkJCQkJCQkJCQkgMCksCisJCQkJCQkJCQkJLy8gTlsyLDFdCisJCQkJCQkJCQkJbmV3IFNFSVJMYWJlbFZhbHVlSW1wbCgxMDAsIDAsIDAsIDAsIDAsCisJCQkJCQkJCQkJCQkgMCksCisJCQkJCQkJCQkJLy8gTlsyLDJdCisJCQkJCQkJCQkJbmV3IFNFSVJMYWJlbFZhbHVlSW1wbCgxMDAsIDAsIDAsIDAsIDAsCisJCQkJCQkJCQkJCSAwKQorCisJCQkJCQkJCX0gfSwKKworCQkJCQkJLy8gU3RlcCAyCisJCQkJCQl7CisJCQkJCQkJCXsKKwkJCQkJCQkJLy8gTlswLDBdCisJCQkJCQkJCQkJbmV3IFNFSVJMYWJlbFZhbHVlSW1wbCgxMDAsIDAsIDAsIDAsIDAsCisJCQkJCQkJCQkJCQkgMCksCisJCQkJCQkJCQkJLy8gTlswLDFdCisJCQkJCQkJCQkJbmV3IFNFSVJMYWJlbFZhbHVlSW1wbCgxMDAsIDAsIDAsIDAsIDAsCisJCQkJCQkJCQkJCQkgMCksCisJCQkJCQkJCQkJLy8gTlswLDJdCisJCQkJCQkJCQkJbmV3IFNFSVJMYWJlbFZhbHVlSW1wbCgxMDAsIDAsIDAsIDAsIDAsCisJCQkJCQkJCQkJCQkgMCkKKworCQkJCQkJCQl9LAorCQkJCQkJCQl7CisKKwkJCQkJCQkJLy8gTlsxLDBdCisJCQkJCQkJCQkJbmV3IFNFSVJMYWJlbFZhbHVlSW1wbCgxMDAsIDAsIDAsIDAsIDAsCisJCQkJCQkJCQkJCQkgMCksCisJCQkJCQkJCQkJLy8gTlsxLDFdCisJCQkJCQkJCQkJbmV3IFNFSVJMYWJlbFZhbHVlSW1wbCgxMDAsIDAsIDAsIDAsIDAsCisJCQkJCQkJCQkJCQkgMCksCisJCQkJCQkJCQkJLy8gTlsxLDJdCisJCQkJCQkJCQkJbmV3IFNFSVJMYWJlbFZhbHVlSW1wbCgxMDAsIDAsIDAsIDAsIDAsCisJCQkJCQkJCQkJCQkgMCkKKworCQkJCQkJCQl9LAorCQkJCQkJCQl7CisKKwkJCQkJCQkJLy8gTlsyLDBdCisJCQkJCQkJCQkJbmV3IFNFSVJMYWJlbFZhbHVlSW1wbCgxMDAsIDAsIDAsIDAsIDAsCisJCQkJCQkJCQkJCQkgMCksCisJCQkJCQkJCQkJLy8gTlsyLDFdCisJCQkJCQkJCQkJbmV3IFNFSVJMYWJlbFZhbHVlSW1wbCgxMDAsIDAsIDAsIDAsIDAsCisJCQkJCQkJCQkJCQkgMCksCisJCQkJCQkJCQkJLy8gTlsyLDJdCisJCQkJCQkJCQkJbmV3IFNFSVJMYWJlbFZhbHVlSW1wbCgxMDAsIDAsIDAsIDAsIDAsCisJCQkJCQkJCQkJCQkgMCkKKworCQkJCQkJCQl9IH0gfSAvLyBuZXcgU0VJUkxhYmVsVmFsdWUKKworCQkJCSk7IC8vIHB1dChURVNUX1NDRU5BUklPM3gzX0tFWSkKKworCQkvLyBGaWxsIG91dCB0aGUgbWFwIHRoYXQgc3BlY2lmaWVzIGhvdyBtYW55IGxhYmVscyBzaG91bGQgYmUgdXBkYXRlZCBieQorCQkvLyBhIGRpc2Vhc2UgbW9kZWwgZm9yIGVhY2ggdGVzdC4KKwkJZm9yIChUZXN0U3BlYyB0ZXN0U3BlYyA6IHRlc3RTcGVjaWZpY2F0aW9ucykgeworCQkJZXhwZWN0ZWROdW1iZXJPZkxhYmVsc1RvVXBkYXRlCisJCQkJCS5wdXQoCisJCQkJCQkJdGVzdFNwZWMuc2NlbmFyaW9EaXNlYXNlS2V5LAorCQkJCQkJCW5ldyBJbnRlZ2VyKAorCQkJCQkJCQkJY29tcHV0ZUV4cGVjdGVkTnVtYmVyT2ZMYWJlbHMoZXhwZWN0ZWREaXNlYXNlTW9kZWxTdGF0ZXMKKwkJCQkJCQkJCQkJLmdldCh0ZXN0U3BlYy5zY2VuYXJpb0Rpc2Vhc2VLZXkpKSkpOworCQl9IC8vIGZvciBlYWNoIHRlc3Qgc3BlY2lmaWNhdGlvbgorCisJfSAvLyBzdGF0aWMKKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLnRlc3RzLkRpc2Vhc2VNb2RlbFNjZW5hcmlvVGVzdCNnZXREaXNlYXNlTW9kZWxzVG9UZXN0KCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgTGlzdDxOb2RlRGVjb3JhdG9yPiBnZXREaXNlYXNlTW9kZWxzVG9UZXN0KCkgeworCQlmaW5hbCBMaXN0PE5vZGVEZWNvcmF0b3I+IHJldFZhbHVlID0gbmV3IEFycmF5TGlzdDxOb2RlRGVjb3JhdG9yPigpOworCQkvLyB0aGlzIGlzIGEgdGVzdCB3aXRoIGEgZ2FpbiBvZiB6ZXJvCisJCS8vIGlmIE1VU1QgcmV0dXJuIHRoZSBzYW1lIHJlc3VsdCBhcyB0aGUgZGV0ZXJtaW5pc3RpYyBtb2RlbAorCQkvLyBiZWNhdXNlIHRoZSBub2lzZSBtdWxpdHBsaWVyIGlzIDEuMCBmb3IgYSBnYWluIG9mIDAuMAorCQlyZXRWYWx1ZS5hZGQoU3RvY2hhc3RpY1NFSVJEaXNlYXNlTW9kZWxUZXN0LmNyZWF0ZUZpeHR1cmUoMC4wKSk7CisJCQorCQkvLyBORVcgVEVTVCBOZWVkZWQgIGh0dHBzOi8vYnVncy5lY2xpcHNlLm9yZy9idWdzL3Nob3dfYnVnLmNnaT9pZD0xODYwNDMKKwkJLy8KKwkJLy8gd2UgbmVlZCB0byBhZGQgYSB0ZXN0IGF0IGEgaGlnaGVyIGdhaW4uIEZvciBhIGdhaW4gPiB0aGUgZnV6enkgY29tcGFyZSAoZG91YmxlIGVxdWFsaXR5IHRvbGxlcmFuY2UpCisJCS8vIDEuIHRoZSByZXN1bHRzIHNob3VsZCBESUZGRVIgZnJvbSB0aGUgZGV0ZXJtaW5pc3RpYyByZXN1bHQgKHByb3ZlcyB0aGVyZSBpcyBub2lzZQorCQkvLyAyLiB0aGUgc3RvY2hhc3RpYyB0ZXN0IHNob3VsZCBhZ3JlZSB3aXRoIHBlcmNvbXB1dGVkIHZhbHVlcworCQkvLyByZXRWYWx1ZS5hZGQoU3RvY2hhc3RpY1NFSVJEaXNlYXNlTW9kZWxUZXN0LmNyZWF0ZUZpeHR1cmUoMC4wMikpOworCQkKKwkJCisJCXJldHVybiByZXRWYWx1ZTsKKwl9IC8vIGdldERpc2Vhc2VNb2RlbHNUb1Rlc3QKKworCUBPdmVycmlkZQorCXByb3RlY3RlZCBpbnQgZ2V0TnVtYmVyT2ZTdGVwcyhmaW5hbCBTdHJpbmcgZGlzZWFzZVNjZW5hcmlvS2V5KSB7CisJCVNFSVJMYWJlbFZhbHVlW11bXVtdIHRlbXAgPSBleHBlY3RlZERpc2Vhc2VNb2RlbFN0YXRlcworCQkJCS5nZXQoZGlzZWFzZVNjZW5hcmlvS2V5KTsKKwkJcmV0dXJuIHRlbXAubGVuZ3RoOworCX0gLy8gZ2V0TnVtYmVyT2ZTdGVwcworCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIGludCBnZXRFeHBlY3RlZE51bWJlck9mTGFiZWxzVG9VcGRhdGUoCisJCQlmaW5hbCBTdHJpbmcgZGlzZWFzZVNjZW5hcmlvS2V5KSB7CisJCUludGVnZXIgdGVtcCA9IGV4cGVjdGVkTnVtYmVyT2ZMYWJlbHNUb1VwZGF0ZS5nZXQoZGlzZWFzZVNjZW5hcmlvS2V5KTsKKwkJcmV0dXJuIHRlbXAuaW50VmFsdWUoKTsKKwl9IC8vIGdldEV4cGVjdGVkTnVtYmVyT2ZMYWJlbHNUb1VwZGF0ZQorCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIExhYmVsVmFsdWVbXVtdIGdldEV4cGVjdGVkRGlzZWFzZU1vZGVsU3RhdGUoCisJCQlmaW5hbCBTdHJpbmcgZGlzZWFzZVNjZW5hcmlvS2V5LCBmaW5hbCBpbnQgc3RlcCkgeworCQlmaW5hbCBTRUlSTGFiZWxWYWx1ZVtdW11bXSBzZWlyTGFiZWxWYWx1ZSA9IGV4cGVjdGVkRGlzZWFzZU1vZGVsU3RhdGVzCisJCQkJLmdldChkaXNlYXNlU2NlbmFyaW9LZXkpOworCQlyZXR1cm4gc2VpckxhYmVsVmFsdWVbc3RlcF07CisJfSAvLyBnZXRFeHBlY3RlZERpc2Vhc2VNb2RlbFN0YXRlCisKKwlwcm90ZWN0ZWQgU3RyaW5nIGdldERpc2Vhc2VVUklQcmVmaXgoKSB7CisJCXJldHVybiBESVNFQVNFX1VSSV9QUkVGSVg7CisJfSAvLyBnZXREaXNlYXNlVVJJUHJlZml4Cit9IC8vIFN0b2NoYXN0aWNTRUlSU2NlbmFyaW9UZXN0CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9zdGFuZGFyZC90ZXN0cy9TdG9jaGFzdGljU0lEaXNlYXNlTW9kZWxUZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9zdGFuZGFyZC90ZXN0cy9TdG9jaGFzdGljU0lEaXNlYXNlTW9kZWxUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWUxM2FiNQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3N0YW5kYXJkL3Rlc3RzL1N0b2NoYXN0aWNTSURpc2Vhc2VNb2RlbFRlc3QuamF2YQpAQCAtMCwwICsxLDMwNyBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQudGVzdHM7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgamF2YS51dGlsLlJhbmRvbTsKKworaW1wb3J0IGp1bml0LnRleHR1aS5UZXN0UnVubmVyOworCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuVVJJOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS51dGlsLkVjb3JlVXRpbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuU1RFTVVSSTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLkR1YmxpbkNvcmU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlNJTGFiZWxWYWx1ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbFZhbHVlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdG9jaGFzdGljU0lEaXNlYXNlTW9kZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLmltcGwuU0lMYWJlbFZhbHVlSW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuaW1wbC5TdGFuZGFyZFN0b2NoYXN0aWNEaXNlYXNlTW9kZWxJbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5pbXBsLlN0b2NoYXN0aWNTSURpc2Vhc2VNb2RlbEltcGw7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gQSB0ZXN0IGNhc2UgZm9yIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5TdG9jaGFzdGljIFNJIERpc2Vhc2UgTW9kZWw8L2I+PC9lbT4nLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiA8cD4KKyAqIFRoZSBmb2xsb3dpbmcgb3BlcmF0aW9ucyBhcmUgdGVzdGVkOgorICogPHVsPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZFN0b2NoYXN0aWNEaXNlYXNlTW9kZWwjY29tcHV0ZU5vaXNlKCkgPGVtPkNvbXB1dGUgTm9pc2U8L2VtPn08L2xpPgorICogPC91bD4KKyAqIDwvcD4KKyAqIEBnZW5lcmF0ZWQKKyAqLworQFN1cHByZXNzV2FybmluZ3MoImFsbCIpCitwdWJsaWMgY2xhc3MgU3RvY2hhc3RpY1NJRGlzZWFzZU1vZGVsVGVzdCBleHRlbmRzIFNJVGVzdCB7CisKKwlwdWJsaWMgc3RhdGljIGZpbmFsIGxvbmcgUkFORE9NX1NFRUQgPSAxbDsKKwlwdWJsaWMgc3RhdGljIGZpbmFsIGRvdWJsZSBURVNUX0dBSU4gPSAwLjAxZDsKKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgRElTRUFTRV9JREVOVElGSUVSID0gIlN0b2NoYXN0aWNTSURpc2Vhc2VNb2RlbCI7CisJcHVibGljIHN0YXRpYyBmaW5hbCBVUkkgRElTRUFTRV9VUkkgPSBTVEVNVVJJLmNyZWF0ZVVSSSgiZGlzZWFzZW1vZGVsIiArICIvIiArIERJU0VBU0VfSURFTlRJRklFUik7CisJCisJLyoqCisJICogVGhlIG5hbWUgb2YgdGhlIHRlc3QgZGlzZWFzZSAoYW4gaW5zdGFuY2Ugb2YgYSBkaXNlYXNlIG1vZGVsKQorCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFRFU1RfU0lfRElTRUFTRV9OQU1FID0gIlRlc3QgU3RvY2FzdGljIFNJIERpc2Vhc2UiOworCisJCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAcGFyYW0gYXJncworCSAqIAorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CisJCVRlc3RSdW5uZXIucnVuKFN0b2NoYXN0aWNTSURpc2Vhc2VNb2RlbFRlc3QuY2xhc3MpOworCX0KKworCS8qKgorCSAqIENvbnN0cnVjdHMgYSBuZXcgU3RvY2hhc3RpYyBTSSBEaXNlYXNlIE1vZGVsIHRlc3QgY2FzZSB3aXRoIHRoZSBnaXZlbiBuYW1lLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogCisJICogQHBhcmFtIG5hbWUKKwkgKiAKKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFN0b2NoYXN0aWNTSURpc2Vhc2VNb2RlbFRlc3QoU3RyaW5nIG5hbWUpIHsKKwkJc3VwZXIobmFtZSk7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgZml4dHVyZSBmb3IgdGhpcyBTdG9jaGFzdGljIFNJIERpc2Vhc2UgTW9kZWwgdGVzdCBjYXNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgU3RvY2hhc3RpY1NJRGlzZWFzZU1vZGVsIGdldEZpeHR1cmUoKSB7CisJCXJldHVybiAoU3RvY2hhc3RpY1NJRGlzZWFzZU1vZGVsKWZpeHR1cmU7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogCisJICogQHNlZSBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2Ujc2V0VXAoKQorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJcHJvdGVjdGVkIHZvaWQgc2V0VXAoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJc2V0Rml4dHVyZShjcmVhdGVGaXh0dXJlKCkpOworCQlTdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsIGRtbCA9IGNyZWF0ZUxhYmVsRml4dHVyZSgpOworCQlzZXRMYWJlbEZpeHR1cmUoZG1sKTsKKwkJZml4dHVyZS5zZXREaXNlYXNlTmFtZShESVNFQVNFX0lERU5USUZJRVIpOworCQlmaXh0dXJlLnNldFVSSShESVNFQVNFX1VSSSk7CisJCUR1YmxpbkNvcmUgZGMgPSBmaXh0dXJlLmdldER1YmxpbkNvcmUoKTsKKwkJZGMuc2V0SWRlbnRpZmllcihmaXh0dXJlLmdldFVSSSgpLnRvU3RyaW5nKCkpOworCX0gLy8gc2V0VXAKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBzZWUganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlI3RlYXJEb3duKCkKKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCXByb3RlY3RlZCB2b2lkIHRlYXJEb3duKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCXN1cGVyLnRlYXJEb3duKCk7CisJfSAvLyB0ZWFyRG93bgorCisJLyoqCisJICogVGVzdHMgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkU3RvY2hhc3RpY0Rpc2Vhc2VNb2RlbCNjb21wdXRlTm9pc2UoKSA8ZW0+Q29tcHV0ZSBOb2lzZTwvZW0+fScgb3BlcmF0aW9uLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmRTdG9jaGFzdGljRGlzZWFzZU1vZGVsI2NvbXB1dGVOb2lzZSgpCisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlwdWJsaWMgdm9pZCB0ZXN0Q29tcHV0ZU5vaXNlKCkgeworCQlTdGFuZGFyZFN0b2NoYXN0aWNEaXNlYXNlTW9kZWxUZXN0LnN0YXRpY0NvbXB1dGVOb2lzZVRlc3QoKTsKKwl9CisKKwkvKioKKwkgKiBDcmVhdGUgZGlzZWFzZSBtb2RlbCBpbnN0YW5jZQorCSAqIAorCSAqIEByZXR1cm4gYSBkaXNlYXNlIG1vZGVsIGluc3RhbmNlIGZvciB0ZXN0IHB1cnBvc2VzCisJICovCisJcHVibGljIHN0YXRpYyBTdG9jaGFzdGljU0lEaXNlYXNlTW9kZWwgY3JlYXRlRml4dHVyZSgpIHsKKwkJcmV0dXJuIGNyZWF0ZUZpeHR1cmUoU3RhbmRhcmRTdG9jaGFzdGljRGlzZWFzZU1vZGVsSW1wbC5HQUlOX0VERUZBVUxUKTsKKwl9IC8vIGNyZWF0ZUZpeHR1cmUKKwkKKwkvKioKKwkgKiBDcmVhdGUgZGlzZWFzZSBtb2RlbCBpbnN0YW5jZQorCSAqIAorCSAqIEByZXR1cm4gYSBkaXNlYXNlIG1vZGVsIGluc3RhbmNlIGZvciB0ZXN0IHB1cnBvc2VzCisJICovCisJcHVibGljIHN0YXRpYyBTdG9jaGFzdGljU0lEaXNlYXNlTW9kZWwgY3JlYXRlRml4dHVyZShkb3VibGUgbmV3R2FpbikgeworCQlTdG9jaGFzdGljU0lEaXNlYXNlTW9kZWwgZGlzZWFzZU1vZGVsID0gU3RhbmRhcmRGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVTdG9jaGFzdGljU0lEaXNlYXNlTW9kZWwoKTsKKwkJZGlzZWFzZU1vZGVsLnNldERpc2Vhc2VOYW1lKFRFU1RfU0lfRElTRUFTRV9OQU1FKTsKKwkJZGlzZWFzZU1vZGVsLmdldER1YmxpbkNvcmUoKS5zZXRUaXRsZShURVNUX1NJX0RJU0VBU0VfTkFNRSk7CisJCWRpc2Vhc2VNb2RlbC5zZXRUaW1lUGVyaW9kKFRFU1RfVElNRV9QRVJJT0QpOworCQlkaXNlYXNlTW9kZWwuc2V0UG9wdWxhdGlvbklkZW50aWZpZXIoVEVTVF9QT1BVTEFUSU9OX0lERU5USUZJRVIpOworCQlkaXNlYXNlTW9kZWwuc2V0VHJhbnNtaXNzaW9uUmF0ZShUUkFOU01JU1NJT05fUkFURSk7CisJCWRpc2Vhc2VNb2RlbC5zZXRSZWNvdmVyeVJhdGUoUkVDT1ZFUllfUkFURSk7CisJCWRpc2Vhc2VNb2RlbC5zZXRJbmZlY3Rpb3VzTW9ydGFsaXR5UmF0ZShJTkZFQ1RJT1VTX01PUlRBTElUWV9SQVRFKTsKKwkJZGlzZWFzZU1vZGVsLnNldE5vbkxpbmVhcml0eUNvZWZmaWNpZW50KE5PTl9MSU5FQVJJVFlfQ09FRkZJQ0lFTlQpOworCQlkaXNlYXNlTW9kZWwuc2V0R2FpbihuZXdHYWluKTsKKwkJCisJCWZpbmFsIER1YmxpbkNvcmUgZGMgPSBkaXNlYXNlTW9kZWwuZ2V0RHVibGluQ29yZSgpOworCQlkaXNlYXNlTW9kZWwuc2V0VVJJKERJU0VBU0VfVVJJKTsKKwkJZGMuc2V0SWRlbnRpZmllcihkaXNlYXNlTW9kZWwuZ2V0VVJJKCkudG9TdHJpbmcoKSk7CisJCXJldHVybiBkaXNlYXNlTW9kZWw7CisJfSAvLyBjcmVhdGVGaXh0dXJlCisKKwkKKwkvKioKKwkgKiBUZXN0cyB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuaW1wbC5TdG9jaGFzdGljRGlzZWFzZU1vZGVsSW1wbCNkb01vZGVsU3BlY2lmaWNBZGp1c3RtZW50cygpIDxlbT5kb01vZGVsU3BlY2lmaWNBZGp1c3RtZW50czwvZW0+fScgb3BlcmF0aW9uLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLmltcGwuU3RvY2hhc3RpY0Rpc2Vhc2VNb2RlbEltcGwjZG9Nb2RlbFNwZWNpZmljQWRqdXN0bWVudHMoKQorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJQFN1cHByZXNzV2FybmluZ3MoInN5bnRoZXRpYy1hY2Nlc3MiKQorCXB1YmxpYyB2b2lkIHRlc3RNb2RlbFNwZWNpZmljQWRqdXN0bWVudHMoKXsKKwkJU3RvY2hhc3RpY1NJRGlzZWFzZU1vZGVsVGVzdGVySW1wbCBzdG9jaGFzdGljU0lEaXNlYXNlTW9kZWwgPSBuZXcgU3RvY2hhc3RpY1NJRGlzZWFzZU1vZGVsVGVzdGVySW1wbCgpOworCQlTSUxhYmVsVmFsdWVJbXBsIGN1cnJlbnRTSSA9IG5ldyBTSUxhYmVsVmFsdWVJbXBsKDEwMDBkLCA0MGQsIDIwZCwgMTBkKTsKKwkJZG9UZXN0KHN0b2NoYXN0aWNTSURpc2Vhc2VNb2RlbCwgY3VycmVudFNJKTsKKwl9CisKKy8vCXByaXZhdGUgdm9pZCBkb1Rlc3RXaXRoUGVybXV0YXRpb25zKCkgeworLy8JCVN0b2NoYXN0aWNTSURpc2Vhc2VNb2RlbFRlc3RlckltcGwgc3RvY2hhc3RpY1NJRGlzZWFzZU1vZGVsID0gbmV3IFN0b2NoYXN0aWNTSURpc2Vhc2VNb2RlbFRlc3RlckltcGwoKTsKKy8vCQlMaXN0PFNJTGFiZWxWYWx1ZUltcGw+IG1vZGVsTGFibGVWYWx1ZXMgPSBTSUxhYmVsVmFsdWVUZXN0VXRpbC5jcmVhdGVSYW5kb21TSUxhYmVsVmFsdWVJbXBsKCk7CisvLwkJCisvLwkJaW50IGNvdW50MSA9IDA7CisvLwkJaW50IGNvdW50MiA9IDA7CisvLwkJU3lzdGVtLm91dC5wcmludGxuKCk7CisvLwkJZm9yKFNJTGFiZWxWYWx1ZUltcGwgY3VycmVudFNJOiBtb2RlbExhYmxlVmFsdWVzKXsKKy8vCQkJU3lzdGVtLm91dC5wcmludGxuKGNvdW50MSsrKTsKKy8vCQkJZm9yKFNJTGFiZWxWYWx1ZUltcGwgU0lBZGRpdGlvbnM6IG1vZGVsTGFibGVWYWx1ZXMpeworLy8JCQkJU3lzdGVtLm91dC5wcmludGxuKCIJIiArIGNvdW50MisrKTsKKy8vCQkJCWZvcihTSUxhYmVsVmFsdWVJbXBsIFNJRGVhdGhzOiBtb2RlbExhYmxlVmFsdWVzKXsKKy8vCQkJCQkvL1NJRGVhdGhzIGFuZCBTSUFkZGl0aW9ucyB3aWxsIGJlIG1vZGlmaWVkIG15IHRoZSB0ZXN0IG1ldGhvZCwgc28gd2UgYmV0dGVyIGNsb25lIHRoZW0gCisvLwkJCQkJZG9UZXN0KHN0b2NoYXN0aWNTSURpc2Vhc2VNb2RlbCwgY3VycmVudFNJLAorLy8JCQkJCQkJU0lBZGRpdGlvbnMsIFNJRGVhdGhzKTsKKy8vCQkJIAl9CisvLwkJCX0KKy8vCQl9CisvLwl9CisKKwlwcml2YXRlIHZvaWQgZG9UZXN0KFN0b2NoYXN0aWNTSURpc2Vhc2VNb2RlbFRlc3RlckltcGwgc3RvY2hhc3RpY1NJRGlzZWFzZU1vZGVsLAorCQkJU0lMYWJlbFZhbHVlSW1wbCBjdXJyZW50U0kpIHsKKwkJc3RvY2hhc3RpY1NJRGlzZWFzZU1vZGVsLmRvTW9kZWxTcGVjaWZpY0FkanVzdG1lbnRzKGN1cnJlbnRTSSwgUkFORE9NX1NFRUQsIFRFU1RfR0FJTik7CisJCQorCQlTSUxhYmVsVmFsdWVJbXBsIG9sZFZhbCA9IChTSUxhYmVsVmFsdWVJbXBsKUVjb3JlVXRpbC5jb3B5KGN1cnJlbnRTSSk7CisJCWRvQ2FsY3VsYXRlTW9kZWxTcGVjaWZpY0FkanVzdG1lbnRzKGN1cnJlbnRTSSwgUkFORE9NX1NFRUQsIFRFU1RfR0FJTik7CisKKwkJU3RyaW5nIHN0YXRlID0gZ2V0U3RhdGUoY3VycmVudFNJLCBvbGRWYWwpOworCQkKKwkJdmFsaWRhdGVNb2RlbFNwZWNpZmljQWRqdXN0bWVudHMoY3VycmVudFNJLCBvbGRWYWwsCisJCQkJc3RhdGUpOworCX0KKworCS8qKgorCSAqIFRoaXMgbWV0aG9kIHJldHVybnMgYSBkb3VibGUgcHJlY2lzaW9uIHJhbmRvbSBub2lzZSB2YXJpYWJsZQorCSAqIHIgYmV0d2VlbiAoMS4wK3gpIGFuZCAoMS4wLXgpCisJICogd2hlcmUgeCBpcyBhIHByb2R1Y3QgRyogTWF0aC5yYW5kKCksIGFuZCBHIGlzIGEgZ2FpbiBmYWN0b3IgMDxHPG1heCBub2lzZQorCSAqIAorCSAqIEBwYXJhbSBnYWluCisJICogQHBhcmFtIHJhbmQKKwkgKiBAcmV0dXJuIG5vaXNlCisJICovCisJcHVibGljIHN0YXRpYyBkb3VibGUgY29tcHV0ZU5vaXNlKGZpbmFsIGRvdWJsZSBnYWluLCBmaW5hbCBSYW5kb20gcmFuZCkgeworCisJCWRvdWJsZSB4ID0gKDIuMCpyYW5kLm5leHREb3VibGUoKSktMS4wOyAvLyArLy0gMQorCQl4ICo9IGdhaW47CisJCXggKz0gMS4wOworCQlhc3NlcnQgKCh4PjAuMCkmJih4PDIuMCkpIDogInJhbmRvbSBub2lzZSBzaG91bGQgYmUgYSBzbWFsbCBwZXJ0dXJiYXRpb24gR2FpbiBmYWN0b3IsIGcsICBtdXN0IDAuMCA8IGcgPDwgMS4wICI7CisJCXJldHVybiB4OworCQkKKwl9IC8vIGdldE5vaXNlCisJCisJCisJcHJpdmF0ZSB2b2lkIGRvQ2FsY3VsYXRlTW9kZWxTcGVjaWZpY0FkanVzdG1lbnRzKAorCQkJU0lMYWJlbFZhbHVlSW1wbCBwQ3VycmVudFNJLCBsb25nIHBSYW5kb21TZWVkLCBkb3VibGUgcFRlc3RHYWluKSB7CisJCWZpbmFsIFNJTGFiZWxWYWx1ZSBjdXJyZW50U0kgPSAoU0lMYWJlbFZhbHVlKSBwQ3VycmVudFNJOworCQlSYW5kb20gcmFuZG9tID0gbmV3IFJhbmRvbShwUmFuZG9tU2VlZCk7CisJCWRvdWJsZSBJbm9pc3kgPSBjdXJyZW50U0kuZ2V0SSgpKiBjb21wdXRlTm9pc2UocFRlc3RHYWluLCByYW5kb20pOworCQljdXJyZW50U0kuc2V0SShJbm9pc3kpOworCQlyZXR1cm47CisJfQorCisJcHJpdmF0ZSB2b2lkIHZhbGlkYXRlTW9kZWxTcGVjaWZpY0FkanVzdG1lbnRzKFNJTGFiZWxWYWx1ZUltcGwgY3VycmVudFZhbCwKKwkJCVNJTGFiZWxWYWx1ZUltcGwgb2xkVmFsLAorCQkJU3RyaW5nIHN0YXRlKSB7CisKKwkJCisJCXRyeXsKKwkJCWN1cnJlbnRWYWwuc2FuZSgpOworCQl9CisJCWNhdGNoKFRocm93YWJsZSB0KXsKKwkJCXRocm93IG5ldyBJbGxlZ2FsU3RhdGVFeGNlcHRpb24oImN1cnJlbnRWYWwgaXMgaW5zYW5lLCBzdGF0ZSBpczogIiArIHN0YXRlLCB0KTsKKwkJfQorCQl0cnl7CisJCQlvbGRWYWwuc2FuZSgpOworCQl9CisJCWNhdGNoKFRocm93YWJsZSB0KXsKKwkJCXRocm93IG5ldyBJbGxlZ2FsU3RhdGVFeGNlcHRpb24oIm9sZFZhbCBpcyBpbnNhbmUsIHN0YXRlIGlzOiAiICsgc3RhdGUsIHQpOworCQl9CisKKwkJCisJCQorCQlhc3NlcnRUcnVlKFN0cmluZy5mb3JtYXQoImN1cnJlbnRWYWwgaGFzIGluc2FuZSB2YWx1ZXMgJXMiLCBzdGF0ZSksIG15U2FuaXR5Q2hlY2soY3VycmVudFZhbCkpOworCQlhc3NlcnRUcnVlKFN0cmluZy5mb3JtYXQoIm9sZFZhbCBoYXMgaW5zYW5lIHZhbHVlcyAlcyIsIHN0YXRlKSwgbXlTYW5pdHlDaGVjayhvbGRWYWwpKTsKKwkJCisJfQorCQorCXByaXZhdGUgYm9vbGVhbiBjaGVja0VxdWFsKFNJTGFiZWxWYWx1ZUltcGwgcENhbGN1bGF0ZWRTSUFkZGl0aW9ucywKKwkJCVNJTGFiZWxWYWx1ZUltcGwgcE5ld1NJQWRkaXRpb25zKSB7CisJCWlmKChwQ2FsY3VsYXRlZFNJQWRkaXRpb25zLmdldERpc2Vhc2VEZWF0aHMoKSAhPSBwTmV3U0lBZGRpdGlvbnMuZ2V0RGlzZWFzZURlYXRocygpKSB8fAorCQkJCShwQ2FsY3VsYXRlZFNJQWRkaXRpb25zLmdldEkoKSAhPSBwTmV3U0lBZGRpdGlvbnMuZ2V0SSgpKSB8fAorCQkJCShwQ2FsY3VsYXRlZFNJQWRkaXRpb25zLmdldFBvcHVsYXRpb25Db3VudCgpICE9IHBOZXdTSUFkZGl0aW9ucy5nZXRQb3B1bGF0aW9uQ291bnQoKSkgfHwKKwkJCQkocENhbGN1bGF0ZWRTSUFkZGl0aW9ucy5nZXRTKCkgIT0gcE5ld1NJQWRkaXRpb25zLmdldFMoKSkpeworCQkJCQlyZXR1cm4gZmFsc2U7CisJCQkJfQorCQlyZXR1cm4gdHJ1ZTsKKwl9CisKKwlwcml2YXRlIGJvb2xlYW4gbXlTYW5pdHlDaGVjayhTSUxhYmVsVmFsdWVJbXBsIHBTSSkgeworCQlyZXR1cm4gYXNzZXJ0VmFsaWREb3VibGUocFNJLmdldEkoKSkgJiYgCisJCQlhc3NlcnRWYWxpZERvdWJsZShwU0kuZ2V0UygpKTsKKwkJCisJfQorCisJcHJpdmF0ZSBib29sZWFuIGFzc2VydFZhbGlkRG91YmxlKGRvdWJsZSBwRG91YmxlKSB7CisJCXJldHVybiAhKERvdWJsZS5pc05hTihwRG91YmxlKSB8fCBEb3VibGUuaXNJbmZpbml0ZShwRG91YmxlKSk7CisJfQorCisJcHJpdmF0ZSBTdHJpbmcgZ2V0U3RhdGUoU0lMYWJlbFZhbHVlSW1wbCBwQ3VycmVudFNJLAorCQkJU0lMYWJlbFZhbHVlSW1wbCBvbGRWYWwpIHsKKwkJcmV0dXJuIFN0cmluZy5mb3JtYXQoIlxucHJlc2VudCBzdGF0ZSBpczogXG5DdXJyZW50U0lbJXNdXG4gb2xkU0lbJXNdXG4iLCAKKwkJCQlwQ3VycmVudFNJLCBvbGRWYWwpOworCX0KKworCQorCS8qKgorCSAqIGNyZWF0ZWQganVzdCBmb3IgdGVzdGluZ3Mgc2luY2UgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuaW1wbC5TdG9jaGFzdGljRGlzZWFzZU1vZGVsSW1wbCNkb01vZGVsU3BlY2lmaWNBZGp1c3RtZW50cygpIDxlbT5kb01vZGVsU3BlY2lmaWNBZGp1c3RtZW50czwvZW0+fScgaXMgcHJvdGVjdGVkLgorCSAqIEBhdXRob3IgZWlzaGF5CisJICoKKwkgKi8KKwlwcml2YXRlIGNsYXNzIFN0b2NoYXN0aWNTSURpc2Vhc2VNb2RlbFRlc3RlckltcGwgZXh0ZW5kcyBTdG9jaGFzdGljU0lEaXNlYXNlTW9kZWxJbXBseworCisJCXB1YmxpYyB2b2lkIGRvTW9kZWxTcGVjaWZpY0FkanVzdG1lbnRzKAorCQkJCVN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZSBwQ3VycmVudFN0YXRlLAorCQkJCWxvbmcgcFJhbmRvbVNlZWQsIGRvdWJsZSBwVGVzdEdhaW4pIHsKKwkJCXNldFNlZWQocFJhbmRvbVNlZWQpOworCQkJc2V0R2FpbihwVGVzdEdhaW4pOworCQkJCisJCQlTSUxhYmVsVmFsdWVJbXBsIG9sZEN1cnJlbnRTdGF0ZSA9IFNJTGFiZWxWYWx1ZVRlc3RVdGlsLmNsb25lU0lMYWJlbFZhbHVlSW1wbCgoU0lMYWJlbFZhbHVlSW1wbClwQ3VycmVudFN0YXRlKTsKKwkJCXN1cGVyLmRvTW9kZWxTcGVjaWZpY0FkanVzdG1lbnRzKHBDdXJyZW50U3RhdGUpOworCQl9CisJCQorCX0KKwkKK30gLy8gU3RvY2hhc3RpY1NJRGlzZWFzZU1vZGVsVGVzdApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvc3RhbmRhcmQvdGVzdHMvU3RvY2hhc3RpY1NJUkRpc2Vhc2VNb2RlbFRlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3N0YW5kYXJkL3Rlc3RzL1N0b2NoYXN0aWNTSVJEaXNlYXNlTW9kZWxUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTJmMGQyZAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3N0YW5kYXJkL3Rlc3RzL1N0b2NoYXN0aWNTSVJEaXNlYXNlTW9kZWxUZXN0LmphdmEKQEAgLTAsMCArMSwzMTggQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLnRlc3RzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA2LCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGphdmEudXRpbC5SYW5kb207CisKK2ltcG9ydCBqdW5pdC50ZXh0dWkuVGVzdFJ1bm5lcjsKKworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZEZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlVSSTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUudXRpbC5FY29yZVV0aWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLlNURU1VUkk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5EdWJsaW5Db3JlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TSVJMYWJlbFZhbHVlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsVmFsdWU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlN0b2NoYXN0aWNTSVJEaXNlYXNlTW9kZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLmltcGwuU0lSTGFiZWxWYWx1ZUltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLmltcGwuU3RhbmRhcmRTdG9jaGFzdGljRGlzZWFzZU1vZGVsSW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuaW1wbC5TdG9jaGFzdGljU0lSRGlzZWFzZU1vZGVsSW1wbDsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiBBIHRlc3QgY2FzZSBmb3IgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPlN0b2NoYXN0aWMgU0lSIERpc2Vhc2UgTW9kZWw8L2I+PC9lbT4nLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiA8cD4KKyAqIFRoZSBmb2xsb3dpbmcgb3BlcmF0aW9ucyBhcmUgdGVzdGVkOgorICogPHVsPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZFN0b2NoYXN0aWNEaXNlYXNlTW9kZWwjY29tcHV0ZU5vaXNlKCkgPGVtPkNvbXB1dGUgTm9pc2U8L2VtPn08L2xpPgorICogPC91bD4KKyAqIDwvcD4KKyAqIEBnZW5lcmF0ZWQKKyAqLworQFN1cHByZXNzV2FybmluZ3MoImFsbCIpCitwdWJsaWMgY2xhc3MgU3RvY2hhc3RpY1NJUkRpc2Vhc2VNb2RlbFRlc3QgZXh0ZW5kcyBTSVJUZXN0IHsKKworCXB1YmxpYyBzdGF0aWMgZmluYWwgbG9uZyBSQU5ET01fU0VFRCA9IDFsOworCXB1YmxpYyBzdGF0aWMgZmluYWwgZG91YmxlIFRFU1RfR0FJTiA9IDAuMDFkOworCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBESVNFQVNFX0lERU5USUZJRVIgPSAiU3RvY2hhc3RpY1NJUkRpc2Vhc2VNb2RlbCI7CisJcHVibGljIHN0YXRpYyBmaW5hbCBVUkkgRElTRUFTRV9VUkkgPSBTVEVNVVJJLmNyZWF0ZVVSSSgiZGlzZWFzZW1vZGVsIiArICIvIiArIERJU0VBU0VfSURFTlRJRklFUik7CisJCisJLyoqCisJICogVGhlIG5hbWUgb2YgdGhlIHRlc3QgZGlzZWFzZSAoYW4gaW5zdGFuY2Ugb2YgYSBkaXNlYXNlIG1vZGVsKQorCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFRFU1RfU0lSX0RJU0VBU0VfTkFNRSA9ICJUZXN0IFN0b2Nhc3RpYyBTSVIgRGlzZWFzZSI7CisKKwkKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBwYXJhbSBhcmdzCisJICogCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKKwkJVGVzdFJ1bm5lci5ydW4oU3RvY2hhc3RpY1NJUkRpc2Vhc2VNb2RlbFRlc3QuY2xhc3MpOworCX0KKworCS8qKgorCSAqIENvbnN0cnVjdHMgYSBuZXcgU3RvY2hhc3RpYyBTSVIgRGlzZWFzZSBNb2RlbCB0ZXN0IGNhc2Ugd2l0aCB0aGUgZ2l2ZW4gbmFtZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBwYXJhbSBuYW1lCisJICogCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBTdG9jaGFzdGljU0lSRGlzZWFzZU1vZGVsVGVzdChTdHJpbmcgbmFtZSkgeworCQlzdXBlcihuYW1lKTsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBmaXh0dXJlIGZvciB0aGlzIFN0b2NoYXN0aWMgU0lSIERpc2Vhc2UgTW9kZWwgdGVzdCBjYXNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgU3RvY2hhc3RpY1NJUkRpc2Vhc2VNb2RlbCBnZXRGaXh0dXJlKCkgeworCQlyZXR1cm4gKFN0b2NoYXN0aWNTSVJEaXNlYXNlTW9kZWwpZml4dHVyZTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAc2VlIGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZSNzZXRVcCgpCisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBzZXRVcCgpIHRocm93cyBFeGNlcHRpb24geworCQlzZXRGaXh0dXJlKGNyZWF0ZUZpeHR1cmUoKSk7CisJCVN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWwgZG1sID0gY3JlYXRlTGFiZWxGaXh0dXJlKCk7CisJCXNldExhYmVsRml4dHVyZShkbWwpOworCQlmaXh0dXJlLnNldERpc2Vhc2VOYW1lKERJU0VBU0VfSURFTlRJRklFUik7CisJCWZpeHR1cmUuc2V0VVJJKERJU0VBU0VfVVJJKTsKKwkJRHVibGluQ29yZSBkYyA9IGZpeHR1cmUuZ2V0RHVibGluQ29yZSgpOworCQlkYy5zZXRJZGVudGlmaWVyKGZpeHR1cmUuZ2V0VVJJKCkudG9TdHJpbmcoKSk7CisJfSAvLyBzZXRVcAorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogCisJICogQHNlZSBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2UjdGVhckRvd24oKQorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJcHJvdGVjdGVkIHZvaWQgdGVhckRvd24oKSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJc3VwZXIudGVhckRvd24oKTsKKwl9IC8vIHRlYXJEb3duCisKKwkvKioKKwkgKiBUZXN0cyB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmRTdG9jaGFzdGljRGlzZWFzZU1vZGVsI2NvbXB1dGVOb2lzZSgpIDxlbT5Db21wdXRlIE5vaXNlPC9lbT59JyBvcGVyYXRpb24uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZFN0b2NoYXN0aWNEaXNlYXNlTW9kZWwjY29tcHV0ZU5vaXNlKCkKKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCXB1YmxpYyB2b2lkIHRlc3RDb21wdXRlTm9pc2UoKSB7CisJCVN0YW5kYXJkU3RvY2hhc3RpY0Rpc2Vhc2VNb2RlbFRlc3Quc3RhdGljQ29tcHV0ZU5vaXNlVGVzdCgpOworCX0KKworCS8qKgorCSAqIENyZWF0ZSBkaXNlYXNlIG1vZGVsIGluc3RhbmNlCisJICogCisJICogQHJldHVybiBhIGRpc2Vhc2UgbW9kZWwgaW5zdGFuY2UgZm9yIHRlc3QgcHVycG9zZXMKKwkgKi8KKwlwdWJsaWMgc3RhdGljIFN0b2NoYXN0aWNTSVJEaXNlYXNlTW9kZWwgY3JlYXRlRml4dHVyZSgpIHsKKwkJcmV0dXJuIGNyZWF0ZUZpeHR1cmUoU3RhbmRhcmRTdG9jaGFzdGljRGlzZWFzZU1vZGVsSW1wbC5HQUlOX0VERUZBVUxUKTsKKwl9IC8vIGNyZWF0ZUZpeHR1cmUKKwkKKwkvKioKKwkgKiBDcmVhdGUgZGlzZWFzZSBtb2RlbCBpbnN0YW5jZQorCSAqIAorCSAqIEByZXR1cm4gYSBkaXNlYXNlIG1vZGVsIGluc3RhbmNlIGZvciB0ZXN0IHB1cnBvc2VzCisJICovCisJcHVibGljIHN0YXRpYyBTdG9jaGFzdGljU0lSRGlzZWFzZU1vZGVsIGNyZWF0ZUZpeHR1cmUoZG91YmxlIG5ld0dhaW4pIHsKKwkJU3RvY2hhc3RpY1NJUkRpc2Vhc2VNb2RlbCBkaXNlYXNlTW9kZWwgPSBTdGFuZGFyZEZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZVN0b2NoYXN0aWNTSVJEaXNlYXNlTW9kZWwoKTsKKwkJZGlzZWFzZU1vZGVsLnNldERpc2Vhc2VOYW1lKFRFU1RfU0lSX0RJU0VBU0VfTkFNRSk7CisJCWRpc2Vhc2VNb2RlbC5nZXREdWJsaW5Db3JlKCkuc2V0VGl0bGUoVEVTVF9TSVJfRElTRUFTRV9OQU1FKTsKKwkJZGlzZWFzZU1vZGVsLnNldFRpbWVQZXJpb2QoVEVTVF9USU1FX1BFUklPRCk7CisJCWRpc2Vhc2VNb2RlbC5zZXRQb3B1bGF0aW9uSWRlbnRpZmllcihURVNUX1BPUFVMQVRJT05fSURFTlRJRklFUik7CisJCWRpc2Vhc2VNb2RlbC5zZXRUcmFuc21pc3Npb25SYXRlKFRSQU5TTUlTU0lPTl9SQVRFKTsKKwkJZGlzZWFzZU1vZGVsLnNldFJlY292ZXJ5UmF0ZShSRUNPVkVSWV9SQVRFKTsKKwkJZGlzZWFzZU1vZGVsLnNldEluZmVjdGlvdXNNb3J0YWxpdHlSYXRlKElORkVDVElPVVNfTU9SVEFMSVRZX1JBVEUpOworCQlkaXNlYXNlTW9kZWwuc2V0Tm9uTGluZWFyaXR5Q29lZmZpY2llbnQoTk9OX0xJTkVBUklUWV9DT0VGRklDSUVOVCk7CisJCWRpc2Vhc2VNb2RlbC5zZXRJbW11bml0eUxvc3NSYXRlKElNTVVOSVRZX0xPU1NfUkFURSk7CisJCWRpc2Vhc2VNb2RlbC5zZXRHYWluKG5ld0dhaW4pOworCisJCWZpbmFsIER1YmxpbkNvcmUgZGMgPSBkaXNlYXNlTW9kZWwuZ2V0RHVibGluQ29yZSgpOworCQlkaXNlYXNlTW9kZWwuc2V0VVJJKERJU0VBU0VfVVJJKTsKKwkJZGMuc2V0SWRlbnRpZmllcihkaXNlYXNlTW9kZWwuZ2V0VVJJKCkudG9TdHJpbmcoKSk7CisJCXJldHVybiBkaXNlYXNlTW9kZWw7CisJCQorCQkKKwl9IC8vIGNyZWF0ZUZpeHR1cmUKKworCQorCS8qKgorCSAqIFRlc3RzIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5pbXBsLlN0b2NoYXN0aWNEaXNlYXNlTW9kZWxJbXBsI2RvTW9kZWxTcGVjaWZpY0FkanVzdG1lbnRzKCkgPGVtPmRvTW9kZWxTcGVjaWZpY0FkanVzdG1lbnRzPC9lbT59JyBvcGVyYXRpb24uCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuaW1wbC5TdG9jaGFzdGljRGlzZWFzZU1vZGVsSW1wbCNkb01vZGVsU3BlY2lmaWNBZGp1c3RtZW50cygpCisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlAU3VwcHJlc3NXYXJuaW5ncygic3ludGhldGljLWFjY2VzcyIpCisJcHVibGljIHZvaWQgdGVzdE1vZGVsU3BlY2lmaWNBZGp1c3RtZW50cygpeworCQlTdG9jaGFzdGljU0lSRGlzZWFzZU1vZGVsVGVzdGVySW1wbCBzdG9jaGFzdGljU0lSRGlzZWFzZU1vZGVsID0gbmV3IFN0b2NoYXN0aWNTSVJEaXNlYXNlTW9kZWxUZXN0ZXJJbXBsKCk7CisJCVNJUkxhYmVsVmFsdWVJbXBsIGN1cnJlbnRTSVIgPSBuZXcgU0lSTGFiZWxWYWx1ZUltcGwoMTAwMGQsIDQwZCwgMzBkLCAyMGQsIDEwZCk7CisJCWRvVGVzdChzdG9jaGFzdGljU0lSRGlzZWFzZU1vZGVsLCBjdXJyZW50U0lSKTsKKwl9CisKKy8vCUBTdXBwcmVzc1dhcm5pbmdzKCJzeW50aGV0aWMtYWNjZXNzIikKKy8vCXByaXZhdGUgdm9pZCBkb1Rlc3RXaXRoUGVybXV0YXRpb25zKCkgeworLy8JCVN0b2NoYXN0aWNTSVJEaXNlYXNlTW9kZWxUZXN0ZXJJbXBsIHN0b2NoYXN0aWNTSVJEaXNlYXNlTW9kZWwgPSBuZXcgU3RvY2hhc3RpY1NJUkRpc2Vhc2VNb2RlbFRlc3RlckltcGwoKTsKKy8vCQlMaXN0PFNJUkxhYmVsVmFsdWVJbXBsPiBtb2RlbExhYmxlVmFsdWVzID0gU0lSTGFiZWxWYWx1ZVRlc3RVdGlsLmNyZWF0ZVJhbmRvbVNJUkxhYmVsVmFsdWVJbXBsKCk7CisvLwkJCisvLwkJaW50IGNvdW50MSA9IDA7CisvLwkJaW50IGNvdW50MiA9IDA7CisvLwkJU3lzdGVtLm91dC5wcmludGxuKCk7CisvLwkJZm9yKFNJUkxhYmVsVmFsdWVJbXBsIGN1cnJlbnRTSVI6IG1vZGVsTGFibGVWYWx1ZXMpeworLy8JCQlTeXN0ZW0ub3V0LnByaW50bG4oY291bnQxKyspOworLy8JCQlmb3IoU0lSTGFiZWxWYWx1ZUltcGwgU0lSQWRkaXRpb25zOiBtb2RlbExhYmxlVmFsdWVzKXsKKy8vCQkJCVN5c3RlbS5vdXQucHJpbnRsbigiCSIgKyBjb3VudDIrKyk7CisvLwkJCQlmb3IoU0lSTGFiZWxWYWx1ZUltcGwgU0lSRGVhdGhzOiBtb2RlbExhYmxlVmFsdWVzKXsKKy8vCQkJCQkvL1NJUkRlYXRocyBhbmQgU0lSQWRkaXRpb25zIHdpbGwgYmUgbW9kaWZpZWQgbXkgdGhlIHRlc3QgbWV0aG9kLCBzbyB3ZSBiZXR0ZXIgY2xvbmUgdGhlbSAKKy8vCQkJCQlkb1Rlc3Qoc3RvY2hhc3RpY1NJUkRpc2Vhc2VNb2RlbCwgY3VycmVudFNJUiwKKy8vCQkJCQkJCVNJUkFkZGl0aW9ucywgU0lSRGVhdGhzKTsKKy8vCQkJIAl9CisvLwkJCX0KKy8vCQl9CisvLwl9CisKKwlwcml2YXRlIHZvaWQgZG9UZXN0KFN0b2NoYXN0aWNTSVJEaXNlYXNlTW9kZWxUZXN0ZXJJbXBsIHN0b2NoYXN0aWNTSVJEaXNlYXNlTW9kZWwsCisJCQlTSVJMYWJlbFZhbHVlSW1wbCBjdXJyZW50U0lSKSB7CisJCQorCQlzdG9jaGFzdGljU0lSRGlzZWFzZU1vZGVsLmRvTW9kZWxTcGVjaWZpY0FkanVzdG1lbnRzKGN1cnJlbnRTSVIsIFJBTkRPTV9TRUVELCBURVNUX0dBSU4pOworCQlTSVJMYWJlbFZhbHVlSW1wbCBvbGRTSVI9IChTSVJMYWJlbFZhbHVlSW1wbClFY29yZVV0aWwuY29weShjdXJyZW50U0lSKTsKKwkJZG9DYWxjdWxhdGVNb2RlbFNwZWNpZmljQWRqdXN0bWVudHMoY3VycmVudFNJUiwgUkFORE9NX1NFRUQsIFRFU1RfR0FJTik7CisKKwkJU3RyaW5nIHN0YXRlID0gZ2V0U3RhdGUoY3VycmVudFNJUiwgb2xkU0lSKTsKKwkJCisJCXZhbGlkYXRlTW9kZWxTcGVjaWZpY0FkanVzdG1lbnRzKGN1cnJlbnRTSVIsCisJCQkJb2xkU0lSLAorCQkJCXN0YXRlKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIG1ldGhvZCByZXR1cm5zIGEgZG91YmxlIHByZWNpc2lvbiByYW5kb20gbm9pc2UgdmFyaWFibGUKKwkgKiByIGJldHdlZW4gKDEuMCt4KSBhbmQgKDEuMC14KQorCSAqIHdoZXJlIHggaXMgYSBwcm9kdWN0IEcqIE1hdGgucmFuZCgpLCBhbmQgRyBpcyBhIGdhaW4gZmFjdG9yIDA8RzxtYXggbm9pc2UKKwkgKiAKKwkgKiBAcGFyYW0gZ2FpbgorCSAqIEBwYXJhbSByYW5kCisJICogQHJldHVybiBub2lzZQorCSAqLworCXB1YmxpYyBzdGF0aWMgZG91YmxlIGNvbXB1dGVOb2lzZShmaW5hbCBkb3VibGUgZ2FpbiwgZmluYWwgUmFuZG9tIHJhbmQpIHsKKworCQlkb3VibGUgeCA9ICgyLjAqcmFuZC5uZXh0RG91YmxlKCkpLTEuMDsgLy8gKy8tIDEKKwkJeCAqPSBnYWluOworCQl4ICs9IDEuMDsKKwkJYXNzZXJ0ICgoeD4wLjApJiYoeDwyLjApKSA6ICJyYW5kb20gbm9pc2Ugc2hvdWxkIGJlIGEgc21hbGwgcGVydHVyYmF0aW9uIEdhaW4gZmFjdG9yLCBnLCAgbXVzdCAwLjAgPCBnIDw8IDEuMCAiOworCQlyZXR1cm4geDsKKwkJCisJfSAvLyBnZXROb2lzZQorCQorCQorCXByaXZhdGUgdm9pZCBkb0NhbGN1bGF0ZU1vZGVsU3BlY2lmaWNBZGp1c3RtZW50cygKKwkJCVNJUkxhYmVsVmFsdWVJbXBsIHBDdXJyZW50U0lSLCBsb25nIHBSYW5kb21TZWVkLCBkb3VibGUgcFRlc3RHYWluKSB7CisJCQorCQlmaW5hbCBTSVJMYWJlbFZhbHVlIGN1cnJlbnRTSSA9IChTSVJMYWJlbFZhbHVlKSBwQ3VycmVudFNJUjsKKwkJUmFuZG9tIHJhbmRvbSA9IG5ldyBSYW5kb20ocFJhbmRvbVNlZWQpOworCQlkb3VibGUgSW5vaXN5ID0gY3VycmVudFNJLmdldEkoKSogY29tcHV0ZU5vaXNlKHBUZXN0R2FpbiwgcmFuZG9tKTsKKwkJY3VycmVudFNJLnNldEkoSW5vaXN5KTsKKwkJcmV0dXJuOworCQkJCQorCX0KKworCXByaXZhdGUgdm9pZCB2YWxpZGF0ZU1vZGVsU3BlY2lmaWNBZGp1c3RtZW50cyhTSVJMYWJlbFZhbHVlSW1wbCBjdXJyZW50U0lSLAorCQkJU0lSTGFiZWxWYWx1ZUltcGwgb2xkU0lSLAorCQkJU3RyaW5nIHN0YXRlKSB7CisKKwkJCisJCXRyeXsKKwkJCWN1cnJlbnRTSVIuc2FuZSgpOworCQl9CisJCWNhdGNoKFRocm93YWJsZSB0KXsKKwkJCXRocm93IG5ldyBJbGxlZ2FsU3RhdGVFeGNlcHRpb24oImN1cnJlbnRTSVIgaXMgaW5zYW5lLCBzdGF0ZSBpczogIiArIHN0YXRlLCB0KTsKKwkJfQorCQl0cnl7CisJCQlvbGRTSVIuc2FuZSgpOworCQl9CisJCWNhdGNoKFRocm93YWJsZSB0KXsKKwkJCXRocm93IG5ldyBJbGxlZ2FsU3RhdGVFeGNlcHRpb24oIm9sZFNJUiBpcyBpbnNhbmUsIHN0YXRlIGlzOiAiICsgc3RhdGUsIHQpOworCQl9CisKKwkJCisJCQorCQlhc3NlcnRUcnVlKFN0cmluZy5mb3JtYXQoImN1cnJlbnRTSVIgaGFzIGluc2FuZSB2YWx1ZXMgJXMiLCBzdGF0ZSksIG15U2FuaXR5Q2hlY2soY3VycmVudFNJUikpOworCQlhc3NlcnRUcnVlKFN0cmluZy5mb3JtYXQoIm9sZFNJUiBoYXMgaW5zYW5lIHZhbHVlcyAlcyIsIHN0YXRlKSwgbXlTYW5pdHlDaGVjayhvbGRTSVIpKTsKKworCQkKKwl9CisJCisJcHJpdmF0ZSBib29sZWFuIGNoZWNrRXF1YWwoU0lSTGFiZWxWYWx1ZUltcGwgcENhbGN1bGF0ZWRTSVJBZGRpdGlvbnMsCisJCQlTSVJMYWJlbFZhbHVlSW1wbCBwTmV3U0lSQWRkaXRpb25zKSB7CisJCWlmKChwQ2FsY3VsYXRlZFNJUkFkZGl0aW9ucy5nZXREaXNlYXNlRGVhdGhzKCkgIT0gcE5ld1NJUkFkZGl0aW9ucy5nZXREaXNlYXNlRGVhdGhzKCkpIHx8CisJCQkJKHBDYWxjdWxhdGVkU0lSQWRkaXRpb25zLmdldEkoKSAhPSBwTmV3U0lSQWRkaXRpb25zLmdldEkoKSkgfHwKKwkJCQkocENhbGN1bGF0ZWRTSVJBZGRpdGlvbnMuZ2V0UG9wdWxhdGlvbkNvdW50KCkgIT0gcE5ld1NJUkFkZGl0aW9ucy5nZXRQb3B1bGF0aW9uQ291bnQoKSkgfHwKKwkJCQkocENhbGN1bGF0ZWRTSVJBZGRpdGlvbnMuZ2V0UigpICE9IHBOZXdTSVJBZGRpdGlvbnMuZ2V0UigpKSB8fAorCQkJCShwQ2FsY3VsYXRlZFNJUkFkZGl0aW9ucy5nZXRTKCkgIT0gcE5ld1NJUkFkZGl0aW9ucy5nZXRTKCkpKXsKKwkJCQkJcmV0dXJuIGZhbHNlOworCQkJCX0KKwkJcmV0dXJuIHRydWU7CisJfQorCisJcHJpdmF0ZSBib29sZWFuIG15U2FuaXR5Q2hlY2soU0lSTGFiZWxWYWx1ZUltcGwgcFNJUikgeworCQlyZXR1cm4gYXNzZXJ0VmFsaWREb3VibGUocFNJUi5nZXRJKCkpICYmIAorCQkJYXNzZXJ0VmFsaWREb3VibGUocFNJUi5nZXRSKCkpICYmIAorCQkJYXNzZXJ0VmFsaWREb3VibGUocFNJUi5nZXRTKCkpOworCQkKKwl9CisKKwlwcml2YXRlIGJvb2xlYW4gYXNzZXJ0VmFsaWREb3VibGUoZG91YmxlIHBEb3VibGUpIHsKKwkJcmV0dXJuICEoRG91YmxlLmlzTmFOKHBEb3VibGUpIHx8IERvdWJsZS5pc0luZmluaXRlKHBEb3VibGUpKTsKKwl9CisKKwlwcml2YXRlIFN0cmluZyBnZXRTdGF0ZShTSVJMYWJlbFZhbHVlSW1wbCBwQ3VycmVudFNJUiwKKwkJCVNJUkxhYmVsVmFsdWVJbXBsIG9sZFNJUikgeworCQlyZXR1cm4gU3RyaW5nLmZvcm1hdCgiXG5wcmVzZW50IHN0YXRlIGlzOiBcbkN1cnJlbnRTSVJbJXNdXG4gT2xkU0lSWyVzXVxuIiwgCisJCQkJcEN1cnJlbnRTSVIsIHBDdXJyZW50U0lSLCBvbGRTSVIpOworCX0KKworCQorCS8qKgorCSAqIGNyZWF0ZWQganVzdCBmb3IgdGVzdGluZ3Mgc2luY2UgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuaW1wbC5TdG9jaGFzdGljRGlzZWFzZU1vZGVsSW1wbCNkb01vZGVsU3BlY2lmaWNBZGp1c3RtZW50cygpIDxlbT5kb01vZGVsU3BlY2lmaWNBZGp1c3RtZW50czwvZW0+fScgaXMgcHJvdGVjdGVkLgorCSAqIEBhdXRob3IgZWlzaGF5CisJICoKKwkgKi8KKwlwcml2YXRlIGNsYXNzIFN0b2NoYXN0aWNTSVJEaXNlYXNlTW9kZWxUZXN0ZXJJbXBsIGV4dGVuZHMgU3RvY2hhc3RpY1NJUkRpc2Vhc2VNb2RlbEltcGx7CisKKwkJcHVibGljIHZvaWQgZG9Nb2RlbFNwZWNpZmljQWRqdXN0bWVudHMoCisJCQkJU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbFZhbHVlIHBDdXJyZW50U3RhdGUsCisJCQkJbG9uZyBwUmFuZG9tU2VlZCwgZG91YmxlIHBUZXN0R2FpbikgeworCQkJc2V0U2VlZChwUmFuZG9tU2VlZCk7CisJCQlzZXRHYWluKHBUZXN0R2Fpbik7CisJCQkKKwkJCVNJUkxhYmVsVmFsdWVJbXBsIG9sZEN1cnJlbnRTdGF0ZSA9IFNJUkxhYmVsVmFsdWVUZXN0VXRpbC5jbG9uZVNJUkxhYmVsVmFsdWVJbXBsKChTSVJMYWJlbFZhbHVlSW1wbClwQ3VycmVudFN0YXRlKTsKKwkJCQorCQkJc3VwZXIuZG9Nb2RlbFNwZWNpZmljQWRqdXN0bWVudHMocEN1cnJlbnRTdGF0ZSk7CisJCX0KKwkJCisJfQorCQorfSAvLyBTdG9jaGFzdGljU0lSRGlzZWFzZU1vZGVsVGVzdApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvc3RhbmRhcmQvdGVzdHMvU3RvY2hhc3RpY1NJUlNjZW5hcmlvVGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvc3RhbmRhcmQvdGVzdHMvU3RvY2hhc3RpY1NJUlNjZW5hcmlvVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAzOTNjMmUKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9zdGFuZGFyZC90ZXN0cy9TdG9jaGFzdGljU0lSU2NlbmFyaW9UZXN0LmphdmEKQEAgLTAsMCArMSwzMjIgQEAKKy8vIFN0b2NoYXN0aWNTSVJTY2VuYXJpb1Rlc3QuamF2YQorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQudGVzdHM7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuTWFwOworCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkxhYmVsVmFsdWU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLk5vZGVEZWNvcmF0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlNJUkxhYmVsVmFsdWU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLmltcGwuU0lSTGFiZWxWYWx1ZUltcGw7CisKKy8qKgorICogVGhpcyBjbGFzcyBpcyBhIEpVbml0IHRlc3QgY2FzZSBmb3IgYSBTdG9jaGFzdGljIFNJUiBkaXNlYXNlIG1vZGVsIHNjZW5hcmlvCisgKi8KK3B1YmxpYyBjbGFzcyBTdG9jaGFzdGljU0lSU2NlbmFyaW9UZXN0IGV4dGVuZHMgU0lSRGlzZWFzZU1vZGVsU2NlbmFyaW9UZXN0IHsKKworCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBESVNFQVNFX1VSSV9QUkVGSVggPSAiU3RvY2hhc3RpY1NJUiI7CisKKwlwcml2YXRlIHN0YXRpYyBNYXA8U3RyaW5nLCBJbnRlZ2VyPiBleHBlY3RlZE51bWJlck9mTGFiZWxzVG9VcGRhdGUgPSBuZXcgSGFzaE1hcDxTdHJpbmcsIEludGVnZXI+KCk7CisKKwlwcml2YXRlIHN0YXRpYyBNYXA8U3RyaW5nLCBTSVJMYWJlbFZhbHVlW11bXVtdPiBleHBlY3RlZERpc2Vhc2VNb2RlbFN0YXRlcyA9IG5ldyBIYXNoTWFwPFN0cmluZywgU0lSTGFiZWxWYWx1ZVtdW11bXT4oKTsKKworCXN0YXRpYyB7CisKKwkJLy8gVGhlc2Ugd2VyZSBjb3BpZWQgZnJvbSBEZXRlcm1pbmlzdGljU0lSU2NlbmFyaW9UZXN0CisJCS8vIGZvciB0ZXN0IHB1cnBvc2VzIHdlIGFyZSBjaGVja2luZyB3aXRoIG5vaXNlID0gMAorCQkvLyAxeDEKKwkJZXhwZWN0ZWREaXNlYXNlTW9kZWxTdGF0ZXMucHV0KFRFU1RfU0NFTkFSSU8xeDFfS0VZLAorCQkJCW5ldyBTSVJMYWJlbFZhbHVlW11bXVtdIHsKKwkJCQkvLyBTdGVwIDAKKwkJCQkJCXsgeworCQkJCQkJLy8gTlswLDBdCisJCQkJCQluZXcgU0lSTGFiZWxWYWx1ZUltcGwoOTguOTAsIDAuOTksIDAuMDEsIDAuMTApIH0gfSwKKworCQkJCQkJLy8gU3RlcCAxCisJCQkJCQl7IHsKKwkJCQkJCS8vIE5bMCwwXQorCQkJCQkJbmV3IFNJUkxhYmVsVmFsdWVJbXBsKDk4LjgwLCAwLjk4LCAwLjAyLCAwLjIwKSB9IH0gfSAKKwkJCQkvLyBTSVJMYWJlbFZhbHVlCisKKwkJCQkpOyAvLyBwdXQoVEVTVF9TQ0VOQVJJTzF4MV9LRVkpCisKKwkJLy8gMXgyCisJCWV4cGVjdGVkRGlzZWFzZU1vZGVsU3RhdGVzCisJCQkJLnB1dChURVNUX1NDRU5BUklPMXgyX0tFWSwKKwkJCQkJCW5ldyBTSVJMYWJlbFZhbHVlW11bXVtdIHsKKwkJCQkJCS8vIFN0ZXAgMAorCQkJCQkJCQl7IHsKKwkJCQkJCQkJLy8gTlswLDBdCisJCQkJCQkJCQkJbmV3IFNJUkxhYmVsVmFsdWVJbXBsKDEwMCwgMCwgMCwgMCwgMAorCQkJCQkJCQkJCQkJKSwKKwkJCQkJCQkJCQkvLyBOWzAsMV0KKwkJCQkJCQkJCQluZXcgU0lSTGFiZWxWYWx1ZUltcGwoMTAwLCAwLCAwLCAwLCAwCisJCQkJCQkJCQkJCQkpIH0gfSwKKworCQkJCQkJCQkvLyBTdGVwIDEKKwkJCQkJCQkJeyB7CisJCQkJCQkJCS8vIE5bMCwwXQorCQkJCQkJCQkJCW5ldyBTSVJMYWJlbFZhbHVlSW1wbCgxMDAsIDAsIDAsIDAsIDAKKwkJCQkJCQkJCQkJCSksCisJCQkJCQkJCQkJLy8gTlswLDFdCisJCQkJCQkJCQkJbmV3IFNJUkxhYmVsVmFsdWVJbXBsKDEwMCwgMCwgMCwgMCwgMAorCQkJCQkJCQkJCQkJKSB9IH0sCisJCQkJCQkJCS8vIFN0ZXAgMgorCQkJCQkJCQl7IHsKKwkJCQkJCQkJLy8gTlswLDBdCisJCQkJCQkJCQkJbmV3IFNJUkxhYmVsVmFsdWVJbXBsKDEwMCwgMCwgMCwgMCwgMAorCQkJCQkJCQkJCQkJKSwKKwkJCQkJCQkJCQkvLyBOWzAsMV0KKwkJCQkJCQkJCQluZXcgU0lSTGFiZWxWYWx1ZUltcGwoMTAwLCAwLCAwLCAwLCAwCisJCQkJCQkJCQkJCQkpIH0gfSB9IC8vIG5ldworCQkJCS8vIFNJUkxhYmVsVmFsdWUKKwkJCQkpOyAvLyBwdXQoVEVTVF9TQ0VOQVJJTzF4Ml9LRVkpCisKKwkJLy8gMXgzCisJCWV4cGVjdGVkRGlzZWFzZU1vZGVsU3RhdGVzLnB1dChURVNUX1NDRU5BUklPMXgzX0tFWSwKKwkJCQluZXcgU0lSTGFiZWxWYWx1ZVtdW11bXSB7CisJCQkJLy8gU3RlcCAwCisJCQkJCQl7IHsKKworCQkJCQkJLy8gTlswLDBdCisJCQkJCQkJCW5ldyBTSVJMYWJlbFZhbHVlSW1wbCgxMDAsIDAsIDAsIDAsIDApLAorCQkJCQkJCQkvLyBOWzAsMV0KKwkJCQkJCQkJbmV3IFNJUkxhYmVsVmFsdWVJbXBsKDEwMCwgMCwgMCwgMCwgMCksCisJCQkJCQkJCS8vIE5bMCwyXQorCQkJCQkJCQluZXcgU0lSTGFiZWxWYWx1ZUltcGwoMTAwLCAwLCAwLCAwLCAwKQorCisJCQkJCQl9IH0sCisKKwkJCQkJCS8vIFN0ZXAgMQorCQkJCQkJeyB7CisJCQkJCQkvLyBOWzAsMF0KKwkJCQkJCQkJbmV3IFNJUkxhYmVsVmFsdWVJbXBsKDEwMCwgMCwgMCwgMCwgMCksCisJCQkJCQkJCS8vIE5bMCwxXQorCQkJCQkJCQluZXcgU0lSTGFiZWxWYWx1ZUltcGwoMTAwLCAwLCAwLCAwLCAwKSwKKwkJCQkJCQkJLy8gTlswLDJdCisJCQkJCQkJCW5ldyBTSVJMYWJlbFZhbHVlSW1wbCgxMDAsIDAsIDAsIDAsIDApCisKKwkJCQkJCX0gfSwKKworCQkJCQkJLy8gU3RlcCAyCisJCQkJCQl7IHsKKwkJCQkJCS8vIE5bMCwwXQorCQkJCQkJCQluZXcgU0lSTGFiZWxWYWx1ZUltcGwoMTAwLCAwLCAwLCAwLCAwKSwKKwkJCQkJCQkJLy8gTlswLDFdCisJCQkJCQkJCW5ldyBTSVJMYWJlbFZhbHVlSW1wbCgxMDAsIDAsIDAsIDAsIDApLAorCQkJCQkJCQkvLyBOWzAsMl0KKwkJCQkJCQkJbmV3IFNJUkxhYmVsVmFsdWVJbXBsKDEwMCwgMCwgMCwgMCwgMCkKKworCQkJCQkJfSB9IH0gLy8gbmV3IFNJUkxhYmVsVmFsdWUKKworCQkJCSk7IC8vIHB1dChURVNUX1NDRU5BUklPMXgzX0tFWSkKKworCQkvLyAyeDIKKwkJZXhwZWN0ZWREaXNlYXNlTW9kZWxTdGF0ZXMucHV0KFRFU1RfU0NFTkFSSU8yeDJfS0VZLAorCQkJCW5ldyBTSVJMYWJlbFZhbHVlW11bXVtdIHsKKwkJCQkvLyBTdGVwIDAKKwkJCQkJCXsgeworCisJCQkJCQkvLyBOWzAsMF0KKwkJCQkJCQkJbmV3IFNJUkxhYmVsVmFsdWVJbXBsKDEwMCwgMCwgMCwgMCwgMCksCisJCQkJCQkJCS8vIE5bMCwxXQorCQkJCQkJCQluZXcgU0lSTGFiZWxWYWx1ZUltcGwoMTAwLCAwLCAwLCAwLCAwKQorCisJCQkJCQl9LCB7CisKKwkJCQkJCS8vIE5bMSwwXQorCQkJCQkJCQluZXcgU0lSTGFiZWxWYWx1ZUltcGwoMTAwLCAwLCAwLCAwLCAwKSwKKwkJCQkJCQkJLy8gTlsxLDFdCisJCQkJCQkJCW5ldyBTSVJMYWJlbFZhbHVlSW1wbCgxMDAsIDAsIDAsIDAsIDApCisKKwkJCQkJCX0gfSwKKworCQkJCQkJLy8gU3RlcCAxCisJCQkJCQl7IHsKKwkJCQkJCS8vIE5bMCwwXQorCQkJCQkJCQluZXcgU0lSTGFiZWxWYWx1ZUltcGwoMTAwLCAwLCAwLCAwLCAwKSwKKwkJCQkJCQkJLy8gTlswLDFdCisJCQkJCQkJCW5ldyBTSVJMYWJlbFZhbHVlSW1wbCgxMDAsIDAsIDAsIDAsIDApCisKKwkJCQkJCX0sIHsKKworCQkJCQkJLy8gTlsxLDBdCisJCQkJCQkJCW5ldyBTSVJMYWJlbFZhbHVlSW1wbCgxMDAsIDAsIDAsIDAsIDApLAorCQkJCQkJCQkvLyBOWzEsMV0KKwkJCQkJCQkJbmV3IFNJUkxhYmVsVmFsdWVJbXBsKDEwMCwgMCwgMCwgMCwgMCkKKworCQkJCQkJfSB9LAorCisJCQkJCQkvLyBTdGVwIDIKKwkJCQkJCXsgeworCQkJCQkJLy8gTlswLDBdCisJCQkJCQkJCW5ldyBTSVJMYWJlbFZhbHVlSW1wbCgxMDAsIDAsIDAsIDAsIDApLAorCQkJCQkJCQkvLyBOWzAsMV0KKwkJCQkJCQkJbmV3IFNJUkxhYmVsVmFsdWVJbXBsKDEwMCwgMCwgMCwgMCwgMCkKKworCQkJCQkJfSwgeworCisJCQkJCQkvLyBOWzEsMF0KKwkJCQkJCQkJbmV3IFNJUkxhYmVsVmFsdWVJbXBsKDEwMCwgMCwgMCwgMCwgMCksCisJCQkJCQkJCS8vIE5bMSwxXQorCQkJCQkJCQluZXcgU0lSTGFiZWxWYWx1ZUltcGwoMTAwLCAwLCAwLCAwLCAwKQorCisJCQkJCQl9IH0gfSAvLyBuZXcgU0lSTGFiZWxWYWx1ZQorCisJCQkJKTsgLy8gcHV0KFRFU1RfU0NFTkFSSU8yeDJfS0VZKQorCisJCS8vIDN4MworCQlleHBlY3RlZERpc2Vhc2VNb2RlbFN0YXRlcy5wdXQoVEVTVF9TQ0VOQVJJTzN4M19LRVksCisJCQkJbmV3IFNJUkxhYmVsVmFsdWVbXVtdW10geworCQkJCS8vIFN0ZXAgMAorCQkJCQkJeyB7CisKKwkJCQkJCS8vIE5bMCwwXQorCQkJCQkJCQluZXcgU0lSTGFiZWxWYWx1ZUltcGwoMTAwLCAwLCAwLCAwLCAwKSwKKwkJCQkJCQkJLy8gTlswLDFdCisJCQkJCQkJCW5ldyBTSVJMYWJlbFZhbHVlSW1wbCgxMDAsIDAsIDAsIDAsIDApLAorCQkJCQkJCQkvLyBOWzAsMl0KKwkJCQkJCQkJbmV3IFNJUkxhYmVsVmFsdWVJbXBsKDEwMCwgMCwgMCwgMCwgMCkKKworCQkJCQkJfSwgeworCisJCQkJCQkvLyBOWzEsMF0KKwkJCQkJCQkJbmV3IFNJUkxhYmVsVmFsdWVJbXBsKDEwMCwgMCwgMCwgMCwgMCksCisJCQkJCQkJCS8vIE5bMSwxXQorCQkJCQkJCQluZXcgU0lSTGFiZWxWYWx1ZUltcGwoMTAwLCAwLCAwLCAwLCAwKSwKKwkJCQkJCQkJLy8gTlsxLDJdCisJCQkJCQkJCW5ldyBTSVJMYWJlbFZhbHVlSW1wbCgxMDAsIDAsIDAsIDAsIDApCisKKwkJCQkJCX0sIHsKKworCQkJCQkJLy8gTlsyLDBdCisJCQkJCQkJCW5ldyBTSVJMYWJlbFZhbHVlSW1wbCgxMDAsIDAsIDAsIDAsIDApLAorCQkJCQkJCQkvLyBOWzIsMV0KKwkJCQkJCQkJbmV3IFNJUkxhYmVsVmFsdWVJbXBsKDEwMCwgMCwgMCwgMCwgMCksCisJCQkJCQkJCS8vIE5bMiwyXQorCQkJCQkJCQluZXcgU0lSTGFiZWxWYWx1ZUltcGwoMTAwLCAwLCAwLCAwLCAwKQorCisJCQkJCQl9IH0sCisKKwkJCQkJCS8vIFN0ZXAgMQorCQkJCQkJeyB7CisJCQkJCQkvLyBOWzAsMF0KKwkJCQkJCQkJbmV3IFNJUkxhYmVsVmFsdWVJbXBsKDEwMCwgMCwgMCwgMCwgMCksCisJCQkJCQkJCS8vIE5bMCwxXQorCQkJCQkJCQluZXcgU0lSTGFiZWxWYWx1ZUltcGwoMTAwLCAwLCAwLCAwLCAwKSwKKwkJCQkJCQkJLy8gTlswLDJdCisJCQkJCQkJCW5ldyBTSVJMYWJlbFZhbHVlSW1wbCgxMDAsIDAsIDAsIDAsIDApCisKKwkJCQkJCX0sIHsKKworCQkJCQkJLy8gTlsxLDBdCisJCQkJCQkJCW5ldyBTSVJMYWJlbFZhbHVlSW1wbCgxMDAsIDAsIDAsIDAsIDApLAorCQkJCQkJCQkvLyBOWzEsMV0KKwkJCQkJCQkJbmV3IFNJUkxhYmVsVmFsdWVJbXBsKDEwMCwgMCwgMCwgMCwgMCksCisJCQkJCQkJCS8vIE5bMSwyXQorCQkJCQkJCQluZXcgU0lSTGFiZWxWYWx1ZUltcGwoMTAwLCAwLCAwLCAwLCAwKQorCisJCQkJCQl9LCB7CisKKwkJCQkJCS8vIE5bMiwwXQorCQkJCQkJCQluZXcgU0lSTGFiZWxWYWx1ZUltcGwoMTAwLCAwLCAwLCAwLCAwKSwKKwkJCQkJCQkJLy8gTlsyLDFdCisJCQkJCQkJCW5ldyBTSVJMYWJlbFZhbHVlSW1wbCgxMDAsIDAsIDAsIDAsIDApLAorCQkJCQkJCQkvLyBOWzIsMl0KKwkJCQkJCQkJbmV3IFNJUkxhYmVsVmFsdWVJbXBsKDEwMCwgMCwgMCwgMCwgMCkKKworCQkJCQkJfSB9LAorCisJCQkJCQkvLyBTdGVwIDIKKwkJCQkJCXsgeworCQkJCQkJLy8gTlswLDBdCisJCQkJCQkJCW5ldyBTSVJMYWJlbFZhbHVlSW1wbCgxMDAsIDAsIDAsIDAsIDApLAorCQkJCQkJCQkvLyBOWzAsMV0KKwkJCQkJCQkJbmV3IFNJUkxhYmVsVmFsdWVJbXBsKDEwMCwgMCwgMCwgMCwgMCksCisJCQkJCQkJCS8vIE5bMCwyXQorCQkJCQkJCQluZXcgU0lSTGFiZWxWYWx1ZUltcGwoMTAwLCAwLCAwLCAwLCAwKQorCisJCQkJCQl9LCB7CisKKwkJCQkJCS8vIE5bMSwwXQorCQkJCQkJCQluZXcgU0lSTGFiZWxWYWx1ZUltcGwoMTAwLCAwLCAwLCAwLCAwKSwKKwkJCQkJCQkJLy8gTlsxLDFdCisJCQkJCQkJCW5ldyBTSVJMYWJlbFZhbHVlSW1wbCgxMDAsIDAsIDAsIDAsIDApLAorCQkJCQkJCQkvLyBOWzEsMl0KKwkJCQkJCQkJbmV3IFNJUkxhYmVsVmFsdWVJbXBsKDEwMCwgMCwgMCwgMCwgMCkKKworCQkJCQkJfSwgeworCisJCQkJCQkvLyBOWzIsMF0KKwkJCQkJCQkJbmV3IFNJUkxhYmVsVmFsdWVJbXBsKDEwMCwgMCwgMCwgMCwgMCksCisJCQkJCQkJCS8vIE5bMiwxXQorCQkJCQkJCQluZXcgU0lSTGFiZWxWYWx1ZUltcGwoMTAwLCAwLCAwLCAwLCAwKSwKKwkJCQkJCQkJLy8gTlsyLDJdCisJCQkJCQkJCW5ldyBTSVJMYWJlbFZhbHVlSW1wbCgxMDAsIDAsIDAsIDAsIDApCisKKwkJCQkJCX0gfSB9IC8vIG5ldyBTSVJMYWJlbFZhbHVlCisKKwkJCQkpOyAvLyBwdXQoVEVTVF9TQ0VOQVJJTzN4M19LRVkpCisKKwkJLy8gRmlsbCBvdXQgdGhlIG1hcCB0aGF0IHNwZWNpZmllcyBob3cgbWFueSBsYWJlbHMgc2hvdWxkIGJlIHVwZGF0ZWQgYnkKKwkJLy8gYSBkaXNlYXNlIG1vZGVsIGZvciBlYWNoIHRlc3QuCisJCWZvciAoVGVzdFNwZWMgdGVzdFNwZWMgOiB0ZXN0U3BlY2lmaWNhdGlvbnMpIHsKKwkJCWV4cGVjdGVkTnVtYmVyT2ZMYWJlbHNUb1VwZGF0ZQorCQkJCQkucHV0KAorCQkJCQkJCXRlc3RTcGVjLnNjZW5hcmlvRGlzZWFzZUtleSwKKwkJCQkJCQluZXcgSW50ZWdlcigKKwkJCQkJCQkJCWNvbXB1dGVFeHBlY3RlZE51bWJlck9mTGFiZWxzKGV4cGVjdGVkRGlzZWFzZU1vZGVsU3RhdGVzCisJCQkJCQkJCQkJCS5nZXQodGVzdFNwZWMuc2NlbmFyaW9EaXNlYXNlS2V5KSkpKTsKKwkJfSAvLyBmb3IgZWFjaCB0ZXN0IHNwZWNpZmljYXRpb24KKworCX0gLy8gc3RhdGljCisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC50ZXN0cy5EaXNlYXNlTW9kZWxTY2VuYXJpb1Rlc3QjZ2V0RGlzZWFzZU1vZGVsc1RvVGVzdCgpCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIExpc3Q8Tm9kZURlY29yYXRvcj4gZ2V0RGlzZWFzZU1vZGVsc1RvVGVzdCgpIHsKKwkJZmluYWwgTGlzdDxOb2RlRGVjb3JhdG9yPiByZXRWYWx1ZSA9IG5ldyBBcnJheUxpc3Q8Tm9kZURlY29yYXRvcj4oKTsKKwkJcmV0VmFsdWUuYWRkKFN0b2NoYXN0aWNTSVJEaXNlYXNlTW9kZWxUZXN0LmNyZWF0ZUZpeHR1cmUoKSk7CisJCXJldHVybiByZXRWYWx1ZTsKKwl9IC8vIGdldERpc2Vhc2VNb2RlbHNUb1Rlc3QKKworCUBPdmVycmlkZQorCXByb3RlY3RlZCBpbnQgZ2V0TnVtYmVyT2ZTdGVwcyhmaW5hbCBTdHJpbmcgZGlzZWFzZVNjZW5hcmlvS2V5KSB7CisJCVNJUkxhYmVsVmFsdWVbXVtdW10gdGVtcCA9IGV4cGVjdGVkRGlzZWFzZU1vZGVsU3RhdGVzCisJCQkJLmdldChkaXNlYXNlU2NlbmFyaW9LZXkpOworCQlyZXR1cm4gdGVtcC5sZW5ndGg7CisJfSAvLyBnZXROdW1iZXJPZlN0ZXBzCisKKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgaW50IGdldEV4cGVjdGVkTnVtYmVyT2ZMYWJlbHNUb1VwZGF0ZSgKKwkJCWZpbmFsIFN0cmluZyBkaXNlYXNlU2NlbmFyaW9LZXkpIHsKKwkJSW50ZWdlciB0ZW1wID0gZXhwZWN0ZWROdW1iZXJPZkxhYmVsc1RvVXBkYXRlLmdldChkaXNlYXNlU2NlbmFyaW9LZXkpOworCQlyZXR1cm4gdGVtcC5pbnRWYWx1ZSgpOworCX0gLy8gZ2V0RXhwZWN0ZWROdW1iZXJPZkxhYmVsc1RvVXBkYXRlCisKKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgTGFiZWxWYWx1ZVtdW10gZ2V0RXhwZWN0ZWREaXNlYXNlTW9kZWxTdGF0ZSgKKwkJCWZpbmFsIFN0cmluZyBkaXNlYXNlU2NlbmFyaW9LZXksIGZpbmFsIGludCBzdGVwKSB7CisJCWZpbmFsIFNJUkxhYmVsVmFsdWVbXVtdW10gc2lyTGFiZWxWYWx1ZSA9IGV4cGVjdGVkRGlzZWFzZU1vZGVsU3RhdGVzCisJCQkJLmdldChkaXNlYXNlU2NlbmFyaW9LZXkpOworCQlyZXR1cm4gc2lyTGFiZWxWYWx1ZVtzdGVwXTsKKwl9IC8vIGdldEV4cGVjdGVkRGlzZWFzZU1vZGVsU3RhdGUKKworCXByb3RlY3RlZCBTdHJpbmcgZ2V0RGlzZWFzZVVSSVByZWZpeCgpIHsKKwkJcmV0dXJuIERJU0VBU0VfVVJJX1BSRUZJWDsKKwl9IC8vIGdldERpc2Vhc2VVUklQcmVmaXgKK30gLy8gU3RvY2hhc3RpY1NJUlNjZW5hcmlvVGVzdApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvc3RhbmRhcmQvdGVzdHMvU3RvY2hhc3RpY1NJU2NlbmFyaW9UZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9zdGFuZGFyZC90ZXN0cy9TdG9jaGFzdGljU0lTY2VuYXJpb1Rlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZTE5NGM3Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvc3RhbmRhcmQvdGVzdHMvU3RvY2hhc3RpY1NJU2NlbmFyaW9UZXN0LmphdmEKQEAgLTAsMCArMSwzMTggQEAKKy8vIFN0b2NoYXN0aWNTSVNjZW5hcmlvVGVzdC5qYXZhCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC50ZXN0czsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OworaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOworaW1wb3J0IGphdmEudXRpbC5MaXN0OworaW1wb3J0IGphdmEudXRpbC5NYXA7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguTGFiZWxWYWx1ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuTm9kZURlY29yYXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU0lMYWJlbFZhbHVlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5pbXBsLlNJTGFiZWxWYWx1ZUltcGw7CisKKy8qKgorICogVGhpcyBjbGFzcyBpcyBhIEpVbml0IHRlc3QgY2FzZSBmb3IgYSBTdG9jaGFzdGljIFNJIGRpc2Vhc2UgbW9kZWwgc2NlbmFyaW8KKyAqLworcHVibGljIGNsYXNzIFN0b2NoYXN0aWNTSVNjZW5hcmlvVGVzdCBleHRlbmRzIFNJRGlzZWFzZU1vZGVsU2NlbmFyaW9UZXN0IHsKKworCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBESVNFQVNFX1VSSV9QUkVGSVggPSAiU3RvY2hhc3RpY1NJIjsKKworCXByaXZhdGUgc3RhdGljIE1hcDxTdHJpbmcsIEludGVnZXI+IGV4cGVjdGVkTnVtYmVyT2ZMYWJlbHNUb1VwZGF0ZSA9IG5ldyBIYXNoTWFwPFN0cmluZywgSW50ZWdlcj4oKTsKKworCXByaXZhdGUgc3RhdGljIE1hcDxTdHJpbmcsIFNJTGFiZWxWYWx1ZVtdW11bXT4gZXhwZWN0ZWREaXNlYXNlTW9kZWxTdGF0ZXMgPSBuZXcgSGFzaE1hcDxTdHJpbmcsIFNJTGFiZWxWYWx1ZVtdW11bXT4oKTsKKworCXN0YXRpYyB7CisKKwkJLy8gMXgxCisJCS8vIFRoZXNlIGFyZSBjb3BpZWQgZnJvbSBEZXRlcm1pbmlzdGljU0lTY2VuYXJpb1Rlc3QgYW5kIHVzZWQgYmVjYXVzZQorCQkvLyBmb3IgdGVzdCBwdXJwb3NlcyB3ZSBhcmUgY2hlY2tpbmcgd2l0aCBub2lzZSA9IDAKKwkJLy8gc2FtZSB0aGluZyBhcyB0aGUgZGV0ZXJtaW5pc3RpYworLy8JCSAxeDEKKwkJZXhwZWN0ZWREaXNlYXNlTW9kZWxTdGF0ZXMucHV0KFRFU1RfU0NFTkFSSU8xeDFfS0VZLAorCQkJCW5ldyBTSUxhYmVsVmFsdWVbXVtdW10geworCQkJCS8vIFN0ZXAgMAorCQkJCQkJeyB7CisJCQkJCQkvLyBOWzAsMF0KKwkJCQkJCW5ldyBTSUxhYmVsVmFsdWVJbXBsKDk4LjkxLCAwLjk5ICwgMC4wLAkwLjEpIH0gfSwKKwkJCQkJCQkJCisJCQkJCQkvLyBTdGVwIDEKKwkJCQkJCXsgeworCQkJCQkJLy8gTlswLDBdCisJCQkJCQluZXcgU0lMYWJlbFZhbHVlSW1wbCg5OC44MiAsIDAuOTggLCAwLjAgLCAwLjIpIH0gfSB9IAorCQkJCS8vIFNJTGFiZWxWYWx1ZQorCisJCQkJKTsgLy8gcHV0KFRFU1RfU0NFTkFSSU8xeDFfS0VZKQorCisKKwkJLy8gMXgyCisJCWV4cGVjdGVkRGlzZWFzZU1vZGVsU3RhdGVzLnB1dChURVNUX1NDRU5BUklPMXgyX0tFWSwKKwkJCQluZXcgU0lMYWJlbFZhbHVlW11bXVtdIHsKKwkJCQkvLyBTdGVwIDAKKwkJCQkJCXsgeworCQkJCQkJLy8gTlswLDBdCisJCQkJCQkJCW5ldyBTSUxhYmVsVmFsdWVJbXBsKDEwMCwgMCwgMCwgMCksCisJCQkJCQkJCS8vIE5bMCwxXQorCQkJCQkJCQluZXcgU0lMYWJlbFZhbHVlSW1wbCgxMDAsIDAsIDAsIDApIH0gfSwKKworCQkJCQkJLy8gU3RlcCAxCisJCQkJCQl7IHsKKwkJCQkJCS8vIE5bMCwwXQorCQkJCQkJCQluZXcgU0lMYWJlbFZhbHVlSW1wbCgxMDAsIDAsIDAsIDApLAorCQkJCQkJCQkvLyBOWzAsMV0KKwkJCQkJCQkJbmV3IFNJTGFiZWxWYWx1ZUltcGwoMTAwLCAwLCAwLCAwKSB9IH0sCisJCQkJCQkvLyBTdGVwIDIKKwkJCQkJCXsgeworCQkJCQkJLy8gTlswLDBdCisJCQkJCQkJCW5ldyBTSUxhYmVsVmFsdWVJbXBsKDEwMCwgMCwgMCwgMCksCisJCQkJCQkJCS8vIE5bMCwxXQorCQkJCQkJCQluZXcgU0lMYWJlbFZhbHVlSW1wbCgxMDAsIDAsIDAsIDApIH0gfSB9IC8vIG5ldworCQkJCS8vIFNJTGFiZWxWYWx1ZQorCQkJCSk7IC8vIHB1dChURVNUX1NDRU5BUklPMXgyX0tFWSkKKworCQkvLyAxeDMKKwkJZXhwZWN0ZWREaXNlYXNlTW9kZWxTdGF0ZXMucHV0KFRFU1RfU0NFTkFSSU8xeDNfS0VZLAorCQkJCW5ldyBTSUxhYmVsVmFsdWVbXVtdW10geworCQkJCS8vIFN0ZXAgMAorCQkJCQkJeyB7CisKKwkJCQkJCS8vIE5bMCwwXQorCQkJCQkJCQluZXcgU0lMYWJlbFZhbHVlSW1wbCgxMDAsIDAsIDAsIDApLAorCQkJCQkJCQkvLyBOWzAsMV0KKwkJCQkJCQkJbmV3IFNJTGFiZWxWYWx1ZUltcGwoMTAwLCAwLCAwLCAwKSwKKwkJCQkJCQkJLy8gTlswLDJdCisJCQkJCQkJCW5ldyBTSUxhYmVsVmFsdWVJbXBsKDEwMCwgMCwgMCwgMCkKKworCQkJCQkJfSB9LAorCisJCQkJCQkvLyBTdGVwIDEKKwkJCQkJCXsgeworCQkJCQkJLy8gTlswLDBdCisJCQkJCQkJCW5ldyBTSUxhYmVsVmFsdWVJbXBsKDEwMCwgMCwgMCwgMCksCisJCQkJCQkJCS8vIE5bMCwxXQorCQkJCQkJCQluZXcgU0lMYWJlbFZhbHVlSW1wbCgxMDAsIDAsIDAsIDApLAorCQkJCQkJCQkvLyBOWzAsMl0KKwkJCQkJCQkJbmV3IFNJTGFiZWxWYWx1ZUltcGwoMTAwLCAwLCAwLCAwKQorCisJCQkJCQl9IH0sCisKKwkJCQkJCS8vIFN0ZXAgMgorCQkJCQkJeyB7CisJCQkJCQkvLyBOWzAsMF0KKwkJCQkJCQkJbmV3IFNJTGFiZWxWYWx1ZUltcGwoMTAwLCAwLCAwLCAgMCksCisJCQkJCQkJCS8vIE5bMCwxXQorCQkJCQkJCQluZXcgU0lMYWJlbFZhbHVlSW1wbCgxMDAsIDAsIDAsICAwKSwKKwkJCQkJCQkJLy8gTlswLDJdCisJCQkJCQkJCW5ldyBTSUxhYmVsVmFsdWVJbXBsKDEwMCwgMCwgMCwgIDApCisKKwkJCQkJCX0gfSB9IC8vIG5ldyBTSUxhYmVsVmFsdWUKKworCQkJCSk7IC8vIHB1dChURVNUX1NDRU5BUklPMXgzX0tFWSkKKworCQkvLyAyeDIKKwkJZXhwZWN0ZWREaXNlYXNlTW9kZWxTdGF0ZXMucHV0KFRFU1RfU0NFTkFSSU8yeDJfS0VZLAorCQkJCW5ldyBTSUxhYmVsVmFsdWVbXVtdW10geworCQkJCS8vIFN0ZXAgMAorCQkJCQkJeyB7CisKKwkJCQkJCS8vIE5bMCwwXQorCQkJCQkJCQluZXcgU0lMYWJlbFZhbHVlSW1wbCgxMDAsIDAsIDAsIDApLAorCQkJCQkJCQkvLyBOWzAsMV0KKwkJCQkJCQkJbmV3IFNJTGFiZWxWYWx1ZUltcGwoMTAwLCAwLCAwLCAwKQorCisJCQkJCQl9LCB7CisKKwkJCQkJCS8vIE5bMSwwXQorCQkJCQkJCQluZXcgU0lMYWJlbFZhbHVlSW1wbCgxMDAsIDAsIDAsIDApLAorCQkJCQkJCQkvLyBOWzEsMV0KKwkJCQkJCQkJbmV3IFNJTGFiZWxWYWx1ZUltcGwoMTAwLCAwLCAwLCAwKQorCisJCQkJCQl9IH0sCisKKwkJCQkJCS8vIFN0ZXAgMQorCQkJCQkJeyB7CisJCQkJCQkvLyBOWzAsMF0KKwkJCQkJCQkJbmV3IFNJTGFiZWxWYWx1ZUltcGwoMTAwLCAwLCAwLCAwKSwKKwkJCQkJCQkJLy8gTlswLDFdCisJCQkJCQkJCW5ldyBTSUxhYmVsVmFsdWVJbXBsKDEwMCwgMCwgMCwgMCkKKworCQkJCQkJfSwgeworCisJCQkJCQkvLyBOWzEsMF0KKwkJCQkJCQkJbmV3IFNJTGFiZWxWYWx1ZUltcGwoMTAwLCAwLCAwLCAwKSwKKwkJCQkJCQkJLy8gTlsxLDFdCisJCQkJCQkJCW5ldyBTSUxhYmVsVmFsdWVJbXBsKDEwMCwgMCwgMCwgMCkKKworCQkJCQkJfSB9LAorCisJCQkJCQkvLyBTdGVwIDIKKwkJCQkJCXsgeworCQkJCQkJLy8gTlswLDBdCisJCQkJCQkJCW5ldyBTSUxhYmVsVmFsdWVJbXBsKDEwMCwgMCwgMCwgMCksCisJCQkJCQkJCS8vIE5bMCwxXQorCQkJCQkJCQluZXcgU0lMYWJlbFZhbHVlSW1wbCgxMDAsIDAsIDAsIDApCisKKwkJCQkJCX0sIHsKKworCQkJCQkJLy8gTlsxLDBdCisJCQkJCQkJCW5ldyBTSUxhYmVsVmFsdWVJbXBsKDEwMCwgMCwgMCwgMCksCisJCQkJCQkJCS8vIE5bMSwxXQorCQkJCQkJCQluZXcgU0lMYWJlbFZhbHVlSW1wbCgxMDAsIDAsIDAsIDApCisKKwkJCQkJCX0gfSB9IC8vIG5ldyBTSUxhYmVsVmFsdWUKKworCQkJCSk7IC8vIHB1dChURVNUX1NDRU5BUklPMngyX0tFWSkKKworCQkvLyAzeDMKKwkJZXhwZWN0ZWREaXNlYXNlTW9kZWxTdGF0ZXMucHV0KFRFU1RfU0NFTkFSSU8zeDNfS0VZLAorCQkJCW5ldyBTSUxhYmVsVmFsdWVbXVtdW10geworCQkJCS8vIFN0ZXAgMAorCQkJCQkJeyB7CisKKwkJCQkJCS8vIE5bMCwwXQorCQkJCQkJCQluZXcgU0lMYWJlbFZhbHVlSW1wbCgxMDAsIDAsIDAsIDApLAorCQkJCQkJCQkvLyBOWzAsMV0KKwkJCQkJCQkJbmV3IFNJTGFiZWxWYWx1ZUltcGwoMTAwLCAwLCAwLCAwKSwKKwkJCQkJCQkJLy8gTlswLDJdCisJCQkJCQkJCW5ldyBTSUxhYmVsVmFsdWVJbXBsKDEwMCwgMCwgMCwgMCkKKworCQkJCQkJfSwgeworCisJCQkJCQkvLyBOWzEsMF0KKwkJCQkJCQkJbmV3IFNJTGFiZWxWYWx1ZUltcGwoMTAwLCAwLCAwLCAwKSwKKwkJCQkJCQkJLy8gTlsxLDFdCisJCQkJCQkJCW5ldyBTSUxhYmVsVmFsdWVJbXBsKDEwMCwgMCwgMCwgMCksCisJCQkJCQkJCS8vIE5bMSwyXQorCQkJCQkJCQluZXcgU0lMYWJlbFZhbHVlSW1wbCgxMDAsIDAsIDAsIDApCisKKwkJCQkJCX0sIHsKKworCQkJCQkJLy8gTlsyLDBdCisJCQkJCQkJCW5ldyBTSUxhYmVsVmFsdWVJbXBsKDEwMCwgMCwgMCwgMCksCisJCQkJCQkJCS8vIE5bMiwxXQorCQkJCQkJCQluZXcgU0lMYWJlbFZhbHVlSW1wbCgxMDAsIDAsIDAsIDApLAorCQkJCQkJCQkvLyBOWzIsMl0KKwkJCQkJCQkJbmV3IFNJTGFiZWxWYWx1ZUltcGwoMTAwLCAwLCAwLCAwKQorCisJCQkJCQl9IH0sCisKKwkJCQkJCS8vIFN0ZXAgMQorCQkJCQkJeyB7CisJCQkJCQkvLyBOWzAsMF0KKwkJCQkJCQkJbmV3IFNJTGFiZWxWYWx1ZUltcGwoMTAwLCAwLCAwLCAwKSwKKwkJCQkJCQkJLy8gTlswLDFdCisJCQkJCQkJCW5ldyBTSUxhYmVsVmFsdWVJbXBsKDEwMCwgMCwgMCwgMCksCisJCQkJCQkJCS8vIE5bMCwyXQorCQkJCQkJCQluZXcgU0lMYWJlbFZhbHVlSW1wbCgxMDAsIDAsIDAsIDApCisKKwkJCQkJCX0sIHsKKworCQkJCQkJLy8gTlsxLDBdCisJCQkJCQkJCW5ldyBTSUxhYmVsVmFsdWVJbXBsKDEwMCwgMCwgMCwgMCksCisJCQkJCQkJCS8vIE5bMSwxXQorCQkJCQkJCQluZXcgU0lMYWJlbFZhbHVlSW1wbCgxMDAsIDAsIDAsIDApLAorCQkJCQkJCQkvLyBOWzEsMl0KKwkJCQkJCQkJbmV3IFNJTGFiZWxWYWx1ZUltcGwoMTAwLCAwLCAwLCAwKQorCisJCQkJCQl9LCB7CisKKwkJCQkJCS8vIE5bMiwwXQorCQkJCQkJCQluZXcgU0lMYWJlbFZhbHVlSW1wbCgxMDAsIDAsIDAsIDApLAorCQkJCQkJCQkvLyBOWzIsMV0KKwkJCQkJCQkJbmV3IFNJTGFiZWxWYWx1ZUltcGwoMTAwLCAwLCAwLCAwKSwKKwkJCQkJCQkJLy8gTlsyLDJdCisJCQkJCQkJCW5ldyBTSUxhYmVsVmFsdWVJbXBsKDEwMCwgMCwgMCwgMCkKKworCQkJCQkJfSB9LAorCisJCQkJCQkvLyBTdGVwIDIKKwkJCQkJCXsgeworCQkJCQkJLy8gTlswLDBdCisJCQkJCQkJCW5ldyBTSUxhYmVsVmFsdWVJbXBsKDEwMCwgMCwgMCwgMCksCisJCQkJCQkJCS8vIE5bMCwxXQorCQkJCQkJCQluZXcgU0lMYWJlbFZhbHVlSW1wbCgxMDAsIDAsIDAsIDApLAorCQkJCQkJCQkvLyBOWzAsMl0KKwkJCQkJCQkJbmV3IFNJTGFiZWxWYWx1ZUltcGwoMTAwLCAwLCAwLCAgMCkKKworCQkJCQkJfSwgeworCisJCQkJCQkvLyBOWzEsMF0KKwkJCQkJCQkJbmV3IFNJTGFiZWxWYWx1ZUltcGwoMTAwLCAwLCAwLCAgMCksCisJCQkJCQkJCS8vIE5bMSwxXQorCQkJCQkJCQluZXcgU0lMYWJlbFZhbHVlSW1wbCgxMDAsIDAsIDAsICAwKSwKKwkJCQkJCQkJLy8gTlsxLDJdCisJCQkJCQkJCW5ldyBTSUxhYmVsVmFsdWVJbXBsKDEwMCwgMCwgMCwgIDApCisKKwkJCQkJCX0sIHsKKworCQkJCQkJLy8gTlsyLDBdCisJCQkJCQkJCW5ldyBTSUxhYmVsVmFsdWVJbXBsKDEwMCwgMCwgMCwgIDApLAorCQkJCQkJCQkvLyBOWzIsMV0KKwkJCQkJCQkJbmV3IFNJTGFiZWxWYWx1ZUltcGwoMTAwLCAwLCAwLCAgMCksCisJCQkJCQkJCS8vIE5bMiwyXQorCQkJCQkJCQluZXcgU0lMYWJlbFZhbHVlSW1wbCgxMDAsIDAsIDAsICAwKQorCisJCQkJCQl9IH0gfSAvLyBuZXcgU0lMYWJlbFZhbHVlCisKKwkJCQkpOyAvLyBwdXQoVEVTVF9TQ0VOQVJJTzN4M19LRVkpCisKKwkJLy8gRmlsbCBvdXQgdGhlIG1hcCB0aGF0IHNwZWNpZmllcyBob3cgbWFueSBsYWJlbHMgc2hvdWxkIGJlIHVwZGF0ZWQgYnkKKwkJLy8gYSBkaXNlYXNlIG1vZGVsIGZvciBlYWNoIHRlc3QuCisJCWZvciAoVGVzdFNwZWMgdGVzdFNwZWMgOiB0ZXN0U3BlY2lmaWNhdGlvbnMpIHsKKwkJCWV4cGVjdGVkTnVtYmVyT2ZMYWJlbHNUb1VwZGF0ZQorCQkJCQkucHV0KAorCQkJCQkJCXRlc3RTcGVjLnNjZW5hcmlvRGlzZWFzZUtleSwKKwkJCQkJCQluZXcgSW50ZWdlcigKKwkJCQkJCQkJCWNvbXB1dGVFeHBlY3RlZE51bWJlck9mTGFiZWxzKGV4cGVjdGVkRGlzZWFzZU1vZGVsU3RhdGVzCisJCQkJCQkJCQkJCS5nZXQodGVzdFNwZWMuc2NlbmFyaW9EaXNlYXNlS2V5KSkpKTsKKwkJfSAvLyBmb3IgZWFjaCB0ZXN0IHNwZWNpZmljYXRpb24KKworCX0gLy8gc3RhdGljCisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC50ZXN0cy5EaXNlYXNlTW9kZWxTY2VuYXJpb1Rlc3QjZ2V0RGlzZWFzZU1vZGVsc1RvVGVzdCgpCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIExpc3Q8Tm9kZURlY29yYXRvcj4gZ2V0RGlzZWFzZU1vZGVsc1RvVGVzdCgpIHsKKwkJZmluYWwgTGlzdDxOb2RlRGVjb3JhdG9yPiByZXRWYWx1ZSA9IG5ldyBBcnJheUxpc3Q8Tm9kZURlY29yYXRvcj4oKTsKKwkJcmV0VmFsdWUuYWRkKFN0b2NoYXN0aWNTSURpc2Vhc2VNb2RlbFRlc3QuY3JlYXRlRml4dHVyZSgpKTsKKwkJcmV0dXJuIHJldFZhbHVlOworCX0gLy8gZ2V0RGlzZWFzZU1vZGVsc1RvVGVzdAorCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIGludCBnZXROdW1iZXJPZlN0ZXBzKGZpbmFsIFN0cmluZyBkaXNlYXNlU2NlbmFyaW9LZXkpIHsKKwkJU0lMYWJlbFZhbHVlW11bXVtdIHRlbXAgPSBleHBlY3RlZERpc2Vhc2VNb2RlbFN0YXRlcworCQkJCS5nZXQoZGlzZWFzZVNjZW5hcmlvS2V5KTsKKwkJcmV0dXJuIHRlbXAubGVuZ3RoOworCX0gLy8gZ2V0TnVtYmVyT2ZTdGVwcworCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIGludCBnZXRFeHBlY3RlZE51bWJlck9mTGFiZWxzVG9VcGRhdGUoCisJCQlmaW5hbCBTdHJpbmcgZGlzZWFzZVNjZW5hcmlvS2V5KSB7CisJCUludGVnZXIgdGVtcCA9IGV4cGVjdGVkTnVtYmVyT2ZMYWJlbHNUb1VwZGF0ZS5nZXQoZGlzZWFzZVNjZW5hcmlvS2V5KTsKKwkJcmV0dXJuIHRlbXAuaW50VmFsdWUoKTsKKwl9IC8vIGdldEV4cGVjdGVkTnVtYmVyT2ZMYWJlbHNUb1VwZGF0ZQorCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIExhYmVsVmFsdWVbXVtdIGdldEV4cGVjdGVkRGlzZWFzZU1vZGVsU3RhdGUoCisJCQlmaW5hbCBTdHJpbmcgZGlzZWFzZVNjZW5hcmlvS2V5LCBmaW5hbCBpbnQgc3RlcCkgeworCQlmaW5hbCBTSUxhYmVsVmFsdWVbXVtdW10gc2lMYWJlbFZhbHVlID0gZXhwZWN0ZWREaXNlYXNlTW9kZWxTdGF0ZXMKKwkJCQkuZ2V0KGRpc2Vhc2VTY2VuYXJpb0tleSk7CisJCXJldHVybiBzaUxhYmVsVmFsdWVbc3RlcF07CisJfSAvLyBnZXRFeHBlY3RlZERpc2Vhc2VNb2RlbFN0YXRlCisKKwlwcm90ZWN0ZWQgU3RyaW5nIGdldERpc2Vhc2VVUklQcmVmaXgoKSB7CisJCXJldHVybiBESVNFQVNFX1VSSV9QUkVGSVg7CisJfSAvLyBnZXREaXNlYXNlVVJJUHJlZml4Cit9IC8vIFN0b2NoYXN0aWNTSVNjZW5hcmlvVGVzdApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3Rlc3RzL2Rpc2Vhc2Vtb2RlbHMvQWN0aXZhdG9yLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdGVzdHMvZGlzZWFzZW1vZGVscy9BY3RpdmF0b3IuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43OGFmOWYyCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3Rlc3RzL2Rpc2Vhc2Vtb2RlbHMvQWN0aXZhdG9yLmphdmEKQEAgLTAsMCArMSw4OCBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRpc2Vhc2Vtb2RlbHM7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDkgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBsdWdpbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU3RhdHVzOworaW1wb3J0IG9yZy5vc2dpLmZyYW1ld29yay5CdW5kbGVDb250ZXh0OworCisvKioKKyAqIFRoZSBhY3RpdmF0b3IgY2xhc3MgY29udHJvbHMgdGhlIHBsdWctaW4gbGlmZSBjeWNsZQorICovCitwdWJsaWMgY2xhc3MgQWN0aXZhdG9yIGV4dGVuZHMgUGx1Z2luIHsKKworCS8vIFRoZSBwbHVnLWluIElECisJcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUExVR0lOX0lEID0gIm9yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGlzZWFzZW1vZGVscyI7CisKKwkvLyBUaGUgc2hhcmVkIGluc3RhbmNlCisJcHJpdmF0ZSBzdGF0aWMgQWN0aXZhdG9yIHBsdWdpbjsKKwkKKwkvKioKKwkgKiBUaGUgY29uc3RydWN0b3IKKwkgKi8KKwlwdWJsaWMgQWN0aXZhdG9yKCkgeworCQlwbHVnaW4gPSB0aGlzOworCX0KKworCS8qCisJICogKG5vbi1KYXZhZG9jKQorCSAqIEBzZWUgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBsdWdpbnMjc3RhcnQob3JnLm9zZ2kuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHQpCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgc3RhcnQoQnVuZGxlQ29udGV4dCBjb250ZXh0KSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJc3VwZXIuc3RhcnQoY29udGV4dCk7CisJfQorCisJLyoKKwkgKiAobm9uLUphdmFkb2MpCisJICogQHNlZSBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGx1Z2luI3N0b3Aob3JnLm9zZ2kuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHQpCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgc3RvcChCdW5kbGVDb250ZXh0IGNvbnRleHQpIHRocm93cyBFeGNlcHRpb24geworCQlwbHVnaW4gPSBudWxsOworCQlzdXBlci5zdG9wKGNvbnRleHQpOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIHNoYXJlZCBpbnN0YW5jZQorCSAqCisJICogQHJldHVybiB0aGUgc2hhcmVkIGluc3RhbmNlCisJICovCisJcHVibGljIHN0YXRpYyBBY3RpdmF0b3IgZ2V0RGVmYXVsdCgpIHsKKwkJcmV0dXJuIHBsdWdpbjsKKwl9CisJCisJLyoqCisJICogTG9nIGluZm9ybWF0aW9uIHRvIHRoZSBJTG9nIGZvciB0aGlzIHBsdWdpbgorCSAqIFRoZSBtZXRob2QgaXMgb3ZlcmxvYWRlZCB0byBhbGxvdyBmb3IgbG9nSW5mb3JtYXRpb24gd2l0aG91dCBhbiBlcnJvciAKKwkgKiBtZXRob2Qgc2V0cyB0aGUgZXJyb3IgdG8gbnVsbC4gVGhpcyBzaG91bGQgYmUgdXNlZCBpbnN0ZWFkIG9mIFN5c3RlbS5vdXQucHJpbnRsbgorCSAqIHRocm91Z2hvdXQgdGhlIGNvZGUuCisJICogQHBhcmFtIG1lc3NhZ2UKKwkgKiAgICAgICAgICAgIHRoZSBsb2NhbGl6ZWQgaW5mb3JtYXRpb24gbWVzc2FnZSB0ZXh0CisJICoKKwkgKi8KKwlwdWJsaWMgc3RhdGljIHZvaWQgbG9nSW5mb3JtYXRpb24oU3RyaW5nIG1lc3NhZ2UpIHsKKwkJLy8gRG8gd2UgaGF2ZSBhIHBsdWdpbj8KKwkJaWYgKHBsdWdpbiAhPSBudWxsKSB7CisJCQkvLyBZZXMKKwkJCXBsdWdpbi5nZXRMb2coKS5sb2coCisJCQkJCW5ldyBTdGF0dXMoSVN0YXR1cy5JTkZPLCBwbHVnaW4uZ2V0QnVuZGxlKCkuZ2V0U3ltYm9saWNOYW1lKCksCisJCQkJCQkJMCwgbWVzc2FnZSwgbnVsbCkpOworCQl9CisJCWVsc2UgeworCQkJLy8gTm8KKwkJCVN5c3RlbS5vdXQucHJpbnRsbihtZXNzYWdlKTsKKwkJfQorCX0gLy8gbG9nSW5mb3JtYXRpb24KKworfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3Rlc3RzL2Rpc2Vhc2Vtb2RlbHMvc2NlbmFyaW9zL1dvcmxkU2NlbmFyaW9DcmVhdG9yLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdGVzdHMvZGlzZWFzZW1vZGVscy9zY2VuYXJpb3MvV29ybGRTY2VuYXJpb0NyZWF0b3IuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMGY0YzM3Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3Rlc3RzL2Rpc2Vhc2Vtb2RlbHMvc2NlbmFyaW9zL1dvcmxkU2NlbmFyaW9DcmVhdG9yLmphdmEKQEAgLTAsMCArMSw0MzYgQEAKKy8vIFdvcmxkU2NlbmFyaW9DcmVhdG9yLmphdmEKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kaXNlYXNlbW9kZWxzLnNjZW5hcmlvczsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqYXZhLmlvLkJ1ZmZlcmVkV3JpdGVyOworaW1wb3J0IGphdmEuaW8uRmlsZTsKK2ltcG9ydCBqYXZhLmlvLkZpbGVXcml0ZXI7CitpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLnRleHQuTWVzc2FnZUZvcm1hdDsKK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OworaW1wb3J0IGphdmEudXRpbC5DYWxlbmRhcjsKK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKK2ltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKK2ltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CitpbXBvcnQgamF2YS51dGlsLk1hcDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5VUkk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnJlc291cmNlLlJlc291cmNlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5yZXNvdXJjZS5SZXNvdXJjZVNldDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUucmVzb3VyY2UuaW1wbC5SZXNvdXJjZVNldEltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnV0aWwuRWNvcmVVdGlsOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS54bWkuaW1wbC5YTUlSZXNvdXJjZUZhY3RvcnlJbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5Db25zdGFudHM7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5EdWJsaW5Db3JlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uSWRlbnRpZmlhYmxlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5HcmFwaDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguTm9kZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuRGVjb3JhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5Nb2RlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuTW9kZWxQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5Ob2RlRGVjb3JhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zY2VuYXJpby5TY2VuYXJpbzsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2NlbmFyaW8uU2NlbmFyaW9GYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zY2VuYXJpby5TY2VuYXJpb1BhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNlcXVlbmNlci50ZXN0cy5TZXF1ZW50aWFsU2VxdWVuY2VyVGVzdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLm5vZGVzLk5vZGVzUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuSW5mZWN0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkRGlzZWFzZU1vZGVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC50ZXN0cy5EZXRlcm1pbmlzdGljU0lEaXNlYXNlTW9kZWxUZXN0OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC50ZXN0cy5TSURpc2Vhc2VNb2RlbFNjZW5hcmlvVGVzdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwuQ291bnRyeURpcmVjdG9yeVV0aWxpdGllcy5Db3VudHJ5Q29kZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwuQ291bnRyeUdyYXBoQ3JlYXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwuQ291bnRyeU1vZGVsQ3JlYXRvcjsKKworLyoqCisgKiBUaGlzIGNsYXNzIGNyZWF0ZXMgZGlzZWFzZSBtb2RlbCBzY2VuYXJpb3MuCisgKi8KK3B1YmxpYyBjbGFzcyBXb3JsZFNjZW5hcmlvQ3JlYXRvciB7CisKKwkvKioKKwkgKiBUaGUgbmFtZSBvZiB0aGUgZGlyZWN0b3J5IHRoYXQgY29udGFpbnMgIm1vZGVsIiBzdWItZGlyZWN0b3JpZXMKKwkgKi8KKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgU0NFTkFSSU9fRElSID0gInNjZW5hcmlvcyI7CisKKwkvKioKKwkgKiBUaGlzIGlzIHRoZSBmb3JtYXQgc3RyaW5nIGZvciB0aGUgaWRlbnRpZmllciBvZiBhIGNvdW50cnkgZ3JhcGggb3IgbW9kZWwKKwkgKiBmaWxlCisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgSURFTlRJRklFUl9GT1JNQVQgPSAiezB9LyIgKyBTQ0VOQVJJT19ESVIKKwkJCSsgIi97MX0vezJ9IjsKKworCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBST09UX09VVFBVVF9ESVIgPSAidGVtcCI7CisKKwkvKioKKwkgKiBUaGlzIGlzIHRoZSBwYXRoIHRvIHRoZSBjb3VudHJ5IG1vZGVscyBkaXJlY3RvcnkKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBXT1JMRF9TQ0VOQVJJT19QQVRIID0gUk9PVF9PVVRQVVRfRElSCisJCQkrIEZpbGUuc2VwYXJhdG9yICsgU0NFTkFSSU9fRElSOworCisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFNDRU5BUklPID0gIlNjZW5hcmlvIjsKKworCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBJRF9ESVNFQVNFX1RFU1RfUExVR0lOID0gQ29uc3RhbnRzLklEX1JPT1QKKwkJCSsgIi5kaXNlYXNlbW9kZWxzLnRlc3RzIjsKKworCS8qKgorCSAqIFRoaXMgaXMgdGhlIHByZWZpeCBvZiB0aGUgcGxhdGZvcm0gVVJJIGZvciBnZW9ncmFwaHkgZ3JhcGhzIGFuZCBtb2RlbHMKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBESVNFQVNFX1RFU1RfRklMRV9VUklfUFJFRklYID0gInBsYXRmb3JtOi9wbHVnaW4vIgorCQkJKyBJRF9ESVNFQVNFX1RFU1RfUExVR0lOICsgIi9kYXRhIjsKKworCS8qKgorCSAqIFRoZSBpZGVudGlmaWVyIHVzZWQgaW4gd29ybGQgbW9kZWwgcmVjb3JkIGluc3RhbmNlcy4gSXQgaXMgbGlrZSBhCisJICoge0BsaW5rIENvdW50cnlDb2RlfSAsIGJ1dCBmb3IgdGhlIGVudGlyZSB3b3JsZC4KKwkgKi8KKwkvLyBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgU0NFTkFSSU9fSUQgPSAiU0NFTkFSSU8iOworCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBJRF9TQ0VOQVJJT19DQVRFR09SWSA9ICJmb28iOworCisJLyoqCisJICogVGhpcyBpcyB0aGUgaWQgb2YgdGhlIGV4dGVuc2lvbiBwb2ludCBleHRlbmRlZCBieSAid29ybGQiIG1vZGVscyB0aGF0IGFyZQorCSAqIHBsdWdnZWQgaW50byBTVEVNCisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgSURfU0NFTkFSSU9fV09STERfQ0FURUdPUlkgPSBJRF9TQ0VOQVJJT19DQVRFR09SWQorCQkJKyAiLiIgKyBTQ0VOQVJJTy50b0xvd2VyQ2FzZSgpOworCisJcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgeworCisJCWZpbmFsIFdvcmxkU2NlbmFyaW9DcmVhdG9yIHdzYyA9IG5ldyBXb3JsZFNjZW5hcmlvQ3JlYXRvcigpOworCisJCWZpbmFsIExpc3Q8TW9kZWw+IHdvcmxkTW9kZWxzID0gd3NjLmdldFdvcmxkTW9kZWxzKCk7CisJCWZpbmFsIExpc3Q8U3RhbmRhcmREaXNlYXNlTW9kZWw+IGRpc2Vhc2VNb2RlbHMgPSB3c2MuZ2V0RGlzZWFzZU1vZGVscygpOworCisJCWZpbmFsIExpc3Q8U2NlbmFyaW9SZWNvcmQ+IHdvcmxkU2NlbmFyaW9SZWNvcmRzID0gd3NjCisJCQkJLmNyZWF0ZVdvcmxkRGlzZWFzZU1vZGVsU2NlbmFyaW9zKHdvcmxkTW9kZWxzLCBkaXNlYXNlTW9kZWxzKTsKKwkJdHJ5IHsKKwkJCXdzYy5zZXJpYWxpemVTY2VuYXJpb01vZGVscyh3b3JsZFNjZW5hcmlvUmVjb3JkcywKKwkJCQkJV09STERfU0NFTkFSSU9fUEFUSCk7CisKKwkJCWZpbmFsIEZpbGUgd29ybGRFeHRlbnNpb25GaWxlID0gbmV3IEZpbGUoV09STERfU0NFTkFSSU9fUEFUSAorCQkJCQkrIENvdW50cnlHcmFwaENyZWF0b3IuR1JBUEhfRVhURU5TSU9OX1BPSU5UX0ZJTEVfTkFNRSk7CisJCQlmaW5hbCBGaWxlIHdvcmxkTW9kZWxQbHVnaW5Qcm9wZXJ0aWVzRmlsZSA9IG5ldyBGaWxlKAorCQkJCQlXT1JMRF9TQ0VOQVJJT19QQVRICisJCQkJCQkJKyBDb3VudHJ5R3JhcGhDcmVhdG9yLkdSQVBIX1BMVUdJTl9QUk9QRVJUSUVTX1BPSU5UX0ZJTEVfTkFNRSk7CisKKwkJCWZpbmFsIEJ1ZmZlcmVkV3JpdGVyIHdvcmxkTW9kZWxPdXQgPSBuZXcgQnVmZmVyZWRXcml0ZXIoCisJCQkJCW5ldyBGaWxlV3JpdGVyKHdvcmxkRXh0ZW5zaW9uRmlsZSkpOworCisJCQlmaW5hbCBCdWZmZXJlZFdyaXRlciBwbHVnaW5PdXQgPSBuZXcgQnVmZmVyZWRXcml0ZXIobmV3IEZpbGVXcml0ZXIoCisJCQkJCXdvcmxkTW9kZWxQbHVnaW5Qcm9wZXJ0aWVzRmlsZSkpOworCQkJLy8gQ3JlYXRlIGEgc25pcHBldCBvZiB4bWwgdGhhdCBjYW4gYmUgaW5jbHVkZWQgaW4gYSBwbHVnaW4ueG1sIGZpbGUKKwkJCS8vIHRvIHBsdWcgaW50byBTVEVNIHRoZSBzY2VuYXJpb3Mgd2UganVzdCBzZXJpYWxpemVkLgorCQkJd3NjLmdlbmVyYXRlTW9kZWxFeHRlbnNpb25Qb2ludFhNTCh3b3JsZFNjZW5hcmlvUmVjb3JkcywKKwkJCQkJd29ybGRNb2RlbE91dCwgcGx1Z2luT3V0KTsKKwkJfSAvLyB0cnkKKwkJY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKKwkJCWUucHJpbnRTdGFja1RyYWNlKCk7CisJCX0KKworCX0gLy8gbWFpbgorCisJLyoqCisJICogQHJldHVybiBhIGxpc3Qgb2YgdGhlIGRpc2Vhc2UgbW9kZWxzIGZvciB3aGljaCBzY2VuYXJpb3Mgd2lsbCBiZSBjcmVhdGVkLgorCSAqLworCXByaXZhdGUgTGlzdDxTdGFuZGFyZERpc2Vhc2VNb2RlbD4gZ2V0RGlzZWFzZU1vZGVscygpIHsKKwkJZmluYWwgTGlzdDxTdGFuZGFyZERpc2Vhc2VNb2RlbD4gcmV0VmFsdWUgPSBuZXcgQXJyYXlMaXN0PFN0YW5kYXJkRGlzZWFzZU1vZGVsPigpOworCQlyZXRWYWx1ZS5hZGQoRGV0ZXJtaW5pc3RpY1NJRGlzZWFzZU1vZGVsVGVzdC5jcmVhdGVGaXh0dXJlKCkpOworCQkvLyByZXRWYWx1ZS5hZGQoRGV0ZXJtaW5pc3RpY1NJUkRpc2Vhc2VNb2RlbFRlc3QuY3JlYXRlRml4dHVyZSgpKTsKKwkJcmV0dXJuIHJldFZhbHVlOworCX0gLy8gZ2V0RGlzZWFzZU1vZGVscworCisJLyoqCisJICogQHJldHVybiB0aGUgbW9kZWwgb2YgdGhlIHdvcmxkIHRvIHVzZSBmb3IgdGhlIHNjZW5hcmlvcworCSAqLworCXByaXZhdGUgTGlzdDxNb2RlbD4gZ2V0V29ybGRNb2RlbHMoKSB7CisKKwkJZmluYWwgTGlzdDxNb2RlbD4gcmV0VmFsdWUgPSBuZXcgQXJyYXlMaXN0PE1vZGVsPigpOworCisJCS8vIFRoaXMgY29kZSBpcyBydW5uaW5nICJzdGFuZCBhbG9uZSIgKGkuZS4sIG5vdCB3aXRoaW4gZWNsaXBzZSksIHRodXMKKwkJLy8gdGhlIGRlZmF1bHQgZmFjdG9yaWVzIGZvciB0aGUgZXh0ZW5zaW9ucyBhcmUgbm90IHJlZ2lzdGVyZWQgYXMgdGhleQorCQkvLyB3b3VsZCBmcm9tIHRoZWlyIGV4dGVuc2lvbiBvZgorCQkvLyAib3JnLmVjbGlwc2UuZW1mLmVjb3JlLmV4dGVuc2lvbl9wYXJzZXIiLiBTbyB3ZSBuZWVkIHRvIHJlZ2lzdGVyIHRoZW0KKwkJLy8gaGVyZS4KKworCQkvLyBUaGlzIGNhdXNlcyB0aGUgbW9kZWwgcGFja2FnZSB0byBiZSByZWdpc3RlcmVkLgorCQkvLyBHcmFwaFBhY2thZ2UuZUlOU1RBTkNFLmdldE5zVVJJKCk7CisJCU1vZGVsUGFja2FnZS5lSU5TVEFOQ0UuZ2V0TnNVUkkoKTsKKwkJTm9kZXNQYWNrYWdlLmVJTlNUQU5DRS5nZXROc1VSSSgpOworCisJCWZpbmFsIFJlc291cmNlU2V0IHJlc291cmNlU2V0ID0gbmV3IFJlc291cmNlU2V0SW1wbCgpOworCQlyZXNvdXJjZVNldC5nZXRSZXNvdXJjZUZhY3RvcnlSZWdpc3RyeSgpLmdldEV4dGVuc2lvblRvRmFjdG9yeU1hcCgpCisJCQkJLnB1dCgiKiIsIG5ldyBYTUlSZXNvdXJjZUZhY3RvcnlJbXBsKCkpOworCQlyZXNvdXJjZVNldC5nZXRSZXNvdXJjZUZhY3RvcnlSZWdpc3RyeSgpLmdldFByb3RvY29sVG9GYWN0b3J5TWFwKCkucHV0KAorCQkJCSJwbGF0Zm9ybSIsIG5ldyBYTUlSZXNvdXJjZUZhY3RvcnlJbXBsKCkpOworCisJCWZpbmFsIFN0cmluZyB1cmlTdHJpbmdQcmVmaXggPSAiLi4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS8iCisJCQkJKyAicmVzb3VyY2VzL2RhdGEvbW9kZWxzL3dvcmxkL1dPUkxELyI7CisKKwkJZmluYWwgU3RyaW5nW10gbW9kZWxGaWxlTmFtZXMgPSBuZXcgU3RyaW5nW10geyAiV09STERfMF8xXzIubW9kZWwiLAorCQkJCSJXT1JMRF8wLm1vZGVsIiwgIldPUkxEXzEubW9kZWwiLCAiV09STERfMi5tb2RlbCIgfTsKKwkJZm9yIChTdHJpbmcgd29ybGRNb2RlbEZpbGVOYW1lIDogbW9kZWxGaWxlTmFtZXMpIHsKKwkJCWZpbmFsIFVSSSB3b3JsZE1vZGVsVVJJID0gVVJJLmNyZWF0ZUZpbGVVUkkodXJpU3RyaW5nUHJlZml4CisJCQkJCSsgd29ybGRNb2RlbEZpbGVOYW1lKTsKKworCQkJZmluYWwgUmVzb3VyY2UgcmVzb3VyY2UgPSByZXNvdXJjZVNldC5nZXRSZXNvdXJjZShyZXNvdXJjZVNldAorCQkJCQkuZ2V0VVJJQ29udmVydGVyKCkubm9ybWFsaXplKHdvcmxkTW9kZWxVUkkpLCB0cnVlKTsKKworCQkJdHJ5IHsKKwkJCQlyZXNvdXJjZS5sb2FkKG51bGwpOworCQkJCXJldFZhbHVlLmFkZCgoTW9kZWwpIHJlc291cmNlLmdldENvbnRlbnRzKCkuZ2V0KDApKTsKKwkJCX0gY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKKwkJCQlTeXN0ZW0ub3V0LnByaW50bG4oZS5nZXRNZXNzYWdlKCkpOworCQkJfSAvLyBjYXRjaAorCQkJY2F0Y2ggKE51bGxQb2ludGVyRXhjZXB0aW9uIG5wZSkgeworCQkJCVN5c3RlbS5vdXQucHJpbnRsbihucGUuZ2V0TWVzc2FnZSgpKTsKKwkJCX0gLy8gbnVsbCBwb2ludGVyIGV4Y2VwdGlvbgorCQkJY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CisJCQkJU3lzdGVtLm91dC5wcmludGxuKGUuZ2V0TWVzc2FnZSgpKTsKKwkJCX0KKwkJfSAvLyBmb3IgZWFjaCBtb2RlbCBmaWxlbmFtZQorCQlyZXR1cm4gcmV0VmFsdWU7CisJfSAvLyBnZXRXb3JsZE1vZGVsCisKKwkvKioKKwkgKiBAcmV0dXJuIGEgbGlzdCBvZiBTY2VuYXJpbyBSZWNvcmRzIGZvciBkaXNlYXNlIG1vZGVscyBvbiBhIHdvcmxkIG1vZGVsCisJICovCisJcHJpdmF0ZSBMaXN0PFNjZW5hcmlvUmVjb3JkPiBjcmVhdGVXb3JsZERpc2Vhc2VNb2RlbFNjZW5hcmlvcygKKwkJCUxpc3Q8TW9kZWw+IHdvcmxkTW9kZWxzLCBMaXN0PFN0YW5kYXJkRGlzZWFzZU1vZGVsPiBkaXNlYXNlTW9kZWxzKSB7CisJCWZpbmFsIExpc3Q8U2NlbmFyaW9SZWNvcmQ+IHJldFZhbHVlID0gbmV3IEFycmF5TGlzdDxTY2VuYXJpb1JlY29yZD4oKTsKKworCQlpbnQgc2NlbmFyaW9Db3VudGVyID0gMDsKKworCQlmb3IgKE1vZGVsIG1vZGVsIDogd29ybGRNb2RlbHMpIHsKKwkJCWZvciAoU3RhbmRhcmREaXNlYXNlTW9kZWwgZGlzZWFzZU1vZGVsIDogZGlzZWFzZU1vZGVscykgeworCisJCQkJZmluYWwgU2NlbmFyaW8gc2NlbmFyaW8gPSBTY2VuYXJpb0ZhY3RvcnkuZUlOU1RBTkNFCisJCQkJCQkuY3JlYXRlU2NlbmFyaW8oKTsKKwkJCQlmaW5hbCBEdWJsaW5Db3JlIGRjID0gc2NlbmFyaW8uZ2V0RHVibGluQ29yZSgpOworCQkJCWRjLnBvcHVsYXRlKCk7CisJCQkJZGMuc2V0VGl0bGUoIlNjZW5hcmlvOiAiICsgbW9kZWwuZ2V0RHVibGluQ29yZSgpLmdldFRpdGxlKCkKKwkJCQkJCSsgZGlzZWFzZU1vZGVsLmdldER1YmxpbkNvcmUoKS5nZXRUaXRsZSgpKTsKKwkJCQlkYy5zZXRGb3JtYXQoU2NlbmFyaW9QYWNrYWdlLmVOU19VUkkpOworCisJCQkJLy8gQWRkIHRoZSBkaXNlYXNlIG1vZGVsIHRvIHRoZSBtb2RlbAorCQkJCWZpbmFsIE1vZGVsIHRlbXAgPSAoTW9kZWwpRWNvcmVVdGlsLmNvcHkobW9kZWwpOworCQkJCXRlbXAuZ2V0Tm9kZURlY29yYXRvcnMoKS5hZGQoKE5vZGVEZWNvcmF0b3IpCisJCQkJCQlFY29yZVV0aWwuY29weShkaXNlYXNlTW9kZWwpKTsKKworCQkJCXNjZW5hcmlvLnNldE1vZGVsKHRlbXApOworCisJCQkJLy8gQWRkIHRoZSBzZXF1ZW5jZXIgdG8gdGhlIHNjZW5hcmlvCisJCQkJc2NlbmFyaW8uc2V0U2VxdWVuY2VyKFNlcXVlbnRpYWxTZXF1ZW5jZXJUZXN0LmNyZWF0ZUZpeHR1cmUoKSk7CisKKwkJCQkvLyBBZGQgaW5mZWN0b3IocykgZm9yIGVhY2ggZGlzZWFzZSBtb2RlbCB0byB0aGUgc2NlbmFyaW8KKwkJCQlDb2xsZWN0aW9uPERlY29yYXRvcj4gaW5mZWN0b3JzID0gU0lEaXNlYXNlTW9kZWxTY2VuYXJpb1Rlc3QKKwkJCQkJCS5jcmVhdGVJbmZlY3RvcnModGVtcCk7CisJCQkJZmluYWwgTm9kZSBub2RlVG9JbmZlY3QgPSBwaWNrTm9kZVRvSW5mZWN0KHNjZW5hcmlvLmdldE1vZGVsKCkpOworCQkJCWZvciAoRGVjb3JhdG9yIGRlY29yYXRvciA6IGluZmVjdG9ycykgeworCQkJCQlmaW5hbCBJbmZlY3RvciBpbmZlY3RvciA9IChJbmZlY3RvcikgZGVjb3JhdG9yOworCQkJCQkvLyBEaWQgd2UgZmluZCBhIG5vZGU/CisJCQkJCWlmIChub2RlVG9JbmZlY3QgIT0gbnVsbCkgeworCQkJCQkJLy8gWWVzCisJCQkJCQlpbmZlY3Rvci5zZXRUYXJnZXRVUkkobm9kZVRvSW5mZWN0LmdldFVSSSgpKTsKKwkJCQkJfQorCisJCQkJfQorCQkJCXNjZW5hcmlvLmdldFNjZW5hcmlvRGVjb3JhdG9ycygpLmFkZEFsbChpbmZlY3RvcnMpOworCisJCQkJZmluYWwgU2NlbmFyaW9SZWNvcmQgc2NlbmFyaW9SZWNvcmQgPSBuZXcgU2NlbmFyaW9SZWNvcmQoCisJCQkJCQlzY2VuYXJpbywgIldPUkxEIiwgc2NlbmFyaW9Db3VudGVyKyspOworCisJCQkJZmluYWwgU3RyaW5nIHVyaVN0cmluZyA9IE1lc3NhZ2VGb3JtYXQuZm9ybWF0KAorCQkJCQkJSURFTlRJRklFUl9GT1JNQVQsIERJU0VBU0VfVEVTVF9GSUxFX1VSSV9QUkVGSVgsCisJCQkJCQkiV09STEQiLCBzY2VuYXJpb1JlY29yZC5nZXRTZXJpYWxpemF0aW9uRmlsZU5hbWUoKSk7CisJCQkJZGMuc2V0SWRlbnRpZmllcih1cmlTdHJpbmcpOworCQkJCXNjZW5hcmlvLnNldFVSSShVUkkuY3JlYXRlVVJJKHVyaVN0cmluZykpOworCisJCQkJcmV0VmFsdWUuYWRkKHNjZW5hcmlvUmVjb3JkKTsKKwkJCX0gLy8gZm9yIGVhY2ggZGlzZWFzZSBtb2RlbAorCQl9IC8vIGZvciBlYWNoIG1vZGVsCisKKwkJLy8gZm9yIChpbnQgYWRtaW5MZXZlbCA9IDA7IGFkbWluTGV2ZWwgPCBtb2RlbHNCeUFkbWluTGV2ZWwuc2l6ZSgpOworCQkvLyBhZG1pbkxldmVsKyspIHsKKwkJLy8KKwkJLy8gZmluYWwgTW9kZWwgd29ybGRNb2RlbCA9IE1vZGVsRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlTW9kZWwoKTsKKwkJLy8gZmluYWwgRHVibGluQ29yZSBkYyA9IHdvcmxkTW9kZWwuZ2V0RHVibGluQ29yZSgpOworCQkvLyBkYy5wb3B1bGF0ZSgpOworCQkvLyBkYy5zZXRUaXRsZSgiV29ybGQgTW9kZWwgKExldmVsICIgKyBhZG1pbkxldmVsICsgIiwgIgorCQkvLyArIG1vZGVsc0J5QWRtaW5MZXZlbC5nZXQoYWRtaW5MZXZlbCkuc2l6ZSgpICsgIiBtb2RlbHMpIik7CisJCS8vCisJCS8vIGZvciAoQ291bnRyeU1vZGVsUmVjb3JkIG1vZGVsUmVjb3JkIDogbW9kZWxzQnlBZG1pbkxldmVsCisJCS8vIC5nZXQoYWRtaW5MZXZlbCkpIHsKKwkJLy8gd29ybGRNb2RlbC5nZXRNb2RlbHMoKS5hZGQobW9kZWxSZWNvcmQuZ2V0TW9kZWwoKSk7CisJCS8vIH0gLy8gZm9yZWFjaCBNb2RlbFJlY29yZCBhdCBhZG1pbkxldmVsCisJCS8vCisJCS8vIGZpbmFsIFdvcmxkTW9kZWxSZWNvcmQgd29ybGRNb2RlbFJlY29yZCA9IG5ldyBXb3JsZE1vZGVsUmVjb3JkKAorCQkvLyB3b3JsZE1vZGVsLCBXT1JMRF9JRCwgYWRtaW5MZXZlbCk7CisJCS8vIHdvcmxkTW9kZWwuc2V0VVJJKFVSSS5jcmVhdGVVUkkoTWVzc2FnZUZvcm1hdC5mb3JtYXQoCisJCS8vIElERU5USUZJRVJfRk9STUFULAorCQkvLyBDb3VudHJ5R3JhcGhDcmVhdG9yLkdFT0dSQVBIWV9GSUxFX1VSSV9QUkVGSVgsIFdPUkxEX0lELAorCQkvLyB3b3JsZE1vZGVsUmVjb3JkLmdldFNlcmlhbGl6YXRpb25GaWxlTmFtZSgpKSkpOworCQkvLworCQkvLyByZXRWYWx1ZS5hZGQod29ybGRNb2RlbFJlY29yZCk7CisJCS8vIH0gLy8gZm9yIGFkbWluTGV2ZWwKKworCQlyZXR1cm4gcmV0VmFsdWU7CisJfSAvLyBjcmVhdGVXb3JsZERpc2Vhc2VNb2RlbFNjZW5hcmlvcworCisJLyoqCisJICogU2VsZWN0IGEgTm9kZSBmcm9tIHRoZSBtb2RlbCB0byBpbmZlY3QKKwkgKiAKKwkgKiBAcGFyYW0gbW9kZWwKKwkgKiBAcmV0dXJuIGEgTm9kZQorCSAqLworCXByaXZhdGUgTm9kZSBwaWNrTm9kZVRvSW5mZWN0KE1vZGVsIG1vZGVsKSB7CisJCS8vIFBpY2sgdGhlIGZpcnN0IG5vZGUgd2l0aCBwb3B1bGF0aW9uIG1lbWJlcnMgd2UgZmluZAorCQlOb2RlIHJldFZhbHVlID0gbnVsbDsKKworCQkvLyBMb29rIGluIHRoZSBncmFwaHMKKwkJZm9yIChJdGVyYXRvciBncmFwaEl0ZXIgPSBtb2RlbC5nZXRHcmFwaHMoKS5pdGVyYXRvcigpOyBncmFwaEl0ZXIKKwkJCQkuaGFzTmV4dCgpOykgeworCQkJR3JhcGggZ3JhcGggPSAoR3JhcGgpIGdyYXBoSXRlci5uZXh0KCk7CisJCQkvLyBBbnkgbm9kZXMgaW4gdGhpcyBncmFwaD8KKwkJCWZvciAoSXRlcmF0b3Igbm9kZUl0ZXIgPSBncmFwaC5nZXROb2RlcygpLnZhbHVlcygpLml0ZXJhdG9yKCk7IG5vZGVJdGVyCisJCQkJCS5oYXNOZXh0KCk7KSB7CisJCQkJTm9kZSBub2RlID0gKE5vZGUpIG5vZGVJdGVyLm5leHQoKTsKKwkJCQkvLyBnb3Qgb25lCisJCQkJcmV0dXJuIG5vZGU7CisJCQl9CisJCX0KKwkJLy8gaWYgd2UgZ2V0IGhlcmUgd2UgZGlkbid0IGZpbmQgb25lIGluIHRoZSBncmFwaHMKKwkJZm9yIChJdGVyYXRvciBtb2RlbEl0ZXIgPSBtb2RlbC5nZXRNb2RlbHMoKS5pdGVyYXRvcigpOyByZXRWYWx1ZSA9PSBudWxsCisJCQkJJiYgbW9kZWxJdGVyLmhhc05leHQoKTspIHsKKwkJCU1vZGVsIHN1Ym1vZGVsID0gKE1vZGVsKSBtb2RlbEl0ZXIubmV4dCgpOworCQkJcmV0VmFsdWUgPSBwaWNrTm9kZVRvSW5mZWN0KHN1Ym1vZGVsKTsKKwkJfQorCisJCXJldHVybiByZXRWYWx1ZTsKKwl9IC8vIHBpY2tOb2RlVG9JbmZlY3QKKworCS8qKgorCSAqIEBwYXJhbSB3b3JsZFNjZW5hcmlvUmVjb3JkcworCSAqIEBwYXJhbSB3b3JsZFNjZW5hcmlvT3V0CisJICogQHBhcmFtIHBsdWdpbk91dAorCSAqLworCXByaXZhdGUgdm9pZCBnZW5lcmF0ZU1vZGVsRXh0ZW5zaW9uUG9pbnRYTUwoCisJCQlMaXN0PFNjZW5hcmlvUmVjb3JkPiB3b3JsZFNjZW5hcmlvUmVjb3JkcywKKwkJCUJ1ZmZlcmVkV3JpdGVyIHdvcmxkU2NlbmFyaW9PdXQsIEJ1ZmZlcmVkV3JpdGVyIHBsdWdpbk91dCkgeworCisJCS8vIFRoZSBkdWJsaW4gY29yZSBpbnN0YW5jZXMgb2YgdGhlIG1vZGVscyBsaWtlbHkgc2hhcmUgY29tbW9uCisJCS8vIGF0dHJpYnV0ZXMsIHdlIGNhbiBhdm9pZCBkdXBsaWNhdGUgZW50cmllcyBpbiB0aGUgZmlsZXMgd2UKKwkJLy8gZ2VuZXJhdGUgYnkgZmluZGluZyB0aGUgZHVwbGljYXRlIGVudHJpZXMgYW5kIG9ubHkgZ2VuZXJhdGluZyBhCisJCS8vIHNpbmdsZSBrZXkgZm9yIHRoZSBnZW5lcmF0ZWQgcGx1Z2lucyBmaWxlIGNvbnRlbnQuCisJCWZpbmFsIE1hcDxTdHJpbmcsIFN0cmluZz4gZGNWYWx1ZUtleU1hcCA9IG5ldyBIYXNoTWFwPFN0cmluZywgU3RyaW5nPigpOworCisJCXRyeSB7CisJCQl3b3JsZFNjZW5hcmlvT3V0CisJCQkJCS53cml0ZSgiPCEtLSBHZW5lcmF0ZWQgY29udGVudC4gIERvIG5vdCBtb2RpZnkgLS0+XG4iKTsKKworCQkJd29ybGRTY2VuYXJpb091dC53cml0ZShNZXNzYWdlRm9ybWF0LmZvcm1hdCgKKwkJCQkJQ291bnRyeUdyYXBoQ3JlYXRvci5YTUxfRVhURU5TSU9OX1BPSU5UX09QRU4sCisJCQkJCW5ldyBPYmplY3RbXSB7IENvbnN0YW50cy5JRF9TQ0VOQVJJT19FWFRFTlNJT05fUE9JTlQgfSkpOworCQkJd29ybGRTY2VuYXJpb091dC53cml0ZSgiXG4iKTsKKworCQkJcGx1Z2luT3V0CisJCQkJCS53cml0ZSgiI01vZGVsIE5MUyBLZXlzLiAgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQsIGRvIG5vdCBtb2RpZnkuICIKKwkJCQkJCQkrIENhbGVuZGFyLmdldEluc3RhbmNlKCkuZ2V0VGltZSgpCisJCQkJCQkJKyAiICIKKwkJCQkJCQkrIFN5c3RlbS5nZXRQcm9wZXJ0eSgidXNlci5uYW1lIikgKyAiXG4iKTsKKworCQkJLy8gV29ybGQgTW9kZWwKKwkJCUNvdW50cnlHcmFwaENyZWF0b3Iub3V0cHV0Q2F0ZWdvcnkoSURfU0NFTkFSSU9fV09STERfQ0FURUdPUlksCisJCQkJCVNDRU5BUklPLCBDb3VudHJ5TW9kZWxDcmVhdG9yLklEX01PREVMX1BPTElUSUNBTF9DQVRFR09SWSwKKwkJCQkJQ291bnRyeU1vZGVsQ3JlYXRvci5OTFNfQ0FURUdPUllfS0VZX0ZPUk1BVCwKKwkJCQkJd29ybGRTY2VuYXJpb091dCwgcGx1Z2luT3V0KTsKKworCQkJZm9yIChTY2VuYXJpb1JlY29yZCB3b3JsZE1vZGVsUmVjb3JkIDogd29ybGRTY2VuYXJpb1JlY29yZHMpIHsKKwkJCQlDb3VudHJ5R3JhcGhDcmVhdG9yLm91dHB1dER1YmxpbkNvcmUod29ybGRNb2RlbFJlY29yZCwKKwkJCQkJCUlEX1NDRU5BUklPX1dPUkxEX0NBVEVHT1JZLCBkY1ZhbHVlS2V5TWFwLAorCQkJCQkJd29ybGRTY2VuYXJpb091dCwgcGx1Z2luT3V0KTsKKwkJCX0gLy8gZm9yIGVhY2ggd29ybGQgbW9kZWwgcmVjb3JkCisKKwkJCXdvcmxkU2NlbmFyaW9PdXQKKwkJCQkJLndyaXRlKENvdW50cnlHcmFwaENyZWF0b3IuWE1MX0VYVEVOU0lPTl9QT0lOVF9DTE9TRSk7CisJCQl3b3JsZFNjZW5hcmlvT3V0LmNsb3NlKCk7CisJCQlwbHVnaW5PdXQuY2xvc2UoKTsKKwkJfSBjYXRjaCAoSU9FeGNlcHRpb24gZSkgeworCQkJZS5wcmludFN0YWNrVHJhY2UoKTsKKwkJfQorCisJfSAvLyBnZW5lcmF0ZU1vZGVsRXh0ZW5zaW9uUG9pbnRYTUwKKworCS8qKgorCSAqIEBwYXJhbSB3b3JsZE1vZGVscworCSAqIEBwYXJhbSB1cmlQYXRoU3RyaW5nCisJICogICAgICAgICAgICB0aGUgcGF0aCB0byB0aGUgcm9vdCBvZiB0aGUgZm9sZGVyIHRvIHNlcmlhbGl6ZSB0aGUgbW9kZWxzIHRvCisJICogQHRocm93cyBJT0V4Y2VwdGlvbgorCSAqLworCXByaXZhdGUgdm9pZCBzZXJpYWxpemVTY2VuYXJpb01vZGVscygKKwkJCWZpbmFsIExpc3Q8U2NlbmFyaW9SZWNvcmQ+IHdvcmxkU2NlbmFyaW9zLAorCQkJZmluYWwgU3RyaW5nIHVyaVBhdGhTdHJpbmcpIHRocm93cyBJT0V4Y2VwdGlvbiB7CisJCWZvciAoU2NlbmFyaW9SZWNvcmQgc2NlbmFyaW9SZWNvcmQgOiB3b3JsZFNjZW5hcmlvcykgeworCQkJc2NlbmFyaW9SZWNvcmQuc2VyaWFsaXplKHVyaVBhdGhTdHJpbmcpOworCQl9IC8vIGZvciBlYWNoIG1vZGVsIHJlY29yZAorCX0gLy8gc2VyaWFsaXplV29ybGRNb2RlbHMKKworCS8qKgorCSAqIFRoaXMgY2xhc3MgY29udGFpbnMgYSB3b3JsZCBzY2VuYXJpbyBhbmQgaXRzIG1ldGFkYXRhLgorCSAqLworCXB1YmxpYyBjbGFzcyBTY2VuYXJpb1JlY29yZCBleHRlbmRzIENvdW50cnlHcmFwaENyZWF0b3IuUmVjb3JkIHsKKworCQkvKioKKwkJICogQ29uc3RydWN0b3IKKwkJICovCisJCXB1YmxpYyBTY2VuYXJpb1JlY29yZCgpIHsKKwkJCXN1cGVyKCk7CisJCX0KKworCQkvKioKKwkJICogQHBhcmFtIGlkZW50aWZpYWJsZQorCQkgKiBAcGFyYW0gaWQKKwkJICogQHBhcmFtIGFkbWluTGV2ZWwKKwkJICovCisJCXB1YmxpYyBTY2VuYXJpb1JlY29yZChJZGVudGlmaWFibGUgaWRlbnRpZmlhYmxlLCBTdHJpbmcgaWQsCisJCQkJaW50IGFkbWluTGV2ZWwpIHsKKwkJCXN1cGVyKGlkZW50aWZpYWJsZSwgaWQsIGFkbWluTGV2ZWwpOworCQl9CisKKwkJLyoqCisJCSAqIEBwYXJhbSBpZGVudGlmaWFibGUKKwkJICogQHBhcmFtIGlkCisJCSAqIEBwYXJhbSBhZG1pbkxldmVscworCQkgKi8KKwkJcHVibGljIFNjZW5hcmlvUmVjb3JkKElkZW50aWZpYWJsZSBpZGVudGlmaWFibGUsIFN0cmluZyBpZCwKKwkJCQlMaXN0PEludGVnZXI+IGFkbWluTGV2ZWxzKSB7CisJCQlzdXBlcihpZGVudGlmaWFibGUsIGlkLCBhZG1pbkxldmVscyk7CisJCX0KKworCQkvKioKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5LmdyYXBoLkNvdW50cnlHcmFwaENyZWF0b3IuUmVjb3JkI2dldE91dHB1dFR5cGUoKQorCQkgKi8KKwkJQE92ZXJyaWRlCisJCXB1YmxpYyBTdHJpbmcgZ2V0T3V0cHV0VHlwZSgpIHsKKwkJCXJldHVybiAic2NlbmFyaW8iOworCQl9IC8vIGdldE91dHB1dFR5cGUKKworCQkvKioKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5LmdyYXBoLkNvdW50cnlHcmFwaENyZWF0b3IuUmVjb3JkI2dldFR5cGUoKQorCQkgKi8KKwkJQE92ZXJyaWRlCisJCXB1YmxpYyBTdHJpbmcgZ2V0VHlwZSgpIHsKKwkJCXJldHVybiAic2NlbmFyaW8iOworCQl9IC8vIGdldFR5cGUKKworCX0gLy8gU2NlbmFyaW9SZWNvcmQKKworfSAvLyBXb3JsZFNjZW5hcmlvQ3JlYXRvcgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3Rlc3RzL2Rpc2Vhc2Vtb2RlbHMvc3RhbmRhcmQvcHJvdmlkZXIvdGVzdHMvRGlzZWFzZU1vZGVsTGFiZWxSZWxhdGl2ZVZhbHVlUHJvdmlkZXJUZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdGVzdHMvZGlzZWFzZW1vZGVscy9zdGFuZGFyZC9wcm92aWRlci90ZXN0cy9EaXNlYXNlTW9kZWxMYWJlbFJlbGF0aXZlVmFsdWVQcm92aWRlclRlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZmFhOGRlCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3Rlc3RzL2Rpc2Vhc2Vtb2RlbHMvc3RhbmRhcmQvcHJvdmlkZXIvdGVzdHMvRGlzZWFzZU1vZGVsTGFiZWxSZWxhdGl2ZVZhbHVlUHJvdmlkZXJUZXN0LmphdmEKQEAgLTAsMCArMSw1OCBAQAorLy8gRGlzZWFzZU1vZGVsTGFiZWxSZWxhdGl2ZVZhbHVlUHJvdmlkZXJUZXN0LmphdmEKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLnByb3ZpZGVyLnRlc3RzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuYWRhcHRlcnMucmVsYXRpdmV2YWx1ZS5SZWxhdGl2ZVZhbHVlUHJvdmlkZXJBZGFwdGVyVGVzdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQucHJvdmlkZXIuU3RhbmRhcmRSZWxhdGl2ZVZhbHVlUHJvdmlkZXJBZGFwdGVyRmFjdG9yeS5EaXNlYXNlTW9kZWxMYWJlbFJlbGF0aXZlVmFsdWVQcm92aWRlcjsKKworLyoqCisgKiBUaGlzIGNsYXNzIGlzIGEgSlVuaXQgdGVzdCBmb3IKKyAqIHtAbGluayBEaXNlYXNlTW9kZWxMYWJlbFJlbGF0aXZlVmFsdWVQcm92aWRlcn0KKyAqLworQFN1cHByZXNzV2FybmluZ3MoImFsbCIpCitwdWJsaWMgY2xhc3MgRGlzZWFzZU1vZGVsTGFiZWxSZWxhdGl2ZVZhbHVlUHJvdmlkZXJUZXN0IGV4dGVuZHMKKwkJUmVsYXRpdmVWYWx1ZVByb3ZpZGVyQWRhcHRlclRlc3QgeworCisJLyoqCisJICogQHNlZSBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2Ujc2V0VXAoKQorCSAqLworCXByb3RlY3RlZCB2b2lkIHNldFVwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCXNldEZpeHR1cmUoY3JlYXRlRml4dHVyZSgpKTsKKwl9CisKKwkvKioKKwkgKiBAcmV0dXJuIGEgPGNvZGU+UmVsYXRpdmVWYWx1ZVByb3ZpZGVyQWRhcHRlcjwvY29kZT4gZm9yIHRlc3RpbmcKKwkgKi8KKwlwdWJsaWMgc3RhdGljIERpc2Vhc2VNb2RlbExhYmVsUmVsYXRpdmVWYWx1ZVByb3ZpZGVyIGNyZWF0ZUZpeHR1cmUoKSB7CisJCXJldHVybiBuZXcgRGlzZWFzZU1vZGVsTGFiZWxSZWxhdGl2ZVZhbHVlUHJvdmlkZXIoKTsKKwl9IC8vIGNyZWF0ZUZpeHR1cmUKKworCS8qKgorCSAqIFRlc3QgbWV0aG9kIGZvcgorCSAqIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQucHJvdmlkZXIuU3RhbmRhcmRSZWxhdGl2ZVZhbHVlUHJvdmlkZXJBZGFwdGVyRmFjdG9yeS5EaXNlYXNlTW9kZWxMYWJlbFJlbGF0aXZlVmFsdWVQcm92aWRlciNnZXRQcm9wZXJ0aWVzKCl9LgorCSAqLworCXB1YmxpYyB2b2lkIHRlc3RHZXRQcm9wZXJ0aWVzKCkgeworCQkvLyBmb3Igc29tZW9uZSB0byBkbworCQlhc3NlcnRUcnVlKHRydWUpOworCX0KKworCS8qKgorCSAqIFRlc3QgbWV0aG9kIGZvcgorCSAqIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQucHJvdmlkZXIuU3RhbmRhcmRSZWxhdGl2ZVZhbHVlUHJvdmlkZXJBZGFwdGVyRmFjdG9yeS5EaXNlYXNlTW9kZWxMYWJlbFJlbGF0aXZlVmFsdWVQcm92aWRlciNnZXRSZWxhdGl2ZVZhbHVlKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FU3RydWN0dXJhbEZlYXR1cmUpfS4KKwkgKi8KKwlwdWJsaWMgdm9pZCB0ZXN0R2V0UmVsYXRpdmVWYWx1ZUVTdHJ1Y3R1cmFsRmVhdHVyZSgpIHsKKwkJLy8gZm9yIHNvbWVvbmUgdG8gZG8KKwkJYXNzZXJ0VHJ1ZSh0cnVlKTsKKwl9IC8vIHRlc3RHZXRSZWxhdGl2ZVZhbHVlRVN0cnVjdHVyYWxGZWF0dXJlCisKK30gLy8gRGlzZWFzZU1vZGVsTGFiZWxSZWxhdGl2ZVZhbHVlUHJvdmlkZXJUZXN0CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdGVzdHMvZGlzZWFzZW1vZGVscy9zdGFuZGFyZC9wcm92aWRlci90ZXN0cy9TdGFuZGFyZFJlbGF0aXZlVmFsdWVIaXN0b3J5UHJvdmlkZXJBZGFwdGVyRmFjdG9yeVRlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS90ZXN0cy9kaXNlYXNlbW9kZWxzL3N0YW5kYXJkL3Byb3ZpZGVyL3Rlc3RzL1N0YW5kYXJkUmVsYXRpdmVWYWx1ZUhpc3RvcnlQcm92aWRlckFkYXB0ZXJGYWN0b3J5VGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJjNmE3YmMKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdGVzdHMvZGlzZWFzZW1vZGVscy9zdGFuZGFyZC9wcm92aWRlci90ZXN0cy9TdGFuZGFyZFJlbGF0aXZlVmFsdWVIaXN0b3J5UHJvdmlkZXJBZGFwdGVyRmFjdG9yeVRlc3QuamF2YQpAQCAtMCwwICsxLDE1NSBAQAorLy8gU3RhbmRhcmRSZWxhdGl2ZVZhbHVlSGlzdG9yeVByb3ZpZGVyQWRhcHRlckZhY3RvcnlUZXN0LmphdmEKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLnByb3ZpZGVyLnRlc3RzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLlNURU1UaW1lOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuYWRhcHRlcnMucmVsYXRpdmV2YWx1ZS5oaXN0b3J5LlJlbGF0aXZlVmFsdWVIaXN0b3J5UHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5hZGFwdGVycy5yZWxhdGl2ZXZhbHVlLmhpc3RvcnkuUmVsYXRpdmVWYWx1ZUhpc3RvcnlQcm92aWRlckFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5EaXNlYXNlTW9kZWxMYWJlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQucHJvdmlkZXIuU3RhbmRhcmRIaXN0b3J5UHJvdmlkZXJBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQucHJvdmlkZXIuU3RhbmRhcmRSZWxhdGl2ZVZhbHVlSGlzdG9yeVByb3ZpZGVyQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLnByb3ZpZGVyLlN0YW5kYXJkUmVsYXRpdmVWYWx1ZVByb3ZpZGVyQWRhcHRlckZhY3Rvcnk7CisKKy8qKgorICogVGhpcyBjbGFzcyBpcyBhIEpVbml0IHRlc3QgY2FzZSBmb3IKKyAqIHtAbGluayBTdGFuZGFyZFJlbGF0aXZlVmFsdWVIaXN0b3J5UHJvdmlkZXJBZGFwdGVyRmFjdG9yeX0uCisgKi8KK0BTdXBwcmVzc1dhcm5pbmdzKCJhbGwiKQorcHVibGljIGNsYXNzIFN0YW5kYXJkUmVsYXRpdmVWYWx1ZUhpc3RvcnlQcm92aWRlckFkYXB0ZXJGYWN0b3J5VGVzdAorCQlleHRlbmRzCisJCW9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuYWRhcHRlcnMucmVsYXRpdmV2YWx1ZS5oaXN0b3J5LlJlbGF0aXZlVmFsdWVIaXN0b3J5UHJvdmlkZXJBZGFwdGVyRmFjdG9yeVRlc3QgeworCisJc3RhdGljIHsKKwkJLy8gQWRkIHRvIFJlbGF0aXZlVmFsdWVQcm92aWRlckFkYXB0ZXJGYWN0b3J5LklOU1RBTkNFCisJCW5ldyBTdGFuZGFyZFJlbGF0aXZlVmFsdWVQcm92aWRlckFkYXB0ZXJGYWN0b3J5KCk7CisKKwkJLy8gQWRkIHRvIEhpc3RvcnlQcm92aWRlckFkYXB0ZXJGYWN0b3J5LklOU1RBTkNFCisJCW5ldyBTdGFuZGFyZEhpc3RvcnlQcm92aWRlckFkYXB0ZXJGYWN0b3J5KCk7CisJfSAvLyBzdGF0aWMKKworCXByaXZhdGUgU3RhbmRhcmRSZWxhdGl2ZVZhbHVlSGlzdG9yeVByb3ZpZGVyQWRhcHRlckZhY3RvcnkgZ2V0Rml4dHVyZSgpIHsKKwkJcmV0dXJuIChTdGFuZGFyZFJlbGF0aXZlVmFsdWVIaXN0b3J5UHJvdmlkZXJBZGFwdGVyRmFjdG9yeSkgZml4dHVyZTsKKwl9IC8vIFNwYXRpYWxQcm92aWRlckFkYXB0ZXJGYWN0b3J5CisKKwkvKioKKwkgKiBAc2VlIGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZSNzZXRVcCgpCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgc2V0VXAoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJc2V0Rml4dHVyZShjcmVhdGVGaXh0dXJlKCkpOworCX0KKworCS8qKgorCSAqIEBzZWUganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlI3RlYXJEb3duKCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgdm9pZCB0ZWFyRG93bigpIHRocm93cyBFeGNlcHRpb24geworCQlzZXRGaXh0dXJlKG51bGwpOworCX0KKworCS8qKgorCSAqIEByZXR1cm4gYSBmYWN0b3J5IGluc3RhbmNlIGZvciB0ZXN0aW5nIHB1cnBvc2VzLgorCSAqLworCXByb3RlY3RlZCBTdGFuZGFyZFJlbGF0aXZlVmFsdWVIaXN0b3J5UHJvdmlkZXJBZGFwdGVyRmFjdG9yeSBjcmVhdGVGaXh0dXJlKCkgeworCQlyZXR1cm4gbmV3IFN0YW5kYXJkUmVsYXRpdmVWYWx1ZUhpc3RvcnlQcm92aWRlckFkYXB0ZXJGYWN0b3J5KCk7CisJfSAvLyBjcmVhdGVGaXh0dXJlCisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5wcm92aWRlci50ZXN0cy5TdGFuZGFyZFJlbGF0aXZlVmFsdWVQcm92aWRlckFkYXB0ZXJGYWN0b3J5VGVzdCN0ZXN0UHJvcGVyQWRhcHRlckZhY3RvcnlDb21wb3NpdGlvbigpCisJICovCisJcHVibGljIHZvaWQgdGVzdFByb3BlckFkYXB0ZXJGYWN0b3J5Q29tcG9zaXRpb24oKSB7CisJCWZpbmFsIFJlbGF0aXZlVmFsdWVIaXN0b3J5UHJvdmlkZXJBZGFwdGVyRmFjdG9yeSBydnBhZiA9IFJlbGF0aXZlVmFsdWVIaXN0b3J5UHJvdmlkZXJBZGFwdGVyRmFjdG9yeS5JTlNUQU5DRTsKKwkJLy8gTWFrZSB0aGUgbGFiZWwgdmFsdWUgdG8gYmUgYWRhcHRlZAorCQlmaW5hbCBEaXNlYXNlTW9kZWxMYWJlbCBkbWwgPSBnZXREaXNlYXNlTW9kZWxMYWJlbFRvVGVzdCgpOworCisJCWZpbmFsIFJlbGF0aXZlVmFsdWVIaXN0b3J5UHJvdmlkZXIgcmVsYXRpdmVWYWx1ZUhpc3RvcnlQcm92aWRlciA9IChSZWxhdGl2ZVZhbHVlSGlzdG9yeVByb3ZpZGVyKSBydnBhZgorCQkJCS5hZGFwdChkbWwsIFJlbGF0aXZlVmFsdWVIaXN0b3J5UHJvdmlkZXIuY2xhc3MpOworCisJCWFzc2VydE5vdE51bGwocmVsYXRpdmVWYWx1ZUhpc3RvcnlQcm92aWRlcik7CisJCWFzc2VydFRydWUocmVsYXRpdmVWYWx1ZUhpc3RvcnlQcm92aWRlciBpbnN0YW5jZW9mIFN0YW5kYXJkUmVsYXRpdmVWYWx1ZUhpc3RvcnlQcm92aWRlckFkYXB0ZXJGYWN0b3J5LkRpc2Vhc2VNb2RlbExhYmVsUmVsYXRpdmVWYWx1ZUhpc3RvcnlQcm92aWRlcik7CisJfQorCisJLyoqCisJICogVGVzdCBtZXRob2QgZm9yCisJICoge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuYWRhcHRlcnMucmVsYXRpdmV2YWx1ZS5SZWxhdGl2ZVZhbHVlUHJvdmlkZXJBZGFwdGVyRmFjdG9yeS5SZWxhdGl2ZVZhbHVlUHJvdmlkZXJBZGFwdGVyRmFjdG9yeUltcGwjaXNGYWN0b3J5Rm9yVHlwZShqYXZhLmxhbmcuT2JqZWN0KX0uCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgdGVzdElzRmFjdG9yeUZvclR5cGVPYmplY3QoKSB7CisJCWZpbmFsIFJlbGF0aXZlVmFsdWVIaXN0b3J5UHJvdmlkZXJBZGFwdGVyRmFjdG9yeSBmaXh0dXJlID0gZ2V0Rml4dHVyZSgpOworCQlhc3NlcnRUcnVlKGZpeHR1cmUuaXNGYWN0b3J5Rm9yVHlwZShSZWxhdGl2ZVZhbHVlSGlzdG9yeVByb3ZpZGVyLmNsYXNzKSk7CisJfSAvLyB0ZXN0SXNGYWN0b3J5Rm9yVHlwZU9iamVjdAorCisJcHVibGljIHZvaWQgdGVzdEdldFJlbGF0aXZlVmFsdWVCeVRpbWUoKSB7CisJCS8vIFRPRE8gaW1wbGVtZW50IHRlc3RHZXRSZWxhdGl2ZVZhbHVlQnlUaW1lCisJCWZpbmFsIFJlbGF0aXZlVmFsdWVIaXN0b3J5UHJvdmlkZXIgclZIUCA9IGdldEFkYXB0ZXJUb1Rlc3QoKTsKKwkJYXNzZXJ0Tm90TnVsbChyVkhQKTsKKwkJZmluYWwgSXRlbVByb3BlcnR5RGVzY3JpcHRvciBwcm9wZXJ0eSA9IChJdGVtUHJvcGVydHlEZXNjcmlwdG9yKSByVkhQCisJCQkJLmdldFByb3BlcnRpZXMoKS5nZXQoMCk7CisJCWZpbmFsIGRvdWJsZSBydlRpbWUxID0gclZIUC5nZXRSZWxhdGl2ZVZhbHVlKHByb3BlcnR5LCByVkhQCisJCQkJLmdldEVhcmxpZXN0VGltZVZhbHVlKCkpOworCQlhc3NlcnRUcnVlKHZhbHVlV2l0aGluUmFuZ2UocnZUaW1lMSkpOworCisJfSAvLyB0ZXN0R2V0UmVsYXRpdmVWYWx1ZUJ5VGltZQorCisJcHVibGljIHZvaWQgdGVzdEdldEFsbEhpc3RvcmljUmVsYXRpdmVWYWx1ZXMoKSB7CisJCWZpbmFsIFJlbGF0aXZlVmFsdWVIaXN0b3J5UHJvdmlkZXIgclZIUCA9IGdldEFkYXB0ZXJUb1Rlc3QoKTsKKwkJYXNzZXJ0Tm90TnVsbChyVkhQKTsKKwkJZmluYWwgSXRlbVByb3BlcnR5RGVzY3JpcHRvciBwcm9wZXJ0eSA9IChJdGVtUHJvcGVydHlEZXNjcmlwdG9yKSByVkhQCisJCQkJLmdldFByb3BlcnRpZXMoKS5nZXQoMCk7CisJCWZpbmFsIGRvdWJsZVtdIGFsbFJlbGF0aXZlVmFsdWVzID0gclZIUAorCQkJCS5nZXRBbGxIaXN0b3JpY1JlbGF0aXZlVmFsdWVzKHByb3BlcnR5KTsKKy8vCQlhc3NlcnRUcnVlKGFsbFJlbGF0aXZlVmFsdWVzLmxlbmd0aCA+IDApOworCQlmb3IgKGludCBpID0gMDsgaSA8IGFsbFJlbGF0aXZlVmFsdWVzLmxlbmd0aDsgaSsrKSB7CisJCQlhc3NlcnRUcnVlKHZhbHVlV2l0aGluUmFuZ2UoYWxsUmVsYXRpdmVWYWx1ZXNbaV0pKTsKKwkJfSAvLyBmb3IKKwl9IC8vIHRlc3RHZXRBbGxIaXN0b3JpY1JlbGF0aXZlVmFsdWVzCisKKwlwdWJsaWMgdm9pZCB0ZXN0R2V0RWFybGllc3RUaW1lVmFsdWUoKSB7CisJCS8vIFRPRE8gaW1wbGVtZW50IHRlc3RHZXRFYXJsaWVzdFRpbWVWYWx1ZQorCQlmaW5hbCBSZWxhdGl2ZVZhbHVlSGlzdG9yeVByb3ZpZGVyIHJWSFAgPSBnZXRBZGFwdGVyVG9UZXN0KCk7CisJCWFzc2VydE5vdE51bGwoclZIUCk7CisJCWZpbmFsIFNURU1UaW1lIGVhcmxpZXN0VGltZSA9IHJWSFAuZ2V0RWFybGllc3RUaW1lVmFsdWUoKTsKKwkJYXNzZXJ0VHJ1ZShlYXJsaWVzdFRpbWUgIT0gbnVsbCk7CisJfSAvLyB0ZXN0R2V0RWFybGllc3RUaW1lVmFsdWUKKworCS8qKgorCSAqIEByZXR1cm4KKwkgKi8KKwlwcml2YXRlIFJlbGF0aXZlVmFsdWVIaXN0b3J5UHJvdmlkZXIgZ2V0QWRhcHRlclRvVGVzdCgpIHsKKwkJZmluYWwgUmVsYXRpdmVWYWx1ZUhpc3RvcnlQcm92aWRlckFkYXB0ZXJGYWN0b3J5IGZpeHR1cmUgPSBnZXRGaXh0dXJlKCk7CisJCWZpbmFsIERpc2Vhc2VNb2RlbExhYmVsIGRtbCA9IGdldERpc2Vhc2VNb2RlbExhYmVsVG9UZXN0KCk7CisKKwkJZmluYWwgUmVsYXRpdmVWYWx1ZUhpc3RvcnlQcm92aWRlciByZWxhdGl2ZVZhbHVlSGlzdG9yeVByb3ZpZGVyID0gKFJlbGF0aXZlVmFsdWVIaXN0b3J5UHJvdmlkZXIpIGZpeHR1cmUKKwkJCQkuYWRhcHQoZG1sLCBSZWxhdGl2ZVZhbHVlSGlzdG9yeVByb3ZpZGVyLmNsYXNzKTsKKwkJcmV0dXJuIHJlbGF0aXZlVmFsdWVIaXN0b3J5UHJvdmlkZXI7CisJfQorCisJLyoqCisJICogQHJldHVybgorCSAqLworCXByaXZhdGUgRGlzZWFzZU1vZGVsTGFiZWwgZ2V0RGlzZWFzZU1vZGVsTGFiZWxUb1Rlc3QoKSB7CisJCXJldHVybiBTdGFuZGFyZFJlbGF0aXZlVmFsdWVQcm92aWRlckFkYXB0ZXJGYWN0b3J5VGVzdAorCQkJCS5jcmVhdGVTRUlSTGFiZWwoKTsKKwl9IC8vIGdldERpc2Vhc2VNb2RlbExhYmVsVG9UZXN0CisKKwkvKioKKwkgKiBAcGFyYW0gcmVsYXRpdmVWYWx1ZQorCSAqIEByZXR1cm4gPGNvZGU+dHJ1ZTwvY29kZT4gaWYgdGhlIHZhbHVlIGlzIGJldHdlZW4gMC4wIGFuZCAxLjAsCisJICogICAgICAgICBpbmNsdXNpdmUuCisJICovCisJcHJpdmF0ZSBib29sZWFuIHZhbHVlV2l0aGluUmFuZ2UoZG91YmxlIHJlbGF0aXZlVmFsdWUpIHsKKwkJcmV0dXJuIHJlbGF0aXZlVmFsdWUgPj0gMC4wICYmIHJlbGF0aXZlVmFsdWUgPD0gMS4wOworCX0KKworfSAvLyBTdGFuZGFyZFJlbGF0aXZlVmFsdWVIaXN0b3J5UHJvdmlkZXJBZGFwdGVyRmFjdG9yeVRlc3QKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS90ZXN0cy9kaXNlYXNlbW9kZWxzL3N0YW5kYXJkL3Byb3ZpZGVyL3Rlc3RzL1N0YW5kYXJkUmVsYXRpdmVWYWx1ZVByb3ZpZGVyQWRhcHRlckZhY3RvcnlUZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdGVzdHMvZGlzZWFzZW1vZGVscy9zdGFuZGFyZC9wcm92aWRlci90ZXN0cy9TdGFuZGFyZFJlbGF0aXZlVmFsdWVQcm92aWRlckFkYXB0ZXJGYWN0b3J5VGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM1MWFlZmYKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdGVzdHMvZGlzZWFzZW1vZGVscy9zdGFuZGFyZC9wcm92aWRlci90ZXN0cy9TdGFuZGFyZFJlbGF0aXZlVmFsdWVQcm92aWRlckFkYXB0ZXJGYWN0b3J5VGVzdC5qYXZhCkBAIC0wLDAgKzEsNDEyIEBACisvLyBTdGFuZGFyZFJlbGF0aXZlVmFsdWVQcm92aWRlckFkYXB0ZXJGYWN0b3J5VGVzdC5qYXZhCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5wcm92aWRlci50ZXN0czsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtUHJvcGVydHlEZXNjcmlwdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuYWRhcHRlcnMucmVsYXRpdmV2YWx1ZS5SZWxhdGl2ZVZhbHVlUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5hZGFwdGVycy5yZWxhdGl2ZXZhbHVlLlJlbGF0aXZlVmFsdWVQcm92aWRlckFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuYWRhcHRlcnMucmVsYXRpdmV2YWx1ZS5SZWxhdGl2ZVZhbHVlUHJvdmlkZXJBZGFwdGVyRmFjdG9yeVRlc3Q7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLkRpc2Vhc2VNb2RlbExhYmVsVmFsdWU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlNFSVJMYWJlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU0VJUkxhYmVsVmFsdWU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlNJTGFiZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlNJTGFiZWxWYWx1ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU0lSTGFiZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlNJUkxhYmVsVmFsdWU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmRQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5wcm92aWRlci5TdGFuZGFyZFJlbGF0aXZlVmFsdWVQcm92aWRlckFkYXB0ZXJGYWN0b3J5OworCisvKioKKyAqIFRoaXMgY2xhc3MgaXMgYSBKVW5pdCB0ZXN0IGNhc2UgZm9yCisgKiB7QGxpbmsgU3RhbmRhcmRSZWxhdGl2ZVZhbHVlUHJvdmlkZXJBZGFwdGVyRmFjdG9yeX0uCisgKi8KK0BTdXBwcmVzc1dhcm5pbmdzKCJhbGwiKQorcHVibGljIGNsYXNzIFN0YW5kYXJkUmVsYXRpdmVWYWx1ZVByb3ZpZGVyQWRhcHRlckZhY3RvcnlUZXN0IGV4dGVuZHMKKwkJUmVsYXRpdmVWYWx1ZVByb3ZpZGVyQWRhcHRlckZhY3RvcnlUZXN0IHsKKworCS8qKgorCSAqIFRoZSBudW1iZXIgb2YgcHJvcGVydGllcyBpbiBhIGRpc2Vhc2UgbW9kZWwgbGFiZWwgdmFsdWUgKEJpcnRocywgRGVhdGhzLAorCSAqIERlYXRocyBmcm9tIERpc2Vhc2UgYXJlIHJlbGF0aXZlIHRvIHRvdGFsIHBvcHVsYXRpb24pCisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgTlVNX0RJU0VBU0VfTU9ERUxfTEFCRUxfVkFMVUVfUFJPUEVSVElFUyA9IDI7CisKKwkvKioKKwkgKiBUaGUgbnVtYmVyIG9mIHByb3BlcnRpZXMgaW4gYSBTSSBkaXNlYXNlIG1vZGVsIGxhYmVsIHZhbHVlIChJICsKKwkgKiBETUxWUCkKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIGludCBOVU1fU0lfRElTRUFTRV9NT0RFTF9MQUJFTF9WQUxVRV9QUk9QRVJUSUVTID0gMSArIE5VTV9ESVNFQVNFX01PREVMX0xBQkVMX1ZBTFVFX1BST1BFUlRJRVM7CisKKwkvKioKKwkgKiBUaGUgbnVtYmVyIG9mIHByb3BlcnRpZXMgaW4gYSBTSVIgZGlzZWFzZSBtb2RlbCBsYWJlbCB2YWx1ZSAoUywgSSwgSVIsIElGLCBpbmNpZGVuY2UgKworCSAqIFIgKyBETUxWUCkKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIGludCBOVU1fU0lSX0RJU0VBU0VfTU9ERUxfTEFCRUxfVkFMVUVfUFJPUEVSVElFUyA9IE5VTV9TSV9ESVNFQVNFX01PREVMX0xBQkVMX1ZBTFVFX1BST1BFUlRJRVMgKyAxOworCisJLyoqCisJICogVGhlIG51bWJlciBvZiBwcm9wZXJ0aWVzIGluIGEgU0VJUiBkaXNlYXNlIG1vZGVsIGxhYmVsIHZhbHVlIChTLCBFLCBJLCBJUiwKKwkgKiBJRiwgaW5jaWRlbmNlICsgUiArIERNTFZQKQorCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IE5VTV9TRUlSX0RJU0VBU0VfTU9ERUxfTEFCRUxfVkFMVUVfUFJPUEVSVElFUyA9IE5VTV9TSVJfRElTRUFTRV9NT0RFTF9MQUJFTF9WQUxVRV9QUk9QRVJUSUVTICsgMTsKKworCS8qKgorCSAqIFRoZSBpbml0aWFsIG51bWJlciBvZiBiaXJ0aHMgZm9yIGRpc2Vhc2UgbW9kZWwgbGFiZWwgdmFsdWVzLgorCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgZG91YmxlIE5VTV9ESVNFQVNFX01PREVMX0xBQkVMX1ZBTFVFX0JJUlRIUyA9IDEwMDsKKworCS8qKgorCSAqIFRoZSBpbml0aWFsIG51bWJlciBvZiAodG90YWwpIGRlYXRocyBmb3IgZGlzZWFzZSBtb2RlbCBsYWJlbCB2YWx1ZXMuCisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBkb3VibGUgTlVNX0RJU0VBU0VfTU9ERUxfTEFCRUxfVkFMVUVfREVBVEhTID0gMTA7CisKKwkvKioKKwkgKiBUaGUgaW5pdGlhbCBudW1iZXIgb2YgZGVhdGhzIGZyb20gZGlzZWFzZSBmb3IgZGlzZWFzZSBtb2RlbCBsYWJlbCB2YWx1ZXMuCisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBkb3VibGUgTlVNX0RJU0VBU0VfTU9ERUxfTEFCRUxfVkFMVUVfRElTRUFTRV9ERUFUSFMgPSAxOworCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBkb3VibGUgTlVNX1NfUE9QVUxBVElPTiA9IDY0OworCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBkb3VibGUgTlVNX0VfUE9QVUxBVElPTiA9IDMyOworCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBkb3VibGUgTlVNX0lfUE9QVUxBVElPTiA9IDE2OworCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBkb3VibGUgTlVNX1JfUE9QVUxBVElPTiA9IDg7CisKKwlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIGRvdWJsZSBUT1RBTF9TSV9QT1BVTEFUSU9OID0gTlVNX1NfUE9QVUxBVElPTgorCQkJKyBOVU1fSV9QT1BVTEFUSU9OOworCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBkb3VibGUgVE9UQUxfU0lSX1BPUFVMQVRJT04gPSBUT1RBTF9TSV9QT1BVTEFUSU9OCisJCQkrIE5VTV9SX1BPUFVMQVRJT047CisKKwlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIGRvdWJsZSBUT1RBTF9TRUlSX1BPUFVMQVRJT04gPSBUT1RBTF9TSVJfUE9QVUxBVElPTgorCQkJKyBOVU1fRV9QT1BVTEFUSU9OOworCisJcHJpdmF0ZSBTdGFuZGFyZFJlbGF0aXZlVmFsdWVQcm92aWRlckFkYXB0ZXJGYWN0b3J5IGdldEZpeHR1cmUoKSB7CisJCXJldHVybiAoU3RhbmRhcmRSZWxhdGl2ZVZhbHVlUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSkgZml4dHVyZTsKKwl9IC8vIFNwYXRpYWxQcm92aWRlckFkYXB0ZXJGYWN0b3J5CisKKwkvKioKKwkgKiBAc2VlIGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZSNzZXRVcCgpCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgc2V0VXAoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJc2V0Rml4dHVyZShjcmVhdGVGaXh0dXJlKCkpOworCX0KKworCS8qKgorCSAqIEBzZWUganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlI3RlYXJEb3duKCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgdm9pZCB0ZWFyRG93bigpIHRocm93cyBFeGNlcHRpb24geworCQlzZXRGaXh0dXJlKG51bGwpOworCX0KKworCS8qKgorCSAqIEByZXR1cm4gYSBmYWN0b3J5IGluc3RhbmNlIGZvciB0ZXN0aW5nIHB1cnBvc2VzLgorCSAqLworCXByb3RlY3RlZCBTdGFuZGFyZFJlbGF0aXZlVmFsdWVQcm92aWRlckFkYXB0ZXJGYWN0b3J5IGNyZWF0ZUZpeHR1cmUoKSB7CisJCXJldHVybiBuZXcgU3RhbmRhcmRSZWxhdGl2ZVZhbHVlUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSgpOworCX0gLy8gY3JlYXRlRml4dHVyZQorCisJLyoqCisJICogQHBhcmFtIGxhYmVsCisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCB2b2lkIGluaXRpYWxpemVEaXNlYXNlTW9kZWxMYWJlbCgKKwkJCWZpbmFsIFN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWwgbGFiZWwpIHsKKwkJaW5pdGlhbGl6ZURpc2Vhc2VNb2RlbExhYmVsVmFsdWVzKChEaXNlYXNlTW9kZWxMYWJlbFZhbHVlKWxhYmVsCisJCQkJLmdldEN1cnJlbnRWYWx1ZSgpKTsKKwkJaW5pdGlhbGl6ZURpc2Vhc2VNb2RlbExhYmVsVmFsdWVzKChEaXNlYXNlTW9kZWxMYWJlbFZhbHVlKWxhYmVsCisJCQkJLmdldE5leHRWYWx1ZSgpKTsKKwl9IC8vIGluaXRpYWxpemVEaXNlYXNlTW9kZWxMYWJlbAorCisJLyoqCisJICogQHBhcmFtIGxhYmVsVmFsdWUKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIHZvaWQgaW5pdGlhbGl6ZURpc2Vhc2VNb2RlbExhYmVsVmFsdWVzKAorCQkJZmluYWwgRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZSBkbWx2KSB7CisvLwkJZG1sdi5zZXREaXNlYXNlRGVhdGhzKE5VTV9ESVNFQVNFX01PREVMX0xBQkVMX1ZBTFVFX0RJU0VBU0VfREVBVEhTKTsKKwl9IC8vIGluaXRpYWxpemVkRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZXMKKworCS8qKgorCSAqIEByZXR1cm4KKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIFNFSVJMYWJlbCBjcmVhdGVTRUlSTGFiZWwoKSB7CisJCWZpbmFsIFNFSVJMYWJlbCBzZWlyTGFiZWwgPSBTdGFuZGFyZEZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZVNFSVJMYWJlbCgpOworCQorCQlpbml0aWFsaXplRGlzZWFzZU1vZGVsTGFiZWwoc2VpckxhYmVsKTsKKwkJKChTRUlSTGFiZWxWYWx1ZSlzZWlyTGFiZWwuZ2V0Q3VycmVudFZhbHVlKCkpLnNldFMoTlVNX1NfUE9QVUxBVElPTik7CisJCSgoU0VJUkxhYmVsVmFsdWUpc2VpckxhYmVsLmdldEN1cnJlbnRWYWx1ZSgpKS5zZXRFKE5VTV9FX1BPUFVMQVRJT04pOworCQkoKFNFSVJMYWJlbFZhbHVlKXNlaXJMYWJlbC5nZXRDdXJyZW50VmFsdWUoKSkuc2V0SShOVU1fSV9QT1BVTEFUSU9OKTsKKwkJKChTRUlSTGFiZWxWYWx1ZSlzZWlyTGFiZWwuZ2V0Q3VycmVudFZhbHVlKCkpLnNldFIoTlVNX1JfUE9QVUxBVElPTik7CisJCXJldHVybiBzZWlyTGFiZWw7CisJfSAvLyBjcmVhdGVTRUlSTGFiZWwKKworCS8qKgorCSAqIFRlc3QgbWV0aG9kIGZvcgorCSAqIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQucHJvdmlkZXIuU3RhbmRhcmRSZWxhdGl2ZVZhbHVlUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSNjcmVhdGVTSUxhYmVsQWRhcHRlcigpfS4KKwkgKi8KKwlwdWJsaWMgdm9pZCB0ZXN0Q3JlYXRlU0lMYWJlbEFkYXB0ZXIoKSB7CisJCWZpbmFsIFN0YW5kYXJkUmVsYXRpdmVWYWx1ZVByb3ZpZGVyQWRhcHRlckZhY3RvcnkgZml4dHVyZSA9IGdldEZpeHR1cmUoKTsKKwkJZmluYWwgU0lMYWJlbCBzSUxhYmVsID0gU3RhbmRhcmRGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVTSUxhYmVsKCk7CisKKwkJaW5pdGlhbGl6ZURpc2Vhc2VNb2RlbExhYmVsKHNJTGFiZWwpOworCQkoKFNJTGFiZWxWYWx1ZSlzSUxhYmVsLmdldEN1cnJlbnRWYWx1ZSgpKS5zZXRTKE5VTV9TX1BPUFVMQVRJT04pOworCQkoKFNJTGFiZWxWYWx1ZSlzSUxhYmVsLmdldEN1cnJlbnRWYWx1ZSgpKS5zZXRJKE5VTV9JX1BPUFVMQVRJT04pOworCisJCWZpbmFsIFJlbGF0aXZlVmFsdWVQcm92aWRlciByZWxhdGl2ZVZhbHVlUHJvdmlkZXIgPSAoUmVsYXRpdmVWYWx1ZVByb3ZpZGVyKSBmaXh0dXJlCisJCQkJLmFkYXB0KHNJTGFiZWwsIFJlbGF0aXZlVmFsdWVQcm92aWRlci5jbGFzcyk7CisKKwkJYXNzZXJ0Tm90TnVsbChyZWxhdGl2ZVZhbHVlUHJvdmlkZXIpOworCisJCWZpbmFsIExpc3Q8SUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I+IHByb3BlcnRpZXMgPSByZWxhdGl2ZVZhbHVlUHJvdmlkZXIKKwkJCQkuZ2V0UHJvcGVydGllcygpOworCQlhc3NlcnROb3ROdWxsKHByb3BlcnRpZXMpOworCisJCWFzc2VydFRydWUocHJvcGVydGllcy5zaXplKCkgPT0gTlVNX1NJX0RJU0VBU0VfTU9ERUxfTEFCRUxfVkFMVUVfUFJPUEVSVElFUyk7CisKKwkJYXNzZXJ0VHJ1ZShyZWxhdGl2ZVZhbHVlUHJvdmlkZXIKKwkJCQkuZ2V0UmVsYXRpdmVWYWx1ZShTdGFuZGFyZFBhY2thZ2UuZUlOU1RBTkNFCisJCQkJCQkuZ2V0U3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbFZhbHVlX1MoKSkgPT0gTlVNX1NfUE9QVUxBVElPTgorCQkJCS8gVE9UQUxfU0lfUE9QVUxBVElPTik7CisKKwkJYXNzZXJ0VHJ1ZShyZWxhdGl2ZVZhbHVlUHJvdmlkZXIKKwkJCQkuZ2V0UmVsYXRpdmVWYWx1ZShTdGFuZGFyZFBhY2thZ2UuZUlOU1RBTkNFLmdldFNJTGFiZWxWYWx1ZV9JKCkpID09IE5VTV9JX1BPUFVMQVRJT04KKwkJCQkvIFRPVEFMX1NJX1BPUFVMQVRJT04pOworCisJfSAvLyB0ZXN0Q3JlYXRlU0lMYWJlbEFkYXB0ZXIKKworCS8qKgorCSAqIFRlc3QgbWV0aG9kIGZvcgorCSAqIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQucHJvdmlkZXIuU3RhbmRhcmRSZWxhdGl2ZVZhbHVlUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSNjcmVhdGVTSVJMYWJlbEFkYXB0ZXIoKX0uCisJICovCisJcHVibGljIHZvaWQgdGVzdENyZWF0ZVNJUkxhYmVsQWRhcHRlcigpIHsKKwkJZmluYWwgU3RhbmRhcmRSZWxhdGl2ZVZhbHVlUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSBmaXh0dXJlID0gZ2V0Rml4dHVyZSgpOworCQlmaW5hbCBTSVJMYWJlbCBzaXJMYWJlbCA9IFN0YW5kYXJkRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlU0lSTGFiZWwoKTsKKworCQlpbml0aWFsaXplRGlzZWFzZU1vZGVsTGFiZWwoc2lyTGFiZWwpOworCQkoKFNJUkxhYmVsVmFsdWUpc2lyTGFiZWwuZ2V0Q3VycmVudFZhbHVlKCkpLnNldFMoTlVNX1NfUE9QVUxBVElPTik7CisJCSgoU0lSTGFiZWxWYWx1ZSlzaXJMYWJlbC5nZXRDdXJyZW50VmFsdWUoKSkuc2V0SShOVU1fSV9QT1BVTEFUSU9OKTsKKwkJKChTSVJMYWJlbFZhbHVlKXNpckxhYmVsLmdldEN1cnJlbnRWYWx1ZSgpKS5zZXRSKE5VTV9SX1BPUFVMQVRJT04pOworCisJCWZpbmFsIFJlbGF0aXZlVmFsdWVQcm92aWRlciByZWxhdGl2ZVZhbHVlUHJvdmlkZXIgPSAoUmVsYXRpdmVWYWx1ZVByb3ZpZGVyKSBmaXh0dXJlCisJCQkJLmFkYXB0KHNpckxhYmVsLCBSZWxhdGl2ZVZhbHVlUHJvdmlkZXIuY2xhc3MpOworCisJCWFzc2VydE5vdE51bGwocmVsYXRpdmVWYWx1ZVByb3ZpZGVyKTsKKworCQlmaW5hbCBMaXN0PElJdGVtUHJvcGVydHlEZXNjcmlwdG9yPiBwcm9wZXJ0aWVzID0gcmVsYXRpdmVWYWx1ZVByb3ZpZGVyCisJCQkJLmdldFByb3BlcnRpZXMoKTsKKwkJYXNzZXJ0Tm90TnVsbChwcm9wZXJ0aWVzKTsKKworCQlhc3NlcnRUcnVlKHByb3BlcnRpZXMuc2l6ZSgpID09IE5VTV9TSVJfRElTRUFTRV9NT0RFTF9MQUJFTF9WQUxVRV9QUk9QRVJUSUVTKTsKKworCQlhc3NlcnRUcnVlKHJlbGF0aXZlVmFsdWVQcm92aWRlcgorCQkJCS5nZXRSZWxhdGl2ZVZhbHVlKFN0YW5kYXJkUGFja2FnZS5lSU5TVEFOQ0UKKwkJCQkJCS5nZXRTdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsVmFsdWVfUygpKSA9PSBOVU1fU19QT1BVTEFUSU9OCisJCQkJLyBUT1RBTF9TSVJfUE9QVUxBVElPTik7CisKKwkJYXNzZXJ0VHJ1ZShyZWxhdGl2ZVZhbHVlUHJvdmlkZXIKKwkJCQkuZ2V0UmVsYXRpdmVWYWx1ZShTdGFuZGFyZFBhY2thZ2UuZUlOU1RBTkNFLmdldFNJTGFiZWxWYWx1ZV9JKCkpID09IE5VTV9JX1BPUFVMQVRJT04KKwkJCQkvIFRPVEFMX1NJUl9QT1BVTEFUSU9OKTsKKworCQlhc3NlcnRUcnVlKHJlbGF0aXZlVmFsdWVQcm92aWRlcgorCQkJCS5nZXRSZWxhdGl2ZVZhbHVlKFN0YW5kYXJkUGFja2FnZS5lSU5TVEFOQ0UKKwkJCQkJCS5nZXRTSVJMYWJlbFZhbHVlX1IoKSkgPT0gTlVNX1JfUE9QVUxBVElPTgorCQkJCS8gVE9UQUxfU0lSX1BPUFVMQVRJT04pOworCX0gLy8gdGVzdENyZWF0ZVNJUkxhYmVsQWRhcHRlcgorCisJLyoqCisJICogVGVzdCBtZXRob2QgZm9yCisJICoge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5wcm92aWRlci5TdGFuZGFyZFJlbGF0aXZlVmFsdWVQcm92aWRlckFkYXB0ZXJGYWN0b3J5I2NyZWF0ZVNFSVJMYWJlbEFkYXB0ZXIoKX0uCisJICovCisJcHVibGljIHZvaWQgdGVzdENyZWF0ZVNFSVJMYWJlbEFkYXB0ZXIoKSB7CisJCWZpbmFsIFN0YW5kYXJkUmVsYXRpdmVWYWx1ZVByb3ZpZGVyQWRhcHRlckZhY3RvcnkgZml4dHVyZSA9IGdldEZpeHR1cmUoKTsKKwkJZmluYWwgU0VJUkxhYmVsIHNlaXJMYWJlbCA9IGNyZWF0ZVNFSVJMYWJlbCgpOworCisJCWZpbmFsIFJlbGF0aXZlVmFsdWVQcm92aWRlciByZWxhdGl2ZVZhbHVlUHJvdmlkZXIgPSAoUmVsYXRpdmVWYWx1ZVByb3ZpZGVyKSBmaXh0dXJlCisJCQkJLmFkYXB0KHNlaXJMYWJlbCwgUmVsYXRpdmVWYWx1ZVByb3ZpZGVyLmNsYXNzKTsKKworCQlhc3NlcnROb3ROdWxsKHJlbGF0aXZlVmFsdWVQcm92aWRlcik7CisKKwkJZmluYWwgTGlzdDxJSXRlbVByb3BlcnR5RGVzY3JpcHRvcj4gcHJvcGVydGllcyA9IHJlbGF0aXZlVmFsdWVQcm92aWRlcgorCQkJCS5nZXRQcm9wZXJ0aWVzKCk7CisJCWFzc2VydE5vdE51bGwocHJvcGVydGllcyk7CisJCWFzc2VydFRydWUocHJvcGVydGllcy5zaXplKCkgPT0gTlVNX1NFSVJfRElTRUFTRV9NT0RFTF9MQUJFTF9WQUxVRV9QUk9QRVJUSUVTKTsKKworCQlhc3NlcnRUcnVlKHJlbGF0aXZlVmFsdWVQcm92aWRlcgorCQkJCS5nZXRSZWxhdGl2ZVZhbHVlKFN0YW5kYXJkUGFja2FnZS5lSU5TVEFOQ0UKKwkJCQkJCS5nZXRTdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsVmFsdWVfUygpKSA9PSBOVU1fU19QT1BVTEFUSU9OCisJCQkJLyBUT1RBTF9TRUlSX1BPUFVMQVRJT04pOworCisJCWFzc2VydFRydWUocmVsYXRpdmVWYWx1ZVByb3ZpZGVyCisJCQkJLmdldFJlbGF0aXZlVmFsdWUoU3RhbmRhcmRQYWNrYWdlLmVJTlNUQU5DRQorCQkJCQkJLmdldFNFSVJMYWJlbFZhbHVlX0UoKSkgPT0gTlVNX0VfUE9QVUxBVElPTgorCQkJCS8gVE9UQUxfU0VJUl9QT1BVTEFUSU9OKTsKKworCQlhc3NlcnRUcnVlKHJlbGF0aXZlVmFsdWVQcm92aWRlcgorCQkJCS5nZXRSZWxhdGl2ZVZhbHVlKFN0YW5kYXJkUGFja2FnZS5lSU5TVEFOQ0UuZ2V0U0lMYWJlbFZhbHVlX0koKSkgPT0gTlVNX0lfUE9QVUxBVElPTgorCQkJCS8gVE9UQUxfU0VJUl9QT1BVTEFUSU9OKTsKKworCQlhc3NlcnRUcnVlKHJlbGF0aXZlVmFsdWVQcm92aWRlcgorCQkJCS5nZXRSZWxhdGl2ZVZhbHVlKFN0YW5kYXJkUGFja2FnZS5lSU5TVEFOQ0UKKwkJCQkJCS5nZXRTSVJMYWJlbFZhbHVlX1IoKSkgPT0gTlVNX1JfUE9QVUxBVElPTgorCQkJCS8gVE9UQUxfU0VJUl9QT1BVTEFUSU9OKTsKKwl9IC8vIHRlc3RDcmVhdGVTRUlSTGFiZWxBZGFwdGVyCisKKwkvKioKKwkgKiBUZXN0IG1ldGhvZCBmb3IKKwkgKiB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLnByb3ZpZGVyLlN0YW5kYXJkUmVsYXRpdmVWYWx1ZVByb3ZpZGVyQWRhcHRlckZhY3RvcnkjY3JlYXRlU0lMYWJlbFZhbHVlQWRhcHRlcigpfS4KKwkgKi8KKwlwdWJsaWMgdm9pZCB0ZXN0Q3JlYXRlU0lMYWJlbFZhbHVlQWRhcHRlcigpIHsKKwkJZmluYWwgU3RhbmRhcmRSZWxhdGl2ZVZhbHVlUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSBmaXh0dXJlID0gZ2V0Rml4dHVyZSgpOworCQlmaW5hbCBTSUxhYmVsVmFsdWUgc0lMYWJlbFZhbHVlID0gU3RhbmRhcmRGYWN0b3J5LmVJTlNUQU5DRQorCQkJCS5jcmVhdGVTSUxhYmVsVmFsdWUoKTsKKworCQlpbml0aWFsaXplRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZXMoc0lMYWJlbFZhbHVlKTsKKwkJc0lMYWJlbFZhbHVlLnNldFMoTlVNX1NfUE9QVUxBVElPTik7CisJCXNJTGFiZWxWYWx1ZS5zZXRJKE5VTV9JX1BPUFVMQVRJT04pOworCisJCWZpbmFsIFJlbGF0aXZlVmFsdWVQcm92aWRlciByZWxhdGl2ZVZhbHVlUHJvdmlkZXIgPSAoUmVsYXRpdmVWYWx1ZVByb3ZpZGVyKSBmaXh0dXJlCisJCQkJLmFkYXB0KHNJTGFiZWxWYWx1ZSwgUmVsYXRpdmVWYWx1ZVByb3ZpZGVyLmNsYXNzKTsKKworCQlhc3NlcnROb3ROdWxsKHJlbGF0aXZlVmFsdWVQcm92aWRlcik7CisKKwkJZmluYWwgTGlzdDxJSXRlbVByb3BlcnR5RGVzY3JpcHRvcj4gcHJvcGVydGllcyA9IHJlbGF0aXZlVmFsdWVQcm92aWRlcgorCQkJCS5nZXRQcm9wZXJ0aWVzKCk7CisJCWFzc2VydE5vdE51bGwocHJvcGVydGllcyk7CisKKwkJYXNzZXJ0VHJ1ZShwcm9wZXJ0aWVzLnNpemUoKSA9PSBOVU1fU0lfRElTRUFTRV9NT0RFTF9MQUJFTF9WQUxVRV9QUk9QRVJUSUVTKTsKKworCQlhc3NlcnRUcnVlKHJlbGF0aXZlVmFsdWVQcm92aWRlcgorCQkJCS5nZXRSZWxhdGl2ZVZhbHVlKFN0YW5kYXJkUGFja2FnZS5lSU5TVEFOQ0UKKwkJCQkJCS5nZXRTdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsVmFsdWVfUygpKSA9PSBOVU1fU19QT1BVTEFUSU9OCisJCQkJLyBUT1RBTF9TSV9QT1BVTEFUSU9OKTsKKworCQlhc3NlcnRUcnVlKHJlbGF0aXZlVmFsdWVQcm92aWRlcgorCQkJCS5nZXRSZWxhdGl2ZVZhbHVlKFN0YW5kYXJkUGFja2FnZS5lSU5TVEFOQ0UuZ2V0U0lMYWJlbFZhbHVlX0koKSkgPT0gTlVNX0lfUE9QVUxBVElPTgorCQkJCS8gVE9UQUxfU0lfUE9QVUxBVElPTik7CisKKwl9IC8vIHRlc3RDcmVhdGVTSUxhYmVsVmFsdWVBZGFwdGVyCisKKwkvKioKKwkgKiBUZXN0IG1ldGhvZCBmb3IKKwkgKiB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLnByb3ZpZGVyLlN0YW5kYXJkUmVsYXRpdmVWYWx1ZVByb3ZpZGVyQWRhcHRlckZhY3RvcnkjY3JlYXRlU0lSTGFiZWxWYWx1ZUFkYXB0ZXIoKX0uCisJICovCisJcHVibGljIHZvaWQgdGVzdENyZWF0ZVNJUkxhYmVsVmFsdWVBZGFwdGVyKCkgeworCQlmaW5hbCBTdGFuZGFyZFJlbGF0aXZlVmFsdWVQcm92aWRlckFkYXB0ZXJGYWN0b3J5IGZpeHR1cmUgPSBnZXRGaXh0dXJlKCk7CisJCWZpbmFsIFNJUkxhYmVsVmFsdWUgc0lSTGFiZWxWYWx1ZSA9IFN0YW5kYXJkRmFjdG9yeS5lSU5TVEFOQ0UKKwkJCQkuY3JlYXRlU0lSTGFiZWxWYWx1ZSgpOworCisJCWluaXRpYWxpemVEaXNlYXNlTW9kZWxMYWJlbFZhbHVlcyhzSVJMYWJlbFZhbHVlKTsKKwkJc0lSTGFiZWxWYWx1ZS5zZXRTKE5VTV9TX1BPUFVMQVRJT04pOworCQlzSVJMYWJlbFZhbHVlLnNldEkoTlVNX0lfUE9QVUxBVElPTik7CisJCXNJUkxhYmVsVmFsdWUuc2V0UihOVU1fUl9QT1BVTEFUSU9OKTsKKworCQlmaW5hbCBSZWxhdGl2ZVZhbHVlUHJvdmlkZXIgcmVsYXRpdmVWYWx1ZVByb3ZpZGVyID0gKFJlbGF0aXZlVmFsdWVQcm92aWRlcikgZml4dHVyZQorCQkJCS5hZGFwdChzSVJMYWJlbFZhbHVlLCBSZWxhdGl2ZVZhbHVlUHJvdmlkZXIuY2xhc3MpOworCisJCWFzc2VydE5vdE51bGwocmVsYXRpdmVWYWx1ZVByb3ZpZGVyKTsKKworCQlmaW5hbCBMaXN0PElJdGVtUHJvcGVydHlEZXNjcmlwdG9yPiBwcm9wZXJ0aWVzID0gcmVsYXRpdmVWYWx1ZVByb3ZpZGVyCisJCQkJLmdldFByb3BlcnRpZXMoKTsKKwkJYXNzZXJ0Tm90TnVsbChwcm9wZXJ0aWVzKTsKKworCQlhc3NlcnRUcnVlKHByb3BlcnRpZXMuc2l6ZSgpID09IE5VTV9TSVJfRElTRUFTRV9NT0RFTF9MQUJFTF9WQUxVRV9QUk9QRVJUSUVTKTsKKworCQlhc3NlcnRUcnVlKHJlbGF0aXZlVmFsdWVQcm92aWRlcgorCQkJCS5nZXRSZWxhdGl2ZVZhbHVlKFN0YW5kYXJkUGFja2FnZS5lSU5TVEFOQ0UKKwkJCQkJCS5nZXRTdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsVmFsdWVfUygpKSA9PSBOVU1fU19QT1BVTEFUSU9OCisJCQkJLyBUT1RBTF9TSVJfUE9QVUxBVElPTik7CisKKwkJYXNzZXJ0VHJ1ZShyZWxhdGl2ZVZhbHVlUHJvdmlkZXIKKwkJCQkuZ2V0UmVsYXRpdmVWYWx1ZShTdGFuZGFyZFBhY2thZ2UuZUlOU1RBTkNFLmdldFNJTGFiZWxWYWx1ZV9JKCkpID09IE5VTV9JX1BPUFVMQVRJT04KKwkJCQkvIFRPVEFMX1NJUl9QT1BVTEFUSU9OKTsKKworCQlhc3NlcnRUcnVlKHJlbGF0aXZlVmFsdWVQcm92aWRlcgorCQkJCS5nZXRSZWxhdGl2ZVZhbHVlKFN0YW5kYXJkUGFja2FnZS5lSU5TVEFOQ0UKKwkJCQkJCS5nZXRTSVJMYWJlbFZhbHVlX1IoKSkgPT0gTlVNX1JfUE9QVUxBVElPTgorCQkJCS8gVE9UQUxfU0lSX1BPUFVMQVRJT04pOworCX0gLy8gdGVzdENyZWF0ZVNJUkxhYmVsVmFsdWVBZGFwdGVyCisKKwkvKioKKwkgKiBUZXN0IG1ldGhvZCBmb3IKKwkgKiB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLnByb3ZpZGVyLlN0YW5kYXJkUmVsYXRpdmVWYWx1ZVByb3ZpZGVyQWRhcHRlckZhY3RvcnkjY3JlYXRlU0VJUkxhYmVsVmFsdWVBZGFwdGVyKCl9LgorCSAqLworCXB1YmxpYyB2b2lkIHRlc3RDcmVhdGVTRUlSTGFiZWxWYWx1ZUFkYXB0ZXIoKSB7CisJCWZpbmFsIFN0YW5kYXJkUmVsYXRpdmVWYWx1ZVByb3ZpZGVyQWRhcHRlckZhY3RvcnkgZml4dHVyZSA9IGdldEZpeHR1cmUoKTsKKwkJZmluYWwgU0VJUkxhYmVsVmFsdWUgc0VJUkxhYmVsVmFsdWUgPSBTdGFuZGFyZEZhY3RvcnkuZUlOU1RBTkNFCisJCQkJLmNyZWF0ZVNFSVJMYWJlbFZhbHVlKCk7CisKKwkJaW5pdGlhbGl6ZURpc2Vhc2VNb2RlbExhYmVsVmFsdWVzKHNFSVJMYWJlbFZhbHVlKTsKKwkJc0VJUkxhYmVsVmFsdWUuc2V0UyhOVU1fU19QT1BVTEFUSU9OKTsKKwkJc0VJUkxhYmVsVmFsdWUuc2V0RShOVU1fRV9QT1BVTEFUSU9OKTsKKwkJc0VJUkxhYmVsVmFsdWUuc2V0SShOVU1fSV9QT1BVTEFUSU9OKTsKKwkJc0VJUkxhYmVsVmFsdWUuc2V0UihOVU1fUl9QT1BVTEFUSU9OKTsKKworCQlmaW5hbCBSZWxhdGl2ZVZhbHVlUHJvdmlkZXIgcmVsYXRpdmVWYWx1ZVByb3ZpZGVyID0gKFJlbGF0aXZlVmFsdWVQcm92aWRlcikgZml4dHVyZQorCQkJCS5hZGFwdChzRUlSTGFiZWxWYWx1ZSwgUmVsYXRpdmVWYWx1ZVByb3ZpZGVyLmNsYXNzKTsKKworCQlhc3NlcnROb3ROdWxsKHJlbGF0aXZlVmFsdWVQcm92aWRlcik7CisKKwkJZmluYWwgTGlzdDxJSXRlbVByb3BlcnR5RGVzY3JpcHRvcj4gcHJvcGVydGllcyA9IHJlbGF0aXZlVmFsdWVQcm92aWRlcgorCQkJCS5nZXRQcm9wZXJ0aWVzKCk7CisJCWFzc2VydE5vdE51bGwocHJvcGVydGllcyk7CisJCWFzc2VydFRydWUocHJvcGVydGllcy5zaXplKCkgPT0gTlVNX1NFSVJfRElTRUFTRV9NT0RFTF9MQUJFTF9WQUxVRV9QUk9QRVJUSUVTKTsKKworCQlhc3NlcnRUcnVlKHJlbGF0aXZlVmFsdWVQcm92aWRlcgorCQkJCS5nZXRSZWxhdGl2ZVZhbHVlKFN0YW5kYXJkUGFja2FnZS5lSU5TVEFOQ0UKKwkJCQkJCS5nZXRTdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsVmFsdWVfUygpKSA9PSBOVU1fU19QT1BVTEFUSU9OCisJCQkJLyBUT1RBTF9TRUlSX1BPUFVMQVRJT04pOworCisJCWFzc2VydFRydWUocmVsYXRpdmVWYWx1ZVByb3ZpZGVyCisJCQkJLmdldFJlbGF0aXZlVmFsdWUoU3RhbmRhcmRQYWNrYWdlLmVJTlNUQU5DRQorCQkJCQkJLmdldFNFSVJMYWJlbFZhbHVlX0UoKSkgPT0gTlVNX0VfUE9QVUxBVElPTgorCQkJCS8gVE9UQUxfU0VJUl9QT1BVTEFUSU9OKTsKKworCQlhc3NlcnRUcnVlKHJlbGF0aXZlVmFsdWVQcm92aWRlcgorCQkJCS5nZXRSZWxhdGl2ZVZhbHVlKFN0YW5kYXJkUGFja2FnZS5lSU5TVEFOQ0UuZ2V0U0lMYWJlbFZhbHVlX0koKSkgPT0gTlVNX0lfUE9QVUxBVElPTgorCQkJCS8gVE9UQUxfU0VJUl9QT1BVTEFUSU9OKTsKKworCQlhc3NlcnRUcnVlKHJlbGF0aXZlVmFsdWVQcm92aWRlcgorCQkJCS5nZXRSZWxhdGl2ZVZhbHVlKFN0YW5kYXJkUGFja2FnZS5lSU5TVEFOQ0UKKwkJCQkJCS5nZXRTSVJMYWJlbFZhbHVlX1IoKSkgPT0gTlVNX1JfUE9QVUxBVElPTgorCQkJCS8gVE9UQUxfU0VJUl9QT1BVTEFUSU9OKTsKKwl9IC8vIHRlc3RDcmVhdGVTRUlSTGFiZWxWYWx1ZUFkYXB0ZXIKKworCS8qKgorCSAqIFRlc3QgdGhhdCB0aGlzIGZhY3RvcnkgaXMgcHJvcGVybHkgYWRkZWQgdG8gdGhlIGNvbXBvc2VkIGFkYXB0b3IgZmFjdG9yeQorCSAqIDxjb2RlPlJlbGF0aXZlVmFsdWVQcm92aWRlckFkYXB0ZXJGYWN0b3J5SW1wbDwvY29kZT4gc28gdGhhdCB0aGUKKwkgKiBjbGFzc2VzIGluIHRoZSBTdGFuZGFyZCAoRGlzZWFzZSBtb2RlbCkgcGFja2FnZSB3aWxsIGJlIHByb3Blcmx5IGFkYXB0ZWQKKwkgKiB0byB7QGxpbmsgUmVsYXRpdmVWYWx1ZVByb3ZpZGVyfSdzLgorCSAqLworCXB1YmxpYyB2b2lkIHRlc3RQcm9wZXJBZGFwdGVyRmFjdG9yeUNvbXBvc2l0aW9uKCkgeworCQlmaW5hbCBSZWxhdGl2ZVZhbHVlUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSBydnBhZiA9IFJlbGF0aXZlVmFsdWVQcm92aWRlckFkYXB0ZXJGYWN0b3J5LklOU1RBTkNFOworCQkvLyBNYWtlIHRoZSBsYWJlbCB2YWx1ZSB0byBiZSBhZGFwdGVkCisJCWZpbmFsIFNFSVJMYWJlbFZhbHVlIHNFSVJMYWJlbFZhbHVlID0gU3RhbmRhcmRGYWN0b3J5LmVJTlNUQU5DRQorCQkJCS5jcmVhdGVTRUlSTGFiZWxWYWx1ZSgpOworCQlpbml0aWFsaXplRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZXMoc0VJUkxhYmVsVmFsdWUpOworCQlzRUlSTGFiZWxWYWx1ZS5zZXRTKE5VTV9TX1BPUFVMQVRJT04pOworCQlzRUlSTGFiZWxWYWx1ZS5zZXRFKE5VTV9FX1BPUFVMQVRJT04pOworCQlzRUlSTGFiZWxWYWx1ZS5zZXRJKE5VTV9JX1BPUFVMQVRJT04pOworCQlzRUlSTGFiZWxWYWx1ZS5zZXRSKE5VTV9SX1BPUFVMQVRJT04pOworCisJCWZpbmFsIFJlbGF0aXZlVmFsdWVQcm92aWRlciByZWxhdGl2ZVZhbHVlUHJvdmlkZXIgPSAoUmVsYXRpdmVWYWx1ZVByb3ZpZGVyKSBydnBhZgorCQkJCS5hZGFwdChzRUlSTGFiZWxWYWx1ZSwgUmVsYXRpdmVWYWx1ZVByb3ZpZGVyLmNsYXNzKTsKKworCQlhc3NlcnROb3ROdWxsKHJlbGF0aXZlVmFsdWVQcm92aWRlcik7CisJCWFzc2VydFRydWUocmVsYXRpdmVWYWx1ZVByb3ZpZGVyIGluc3RhbmNlb2YgU3RhbmRhcmRSZWxhdGl2ZVZhbHVlUHJvdmlkZXJBZGFwdGVyRmFjdG9yeS5EaXNlYXNlTW9kZWxMYWJlbFZhbHVlUmVsYXRpdmVWYWx1ZVByb3ZpZGVyKTsKKwl9IC8vIHRlc3RQcm9wZXJBZGFwdGVyRmFjdG9yeUNvbXBvc2l0aW9uCisKK30gLy8gU3RhbmRhcmRSZWxhdGl2ZVZhbHVlUHJvdmlkZXJBZGFwdGVyRmFjdG9yeVRlc3QKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGlzZWFzZW1vZGVscy90ZW1wLy5jdnNpZ25vcmUgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRpc2Vhc2Vtb2RlbHMvdGVtcC8uY3ZzaWdub3JlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYxMTYxNjQKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRpc2Vhc2Vtb2RlbHMvdGVtcC8uY3ZzaWdub3JlCkBAIC0wLDAgKzEgQEAKKyouc2NlbmFyaW8KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGlzZWFzZW1vZGVscy90ZXN0LnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGlzZWFzZW1vZGVscy90ZXN0LnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMGVmOWFjCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kaXNlYXNlbW9kZWxzL3Rlc3QueG1sCkBAIC0wLDAgKzEsNTMgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+CisKKzxwcm9qZWN0IG5hbWU9InRlc3RzdWl0ZSIgZGVmYXVsdD0icnVuIiBiYXNlZGlyPSIuIj4KKyAgPCEtLSBUaGUgcHJvcGVydHkgJHtlY2xpcHNlLWhvbWV9IHNob3VsZCBiZSBwYXNzZWQgaW50byB0aGlzIHNjcmlwdCAtLT4KKyAgPCEtLSBTZXQgYSBtZWFuaW5nZnVsIGRlZmF1bHQgdmFsdWUgZm9yIHdoZW4gaXQgaXMgbm90LiAtLT4KKyAgPHByb3BlcnR5IG5hbWU9ImVjbGlwc2UtaG9tZSIgdmFsdWU9IiIvPgorCisKKyAgPCEtLSBzZXRzIHRoZSBwcm9wZXJ0aWVzIGVjbGlwc2UtaG9tZSwgYW5kIGxpYnJhcnktZmlsZSAtLT4KKyAgPHByb3BlcnR5IG5hbWU9InBsdWdpbi1uYW1lIiB2YWx1ZT0ib3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kaXNlYXNlbW9kZWxzIi8+CisgIDxwcm9wZXJ0eSBuYW1lPSJsaWJyYXJ5LWZpbGUiCisgICAgICAgICAgICB2YWx1ZT0iJHtlY2xpcHNlLWhvbWV9L3BsdWdpbnMvb3JnLmVjbGlwc2UudGVzdF8zLjMuMC9saWJyYXJ5LnhtbCIvPgorCisgIDwhLS0gVGhpcyB0YXJnZXQgaG9sZHMgYWxsIGluaXRpYWxpemF0aW9uIGNvZGUgdGhhdCBuZWVkcyB0byBiZSBkb25lIGZvciAtLT4KKyAgPCEtLSBhbGwgdGVzdHMgdGhhdCBhcmUgdG8gYmUgcnVuLiBJbml0aWFsaXphdGlvbiBmb3IgaW5kaXZpZHVhbCB0ZXN0cyAtLT4KKyAgPCEtLSBzaG91bGQgYmUgZG9uZSB3aXRoaW4gdGhlIGJvZHkgb2YgdGhlIHN1aXRlIHRhcmdldC4gLS0+CisgIDx0YXJnZXQgbmFtZT0iaW5pdCI+CisgICAgPHRzdGFtcC8+CisgICAgPGRlbGV0ZT4KKyAgICAgIDxmaWxlc2V0IGRpcj0iJHtlY2xpcHNlLWhvbWV9IiBpbmNsdWRlcz0ib3JnKi54bWwiLz4KKyAgICA8L2RlbGV0ZT4KKyAgPC90YXJnZXQ+CisKKyAgPCEtLSBUaGlzIHRhcmdldCBkZWZpbmVzIHRoZSB0ZXN0cyB0aGF0IG5lZWQgdG8gYmUgcnVuLiAtLT4KKyAgPHRhcmdldCBuYW1lPSJzdWl0ZSI+CisgICAgPHByb3BlcnR5IG5hbWU9ImRhdGEtZGlyIiB2YWx1ZT0iJHtlY2xpcHNlLWhvbWV9L3dvcmtzcGFjZSIvPgorICAgIDxkZWxldGUgZGlyPSIke2RhdGEtZGlyfSIgcXVpZXQ9InRydWUiLz4KKyAgICA8YW50IHRhcmdldD0idWktdGVzdCIgYW50ZmlsZT0iJHtsaWJyYXJ5LWZpbGV9IiBkaXI9IiR7ZWNsaXBzZS1ob21lfSI+CisgICAgICA8cHJvcGVydHkgbmFtZT0iZGF0YS1kaXIiIHZhbHVlPSIke2RhdGEtZGlyfSIvPgorICAgICAgPHByb3BlcnR5IG5hbWU9InBsdWdpbi1uYW1lIiB2YWx1ZT0iJHtwbHVnaW4tbmFtZX0iLz4KKyAgICAgIDxwcm9wZXJ0eSBuYW1lPSJjbGFzc25hbWUiIHZhbHVlPSJvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQudGVzdHMuU3RhbmRhcmRUZXN0cyIvPgorICAgIDwvYW50PgorICA8L3RhcmdldD4KKworICA8IS0tIFRoaXMgdGFyZ2V0IGhvbGRzIGNvZGUgdG8gY2xlYW51cCB0aGUgdGVzdGluZyBlbnZpcm9ubWVudCBhZnRlciAtLT4KKyAgPCEtLSBhZnRlciBhbGwgb2YgdGhlIHRlc3RzIGhhdmUgYmVlbiBydW4uIFlvdSBjYW4gdXNlIHRoaXMgdGFyZ2V0IHRvIC0tPgorICA8IS0tIGRlbGV0ZSB0ZW1wb3JhcnkgZmlsZXMgdGhhdCBoYXZlIGJlZW4gY3JlYXRlZC4gLS0+CisgIDx0YXJnZXQgbmFtZT0iY2xlYW51cCI+CisgIDwvdGFyZ2V0PgorCisgIDwhLS0gVGhpcyB0YXJnZXQgcnVucyB0aGUgdGVzdCBzdWl0ZS4gQW55IGFjdGlvbnMgdGhhdCBuZWVkIHRvIGhhcHBlbiAtLT4KKyAgPCEtLSBhZnRlciBhbGwgdGhlIHRlc3RzIGhhdmUgYmVlbiBydW4gc2hvdWxkIGdvIGhlcmUuIC0tPgorICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdCxzdWl0ZSxjbGVhbnVwIj4KKyAgICA8YW50IHRhcmdldD0iY29sbGVjdCIgYW50ZmlsZT0iJHtsaWJyYXJ5LWZpbGV9IiBkaXI9IiR7ZWNsaXBzZS1ob21lfSI+CisgICAgICA8cHJvcGVydHkgbmFtZT0iaW5jbHVkZXMiIHZhbHVlPSJvcmcqLnhtbCIvPgorICAgICAgPHByb3BlcnR5IG5hbWU9Im91dHB1dC1maWxlIiB2YWx1ZT0iJHtwbHVnaW4tbmFtZX0ueG1sIi8+CisgICAgPC9hbnQ+CisgIDwvdGFyZ2V0PgorCisgIDwhLS0gVGhpcyB0YXJnZXQgcnVucyB0aGUgcGVyZm9ybWFuY2UgdGVzdCBzdWl0ZXMuIC0tPgorICA8dGFyZ2V0IG5hbWU9InBlcmZvcm1hbmNlIj4KKyAgPC90YXJnZXQ+Cis8L3Byb2plY3Q+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmdyYXBoZWRpdG9yLy5jbGFzc3BhdGggYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmdyYXBoZWRpdG9yLy5jbGFzc3BhdGgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmQxYTQzMAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZ3JhcGhlZGl0b3IvLmNsYXNzcGF0aApAQCAtMCwwICsxLDcgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+DQorPGNsYXNzcGF0aD4NCisJPGNsYXNzcGF0aGVudHJ5IGtpbmQ9ImNvbiIgcGF0aD0ib3JnLmVjbGlwc2UuamR0LmxhdW5jaGluZy5KUkVfQ09OVEFJTkVSL29yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC5kZWJ1Zy51aS5sYXVuY2hlci5TdGFuZGFyZFZNVHlwZS9KMlNFLTEuNSIvPg0KKwk8Y2xhc3NwYXRoZW50cnkga2luZD0iY29uIiBwYXRoPSJvcmcuZWNsaXBzZS5wZGUuY29yZS5yZXF1aXJlZFBsdWdpbnMiLz4NCisJPGNsYXNzcGF0aGVudHJ5IGtpbmQ9InNyYyIgcGF0aD0ic3JjIi8+DQorCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJvdXRwdXQiIHBhdGg9ImJpbiIvPg0KKzwvY2xhc3NwYXRoPg0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZ3JhcGhlZGl0b3IvLnByb2plY3QgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmdyYXBoZWRpdG9yLy5wcm9qZWN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFkZTRjOTEKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmdyYXBoZWRpdG9yLy5wcm9qZWN0CkBAIC0wLDAgKzEsMjggQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+DQorPHByb2plY3REZXNjcmlwdGlvbj4NCisJPG5hbWU+b3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5ncmFwaGVkaXRvcjwvbmFtZT4NCisJPGNvbW1lbnQ+PC9jb21tZW50Pg0KKwk8cHJvamVjdHM+DQorCTwvcHJvamVjdHM+DQorCTxidWlsZFNwZWM+DQorCQk8YnVpbGRDb21tYW5kPg0KKwkJCTxuYW1lPm9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFidWlsZGVyPC9uYW1lPg0KKwkJCTxhcmd1bWVudHM+DQorCQkJPC9hcmd1bWVudHM+DQorCQk8L2J1aWxkQ29tbWFuZD4NCisJCTxidWlsZENvbW1hbmQ+DQorCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLk1hbmlmZXN0QnVpbGRlcjwvbmFtZT4NCisJCQk8YXJndW1lbnRzPg0KKwkJCTwvYXJndW1lbnRzPg0KKwkJPC9idWlsZENvbW1hbmQ+DQorCQk8YnVpbGRDb21tYW5kPg0KKwkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5TY2hlbWFCdWlsZGVyPC9uYW1lPg0KKwkJCTxhcmd1bWVudHM+DQorCQkJPC9hcmd1bWVudHM+DQorCQk8L2J1aWxkQ29tbWFuZD4NCisJPC9idWlsZFNwZWM+DQorCTxuYXR1cmVzPg0KKwkJPG5hdHVyZT5vcmcuZWNsaXBzZS5qZHQuY29yZS5qYXZhbmF0dXJlPC9uYXR1cmU+DQorCQk8bmF0dXJlPm9yZy5lY2xpcHNlLnBkZS5QbHVnaW5OYXR1cmU8L25hdHVyZT4NCisJPC9uYXR1cmVzPg0KKzwvcHJvamVjdERlc2NyaXB0aW9uPg0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZ3JhcGhlZGl0b3IvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5ncmFwaGVkaXRvci8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjBkYmFjMQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZ3JhcGhlZGl0b3IvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzCkBAIC0wLDAgKzEsMTIgQEAKKyNXZWQgQXByIDI3IDIzOjIyOjA3IENFU1QgMjAxMQ0KK2VjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xDQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29kZWdlbi5pbmxpbmVKc3JCeXRlY29kZT1lbmFibGVkDQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29kZWdlbi50YXJnZXRQbGF0Zm9ybT0xLjUNCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb2RlZ2VuLnVudXNlZExvY2FsPXByZXNlcnZlDQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29tcGxpYW5jZT0xLjUNCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5kZWJ1Zy5saW5lTnVtYmVyPWdlbmVyYXRlDQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuZGVidWcubG9jYWxWYXJpYWJsZT1nZW5lcmF0ZQ0KK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmRlYnVnLnNvdXJjZUZpbGU9Z2VuZXJhdGUNCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmFzc2VydElkZW50aWZpZXI9ZXJyb3INCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmVudW1JZGVudGlmaWVyPWVycm9yDQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuc291cmNlPTEuNQ0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZ3JhcGhlZGl0b3IvTUVUQS1JTkYvTUFOSUZFU1QuTUYgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmdyYXBoZWRpdG9yL01FVEEtSU5GL01BTklGRVNULk1GCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAwMTUzMDQKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmdyYXBoZWRpdG9yL01FVEEtSU5GL01BTklGRVNULk1GCkBAIC0wLDAgKzEsMjIgQEAKK01hbmlmZXN0LVZlcnNpb246IDEuMAorQnVuZGxlLU1hbmlmZXN0VmVyc2lvbjogMgorQnVuZGxlLU5hbWU6IEdyYXBoZWRpdG9yVGVzdAorQnVuZGxlLVN5bWJvbGljTmFtZTogb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5ncmFwaGVkaXRvcgorQnVuZGxlLVZlcnNpb246IDEuMC4wLnF1YWxpZmllcgorQnVuZGxlLUFjdGl2YXRvcjogb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5ncmFwaGVkaXRvci5BY3RpdmF0b3IKK1JlcXVpcmUtQnVuZGxlOiBvcmcuZWNsaXBzZS51aSwKKyBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUsCisgb3JnLmp1bml0LAorIG9yZy5lY2xpcHNlLnN0ZW0udWkuZ3JhcGhlZGl0b3I7YnVuZGxlLXZlcnNpb249IjEuMS4xIgorQnVuZGxlLUFjdGl2YXRpb25Qb2xpY3k6IGxhenkKK0J1bmRsZS1SZXF1aXJlZEV4ZWN1dGlvbkVudmlyb25tZW50OiBKYXZhU0UtMS42CitJbXBvcnQtUGFja2FnZTogb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMsCisgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLAorIG9yZy5lY2xpcHNlLmVtZi5lY29yZSwKKyBvcmcuZWNsaXBzZS5lbWYuZWNvcmUucmVzb3VyY2UsCisgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnJlc291cmNlLmltcGwsCisgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnhtaS5pbXBsLAorIG9yZy5lY2xpcHNlLnN0ZW0uY29yZSwKKyBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLAorIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaCwKKyBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZ3JhcGhlZGl0b3IvYnVpbGQucHJvcGVydGllcyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZ3JhcGhlZGl0b3IvYnVpbGQucHJvcGVydGllcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yODA3NzZhCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5ncmFwaGVkaXRvci9idWlsZC5wcm9wZXJ0aWVzCkBAIC0wLDAgKzEsOCBAQAorc291cmNlLi4gPSBzcmMvDQorYmluLmluY2x1ZGVzID0gLmNsYXNzcGF0aCxcDQorICAgICAgICAgICAgICAgLnByb2plY3QsXA0KKyAgICAgICAgICAgICAgIC5zZXR0aW5ncy8sXA0KKyAgICAgICAgICAgICAgIGJ1aWxkLnByb3BlcnRpZXMsXA0KKyAgICAgICAgICAgICAgIE1FVEEtSU5GLyxcDQorICAgICAgICAgICAgICAgcmVzb3VyY2VzLyxcDQorICAgICAgICAgICAgICAgLg0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZ3JhcGhlZGl0b3IvcmVzb3VyY2VzL0tvcGllIHZvbiB3b3JraW5nX3Rlc3QuZ3JhcGggYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmdyYXBoZWRpdG9yL3Jlc291cmNlcy9Lb3BpZSB2b24gd29ya2luZ190ZXN0LmdyYXBoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZiODBhNjYKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmdyYXBoZWRpdG9yL3Jlc291cmNlcy9Lb3BpZSB2b24gd29ya2luZ190ZXN0LmdyYXBoCkBAIC0wLDAgKzEsMzIgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+DQorPG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaDpHcmFwaCB4bWk6dmVyc2lvbj0iMi4wIiB4bWxuczp4bWk9Imh0dHA6Ly93d3cub21nLm9yZy9YTUkiIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIHhtbG5zOm9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHhtbG5zOm9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzPSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvbGFiZWxzLmVjb3JlIiB4bWxuczpvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLm5vZGVzPSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvbm9kZXMuZWNvcmUiIHVSST0icGxhdGZvcm06L3Jlc291cmNlL3Rlc3QyL2dyYXBocy9pcmVsYW5kLmdyYXBoIiB0eXBlVVJJPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiPg0KKyAgPGR1YmxpbkNvcmUgdGl0bGU9IiIgaWRlbnRpZmllcj0icGxhdGZvcm06L3Jlc291cmNlL3Rlc3QyL2dyYXBocy9pcmVsYW5kLmdyYXBoIiBkZXNjcmlwdGlvbj0iIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBjb3ZlcmFnZT0iSVJMOjEvIiBzb3VyY2U9IlByaW1hcnkgKGh0dHA6Ly93d3cuZ3JpZC51bmVwLmNoL2RhdGEvZGF0YS5waHA/Y2F0ZWdvcnk9aHVtYW5fcmVsYXRlZCkuICIgc3ViamVjdD0iTGFiZWw6cG9wdWxhdGlvbiIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiANCisNCit2YWxpZD0ic3RhcnQ9MjAwNi0wMS0wMTsgZW5kPTIwMDYtMTItMzE7Ii8+DQorDQorICA8bm9kZXMga2V5PSJzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9ub2RlL2dlby9yZWdpb24vSUUtSSI+DQorICAgIDx2YWx1ZSB4c2k6dHlwZT0ib3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5ub2RlczpSZWdpb24iIHVSST0ic3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vbm9kZS9nZW8vcmVnaW9uL0lFLUkiIHR5cGVVUkk9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9Ob2RlIj4NCisgICAgICA8ZHVibGluQ29yZSB0aXRsZT0iSVJFTEFORCwgMDgsIEkgSUUtSSIgaWRlbnRpZmllcj0ic3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vbm9kZS9nZW8vcmVnaW9uL0lFLUkiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9Ob2RlIiANCisNCitzcGF0aWFsPSJzdGVtc3BhdGlhbDppbmxpbmU6Ly8vNDk4Ny42MSwxMDAwLjIsNDk4Ni45OSwxMDA0LjA5LDQ5ODUuMiwxMDA3LjYxLDQ5ODIuNDEsMTAxMC40LDQ5NzguODksMTAxMi4xOSw0OTc1LjAsMTAxMi44MSw0OTcxLjEsMTAxMi4xOSw0OTY3LjU4LDEwMTAuNCw0OTY0Ljc5LDEwMDcuNjEsNDk2My4wLDEwMDQuMDksNDk2Mi4zOCwxMDAwLjIsNDk2My4wLDk5Ni4zLDQ5NjQuNzksOTkyLjc4LDQ5NjcuNTgsOTg5Ljk5LDQ5NzEuMSw5ODguMiw0OTc1LjAsOTg3LjU4LDQ5NzguODksOTg4LjIsNDk4Mi40MSw5ODkuOTksNDk4NS4yLDk5Mi43OCw0OTg2Ljk5LDk5Ni4zLDQ5ODcuNjEsMTAwMC4yIi8+DQorDQorDQorICAgICAgPGxhYmVscyB4c2k6dHlwZT0ib3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHM6UG9wdWxhdGlvbkxhYmVsIiBocmVmPSIjLy9Abm9kZUxhYmVscy4wL0B2YWx1ZSIvPg0KKyAgICAgIDxsYWJlbHMgeHNpOnR5cGU9Im9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzOkFyZWFMYWJlbCIgaHJlZj0iIy8vQG5vZGVMYWJlbHMuMS9AdmFsdWUiLz4NCisgICAgPC92YWx1ZT4NCisgIDwvbm9kZXM+DQorICA8bm9kZUxhYmVscyBrZXk9InN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL2xhYmVsL3BvcHVsYXRpb24vSVJMLzEvaHVtYW4vMjAwNi9JRS1JIj4NCisgICAgPHZhbHVlIHhzaTp0eXBlPSJvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVsczpQb3B1bGF0aW9uTGFiZWwiIHVSST0ic3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vbGFiZWwvcG9wdWxhdGlvbi9JUkwvMS9odW1hbi8yMDA2L0lFLUkiIHR5cGVVUkk9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9sYWJlbC9wb3B1bGF0aW9uIiB1UklPZklkZW50aWZpYWJsZVRvQmVMYWJlbGVkPSJzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9ub2RlL2dlby9yZWdpb24vSUUtSSIgcG9wdWxhdGlvbklkZW50aWZpZXI9Imh1bWFuIj4NCisgICAgICA8ZHVibGluQ29yZSBpZGVudGlmaWVyPSJzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9sYWJlbC9wb3B1bGF0aW9uL0lSTC8xL2h1bWFuLzIwMDYvSUUtSSIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL2xhYmVsL3BvcHVsYXRpb24iLz4NCisgICAgICA8Y3VycmVudFZhbHVlIHhzaTp0eXBlPSJvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVsczpQb3B1bGF0aW9uTGFiZWxWYWx1ZSIgY291bnQ9IjM1MDY1MDAuMCIvPg0KKyAgICAgIDxub2RlIGhyZWY9IiMvL0Bub2Rlcy4wL0B2YWx1ZSIvPg0KKyAgICA8L3ZhbHVlPg0KKyAgPC9ub2RlTGFiZWxzPg0KKyAgPG5vZGVMYWJlbHMga2V5PSJzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9sYWJlbC9hcmVhL0lSTC8xL0lFLUkiPg0KKyAgICA8dmFsdWUgeHNpOnR5cGU9Im9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzOkFyZWFMYWJlbCIgdVJJPSJzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9sYWJlbC9hcmVhL0lSTC8xL0lFLUkiIHR5cGVVUkk9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9sYWJlbCIgdVJJT2ZJZGVudGlmaWFibGVUb0JlTGFiZWxlZD0ic3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vbm9kZS9nZW8vcmVnaW9uL0lFLUkiPg0KKyAgICAgIDxkdWJsaW5Db3JlIGlkZW50aWZpZXI9InN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL2xhYmVsL2FyZWEvSVJMLzEvSUUtSSIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL2xhYmVsIi8+DQorICAgICAgPGN1cnJlbnRWYWx1ZSB4c2k6dHlwZT0ib3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHM6QXJlYUxhYmVsVmFsdWUiIGFyZWE9IjY4ODk1LjAiIGF2ZXJhZ2VFeHRlbnQ9IjI2Mi40Nzg1NzA1NTM4NjQ1Ii8+DQorICAgICAgPG5vZGUgaHJlZj0iIy8vQG5vZGVzLjAvQHZhbHVlIi8+DQorICAgIDwvdmFsdWU+DQorICA8L25vZGVMYWJlbHM+DQorPC9vcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGg6R3JhcGg+DQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5ncmFwaGVkaXRvci9yZXNvdXJjZXMvbm90d29ya2luZ190ZXN0LmdyYXBoIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5ncmFwaGVkaXRvci9yZXNvdXJjZXMvbm90d29ya2luZ190ZXN0LmdyYXBoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY4Nzc5NWYKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmdyYXBoZWRpdG9yL3Jlc291cmNlcy9ub3R3b3JraW5nX3Rlc3QuZ3JhcGgKQEAgLTAsMCArMSwzMCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4NCis8b3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoOkdyYXBoIHhtaTp2ZXJzaW9uPSIyLjAiIHhtbG5zOnhtaT0iaHR0cDovL3d3dy5vbWcub3JnL1hNSSIgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIgeG1sbnM6b3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoPSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgeG1sbnM6b3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHM9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy9sYWJlbHMuZWNvcmUiIHhtbG5zOm9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubm9kZXM9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy9ub2Rlcy5lY29yZSIgdVJJPSJwbGF0Zm9ybTovcmVzb3VyY2UvaXJlbGFuZC5ncmFwaCIgdHlwZVVSST0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIj4NCisgIDxkdWJsaW5Db3JlIHRpdGxlPSIiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9yZXNvdXJjZS90ZXN0Mi9ncmFwaHMvaXJlbGFuZC5ncmFwaCIgZGVzY3JpcHRpb249IiIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgY292ZXJhZ2U9IklSTDoxLyIgc291cmNlPSJQcmltYXJ5IChodHRwOi8vd3d3LmdyaWQudW5lcC5jaC9kYXRhL2RhdGEucGhwP2NhdGVnb3J5PWh1bWFuX3JlbGF0ZWQpLiAiIHN1YmplY3Q9IkxhYmVsOnBvcHVsYXRpb24iIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgDQorDQorc3BhdGlhbD0ic3RlbXNwYXRpYWw6cGxhdGZvcm06L3Jlc291cmNlL2lyZWxhbmRfTUFQLnhtbCIgdmFsaWQ9InN0YXJ0PTIwMDYtMDEtMDE7IGVuZD0yMDA2LTEyLTMxOyIvPg0KKw0KKyAgPG5vZGVzIGtleT0ic3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vbm9kZS9nZW8vcmVnaW9uL0lFLUkiPg0KKyAgICA8dmFsdWUgeHNpOnR5cGU9Im9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubm9kZXM6UmVnaW9uIiB1Ukk9InN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL25vZGUvZ2VvL3JlZ2lvbi9JRS1JIiB0eXBlVVJJPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vTm9kZSI+DQorICAgICAgPGR1YmxpbkNvcmUgdGl0bGU9IklSRUxBTkQsIDA4LCBJIElFLUkiIGlkZW50aWZpZXI9InN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL25vZGUvZ2VvL3JlZ2lvbi9JRS1JIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vTm9kZSIgDQorDQorc3BhdGlhbD0ic3RlbXNwYXRpYWw6cGxhdGZvcm06L3Jlc291cmNlL2lyZWxhbmRfTUFQLnhtbCNJRS1JIi8+DQorICAgICAgPGxhYmVscyB4c2k6dHlwZT0ib3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHM6UG9wdWxhdGlvbkxhYmVsIiBocmVmPSIjLy9Abm9kZUxhYmVscy4wL0B2YWx1ZSIvPg0KKyAgICAgIDxsYWJlbHMgeHNpOnR5cGU9Im9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzOkFyZWFMYWJlbCIgaHJlZj0iIy8vQG5vZGVMYWJlbHMuMS9AdmFsdWUiLz4NCisgICAgPC92YWx1ZT4NCisgIDwvbm9kZXM+DQorICA8bm9kZUxhYmVscyBrZXk9InN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL2xhYmVsL3BvcHVsYXRpb24vSVJMLzEvaHVtYW4vMjAwNi9JRS1JIj4NCisgICAgPHZhbHVlIHhzaTp0eXBlPSJvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVsczpQb3B1bGF0aW9uTGFiZWwiIHVSST0ic3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vbGFiZWwvcG9wdWxhdGlvbi9JUkwvMS9odW1hbi8yMDA2L0lFLUkiIHR5cGVVUkk9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9sYWJlbC9wb3B1bGF0aW9uIiB1UklPZklkZW50aWZpYWJsZVRvQmVMYWJlbGVkPSJzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9ub2RlL2dlby9yZWdpb24vSUUtSSIgcG9wdWxhdGlvbklkZW50aWZpZXI9Imh1bWFuIj4NCisgICAgICA8ZHVibGluQ29yZSBpZGVudGlmaWVyPSJzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9sYWJlbC9wb3B1bGF0aW9uL0lSTC8xL2h1bWFuLzIwMDYvSUUtSSIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL2xhYmVsL3BvcHVsYXRpb24iLz4NCisgICAgICA8Y3VycmVudFZhbHVlIHhzaTp0eXBlPSJvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVsczpQb3B1bGF0aW9uTGFiZWxWYWx1ZSIgY291bnQ9IjM1MDY1MDAuMCIvPg0KKyAgICAgIDxub2RlIGhyZWY9IiMvL0Bub2Rlcy4wL0B2YWx1ZSIvPg0KKyAgICA8L3ZhbHVlPg0KKyAgPC9ub2RlTGFiZWxzPg0KKyAgPG5vZGVMYWJlbHMga2V5PSJzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9sYWJlbC9hcmVhL0lSTC8xL0lFLUkiPg0KKyAgICA8dmFsdWUgeHNpOnR5cGU9Im9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzOkFyZWFMYWJlbCIgdVJJPSJzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9sYWJlbC9hcmVhL0lSTC8xL0lFLUkiIHR5cGVVUkk9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9sYWJlbCIgdVJJT2ZJZGVudGlmaWFibGVUb0JlTGFiZWxlZD0ic3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vbm9kZS9nZW8vcmVnaW9uL0lFLUkiPg0KKyAgICAgIDxkdWJsaW5Db3JlIGlkZW50aWZpZXI9InN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL2xhYmVsL2FyZWEvSVJMLzEvSUUtSSIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL2xhYmVsIi8+DQorICAgICAgPGN1cnJlbnRWYWx1ZSB4c2k6dHlwZT0ib3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHM6QXJlYUxhYmVsVmFsdWUiIGFyZWE9IjY4ODk1LjAiIGF2ZXJhZ2VFeHRlbnQ9IjI2Mi40Nzg1NzA1NTM4NjQ1Ii8+DQorICAgICAgPG5vZGUgaHJlZj0iIy8vQG5vZGVzLjAvQHZhbHVlIi8+DQorICAgIDwvdmFsdWU+DQorICA8L25vZGVMYWJlbHM+DQorPC9vcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGg6R3JhcGg+DQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5ncmFwaGVkaXRvci9yZXNvdXJjZXMvdGVzdDEuZ3JhcGggYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmdyYXBoZWRpdG9yL3Jlc291cmNlcy90ZXN0MS5ncmFwaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ODgyYjM4Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5ncmFwaGVkaXRvci9yZXNvdXJjZXMvdGVzdDEuZ3JhcGgKQEAgLTAsMCArMSwzMiBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4NCis8b3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoOkdyYXBoIHhtaTp2ZXJzaW9uPSIyLjAiIHhtbG5zOnhtaT0iaHR0cDovL3d3dy5vbWcub3JnL1hNSSIgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIgeG1sbnM6b3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoPSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgeG1sbnM6b3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHM9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy9sYWJlbHMuZWNvcmUiIHhtbG5zOm9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubm9kZXM9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy9ub2Rlcy5lY29yZSIgdVJJPSJwbGF0Zm9ybTovcmVzb3VyY2UvdGVzdDIvZ3JhcGhzL3Rlc3QuZ3JhcGgiIHR5cGVVUkk9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCI+DQorICA8ZHVibGluQ29yZSB0aXRsZT0iIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcmVzb3VyY2UvdGVzdC5ncmFwaCIgZGVzY3JpcHRpb249IiIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgY292ZXJhZ2U9IklSTDoxLyIgc291cmNlPSJQcmltYXJ5IChodHRwOi8vd3d3LmdyaWQudW5lcC5jaC9kYXRhL2RhdGEucGhwP2NhdGVnb3J5PWh1bWFuX3JlbGF0ZWQpLiAiIHN1YmplY3Q9IkxhYmVsOnBvcHVsYXRpb24iIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgDQorDQordmFsaWQ9InN0YXJ0PTIwMDYtMDEtMDE7IGVuZD0yMDA2LTEyLTMxOyIvPg0KKw0KKyAgPG5vZGVzIGtleT0ic3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vbm9kZS9nZW8vcmVnaW9uL3Rlc3RyZWdpb24iPg0KKyAgICA8dmFsdWUgeHNpOnR5cGU9Im9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubm9kZXM6UmVnaW9uIiB1Ukk9InN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL25vZGUvZ2VvL3JlZ2lvbi90ZXN0cmVnaW9uIiB0eXBlVVJJPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vTm9kZSI+DQorICAgICAgPGR1YmxpbkNvcmUgdGl0bGU9IlRFU1RMQU5EIiBpZGVudGlmaWVyPSJzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9ub2RlL2dlby9yZWdpb24vdGVzdCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL05vZGUiIA0KKw0KK3NwYXRpYWw9InN0ZW1zcGF0aWFsOmlubGluZTovLy80OTg3LjYxLDEwMDAuMiw0OTg2Ljk5LDEwMDQuMDksNDk4NS4yLDEwMDcuNjEsNDk4Mi40MSwxMDEwLjQsNDk3OC44OSwxMDEyLjE5LDQ5NzUuMCwxMDEyLjgxLDQ5NzEuMSwxMDEyLjE5LDQ5NjcuNTgsMTAxMC40LDQ5NjQuNzksMTAwNy42MSw0OTYzLjAsMTAwNC4wOSw0OTYyLjM4LDEwMDAuMiw0OTYzLjAsOTk2LjMsNDk2NC43OSw5OTIuNzgsNDk2Ny41OCw5ODkuOTksNDk3MS4xLDk4OC4yLDQ5NzUuMCw5ODcuNTgsNDk3OC44OSw5ODguMiw0OTgyLjQxLDk4OS45OSw0OTg1LjIsOTkyLjc4LDQ5ODYuOTksOTk2LjMsNDk4Ny42MSwxMDAwLjIiLz4NCisNCisNCisgICAgICA8bGFiZWxzIHhzaTp0eXBlPSJvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVsczpQb3B1bGF0aW9uTGFiZWwiIGhyZWY9IiMvL0Bub2RlTGFiZWxzLjAvQHZhbHVlIi8+DQorICAgICAgPGxhYmVscyB4c2k6dHlwZT0ib3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHM6QXJlYUxhYmVsIiBocmVmPSIjLy9Abm9kZUxhYmVscy4xL0B2YWx1ZSIvPg0KKyAgICA8L3ZhbHVlPg0KKyAgPC9ub2Rlcz4NCisgIDxub2RlTGFiZWxzIGtleT0ic3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vbGFiZWwvcG9wdWxhdGlvbi90ZXN0cG9wdWxhdGlvbiI+DQorICAgIDx2YWx1ZSB4c2k6dHlwZT0ib3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHM6UG9wdWxhdGlvbkxhYmVsIiB1Ukk9InN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL2xhYmVsL3BvcHVsYXRpb24vdGVzdHBvcHVsYXRpb24iIHR5cGVVUkk9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9sYWJlbC9wb3B1bGF0aW9uIiB1UklPZklkZW50aWZpYWJsZVRvQmVMYWJlbGVkPSJzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9ub2RlL2dlby9yZWdpb24vdGVzdCIgcG9wdWxhdGlvbklkZW50aWZpZXI9Imh1bWFuIj4NCisgICAgICA8ZHVibGluQ29yZSBpZGVudGlmaWVyPSJzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9sYWJlbC9wb3B1bGF0aW9uL3Rlc3Rwb3B1bGF0aW9uIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vbGFiZWwvcG9wdWxhdGlvbiIvPg0KKyAgICAgIDxjdXJyZW50VmFsdWUgeHNpOnR5cGU9Im9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzOlBvcHVsYXRpb25MYWJlbFZhbHVlIiBjb3VudD0iMzUwNjUwMC4wIi8+DQorICAgICAgPG5vZGUgaHJlZj0iIy8vQG5vZGVzLjAvQHZhbHVlIi8+DQorICAgIDwvdmFsdWU+DQorICA8L25vZGVMYWJlbHM+DQorICA8bm9kZUxhYmVscyBrZXk9InN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL2xhYmVsL2FyZWEvdGVzdGFyZWEiPg0KKyAgICA8dmFsdWUgeHNpOnR5cGU9Im9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzOkFyZWFMYWJlbCIgdVJJPSJzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9sYWJlbC9hcmVhL3Rlc3RhcmVhIiB0eXBlVVJJPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vbGFiZWwiIHVSSU9mSWRlbnRpZmlhYmxlVG9CZUxhYmVsZWQ9InN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL25vZGUvZ2VvL3JlZ2lvbi90ZXN0Ij4NCisgICAgICA8ZHVibGluQ29yZSBpZGVudGlmaWVyPSJzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9sYWJlbC9hcmVhL3Rlc3RhcmVhIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vbGFiZWwiLz4NCisgICAgICA8Y3VycmVudFZhbHVlIHhzaTp0eXBlPSJvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVsczpBcmVhTGFiZWxWYWx1ZSIgYXJlYT0iNjg4OTUuMCIgYXZlcmFnZUV4dGVudD0iMjYyLjQ3ODU3MDU1Mzg2NDUiLz4NCisgICAgICA8bm9kZSBocmVmPSIjLy9Abm9kZXMuMC9AdmFsdWUiLz4NCisgICAgPC92YWx1ZT4NCisgIDwvbm9kZUxhYmVscz4NCis8L29yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaDpHcmFwaD4NCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmdyYXBoZWRpdG9yL3Jlc291cmNlcy90ZXN0MV9NQVAueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5ncmFwaGVkaXRvci9yZXNvdXJjZXMvdGVzdDFfTUFQLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMjcwZDQwCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5ncmFwaGVkaXRvci9yZXNvdXJjZXMvdGVzdDFfTUFQLnhtbApAQCAtMCwwICsxLDY3MSBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iSVNPLTg4NTktMSIgc3RhbmRhbG9uZT0ibm8iPz4NCis8TWFwIHhtbG5zOmdlb3Jzcz0iaHR0cDovL3d3dy5nZW9yc3Mub3JnL2dlb3JzcyIgeG1sbnM6Z21sPSJodHRwOi8vd3d3Lm9wZW5naXMubmV0L2dtbCI+DQorPHRpdGxlPmlyZWxhbmQuZ3JhcGggIG1hcDwvdGl0bGU+DQorPHN1YlRpdGxlPkFkbWluaXN0cmF0aXZlIEJvdW5kYXJpZXM8L3N1YlRpdGxlPg0KKzx1cGRhdGVkPjI2LjA0LjIwMTEgMDk6MjA6NTA8L3VwZGF0ZWQ+DQorPGVudHJ5Pg0KKzxnZW9yc3M6d2hlcmU+DQorPGdtbDpQb2x5Z29uIGdtbDppZD0iSUUtSSI+DQorPGdtbDpvdXRlckJvdW5kYXJ5SXM+DQorPGdtbDpMaW5lYXJSaW5nPg0KKzxnbWw6cG9zTGlzdD41My4zNDgwMSAtOS44OTcxIDUzLjM0ODQ5IC05Ljg5OTUgNTMuMzQ5NTMgLTkuODk5MDggNTMuMzUwOTIgLTkuODk2MjcgNTMuMzUxODEgLTkuODk0MTMgNTMuMzUxNjcgLTkuODkyMTEgNTMuMzQ5NDggLTkuODkzMDggNTMuMzQ4NTIgLTkuODk1MDUgNTMuMzQ4MDEgLTkuODk3MSA1My4zNDgwMSAtOS44OTcxPC9nbWw6cG9zTGlzdD4NCis8L2dtbDpMaW5lYXJSaW5nPg0KKzxnbWw6TGluZWFyUmluZz4NCis8Z21sOnBvc0xpc3Q+NTEuNTYyNDcgLTkuNjU2NjYgNTEuNTYyNzIgLTkuNjYwNyA1MS41NjMzIC05LjY2NDA3IDUxLjU2NDM3IC05LjY2MzI0IDUxLjU2NDcxIC05LjY1ODczIDUxLjU2NTM2IC05LjY1NjE5IDUxLjU2NDExIC05LjY1NDQ2IDUxLjU2MjQ3IC05LjY1NjY2IDUxLjU2MjQ3IC05LjY1NjY2PC9nbWw6cG9zTGlzdD4NCis8L2dtbDpMaW5lYXJSaW5nPg0KKzxnbWw6TGluZWFyUmluZz4NCis8Z21sOnBvc0xpc3Q+NTUuMDQwODIgLTguNDAzNDYgNTUuMDQxNzggLTguNDA0MjUgNTUuMDQyMjIgLTguNDA2MjQgNTUuMDQzNzMgLTguNDA1NjkgNTUuMDQzNTkgLTguNDAyOTUgNTUuMDQ0NTggLTguNDAxODMgNTUuMDQ0NyAtOC4zOTk0NiA1NS4wNDIwNSAtOC4zOTkxOSA1NS4wNDA4MiAtOC40MDM0NiA1NS4wNDA4MiAtOC40MDM0NjwvZ21sOnBvc0xpc3Q+DQorPC9nbWw6TGluZWFyUmluZz4NCis8Z21sOkxpbmVhclJpbmc+DQorPGdtbDpwb3NMaXN0PjU1LjA5OTU4IC04LjM1NjM3IDU1LjEwMDEyIC04LjM1OTk2IDU1LjEwMTQ1IC04LjM2MDgyIDU1LjEwMjYgLTguMzYxNjUgNTUuMTAzOTYgLTguMzU4NTEgNTUuMTAyMiAtOC4zNTcxIDU1LjEwMDczIC04LjM1MzY3IDU1LjA5OTU4IC04LjM1NjM3IDU1LjA5OTU4IC04LjM1NjM3PC9nbWw6cG9zTGlzdD4NCis8L2dtbDpMaW5lYXJSaW5nPg0KKzxnbWw6TGluZWFyUmluZz4NCis8Z21sOnBvc0xpc3Q+NTMuNjA5MTUgLTEwLjE1MDcgNTMuNjA5MTIgLTEwLjE1NTA0IDUzLjYwODgyIC0xMC4xNjA1NCA1My42MDg2MSAtMTAuMTYzNDUgNTMuNjEwNTYgLTEwLjE2NzQgNTMuNjEyMzkgLTEwLjE2NDgyIDUzLjYxMDIzIC0xMC4xNDk2OCA1My42MDkxNSAtMTAuMTUwNyA1My42MDkxNSAtMTAuMTUwNzwvZ21sOnBvc0xpc3Q+DQorPC9nbWw6TGluZWFyUmluZz4NCis8Z21sOkxpbmVhclJpbmc+DQorPGdtbDpwb3NMaXN0PjU0LjI4NjQyIC04LjU4ODY5IDU0LjI4NzE2IC04LjU5MTggNTQuMjg4NTEgLTguNTk1NDkgNTQuMjkxMTQgLTguNTk0NTIgNTQuMjk0MzMgLTguNTkzMzMgNTQuMjk2NzMgLTguNTkxODYgNTQuMjk4MzUgLTguNTkyMjggNTQuMjk4NzQgLTguNTk1MTcgNTQuMzAwMDEgLTguNTk3MTIgNTQuMzAxNzcgLTguNTk1MjIgNTQuMzAzODUgLTguNTkyNzQgNTQuMzA1NzggLTguNTkxMTkgNTQuMzAzNSAtOC41ODYwOSA1NC4zMDIyOSAtOC41ODMyMSA1NC4zMDE1NSAtOC41Nzk5NCA1NC4yOTk0MyAtOC41NzcwNyA1NC4yOTgyMSAtOC41ODA0OSA1NC4yOTYyMyAtOC41ODEyMyA1NC4yOTI4OCAtOC41ODIwOCA1NC4yOTA5MSAtOC41ODI4NSA1NC4yODkgLTguNTgzOTQgNTQuMjg3NTkgLTguNTg2MDcgNTQuMjg2NDIgLTguNTg4NjkgNTQuMjg2NDIgLTguNTg4Njk8L2dtbDpwb3NMaXN0Pg0KKzwvZ21sOkxpbmVhclJpbmc+DQorPGdtbDpMaW5lYXJSaW5nPg0KKzxnbWw6cG9zTGlzdD41MS42Nzk4NCAtOS40OTA2NiA1MS42ODAzNiAtOS40OTM1OCA1MS42ODIwMyAtOS40OTU5NyA1MS42ODM1NiAtOS41MDAxMiA1MS42ODM5OCAtOS41MDQ1MSA1MS42ODQzMyAtOS41MDk3NSA1MS42ODIwMSAtOS41MTQ5NCA1MS42ODM3NyAtOS41MTg2OSA1MS42ODI4OSAtOS41MjE2NCA1MS42ODI3MSAtOS41MjQyNyA1MS42ODM5MiAtOS41MjQwNiA1MS42ODU4NCAtOS41MjE3NiA1MS42ODc2OSAtOS41MTY3NyA1MS42OTAzOCAtOS41MTAxNyA1MS42OTI2IC05LjUwODgxIDUxLjY5NDQxIC05LjUwNjc4IDUxLjY5MzgzIC05LjUwMzQxIDUxLjY5NTEzIC05LjQ5OTUxIDUxLjY5NzU2IC05LjQ5NTM3IDUxLjY5ODk4IC05LjQ5NjA5IDUxLjcwMjQ0IC05LjQ4Nzg1IDUxLjcgLTkuNDgzNTIgNTEuNzAyMDkgLTkuNDc4NzMgNTEuNzA0MDggLTkuNDc5NDEgNTEuNzA2MTMgLTkuNDc3ODcgNTEuNzA3NTQgLTkuNDczNjkgNTEuNzA3NTUgLTkuNDY5ODMgNTEuNzA0NTkgLTkuNDcxMTkgNTEuNzAyNDYgLTkuNDcyNTggNTEuNjk5MDkgLTkuNDc0NDYgNTEuNjk2MDkgLTkuNDc3NTkgNTEuNjkzMzMgLTkuNDgwMTggNTEuNjkwNiAtOS40ODMzNyA1MS42ODgyMSAtOS40ODU4OSA1MS42ODY3OCAtOS40ODc4MyA1MS42ODUzNSAtOS40ODcyNiA1MS42ODMyNyAtOS40ODUzOSA1MS42ODEwMyAtOS40ODU3MSA1MS42Nzk4NCAtOS40OTA2NiA1MS42Nzk4NCAtOS40OTA2NjwvZ21sOnBvc0xpc3Q+DQorPC9nbWw6TGluZWFyUmluZz4NCis8Z21sOkxpbmVhclJpbmc+DQorPGdtbDpwb3NMaXN0PjUzLjYzNTAyIC05LjkwNDQ3IDUzLjYzNTUgLTkuOTA5NjcgNTMuNjM3NTYgLTkuOTEwMzcgNTMuNjM5MjkgLTkuOTA1NDMgNTMuNjM4MTUgLTkuOTAzMDUgNTMuNjM3ODQgLTkuODk5NTkgNTMuNjM2NzIgLTkuODk4NDUgNTMuNjM2MDUgLTkuOTAwMTcgNTMuNjM2NDUgLTkuOTAyNDIgNTMuNjM1MDIgLTkuOTA0NDcgNTMuNjM1MDIgLTkuOTA0NDc8L2dtbDpwb3NMaXN0Pg0KKzwvZ21sOkxpbmVhclJpbmc+DQorPGdtbDpMaW5lYXJSaW5nPg0KKzxnbWw6cG9zTGlzdD41My43OTYzOSAtOS42MjkyMSA1My43OTYxMyAtOS42MzE5NiA1My43OTYyNiAtOS42MzU0MSA1My43OTczNyAtOS42MzM5IDUzLjc5ODU4IC05LjYzMjI2IDUzLjc5OTAzIC05LjYyOTcxIDUzLjc5OTE5IC05LjYyNzI1IDUzLjc5ODUzIC05LjYyNDY0IDUzLjc5NzI5IC05LjYyNjc0IDUzLjc5NjM5IC05LjYyOTIxIDUzLjc5NjM5IC05LjYyOTIxPC9nbWw6cG9zTGlzdD4NCis8L2dtbDpMaW5lYXJSaW5nPg0KKzxnbWw6TGluZWFyUmluZz4NCis8Z21sOnBvc0xpc3Q+NTQuMTYwMDUgLTEwLjAzODc5IDU0LjE2MTI2IC0xMC4wMzk5NyA1NC4xNjI3IC0xMC4wNDA0MiA1NC4xNjM5MyAtMTAuMDM4NjMgNTQuMTY1NzMgLTEwLjAzNjY1IDU0LjE2NDU2IC0xMC4wMzIzMiA1NC4xNjM2MSAtMTAuMDI4ODQgNTQuMTYxOCAtMTAuMDMwOTggNTQuMTYxMDEgLTEwLjAzNDQzIDU0LjE2MDA1IC0xMC4wMzg3OSA1NC4xNjAwNSAtMTAuMDM4Nzk8L2dtbDpwb3NMaXN0Pg0KKzwvZ21sOkxpbmVhclJpbmc+DQorPGdtbDpMaW5lYXJSaW5nPg0KKzxnbWw6cG9zTGlzdD41NC4xMjIzNiAtMTAuMTk3MjMgNTQuMTIzNTQgLTEwLjE5ODcyIDU0LjEyNTUxIC0xMC4xOTk0NSA1NC4xMjY2MSAtMTAuMTk4MjYgNTQuMTI3MTMgLTEwLjE5OTk1IDU0LjEyODU2IC0xMC4yMDA3MSA1NC4xMzA3MSAtMTAuMjAxNDcgNTQuMTMwNzkgLTEwLjE5Nzg4IDU0LjEzNTI1IC0xMC4yMDEzIDU0LjEzNjQ0IC0xMC4xOTg4OSA1NC4xMzc3OSAtMTAuMTk3OTEgNTQuMTM5NjkgLTEwLjE5NTc5IDU0LjE0MTI2IC0xMC4xOTU4MSA1NC4xNDI3NSAtMTAuMTk3MDUgNTQuMTQ0NjkgLTEwLjE5ODI0IDU0LjE0NTg1IC0xMC4xOTYxMyA1NC4xNDY3NiAtMTAuMTk1MDUgNTQuMTQ2MTYgLTEwLjE5MTggNTQuMTQ2MDUgLTEwLjE4ODE3IDU0LjE0Mjg4IC0xMC4xOTExMiA1NC4xNDEzNCAtMTAuMTg5NjkgNTQuMTQxMjEgLTEwLjE4NzYzIDU0LjEzODgzIC0xMC4xODMzNyA1NC4xMzYzNyAtMTAuMTgxNzcgNTQuMTM1NiAtMTAuMTc3MDUgNTQuMTMzMzYgLTEwLjE3NzM4IDU0LjEzMDY4IC0xMC4xNzc2MSA1NC4xMjc3OSAtMTAuMTcyNzggNTQuMTI2NDMgLTEwLjE3NSA1NC4xMjY2NiAtMTAuMTc4MiA1NC4xMjY0OSAtMTAuMTgwNjcgNTQuMTI3NzggLTEwLjE4MjA0IDU0LjEyODE4IC0xMC4xODUyNiA1NC4xMjcyMyAtMTAuMTg4MzYgNTQuMTI2MTggLTEwLjE5MDE3IDU0LjEyNDE2IC0xMC4xODk5MSA1NC4xMjM1NyAtMTAuMTk0MzUgNTQuMTIyMzYgLTEwLjE5NzIzIDU0LjEyMjM2IC0xMC4xOTcyMzwvZ21sOnBvc0xpc3Q+DQorPC9nbWw6TGluZWFyUmluZz4NCis8Z21sOkxpbmVhclJpbmc+DQorPGdtbDpwb3NMaXN0PjUyLjcxODYzIC04Ljk1MTAyIDUyLjcxODk0IC04Ljk1NDU3IDUyLjcxOTE5IC04Ljk1NzY0IDUyLjcyMTIgLTguOTU2NjQgNTIuNzIyNTUgLTguOTU1NjcgNTIuNzIyMDIgLTguOTUyNzEgNTIuNzIwMDYgLTguOTUxNzQgNTIuNzE4NjMgLTguOTUxMDIgNTIuNzE4NjMgLTguOTUxMDI8L2dtbDpwb3NMaXN0Pg0KKzwvZ21sOkxpbmVhclJpbmc+DQorPGdtbDpMaW5lYXJSaW5nPg0KKzxnbWw6cG9zTGlzdD41Mi4yNTU0IC03LjA1ODU2IDUyLjI1NjI0IC03LjA1ODU1IDUyLjI1NTY4IC03LjA1MjM2IDUyLjI1NTUyIC03LjA0OTM3IDUyLjI1NTUyIC03LjA0OTM3IDUyLjI1NTQ0IC03LjA1MTM0IDUyLjI1NTM1IC03LjA1Nzc2IDUyLjI1NTQgLTcuMDU4NTYgNTIuMjU1NCAtNy4wNTg1NjwvZ21sOnBvc0xpc3Q+DQorPC9nbWw6TGluZWFyUmluZz4NCis8Z21sOkxpbmVhclJpbmc+DQorPGdtbDpwb3NMaXN0PjUxLjgzNTYzIC04LjI3NzU3IDUxLjgzNTI3IC04LjI4NDE4IDUxLjgzODM2IC04LjI4NDkgNTEuODQwMTkgLTguMjgzMjQgNTEuODM5MDYgLTguMjgwNDIgNTEuODM5ODQgLTguMjc4MDEgNTEuODM5ODUgLTguMjc1OTMgNTEuODM4MDkgLTguMjc0NjQgNTEuODM1NjMgLTguMjc3NTcgNTEuODM1NjMgLTguMjc3NTc8L2dtbDpwb3NMaXN0Pg0KKzwvZ21sOkxpbmVhclJpbmc+DQorPGdtbDpMaW5lYXJSaW5nPg0KKzxnbWw6cG9zTGlzdD41My4yMjE0NCAtOS42ODMyOSA1My4yMjIzOCAtOS42ODU2MSA1My4yMjQwNCAtOS42ODQwOCA1My4yMjM0OSAtOS42ODEzNyA1My4yMjMyNCAtOS42NzgyNiA1My4yMjIxOSAtOS42ODAwNyA1My4yMjE0NCAtOS42ODMyOSA1My4yMjE0NCAtOS42ODMyOTwvZ21sOnBvc0xpc3Q+DQorPC9nbWw6TGluZWFyUmluZz4NCis8Z21sOkxpbmVhclJpbmc+DQorPGdtbDpwb3NMaXN0PjUzLjg2NzMgLTkuNjExNDQgNTMuODY2OTQgLTkuNjE0MTggNTMuODY3NzEgLTkuNjE2NDkgNTMuODY3NzcgLTkuNjE4NTIgNTMuODY3NzIgLTkuNjIwNjkgNTMuODY3MjMgLTkuNjI1MjggNTMuODY5MTkgLTkuNjIzNDcgNTMuODY4ODkgLTkuNjE4MjcgNTMuODY5NjcgLTkuNjE2MDggNTMuODY5OTEgLTkuNjEzOCA1My44NjkxMiAtOS42MTA1NCA1My44NjczIC05LjYxMTQ0IDUzLjg2NzMgLTkuNjExNDQ8L2dtbDpwb3NMaXN0Pg0KKzwvZ21sOkxpbmVhclJpbmc+DQorPGdtbDpMaW5lYXJSaW5nPg0KKzxnbWw6cG9zTGlzdD41NC42MjMgLTguMTM0MDQgNTQuNjI0ODEgLTguMTM4MTIgNTQuNjI2NjUgLTguMTM0NDUgNTQuNjI1NzQgLTguMTMyNTYgNTQuNjI0NTkgLTguMTI5ODcgNTQuNjIzNDcgLTguMTMyMDYgNTQuNjIzIC04LjEzNDA0IDU0LjYyMyAtOC4xMzQwNDwvZ21sOnBvc0xpc3Q+DQorPC9nbWw6TGluZWFyUmluZz4NCis8Z21sOkxpbmVhclJpbmc+DQorPGdtbDpwb3NMaXN0PjU0Ljk0NDk3IC04LjM4Njg4IDU0Ljk0NTE3IC04LjM4OTk0IDU0Ljk0NjMgLTguMzkyODMgNTQuOTQ4OTMgLTguMzkxNjYgNTQuOTQ4MTIgLTguMzg5NzcgNTQuOTQ4OSAtOC4zODc0OSA1NC45NDQ5NyAtOC4zODY4OCA1NC45NDQ5NyAtOC4zODY4ODwvZ21sOnBvc0xpc3Q+DQorPC9nbWw6TGluZWFyUmluZz4NCis8Z21sOkxpbmVhclJpbmc+DQorPGdtbDpwb3NMaXN0PjUzLjI5NjQxIC05Ljg3ODU1IDUzLjI5NjA1IC05Ljg4MjQ4IDUzLjI5ODA4IC05Ljg4MjQxIDUzLjI5OTc5IC05Ljg4MDI2IDUzLjMwMDg0IC05Ljg3ODQ3IDUzLjMwMTEgLTkuODc1OSA1My4zMDEzNiAtOS44NzIxIDUzLjI5ODY5IC05Ljg3MjA3IDUzLjI5ODUzIC05Ljg3NTg4IDUzLjI5NzE5IC05Ljg3NjcgNTMuMjk2NDEgLTkuODc4NTUgNTMuMjk2NDEgLTkuODc4NTU8L2dtbDpwb3NMaXN0Pg0KKzwvZ21sOkxpbmVhclJpbmc+DQorPGdtbDpMaW5lYXJSaW5nPg0KKzxnbWw6cG9zTGlzdD41My44MTk5OCAtOS42MDcyNCA1My44MTc2OCAtOS42MTI3MiA1My44MTk1NCAtOS42MTY0OSA1My44MjA5NCAtOS42MjAzNCA1My44MjMyMSAtOS42MjA5MyA1My44MjM4NiAtOS42MTc5NSA1My44MjMyMSAtOS42MTU0OCA1My44MjE3NCAtOS42MTExNSA1My44MTk5OCAtOS42MDcyNCA1My44MTk5OCAtOS42MDcyNDwvZ21sOnBvc0xpc3Q+DQorPC9nbWw6TGluZWFyUmluZz4NCis8Z21sOkxpbmVhclJpbmc+DQorPGdtbDpwb3NMaXN0PjU1LjAwNzIxIC04LjQ0NDc4IDU1LjAwODY1IC04LjQ0NzA5IDU1LjAwOTQ4IC04LjQ0NTMyIDU1LjAxMTI2IC04LjQ0NDQ5IDU1LjAwOTk3IC04LjQ0MTI1IDU1LjAwNzIxIC04LjQ0NDc4IDU1LjAwNzIxIC04LjQ0NDc4PC9nbWw6cG9zTGlzdD4NCis8L2dtbDpMaW5lYXJSaW5nPg0KKzxnbWw6TGluZWFyUmluZz4NCis8Z21sOnBvc0xpc3Q+NTMuNTkwNDkgLTEwLjI1MjI2IDUzLjU5MTc3IC0xMC4yNTQ5OCA1My41OTM2NCAtMTAuMjU0NTkgNTMuNTk0OCAtMTAuMjU2MzcgNTMuNTk2OCAtMTAuMjUyODkgNTMuNTk1NCAtMTAuMjUwNiA1My41OTM2MiAtMTAuMjUwODggNTMuNTkyNTggLTEwLjI1MTI5IDUzLjU5MDQ5IC0xMC4yNTIyNiA1My41OTA0OSAtMTAuMjUyMjY8L2dtbDpwb3NMaXN0Pg0KKzwvZ21sOkxpbmVhclJpbmc+DQorPGdtbDpMaW5lYXJSaW5nPg0KKzxnbWw6cG9zTGlzdD41My4yMTI5MiAtOS4wMTM5MSA1My4yMTI2IC05LjAxODc2IDUzLjIxMjkgLTkuMDIzODggNTMuMjE1MjkgLTkuMDI3ODUgNTMuMjE2MDYgLTkuMDMxNjYgNTMuMjE2MDcgLTkuMDM1NjUgNTMuMjE2MzkgLTkuMDM5MDkgNTMuMjIwNDggLTkuMDQxMDcgNTMuMjIwMDQgLTkuMDM2NyA1My4yMjA1NCAtOS4wMzIxOSA1My4yMjE4NyAtOS4wMjczOSA1My4yMjM1MiAtOS4wMjMzOSA1My4yMjQzNiAtOS4wMTkxIDUzLjIyNDc1IC05LjAxNjExIDUzLjIyNDE2IC05LjAxMzg2IDUzLjIyMjc0IC05LjAxNzEyIDUzLjIyMDc0IC05LjAxNTM2IDUzLjIxOTQ4IC05LjAxNzc0IDUzLjIxNzIgLTkuMDIwMDggNTMuMjE2NyAtOS4wMjIxMyA1My4yMTYxNyAtOS4wMjU4NyA1My4yMTUyMSAtOS4wMjA5NCA1My4yMTQ2NyAtOS4wMTY2OSA1My4yMTM5MiAtOS4wMTI4NyA1My4yMTI5MiAtOS4wMTM5MSA1My4yMTI5MiAtOS4wMTM5MTwvZ21sOnBvc0xpc3Q+DQorPC9nbWw6TGluZWFyUmluZz4NCis8Z21sOkxpbmVhclJpbmc+DQorPGdtbDpwb3NMaXN0PjUzLjQ5NjMyIC0xMC4xMjc5IDUzLjQ5NzU0IC0xMC4xMzAxNiA1My40OTgyIC0xMC4xMzI1OSA1My40OTc2OSAtMTAuMTM0NjUgNTMuNDk2MTIgLTEwLjEzNjA1IDUzLjQ5NjcxIC0xMC4xNDA2NSA1My40OTY0IC0xMC4xNDM4MiA1My40OTYxNyAtMTAuMTQ4NDIgNTMuNDk2NzQgLTEwLjE1MDk5IDUzLjQ5ODQ3IC0xMC4xNDk3OSA1My41MDAyOCAtMTAuMTQ5MDYgNTMuNTAwNjIgLTEwLjE0NTQzIDUzLjUwMTcyIC0xMC4xNDE2MiA1My41MDE3NyAtMTAuMTM4MjUgNTMuNTAxNTMgLTEwLjEzNDk1IDUzLjUwMDMgLTEwLjEzNDI1IDUzLjQ5OTkgLTEwLjEyNzk5IDUzLjQ5ODUxIC0xMC4xMjY4IDUzLjQ5NzM4IC0xMC4xMjU4IDUzLjQ5NjMyIC0xMC4xMjc5IDUzLjQ5NjMyIC0xMC4xMjc5PC9nbWw6cG9zTGlzdD4NCis8L2dtbDpMaW5lYXJSaW5nPg0KKzxnbWw6TGluZWFyUmluZz4NCis8Z21sOnBvc0xpc3Q+NTIuMzM0MzggLTEwLjA0NDg2IDUyLjMzNDM2IC0xMC4wNDg2MiA1Mi4zMzU1IC0xMC4wNDgyNSA1Mi4zMzY0MyAtMTAuMDQ2OTQgNTIuMzM2NzMgLTEwLjA0NDE1IDUyLjMzNjcgLTEwLjA0MDk3IDUyLjMzNTI0IC0xMC4wNDIwMiA1Mi4zMzQzOCAtMTAuMDQ0ODYgNTIuMzM0MzggLTEwLjA0NDg2PC9nbWw6cG9zTGlzdD4NCis8L2dtbDpMaW5lYXJSaW5nPg0KKzxnbWw6TGluZWFyUmluZz4NCis8Z21sOnBvc0xpc3Q+NTMuMzU1MzcgLTYuMTY4IDUzLjM1OTA4IC02LjE3NDY1IDUzLjM2MjQyIC02LjE3MzQ0IDUzLjM2NDEyIC02LjE3MjIyIDUzLjM2NTI0IC02LjE2NjM2IDUzLjM3MDUyIC02LjE2MjI4IDUzLjM3MTQ2IC02LjE1ODg1IDUzLjM3NDE0IC02LjE1NTg4IDUzLjM3NDM4IC02LjE1MTQ3IDUzLjM3NzEyIC02LjE0ODk4IDUzLjM3NzI3IC02LjE0NDg1IDUzLjM3OTY0IC02LjEzOTg2IDUzLjM4MDk2IC02LjEzNjE2IDUzLjM4MjEzIC02LjEzMTY3IDUzLjM4MjcyIC02LjEyNzU5IDUzLjM4MTc2IC02LjEyNjEyIDUzLjM4MzQ2IC02LjEyMiA1My4zODI1MiAtNi4xMTk5IDUzLjM4MTIxIC02LjExODI1IDUzLjM3NzYzIC02LjEzMTcgNTMuMzczOSAtNi4xNDEzIDUzLjM3MDAzIC02LjE0OTgxIDUzLjM2NTY4IC02LjE1NjQ0IDUzLjM2MjEgLTYuMTYxNjEgNTMuMzU5MTYgLTYuMTY0MzkgNTMuMzU1MzcgLTYuMTY4IDUzLjM1NTM3IC02LjE2ODwvZ21sOnBvc0xpc3Q+DQorPC9nbWw6TGluZWFyUmluZz4NCis8Z21sOkxpbmVhclJpbmc+DQorPGdtbDpwb3NMaXN0PjU0Ljk2ODk1IC04LjQ0Nzk4IDU0Ljk3MDY2IC04LjQ1MTkzIDU0Ljk3NDAyIC04LjQ1OTQ5IDU0Ljk3NTMzIC04LjQ1NzMxIDU0Ljk3NjczIC04LjQ1NTI5IDU0Ljk3ODMgLTguNDU0OTMgNTQuOTgwNzIgLTguNDU1OTUgNTQuOTgyMzMgLTguNDU1MSA1NC45ODM0IC04LjQ1NCA1NC45ODIwMiAtOC40NTA1OSA1NC45Nzk5NCAtOC40NDg0OCA1NC45NzgxMSAtOC40NDgzNSA1NC45NzY2IC04LjQ0NzQ2IDU0Ljk3NjY1IC04LjQ0NDYgNTQuOTc2NyAtOC40NDIwNSA1NC45NzUzNyAtOC40NDEwNSA1NC45NzQxMSAtOC40NDA4MyA1NC45NzI4NyAtOC40Mzk4NCA1NC45NzExMiAtOC40MzgyOCA1NC45NzAxNyAtOC40NDIyNyA1NC45Njk3NCAtOC40NDUyNCA1NC45Njg5NSAtOC40NDc5OCA1NC45Njg5NSAtOC40NDc5ODwvZ21sOnBvc0xpc3Q+DQorPC9nbWw6TGluZWFyUmluZz4NCis8Z21sOkxpbmVhclJpbmc+DQorPGdtbDpwb3NMaXN0PjUzLjg1MjQ5IC05LjYwMTU0IDUzLjg1Mjk2IC05LjYwNjkyIDUzLjg1NDUgLTkuNjA2MSA1My44NTU2OSAtOS42MDYxNyA1My44NTc0NiAtOS42MDU3MiA1My44NTY1OSAtOS42MDIxNSA1My44NTYzNyAtOS41OTk5MyA1My44NTQ4OSAtOS41OTk5NiA1My44NTM1IC05LjYwMDE2IDUzLjg1MjQ5IC05LjYwMTU0IDUzLjg1MjQ5IC05LjYwMTU0PC9nbWw6cG9zTGlzdD4NCis8L2dtbDpMaW5lYXJSaW5nPg0KKzxnbWw6TGluZWFyUmluZz4NCis8Z21sOnBvc0xpc3Q+NTMuNjE4NDUgLTkuOTg1NDkgNTMuNjE4MzQgLTkuOTg5ODEgNTMuNjIwNzkgLTkuOTkzMDYgNTMuNjIyOTkgLTkuOTk0NTggNTMuNjI1NzkgLTkuOTk1NDIgNTMuNjI0NjEgLTkuOTkxMDMgNTMuNjIyMTUgLTkuOTg4MDcgNTMuNjE4NDUgLTkuOTg1NDkgNTMuNjE4NDUgLTkuOTg1NDk8L2dtbDpwb3NMaXN0Pg0KKzwvZ21sOkxpbmVhclJpbmc+DQorPGdtbDpMaW5lYXJSaW5nPg0KKzxnbWw6cG9zTGlzdD41My4xMTUzMiAtOS42MjIyNSA1My4xMTc4MiAtOS42MjMzNiA1My4xMTkyNiAtOS42MjE1IDUzLjExODY2IC05LjYxODMzIDUzLjExNzQzIC05LjYxODY5IDUzLjExNjEyIC05LjYyMDI2IDUzLjExNTMyIC05LjYyMjI1IDUzLjExNTMyIC05LjYyMjI1PC9nbWw6cG9zTGlzdD4NCis8L2dtbDpMaW5lYXJSaW5nPg0KKzxnbWw6TGluZWFyUmluZz4NCis8Z21sOnBvc0xpc3Q+NTEuNDgyMjcgLTkuNDc0NzQgNTEuNDgzMyAtOS40NzgzMSA1MS40ODE1IC05LjQ4MDIgNTEuNDgyOTcgLTkuNDgyNjggNTEuNDg0OTMgLTkuNDgzNjUgNTEuNDg2NTIgLTkuNDgzMzUgNTEuNDg3NjMgLTkuNDgyMDkgNTEuNDg5MDQgLTkuNDc5MTEgNTEuNDg3MDcgLTkuNDc1NzggNTEuNDg0OSAtOS40NzI4NiA1MS40ODMzIC05LjQ3MzMxIDUxLjQ4MjI3IC05LjQ3NDc0IDUxLjQ4MjI3IC05LjQ3NDc0PC9nbWw6cG9zTGlzdD4NCis8L2dtbDpMaW5lYXJSaW5nPg0KKzxnbWw6TGluZWFyUmluZz4NCis8Z21sOnBvc0xpc3Q+NTEuNzMwNzkgLTEwLjIxODY2IDUxLjczMzcxIC0xMC4yMTc3OCA1MS43MzU0MiAtMTAuMjE0ODcgNTEuNzM3MjQgLTEwLjIxMzAxIDUxLjczOTA3IC0xMC4yMTE5MSA1MS43NDE0OSAtMTAuMjEwNjMgNTEuNzM5NTYgLTEwLjIwODE0IDUxLjczNzI3IC0xMC4yMDY3OCA1MS43MzU2NiAtMTAuMjA2MTUgNTEuNzM0MDMgLTEwLjIwNTgyIDUxLjczMzE1IC0xMC4yMDg2MSA1MS43MzI3MiAtMTAuMjEyODMgNTEuNzMwNzkgLTEwLjIxODY2IDUxLjczMDc5IC0xMC4yMTg2NjwvZ21sOnBvc0xpc3Q+DQorPC9nbWw6TGluZWFyUmluZz4NCis8Z21sOkxpbmVhclJpbmc+DQorPGdtbDpwb3NMaXN0PjUzLjI1NzQ0IC05Ljc0Nzk1IDUzLjI1OTI5IC05Ljc1MDU5IDUzLjI2MDY3IC05Ljc1MzMgNTMuMjYyMTQgLTkuNzU0ODEgNTMuMjY0ODkgLTkuNzU1MDEgNTMuMjY3NDcgLTkuNzQ2NTkgNTMuMjY0NjMgLTkuNzQ2NTEgNTMuMjYyNzIgLTkuNzQ2MTcgNTMuMjYxMTEgLTkuNzQ2NzkgNTMuMjU4OCAtOS43NDU0NCA1My4yNTc0NCAtOS43NDc5NSA1My4yNTc0NCAtOS43NDc5NTwvZ21sOnBvc0xpc3Q+DQorPC9nbWw6TGluZWFyUmluZz4NCis8Z21sOkxpbmVhclJpbmc+DQorPGdtbDpwb3NMaXN0PjU0Ljk1MDk2IC04LjQzMjQ2IDU0Ljk1MDUzIC04LjQzNTU4IDU0Ljk1MDI1IC04LjQzODg4IDU0Ljk1MTE2IC04LjQ0MDc5IDU0Ljk1MTEzIC04LjQ0NDkyIDU0Ljk1MTAxIC04LjQ0Njk4IDU0Ljk1MjM0IC04LjQ0NjA4IDU0Ljk1MzYgLTguNDQ1IDU0Ljk1NDMyIC04LjQ0Njg3IDU0Ljk1NDc3IC04LjQ0ODg2IDU0Ljk1NjExIC04LjQ0NzgxIDU0Ljk1NzQ5IC04LjQ0NTk1IDU0Ljk1ODE3IC04LjQ0MzUyIDU0Ljk1ODUzIC04LjQ0MDIzIDU0Ljk1OTY5IC04LjQzNzM4IDU0Ljk2MTgxIC04LjQzNTY2IDU0Ljk2MTM2IC04LjQzMjA4IDU0Ljk2MDA5IC04LjQzMDEzIDU0Ljk1ODcyIC04LjQyOTkgNTQuOTU3NDIgLTguNDI4NDEgNTQuOTU1NTUgLTguNDI3NDcgNTQuOTU0MDIgLTguNDI4NjYgNTQuOTUxODggLTguNDI4OTQgNTQuOTUwOTYgLTguNDMyNDYgNTQuOTUwOTYgLTguNDMyNDY8L2dtbDpwb3NMaXN0Pg0KKzwvZ21sOkxpbmVhclJpbmc+DQorPGdtbDpMaW5lYXJSaW5nPg0KKzxnbWw6cG9zTGlzdD41MS44MDg4IC0xMC4yNTA3MiA1MS44MDkwOSAtMTAuMjU1MSA1MS44MTAzNiAtMTAuMjU2NTUgNTEuODExMzYgLTEwLjI1NDM4IDUxLjgxMjk5IC0xMC4yNTAyNiA1MS44MTEgLTEwLjI0OTY5IDUxLjgwOTcyIC0xMC4yNDgzOSA1MS44MDg4IC0xMC4yNTA3MiA1MS44MDg4IC0xMC4yNTA3MjwvZ21sOnBvc0xpc3Q+DQorPC9nbWw6TGluZWFyUmluZz4NCis8Z21sOkxpbmVhclJpbmc+DQorPGdtbDpwb3NMaXN0PjU1LjE4NDM2IC04LjE1NDA0IDU1LjE4NDMzIC04LjE1NjQzIDU1LjE4NjcxIC04LjE1NjY1IDU1LjE4ODcxIC04LjE1Njk2IDU1LjE4OTk0IC04LjE1OTcyIDU1LjE5MTI5IC04LjE2MiA1NS4xOTI5MyAtOC4xNjA1IDU1LjE5NDE2IC04LjE1Nzk3IDU1LjE5NDE1IC04LjE1NDQ1IDU1LjE5MDg4IC04LjE1NTcgNTUuMTkwNTkgLTguMTUyNDQgNTUuMTg5MDggLTguMTUzMTggNTUuMTg3NzcgLTguMTUzNzcgNTUuMTg2NzkgLTguMTUxNTQgNTUuMTg1MzMgLTguMTUzMDcgNTUuMTg0MzYgLTguMTU0MDQgNTUuMTg0MzYgLTguMTU0MDQ8L2dtbDpwb3NMaXN0Pg0KKzwvZ21sOkxpbmVhclJpbmc+DQorPGdtbDpMaW5lYXJSaW5nPg0KKzxnbWw6cG9zTGlzdD41My42MjM4IC0xMC4xMjAxNSA1My42MjM2NyAtMTAuMTI0NzYgNTMuNjIzMTEgLTEwLjEyNzQ1IDUzLjYyNTAxIC0xMC4xMjkyMSA1My42MjQ4IC0xMC4xMzIyNyA1My42MjY0IC0xMC4xMzQ0MyA1My42Mjc0MyAtMTAuMTMyOTQgNTMuNjI3MDkgLTEwLjEyOTkzIDUzLjYyNzg2IC0xMC4xMjc5MiA1My42MjY2IC0xMC4xMjYyNyA1My42MjY0OSAtMTAuMTIxMyA1My42MjcwNiAtMTAuMTE5NTQgNTMuNjI2NTQgLTEwLjExNzkgNTMuNjI0ODcgLTEwLjExNjY0IDUzLjYyMzggLTEwLjEyMDE1IDUzLjYyMzggLTEwLjEyMDE1PC9nbWw6cG9zTGlzdD4NCis8L2dtbDpMaW5lYXJSaW5nPg0KKzxnbWw6TGluZWFyUmluZz4NCis8Z21sOnBvc0xpc3Q+NTQuOTU1NjIgLTguNDgyMzEgNTQuOTU3MjMgLTguNDg2NDEgNTQuOTU2ODggLTguNDg5MzggNTQuOTU4NDQgLTguNDkxMjMgNTQuOTU5NiAtOC40ODgzOCA1NC45NTk4NyAtOC40ODUwOCA1NC45NTkyNCAtOC40ODMwNiA1NC45NTgzNyAtOC40ODA2OSA1NC45NTY3NyAtOC40ODEyMyA1NC45NTU2MiAtOC40ODIzMSA1NC45NTU2MiAtOC40ODIzMTwvZ21sOnBvc0xpc3Q+DQorPC9nbWw6TGluZWFyUmluZz4NCis8Z21sOkxpbmVhclJpbmc+DQorPGdtbDpwb3NMaXN0PjU0LjEwMTE1IC0xMC4yMjY3MiA1NC4xMDM4OSAtMTAuMjI5NjMgNTQuMTA2MjYgLTEwLjIyNzQ2IDU0LjEwNjU2IC0xMC4yMjMyOSA1NC4xMDg5IC0xMC4yMjY1OSA1NC4xMTA5MiAtMTAuMjI0MTkgNTQuMTEyNTUgLTEwLjIyNDY4IDU0LjExNDY1IC0xMC4yMjIzIDU0LjExMzc1IC0xMC4yMTk0NCA1NC4xMTQ1OCAtMTAuMjE0MjkgNTQuMTE1OTcgLTEwLjIxMzAxIDU0LjExODU2IC0xMC4yMTE1IDU0LjEyMjQ5IC0xMC4yMDQzMSA1NC4xMjA5NSAtMTAuMjAyNTkgNTQuMTIwODYgLTEwLjE5NzM5IDU0LjExNzk2IC0xMC4xOTgwNSA1NC4xMTU4NiAtMTAuMTk3NzYgNTQuMTEzNzMgLTEwLjE5Nzk1IDU0LjExMTcyIC0xMC4xOTg5NSA1NC4xMDk3OSAtMTAuMjAyNjIgNTQuMTEwNzcgLTEwLjIwNDQgNTQuMTEwMDkgLTEwLjIwNzQgNTQuMTA4ODUgLTEwLjIxMDU4IDU0LjEwODMyIC0xMC4yMTQwOCA1NC4xMDY4MiAtMTAuMjE1ODEgNTQuMTA0NyAtMTAuMjE5NiA1NC4xMDIwNCAtMTAuMjI0NTUgNTQuMTAxMTUgLTEwLjIyNjcyIDU0LjEwMTE1IC0xMC4yMjY3MjwvZ21sOnBvc0xpc3Q+DQorPC9nbWw6TGluZWFyUmluZz4NCis8Z21sOkxpbmVhclJpbmc+DQorPGdtbDpwb3NMaXN0PjUyLjMyNDAzIC0xMC4wMTE1OCA1Mi4zMjM2NiAtMTAuMDEzOTIgNTIuMzIzNjkgLTEwLjAxNzA5IDUyLjMyNTAzIC0xMC4wMTY0NiA1Mi4zMjYwNSAtMTAuMDE1MzEgNTIuMzI3MDkgLTEwLjAxNDkyIDUyLjMyODk2IC0xMC4wMTQ3IDUyLjMyODk4IC0xMC4wMTE5OSA1Mi4zMjc2NSAtMTAuMDEwMDYgNTIuMzI2MjkgLTEwLjAwODU4IDUyLjMyNDc0IC0xMC4wMDgyNiA1Mi4zMjQwMyAtMTAuMDExNTggNTIuMzI0MDMgLTEwLjAxMTU4PC9nbWw6cG9zTGlzdD4NCis8L2dtbDpMaW5lYXJSaW5nPg0KKzxnbWw6TGluZWFyUmluZz4NCis8Z21sOnBvc0xpc3Q+NTMuMjE3NiAtOS4wMDg2NSA1My4yMTg2OSAtOS4wMTE2MiA1My4yMTY4NyAtOS4wMTU0MSA1My4yMjAxMiAtOS4wMTIzMyA1My4yMjEwOCAtOS4wMTAzNyA1My4yMjIyMSAtOS4wMDg1OCA1My4yMjMwNyAtOS4wMDY3NCA1My4yMjMzIC05LjAwMTg4IDUzLjIyMjQ1IC04Ljk5ODIgNTMuMjIwNjEgLTguOTk2NzkgNTMuMjE5NSAtOC45OTk2NCA1My4yMTk5OSAtOS4wMDMyNiA1My4yMTc2IC05LjAwODY1IDUzLjIxNzYgLTkuMDA4NjU8L2dtbDpwb3NMaXN0Pg0KKzwvZ21sOkxpbmVhclJpbmc+DQorPGdtbDpMaW5lYXJSaW5nPg0KKzxnbWw6cG9zTGlzdD41My4xOTMxOSAtOC45OTY0NyA1My4xOTExIC04Ljk5NjA4IDUzLjE4OTU1IC04Ljk5NTk1IDUzLjE4OTg4IC05LjAwMDQ1IDUzLjE5MTczIC04Ljk5ODk1IDUzLjE5MzE5IC04Ljk5NjQ3IDUzLjE5MzE5IC04Ljk5NjQ3PC9nbWw6cG9zTGlzdD4NCis8L2dtbDpMaW5lYXJSaW5nPg0KKzxnbWw6TGluZWFyUmluZz4NCis8Z21sOnBvc0xpc3Q+NTMuMzM5NDcgLTkuNTg0MTYgNTMuMzQwNTEgLTkuNTg2NjUgNTMuMzQyNTggLTkuNTg3MzMgNTMuMzQzODQgLTkuNTg3NzIgNTMuMzQ1MzQgLTkuNTg4NzcgNTMuMzQ2ODIgLTkuNTg1ODEgNTMuMzQ2NDUgLTkuNTgxNTggNTMuMzQ2NjYgLTkuNTc5NzggNTMuMzQ1MzQgLTkuNTc3NTQgNTMuMzQzMjQgLTkuNTc5OTMgNTMuMzQxNDkgLTkuNTgxNDQgNTMuMzQwNTEgLTkuNTgyMzQgNTMuMzM5NDcgLTkuNTg0MTYgNTMuMzM5NDcgLTkuNTg0MTY8L2dtbDpwb3NMaXN0Pg0KKzwvZ21sOkxpbmVhclJpbmc+DQorPGdtbDpMaW5lYXJSaW5nPg0KKzxnbWw6cG9zTGlzdD41NC4wMDA5OSAtOS44ODM2OSA1NC4wMDI1NiAtOS44NzgzNiA1My45OTk1NiAtOS44NzkwMyA1NC4wMDA5OSAtOS44ODM2OSA1NC4wMDA5OSAtOS44ODM2OTwvZ21sOnBvc0xpc3Q+DQorPC9nbWw6TGluZWFyUmluZz4NCis8Z21sOkxpbmVhclJpbmc+DQorPGdtbDpwb3NMaXN0PjU0LjEzOTMyIC0xMC4yMDI0NyA1NC4xNDA0NyAtMTAuMjAzMDIgNTQuMTQyNTIgLTEwLjIwMjgyIDU0LjE0MjQ0IC0xMC4xOTk5OCA1NC4xNDAzMyAtMTAuMTk4NiA1NC4xMzkzMiAtMTAuMjAyNDcgNTQuMTM5MzIgLTEwLjIwMjQ3PC9nbWw6cG9zTGlzdD4NCis8L2dtbDpMaW5lYXJSaW5nPg0KKzxnbWw6TGluZWFyUmluZz4NCis8Z21sOnBvc0xpc3Q+NTQuMjA4MDEgLTEwLjExNDIzIDU0LjIwODA0IC0xMC4xMTc4NSA1NC4yMDczNyAtMTAuMTIxOTUgNTQuMjA4OTkgLTEwLjEyMzg2IDU0LjIwODA5IC0xMC4xMjc0NSA1NC4yMDk5NCAtMTAuMTI4NjIgNTQuMjExMDEgLTEwLjEyNjY0IDU0LjIxMjMyIC0xMC4xMjYyNyA1NC4yMTM2NCAtMTAuMTI1OTIgNTQuMjEzMDYgLTEwLjEyMjM0IDU0LjIxMTI4IC0xMC4xMjI3NyA1NC4yMDk3MyAtMTAuMTIxMTkgNTQuMjA5NjUgLTEwLjExODUgNTQuMjEwMTkgLTEwLjExNDY4IDU0LjIwODc2IC0xMC4xMTE1NiA1NC4yMDgwMSAtMTAuMTE0MjMgNTQuMjA4MDEgLTEwLjExNDIzPC9nbWw6cG9zTGlzdD4NCis8L2dtbDpMaW5lYXJSaW5nPg0KKzxnbWw6TGluZWFyUmluZz4NCis8Z21sOnBvc0xpc3Q+NTMuMjc1MyAtOS42MTM3NCA1My4yNzgyMyAtOS42MTUzNCA1My4yNzg4IC05LjYxOTI4IDUzLjI4MDMzIC05LjYxODM0IDUzLjI4MTY0IC05LjYxNzk2IDUzLjI4MzIyIC05LjYxNzc5IDUzLjI4MzA1IC05LjYxNDg0IDUzLjI4MzcyIC05LjYxMjk4IDUzLjI4MzAxIC05LjYwOTc3IDUzLjI4MTA5IC05LjYwOTczIDUzLjI3OTgxIC05LjYwOTY1IDUzLjI3ODcxIC05LjYxMDgzIDUzLjI3NjkxIC05LjYxMTU3IDUzLjI3NTMgLTkuNjEzNzQgNTMuMjc1MyAtOS42MTM3NDwvZ21sOnBvc0xpc3Q+DQorPC9nbWw6TGluZWFyUmluZz4NCis8Z21sOkxpbmVhclJpbmc+DQorPGdtbDpwb3NMaXN0PjUyLjc0NTk4IC05LjAyMTgzIDUyLjc0ODIzIC05LjAyMjU1IDUyLjc1MDUyIC05LjAyMjgyIDUyLjc1MjAxIC05LjAyMTI3IDUyLjc1MzQyIC05LjAxOTQxIDUyLjc1MiAtOS4wMTczMiA1Mi43NTAzNyAtOS4wMTgwOSA1Mi43NDg1MyAtOS4wMTk1NiA1Mi43NDU5OCAtOS4wMjE4MyA1Mi43NDU5OCAtOS4wMjE4MzwvZ21sOnBvc0xpc3Q+DQorPC9nbWw6TGluZWFyUmluZz4NCis8Z21sOkxpbmVhclJpbmc+DQorPGdtbDpwb3NMaXN0PjUyLjcwMTI1IC04Ljk2MDEzIDUyLjcwMTYxIC04Ljk2NDQ0IDUyLjcwODI5IC04Ljk2Nzc4IDUyLjcwOSAtOC45NzIzMSA1Mi43MTA3IC04Ljk3MDM0IDUyLjcxMTYzIC04Ljk2NzMzIDUyLjcxMTY5IC04Ljk2Mzg2IDUyLjcxMTE2IC04Ljk2MDczIDUyLjcwOTk2IC04Ljk1OTQ1IDUyLjcxMDE2IC04Ljk1NjQ2IDUyLjcxMDI0IC04Ljk1NDA0IDUyLjcwOSAtOC45NTMyMiA1Mi43MDcxOSAtOC45NTQwOSA1Mi43MDU2NCAtOC45NTY1NCA1Mi43MDM0OSAtOC45NTg1OCA1Mi43MDEyNSAtOC45NjAxMyA1Mi43MDEyNSAtOC45NjAxMzwvZ21sOnBvc0xpc3Q+DQorPC9nbWw6TGluZWFyUmluZz4NCis8Z21sOkxpbmVhclJpbmc+DQorPGdtbDpwb3NMaXN0PjUyLjEyNDkxIC0xMC41Njg1MiA1Mi4xMjQ4IC0xMC41NzIwOSA1Mi4xMjY2MyAtMTAuNTc0NTkgNTIuMTI2ODggLTEwLjU3NzA1IDUyLjEyNjMzIC0xMC41ODA1MiA1Mi4xMjc3MiAtMTAuNTgyNjIgNTIuMTI5MjUgLTEwLjU3OTY1IDUyLjEzMDc1IC0xMC41NzcyOCA1Mi4xMzIzMyAtMTAuNTc1OTggNTIuMTMyNTkgLTEwLjU3MDYzIDUyLjEzNDQ5IC0xMC41NzEwNCA1Mi4xMzQ2NyAtMTAuNTY2NTggNTIuMTM3MDYgLTEwLjU2Njc5IDUyLjEzODM3IC0xMC41NjQyMyA1Mi4xMzc3MyAtMTAuNTYwOTQgNTIuMTM1MjYgLTEwLjU2MTYgNTIuMTMyNTkgLTEwLjU2MTQ4IDUyLjEzMDMzIC0xMC41NjA5OSA1Mi4xMjgyNyAtMTAuNTYxMyA1Mi4xMjY5OSAtMTAuNTY1NjcgNTIuMTI0OTEgLTEwLjU2ODUyIDUyLjEyNDkxIC0xMC41Njg1MjwvZ21sOnBvc0xpc3Q+DQorPC9nbWw6TGluZWFyUmluZz4NCis8Z21sOkxpbmVhclJpbmc+DQorPGdtbDpwb3NMaXN0PjUzLjg1MzUxIC05LjY0NTEyIDUzLjg1NDY4IC05LjY0NzIxIDUzLjg1NTI3IC05LjY0OTE4IDUzLjg1Nzk3IC05LjY0ODkyIDUzLjg1ODcyIC05LjY0NTc4IDUzLjg1OTE2IC05LjY0MzIzIDUzLjg1NzgyIC05LjY0NDA3IDUzLjg1NjU2IC05LjY0NTA3IDUzLjg1NDY1IC05LjY0MzMyIDUzLjg1MzUxIC05LjY0NTEyIDUzLjg1MzUxIC05LjY0NTEyPC9nbWw6cG9zTGlzdD4NCis8L2dtbDpMaW5lYXJSaW5nPg0KKzxnbWw6TGluZWFyUmluZz4NCis8Z21sOnBvc0xpc3Q+NTEuODQ1OTIgLTguMjk4MzYgNTEuODQ2MjggLTguMzAwMjYgNTEuODQ2MjggLTguMzAwMjYgNTEuODQ3MiAtOC4zMDQ5OSA1MS44NDUyMSAtOC4zMDYxOSA1MS44NDU3NSAtOC4zMTMyNCA1MS44NDgxMSAtOC4zMTUzNSA1MS44NDgyMSAtOC4zMTg3OCA1MS44NTA0OSAtOC4zMjA1OCA1MS44NTQ4OCAtOC4zMTkyOCA1MS44NjAyOCAtOC4zMTk3NCA1MS44NjQ1IC04LjMxODI3IDUxLjg2NjgxIC04LjMxOTc3IDUxLjg2OTgyIC04LjMyMDA1IDUxLjg3NDgzIC04LjMyMTA1IDUxLjg3NzE2IC04LjMyMTk4IDUxLjg3OTA3IC04LjMyNDMzIDUxLjg4MDI5IC04LjMyNzAzIDUxLjg4MTI4IC04LjMyNTY4IDUxLjg4MTc0IC04LjMyMjQ4IDUxLjg4MjU0IC04LjMxOTQ4IDUxLjg4NTAzIC04LjMxNzYgNTEuODg2NjYgLTguMzE2MzQgNTEuODg3ODIgLTguMzEzNTQgNTEuODg5MDIgLTguMzEwMTUgNTEuODkxNTEgLTguMzA0NzIgNTEuODkwNzIgLTguMjk3MTggNTEuODkwNjkgLTguMjg5MyA1MS44ODkyOSAtOC4yODY0MyA1MS44ODc0MiAtOC4yODY5MSA1MS44ODQ4NiAtOC4yODY3MSA1MS44ODUyNiAtOC4yODI2IDUxLjg4NDM2IC04LjI3ODkyIDUxLjg4MzcgLTguMjc1ODUgNTEuODgzMjcgLTguMjcxNzggNTEuODg0NzkgLTguMjcyNiA1MS44ODc0MSAtOC4yNzUwNCA1MS44ODc3IC04LjI3MTM2IDUxLjg4NjkgLTguMjY1NzYgNTEuODg1NDEgLTguMjY0MzYgNTEuODgzMDIgLTguMjYyNjkgNTEuODgxODggLTguMjU4MzcgNTEuODgxNDUgLTguMjUyNTQgNTEuODgyMDggLTguMjQ3NzIgNTEuODgwMzMgLTguMjQyNTggNTEuODgwMTYgLTguMjM3MDcgNTEuODgwNzggLTguMjMyNCA1MS44ODE2NyAtOC4yMjYgNTEuODgwNDcgLTguMjE5MjkgNTEuODgwNzYgLTguMjEzNjkgNTEuODgyMDggLTguMjA3OTUgNTEuODgyMDggLTguMjAyNiA1MS44ODE2MiAtOC4xOTc2NCA1MS44Nzc0IC04LjIwMTA2IDUxLjg3MzgxIC04LjIwMjc5IDUxLjg3MTE1IC04LjIwNjEzIDUxLjg2ODgzIC04LjIwODMzIDUxLjg2NTQ3IC04LjIwOTM0IDUxLjg2MjYgLTguMjA5NTQgNTEuODYwOTggLTguMjEwNjUgNTEuODYwMSAtOC4yMTM1IDUxLjg2MDQ5IC04LjIxODI5IDUxLjg2MTIxIC04LjIyNzE2IDUxLjg2MDY4IC04LjIzODc5IDUxLjg2MDQ3IC04LjI0OTU5IDUxLjg2MDEgLTguMjU0ODkgNTEuODYwOTggLTguMjU3MjMgNTEuODYwNDggLTguMjYzMjUgNTEuODU3MjcgLTguMjYzMDkgNTEuODU0MzYgLTguMjY1OTQgNTEuODUzMjEgLTguMjcwMjQgNTEuODUzNjEgLTguMjc2MzggNTEuODUyNDggLTguMjgyMTUgNTEuODUwODUgLTguMjg4NDUgNTEuODQ3ODUgLTguMjk2NDggNTEuODQ1OTIgLTguMjk4MzYgNTEuODQ1OTIgLTguMjk4MzY8L2dtbDpwb3NMaXN0Pg0KKzwvZ21sOkxpbmVhclJpbmc+DQorPGdtbDpMaW5lYXJSaW5nPg0KKzxnbWw6cG9zTGlzdD41NS4yNDE4NiAtNy43NTE0NyA1NS4yNDI0OCAtNy43NTM5NiA1NS4yNDMyIC03Ljc1NjE1IDU1LjI0NDQgLTcuNzU2MDEgNTUuMjQ1NDcgLTcuNzU0NTcgNTUuMjQ1NTcgLTcuNzUyNjUgNTUuMjQ0MzUgLTcuNzUxMiA1NS4yNDMwNyAtNy43NTExNiA1NS4yNDE4NiAtNy43NTE0NyA1NS4yNDE4NiAtNy43NTE0NzwvZ21sOnBvc0xpc3Q+DQorPC9nbWw6TGluZWFyUmluZz4NCis8Z21sOkxpbmVhclJpbmc+DQorPGdtbDpwb3NMaXN0PjU0LjI3NzQxIC0xMC4wODE5IDU0LjI3ODQ1IC0xMC4wODU0MiA1NC4yNzk3OSAtMTAuMDg2MDEgNTQuMjgxMDUgLTEwLjA4NTE3IDU0LjI4MTI4IC0xMC4wODMxNyA1NC4yODAyOSAtMTAuMDgwMyA1NC4yNzg5OSAtMTAuMDgwMzQgNTQuMjc3NDEgLTEwLjA4MTkgNTQuMjc3NDEgLTEwLjA4MTk8L2dtbDpwb3NMaXN0Pg0KKzwvZ21sOkxpbmVhclJpbmc+DQorPGdtbDpMaW5lYXJSaW5nPg0KKzxnbWw6cG9zTGlzdD41My4yMjY5IC05LjcxMzEzIDUzLjIyOTQxIC05LjcxNjk2IDUzLjIyOTQ2IC05LjcyMDIgNTMuMjMyNCAtOS43MjMwNCA1My4yMzIxMSAtOS43Mjg4MiA1My4yMzAyMyAtOS43MzA3NyA1My4yMzAyIC05LjczNDEzIDUzLjIzMDEgLTkuNzM5NjQgNTMuMjI4MzkgLTkuNzQzMTYgNTMuMjI2MzUgLTkuNzQ1OTkgNTMuMjI1MTYgLTkuNzQ4ODUgNTMuMjI4NjMgLTkuNzQ5MTkgNTMuMjI5ODUgLTkuNzUyNzkgNTMuMjMzNjIgLTkuNzUwMjYgNTMuMjM0NDQgLTkuNzQ2MjcgNTMuMjMyMzUgLTkuNzQ1ODkgNTMuMjM1MzQgLTkuNzM1NyA1My4yMzcwNiAtOS43Mzc0IDUzLjIzOTk4IC05LjczNjQxIDUzLjI0MTA5IC05LjczMzcgNTMuMjQyODEgLTkuNzM1NCA1My4yNDQ0MSAtOS43MzYzMiA1My4yNDYxMiAtOS43MzU0IDUzLjI0NzI5IC05LjczNDU0IDUzLjI0Nzc0IC05LjczMTg4IDUzLjI0NzU5IC05LjcyODc4IDUzLjI0OTQyIC05LjcyNDY3IDUzLjI0ODg2IC05LjcyMDczIDUzLjI0NzczIC05LjcxNjk5IDUzLjI0NjI4IC05LjcxMzgxIDUzLjI0NTA3IC05LjcxMjgxIDUzLjI0Mjc0IC05LjcxMzE1IDUzLjI0MDE3IC05LjcxNTc0IDUzLjIzODEyIC05LjcxNzM1IDUzLjIzNjA2IC05LjcxNjUxIDUzLjIzNDUyIC05LjcxNDg0IDUzLjIzMjIyIC05LjcxMzM1IDUzLjIyOTk3IC05LjcxMjc3IDUzLjIyNjkgLTkuNzEzMTMgNTMuMjI2OSAtOS43MTMxMzwvZ21sOnBvc0xpc3Q+DQorPC9nbWw6TGluZWFyUmluZz4NCis8Z21sOkxpbmVhclJpbmc+DQorPGdtbDpwb3NMaXN0PjUzLjE0NjYgLTkuODQ3MTggNTMuMTQ2NDIgLTkuODQ5NTkgNTMuMTQ3NjMgLTkuODUxODQgNTMuMTQ4NzEgLTkuODUzNTggNTMuMTUwNCAtOS44NTMxNyA1My4xNTEzNiAtOS44NTUwNSA1My4xNTI2NiAtOS44NTQ4NSA1My4xNTMwMyAtOS44NTExIDUzLjE1MTc5IC05Ljg0NjcxIDUzLjE1MDAzIC05Ljg0NTczIDUzLjE0ODA0IC05Ljg0NjQgNTMuMTQ2NiAtOS44NDcxOCA1My4xNDY2IC05Ljg0NzE4PC9nbWw6cG9zTGlzdD4NCis8L2dtbDpMaW5lYXJSaW5nPg0KKzxnbWw6TGluZWFyUmluZz4NCis8Z21sOnBvc0xpc3Q+NTMuNTAzMTEgLTEwLjE0Njg0IDUzLjUwNDMgLTEwLjE0ODE2IDUzLjUwNTA2IC0xMC4xNTA0NyA1My41MDYwMiAtMTAuMTUxMjcgNTMuNTA3NTcgLTEwLjE1MDA0IDUzLjUwOTc4IC0xMC4xNDg3NyA1My41MTE4MyAtMTAuMTQ3MTYgNTMuNTEzMzQgLTEwLjE0NTMgNTMuNTE0MzggLTEwLjE0MjQyIDUzLjUxMzkgLTEwLjEzOTg2IDUzLjUxMjUgLTEwLjEzNjMzIDUzLjUxMDg3IC0xMC4xMzQ0NyA1My41MDkyOSAtMTAuMTM0NzggNTMuNTA4NDggLTEwLjEzNzA5IDUzLjUwNzU0IC0xMC4xMzk5OCA1My41MDYwOCAtMTAuMTQyNDkgNTMuNTA1MDggLTEwLjE0MzUyIDUzLjUwNCAtMTAuMTQ0NTUgNTMuNTAzMTEgLTEwLjE0Njg0IDUzLjUwMzExIC0xMC4xNDY4NDwvZ21sOnBvc0xpc3Q+DQorPC9nbWw6TGluZWFyUmluZz4NCis8Z21sOkxpbmVhclJpbmc+DQorPGdtbDpwb3NMaXN0PjUzLjA0ODI2IC05LjUxNDI5IDUzLjA0ODE5IC05LjUyMDM5IDUzLjA0NzMgLTkuNTIzODggNTMuMDQ3MTQgLTkuNTI4NzMgNTMuMDQ4MDMgLTkuNTMxNjcgNTMuMDQ5NjYgLTkuNTMzMzcgNTMuMDQ5MDIgLTkuNTM3MjEgNTMuMDUwNDQgLTkuNTQwNDEgNTMuMDQ5MzkgLTkuNTQ2MTUgNTMuMDUwNjMgLTkuNTQ4MDggNTMuMDUyODUgLTkuNTQ1NDUgNTMuMDU1MDIgLTkuNTQ0NjcgNTMuMDU3MTggLTkuNTQ0MTcgNTMuMDU5MDggLTkuNTQyMSA1My4wNjExNSAtOS41NDAyMSA1My4wNjM3NCAtOS41Mzc1MSA1My4wNjU3NCAtOS41MzUzMSA1My4wNjY0MiAtOS41MjcwMyA1My4wNjg3MiAtOS41MjMzNSA1My4wNzAyOSAtOS41MTgxNSA1My4wNjg1OSAtOS41MTYxNCA1My4wNjc1MyAtOS41MTQwOSA1My4wNjU1OSAtOS41MTE1OCA1My4wNjcyMiAtOS41MDgyMiA1My4wNjcxNyAtOS41MDM3OCA1My4wNjU0OSAtOS40OTg4NiA1My4wNjE1IC05LjQ5NjcgNTMuMDU5MTUgLTkuNDk1OTQgNTMuMDU3NDkgLTkuNDk0ODUgNTMuMDU1ODggLTkuNDk3OSA1My4wNTMzNyAtOS41MDU5NiA1My4wNTEwMiAtOS41MDc5NSA1My4wNDkzNSAtOS41MTA2OSA1My4wNDgyNiAtOS41MTQyOSA1My4wNDgyNiAtOS41MTQyOTwvZ21sOnBvc0xpc3Q+DQorPC9nbWw6TGluZWFyUmluZz4NCis8Z21sOkxpbmVhclJpbmc+DQorPGdtbDpwb3NMaXN0PjUzLjcwOTgxIC0xMC4wMTU5OCA1My43MTIxNSAtMTAuMDIwOCA1My43MTM0OCAtMTAuMDI0MDIgNTMuNzE0NTYgLTEwLjAyNzAyIDUzLjcxNzg4IC0xMC4wMjgzMSA1My43MTc3NCAtMTAuMDIzNzggNTMuNzE1OTQgLTEwLjAyMDYyIDUzLjcxNTQzIC0xMC4wMTQ3NyA1My43MTM3MyAtMTAuMDEzOTYgNTMuNzExNDEgLTEwLjAxMjg4IDUzLjcwOTgxIC0xMC4wMTU5OCA1My43MDk4MSAtMTAuMDE1OTg8L2dtbDpwb3NMaXN0Pg0KKzwvZ21sOkxpbmVhclJpbmc+DQorPGdtbDpMaW5lYXJSaW5nPg0KKzxnbWw6cG9zTGlzdD41MS41MTYwMSAtOS40NTcxOCA1MS41MTYxOCAtOS40NjEwNiA1MS41MTYwNSAtOS40NjI5NCA1MS41MTU5OCAtOS40NjYzMyA1MS41MTQwNSAtOS40NzI0NSA1MS41MTU2MyAtOS40NzM2NCA1MS41MTYzMSAtOS40NzY4NyA1MS41MTc5NyAtOS40NzE4OCA1MS41MTY4IC05LjQ2NzY3IDUxLjUxOTMxIC05LjQ2MzcgNTEuNTIzMjIgLTkuNDUxODkgNTEuNTIyMjYgLTkuNDQ5NzkgNTEuNTIwMjIgLTkuNDUxMzMgNTEuNTE3NDYgLTkuNDUzNzcgNTEuNTE2MDEgLTkuNDU3MTggNTEuNTE2MDEgLTkuNDU3MTg8L2dtbDpwb3NMaXN0Pg0KKzwvZ21sOkxpbmVhclJpbmc+DQorPGdtbDpMaW5lYXJSaW5nPg0KKzxnbWw6cG9zTGlzdD41Mi42NzQ2MSAtOS4wMDgyOCA1Mi42NzU5NyAtOS4wMDk4OSA1Mi42Nzc2NiAtOS4wMTM1NSA1Mi42Nzg3OSAtOS4wMTE3OCA1Mi42ODAwNSAtOS4wMTA5NiA1Mi42ODE1OSAtOS4wMDk4NyA1Mi42ODEwMyAtOS4wMDcxOSA1Mi42ODI1NSAtOS4wMDUxOSA1Mi42ODA0IC05LjAwMTYzIDUyLjY3ODIyIC05LjAwMzc5IDUyLjY3NjI5IC05LjAwNTI3IDUyLjY3NTAyIC05LjAwNjI0IDUyLjY3NDYxIC05LjAwODI4IDUyLjY3NDYxIC05LjAwODI4PC9nbWw6cG9zTGlzdD4NCis8L2dtbDpMaW5lYXJSaW5nPg0KKzxnbWw6TGluZWFyUmluZz4NCis8Z21sOnBvc0xpc3Q+NTEuNDc3MzEgLTkuNDk2OTYgNTEuNDc5ODEgLTkuNDk4MDMgNTEuNDgwNjUgLTkuNTAxNTkgNTEuNDgyMTYgLTkuNDk5OTUgNTEuNDgyOTkgLTkuNDk3NDUgNTEuNDgyOTUgLTkuNDk1MzcgNTEuNDgxMDggLTkuNDk0NTcgNTEuNDc5OTMgLTkuNDkzOTEgNTEuNDc4NjMgLTkuNDk0MTIgNTEuNDc3MzEgLTkuNDk2OTYgNTEuNDc3MzEgLTkuNDk2OTY8L2dtbDpwb3NMaXN0Pg0KKzwvZ21sOkxpbmVhclJpbmc+DQorPGdtbDpMaW5lYXJSaW5nPg0KKzxnbWw6cG9zTGlzdD41MS41MTE2NCAtOS4xNzUxIDUxLjUxMjE4IC05LjE3MDc3IDUxLjUxMzMxIC05LjE2ODg4IDUxLjUxMjA1IC05LjE2NTU5IDUxLjUxMDgxIC05LjE2OTIyIDUxLjUwOTg0IC05LjE3MzA1IDUxLjUxMDE5IC05LjE3NDczIDUxLjUxMTY0IC05LjE3NTEgNTEuNTExNjQgLTkuMTc1MTwvZ21sOnBvc0xpc3Q+DQorPC9nbWw6TGluZWFyUmluZz4NCis8Z21sOkxpbmVhclJpbmc+DQorPGdtbDpwb3NMaXN0PjUxLjQ4Nzg0IC05LjQyNTMyIDUxLjQ4NzMzIC05LjQyODQ2IDUxLjQ5MDE5IC05LjQyOTc0IDUxLjQ5MTk2IC05LjQyNjk4IDUxLjQ5NDE3IC05LjQyOTQ2IDUxLjQ5NDY3IC05LjQzNjQ4IDUxLjQ5MTI0IC05LjQzODA1IDUxLjQ5MTAxIC05LjQ0MjQzIDUxLjQ5MjY5IC05LjQ0NDUyIDUxLjQ5MTE2IC05LjQ0NzkyIDUxLjQ5MzQ3IC05LjQ0NzkyIDUxLjQ5NTE2IC05LjQ0NzM1IDUxLjQ5NjM0IC05LjQ0NjM5IDUxLjQ5Njg5IC05LjQ0MjY1IDUxLjQ5Nzc1IC05LjQzOTcyIDUxLjQ5ODY1IC05LjQzNjIgNTEuNDk4MDkgLTkuNDMzODcgNTEuNDk5MjQgLTkuNDMwNyA1MS41MDA2NSAtOS40MjkwNSA1MS41MDE5MiAtOS40MjU2IDUxLjUwMjI3IC05LjQyMDk0IDUxLjUwMjY5IC05LjQxODk0IDUxLjUwMTg4IC05LjQxNzMyIDUxLjUwMDc3IC05LjQxNjA4IDUxLjQ5OTA5IC05LjQxODg2IDUxLjQ5NzYyIC05LjQyMTM5IDUxLjQ5NzAzIC05LjQyMzE5IDUxLjQ5MzggLTkuNDIzMTggNTEuNDkyMTkgLTkuNDIwMDggNTEuNDg5ODIgLTkuNDIwOTYgNTEuNDg3ODQgLTkuNDI1MzIgNTEuNDg3ODQgLTkuNDI1MzI8L2dtbDpwb3NMaXN0Pg0KKzwvZ21sOkxpbmVhclJpbmc+DQorPGdtbDpMaW5lYXJSaW5nPg0KKzxnbWw6cG9zTGlzdD41My44ODEwMSAtOS43MTcwNCA1My44ODExMSAtOS43MTk4NiA1My44ODIyNiAtOS43MjMzNCA1My44ODM4IC05LjcyMjI0IDUzLjg4NSAtOS43MjA3NSA1My44ODYyNyAtOS43MTgzNCA1My44ODUyOSAtOS43MTY0NSA1My44ODM3MiAtOS43MTY2IDUzLjg4MjUyIC05LjcxNjU1IDUzLjg4MTAxIC05LjcxNzA0IDUzLjg4MTAxIC05LjcxNzA0PC9nbWw6cG9zTGlzdD4NCis8L2dtbDpMaW5lYXJSaW5nPg0KKzxnbWw6TGluZWFyUmluZz4NCis8Z21sOnBvc0xpc3Q+NTEuNTA1ODYgLTkuNDM0NzQgNTEuNTA1NTkgLTkuNDM5NyA1MS41MDY4NiAtOS40Mzg3NyA1MS41MDc2OCAtOS40NDI2MSA1MS41MDkyNSAtOS40Mzk5NiA1MS41MDgwOCAtOS40MzU5IDUxLjUwODY2IC05LjQzNDI0IDUxLjUwNjc4IC05LjQzMjI2IDUxLjUwNTg2IC05LjQzNDc0IDUxLjUwNTg2IC05LjQzNDc0PC9nbWw6cG9zTGlzdD4NCis8L2dtbDpMaW5lYXJSaW5nPg0KKzxnbWw6TGluZWFyUmluZz4NCis8Z21sOnBvc0xpc3Q+NTMuODQ2NjggLTkuNjYzOTEgNTMuODQ4MTMgLTkuNjY1NzQgNTMuODQ5MjQgLTkuNjY0MDkgNTMuODUwNTQgLTkuNjYxMDYgNTMuODQ4IC05LjY1OTAzIDUzLjg0NzQ5IC05LjY2MjY3IDUzLjg0NjY4IC05LjY2MzkxIDUzLjg0NjY4IC05LjY2MzkxPC9nbWw6cG9zTGlzdD4NCis8L2dtbDpMaW5lYXJSaW5nPg0KKzxnbWw6TGluZWFyUmluZz4NCis8Z21sOnBvc0xpc3Q+NTIuNjAzODMgLTkuNTA5NDcgNTIuNjA2NCAtOS41MTIyNCA1Mi42MDk1NyAtOS41MTQyMiA1Mi42MTMzNSAtOS41MTI5OSA1Mi42MTU5NyAtOS41MTIyOSA1Mi42MTcyNCAtOS41MDYzMyA1Mi42MTczMyAtOS41MDEzNSA1Mi42MTQ2MSAtOS41MDU4MiA1Mi42MTQwNiAtOS41MDA1NiA1Mi42MDk1NSAtOS41MDA2IDUyLjYwNzUyIC05LjUwNTY1IDUyLjYwNDYzIC05LjUwNDc4IDUyLjYwMzgzIC05LjUwOTQ3IDUyLjYwMzgzIC05LjUwOTQ3PC9nbWw6cG9zTGlzdD4NCis8L2dtbDpMaW5lYXJSaW5nPg0KKzxnbWw6TGluZWFyUmluZz4NCis8Z21sOnBvc0xpc3Q+NTQuMzIyMzIgLTkuODU3MTYgNTQuMzIyNDYgLTkuODU5MjMgNTQuMzIzNzEgLTkuODYxMjIgNTQuMzI0ODcgLTkuODYzMDIgNTQuMzI1NjEgLTkuODYwMzMgNTQuMzI2MjMgLTkuODU2NTIgNTQuMzI0MzMgLTkuODU0NzIgNTQuMzIzMDMgLTkuODU0NzggNTQuMzIyMzIgLTkuODU3MTYgNTQuMzIyMzIgLTkuODU3MTY8L2dtbDpwb3NMaXN0Pg0KKzwvZ21sOkxpbmVhclJpbmc+DQorPGdtbDpMaW5lYXJSaW5nPg0KKzxnbWw6cG9zTGlzdD41NS4wNzA1IC04LjMyNSA1NS4wNzA1MSAtOC4zMzAxMyA1NS4wNzIxMSAtOC4zMzEwMSA1NS4wNzMxMiAtOC4zMzI3NyA1NS4wNzUzNiAtOC4zMzIwMSA1NS4wNzUxMyAtOC4zMjk1OCA1NS4wNzU3MiAtOC4zMjUxOSA1NS4wNzQ1NCAtOC4zMjUgNTUuMDcxNjggLTguMzIzNTkgNTUuMDcwNSAtOC4zMjUgNTUuMDcwNSAtOC4zMjU8L2dtbDpwb3NMaXN0Pg0KKzwvZ21sOkxpbmVhclJpbmc+DQorPGdtbDpMaW5lYXJSaW5nPg0KKzxnbWw6cG9zTGlzdD41Mi4wNTM1NyAtMTAuNjA0OTMgNTIuMDU1MTggLTEwLjYwNTU3IDUyLjA1NjYxIC0xMC42MDQ5OSA1Mi4wNTgyNyAtMTAuNjAyODEgNTIuMDYxMDYgLTEwLjU5OTIyIDUyLjA2Mzc5IC0xMC41OTc0MSA1Mi4wNjQ4NyAtMTAuNTk1NTUgNTIuMDY0NDEgLTEwLjU5MjMgNTIuMDYyMSAtMTAuNTkxMDYgNTIuMDU5OTQgLTEwLjU5MTQ4IDUyLjA1ODMyIC0xMC41OTIwMyA1Mi4wNTc1MSAtMTAuNTk2MjEgNTIuMDU1OTUgLTEwLjU5OTYgNTIuMDU0NTEgLTEwLjYwMjQzIDUyLjA1MzU3IC0xMC42MDQ5MyA1Mi4wNTM1NyAtMTAuNjA0OTM8L2dtbDpwb3NMaXN0Pg0KKzwvZ21sOkxpbmVhclJpbmc+DQorPGdtbDpMaW5lYXJSaW5nPg0KKzxnbWw6cG9zTGlzdD41My43ODM2NyAtOS41OTI4NCA1My43ODMyOSAtOS41OTU3MyA1My43ODM1IC05LjU5ODI1IDUzLjc4NDA5IC05LjYwMDUyIDUzLjc4NjEyIC05LjU5ODg5IDUzLjc4NjM0IC05LjU5NTY3IDUzLjc4Njg4IC05LjU5Mjk3IDUzLjc4NzY1IC05LjU5MDk0IDUzLjc4OTQ5IC05LjU4OTU2IDUzLjc5MTYyIC05LjU4OTM1IDUzLjc5MjY5IC05LjU4NzA1IDUzLjc5MjY2IC05LjU4MzMyIDUzLjc5MTA4IC05LjU4MzUgNTMuNzg5MTIgLTkuNTgzOTEgNTMuNzg3MDYgLTkuNTg0NjEgNTMuNzg1NTkgLTkuNTg3MTQgNTMuNzg0MzggLTkuNTg4OTQgNTMuNzgzNjcgLTkuNTkyODQgNTMuNzgzNjcgLTkuNTkyODQ8L2dtbDpwb3NMaXN0Pg0KKzwvZ21sOkxpbmVhclJpbmc+DQorPGdtbDpMaW5lYXJSaW5nPg0KKzxnbWw6cG9zTGlzdD41My45Njg2IC05Ljg2NDI5IDUzLjk3MTkyIC05Ljg2MjkxIDUzLjk3NDYyIC05Ljg2MTExIDUzLjk3NjU0IC05Ljg2MDA3IDUzLjk3OTM0IC05Ljg2MzYxIDUzLjk4MTc2IC05Ljg2NDU2IDUzLjk4NDU0IC05Ljg2NTcyIDUzLjk4NjQ4IC05Ljg2NjkgNTMuOTg4MjMgLTkuODY4MzMgNTMuOTg5OTYgLTkuODY3MjggNTMuOTg5MDcgLTkuODY0MTMgNTMuOTg4NTQgLTkuODU5OCA1My45ODkyMyAtOS44NTc3NSA1My45OTEwMyAtOS44NTcxNyA1My45OTI4MiAtOS44NTc5OSA1My45OTQzNSAtOS44NTcwNCA1My45OTUzMSAtOS44NTUyIDUzLjk5MTQ1IC05Ljg1MjQxIDUzLjk4Nzg4IC05Ljg0ODExIDUzLjk4MzY4IC05Ljg0NjE3IDUzLjk3OTM4IC05Ljg0NTY0IDUzLjk3NTQ4IC05Ljg0NjEyIDUzLjk3Mjk1IC05Ljg0Nzk2IDUzLjk3MTYgLTkuODUzIDUzLjk3MDAyIC05Ljg1ODMyIDUzLjk2ODYgLTkuODY0MjkgNTMuOTY4NiAtOS44NjQyOTwvZ21sOnBvc0xpc3Q+DQorPC9nbWw6TGluZWFyUmluZz4NCis8Z21sOkxpbmVhclJpbmc+DQorPGdtbDpwb3NMaXN0PjUzLjMwMDkzIC05LjkwODEzIDUzLjMwMTA1IC05LjkxMTcgNTMuMzAyMzggLTkuOTEzNzkgNTMuMzAzOTIgLTkuOTE0MjUgNTMuMzA1MTIgLTkuOTE0MTUgNTMuMzA0NjIgLTkuOTEwODQgNTMuMzA1MzMgLTkuOTA3MTIgNTMuMzA0NDMgLTkuOTA1NDIgNTMuMzAzMjcgLTkuOTA0OSA1My4zMDE3MyAtOS45MDU5OSA1My4zMDA5MyAtOS45MDgxMyA1My4zMDA5MyAtOS45MDgxMzwvZ21sOnBvc0xpc3Q+DQorPC9nbWw6TGluZWFyUmluZz4NCis8Z21sOkxpbmVhclJpbmc+DQorPGdtbDpwb3NMaXN0PjU0LjYxNzE4IC04LjEzMjk5IDU0LjYxNzUyIC04LjEzNTI2IDU0LjYxODAzIC04LjEzNzg3IDU0LjYxOTUxIC04LjEzNzQ3IDU0LjYyMDUgLTguMTM2MTkgNTQuNjE5NyAtOC4xMzM4NiA1NC42MTk3MSAtOC4xMzAyMiA1NC42MTgyMyAtOC4xMzIwNCA1NC42MTcxOCAtOC4xMzI5OSA1NC42MTcxOCAtOC4xMzI5OTwvZ21sOnBvc0xpc3Q+DQorPC9nbWw6TGluZWFyUmluZz4NCis8Z21sOkxpbmVhclJpbmc+DQorPGdtbDpwb3NMaXN0PjUxLjg5MTYyIC0xMC4zNDIzNSA1MS44OTExMSAtMTAuMzQ2NDMgNTEuODkxMTggLTEwLjM0ODk3IDUxLjg5MTg4IC0xMC4zNTE4MSA1MS44ODk3NSAtMTAuMzU3NjEgNTEuODg5MDIgLTEwLjM2MDg5IDUxLjg4OTM0IC0xMC4zNjM3OSA1MS44ODgxOCAtMTAuMzY3ODggNTEuODg3MzIgLTEwLjM3MDUyIDUxLjg4Nzc2IC0xMC4zNzQxOSA1MS44ODg2NCAtMTAuMzc1ODcgNTEuODg5NjcgLTEwLjM4MDI3IDUxLjg5MTMzIC0xMC4zODAxNyA1MS44OTE4IC0xMC4zODI1IDUxLjg5MDc5IC0xMC4zODU3MyA1MS44ODIyNiAtMTAuNDA3NzggNTEuODgyNzUgLTEwLjQxMjA2IDUxLjg4MDI4IC0xMC40MTQwNyA1MS44ODE1OSAtMTAuNDE4MzcgNTEuODg0NTkgLTEwLjQxODg2IDUxLjg4NjkyIC0xMC40MTg2MSA1MS44ODk0NiAtMTAuNDE0NjcgNTEuODkyMTkgLTEwLjQxNDA2IDUxLjg5NTk5IC0xMC40MTM4MiA1MS44OTg2NSAtMTAuNDEyODkgNTEuOTAwODEgLTEwLjQwNzk3IDUxLjkwMjg1IC0xMC40MDMzNCA1MS45MDUyOCAtMTAuNDAwNzEgNTEuOTA3NzMgLTEwLjM5ODg1IDUxLjkwOTg5IC0xMC4zOTg0IDUxLjkxMjIzIC0xMC4zOTY4MiA1MS45MTQxIC0xMC4zOTA5MyA1MS45MTUxMyAtMTAuMzgyNjUgNTEuOTE0NjMgLTEwLjM3NTI0IDUxLjkxNDU0IC0xMC4zNjgzNSA1MS45MTU3OCAtMTAuMzY0NDMgNTEuOTE3NjcgLTEwLjM2Mjg5IDUxLjkxODUgLTEwLjM1ODE0IDUxLjkyMTkyIC0xMC4zNTQ2OCA1MS45MjE4NCAtMTAuMzQ2NjIgNTEuOTI0NCAtMTAuMzQ1NjYgNTEuOTI3NzUgLTEwLjM0MDg0IDUxLjkzMTY5IC0xMC4zNDEyMiA1MS45MzM1OCAtMTAuMzQxNzcgNTEuOTM1MTQgLTEwLjM0NDE4IDUxLjkzNzQ0IC0xMC4zNDA3OCA1MS45MzM3NCAtMTAuMzM3NDcgNTEuOTMzMzkgLTEwLjMzMzgxIDUxLjkyODczIC0xMC4zMjI5OSA1MS45MzQwMyAtMTAuMzEwOTYgNTEuOTMwMDQgLTEwLjMwODkyIDUxLjkyNjc2IC0xMC4zMDcyIDUxLjkyNTY1IC0xMC4zMDQ4NyA1MS45MjY2MiAtMTAuMzAwOSA1MS45MjY1MSAtMTAuMjk0MTYgNTEuOTI3OTcgLTEwLjI5MTA0IDUxLjkyODc2IC0xMC4yODY4NyA1MS45MjkxOSAtMTAuMjgzODMgNTEuOTMwNDMgLTEwLjI4MjE0IDUxLjkzMDkxIC0xMC4yNzk3MSA1MS45Mjg5NSAtMTAuMjc5ODkgNTEuOTI5MzEgLTEwLjI3NTM1IDUxLjkyNjgyIC0xMC4yNzc2NiA1MS45MjM2MyAtMTAuMjc3MTUgNTEuOTIxMDQgLTEwLjI3NzIxIDUxLjkxNzg1IC0xMC4yNzkwNyA1MS45MTQ0MyAtMTAuMjgyNTQgNTEuOTExMDYgLTEwLjI4NzggNTEuOTA5MTMgLTEwLjI5MzM3IDUxLjkwNjAzIC0xMC4yOTg2OCA1MS45MDUyMSAtMTAuMzA1MzcgNTEuOTAzMjcgLTEwLjMxMzQ3IDUxLjkwMDQzIC0xMC4zMjEyMyA1MS44OTg0NCAtMTAuMzI3NjggNTEuODk3NDUgLTEwLjMzNDE4IDUxLjg5NjkzIC0xMC4zMzcxOSA1MS44OTQwNSAtMTAuMzM5NzMgNTEuODkxNjIgLTEwLjM0MjM1IDUxLjg5MTYyIC0xMC4zNDIzNTwvZ21sOnBvc0xpc3Q+DQorPC9nbWw6TGluZWFyUmluZz4NCis8Z21sOkxpbmVhclJpbmc+DQorPGdtbDpwb3NMaXN0PjUxLjg3Nzk1IC05LjU1ODA2IDUxLjg3NzgzIC05LjU2MjIyIDUxLjg3OTE2IC05LjU2MDM4IDUxLjg4MTI0IC05LjU1ODU1IDUxLjg4MjI1IC05LjU1NzI1IDUxLjg4MjYyIC05LjU1NDc5IDUxLjg4MTIyIC05LjU1Mzc3IDUxLjg3OTA3IC05LjU1NTMxIDUxLjg3Nzk1IC05LjU1ODA2IDUxLjg3Nzk1IC05LjU1ODA2PC9nbWw6cG9zTGlzdD4NCis8L2dtbDpMaW5lYXJSaW5nPg0KKzxnbWw6TGluZWFyUmluZz4NCis8Z21sOnBvc0xpc3Q+NTUuMTM4ODkgLTguMTIzNTcgNTUuMTQyNTIgLTguMTI3MzQgNTUuMTQzNSAtOC4xMjYyIDU1LjE0Mjg1IC04LjEyMjkgNTUuMTM4ODkgLTguMTIzNTcgNTUuMTM4ODkgLTguMTIzNTc8L2dtbDpwb3NMaXN0Pg0KKzwvZ21sOkxpbmVhclJpbmc+DQorPGdtbDpMaW5lYXJSaW5nPg0KKzxnbWw6cG9zTGlzdD41My4zOTQ3NSAtMTAuMjE4NzkgNTMuMzk0ODkgLTEwLjIyMDgzIDUzLjM5NjYgLTEwLjIyMjcxIDUzLjM5Nzg0IC0xMC4yMjA3OSA1My4zOTc3MiAtMTAuMjE4NDYgNTMuMzk2NDQgLTEwLjIxNjk3IDUzLjM5NTM4IC0xMC4yMTY0NSA1My4zOTQ3NSAtMTAuMjE4NzkgNTMuMzk0NzUgLTEwLjIxODc5PC9nbWw6cG9zTGlzdD4NCis8L2dtbDpMaW5lYXJSaW5nPg0KKzxnbWw6TGluZWFyUmluZz4NCis8Z21sOnBvc0xpc3Q+NTQuNDE4MDEgLTguNDk4MDcgNTQuNDE5NDUgLTguNTAwMiA1NC40MjA3OCAtOC41MDI2MyA1NC40MjI0MiAtOC41MDEzMiA1NC40MjQwMiAtOC41MDA2NSA1NC40MjUxNCAtOC41MDE5MyA1NC40MjUxOCAtOC41MDQ0NyA1NC40MjY2MyAtOC41MDMzIDU0LjQyNzUxIC04LjUwMDc2IDU0LjQyNjU5IC04LjQ5MjcyIDU0LjQyNDgxIC04LjQ5MTY0IDU0LjQyMzMyIC04LjQ5MDQ1IDU0LjQyMTY4IC04LjQ5MDE3IDU0LjQyMDMxIC04LjQ5MTY3IDU0LjQyMDEyIC04LjQ5NDc5IDU0LjQxODgyIC04LjQ5NjYzIDU0LjQxODAxIC04LjQ5ODA3IDU0LjQxODAxIC04LjQ5ODA3PC9nbWw6cG9zTGlzdD4NCis8L2dtbDpMaW5lYXJSaW5nPg0KKzxnbWw6TGluZWFyUmluZz4NCis8Z21sOnBvc0xpc3Q+NTUuMTk5OTMgLTguMTU2MzEgNTUuMjAxNTEgLTguMTU3NjggNTUuMjAzODUgLTguMTUzMjQgNTUuMjAxNzUgLTguMTUzMDcgNTUuMjAwNyAtOC4xNTM3IDU1LjE5OTkzIC04LjE1NjMxIDU1LjE5OTkzIC04LjE1NjMxPC9nbWw6cG9zTGlzdD4NCis8L2dtbDpMaW5lYXJSaW5nPg0KKzxnbWw6TGluZWFyUmluZz4NCis8Z21sOnBvc0xpc3Q+NTIuNjE3MDMgLTkuNDg3NTIgNTIuNjE4NDggLTkuNDkwNTIgNTIuNjE4OSAtOS40OTM0NyA1Mi42MTk5MyAtOS40OTQ1OCA1Mi42MjEyMiAtOS40ODk1NCA1Mi42MjA5MSAtOS40ODQ5MyA1Mi42MTk0MiAtOS40ODIzOCA1Mi42MTgyNyAtOS40ODU2NCA1Mi42MTcwMyAtOS40ODc1MiA1Mi42MTcwMyAtOS40ODc1MjwvZ21sOnBvc0xpc3Q+DQorPC9nbWw6TGluZWFyUmluZz4NCis8Z21sOkxpbmVhclJpbmc+DQorPGdtbDpwb3NMaXN0PjUxLjUwNTQzIC05LjQ5Njk2IDUxLjUwNTkxIC05LjUwMTYzIDUxLjUwNyAtOS41MDQzNiA1MS41MDkxOSAtOS41MDQ2MiA1MS41MTE0NSAtOS41MDI2OCA1MS41MTMgLTkuNDk2NzcgNTEuNTE0NyAtOS40OTEwNSA1MS41MTU5NyAtOS40ODc3MyA1MS41MTQyMSAtOS40ODQwMSA1MS41MTE4NiAtOS40ODg0MyA1MS41MTE4MiAtOS40OTI3MSA1MS41MDk0NyAtOS40OTU4MiA1MS41MDY5NSAtOS40OTYyMyA1MS41MDU0MyAtOS40OTY5NiA1MS41MDU0MyAtOS40OTY5NjwvZ21sOnBvc0xpc3Q+DQorPC9nbWw6TGluZWFyUmluZz4NCis8Z21sOkxpbmVhclJpbmc+DQorPGdtbDpwb3NMaXN0PjU0LjY2MTcxIC04LjgxNzYyIDU0LjY2MjcxIC04LjgxOTIyIDU0LjY2MjE5IC04LjgyMTk4IDU0LjY2MzA3IC04LjgyNDE5IDU0LjY2NDk1IC04LjgyNTE0IDU0LjY2NjYxIC04LjgyNDk0IDU0LjY2ODA5IC04LjgyMzI5IDU0LjY3MDA5IC04LjgyMTkgNTQuNjcxMjcgLTguODE4OTMgNTQuNjcwMiAtOC44MTY3IDU0LjY2ODE0IC04LjgxNTg2IDU0LjY2NTY5IC04LjgxNTQ1IDU0LjY2MzY0IC04LjgxNDQ2IDU0LjY2MjM4IC04LjgxNTM2IDU0LjY2MTcxIC04LjgxNzYyIDU0LjY2MTcxIC04LjgxNzYyPC9nbWw6cG9zTGlzdD4NCis8L2dtbDpMaW5lYXJSaW5nPg0KKzxnbWw6TGluZWFyUmluZz4NCis8Z21sOnBvc0xpc3Q+NTMuNTYzMDggLTkuOTgzMTYgNTMuNTYzNzUgLTkuOTg1NDUgNTMuNTY1NjQgLTkuOTg1OTcgNTMuNTY1NjUgLTkuOTgzMTggNTMuNTY0OTEgLTkuOTc3OTUgNTMuNTYzOTEgLTkuOTgwMzggNTMuNTYzMDggLTkuOTgzMTYgNTMuNTYzMDggLTkuOTgzMTY8L2dtbDpwb3NMaXN0Pg0KKzwvZ21sOkxpbmVhclJpbmc+DQorPGdtbDpMaW5lYXJSaW5nPg0KKzxnbWw6cG9zTGlzdD41My45NTg0NyAtOS45MTU4NiA1My45NTU4OCAtOS45MTM0NiA1My45NTQxIC05LjkxNTEzIDUzLjk1MjgzIC05LjkxNjI4IDUzLjk1MTEgLTkuOTE3MiA1My45NDkyOSAtOS45MTgwOCA1My45NDk3NiAtOS45MTUzNyA1My45NDgzMiAtOS45MTYxNyA1My45NDY1MiAtOS45MTgxNSA1My45NDM5MSAtOS45MTcxNiA1My45NDA4MSAtOS45MTY3MSA1My45Mzc2NCAtOS45MTg1NyA1My45MzU3NSAtOS45MjA2OSA1My45MzM5NCAtOS45MjM5MyA1My45Mzc0NiAtOS45Mjc3NCA1My45MzM3NSAtOS45Mjk1IDUzLjkzMzI1IC05LjkzMjY4IDUzLjkzMTI1IC05LjkzMzUzIDUzLjkyODggLTkuOTMzMDQgNTMuOTI3MjUgLTkuOTMwMDkgNTMuOTI2NzggLTkuOTIzNzQgNTMuOTI1NTQgLTkuOTIxNDcgNTMuOTIzNTYgLTkuOTIyMzMgNTMuOTIyMTEgLTkuOTI1NzggNTMuOTIxNDIgLTkuOTMwNDggNTMuOTE5NzkgLTkuOTMyNjUgNTMuOTE4NTggLTkuOTM0MTMgNTMuOTE2ODEgLTkuOTM1OCA1My45MTU5NyAtOS45MzQ1NCA1My45MTY1NCAtOS45MzE2OCA1My45MTc4NiAtOS45Mjc0MiA1My45MTYyNCAtOS45MjY2NCA1My45MTUwNyAtOS45Mjc2NCA1My45MTQxNyAtOS45Mjk5NyA1My45MTI4OSAtOS45MzI1MiA1My45MTEzMiAtOS45MzM5MiA1My45MTE4IC05LjkzNjIxIDUzLjkxMjU5IC05LjkzODA3IDUzLjkxMjY0IC05Ljk0MTIyIDUzLjkxMTU0IC05Ljk0Mzc5IDUzLjkxMDM3IC05Ljk0NjIyIDUzLjkwODU2IC05Ljk0ODM0IDUzLjkwNzMyIC05Ljk1MDI4IDUzLjkwNTc5IC05Ljk0OTY3IDUzLjkwNDUgLTkuOTQ4MzIgNTMuOTA0NDEgLTkuOTQ1NjUgNTMuOTA1NzggLTkuOTQ0NTIgNTMuOTA3MTMgLTkuOTQzNjkgNTMuOTA1NzYgLTkuOTQwNzggNTMuOTA1ODQgLTkuOTM3MDMgNTMuOTA0ODcgLTkuOTM1MTMgNTMuOTAyMTcgLTkuOTMyODggNTMuODk5NzYgLTkuOTMzMDMgNTMuODk3NDUgLTkuOTMzMTkgNTMuODk2MTEgLTkuOTMyNDQgNTMuODkzNzcgLTkuOTMxNjcgNTMuODkwOTMgLTkuOTMyNjYgNTMuODg4MSAtOS45MzUwNSA1My44ODUyNiAtOS45Mzc0NiA1My44ODMyNyAtOS45MzY3NiA1My44ODE5IC05LjkzNjY0IDUzLjg3OTc2IC05LjkzODIzIDUzLjg3ODI5IC05Ljk0MDkxIDUzLjg3NTk1IC05Ljk0MTM3IDUzLjg3MzY5IC05LjkzOTM2IDUzLjg3MjM3IC05Ljk0MjM3IDUzLjg3MjU3IC05Ljk0NDkxIDUzLjg3Mjg1IC05Ljk1MDEgNTMuODcyMTMgLTkuOTU0OTUgNTMuODcxOSAtOS45NTgzMyA1My44NzMxNSAtOS45NjE1NSA1My44NzUzNCAtOS45NjU4OCA1My44Nzg3NSAtOS45Njg1OCA1My44ODAzOSAtOS45NzI4MSA1My44ODIxOSAtOS45Nzg0OSA1My44ODM5NiAtOS45ODM1MiA1My44ODU3NCAtOS45ODcxNSA1My44ODg2MSAtOS45OTA4MyA1My44OTE2NyAtOS45OTU4MiA1My44OTUxMiAtOS45OTUyNiA1My44OTY0OCAtOS45OTE2NCA1My44OTk1NCAtOS45OTAwNyA1My45MDA4MSAtOS45OTQzNyA1My45MDM2MyAtOS45OTg4NCA1My45MDYxOSAtMTAuMDA0MzYgNTMuOTA4NDYgLTEwLjAwODcyIDUzLjkxMTI3IC0xMC4wMTA2OCA1My45MTQyNSAtMTAuMDExNiA1My45MTYwNiAtMTAuMDE0NzYgNTMuOTE0NDQgLTEwLjAxOTQzIDUzLjkxNjI3IC0xMC4wMjA4OSA1My45MTQ0OCAtMTAuMDI1MzcgNTMuOTEyMTMgLTEwLjAyODY0IDUzLjkxMDA2IC0xMC4wMzE4MSA1My45MTEwNiAtMTAuMDM0NjggNTMuOTA5OTIgLTEwLjA0MDM3IDUzLjkxMTI3IC0xMC4wNDQ3IDUzLjkxNDQ0IC0xMC4wNDk0MSA1My45MTkxNyAtMTAuMDUxNiA1My45MjIxIC0xMC4wNDkzOSA1My45MjYyNCAtMTAuMDQ2OTUgNTMuOTMxOTkgLTEwLjA0NDk5IDUzLjkzNjQ3IC0xMC4wNDU1OCA1My45NDAzOCAtMTAuMDQzNzIgNTMuOTQ1NDUgLTEwLjA0MTE1IDUzLjk0OTI2IC0xMC4wNDA2OCA1My45NTIyMiAtMTAuMDM5MzkgNTMuOTU0NTYgLTEwLjAzNjI5IDUzLjk1NzU5IC0xMC4wMzY0MyA1My45NjEzNyAtMTAuMDM5MDcgNTMuOTY1NTggLTEwLjA0NDc2IDUzLjk2OTYzIC0xMC4wNTM4NiA1My45NzA3NCAtMTAuMDYwMzMgNTMuOTcxMzEgLTEwLjA2NTMgNTMuOTcyNDYgLTEwLjA3MTMgNTMuOTcyODUgLTEwLjA3NzQ5IDUzLjk3MDkyIC0xMC4wODI1NiA1My45Njc2NCAtMTAuMDg1OTYgNTMuOTY1NDUgLTEwLjA4OTQyIDUzLjk2Mzk5IC0xMC4wOTQ0NCA1My45NjU0IC0xMC4wOTkyNiA1My45NjQzIC0xMC4xMDMxIDUzLjk2MTcxIC0xMC4xMDQ0NCA1My45NjIzNSAtMTAuMTEwOTcgNTMuOTY2MDQgLTEwLjExMzYxIDUzLjk2OTYyIC0xMC4xMTUxMSA1My45NzEyNyAtMTAuMTEzOSA1My45NzQyMiAtMTAuMTIxNjggNTMuOTcwNzEgLTEwLjEyNTY2IDUzLjk2OTM4IC0xMC4xMzI1OCA1My45NjkwMyAtMTAuMTM3NSA1My45NjgzNiAtMTAuMTQ0NCA1My45NjY5OCAtMTAuMTUwODQgNTMuOTY3MSAtMTAuMTYwNzEgNTMuOTY3ODcgLTEwLjE3MDU1IDUzLjk2NzQ0IC0xMC4xNzkwNiA1My45NjgxIC0xMC4xODU0NSA1My45NjI0OSAtMTAuMTg1MjQgNTMuOTY0MjUgLTEwLjE5NTI5IDUzLjk2NTY1IC0xMC4yMDE1MSA1My45NjgwMyAtMTAuMjA2ODUgNTMuOTcwNTEgLTEwLjIxMDggNTMuOTczMTkgLTEwLjIxNTg5IDUzLjk3NDMxIC0xMC4yMjM0NiA1My45NzU3NyAtMTAuMjI4NzcgNTMuOTc2NzggLTEwLjIzMjU3IDUzLjk3NTIgLTEwLjI0MDM3IDUzLjk3Mzc4IC0xMC4yNDcyOCA1My45NzMxNSAtMTAuMjUyMTQgNTMuOTc1MSAtMTAuMjUzMzMgNTMuOTc2NjggLTEwLjI1MDUzIDUzLjk3ODE4IC0xMC4yNDYzMSA1My45ODA1NyAtMTAuMjQwMDggNTMuOTgxOTkgLTEwLjIzNDQ0IDUzLjk4MzI5IC0xMC4yMjkzOCA1My45ODMzOSAtMTAuMjI0MDkgNTMuOTgxNjYgLTEwLjIxODczIDUzLjk4MTQ3IC0xMC4yMDk3OCA1My45ODAxOSAtMTAuMjAzMjYgNTMuOTgyMDUgLTEwLjIwMTc3IDUzLjk4NDYxIC0xMC4xOTgwOCA1My45ODcyMiAtMTAuMTkzOTIgNTMuOTg5MzUgLTEwLjE4NzMyIDUzLjk5MTMzIC0xMC4xODI4OSA1My45OTMxMyAtMTAuMTgwOSA1My45OTU1NiAtMTAuMTc3OTcgNTMuOTk3MjcgLTEwLjE3ODQ4IDUzLjk5ODc2IC0xMC4xODA5OCA1NC4wMDE0NyAtMTAuMTc5MTggNTQuMDAzNTQgLTEwLjE4NDkzIDU0LjAwNjg0IC0xMC4xODUyOSA1NC4wMTEzNiAtMTAuMTgzODggNTQuMDE2NzUgLTEwLjE4MjAxIDU0LjAxNTE3IC0xMC4xNzcxNSA1NC4wMTMzMyAtMTAuMTcxNzcgNTQuMDEwMjQgLTEwLjE2NzM3IDU0LjAwODA3IC0xMC4xNTc3IDU0LjAwODg4IC0xMC4xNTAyMSA1NC4wMDk4NCAtMTAuMTQwNyA1NC4wMDk0IC0xMC4xMzUyOSA1NC4wMDcxNSAtMTAuMTM0NTIgNTQuMDA1MTEgLTEwLjEzNzIzIDU0LjAwMzE1IC0xMC4xMzc2MSA1NC4wMDExNSAtMTAuMTMzMjggNTMuOTk5OTMgLTEwLjEyNTg0IDU0LjAwMDE5IC0xMC4xMjA4OSA1NC4wMDI2IC0xMC4xMTgxIDU0LjAwMzA0IC0xMC4xMTA1MyA1NC4wMDM0NCAtMTAuMTAyMzIgNTQuMDA0MyAtMTAuMDk2NyA1NC4wMDI3MyAtMTAuMDkyOTQgNTQuMDA2IC0xMC4wOTA5NSA1NC4wMDk5MiAtMTAuMDg5MSA1NC4wMTI3IC0xMC4wODI0NSA1NC4wMTUzOSAtMTAuMDc4MzEgNTQuMDE4OTIgLTEwLjA3MjYyIDU0LjAyMTM2IC0xMC4wNjY4NiA1NC4wMjM0OCAtMTAuMDYyOTIgNTQuMDIzMjkgLTEwLjA1NTIxIDU0LjAyNDU1IC0xMC4wNDUxNCA1NC4wMjQwOCAtMTAuMDM3NTMgNTQuMDIxNTIgLTEwLjAzNTc2IDU0LjAxODggLTEwLjAzMTI5IDU0LjAxNjIyIC0xMC4wMjM0MiA1NC4wMTQ1NyAtMTAuMDE5MzMgNTQuMDE0MDcgLTEwLjAxNDY5IDU0LjAxNzA0IC0xMC4wMDYzOSA1NC4wMTg2NSAtMTAuMDAzMjUgNTQuMDE3ODYgLTkuOTk0ODIgNTQuMDE0OSAtOS45OTA5MiA1NC4wMTI0MiAtOS45ODY5OSA1NC4wMTE3IC05Ljk4Mjc3IDU0LjAxMjczIC05Ljk3OTg2IDU0LjAxMzk5IC05Ljk3ODg2IDU0LjAxNjgxIC05Ljk4MDgzIDU0LjAxOTE2IC05Ljk4MDA2IDU0LjAyMDI5IC05Ljk3NTkgNTQuMDIxMDUgLTkuOTcxNTIgNTQuMDIzOTEgLTkuOTY4OTYgNTQuMDI2NzEgLTkuOTcwOTQgNTQuMDI4NDcgLTkuOTcyMzggNTQuMDMwMTYgLTkuOTcwNTMgNTQuMDMxMDggLTkuOTY5MzIgNTQuMDMgLTkuOTY0ODcgNTQuMDMxMzcgLTkuOTYzNzMgNTQuMDI5NjYgLTkuOTYwNTggNTQuMDI2NTYgLTkuOTU3NDQgNTQuMDI1MzEgLTkuOTU0MDcgNTQuMDIyODEgLTkuOTU1NiA1NC4wMjAwMyAtOS45NTQ1NyA1NC4wMTc1OCAtOS45NTI1MyA1NC4wMTY5OCAtOS45NDUzNiA1NC4wMTUzNiAtOS45NDA5OCA1NC4wMTM3MSAtOS45MzY3NCA1NC4wMTE3MiAtOS45MzQ5MiA1NC4wMDk4MiAtOS45MzE3MyA1NC4wMDcyNSAtOS45MzAyOCA1NC4wMDQ3NCAtOS45MzA1NiA1NC4wMDIxNCAtOS45MzA4MiA1My45OTk4OCAtOS45MzE0NyA1My45OTgwNCAtOS45MjYyNSA1My45OTQwMSAtOS45MjMxIDUzLjk5MjMyIC05LjkyNzYgNTMuOTkxOSAtOS45MzA5NyA1My45OTAxOCAtOS45MzMxMiA1My45OTE3NCAtOS45Mzk4NSA1My45OTAwNSAtOS45NDQzNCA1My45OTAwNiAtOS45NTA3NSA1My45ODczMiAtOS45NTE3NyA1My45ODYyOCAtOS45NDU0NyA1My45ODMwOCAtOS45NDUxNSA1My45ODA3NSAtOS45NDY3MSA1My45Nzc0MyAtOS45NDY2NiA1My45NzQ5NiAtOS45NDY2NCA1My45NzMwMyAtOS45NTI5NyA1My45NzE2NyAtOS45NTI3IDUzLjk3MjM5IC05Ljk0NjQzIDUzLjk2ODU3IC05Ljk0NTY3IDUzLjk2NjQ0IC05Ljk0MzIxIDUzLjk2MzQ2IC05Ljk0NDgxIDUzLjk2MDI1IC05Ljk0ODcgNTMuOTU4MDEgLTkuOTUxNjggNTMuOTUzNjMgLTkuOTUyMzcgNTMuOTUwOTMgLTkuOTUxMzcgNTMuOTQ4NzIgLTkuOTQ5OTggNTMuOTQ3NjYgLTkuOTUzMzcgNTMuOTQ4MjUgLTkuOTU2OTEgNTMuOTQ3MjQgLTkuOTYwNjMgNTMuOTQ1MjEgLTkuOTU5NDMgNTMuOTQ1NzkgLTkuOTU2MjYgNTMuOTQ0NzEgLTkuOTUzNCA1My45NDUzNiAtOS45NTE5NyA1My45NDQyNyAtOS45NTA0OSA1My45NDUzNyAtOS45NDY0OSA1My45NDYxMiAtOS45NDUwOSA1My45NDM1MiAtOS45MzU5OSA1My45NDYwNyAtOS45MzUyNCA1My45NDcyNSAtOS45NDA3OSA1My45NDgyMiAtOS45NDQxIDUzLjk1MDIyIC05Ljk0NTc2IDUzLjk1MTg0IC05Ljk0MzU5IDUzLjk1NDIxIC05Ljk0IDUzLjk1NjM5IC05LjkzNzkzIDUzLjk1ODExIC05LjkzNDM3IDUzLjk1OTQ4IC05LjkzNDQ5IDUzLjk1OTgzIC05LjkzNzUyIDUzLjk2MTMxIC05LjkzNzM2IDUzLjk2MjA2IC05LjkzMjAzIDUzLjk1OTU1IC05LjkyOTUgNTMuOTU5OTggLTkuOTIyMDkgNTMuOTU4MTYgLTkuOTE3ODEgNTMuOTU4NDcgLTkuOTE1ODYgNTMuOTU4NDcgLTkuOTE1ODY8L2dtbDpwb3NMaXN0Pg0KKzwvZ21sOkxpbmVhclJpbmc+DQorPGdtbDpMaW5lYXJSaW5nPg0KKzxnbWw6cG9zTGlzdD41My43ODg4IC05Ljk3MzE5IDUzLjc4NzI2IC05Ljk4MzQ1IDUzLjc4NjkgLTkuOTk2MjkgNTMuNzg3MjIgLTEwLjAwODgxIDUzLjc4NzU3IC0xMC4wMTk0NiA1My43ODczNSAtMTAuMDI5MDYgNTMuNzg2ODMgLTEwLjAzNTE4IDUzLjc4NjEzIC0xMC4wNDIzNSA1My43ODYxMiAtMTAuMDQ1MTUgNTMuNzg4NzMgLTEwLjA0MjExIDUzLjc5MTgxIC0xMC4wMzg5OSA1My43OTQ3NSAtMTAuMDM5MTIgNTMuNzk2MjUgLTEwLjA0MTQ0IDUzLjc5ODQ5IC0xMC4wNDM2IDUzLjgwMDU0IC0xMC4wNDA3NSA1My44MDIgLTEwLjAzNDUgNTMuODA0OCAtMTAuMDI0OTUgNTMuODA3MTkgLTEwLjAxOTgyIDUzLjgwOTM0IC0xMC4wMTQxOSA1My44MDg5NiAtMTAuMDA3NzMgNTMuODA5ODggLTkuOTk5OTcgNTMuODExMTEgLTkuOTkzMDYgNTMuODE0MDkgLTkuOTkxMTYgNTMuODE2MzIgLTkuOTg5NTggNTMuODE4NzIgLTkuOTg0NDYgNTMuODIxODIgLTkuOTgxMDMgNTMuODI0MiAtOS45Nzg1NSA1My44MjY4NiAtOS45NzM0NyA1My44MjYzNSAtOS45Njc2MSA1My44MjE2OSAtOS45NjcgNTMuODE4NDkgLTkuOTY0MTcgNTMuODE1NDQgLTkuOTYxNTQgNTMuODEzMDIgLTkuOTU2NTUgNTMuODEyNjEgLTkuOTUwNyA1My44MTE1MSAtOS45NDQxIDUzLjgxMDA4IC05LjkzODA1IDUzLjgwNzg2IC05LjkzNTU5IDUzLjgwNDgxIC05LjkzNTYxIDUzLjgwMjcxIC05LjkzOTIzIDUzLjgwMDYgLTkuOTQxNzYgNTMuNzk3NjUgLTkuOTQxODEgNTMuNzk0NCAtOS45NDU5OCA1My43OTIwOSAtOS45NTUzMiA1My43OTEzNiAtOS45NjMxMSA1My43ODg4IC05Ljk3MzE5IDUzLjc4ODggLTkuOTczMTk8L2dtbDpwb3NMaXN0Pg0KKzwvZ21sOkxpbmVhclJpbmc+DQorPGdtbDpMaW5lYXJSaW5nPg0KKzxnbWw6cG9zTGlzdD41My45NTYxNiAtOS43OTMyNyA1My45NTMyNCAtOS43OTMwMSA1My45NTM3OSAtOS43OTY4NiA1My45NTQ0MSAtOS44MDEzNSA1My45NTU4OCAtOS43OTg4MyA1My45NTczNiAtOS43OTg2NSA1My45NTgzNCAtOS43OTUxIDUzLjk1NjE2IC05Ljc5MzI3IDUzLjk1NjE2IC05Ljc5MzI3PC9nbWw6cG9zTGlzdD4NCis8L2dtbDpMaW5lYXJSaW5nPg0KKzxnbWw6TGluZWFyUmluZz4NCis8Z21sOnBvc0xpc3Q+NTMuNzk1NDEgLTkuNjQ4NDUgNTMuNzk2NyAtOS42NDgzOCA1My43OTc2MiAtOS42NDcgNTMuNzk5MDkgLTkuNjQ0MTYgNTMuNzk4NjQgLTkuNjQxMjkgNTMuNzk3NTMgLTkuNjQxNCA1My43OTYyOCAtOS42NDUwMyA1My43OTU0MSAtOS42NDg0NSA1My43OTU0MSAtOS42NDg0NTwvZ21sOnBvc0xpc3Q+DQorPC9nbWw6TGluZWFyUmluZz4NCis8Z21sOkxpbmVhclJpbmc+DQorPGdtbDpwb3NMaXN0PjU0Ljk2ODc5IC04LjQyMzU1IDU0Ljk2OTIxIC04LjQyNjAxIDU0Ljk3MDY1IC04LjQyNjU3IDU0Ljk3MTI1IC04LjQzMDgxIDU0Ljk3MjI1IC04LjQyOTIyIDU0Ljk3NDYzIC04LjQyNzcgNTQuOTc0IC04LjQyNTY3IDU0Ljk3MzE1IC04LjQyNDU4IDU0Ljk3MTg3IC04LjQyNDIyIDU0Ljk3MDI5IC04LjQyMyA1NC45Njg3OSAtOC40MjM1NSA1NC45Njg3OSAtOC40MjM1NTwvZ21sOnBvc0xpc3Q+DQorPC9nbWw6TGluZWFyUmluZz4NCis8Z21sOkxpbmVhclJpbmc+DQorPGdtbDpwb3NMaXN0PjU0Ljk2ODc3IC04LjUxMjA1IDU0Ljk2ODU0IC04LjUxNDcyIDU0Ljk2OTg3IC04LjUxNzMyIDU0Ljk3MTY3IC04LjUxNzk1IDU0Ljk3MzE4IC04LjUxODk5IDU0Ljk3Mzg4IC04LjUyMTE3IDU0Ljk3NDAyIC04LjUyMzc2IDU0Ljk3Mzg5IC04LjUyNzcyIDU0Ljk3MzM5IC04LjUzMDM0IDU0Ljk3MyAtOC41MzM5NCA1NC45NzMxNyAtOC41Mzc2NSA1NC45NzQ2MiAtOC41Mzk2NSA1NC45NzQ1NCAtOC41NDI4MiA1NC45NzcxMyAtOC41NDU3OSA1NC45NzYwMyAtOC41NDg5NiA1NC45NzY3NiAtOC41NTA4MyA1NC45NzY0MiAtOC41NTM2NSA1NC45NzY3NSAtOC41NTU5NSA1NC45Nzg5MSAtOC41NTUxOCA1NC45Nzk1OCAtOC41NTgxNyA1NC45ODAyOSAtOC41NjAwNCA1NC45ODE4NyAtOC41NTk4MiA1NC45ODI4NCAtOC41NTg4NiA1NC45ODM4OCAtOC41NTY2NCA1NC45ODUyMSAtOC41NTQxNCA1NC45ODM2MyAtOC41NTEwMiA1NC45ODQ1NyAtOC41NDczNSA1NC45ODYwNSAtOC41NTA0NiA1NC45ODg1MiAtOC41NTIzIDU0Ljk5MTE3IC04LjU1MjU5IDU0Ljk5NDUyIC04LjU1MzI5IDU0Ljk5NjQyIC04LjU1MjMyIDU0Ljk5NzIzIC04LjU0OTExIDU0Ljk5ODk5IC04LjU0NzE3IDU1LjAwMTQ0IC04LjU0NTk5IDU0Ljk5OTg4IC04LjU0MjY5IDU1LjAwMTYxIC04LjU0MTM4IDU1LjAwMjIyIC04LjUzNjg0IDU1LjAwNDg1IC04LjUzOTA0IDU1LjAwNjg0IC04LjUzNzc3IDU1LjAwODA4IC04LjUzNzE4IDU1LjAwODk4IC04LjU0MDgzIDU1LjAwODA1IC04LjU0NDM1IDU1LjAwODczIC04LjU0NzAyIDU1LjAxMDczIC04LjU0OTExIDU1LjAxMjI3IC04LjU0OTM2IDU1LjAxMzMgLTguNTUwNjUgNTUuMDE1MDkgLTguNTUxNTkgNTUuMDE1ODUgLTguNTQ5NDggNTUuMDE2MzQgLTguNTQ1NTcgNTUuMDE1ODUgLTguNTQyNzggNTUuMDEzNTIgLTguNTQxNTkgNTUuMDE0MDggLTguNTM5OTIgNTUuMDE0MTMgLTguNTM3MzggNTUuMDEzNjIgLTguNTM0NzQgNTUuMDE1MjIgLTguNTMyNDQgNTUuMDE3ODMgLTguNTI5ODUgNTUuMDIwNDQgLTguNTI5MTYgNTUuMDIxNzUgLTguNTMwNSA1NS4wMjIzNyAtOC41MzI1MSA1NS4wMjM2NiAtOC41MzA5NiA1NS4wMjIzMSAtOC41MjcwNyA1NS4wMjE1NyAtOC41MjUzNiA1NS4wMjAyNCAtOC41MjQ1IDU1LjAxOTI4IC04LjUyNTI5IDU1LjAxODEzIC04LjUyMjg4IDU1LjAxNzE5IC04LjUyMTU5IDU1LjAxNTMyIC04LjUyMDQ5IDU1LjAxMzYxIC04LjUxOTczIDU1LjAxMjMyIC04LjUxODI0IDU1LjAxMjA5IC04LjUxNDA2IDU1LjAxMTE3IC04LjUxMDcxIDU1LjAwOTczIC04LjUxMDE1IDU1LjAwODAzIC04LjUwOTM5IDU1LjAwNTk4IC04LjUwNDc1IDU1LjAwNTYxIC04LjQ5OTc0IDU1LjAwNjg2IC04LjQ5ODg0IDU1LjAwNzkgLTguNDk4MjEgNTUuMDA3MSAtOC40OTQyNSA1NS4wMDU3NCAtOC40OTIyNiA1NS4wMDM0IC04LjQ4OTgxIDU1LjAwNDA3IC04LjQ4NzUyIDU1LjAwMTczIC04LjQ4NTA2IDU1LjAwMTM4IC04LjQ4ODIgNTQuOTk5MTIgLTguNDg5MjYgNTQuOTk2NDQgLTguNDg5NDcgNTQuOTk0MjggLTguNDg4NjMgNTQuOTkzMzYgLTguNDg3MDQgNTQuOTkxMTUgLTguNDg3MTcgNTQuOTg5MyAtOC40ODc0OSA1NC45ODc3NCAtOC40ODU4IDU0Ljk4NzE0IC04LjQ4MzMyIDU0Ljk4NjY1IC04LjQ4MDUzIDU0Ljk4NTEyIC04LjQ3OTk1IDU0Ljk4MzUxIC04LjQ3OTIxIDU0Ljk4MjE5IC04LjQ3ODA1IDU0Ljk4MDgxIC04LjQ3OTczIDU0Ljk3ODUgLTguNDc4NCA1NC45NzYyOSAtOC40NzY3NyA1NC45NzQ3NCAtOC40ODAwMiA1NC45NzM3NyAtOC40ODI3MiA1NC45NzQxNCAtOC40ODYxNCA1NC45NzUzMSAtOC40ODYzMyA1NC45NzU3NSAtOC40OTE4MiA1NC45NzMzNCAtOC40OTIzOSA1NC45NzI5MyAtOC40OTY2MiA1NC45NzMxOCAtOC41MDM2NyA1NC45NzMzOSAtOC41MDY1OSA1NC45NzM3IC04LjUxMDk1IDU0Ljk3MjcxIC04LjUxMjM3IDU0Ljk3MDk2IC04LjUxMDY2IDU0Ljk2OTY5IC04LjUxMDQ1IDU0Ljk2ODc3IC04LjUxMjA1IDU0Ljk2ODc3IC04LjUxMjA1PC9nbWw6cG9zTGlzdD4NCis8L2dtbDpMaW5lYXJSaW5nPg0KKzxnbWw6TGluZWFyUmluZz4NCis8Z21sOnBvc0xpc3Q+NTEuNTAzMDYgLTkuNDUyNjggNTEuNTAzMDYgLTkuNDU1MzIgNTEuNTA0MzIgLTkuNDU0MzggNTEuNTA1MzcgLTkuNDUzODUgNTEuNTA2NDggLTkuNDUwMDcgNTEuNTA2MTMgLTkuNDQ3NDkgNTEuNTA0MjEgLTkuNDQ5NjQgNTEuNTAzMDYgLTkuNDUyNjggNTEuNTAzMDYgLTkuNDUyNjg8L2dtbDpwb3NMaXN0Pg0KKzwvZ21sOkxpbmVhclJpbmc+DQorPGdtbDpMaW5lYXJSaW5nPg0KKzxnbWw6cG9zTGlzdD41MS42OTIxOCAtOS40NjY5MiA1MS42OTI1MiAtOS40Njk4MSA1MS42OTQzOSAtOS40NjgyMyA1MS42OTUxOCAtOS40NjQ5NiA1MS42OTYxOSAtOS40NjM2NyA1MS42OTYxOSAtOS40NjEzMSA1MS42OTQyNSAtOS40NjEzOCA1MS42OTI5NiAtOS40NjM4IDUxLjY5MjE4IC05LjQ2NjkyIDUxLjY5MjE4IC05LjQ2NjkyPC9nbWw6cG9zTGlzdD4NCis8L2dtbDpMaW5lYXJSaW5nPg0KKzxnbWw6TGluZWFyUmluZz4NCis8Z21sOnBvc0xpc3Q+NTMuODI0NTQgLTkuNjI1MTIgNTMuODI1MDEgLTkuNjI5MjUgNTMuODIzOTUgLTkuNjMyNzggNTMuODI1NzQgLTkuNjMyMTggNTMuODI3MzcgLTkuNjMyNDkgNTMuODI3MDQgLTkuNjM2MyA1My44Mjg4MiAtOS42MzU4NiA1My44Mjk1NSAtOS42MzMwNSA1My44Mjk4OCAtOS42MzA3OCA1My44MzIyNiAtOS42Mjk1MSA1My44MzI3NiAtOS42MjYxOCA1My44MzQwMiAtOS42MjY1NiA1My44MzQ1MyAtOS42Mjg1MiA1My44MzQwOCAtOS42MzEyNSA1My44MzI5OSAtOS42MzQgNTMuODMyMzIgLTkuNjM3MTQgNTMuODMyMzkgLTkuNjQwMjYgNTMuODMyNjggLTkuNjQ0MzYgNTMuODM0MzIgLTkuNjQxNzEgNTMuODM1MTkgLTkuNjM5NyA1My44MzU2MSAtOS42Mzc1OSA1My44MzU1NSAtOS42MzQxNiA1My44MzYxMyAtOS42MzEwMSA1My44MzU5NSAtOS42MjY2MiA1My44MzU1NyAtOS42MjI2NSA1My44MzM0MSAtOS42MjMxOSA1My44MzIwMSAtOS42MjA3NSA1My44MzA3NyAtOS42MTk5IDUzLjgyOTAyIC05LjYyMTQ1IDUzLjgyODE1IC05LjYyMzQ1IDUzLjgyNjQ0IC05LjYyMTQ0IDUzLjgyNDU0IC05LjYyNTEyIDUzLjgyNDU0IC05LjYyNTEyPC9nbWw6cG9zTGlzdD4NCis8L2dtbDpMaW5lYXJSaW5nPg0KKzxnbWw6TGluZWFyUmluZz4NCis8Z21sOnBvc0xpc3Q+NTMuODMyMTQgLTkuNjY5NDQgNTMuODM0NiAtOS42NjgzNiA1My44MzcyNCAtOS42NjYwNCA1My44MzkxMSAtOS42NjI2OCA1My44Mzc1NSAtOS42NjI2OSA1My44MzgxMSAtOS42NTk4MiA1My44Mzk4NCAtOS42NTU3OSA1My44NDExNSAtOS42NTQxOCA1My44NDI0NiAtOS42NTIyNSA1My44NDQwNSAtOS42NDkxMiA1My44NDQxNCAtOS42NDUwOSA1My44NDQxMiAtOS42NDI1OSA1My44NDIyNSAtOS42NDQ0MyA1My44Mzk1NiAtOS42NDczNSA1My44NDAyOCAtOS42NTA3NiA1My44Mzc2OCAtOS42NTA4OSA1My44MzU5MiAtOS42NTI0MyA1My44MzUwNSAtOS42NTU5OSA1My44MzU0NSAtOS42NTgyNSA1My44MzUzNSAtOS42NjExOCA1My44MzQ2IC05LjY2NDE2IDUzLjgzMzU1IC05LjY2NjI4IDUzLjgzMjE0IC05LjY2OTQ0IDUzLjgzMjE0IC05LjY2OTQ0PC9nbWw6cG9zTGlzdD4NCis8L2dtbDpMaW5lYXJSaW5nPg0KKzxnbWw6TGluZWFyUmluZz4NCis8Z21sOnBvc0xpc3Q+NTQuOTgzOTQgLTguNDUwNzMgNTQuOTg1MzMgLTguNDUzODMgNTQuOTg3MzQgLTguNDU0MTUgNTQuOTg4ODIgLTguNDU1NTIgNTQuOTkwMDQgLTguNDU1MDggNTQuOTkxMjcgLTguNDU0NDggNTQuOTkwNDcgLTguNDUwNTIgNTQuOTg5NyAtOC40NDc2OSA1NC45ODg4IC04LjQ0NTc4IDU0Ljk4Nzc0IC04LjQ0NTEzIDU0Ljk4NTYxIC04LjQ0NTI2IDU0Ljk4NTIgLTguNDQ3OTEgNTQuOTgzOTQgLTguNDUwNzMgNTQuOTgzOTQgLTguNDUwNzM8L2dtbDpwb3NMaXN0Pg0KKzwvZ21sOkxpbmVhclJpbmc+DQorPGdtbDpMaW5lYXJSaW5nPg0KKzxnbWw6cG9zTGlzdD41My44MDIyIC05LjYyNDcgNTMuODAyMzkgLTkuNjI3MzggNTMuODAzOTMgLTkuNjI2NTggNTMuODA0OSAtOS42MjQ0MiA1My44MDUyNSAtOS42MjE2OSA1My44MDQ0MiAtOS42MTkwNiA1My44MDMyMSAtOS42MjIwOSA1My44MDIyIC05LjYyNDcgNTMuODAyMiAtOS42MjQ3PC9nbWw6cG9zTGlzdD4NCis8L2dtbDpMaW5lYXJSaW5nPg0KKzxnbWw6TGluZWFyUmluZz4NCis8Z21sOnBvc0xpc3Q+NTMuNDQwNzUgLTEwLjE0NTI0IDUzLjQ0MDU3IC0xMC4xNDc4NCA1My40NDEzMyAtMTAuMTUwMTQgNTMuNDQwMzggLTEwLjE1MTggNTMuNDQxMTcgLTEwLjE1MzY1IDUzLjQ0MjM4IC0xMC4xNTIxOSA1My40NDI3NSAtMTAuMTQ4MjUgNTMuNDQzMDUgLTEwLjE0NTIzIDUzLjQ0MzA0IC0xMC4xNDI3NyA1My40NDE3OSAtMTAuMTQzNDQgNTMuNDQwNzUgLTEwLjE0NTI0IDUzLjQ0MDc1IC0xMC4xNDUyNDwvZ21sOnBvc0xpc3Q+DQorPC9nbWw6TGluZWFyUmluZz4NCis8Z21sOkxpbmVhclJpbmc+DQorPGdtbDpwb3NMaXN0PjUzLjQwMjQzIC05Ljg0MTY5IDUzLjQwMDcyIC05LjgzODI5IDUzLjM5ODg1IC05LjgzODcyIDUzLjM5NzM5IC05LjgzODU5IDUzLjM5NTU4IC05Ljg0MDcyIDUzLjM5NDM2IC05Ljg0NjY0IDUzLjQwMDAyIC05Ljg0NDYzIDUzLjQwMjQzIC05Ljg0MTY5IDUzLjQwMjQzIC05Ljg0MTY5PC9nbWw6cG9zTGlzdD4NCis8L2dtbDpMaW5lYXJSaW5nPg0KKzxnbWw6TGluZWFyUmluZz4NCis8Z21sOnBvc0xpc3Q+NTEuODMwNTUgLTEwLjQwNDYxIDUxLjgzMjg5IC0xMC40MDQwNiA1MS44MzUgLTEwLjQwMzE3IDUxLjgzNjY0IC0xMC40MDIzMSA1MS44Mzg0IC0xMC40MDEwNSA1MS44Mzk4OCAtMTAuMzk3NjQgNTEuODQwODEgLTEwLjM5NDExIDUxLjg0MjY2IC0xMC4zOTE4MSA1MS44NDE4MyAtMTAuMzg5NTUgNTEuODM5MzcgLTEwLjM5MDI0IDUxLjgzNzQ0IC0xMC4zOTEzMiA1MS44MzU3NiAtMTAuMzkyNzUgNTEuODM0NzcgLTEwLjM5NDYyIDUxLjgzNDQgLTEwLjM5Nzk3IDUxLjgzMjcyIC0xMC4zOTgyMiA1MS44MzEzMiAtMTAuNDAwNzUgNTEuODMwNTUgLTEwLjQwNDYxIDUxLjgzMDU1IC0xMC40MDQ2MTwvZ21sOnBvc0xpc3Q+DQorPC9nbWw6TGluZWFyUmluZz4NCis8Z21sOkxpbmVhclJpbmc+DQorPGdtbDpwb3NMaXN0PjUyLjYxNjA4IC05LjA5Nzg5IDUyLjYxOTIyIC05LjA5OTA2IDUyLjYxOTk2IC05LjEwNTcgNTIuNjIxMDEgLTkuMTA3ODYgNTIuNjIyNjggLTkuMTA5MDcgNTIuNjIzOTIgLTkuMTExMTIgNTIuNjI1NTQgLTkuMTEwMzYgNTIuNjI3MDQgLTkuMTA1OTUgNTIuNjI4NTUgLTkuMTA0MTEgNTIuNjI5MjIgLTkuMDk5NjkgNTIuNjI4NDUgLTkuMDk3NTkgNTIuNjI3MjcgLTkuMDkxOTIgNTIuNjI2MDMgLTkuMDkzODEgNTIuNjI0NSAtOS4wOTIwMSA1Mi42MjI0OCAtOS4wOTA1OCA1Mi42MjA0IC05LjA5MDA0IDUyLjYxODEgLTkuMDg5OTIgNTIuNjE3NDQgLTkuMDkyODIgNTIuNjE2MDggLTkuMDk3ODkgNTIuNjE2MDggLTkuMDk3ODk8L2dtbDpwb3NMaXN0Pg0KKzwvZ21sOkxpbmVhclJpbmc+DQorPGdtbDpMaW5lYXJSaW5nPg0KKzxnbWw6cG9zTGlzdD41Mi42Mjk2NCAtOC45OTUwOCA1Mi42MjkzNCAtOC45OTgyIDUyLjYyOTc3IC04Ljk5OTk0IDUyLjYzMTkxIC04Ljk5ODIyIDUyLjYzNDEzIC04Ljk5ODE3IDUyLjYzNTI0IC04Ljk5NjcgNTIuNjM0MDggLTguOTk0ODIgNTIuNjM0OCAtOC45ODk2NiA1Mi42MzMwMiAtOC45OTE0NSA1Mi42MzEzMiAtOC45OTIwNSA1Mi42MzExNCAtOC45OTQ3NCA1Mi42Mjk2NCAtOC45OTUwOCA1Mi42Mjk2NCAtOC45OTUwODwvZ21sOnBvc0xpc3Q+DQorPC9nbWw6TGluZWFyUmluZz4NCis8Z21sOkxpbmVhclJpbmc+DQorPGdtbDpwb3NMaXN0PjUzLjk5MjExIC05Ljg2NDEgNTMuOTkzNTggLTkuODY2ODkgNTMuOTk2MTggLTkuODY1MzggNTMuOTk3NyAtOS44NjMzNCA1My45OTYxNyAtOS44NjE0NyA1My45OTQ4IC05Ljg2MTIgNTMuOTkzMzcgLTkuODYyIDUzLjk5MjExIC05Ljg2NDEgNTMuOTkyMTEgLTkuODY0MTwvZ21sOnBvc0xpc3Q+DQorPC9nbWw6TGluZWFyUmluZz4NCis8Z21sOkxpbmVhclJpbmc+DQorPGdtbDpwb3NMaXN0PjUyLjMzMTM1IC0xMC4wMzg2NiA1Mi4zMzE1OSAtMTAuMDQxNTggNTIuMzMyNzggLTEwLjA0MDQ3IDUyLjMzNDA4IC0xMC4wMzkwNyA1Mi4zMzQ5MSAtMTAuMDM3OSA1Mi4zMzUxMSAtMTAuMDM1MzggNTIuMzMzOTYgLTEwLjAzNDY4IDUyLjMzMjU3IC0xMC4wMzQ4NiA1Mi4zMzE3NyAtMTAuMDM2OCA1Mi4zMzEzNSAtMTAuMDM4NjYgNTIuMzMxMzUgLTEwLjAzODY2PC9nbWw6cG9zTGlzdD4NCis8L2dtbDpMaW5lYXJSaW5nPg0KKzxnbWw6TGluZWFyUmluZz4NCis8Z21sOnBvc0xpc3Q+NTMuNjAxOTkgLTEwLjI1NzY0IDUzLjYwMTkyIC0xMC4yNjEzNSA1My42MDI5OSAtMTAuMjY1NzUgNTMuNjAzNCAtMTAuMjY4OTIgNTMuNjAzOTMgLTEwLjI3MTk3IDUzLjYwMzc1IC0xMC4yNzQ0MSA1My42MDIxNiAtMTAuMjc3NDkgNTMuNjAwMzUgLTEwLjI4MjA5IDUzLjU5NzYxIC0xMC4yODcxIDUzLjU5OTU5IC0xMC4yOTE1NCA1My42MDI1NCAtMTAuMjg3NjMgNTMuNjA1MjIgLTEwLjI4NDc3IDUzLjYwNzcyIC0xMC4yODM0MSA1My42MTA2OCAtMTAuMjgxOTkgNTMuNjEzMjEgLTEwLjI4MTI1IDUzLjYxNjMzIC0xMC4yODAzMyA1My42MTc0MyAtMTAuMjc1MTMgNTMuNjE2MDUgLTEwLjI3MjUzIDUzLjYxMzc1IC0xMC4yNzEzIDUzLjYxMjQ4IC0xMC4yNjcwMiA1My42MTIzMyAtMTAuMjYwMDMgNTMuNjExMjUgLTEwLjI1NzAyIDUzLjYwODc2IC0xMC4yNTQ1MiA1My42MDY1OCAtMTAuMjUyNjggNTMuNjA0ODQgLTEwLjI1MjY0IDUzLjYwMjk2IC0xMC4yNTQ0MyA1My42MDE5OSAtMTAuMjU3NjQgNTMuNjAxOTkgLTEwLjI1NzY0PC9nbWw6cG9zTGlzdD4NCis8L2dtbDpMaW5lYXJSaW5nPg0KKzxnbWw6TGluZWFyUmluZz4NCis8Z21sOnBvc0xpc3Q+NTIuNjkyNTYgLTkuMDQ0OTEgNTIuNjk0NTUgLTkuMDQ4MTUgNTIuNjk2MTcgLTkuMDQ2MDMgNTIuNjk3MyAtOS4wNDQyNyA1Mi42OTYxOSAtOS4wNDE2NCA1Mi42OTQ4MSAtOS4wNDE2OSA1Mi42OTM1IC05LjA0MzI2IDUyLjY5MjU2IC05LjA0NDkxIDUyLjY5MjU2IC05LjA0NDkxPC9nbWw6cG9zTGlzdD4NCis8L2dtbDpMaW5lYXJSaW5nPg0KKzxnbWw6TGluZWFyUmluZz4NCis8Z21sOnBvc0xpc3Q+NTIuODEwMTQgLTkuNTE3ODEgNTIuODEwMzMgLTkuNTIxNjQgNTIuODEyODkgLTkuNTIzMjEgNTIuODE0NTYgLTkuNTI0MjkgNTIuODE1OTEgLTkuNTI2MDcgNTIuODE3MDUgLTkuNTIxNzQgNTIuODE2MTkgLTkuNTE3MDEgNTIuODE1NTcgLTkuNTEwMzUgNTIuODE1ODYgLTkuNTA2MzEgNTIuODE3NyAtOS41MDM3NyA1Mi44MjA0IC05LjUwMDgxIDUyLjgxODc1IC05LjQ5ODE5IDUyLjgxNjc1IC05LjQ5NzgxIDUyLjgxNDkxIC05LjUwMDE5IDUyLjgxMzA4IC05LjUwMzk0IDUyLjgxMjQ0IC05LjUwODk5IDUyLjgxMTQyIC05LjUxMzAzIDUyLjgxMDE0IC05LjUxNzgxIDUyLjgxMDE0IC05LjUxNzgxPC9nbWw6cG9zTGlzdD4NCis8L2dtbDpMaW5lYXJSaW5nPg0KKzxnbWw6TGluZWFyUmluZz4NCis8Z21sOnBvc0xpc3Q+NTEuNDg4OTcgLTkuMzgyMTQgNTEuNDkwMTUgLTkuMzg1MDEgNTEuNDkxNzYgLTkuMzg1NjEgNTEuNDkyNjYgLTkuMzg3MjUgNTEuNDkzMDggLTkuMzkwMjkgNTEuNDk0NyAtOS4zODk1NSA1MS40OTY1MiAtOS4zODg1NyA1MS40OTgxMiAtOS4zODgxMyA1MS40OTkyNyAtOS4zODc2IDUxLjUwMDUgLTkuMzg1OTIgNTEuNTAwMzUgLTkuMzg0MTIgNTEuNDk4ODkgLTkuMzgzODQgNTEuNDk3MzkgLTkuMzgyOTcgNTEuNDk2MjkgLTkuMzgwNDEgNTEuNDk0NCAtOS4zODA5NSA1MS40OTIxMiAtOS4zODA2NiA1MS40OTAwNCAtOS4zODEzMSA1MS40ODg5NyAtOS4zODIxNCA1MS40ODg5NyAtOS4zODIxNDwvZ21sOnBvc0xpc3Q+DQorPC9nbWw6TGluZWFyUmluZz4NCis8Z21sOkxpbmVhclJpbmc+DQorPGdtbDpwb3NMaXN0PjU0Ljk0NjQgLTguNDE2NzUgNTQuOTQ4MTkgLTguNDE5MjcgNTQuOTQ2ODQgLTguNDIyMjQgNTQuOTQ5OTkgLTguNDIzMzggNTQuOTUwNjkgLTguNDIwNjMgNTQuOTUyMTEgLTguNDE5NTggNTQuOTUxOTUgLTguNDE1OSA1NC45NTIxNiAtOC40MTM1MyA1NC45NTA1IC04LjQxMjE1IDU0Ljk0ODk5IC04LjQxMTExIDU0Ljk0ODQ1IC04LjQxNDM3IDU0Ljk0NjQgLTguNDE2NzUgNTQuOTQ2NCAtOC40MTY3NTwvZ21sOnBvc0xpc3Q+DQorPC9nbWw6TGluZWFyUmluZz4NCis8Z21sOkxpbmVhclJpbmc+DQorPGdtbDpwb3NMaXN0PjU0LjI5OTYgLTguNTY0MzcgNTQuMjk5MjkgLTguNTY4MjQgNTQuMzAwMjggLTguNTcxODYgNTQuMzAxMjYgLTguNTY5MDUgNTQuMzAyMTYgLTguNTY2NTIgNTQuMzAyODggLTguNTYzNTEgNTQuMzAyNzEgLTguNTU4NDUgNTQuMzAyNzYgLTguNTU1OTUgNTQuMzAwNzMgLTguNTU3OCA1NC4zMDAwNCAtOC41NjE3NyA1NC4yOTk2IC04LjU2NDM3IDU0LjI5OTYgLTguNTY0Mzc8L2dtbDpwb3NMaXN0Pg0KKzwvZ21sOkxpbmVhclJpbmc+DQorPGdtbDpMaW5lYXJSaW5nPg0KKzxnbWw6cG9zTGlzdD41MS40NzMyMyAtOS41MTA5NCA1MS40NzQwOSAtOS41MTMwMiA1MS40NzUyNyAtOS41MTE5MiA1MS40NzY0NCAtOS41MTM2MSA1MS40NzcyMiAtOS41MTE4NSA1MS40Nzg0OCAtOS41MDk3MyA1MS40Nzc5NSAtOS41MDY5NyA1MS40NzY3NiAtOS41MDU1NiA1MS40NzU3NyAtOS41MDY1NiA1MS40NzQ1MiAtOS41MDg1MyA1MS40NzMyMyAtOS41MTA5NCA1MS40NzMyMyAtOS41MTA5NDwvZ21sOnBvc0xpc3Q+DQorPC9nbWw6TGluZWFyUmluZz4NCis8Z21sOkxpbmVhclJpbmc+DQorPGdtbDpwb3NMaXN0PjUzLjU0MDU0IC0xMC4yNDk3MyA1My41NDA5NSAtMTAuMjUzMDYgNTMuNTQyNTMgLTEwLjI1MjkxIDUzLjU0NDAyIC0xMC4yNTI1OSA1My41NDU2MiAtMTAuMjQ5NjUgNTMuNTQ3MTMgLTEwLjI0Nzc5IDUzLjU0NzI3IC0xMC4yNDQ1NyA1My41NDYwMiAtMTAuMjQ0MDIgNTMuNTQ2ODUgLTEwLjIzODc2IDUzLjU0NDcgLTEwLjIzOTExIDUzLjU0Mzk1IC0xMC4yNDE5MSA1My41NDMyMiAtMTAuMjQ0NTQgNTMuNTQxNjUgLTEwLjI0NzE2IDUzLjU0MDU0IC0xMC4yNDk3MyA1My41NDA1NCAtMTAuMjQ5NzM8L2dtbDpwb3NMaXN0Pg0KKzwvZ21sOkxpbmVhclJpbmc+DQorPGdtbDpMaW5lYXJSaW5nPg0KKzxnbWw6cG9zTGlzdD41NC4wMDA5OSAtOS44ODM2OSA1My45OTc1OCAtOS44ODM3OSA1My45OTQ5IC05Ljg4MjQ4IDUzLjk5MjU1IC05Ljg4MzEgNTMuOTg5OTEgLTkuODgyNzMgNTMuOTg3NTUgLTkuODgzMzYgNTMuOTg2NTIgLTkuODg0ODcgNTMuOTg4MjIgLTkuODg3MDkgNTMuOTkwNDMgLTkuODg3MjIgNTMuOTkxMTMgLTkuODg4OTIgNTMuOTkwMTYgLTkuODkzNzIgNTMuOTg5ODEgLTkuODk1OTkgNTMuOTg2ODUgLTkuODk3NiA1My45ODgzMSAtOS45MDAzOSA1My45ODk0MyAtOS45MDE1NSA1My45OTIwNyAtOS45MDA4MiA1My45OTIyMiAtOS45MDM4MyA1My45ODk5NyAtOS45MDQzMSA1My45ODg1NSAtOS45MDQ5OCA1My45ODUzIC05LjkwMjYgNTMuOTg2NTcgLTkuOTA5NTggNTMuOTg4MjcgLTkuOTEwMzkgNTMuOTkwMDggLTkuOTEyIDUzLjk5MTk0IC05LjkxMzE2IDUzLjk5MzY5IC05LjkxNDU5IDUzLjk5NTIyIC05LjkxNTA1IDUzLjk5NjA1IC05LjkxMjQxIDUzLjk5Nzk0IC05LjkwOTAzIDU0LjAwMDggLTkuOTA1MDcgNTQuMDAwNTQgLTkuODk4MTMgNTQuMDAxMjkgLTkuODkyNjYgNTQuMDAwNjQgLTkuODg3MzcgNTQuMDAwOTkgLTkuODgzNjkgNTQuMDAwOTkgLTkuODgzNjk8L2dtbDpwb3NMaXN0Pg0KKzwvZ21sOkxpbmVhclJpbmc+DQorPGdtbDpMaW5lYXJSaW5nPg0KKzxnbWw6cG9zTGlzdD41My40MzAwMyAtMTAuMTYyNzIgNTMuNDI5NjkgLTEwLjE2NDk2IDUzLjQyOTgyIC0xMC4xNjcxNCA1My40MzA4MiAtMTAuMTY4NTggNTMuNDMyMzQgLTEwLjE2NjU3IDUzLjQzMzQxIC0xMC4xNjMwNyA1My40MzM4IC0xMC4xNjAyMiA1My40MzM3NyAtMTAuMTU4MDYgNTMuNDMyOTQgLTEwLjE1NjgxIDUzLjQzMTQ3IC0xMC4xNjA2OCA1My40MzAwMyAtMTAuMTYyNzIgNTMuNDMwMDMgLTEwLjE2MjcyPC9nbWw6cG9zTGlzdD4NCis8L2dtbDpMaW5lYXJSaW5nPg0KKzxnbWw6TGluZWFyUmluZz4NCis8Z21sOnBvc0xpc3Q+NTEuNTc4MzMgLTEwLjIyNDE3IDUxLjU4MTA2IC0xMC4yMjU5MiA1MS41ODIzOCAtMTAuMjI5IDUxLjU4MzY5IC0xMC4yMjc2NSA1MS41ODQ5MSAtMTAuMjIzOSA1MS41ODc0IC0xMC4yMTkyMyA1MS41ODkzIC0xMC4yMTc0IDUxLjU5MTcgLTEwLjIxNTA3IDUxLjU5Mjk3IC0xMC4yMDg1MiA1MS41OTUxIC0xMC4yMDQ5NiA1MS41OTcxIC0xMC4yMDQyIDUxLjU5OTU4IC0xMC4yMDMwNyA1MS42MDIwMyAtMTAuMTk3OTQgNTEuNjA0MTcgLTEwLjE5MzA1IDUxLjYwNjEgLTEwLjE4OTc1IDUxLjYwNzI0IC0xMC4xODQ2NCA1MS42MDg2OSAtMTAuMTc5MTYgNTEuNjA5NjkgLTEwLjE3MzU5IDUxLjYxMDEyIC0xMC4xNjgyIDUxLjYxMDc2IC0xMC4xNjEzNiA1MS42MTExMyAtMTAuMTU3ODkgNTEuNjExNzIgLTEwLjE1Mzg2IDUxLjYxMDM5IC0xMC4xNTIxMSA1MS42MDgyNCAtMTAuMTQ4ODUgNTEuNjA1NTUgLTEwLjE0OCA1MS42MDM1MSAtMTAuMTQ4MDMgNTEuNjAwNTcgLTEwLjE0Nzg3IDUxLjYwMDMgLTEwLjE1MzU5IDUxLjYwMjY0IC0xMC4xNTU1NiA1MS41OTg5NCAtMTAuMTY0ODcgNTEuNTk2MTcgLTEwLjE2NzEyIDUxLjU5NDI2IC0xMC4xNzM4NCA1MS41OTI4NiAtMTAuMTgwOTUgNTEuNTkxIC0xMC4xODkzMiA1MS41ODkzNCAtMTAuMTkwNDUgNTEuNTg4MDYgLTEwLjE5NzE1IDUxLjU4NzEgLTEwLjIwMjI4IDUxLjU4NTMyIC0xMC4yMDcyNSA1MS41ODI5NiAtMTAuMjExMzUgNTEuNTgwNzIgLTEwLjIxNjIzIDUxLjU3OTQzIC0xMC4yMTk2NiA1MS41NzgzMyAtMTAuMjI0MTcgNTEuNTc4MzMgLTEwLjIyNDE3PC9nbWw6cG9zTGlzdD4NCis8L2dtbDpMaW5lYXJSaW5nPg0KKzxnbWw6TGluZWFyUmluZz4NCis8Z21sOnBvc0xpc3Q+NTIuMDczMzIgLTEwLjU2NTkyIDUyLjA3MzkyIC0xMC41Njg3NCA1Mi4wNzY4NiAtMTAuNTY2NTMgNTIuMDc4NjIgLTEwLjU2NTQxIDUyLjA4MDY2IC0xMC41NjQyIDUyLjA4MTQ1IC0xMC41NjAxOCA1Mi4wODI2OCAtMTAuNTU4NjUgNTIuMDg1NSAtMTAuNTU4MDcgNTIuMDg3NDUgLTEwLjU1NDU5IDUyLjA5MDA5IC0xMC41NDk0NiA1Mi4wOTIyNSAtMTAuNTQ0NTMgNTIuMDkzOTggLTEwLjU0MTQ2IDUyLjA5NTU2IC0xMC41Mzc5IDUyLjA5NTk0IC0xMC41MzQzOCA1Mi4wOTgwMSAtMTAuNTMwNDkgNTIuMDk5NTYgLTEwLjUyNDA3IDUyLjEwMDY5IC0xMC41MTgxNyA1Mi4xMDI5NCAtMTAuNTE0MzEgNTIuMTA1NDggLTEwLjUxMTQxIDUyLjEwODU3IC0xMC41MTEwMiA1Mi4xMTAxNCAtMTAuNTEwOTEgNTIuMTExNjUgLTEwLjUwODI0IDUyLjExMiAtMTAuNTA0MTIgNTIuMTEwNSAtMTAuNTAzMiA1Mi4xMDg0NSAtMTAuNTAyMzEgNTIuMTA2ODQgLTEwLjUwMDQ1IDUyLjEwNTcgLTEwLjQ5NTI3IDUyLjEwMzUxIC0xMC40OTcxOSA1Mi4xMDE5OSAtMTAuNDk4ODIgNTIuMDk5NDcgLTEwLjUwMDM3IDUyLjA5NzQ0IC0xMC41MDE0NCA1Mi4wOTU2NCAtMTAuNTA2NDUgNTIuMDk0MiAtMTAuNTEwNDggNTIuMDkyNDcgLTEwLjUxNDc2IDUyLjA5MDgxIC0xMC41MjA0IDUyLjA4OTIyIC0xMC41MjYzNCA1Mi4wODY0IC0xMC41MzI0OCA1Mi4wODU2NyAtMTAuNTM4MDIgNTIuMDgzNjEgLTEwLjU0NDAxIDUyLjA4MTU4IC0xMC41NDYyOCA1Mi4wNzkyNCAtMTAuNTQ4OTIgNTIuMDc2NjUgLTEwLjU1MjI2IDUyLjA3NTk3IC0xMC41NTcyIDUyLjA3NDM5IC0xMC41NjE4MSA1Mi4wNzMzMiAtMTAuNTY1OTIgNTIuMDczMzIgLTEwLjU2NTkyPC9nbWw6cG9zTGlzdD4NCis8L2dtbDpMaW5lYXJSaW5nPg0KKzxnbWw6TGluZWFyUmluZz4NCis8Z21sOnBvc0xpc3Q+NTMuMjAxMDkgLTguOTMzMjUgNTMuMjAzODUgLTguOTM2MDUgNTMuMjAzNjQgLTguOTMyMTggNTMuMjAzMjkgLTguOTI3ODQgNTMuMjAyIC04LjkzMDUxIDUzLjIwMTA5IC04LjkzMzI1IDUzLjIwMTA5IC04LjkzMzI1PC9nbWw6cG9zTGlzdD4NCis8L2dtbDpMaW5lYXJSaW5nPg0KKzxnbWw6TGluZWFyUmluZz4NCis8Z21sOnBvc0xpc3Q+NTIuMTExMzkgLTYuNjIwMjIgNTIuMTExNDggLTYuNjIyNDYgNTIuMTEyODggLTYuNjI0MDggNTIuMTE1MiAtNi42MjM0MyA1Mi4xMTcyNiAtNi42MjI0NiA1Mi4xMTg0MiAtNi42MjA5NSA1Mi4xMTk2MSAtNi42MTg2OCA1Mi4xMjA0NyAtNi42MTU0OSA1Mi4xMjA4OSAtNi42MTE2NiA1Mi4xMjE2NCAtNi42MDg5MSA1Mi4xMjI5MSAtNi42MDY4MSA1Mi4xMjM5NCAtNi42MDE3MSA1Mi4xMjI2NiAtNi42MDE3MiA1Mi4xMjA4MiAtNi42MDE4MyA1Mi4xMTkzMyAtNi42MDI0MiA1Mi4xMTc2OSAtNi42MDQzMyA1Mi4xMTY0NSAtNi42MDc3OCA1Mi4xMTUwMSAtNi42MTE4MSA1Mi4xMTMzNiAtNi42MTQxNyA1Mi4xMTE5NSAtNi42MTc1OSA1Mi4xMTEzOSAtNi42MjAyMiA1Mi4xMTEzOSAtNi42MjAyMjwvZ21sOnBvc0xpc3Q+DQorPC9nbWw6TGluZWFyUmluZz4NCis8Z21sOkxpbmVhclJpbmc+DQorPGdtbDpwb3NMaXN0PjUxLjgyOTE1IC03Ljk5MTYgNTEuODMwMTQgLTcuOTkzNjcgNTEuODMxMTEgLTcuOTkyOTEgNTEuODMyMjUgLTcuOTkyMDMgNTEuODMxNzUgLTcuOTg5MjkgNTEuODMwNjEgLTcuOTg4MjQgNTEuODI5NjQgLTcuOTg5MyA1MS44MjkxNSAtNy45OTE2IDUxLjgyOTE1IC03Ljk5MTY8L2dtbDpwb3NMaXN0Pg0KKzwvZ21sOkxpbmVhclJpbmc+DQorPGdtbDpMaW5lYXJSaW5nPg0KKzxnbWw6cG9zTGlzdD41NC44Njk2IC04LjUyNDYgNTQuODY5MyAtOC41MjY2MyA1NC44NzAyNyAtOC41Mjg4NSA1NC44NzI0NSAtOC41Mjk1MyA1NC44NzI4OSAtOC41MjY0MSA1NC44NzM1NiAtOC41MjQzIDU0Ljg3MTc4IC04LjUyMzIxIDU0Ljg3MDY2IC04LjUyMzUxIDU0Ljg2OTYgLTguNTI0NiA1NC44Njk2IC04LjUyNDY8L2dtbDpwb3NMaXN0Pg0KKzwvZ21sOkxpbmVhclJpbmc+DQorPGdtbDpMaW5lYXJSaW5nPg0KKzxnbWw6cG9zTGlzdD41NS4yNTE3MSAtOC4xODc2OCA1NS4yNTE0NSAtOC4xOTQzOCA1NS4yNTE5MyAtOC4yMDI5NyA1NS4yNTI3OCAtOC4yMDU4NCA1NS4yNTQzNCAtOC4yMDc2OSA1NS4yNTY4NCAtOC4yMDkyIDU1LjI1OTEzIC04LjIxMDg0IDU1LjI2MDg0IC04LjIxMzM2IDU1LjI2MjIzIC04LjIxODQgNTUuMjYwMjMgLTguMjE5NjkgNTUuMjU5MyAtOC4yMjE3OSA1NS4yNTg4OCAtOC4yMjQ0NSA1NS4yNTk4OCAtOC4yMjY1MyA1NS4yNjEyOSAtOC4yMjk0OSA1NS4yNjEzIC04LjIzNDYzIDU1LjI2MjcgLTguMjQxMTEgNTUuMjY0NjYgLTguMjQyMjIgNTUuMjY2MzQgLTguMjQzNDYgNTUuMjY5MTYgLTguMjQzOSA1NS4yNzE2NiAtOC4yNDE3MyA1NS4yNzI5NyAtOC4yMzYgNTUuMjcxNjIgLTguMjI4MjMgNTUuMjY5OSAtOC4yMjk3MyA1NS4yNjgyNSAtOC4yMjk3OCA1NS4yNjgxMyAtOC4yMjMxOSA1NS4yNjYzNCAtOC4yMTg3MyA1NS4yNjg2MyAtOC4yMTUyMyA1NS4yNjc3MSAtOC4yMTE3MiA1NS4yNjU0NiAtOC4yMTI2NiA1NS4yNjQ2NCAtOC4yMDkgNTUuMjYzMDYgLTguMjA3NDYgNTUuMjYxNjIgLTguMjA3MDggNTUuMjYyNTUgLTguMjAzMjEgNTUuMjYwNjYgLTguMjAyNTggNTUuMjU5OTggLTguMTk5NzUgNTUuMjU4NjIgLTguMTk3NjEgNTUuMjU3MTggLTguMTk3MDcgNTUuMjU3NSAtOC4xOTI3OCA1NS4yNTU4MiAtOC4xODc4NiA1NS4yNTk4IC04LjE4NzIxIDU1LjI2MDQ2IC04LjE4NTIxIDU1LjI2MTY4IC04LjE4MjY4IDU1LjI1ODkyIC04LjE4MTI4IDU1LjI1NzQ4IC04LjE4NDI2IDU1LjI1NTU3IC04LjE4NTU3IDU1LjI1MjcyIC04LjE4NTc3IDU1LjI1MTcxIC04LjE4NzY4IDU1LjI1MTcxIC04LjE4NzY4PC9nbWw6cG9zTGlzdD4NCis8L2dtbDpMaW5lYXJSaW5nPg0KKzxnbWw6TGluZWFyUmluZz4NCis8Z21sOnBvc0xpc3Q+NTEuNzM2MjMgLTkuNTMzNDQgNTEuNzM1ODIgLTkuNTM2NDkgNTEuNzM2NDQgLTkuNTM4MDggNTEuNzM4MDEgLTkuNTM3OTQgNTEuNzM5MzggLTkuNTM1NjggNTEuNzQxMTQgLTkuNTI5NDggNTEuNzQwNTggLTkuNTI2OTkgNTEuNzM5MDQgLTkuNTI3ODkgNTEuNzM3NSAtOS41Mjk5NyA1MS43MzYyMyAtOS41MzM0NCA1MS43MzYyMyAtOS41MzM0NDwvZ21sOnBvc0xpc3Q+DQorPC9nbWw6TGluZWFyUmluZz4NCis8Z21sOkxpbmVhclJpbmc+DQorPGdtbDpwb3NMaXN0PjU1LjAxMjg4IC04LjQwNDIyIDU1LjAxNTIxIC04LjQwODU4IDU1LjAxNjg4IC04LjQwOTk2IDU1LjAxODg5IC04LjQxMDEyIDU1LjAxOTY0IC04LjQxMzI5IDU1LjAyMTM0IC04LjQxNDIgNTUuMDIzNDkgLTguNDEzNDMgNTUuMDI1MjMgLTguNDEzNTUgNTUuMDI2NTcgLTguNDE1ODUgNTUuMDI2MDQgLTguNDE4NzkgNTUuMDI1MzkgLTguNDIwNzYgNTUuMDI1ODIgLTguNDI0NjcgNTUuMDI2ODkgLTguNDI4NjcgNTUuMDI5NyAtOC40MjUzMiA1NS4wMjc3NyAtOC40MjQxOCA1NS4wMjczNiAtOC40MjE3MyA1NS4wMjgwOCAtOC40MjAyNCA1NS4wMjkzNCAtOC40MTkwMSA1NS4wMzA5IC04LjQxODkzIDU1LjAzMTY0IC04LjQxNzE1IDU1LjAzMjYzIC04LjQxNTg3IDU1LjAzNCAtOC40MTQxOCA1NS4wMzYzOSAtOC40MTQyNCA1NS4wMzgzOCAtOC40MTQ3MiA1NS4wMzkwOSAtOC40MTY5MSA1NS4wMzk3OSAtOC40MTkxIDU1LjA0MjY2IC04LjQxODc3IDU1LjA0NDY3IC04LjQyMjI5IDU1LjA0NTk4IC04LjQyMzYzIDU1LjA0Nzk1IC04LjQyMjgyIDU1LjA0OTcyIC04LjQyMjMxIDU1LjA1MTk4IC04LjQyMjk5IDU1LjA1MTIgLTguNDE4NTUgNTUuMDQ5MDMgLTguNDE0NTQgNTUuMDQ2OTEgLTguNDEzMDggNTUuMDQ0NjggLTguNDExOTEgNTUuMDQzMDEgLTguNDEyMTIgNTUuMDQxNDUgLTguNDEyMzUgNTUuMDQwMjQgLTguNDA5MTEgNTUuMDM2NzcgLTguNDA4NzEgNTUuMDMzNzYgLTguNDA4MzkgNTUuMDMxMTQgLTguNDA3NjQgNTUuMDI5MDYgLTguNDA3MTUgNTUuMDI4MDUgLTguNDAzNjMgNTUuMDI3MzQgLTguNDAxNDQgNTUuMDI0ODcgLTguMzk5NjEgNTUuMDIyODUgLTguMzk5NjEgNTUuMDIwODkgLTguNDAwMjQgNTUuMDE4NTQgLTguNDAxMjkgNTUuMDE2MTIgLTguNDAxODcgNTUuMDEyODggLTguNDA0MjIgNTUuMDEyODggLTguNDA0MjI8L2dtbDpwb3NMaXN0Pg0KKzwvZ21sOkxpbmVhclJpbmc+DQorPGdtbDpMaW5lYXJSaW5nPg0KKzxnbWw6cG9zTGlzdD41My40ODI2MSAtNi4wMTA1IDUzLjQ4MzE1IC02LjAxMzc3IDUzLjQ4NTU5IC02LjAxNzM4IDUzLjQ4NDczIC02LjAyMzkyIDUzLjQ4NzY0IC02LjAyNDUgNTMuNDg4NTcgLTYuMDI3MDUgNTMuNDg4OTYgLTYuMDI5MjMgNTMuNDkxNCAtNi4wMzAyMyA1My40OTAwNyAtNi4wMzQxIDUzLjQ5MDcxIC02LjAzNzA4IDUzLjQ5MTkxIC02LjAzMzk2IDUzLjQ5MyAtNi4wMzE2IDUzLjQ5NDA0IC02LjAzMDc5IDUzLjQ5NDk2IC02LjAzMzE4IDUzLjQ5NTg1IC02LjAzNDE5IDUzLjQ5Njk0IC02LjAzMTUzIDUzLjQ5ODI0IC02LjAzMTAzIDUzLjQ5OTMgLTYuMDI5NDMgNTMuNDk5NjYgLTYuMDI3MTcgNTMuNDk3NiAtNi4wMjU5IDUzLjQ5NjIgLTYuMDIzNzYgNTMuNDk2MjEgLTYuMDIwNTQgNTMuNDk2NDMgLTYuMDE2ODcgNTMuNDk3OTMgLTYuMDEzMDEgNTMuNDk5NDcgLTYuMDEwODYgNTMuNTAwMDQgLTYuMDA3NTMgNTMuNDk4MjIgLTYuMDA0MjggNTMuNDk2ODcgLTYuMDAzNTQgNTMuNDk3MDcgLTUuOTk3NzMgNTMuNDk0NDMgLTUuOTk0MjUgNTMuNDkzMjYgLTUuOTk2MTMgNTMuNDkyOTcgLTUuOTk5MzQgNTMuNDkyNzMgLTYuMDAxMzEgNTMuNDkyNiAtNi4wMDUxNCA1My40OTE0NCAtNi4wMDcwMyA1My40ODg5NiAtNi4wMDk4NyA1My40ODg0NCAtNi4wMDU5OCA1My40ODYwMSAtNi4wMDc1OSA1My40ODQ0OCAtNi4wMDk0NSA1My40ODI2MSAtNi4wMTA1IDUzLjQ4MjYxIC02LjAxMDU8L2dtbDpwb3NMaXN0Pg0KKzwvZ21sOkxpbmVhclJpbmc+DQorPGdtbDpMaW5lYXJSaW5nPg0KKzxnbWw6cG9zTGlzdD41MS44MjYwNCAtOS43Mzk1MyA1MS44MjYyMiAtOS43NDIwOCA1MS44MjYwNyAtOS43NDc1NiA1MS44MjcyIC05Ljc0NjE0IDUxLjgyODMxIC05Ljc0MzY4IDUxLjgyODg3IC05Ljc0MTEyIDUxLjgyODIgLTkuNzM5MDUgNTEuODI3OCAtOS43MzcwNSA1MS44MjY0NiAtOS43Mzc2NiA1MS44MjYwNCAtOS43Mzk1MyA1MS44MjYwNCAtOS43Mzk1MzwvZ21sOnBvc0xpc3Q+DQorPC9nbWw6TGluZWFyUmluZz4NCis8Z21sOkxpbmVhclJpbmc+DQorPGdtbDpwb3NMaXN0PjUzLjEwMzM0IC05LjYzMjQxIDUzLjEwMDMxIC05LjYzMjI3IDUzLjA5ODIgLTkuNjMwOTMgNTMuMDk2MzkgLTkuNjI5MiA1My4wOTQ2IC05LjYyOTc1IDUzLjA5MjU2IC05LjYzMTE5IDUzLjA5MTMxIC05LjYzMzA4IDUzLjA4OTg1IC05LjYzNDE3IDUzLjA4OTYzIC05LjY0MSA1My4wODk1IC05LjY0Nzg3IDUzLjA5MTE5IC05LjY1MTI3IDUzLjA5NDA3IC05LjY1NzM2IDUzLjA5NTkgLTkuNjYxNCA1My4wOTczOCAtOS42NjUwNiA1My4wOTk0OSAtOS42NjY1NCA1My4xMDEwOCAtOS42Njg3IDUzLjEwMTE4IC05LjY3NDk5IDUzLjEwMjg3IC05LjY3NzAyIDUzLjEwNDE3IC05LjY3OTQyIDUzLjEwNTgzIC05LjY4MTkxIDUzLjEwNzc2IC05LjY4NDU4IDUzLjEwOTA2IC05LjY4NDM5IDUzLjExMDM4IC05LjY4NjQ5IDUzLjEwODczIC05LjY5MTM2IDUzLjEwNzcxIC05LjY5NTQ1IDUzLjEwNzIxIC05LjcwMDg1IDUzLjEwODUyIC05LjcwNDQ4IDUzLjExMTEgLTkuNzA2OTkgNTMuMTEzMzcgLTkuNzEwMDYgNTMuMTE0NTUgLTkuNzE2NTggNTMuMTE0OSAtOS43MjMwNyA1My4xMTY0IC05LjcyNzgyIDUzLjExNzk3IC05LjczNDEyIDUzLjExODcyIC05LjczNzYzIDUzLjEyMDQ3IC05Ljc0MDEzIDUzLjEyMTMyIC05Ljc0MzY2IDUzLjEyMTQyIC05Ljc0ODU4IDUzLjEyMzM1IC05Ljc1MTEyIDUzLjEyNTA1IC05Ljc1NDM4IDUzLjEyMzk5IC05Ljc2MTM3IDUzLjEyNjE0IC05Ljc2NzE2IDUzLjEyODM1IC05Ljc3MDk4IDUzLjEzMDAzIC05Ljc3NTYyIDUzLjEzMDQ4IC05Ljc4MjE0IDUzLjEzMTcgLTkuNzg4MDUgNTMuMTMyOTcgLTkuNzg5NTMgNTMuMTMzMjMgLTkuNzk0OCA1My4xMzUzNiAtOS43OTcyMiA1My4xMzUxNyAtOS44MDM0NyA1My4xMzU2NSAtOS44MDkzOSA1My4xMzcyNCAtOS44MTE3IDUzLjEzNjk3IC05LjgxNTMyIDUzLjEzODU0IC05LjgxNjU2IDUzLjEzNzAzIC05LjgyMDcxIDUzLjE0MDI2IC05LjgyMDc1IDUzLjE0MjQ3IC05LjgyMDc0IDUzLjE0NDg2IC05LjgxOTU0IDUzLjE0NjY0IC05LjgxNTQ2IDUzLjE0ODc0IC05LjgxMjA1IDUzLjE1MTE1IC05LjgwNjg3IDUzLjE1MTk4IC05LjgwMTgzIDUzLjE1MjU2IC05Ljc5NjQzIDUzLjE1MjQyIC05Ljc5MjExIDUzLjE1MjY3IC05Ljc4ODc5IDUzLjE1MjQgLTkuNzg2MTIgNTMuMTUwODggLTkuNzgzMDcgNTMuMTUyNjEgLTkuNzgwNjYgNTMuMTUyMzYgLTkuNzc0MTcgNTMuMTUwNiAtOS43NzMwNCA1My4xNDk0MiAtOS43NzI4IDUzLjE0OTEyIC05Ljc2NjkxIDUzLjE1MDI4IC05Ljc2MzYyIDUzLjE0OTIzIC05Ljc2MDIgNTMuMTQ5ODIgLTkuNzU0OCA1My4xNDgyNSAtOS43NTA5NSA1My4xNDY4MyAtOS43NDc3NSA1My4xNDMzNSAtOS43NDc1MSA1My4xNDAwMiAtOS43NDg5OCA1My4xMzg2NiAtOS43NDQ4NyA1My4xMzYyOSAtOS43NDQ0IDUzLjEzNDA3IC05Ljc0NDU2IDUzLjEzMjc0IC05Ljc0MjYxIDUzLjEzMjg1IC05LjczOTg2IDUzLjEzNTAxIC05LjczODAxIDUzLjEzNTg5IC05LjczMzU5IDUzLjEzNzQzIC05LjczMDA2IDUzLjEzODk4IC05LjcyNzkyIDUzLjEzOTU3IC05LjcyMjM3IDUzLjEzOTY0IC05LjcxNzY0IDUzLjEzODM0IC05LjcxMjYzIDUzLjEzODIxIC05LjcwNTU1IDUzLjEzOTgxIC05LjcwMzg5IDUzLjE0MjM3IC05LjcwMTc5IDUzLjE0MjcxIC05LjY5Njk3IDUzLjE0MTM0IC05LjY5MDU2IDUzLjEzOTMzIC05LjY4NzcgNTMuMTM4NzIgLTkuNjg0NjcgNTMuMTM5MjkgLTkuNjgwNjUgNTMuMTM3NjIgLTkuNjc3MSA1My4xMzU4NyAtOS42NzY5IDUzLjEzNTczIC05LjY3MTM1IDUzLjEzNDY1IC05LjY2NTkzIDUzLjEzMjkzIC05LjY1OSA1My4xMzI5MiAtOS42NTU0NyA1My4xMzMyNCAtOS42NDk3MiA1My4xMzEzMSAtOS42NDcxOCA1My4xMjk2NSAtOS42NDU5MyA1My4xMjc0NCAtOS42NDU5NSA1My4xMjU4NCAtOS42NDg4NSA1My4xMjUwNCAtOS42NTQ4MSA1My4xMjI5NyAtOS42NTU0NyA1My4xMTk5NyAtOS42NTczMyA1My4xMTk0NCAtOS42NjA5IDUzLjExOTM2IC05LjY2NDQgNTMuMTE4MDMgLTkuNjY1MDQgNTMuMTE2NTEgLTkuNjY4MjcgNTMuMTEzNTYgLTkuNjY4MTMgNTMuMTEyNDUgLTkuNjY1NzcgNTMuMTExOTYgLTkuNjU5NyA1My4xMTA0OSAtOS42NTk3MiA1My4xMDcwMSAtOS42NTQyNyA1My4xMDU2NSAtOS42NTAxOCA1My4xMDY4OSAtOS42NDk2NSA1My4xMDg2NSAtOS42NTA3NyA1My4xMTA5OCAtOS42NDkwOSA1My4xMDk5NCAtOS42NDU2OCA1My4xMDg3NiAtOS42NDQyMSA1My4xMDc3OSAtOS42NDIzNCA1My4xMDUzNyAtOS42NDI2MiA1My4xMDU1IC05LjY0NjAxIDUzLjEwMjU5IC05LjY0NDIxIDUzLjEwMTM5IC05LjY0MDQ1IDUzLjEwMTUyIC05LjYzNDY1IDUzLjEwMzM0IC05LjYzMjQxIDUzLjEwMzM0IC05LjYzMjQxPC9nbWw6cG9zTGlzdD4NCis8L2dtbDpMaW5lYXJSaW5nPg0KKzxnbWw6TGluZWFyUmluZz4NCis8Z21sOnBvc0xpc3Q+NTMuMTkyODEgLTguOTkzMDUgNTMuMTk1MDUgLTguOTkwNjggNTMuMTk2MjQgLTguOTg3OTkgNTMuMTk3MjQgLTguOTg0MDMgNTMuMTk2ODQgLTguOTc5MDYgNTMuMTk1MTUgLTguOTc2OTEgNTMuMTk1MzcgLTguOTcyNTMgNTMuMTk3NTYgLTguOTc1MjEgNTMuMTk3OCAtOC45NzE1NiA1My4xOTYzMiAtOC45NjYyNCA1My4xOTU0NyAtOC45NjI0IDUzLjE5NDc1IC04Ljk1Nzg0IDUzLjE5MzMxIC04Ljk2MTU1IDUzLjE5MjgyIC04Ljk2ODk3IDUzLjE5NDE3IC04Ljk3MjEzIDUzLjE5MzI0IC04Ljk3NjQgNTMuMTkyNzkgLTguOTgxODMgNTMuMTkzNjMgLTguOTg1ODEgNTMuMTkyNTEgLTguOTkwMjEgNTMuMTkyODEgLTguOTkzMDUgNTMuMTkyODEgLTguOTkzMDU8L2dtbDpwb3NMaXN0Pg0KKzwvZ21sOkxpbmVhclJpbmc+DQorPGdtbDpMaW5lYXJSaW5nPg0KKzxnbWw6cG9zTGlzdD41NC4yODUwOCAtOC42MDM4NSA1NC4yODU5OCAtOC42MDczMSA1NC4yODc0MyAtOC42MDkyOSA1NC4yODgyIC04LjYxMTc2IDU0LjI4OTE0IC04LjYwOTg4IDU0LjI4ODQ2IC04LjYwNzQyIDU0LjI4NzQ5IC04LjYwNTA1IDU0LjI4NjM5IC04LjYwMzQ2IDU0LjI4NTA4IC04LjYwMzg1IDU0LjI4NTA4IC04LjYwMzg1PC9nbWw6cG9zTGlzdD4NCis8L2dtbDpMaW5lYXJSaW5nPg0KKzxnbWw6TGluZWFyUmluZz4NCis8Z21sOnBvc0xpc3Q+NTMuMjY5NDIgLTYuMDg1MzUgNTMuMjcxNjggLTYuMDg2MDIgNTMuMjczMDkgLTYuMDg3NjkgNTMuMjc0MDcgLTYuMDg1NzkgNTMuMjczMTEgLTYuMDg0NDggNTMuMjczNzMgLTYuMDgyMzkgNTMuMjcyNzUgLTYuMDgxMzkgNTMuMjY5NDIgLTYuMDg1MzUgNTMuMjY5NDIgLTYuMDg1MzU8L2dtbDpwb3NMaXN0Pg0KKzwvZ21sOkxpbmVhclJpbmc+DQorPGdtbDpMaW5lYXJSaW5nPg0KKzxnbWw6cG9zTGlzdD41My4yODAzNCAtOS42ODIyMSA1My4yODI1NSAtOS42ODYzIDUzLjI4Mzg0IC05LjY5MDM3IDUzLjI4Mzg0IC05LjY5NjA1IDUzLjI4NDc3IC05LjY5NzMgNTMuMjg1MjQgLTkuNzAxMjIgNTMuMjg4NzEgLTkuNzA0NDggNTMuMjg5NDcgLTkuNzAyNzggNTMuMjg4OTggLTkuNzAwMzkgNTMuMjg3MzIgLTkuNjk5IDUzLjI4Njc1IC05LjY5MzgyIDUzLjI4NjY2IC05LjY4OTUyIDUzLjI4Njk3IC05LjY4NjM0IDUzLjI4ODk2IC05LjY4NTQ5IDUzLjI4OTczIC05LjY4MzQ4IDUzLjI5MTczIC05LjY4NCA1My4yOTEzOSAtOS42ODc3OCA1My4yOTI0IC05LjY4OTE4IDUzLjI5MzQ2IC05LjY5Mzk5IDUzLjI5MzU4IC05LjY5NzY5IDUzLjI5MjYgLTkuNzAxMzUgNTMuMjk1NjIgLTkuNzA0MzggNTMuMjk3ODQgLTkuNzA1NyA1My4zMDE2NiAtOS42OTk1IDUzLjMwNDM3IC05LjY5NjAxIDUzLjMwNTAyIC05LjY5MTgzIDUzLjMwODA3IC05LjY4NzQ4IDUzLjMwODYyIC05LjY4MzI4IDUzLjMxMDMyIC05LjY4MTMgNTMuMzEwNTIgLTkuNjc4MjYgNTMuMzEwMzEgLTkuNjc1OTIgNTMuMzA5MzIgLTkuNjc0MzUgNTMuMzA4NjggLTkuNjcxMzEgNTMuMzA5MjcgLTkuNjY1MjcgNTMuMzA1NTMgLTkuNjY0NzQgNTMuMzA3NTcgLTkuNjYxNzQgNTMuMzA1MyAtOS42NTcwMSA1My4zMDU1NyAtOS42NTQ0NSA1My4zMDEgLTkuNjUyNTQgNTMuMzAyIC05LjY0NzA0IDUzLjMwMTQ0IC05LjY0NDQ3IDUzLjMwMzczIC05LjY0MTgyIDUzLjMwNDc5IC05LjYzNTU3IDUzLjMwMzA5IC05LjYzNDggNTMuMzAzMTcgLTkuNjMwODEgNTMuMzAxODIgLTkuNjI3NjUgNTMuMzAwMzIgLTkuNjI2NjEgNTMuMjk5IC05LjYyNTYgNTMuMjk3NyAtOS42MjI5MSA1My4yOTc1MSAtOS42MjU5NCA1My4yOTUyNyAtOS42MjYzMSA1My4yOTU4IC05LjYzMDg1IDUzLjI5NTQgLTkuNjMyNzYgNTMuMjk0MjcgLTkuNjM0NTYgNTMuMjkzMjQgLTkuNjM2MjIgNTMuMjkzMzMgLTkuNjQwMzggNTMuMjkwOTEgLTkuNjQwNzEgNTMuMjg5MjUgLTkuNjQwODUgNTMuMjg4MTcgLTkuNjQxODggNTMuMjg3NDQgLTkuNjQ0NjcgNTMuMjg3MTIgLTkuNjQ5MzcgNTMuMjg3NTcgLTkuNjUyMzYgNTMuMjg5MDkgLTkuNjU0NDkgNTMuMjg3MDggLTkuNjU3MDQgNTMuMjg3NTYgLTkuNjYwODIgNTMuMjg3OTEgLTkuNjYzOTUgNTMuMjg2MjUgLTkuNjY2NzEgNTMuMjg4MjUgLTkuNjY5ODQgNTMuMjg2OTkgLTkuNjczNjEgNTMuMjg3ODEgLTkuNjc3ODkgNTMuMjg1MDkgLTkuNjgwMDEgNTMuMjgyNjkgLTkuNjc3NDIgNTMuMjgwMzQgLTkuNjgyMjEgNTMuMjgwMzQgLTkuNjgyMjE8L2dtbDpwb3NMaXN0Pg0KKzwvZ21sOkxpbmVhclJpbmc+DQorPGdtbDpMaW5lYXJSaW5nPg0KKzxnbWw6cG9zTGlzdD41Mi42MTM0OSAtOS4wNzEgNTIuNjE3MzkgLTkuMDcyMjQgNTIuNjIwMjMgLTkuMDcyMzEgNTIuNjIxOTYgLTkuMDcxMjYgNTIuNjIyODcgLTkuMDY3MzUgNTIuNjIzNzUgLTkuMDY0MDMgNTIuNjI1OTQgLTkuMDYxNDIgNTIuNjI5IC05LjA1NzE0IDUyLjYzMDcyIC05LjA1MzY3IDUyLjYzMjMgLTkuMDUwNjQgNTIuNjM0OCAtOS4wNTA0OCA1Mi42MzY5MyAtOS4wNDg5MSA1Mi42MzgxOCAtOS4wNDY4OCA1Mi42MzcwOSAtOS4wNDM5NSA1Mi42MzUxNyAtOS4wNDM3NCA1Mi42MzIyMSAtOS4wNDI2IDUyLjYzMjcxIC05LjAzNjY0IDUyLjYyODYyIC05LjAzNzEgNTIuNjI1NTggLTkuMDM3MTQgNTIuNjIyMTMgLTkuMDM5MDggNTIuNjE5NTEgLTkuMDQyMzkgNTIuNjE3MSAtOS4wNDY3OSA1Mi42MTM4NCAtOS4wNTEzMiA1Mi42MTE2NSAtOS4wNTM3OSA1Mi42MDg3MiAtOS4wNTc0OSA1Mi42MDg3NiAtOS4wNjA5OCA1Mi42MTEyMyAtOS4wNjQgNTIuNjEzNDkgLTkuMDcxIDUyLjYxMzQ5IC05LjA3MTwvZ21sOnBvc0xpc3Q+DQorPC9nbWw6TGluZWFyUmluZz4NCis8Z21sOkxpbmVhclJpbmc+DQorPGdtbDpwb3NMaXN0PjUzLjIyOTA5IC05Ljc2MDMgNTMuMjI5NDcgLTkuNzYyNjggNTMuMjMwNDIgLTkuNzYzNjIgNTMuMjMyMjUgLTkuNzYyNDMgNTMuMjMyMjkgLTkuNzYwNTkgNTMuMjMwODIgLTkuNzU4OTUgNTMuMjI5MDkgLTkuNzYwMyA1My4yMjkwOSAtOS43NjAzPC9nbWw6cG9zTGlzdD4NCis8L2dtbDpMaW5lYXJSaW5nPg0KKzxnbWw6TGluZWFyUmluZz4NCis8Z21sOnBvc0xpc3Q+NTMuOTU4NDcgLTkuOTE1ODYgNTMuOTYwNjkgLTkuOTE3MjMgNTMuOTU5NzYgLTkuOTExMzQgNTMuOTU3OTIgLTkuOTEyIDUzLjk1ODQ3IC05LjkxNTg2IDUzLjk1ODQ3IC05LjkxNTg2PC9nbWw6cG9zTGlzdD4NCis8L2dtbDpMaW5lYXJSaW5nPg0KKzxnbWw6TGluZWFyUmluZz4NCis8Z21sOnBvc0xpc3Q+NTUuMDc5NTIgLTguMzUyMTkgNTUuMDgxMDUgLTguMzUyNzUgNTUuMDgxMTYgLTguMzU3NzIgNTUuMDg0NjUgLTguMzU5MzkgNTUuMDgxMzQgLTguMzYyODcgNTUuMDgyNDggLTguMzY3MzYgNTUuMDgzMDkgLTguMzY5NyA1NS4wODQxNSAtOC4zNzA1IDU1LjA4NTQ1IC04LjM3MDI0IDU1LjA4NjE3IC04LjM2ODc2IDU1LjA4NTczIC04LjM2NjYxIDU1LjA4NTg4IC04LjM2MzkxIDU1LjA4Nzk0IC04LjM2MTM2IDU1LjA4ODU4IC04LjM2MjkyIDU1LjA4ODA5IC04LjM2NTM5IDU1LjA4ODIxIC04LjM2ODI5IDU1LjA4ODY3IC04LjM3MDEyIDU1LjA5MDU0IC04LjM2OTMgNTUuMDkxOTYgLTguMzY4NDIgNTUuMDkzMjEgLTguMzY3NDkgNTUuMDkzMDQgLTguMzY1MzkgNTUuMDk0MTMgLTguMzYzOTYgNTUuMDk0MTcgLTguMzU5NjYgNTUuMDk0ODMgLTguMzU3NjggNTUuMDkzMTggLTguMzU0MjEgNTUuMDkzMjQgLTguMzQ5NzUgNTUuMDkwODMgLTguMzQ4MjQgNTUuMDg3NzggLTguMzQ3MTEgNTUuMDg1NTUgLTguMzQ3NCA1NS4wODQ0IC04LjM0NDk3IDU1LjA4MzcxIC04LjM0MDcgNTUuMDgyMjQgLTguMzQwOTQgNTUuMDgxNDkgLTguMzQyNzUgNTUuMDgyMTcgLTguMzQ1NDEgNTUuMDc5NTIgLTguMzUyMTkgNTUuMDc5NTIgLTguMzUyMTk8L2dtbDpwb3NMaXN0Pg0KKzwvZ21sOkxpbmVhclJpbmc+DQorPGdtbDpMaW5lYXJSaW5nPg0KKzxnbWw6cG9zTGlzdD41Mi4wNDExNiAtMTAuNTkxOTEgNTIuMDQyNDcgLTEwLjU5NTAzIDUyLjA0MjIxIC0xMC41OTkzMyA1Mi4wNDI1MiAtMTAuNjAyMjMgNTIuMDQ0NjYgLTEwLjYwNTQgNTIuMDQ2MTIgLTEwLjYwNDUxIDUyLjA0NjQ2IC0xMC42MDcxMyA1Mi4wNDc2NiAtMTAuNjA4MjkgNTIuMDQ4ODIgLTEwLjYwODY5IDUyLjA1MDQ1IC0xMC42MDY5NiA1Mi4wNTExMSAtMTAuNjAzMzUgNTIuMDQ5OTkgLTEwLjYwMDExIDUyLjA0OTA5IC0xMC41OTMxOCA1Mi4wNDgyMSAtMTAuNTg5MjUgNTIuMDQ2MzcgLTEwLjU4NTg2IDUyLjA0MzY0IC0xMC41ODY0NyA1Mi4wNDI1NCAtMTAuNTg5ODIgNTIuMDQxMTYgLTEwLjU5MTkxIDUyLjA0MTE2IC0xMC41OTE5MTwvZ21sOnBvc0xpc3Q+DQorPC9nbWw6TGluZWFyUmluZz4NCis8Z21sOkxpbmVhclJpbmc+DQorPGdtbDpwb3NMaXN0PjUzLjI0MDI2IC05Ljc1NDI3IDUzLjI0MDAyIC05Ljc1NzkxIDUzLjI0MDUxIC05Ljc2MDE0IDUzLjI0MTk0IC05Ljc1OTMzIDUzLjI0MzIgLTkuNzU1NzMgNTMuMjQxOTEgLTkuNzU0MjYgNTMuMjQwMjYgLTkuNzU0MjcgNTMuMjQwMjYgLTkuNzU0Mjc8L2dtbDpwb3NMaXN0Pg0KKzwvZ21sOkxpbmVhclJpbmc+DQorPGdtbDpMaW5lYXJSaW5nPg0KKzxnbWw6cG9zTGlzdD41MS40MjA3OCAtOS41MDQ3IDUxLjQyMzA5IC05LjUwNjkyIDUxLjQyMjIxIC05LjUxMTQ3IDUxLjQyNDggLTkuNTEyNjggNTEuNDI3NDMgLTkuNTEyMDEgNTEuNDMwMzYgLTkuNTEyMjcgNTEuNDMxMiAtOS41MTM0NiA1MS40Mjg3MyAtOS41MTggNTEuNDMxMTMgLTkuNTE2NjkgNTEuNDMyNzggLTkuNTE1NjggNTEuNDM0MSAtOS41MTE1IDUxLjQzNTQxIC05LjUwOTk5IDUxLjQzNzM2IC05LjUwODU4IDUxLjQzOTA3IC05LjUwNjU1IDUxLjQ0MTA2IC05LjUwMjIgNTEuNDQyODggLTkuNDk4ODYgNTEuNDQyMzMgLTkuNDk2MjUgNTEuNDQ0NDkgLTkuNDkxOTQgNTEuNDQ2NDQgLTkuNDg1NTMgNTEuNDQ4MjUgLTkuNDc5ODMgNTEuNDUwMTYgLTkuNDc3NjggNTEuNDUyNDggLTkuNDc1MDEgNTEuNDU0MTcgLTkuNDcwNzcgNTEuNDU0MDMgLTkuNDY1MTQgNTEuNDUzNzEgLTkuNDU4MjkgNTEuNDUyNTYgLTkuNDUzOCA1MS40NDk3MyAtOS40NTIyMyA1MS40NDY0OCAtOS40NTUwMSA1MS40NDM1IC05LjQ2MDQ5IDUxLjQ0MTExIC05LjQ2NTM2IDUxLjQzNzQ5IC05LjQ2OTU0IDUxLjQzNDUxIC05LjQ3MTA0IDUxLjQzMTc3IC05LjQ3NTgzIDUxLjQyOTUzIC05LjQ4MTE2IDUxLjQyODE1IC05LjQ4NDg3IDUxLjQyNzYgLTkuNDg5NzggNTEuNDI5MzEgLTkuNDkxNTggNTEuNDMyNDUgLTkuNDkzOTQgNTEuNDM2MDIgLTkuNDkxODEgNTEuNDM3OTIgLTkuNDk0ODMgNTEuNDM0NTggLTkuNDk2NCA1MS40MzE0NiAtOS40OTYxMSA1MS40MjgyNiAtOS40OTY5OCA1MS40MjY4NCAtOS41MDExNCA1MS40MjQ4MiAtOS41MDIzOCA1MS40MjA3OCAtOS41MDQ3IDUxLjQyMDc4IC05LjUwNDc8L2dtbDpwb3NMaXN0Pg0KKzwvZ21sOkxpbmVhclJpbmc+DQorPGdtbDpMaW5lYXJSaW5nPg0KKzxnbWw6cG9zTGlzdD41MS42MTE0OSAtOS44NzI4MyA1MS42MTE5OCAtOS44NzcyMSA1MS42MTM2IC05Ljg4MDA2IDUxLjYxNTMgLTkuODc5NSA1MS42MTYyOCAtOS44NzY0MyA1MS42MTcyMiAtOS44NzUgNTEuNjE5MTIgLTkuODc1NTIgNTEuNjE5MDcgLTkuODc4NjIgNTEuNjE3OTUgLTkuODg0NzYgNTEuNjE2OTEgLTkuODg5OSA1MS42MTY3MiAtOS44OTcxMSA1MS42MTU3MSAtOS45MDE4IDUxLjYxNzg0IC05LjkwMjgxIDUxLjYxOTQ3IC05LjkwNDQ3IDUxLjYxOTMxIC05LjkxMDA3IDUxLjYyMjU0IC05LjkwODk0IDUxLjYyNjI3IC05LjkwNTk3IDUxLjYzMDIgLTkuOTAwNTQgNTEuNjMzMDQgLTkuODk5NDcgNTEuNjM1MjUgLTkuODk4MjcgNTEuNjM2NjYgLTkuODk0NCA1MS42Mzc3OSAtOS44OTMgNTEuNjQwMDUgLTkuODkyMjcgNTEuNjM5MTggLTkuODg2OSA1MS42Mzg4NSAtOS44ODI4NCA1MS42NDAxMiAtOS44ODA3MiA1MS42Mzk1NiAtOS44NzYwMiA1MS42NDA1NiAtOS44NzM4NCA1MS42NDE4IC05Ljg3MjAxIDUxLjY0MjUgLTkuODY5MDQgNTEuNjQxMjggLTkuODY1NyA1MS42NDExMiAtOS44NjE4MSA1MS42NDIwMSAtOS44NTcyNCA1MS42NDI3NyAtOS44NTIzNSA1MS42NDI2NiAtOS44NDY0MSA1MS42NDMwOCAtOS44NDEwMSA1MS42NDQxNiAtOS44MzUyOSA1MS42NDQ2OSAtOS44MzA4IDUxLjY0NTIyIC05LjgyNjMxIDUxLjY0NDAxIC05LjgyMjk2IDUxLjY0MjI2IC05LjgxOTIgNTEuNjQwOSAtOS44MTUyMyA1MS42NDAyIC05LjgxMzYyIDUxLjYzNjY5IC05LjgxNjA0IDUxLjYzNTkzIC05LjgxMTYgNTEuNjM3NzMgLTkuODA5NzIgNTEuNjM5MjIgLTkuODA4MzkgNTEuNjQxMTIgLTkuODA3NTggNTEuNjQyNjYgLTkuNzk5NDMgNTEuNjQ0MzkgLTkuNzk3NCA1MS42NDUzNyAtOS43ODgxMSA1MS42NDY1MyAtOS43ODE1MiA1MS42NDc2OSAtOS43NzcgNTEuNjQ2NjkgLTkuNzc0NTggNTEuNjQ2NDcgLTkuNzcyNjIgNTEuNjQ0MjQgLTkuNzc1MTUgNTEuNjQxOTIgLTkuNzc4OTkgNTEuNjQwMjggLTkuNzgyMzcgNTEuNjM3NzIgLTkuNzg1NzIgNTEuNjM4NTIgLTkuNzg5NzMgNTEuNjM3NjYgLTkuNzkzODYgNTEuNjM1ODkgLTkuNzkyNzcgNTEuNjM2IC05Ljc4ODc5IDUxLjYzNDE1IC05Ljc5MDIgNTEuNjMyNjMgLTkuNzkxOTggNTEuNjMyMTcgLTkuNzk0MjYgNTEuNjMzMjYgLTkuNzk1OCA1MS42MzQyOCAtOS43OTgyMyA1MS42MzIyMSAtOS44MDM0NSA1MS42Mjk5NyAtOS44MDg2MyA1MS42MjcyNSAtOS44MTA0NyA1MS42MjQ2NiAtOS44MTQxMSA1MS42MjI5MyAtOS44MiA1MS42MjA4MiAtOS44MjM0MyA1MS42MTk5OSAtOS44MjgxNSA1MS42MjA5OSAtOS44MzA4NiA1MS42MjIzNiAtOS44MzIxNyA1MS42MjM0NSAtOS44MzM1NyA1MS42MjIwOCAtOS44MzcgNTEuNjIwNCAtOS44NDMxOSA1MS42MjAzMiAtOS44NDY3MyA1MS42MTk5NSAtOS44NTI3MyA1MS42MTc5MyAtOS44NTk3NCA1MS42MTYwNyAtOS44NjQ4NSA1MS42MTM4MiAtOS44NzAxNyA1MS42MTE0OSAtOS44NzI4MyA1MS42MTE0OSAtOS44NzI4MzwvZ21sOnBvc0xpc3Q+DQorPC9nbWw6TGluZWFyUmluZz4NCis8Z21sOkxpbmVhclJpbmc+DQorPGdtbDpwb3NMaXN0PjU0LjI1Mjk2IC04LjYzODkxIDU0LjI1MTQ0IC04LjYzMzMxIDU0LjI0OTcgLTguNjMwMDQgNTQuMjQ3MDkgLTguNjI3NTUgNTQuMjQ5NyAtOC42MzMzNCA1NC4yNTAyNCAtOC42MzgxNCA1NC4yNDk5MSAtOC42NDA1OSA1NC4yNTI5NiAtOC42Mzg5MSA1NC4yNTI5NiAtOC42Mzg5MTwvZ21sOnBvc0xpc3Q+DQorPC9nbWw6TGluZWFyUmluZz4NCis8Z21sOkxpbmVhclJpbmc+DQorPGdtbDpwb3NMaXN0PjU1LjE2NjUyIC04LjE2Mzc0IDU1LjE2NjUxIC04LjE2NzU4IDU1LjE2NzY3IC04LjE2OTg1IDU1LjE2OTIgLTguMTcwNDEgNTUuMTcyNDQgLTguMTY5OTYgNTUuMTc0MjIgLTguMTY5NDIgNTUuMTc1MTUgLTguMTcyNDcgNTUuMTc1MzkgLTguMTc1MDcgNTUuMTc1NTYgLTguMTc5MDkgNTUuMTc3NTQgLTguMTc3NzkgNTUuMTc3NDUgLTguMTc0MjcgNTUuMTc5MTggLTguMTc2MTMgNTUuMTgwNDMgLTguMTc2OTggNTUuMTgyMjEgLTguMTc2MjggNTUuMTgyNTcgLTguMTcyOTggNTUuMTgwOTQgLTguMTcwNjUgNTUuMTc3OTggLTguMTcxMTQgNTUuMTc2NDkgLTguMTY4MDMgNTUuMTc2MDIgLTguMTY0NTkgNTUuMTc2MDUgLTguMTYyMDQgNTUuMTc3OCAtOC4xNjAyMyA1NS4xNzU1MyAtOC4xNTgxMSA1NS4xNzQ0NyAtOC4xNTU2OSA1NS4xNzI5MSAtOC4xNTU0NSA1NS4xNzA3NCAtOC4xNTY1NiA1NS4xNjg4NyAtOC4xNTczOSA1NS4xNjczNyAtOC4xNTk4NyA1NS4xNjY1MiAtOC4xNjM3NCA1NS4xNjY1MiAtOC4xNjM3NDwvZ21sOnBvc0xpc3Q+DQorPC9nbWw6TGluZWFyUmluZz4NCis8Z21sOkxpbmVhclJpbmc+DQorPGdtbDpwb3NMaXN0PjUzLjg1MTM1IC05LjU3NjM1IDUzLjg1MDQ5IC05LjU3OTYgNTMuODQ5MjkgLTkuNTgwOTQgNTMuODQ5MjkgLTkuNTgwOTQgNTMuODQ3NjYgLTkuNTg0NjcgNTMuODQ3MTUgLTkuNTg5NTYgNTMuODQ5MTkgLTkuNTkzNTIgNTMuODUwNTggLTkuNTkxOTIgNTMuODUxODggLTkuNTg3NjUgNTMuODU0NDUgLTkuNTg1MDQgNTMuODUyODQgLTkuNTgxNiA1My44NTMyNSAtOS41NzY4NiA1My44NTI1NSAtOS41NzUwMSA1My44NTEzNSAtOS41NzYzNSA1My44NTEzNSAtOS41NzYzNTwvZ21sOnBvc0xpc3Q+DQorPC9nbWw6TGluZWFyUmluZz4NCis8Z21sOkxpbmVhclJpbmc+DQorPGdtbDpwb3NMaXN0PjUyLjM2NzkxIC02LjM3ODAyIDUyLjM2NTcxIC02LjM3ODI0IDUyLjM2MzA1IC02LjM3Nzk5IDUyLjM2MTY5IC02LjM3Nzg1IDUyLjM1OTE3IC02LjM3ODggNTIuMzU3MTUgLTYuMzc4OSA1Mi4zNTU1NyAtNi4zNzk2NCA1Mi4zNTQ1NyAtNi4zODE5NCA1Mi4zNTU2NSAtNi4zODQ3NCA1Mi4zNTY0OCAtNi4zODk2MSA1Mi4zNTY3NCAtNi4zOTUwMiA1Mi4zNTY2IC02LjQwMTE2IDUyLjM1NjU5IC02LjQwNjM4IDUyLjM1NjQ5IC02LjQxMTQ4IDUyLjM1NTk0IC02LjQxNjM2IDUyLjM1NTYxIC02LjQyMDM3IDUyLjM1NTAzIC02LjQyMzc1IDUyLjM1ODg3IC02LjQyNjM5IDUyLjM2MDA1IC02LjQyNDEgNTIuMzYxNzUgLTYuNDIyOTMgNTIuMzYzNDQgLTYuNDIxODkgNTIuMzY1MTIgLTYuNDIxMzIgNTIuMzY2NDYgLTYuNDE5NSA1Mi4zNjczMiAtNi40MTYyOSA1Mi4zNjgxMyAtNi40MTIwMyA1Mi4zNjkwNCAtNi40MDY4OCA1Mi4zNzAxOCAtNi40MDM3IDUyLjM3MTI1IC02LjM5OTYxIDUyLjM3MjI4IC02LjM5NjI3IDUyLjM3MDkxIC02LjM5Mzc0IDUyLjM2OTk2IC02LjM5MjMgNTIuMzcwMTcgLTYuMzg4ODggNTIuMzcxMzEgLTYuMzg3OTMgNTIuMzcyMTEgLTYuMzg2MjIgNTIuMzcyMDYgLTYuMzgyNzcgNTIuMzcwMzIgLTYuMzgyNDUgNTIuMzY5MyAtNi4zODAyNiA1Mi4zNjc5MSAtNi4zNzgwMiA1Mi4zNjc5MSAtNi4zNzgwMjwvZ21sOnBvc0xpc3Q+DQorPC9nbWw6TGluZWFyUmluZz4NCis8Z21sOkxpbmVhclJpbmc+DQorPGdtbDpwb3NMaXN0PjUzLjA2NTk3IC05LjYwMDA0IDUzLjA2NjcyIC05LjYwMjMzIDUzLjA2NzExIC05LjYwNTkzIDUzLjA2OTggLTkuNjA5MzcgNTMuMDcyNTUgLTkuNjA4MzggNTMuMDc1MTIgLTkuNjA3MjEgNTMuMDc3ODEgLTkuNjA2OTggNTMuMDgwNTkgLTkuNjA2NzcgNTMuMDg0MyAtOS42MDY1OSA1My4wODYzMiAtOS42MDE0OCA1My4wOTAxNyAtOS41OTY1OSA1My4wOTMzMyAtOS41OTM3IDUzLjA5NjExIC05LjU5MzQ3IDUzLjA5NzkzIC05LjU5MDAxIDUzLjA5OTc1IC05LjU4NjU1IDUzLjEwMDc2IC05LjU4MTU0IDUzLjA5OTgxIC05LjU3Nzk5IDUzLjA5ODk1IC05LjU3NDYgNTMuMDk5NzggLTkuNTcyMDEgNTMuMTAxOTggLTkuNTY5NyA1My4xMDE1MiAtOS41NjE5NSA1My4wOTg4NiAtOS41NjE3MyA1My4wOTczMiAtOS41NjAwNSA1My4wOTYzNCAtOS41NTcxIDUzLjA5NDQ3IC05LjU1NjEyIDUzLjA5Mjc0IC05LjU1NzE1IDUzLjA5MDkgLTkuNTU3MSA1My4wODkgLTkuNTU1MzUgNTMuMDg2MTEgLTkuNTU1ODUgNTMuMDg0MzkgLTkuNTU2NTggNTMuMDgzOTMgLTkuNTYxNjggNTMuMDgyIC05LjU2NDM2IDUzLjA3OTQyIC05LjU2NjkxIDUzLjA3NjgyIC05LjU2NzE2IDUzLjA3MzA0IC05LjU2ODQgNTMuMDcxIC05LjU3MjQ0IDUzLjA3MDE3IC05LjU4MTI5IDUzLjA2OTA2IC05LjU4NzggNTMuMDY3NzIgLTkuNTkyMjkgNTMuMDY2NzMgLTkuNTk1NzcgNTMuMDY1OTcgLTkuNjAwMDQgNTMuMDY1OTcgLTkuNjAwMDQ8L2dtbDpwb3NMaXN0Pg0KKzwvZ21sOkxpbmVhclJpbmc+DQorPGdtbDpMaW5lYXJSaW5nPg0KKzxnbWw6cG9zTGlzdD41My41MjEwOSAtMTAuMjAxNjcgNTMuNTIwNjIgLTEwLjIwNTU5IDUzLjUyMDUxIC0xMC4yMDk5IDUzLjUyMDc2IC0xMC4yMTU1MSA1My41MjIxNSAtMTAuMjE3OTQgNTMuNTIzNzEgLTEwLjIxNTQ3IDUzLjUyNDI2IC0xMC4yMTE1NiA1My41MjM1MiAtMTAuMjA4OTUgNTMuNTI0MjkgLTEwLjIwNzI0IDUzLjUyNDc2IC0xMC4yMDQ1NiA1My41MjM5OCAtMTAuMjAxMTYgNTMuNTIzMzIgLTEwLjE5NzMyIDUzLjUyMjA3IC0xMC4xOTgxNiA1My41MjEwOSAtMTAuMjAxNjcgNTMuNTIxMDkgLTEwLjIwMTY3PC9nbWw6cG9zTGlzdD4NCis8L2dtbDpMaW5lYXJSaW5nPg0KKzxnbWw6TGluZWFyUmluZz4NCis8Z21sOnBvc0xpc3Q+NTMuMzQ5NDggLTkuNjYyODYgNTMuMzUwNzQgLTkuNjY2IDUzLjM0ODk4IC05LjY2ODkxIDUzLjM1MTc4IC05LjY3MjY2IDUzLjM1Mzc1IC05LjY2OTMzIDUzLjM1MzYgLTkuNjY0NjkgNTMuMzUxNTggLTkuNjYzMDkgNTMuMzUxNjUgLTkuNjYwNjQgNTMuMzQ5OTkgLTkuNjYwNjUgNTMuMzQ5NDggLTkuNjYyODYgNTMuMzQ5NDggLTkuNjYyODY8L2dtbDpwb3NMaXN0Pg0KKzwvZ21sOkxpbmVhclJpbmc+DQorPGdtbDpMaW5lYXJSaW5nPg0KKzxnbWw6cG9zTGlzdD41MS43MTAwOCAtMTAuMDEzMzYgNTEuNzEwNDIgLTEwLjAxNjI1IDUxLjcwOTQzIC0xMC4wMTgxNCA1MS43MTEzMiAtMTAuMDE4ODIgNTEuNzEzMDIgLTEwLjAxNzIyIDUxLjcxMzQ1IC0xMC4wMTQwNSA1MS43MTMyOCAtMTAuMDEwMyA1MS43MTQ1MiAtMTAuMDA4NDcgNTEuNzE1ODggLTEwLjAwNjUyIDUxLjcxNjE2IC0xMC4wMDQyIDUxLjcxNDE3IC0xMC4wMDQ4MyA1MS43MTI3NSAtMTAuMDA1MyA1MS43MTE5NiAtMTAuMDA4MjUgNTEuNzExNCAtMTAuMDEwNjYgNTEuNzEwMDggLTEwLjAxMzM2IDUxLjcxMDA4IC0xMC4wMTMzNjwvZ21sOnBvc0xpc3Q+DQorPC9nbWw6TGluZWFyUmluZz4NCis8Z21sOkxpbmVhclJpbmc+DQorPGdtbDpwb3NMaXN0PjUzLjI5Njc4IC05LjcxMTggNTMuMjk5MTggLTkuNzExNzkgNTMuMzAwNjYgLTkuNzExNjEgNTMuMzAxIC05LjcwOTM3IDUzLjI5OTAzIC05LjcwODM5IDUzLjI5NzgyIC05LjcxMDAxIDUzLjI5Njc4IC05LjcxMTggNTMuMjk2NzggLTkuNzExODwvZ21sOnBvc0xpc3Q+DQorPC9nbWw6TGluZWFyUmluZz4NCis8Z21sOkxpbmVhclJpbmc+DQorPGdtbDpwb3NMaXN0PjUzLjUyNDAxIC0xMC4xNDAyOSA1My41MjM4MSAtMTAuMTQzMTkgNTMuNTIzMzYgLTEwLjE0Njk2IDUzLjUyMjcyIC0xMC4xNDk2MiA1My41MjE4MSAtMTAuMTUzMyA1My41MjExMSAtMTAuMTU4MTEgNTMuNTIxODggLTEwLjE2MTUgNTMuNTIzNDUgLTEwLjE2NDEzIDUzLjUyNTA3IC0xMC4xNjQ2IDUzLjUyNTI3IC0xMC4xNjA0OCA1My41MjYxNSAtMTAuMTU3MjQgNTMuNTI3NDggLTEwLjE1NjU4IDUzLjUyNzU2IC0xMC4xNjA3NyA1My41MjgzNCAtMTAuMTYyNzggNTMuNTI5NTggLTEwLjE2NDcyIDUzLjUzMTM3IC0xMC4xNjY3NyA1My41MzMwOSAtMTAuMTY5OSA1My41MzQwMSAtMTAuMTY3MjkgNTMuNTM0NCAtMTAuMTYzMDQgNTMuNTM0MDYgLTEwLjE2MDA0IDUzLjUzMzgzIC0xMC4xNTc5OCA1My41MzQxMiAtMTAuMTU1MTEgNTMuNTM0ODggLTEwLjE1MzU1IDUzLjUzNjM5IC0xMC4xNTE2OSA1My41MzUyMSAtMTAuMTQ0ODEgNTMuNTM0MTEgLTEwLjE0NDc0IDUzLjUzMjY0IC0xMC4xNDQ2MSA1My41MzE0NCAtMTAuMTQyMjEgNTMuNTI5OTEgLTEwLjE0MTYxIDUzLjUyNzQgLTEwLjE0MDUgNTMuNTI1NjcgLTEwLjEzOTA3IDUzLjUyNDAxIC0xMC4xNDAyOSA1My41MjQwMSAtMTAuMTQwMjk8L2dtbDpwb3NMaXN0Pg0KKzwvZ21sOkxpbmVhclJpbmc+DQorPGdtbDpMaW5lYXJSaW5nPg0KKzxnbWw6cG9zTGlzdD41MS43MjU0IC0xMC4yNDA4OCA1MS43MjUwNyAtMTAuMjQ1MTEgNTEuNzI1MzYgLTEwLjI0ODQ0IDUxLjcyNTg4IC0xMC4yNTEwOCA1MS43MjYwNSAtMTAuMjU0ODMgNTEuNzI3NyAtMTAuMjU0ODcgNTEuNzMwMzQgLTEwLjI1MzA0IDUxLjczMjQ1IC0xMC4yNTIgNTEuNzMzNzggLTEwLjI1MTUzIDUxLjczNTE0IC0xMC4yNDczNiA1MS43MzY0NyAtMTAuMjQyMjcgNTEuNzM3MzIgLTEwLjIzODQ1IDUxLjczNjM0IC0xMC4yMzM0OSA1MS43MzU0MyAtMTAuMjI5ODcgNTEuNzMzNjcgLTEwLjIyODc4IDUxLjczMTkzIC0xMC4yMjg1NiA1MS43MzE0IC0xMC4yMzA2OCA1MS43MzA3MyAtMTAuMjMzMjEgNTEuNzI4NjkgLTEwLjIzMzM4IDUxLjcyNjQ5IC0xMC4yMzU0NiA1MS43MjU0IC0xMC4yNDA4OCA1MS43MjU0IC0xMC4yNDA4ODwvZ21sOnBvc0xpc3Q+DQorPC9nbWw6TGluZWFyUmluZz4NCis8Z21sOkxpbmVhclJpbmc+DQorPGdtbDpwb3NMaXN0PjUzLjIzODc0IC05Ljc0MjYzIDUzLjIzOTQ2IC05Ljc0NjkgNTMuMjM5NTIgLTkuNzUyODkgNTMuMjQxMTkgLTkuNzUxMzYgNTMuMjQyOTkgLTkuNzQ5MDkgNTMuMjQ0MjkgLTkuNzQzNjYgNTMuMjQyOCAtOS43NDI0NiA1My4yNDI1IC05Ljc0MDEgNTMuMjQyMzggLTkuNzM3NjMgNTMuMjQwOTIgLTkuNzM3NTEgNTMuMjQwNTYgLTkuNzQwMjEgNTMuMjM4NzQgLTkuNzQyNjMgNTMuMjM4NzQgLTkuNzQyNjM8L2dtbDpwb3NMaXN0Pg0KKzwvZ21sOkxpbmVhclJpbmc+DQorPGdtbDpMaW5lYXJSaW5nPg0KKzxnbWw6cG9zTGlzdD41NC4xOTg0NiAtMTAuMTI2NzMgNTQuMTk4MSAtMTAuMTI5MzMgNTQuMTk5NjQgLTEwLjEzMjMgNTQuMTk5OTMgLTEwLjEyOTM5IDU0LjIwMDkgLTEwLjEyNjEzIDU0LjE5OTMgLTEwLjEyNTMyIDU0LjE5ODQ2IC0xMC4xMjY3MyA1NC4xOTg0NiAtMTAuMTI2NzM8L2dtbDpwb3NMaXN0Pg0KKzwvZ21sOkxpbmVhclJpbmc+DQorPGdtbDpMaW5lYXJSaW5nPg0KKzxnbWw6cG9zTGlzdD41NC45NDA1NyAtOC40NzM4IDU0Ljk0MjU3IC04LjQ3NzMxIDU0Ljk0NDIyIC04LjQ3NTY3IDU0Ljk0NTMgLTguNDcyODIgNTQuOTQzODQgLTguNDcyNTggNTQuOTQyNDkgLTguNDcwMyA1NC45NDEyOSAtOC40NzIxNyA1NC45NDA1NyAtOC40NzM4IDU0Ljk0MDU3IC04LjQ3Mzg8L2dtbDpwb3NMaXN0Pg0KKzwvZ21sOkxpbmVhclJpbmc+DQorPGdtbDpMaW5lYXJSaW5nPg0KKzxnbWw6cG9zTGlzdD41My42MjYyOSAtOS44NzAxMyA1My42MjY1MyAtOS44NzIxOSA1My42MjcyMiAtOS44NzQxNyA1My42Mjc1NiAtOS44NzU5NSA1My42MjkyOSAtOS44NzQ4OCA1My42Mjg2NyAtOS44NzE4MiA1My42MjgwMyAtOS44Njg5MiA1My42Mjc4OSAtOS44NjU2NCA1My42MjYyOSAtOS44NzAxMyA1My42MjYyOSAtOS44NzAxMzwvZ21sOnBvc0xpc3Q+DQorPC9nbWw6TGluZWFyUmluZz4NCis8Z21sOkxpbmVhclJpbmc+DQorPGdtbDpwb3NMaXN0PjUyLjY2NjU0IC05LjA0NTU3IDUyLjY2ODg2IC05LjA0Njc2IDUyLjY3MDUzIC05LjA0NTI1IDUyLjY3MjAxIC05LjA0MjM1IDUyLjY3Mzc1IC05LjAzODQzIDUyLjY3NDQ2IC05LjAzNjEzIDUyLjY3NTkxIC05LjAzNTE4IDUyLjY3ODAzIC05LjAzOCA1Mi42NzkyNiAtOS4wMzczMSA1Mi42ODA2NyAtOS4wMzQyMyA1Mi42ODE0OCAtOS4wMzE4MiA1Mi42ODI2MSAtOS4wMjg2OSA1Mi42ODMzMyAtOS4wMjYyNCA1Mi42ODE2NCAtOS4wMjU0OCA1Mi42Nzg4OSAtOS4wMjc4NiA1Mi42NzYxMSAtOS4wMzA4MyA1Mi42NzI3MSAtOS4wMzM1NCA1Mi42NzAyIC05LjAzMzgyIDUyLjY2ODAzIC05LjAzNzIyIDUyLjY2NzUxIC05LjA0MDkxIDUyLjY2NjU0IC05LjA0NTU3IDUyLjY2NjU0IC05LjA0NTU3PC9nbWw6cG9zTGlzdD4NCis8L2dtbDpMaW5lYXJSaW5nPg0KKzxnbWw6TGluZWFyUmluZz4NCis8Z21sOnBvc0xpc3Q+NTUuMTM4ODkgLTguMTIzNTcgNTUuMTM3ODkgLTguMTE5MjYgNTUuMTM0MTQgLTguMTE3MjMgNTUuMTM0NSAtOC4xMTM3NyA1NS4xNDMyOSAtOC4xMTU5MyA1NS4xNDU4NiAtOC4xMTU4NSA1NS4xNDc1MyAtOC4xMTM3MSA1NS4xNDg5IC04LjExMDI0IDU1LjE1MDI1IC04LjEwOTAyIDU1LjE1MTczIC04LjExMDUyIDU1LjE1MzM4IC04LjExMjM4IDU1LjE1MTg4IC04LjExNDcxIDU1LjE1MzY2IC04LjExNTc5IDU1LjE1NTM5IC04LjExNDE0IDU1LjE1NzE2IC04LjExMDA4IDU1LjE1ODEzIC04LjEwMzgzIDU1LjE1ODA3IC04LjA5NzU4IDU1LjE1Nzc1IC04LjA5MzA1IDU1LjE1ODUzIC04LjA4NjkyIDU1LjE1ODcyIC04LjA4MTE5IDU1LjE1OTMxIC04LjA3ODcyIDU1LjE1NzY0IC04LjA3MzY2IDU1LjE1OTg2IC04LjA2OTY4IDU1LjE2MDM0IC04LjA2MDE1IDU1LjE2MjEyIC04LjA2MTIxIDU1LjE2MjkyIC04LjA1OTkgNTUuMTYyNzkgLTguMDU1MjMgNTUuMTY1NzkgLTguMDUyMTggNTUuMTY4NCAtOC4wNDk1MyA1NS4xNzA2NSAtOC4wNDY4NCA1NS4xNzE3MSAtOC4wNDIxOSA1NS4xNzAyOCAtOC4wMzk1NyA1NS4xNjg1MiAtOC4wMzgwMyA1NS4xNjk3MSAtOC4wMzYyOSA1NS4xNzExNiAtOC4wMzQ5MSA1NS4xNzM2MSAtOC4wMzM2OCA1NS4xNzMzNSAtOC4wMzE0IDU1LjE2ODMyIC04LjAzMTExIDU1LjE2OTExIC04LjAyNjQzIDU1LjE2OTU4IC04LjAyMDczIDU1LjE3MDg2IC04LjAxNTE2IDU1LjE3MzIyIC04LjAxMiA1NS4xNzU3OCAtOC4wMTAzMiA1NS4xNzgyNyAtOC4wMDgyOSA1NS4xODAyOCAtOC4wMDY2NyA1NS4xODI0MyAtOC4wMDU4OCA1NS4xODM3OCAtOC4wMDgxOCA1NS4xODQ0NSAtOC4wMTMyNSA1NS4xODY1NCAtOC4wMTUxNiA1NS4xODkyIC04LjAxMzQ5IDU1LjE5MTQ4IC04LjAwOTk4IDU1LjE5MzI3IC04LjAwNTYxIDU1LjE5NTA1IC04LjAwNjM3IDU1LjE5NjEyIC04LjAxMjYyIDU1LjE5ODIyIC04LjAxMjk0IDU1LjIwMDUxIC04LjAxMTA1IDU1LjIwMjU1IC04LjAxMDcyIDU1LjIwNTY0IC04LjAxMTE4IDU1LjIwNzA2IC04LjAxMDI5IDU1LjIwNjgzIC04LjAwNzU0IDU1LjIwOTQxIC04LjAwNzI4IDU1LjIxMDc1IC04LjAwODEzIDU1LjIxMjI1IC04LjAwNTYzIDU1LjIxMzAxIC04LjAwMTQyIDU1LjIxMyAtNy45OTYyOCA1NS4yMTI5NCAtNy45ODk4NiA1NS4yMTM0MiAtNy45ODc2OSA1NS4yMTU2OSAtNy45ODY0NCA1NS4yMTgzNiAtNy45ODYwNCA1NS4yMTk3OSAtNy45ODEyOSA1NS4yMjExMyAtNy45Nzg0NSA1NS4yMjMxOCAtNy45NzYwMyA1NS4yMjM5NiAtNy45NzMxMSA1NS4yMjE0OSAtNy45NzExMyA1NS4yMjA2IC03Ljk2NDkgNTUuMjE4MjYgLTcuOTY0MzggNTUuMjE0OTUgLTcuOTYyNDQgNTUuMjEwNDUgLTcuOTU1MTggNTUuMjExNiAtNy45NDUxIDU1LjIxMjU2IC03Ljk0MjM3IDU1LjIxMDM2IC03LjkzNjkxIDU1LjIxMTczIC03LjkzNTAzIDU1LjIxMTU3IC03LjkzMjc2IDU1LjIwOTMzIC03LjkzMzU0IDU1LjIwNzM4IC03LjkzMTk3IDU1LjIwNTI5IC03LjkyOTkgNTUuMjA0MyAtNy45MzMxIDU1LjIwMTc2IC03LjkzMjcyIDU1LjIwMDY0IC03LjkyOTE5IDU1LjE5ODQxIC03LjkzMTc0IDU1LjE5NjQ5IC03LjkzMzUzIDU1LjE5NDM3IC03LjkzNTYgNTUuMTkzMDcgLTcuOTM5NDIgNTUuMTkyMzkgLTcuOTQzOTYgNTUuMTkxMiAtNy45NDc2MyA1NS4xODk2NyAtNy45NDg5OSA1NS4xODgzMSAtNy45NTA0IDU1LjE4NzI1IC03Ljk1MzQ0IDU1LjE4NzAxIC03Ljk1NjI4IDU1LjE4NzUxIC03Ljk2MTE2IDU1LjE4Njc0IC03Ljk2MzYxIDU1LjE4OTU0IC03Ljk2NjQzIDU1LjE4NzczIC03Ljk2OTUzIDU1LjE4NTY4IC03Ljk3MjA5IDU1LjE4Mzg3IC03Ljk3NTIgNTUuMTgyMTMgLTcuOTc4OTIgNTUuMTgxOTYgLTcuOTg0MDMgNTUuMTgwOTEgLTcuOTg4NTIgNTUuMTc5MDcgLTcuOTkwNDcgNTUuMTc2OTQgLTcuOTkwOCA1NS4xNzQ1IC03Ljk5MjE3IDU1LjE3MjYxIC03Ljk5NTA5IDU1LjE3MDM1IC03Ljk5OTg3IDU1LjE2ODg3IC03Ljk5NDUyIDU1LjE2ODE1IC03Ljk4ODgyIDU1LjE2ODQxIC03Ljk4MzcyIDU1LjE2ODg3IC03Ljk3ODIgNTUuMTcwNTIgLTcuOTc5ODggNTUuMTcyNzkgLTcuOTgwMjIgNTUuMTc0NDUgLTcuOTgwMTYgNTUuMTc1OTcgLTcuOTgyNzkgNTUuMTc3NTUgLTcuOTg0MzEgNTUuMTc5MjUgLTcuOTgzMyA1NS4xNzkzMSAtNy45ODAyNyA1NS4xNzk0OSAtNy45NzY2MSA1NS4xODAzNyAtNy45NzM1NCA1NS4xODE5OCAtNy45Njg5NyA1NS4xODI1NiAtNy45NjQ3NCA1NS4xODE4MiAtNy45NjEyNiA1NS4xODA4NCAtNy45NTY3OCA1NS4xODE5OCAtNy45NTQyNCA1NS4xODI5MyAtNy45NTE2NyA1NS4xODQyIC03Ljk1MDA5IDU1LjE4NTU2IC03Ljk0ODU0IDU1LjE4NTA4IC03Ljk0NTQxIDU1LjE4MzU3IC03Ljk0MjYyIDU1LjE4MjAxIC03Ljk0MDYzIDU1LjE4MDIyIC03LjkzNzk2IDU1LjE3ODcgLTcuOTM1MzIgNTUuMTc4NTMgLTcuOTMxNDYgNTUuMTc5MjIgLTcuOTI4NTIgNTUuMTc2MzUgLTcuOTI3MjkgNTUuMTc2MzQgLTcuOTIzNzYgNTUuMTc3NDEgLTcuOTIwNzIgNTUuMTc4OTEgLTcuOTE4MjIgNTUuMTgwMzcgLTcuOTE2MzYgNTUuMTgxNjcgLTcuOTE0MzEgNTUuMTgxMjggLTcuOTA5MTMgNTUuMTgyNDQgLTcuOTA1OTUgNTUuMTg0NTYgLTcuOTA5NDcgNTUuMTg1OTQgLTcuOTA1ODMgNTUuMTg4MDQgLTcuOTA0MDYgNTUuMTg1NTYgLTcuOTAwNDkgNTUuMTg3NjkgLTcuODk4MDggNTUuMTg2NTcgLTcuODk0NyA1NS4xODUxNiAtNy44OTU2MiA1NS4xODM4NyAtNy44OTM5OCA1NS4xODUwNyAtNy44OTE3NiA1NS4xODQ4OCAtNy44ODgwNSA1NS4xODMzNCAtNy44ODk1OCA1NS4xODE0NSAtNy44ODkxMyA1NS4xNzk2IC03Ljg4OTE4IDU1LjE3ODUzIC03Ljg5MDQ2IDU1LjE3NzI1IC03Ljg5MjM1IDU1LjE3NDI3IC03Ljg5MTQzIDU1LjE3MTEgLTcuODkwNDcgNTUuMTY5NDIgLTcuODg1NTggNTUuMTcwNTggLTcuODgwNjIgNTUuMTcyMTQgLTcuODc2ODYgNTUuMTcyNyAtNy44NzI5MyA1NS4xNzA3NSAtNy44Njk3NiA1NS4xNjk1OCAtNy44NzI5NSA1NS4xNjc2NiAtNy44NzI4MiA1NS4xNjYxOCAtNy44Nzg2OSA1NS4xNjQ5MyAtNy44ODE3IDU1LjE2MzI5IC03Ljg4MzUzIDU1LjE2MTAzIC03Ljg4ODMxIDU1LjE1OTI3IC03Ljg5NDMgNTUuMTU3MjYgLTcuODk5NzUgNTUuMTU1OTUgLTcuOTAxOTYgNTUuMTUyNjkgLTcuOTA0OTkgNTUuMTUzMTUgLTcuODk5MzEgNTUuMTU0MDkgLTcuODkzMzYgNTUuMTU2MTIgLTcuODg5MzQgNTUuMTU3ODEgLTcuODg0OTYgNTUuMTU3NTEgLTcuODc5OCA1NS4xNTk5MiAtNy44NzcyNyA1NS4xNjE5NiAtNy44NzUwMSA1NS4xNjI3NyAtNy44NzE0NSA1NS4xNjUzOSAtNy44NjY3MSA1NS4xNjQwNCAtNy44NjI1MSA1NS4xNjQ2MyAtNy44NTc5NyA1NS4xNjYwNyAtNy44NTA5NyA1NS4xNjMxNCAtNy44NTA4NyA1NS4xNjIzMiAtNy44NDg5NyA1NS4xNjI4IC03Ljg0NDg5IDU1LjE2MDEyIC03Ljg0NzA1IDU1LjE1NzQ5IC03Ljg1MDAyIDU1LjE1NTU0IC03Ljg1MjYxIDU1LjE1MzcxIC03Ljg1NjE4IDU1LjE1MTcgLTcuODU2MDQgNTUuMTQ5ODUgLTcuODU2NCA1NS4xNDcxMyAtNy44NTc1OSA1NS4xNDcwNSAtNy44NjEyNyA1NS4xNDYxMiAtNy44NjUxMyA1NS4xNDQ0MiAtNy44NjgwNyA1NS4xNDQ4NyAtNy44Njk5IDU1LjE0NzA0IC03Ljg3MDcxIDU1LjE0NDg1IC03Ljg3NzkgNTUuMTQzODUgLTcuODgzMzQgNTUuMTQyOTIgLTcuODg3MzYgNTUuMTQwMjkgLTcuODg4NTcgNTUuMTM3NDIgLTcuODkxMDIgNTUuMTM0NTcgLTcuODkyOTkgNTUuMTMyNjQgLTcuODk0OTUgNTUuMTMxMDcgLTcuODk2OTUgNTUuMTMwODcgLTcuODkxOCA1NS4xMzE5MiAtNy44ODczMSA1NS4xMzM3NyAtNy44ODUwNCA1NS4xMzU4NSAtNy44ODE4MyA1NS4xMzczMyAtNy44Nzc4OSA1NS4xMzM4OCAtNy44NzkxNCA1NS4xMzU1NSAtNy44NzEzOSA1NS4xMzUyNiAtNy44Njc4MiA1NS4xMzg0NSAtNy44NjgxNCA1NS4xNDA3MyAtNy44Njg2MyA1NS4xNDIxNCAtNy44Njc3NCA1NS4xNDA3IC03Ljg2NTI4IDU1LjEzODA5IC03Ljg2NDI1IDU1LjEzNjI4IC03Ljg2MTkgNTUuMTM1MjUgLTcuODU4NTQgNTUuMTMzNDMgLTcuODU2NTEgNTUuMTMxMzkgLTcuODU3MDEgNTUuMTI4NDggLTcuODU4MzQgNTUuMTI4MzcgLTcuODUzMiA1NS4xMjcxMyAtNy44NTQxNCA1NS4xMjUwNiAtNy44NTg3OSA1NS4xMjM0OSAtNy44NTkxOSA1NS4xMjQ4MyAtNy44NTQxMiA1NS4xMjU1NCAtNy44NDkxIDU1LjEyNDI3IC03Ljg0MzE2IDU1LjEyNjggLTcuODQ0MDEgNTUuMTI5OCAtNy44NDQyMiA1NS4xMjk1OCAtNy44NDY5OSA1NS4xMjk4NiAtNy44NDg5NCA1NS4xMzEzMiAtNy44NDkxNiA1NS4xMzI3MSAtNy44NDg4OSA1NS4xMzQ2NSAtNy44NTAzIDU1LjEzNjQyIC03Ljg0OTc2IDU1LjEzOTMgLTcuODQ5MDcgNTUuMTQxMjIgLTcuODQ1MzUgNTUuMTQzMjcgLTcuODM4OTQgNTUuMTQ3NDEgLTcuODMxMzkgNTUuMTUwNTIgLTcuODM1MjIgNTUuMTUzMjYgLTcuODM5MTUgNTUuMTUzMjYgLTcuODM5MTUgNTUuMTU3MjEgLTcuODMxNTYgNTUuMTYwODkgLTcuODIzNjQgNTUuMTY2MDggLTcuODE3MDQgNTUuMTc0IC03LjgxNjQ1IDU1LjE3OTE4IC03LjgxNzM3IDU1LjE4MDQxIC03LjgyMjA0IDU1LjE4NDA0IC03LjgyMjkgNTUuMTg2MzMgLTcuODIyOTIgNTUuMTg4NjkgLTcuODIzNDMgNTUuMTkwNjkgLTcuODI1NDkgNTUuMTkyMTQgLTcuODI3NzkgNTUuMTkxOTggLTcuODMxMjggNTUuMTkxMTMgLTcuODMzNTYgNTUuMTg5NTMgLTcuODM0NDUgNTUuMTg3MTYgLTcuODM2MDEgNTUuMTg3NyAtNy44MzgwMSA1NS4xODcyNSAtNy44NDE3OSA1NS4xOTEzNyAtNy44NDM4NCA1NS4xOTExNCAtNy44NDgzIDU1LjE5MTU5IC03Ljg1MjM3IDU1LjE5NDU5IC03Ljg1NDc0IDU1LjE5Njk0IC03Ljg1OTA5IDU1LjE5OTk2IC03Ljg2NDk5IDU1LjIwMTc3IC03Ljg2MzUxIDU1LjIwMzcxIC03Ljg2NTA3IDU1LjIwNjAzIC03Ljg2NDYyIDU1LjIwNzE3IC03Ljg2MjA3IDU1LjIwOTA4IC03Ljg2MjE5IDU1LjIxMTA5IC03Ljg2MjQ4IDU1LjIxMzA4IC03Ljg2MTE5IDU1LjIxMjk4IC03Ljg1NzQ5IDU1LjIxNTIzIC03Ljg1ODMgNTUuMjE3MDkgLTcuODU5NjkgNTUuMjE4MDEgLTcuODYxNDUgNTUuMjIxNDEgLTcuODU5NTMgNTUuMjIzODYgLTcuODU4MTUgNTUuMjI2MjMgLTcuODU2NDEgNTUuMjI0OTEgLTcuODUxNTcgNTUuMjI0MDMgLTcuODQ5MDMgNTUuMjIzOTUgLTcuODQ1MDEgNTUuMjI0MTIgLTcuODM5NzUgNTUuMjI1OTggLTcuODM5MDcgNTUuMjI3NSAtNy44MzgwMiA1NS4yMjgxMSAtNy44MzQ5IDU1LjIyODMgLTcuODMxMDggNTUuMjI3NzEgLTcuODI4MjYgNTUuMjI1OTkgLTcuODI1NzYgNTUuMjI0NDUgLTcuODIzNDUgNTUuMjIzMzMgLTcuODIwMDggNTUuMjIyMzUgLTcuODE3NjkgNTUuMjIzNjEgLTcuODE0MzUgNTUuMjIyOTIgLTcuODA5NiA1NS4yMjQ3NiAtNy44MDU4NyA1NS4yMjY5OSAtNy44MDUwNiA1NS4yMjkzNCAtNy44MDk3NSA1NS4yMjk5MiAtNy44MTI4NyA1NS4yMzI2OCAtNy44MTI2NCA1NS4yMzM0MyAtNy44MTQyIDU1LjIzNDczIC03LjgxMzc1IDU1LjIzNTQ1IC03LjgxMjA5IDU1LjIzNDc1IC03LjgwNzgxIDU1LjIzMzg3IC03LjgwMzIgNTUuMjM0MTQgLTcuNzk5MzkgNTUuMjM1NzUgLTcuNzk4NSA1NS4yMzgyOSAtNy43OTkwNSA1NS4yMzk1NyAtNy43OTkwNyA1NS4yNDAxMSAtNy43OTczOCA1NS4yNDI2MiAtNy44MDAzMyA1NS4yNDM0OSAtNy43OTc1NyA1NS4yNDQ2NyAtNy43OTc5MSA1NS4yNDU5NyAtNy43OTkzOCA1NS4yNDcwMSAtNy43OTY5NyA1NS4yNDUyOSAtNy43OTI1NCA1NS4yNDY1NyAtNy43ODcxMiA1NS4yNDMxNiAtNy43ODM1NyA1NS4yNDQ4MyAtNy43ODE0IDU1LjI0NzI0IC03Ljc4MDY0IDU1LjI0OTI3IC03Ljc4MjM5IDU1LjI1MTA5IC03Ljc4MjgxIDU1LjI1MzE4IC03Ljc4MTIgNTUuMjUzMTkgLTcuNzc4OTUgNTUuMjUwODggLTcuNzc5NDIgNTUuMjQ5NjkgLTcuNzc1NyA1NS4yNDg0NiAtNy43NzQ0MSA1NS4yNDU3MSAtNy43NzY0MSA1NS4yNDMyMSAtNy43Nzg3NyA1NS4yNDA3MSAtNy43ODExMiA1NS4yMzc3MiAtNy43ODIyOCA1NS4yMzUwNyAtNy43ODAyOSA1NS4yMzE3OCAtNy43Nzk5NyA1NS4yMjk0NCAtNy43ODEyMyA1NS4yMjc4MyAtNy43ODQwNCA1NS4yMjUxOCAtNy43ODU3MyA1NS4yMjMzOSAtNy43ODQ4MiA1NS4yMjE2MyAtNy43ODMyNyA1NS4yMjA0OCAtNy43ODQzOSA1NS4yMjE0NCAtNy43ODcwOSA1NS4yMTgzNCAtNy43OTA2NCA1NS4yMTQ2MiAtNy43OTc0NiA1NS4yMTEyOCAtNy43OTgyNSA1NS4yMTIxNiAtNy44MDA5NSA1NS4yMTEyNiAtNy44MDI0MiA1NS4yMDY5MiAtNy44MDA5OCA1NS4yMDMwNCAtNy43OTk3NiA1NS4yMDA2NSAtNy44MDE4MSA1NS4xOTk1NSAtNy44MDM5IDU1LjE5ODI3IC03LjgwNzM4IDU1LjE5NTAyIC03LjgwODIgNTUuMTkzMSAtNy44MDQ1NCA1NS4xODk1MyAtNy44MDA0OCA1NS4xODU3OSAtNy43OTY0MiA1NS4xODM1NCAtNy43OTU0NCA1NS4xODE4MSAtNy43OTcxMSA1NS4xNzkzNyAtNy43OTgzNSA1NS4xNzY3MiAtNy43OTgxMiA1NS4xNzQxMyAtNy43OTg1NCA1NS4xNzQ1NCAtNy43OTU3MSA1NS4xNzQwNiAtNy43OTI0NCA1NS4xNzUgLTcuNzg4MjYgNTUuMTc3MTggLTcuNzg2NjYgNTUuMTc5NzMgLTcuNzg3MDMgNTUuMTgxNTEgLTcuNzg2MTggNTUuMTc5OTYgLTcuNzgyMjYgNTUuMTc2NzMgLTcuNzgwODMgNTUuMTc3NzcgLTcuNzc4MTEgNTUuMTgwMTggLTcuNzc3NjUgNTUuMTgxMzQgLTcuNzc2MzggNTUuMTgxNzkgLTcuNzcyNzYgNTUuMTgwOSAtNy43NjgzMSA1NS4xNzk5MSAtNy43NjQxNiA1NS4xODA4MiAtNy43NjA3NyA1NS4xODIxNCAtNy43NTk2OCA1NS4xODM4NyAtNy43NTk5NCA1NS4xODUxNSAtNy43NTgzNyA1NS4xODQzIC03Ljc1NDg4IDU1LjE4MjUxIC03Ljc1MjIxIDU1LjE4MjIyIC03Ljc0NjczIDU1LjE3OTE4IC03Ljc0NTE2IDU1LjE3NTg4IC03Ljc0NTE2IDU1LjE3MzcyIC03Ljc0MjQ0IDU1LjE3MzUxIC03LjczOTIyIDU1LjE3MTgyIC03LjczNjA4IDU1LjE3NDg4IC03LjczNzM0IDU1LjE3NjY3IC03LjczNjQ3IDU1LjE3ODA2IC03LjczNDI3IDU1LjE3NDkyIC03LjczMDc3IDU1LjE3MDk1IC03LjcyNzQ4IDU1LjE2NzEyIC03LjcyNTE1IDU1LjE2NDc5IC03LjcyMjI2IDU1LjE2MjE2IC03LjcxNzU0IDU1LjE1OTY3IC03LjcxNDE1IDU1LjE1NzE2IC03LjcxMTIxIDU1LjE1ODgzIC03LjcwODkgNTUuMTYxMTcgLTcuNzA5NzMgNTUuMTYyNjcgLTcuNzEyODIgNTUuMTY0MzggLTcuNzE3MjMgNTUuMTY2MDQgLTcuNzIwODMgNTUuMTY4MTYgLTcuNzIwODEgNTUuMTcwMjYgLTcuNzIwOTcgNTUuMTcxNzYgLTcuNzIwMDcgNTUuMTY3NTEgLTcuNzEzMjEgNTUuMTY1MTYgLTcuNzA4NjkgNTUuMTYyMzggLTcuNzAzMzQgNTUuMTU5MjIgLTcuNzAwNjMgNTUuMTU2MTUgLTcuNjk5NyA1NS4xNTQ2NyAtNy42OTU5OCA1NS4xNTI1MSAtNy42OTExOCA1NS4xNDk3NiAtNy42ODc0MyA1NS4xNDQ5MyAtNy42ODY4OCA1NS4xNDI4MiAtNy42ODY4OSA1NS4xMzk5NCAtNy42ODc3NSA1NS4xNDA3MSAtNy42ODQ5OSA1NS4xNDAyNiAtNy42ODEwOSA1NS4xMzcwMiAtNy42ODM1IDU1LjEzMjY2IC03LjY4NjM5IDU1LjEyODcgLTcuNjkwNzggNTUuMTI1MTkgLTcuNjkxMjIgNTUuMTIyODQgLTcuNjk0NCA1NS4xMTg5MyAtNy42OTM2OCA1NS4xMTc2MiAtNy42OTYyIDU1LjExMjk0IC03LjY5ODA4IDU1LjEwODk0IC03LjY5OTI1IDU1LjEwNjA3IC03LjY5ODA0IDU1LjEwMzE1IC03LjcwMTYxIDU1LjEwMDExIC03LjcwNTY1IDU1LjA5NTgyIC03LjcwNzEgNTUuMDk3MTcgLTcuNzAyMDIgNTUuMTAwMTggLTcuNjk4NjMgNTUuMTA0NDkgLTcuNjk2NTMgNTUuMTA0MTggLTcuNjkzNDYgNTUuMTAwNzIgLTcuNjkyNzggNTUuMTAyNTYgLTcuNjg4OSA1NS4xMDEyOSAtNy42ODY4IDU1LjA5NjY5IC03LjY5MDk0IDU1LjEwMDg3IC03LjY4NDAyIDU1LjEwMzgyIC03LjY3OTk3IDU1LjEwNjcyIC03LjY4MjYzIDU1LjEwOTI5IC03LjY4NDI4IDU1LjExMjM5IC03LjY4MjY2IDU1LjExNDI3IC03LjY4MTk3IDU1LjExNjI5IC03LjY4MTYyIDU1LjExODAxIC03LjY4MDI3IDU1LjExODQ2IC03LjY3ODU3IDU1LjEyMDgyIC03LjY3NzMxIDU1LjEyMjgxIC03LjY3NTY5IDU1LjEyMjI4IC03LjY3MzU0IDU1LjEyNjc1IC03LjY3NDAyIDU1LjEyNzYgLTcuNjcxNDIgNTUuMTI5MTkgLTcuNjc2NjEgNTUuMTMwMjkgLTcuNjc2NjEgNTUuMTMxNjEgLTcuNjczOTIgNTUuMTMzNDQgLTcuNjcwMDMgNTUuMTM1MzQgLTcuNjY2OTQgNTUuMTM3NjcgLTcuNjY2IDU1LjEzOTQ0IC03LjY2MzM4IDU1LjE0MTc5IC03LjY2MjI4IDU1LjE0Mzc4IC03LjY2Mjg4IDU1LjE0Njc0IC03LjY2MjIgNTUuMTUwMyAtNy42NjA2MiA1NS4xNTM0MSAtNy42NTg4MyA1NS4xNTY1OCAtNy42NTc4NSA1NS4xNTcyOSAtNy42NjAzNSA1NS4xNTgwNSAtNy42NjM0OSA1NS4xNTg5MyAtNy42NjgyNyA1NS4xNjA0OCAtNy42NzIxNyA1NS4xNjI2NyAtNy42NzQ0MiA1NS4xNjUxNCAtNy42NzYzNiA1NS4xNjgzOSAtNy42NzU1NiA1NS4xNzEzMiAtNy42NzM3NCA1NS4xNzM2OSAtNy42NzM5MyA1NS4xNzU2OSAtNy42NzQzNyA1NS4xNzgwNSAtNy42NzY3OSA1NS4xNzc0NyAtNy42Nzk0MyA1NS4xNzg5NyAtNy42ODA2MiA1NS4xNzc1MSAtNy42ODIzMSA1NS4xNzU2OSAtNy42ODM4MiA1NS4xNzQ2IC03LjY4OTU4IDU1LjE3NjgzIC03LjY5MDcgNTUuMTc2MjEgLTcuNjk0MTMgNTUuMTc4MTMgLTcuNjk0MjUgNTUuMTgwMTIgLTcuNjkxMDMgNTUuMTgxNyAtNy42ODg1MyA1NS4xODQ2IC03LjY4OTQzIDU1LjE4Mzk1IC03LjY4NTY2IDU1LjE4NTk5IC03LjY4NSA1NS4xODc1NyAtNy42ODY2NyA1NS4xODkzOSAtNy42ODY5MiA1NS4xODc5MyAtNy42ODg5NSA1NS4xODYyNCAtNy42OTE3NSA1NS4xODU3MyAtNy42OTQ0MSA1NS4xODU2IC03LjY5OTE4IDU1LjE4NjExIC03LjcwMzkgNTUuMTg4NTYgLTcuNzA2MzQgNTUuMTkxNDUgLTcuNzA3MjQgNTUuMTkzNzQgLTcuNzA5MzMgNTUuMTk1NDcgLTcuNzA3NSA1NS4xOTgxOSAtNy43MDYxMyA1NS4xOTg5NCAtNy43MDQwMSA1NS4xOTg4MyAtNy43MDA2MyA1NS4xOTc5NiAtNy42OTc2MiA1NS4xOTU3MyAtNy42OTY0OSA1NS4xOTQ1MSAtNy42OTUwMyA1NS4xOTQyNCAtNy42OTA5OSA1NS4xOTY1NSAtNy42OTA1MiA1NS4xOTgzNyAtNy42OTI4NiA1NS4yMDAzOCAtNy42OTEwOSA1NS4yMDI5IC03LjY5MjA4IDU1LjIwNDg2IC03LjY5MzE4IDU1LjIwODE5IC03LjY5NDc4IDU1LjIwOTg0IC03LjY5NjQ2IDU1LjIxMDk0IC03LjcwMDMgNTUuMjEzMzcgLTcuNzAzMjIgNTUuMjEyMjcgLTcuNjk3NDUgNTUuMjE0ODYgLTcuNjk2ODYgNTUuMjE2NzkgLTcuNjk2OTkgNTUuMjE5ODUgLTcuNjk2MTUgNTUuMjIyNDcgLTcuNjk0NzcgNTUuMjIyMzEgLTcuNjk4MjggNTUuMjIzNzkgLTcuNzAxODUgNTUuMjI2MjcgLTcuNzAzODIgNTUuMjI0OSAtNy43MDU1NCA1NS4yMjI4OCAtNy43MDU3MiA1NS4yMjA5IC03LjcwNjczIDU1LjIyMTc5IC03LjcxMTE4IDU1LjIyMTMzIC03LjcxMzE5IDU1LjIxOTkzIC03LjcxNTcyIDU1LjIxNzQ2IC03LjcxNzQzIDU1LjIxNzAxIC03LjcxMzM3IDU1LjIxNDkzIC03LjcxNDgyIDU1LjIxMjk3IC03LjcxMzU4IDU1LjIxMTAxIC03LjcxNDI1IDU1LjIwODI5IC03LjcxNTYyIDU1LjIwNjU5IC03LjcxMjY1IDU1LjIwNDE2IC03LjcxMTY2IDU1LjIwMjUxIC03LjcxMTczIDU1LjIwMzU3IC03LjcwNjkyIDU1LjIwMjA4IC03LjcwNzM1IDU1LjIgLTcuNzA4ODEgNTUuMTk4NCAtNy43MDkzOCA1NS4xOTY2MSAtNy43MTA1NiA1NS4xOTc0NyAtNy43MTM3MyA1NS4xOTQwNiAtNy43MTQwMiA1NS4xOTMxMyAtNy43MTIyOSA1NS4xOTEwNSAtNy43MTM3NSA1NS4xODg2MyAtNy43MTA1MSA1NS4xODYxNiAtNy43MTA0NyA1NS4xODQ0NyAtNy43MTEzNSA1NS4xODMxMiAtNy43MDg5MSA1NS4xODQ3MSAtNy43MDYyNyA1NS4xODM0NyAtNy43MDM1MSA1NS4xODA3OSAtNy43MDAwOCA1NS4xNzc3NiAtNy42OTgyIDU1LjE3NjEyIC03LjcwMTk3IDU1LjE3NTIyIC03LjcwMzQ0IDU1LjE3MjcyIC03LjcwNTc5IDU1LjE3MDYzIC03LjcwMzU3IDU1LjE2ODYgLTcuNzAyIDU1LjE2NzAxIC03LjcwMjU3IDU1LjE2NzI1IC03LjcwNTMyIDU1LjE2OTk5IC03LjcwNzMyIDU1LjE3MTAxIC03LjcxMDg0IDU1LjE3MzA5IC03LjcxMTQ1IDU1LjE3NTQzIC03LjcxNjI4IDU1LjE3Nzk2IC03LjcyMjc0IDU1LjE4MDI1IC03LjcyODUgNTUuMTgzNDUgLTcuNzM2MzMgNTUuMTg2NjIgLTcuNzQwOTcgNTUuMTkwMSAtNy43NDEgNTUuMTg5NzYgLTcuNzM4NzEgNTUuMTg4NiAtNy43MzYyOSA1NS4xODc2NCAtNy43MzM0MyA1NS4xODkyMiAtNy43MzA3OCA1NS4xOTA3MiAtNy43Mjg0MyA1NS4xOTI3NCAtNy43MjgyNSA1NS4xOTM4OCAtNy43MzA5OCA1NS4xOTUzOCAtNy43MzQ0IDU1LjE5NTQzIC03LjczOTIyIDU1LjE5NDk3IC03Ljc0Mjk5IDU1LjE5MzA3IC03Ljc0NDMxIDU1LjE5MTA5IC03Ljc0MzU0IDU1LjE5MDM2IC03Ljc0NzEyIDU1LjE5MDY1IC03Ljc1MDY4IDU1LjE4OTg0IC03Ljc1MjMzIDU1LjE4ODUxIC03Ljc1NTE4IDU1LjE4ODAzIC03Ljc1NzUxIDU1LjE4ODY5IC03Ljc2MDk3IDU1LjE5MDIxIC03Ljc2MzU5IDU1LjE5Mjc5IC03Ljc2NTQxIDU1LjE5NDY2IC03Ljc2ODI1IDU1LjE5NTU2IC03Ljc3MDYzIDU1LjE5Nzk3IC03Ljc3MTk0IDU1LjIwMDcxIC03Ljc3MjAzIDU1LjIwMjQ0IC03Ljc3NjEzIDU1LjIwMDc5IC03Ljc4MDA1IDU1LjIwMDcgLTcuNzgzNzIgNTUuMjAzMTIgLTcuNzg2OCA1NS4yMDU5IC03Ljc4ODE4IDU1LjIwODc5IC03Ljc4OTA3IDU1LjIxMTMyIC03Ljc4OTkzIDU1LjIxMzc2IC03Ljc5MDYxIDU1LjIxNjcyIC03Ljc4ODE3IDU1LjIxODE2IC03Ljc4NTAxIDU1LjIxOTY1IC03Ljc4MDc0IDU1LjIyMTE3IC03Ljc3NzYgNTUuMjIwODQgLTcuNzc0ODMgNTUuMjIwMTMgLTcuNzcyNDggNTUuMjIxNTQgLTcuNzcxODggNTUuMjIzMDEgLTcuNzY5ODUgNTUuMjI0MDIgLTcuNzY3OTIgNTUuMjI2NDUgLTcuNzYxMjIgNTUuMjI4NDMgLTcuNzU4MzIgNTUuMjMwNzcgLTcuNzU3MDYgNTUuMjMxNzYgLTcuNzUxNzQgNTUuMjM1MjkgLTcuNzUyOTEgNTUuMjM0NDMgLTcuNzQ5ODkgNTUuMjMzMzggLTcuNzQ2ODYgNTUuMjM1NjYgLTcuNzQ3MDMgNTUuMjM3MjcgLTcuNzQ3OTEgNTUuMjM4NDYgLTcuNzQ5ODQgNTUuMjM5OTQgLTcuNzUxNTEgNTUuMjQxODYgLTcuNzUxNDcgNTUuMjQxODYgLTcuNzUxNDcgNTUuMjQyMzIgLTcuNzQ3NjggNTUuMjQ0OTIgLTcuNzQ3MSA1NS4yNDQ5NSAtNy43NDQ1NCA1NS4yNDYwMyAtNy43NDMxIDU1LjI0Nzg5IC03Ljc0NDM0IDU1LjI0ODcgLTcuNzQ2NjkgNTUuMjQ5NTIgLTcuNzQ4NTggNTUuMjUxMjEgLTcuNzQ5NzggNTUuMjUyOTMgLTcuNzUyMTIgNTUuMjU0ODEgLTcuNzUxMTIgNTUuMjU0OTUgLTcuNzQ4MjYgNTUuMjUzMzMgLTcuNzQ3NTQgNTUuMjUxMTcgLTcuNzQ2OSA1NS4yNTAxNyAtNy43NDQ4MiA1NS4yNDg3IC03Ljc0MDkzIDU1LjI1MDI4IC03LjczODQzIDU1LjI0OTMzIC03LjczNTQxIDU1LjI0NjUgLTcuNzM0OTggNTUuMjQ2MTQgLTcuNzMzMDEgNTUuMjQ4MjggLTcuNzMwNTkgNTUuMjQ4NTggLTcuNzI3OTIgNTUuMjQ5NzYgLTcuNzI2MTcgNTUuMjUxNDUgLTcuNzI1NzcgNTUuMjUwNzkgLTcuNzIyMTQgNTUuMjQ5MzUgLTcuNzIzNTQgNTUuMjQ3OTEgLTcuNzIyODUgNTUuMjQ2NSAtNy43MjE4NCA1NS4yNDQ5NSAtNy43MjE2MSA1NS4yNDQzNSAtNy43MTg4IDU1LjI0Mzc1IC03LjcxNDIxIDU1LjI0NDI2IC03LjcwOSA1NS4yNDU0IC03LjcwNDM2IDU1LjI0NDcyIC03LjcwMTM3IDU1LjI0NTc0IC03LjY5NTI2IDU1LjI0NzkgLTcuNjkwMjkgNTUuMjQ5NjEgLTcuNjg3MzMgNTUuMjUyMDIgLTcuNjg2NTYgNTUuMjUzOSAtNy42ODc2MyA1NS4yNTYyOCAtNy42ODc2NSA1NS4yNTg0OSAtNy42ODU3MyA1NS4yNTk4MiAtNy42ODY0MSA1NS4yNjA5NSAtNy42ODc4NSA1NS4yNjE4MSAtNy42ODUwOSA1NS4yNjA0NiAtNy42ODI2NSA1NS4yNTk0NSAtNy42ODA3NCA1NS4yNTkxNSAtNy42Nzc0OCA1NS4yNTk2NCAtNy42NzMwNiA1NS4yNjEyNiAtNy42Njc2OSA1NS4yNjM2OSAtNy42NjQ4MyA1NS4yNjU4OCAtNy42NjMyMiA1NS4yNjY0MSAtNy42NTk2MSA1NS4yNjg3OCAtNy42NTgwMyA1NS4yNjk3MyAtNy42NTU0MyA1NS4yNzExOSAtNy42NTM3MSA1NS4yNzI3OCAtNy42NDg5OCA1NS4yNzMyIC03LjY0NDA2IDU1LjI3MzkgLTcuNjM4ODcgNTUuMjczNjEgLTcuNjMzMzcgNTUuMjczMDUgLTcuNjI3NjggNTUuMjczMSAtNy42MjQ4IDU1LjI3MTk2IC03LjYyMzUxIDU1LjI3MDMzIC03LjYyNTA0IDU1LjI2ODgyIC03LjYyODAzIDU1LjI2NjkyIC03LjYyNzU5IDU1LjI2NjA1IC03LjYyNDQyIDU1LjI2NTIgLTcuNjIxMDggNTUuMjY0IC03LjYxOTQ3IDU1LjI2MjMgLTcuNjIwNTIgNTUuMjYwMDYgLTcuNjE5MzkgNTUuMjU3NDEgLTcuNjE5MTYgNTUuMjU2MDQgLTcuNjE3MjEgNTUuMjU0MjIgLTcuNjE2OTUgNTUuMjU0NiAtNy42MTI4MiA1NS4yNTI2MSAtNy42MTAyOSA1NS4yNTEyNSAtNy42MDc4NiA1NS4yNDkwOSAtNy42MDg4NCA1NS4yNDYzOSAtNy42MDk4OSA1NS4yNDQxOCAtNy42MDgxMyA1NS4yNDEyMSAtNy42MDQ5OSA1NS4yMzg4OCAtNy42MDU3OCA1NS4yMzYzOCAtNy42MDYzOCA1NS4yMzQxMSAtNy42MDU3MiA1NS4yMzIyMyAtNy42MDQ5OCA1NS4yMzIzNiAtNy42MDAxOSA1NS4yMjk2OSAtNy42MDA0NCA1NS4yMzAwNyAtNy41OTYxNyA1NS4yMjY3NiAtNy41OTY1IDU1LjIyMzEzIC03LjU5NzU4IDU1LjIyMDA3IC03LjU5ODQzIDU1LjIxODY0IC03LjU5OTY3IDU1LjIxNjY1IC03LjU5OTA3IDU1LjIxNTc4IC03LjYwMTgxIDU1LjIxMjg0IC03LjYwMDEyIDU1LjIxMDEgLTcuNjAzNzIgNTUuMjA3MzggLTcuNjA3MDMgNTUuMjA0NTkgLTcuNjA5NjcgNTUuMjAyODMgLTcuNjEyMTQgNTUuMjAxMjUgLTcuNjE2NTYgNTUuMTk2MTYgLTcuNjEzNTkgNTUuMTkzIC03LjYxMDU4IDU1LjE5MDg4IC03LjYwODg0IDU1LjE4NzY0IC03LjYwNzg4IDU1LjE4NzAyIC03LjYwMzMyIDU1LjE4Njc3IC03LjU5ODk2IDU1LjE4NTMyIC03LjU5NjUxIDU1LjE4MzUzIC03LjU5MzY5IDU1LjE4MjY4IC03LjU5MjEzIDU1LjE4MjYyIC03LjU4OTcxIDU1LjE4MzU2IC03LjU4NzEzIDU1LjE4NTE0IC03LjU4MjcyIDU1LjE4MzQ3IC03LjU3OTQzIDU1LjE4MjE5IC03LjU3NzMyIDU1LjE4MDYxIC03LjU3NTY2IDU1LjE3OTQ3IC03LjU3MjYzIDU1LjE3ODYzIC03LjU2ODk4IDU1LjE3NjM1IC03LjU2NDk4IDU1LjE3NDM0IC03LjU2MjkzIDU1LjE3MjMxIC03LjU2MzEyIDU1LjE3MDIzIC03LjU2NDQyIDU1LjE2ODQ1IC03LjU2NzIxIDU1LjE2NzE1IC03LjU2OTU5IDU1LjE2NDgyIC03LjU2ODQ2IDU1LjE2NDI2IC03LjU2NDcgNTUuMTYzMDggLTcuNTYyMyA1NS4xNjE0NCAtNy41NjAxNCA1NS4xNjAyOSAtNy41NTc0MSA1NS4xNTkzMiAtNy41NTQzOSA1NS4xNTc2IC03LjU1MjIzIDU1LjE1NjY0IC03LjU1NDk4IDU1LjE1NDI4IC03LjU1MDQ4IDU1LjE1MjI2IC03LjU0ODc1IDU1LjE1MTEzIC03LjU0MzQ4IDU1LjE0OTEgLTcuNTQxNzUgNTUuMTQ3MjMgLTcuNTQwNTMgNTUuMTQ1ODEgLTcuNTM3NjEgNTUuMTQyNzIgLTcuNTM3MTcgNTUuMTQxMTkgLTcuNTM0NCA1NS4xMzkwNCAtNy41MzE1MyA1NS4xMzc4OSAtNy41Mjg2NSA1NS4xMzk2MSAtNy41MjY5OSA1NS4xMzc5NyAtNy41MjI3NSA1NS4xMzQzMiAtNy41MjI1NSA1NS4xMzM2MyAtNy41MTk1NyA1NS4xMzYxOSAtNy41MTU2MiA1NS4xMzI5OCAtNy41MTU4IDU1LjEyODg4IC03LjUxMzMyIDU1LjEyNTA3IC03LjUxMjMgNTUuMTIyNDggLTcuNTEwODEgNTUuMTE4NzYgLTcuNTEyMDYgNTUuMTE2MTMgLTcuNTEzNDQgNTUuMTEzOTMgLTcuNTE1MzcgNTUuMTEyMSAtNy41MTczNSA1NS4xMTE1OCAtNy41MjA2NCA1NS4xMDk3IC03LjUyMzU2IDU1LjEwNjgxIC03LjUyMjY3IDU1LjEwMzkxIC03LjUyMTk1IDU1LjEwMTIzIC03LjUyMDI5IDU1LjA5ODU0IC03LjUyMTIgNTUuMDk2NDYgLTcuNTIyNSA1NS4wOTQ3NyAtNy41MjUxMyA1NS4wOTE3NSAtNy41MjkxOSA1NS4wODk0MSAtNy41MzYyIDU1LjA4ODc0IC03LjU0MjQ5IDU1LjA4NzU4IC03LjU0NTg1IDU1LjA4NTg5IC03LjU0ODY1IDU1LjA4MzU0IC03LjU1Mzg5IDU1LjA4Mjg5IC03LjU1OTg4IDU1LjA4MzA0IC03LjU2NDUzIDU1LjA4MTExIC03LjU2NjY1IDU1LjA3OTI5IC03LjU3MDIyIDU1LjA3ODQ2IC03LjU3NDI3IDU1LjA3ODE2IC03LjU3ODg0IDU1LjA3NTQyIC03LjU4MDM4IDU1LjA3MzU4IC03LjU4MjUyIDU1LjA3MTE0IC03LjU4MzkyIDU1LjA2OTg1IC03LjU4OTgxIDU1LjA2Njk1IC03LjU5MDg0IDU1LjA2NDMzIC03LjU5MDE0IDU1LjA1OTQ4IC03LjU4OTkyIDU1LjA1NzI1IC03LjU5NDM5IDU1LjA1NTA5IC03LjU5OTUyIDU1LjA1MzQ1IC03LjYwNTE5IDU1LjA1MjcgLTcuNjA5MjMgNTUuMDUzNDYgLTcuNjEyNTQgNTUuMDUyNDUgLTcuNjE2NTUgNTUuMDU0NTQgLTcuNjE4NzYgNTUuMDUyNjIgLTcuNjIwNzEgNTUuMDUwMTEgLTcuNjIzMjMgNTUuMDQ4MDQgLTcuNjIyNDUgNTUuMDQ2NDkgLTcuNjI0MzEgNTUuMDQ1NTggLTcuNjI2MDkgNTUuMDQ0NjggLTcuNjI5NDcgNTUuMDQzMjcgLTcuNjM0MjEgNTUuMDQwMTkgLTcuNjMxNTQgNTUuMDM4NjYgLTcuNjMyOTIgNTUuMDM3NTIgLTcuNjM1NjMgNTUuMDM1NTkgLTcuNjQwOCA1NS4wMzU3MSAtNy42MzUwNCA1NS4wMzY2IC03LjYyOTkyIDU1LjA0MDM1IC03LjYyODA1IDU1LjA0MTM2IC03LjYyMDM4IDU1LjA0MjcyIC03LjYxODgzIDU1LjA0NDA0IC03LjYxNTk4IDU1LjA0MzY4IC03LjYxMjEgNTUuMDQ0ODggLTcuNjA3OTcgNTUuMDQzNDUgLTcuNjA1MDUgNTUuMDQxMDIgLTcuNjA0MjIgNTUuMDQxMTUgLTcuNTk5NjEgNTUuMDQzOTMgLTcuNTk4ODkgNTUuMDQzOTggLTcuNTkyMDMgNTUuMDQ1MTkgLTcuNTg3NzQgNTUuMDQ2MDIgLTcuNTgxNzkgNTUuMDQ3ODUgLTcuNTc3OTEgNTUuMDUwMjIgLTcuNTc2MzEgNTUuMDUxODggLTcuNTc2MDggNTUuMDUyNjUgLTcuNTY5NDggNTUuMDUxMDcgLTcuNTY0MDEgNTUuMDQ3NjYgLTcuNTYwNDcgNTUuMDQ1ODEgLTcuNTU2ODggNTUuMDQzNzQgLTcuNTU0MTggNTUuMDM5ODYgLTcuNTU0NiA1NS4wMzc0OCAtNy41NTQ1NyA1NS4wMzU0NiAtNy41NTI4NSA1NS4wMzMyNyAtNy41NTI1NCA1NS4wMzAxMiAtNy41NTg5NyA1NS4wMjYxOSAtNy41NjY3IDU1LjAyMTc5IC03LjU3MjYxIDU1LjAxODYzIC03LjU3NTUyIDU1LjAxNTU1IC03LjU3ODQzIDU1LjAxNDg2IC03LjU4MzQzIDU1LjAxMjk4IC03LjU4NjM2IDU1LjAxMDc4IC03LjU5MDE4IDU1LjAwOTY1IC03LjU5NjczIDU1LjAwNjY4IC03LjYwMzMyIDU1LjAwNDI4IC03LjYwOTUyIDU1LjAwMTM3IC03LjYxNjc1IDU0Ljk5ODM5IC03LjYyMTc0IDU0Ljk5NjE1IC03LjYyNjM2IDU0Ljk5NTU1IC03LjYzMzEzIDU0Ljk5MzU1IC03LjYzMjY5IDU0Ljk5MTA2IC03LjYzMTIxIDU0Ljk4ODMzIC03LjYzMjU4IDU0Ljk4NTkxIC03LjYzNTQxIDU0Ljk4MTg0IC03LjYzODAyIDU0Ljk4MDIxIC03LjY0MzM3IDU0Ljk3NzU5IC03LjY0ODQgNTQuOTczMzMgLTcuNjQ5MjQgNTQuOTcwMDYgLTcuNjUyNDMgNTQuOTY2OTQgLTcuNjUyNDcgNTQuOTY2MTUgLTcuNjU1MzcgNTQuOTYyODIgLTcuNjYwMTQgNTQuOTYwNjYgLTcuNjYzMDIgNTQuOTU5NDYgLTcuNjY4OTEgNTQuOTYwODMgLTcuNjcxMDEgNTQuOTU5MDMgLTcuNjc0MjUgNTQuOTU3MDcgLTcuNjc4NTkgNTQuOTU0NzMgLTcuNjc3NzggNTQuOTUxNzggLTcuNjc4MTUgNTQuOTQ5NDMgLTcuNjc5NCA1NC45NDgxMyAtNy42ODMzNiA1NC45NDgwNyAtNy42ODY1NCA1NC45NDk1MyAtNy42ODY3NSA1NC45NTE2IC03LjY4NzY3IDU0Ljk1MjMyIC03LjY5MTc2IDU0Ljk1MTU0IC03LjY5NjQzIDU0Ljk0OTc3IC03LjY5ODg4IDU0Ljk0Njc1IC03LjcwMjc0IDU0Ljk0NjAzIC03LjcwMDQxIDU0Ljk0Nzg4IC03LjY5ODI5IDU0Ljk0ODk5IC03LjY5NjA3IDU0Ljk0OTc5IC03LjY5MjgzIDU0Ljk0ODc5IC03LjY5MDc3IDU0Ljk0NTg3IC03LjY5MDM2IDU0Ljk0NjA3IC03LjY3ODc2IDU0Ljk0ODQ1IC03LjY3MzA1IDU0Ljk1MDQyIC03LjY2ODA4IDU0Ljk1MzI2IC03LjY2MDUyIDU0Ljk1NTYyIC03LjY1OTExIDU0Ljk1NzA2IC03LjY1NTk3IDU0Ljk1NzY2IC03LjY1MDk3IDU0Ljk1ODIyIC03LjY0ODgyIDU0Ljk1OTY2IC03LjY0OTUgNTQuOTYwMjEgLTcuNjQzNTMgNTQuOTYxODUgLTcuNjQxODYgNTQuOTYyNTYgLTcuNjM4NDUgNTQuOTYxNSAtNy42MzM2OSA1NC45NjQ3MSAtNy42MzE3NSA1NC45Njc0OCAtNy42MzEzNSA1NC45Njg5OCAtNy42MzA5NCA1NC45NzAwMSAtNy42MjYzIDU0Ljk2ODAzIC03LjYyNTY5IDU0Ljk2Njg2IC03LjYyMzMgNTQuOTY1NTMgLTcuNjIwNCA1NC45NjMwOCAtNy42MjE2NCA1NC45NjE2MyAtNy42MjUyNiA1NC45NTk0NCAtNy42MzA2OCA1NC45NTcxOCAtNy42MzQwMyA1NC45NTQ0OSAtNy42MzY1IDU0Ljk1MjggLTcuNjM1NDcgNTQuOTUxOTMgLTcuNjMyNDcgNTQuOTQ5NTMgLTcuNjI4OTUgNTQuOTQ5NTMgLTcuNjI4OTUgNTQuOTUzMjEgLTcuNjI2NzcgNTQuOTU0NDkgLTcuNjI4ODcgNTQuOTU2IC03LjYzMTc4IDU0Ljk1ODU3IC03LjYyNzg2IDU0Ljk1OTg4IC03LjYyNTQ5IDU0Ljk2MDQ0IC03LjYyMTQyIDU0Ljk2MDg4IC03LjYxNzgyIDU0Ljk2NDAzIC03LjYxNTA5IDU0Ljk2NzY2IC03LjYxMjI2IDU0Ljk3MTUgLTcuNjA4MzUgNTQuOTc0MjggLTcuNjA2MDQgNTQuOTc3NDQgLTcuNjAyOTcgNTQuOTgwNjUgLTcuNjAxMiA1NC45ODM0MiAtNy41OTg5IDU0Ljk4NzM5IC03LjU5NjEgNTQuOTkwNTcgLTcuNTkzMDYgNTQuOTkzNyAtNy41ODg4OSA1NC45OTU2MSAtNy41ODM0MiA1NC45OTYxOSAtNy41NzY5NSA1NC45OTg4MiAtNy41Njk2OCA1NS4wMDE2MSAtNy41NjY4OSA1NS4wMDM4MSAtNy41NjQ5NyA1NS4wMDY1MSAtNy41NjAxIDU1LjAwOTA0IC03LjU1Mjk2IDU1LjAxMTY3IC03LjU0NTY3IDU1LjAxNDQzIC03LjU0MTU5IDU1LjAxNzYxIC03LjUzODIyIDU1LjAyMTE1IC03LjUzNTA1IDU1LjAyMzI5IC03LjUzMDU2IDU1LjAyMzE2IC03LjUyNTQ0IDU1LjAxODM4IC03LjUyMTkxIDU1LjAyMjQxIC03LjUxMTk1IDU1LjAyOTM1IC03LjUxMjc2IDU1LjAzMzE4IC03LjUxMTA3IDU1LjAzNjczIC03LjUwNzcyIDU1LjAzODczIC03LjUwMTk1IDU1LjAzOTQzIC03LjQ5Mjc5IDU1LjAzOTYyIC03LjQ4NjkxIDU1LjA0MDY2IC03LjQ4MjI3IDU1LjA0NDA3IC03LjQ3NTg5IDU1LjA0MTcgLTcuNDcxNTcgNTUuMDQzOCAtNy40Njc4OCA1NS4wNDY0MiAtNy40NjY0OSA1NS4wNDc3NyAtNy40NjkyMiA1NS4wNDc4NCAtNy40NzE2NCA1NS4wNDcyIC03LjQ3MzYyIDU1LjA0NjA0IC03LjQ3NjggNTUuMDQ2MjEgLTcuNDgxMTQgNTUuMDQ1NiAtNy40ODYzMiA1NS4wNDQ3NSAtNy40OTA4MiA1NS4wNDUwOCAtNy40OTM3NCA1NS4wNDY0MSAtNy40OTY2MyA1NS4wNDc3OSAtNy40OTg1OSA1NS4wNDk2OCAtNy41MDEyNCA1NS4wNTIwOCAtNy41MDI3IDU1LjA1NDQ3IC03LjUwNjcxIDU1LjA1NTA1IC03LjUwOTk4IDU1LjA1Mzk4IC03LjUxNzE2IDU1LjA1NzE1IC03LjUyMjA4IDU1LjA1OTU4IC03LjUyNDk4IDU1LjA2MjU1IC03LjUyNDQ0IDU1LjA2NTEzIC03LjUyNjA4IDU1LjA2ODA3IC03LjUyNzc2IDU1LjA3MDU4IC03LjUyNyA1NS4wNzIzNCAtNy41MjQ1NCA1NS4wNzM0OSAtNy41MjE2NiA1NS4wNzQxMyAtNy41MTU4NCA1NS4wNzY0NSAtNy41MTUwNSA1NS4wNzgwOCAtNy41MTM1MiA1NS4wNzg4NCAtNy41MTA5MiA1NS4wODA5OSAtNy41MTIwMSA1NS4wODIyNSAtNy41MDg4NCA1NS4wNzk0OCAtNy41MDQ5NCA1NS4wODAzOSAtNy40OTkxNyA1NS4wODA2OSAtNy40OTI4MSA1NS4wODAyOSAtNy40ODU1NyA1NS4wODA3NSAtNy40ODM0IDU1LjA3ODMgLTcuNDgxMTUgNTUuMDc1NjcgLTcuNDgwMyA1NS4wNzQ1OCAtNy40NzYzMiA1NS4wNzM2MyAtNy40NzQ5IDU1LjA2OTY2IC03LjQ3MzU2IDU1LjA2OTY5IC03LjQ2ODkzIDU1LjA2ODczIC03LjQ1OTg1IDU1LjA2NjggLTcuNDYzODkgNTUuMDY0MTMgLTcuNDYyMDkgNTUuMDYxNjEgLTcuNDU5MTggNTUuMDU4NTQgLTcuNDU2MiA1NS4wNjA5OCAtNy40NTMwMyA1NS4wNjEwMiAtNy40NDgwOCA1NS4wNjU2MiAtNy40NDc2MiA1NS4wNzEzIC03LjQ0NzkxIDU1LjA3NTQ3IC03LjQ1MDg4IDU1LjA3ODM0IC03LjQ1ODMyIDU1LjA4MTI2IC03LjQ2NDQ3IDU1LjA4MjQ4IC03LjQ2Nzg0IDU1LjA4MzI2IC03LjQ3Mjg5IDU1LjA4OTEyIC03LjQ3MjkgNTUuMDk2MjIgLTcuNDcyMTUgNTUuMTAyNjYgLTcuNDY5NTMgNTUuMTA2NTMgLTcuNDY1MjggNTUuMTA5ODMgLTcuNDU5MTkgNTUuMTEzMzYgLTcuNDUyMTcgNTUuMTE4MDcgLTcuNDQ5MjkgNTUuMTIxODcgLTcuNDUyNTUgNTUuMTIzNjQgLTcuNDUzOTIgNTUuMTI0OTMgLTcuNDQ5NzcgNTUuMTI1NDkgLTcuNDU1NDUgNTUuMTMyNjYgLTcuNDUzMDggNTUuMTMzNyAtNy40NTYyNyA1NS4xMzM1MSAtNy40NTg0OCA1NS4xMzUzMiAtNy40NjA5NyA1NS4xMzYxIC03LjQ2NTg4IDU1LjEzNzY1IC03LjQ2ODE4IDU1LjE0MDUzIC03LjQ2OTIyIDU1LjE0NDU2IC03LjQ3MzMgNTUuMTQ3ODEgLTcuNDc4NTUgNTUuMTUwOCAtNy40NzkyOCA1NS4xNTMyNiAtNy40Nzc1NSA1NS4xNTQ5OCAtNy40Nzk4NyA1NS4xNTU0MiAtNy40ODIzMyA1NS4xNTUwMiAtNy40ODUxNiA1NS4xNTY5NyAtNy40OTAzOSA1NS4xNjA1IC03LjQ5MzQ0IDU1LjE2NjYzIC03LjQ5NTc1IDU1LjE2Nzg3IC03LjQ5ODY0IDU1LjE2Nzg5IC03LjUwMTk5IDU1LjE3MTExIC03LjUwMjEzIDU1LjE3MjA3IC03LjUwNTE0IDU1LjE3NTQ2IC03LjUwNzA3IDU1LjE3ODQ0IC03LjUwNzk2IDU1LjE4MTUxIC03LjUxMjg3IDU1LjE4MzM1IC03LjUxNjgxIDU1LjE4NDI5IC03LjUyMjIzIDU1LjE4NjUxIC03LjUyMzgzIDU1LjE4Njk3IC03LjUyOTY1IDU1LjE4ODgzIC03LjUzMTAzIDU1LjE5MDM4IC03LjUzMzE5IDU1LjE5MDQ5IC03LjUzODY0IDU1LjE5MTIzIC03LjU0NDY3IDU1LjE5NjIzIC03LjU0NTIxIDU1LjE5ODM0IC03LjU0MTM2IDU1LjE5NzE1IC03LjUzNzMzIDU1LjE5NzEyIC03LjUzMjIxIDU1LjE5ODk0IC03LjUzMjQ2IDU1LjIwMTE2IC03LjUzNDA2IDU1LjIwMjc3IC03LjUzNjg2IDU1LjIwNDE3IC03LjU0MDI2IDU1LjIwNjk4IC03LjUzNjk3IDU1LjIxMDY1IC03LjUzNyA1NS4yMTQ4IC03LjUzNjQ4IDU1LjIxNTExIC03LjUzMzYzIDU1LjIxNzMxIC03LjUzMTcxIDU1LjIyMDE0IC03LjUzMTk0IDU1LjIyMTE3IC03LjUzMTQ0IDU1LjIyMTU1IC03LjUyOTI2IDU1LjIyMzc4IC03LjUyODQ0IDU1LjIyNTk4IC03LjUyNjUxIDU1LjIyNzMgLTcuNTIzODEgNTUuMjI4MjggLTcuNTIwNDMgNTUuMjMwOSAtNy41MTc0MyA1NS4yMzMzNSAtNy41MTM5MyA1NS4yMzUwOSAtNy41MTE3OCA1NS4yMzY1OSAtNy41MTEwMiA1NS4yMzg1MiAtNy41MTMwNiA1NS4yNDAwNSAtNy41MTU1MiA1NS4yNDAyNCAtNy41MTc0OCA1NS4yMzk4NSAtNy41MTk4MiA1NS4yMzg4NyAtNy41MjUyOSA1NS4yNDA3NCAtNy41MjQ0NCA1NS4yNDIwNSAtNy41MjYwNSA1NS4yNDQxNCAtNy41MjYzNiA1NS4yNDU0IC03LjUyNDc2IDU1LjI0NTkzIC03LjUyMTMyIDU1LjI0ODY3IC03LjUxOTQ2IDU1LjI0OTI4IC03LjUxNDI1IDU1LjI1MDY3IC03LjUwOTk2IDU1LjI1MzIxIC03LjUwNjYzIDU1LjI1NTI2IC03LjUwNTggNTUuMjU4MTkgLTcuNTAzODEgNTUuMjYwOTMgLTcuNTAyMjYgNTUuMjYzMjIgLTcuNTAyMSA1NS4yNjY1NCAtNy41MDM2OSA1NS4yNjgyNyAtNy41MDM5NCA1NS4yNjk3NSAtNy41MDU2IDU1LjI3MDQ0IC03LjUwODQyIDU1LjI3MTgyIC03LjUxNDM5IDU1LjI3MzgzIC03LjUxNDM1IDU1LjI3NTUxIC03LjUxNjAzIDU1LjI3NjY4IC03LjUxODI5IDU1LjI3OTU4IC03LjUxNTE2IDU1LjI4MjM4IC03LjUxNzk3IDU1LjI4MzUyIC03LjUxMzE1IDU1LjI4Mzk4IC03LjUwNzI3IDU1LjI4NDY3IC03LjQ5OTk5IDU1LjI4NTc0IC03LjQ5NSA1NS4yODM3NiAtNy40ODk5MSA1NS4yODMyNyAtNy40ODY0OCA1NS4yODEzIC03LjQ4NTU2IDU1LjI3OTkyIC03LjQ3OTU5IDU1LjI3ODkxIC03LjQ3MzgzIDU1LjI3Nzg2IC03LjQ2ODg3IDU1LjI3NzUxIC03LjQ2NDM0IDU1LjI3NzU0IC03LjQ2MTYxIDU1LjI3OTMyIC03LjQ1ODk2IDU1LjI4MTU0IC03LjQ1ODMxIDU1LjI4NCAtNy40NjA3NCA1NS4yODY3IC03LjQ2Mzg1IDU1LjI4ODc5IC03LjQ2NDE1IDU1LjI5MDg3IC03LjQ2MjgyIDU1LjI5MjYzIC03LjQ2MDM0IDU1LjI5Mjc1IC03LjQ1NzY0IDU1LjI5MTIgLTcuNDUzNTcgNTUuMjg5MDMgLTcuNDUyOTQgNTUuMjg4MTIgLTcuNDQ4NzkgNTUuMjg2ODkgLTcuNDQzNDkgNTUuMjg1MTkgLTcuNDQyNjEgNTUuMjgyNjIgLTcuNDQ2NzYgNTUuMjgwNSAtNy40NDQ4NSA1NS4yNzg3MSAtNy40NDIwMyA1NS4yNzgyMyAtNy40Mzg2MSA1NS4yNzc1IC03LjQzNDMzIDU1LjI3Njc1IC03LjQzMDg0IDU1LjI3NTY3IC03LjQyODI5IDU1LjI3NjU2IC03LjQyNDcyIDU1LjI3Njc0IC03LjQyMDkgNTUuMjc4NyAtNy40MjE5OCA1NS4yODA0MiAtNy40MjI1NCA1NS4yODE2NCAtNy40MjM4MyA1NS4yODIxOSAtNy40MjU4MyA1NS4yODMxNiAtNy40MjQ4NSA1NS4yODQwNSAtNy40MjE0NCA1NS4yODQ4OSAtNy40MTcwNiA1NS4yODc0MiAtNy40MTE3OSA1NS4yODY3MyAtNy40MDQ2MyA1NS4yODg4IC03LjQwMTU1IDU1LjI4ODI0IC03LjM5NTcxIDU1LjI4OTYzIC03LjM4OSA1NS4yODY0OSAtNy4zODU2OCA1NS4yODc4OCAtNy4zNzczNiA1NS4yOTEzOCAtNy4zNzI3MSA1NS4yOTQ0MiAtNy4zNzA0IDU1LjI5OTAzIC03LjM2NzgyIDU1LjMwMjc5IC03LjM2NzY5IDU1LjMwNDc2IC03LjM2NjUzIDU1LjMwNzUyIC03LjM2ODM1IDU1LjMwOTUxIC03LjM2OTEgNTUuMzExOTQgLTcuMzY3ODMgNTUuMzEzMTIgLTcuMzY0MTMgNTUuMzEzMzEgLTcuMzU3OSA1NS4zMTI1OCAtNy4zNTE1NCA1NS4zMTE0NyAtNy4zNDc3IDU1LjMxMjI2IC03LjM0NDQ0IDU1LjMxMDggLTcuMzQwMjIgNTUuMzA4NDEgLTcuMzM2MzYgNTUuMzA2ODggLTcuMzI3NDggNTUuMzAzMjcgLTcuMzI2MDMgNTUuMzAxMjYgLTcuMzE5ODEgNTUuMjk5OTggLTcuMzE5OCA1NS4yOTgyOSAtNy4zMTg3NiA1NS4yOTc4NyAtNy4zMTU4MiA1NS4yOTk4OSAtNy4zMTE3NiA1NS4yOTkyNyAtNy4zMDcwMiA1NS4yOTcyNCAtNy4zMDkxNiA1NS4yOTU1MiAtNy4zMDg3NiA1NS4yOTQ3NyAtNy4zMDczNyA1NS4yOTMzNCAtNy4zMDIzNiA1NS4yOTAyNyAtNy4yOTkwNiA1NS4yODY5MiAtNy4zMDAyMSA1NS4yODQ3MiAtNy4zMDAzOSA1NS4yODMxMSAtNy4zMDM1NCA1NS4yODIxNCAtNy4zMDY5MyA1NS4yODA0NSAtNy4zMDU1OCA1NS4yNzcxNCAtNy4yOTk5OSA1NS4yNzM4MSAtNy4yOTQ0MiA1NS4yNzE0OSAtNy4yODg5NiA1NS4yNzA1NSAtNy4yODUxNiA1NS4yNzA0MyAtNy4yODE0NSA1NS4yNzEzMSAtNy4yODAyOCA1NS4yNzExMyAtNy4yNzYyNCA1NS4yNzMzIC03LjI3MjU0IDU1LjI3NjAyIC03LjI2OTIxIDU1LjI3NzQyIC03LjI2NDU5IDU1LjI3NTY5IC03LjI2MjExIDU1LjI3NDE0IC03LjI2Mzk4IDU1LjI3MjM1IC03LjI2Mjk0IDU1LjI3Mzc4IC03LjI1OTc2IDU1LjI3NDU3IC03LjI1NjM0IDU1LjI3NDM2IC03LjI1MDcgNTUuMjc0MjMgLTcuMjQxMjEgNTUuMjc0MjMgLTcuMjQxMjEgNTUuMjc3NDQgLTcuMjQ3NDMgNTUuMjc5NDcgLTcuMjUxMDggNTUuMjgxMTQgLTcuMjUyNzQgNTUuMjgzMDQgLTcuMjU1NTcgNTUuMjg0MzQgLTcuMjU5MjYgNTUuMjg1MjEgLTcuMjYyNDMgNTUuMjg2NjQgLTcuMjYxMTcgNTUuMjg3MzQgLTcuMjU1NSA1NS4yODg5NiAtNy4yNTgyOSA1NS4yODg0NCAtNy4yNjM5OSA1NS4yODc5NSAtNy4yNjg5IDU1LjI4ODU1IC03LjI3Mzk1IDU1LjI5MDIxIC03LjI3NTc5IDU1LjI5MDggLTcuMjc4OSA1NS4yOTEyOSAtNy4yODIzNSA1NS4yOTM1NSAtNy4yODUyMiA1NS4yOTU0NiAtNy4yODc0MSA1NS4yOTY4NiAtNy4yOTMyMiA1NS4yOTkzMSAtNy4yOTc4NyA1NS4zMDE0MSAtNy4zMDIxOCA1NS4zMDMwNSAtNy4zMDY0MSA1NS4zMDQ1NSAtNy4zMDk2NiA1NS4zMDYwNiAtNy4zMTI3NyA1NS4zMDY3NyAtNy4zMTc1MSA1NS4zMDY4MiAtNy4zMjI1IDU1LjMxMDM4IC03LjMyODkzIDU1LjMxMzc4IC03LjMyOTA2IDU1LjMxNzA2IC03LjMyOTIgNTUuMzIwMTcgLTcuMzI5MyA1NS4zMjIgLTcuMzMzNzIgNTUuMzIyODMgLTcuMzM5NjIgNTUuMzI0NSAtNy4zNDEyOSA1NS4zMjYwNyAtNy4zNDI5NSA1NS4zMjYzNiAtNy4zNDY2OSA1NS4zMzIxNCAtNy4zNDY1MiA1NS4zMzY2MyAtNy4zNDQ1NiA1NS4zNDAyNiAtNy4zNDM0NSA1NS4zNDMxOSAtNy4zNDMzNyA1NS4zNDc2NSAtNy4zNDIwNSA1NS4zNTExMiAtNy4zMzk5NyA1NS4zNTM1MiAtNy4zNDE5IDU1LjM1NDk1IC03LjM0MjU4IDU1LjM1NTA0IC03LjM0Njc3IDU1LjM1NTk2IC03LjM1MDkxIDU1LjM1NzM3IC03LjM1NCA1NS4zNTY0OCAtNy4zNTc0MSA1NS4zNTQ4MSAtNy4zNTk5MiA1NS4zNTU1NCAtNy4zNjQxOSA1NS4zNTY5MyAtNy4zNjYgNTUuMzU4ODYgLTcuMzY3ODYgNTUuMzYwNzYgLTcuMzc0NDEgNTUuMzYyMTEgLTcuMzc5MDkgNTUuMzY1MDYgLTcuMzgwNzcgNTUuMzY3ODggLTcuMzgxMTcgNTUuMzY5NDIgLTcuMzgxNyA1NS4zNzAxOCAtNy4zODcyOCA1NS4zNzA1NCAtNy4zODkyNiA1NS4zNzI1NCAtNy4zODk4NSA1NS4zNzM3NiAtNy4zODQ4OCA1NS4zNzQ3NyAtNy4zODA5OSA1NS4zNzU5NCAtNy4zNzczIDU1LjM3NzEyIC03LjM3MzI5IDU1LjM3Nzc1IC03LjM2NTMzIDU1LjM3NzMzIC03LjM2MDYgNTUuMzc2MTkgLTcuMzU3MzkgNTUuMzc0MzUgLTcuMzU1MzcgNTUuMzc1NTUgLTcuMzUxMTkgNTUuMzcyODMgLTcuMzQ2NDggNTUuMzcxMzQgLTcuMzQyOSA1NS4zNzA4MSAtNy4zMzgxNyA1NS4zNzE2OSAtNy4zMzA4OSA1NS4zNzAzOCAtNy4zMjkyNiA1NS4zNjg2OCAtNy4zMjg1NSA1NS4zNjc0OCAtNy4zMjg4NiA1NS4zNjU1NCAtNy4zMjkyNSA1NS4zNjQwOSAtNy4zMjQ3IDU1LjM2NDA5IC03LjMyMDUyIDU1LjM2NDY2IC03LjMxNTk0IDU1LjM2NTE2IC03LjMxMDg3IDU1LjM2MjY3IC03LjMwNjk4IDU1LjM2MzgxIC03LjMwNDEgNTUuMzYyMTMgLTcuMzAyNzMgNTUuMzYyMDMgLTcuMzAwNzkgNTUuMzY0MDYgLTcuMjk4NjUgNTUuMzYzMTIgLTcuMjk2OTMgNTUuMzYxODMgLTcuMjk3MDcgNTUuMzYzMjQgLTcuMjkwMDIgNTUuMzY0MTUgLTcuMjg2MTIgNTUuMzYyMTQgLTcuMjgxODQgNTUuMzYxNCAtNy4yNzc4OCA1NS4zNjE3NyAtNy4yNzM2IDU1LjM2MDIzIC03LjI3MTE0IDU1LjM1OTkzIC03LjI2NzU2IDU1LjM1NjQ4IC03LjI2NDY4IDU1LjM1NDc1IC03LjI1ODMzIDU1LjM1NDUzIC03LjI1Mjg0IDU1LjM1NDQ2IC03LjI0NjI0IDU1LjM1NDk4IC03LjIzNDI2IDU1LjM1MjQ1IC03LjIzMzQ1IDU1LjM0OTU2IC03LjIyODM5IDU1LjM0NzQzIC03LjIyMDIzIDU1LjM0NTczIC03LjIwOTA4IDU1LjM0NDIgLTcuMjAwMDQgNTUuMzQyNTEgLTcuMTkwMzMgNTUuMzQxMDIgLTcuMTgyNTkgNTUuMzM4MDEgLTcuMTc1OTIgNTUuMzM1MDYgLTcuMTcwMjMgNTUuMzMzMjMgLTcuMTY1NjUgNTUuMzMxNDggLTcuMTYxNzIgNTUuMzMwNiAtNy4xNjA2NCA1NS4zMjY3NSAtNy4xNjMwMiA1NS4zMjQyNSAtNy4xNjE1NiA1NS4zMjI0NiAtNy4xNjA1MyA1NS4zMjA5NSAtNy4xNjE2MSA1NS4zMTk3NyAtNy4xNjM1NCA1NS4zMTgzIC03LjE2NTU5IDU1LjMxNTc2IC03LjE2NzE4IDU1LjMxMzUgLTcuMTYwMTMgNTUuMzEwNzQgLTcuMTU2MDggNTUuMzA3ODUgLTcuMTU1MDYgNTUuMzA2MzkgLTcuMTUwODUgNTUuMzAzNDcgLTcuMTUwNDYgNTUuMzAwODYgLTcuMTUxNzIgNTUuMjk5OTggLTcuMTQ4NTYgNTUuMjk4MjYgLTcuMTQ1OTMgNTUuMjk2NDIgLTcuMTQ2MTYgNTUuMjk0NjcgLTcuMTQ4NDkgNTUuMjkyODcgLTcuMTQ5ODcgNTUuMjkwMjggLTcuMTUwNDcgNTUuMjg4NzggLTcuMTUxMjUgNTUuMjg1NjEgLTcuMTU0NjcgNTUuMjg2MDEgLTcuMTUxNTIgNTUuMjg3MDggLTcuMTQ4MyA1NS4yOTEzOCAtNy4xNDgyMiA1NS4yODk2NSAtNy4xNDE3MyA1NS4yODc2OSAtNy4xMzYwMiA1NS4yODczMyAtNy4xMzE4IDU1LjI4NzE3IC03LjEyOTA1IDU1LjI4NzYxIC03LjEyNTQyIDU1LjI4ODM1IC03LjEyMjc5IDU1LjI4OTc1IC03LjEyMDI1IDU1LjI4OTQ0IC03LjExNjg0IDU1LjI4NzI3IC03LjExNjIzIDU1LjI4NjA2IC03LjExNDQ4IDU1LjI4NDg0IC03LjExMDkzIDU1LjI4Mzg2IC03LjEwNTgzIDU1LjI4MzQ1IC03LjA5ODQxIDU1LjI4Mjg3IC03LjA5MjcyIDU1LjI4MTkyIC03LjA4OTA3IDU1LjI4MDQ0IC03LjA4NTM0IDU1LjI3NzggLTcuMDg0ODUgNTUuMjc2MDggLTcuMDgyMjIgNTUuMjc1MiAtNy4wNzcxMiA1NS4yNzE0OCAtNy4wNzE5OSA1NS4yNjg4IC03LjA2ODExIDU1LjI2Njc5IC03LjA2Mzg0IDU1LjI2NzU5IC03LjA1NTc3IDU1LjI2Nzk3IC03LjA0ODkxIDU1LjI2ODYyIC03LjA0NDE5IDU1LjI2OTk0IC03LjA0MTMyIDU1LjI3MTIzIC03LjAzNjg0IDU1LjI2OTYxIC03LjAzMzkgNTUuMjY4MDMgLTcuMDM0NSA1NS4yNjYzNiAtNy4wMzA3NiA1NS4yNjQxMSAtNy4wMjk4MiA1NS4yNjM2OSAtNy4wMjIyMyA1NS4yNjE5NSAtNy4wMjAwOSA1NS4yNjI1NSAtNy4wMTQ3MiA1NS4yNjA5OSAtNy4wMDgyNiA1NS4yNTk3NSAtNy4wMDI5NyA1NS4yNTc0NyAtNy4wMDI1MSA1NS4yNTQ4IC03LjAwNTIyIDU1LjI1MTY3IC03LjAwMzM4IDU1LjI0OTE3IC02Ljk5OTUzIDU1LjI0ODk1IC02Ljk5Mzg5IDU1LjI0OTIzIC02Ljk4NzAzIDU1LjI1MDQgLTYuOTc5MTggNTUuMjUxNjUgLTYuOTczMjQgNTUuMjUyMjggLTYuOTY5MTUgNTUuMjUwMTUgLTYuOTYzMTEgNTUuMjQ5MjUgLTYuOTU2MTEgNTUuMjQ4ODMgLTYuOTUwOTMgNTUuMjQ4MTIgLTYuOTQ1NzEgNTUuMjQ2NTggLTYuOTQzMjcgNTUuMjQ0NzYgLTYuOTM4NTYgNTUuMjQzNTEgLTYuOTMzNDMgNTUuMjQwMDkgLTYuOTI5NjIgNTUuMjM3NDkgLTYuOTI4NDkgNTUuMjM1NTcgLTYuOTI2MDIgNTUuMjM0NCAtNi45MjEwNiA1NS4yMzIyMSAtNi45MTg4NSA1NS4yMzEwNSAtNi45MTU2NiA1NS4yMjgwMiAtNi45MTgxNiA1NS4yMjQ4OCAtNi45MjA5OCA1NS4yMjIxNiAtNi45MjI1NSA1NS4yMTkzOSAtNi45MjMxNyA1NS4yMTYzMiAtNi45MjY0NiA1NS4yMTQzMyAtNi45MzAyIDU1LjIxMjI2IC02LjkzMzc4IDU1LjIxMDg3IC02LjkzODI2IDU1LjIwODg3IC02Ljk0MjY0IDU1LjIwNjk3IC02Ljk0NDE2IDU1LjIwNDk2IC02Ljk0MzkxIDU1LjIwMzQ0IC02Ljk0NzU1IDU1LjIwMzYxIC02Ljk1MjIyIDU1LjIwMjUyIC02Ljk1NjI0IDU1LjIwMDMyIC02Ljk2MDc2IDU1LjE5ODQ0IC02Ljk2NjI5IDU1LjE5NjYgLTYuOTcyOTMgNTUuMTk2NTUgLTYuOTgwOTIgNTUuMTk0ODIgLTYuOTg2OTUgNTUuMTkyMTcgLTYuOTk1NTcgNTUuMTg5MzUgLTcuMDA0MDEgNTUuMTg2ODkgLTcuMDEyMTcgNTUuMTg0MjggLTcuMDI0MzMgNTUuMTgzNzIgLTcuMDI4NzIgNTUuMTgxNCAtNy4wMzM3MSA1NS4xODAwNSAtNy4wMzczNyA1NS4xODA5MiAtNy4wNDA4NSA1NS4xODE0OCAtNy4wNDI2OCA1NS4xNzk2OSAtNy4wNDgwNSA1NS4xNzE5OSAtNy4wNjc1MiA1NS4xNjU5MyAtNy4wODQ5OCA1NS4xNjM2MiAtNy4wOTYwMiA1NS4xNjA4MyAtNy4xMDM1IDU1LjE1NjM0IC03LjEwOTk1IDU1LjE1MzYxIC03LjExNTY2IDU1LjE1MzI1IC03LjExOTc3IDU1LjE1Mzk1IC03LjEyMjU4IDU1LjE1Mjg4IC03LjEyODUyIDU1LjE1MTM2IC03LjEzMzkzIDU1LjE0Nzc4IC03LjE0MjU3IDU1LjE0NDA2IC03LjE1MjMxIDU1LjEzOTkzIC03LjE2MDg4IDU1LjEzNTU1IC03LjE2NjUzIDU1LjEzMTcyIC03LjE3MDY2IDU1LjEyOTQ5IC03LjE3NzQgNTUuMTI2NzEgLTcuMTgwMzggNTUuMTIzMzggLTcuMTgxMjIgNTUuMTIxMzEgLTcuMTg0MyA1NS4xMTkwMyAtNy4xODYyNCA1NS4xMTkyNyAtNy4xOTEyMyA1NS4xMTQ4NyAtNy4xOTc1MiA1NS4xMTAyNSAtNy4yMDA1NiA1NS4xMDY0MiAtNy4yMDQyMSA1NS4xMDQxIC03LjIwNTAxIDU1LjEwMDY3IC03LjIwNzc2IDU1LjA5ODE1IC03LjIxNTI1IDU1LjA5NTE1IC03LjIxNjYgNTUuMDg5MTQgLTcuMjI2MTggNTUuMDgyNzMgLTcuMjM0NDMgNTUuMDc3MjEgLTcuMjQxMDQgNTUuMDcxMjggLTcuMjQ4ODYgNTUuMDY1OTkgLTcuMjUyMjkgNTUuMDY1OTkgLTcuMjUyMjkgNTUuMDU5OTIgLTcuMjY1MzUgNTUuMDU0ODcgLTcuMjY5ODEgNTUuMDUwMzUgLTcuMjcyNTkgNTUuMDQ0NDMgLTcuMjc4MDQgNTUuMDQ3MzMgLTcuMjg1NDUgNTUuMDQ5MjkgLTcuMjg5MDQgNTUuMDUxNzIgLTcuMjkyMzkgNTUuMDUyMjcgLTcuMjk4NjkgNTUuMDQ5NDUgLTcuMzA0NTUgNTUuMDQ0OTIgLTcuMzA3OTYgNTUuMDQwNzIgLTcuMzEzNzkgNTUuMDQzNDkgLTcuMzE5NzMgNTUuMDQ2MTIgLTcuMzI0ODcgNTUuMDQ3NDYgLTcuMzMyMjEgNTUuMDQ1NDUgLTcuMzQwNTggNTUuMDQyMTIgLTcuMzQ3OCA1NS4wNDAxNSAtNy4zNTUyIDU1LjAzNjQgLTcuMzYzMzQgNTUuMDMxNjUgLTcuMzY5NDEgNTUuMDI2NjkgLTcuMzc0MDMgNTUuMDIzNzYgLTcuMzc4MjcgNTUuMDIxNDggLTcuMzg0MiA1NS4wMTc5MyAtNy4zODk5NiA1NS4wMTM5NCAtNy4zOTM0MyA1NS4wMDkxMiAtNy4zOTQ1NSA1NS4wMDUzOCAtNy4zOTgzNiA1NS4wMDE0MyAtNy40MDI2MiA1NC45OTQ5NCAtNy40MDI0MSA1NC45OTUwNCAtNy4zODkxOSA1NC45OTA4OSAtNy4zOTIxNSA1NC45ODY3NSAtNy4zOTY0IDU0Ljk4MTcyIC03LjM5ODI5IDU0Ljk3NDYxIC03LjM5NzM2IDU0Ljk2OCAtNy4zOTUzOCA1NC45NjI1NyAtNy4zOTU2MyA1NC45NTc4IC03LjM5NTggNTQuOTUzOTUgLTcuMzk4MDEgNTQuOTQ5NzcgLTcuMzk3MTMgNTQuOTQ3NSAtNy4zOTIyMiA1NC45NDQ5NyAtNy4zODUwNCA1NC45NDI3NCAtNy4zOTIwOCA1NC45NDEyNSAtNy40MDExMSA1NC45NDEwNiAtNy40MTU4OSA1NC45Mzk4NCAtNy40MjcxOSA1NC45MzU3NCAtNy40MzkyMyA1NC45Mjg3MSAtNy40NDcwNiA1NC45MjE3MSAtNy40NDc1NyA1NC45MTU4NiAtNy40NDUyIDU0LjkwODc3IC03LjQ0NTg2IDU0LjkwMjI1IC03LjQ0ODE4IDU0Ljg5NjA2IC03LjQ0OTExIDU0Ljg4OTQzIC03LjQ0NTU0IDU0Ljg4MzgyIC03LjQ0MTc3IDU0Ljg3NjM1IC03LjQ0MDY0IDU0Ljg3MTk2IC03LjQ0MDA2IDU0Ljg2NTM0IC03LjQ0NDc1IDU0Ljg1ODYxIC03LjQ0OTc0IDU0Ljg1Mzk1IC03LjQ1Mzc0IDU0Ljg0OTg3IC03LjQ1Njg1IDU0Ljg0NDk1IC03LjQ2MDAyIDU0LjgzODU1IC03LjQ2Mzc3IDU0LjgzMzY3IC03LjQ2NjYzIDU0LjgzMDM4IC03LjQ3NDI5IDU0LjgyNjcyIC03LjQ3ODQgNTQuODIyNTIgLTcuNDgyMTQgNTQuODE4MTUgLTcuNDkxODggNTQuODEyNDMgLTcuNTA1MjQgNTQuODA3MzcgLTcuNTE3OSA1NC44MDM1NSAtNy41Mjc1NCA1NC43OTgzOSAtNy41MzQxNSA1NC43OTExNSAtNy41MzYyMSA1NC43ODQzMSAtNy41MzcyIDU0Ljc3Nzc3IC03LjUzOTgyIDU0Ljc3MTk4IC03LjU0MjIyIDU0Ljc2NjAyIC03LjU0NDExIDU0Ljc1OTc4IC03LjU0MjMzIDU0Ljc1NTI2IC03LjU0MDc3IDU0Ljc1MjAxIC03LjUzNzQ4IDU0Ljc0ODExIC03LjUzNDQzIDU0Ljc0Mzc5IC03LjUzNjU0IDU0Ljc0MTUzIC03LjU0MTk1IDU0Ljc0MTc4IC03LjU0ODk2IDU0Ljc0Mjk5IC03LjU1NDY1IDU0Ljc0NDAyIC03LjU2MDM0IDU0Ljc0MzYxIC03LjU2NzExIDU0Ljc0Mzk1IC03LjU3MDAxIDU0Ljc0NzIzIC03LjU3MDQ0IDU0Ljc0OTU2IC03LjU3MTcxIDU0Ljc1MDU2IC03LjU3OTkzIDU0Ljc0NDk5IC03LjU4MTU1IDU0Ljc0MzUyIC03LjU4OTkxIDU0Ljc0Mjg2IC03LjU5ODU0IDU0Ljc0MDcxIC03LjYwNzI4IDU0Ljc0MjA3IC03LjYxNzc2IDU0Ljc0Njc1IC03LjYyMzk1IDU0Ljc1MTY4IC03LjYzMDY0IDU0Ljc0NDg3IC03LjY0MzA0IDU0LjczODg4IC03LjY1NzkxIDU0LjczMzM2IC03LjY2ODI0IDU0LjcyODY5IC03LjY3OTk2IDU0LjcyNjg2IC03LjY4OTg2IDU0LjcyNTIgLTcuNjk2MjggNTQuNzI1NTggLTcuNzA1ODUgNTQuNzIyNjIgLTcuNzEyNDEgNTQuNzE5MTkgLTcuNzE3MTYgNTQuNzE1OTIgLTcuNzI2MzcgNTQuNzEyMjEgLTcuNzMzMTUgNTQuNzA4ODYgLTcuNzQyMDMgNTQuNzA4MDUgLTcuNzUzNzkgNTQuNzEwNiAtNy43NjM5NiA1NC43MTQ4MyAtNy43Njk3OCA1NC43MTkyNCAtNy43NzU2MiA1NC43MjA3IC03Ljc4NTggNTQuNzIwMjQgLTcuNzk1NDEgNTQuNzI0MTQgLTcuODAyNDUgNTQuNzI5NDEgLTcuODA3NDcgNTQuNzM0OTUgLTcuODEyNjggNTQuNzM2MjIgLTcuODIwNzcgNTQuNzMzOCAtNy44MzMxMiA1NC43Mjc2MiAtNy44NDU1NiA1NC43MjA0MSAtNy44NTY0MiA1NC43MTMzNyAtNy44NjM2OCA1NC43MDYxNCAtNy44NjkxNSA1NC43MDMxMiAtNy44Nzg3IDU0LjcwMTkzIC03Ljg5MDEgNTQuNzAzNDYgLTcuODk4NTQgNTQuNzAyMTQgLTcuOTA1IDU0LjcwMTMgLTcuOTExMDYgNTQuNjk5MDkgLTcuOTE1MDMgNTQuNjk1NjggLTcuOTEzNiA1NC42OTA1IC03LjkwODc0IDU0LjY4OTMxIC03LjkwMjU0IDU0LjY5MDAyIC03Ljg5NTUzIDU0LjY4NjcgLTcuODkzOTQgNTQuNjgzMjkgLTcuODk2MTUgNTQuNjc5NTIgLTcuOTAxOTUgNTQuNjc2MTQgLTcuOTA3NjQgNTQuNjY4OTcgLTcuOTA1NjcgNTQuNjYzMjUgLTcuOTAwNzUgNTQuNjU5MDggLTcuODkxOTMgNTQuNjU2MjUgLTcuODc4MDggNTQuNjUzMjIgLTcuODYyNDcgNTQuNjQ5NTMgLTcuODU1MyA1NC42NDQwNSAtNy44NTI0NyA1NC42Mzc5NiAtNy44NTE0NiA1NC42MzM3MiAtNy44NDgwMiA1NC42MzIwMSAtNy44NDE0NSA1NC42MzM2MSAtNy44MzQ3MiA1NC42MzQxNCAtNy44MjczNiA1NC42MzQ4NiAtNy44MjE3NiA1NC42MzczOCAtNy44MTQ4NiA1NC42NDAxMyAtNy44MTA5NyA1NC42MzY3NCAtNy44MDMyMyA1NC42MzI4MyAtNy43OTg0MSA1NC42MzE1NCAtNy43OTA4IDU0LjYzMDc1IC03Ljc4MjE0IDU0LjYyNjU4IC03Ljc3NTA5IDU0LjYyMTEzIC03Ljc3MTgxIDU0LjYyMDA3IC03Ljc2NzA3IDU0LjYyMDk2IC03Ljc1OTkyIDU0LjYyMzE2IC03Ljc1NDA3IDU0LjYxOTAzIC03Ljc0NDAxIDU0LjYxOTQzIC03LjczNzQzIDU0LjYxNTk0IC03LjczMTU4IDU0LjYyMDQ5IC03LjcyODQxIDU0LjYyMzQgLTcuNzI0ODYgNTQuNjI2MDkgLTcuNzE2MjIgNTQuNjI5MjkgLTcuNzA4NzUgNTQuNjM0NzcgLTcuNzAzMTggNTQuNjI5OTkgLTcuNjk5MzYgNTQuNjIzNzkgLTcuNjk4NjcgNTQuNjE3NzggLTcuNjkzNTkgNTQuNjE2MjcgLTcuNjgyNjMgNTQuNjEyNTYgLTcuNjg1NDUgNTQuNjA1MDcgLTcuNzAwNjkgNTQuNjAyMTcgLTcuNzE3ODIgNTQuNTk3NDEgLTcuNzMxMzkgNTQuNTkzMzMgLTcuNzQ2MTUgNTQuNTg3MzkgLTcuNzUzNyA1NC41ODUxNiAtNy43NjE5MiA1NC41ODI2NSAtNy43NzA1OCA1NC41ODIzNCAtNy43NzczMSA1NC41ODI4OSAtNy43ODMwOCA1NC41ODExNyAtNy43OTIzMSA1NC41Nzg5NSAtNy43OTI5NiA1NC41NzQ0NCAtNy43ODkxNyA1NC41Njk0OCAtNy43ODkyNyA1NC41NjQ2MSAtNy43OTkxOCA1NC41NjUzNiAtNy44MDY2OSA1NC41NjM5OSAtNy44MTQyNSA1NC41NTg5MyAtNy44MjIyMiA1NC41NTI4OSAtNy44MjYxIDU0LjU0ODU4IC03LjgyNTgyIDU0LjU0NTMxIC03LjgyMTI1IDU0LjU0NDE0IC03LjgxNDc4IDU0LjUzOTM3IC03LjgyNDUyIDU0LjUzNDk0IC03LjgzODczIDU0LjUzNDY3IC03Ljg1MDIyIDU0LjUzMzQyIC03Ljg2Mjk4IDU0LjUzMzg2IC03Ljg3MzI4IDU0LjUzMzc5IC03Ljg4MjQzIDU0LjUzNDI3IC03Ljg4OTYgNTQuNTM1MjIgLTcuODk2NTEgNTQuNTM2NDYgLTcuOTAzMzEgNTQuNTM1NzggLTcuOTEgNTQuNTMzNjUgLTcuOTE3OSA1NC41MzMyNiAtNy45MjYwNSA1NC41MzMwMiAtNy45MzI5NiA1NC41MzU1NiAtNy45Mzc0MiA1NC41MzMyIC03Ljk0NDY1IDU0LjU0MDQxIC03Ljk1MTIxIDU0LjU0MzY4IC03Ljk1NzY2IDU0LjU0NjE2IC03Ljk2NTEyIDU0LjU0NDExIC03Ljk3MTQ2IDU0LjU0MzU5IC03Ljk3ODQ5IDU0LjU0MzkgLTcuOTg3MjIgNTQuNTQ1NTEgLTcuOTk3NTQgNTQuNTQzMTYgLTguMDAyNDEgNTQuNTM4NDkgLTguMDA0MSA1NC41MzM4NSAtOC4wMDUxNyA1NC41Mjg5OSAtOC4wMTA3OSA1NC41MjMzNyAtOC4wMTg4MSA1NC41MTgwMiAtOC4wMjY4NyA1NC41MTE5MSAtOC4wMzE1IDU0LjUwNTQ2IC04LjAzMzg4IDU0LjQ5ODM3IC04LjAzMjU1IDU0LjQ5MjQyIC04LjAzNTc4IDU0LjQ4Njg4IC04LjAzODQ0IDU0LjQ4Njg4IC04LjA0Nzc1IDU0LjQ4NzA4IC04LjA1ODY1IDU0LjQ4NzQyIC04LjA2ODc4IDU0LjQ4NzY1IC04LjA3ODkxIDU0LjQ4Njc4IC04LjA4OTAzIDU0LjQ4MzU3IC04LjA5MjgxIDU0LjQ3ODgxIC04LjA5Nzk1IDU0LjQ3NDcgLTguMTA4NjggNTQuNDcxODUgLTguMTE5NzggNTQuNDcwNzkgLTguMTMzOTYgNTQuNDY5NzcgLTguMTQ4NzggNTQuNDY4NDEgLTguMTYzMjMgNTQuNDY4NTUgLTguMTcxNiA1NC40NjY2MSAtOC4xNzE0NyA1NC40NjExOSAtOC4xNjQzNiA1NC40NTcxMSAtOC4xNTQxNSA1NC40NTU1NSAtOC4xNDQ5NSA1NC40NTI2MyAtOC4xNDA5IDU0LjQ0OTQ1IC04LjE0MjAxIDU0LjQ0NjE0IC04LjE0NzgxIDU0LjQ0MzM4IC04LjE1MzA5IDU0LjQzODkgLTguMTUxMDEgNTQuNDI5NjggLTguMTM1MDEgNTQuNDE1MTIgLTguMTA4MzIgNTQuNDA4ODcgLTguMDk1NDUgNTQuNDAzNzIgLTguMDg0NzkgNTQuMzkzNzMgLTguMDcxMjQgNTQuMzg0MDIgLTguMDYzMzkgNTQuMzc1OTMgLTguMDU2MDkgNTQuMzcxMDkgLTguMDQ4MTUgNTQuMzY1NzYgLTguMDQyNjYgNTQuMzYzNzggLTguMDM0MDYgNTQuMzYwNjMgLTguMDI3MzIgNTQuMzYwOTYgLTguMDE4NTYgNTQuMzYyMjIgLTguMDA3OSA1NC4zNjA3NyAtNy45OTgyNyA1NC4zNTMwOCAtNy45OTM4NyA1NC4zNDc2NSAtNy45ODY2NSA1NC4zNDAyNiAtNy45NzQyOCA1NC4zMjkxNiAtNy45NjQ2OSA1NC4zMTg3OCAtNy45NTcyNiA1NC4zMTIzIC03Ljk1NjQ4IDU0LjMwNTgyIC03Ljk1MzUzIDU0LjI5OTQgLTcuOTQ5NjMgNTQuMzAxOTUgLTcuOTM4NzEgNTQuMzA0OTggLTcuOTI3MzYgNTQuMzAzMzUgLTcuOTE1MzYgNTQuMjk3NzEgLTcuOTEwNDkgNTQuMjk4MzIgLTcuOTAzNTIgNTQuMzAxMDggLTcuODk1OTEgNTQuMzAwNiAtNy44ODY1OCA1NC4yOTcxNSAtNy44Nzk5OCA1NC4yOTYwMyAtNy44NzA4OSA1NC4yOTU3NiAtNy44NjExMyA1NC4yOTA3OCAtNy44NjE1MyA1NC4yODQ5MiAtNy44NjUyNSA1NC4yNzc4IC03Ljg3MDIyIDU0LjI3MTY2IC03Ljg2Nzc5IDU0LjI2NzYxIC03Ljg2NjI3IDU0LjI2NDAyIC03Ljg2MDc2IDU0LjI1NjkgLTcuODU3OSA1NC4yNDM0MiAtNy44NTU2OSA1NC4yMzM2MiAtNy44NTMyMyA1NC4yMjc0MyAtNy44NTIwNiA1NC4yMjQ0NiAtNy44NTI3NCA1NC4yMTk4NSAtNy44NTY5NSA1NC4yMTM2NyAtNy44NDQwMyA1NC4yMDg0NSAtNy44MzA0OCA1NC4yMDI2NCAtNy44MTE1MSA1NC4yMDgyMyAtNy44MDE5NiA1NC4yMTA0NiAtNy43OTM4MSA1NC4yMTE1NCAtNy43NzY3NCA1NC4yMTE4MiAtNy43NjQ4OCA1NC4yMTIzNCAtNy43NTU3MiA1NC4yMTQxMiAtNy43NDUzMiA1NC4yMTMzOSAtNy43MzMxNyA1NC4yMDc2NyAtNy43MzU4MiA1NC4yMDQ5OCAtNy43MDkwMiA1NC4yMDkyNiAtNy42ODc5OSA1NC4yMDc1NyAtNy42Nzg4NSA1NC4xOTgwNCAtNy42ODI0MiA1NC4xOTM4MyAtNy42NzYzNiA1NC4xODkwOSAtNy42NzM2OSA1NC4xODU0MiAtNy42NzM1MSA1NC4xODM4IC03LjY2ODkxIDU0LjE4ODI5IC03LjY2MzExIDU0LjE4OTE5IC03LjY1MzY4IDU0LjE4NDk0IC03LjY0NDE5IDU0LjE4MDA1IC03LjYzODg0IDU0LjE3Nzg3IC03LjYzMDI3IDU0LjE3MjY0IC03LjYyNDQxIDU0LjE2Njc3IC03LjYyMTkxIDU0LjE2MjE5IC03LjYxOTg4IDU0LjE1OTE4IC03LjYxMzU0IDU0LjE1NzgzIC03LjYwODk4IDU0LjE1MjE0IC03LjYwNDk0IDU0LjE0OTQ0IC03LjU5NzcgNTQuMTQ4IC03LjU4NzA1IDU0LjE0NzgzIC03LjU3NjU1IDU0LjE0MTgyIC03LjU3MTUzIDU0LjEzNjY5IC03LjU2OTMgNTQuMTMzMjYgLTcuNTYzODYgNTQuMTI4ODUgLTcuNTU2MDcgNTQuMTI0NTkgLTcuNTQ4NjQgNTQuMTI0MTMgLTcuNTQwNjIgNTQuMTI2OTkgLTcuNTM2MTYgNTQuMTMwMTMgLTcuNTMxNzIgNTQuMTM1NjMgLTcuNTIzODYgNTQuMTMyMTkgLTcuNTIwNzUgNTQuMTMwNjEgLTcuNTE1MDcgNTQuMTI4OTQgLTcuNTA1MzMgNTQuMTI3NDUgLTcuNDk3NjQgNTQuMTI1MTUgLTcuNDg5NjggNTQuMTI0MTUgLTcuNDc5MDkgNTQuMTI1NjYgLTcuNDcxOTUgNTQuMTI5MSAtNy40NjY5MyA1NC4xMzM5IC03LjQ2NDExIDU0LjEzODg0IC03LjQ2MDM5IDU0LjE0MjY1IC03LjQ1NTI1IDU0LjE0NjAyIC03LjQ0NzcyIDU0LjE0OTE3IC03LjQ0NDcgNTQuMTUyNjggLTcuNDQwMyA1NC4xNTM1NiAtNy40MzA3MyA1NC4xNTUwOCAtNy40MjEzOSA1NC4xNTY1NyAtNy40MTIzNiA1NC4xNTcwMSAtNy40MDQ2MiA1NC4xNTIxMyAtNy40MDUwNyA1NC4xNDgwNiAtNy40MDk4NyA1NC4xNDQ5NSAtNy40MTM4NCA1NC4xNDEyMiAtNy40MTcxMSA1NC4xMzg2NiAtNy40MTUwNiA1NC4xNDAwNCAtNy40MDY2NCA1NC4xNDExNiAtNy4zOTc3MyA1NC4xMzkzOCAtNy4zOTAzMSA1NC4xMzg5OSAtNy4zODQ0OSA1NC4xNDExNSAtNy4zNzkxNCA1NC4xNDI1IC03LjM3MzUzIDU0LjE0MTMzIC03LjM2OTAxIDU0LjEzNzgzIC03LjM3MzI1IDU0LjEzMzg3IC03LjM3OTk0IDU0LjEzMDU1IC03LjM4NDY1IDU0LjEyNjQ4IC03LjM4NzI2IDU0LjEyMzQ4IC03LjM4ODc2IDU0LjEyMTkxIC03LjM4NDk1IDU0LjEyNDY1IC03LjM3NjcyIDU0LjEyODA1IC03LjM3MjMyIDU0LjEzMTE3IC03LjM2ODM0IDU0LjEzMjcgLTcuMzYwNzMgNTQuMTMwNjQgLTcuMzUyOTcgNTQuMTI2ODUgLTcuMzQ5NjcgNTQuMTIyODkgLTcuMzQ5OCA1NC4xMTg2NSAtNy4zNDgxNyA1NC4xMTgxNiAtNy4zNDA2IDU0LjExODk3IC03LjMzNDYzIDU0LjEyMTQgLTcuMzMxNDkgNTQuMTI0NTcgLTcuMzI4MyA1NC4xMjQwNSAtNy4zMjM0MSA1NC4xMTg0OCAtNy4zMjA2NiA1NC4xMTY5MSAtNy4zMTY1NiA1NC4xMTU1MyAtNy4zMTQ2NyA1NC4xMTU1MyAtNy4zMTQ2NyA1NC4xMTk2OSAtNy4zMDk1OCA1NC4xMjQyNyAtNy4zMDc4MSA1NC4xMzA2IC03LjMwOTcxIDU0LjEzNTAzIC03LjMxMzU0IDU0LjEzNzA3IC03LjMxNTA1IDU0LjE0MDEyIC03LjMxNjg1IDU0LjEzNjY2IC03LjMyNDUyIDU0LjE0MDg5IC03LjMzMDY4IDU0LjE0NDYyIC03LjMzMTQ3IDU0LjE0ODEyIC03LjMyOTEgNTQuMTUyMjMgLTcuMzI1MjUgNTQuMTU1NTcgLTcuMzIyMjQgNTQuMTU5NzQgLTcuMzE5MTYgNTQuMTYzMTIgLTcuMzEzMTkgNTQuMTY4NjQgLTcuMzA0NSA1NC4xNzA5NyAtNy4yOTUxMSA1NC4xNzE5OCAtNy4yODY0OCA1NC4xNzA0NCAtNy4yNzk3MiA1NC4xNjU1NiAtNy4yNzgwMiA1NC4xNjAyNCAtNy4yODAwMiA1NC4xNTYzMSAtNy4yODE4NiA1NC4xNTI0OCAtNy4yODM1NyA1NC4xNDk0NiAtNy4yODc1NiA1NC4xNDUyNSAtNy4yOTM1OSA1NC4xNDMzIC03LjI4NzczIDU0LjE0MDQ3IC03LjI4MzE2IDU0LjEzNzk2IC03LjI4MzkzIDU0LjEzNjE5IC03LjI4Njg0IDU0LjEzNTQ3IC03LjI5MDY1IDU0LjEzNjE1IC03LjI5NjE5IDU0LjEzNTU0IC03LjMwMTg5IDU0LjEzNTAyIC03LjMwNTI3IDU0LjEyODI1IC03LjMwMDUyIDU0LjEyMzczIC03LjI5OTE2IDU0LjEyMTYyIC03LjI5NDY3IDU0LjEyMTUxIC03LjI4ODU4IDU0LjEyNDMyIC03LjI4MTEzIDU0LjEyODkzIC03LjI3NDA0IDU0LjEzMzI5IC03LjI2ODgyIDU0LjEzNjY4IC03LjI2MjUzIDU0LjEzOTg2IC03LjI1OTAyIDU0LjE0Mzc2IC03LjI1Nzc4IDU0LjE0ODA1IC03LjI1NDEgNTQuMTUyNTkgLTcuMjUwOTIgNTQuMTU1OCAtNy4yNDg4MiA1NC4xNTkzMyAtNy4yNDc4NSA1NC4xNjQ2MSAtNy4yNDg4MyA1NC4xNjY1NiAtNy4yNDE4OSA1NC4xNzAwMSAtNy4yMzY1MyA1NC4xNzM5NCAtNy4yMzg5MSA1NC4xNzcyNiAtNy4yNDQ5NCA1NC4xODI4MiAtNy4yNDk4NiA1NC4xODk2NCAtNy4yNTEzMyA1NC4xOTQ3NCAtNy4yNDgwNiA1NC4xOTk2NyAtNy4yNDg2OCA1NC4yMDQwNyAtNy4yNDY0MSA1NC4yMDY2IC03LjI0NTMzIDU0LjIwNzg4IC03LjI0MTI2IDU0LjIwMTEyIC03LjI0MjQ1IDU0LjE5NzA1IC03LjI0MTE2IDU0LjE5Mzg2IC03LjIzODQxIDU0LjE5Nzc0IC03LjIzMTU0IDU0LjIwMzcyIC03LjIyNjgyIDU0LjIwODYzIC03LjIyNTcgNTQuMjEyODUgLTcuMjIzNTggNTQuMjE1NzcgLTcuMjE1MzMgNTQuMjE0OTggLTcuMjAzNjUgNTQuMjE2NSAtNy4xOTYwMiA1NC4yMTk3IC03LjE5MTg4IDU0LjIyNDA5IC03LjE4ODA0IDU0LjIyMTI1IC03LjE4MzQ2IDU0LjIxOTYxIC03LjE3MjMxIDU0LjIxOTc4IC03LjE1OTUgNTQuMjIzNDMgLTcuMTUxNSA1NC4yMjY4OSAtNy4xNDc1NCA1NC4yMzI4MyAtNy4xNDU5MyA1NC4yMzg2NyAtNy4xNDQ2IDU0LjI0MzM5IC03LjE0ODAxIDU0LjI0ODQxIC03LjE1MDgxIDU0LjI1MTU0IC03LjE0MzgzIDU0LjI1NjI0IC03LjE0MzQ3IDU0LjI2MjE1IC03LjE1MTI0IDU0LjI2NzU5IC03LjE1MjcgNTQuMjcxMzIgLTcuMTU3NjkgNTQuMjcxNjEgLTcuMTY0MTYgNTQuMjcxMDYgLTcuMTcwODIgNTQuMjcyODIgLTcuMTc2NjggNTQuMjc3MzggLTcuMTc5NTkgNTQuMjgyODIgLTcuMTc2ODIgNTQuMjg3NTkgLTcuMTg1NDEgNTQuMjkxNTEgLTcuMTk2ODUgNTQuMjk1NDMgLTcuMjA4MzIgNTQuMzAyMzMgLTcuMjA3OTEgNTQuMzA2MTcgLTcuMTk3NTcgNTQuMzA4OTcgLTcuMTk0IDU0LjMxMTEyIC03LjE4ODYzIDU0LjMwOTc5IC03LjE4MTEgNTQuMzA4NzQgLTcuMTczNDQgNTQuMzE3MTkgLTcuMTczMjIgNTQuMzI1NjggLTcuMTc0MjcgNTQuMzMxNDIgLTcuMTc3MTggNTQuMzM2MyAtNy4xODMyNyA1NC4zMzk5NyAtNy4xNzY2NyA1NC4zMzQ0OCAtNy4xNjc2NyA1NC4zMzQ3NyAtNy4xNjA2NSA1NC4zMzMyMSAtNy4xNTE5OSA1NC4zMzQ3OCAtNy4xNDMwOCA1NC4zMzk0MyAtNy4xMzUwMSA1NC4zNDMxMSAtNy4xMjYwNiA1NC4zNDY2NCAtNy4xMTU5OCA1NC4zNTAwNiAtNy4xMDg3IDU0LjM1MzE4IC03LjEwMjAyIDU0LjM1NzI1IC03LjEwMTI2IDU0LjM2NDI3IC03LjEwNDQ3IDU0LjM2ODc3IC03LjEwMDE1IDU0LjM3MTYzIC03LjA5Mjk3IDU0LjM3NDM0IC03LjA4NzMzIDU0LjM3OTA5IC03LjA3ODggNTQuMzg3ODYgLTcuMDcwNzYgNTQuMzk0NTEgLTcuMDY1MjkgNTQuMzk4ODggLTcuMDU5MzcgNTQuNDA1MiAtNy4wNTUyNiA1NC40MDk1MiAtNy4wNTAyOSA1NC40MTM2IC03LjA0MjYxIDU0LjQxNTI3IC03LjAzNzYzIDU0LjQxNzgxIC03LjAyOTI5IDU0LjQxMjg5IC03LjAxNTAxIDU0LjQwODE4IC03LjAwNDU1IDU0LjQwNDE2IC02Ljk5NzQ3IDU0LjQwMzQyIC02Ljk5MDk1IDU0LjQwNDQ0IC02Ljk4ODIzIDU0LjQwNjc3IC02Ljk4MDgyIDU0LjQwMjkgLTYuOTc4NjIgNTQuMzk2NzggLTYuOTY5MSA1NC4zOTI5MSAtNi45NTgxMSA1NC4zODk1MiAtNi45NTExMSA1NC4zODcyMiAtNi45NDIwNiA1NC4zODIyMyAtNi45Mzg0NyA1NC4zODMxOCAtNi45MzA5IDU0LjM4MjM4IC02LjkyNTYyIDU0LjM4MDUyIC02LjkzMDg5IDU0LjM3NzU5IC02LjkzMzIxIDU0LjM3MzgxIC02LjkzMTUyIDU0LjM3NCAtNi45MjIxMiA1NC4zNzQ0IC02LjkxNDE2IDU0LjM2OTk5IC02LjkwOTg3IDU0LjM2NDQ2IC02LjkwODI5IDU0LjM1OTY0IC02LjkwNzI1IDU0LjM1NDc1IC02LjkwNTkgNTQuMzUxMjIgLTYuOTA3MDQgNTQuMzQ3NTYgLTYuOTAyMDYgNTQuMzQ3NiAtNi44OTE3MSA1NC4zNDM1OCAtNi44Nzk5NCA1NC4zMzkxNyAtNi44Nzc4NyA1NC4zMzQ1IC02Ljg3Mjc4IDU0LjMzMTcgLTYuODY3MTIgNTQuMzMwNTEgLTYuODYwMjQgNTQuMzIyMDggLTYuODYyNTQgNTQuMzE1NTUgLTYuODYwNTQgNTQuMzExNjkgLTYuODU2MTYgNTQuMzA2NDYgLTYuODU4NTMgNTQuMzAyNSAtNi44NTkwMiA1NC4yOTQ5NyAtNi44NTkwOCA1NC4yODk3NyAtNi44NjA5OSA1NC4yODg3OCAtNi44NjczIDU0LjI4NzAyIC02Ljg3NjggNTQuMjgxNjYgLTYuODc1NzIgNTQuMjc4MjggLTYuODY4NDQgNTQuMjcxNzYgLTYuODU5MzggNTQuMjY4MjMgLTYuODUzNDkgNTQuMjY0OTEgLTYuODQ2ODMgNTQuMjYzNTMgLTYuODM1NTYgNTQuMjU5MDEgLTYuODI3MDUgNTQuMjUyMTUgLTYuODI2MjYgNTQuMjQ2MSAtNi44MjYyIDU0LjI0MDcyIC02LjgyMTAzIDU0LjIzNTE2IC02LjgxNTM5IDU0LjIyOTI0IC02LjgxNDI0IDU0LjIyNDUyIC02LjgxMzA4IDU0LjIyMzA1IC02Ljc5NDQ0IDU0LjIxNzYxIC02Ljc5NTA4IDU0LjIxMTY5IC02Ljc5MTc0IDU0LjIwOTAzIC02Ljc4NDcyIDU0LjIwNTEzIC02Ljc3NjYxIDU0LjIwMDg4IC02Ljc3MjUzIDU0LjE5ODYyIC02Ljc3MTY0IDU0LjE5ODczIC02Ljc1OTQ2IDU0LjE5ODc3IC02Ljc1MTQ5IDU0LjE5NDI5IC02Ljc0NjE0IDU0LjE4NzI3IC02Ljc0MzAxIDU0LjE4MTYyIC02Ljc0MjA2IDU0LjE3OTE4IC02Ljc0MTE2IDU0LjE3ODQzIC02LjczNDM0IDU0LjE4MDU2IC02LjcyODk3IDU0LjE4MjQ4IC02LjcyNDQ5IDU0LjE4MjYyIC02LjcyMDc2IDU0LjE4ODAzIC02LjcxNTkgNTQuMTkzOCAtNi43MTM4OSA1NC4xOTc4NiAtNi43MDg1NyA1NC4xOTg5MyAtNi43MDE5NiA1NC4yMDAwNyAtNi42OTM4IDU0LjE5Njg3IC02LjY4ODc2IDU0LjE5MjkzIC02LjY4MTYgNTQuMTkxMDQgLTYuNjY4NTcgNTQuMTg0OTMgLTYuNjU1NzEgNTQuMTc1OTggLTYuNjQ0ODcgNTQuMTY2MDcgLTYuNjM3OTkgNTQuMTU4NDcgLTYuNjM1MjggNTQuMTUxMzUgLTYuNjM0MzQgNTQuMTQ0NjYgLTYuNjM2ODkgNTQuMTM4MzggLTYuNjQwMDkgNTQuMTMzMjIgLTYuNjQxMDggNTQuMTI4MjggLTYuNjQ1NTMgNTQuMTI0NTYgLTYuNjQ5MTcgNTQuMTIyMjIgLTYuNjUwNDggNTQuMTIyNjMgLTYuNjU2NjEgNTQuMTIxMjEgLTYuNjYyNTQgNTQuMTE1NDUgLTYuNjYyMDUgNTQuMTA3NDYgLTYuNjUyNzUgNTQuMTAwNDcgLTYuNjQ4NTQgNTQuMDk2NTYgLTYuNjQ3NjQgNTQuMDk1MzcgLTYuNjUyNSA1NC4wOTQ3IC02LjY2MDIxIDU0LjA5MTU0IC02LjY2MTQyIDU0LjA4NDI4IC02LjY1OTU0IDU0LjA3NzczIC02LjY2MDM2IDU0LjA3NDE0IC02LjY2MzI0IDU0LjA2NzMzIC02LjY2MzU4IDU0LjA2MDExIC02LjY1ODI2IDU0LjA1NzczIC02LjY0ODM1IDU0LjA1MDU4IC02LjY0MTMyIDU0LjA0Mjg3IC02LjYzMTc1IDU0LjAzODM2IC02LjYyNzM2IDU0LjAzODc1IC02LjYxOTYxIDU0LjA0Mjc1IC02LjYxMzA0IDU0LjA0NDM5IC02LjYwNjA1IDU0LjA0NTQ5IC02LjYwMzU0IDU0LjA0NTk5IC02LjYwMDAxIDU0LjA1MDY0IC02LjU5NTg0IDU0LjA1NDczIC02LjU5MTkyIDU0LjA1NjAzIC02LjU4OTI3IDU0LjA1MzY0IC02LjU4NDQ5IDU0LjA1MTcyIC02LjU3Njk2IDU0LjA1MDgxIC02LjU2NzA1IDU0LjA0OTkgLTYuNTU5NDggNTQuMDQ5NzMgLTYuNTU0MzEgNTQuMDUwNzIgLTYuNTQ5NzUgNTQuMDUzNzYgLTYuNTQyMjkgNTQuMDU3MjMgLTYuNTM1MTggNTQuMDU5MTQgLTYuNTMwNTYgNTQuMDU3NzQgLTYuNTIxMzggNTQuMDU0NTcgLTYuNTE1MjcgNTQuMDUxNDggLTYuNTA5NjUgNTQuMDU2MjIgLTYuNTA3ODIgNTQuMDYyOTMgLTYuNTA0OTUgNTQuMDYxMDggLTYuNDkzMDcgNTQuMDYzNCAtNi40ODcwOSA1NC4wNjU3OCAtNi40Nzk4NiA1NC4wNjcwMiAtNi40NzM2IDU0LjA2OTcgLTYuNDcwNDcgNTQuMDcyOTQgLTYuNDc2ODkgNTQuMDc1NjEgLTYuNDc5MzUgNTQuMDc5MTkgLTYuNDc5MjYgNTQuMDc2NTEgLTYuNDY3MjkgNTQuMDczNTYgLTYuNDU3NzkgNTQuMDY3MTIgLTYuNDUwNzEgNTQuMDYwODkgLTYuNDQzMDUgNTQuMDU1ODIgLTYuNDQxMTIgNTQuMDU4NDQgLTYuNDM3MTkgNTQuMDYwMDQgLTYuNDI4NzggNTQuMDYxNzkgLTYuNDIwNzIgNTQuMDYzMTEgLTYuNDEyMTIgNTQuMDYwNTIgLTYuMzk5ODUgNTQuMDU5OTQgLTYuMzkwOTIgNTQuMDYwNDYgLTYuMzg2MyA1NC4wNjMzNCAtNi4zODMwMiA1NC4wNjY0NiAtNi4zODAwNyA1NC4wNjk0NCAtNi4zNzY0OSA1NC4wNjk2IC02LjM3MTk5IDU0LjA2OTUyIC02LjM2NjM2IDU0LjA3Mzg3IC02LjM2MjkzIDU0LjA4MDI2IC02LjM2MTA5IDU0LjA4NjQ1IC02LjM2MjA1IDU0LjA5MDEzIC02LjM2MTgxIDU0LjA5NjI1IC02LjM2MjQ0IDU0LjEwMTIyIC02LjM2NDUyIDU0LjEwNjEgLTYuMzY2NzMgNTQuMTExMTggLTYuMzY1NTUgNTQuMTE0NzggLTYuMzYyMzQgNTQuMTE1NzQgLTYuMzU2MDQgNTQuMTEzODggLTYuMzQ4OTkgNTQuMTExNjQgLTYuMzQ1MDEgNTQuMTEwMjYgLTYuMzM3MjIgNTQuMTA2NDggLTYuMzMyOTQgNTQuMTAxNTUgLTYuMzMyMjcgNTQuMDk1NDEgLTYuMzMxOTYgNTQuMDkyNiAtNi4zMjg1NCA1NC4wOTI3OSAtNi4zMjA3NyA1NC4wOTM5NiAtNi4zMTM0MSA1NC4wOTgzOCAtNi4zMTAxMiA1NC4xMDI3OCAtNi4zMDc5MiA1NC4xMDY5NCAtNi4zMDE4IDU0LjExMDU1IC02LjI5MDMyIDU0LjEwNzUgLTYuMjc3NTMgNTQuMTAyMDcgLTYuMjY5OTQgNTQuMTAyMDcgLTYuMjY5OTQgNTQuMDk4NDUgLTYuMjY2NjQgNTQuMDk1MSAtNi4yNjI4NyA1NC4wOTE1NyAtNi4yNTg5MyA1NC4wODk1MyAtNi4yNTQzNSA1NC4wODc3NCAtNi4yNTA1OSA1NC4wODQ3OSAtNi4yNDgyNyA1NC4wODAwOSAtNi4yNDM3NCA1NC4wNzQ5IC02LjIzNzMgNTQuMDcxNTIgLTYuMjI4ODYgNTQuMDY5NDIgLTYuMjIzNjYgNTQuMDY4MTcgLTYuMjE0NDkgNTQuMDYzODMgLTYuMjA0ODcgNTQuMDU5NDEgLTYuMTk0OTIgNTQuMDU0OTMgLTYuMTg5MTkgNTQuMDUwMTQgLTYuMTg3MTUgNTQuMDQ2MDUgLTYuMTg1OTcgNTQuMDQyODYgLTYuMTgyODUgNTQuMDQyMzcgLTYuMTc4NDQgNTQuMDQxNTEgLTYuMTc0MTUgNTQuMDM5MTkgLTYuMTcyMjEgNTQuMDM3MzUgLTYuMTY5NTMgNTQuMDM3MzggLTYuMTYzNjIgNTQuMDM0NzcgLTYuMTU2NTEgNTQuMDMxMjQgLTYuMTUwMSA1NC4wMjg0NSAtNi4xNDU3OCA1NC4wMzA3MiAtNi4xNDEwMiA1NC4wMzM2MiAtNi4xMzY2NCA1NC4wMzU5NSAtNi4xMzI5OCA1NC4wMzQyMSAtNi4xMzAwMSA1NC4wMjg2MyAtNi4xMjk2MSA1NC4wMjQzMiAtNi4xMjk2NiA1NC4wMTgyNSAtNi4xMjc2NiA1NC4wMTQxNCAtNi4xMjE2NSA1NC4wMTEzOSAtNi4xMTYxIDU0LjAwOTQ1IC02LjExMTI0IDU0LjAwNDk3IC02LjExMDk2IDU0LjAwMzI0IC02LjEwNzg0IDU0LjAwMTAzIC02LjEwNTI5IDUzLjk5ODIzIC02LjEwNjcyIDUzLjk5Njc2IC02LjEwOTg1IDUzLjk5MjQgLTYuMTE2NTggNTMuOTkwMyAtNi4xMjQ0NSA1My45ODcyOCAtNi4xMzI0IDUzLjk4NDkyIC02LjEzNzE0IDUzLjk4MjI3IC02LjEzOTUzIDUzLjk4MDA3IC02LjEzOTQ3IDUzLjk3OTU1IC02LjE0MTQ0IDUzLjk4MDk5IC02LjE0MjM1IDUzLjk4MTAzIC02LjE0NjQgNTMuOTgxMzcgLTYuMTUgNTMuOTc4MzggLTYuMTU3MDIgNTMuOTc2NzkgLTYuMTYzMjQgNTMuOTc2NTggLTYuMTY5MTIgNTMuOTc3MDYgLTYuMTczOTggNTMuOTc4NjkgLTYuMTc0NzggNTMuOTc5OTMgLTYuMTc2MTQgNTMuOTgwMjYgLTYuMTc5NzQgNTMuOTc5NDEgLTYuMTgzMjMgNTMuOTc4MTEgLTYuMTg2MzcgNTMuOTgwMjIgLTYuMTkxNTUgNTMuOTc5MTkgLTYuMTk0ODcgNTMuOTc4OTIgLTYuMTk5OTggNTMuOTc5NzggLTYuMjA0MjUgNTMuOTgxMjkgLTYuMjA1NjUgNTMuOTgyMjQgLTYuMjA3NDUgNTMuOTgyMTggLTYuMjExODEgNTMuOTgyNDQgLTYuMjE0NzggNTMuOTg1MjIgLTYuMjE5MTEgNTMuOTg1NDUgLTYuMjI1OTcgNTMuOTg3MDEgLTYuMjI4NDUgNTMuOTg2ODQgLTYuMjMzNDIgNTMuOTg2MzkgLTYuMjM1NTUgNTMuOTg1MDEgLTYuMjQxMzEgNTMuOTg3MzkgLTYuMjQxMjUgNTMuOTg3NCAtNi4yNDYyMSA1My45ODg3MSAtNi4yNTMzNSA1My45OTE1IC02LjI1NzgyIDUzLjk5MzQ2IC02LjI1OTQzIDUzLjk5NDQyIC02LjI2NTc1IDUzLjk5NTA5IC02LjI3MDMyIDUzLjk5Njg4IC02LjI3NDA4IDUzLjk5OTY1IC02LjI3ODg4IDU0LjAwMTEyIC02LjI4NDE2IDU0LjAwMzExIC02LjI4OTk1IDU0LjAwNjc5IC02LjI5NDY4IDU0LjAwODkgLTYuMjk5ODggNTQuMDEwMzggLTYuMzA0NTQgNTQuMDExNCAtNi4zMDk2MiA1NC4wMTIyNyAtNi4zMTM0NSA1NC4wMTIyMyAtNi4zMTcxNyA1NC4wMTQ3NSAtNi4zMjExNyA1NC4wMTIxNiAtNi4zMzcwOCA1NC4wMTEzOSAtNi4zNDU4OCA1NC4wMTI0NyAtNi4zNTE3MSA1NC4wMTM2NSAtNi4zNDkzNyA1NC4wMTQ4NiAtNi4zNDg4NyA1NC4wMTY0MiAtNi4zNTEzNyA1NC4wMTc1NyAtNi4zNTUyMyA1NC4wMjA4NiAtNi4zNTgwNiA1NC4wMjQyMiAtNi4zNjE2NyA1NC4wMjcyIC02LjM2MzA3IDU0LjAyODQ1IC02LjM2MDQ0IDU0LjAyOTE1IC02LjM2MjE4IDU0LjAyODQ1IC02LjM2NjE2IDU0LjAyNzAxIC02LjM2ODAyIDU0LjAyNDk5IC02LjM2ODEzIDU0LjAyMjcxIC02LjM2NTI1IDU0LjAyMDkxIC02LjM2NDQ0IDU0LjAyMDA4IC02LjM2NzE1IDU0LjAxOTI4IC02LjM3MTc0IDU0LjAxODEyIC02LjM3MDUzIDU0LjAxODM1IC02LjM2NjgzIDU0LjAxODU0IC02LjM2Mzg4IDU0LjAxNjYgLTYuMzYxNjUgNTQuMDE0MjggLTYuMzYyNjYgNTQuMDEyMzQgLTYuMzY1NTggNTQuMDEyNTkgLTYuMzcxNTIgNTQuMDEyNjIgLTYuMzc4MiA1NC4wMTIyOCAtNi4zODQ4NyA1NC4wMTQyIC02LjM4NTA3IDU0LjAxNDUgLTYuMzg3MTEgNTQuMDE2NCAtNi4zODc3OSA1NC4wMTggLTYuMzg5MzUgNTQuMDE3NjkgLTYuMzkyNzQgNTQuMDE2NDQgLTYuMzk2OTcgNTQuMDE0MzkgLTYuMzk3ODQgNTQuMDEyNjkgLTYuMzk5MjEgNTQuMDEyMTcgLTYuMzk1NTggNTQuMDEyMjcgLTYuMzkyOCA1NC4wMTE3MSAtNi4zOTA3MiA1NC4wMTA1IC02LjM4ODczIDU0LjAxMDcgLTYuMzg1NjMgNTQuMDA2MzggLTYuMzY3OTEgNTQuMDA2MjMgLTYuMzY0NDcgNTQuMDA2NTcgLTYuMzYwMzEgNTQuMDA3NiAtNi4zNTcxNSA1NC4wMDc0NSAtNi4zNTM1NiA1NC4wMDYyMSAtNi4zNDk4NiA1NC4wMDQ5MiAtNi4zNDczOCA1NC4wMDI5OSAtNi4zNDIzNiA1My45OTk3NSAtNi4zNDA0OCA1My45OTY0NiAtNi4zNDA0NSA1My45OTM4NCAtNi4zNDE4OCA1My45OTE5NyAtNi4zNDU0MyA1My45OTAwMiAtNi4zNDg2NSA1My45ODc5NyAtNi4zNDk2OCA1My45ODY1IC02LjM1MjE2IDUzLjk4NjIxIC02LjM1NzczIDUzLjk4MTk2IC02LjM2MTE4IDUzLjk4MzIgLTYuMzY0ODkgNTMuOTc5NTMgLTYuMzY1MjkgNTMuOTc4MjYgLTYuMzYyMiA1My45NzM2MyAtNi4zNjA5NCA1My45NzA3MiAtNi4zNjAxNyA1My45NjcyOCAtNi4zNjE1NCA1My45NjI5OCAtNi4zNjM4OSA1My45NTk4OSAtNi4zNjU1OCA1My45NTYwOCAtNi4zNjcwNiA1My45NTYyMiAtNi4zNzA2NCA1My45NTUxMyAtNi4zNzc5OSA1My45NTI5MyAtNi4zNzgwNyA1My45NTIxMiAtNi4zODAwMSA1My45NDYwOSAtNi4zNzk1NCA1My45NDM2NyAtNi4zODA2OSA1My45NDIxIC02LjM3ODM1IDUzLjk0MjcxIC02LjM3NjcxIDUzLjk0NDE5IC02LjM3MzYgNTMuOTQwMzggLTYuMzcyNDMgNTMuOTM4MDggLTYuMzcyOCA1My45MzU2OCAtNi4zNzMzMyA1My45MzM3NyAtNi4zNzI4MyA1My45MzEyIC02LjM3MDM5IDUzLjkyNjc4IC02LjM3MTAxIDUzLjkyNDAxIC02LjM3Mzk4IDUzLjkyMDYyIC02LjM3NjQzIDUzLjkxNzU0IC02LjM3NTE4IDUzLjkxNDQ0IC02LjM3MjUzIDUzLjkwOTY3IC02LjM2OTcxIDUzLjkwNTE0IC02LjM2ODQ2IDUzLjkwMjA1IC02LjM2NzUzIDUzLjg5OTA0IC02LjM2NDc0IDUzLjg5NjM3IC02LjM1OTggNTMuODkyODEgLTYuMzU2NzkgNTMuODg3NTUgLTYuMzUyNTMgNTMuODg1MjMgLTYuMzUwNTkgNTMuODgzNyAtNi4zNDQ4NCA1My44ODA5MyAtNi4zNDAyMSA1My44Nzg1NyAtNi4zMzcwMiA1My44NzY1NSAtNi4zMzQzMyA1My44NzQ1MiAtNi4zMjcxNSA1My44NzM5NCAtNi4zMjI4OSA1My44NzQ2OSAtNi4zMTk3MiA1My44NzYyIC02LjMxNiA1My44Nzc5NSAtNi4zMTMzOCA1My44Nzg4NCAtNi4zMDYxOSA1My44NzY3NyAtNi4yOTc0NCA1My44NzM5NyAtNi4yOTYwOCA1My44NzIwOCAtNi4yOTUyNSA1My44NzEyOSAtNi4yODkxMyA1My44NzAwNCAtNi4yODUyOCA1My44Njg4MiAtNi4yODA5NyA1My44Njg3NCAtNi4yNzUyMyA1My44NzA0NCAtNi4yNjg3NCA1My44Njk3NCAtNi4yNjUyNSA1My44NjY3IC02LjI2MjkzIDUzLjg2NDU2IC02LjI1ODM4IDUzLjg2MzA4IC02LjI1MzU4IDUzLjg2Mjc2IC02LjI0OTk3IDUzLjg2MzYyIC02LjI0NjE5IDUzLjg2MjEyIC02LjI0MTg2IDUzLjg2MDQxIC02LjIzODQyIDUzLjg1NzcyIC02LjIzOTM5IDUzLjg1Njg4IC02LjI0MjI1IDUzLjg1NDczIC02LjI0MzQ0IDUzLjg1MjQ2IC02LjI0NTM3IDUzLjg1MDIxIC02LjI0OTY1IDUzLjg0NzU4IC02LjI1MzcyIDUzLjg0MzggLTYuMjU0NDIgNTMuODM5OSAtNi4yNTMyNiA1My44MzUzNSAtNi4yNTQ5NyA1My44MzAzOCAtNi4yNTgxOCA1My44MjU3MiAtNi4yNjA1IDUzLjgyMDc1IC02LjI2MDQ2IDUzLjgxNjYzIC02LjI2MDY4IDUzLjgxMjcxIC02LjI1OTk3IDUzLjgwOTY5IC02LjI1OTY2IDUzLjgwNjg1IC02LjI1NzIxIDUzLjgwMzY1IC02LjI1Mzk0IDUzLjgwNDIxIC02LjI0ODc0IDUzLjgwMjU1IC02LjI0OTAzIDUzLjgwMDk1IC02LjI0NzY0IDUzLjc5OTg1IC02LjI0MjI2IDUzLjgwMDA2IC02LjIzODczIDUzLjgwMDEgLTYuMjM1MTggNTMuNzk5OSAtNi4yMzI5OCA1My43OTgyOCAtNi4yMzIyIDUzLjc5ODAyIC02LjIyODkzIDUzLjc5ODE0IC02LjIyNTY5IDUzLjc5ODY3IC02LjIyMzU3IDUzLjc5OTkyIC02LjIyMTk5IDUzLjc5Nzk0IC02LjIyMDU1IDUzLjc5NTg2IC02LjIxNzExIDUzLjc5NDQyIC02LjIxOTEyIDUzLjc5Mjc1IC02LjIyMjM2IDUzLjc4OTcxIC02LjIyMjgzIDUzLjc4OTA2IC02LjIyODAzIDUzLjc4OTc4IC02LjIzMTM1IDUzLjc4ODMzIC02LjIzNjE2IDUzLjc4NjgxIC02LjIzNzQgNTMuNzgwNjEgLTYuMjM5MjYgNTMuNzc3MDMgLTYuMjM5MzYgNTMuNzczNzYgLTYuMjM4NDIgNTMuNzcxNDQgLTYuMjQxNzUgNTMuNzY4NDUgLTYuMjQzNDUgNTMuNzY1NzIgLTYuMjQ3ODIgNTMuNzU4NDMgLTYuMjQ5NCA1My43NTI3NyAtNi4yNTEwMSA1My43NDg1NyAtNi4yNTA3MyA1My43NDI2MSAtNi4yNTA2MSA1My43MzgwMSAtNi4yNTEyMiA1My43MzUwNCAtNi4yNTIxNyA1My43MzIyNiAtNi4yNTI4MSA1My43MzAxMSAtNi4yNTEzNiA1My43MjY2OCAtNi4yNDczMSA1My43MjU0IC02LjI0OTgyIDUzLjcyNzA2IC02LjI1MTkzIDUzLjcyNzkzIC02LjI1MzA0IDUzLjcyNzkzIC02LjI1MzA0IDUzLjcyOTcyIC02LjI1NDcyIDUzLjcyOTcyIC02LjI1NDcyIDUzLjczMTQgLTYuMjU2NiA1My43MzI0NyAtNi4yNTk5NSA1My43MzI1NSAtNi4yNjMwNCA1My43MzAwNyAtNi4yNjI3OSA1My43MzAwNyAtNi4yNjI3OSA1My43Mjk4NyAtNi4yNTkzMiA1My43Mjk4NyAtNi4yNTkzMiA1My43MjY1NyAtNi4yNTU2NCA1My43MjQ0OSAtNi4yNTIzNCA1My43MjM0MiAtNi4yNDg2OCA1My43MjIxOCAtNi4yNDUxNiA1My43MTczIC02LjI0NTQ1IDUzLjcwOTE5IC02LjI0NjQ5IDUzLjY5NDU0IC02LjI0MzMyIDUzLjY4NjU0IC02LjI0MTQ0IDUzLjY4MzEzIC02LjIzOTA5IDUzLjY4MTYgLTYuMjM4NDcgNTMuNjc3NjggLTYuMjQwNTYgNTMuNjc1OTYgLTYuMjM3MTQgNTMuNjU5NDcgLTYuMjI5MDIgNTMuNjU3NjEgLTYuMjI2ODIgNTMuNjU1NDYgLTYuMjIyNiA1My42NTI1NiAtNi4yMjIgNTMuNjQ1OCAtNi4yMTg0MSA1My42Mzk5MyAtNi4yMTU4MiA1My42MzcwMyAtNi4yMTQ5MSA1My42MzUwNyAtNi4yMTMxNyA1My42MzQxMiAtNi4yMDg5MSA1My42MzQyMiAtNi4yMDU5OSA1My42MzE5MyAtNi4yMDMzIDUzLjYzMjA0IC02LjIwMDM4IDUzLjYzMDczIC02LjE5ODI1IDUzLjYzMTcgLTYuMTk0MTggNTMuNjMxNDEgLTYuMTg5MzcgNTMuNjI5NTkgLTYuMTg2MjYgNTMuNjI3OTMgLTYuMTg5MDIgNTMuNjI2NjcgLTYuMTkwOSA1My42MjI4NCAtNi4xODc3NiA1My42MjAxOCAtNi4xODgxMSA1My42MTc3MSAtNi4xODQ5NCA1My42MTYgLTYuMTgxNyA1My42MTMwNyAtNi4xODE1NSA1My42MTA4MSAtNi4xNzc3OCA1My42MTI5MSAtNi4xNzUzNyA1My42MTIwNyAtNi4xNzMxMyA1My42MDk5NSAtNi4xNzMzOSA1My42MDk4NSAtNi4xNzEwNiA1My42MTAzMSAtNi4xNjgzMyA1My42MDc1IC02LjE2MjA2IDUzLjYwMzIyIC02LjE2MTE3IDUzLjU5NzQ1IC02LjE1ODMgNTMuNTkyMjkgLTYuMTUzNzkgNTMuNTg3NzMgLTYuMTQ3NDkgNTMuNTg3MDMgLTYuMTQxMjYgNTMuNTg3NzggLTYuMTM1NDggNTMuNTg2MzUgLTYuMTMxNjQgNTMuNTg1ODQgLTYuMTI1MjggNTMuNTgzNzYgLTYuMTE5MDcgNTMuNTgyNTYgLTYuMTE0MDIgNTMuNTgzMTkgLTYuMTA4ODQgNTMuNTg0ODIgLTYuMTA2ODQgNTMuNTg2OTQgLTYuMTA2NDQgNTMuNTg3OTggLTYuMTA1MyA1My41ODY0OCAtNi4xMDM3NyA1My41ODU5IC02LjA5OTQxIDUzLjU4NDM3IC02LjEwMDk2IDUzLjU4MzcyIC02LjEwNDEyIDUzLjU4MTI5IC02LjEwNTI3IDUzLjU3Nzg1IC02LjEwNDAyIDUzLjU3NDUgLTYuMTAwMTYgNTMuNTY5OTYgLTYuMDk4NjQgNTMuNTY3NjYgLTYuMDk5MDQgNTMuNTY0NzQgLTYuMDkzMjEgNTMuNTYyNjMgLTYuMDg1MzEgNTMuNTYwNTQgLTYuMDgxNTggNTMuNTU4NjcgLTYuMDgwMzEgNTMuNTU2NTkgLTYuMDgyMTEgNTMuNTUzNDcgLTYuMDc5NSA1My41NTEyIC02LjA3ODk5IDUzLjU0OTIzIC02LjA4MDE4IDUzLjU0Njk5IC02LjA3ODU3IDUzLjU0NjU0IC02LjA4MDg1IDUzLjU0NjkzIC02LjA4MzA0IDUzLjU0NTg1IC02LjA4NDk0IDUzLjU0NDE3IC02LjA4NiA1My41NDI3IC02LjA4NjAyIDUzLjU0MTcgLTYuMDgzMTUgNTMuNTQyNjUgLTYuMDc5MzkgNTMuNTQyMjUgLTYuMDc3NjYgNTMuNTQwODYgLTYuMDc4MTQgNTMuNTM5NzggLTYuMDgwMzUgNTMuNTM5MDQgLTYuMDgyODkgNTMuNTM4MDMgLTYuMDg1NTcgNTMuNTM0NDggLTYuMDg1MDggNTMuNTMyNzUgLTYuMDg3NTIgNTMuNTMwODEgLTYuMDg1MzQgNTMuNTI5NDUgLTYuMDg3MzUgNTMuNTI2OTYgLTYuMDg4MDUgNTMuNTI0OTIgLTYuMDg2MDEgNTMuNTIzODIgLTYuMDgyOTggNTMuNTI1MTggLTYuMDgwOCA1My41MjM5MSAtNi4wNzc2IDUzLjUyMjQ3IC02LjA3NjY5IDUzLjUyMTMzIC02LjA3ODEyIDUzLjUyMDE1IC02LjA4MDYyIDUzLjUxODMzIC02LjA4MjkxIDUzLjUxNzM0IC02LjA4NDgxIDUzLjUxNzkzIC02LjA4OTE4IDUzLjUxOTA5IC02LjA5Mjk4IDUzLjUxODMyIC02LjA5NjQ1IDUzLjUxNzExIC02LjA5OTU1IDUzLjUxNTgyIC02LjEwMjM1IDUzLjUxNDEgLTYuMTA0NzkgNTMuNTEyNzUgLTYuMTA2NjYgNTMuNTExNDcgLTYuMTA5MTYgNTMuNTExNjYgLTYuMTExNjMgNTMuNTExNiAtNi4xMTM0OCA1My41MTEzNyAtNi4xMTc0NSA1My41MTEyNiAtNi4xMjA4MiA1My41MTMyMiAtNi4xMTk0OCA1My41MTQ2OCAtNi4xMTk3NyA1My41MTQ1OCAtNi4xMjUzIDUzLjUxMjgzIC02LjEzMTEzIDUzLjUxMDQ1IC02LjEzNjEyIDUzLjUwNzkzIC02LjE0MDE4IDUzLjUwNzk2IC02LjE0MjE4IDUzLjUwODk5IC02LjE0Mzk4IDUzLjUwOTEgLTYuMTQ5MDYgNTMuNTA3ODUgLTYuMTUyOTQgNTMuNTA2NTIgLTYuMTU3MSA1My41MDY0NiAtNi4xNjE0MSA1My41MDU3NCAtNi4xNjM2NCA1My41MDM2NyAtNi4xNjUxMyA1My41MDI2IC02LjE2NzAzIDUzLjUwMjgyIC02LjE2ODg5IDUzLjUwNDI3IC02LjE2OTA0IDUzLjUwNTI4IC02LjE3MTg5IDUzLjUwMzIzIC02LjE3MjQ2IDUzLjUwMTY0IC02LjE3MzM5IDUzLjUwMTQxIC02LjE3NzUyIDUzLjQ5OTM0IC02LjE3Mzk0IDUzLjUwMTU0IC02LjE2ODYyIDUzLjUwMDYgLTYuMTYzOTIgNTMuNTAwNDYgLTYuMTU3MTQgNTMuNTAwOTkgLTYuMTUyNDIgNTMuNTAxNTIgLTYuMTQ4MDEgNTMuNTAxOSAtNi4xNDQ2NiA1My41MDE3IC02LjE0MDA0IDUzLjUwMDAzIC02LjEzNTExIDUzLjQ5ODY1IC02LjEzMDIxIDUzLjQ5ODQ0IC02LjEyNTU4IDUzLjQ5OTc1IC02LjEyMTg2IDUzLjUwMjE2IC02LjEyNjcyIDUzLjUwNjExIC02LjEyODk0IDUzLjUxMDkzIC02LjEzMDMyIDUzLjUwOTc2IC02LjEyNjk4IDUzLjUxMDQxIC02LjEyNDEyIDUzLjUwODE5IC02LjExOTE0IDUzLjUwOTE2IC02LjExNzU0IDUzLjUwNjc4IC02LjExMjA5IDUzLjUwMzU3IC02LjExMjA4IDUzLjUwMDEzIC02LjExMTEzIDUzLjQ5NjkyIC02LjEwODIyIDUzLjQ5NTI0IC02LjEwMzYgNTMuNDk0MjMgLTYuMTAxMTkgNTMuNDkwOTggLTYuMDk5NSA1My40OTAzNSAtNi4xMDE5IDUzLjQ4NzcyIC02LjEwMzggNTMuNDg1MDUgLTYuMTA2NjEgNTMuNDg0MzggLTYuMTEwMDggNTMuNDgzMTIgLTYuMTE0NzIgNTMuNDc5ODIgLTYuMTE0ODcgNTMuNDc4NCAtNi4xMTg3MiA1My40NzUxNyAtNi4xMjE5NCA1My40NzEyNiAtNi4xMjM1NyA1My40Njc2MSAtNi4xMjU5OCA1My40NjIzOSAtNi4xMjgwOSA1My40NTg1IC02LjEyOTQgNTMuNDU2NjQgLTYuMTMyOTEgNTMuNDU0NzMgLTYuMTM3NzcgNTMuNDU0NzMgLTYuMTM3NzcgNTMuNDU2NzcgLTYuMTQyMjkgNTMuNDU2NzcgLTYuMTQyMjkgNTMuNDU3IC02LjE0NjQ1IDUzLjQ1ODE3IC02LjE0NzAyIDUzLjQ1OTc0IC02LjE0NDI2IDUzLjQ2MjIgLTYuMTQ0NjUgNTMuNDYzNTYgLTYuMTQ0NzggNTMuNDY2NzIgLTYuMTM4NDggNTMuNDY5ODkgLTYuMTM0MTggNTMuNDcxODQgLTYuMTM2MjIgNTMuNDczMjQgLTYuMTQwOTUgNTMuNDc0NTQgLTYuMTQzMDkgNTMuNDc1NzIgLTYuMTQ2MTEgNTMuNDc2MTQgLTYuMTQ5ODQgNTMuNDc2MzEgLTYuMTUyNzggNTMuNDczMTQgLTYuMTUxNyA1My40NzMwMiAtNi4xNDk4NSA1My40NzE5MiAtNi4xNDk4OSA1My40NzAzNCAtNi4xNTMxMSA1My40NzAxNSAtNi4xNTg3OSA1My40NzA3IC02LjE2MzkxIDUzLjQ3MTI4IC02LjE2ODU4IDUzLjQ3MDQ4IC02LjE3Mjc5IDUzLjQ2OTIxIC02LjE3NTI5IDUzLjQ2NzA3IC02LjE3ODYxIDUzLjQ2NTg1IC02LjE4MjE4IDUzLjQ2NjIzIC02LjE4NDUxIDUzLjQ2NzA5IC02LjE4NjE0IDUzLjQ2NTg0IC02LjE4NzcgNTMuNDY0OTcgLTYuMTkxNjEgNTMuNDY2MjMgLTYuMTkyMzUgNTMuNDY2MzcgLTYuMTk2MzYgNTMuNDY2IC02LjE5ODc4IDUzLjQ2NjkzIC02LjIwMTAyIDUzLjQ2Nzc5IC02LjIwNTU2IDUzLjQ2NDQ2IC02LjIwMzU0IDUzLjQ2MjUgLTYuMTk0MTMgNTMuNDYxMTggLTYuMTg3MjUgNTMuNDYwMzMgLTYuMTgyODYgNTMuNDU4NSAtNi4xNzk5MiA1My40NTc0MiAtNi4xNzkyIDUzLjQ1NzgzIC02LjE3NTEgNTMuNDU1ODkgLTYuMTczMjIgNTMuNDU3ODMgLTYuMTcwMDMgNTMuNDU3NiAtNi4xNjYxNiA1My40NTYxIC02LjE2MTcxIDUzLjQ1NTQ4IC02LjE1ODc0IDUzLjQ1NDc1IC02LjE1NTc1IDUzLjQ1NTg5IC02LjE0OTQxIDUzLjQ1NDQ5IC02LjE0NTc1IDUzLjQ1NDQ5IC02LjE0NTc1IDUzLjQ1MzIyIC02LjE0MTYyIDUzLjQ1MzIyIC02LjE0MTYyIDUzLjQ1MjA5IC02LjEzNzA3IDUzLjQ1MDI5IC02LjEzMzUxIDUzLjQ0ODM0IC02LjEzMTYzIDUzLjQ0NTk1IC02LjEyNjUgNTMuNDQyMTMgLTYuMTIyODkgNTMuNDM5MTIgLTYuMTIyMjkgNTMuNDM3NiAtNi4xMjEzOSA1My40MzMzNCAtNi4xMjIzNiA1My40Mjk5OSAtNi4xMjM4NyA1My40MjY1NSAtNi4xMjI0NyA1My40MjMwOCAtNi4xMTk1MyA1My40MTg4NCAtNi4xMTcyNyA1My40MTY0NCAtNi4xMTc2NiA1My40MTMxMiAtNi4xMTU4IDUzLjQwOTE5IC02LjExNTI3IDUzLjQwNTc3IC02LjExNjE3IDUzLjQwMzIxIC02LjExODUyIDUzLjQwNDQ1IC02LjEyMjQ4IDUzLjQwNjI4IC02LjEyNTExIDUzLjQwOTA1IC02LjEyNzM4IDUzLjQxMjk1IC02LjEyODY3IDUzLjQxNjA4IC02LjEyODM3IDUzLjQxODgxIC02LjEyODk0IDUzLjQyMjQ0IC02LjEzMjY2IDUzLjQxOTg5IC02LjE0MDA5IDUzLjQxODMzIC02LjEzNzYzIDUzLjQxOTI0IC02LjEzNTExIDUzLjQxNjQ2IC02LjEzNTc3IDUzLjQxMjk5IC02LjEzNTQzIDUzLjQwOTQ1IC02LjEzMTg2IDUzLjQwNTIgLTYuMTI5NzYgNTMuNDAxMzMgLTYuMTI3NyA1My4zOTg1MiAtNi4xMjQyMiA1My4zOTY1OSAtNi4xMjE0MiA1My4zOTU0IC02LjExOSA1My4zOTYwMiAtNi4xMTY5MiA1My4zOTg1NSAtNi4xMTU0OCA1My4zOTk1MiAtNi4xMTM4NyA1My4zOTU4NyAtNi4xMDc4NSA1My4zOTYyOCAtNi4wOTg2OSA1My4zOTY1NiAtNi4wOTAyOCA1My4zOTY0NCAtNi4wODU2NyA1My4zOTQ2MSAtNi4wODI3MyA1My4zOTMyOSAtNi4wNzYwMiA1My4zOTIwNiAtNi4wNjg4NSA1My4zOTA4MiAtNi4wNjUwNSA1My4zODk1OSAtNi4wNjA2NCA1My4zODkzNiAtNi4wNTY0OSA1My4zODg1MiAtNi4wNTEzNCA1My4zODc3NiAtNi4wNTAwMyA1My4zODcyNiAtNi4wNDUzOSA1My4zODMxMyAtNi4wNDU0NiA1My4zNzkyMiAtNi4wNDQ0OSA1My4zNzU2MSAtNi4wNDU2NyA1My4zNzE2MyAtNi4wNDY1MiA1My4zNjg1NiAtNi4wNDc5MSA1My4zNjU3IC02LjA1MTMyIDUzLjM2MjE4IC02LjA1NDk3IDUzLjM2NDU3IC02LjA1NzY2IDUzLjM2NTI3IC02LjA2MTIzIDUzLjM2NTE2IC02LjA2NDYgNTMuMzY1NDEgLTYuMDY3ODQgNTMuMzYzODMgLTYuMDcxMjIgNTMuMzYyNTQgLTYuMDc0MTUgNTMuMzYyMDEgLTYuMDc5MDEgNTMuMzYyMTUgLTYuMDgyODUgNTMuMzY0NjkgLTYuMDg2MTcgNTMuMzY3MTkgLTYuMDg4NTQgNTMuMzY4NiAtNi4wOTI4MiA1My4zNzAxMSAtNi4wOTY3OSA1My4zNzI5OSAtNi4xMDEwNiA1My4zNzY2NSAtNi4xMDQzMiA1My4zODE0NyAtNi4xMDUzOSA1My4zODQ3NiAtNi4xMDgwMSA1My4zODU5NiAtNi4xMDc4MSA1My4zODg0MSAtNi4xMTE0MiA1My4zODczMiAtNi4xMTY1MyA1My4zODk1IC02LjExOTgyIDUzLjM4NzQgLTYuMTMwMTkgNTMuMzg0ODUgLTYuMTQwMzYgNTMuMzgyMjEgLTYuMTUwMzkgNTMuMzc4ODIgLTYuMTU4NDggNTMuMzc0MjggLTYuMTY0OTQgNTMuMzY5MzEgLTYuMTcwNzUgNTMuMzY0NjkgLTYuMTc2ODggNTMuMzYxNzUgLTYuMTgyMTIgNTMuMzU5MDggLTYuMTg3NjcgNTMuMzU3MjUgLTYuMTkzIDUzLjM1NzUyIC02LjE5NTc5IDUzLjM1OTQ5IC02LjIwMjQyIDUzLjM2MTg3IC02LjIwNzcgNTMuMzYxNTIgLTYuMjEyNDMgNTMuMzYxOTcgLTYuMjE3OTkgNTMuMzYzMDEgLTYuMjIyMjMgNTMuMzYwODQgLTYuMjI2NzcgNTMuMzYyMDEgLTYuMjI5NjQgNTMuMzYwNTYgLTYuMjMxOTUgNTMuMzU4MiAtNi4yMjg2NSA1My4zNjAwOCAtNi4yMjIyNCA1My4zNTY2OSAtNi4yMTY3IDUzLjM1NjQzIC02LjE5ODEzIDUzLjM1Mjg4IC02LjE5NzQ4IDUzLjM1MjEzIC02LjE5MjM2IDUzLjM0OTUzIC02LjE5MjQ1IDUzLjM0OTY1IC02LjE5NjkgNTMuMzQ4MDYgLTYuMTk3NjcgNTMuMzQ4NjEgLTYuMjAzMDcgNTMuMzQ2NDggLTYuMjAzNjQgNTMuMzQ4NjIgLTYuMjA1MjIgNTMuMzQ4NTQgLTYuMjEwNDMgNTMuMzQ2NjMgLTYuMjA5NzggNTMuMzQ2ODEgLTYuMjEyNyA1My4zNDk5OSAtNi4yMTYwOCA1My4zNTA4MiAtNi4yMjM2NSA1My4zNDg0MSAtNi4yMjQ1IDUzLjM0NzgzIC02LjIxNzU2IDUzLjM0NjUzIC02LjIxNzg4IDUzLjM0NjUzIC02LjIyNjE1IDUzLjM0NDgxIC02LjIyNTIxIDUzLjM0MzM5IC02LjIyMzg1IDUzLjM0Mjg4IC02LjIyMDI4IDUzLjM0MTIzIC02LjE5Mzc5IDUzLjM0MDc5IC02LjE4MjcyIDUzLjM0MDc5IC02LjE4MjcyIDUzLjMzNTUzIC02LjE4MzQzIDUzLjMzNjUxIC02LjE5NTAyIDUzLjMzMjM2IC02LjIwMTE5IDUzLjMzNDYyIC02LjIwNzM4IDUzLjMzMzA4IC02LjIwOTM3IDUzLjMyNzcgLTYuMjA1NzkgNTMuMzE5MjYgLTYuMjA2MTkgNTMuMzEwNyAtNi4xODg4NCA1My4zMDI4IC02LjE3MDQ5IDUzLjI5ODgyIC02LjE1ODMyIDUzLjI5NjM4IC02LjE1MjI3IDUzLjI5ODg4IC02LjE0ODU0IDUzLjMwMjg3IC02LjEzOTQ0IDUzLjMwMjI4IC02LjEzNzg2IDUzLjI5NjA2IC02LjE0NTUyIDUzLjI5NjMyIC02LjE0MDQ5IDUzLjI5NjIgLTYuMTM2MDUgNTMuMjk2NDUgLTYuMTMxMTkgNTMuMjk0MzEgLTYuMTMyMDQgNTMuMjk0NzUgLTYuMTI5NzkgNTMuMjk4NzMgLTYuMTI2MDUgNTMuMzAyMDUgLTYuMTI4MiA1My4zMDI4NCAtNi4xMjY3NSA1My4yOTg3MyAtNi4xMjM2IDUzLjI5NDQxIC02LjEyNjcxIDUzLjI5MTQgLTYuMTI2NDIgNTMuMjg5NjMgLTYuMTI0NDEgNTMuMjg4MDYgLTYuMTE5MjIgNTMuMjg5MDIgLTYuMTE1MzQgNTMuMjg4ODYgLTYuMTExNjUgNTMuMjg3MTEgLTYuMTA5NDkgNTMuMjg1NDkgLTYuMTA1OTcgNTMuMjgyMjIgLTYuMTAyMyA1My4yNzkwMSAtNi4wOTk0IDUzLjI3NzIgLTYuMDk2MzIgNTMuMjc1NTQgLTYuMDk0MDMgNTMuMjc0OTUgLTYuMDkyMjkgNTMuMjczNzMgLTYuMDkzNCA1My4yNzE3NiAtNi4wOTE2OSA1My4yNjk5NCAtNi4wOTE1MSA1My4yNjg1MyAtNi4wOTI0NSA1My4yNjk3MSAtNi4wOTU0NyA1My4yNjU4MiAtNi4xMDE5OCA1My4yNjE0OCAtNi4xMDYgNTMuMjU3NzMgLTYuMTA4MDggNTMuMjUzNjUgLTYuMTA5NTMgNTMuMjQ4NiAtNi4xMDk4MSA1My4yNDIwMyAtNi4xMDg4OSA1My4yMzY4NiAtNi4xMDczMyA1My4yMzIxNyAtNi4xMDc4IDUzLjIyNzk2IC02LjEwNzcgNTMuMjIzMTUgLTYuMTA2MDIgNTMuMjE3NjQgLTYuMTAzNTIgNTMuMjEzODIgLTYuMTAzIDUzLjIxMzYgLTYuMDk4NTYgNTMuMjEyMDUgLTYuMDk4NDEgNTMuMjEyMDUgLTYuMDk4NDEgNTMuMjEwNjkgLTYuMDk1MDcgNTMuMjA2NzMgLTYuMDk4NTEgNTMuMjA0NjIgLTYuMDk1NTcgNTMuMjAyMTkgLTYuMDk0NzQgNTMuMjAwMDIgLTYuMDkzNDYgNTMuMTk3NDYgLTYuMDkwNjMgNTMuMTk1NzQgLTYuMDg0ODIgNTMuMTkzNTUgLTYuMDc4NjYgNTMuMTg4OTggLTYuMDc1OTUgNTMuMTg1MzMgLTYuMDcyNzEgNTMuMTgwNzcgLTYuMDcyMTIgNTMuMTc3NjggLTYuMDcxMjMgNTMuMTc0NjYgLTYuMDcwOTQgNTMuMTcxOTYgLTYuMDcyMjEgNTMuMTY5NjIgLTYuMDczNTIgNTMuMTY0MjQgLTYuMDczMDIgNTMuMTU2OTkgLTYuMDcwNSA1My4xNTIxMyAtNi4wNjc2MSA1My4xNDgwMSAtNi4wNjQ5MyA1My4xNTE2MiAtNi4wNjM3NSA1My4xNTE3MSAtNi4wNjExNiA1My4xNDgwNiAtNi4wNjA2NyA1My4xNDczIC02LjA1ODYzIDUzLjE0NTA0IC02LjA1Nzc5IDUzLjE0MjYzIC02LjA1ODY0IDUzLjEzOTE0IC02LjA1MzI5IDUzLjEzMTQ1IC02LjA0NzU0IDUzLjEyMTkxIC02LjA0MjM5IDUzLjExNDQ3IC02LjAzOTg2IDUzLjA5MTI4IC02LjAzNzI2IDUzLjA4MTQ2IC02LjAzNDk3IDUzLjA3Njk2IC02LjAzMjQyIDUzLjA3MTQxIC02LjAzMzU5IDUzLjA1MTYyIC02LjAzODg5IDUzLjAyNzMyIC02LjA0NzQ0IDUzLjAxNTg4IC02LjA0OTU2IDUzLjAwMjE4IC02LjA0ODQ1IDUyLjk5NjQzIC02LjA0NzMgNTIuOTk1MDIgLTYuMDQ1OCA1Mi45OTAyNyAtNi4wNDUzNiA1Mi45ODc1NiAtNi4wNDQyIDUyLjk4ODAzIC02LjA0MDkgNTIuOTg1NjEgLTYuMDQxODggNTIuOTg0MzIgLTYuMDM5NjUgNTIuOTg0MzIgLTYuMDM2NjEgNTIuOTgzMjQgLTYuMDM2MiA1Mi45ODI4MSAtNi4wNDA4NyA1Mi45ODM4NiAtNi4wNDUwNyA1Mi45ODY5MiAtNi4wNDY4OCA1Mi45ODgzOCAtNi4wNDk1OSA1Mi45OTA5NSAtNi4wNTIxMSA1Mi45OTU1IC02LjA1MzQzIDUyLjk5OTQ2IC02LjA1NTE3IDUzLjAwMzA1IC02LjA1NDkgNTMuMDA2NTYgLTYuMDU0MzEgNTMuMDEwNTkgLTYuMDU0MjMgNTMuMDEzNTEgLTYuMDU0NTEgNTMuMDE1MjIgLTYuMDU1NTcgNTMuMDE1NTMgLTYuMDU3MjggNTMuMDEzMDYgLTYuMDU5OTMgNTMuMDA3OTggLTYuMDU4MjUgNTMuMDA0NSAtNi4wNTgzOCA1My4wMDE4MiAtNi4wNTkwNCA1Mi45OTkzOSAtNi4wNjAxOSA1Mi45OTc1NiAtNi4wNTk4NiA1Mi45OTYxNyAtNi4wNTc3NSA1Mi45OTQzNiAtNi4wNTY5OCA1Mi45OTM0MiAtNi4wNTUyMyA1Mi45ODk4NiAtNi4wNTQ1OSA1Mi45ODc3MiAtNi4wNTI4NyA1Mi45ODU1NiAtNi4wNDkwMyA1Mi45ODMxNyAtNi4wNDY1MiA1Mi45ODA4NyAtNi4wNDE0NSA1Mi45ODA2MSAtNi4wMzUzNSA1Mi45ODIwNiAtNi4wMzMwNiA1Mi45ODM3MSAtNi4wMzMyMiA1Mi45ODU4OSAtNi4wMzM1NyA1Mi45ODM1NCAtNi4wMzAwMSA1Mi45ODE3OSAtNi4wMjc0MiA1Mi45OCAtNi4wMjkwNyA1Mi45Nzc3OCAtNi4wMjY1OCA1Mi45NzgyIC02LjAyMjM5IDUyLjk3NTYyIC02LjAyMDE3IDUyLjk3MzI1IC02LjAxNjkxIDUyLjk3MyAtNi4wMTA4MiA1Mi45NzA5NyAtNi4wMDU3NyA1Mi45Njc2NiAtNi4wMDMzNSA1Mi45NjQzNyAtNi4wMDMwNSA1Mi45NjE1NSAtNi4wMDIzNCA1Mi45NTg5MiAtNi4wMDQyMiA1Mi45NTc4MyAtNi4wMDY1NCA1Mi45NTQ4MSAtNi4wMDkxNSA1Mi45NTE3OSAtNi4wMTE3NSA1Mi45NDg4OSAtNi4wMTYzNCA1Mi45NDU1MiAtNi4wMTgzMSA1Mi45NDAxNSAtNi4wMTY5IDUyLjkzNTEyIC02LjAxNjg4IDUyLjkzMzM1IC02LjAyMDM3IDUyLjkzMTc2IC02LjAyMzg2IDUyLjkyODQ4IC02LjAyMzQxIDUyLjkyNTA4IC02LjAyMzcgNTIuOTIzNDkgLTYuMDI3NDkgNTIuOTIxMjYgLTYuMDMzODEgNTIuOTE3NTYgLTYuMDM3NDEgNTIuOTEzNTQgLTYuMDM3MTggNTIuOTExNDggLTYuMDM4MzYgNTIuOTA5NTYgLTYuMDQxMDYgNTIuOTA1NDkgLTYuMDQyMDUgNTIuOTAyMzUgLTYuMDM5OTQgNTIuODk5NTMgLTYuMDM5MjMgNTIuODk2NiAtNi4wNDE4NCA1Mi44OTQ4NiAtNi4wNDcxMiA1Mi44OTE2NSAtNi4wNTI3NCA1Mi44ODc2MyAtNi4wNTc2NyA1Mi44NzkyNCAtNi4wNjIwNSA1Mi44NzA0MyAtNi4wNjQ4NSA1Mi44NjcgLTYuMDY2MDUgNTIuODY1MDcgLTYuMDY2MTYgNTIuODYyNTEgLTYuMDYzMzUgNTIuODU5ODIgLTYuMDYxMjkgNTIuODU4MDkgLTYuMDYwOTggNTIuODU2NTkgLTYuMDYxOSA1Mi44NTUxOSAtNi4wNjgyOCA1Mi44NTM2OCAtNi4wNzQ4IDUyLjg0ODU3IC02LjA4NzggNTIuODQ0MSAtNi4wOTczNiA1Mi44Mzk5NCAtNi4xMDM3OSA1Mi44Mzc1NCAtNi4xMDcxOSA1Mi44MzU2NiAtNi4xMDg1MyA1Mi44MzI2NyAtNi4xMTAwNyA1Mi44Mjk3MSAtNi4xMTM0MyA1Mi44MjcxMiAtNi4xMTY5NiA1Mi44MjU2MyAtNi4xMTk5OSA1Mi44MTgyNCAtNi4xMjE1NyA1Mi44MTM3MiAtNi4xMjUyMyA1Mi44MTA1OCAtNi4xMzExNCA1Mi43NDAzOCAtNi4xNDc4OSA1Mi43MzkzNSAtNi4xNDY5MSA1Mi43MzY2OSAtNi4xNDQyNSA1Mi43MzQ1NiAtNi4xNDQ4IDUyLjczMjYzIC02LjE0NzQ5IDUyLjcyODYyIC02LjE1NDY2IDUyLjcyNDE2IC02LjE1OTA3IDUyLjcyMTI1IC02LjE2MTA1IDUyLjcxNzQ4IC02LjE2NjQzIDUyLjcxMjg3IC02LjE3MjQ4IDUyLjcwOTEyIC02LjE3NzU1IDUyLjcwNjExIC02LjE4MjA5IDUyLjcwNDM3IC02LjE4NzM3IDUyLjcwMjM3IC02LjE4OTczIDUyLjY5ODkyIC02LjE5MTIyIDUyLjY5NjE3IC02LjE5MzgzIDUyLjY5MjUxIC02LjE5OTA1IDUyLjY4OTExIC02LjIwMTc0IDUyLjY4Mzc0IC02LjIwMzE5IDUyLjY3ODc2IC02LjIwNjMzIDUyLjY3NTc1IC02LjIxMTAyIDUyLjY3MzQ5IC02LjIxMjkyIDUyLjY2ODU1IC02LjIxMjU5IDUyLjY2NTIgLTYuMjExNTIgNTIuNjYwNDEgLTYuMjE0NTMgNTIuNjU1NTggLTYuMjE4ODggNTIuNjUwNDMgLTYuMjIxODYgNTIuNjQ3NzEgLTYuMjIzNzEgNTIuNjQ1MTIgLTYuMjI0MjEgNTIuNjQzNTIgLTYuMjIyOTkgNTIuNjQwODYgLTYuMjIzMTkgNTIuNjM2MTcgLTYuMjI1OSA1Mi42MzExOSAtNi4yMjY3OSA1Mi42Mjc0OSAtNi4yMjc0OCA1Mi42MjA0OCAtNi4yMjYyMSA1Mi42MTYxMyAtNi4yMjIwMyA1Mi42MTI3MiAtNi4yMTk4OSA1Mi42MDc2NiAtNi4yMTUzMyA1Mi42MDQ1NCAtNi4yMTA1MiA1Mi41OTk3OCAtNi4yMTAwNiA1Mi41OTQ0MiAtNi4yMTEyMSA1Mi41ODkyIC02LjIxMTAxIDUyLjU4NTkxIC02LjIxMDM5IDUyLjU4MjYxIC02LjIwNTQyIDUyLjU3ODg2IC02LjIwMjc5IDUyLjU3NTkyIC02LjIwMjgyIDUyLjU3MjQgLTYuMjAxMTMgNTIuNTY5IC02LjE5ODg1IDUyLjU2NTU0IC02LjE5NTM3IDUyLjU1OTQ4IC02LjE5NTUzIDUyLjU1MTY2IC02LjE5OTE0IDUyLjU0MTg5IC02LjIwODE0IDUyLjUyNjA4IC02LjIyNDY2IDUyLjUwNTc2IC02LjI0NzA1IDUyLjQ4Njc5IC02LjI2Njk5IDUyLjQ3MDYxIC02LjI4NTg0IDUyLjQ1MzU3IC02LjMwMzIzIDUyLjQ0MzE2IC02LjMwOTI4IDUyLjQzNzg0IC02LjMxMjIxIDUyLjQzMjc3IC02LjMyMDI1IDUyLjQyODE4IC02LjMyNzc2IDUyLjQyMzQxIC02LjMzNTY4IDUyLjQyMDcgLTYuMzM5MzIgNTIuNDEzIC02LjM0NjggNTIuNDA1ODQgLTYuMzUxOTUgNTIuNDAwOTkgLTYuMzU0MDIgNTIuMzk2IC02LjM1NzczIDUyLjM4NTU3IC02LjM2MTk0IDUyLjM3MTEzIC02LjM2Mjc2IDUyLjM2MTMzIC02LjM2MDI5IDUyLjM1MzM4IC02LjM1Njk3IDUyLjM0OTU2IC02LjM1Mzc0IDUyLjM0NzA5IC02LjM1MDggNTIuMzQ1NzUgLTYuMzUyNDcgNTIuMzQ2NCAtNi4zNTcwMyA1Mi4zNDY0NCAtNi4zNjA5MyA1Mi4zNDU1OSAtNi4zNjY2NyA1Mi4zNDQzNyAtNi4zNzI1NCA1Mi4zNDYwOSAtNi4zNzMxNSA1Mi4zNDcxMyAtNi4zNzIyMiA1Mi4zNDgwMSAtNi4zNzA2NSA1Mi4zNDk0MSAtNi4zNzAxOSA1Mi4zNTA4MSAtNi4zNzE4MyA1Mi4zNTIwMSAtNi4zNzQwNSA1Mi4zNTM2MiAtNi4zNzc2NSA1Mi4zNTY5MiAtNi4zNzUyOCA1Mi4zNTk5MSAtNi4zNzM5MyA1Mi4zNjE1NSAtNi4zNzQyNSA1Mi4zNjMxNyAtNi4zNzUxNSA1Mi4zNjQ3MyAtNi4zNzQ4NSA1Mi4zNjU5OSAtNi4zNzU1OCA1Mi4zNjc5MSAtNi4zNzgwMiA1Mi4zNjc5MSAtNi4zNzgwMiA1Mi4zNjk5NyAtNi4zNzQ0OCA1Mi4zNzA5NyAtNi4zNzc0MiA1Mi4zNzIwOCAtNi4zNzk0OCA1Mi4zNzQxNCAtNi4zODA3MyA1Mi4zNzU4IC02LjM4MzE1IDUyLjM3NTI0IC02LjM4NTk0IDUyLjM3NDA2IC02LjM4ODA2IDUyLjM3MzE0IC02LjM5MDY3IDUyLjM3Mzc2IC02LjM5MzU3IDUyLjM3NDQ1IC02LjM5NzA5IDUyLjM3MzQ0IC02LjM5OTY4IDUyLjM3MjYyIC02LjQwMjMgNTIuMzcxODMgLTYuNDA1OTcgNTIuMzcwMDEgLTYuNDEwNzMgNTIuMzY4ODIgLTYuNDE1MjUgNTIuMzY4MzUgLTYuNDIwNTkgNTIuMzY4MDggLTYuNDIyOTYgNTIuMzY1NTkgLTYuNDI1ODUgNTIuMzYzMTQgLTYuNDI3NzEgNTIuMzYxMzcgLTYuNDI4MTMgNTIuMzU5MDUgLTYuNDI4OTQgNTIuMzU3NzUgLTYuNDMxOTcgNTIuMzU2MDEgLTYuNDMxOTMgNTIuMzU0MzYgLTYuNDM2NzEgNTIuMzUyMTMgLTYuNDQyMTcgNTIuMzQ5NyAtNi40NDU4MyA1Mi4zNDY0OSAtNi40NDgzNCA1Mi4zNDQxIC02LjQ1MDggNTIuMzQwNTEgLTYuNDU1OTggNTIuMzM2NzUgLTYuNDUxMjYgNTIuMzMxMzggLTYuNDQ1MzIgNTIuMzI2NTIgLTYuNDQyODkgNTIuMzIzMDQgLTYuNDQyNCA1Mi4zMjA5OCAtNi40NDM4NCA1Mi4zMTk2MiAtNi40NDU4IDUyLjMxNjc1IC02LjQ0NDAxIDUyLjMxNDMzIC02LjQ0NDk3IDUyLjMxMjAyIC02LjQ0Mjk0IDUyLjMwOTkzIC02LjQ0MjU3IDUyLjMwODU3IC02LjQ0MjI5IDUyLjMwODE0IC02LjQzODk2IDUyLjMwODMgLTYuNDM0NDkgNTIuMzA3NDUgLTYuNDI4MTIgNTIuMzA0NzIgLTYuNDIyNDcgNTIuMzAxMzMgLTYuNDE3NDkgNTIuMjk4MTEgLTYuNDEyODQgNTIuMjk0MTkgLTYuNDEyMyA1Mi4yOTEyNyAtNi40MTE4NSA1Mi4yODk1NiAtNi40MDgzOSA1Mi4yODc0MSAtNi40MDQ1OSA1Mi4yODgyMSAtNi40MDA0OCA1Mi4yODgwNiAtNi4zOTcwNCA1Mi4yOTIgLTYuMzk3MTMgNTIuMjk2NjEgLTYuMzk4OTMgNTIuMzAwNzQgLTYuMzk4NzMgNTIuMzAzODYgLTYuMzk2NSA1Mi4zMDYwMiAtNi4zOTIzOSA1Mi4zMDc3NCAtNi4zOTA3NSA1Mi4zMTAyOSAtNi4zODg3NyA1Mi4zMTIzMyAtNi4zODU1MyA1Mi4zMTMwNSAtNi4zODM1MSA1Mi4zMTQyMSAtNi4zODE5NyA1Mi4zMTQ3NSAtNi4zNzk3OCA1Mi4zMTMyMiAtNi4zNzkwNCA1Mi4zMDg5OCAtNi4zODIwNiA1Mi4zMDQ2NyAtNi4zODQzMiA1Mi4yOTg5NCAtNi4zODU3IDUyLjI5MzIgLTYuMzg3MDcgNTIuMjg2MzYgLTYuMzg1OTUgNTIuMjc4NDggLTYuMzgzNTMgNTIuMjY5NzQgLTYuMzc2ODMgNTIuMjYxMzkgLTYuMzcxODMgNTIuMjU3MTQgLTYuMzY1MTMgNTIuMjUzODIgLTYuMzU4NTMgNTIuMjUzNDcgLTYuMzUwMjggNTIuMjUzMDkgLTYuMzQzMjIgNTIuMjUzNzQgLTYuMzM3OTEgNTIuMjU0NzMgLTYuMzM2MDcgNTIuMjU1OTMgLTYuMzM1ODggNTIuMjU3NDQgLTYuMzM3MzggNTIuMjU4ODYgLTYuMzM4NDEgNTIuMjYwNzggLTYuMzM4NiA1Mi4yNjA0NCAtNi4zMzUyOCA1Mi4yNTgwNCAtNi4zMzA3MiA1Mi4yNTYyIC02LjMyODQ0IDUyLjI1NDM4IC02LjMyODEyIDUyLjI1MzQ4IC02LjMzMDI2IDUyLjI1MjM5IC02LjMzMjQgNTIuMjQ4ODggLTYuMzI3ODcgNTIuMjQ1MTUgLTYuMzE5NzUgNTIuMjQzNiAtNi4zMTQ1MiA1Mi4yNDIxOCAtNi4zMTMxOCA1Mi4yNDA0MiAtNi4zMTM2MSA1Mi4yMzgzOCAtNi4zMTY4NSA1Mi4yMzYyMyAtNi4zMjAzNyA1Mi4yMzQ0NCAtNi4zMjE1MyA1Mi4yMzE5NyAtNi4zMjE0NSA1Mi4yMjg1NiAtNi4zMjIwMSA1Mi4yMjU2IC02LjMyNSA1Mi4yMjM2MyAtNi4zMjg4NSA1Mi4yMjE5NyAtNi4zMzE1MiA1Mi4yMjAwMSAtNi4zMzI1MiA1Mi4yMTg5OSAtNi4zMzc2NCA1Mi4yMTYzMSAtNi4zNDA2NyA1Mi4yMTM4NSAtNi4zNDAyOCA1Mi4yMTA3OCAtNi4zNDE2MSA1Mi4yMDc2NyAtNi4zNDM3IDUyLjIwNTA5IC02LjM0Njg4IDUyLjIwMjI1IC02LjM0OTE0IDUyLjE5ODM4IC02LjM0OTUxIDUyLjE5NTExIC02LjM0ODU5IDUyLjE5MjM0IC02LjM0NjY3IDUyLjE5MDE5IC02LjM0NTI3IDUyLjE4ODk2IC02LjM0NjM0IDUyLjE4NzI0IC02LjM1MDY1IDUyLjE4NDU2IC02LjM1MzY2IDUyLjE4MjE3IC02LjM1MzczIDUyLjE4MDQxIC02LjM1NDE2IDUyLjE3OTEzIC02LjM1NjU3IDUyLjE3NjI2IC02LjM1NzQ3IDUyLjE3NDU1IC02LjM1ODk2IDUyLjE3NTU4IC02LjM2MzUzIDUyLjE3NjkyIC02LjM2Njk0IDUyLjE3NzI0IC02LjM3MDU1IDUyLjE3NzA3IC02LjM3NTE1IDUyLjE3NzU0IC02LjM3OTY3IDUyLjE3OTA1IC02LjM4NTk0IDUyLjE4MDggLTYuMzkwODggNTIuMTgyODYgLTYuMzk0NTIgNTIuMTg0ODkgLTYuMzk5MzMgNTIuMTg2NDMgLTYuNDA3MTEgNTIuMTg3MzUgLTYuNDE2NzMgNTIuMTg4OTUgLTYuNDI3NzkgNTIuMTkwMjYgLTYuNDM0NjMgNTIuMTkxMzUgLTYuNDM5NTIgNTIuMTkxNzIgLTYuNDQ5NTQgNTIuMTkyMDggLTYuNDU2NzQgNTIuMTkyOTUgLTYuNDY1MTggNTIuMTkzMTQgLTYuNDcyMzcgNTIuMTkzMjIgLTYuNDc3NDUgNTIuMTkyNTQgLTYuNDg1NzMgNTIuMTk1MDQgLTYuNDgwMzEgNTIuMTk1NiAtNi40NzI3NSA1Mi4xOTUzNiAtNi40NjQ1MyA1Mi4xOTQwMSAtNi40NTY0OSA1Mi4xOTM4MiAtNi40NDcyMiA1Mi4xOTMyOCAtNi40NDIwOSA1Mi4xOTM2MSAtNi40Mzc5NSA1Mi4xOTU5NyAtNi40Mzg2NCA1Mi4xOTg2NCAtNi40MzgzIDUyLjIwMTA0IC02LjQzODEgNTIuMjAxNSAtNi40NDMwNiA1Mi4yMDMwNCAtNi40NDM1MiA1Mi4yMDQ1OSAtNi40NDYwNiA1Mi4yMDMzNiAtNi40NDk2NyA1Mi4yMDE2IC02LjQ1MjMzIDUyLjIwNDAxIC02LjQ1NDIxIDUyLjIwNjIyIC02LjQ1NjM2IDUyLjIwODM2IC02LjQ1Nzk0IDUyLjIwNTAzIC02LjQ1ODY0IDUyLjIwMzc1IC02LjQ2MTE5IDUyLjIwMjk2IC02LjQ2NDg1IDUyLjIwNDA5IC02LjQ2NjU5IDUyLjIwNzUgLTYuNDY4NzMgNTIuMjA1NTcgLTYuNDczMzIgNTIuMjA3NDQgLTYuNDc0OTkgNTIuMjA4MyAtNi40Nzg4MiA1Mi4yMTEwOCAtNi40ODA3MyA1Mi4yMTI1NyAtNi40ODI1MyA1Mi4yMTM3IC02LjQ4NjY4IDUyLjIxMDY5IC02LjQ4MzY4IDUyLjIwODc4IC02LjQ4NTU4IDUyLjIwNjMgLTYuNDg4MDIgNTIuMjA0IC02LjQ4ODM4IDUyLjIwMjE0IC02LjQ4NDE3IDUyLjIwMTQgLTYuNDgxOTkgNTIuMTk5MTUgLTYuNDgzMTIgNTIuMTk2NTUgLTYuNDg2NDQgNTIuMTk0NzQgLTYuNDkzMTIgNTIuMTkyNjkgLTYuNTAxMTEgNTIuMTg5NzcgLTYuNTEwMDYgNTIuMTg4MzYgLTYuNTE4MjggNTIuMTg3ODEgLTYuNTI1NTIgNTIuMTg3MTYgLTYuNTM1MzEgNTIuMTg0NTYgLTYuNTQzMDkgNTIuMTgxNzkgLTYuNTUwODcgNTIuMTc5ODkgLTYuNTU5NjEgNTIuMTc4MDYgLTYuNTY2NTkgNTIuMTc3MDkgLTYuNTc0OTkgNTIuMTc1NzUgLTYuNTgwOTcgNTIuMTc0MTMgLTYuNTg3MzcgNTIuMTczMjEgLTYuNTkyMzQgNTIuMTc0MzkgLTYuNTk0ODQgNTIuMTc4NjkgLTYuNTk1MTUgNTIuMTgyMDIgLTYuNTk2ODMgNTIuMTg0NjggLTYuNjAxNDMgNTIuMTg2NDcgLTYuNjA0OSA1Mi4xODg5NiAtNi42MDY4MSA1Mi4xOTI3OCAtNi42MTQ4MSA1Mi4xOTY3MSAtNi42MjQ3NiA1Mi4yMDA1MiAtNi42MzI5MiA1Mi4yMDE3MiAtNi42Mzk2MiA1Mi4yMDI1NyAtNi42NDM3MyA1Mi4yMDUxMyAtNi42NDg2MyA1Mi4yMDg3NiAtNi42NTY0OCA1Mi4yMTExNiAtNi42NjUyMiA1Mi4yMTMyOCAtNi42NzQyNiA1Mi4yMTUyMSAtNi42ODU5NiA1Mi4yMTY3NyAtNi42OTczMiA1Mi4yMTgyNiAtNi43MDM3NCA1Mi4yMTg4NiAtNi43MDAyMyA1Mi4yMTkwNyAtNi42OTcyNyA1Mi4yMTc5NiAtNi42ODgwNSA1Mi4yMTY4NiAtNi42Nzg4MiA1Mi4yMTU1OSAtNi42NjkyOSA1Mi4yMTQxNSAtNi42NjE1MiA1Mi4yMTE2NCAtNi42NTMxOSA1Mi4yMDkxIC02LjY0Nzg1IDUyLjIwNjI3IC02LjY0MDM5IDUyLjIwNDczIC02LjYzNTMxIDUyLjIwMzU0IC02LjYzMDU1IDUyLjIwNTE4IC02LjYyODQ4IDUyLjIwNjg4IC02LjYyNzMyIDUyLjIwODI2IC02LjYyOTQgNTIuMjA4NTcgLTYuNjMzNDcgNTIuMjA5MzkgLTYuNjM1OCA1Mi4yMTAyMiAtNi42Mzc5NiA1Mi4yMDk3OSAtNi42NDE4IDUyLjIxMjA0IC02LjY0NTE3IDUyLjIxNDc2IC02LjY0NjM1IDUyLjIxODc3IC02LjY0Njc4IDUyLjIyMjA3IC02LjY0NjgzIDUyLjIyNDY3IC02LjY0ODU4IDUyLjIyOCAtNi42NDk5OCA1Mi4yMjkyMiAtNi42NTE2IDUyLjIyOTU3IC02LjY1NDQ3IDUyLjIyNzI4IC02LjY1NDU0IDUyLjIyNTQ0IC02LjY1MjI0IDUyLjIyMzMxIC02LjY1MjYyIDUyLjIyMTU0IC02LjY1MzMzIDUyLjIxOTcxIC02LjY1MTA2IDUyLjIxNjc0IC02LjY1MTc4IDUyLjIxNzIyIC02LjY1NTg3IDUyLjIxNzQyIC02LjY2MDA3IDUyLjIxNjQ0IC02LjY2NCA1Mi4yMTcyOSAtNi42Njc5NiA1Mi4yMTg4NSAtNi42NzAyMyA1Mi4yMTgwMiAtNi42NzUwNiA1Mi4yMTg5OCAtNi42NzYyIDUyLjIyMDE2IC02LjY3ODg2IDUyLjIyMDkgLTYuNjgxMTkgNTIuMjIwMjcgLTYuNjg1NDUgNTIuMjE5NjcgLTYuNjg5MTIgNTIuMjIwNDQgLTYuNjk1MDIgNTIuMjIwNjggLTYuNzAwNDMgNTIuMjIwODYgLTYuNzA1MjIgNTIuMjE5NjcgLTYuNzA5ODggNTIuMjE5MjEgLTYuNzE0MTYgNTIuMjE3MDYgLTYuNzE1NDEgNTIuMjE1OTEgLTYuNzE4ODkgNTIuMjE3MTUgLTYuNzIyMTQgNTIuMjE3MjggLTYuNzI1ODkgNTIuMjE1NDIgLTYuNzI4ODIgNTIuMjE0MSAtNi43MzIxMiA1Mi4yMTM2MSAtNi43MzcyOSA1Mi4yMTMzOSAtNi43NDI5NCA1Mi4yMTM1IC02Ljc0NzE0IDUyLjIxMjYzIC02Ljc1MjQxIDUyLjIxMDggLTYuNzU3IDUyLjIwOTQgLTYuNzYyMDcgNTIuMjA4NzcgLTYuNzY4NTcgNTIuMjA3ODggLTYuNzcyNSA1Mi4yMDY5NiAtNi43NzcwNCA1Mi4yMDY4MiAtNi43ODI4NCA1Mi4yMDcwNyAtNi43ODc5NSA1Mi4yMDk4MSAtNi43OTI4OCA1Mi4yMTE1OSAtNi43OTg1OCA1Mi4yMTMyNCAtNi44MDI5NSA1Mi4yMTU0NiAtNi44MDUxMiA1Mi4yMTc3OSAtNi44MDQwMyA1Mi4yMTk4OCAtNi44MDAwOCA1Mi4yMjE1OSAtNi43OTgzMyA1Mi4yMjQwMSAtNi43OTUzIDUyLjIyMjQzIC02Ljc5Mzc5IDUyLjIyMDgzIC02Ljc5NDY3IDUyLjIxOTE2IC02Ljc5NTIzIDUyLjIxNzIyIC02Ljc5NTQ2IDUyLjIxNjE3IC02Ljc5NDMxIDUyLjIxNjY1IC02Ljc5MTY4IDUyLjIxNzc0IC02Ljc4NzQ2IDUyLjIyMDAyIC02Ljc4NzU1IDUyLjIyMjA1IC02Ljc4NzMyIDUyLjIyMzU3IC02Ljc4NjE0IDUyLjIyNTM2IC02Ljc4NzIzIDUyLjIyNjcgLTYuNzg1NTggNTIuMjMxMTQgLTYuNzc4IDUyLjIzNjIgLTYuNzY4NjkgNTIuMjQyMTkgLTYuNzU4ODcgNTIuMjQ2NTQgLTYuNzUzNjYgNTIuMjQ4OCAtNi43NDk3MyA1Mi4yNTMxNyAtNi43NTI4NyA1Mi4yNTcxOSAtNi43NTMzMSA1Mi4yNTkzNiAtNi43NTE5IDUyLjI2MzE1IC02Ljc1NzY5IDUyLjI2MTU1IC02Ljc2MTI1IDUyLjI1OTY1IC02Ljc2MjY5IDUyLjI1NjQ2IC02Ljc2MjM0IDUyLjI1Mjc5IC02Ljc2NDM0IDUyLjI0OTM4IC02Ljc3MTc1IDUyLjI0NjU4IC02Ljc3OTY3IDUyLjI0NTI5IC02Ljc4ODc4IDUyLjI0NTE5IC02Ljc5MzU2IDUyLjI0NDYgLTYuNzk2OTMgNTIuMjQyOTIgLTYuNzk3NjQgNTIuMjQxNiAtNi43OTYxNiA1Mi4yNDAwOSAtNi43OTQ5NSA1Mi4yMzg1MyAtNi43OTcxNyA1Mi4yMzgwOSAtNi44MDM0IDUyLjIzNTQ0IC02LjgwNzU5IDUyLjIzMzAxIC02LjgxMzMxIDUyLjIzMTIxIC02LjgxOTM4IDUyLjIyOTk1IC02LjgyNzQ2IDUyLjIyNzIxIC02LjgyOTU1IDUyLjIyNDEzIC02LjgzMDg1IDUyLjIyMDkxIC02LjgzMTEgNTIuMjE4ODIgLTYuODM1MDYgNTIuMjE2NzIgLTYuODM5MTUgNTIuMjEzNzkgLTYuODM5MTQgNTIuMjExNTQgLTYuODQyMzMgNTIuMjA5MiAtNi44NDU4IDUyLjIwNjkxIC02Ljg1MDE3IDUyLjIwNjcgLTYuODQ0MDMgNTIuMjA5MiAtNi44NDEzMiA1Mi4yMTEwNCAtNi44Mzg5OSA1Mi4yMTE1OSAtNi44MzQ0MSA1Mi4yMTE5MyAtNi44MzA1NyA1Mi4yMTM1NyAtNi44Mjg4MSA1Mi4yMTQyMyAtNi44MjYyIDUyLjIxNDMyIC02LjgyMzk2IDUyLjIxMjY5IC02LjgyMDk1IDUyLjIxMTI0IC02LjgxODQgNTIuMjEyMzUgLTYuODE1OTkgNTIuMjEzNDIgLTYuODE0NDYgNTIuMjEzMDggLTYuODExNDQgNTIuMjEzMzUgLTYuODA3MyA1Mi4yMTA3MSAtNi44MDkwOSA1Mi4yMDkxNyAtNi44MTI5NiA1Mi4yMDg1NiAtNi44MTY2MiA1Mi4yMDY1IC02LjgxOTk4IDUyLjIwMjE3IC02LjgyMjY0IDUyLjE5NzcyIC02LjgyNTg5IDUyLjE5NjA5IC02LjgyOTg5IDUyLjE5NDU2IC02LjgzMzYgNTIuMTkyMiAtNi44MzUxNSA1Mi4xOTA3IC02LjgzMTQgNTIuMTkyOTMgLTYuODI4NTEgNTIuMTkzODQgLTYuODI0NDIgNTIuMTk0MjMgLTYuODE5MjQgNTIuMTkxNzYgLTYuODE5MjcgNTIuMTg5MTIgLTYuODIzMDEgNTIuMTg3MzggLTYuODI3NDYgNTIuMTg1ODkgLTYuODMwMjcgNTIuMTgzMjMgLTYuODMwMjkgNTIuMTgxMjMgLTYuODI3NTMgNTIuMTc4MDkgLTYuODI3OTQgNTIuMTc2NDMgLTYuODI4MzUgNTIuMTc1ODggLTYuODI1OSA1Mi4xNzUgLTYuODIyODMgNTIuMTczNDkgLTYuODIxNjIgNTIuMTcxNTEgLTYuODI1MTMgNTIuMTcyMzMgLTYuODI5ODQgNTIuMTc0NTQgLTYuODMxNzMgNTIuMTc1NTkgLTYuODMzMDQgNTIuMTc1ODMgLTYuODM2MDUgNTIuMTc0NzcgLTYuODM5NjUgNTIuMTcyMzkgLTYuODQzODcgNTIuMTY5NTEgLTYuODUxNjEgNTIuMTY3NDEgLTYuODYwMDQgNTIuMTY1MjUgLTYuODY4MTUgNTIuMTYzNzUgLTYuODc1MjkgNTIuMTUzMSAtNi44ODgxNiA1Mi4xMzcxNyAtNi45MTQ3IDUyLjEyMzI5IC02LjkzMjU0IDUyLjEyMzI5IC02LjkzMjU0IDUyLjEyNTcgLTYuOTMxOTggNTIuMTI5MTggLTYuOTI5NjkgNTIuMTMyNjYgLTYuOTI5OTIgNTIuMTM0NCAtNi45Mjc3NCA1Mi4xMzY5MyAtNi45MjIyMSA1Mi4xMzk5OSAtNi45MTkxMSA1Mi4xNDI2MSAtNi45MTU2NyA1Mi4xNDUxNCAtNi45MTAxMyA1Mi4xNDg2NyAtNi45MDkxOCA1Mi4xNTA3MyAtNi45MDU5OSA1Mi4xNTM1MSAtNi45MDA5MyA1Mi4xNTcyNiAtNi44OTY3MSA1Mi4xNjMzNiAtNi44OTU2IDUyLjE2OTUgLTYuODk4MjEgNTIuMTc1MTUgLTYuODk4OTkgNTIuMTc3MDYgLTYuOTAxNzQgNTIuMTgwNjggLTYuOTAyODggNTIuMTg0MTMgLTYuOTA2MDkgNTIuMTg4NzEgLTYuOTA4MjQgNTIuMTkwMjkgLTYuOTAzNDkgNTIuMTkzNzggLTYuOTAxMTkgNTIuMTk4NzEgLTYuOTAzODIgNTIuMjA0MjcgLTYuOTA5MzYgNTIuMjA4NzcgLTYuOTEzNiA1Mi4yMTM3OCAtNi45MTY2OCA1Mi4yMTUxOCAtNi45MjI2NyA1Mi4yMTY4NSAtNi45MjY1OSA1Mi4yMTgyNiAtNi45MzI1NyA1Mi4yMjIgLTYuOTM1MjEgNTIuMjI2MjEgLTYuOTM3NjMgNTIuMjI5MzYgLTYuOTQxMTIgNTIuMjMzMDkgLTYuOTQ0MzcgNTIuMjM3MjMgLTYuOTUwNTEgNTIuMjM5ODQgLTYuOTU4NDIgNTIuMjQwNTIgLTYuOTY2NDIgNTIuMjQzMzQgLTYuOTY2NzQgNTIuMjQ2NTYgLTYuOTczMDggNTIuMjUwNTUgLTYuOTgwNTUgNTIuMjU1MjIgLTYuOTgxMDYgNTIuMjU5MjUgLTYuOTc2NzQgNTIuMjU3MjUgLTYuOTcyMDMgNTIuMjYwMDkgLTYuOTcxOSA1Mi4yNjMzNyAtNi45NzA2MiA1Mi4yNjU4NiAtNi45NzI0IDUyLjI2OTUyIC02Ljk3MjY2IDUyLjI3Mjg0IC02Ljk3MDE5IDUyLjI3NjIxIC02Ljk2NjIyIDUyLjI3OTY3IC02Ljk2MjU4IDUyLjI4MTUzIC02Ljk2MTkgNTIuMjgxNTQgLTYuOTY2MDggNTIuMjc5NTUgLTYuOTY5NzUgNTIuMjc3NjYgLTYuOTczMjcgNTIuMjc0ODggLTYuOTc2MSA1Mi4yNzM2MiAtNi45Nzk4NCA1Mi4yNzY4MiAtNi45ODQzOSA1Mi4yNzcyNiAtNi45ODkzOCA1Mi4yNzY5OSAtNi45OTM1MyA1Mi4yNzc2NiAtNi45OTY2IDUyLjI3ODMzIC02Ljk5ODE0IDUyLjI3ODM0IC03LjAwMjk1IDUyLjI3NjgyIC03LjAwNjM3IDUyLjI3NDQgLTcuMDA5MjUgNTIuMjcxOTYgLTcuMDEyNyA1Mi4yNjk3NSAtNy4wMTkwNCA1Mi4yNjc5OCAtNy4wMjQwNiA1Mi4yNjU3OSAtNy4wMjgxNSA1Mi4yNjIzNCAtNy4wMzE1IDUyLjI1ODk4IC03LjAzNTAxIDUyLjI1NjggLTcuMDM4OTQgNTIuMjU1NjggLTcuMDQ1ODQgNTIuMjU1NTIgLTcuMDQ5MzcgNTIuMjU1NTIgLTcuMDQ5MzcgNTIuMjU1NjggLTcuMDUyMzYgNTIuMjU2MjQgLTcuMDU4NTUgNTIuMjU1NCAtNy4wNTg1NiA1Mi4yNTU0IC03LjA1ODU2IDUyLjI1NTcxIC03LjA2NDM4IDUyLjI1NTI1IC03LjA3MDc2IDUyLjI1MTczIC03LjA2ODgzIDUyLjI0OTU0IC03LjA2NDg3IDUyLjI0NzAxIC03LjA2Mzk5IDUyLjI0NDQ5IC03LjA2Mjc5IDUyLjI0MjM4IC03LjA1ODM3IDUyLjI0MDM2IC03LjA1NjM0IDUyLjIzNzg0IC03LjA1NTMyIDUyLjIzNzQgLTcuMDUwNDkgNTIuMjM4OTUgLTcuMDQ2NDggNTIuMjQwNzggLTcuMDQyMzYgNTIuMjQyNzYgLTcuMDM4ODQgNTIuMjQzMDUgLTcuMDM0MjUgNTIuMjQxMiAtNy4wMzQzMyA1Mi4yMzg3MyAtNy4wMzIxMiA1Mi4yNDExOSAtNy4wMzA2IDUyLjI0MzM1IC03LjAzMTQ0IDUyLjI0NTE3IC03LjAzNDAzIDUyLjI0NjY2IC03LjAzNTU1IDUyLjI0OTg2IC03LjAzMTczIDUyLjI1Mjg3IC03LjAyOTgzIDUyLjI1NzAzIC03LjAyOTI0IDUyLjI2MTYzIC03LjAyNjc4IDUyLjI2NTEyIC03LjAyMjI1IDUyLjI2NjkzIC03LjAxNDM4IDUyLjI2ODgyIC03LjAwNjUyIDUyLjI2OTQyIC03LjAwMTA1IDUyLjI2OTc3IC02Ljk5NzIxIDUyLjI2ODc2IC02Ljk5NDg0IDUyLjI2ODM3IC02Ljk5MTA3IDUyLjI2NTQ5IC02Ljk5IDUyLjI2MjczIC02Ljk5MjA4IDUyLjI1OTIzIC02Ljk5NDUzIDUyLjI1NTMyIC02Ljk5NTg3IDUyLjI1MTMyIC02Ljk5NTEzIDUyLjI0NjM1IC02Ljk5MzUyIDUyLjI0MzMgLTYuOTg3MzUgNTIuMjQwMzQgLTYuOTc5MSA1Mi4yMzk4MSAtNi45NzIwMSA1Mi4yMzYxMSAtNi45NjYzNyA1Mi4yMzE2MSAtNi45NjY0NyA1Mi4yMjc3OSAtNi45NjU0NCA1Mi4yMjEwOCAtNi45NjU4OCA1Mi4yMTU4MyAtNi45Njg1OSA1Mi4yMTE4MyAtNi45NzE4NyA1Mi4yMTAxNCAtNi45NzI4NyA1Mi4yMDcwOCAtNi45NzEzNCA1Mi4yMDM5NyAtNi45NzMzNyA1Mi4xOTkxNiAtNi45NzY0MSA1Mi4xOTU1OCAtNi45NzY0NyA1Mi4xOTIyNiAtNi45NzY4NCA1Mi4xODg5NSAtNi45NzkxNSA1Mi4xODYwNiAtNi45ODAxNyA1Mi4xODI5OSAtNi45ODEwMyA1Mi4xODE0IC02Ljk3NzU3IDUyLjE4MzA3IC02Ljk3MjY4IDUyLjE4MzYgLTYuOTY4NyA1Mi4xODE1IC02Ljk2NjM4IDUyLjE3ODUyIC02Ljk2NzU0IDUyLjE3NjA4IC02Ljk2NDQzIDUyLjE3Njk1IC02Ljk1OTE2IDUyLjE3NzU5IC02Ljk1MjUyIDUyLjE3NjEgLTYuOTQ4NzcgNTIuMTc0MDUgLTYuOTUxNjcgNTIuMTczODggLTYuOTU3OTIgNTIuMTcxOTcgLTYuOTYzOTcgNTIuMTY5OSAtNi45Njk1NiA1Mi4xNjY1MiAtNi45NzM1MiA1Mi4xNjMwMiAtNi45NzU5NSA1Mi4xNjAzNSAtNi45NzYyNSA1Mi4xNTc2NCAtNi45Nzc0MyA1Mi4xNTU3IC02Ljk4MTk5IDUyLjE1NDggLTYuOTgzODMgNTIuMTU1ODIgLTYuOTg1NzMgNTIuMTUzMjEgLTYuOTg4NzIgNTIuMTUyMTQgLTYuOTg1OTEgNTIuMTQ3OTYgLTYuOTg1IDUyLjE0NzQ1IC02Ljk3OTU3IDUyLjE0NDY4IC02Ljk4NDMzIDUyLjE0MDkxIC02Ljk5MTA3IDUyLjEzOSAtNi45OTkzNSA1Mi4xMzcwOCAtNy4wMDU3IDUyLjEzNTY0IC03LjAxMTM1IDUyLjEzMzAyIC03LjAyMTAzIDUyLjEzMjM1IC03LjAzMDM1IDUyLjEzMzU0IC03LjAzNjkgNTIuMTM0OTQgLTcuMDQ0ODEgNTIuMTM2MjcgLTcuMDUwMTggNTIuMTM1MDUgLTcuMDU5NDMgNTIuMTMzNTYgLTcuMDY4NSA1Mi4xMzM3IC03LjA3Mzg4IDUyLjEzMjY3IC03LjA4MDc3IDUyLjEzMDc5IC03LjA4ODE2IDUyLjEyODc2IC03LjA5NDYzIDUyLjEyNzUxIC03LjEwMDMgNTIuMTI3NzEgLTcuMTA0MDUgNTIuMTMwMTggLTcuMTA0MzMgNTIuMTMyNzUgLTcuMTA0MzMgNTIuMTM0MjIgLTcuMTAwMDMgNTIuMTM2MzIgLTcuMDk0MDEgNTIuMTM4NTYgLTcuMDkwODQgNTIuMTQxNTkgLTcuMDg4OCA1Mi4xNDU2MyAtNy4wODY0MiA1Mi4xNDkzOCAtNy4wODI4MyA1Mi4xNTMwMyAtNy4wNzg3OCA1Mi4xNTU2MyAtNy4wNzE3NiA1Mi4xNTY5NCAtNy4wNjY5OSA1Mi4xNTc4NyAtNy4wNjIzMyA1Mi4xNTk2OCAtNy4wNTg1MSA1Mi4xNTk3NSAtNy4wNzIwOCA1Mi4xNjI0NSAtNy4wNzEyIDUyLjE2NDg4IC03LjA3MDEzIDUyLjE2NzExIC03LjA2OTQ5IDUyLjE2OTAxIC03LjA3MDAxIDUyLjE2Njc2IC03LjA3NTQyIDUyLjE2NDY4IC03LjA3OTA2IDUyLjE2MjMgLTcuMDgxMDIgNTIuMTYwODkgLTcuMDgzOTkgNTIuMTYyNzQgLTcuMDg1NyA1Mi4xNjMzMSAtNy4wODc0IDUyLjE2MTk1IC03LjA5MTI4IDUyLjE2MjcgLTcuMDkzIDUyLjE2NTk5IC03LjA5MzIzIDUyLjE2NzEgLTcuMDk3MzggNTIuMTY5MDEgLTcuMTA4MzQgNTIuMTY5MzYgLTcuMTE0OTYgNTIuMTY3NzcgLTcuMTE5ODQgNTIuMTY1MDQgLTcuMTIxNDcgNTIuMTYxMjMgLTcuMTE4NSA1Mi4xNTYzOCAtNy4xMTU4NCA1Mi4xNTMzMiAtNy4xMTI1MSA1Mi4xNTI2NyAtNy4xMDYxOCA1Mi4xNTI0OSAtNy4wOTc2NiA1Mi4xNTI2OSAtNy4wOTExMSA1Mi4xNTEzNSAtNy4wODc5OCA1Mi4xNDk2IC03LjA4NjE0IDUyLjE0OTIxIC03LjA5NTA0IDUyLjE0OTgzIC03LjEwMzkxIDUyLjE1MTI1IC03LjExMzc2IDUyLjE1Mzc4IC03LjEyMDc3IDUyLjE1NjAyIC03LjEyNjU0IDUyLjE1NzcxIC03LjEzMzc1IDUyLjE1ODE1IC03LjE0MDUyIDUyLjE1NzM1IC03LjE0ODQ4IDUyLjE1Mzk0IC03LjE1Mjg2IDUyLjE1MDEgLTcuMTU2NzMgNTIuMTQ0OTYgLTcuMTU4ODIgNTIuMTQxNjkgLTcuMTYyMzMgNTIuMTM5MTcgLTcuMTY1MzEgNTIuMTM1OTkgLTcuMTY0NjQgNTIuMTM0MjcgLTcuMTYzOTkgNTIuMTM2MyAtNy4xNzQyMiA1Mi4xMzMzMiAtNy4xNzkzOCA1Mi4xMzMwNSAtNy4xODMzOCA1Mi4xMzMyOCAtNy4xODg2MyA1Mi4xMzI1NCAtNy4xOTI4NyA1Mi4xMzI0NCAtNy4xOTkyNiA1Mi4xMzMyMiAtNy4yMDA1NSA1Mi4xMzQ1MiAtNy4yMDYyMiA1Mi4xMzM3NSAtNy4yMDk0IDUyLjEzMjA0IC03LjIxMjYzIDUyLjEyOTk4IC03LjIxNTUyIDUyLjEyOTY5IC03LjIxOTgxIDUyLjEyOTkyIC03LjIyNTIgNTIuMTMyMTkgLTcuMjM2MDYgNTIuMTMxMyAtNy4yNDE0NyA1Mi4xMzI0OSAtNy4yNDU3OCA1Mi4xMzQxIC03LjI1MjgzIDUyLjEzNjUxIC03LjI2MDU3IDUyLjEzNDQ3IC03LjI2NzE4IDUyLjEzNTM5IC03LjI3MTE3IDUyLjEzNzExIC03LjI3Mzc2IDUyLjEzNzE3IC03LjI4MDc4IDUyLjEzNTggLTcuMjg2NTkgNTIuMTM2MjQgLTcuMjkzMDUgNTIuMTM1MjggLTcuMjk4MyA1Mi4xMzE3NSAtNy4zMDMwOSA1Mi4xMzM0NSAtNy4zMDgzNiA1Mi4xMzQ2NiAtNy4zMTE5NCA1Mi4xMzUwOSAtNy4zMTg3IDUyLjEzNDc3IC03LjMyMzc0IDUyLjEzNDc4IC03LjMzMTY0IDUyLjEzNTEgLTcuMzQwNzggNTIuMTM0MzkgLTcuMzQ4NDQgNTIuMTM1ODkgLTcuMzU1NzggNTIuMTM1ODQgLTcuMzYyOTQgNTIuMTM1MSAtNy4zNjcwMiA1Mi4xMzMxNiAtNy4zNzE0IDUyLjEzMDg2IC03LjM3NzU1IDUyLjEyOTA5IC03LjM4NDA0IDUyLjEyNzg0IC03LjM5MTM0IDUyLjEzMDAyIC03LjM5NzcxIDUyLjEzMDU3IC03LjQwNTY4IDUyLjEyOTg4IC03LjQxMDgyIDUyLjEyOTQ2IC03LjQxNzkzIDUyLjEyNzYzIC03LjQyNTc2IDUyLjEyNjYyIC03LjQzNzU1IDUyLjEyMzYgLTcuNDQxMzYgNTIuMTIxMjQgLTcuNDQ0OCA1Mi4xMTg1OSAtNy40NDg1IDUyLjExODI1IC03LjQ1NTkyIDUyLjEyMDA5IC03LjQ1NTY5IDUyLjEyMTMgLTcuNDU3NDggNTIuMTIwNDggLTcuNDU5NDcgNTIuMTE4NjcgLTcuNDYwNzQgNTIuMTE2ODMgLTcuNDYyNTkgNTIuMTE1NzIgLTcuNDY2NzggNTIuMTEzMTQgLTcuNDY3MjEgNTIuMTEwODIgLTcuNDY3NTIgNTIuMTA5NTkgLTcuNDc0MjMgNTIuMTA5MzggLTcuNDc4ODIgNTIuMTA4MjEgLTcuNDgwMTggNTIuMTA2MDIgLTcuNDgxOTggNTIuMTAzNzcgLTcuNDgyOSA1Mi4xMDM5MyAtNy40ODczOSA1Mi4xMDIzMiAtNy40ODg1NCA1Mi4xMDA2IC03LjQ4OTgxIDUyLjEwMTUyIC03LjQ5MzggNTIuMTAxNTIgLTcuNDk5NjEgNTIuMTAxNDQgLTcuNTA3MjEgNTIuMTAwMjMgLTcuNTE1NTUgNTIuMDk5MSAtNy41MjM3NSA1Mi4wOTgwMiAtNy41MzEzNyA1Mi4wOTUxNiAtNy41MzcxMiA1Mi4wOTEzNSAtNy41NDAwOCA1Mi4wODc4NSAtNy41NDIzMiA1Mi4wODU0MSAtNy41NDE3MSA1Mi4wODM1OCAtNy41NDMyOSA1Mi4wODEzMSAtNy41NDQ3OCA1Mi4wNzg5NSAtNy41NDQzMyA1Mi4wNzYxMSAtNy41NDQxMyA1Mi4wNzc5NSAtNy41NDk4OCA1Mi4wNzc0MiAtNy41NTUzMiA1Mi4wNzgyNyAtNy41NjA2NCA1Mi4wODA3OCAtNy41Njk0NSA1Mi4wODQ3NiAtNy41NjkwNiA1Mi4wODY1NSAtNy41NjgwOSA1Mi4wODkzNyAtNy41Njg1OSA1Mi4wOTAxMyAtNy41NzM5IDUyLjA5MjMxIC03LjU3ODM0IDUyLjA5NTc0IC03LjU4MTQ1IDUyLjA5ODQ0IC03LjU4MjUzIDUyLjEwMTM2IC03LjU4MjkxIDUyLjEwNDc5IC03LjU4MjI5IDUyLjEwMzI3IC03LjU4NTIzIDUyLjEwNTY5IC03LjU5MjI0IDUyLjEwMjQyIC03LjU4OTc0IDUyLjEwMDQgLTcuNTg1NzcgNTIuMDk3MjggLTcuNTg1ODMgNTIuMDk0NTEgLTcuNTg1OTIgNTIuMDkyNzQgLTcuNTg4NTQgNTIuMDkxMDkgLTcuNTk0MTMgNTIuMDg5NjIgLTcuNTk3OTcgNTIuMDg3ODIgLTcuNjAxMTcgNTIuMDg2NzQgLTcuNjA0NDUgNTIuMDg3MSAtNy42MDg1MiA1Mi4wODg2MiAtNy42MTEyNiA1Mi4wOTA4OSAtNy42MTE4NCA1Mi4wOTM1IC03LjYxMjkyIDUyLjA5NDcyIC03LjYxNDI2IDUyLjA5NzkgLTcuNjE0OTYgNTIuMTAwODkgLTcuNjE1OTMgNTIuMTAzNzcgLTcuNjE4OTkgNTIuMTA0MzggLTcuNjIzNjcgNTIuMTA0MTMgLTcuNjI4NzIgNTIuMTA0NTQgLTcuNjMzNjggNTIuMTAxNzcgLTcuNjM0MDcgNTIuMTAwNDIgLTcuNjI5NTkgNTIuMDk5NDEgLTcuNjIwMDYgNTIuMDk2NjYgLTcuNjE5ODcgNTIuMDkzNTYgLTcuNjE5NDcgNTIuMDkxNDMgLTcuNjE3ODYgNTIuMDg5NjIgLTcuNjE1NCA1Mi4wODcyOCAtNy42MTI1OCA1Mi4wODU0MiAtNy42MTExNCA1Mi4wODM1MSAtNy42MTQ0OCA1Mi4wODE0NiAtNy42MTcwNiA1Mi4wNzgxOSAtNy42MTk5MiA1Mi4wODI1NCAtNy42MjUwOSA1Mi4wNzc5IC03LjYzMDAxIDUyLjA3NjM2IC03LjYyOTUxIDUyLjA3NDYyIC03LjYzMTI0IDUyLjA3MTQgLTcuNjI5NjQgNTIuMDY5MjggLTcuNjI5NjYgNTIuMDY3MTcgLTcuNjI5NyA1Mi4wNjUxMSAtNy42MjY3NSA1Mi4wNjQ3OSAtNy42MzE0OCA1Mi4wNjI3NiAtNy42MzM2MSA1Mi4wNjI1MSAtNy42MzcgNTIuMDYwNyAtNy42NDAxOSA1Mi4wNTc4NiAtNy42MzYyNiA1Mi4wNTc5OSAtNy42MzM0NSA1Mi4wNTc2IC03LjYzMDEyIDUyLjA1ODQ0IC03LjYyNjA3IDUyLjA1OTI4IC03LjYyMTg1IDUyLjA1OTI3IC03LjYxODI3IDUyLjA1OTY0IC03LjYxNDQ1IDUyLjA2MDc2IC03LjYwOTk4IDUyLjA1OTc0IC03LjYwNjQzIDUyLjA2MzMzIC03LjYwMjQxIDUyLjA2NjEzIC03LjYwMzM2IDUyLjA2ODgzIC03LjYwNDU5IDUyLjA3MTc5IC03LjYwNiA1Mi4wNzk5IC03LjYwNzE3IDUyLjA4MTc1IC03LjYwNTMyIDUyLjA3Nzk3IC03LjYwMzY1IDUyLjA3NTIzIC03LjYwMzMxIDUyLjA3MTcxIC03LjYwMTgyIDUyLjA2NTYyIC03LjYwMDYxIDUyLjA1NzIyIC03LjU5Nzc2IDUyLjA1NzEyIC03LjU5NDAzIDUyLjA1NjA3IC03LjU5MyA1Mi4wNTQxIC03LjU5MTg3IDUyLjA1MjI1IC03LjU5MDMgNTIuMDUwMjMgLTcuNTg4NDEgNTIuMDQ5MDYgLTcuNTgyIDUyLjA0ODU2IC03LjU3NTI1IDUyLjA0ODk0IC03LjU2OTA0IDUyLjA0OTM1IC03LjU2MjQgNTIuMDUwNyAtNy41NTUyNyA1Mi4wNTE2NSAtNy41NTA2MiA1Mi4wNTI2OSAtNy41NDQxOSA1Mi4wNTI5MSAtNy41Mzk0NiA1Mi4wNTY4NSAtNy41MzM5NCA1Mi4wNTY4NSAtNy41MzM5NCA1Mi4wNTU0NiAtNy41MzIyNyA1Mi4wNTM2IC03LjUzNDczIDUyLjA1MDIyIC03LjUzNjM4IDUyLjA0Njg2IC03LjUzNzYxIDUyLjA0NTg3IC03LjU0MTA2IDUyLjA0NTE5IC03LjU0NzUyIDUyLjA0MjU1IC03LjU1NjcyIDUyLjAzOTk5IC03LjU2MjM1IDUyLjAzNjM0IC03LjU2Nzg0IDUyLjAzMzE0IC03LjU3MTMxIDUyLjAyODU0IC03LjU3MTQ5IDUyLjAyNTgyIC03LjU3MjYzIDUyLjAyMjc3IC03LjU3NTA4IDUyLjAyMDEzIC03LjU3NjY4IDUyLjAxNzI4IC03LjU3NjYyIDUyLjAxNDU2IC03LjU3NTg0IDUyLjAxMDk1IC03LjU3NDM1IDUyLjAwNzA2IC03LjU3NTE5IDUyLjAwMTg1IC03LjU3NjYyIDUxLjk5ODEzIC03LjU3NzY0IDUxLjk5NTAzIC03LjU4MTEzIDUxLjk5MzQ3IC03LjU4Njg4IDUxLjk5MTI4IC03LjU4ODM4IDUxLjk4OTA0IC03LjU5MTA3IDUxLjk4ODM2IC03LjU5OTc2IDUxLjk4NjYzIC03LjYwMzI3IDUxLjk4Mzk3IC03LjYwNjggNTEuOTgyNCAtNy42MTA3NiA1MS45ODE1NyAtNy42MTg2OSA1MS45ODE5NCAtNy42MjYzMSA1MS45NzkzNyAtNy42Mjk5OSA1MS45Nzc0MiAtNy42MzI0MiA1MS45Nzg2NCAtNy42Mzk1NiA1MS45NzkzMSAtNy42NDY1IDUxLjk3ODU1IC03LjY1NDcyIDUxLjk3NzcgLTcuNjYyNzggNTEuOTc3MzkgLTcuNjczMTUgNTEuOTc2OTYgLTcuNjgzOCA1MS45NzU4MiAtNy42OTIyNyA1MS45NzM5MiAtNy42OTczOCA1MS45NzIwOCAtNy43MDExNSA1MS45Njg2NCAtNy43MDM2OSA1MS45NjQ5OSAtNy43MDUxNiA1MS45NjI3NyAtNy43MDU0NyA1MS45NjA5NCAtNy43MDc0NiA1MS45NTg5MyAtNy43MTA5MyA1MS45NTYgLTcuNzE0NDEgNTEuOTUzNjcgLTcuNzE1MyA1MS45NDk2IC03LjcxMDAyIDUxLjk1MDcxIC03LjcwMjI5IDUxLjk0NjQ1IC03LjcwMzA4IDUxLjk0NDQ5IC03LjcwNTY1IDUxLjk0Mjc3IC03LjcxMDc4IDUxLjk0MTkgLTcuNzE1NDMgNTEuOTQwOTEgLTcuNzIwNjUgNTEuOTM5ODIgLTcuNzI2MDEgNTEuOTM5NjggLTcuNzM2MzggNTEuOTQwNDQgLTcuNzQzNDYgNTEuOTQxNzggLTcuNzQ5ODcgNTEuOTQ0NDkgLTcuNzU0NTQgNTEuOTQ2NTggLTcuNzU2ODggNTEuOTQ4NzUgLTcuNzU5MjQgNTEuOTUxMzIgLTcuNzYxMzQgNTEuOTUzMzggLTcuNzY2MDggNTEuOTUzNTggLTcuNzcxMjkgNTEuOTUyMzQgLTcuNzc1OSA1MS45NTA2OSAtNy43ODE0NyA1MS45NTE2NyAtNy43ODU3NiA1MS45NTA0IC03Ljc4NzU0IDUxLjk0Nzg0IC03Ljc4ODgzIDUxLjk0NDYyIC03Ljc4OTAxIDUxLjk0MjMxIC03Ljc5Mjg3IDUxLjk0MzExIC03Ljc5NzI4IDUxLjk0Mjc3IC03LjgwMDY2IDUxLjk0MTQ4IC03LjgwNjEyIDUxLjk0MDcyIC03LjgxMjI3IDUxLjk0MDk5IC03LjgxNTg2IDUxLjk0MzIzIC03LjgxODk5IDUxLjk0NTY4IC03LjgyMTUyIDUxLjk0NTU0IC03LjgyNjEyIDUxLjk0NjA5IC03LjgyOTc1IDUxLjk0OTM2IC03LjgzMDQ4IDUxLjk1Mzc5IC03LjgzMjEgNTEuOTU4NDQgLTcuODMyNTYgNTEuOTU4MjIgLTcuODM1MiA1MS45NjEwNyAtNy44MzUxMyA1MS45NjA5NyAtNy44MzE2OSA1MS45NjE5MiAtNy44MjczNiA1MS45NjI5NiAtNy44MjQ5OCA1MS45NjUwOSAtNy44MjQ1IDUxLjk2OCAtNy44MjUwNCA1MS45NzAwMyAtNy44MjY2NSA1MS45NzMyNyAtNy44MjYzMiA1MS45NzIyMiAtNy44MTk2NSA1MS45NzAyNiAtNy44MTgzNCA1MS45NjkwNyAtNy44MTY1NSA1MS45Njg1NiAtNy44MTM5NiA1MS45Njg1NCAtNy44MTA2OSA1MS45Njk5OSAtNy44MTEwMiA1MS45NzE0NiAtNy44MTI4NSA1MS45NzE1OSAtNy44MTU3IDUxLjk3Mzg2IC03LjgxNjE0IDUxLjk3NTA1IC03LjgxNDY3IDUxLjk3NTggLTcuODEyMjIgNTEuOTc3MzYgLTcuODEyNDMgNTEuOTc2ODggLTcuODE2NTQgNTEuOTc1NDMgLTcuODE5NzcgNTEuOTc3MDQgLTcuODI0MjggNTEuOTc2MSAtNy44Mjg0NyA1MS45ODg5MiAtNy44NTUzNiA1MS45NzkwMSAtNy44NjEyOSA1MS45Nzc2MiAtNy44NjIyOCA1MS45NzYxMyAtNy44NjEwNCA1MS45NzcyOCAtNy44NTgyMiA1MS45NzgzOSAtNy44NTYxMyA1MS45NzYzNSAtNy44NTI4OCA1MS45NzM3MyAtNy44NTIxIDUxLjk2OTYzIC03Ljg1MTQxIDUxLjk2NTY5IC03Ljg1MTE5IDUxLjk2MyAtNy44NDYyMyA1MS45NTkzIC03Ljg0MzA3IDUxLjk1NTE2IC03Ljg0MTM1IDUxLjk1MDU4IC03LjgzOTExIDUxLjk0ODk2IC03LjgzODYgNTEuOTQ3NSAtNy44NDAxOSA1MS45NDU0NCAtNy44NDQ2OCA1MS45NDMxMSAtNy44NDcxOSA1MS45NDA4MiAtNy44NTA3NiA1MS45Mzg4NyAtNy44NTY3NCA1MS45MzY3MSAtNy44NjEyIDUxLjkzNDE0IC03Ljg2NjgxIDUxLjkzMDY1IC03Ljg3MDUxIDUxLjkyNzAzIC03Ljg3Mjg2IDUxLjkyMzM2IC03Ljg3NDc0IDUxLjkxOTcyIC03Ljg3NzY5IDUxLjkxNjYxIC03Ljg4MTE0IDUxLjkxNjI1IC03Ljg4ODM3IDUxLjkxMzgzIC03Ljg5MjY1IDUxLjkxNjgyIC03Ljg5NTI3IDUxLjkxNzA2IC03Ljg5NzY4IDUxLjkxODEgLTcuOTAwNzggNTEuOTE5NjQgLTcuOTAzMDYgNTEuOTIxNzQgLTcuOTAzMiA1MS45MjM3NyAtNy45MDMxNyA1MS45MjYxMiAtNy45MDM5MyA1MS45MjU0OSAtNy45MDU0NyA1MS45MjM5MyAtNy45MDcxOSA1MS45MjA2MiAtNy45MDcyMSA1MS45MTg3NiAtNy45MDk0OCA1MS45MTczMyAtNy45MDY5MiA1MS45MTU4OCAtNy45MTAyOSA1MS45MTU0NSAtNy45MTMyMSA1MS45MTI3MiAtNy45MTI4NSA1MS45MTA2OSAtNy45MTQ3OSA1MS45MTA1NyAtNy45MTcxNiA1MS45MDkyMSAtNy45MTg2MiA1MS45MDgwMiAtNy45MjIxNyA1MS45MDk4NSAtNy45MjQwNCA1MS45MTIwMyAtNy45MjQ2MyA1MS45MTMzMyAtNy45MjYxMyA1MS45MTU0MyAtNy45MjYyNyA1MS45MTg2NiAtNy45MjYxIDUxLjkyMTc4IC03LjkyNjIyIDUxLjkyNDU2IC03LjkyOTI1IDUxLjkyNTg5IC03LjkzMDE3IDUxLjkyNzI1IC03LjkzMDUgNTEuOTI4NzIgLTcuOTMyNDggNTEuOTMwMzIgLTcuOTM1MjIgNTEuOTMwNTkgLTcuOTM4OTggNTEuOTMxNzEgLTcuOTQyMjQgNTEuOTMwODcgLTcuOTQ0MjEgNTEuOTMyNzggLTcuOTQ2NTQgNTEuOTMzODMgLTcuOTQ5NSA1MS45MzM5OSAtNy45NTMzOCA1MS45MzM1MSAtNy45NjEwNSA1MS45MzE0NSAtNy45NjU1MiA1MS45MzAyIC03Ljk2Mjg0IDUxLjkzMTAyIC03Ljk1OTUyIDUxLjkzMTIgLTcuOTU1OTkgNTEuOTMwMzkgLTcuOTUxODcgNTEuOTI5MDIgLTcuOTQ4MjcgNTEuOTI5MzMgLTcuOTQ1NjQgNTEuOTI5MjkgLTcuOTQyODIgNTEuOTI4ODIgLTcuOTM3NyA1MS45Mjc0IC03LjkzNDg0IDUxLjkyNTE0IC03LjkzNDIzIDUxLjkyMzI2IC03LjkzMzI0IDUxLjkyMjAxIC03LjkzMDcgNTEuOTE4NDkgLTcuOTI5NSA1MS45MTU0NyAtNy45MjkyNCA1MS45MTI1OCAtNy45MjgxMSA1MS45MTAzMSAtNy45Mjc1MiA1MS45MDcxMSAtNy45MjcyNSA1MS45MDQ5NiAtNy45MjQ1OCA1MS45MDM2NSAtNy45Mjg1NiA1MS45MDE3MiAtNy45MzQwOSA1MS45MDI4NyAtNy45Mzg1NSA1MS45MDEwNCAtNy45NDE4NyA1MS44OTkzNyAtNy45MzcwNSA1MS44OTg3OSAtNy45MzQwMSA1MS44OTg3NCAtNy45Mjk0IDUxLjkwMDQyIC03LjkyMzM4IDUxLjkwMjkzIC03LjkxNzYzIDUxLjkwNTI4IC03LjkxMjg5IDUxLjkwNzI1IC03LjkxMDE4IDUxLjkxMTQ4IC03LjkwNjQ0IDUxLjkxNDUzIC03LjkwMjM5IDUxLjkwODM0IC03LjkwMzA1IDUxLjkwNDgzIC03LjkwNTI3IDUxLjkwMTE1IC03LjkwNTIzIDUxLjkwMDQ1IC03LjkwMjkgNTEuODk5ODQgLTcuOTAwNiA1MS44OTk5IC03Ljg5NTU3IDUxLjkwMDY2IC03Ljg4OTU4IDUxLjg5OTIyIC03Ljg4NzE3IDUxLjg5NjkxIC03Ljg4NzQ1IDUxLjg5NSAtNy44ODUyNyA1MS44OTQyOCAtNy44Nzk1MyA1MS44OTM0MyAtNy44NzQzNyA1MS44OTI5NyAtNy44Njg4MiA1MS44OTA5MiAtNy44NjU4OSA1MS44ODg5NSAtNy44Njg1OSA1MS44ODY2MSAtNy44NjkzMyA1MS44ODM3MyAtNy44Njk5OSA1MS44ODEzIC03Ljg3MDg2IDUxLjg4MDk0IC03Ljg3NjE1IDUxLjg4MTY1IC03Ljg4MjE4IDUxLjg4MTkgLTcuODg2MzYgNTEuODgyIC03Ljg5MTU4IDUxLjg3OTg2IC03Ljg5NzgxIDUxLjg3OTQ1IC03LjkwMjIyIDUxLjg3ODg0IC03LjkwODggNTEuODc4MDkgLTcuOTE4MiA1MS44NzcyOCAtNy45MjY4NSA1MS44NzYwNSAtNy45MzE0MyA1MS44NzUwMiAtNy45MzcwOCA1MS44NzQ5NiAtNy45NDM1OSA1MS44NzQ4OCAtNy45NTA1NiA1MS44NzQ1OSAtNy45NTYzMSA1MS44NzQxNiAtNy45NjExNSA1MS44NzI4NCAtNy45NjczNCA1MS44NzEwMiAtNy45NzQwOCA1MS44Njg3MyAtNy45ODExOCA1MS44NjY1OSAtNy45ODcxMyA1MS44NjQyMiAtNy45OTIxNiA1MS44NjIyMSAtNy45OTcyMyA1MS44NTg5OSAtOC4wMDQ1IDUxLjg1Njk2IC04LjAwODI0IDUxLjg1NDEzIC04LjAwOTYzIDUxLjg1MzE1IC04LjAxMjc3IDUxLjg1NDIgLTguMDE3MiA1MS44NTMzIC04LjAxODcyIDUxLjg1MTk0IC04LjAxODM5IDUxLjg1MDIxIC04LjAxNjIzIDUxLjg0NzkgLTguMDE0NzMgNTEuODQ1NTYgLTguMDE1NiA1MS44NDIyNCAtOC4wMTc1MiA1MS44NDAyMiAtOC4wMTc1NSA1MS44Mzg3MiAtOC4wMTYxNiA1MS44Mzc1NCAtOC4wMTI0NCA1MS44MzYwMSAtOC4wMTE4IDUxLjgzNDEgLTguMDA3OTggNTEuODMzMzQgLTguMDAyOTkgNTEuODMyNiAtOC4wMDE0MSA1MS44MzA1MiAtNy45OTY5NyA1MS44MjkyIC03Ljk5OTYyIDUxLjgyODc4IC04LjAwNDE1IDUxLjgyNzk1IC04LjAwOTY3IDUxLjgyNjEgLTguMDE1MiA1MS44MjM1NSAtOC4wMjAyIDUxLjgyMiAtOC4wMjUxOCA1MS44MjQ0OSAtOC4wMjg2MyA1MS44MjM0MiAtOC4wMzMyMiA1MS44MjAxNyAtOC4wMzM4MyA1MS44MTkyMSAtOC4wNDAwNyA1MS44MjEwOSAtOC4wNDI4MyA1MS44MjAzNSAtOC4wNDQ2NyA1MS44MTg0NyAtOC4wNDkwMSA1MS44MTY0MSAtOC4wNTE1MyA1MS44MTQzMyAtOC4wNTI3NSA1MS44MTM3NSAtOC4wNTY4MSA1MS44MTMxOSAtOC4wNjIyMSA1MS44MTMzNSAtOC4wNjk3OSA1MS44MTQwNiAtOC4wNzczMSA1MS44MTM3OCAtOC4wODQ1MSA1MS44MTMyOSAtOC4wOTA1MyA1MS44MTI1NiAtOC4wOTczOSA1MS44MTI4NyAtOC4xMDE4OCA1MS44MTMzNSAtOC4xMDUwNiA1MS44MTI2NyAtOC4xMDkyNyA1MS44MTEwMyAtOC4xMTQyMyA1MS44MTA4OCAtOC4xMjA0MyA1MS44MDk5NSAtOC4xMjQ0NSA1MS44MDgwMyAtOC4xMjkzNyA1MS44MDU3MiAtOC4xMzMzNiA1MS44MDMxOCAtOC4xMzc5IDUxLjc5ODk3IC04LjE0MjggNTEuNzk0ODQgLTguMTQ3ODYgNTEuNzkxOCAtOC4xNTMyMiA1MS43ODk5OCAtOC4xNTgzIDUxLjc4OTI4IC04LjE2NDU3IDUxLjc5MDIyIC04LjE2OTE0IDUxLjc5MjAzIC04LjE2OTY5IDUxLjc5MzgyIC04LjE2ODkgNTEuNzk1NzcgLTguMTcwMjEgNTEuNzk5OTEgLTguMTczNzQgNTEuNzk5OTIgLTguMTc3IDUxLjc5OTkgLTguMTgyNjIgNTEuNzk4OTUgLTguMTkwMDUgNTEuNzk5MTQgLTguMTk1MTIgNTEuNzk3NyAtOC4xOTgwMyA1MS43OTYyOCAtOC4yMDA2NCA1MS43OTc3OSAtOC4yMDUxNCA1MS43OTg2NiAtOC4yMDc2NCA1MS43OTk0NCAtOC4yMTIwNSA1MS43OTk0NiAtOC4yMTY2NCA1MS43OTkxMSAtOC4yMjE2MiA1MS43OTgxIC04LjIyMzI3IDUxLjc5NzczIC04LjIyNDk5IDUxLjc5ODcyIC04LjIyNzE5IDUxLjc5OTI1IC04LjIzMDk4IDUxLjc5ODU4IC04LjIzMzQgNTEuNzk3NjMgLTguMjM1NjQgNTEuNzk3NTQgLTguMjM4ODkgNTEuNzk3OTcgLTguMjQyOTUgNTEuNzk4NDIgLTguMjQ4MiA1MS44MDE3IC04LjI0NzAyIDUxLjgwNDU2IC04LjI0NTE5IDUxLjgwNzYxIC04LjI0NDg4IDUxLjgxMTA1IC04LjI0NTgxIDUxLjgxMjg1IC04LjI1MTY5IDUxLjgxNTUxIC04LjI1NTE3IDUxLjgxODg0IC04LjI1ODMxIDUxLjgyMTk2IC04LjI1NjUzIDUxLjgyNDg3IC04LjI1MjA0IDUxLjgyNzYxIC04LjI0NzA4IDUxLjgzMDM4IC04LjI0Njg3IDUxLjgzMjE5IC04LjI0OTM1IDUxLjgzMzc4IC04LjI1MDMyIDUxLjgzNjU3IC04LjI1MTQ0IDUxLjgzNjAzIC04LjI0Nzk2IDUxLjgzMzcgLTguMjQ4MjMgNTEuODMzNjcgLTguMjQzNzggNTEuODMyNTQgLTguMjM5MTcgNTEuODMgLTguMjQxOTMgNTEuODI4MyAtOC4yNDExIDUxLjgyODEzIC04LjIzNTc0IDUxLjgzMDE4IC04LjIyODMxIDUxLjgzMjUyIC04LjIyOTM5IDUxLjgzNjA1IC04LjIzMDE3IDUxLjgzOTY1IC04LjIyODMxIDUxLjg0MzQ0IC04LjIyNDM3IDUxLjg0NjQzIC04LjIxNjQ5IDUxLjg0NjgxIC04LjIwNzY1IDUxLjg0Njc5IC04LjE5OTQ4IDUxLjg0NzQ4IC04LjE5MTU3IDUxLjg0OTM3IC04LjE4ODg3IDUxLjg1Mjg5IC04LjE4ODQ3IDUxLjg1NjE1IC04LjE4NTY2IDUxLjg1OTM2IC04LjE4MDYxIDUxLjg2MDYyIC04LjE3MjQ4IDUxLjg2Mjg1IC04LjE2ODQ4IDUxLjg2NTA4IC04LjE2ODA1IDUxLjg2NDc4IC04LjE3MzY0IDUxLjg2MzMgLTguMTc3NDUgNTEuODYzNjIgLTguMTgwMDIgNTEuODYyNDUgLTguMTg2NTIgNTEuODYwNzYgLTguMTkyMzggNTEuODYwNTkgLTguMTk3MzkgNTEuODYxOSAtOC4yMDIwMyA1MS44NjQ1MyAtOC4yMDQ0NyA1MS44NjcyOSAtOC4yMDQ0MSA1MS44NzAwMiAtOC4yMDMxNiA1MS44NzI2MSAtOC4xOTkzNiA1MS44NzUyMyAtOC4xOTY3NiA1MS44ODA2OCAtOC4xOTQzOSA1MS44ODIyNyAtOC4xOTIyNCA1MS44ODI5MSAtOC4xODUzNSA1MS44ODQwNyAtOC4xNzU3MSA1MS44ODQ1MiAtOC4xNjcwMyA1MS44ODcyMiAtOC4xNjQ3MiA1MS44ODc4OSAtOC4xNjc0OSA1MS44ODY4NCAtOC4xNzE4IDUxLjg4OTIzIC04LjE3MzYxIDUxLjg5MjY4IC04LjE3NDM4IDUxLjg5NDU3IC04LjE3ODUxIDUxLjg5NjY1IC04LjE3ODcxIDUxLjg5NjY1IC04LjE3ODcxIDUxLjg5NzQ3IC04LjE4Mjc3IDUxLjg5OTMxIC04LjE4MjcyIDUxLjkwMDQxIC04LjE4NDY2IDUxLjkwMDI0IC04LjE4Nzc2IDUxLjg5OTEzIC04LjE4OTY3IDUxLjg5NzUzIC04LjE4NjkzIDUxLjg5NTk3IC04LjE4Njg2IDUxLjg5MzggLTguMTg3OSA1MS44OTIyOCAtOC4xODU0NSA1MS44OTAwMyAtOC4xODYzNCA1MS44OTAyIC04LjE5MDA3IDUxLjg4OTEzIC04LjE5Mjg5IDUxLjg4ODU1IC04LjE5NjgyIDUxLjg4OTU5IC04LjE5OTc5IDUxLjg5MTE2IC04LjIwMjk3IDUxLjg5MDgzIC04LjIwNzY3IDUxLjg5MTUyIC04LjIxMjA4IDUxLjg5MjQxIC04LjIxNzU0IDUxLjg5MTg4IC04LjIyMjM3IDUxLjg5MDA0IC04LjIyNTgyIDUxLjg4NzA5IC04LjIyMDgyIDUxLjg4NzcyIC04LjIyNjM5IDUxLjg4ODk0IC04LjIzNjA2IDUxLjg5MTY0IC04LjIzOTExIDUxLjg5MTYxIC04LjI0Mjk3IDUxLjg4OTg3IC04LjI0NjI5IDUxLjg4ODE0IC04LjI0NDQxIDUxLjg4NSAtOC4yNTE1NSA1MS44ODc5OSAtOC4yNTU2NyA1MS44OTAxNSAtOC4yNTgzNSA1MS44OTE3OSAtOC4yNDk5NyA1MS44OTQ1NiAtOC4yNjE2NSA1MS44OTYwNSAtOC4yNjEyNiA1MS44OTc5NiAtOC4yNjE2NyA1MS44OTg3IC04LjI2NTA1IDUxLjg5NzIxIC04LjI2NzIgNTEuODk0OTkgLTguMjY1NzEgNTEuODkyNTMgLTguMjY4NzcgNTEuODk1ODMgLTguMjcwNTggNTEuODk2NzUgLTguMjcyMTkgNTEuODk5NjkgLTguMjcyMyA1MS44OTg3NyAtOC4yNzU3MyA1MS44OTc3IC04LjI4MTk3IDUxLjg5NTc0IC04LjI4NDIyIDUxLjg5MzMzIC04LjI4NjQyIDUxLjg5MzIzIC04LjI4OTgyIDUxLjg5MzkxIC04LjI5NiA1MS44OTQgLTguMzAzMTQgNTEuODkzNyAtOC4zMDg0NCA1MS44OTUwMyAtOC4zMTExNSA1MS44OTc0MSAtOC4zMTI5NyA1MS44OTk2MSAtOC4zMTQ3NiA1MS45MDE4OCAtOC4zMTAzNCA1MS45MDI3MiAtOC4zMDMxOCA1MS45MDQ3NyAtOC4yOTkzIDUxLjkwNzYgLTguMjk0MzUgNTEuOTA1NTcgLTguMjkxMjUgNTEuOTA2MjUgLTguMjg3MDQgNTEuOTAzNTQgLTguMjc1OTYgNTEuOTEwMDcgLTguMjg0MzEgNTEuOTEwMzEgLTguMjg2NzIgNTEuOTEwNyAtOC4yOTE1MyA1MS45MTA0MiAtOC4yOTQ5MSA1MS45MTI0NCAtOC4zMDE4OCA1MS45MTM2MSAtOC4zMDczOCA1MS45MTE3IC04LjMwODc1IDUxLjkxMDA1IC04LjMwNzAzIDUxLjkwODQ4IC04LjMwNTQ3IDUxLjkwNjQ1IC04LjMxMDY4IDUxLjkwOTUxIC04LjMxMTg1IDUxLjkxMDgxIC04LjMxNTAxIDUxLjkxMTUxIC04LjMyMDc1IDUxLjkxMzEzIC04LjMyMzIyIDUxLjkxMzAyIC04LjMzMDE3IDUxLjkxMjE3IC04LjMzMzkyIDUxLjkwOTY2IC04LjMzMjgyIDUxLjkxMDAxIC04LjMyODEyIDUxLjkwOTQzIC04LjMyMzQzIDUxLjkwODU5IC04LjMxODU2IDUxLjkwNjc5IC04LjMxNjM3IDUxLjkwNDE0IC04LjMxNzc5IDUxLjkwMDE3IC04LjMyMTUyIDUxLjg5NzExIC04LjMyMzYxIDUxLjg5MjE5IC04LjMyNzgyIDUxLjg4OTAzIC04LjMzMTk3IDUxLjg5MDY5IC04LjMzNTE3IDUxLjg5Mzc2IC04LjMzNzk4IDUxLjg5NDY1IC04LjM0MDE5IDUxLjg5NDk5IC04LjM0NTg5IDUxLjg5NjQ1IC04LjM1MjYzIDUxLjg5NTM4IC04LjM1MzY3IDUxLjg5NSAtOC4zNTc0NyA1MS44OTQzNSAtOC4zNjI1OCA1MS44OTgzMyAtOC4zNjg5MyA1MS45MDEzMyAtOC4zNzQ1NiA1MS45MDQwOCAtOC4zODE0OSA1MS45MDUyIC04LjM4OTUxIDUxLjkwNTU1IC04LjM5NDkyIDUxLjkwMTU0IC04LjM5NDE5IDUxLjg5ODY3IC04LjM5MzAzIDUxLjg5NjQyIC04LjM4ODcxIDUxLjg5NDk1IC04LjM4NTM4IDUxLjg5MDc3IC04LjM4NTk3IDUxLjg4Njg1IC04LjM4NzE5IDUxLjg4NDcyIC04LjM4OTI3IDUxLjg4MzQ4IC04LjM5MzI0IDUxLjg4MzkxIC04LjM5NzMxIDUxLjg4NTczIC04LjQwMTEzIDUxLjg4NTQ4IC04LjQwNTU1IDUxLjg4NSAtOC40MTI2MSA1MS44ODY3MyAtOC40MTYyNyA1MS44ODc5NCAtOC40MjEwNSA1MS44ODY0MyAtOC40MzAwNCA1MS44ODMyIC04LjQzMDMxIDUxLjg4MzQxIC04LjQxOTgxIDUxLjg4MzUzIC04LjQxMDkxIDUxLjg4MjU0IC04LjQwNTQ0IDUxLjg4MTEyIC04LjQwMjk5IDUxLjg4MDU1IC04LjM5NjUzIDUxLjg4MTcyIC04LjM5MzU5IDUxLjg4MTg4IC04LjM4OSA1MS44Nzk1MyAtOC4zODY1OSA1MS44ODA2MyAtOC4zNzk5MSA1MS44ODQyNCAtOC4zNzk1NCA1MS44ODUzMyAtOC4zNzgwNyA1MS44ODM4MSAtOC4zNzU2MyA1MS44ODA4OSAtOC4zNzUyIDUxLjg3OTgzIC04LjM3MTA1IDUxLjg4MTU0IC04LjM2MzI2IDUxLjg4MjM5IC04LjM1NDQ5IDUxLjg4MjY0IC04LjM0NjUgNTEuODc5NDIgLTguMzM4MDQgNTEuODc2NSAtOC4zMjkxNyA1MS44NzI2OCAtOC4zMjY4NCA1MS44Njc2MyAtOC4zMjY1NyA1MS44NjIyNSAtOC4zMjU4MSA1MS44NTgyNyAtOC4zMjYyOSA1MS44NTM0OCAtOC4zMjY2NCA1MS44NTA2OSAtOC4zMjcxMyA1MS44NDc3OCAtOC4zMzE2MyA1MS44NDUxOCAtOC4zMzczMyA1MS44NDQyMyAtOC4zNDI5OSA1MS44NDI1NSAtOC4zNTAzMSA1MS44NDEyNiAtOC4zMzE1OSA1MS44NDQ5OSAtOC4zMjM4MSA1MS44NDIzIC04LjMyMDkxIDUxLjgzOTk5IC04LjMxNzYyIDUxLjgzNzI1IC04LjMxNDExIDUxLjgzNTM2IC04LjMwOTg1IDUxLjgzNjE2IC04LjMwMDE4IDUxLjgzNzc2IC04LjI5Nzg4IDUxLjg0MzM4IC04LjI5OTExIDUxLjg0Mjg4IC04LjMwMTU2IDUxLjg0NjI4IC04LjMwMDI2IDUxLjg0NjI4IC04LjMwMDI2IDUxLjg0NTkyIC04LjI5ODM2IDUxLjg0NTkyIC04LjI5ODM2IDUxLjg0NjggLTguMjkyMTggNTEuODQ1NDcgLTguMjkxMSA1MS44NDM5NCAtOC4yOTM4NiA1MS44NDI2NiAtOC4yOTM4MiA1MS44Mzk3MSAtOC4yOTM4NiA1MS44Mzc4NCAtOC4yOTQ0NyA1MS44MzU2OSAtOC4yOTUwNiA1MS44MzQwMyAtOC4yOTIwMiA1MS44MzI0OCAtOC4yOTM0MyA1MS44MzA3OSAtOC4yOTQwOCA1MS44Mjg3NSAtOC4yOTYwMiA1MS44MjYzNyAtOC4yOTc3NSA1MS44MjQxOCAtOC4yOTc0NCA1MS44MjMzMyAtOC4zMDEwNCA1MS44MjQ2NyAtOC4zMDM2IDUxLjgyNjUyIC04LjMwMTc3IDUxLjgyNjcgLTguMzA1MjEgNTEuODI3MzEgLTguMzEwOTQgNTEuODI3OTIgLTguMzE2NSA1MS44MjYyNCAtOC4zMTg3OSA1MS44MjQ2MiAtOC4zMTgxMSA1MS44MjI1NyAtOC4zMTY5NCA1MS44MjEzNiAtOC4zMTM5NSA1MS44MjE3OCAtOC4zMTEwNCA1MS44MjIyMiAtOC4zMDgxNSA1MS44MjAyOSAtOC4zMDYzOSA1MS44MTc2NiAtOC4zMDU3MyA1MS44MTYzOCAtOC4zMDM5IDUxLjgxNzA0IC04LjMwMjA4IDUxLjgxODE1IC04LjI5ODM3IDUxLjgxODEgLTguMjkyNDUgNTEuODE3MzUgLTguMjg1ODEgNTEuODE2MDUgLTguMjg0NTkgNTEuODE0MTQgLTguMjg1NjYgNTEuODEyNSAtOC4yODg5OCA1MS44MTE4NiAtOC4yOTU3MiA1MS44MTI1NSAtOC4zMDAxMSA1MS44MTIyNSAtOC4zMDM3OCA1MS44MTE4NCAtOC4zMDgxNiA1MS44MTI2NyAtOC4zMDk2MiA1MS44MTIzMyAtOC4zMTQzIDUxLjgxMDY0IC04LjMxNjczIDUxLjgwOTE5IC04LjMxOTY0IDUxLjgwODI1IC04LjMxNDkxIDUxLjgwOTA5IC04LjMwNzc3IDUxLjgwOTE5IC04LjMwMjYgNTEuODA5NiAtOC4yOTUxIDUxLjgwNzk5IC04LjI5MDg3IDUxLjgwOTA5IC04LjI4NzMzIDUxLjgxMjE0IC04LjI4NTM5IDUxLjgxNDg2IC04LjI4MTAyIDUxLjgxNjQ2IC04LjI3NjggNTEuODE2MDQgLTguMjcyNzMgNTEuODE0MjkgLTguMjcxMTUgNTEuODExMzUgLTguMjcxMDQgNTEuODA3OSAtOC4yNjg2MyA1MS44MDQ2MyAtOC4yNjc4OCA1MS44MDEwMSAtOC4yNzAzMyA1MS43OTg3NSAtOC4yNzI4MyA1MS43OTU1NSAtOC4yNzQzIDUxLjc5MjM2IC04LjI3NTUgNTEuNzg5ODggLTguMjgwNjMgNTEuNzg4NDIgLTguMjg1NDYgNTEuNzg1NzggLTguMjg4NjUgNTEuNzgzNDMgLTguMjkxMTMgNTEuNzgxMDEgLTguMjk3IDUxLjc4MDc1IC04LjMwMzM0IDUxLjc3ODI3IC04LjMwNjcgNTEuNzc3NTUgLTguMzA4MjIgNTEuNzc3MjYgLTguMzEzNTEgNTEuNzc1NTggLTguMzE1NzkgNTEuNzczNTUgLTguMzE3NTcgNTEuNzcwNTEgLTguMzIyNzggNTEuNzY5NiAtOC4zMzEwOSA1MS43NzA1IC04LjMzODE3IDUxLjc2ODUxIC04LjM0MSA1MS43Njc4MyAtOC4zMzg1NCA1MS43NjY2OCAtOC4zMzU4NiA1MS43NjY2MSAtOC4zMzIxNSA1MS43Njc0OSAtOC4zMjc1MyA1MS43NjgyNSAtOC4zMjIxNyA1MS43Njk5MiAtOC4zMTY3NyA1MS43NzM0NiAtOC4zMTQxNiA1MS43NzQxNCAtOC4zMDgzNCA1MS43NzU0OCAtOC4zMDM5NCA1MS43NzY2NiAtOC4yOTkwNiA1MS43NzQ2NiAtOC4zMDA1NSA1MS43NzQ3OSAtOC4yOTYyOCA1MS43NzQyIC04LjI5MTkgNTEuNzcxOTIgLTguMjkzMzYgNTEuNzY5MDUgLTguMjk1MzIgNTEuNzY1MTUgLTguMjkyODYgNTEuNzYyNTMgLTguMjkxOSA1MS43NTk3NCAtOC4yOTQxNyA1MS43NTU4NiAtOC4yOTYyOCA1MS43NTIxMiAtOC4yOTU3NyA1MS43NDkzNSAtOC4yOTU5NiA1MS43NDc1NSAtOC4zMDA0NCA1MS43NDUgLTguMzAzMzUgNTEuNzQxMDMgLTguMzA1NDUgNTEuNzM3MTUgLTguMzA1NjUgNTEuNzM1NyAtOC4zMDcwNiA1MS43Mzc2NiAtOC4zMTE2MyA1MS43MzgwMSAtOC4zMTcgNTEuNzM4NzkgLTguMzIzMDQgNTEuNzM3MjIgLTguMzI0ODkgNTEuNzM1MDEgLTguMzI2NjUgNTEuNzMzNTMgLTguMzMwMTQgNTEuNzMwODggLTguMzI5OTIgNTEuNzI3NzEgLTguMzMwOCA1MS43MjQxNSAtOC4zMzIwNyA1MS43MjE2NyAtOC4zMzM3OSA1MS43MTk3OCAtOC4zMzc5NiA1MS43MTk0IC04LjM0NSA1MS43MTcxMyAtOC4zNDc3OSA1MS43MTk5OSAtOC4zNTEwMSA1MS43MTkyMyAtOC4zNTY1MSA1MS43MTkxNiAtOC4zNjYxMiA1MS43MTg0IC04LjM3NTAzIDUxLjcxNjg3IC04LjM3OTQgNTEuNzEzNiAtOC4zODIxOSA1MS43MDk1MiAtOC4zODYxOSA1MS43MDY5NyAtOC4zODIyOSA1MS43MDY1MSAtOC4zODU3NiA1MS43MDcwOSAtOC4zOTM1NCA1MS43MDc1IC04LjQwMTI4IDUxLjcwODA4IC04LjQwOTA2IDUxLjcwNTcgLTguNDEzODkgNTEuNzAzIC04LjQxNzc5IDUxLjY5OTkyIC04LjQxODU0IDUxLjY5NzE5IC04LjQxODE1IDUxLjY5NDg4IC04LjQyMTgxIDUxLjY5MTc2IC04LjQyNjY4IDUxLjY5MDM4IC04LjQzNDkyIDUxLjY5MjI4IC04LjQ0MDUxIDUxLjY5NjE1IC04LjQ0MDMzIDUxLjY5ODc0IC04LjQzNTA3IDUxLjcwMDY0IC04LjQzNTY0IDUxLjcwMzIxIC04LjQzNTU4IDUxLjcwNDc5IC04LjQzMTk2IDUxLjcwNzQyIC04LjQzMjYyIDUxLjcwOTg2IC04LjQzNTA1IDUxLjcxMzA4IC04LjQzNTA2IDUxLjcxNDk3IC04LjQzNzQxIDUxLjcxMTIgLTguNDM3NDYgNTEuNzA5MTEgLTguNDM4NDkgNTEuNzA2MjEgLTguNDQxMTcgNTEuNzA0MTcgLTguNDQxNjIgNTEuNzAyNTYgLTguNDQyNDIgNTEuNzAxMjkgLTguNDQ3MTMgNTEuNzAzMzMgLTguNDUwMDggNTEuNzA1NzYgLTguNDUxMDIgNTEuNzA4MDkgLTguNDUzNzIgNTEuNzExMzcgLTguNDU0MzQgNTEuNzEzNzcgLTguNDU1NzIgNTEuNzE1OSAtOC40NTg2OSA1MS43MTY3MSAtOC40NjQxMyA1MS43MTg1NyAtOC40NjY5MiA1MS43MTc3IC04LjQ3MjcgNTEuNzIzMzcgLTguNDc5ODggNTEuNzI3MTEgLTguNDgwNDMgNTEuNzIzNjUgLTguNDg2NDQgNTEuNzIyMzMgLTguNDg1MzYgNTEuNzIwMDMgLTguNDgyMDYgNTEuNzE3NzYgLTguNDgxNTkgNTEuNzE2MyAtOC40NzgxMyA1MS43MTM4OCAtOC40NzM2MyA1MS43MTQ1NCAtOC40NzAwMyA1MS43MTQ1NyAtOC40NjYyIDUxLjcxMTU3IC04LjQ2MjM1IDUxLjcwODAzIC04LjQ1ODE1IDUxLjcwMzU0IC04LjQ1NDU1IDUxLjY5OTQ0IC04LjQ1MjE4IDUxLjY5OTAxIC04LjQ0Njc5IDUxLjY5ODcyIC04LjQ0MjAyIDUxLjY5NjQ4IC04LjQ0Mjc0IDUxLjY5Mjc0IC04LjQ0NTQ2IDUxLjY4ODc3IC04LjQ0OTAyIDUxLjY4NjIxIC04LjQ1MzY4IDUxLjY4NTQxIC04LjQ1OTkyIDUxLjY4NSAtOC40NjU2MyA1MS42ODEwMiAtOC40NjYwOSA1MS42ODAzOSAtOC40NzA4OCA1MS42ODA5OCAtOC40NzY4NyA1MS42ODA1IC04LjQ4MjEzIDUxLjY4MTc0IC04LjQ4NjMgNTEuNjg0ODEgLTguNDg3MTggNTEuNjg5MTUgLTguNDgzNjcgNTEuNjkzMTEgLTguNDgzNSA1MS42OTY0MyAtOC40ODgxMyA1MS43MDAxOCAtOC40OTM1NCA1MS43MDYzIC04LjQ5MjY1IDUxLjcxMDUgLTguNTAxNCA1MS43MDg3OSAtOC41MDg5OSA1MS43MDQ1IC04LjUwOTk5IDUxLjcwMjgyIC04LjUxMjExIDUxLjcwMSAtOC41MTgzNSA1MS43MDIyMyAtOC41MjU5MyA1MS43MDYwNiAtOC41MzMxNCA1MS43MDgxNiAtOC41NDE0MyA1MS43MDc1OSAtOC41NDY2OCA1MS43MDYgLTguNTUyMDYgNTEuNzA0MDEgLTguNTU4MTQgNTEuNzAxMjYgLTguNTYyNzYgNTEuNzAyNzggLTguNTY2ODMgNTEuNzAxMzggLTguNTY4ODQgNTEuNzAxNTkgLTguNTc0OTMgNTEuNzAzNTkgLTguNTgzMzYgNTEuNzA0ODIgLTguNTg5MzEgNTEuNzA2ODQgLTguNTkwOTQgNTEuNzEwNDYgLTguNTkxOTEgNTEuNzEzNzkgLTguNTkzMTQgNTEuNzE2NTQgLTguNTk2NjUgNTEuNzE5NSAtOC41OTc5NyA1MS43MjA3OSAtOC41OTQ2MSA1MS43MTk5NyAtOC41OTI4NyA1MS43MTkxNyAtOC41OTA2OCA1MS43MTk0MiAtOC41ODgwNSA1MS43MjExMiAtOC41ODU2NCA1MS43MjI4OSAtOC41ODk4OSA1MS43MjMyMyAtOC41OTUyNiA1MS43MjMzNiAtOC41OTk3MyA1MS43MjQ2MSAtOC42MDM0NyA1MS43MjY5NSAtOC42MDQ1NCA1MS43Mjk0MyAtOC42MDQ0NyA1MS43MzIxNiAtOC42MDUwMiA1MS43MzQgLTguNjExMzUgNTEuNzM0MTYgLTguNjE2NTYgNTEuNzM1NjYgLTguNjIxMDcgNTEuNzM4MzcgLTguNjIzNCA1MS43NDAyNyAtOC42MjM5OCA1MS43NDI0MSAtOC42MjM1NSA1MS43NDQzIC04LjYyMjc5IDUxLjc0NTMxIC04LjYyMDg3IDUxLjc0Nzc1IC04LjYyMDIgNTEuNzUwOTYgLTguNjIxODYgNTEuNzU1MjYgLTguNjI3MjMgNTEuNzU4NjggLTguNjMxNzMgNTEuNzYyMjQgLTguNjM1MzcgNTEuNzY0NTQgLTguNjQxNzggNTEuNzU5ODMgLTguNjM3MzkgNTEuNzU3MjEgLTguNjMzMTUgNTEuNzUzMTkgLTguNjI5NTkgNTEuNzUwMDcgLTguNjI2MTYgNTEuNzQ3MzUgLTguNjIzODQgNTEuNzQ0ODYgLTguNjI3MTcgNTEuNzQyMjUgLTguNjI5NDUgNTEuNzM5MzUgLTguNjI4ODggNTEuNzM2OCAtOC42Mjk5OCA1MS43MzQ1NyAtOC42MjU1IDUxLjczMTg1IC04LjYxODU5IDUxLjczMTMzIC04LjYxMzAzIDUxLjczMDUgLTguNjA5OCA1MS43MjcyOSAtOC42MDk2MyA1MS43MjQxMiAtOC42MDg4NiA1MS43MjI1MiAtOC42MDYyNiA1MS43MTg0MSAtOC42MDQxNyA1MS43MTYwNiAtOC42MDE3NiA1MS43MTQzNyAtOC41OTkxNSA1MS43MTI2OCAtOC42MDE0MSA1MS43MTMzMSAtOC42MDY1MyA1MS43MTQ1NSAtOC42MDkwOCA1MS43MTU2MSAtOC42MTI5NCA1MS43MTQ1NSAtOC42MTM4MSA1MS43MTI0NiAtOC42MTAyNiA1MS43MTEzMSAtOC42MDYyNCA1MS43MTAxIC04LjYwMTQ4IDUxLjcxMDk0IC04LjU5ODA1IDUxLjcxMDE2IC04LjU5NTcxIDUxLjcwNzgxIC04LjU5NjU1IDUxLjcwNTU0IC04LjU5NjA3IDUxLjcwNTM4IC04LjU5Mzk4IDUxLjcwMjY4IC04LjU5NDYxIDUxLjcwMTEgLTguNTkxNzMgNTEuNjk4MjQgLTguNTkwMjcgNTEuNjk4ODUgLTguNTg1OTIgNTEuNjk4MzEgLTguNTgyMjkgNTEuNjk2OTYgLTguNTc3MDcgNTEuNjk2ODUgLTguNTc0MDkgNTEuNjk4NjcgLTguNTcxMSA1MS42OTgzIC04LjU2ODEgNTEuNjk2NjIgLTguNTY1MTkgNTEuNjk2OTYgLTguNTYwOCA1MS42OTY1MSAtOC41NTc0OCA1MS42OTcyMiAtOC41NTYxMSA1MS42OTgyOSAtOC41NTUyMiA1MS42OTk0MSAtOC41NTE1NSA1MS43MDEzNSAtOC41NDk3NiA1MS43MDMzOCAtOC41NDc5OCA1MS43MDQwMyAtOC41NDMwNCA1MS43MDIwNCAtOC41MzkwNyA1MS43MDE1IC04LjUzMzk2IDUxLjY5OTIxIC04LjUzMjE0IDUxLjY5NjEzIC04LjUyOTkyIDUxLjY5NjA5IC04LjUyNCA1MS42OTU1NSAtOC41MjIxNSA1MS42OTY3IC04LjUxODAzIDUxLjY5Nzg4IC04LjUxMzMxIDUxLjY5OTQyIC04LjUwODgxIDUxLjcwMTkzIC04LjUwNjUyIDUxLjcwNDAyIC04LjUwNTQ5IDUxLjcwNTA4IC04LjUwMjgyIDUxLjcwNDU1IC04LjUwMDgzIDUxLjcwMjY0IC04LjUwMDQxIDUxLjcwMDE5IC04LjUwMTUyIDUxLjY5NzMxIC04LjUwMjE0IDUxLjY5NTM4IC04LjUwMjE3IDUxLjY5Mjg3IC04LjQ5NzgxIDUxLjY5MDY1IC04LjQ5NDY4IDUxLjY4ODgzIC04LjQ5NzUyIDUxLjY4NzcxIC04LjQ5OTQyIDUxLjY4NDk3IC04LjQ5OTE4IDUxLjY4MzM4IC04LjUwMTQ2IDUxLjY4NDQyIC04LjUwNTg5IDUxLjY4NTA3IC04LjUwODk1IDUxLjY4NjkxIC04LjUxMDU0IDUxLjY4ODE2IC04LjUxNDQ1IDUxLjY4NTcyIC04LjUxMjMgNTEuNjgzOTMgLTguNTExMjkgNTEuNjgyMyAtOC41MTIzOSA1MS42ODExNyAtOC41MTYyMSA1MS42Nzg2IC04LjUxNjI4IDUxLjY3NzcxIC04LjUxNzM1IDUxLjY3NzcxIC04LjUxNzM1IDUxLjY3MzI3IC04LjUxOTUxIDUxLjY2OTk4IC04LjUyMDY2IDUxLjY2NDM3IC04LjUyMzk3IDUxLjY2MDc1IC04LjUyNjI1IDUxLjY1Nzg1IC04LjUyODc4IDUxLjY1NzI3IC04LjUzNDMxIDUxLjY1NTUxIC04LjUzNDUgNTEuNjUzOTEgLTguNTM2NzkgNTEuNjUxNjUgLTguNTM3NjQgNTEuNjQ5NzIgLTguNTQyNTIgNTEuNjQ2MiAtOC41NDMwNCA1MS42NDUwOCAtOC41NDAyMyA1MS42NDM1MSAtOC41MzY5IDUxLjYzOTYyIC04LjUzNTg5IDUxLjYzOTU2IC04LjUzMjA0IDUxLjYzNjQzIC04LjUzMzc5IDUxLjYzNDMzIC04LjUzMDIzIDUxLjYzMyAtOC41MjI4MiA1MS42MzA0MiAtOC41MjI4OSA1MS42MjcxMyAtOC41Mjc0MyA1MS42Mjc0NyAtOC41MzI5MyA1MS42MjU3NiAtOC41MzU0OSA1MS42MjE2NiAtOC41MzMxMyA1MS42MTg5NiAtOC41Mjg5IDUxLjYxNzE4IC04LjUyMTQgNTEuNjEzOSAtOC41MjA3OCA1MS42MTA5OSAtOC41MjE4MyA1MS42MDc5NiAtOC41MjQ5NCA1MS42MDk5NiAtOC41MzAzOSA1MS42MTE5NiAtOC41MzU3IDUxLjYxMzk0IC04LjUzODA2IDUxLjYxNzEgLTguNTM5MjUgNTEuNjE5NzMgLTguNTM4MDEgNTEuNjI0MDIgLTguNTM4NDkgNTEuNjI2NyAtOC41NDAwNiA1MS42MjgzNyAtOC41NDYyIDUxLjYyODg0IC04LjU1MjYzIDUxLjYzMDUxIC04LjU1MzkgNTEuNjMzOSAtOC41NDkzOCA1MS42MzY0NiAtOC41NDk2IDUxLjYzOTc0IC04LjU1MzQ3IDUxLjY0NDQgLTguNTU4NzMgNTEuNjQ1NTkgLTguNTYzNjMgNTEuNjQ2NjMgLTguNTY4MjIgNTEuNjQ4MDcgLTguNTcxODMgNTEuNjQ4MTMgLTguNTc3MyA1MS42NDY1OSAtOC41ODY1MyA1MS42NDQ0IC04LjYwMDk4IDUxLjY0MjA5IC04LjYwNDQ4IDUxLjY0MTMzIC04LjYwOTY5IDUxLjY0MDUyIC04LjYxNzU0IDUxLjY0MDk5IC04LjYyNTI5IDUxLjY0MjM3IC04LjYzMTcgNTEuNjQwODEgLTguNjM0ODcgNTEuNjM5NjggLTguNjM4NjggNTEuNjQwNzEgLTguNjQzMTIgNTEuNjM5ODQgLTguNjQ3MTIgNTEuNjM5MzcgLTguNjUwNDUgNTEuNjQwNzkgLTguNjUzMDIgNTEuNjQ1MTEgLTguNjU0NTUgNTEuNjQ4ODUgLTguNjU2ODggNTEuNjUxODMgLTguNjYwODcgNTEuNjU2MzYgLTguNjYyMTMgNTEuNjU5NTkgLTguNjYwMjUgNTEuNjYxMTkgLTguNjU3OTYgNTEuNjYyMDIgLTguNjYxMDUgNTEuNjY0MjMgLTguNjY0MzQgNTEuNjY2MDIgLTguNjY1MTkgNTEuNjY5MDUgLTguNjY2ODIgNTEuNjY4MDUgLTguNjY4MyA1MS42NjU1NiAtOC42NyA1MS42NjMwNiAtOC42NzAzNiA1MS42NTk2NyAtOC42NjY5MSA1MS42NTcxMiAtOC42NjQ5IDUxLjY1NDQ0IC04LjY2NjcyIDUxLjY1MTk5IC04LjY2OTMyIDUxLjY1MDY4IC04LjY2OTg1IDUxLjY0OTQzIC04LjY3MDg1IDUxLjY0OTExIC04LjY3NDggNTEuNjQ5MzUgLTguNjc4NTIgNTEuNjUxNDQgLTguNjgzNzEgNTEuNjUzMTQgLTguNjg3NjYgNTEuNjU0MzEgLTguNjkxMzcgNTEuNjUxNDIgLTguNjkwMzYgNTEuNjUwNiAtOC42OTM2MyA1MS42NDg4MyAtOC42OTU0NCA1MS42NDcwOCAtOC42OTcyNCA1MS42NDUyNSAtOC42OTg1OSA1MS42NDUxMyAtOC43MDIyOCA1MS42NDYyOCAtOC43MDc5MSA1MS42NDg5MSAtOC43MTE3IDUxLjY1MDg2IC04LjcxNDUgNTEuNjUxMzUgLTguNzE4ODcgNTEuNjUwNzYgLTguNzIyNjEgNTEuNjUwMzQgLTguNzI2NjggNTEuNjUwODUgLTguNzMyMjIgNTEuNjUwMDQgLTguNzM2NTUgNTEuNjQ5MDkgLTguNzQzNDkgNTEuNjQ4NDIgLTguNzQ4NzEgNTEuNjQ2NjYgLTguNzUwNTIgNTEuNjQ0NzIgLTguNzUyMjkgNTEuNjQyNDIgLTguNzU1NjQgNTEuNjQxMyAtOC43NTQxNCA1MS42NDI4NCAtOC43NTE0MSA1MS42NDM5OSAtOC43NDkwNyA1MS42NDYxMyAtOC43NDg2NiA1MS42NDcyOCAtOC43NDYzMiA1MS42NDY4MiAtOC43NDQ0OSA1MS42NDcwNiAtOC43Mzg5IDUxLjY0NjA5IC04LjczMzQ0IDUxLjY0Mjc0IC04LjcyNzc3IDUxLjYzOTg4IC04LjcyMzIgNTEuNjM5MjQgLTguNzE4MzggNTEuNjM5MDkgLTguNzExNDEgNTEuNjM5NDUgLTguNzAyMDEgNTEuNjM4MTUgLTguNjk3MjUgNTEuNjM3NTIgLTguNjkyMjcgNTEuNjM5NiAtOC42ODk2NCA1MS42Mzk2NiAtOC42ODcxMyA1MS42Mzk5IC04LjY4Mjg4IDUxLjYzOTk3IC04LjY3ODQ2IDUxLjY0MDk1IC04LjY3NDE4IDUxLjYzNzc0IC04LjY3NDEzIDUxLjYzNTg0IC04LjY3NTE4IDUxLjYzNDQ0IC04LjY3NzA1IDUxLjYzMjE2IC04LjY3ODMyIDUxLjYzMDI2IC04LjY4MjY0IDUxLjYyNzkyIC04LjY4MzMyIDUxLjYyNTc3IC04LjY4NTY1IDUxLjYyNDM2IC04LjY5MTA1IDUxLjYyMTY2IC04LjY5MTM5IDUxLjYxODE3IC04LjY4OTg0IDUxLjYxNzk2IC04LjY4MjQyIDUxLjYxODMyIC04LjY3NzYgNTEuNjE3NzMgLTguNjc1MTUgNTEuNjE1MTggLTguNjgxMTMgNTEuNjEzODMgLTguNjgwNDggNTEuNjE0MTYgLTguNjcxODIgNTEuNjEzNTEgLTguNjY3IDUxLjYxMDc2IC04LjY2ODUxIDUxLjYwODkyIC04LjY3NDg4IDUxLjYwNzg2IC04LjY4MjEgNTEuNjA1MjcgLTguNjgyMzEgNTEuNjAyNTEgLTguNjgzOTYgNTEuNjAwNiAtOC42OTAwMyA1MS41OTgxNiAtOC42OTM5NCA1MS41OTU0MiAtOC42OTUzMSA1MS41OTM2NCAtOC42OTQxNSA1MS41OTA1MiAtOC42OTA4OSA1MS41ODc0NiAtOC42ODgzNyA1MS41ODM4MSAtOC42ODc4MyA1MS41ODExIC04LjY5MDA4IDUxLjU3OTgzIC04LjY5NjIzIDUxLjU3NTA3IC04LjY5NTY3IDUxLjU3MzI4IC04LjcwNDU0IDUxLjU3NjMxIC04LjcwOTQyIDUxLjU3NjM2IC04LjcxNDg5IDUxLjU3NzUyIC04LjcyMDM3IDUxLjU3NjA0IC04LjcyNTE2IDUxLjU3OTI0IC04LjczMTk5IDUxLjU3OTIxIC04LjczNTY4IDUxLjU3NjU2IC04LjczNTI3IDUxLjU3NTIzIC04LjczNTgyIDUxLjU3MzU0IC04LjczODIyIDUxLjU3MzggLTguNzQwMDIgNTEuNTc1OTUgLTguNzM5MzIgNTEuNTc3MzcgLTguNzQwNDEgNTEuNTc2NDIgLTguNzQzOTUgNTEuNTc2NjIgLTguNzQ2NzggNTEuNTc4NzcgLTguNzQ2MjMgNTEuNTgwNzggLTguNzQzMjkgNTEuNTgzMDggLTguNzQxODYgNTEuNTg2MTEgLTguNzQwMjUgNTEuNTg4MjcgLTguNzQxMDIgNTEuNTkwNjYgLTguNzQyNyA1MS41OTQyNCAtOC43NDQ0MiA1MS41OTU3MiAtOC43NDg5MiA1MS41OTIzMyAtOC43NTAzMiA1MS41OTAyMSAtOC43NTE5MyA1MS41ODgyIC04Ljc1Nzk3IDUxLjU4NjY2IC04Ljc2MDY5IDUxLjU4NzcyIC04Ljc2NDgzIDUxLjU5MDI0IC04Ljc2ODkgNTEuNTkyNTggLTguNzcyOCA1MS41OTM0NSAtOC43NzgzOCA1MS41OTQxOSAtOC43ODMwNyA1MS41OTUxMiAtOC43ODc2NCA1MS41OTc1MyAtOC43OTIgNTEuNTk5NjEgLTguNzk3MzIgNTEuNTk5MzIgLTguODAwODIgNTEuNTk4MjEgLTguODA1NTIgNTEuNTk3NzkgLTguODExMDcgNTEuNTk3OTkgLTguODE3MTUgNTEuNTk3NzUgLTguODI0MzQgNTEuNTk4NTMgLTguODI5NzcgNTEuNTk3MyAtOC44MzUwNSA1MS41OTc3MSAtOC44NDA1NyA1MS42MDE2NyAtOC44NDA1OCA1MS42MDUzNCAtOC44NDA3IDUxLjYwOTUzIC04LjgzOTg3IDUxLjYxMTk5IC04LjgzODYyIDUxLjYxNDY4IC04Ljg0MTM4IDUxLjYxNjQ4IC04Ljg0NTIgNTEuNjE3NDggLTguODUxNzEgNTEuNjE3NjUgLTguODU4MDggNTEuNjIwMjcgLTguODYyMDIgNTEuNjIyOSAtOC44NjQwNSA1MS42MjQ5OSAtOC44Njc3NiA1MS42MjI5MSAtOC44Njg2MyA1MS42MjExNyAtOC44Njg1MSA1MS42MTk0NyAtOC44Njc2NyA1MS42MTgyIC04Ljg2NTk5IDUxLjYxNjEgLTguODY1NjcgNTEuNjE0MjIgLTguODY2NDIgNTEuNjExOTYgLTguODY1NzcgNTEuNjA5MDggLTguODY0NDYgNTEuNjA4NzIgLTguODYxMyA1MS42MDk2OCAtOC44NjA1NiA1MS42MTA1MyAtOC44NTcxNSA1MS42MTA5NCAtOC44NTE3NSA1MS42MTEzMyAtOC44NDM1NCA1MS42MDg0NSAtOC44NDI1MSA1MS42MDQ4MyAtOC44NDMyOCA1MS42MDI1MSAtOC44NDgyNCA1MS41OTg2NyAtOC44NDc4MSA1MS42MDAzMiAtOC44NTcyMiA1MS42MDE2IC04Ljg2NjcgNTEuNjA0MTkgLTguODcyNzEgNTEuNjA3MzIgLTguODc4ODEgNTEuNjA1NzUgLTguODgxOTUgNTEuNjAyODIgLTguODgzMjggNTEuNjAwMTQgLTguODgzNiA1MS41OTg1NiAtOC44NzkyMyA1MS41OTc4NSAtOC44NzI0NyA1MS41OTYwNCAtOC44Njg5NSA1MS41OTYyNSAtOC44NjU0NSA1MS41OTYxNyAtOC44NTg4IDUxLjU5MzU4IC04Ljg1NzY2IDUxLjU5MSAtOC44NTkzMiA1MS41ODg4MSAtOC44NjA2MiA1MS41ODU0OCAtOC44NjI0NyA1MS41ODEzOSAtOC44NjAwOCA1MS41NzkwNSAtOC44NjIyNCA1MS41NzgzNyAtOC44NjYxMSA1MS41NzcwNyAtOC44NzI1NSA1MS41NzQxNyAtOC44Nzc4NiA1MS41NzA1OSAtOC44ODI0NyA1MS41Njg0NiAtOC44ODI1OSA1MS41NjYyNiAtOC44ODQxOCA1MS41NjMgLTguODgzMjQgNTEuNTYyMjUgLTguODc4ODQgNTEuNTU5NTkgLTguODc4NTggNTEuNTU1NDQgLTguODc3MzYgNTEuNTU0NzMgLTguODg2MjUgNTEuNTUyOTMgLTguODg3MTUgNTEuNTUwNTMgLTguODg4NjkgNTEuNTUwMjggLTguODk0NTYgNTEuNTQ5MzYgLTguODk2MDQgNTEuNTQ3MTUgLTguODk3NzYgNTEuNTQ2MTggLTguOTAzMjIgNTEuNTQ0NDEgLTguOTAzNTQgNTEuNTQzMDQgLTguOTE0MjQgNTEuNTQ2MzggLTguOTE1MzQgNTEuNTQ5ODggLTguOTE2NzYgNTEuNTUwNDIgLTguOTIxNTYgNTEuNTQ5ODggLTguOTI2MDUgNTEuNTQ4MTQgLTguOTMwNTEgNTEuNTQ1NjkgLTguOTMxNDYgNTEuNTQzNiAtOC45Mjk1MSA1MS41Mzk0NiAtOC45MzI1NiA1MS41Mzc2NyAtOC45Mzk1MSA1MS41MzQzOCAtOC45MzkxNSA1MS41MzEzMSAtOC45NDExOCA1MS41MzUxOCAtOC45NDU3NiA1MS41MzgwMyAtOC45NDQxMyA1MS41NDEwOCAtOC45NDM4NyA1MS41NDQwNCAtOC45NDM1OCA1MS41NDgwNCAtOC45NDQ1IDUxLjU1MTY0IC04Ljk0NTc5IDUxLjU1NTA4IC04Ljk0NTI5IDUxLjU1ODIzIC04Ljk0NDc1IDUxLjU1Nzg5IC04Ljk0NzM1IDUxLjU1ODAxIC04Ljk1MDAxIDUxLjU2MDIyIC04Ljk1NDQ5IDUxLjU2Mjk4IC04Ljk1OTIgNTEuNTY0MDUgLTguOTY1OTkgNTEuNTY0NjYgLTguOTcwOTYgNTEuNTY2MyAtOC45NzU3OSA1MS41Njk5MyAtOC45Nzk3NCA1MS41NzA5NyAtOC45ODY4NCA1MS41NzEzMyAtOC45OTMyNCA1MS41NzAxNiAtOC45OTU3MSA1MS41Njk1OSAtOC45OTkxNiA1MS41Njk3MiAtOS4wMDMxOCA1MS41NzE2NSAtOS4wMDYxMyA1MS41NzI4MyAtOS4wMDk1NSA1MS41NzU1MSAtOS4wMDkyNCA1MS41NzcyOCAtOS4wMDg5MiA1MS41ODAxOSAtOS4wMDk1MiA1MS41ODMyNSAtOS4wMTIyIDUxLjU4NjgzIC05LjAxNTEzIDUxLjU4NDkyIC05LjAxNjMxIDUxLjU4MyAtOS4wMTYzIDUxLjU4MDQyIC05LjAxNjIgNTEuNTc3OTMgLTkuMDE0NzggNTEuNTc0MTcgLTkuMDEzMDEgNTEuNTcxMTkgLTkuMDEwNzcgNTEuNTY4MjMgLTkuMDA5NDMgNTEuNTY1NTEgLTkuMDA0MjggNTEuNTY0NSAtOS4wMDU3NCA1MS41NjM0NyAtOS4wMDc2NSA1MS41NjQyMiAtOS4wMTE5IDUxLjU2NTU4IC05LjAxNTM1IDUxLjU2Mzc1IC05LjAxOTY1IDUxLjU2MjY4IC05LjAyMDY1IDUxLjU2MTE1IC05LjAyMTYgNTEuNTU5NjMgLTkuMDIyMzkgNTEuNTU4NDcgLTkuMDI0ODcgNTEuNTU5MzUgLTkuMDI4NCA1MS41NTk2NiAtOS4wMzExIDUxLjU2MTUzIC05LjAzMjEzIDUxLjU2MjYyIC05LjAzNTI2IDUxLjU2MDA1IC05LjAzNjc3IDUxLjU2MDE1IC05LjAzMzU0IDUxLjU1OTE5IC05LjAzMjggNTEuNTU3NTEgLTkuMDMzMTMgNTEuNTU2NSAtOS4wMzYwNiA1MS41NTYyNCAtOS4wNDA0NSA1MS41NTcyOSAtOS4wNDQxNiA1MS41NTgyNyAtOS4wNDc4NSA1MS41NjE3IC05LjA1MDYgNTEuNTYyODIgLTkuMDU2MjMgNTEuNTYwNzkgLTkuMDU2MzUgNTEuNTU5MzUgLTkuMDU0MzYgNTEuNTU4MjIgLTkuMDUxNjggNTEuNTU2MzYgLTkuMDQ4ODcgNTEuNTUzOTQgLTkuMDUwODYgNTEuNTUyNTggLTkuMDUzNTkgNTEuNTUxMTUgLTkuMDU4OTcgNTEuNTUwMDUgLTkuMDY2NDggNTEuNTQ5NzYgLTkuMDcyOTIgNTEuNTUxNiAtOS4wNzg2NyA1MS41NTI1MSAtOS4wODIwNSA1MS41NTMxMSAtOS4wODczMSA1MS41NTQyMyAtOS4wOTI5NCA1MS41NTc4IC05LjA5NjMgNTEuNTYxODcgLTkuMDk4ODcgNTEuNTY1NTMgLTkuMTAyMjUgNTEuNTY5MTQgLTkuMTA2NTEgNTEuNTY3NzYgLTkuMTA5MzkgNTEuNTY2MDQgLTkuMTEzNTQgNTEuNTY1NDUgLTkuMTE3MTMgNTEuNTY4MDUgLTkuMTIxMjMgNTEuNTcyMDQgLTkuMTIzNSA1MS41NzY5NyAtOS4xMjU3NSA1MS41ODA3IC05LjEyOTQ1IDUxLjU4NDE4IC05LjEzMTMzIDUxLjU4MjA1IC05LjEzMjkgNTEuNTgyNzEgLTkuMTM3MTQgNTEuNTgwMDggLTkuMTM2NTggNTEuNTc3MjYgLTkuMTM0NTEgNTEuNTc1MzIgLTkuMTMxNTUgNTEuNTczOTggLTkuMTI3OTMgNTEuNTcxNzIgLTkuMTI1OTUgNTEuNTY3OTEgLTkuMTI0OTEgNTEuNTYzMyAtOS4xMjY2OCA1MS41NjM0NyAtOS4xMTkzMyA1MS41NjMzIC05LjExMzExIDUxLjU2MTAyIC05LjEwNjg1IDUxLjU1NzM4IC05LjEwMzE4IDUxLjU1NDE0IC05LjEwMjA4IDUxLjU1MTgyIC05LjEwMzkxIDUxLjU0ODY2IC05LjEwMjg0IDUxLjU0NTgyIC05LjEwMTIgNTEuNTQzMTEgLTkuMDk3MzkgNTEuNTQxMTkgLTkuMDk1NzUgNTEuNTM5ODUgLTkuMTAyNDggNTEuNTQwMDIgLTkuMTA3MzYgNTEuNTM3NjcgLTkuMTA1MDggNTEuNTM1OTIgLTkuMTEyNDcgNTEuNTM0MzMgLTkuMTIwNDggNTEuNTMyNzUgLTkuMTE3NzIgNTEuNTMxMDggLTkuMTE2NDMgNTEuNTI5MjggLTkuMTIwMjcgNTEuNTI3OTIgLTkuMTI3NDIgNTEuNTI2MTMgLTkuMTM0MDcgNTEuNTI1MzkgLTkuMTM4NjYgNTEuNTI4MSAtOS4xMzk1NCA1MS41Mjk3MiAtOS4xNDAwOSA1MS41MzA4NCAtOS4xMzY4OCA1MS41MzIyNyAtOS4xMzYwOCA1MS41MzM3MiAtOS4xMzc5MiA1MS41MzI0OCAtOS4xNDAyMyA1MS41MzEyMSAtOS4xNDI2OSA1MS41MzExMSAtOS4xNDU5MiA1MS41MjkxOSAtOS4xNDg3MSA1MS41Mjc4OCAtOS4xNDc0NyA1MS41MjY3MiAtOS4xNDU1MSA1MS41MjU3OCAtOS4xNDI4NiA1MS41MjMxMyAtOS4xNDI1OSA1MS41MjMxOSAtOS4xNDYxNCA1MS41MjMwMSAtOS4xNTA1MiA1MS41MTg1NyAtOS4xNTIzMiA1MS41MTg0IC05LjE1ODA1IDUxLjUxODM1IC05LjE2MTg4IDUxLjUyMjc0IC05LjE2MjQyIDUxLjUyNTM4IC05LjE1OTc2IDUxLjUyOTg3IC05LjE1NzA3IDUxLjUzNTYyIC05LjE1NDc1IDUxLjU0MTEgLTkuMTUzODUgNTEuNTQ1MTQgLTkuMTUyNTYgNTEuNTQ4NDcgLTkuMTUyMzYgNTEuNTUxODUgLTkuMTU0MjMgNTEuNTU0NiAtOS4xNTc0NyA1MS41NTEyIC05LjE2MDMyIDUxLjU0ODY2IC05LjE1ODE0IDUxLjU0NjEyIC05LjE1NzU5IDUxLjU0MTE5IC05LjE1ODU4IDUxLjUzNDY4IC05LjE1OTc1IDUxLjUyODY1IC05LjE2MzM3IDUxLjUyNDkzIC05LjE2ODUzIDUxLjUyMzQzIC05LjE3MzQ1IDUxLjUyMDU2IC05LjE3MzczIDUxLjUyMDk5IC05LjE3MTE0IDUxLjUxOTc4IC05LjE3MDA2IDUxLjUxNTE0IC05LjE3NjU1IDUxLjUxMTY0IC05LjE3NTEgNTEuNTExNjQgLTkuMTc1MSA1MS41MDkyNSAtOS4xODM4NiA1MS41MTA4OCAtOS4xODczNyA1MS41MTAzNSAtOS4xODk5MyA1MS41MDg0NSAtOS4xOTI0MiA1MS41MDY3MyAtOS4xOTIwMSA1MS41MDM1MyAtOS4xOTc1MyA1MS40OTk2MyAtOS4yMDI1MiA1MS40OTYwNyAtOS4yMDA3NiA1MS40OTM1NCAtOS4xOTg0NCA1MS40OTEgLTkuMTk2NDEgNTEuNDg4ODQgLTkuMTk1NzcgNTEuNDg2OTMgLTkuMTk4MjggNTEuNDg4ODQgLTkuMjAwMDUgNTEuNDg4MDkgLTkuMjAzMTcgNTEuNDg3MzMgLTkuMjA4MDcgNTEuNDg2OSAtOS4yMTM0NSA1MS40ODMwNCAtOS4yMTYyMSA1MS40ODI2OSAtOS4yMjA0MyA1MS40ODMyMyAtOS4yMjM2MSA1MS40ODQ5NSAtOS4yMjU1IDUxLjQ4NDk4IC05LjIyODE2IDUxLjQ4NDQ5IC05LjIzNDQxIDUxLjQ4OTIyIC05LjIzMDkgNTEuNDkxMzEgLTkuMjI4MyA1MS40OTI4NyAtOS4yMjI1MSA1MS40OTQ2MSAtOS4yMjI2MyA1MS40OTQ0NyAtOS4yMjY0NCA1MS40OTc3NSAtOS4yMjY4MiA1MS40OTQ4IC05LjIzMTM1IDUxLjQ5Mzc5IC05LjIzNTc3IDUxLjQ5MzEyIC05LjI0MTk5IDUxLjQ5Mjk2IC05LjI0NzcxIDUxLjQ5MTY2IC05LjI1MDYgNTEuNDkwMTcgLTkuMjU0MDQgNTEuNDkwMTggLTkuMjU2NjkgNTEuNDg3MzMgLTkuMjYxMDkgNTEuNDg5OTkgLTkuMjU5NzYgNTEuNDkxMjcgLTkuMjU4MzQgNTEuNDkzMTEgLTkuMjYxMjkgNTEuNDk1MjQgLTkuMjU5NzEgNTEuNDk3MTEgLTkuMjU5MTQgNTEuNTAwMDIgLTkuMjU4MjggNTEuNTAyMTcgLTkuMjU3NzQgNTEuNTAzNzcgLTkuMjU4NzMgNTEuNTAyMzQgLTkuMjYyMzQgNTEuNTAwODYgLTkuMjY0MDEgNTEuNTAxMDUgLTkuMjY4MTcgNTEuNDk5MiAtOS4yNjgzMSA1MS40OTc1OCAtOS4yNjc5IDUxLjQ5NjI2IC05LjI2OTc2IDUxLjQ5ODQ0IC05LjI3MzA2IDUxLjQ5Njk5IC05LjI3NTc3IDUxLjQ5NzUgLTkuMjc4MDcgNTEuNTAwNzcgLTkuMjc3MTIgNTEuNDk5OTMgLTkuMjgwMjIgNTEuNDk4NTQgLTkuMjgxNzYgNTEuNDk5NDUgLTkuMjg0ODYgNTEuNTAxMDIgLTkuMjg0ODEgNTEuNTAyNTIgLTkuMjg1OTUgNTEuNTA0NTkgLTkuMjg4MDUgNTEuNTA2NjMgLTkuMjg5NDEgNTEuNTA3OTUgLTkuMjkwMjEgNTEuNTA4MDggLTkuMjk0MDcgNTEuNTA3MjMgLTkuMjk4NzkgNTEuNTA1MTIgLTkuMjk4NiA1MS41MDM0MiAtOS4yOTc4OCA1MS41MDEwMyAtOS4yOTY0NiA1MS40OTgzMyAtOS4yOTM5NyA1MS41MDAwNSAtOS4yOTMwNiA1MS41MDEyMyAtOS4yOTE3OCA1MS41MDA4NyAtOS4yODg2MiA1MS40OTkxMSAtOS4yODc0NSA1MS40OTY1IC05LjI4NzkxIDUxLjQ5NDc3IC05LjI4NDg0IDUxLjQ5MTg5IC05LjI4MjMxIDUxLjQ5MDk4IC05LjI4NDk3IDUxLjQ5MDE1IC05LjI4OTI1IDUxLjQ4ODYxIC05LjI5NDkgNTEuNDg3NDUgLTkuMzAxNjMgNTEuNDg1NDEgLTkuMzA0ODQgNTEuNDgzMDQgLTkuMzA4NzIgNTEuNDgxMDcgLTkuMzA5NDQgNTEuNDc5MzggLTkuMzE1NzggNTEuNDc2ODkgLTkuMzI0NTIgNTEuNDc1MjcgLTkuMzMxMTggNTEuNDcyODkgLTkuMzMzODkgNTEuNDcwODIgLTkuMzM0NzMgNTEuNDY5MjcgLTkuMzM1OTUgNTEuNDcwMjUgLTkuMzQyMjkgNTEuNDczNTUgLTkuMzQ1MzMgNTEuNDcyNzMgLTkuMzUzNzQgNTEuNDc0MDIgLTkuMzU2NzUgNTEuNDcwOSAtOS4zNjA5NiA1MS40Njk1MSAtOS4zNjU0NCA1MS40NzA0IC05LjM3MTYzIDUxLjQ3MjUzIC05LjM3NDMzIDUxLjQ3NTcgLTkuMzc1MTUgNTEuNDc0ODYgLTkuMzc4MzkgNTEuNDc1ODkgLTkuMzgyMzkgNTEuNDc3OSAtOS4zNzg0NSA1MS40Nzk4MSAtOS4zNzM3OSA1MS40ODExOSAtOS4zNzUwOCA1MS40ODMzMSAtOS4zNzEzNSA1MS40ODI5MyAtOS4zNjg5MiA1MS40ODM5NyAtOS4zNjc0OCA1MS40ODYwMyAtOS4zNjU1MSA1MS40ODgyNSAtOS4zNjQyOSA1MS40ODk5MiAtOS4zNjE1MiA1MS40ODk2MyAtOS4zNTY3NCA1MS40ODgxNiAtOS4zNTAyNiA1MS40OTA5NSAtOS4zNDczOCA1MS40OTM0NyAtOS4zNDMxNCA1MS40OTUxMiAtOS4zNDcxMyA1MS41MDExOSAtOS4zNDU5IDUxLjUwNzk3IC05LjM0MjcyIDUxLjUwOTgyIC05LjM0ODk3IDUxLjUwNzMzIC05LjM1MDI5IDUxLjUwNjczIC05LjM1NDc1IDUxLjUwNDIgLTkuMzU1MzEgNTEuNTAxOTMgLTkuMzU0ODkgNTEuNDk5MiAtOS4zNTQzOCA1MS40OTcxOSAtOS4zNTUzNCA1MS40OTUwNCAtOS4zNTcgNTEuNDkyNDEgLTkuMzU5MDIgNTEuNDkyMTQgLTkuMzYyNjcgNTEuNDkzNzEgLTkuMzYzOTggNTEuNDkzMDQgLTkuMzY1NjMgNTEuNDkxMjMgLTkuMzY4ODQgNTEuNDg4OTIgLTkuMzcwMTcgNTEuNDg5MTUgLTkuMzc1ODIgNTEuNDkwOTIgLTkuMzc3MDQgNTEuNDk0NzggLTkuMzc3MDMgNTEuNDk4MSAtOS4zNzcwNSA1MS41MDAyNiAtOS4zNzI1OSA1MS41MDE2OSAtOS4zNzE5NyA1MS41MDI0NyAtOS4zNzQwMyA1MS41MDI2OSAtOS4zNzczMSA1MS41MDI0MyAtOS4zNzk2MyA1MS41MDI4MyAtOS4zODE3NyA1MS41MDQ2NyAtOS4zODMwMSA1MS41MDY2OSAtOS4zNzgwNiA1MS41MTAyMyAtOS4zNjk4NyA1MS41MDkxMyAtOS4zNjg2MiA1MS41MDc2IC05LjM2Njg2IDUxLjUwOTkxIC05LjM2NTUzIDUxLjUxMTM2IC05LjM2NDQ4IDUxLjUxMjU1IC05LjM2MjE4IDUxLjUxNDEzIC05LjM1OTM4IDUxLjUxNTY3IC05LjM1NTgzIDUxLjUxNzA1IC05LjM1MjI0IDUxLjUxNjY1IC05LjM0ODc2IDUxLjUxNDM1IC05LjM0ODc4IDUxLjUxMTIyIC05LjM0NzQ2IDUxLjUwOTg5IC05LjM0MjkzIDUxLjUxMjUgLTkuMzQwMDMgNTEuNTEyNDIgLTkuMzQ0ODggNTEuNTE3MDEgLTkuMzQ1MTUgNTEuNTE1MTEgLTkuMzQyMTQgNTEuNTE5MzIgLTkuMzM4NzggNTEuNTIwMjIgLTkuMzM2NDMgNTEuNTIxNTggLTkuMzMxNjYgNTEuNTIyNDIgLTkuMzM1MzcgNTEuNTIxMDggLTkuMzM4NTIgNTEuNTIwMTIgLTkuMzQxNiA1MS41MjEzOCAtOS4zNDU5NiA1MS41MTg4IC05LjM0ODQzIDUxLjUxOTQxIC05LjM1MDE2IDUxLjUxNzU5IC05LjM1NDg2IDUxLjUxODQ3IC05LjM1Njc4IDUxLjUxOTk5IC05LjM1NjE5IDUxLjUyMTYxIC05LjM1NzgxIDUxLjUyMzIgLTkuMzU4ODUgNTEuNTI0MSAtOS4zNTY2NSA1MS41MjU5MyAtOS4zNTMgNTEuNTI3NDggLTkuMzUwNzggNTEuNTI3NTkgLTkuMzQ2NjcgNTEuNTI4NDEgLTkuMzQyOTggNTEuNTI4MDQgLTkuMzM3OSA1MS41Mjc0NyAtOS4zMzQyNCA1MS41MjYzNSAtOS4zMzE5NyA1MS41MjQyOSAtOS4zMzM2NiA1MS41MjMxNyAtOS4zMzEzNyA1MS41MjU2OCAtOS4zMjcyNyA1MS41MjczMSAtOS4zMjYzOCA1MS41Mjg1NiAtOS4zMjU3MyA1MS41MzA3NiAtOS4zMjU2OSA1MS41MzI0IC05LjMyMDk4IDUxLjUzMzk0IC05LjMxNzU3IDUxLjUzMzE5IC05LjMxNTIyIDUxLjUzMjc1IC05LjMxMjQ3IDUxLjUzNDgzIC05LjMxMTUzIDUxLjUzNTc5IC05LjMwODQ2IDUxLjUzODEgLTkuMzEwOTUgNTEuNTQwNDggLTkuMzEyNTggNTEuNTQzNDggLTkuMzEzMTQgNTEuNTQ2MDggLTkuMzExNTUgNTEuNTQ3NTMgLTkuMzA4MTIgNTEuNTQ4NzcgLTkuMzAzNjIgNTEuNTUwNzggLTkuMzAxMzQgNTEuNTQ5ODQgLTkuMzA1NDUgNTEuNTQ3MzggLTkuMzEzODYgNTEuNTQ1OCAtOS4zMjA1MSA1MS41NDM1NSAtOS4zMjIzMSA1MS41NDIzOSAtOS4zMTkxNCA1MS41NDIwMyAtOS4zMTY1NiA1MS41NDAzIC05LjMxNjI0IDUxLjUzOTAzIC05LjMxNDY4IDUxLjUzNzgxIC05LjMxMzcxIDUxLjUzNzI1IC05LjMxNjQxIDUxLjUzODgzIC05LjMxNzQ1IDUxLjUzOTk5IC05LjMyMDQ3IDUxLjUzODkxIC05LjMyMTQ1IDUxLjUzNjU0IC05LjMyMTE2IDUxLjUzNjEyIC05LjMyNDMyIDUxLjUzNDE1IC05LjMyNjAyIDUxLjUzMjc4IC05LjMyODU3IDUxLjUzMTQ2IC05LjMzNjQ2IDUxLjUzMTAzIC05LjMzOTc4IDUxLjUzMjIgLTkuMzQyOCA1MS41MzQzMyAtOS4zNDI2MSA1MS41MzYyMSAtOS4zNDA4OSA1MS41Mzc3NSAtOS4zNDI1MSA1MS41NDAwOCAtOS4zNDIxOSA1MS41NDA4MSAtOS4zNDQ4NCA1MS41MzkzNyAtOS4zNDY5NCA1MS41MzczNiAtOS4zNDY1NyA1MS41MzU4MSAtOS4zNDY0MyA1MS41MzQwOSAtOS4zNDg0NyA1MS41MzE5MyAtOS4zNDkwOSA1MS41MzAxMiAtOS4zNDk4IDUxLjUyOTE4IC05LjM1MjcyIDUxLjUyOTMyIC05LjM1ODUxIDUxLjUyODMzIC05LjM2MzA2IDUxLjUyNTg5IC05LjM2NDk2IDUxLjUyMjY4IC05LjM2MzQ4IDUxLjUyMDg3IC05LjM2MTgxIDUxLjUxOTYxIC05LjM2MjYyIDUxLjUxNzA4IC05LjM2MzE3IDUxLjUxNDg5IC05LjM2NTQyIDUxLjUxMzI1IC05LjM3MDI4IDUxLjUxMjUyIC05LjM3NjQ5IDUxLjUxMDYxIC05LjM4MjQ5IDUxLjUwODQ3IC05LjM4OTAyIDUxLjUwNjExIC05LjM5MzYxIDUxLjUwMzY2IC05LjM5NDMzIDUxLjUwMDY2IC05LjM5NDk0IDUxLjQ5OTEyIC05LjQwMjE5IDUxLjUwMjA0IC05LjQwNjI4IDUxLjUwMTkxIC05LjQwODE4IDUxLjUwNTczIC05LjQwNzU1IDUxLjUwODE0IC05LjQwNjIzIDUxLjUxMTQ2IC05LjQwNDc5IDUxLjUxNDM4IC05LjQwMDM2IDUxLjUxNjIgLTkuNDAzMDEgNTEuNTE3MDMgLTkuNDA1NTUgNTEuNTE1NDIgLTkuNDA4NjQgNTEuNTEzODggLTkuNDA5NTMgNTEuNTEyMzQgLTkuNDEwNDMgNTEuNTEwMDMgLTkuNDEzMDkgNTEuNTA2NiAtOS40MTU4NCA1MS41MDgxNiAtOS40MTg1IDUxLjUxMTExIC05LjQxODQ1IDUxLjUxMjkxIC05LjQyMzk3IDUxLjUxNDE5IC05LjQyMDUxIDUxLjUxNjQ1IC05LjQxNzI0IDUxLjUxNzQ0IC05LjQxMjU2IDUxLjUyMDEgLTkuNDEyNzYgNTEuNTIxMDUgLTkuNDA4NjUgNTEuNTIyMzEgLTkuNDA0MDIgNTEuNTI0MTIgLTkuMzk5MzMgNTEuNTI4MTkgLTkuMzk1MzcgNTEuNTMxOTYgLTkuMzk0MyA1MS41MzQxOCAtOS4zOTE2MSA1MS41MzY0NyAtOS4zODgwNSA1MS41Mzg4NCAtOS4zODU5OCA1MS41NDEzMyAtOS4zODcwNCA1MS41NDQxNSAtOS4zODUwNSA1MS41NDYxMiAtOS4zODMzNiA1MS41NDg4IC05LjM4NDQ1IDUxLjU1MTQ3IC05LjM4NTg0IDUxLjU1Mzc1IC05LjM4NzQ0IDUxLjU1Mzc1IC05LjM4NzQ0IDUxLjU1MzM4IC05LjM5MDA0IDUxLjU1MTkgLTkuMzkwMDUgNTEuNTQ4NjMgLTkuMzkxODEgNTEuNTQ0NzMgLTkuMzk0NzggNTEuNTQ1NDcgLTkuMzk3MjcgNTEuNTQzMzcgLTkuNDAwODYgNTEuNTQxODkgLTkuNDAzNCA1MS41NDIwOCAtOS40MDU4MSA1MS41NDQ1NSAtOS40MDczIDUxLjU0Njg4IC05LjQxMDgzIDUxLjU0ODkyIC05LjQwOTQ1IDUxLjU1MDQgLTkuNDA2NzcgNTEuNTUyMiAtOS40MDYwNyA1MS41NTQ5NyAtOS40MDczMiA1MS41NTM3OSAtOS40MTU4MyA1MS41NTA1NSAtOS40MTcyOSA1MS41NDg0NSAtOS40MTU3MSA1MS41NDUzMSAtOS40MTgzNyA1MS41NTExNCAtOS40MjQzNSA1MS41NTM2NiAtOS40MjY0NCA1MS41NTU4OSAtOS40Mjc0NSA1MS41NTUzNCAtOS40MzIzNyA1MS41NTUzMiAtOS40MzUzMyA1MS41NTc0NCAtOS40Mzc3OSA1MS41NTk2NCAtOS40MzkyNSA1MS41NjE4NCAtOS40NDE4OCA1MS41NjM0NSAtOS40NDYzMSA1MS41NjEyNSAtOS40NDg1NyA1MS41NTkzMiAtOS40NDYxMyA1MS41NTY5MyAtOS40NDQ3OSA1MS41NTUyMiAtOS40NDUzNiA1MS41NTM1NiAtOS40NDUzNSA1MS41NTUgLTkuNDQwODcgNTEuNTUzOTYgLTkuNDM5OTYgNTEuNTUyODMgLTkuNDM4OTkgNTEuNTUyMzkgLTkuNDM2MjUgNTEuNTUxNDkgLTkuNDM0NiA1MS41NDg4NSAtOS40MzI5MyA1MS41NDgyNiAtOS40MzcyNSA1MS41NDY0NCAtOS40MzgyNCA1MS41NDQyMiAtOS40MzU3NiA1MS41NDM4MyAtOS40MzM2MSA1MS41NDI5MyAtOS40MjgxMSA1MS41NDEyNSAtOS40MjcyMSA1MS41NDAwNCAtOS40Mjg3NiA1MS41MzgyMSAtOS40Mjk3NCA1MS41MzY0MSAtOS40MjkxMSA1MS41MzQ3NSAtOS40MzQxMiA1MS41MzMwOSAtOS40Mzc5NCA1MS41MzAzNCAtOS40MzkwNCA1MS41MzAzNSAtOS40NDI2IDUxLjUyODI1IC05LjQ0NDg2IDUxLjUyNzU2IC05LjQ0NjggNTEuNTI2NzkgLTkuNDUwOTMgNTEuNTI2MiAtOS40NTUyNiA1MS41Mjc1MiAtOS40NTk5NCA1MS41Mjk3MyAtOS40NjExIDUxLjUzMjUgLTkuNDU3MTkgNTEuNTMzNiAtOS40NTg1NyA1MS41MzE5NSAtOS40NjM1OCA1MS41MzI2NyAtOS40NjYyMiA1MS41MzE3NyAtOS40Njg0MiA1MS41MzAzMyAtOS40NjU0OSA1MS41MjkxNCAtOS40NjQwOCA1MS41MjY5NiAtOS40NjM2OCA1MS41MjUyMiAtOS40Njg1MiA1MS41MjQxMiAtOS40NzQ2NiA1MS41MjUwOSAtOS40NzkxMyA1MS41MjQ4NiAtOS40ODM1MSA1MS41MjM4OSAtOS40ODg5NCA1MS41MjE5OSAtOS40OTEwOSA1MS41MTk2NSAtOS40OTM5IDUxLjUxOTY2IC05LjQ5ODkyIDUxLjUxOTE5IC05LjUwNCA1MS41MTcxOSAtOS41MTEwMSA1MS41MTQ2NyAtOS41MjAyNyA1MS41MTcwMyAtOS41MjA3MyA1MS41MTkzMyAtOS41MTcwMiA1MS41MjE5MSAtOS41MTgyNSA1MS41MjQ2MyAtOS41MTY0IDUxLjUyNjczIC05LjUxNzk5IDUxLjUyNzg1IC05LjUxNzc2IDUxLjUzMDYzIC05LjUxNjM3IDUxLjUzMTAxIC05LjUxODY1IDUxLjUyOTk1IC05LjUyMDY2IDUxLjUzMDkyIC05LjUyMzY1IDUxLjUzMDM1IC05LjUyNzU1IDUxLjUyODg4IC05LjUzMjU4IDUxLjUyNjgyIC05LjUzNTQ0IDUxLjUyNDQyIC05LjUzNjYxIDUxLjUyMjQ3IC05LjUzNDQ2IDUxLjUxOSAtOS41MzI3NiA1MS41MTYyIC05LjUzMTggNTEuNTEzNTYgLTkuNTMyNzcgNTEuNTEwNjUgLTkuNTQwNzkgNTEuNTA2NTUgLTkuNTU2MjUgNTEuNTA1NzggLTkuNTYyODkgNTEuNTA3ODEgLTkuNTY3ODYgNTEuNTA1ODIgLTkuNTczNTMgNTEuNTA2NjMgLTkuNTc2MTkgNTEuNTA5MjEgLTkuNTc1MDYgNTEuNTExOTEgLTkuNTczMzYgNTEuNTE0NTMgLTkuNTcyODMgNTEuNTE3MjEgLTkuNTc0MDcgNTEuNTE1NTMgLTkuNTc1NjggNTEuNTEzODggLTkuNTc2NyA1MS41MTI0NCAtOS41Nzg3OCA1MS41MTExNCAtOS41Nzc2NSA1MS41MDk1IC05LjU3NzMzIDUxLjUwNzUxIC05LjU3ODE0IDUxLjUwNTY4IC05LjU4NDEzIDUxLjUwNDcxIC05LjU4OTcgNTEuNTAzMjkgLTkuNTkzODYgNTEuNTAzMDYgLTkuNTk2NzggNTEuNTAxNjEgLTkuNjAwMTkgNTEuNTAxMTMgLTkuNTk4MDMgNTEuNTAxMTIgLTkuNTk1NjYgNTEuNTAxNzcgLTkuNTkzMTMgNTEuNTAyMDIgLTkuNTg5NzggNTEuNTAyNjcgLTkuNTg2MDYgNTEuNTAyMTYgLTkuNTgzMDIgNTEuNTAyMjYgLTkuNTgwMzggNTEuNTAyNTggLTkuNTc3MzMgNTEuNTAxODggLTkuNTc0NCA1MS41MDAyMSAtOS41NzMyIDUxLjQ5ODc5IC05LjU3NjMzIDUxLjQ5NzIgLTkuNTgxNDggNTEuNDk3MDcgLTkuNTg2OTIgNTEuNDk2MDggLTkuNTg3OTEgNTEuNDk1NDIgLTkuNTkwNTggNTEuNDk0MjggLTkuNTk3MTcgNTEuNDkzOTUgLTkuNjA1MzYgNTEuNDkzMTEgLTkuNjA5MTkgNTEuNDkyNDkgLTkuNjEzNjUgNTEuNDkyMTEgLTkuNjE2MjMgNTEuNDkzNTEgLTkuNjIzNDUgNTEuNDk1MDYgLTkuNjE3NTQgNTEuNDk1OTcgLTkuNjEzODcgNTEuNDk3NjYgLTkuNjA5OTEgNTEuNDk4ODcgLTkuNjA5NyA1MS41MDA1MSAtOS42MTEyIDUxLjUwMDI1IC05LjYxMzM2IDUxLjUwMDAyIC05LjYxNjU3IDUxLjUwMDcgLTkuNjE5OCA1MS41MDI2OCAtOS42MjA0NyA1MS41MDQxNyAtOS42MjAxOCA1MS41MDUxOCAtOS42MjE0IDUxLjUwNTMzIC05LjYyNDM4IDUxLjUwOTcgLTkuNjI3NTggNTEuNTExMzEgLTkuNjIzMzIgNTEuNTEyODEgLTkuNjI1NTIgNTEuNTE0NDggLTkuNjI1MzkgNTEuNTEzNjQgLTkuNjI5MDggNTEuNTE0MjEgLTkuNjMyNTggNTEuNTE1MjcgLTkuNjM0NDEgNTEuNTE3NTMgLTkuNjMzOTYgNTEuNTIwMDYgLTkuNjMzNDEgNTEuNTIyOTYgLTkuNjMzOTcgNTEuNTIxMjkgLTkuNjM3NzkgNTEuNTE5NzQgLTkuNjM4ODIgNTEuNTE3NzkgLTkuNjM4ODggNTEuNTE3IC05LjY0MDk1IDUxLjUxNTc2IC05LjY0MTQ1IDUxLjUxNTg4IC05LjY0NTkxIDUxLjUxODI5IC05LjY0NTc4IDUxLjUxOTI5IC05LjY0NzMgNTEuNTE2OTcgLTkuNjUzNSA1MS41MTU0MyAtOS42NTMyIDUxLjUxMzM2IC05LjY1MzY5IDUxLjUxMjU3IC05LjY0NzE5IDUxLjUxMDIxIC05LjY0Nzc3IDUxLjUwNzg1IC05LjY0ODUgNTEuNTA0OTQgLTkuNjUyOTUgNTEuNTAyODYgLTkuNjU0NzcgNTEuNTAwNjUgLTkuNjU1OTcgNTEuNTAzMDYgLTkuNjU5MzkgNTEuNTA2NjkgLTkuNjU3NzMgNTEuNTA2NzEgLTkuNjYxMjYgNTEuNTA1MzQgLTkuNjYzMzcgNTEuNTA1NjQgLTkuNjY2ODIgNTEuNTA0OCAtOS42NzA2NSA1MS41MDMyMyAtOS42NzQzNCA1MS41MDA4NCAtOS42NzkwNCA1MS40OTkxOCAtOS42ODQwNCA1MS40OTc1MyAtOS42ODg3MyA1MS40OTU5NyAtOS42OTI0MiA1MS40OTU5IC05LjY5OTM1IDUxLjQ5NDQ3IC05LjY5ODc3IDUxLjQ5MjcgLTkuNjk2NTIgNTEuNDkwNTIgLTkuNjk2MSA1MS40ODc3NSAtOS42OTYxNSA1MS40ODUxMyAtOS42OTY2OCA1MS40ODQzNCAtOS42OTEyMSA1MS40ODIgLTkuNjk2NTEgNTEuNDgwNDkgLTkuNjk3MTEgNTEuNDc5MzQgLTkuNjkwMjQgNTEuNDc3NjMgLTkuNjk1ODIgNTEuNDc2MTYgLTkuNzAxODcgNTEuNDc0NTcgLTkuNzA3MDMgNTEuNDc2NzMgLTkuNzA2NTYgNTEuNDc1NjMgLTkuNzEwMDMgNTEuNDc0MDQgLTkuNzEyODQgNTEuNDcyOTMgLTkuNzE3NjQgNTEuNDcyMiAtOS43MjIzNyA1MS40NzE1NiAtOS43MjYwNyA1MS40NzAwMyAtOS43MjkxNyA1MS40NjggLTkuNzMyOSA1MS40NjY3OSAtOS43Mzc4NCA1MS40NjQ4NSAtOS43NDE0NSA1MS40NjM4NyAtOS43Mzk3OCA1MS40NjQyIC05LjczNjc0IDUxLjQ2NTU4IC05LjczMzAyIDUxLjQ2NzIxIC05LjcyODYyIDUxLjQ2OTIyIC05LjcyNCA1MS40Njk1NyAtOS43MTk0OSA1MS40NzA2NCAtOS43MTM5NCA1MS40NzA4NiAtOS43MDk3IDUxLjQ3MjM0IC05LjcwMjMyIDUxLjQ3MzgxIC05LjY5NzU5IDUxLjQ3MjE3IC05LjY5MzczIDUxLjQ3MjM3IC05LjY5MDk2IDUxLjQ3MDQ3IC05LjY5MDU5IDUxLjQ3MDQ0IC05LjY5NTc2IDUxLjQ3MTYgLTkuNjk4NzggNTEuNDcwNzYgLTkuNzAwMjMgNTEuNDY5NDQgLTkuNzA0MTIgNTEuNDY4NzIgLTkuNzA3NTIgNTEuNDY2NzUgLTkuNzA4MDIgNTEuNDY1MjcgLTkuNzA4MDMgNTEuNDYzOTkgLTkuNzExNDcgNTEuNDYyOCAtOS43MTYyNiA1MS40NjEyMiAtOS43MjE0MiA1MS40NjA0NCAtOS43Mjc5IDUxLjQ2MDk3IC05LjczMzAxIDUxLjQ1OTAyIC05LjczMjA1IDUxLjQ1Njg1IC05LjczODg2IDUxLjQ1OTUzIC05LjczODY0IDUxLjQ2MDQ0IC05Ljc0MjUxIDUxLjQ1ODM2IC05Ljc0MzE0IDUxLjQ1NjQgLTkuNzQ1ODUgNTEuNDU0NiAtOS43NDY1NCA1MS40NTI1OSAtOS43NDc0NyA1MS40NTA1NCAtOS43NTI1NCA1MS40NTA0MiAtOS43NTkgNTEuNDUwMTQgLTkuNzYzODEgNTEuNDUzMjQgLTkuNzU5NTYgNTEuNDUzOTYgLTkuNzY1NzQgNTEuNDU1MjIgLTkuNzYyNTkgNTEuNDU2OTIgLTkuNzU5NTMgNTEuNDU5NDQgLTkuNzU0NDEgNTEuNDYwOTMgLTkuNzUwNTcgNTEuNDYyOTkgLTkuNzUxNDEgNTEuNDYzMzQgLTkuNzU1MTcgNTEuNDY0MzMgLTkuNzU5MiA1MS40NjU5MyAtOS43NjI0NyA1MS40NjgxMSAtOS43NjI3NSA1MS40NzA4NCAtOS43NjMyOCA1MS40NzIyMSAtOS43NjU5MSA1MS40NzQyNCAtOS43NjU4NiA1MS40NzU3NSAtOS43NjI5IDUxLjQ3NzI5IC05Ljc1NzMxIDUxLjQ3ODY4IC05Ljc1MTIyIDUxLjQ4MDQyIC05Ljc1MTI3IDUxLjQ4MDgxIC05Ljc1NTkyIDUxLjQ3OTU3IC05Ljc1ODkyIDUxLjQ3NzY3IC05Ljc2NDQ2IDUxLjQ3NTUzIC05Ljc2OTUgNTEuNDcyNjMgLTkuNzczNjcgNTEuNDcxMzQgLTkuNzY4ODQgNTEuNDY5MjUgLTkuNzcwNzkgNTEuNDY3NzkgLTkuNzcwNjUgNTEuNDY1MDEgLTkuNzcwNyA1MS40NjIzIC05Ljc3MTM1IDUxLjQ1ODYxIC05Ljc3NDkgNTEuNDU1NjUgLTkuNzc3NDIgNTEuNDUzNTggLTkuNzgxNiA1MS40NTEzIC05Ljc4NDg0IDUxLjQ1MTExIC05Ljc4ODQ5IDUxLjQ1MDczIC05Ljc5MjQgNTEuNDQ5MTkgLTkuNzk3ODYgNTEuNDUxNTYgLTkuODAxODcgNTEuNDUwMzIgLTkuODA3MzcgNTEuNDUwNjkgLTkuODEyMDIgNTEuNDUzNjggLTkuODEyNzUgNTEuNDU3MjIgLTkuODEyMjcgNTEuNDYxMDQgLTkuODExODQgNTEuNDY0IC05LjgxMTY3IDUxLjQ2NjMyIC05LjgwNzg1IDUxLjQ2ODYgLTkuODA0NjEgNTEuNDcxMzIgLTkuODA1MjkgNTEuNDcyMjUgLTkuODAxNDkgNTEuNDc0MzYgLTkuODAxNjEgNTEuNDc2NjEgLTkuODAzNjYgNTEuNDc4NCAtOS44MDY2OCA1MS40Nzk3MSAtOS44MDkgNTEuNDc4NDIgLTkuODEyNDQgNTEuNDc5MzYgLTkuODE3MDUgNTEuNDc3NzggLTkuODIyMDUgNTEuNDgyNDYgLTkuODI0NzUgNTEuNDgyMjggLTkuODI4NDEgNTEuNDg0MzIgLTkuODI5MjUgNTEuNDg2NTcgLTkuODI3NjIgNTEuNDg4NDkgLTkuODIxOTUgNTEuNDg5NzUgLTkuODE2MjggNTEuNDkxNTggLTkuODExNjMgNTEuNDkzNSAtOS44MDcxMyA1MS40OTUzNiAtOS44MDA5OSA1MS40OTc5IC05Ljc5MjkyIDUxLjQ5OTg2IC05Ljc4NTQ3IDUxLjUwMzA2IC05Ljc3OTc2IDUxLjUwNDA2IC05Ljc3MjcyIDUxLjUwNzQ2IC05Ljc2Njg4IDUxLjUwOTcxIC05Ljc2OTk4IDUxLjUxMTY3IC05Ljc2NzI2IDUxLjUxMzQ2IC05Ljc2MiA1MS41MTQ4OSAtOS43NTc3IDUxLjUxNDk3IC05Ljc1MDYyIDUxLjUxNzQ5IC05Ljc0NjUzIDUxLjUyMDM3IC05Ljc0NjIgNTEuNTIzNzUgLTkuNzQ1NTMgNTEuNTI0MTYgLTkuNzQxMzMgNTEuNTIzODIgLTkuNzM3MjcgNTEuNTIzNzUgLTkuNzMyMjQgNTEuNTI1OTUgLTkuNzI4NjcgNTEuNTI3OTEgLTkuNzI3MTMgNTEuNTI4MzUgLTkuNzIzODEgNTEuNTI3MjUgLTkuNzIwMDYgNTEuNTI3NTcgLTkuNzE0NjQgNTEuNTI5NzkgLTkuNzA5NjIgNTEuNTI5NDUgLTkuNzA1NTYgNTEuNTI5MzUgLTkuNjk4NDQgNTEuNTMxNDIgLTkuNjg5MzkgNTEuNTMzOTMgLTkuNjgxNzUgNTEuNTM2MjggLTkuNjc3NDcgNTEuNTM5MDggLTkuNjczMjggNTEuNTQxOTQgLTkuNjY4NTIgNTEuNTQzNDkgLTkuNjYzNzkgNTEuNTQ2MDMgLTkuNjYwNTggNTEuNTQ0MDIgLTkuNjU3OTggNTEuNTQzMTMgLTkuNjU2MzIgNTEuNTQzMDEgLTkuNjUxODcgNTEuNTQ0NjMgLTkuNjQ4NjMgNTEuNTQzMDIgLTkuNjQ1NTIgNTEuNTQ1MzEgLTkuNjQ0NDcgNTEuNTQ2MjEgLTkuNjQ2MTMgNTEuNTQ1OTEgLTkuNjUxMjYgNTEuNTQ2MzggLTkuNjUzNTYgNTEuNTQ4MzQgLTkuNjUzMzQgNTEuNTUwNjMgLTkuNjUwOTggNTEuNTUyNyAtOS42NDc5NyA1MS41NTQzMiAtOS42NDI1MiA1MS41NTYwOCAtOS42MzczOSA1MS41NTg0NCAtOS42MzY2NSA1MS41NjA3NyAtOS42Mzc1NiA1MS41NjI5IC05LjYzODcgNTEuNTY0NDQgLTkuNjM3OTYgNTEuNTY1OTQgLTkuNjM2MzQgNTEuNTY3NDUgLTkuNjM1NzMgNTEuNTY5MTYgLTkuNjMyNjYgNTEuNTcwMDYgLTkuNjI2OTIgNTEuNTcxMjIgLTkuNjE5OSA1MS41NzIzNyAtOS42MTMxNyA1MS41NzQzMyAtOS42MDkyNiA1MS41NzU5NSAtOS42MDczNSA1MS41Nzc3NyAtOS42MDYzNyA1MS41Nzg3NSAtOS42MDgwNCA1MS41ODAxIC05LjYxMDk2IDUxLjU4MTEgLTkuNjA3NDUgNTEuNTgyMSAtOS42MDI3NiA1MS41ODMxIC05LjU5NzkyIDUxLjU4Mzk1IC05LjU5Mjc1IDUxLjU4NjA1IC05LjU4OTMxIDUxLjU4NzY2IC05LjU4NjM3IDUxLjU4OTY1IC05LjU4MTg3IDUxLjU5MTQ2IC05LjU3ODY3IDUxLjU5MTY1IC05LjU3NjA0IDUxLjU5MTk5IC05LjU3Mzg5IDUxLjU5MTk5IC05LjU3Mzg5IDUxLjU5NDQxIC05LjU3MzYxIDUxLjU5NjQ0IC05LjU3MzU2IDUxLjU5Nzk5IC05LjU3NTA0IDUxLjU5OTQyIC05LjU3MzIzIDUxLjYwMTAyIC05LjU2ODk1IDUxLjYwMjg0IC05LjU2NDQyIDUxLjYwNTA5IC05LjU2Mzk2IDUxLjYwNDY2IC05LjU1OTc0IDUxLjYwNTkzIC05LjU1NjI3IDUxLjYwNzAzIC05LjU1NTE1IDUxLjYwNzUxIC05LjU1MjQzIDUxLjYwNDI0IC05LjU0NjkzIDUxLjYwNDg3IC05LjU0MzIgNTEuNjA2ODUgLTkuNTM3NjYgNTEuNjA4ODUgLTkuNTMxODMgNTEuNjExMDMgLTkuNTMyNzkgNTEuNjExNzIgLTkuNTI1NTYgNTEuNjEyOTIgLTkuNTI1NDkgNTEuNjE0NSAtOS41MjkwNSA1MS42MTYxOCAtOS41MzAxMSA1MS42MTc3OCAtOS41MzQ1NyA1MS42MjAwMyAtOS41MzE1OSA1MS42MjAzOCAtOS41MjY5MSA1MS42MjEwNSAtOS41MjE1NiA1MS42MjI2OSAtOS41MTkyMiA1MS42MjI1NSAtOS41MjM3NyA1MS42MjIzIC05LjUyODMyIDUxLjYyMTMxIC05LjUzMjg2IDUxLjYxOTc0IC05LjUzNjcxIDUxLjYxOTgyIC05LjU0MDcyIDUxLjYxODYgLTkuNTQzNDUgNTEuNjE2ODggLTkuNTQ2NjcgNTEuNjE0NTkgLTkuNTQ2MzkgNTEuNjEzNTEgLTkuNTQ5ODggNTEuNjEyMzEgLTkuNTUzNjQgNTEuNjEzODYgLTkuNTU1MTIgNTEuNjE1NTYgLTkuNTU2OTMgNTEuNjE1MzkgLTkuNTYxNzkgNTEuNjEzODYgLTkuNTY2MjQgNTEuNjE0MSAtOS41NzE3NSA1MS42MTI1OSAtOS41NzcwOCA1MS42MTEzNiAtOS41ODI0NyA1MS42MDk3NSAtOS41ODkyNyA1MS42MDg0NCAtOS41OTQ1IDUxLjYwNTUyIC05LjU5NTI4IDUxLjYwMzg5IC05LjU5NDk1IDUxLjYwMjcgLTkuNTk4NDMgNTEuNjA0MSAtOS42MDE5NSA1MS42MDE3MSAtOS42MTAzNyA1MS41OTk3NCAtOS42MTA4OCA1MS42MDE2OCAtOS42MTQ1MSA1MS42MDE2MSAtOS42MTc5IDUxLjYwMTYzIC05LjYyMTQ2IDUxLjYwMTM1IC05LjYyNTEgNTEuNjAwNTcgLTkuNjI4MjIgNTEuNTk4NzkgLTkuNjI2MDkgNTEuNTk2ODcgLTkuNjI5NTcgNTEuNTk1NTEgLTkuNjMwNDkgNTEuNTkzOCAtOS42MzEwNSA1MS41OTE4OSAtOS42MzQ1MyA1MS41OTIwNiAtOS42MzcwOCA1MS41ODk0NiAtOS42Mzk4NCA1MS41ODg0OSAtOS42NDMwNCA1MS41ODU3MSAtOS42NDU2MSA1MS41ODQ3OSAtOS42NDkxNCA1MS41ODcxMyAtOS42NTEzNiA1MS41ODcyMSAtOS42NTYyNyA1MS41ODM5NCAtOS42NjE4NCA1MS41ODUyNyAtOS42NjQ5MSA1MS41ODI3NiAtOS42NjYzNSA1MS41ODIxNCAtOS42Njk3NyA1MS41ODA0MSAtOS42NzA3NyA1MS41NzkyMyAtOS42NzE3MyA1MS41Nzg0NSAtOS42NzM1MSA1MS41Nzg3OCAtOS42NzYzNyA1MS41ODAyIC05LjY3ODQzIDUxLjU4MDg5IC05LjY4MTUyIDUxLjU3OTIzIC05LjY4NTA0IDUxLjU3Nzk0IC05LjY4NzQ2IDUxLjU3NjIyIC05LjY4ODMxIDUxLjU3NDc3IC05LjY5MTczIDUxLjU3MzIxIC05LjY5NTI3IDUxLjU3MzY4IC05LjY5OTk1IDUxLjU3Mjk3IC05LjcwNTcyIDUxLjU3MDczIC05LjcxNDYxIDUxLjU2ODcxIC05LjcxOTI0IDUxLjU2NzIyIC05LjcyMDczIDUxLjU2NTggLTkuNzE4ODIgNTEuNTY0NDQgLTkuNzE5NzQgNTEuNTYzMTggLTkuNzE4MTcgNTEuNTYyNDcgLTkuNzIwMTEgNTEuNTYxNzYgLTkuNzIyMTggNTEuNTYxOSAtOS43MjUxNyA1MS41NjQ4IC05LjcyNzA3IDUxLjU2NTYxIC05LjcyOTc0IDUxLjU2MzUzIC05LjczNTQgNTEuNTYxNDQgLTkuNzM5ODYgNTEuNTU4NjkgLTkuNzQzMTcgNTEuNTU3ODMgLTkuNzQ4NDggNTEuNTYxNSAtOS43NDg3NiA1MS41NjAxOCAtOS43NTI2NCA1MS41NTg1MyAtOS43NTM3OCA1MS41NTY0IC05Ljc1NzUyIDUxLjU1NDUgLTkuNzYwNjkgNTEuNTUyNzQgLTkuNzY1NjcgNTEuNTUyNjYgLTkuNzcxNTggNTEuNTUyNjkgLTkuNzc3MiA1MS41NTI3MiAtOS43ODE2MyA1MS41NTE5MSAtOS43ODYyMSA1MS41NTA3OCAtOS43OTAxMyA1MS41NDg1NSAtOS43OTM5OCA1MS41NDY3IC05Ljc5ODc5IDUxLjU0NTQ3IC05LjgwNDAyIDUxLjU0NTQ3IC05LjgwNDAyIDUxLjU0NTQ4IC05LjgwNzU3IDUxLjU0NTc1IC05LjgxMjM2IDUxLjU0NTEyIC05LjgxNzExIDUxLjU0MzY1IC05LjgyMDUzIDUxLjU0NDQ1IC05LjgyNTg2IDUxLjU0NDA3IC05LjgzMDggNTEuNTQzMjggLTkuODM2MjcgNTEuNTQ0NDUgLTkuODQxNTMgNTEuNTQ3MDYgLTkuODM4NjMgNTEuNTQ5ODUgLTkuODMzNTggNTEuNTUyMiAtOS44MjY5MyA1MS41NTYyMiAtOS44MTc4MiA1MS41NTgyNCAtOS44MDgzIDUxLjU2MjE1IC05LjgwMDY0IDUxLjU2NzM2IC05Ljc5Mjc4IDUxLjU2OSAtOS43ODgyMyA1MS41NzA4NSAtOS43ODA5IDUxLjU3MDgzIC05Ljc3NzY0IDUxLjU3NDIzIC05Ljc4MDIzIDUxLjU3NjkzIC05Ljc4NDYgNTEuNTc4NDMgLTkuNzc3MDYgNTEuNTgxMTUgLTkuNzc1MjIgNTEuNTgzNCAtOS43NzM1OSA1MS41ODQ1NSAtOS43NjgyIDUxLjU4NTQ5IC05Ljc2MzA2IDUxLjU4NzQ0IC05Ljc1ODExIDUxLjU5MTM4IC05Ljc1MjM2IDUxLjU5MjYxIC05Ljc0NTc5IDUxLjU5NDYxIC05Ljc0MTQ1IDUxLjU5NjY2IC05LjczNzU1IDUxLjU5NTY2IC05LjczNDg0IDUxLjU5NjY1IC05LjczMTQ5IDUxLjU5ODQ3IC05LjcyNjk2IDUxLjU5OTUxIC05LjcyMTg0IDUxLjYwMTU0IC05LjcxNTcxIDUxLjYwMTM4IC05LjcxMDUxIDUxLjYwNDQ5IC05LjcxMDgxIDUxLjYwNzczIC05LjcwNyA1MS42MTEzMSAtOS42OTg2NyA1MS42MTYzNSAtOS42OTA0NyA1MS42MTYyIC05LjY4MzkyIDUxLjYxNzM5IC05LjY3OTI2IDUxLjYyMDkzIC05LjY3MjU1IDUxLjYyMzg4IC05LjY2Nzc5IDUxLjYyNTYxIC05LjY2MTkxIDUxLjYyNjUyIC05LjY1NDY4IDUxLjYyODU0IC05LjY0ODcgNTEuNjI5OCAtOS42NDQyIDUxLjYzMDM0IC05LjYzNTczIDUxLjYzMjE2IC05LjYzMTE4IDUxLjYzMzI5IC05LjYyMzQgNTEuNjM0ODQgLTkuNjE0OTcgNTEuNjM3MjcgLTkuNjA4NDcgNTEuNjM5MjEgLTkuNjAwODUgNTEuNjQwNyAtOS41OTgxNyA1MS42NDI5IC05LjU5NDc1IDUxLjY0NTUzIC05LjU4OTE4IDUxLjY0ODU1IC05LjU3NzAyIDUxLjY1MjE2IC05LjU2MzE5IDUxLjY1MzcgLTkuNTY2MTYgNTEuNjU1MjUgLTkuNTY1MTIgNTEuNjU2MDYgLTkuNTYxNTYgNTEuNjU2MTUgLTkuNTU3ODggNTEuNjU1NDIgLTkuNTU0MTggNTEuNjU2NTggLTkuNTQ4MzMgNTEuNjU4NCAtOS41Mzc1NyA1MS42NjE3OSAtOS41MTc3NyA1MS42NjYyNyAtOS41MDIxNyA1MS42Njc5NyAtOS41MDE2IDUxLjY3MDU5IC05LjUwMTA3IDUxLjY3MjU5IC05LjQ5NzU5IDUxLjY3MzEzIC05LjQ5Mjk1IDUxLjY3NDUgLTkuNDg5MzcgNTEuNjc3MTMgLTkuNDgzNDkgNTEuNjc5MTkgLTkuNDc2OTEgNTEuNjc5OTEgLTkuNDcwODIgNTEuNjc5MzggLTkuNDY1NTMgNTEuNjgwMjYgLTkuNDYxMSA1MS42ODIwNyAtOS40NTc3NCA1MS42ODMyNyAtOS40NTM5NiA1MS42ODU1MyAtOS40NTMyMSA1MS42ODc0MSAtOS40NTE2MyA1MS42ODg4MSAtOS40NDg3OSA1MS42ODk5NiAtOS40NTMxNSA1MS42OTEyNiAtOS40NTE3OCA1MS42OTIxMSAtOS40NTAzIDUxLjY5MTYzIC05LjQ0Nzk5IDUxLjY5MDA5IC05LjQ0NjM2IDUxLjY5MDY1IC05LjQ0MzggNTEuNjkxNzkgLTkuNDQwNzUgNTEuNjkzMDEgLTkuNDM4MDEgNTEuNjk1MDIgLTkuNDM0NCA1MS42OTYxOSAtOS40MzYxIDUxLjY5NTkzIC05LjQzOTYxIDUxLjY5NTI0IC05LjQ0MTQgNTEuNjk1NDQgLTkuNDQ1IDUxLjY5ODk2IC05LjQ0NzQ0IDUxLjY5NzkgLTkuNDUxNjkgNTEuNjk5MDEgLTkuNDUyOTUgNTEuNzAwOTIgLTkuNDUyMTIgNTEuNzAyNzIgLTkuNDQ4ODkgNTEuNzA1MzIgLTkuNDQ2MjcgNTEuNzA2OTMgLTkuNDQ2ODggNTEuNzA4OTkgLTkuNDQ3NTcgNTEuNzExNzQgLTkuNDQ3NzkgNTEuNzEzNjMgLTkuNDQ1OTIgNTEuNzE0ODIgLTkuNDQzNjIgNTEuNzE3NTMgLTkuNDQwNDIgNTEuNzE5NTMgLTkuNDM3MSA1MS43MjE1NSAtOS40MzIyOCA1MS43MjQwMSAtOS40MzI2IDUxLjcyMjg4IC05LjQzNjY4IDUxLjcyMTQ3IC05LjQzOTUzIDUxLjcyMDQ0IC05LjQ0MDk3IDUxLjcxOTQzIC05LjQ0NTk4IDUxLjcxODcyIC05LjQ1MDczIDUxLjcyMDMxIC05LjQ1MTYzIDUxLjcyMjcyIC05LjQ1MTM1IDUxLjcyNTEzIC05LjQ0NzUgNTEuNzI2NSAtOS40NDM5IDUxLjcyODk1IC05LjQ0MTg1IDUxLjczMDczIC05LjQ0Mzk1IDUxLjczNTA1IC05LjQ0Mjg0IDUxLjczMTQ0IC05LjQ0ODI1IDUxLjcyODU4IC05LjQ1MiA1MS43MjcxOSAtOS40NTU4OSA1MS43MjQ4NSAtOS40NTc2OCA1MS43MjI0MyAtOS40NjAzNCA1MS43MjE2IC05LjQ2NTUxIDUxLjcyMDA3IC05LjQ2NzYgNTEuNzE3NDcgLTkuNDcyODkgNTEuNzE2MTQgLTkuNDc3MSA1MS43MTY5NSAtOS40ODExMSA1MS43MTY4NSAtOS40ODM3NSA1MS43MTk1NyAtOS40ODMwOCA1MS43MTk4MyAtOS40ODgzMiA1MS43MTc5NyAtOS40OTIyNyA1MS43MTk0NCAtOS40OTc0NSA1MS43MjE0MyAtOS40OTc5OCA1MS43MjM2NyAtOS40OTYxOCA1MS43MjY3OCAtOS40OTY2MyA1MS43MjY5MiAtOS41MDA5NCA1MS43MjgxOSAtOS41MDExOSA1MS43MzAwOSAtOS41MDMwMyA1MS43MzA3OSAtOS41MDU5OSA1MS43MjkxNyAtOS41MTA1OCA1MS43MjkxNyAtOS41MTQyOSA1MS43MzA4OCAtOS41MTcyOSA1MS43MzM1NiAtOS41MTgzOSA1MS43MzYwNCAtOS41MTk4OSA1MS43MzgzIC05LjUyMDMzIDUxLjczOTk0IC05LjUxOTMyIDUxLjc0MTg0IC05LjUxOTk3IDUxLjc0NDMzIC05LjUyMTE4IDUxLjc0NjY0IC05LjUyMTAyIDUxLjc0ODU4IC05LjUyNDY3IDUxLjc1MDczIC05LjUyMTgyIDUxLjc1MTk5IC05LjUyMzU0IDUxLjc1MTM1IC05LjUyNzEzIDUxLjc1MzQyIC05LjUyOTE1IDUxLjc1MjQyIC05LjUzMzg2IDUxLjc1MDYxIC05LjUzNDcxIDUxLjc0OTQ5IC05LjUzNjI3IDUxLjc1MDQ1IC05LjUzOTQyIDUxLjc0ODI0IC05LjU0MTgyIDUxLjc0NjQ2IC05LjUzOTY5IDUxLjc0NDk4IC05LjUzNzM0IDUxLjc0MzUyIC05LjUzNTg4IDUxLjc0MjI1IC05LjUzOCA1MS43NDA5NyAtOS41MzkwOSA1MS43NDE2OCAtOS41NDIwNSA1MS43NDIwNCAtOS41NDU5OCA1MS43NDAwNCAtOS41NDU2IDUxLjczODAzIC05LjU0NjU0IDUxLjczNjI0IC05LjU0ODI5IDUxLjczNDcxIC05LjU0OTAyIDUxLjczNTk4IC05LjU0NDM3IDUxLjczNjMzIC05LjU0MjA2IDUxLjczNTQxIC05LjU0MDcxIDUxLjczMzkzIC05LjU0MjIgNTEuNzMxMTMgLTkuNTQyNTYgNTEuNzI5MzMgLTkuNTQyMDYgNTEuNzI3MDggLTkuNTQxMzMgNTEuNzI1OTYgLTkuNTM4OSA1MS43MjUyOCAtOS41MzY5OSA1MS43MjMwMyAtOS41MzYyNiA1MS43MjEyOSAtOS41MzcyNiA1MS43MjEyMSAtOS41NDIxNCA1MS43MTg5NCAtOS41NDE1NyA1MS43MTY2NCAtOS41NDE1NyA1MS43MTQ4NiAtOS41NDE5OCA1MS43MTQ3NiAtOS41NDU4MSA1MS43MTU1OCAtOS41NDk2OCA1MS43MTQ3MyAtOS41NTIzMyA1MS43MTI2NiAtOS41NTU1IDUxLjcxMDg0IC05LjU1NTE0IDUxLjcwODg2IC05LjU1ODE4IDUxLjcwNjgzIC05LjU2MzEzIDUxLjcwOTM4IC05LjU2NDk1IDUxLjcxMDM0IC05LjU2ODEgNTEuNzExMyAtOS41NzAwNyA1MS43MTEwMSAtOS41NzI4MiA1MS43MDk0MSAtOS41NzMyNyA1MS43MDcwOCAtOS41NzM1NiA1MS43MDQ3MSAtOS41NzQ0NCA1MS43MDMyOSAtOS41NzYxIDUxLjcwMTcgLTkuNTc3NTcgNTEuNjk5MjkgLTkuNTgxNTYgNTEuNjk4NTkgLTkuNTg3MzYgNTEuNjk3NCAtOS41ODg0NiA1MS42OTU5NCAtOS41ODkzNyA1MS42OTM5NCAtOS41OTAzMiA1MS42OTE5MiAtOS41OTM5MyA1MS42OTAyOCAtOS41OTk4NCA1MS42OTAzMiAtOS42MDQxNSA1MS42ODkxMyAtOS42MDY2IDUxLjY4NzY3IC05LjYwNzY0IDUxLjY4NjMgLTkuNjA2MTkgNTEuNjg1MTkgLTkuNjExMTcgNTEuNjgzNiAtOS42MTM5OCA1MS42ODE3MyAtOS42MTkyNSA1MS42ODI0NiAtOS42MjA1OCA1MS42ODE5MSAtOS42MjU1MiA1MS42ODAwMSAtOS42MjYxOSA1MS42NzgxMSAtOS42MzA3MiA1MS42NzcxNCAtOS42MzQ5NyA1MS42NzcyIC05LjYzOTEzIDUxLjY3NjgxIC05LjY0MzA2IDUxLjY3NTY5IC05LjY0NyA1MS42NzU1NiAtOS42NTEyNyA1MS42NzQyMyAtOS42NTUzMiA1MS42NzE3OCAtOS42NjIyNCA1MS42NzM3NiAtOS42NjI3OCA1MS42NzY0MyAtOS42NjI5OSA1MS42Nzg1IC05LjY2MTE3IDUxLjY4MTA0IC05LjY1Nzk3IDUxLjY4MzM3IC05LjY1NzY3IDUxLjY4NTc0IC05LjY1Njc5IDUxLjY4NTA0IC05LjY2MDA3IDUxLjY4MzMxIC05LjY2MjI1IDUxLjY4MTYxIC05LjY2Mzg1IDUxLjY3OTY1IC05LjY2NjczIDUxLjY4MDMxIC05LjY3MTQ2IDUxLjY3OTQgLTkuNjcyNDcgNTEuNjgwMDIgLTkuNjc1MjcgNTEuNjc5NTUgLTkuNjgxNTQgNTEuNjc5NDQgLTkuNjg3ODkgNTEuNjgwNzEgLTkuNjkzMDMgNTEuNjc5MjkgLTkuNjk0NjkgNTEuNjc3OTUgLTkuNjk2NjUgNTEuNjc4OTEgLTkuNjk5NjUgNTEuNjc4NDEgLTkuNzAyODIgNTEuNjc4MjUgLTkuNzA2MDUgNTEuNjc4MzggLTkuNzA4IDUxLjY3OTg3IC05LjcwOTAzIDUxLjY4MTU4IC05LjcwNzE0IDUxLjY4MzYyIC05LjcwNDU4IDUxLjY4NTQ0IC05LjcwNzMgNTEuNjg3NDEgLTkuNzA4MTIgNTEuNjg5MjQgLTkuNzA4MzQgNTEuNjkwMjYgLTkuNzE0MzEgNTEuNjkyMSAtOS43MTIwMSA1MS42OTM0NCAtOS43MTQ5NCA1MS42OTI2MyAtOS43MTgzNCA1MS42OTA5OCAtOS43MjE4OCA1MS42ODcwNyAtOS43MjQ4MiA1MS42ODU2OCAtOS43MjEyOSA1MS42ODQzMSAtOS43MjIzNiA1MS42ODI4NCAtOS43MjIyMSA1MS42ODMzNCAtOS43MTkxOSA1MS42ODExNSAtOS43MTkwNyA1MS42Nzk2NSAtOS43MTgwMyA1MS42Nzc5MyAtOS43MTY1MSA1MS42NzU2NSAtOS43MTYwNyA1MS42NzM5MSAtOS43MTcyMiA1MS42NzIwMiAtOS43MjAxIDUxLjY3MDk0IC05LjcxODU3IDUxLjY2OTQ3IC05LjcxOTc1IDUxLjY2ODk4IC05LjcyNjM0IDUxLjY3MjA4IC05LjcyOTE2IDUxLjY2OTA0IC05LjczMDM1IDUxLjY3MjU1IC05LjczNzU1IDUxLjY3MDUzIC05Ljc0MTE3IDUxLjY2NzUzIC05Ljc0NTMyIDUxLjY2NDcyIC05Ljc1MjA0IDUxLjY2MjY2IC05Ljc1NjA4IDUxLjY2MjIyIC05Ljc2MDc0IDUxLjY2MiAtOS43NjQ4NCA1MS42NjA5NCAtOS43NjY1NiA1MS42NjAyOSAtOS43NzAyOCA1MS42NjEzNyAtOS43NzQyMSA1MS42NjAxNyAtOS43Nzc4MyA1MS42NjA3OCAtOS43ODE5NSA1MS42NTk2IC05Ljc4NTQxIDUxLjY1OTU2IC05Ljc4OTU2IDUxLjY1ODU3IC05Ljc5Mjc4IDUxLjY1NzQxIC05Ljc5MzU5IDUxLjY1Njc3IC05Ljc5NzE2IDUxLjY1NjEgLTkuNzk5NzEgNTEuNjU1NjIgLTkuODAzNzUgNTEuNjU3MzEgLTkuODA2OSA1MS42NTkgLTkuODEwMiA1MS42NjAwOCAtOS44MTI5NCA1MS42NjAwNCAtOS44MTk2IDUxLjY2MDIyIC05LjgyNTU2IDUxLjY1OTI1IC05LjgzMSA1MS42NTc2OCAtOS44MzM1MSA1MS42NTY0OCAtOS44MzU3OSA1MS42NTU3NCAtOS44Mzk1IDUxLjY1NTY2IC05Ljg0NDIzIDUxLjY1NTYxIC05Ljg0ODM2IDUxLjY1NDg1IC05Ljg1MjM2IDUxLjY1NTY1IC05Ljg1NDAxIDUxLjY1NyAtOS44NTY2NiA1MS42NTY5IC05Ljg1OTMgNTEuNjU2IC05Ljg2MTM0IDUxLjY1NDk0IC05Ljg2MjAyIDUxLjY1Mzg2IC05Ljg2NDAzIDUxLjY1MjA3IC05Ljg2ODEyIDUxLjY1MDg3IC05Ljg3MjkyIDUxLjY1MTE0IC05Ljg3NjUzIDUxLjY1MjE3IC05Ljg4MTE5IDUxLjY1MjkzIC05Ljg4ODAxIDUxLjY1MTc2IC05Ljg5IDUxLjY1MDQzIC05Ljg5MDYyIDUxLjY0OTUyIC05Ljg4ODA3IDUxLjY0Nzk3IC05Ljg4ODggNTEuNjQ3MDIgLTkuODkwNTQgNTEuNjQ3MTQgLTkuODkzNjcgNTEuNjQ2OTkgLTkuODk2OTEgNTEuNjQ4ODIgLTkuODk1OTMgNTEuNjUwMjQgLTkuODkyOTUgNTEuNjUzNjYgLTkuODk0MDggNTEuNjUyOTIgLTkuODk2NTkgNTEuNjUxNzMgLTkuODk5OTIgNTEuNjUwMjEgLTkuOTAxODQgNTEuNjQ4NjEgLTkuOTAxMDggNTEuNjQ2NjIgLTkuOTAxNTggNTEuNjQ1MjMgLTkuOTA0MTIgNTEuNjQzNDQgLTkuOTA1ODMgNTEuNjQyMTEgLTkuOTA1MTMgNTEuNjQwNjQgLTkuOTA1MTIgNTEuNjM4NzMgLTkuOTA3MTEgNTEuNjM3NzIgLTkuOTA5NDMgNTEuNjM3OSAtOS45MTE4NCA1MS42NDAxMiAtOS45MTE2OSA1MS42NDE0NCAtOS45MTM4OCA1MS42NDE0NCAtOS45MTM4OCA1MS42NDAyOCAtOS45MTU3MyA1MS42MzkxNiAtOS45MTY5OCA1MS42Mzg4OCAtOS45MTk0NSA1MS42Mzg5IC05LjkyMjg2IDUxLjYzNzE2IC05LjkyNjIyIDUxLjYzNjEzIC05LjkyMjc1IDUxLjYzNjQ2IC05LjkyMDkgNTEuNjM3NDEgLTkuOTE4MTIgNTEuNjM3MjkgLTkuOTE2MTcgNTEuNjM1OTMgLTkuOTE1OSA1MS42MzM2NCAtOS45MTY3NyA1MS42MzEyNiAtOS45MTU0IDUxLjYzMDUzIC05LjkyMjM4IDUxLjYyODc5IC05LjkyMzUxIDUxLjYyNzMzIC05LjkyMSA1MS42MjU3OSAtOS45MTU4IDUxLjYyNDI3IC05LjkxNTIgNTEuNjIxNjggLTkuOTE1MjggNTEuNjE5MyAtOS45MTczMyA1MS42MjExNyAtOS45MjA2NiA1MS42MTc5NyAtOS45MjM4NyA1MS42MTY0MyAtOS45MjcxMiA1MS42MTY4MyAtOS45MzI2OCA1MS42MTYzNCAtOS45Mzg5NCA1MS42MTU1NCAtOS45NDU2MSA1MS42MTU0NiAtOS45NTE1MiA1MS42MTc0NyAtOS45NTI5NiA1MS42MjAzOCAtOS45NTQ3MiA1MS42MjQwMyAtOS45NTM5NiA1MS42MjI2MSAtOS45NTY2NSA1MS42MjA4NyAtOS45NTc3OSA1MS42MTg3NSAtOS45NTg5OSA1MS42MTY5OCAtOS45NjE2IDUxLjYxNDE1IC05Ljk2NzEgNTEuNjExNTggLTkuOTczOTkgNTEuNjEwMiAtOS45Nzg3NSA1MS42MDczNSAtOS45ODMzNiA1MS42MDYzMiAtOS45ODgxOSA1MS42MDQ2IC05Ljk5NDggNTEuNjAyMDIgLTkuOTk0ODkgNTEuNjAwMTcgLTkuOTk0OTUgNTEuNTk5NTQgLTkuOTk5NDIgNTEuNTk4NTEgLTEwLjAwMzA2IDUxLjU5NzE0IC0xMC4wMDUzIDUxLjU5NjI1IC0xMC4wMTA5IDUxLjU5NDg5IC0xMC4wMTY0IDUxLjU5NTg5IC0xMC4wMjAxNSA1MS41OTM3OSAtMTAuMDIyMjQgNTEuNTkxNjcgLTEwLjAyNDQ4IDUxLjU5MDA4IC0xMC4wMjgzMSA1MS41OTE0OSAtMTAuMDMxNTYgNTEuNTk0NTEgLTEwLjAzNDA5IDUxLjU5NTc3IC0xMC4wMzcwMiA1MS41OTUyMiAtMTAuMDQxNjMgNTEuNTk2NDkgLTEwLjA0MTg5IDUxLjU5ODk0IC0xMC4wNDAwMiA1MS42MDE1NyAtMTAuMDMyNDEgNTEuNjAyODcgLTEwLjAzMjM4IDUxLjYwMzUxIC0xMC4wMzQ3MyA1MS42MDM0IC0xMC4wMzg0IDUxLjYwMzY3IC0xMC4wNDMxOSA1MS42MDM0MiAtMTAuMDQ2NTUgNTEuNjAyMjUgLTEwLjA1MTk1IDUxLjYwMzY2IC0xMC4wNTUwNCA1MS42MDM2OCAtMTAuMDU5NSA1MS42MDI5NCAtMTAuMDY1NDIgNTEuNjAxMjggLTEwLjA2NjU2IDUxLjYwMDAyIC0xMC4wNzIwOCA1MS42MDA1NSAtMTAuMDc4MjUgNTEuNjAwMDcgLTEwLjA4MzA1IDUxLjU5ODcxIC0xMC4wODk3MyA1MS41OTczOCAtMTAuMDk0OTQgNTEuNTk3NDcgLTEwLjEwMDg4IDUxLjU5OTU5IC0xMC4xMDMyNCA1MS42MDExNiAtMTAuMTA1NDkgNTEuNjAxNTggLTEwLjExMDYxIDUxLjU5NzU1IC0xMC4xMTQ5NyA1MS41OTY3MiAtMTAuMTE4NSA1MS41OTU2NSAtMTAuMTIzOTEgNTEuNTkzNjkgLTEwLjEyOTg4IDUxLjU5MDc3IC0xMC4xMzQxOCA1MS41ODY4MyAtMTAuMTM5NTkgNTEuNTgzMjYgLTEwLjE0MzkgNTEuNTgwMjcgLTEwLjE0OTA3IDUxLjU4MTg3IC0xMC4xNTEwMSA1MS41ODQ5MSAtMTAuMTUyMDggNTEuNTg2NzYgLTEwLjE1MDk4IDUxLjU4OTQyIC0xMC4xNDc2NyA1MS41OTE5IC0xMC4xNDU1MSA1MS41OTM4OSAtMTAuMTQyNTEgNTEuNTk2MDkgLTEwLjE0MTYzIDUxLjU5NjUyIC0xMC4xMzg0NiA1MS41OTg5MiAtMTAuMTM0OTUgNTEuNjAxMzQgLTEwLjEzNDg1IDUxLjYwNDY1IC0xMC4xMzQ5MyA1MS42MDcwNSAtMTAuMTM0OTggNTEuNjA4MDkgLTEwLjEzNjk3IDUxLjYwODE3IC0xMC4xNDE3MyA1MS42MDk2MSAtMTAuMTQ1NTcgNTEuNjEzNjQgLTEwLjE0OTUxIDUxLjYxMzQxIC0xMC4xNDUzMiA1MS42MTM5MiAtMTAuMTQyNDUgNTEuNjE2MzIgLTEwLjE0MDEyIDUxLjYxODc5IC0xMC4xMzY5MyA1MS42MjEwOCAtMTAuMTM0NzMgNTEuNjIxMDggLTEwLjEzMTMyIDUxLjYyMDgzIC0xMC4xMjc1NiA1MS42MTk2NyAtMTAuMTIzNDcgNTEuNjE3ODMgLTEwLjEyMzQgNTEuNjE2MTggLTEwLjEyMjE4IDUxLjYxNDQ5IC0xMC4xMjAwNiA1MS42MTIzIC0xMC4xMTc1MyA1MS42MTUwMyAtMTAuMTEyMTYgNTEuNjE1MTQgLTEwLjEwODQ4IDUxLjYxNjQ2IC0xMC4xMDU3OCA1MS42MTk0IC0xMC4wOTIgNTEuNjE3ODMgLTEwLjA4ODQzIDUxLjYxODYzIC0xMC4wODY1MSA1MS42MjA4NSAtMTAuMDg1MiA1MS42MjE3NSAtMTAuMDgxOTcgNTEuNjIzOSAtMTAuMDg1MDcgNTEuNjI1MDEgLTEwLjA4Mzk1IDUxLjYyNTExIC0xMC4wODAyNyA1MS42MjQyMiAtMTAuMDc3NTggNTEuNjIzMTUgLTEwLjA3NDg0IDUxLjYyMTk0IC0xMC4wNzI1MiA1MS42MjAyNyAtMTAuMDcwNCA1MS42MjE3NiAtMTAuMDY0MzMgNTEuNjI0MDMgLTEwLjA2MDA1IDUxLjYyNjY2IC0xMC4wNTQ4IDUxLjYyODU1IC0xMC4wNTMxMSA1MS42Mjg5OCAtMTAuMDQ5OTQgNTEuNjMxNDEgLTEwLjA0ODM2IDUxLjYzMzU2IC0xMC4wNTA0MiA1MS42MzM3MiAtMTAuMDUzMTIgNTEuNjMzNDggLTEwLjA1NjAzIDUxLjYzNDI3IC0xMC4wNTkwMiA1MS42MzcwMyAtMTAuMDU4OTcgNTEuNjM3ODUgLTEwLjA1NTc0IDUxLjYzODY0IC0xMC4wNTAyNyA1MS42NDAzOCAtMTAuMDQ4MSA1MS42NDIxOSAtMTAuMDQ5NjUgNTEuNjQ0MDEgLTEwLjA0NzggNTEuNjQ1NzIgLTEwLjA0Njk1IDUxLjY0Nzg3IC0xMC4wNDY3OSA1MS42NTA1NCAtMTAuMDQ2ODkgNTEuNjUyODYgLTEwLjA0NzggNTEuNjU0ODYgLTEwLjA0OTM4IDUxLjY1NTIzIC0xMC4wNTI4OCA1MS42NTM3MyAtMTAuMDU3OTEgNTEuNjUxODcgLTEwLjA2MDUgNTEuNjU0OTcgLTEwLjA2Nzk1IDUxLjY1ODY4IC0xMC4wNjY0OCA1MS42NTgyNyAtMTAuMDc0MSA1MS42NjA3MSAtMTAuMDc0NzQgNTEuNjYwNzIgLTEwLjA3OTIgNTEuNjYwNDYgLTEwLjA4Mzc0IDUxLjY1OTQ2IC0xMC4wODcwOSA1MS42NTg4MiAtMTAuMDkwNTMgNTEuNjYxOTcgLTEwLjA5MTYxIDUxLjY2NDU4IC0xMC4wOTM2MiA1MS42NjYxOSAtMTAuMDk0MTEgNTEuNjY4MzcgLTEwLjA5MjMyIDUxLjY3MDQ2IC0xMC4wODc5OSA1MS42NzI3IC0xMC4wODUzMyA1MS42NzQwOCAtMTAuMDgzMSA1MS42NzQ2IC0xMC4wNzg3NSA1MS42NzQ0IC0xMC4wNzU0NCA1MS42NzMxOCAtMTAuMDcyMjQgNTEuNjczMTQgLTEwLjA2ODA3IDUxLjY3NTAxIC0xMC4wNjY1MSA1MS42NzY0OCAtMTAuMDYzMTEgNTEuNjc0NjUgLTEwLjA2MTcgNTEuNjczODggLTEwLjA1ODU5IDUxLjY3MzE3IC0xMC4wNTQ3MiA1MS42NzEzIC0xMC4wNTI3MSA1MS42NzAxNSAtMTAuMDQ5ODEgNTEuNjcxNDggLTEwLjA0NTY0IDUxLjY3MDkyIC0xMC4wNDM0NCA1MS42NzE5MiAtMTAuMDM2NTMgNTEuNjczOTggLTEwLjAzMjY0IDUxLjY3NjEgLTEwLjAzMTQ0IDUxLjY3NzI1IC0xMC4wMjg1NiA1MS42Nzc5MyAtMTAuMDI0NjkgNTEuNjc3ODIgLTEwLjAyMDIyIDUxLjY3Njk3IC0xMC4wMTU3NCA1MS42NzU0NCAtMTAuMDEzOTQgNTEuNjc1NDQgLTEwLjAxMDM4IDUxLjY3MzA2IC0xMC4wMDc4NCA1MS42NzQwMiAtMTAuMDAxNTEgNTEuNjc2OTEgLTkuOTk5ODYgNTEuNjc2NzMgLTkuOTkzODggNTEuNjc3ODkgLTkuOTkyMDUgNTEuNjc5MjEgLTkuOTk1MjggNTEuNjgwMzYgLTkuOTk0NzYgNTEuNjgyNyAtOS45OTMwMiA1MS42ODQzNyAtOS45OTA2NyA1MS42ODU4NiAtOS45ODY4MyA1MS42ODU2MSAtOS45ODQxIDUxLjY4NDk2IC05Ljk4MTg5IDUxLjY4NDI3IC05Ljk3ODggNTEuNjgzMzUgLTkuOTc0IDUxLjY4NDU0IC05Ljk2OTUgNTEuNjg0NDggLTkuOTY1NDcgNTEuNjg1NDMgLTkuOTYzODkgNTEuNjg2OTcgLTkuOTYzMTYgNTEuNjg4MTggLTkuOTY0MTUgNTEuNjg5NzcgLTkuOTY1MDYgNTEuNjkxODIgLTkuOTYzNTUgNTEuNjkxNjkgLTkuOTYxNzQgNTEuNjk0NDQgLTkuOTU5NjEgNTEuNjk2NSAtOS45NjE2NiA1MS43MDA1NSAtOS45NTQ0NiA1MS43MDQ4OCAtOS45NTU5MSA1MS43MDU5MyAtOS45NTMwMSA1MS43MDcwMyAtOS45NDk1MiA1MS43MDgzOSAtOS45NDg2IDUxLjcwODI4IC05Ljk0NDEzIDUxLjcxMDQzIC05Ljk0MzY4IDUxLjcxMTg1IC05Ljk0MzIyIDUxLjcxMjUyIC05Ljk0MDUzIDUxLjcxMzQ5IC05LjkzNjQyIDUxLjcxMzQ5IC05LjkzNjQyIDUxLjcxNDQ1IC05LjkzODI0IDUxLjcxNjE1IC05LjkzODg4IDUxLjcxNTk0IC05Ljk0NDA0IDUxLjcxODA1IC05Ljk0NjY4IDUxLjcxNTcyIC05Ljk0OCA1MS43MTQ3MyAtOS45NTAxNyA1MS43MTM1IC05Ljk1NDA4IDUxLjcxNDU3IC05Ljk1Njk3IDUxLjcxNTI5IC05Ljk1OTQ5IDUxLjcxNDg4IC05Ljk2MzcxIDUxLjcxMzY1IC05Ljk2NzYyIDUxLjcxMTYgLTkuOTcyNyA1MS43MTI5MyAtOS45NzQ0NiA1MS43MTQ3MyAtOS45NzUxIDUxLjcxNTQ1IC05Ljk3NjQ0IDUxLjcxNjEyIC05Ljk4MDg5IDUxLjcxNTY2IC05Ljk4NDUgNTEuNzE1IC05Ljk4ODI0IDUxLjcxNDg5IC05Ljk5MzExIDUxLjcxNjQ3IC05Ljk5NTM2IDUxLjcxODU2IC05Ljk5NTc3IDUxLjcyMTEgLTkuOTk0MDYgNTEuNzIwNjEgLTkuOTkwODUgNTEuNzIyMzggLTkuOTg3MDQgNTEuNzIzOSAtOS45ODY0NSA1MS43MjYxNCAtOS45ODI2IDUxLjcyNzg0IC05Ljk3ODQ5IDUxLjczMDI2IC05Ljk3NDY3IDUxLjczMjA2IC05Ljk3NDEzIDUxLjczMzQyIC05Ljk3MDg1IDUxLjczNTMzIC05Ljk2NjQ4IDUxLjczNDcgLTkuOTY1MDIgNTEuNzM0NjcgLTkuOTYwNyA1MS43MzQ1NSAtOS45NTYzNyA1MS43MzY5IC05Ljk1MzI4IDUxLjczOTQgLTkuOTUwOCA1MS43Mzk2OCAtOS45NDU5NiA1MS43NCAtOS45NDE4NyA1MS43NDEwNSAtOS45Mzc5MiA1MS43NDAzNSAtOS45MzUxIDUxLjczOTY0IC05LjkzMTExIDUxLjc0MDc5IC05LjkyMjEzIDUxLjc0MjM0IC05LjkxNjQ5IDUxLjc0Mzc1IC05LjkxNzIzIDUxLjc0MzYxIC05LjkyMTUgNTEuNzQ1MzQgLTkuOTIwNjYgNTEuNzQ1OTggLTkuOTE4MjcgNTEuNzQ2MzMgLTkuOTE0OTIgNTEuNzQ3NzIgLTkuOTExMTggNTEuNzUwMjcgLTkuOTA2OTMgNTEuNzQ3ODEgLTkuOTA1MjYgNTEuNzUwMzkgLTkuODk5MzggNTEuNzUxODEgLTkuODk3NzMgNTEuNzUzODEgLTkuODk1NjEgNTEuNzU2MDMgLTkuODkzMjMgNTEuNzU3NDcgLTkuODkxMjkgNTEuNzU4NiAtOS44ODczNSA1MS43NjExNSAtOS44ODE3NyA1MS43NjM3OSAtOS44Nzc1NCA1MS43NjI5MiAtOS44NzU1OCA1MS43NjA1MSAtOS44NzQ1MSA1MS43NjA0NCAtOS44NzE4MiA1MS43NjA0MyAtOS44Njk1OSA1MS43NjA4MSAtOS44NjY5OSA1MS43NjAzNyAtOS44NjQzOCA1MS43NTkyIC05Ljg2MjY2IDUxLjc1ODUzIC05Ljg2NTQ5IDUxLjc1ODg1IC05Ljg2ODUzIDUxLjc1OTA0IC05Ljg3MTk5IDUxLjc1ODQ1IC05Ljg3MzY1IDUxLjc1NjkyIC05Ljg3MzIgNTEuNzU0MzIgLTkuODczNDIgNTEuNzUxOTIgLTkuODc1OTIgNTEuNzQ5NTEgLTkuODc2MDMgNTEuNzQ3MzYgLTkuODc4ODcgNTEuNzQ0NTkgLTkuODgzNTIgNTEuNzQxMjUgLTkuODg4NzkgNTEuNzQwMDcgLTkuODg4NDEgNTEuNzQwNDYgLTkuODg1NjcgNTEuNzQxMDIgLTkuODgyMDcgNTEuNzQxMjEgLTkuODc5NTggNTEuNzQxNDggLTkuODc2MDcgNTEuNzQyMTEgLTkuODcyNjMgNTEuNzQ0ODUgLTkuODcxODUgNTEuNzQ2NzcgLTkuODcwODggNTEuNzQ3NjIgLTkuODY1NzEgNTEuNzQ3NjkgLTkuODYxMjcgNTEuNzQ3ODIgLTkuODU3MTMgNTEuNzUxMjQgLTkuODUzNTEgNTEuNzUzNDcgLTkuODUwODMgNTEuNzU0NjYgLTkuODQ3NzggNTEuNzU1NzcgLTkuODQ0OSA1MS43NTcwMiAtOS44NDA1NCA1MS43NTg4MSAtOS44Mzg5NiA1MS43NjAzNiAtOS44NDA0NSA1MS43NjA1NyAtOS44NDM3NyA1MS43NjQ4OSAtOS44NDYyNiA1MS43NjM3MSAtOS44NDgzOSA1MS43NjkwNiAtOS44NDg0MiA1MS43NjcyNCAtOS44NDU2OCA1MS43Njk1NyAtOS44NDA1IDUxLjc3MjE3IC05Ljg0NTE3IDUxLjc3MzM0IC05Ljg0MzE4IDUxLjc3NTkxIC05LjgzOTY3IDUxLjc3OTAyIC05LjgzNzYxIDUxLjc3ODEyIC05LjgzMTIgNTEuNzc1NzggLTkuODMxNzcgNTEuNzc0MTMgLTkuODMwNDEgNTEuNzc1NiAtOS44MjY4NCA1MS43NzI1MiAtOS44MjM3IDUxLjc3MTA4IC05LjgyNTY0IDUxLjc2OTk3IC05LjgyNjkgNTEuNzY4ODEgLTkuODMwMDkgNTEuNzY3ODkgLTkuODM0NjcgNTEuNzY2ODUgLTkuODM3NDMgNTEuNzY1MzkgLTkuODM4NDggNTEuNzY2MDUgLTkuODI1MDggNTEuNzY3NzEgLTkuODIyNiA1MS43Njc2MSAtOS44MTkxNiA1MS43NjgwMSAtOS44MTM4OSA1MS43NzAwNSAtOS44MDg5NCA1MS43NjkwNSAtOS44MDM4NCA1MS43NjU1OSAtOS44MDY4NyA1MS43NjQ0MSAtOS44MDA1NSA1MS43NjcyNSAtOS43OTk2MiA1MS43NjcxOCAtOS43OTY5NCA1MS43NjcxMiAtOS43OTQyNCA1MS43Njg5NCAtOS43OTA3NSA1MS43NjcxMSAtOS43ODM0IDUxLjc2NDMgLTkuNzk0NzQgNTEuNzYxNDcgLTkuNzk0NDcgNTEuNzYyMzIgLTkuNzg1NzMgNTEuNzY1MzIgLTkuNzgzNzkgNTEuNzYzNjMgLTkuNzgwNDkgNTEuNzY1NDMgLTkuNzc2MzggNTEuNzYzNDQgLTkuNzc1ODUgNTEuNzYwOTggLTkuNzc1MzYgNTEuNzU5NTYgLTkuNzczNDUgNTEuNzU3NDMgLTkuNzcxMSA1MS43NTk3OSAtOS43NzAzOCA1MS43NjE4NCAtOS43NzAxOSA1MS43NjM3OCAtOS43NzAxMSA1MS43NjU5MSAtOS43NzAwOSA1MS43NjcwMiAtOS43NzIzOCA1MS43NjgxOSAtOS43NzUxNCA1MS43NzAxMiAtOS43NzY1NiA1MS43NzIxOSAtOS43NzQ3NCA1MS43NzY4NCAtOS43ODM5NyA1MS43NzY0NCAtOS43ODkyNCA1MS43Nzc5MyAtOS43OTAyOSA1MS43NzcxNyAtOS43OTE3NyA1MS43NzY2NyAtOS43OTQ2NSA1MS43Nzc3NyAtOS43OTcyNCA1MS43Nzk0NCAtOS43OTcxMSA1MS43ODEzNCAtOS44MDM1OSA1MS43Nzk1NiAtOS44MDUxNyA1MS43ODAwNCAtOS44MDk3MiA1MS43ODA2NyAtOS44MTM1NyA1MS43ODQxNiAtOS44MTUgNTEuNzg1MDcgLTkuODE4NzQgNTEuNzg4NzIgLTkuODEyMDMgNTEuNzkxNzcgLTkuODA0NzYgNTEuNzk1NDYgLTkuNzk1MDggNTEuNzk4MjggLTkuNzg0NDggNTEuNzk4NzUgLTkuNzc4NDggNTEuODAwODcgLTkuNzc0NzMgNTEuNzk4NjUgLTkuNzczNyA1MS43OTkyMSAtOS43NzExNCA1MS43OTk3MiAtOS43Njc5NyA1MS44MDA5MiAtOS43NjgwNSA1MS44MDM0MSAtOS43NzE2NiA1MS44MDU4MSAtOS43NzAzNSA1MS44MDc4MiAtOS43NzA2IDUxLjgxMDI1IC05Ljc3MDE5IDUxLjgxMjk3IC05Ljc2NTk2IDUxLjgxNTUgLTkuNzU5NDcgNTEuODE3NjYgLTkuNzUwMjMgNTEuODE5ODggLTkuNzQwMzkgNTEuODIxOTggLTkuNzM1OTEgNTEuODI0NTggLTkuNzM1NjYgNTEuODI0MzEgLTkuNzMxODkgNTEuODI2MDYgLTkuNzMwNzUgNTEuODI4NDkgLTkuNzMyNzIgNTEuODMwNjIgLTkuNzMyNjggNTEuODMyOSAtOS43MjkyNiA1MS44MzU3NiAtOS43MjMxMiA1MS44MzQ4NyAtOS43MjAyNyA1MS44MzU3NyAtOS43MTgyMSA1MS44Mzg3MiAtOS43MTU2NiA1MS44NDAzMSAtOS43MTI4NSA1MS44NDAxMiAtOS43MDkyNCA1MS44Mzk2MSAtOS43MDUxNCA1MS44Mzk2OSAtOS42OTc4NiA1MS44NDE1OSAtOS42OTA5NCA1MS44NDMyIC05LjY4NDI1IDUxLjg0MjMgLTkuNjgwMjIgNTEuODQyNDcgLTkuNjc1NjMgNTEuODQyNzYgLTkuNjY5MjkgNTEuODQzMjYgLTkuNjYzNzMgNTEuODQ2MDEgLTkuNjU3ODYgNTEuODQ0MjUgLTkuNjU0MjUgNTEuODQ0NTggLTkuNjQ5ODUgNTEuODQ1ODggLTkuNjQ0NzUgNTEuODQ2MzYgLTkuNjQwODIgNTEuODQ2NTcgLTkuNjM2ODQgNTEuODQ3NjcgLTkuNjM1NTcgNTEuODQ5NzYgLTkuNjM0NzkgNTEuODUzNjUgLTkuNjI3MDYgNTEuODU1OTIgLTkuNjIxNCA1MS44NTg2MyAtOS42MTU5NiA1MS44NjA5MSAtOS42MTAxNSA1MS44NjEyIC05LjYwNSA1MS44NjMyNSAtOS41OTk3NCA1MS44NjYwMSAtOS41OTQ5MiA1MS44NjY3NCAtOS41OSA1MS44Njc4IC05LjU4Njc4IDUxLjg3MDgzIC05LjU4MjE1IDUxLjg3MzIyIC05LjU3NTkyIDUxLjg3Mzg2IC05LjU3MDk3IDUxLjg3NTM5IC05LjU2Mjc4IDUxLjg3Njk5IC05LjU1NjA5IDUxLjg3OTQ0IC05LjU1MTY1IDUxLjg4MTg4IC05LjU0NzIxIDUxLjg4NDUxIC05LjU0MjggNTEuODg2NyAtOS41MzU3NiA1MS44ODk3MSAtOS41Mjk5NCA1MS44OTA1OSAtOS41MzQxNCA1MS44ODg4IC05LjUzODU2IDUxLjg4NzIxIC05LjU0MjU3IDUxLjg4NTM3IC05LjU0NjI0IDUxLjg4NTI3IC05LjU1MjYyIDUxLjg4MzkxIC05LjU1NTk0IDUxLjg4Mjc0IC05LjU1OTQzIDUxLjg4MDc2IC05LjU2MjQ4IDUxLjg3ODcyIC05LjU2Mzg3IDUxLjg3NjcgLTkuNTcwMDMgNTEuODc0ODIgLTkuNTc4IDUxLjg3NDYxIC05LjU4MzMyIDUxLjg3NDcyIC05LjU4NTU3IDUxLjg3ODgzIC05LjU4MzU1IDUxLjg3NzgzIC05LjU4NTg4IDUxLjg3NjQ2IC05LjU4ODE1IDUxLjg3NDcgLTkuNTkwNzggNTEuODc0NTcgLTkuNTkzNzQgNTEuODcyMSAtOS41OTcxNCA1MS44NzI3NiAtOS41OTk1IDUxLjg3MTQ1IC05LjYwMTAzIDUxLjg3MDM1IC05LjYwNDY5IDUxLjg3MTE2IC05LjYwNzM4IDUxLjg2OTE5IC05LjYwOTIyIDUxLjg2OTI2IC05LjYxMzEyIDUxLjg2ODkzIC05LjYxNzY2IDUxLjg2NzU5IC05LjYxOTQ5IDUxLjg2ODMzIC05LjYyMzIgNTEuODY5NjEgLTkuNjIzMyA1MS44NzE2NyAtOS42MjI4MSA1MS44NzE0NCAtOS42Mjg0MiA1MS44NzAwOCAtOS42MzU2MSA1MS44NjkwNiAtOS42NDQzMyA1MS44NzE0NyAtOS42NDI4NyA1MS44NjkyMyAtOS42NTA2MyA1MS44NjczOSAtOS42NTY2NyA1MS44NjY3NyAtOS42NjEzMSA1MS44NjY0NCAtOS42NjcwNSA1MS44NjUyOSAtOS42NzEyOSA1MS44NjQyNCAtOS42NjgxMiA1MS44NjI2OCAtOS42NzQwNiA1MS44NjEwNiAtOS42Nzk3IDUxLjg1OTQ5IC05LjY4ODQ3IDUxLjg1NjQ1IC05LjcwMzA3IDUxLjg1NDI2IC05LjcxNjE5IDUxLjg1MjcgLTkuNzIyMjcgNTEuODUwMzEgLTkuNzI3MDIgNTEuODQ4MzkgLTkuNzMyODkgNTEuODQ5OTEgLTkuNzM0ODMgNTEuODUyMjYgLTkuNzM0MjQgNTEuODU0NjQgLTkuNzM2OTQgNTEuODUyMzMgLTkuNzM4MTIgNTEuODQ5OTggLTkuNzM4NzEgNTEuODQ4MjcgLTkuNzM5NDIgNTEuODQ2MjcgLTkuNzQxNTYgNTEuODQ0MjQgLTkuNzQ3NTUgNTEuODQzMDkgLTkuNzU2NyA1MS44NDE2MiAtOS43NjUyIDUxLjg0MDM2IC05Ljc2NzE4IDUxLjgzODMgLTkuNzY4ODUgNTEuODM2MTIgLTkuNzcyIDUxLjgzNTMgLTkuNzc2NzUgNTEuODM0ODEgLTkuNzgwODIgNTEuODM0MDMgLTkuNzg2MTcgNTEuODMyMSAtOS43OTEgNTEuODMyMSAtOS43OTEgNTEuODI5NjIgLTkuNzk2OTEgNTEuODI5NjIgLTkuNzk2OTEgNTEuODMxODYgLTkuODAwMTggNTEuODI5MzQgLTkuODA2NjcgNTEuODI2NjEgLTkuODE0NzYgNTEuODIzNjEgLTkuODIzODQgNTEuODIxNCAtOS44MzA5OCA1MS44MjAzIC05LjgzMzMgNTEuODE4ODYgLTkuODM0MDYgNTEuODE3NDggLTkuODM0MDggNTEuODE1ODUgLTkuODM0ODEgNTEuODE0MTEgLTkuODM1OCA1MS44MTQ1NiAtOS44MzM2NSA1MS44MTU0NCAtOS44MzE3NCA1MS44MTcgLTkuODMwNTYgNTEuODE4NzcgLTkuODMwMzIgNTEuODIwMTggLTkuODI4ODIgNTEuODIxNjEgLTkuODIzNDUgNTEuODIyNjkgLTkuODE4OSA1MS44MjEwMyAtOS44MTkwMSA1MS44MTk3MiAtOS44MjAzOSA1MS44MTgwNCAtOS44MjE4NSA1MS44MTYyNCAtOS44MjI1MyA1MS44MTQ5NCAtOS44MjM3NiA1MS44MTQyNiAtOS44MjU0IDUxLjgxMzg5IC05LjgyNzg2IDUxLjgxMjIgLTkuODI5NDYgNTEuODEwNDEgLTkuODMxMTggNTEuODA5NzMgLTkuODM2NDEgNTEuODA4NCAtOS44NDE3OSA1MS44MDcyMSAtOS44NDY2MiA1MS44MDgzNyAtOS44NTA1NyA1MS44MDYzMyAtOS44NTQzMyA1MS44MDQ5NyAtOS44NTY0MyA1MS44MDM1NiAtOS44NTY3NiA1MS44MDE5OCAtOS44NTU3IDUxLjgwMDM5IC05Ljg1NDc4IDUxLjc5ODI4IC05Ljg1NzE4IDUxLjc5NjggLTkuODU5NTggNTEuNzk3NDcgLTkuODYxNzkgNTEuNzk4ODIgLTkuODYyMDYgNTEuODAwNSAtOS44NjE3OSA1MS44MDI1OCAtOS44NjExNyA1MS44MDQzMSAtOS44NjAzMiA1MS44MDYyMyAtOS44NjA1NiA1MS44MDgyNSAtOS44NTk0NyA1MS44MDg5OCAtOS44NTcwOCA1MS44MDk3MyAtOS44NTQ1NiA1MS44MTA0OCAtOS44NTIwMyA1MS44MTI0OSAtOS44NTQ1MSA1MS44MTM2NyAtOS44NTI1MSA1MS44MTQ4MSAtOS44NTA5NSA1MS44MTY2MyAtOS44NTExNyA1MS44MTM5NCAtOS44NjA5IDUxLjgxNTA1IC05Ljg2MzIgNTEuODE0MjIgLTkuODY4MSA1MS44MTU1OSAtOS44Njk1NiA1MS44MTgwMyAtOS44NzAxOCA1MS44MjE3NiAtOS44NzIxMSA1MS44MTg3NiAtOS44NzM5MSA1MS44MTY1MiAtOS44NzU1NCA1MS44MTQ4NyAtOS44Nzg5MyA1MS44MTM1OSAtOS44ODIzOSA1MS44MTUzOCAtOS44ODQyNCA1MS44MTQwOCAtOS44ODU2MSA1MS44MTM3IC05Ljg4ODIxIDUxLjgxNTQ3IC05Ljg5MDM2IDUxLjgxNzU4IC05Ljg5MDYyIDUxLjgxOTE5IC05Ljg4OTkxIDUxLjgyMTIyIC05Ljg4ODgyIDUxLjgyMzMzIC05Ljg4NzYxIDUxLjgyMzM5IC05Ljg5MDQ1IDUxLjgyNzM0IC05Ljg5MDY1IDUxLjgyNjg0IC05Ljg5NDcgNTEuODI4MjQgLTkuODk1ODggNTEuODMwNDQgLTkuODk0ODMgNTEuODMyMDkgLTkuODkzNjggNTEuODM0MDkgLTkuODkxNjkgNTEuODM0MzcgLTkuODk0MTIgNTEuODM2MTkgLTkuODk2ODggNTEuODM1MzMgLTkuODk4MzMgNTEuODMzNzMgLTkuODk4NzYgNTEuODMyMDEgLTkuODk5NjEgNTEuODMwNTEgLTkuOTAxMDkgNTEuODI5MTggLTkuOTAxNTcgNTEuODI3NjkgLTkuOTAwNTMgNTEuODI2MDEgLTkuODk5NjEgNTEuODI0MTYgLTkuODk4NDkgNTEuODIyMTggLTkuODk4OTggNTEuODIwNDMgLTkuODk5MDggNTEuODIwNzggLTkuODk2OTEgNTEuODIxMDEgLTkuODk1MDMgNTEuODE5NCAtOS44OTQ0MiA1MS44MDg0NiAtOS44OTYzOSA1MS44MDY3NyAtOS44OTc5OSA1MS44MDU1NCAtOS45MDA3MiA1MS44MDQxMiAtOS45MDU5NCA1MS44MDQyMSAtOS45MDk2OCA1MS44MDQ1NSAtOS45MTM2MiA1MS44MDQ5MSAtOS45MTk2MyA1MS44MDMzNCAtOS45MjMzMyA1MS44MDIwNyAtOS45MjU0NiA1MS44MDA0OCAtOS45MzA0OSA1MS44MDA3NCAtOS45MzY2NCA1MS44MDA2OSAtOS45NDE5OSA1MS43OTk1NCAtOS45NDM4NSA1MS43OTgzMiAtOS45NDUyNCA1MS43OTY4OCAtOS45NTA3NSA1MS43OTU3MyAtOS45NTEyNSA1MS43OTQ0OSAtOS45NTE4OSA1MS43OTIzNiAtOS45NTU1IDUxLjc5MDkxIC05Ljk1OTk2IDUxLjc4OTYgLTkuOTYyNTEgNTEuNzg4NzMgLTkuOTY0MjggNTEuNzg4NTUgLTkuOTY2NjIgNTEuNzkwMzEgLTkuOTY2NTMgNTEuNzkxMyAtOS45NjU2OSA1MS43OTIzOSAtOS45NjcwOSA1MS43OTEwNCAtOS45NzAwOSA1MS43ODk5MSAtOS45NzE2NiA1MS43ODcyNSAtOS45NjkwMyA1MS43ODcxNyAtOS45NzI1OCA1MS43ODY1NiAtOS45NzY3OCA1MS43ODUzMiAtOS45ODIwMiA1MS43ODM2NSAtOS45ODMzMiA1MS43ODE1MSAtOS45ODQ4MyA1MS43NzkzMyAtOS45OTAxOSA1MS43NzcyNyAtOS45OTMwNSA1MS43NzU2MiAtOS45OTY0MyA1MS43NzMzNSAtMTAuMDAwNzMgNTEuNzcwNzcgLTEwLjAwMzAzIDUxLjc3MDc4IC0xMC4wMDU0IDUxLjc3MTE0IC0xMC4wMDg5IDUxLjc3Mjg3IC0xMC4wMTE2MyA1MS43NzM4NSAtMTAuMDE2NzQgNTEuNzczNTIgLTEwLjAxOTkzIDUxLjc3MzQgLTEwLjAyMjU5IDUxLjc3NTAxIC0xMC4wMjQzOSA1MS43NzgyIC0xMC4wMjcyNyA1MS43NzUzMSAtMTAuMDMxMTUgNTEuNzczNjQgLTEwLjAzMzYzIDUxLjc3MTc4IC0xMC4wMzg2MSA1MS43NzQ3NSAtMTAuMDQxODggNTEuNzczMDIgLTEwLjA0MjcyIDUxLjc3MTUzIC0xMC4wNDMwMiA1MS43NzA0MiAtMTAuMDQ0MTMgNTEuNzcxMDYgLTEwLjA0NzgyIDUxLjc3MDU1IC0xMC4wNTE4OSA1MS43Njk2MiAtMTAuMDUzMTggNTEuNzY4ODQgLTEwLjA1NDk2IDUxLjc2NzY0IC0xMC4wNTcyNSA1MS43NjYzNyAtMTAuMDU2OTkgNTEuNzY2NDIgLTEwLjA1MTY1IDUxLjc2NjYxIC0xMC4wNDY3NyA1MS43NjY5MiAtMTAuMDQ0MDIgNTEuNzY1MDUgLTEwLjA0NDM5IDUxLjc2MzczIC0xMC4wNDU5IDUxLjc2MjA0IC0xMC4wNDg2OCA1MS43NjA2NiAtMTAuMDUzMzEgNTEuNzU5NjIgLTEwLjA1NzI1IDUxLjc1OTUzIC0xMC4wNjA2NSA1MS43NjAwOCAtMTAuMDY0MTggNTEuNzYxIC0xMC4wNjc3OCA1MS43NTg5NCAtMTAuMDcwNDkgNTEuNzU3MzggLTEwLjA3Mjg1IDUxLjc1NjI1IC0xMC4wNzU0NCA1MS43NTc4IC0xMC4wODAzNyA1MS43NTc0MyAtMTAuMDg0IDUxLjc1NzEyIC0xMC4wODg5OSA1MS43NTY0OCAtMTAuMDkyNDQgNTEuNzU0NyAtMTAuMDk0IDUxLjc1MjIyIC0xMC4wOTM3OSA1MS43NTAyOCAtMTAuMDkzODUgNTEuNzQ4MzQgLTEwLjA5MjcgNTEuNzQ2NiAtMTAuMDk0ODggNTEuNzQ2OSAtMTAuMTAwNDQgNTEuNzQ2NzQgLTEwLjEwNDg2IDUxLjc0NDkgLTEwLjExMDU4IDUxLjc0NDkxIC0xMC4xMTUxOCA1MS43NDM2MiAtMTAuMTE2MjcgNTEuNzQyMDcgLTEwLjExNzE0IDUxLjc0MDQyIC0xMC4xMTcwOSA1MS43Mzg4NCAtMTAuMTE2MDIgNTEuNzM4MDEgLTEwLjEyMjk5IDUxLjczOTI0IC0xMC4xMjc0IDUxLjc0MDM3IC0xMC4xMzA2IDUxLjc0MjIyIC0xMC4xMzI5MSA1MS43NDQxNyAtMTAuMTI5MTUgNTEuNzQ1NCAtMTAuMTI3NjEgNTEuNzQ3MzkgLTEwLjEyNTggNTEuNzQ4ODMgLTEwLjEyMjY4IDUxLjc0OTk3IC0xMC4xMjAwOCA1MS43NTE3NCAtMTAuMTE3NDcgNTEuNzU0MDIgLTEwLjExNTQxIDUxLjc1NTU0IC0xMC4xMTI2IDUxLjc1NzMyIC0xMC4xMTEwMyA1MS43NTkzMyAtMTAuMTA4OTIgNTEuNzYwMTcgLTEwLjEwNjU2IDUxLjc2MTcxIC0xMC4xMDQ0OSA1MS43NjMzNiAtMTAuMTAzNSA1MS43NjQ3MiAtMTAuMTA0OTcgNTEuNzYzNjQgLTEwLjEwNjk4IDUxLjc2Mjc1IC0xMC4xMDg4NyA1MS43NjMxNSAtMTAuMTExOTIgNTEuNzYyOTEgLTEwLjExMzk1IDUxLjc2MTY1IC0xMC4xMTQ2IDUxLjc2MDA5IC0xMC4xMTQ1NyA1MS43NTgyMSAtMTAuMTEzNzQgNTEuNzU4NTQgLTEwLjExNjY0IDUxLjc1OTgxIC0xMC4xMTkyNyA1MS43NTkwNCAtMTAuMTIzMTIgNTEuNzU5MjkgLTEwLjEyNTg0IDUxLjc2MDM0IC0xMC4xMjc3IDUxLjc1OTY0IC0xMC4xMzA4MyA1MS43NTkxMSAtMTAuMTMzOTkgNTEuNzU4MTYgLTEwLjEzNjYyIDUxLjc1ODc4IC0xMC4xMzkyNyA1MS43NjA5IC0xMC4xMzY4OCA1MS43NjIzMSAtMTAuMTM1NTMgNTEuNzYzMjMgLTEwLjEzNzggNTEuNzYyOTYgLTEwLjE0MTMyIDUxLjc2NDI5IC0xMC4xNDMwOCA1MS43NjcyOSAtMTAuMTQ0ODggNTEuNzY1NTQgLTEwLjE0NzE5IDUxLjc2NTM5IC0xMC4xNTAyOSA1MS43NjQ3NyAtMTAuMTUyMjQgNTEuNzYzOTcgLTEwLjE1NDE3IDUxLjc2Mjc5IC0xMC4xNTYyOSA1MS43NjQxNSAtMTAuMTU2NTggNTEuNzY1NzUgLTEwLjE1NjE2IDUxLjc2NzQxIC0xMC4xNTYwNiA1MS43Njg3OSAtMTAuMTU4NTYgNTEuNzY4ODUgLTEwLjE2MTI2IDUxLjc2NjUzIC0xMC4xNjM5IDUxLjc2NTI4IC0xMC4xNjY3NyA1MS43NjUzIC0xMC4xNjk5IDUxLjc2NjA5IC0xMC4xNzI3NCA1MS43Njc0OSAtMTAuMTc2MTMgNTEuNzY5OSAtMTAuMTc5NDYgNTEuNzcyMTUgLTEwLjE4MzY1IDUxLjc3NDggLTEwLjE4NzQ2IDUxLjc3NzU5IC0xMC4xODk1MiA1MS43NzgwOCAtMTAuMTkyNiA1MS43NzcwOSAtMTAuMTk1ODIgNTEuNzc1NzMgLTEwLjE5Nzc2IDUxLjc3NDQyIC0xMC4yMDAzMiA1MS43NzQ3OSAtMTAuMjAzODEgNTEuNzc1NzMgLTEwLjIwODE3IDUxLjc3Njg5IC0xMC4yMTIyNyA1MS43Nzc1NiAtMTAuMjE1MzkgNTEuNzc5NzEgLTEwLjIxNDk1IDUxLjc4Mjk3IC0xMC4yMTU3NyA1MS43ODMwNiAtMTAuMjExMTggNTEuNzgyMzEgLTEwLjIwOTA4IDUxLjc4MTQ3IC0xMC4yMDY4MyA1MS43ODE2OSAtMTAuMjAzIDUxLjc4MTc3IC0xMC4xOTk3NSA1MS43ODI0MyAtMTAuMTk0ODQgNTEuNzgzMjMgLTEwLjE5MDUzIDUxLjc4NDk4IC0xMC4xODgzNiA1MS43ODU3MiAtMTAuMTg1OTkgNTEuNzg1NjkgLTEwLjE4Mjg2IDUxLjc4NjIxIC0xMC4xNzg2NSA1MS43ODY1OCAtMTAuMTc1MDEgNTEuNzg4NDkgLTEwLjE3MTk4IDUxLjc5MDY1IC0xMC4xNzAzNSA1MS43OTMzNiAtMTAuMTY5ODYgNTEuNzk0OCAtMTAuMTcwNDYgNTEuNzk2OTUgLTEwLjE3MTIgNTEuNzk4OTMgLTEwLjE3MDcxIDUxLjc5OTg5IC0xMC4xNjc3OCA1MS44MDEzIC0xMC4xNjUyNCA1MS44MDQ1OSAtMTAuMTY0NDMgNTEuODA3NjkgLTEwLjE2MzczIDUxLjgwODE0IC0xMC4xNjYyIDUxLjgwODg5IC0xMC4xNjg0NSA1MS44MTA4MSAtMTAuMTY5ODkgNTEuODEzMDMgLTEwLjE2OTc1IDUxLjgxNjM4IC0xMC4xNjgzNCA1MS44MTk3MyAtMTAuMTY2OCA1MS44MjM1NyAtMTAuMTY1OTUgNTEuODI2MjIgLTEwLjE2NTE2IDUxLjgyNzcxIC0xMC4xNjYyIDUxLjgzMDEgLTEwLjE2NzQ0IDUxLjgzMTc4IC0xMC4xNjk1NyA1MS44MzI3NSAtMTAuMTcyNDUgNTEuODMzNjcgLTEwLjE3NzEyIDUxLjgzNDI5IC0xMC4xODMzNSA1MS44MzUzNyAtMTAuMTg1OTUgNTEuODM2OTggLTEwLjE4NjczIDUxLjgzODcyIC0xMC4xODc5OCA1MS44NDA2NyAtMTAuMTkwMTggNTEuODQyNTQgLTEwLjE5MzI0IDUxLjg0NDA1IC0xMC4xOTUxOSA1MS44NDU3MiAtMTAuMTk1MDkgNTEuODQ3MzMgLTEwLjE5MzM0IDUxLjg0Njg3IC0xMC4xOTEwMSA1MS44NDczMSAtMTAuMTg3ODEgNTEuODQ3OTMgLTEwLjE4NDY3IDUxLjg0NzI3IC0xMC4xODI2IDUxLjg0ODQxIC0xMC4xNzc0NyA1MS44NTAwMyAtMTAuMTc1NzIgNTEuODUxOTkgLTEwLjE3NDMzIDUxLjg1MzMgLTEwLjE3MjgyIDUxLjg1NTI0IC0xMC4xNzAzOSA1MS44NTUyNCAtMTAuMTcwMzkgNTEuODU1ODcgLTEwLjE3MzA1IDUxLjg1NzA5IC0xMC4xNzYyNyA1MS44NTY3MSAtMTAuMTc5OTIgNTEuODU1MTcgLTEwLjE4MTg0IDUxLjg1MzU4IC0xMC4xODMzIDUxLjg1MTc4IC0xMC4xODUwMSA1MS44NTEzNCAtMTAuMTkwNTkgNTEuODUwNDkgLTEwLjE5NDI4IDUxLjg0ODYzIC0xMC4xOTU2OSA1MS44NDcxNCAtMTAuMTk1ODMgNTEuODQ2MDkgLTEwLjE5NzQgNTEuODQ1ODcgLTEwLjIwMTM2IDUxLjg0NDUyIC0xMC4yMDQzNyA1MS44NDM3MSAtMTAuMjA4ODEgNTEuODQ0NzQgLTEwLjIxMjE2IDUxLjg0NTk1IC0xMC4yMTc2MyA1MS44NDU4NyAtMTAuMjIyMjMgNTEuODQ0MDYgLTEwLjIyNDA4IDUxLjg0MjMzIC0xMC4yMjYxMSA1MS44NDI4OCAtMTAuMjMwNjkgNTEuODQ0ODcgLTEwLjIzNDgyIDUxLjgzODcxIC0xMC4yNDM2NyA1MS44MzU3IC0xMC4yNDMzNSA1MS44MzIzNSAtMTAuMjQxMzIgNTEuODMyNTEgLTEwLjI0NzQ1IDUxLjgyODQ2IC0xMC4yNTA2MyA1MS44Mjc0NiAtMTAuMjU2MjMgNTEuODI1NjMgLTEwLjI1ODM4IDUxLjgyMjY2IC0xMC4yNjA4OSA1MS44MTgzMSAtMTAuMjYyMjMgNTEuODIwMjkgLTEwLjI1ODMxIDUxLjgxODI3IC0xMC4yNTgwNCA1MS44MTYzNyAtMTAuMjU4NjkgNTEuODE0NDMgLTEwLjI2MjE2IDUxLjgxMjMxIC0xMC4yNjMzNSA1MS44MTA2MSAtMTAuMjYzODkgNTEuODA5NzUgLTEwLjI2MTkzIDUxLjgwNzYxIC0xMC4yNjA4OSA1MS44MDY1NCAtMTAuMjY5NzQgNTEuODAyOTMgLTEwLjI3MzMxIDUxLjgwMzMgLTEwLjI3NjgyIDUxLjgwNzMyIC0xMC4yNzM3OCA1MS44MTAzIC0xMC4yNzIzMSA1MS44MTAxIC0xMC4yNzU5OSA1MS44MDgzOSAtMTAuMjc3NzIgNTEuODA2OCAtMTAuMjc5MDMgNTEuODA1NDcgLTEwLjI3OTUgNTEuODAyOTYgLTEwLjI4MDkxIDUxLjgwMTgxIC0xMC4yODcyMSA1MS43OTgyNSAtMTAuMjkwMiA1MS43OTQ5NiAtMTAuMjk2NjUgNTEuNzkyMDEgLTEwLjMwNjkxIDUxLjc4OTg3IC0xMC4zMDk0MyA1MS43ODg1MyAtMTAuMzEyNDIgNTEuNzg3NSAtMTAuMzE3MTIgNTEuNzg1NjQgLTEwLjMyMDc0IDUxLjc4MzU4IC0xMC4zMjU2NyA1MS43ODIxMiAtMTAuMzMxMTcgNTEuNzg2NzUgLTEwLjMzMjE0IDUxLjc5MTQ1IC0xMC4zMzMyNiA1MS43OTM1MSAtMTAuMzM2MzggNTEuNzk1MDcgLTEwLjM0MjIgNTEuNzk2NzkgLTEwLjM0ODM4IDUxLjc5ODgyIC0xMC4zNDQ5MyA1MS44MDExNSAtMTAuMzM2NjQgNTEuODA0MTUgLTEwLjMyODE5IDUxLjgwNzY0IC0xMC4zMjU5NSA1MS44MDk4MiAtMTAuMzI4NzggNTEuODEyNTggLTEwLjMzMDExIDUxLjgxNTYzIC0xMC4zMyA1MS44MTgyOCAtMTAuMzI4MDMgNTEuODIwNTIgLTEwLjMyNDMyIDUxLjgyMzE3IC0xMC4zMjMzOSA1MS44MjU2NyAtMTAuMzI2NzQgNTEuODI5NzIgLTEwLjMyNjk5IDUxLjgzMjU1IC0xMC4zMjcyNyA1MS44MzUwOSAtMTAuMzI1NTggNTEuODM4MjIgLTEwLjMyNDYgNTEuODQwNDkgLTEwLjMyMzg5IDUxLjg0MjY5IC0xMC4zMjUyNCA1MS44NDUxMSAtMTAuMzI1IDUxLjg0NDY5IC0xMC4zMjkwOSA1MS44NDUwOCAtMTAuMzMzMzQgNTEuODQ0OTkgLTEwLjM0MDMyIDUxLjg0NDEzIC0xMC4zNDYyNCA1MS44NDY4MyAtMTAuMzUwNjggNTEuODQ0MzIgLTEwLjM1NDE3IDUxLjg0MjgyIC0xMC4zNjM2OSA1MS44NDE3MiAtMTAuMzczNzUgNTEuODQzNTEgLTEwLjM4MjQ2IDUxLjg0NTI2IC0xMC4zODgzNSA1MS44NDc1NSAtMTAuMzg1MTEgNTEuODQ5NTggLTEwLjM4NTA5IDUxLjg1MTIzIC0xMC4zODE4NSA1MS44NTMzMiAtMTAuMzc5OTEgNTEuODU1NjYgLTEwLjM4MDcgNTEuODU2NzYgLTEwLjM3NjE3IDUxLjg1ODY2IC0xMC4zNzU1MiA1MS44NjQwNyAtMTAuMzc3MTEgNTEuODYzODMgLTEwLjM4MTIzIDUxLjg2NzMxIC0xMC4zNzgyMyA1MS44Njk5MiAtMTAuMzc3ODkgNTEuODcyNzYgLTEwLjM3OTIzIDUxLjg3NDE1IC0xMC4zODI2NiA1MS44NzcyNCAtMTAuMzgyMTIgNTEuODc3ODIgLTEwLjM4NzQ2IDUxLjg4MDk2IC0xMC4zODUxNCA1MS44ODYxNyAtMTAuMzgxMzIgNTEuODg2MjQgLTEwLjM3ODA1IDUxLjg4NDM3IC0xMC4zNzQ5NyA1MS44ODQ1NiAtMTAuMzcyNjIgNTEuODg1NTIgLTEwLjM2NzYxIDUxLjg4NTQ4IC0xMC4zNjM1OCA1MS44ODU1MiAtMTAuMzYwNzUgNTEuODg1NDUgLTEwLjM1ODE5IDUxLjg4NjQ3IC0xMC4zNTQ2OSA1MS44ODYzNSAtMTAuMzUxNjggNTEuODg2MjYgLTEwLjM0ODI0IDUxLjg4NTczIC0xMC4zNDQzOSA1MS44ODYxMyAtMTAuMzQwNiA1MS44ODc5MiAtMTAuMzM0NTYgNTEuODg5NTQgLTEwLjMzMTQ3IDUxLjg5MDk4IC0xMC4zMjk2OSA1MS44OTE2NyAtMTAuMzI4MDQgNTEuODkxMjggLTEwLjMyNDgzIDUxLjg5MTQ0IC0xMC4zMjA1NCA1MS44OTE0NyAtMTAuMzE2ODEgNTEuODkxNzIgLTEwLjMxMzc0IDUxLjg5MzA4IC0xMC4zMDkyNiA1MS44OTQ2NCAtMTAuMzA0OCA1MS44OTY2MSAtMTAuMzAyMDkgNTEuODk4MjIgLTEwLjI5NzA1IDUxLjg5NzUxIC0xMC4yOTQzNyA1MS44OTYyNSAtMTAuMjkwNjggNTEuODk1NTkgLTEwLjI4NzI1IDUxLjg5NjI1IC0xMC4yODQ3MSA1MS44OTgzIC0xMC4yODU3MyA1MS44OTk0MiAtMTAuMjg1NTIgNTEuOTAwNDYgLTEwLjI4NDEgNTEuOTAxMDEgLTEwLjI4MDc4IDUxLjkwMTc4IC0xMC4yNzU3MiA1MS45MDI3MiAtMTAuMjczMDkgNTEuOTA0MzEgLTEwLjI3NjQgNTEuOTA3NzMgLTEwLjI3Mzk3IDUxLjkwOTExIC0xMC4yNzI3OCA1MS45MTEzNSAtMTAuMjY5MDcgNTEuOTEyNjUgLTEwLjI2NDQyIDUxLjkxMzE2IC0xMC4yNTkxNCA1MS45MTI0MiAtMTAuMjU1NzEgNTEuOTExIC0xMC4yNTE1MyA1MS45MDgzNCAtMTAuMjQ5MDUgNTEuOTA2MDYgLTEwLjI0NzUzIDUxLjkwNTM0IC0xMC4yNDQ5OSA1MS45MDM1OCAtMTAuMjQyNjkgNTEuOTAxNzEgLTEwLjI0MTg0IDUxLjg5OTg5IC0xMC4yNDE2MiA1MS45MDE5OCAtMTAuMjM4NDcgNTEuOTA0MjEgLTEwLjIzOTM5IDUxLjkwNjkyIC0xMC4yNDAyNCA1MS45MTAzNCAtMTAuMjQxMjYgNTEuOTA5NjcgLTEwLjIzODEzIDUxLjkxMTgzIC0xMC4yMzY0OSA1MS45MTI3MiAtMTAuMjM5MjIgNTEuOTEzMDQgLTEwLjI0MjI2IDUxLjkxMjg5IC0xMC4yNDY0MSA1MS45MTcyOSAtMTAuMjQ1NTMgNTEuOTE4MzkgLTEwLjI0MTEzIDUxLjkyMDYxIC0xMC4yNDIxOSA1MS45MjE1NCAtMTAuMjQzMjkgNTEuOTIyOTUgLTEwLjI0NjQxIDUxLjkyNDEyIC0xMC4yNTAyNCA1MS45MjU0NyAtMTAuMjU1MyA1MS45MjcxNiAtMTAuMjYxOTEgNTEuOTI5MzUgLTEwLjI2NjcgNTEuOTMxMjMgLTEwLjI2NjQ5IDUxLjkzMjEzIC0xMC4yNjIwNSA1MS45MzMyNyAtMTAuMjU4MTEgNTEuOTM0MiAtMTAuMjUzMzggNTEuOTM2MzYgLTEwLjI0ODQ2IDUxLjkzNzQ5IC0xMC4yNDM0NyA1MS45Mzg0NCAtMTAuMjM5NjQgNTEuOTQxMjMgLTEwLjIzNTg5IDUxLjk0MzA4IC0xMC4yMzM1OCA1MS45NDQ3NyAtMTAuMjMwODEgNTEuOTQ2MzMgLTEwLjIyMzk2IDUxLjk0ODA3IC0xMC4yMTgzNCA1MS45NDk5MSAtMTAuMjEzOCA1MS45NTE0MyAtMTAuMjA4NiA1MS45NTMxOCAtMTAuMjA0MDMgNTEuOTU0NzcgLTEwLjIwMDE4IDUxLjk1NDM0IC0xMC4xOTc1NSA1MS45NTMxMiAtMTAuMTk2NTUgNTEuOTUzMzYgLTEwLjE5MzYyIDUxLjk1NDg1IC0xMC4xOTEwOCA1MS45NTY2MyAtMTAuMTg5NTEgNTEuOTU3MzEgLTEwLjE4ODAxIDUxLjk1NzgxIC0xMC4xODM5NCA1MS45NTk4IC0xMC4xODEwNSA1MS45NjEzOSAtMTAuMTc4NCA1MS45NjM0MSAtMTAuMTc1MDkgNTEuOTY1MzUgLTEwLjE3MDI2IDUxLjk2NjM0IC0xMC4xNzU0IDUxLjk2NzQgLTEwLjE3NTkyIDUxLjk2NzUgLTEwLjE3ODE3IDUxLjk2NzA3IC0xMC4xODI0MiA1MS45NjYzNSAtMTAuMTg0NTEgNTEuOTY0ODYgLTEwLjE4NzAzIDUxLjk2MzQ3IC0xMC4xOTA2MyA1MS45NjI0NiAtMTAuMTk1MjEgNTEuOTYxODIgLTEwLjIwMDg5IDUxLjk2MDYxIC0xMC4yMDU3MiA1MS45NTg4MSAtMTAuMjA3NDQgNTEuOTU3MTggLTEwLjIwODE0IDUxLjk1NTQ5IC0xMC4yMDk3MyA1MS45NTM2NiAtMTAuMjEzMDggNTEuOTUyMiAtMTAuMjE4NiA1MS45NTEwNSAtMTAuMjI1MDkgNTEuOTUxNDIgLTEwLjIyOTY1IDUxLjk1MjQgLTEwLjIzMjM5IDUxLjk1MTI5IC0xMC4yMzQ2OSA1MS45NTA1MyAtMTAuMjM2MTggNTEuOTQ5NDQgLTEwLjI0MDU4IDUxLjk0ODU1IC0xMC4yNDQ4NyA1MS45NDg5NSAtMTAuMjQ4OTkgNTEuOTUwNTYgLTEwLjI0OTc3IDUxLjk1MjI2IC0xMC4yNTAyNyA1MS45NTI1OCAtMTAuMjUyMTMgNTEuOTUxNjEgLTEwLjI1MjgzIDUxLjk0OTMgLTEwLjI1Mjc5IDUxLjk0NzY0IC0xMC4yNTI3NSA1MS45NDYwMyAtMTAuMjUzMyA1MS45NDQ2MyAtMTAuMjU0NSA1MS45NDI0NSAtMTAuMjU2NDQgNTEuOTQwNzQgLTEwLjI2MDU2IDUxLjkzOTgxIC0xMC4yNjQwOSA1MS45NDAxNCAtMTAuMjY1OCA1MS45NDE1IC0xMC4yNjYwOSA1MS45NDM0NyAtMTAuMjY1NzYgNTEuOTQ1MzUgLTEwLjI2NTI2IDUxLjk0NjE4IC0xMC4yNjYzMiA1MS45NDc0IC0xMC4yNjg1MiA1MS45NDg3MyAtMTAuMjcwMjkgNTEuOTUwMzIgLTEwLjI3MDAzIDUxLjk1MTU5IC0xMC4yNjc5IDUxLjk1MjczIC0xMC4yNjc1NCA1MS45NTM0OCAtMTAuMjY5NzggNTEuOTUzNTIgLTEwLjI3MzgzIDUxLjk1Mjc3IC0xMC4yNzUxNiA1MS45NTI2MiAtMTAuMjc5NDYgNTEuOTUzNTMgLTEwLjI4NTMzIDUxLjk1MzU0IC0xMC4yODk4MSA1MS45NTMxMSAtMTAuMjk0MDUgNTEuOTU0NDQgLTEwLjI5OTI2IDUxLjk1NDggLTEwLjMwNTE1IDUxLjk1NDAzIC0xMC4zMTEyNiA1MS45NTY3MSAtMTAuMzEyNDMgNTEuOTU5MzUgLTEwLjMwNzAxIDUxLjk2MTQyIC0xMC4zMDMyNiA1MS45NjM5NyAtMTAuMzAxMjUgNTEuOTY1MTggLTEwLjI5NjU4IDUxLjk2NTkzIC0xMC4yOTA2MSA1MS45NjY4NyAtMTAuMjg0NjggNTEuOTY4ODMgLTEwLjI4MDkxIDUxLjk3MDYyIC0xMC4yNzkzNSA1MS45NzIgLTEwLjI3MDIxIDUxLjk2OTA2IC0xMC4yNjU0MiA1MS45Njg4NyAtMTAuMjU2MjcgNTEuOTczNjQgLTEwLjI1NzcyIDUxLjk3NzE5IC0xMC4yNTcyNSA1MS45ODI2MSAtMTAuMjU1MjUgNTEuOTg2ODIgLTEwLjI1MjI0IDUxLjk5MDQ0IC0xMC4yNDk1NiA1MS45OTI2NiAtMTAuMjQ4MzggNTEuOTkyNDkgLTEwLjI0MzU1IDUxLjk5MzU4IC0xMC4yMzc5NyA1MS45OTUwNCAtMTAuMjMxMjQgNTEuOTk2MDggLTEwLjIyMzk4IDUxLjk5NzY3IC0xMC4yMjAxMyA1MS45OTgxNCAtMTAuMjE0MjUgNTEuOTk2MzEgLTEwLjIxMjk3IDUxLjk5MjIxIC0xMC4yMDMwMSA1MS45OTY3IC0xMC4yMDMzMyA1MS45OTk3MyAtMTAuMjAxMTMgNTIuMDAyNjQgLTEwLjE5OTQ4IDUyLjAwNjQ1IC0xMC4xOTQ0NCA1Mi4wMTA0MyAtMTAuMTgzNzYgNTIuMDEyOTYgLTEwLjE3NTE2IDUyLjAxNDE4IC0xMC4xNjU1NSA1Mi4wMTY2NyAtMTAuMTU1IDUyLjAyMDQ5IC0xMC4xNDc1NyA1Mi4wMjM5NSAtMTAuMTQyMyA1Mi4wMjYzOCAtMTAuMTM2MDcgNTIuMDI4OTIgLTEwLjEyODM3IDUyLjAzMDM1IC0xMC4xMjE3OCA1Mi4wMjY3IC0xMC4xMjAxNCA1Mi4wMjYwOSAtMTAuMTE0OTQgNTIuMDI3NTMgLTEwLjEwNzMgNTIuMDI5NDQgLTEwLjEwMjkgNTIuMDMxIC0xMC4xMDA1MyA1Mi4wMjk5MyAtMTAuMDk3NzggNTIuMDI3OTUgLTEwLjA5NTg4IDUyLjAyNzA2IC0xMC4wOTMxNSA1Mi4wMjg1NiAtMTAuMDg4MjMgNTIuMDMwOTIgLTEwLjA4NjMyIDUyLjAzNCAtMTAuMDgyMzEgNTIuMDM2MDggLTEwLjA3NDY2IDUyLjAzNzA3IC0xMC4wNjY2NCA1Mi4wMzg1NiAtMTAuMDU5MzIgNTIuMDQwMzggLTEwLjA1NDkxIDUyLjA0MTEzIC0xMC4wNDg5MyA1Mi4wNDA0MiAtMTAuMDQzNyA1Mi4wMzkzMSAtMTAuMDM4OTggNTIuMDM5MSAtMTAuMDMxMDIgNTIuMDM5NDcgLTEwLjAyMzkxIDUyLjA0MDEzIC0xMC4wMTY1NyA1Mi4wNDIzNCAtMTAuMDA5NTUgNTIuMDQ0OTEgLTEwLjAwNDk4IDUyLjA0NjczIC05Ljk5ODE3IDUyLjA0OTQyIC05Ljk5MDc5IDUyLjA1MDcxIC05Ljk4NDkyIDUyLjA1MjEgLTkuOTc3NTYgNTIuMDU1MDIgLTkuOTcwODQgNTIuMDU5NjkgLTkuOTY3NzQgNTIuMDYzODcgLTkuOTY2MiA1Mi4wNjgwNCAtOS45NjQ2NCA1Mi4wNzEzMiAtOS45NjUzIDUyLjA3NjM0IC05Ljk2NDgyIDUyLjA4MTI3IC05Ljk2NDMxIDUyLjA4NDA1IC05Ljk2MjkzIDUyLjA4Nzc4IC05Ljk1OTk2IDUyLjA5MTAyIC05Ljk1NzMxIDUyLjA5MTQzIC05Ljk0ODQxIDUyLjA4OTU3IC05Ljk0OTgzIDUyLjA4NzMgLTkuOTU1MzYgNTIuMDg0MzcgLTkuOTU3NDcgNTIuMDgxMjYgLTkuOTU4MzMgNTIuMDc5MDQgLTkuOTU3MjkgNTIuMDc2MzUgLTkuOTU2MTUgNTIuMDczOTkgLTkuOTU0NjIgNTIuMDcyMzcgLTkuOTUzOTkgNTIuMDcwOTcgLTkuOTU3OSA1Mi4wNjg3NyAtOS45NjAwMSA1Mi4wNjQ2MyAtOS45NjIzMSA1Mi4wNTgxMSAtOS45NjMwNyA1Mi4wNTkyIC05Ljk1OTcgNTIuMDYxMTMgLTkuOTU3NDEgNTIuMDYyNyAtOS45NTM2OCA1Mi4wNjUxNyAtOS45NTA0NCA1Mi4wNjc0NyAtOS45NDQ2MiA1Mi4wNzAzMSAtOS45NDIzNiA1Mi4wNzMyOSAtOS45NDA4NyA1Mi4wNzQ5MSAtOS45Mzg5NCA1Mi4wNzU4OCAtOS45MzQ4IDUyLjA3NjI1IC05LjkzMDk4IDUyLjA3Nzc3IC05LjkyOTM0IDUyLjA4MDI1IC05LjkyNyA1Mi4wNzk1NSAtOS45MjUzNiA1Mi4wNzc3OCAtOS45MjU2MSA1Mi4wNzU4OSAtOS45MjYxMyA1Mi4wNzM0IC05LjkyNjIyIDUyLjA3MTEgLTkuOTI2MDYgNTIuMDY5MTggLTkuOTIzNDMgNTIuMDY3NjEgLTkuOTE5ODEgNTIuMDY3NzIgLTkuOTE1OTUgNTIuMDY5MDUgLTkuOTEzMDcgNTIuMDY5MDEgLTkuOTExMjggNTIuMDY4NTUgLTkuOTA4NzkgNTIuMDY4OTIgLTkuOTA2MzIgNTIuMDcxNDYgLTkuOTA5MzggNTIuMDcyNzcgLTkuOTEyNjMgNTIuMDc0MDkgLTkuOTE0ODQgNTIuMDc3NiAtOS45MTM0NiA1Mi4wNzczNSAtOS45MTU1IDUyLjA3NzE4IC05LjkxNzg2IDUyLjA3Nzk0IC05LjkxOTk1IDUyLjA4MTcgLTkuOTIwMTEgNTIuMDg0MjYgLTkuOTIxNjcgNTIuMDg2MjUgLTkuOTIzNDIgNTIuMDg4MyAtOS45MjIwNCA1Mi4wOTAyNCAtOS45MjA2MyA1Mi4wOTM0NiAtOS45MTk2NCA1Mi4wOTU1NSAtOS45MTc1MiA1Mi4wOTg4MSAtOS45MTI0NyA1Mi4xMDE3IC05LjkwNjAyIDUyLjEwNTYzIC05LjkwMDM3IDUyLjEwOTU0IC05Ljg5NzQyIDUyLjExMzY1IC05Ljg5NDM1IDUyLjExODA2IC05Ljg5MjIzIDUyLjEyMzI2IC05Ljg5MTc4IDUyLjEyNzIxIC05Ljg5MDc4IDUyLjEyOTg0IC05Ljg5MDExIDUyLjEzMjcxIC05Ljg5MTEzIDUyLjEzNTY0IC05Ljg5Mjc3IDUyLjEzOTU1IC05Ljg5MTAxIDUyLjE0MDMgLTkuODg4NDYgNTIuMTQwMyAtOS44ODg0NiA1Mi4xMzU4MSAtOS44ODkzNiA1Mi4xMzMzMyAtOS44ODY3NyA1Mi4xMzUxNiAtOS44ODQ0MyA1Mi4xMzM3MyAtOS44ODAyNSA1Mi4xMzE4NCAtOS44ODA3NyA1Mi4xMjg2NiAtOS44ODE0OCA1Mi4xMjY4MiAtOS44ODI2MSA1Mi4xMjUwNCAtOS44ODQyIDUyLjEyMjYgLTkuODg1OTUgNTIuMTIwNzUgLTkuODg0ODQgNTIuMTE4NDcgLTkuODg0MzkgNTIuMTE3MDIgLTkuODg0MDkgNTIuMTE0ODggLTkuODg1NiA1Mi4xMTM0OCAtOS44ODY5NyA1Mi4xMTE3MyAtOS44ODgxMyA1Mi4xMTA4NiAtOS44ODYzIDUyLjExMTM1IC05Ljg4MjIgNTIuMTExOTUgLTkuODc3OTggNTIuMTEzMDYgLTkuODcwNzIgNTIuMTE0MSAtOS44NjQzMyA1Mi4xMTUzNiAtOS44NTYyMSA1Mi4xMTYxNyAtOS44NDc5OSA1Mi4xMTcwNyAtOS44NDM1MiA1Mi4xMTU4IC05Ljg0MDcxIDUyLjExMzYyIC05LjgzNzg4IDUyLjExNSAtOS44MzQyNiA1Mi4xMTU5MSAtOS44MzU2NSA1Mi4xMTc2NiAtOS44MzY5IDUyLjExOTIgLTkuODM3MjEgNTIuMTIwOTcgLTkuODM3MSA1Mi4xMjI5NCAtOS44MzY2IDUyLjEyNDI1IC05LjgzMjY4IDUyLjEyNzEyIC05LjgyODkgNTIuMTI2MTMgLTkuODIzNzUgNTIuMTI1NDcgLTkuODIwMzMgNTIuMTI2MzUgLTkuODEzNDcgNTIuMTI0NDIgLTkuODEyMTggNTIuMTIyMzkgLTkuODExMDMgNTIuMTE5NTkgLTkuODEwMTcgNTIuMTIwMjkgLTkuODA4MzYgNTIuMTIzIC05LjgwNzg2IDUyLjEyNjM0IC05LjgwODY3IDUyLjEyNzQ3IC05LjgwNzI2IDUyLjEyOTU1IC05LjgwNjYxIDUyLjEzMTUzIC05LjgwNzE2IDUyLjEzMjkyIC05LjgwNDU5IDUyLjEzMTg2IC05LjgwMjg3IDUyLjEzMTkyIC05Ljc5NzE5IDUyLjEzMDk5IC05Ljc5NDc3IDUyLjEzMjIyIC05Ljc4NzIyIDUyLjEzMDgxIC05Ljc4NjIgNTIuMTI5NDUgLTkuNzg0NzMgNTIuMTI3MjEgLTkuNzgxMjkgNTIuMTI2MTQgLTkuNzc1OTggNTIuMTI0OTcgLTkuNzY4MjcgNTIuMTI0NTMgLTkuNzYzMDkgNTIuMTIzMzEgLTkuNzYwODkgNTIuMTIxMTEgLTkuNzYxOTYgNTIuMTE5OTQgLTkuNzY1MTcgNTIuMTE3ODUgLTkuNzY5ODQgNTIuMTE1NTcgLTkuNzcwNTkgNTIuMTE1NTcgLTkuNzcwNTkgNTIuMTE3MTcgLTkuNzY1MjIgNTIuMTE4MjggLTkuNzYxNTQgNTIuMTIwODkgLTkuNzU3NTcgNTIuMTIyODkgLTkuNzU1NDMgNTIuMTI0NjggLTkuNzU3MjcgNTIuMTI2OTEgLTkuNzU5NjYgNTIuMTI4MDQgLTkuNzY1NDIgNTIuMTI4NjIgLTkuNzcxMjMgNTIuMTI5MSAtOS43NzU4MiA1Mi4xMzE2NyAtOS43Nzg1NyA1Mi4xMzI2MyAtOS43ODA0MSA1Mi4xMzQ0OCAtOS43ODI4NyA1Mi4xMzYyOSAtOS43ODMyNCA1Mi4xMzc4MSAtOS43ODUwNCA1Mi4xNDAwMiAtOS43OTEzMiA1Mi4xNDM3NyAtOS43OTA1NyA1Mi4xNDYxNyAtOS43ODgwNSA1Mi4xNDY1MSAtOS43ODQ2NyA1Mi4xNDcxMSAtOS43ODI4NCA1Mi4xNDgzMiAtOS43ODE0MyA1Mi4xNDk0MSAtOS43NzkyNSA1Mi4xNTAwNSAtOS43NzU2MyA1Mi4xNTAzMyAtOS43NzA3NCA1Mi4xNTExMyAtOS43NjQ5IDUyLjE1MjU3IC05Ljc1OTM1IDUyLjE1NTA1IC05Ljc1Njk5IDUyLjE1NjUyIC05Ljc1NTc4IDUyLjE1NzM4IC05Ljc1MTc1IDUyLjE1NjgxIC05Ljc0ODE5IDUyLjE1NTUgLTkuNzQ1OTggNTIuMTUzNjMgLTkuNzQ3NzEgNTIuMTUxNjQgLTkuNzQ4MzcgNTIuMTQ4MjkgLTkuNzQ4NzYgNTIuMTQ3MjcgLTkuNzQ2NDYgNTIuMTQ3NDIgLTkuNzQwNjUgNTIuMTQ5MDUgLTkuNzM3MzYgNTIuMTUwNzggLTkuNzM2NTEgNTIuMTUxNzcgLTkuNzM0MzIgNTIuMTUxNCAtOS43MzA2NCA1Mi4xNTI5NiAtOS43MjgyNSA1Mi4xNTUwNiAtOS43Mjg1MiA1Mi4xNTY1MiAtOS43MyA1Mi4xNTc5NCAtOS43Mjk1MyA1Mi4xNTkyNyAtOS43MjY1MSA1Mi4xNjAzMyAtOS43MjIyMiA1Mi4xNjEwMSAtOS43MTY4IDUyLjE2MjM5IC05LjcxMzE3IDUyLjE2MzcxIC05LjcxMTQ5IDUyLjE2NDg2IC05LjcwODU3IDUyLjE2NTM0IC05LjcwNDQ3IDUyLjE2NDg1IC05LjcwMTIzIDUyLjE2NjI2IC05LjY5ODM2IDUyLjE2NjMxIC05LjY5NDAyIDUyLjE2ODg5IC05LjY5NDA4IDUyLjE2NzkyIC05LjY5ODM4IDUyLjE2NzQ4IC05LjcwMTg4IDUyLjE2NzU0IC05LjcwNzE1IDUyLjE2NTk1IC05LjcwOTk5IDUyLjE2NDEzIC05LjcxMzM3IDUyLjE2Mjg5IC05LjcxODgyIDUyLjE2MTcgLTkuNzIzNjkgNTIuMTYxMDQgLTkuNzI4NzkgNTIuMTU5MTggLTkuNzMyNjMgNTIuMTU3IC05LjczNDc0IDUyLjE1NTYgLTkuNzMzNTYgNTIuMTU0NDIgLTkuNzMyMjkgNTIuMTU0MSAtOS43MzQwMiA1Mi4xNTM1MSAtOS43MzgxIDUyLjE1MTk0IC05LjczOTQzIDUyLjE1MDM2IC05Ljc0MDc4IDUyLjE0OTUzIC05Ljc0MzMgNTIuMTUwOTggLTkuNzQ0OCA1Mi4xNTMxNCAtOS43NDMxMiA1Mi4xNTQ1OSAtOS43NDEwMSA1Mi4xNTU5IC05Ljc0MDY3IDUyLjE1NzczIC05Ljc0MjA5IDUyLjE2MDEyIC05Ljc0MTA2IDUyLjE1ODA3IC05Ljc0NDk5IDUyLjE2MDcyIC05Ljc1MTUyIDUyLjE2MDM3IC05Ljc1NDg5IDUyLjE2MTQ3IC05Ljc1NzM2IDUyLjE2MDUgLTkuNzU4MjEgNTIuMTU4MjggLTkuNzU5MjggNTIuMTU2ODEgLTkuNzYwNDkgNTIuMTU1NDcgLTkuNzYzNjYgNTIuMTU1MjggLTkuNzY3MzcgNTIuMTUzNjQgLTkuNzcxOTkgNTIuMTUzNTYgLTkuNzc1NTggNTIuMTUzODIgLTkuNzc5NTIgNTIuMTU0MjcgLTkuNzg0NTYgNTIuMTU2MiAtOS43ODQ2NCA1Mi4xNTc4NiAtOS43ODU4NyA1Mi4xNTkwMiAtOS43ODc2IDUyLjE1ODgyIC05Ljc5MDI2IDUyLjE2MDEgLTkuNzkwMzcgNTIuMTYxOTMgLTkuNzkxNjMgNTIuMTYyNTMgLTkuNzkzNTQgNTIuMTYwNzEgLTkuNzk1NzMgNTIuMTU5OTYgLTkuNzk3MDggNTIuMTU5MzUgLTkuODAwNCA1Mi4xNTc0NyAtOS44MDE5OCA1Mi4xNTU4NSAtOS44MDI3IDUyLjE1NDY4IC05LjgwNDcyIDUyLjE1NDUzIC05LjgwNzg0IDUyLjE1NiAtOS44MDkxOCA1Mi4xNTgyMyAtOS44MTAyMyA1Mi4xNjA1NiAtOS44MTExMyA1Mi4xNjE4MyAtOS44MTI1OSA1Mi4xNjA0NCAtOS44MTYzNiA1Mi4xNTkyMSAtOS44MjAzMiA1Mi4xNTg1NCAtOS44MjU1NyA1Mi4xNTg2MSAtOS44MzIwMyA1Mi4xNTkwOSAtOS44MzY2MiA1Mi4xNTk5IC05Ljg0MDUzIDUyLjE1OTQ3IC05Ljg0Mzc1IDUyLjE1ODkxIC05Ljg1NzI4IDUyLjE1NzU5IC05Ljg1ODggNTIuMTU2MjkgLTkuODYxMjUgNTIuMTU2OTUgLTkuODY0ODMgNTIuMTU3MzggLTkuODcwMTYgNTIuMTU2NzEgLTkuODcyODggNTIuMTU0MTkgLTkuODgxNjcgNTIuMTU0MzkgLTkuODgzOTUgNTIuMTQ2NzUgLTkuOTMzMjIgNTIuMTQ4MjYgLTkuOTM3NTcgNTIuMTQ3MDkgLTkuOTQwNzkgNTIuMTQ0NDYgLTkuOTQzNyA1Mi4xNDM0OCAtOS45NTE3NSA1Mi4xNDM5OSAtOS45NTgyOSA1Mi4xNDU2NSAtOS45NjQzMiA1Mi4xNDMwNyAtOS45NjE4NSA1Mi4xNDE5OSAtOS45NTkwOCA1Mi4xNDE5MSAtOS45NTUzMyA1Mi4xMzU4MSAtOS45NDk0NSA1Mi4xMzQ5NCAtOS45NDA0MiA1Mi4xMzIzMSAtOS45Mzk5IDUyLjEyOTk0IC05LjkzODM3IDUyLjEyODIzIC05LjkzNTMzIDUyLjEyNjI1IC05LjkzMzU4IDUyLjEyNDM4IC05LjkzNDk5IDUyLjEyMTYgLTkuOTM1MDQgNTIuMTE4NzggLTkuOTMzNDIgNTIuMTE2MjQgLTkuOTMwNTEgNTIuMTE0NTcgLTkuOTI1ODMgNTIuMTEzNCAtOS45MjE4NSA1Mi4xMTEzMyAtOS45MjExMyA1Mi4xMDgyNCAtOS45MjI5IDUyLjEwNzgxIC05LjkyODUxIDUyLjEwODYyIC05LjkzNjAxIDUyLjExMTg0IC05Ljk0MjIxIDUyLjExNzcyIC05Ljk0OTY4IDUyLjEyNTM2IC05Ljk1NDY3IDUyLjEzMzY0IC05Ljk2MDk5IDUyLjE0MDIyIC05Ljk2NzczIDUyLjE0Mzg2IC05Ljk3NDMgNTIuMTQzNSAtOS45NzkwMyA1Mi4xNDIwOSAtOS45ODQxMyA1Mi4xNDA3NyAtOS45OTA2MiA1Mi4xMzk4OCAtOS45OTYxMiA1Mi4xMzk4IC0xMC4wMDU1NSA1Mi4xMzk3MiAtMTAuMDEyNDMgNTIuMTM4ODggLTEwLjAxODU0IDUyLjEzNzAxIC0xMC4wMjM3MiA1Mi4xMzUwOCAtMTAuMDI5NDcgNTIuMTM1NTUgLTEwLjAzNDIxIDUyLjEzNjU4IC0xMC4wMzg3NiA1Mi4xMzUzNyAtMTAuMDQyNDEgNTIuMTMzOTEgLTEwLjA0NjkxIDUyLjEzMjYxIC0xMC4wNTE4OCA1Mi4xMzA1NyAtMTAuMDU2NzIgNTIuMTI5NTggLTEwLjA2MTE1IDUyLjEyODA0IC0xMC4wNjc4OSA1Mi4xMjY2NiAtMTAuMDcyNTQgNTIuMTI0NDQgLTEwLjA3ODU0IDUyLjEyNDEgLTEwLjA4NDE2IDUyLjEyNTYyIC0xMC4wODk0MiA1Mi4xMjU5NyAtMTAuMDkzMjQgNTIuMTI1NTYgLTEwLjA5ODU1IDUyLjEyMzk1IC0xMC4xMDAxNyA1Mi4xMjIwOSAtMTAuMTAxNTkgNTIuMTE5MjYgLTEwLjEwNDc0IDUyLjExNTg2IC0xMC4xMTA0OCA1Mi4xMTUzNSAtMTAuMTI0MDEgNTIuMTEzNTkgLTEwLjEyNTMgNTIuMTE0MiAtMTAuMTM4NiA1Mi4xMTY3NSAtMTAuMTMzMjkgNTIuMTE5NjkgLTEwLjEzMjI1IDUyLjEyMDQ1IC0xMC4xMzQzNSA1Mi4xMjEyNSAtMTAuMTQxNzEgNTIuMTIyMDcgLTEwLjE0NzczIDUyLjExOTU4IC0xMC4xNTE0MSA1Mi4xMTc1NiAtMTAuMTU0NzQgNTIuMTE1MjcgLTEwLjE1OTIgNTIuMTE0MTEgLTEwLjE2NTcxIDUyLjExMjUzIC0xMC4xNzE2NyA1Mi4xMTEzMSAtMTAuMTgwMTEgNTIuMTA4OTIgLTEwLjE4MTEyIDUyLjEwODkxIC0xMC4xODU5MSA1Mi4xMTQwNCAtMTAuMTg2MzcgNTIuMTE0NCAtMTAuMTkyNDQgNTIuMTE2NSAtMTAuMTkyNzIgNTIuMTE5MDIgLTEwLjE5MzU1IDUyLjEyMTA3IC0xMC4xOTQ0MyA1Mi4xMjE5MyAtMTAuMTk2MzkgNTIuMTI0MDQgLTEwLjIwMTM0IDUyLjEzMzc2IC0xMC4xOTk3NSA1Mi4xMzQwNCAtMTAuMTk1MDIgNTIuMTM1NjYgLTEwLjE5MjA2IDUyLjEzNjQ4IC0xMC4xOTQ0OCA1Mi4xMzU5OCAtMTAuMjAwODIgNTIuMTM4MTYgLTEwLjIwNTkyIDUyLjEzNjU5IC0xMC4yMDcwOSA1Mi4xMzUzMSAtMTAuMjA4MTcgNTIuMTM0NjEgLTEwLjIxMjIzIDUyLjEzMzgxIC0xMC4yMTQxNiA1Mi4xMzIwNiAtMTAuMjEwNjUgNTIuMTMyMzQgLTEwLjIwNDg2IDUyLjEyNzE0IC0xMC4yMDQwNyA1Mi4xMjYzMiAtMTAuMjA2MyA1Mi4xMjUwMiAtMTAuMjA4NzMgNTIuMTIzNDIgLTEwLjIxMDIgNTIuMTIxNjcgLTEwLjIxMDI5IDUyLjExOTU2IC0xMC4yMTExOSA1Mi4xMjAwMyAtMTAuMjE1NzkgNTIuMTE5ODQgLTEwLjIxODE1IDUyLjEyMDE1IC0xMC4yMjM2IDUyLjEyMDg1IC0xMC4yMjk5IDUyLjExNzU4IC0xMC4yMzQgNTIuMTE4MTIgLTEwLjIzOTk3IDUyLjEyMjMzIC0xMC4yNDAzOSA1Mi4xMjM2IC0xMC4yNDE3MSA1Mi4xMjQzMyAtMTAuMjQ2NTEgNTIuMTI1NjggLTEwLjI1MDU0IDUyLjEyODExIC0xMC4yNTIzOSA1Mi4xMzIwOSAtMTAuMjU0NTcgNTIuMTMzNjMgLTEwLjI1NjEgNTIuMTM2MjYgLTEwLjI2MjQ5IDUyLjEzOTc5IC0xMC4yNjExNCA1Mi4xMzk2MiAtMTAuMjY3ODUgNTIuMTQwMTYgLTEwLjI3MTU2IDUyLjE0MDcxIC0xMC4yNzUxMiA1Mi4xMzg5MSAtMTAuMjc1NjQgNTIuMTM1NzUgLTEwLjI4Mjc3IDUyLjEzNjczIC0xMC4yODY3MyA1Mi4xMzMzNCAtMTAuMjkyMzEgNTIuMTMwNTYgLTEwLjI5ODE4IDUyLjEyOTI5IC0xMC4yOTc3NiA1Mi4xMjk4IC0xMC4yOTM4MiA1Mi4xMjkxOSAtMTAuMjkxIDUyLjEyODE5IC0xMC4yODczNCA1Mi4xMjgyOSAtMTAuMjgzNzcgNTIuMTI4MTEgLTEwLjI4MDI4IDUyLjEyNjggLTEwLjI3NDc1IDUyLjEyNDU3IC0xMC4yNzAyMyA1Mi4xMjQ3MyAtMTAuMjY2OTggNTIuMTI0NzEgLTEwLjI2MzgyIDUyLjEyNDQzIC0xMC4yNTkxMSA1Mi4xMjM4NSAtMTAuMjU0OTUgNTIuMTIyNTUgLTEwLjI1MjczIDUyLjEyMDgyIC0xMC4yNTExNyA1Mi4xMTg3MSAtMTAuMjUyMjIgNTIuMTE2MzYgLTEwLjI1Mzk5IDUyLjExNDk3IC0xMC4yNTc0NSA1Mi4xMTQxNyAtMTAuMjYxNjIgNTIuMTE0MzYgLTEwLjI2NjMgNTIuMTE0NTcgLTEwLjI3MTc1IDUyLjExMzUgLTEwLjI3NDgyIDUyLjExMjU1IC0xMC4yNzc0NyA1Mi4xMTE5MyAtMTAuMjgwNjMgNTIuMTEyOTQgLTEwLjI4NTM0IDUyLjExNDgyIC0xMC4yODk0NyA1Mi4xMTcxNiAtMTAuMjk1OTYgNTIuMTE4NCAtMTAuMzAxMzIgNTIuMTE2NjUgLTEwLjMwNjk1IDUyLjExNjM3IC0xMC4zMTI4OCA1Mi4xMTkxMiAtMTAuMzE0MjEgNTIuMTIyOTEgLTEwLjMxOTk2IDUyLjEyMzEzIC0xMC4zMjUyNSA1Mi4xMjQ4IC0xMC4zMjUxNSA1Mi4xMjcyMyAtMTAuMzI5NCA1Mi4xMjkxMSAtMTAuMzM3MDEgNTIuMTMxMjggLTEwLjM0MzMxIDUyLjEzMTY5IC0xMC4zNTA4OCA1Mi4xMzA2NCAtMTAuMzU1OTEgNTIuMTI4MTUgLTEwLjM2MTU0IDUyLjEyNTExIC0xMC4zNjYxNCA1Mi4xMjI0NSAtMTAuMzY3MDggNTIuMTIwODUgLTEwLjM2NjQ0IDUyLjExNTYxIC0xMC4zNjI2MyA1Mi4xMTY2MyAtMTAuMzU2ODYgNTIuMTE3IC0xMC4zNTIyOSA1Mi4xMTU3NiAtMTAuMzUxNTcgNTIuMTE0MDggLTEwLjM1MDYyIDUyLjExMTkzIC0xMC4zNDg2NyA1Mi4xMTA5MyAtMTAuMzQzODEgNTIuMTExMzQgLTEwLjM0IDUyLjEwOTE0IC0xMC4zMzg0OSA1Mi4xMDgyNiAtMTAuMzQxNDUgNTIuMTA3MTggLTEwLjM0MjI3IDUyLjEwNjY3IC0xMC4zNDUxNiA1Mi4xMDYxNSAtMTAuMzUxNjQgNTIuMTA1NzMgLTEwLjM1Njk1IDUyLjEwNjkxIC0xMC4zNjE2OSA1Mi4xMDgzIC0xMC4zNjYzMyA1Mi4xMDc0IC0xMC4zNjk0NCA1Mi4xMDcxMiAtMTAuMzc0MDIgNTIuMTA3NTYgLTEwLjM3OTk2IDUyLjEwNzM1IC0xMC4zODQ4NyA1Mi4xMDUxMSAtMTAuMzg4NTkgNTIuMTAzODUgLTEwLjM4OTM3IDUyLjEwMjgxIC0xMC4zOTMyIDUyLjEwMzE0IC0xMC4zOTU5NSA1Mi4xMDMwMyAtMTAuMzk5NTQgNTIuMTAxNyAtMTAuNDA0NjQgNTIuMTAwOTMgLTEwLjQwOTU3IDUyLjEwMDgxIC0xMC40MTQ0OSA1Mi4xMDE5NiAtMTAuNDE4NDggNTIuMTAwMTcgLTEwLjQyMTI1IDUyLjA5OTAxIC0xMC40MjQxNiA1Mi4wOTg2OCAtMTAuNDI5NDcgNTIuMDk3NjcgLTEwLjQzNzM1IDUyLjA5NjgyIC0xMC40NDE5NyA1Mi4wOTkyNiAtMTAuNDQ2MDkgNTIuMTAyMTIgLTEwLjQ0ODQ5IDUyLjEwNTE2IC0xMC40NDk1OSA1Mi4xMDgzMiAtMTAuNDUxNzcgNTIuMTA5ODIgLTEwLjQ1NTk5IDUyLjEwOTYyIC0xMC40NjA3MyA1Mi4xMDk0MyAtMTAuNDY1MTkgNTIuMTEwOTUgLTEwLjQ2ODIyIDUyLjExMzM3IC0xMC40Njc5OCA1Mi4xMTQ0MiAtMTAuNDY0MTYgNTIuMTE1MjkgLTEwLjQ1OTA5IDUyLjExNzYyIC0xMC40NTY1OSA1Mi4xMjA2IC0xMC40NTM5NCA1Mi4xMjUxMSAtMTAuNDUzMSA1Mi4xMjk5OCAtMTAuNDUzMzggNTIuMTMxNjMgLTEwLjQ1Njg4IDUyLjEzNDE1IC0xMC40NTg3OSA1Mi4xMzY0MyAtMTAuNDYwMzEgNTIuMTM4NDYgLTEwLjQ2MDMgNTIuMTQxMDYgLTEwLjQ1OTA1IDUyLjE0Mzg3IC0xMC40NTg0NiA1Mi4xNDc1OSAtMTAuNDYwNDUgNTIuMTQ5ODIgLTEwLjQ2MzYzIDUyLjE1MjIxIC0xMC40NjcyOCA1Mi4xNTQzOSAtMTAuNDY3NjIgNTIuMTU1MzEgLTEwLjQ2MTk1IDUyLjE1NTMzIC0xMC40NTYxIDUyLjE1NzQ5IC0xMC40NTEwMSA1Mi4xNTk1NiAtMTAuNDUwNTUgNTIuMTU5MDUgLTEwLjQ1NDY1IDUyLjE2MTIyIC0xMC40NTUxMSA1Mi4xNjI4MSAtMTAuNDUxNTUgNTIuMTY0MzMgLTEwLjQ1MDk3IDUyLjE2NjM5IC0xMC40NDcyMiA1Mi4xNjc4NiAtMTAuNDQzNzggNTIuMTY5NjggLTEwLjQ0MTkxIDUyLjE3MTUgLTEwLjQ0MTExIDUyLjE3MzY1IC0xMC40Mzk2MSA1Mi4xNzQ5IC0xMC40MzY3MiA1Mi4xNzUxMiAtMTAuNDMzOTIgNTIuMTc0NzkgLTEwLjQzMDEgNTIuMTc2MDYgLTEwLjQyOTMxIDUyLjE3Njc1IC0xMC40Mzc4NiA1Mi4xNzQ4NiAtMTAuNDQzMDIgNTIuMTcyOSAtMTAuNDQ2NjYgNTIuMTc0ODIgLTEwLjQ0OTE3IDUyLjE3NjY5IC0xMC40NDY1NyA1Mi4xNzg2MyAtMTAuNDQ2NTQgNTIuMTgwMTkgLTEwLjQ0ODk2IDUyLjE3OTcxIC0xMC40NTQ4NiA1Mi4xNzg2MiAtMTAuNDYyNTkgNTIuMTgyNDggLTEwLjQ2MTc3IDUyLjE4NDQgLTEwLjQ2MDY4IDUyLjE4NjI5IC0xMC40NTY4OCA1Mi4xODc2NSAtMTAuNDUxNDcgNTIuMTg5NTEgLTEwLjQ0Njc1IDUyLjE5MTY3IC0xMC40NDE4MSA1Mi4xOTMzMiAtMTAuNDM3MzYgNTIuMTkzNjkgLTEwLjQzMTU3IDUyLjE5NTUgLTEwLjQyNTIgNTIuMTk4NyAtMTAuNDI0MzkgNTIuMjAwNiAtMTAuNDIyNjkgNTIuMjAzMyAtMTAuNDE2NjYgNTIuMjA2NTYgLTEwLjQxMDQ0IDUyLjIwNTU4IC0xMC40MDY2NCA1Mi4yMDY5OSAtMTAuNDAxODIgNTIuMjA5OCAtMTAuNDAwMTggNTIuMjEwNDggLTEwLjM5NzQ2IDUyLjIwODczIC0xMC4zOTUxMyA1Mi4yMDcwMSAtMTAuMzkzNTYgNTIuMjA0NzQgLTEwLjM5Mjk0IDUyLjIwMTg1IC0xMC4zOTU2MiA1Mi4xOTg5NSAtMTAuMzk5NTEgNTIuMTk1NjMgLTEwLjQwNDA3IDUyLjE5Mzk2IC0xMC40MDQzIDUyLjE5MDc4IC0xMC40MDI0MyA1Mi4xODc5NyAtMTAuNDAwNjMgNTIuMTg3MiAtMTAuNDA1NTcgNTIuMTgzNTggLTEwLjQwNDY1IDUyLjE4MjIgLTEwLjQwMTIgNTIuMTgxMyAtMTAuMzk2MzYgNTIuMTgwOTQgLTEwLjM5MTYzIDUyLjE4MDU5IC0xMC4zODc5NSA1Mi4xODA2MSAtMTAuMzgzMTUgNTIuMTgwODMgLTEwLjM3OTI5IDUyLjE4MTU2IC0xMC4zNzU4NCA1Mi4xODE1NiAtMTAuMzc1ODQgNTIuMTc5MjYgLTEwLjM3MzU2IDUyLjE3Nzc5IC0xMC4zNzExNSA1Mi4xNzYxNyAtMTAuMzY4MjYgNTIuMTc1MTUgLTEwLjM2MzgzIDUyLjE3Njc1IC0xMC4zNjExNyA1Mi4xNzgyOCAtMTAuMzU5MzkgNTIuMTgwOTIgLTEwLjM1ODYgNTIuMTg0NjggLTEwLjM1Nzc1IDUyLjE4NjgyIC0xMC4zNTc2MSA1Mi4xODgzNyAtMTAuMzYwMTcgNTIuMTg5OTEgLTEwLjM2Mzk2IDUyLjE5MTY4IC0xMC4zNjcxOCA1Mi4xOTM3NiAtMTAuMzcwMDMgNTIuMTk2OTEgLTEwLjM2OTggNTIuMTk5ODkgLTEwLjM2NzI4IDUyLjIwMjIyIC0xMC4zNjQ3NiA1Mi4yMDQ4NiAtMTAuMzYyOTIgNTIuMjA2NzQgLTEwLjM2MDE2IDUyLjIwODM0IC0xMC4zNTg1NSA1Mi4yMDk3OCAtMTAuMzU1NTUgNTIuMjEwNzcgLTEwLjM1MTI2IDUyLjIxMjU0IC0xMC4zNDg3OCA1Mi4yMTQ5IC0xMC4zNDgwOCA1Mi4yMTcyNCAtMTAuMzQ3ODEgNTIuMjE3NjcgLTEwLjM1MDQ3IDUyLjIxNzc1IC0xMC4zNTQwOSA1Mi4yMTc4NiAtMTAuMzU5NjcgNTIuMjE3OTkgLTEwLjM2Mzc0IDUyLjIxOTI1IC0xMC4zNjQxNyA1Mi4yMjI2MiAtMTAuMzYzNjcgNTIuMjI1NjEgLTEwLjM2MTkxIDUyLjIyNzgxIC0xMC4zNTk4MyA1Mi4yMzAyMyAtMTAuMzU2MTMgNTIuMjMzNDQgLTEwLjM1NDEgNTIuMjM3NTggLTEwLjM1MTk3IDUyLjIzODQ3IC0xMC4zNDY2MSA1Mi4yMzcyMyAtMTAuMzQ0ODMgNTIuMjM0NjMgLTEwLjM0MzgzIDUyLjIzNDkxIC0xMC4zNDAyOSA1Mi4yMzQ2NSAtMTAuMzM2NjMgNTIuMjM4MzQgLTEwLjMzNTYxIDUyLjIzOTc3IC0xMC4zMzI1OSA1Mi4yMzk5OCAtMTAuMzI3NjkgNTIuMjM3ODMgLTEwLjMyNTcyIDUyLjIzNzM0IC0xMC4zMjAzNiA1Mi4yMzg4MSAtMTAuMzEzNDYgNTIuMjQxMzMgLTEwLjMwODQ0IDUyLjI0MjgyIC0xMC4zMDYwNCA1Mi4yNDE0MiAtMTAuMzAyNzQgNTIuMjM5NiAtMTAuMzAwMDkgNTIuMjQwODEgLTEwLjI5NzY2IDUyLjI0MjcxIC0xMC4yOTU4IDUyLjI0NTggLTEwLjI5Mjk5IDUyLjI0OTM1IC0xMC4yODc3MyA1Mi4yNTI0MyAtMTAuMjgzODYgNTIuMjU2MjggLTEwLjI4NDA4IDUyLjI2MDAxIC0xMC4yODEzOSA1Mi4yNTk3MyAtMTAuMjc4MDMgNTIuMjYwMzIgLTEwLjI3Mjg5IDUyLjI2MDI1IC0xMC4yNjc5MiA1Mi4yNjA0MyAtMTAuMjYyMSA1Mi4yNjIyNiAtMTAuMjU3NjYgNTIuMjY1NTQgLTEwLjI1MzU1IDUyLjI2OTI1IC0xMC4yNDk4IDUyLjI3MjQxIC0xMC4yNDM3IDUyLjI3NDUyIC0xMC4yMzY5MyA1Mi4yNzY4MSAtMTAuMjI4OTggNTIuMjc3MjEgLTEwLjIyMjYgNTIuMjc4MjIgLTEwLjIxNTc0IDUyLjI3Nzg4IC0xMC4yMTE5IDUyLjI3NjE1IC0xMC4yMDgxIDUyLjI3NDQ5IC0xMC4yMDQ0NCA1Mi4yNzM5MiAtMTAuMjAxMTYgNTIuMjc0OTQgLTEwLjE5NzYyIDUyLjI3NzAzIC0xMC4xOTY4NSA1Mi4yNzk2NyAtMTAuMTk3NCA1Mi4yODIxNSAtMTAuMTk4NjcgNTIuMjg0NDMgLTEwLjE5ODk5IDUyLjI4NTY5IC0xMC4xOTU5NCA1Mi4yODY5NSAtMTAuMTg4MDkgNTIuMjg4IC0xMC4xNzk0MyA1Mi4yODk1MSAtMTAuMTcxOTIgNTIuMjkyMTUgLTEwLjE2ODg2IDUyLjI5MTg5IC0xMC4xNTkxOCA1Mi4yOTA0MSAtMTAuMTU5MTggNTIuMjkwOTQgLTEwLjE1NDkyIDUyLjI5MTM3IC0xMC4xNTA1IDUyLjI5MDYzIC0xMC4xNDU4NCA1Mi4yODkyNSAtMTAuMTQzNDQgNTIuMjg2ODUgLTEwLjE0NDYgNTIuMjg0MDcgLTEwLjE0NDc3IDUyLjI4MDU1IC0xMC4xNDQ5NSA1Mi4yNzc3MiAtMTAuMTQ0NjYgNTIuMjc1NTIgLTEwLjE0NTU2IDUyLjI2NTM5IC0xMC4xNTIzMiA1Mi4yNjYwNiAtMTAuMTQ3MzYgNTIuMjYzIC0xMC4xNDQwMiA1Mi4yNjE5NCAtMTAuMTM2MjggNTIuMjU5OTUgLTEwLjE0MDUzIDUyLjI1ODU4IC0xMC4xNDE0NSA1Mi4yNTY4NyAtMTAuMTQzMzUgNTIuMjU0NzUgLTEwLjE0NTYxIDUyLjI1MjY5IC0xMC4xNDk1NSA1Mi4yNTA0OCAtMTAuMTQ5NTMgNTIuMjQ4NDEgLTEwLjE1IDUyLjI0NzIgLTEwLjE1MTQxIDUyLjI0NDUzIC0xMC4xNTQ3NyA1Mi4yNDEgLTEwLjE2MDk1IDUyLjIzODY4IC0xMC4xNjY5MyA1Mi4yMzYwMiAtMTAuMTY5MjMgNTIuMjM0MDIgLTEwLjE2OTg3IDUyLjIzMTQ3IC0xMC4xNzA2OCA1Mi4yMzA1OSAtMTAuMTY3OCA1Mi4yMzI0OSAtMTAuMTY0NzQgNTIuMjM0MzkgLTEwLjE2Mjg4IDUyLjIzNjQgLTEwLjE1OTU1IDUyLjIzODE3IC0xMC4xNTQ2NiA1Mi4yMzkzNiAtMTAuMTQ3NjggNTIuMjQwMDkgLTEwLjE0MTk4IDUyLjIzOTQ0IC0xMC4xMzYxMyA1Mi4yMzg3OSAtMTAuMTMyNTQgNTIuMjM3MjEgLTEwLjEzMDQxIDUyLjI0MTI1IC0xMC4xMjM1OCA1Mi4yNDEzOSAtMTAuMTE5NDEgNTIuMjQzMDkgLTEwLjEyMzY3IDUyLjI0MzYxIC0xMC4xMjc2NyA1Mi4yNDM5OSAtMTAuMTMzMzMgNTIuMjQ2NjkgLTEwLjEyOTUyIDUyLjI0NTU0IC0xMC4xMjc3OCA1Mi4yNDQ4NyAtMTAuMTI0NDggNTIuMjQ0MzEgLTEwLjExODY2IDUyLjI0NDA3IC0xMC4xMTExIDUyLjI0NDg2IC0xMC4xMDM0NSA1Mi4yNDQ0MiAtMTAuMDk4MjUgNTIuMjQ1MDYgLTEwLjA5MjUyIDUyLjI0ODg3IC0xMC4wNzY3OCA1Mi4yNTIyNSAtMTAuMDY3NyA1Mi4yNTY4MSAtMTAuMDYwMDcgNTIuMjU5OTQgLTEwLjA1NTMgNTIuMjYzMTUgLTEwLjA0OTY1IDUyLjI2NjQyIC0xMC4wNDQzMSA1Mi4yNzA1OCAtMTAuMDM5NDUgNTIuMjc0MTEgLTEwLjAzNDMxIDUyLjI3NzU4IC0xMC4wMzAwNiA1Mi4yODIwOSAtMTAuMDI2NjIgNTIuMjg1ODQgLTEwLjAyNDY5IDUyLjI4OTk5IC0xMC4wMjM0NCA1Mi4yOTQ0NSAtMTAuMDI0MzUgNTIuMjk3MDYgLTEwLjAyNjM4IDUyLjI5OTk3IC0xMC4wMjkyMyA1Mi4zMDI5IC0xMC4wMzE5NCA1Mi4zMDMzMyAtMTAuMDM0NzMgNTIuMzAyMzYgLTEwLjAzNzY5IDUyLjMwMjcyIC0xMC4wNDAxNyA1Mi4zMDQ3NiAtMTAuMDQxMTkgNTIuMzA2MzIgLTEwLjA0Mzc3IDUyLjMwNzc2IC0xMC4wNDc4MyA1Mi4zMDkxMiAtMTAuMDQ2OSA1Mi4zMDg4NCAtMTAuMDM5NzcgNTIuMzA4NDkgLTEwLjAzNDc0IDUyLjMwOTgzIC0xMC4wMzE3IDUyLjMwOTYyIC0xMC4wMjg1IDUyLjMxMTE0IC0xMC4wMjU2NSA1Mi4zMTAyMyAtMTAuMDIzMDYgNTIuMzA4NTYgLTEwLjAyMzE2IDUyLjMwNzM0IC0xMC4wMjQ1NyA1Mi4zMDU1IC0xMC4wMjQ2NCA1Mi4zMDQ1MyAtMTAuMDIxNTkgNTIuMzA0MyAtMTAuMDE2MTMgNTIuMzA2MDIgLTEwLjAwODIgNTIuMzA4MTcgLTEwLjAwNjY5IDUyLjMwOTkzIC0xMC4wMDc4MSA1Mi4zMTIzOSAtMTAuMDA2OTQgNTIuMzEzMjIgLTEwLjAwNDQyIDUyLjMxNDc3IC0xMC4wMDM1MyA1Mi4zMTQ3NyAtMTAuMDAzNTMgNTIuMzEyODMgLTEwLjAwMTE3IDUyLjMxMTIyIC05Ljk5ODE0IDUyLjMxMDQ1IC05Ljk5NDk3IDUyLjMwOTE0IC05Ljk5NDA5IDUyLjMwNzQ1IC05Ljk5Nzk3IDUyLjMwNTggLTEwLjAwMTM5IDUyLjMwMjY2IC0xMC4wMDM5MSA1Mi4yOTc4IC0xMC4wMDQ3MyA1Mi4yOTIxMSAtMTAuMDA1NTIgNTIuMjg3NzcgLTEwLjAwNTUzIDUyLjI4MzUyIC0xMC4wMDMzMSA1Mi4yODI2MSAtMTAuMDA0MzMgNTIuMjgxNzIgLTEwLjAwOTg2IDUyLjI4MDg4IC0xMC4wMTI0IDUyLjI3OTE3IC0xMC4wMTMwOSA1Mi4yNzY1NCAtMTAuMDEzNjIgNTIuMjczMjYgLTEwLjAxMzA5IDUyLjI2Nzk4IC0xMC4wMDk5MSA1Mi4yNjUxMyAtMTAuMDA3MjMgNTIuMjYxODYgLTEwLjAwMzEgNTIuMjU5MDMgLTkuOTk5MDcgNTIuMjU1MjggLTkuOTkxNTQgNTIuMjUyNTkgLTkuOTg3OTggNTIuMjQ5NzUgLTkuOTg2NjYgNTIuMjQ4MjggLTkuOTgxNyA1Mi4yNDY3OCAtOS45NzU5OSA1Mi4yNDQ5OCAtOS45Njk0NiA1Mi4yNDE1MSAtOS45NjQxMSA1Mi4yMzg0MiAtOS45NjI0MyA1Mi4yMzU5MyAtOS45NTg3NyA1Mi4yMzQ2OSAtOS45NTIwNSA1Mi4yMzQxMSAtOS45NDc1OCA1Mi4yMzI1IC05Ljk0NDU2IDUyLjIzMjMgLTkuOTM3NDUgNTIuMjMyNTIgLTkuOTI3NDQgNTIuMjMzMzMgLTkuOTE5MiA1Mi4yMzM2MSAtOS45MTA3IDUyLjIzMTg3IC05LjkwODA5IDUyLjIzMDY3IC05LjkwNDU0IDUyLjIyOTY5IC05Ljg5OTI0IDUyLjIyOTc5IC05Ljg5NTUxIDUyLjIyOTQxIC05Ljg5MTk4IDUyLjIyODg3IC05Ljg4ODEyIDUyLjIyOTg5IC05Ljg4MzM2IDUyLjIzMTYgLTkuODc1MzEgNTIuMjMzNjggLTkuODY2MjcgNTIuMjM2MzIgLTkuODU1NjggNTIuMjM4NDEgLTkuODQ4NzQgNTIuMjQwNTggLTkuODQzMzIgNTIuMjQ0MTIgLTkuODM4MDIgNTIuMjQ3NTIgLTkuODM0NDkgNTIuMjUwNiAtOS44MzI3MSA1Mi4yNTU0MiAtOS44MzAwNiA1Mi4yNTcyOSAtOS44MjcyOSA1Mi4yNTc2NSAtOS44MjI0IDUyLjI1OTA4IC05LjgxNTc4IDUyLjI1OTk4IC05LjgxMTE1IDUyLjI1OTU4IC05LjgwNzkyIDUyLjI1ODQgLTkuODA2MzMgNTIuMjU3MDggLTkuODA2ODEgNTIuMjU2NjkgLTkuODA5NDQgNTIuMjU2ODYgLTkuODEzMzggNTIuMjU0NjQgLTkuODE5NTUgNTIuMjUyMDggLTkuODI1MzQgNTIuMjUwODUgLTkuODI4MjUgNTIuMjQ5MjYgLTkuODI5NzMgNTIuMjQ3OCAtOS44MjgyNSA1Mi4yNDcyNCAtOS44MjQ4MiA1Mi4yNDY2MSAtOS44MTk1OSA1Mi4yNDU0IC05LjgxODYxIDUyLjI0NDE4IC05LjgxODgxIDUyLjI0MzIzIC05LjgxNjgxIDUyLjI0NDQ2IC05LjgxMzkxIDUyLjI0NDUzIC05LjgwMjA2IDUyLjI0NDQ3IC05Ljc5NTQ1IDUyLjI0NjU4IC05Ljc5MTk2IDUyLjI0ODI1IC05Ljc4ODA4IDUyLjI0OTkyIC05Ljc4MzAyIDUyLjI1MSAtOS43NzYxNyA1Mi4yNTE5NiAtOS43NzA1MSA1Mi4yNDkzNyAtOS43NjQ1OCA1Mi4yNDk1MyAtOS43NjI1IDUyLjI0ODM5IC05Ljc1OTI4IDUyLjI0NzM5IC05Ljc1NTMyIDUyLjI0NyAtOS43NTA3NSA1Mi4yNTA0OSAtOS43NTMzOCA1Mi4yNTA3IC05Ljc0OTIyIDUyLjI1MTY3IC05Ljc0NjI2IDUyLjI0OTU5IC05Ljc0NDQ5IDUyLjI0ODY0IC05Ljc0MzU2IDUyLjI0ODUgLTkuNzQwNTMgNTIuMjQ5NzkgLTkuNzQwNDggNTIuMjUxNTkgLTkuNzQxMTQgNTIuMjUyOTQgLTkuNzQyNzYgNTIuMjU0MzQgLTkuNzQyNTkgNTIuMjU2MiAtOS43NDExNSA1Mi4yNTYzNiAtOS43Mzg5MyA1Mi4yNTU5MyAtOS43MzQ3OSA1Mi4yNTYyMyAtOS43Mjk1OSA1Mi4yNTYxOSAtOS43MjUyMyA1Mi4yNTY1MyAtOS43MjA2NCA1Mi4yNTc4NCAtOS43MTY3IDUyLjI1NjQgLTkuNzEyNSA1Mi4yNTkwOSAtOS43MTIyOSA1Mi4yNjIyNyAtOS43MTI5MSA1Mi4yNjA5OCAtOS43MTUzNyA1Mi4yNTk2OSAtOS43MTkwMiA1Mi4yNTgzNiAtOS43MjM0IDUyLjI1ODkyIC05LjcyOTM4IDUyLjI1OTE1IC05LjczNDgzIDUyLjI1OTQxIC05LjczODkzIDUyLjI2MTY5IC05Ljc0MDQ0IDUyLjI2NDU1IC05Ljc0MTc1IDUyLjI2NzY2IC05Ljc0MzI3IDUyLjI2ODkxIC05Ljc0NzU3IDUyLjI2OTM2IC05Ljc1MjQ3IDUyLjI3MDQ2IC05Ljc1ODY5IDUyLjI3MjM2IC05Ljc2Mjk4IDUyLjI3NDI0IC05Ljc2ODYyIDUyLjI3MzM1IC05Ljc3MzEgNTIuMjcyMDMgLTkuNzc3MTkgNTIuMjcxMTQgLTkuNzgyODggNTIuMjcwNzEgLTkuNzg3NDQgNTIuMjcxMTMgLTkuNzk0MTQgNTIuMjcxNDMgLTkuNzk5OTEgNTIuMjcyMDYgLTkuODA2MiA1Mi4yNzM0NiAtOS44MTIwMyA1Mi4yNzQ4OSAtOS44MTM5NyA1Mi4yNzYyIC05LjgxNjE5IDUyLjI3NjU3IC05LjgxOTcyIDUyLjI3Njc4IC05LjgyMzA2IDUyLjI3NzM1IC05LjgyNjY0IDUyLjI3NzgxIC05LjgzMDM0IDUyLjI3OTI5IC05LjgzMzc5IDUyLjI4MDQyIC05LjgzNzMyIDUyLjI4MDE2IC05LjgzOTM4IDUyLjI3OTY3IC05Ljg0MjI4IDUyLjI3ODQ3IC05Ljg0NDc1IDUyLjI3NjY0IC05Ljg0OTM0IDUyLjI3NjU2IC05Ljg1Mjk0IDUyLjI3MTYyIC05Ljg1MzU5IDUyLjI3MDYgLTkuODUxMjggNTIuMjY5MjQgLTkuODU3MDIgNTIuMjc1NzcgLTkuODU3MjggNTIuMjc0NTkgLTkuODYxODUgNTIuMjczOTMgLTkuODY0NTggNTIuMjc1OTIgLTkuODY2MTcgNTIuMjc4MDQgLTkuODY2MTYgNTIuMjc5ODIgLTkuODY0NTYgNTIuMjgxOTIgLTkuODY0OTkgNTIuMjg0MTYgLTkuODY1ODggNTIuMjg1NzkgLTkuODY2MjEgNTIuMjg3OTcgLTkuODY3ODUgNTIuMjg4NTEgLTkuODcxNzIgNTIuMjkwMzIgLTkuODcyMDggNTIuMjkyNTcgLTkuODcxNjMgNTIuMjkzMzcgLTkuODczMjkgNTIuMjkzNzEgLTkuODc2MDcgNTIuMjk2MSAtOS44NzczIDUyLjI5NzMxIC05Ljg3OTY1IDUyLjMwMDYgLTkuODc3NjEgNTIuMzAyNDIgLTkuODc1NTYgNTIuMzAyMyAtOS44NzM0NCA1Mi4zMDI1MiAtOS44NzA2MiA1Mi4zMDIyNCAtOS44NjY5NiA1Mi4zMDA2MiAtOS44NjY0OCA1Mi4yOTg3OSAtOS44NjYyNyA1Mi4yOTc3NyAtOS44NjUxNiA1Mi4yOTcxNSAtOS44NjM1MyA1Mi4yOTY2MiAtOS44NjA4NiA1Mi4yOTU3MSAtOS44NTY5MyA1Mi4yOTQgLTkuODU1MjMgNTIuMjkxMDkgLTkuODU3MDYgNTIuMjg5MSAtOS44NTc4NSA1Mi4yODc3MiAtOS44NjEzNCA1Mi4yODYwMyAtOS44NjQzMSA1Mi4yODQzNSAtOS44NjMzNiA1Mi4yODA4IC05Ljg2MTQ0IDUyLjI4MzMzIC05Ljg1NjA5IDUyLjI4NDU0IC05Ljg1MjI3IDUyLjI4NjEzIC05Ljg1MDc5IDUyLjI4ODMxIC05Ljg0ODgyIDUyLjI4OTU3IC05Ljg0NjgyIDUyLjI5MDIzIC05Ljg0MjkgNTIuMjkwNzQgLTkuODM4NjQgNTIuMjkxNTggLTkuODMzNTQgNTIuMjkxNTIgLTkuODI4MjcgNTIuMjkyMjggLTkuODIzMDEgNTIuMjk1NzMgLTkuODIyNjUgNTIuMzAwNDIgLTkuODIxNjQgNTIuMzAyNjYgLTkuODIzNTkgNTIuMzAxODkgLTkuODI3NjUgNTIuMzAxMTMgLTkuODI5MjkgNTIuMjk5OTYgLTkuODMxMzIgNTIuMjk5NzcgLTkuODM1MDQgNTIuMzAwNjQgLTkuODM5NDIgNTIuMjk5NjQgLTkuODQyODMgNTIuMjk4NDMgLTkuODQ3ODQgNTIuMjk3MzMgLTkuODUxMzkgNTIuMjk3NjggLTkuODU2NTcgNTIuMzAwNzEgLTkuODU3OTIgNTIuMzAzNjEgLTkuODYyMjcgNTIuMzA0NDIgLTkuODU1MjEgNTIuMzA0NzQgLTkuODUyMjcgNTIuMzA2ODYgLTkuODQ4NjMgNTIuMzA4NTIgLTkuODQ3MzIgNTIuMzA4NDggLTkuODQ1NSA1Mi4zMDc3MyAtOS44NDMxMSA1Mi4zMDcwNyAtOS44NDEwMiA1Mi4zMDYzNCAtOS44Mzg0NiA1Mi4zMDYwMiAtOS44MzUzOCA1Mi4zMDcxNyAtOS44MzIzMSA1Mi4zMDk2MyAtOS44MzAyMyA1Mi4zMTIxMiAtOS44MzEzNSA1Mi4zMTM0IC05LjgzMDM5IDUyLjMxMzYxIC05LjgyNTE4IDUyLjMxMjM5IC05LjgyNDE4IDUyLjMxMDkgLTkuODIxOTMgNTIuMzA5MzcgLTkuODIwMjcgNTIuMzA5NzggLTkuODE3MzMgNTIuMzExMTUgLTkuODE2MTIgNTIuMzEzNzYgLTkuODE3MDggNTIuMzE1NjcgLTkuODE3NDYgNTIuMzE3NyAtOS44MTYyMSA1Mi4zMTkwNiAtOS44MTQwOSA1Mi4zMjA1NiAtOS44MTYxOSA1Mi4zMjE3MSAtOS44MTkyOCA1Mi4zMjM2OSAtOS44MjIzOCA1Mi4zMjQ1NiAtOS44MjQyMSA1Mi4zMjM3MiAtOS44MjY5IDUyLjMyMjMgLTkuODI5NzggNTIuMzIxMDIgLTkuODMyMDcgNTIuMzE5OSAtOS44MzM1IDUyLjMxODQ3IC05LjgzNTE4IDUyLjMxNjA5IC05LjgzNjM1IDUyLjMxMzU5IC05LjgzNjQ1IDUyLjMxMDgzIC05LjgzNjM1IDUyLjMwOTEzIC05LjgzOTMyIDUyLjMxMTE5IC05Ljg0MDE5IDUyLjMxMzk0IC05Ljg0MTQ5IDUyLjMxNzA5IC05Ljg0MDE2IDUyLjMyMDEzIC05LjgzNzc3IDUyLjMyMzU5IC05LjgzNDcgNTIuMzI3MzUgLTkuODMxMjQgNTIuMzMyMDcgLTkuODI3MzcgNTIuMzM3MTggLTkuODI0NDcgNTIuMzQxNTkgLTkuODI0NjEgNTIuMzQ3MSAtOS44MjYxNiA1Mi4zNTMwMiAtOS44MjcyIDUyLjM1ODk0IC05LjgyODIzIDUyLjM2Mzc4IC05LjgyNzU1IDUyLjM2OCAtOS44MjUzOSA1Mi4zNzE2NyAtOS44MjQ0NiA1Mi4zNzQ5IC05LjgyNDUgNTIuMzc4MjQgLTkuODI0MjcgNTIuMzgyNjggLTkuODI1MTYgNTIuMzg3MjYgLTkuODI2OTggNTIuMzg5NyAtOS44MzEyNCA1Mi4zOTA4NyAtOS44MzUyNSA1Mi4zOTEzOCAtOS44NDE5NyA1Mi4zOTIzNSAtOS44NDYyMyA1Mi4zOTI3NyAtOS44NTE3NCA1Mi4zOTI0OSAtOS44NTc3MiA1Mi4zOTE0OSAtOS44NjI0OSA1Mi4zOTI0MyAtOS44NjcxOSA1Mi4zOTM5NCAtOS44NzUxOSA1Mi4zOTQyOCAtOS44ODY1NSA1Mi4zOTQ5MSAtOS44OTY0OCA1Mi4zOTU1NCAtOS45MDUxOSA1Mi4zOTcxNSAtOS45MDcwMyA1Mi4zOTg1IC05LjkxMDAyIDUyLjQwMDE5IC05LjkxMzA4IDUyLjQwMTQyIC05LjkxODc1IDUyLjQwMjIgLTkuOTIzMTIgNTIuNDAyODQgLTkuOTI4MDggNTIuNDA1MSAtOS45MzIzMSA1Mi40MDc2OCAtOS45MzU4NCA1Mi40MTA4OSAtOS45Mzc0IDUyLjQxMzYxIC05LjkzNjc1IDUyLjQxNTE2IC05LjkzNDY1IDUyLjQxNjQgLTkuOTM1MzYgNTIuNDE4MzIgLTkuOTM2NjQgNTIuNDIwOTUgLTkuOTM0OTIgNTIuNDIyNTcgLTkuOTMyOTkgNTIuNDIzMzIgLTkuOTI5MjMgNTIuNDI1NTkgLTkuOTI2MDYgNTIuNDI2NTIgLTkuOTIyMzMgNTIuNDI3OTUgLTkuOTE4MSA1Mi40Mjg4NiAtOS45MTQ2NiA1Mi40MzAyNCAtOS45MDcyNSA1Mi40MzE4IC05LjkwMTM4IDUyLjQzMTYyIC05Ljg5Mzk1IDUyLjQzMDQ2IC05Ljg4NzM4IDUyLjQyOTMxIC05Ljg4MDY2IDUyLjQyODkgLTkuODc1MTUgNTIuNDI5ODggLTkuODY5NDcgNTIuNDI4NTMgLTkuODY2NjMgNTIuNDI3NjIgLTkuODY0MDMgNTIuNDI3NSAtOS44NjA2OSA1Mi40Mjc3NSAtOS44NTUwMSA1Mi40MjgyNCAtOS44NDk2OSA1Mi40MjkxNiAtOS44NDM1NCA1Mi40MzA1OCAtOS44Mzk0NSA1Mi40MzE5IC05LjgzNTM1IDUyLjQzMjkgLTkuODI2OTQgNTIuNDMyNzggLTkuODE5OTggNTIuNDM0OTMgLTkuODE2MDQgNTIuNDM2NiAtOS44MDM1NSA1Mi40Mzk5MyAtOS44MDA5IDUyLjQzOTMyIC05Ljc5ODA3IDUyLjQ0MDM0IC05Ljc5NDM1IDUyLjQ0MjYyIC05Ljc5MDg4IDUyLjQ0NDIyIC05Ljc4NjgzIDUyLjQ0NTgyIC05Ljc4MDIxIDUyLjQ0NTM4IC05Ljc3NjIgNTIuNDQ4NDYgLTkuNzcxOTggNTIuNDQ5NDEgLTkuNzY2NzQgNTIuNDQ5MjggLTkuNzU5NzggNTIuNDUwODEgLTkuNzU2NjIgNTIuNDUyMDYgLTkuNzUyMTkgNTIuNDU1NjMgLTkuNzUwMTggNTIuNDU1MTIgLTkuNzQ3MDYgNTIuNDU1NjIgLTkuNzQ1MiA1Mi40NTc5NiAtOS43NDM1NiA1Mi40NTk4OSAtOS43NDEyMyA1Mi40NjE5MSAtOS43NDAxMiA1Mi40NjMxMyAtOS43Mzg1NSA1Mi40NjQ5NSAtOS43MzUxNCA1Mi40NjcyOCAtOS43MzQ4NSA1Mi40NzA3IC05LjcyNjAyIDUyLjQ3MDQ2IC05LjcyMzEgNTIuNDczMzIgLTkuNzIzMDcgNTIuNDc0NDYgLTkuNzE3NTUgNTIuNDc1NDUgLTkuNzExNzIgNTIuNDc2OTkgLTkuNzA3MDQgNTIuNDc5MTMgLTkuNzA0MyA1Mi40ODAyOCAtOS43MDEzNSA1Mi40ODAzMyAtOS42OTgxOSA1Mi40ODAyMSAtOS42OTQ4NSA1Mi40NzkzMiAtOS42OTE4MSA1Mi40Nzg5MyAtOS42ODk2MSA1Mi40Nzg5MyAtOS42ODk2MSA1Mi40ODA3OCAtOS42NjQ2MyA1Mi40ODA3OCAtOS42NjQ2MyA1Mi40ODA5NSAtOS42NTk4MiA1Mi40ODEzNCAtOS42NTQ0NyA1Mi40ODA1NiAtOS42NTAwOSA1Mi40NzkxNCAtOS42NTMxMyA1Mi40NzgxIC05LjY1MDk2IDUyLjQ3Njk3IC05LjY0ODc4IDUyLjQ3NTc4IC05LjY0NjEzIDUyLjQ3NTUyIC05LjY0MDk1IDUyLjQ3NjA3IC05LjYzODQ5IDUyLjQ3NjgxIC05LjYzNTkzIDUyLjQ3NjcxIC05LjYzMzQ4IDUyLjQ3NjA2IC05LjYzMTA5IDUyLjQ3NDUyIC05LjYyOTQzIDUyLjQ3MDYgLTkuNjI3NDUgNTIuNDY2ODggLTkuNjI2ODggNTIuNDY0NjkgLTkuNjI2NDUgNTIuNDYzMjIgLTkuNjI1MTEgNTIuNDYyMTQgLTkuNjIzNTQgNTIuNDYxNjcgLTkuNjIxMDMgNTIuNDYwNjYgLTkuNjE5NzggNTIuNDU4NzkgLTkuNjE4ODEgNTIuNDU2OTUgLTkuNjIwMSA1Mi40NTU5NCAtOS42MjEyNiA1Mi40NTQzIC05LjYyMTEgNTIuNDUxNjkgLTkuNjIwMTMgNTIuNDQ5NDYgLTkuNjIwNDUgNTIuNDQ2NTMgLTkuNjIwMTcgNTIuNDQ0MzggLTkuNjE5MzEgNTIuNDQzMzggLTkuNjE3NzUgNTIuNDQyNTggLTkuNjE1MDIgNTIuNDQxNDggLTkuNjExMDQgNTIuNDQwMTIgLTkuNjA3IDUyLjQzODc5IC05LjYwMzczIDUyLjQzODc3IC05LjYwMTYxIDUyLjQzOTkzIC05LjYwMjE1IDUyLjQ0MTcgLTkuNjA0MjkgNTIuNDQyNjcgLTkuNjA4NzEgNTIuNDQ0ODkgLTkuNjE0ODcgNTIuNDQ2NjIgLTkuNjE2NDIgNTIuNDQ5NDYgLTkuNjE2NjcgNTIuNDUzNTMgLTkuNjE3NzcgNTIuNDU2OCAtOS42MTcwNSA1Mi40NTkzNCAtOS42MTUxNSA1Mi40NjIxMSAtOS42MTUwOSA1Mi40NjMxOSAtOS42MTgwMSA1Mi40NjU1MyAtOS42MjExOCA1Mi40Njg5OCAtOS42MjIwMSA1Mi40NzM2IC05LjYyNDQyIDUyLjQ3ODY3IC05LjYyNTU3IDUyLjQ4MDg3IC05LjYyNzA2IDUyLjQ4MTU0IC05LjYyOTMxIDUyLjQ4MTQ3IC05LjYzMjc3IDUyLjQ4MTE2IC05LjYzNTU2IDUyLjQ4MDA4IC05LjYzNzc4IDUyLjQ3OTMzIC05LjY0MTcxIDUyLjQ4MDc1IC05LjY0Mzc5IDUyLjQ4MjQyIC05LjY0MzUyIDUyLjQ4NDU4IC05LjY0MzA0IDUyLjQ4NjQ1IC05LjY0MTQ0IDUyLjQ4ODAxIC05LjY0MjgxIDUyLjQ4OTE4IC05LjY0NTc1IDUyLjQ4ODE3IC05LjY0ODEyIDUyLjQ4Nzg3IC05LjY1MDkyIDUyLjQ4NzM2IC05LjY1NDE1IDUyLjQ4NzI1IC05LjY1ODA0IDUyLjQ4NjMyIC05LjY1OTUzIDUyLjQ4NDk3IC05LjY2MTUzIDUyLjQ4NDI4IC05LjY2MzM1IDUyLjQ4NDk0IC05LjY2NTc1IDUyLjQ4NTE0IC05LjY2OTI1IDUyLjQ4NDgxIC05LjY3MjM3IDUyLjQ4MzYxIC05LjY3NjIxIDUyLjQ4MzYxIC05LjY3NjIxIDUyLjQ4Mzg2IC05LjY4MDMzIDUyLjQ4NjM3IC05LjY3NzY1IDUyLjQ4ODQzIC05LjY3NTggNTIuNDkwNzUgLTkuNjczMDggNTIuNDk1MDUgLTkuNjcxMjEgNTIuNTAwOTggLTkuNjcwNzMgNTIuNTA2NDQgLTkuNjcxNjUgNTIuNTA4OSAtOS42NzA3OSA1Mi41MTAwMyAtOS42NjkzNCA1Mi41MTI0MyAtOS42NjU0MyA1Mi41MTQ0IC05LjY2NzQ5IDUyLjUxNzQ0IC05LjY2NzQ4IDUyLjUxNzI0IC05LjY2NTMyIDUyLjUyMDgyIC05LjY2Nzk5IDUyLjUyMTk0IC05LjY3Mjc1IDUyLjUyNDg1IC05LjY3MzMyIDUyLjUyNjA1IC05LjY2NTg2IDUyLjUyODA3IC05LjY2NDU5IDUyLjUyOTk2IC05LjY2Nzg0IDUyLjUzMDgxIC05LjY2MjU2IDUyLjUzMjUgLTkuNjYyMTUgNTIuNTMzODggLTkuNjYyMTEgNTIuNTM1MiAtOS42NjE5MiA1Mi41MzcwNSAtOS42NjE2OCA1Mi41Mzg5OCAtOS42NjE3NyA1Mi41NDEzNCAtOS42NjIyMyA1Mi41NDM1MyAtOS42NjUwOCA1Mi41NDU0MSAtOS42NjcxMSA1Mi41NDc0OSAtOS42NjY0NiA1Mi41NDkzMyAtOS42NjM5NSA1Mi41NTA4MyAtOS42NjEwOCA1Mi41NTE4IC05LjY1Nzk0IDUyLjU1Mjc4IC05LjY1NTg3IDUyLjU1NDA2IC05LjY1MzQgNTIuNTU1OTIgLTkuNjUxOTYgNTIuNTU3NTYgLTkuNjUyMjggNTIuNTU5NTcgLTkuNjUyNjcgNTIuNTYyMjYgLTkuNjUyNDUgNTIuNTYyODMgLTkuNjQ5NTMgNTIuNTY0NSAtOS42NDMyMSA1Mi41NjU4NSAtOS42NDAwMSA1Mi41Njc5OCAtOS42Mzg0NSA1Mi41Njk4NyAtOS42MzY3IDUyLjU3MDg2IC05LjYzNDM0IDUyLjU3MDU4IC05LjYzMDY0IDUyLjU3MDg4IC05LjYyNjYyIDUyLjU3MjA0IC05LjYyMjE1IDUyLjU3MzI2IC05LjYxODAyIDUyLjU3NTI5IC05LjYxNDE4IDUyLjU3NzY3IC05LjYxMTkyIDUyLjU3OTA4IC05LjYwOTAzIDUyLjU3OTU1IC05LjYwMjYyIDUyLjU3ODE0IC05LjU5Nzk1IDUyLjU3NjU2IC05LjU5MTkgNTIuNTc0NjkgLTkuNTg1OTMgNTIuNTczOTIgLTkuNTgxMjUgNTIuNTczODMgLTkuNTc0ODggNTIuNTcyODMgLTkuNTY3MTIgNTIuNTcxODUgLTkuNTYwMjcgNTIuNTcwOSAtOS41NTMxMyA1Mi41Njg5MiAtOS41NDczMSA1Mi41NjYyNyAtOS41NDMxNiA1Mi41NjQyNyAtOS41Mzc3OCA1Mi41NjQxNiAtOS41MzAzNSA1Mi41NjUxMyAtOS41MjQ2NCA1Mi41NjY4MyAtOS41MTc3MiA1Mi41Njg3NyAtOS41MTAwOCA1Mi41NzA1MyAtOS41MDM2MiA1Mi41NzA1OSAtOS40OTc1OCA1Mi41Njg3MiAtOS40OTE2MiA1Mi41Njk1NSAtOS40ODkwNiA1Mi41NzE0OSAtOS40ODg5OCA1Mi41NzM2NyAtOS40OTMxOCA1Mi41NzU3OCAtOS40OTg0NCA1Mi41Nzg1NSAtOS40OTcxNiA1Mi41NzczNSAtOS40OTQ1MSA1Mi41Nzg4IC05LjQ4OTc5IDUyLjU3ODg0IC05LjQ4Mjg1IDUyLjU3NzY1IC05LjQ3ODg0IDUyLjU3Njg3IC05LjQ3Njg3IDUyLjU3NjAxIC05LjQ4MTI0IDUyLjU2ODU4IC05LjQ3NTU3IDUyLjU2OTAyIC05LjQ4MDk1IDUyLjU3MDgyIC05LjQ4NDE2IDUyLjU2ODM3IC05LjQ4NDkgNTIuNTY0NjcgLTkuNDc4NzQgNTIuNTYxMTUgLTkuNDc1MTkgNTIuNTYwOTcgLTkuNDY5ODYgNTIuNTYxMjIgLTkuNDY1MjIgNTIuNTYwMDQgLTkuNDYzNjQgNTIuNTU4OTggLTkuNDY0MzQgNTIuNTU3NTIgLTkuNDY4IDUyLjU1NDIgLTkuNDY5MTcgNTIuNTUyNDIgLTkuNDY4MzYgNTIuNTQ5NTUgLTkuNDY5NzggNTIuNTQ4MDUgLTkuNDY2MzIgNTIuNTQ4NTggLTkuNDY0MTUgNTIuNTUxMjIgLTkuNDY1ODYgNTIuNTUyMTUgLTkuNDYzMTcgNTIuNTU0NTMgLTkuNDY0NjkgNTIuNTU2ODkgLTkuNDYzOTMgNTIuNTU3ODEgLTkuNDYxMzkgNTIuNTU4MjggLTkuNDU4NjIgNTIuNTYwOSAtOS40NTgwNiA1Mi41NjMwMiAtOS40NjA3NCA1Mi41NjQ2OCAtOS40NjU3NSA1Mi41NjUyNyAtOS40NjkxOCA1Mi41NjY5OSAtOS40NjY5NCA1Mi41NjY1NiAtOS40NjAyMSA1Mi41Njg0IC05LjQ1Mzc3IDUyLjU3MTk4IC05LjQ1MTQzIDUyLjU3NTQ0IC05LjQ0ODE2IDUyLjU3ODkgLTkuNDQ0NzUgNTIuNTgwOCAtOS40NDAyNyA1Mi41ODA2MiAtOS40MzQ5NSA1Mi41ODIyOCAtOS40Mjg2MSA1Mi41ODMwOSAtOS40MjEyMSA1Mi41ODE2MyAtOS40MTMyMiA1Mi41NzkwOSAtOS40MDIzIDUyLjU4IC05LjM5MDk3IDUyLjU4MjI3IC05LjM4MzU0IDUyLjU4NDgxIC05LjM3NjMyIDUyLjU4NjU1IC05LjM2ODc5IDUyLjU4ODQ3IC05LjM1OTkzIDUyLjU4ODM3IC05LjM1NDc3IDUyLjU4NTI0IC05LjM1MjA2IDUyLjU4MTk2IC05LjM1MTU5IDUyLjU3ODgzIC05LjM1Mjk1IDUyLjU3NzYgLTkuMzU1OSA1Mi41NzQ0NSAtOS4zNTYxOSA1Mi41NzI5OSAtOS4zNTQ3MSA1Mi41NzM1IC05LjM0NzU1IDUyLjU3NDI2IC05LjM0MDU5IDUyLjU3NDYyIC05LjMzMjk1IDUyLjU3NDU5IC05LjMyNDE4IDUyLjU3MzY5IC05LjMxNzM1IDUyLjU3NDI2IC05LjMwNjg5IDUyLjU3Mzc4IC05LjMwMDQ1IDUyLjU3Mjk5IC05LjI4OTU2IDUyLjU3MjgyIC05LjI4MDE1IDUyLjU3NTYgLTkuMjY4MTMgNTIuNTc4NDQgLTkuMjYwNSA1Mi41ODE0MSAtOS4yNTM2NiA1Mi41ODM0NiAtOS4yNDY2NCA1Mi41ODUzNCAtOS4yNDIzMSA1Mi41ODY3NiAtOS4yMzUxNyA1Mi41ODk4MyAtOS4yMzIxMSA1Mi41OTI4MyAtOS4yMjczOSA1Mi41OTM0OSAtOS4yMTkzNCA1Mi41OTQyMSAtOS4yMTI4MiA1Mi41OTI0IC05LjIwNTgzIDUyLjU5MzM5IC05LjE5OTUyIDUyLjU5NDQ0IC05LjE5NjIyIDUyLjU5NjQ3IC05LjE5NDk1IDUyLjU5NjUyIC05LjE5MDI3IDUyLjU5ODQ2IC05LjE4ODgxIDUyLjU5OTkxIC05LjE4NjY3IDUyLjU5NzMxIC05LjE4MTY0IDUyLjYwMDI4IC05LjE3OTc4IDUyLjYwMjg3IC05LjE3NzA5IDUyLjYwMzc3IC05LjE3MjExIDUyLjYwMzYxIC05LjE2MjU1IDUyLjYwNjA3IC05LjE0OTU1IDUyLjYwODQyIC05LjEzOTU2IDUyLjYxMDcyIC05LjEzMTY3IDUyLjYxMzc1IC05LjEyNTEzIDUyLjYxNjM4IC05LjEyMDMxIDUyLjYxODE1IC05LjExNTk1IDUyLjYxODI5IC05LjEwODU3IDUyLjYxODM4IC05LjEwMzI4IDUyLjYxNjc3IC05LjEwMTMzIDUyLjYxNjA4IC05LjA5Nzg5IDUyLjYxNjA4IC05LjA5Nzg5IDUyLjYxNTMyIC05LjA5NDA5IDUyLjYxNjg2IC05LjA4Nzg5IDUyLjYxNzQ3IC05LjA4NDM2IDUyLjYxNjg3IC05LjA4MDkzIDUyLjYxNzk3IC05LjA3NzA1IDUyLjYxMzQ5IC05LjA3MSA1Mi42MTM0OSAtOS4wNzEgNTIuNjExMjMgLTkuMDY3OTMgNTIuNjA4NyAtOS4wNjQ0NSA1Mi42MDY5NCAtOS4wNjA2NCA1Mi42MDU1MyAtOS4wNTk2MyA1Mi42MDM3MyAtOS4wNTkxNCA1Mi42MDE2NSAtOS4wNjUyNiA1Mi42MDAyNiAtOS4wNjgwMyA1Mi41OTkxOSAtOS4wNjYxNyA1Mi41OTgwMSAtOS4wNjMyMyA1Mi41OTg2OCAtOS4wNjAxNyA1Mi41OTk1OSAtOS4wNTc2MiA1Mi42MDE2NyAtOS4wNTY4IDUyLjYwMjc4IC05LjA1NTUgNTIuNjAyNTYgLTkuMDUzMzMgNTIuNjAwMDIgLTkuMDUxMzYgNTIuNTk4MjQgLTkuMDQ5MjEgNTIuNTk2NDYgLTkuMDQ2OTMgNTIuNTk4NDcgLTkuMDQ0NDIgNTIuNjAwMjggLTkuMDQyMTkgNTIuNjAxMjggLTkuMDQ3NjYgNTIuNjAzOTcgLTkuMDQ4NzYgNTIuNjA1NyAtOS4wNTE4IDUyLjYwNjE1IC05LjA1NDYgNTIuNjA3NjEgLTkuMDU0ODcgNTIuNjEwMTEgLTkuMDUwNjQgNTIuNjEzNjkgLTkuMDQ1MzkgNTIuNjE4MjggLTkuMDM4ODMgNTIuNjIyNzEgLTkuMDM0NjUgNTIuNjI3MDEgLTkuMDI5NjkgNTIuNjI0MyAtOS4wMjc2OCA1Mi42MjMzMyAtOS4wMjQxOCA1Mi42MjA1NyAtOS4wMjQyOCA1Mi42MTk0MyAtOS4wMjMzMSA1Mi42MjA0MSAtOS4wMjEwNyA1Mi42MjIwOSAtOS4wMjA3NyA1Mi42MjM5MyAtOS4wMjA4MSA1Mi42MjM4NiAtOS4wMTc3NyA1Mi42MjQ1OCAtOS4wMTM5NyA1Mi42MjY3OCAtOS4wMTU1OCA1Mi42MjkyMiAtOS4wMTg5MSA1Mi42MzAzOSAtOS4wMTc5MSA1Mi42MzEwNSAtOS4wMTUgNTIuNjMwMzIgLTkuMDEyMTUgNTIuNjI3NzUgLTkuMDEyMTMgNTIuNjI0OCAtOS4wMTIwNSA1Mi42MjM5NyAtOS4wMDkzMyA1Mi42MjE1NiAtOS4wMDY5MiA1Mi42MjA4MiAtOS4wMDI5OSA1Mi42MjAxNiAtOC45OTc3MyA1Mi42MTc3IC05LjAgNTIuNjE2MzkgLTguOTk5MDEgNTIuNjE2MDIgLTguOTk1IDUyLjYxNzU0IC04Ljk5Mjg3IDUyLjYxNTggLTguOTg4NzcgNTIuNjE3MTggLTguOTg3MzYgNTIuNjE5NjUgLTguOTkwMjIgNTIuNjIyMyAtOC45OTQ2NSA1Mi42MjUxIC04Ljk5Njk2IDUyLjYyNTQzIC04Ljk5MzI1IDUyLjYyNDIzIC04Ljk5MDc3IDUyLjYyNjA4IC04Ljk4NjQxIDUyLjYyNDk1IC04Ljk4MjczIDUyLjYyMjM0IC04Ljk4MTk1IDUyLjYyMTM0IC04Ljk3NzUzIDUyLjYxNjg5IC04Ljk3ODA4IDUyLjYxNjE4IC04Ljk3NTA3IDUyLjYxNDQ2IC04Ljk3MDMxIDUyLjYxNDQ2IC04Ljk3MDMxIDUyLjYxOTIxIC04Ljk3MjMgNTIuNjIxODkgLTguOTc0NzYgNTIuNjI1IC04Ljk3Mzk2IDUyLjYyNzEgLTguOTc2NzYgNTIuNjI4NjcgLTguOTc4MSA1Mi42MzA5OCAtOC45NzgwOCA1Mi42MzA5MiAtOC45ODMwNiA1Mi42MzQ4OSAtOC45ODI4NyA1Mi42MzY2NiAtOC45ODY2NyA1Mi42Mzg3IC04Ljk4OTE2IDUyLjYzODc4IC04Ljk4NTI0IDUyLjYzODc2IC04Ljk4MTQ1IDUyLjY0MjI1IC04Ljk4MDI4IDUyLjY0NDgyIC04Ljk3NzcyIDUyLjY0NDc0IC04Ljk3MzMyIDUyLjY0Njk0IC04Ljk3MDcgNTIuNjQ5MDQgLTguOTY4MzYgNTIuNjUwNDMgLTguOTYyNzEgNTIuNjUxNDUgLTguOTU4NSA1Mi42NTI1OCAtOC45NTgyNCA1Mi42NTM1NSAtOC45NjAyNCA1Mi42NTQ2NCAtOC45NTkwNyA1Mi42NTMzNiAtOC45NTM0IDUyLjY1NzI0IC04Ljk1NDcgNTIuNjU4NzQgLTguOTUyODUgNTIuNjYwODMgLTguOTQ5MjkgNTIuNjYyNTMgLTguOTQ0NDcgNTIuNjYxMyAtOC45NDA5MSA1Mi42NjE2MSAtOC45Mzc2MyA1Mi42NjA2NSAtOC45MzQxMyA1Mi42NTg0NyAtOC45Mjk1IDUyLjY1NjkxIC04LjkyNTQzIDUyLjY1OTMzIC04LjkxODE1IDUyLjY2MDg1IC04LjkxNDc5IDUyLjY2MDQgLTguOTA4OTYgNTIuNjYxODcgLTguODk5MzkgNTIuNjYzMzMgLTguODk0MiA1Mi42NjEyMSAtOC44OTAwNCA1Mi42NjE1IC04Ljg4NDMzIDUyLjY2Mjk0IC04Ljg4MzM5IDUyLjY2MTI5IC04Ljg3OTMgNTIuNjY0MTYgLTguODc4OTEgNTIuNjY3MTcgLTguODc2NTcgNTIuNjY5MDUgLTguODc0NjQgNTIuNjY4ODggLTguODY5IDUyLjY2OTY4IC04Ljg2NDAxIDUyLjY3MDE4IC04Ljg1Nzg5IDUyLjY2OTYgLTguODUyNjUgNTIuNjcwNjYgLTguODQ3ODIgNTIuNjcxNzYgLTguODQ1MTUgNTIuNjcxOTQgLTguODM5NzMgNTIuNjcxNDkgLTguODI5NjYgNTIuNjcyMjUgLTguODI3OTkgNTIuNjcxOTkgLTguODIyMTggNTIuNjcwNjYgLTguODE0NTIgNTIuNjY4OTQgLTguODA3MjUgNTIuNjY1NTcgLTguODA1MTQgNTIuNjYxOTYgLTguNzk5ODEgNTIuNjYyMDUgLTguNzkwMTQgNTIuNjY0NSAtOC43ODY2NCA1Mi42NjY2OCAtOC43NzU4MiA1Mi42NjkgLTguNzY3MTYgNTIuNjcwMjEgLTguNzU5OTUgNTIuNjcyMTcgLTguNzQ5ODUgNTIuNjc0NzIgLTguNzQwMzIgNTIuNjc0NTkgLTguNzMyNTggNTIuNjcyNjEgLTguNzI3NjggNTIuNjcxNzggLTguNzIyMDggNTIuNjcyMzQgLTguNzE0OTIgNTIuNjcxMTYgLTguNzA5MTEgNTIuNjY4NzcgLTguNzA2MTIgNTIuNjY0IC04LjcwMzAxIDUyLjY1OTAyIC04LjcwMDQ3IDUyLjY1NTY5IC04LjY5OTI3IDUyLjY1MjY4IC04LjY5MTc4IDUyLjY1MTc3IC04LjY4NTg3IDUyLjY1Mjc1IC04LjY3OTQgNTIuNjUzOTcgLTguNjcyMDUgNTIuNjU1MDkgLTguNjY2MDMgNTIuNjU0OTcgLTguNjYwODcgNTIuNjU1MDUgLTguNjUzOTMgNTIuNjU2MzQgLTguNjQ4MjQgNTIuNjU3NjQgLTguNjQwOTEgNTIuNjU5OTYgLTguNjQwNzEgNTIuNjU5OTEgLTguNjQ1NjkgNTIuNjU4NjMgLTguNjU4MTkgNTIuNjU3OTIgLTguNjY2MzggNTIuNjU2OTggLTguNjczNzggNTIuNjU1NDQgLTguNjc3NTkgNTIuNjU0NjMgLTguNjgxNTQgNTIuNjU1MzUgLTguNjg2MDQgNTIuNjU3ODggLTguNjg5NTMgNTIuNjYxMyAtOC42OTA4OCA1Mi42NjQ0NCAtOC42OTA2NyA1Mi42Njc4OSAtOC42OTE0MyA1Mi42NzEyIC04LjY5MjkyIDUyLjY3MjQ4IC04LjY5Mjk5IDUyLjY3NDQ3IC04LjY5NDg2IDUyLjY3NjE2IC04LjY5ODY0IDUyLjY3NjQ1IC04LjcwMTU1IDUyLjY3NjcxIC04LjcwNDM0IDUyLjY3NjkxIC04LjcwOTgxIDUyLjY3NjM4IC04LjcxNTAyIDUyLjY3ODAzIC04LjcyMDc3IDUyLjY3OTUyIC04LjcyODkgNTIuNjgwNTggLTguNzM2NjcgNTIuNjc5MjYgLTguNzQyNzggNTIuNjc5NjEgLTguNzUwMTEgNTIuNjgwMzQgLTguNzU1NjkgNTIuNjgxMTMgLTguNzYzMjUgNTIuNjgxNjEgLTguNzY4NDggNTIuNjgwNDQgLTguNzcyNTIgNTIuNjc5ODMgLTguNzc2MDQgNTIuNjgxIC04Ljc4MDYzIDUyLjY4MjgzIC04Ljc4MjE4IDUyLjY4Mzk1IC04Ljc4NDggNTIuNjg0ODEgLTguNzg5OTUgNTIuNjg2MDkgLTguNzk1NDcgNTIuNjg4MTcgLTguNzk5MDIgNTIuNjkwNjEgLTguNzk4NCA1Mi42OTM3NCAtOC43OTY4NCA1Mi42OTQ5MyAtOC43OTk3OCA1Mi42OTI4NCAtOC44MDIxMyA1Mi42OTEyIC04LjgwNDU3IDUyLjY5MDQgLTguODA4MzYgNTIuNjg5ODIgLTguODExNiA1Mi42ODY3IC04LjgxNTczIDUyLjY4OTUgLTguODE5MjUgNTIuNjg4OTIgLTguODIyMzQgNTIuNjg3MyAtOC44MjQ2MiA1Mi42ODg5MyAtOC44MjY0MiA1Mi42OTA3NiAtOC44MjY2IDUyLjY5MTY5IC04LjgyOTE5IDUyLjY5MjczIC04LjgzMTQ5IDUyLjY5NDU4IC04LjgzMjg4IDUyLjY5NTg1IC04LjgzNzM2IDUyLjY5NTQ0IC04Ljg0MDc2IDUyLjY5NDI0IC04Ljg0MzQzIDUyLjY5MzIzIC04Ljg0NzY0IDUyLjY5Njk1IC04Ljg0Njk0IDUyLjY5OTMzIC04Ljg0NzIxIDUyLjY5OTcxIC04Ljg1MjU5IDUyLjY5ODczIC04Ljg1NDg0IDUyLjY5NjQ2IC04Ljg1OTg5IDUyLjcwMDM3IC04Ljg2MDc0IDUyLjY5OTU4IC04Ljg2NDM5IDUyLjY5ODc3IC04Ljg2ODAyIDUyLjcwMDIgLTguODcyOTggNTIuNjk4NTYgLTguODc1NDEgNTIuNjk3MDMgLTguODgwNDQgNTIuNjk3MTMgLTguODgzMDIgNTIuNjk1NDYgLTguODg1OTEgNTIuNjkzNDggLTguODg3OTggNTIuNjkxNzMgLTguODkwODUgNTIuNjkwNzMgLTguODk2MjYgNTIuNjg5NDQgLTguOTAwMjggNTIuNjg4IC04LjkwMTA3IDUyLjY4NCAtOC45MDQ1OSA1Mi42ODg2MSAtOC45MDU3NCA1Mi42OTE0OSAtOC45MDY4NiA1Mi42OTIzNiAtOC45MTE3MSA1Mi42OTEwMSAtOC45MTQwMyA1Mi42ODg3NSAtOC45MTYwNSA1Mi42ODY1MSAtOC45MTUyIDUyLjY4NTAyIC04LjkxMjY1IDUyLjY4MzA2IC04LjkwODk3IDUyLjY4MjA1IC04LjkxMDMgNTIuNjgyNjkgLTguOTEzMTQgNTIuNjg5MzUgLTguOTMzMTMgNTIuNjg3NzMgLTguOTM4MTQgNTIuNjg5MTggLTguOTQxMjcgNTIuNjg4MjQgLTguOTQyNzggNTIuNjg2NjQgLTguOTQ0NiA1Mi42ODQ5NyAtOC45NDYyNyA1Mi42ODQ1MSAtOC45NTA0MiA1Mi42ODYwOSAtOC45NTI4MyA1Mi42ODc1NSAtOC45NTMxIDUyLjY4OTQ4IC04Ljk1MDQxIDUyLjY5MTI2IC04Ljk0NzI2IDUyLjY5MzEzIC04Ljk0Njg0IDUyLjY5NTc3IC04Ljk0ODY5IDUyLjY5ODUzIC04Ljk1MTQ3IDUyLjcwMDc3IC04Ljk1MjMzIDUyLjcwMjA3IC04Ljk1MDc0IDUyLjcwMTcyIC04Ljk0Nzc5IDUyLjcwMDM5IC04Ljk0MzAxIDUyLjcwMjE5IC04LjkzNjY4IDUyLjcwNDg4IC04LjkzMzY3IDUyLjcwNzU2IC04LjkyOTQ2IDUyLjcwOTggLTguOTI0ODcgNTIuNzEyMiAtOC45MjE5NyA1Mi43MTUwNyAtOC45MjAzNyA1Mi43MTczNSAtOC45MjA3OCA1Mi43MTg4NiAtOC45MjI4NyA1Mi43MjA0MyAtOC45Mjk2NyA1Mi43MjA5NyAtOC45MzUzOCA1Mi43MjM4NyAtOC45Mzc1NyA1Mi43MjUwOCAtOC45NDE0MyA1Mi43Mjc3IC04Ljk0MzQzIDUyLjczMDA4IC04Ljk0NTA3IDUyLjczMTM5IC04Ljk0NzQzIDUyLjczMzY3IC04Ljk0NjQ4IDUyLjczMzc2IC04Ljk0MDg4IDUyLjczNTM5IC04LjkzODYgNTIuNzM0NjMgLTguOTM0ODMgNTIuNzM1NjMgLTguOTMyMjggNTIuNzM3OTIgLTguOTMyNjkgNTIuNzM5NyAtOC45MzA3NCA1Mi43NDI1MyAtOC45MzI0OCA1Mi43NDM2NSAtOC45MzYzMSA1Mi43NDY4MyAtOC45MzY4OSA1Mi43NDcwOCAtOC45NDQyMiA1Mi43NDk1NCAtOC45NDQ2NiA1Mi43NTIyOCAtOC45NDQ4NSA1Mi43NTQ2MiAtOC45NDk4NCA1Mi43NTYzOSAtOC45NTM2NCA1Mi43NTcyMSAtOC45NTY1MiA1Mi43NTYwNiAtOC45NjEzMiA1Mi43NTU1NSAtOC45NjQ3MiA1Mi43NTcwMyAtOC45Njc0MiA1Mi43NTk2NCAtOC45NjgyIDUyLjc2MjA1IC04Ljk2NTQ1IDUyLjc2MzYyIC04Ljk2MTE5IDUyLjc2Mzc3IC04Ljk1NjIgNTIuNzYyODQgLTguOTUzNjEgNTIuNzY0NDEgLTguOTQ5MzUgNTIuNzY3MTYgLTguOTQyNzIgNTIuNzY5NDMgLTguOTM5MTkgNTIuNzcxNTEgLTguOTM2ODIgNTIuNzc1MDIgLTguOTM1NDkgNTIuNzc4MjUgLTguOTM1MzIgNTIuNzgxODcgLTguOTMzNTUgNTIuNzg0MDQgLTguOTMxMzcgNTIuNzg1ODYgLTguOTMzMDYgNTIuNzg5OTIgLTguOTMwMTUgNTIuNzkxMzYgLTguOTI2NjIgNTIuNzkxNjYgLTguOTIwNTkgNTIuNzkzMTEgLTguOTE4MjggNTIuNzk1NjMgLTguOTE3ODMgNTIuNzk2NDUgLTguOTE1MSA1Mi43OTg1OCAtOC45MTYzOSA1Mi43OTgwNSAtOC45MTg3MiA1Mi43OTY2OSAtOC45MTk4NCA1Mi43OTQ3NCAtOC45MjE0NyA1Mi43OTM2OSAtOC45MjYxNCA1Mi43OTMyOSAtOC45MzA3NyA1Mi43OTA4OCAtOC45MzM2NyA1Mi43OTAxNSAtOC45MzY0MiA1Mi43OTA5MSAtOC45NDAyIDUyLjc5MTc5IC04Ljk0MzQgNTIuNzkzNjcgLTguOTQ1NzEgNTIuNzk1ODYgLTguOTQ4NTQgNTIuNzk5MDIgLTguOTQ4MzYgNTIuODAwNCAtOC45NDY3OSA1Mi44MDI4NiAtOC45NDQ1MSA1Mi44MDUzNiAtOC45NDQzNSA1Mi44MDc5NyAtOC45NDUxMyA1Mi44MTE1MyAtOC45NDQ0MSA1Mi44MTQ3MyAtOC45NDU5IDUyLjgxNzE2IC04Ljk0ODE3IDUyLjgxMzIyIC04Ljk0NzkxIDUyLjgxMTE4IC04Ljk0ODE0IDUyLjgwODU2IC04Ljk0ODczIDUyLjgwNjI1IC04Ljk0ODkyIDUyLjgwNDI5IC04Ljk0Nzk1IDUyLjgwMjczIC04Ljk0OTE5IDUyLjgwMDc4IC04Ljk1MzUzIDUyLjc5OTU1IC04Ljk1NjgxIDUyLjc5ODMgLTguOTU0NzYgNTIuNzk2OTggLTguOTUzOTIgNTIuNzk0MDcgLTguOTUzMzkgNTIuNzkxMTYgLTguOTUxNDkgNTIuNzg5NjIgLTguOTQ2OTYgNTIuNzg5MDggLTguOTQzOTcgNTIuNzg4NDQgLTguOTQxMjggNTIuNzg3MTggLTguOTM5NTIgNTIuNzg0ODcgLTguOTM5NTcgNTIuNzgyNjYgLTguOTQwOTcgNTIuNzgwMDUgLTguOTQzOTkgNTIuNzgxMjIgLTguOTQ2MDMgNTIuNzgyNDcgLTguOTQ5MjkgNTIuNzgzNDQgLTguOTUyNjYgNTIuNzgzNDYgLTguOTU2NDUgNTIuNzgyMzcgLTguOTU4OTkgNTIuNzgwNTMgLTguOTYxNjkgNTIuNzgxMDEgLTguOTY2OTMgNTIuNzc5ODkgLTguOTY4NDEgNTIuNzc3OTggLTguOTcwOTQgNTIuNzc1NzYgLTguOTczNzMgNTIuNzczMjQgLTguOTc1NTMgNTIuNzcxMzggLTguOTc3MTcgNTIuNzcxMzggLTguOTc3MTcgNTIuNzcwOTcgLTguOTczNzYgNTIuNzcxMDkgLTguOTcwNTkgNTIuNzY5NTIgLTguOTcxOTcgNTIuNzY3ODYgLTguOTc2MDggNTIuNzY2NDYgLTguOTc3NzkgNTIuNzY1OCAtOC45ODIwOCA1Mi43NjU4OSAtOC45ODc1NSA1Mi43NjcyNyAtOC45OTI5NyA1Mi43NjY4NCAtOC45OTY4MiA1Mi43NjUzOSAtOC45OTkgNTIuNzY1NTEgLTkuMDAyNjYgNTIuNzY0MiAtOS4wMDcxMiA1Mi43NjMxMSAtOS4wMTEwMiA1Mi43NjExMSAtOS4wMTMyMyA1Mi43NjEyMSAtOS4wMTg1NSA1Mi43NTk5NCAtOS4wMTk2OSA1Mi43NTc4NiAtOS4wMjAzNyA1Mi43NTU4MSAtOS4wMjM2NCA1Mi43NTM3NSAtOS4wMjUzOSA1Mi43NTMwNyAtOS4wMjg1OSA1Mi43NTM4MiAtOS4wMzI1MiA1Mi43NTIyOCAtOS4wMzQ4MiA1Mi43NTA2NiAtOS4wMzgzMSA1Mi43NDg0NCAtOS4wMzk3MyA1Mi43NDc0NiAtOS4wNDIxMyA1Mi43NDY5NCAtOS4wNDQzMSA1Mi43NDYxMyAtOS4wNDY3MyA1Mi43NDM0NCAtOS4wNDU3OCA1Mi43NDEyNyAtOS4wNDc4MiA1Mi43NDEyOSAtOS4wNDQ3OSA1Mi43NDI3NyAtOS4wNDMzOCA1Mi43NDUzNSAtOS4wNDE4OSA1Mi43NDU1NSAtOS4wMzkwNCA1Mi43NDYyMSAtOS4wMzU5OCA1Mi43NDc3NyAtOS4wMzMzOCA1Mi43NDk4NiAtOS4wMzExOCA1Mi43NDk4MyAtOS4wMjc1NCA1Mi43NDc2NCAtOS4wMjcyOSA1Mi43NDY5MSAtOS4wMjQ0MyA1Mi43NDQwNiAtOS4wMjQzNiA1Mi43NDE2NSAtOS4wMjMxNSA1Mi43Mzk0MyAtOS4wMjMzNSA1Mi43MzYgLTkuMDIzNjQgNTIuNzMxMzYgLTkuMDI1NjYgNTIuNzI2NTcgLTkuMDMxIDUyLjcyMzU1IC05LjAzMzQ4IDUyLjcyMTU4IC05LjAzOTQ5IDUyLjcyMDAzIC05LjA0NTg4IDUyLjcxODMgLTkuMDUxMDIgNTIuNzE1NjcgLTkuMDUzMSA1Mi43MTE1MiAtOS4wNTMyNSA1Mi43MDczMyAtOS4wNTM4MyA1Mi43MDUxNiAtOS4wNTMyOSA1Mi43MDI1NCAtOS4wNTI1IDUyLjY5OTE4IC05LjA1MDUyIDUyLjY5NzIyIC05LjA1MDkxIDUyLjY5MzU4IC05LjA1NDE4IDUyLjY4NzcyIC05LjA1Nzk2IDUyLjY4NDE3IC05LjA2MTI0IDUyLjY4MjgzIC05LjA2NTk5IDUyLjY4MTA5IC05LjA2NzM0IDUyLjY3OTc2IC05LjA2NjQ5IDUyLjY3ODIyIC05LjA2NjA1IDUyLjY3NTk0IC05LjA2NTc4IDUyLjY3MzE4IC05LjA2ODQ1IDUyLjY3NDA5IC05LjA3MTIgNTIuNjc1NTIgLTkuMDcxOTEgNTIuNjc1NTcgLTkuMDc1MjYgNTIuNjc0MTMgLTkuMDgwMTQgNTIuNjcxNDggLTkuMDgzNzMgNTIuNjcwNTMgLTkuMDkwOTkgNTIuNjY4NTIgLTkuMDkyMTIgNTIuNjY4IC05LjA5MDIxIDUyLjY2NTk0IC05LjA5MDczIDUyLjY2MzAxIC05LjA5MTg3IDUyLjY1OTMxIC05LjA5MzQ1IDUyLjY1ODIgLTkuMDk0NzUgNTIuNjU2MzggLTkuMDk4NTIgNTIuNjU0MjkgLTkuMDk5MzQgNTIuNjUyMTYgLTkuMTAxMDYgNTIuNjUwMjYgLTkuMTAzMTMgNTIuNjQ3NjcgLTkuMTA0NjMgNTIuNjQ1OSAtOS4xMDYxMSA1Mi42NDUwNyAtOS4xMDg5OSA1Mi42NDUwNyAtOS4xMTQyOCA1Mi42NDI3NiAtOS4xMTk3NiA1Mi42NDE1IC05LjEyMDU4IDUyLjYzOTI2IC05LjEyMTIzIDUyLjYzODM2IC05LjEyMzQ4IDUyLjYzNjcgLTkuMTI0ODQgNTIuNjMzOTYgLTkuMTI3MjEgNTIuNjMwNTkgLTkuMTMxODcgNTIuNjI2NTEgLTkuMTM4OTkgNTIuNjIxMzkgLTkuMTQ3ODYgNTIuNjE5ODEgLTkuMTUzMzIgNTIuNjIxMDUgLTkuMTU2NzMgNTIuNjIzMDQgLTkuMTU3MjUgNTIuNjIzMTMgLTkuMTYxMzYgNTIuNjIyMTQgLTkuMTY0OTUgNTIuNjIwNjkgLTkuMTY1OSA1Mi42MjA3NiAtOS4xNzAxNCA1Mi42MjA3MyAtOS4xNzMzMSA1Mi42MTk2NCAtOS4xNzg0IDUyLjYxOTIzIC05LjE4NTU4IDUyLjYyMTA3IC05LjE5MjQzIDUyLjYyMDg1IC05LjE5OTM1IDUyLjYxOTY4IC05LjIwMjkyIDUyLjYxOTM0IC05LjIwNjY0IDUyLjYyMDY5IC05LjIwNTY4IDUyLjYyMjQzIC05LjIwMTc3IDUyLjYyMDg2IC05LjIxNzY3IDUyLjYyMTUgLTkuMjIwNTEgNTIuNjIxMTggLTkuMjI1IDUyLjYyMDYgLTkuMjI5NDMgNTIuNjIzNTUgLTkuMjMzMyA1Mi42MjAxOCAtOS4yMzU0IDUyLjYyMTkyIC05LjIzODE1IDUyLjYyMDg3IC05LjI0MjY0IDUyLjYxOTkxIC05LjI0NzE0IDUyLjYxNzQ3IC05LjI0Mzk2IDUyLjYxNTQyIC05LjI0MTYgNTIuNjEzODUgLTkuMjQxNjMgNTIuNjE0NTEgLTkuMjQ0MDIgNTIuNjEyOSAtOS4yNDg3IDUyLjYxMTIyIC05LjI1MDIxIDUyLjYwOTk5IC05LjI0Njc5IDUyLjYwNzM3IC05LjI0NTk5IDUyLjYwNDczIC05LjI0ODIxIDUyLjYwMTA4IC05LjI1Mjk4IDUyLjU5NjkgLTkuMjYxMjcgNTIuNTkxNjIgLTkuMjcyMjIgNTIuNTg3OCAtOS4yODMyOSA1Mi41ODY3NyAtOS4yOTM5OCA1Mi41ODc1MyAtOS4zMDQxIDUyLjU4OTQzIC05LjMxMzg0IDUyLjU5MzQ3IC05LjMyMDUgNTIuNTk3MyAtOS4zMjIzIDUyLjYwMDY1IC05LjMyNTggNTIuNjAzMTkgLTkuMzI1MDcgNTIuNjA3MDMgLTkuMzIwMzYgNTIuNjEyMzcgLTkuMzExMjMgNTIuNjE3MzQgLTkuMzAyMTkgNTIuNjIyODkgLTkuMjg4NzIgNTIuNjI3MzIgLTkuMjc5NDIgNTIuNjI5MjIgLTkuMjczNDIgNTIuNjMxMjUgLTkuMjY5NDEgNTIuNjMyNzEgLTkuMjY1NzUgNTIuNjMzNjYgLTkuMjYxMjMgNTIuNjM1NjkgLTkuMjU4NzUgNTIuNjM3MjIgLTkuMjU5MTkgNTIuNjM4NjggLTkuMjYyMDMgNTIuNjM5MjEgLTkuMjU4MzUgNTIuNjM4NzggLTkuMjU2NDYgNTIuNjM5MiAtOS4yNTQ1NiA1Mi42NDA1NCAtOS4yNTI1NSA1Mi42NDI0NyAtOS4yNTMxNSA1Mi42NDI0NCAtOS4yNTgyIDUyLjY0MjM5IC05LjI2MTY3IDUyLjY0MjIxIC05LjI2NTU3IDUyLjY0MDU2IC05LjI3MDcyIDUyLjY0MTA4IC05LjI3MzcgNTIuNjQxOTIgLTkuMjc3NDkgNTIuNjQyNyAtOS4yNzk2IDUyLjY0NDI3IC05LjI3OTQ1IDUyLjY0NyAtOS4yNzk5NiA1Mi42NDUwOCAtOS4yODIzMiA1Mi42NDMwMSAtOS4yODQzNSA1Mi42NDEyNSAtOS4yODQzMiA1Mi42MzkxOSAtOS4yODM2MyA1Mi42Mzc2NiAtOS4yODU3NiA1Mi42MzU5NSAtOS4yOTE3OSA1Mi42MzM1NyAtOS4yOTggNTIuNjMwNDIgLTkuMzAzNjEgNTIuNjMwMjMgLTkuMzA3NTEgNTIuNjMwMyAtOS4zMTI5OCA1Mi42MzAwNCAtOS4zMjA2NCA1Mi42Mjg2NiAtOS4zMjQ0NyA1Mi42MjcyNyAtOS4zMjU4NyA1Mi42Mjc2NiAtOS4zMjk1NyA1Mi42MjcxNyAtOS4zMzEzIDUyLjYyNjAzIC05LjMzMTY5IDUyLjYyNTA5IC05LjMyODE3IDUyLjYyMjM1IC05LjMzMDM4IDUyLjYxOTU0IC05LjMzMjI3IDUyLjYxNjk4IC05LjMzODQ0IDUyLjYxNzUzIC05LjM0NTA2IDUyLjYxNjk2IC05LjM1MDU0IDUyLjYxNTI1IC05LjM1NjQxIDUyLjYxNjI3IC05LjM2MDI0IDUyLjYxNzM5IC05LjM2MjU4IDUyLjYxNjMxIC05LjM2NDk1IDUyLjYxNzM5IC05LjM2OTIzIDUyLjYxNjUxIC05LjM3MTE5IDUyLjYxNDEyIC05LjM2OTgxIDUyLjYxMjU5IC05LjM3NDUyIDUyLjYxMTE4IC05LjM3ODY0IDUyLjYwODg1IC05LjM4MTY4IDUyLjYwNjg5IC05LjM4NDYzIDUyLjYwNTE0IC05LjM4NzE3IDUyLjYwNDM4IC05LjM5Mzk4IDUyLjYwNDc4IC05LjM5OTk1IDUyLjYwNTI0IC05LjQwNjQgNTIuNjA3MDQgLTkuNDEyMiA1Mi42MDc5IC05LjQxODI2IDUyLjYwOTAyIC05LjQyNTkgNTIuNjEyMTEgLTkuNDI3NjkgNTIuNjEzOTggLTkuNDI5ODYgNTIuNjEzNTkgLTkuNDM1MjQgNTIuNjExNzIgLTkuNDM4MjEgNTIuNjA5ODkgLTkuNDQzMzEgNTIuNjEwNTYgLTkuNDQ2NzcgNTIuNjEyNDcgLTkuNDUyMjggNTIuNjE1NjkgLTkuNDU3NDQgNTIuNjE2NTMgLTkuNDYyNDUgNTIuNjE2OCAtOS40Njc2NCA1Mi42MTkxNyAtOS40NjgxIDUyLjYyMTc3IC05LjQ2OTA2IDUyLjYyMzM2IC05LjQ3MTE5IDUyLjYyNDI5IC05LjQ3NjIxIDUyLjYyNTQxIC05LjQ4MjYzIDUyLjYyOTYxIC05LjQ4NjkyIDUyLjYzMTU3IC05LjQ4NTE5IDUyLjYzMzYzIC05LjQ4MjI1IDUyLjYzMzM3IC05LjQ3OTQ4IDUyLjYzNDM0IC05LjQ3NjMzIDUyLjYzNjE3IC05LjQ3NTE4IDUyLjYzNzcgLTkuNDc4MjEgNTIuNjM0NjggLTkuNDg0MjggNTIuNjMzNjEgLTkuNDg4OTEgNTIuNjMyMjUgLTkuNDkzOCA1Mi42Mjk1OCAtOS40OTM3MyA1Mi42MzA3MiAtOS40OTgzNCA1Mi42MzE5MSAtOS41MDIyMSA1Mi42MzEwOCAtOS41MDQ5MyA1Mi42MzEyIC05LjUxMDg2IDUyLjYzMTE1IC05LjUxOTE4IDUyLjYzMzMzIC05LjUxNzAyIDUyLjYzNTc4IC05LjUxMjUgNTIuNjM2NTMgLTkuNTE2MjkgNTIuNjM1NTUgLTkuNTIwNzkgNTIuNjM5MTUgLTkuNTIzMzEgNTIuNjQxNDMgLTkuNTI2MTcgNTIuNjQzODggLTkuNTI5MjMgNTIuNjQ2MTggLTkuNTI4MDEgNTIuNjQ4OTUgLTkuNTI4MSA1Mi42NTA1IC05LjUyOTQ1IDUyLjY1MjE2IC05LjUyODExIDUyLjY1Mjc3IC05LjUzMTI2IDUyLjY1NDg1IC05LjUyOTI0IDUyLjY1NjU1IC05LjUzMDAyIDUyLjY1ODE4IC05LjUzMDM1IDUyLjY2MTY5IC05LjUyODkxIDUyLjY2NTY2IC05LjUyNjM1IDUyLjY2NzUgLTkuNTI3NzYgNTIuNjcwMjEgLTkuNTI4NDUgNTIuNjY0ODQgLTkuNTM1MTQgNTIuNjY1NTIgLTkuNTM3MjIgNTIuNjY1ODMgLTkuNTQwNDcgNTIuNjY1MSAtOS41NDU0OCA1Mi42NjUzNCAtOS41NDg1NiA1Mi42NjU5NCAtOS41NTMwNyA1Mi42NjY5MyAtOS41NTg0MiA1Mi42NjYxMSAtOS41NjIwNSA1Mi42NjY1NSAtOS41NjUwMiA1Mi42NjY2OCAtOS41Njk1OSA1Mi42NjY4MyAtOS41NzM3MSA1Mi42NjY4OSAtOS41NzkxNyA1Mi42NjgxMSAtOS41ODI3NSA1Mi42Njc3MiAtOS41ODY3NyA1Mi42NzAwNyAtOS41OTI1MyA1Mi42NjkxOSAtOS41OTQ2MyA1Mi42Njk5MiAtOS41OTcxOSA1Mi42Njg1MiAtOS42MDExNiA1Mi42NjYxNCAtOS41OTg0MiA1Mi42Njc0NCAtOS41OTU4IDUyLjY2ODAyIC05LjU5Mjg5IDUyLjY2NzQzIC05LjU5MDk0IDUyLjY2NTk5IC05LjU5MDM3IDUyLjY2MzkxIC05LjU5MTAyIDUyLjY2NTI2IC05LjU4NjQzIDUyLjY2NTMyIC05LjU4MzExIDUyLjY2NDk5IC05LjU3ODggNTIuNjYzNDMgLTkuNTczNjUgNTIuNjY0NDcgLTkuNTY5NDYgNTIuNjYyOCAtOS41NjcwMSA1Mi42NjE2MiAtOS41NzA1NiA1Mi42NTk3NiAtOS41NzMzOCA1Mi42NTgyMyAtOS41NzE3MiA1Mi42NTc3MyAtOS41NjcwNyA1Mi42NTY1NiAtOS41NjAzMyA1Mi42NTU3IC05LjU1NDI2IDUyLjY1MzgzIC05LjU0ODQzIDUyLjY1MTQ4IC05LjU0NTI1IDUyLjY0ODUgLTkuNTQ1NTcgNTIuNjQ2MjQgLTkuNTQyNDIgNTIuNjQ1MDIgLTkuNTM3NzggNTIuNjQzODYgLTkuNTMzNDYgNTIuNjQwNTQgLTkuNTMyMDUgNTIuNjM4NzIgLTkuNTM4MDcgNTIuNjM0OTYgLTkuNTQwNSA1Mi42MzU1MiAtOS41NDQxIDUyLjYzNDM2IC05LjU0ODcxIDUyLjYzMjUgLTkuNTUwMTcgNTIuNjMxOTQgLTkuNTU1MzYgNTIuNjMxNzcgLTkuNTYxNTQgNTIuNjMwMTMgLTkuNTY3NTggNTIuNjI3MzggLTkuNTczNzEgNTIuNjI3NTYgLTkuNTc4ODggNTIuNjI1NzEgLTkuNTgyNjEgNTIuNjIzNjcgLTkuNTg1NCA1Mi42MjA4NiAtOS41ODg2MyA1Mi42MjExNiAtOS41ODA2NyA1Mi42MjMwMSAtOS41NzQzNiA1Mi42MjA2NSAtOS41NzYzMyA1Mi42MTkwNiAtOS41ODE2MiA1Mi42MTgzNCAtOS41OTAyNSA1Mi42MTYzOSAtOS41OTY2OCA1Mi42MTY1NCAtOS42MDIzMSA1Mi42MTY5NyAtOS42MTAyNiA1Mi42MTc2OSAtOS42MTc5OCA1Mi42MTczIC05LjYyNDU3IDUyLjYxNjE0IC05LjYyOTE4IDUyLjYxNDQzIC05LjYzMTEyIDUyLjYxMzkzIC05LjYzNzk4IDUyLjYxMzI0IC05LjY0NDgxIDUyLjYxMjkyIC05LjY1MTcgNTIuNjEyODkgLTkuNjU3MTQgNTIuNjE0NTMgLTkuNjU4NjkgNTIuNjE0NzkgLTkuNjYxNDYgNTIuNjE0NjcgLTkuNjY2ODggNTIuNjE0MTQgLTkuNjcyNjkgNTIuNjEyODUgLTkuNjc2NTIgNTIuNjEzNjUgLTkuNjgwNzYgNTIuNjEyODkgLTkuNjg1OTIgNTIuNjExMjUgLTkuNjg5MzggNTIuNjA4NzggLTkuNjkxNjEgNTIuNjA1NzcgLTkuNjkzNzQgNTIuNjA0NzkgLTkuNjk1NjYgNTIuNjAzNjcgLTkuNjk1OSA1Mi42MDEzMSAtOS42OTQyMiA1Mi41OTk1MiAtOS42ODk2MiA1Mi41OTgzNiAtOS42ODY2NiA1Mi41OTYwOCAtOS42ODc1NyA1Mi41OTMwOSAtOS42ODk0MSA1Mi41ODkzMiAtOS42OTE4NCA1Mi41ODU2OCAtOS42OTIzMyA1Mi41ODMyMSAtOS42ODk1NiA1Mi41ODIzMyAtOS42ODI3NCA1Mi41NzkgLTkuNjc4IDUyLjU3NjkzIC05LjcwMjIzIDUyLjU3NjkzIC05LjcwMjIzIDUyLjU3OTQyIC05LjcwNDY5IDUyLjU3OTA2IC05LjcwODI1IDUyLjU4MDU0IC05LjcwOTQ2IDUyLjU4MzYyIC05LjcxMTQ0IDUyLjU4MzQgLTkuNzEzMjEgNTIuNTgxMjQgLTkuNzE2MjUgNTIuNTg0NjQgLTkuNzIwMTEgNTIuNTg1NDEgLTkuNzI4MjggNTIuNTgzODggLTkuNzMyODIgNTIuNTgwODQgLTkuNzM1MzggNTIuNTc4NjEgLTkuNzMzMTIgNTIuNTc0ODggLTkuNzM2MTcgNTIuNTczMjEgLTkuNzQ5OSA1Mi41NzAyOCAtOS43NTM0MSA1Mi41Njk1NSAtOS43NjE4OCA1Mi41Njc1MiAtOS43NjkzNCA1Mi41NjgwNiAtOS43NzU4IDUyLjU2NjI1IC05Ljc4MDEyIDUyLjU2NDc0IC05Ljc4NDM2IDUyLjU2MzM5IC05Ljc5MjU2IDUyLjU2MjUzIC05LjgwMDQxIDUyLjU2NDk0IC05LjgwODc1IDUyLjU2NzA1IC05LjgyMDA3IDUyLjU2ODU1IC05LjgyOTYgNTIuNTY3ODcgLTkuODM5OSA1Mi41NjY2NiAtOS44NDg1OCA1Mi41NjM3NCAtOS44NDgyOSA1Mi41NjE2NCAtOS44NTI3MSA1Mi41NTc3OCAtOS44NTg3MyA1Mi41NTQ3NyAtOS44NjU2OSA1Mi41NTM4NSAtOS44NzI5MSA1Mi41NTA3OSAtOS44NzgwNSA1Mi41NTQ3OCAtOS44ODAyMSA1Mi41NTQwNCAtOS44ODUwNSA1Mi41NTQwMSAtOS44ODkxMyA1Mi41NTQzOCAtOS44OTY0NiA1Mi41NTQ3OSAtOS45MDMyMSA1Mi41NTM1NCAtOS45MDg2OSA1Mi41NTM0IC05LjkxMzA2IDUyLjU1MjM5IC05LjkxNjY0IDUyLjU1NDA5IC05LjkyMDkgNTIuNTU0NDggLTkuOTI0MzIgNTIuNTU1MDUgLTkuOTI3NzUgNTIuNTU3MDIgLTkuOTI3NDEgNTIuNTU4NTUgLTkuOTI0MjQgNTIuNTU5MTQgLTkuOTE3NyA1Mi41NjI1NyAtOS45MTM3IDUyLjU2NDg5IC05LjkwODczIDUyLjU2Nzc3IC05LjkwNDc4IDUyLjU3MTAyIC05LjkwMjExIDUyLjU3Mzc1IC05LjkwMDA5IDUyLjU3NTM0IC05Ljg5Mzc3IDUyLjU3NzAzIC05Ljg4OTcyIDUyLjU3Nzc2IC05Ljg4NDg3IDUyLjU3NjI2IC05Ljg4MTU0IDUyLjU3NjYyIC05Ljg3NTU2IDUyLjU3NzYgLTkuODcxMDcgNTIuNTc5ODEgLTkuODY4NzkgNTIuNTgyMDggLTkuODY3ODkgNTIuNTgxNzIgLTkuODY0MTcgNTIuNTg0MDcgLTkuODYxMTggNTIuNTg1NjggLTkuODY0MjIgNTIuNTg2NjcgLTkuODY4MjEgNTIuNTg4MDYgLTkuODY4MDQgNTIuNTg5MjkgLTkuODYwNDIgNTIuNTg5MTggLTkuODU0NSA1Mi41OTA2IC05Ljg0OTAzIDUyLjU5MTMyIC05Ljg0NTY5IDUyLjU5MzA3IC05Ljg0MDkgNTIuNTk0NTEgLTkuODM1MTMgNTIuNTkzNiAtOS44MzAxMSA1Mi41OTMxOSAtOS44MjU2MyA1Mi41OTY3NiAtOS44MjQ4NCA1Mi41OTcxMyAtOS44MjExMyA1Mi41OTc3NiAtOS44MTUwNCA1Mi41OTkyNiAtOS44MDk5IDUyLjYwMDM3IC05LjgwNDk4IDUyLjYwMzU4IC05Ljc5NzYxIDUyLjYwNzQzIC05Ljc5NDI4IDUyLjYxMDk0IC05Ljc5MTgxIDUyLjYxMzYxIC05Ljc5MzEgNTIuNjE1NzkgLTkuNzkzNTQgNTIuNjE2NzUgLTkuNzkwNTUgNTIuNjE3ODMgLTkuNzg0NzEgNTIuNjE5OTUgLTkuNzgyMjYgNTIuNjIxMzEgLTkuNzgzNzQgNTIuNjI0MDcgLTkuNzgzODQgNTIuNjI0NTggLTkuNzc5NTUgNTIuNjI1MjEgLTkuNzc0ODMgNTIuNjI2NDkgLTkuNzcyMzcgNTIuNjI5IC05Ljc3MDkgNTIuNjMwMDEgLTkuNzY1OTYgNTIuNjMyMDUgLTkuNzU5NjkgNTIuNjM0MzQgLTkuNzU0ODUgNTIuNjM2MDIgLTkuNzQ4NTIgNTIuNjM5MTggLTkuNzQzMSA1Mi42NDA1MyAtOS43MzczIDUyLjY0MzM3IC05LjczNjM2IDUyLjY0MTggLTkuNzMyNTYgNTIuNjQyNjcgLTkuNzMwOTEgNTIuNjQ0NDEgLTkuNzI5NzQgNTIuNjQ0MDQgLTkuNzI3MzkgNTIuNjQyMTQgLTkuNzI1NjYgNTIuNjQzNCAtOS43MjIyNiA1Mi42NDQ4NyAtOS43MjQ4NCA1Mi42NDU4NiAtOS43MjM4MiA1Mi42NDgyMyAtOS43MjA1IDUyLjY0OTk3IC05LjcxNjkxIDUyLjY1MjIgLTkuNzE0MTggNTIuNjU0ODYgLTkuNzEzMTkgNTIuNjU3MzQgLTkuNzEyMDIgNTIuNjU3NjIgLTkuNzA0NSA1Mi42NTgyNSAtOS43MDA5OCA1Mi42NjAzNiAtOS42OTc0NiA1Mi42NjIxOSAtOS42OTM3MyA1Mi42NjUxMSAtOS42ODkxNiA1Mi42NjkxMiAtOS42ODczOSA1Mi42NzMzNiAtOS42ODQ4OCA1Mi42NzU3MiAtOS42ODE1NyA1Mi42Nzg5MyAtOS42NzQzMSA1Mi42ODA3MyAtOS42NzExOCA1Mi42ODE1OSAtOS42NjgxNyA1Mi42ODMwNiAtOS42NjY5NSA1Mi42ODQyIC05LjY2Mjc3IDUyLjY4NTY0IC05LjY1Njk5IDUyLjY4NTMxIC05LjY1MjY4IDUyLjY4NDgxIC05LjY0ODE5IDUyLjY4MzAyIC05LjY0MzczIDUyLjY4MTg0IC05LjY0MzM1IDUyLjY4MjAxIC05LjY0MTExIDUyLjY4NDQzIC05LjYzOTYyIDUyLjY4NTU5IC05LjYzODggNTIuNjg3NjMgLTkuNjQxMTcgNTIuNjg5NTggLTkuNjQwOTQgNTIuNjkyMjQgLTkuNjQyNTMgNTIuNjk0NDcgLTkuNjQzNDMgNTIuNjk0NzIgLTkuNjQ2MzYgNTIuNjk1NDggLTkuNjUxMDYgNTIuNjk2NjUgLTkuNjQ4ODcgNTIuNjk4MTUgLTkuNjQ0NzYgNTIuNzAwODkgLTkuNjQzOTMgNTIuNzAzNTkgLTkuNjQzNTcgNTIuNzA1NjQgLTkuNjQyIDUyLjcwODYyIC05LjYzNjUyIDUyLjcwOTQyIC05LjYzOTQxIDUyLjcxMTc2IC05LjYzODk1IDUyLjcxNDE5IC05LjYzMzM2IDUyLjcxNTk2IC05LjYyOTQ3IDUyLjcxNzAzIC05LjYyNDgyIDUyLjcxNjk5IC05LjYyMDQyIDUyLjcxNjA4IC05LjYxNjQ0IDUyLjcxNzc3IC05LjYxMjA4IDUyLjcxOTI4IC05LjYwNzk3IDUyLjcyMTQ2IC05LjYxMjE5IDUyLjcyMzA2IC05LjYxMDM5IDUyLjcyNTM0IC05LjYxNDYyIDUyLjcyNjcyIC05LjYxOTYxIDUyLjcyODQ2IC05LjYyMzU5IDUyLjczMjggLTkuNjIzNTMgNTIuNzMwNzggLTkuNjE5NjQgNTIuNzMxOCAtOS42MTU3NiA1Mi43MzM1OCAtOS42MTUzNCA1Mi43MzUwMSAtOS42MTcxNSA1Mi43MzY1NyAtOS42MTg2NyA1Mi43MzczMiAtOS42MTMzNSA1Mi43MzgyMSAtOS42MDYyNCA1Mi43Mzc5MiAtOS42MDEzMyA1Mi43Mzk3OSAtOS41OTg1IDUyLjc0Mzk5IC05LjU5NzY2IDUyLjc0NjcgLTkuNTk3MjggNTIuNzQ4ODYgLTkuNTkyODUgNTIuNzQ4MjggLTkuNTg2ODEgNTIuNzQ4NjcgLTkuNTgxNTcgNTIuNzUwNjkgLTkuNTc5MDkgNTIuNzUyNDQgLTkuNTc2NTUgNTIuNzUzMjggLTkuNTcwMTggNTIuNzU0MyAtOS41NjYxMyA1Mi43NTQ2MyAtOS41NjE2NSA1Mi43NTU1NyAtOS41NTc1NyA1Mi43NTQ3MSAtOS41NTA0MiA1Mi43NTUwNSAtOS41NDMwNCA1Mi43NTMxIC05LjUzODYgNTIuNzUwNjIgLTkuNTQwNjYgNTIuNzQ5MiAtOS41MzczNSA1Mi43NTAwMSAtOS41MzUwOCA1Mi43NTA5NiAtOS41MzMyOSA1Mi43NTAwMiAtOS41MzA5OCA1Mi43NDg2NSAtOS41Mjk2NCA1Mi43NDY3MSAtOS41Mjk1OCA1Mi43NDU2OSAtOS41Mjg0NyA1Mi43NDQ2MyAtOS41MjY1OSA1Mi43NDE3MyAtOS41Mjg0NSA1Mi43NDAwMSAtOS41MjkzMyA1Mi43Mzg4OSAtOS41MjY5OCA1Mi43MzY0OSAtOS41MTU0NCA1Mi43MzgwNiAtOS41MTY2NSA1Mi43NDA1NiAtOS41MTkxMSA1Mi43NDIwOSAtOS41MTY5OCA1Mi43NDQyOCAtOS41MTc0IDUyLjc0NjE3IC05LjUxOTI5IDUyLjc0ODE3IC05LjUxOTY5IDUyLjc0OTM0IC05LjUxODg1IDUyLjc0OTI0IC05LjUxMzY4IDUyLjc0ODQ1IC05LjUwOTQyIDUyLjc0OTQ3IC05LjUwNTUyIDUyLjc0ODc4IC05LjUwMzU2IDUyLjc0OTAxIC05LjUwMDI3IDUyLjc1MDIxIC05LjQ5NjQgNTIuNzUxNDMgLTkuNDkzNiA1Mi43NTI3OCAtOS40OTAyMSA1Mi43NTQ2MiAtOS40ODc2OSA1Mi43NTY2MyAtOS40ODUzNSA1Mi43NjA5NyAtOS40ODM5MiA1Mi43NjY1MyAtOS40ODQ4NCA1Mi43Njg4MiAtOS40ODYzNSA1Mi43NzAyMyAtOS40ODk2NyA1Mi43NzIwNCAtOS40OTAzMiA1Mi43NzMxNiAtOS40OTI2NiA1Mi43NzQyMiAtOS40OTA1OSA1Mi43NzcxMSAtOS40ODM3MSA1Mi43Nzc3NyAtOS40NzgzNyA1Mi43Nzk3NCAtOS40NzU0MSA1Mi43ODE5MyAtOS40NzQzMiA1Mi43ODQzNiAtOS40NzUyNCA1Mi43ODY4NSAtOS40NzUxMyA1Mi43ODkxIC05LjQ3ODQ0IDUyLjc5MTY4IC05LjQ3OTg2IDUyLjc5NDIxIC05LjQ3OTI4IDUyLjc5NTQ0IC05LjQ3NzU1IDUyLjc5NzgxIC05LjQ3Nzg3IDUyLjc5OTg4IC05LjQ3ODU2IDUyLjgwMjA5IC05LjQ3ODU1IDUyLjgwNDYyIC05LjQ3OTE5IDUyLjgwNzQ0IC05LjQ3OTg4IDUyLjgwOTczIC05LjQ4MTI0IDUyLjgxMjMgLTkuNDg0MDMgNTIuODEwNzYgLTkuNDc0NiA1Mi44MTMwMyAtOS40NjcyOCA1Mi44MTQzNSAtOS40NjQzNiA1Mi44MTY3OSAtOS40NTk4MSA1Mi44MTk0IC05LjQ1NTYxIDUyLjgyMTI1IC05LjQ1MDMzIDUyLjgyMzExIC05LjQ0NzUxIDUyLjgyNDkzIC05LjQ0Nzg2IDUyLjgyNjggLTkuNDQ4NjcgNTIuODI3MDYgLTkuNDQ2MyA1Mi44MjgxOCAtOS40NDM2MiA1Mi44Mjk2IC05LjQ0Mjk4IDUyLjgzMDQzIC05LjQ0NDM2IDUyLjgzMTM4IC05LjQ0Nzg4IDUyLjgzMjQ0IC05LjQ1MDk4IDUyLjgzNDQxIC05LjQ0OTI0IDUyLjgzNjQ2IC05LjQ0NjQ0IDUyLjgzNjM2IC05LjQ0MTQxIDUyLjgzNTY5IC05LjQzNzc4IDUyLjgzMzgxIC05LjQzNDM3IDUyLjgzNDk0IC05LjQzMjkxIDUyLjgzNTY2IC05LjQyNjUxIDUyLjgzNzQ4IC05LjQyNTY1IDUyLjgzOTUzIC05LjQyNTI4IDUyLjg0MTMgLTkuNDI2MzkgNTIuODQzNjMgLTkuNDI0NyA1Mi44NDQxNCAtOS40MjY2MyA1Mi44NDY4MyAtOS40Mjc2IDUyLjg0NjY3IC05LjQyOTg2IDUyLjg0NjUgLTkuNDMyMjYgNTIuODQ5MDIgLTkuNDMzMDUgNTIuODQ5OTggLTkuNDM1MDcgNTIuODUyMDkgLTkuNDQxNzEgNTIuODU0NjMgLTkuNDM4MzkgNTIuODU1NzQgLTkuNDM1ODcgNTIuODU3MzMgLTkuNDMyODQgNTIuODU5NDYgLTkuNDMwMDYgNTIuODU5MTkgLTkuNDI2MTkgNTIuODYwNzIgLTkuNDI0MDUgNTIuODYyMzggLTkuNDIyNyA1Mi44NjM3NCAtOS40MjQzNCA1Mi44NjU2IC05LjQyNTMgNTIuODY3MzcgLTkuNDIwMDEgNTIuODcwNCAtOS40MTc1NSA1Mi44NzA3MSAtOS40MjA5NiA1Mi44Njk3NyAtOS40MjM2OCA1Mi44Njg4OSAtOS40MjcxNiA1Mi44Njg0MiAtOS40MzIzOSA1Mi44NzUwNSAtOS40MzEyNSA1Mi44Nzk0MSAtOS40Mjk0OSA1Mi44ODMzOSAtOS40MjY3NiA1Mi44ODY3MiAtOS40MjM5MSA1Mi44ODc5NiAtOS40MTgwNiA1Mi44OTEwMiAtOS40MTM5MiA1Mi44OTQwOCAtOS40MDk2NSA1Mi44OTUxNSAtOS40MDM3NyA1Mi44OTYyIC05LjM5ODAzIDUyLjg5Njk5IC05LjM5MzMxIDUyLjg5ODIxIC05LjM4OTEzIDUyLjkwMDA3IC05LjM4NjI4IDUyLjkwMjI2IC05LjM4Mjc0IDUyLjkwNDkgLTkuMzc4MDcgNTIuOTA3MjggLTkuMzc1NDggNTIuOTA4OTEgLTkuMzczMzYgNTIuOTEwMzUgLTkuMzY4NjEgNTIuOTEyMzkgLTkuMzY1OCA1Mi45MTUzNiAtOS4zNjQxIDUyLjkxODAyIC05LjM2MTcgNTIuOTE4MzYgLTkuMzU4MjggNTIuOTE5MTMgLTkuMzUzODQgNTIuOTE5ODYgLTkuMzQ4OCA1Mi45MjEwNyAtOS4zNDczNiA1Mi45MjMzNCAtOS4zNDY0MiA1Mi45MjU4NyAtOS4zNDU4NCA1Mi45Mjg2OSAtOS4zNDUwMSA1Mi45MzAxMSAtOS4zNDMxNiA1Mi45MzIzNiAtOS4zNDEzIDUyLjkzNTA5IC05LjM0MTgyIDUyLjkzODAyIC05LjM0MzQ2IDUyLjk0MDI4IC05LjM0Nzg1IDUyLjk0MjgyIC05LjM1MjQ1IDUyLjk0NDU1IC05LjM1MTQxIDUyLjk0NjE4IC05LjM0OTE0IDUyLjk0ODMxIC05LjM0NjM1IDUyLjk1MDI0IC05LjM0MzgxIDUyLjk0ODk4IC05LjM0MjA1IDUyLjk0ODI4IC05LjMzNzY0IDUyLjk0Njk2IC05LjMzNTU2IDUyLjk0NTk5IC05LjMzMjE4IDUyLjk0NTk5IC05LjMyODIxIDUyLjk0NzQxIC05LjMyNjUgNTIuOTQ4NjggLTkuMzI2NzQgNTIuOTQ4NyAtOS4zMzA0MSA1Mi45NDg2NSAtOS4zMzM3NSA1Mi45NTAzOSAtOS4zMzUxNSA1Mi45NTA0MSAtOS4zMzg5NyA1Mi45NTM0OSAtOS4zNDIxNiA1Mi45NTMzOSAtOS4zNDQ4OCA1Mi45NTEyOSAtOS4zNDU5OSA1Mi45NDk2NyAtOS4zNDgxMyA1Mi45NDgzOSAtOS4zNTA0NyA1Mi45NDc5MiAtOS4zNTMyOSA1Mi45NDc3MSAtOS4zNTYyOSA1Mi45NDY5MiAtOS4zNjA4NiA1Mi45NDY4NyAtOS4zNjgxOCA1Mi45NDQzOSAtOS4zNzA1OSA1Mi45NDIxNSAtOS4zNzM2NiA1Mi45NDE3NyAtOS4zODA0NSA1Mi45NDA4NyAtOS4zODI3MiA1Mi45MzkwOCAtOS4zODQ1MSA1Mi45MzY1MSAtOS4zODg0MyA1Mi45MzU3NyAtOS4zOTc0MyA1Mi45MzcwNyAtOS40MDM3OCA1Mi45MzY0OCAtOS40MTIyIDUyLjkzNjYyIC05LjQxODAyIDUyLjk0MDQ5IC05LjQyMTgzIDUyLjk0MDQ0IC05LjQyNjQgNTIuOTQwMjYgLTkuNDMyOSA1Mi45Mzk3MiAtOS40Mzc5OCA1Mi45MzkwNCAtOS40NDQ3MiA1Mi45MzcyIC05LjQ1IDUyLjkzNzkzIC05LjQ1Mzk2IDUyLjkzNTE4IC05LjQ1NTEgNTIuOTMzODIgLTkuNDU3MjggNTIuOTMzMyAtOS40NjA2OCA1Mi45MzQ2OCAtOS40NjQ3NSA1Mi45MzY0MiAtOS40NjczOCA1Mi45Mzg4MSAtOS40NjYzMiA1Mi45NDA1NSAtOS40NjUxMyA1Mi45NDIyMyAtOS40NjYwNyA1Mi45NDM2IC05LjQ2NzQxIDUyLjk0NTkgLTkuNDY4OTMgNTIuOTQ3MjIgLTkuNDY3MiA1Mi45NDk4MyAtOS40NjQyIDUyLjk1MjExIC05LjQ2MDY4IDUyLjk1Mzc4IC05LjQ1NjU3IDUyLjk1NTY0IC05LjQ1MTE1IDUyLjk1Nzg4IC05LjQ0NzAxIDUyLjk2MDQyIC05LjQ0NDkgNTIuOTYyMDIgLTkuNDQxODYgNTIuOTY1MDEgLTkuNDM2MDQgNTIuOTY3MTYgLTkuNDMzMTIgNTIuOTY3MTYgLTkuNDMzMTIgNTIuOTY3OTkgLTkuNDI3NzcgNTIuOTY4OTMgLTkuNDI2MjggNTIuOTcwNTMgLTkuNDI0NDQgNTIuOTcyNDUgLTkuNDIzNDQgNTIuOTc1MTcgLTkuNDIzOTcgNTIuOTc3MTcgLTkuNDIzMTQgNTIuOTc5MDYgLTkuNDIyNDQgNTIuOTgwODkgLTkuNDIyNjQgNTIuOTgyNTMgLTkuNDIyOTYgNTIuOTg1MSAtOS40MjMwMSA1Mi45ODcyNyAtOS40MTk2MSA1Mi45ODkwMSAtOS40MTU5NyA1Mi45OTAxNSAtOS40MTI5OSA1Mi45OTI0NCAtOS40MTI1MSA1Mi45OTQ3IC05LjQxMDk3IDUyLjk5NyAtOS40MDcxNCA1My4wMDAxOCAtOS40MDM5NSA1My4wMDI3MiAtOS4zOTkyNCA1My4wMDQgLTkuMzkxNTUgNTMuMDA3IC05LjM4ODE1IDUzLjAxMTIxIC05LjM4NjA3IDUzLjAxMTEyIC05LjM4OTg3IDUzLjAxMjc4IC05LjM5MjQ5IDUzLjAxNDE3IC05LjM5NjI2IDUzLjAxNTI4IC05LjM5ODc4IDUzLjAxNjk4IC05LjM5OTU2IDUzLjAxNzU4IC05LjQwMjczIDUzLjAxOTY1IC05LjQwMjIxIDUzLjAyMTg1IC05LjQwMTEgNTMuMDI0MTYgLTkuMzk5NzIgNTMuMDI0NzkgLTkuMzk0NjYgNTMuMDI1ODUgLTkuMzkwMTMgNTMuMDI4OTIgLTkuMzg4MjggNTMuMDMyNCAtOS4zODc0MyA1My4wMzU3OCAtOS4zODM4IDUzLjA0MDY2IC05LjM3OTg1IDUzLjA0NTIgLTkuMzc1NjggNTMuMDQ4NDYgLTkuMzY4NjcgNTMuMDUxMzUgLTkuMzYxNTggNTMuMDU0MjMgLTkuMzYwMDEgNTMuMDU4OTYgLTkuMzU5NTQgNTMuMDYxOTIgLTkuMzYwNTcgNTMuMDY2NjEgLTkuMzU5NDggNTMuMDY5NDIgLTkuMzU2MiA1My4wNzE1OSAtOS4zNTQxOCA1My4wNzU4NCAtOS4zNTI1NSA1My4wNzg5NCAtOS4zNDkxNyA1My4wODA5MiAtOS4zNDMyOSA1My4wODIxMSAtOS4zMzgxNiA1My4wODQxNSAtOS4zMzI1OCA1My4wODcwOCAtOS4zMjYyNiA1My4wODgwNSAtOS4zMTkxMSA1My4wODk1IC05LjMxMTQ0IDUzLjA5MTggLTkuMzA2MjIgNTMuMDk1MzYgLTkuMzAyNzcgNTMuMDk4NDkgLTkuMzAyNzYgNTMuMTAxOTggLTkuMzAwMzcgNTMuMTA2NTcgLTkuMjk1MTMgNTMuMTExMTcgLTkuMjkwMDUgNTMuMTEzOTggLTkuMjg2NzUgNTMuMTE3NzIgLTkuMjgzMTkgNTMuMTIxNjUgLTkuMjgyMjYgNTMuMTI1NzQgLTkuMjgzMTkgNTMuMTI4NzIgLTkuMjgyNjkgNTMuMTMyMDggLTkuMjg0NzEgNTMuMTM1MzkgLTkuMjg0NzMgNTMuMTM3NTYgLTkuMjgyNjkgNTMuMTQxNjggLTkuMjc5MTkgNTMuMTQ1MSAtOS4yNzYzMiA1My4xNDc2IC05LjI3MjIxIDUzLjE1MTU2IC05LjI2NjY5IDUzLjE1NDI5IC05LjI2MiA1My4xNTQ4MyAtOS4yNTY4OSA1My4xNTQ5MSAtOS4yNTAzMiA1My4xNTM2MSAtOS4yNDc3OSA1My4xNTIyIC05LjI0NDI5IDUzLjE1MTQgLTkuMjM3MSA1My4xNTAwNCAtOS4yMzI4NiA1My4xNDgwMSAtOS4yMjc1NyA1My4xNDUxOCAtOS4yMjMyMSA1My4xNDM3NiAtOS4yMTgzNCA1My4xNDE1NCAtOS4yMTU3OCA1My4xNDAwNSAtOS4yMDkzNyA1My4xNDAxNyAtOS4yMDA5NyA1My4xMzkzNyAtOS4xOTI1NiA1My4xMzc3MyAtOS4xODcwNCA1My4xMzc0MSAtOS4xODIyNCA1My4xMzc3MiAtOS4xNzc2OSA1My4xMzc3NSAtOS4xNzMyNiA1My4xMzY5MiAtOS4xNjkxMyA1My4xMzU2NyAtOS4xODA2OCA1My4xMzQ0NyAtOS4xNzkzOCA1My4xMzM4OSAtOS4xNzU3NiA1My4xMzIyIC05LjE3MzYgNTMuMTI5NjcgLTkuMTcyODEgNTMuMTI3MzcgLTkuMTcwMDkgNTMuMTI0NjggLTkuMTYyMjMgNTMuMTIzNjMgLTkuMTU0NjggNTMuMTIxODMgLTkuMTUwMjIgNTMuMTE4NjcgLTkuMTQ2NTUgNTMuMTIxNSAtOS4xNDI4MSA1My4xMjA1IC05LjEzODQ5IDUzLjEyMTU4IC05LjEzNTAyIDUzLjEyMzE2IC05LjEzMjEgNTMuMTI0NzQgLTkuMTI5MTkgNTMuMTI2NjUgLTkuMTI4MTcgNTMuMTI4NTkgLTkuMTIzOTMgNTMuMTMwMTggLTkuMTIwODcgNTMuMTMyNTYgLTkuMTE4NCA1My4xMzcwNiAtOS4xMTU4OCA1My4xMzg2OSAtOS4xMTQ5NyA1My4xMzg4MSAtOS4xMTAzOSA1My4xMzk3OSAtOS4xMDY3NiA1My4xNDA2MyAtOS4xMDUzOCA1My4xNDEyNCAtOS4xMDE4MSA1My4xNDAwMyAtOS4xMDA2NyA1My4xNDAyIC05LjA5ODExIDUzLjE0MTA0IC05LjA5NjU4IDUzLjE0MjE3IC05LjA5NjE4IDUzLjE0MzgxIC05LjA5NDc0IDUzLjE0NDE3IC05LjA5NjcgNTMuMTQ2NDMgLTkuMDk3MjcgNTMuMTQ2NjEgLTkuMTAxMjkgNTMuMTQ4MjIgLTkuMTAyMDYgNTMuMTQ5NjIgLTkuMTA0NDYgNTMuMTQ4ODIgLTkuMTA2OTEgNTMuMTQ3ODggLTkuMTA5OCA1My4xNDc2NyAtOS4xMTQyIDUzLjE0NTQxIC05LjExNTAxIDUzLjE0ODkzIC05LjExNzM1IDUzLjE0OSAtOS4xMjcxNSA1My4xNTE3MyAtOS4xMjQ5MSA1My4xNTE0MSAtOS4xMjE0OCA1My4xNTA4NiAtOS4xMTc0MSA1My4xNTE4MiAtOS4xMTU0MyA1My4xNTQ4NiAtOS4xMTU1NiA1My4xNTU5IC05LjExMSA1My4xNTcyNyAtOS4xMDg1IDUzLjE1ODQyIC05LjEwNTE5IDUzLjE1OTA0IC05LjEwMTMzIDUzLjE1OTEgLTkuMDk1MDUgNTMuMTU4NzQgLTkuMDg5NjMgNTMuMTU4MTcgLTkuMDg1NjkgNTMuMTU3NDIgLTkuMDc5MTMgNTMuMTU0NzcgLTkuMDc3NTUgNTMuMTU1OTcgLTkuMDcyMTEgNTMuMTU0ODYgLTkuMDcwNjggNTMuMTU0NCAtOS4wNjggNTMuMTU1NDUgLTkuMDY0NjcgNTMuMTU2NzkgLTkuMDYyNjIgNTMuMTU3MTEgLTkuMDU2NTUgNTMuMTU4MDkgLTkuMDUyNzYgNTMuMTU4NyAtOS4wNDkzNSA1My4xNTcxIC05LjA0ODQ0IDUzLjE1NjkxIC05LjA0NTggNTMuMTU3MDEgLTkuMDQzMDYgNTMuMTU2MDggLTkuMDQwNDQgNTMuMTU0ODYgLTkuMDQwNjcgNTMuMTUzMTcgLTkuMDM5OSA1My4xNTE0OSAtOS4wMzYwNyA1My4xNDk2MyAtOS4wMzYzMiA1My4xNDk0NiAtOS4wMzM0IDUzLjE1MDU5IC05LjAyOTAxIDUzLjE1MTkzIC05LjAyNTQyIDUzLjE1MDY5IC05LjAyNDU5IDUzLjE1MTI4IC05LjAyMTMzIDUzLjE0OTI4IC05LjAxOTU4IDUzLjE0ODQ4IC05LjAyMzI3IDUzLjE0NzQzIC05LjAyNTIxIDUzLjE0NjMyIC05LjAyNTQ2IDUzLjE0Mzc4IC05LjAxOTMyIDUzLjE0NDc3IC05LjAxNjkgNTMuMTQ0NzIgLTkuMDEzNTggNTMuMTQyMDcgLTkuMDExODEgNTMuMTQxMzIgLTkuMDA4MDEgNTMuMTQyMTggLTkuMDAzMjcgNTMuMTQzODggLTkuMDAyODEgNTMuMTQ2MTYgLTkuMDAzMDkgNTMuMTQ3MTQgLTguOTk5MjggNTMuMTQ5MjIgLTguOTk4NiA1My4xNDkzOCAtOC45OTYxOCA1My4xNDc4NSAtOC45OTI5OCA1My4xNDU2IC04Ljk5MzY0IDUzLjE0MzcxIC04Ljk5Mjk4IDUzLjE0NjAxIC04Ljk4ODgyIDUzLjE0NjA1IC04Ljk4NDA4IDUzLjE0ODA0IC04Ljk4NTk4IDUzLjE0OTY1IC04Ljk4NjU5IDUzLjE1MTYyIC04Ljk4NjE4IDUzLjE1MjcxIC04Ljk4Nzc2IDUzLjE1NDI2IC04Ljk4NjUyIDUzLjE1NDk1IC04Ljk5MDE3IDUzLjE1NzA0IC04Ljk5MzE2IDUzLjE1NTczIC04Ljk5NDkgNTMuMTUzODcgLTguOTk3OTMgNTMuMTUxNjcgLTkuMDAxODEgNTMuMTUzOTIgLTkuMDA0MDUgNTMuMTU1MzggLTkuMDAwMDQgNTMuMTU3MTYgLTkuMDAyMzcgNTMuMTU2MyAtOS4wMDU1NiA1My4xNTU0OCAtOS4wMDgxNyA1My4xNTc0NyAtOS4wMTAwOCA1My4xNTczNSAtOS4wMTM0MiA1My4xNTg5IC05LjAxNjMxIDUzLjE1OTEgLTkuMDIxNDEgNTMuMTU4OTYgLTkuMDI3OCA1My4xNTkyNyAtOS4wMzI2IDUzLjE2MDIyIC05LjAzNDkzIDUzLjE2MjQ4IC05LjAzNTY2IDUzLjE2NDg0IC05LjA0MDA4IDUzLjE2NDc4IC05LjA0Mzg5IDUzLjE2NDQyIC05LjA0NzgxIDUzLjE2Mzc4IC05LjA1MTgzIDUzLjE2MTg0IC05LjA1MTkyIDUzLjE2MTAyIC05LjA1NTkgNTMuMTYwMjkgLTkuMDYxMjkgNTMuMTU5MSAtOS4wNjI0MyA1My4xNTkzMyAtOS4wNjQ0NyA1My4xNTg3OCAtOS4wNzEyNiA1My4xNjEyMSAtOS4wNzM0IDUzLjE2MTk0IC05LjA3NzUxIDUzLjE2NDExIC05LjA4MDk5IDUzLjE2NjM3IC05LjA3ODgxIDUzLjE2ODU4IC05LjA3NjE2IDUzLjE2ODA0IC05LjA3MTkyIDUzLjE2ODEgLTkuMDY4MjUgNTMuMTY5MTggLTkuMDYzMSA1My4xNjg3NyAtOS4wNTg0MiA1My4xNjY5MiAtOS4wNTcxNiA1My4xNjYzOCAtOS4wNTI3NiA1My4xNjczNCAtOS4wNDY4MiA1My4xNjc3NyAtOS4wNDA0OCA1My4xNjg0NSAtOS4wMzQzMiA1My4xNjkyMyAtOS4wMjY5NSA1My4xNjkzNCAtOS4wMTcwMiA1My4xNjg4OCAtOS4wMDYyMSA1My4xNjg5NSAtOC45OTY4OCA1My4xNjk3MyAtOC45ODkyMiA1My4xNjgzNSAtOC45ODIzOCA1My4xNzA4MyAtOC45Nzk3OCA1My4xNzIzNiAtOC45Nzg4MyA1My4xNzM3MyAtOC45NzYzMyA1My4xNzQyOCAtOC45NzA5MiA1My4xNzU0NSAtOC45NjcgNTMuMTc4MDcgLTguOTYxMDQgNTMuMTc3MTEgLTguOTYwMDkgNTMuMTc0OTMgLTguOTYyNDUgNTMuMTcyODYgLTguOTYzMTUgNTMuMTcxMyAtOC45NjMxNiA1My4xNjk2OSAtOC45NjUxNyA1My4xNjc5MSAtOC45Njk3NCA1My4xNjYyNiAtOC45NzIzNCA1My4xNjY4OCAtOC45NzUzNyA1My4xNjU0NCAtOC45NzkyNCA1My4xNjMgLTguOTc4NDggNTMuMTYxNTEgLTguOTc3NDQgNTMuMTYxMzIgLTguOTc0NjUgNTMuMTYgLTguOTcyNDIgNTMuMTU5NDkgLTguOTcwMTggNTMuMTU3NiAtOC45NjY5MiA1My4xNTc0NSAtOC45NjM2OCA1My4xNTc2OSAtOC45NjAwNSA1My4xNTcxNCAtOC45NTQ1OSA1My4xNTU3MSAtOC45NDk3MyA1My4xNTM4MSAtOC45NTA2IDUzLjE1MTg2IC04Ljk0OTQ4IDUzLjE1MzAzIC04Ljk0NTg3IDUzLjE1MTcyIC04Ljk0MzM0IDUzLjE0OTI0IC04Ljk0MzE4IDUzLjE0ODkyIC04Ljk0MTEzIDUzLjE0ODMyIC04LjkzNzY2IDUzLjE0NjA1IC04LjkzNTcxIDUzLjE0Mjg5IC04LjkzNDgzIDUzLjE0MDQyIC04LjkyNzY0IDUzLjE0MzEgLTguOTE5MjYgNTMuMTQ1NTMgLTguOTE4NzkgNTMuMTQ2MDUgLTguOTIxOTMgNTMuMTQ2OTIgLTguOTI1NDYgNTMuMTQ5MDYgLTguOTI4IDUzLjE1MDgyIC04LjkyOTA4IDUzLjE1MzQzIC04LjkzMDAyIDUzLjE1NTkzIC04LjkzMTI1IDUzLjE1OTU0IC04LjkzMjIyIDUzLjE2MjgzIC04LjkzNTQyIDUzLjE2NTk3IC04LjkzMzg1IDUzLjE2OTAzIC04LjkzNTAyIDUzLjE3MDU3IC04Ljk0MDgyIDUzLjE3MjY2IC04Ljk0Mzk3IDUzLjE3MjYzIC04Ljk0NzE4IDUzLjE3NTA4IC04Ljk0NjI2IDUzLjE3NDc2IC04Ljk0Mjk4IDUzLjE3NTc0IC04Ljk0MDcgNTMuMTc3MzcgLTguOTM5NjIgNTMuMTc4NDQgLTguOTQ0MjYgNTMuMTgxMSAtOC45NDMyMiA1My4xODQxIC04Ljk0MjIzIDUzLjE4NjAxIC04Ljk0Mzk3IDUzLjE4NzU2IC04Ljk0Mjg3IDUzLjE4NTQ2IC04LjkzOTcyIDUzLjE4NTA4IC04LjkzMzA4IDUzLjE4NzIgLTguOTM1OTEgNTMuMTg4NzkgLTguOTM4MzUgNTMuMTkxNzUgLTguOTM2NiA1My4xOTM4OCAtOC45MzkxMyA1My4xOTM4OCAtOC45MzkxMyA1My4xOTMyMyAtOC45NDQ4MyA1My4xOTU5MSAtOC45MzkxOSA1My4xOTc3OSAtOC45MzU4NSA1My4xOTg2NyAtOC45MzIzNCA1My4xOTk1NSAtOC45Mjg4MiA1My4yMDAzOCAtOC45MjU5MyA1My4yMDA1OSAtOC45MjI3MyA1My4yMDM3NyAtOC45MjA1NiA1My4yMDQ2MyAtOC45MjI4NyA1My4yMDU2NiAtOC45MjEyMiA1My4yMDgyNiAtOC45MTgxNyA1My4yMDk5OSAtOC45MTI5NyA1My4yMDkxMiAtOC45MDc5IDUzLjIwOTg0IC04LjkwMjY3IDUzLjIxMDA2IC04Ljg5NjU4IDUzLjIwOTIzIC04Ljg5MTA2IDUzLjIwODUxIC04Ljg4Nzg2IDUzLjIwODQ2IC04Ljg4MzEgNTMuMjA5NTcgLTguODc2MSA1My4yMTA3IC04Ljg3MDAzIDUzLjIxMzUyIC04Ljg2NjQgNTMuMjEyNDYgLTguODcxMjYgNTMuMjExNDQgLTguODc3MDUgNTMuMjExOTQgLTguODg2MTkgNTMuMjExODkgLTguODk1MzggNTMuMjEzMjEgLTguOTAzMTMgNTMuMjE0OTMgLTguODk5NDYgNTMuMjE3NTggLTguODk0MTIgNTMuMjE5ODcgLTguODkwMSA1My4yMjEyMyAtOC44ODQ5NyA1My4yMjM5OCAtOC44Nzk0OSA1My4yMjc4OSAtOC44NzQ2OCA1My4yMjY1MSAtOC44ODE2NCA1My4yMjU0MyAtOC44ODU0MyA1My4yMjQzMSAtOC44OTI1OSA1My4yMjE4MiAtOC44OTk2NCA1My4yMTkzMSAtOC45MDgzOSA1My4yMTY4NSAtOC45MTM2MSA1My4yMTMzMSAtOC45MjEwOCA1My4yMTUxIC04LjkyMTg4IDUzLjIxMzg1IC04LjkyNjg1IDUzLjIxMjc2IC04LjkyOTQxIDUzLjIxMzA1IC04LjkzMzMxIDUzLjIxMjQ2IC04LjkzNTM0IDUzLjIxMTUgLTguOTM4NjggNTMuMjA5NzUgLTguOTQyOTcgNTMuMjEgLTguOTQ0NyA1My4yMTAyNSAtOC45NDkxOCA1My4yMDkyNSAtOC45NTE3NiA1My4yMTA0OSAtOC45NTUyMSA1My4yMTIgLTguOTU4ODYgNTMuMjEyMiAtOC45NjUzNCA1My4yMTE2OSAtOC45NzMwNiA1My4yMTEwNyAtOC45ODI0NSA1My4yMDg3MyAtOC45Nzg4MSA1My4yMDkyNSAtOC45NzM4NCA1My4yMDY1MSAtOC45NzIxMSA1My4yMDcyNiAtOC45Nzg4MyA1My4yMDg4NyAtOC45ODIzNiA1My4yMTAyMyAtOC45ODY3NSA1My4yMTE1NiAtOC45OTE1OSA1My4yMTIzMyAtOC45OTgwMSA1My4yMTIxMSAtOS4wMDQxIDUzLjIxMzYzIC05LjAwNjA3IDUzLjIxNDY5IC05LjAwNjczIDUzLjIxNTE1IC05LjAwNDA1IDUzLjIxMzY0IC05LjAwMDQgNTMuMjE0IC04Ljk5NjQ4IDUzLjIxMzcgLTguOTkyNzUgNTMuMjEyNzkgLTguOTg4MjkgNTMuMjEzNjcgLTguOTgzNTUgNTMuMjE0OTQgLTguOTc5NjMgNTMuMjE0NzggLTguOTczNjMgNTMuMjE1MzEgLTguOTY5ODkgNTMuMjE2OSAtOC45NjgxOSA1My4yMTgyNiAtOC45Njg0NCA1My4yMTc4OCAtOC45NzE0NCA1My4yMjAxOCAtOC45NzQxNyA1My4yMTkyMyAtOC45ODQ0MiA1My4yMjEzNSAtOC45ODE0NCA1My4yMjMxMiAtOC45NzU3OSA1My4yMjYzOSAtOC45NzA4NyA1My4yMjUxMSAtOC45NzkwNiA1My4yMjQyOSAtOC45ODQyOSA1My4yMjMwOCAtOC45ODg2NiA1My4yMjYwOCAtOC45OTA3NCA1My4yMjY1NyAtOC45ODg4NCA1My4yMjgxNiAtOC45ODQzOCA1My4yMjk3OCAtOC45Nzc5NCA1My4yMzE1OSAtOC45NzcxOSA1My4yMzM4OSAtOC45NzMwMiA1My4yMzQ0OCAtOC45NjU0NiA1My4yMzQ4IC04Ljk1OTM4IDUzLjIzNTc1IC04Ljk1NDY1IDUzLjIzNjQ5IC04Ljk1MDQ5IDUzLjIzNTUyIC04Ljk0NzA5IDUzLjIzNTAyIC04Ljk0MzYyIDUzLjIzNjAzIC04Ljk0MDg5IDUzLjIzNzc3IC04LjkzOTUzIDUzLjIzOTg4IC04LjkzOTYxIDUzLjIzOTAzIC04Ljk0NDIxIDUzLjIzODggLTguOTQ5MDcgNTMuMjM5NDkgLTguOTUyNDMgNTMuMjM5NTYgLTguOTU1NjUgNTMuMjM4NjkgLTguOTU5MDIgNTMuMjM4MDUgLTguOTYxNjcgNTMuMjM2NzkgLTguOTY0MDQgNTMuMjM3MzcgLTguOTY5MDYgNTMuMjM2NiAtOC45NzM4MiA1My4yMzU0NiAtOC45Nzk3NiA1My4yMzMxIC04Ljk4NzQ0IDUzLjIzMjc0IC04Ljk5MjkgNTMuMjMxODYgLTguOTk2NDEgNTMuMjMyODggLTguOTk3NjggNTMuMjM1MzUgLTguOTkyNDYgNTMuMjM3MzMgLTguOTg3NjIgNTMuMjM4NTcgLTguOTgwMTggNTMuMjM5NjkgLTguOTczMDEgNTMuMjQwNzEgLTguOTY3MzcgNTMuMjM5IC04Ljk2NTM3IDUzLjI0MDI5IC04Ljk1OTc4IDUzLjI0MTQ0IC04Ljk1NzY5IDUzLjI0MzIzIC04Ljk1NTcyIDUzLjI0NTE1IC04Ljk1NDU0IDUzLjI0NTIgLTguOTU3OTIgNTMuMjQ0MzkgLTguOTYxOTEgNTMuMjQ1MiAtOC45NjM0NCA1My4yNDYwNSAtOC45NjcyOCA1My4yNDYyNSAtOC45NzI1NCA1My4yNDcwMyAtOC45Nzc0MyA1My4yNDYyMSAtOC45ODI4MSA1My4yNDc0NyAtOC45ODMyIDUzLjI0ODM5IC04Ljk4MTk4IDUzLjI0ODg0IC04Ljk3NzkzIDUzLjI0OTY4IC04Ljk3NjQgNTMuMjUyMTQgLTguOTc0MDkgNTMuMjU1MjIgLTguOTcyMDUgNTMuMjU2MTEgLTguOTY4MzggNTMuMjU2OSAtOC45NjQ4NCA1My4yNTU4OSAtOC45NjIwNCA1My4yNTU2OSAtOC45NTgwMSA1My4yNTc2MyAtOC45NTUxNSA1My4yNTc0NSAtOC45NTIzNSA1My4yNTczMyAtOC45NDg2NSA1My4yNTczOSAtOC45NDM2IDUzLjI1ODIxIC04Ljk0MDgzIDUzLjI1Njk5IC04LjkzOTg0IDUzLjI1NjEyIC04LjkzNzgzIDUzLjI1NzU2IC04LjkzNjczIDUzLjI1OTE4IC04LjkzNzMyIDUzLjI1ODQgLTguOTMzOTYgNTMuMjU5MzQgLTguOTMwOTIgNTMuMjYwNjYgLTguOTMzMTUgNTMuMjYxOTIgLTguOTM1MDggNTMuMjYyMjUgLTguOTM5NzQgNTMuMjY0MDggLTguOTM3MTYgNTMuMjY0NTkgLTguOTM0OTUgNTMuMjY0ODQgLTguOTMxMTYgNTMuMjY2NDkgLTguOTI5OTMgNTMuMjY4MjIgLTguOTI4NzEgNTMuMjcwNjUgLTguOTI2ODUgNTMuMjcyMTIgLTguOTI2OTYgNTMuMjcyMDUgLTguOTMwNjUgNTMuMjcxNTUgLTguOTM0MDcgNTMuMjcyMDEgLTguOTM2OTMgNTMuMjcxMTMgLTguOTQxODMgNTMuMjcxMTYgLTguOTQ0MTMgNTMuMjcyMDEgLTguOTQ2NTkgNTMuMjcxMjggLTguOTUwNjEgNTMuMjcwMTQgLTguOTUyNTQgNTMuMjcwMTIgLTguOTU4NTIgNTMuMjY5ODYgLTguOTY1MDggNTMuMjY4NzEgLTguOTY3MTcgNTMuMjY3MTMgLTguOTY4NzIgNTMuMjY1NzggLTguOTY4MzEgNTMuMjY0MjcgLTguOTY0NjYgNTMuMjYyMzQgLTguOTYzMjMgNTMuMjYzMjggLTguOTY4NDcgNTMuMjY0MTQgLTguOTcyMTYgNTMuMjYzOTUgLTguOTc1MDQgNTMuMjYzNDIgLTguOTgxNTUgNTMuMjYyNjkgLTguOTg4NDcgNTMuMjY2ODggLTguOTg4OTMgNTMuMjY4NTUgLTguOTg2MDMgNTMuMjY5ODEgLTguOTg1MTggNTMuMjY5NjEgLTguOTg5NTkgNTMuMjY4NDQgLTguOTkxODMgNTMuMjY4NTIgLTguOTk3NjggNTMuMjY4MDIgLTkuMDAzNzMgNTMuMjY3NiAtOS4wMDg1NiA1My4yNzAyNiAtOS4wMTE1MiA1My4yNjkzMiAtOS4wMTU5NCA1My4yNjg2NiAtOS4wMjE2NiA1My4yNjgxOCAtOS4wMjc0MSA1My4yNjg5NCAtOS4wMzI2MSA1My4yNjgzNCAtOS4wMzYwMiA1My4yNjU0OSAtOS4wNDAxIDUzLjI2NTIzIC05LjA0Mzg5IDUzLjI2NDM4IC05LjA0OTcyIDUzLjI2NDA1IC05LjA1NTk2IDUzLjI2MzIxIC05LjA2MyA1My4yNjA0NCAtOS4wNjcwOSA1My4yNTkzOSAtOS4wNzE4IDUzLjI1ODM4IC05LjA3ODY4IDUzLjI1Njk5IC05LjA4NDEgNTMuMjU1MiAtOS4wODg4MiA1My4yNTQxNCAtOS4wOTUwNyA1My4yNTU0NSAtOS4wOTg4NiA1My4yNTcxMSAtOS4xMDAwOSA1My4yNTU3OCAtOS4xMDE5OSA1My4yNTQ0OSAtOS4xMDM0MyA1My4yNTI2NyAtOS4xMDU4NiA1My4yNTUzNCAtOS4xMDcxMiA1My4yNTY0NSAtOS4xMDU2MyA1My4yNTc0NiAtOS4xMDQzIDUzLjI1OTMzIC05LjEwNDA0IDUzLjI1ODMyIC05LjExMDc0IDUzLjI1NzQyIC05LjExMzE5IDUzLjI1NzgyIC05LjExODE4IDUzLjI1Njg5IC05LjExOTUzIDUzLjI1NiAtOS4xMjE4MyA1My4yNTQ0MSAtOS4xMjM1MyA1My4yNTM4OCAtOS4xMjE4OSA1My4yNTM1NyAtOS4xMTgzIDUzLjI1MjM2IC05LjExNzE1IDUzLjI1MjY3IC05LjExNTM2IDUzLjI1MzU1IC05LjExMzIzIDUzLjI1MzAyIC05LjExMTU5IDUzLjI1NDA1IC05LjEwODU2IDUzLjI1MTQ5IC05LjEwOTQ2IDUzLjI1MDY3IC05LjExMjIzIDUzLjI1MDQxIC05LjExNzU0IDUzLjI1MDU2IC05LjEyMzI1IDUzLjI1MDM5IC05LjEyOTgzIDUzLjI0OTE0IC05LjEzMjA0IDUzLjI0OTgyIC05LjEzODMxIDUzLjI0OTQgLTkuMTQzMTQgNTMuMjQ3OTcgLTkuMTQ3NzggNTMuMjQ2ODUgLTkuMTUyMTggNTMuMjQ2MDEgLTkuMTU3NTUgNTMuMjQ1OSAtOS4xNjMzNSA1My4yNDcxMiAtOS4xNjk3MyA1My4yNDYzMyAtOS4xNzMxIDUzLjI0NjA3IC05LjE3NTgyIDUzLjI0NjY3IC05LjE3OSA1My4yNDc2NiAtOS4xODIxIDUzLjI0NzIgLTkuMTg2MTcgNTMuMjQ3MDUgLTkuMTkxMDQgNTMuMjQ3NzYgLTkuMTk3OTMgNTMuMjQ3MTQgLTkuMjAwNDIgNTMuMjQ2MjQgLTkuMjA0MDkgNTMuMjQ3MTIgLTkuMjA3NDcgNTMuMjQ2NTQgLTkuMjExODMgNTMuMjQ3NTggLTkuMjEyNzggNTMuMjQ4ODggLTkuMjEzOTYgNTMuMjQ5NzYgLTkuMjE1ODEgNTMuMjUwMyAtOS4yMTg2NyA1My4yNDk1IC05LjIyMDk4IDUzLjI0ODM4IC05LjIyMjYgNTMuMjQ4MTUgLTkuMjI0NTYgNTMuMjQ3NTkgLTkuMjMyNzQgNTMuMjQ2NjcgLTkuMjM1MzMgNTMuMjQ0OTcgLTkuMjM4NTQgNTMuMjQ2MTQgLTkuMjQxNjggNTMuMjQ0OCAtOS4yNTA0NyA1My4yNDM5MyAtOS4yNTkwNiA1My4yNDMwMSAtOS4yNjU2MyA1My4yNDM3OSAtOS4yNjkgNTMuMjQzOTggLTkuMjczMDMgNTMuMjQ0MDcgLTkuMjc4NDEgNTMuMjQzMDggLTkuMjgxOTIgNTMuMjQyOCAtOS4yODQ3NyA1My4yNDM2NyAtOS4yODgwMSA1My4yNDM4MSAtOS4yOTI3OSA1My4yNDI5OCAtOS4yOTY3OCA1My4yNDI0MiAtOS4yOTk0NCA1My4yNDMzNSAtOS4zMDIwNiA1My4yNDE5OCAtOS4zMDQ0MSA1My4yNDA3NyAtOS4zMDYwMiA1My4yNDAwMSAtOS4zMDc3MiA1My4yNDA3IC05LjMxMDkzIDUzLjI0MDYyIC05LjMxNjEzIDUzLjIzOTk2IC05LjMyMDI5IDUzLjIzOTM3IC05LjMyNDc5IDUzLjI0MDI4IC05LjMyODU4IDUzLjIzODg1IC05LjMzMjMxIDUzLjIzOTc5IC05LjMzNDkzIDUzLjI0MDI5IC05LjMzODU0IDUzLjI0MTY3IC05LjM0MjkzIDUzLjI0MjQxIC05LjM0ODU4IDUzLjI0MjQ5IC05LjM1NDczIDUzLjI0MSAtOS4zNjA3NSA1My4yMzkxNCAtOS4zNjUzMiA1My4yMzc2OSAtOS4zNjkyIDUzLjIzNjc1IC05LjM3Mzc5IDUzLjIzNjQzIC05LjM3ODc5IDUzLjIzNjI0IC05LjM4NjEyIDUzLjIzNTA1IC05LjM5MzI3IDUzLjIzNDY2IC05LjM5NjU3IDUzLjIzNTMxIC05LjM5OTE0IDUzLjIzNDggLTkuNDA0MjUgNTMuMjM1MjcgLTkuNDA4NDggNTMuMjM1MjEgLTkuNDEzNjggNTMuMjM0MTMgLTkuNDE2MjUgNTMuMjMzNjMgLTkuNDE5NjggNTMuMjMzNTMgLTkuNDIyNzQgNTMuMjM0MiAtOS40MjY1MyA1My4yMzUwNyAtOS40MzAwNSA1My4yMzUyNyAtOS40MzQyMyA1My4yMzM0MSAtOS40Mzg4IDUzLjIzNDE2IC05LjQ0MjkyIDUzLjIzNDM1IC05LjQ0Njk0IDUzLjIzMzYgLTkuNDUwMTkgNTMuMjMyMzEgLTkuNDUxNDggNTMuMjMwNTUgLTkuNDUzMTYgNTMuMjI4NjMgLTkuNDU1NzQgNTMuMjI3MTUgLTkuNDU4NjggNTMuMjI2MzkgLTkuNDYxOTIgNTMuMjI2NzMgLTkuNDY1MiA1My4yMjkxOSAtOS40Njg0IDUzLjIyODUzIC05LjQ3NDQyIDUzLjIyODk4IC05LjQ3NzQgNTMuMjI4NTUgLTkuNDc5NjQgNTMuMjI3NzIgLTkuNDgyNyA1My4yMjU3MSAtOS40ODUyNSA1My4yMjYzIC05LjQ5MzE3IDUzLjIyNDM0IC05LjQ5NjQ5IDUzLjIyMzAxIC05LjQ5ODQgNTMuMjIyODkgLTkuNTAzMTMgNTMuMjIxNjkgLTkuNTA3MzYgNTMuMjIzNTggLTkuNTEyMyA1My4yMjI5IC05LjUxNTcgNTMuMjIyOTIgLTkuNTE4MTcgNTMuMjIzOTQgLTkuNTIwOTUgNTMuMjI1MzcgLTkuNTIzMDUgNTMuMjI3MTEgLTkuNTI0NDQgNTMuMjI5MjkgLTkuNTI2MzYgNTMuMjMxNTMgLTkuNTI4NzYgNTMuMjMyMzEgLTkuNTMyNDMgNTMuMjMzMDQgLTkuNTM2NyA1My4yMzQ3NCAtOS41NDAwOCA1My4yMzY4MSAtOS41NDI0NCA1My4yMzgzOSAtOS41NDc3OSA1My4yNDI0MyAtOS41NDYzOCA1My4yNDQ4MSAtOS41NDUyOCA1My4yNDM3NCAtOS41NDMyNCA1My4yNDI2MyAtOS41NDE5NiA1My4yNDI0OSAtOS41Mzk5NSA1My4yNDI5MyAtOS41Mzc0MiA1My4yNDM5MyAtOS41MzYyMSA1My4yNDU4NyAtOS41Mzc1IDUzLjI0NzM2IC05LjU0MDA2IDUzLjI0NjkyIC05LjU0MjYgNTMuMjQ5MzMgLTkuNTQzOCA1My4yNTA4NyAtOS41NDEzMiA1My4yNTM1NyAtOS41NDIyNiA1My4yNTUyNiAtOS41NDMxOCA1My4yNTcyOSAtOS41NDQ0NyA1My4yNTkyMSAtOS41NDMyOSA1My4yNjA4MSAtOS41NDQyIDUzLjI1OTg0IC05LjU0OTA3IDUzLjI1NjYxIC05LjU0NzczIDUzLjI1NTQgLTkuNTQ5NSA1My4yNTM5MiAtOS41NDk1MyA1My4yNTE1OCAtOS41NTAxOSA1My4yNTEzNiAtOS41NTIxNCA1My4yNTIyOCAtOS41NTM1MiA1My4yNTM5NCAtOS41NTQ5MSA1My4yNTczNCAtOS41NTYyOSA1My4yNjEwMiAtOS41NTc3MiA1My4yNjQzNCAtOS41NTkwOSA1My4yNjQzNCAtOS41NTkwOSA1My4yNjU3OSAtOS41NTY2IDUzLjI2NjMgLTkuNTU0NCA1My4yNjczNyAtOS41NTM2NyA1My4yNjgxOCAtOS41NTI0MyA1My4yNjg3OSAtOS41NDg4NiA1My4yNzEwNCAtOS41NDgxOSA1My4yNzI0MSAtOS41NDgyOSA1My4yNzM4OSAtOS41NDgxIDUzLjI3NTM0IC05LjU0NTc1IDUzLjI3NjA1IC05LjU0MjA0IDUzLjI3NjQgLTkuNTM3OTcgNTMuMjc4MDYgLTkuNTM2NTcgNTMuMjc5NiAtOS41MzU0OCA1My4yODA5OSAtOS41MzUyNiA1My4yODIzMSAtOS41MzYyNyA1My4yODM1MSAtOS41Mzc1NyA1My4yODUxMSAtOS41Mzk4NSA1My4yODYzMiAtOS41NDI2NyA1My4yODcwOCAtOS41NDYzNCA1My4yODg2OCAtOS41NDg2NCA1My4yODg4OCAtOS41NTI4MiA1My4yODcxOSAtOS41NTMxMiA1My4yODcyMiAtOS41NTY5NiA1My4yODYyIC05LjU1ODQ3IDUzLjI4NDk5IC05LjU1MTY1IDUzLjI4MzY4IC05LjU1MDQ5IDUzLjI4MjQzIC05LjU0ODU0IDUzLjI4MTY0IC05LjU1MzQ5IDUzLjI4MjY4IC05LjU1NzM2IDUzLjI4MjU5IC05LjU2MDExIDUzLjI4MDI1IC05LjU2MzY4IDUzLjI3OTc3IC05LjU2NjY3IDUzLjI3ODU4IC05LjU2OTM2IDUzLjI3NTc3IC05LjU3MDA3IDUzLjI3MzQ5IC05LjU3NTQ5IDUzLjI3MTkzIC05LjU3ODEyIDUzLjI2OTUgLTkuNTc3MzggNTMuMjY2NDEgLTkuNTczOSA1My4yNjE1NCAtOS41NjgxMSA1My4yNjAxOSAtOS41NjkwOCA1My4yNTI1NSAtOS41NzMyMiA1My4yNDY3NCAtOS41NzA2MiA1My4yNDUwNCAtOS41NzQxNSA1My4yNDM3NCAtOS41NzY5NyA1My4yNDIwOSAtOS41Nzk3NCA1My4yNDAyOSAtOS41ODA1IDUzLjIzODAyIC05LjU4MDA3IDUzLjIzNjQzIC05LjU3OTAxIDUzLjIzNjgxIC05LjU4MTY5IDUzLjIzNDY0IC05LjU4Mzc2IDUzLjIzNjUyIC05LjU4NjA4IDUzLjIzNzA0IC05LjU4ODAyIDUzLjI0MTY4IC05LjU4NzM1IDUzLjIzOTk1IC05LjU5MTMyIDUzLjI0MDE3IC05LjU5MzY2IDUzLjIzOTU5IC05LjU5Njc3IDUzLjIzODg2IC05LjYwMDkzIDUzLjIzNjQyIC05LjYwNDMyIDUzLjIzMjY2IC05LjYwNzAxIDUzLjIzNTM4IC05LjYxMDI2IDUzLjIzNjQxIC05LjYxNTY3IDUzLjIzODAyIC05LjYyMDcyIDUzLjI0MDM0IC05LjYyMDIyIDUzLjI0Mzk5IC05LjYxOTUxIDUzLjI0NjQ0IC05LjYyMjcyIDUzLjI0OTQ4IC05LjYyNDA0IDUzLjI1MTg0IC05LjYyNDYzIDUzLjI1NTY0IC05LjYyMjg3IDUzLjI1NzY0IC05LjYyMTg2IDUzLjI2MDMxIC05LjYyMDUxIDUzLjI2MzAxIC05LjYxOTkyIDUzLjI2NSAtOS42MTc2OCA1My4yNjY5NCAtOS42MTQ4MSA1My4yNjk3MiAtOS42MDg4NyA1My4yNzIwMyAtOS42MDMxNiA1My4yNzQzNSAtOS42MDI5NiA1My4yNzYxNCAtOS42MDEgNTMuMjc3ODggLTkuNTk4MjQgNTMuMjgwNDUgLTkuNTk1NjQgNTMuMjgyNDMgLTkuNTkzNTUgNTMuMjg0NjEgLTkuNTkyNDEgNTMuMjg1NjEgLTkuNTk1NTEgNTMuMjg3NTMgLTkuNTk1NyA1My4yODg4MiAtOS41OTcwMiA1My4yOTAyOCAtOS41OTg2NyA1My4yODk3NCAtOS41OTI4OSA1My4yOTE0NyAtOS41OTMyMSA1My4yOTMwOSAtOS41OTM5NSA1My4yOTUgLTkuNTk0MTYgNTMuMjk0OTggLTkuNTk3MjMgNTMuMjk1MDQgLTkuNTk5MjMgNTMuMjk1MjQgLTkuNjAxNzIgNTMuMjk1ODUgLTkuNjAzNjcgNTMuMjk4MzMgLTkuNjAzNjcgNTMuMjk5NDkgLTkuNjAxNDMgNTMuMzAyMTQgLTkuNjA0NTMgNTMuMzA0NzYgLTkuNjA1MzEgNTMuMzA2NzkgLTkuNjA1MjMgNTMuMzA5MjYgLTkuNjA1NTIgNTMuMzExODcgLTkuNjA0OTMgNTMuMzEzNjYgLTkuNjA0MzIgNTMuMzE0ODkgLTkuNjA4MDggNTMuMzE0NTcgLTkuNjExNTYgNTMuMzE0NDcgLTkuNjE0NDYgNTMuMzE2NDEgLTkuNjE1NzMgNTMuMzE4NTIgLTkuNjE1ODIgNTMuMzIwMDkgLTkuNjE3MDMgNTMuMzIzNzcgLTkuNjEyOTQgNTMuMzI2OTIgLTkuNjE1MzYgNTMuMzI3NjYgLTkuNjA1NjYgNTMuMzI4NTggLTkuNjAxNTIgNTMuMzI3NzQgLTkuNTk4OTIgNTMuMzI2ODQgLTkuNTk3MjEgNTMuMzI2NjMgLTkuNTkzMzIgNTMuMzMwMTMgLTkuNTkwNDQgNTMuMzMwMjIgLTkuNTgyIDUzLjMyNzA1IC05LjU3OTg4IDUzLjMyNDk4IC05LjU3NzgyIDUzLjMyMjQ5IC05LjU3NTA2IDUzLjMxOTggLTkuNTcyNDMgNTMuMzE5NjcgLTkuNTY4ODYgNTMuMzIxMjcgLTkuNTY4MzggNTMuMzIzNDEgLTkuNTY4MDEgNTMuMzI1MzEgLTkuNTY4NTEgNTMuMzI2ODQgLTkuNTcwMzMgNTMuMzI4MTkgLTkuNTcyNDEgNTMuMzMwNSAtOS41NzM2MSA1My4zMzI1NSAtOS41NzMyMSA1My4zMzE4NCAtOS41Njg2MyA1My4zMzQ3MyAtOS41NjUxNSA1My4zMzUxNSAtOS41NjE2OSA1My4zMzkzNCAtOS41NjY2IDUzLjM0MDc2IC05LjU2ODcxIDUzLjM0MjM1IC05LjU2ODM4IDUzLjM0NjY3IC05LjU2NDI1IDUzLjM0MzI2IC05LjU2Mjg2IDUzLjM0MTgyIC05LjU2MTA2IDUzLjMzOTUxIC05LjU1NjggNTMuMzM0OTIgLTkuNTU4MTEgNTMuMzMwODEgLTkuNTU5MDYgNTMuMzI3MjcgLTkuNTU5NjUgNTMuMzIzODMgLTkuNTYwMjQgNTMuMzIzMzkgLTkuNTU0MzMgNTMuMzEyNDIgLTkuNTQ4OCA1My4zMTUxOCAtOS41NDc0NyA1My4zMTc1MSAtOS41NDY5NyA1My4zMTkxMyAtOS41NDYxOCA1My4zMjA3NiAtOS41NDUyNSA1My4zMjEyOCAtOS41NDg1NiA1My4zMjIzMyAtOS41NDkzNyA1My4zMjM0NCAtOS41NTA2NSA1My4zMjUwMSAtOS41NTIwMSA1My4zMjY0MyAtOS41NTQyNyA1My4zMjc4MiAtOS41NTY4MyA1My4zMjk2MyAtOS41NTczMSA1My4zMzEyOSAtOS41NTU5MiA1My4zMzM1NCAtOS41NTUyNiA1My4zMzU3MiAtOS41NTQyNyA1My4zMzc5NCAtOS41NTI4MyA1My4zMzkyOSAtOS41NTAzMSA1My4zNDA5MSAtOS41NDY3NiA1My4zNDM0NiAtOS41NDI5MiA1My4zNDU5NCAtOS41NDE2OCA1My4zNDQ0MiAtOS41NDUwOSA1My4zNDQwMiAtOS41NDg0MSA1My4zNDQzNiAtOS41NTAzMSA1My4zNDYwNCAtOS41NTI3NiA1My4zNDg1IC05LjU1NDYgNTMuMzQ4MTggLTkuNTU5NDYgNTMuMzQ5NzUgLTkuNTYyMDYgNTMuMzUwNTcgLTkuNTY1MTEgNTMuMzQ5NjUgLTkuNTY3ODcgNTMuMzQ2MzIgLTkuNTY5NTcgNTMuMzQ2NTcgLTkuNTcxNDYgNTMuMzUwNjkgLTkuNTcxNzUgNTMuMzUyOTIgLTkuNTcyNzggNTMuMzU1ODUgLTkuNTcxNzggNTMuMzU2NzYgLTkuNTczMTcgNTMuMzUzNjggLTkuNTc2NjEgNTMuMzUzODUgLTkuNTc5NzEgNTMuMzU2MTIgLTkuNTgzMDQgNTMuMzU2NTMgLTkuNTg2NjUgNTMuMzU4NjEgLTkuNTg4NTcgNTMuMzYyOSAtOS41OTE4MiA1My4zNjQ5OSAtOS41ODgyIDUzLjM2NzI1IC05LjU4NTk5IDUzLjM2OTYgLTkuNTg1MiA1My4zNzEzNCAtOS41ODY3NSA1My4zNzI1OSAtOS41ODU4OSA1My4zNzM2NyAtOS41ODM2NCA1My4zNzM1NSAtOS41Nzk3NyA1My4zNzM0MyAtOS41NzQ1MiA1My4zNzc2NCAtOS41Njc5IDUzLjM3NzYzIC05LjU2Mzc0IDUzLjM3NzM2IC05LjU1OTU0IDUzLjM3ODI2IC05LjU1NTQxIDUzLjM3NjMyIC05LjU1Mjg5IDUzLjM3Njc0IC05LjU0OTI3IDUzLjM3ODk2IC05LjU0NzY4IDUzLjM3ODA2IC05LjU0MTY3IDUzLjM3OTk2IC05LjU0MjE4IDUzLjM4MTgxIC05LjU0NDgxIDUzLjM4MzMzIC05LjU0ODMyIDUzLjM4MzM3IC05LjU1MjAyIDUzLjM4NCAtOS41NTUwNiA1My4zODM4NCAtOS41NTc1IDUzLjM4Mjg4IC05LjU1OTQ3IDUzLjM4MDUgLTkuNTYwNzMgNTMuMzgwMTQgLTkuNTY0ODMgNTMuMzgzNjYgLTkuNTY3MzEgNTMuMzgzMDUgLTkuNTY5NjYgNTMuMzc4OTggLTkuNTcxMjIgNTMuMzgxNDUgLTkuNTc0MjkgNTMuMzgwNTMgLTkuNTc5OTcgNTMuMzgxNDUgLTkuNTgyNzUgNTMuMzc5MzkgLTkuNTkwMjIgNTMuMzc3NDYgLTkuNTkwMTcgNTMuMzc2NjIgLTkuNTkzMjUgNTMuMzgxNjIgLTkuNTk1NTUgNTMuMzgzMiAtOS41OTk1NCA1My4zODAyNCAtOS42MDI2OCA1My4zNzg3NCAtOS42MDU2NCA1My4zNzY5NCAtOS42MDUxNiA1My4zNzQ5IC05LjYwNDAyIDUzLjM3MzQyIC05LjYwMTI5IDUzLjM2OTc4IC05LjYwMDYyIDUzLjM2OTQ4IC05LjU5Njg3IDUzLjM2NzU1IC05LjU5NTQzIDUzLjM2Njc3IC05LjU5MzI5IDUzLjM2MjMxIC05LjU5NjYzIDUzLjM1ODkgLTkuNTk1MzkgNTMuMzU2NDUgLTkuNTk0NzkgNTMuMzUzMTEgLTkuNTk1MjYgNTMuMzUzMTEgLTkuNTk1MjYgNTMuMzUxNCAtOS41OTc0IDUzLjM0OTQ5IC05LjU5NzA1IDUzLjM0ODg4IC05LjYwMjE2IDUzLjM1MDU5IC05LjYwNDE3IDUzLjM0NjMzIC05LjYwNiA1My4zNDY2OSAtOS42MDE5MyA1My4zNDU0NSAtOS41OTk3IDUzLjM0NjU4IC05LjU5NTE0IDUzLjM0NDczIC05LjU5MjM0IDUzLjM0MzI2IC05LjU5MDk5IDUzLjM0MDUgLTkuNTkwOTQgNTMuMzM3ODYgLTkuNTg3NyA1My4zMzU3OSAtOS41OTExNyA1My4zMzYyOSAtOS41OTYzMiA1My4zMzUyNCAtOS41OTk1MiA1My4zMzQ2IC05LjYwMjE3IDUzLjMzMzEyIC05LjYwMzkgNTMuMzM0NjQgLTkuNjA1ODcgNTMuMzM0MSAtOS42MDk5MiA1My4zMzU0MiAtOS42MTA5MiA1My4zMzMxOCAtOS42MTQyIDUzLjMzMDcxIC05LjYxOTQzIDUzLjMzMzEyIC05LjYyNDc5IDUzLjMzMjU3IC05LjYzNDUzIDUzLjMzMjYgLTkuNjM2OTkgNTMuMzM1OTUgLTkuNjQwNTQgNTMuMzM2MjYgLTkuNjQ0MTMgNTMuMzM2NjEgLTkuNjQ5ODcgNTMuMzM4MzYgLTkuNjU1NTggNTMuMzQwMzcgLTkuNjU4NTUgNTMuMzQxMDcgLTkuNjUzNjIgNTMuMzQyNjEgLTkuNjUxMjkgNTMuMzQyNTEgLTkuNjQ1NzMgNTMuMzQ0MjMgLTkuNjQzMjggNTMuMzQzMTggLTkuNjM5ODYgNTMuMzQxNiAtOS42Mzg2NSA1My4zNDA2MSAtOS42MzU1NSA1My4zNDE0NyAtOS42MjgwMiA1My4zNDI5MSAtOS42MjU2NyA1My4zNDI3NSAtOS42MjEwMyA1My4zNDU0IC05LjYxOTk4IDUzLjM0NzAyIC05LjYxNTA2IDUzLjM0ODE4IC05LjYxODM0IDUzLjM0OTE3IC05LjYyMTU5IDUzLjM0ODQ5IC05LjYyNjIzIDUzLjM0ODUgLTkuNjMxNzcgNTMuMzQ3NDggLTkuNjM2MDQgNTMuMzQ5MSAtOS42MzY2NSA1My4zNTE1MSAtOS42MzYzMiA1My4zNTMzMyAtOS42Mzk0MiA1My4zNTM4NSAtOS42MzQzIDUzLjM1NDc3IC05LjYzMjkzIDUzLjM1NTg4IC05LjYzMTQ0IDUzLjM1NzIyIC05LjYyNzg0IDUzLjM1OTIgLTkuNjI0MzYgNTMuMzYxMzkgLTkuNjE5MDcgNTMuMzYyMTggLTkuNjIyMyA1My4zNjQ1NyAtOS42MjUzNSA1My4zNjg4NCAtOS42MjYxMyA1My4zNzMwNyAtOS42MjkwNSA1My4zNzM4IC05LjYyNjI3IDUzLjM3NTEzIC05LjYyMjk3IDUzLjM3NDE0IC05LjYyMTI2IDUzLjM3MzY1IC05LjYxNDU1IDUzLjM3NTkyIC05LjYxNzg5IDUzLjM3NzEgLTkuNjIwODcgNTMuMzgwMjYgLTkuNjIwNTQgNTMuMzc5MzggLTkuNjI0MDcgNTMuMzc4OTUgLTkuNjI3ODMgNTMuMzc1OTcgLTkuNjMxMTMgNTMuMzc0OSAtOS42MzQ3OSA1My4zNzI3NyAtOS42MzYzOSA1My4zNzIwNiAtOS42Mzg3MiA1My4zNzMyMSAtOS42MzkzOSA1My4zNzUzIC05LjYzNyA1My4zNzcwNiAtOS42MzU0OSA1My4zNzkxNCAtOS42MzQ2MyA1My4zODE1OCAtOS42MzEyNCA1My4zODQ4NiAtOS42Mjc1MyA1My4zODY4NiAtOS42MjUxMyA1My4zODgxMSAtOS42MjU4MiA1My4zODU5NyAtOS42MzAyIDUzLjM4OTY3IC05LjYyOTk2IDUzLjM4NzMgLTkuNjM1MjEgNTMuMzg4MDMgLTkuNjM5NSA1My4zODY3NiAtOS42NDYyIDUzLjM4ODUzIC05LjY0ODY4IDUzLjM4NTIzIC05LjY1MTE1IDUzLjM4Mjk4IC05LjY0OTA0IDUzLjM4MTE5IC05LjY0OTYzIDUzLjM4MDI2IC05LjY1MTMgNTMuMzc4MTggLTkuNjUzNTMgNTMuMzc2NTEgLTkuNjU3ODUgNTMuMzc1MDkgLTkuNjU4MzUgNTMuMzcyODQgLTkuNjU0ODcgNTMuMzY4MjEgLTkuNjU4MDEgNTMuMzY3NzkgLTkuNjYzMDEgNTMuMzY2NTMgLTkuNjcwOTMgNTMuMzY4NDQgLTkuNjcyNjYgNTMuMzY5NTkgLTkuNjc2MTEgNTMuMzY1MDcgLTkuNjc0ODEgNTMuMzYzNjEgLTkuNjc3NDUgNTMuMzYzODcgLTkuNjgxODIgNTMuMzYwOTkgLTkuNjg0OTggNTMuMzYwMDggLTkuNjg5MSA1My4zNTc2NyAtOS42ODkyOCA1My4zNTcwOCAtOS42OTI3MSA1My4zNTY2NiAtOS42OTYxNiA1My4zNTY2NiAtOS42OTYxNiA1My4zNTQ3NyAtOS42OTU1MiA1My4zNTUyOSAtOS42OTMzMSA1My4zNTQ2IC05LjY5MTE4IDUzLjM1MjQyIC05LjY5MjE1IDUzLjM1MDQgLTkuNjkyMDggNTMuMzQ2MjcgLTkuNjk3MzIgNTMuMzQzMjIgLTkuNzAwMjkgNTMuMzQwNzMgLTkuNzAwMjggNTMuMzQyNTcgLTkuNzA0NDggNTMuMzM5MTIgLTkuNzA2NDUgNTMuMzM2MTcgLTkuNzA2NjYgNTMuMzM1MjcgLTkuNzAyMTkgNTMuMzMzNTEgLTkuNzAyMzQgNTMuMzMyMTYgLTkuNzA4NjggNTMuMzMzMzYgLTkuNzA5OTkgNTMuMzMxNDUgLTkuNzEzNzggNTMuMzI5MTMgLTkuNzEyNzUgNTMuMzI0OCAtOS43MjUxNiA1My4zMjMyMyAtOS43MjUxNiA1My4zMjE0IC05LjcyNjUyIDUzLjMxOTUxIC05LjcyMzEgNTMuMzE2NjEgLTkuNzI1MTcgNTMuMzEzNzQgLTkuNzIyNjMgNTMuMzEwMjkgLTkuNzI0NjEgNTMuMzA3IC05LjcyNzA3IDUzLjMwNzI0IC05LjczMTcyIDUzLjMwNTcxIC05LjczMTI5IDUzLjMwNDg0IC05LjczNDY1IDUzLjMwODI2IC05LjczNTc1IDUzLjMwODA2IC05LjczODYzIDUzLjMwNzI0IC05Ljc0MTQgNTMuMzA0NyAtOS43NDYzMSA1My4zMDU1IC05Ljc1MzUzIDUzLjMwMTkyIC05Ljc1NzQ1IDUzLjMwMTY1IC05Ljc2NTU0IDUzLjI5ODA0IC05Ljc2NDU4IDUzLjI5NjAyIC05Ljc2MzEyIDUzLjI5Mzg3IC05Ljc2MzQ5IDUzLjI5MTA2IC05Ljc2NTcyIDUzLjI5NDUgLTkuNzY5MjkgNTMuMjk2MTMgLTkuNzcxMTIgNTMuMjk4MTIgLTkuNzc0MjYgNTMuMzAyODUgLTkuNzcyMzkgNTMuMzAwNjcgLTkuNzc2MTIgNTMuMzAyNzEgLTkuNzgyODEgNTMuMzAzNzkgLTkuNzg4NTQgNTMuMzA1NDggLTkuNzkzNjEgNTMuMzA4MDEgLTkuNzk1NzcgNTMuMzA3ODUgLTkuNzk5NDQgNTMuMzA5NCAtOS44MDIzMyA1My4zMTExIC05LjgwNDUgNTMuMzEzNzkgLTkuODAyODUgNTMuMzE1MDcgLTkuODA1NzIgNTMuMzE3MjUgLTkuODA0NzQgNTMuMzE4OSAtOS44MDQ4OCA1My4zMjAwMyAtOS44MDU4NyA1My4zMjE4NyAtOS44MDcyOCA1My4zMTk5NiAtOS44MTA5NCA1My4zMjEzMyAtOS44MTM4IDUzLjMxODU5IC05LjgxNDgyIDUzLjMxNzM4IC05LjgxMjQ0IDUzLjMxNTM2IC05LjgxMjIxIDUzLjMxMjIxIC05LjgxMzkyIDUzLjMxMDgzIC05LjgwODQ0IDUzLjMwOTg0IC05LjgxMjEgNTMuMzEwNTIgLTkuODE1NzcgNTMuMzExMDMgLTkuODE3NzEgNTMuMzEzNDggLTkuODE4MzIgNTMuMzExNjUgLTkuODIyMjggNTMuMzExOSAtOS44MjQwMSA1My4zMTQwMSAtOS44MjU0OSA1My4zMTYzNSAtOS44Mjc2MiA1My4zMTgwMSAtOS44MjYyNCA1My4zMTkxNCAtOS44Mjg2MSA1My4zMjE2IC05LjgzMTY4IDUzLjMyMzY0IC05LjgzMTYgNTMuMzIzNTggLTkuODM0OTggNTMuMzIyMSAtOS44Mzc5MiA1My4zMjE2MyAtOS44Mzk1MiA1My4zMjEzNiAtOS44NDYwOCA1My4zMjU0MyAtOS44NDczMSA1My4zMjczIC05Ljg0OTUxIDUzLjMzMDk2IC05Ljg1MjY2IDUzLjMzMDIzIC05Ljg1NjUyIDUzLjMyMyAtOS44NTMxNiA1My4zMjAzIC05Ljg1MjMzIDUzLjMxODIgLTkuODU0NyA1My4zMTQ0NSAtOS44NTI5MyA1My4zMTI4MSAtOS44NTUzNyA1My4zMTI4OSAtOS44NTgzMSA1My4zMTE2NyAtOS44NjEzMSA1My4zMTQ5MyAtOS44NjIyMyA1My4zMTU0NCAtOS44NjQxNyA1My4zMTIxNSAtOS44NjY0NyA1My4zMTA2MiAtOS44NzAwMiA1My4zMTEyMSAtOS44NzIxNCA1My4zMTM4OCAtOS44NzIxNyA1My4zMTQ5NCAtOS44NzU0NSA1My4zMTY5IC05Ljg3NTIxIDUzLjMxODUyIC05Ljg3NDI5IDUzLjMyMTMxIC05Ljg3NDA1IDUzLjMxOTUyIC05Ljg3NzM5IDUzLjMxOTA1IC05Ljg4MDIzIDUzLjMxNzkxIC05Ljg4MzM5IDUzLjMxNzU3IC05Ljg4NTYzIDUzLjMxODkxIC05Ljg4NjM2IDUzLjMyMTA2IC05Ljg4NzIyIDUzLjMyMTgxIC05Ljg5MTA1IDUzLjMyNTQ1IC05Ljg5Mjk3IDUzLjMyNjY4IC05Ljg4OTgyIDUzLjMyNzQyIC05Ljg4NTY1IDUzLjMzIC05Ljg4NTY4IDUzLjMzMTg5IC05Ljg4NjM1IDUzLjMzNTQ1IC05Ljg4NjcyIDUzLjMzOTM4IC05Ljg4MTc4IDUzLjMzNjcgLTkuODc1MTEgNTMuMzM3MjQgLTkuODcyNiA1My4zNDAxMSAtOS44NzIzOSA1My4zNDE2NiAtOS44NzE0NCA1My4zNDI4MyAtOS44NzE2NiA1My4zNDMwNCAtOS44NzU0IDUzLjM0NjY1IC05Ljg3MzkyIDUzLjM0ODMyIC05Ljg2Njg1IDUzLjM1MDU3IC05Ljg2NDgyIDUzLjM1MjMyIC05Ljg2MzYzIDUzLjM1MzQxIC05Ljg2NjQzIDUzLjM1NDk3IC05Ljg2NTIgNTMuMzU0NzggLTkuODY3OTQgNTMuMzUwODMgLTkuODc0NzEgNTMuMzUwNjQgLTkuODc3NDUgNTMuMzUwMDggLTkuODgxNjUgNTMuMzUxMDEgLTkuODg0MTMgNTMuMzUyNTggLTkuODg1NTEgNTMuMzU0OSAtOS44ODUxOCA1My4zNTU3NyAtOS44NzkxOCA1My4zNTgxMyAtOS44NzcwMyA1My4zNTg1NSAtOS44Nzg5NSA1My4zNjAwOSAtOS44ODIwMSA1My4zNjE4IC05Ljg4MjY0IDUzLjM2NDE3IC05Ljg4MTU2IDUzLjM2NjA4IC05Ljg3OTMgNTMuMzY3NjkgLTkuODc0NTMgNTMuMzY3ODkgLTkuODcwMjYgNTMuMzY4MDYgLTkuODYyMjggNTMuMzY4NDcgLTkuODU3NiA1My4zNzEzNyAtOS44NTU1MyA1My4zNzM1OSAtOS44NTE0OSA1My4zNzM5MiAtOS44NDUwOSA1My4zNzQ3OSAtOS44MzYzMyA1My4zNzUwMiAtOS44MzI5OCA1My4zNzYyMyAtOS44MzAxMyA1My4zNzczNCAtOS44Mjg1IDUzLjM3ODQyIC05LjgzMDM5IDUzLjM3OTU2IC05LjgyOTgzIDUzLjM3OTQ1IC05LjgyNzM2IDUzLjM3OTI5IC05LjgyNDI0IDUzLjM3OTU3IC05LjgxODc3IDUzLjM3ODc1IC05LjgxNzIyIDUzLjM3MzcxIC05LjgxNDExIDUzLjM3ODU2IC05LjgxMDU2IDUzLjM3OTk5IC05LjgwNzE0IDUzLjM4MTQ2IC05LjgwNDM0IDUzLjM4Mzk0IC05LjgwMzI2IDUzLjM4NTUyIC05LjgwMTU1IDUzLjM4NjI0IC05Ljc5OTA4IDUzLjM4NjkxIC05Ljc5NTk3IDUzLjM4NzI4IC05Ljc5MzEyIDUzLjM4NzAyIC05Ljc5MDE0IDUzLjM4NzQ2IC05Ljc4NzYxIDUzLjM4ODM2IC05Ljc4NTMxIDUzLjM4OTEyIC05Ljc4MDg0IDUzLjM5MTA5IC05Ljc3NjI4IDUzLjM5MDY5IC05Ljc4NDk4IDUzLjM5MjcxIC05Ljc4MDg5IDUzLjM5NSAtOS43ODY0IDUzLjM5NDAyIC05Ljc4ODY5IDUzLjM5Mjk2IC05Ljc5MDk1IDUzLjM5MzMyIC05Ljc5NTAyIDUzLjM5NTA0IC05Ljc5NDExIDUzLjM5NjkzIC05Ljc5MzQgNTMuMzk4NTggLTkuNzkyMzEgNTMuMzk5NyAtOS43OTA1MyA1My40MDEwOSAtOS43ODkwOSA1My40MDI1MyAtOS43ODgyOCA1My40MDQ3IC05Ljc4NjA4IDUzLjQwNjYyIC05Ljc3OTUxIDUzLjQwNzMgLTkuNzgzMDEgNTMuNDA2NzUgLTkuNzg4NDYgNTMuNDA2NzEgLTkuNzkzMDcgNTMuNDAzMzIgLTkuNzk3MDYgNTMuNDAyMzggLTkuNzk4NzMgNTMuNDAxNDUgLTkuODAzMDEgNTMuNDAwODYgLTkuODA3NTIgNTMuNDAxNiAtOS44MTE2NiA1My40MDQzIC05LjgxMTI1IDUzLjQwNjQxIC05LjgxNTM1IDUzLjQxMTQgLTkuODEzODMgNTMuNDExMjkgLTkuODA5OTUgNTMuNDExOTQgLTkuODA0MzcgNTMuNDEzMTYgLTkuNzk5OTggNTMuNDEyMjYgLTkuNzk2ODggNTMuNDEzMTMgLTkuNzg5NSA1My40MTUyOSAtOS43ODc0NCA1My40MTgyOSAtOS43OTc1NiA1My40MTY0MyAtOS44MDA2IDUzLjQxNjk1IC05LjgwMzkyIDUzLjQxNzQzIC05LjgwNjE4IDUzLjQxNzUyIC05LjgxMTc0IDUzLjQxNjM4IC05LjgxNTA3IDUzLjQxNDcgLTkuODE3OTkgNTMuNDEyNDMgLTkuODIwMzMgNTMuNDExOTMgLTkuODIzNjMgNTMuNDEwODQgLTkuODI2MTkgNTMuNDA5MTIgLTkuODI3MDkgNTMuNDA3NzcgLTkuODI4MDcgNTMuNDA2NzggLTkuODMwMzYgNTMuNDA1MjEgLTkuODMzMjkgNTMuNDA1NjUgLTkuODM2MTQgNTMuNDAzNjMgLTkuODM4ODUgNTMuNDAyNDMgLTkuODQxNjkgNTMuNDAyNDMgLTkuODQxNjkgNTMuNDAyNTUgLTkuODQzODggNTMuNDAzIC05Ljg0NjczIDUzLjQwMjg0IC05Ljg1MDU2IDUzLjQwMTE5IC05Ljg1MzE2IDUzLjM5ODU4IC05Ljg1NDk4IDUzLjM5NTkgLTkuODU1MDkgNTMuMzkzNDUgLTkuODUzMjUgNTMuMzg4NTEgLTkuODU2NzcgNTMuMzkwMjcgLTkuODYwOCA1My4zOTE2MiAtOS44NjUyMiA1My4zOTE2MyAtOS44NzA2IDUzLjM5MzQ2IC05Ljg3MDY0IDUzLjM5NTQzIC05Ljg3MDA5IDUzLjM5ODI1IC05Ljg2OCA1My40MDAxOSAtOS44NzA1MyA1My40MDIxNiAtOS44NzAxNCA1My40MDQwNiAtOS44NzQ2NiA1My40MDYwMyAtOS44NzY4OCA1My40MDg2NSAtOS44NzYyOSA1My40MTA3OCAtOS44NzQ3IDUzLjQxMjY3IC05Ljg3MTM1IDUzLjQxNDE5IC05Ljg2NzggNTMuNDE1NTMgLTkuODY0NSA1My40MTY0MSAtOS44NjA4MiA1My40MTY3MyAtOS44NTc0OSA1My40MTYzMSAtOS44NTQzMyA1My40MTUzNyAtOS44NTA2MSA1My40MTY4IC05Ljg1MTE5IDUzLjQxODczIC05Ljg1NDAxIDUzLjQxOTU3IC05Ljg0OTU2IDUzLjQxODAxIC05Ljg0NjggNTMuNDE5MTMgLTkuODQ1MTUgNTMuNDE4NDQgLTkuODQxOCA1My40MTk5MSAtOS44NDA1MyA1My40MjEzIC05Ljg0MDM0IDUzLjQyMjc1IC05Ljg0MjE0IDUzLjQyMzYgLTkuODQ1ODYgNTMuNDI2NDcgLTkuODQxNjIgNTMuNDI0NzQgLTkuODM5NzUgNTMuNDI0MTUgLTkuODM3OCA1My40MjMxIC05LjgzMjgyIDUzLjQyMTUyIC05LjgzMDM2IDUzLjQyMTIgLTkuODI2OTEgNTMuNDIxMDEgLTkuODI0MjYgNTMuNDIwODMgLTkuODIxNDUgNTMuNDIyODggLTkuODIyMyA1My40MjI5OCAtOS44MTgxNiA1My40MjQzOCAtOS44MTkzNSA1My40MjUwOCAtOS44MjI3MSA1My40MjYzNiAtOS44MjU1NyA1My40MjgwMSAtOS44MjgyIDUzLjQyOTk5IC05LjgzMDI3IDUzLjQyOTI0IC05LjgzMTgyIDUzLjQyNzkxIC05LjgzMjQ5IDUzLjQyNzYzIC05LjgzNTM2IDUzLjQyOTAxIC05LjgzNzk0IDUzLjQzMDkyIC05Ljg0MTA3IDUzLjQzMjkxIC05Ljg0NDM4IDUzLjQzMjM3IC05Ljg0ODI5IDUzLjQzMjYyIC05Ljg1MjggNTMuNDMzODkgLTkuODU1ODIgNTMuNDM0NzkgLTkuODU4NzYgNTMuNDMyNzIgLTkuODU4MDUgNTMuNDMxMzUgLTkuODU2NTYgNTMuNDMwMjIgLTkuODU0MDQgNTMuNDI5MDEgLTkuODUxNSA1My40MjcyMSAtOS44NDk3NyA1My40MjQ3MiAtOS44NTI1MyA1My40MjMwNSAtOS44NTQwNyA1My40MjA3NCAtOS44NTQwOCA1My40MjA2IC05Ljg1ODg0IDUzLjQyMDYgLTkuODY0MjMgNTMuNDE5MDQgLTkuODY4NCA1My40MTQyNyAtOS44NzM1MSA1My40MTQ1OSAtOS44NzY5NiA1My40MTU1MyAtOS44NzkzIDUzLjQxNzg5IC05Ljg4MTI4IDUzLjQxOTUzIC05Ljg4NTYgNTMuNDIzNTYgLTkuODgxNzQgNTMuNDIyMjcgLTkuODg3MiA1My40MjEyNCAtOS44OTE0NyA1My40MTk0NCAtOS44OTA4MSA1My40MTc4MSAtOS44OTU5MSA1My40MTY0IC05Ljg5NzY0IDUzLjQxNTE0IC05Ljg5NDYyIDUzLjQxNDI2IC05Ljg5MTIyIDUzLjQxMzYyIC05Ljg4NzA5IDUzLjQxMTMgLTkuODg3MjcgNTMuNDEwMDIgLTkuODg1OTQgNTMuNDA3NDQgLTkuODg0NTMgNTMuNDA1MDkgLTkuODg1MzEgNTMuNDAyMjcgLTkuODg4NjMgNTMuNDAxODEgLTkuODg0NjkgNTMuNDAwMzIgLTkuODgzNjUgNTMuMzk4NTggLTkuODgyMDggNTMuMzk2ODUgLTkuODgwMzcgNTMuMzk1MjMgLTkuODc5OSA1My4zOTM3NyAtOS44NzgyNCA1My4zOTI0OCAtOS44NzcwNyA1My4zOTA0MyAtOS44Nzg4NCA1My4zODk5MSAtOS44ODA5IDUzLjM4OTkyIC05Ljg4NDkgNTMuMzkwOTggLTkuODg5NTggNTMuMzg5MyAtOS44ODk4NiA1My4zODgwMiAtOS44ODgzOSA1My4zODY1OCAtOS44ODY1OCA1My4zODM2MiAtOS44ODI2MyA1My4zODA3OCAtOS44NzU2MiA1My4zNzg0MyAtOS44NzY0MSA1My4zNzY0OCAtOS44NzgwNCA1My4zNzQ2NiAtOS44ODMwOCA1My4zNzQyNiAtOS44ODkwMSA1My4zNzU1NyAtOS44OTQwMyA1My4zNzc5NCAtOS44OTcxIDUzLjM4MjA1IC05Ljg5NDk1IDUzLjM4NTc3IC05Ljg5NDQyIDUzLjM4OTcxIC05Ljg5NDcxIDUzLjM5MzY1IC05Ljg5NjM5IDUzLjM5NzM5IC05Ljg5Njc5IDUzLjQwMjIzIC05Ljg5NzU1IDUzLjQwNjUzIC05Ljg5NzkyIDUzLjQwOTA0IC05LjkwMDI0IDUzLjQxMDgxIC05Ljg5NTk2IDUzLjQxMjUxIC05Ljg5Nzk4IDUzLjQxNDI4IC05Ljg5OTA4IDUzLjQxMzkyIC05LjkwMzAyIDUzLjQxMjcyIC05LjkwNDM0IDUzLjQxMTY4IC05LjkwNDc1IDUzLjQxMDU0IC05LjkwNjY4IDUzLjQwODYgLTkuOTA4MTYgNTMuNDA1ODYgLTkuOTA3NzkgNTMuNDAzNDYgLTkuOTEwNTcgNTMuMzk5NjYgLTkuOTEwOTMgNTMuMzk2ODMgLTkuOTEwMzkgNTMuMzkzOTkgLTkuOTEwMyA1My4zOTIzIC05LjkwOTM3IDUzLjM5MDcxIC05LjkwNzA3IDUzLjM4ODU4IC05LjkwNzI4IDUzLjM4NjExIC05LjkwODM1IDUzLjM4NDk5IC05LjkwOTk3IDUzLjM4NDAyIC05LjkxMzMzIDUzLjM4MjExIC05LjkxNDM2IDUzLjM4MTIgLTkuOTE4MTkgNTMuMzc5NDQgLTkuOTIxMDggNTMuMzc3NjYgLTkuOTI0MTQgNTMuMzc2NjMgLTkuOTI5NzkgNTMuMzc3MjkgLTkuOTM2MzggNTMuMzc5NTUgLTkuOTM5NzMgNTMuMzc4OTcgLTkuOTQxMzIgNTMuMzc3NjMgLTkuOTQzNTMgNTMuMzc2MjMgLTkuOTQ2MzQgNTMuMzc0MDMgLTkuOTQ4OTggNTMuMzcxMSAtOS45NDk5NyA1My4zNzA2OCAtOS45NDY4MSA1My4zNjk5IC05Ljk0MzQzIDUzLjM2ODU1IC05Ljk0MDI1IDUzLjM2NzU5IC05Ljk0MzQ1IDUzLjM2NzE4IC05Ljk0Njc2IDUzLjM2NzA2IC05Ljk1MTIgNTMuMzY4OTggLTkuOTU1NCA1My4zNzAzOSAtOS45NjAzIDUzLjM3MDUxIC05Ljk2NDAxIDUzLjM3MjA5IC05Ljk2NTA5IDUzLjM3NDM0IC05Ljk2NDYgNTMuMzc2MDMgLTkuOTYyNzYgNTMuMzc2NjggLTkuOTU4NzQgNTMuMzc4ODUgLTkuOTU1MyA1My4zODEyOSAtOS45NTg1NCA1My4zODAyNiAtOS45NjI5NSA1My4zNzkxNSAtOS45NjY5IDUzLjM3ODkxIC05Ljk3NDQgNTMuMzc4NzUgLTkuOTc5NDUgNTMuMzc5NTEgLTkuOTg1OSA1My4zODA1MSAtOS45OTEzMyA1My4zNzk1NCAtOS45OTc0NSA1My4zNzk3MyAtMTAuMDAyNzMgNTMuMzgxMzUgLTEwLjAwNTk2IDUzLjM4MzA2IC0xMC4wMDc4NCA1My4zODM0NyAtMTAuMDEzOTIgNTMuMzg0MTEgLTEwLjAxOTI4IDUzLjM4NjYzIC0xMC4wMjAwNiA1My4zODkzIC0xMC4wMjI3NCA1My4zOTE4MSAtMTAuMDI1MDggNTMuMzk1MzYgLTEwLjAyNTc2IDUzLjM5ODM1IC0xMC4wMjY0OSA1My40MDIyNyAtMTAuMDI2OTQgNTMuNDA1MjIgLTEwLjAyNzA1IDUzLjQwODE0IC0xMC4wMjc0NyA1My40MTAyMiAtMTAuMDMwNjQgNTMuNDEwNjYgLTEwLjAzMzY1IDUzLjQxMTMzIC0xMC4wMzg1NSA1My40MTMzOSAtMTAuMDQwNzkgNTMuNDEyNzMgLTEwLjA0NDk4IDUzLjQxMjg3IC0xMC4wNDk2MyA1My40MTQyNiAtMTAuMDUzNDUgNTMuNDE3MDEgLTEwLjA1NDkgNTMuNDE5NjMgLTEwLjA1NTcyIDUzLjQxODk2IC0xMC4wNTg4MyA1My40MjExOCAtMTAuMDYyNjUgNTMuNDE3ODIgLTEwLjA2NDQ2IDUzLjQxNTI1IC0xMC4wNjcwNSA1My40MTI2OSAtMTAuMDY2ODUgNTMuNDExMDcgLTEwLjA2NzYxIDUzLjQwOTY5IC0xMC4wNzE1MiA1My40MDY1NCAtMTAuMDczMjEgNTMuNDA2NjUgLTEwLjA3Njc4IDUzLjQxMDEzIC0xMC4wNzQzNyA1My40MTEyOSAtMTAuMDc0OSA1My40MTMxMSAtMTAuMDc1NCA1My40MTMxOSAtMTAuMDc5NTkgNTMuNDExNzIgLTEwLjA4MjA3IDUzLjQxMTY5IC0xMC4wODYzOSA1My40MDk2MSAtMTAuMDg4NTkgNTMuNDA4NTkgLTEwLjA5Mzk0IDUzLjQwNzQyIC0xMC4wOTQ4IDUzLjQwNzE0IC0xMC4wOTc1MSA1My40MDkzNSAtMTAuMDk2MjQgNTMuNDEwODQgLTEwLjA5ODcgNTMuNDEyMTYgLTEwLjA5ODE5IDUzLjQxMzc3IC0xMC4wOTg5NiA1My40MTA4MSAtMTAuMTAxNzcgNTMuNDEwMzUgLTEwLjEwNDQ2IDUzLjQwNzI4IC0xMC4xMDQ3OSA1My40MDY1NyAtMTAuMTA2OTUgNTMuNDA1MzUgLTEwLjEwODcyIDUzLjQwNDAyIC0xMC4xMDkyMyA1My40MDIwMSAtMTAuMTA3NzYgNTMuNDAwNDkgLTEwLjEwNyA1My4zOTg1MiAtMTAuMTA3NjkgNTMuNDAwMTcgLTEwLjExMTcxIDUzLjQwMTc1IC0xMC4xMTU0MSA1My40MDQyIC0xMC4xMTU4OCA1My40MDUyMSAtMTAuMTE5OTUgNTMuNDA2OTkgLTEwLjEyMDc1IDUzLjQwNjg1IC0xMC4xMjQxMSA1My40MTAxMyAtMTAuMTI1OTggNTMuNDEzMzMgLTEwLjEyODkyIDUzLjQxNjEzIC0xMC4xMzM2MyA1My40MTgzNCAtMTAuMTM5IDUzLjQxMzkxIC0xMC4xNDU2OCA1My40MTQ1NyAtMTAuMTQ5MzUgNTMuNDEyNzMgLTEwLjE1MzMxIDUzLjQxMTAxIC0xMC4xNTY2NyA1My40MTAzNSAtMTAuMTU5NjIgNTMuNDEwMTMgLTEwLjE2NDIgNTMuNDA5MDMgLTEwLjE2NjYgNTMuNDA3OTYgLTEwLjE2NzQ3IDUzLjQwNjM1IC0xMC4xNjgwOCA1My40MDczIC0xMC4xNzE1IDUzLjQwODUyIC0xMC4xNzExMyA1My40MDk3NSAtMTAuMTcyMTQgNTMuNDExODYgLTEwLjE3MzQ4IDUzLjQxMzY0IC0xMC4xNzA0NSA1My40MTUzMSAtMTAuMTY2NDUgNTMuNDE3MzggLTEwLjE2MzE3IDUzLjQxOTUyIC0xMC4xNjE1NyA1My40MjE3MyAtMTAuMTU4OTMgNTMuNDIzNyAtMTAuMTU4MzkgNTMuNDI1NzcgLTEwLjE1Mzg3IDUzLjQyODEyIC0xMC4xNTE4NSA1My40MzAxMiAtMTAuMTUzNjQgNTMuNDMwOTQgLTEwLjE1MjQyIDUzLjQzMTI0IC0xMC4xNDk1NCA1My40MzE2OCAtMTAuMTQ1NzcgNTMuNDMzNzMgLTEwLjE0Mjc5IDUzLjQzNTI0IC0xMC4xNDIzMiA1My40MzY1NiAtMTAuMTQzMTggNTMuNDM3OTMgLTEwLjE0MzMxIDUzLjQ0MDEyIC0xMC4xNDM3NCA1My40Mzk5MiAtMTAuMTM4NzUgNTMuNDQxMSAtMTAuMTM2MzcgNTMuNDM4MjEgLTEwLjEzNDEgNTMuNDQwMTYgLTEwLjEzMDAyIDUzLjQ0MTg3IC0xMC4xMjY2NiA1My40NDMzNSAtMTAuMTI3ODYgNTMuNDQ1NTkgLTEwLjEyODc2IDUzLjQ0Njk3IC0xMC4xMjYxMSA1My40NDgwMSAtMTAuMTI0NDYgNTMuNDQ5NjcgLTEwLjEyMzA5IDUzLjQ1MTUzIC0xMC4xMjE2IDUzLjQ1MzUyIC0xMC4xMjQ2MSA1My40NTUxMSAtMTAuMTIxNjkgNTMuNDU1MjIgLTEwLjExNjE1IDUzLjQ1NDQ5IC0xMC4xMTQ3NyA1My40NTI3MyAtMTAuMTEzNjYgNTMuNDUwNjggLTEwLjExMTI1IDUzLjQ1MDA2IC0xMC4xMDgyIDUzLjQ1MDc2IC0xMC4xMDIxNyA1My40NTAxNyAtMTAuMDk3NDMgNTMuNDQ4MjggLTEwLjA5NTM3IDUzLjQ0OTYyIC0xMC4wODgyMiA1My40NDY5MyAtMTAuMDg1NjkgNTMuNDQ1OTcgLTEwLjA4MzY1IDUzLjQ0NDIyIC0xMC4wODYyNSA1My40NDI1NiAtMTAuMDg2MzggNTMuNDQyNDQgLTEwLjA4NDIxIDUzLjQ0MDg2IC0xMC4wODI5NyA1My40NDA3MyAtMTAuMDc5NTUgNTMuNDM5MzUgLTEwLjA3OTQ0IDUzLjQzNzUxIC0xMC4wNzk1NSA1My40MzUxOCAtMTAuMDc4NDggNTMuNDM1MzUgLTEwLjA3NjA0IDUzLjQzNTg4IC0xMC4wNzI0NCA1My40MzgyNSAtMTAuMDc0MTQgNTMuNDM5NSAtMTAuMDczMyA1My40NDA4NyAtMTAuMDczNTcgNTMuNDQyMjUgLTEwLjA3MzUzIDUzLjQ0MzEzIC0xMC4wNzU0IDUzLjQ0MzIgLTEwLjA3ODUgNTMuNDQ0NTUgLTEwLjA3ODkxIDUzLjQ0NDcxIC0xMC4wNzM4NSA1My40NDIxIC0xMC4wNzA0MSA1My40Mzk4NSAtMTAuMDY4MjggNTMuNDM3NDggLTEwLjA2NTIgNTMuNDM3OTggLTEwLjA2MjA2IDUzLjQ0MDY3IC0xMC4wNjE4MSA1My40NDA1OSAtMTAuMDU3NjMgNTMuNDQxMjEgLTEwLjA1NTI5IDUzLjQ0MzI1IC0xMC4wNTI1OSA1My40NDYzOSAtMTAuMDUxMDUgNTMuNDQ5NjMgLTEwLjA1MDc2IDUzLjQ1MTQ1IC0xMC4wNDg0OSA1My40NTMxNiAtMTAuMDQ3NzQgNTMuNDU1NTkgLTEwLjA0NzI4IDUzLjQ1NzQ0IC0xMC4wNDcxOCA1My40NTY3NyAtMTAuMDQzNSA1My40NTYgLTEwLjA0MDExIDUzLjQ1Njk4IC0xMC4wMzY0NCA1My40NTYxOCAtMTAuMDMyMTMgNTMuNDU4MjUgLTEwLjAyNzQ0IDUzLjQ1NzkzIC0xMC4wMjI3NSA1My40NTk3MiAtMTAuMDIyMTggNTMuNDYwNzIgLTEwLjAyNjM4IDUzLjQ2MTU2IC0xMC4wMzAyNCA1My40NjMxIC0xMC4wMzMxNiA1My40NjMxIC0xMC4wMzMxNiA1My40NjE5MyAtMTAuMDM2NzkgNTMuNDYxMjcgLTEwLjAzOTc1IDUzLjQ2MDYxIC0xMC4wNDUzMiA1My40NjIxNSAtMTAuMDUzNjUgNTMuNDY1NDMgLTEwLjA2MDc3IDUzLjQ2NTc0IC0xMC4wNTc3MyA1My40NjU2NyAtMTAuMDU0NjMgNTMuNDY2OTUgLTEwLjA1MzUgNTMuNDY4MjcgLTEwLjA1ODM5IDUzLjQ2NjI5IC0xMC4wNjMwOSA1My40NjU2NyAtMTAuMDY2NjcgNTMuNDY0NjMgLTEwLjA3MjMyIDUzLjQ2NTI0IC0xMC4wNzgxNiA1My40NjY1MyAtMTAuMDgzMzUgNTMuNDY4ODUgLTEwLjA3NzkzIDUzLjQ2OTg1IC0xMC4wNzI4OCA1My40NzA3MyAtMTAuMDY5MzUgNTMuNDcyMzMgLTEwLjA3MDI4IDUzLjQ3NDM0IC0xMC4wODEwMiA1My40NzY5NyAtMTAuMDgyOTEgNTMuNDc3NzMgLTEwLjA4OTIzIDUzLjQ4MDM2IC0xMC4wODk3NCA1My40ODE3MSAtMTAuMDgyMyA1My40ODM3NyAtMTAuMDc5MjkgNTMuNDg1NCAtMTAuMDc2OTggNTMuNDg4MDkgLTEwLjA3NDEzIDUzLjQ4Njg2IC0xMC4wNjQgNTMuNDg0NCAtMTAuMDYyMyA1My40ODI5IC0xMC4wNTg2IDUzLjQ4MjE0IC0xMC4wNTUwNiA1My40ODExOSAtMTAuMDQ5OTUgNTMuNDgwOTYgLTEwLjA0NTQyIDUzLjQ3ODA4IC0xMC4wNDQzOSA1My40Nzg0NCAtMTAuMDQ5ODcgNTMuNDc2ODQgLTEwLjA0NzcgNTMuNDc2NzYgLTEwLjA0NDc1IDUzLjQ3Njc0IC0xMC4wMzk2NyA1My40NzQ4MiAtMTAuMDM4MzYgNTMuNDcyNjkgLTEwLjAzNTc5IDUzLjQ3MTcgLTEwLjAzMjY3IDUzLjQ3MDc5IC0xMC4wMjg0OCA1My40Njk5MyAtMTAuMDIzNjggNTMuNDY4MTggLTEwLjAxOTggNTMuNDY2NTQgLTEwLjAxMjg1IDUzLjQ2ODIxIC0xMC4wMTI1NSA1My40NzA5NSAtMTAuMDExNTQgNTMuNDczODMgLTEwLjAxMjU2IDUzLjQ3MzQ0IC0xMC4wMTU1NyA1My40NzI0MiAtMTAuMDE5NTQgNTMuNDcyMTQgLTEwLjAyNTA0IDUzLjQ3MjE0IC0xMC4wMjUwNCA1My40NzM4OSAtMTAuMDI5MDggNTMuNDc3NDggLTEwLjAzMzE3IDUzLjQ4MDM3IC0xMC4wMzY1IDUzLjQ4MTE5IC0xMC4wMzE0MiA1My40ODE2NyAtMTAuMDI1OCA1My40ODE3OCAtMTAuMDE4ODggNTMuNDgyMzEgLTEwLjAxNjUxIDUzLjQ4NDUgLTEwLjAxNTQgNTMuNDg2ODMgLTEwLjAxNTA4IDUzLjQ4Mzk3IC0xMC4wMjE3NyA1My40ODM1MSAtMTAuMDI0NDUgNTMuNDg0MjQgLTEwLjAyODQ2IDUzLjQ4MyAtMTAuMDM5NzkgNTMuNDg2MjIgLTEwLjA0NjYgNTMuNDg5MjggLTEwLjA1MDI4IDUzLjQ4OTczIC0xMC4wNTcxNSA1My40OTAwNyAtMTAuMDYxMzkgNTMuNDkwNzEgLTEwLjA2NTUyIDUzLjQ5MjMzIC0xMC4wNzE0IDUzLjQ5MzUyIC0xMC4wNzU0OSA1My40OTM0IC0xMC4wODI0MSA1My40OTM5OCAtMTAuMDg3NDYgNTMuNDkzOSAtMTAuMDkzOTMgNTMuNDk0MTggLTEwLjA5OTIzIDUzLjQ5ODk4IC0xMC4xMDI5NSA1My40OTkyNyAtMTAuMTA2NzEgNTMuNTAwMzMgLTEwLjEwODc3IDUzLjQ5ODc4IC0xMC4xMDk3MSA1My40OTkwNCAtMTAuMTEyNjkgNTMuNTAwMDQgLTEwLjExNTUxIDUzLjUwMTMxIC0xMC4xMTU3NiA1My41MDMwNCAtMTAuMTE0ODYgNTMuNTAyMTYgLTEwLjExMDIxIDUzLjUwMTUyIC0xMC4xMDYyMyA1My41MDI1NCAtMTAuMTA0NzMgNTMuNTA0NDggLTEwLjEwNzI3IDUzLjUwNjEzIC0xMC4xMDg2NyA1My41MDY5NSAtMTAuMTEyODUgNTMuNTA4NTcgLTEwLjExODcyIDUzLjUwNjQ1IC0xMC4xMTg3OCA1My41MDU0MyAtMTAuMTIyNzQgNTMuNTA3NTggLTEwLjEyODg5IDUzLjUwOTczIC0xMC4xMjcxNCA1My41MTIwMSAtMTAuMTI4ODIgNTMuNTEyMjkgLTEwLjEyMjA4IDUzLjUxMTUxIC0xMC4xMTQ4MiA1My41MTA0MSAtMTAuMTA2ODggNTMuNTEwMyAtMTAuMTAxOTIgNTMuNTA5MjIgLTEwLjA5NzM5IDUzLjUxMDM1IC0xMC4wOTY5OSA1My41MTE5MSAtMTAuMDk4NTMgNTMuNTEyNjkgLTEwLjEwMTkzIDUzLjUxMzA0IC0xMC4xMDc0IDUzLjUxMzYxIC0xMC4xMTM4NSA1My41MTU0MiAtMTAuMTIyMjMgNTMuNTE4ODEgLTEwLjEyNzY5IDUzLjUxODY2IC0xMC4xMjE5NCA1My41MTg1IC0xMC4xMTQ5NiA1My41MTczOSAtMTAuMTA3MTcgNTMuNTE2MjEgLTEwLjA5NjI4IDUzLjUxNDk4IC0xMC4wODg3OCA1My41MTM0OCAtMTAuMDgyNjIgNTMuNTEyNDEgLTEwLjA4NDczIDUzLjUxMTUxIC0xMC4wODE3OCA1My41MTAwMSAtMTAuMDc2ODQgNTMuNTA5NDMgLTEwLjA2OTE3IDUzLjUwNzIyIC0xMC4wNjI1NyA1My41MDY0OCAtMTAuMDY3OTcgNTMuNTA0NjcgLTEwLjA3MTQ4IDUzLjUwNDE3IC0xMC4wNjkzOCA1My41MDQ1OCAtMTAuMDYzNDMgNTMuNTAzNDYgLTEwLjA1NTY1IDUzLjUwMjc0IC0xMC4wNDg3MSA1My41MDI2MyAtMTAuMDQzNzUgNTMuNTAzNjMgLTEwLjAzOTkzIDUzLjUwMzYyIC0xMC4wMzM0NSA1My41MDU2NCAtMTAuMDMzNTMgNTMuNTA2OTYgLTEwLjAzMTc4IDUzLjUwOTMzIC0xMC4wMzQ4NiA1My41MDg0MiAtMTAuMDM4NTUgNTMuNTA2NyAtMTAuMDM5NDUgNTMuNTA2NDMgLTEwLjA0MjAzIDUzLjUwNzQzIC0xMC4wNDM0NSA1My41MDk0MiAtMTAuMDQyNzYgNTMuNTA4MDIgLTEwLjA1MjM3IDUzLjUxMjkyIC0xMC4wNjY3NSA1My41MTE3OCAtMTAuMDcxMTcgNTMuNTEzNzUgLTEwLjA3NjAyIDUzLjUxNTQ5IC0xMC4wODI3MSA1My41MTc3MiAtMTAuMDkwNTYgNTMuNTE5NCAtMTAuMDk5NTMgNTMuNTE5ODYgLTEwLjEwOTk4IDUzLjUyMDg5IC0xMC4xMjAzNyA1My41MjIxMiAtMTAuMTI3ODcgNTMuNTI0NTMgLTEwLjEyNzU3IDUzLjUyODAyIC0xMC4xMzE2NSA1My41MjgzIC0xMC4xMzQzNCA1My41MjkwMiAtMTAuMTM1ODYgNTMuNTMwMTggLTEwLjEzNjQgNTMuNTMxNCAtMTAuMTM2MTggNTMuNTMzMDkgLTEwLjEzNTU5IDUzLjUzNTIyIC0xMC4xMzUzOSA1My41Mzc2NCAtMTAuMTM2NDggNTMuNTM5NjkgLTEwLjEzNzUxIDUzLjUzODU4IC0xMC4xNDQwOSA1My41Mzg3MSAtMTAuMTQ4OSA1My41MzkxMiAtMTAuMTU0ODYgNTMuNTM5NDUgLTEwLjE2MDYzIDUzLjUzODI5IC0xMC4xNjUzNiA1My41MzY1NCAtMTAuMTY2NTQgNTMuNTM2MDYgLTEwLjE2OTU1IDUzLjUzODc4IC0xMC4xNzI3MiA1My41NDA4MyAtMTAuMTc2MzcgNTMuNTQxMzEgLTEwLjE4MDAyIDUzLjU0MjIgLTEwLjE4NDM2IDUzLjU0MTA4IC0xMC4xODg0NyA1My41NDE3NyAtMTAuMTkxNzEgNTMuNTQyODIgLTEwLjE5MTI4IDUzLjU0NDA4IC0xMC4xODc4MyA1My41NDUwOCAtMTAuMTgyNzcgNTMuNTQ2NjkgLTEwLjE3ODI5IDUzLjU0ODc3IC0xMC4xNzc0NyA1My41NTA2NSAtMTAuMTgyMTcgNTMuNTUxNjIgLTEwLjE3ODk2IDUzLjU1MzA5IC0xMC4xNzYzMSA1My41NTUwNSAtMTAuMTcyMDYgNTMuNTU2OTYgLTEwLjE2OTggNTMuNTU3ODEgLTEwLjE2NTQ5IDUzLjU1Nzk1IC0xMC4xNjA4NyA1My41NTkwNSAtMTAuMTU4MzIgNTMuNTYwNDQgLTEwLjE1NTUgNTMuNTU5NjEgLTEwLjE1NDEgNTMuNTU3MjIgLTEwLjE1MTYyIDUzLjU1NDgxIC0xMC4xNTAzNyA1My41NTUwMyAtMTAuMTQ3MzIgNTMuNTU1MzkgLTEwLjE0NDc2IDUzLjU1NzU4IC0xMC4xNDY0MiA1My41NTgyMSAtMTAuMTQyNjkgNTMuNTYwMjEgLTEwLjE0MzA4IDUzLjU2MjM4IC0xMC4xNDc2OCA1My41NjM1IC0xMC4xNDYwNSA1My41NjMzMyAtMTAuMTM3ODIgNTMuNTYyMDQgLTEwLjEzNTM5IDUzLjU2MDAxIC0xMC4xMzM5MiA1My41NTcwMSAtMTAuMTI5NDYgNTMuNTU1NDYgLTEwLjEyNTI5IDUzLjU1NTcyIC0xMC4xMjI4OCA1My41NTY1NiAtMTAuMTIxNDggNTMuNTU4MjYgLTEwLjExOTUgNTMuNTU5NTMgLTEwLjExNzEzIDUzLjU1ODk2IC0xMC4xMTQ2OSA1My41NTgwMiAtMTAuMTEyMzQgNTMuNTU3MTUgLTEwLjEwODkzIDUzLjU1NTk0IC0xMC4xMDUyOCA1My41NTU2IC0xMC4xMDA3NCA1My41NTI5OSAtMTAuMDk1OSA1My41NTM2NiAtMTAuMDkxNTUgNTMuNTUzMTkgLTEwLjA4OTE0IDUzLjU1MzA3IC0xMC4wODY3OSA1My41NTUwNiAtMTAuMDg1OTUgNTMuNTU3MjUgLTEwLjA4NzYxIDUzLjU1ODgzIC0xMC4wOTE0OCA1My41NjAxNSAtMTAuMDk2MjEgNTMuNTYyNzUgLTEwLjA5OTk4IDUzLjU2NTkgLTEwLjEwNDkyIDUzLjU2NzE5IC0xMC4xMTAyOCA1My41NjgxMSAtMTAuMTE0MzIgNTMuNTY5MzUgLTEwLjExNzY2IDUzLjU3MjM5IC0xMC4xMTkwMyA1My41NzQ4MyAtMTAuMTE5NjYgNTMuNTc1NyAtMTAuMTEyNDIgNTMuNTczNyAtMTAuMTA5MzkgNTMuNTc0NDQgLTEwLjEwNjYgNTMuNTc1NyAtMTAuMTAzMTMgNTMuNTc1MTIgLTEwLjA5ODIyIDUzLjU3NTYxIC0xMC4wOTUyMiA1My41NzU1NCAtMTAuMDkwODggNTMuNTczMyAtMTAuMDg4NzQgNTMuNTcxNjUgLTEwLjA4NDU1IDUzLjU3MDc0IC0xMC4wODE3NSA1My41NzExMSAtMTAuMDc5MDQgNTMuNTczMzggLTEwLjA3NDIxIDUzLjU3Mjg0IC0xMC4wNjczMSA1My41NzI2MyAtMTAuMDYxMDkgNTMuNTcwOTUgLTEwLjA1NzM1IDUzLjU2NzY5IC0xMC4wNTY3MiA1My41NjY5MyAtMTAuMDUzMDIgNTMuNTY5MTggLTEwLjA0ODUgNTMuNTY4NTkgLTEwLjA0MjIxIDUzLjU3MDU4IC0xMC4wMzc0OCA1My41Njk4IC0xMC4wMzI4NiA1My41Njg4NCAtMTAuMDMwNSA1My41Njg2NyAtMTAuMDIzNjYgNTMuNTY4MzggLTEwLjAxOTg5IDUzLjU2ODI3IC0xMC4wMTQ5MiA1My41Njc1MyAtMTAuMDEwOTIgNTMuNTY2OTggLTEwLjAwNTU1IDUzLjU2NTg2IC0xMC4wMDMwMSA1My41NjM3NiAtMTAuMDAyNzcgNTMuNTYwMTMgLTEwLjAwMTkxIDUzLjU2MTMgLTEwLjAwNjMxIDUzLjU1OTY5IC0xMC4wMDgzMyA1My41NTg0NCAtMTAuMDA3NzYgNTMuNTU3NzIgLTEwLjAwNDg0IDUzLjU1NTg0IC0xMC4wMDQwMiA1My41NTI3NiAtMTAuMDAwNjQgNTMuNTQ5NjUgLTEwLjAwMDM1IDUzLjU0OTYgLTkuOTk4MzIgNTMuNTQ5IC05Ljk5NjM2IDUzLjU0NzM5IC05Ljk5NTU4IDUzLjU0NTkgLTkuOTk1OTEgNTMuNTQ0MzIgLTkuOTk2MDcgNTMuNTQzNjMgLTkuOTg4NjggNTMuNTQ1NTggLTkuOTg5ODIgNTMuNTQ3NzkgLTkuOTkxMTcgNTMuNTQ3MyAtOS45ODQ5IDUzLjU0Njc1IC05Ljk4MjE3IDUzLjU0NTU4IC05Ljk3OTE2IDUzLjU0NTA4IC05Ljk3Mjg4IDUzLjU0NzA0IC05Ljk3Mzg3IDUzLjU0ODY0IC05Ljk4MDIxIDUzLjU1MDY5IC05Ljk3MzAzIDUzLjU1MjIzIC05Ljk3MjA5IDUzLjU1MzE3IC05Ljk3MzIgNTMuNTU0OTUgLTkuOTcxMzkgNTMuNTU0NjkgLTkuOTY3IDUzLjU1MzUzIC05Ljk2NTI0IDUzLjU1MjAyIC05Ljk2NDMzIDUzLjU1MDM4IC05Ljk2NDAyIDUzLjU0OTI0IC05Ljk2MTk0IDUzLjU0OTg1IC05Ljk1ODM1IDUzLjU1MDk1IC05Ljk1MzE1IDUzLjU1MjI0IC05Ljk0NzY3IDUzLjU1NTM5IC05Ljk1ODMyIDUzLjU1ODMxIC05Ljk2OTQxIDUzLjU1NzI4IC05Ljk3MjQ1IDUzLjU1NTUzIC05Ljk3NjI4IDUzLjU1NDQxIC05Ljk4MTk0IDUzLjU1MzY4IC05Ljk4NzIyIDUzLjU1NTUzIC05Ljk4OTg4IDUzLjU1Nzg0IC05Ljk4OTcyIDUzLjU1OTA1IC05Ljk4Njg2IDUzLjU1ODc2IC05Ljk4Mjk0IDUzLjU1ODEgLTkuOTgwNDkgNTMuNTU4OTEgLTkuOTc4MTggNTMuNTYgLTkuOTc3IDUzLjU2MjM5IC05Ljk3NTc1IDUzLjU2MzEgLTkuOTcyMDIgNTMuNTU5NzggLTkuOTcwNzYgNTMuNTU5NzIgLTkuOTY0ODggNTMuNTYzMDQgLTkuOTY3NTQgNTMuNTY0NiAtOS45Njc1MyA1My41NjYxIC05Ljk2NDU2IDUzLjU2NDA3IC05Ljk2MDYyIDUzLjU2NjY2IC05Ljk1NzcyIDUzLjU2OTI5IC05Ljk1Mjk3IDUzLjU3MDA0IC05Ljk2MDg0IDUzLjU2OTE5IC05Ljk2Mzc3IDUzLjU2ODg3IC05Ljk2NzExIDUzLjU2OTYyIC05Ljk3MDk3IDUzLjU3MDkgLTkuOTc1MDggNTMuNTcxMjggLTkuOTc5MDEgNTMuNTcxMzcgLTkuOTgzMDYgNTMuNTcyIC05Ljk4ODU4IDUzLjU3MzE0IC05Ljk5NjA4IDUzLjU3NDI1IC0xMC4wMDI3OSA1My41NzUyMyAtMTAuMDA5OTMgNTMuNTc3NiAtMTAuMDE1NjYgNTMuNTgwNTUgLTEwLjAxODM5IDUzLjU4MjYyIC0xMC4wMjA0OSA1My41ODQ5MyAtMTAuMDI0MzQgNTMuNTg3MDYgLTEwLjAyODAxIDUzLjU4OTU1IC0xMC4wMzA4MSA1My41OTE4OSAtMTAuMDM0MiA1My41OTUyNCAtMTAuMDM2NTQgNTMuNTk3NDIgLTEwLjAzNTU5IDUzLjU5ODggLTEwLjAzNjk0IDUzLjYwMDQyIC0xMC4wMzg3OSA1My42MDIzNCAtMTAuMDQxNjQgNTMuNjA1MDggLTEwLjAzOCA1My42MDY4OCAtMTAuMDM4NTEgNTMuNjA4NTEgLTEwLjAzNzc1IDUzLjYwODgxIC0xMC4wMzMzMSA1My42MDkwMyAtMTAuMDI4ODYgNTMuNjA4NTggLTEwLjAyNDc1IDUzLjYwNzIzIC0xMC4wMjAxNiA1My42MDU3IC0xMC4wMTY5MiA1My42MDU2NCAtMTAuMDExMTkgNTMuNjA1IC0xMC4wMDQ0MSA1My42MDcyNiAtMTAuMDAwOTggNTMuNjA5NTUgLTkuOTk5NzEgNTMuNjA5MjggLTkuOTkzMDEgNTMuNjA4OTYgLTkuOTg3MDYgNTMuNjA4MDIgLTkuOTgxNzggNTMuNjA2NyAtOS45NzY4OCA1My42MDUzNSAtOS45NzI0NCA1My42MDYwNCAtOS45Njc2MyA1My42MDM3NSAtOS45NjYxMSA1My42MDIyIC05Ljk2NDU3IDUzLjU5OTk5IC05Ljk2MTgyIDUzLjU5ODkxIC05Ljk1NjE5IDUzLjU5OTE4IC05Ljk0ODE5IDUzLjYwMDU5IC05LjkzODI2IDUzLjU5OTY3IC05LjkzNDIxIDUzLjU5ODUyIC05LjkzMDkgNTMuNTk3NCAtOS45MjU1NyA1My41OTczNCAtOS45MjEwOCA1My41OTc3NCAtOS45MTUxMSA1My41OTY0MSAtOS45MTAzOSA1My41OTc2MiAtOS45MDczNyA1My41OTg1NiAtOS45MDQ0NSA1My41OTk5OSAtOS45MDEwMSA1My42MDE5MSAtOS44OTk4MyA1My42MDM2NSAtOS44OTg2MSA1My42MDU4MyAtOS44OTYyNSA1My42MDQ0NCAtOS44OTM2NiA1My42MDUzMSAtOS44OTE2NiA1My42MDQ5NiAtOS44ODYwMyA1My42MDQzOCAtOS44ODExMiA1My42MDYxNiAtOS44ODQ3IDUzLjYwNjUgLTkuODg3ODcgNTMuNjA3MDQgLTkuODkxOTkgNTMuNjExOTIgLTkuODkyIDUzLjYxMjc4IC05Ljg4ODc2IDUzLjYxMTM0IC05Ljg4NjkzIDUzLjYxMTUzIC05Ljg4MDE2IDUzLjYxMzU2IC05Ljg3ODg0IDUzLjYxMjY0IC05Ljg3NDY1IDUzLjYxMjIyIC05Ljg3MTMxIDUzLjYxMjc2IC05Ljg2ODc5IDUzLjYxNTE4IC05Ljg2NTY5IDUzLjYxMzQ2IC05Ljg2MTE5IDUzLjYxMjMyIC05Ljg1NDkzIDUzLjYxMDQyIC05Ljg0NjIyIDUzLjYwNzI3IC05Ljg0MjIyIDUzLjYwOTUyIC05Ljg0MTcxIDUzLjYxMTM0IC05Ljg0MzQ1IDUzLjYxMjY0IC05Ljg0NjAyIDUzLjYxNDIyIC05Ljg0ODUgNTMuNjE1MjMgLTkuODUxMTYgNTMuNjE2MzEgLTkuODU3MDggNTMuNjE3MzcgLTkuODYwNTMgNTMuNjE5MTYgLTkuODY1MjEgNTMuNjIxMjQgLTkuODY4NyA1My42MjQzOCAtOS44NzI3IDUzLjYyNDY4IC05Ljg2NTQ5IDUzLjYyMzg3IC05Ljg2MSA1My42MjE4MiAtOS44NTczNiA1My42MjA1MSAtOS44NTM1NSA1My42MTg4NSAtOS44NDk1MiA1My42MTc5IC05Ljg0NDM5IDUzLjYxNjggLTkuODM4NzcgNTMuNjE1MjEgLTkuODMyNDMgNTMuNjEyNTkgLTkuODI3NTkgNTMuNjA5OTUgLTkuODI0MzEgNTMuNjA3NzEgLTkuODE5MjUgNTMuNjA3NSAtOS44MTQyNSA1My42MDY5MyAtOS44MDg4OSA1My42MDUxNyAtOS44MDQ5OSA1My42MDI5NyAtOS44MDA3MSA1My42MDEzMSAtOS43OTgwOCA1My41OTkyNSAtOS43OTU4MyA1My41OTg5NiAtOS43OTA1MiA1My41OTc4OCAtOS43ODcyMiA1My41OTYxMiAtOS43ODMzMyA1My41OTM2NSAtOS43ODA0IDUzLjU5MjQ2IC05Ljc3NzU0IDUzLjU5Mzg1IC05Ljc2Nzc1IDUzLjU5NDc1IC05Ljc1OTg4IDUzLjU5NTggLTkuNzU1MTIgNTMuNTk3IC05Ljc1MDg3IDUzLjU5NzEyIC05Ljc0MzQ3IDUzLjU5ODU1IC05LjczODYzIDUzLjU5ODg5IC05LjczMjIgNTMuNTk4OTkgLTkuNzI1MTEgNTMuNTk4MDIgLTkuNzIwMjggNTMuNTk3MzUgLTkuNzE1MDUgNTMuNTk1OTkgLTkuNzEyMDEgNTMuNTk1NzQgLTkuNzA3NDkgNTMuNTk1MDIgLTkuNzAxNjMgNTMuNTk0MjcgLTkuNjk3NjIgNTMuNTkzMjggLTkuNjk0NDkgNTMuNTk1NDMgLTkuNjg5OCA1My41OTcyOCAtOS42ODY4OSA1My42MDAyNiAtOS42ODYzNiA1My42MDI1OCAtOS42ODE4NSA1My42MDQ0IC05LjY3ODAxIDUzLjYwNjg2IC05LjY3MTUxIDUzLjYwNzMxIC05LjY2NzQxIDUzLjYwNjYxIC05LjY2NDE5IDUzLjYwODc1IC05LjY2MzgxIDUzLjYxMDA1IC05LjY2MzU5IDUzLjYxMjA5IC05LjY2MzM1IDUzLjYxNDA4IC05LjY2NTI2IDUzLjYxMTc4IC05LjY2OTQ4IDUzLjYwOTIzIC05LjY3MTk0IDUzLjYwNzUyIC05LjY3Njg5IDUzLjYwNTUxIC05LjY4MjI0IDUzLjYwMzEgLTkuNjg4MTMgNTMuNjAyOTIgLTkuNjkwNzMgNTMuNjAzMDkgLTkuNjk1MDkgNTMuNjAzNTkgLTkuNjk4NzUgNTMuNjAyMzIgLTkuNzA1MzEgNTMuNjAzMDYgLTkuNzA4MjMgNTMuNjAzNTYgLTkuNzExNzMgNTMuNjAyMTIgLTkuNzE4MTEgNTMuNjAwNjIgLTkuNzI5NTcgNTMuNjAxMzkgLTkuNzMzNDMgNTMuNjAyMTMgLTkuNzM3NDQgNTMuNjAyMzQgLTkuNzQyNTkgNTMuNjA0MDkgLTkuNzQyNjEgNTMuNjAyMTQgLTkuNzQ4MjcgNTMuNjAxMyAtOS43NTI3NiA1My42MDA2OCAtOS43NTkyOSA1My42MDEwMSAtOS43Njk0IDUzLjYwMTgyIC05Ljc3NjY3IDUzLjYwMzg3IC05Ljc4MzEgNTMuNjA2NDUgLTkuNzg4NTMgNTMuNjA5MzQgLTkuNzk0OTYgNTMuNjEyMjIgLTkuODAxMzcgNTMuNjE0NjIgLTkuODA4MzIgNTMuNjE1NDcgLTkuODEzNDMgNTMuNjE3NDMgLTkuODIwMDEgNTMuNjE5NjQgLTkuODI1MzcgNTMuNjIyMyAtOS44MzIzOCA1My42MjIzMSAtOS44MzY0IDUzLjYyMjM4IC05Ljg0MDc1IDUzLjYyMjk2IC05Ljg0NTgyIDUzLjYyNDE0IC05Ljg0ODgyIDUzLjYyNzE4IC05Ljg1NDM2IDUzLjYyOTU5IC05Ljg1ODA3IDUzLjYyOTU5IC05Ljg2NTAzIDUzLjYzMTIgLTkuODY4MjggNTMuNjMyNDEgLTkuODcwODMgNTMuNjM0MDkgLTkuODY5MTQgNTMuNjMzNjUgLTkuODY2MTIgNTMuNjMzNTcgLTkuODYzMzEgNTMuNjM1NSAtOS44NjYxNiA1My42MzY3OCAtOS44NjkwNCA1My42NDAwOSAtOS44NzA0NSA1My42NDE1OSAtOS44NzQxMiA1My42NDM4NiAtOS44NzczNSA1My42NDQyMSAtOS44NzIxNSA1My42NDc3NSAtOS44NzE1OSA1My42NDc3NSAtOS44NzE1OSA1My42NDgyIC05Ljg3NDMxIDUzLjY0ODg3IC05Ljg3NjYxIDUzLjY0ODM2IC05Ljg4MTYyIDUzLjY0OTEzIC05Ljg4NTE3IDUzLjY0OTQ4IC05Ljg4OTU4IDUzLjY0OTk1IC05Ljg5NjE3IDUzLjY1MTIxIC05LjkwMjE0IDUzLjY1MzcgLTkuOTA0NzggNTMuNjU3NjQgLTkuOTA1MDggNTMuNjYyMjcgLTkuOTA0NzIgNTMuNjY3NDUgLTkuOTAyNzcgNTMuNjcwNyAtOS45MDI0NyA1My42NzE4IC05LjkwMTEyIDUzLjY3MzggLTkuODk4ODggNTMuNjc1NCAtOS44OTk2NSA1My42NzcwNSAtOS44OTk4MSA1My42Nzk1NSAtOS45MDA5MSA1My42ODE1NiAtOS45MDExMyA1My42ODM2NiAtOS45MDQxNyA1My42ODU1NSAtOS45MDc2MyA1My42ODc1NyAtOS45MTAzNSA1My42ODkzIC05LjkxMDUzIDUzLjY5MDY2IC05LjkwOTcxIDUzLjY5MjcxIC05LjkwOTMzIDUzLjY5MzYzIC05LjkxMDU4IDUzLjY5NDUxIC05LjkxMjQ2IDUzLjY5NTA2IC05LjkwOTc4IDUzLjY5NjA1IC05LjkwNjI1IDUzLjY5ODY2IC05LjkwNDU5IDUzLjcwMTU5IC05LjkwNDg2IDUzLjcwNjk3IC05LjkwNDM4IDUzLjcxMDU2IC05LjkwNDQ2IDUzLjcxMjk3IC05LjkwMTY4IDUzLjcxNzgxIC05Ljg5NzA0IDUzLjcyMzQxIC05Ljg5MjA5IDUzLjcyOTQ4IC05Ljg4ODMzIDUzLjczNDA4IC05Ljg4NzA2IDUzLjczNzMyIC05Ljg4OTU1IDUzLjc0MDc0IC05Ljg5MDcgNTMuNzQ0MjUgLTkuODkwNzcgNTMuNzQ3OSAtOS44OTEzMyA1My43NTAzNyAtOS44OTgwNCA1My43NTE5NyAtOS44OTg5OSA1My43NTUwOSAtOS44OTY1IDUzLjc1ODI4IC05Ljg5NTcyIDUzLjc2MTU3IC05Ljg5MzQzIDUzLjc2MzA1IC05Ljg4OTM3IDUzLjc2MjQxIC05Ljg4NTM1IDUzLjc2MjA4IC05Ljg4MjE4IDUzLjc2MTY3IC05Ljg3ODgzIDUzLjc2MTY2IC05Ljg3MzcgNTMuNzYyMjUgLTkuODY3NzQgNTMuNzYzOTMgLTkuODYwOTIgNTMuNzY2IC05Ljg1NzYgNTMuNzY1MTUgLTkuODUyNjEgNTMuNzY2NDYgLTkuODQ3MTIgNTMuNzY3NjUgLTkuODQzMTYgNTMuNzY2ODMgLTkuODM3NzEgNTMuNzY2OTkgLTkuODMxMzcgNTMuNzY3MDcgLTkuODI3NSA1My43NjkzOSAtOS44MjMyOSA1My43Njc1OCAtOS44MjAxMyA1My43Njg1OSAtOS44MTM0OSA1My43NzAwNCAtOS44MDk4OCA1My43NzEyNSAtOS44MDU3NyA1My43NzQyNSAtOS44MDIzMiA1My43NzYwOCAtOS43OTcyMyA1My43NzYgLTkuNzg3NzMgNTMuNzc5MDEgLTkuNzgyNzMgNTMuNzc4NjggLTkuNzc2NzYgNTMuNzc5ODIgLTkuNzcyMTYgNTMuNzc5MDggLTkuNzY4MjggNTMuNzgwMDEgLTkuNzYyODUgNTMuNzc4NzkgLTkuNzYxNjggNTMuNzc3MTQgLTkuNzYwMjcgNTMuNzc0NzEgLTkuNzYwODkgNTMuNzcyNzIgLTkuNzYwMTkgNTMuNzcyMzMgLTkuNzUyNSA1My43NzE4IC05Ljc0NDE1IDUzLjc3MTc3IC05LjczNjUzIDUzLjc3MjU2IC05LjcyODkyIDUzLjc3MzYgLTkuNzE5MTYgNTMuNzc0ODcgLTkuNzEyNTYgNTMuNzczNTkgLTkuNzA5ODMgNTMuNzc0NzYgLTkuNzAzNTMgNTMuNzc2ODMgLTkuNjk2MTUgNTMuNzc4NTEgLTkuNjkwMjYgNTMuNzc5MTggLTkuNjgzMjMgNTMuNzgyMDMgLTkuNjc5MjcgNTMuNzgzMyAtOS42NzE0NCA1My43ODIyNCAtOS42NjkzNyA1My43ODMyOSAtOS42NjczOSA1My43ODQ1NiAtOS42NjQ5OSA1My43ODU4NiAtOS42NjA3MyA1My43ODY0MSAtOS42NTY4IDUzLjc4NDgxIC05LjY1NDYzIDUzLjc4MjA4IC05LjY1MjcgNTMuNzggLTkuNjUxOTggNTMuNzgwNjcgLTkuNjQ2MzcgNTMuNzc5OTEgLTkuNjQzODkgNTMuNzc5OTQgLTkuNjM1MzUgNTMuNzgyMzYgLTkuNjMzNDggNTMuNzg1NTggLTkuNjM1MDMgNTMuNzg0NzQgLTkuNjMwOTggNTMuNzg2MTggLTkuNjMwMTYgNTMuNzg2NDQgLTkuNjI2NDggNTMuNzg2MTIgLTkuNjIyODQgNTMuNzg1MSAtOS42MjAzMSA1My43ODI5OCAtOS42MTc1OCA1My43ODMyMiAtOS42MTQwNCA1My43ODEzIC05LjYwNyA1My43NzkyMyAtOS42MTU3NyA1My43NzggLTkuNjE2MzEgNTMuNzc5MTcgLTkuNjA0MjYgNTMuNzc3NSAtOS42MDE3NiA1My43ODExMyAtOS41OTk4IDUzLjc3OTU2IC05LjU5NzE4IDUzLjc3OTk4IC05LjU5MDg5IDUzLjc4MDUzIC05LjU4NjggNTMuNzgwMyAtOS41ODA2OSA1My43ODA1NiAtOS41NzQwNSA1My43ODI1MSAtOS41NzM5NSA1My43ODQ3OSAtOS41NzU0OCA1My43ODU2NSAtOS41Njk1OCA1My43ODcxOSAtOS41NjU5OCA1My43ODg3OSAtOS41NzIzNCA1My43OTAyIC05LjU3MDQ0IDUzLjc4OTYzIC05LjU2MzgxIDUzLjc5MTA2IC05LjU2MTc0IDUzLjc5MTI1IC05LjU1ODk5IDUzLjc5MzMyIC05LjU1Njg4IDUzLjc5NTQ5IC05LjU2MzA1IDUzLjc5NjUgLTkuNTYwMjkgNTMuNzk2MDYgLTkuNTU1ODQgNTMuNzk1MTkgLTkuNTQ5NjIgNTMuNzk2NTIgLTkuNTQ0NzMgNTMuNzk3NzggLTkuNTQxMjUgNTMuNzk5ODcgLTkuNTM4ODQgNTMuODAxNzEgLTkuNTM4ODggNTMuNzk5NzkgLTkuNTQyODcgNTMuODAwMzggLTkuNTQ3ODEgNTMuODAxOCAtOS41NDQ1IDUzLjgwMjggLTkuNTQzMjkgNTMuODA0NDQgLTkuNTQ1IDUzLjgwNDgzIC05LjU1NDI1IDUzLjgwNzM1IC05LjU1OTM5IDUzLjgwNjIgLTkuNTYzOTkgNTMuODA0NjEgLTkuNTY4NTIgNTMuODA0MTUgLTkuNTY0MzkgNTMuODAzMTMgLTkuNTYzMTEgNTMuODAyOCAtOS41NTgzNyA1My44MDE1MyAtOS41NTgxNCA1My44MDE2NCAtOS41NjMyOSA1My44MDIwOSAtOS41Njc1NyA1My44MDE4NyAtOS41NzIzNSA1My44MDM1NSAtOS41NzYxIDUzLjgwMjg2IC05LjU4MDk1IDUzLjgwMzE5IC05LjU4NTY3IDUzLjgwMDI5IC05LjU4MjE2IDUzLjggLTkuNTg5MSA1My44MDI5IC05LjU4OTk2IDUzLjgwMzk1IC05LjU4OCA1My44MDU4IC05LjU4Nzg4IDUzLjgwNjIxIC05LjU4MDQ5IDUzLjgwNzUgLTkuNTc5MDIgNTMuODA4NyAtOS41ODAzNSA1My44MTAyNyAtOS41ODU3OCA1My44MDk2OCAtOS41OTE4OSA1My44MDk1MyAtOS41OTY4MyA1My44MDgwOCAtOS41OTY1NiA1My44MDg1NiAtOS42MDAyMiA1My44MDkzNCAtOS42MDM4IDUzLjgwOTQzIC05LjYwNzg3IDUzLjgxMTE4IC05LjYwOTI4IDUzLjgxMDk4IC05LjYxMzYgNTMuODEyNDkgLTkuNjE1NzYgNTMuODEzMiAtOS42MTM1NyA1My44MTUyIC05LjYxNTIgNTMuODE1MzMgLTkuNjA3OSA1My44MTM4NiAtOS42MDUxMyA1My44MTI3NSAtOS42MDI0MyA1My44MTIxMSAtOS41OTgxIDUzLjgxMjE3IC05LjU5MTc1IDUzLjgxMzYzIC05LjU5MzQyIDUzLjgxNDQgLTkuNTk3MTUgNTMuODE2MTcgLTkuNjAwOTEgNTMuODE3ODQgLTkuNjA0OCA1My44MTk5OCAtOS42MDcyNCA1My44MTk5OCAtOS42MDcyNCA1My44MTkxNiAtOS42MDMwNCA1My44MjAzOCAtOS41OTcyIDUzLjgyMTc0IC05LjYwMDI2IDUzLjgyMzE4IC05LjYwMzUgNTMuODI0NTUgLTkuNjAwOTUgNTMuODI0MiAtOS42MDQ3OCA1My44MjM1OSAtOS42MDg0IDUzLjgyNTA0IC05LjYxMDA4IDUzLjgyNjk5IC05LjYxMTIyIDUzLjgyODExIC05LjYwODMzIDUzLjgyNzUxIC05LjYwMzU0IDUzLjgyNzU5IC05LjU5ODExIDUzLjgyODk2IC05LjU5Mjc3IDUzLjgzMTU5IC05LjU4OTM4IDUzLjgzMjk1IC05LjU5MjQ0IDUzLjgzMjc3IC05LjU5Nzg2IDUzLjgzMTY5IC05LjYwMTY5IDUzLjgzMDM0IC05LjYwMjUzIDUzLjgyOTI4IC05LjYxMDEgNTMuODMwMiAtOS42MTEzNyA1My44MzE4NCAtOS42MDc2NCA1My44MzMyNyAtOS42MDU0MyA1My44MzYzMSAtOS42MDQxNCA1My44MzY4MiAtOS42MDc2NSA1My44Mzc2IC05LjYxMDkzIDUzLjgzOTU0IC05LjYwOTU4IDUzLjg0MTUzIC05LjYxMDExIDUzLjg0MjExIC05LjYwNjk2IDUzLjg0MzU1IC05LjYwMzM1IDUzLjg0MzA3IC05LjYwMDkxIDUzLjg0MjEyIC05LjU5NTkxIDUzLjg0NTM1IC05LjU5MzEgNTMuODQ1MTMgLTkuNTg5NDggNTMuODQ0MTIgLTkuNTg2NjQgNTMuODQyODggLTkuNTgzMTMgNTMuODQyNDQgLTkuNTc4NyA1My44NDI2NSAtOS41NzI4MSA1My44NDE5MyAtOS41NjcwNyA1My44NDI5IC05LjU2MjExIDUzLjg0NDM5IC05LjU1Nzg5IDUzLjg0NTU3IC05LjU1OTUxIDUzLjg0NDggLTkuNTYyNjQgNTMuODQ0MDEgLTkuNTY5MDIgNTMuODQ0OTUgLTkuNTc0MTkgNTMuODQ1ODkgLTkuNTc2ODUgNTMuODQ2MDkgLTkuNTc5MjQgNTMuODQ5MjkgLTkuNTgwOTQgNTMuODQ5MjkgLTkuNTgwOTQgNTMuODUwNDkgLTkuNTc5NiA1My44NTEzNSAtOS41NzYzNSA1My44NTEzNSAtOS41NzYzNSA1My44NTAzIC05LjU3MjcxIDUzLjg0OTU5IC05LjU2OTYyIDUzLjg0OTU5IC05LjU2NTQxIDUzLjg0ODQ4IC05LjU2Mjg3IDUzLjg0NzEyIC05LjU2MTA2IDUzLjg0NjM0IC05LjU1NjIzIDUzLjg0NzM3IC05LjU1NDcyIDUzLjg0OTIxIC05LjU1NzM5IDUzLjg1MDY3IC05LjU1NzUzIDUzLjg1MDk1IC05LjU2MDIzIDUzLjg1MTQgLTkuNTYzMTIgNTMuODUzMDggLTkuNTY0MjIgNTMuODUyOTQgLTkuNTU5NTEgNTMuODUzNjEgLTkuNTU3NjIgNTMuODU0NTQgLTkuNTYwNDMgNTMuODU0OSAtOS41NjMzMiA1My44NTQyIC05LjU2ODE2IDUzLjg1NDI0IC05LjU3MzE1IDUzLjg1NDUgLTkuNTc4ODEgNTMuODU2NDIgLTkuNTgxODIgNTMuODU2MTMgLTkuNTc2NjIgNTMuODU2NDMgLTkuNTcyMDIgNTMuODU1OTkgLTkuNTY3NTcgNTMuODU3MzIgLTkuNTY0MjQgNTMuODU3OTQgLTkuNTU5MjEgNTMuODU3MTIgLTkuNTU3NjYgNTMuODU1NDEgLTkuNTU1NjIgNTMuODU0NTggLTkuNTQ3MzYgNTMuODU2NzkgLTkuNTUwMTMgNTMuODU4MDIgLTkuNTUwOTkgNTMuODU4NDkgLTkuNTUzNTYgNTMuODU5NjEgLTkuNTU3NTIgNTMuODU5MDcgLTkuNTYwMjIgNTMuODU5MyAtOS41NjM2OCA1My44NTkwMiAtOS41NzA0OCA1My44NjI1OSAtOS41NjUyNCA1My44NjE0OSAtOS41NjExNCA1My44NjI5OCAtOS41NTY3NiA1My44NjE5NCAtOS41NTQ1MyA1My44NjA3NCAtOS41NTE2NiA1My44NjIxMiAtOS41NTAzNiA1My44NjM0NiAtOS41NTA5MyA1My44NjQzMyAtOS41NTU5MiA1My44NjQ0MiAtOS41NTk5OSA1My44NjQxNCAtOS41NjU1NCA1My44NjM2NiAtOS41Njk5NyA1My44NjMyOSAtOS41NzQyNiA1My44NjI5NCAtOS41NzgwOSA1My44NjMwMiAtOS41ODM3MSA1My44NjE4OSAtOS41ODk1NyA1My44NjM3NSAtOS41OTM1IDUzLjg2NDEgLTkuNTg5NjcgNTMuODY1NTEgLTkuNTg2MzYgNTMuODY0OTEgLTkuNTgyOTcgNTMuODY3MyAtOS41NzkwNyA1My44NjcwNiAtOS41NzcxNiA1My44NjYgLTkuNTc0OTMgNTMuODY1NTcgLTkuNTcxODggNTMuODY2MDggLTkuNTY2ODQgNTMuODY2OTggLTkuNTY0NzUgNTMuODY3NTYgLTkuNTY4MjIgNTMuODY3MyAtOS41NzA2NiA1My44NjgxMSAtOS41NzIzOCA1My44NjkxMSAtOS41NzExNiA1My44Njk1NyAtOS41Njg0NSA1My44NzAwMSAtOS41NjYwNCA1My44NzAzMSAtOS41NjI4MiA1My44NzA1IC05LjU2MDA1IDUzLjg3IC05LjU1Nzc4IDUzLjg3MTU0IC05LjU1NTU4IDUzLjg3MjAxIC05LjU1MjcxIDUzLjg3MjAyIC05LjU0OTc0IDUzLjg3MzA0IC05LjU0Njk4IDUzLjg3MzkyIC05LjU0NDY3IDUzLjg3NTQ3IC05LjU0NDk1IDUzLjg3NTI0IC05LjU0Njk0IDUzLjg3Mzk2IC05LjU1MDkgNTMuODczNTggLTkuNTUzOTQgNTMuODczOTIgLTkuNTU3MTIgNTMuODczNDIgLTkuNTYwNDUgNTMuODcxODggLTkuNTY0MjIgNTMuODcyMDkgLTkuNTY2NTkgNTMuODcyNSAtOS41NzAwOSA1My44NzE1MyAtOS41NzIyNCA1My44NzA4NCAtOS41NzU3MSA1My44NzE0NCAtOS41NzkwOCA1My44NzIyNCAtOS41ODE5MyA1My44NzIyNCAtOS41ODE5MyA1My44NzAzOSAtOS41ODI0NSA1My44Njg4NSAtOS41ODIgNTMuODY4MDYgLTkuNTg0MTkgNTMuODY4ODEgLTkuNTg2ODMgNTMuODY5MzUgLTkuNTkwMDMgNTMuODcwMzIgLTkuNTg5MTMgNTMuODcxMzEgLTkuNTg3OTEgNTMuODcyMTMgLTkuNTg2NjYgNTMuODczNzggLTkuNTgxNSA1My44NzM3OCAtOS41ODE1IDUzLjg3MzM2IC05LjU3NjQ5IDUzLjg3MzY2IC05LjU3MzQzIDUzLjg3NTEyIC05LjU3MDkgNTMuODc1OTkgLTkuNTY4OSA1My44NzYxNiAtOS41NjYyOCA1My44NzYxNiAtOS41NjM2MiA1My44NzU0MSAtOS41NjA5OSA1My44NzU1NyAtOS41NTg1MiA1My44NzgwOCAtOS41NTgyMyA1My44NzkgLTkuNTU1NDQgNTMuODc5NiAtOS41NTc1OCA1My44ODAzNyAtOS41NjExNiA1My44NzgyNSAtOS41NjI2MyA1My44Nzg2OCAtOS41NjU5NyA1My44NzgyMSAtOS41Njg2OSA1My44NzcyNiAtOS41NzE5NCA1My44NzY2NiAtOS41NzQwMSA1My44Nzc3NyAtOS41NzgxMSA1My44Nzg4IC05LjU3MzY0IDUzLjg3OTY2IC05LjU3MDUzIDUzLjg4MTY2IC05LjU2OTUxIDUzLjg4MDgzIC05LjU2Njg1IDUzLjg4MTI2IC05LjU2NDQ1IDUzLjg4MTg2IC05LjU2MTEzIDUzLjg4MjM5IC05LjU1ODU4IDUzLjg4MTg1IC05LjU1NTY4IDUzLjg4MTk3IC05LjU1MjQyIDUzLjg4MTk5IC05LjU0NjY2IDUzLjg4NDI0IC05LjU1MTYxIDUzLjg4NDUgLTkuNTQ5MTYgNTMuODg1MDYgLTkuNTQ3NTYgNTMuODg2MDUgLTkuNTQ1MjUgNTMuODg3MTggLTkuNTQ3NSA1My44ODY2OSAtOS41NDk0MyA1My44ODYxIC05LjU1MTMzIDUzLjg4NTcyIC05LjU1NDIzIDUzLjg4NTU4IC05LjU1NjM4IDUzLjg4NjY5IC05LjU1OTA5IDUzLjg4Nzk2IC05LjU2MDczIDUzLjg4OTA3IC05LjU2MjA0IDUzLjg4ODcxIC05LjU2NDYxIDUzLjg4OTQ5IC05LjU2ODIgNTMuODkwNzQgLTkuNTY4ODkgNTMuODkyMTggLTkuNTY3NzcgNTMuODk0MDIgLTkuNTY3OTYgNTMuODk1MzMgLTkuNTY0OTQgNTMuODk3MDUgLTkuNTY1NDMgNTMuODk3NDYgLTkuNTY4NzkgNTMuODk2NTYgLTkuNTY5ODUgNTMuODk1MTcgLTkuNTcwMDUgNTMuODkzOCAtOS41NzExOSA1My44OTM0MyAtOS41NzU0OSA1My44OTE4MSAtOS41NzQ3MiA1My44OTAyOSAtOS41NzQxMiA1My44ODgxOCAtOS41NzU0MiA1My44ODcxNiAtOS41NzY3OSA1My44ODU0MiAtOS41Nzk0MSA1My44ODYwMiAtOS41ODU2MiA1My44ODgxNiAtOS41ODQgNTMuODg5OTMgLTkuNTgyMyA1My44OTE2OCAtOS41ODA5MiA1My44OTUxNCAtOS41ODE0MyA1My44OTQ4MSAtOS41ODM3IDUzLjg5Mjc1IC05LjU4NTY1IDUzLjg5MzMzIC05LjU4OTE4IDUzLjg5MDUxIC05LjU5Mjg1IDUzLjg4ODM1IC05LjU5MDczIDUzLjg4OTEgLTkuNTk0NjIgNTMuODg3NzIgLTkuNTk1OSA1My44ODc5OSAtOS42MDAxNyA1My44ODQ5NiAtOS41OTcyNSA1My44ODM4NyAtOS42MDM5IDUzLjg4ODY5IC05LjYwNzYzIDUzLjg5MTc3IC05LjYwMjkyIDUzLjg5MTI2IC05LjYwOTIxIDUzLjg5MTk2IC05LjYxMzcxIDUzLjg4OTYgLTkuNjE2MDYgNTMuODg5ODggLTkuNjE4NzcgNTMuODg3ODkgLTkuNjIwODggNTMuODg1MDMgLTkuNjIyMiA1My44ODUzNCAtOS42Mjg2NiA1My44ODc1MyAtOS42Mjc2NiA1My44ODk3MiAtOS42MjUyOCA1My44OTEwMSAtOS42MjExNiA1My44OTI2IC05LjYxOTI5IDUzLjg5MjU0IC05LjYyNDQyIDUzLjg5MzEyIC05LjYyODEyIDUzLjg5MzkxIC05LjYzMjc5IDUzLjg5MTgzIC05LjYzNDg5IDUzLjg4OTQgLTkuNjM4MTYgNTMuODg5MzEgLTkuNjQ2NTcgNTMuODg5MzEgLTkuNjQ2NTcgNTMuODkyMjQgLTkuNjQ2NSA1My44OTQxNCAtOS42NDQzOCA1My44OTY0NyAtOS42NDc5NCA1My44OTU0NyAtOS42NTE5NSA1My44OTQ0MSAtOS42NTEyOCA1My44OTI5MiAtOS42NTI4NyA1My44OTAwMSAtOS42NTc3NiA1My44ODg1NCAtOS42NTc2NCA1My44ODY2MiAtOS42NjAyMyA1My44ODY0NiAtOS42NjI1NCA1My44ODg3NCAtOS42NjI4MiA1My44OTA5OCAtOS42NjI0NyA1My44OTIzNCAtOS42NjAwOSA1My44OTQxNiAtOS42NTkwMyA1My44OTM1NCAtOS42NjQwNSA1My44OTM1IC05LjY2NjA3IDUzLjg5Mzk3IC05LjY2ODgxIDUzLjg5MzggLTkuNjc1MzQgNTMuODk3NiAtOS42NzIzMiA1My44OTY5IC05LjY3OTgzIDUzLjg5NTcyIC05LjY4MzY1IDUzLjg5NDU0IC05LjY5MDI4IDUzLjg5NTM2IC05LjY5NDQ5IDUzLjg5NjY4IC05LjY5NTIzIDUzLjg5NjUzIC05LjY5ODkzIDUzLjg5NjMgLTkuNzA2MzcgNTMuODk0NzUgLTkuNzA4ODggNTMuODkxOTUgLTkuNzEwODMgNTMuODkzMDIgLTkuNzE2NjUgNTMuODk0OTggLTkuNzE0ODYgNTMuODk2NDEgLTkuNzA4ODkgNTMuODk2NjYgLTkuNzE0NTYgNTMuODk1ODYgLTkuNzE5NTMgNTMuODk1OTQgLTkuNzI1MzIgNTMuODk3ODQgLTkuNzMxMTUgNTMuODk3MzYgLTkuNzM4MDcgNTMuODk1NiAtOS43MzY5NSA1My44OTMyNyAtOS43MzQ2MyA1My44OTEyOCAtOS43MzU0OSA1My44OTAwMyAtOS43Mzc1NyA1My44ODc2OCAtOS43MzU1NiA1My44ODY4OSAtOS43Mzc2IDUzLjg4ODI4IC05Ljc0MDIxIDUzLjg4ODU2IC05Ljc0Mjc1IDUzLjg5MDI3IC05Ljc0MzM5IDUzLjg5MTg1IC05Ljc0NDQ5IDUzLjg5MzcyIC05Ljc0Njg3IDUzLjg5Mzg3IC05Ljc1MjY4IDUzLjg5NTYzIC05Ljc1NDExIDUzLjg5NjQ0IC05Ljc1OTcyIDUzLjg5ODYgLTkuNzYzMTIgNTMuOTAwNzIgLTkuNzY1ODcgNTMuOTAwOTkgLTkuNzc1MjggNTMuODk5MzIgLTkuNzc2ODEgNTMuODk4NTYgLTkuNzczMDggNTMuODk1MTIgLTkuNzcyMjQgNTMuODkzMjcgLTkuNzY4MyA1My44OTM2NCAtOS43NzIyNyA1My44OTQxNyAtOS43Nzk0IDUzLjg5MzQ0IC05Ljc4MzMgNTMuODkwNiAtOS43ODU3MSA1My44ODY2IC05Ljc4ODk4IDUzLjg4NDk2IC05Ljc5MjcxIDUzLjg4MTk5IC05Ljc5NDMyIDUzLjg3OTc1IC05Ljc5NzQ2IDUzLjg3NzQgLTkuODAzMzggNTMuODc1NjcgLTkuODAzMjEgNTMuODc1MSAtOS44MDc0NSA1My44NzMxOCAtOS44MTI2OSA1My44NzA0NiAtOS44MjUyNCA1My44Njc3NyAtOS44Mzc2NCA1My44NjQ5OCAtOS44NTAwMyA1My44NjMzMyAtOS44NjE3MSA1My44NjI3IC05Ljg3MzQyIDUzLjg2MzY5IC05Ljg4MTczIDUzLjg2MjE2IC05Ljg4OTIyIDUzLjg2MDM5IC05Ljg5NDc5IDUzLjg2MTMgLTkuOTAwMjYgNTMuODYzMzkgLTkuOTA1OTggNTMuODY2NDIgLTkuOTEwMTcgNTMuODY3MzUgLTkuOTE1MzQgNTMuODY3MTkgLTkuOTIxNzEgNTMuODY2OTMgLTkuOTMwNTMgNTMuODY5MjIgLTkuOTM2MTQgNTMuODY4OTEgLTkuOTMxMjQgNTMuODcxMzEgLTkuOTMzNzQgNTMuODczMjggLTkuOTM3MjUgNTMuODczNTkgLTkuOTM0MiA1My44NzM1OSAtOS45MzAxNSA1My44NzE4MiAtOS45MjY1MiA1My44NzQ0NyAtOS45MjU2NSA1My44NzUwMyAtOS45MjI3OSA1My44NzcyMyAtOS45MjQzMiA1My44NzkzNSAtOS45MjQyOCA1My44ODA4NiAtOS45MTk5IDUzLjg4MzczIC05LjkxODI5IDUzLjg4ODY4IC05LjkxNjE2IDUzLjg5MjUzIC05LjkxNzg2IDUzLjg5NzIgLTkuOTIyMjIgNTMuOTAyMDIgLTkuOTIzMDIgNTMuOTA2NDIgLTkuOTIzNDMgNTMuOTEwMDEgLTkuOTIwODcgNTMuOTExMTkgLTkuOTE1OTUgNTMuOTE0MjggLTkuOTA5ODcgNTMuOTE3ODYgLTkuOTA4ODUgNTMuOTE5NzUgLTkuOTA1NDggNTMuOTIyMjIgLTkuOTAzMDIgNTMuOTI0MTYgLTkuOTAxNjggNTMuOTI2MDkgLTkuODk3ODUgNTMuOTI4MjcgLTkuODkyOTcgNTMuOTMwOTIgLTkuODkwNTQgNTMuOTMzMzMgLTkuODkzMDQgNTMuOTMyNTIgLTkuODk1MzggNTMuOTI5MjUgLTkuODk2MTUgNTMuOTI4MiAtOS44OTc5NiA1My45MjY0IC05LjkwMjU5IDUzLjkyODExIC05LjkwNzE2IDUzLjkzMDE0IC05LjkwODQ5IDUzLjkzMjk2IC05LjkwNzY1IDUzLjkzNTMgLTkuOTA4NTkgNTMuOTM5MjggLTkuOTA4MTMgNTMuOTM4MTcgLTkuOTAzMDcgNTMuOTQwMTQgLTkuODk4NjEgNTMuOTQyMTQgLTkuODk0OTYgNTMuOTQ0MjggLTkuODk0NzYgNTMuOTQ2MzQgLTkuODk1NjMgNTMuOTQ5MSAtOS44OTgyMSA1My45NTEzOSAtOS45MDExNyA1My45NTMxMSAtOS44OTg4NiA1My45NTE1MyAtOS44OTUxIDUzLjk0OTgzIC05Ljg5NDQ2IDUzLjk1MDY3IC05Ljg4OSA1My45NDY2IC05Ljg4Nzg3IDUzLjk0OTQzIC05Ljg4Mjk4IDUzLjk1MDI1IC05Ljg3NjQzIDUzLjk1Mzc4IC05Ljg3NjAzIDUzLjk1NDUxIC05Ljg3MDcxIDUzLjk1MjA2IC05Ljg2ODk3IDUzLjk1NDYzIC05Ljg2MzcxIDUzLjk1NDA3IC05Ljg1NTk0IDUzLjk1MzY0IC05Ljg0ODY3IDUzLjk1NDM1IC05Ljg0MzgyIDUzLjk1NDc0IC05LjgzODEyIDUzLjk1NTU5IC05LjgzMzkxIDUzLjk1NzM2IC05LjgzMjI0IDUzLjk1NjcgLTkuODI5NzYgNTMuOTU1MjEgLTkuODI5OTMgNTMuOTUzOTYgLTkuODI4MTIgNTMuOTUxOTQgLTkuODI3ODggNTMuOTQ5NTggLTkuODI4NjcgNTMuOTQ3MTMgLTkuODI2NzggNTMuOTQ1ODYgLTkuODIyNDcgNTMuOTQzNDUgLTkuODIyNzcgNTMuOTQ0ODkgLTkuODE3OTEgNTMuOTQzNzIgLTkuODE0NzIgNTMuOTQyNjYgLTkuODExMzggNTMuOTQyNDUgLTkuODA3NzUgNTMuOTQ0NDcgLTkuODA1MTggNTMuOTQ1NTQgLTkuODAzMDUgNTMuOTQ1NDcgLTkuODAwMDcgNTMuOTQ2ODQgLTkuNzk0ODcgNTMuOTQ0OTUgLTkuNzkyNzkgNTMuOTQzOCAtOS43OTIyNSA1My45NDI3NSAtOS43OTEyNSA1My45NDEzMyAtOS43OTE5MiA1My45Mzg3MyAtOS43OTIxOSA1My45MzYyNCAtOS43OTA5MiA1My45MzUgLTkuNzk0MjcgNTMuOTMyNzkgLTkuNzk0MTQgNTMuOTMwNzMgLTkuNzkzMjcgNTMuOTI4MjIgLTkuNzkyMyA1My45MjU4MiAtOS43OTA5IDUzLjkyMjc3IC05Ljc5NjM4IDUzLjkyNDUgLTkuNzk4MTMgNTMuOTI2NTMgLTkuODAwNzEgNTMuOTI2OTUgLTkuODA1MzIgNTMuOTI2MDggLTkuODA4NTggNTMuOTIyNTYgLTkuODA3NTcgNTMuOTIxNzMgLTkuODA0NzYgNTMuOTIxMDggLTkuODAyMTQgNTMuOTE5MzcgLTkuODAxNjUgNTMuOTE2NDcgLTkuODAwOTIgNTMuOTEyNTMgLTkuNzk5MjIgNTMuOTEwMDcgLTkuNzk3NjQgNTMuOTA4NzcgLTkuNzk0ODkgNTMuOTA4OTIgLTkuNzkwMDggNTMuOTA4NTcgLTkuNzg0MzkgNTMuOTEwMTMgLTkuNzg3MiA1My45MTM2NiAtOS43ODgwNSA1My45MTU4IC05Ljc4NjYgNTMuOTE3OTIgLTkuNzg5MiA1My45MTkxMyAtOS43ODY0NiA1My45MjEyNSAtOS43ODc2NiA1My45MjIyMyAtOS43ODU1MiA1My45MjQ0NCAtOS43ODU0OSA1My45MjY2OSAtOS43ODYzOSA1My45MjkwOSAtOS43ODYyNCA1My45MzA5MSAtOS43ODUxOCA1My45MzM0MiAtOS43ODQ3NSA1My45MzY1MyAtOS43ODY2MSA1My45Mzc5OCAtOS43ODU2MyA1My45Mzk3MSAtOS43ODU4MyA1My45NDIwNCAtOS43ODU1IDUzLjk0Mzc3IC05Ljc4NTgzIDUzLjk0NTU4IC05Ljc4OSA1My45NDgyOCAtOS43ODk4NSA1My45NDk0NSAtOS43ODg5OCA1My45NTEzMyAtOS43ODg1NyA1My45NTQyNCAtOS43ODg5OSA1My45NTYxNiAtOS43OTMyNyA1My45NTYxNiAtOS43OTMyNyA1My45NTgyNSAtOS43OTEwMiA1My45NjE0NiAtOS43OTEzMyA1My45NjQ1MiAtOS43OTM2NiA1My45Njc1OCAtOS43OTM0OCA1My45Njg5IC05Ljc4ODkgNTMuOTcwMzQgLTkuNzk0OTYgNTMuOTcxMSAtOS43OTg1NSA1My45NzIxOCAtOS44MDE1NiA1My45NzA2NyAtOS44MDM0NiA1My45Njk2NiAtOS44MDIwMiA1My45Njc4MSAtOS44MDA4NyA1My45NjU5OSAtOS43OTkxIDUzLjk2MzQ5IC05LjgwMDY0IDUzLjk2MTIzIC05LjgwMjcgNTMuOTU5OTYgLTkuODA1MSA1My45NjA5NyAtOS44MDc5NiA1My45NjI2MiAtOS44MTMyNyA1My45NjI2MiAtOS44MTg1OSA1My45NjExMyAtOS44MTc1MiA1My45NTk2NSAtOS44MTM2MyA1My45NTg1MiAtOS44MDk5OCA1My45NTYzMiAtOS44MDg0NCA1My45NTI1MiAtOS44MDYxMyA1My45NDkyMSAtOS44MDcyMSA1My45NDYyNiAtOS44MDg2NSA1My45NDY4OCAtOS44MTI5OSA1My45NDgyNyAtOS44MTI5NSA1My45NTE3MyAtOS44MTM2MiA1My45NTQ1MyAtOS44MTQ1IDUzLjk1NzE1IC05LjgxNjQyIDUzLjk1ODAxIC05LjgyMTQzIDUzLjk2MDQ0IC05LjgyMDk3IDUzLjk2MTI5IC05LjgyNDczIDUzLjk2NCAtOS44MjI3NiA1My45NjQzNiAtOS44MzA5NSA1My45NjI1MyAtOS44MzA3NSA1My45NjA3IC05LjgzMTggNTMuOTU5MzEgLTkuODM0NjUgNTMuOTYyNzUgLTkuODQyMTkgNTMuOTY2OTQgLTkuODQ0MjggNTMuOTY5MzMgLTkuODQ0NDMgNTMuOTcwOTMgLTkuODQyNTcgNTMuOTc0MDEgLTkuODQwNjcgNTMuOTc1ODkgLTkuODQwMTEgNTMuOTc3OTYgLTkuODM5NTcgNTMuOTc5OTYgLTkuODQyNjMgNTMuOTgyMTQgLTkuODQxNjYgNTMuOTg1NTEgLTkuODM5NjYgNTMuOTg4ODMgLTkuODM5NTMgNTMuOTkxOTYgLTkuODQxMSA1My45OTQwOSAtOS44NDA5IDUzLjk5NDg1IC05LjgzNzc2IDUzLjk5MzU4IC05LjgzMzYgNTMuOTkyNDUgLTkuODI5NzggNTMuOTkwODcgLTkuODI2MDQgNTMuOTg5IC05LjgyNjQ1IDUzLjk4NTE3IC05LjgyNzEgNTMuOTg1OTggLTkuODI0NzYgNTMuOTg3MDcgLTkuODIyMzEgNTMuOTg4NzQgLTkuODIwNzcgNTMuOTg4NDcgLTkuODE4MDYgNTMuOTkwOCAtOS44MTc3NCA1My45OTM0IC05LjgyMTM4IDUzLjk5NjUzIC05LjgyODA4IDU0LjAwMTE4IC05LjgzNTU3IDU0LjAwNTk4IC05LjgzOTUgNTQuMDA4ODIgLTkuODQzODEgNTQuMDExMDkgLTkuODQyODUgNTQuMDEyMTEgLTkuODQwMDcgNTQuMDEyOTcgLTkuODM2OTYgNTQuMDE1MDYgLTkuODM2MTMgNTQuMDE0NSAtOS44NDAyNCA1NC4wMTM1NCAtOS44NDM0OSA1NC4wMTIzNiAtOS44NDQ2NiA1NC4wMDk1MiAtOS44NDU2NyA1NC4wMDYzOCAtOS44NDcwOCA1NC4wMDM5MiAtOS44NDY3NCA1NC4wMDA4OSAtOS44NDUyMSA1NC4wMDMwNCAtOS44NTI2NyA1NC4wMDU5NCAtOS44NTg4OCA1NC4wMDQ2NyAtOS44NjUxOCA1NC4wMDc4MyAtOS44Njg3OCA1NC4wMDcwOCAtOS44NzE2MSA1NC4wMTI3NiAtOS44NzYwMiA1NC4wMTMyIC05Ljg3MjM2IDU0LjAxNTI2IC05Ljg3MDU3IDU0LjAxNTUzIC05Ljg2Nzk3IDU0LjAxNjk4IC05Ljg2NDM1IDU0LjAxODI0IC05Ljg1OTU5IDU0LjAyMDEyIC05Ljg2NyA1NC4wMTc5MiAtOS44NzIwNCA1NC4wMjA1NSAtOS44NzQxMiA1NC4wMjE3OCAtOS44NzY0IDU0LjAyMjM1IC05Ljg4MDExIDU0LjAyNDI3IC05Ljg4MTU4IDU0LjAyNTIzIC05Ljg4MjQxIDU0LjAyNTEzIC05Ljg4NTIgNTQuMDIzOTcgLTkuODg3MTcgNTQuMDIyNTggLTkuODg3MzYgNTQuMDIxNzMgLTkuODgzNzUgNTQuMDIwMjUgLTkuODgyNSA1NC4wMTg1MiAtOS44ODIxNyA1NC4wMTY2NCAtOS44ODM5OCA1NC4wMTQzMSAtOS44ODY5NyA1NC4wMTY5NyAtOS44ODg1OCA1NC4wMTk4NCAtOS44ODk2MiA1NC4wMjMyOCAtOS44OTA2MyA1NC4wMjY0OSAtOS44OTA4IDU0LjAyOTg5IC05Ljg5MjQgNTQuMDMyMzUgLTkuODk1NCA1NC4wMzQ2OSAtOS44OTg4MyA1NC4wMzcxMSAtOS44OTk3OSA1NC4wNDA2MSAtOS44OTk4NyA1NC4wNDQxOSAtOS45MDAxIDU0LjA0NjQxIC05LjkwMjU4IDU0LjA0ODE5IC05Ljg5OTQ5IDU0LjA0Nzc3IC05Ljg5NjI4IDU0LjA0NzQ3IC05Ljg5MjYzIDU0LjA0ODg0IC05Ljg4NzU3IDU0LjA1MTU0IC05Ljg4NDUxIDU0LjA1NDQzIC05Ljg4MTMzIDU0LjA1Nzg0IC05Ljg3OTk4IDU0LjA2MTE2IC05Ljg4MTI2IDU0LjA2MzY0IC05Ljg4MjY5IDU0LjA2NjQ4IC05Ljg3NzYxIDU0LjA2MzYxIC05Ljg3NjU4IDU0LjA2MzQ5IC05Ljg3MTU2IDU0LjA2MjUzIC05Ljg2OTQ3IDU0LjA1OTY4IC05Ljg3MjAzIDU0LjA1NzgzIC05Ljg3MDc0IDU0LjA1NjE2IC05Ljg2ODM3IDU0LjA1Njc3IC05Ljg2MzQ3IDU0LjA1NTYyIC05Ljg2MTM3IDU0LjA1MjU0IC05Ljg2MjAxIDU0LjA1MjQ1IC05Ljg1OTMzIDU0LjA1NDkxIC05Ljg1NyA1NC4wNTUyIC05Ljg1NDA5IDU0LjA1NzczIC05Ljg1NDkgNTQuMDU4OTkgLTkuODU3OTggNTQuMDYxMjQgLTkuODU4NzMgNTQuMDYyNDcgLTkuODU0MjggNTQuMDYzMzUgLTkuODUwODUgNTQuMDY0ODUgLTkuODQ5MTEgNTQuMDY2NTggLTkuODUwODcgNTQuMDY5NzQgLTkuODQ5MTQgNTQuMDY5NzQgLTkuODQ1MDggNTQuMDcwNTQgLTkuODQyNzMgNTQuMDY5ODEgLTkuODM4NjcgNTQuMDY4NjkgLTkuODM0ODUgNTQuMDY3NCAtOS44MzA4NCA1NC4wNjg2OCAtOS44Mjk2OCA1NC4wNzI4NyAtOS44Mzg0OSA1NC4wNzI0IC05Ljg0OTIgNTQuMDcwNjkgLTkuODUxMzcgNTQuMDY4NTQgLTkuODU1NzkgNTQuMDY5MzYgLTkuODU5ODggNTQuMDY4MDkgLTkuODYzNyA1NC4wNzA2MSAtOS44Njk4MiA1NC4wNzI1NSAtOS44NjgzNCA1NC4wNzM1MyAtOS44NjM1MiA1NC4wNzQ4OSAtOS44NjEyOCA1NC4wNzk1NyAtOS44NjAxOCA1NC4wODA5OCAtOS44NjUxNSA1NC4wODI4MiAtOS44NjI3MSA1NC4wODUwMyAtOS44NjEyNiA1NC4wODczOCAtOS44NTc4MSA1NC4wODY5OCAtOS44NTMwMyA1NC4wODcxOSAtOS44NDg3IDU0LjA4NTk4IC05Ljg0MzQ0IDU0LjA4NTU1IC05LjgzODk2IDU0LjA4OTY0IC05LjgzOTc4IDU0LjA5MTEyIC05LjgzNDI4IDU0LjA5MjE4IC05LjgzMTA0IDU0LjA5MzgxIC05LjgzMDExIDU0LjA5NTg5IC05Ljg0Mjc1IDU0LjA5ODMxIC05Ljg0MDg3IDU0LjEwMjUxIC05Ljg0NTYyIDU0LjEwMjI1IC05Ljg1MDc0IDU0LjEwNjE3IC05Ljg1Mjc2IDU0LjEwNjE4IC05Ljg0NTg4IDU0LjEwNzQ5IC05Ljg0MTU5IDU0LjEwNjQgLTkuODM3MTUgNTQuMTA2NzcgLTkuODMzMzEgNTQuMTA3OCAtOS44Mjg5NSA1NC4xMDk2OCAtOS44MjQzMiA1NC4xMDg4NSAtOS44MTk4NiA1NC4xMTEzOSAtOS44MjM3MiA1NC4xMTMwNyAtOS44MjUyNCA1NC4xMTMwNyAtOS44MjUyNCA1NC4xMTQ3MyAtOS44MjQ2OSA1NC4xMTc5NyAtOS44MjU4IDU0LjExOTM3IC05LjgyMjc5IDU0LjEyMjk5IC05LjgyNDIzIDU0LjExOTU0IC05LjgyNzA1IDU0LjExODg5IC05LjgzMTE2IDU0LjExNjk2IC05LjgzMjQ5IDU0LjExNDU1IC05LjgyOTk4IDU0LjExNDU1IC05LjgyOTk4IDU0LjExMzE0IC05LjgyODkzIDU0LjExMTc0IC05LjgyOTI4IDU0LjExMTc0IC05LjgyOTI4IDU0LjExMTE4IC05LjgzMzM5IDU0LjExMDMyIC05LjgzNzkyIDU0LjExMTM0IC05Ljg0MTg5IDU0LjExMjU1IC05Ljg0NDMzIDU0LjExNTEzIC05Ljg0NDM2IDU0LjExNDYxIC05Ljg0ODAyIDU0LjExMjg3IC05Ljg0OTA5IDU0LjExMjA0IC05Ljg1NzA2IDU0LjExMzc3IC05Ljg1ODY3IDU0LjExMjcgLTkuODYyMjIgNTQuMTEzNSAtOS44NjQxIDU0LjExNTM2IC05Ljg2Nzc3IDU0LjExODM4IC05Ljg2ODA1IDU0LjExNDk4IC05Ljg3MDY3IDU0LjExMjY5IC05Ljg3MDM3IDU0LjExMTI1IC05Ljg2NjAxIDU0LjExMDc0IC05Ljg2Mzg2IDU0LjExMDgxIC05Ljg2MDI3IDU0LjEwOTc5IC05Ljg1NzcyIDU0LjEwODU4IC05Ljg2NTc5IDU0LjEwNTgxIC05Ljg2NzEyIDU0LjEwNTIyIC05Ljg2NTI3IDU0LjEwMzIxIC05Ljg2NDg3IDU0LjEwMDQgLTkuODY0MTcgNTQuMDk3MyAtOS44NjUxMSA1NC4wOTgxMiAtOS44NzMyNiA1NC4wOTY0NCAtOS44NzQ4MSA1NC4wOTM4NCAtOS44NzI0MSA1NC4wOTE5NyAtOS44NzU0OCA1NC4wODk0NyAtOS44NzU3OCA1NC4wODY1MSAtOS44NzU5NyA1NC4wODg2NiAtOS44ODA3OCA1NC4wOTA1MiAtOS44ODA1MiA1NC4wOTIwNyAtOS44Nzk0MiA1NC4wOTQ0NCAtOS44Nzg0OSA1NC4wOTc0MyAtOS44ODA0OSA1NC4wOTY1MyAtOS44ODY4OSA1NC4wOTYxMiAtOS44OTI3NiA1NC4wOTM5NyAtOS44OTMyOCA1NC4wOTE3MyAtOS44OTIzNiA1NC4wOTAwNiAtOS44OTM3NiA1NC4wODkwMiAtOS44OTE1MSA1NC4wODc3MiAtOS44OTAzIDU0LjA4NjA0IC05Ljg4OTM0IDU0LjA4NDQ4IC05Ljg4NjUzIDU0LjA4NDU0IC05Ljg4Mjk0IDU0LjA4MDUxIC05Ljg4NDAxIDU0LjA3OTUzIC05Ljg4NzQyIDU0LjA4MDcyIC05Ljg5MDE3IDU0LjA3NzM1IC05Ljg5MjQ3IDU0LjA3Njk5IC05Ljg4ODE4IDU0LjA3MTUgLTkuODg5MTEgNTQuMDcwNTIgLTkuODkxMSA1NC4wNjk5OCAtOS44OTYzMiA1NC4wNjg4NyAtOS45MDAzMyA1NC4wNjc1OCAtOS45MDMwNSA1NC4wNjc5MiAtOS45MDg3NSA1NC4wNjYyNCAtOS45MTA0NSA1NC4wNjY1MiAtOS45MTU2OCA1NC4wNjUxNSAtOS45MTY4MSA1NC4wNjM1MiAtOS45MTc3NCA1NC4wNjIxOCAtOS45MTk2NiA1NC4wNjEyMyAtOS45MjQxNyA1NC4wNjI0NiAtOS45Mjg5NyA1NC4wNjQ3OSAtOS45MzI3MSA1NC4wNjY2MSAtOS45MzgyNCA1NC4wNjU5IC05Ljk0MzExIDU0LjA2NDc4IC05Ljk0NDYyIDU0LjA2MzE2IC05Ljk0NDEzIDU0LjA2Mjk3IC05Ljk0NjkxIDU0LjA2MjUyIC05Ljk1MDU5IDU0LjA2MjY3IC05Ljk1NjQgNTQuMDYxMTkgLTkuOTYzIDU0LjA2NDQ2IC05Ljk2MjQxIDU0LjA2NjYzIC05Ljk2MTczIDU0LjA2ODM4IC05Ljk1OTExIDU0LjA3MTYyIC05Ljk1NzU3IDU0LjA3NDc0IC05Ljk1NjQ3IDU0LjA3OTUyIC05Ljk1ODA2IDU0LjA4MjE5IC05Ljk2MTg5IDU0LjA4NjExIC05Ljk2MzkzIDU0LjA5MDggLTkuOTY2NzUgNTQuMDk1MTcgLTkuOTY4ODggNTQuMDk3ODUgLTkuOTcxMzIgNTQuMDk5MzQgLTkuOTc1MDUgNTQuMDk4OCAtOS45ODE1MyA1NC4xMDE2NCAtOS45ODMxOSA1NC4xMDM2MyAtOS45Nzk2OCA1NC4xMDI5IC05Ljk3ODI4IDU0LjEwMzEzIC05Ljk3NDg5IDU0LjEwNTQ3IC05Ljk3NzIzIDU0LjEwNTkzIC05Ljk3NDUxIDU0LjEwNTA2IC05Ljk3MTA0IDU0LjEwNDQxIC05Ljk2NzI5IDU0LjEwNTQ2IC05Ljk2MjY1IDU0LjEwODU4IC05Ljk1ODg5IDU0LjEwNjQ4IC05Ljk0NjcxIDU0LjEwOTI1IC05Ljk0MjczIDU0LjEwODY2IC05LjkzOTMxIDU0LjExMjE1IC05LjkzNTQ3IDU0LjExMTE0IC05LjkzMTM1IDU0LjExMyAtOS45Mjg1OSA1NC4xMTQ4NSAtOS45MjU4MiA1NC4xMTk0MyAtOS45MjM2MSA1NC4xMTc0OCAtOS45MTk3NyA1NC4xMTY1MSAtOS45MjA1MSA1NC4xMTQ5NiAtOS45MjE0NSA1NC4xMTU0MiAtOS45MTc2MiA1NC4xMTQwMyAtOS45MTM3NCA1NC4xMTU0OCAtOS45MTEzNyA1NC4xMTcxMSAtOS45MTMyNiA1NC4xMTg2MyAtOS45MTM4OCA1NC4xMTY4MyAtOS45MDc4NyA1NC4xMTU3IC05LjkwNDE5IDU0LjExNzAyIC05Ljg5OTc2IDU0LjExNjY3IC05Ljg5NTYyIDU0LjExNjAxIC05Ljg5MDMxIDU0LjExODkyIC05Ljg5MDg5IDU0LjEyMDQzIC05Ljg5NDQ4IDU0LjEyMTc0IC05Ljg5ODE5IDU0LjEyNDE2IC05LjkwMTgxIDU0LjEyNDE5IC05LjkwNTQzIDU0LjEyNjIyIC05LjkwNDExIDU0LjEyNzkzIC05LjkwMzM0IDU0LjEzMDI3IC05LjkwNTM5IDU0LjEzMTg3IC05LjkwOSA1NC4xMzMyMyAtOS45MTMyIDU0LjEzNDE3IC05LjkxNjk5IDU0LjEzNDU0IC05LjkyMDk4IDU0LjEzMDI0IC05LjkyMTg0IDU0LjEyNzk1IC05LjkyNDIxIDU0LjEyNTI0IC05LjkyNDc2IDU0LjEyNjk3IC05LjkyOTA0IDU0LjEyOTI2IC05LjkzMDYgNTQuMTMxNjkgLTkuOTMyOCA1NC4xMzYwNSAtOS45MzUwOSA1NC4xMzg4NSAtOS45Mzk4OSA1NC4xNDA4NSAtOS45NDU2MiA1NC4xNDA4IC05Ljk1MDMyIDU0LjE0MiAtOS45NTE1IDU0LjE0NDQxIC05Ljk1MDA5IDU0LjE0NjU5IC05Ljk0Nzg2IDU0LjE0ODM2IC05Ljk0OTAxIDU0LjE1MDg3IC05Ljk1MTI0IDU0LjE1MzE4IC05Ljk0OTk4IDU0LjE1MTUyIC05Ljk0NzI5IDU0LjE0OTgyIC05Ljk0NTIzIDU0LjE0OTg5IC05Ljk0MDIyIDU0LjE1MDMyIC05LjkzNTI5IDU0LjE0ODIzIC05LjkzMzYgNTQuMTQ3OTYgLTkuOTI4MDcgNTQuMTQ2MzQgLTkuOTI2MTggNTQuMTQ0MDUgLTkuOTI0NjIgNTQuMTQ0OSAtOS45MjE4MSA1NC4xNDY1MiAtOS45MTk3NyA1NC4xNDcwNyAtOS45MTcwNiA1NC4xNDk2NyAtOS45MTY2NCA1NC4xNTIwMyAtOS45MTYwMiA1NC4xNTM1MSAtOS45MTcxIDU0LjE1Mzg3IC05LjkyMjY2IDU0LjE1NDYyIC05LjkyNzgyIDU0LjE1NjU3IC05LjkyNzYgNTQuMTU4MDggLTkuOTI4MzcgNTQuMTUyNzggLTkuOTM1NzcgNTQuMTU3NDIgLTkuOTM2NzEgNTQuMTYwMjEgLTkuOTM3NTggNTQuMTYzMzggLTkuOTM5NjQgNTQuMTY2MDUgLTkuOTQyMzYgNTQuMTY4NzYgLTkuOTQ3MTUgNTQuMTcxNDMgLTkuOTUyNTUgNTQuMTczNjUgLTkuOTU3NzEgNTQuMTc1MDYgLTkuOTU5NiA1NC4xNzUwNiAtOS45NTk2IDU0LjE3NTAxIC05Ljk1NTQ3IDU0LjE3MzcyIC05Ljk1MDE4IDU0LjE3MTY2IC05Ljk0NjQ4IDU0LjE3MjI3IC05Ljk0Mjk4IDU0LjE3MzA1IC05Ljk0MTExIDU0LjE3NjM5IC05LjkzOTQyIDU0LjE3MzczIC05LjkzNTI4IDU0LjE3NjE3IC05LjkzMzI1IDU0LjE3NzggLTkuOTMxMDcgNTQuMTc5NDQgLTkuOTI3NDggNTQuMTgyMTUgLTkuOTI4MTggNTQuMTg0NjcgLTkuOTMwMjUgNTQuMTg3NzYgLTkuOTMxMDMgNTQuMTg5NDQgLTkuOTI1MzkgNTQuMTg5NTggLTkuOTIwNzIgNTQuMTg2OTUgLTkuOTE4NzggNTQuMTg1MTYgLTkuOTE3OTQgNTQuMTgzMzIgLTkuOTE1MjIgNTQuMTg0NDUgLTkuOTEzNTUgNTQuMTg2MjkgLTkuOTEzNzcgNTQuMTg4NiAtOS45MTYyOCA1NC4xODk5IC05LjkxNjA4IDU0LjE5MTg1IC05LjkxNDU3IDU0LjE5MTI4IC05LjkxMjEgNTQuMTkxNDEgLTkuOTA4ODQgNTQuMTkzMDkgLTkuOTA4NTUgNTQuMTk1MDEgLTkuOTA4NzcgNTQuMTk1OTggLTkuOTEwODUgNTQuMTk1MDggLTkuOTE0NTkgNTQuMTk0MDEgLTkuOTE5MjQgNTQuMTkyOTkgLTkuOTIzMjkgNTQuMTkzNjggLTkuOTI5MzggNTQuMTk1MTQgLTkuOTMzNiA1NC4xOTcxMyAtOS45MzkzNiA1NC4xOTY2IC05Ljk0MzAyIDU0LjE5Mzg5IC05Ljk0NDk4IDU0LjE5Mzk1IC05Ljk0ODEzIDU0LjE5NTI3IC05Ljk1MDI4IDU0LjE5ODAyIC05Ljk1MDUzIDU0LjIwMTQzIC05Ljk1ODQzIDU0LjIwMjM0IC05Ljk2MjU1IDU0LjIwNTkxIC05Ljk2NTYyIDU0LjIwNzUzIC05Ljk2NzUyIDU0LjIwOTQzIC05Ljk3MDU4IDU0LjIxMDMxIC05Ljk3NjU3IDU0LjIxMTA4IC05Ljk4MDAzIDU0LjIxNDI1IC05Ljk4MjA4IDU0LjIxNjc5IC05Ljk4Mjc0IDU0LjIxOTE0IC05Ljk4MzM5IDU0LjIyMTYxIC05Ljk4NjM5IDU0LjIyNTczIC05Ljk4OTQzIDU0LjIyNDIyIC05Ljk5MTE3IDU0LjIyMjY2IC05Ljk5MzY5IDU0LjIyMzQ4IC05Ljk5NjUyIDU0LjIyMzg4IC0xMC4wMDAwNiA1NC4yMjQ1MSAtMTAuMDA1NTMgNTQuMjIzMjkgLTEwLjAwNzE3IDU0LjIyMTQ3IC0xMC4wMDgwNyA1NC4yMjE0NCAtMTAuMDA0NTkgNTQuMjE5NjkgLTEwLjAwMzE0IDU0LjIxNjk3IC05Ljk5ODY2IDU0LjIxMzI2IC05Ljk5NTA4IDU0LjIxMTExIC05Ljk5OTM1IDU0LjIxMjU2IC0xMC4wMDIzMiA1NC4yMTE2NCAtMTAuMDA3NjQgNTQuMjEyNjUgLTEwLjAxMDM2IDU0LjIxMzgyIC0xMC4wMTQ2OCA1NC4yMTM3NiAtMTAuMDE4MjkgNTQuMjExNjQgLTEwLjAxOTQyIDU0LjIwOTg3IC0xMC4wMTcxNyA1NC4yMDc4NCAtMTAuMDE3MjMgNTQuMjA2OTkgLTEwLjAxMDc5IDU0LjIwNTM3IC0xMC4wMDYzNyA1NC4yMDI5OSAtMTAuMDA0NzkgNTQuMTk5MTUgLTEwLjAwMDM5IDU0LjE5NzM0IC05Ljk5NTkzIDU0LjE5NTA2IC05Ljk5ODMxIDU0LjE5MTg4IC05Ljk5NjQxIDU0LjE5MTkgLTEwLjAwMjU0IDU0LjE4OTM2IC0xMC4wMDQ2OSA1NC4xODY5MSAtMTAuMDAyNzkgNTQuMTg0NTYgLTkuOTk5NDcgNTQuMTgwMyAtMTAuMDAyNTQgNTQuMTgwNTUgLTEwLjAwODEgNTQuMTgzNDEgLTEwLjAwOTMgNTQuMTg1MyAtMTAuMDA5OTkgNTQuMTg1MjMgLTEwLjAxMzU5IDU0LjE4ODQzIC0xMC4wMTUzNCA1NC4xODk0NiAtMTAuMDE5IDU0LjE5MDI5IC0xMC4wMjI5NCA1NC4xOTA3MiAtMTAuMDI3MjggNTQuMTkxMDIgLTEwLjAzNDg3IDU0LjE4OTczIC0xMC4wMzc2IDU0LjE5MDUxIC0xMC4wMzk0OSA1NC4xODkzNiAtMTAuMDQxNiA1NC4xODcyMiAtMTAuMDQzMDYgNTQuMTg1OTUgLTEwLjA0NTMxIDU0LjE4NDczIC0xMC4wNDQ0MyA1NC4xODUxMiAtMTAuMDQwMTIgNTQuMTgzMjUgLTEwLjAzOTI2IDU0LjE4MzM0IC0xMC4wMzY2MiA1NC4xODcwNiAtMTAuMDMzNiA1NC4xODU0OCAtMTAuMDMxMDggNTQuMTg0MTMgLTEwLjAzMDY0IDU0LjE4MTUgLTEwLjAzMTIgNTQuMTc5MDkgLTEwLjAzMTY2IDU0LjE3NjUxIC0xMC4wMzE2MSA1NC4xNzQwMSAtMTAuMDMwMzEgNTQuMTcyNzMgLTEwLjAzMDIyIDU0LjE3MDQ3IC0xMC4wMzIxMSA1NC4xNjgzOCAtMTAuMDM0MzYgNTQuMTY3MjcgLTEwLjAzNzEyIDU0LjE2ODE1IC0xMC4wNDAyNyA1NC4xNjkwMyAtMTAuMDQ0ODQgNTQuMTY4OTUgLTEwLjA1Mzk0IDU0LjE2NzU5IC0xMC4wNjEzNiA1NC4xNjUwNSAtMTAuMDU5NDIgNTQuMTY0MzkgLTEwLjA2NDk0IDU0LjE2MTc3IC0xMC4wNjQwOSA1NC4xNjEyNyAtMTAuMDY5OTYgNTQuMTYwODEgLTEwLjA3NzcyIDU0LjE1ODY1IC0xMC4wODIyOSA1NC4xNTU5NiAtMTAuMDgzNzkgNTQuMTUzNzggLTEwLjA4MzM0IDU0LjE1MjExIC0xMC4wODA4IDU0LjE1MTY4IC0xMC4wNzUyMyA1NC4xNDk1MSAtMTAuMDY4MDMgNTQuMTQ3MzggLTEwLjA1MTI4IDU0LjE0MzE0IC0xMC4wNDk5MyA1NC4xNDM0IC0xMC4wNTQwNyA1NC4xNDMzNSAtMTAuMDU4NjEgNTQuMTQxODQgLTEwLjA2MzE3IDU0LjEzOTgxIC0xMC4wNjY5OSA1NC4xMzYxNSAtMTAuMDY3OTggNTQuMTMzNDggLTEwLjA2Mzk4IDU0LjEzMTM1IC0xMC4wNjE1MSA1NC4xMjg1NyAtMTAuMDYyOTggNTQuMTI1ODIgLTEwLjA2MTQ3IDU0LjEyMjc3IC0xMC4wNTg5NyA1NC4xMTk4NSAtMTAuMDY1MTMgNTQuMTIyNDkgLTEwLjA2NjkyIDU0LjEyNDgyIC0xMC4wNjM5NCA1NC4xMjcwOSAtMTAuMDY1NjUgNTQuMTI1NDIgLTEwLjA2OTcyIDU0LjEyNjU4IC0xMC4wNzQxNyA1NC4xMjU3MyAtMTAuMDc3MTUgNTQuMTI0MDkgLTEwLjA4MDczIDU0LjEyMTQ0IC0xMC4wNzY1OSA1NC4xMjA0IC0xMC4wNzgwOSA1NC4xMjE5NCAtMTAuMDgyNDkgNTQuMTE5NzUgLTEwLjA4MzQ1IDU0LjExNzk0IC0xMC4wODE2NyA1NC4xMTU3MSAtMTAuMDgxOTkgNTQuMTEyOTcgLTEwLjA4NTUyIDU0LjExMSAtMTAuMDgwNzIgNTQuMTA4OTkgLTEwLjA3NTMgNTQuMTA5MyAtMTAuMDY5NTYgNTQuMTA4NzcgLTEwLjA2NDEyIDU0LjExMDA1IC0xMC4wNjAzIDU0LjEwNzYyIC0xMC4wNTk1IDU0LjEwNDc0IC0xMC4wNjA5NSA1NC4xMDExOCAtMTAuMDYwNTQgNTQuMDk4MTIgLTEwLjA1ODE5IDU0LjA5NjY4IC0xMC4wNTM4MiA1NC4wOTM5MiAtMTAuMDYwMzEgNTQuMDkwMDkgLTEwLjA2NDg3IDU0LjA4Nzc1IC0xMC4wNzQ1NyA1NC4wODc2OCAtMTAuMDgzMzMgNTQuMDg4NDEgLTEwLjA5MTMxIDU0LjA5MTc5IC0xMC4wOTY4NyA1NC4wOTQyNCAtMTAuMTAyNyA1NC4wOTU2NiAtMTAuMTA4NjMgNTQuMDk0ODEgLTEwLjExNTUyIDU0LjA5NzIzIC0xMC4xMTg5OCA1NC4wOTcyMyAtMTAuMTE4OTggNTQuMTAyNzMgLTEwLjEyMTk5IDU0LjEwODI5IC0xMC4xMjQyMiA1NC4xMTA1IC0xMC4xMjE3IDU0LjEwOTI2IC0xMC4xMTU2NSA1NC4xMTI5NiAtMTAuMTEyOTUgNTQuMTE1NTIgLTEwLjExNDU3IDU0LjExODgxIC0xMC4xMTYyIDU0LjEyMjg2IC0xMC4xMTYzOSA1NC4xMjY2NSAtMTAuMTE2MjQgNTQuMTMxMzcgLTEwLjExNTk1IDU0LjEzNDcgLTEwLjExMTc3IDU0LjEzOTAzIC0xMC4xMDgxIDU0LjE0MDUgLTEwLjEwOTQ5IDU0LjE0MjI1IC0xMC4xMTA4IDU0LjE0NDY3IC0xMC4xMDc4NCA1NC4xNDYzMSAtMTAuMTAwMzIgNTQuMTQ4NTcgLTEwLjA5ODI4IDU0LjE1MTg5IC0xMC4wOTQ0MSA1NC4xNTYyMyAtMTAuMDkxODUgNTQuMTYxMjQgLTEwLjA4OTg4IDU0LjE2NDg3IC0xMC4wODY4NiA1NC4xNjgwNyAtMTAuMDg3MzUgNTQuMTcwOTEgLTEwLjA4MjEzIDU0LjE3MzY5IC0xMC4wODA2NSA1NC4xNzgyMSAtMTAuMDc5MzggNTQuMTg0MDYgLTEwLjA3ODg1IDU0LjE4OTEzIC0xMC4wODAwNSA1NC4xOTIzMSAtMTAuMDg2MDMgNTQuMTk1ODYgLTEwLjA4OTI4IDU0LjE5OTEyIC0xMC4wODQ3NiA1NC4yMDIxNCAtMTAuMDc5ODggNTQuMjA1MDUgLTEwLjA3NjUzIDU0LjIwNzM3IC0xMC4wNzM3MSA1NC4yMDc2NCAtMTAuMDY3MzIgNTQuMjA4NTYgLTEwLjA2MjE3IDU0LjIwNzg0IC0xMC4wNTkxOSA1NC4yMDkwNiAtMTAuMDU0ODkgNTQuMjExOTYgLTEwLjA1NDM4IDU0LjIxNDY0IC0xMC4wNTE2MyA1NC4yMTc1NiAtMTAuMDQ4MTMgNTQuMjIwOTYgLTEwLjA0ODM1IDU0LjIyNDM4IC0xMC4wNDk1MSA1NC4yMjgwNiAtMTAuMDUyMTUgNTQuMjMwMTkgLTEwLjA1NTkgNTQuMjMxNDEgLTEwLjA2MjI3IDU0LjIzMjEyIC0xMC4wNzE4NSA1NC4yMzM1NiAtMTAuMDgwMTcgNTQuMjM1OTcgLTEwLjA4MzggNTQuMjM3NTcgLTEwLjA5MTIxIDU0LjIzODk5IC0xMC4wOTg1OCA1NC4yNDMwNiAtMTAuMTAwOTkgNTQuMjQyMTkgLTEwLjA5MzczIDU0LjI0MTA3IC0xMC4wOTAwMyA1NC4yNDEyOCAtMTAuMDg0NDIgNTQuMjM5NTYgLTEwLjA3NzQ2IDU0LjIzNTkzIC0xMC4wNzI3OSA1NC4yMzM5NiAtMTAuMDY3OTkgNTQuMjMzNzIgLTEwLjA2MjEyIDU0LjIzODMyIC0xMC4wNjIyNyA1NC4yNDA4MyAtMTAuMDY0NjYgNTQuMjQzMzggLTEwLjA2OTEyIDU0LjI0NTYxIC0xMC4wNzM5OCA1NC4yNDUyMiAtMTAuMDgwODMgNTQuMjQzNzEgLTEwLjA4OTE2IDU0LjI0NTU2IC0xMC4wODkwNyA1NC4yNDc5MSAtMTAuMDkzNjQgNTQuMjUwMDMgLTEwLjA5MDkzIDU0LjI0ODczIC0xMC4wODcyMSA1NC4yNTA3NyAtMTAuMDg0NDggNTQuMjQ5OTEgLTEwLjA4MjI2IDU0LjI0NzQ4IC0xMC4wODAwMyA1NC4yNDc0IC0xMC4wNzczNCA1NC4yNDkyIC0xMC4wNzY2IDU0LjI1MjY0IC0xMC4wNzYyMSA1NC4yNTU4NiAtMTAuMDczNzIgNTQuMjU5NjYgLTEwLjA3MDczIDU0LjI2MzExIC0xMC4wNzE0MyA1NC4yNjY1NSAtMTAuMDcxMDMgNTQuMjcwMDMgLTEwLjA2NjIyIDU0LjI3Mzg0IC0xMC4wNjMwNyA1NC4yNzU1NCAtMTAuMDU2MDMgNTQuMjc2NzUgLTEwLjA0OTM1IDU0LjI3ODUxIC0xMC4wNDM4OCA1NC4yODAwOSAtMTAuMDQxMDYgNTQuMjgyODEgLTEwLjA0MzAzIDU0LjI4NDE2IC0xMC4wNDA5MyA1NC4yODI0OSAtMTAuMDM1NzIgNTQuMjgwNDEgLTEwLjAzMjYyIDU0LjI4MTQ3IC0xMC4wMjM4NyA1NC4yODQxIC0xMC4wMTkzNSA1NC4yODY3NyAtMTAuMDE5MjggNTQuMjg5MjYgLTEwLjAxNjc5IDU0LjI5MTIzIC0xMC4wMDk2MyA1NC4yOTAxNyAtMTAuMDAzNzUgNTQuMjkxNzYgLTEwLjAwMDc3IDU0LjI5MzgxIC0xMC4wMDAzOSA1NC4yOTYyOSAtOS45OTkxNiA1NC4yOTg2MSAtMTAuMDAxNTMgNTQuMzAxNTIgLTkuOTk5NiA1NC4zMDM4IC05Ljk5NTgxIDU0LjMwMjk1IC05Ljk4OTY1IDU0LjMwMDgyIC05Ljk4NTc1IDU0LjI5OTI0IC05Ljk4MzM5IDU0LjMwMTA3IC05Ljk3OTUyIDU0LjI5OTY5IC05Ljk3NjcxIDU0LjI5Njk0IC05Ljk3Nzg5IDU0LjI5Mjg3IC05Ljk4MDg0IDU0LjI4ODQ3IC05Ljk3OTE2IDU0LjI5MDIyIC05Ljk3Mzg1IDU0LjI4Nzc1IC05Ljk3MjI0IDU0LjI4NjggLTkuOTY2MDcgNTQuMjg0MzkgLTkuOTYzNTMgNTQuMjgxNzEgLTkuOTYzNjMgNTQuMjc5MDQgLTkuOTY0OTggNTQuMjc4ODggLTkuOTU4MDIgNTQuMjc5NyAtOS45NTQyNSA1NC4yNzc3IC05Ljk1MzY5IDU0LjI3NTU1IC05Ljk1NTQ2IDU0LjI3MzUzIC05Ljk1NDEgNTQuMjcxNDMgLTkuOTUyNDIgNTQuMjcwOTQgLTkuOTQ4ODcgNTQuMjcxMTkgLTkuOTQyNjIgNTQuMjY5MTUgLTkuOTQwMTcgNTQuMjY3MDYgLTkuOTM4NDggNTQuMjY3OTIgLTkuOTM1MzUgNTQuMjY4MiAtOS45MzExNyA1NC4yNjgzNSAtOS45Mjc3MyA1NC4yNzAzNSAtOS45MjQyMSA1NC4yNjcgLTkuOTIxOCA1NC4yNjUxOSAtOS45MjE0NCA1NC4yNjM1NyAtOS45MjM0NyA1NC4yNjI5NCAtOS45MjYwMiA1NC4yNjE1IC05LjkyODA5IDU0LjI1OTQ5IC05LjkyNzg0IDU0LjI1NzYgLTkuOTI2MDUgNTQuMjU0NDYgLTkuOTI3MyA1NC4yNTE2NCAtOS45MjgxNSA1NC4yNDkyOCAtOS45Mjg5NCA1NC4yNDg2IC05LjkzMjI2IDU0LjI0NzUgLTkuOTMzNDUgNTQuMjQ2NDQgLTkuOTMyNzcgNTQuMjQ2NTcgLTkuOTI5NjQgNTQuMjQ3NzYgLTkuOTI2OSA1NC4yNDkzNiAtOS45MjUxOCA1NC4yNTAxMSAtOS45MjM2IDU0LjI1MTA0IC05LjkyMjIxIDU0LjI1Mjk5IC05LjkyMTk3IDU0LjI1NDg1IC05LjkyMDQ1IDU0LjI1NjQxIC05LjkxOTA0IDU0LjI1ODk5IC05LjkyMTc2IDU0LjI2IC05LjkyMDU1IDU0LjI2MjA2IC05LjkxODc2IDU0LjI2NDUgLTkuOTE2NzQgNTQuMjY2NDQgLTkuOTE2NjUgNTQuMjY4MTkgLTkuOTE4MDkgNTQuMjcwNDMgLTkuOTE3NjEgNTQuMjcyNTQgLTkuOTE3NzIgNTQuMjcxOTggLTkuOTE1MDkgNTQuMjcwMTggLTkuOTE0NTcgNTQuMjY4IC05LjkxNDEzIDU0LjI2NjQ0IC05LjkxMTMxIDU0LjI2NDI0IC05LjkxMjQ0IDU0LjI2MzE1IC05LjkwODI3IDU0LjI2MTExIC05LjkwNTgzIDU0LjI2MTM5IC05LjkwMDM4IDU0LjI2MzEgLTkuODk1NjggNTQuMjY0NjkgLTkuODkxMjggNTQuMjY1OTQgLTkuODg2NTEgNTQuMjY3NTggLTkuODgyNzUgNTQuMjYzNTIgLTkuODgyODcgNTQuMjYwNjMgLTkuODgzMjQgNTQuMjU4OTEgLTkuODg1NTcgNTQuMjU2NzggLTkuODg3MDMgNTQuMjU0NCAtOS44ODU0NSA1NC4yNTE2IC05Ljg4NzI1IDU0LjI0ODA3IC05Ljg4OTA2IDU0LjI0NDQ0IC05Ljg4OTU5IDU0LjI0MjYxIC05Ljg5MjA1IDU0LjI0MDQ1IC05Ljg5Mzk4IDU0LjIzNzgyIC05Ljg5NDcxIDU0LjIzNzI1IC05Ljg5NzU5IDU0LjIzODI3IC05LjkwMTU3IDU0LjIzNjI3IC05LjkwMzk4IDU0LjIzNzYzIC05LjkwNTUyIDU0LjIzNzE5IC05LjkwNzk1IDU0LjIzNTA0IC05LjkwOTU3IDU0LjIzNDMyIC05LjkxMjA5IDU0LjIzMjc2IC05LjkxNDYxIDU0LjIzMDkzIC05LjkxOTczIDU0LjIyOTgzIC05LjkxNDMzIDU0LjIyODc1IC05LjkxMTMgNTQuMjI2ODIgLTkuOTA5OTUgNTQuMjI0OTUgLTkuOTExNjIgNTQuMjI1NDMgLTkuOTE0MDggNTQuMjI1MzYgLTkuOTIxNzcgNTQuMjI0MzQgLTkuOTI3MDcgNTQuMjIzNjEgLTkuOTI4NDggNTQuMjIzMDUgLTkuOTMxMDQgNTQuMjI0MDggLTkuOTMzNDUgNTQuMjI1MzUgLTkuOTM2NTQgNTQuMjI2MTMgLTkuOTM5ODMgNTQuMjI1MDQgLTkuOTQyMjkgNTQuMjIzMjcgLTkuOTQyNzIgNTQuMjIxNiAtOS45NDAwMyA1NC4yMTg4NiAtOS45MzU3IDU0LjIxOTI4IC05Ljk0MDM1IDU0LjIyMDQ1IC05Ljk0NDY3IDU0LjIxODI3IC05Ljk0NjkgNTQuMjIwNDcgLTkuOTUwOTYgNTQuMjIzNyAtOS45NTM2NiA1NC4yMjY0NSAtOS45NTUxNCA1NC4yMjk1MiAtOS45NTc1IDU0LjIzMzQ3IC05Ljk2MTYgNTQuMjM5MTUgLTkuOTY2MDQgNTQuMjQ4NTkgLTkuOTcyMDQgNTQuMjQ4MDQgLTkuOTc4NyA1NC4yNDYxNyAtOS45ODAzNiA1NC4yNDU0NCAtOS45NzYyOCA1NC4yNDQ0IC05Ljk3NDAzIDU0LjIzOTYxIC05Ljk3MTMzIDU0LjIzNDc3IC05Ljk2ODE1IDU0LjIzMDUyIC05Ljk2NDMxIDU0LjIyNzcgLTkuOTYyMzEgNTQuMjI1IC05Ljk2MDIgNTQuMjIyMjYgLTkuOTU4MzkgNTQuMjIwNTUgLTkuOTYwNTYgNTQuMjIwMjIgLTkuOTYzOTYgNTQuMjIyMzMgLTkuOTY2NTggNTQuMjIyMDQgLTkuOTY5NSA1NC4yMjQxMiAtOS45NzI3NyA1NC4yMjMzOSAtOS45ODA2MiA1NC4yMjA5IC05Ljk4MDYgNTQuMjE5MjcgLTkuOTc2MTggNTQuMjE3MzQgLTkuOTY5NSA1NC4yMTUxMyAtOS45NTg4NSA1NC4yMTM3MSAtOS45NTI5IDU0LjIxMzc1IC05Ljk0NjkzIDU0LjIxMDggLTkuOTQxNjIgNTQuMjEwNDggLTkuOTM4MjcgNTQuMjExMjYgLTkuOTMzNyA1NC4yMTE3MyAtOS45Mjk1NiA1NC4yMTA4IC05LjkyMzA4IDU0LjIxMDQzIC05LjkxNzY2IDU0LjIxMTk5IC05LjkxMzkgNTQuMjExNzYgLTkuOTA3NzMgNTQuMjExODUgLTkuOTAxMTQgNTQuMjEzMTQgLTkuODk0NDggNTQuMjEyOTcgLTkuODg3NTQgNTQuMjE0NjEgLTkuODgyNTIgNTQuMjE2NTYgLTkuODc5NjIgNTQuMjE2MjUgLTkuODczNDMgNTQuMjE3MjIgLTkuODY4NzUgNTQuMjE5NTUgLTkuODY4MjcgNTQuMjIzNTYgLTkuODY5MDYgNTQuMjI0ODUgLTkuODcxNjkgNTQuMjI2MzggLTkuODc2MjMgNTQuMjI2OCAtOS44ODIxNCA1NC4yMjc0NiAtOS44ODczIDU0LjIyOTUyIC05Ljg4NjkxIDU0LjIyOTQ0IC05Ljg4MjY1IDU0LjIyOTk2IC05Ljg3NzU5IDU0LjIzMjMzIC05Ljg3NDEzIDU0LjIzMTE3IC05Ljg3MDkxIDU0LjIyOTE1IC05Ljg2NjczIDU0LjIyNzU4IC05Ljg2MjggNTQuMjI0NjIgLTkuODYxNTcgNTQuMjIzNTEgLTkuODU2MzMgNTQuMjIyMjUgLTkuODUzMjUgNTQuMjIxNzYgLTkuODQ5NjkgNTQuMjIyMDYgLTkuODQzOTQgNTQuMjI1NTUgLTkuODQ1NDIgNTQuMjI1NjQgLTkuODUzNDYgNTQuMjI3MSAtOS44NTUgNTQuMjM0MTYgLTkuODU5NTUgNTQuMjM1OTIgLTkuODY0NzcgNTQuMjM5NDcgLTkuODY4MDEgNTQuMjQyMjEgLTkuODczNzMgNTQuMjQ0MTYgLTkuODcyNCA1NC4yNDU2OSAtOS44Njg5MyA1NC4yNDY2NiAtOS44NjUzNSA1NC4yNTAzOSAtOS44NjYxIDU0LjI1MTE3IC05Ljg3MDk2IDU0LjI1Mzg4IC05Ljg3MjkyIDU0LjI1NjA0IC05Ljg3MzY3IDU0LjI1NjQ4IC05Ljg3MTM5IDU0LjI1NjI5IC05Ljg2NjAxIDU0LjI1ODU0IC05Ljg2NTUyIDU0LjI2MTc1IC05Ljg2NTY5IDU0LjI2NTA5IC05Ljg2Mzk5IDU0LjI2NTM1IC05Ljg2MTU0IDU0LjI2NjkxIC05Ljg2MDQzIDU0LjI2OTU0IC05Ljg2MDk0IDU0LjI3MjIgLTkuODYxMTcgNTQuMjcyOCAtOS44NTc2NiA1NC4yNzM4NyAtOS44NTAzMiA1NC4yNzQ1NCAtOS44NDU3NCA1NC4yNzYzIC05Ljg0MTY4IDU0LjI3ODY1IC05LjgzODM3IDU0LjI3NzYzIC05LjgzMTcyIDU0LjI3ODQ5IC05LjgyODQ0IDU0LjI3OTc3IC05LjgyNDYgNTQuMjgwNzUgLTkuODE5NiA1NC4yODE4MiAtOS44MTMzNSA1NC4yODE5NSAtOS44MDc1NiA1NC4yOCAtOS44MDYzOCA1NC4yNzk2NSAtOS44MDIwNyA1NC4yNzc3MiAtOS44MDE4NSA1NC4yNzQ2OSAtOS44MDA0NSA1NC4yNzA3MyAtOS43OTc3OSA1NC4yNjYzNyAtOS43OTQwOSA1NC4yNjQ0OCAtOS43ODkzMSA1NC4yNjI5IC05Ljc4Mjg2IDU0LjI2MTk2IC05Ljc3NjM5IDU0LjI2MDM2IC05Ljc3MTM2IDU0LjI1Nzg5IC05Ljc2Njk0IDU0LjI1NTMzIC05Ljc2MTQgNTQuMjUzMjMgLTkuNzU1NjMgNTQuMjUyMjMgLTkuNzQ4NjkgNTQuMjQ5OCAtOS43NDY0OCA1NC4yNTI3NyAtOS43Mzc5NCA1NC4yNTUzMSAtOS43Mzg0NCA1NC4yNTUwNiAtOS43MzI1NyA1NC4yNTY0MSAtOS43MzAzMiA1NC4yNTUwOCAtOS43MjgzMiA1NC4yNTMxNSAtOS43MjY4NSA1NC4yNTE3NCAtOS43MjQzOCA1NC4yNTE0MyAtOS43MjA4NiA1NC4yNTA3NCAtOS43MTcyMSA1NC4yNTMwNiAtOS43MTcyNSA1NC4yNTQ2OSAtOS43MjE4MSA1NC4yNTc4OSAtOS43MjQ3OSA1NC4yNTk3NSAtOS43MjczNiA1NC4yNTkwNyAtOS43MzA2OCA1NC4yNTc3NiAtOS43MzIzMSA1NC4yNTY3NCAtOS43MzM2OSA1NC4yNTc5MiAtOS43MzgwMSA1NC4yNTYxNyAtOS43NDIwNyA1NC4yNTM1OCAtOS43NDA5MyA1NC4yNTM5NCAtOS43NDM4MyA1NC4yNTU0NiAtOS43NDcxMiA1NC4yNTk1OSAtOS43NDMzNyA1NC4yNTkzOCAtOS43NDc3MyA1NC4yNjA2NyAtOS43NTA1IDU0LjI2MzEzIC05Ljc1NjMzIDU0LjI2NjIxIC05Ljc2MjYgNTQuMjY1OSAtOS43Njk5MyA1NC4yNjkxMSAtOS43NzgyNyA1NC4yNzA5NSAtOS43ODc3NiA1NC4yNzM1OCAtOS43OTM3OCA1NC4yNzYyOCAtOS43OTc0NiA1NC4yNzgwOSAtOS43OTc4NCA1NC4yODA1MiAtOS43OTYxIDU0LjI4NTM5IC05LjgwMDIyIDU0LjI4NzUgLTkuNzk3NjUgNTQuMjkxNjYgLTkuNzk2MTEgNTQuMjkyNTUgLTkuNzg5OTkgNTQuMjg5MTggLTkuNzg2NjQgNTQuMjg5MiAtOS43ODM1MSA1NC4yODc4MyAtOS43ODMyNCA1NC4yODQ4NiAtOS43ODEwNyA1NC4yODI5MiAtOS43NzgzMyA1NC4yODE4NSAtOS43NzUxMyA1NC4yODAyMiAtOS43NjkzIDU0LjI3OTQ1IC05Ljc2MzAyIDU0LjI3OTA5IC05Ljc1ODY4IDU0LjI3NzMzIC05Ljc1NjE0IDU0LjI4MDAxIC05Ljc1NjA0IDU0LjI4MjU5IC05Ljc1NzM1IDU0LjI4NTU3IC05Ljc1ODM5IDU0LjI4Mzg4IC05Ljc2MDExIDU0LjI4MjI4IC05Ljc2MDczIDU0LjI4MjkzIC05Ljc2NjA2IDU0LjI4MzQxIC05Ljc2OTc3IDU0LjI4NzY1IC05Ljc3MjUgNTQuMjg2ODkgLTkuNzc2OSA1NC4yODg2NiAtOS43NzUzNyA1NC4yOTAyIC05Ljc3Njk0IDU0LjI5MjU3IC05Ljc4MDA4IDU0LjI5NDg0IC05Ljc4NDYyIDU0LjI5NjYzIC05Ljc4Nzk3IDU0LjI5NTggLTkuNzkyMjEgNTQuMjkzNTcgLTkuNzk2NDkgNTQuMjkzNTYgLTkuODAzNDEgNTQuMjkyNDggLTkuODA1NzIgNTQuMjkwMTMgLTkuODA1MDkgNTQuMjkwMzIgLTkuODExNzQgNTQuMjkxNzMgLTkuODEyNjUgNTQuMjkxMDQgLTkuODE0NzEgNTQuMjkzNDUgLTkuODE4NSA1NC4yOTYyIC05LjgyMTQxIDU0LjI5OTA0IC05LjgyOTY4IDU0LjI5OTQyIC05LjgzNDk1IDU0LjI5ODExIC05LjgzNjU5IDU0LjI5NTM0IC05LjgzODA3IDU0LjI5NzA5IC05LjgzOTUzIDU0LjI5ODUyIC05LjgzODcyIDU0LjI5OTYgLTkuODM3NjcgNTQuMzAxNjggLTkuODM2OTggNTQuMzAzMTkgLTkuODM3OSA1NC4zMDE3NyAtOS44NDUxOSA1NC4zMDAwMiAtOS44NDc2NyA1NC4yOTk2MiAtOS44NTIzMiA1NC4zMDExMSAtOS44NTQ4MSA1NC4zMDM4MSAtOS44NTQ0IDU0LjMwNDkgLTkuODUwNTQgNTQuMzA2OCAtOS44NDgyMyA1NC4zMDk4IC05Ljg0NzU4IDU0LjMxMzkxIC05Ljg0OTQ5IDU0LjMxODk0IC05Ljg1MDAzIDU0LjMyMTk4IC05Ljg1IDU0LjMyMzQgLTkuODQ0MTUgNTQuMzIzNTggLTkuODM3NCA1NC4zMjM0NSAtOS44MzE0IDU0LjMyNTUxIC05LjgyOTQ1IDU0LjMyNjgxIC05LjgzMTkxIDU0LjMyODg5IC05LjgzMjQ3IDU0LjMyOTY1IC05LjgyODA2IDU0LjMyOTk4IC05LjgyMzI0IDU0LjMzMTgyIC05LjgxOTM2IDU0LjMzMzg0IC05LjgxNDA4IDU0LjMzNjQxIC05LjgxMDAzIDU0LjMzOTIyIC05LjgwNjgxIDU0LjMzOTUxIC05LjgwMjQ0IDU0LjM0MTE2IC05Ljc5ODM3IDU0LjMzODkyIC05Ljc5MjI0IDU0LjMzNzcgLTkuNzg4MzkgNTQuMzM1MjggLTkuNzg0NzUgNTQuMzM2MDMgLTkuNzgxNzUgNTQuMzM3MjggLTkuNzgxMDUgNTQuMzM5NTggLTkuNzgyNDUgNTQuMzQyMjYgLTkuNzgzNjEgNTQuMzQ0MjcgLTkuNzgxMTggNTQuMzQwODIgLTkuNzc5MDcgNTQuMzM4MTIgLTkuNzc5NDggNTQuMzM5NzYgLTkuNzc1NzIgNTQuMzQwNiAtOS43NzI4OCA1NC4zMzkxIC05Ljc3MTk1IDU0LjMzOTEgLTkuNzcxOTUgNTQuMzM3MiAtOS43NzM5NCA1NC4zMzUwNiAtOS43NzcxNCA1NC4zMzIzMSAtOS43NzgzMyA1NC4zMzAzNyAtOS43NzcwMSA1NC4zMzA2NCAtOS43NzI5NSA1NC4zMzIwOCAtOS43NzIxNCA1NC4zMzQ0IC05Ljc3MTgyIDU0LjMzNDQgLTkuNzcxODIgNTQuMzM4MDcgLTkuNzcwNTUgNTQuMzM4MDcgLTkuNzcwNTUgNTQuMzM1NjQgLTkuNzY3MTcgNTQuMzMzMDcgLTkuNzY1NzIgNTQuMzMzNzQgLTkuNzYxMjggNTQuMzM2MzMgLTkuNzU3MDcgNTQuMzM5MjkgLTkuNzUyNzcgNTQuMzM4MjggLTkuNzQ4NjMgNTQuMzM2MDcgLTkuNzQ3MSA1NC4zMzQ2MyAtOS43NDM5NyA1NC4zMzIyNSAtOS43NDI0IDU0LjMyOTU4IC05Ljc0Mzc4IDU0LjMyOSAtOS43NDAwNCA1NC4zMjgxOCAtOS43MzcxOSA1NC4zMjYwNyAtOS43MzI4NSA1NC4zMjczNyAtOS43MzAxIDU0LjMyNjU4IC05LjcyNTM4IDU0LjMyNTI1IC05LjcyMzIzIDU0LjMyNTM5IC05LjcxOTc5IDU0LjMyNDk2IC05LjcxNTE1IDU0LjMyMzU2IC05LjcxNjkyIDU0LjMyMjMyIC05LjcxMzM2IDU0LjMyMjE5IC05LjcwODQ1IDU0LjMyMTE4IC05LjcwNTczIDU0LjMyMDA2IC05LjcwNzI0IDU0LjMxNzI4IC05LjcwNDgyIDU0LjMxOTU4IC05LjcwMzM4IDU0LjMyMTc1IC05LjcwMDAyIDU0LjMxOTcxIC05LjY5NzQyIDU0LjMyMDE5IC05LjY5NDUyIDU0LjMxODE2IC05LjY4NzY3IDU0LjMxNjc2IC05LjY3OTY4IDU0LjMxNjI5IC05LjY3MTQgNTQuMzE4NTUgLTkuNjY5NDcgNTQuMzE4MTYgLTkuNjY3MDQgNTQuMzE2NTYgLTkuNjYyIDU0LjMxNTE2IC05LjY1ODExIDU0LjMxMTQ3IC05LjY1NTUgNTQuMzEwODEgLTkuNjUyODYgNTQuMzE0NDIgLTkuNjUyNjEgNTQuMzE0NTcgLTkuNjQ5MDIgNTQuMzE1MzkgLTkuNjQ1MDkgNTQuMzE3MDIgLTkuNjQyNzMgNTQuMzE5MiAtOS42NDAzMiA1NC4zMjE2MyAtOS42Mzg1OCA1NC4zMjMyNiAtOS42MzYwNyA1NC4zMjE3NSAtOS42MzI0NyA1NC4zMTk3MiAtOS42Mjk4NyA1NC4zMjAyOCAtOS42MjU1OCA1NC4zMjA5NSAtOS42MjI0IDU0LjMyMjk1IC05LjYyNDIgNTQuMzI0IC05LjYyMjIgNTQuMzIxOTQgLTkuNjE3MjQgNTQuMzIzIC05LjYxMDk4IDU0LjMyMDY4IC05LjYwODQ5IDU0LjMyMDM3IC05LjYwMzM4IDU0LjMyMzE2IC05LjYwMTcyIDU0LjMyMTk2IC05LjU5MzMxIDU0LjMyMTk2IC05LjU5MzMxIDU0LjMyMTQ0IC05LjU4NTk2IDU0LjMxOTc0IC05LjU4NjU4IDU0LjMxOTU1IC05LjU4MjQ1IDU0LjMxODU3IC05LjU3NTE3IDU0LjMyMjY0IC05LjU3MzQzIDU0LjMyMDAzIC05LjU2ODM3IDU0LjMyMDA1IC05LjU2MDk4IDU0LjMxNDQ4IC05LjU1ODk2IDU0LjMxMjM3IC05LjU1NDYxIDU0LjMxMDg5IC05LjU0OTE0IDU0LjMxMDczIC05LjU0NDU0IDU0LjMxMzUxIC05LjU0MTQ1IDU0LjMxNTY2IC05LjUzNTQyIDU0LjMxNjQ0IC05LjUyOTI2IDU0LjMxMzQ4IC05LjUyODA3IDU0LjMxMDA1IC05LjUyODM1IDU0LjMxMDExIC05LjUyNDU5IDU0LjMwODc1IC05LjUyMDA4IDU0LjMwOTQxIC05LjUxNTc5IDU0LjMxMTQ4IC05LjUwNjYgNTQuMzE0MzEgLTkuNDk5OSA1NC4zMTY4OSAtOS40OTk5MiA1NC4zMTk1NSAtOS40OTU4NiA1NC4zMTUyNCAtOS40ODg1OSA1NC4zMTY2MyAtOS40ODQxMyA1NC4zMTQyNyAtOS40ODA4NSA1NC4zMTU0OSAtOS40Nzc2MSA1NC4zMTQ0IC05LjQ3NDczIDU0LjMxMjM5IC05LjQ3MzA5IDU0LjMxMDIxIC05LjQ2ODQzIDU0LjMwODA1IC05LjQ2MDQ3IDU0LjMwNjAxIC05LjQ1Mzc4IDU0LjMwOTA3IC05LjQ1MDQzIDU0LjMxMDA2IC05LjQ0NTI2IDU0LjMwNzcgLTkuNDQwNDEgNTQuMzA5MSAtOS40MzMxMiA1NC4zMTA2MyAtOS40MjY2NSA1NC4zMDk5MSAtOS40MTkyNyA1NC4zMDg4NSAtOS40MTI5NCA1NC4zMDgyNSAtOS40MDIyOCA1NC4zMDk2MyAtOS40MDA4MSA1NC4zMDg0IC05LjM5NDI3IDU0LjMwNjk3IC05LjM5MDcxIDU0LjMwNTUgLTkuMzg3NzYgNTQuMzAyNDQgLTkuMzg4MTIgNTQuMjk4NzkgLTkuMzg2MTggNTQuMjk2NzQgLTkuMzgzNzMgNTQuMjkzNTQgLTkuMzgwNjMgNTQuMjk0MTggLTkuMzc3NzYgNTQuMjkzMzggLTkuMzc0NDYgNTQuMjk1ODQgLTkuMzc0NzYgNTQuMjk3NSAtOS4zNzQ3NiA1NC4zMDA0NiAtOS4zNzE3IDU0LjMwMzAxIC05LjM3MzU5IDU0LjMwNDUxIC05LjM3MzI1IDU0LjMwNzIgLTkuMzcwMTMgNTQuMzA4NTkgLTkuMzY1NTMgNTQuMzA3NzEgLTkuMzYyMDYgNTQuMzA5IC05LjM1OTMxIDU0LjMxMDc5IC05LjM2MTUzIDU0LjMxMjggLTkuMzYwMzMgNTQuMzEzNyAtOS4zNTQ5OSA1NC4zMTQxMiAtOS4zNTExNCA1NC4zMTU5MiAtOS4zNDg5NSA1NC4zMTY0NCAtOS4zNDUyOCA1NC4zMTc2NyAtOS4zNDIwNCA1NC4zMjA1MiAtOS4zNDIxMSA1NC4zMjIzMiAtOS4zNDUyOCA1NC4zMjQ5NyAtOS4zNDcxOCA1NC4zMjU5NyAtOS4zNDU5NiA1NC4zMjY0OSAtOS4zNDIxMyA1NC4zMjQzMSAtOS4zMzg4OCA1NC4zMjIzOSAtOS4zMzU4NCA1NC4zMTk4IC05LjMzNDU3IDU0LjMxODI2IC05LjMyODMxIDU0LjMxNjU4IC05LjMyMTY5IDU0LjMxNTUzIC05LjMxMjA2IDU0LjMxNDY4IC05LjMwNjcxIDU0LjMxMjc0IC05LjMwMzk5IDU0LjMxMzg4IC05LjMwMDU4IDU0LjMxMzA1IC05LjI5NjE4IDU0LjMxMDc4IC05LjI5MTM1IDU0LjMxMDU2IC05LjI4NDcxIDU0LjMxMDk0IC05LjI3NzIyIDU0LjMwOTMgLTkuMjcyODIgNTQuMzA5MTkgLTkuMjY3MTQgNTQuMzA3MTQgLTkuMjYxODggNTQuMzA1MTQgLTkuMjU3MSA1NC4zMDE2IC05LjI1MjA1IDU0LjI5NzE2IC05LjI0NjUgNTQuMjkyMjYgLTkuMjQ2ODUgNTQuMjg4MzIgLTkuMjUwODUgNTQuMjgzOTEgLTkuMjUyMjMgNTQuMjgwMzIgLTkuMjQ5MzYgNTQuMjc5MDkgLTkuMjUyNzYgNTQuMjc1NjMgLTkuMjUzNjggNTQuMjcyOTMgLTkuMjUzOTcgNTQuMjY5OTMgLTkuMjUxODUgNTQuMjcwNzkgLTkuMjQ3MTIgNTQuMjY4NzQgLTkuMjQzMjkgNTQuMjcxNzMgLTkuMjQxMDIgNTQuMjc0MzIgLTkuMjM5NDUgNTQuMjc2MDMgLTkuMjQyOTIgNTQuMjc4MSAtOS4yNDIyIDU0LjI3NzYyIC05LjIzODE4IDU0LjI3NzM3IC05LjIzNDk5IDU0LjI3NzQ0IC05LjIzMDkxIDU0LjI3Nzc2IC05LjIyNzIxIDU0LjI3OTA1IC05LjIyNDQ0IDU0LjI4MTE2IC05LjIyMzExIDU0LjI4NDY5IC05LjIxOTY3IDU0LjI4NjU4IC05LjIxNTk0IDU0LjI4NzgxIC05LjIxMjM4IDU0LjI4NjE4IC05LjIwOTI1IDU0LjI4MzA5IC05LjIwOTk0IDU0LjI3OTUxIC05LjIwODM1IDU0LjI3NjEyIC05LjIwNjYyIDU0LjI3MTc4IC05LjIwNjkyIDU0LjI2Njg1IC05LjIwNzczIDU0LjI2MTY0IC05LjIxMDA4IDU0LjI1NDMgLTkuMjEyNTEgNTQuMjUxNjMgLTkuMjE0MDUgNTQuMjQ3MDggLTkuMjE3NDcgNTQuMjQzNTggLTkuMjIyIDU0LjI0MDU1IC05LjIyNzU2IDU0LjIzODczIC05LjIzMzA0IDU0LjIzNzE1IC05LjIzMTk2IDU0LjIzNjQ4IC05LjIzOTM4IDU0LjIzNjIgLTkuMjQzODcgNTQuMjM1MzkgLTkuMjQ2NDEgNTQuMjM0MjkgLTkuMjQ3OTMgNTQuMjMyMiAtOS4yNTAzNiA1NC4yMzE0NiAtOS4yNTMyMiA1NC4yMzE0MiAtOS4yNTY4MiA1NC4yMzAyOCAtOS4yNTg4MSA1NC4yMjg5OSAtOS4yNTg3MiA1NC4yMjU4NSAtOS4yNjE2MiA1NC4yMjY5MyAtOS4yNTUwNSA1NC4yMjg5OSAtOS4yNTQ0OSA1NC4yMjc3NSAtOS4yNDk1NCA1NC4yMjkyMSAtOS4yNDgwOSA1NC4yMzA4NiAtOS4yNDU0MSA1NC4yMzE5IC05LjI0MzU3IDU0LjIzMzgyIC05LjI0MjE4IDU0LjIzNDQyIC05LjI0MDA5IDU0LjIzNDQyIC05LjIzNTcxIDU0LjIzMjI4IC05LjIzNjEgNTQuMjMwNjYgLTkuMjMxMDkgNTQuMjMzMTEgLTkuMjMwMjggNTQuMjMyMzYgLTkuMjI2MjEgNTQuMjM1NiAtOS4yMjQ0NiA1NC4yMzY0NSAtOS4yMjI1OCA1NC4yMzY5OSAtOS4yMTk5OSA1NC4yMzgzMiAtOS4yMTc4OSA1NC4yNDAxIC05LjIxNTg2IDU0LjI0MzUyIC05LjIxNDEzIDU0LjI0NjA3IC05LjE5NDM0IDU0LjI0NDI5IC05LjE5MzIzIDU0LjI0MjUxIC05LjE5MzgzIDU0LjI0MDggLTkuMTkzMDcgNTQuMjM5MTIgLTkuMTkxOTcgNTQuMjM2NDkgLTkuMTkyOSA1NC4yMzM4NCAtOS4xOTM5OCA1NC4yMzA4NyAtOS4xOTczNiA1NC4yMjg2OCAtOS4xOTgzNyA1NC4yMjY4MyAtOS4yMDE2NCA1NC4yMjUxMyAtOS4yMDUyNiA1NC4yMjY1MiAtOS4yMDc4NyA1NC4yMjgzMSAtOS4yMDU4NCA1NC4yMjk3NiAtOS4yMDMxMyA1NC4yMzE5MyAtOS4yMDEwMSA1NC4yMzMgLTkuMjAyOTQgNTQuMjMxNDggLTkuMjA1MTYgNTQuMjMwMTggLTkuMjA2ODEgNTQuMjMwMTkgLTkuMjA5NDggNTQuMjI4OSAtOS4yMTA5OCA1NC4yMjc2NCAtOS4yMTM0MSA1NC4yMjcyMiAtOS4yMTU2OCA1NC4yMjYwMiAtOS4yMTcxOSA1NC4yMjQ5NCAtOS4yMTM4NSA1NC4yMjI4NyAtOS4yMTQ1OCA1NC4yMjQxIC05LjIxMTE5IDU0LjIyMjk4IC05LjIxMDA1IDU0LjIyIC05LjIxMzU4IDU0LjIyMjA2IC05LjIxNzI1IDU0LjIyMDY4IC05LjIxODczIDU0LjIxOTI3IC05LjIyMDY3IDU0LjIxNjkgLTkuMjIxNjMgNTQuMjE2NTYgLTkuMjE5ODYgNTQuMjE4MTMgLTkuMjE4MjEgNTQuMjE2ODEgLTkuMjE0NCA1NC4yMTU3MyAtOS4yMTU2MSA1NC4yMTM0MiAtOS4yMTU1IDU0LjIxMTEyIC05LjIxMjczIDU0LjIxMDAxIC05LjIwNTQ3IDU0LjIxMDMzIC05LjIwMTc2IDU0LjIwODkxIC05LjE5ODE5IDU0LjIwODM1IC05LjE5MjQ0IDU0LjIwNTk3IC05LjE5MjE3IDU0LjIwNjggLTkuMTg2NTEgNTQuMjA1ODIgLTkuMTgzMDQgNTQuMjA1NDEgLTkuMTc5MiA1NC4yMDQ1MSAtOS4xNzQ2NCA1NC4yMDM0OCAtOS4xNzMzNiA1NC4yMDA4MyAtOS4xNzQ1OSA1NC4yMDAxMSAtOS4xNjk5MSA1NC4xOTkzMyAtOS4xNjYxNSA1NC4yMDA5NCAtOS4xNjM5NCA1NC4yMDA2OCAtOS4xNjA3NiA1NC4xOTk3NSAtOS4xNTgwNyA1NC4xOTY4OCAtOS4xNTY3NyA1NC4xOTUxMyAtOS4xNTgzMiA1NC4xOTM2OCAtOS4xNjA5IDU0LjE5MTU3IC05LjE2MDY2IDU0LjE4OTc3IC05LjE2MyA1NC4xODY5NSAtOS4xNTk1MSA1NC4xODU5OCAtOS4xNTQ0NiA1NC4xODQxOCAtOS4xNDgwMyA1NC4xODI4OCAtOS4xNDM4NiA1NC4xODAwMyAtOS4xNDIyNSA1NC4xNzU5NiAtOS4xNDQxOCA1NC4xNzQ1OCAtOS4xNDEyNiA1NC4xNzI4NSAtOS4xNDIzNSA1NC4xNzA3OSAtOS4xMzk5NSA1NC4xNjkwMSAtOS4xNDE5NyA1NC4xNjc2IC05LjEzOTM3IDU0LjE2NTg4IC05LjEzOTA1IDU0LjE2MjUzIC05LjEzOTU0IDU0LjE2MDgyIC05LjE0MTg5IDU0LjE1OTI1IC05LjE0MDM1IDU0LjE1NzA5IC05LjE0MTA2IDU0LjE1Mjc0IC05LjE0MTUxIDU0LjE0Nzk1IC05LjE0MTU5IDU0LjE0NDcxIC05LjEzODggNTQuMTQyMSAtOS4xNDA5OSA1NC4xMzgxNyAtOS4xNDA0NCA1NC4xMzUyIC05LjEzOTQyIDU0LjEzMSAtOS4xNDAzOCA1NC4xMjYxOCAtOS4xNDIxOCA1NC4xMjIzNyAtOS4xNDE0OCA1NC4xMTczNyAtOS4xNDc3NyA1NC4xMTYyNCAtOS4xNDgxOSA1NC4xMTM2NiAtOS4xNDk2IDU0LjExMDg0IC05LjE1MjA2IDU0LjEwNzY0IC05LjE1NDQ2IDU0LjEwNDQ0IC05LjE1NDE5IDU0LjEwMDg2IC05LjE1NDAxIDU0LjA5NzA0IC05LjE1NDcyIDU0LjA5NTA2IC05LjE1MTA3IDU0LjA5MzAyIC05LjE0Njk1IDU0LjA5MDIyIC05LjE0NDcxIDU0LjA4NzgyIC05LjE0MTc4IDU0LjA4NTA1IC05LjEzNjEyIDU0LjA4MDc4IC05LjEzMzc4IDU0LjA3OTY4IC05LjEzNTE0IDU0LjA3Nzk3IC05LjEzNjA4IDU0LjA3NTcgLTkuMTM1NTEgNTQuMDc1NTMgLTkuMTM5NTQgNTQuMDczNjUgLTkuMTQxNzEgNTQuMDcxNjYgLTkuMTQyNTkgNTQuMDcwNDkgLTkuMTQ1MiA1NC4wNjkxOCAtOS4xNDU0MyA1NC4wNjYzMyAtOS4xNDUzOCA1NC4wNjYzMyAtOS4xNDUzOCA1NC4wNjkxNSAtOS4xNDMwOCA1NC4wNzEzMiAtOS4xMzkyNSA1NC4wNzMzMyAtOS4xMzgwNSA1NC4wNzQ3NSAtOS4xMzI5OSA1NC4wNzY1IC05LjEzMTU5IDU0LjA3OTU4IC05LjEzMDkgNTQuMDgyNTYgLTkuMTMxNzQgNTQuMDg1MzQgLTkuMTMyODggNTQuMDg3OTUgLTkuMTM1MzkgNTQuMDg4OTIgLTkuMTM5IDU0LjA5MTY1IC05LjE0MTA2IDU0LjA5MzM4IC05LjE0NDM2IDU0LjA5NTU2IC05LjE0OTEzIDU0LjA5ODc5IC05LjE1MDM1IDU0LjEwMiAtOS4xNTA2MiA1NC4xMDQ0OSAtOS4xNTA0NSA1NC4xMDc5MiAtOS4xNTE1MyA1NC4xMTA3NiAtOS4xNDc1MSA1NC4xMTM1NiAtOS4xNDM3OSA1NC4xMTY1MiAtOS4xNDUxMiA1NC4xMTg0OSAtOS4xNDMxMiA1NC4xMjA0IC05LjEzODkzIDU0LjEyMzE5IC05LjEzODQ5IDU0LjEyNjU2IC05LjEzNzcgNTQuMTI5ODYgLTkuMTM2NDIgNTQuMTMyMzIgLTkuMTM1NDUgNTQuMTM2MTQgLTkuMTM0NzMgNTQuMTM5NjYgLTkuMTM0MjggNTQuMTQyODQgLTkuMTM0ODUgNTQuMTQ1MjYgLTkuMTMzMTEgNTQuMTQ3NTggLTkuMTMyOSA1NC4xNDkwMSAtOS4xMzQ4OCA1NC4xNTEzNiAtOS4xMzEzOSA1NC4xNTM5OSAtOS4xMzMyOSA1NC4xNTcxOCAtOS4xMzA4OCA1NC4xNTg5NiAtOS4xMzMzOSA1NC4xNjA5MSAtOS4xMjg3NCA1NC4xNjI2NyAtOS4xMjk5OSA1NC4xNjQ0NCAtOS4xMzExMSA1NC4xNjYzNiAtOS4xMzEyOSA1NC4xNjczOCAtOS4xMjgzNSA1NC4xNzAyIC05LjEzMDI2IDU0LjE3MTgyIC05LjEyNzkgNTQuMTc3NyAtOS4xMzM4MyA1NC4xNzkyMyAtOS4xMzMxNiA1NC4xODA3MiAtOS4xMjg0MiA1NC4xODE1NyAtOS4xMjY2OCA1NC4xODI0MyAtOS4xMjMwOCA1NC4xODc4NiAtOS4xMjQ1MyA1NC4xODk1MiAtOS4xMjMxMiA1NC4xOTI2MyAtOS4xMjYzNSA1NC4xOTQwNyAtOS4xMjM5NCA1NC4xOTUxNSAtOS4xMjQzIDU0LjE5NzUyIC05LjEyMTc1IDU0LjE5Nzg0IC05LjExNTIxIDU0LjE5ODU4IC05LjExMDgxIDU0LjE5OTk1IC05LjEwNzkxIDU0LjIwMzEyIC05LjEwNTgxIDU0LjIwMDUxIC05LjExMzgyIDU0LjIwMjQ5IC05LjExODcyIDU0LjIwMjIxIC05LjEyNjIxIDU0LjIwMjMzIC05LjEzMTcxIDU0LjIwNDEzIC05LjEzMzc4IDU0LjIwNjI5IC05LjEzMDA5IDU0LjIwNjYyIC05LjEyMzU1IDU0LjIwODYgLTkuMTE4MjcgNTQuMjA4OTUgLTkuMTEyNjggNTQuMjA4NzkgLTkuMTA3OTQgNTQuMjA4OTEgLTkuMTAyOTUgNTQuMjExMzQgLTkuMDk2NjMgNTQuMjE0MTMgLTkuMDkzMjEgNTQuMjE2NzggLTkuMDkzMzggNTQuMjE4OTkgLTkuMDk0ODggNTQuMjIxNSAtOS4wOTU5NiA1NC4yMjQ2MSAtOS4wOTQ4IDU0LjIyNzQ4IC05LjA5MzEyIDU0LjIzMDc5IC05LjA5MDI3IDU0LjIzNTA0IC05LjA4NTU0IDU0LjIzOTYgLTkuMDgwMjQgNTQuMjQ0MDMgLTkuMDc4NTMgNTQuMjQ4OTcgLTkuMDc0NTUgNTQuMjUzMDkgLTkuMDcwNTkgNTQuMjU3NjcgLTkuMDY2NTQgNTQuMjYxNDIgLTkuMDY1MzQgNTQuMjY1MTIgLTkuMDY1MDcgNTQuMjY2NjYgLTkuMDYyNTIgNTQuMjY4NTggLTkuMDYxMjkgNTQuMjY5NjIgLTkuMDU3NzEgNTQuMjcxMTIgLTkuMDU0MzYgNTQuMjc0NTYgLTkuMDUzODggNTQuMjc3MjEgLTkuMDU3MTggNTQuMjc5MzYgLTkuMDU5NDYgNTQuMjgwNTYgLTkuMDU2NTMgNTQuMjgyNjMgLTkuMDU0MjQgNTQuMjg2NDcgLTkuMDU0NjIgNTQuMjkxNSAtOS4wNTUyMSA1NC4yOTM4MyAtOS4wNTMyNyA1NC4yOTM3OSAtOS4wNDk1IDU0LjI5MjY1IC05LjA0NDA5IDU0LjI5MjI2IC05LjAzOTk0IDU0LjI5MyAtOS4wMzM5NSA1NC4yOTM5NyAtOS4wMzAxOSA1NC4yOTU3MiAtOS4wMjU3OSA1NC4yOTU0NyAtOS4wMjA4NyA1NC4yOTQ2IC05LjAxMzk1IDU0LjI5Mjg5IC05LjAxMDUgNTQuMjkxNDQgLTkuMDA2OTQgNTQuMjkwODUgLTkuMDAwMzggNTQuMjkxNTggLTguOTk0MzkgNTQuMjkzMzIgLTguOTkxNCA1NC4yOTM3NiAtOC45ODQzOSA1NC4yOTEyMSAtOC45Nzc5NyA1NC4yODk2MSAtOC45NzI0OSA1NC4yOTAxOCAtOC45Njc3MyA1NC4yOTE1NyAtOC45NjU5NCA1NC4yOTI2IC04Ljk2MjY1IDU0LjI5MTUxIC04Ljk1NjQ5IDU0LjI5MDQzIC04Ljk1MTU4IDU0LjI5MjY5IC04Ljk0OTE2IDU0LjI5Mjc0IC04Ljk0MDg0IDU0LjI5MDQ3IC04LjkzNzI5IDU0LjI5MTc1IC04LjkzNDUzIDU0LjI5MTY0IC04LjkzMTg0IDU0LjI4OTMyIC04LjkzMjA2IDU0LjI4ODU3IC04LjkyNzgzIDU0LjI4Njg3IC04LjkyMzkxIDU0LjI4NDU1IC04LjkxOTc0IDU0LjI4MzI2IC04LjkxMjEzIDU0LjI4Mjc4IC04LjkwNjUzIDU0LjI4MDY5IC04LjkwMzAyIDU0LjI3NzUzIC04LjkwMDU4IDU0LjI3MjIyIC04Ljg5ODU1IDU0LjI3MDMxIC04Ljg5NTIyIDU0LjI2OTE4IC04Ljg4Nzk1IDU0LjI2ODQ1IC04Ljg4MzQyIDU0LjI2NjQ2IC04Ljg4MTM0IDU0LjI2ODc0IC04Ljg3NTYyIDU0LjI2NDg5IC04Ljg2OTI4IDU0LjI2MzIzIC04Ljg2NjMyIDU0LjI2MDY2IC04Ljg2MzIgNTQuMjYzODYgLTguODU1OTEgNTQuMjYxNDUgLTguODU0NTUgNTQuMjYwMjcgLTguODUxMzYgNTQuMjU3NjUgLTguODUwNDMgNTQuMjU2NzIgLTguODQ0NjEgNTQuMjU1MjggLTguODQxMDYgNTQuMjUzNDkgLTguODM3MTQgNTQuMjUyMyAtOC44MzI1MyA1NC4yNTI3IC04LjgyNTg1IDU0LjI1MzkxIC04LjgxMzMzIDU0LjI1NjQxIC04LjgxMjk5IDU0LjI1NjE0IC04LjgwODIzIDU0LjI1Njg0IC04LjgwMjcxIDU0LjI1ODI5IC04Ljc5Njk5IDU0LjI2MSAtOC43OTMzNyA1NC4yNjIyOSAtOC43OTAxNSA1NC4yNjU3MiAtOC43ODUyNSA1NC4yNjk1MyAtOC43ODQ0OSA1NC4yNzE4NCAtOC43ODEyOCA1NC4yNzUwMiAtOC43NzU3MiA1NC4yNzc0IC04Ljc2OTg1IDU0LjI3OTMxIC04Ljc2MDkxIDU0LjI3OTI3IC04Ljc1NjgxIDU0LjI3ODEzIC04Ljc1NDQyIDU0LjI3NjY1IC04Ljc1MzA1IDU0LjI3NDI0IC04Ljc1MzQzIDU0LjI3MTcgLTguNzU0NDEgNTQuMjY5MyAtOC43NTQ0NSA1NC4yNjgxMyAtOC43NTIzNyA1NC4yNjc1NCAtOC43NDY5MyA1NC4yNjc1OCAtOC43NDAxOCA1NC4yNjUyNyAtOC43MzcyOCA1NC4yNjM5NSAtOC43MzQ1MiA1NC4yNjI5OCAtOC43MzA5MSA1NC4yNjMyNSAtOC43MjQ4MiA1NC4yNjQxMSAtOC43MTk2NCA1NC4yNjU4NSAtOC43MTM1IDU0LjI2NjUxIC04LjcwODQzIDU0LjI2NjQ2IC04LjcwMzA5IDU0LjI2ODM5IC04LjY5OTk2IDU0LjI3MDQxIC04LjY5NTQ0IDU0LjI3MTUxIC04LjY4OTM0IDU0LjI3MjQ2IC04LjY4NDE2IDU0LjI3Mjc5IC04LjY3ODU4IDU0LjI3MTgyIC04LjY3MzIyIDU0LjI3MTg4IC04LjY2NzQyIDU0LjI3MTY2IC04LjY2MzMgNTQuMjcwMDQgLTguNjU4MTYgNTQuMjY4MzUgLTguNjUzOTQgNTQuMjY1NDggLTguNjUxMSA1NC4yNjE5MyAtOC42NTA0OSA1NC4yNjAyNyAtOC42NDU4MSA1NC4yNTczNCAtOC42NDU3OCA1NC4yNTUyMiAtOC42NDI0NCA1NC4yNTI5NiAtOC42Mzg5MSA1NC4yNTI5NiAtOC42Mzg5MSA1NC4yNTMwOSAtOC42NDI3IDU0LjI1MTc3IC04LjY0MzI3IDU0LjI1MTc5IC04LjY0NjI0IDU0LjI1MTAzIC04LjY0ODE1IDU0LjI0OTY4IC04LjY0NjIgNTQuMjQ4MTQgLTguNjQ1NjIgNTQuMjQ3NzEgLTguNjQxOTQgNTQuMjQ2MjYgLTguNjM4NTYgNTQuMjQ1MTcgLTguNjM1MjMgNTQuMjQ1NyAtOC42MzA5MyA1NC4yNDM1MiAtOC42MzUxMSA1NC4yMzg5NyAtOC42MzU3NSA1NC4yNDIwNCAtOC42MzA2MiA1NC4yNDA5OSAtOC42Mjc5MyA1NC4yMzgzMiAtOC42MjgxIDU0LjIzNjM1IC04LjYyNzE0IDU0LjIzNzM1IC04LjYyMjYgNTQuMjMzNyAtOC42MTI3MiA1NC4yMzAyOSAtOC42MTEzNSA1NC4yMzEwMyAtOC42MDgyIDU0LjIyNzI0IC04LjYwNjc3IDU0LjIyNTY2IC04LjYwODcgNTQuMjI0ODEgLTguNjA0MzIgNTQuMjIyNjYgLTguNjAzMzMgNTQuMjIyODUgLTguNTk2NzcgNTQuMjIzMDcgLTguNTkzMTkgNTQuMjIzMTQgLTguNTkwMjMgNTQuMjIxMDMgLTguNTkxNzYgNTQuMjE2MDcgLTguNTkxNyA1NC4yMTI3MiAtOC41ODkyNSA1NC4yMTAwNCAtOC41ODk0MyA1NC4yMDgyNSAtOC41ODUzNyA1NC4yMDcyIC04LjU4MTQyIDU0LjIwNzg5IC04LjU3NzQ1IDU0LjIwOTA1IC04LjU3NDgzIDU0LjIxMjMxIC04LjU3NDEzIDU0LjIxNzYzIC04LjU3NzU0IDU0LjIxNjgyIC04LjU3NDEgNTQuMjE2ODIgLTguNTcwOTYgNTQuMjE3NTIgLTguNTY4NDIgNTQuMjE1NzUgLTguNTY1NjIgNTQuMjE1NTIgLTguNTYzMzggNTQuMjE1OSAtOC41NTgyNyA1NC4yMTY2OCAtOC41NTI5MSA1NC4yMTc3IC04LjU0NzkxIDU0LjIxNzI3IC04LjU0MjY2IDU0LjIxNTk0IC04LjUzODUxIDU0LjIxNTI2IC04LjUzMjc1IDU0LjIxNDg5IC04LjUyNjU4IDU0LjIxNTEyIC04LjUyMDk4IDU0LjIxNTM5IC04LjUxNDU4IDU0LjIxMzg5IC04LjUxMTk4IDU0LjIxNjY2IC04LjUxMDEgNTQuMjE3MTYgLTguNTA3OTggNTQuMjE5MjggLTguNTA3ODcgNTQuMjE5NzYgLTguNTEyMzQgNTQuMjIyNTEgLTguNTEyNDkgNTQuMjIxMjMgLTguNTE3MTMgNTQuMjIgLTguNTE5NDMgNTQuMjIwMzQgLTguNTI0NjYgNTQuMjIyODggLTguNTI2ODIgNTQuMjIzIC04LjUzMTA4IDU0LjIyNTE0IC04LjUzMjIyIDU0LjIyODIzIC04LjUzMTE3IDU0LjIyOTA2IC04LjUzNDQ0IDU0LjIyNjA4IC04LjUzNTA1IDU0LjIyMjgxIC04LjUzNTkgNTQuMjIyODggLTguNTM3NzkgNTQuMjIwOCAtOC41NDIgNTQuMjIyODEgLTguNTQzOSA1NC4yMjQwOCAtOC41NDI1NCA1NC4yMjU3NSAtOC41NDU0OSA1NC4yMjcwNCAtOC41NDM4MyA1NC4yMjkyOCAtOC41NDM0MiA1NC4yMjkzMyAtOC41NDU2MyA1NC4yMjk1MyAtOC41NTAwNSA1NC4yMzAxNyAtOC41NTMzIDU0LjIzMDIyIC04LjU2MDM2IDU0LjIzMDc5IC04LjU2NDY5IDU0LjIzMTg5IC04LjU2OTU5IDU0LjIzMjM0IC04LjU3MjggNTQuMjM0NzkgLTguNTczNTMgNTQuMjM2OTIgLTguNTcxODUgNTQuMjM4ODIgLTguNTcyMTggNTQuMjQwMzIgLTguNTcxNzkgNTQuMjQyNDkgLTguNTczODkgNTQuMjQzNjUgLTguNTc2MTMgNTQuMjQ0MjcgLTguNTc5NjggNTQuMjQ1MzkgLTguNTgwOTYgNTQuMjQ1NTUgLTguNTg0NiA1NC4yNDczNSAtOC41ODUzNyA1NC4yNDg5OSAtOC41ODU1IDU0LjI1MDU2IC04LjU4Njg2IDU0LjI1MjQxIC04LjU5IDU0LjI1MzQ5IC04LjU5MzQ4IDU0LjI1MjAyIC04LjU5NjY4IDU0LjI1MzEgLTguNTk4NTkgNTQuMjU1MDEgLTguNTk4OTIgNTQuMjU3MjggLTguNTk5NjIgNTQuMjU5NjQgLTguNjAxNTggNTQuMjYxMjggLTguNjA1IDU0LjI2MTE5IC04LjYwOTcgNTQuMjYwNzUgLTguNjE0MTcgNTQuMjU5ODEgLTguNjE3NDcgNTQuMjU2MzEgLTguNjE3NjYgNTQuMjU1MjEgLTguNjIwNzcgNTQuMjUzMDYgLTguNjE5NzcgNTQuMjUyMjYgLTguNjIyNDYgNTQuMjUzOCAtOC42MjI4OCA1NC4yNTYyNyAtOC42MjQ1NiA1NC4yNTkyIC04LjYyNDkxIDU0LjI2MTcxIC04LjYyMTI1IDU0LjI2NDc1IC04LjYxNjU4IDU0LjI2NjgxIC04LjYxNDI2IDU0LjI3MTkgLTguNjA5MDEgNTQuMjc1IC04LjYwNDgyIDU0LjI3NzU2IC04LjYwNjY3IDU0LjI4MDU2IC04LjYwODkgNTQuMjgzMTkgLTguNjEyNjUgNTQuMjgxOTIgLTguNjA2IDU0LjI4MjcyIC04LjYwMTczIDU0LjI4MDEgLTguNTk5NCA1NC4yNzg2OSAtOC41OTUwOCA1NC4yNzY5NCAtOC41OTAzOCA1NC4yNzU5OCAtOC41ODMxNiA1NC4yNzc4NyAtOC41NzkyMyA1NC4yNzc4MSAtOC41NzIzMSA1NC4yNzUxNiAtOC41NjcxNiA1NC4yNzY4IC04LjU2MjcyIDU0LjI3ODUxIC04LjU1NzIgNTQuMjc5NTkgLTguNTUxMDkgNTQuMjc5ODYgLTguNTQzMjkgNTQuMjc5NjYgLTguNTM1NzIgNTQuMjc5NTYgLTguNTI5NDIgNTQuMjc4MTMgLTguNTIyNDIgNTQuMjc4MDMgLTguNTE3NyA1NC4yODAxNiAtOC41MTQyOCA1NC4yODIzIC04LjUxMDU3IDU0LjI4MzE4IC04LjUwNjYyIDU0LjI4MjM3IC04LjUwMTQ3IDU0LjI4MDk2IC04LjQ5Mzg0IDU0LjI4MDk2IC04LjQ5Mzg0IDU0LjI4MzI4IC04LjQ5Njc1IDU0LjI4MjY0IC04LjQ5MzUgNTQuMjgxNzIgLTguNDkwMiA1NC4yNzk3NiAtOC40ODc1MiA1NC4yNzc4MiAtOC40ODQ2OSA1NC4yNzU1MyAtOC40ODExNiA1NC4yNzM5OSAtOC40NzU4OCA1NC4yNzY3MyAtOC40NzYxOCA1NC4yNzgxNyAtOC40NzUzMiA1NC4yNzk3MiAtOC40NzY5OSA1NC4yNzk1MyAtOC40ODE5OSA1NC4yODAyOCAtOC40ODMzNyA1NC4yODIwMiAtOC40ODM1MSA1NC4yODE4MyAtOC40Nzg5MSA1NC4yODUyIC04LjQ4MDg5IDU0LjI4NzA3IC04LjQ4MTk5IDU0LjI4Nzg2IC04LjQ4NDMxIDU0LjI4OTEzIC04LjQ4NzY3IDU0LjI4NjU0IC04LjQ4ODE4IDU0LjI4NDQ3IC04LjQ4ODkzIDU0LjI4NzM3IC04LjQ5MTE0IDU0LjI4OTkxIC04LjQ5MTczIDU0LjI5MjQ5IC04LjQ5MzQyIDU0LjI5NDIyIC04LjQ5Njg0IDU0LjI5NTA2IC04LjUwMTM5IDU0LjI5NjA2IC04LjUwNDg1IDU0LjI5OTAzIC04LjUxMDY5IDU0LjMwMTA2IC04LjUxNTQzIDU0LjMwMjQ1IC04LjUxOTkyIDU0LjMwMjI5IC04LjUyNDQzIDU0LjMwMjA0IC04LjUyODggNTQuMzAxNjcgLTguNTMzNDQgNTQuMzAxNzYgLTguNTM2NzYgNTQuMzAzNTEgLTguNTQxNDYgNTQuMzA0IC04LjU0ODc2IDU0LjMwNjU1IC04LjU0NjIyIDU0LjMwNjc0IC04LjU0OTIzIDU0LjMwNDY1IC04LjU1NTE3IDU0LjMwNDQ5IC04LjU2MDk0IDU0LjMwNDU2IC04LjU2Nzg4IDU0LjMwNjkgLTguNTczMyA1NC4zMTA2NCAtOC41NjkyMiA1NC4zMTMwNiAtOC41Njg2OCA1NC4zMTU4MiAtOC41NzAyNSA1NC4zMTk0NSAtOC41NzEwMiA1NC4zMTk2MyAtOC41NzQzNSA1NC4zMjIwOCAtOC41NzQ5MiA1NC4zMjI3NCAtOC41NzE1OCA1NC4zMjQ3MSAtOC41NzA4MSA1NC4zMjYzMyAtOC41Njk4MiA1NC4zMjg1NiAtOC41Njc4NCA1NC4zMzA1MyAtOC41Njg4IDU0LjMzMjc0IC04LjU3MTg0IDU0LjMzNDgxIC04LjU3MjY4IDU0LjMzODEyIC04LjU3MjYgNTQuMzM1NDEgLTguNTY3MTEgNTQuMzMyNSAtOC41NjQ4OSA1NC4zMzAxNCAtOC41NjI5MiA1NC4zMjk0MyAtOC41NTkxOSA1NC4zMjc0NSAtOC41NTY4MSA1NC4zMjU2NiAtOC41NTc2IDU0LjMyNDI3IC04LjU1NDU1IDU0LjMyMjk0IC04LjU1MjExIDU0LjMyMDUxIC04LjU0OTY2IDU0LjMxOTY3IC04LjU0NTEyIDU0LjMxODMxIC04LjUzOTg2IDU0LjMxNzAyIC04LjUzNTA5IDU0LjMxNTU1IC04LjUzMjAyIDU0LjMxNDk1IC04LjUyNzk4IDU0LjMxNTIzIC04LjUyMzMxIDU0LjMxNDA2IC04LjUyMTA3IDU0LjMxNDA4IC04LjUxNzYyIDU0LjMxMzc0IC04LjUxMjM3IDU0LjMxNDY3IC04LjUwNzQ5IDU0LjMxNjk3IC04LjUwNTgzIDU0LjMxODg2IC04LjUwMzE3IDU0LjMyMDk1IC04LjUwMDM4IDU0LjMyMjkzIC04LjQ5OTc3IDU0LjMyNDY5IC04LjUwMjczIDU0LjMyNjc0IC04LjUwNzE3IDU0LjMyODUyIC04LjUwNjM2IDU0LjMyODkzIC04LjUwODk0IDU0LjMyNzc2IC04LjUxMzMxIDU0LjMyNzk1IC04LjUxNjMyIDU0LjMyODc4IC04LjUyMjc2IDU0LjMzMDc4IC04LjUyNzgxIDU0LjMzMjE2IC04LjUzMDg3IDU0LjMzMTkzIC04LjUzNTA3IDU0LjMzMDY5IC04LjUzNTY1IDU0LjMyOTc5IC04LjU0MDIyIDU0LjMyNzIyIC04LjU0MTY4IDU0LjMyNzU4IC04LjU0NTAzIDU0LjMzMDkgLTguNTQ0OTcgNTQuMzMxMTYgLTguNTQ4MzEgNTQuMzMyNDMgLTguNTQ4NjkgNTQuMzMzMjYgLTguNTQzNzkgNTQuMzM0MDggLTguNTQwNzggNTQuMzM0OTYgLTguNTM4MjcgNTQuMzM1NzUgLTguNTM0MTUgNTQuMzM2NzkgLTguNTM1MjcgNTQuMzM3MzYgLTguNTM5NjEgNTQuMzM3MyAtOC41NDI0MyA1NC4zMzc3NyAtOC41NDY5MiA1NC4zMzkyNyAtOC41NDgxMSA1NC4zNDA3NyAtOC41NTIyOSA1NC4zNDEwMSAtOC41NTYxMSA1NC4zNDA0NCAtOC41NjEyMSA1NC4zNDAyNCAtOC41NjYyMSA1NC4zNDExIC04LjU2ODg2IDU0LjM0MjYxIC04LjU3MzA1IDU0LjM0MjExIC04LjU3Njc0IDU0LjM0MDQxIC04LjU3OTEzIDU0LjM0MDY1IC04LjU4NDUxIDU0LjM0MTM5IC04LjU4Nzc4IDU0LjM0MDkyIC04LjU5MjQyIDU0LjMzOTk0IC04LjU5ODIzIDU0LjMzNzQyIC04LjYwMDQ5IDU0LjMzODI2IC04LjYwNDg3IDU0LjMzODQ5IC04LjYwOTE1IDU0LjMzNzEgLTguNjEyMzggNTQuMzM1MzMgLTguNjE0MjkgNTQuMzMzNjIgLTguNjE2ODMgNTQuMzM0NzMgLTguNjIzMTQgNTQuMzM0MzEgLTguNjI4NTggNTQuMzMzODEgLTguNjM0IDU0LjMzMzEgLTguNjM4MTIgNTQuMzMyMiAtOC42NDExMiA1NC4zMzAxNiAtOC42NDI5NyA1NC4zMjg4NCAtOC42NDM1MiA1NC4zMjczOSAtOC42NDE1NSA1NC4zMjUzOCAtOC42Mzk3OSA1NC4zMjMxNiAtOC42Mzk4OSA1NC4zMjA4MiAtOC42NDIxNiA1NC4zMjI4MSAtOC42NDU5NiA1NC4zMjMxNiAtOC42NDkzMiA1NC4zMjQ0NiAtOC42NTM3OSA1NC4zMjY3OSAtOC42NTQ5NyA1NC4zMjkxNiAtOC42NTUyMiA1NC4zMzAxMiAtOC42NTMwMyA1NC4zMjkxNyAtOC42NDU3OCA1NC4zMzEwNiAtOC42NDY0MyA1NC4zMzI5NSAtOC42NDg2MyA1NC4zMzQ3NCAtOC42NDc4NCA1NC4zMzc2IC04LjY0OTQzIDU0LjM0MDI0IC04LjY1MzAzIDU0LjM0MzM2IC04LjY1NzgxIDU0LjM0NjE3IC04LjY2NDg5IDU0LjM0NyAtOC42NzI1OCA1NC4zNDg3MSAtOC42NzY1IDU0LjM0OTI1IC04LjY3MzMgNTQuMzQ5NzIgLTguNjcwMDcgNTQuMzUwODQgLTguNjY4MjIgNTQuMzUyOTcgLTguNjY4MTEgNTQuMzU0NTYgLTguNjY5MTYgNTQuMzU1NTggLTguNjcyMTcgNTQuMzU1MzggLTguNjc3MDEgNTQuMzU3ODggLTguNjc2ODIgNTQuMzU3MTkgLTguNjcxMzUgNTQuMzYwNiAtOC42NzEzMSA1NC4zNTk4MiAtOC42NzY2OSA1NC4zNjEzNyAtOC42NzUzNiA1NC4zNjI4MiAtOC42NzI2MyA1NC4zNjM3NCAtOC42Njc5IDU0LjM2MjE3IC04LjY2NDk3IDU0LjM2MzIxIC04LjY2MTIgNTQuMzY0NTUgLTguNjYwMzMgNTQuMzY1MTQgLTguNjU2NSA1NC4zNjY3IC04LjY1MzQ3IDU0LjM2NzkzIC04LjY0OTc0IDU0LjM2ODk2IC04LjY0NDcxIDU0LjM2OTUyIC04LjYzOTc4IDU0LjM2OTE0IC04LjYzNjg5IDU0LjM3MDQxIC04LjYzMjU0IDU0LjM2ODcgLTguNjI4NzggNTQuMzY4NDQgLTguNjI1NDMgNTQuMzY4OTUgLTguNjIxMjcgNTQuMzcxMzcgLTguNjE5MzIgNTQuMzczNDYgLTguNjE5NjcgNTQuMzc0NTUgLTguNjE4MjggNTQuMzc2NjMgLTguNjE3MzggNTQuMzc4NjggLTguNjE2OTQgNTQuMzc5NyAtOC42MTUwNyA1NC4zODExMSAtOC42MTEzOCA1NC4zODE2OSAtOC42MDc4NSA1NC4zODE2NCAtOC42MDIzMyA1NC4zODM1IC04LjYwMDI5IDU0LjM4MzY4IC04LjU5NzMzIDU0LjM4NDU5IC04LjU5Mjc2IDU0LjM4NTgxIC04LjU4OTE4IDU0LjM4NzU3IC04LjU4NTcxIDU0LjM5MDA0IC04LjU4MTI0IDU0LjM5MDI0IC04LjU3NzgxIDU0LjM5MDI5IC04LjU3MzczIDU0LjM5MTEgLTguNTcwODYgNTQuMzkyNTQgLTguNTY4MjcgNTQuMzk0MjMgLTguNTY3NjIgNTQuMzk2NDYgLTguNTY4OTUgNTQuMzk3NTggLTguNTY3MDggNTQuMzk4NjUgLTguNTY2IDU0LjM5OTkyIC04LjU2OTUzIDU0LjM5OTkgLTguNTcyODMgNTQuNDA0ODcgLTguNTY5NzQgNTQuNDA5MjIgLTguNTY2MDYgNTQuNDA1NTYgLTguNTYyNiA1NC40MDU1NyAtOC41NTYgNTQuNDA1NzYgLTguNTUxMTUgNTQuNDA3MTIgLTguNTQ2NjQgNTQuNDA4MjcgLTguNTQxMTcgNTQuNDA5NjggLTguNTM1NzQgNTQuNDExNTYgLTguNTMwMzkgNTQuNDEzOTggLTguNTI4MTEgNTQuNDE3MzUgLTguNTI1NTIgNTQuNDE3MzUgLTguNTI1NTIgNTQuNDE4MjEgLTguNTIzMzEgNTQuNDE5ODMgLTguNTIyNDggNTQuNDIxODUgLTguNTIyNSA1NC40MjE1OCAtOC41MTkxNSA1NC40MjMxNCAtOC41MTYxIDU0LjQyMjg0IC04LjUxMzIyIDU0LjQyMzg2IC04LjUwODMzIDU0LjQyMDE0IC04LjUxMjE0IDU0LjQxODE1IC04LjUxODA5IDU0LjQxNzM3IC04LjUxNDAzIDU0LjQxNjA4IC04LjUxODg2IDU0LjQxNDI1IC04LjUyMDEzIDU0LjQxNDk0IC04LjUyMjc2IDU0LjQxMjM4IC04LjUyNTQ4IDU0LjQxMDA5IC04LjUyNzE1IDU0LjQwNzIyIC04LjUzMDYgNTQuNDA2NjggLTguNTM1MjIgNTQuNDA0MTMgLTguNTQyODQgNTQuNDAyNjEgLTguNTQ5OTcgNTQuNDAzNTggLTguNTUzOTMgNTQuNDA0IC04LjU1Nzc4IDU0LjQwMzQ5IC04LjU2MDA1IDU0LjQwMjM4IC04LjU2MjA2IDU0LjQwMDkxIC04LjU2MzU1IDU0LjM5OTUxIC04LjU2MjIxIDU0LjM5NzQ2IC04LjU1OTY3IDU0LjM5NjUzIC04LjU1NjUyIDU0LjM5NTA3IC04LjU1MTU0IDU0LjM5MzggLTguNTUyOTEgNTQuMzkzNjEgLTguNTQ5ODggNTQuMzkyMDEgLTguNTQzOTQgNTQuMzkzOCAtOC41NDE3MiA1NC4zOTQ0MSAtOC41NDM4NyA1NC4zOTQwMSAtOC41NDYwMSA1NC4zOTQ3MSAtOC41NDgxNyA1NC4zOTU5OCAtOC41NDg1NSA1NC4zOTcwMSAtOC41NDY2NyA1NC4zOTcgLTguNTQzNjcgNTQuMzk4NCAtOC41NDE3MSA1NC40MDE0OSAtOC41MzEwNCA1NC40MDQ0NyAtOC41MzA2IDU0LjQwMzcyIC04LjUyNzY0IDU0LjQwNDQ3IC04LjUyNTcyIDU0LjQwNTkgLTguNTI0NyA1NC40MDY3NyAtOC41MjA3NSA1NC40MTA2IC04LjUxODI1IDU0LjQxMTcxIC04LjUxNDk2IDU0LjQxMjcgLTguNTEwNCA1NC40MTQxNSAtOC41MDU5MyA1NC40MTQ2NCAtOC41MDA2NSA1NC40MTQwNSAtOC40OTgxOSA1NC40MTUzNiAtOC40OTc3NyA1NC40MTYwMSAtOC40OTYgNTQuNDE2OTMgLTguNDkyODQgNTQuNDE4MTEgLTguNDg5ODkgNTQuNDIwMjQgLTguNDg2NDcgNTQuNDIzOTkgLTguNDg2NzcgNTQuNDI2ODcgLTguNDg2MTYgNTQuNDI5MDggLTguNDg0NDcgNTQuNDMwNTcgLTguNDgwOTUgNTQuNDMxMTUgLTguNDc1NjggNTQuNDM0NTEgLTguNDczMDkgNTQuNDM3ODIgLTguNDY5ODcgNTQuNDM3NiAtOC40NjU3MiA1NC40Mzk0NiAtOC40NjY5OCA1NC40NDIwMiAtOC40NjcyNiA1NC40NDQ2NSAtOC40Njc4NSA1NC40NDY3OCAtOC40NjkzIDU0LjQ0ODg0IC04LjQ3MDI5IDU0LjQ0OTQ0IC04LjQ3NDE3IDU0LjQ1MTUyIC04LjQ3NDgzIDU0LjQ1MDYgLTguNDgxMyA1NC40NTIxNiAtOC40ODQ1NyA1NC40NTI0OCAtOC40ODIyNSA1NC40NTMzNiAtOC40Nzk3MSA1NC40NTM3OSAtOC40NzUzNyA1NC40NTg0MSAtOC40NzUwNCA1NC40NjE2IC04LjQ2NTggNTQuNDY0MjQgLTguNDY3ODEgNTQuNDY1ODMgLTguNDY3MjkgNTQuNDY4NDkgLTguNDcwNzQgNTQuNDcwMjUgLTguNDY4ODIgNTQuNDcwMjkgLTguNDY0ODggNTQuNDcxNjUgLTguNDYwMzcgNTQuNDcyNiAtOC40NTUwMSA1NC40NzA0MiAtOC40NDgwMyA1NC40NjQ3OCAtOC40NDg1MSA1NC40NjQyOCAtOC40NDYyMSA1NC40NjMwNSAtOC40NDY2NCA1NC40NjI0NiAtOC40NTA2NCA1NC40NjAwMiAtOC40NTE1IDU0LjQ1NzY1IC04LjQ0OTUyIDU0LjQ1NTEgLTguNDQ1NzkgNTQuNDUzNTQgLTguNDM3NjUgNTQuNDU0NTEgLTguNDIzOTMgNTQuNDU1MTkgLTguNDE2NjQgNTQuNDU3MzIgLTguNDEzMDUgNTQuNDU5MjQgLTguNDEwMDQgNTQuNDYxNSAtOC40MDYwMSA1NC40NjI2MiAtOC40MDA2OCA1NC40NjM0MyAtOC4zOTYwOCA1NC40NjQxOCAtOC4zOTI3MyA1NC40NjQ2MSAtOC4zODMzNCA1NC40NjcxMyAtOC4zNzc3NiA1NC40NjcxMyAtOC4zNjEzNyA1NC40NzA2NyAtOC4zNTM5IDU0LjQ3MDkgLTguMzQ5OTkgNTQuNDcwNTYgLTguMzQ2MTYgNTQuNDcwMyAtOC4zNDA5MSA1NC40NzE3OSAtOC4zMzcyMSA1NC40NzMxMyAtOC4zMzQ1OCA1NC40NzI0OSAtOC4zMjk3NiA1NC40NzI3NyAtOC4zMjQ2NyA1NC40NzU1NyAtOC4zMjM5NSA1NC40NzY1NCAtOC4zMTgxMiA1NC40Nzc5MSAtOC4zMTY2IDU0LjQ3ODYzIC04LjMxMzU2IDU0LjQ3ODE1IC04LjMwODkgNTQuNDc4NDQgLTguMzAzNzYgNTQuNDc4MDcgLTguMzAwMzggNTQuNDc3NjYgLTguMjk3NzkgNTQuNDc3MDUgLTguMjk0MDYgNTQuNDc2OTcgLTguMjg3MTEgNTQuNDc3OTcgLTguMjg0MTEgNTQuNDgxMDggLTguMjgyNTcgNTQuNDgxOTEgLTguMjgxMTQgNTQuNDgzMTQgLTguMjgwMzkgNTQuNDg0OTkgLTguMjgxOTUgNTQuNDg1NDkgLTguMjg0MzkgNTQuNDg3MTYgLTguMjg0MTkgNTQuNDg3OTYgLTguMjgyOSA1NC40OTEyNiAtOC4yNzMwMyA1NC40OTAyMyAtOC4yNjg0NSA1NC40OTE5OSAtOC4yNjg0MSA1NC40OTM3MiAtOC4yNjg2OSA1NC40OTY1NyAtOC4yNjg1MiA1NC40OTk1MyAtOC4yNjgyMiA1NC41MDE4MyAtOC4yNjY3IDU0LjUwNDc3IC04LjI2NDgxIDU0LjUwNjIgLTguMjYwNjMgNTQuNTAyNzIgLTguMjU4NzUgNTQuNTAyNDcgLTguMjU2NTEgNTQuNTAxNDkgLTguMjU0MzEgNTQuNDk5NTMgLTguMjUzMDQgNTQuNDk4NyAtOC4yNDc4OCA1NC41MDAxOCAtOC4yNDQxNyA1NC41MDE3OCAtOC4yMzk5OSA1NC41MDIzIC04LjIzNTY2IDU0LjUwMTk2IC04LjIyODA1IDU0LjUwMTU1IC04LjIyMzU3IDU0LjUgLTguMjE4MTIgNTQuNTAwMDggLTguMjEzMjUgNTQuNTAwNTEgLTguMjA2NyA1NC41MDE2MiAtOC4xOTkzNCA1NC41MDE2MiAtOC4xOTkzNCA1NC41MDI2MiAtOC4yMDMyNCA1NC41MDIxNSAtOC4yMDY5NiA1NC41MDM4OCAtOC4yMDcyMiA1NC41MDU5OCAtOC4yMDc1NCA1NC41MDcxMSAtOC4yMTIxMyA1NC41MDU2MiAtOC4yMTQyNyA1NC41MDYxIC04LjIxNzMzIDU0LjUwNTU2IC04LjIyMDczIDU0LjUwNjY0IC04LjIyNjI2IDU0LjUwNjA3IC04LjIzMiA1NC41MDYyNSAtOC4yMzcwNyA1NC41MDc2MiAtOC4yNDA3NSA1NC41MDcwMiAtOC4yNDUwOCA1NC41MDkxNCAtOC4yNDg1NiA1NC41MTA1MiAtOC4yNTE5MyA1NC41MTIyNCAtOC4yNTkyOSA1NC41MTUxMiAtOC4yNjAyMSA1NC41MTc3OCAtOC4yNjU1MiA1NC41MjEzNCAtOC4yNjU5MSA1NC41MjM2OSAtOC4yNjg0OSA1NC41MjU5IC04LjI2NjYzIDU0LjUyNjUyIC04LjI2MTY4IDU0LjUyODA5IC04LjI1ODE0IDU0LjUyOTI4IC04LjI1MzEyIDU0LjUzMTkxIC04LjI1MTk1IDU0LjUzMzI4IC04LjI1MDI3IDU0LjUzNDE1IC04LjI0NDI2IDU0LjUzNjEgLTguMjQyMTggNTQuNTM3MjEgLTguMjM4NDIgNTQuNTM5NzkgLTguMjMzMTQgNTQuNTQzNTMgLTguMjI0NzMgNTQuNTQ2MDkgLTguMjE4MDIgNTQuNTQ4MjEgLTguMjEwOTUgNTQuNTQ5OTkgLTguMjA1MDYgNTQuNTUzMTIgLTguMjA0NzYgNTQuNTU2NTkgLTguMjA1MTQgNTQuNTU5NjkgLTguMjA3MzYgNTQuNTYyOTggLTguMjA5MjkgNTQuNTY1ODYgLTguMjEyMjYgNTQuNTY3NzMgLTguMjE1MDggNTQuNTcxMzcgLTguMjE1NzkgNTQuNTczNTEgLTguMjEzMjkgNTQuNTc1NzMgLTguMjExMjcgNTQuNTc1NDEgLTguMjA4NjkgNTQuNTczODcgLTguMjA2NTUgNTQuNTcyNDEgLTguMjAyODYgNTQuNTc0OSAtOC4xOTc1NSA1NC41Nzc1MSAtOC4xOTQ5NyA1NC41NzcxMyAtOC4xODk4NSA1NC41Nzg2OSAtOC4xODk3OCA1NC41ODA1NSAtOC4xOTExNyA1NC41ODI0MiAtOC4xOTA1MSA1NC41ODQyNiAtOC4xODcgNTQuNTg2MjYgLTguMTc4NDcgNTQuNTg4MzMgLTguMTcwNzQgNTQuNTkxNzIgLTguMTY4ODkgNTQuNTkzNDYgLTguMTY4ODUgNTQuNTk1MDEgLTguMTY3NSA1NC41OTUzNCAtOC4xNjI4MSA1NC41OTY3NyAtOC4xNjAxOSA1NC41OTkzNiAtOC4xNTk2NCA1NC42MDIzMSAtOC4xNTk0NyA1NC42MDU5MyAtOC4xNjA1IDU0LjYxMDEzIC04LjE2MDgzIDU0LjYxNDAzIC04LjE2MTc1IDU0LjYxNzA3IC04LjE2MzMxIDU0LjYyMDg5IC04LjE2NDA3IDU0LjYyMzU2IC04LjE2MjExIDU0LjYyNDc1IC04LjE1Njc2IDU0LjYyNjQyIC04LjE1MzA2IDU0LjYyNzE3IC04LjE0OTIyIDU0LjYyNTU3IC04LjE0ODIgNTQuNjAzMzQgLTguMTQ2NjcgNTQuNjAzMjcgLTguMTQyNzEgNTQuNjA0NzggLTguMTM4MzUgNTQuNjA0MzggLTguMTMwMjQgNTQuNjA1NjYgLTguMTI4NTMgNTQuNjA3MjQgLTguMTI4MTQgNTQuNjA5MjEgLTguMTI3MzUgNTQuNjExNDggLTguMTI3ODUgNTQuNjEyNTYgLTguMTI0NTQgNTQuNjE0MTcgLTguMTI3MTYgNTQuNjE1ODYgLTguMTI5OTUgNTQuNjE5NSAtOC4xMjcxOSA1NC42MTkzOCAtOC4xMjI0MiA1NC42MTcxNSAtOC4xMjEyOSA1NC42MTY4NSAtOC4xMTgwOCA1NC42MTY2OCAtOC4xMTQyNyA1NC42MTY1IC04LjExMDYxIDU0LjYxNTIgLTguMTA5MTQgNTQuNjEyODkgLTguMTA5MjcgNTQuNjEyNTggLTguMTA2NTIgNTQuNjEyOTEgLTguMTAzNzMgNTQuNjE1NDEgLTguMTA1MDcgNTQuNjE3MjMgLTguMTA1MzQgNTQuNjE3MzUgLTguMTAxMjYgNTQuNjIwNiAtOC4xMDIzOCA1NC42MTk5NiAtOC4xMDU3NSA1NC42MTk4OSAtOC4xMDkwNiA1NC42MTg0NCAtOC4xMTU2NSA1NC42MTg5NiAtOC4xMTgxIDU0LjYyMTEzIC04LjExNTI2IDU0LjYyMjA0IC04LjExMTc2IDU0LjYyMzY1IC04LjExMDc1IDU0LjYyNTc1IC04LjExMTA4IDU0LjYyMzUyIC04LjExMzI2IDU0LjYyMjA5IC04LjExNzk0IDU0LjYyMDk1IC04LjEyMzkzIDU0LjYyMTggLTguMTI1MzIgNTQuNjIzNTkgLTguMTI2MDggNTQuNjI0ODkgLTguMTI0MDYgNTQuNjI1OTQgLTguMTE5NzkgNTQuNjI3MTEgLTguMTE0NzYgNTQuNjI3NTkgLTguMTIxNDcgNTQuNjI3NTEgLTguMTI0OTQgNTQuNjI4OCAtOC4xMjMwNyA1NC42Mjk3OSAtOC4xMTk5MiA1NC42MzA5MiAtOC4xMTU2NSA1NC42MzIwOCAtOC4xMTEwOSA1NC42MzQyNCAtOC4xMTAxNSA1NC42MzMzMyAtOC4xMTUzOSA1NC42MzI4IC04LjEyMDM3IDU0LjYzMjE5IC04LjEyNDcxIDU0LjYzMTI1IC04LjEyODY4IDU0LjYzMjAyIC04LjEzMTc5IDU0LjYzMTc2IC04LjEzNTA3IDU0LjYzMjU1IC04LjEzNzU3IDU0LjYzMzkyIC04LjEzNDE1IDU0LjYzNDgzIC04LjEyODkxIDU0LjYzNTc5IC04LjEyNDYzIDU0LjYzNzM1IC04LjExOTE4IDU0LjYzOTQ3IC04LjExNzI4IDU0LjY0MTE3IC04LjExNjI5IDU0LjY0MjM2IC04LjExNDU3IDU0LjY0MzUgLTguMTEyMDUgNTQuNjQ0IC04LjExNDgxIDU0LjY0NDUgLTguMTE3NTkgNTQuNjQ2MDcgLTguMTE3NTEgNTQuNjQ3MjMgLTguMTE2MjYgNTQuNjQ4NjEgLTguMTEyNjggNTQuNjQ5NTcgLTguMTEwMTQgNTQuNjUxMzIgLTguMTEwMDggNTQuNjUyNzYgLTguMTA4NzMgNTQuNjUyMzggLTguMTEyNjIgNTQuNjUxMjggLTguMTE2MDkgNTQuNjQ5ODggLTguMTE4MjQgNTQuNjQ4NjIgLTguMTIxMzggNTQuNjQ4ODkgLTguMTIzMTYgNTQuNjQ5OTMgLTguMTIyNTMgNTQuNjUxNzIgLTguMTE5NzkgNTQuNjUyNjUgLTguMTIxMzYgNTQuNjUzMjYgLTguMTIzODIgNTQuNjUwODEgLTguMTI1MTkgNTQuNjUwNzUgLTguMTI4MDIgNTQuNjQ5MTMgLTguMTI5MiA1NC42NDY5OSAtOC4xMjgwOCA1NC42NDUyOCAtOC4xMjc1IDU0LjY0Mzg5IC04LjEyOTM0IDU0LjY0MjcyIC04LjEzMjQ5IDU0LjY0MTA1IC04LjEzNjM0IDU0LjYzOTU5IC04LjE0MTUgNTQuNjM4MDIgLTguMTQzNDYgNTQuNjM1ODMgLTguMTQ2NjEgNTQuNjM0NjUgLTguMTUwMDcgNTQuNjM0NjcgLTguMTUzMDcgNTQuNjMwMjcgLTguMTU2NjYgNTQuNjMyNSAtOC4xNTc5NiA1NC42MzUyIC04LjE1ODg1IDU0LjYzODI2IC04LjE1ODIxIDU0LjY0MDQyIC04LjE1OTE4IDU0LjY0MzQ5IC04LjE2MDEzIDU0LjY0NDQgLTguMTU2NzkgNTQuNjQ1MzkgLTguMTUzNDYgNTQuNjQ0OTkgLTguMTUwNyA1NC42NDc0NyAtOC4xNDg4NyA1NC42NDgyNyAtOC4xNTI5NiA1NC42NTAyIC04LjE1Mjc4IDU0LjY0OTU4IC04LjE1NTg0IDU0LjY1MDA4IC04LjE1ODYxIDU0LjY0Nzc5IC04LjE2MjIyIDU0LjY0NTc3IC04LjE2Mzk1IDU0LjY0NjIgLTguMTY3OTggNTQuNjQ0ODIgLTguMTY4MDkgNTQuNjQyNjIgLTguMTY5NjMgNTQuNjQxMSAtOC4xNzI0MSA1NC42NDA1NSAtOC4xNjkwMSA1NC42NDAyOCAtOC4xNjcwNiA1NC42MzkyNSAtOC4xNjU3OSA1NC42Mzc4IC04LjE2NTI1IDU0LjYzNjk2IC04LjE2NzM1IDU0LjYzNzg2IC04LjE2OTUzIDU0LjYzOTM2IC04LjE3NDAzIDU0LjY0MTIyIC04LjE3OTA3IDU0LjYzODk0IC04LjE4MjE5IDU0LjYzNjMyIC04LjE4NDk1IDU0LjYzNTU2IC04LjE4ODk1IDU0LjYzMzg5IC04LjE5MjY0IDU0LjYzMzEyIC04LjE5ODY5IDU0LjYzMTA5IC04LjIwMDU4IDU0LjYyOTkyIC04LjIwMzczIDU0LjYyOTkgLTguMjA3NTIgNTQuNjI4NjYgLTguMjEwMzMgNTQuNjI3MDggLTguMjE3NTEgNTQuNjI0OTUgLTguMjIzMTkgNTQuNjIzIC04LjIyNTI2IDU0LjYyMDcyIC04LjIyNjgxIDU0LjYxOTY0IC04LjIyOTk1IDU0LjYxOTc2IC04LjIzNDU1IDU0LjYxODkxIC04LjIzODY5IDU0LjYxNzc0IC04LjI0MzI1IDU0LjYxNTY0IC04LjI0NjU1IDU0LjYxMzQ3IC04LjI0OTU0IDU0LjYxMzU0IC04LjI1MzE4IDU0LjYxMjQyIC04LjI1NTM3IDU0LjYxMDQ5IC04LjI1ODg2IDU0LjYwOTc1IC04LjI2MjU0IDU0LjYwNzk1IC04LjI2NTI3IDU0LjYwODE3IC04LjI2Nzk5IDU0LjYwNzEgLTguMjcwODIgNTQuNjA2MTMgLTguMjc1MjUgNTQuNjA2NyAtOC4yODAwOSA1NC42MDYgLTguMjg0NzEgNTQuNjA0MzYgLTguMjg3OTMgNTQuNjAyNzQgLTguMjkxIDU0LjYwMzc4IC04LjI5MzUzIDU0LjYwNjU3IC04LjI5MTI4IDU0LjYwODA3IC04LjI5MDU3IDU0LjYxMDExIC04LjI5MjE2IDU0LjYxMTQ2IC04LjI5NDI2IDU0LjYxMzQ2IC04LjI5MTExIDU0LjYxNTM1IC04LjI4ODQgNTQuNjE4NDggLTguMjg0NzggNTQuNjIxMTMgLTguMjgzNDYgNTQuNjIzNjcgLTguMjgzODUgNTQuNjI1MzEgLTguMjg0MTIgNTQuNjI2NDUgLTguMjgxNzYgNTQuNjI2MTggLTguMjc4MDkgNTQuNjI2MTggLTguMjc4MDkgNTQuNjMwNDIgLTguMjc3OTYgNTQuNjMyNTggLTguMjc1MTQgNTQuNjM0MzQgLTguMjcxMyA1NC42MzYxMyAtOC4yNjcxNSA1NC42MzgxOCAtOC4yNjY1MiA1NC42NDAyNCAtOC4yNzA5NyA1NC42NDE3MiAtOC4yNzI0NiA1NC42NDM5NiAtOC4yNzE3MSA1NC42NDU3MSAtOC4yNzQ5OCA1NC42NDY2NSAtOC4yNzY1NiA1NC42NDc5OCAtOC4yNzU2NiA1NC42NDgyMSAtOC4yNzk4IDU0LjY0Njc3IC04LjI4MjkgNTQuNjQ1ODMgLTguMjg0OTcgNTQuNjQ0NTIgLTguMjg5MDQgNTQuNjQyNjEgLTguMjkyMDYgNTQuNjQwMzIgLTguMjk1MzMgNTQuNjM4MzUgLTguMjk3ODcgNTQuNjM4MzggLTguMzAyMyA1NC42MzY2OSAtOC4zMDQ4OSA1NC42MzYxOCAtOC4zMDkzOSA1NC42MzU5MyAtOC4zMTM5NCA1NC42MzQ2IC04LjMxNjU4IDU0LjYzMyAtOC4zMTkgNTQuNjMyMjkgLTguMzIyMDYgNTQuNjMyNjEgLTguMzI2MzggNTQuNjMxNSAtOC4zMjgxMSA1NC42MzA3NiAtOC4zMzAwNSA1NC42MzA5IC04LjMzNDMzIDU0LjYzMDQyIC04LjMzNjQ3IDU0LjYyODMgLTguMzM4MzQgNTQuNjI1OTIgLTguMzM5NzIgNTQuNjIzMDcgLTguMzQxNjMgNTQuNjIwNSAtOC4zNDUwMSA1NC42MTkwNyAtOC4zNDYwNiA1NC42MTY4MSAtOC4zNDcxMiA1NC42MTQ5MiAtOC4zNDk4MiA1NC42MTM0NSAtOC4zNTMyMyA1NC42MTE2MSAtOC4zNTUxNCA1NC42MDkzNiAtOC4zNTkzNyA1NC42MDk1MSAtOC4zNjMzNSA1NC42MDgzIC04LjM2NTM3IDU0LjYwNjcyIC04LjM2NzQ5IDU0LjYwNjI0IC04LjM3MTIgNTQuNjAzNTQgLTguMzcxODggNTQuNjAxMDYgLTguMzczNyA1NC42MDA5IC04LjM3ODQxIDU0LjU5OTg3IC04LjM4MDYyIDU0LjU5NzczIC04LjM4MjgyIDU0LjU5NTIxIC04LjM4Njk4IDU0LjU5MzYzIC04LjM5MjI3IDU0LjU5MjY5IC04LjQwMTEyIDU0LjU5MDk2IC04LjQwNDMxIDU0LjU5MDc5IC04LjQxMjY2IDU0LjU4OTQxIC04LjQxNzY2IDU0LjU4ODY2IC04LjQyMzA4IDU0LjU4NzI4IC04LjQyMzE2IDU0LjU4NTUxIC04LjQyMzY3IDU0LjU4NDI4IC04LjQyNTg1IDU0LjU4MzQgLTguNDI4NTQgNTQuNTgzMzkgLTguNDMyMTggNTQuNTgyMiAtOC40MzM4OSA1NC41ODA0OSAtOC40MzQ3MSA1NC41Nzk0NyAtOC40MzMyOSA1NC41ODAxMiAtOC40Mjk3NyA1NC41Nzg2NSAtOC40Mjk4NCA1NC41Nzc0NyAtOC40MzEyMyA1NC41NzU2IC04LjQzMzYxIDU0LjU3NDEyIC04LjQzNzE2IDU0LjU3MjYyIC04LjQ0MTE5IDU0LjU3MDQgLTguNDQzMiA1NC41NyAtOC40NDcwOCA1NC41Njk0NyAtOC40NTE1OCA1NC41NzA1MiAtOC40NTYxNyA1NC41NzMwNSAtOC40NTE2OSA1NC41NzU0NiAtOC40NDk1NCA1NC41NzgyMyAtOC40NDc2MiA1NC41ODAzNSAtOC40NDU5MSA1NC41ODI1OCAtOC40NDA0MiA1NC41ODQzNCAtOC40MzgzMyA1NC41ODU5MyAtOC40Mzk1MyA1NC41ODc4NCAtOC40NDE1OSA1NC41ODkxMSAtOC40NDAwNCA1NC41ODk4IC04LjQzNzYzIDU0LjU5MDM5IC04LjQzMzQ2IDU0LjU5MTcyIC04LjQyNzY3IDU0LjU5MzExIC04LjQyMjIgNTQuNTk0OTMgLTguNDE3NiA1NC41OTQ1OSAtOC40MTM3NSA1NC41OTQzIC04LjQxMDU1IDU0LjU5NTc1IC04LjQwNzQ2IDU0LjU5NzAxIC04LjQwNDUxIDU0LjU5NzY2IC04LjM5OTIzIDU0LjU5OSAtOC4zOTQ4NiA1NC42MDExNSAtOC4zOTA3OCA1NC42MDM0NSAtOC4zODkwOSA1NC42MDYxNiAtOC4zODgxMSA1NC42MDcxNyAtOC4zODQ3OSA1NC42MDkyMyAtOC4zNzg4IDU0LjYxMTM0IC04LjM3Mzc2IDU0LjYxNDIyIC04LjM3MTM3IDU0LjYxNjMxIC04LjM3MzQ1IDU0LjYxOTIyIC04LjM3MDU5IDU0LjYyMTM5IC04LjM3Mjk5IDU0LjYyMzExIC04LjM3MTY4IDU0LjYyNDg2IC04LjM3MzIzIDU0LjYyNTg3IC04LjM3NTEyIDU0LjYyNjE2IC04LjM3ODE3IDU0LjYyNzI1IC04LjM4MDA4IDU0LjYyODgyIC04LjM3OTg2IDU0LjYyODYgLTguMzgyMjEgNTQuNjMwMTcgLTguMzgyMTQgNTQuNjMyOTIgLTguMzgwNTIgNTQuNjM1MjYgLTguMzc4MDQgNTQuNjM3MTEgLTguMzc3NzEgNTQuNjM3MjIgLTguMzgwODggNTQuNjM2IC04LjM4MzA3IDU0LjYzNzMxIC04LjM4NDA2IDU0LjYzNTkzIC04LjM4NjA2IDU0LjYzNDI0IC04LjM4NDk5IDU0LjYzMjMxIC04LjM4Njc0IDU0LjYzMjkxIC04LjM5MDk2IDU0LjYzMzMzIC04LjM5NTEzIDU0LjYzMjI2IC04LjM5OTU1IDU0LjYzMDg0IC04LjQwMjAxIDU0LjYyODEgLTguNDAzNDYgNTQuNjI2NjEgLTguNDA3MTggNTQuNjI2ODUgLTguNDA5NTkgNTQuNjI0MzcgLTguNDExMjUgNTQuNjIyNTMgLTguNDExMjggNTQuNjIwMjYgLTguNDEyOCA1NC42MTk4OCAtOC40MTYyMiA1NC42MTgzMiAtOC40MTgwMyA1NC42MTgyMyAtOC40MjEzMyA1NC42MjEyNCAtOC40MjMyNCA1NC42MjAzMiAtOC40MjY4OSA1NC42MTg0IC04LjQyODMyIDU0LjYxNjUxIC04LjQyOTQ0IDU0LjYxNjY5IC04LjQzMjc5IDU0LjYxOTc1IC04LjQzMjE4IDU0LjYyMTQ2IC04LjQzMTE4IDU0LjYyNDAzIC04LjQzMTEzIDU0LjYyNTUyIC04LjQyOSA1NC42MjY4OSAtOC40MjU5IDU0LjYyOTM3IC04LjQyNDA4IDU0LjYzMTk3IC04LjQyNTI5IDU0LjYzNDAxIC04LjQyNDgyIDU0LjYzNTk0IC04LjQyMzA4IDU0LjYzODY5IC04LjQxOTg3IDU0LjY0MTE1IC04LjQxODY4IDU0LjY0MzE1IC04LjQxNzI4IDU0LjY0NTE2IC04LjQxNTY5IDU0LjY0ODEyIC04LjQxMzQ4IDU0LjY1MTE2IC04LjQxMTc1IDU0LjY0OTM0IC04LjQxNjUyIDU0LjY1MTE5IC04LjQxNzkzIDU0LjY0ODggLTguNDIxNSA1NC42NDY2OCAtOC40MjMzOCA1NC42NDI1OCAtOC40MjYxOSA1NC42Mzk1IC04LjQyODcgNTQuNjM4MDYgLTguNDMxNDggNTQuNjM3NzMgLTguNDM1ODYgNTQuNjM2MjQgLTguNDM4IDU0LjYzMzc1IC04LjQzODIzIDU0LjYzMTY4IC04LjQzNzQxIDU0LjYyOTgzIC04LjQzNzU5IDU0LjYyOTcgLTguNDM0ODggNTQuNjMwMTkgLTguNDMyNzUgNTQuNjI4NDYgLTguNDMyNDcgNTQuNjI1OSAtOC40MzM5NSA1NC42MjMwNSAtOC40MzU3MSA1NC42MjA3NSAtOC40MzkxMyA1NC42MjEgLTguNDQ0NzEgNTQuNjIwMDQgLTguNDQ4ODIgNTQuNjE4OTcgLTguNDQ5OTIgNTQuNjE4NDkgLTguNDQ2OTkgNTQuNjE2MzYgLTguNDQ3MjggNTQuNjE1MDMgLTguNDUxNDkgNTQuNjEyNjcgLTguNDUyNjkgNTQuNjEwMzIgLTguNDUzNTggNTQuNjA4NTUgLTguNDU1NjYgNTQuNjA2NDIgLTguNDU3ODYgNTQuNjA3MTQgLTguNDYzMDMgNTQuNjA1MzMgLTguNDY3NjQgNTQuNjA0NDYgLTguNDcwMTcgNTQuNjA2NzggLTguNDczMDkgNTQuNjA2MzQgLTguNDc2MTggNTQuNjA3NyAtOC40NzgxMyA1NC42MDkwNyAtOC40NzY0NiA1NC42MTI2MiAtOC40NzcxOSA1NC42MTM5MyAtOC40NzUwNCA1NC42MTcyIC04LjQ3MzgyIDU0LjYxOTI2IC04LjQ3NDk1IDU0LjYxNzg3IC04LjQ3ODUyIDU0LjYxOTI0IC04LjQ4MDE2IDU0LjYyMDk3IC04LjQ4MDYgNTQuNjIzNyAtOC40Nzk0NyA1NC42MjUyNCAtOC40NzY1NCA1NC42MjY2OCAtOC40NzE4OCA1NC42MjgwNyAtOC40NjgzMSA1NC42MzAwOSAtOC40NzMzOCA1NC42MzI4NyAtOC40NzI4OCA1NC42MzQ0OCAtOC40NzIwMyA1NC42MzUzNyAtOC40NjkwMSA1NC42MzY2NSAtOC40NjkyMyA1NC42MzgwNiAtOC40NzAyNCA1NC42MzcyMyAtOC40NzM5IDU0LjYzNjI2IC04LjQ3MzEyIDU0LjYzNTc3IC04LjQ3NTQxIDU0LjYzNjA4IC04LjQ3OTcyIDU0LjYzNDk2IC04LjQ4MzM0IDU0LjYzMzQ1IC04LjQ4OTExIDU0LjYzMjIxIC04LjQ5NjgxIDU0LjYyODAxIC04LjUwMTIgNTQuNjI4NDQgLTguNTA2OTYgNTQuNjI3NjkgLTguNTA4ODkgNTQuNjI1NTMgLTguNTExMzggNTQuNjI0ODUgLTguNTE1MzkgNTQuNjIzODUgLTguNTIwMjkgNTQuNjIwOTYgLTguNTI3NzMgNTQuNjIwNjIgLTguNTMzODMgNTQuNjE5MjQgLTguNTM1NTIgNTQuNjE5NTMgLTguNTM4NTYgNTQuNjIwMTkgLTguNTQxNjcgNTQuNjIxODggLTguNTQyNTggNTQuNjIxNzUgLTguNTQ5OTkgNTQuNjE4OTIgLTguNTUzMTYgNTQuNjE2NiAtOC41NTUxNiA1NC42MTYxMyAtOC41NjAzMSA1NC42MTQ5IC04LjU2MjYzIDU0LjYxNDQ3IC04LjU2NTQgNTQuNjE2MzggLTguNTY5MDQgNTQuNjE0NDggLTguNTcxNzMgNTQuNjExOTUgLTguNTcyNTkgNTQuNjExMjYgLTguNTc2OSA1NC42MDkwNCAtOC41Nzg5MSA1NC42MDc5NSAtOC41ODAzIDU0LjYxMDMzIC04LjU4NTQ0IDU0LjYxMTY0IC04LjU4MzI4IDU0LjYxMzQ4IC04LjU3OTk1IDU0LjYxNzUyIC04LjU3OTgyIDU0LjYxODExIC04LjU3NzU0IDU0LjYxOTc4IC04LjU3ODkzIDU0LjYxODcxIC04LjU4MTc2IDU0LjYxODE3IC04LjU4NDgzIDU0LjYxOTA2IC04LjU4ODYxIDU0LjYxOTcxIC04LjU5MzMxIDU0LjYxODY5IC04LjU5ODUxIDU0LjYxODczIC04LjYwMjggNTQuNjE5NDggLTguNjA1NzYgNTQuNjIwNDQgLTguNjA4NDUgNTQuNjIxNzcgLTguNjA5MTUgNTQuNjIxOTQgLTguNjA0NDMgNTQuNjIzNDkgLTguNjAyOTUgNTQuNjIzOTggLTguNjAwODIgNTQuNjI0NjggLTguNTk4MjQgNTQuNjI1OCAtOC41OTYyMSA1NC42MjgyNCAtOC41OTUzNCA1NC42MjU5OSAtOC42MDExNSA1NC42MjQ3NSAtOC42MDY3OCA1NC42MjQxNiAtOC42MTI1NSA1NC42MjUzNyAtOC42MTcxOCA1NC42Mjc0NiAtOC42MTkxIDU0LjYyOTQ1IC04LjYxODE2IDU0LjYzMjExIC04LjYyMTQ2IDU0LjYzMDExIC04LjYyNDQ0IDU0LjYzMTg2IC04LjYyNiA1NC42MzQ4NiAtOC42MjY1IDU0LjYzNzI2IC04LjYyNjI1IDU0LjYzNzI0IC04LjYyMzI1IDU0LjYzODI5IC04LjYyMjY0IDU0LjY0MDA0IC04LjYyNDE5IDU0LjY0MjU5IC04LjYyNjIgNTQuNjQ2MTcgLTguNjI5NDcgNTQuNjQ3NDMgLTguNjMzMTYgNTQuNjQ5NCAtOC42MzU3IDU0LjY0NTczIC04LjYzNTc0IDU0LjY0MjkxIC04LjYzNTI3IDU0LjY0MTgzIC04LjYzMzE5IDU0LjY0MTA1IC04LjYzMDY5IDU0LjYzNzk1IC04LjYzMDMzIDU0LjYzNDc2IC04LjYyOTggNTQuNjMxNDMgLTguNjMwMzYgNTQuNjI5IC04LjYyOTMyIDU0LjYyNjg5IC04LjYyNzcxIDU0LjYyNjM4IC04LjYyNTQxIDU0LjYyNTU0IC04LjYyNDAxIDU0LjYyNDEgLTguNjI1MDMgNTQuNjIzMTUgLTguNjI3MjUgNTQuNjIyNDYgLTguNjMxNTcgNTQuNjIxNjMgLTguNjM0NzUgNTQuNjIxMTMgLTguNjM4NzggNTQuNjIxODEgLTguNjQxNDIgNTQuNjIyNzYgLTguNjQ0MTEgNTQuNjIzNzQgLTguNjQ3OTEgNTQuNjIzOSAtOC42NTE1OCA1NC42MjMwMSAtOC42NTQ0NCA1NC42MjEzMyAtOC42NTY1MiA1NC42MjIxMSAtOC42NTg4NiA1NC42MjI1NSAtOC42NjEgNTQuNjIyMDQgLTguNjY1MTkgNTQuNjIxMTMgLTguNjczMjYgNTQuNjIxMjcgLTguNjc1NjYgNTQuNjIyNzQgLTguNjc3MTYgNTQuNjIzMzMgLTguNjc0ODggNTQuNjI0MDcgLTguNjczMTIgNTQuNjI1MzMgLTguNjczNjQgNTQuNjI2NDEgLTguNjc3MyA1NC42Mjg4MyAtOC42ODAwOCA1NC42MzE2OSAtOC42ODE1IDU0LjYzMjk1IC04LjY3ODU2IDU0LjYzMzg0IC04LjY3NTg1IDU0LjYzNTIyIC04LjY3NDE5IDU0LjYzNzAxIC04LjY3NjcgNTQuNjM5MzQgLTguNjgwODggNTQuNjQyNTQgLTguNjg0NDMgNTQuNjQyNTEgLTguNjg5OTYgNTQuNjQ1NTYgLTguNjkyODMgNTQuNjQzNTEgLTguNjk5NzggNTQuNjQ2NjcgLTguNzA1NjkgNTQuNjQ3MTYgLTguNzExNjMgNTQuNjQ3NTcgLTguNzE1NjUgNTQuNjQ5NyAtOC43MTg3IDU0LjY1MTM3IC04LjcxODUxIDU0LjY1MTgyIC04LjcyMDE2IDU0LjY1MTUyIC04LjcyNTQ5IDU0LjY1MjQyIC04LjcyOTEzIDU0LjY1NDMyIC04LjczMjc3IDU0LjY1MjggLTguNzM2OTUgNTQuNjU0NzggLTguNzM5MTggNTQuNjU2MTQgLTguNzQxMyA1NC42NTY4NiAtOC43NDgwOCA1NC42NTc4OCAtOC43NTQ0MiA1NC42NTgxMyAtOC43NjExMyA1NC42NTk0OCAtOC43NjY0MSA1NC42NjQ1NiAtOC43NjI4NCA1NC42NjYzOSAtOC43NjI4MiA1NC42NjY3MyAtOC43NjgxMSA1NC42NjUxMiAtOC43NzA4NSA1NC42NjMzOSAtOC43NzA0IDU0LjY2MTkzIC04Ljc3MzQ3IDU0LjY2MzU1IC04Ljc3NTUgNTQuNjY2ODUgLTguNzc3MzIgNTQuNjY0MDEgLTguNzc5MDUgNTQuNjYyNjEgLTguNzgwNzIgNTQuNjYxNjIgLTguNzgzNzIgNTQuNjY1NDUgLTguNzg0MjIgNTQuNjY3NTQgLTguNzg2MzEgNTQuNjcwNjUgLTguNzg0NzggNTQuNjcxODQgLTguNzg2NCA1NC42NzI1MiAtOC43ODQzIDU0LjY3MzY1IC04Ljc4MjI3IDU0LjY3NzIxIC04Ljc4MjQxIDU0LjY3NjgyIC04Ljc3ODIxIDU0LjY3ODEzIC04Ljc3NzY0IDU0LjY3OTk4IC04Ljc3NzYzIDU0LjY4MjAyIC04Ljc3NzE5IDU0LjY4Mzc4IC04Ljc3ODQ0IDU0LjY4NTc0IC04Ljc3OTU2IDU0LjY4ODA5IC04Ljc3ODY5IDU0LjY4OTY1IC04Ljc3NzA2IDU0LjY5MDc1IC04Ljc3MzkyIDU0LjY5MjU3IC04Ljc3NDIyIDU0LjY5MjM2IC04Ljc3NzgzIDU0LjY5MTMxIC04Ljc4MDIgNTQuNjkwODEgLTguNzgyMzMgNTQuNjkwOTMgLTguNzg1MjEgNTQuNjkxNzEgLTguNzg3NzEgNTQuNjkzMTcgLTguNzg5NTUgNTQuNjk0NDMgLTguNzkxNSA1NC42OTYwOSAtOC43OTE0NiA1NC42OTcwNiAtOC43OTcwMiA1NC42OTkyMyAtOC43OTU5NiA1NC43MDExNSAtOC43OTc3MSA1NC43MDIyNyAtOC43OTU2OCA1NC43MDM3NSAtOC43OTQwMyA1NC43MDU3NiAtOC43OTU4IDU0LjcwNDU3IC04Ljc5MDg1IDU0LjcwNTU4IC04Ljc4OTQzIDU0LjcwNzA5IC04Ljc4ODU4IDU0LjcwODY0IC04Ljc4NzI1IDU0LjcwOTE2IC04Ljc4NDQ4IDU0LjcwODQ5IC04Ljc4MTY4IDU0LjcwNjkgLTguNzgwNjEgNTQuNzA1MjUgLTguNzgyMjMgNTQuNzA0MTYgLTguNzgxOSA1NC43MDU3MSAtOC43NzU4MSA1NC43MDM5OCAtOC43NzIyIDU0LjcwNTg0IC04Ljc3MDEzIDU0LjcwNjY4IC04Ljc2Njc5IDU0LjcwNzM2IC04Ljc2Mjc4IDU0LjcwNzc5IC04Ljc1ODQxIDU0LjcwODA3IC04Ljc1NTI5IDU0LjcwOTA3IC04Ljc1Mzg3IDU0LjcxMTEyIC04Ljc1NDg1IDU0LjcxMTQ3IC04Ljc1MTkgNTQuNzExMzEgLTguNzQ4MjQgNTQuNzEwMjEgLTguNzQ2NjMgNTQuNzEgLTguNzQyMzEgNTQuNzA5NzcgLTguNzM4MTUgNTQuNzEwMDQgLTguNzMzNDQgNTQuNzEyOTIgLTguNzMxMjIgNTQuNzEyOTYgLTguNzI3MjcgNTQuNzEzMzMgLTguNzIzODMgNTQuNzE0NzQgLTguNzI2NjEgNTQuNzE2MDEgLTguNzMwMTYgNTQuNzE0MDUgLTguNzMyMzYgNTQuNzEzNyAtOC43MzUzMSA1NC43MTQzNiAtOC43Mzk3MSA1NC43MTUzNiAtOC43NDE2MyA1NC43MTcxMSAtOC43Mzk4NSA1NC43MTg3IC04Ljc0MTA4IDU0LjcyMDI0IC04Ljc0MTQ5IDU0LjcyMDggLTguNzM3OTQgNTQuNzIxNjEgLTguNzM2NjQgNTQuNzIzOTEgLTguNzM2NzMgNTQuNzIzOTEgLTguNzM2NzMgNTQuNzIyOCAtOC43NDAwMiA1NC43MjQ4OSAtOC43NDE5NiA1NC43MjczMSAtOC43Mzk4MyA1NC43MjkgLTguNzQwNzUgNTQuNzMwMzIgLTguNzQwMTggNTQuNzMxOTkgLTguNzM4MjUgNTQuNzMzMDQgLTguNzM0MjkgNTQuNzM0MTMgLTguNzMyOSA1NC43MzY2MiAtOC43MzExIDU0LjczNzk3IC04LjczMzIyIDU0LjczNzc3IC04LjczODQzIDU0LjczOTA1IC04LjczODQ4IDU0Ljc0MDQzIC04LjczNjk3IDU0Ljc0MTA5IC04LjczMzI4IDU0LjczOTM2IC04LjczMzE0IDU0LjczOTI2IC04LjcyOTk1IDU0LjczOTE4IC04LjcyNjYxIDU0Ljc0MDY5IC04LjcyNDE3IDU0Ljc0MjE2IC04LjcyMjUxIDU0Ljc0MzU3IC04LjcyMDE5IDU0Ljc0NDI5IC04LjcxNzMxIDU0Ljc0NDM4IC04LjcxMjQxIDU0Ljc0NTY0IC04LjcwODAyIDU0Ljc0NzE4IC04LjcwNTExIDU0Ljc0NzI4IC04LjcwMTY0IDU0Ljc0NTk0IC04LjY5OTM0IDU0Ljc0ODU4IC04LjY5NjYxIDU0Ljc1MDIzIC04LjY5ODE2IDU0Ljc1Mjk4IC04LjY5NDk3IDU0Ljc1NDM1IC04LjY5Njk1IDU0Ljc1NTA4IC04LjY5MzU4IDU0Ljc1NjMgLTguNjg5OTcgNTQuNzU4MzggLTguNjg4ODkgNTQuNzU4NDUgLTguNjg0NDYgNTQuNzU4OTIgLTguNjgwODggNTQuNzYwNjcgLTguNjgwODYgNTQuNzYyNzIgLTguNjgxODQgNTQuNzYzNTQgLTguNjc4NjUgNTQuNzYyMiAtOC42NzgxIDU0Ljc2MTU4IC04LjY3NDM1IDU0Ljc2MTYgLTguNjcwODYgNTQuNzYyMTggLTguNjYzNjUgNTQuNzY0MTYgLTguNjYxMTMgNTQuNzY3NzYgLTguNjYzOTYgNTQuNzY3MTggLTguNjU5NzQgNTQuNzY5MjggLTguNjU5NzcgNTQuNzcxMjIgLTguNjU5NjIgNTQuNzcwMyAtOC42NTQ3IDU0Ljc3MDAyIC04LjY0OTg4IDU0Ljc3MDg4IC04LjY0NTkxIDU0Ljc3MjU0IC04LjY0MjUzIDU0Ljc3NDE0IC04LjY0MDI1IDU0Ljc3NDg3IC04LjYzNTMgNTQuNzczMjUgLTguNjMxNTQgNTQuNzcyOCAtOC42Mjc5NyA1NC43NzQwOSAtOC42MjQ2OSA1NC43NzUyOCAtOC42MjE1NiA1NC43NzUyIC04LjYxNjMgNTQuNzc2MzIgLTguNjEyNTIgNTQuNzc3MyAtOC42MDk4MyA1NC43NzczOSAtOC42MDQ3NiA1NC43NzY5MyAtOC42MDAwOCA1NC43Nzc4OCAtOC41OTI3NyA1NC43Nzg4NyAtOC41ODY0MyA1NC43Nzc2NSAtOC41ODM2OSA1NC43NzY4OCAtOC41NzkyOCA1NC43NzY1NSAtOC41NzM1MSA1NC43NzY3MSAtOC41Njg5NCA1NC43NzQzOCAtOC41NjQ3MyA1NC43NzU5MiAtOC41NjAyMiA1NC43NzM5NCAtOC41NTYxIDU0Ljc3NDU2IC04LjU0OTY5IDU0Ljc3NDI0IC04LjU0NzI2IDU0Ljc3MjAzIC04LjU0MjI5IDU0Ljc2OTE5IC04LjU0MDU2IDU0Ljc2ODE0IC04LjUzNjQxIDU0Ljc2NjQ3IC04LjUyOTk1IDU0Ljc2Njg4IC04LjUyMjQgNTQuNzY5MTIgLTguNTE4NDggNTQuNzcwMzQgLTguNTEyOTYgNTQuNzcxMzYgLTguNTA3NTggNTQuNzY4ODEgLTguNTA1NTggNTQuNzY1NzUgLTguNTAxMTIgNTQuNzY1MyAtOC41MDQyMSA1NC43NjM0OCAtOC41MDU2NyA1NC43NjQwNiAtOC41MTAyIDU0Ljc2MzM0IC04LjUxNDk5IDU0Ljc2MjA5IC04LjUxMDk5IDU0Ljc2MTg0IC04LjUwNTM5IDU0Ljc2Mjc5IC04LjUwMTc0IDU0Ljc2MjMyIC04LjQ5NjU5IDU0Ljc2MjU3IC04LjQ5MjAzIDU0Ljc2Mzk3IC04LjQ4ODI5IDU0Ljc2MjIgLTguNDg1NDUgNTQuNzYxNTUgLTguNDgzNzcgNTQuNzYxODMgLTguNDc4NzQgNTQuNzYxNjIgLTguNDc0MSA1NC43NjA2MSAtOC40NjkwMyA1NC43NTg3NCAtOC40NjYzNCA1NC43NTczNSAtOC40NjE1MSA1NC43NTc4NSAtOC40NTc0NiA1NC43NTgwNCAtOC40NTM4NCA1NC43NTcwNSAtOC40NTAyIDU0Ljc1ODExIC04LjQ0MjQzIDU0Ljc1ODExIC04LjQ0MjQzIDU0Ljc1ODk1IC04LjQ0NTU4IDU0Ljc2MTQyIC04LjQ0OTAxIDU0Ljc2MTMzIC04LjQ1NDA3IDU0Ljc2MDYzIC04LjQ1Njk2IDU0Ljc2MTI3IC04LjQ2MDQgNTQuNzY0MTEgLTguNDYwMjMgNTQuNzYzNzkgLTguNDY0NzcgNTQuNzY1MzkgLTguNDY0MDggNTQuNzY2ODggLTguNDU4NjEgNTQuNzY5MjYgLTguNDYzNjEgNTQuNzY5NiAtOC40Njc2MiA1NC43NzEwOCAtOC40NzQwNSA1NC43NzI3OCAtOC40NzgyOSA1NC43NzI0MSAtOC40ODE3MiA1NC43NzI0MSAtOC40ODUwNiA1NC43NzI3NSAtOC40ODg3NiA1NC43NzQyOCAtOC40ODkzMiA1NC43NzUwNCAtOC40OTM5IDU0Ljc3NDc4IC04LjQ5ODc4IDU0Ljc3MzYyIC04LjUwMTYgNTQuNzczMzggLTguNTA3NzUgNTQuNzc0NDEgLTguNTEzOTUgNTQuNzc1NyAtOC41MTg5MyA1NC43Nzk1OCAtOC41MjAyIDU0Ljc4MTE0IC04LjUyNTIxIDU0Ljc4MjAzIC04LjUzNDI1IDU0Ljc4NDI4IC04LjU0MTc1IDU0Ljc4Nzg3IC04LjU0MzE0IDU0Ljc4ODM4IC04LjUzODc3IDU0Ljc4OTgzIC04LjUzOTE3IDU0Ljc5MDggLTguNTM4MzkgNTQuNzkwNDggLTguNTMyNDYgNTQuNzkwODkgLTguNTI4MjQgNTQuNzkwNzEgLTguNTIzMTMgNTQuNzg5OTggLTguNTE4MDggNTQuNzg4MzIgLTguNTE0NzkgNTQuNzg1NzcgLTguNTExMDQgNTQuNzg1NDkgLTguNTA2MDggNTQuNzg3NjggLTguNTA4MDIgNTQuNzg3ODIgLTguNTAzOTEgNTQuNzg3OCAtOC40OTkxNSA1NC43ODkxNSAtOC40OTYyIDU0Ljc5MDgzIC04LjQ5MjUgNTQuNzg4NzYgLTguNDgzMjcgNTQuNzg5MTkgLTguNDgwMzMgNTQuNzkwNzkgLTguNDc5NjQgNTQuNzkxNzYgLTguNDc4ODMgNTQuNzkyNzIgLTguNDc2MjkgNTQuNzkyMTQgLTguNDczNDkgNTQuNzkxMjIgLTguNDcxOTIgNTQuNzkxNDQgLTguNDY5NDIgNTQuNzkwOTggLTguNDY2MTYgNTQuNzg5NjUgLTguNDYzNDIgNTQuNzg3ODMgLTguNDYzMTMgNTQuNzg1MzEgLTguNDYzOTggNTQuNzgzNTggLTguNDYzNyA1NC43ODIyNCAtOC40NjE0MSA1NC43ODMyIC04LjQ1NzI4IDU0Ljc4Mjk4IC04LjQ1NDM5IDU0Ljc4MjA0IC04LjQ1MTM4IDU0Ljc4MDI4IC04LjQ1MTg5IDU0Ljc3NzgxIC04LjQ1MTY1IDU0Ljc3NjAzIC04LjQ1MDU4IDU0Ljc3NTE3IC04LjQ0NjE0IDU0Ljc3MzUzIC04LjQ0NzQ2IDU0Ljc3MTE3IC04LjQ0MzU5IDU0Ljc3MjM2IC04LjQ0MDQ1IDU0Ljc2ODY1IC04LjQyOTIyIDU0Ljc2NzUzIC04LjQyOTUyIDU0Ljc2NjAzIC04LjQzMDA2IDU0Ljc2NTUxIC04LjQyNzkyIDU0Ljc2NTM3IC04LjQyMzYyIDU0Ljc2MzY1IC04LjQyMTQ0IDU0Ljc2NCAtOC40MTgzMiA1NC43NjM3IC04LjQxMjA5IDU0Ljc2MzcgLTguNDEyMDkgNTQuNzY1MzYgLTguNDE1MzcgNTQuNzY2ODcgLTguNDE0NSA1NC43NzY3NyAtOC40MDU4MyA1NC43OTg3MiAtOC40NDM0NSA1NC44MDAxOCAtOC40NDU0MyA1NC44MDA2OSAtOC40NDk0OSA1NC44MDE0OCAtOC40NTM3NCA1NC43OTkyNCAtOC40NTU5MiA1NC43OTg2MiAtOC40NjQwNyA1NC43OTkwNCAtOC40NzMyIDU0LjgwMTQxIC04LjQ3ODUxIDU0Ljc5ODYyIC04LjQ4MDkxIDU0Ljc5ODA1IC04LjQ4NDYyIDU0LjgwMDYxIC04LjQ5MTQgNTQuODAxOTIgLTguNDkxMTQgNTQuODAyODQgLTguNDg5MzcgNTQuODAzMTkgLTguNDg2MjUgNTQuODA1MzYgLTguNDg2OTIgNTQuODA3MzIgLTguNDg3ODkgNTQuODA4ODkgLTguNDg5NTcgNTQuODA5NSAtOC40OTUwNyA1NC44MTA0IC04LjQ5ODg3IDU0LjgxMjk1IC04LjUwMTAzIDU0LjgxMzA1IC04LjUwNDM4IDU0LjgxNTAxIC04LjUwNTMzIDU0LjgxNDUzIC04LjUwOTA3IDU0LjgxMjU4IC04LjUxMTEzIDU0LjgxMzUgLTguNTE2MDUgNTQuODEzOTQgLTguNTIxMzYgNTQuODE0OTQgLTguNTE4MzUgNTQuODE2NjUgLTguNTE1NDcgNTQuODE3OTkgLTguNTIyOTggNTQuODE5NDkgLTguNTE5MTEgNTQuODIwNjkgLTguNTE3MjMgNTQuODIyMDUgLTguNTE1ODYgNTQuODIzNjMgLTguNTE1NDggNTQuODIzMzYgLTguNTIwNTMgNTQuODI1OTYgLTguNTIxNiA1NC44MjQ3NyAtOC41MjMxNSA1NC44MjQ5OSAtOC41MjYwNCA1NC44MjQyNyAtOC41Mjg5NCA1NC44MjI5NCAtOC41MzE0MiA1NC44MjMzOCAtOC41MzM1NyA1NC44MjQzMiAtOC41MzY1OCA1NC44MjQ1OSAtOC41NDE3IDU0LjgyNzM2IC04LjU0MTM2IDU0LjgyNTAzIC04LjU0NzAzIDU0LjgyNTcgLTguNTUxNDIgNTQuODI3MDIgLTguNTU1NzYgNTQuODI5MzggLTguNTU2MzIgNTQuODMwMzUgLTguNTUzNjIgNTQuODMxMzQgLTguNTUyNTEgNTQuODMwMDcgLTguNTUwNTUgNTQuODMxMzkgLTguNTQ4MjIgNTQuODMzNjkgLTguNTQ3NTYgNTQuODM0MzIgLTguNTQ1MDYgNTQuODMzNzEgLTguNTQyNzIgNTQuODMzOTUgLTguNTM4MzEgNTQuODM0NjMgLTguNTMyNyA1NC44MzQxIC04LjUyODk1IDU0LjgzNTgxIC04LjUyNzk3IDU0LjgzNTk4IC04LjUyNDY2IDU0LjgzNDc2IC04LjUyMzUxIDU0LjgzMzYgLTguNTIxMjUgNTQuODMyMzUgLTguNTE4OTggNTQuODMzNjkgLTguNTE3NzcgNTQuODMzMTkgLTguNTE1MzEgNTQuODMyOTUgLTguNTExMjkgNTQuODMxNSAtOC41MDkzIDU0LjgyODkxIC04LjUwNzkyIDU0LjgyOTg4IC04LjUwMzc5IDU0LjgzMDc0IC04LjUwMTM5IDU0LjgzMjY3IC04LjQ5OTY0IDU0LjgzMjkyIC04LjQ5NTA3IDU0LjgzNDMgLTguNDk4MzEgNTQuODM0OTcgLTguNTAxMjggNTQuODM2NSAtOC41MDM2IDU0LjgzODM4IC04LjUwNTk4IDU0LjgzODQzIC04LjUwMzQ0IDU0LjgzNzg3IC04LjQ5ODU5IDU0LjgzOTUyIC04LjQ5Njk0IDU0Ljg0MTA5IC04LjQ5ODUyIDU0Ljg0MDkzIC04LjQ5NjIzIDU0Ljg0MDQgLTguNDk0MjMgNTQuODQyMDMgLTguNDkyOTEgNTQuODQ0NzcgLTguNDkzMiA1NC44NDc1MiAtOC40ODk5OCA1NC44NDkxMiAtOC40ODU2NCA1NC44NDgxNiAtOC40Nzk5MSA1NC44NDczNSAtOC40NzI3OSA1NC44NDY4NiAtOC40NjgyNiA1NC44NDUwOSAtOC40NjcwMSA1NC44NDQwNSAtOC40NjQzMSA1NC44NDM3MyAtOC40NTk5NSA1NC44NDI1MyAtOC40NTgzMyA1NC44NDEgLTguNDU3OTMgNTQuODQwODcgLTguNDUzNjEgNTQuODQxNDYgLTguNDQ3NjcgNTQuODQwMzMgLTguNDQzMTkgNTQuODM5ODUgLTguNDQwMDkgNTQuODQyMzkgLTguNDM1NzQgNTQuODQzNDcgLTguNDMwODIgNTQuODQ0ODEgLTguNDI2NDIgNTQuODQ1NzIgLTguNDIxNDkgNTQuODQ4MzIgLTguNDE5MzYgNTQuODUxMjkgLTguNDE4NzQgNTQuODUzIC04LjQxNTgyIDU0Ljg1MjU3IC04LjQxMTc5IDU0Ljg1MDYgLTguNDEyNzMgNTQuODQ5ODEgLTguNDE1NDcgNTQuODQ3OTcgLTguNDE1NDkgNTQuODQ3NDIgLTguNDEwMzIgNTQuODQ3NzUgLTguNDA3NTIgNTQuODQ3MDIgLTguNDA0MDUgNTQuODQ2MzUgLTguNDAxNCA1NC44NDc0MSAtOC4zOTg3MSA1NC44NDkxMiAtOC4zOTc1NSA1NC44NTExOCAtOC4zOTUwMyA1NC44NTMzIC04LjM5MTM4IDU0Ljg1MjM2IC04LjM4ODUzIDU0Ljg1MTE0IC04LjM5MDU2IDU0Ljg0OTE0IC04LjM5MDQgNTQuODQ3MTYgLTguMzkxMiA1NC44NDUwNiAtOC4zOTI3NyA1NC44NDM4NiAtOC4zOTExNSA1NC44NDQ0NiAtOC4zODg1NCA1NC44NDQ4IC04LjM4NTU4IDU0Ljg0MzkgLTguMzgxOTQgNTQuODQyNDIgLTguMzc4NjcgNTQuODM5OTEgLTguMzc0MTQgNTQuODQwMjUgLTguMzcxMDIgNTQuODQxNjUgLTguMzY3NDMgNTQuODQyNTggLTguMzY1MzUgNTQuODQ2MDQgLTguMzYwODEgNTQuODQ0MjYgLTguMzU3OTkgNTQuODQzNDUgLTguMzU2MTEgNTQuODQxNyAtOC4zNTQzOSA1NC44NDAwNiAtOC4zNTIzOSA1NC44Mzk5MSAtOC4zNTUyMiA1NC44NDA4NCAtOC4zNTg1NiA1NC44NDE3MSAtOC4zNjEwNyA1NC44Mzg2NCAtOC4zNjUxOSA1NC44MzY1OCAtOC4zNjc3MyA1NC44MzU1NyAtOC4zNjYxMyA1NC44MzcwMyAtOC4zNjQ0NiA1NC44MzY4NiAtOC4zNjI1MyA1NC44MzUyMSAtOC4zNjI0MiA1NC44MzY3MiAtOC4zNjAxMiA1NC44MzcyIC04LjM1NjA2IDU0LjgzNTk2IC04LjM1MTczIDU0LjgzNzUgLTguMzUwNCA1NC44MzY3NSAtOC4zNDU2NyA1NC44MzU4MiAtOC4zNDI0OSA1NC44MzUxMiAtOC4zNDAxNyA1NC44MzQ1MSAtOC4zMzc4NCA1NC44MzUxIC04LjMzMzQ4IDU0LjgzNTQxIC04LjMyNzY1IDU0LjgzNzAzIC04LjMyNjY0IDU0LjgzOTMzIC04LjMyNjM3IDU0LjgzODg4IC04LjMyMTA1IDU0Ljg0MTM1IC04LjMxNjIxIDU0Ljg0MzA5IC04LjMxMDkxIDU0Ljg0NDg2IC04LjMwNTE2IDU0Ljg0NzM5IC04LjI5OTA0IDU0Ljg0OTM1IC04LjI5MzE1IDU0Ljg1MDY3IC04LjI4NzMyIDU0Ljg1Mjg0IC04LjI4NDQ4IDU0Ljg1NDYxIC04LjI4MjM3IDU0Ljg1NTM3IC04LjI3ODM3IDU0Ljg1NjUxIC04LjI3NTg0IDU0Ljg1ODI1IC04LjI3MDcyIDU0Ljg1ODY2IC04LjI2NjMyIDU0Ljg2MDU0IC04LjI2MjE3IDU0Ljg2Mzk4IC04LjI2MTI4IDU0Ljg2NzMxIC04LjI1NzM2IDU0Ljg3MzUyIC04LjI0OTExIDU0Ljg3OTExIC04LjIzODg2IDU0Ljg4NjEgLTguMjI2MjcgNTQuODk0NjMgLTguMjEzOTMgNTQuODkxMTggLTguMjIxOTcgNTQuODg4NCAtOC4yMjk1IDU0Ljg4NDggLTguMjM1MyA1NC44ODAzNSAtOC4yNDEyOCA1NC44NzcyMyAtOC4yNDY1MiA1NC44NzQyNiAtOC4yNTA2NiA1NC44NzE0IC04LjI1NjI2IDU0Ljg2OTAzIC04LjI2MTI3IDU0Ljg2NjUyIC04LjI2MzU4IDU0Ljg2Mzc5IC04LjI2NjY2IDU0Ljg2MTMxIC04LjI3MTgzIDU0Ljg1ODg1IC04LjI3NjY5IDU0Ljg1NjEgLTguMjgzNDEgNTQuODUzNjQgLTguMjg4NDIgNTQuODUyNjUgLTguMjk1MSA1NC44NTA5IC04LjI5ODY1IDU0Ljg0ODYzIC04LjMwMTYyIDU0Ljg0NzI0IC04LjMwMzc4IDU0Ljg0NjEzIC04LjMwOSA1NC44NDUzMSAtOC4zMTM5NiA1NC44NDQ0MyAtOC4zMTg2IDU0Ljg0MjY2IC04LjMyMDcgNTQuODQyNTUgLTguMzIyNzQgNTQuODQzNDcgLTguMzI2NCA1NC44NDM1NiAtOC4zMjk5MSA1NC44NDI0MyAtOC4zMzIxMSA1NC44NDQzNyAtOC4zMzM1MiA1NC44NDU1NiAtOC4zMzcwNiA1NC44NDcyNSAtOC4zNDE2MiA1NC44NTAzMyAtOC4zNDA1MSA1NC44NTMyNSAtOC4zNDA5OCA1NC44NTQ1IC04LjM0NSA1NC44NTU4IC04LjM1NjY2IDU0Ljg1NjQ0IC04LjM2NTUgNTQuODU1MjIgLTguMzY5MTIgNTQuODUyNDggLTguMzcwOTEgNTQuODUyMDEgLTguMzcyNzQgNTQuODU0ODUgLTguMzc2MjIgNTQuODU3OTkgLTguMzc3NjggNTQuODYwNzIgLTguMzc2MzYgNTQuODYzMTIgLTguMzc1OTYgNTQuODY2MjkgLTguMzc2OTQgNTQuODcxOSAtOC4zNzY3MiA1NC44NzU5MyAtOC4zNzUxNCA1NC44NzYyMiAtOC4zNzgzNyA1NC44NzY5IC04LjM4MTAzIDU0Ljg3ODQyIC04LjM4MTc0IDU0Ljg3OTY2IC04LjM4MSA1NC44ODAzMyAtOC4zNzg3MiA1NC44Nzk4IC04LjM3NDgyIDU0Ljg3OTI2IC04LjM3MTIzIDU0Ljg3ODEzIC04LjM2Njc0IDU0Ljg3NzUgLTguMzYyOTkgNTQuODc3OTcgLTguMzU5MjQgNTQuODc4NjkgLTguMzU2MTggNTQuODgwMTggLTguMzUzODggNTQuODgxNzYgLTguMzUzNDkgNTQuODgzMzEgLTguMzUxOTggNTQuODgzOSAtOC4zNDc5NSA1NC44ODMxOSAtOC4zNDIyNyA1NC44ODE2OSAtOC4zMzkzMSA1NC44ODAyNCAtOC4zMzU1OSA1NC44Nzg1MyAtOC4zMzEzNCA1NC44Nzc4MSAtOC4zMjU5OCA1NC44NzY3MSAtOC4zMjA4NyA1NC44NzUyNyAtOC4zMTY5NyA1NC44Nzg4MyAtOC4zMTU0OCA1NC44ODE1MyAtOC4zMTYzOCA1NC44ODQ0IC04LjMxNjA1IDU0Ljg4NDg2IC04LjMxMDcxIDU0Ljg4NDQ2IC04LjMwNjE5IDU0Ljg4NDg1IC04LjMwMjI3IDU0Ljg4NjkgLTguMzA1MTUgNTQuODg3MzUgLTguMzAwMjggNTQuODg5MDYgLTguMzAwODcgNTQuODkwMSAtOC4zMDM3NSA1NC44OTA4MiAtOC4zMDczNiA1NC44ODkyIC04LjMwODUzIDU0Ljg4NzgxIC04LjMxNDA0IDU0Ljg4NzY0IC04LjMyMDcxIDU0Ljg4OTc0IC04LjMyNzcxIDU0Ljg5MzQ1IC04LjMzNDA0IDU0Ljg5NTQ0IC04LjMzMjc2IDU0Ljg5NzUxIC04LjMzMTgyIDU0Ljg5OTYgLTguMzM0MDUgNTQuOTAwODYgLTguMzMyODMgNTQuOTAzNjUgLTguMzMyMDEgNTQuOTA1ODYgLTguMzMxODcgNTQuOTA4MjUgLTguMzMzNTMgNTQuOTA5MDEgLTguMzM4MjcgNTQuOTA2MDkgLTguMzQxNDcgNTQuOTA1MTEgLTguMzQ0MzMgNTQuOTAzODYgLTguMzQ3MTUgNTQuOTAzODIgLTguMzUxMjkgNTQuOTAxMzYgLTguMzUyNjUgNTQuODk5NjEgLTguMzU0NDQgNTQuODk5OTQgLTguMzYwMzggNTQuOTAyMjMgLTguMzYwNDMgNTQuOTAzOTkgLTguMzYzNTcgNTQuOTAzMjYgLTguMzY2OTYgNTQuOTA0IC04LjM3MDI1IDU0LjkwNiAtOC4zNzA1OSA1NC45MDQzOCAtOC4zNzM1IDU0LjkwMzMgLTguMzczMDEgNTQuOTAxODcgLTguMzcyMzEgNTQuODk5ODQgLTguMzcyNjIgNTQuODk5MSAtOC4zNzA5MSA1NC44OTc3OCAtOC4zNjk4OSA1NC44OTU2NyAtOC4zNjk4OCA1NC44OTM4IC04LjM3MDM4IDU0Ljg4OTU2IC04LjM2NzQ2IDU0Ljg4NjcyIC04LjM2NzMzIDU0Ljg4NDM2IC04LjM3MDMgNTQuODg0MTYgLTguMzczOTIgNTQuODg0MzkgLTguMzc2NSA1NC44ODU3MyAtOC4zNzg5NCA1NC44ODc4NSAtOC4zODA1NyA1NC44OTA1NSAtOC4zODMzOSA1NC44OTIzNSAtOC4zODczNCA1NC44OTMzNiAtOC4zOTI0MyA1NC44OTMxOSAtOC4zOTczMiA1NC44OTQyIC04LjQwMDgzIDU0Ljg5NTg1IC04LjQwNDI4IDU0Ljg5NzIzIC04LjQwNDE5IDU0Ljg5NzgyIC04LjQwMDE0IDU0Ljg5OTAzIC04LjQwMTMgNTQuODk5IC04LjQwMzY5IDU0LjkwMDI5IC04LjQwODgyIDU0LjkwMTI4IC04LjQxNDIzIDU0LjkwMTg1IC04LjQyMDcgNTQuOTAzMjEgLTguNDI3NzUgNTQuOTA1MjcgLTguNDMzODIgNTQuOTA2NDggLTguNDM4NjMgNTQuOTA5MDcgLTguNDQxNzYgNTQuOTEyNjUgLTguNDQzNjEgNTQuOTE0NTEgLTguNDQ4MDYgNTQuOTE1OTEgLTguNDQ5MjQgNTQuOTE4NCAtOC40NDkwMSA1NC45MjAzMSAtOC40NTEwNyA1NC45MjE5IC04LjQ1MjI4IDU0LjkyNDI2IC04LjQ1MTA3IDU0LjkyNTE4IC04LjQ0NzU2IDU0LjkyNjYgLTguNDQzNjUgNTQuOTI3MTIgLTguNDQwNTUgNTQuOTI4NTMgLTguNDM5OTggNTQuOTMwNDIgLTguNDM5MDEgNTQuOTMyMTYgLTguNDM3MzggNTQuOTM0MTEgLTguNDM4NjYgNTQuOTM1MDIgLTguNDQyMTUgNTQuOTM2NTEgLTguNDQ3MDEgNTQuOTM3OSAtOC40NDgzNSA1NC45Mzk4NSAtOC40NDk3OSA1NC45NDE5NyAtOC40NDk0OSA1NC45NDM4NiAtOC40NDg1MiA1NC45NDU4NCAtOC40NDU2NiA1NC45NDYgLTguNDQyODEgNTQuOTQ1NDEgLTguNDQwMTggNTQuOTQ1NzQgLTguNDM1NzYgNTQuOTQ2MTQgLTguNDMxODUgNTQuOTQ3MDIgLTguNDI5MTIgNTQuOTQ2OTEgLTguNDI1OTEgNTQuOTQ1NTIgLTguNDI0NTcgNTQuOTQzNCAtOC40MjQ3IDU0Ljk0MTQgLTguNDI0MzggNTQuOTQwNDMgLTguNDMwNDQgNTQuOTM5NjIgLTguNDMzNDkgNTQuOTM3OTYgLTguNDM4NjQgNTQuOTM2MzMgLTguNDMzMjggNTQuOTM4MzEgLTguNDI3MjIgNTQuOTM2MjcgLTguNDI3NTMgNTQuOTM2MTkgLTguNDI1NjEgNTQuOTM3MyAtOC40MjIxMyA1NC45MzYwOSAtOC40MTkwNyA1NC45Mzg1NCAtOC40MTc3MSA1NC45Mzk0OSAtOC40MTIzNSA1NC45Mzg5NyAtOC40MDgwNSA1NC45MzgzMSAtOC40MDMzMiA1NC45Mzg1NiAtOC4zOTg1OSA1NC45Mzk5OCAtOC4zOTQzNiA1NC45NDIwNCAtOC4zOTAwNyA1NC45NDI1OSAtOC4zODUwNSA1NC45NDMzNyAtOC4zODI0NyA1NC45NDUxMyAtOC4zNzg2MiA1NC45NDM4MSAtOC4zNzQyNiA1NC45NDI0NSAtOC4zNzM4OSA1NC45NDA4MyAtOC4zNzMxNSA1NC45NDA0MSAtOC4zNjkwOSA1NC45NDQyNSAtOC4zNzExNSA1NC45NDQxNiAtOC4zNjU4OCA1NC45NDUyMiAtOC4zNjQ5MyA1NC45NDcxMyAtOC4zNjM2NSA1NC45NDg1MyAtOC4zNjE0NyA1NC45NDg1NyAtOC4zNTcxOSA1NC45NDk2MyAtOC4zNTQ2NSA1NC45NTE5IC04LjM1Njc2IDU0Ljk1Mjk0IC04LjM2Mjk4IDU0Ljk1NDQ3IC04LjM2NzA2IDU0Ljk1MjcyIC04LjM3MDU5IDU0Ljk1Mzg4IC04LjM3NDYxIDU0Ljk1NTc3IC04LjM4Mzk5IDU0Ljk1ODg1IC04LjM5MTUgNTQuOTU5OTMgLTguMzk1NSA1NC45NTkzMyAtOC4zOTk3MSA1NC45NTg1OSAtOC40MDMyNSA1NC45NjE0NCAtOC40MDgzNCA1NC45NjI0IC04LjQwNTc5IDU0Ljk2NDgxIC04LjQwODg5IDU0Ljk2NzMzIC04LjQxMTM2IDU0Ljk2OTU3IC04LjQxMDc4IDU0Ljk3MTE4IC04LjQxNTAxIDU0Ljk3Mzk3IC04LjQxNjExIDU0Ljk3NDM0IC04LjQyMDk0IDU0Ljk3NjEzIC04LjQyMTg4IDU0Ljk3Nzc2IC04LjQyNDA1IDU0Ljk3ODQyIC04LjQzMDU0IDU0Ljk4MDE4IC04LjQzMTk1IDU0Ljk4MjkxIC04LjQzMjM5IDU0Ljk4NDY4IC04LjQzNTM4IDU0Ljk4NjExIC04LjQzNDMzIDU0Ljk4NzUzIC04LjQzMTg2IDU0Ljk4OTM4IC04LjQzMTUxIDU0Ljk5MTM1IC04LjQzMjQ4IDU0Ljk5MzU1IC04LjQzNTg3IDU0Ljk5NTY4IC04LjQzOTA4IDU0Ljk5ODA3IC04LjQ0MjUgNTUuMDAyMTMgLTguNDQxODkgNTUuMDAyMTMgLTguNDQxODkgNTUuMDA1MDIgLTguNDQxMDggNTUuMDA2OTggLTguNDQwNDUgNTUuMDA2MzYgLTguNDM1MDggNTUuMDA1ODcgLTguNDMyMjcgNTUuMDA2OTcgLTguNDI4OTQgNTUuMDA4NjQgLTguNDI2ODIgNTUuMDEwNjIgLTguNDIzOTYgNTUuMDA4ODIgLTguNDIxNTggNTUuMDA4MzUgLTguNDE4NDggNTUuMDA4NCAtOC40MTU3NyA1NS4wMDkzMSAtOC40MTQzMiA1NS4wMTEyOCAtOC40MTUyOCA1NS4wMTA2MSAtOC40MTA1NSA1NS4wMTA3OCAtOC40MDczOSA1NS4wMDk3NSAtOC40MDU5NCA1NS4wMDg1OCAtOC40MDczNCA1NS4wMDg4MiAtOC40MDk2MiA1NS4wMDc5MSAtOC40MTI5OCA1NS4wMDU0IC04LjQxMDAzIDU1LjAwNTU0IC04LjQwNzQ5IDU1LjAwNjU4IC04LjQwMzY3IDU1LjAwNjA5IC04LjQwMDcyIDU1LjAwNDM1IC04LjM5OSA1NS4wMDM2OCAtOC4zOTQyOCA1NS4wMDYxMyAtOC4zOTMyMyA1NS4wMDgzIC04LjM5NTUgNTUuMDEwMDMgLTguMzk3MzYgNTUuMDExOSAtOC4zOTQ5NiA1NS4wMTM1NiAtOC4zOTMxNCA1NS4wMTMzMyAtOC4zOTc1OSA1NS4wMTUyOSAtOC4zOTg3IDU1LjAxNzYxIC04LjM5Nzk1IDU1LjAxODkxIC04LjM5NTkzIDU1LjAxOTU1IC04LjM5MjY4IDU1LjAyMDU5IC04LjM5MDQ1IDU1LjAyMjA5IC04LjM4OTc0IDU1LjAyMjQ1IC04LjM4NjQ0IDU1LjAyNTg0IC04LjM4NjY4IDU1LjAyNTc0IC04LjM5MTkzIDU1LjAyOTk2IC04LjM5NTQ4IDU1LjAzMTgzIC04LjM5NDY2IDU1LjAzMjM0IC04LjM5NzMgNTUuMDM1MDkgLTguMzk3MjYgNTUuMDM0ODUgLTguMzkzMDggNTUuMDM2MjcgLTguMzkwNzUgNTUuMDM5NTMgLTguMzkxNiA1NS4wNDA0NSAtOC4zODk4MiA1NS4wNDE3NyAtOC4zODczMyA1NS4wNDM0IC04LjM4NTk4IDU1LjA0MDkzIC04LjM4MjU2IDU1LjAzODYzIC04LjM4MDkxIDU1LjAzNTE4IC04LjM4MDE5IDU1LjAzMjE3IC04LjM2OTMzIDU1LjAzNjIxIC04LjM2MjQ3IDU1LjAzODMxIC04LjM2MjY2IDU1LjA0MDQxIC04LjM2MTIzIDU1LjA0MTI5IC04LjM1ODUxIDU1LjAzOTkyIC04LjM1MzE3IDU1LjAzODkgLTguMzQ4MjEgNTUuMDM5MjQgLTguMzQzMzIgNTUuMDM3NzcgLTguMzQzNTcgNTUuMDM3NzEgLTguMzQxMzIgNTUuMDM5ODIgLTguMzM5NDIgNTUuMDQxOSAtOC4zMzgzMiA1NS4wNDM2MSAtOC4zMzcxNSA1NS4wNDU2MSAtOC4zMzU4OCA1NS4wNDc4MSAtOC4zMzU5MiA1NS4wNTAxIC04LjMzNzcxIDU1LjA1MDY0IC04LjMzNjA0IDU1LjA1MjUxIC04LjMzNTM4IDU1LjA1Mzk4IC04LjMzNTMgNTUuMDU1NzYgLTguMzM2NTUgNTUuMDU1MzMgLTguMzQxMjcgNTUuMDU4OTcgLTguMzQxODUgNTUuMDYgLTguMzM5NjIgNTUuMDYyNDggLTguMzQxMyA1NS4wNjM0NSAtOC4zNDAzMyA1NS4wNjI4IC04LjMzODYzIDU1LjA2MTQyIC04LjMzNjk3IDU1LjA2MTA4IC04LjMzNDg0IDU1LjA2MjE2IC04LjMzMzQyIDU1LjA2MzUzIC04LjMzMTg5IDU1LjA2MzU4IC04LjMyOTE4IDU1LjA2NTMyIC04LjMyNTc3IDU1LjA2NTcxIC04LjMyMTg0IDU1LjA2NTM5IC04LjMxNzQ4IDU1LjA2MjU2IC04LjMxNTQyIDU1LjA1OTkyIC04LjMxMzQxIDU1LjA1NzY5IC04LjMxNTYgNTUuMDU1MjYgLTguMzE4MDkgNTUuMDUyNiAtOC4zMTgxNSA1NS4wNTA0NiAtOC4zMTg3NiA1NS4wNDgxNSAtOC4zMjA3OSA1NS4wNDc1NiAtOC4zMjUwMSA1NS4wNDQ2MSAtOC4zMjg2OCA1NS4wNDE0NCAtOC4zMjk2MSA1NS4wMzc5MyAtOC4zMzAxNyA1NS4wMzcgLTguMzI4NTkgNTUuMDM0NiAtOC4zMjU0OSA1NS4wMzIzIC04LjMyMzY5IDU1LjAyOTc4IC04LjMyNDU2IDU1LjAyNzA0IC04LjMyNDI4IDU1LjAyNDQ1IC04LjMyMjc1IDU1LjAyMzgyIC04LjMyNjMyIDU1LjAyMjU4IC04LjMyMTk3IDU1LjAxOTY1IC04LjMyMTY4IDU1LjAyMDcxIC04LjMxOTEzIDU1LjAyMjE4IC04LjMxNzEzIDU1LjAyMjk0IC04LjMxMzQxIDU1LjAyMTg5IC04LjMxMDU0IDU1LjAyNTA0IC04LjMxMTgzIDU1LjAyNzE4IC04LjMxNDczIDU1LjAyOTM2IC04LjMxMzQ4IDU1LjAzMTY4IC04LjMxNjQgNTUuMDMzNTIgLTguMzE3OTcgNTUuMDM1NzkgLTguMzE2NzQgNTUuMDMzODUgLTguMzE1MzEgNTUuMDMyMjggLTguMzEzNzggNTUuMDMxNCAtOC4zMTEyNSA1NS4wMzI3MyAtOC4zMTAzNSA1NS4wMzQ1OCAtOC4zMTE5MiA1NS4wMzYwMiAtOC4zMTQwNyA1NS4wMzc2MSAtOC4zMTM2OCA1NS4wMzkwOCAtOC4zMTM2IDU1LjA0MDU0IC04LjMxNTU4IDU1LjA0MTc4IC04LjMxODAxIDU1LjA0MzQ2IC04LjMxNTczIDU1LjA0NDAzIC04LjMxMzU4IDU1LjA0Mzk1IC04LjMwOTg5IDU1LjA0MzE2IC04LjMwNzUzIDU1LjA0MTYyIC04LjMwNTM3IDU1LjA0MTM4IC04LjMwMjk0IDU1LjA0MjA2IC04LjMwMDUgNTUuMDQxNiAtOC4yOTcwNiA1NS4wNDEwNyAtOC4yOTEyNCA1NS4wMzk2OSAtOC4yODQ2MyA1NS4wMzg5NSAtOC4yNzkyNCA1NS4wMzc5OCAtOC4yNzM0OSA1NS4wMzY0OSAtOC4yNjg2MyA1NS4wMzU2OCAtOC4yNjQ2NyA1NS4wMzY3NSAtOC4yNjM1NiA1NS4wMzc5NSAtOC4yNjUwMiA1NS4wMzk0NiAtOC4yNjc5OSA1NS4wNDAzMSAtOC4yNzI3NSA1NS4wNDEyNCAtOC4yNzk0NSA1NS4wNDE4MSAtOC4yODYwOCA1NS4wNDI4NSAtOC4yOTI0NyA1NS4wNDQ0NyAtOC4yOTY0IDU1LjA0NjU4IC04LjMwMDEgNTUuMDQ1NjUgLTguMzA3MjkgNTUuMDQ3NjQgLTguMzExMjkgNTUuMDQ5NzUgLTguMzE0ODIgNTUuMDUxNTYgLTguMzEzNSA1NS4wNTE4NyAtOC4zMTExNyA1NS4wNTE0NyAtOC4zMDgyMyA1NS4wNTU5OCAtOC4zMDc5OSA1NS4wNTQzNSAtOC4zMDU4IDU1LjA1NTExIC04LjMwMzY5IDU1LjA1NTM2IC04LjI5ODk0IDU1LjA1Njg5IC04LjI5OTM0IDU1LjA1NjU5IC04LjMwNTA1IDU1LjA1ODg0IC04LjMwNTg4IDU1LjA2MTEzIC04LjMwNjA4IDU1LjA2MTg0IC04LjMwNDYxIDU1LjA2MzIzIC04LjMwMjc1IDU1LjA2NDMyIC04LjMwMTE2IDU1LjA2NTg3IC04LjMwMTQxIDU1LjA2ODA4IC04LjMwMjg5IDU1LjA2NjggLTguMzA2NTEgNTUuMDY3NDQgLTguMzA5OTcgNTUuMDY5MTggLTguMzEwMDkgNTUuMDcwOTEgLTguMzA4NjEgNTUuMDczMDYgLTguMzA3NjggNTUuMDc1OTMgLTguMzA5MDkgNTUuMDc4MyAtOC4zMTQ3NCA1NS4wODEzNiAtOC4zMTU4OCA1NS4wODE4OCAtOC4zMTgwMyA1NS4wODI3OCAtOC4zMTY1OCA1NS4wODM4MyAtOC4zMTU3OCA1NS4wODYwNiAtOC4zMTcxIDU1LjA4NzQ4IC04LjMxNzk3IDU1LjA4ODgzIC04LjMxNjc1IDU1LjA4ODYzIC04LjMxMzY4IDU1LjA4OTEgLTguMzExNTIgNTUuMDg5NjIgLTguMzA2OTYgNTUuMDg4MDEgLTguMzAyNyA1NS4wODcyMiAtOC4yOTg0MiA1NS4wODU5OSAtOC4zMDA5NCA1NS4wODQxNyAtOC4zMDI0MSA1NS4wODE4MiAtOC4yOTY0NSA1NS4wODM2MiAtOC4yOTUyOCA1NS4wODU5IC04LjI5NTQyIDU1LjA4NTMzIC04LjI5MDkyIDU1LjA4NTMzIC04LjI5MDkyIDU1LjA4ODczIC04LjI5NjEgNTUuMDkwNTUgLTguMjk2NCA1NS4wODk3NCAtOC4zMDEwNSA1NS4wOTI4NSAtOC4zMDY1MSA1NS4wOTYwMyAtOC4zMDU1OSA1NS4wOTg0NCAtOC4zMDY3NyA1NS4xMDAyOSAtOC4zMDgxOSA1NS4xMDQwNiAtOC4zMDc5OSA1NS4xMDU1IC04LjMwNjc3IDU1LjEwNzQ1IC04LjMwNjQ1IDU1LjEwOTQ4IC04LjMwNzg5IDU1LjExMjM0IC04LjMwOTMxIDU1LjExMjIxIC04LjMwNjU3IDU1LjExNDk0IC04LjMwMzY0IDU1LjExODQgLTguMzAyMjggNTUuMTE2ODggLTguMjk5NzkgNTUuMTE2IC04LjI5NTY1IDU1LjExNzQyIC04LjI5MzAxIDU1LjEyMDQzIC04LjI5NyA1NS4xMjM5MSAtOC4yOTUzMSA1NS4xMjQ0OSAtOC4yODk0OCA1NS4xMjY4OCAtOC4yODkyNCA1NS4xMjkzMiAtOC4yODY3MyA1NS4xMzM3NyAtOC4yODkzNyA1NS4xMzcyNCAtOC4yOTEyIDU1LjEzODQzIC04LjI5MzE2IDU1LjE0MDMgLTguMjkwNzMgNTUuMTQwOTcgLTguMjg4MjggNTUuMTQyMjEgLTguMjg1NzQgNTUuMTQzMzEgLTguMjg0MDEgNTUuMTQ0OTUgLTguMjgyNTEgNTUuMTQ2MTQgLTguMjg0MjkgNTUuMTQ3MzQgLTguMjg1OTMgNTUuMTQ4NTggLTguMjg4MzcgNTUuMTQ5OSAtOC4yODc5NCA1NS4xNTA3NiAtOC4yODUzNCA1NS4xNTE0MyAtOC4yODMwNiA1NS4xNTI1MSAtOC4yODAxOSA1NS4xNTQ4OSAtOC4yODAyNSA1NS4xNTcwNSAtOC4yNzkzMSA1NS4xNTc3MSAtOC4yNzU0MiA1NS4xNTU0MyAtOC4yNjk5MiA1NS4xNTMyOSAtOC4yNjUwOSA1NS4xNTM4MiAtOC4yNTg2MiA1NS4xNTEzOCAtOC4yNDg5NSA1NS4xNTI1MiAtOC4yNDY0MSA1NS4xNTM0NyAtOC4yNDIyMyA1NS4xNTIyNSAtOC4yMzkxNiA1NS4xNTA2MSAtOC4yMzc0NSA1NS4xNTA2MyAtOC4yMzE3IDU1LjE0OTk3IC04LjIzIDU1LjE0OTIzIC04LjIyNjY3IDU1LjE0ODUgLTguMjIxNDQgNTUuMTQ5NTEgLTguMjE3NzUgNTUuMTUwNzkgLTguMjE2MiA1NS4xNTE0NyAtOC4yMTM3MyA1NS4xNTA3NyAtOC4yMTEyMiA1NS4xNDk1OSAtOC4yMTEwNSA1NS4xNDc3MyAtOC4yMTE1NCA1NS4xNDY1MSAtOC4yMTAyNCA1NS4xNDYwOCAtOC4yMDc3NyA1NS4xNDUzOCAtOC4yMDM2NSA1NS4xNDY5MSAtOC4yMDA2OSA1NS4xNDU5NSAtOC4xOTA5NCA1NS4xNDcxNiAtOC4xODg3MyA1NS4xNDYwMyAtOC4xNzE1OSA1NS4xNDg2OSAtOC4xNjQ0NyA1NS4xNDc4NyAtOC4xNjI1OCA1NS4xNDUyMiAtOC4xNjc2MiA1NS4xNDQyNSAtOC4xNjUyMiA1NS4xNDQgLTguMTYyOTQgNTUuMTQzODEgLTguMTU5NTYgNTUuMTQ0MDUgLTguMTU0OTQgNTUuMTQ0NzUgLTguMTUxODYgNTUuMTQ1ODQgLTguMTUwMjcgNTUuMTQ3MzcgLTguMTQ5MjIgNTUuMTQ5NTkgLTguMTQ3MDEgNTUuMTUxNDkgLTguMTQ1NyA1NS4xNTM0NCAtOC4xNDM0NSA1NS4xNTU0NyAtOC4xNDMyOCA1NS4xNTczOCAtOC4xNDM1OCA1NS4xNTk0MSAtOC4xNDMyNiA1NS4xNjA4NSAtOC4xNDIwNCA1NS4xNjIwMyAtOC4xMzg3IDU1LjE2MjggLTguMTM0NDkgNTUuMTYyMjkgLTguMTMwMDkgNTUuMTYwNzggLTguMTI1NTMgNTUuMTU4NjQgLTguMTI0MjQgNTUuMTU2OTggLTguMTI0NDcgNTUuMTU0OTcgLTguMTIyNCA1NS4xNTQwNSAtOC4xMjA2NCA1NS4xNTI1MyAtOC4xMjM2MSA1NS4xNTQ2NiAtOC4xMjY4MiA1NS4xNTIxMSAtOC4xMjgxOSA1NS4xNTAzOCAtOC4xMzE2IDU1LjE0OTY3IC04LjEzNDY5IDU1LjE0NzkzIC04LjEzNjUxIDU1LjE0NzcxIC04LjE0MDY0IDU1LjE0NTk0IC04LjEzOTM5IDU1LjE0NDg3IC04LjE0NDE5IDU1LjE0MzkgLTguMTQ2OTIgNTUuMTQyNTYgLTguMTUxODMgNTUuMTQwMjQgLTguMTU0MDMgNTUuMTQwODcgLTguMTU3NjUgNTUuMTQxNDIgLTguMTYxNDIgNTUuMTQxOTEgLTguMTY0MjEgNTUuMTM4NDggLTguMTYzMiA1NS4xMzg2NyAtOC4xNTU4NiA1NS4xMzY0NiAtOC4xNDkxMSA1NS4xMzQ5IC04LjE1MjU2IDU1LjEzMTIxIC04LjE1MTE4IDU1LjEyODgxIC04LjE1MzIxIDU1LjEyNzIyIC04LjE1NTY3IDU1LjEyNDU0IC04LjE1NTkxIDU1LjEyNDA1IC04LjE1MTE5IDU1LjEyMTM3IC04LjE0ODA2IDU1LjEyMjg4IC04LjE0MzQ5IDU1LjEyNTE1IC04LjE0MjIzIDU1LjEyNzM0IC04LjE0MjU4IDU1LjEyOTA0IC04LjE0MTU2IDU1LjEyOTY5IC04LjEzOTc0IDU1LjEyODYyIC04LjEzNzE4IDU1LjEyNjY5IC04LjEzNTQzIDU1LjEyNDgyIC04LjEzMjU5IDU1LjEyMjM3IC04LjEzMDQ1IDU1LjEyMDAxIC04LjEzMTY4IDU1LjExNjI0IC04LjEzMzY2IDU1LjExODk5IC04LjEyODE2IDU1LjEyMTg4IC04LjEyNzM0IDU1LjEyNDUgLTguMTI4MjEgNTUuMTI2NDEgLTguMTI4MzUgNTUuMTI4NjggLTguMTI3MTEgNTUuMTMxNCAtOC4xMjc3IDU1LjEzNDQ5IC04LjEyODMyIDU1LjEzNzEzIC04LjEzMDUgNTUuMTM4MzIgLTguMTMwNTMgNTUuMTM5NzggLTguMTI5IDU1LjEzODg5IC04LjEyMzU3IDU1LjEzODg5IC04LjEyMzU3PC9nbWw6cG9zTGlzdD4NCis8L2dtbDpMaW5lYXJSaW5nPg0KKzxnbWw6TGluZWFyUmluZz4NCis8Z21sOnBvc0xpc3Q+NTMuMzUxMDQgLTkuNjQ2MjQgNTMuMzUxODQgLTkuNjQ4MDcgNTMuMzUwNDQgLTkuNjUxMDQgNTMuMzUwNjYgLTkuNjU0NzYgNTMuMzUwNTMgLTkuNjU4MTQgNTMuMzUyMTkgLTkuNjU1MjEgNTMuMzU0NDggLTkuNjU0MDkgNTMuMzU1MjcgLTkuNjQ3NjIgNTMuMzU0NDMgLTkuNjQzNjMgNTMuMzUxMDQgLTkuNjQ2MjQgNTMuMzUxMDQgLTkuNjQ2MjQ8L2dtbDpwb3NMaXN0Pg0KKzwvZ21sOkxpbmVhclJpbmc+DQorPGdtbDpMaW5lYXJSaW5nPg0KKzxnbWw6cG9zTGlzdD41My4yMjM3MyAtOS42NTk4IDUzLjIyNDI4IC05LjY2MjY2IDUzLjIyNDYzIC05LjY2NTY0IDUzLjIyMzgxIC05LjY2OTY0IDUzLjIyNTM4IC05LjY3MSA1My4yMjYyNSAtOS42NzQ1MiA1My4yMjg4NSAtOS42NzEzMyA1My4yMjkxNSAtOS42NzY3NSA1My4yMjY4MiAtOS42ODM4MyA1My4yMjgwMyAtOS42ODY1IDUzLjIyNDk5IC05LjY5MjA4IDUzLjIyNzQgLTkuNjk2MDYgNTMuMjMxNTEgLTkuNjk3NzMgNTMuMjMzNzggLTkuNjk5NjkgNTMuMjM0NTcgLTkuNzAxNjcgNTMuMjM0NzIgLTkuNzA0OTEgNTMuMjM1MSAtOS43MDc1OSA1My4yMzc4MiAtOS43MDgyNSA1My4yMzk4MyAtOS43MDk4NSA1My4yNDE2NSAtOS43MTAxOCA1My4yNDQ5OSAtOS43MDgzNSA1My4yNDQ2MyAtOS43MDM5OSA1My4yNTIwMSAtOS42OTY5MiA1My4yNTI2NiAtOS43MDI0MSA1My4yNTMwMiAtOS43MDUyMyA1My4yNTI0MyAtOS43MTAwMyA1My4yNTYwOSAtOS43MTA0MSA1My4yNTY1OSAtOS43MTM4OCA1My4yNTg3OSAtOS43MTU1MSA1My4yNjEyMSAtOS43MTY0MSA1My4yNjI1OCAtOS43MTY2NyA1My4yNjQzOSAtOS43MTQyNSA1My4yNjU0NCAtOS43MDk1MyA1My4yNjY0NSAtOS43MDY5NSA1My4yNjU4IC05LjY5ODcxIDUzLjI2NzE0IC05LjY5NjUgNTMuMjY3MzcgLTkuNjkxNzcgNTMuMjY5NTMgLTkuNjkyNDggNTMuMjY5OTMgLTkuNjg1MDQgNTMuMjcxMjcgLTkuNjgyOTggNTMuMjcwMiAtOS42Nzk1NiA1My4yNzEyNSAtOS42NzQ4NCA1My4yNzQ2OSAtOS42NzcxNyA1My4yNzYwNSAtOS42NzQ2NiA1My4yNzgzMSAtOS42NzY3NiA1My4yODAxOCAtOS42NzYzMyA1My4yODExNyAtOS42NzM5MSA1My4yODAzNSAtOS42Njk2MSA1My4yNzk5OSAtOS42NjY2MyA1My4yODE0NSAtOS42NjI3NSA1My4yODE3MiAtOS42NjAwNCA1My4yODA5NSAtOS42NTM2MSA1My4yODM0OSAtOS42NTU2MSA1My4yODQ3MSAtOS42NTM2OSA1My4yODI4OSAtOS42NTA1OSA1My4yODMwOCAtOS42NDY0NyA1My4yODA2NiAtOS42NDY5NSA1My4yNzkwOCAtOS42NDY5NyA1My4yNzgyNyAtOS42NDQwNiA1My4yNzcwMyAtOS42NDMyMiA1My4yNzU5NyAtOS42NDEzMiA1My4yNzQ2NyAtOS42Mzk4NyA1My4yNzM0NCAtOS42NDE3OSA1My4yNzM5NyAtOS42NDYzMyA1My4yNzI1OSAtOS42NDkxNSA1My4yNzQwMSAtOS42NTE4NSA1My4yNzExNyAtOS42NTEwMyA1My4yNjg3NCAtOS42NTAyOCA1My4yNjcwNCAtOS42NDk1MSA1My4yNjQ1NyAtOS42NDc4NCA1My4yNjM4MyAtOS42NDIzMyA1My4yNjI5MyAtOS42MzkyNSA1My4yNjAzNSAtOS42Mzc4NSA1My4yNTc5OSAtOS42Mzc0MiA1My4yNTQ5NCAtOS42MzYyNCA1My4yNTA4NyAtOS42MzUyIDUzLjI0Njk3IC05LjYzNDE3IDUzLjI0NDA4IC05LjYzNDcgNTMuMjQwMzggLTkuNjM0OTUgNTMuMjM3NjQgLTkuNjM3NTEgNTMuMjM0MTIgLTkuNjQyMDggNTMuMjI5OTkgLTkuNjQwNCA1My4yMjg3NCAtOS42NDEyNiA1My4yMjg4MyAtOS42NDQwMiA1My4yMjcwNCAtOS42NDU5OSA1My4yMjYwMyAtOS42NTI4NyA1My4yMjU5NCAtOS42NTgzNiA1My4yMjQyNyAtOS42NTcyOSA1My4yMjM3MyAtOS42NTk4IDUzLjIyMzczIC05LjY1OTg8L2dtbDpwb3NMaXN0Pg0KKzwvZ21sOkxpbmVhclJpbmc+DQorPGdtbDpMaW5lYXJSaW5nPg0KKzxnbWw6cG9zTGlzdD41My4yODM1OCAtOS41OTk5MSA1My4yODM0OCAtOS42MDI2NSA1My4yODUwNCAtOS42MDU2OSA1My4yODY2MiAtOS42MDI2IDUzLjI4ODY5IC05LjYwMDUyIDUzLjI4NzQgLTkuNTk5MjEgNTMuMjg0NyAtOS41OTgxMSA1My4yODM1OCAtOS41OTk5MSA1My4yODM1OCAtOS41OTk5MTwvZ21sOnBvc0xpc3Q+DQorPC9nbWw6TGluZWFyUmluZz4NCis8Z21sOkxpbmVhclJpbmc+DQorPGdtbDpwb3NMaXN0PjU0LjE3NjY4IC05Ljk2MTc3IDU0LjE3NjQ1IC05Ljk2OTExIDU0LjE3NTU4IC05Ljk3MzY0IDU0LjE3OTk2IC05Ljk3ODI5IDU0LjE4MDAxIC05Ljk3MzQzIDU0LjE3OTM4IC05Ljk2OTM5IDU0LjE4MDU1IC05Ljk2NDQ0IDU0LjE3ODc1IC05Ljk2MjUxIDU0LjE3NjY4IC05Ljk2MTc3IDU0LjE3NjY4IC05Ljk2MTc3PC9nbWw6cG9zTGlzdD4NCis8L2dtbDpMaW5lYXJSaW5nPg0KKzxnbWw6TGluZWFyUmluZz4NCis8Z21sOnBvc0xpc3Q+NTIuNzA5MjcgLTkuMDEwNTQgNTIuNzExMzcgLTkuMDEwNjMgNTIuNzEzMDQgLTkuMDA5MjYgNTIuNzE0MDMgLTkuMDA2ODggNTIuNzE1MjUgLTkuMDA1MTMgNTIuNzE2NzIgLTkuMDAzODggNTIuNzE5MDIgLTkuMDAyNDggNTIuNzE4NTkgLTguOTk3ODUgNTIuNzE4NjkgLTguOTkzNzggNTIuNzE5NiAtOC45ODk4NiA1Mi43MjE0MiAtOC45ODYwOSA1Mi43MTk5OCAtOC45ODQxNyA1Mi43MTc0OSAtOC45ODI5NSA1Mi43MTUxNiAtOC45ODQ4IDUyLjcxNDAzIC04Ljk4OTE0IDUyLjcxMzk4IC04Ljk5NTM0IDUyLjcxMzE4IC05LjAwMDM1IDUyLjcxMjM2IC05LjAwNDMgNTIuNzExNTggLTkuMDA3NDkgNTIuNzA5MjcgLTkuMDEwNTQgNTIuNzA5MjcgLTkuMDEwNTQ8L2dtbDpwb3NMaXN0Pg0KKzwvZ21sOkxpbmVhclJpbmc+DQorPGdtbDpMaW5lYXJSaW5nPg0KKzxnbWw6cG9zTGlzdD41NC4wNjkzNyAtMTAuMTY0NSA1NC4wNjk4NCAtMTAuMTY2OTYgNTQuMDY4OTkgLTEwLjE2ODUgNTQuMDY5OTQgLTEwLjE2OTQ4IDU0LjA3MDkzIC0xMC4xNzQ4NiA1NC4wNzI3OSAtMTAuMTcyMTEgNTQuMDc0NTIgLTEwLjE2OTggNTQuMDc1OTggLTEwLjE2ODg0IDU0LjA3NjQzIC0xMC4xNjUxOCA1NC4wNzggLTEwLjE2MzYyIDU0LjA3NzEgLTEwLjE2MjAyIDU0LjA3NTc5IC0xMC4xNTcyMSA1NC4wNzM1NCAtMTAuMTU2NDQgNTQuMDcxNDUgLTEwLjE1ODY2IDU0LjA3MDgzIC0xMC4xNjIxNSA1NC4wNjkzNyAtMTAuMTY0NSA1NC4wNjkzNyAtMTAuMTY0NTwvZ21sOnBvc0xpc3Q+DQorPC9nbWw6TGluZWFyUmluZz4NCis8Z21sOkxpbmVhclJpbmc+DQorPGdtbDpwb3NMaXN0PjUzLjI0ODUgLTkuNzM3MDggNTMuMjQ5NzkgLTkuNzM5OTIgNTMuMjUyNiAtOS43NDA0NSA1My4yNTYyOSAtOS43NDE3NSA1My4yNTg4OCAtOS43NDMgNTMuMjYwODIgLTkuNzQyODkgNTMuMjYyMjcgLTkuNzQxNzkgNTMuMjYyOCAtOS43MzgwNSA1My4yNjE2MyAtOS43MzQ5MiA1My4yNTkyMSAtOS43MzM4NCA1My4yNTcyNiAtOS43MzI3MiA1My4yNTQ5NCAtOS43MzE2NyA1My4yNTMzOSAtOS43MzI3NyA1My4yNDkzOSAtOS43MzIwMiA1My4yNDg1IC05LjczNzA4IDUzLjI0ODUgLTkuNzM3MDg8L2dtbDpwb3NMaXN0Pg0KKzwvZ21sOkxpbmVhclJpbmc+DQorPGdtbDpMaW5lYXJSaW5nPg0KKzxnbWw6cG9zTGlzdD41Mi4xMTUzNiAtMTAuNDk0NDkgNTIuMTE1MzYgLTEwLjQ5Njg5IDUyLjExNjc3IC0xMC40OTc2NCA1Mi4xMTg2NSAtMTAuNDk3MyA1Mi4xMTgwNiAtMTAuNDk1MzggNTIuMTE2NDggLTEwLjQ5MjE4IDUyLjExNTM2IC0xMC40OTQ0OSA1Mi4xMTUzNiAtMTAuNDk0NDk8L2dtbDpwb3NMaXN0Pg0KKzwvZ21sOkxpbmVhclJpbmc+DQorPGdtbDpMaW5lYXJSaW5nPg0KKzxnbWw6cG9zTGlzdD41My4yODc4MSAtOS44MzU2MSA1My4yODk2MyAtOS44MzczNCA1My4yOTAyMiAtOS44Mzk0NCA1My4yOTAzMiAtOS44NDM0NiA1My4yOTQ1OCAtOS44NDE4IDUzLjI5NzYyIC05Ljg0MTc2IDUzLjI5OTU3IC05Ljg0Mjg5IDUzLjMwMDI0IC05Ljg0NTMyIDUzLjMwMDA3IC05Ljg0Nzc2IDUzLjI5OTcyIC05Ljg1MjkxIDUzLjMwMTA0IC05Ljg1NTE1IDUzLjMwMjQ3IC05Ljg1MzEyIDUzLjMwMjQzIC05Ljg1NjM0IDUzLjMwMTc1IC05Ljg2MDk3IDUzLjMwMzMxIC05Ljg2MzczIDUzLjMwMzY5IC05Ljg1OTQ5IDUzLjMwNDQyIC05Ljg1NzAyIDUzLjMwNjUxIC05Ljg1NTg5IDUzLjMwNzg0IC05Ljg1NTM3IDUzLjMwOTAxIC05Ljg1NDM2IDUzLjMwOTUyIC05Ljg1MDkyIDUzLjMxMDc2IC05Ljg1MDM5IDUzLjMxMjQ0IC05Ljg1MDA4IDUzLjMxMzY5IC05Ljg0OTI1IDUzLjMxMjQzIC05Ljg0NzMyIDUzLjMxMTA1IC05Ljg0NjEzIDUzLjMxMDc5IC05Ljg0MzE3IDUzLjMxMDI4IC05Ljg0MTA3IDUzLjMwODc4IC05Ljg0MTU2IDUzLjMwNzI4IC05Ljg0MTg5IDUzLjMwNjEzIC05Ljg0MjU5IDUzLjMwNDY0IC05Ljg0Mjc3IDUzLjMwMzQ2IC05LjgzOTk0IDUzLjMwMDg2IC05LjgzODgzIDUzLjI5ODggLTkuODM3ODQgNTMuMjk0IC05LjgzNDE2IDUzLjI5MDM0IC05LjgzMTAxIDUzLjI4NzgxIC05LjgzNTYxIDUzLjI4NzgxIC05LjgzNTYxPC9nbWw6cG9zTGlzdD4NCis8L2dtbDpMaW5lYXJSaW5nPg0KKzxnbWw6TGluZWFyUmluZz4NCis8Z21sOnBvc0xpc3Q+NTEuNDkwNiAtOS41NzIyNSA1MS40OTI0NCAtOS41NzI0NSA1MS40OTI3MyAtOS41NzQ3MiA1MS40OTQyMyAtOS41NzU1OSA1MS40OTQ5MiAtOS41NzM4IDUxLjQ5NTA0IC05LjU2ODM3IDUxLjQ5NTU2IC05LjU2NjQgNTEuNDk2NzYgLTkuNTYzOTcgNTEuNDk4MzkgLTkuNTYwNiA1MS41MDAwNiAtOS41NTc5NiA1MS41MDA4OSAtOS41NTE5MiA1MS41MDE4NCAtOS41NDY0OSA1MS41MDM0MiAtOS41NDEzMyA1MS41MDUwMiAtOS41MzYwMiA1MS41MDYwNSAtOS41MzE5MyA1MS41MDYzMSAtOS41Mjg1OSA1MS41MDQ4NyAtOS41MzA1MyA1MS41MDM4NCAtOS41Mjg0MSA1MS41MDI2MyAtOS41Mjk2NiA1MS41MDI0NyAtOS41MzE4NCA1MS41MDI5MSAtOS41MzQ1OCA1MS41MDE1OCAtOS41MzY0IDUxLjUwMDQ4IC05LjUzODcgNTEuNTAwMjQgLTkuNTQxOSA1MS40OTg1MSAtOS41NDQwOCA1MS40OTcwNCAtOS41NDY2MSA1MS40OTU3OSAtOS41NDg1OSA1MS40OTQ4MyAtOS41NTE1IDUxLjQ5NTM4IC05LjU1Mzk3IDUxLjQ5NTI5IC05LjU1NjQ2IDUxLjQ5NDE5IC05LjU1NzU5IDUxLjQ5MzA5IC05LjU2MDAzIDUxLjQ5MjQ2IC05LjU2MzU5IDUxLjQ5MzI2IC05LjU2NjQgNTEuNDkyNTkgLTkuNTY3OSA1MS40OTE3NSAtOS41NjkyMiA1MS40OTA2IC05LjU3MjI1IDUxLjQ5MDYgLTkuNTcyMjU8L2dtbDpwb3NMaXN0Pg0KKzwvZ21sOkxpbmVhclJpbmc+DQorPGdtbDpMaW5lYXJSaW5nPg0KKzxnbWw6cG9zTGlzdD41Mi42NjU4NSAtOS4wNzMzMiA1Mi42NjYwNyAtOS4wNzgxOSA1Mi42NjcwOCAtOS4wODA4IDUyLjY2Njg5IC05LjA4NDg2IDUyLjY2NzIzIC05LjA4ODEgNTIuNjY5NTggLTkuMDg3NDcgNTIuNjcwMjkgLTkuMDgzNjcgNTIuNjcwNjggLTkuMDgwNzEgNTIuNjcxODggLTkuMDc5MjcgNTIuNjcyODUgLTkuMDc3MTggNTIuNjcyOTMgLTkuMDc0NzcgNTIuNjcxMjMgLTkuMDcyNjMgNTIuNjcwNTcgLTkuMDcwMjQgNTIuNjcxIC05LjA2NTE4IDUyLjY2ODQ1IC05LjA2NjIyIDUyLjY2NjkgLTkuMDcwMDMgNTIuNjY1ODUgLTkuMDczMzIgNTIuNjY1ODUgLTkuMDczMzI8L2dtbDpwb3NMaXN0Pg0KKzwvZ21sOkxpbmVhclJpbmc+DQorPGdtbDpMaW5lYXJSaW5nPg0KKzxnbWw6cG9zTGlzdD41NS4wNDc1NiAtOC40MzY5OCA1NS4wNDg4NCAtOC40NDAyMyA1NS4wNDczMSAtOC40NDMxNyA1NS4wNDc2NyAtOC40NDY5IDU1LjA0ODI4IC04LjQ0OTA4IDU1LjA0OTM2IC04LjQ0OTQxIDU1LjA1MTMxIC04LjQ0NzM0IDU1LjA1MTMzIC04LjQ1MDUzIDU1LjA1NDIxIC04LjQ1MTYzIDU1LjA1NTUyIC04LjQ1MjgxIDU1LjA1NjY5IC04LjQ1MTQgNTUuMDU3MTggLTguNDQ3NDkgNTUuMDU3NzcgLTguNDQ0ODggNTUuMDU4MDIgLTguNDQxODcgNTUuMDYwMzMgLTguNDQwMDIgNTUuMDYwNDUgLTguNDM3OTYgNTUuMDU5MzkgLTguNDM3MTQgNTUuMDU3MDIgLTguNDM4NTIgNTUuMDU1NTIgLTguNDMzOTcgNTUuMDUzMSAtOC40MzExNyA1NS4wNTEyMSAtOC40MzAzOSA1NS4wNTA1MiAtOC40MzQ3NCA1NS4wNDc1NiAtOC40MzY5OCA1NS4wNDc1NiAtOC40MzY5ODwvZ21sOnBvc0xpc3Q+DQorPC9nbWw6TGluZWFyUmluZz4NCis8Z21sOkxpbmVhclJpbmc+DQorPGdtbDpwb3NMaXN0PjUyLjEzMzU3IC02LjU4MzAzIDUyLjEzNDQ4IC02LjU4NTY1IDUyLjEzNTU3IC02LjU4ODE1IDUyLjEzNjU3IC02LjU5MDY1IDUyLjEzODQyIC02LjU5MDUzIDUyLjE0MDIzIC02LjU4ODY0IDUyLjE0MTk4IC02LjU4NjEzIDUyLjE0Mjk5IC02LjU4MzcxIDUyLjE0NDEyIC02LjU4MDU0IDUyLjE0MjY5IC02LjU3OTUgNTIuMTQwMjEgLTYuNTc5ODUgNTIuMTM3NjcgLTYuNTgxMzcgNTIuMTM1NzkgLTYuNTgyNTIgNTIuMTMzNTcgLTYuNTgzMDMgNTIuMTMzNTcgLTYuNTgzMDM8L2dtbDpwb3NMaXN0Pg0KKzwvZ21sOkxpbmVhclJpbmc+DQorPGdtbDpMaW5lYXJSaW5nPg0KKzxnbWw6cG9zTGlzdD41My4zMDcxNyAtOS44Mjk4OSA1My4zMDc2NiAtOS44MzM2NyA1My4zMDk3OCAtOS44MzM2IDUzLjMxMTI3IC05LjgzMzQzIDUzLjMxMzkxIC05LjgzMzc2IDUzLjMxMjA4IC05LjgzMDgxIDUzLjMxMTEgLTkuODI3NyA1My4zMDkzIC05LjgyODQ0IDUzLjMwNzE3IC05LjgyOTg5IDUzLjMwNzE3IC05LjgyOTg5PC9nbWw6cG9zTGlzdD4NCis8L2dtbDpMaW5lYXJSaW5nPg0KKzxnbWw6TGluZWFyUmluZz4NCis8Z21sOnBvc0xpc3Q+NTQuODQ2MTkgLTguNDQ2NjggNTQuODQ3MzggLTguNDQ4NjMgNTQuODQ4MyAtOC40NTAyIDU0Ljg0ODQ3IC04LjQ1MjE0IDU0Ljg0OTgyIC04LjQ1NjAyIDU0Ljg0OTk5IC04LjQ1Mjg2IDU0Ljg1MDg3IC04LjQ1MDE0IDU0Ljg0OTYxIC04LjQ0NjI5IDU0Ljg0OTA4IC04LjQ0MjU1IDU0Ljg0OCAtOC40NDIyIDU0Ljg0Njg5IC04LjQ0NDEgNTQuODQ2MTkgLTguNDQ2NjggNTQuODQ2MTkgLTguNDQ2Njg8L2dtbDpwb3NMaXN0Pg0KKzwvZ21sOkxpbmVhclJpbmc+DQorPGdtbDpMaW5lYXJSaW5nPg0KKzxnbWw6cG9zTGlzdD41My41NDUyNCAtMTAuMjIxMTQgNTMuNTQ2MDcgLTEwLjIyNDg1IDUzLjU0ODQxIC0xMC4yMjE5MyA1My41NDc4NCAtMTAuMjE5NDggNTMuNTQ1OTUgLTEwLjIxODggNTMuNTQ1MjQgLTEwLjIyMTE0IDUzLjU0NTI0IC0xMC4yMjExNDwvZ21sOnBvc0xpc3Q+DQorPC9nbWw6TGluZWFyUmluZz4NCis8Z21sOkxpbmVhclJpbmc+DQorPGdtbDpwb3NMaXN0PjUzLjI4NzM4IC05LjgxMjA0IDUzLjI4ODU0IC05LjgxNDA5IDUzLjI5MDg0IC05LjgxMjY4IDUzLjI5MzI2IC05LjgxMDk5IDUzLjI5NDgxIC05LjgwOTc0IDUzLjI5NzEgLTkuODA4NjQgNTMuMjk4MzEgLTkuODA0MjUgNTMuMzAwODMgLTkuODAyNDIgNTMuMzAwMDUgLTkuNzk5MDQgNTMuMzAwNTUgLTkuNzk0MzggNTMuMjk5MDQgLTkuNzk0ODYgNTMuMjk2MDYgLTkuNzk1MzkgNTMuMjk2MTUgLTkuNzk4IDUzLjI5NTg1IC05LjgwMTE4IDUzLjI5NDUxIC05LjgwMzI0IDUzLjI5MzEzIC05LjgwNjA1IDUzLjI5MTQgLTkuODA4NjQgNTMuMjg5OTggLTkuODA4OTkgNTMuMjg4NDYgLTkuODA5NjIgNTMuMjg3MzggLTkuODEyMDQgNTMuMjg3MzggLTkuODEyMDQ8L2dtbDpwb3NMaXN0Pg0KKzwvZ21sOkxpbmVhclJpbmc+DQorPGdtbDpMaW5lYXJSaW5nPg0KKzxnbWw6cG9zTGlzdD41My4zNTMxMSAtOS41OTUyNiA1My4zNTQ2MSAtOS41OTE5OSA1My4zNTM5OSAtOS41ODc0MSA1My4zNTMxMyAtOS41ODUxMiA1My4zNTE4IC05LjU4NDI2IDUzLjM0OTk3IC05LjU4MjY5IDUzLjM0ODkyIC05LjU4NjE4IDUzLjM1MDkxIC05LjU4ODA4IDUzLjM1MjAyIC05LjU5MjE0IDUzLjM1MzExIC05LjU5NTI2IDUzLjM1MzExIC05LjU5NTI2PC9nbWw6cG9zTGlzdD4NCis8L2dtbDpMaW5lYXJSaW5nPg0KKzxnbWw6TGluZWFyUmluZz4NCis8Z21sOnBvc0xpc3Q+NTIuNjE0NDYgLTguOTcwMzEgNTIuNjA5MTkgLTguOTY2NyA1Mi42MDg1MyAtOC45Njk2IDUyLjYxMjA3IC04Ljk3MTYxIDUyLjYxNDQ2IC04Ljk3MDMxIDUyLjYxNDQ2IC04Ljk3MDMxPC9nbWw6cG9zTGlzdD4NCis8L2dtbDpMaW5lYXJSaW5nPg0KKzxnbWw6TGluZWFyUmluZz4NCis8Z21sOnBvc0xpc3Q+NTMuMzE4NzEgLTkuOTYwNTUgNTMuMzE5MjMgLTkuOTYyMzQgNTMuMzIwNDUgLTkuOTYzMzUgNTMuMzIxOSAtOS45NjM2MyA1My4zMjMxOCAtOS45NjUxIDUzLjMyNDIyIC05Ljk2NzQ1IDUzLjMyNjE5IC05Ljk2NjkgNTMuMzI3NjIgLTkuOTY0ODcgNTMuMzI3OTEgLTkuOTYyMDEgNTMuMzI3MzggLTkuOTU2MjIgNTMuMzI3MDQgLTkuOTUzMjMgNTMuMzI0OCAtOS45NTM1NyA1My4zMjI3OCAtOS45NTQ4OCA1My4zMjEyIC05Ljk1NjQxIDUzLjMxOTg1IC05Ljk1ODYyIDUzLjMxODcxIC05Ljk2MDU1IDUzLjMxODcxIC05Ljk2MDU1PC9nbWw6cG9zTGlzdD4NCis8L2dtbDpMaW5lYXJSaW5nPg0KKzxnbWw6TGluZWFyUmluZz4NCis8Z21sOnBvc0xpc3Q+NTMuODQ0MjQgLTkuNjM1IDUzLjg0NjQzIC05LjYzNjgxIDUzLjg0NzA2IC05LjYzMjcyIDUzLjg0NjYyIC05LjYzMDk0IDUzLjg0NTQ5IC05LjYyOTggNTMuODQ0MjQgLTkuNjM1IDUzLjg0NDI0IC05LjYzNTwvZ21sOnBvc0xpc3Q+DQorPC9nbWw6TGluZWFyUmluZz4NCis8Z21sOkxpbmVhclJpbmc+DQorPGdtbDpwb3NMaXN0PjUyLjcxMDM3IC05LjA0MzAzIDUyLjcxMjI5IC05LjA0NDYgNTIuNzEyMDEgLTkuMDQ4NjQgNTIuNzE0ODEgLTkuMDQ2ODggNTIuNzE2NzEgLTkuMDQxOTIgNTIuNzE3OCAtOS4wMzY2NyA1Mi43MTk1MyAtOS4wMzMwNCA1Mi43MjEyMiAtOS4wMzEwOCA1Mi43MjI3MiAtOS4wMjkzOCA1Mi43MjMyOSAtOS4wMjUwOSA1Mi43MjUxMSAtOS4wMjI3IDUyLjcyNTg2IC05LjAxODQ0IDUyLjcyNTM0IC05LjAxNTMyIDUyLjcyMzM3IC05LjAxNDM0IDUyLjcyMjQxIC05LjAxMDk5IDUyLjcxOTY5IC05LjAxMjkyIDUyLjcxNzYyIC05LjAxNDk3IDUyLjcxNzIyIC05LjAxODIyIDUyLjcxNjkyIC05LjAyMjU1IDUyLjcxNTY1IC05LjAyNjI3IDUyLjcxNDc5IC05LjAzMDk3IDUyLjcxMzgyIC05LjAzNTYzIDUyLjcxMjM5IC05LjAzOTE2IDUyLjcxMDY4IC05LjA0MTI3IDUyLjcxMDM3IC05LjA0MzAzIDUyLjcxMDM3IC05LjA0MzAzPC9nbWw6cG9zTGlzdD4NCis8L2dtbDpMaW5lYXJSaW5nPg0KKzxnbWw6TGluZWFyUmluZz4NCis8Z21sOnBvc0xpc3Q+NTUuMTEyMDMgLTguMzIwNjEgNTUuMTEyNDMgLTguMzI1MTYgNTUuMTEzMjkgLTguMzI4MDIgNTUuMTE1OTggLTguMzMwNjkgNTUuMTE3NTEgLTguMzMxNDEgNTUuMTE4OTggLTguMzMzMjUgNTUuMTE5NyAtOC4zMzY4OCA1NS4xMjA0NiAtOC4zMzk3MyA1NS4xMjE4NyAtOC4zNDA5MSA1NS4xMjQ2NSAtOC4zMzcwNCA1NS4xMjE1NyAtOC4zMzYwNiA1NS4xMjEgLTguMzMzMDkgNTUuMTIwNTUgLTguMzI5NSA1NS4xMTkxMSAtOC4zMjcyIDU1LjExNzUgLTguMzI2NDUgNTUuMTE1NzggLTguMzI1ODYgNTUuMTE1MjcgLTguMzIzNTQgNTUuMTE0NTcgLTguMzIxMDMgNTUuMTEzMjUgLTguMzE4MjUgNTUuMTEyMDMgLTguMzIwNjEgNTUuMTEyMDMgLTguMzIwNjE8L2dtbDpwb3NMaXN0Pg0KKzwvZ21sOkxpbmVhclJpbmc+DQorPGdtbDpMaW5lYXJSaW5nPg0KKzxnbWw6cG9zTGlzdD41Mi42NzY3OCAtOS4wNDY3MSA1Mi42Nzc2NyAtOS4wNDk4OSA1Mi42ODAwNiAtOS4wNDk4NyA1Mi42ODIxMyAtOS4wNDc5OCA1Mi42ODU1IC05LjA0MzAxIDUyLjY4OCAtOS4wNDAxMiA1Mi42OTA4NiAtOS4wMzYxMSA1Mi42OTE5MiAtOS4wMzEzMSA1Mi42ODk3NCAtOS4wMzA5MSA1Mi42ODc2NCAtOS4wMzA2NyA1Mi42ODYwMyAtOS4wMzEyOCA1Mi42ODQzOSAtOS4wMzM3MiA1Mi42ODM1MyAtOS4wMzY4OSA1Mi42ODI3MyAtOS4wNDA1MyA1Mi42ODExOCAtOS4wNDI5NyA1Mi42Nzc5MyAtOS4wNDQ3OSA1Mi42NzY3OCAtOS4wNDY3MSA1Mi42NzY3OCAtOS4wNDY3MTwvZ21sOnBvc0xpc3Q+DQorPC9nbWw6TGluZWFyUmluZz4NCis8Z21sOkxpbmVhclJpbmc+DQorPGdtbDpwb3NMaXN0PjUzLjMwNzczIC05LjYxODkgNTMuMzA4OTUgLTkuNjIyNjYgNTMuMzA3MTUgLTkuNjI3NzEgNTMuMzEyMTYgLTkuNjI5ODcgNTMuMzExOTUgLTkuNjMzMDQgNTMuMzEyNDUgLTkuNjM4MDYgNTMuMzExODUgLTkuNjQyODYgNTMuMzE4MjQgLTkuNjQxMTEgNTMuMzE4ODIgLTkuNjM3ODQgNTMuMzIwMDggLTkuNjM1NDYgNTMuMzIwNDMgLTkuNjMyOTEgNTMuMzIwNDUgLTkuNjI4NDYgNTMuMzE5MDcgLTkuNjI3MTQgNTMuMzE5ODUgLTkuNjIzNDQgNTMuMzE4MTUgLTkuNjIyODIgNTMuMzE3ODcgLTkuNjI1ODMgNTMuMzE2NTMgLTkuNjI2MzYgNTMuMzE1NTggLTkuNjI4MzMgNTMuMzE1MTUgLTkuNjMwNzIgNTMuMzEzNzIgLTkuNjI5OTkgNTMuMzEzODEgLTkuNjI1ODYgNTMuMzEyNyAtOS42MjQ0MyA1My4zMTQzMyAtOS42MjA3NCA1My4zMTQxMSAtOS42MTg1NSA1My4zMTI4NCAtOS42MTgzIDUzLjMxMTM1IC05LjYxNjk2IDUzLjMxIC05LjYxNjU2IDUzLjMwNzczIC05LjYxODkgNTMuMzA3NzMgLTkuNjE4OTwvZ21sOnBvc0xpc3Q+DQorPC9nbWw6TGluZWFyUmluZz4NCis8Z21sOkxpbmVhclJpbmc+DQorPGdtbDpwb3NMaXN0PjUyLjI1NTQgLTcuMDU4NTYgNTIuMjU1MzUgLTcuMDU3NzYgNTIuMjU1NDQgLTcuMDUxMzQgNTIuMjU1NTIgLTcuMDQ5MzcgNTIuMjU1NTIgLTcuMDQ5MzcgNTIuMjU1MzggLTcuMDQ2NSA1Mi4yNTU2IC03LjA0MTI4IDUyLjI1NTQ2IC03LjAzNzk4IDUyLjI1MTg5IC03LjA0MjM2IDUyLjI0OTY0IC03LjA0NTU0IDUyLjI0Njg1IC03LjA0ODY2IDUyLjI0NTM5IC03LjA1MjUyIDUyLjI0NTM5IC03LjA1MjUyIDUyLjI0NzMxIC03LjA1NDk5IDUyLjI0OTAzIC03LjA1NTQ4IDUyLjI1MDM0IC03LjA1NzEzIDUyLjI1MTk2IC03LjA1ODA2IDUyLjI1Mzk1IC03LjA1ODU5IDUyLjI1NTQgLTcuMDU4NTYgNTIuMjU1NCAtNy4wNTg1NjwvZ21sOnBvc0xpc3Q+DQorPC9nbWw6TGluZWFyUmluZz4NCis8Z21sOkxpbmVhclJpbmc+DQorPGdtbDpwb3NMaXN0PjUzLjEwMzM0IC05LjYzMjQxIDUzLjEwNDc1IC05LjYzMzQ2IDUzLjEwNTMgLTkuNjM1ODYgNTMuMTA3MDIgLTkuNjM2NTEgNTMuMTA2ODggLTkuNjMzMjcgNTMuMTA3ODggLTkuNjI5NjUgNTMuMTA5MjYgLTkuNjI4MzkgNTMuMTEwNjMgLTkuNjI3MjggNTMuMTEwOTEgLTkuNjIzNSA1My4xMDkzMiAtOS42MjI0MyA1My4xMDc3MiAtOS42MjE2NSA1My4xMDYzMiAtOS42MjMyMSA1My4xMDUwMSAtOS42MjQ2NCA1My4xMDM2MiAtOS42MjQ4MiA1My4xMDIzIC05LjYyNTE2IDUzLjEwMTE1IC05LjYyNTg1IDUzLjEwMTI5IC05LjYyOTA5IDUzLjEwMzM0IC05LjYzMjQxIDUzLjEwMzM0IC05LjYzMjQxPC9nbWw6cG9zTGlzdD4NCis8L2dtbDpMaW5lYXJSaW5nPg0KKzxnbWw6TGluZWFyUmluZz4NCis8Z21sOnBvc0xpc3Q+NTQuMDc1MSAtMTAuMTQ2MSA1NC4wNzc1IC0xMC4xNDQ4OCA1NC4wNzc4OCAtMTAuMTQyMTQgNTQuMDc2NzMgLTEwLjEzODkxIDU0LjA3NTEgLTEwLjE0NjEgNTQuMDc1MSAtMTAuMTQ2MTwvZ21sOnBvc0xpc3Q+DQorPC9nbWw6TGluZWFyUmluZz4NCis8Z21sOkxpbmVhclJpbmc+DQorPGdtbDpwb3NMaXN0PjUzLjg0NjY4IC05LjY2MzkxIDUzLjg0NTIyIC05LjY2MjI1IDUzLjg0NTk1IC05LjY1OTU3IDUzLjg0NzI3IC05LjY1NDg1IDUzLjg0NDUzIC05LjY1NTkgNTMuODQzNzIgLTkuNjU5OTUgNTMuODQzNjggLTkuNjYzMiA1My44NDM2MyAtOS42NjUzNyA1My44NDQxNiAtOS42NjcxOCA1My44NDY2OCAtOS42NjM5MSA1My44NDY2OCAtOS42NjM5MTwvZ21sOnBvc0xpc3Q+DQorPC9nbWw6TGluZWFyUmluZz4NCis8Z21sOkxpbmVhclJpbmc+DQorPGdtbDpwb3NMaXN0PjUzLjI3MTI4IC05LjcwODkzIDUzLjI3NDkxIC05LjcxMjY3IDUzLjI3NzA1IC05LjcxNDkxIDUzLjI3OTk3IC05LjcxNTQ0IDUzLjI4MTg0IC05LjcxNDg4IDUzLjI4Mjk0IC05LjcxMjE3IDUzLjI4MzU4IC05LjcwOTUyIDUzLjI4MDk5IC05LjcwNzA0IDUzLjI3OTUxIC05LjcwNDMxIDUzLjI4MDMyIC05LjcwMTg1IDUzLjI4MDc0IC05LjY5OTYyIDUzLjI3OTggLTkuNjk3MTQgNTMuMjc3NjEgLTkuNjk1NTEgNTMuMjc1NzggLTkuNjkzOTUgNTMuMjc0NjEgLTkuNjkzNTggNTMuMjczNCAtOS42OTY0MyA1My4yNzUzIC05LjY5OTg1IDUzLjI3NTI3IC05LjcwMzA2IDUzLjI3MzI1IC05LjcwNTc2IDUzLjI3MTI4IC05LjcwODkzIDUzLjI3MTI4IC05LjcwODkzPC9nbWw6cG9zTGlzdD4NCis8L2dtbDpMaW5lYXJSaW5nPg0KKzxnbWw6TGluZWFyUmluZz4NCis8Z21sOnBvc0xpc3Q+NTMuNTY5NjggLTYuMDgyNiA1My41NzA2NSAtNi4wODM5MyA1My41NzIxOCAtNi4wODQzOSA1My41NzM3NCAtNi4wODc2MSA1My41NzQ5OSAtNi4wODgzNSA1My41NzY1MiAtNi4wODY2NSA1My41NzU1MiAtNi4wODM2MiA1My41NzQ1NyAtNi4wODE4MyA1My41NzMzNiAtNi4wNzk3MiA1My41NzEyOSAtNi4wNzg2IDUzLjU3MDMyIC02LjA4MDA0IDUzLjU2OTY4IC02LjA4MjYgNTMuNTY5NjggLTYuMDgyNjwvZ21sOnBvc0xpc3Q+DQorPC9nbWw6TGluZWFyUmluZz4NCis8Z21sOkxpbmVhclJpbmc+DQorPGdtbDpwb3NMaXN0PjUxLjc4Njg1IC05Ljg5Nzc0IDUxLjc4Njc1IC05LjkwMTU4IDUxLjc4OTAzIC05Ljg5OTUgNTEuNzkwNjYgLTkuODk3NDYgNTEuNzkxOTUgLTkuODk1MTggNTEuNzkyOTMgLTkuODkzMTUgNTEuNzkyOTQgLTkuODg5NDMgNTEuNzkyMjUgLTkuODg3NjYgNTEuNzkwOSAtOS44ODg0MyA1MS43ODkyIC05Ljg5MDAzIDUxLjc4ODM3IC05Ljg5MjU0IDUxLjc4NzUxIC05Ljg5NTM0IDUxLjc4Njg1IC05Ljg5Nzc0IDUxLjc4Njg1IC05Ljg5Nzc0PC9nbWw6cG9zTGlzdD4NCis8L2dtbDpMaW5lYXJSaW5nPg0KKzxnbWw6TGluZWFyUmluZz4NCis8Z21sOnBvc0xpc3Q+NTMuODE5MTggLTkuNjQzODYgNTMuODE4ODQgLTkuNjQ4OTMgNTMuODIwNzMgLTkuNjQ4MzQgNTMuODIxNzIgLTkuNjQ3MTQgNTMuODIyOTcgLTkuNjQ2NDMgNTMuODIzOTUgLTkuNjQ1NTMgNTMuODI0NzIgLTkuNjQyMSA1My44MjMwOSAtOS42NDE3OCA1My44MjE1MiAtOS42NDE4MSA1My44MTk5NyAtOS42NDAyOCA1My44MTkxOCAtOS42NDM4NiA1My44MTkxOCAtOS42NDM4NjwvZ21sOnBvc0xpc3Q+DQorPC9nbWw6TGluZWFyUmluZz4NCis8Z21sOkxpbmVhclJpbmc+DQorPGdtbDpwb3NMaXN0PjUxLjgyOTYyIC05Ljc5NjkxIDUxLjgzMjEgLTkuNzkxIDUxLjgzMjEgLTkuNzkxIDUxLjgzMTY2IC05Ljc4NzA1IDUxLjgzMjkxIC05Ljc4MTQ5IDUxLjgzMjQgLTkuNzc5NzUgNTEuODMwOCAtOS43ODAxOCA1MS44MjkzNyAtOS43ODE5NyA1MS44MjgyMSAtOS43ODM4MyA1MS44MjU1NSAtOS43ODYxMyA1MS44MjQ0MyAtOS43ODg3NSA1MS44MjI4NyAtOS43OTIzMSA1MS44MjA4NSAtOS43OTQ1OCA1MS44MTgzNyAtOS43OTY5MSA1MS44MTczNiAtOS43OTkyNSA1MS44MTc1NiAtOS44MDE1MiA1MS44MTkwMyAtOS44MDE2NiA1MS44MjAzOCAtOS44MDA3MyA1MS44MjI1MSAtOS43OTgxOCA1MS44MjE5NyAtOS44MDE2NCA1MS44MjI0MyAtOS44MDQxMSA1MS44MjM2NSAtOS44MDUxIDUxLjgyNTU3IC05LjgwNDE0IDUxLjgyNzI1IC05LjgwMjY4IDUxLjgyODI4IC05LjgwMTI1IDUxLjgyOTYyIC05Ljc5NjkxIDUxLjgyOTYyIC05Ljc5NjkxPC9nbWw6cG9zTGlzdD4NCis8L2dtbDpMaW5lYXJSaW5nPg0KKzxnbWw6TGluZWFyUmluZz4NCis8Z21sOnBvc0xpc3Q+NTMuMzY1OTYgLTkuOTE0ODIgNTMuMzY1MDggLTkuOTIwODEgNTMuMzY3MjUgLTkuOTIwMjkgNTMuMzY5NDggLTkuOTE5OTYgNTMuMzcwNDIgLTkuOTIwOSA1My4zNzE4OCAtOS45MjExOCA1My4zNzI3OCAtOS45MjAxMiA1My4zNzM1MiAtOS45MTg3MiA1My4zNzI4MSAtOS45MTU1MSA1My4zNzQyNiAtOS45MTMxNiA1My4zNzE3MiAtOS45MTE0NSA1My4zNjk3NSAtOS45MTE4NSA1My4zNjkyOCAtOS45MTM0NiA1My4zNjc0MiAtOS45MTQ5NSA1My4zNjU5NiAtOS45MTQ4MiA1My4zNjU5NiAtOS45MTQ4MjwvZ21sOnBvc0xpc3Q+DQorPC9nbWw6TGluZWFyUmluZz4NCis8Z21sOkxpbmVhclJpbmc+DQorPGdtbDpwb3NMaXN0PjU0LjYzNjE1IC04LjEzNTQzIDU0LjYzOCAtOC4xMzY4MiA1NC42MzkzNyAtOC4xMzUxNCA1NC42NDAxNSAtOC4xMzI1NyA1NC42NDA5NiAtOC4xMzA5NSA1NC42NDE5NyAtOC4xMjc2MyA1NC42NDA0MyAtOC4xMjcwOCA1NC42Mzk4NCAtOC4xMjk2NyA1NC42MzkyIC04LjEzMTMyIDU0LjYzNzcyIC04LjEzMTcyIDU0LjYzNjUyIC04LjEzMzQ0IDU0LjYzNjE1IC04LjEzNTQzIDU0LjYzNjE1IC04LjEzNTQzPC9nbWw6cG9zTGlzdD4NCis8L2dtbDpMaW5lYXJSaW5nPg0KKzxnbWw6TGluZWFyUmluZz4NCis8Z21sOnBvc0xpc3Q+NTQuMTk4ODcgLTkuMTQ1NjggNTQuMTk5ODcgLTkuMTQ3MjcgNTQuMjAxODQgLTkuMTQ1MjggNTQuMjAzNTkgLTkuMTQ4MjcgNTQuMjAyOTYgLTkuMTUwOTggNTQuMjA0NTIgLTkuMTQ5NTQgNTQuMjA1NzEgLTkuMTUyNTggNTQuMjA3NDEgLTkuMTUzMzYgNTQuMjA5MjQgLTkuMTU0OTUgNTQuMjEwNyAtOS4xNTgwNCA1NC4yMTI2NyAtOS4xNjQ5OCA1NC4yMTQxMiAtOS4xNzI0NyA1NC4yMTUyMyAtOS4xNzgxNyA1NC4yMTY1NiAtOS4xODQ4NCA1NC4yMTgwNSAtOS4xOTIwMiA1NC4yMTkzMSAtOS4xOTUyNCA1NC4yMjA4MiAtOS4xOTc1NiA1NC4yMjIxNiAtOS4xOTUyOSA1NC4yMjE4MyAtOS4xOTAzNyA1NC4yMTk3OCAtOS4xODM1NiA1NC4yMTgzOCAtOS4xNzYzOSA1NC4yMTY4MiAtOS4xNjc2MyA1NC4yMTUxMyAtOS4xNjA4OSA1NC4yMTM5NCAtOS4xNTY0MyA1NC4yMTIyOSAtOS4xNTMzMSA1NC4yMTAzMiAtOS4xNTA5MSA1NC4yMDgyNCAtOS4xNTAzNiA1NC4yMDYgLTkuMTQ3OTIgNTQuMjA0NzkgLTkuMTQ1MTkgNTQuMjA0NjIgLTkuMTQwNzYgNTQuMjAyOSAtOS4xNDE3MSA1NC4yMDA4MyAtOS4xMzk0NSA1NC4xOTk1IC05LjE0Mjk3IDU0LjE5ODg3IC05LjE0NTY4IDU0LjE5ODg3IC05LjE0NTY4PC9nbWw6cG9zTGlzdD4NCis8L2dtbDpMaW5lYXJSaW5nPg0KKzxnbWw6TGluZWFyUmluZz4NCis8Z21sOnBvc0xpc3Q+NTEuNjc5MTMgLTguNTA5ODUgNTEuNjgwMzQgLTguNTExMzYgNTEuNjgxMzggLTguNTA5MTUgNTEuNjgyNDMgLTguNTA1MzEgNTEuNjgyMjQgLTguNTAzNTEgNTEuNjgxMTUgLTguNTAzMzYgNTEuNjgwMDUgLTguNTA2NzQgNTEuNjc5MTMgLTguNTA5ODUgNTEuNjc5MTMgLTguNTA5ODU8L2dtbDpwb3NMaXN0Pg0KKzwvZ21sOkxpbmVhclJpbmc+DQorPGdtbDpMaW5lYXJSaW5nPg0KKzxnbWw6cG9zTGlzdD41MS40NTI1OSAtOS40MjU3OSA1MS40NTcxNCAtOS40MjY3OSA1MS40NTk5IC05LjQyODAzIDUxLjQ2MTggLTkuNDI5NzIgNTEuNDYyOTQgLTkuNDMwNTQgNTEuNDY0MTUgLTkuNDI2NjMgNTEuNDY1MzcgLTkuNDIyNTggNTEuNDY2ODQgLTkuNDE3NTQgNTEuNDY3NzIgLTkuNDE0MzEgNTEuNDY5OCAtOS40MTQ5OSA1MS40NzExMyAtOS40MTQ1MSA1MS40NzIzNiAtOS40MTM4NSA1MS40NzM0MiAtOS40MTU4MiA1MS40NzU3MiAtOS40MTcxNCA1MS40NzU1NCAtOS40MjMyOSA1MS40Nzg5MyAtOS40MjYxNiA1MS40Nzk4NCAtOS40MjUxMyA1MS40ODA1NiAtOS40MjE0MyA1MS40ODA3OCAtOS40MTg1MyA1MS40ODIwMSAtOS40MTU2NiA1MS40ODEyIC05LjQxMjg1IDUxLjQ3OTI4IC05LjQwODggNTEuNDc0NTIgLTkuNDEwODYgNTEuNDczODQgLTkuNDA1MTMgNTEuNDcyODIgLTkuNDAxNCA1MS40NzM3OCAtOS4zOTgzNCA1MS40NzU2NSAtOS4zOTc5NSA1MS40Nzc4NCAtOS4zOTk1MyA1MS40Nzk2MiAtOS40MDI5NyA1MS40ODAzNiAtOS40MDc5NyA1MS40ODMxNiAtOS40MDYxNCA1MS40ODQ0IC05LjQwNTYzIDUxLjQ4NzM3IC05LjQwOTE0IDUxLjQ4OTQxIC05LjQwNjQyIDUxLjQ5MDgzIC05LjQwNDYyIDUxLjQ5MjUzIC05LjQwMjg3IDUxLjQ5MTk2IC05LjM5ODA1IDUxLjQ5MzA4IC05LjM5MjggNTEuNDkxNTUgLTkuMzkxMDMgNTEuNDg5MzkgLTkuMzkxNjYgNTEuNDg3NSAtOS4zODk2OCA1MS40ODQ5MSAtOS4zOTExMSA1MS40ODI0MSAtOS4zOTEyNCA1MS40Nzg5MyAtOS4zODk3IDUxLjQ3NzIyIC05LjM4NjU4IDUxLjQ3NDczIC05LjM4NDA2IDUxLjQ3MTkyIC05LjM4NDcgNTEuNDcyNzIgLTkuMzg3NTIgNTEuNDc0MDQgLTkuMzg5NjggNTEuNDc1MDcgLTkuMzkzMjcgNTEuNDcyNzcgLTkuMzkxOTUgNTEuNDcwMTQgLTkuMzkwMTQgNTEuNDY4MzIgLTkuMzkyMyA1MS40NjY5NSAtOS4zOTk3MiA1MS40NjQ5IC05LjQwNTA4IDUxLjQ2MjE1IC05LjQwOTg4IDUxLjQ1OTQ3IC05LjQxMzY2IDUxLjQ1NjQ2IC05LjQxNDU2IDUxLjQ1MjU5IC05LjQyNTc5IDUxLjQ1MjU5IC05LjQyNTc5PC9nbWw6cG9zTGlzdD4NCis8L2dtbDpMaW5lYXJSaW5nPg0KKzxnbWw6TGluZWFyUmluZz4NCis8Z21sOnBvc0xpc3Q+NTEuNzY3NzEgLTEwLjUyNjg3IDUxLjc2NzIzIC0xMC41MzA1IDUxLjc2NzI1IC0xMC41MzM2MiA1MS43NjkyNCAtMTAuNTMzMTUgNTEuNzcwODkgLTEwLjUzMjAxIDUxLjc3MjE4IC0xMC41Mjk5MSA1MS43NzMxNSAtMTAuNTI1OTUgNTEuNzcxNTUgLTEwLjUyMjkzIDUxLjc2OTM0IC0xMC41MjM5NSA1MS43Njc3MSAtMTAuNTI2ODcgNTEuNzY3NzEgLTEwLjUyNjg3PC9nbWw6cG9zTGlzdD4NCis8L2dtbDpMaW5lYXJSaW5nPg0KKzxnbWw6TGluZWFyUmluZz4NCis8Z21sOnBvc0xpc3Q+NTMuODU1MDQgLTkuOTM3MiA1My44NTQ3OCAtOS45Mzk0OCA1My44NTU1NSAtOS45NDQzMiA1My44NTY3NyAtOS45NDc5OCA1My44NTc4MiAtOS45NTAwNiA1My44NTk1OSAtOS45NDk4IDUzLjg2MTA0IC05Ljk0ODgzIDUzLjg2MjI5IC05Ljk1MDggNTMuODYxODkgLTkuOTU1MjQgNTMuODYyNDkgLTkuOTU4NDggNTMuODYzMzcgLTkuOTYxNjIgNTMuODY1MjIgLTkuOTYxNjggNTMuODY2OTEgLTkuOTYxMDggNTMuODY4ODIgLTkuOTU4OCA1My44NjkwOSAtOS45NTYyMSA1My44Njg5MSAtOS45NDk2MyA1My44Njg2MyAtOS45NDQ1OCA1My44Njc5MyAtOS45NDI1NyA1My44NjY4OCAtOS45Mzc4NSA1My44NjUwMiAtOS45MzY3IDUzLjg2Mzg1IC05LjkzNzcgNTMuODYyOCAtOS45Mzk1MiA1My44NjE2NSAtOS45NDAyMiA1My44NjA3IC05LjkzODAyIDUzLjg1OTk2IC05LjkzNTIyIDUzLjg1ODQxIC05LjkzNTA2IDUzLjg1NjUyIC05LjkzNTc4IDUzLjg1NTA0IC05LjkzNzIgNTMuODU1MDQgLTkuOTM3MjwvZ21sOnBvc0xpc3Q+DQorPC9nbWw6TGluZWFyUmluZz4NCis8Z21sOkxpbmVhclJpbmc+DQorPGdtbDpwb3NMaXN0PjUyLjA3MzcxIC0xMC42NDczNSA1Mi4wNzUyMyAtMTAuNjUwMDggNTIuMDc0OTEgLTEwLjY1NTEgNTIuMDc3MTUgLTEwLjY1NDg0IDUyLjA3ODU3IC0xMC42NTIxNSA1Mi4wNzc5NyAtMTAuNjQ5MzMgNTIuMDc4NjggLTEwLjY0NjMzIDUyLjA3OTMyIC0xMC42NDQyMiA1Mi4wNzgzMyAtMTAuNjQxNiA1Mi4wNzcwNCAtMTAuNjM5MzggNTIuMDc1NjQgLTEwLjY0MDcyIDUyLjA3NDgxIC0xMC42NDM5OSA1Mi4wNzM3MSAtMTAuNjQ3MzUgNTIuMDczNzEgLTEwLjY0NzM1PC9nbWw6cG9zTGlzdD4NCis8L2dtbDpMaW5lYXJSaW5nPg0KKzxnbWw6TGluZWFyUmluZz4NCis8Z21sOnBvc0xpc3Q+NTMuODg0NzMgLTkuNjY4ODUgNTMuODg0OTMgLTkuNjcxMzcgNTMuODg0NDIgLTkuNjc1MDIgNTMuODg2NDUgLTkuNjc0OTMgNTMuODg3NzYgLTkuNjczMTYgNTMuODg3MjkgLTkuNjcwNTcgNTMuODg2NzkgLTkuNjY4MyA1My44ODUzOSAtOS42NjU4NiA1My44ODQ3MyAtOS42Njg4NSA1My44ODQ3MyAtOS42Njg4NTwvZ21sOnBvc0xpc3Q+DQorPC9nbWw6TGluZWFyUmluZz4NCis8Z21sOkxpbmVhclJpbmc+DQorPGdtbDpwb3NMaXN0PjU1LjQyNTgyIC03LjIxODg2IDU1LjQyNTg5IC03LjIyMzcgNTUuNDI1ODQgLTcuMjI3MDcgNTUuNDI1NTcgLTcuMjMxMDYgNTUuNDI0NzcgLTcuMjM0NjUgNTUuNDI1MjIgLTcuMjM2OTcgNTUuNDI2MTYgLTcuMjM4NTQgNTUuNDI3MjkgLTcuMjM3NzQgNTUuNDI4NCAtNy4yMzMzNyA1NS40Mjk2NSAtNy4yMzIxIDU1LjQzMSAtNy4yMzA1MSA1NS40MjkgLTcuMjMwMDcgNTUuNDI5NzEgLTcuMjI2NDcgNTUuNDI4NyAtNy4yMjQ1NyA1NS40Mjg0IC03LjIyMDY2IDU1LjQyODI5IC03LjIxNzM0IDU1LjQyNTgyIC03LjIxODg2IDU1LjQyNTgyIC03LjIxODg2PC9nbWw6cG9zTGlzdD4NCis8L2dtbDpMaW5lYXJSaW5nPg0KKzxnbWw6TGluZWFyUmluZz4NCis8Z21sOnBvc0xpc3Q+NTMuNjA0NjMgLTEwLjE4NDk0IDUzLjYwNDc2IC0xMC4xOTA4NiA1My42MDUxIC0xMC4xOTUyNiA1My42MDU3OCAtMTAuMTk4OCA1My42MDcyMyAtMTAuMjAwMzMgNTMuNjA5MjEgLTEwLjE5NzAxIDUzLjYwODc4IC0xMC4xOTQxNCA1My42MDg1MyAtMTAuMTkyMzggNTMuNjA5NDMgLTEwLjE5MTMyIDUzLjYxMjE1IC0xMC4xOTMyNiA1My42MTExOCAtMTAuMTk4MDEgNTMuNjEwNTEgLTEwLjIwMjIyIDUzLjYxMDYzIC0xMC4yMDU4IDUzLjYxMDU5IC0xMC4yMDg4OSA1My42MTA0NSAtMTAuMjEyMjcgNTMuNjEwNiAtMTAuMjE1MzkgNTMuNjA5OTMgLTEwLjIxOTc1IDUzLjYwOTEgLTEwLjIyMzYyIDUzLjYxMDI5IC0xMC4yMjYzMyA1My42MTExMSAtMTAuMjI4OTYgNTMuNjEyNDIgLTEwLjIzMjY0IDUzLjYxMzI1IC0xMC4yMzY1MiA1My42MTM5NCAtMTAuMjM5OSA1My42MTQ3NyAtMTAuMjQzNzkgNTMuNjE1MjcgLTEwLjI0NTkgNTMuNjE2NyAtMTAuMjQ3NzMgNTMuNjE5MDQgLTEwLjI0ODUxIDUzLjYyMTYxIC0xMC4yNDg3IDUzLjYyMzc3IC0xMC4yNDgwNiA1My42MjUxNCAtMTAuMjQ1NTUgNTMuNjI2OCAtMTAuMjQxNjkgNTMuNjI4NDUgLTEwLjIzOTI0IDUzLjYyODU1IC0xMC4yMzUyMyA1My42MjYyNSAtMTAuMjMzODQgNTMuNjIzNTIgLTEwLjIzMzI5IDUzLjYyMTIyIC0xMC4yMzMzIDUzLjYxOTI5IC0xMC4yMzA2IDUzLjYxNzM2IC0xMC4yMjc4OSA1My42MTY2MyAtMTAuMjI1MTEgNTMuNjE2NDQgLTEwLjIyMjU5IDUzLjYxNjMyIC0xMC4yMjA1NiA1My42MTc4MSAtMTAuMjE4ODQgNTMuNjIwNDEgLTEwLjIyMTIxIDUzLjYyMjIzIC0xMC4yMjI4MSA1My42MjM5OCAtMTAuMjIxNjIgNTMuNjI1NzcgLTEwLjIxOTgxIDUzLjYyNTE0IC0xMC4yMTgxMiA1My42MjY5NSAtMTAuMjE2IDUzLjYyOTE3IC0xMC4yMTQ2IDUzLjYyOTQ1IC0xMC4yMTA2MyA1My42MjkxNCAtMTAuMjA1OTIgNTMuNjI4MTIgLTEwLjIwNDYzIDUzLjYyNzE5IC0xMC4yMDA4NyA1My42Mjc4NyAtMTAuMTk5IDUzLjYyODYyIC0xMC4xOTc1OSA1My42MzEyNSAtMTAuMTk4MTIgNTMuNjMzOTUgLTEwLjE5NzczIDUzLjYzNDQgLTEwLjE5Mzk0IDUzLjYzNjA0IC0xMC4xOTAyNSA1My42MzUxNCAtMTAuMTg3NDMgNTMuNjMzNzQgLTEwLjE4NDk4IDUzLjYzMjQxIC0xMC4xODE0NyA1My42MzIwNCAtMTAuMTc5MDcgNTMuNjMxODQgLTEwLjE3NjU1IDUzLjYzMTU1IC0xMC4xNzI3OCA1My42MzAyIC0xMC4xNjg0OCA1My42Mjc3MiAtMTAuMTY2OTIgNTMuNjI1OTIgLTEwLjE2NzggNTMuNjI0MTUgLTEwLjE3MDU0IDUzLjYyMzYgLTEwLjE3NDQ2IDUzLjYyMjA0IC0xMC4xNzcwOSA1My42MTk4MyAtMTAuMTc3MTMgNTMuNjE3OTIgLTEwLjE3NTUgNTMuNjE3MjIgLTEwLjE3MjEyIDUzLjYxNjM3IC0xMC4xNjczMSA1My42MTM2IC0xMC4xNjg2MiA1My42MTIwMSAtMTAuMTcxNTUgNTMuNjA5NDggLTEwLjE3MzUzIDUzLjYwNzc4IC0xMC4xNzY3NiA1My42MDU1NSAtMTAuMTc5NzEgNTMuNjA0NjMgLTEwLjE4NDk0IDUzLjYwNDYzIC0xMC4xODQ5NDwvZ21sOnBvc0xpc3Q+DQorPC9nbWw6TGluZWFyUmluZz4NCis8Z21sOkxpbmVhclJpbmc+DQorPGdtbDpwb3NMaXN0PjUyLjY2NTc1IC05LjA1NTg4IDUyLjY2ODkxIC05LjA1OTQ4IDUyLjY3MDE3IC05LjA1NzMgNTIuNjcxNTUgLTkuMDU1ODkgNTIuNjcyNTkgLTkuMDU0MjYgNTIuNjcyNjYgLTkuMDUxNzEgNTIuNjcxNzUgLTkuMDUwMzIgNTIuNjY5ODQgLTkuMDQ5OTcgNTIuNjY4MTUgLTkuMDUxNzggNTIuNjY2NjIgLTkuMDUzNzcgNTIuNjY1NzUgLTkuMDU1ODggNTIuNjY1NzUgLTkuMDU1ODg8L2dtbDpwb3NMaXN0Pg0KKzwvZ21sOkxpbmVhclJpbmc+DQorPGdtbDpMaW5lYXJSaW5nPg0KKzxnbWw6cG9zTGlzdD41MS44OTg1MSAtOC4xNzg5IDUxLjg5ODEzIC04LjE3Mzc5IDUxLjg5OTg5IC04LjE3MTgyIDUxLjkwMDQ2IC04LjE2NDQ3IDUxLjkwMjUyIC04LjE2MzcyIDUxLjkwNDI0IC04LjE2NjAzIDUxLjkwNTggLTguMTY1OTUgNTEuOTA4NjQgLTguMTY3OTcgNTEuOTA4NjMgLTguMTczMzEgNTEuOTA1ODEgLTguMTcxMTYgNTEuOTA0MTcgLTguMTcyNTUgNTEuOTAxNzUgLTguMTc0NzUgNTEuOTAwNjMgLTguMTc4NzQgNTEuODk4NTEgLTguMTc4OSA1MS44OTg1MSAtOC4xNzg5PC9nbWw6cG9zTGlzdD4NCis8L2dtbDpMaW5lYXJSaW5nPg0KKzxnbWw6TGluZWFyUmluZz4NCis8Z21sOnBvc0xpc3Q+NTMuODg4ODUgLTkuNjUwMzYgNTMuODg3MjYgLTkuNjQ1MjIgNTMuODg0MTkgLTkuNjQxNTIgNTMuODgzNDcgLTkuNjQ0MDMgNTMuODg0NTMgLTkuNjQ2MTEgNTMuODg1MDMgLTkuNjQ4MjQgNTMuODg1NDcgLTkuNjUxMjcgNTMuODg3MTEgLTkuNjUxNTkgNTMuODg4ODUgLTkuNjUwMzYgNTMuODg4ODUgLTkuNjUwMzY8L2dtbDpwb3NMaXN0Pg0KKzwvZ21sOkxpbmVhclJpbmc+DQorPGdtbDpMaW5lYXJSaW5nPg0KKzxnbWw6cG9zTGlzdD41My4zOTMzNiAtOS44MTc4MSA1My4zOTM4MSAtOS44MjA2NyA1My4zOTQxNSAtOS44MjI0MiA1My4zOTUzMiAtOS44MjQxOSA1My4zOTY1OCAtOS44MjE4MSA1My4zOTYwNSAtOS44MTczOSA1My4zOTUzOSAtOS44MTQ5NyA1My4zOTQxNiAtOS44MTUzNSA1My4zOTMzNiAtOS44MTc4MSA1My4zOTMzNiAtOS44MTc4MTwvZ21sOnBvc0xpc3Q+DQorPC9nbWw6TGluZWFyUmluZz4NCis8Z21sOkxpbmVhclJpbmc+DQorPGdtbDpwb3NMaXN0PjUzLjI0NTU0IC05Ljc0Njk2IDUzLjI0NzQ3IC05Ljc1MjUyIDUzLjI1MDEyIC05Ljc1MDEyIDUzLjI1MTM5IC05Ljc0ODk3IDUzLjI1MDkyIC05Ljc0NTA0IDUzLjI0OTIyIC05Ljc0NDI3IDUzLjI0Nzc4IC05Ljc0NTA4IDUzLjI0NTU0IC05Ljc0Njk2IDUzLjI0NTU0IC05Ljc0Njk2PC9nbWw6cG9zTGlzdD4NCis8L2dtbDpMaW5lYXJSaW5nPg0KKzxnbWw6TGluZWFyUmluZz4NCis8Z21sOnBvc0xpc3Q+NTQuNDMwMDYgLTguNjQ4ODcgNTQuNDI4MDQgLTguNjY5MTcgNTQuNDI5NjkgLTguNjY5MzEgNTQuNDMxNTIgLTguNjcyNjIgNTQuNDMyNzkgLTguNjcxNDEgNTQuNDMyNDYgLTguNjY3NTggNTQuNDM0MzkgLTguNjY0NTkgNTQuNDM2MDkgLTguNjYwNjIgNTQuNDM0NjkgLTguNjU3NzIgNTQuNDM1MDggLTguNjU0MTUgNTQuNDM0NiAtOC42NDk5OCA1NC40MzM1OSAtOC42NDY4IDU0LjQzMjYyIC04LjY0NDQzIDU0LjQzMTM5IC04LjY0NjU5IDU0LjQzMDA2IC04LjY0ODg3IDU0LjQzMDA2IC04LjY0ODg3PC9nbWw6cG9zTGlzdD4NCis8L2dtbDpMaW5lYXJSaW5nPg0KKzxnbWw6TGluZWFyUmluZz4NCis8Z21sOnBvc0xpc3Q+NTUuMTg0NDggLTcuNzc5ODkgNTUuMTg0NTIgLTcuNzg0NjkgNTUuMTg0MyAtNy43ODkzMiA1NS4xODU0NSAtNy43OTAxMyA1NS4xODY0MiAtNy43OTA5MSA1NS4xODc1MiAtNy43OTA3NCA1NS4xODgzNCAtNy43ODkxMSA1NS4xODgyMiAtNy43ODYwNSA1NS4xODcwOSAtNy43ODQ2IDU1LjE4NzE2IC03Ljc4MTI1IDU1LjE4ODM3IC03Ljc3OTAxIDU1LjE4OTYyIC03Ljc4MTQ1IDU1LjE5MTA3IC03Ljc4MDA2IDU1LjE4ODk1IC03Ljc3NjM5IDU1LjE4Nzc2IC03Ljc3NjM3IDU1LjE4NjA3IC03Ljc3NzA3IDU1LjE4NDQ4IC03Ljc3OTg5IDU1LjE4NDQ4IC03Ljc3OTg5PC9nbWw6cG9zTGlzdD4NCis8L2dtbDpMaW5lYXJSaW5nPg0KKzxnbWw6TGluZWFyUmluZz4NCis8Z21sOnBvc0xpc3Q+NTUuMDU5MDQgLTguMzY5ODMgNTUuMDYwMDEgLTguMzczOTcgNTUuMDYwOTUgLTguMzc3MDEgNTUuMDYyNjMgLTguMzc4MjMgNTUuMDY0MjIgLTguMzc1OTMgNTUuMDYzNzQgLTguMzcyOTggNTUuMDYzNTkgLTguMzcwNzEgNTUuMDYyMjYgLTguMzY5NjkgNTUuMDYwNzUgLTguMzY4NjYgNTUuMDU5MDQgLTguMzY5ODMgNTUuMDU5MDQgLTguMzY5ODM8L2dtbDpwb3NMaXN0Pg0KKzwvZ21sOkxpbmVhclJpbmc+DQorPGdtbDpMaW5lYXJSaW5nPg0KKzxnbWw6cG9zTGlzdD41My41ODQwMSAtNi4wNzY0MyA1My41ODYwOCAtNi4wNzc3IDUzLjU4NzU1IC02LjA3NDc2IDUzLjU4ODU2IC02LjA3MjA5IDUzLjU4Nzg2IC02LjA2ODQ4IDUzLjU4NjEyIC02LjA2ODYyIDUzLjU4NDk4IC02LjA3MjM2IDUzLjU4NDAxIC02LjA3NjQzIDUzLjU4NDAxIC02LjA3NjQzPC9nbWw6cG9zTGlzdD4NCis8L2dtbDpMaW5lYXJSaW5nPg0KKzxnbWw6TGluZWFyUmluZz4NCis8Z21sOnBvc0xpc3Q+NTMuMzE3NzYgLTkuNjU2NzEgNTMuMzE3NTcgLTkuNjYzNTcgNTMuMzE4NTEgLTkuNjY2MjEgNTMuMzE4MDYgLTkuNjY4NzQgNTMuMzE3MTkgLTkuNjcwNzIgNTMuMzE1ODUgLTkuNjcyOTQgNTMuMzE1NTkgLTkuNjc1NTEgNTMuMzE4MzkgLTkuNjc3NTYgNTMuMzIwMDkgLTkuNjc1NTggNTMuMzIxNTcgLTkuNjc1NTMgNTMuMzIzMzggLTkuNjc2MDMgNTMuMzI0NTUgLTkuNjczNjIgNTMuMzIwODYgLTkuNjcyNDggNTMuMzIxODEgLTkuNjcwNTEgNTMuMzE5ODYgLTkuNjY5MzcgNTMuMzIyMDcgLTkuNjY1MTcgNTMuMzIxNzIgLTkuNjYyMTkgNTMuMzIyNyAtOS42NTk5MiA1My4zMjMyNyAtOS42NTY4IDUzLjMyMTQxIC05LjY1NzIxIDUzLjMyMDIyIC05LjY1NDIzIDUzLjMxNzc2IC05LjY1NjcxIDUzLjMxNzc2IC05LjY1NjcxPC9nbWw6cG9zTGlzdD4NCis8L2dtbDpMaW5lYXJSaW5nPg0KKzxnbWw6TGluZWFyUmluZz4NCis8Z21sOnBvc0xpc3Q+NTMuMjc2MDcgLTkuNzI5NzYgNTMuMjc5NTMgLTkuNzM3MTcgNTMuMjgyMjEgLTkuNzM2ODkgNTMuMjgzMDggLTkuNzM0OTEgNTMuMjgxNTYgLTkuNzMyOTQgNTMuMjgxNTIgLTkuNzI5NCA1My4yODAyMyAtOS43MjgwOSA1My4yNzg1NiAtOS43MjY3MSA1My4yNzc1MiAtOS43MjcxMiA1My4yNzYwNyAtOS43Mjk3NiA1My4yNzYwNyAtOS43Mjk3NjwvZ21sOnBvc0xpc3Q+DQorPC9nbWw6TGluZWFyUmluZz4NCis8Z21sOkxpbmVhclJpbmc+DQorPGdtbDpwb3NMaXN0PjU1LjM4MDI1IC03LjMwMzExIDU1LjM4MTE0IC03LjMwNTY1IDU1LjM4MTA3IC03LjMwOTUgNTUuMzgyMjUgLTcuMzA5ODIgNTUuMzgzOTggLTcuMzA1NzEgNTUuMzgzMzkgLTcuMzAyNzMgNTUuMzgxNjUgLTcuMzAwNTggNTUuMzgwMjUgLTcuMzAzMTEgNTUuMzgwMjUgLTcuMzAzMTE8L2dtbDpwb3NMaXN0Pg0KKzwvZ21sOkxpbmVhclJpbmc+DQorPGdtbDpMaW5lYXJSaW5nPg0KKzxnbWw6cG9zTGlzdD41My42OTA3MSAtMTAuMDk4NDIgNTMuNjkxNzMgLTEwLjEwMTEgNTMuNjkxNDIgLTEwLjEwNDE1IDUzLjY5MDM0IC0xMC4xMDkwNSA1My42ODg3NyAtMTAuMTEzMDggNTMuNjg3NzIgLTEwLjExNzY4IDUzLjY4NzQ2IC0xMC4xMjQxNCA1My42ODc4NiAtMTAuMTI3NjQgNTMuNjg5OTEgLTEwLjEyOTkgNTMuNjkyMDcgLTEwLjEyOTIzIDUzLjY5MzU1IC0xMC4xMjc5OSA1My42OTQ1NiAtMTAuMTI1MjMgNTMuNjk1NTUgLTEwLjEyODIyIDUzLjY5Nzk5IC0xMC4xMjc2MSA1My43MDA0NiAtMTAuMTI2NTQgNTMuNzAxOTIgLTEwLjEyNTQ1IDUzLjcwMjMxIC0xMC4xMjI0MiA1My43MDMzNyAtMTAuMTE3ODEgNTMuNzA1ODggLTEwLjExNzM4IDUzLjcwODE0IC0xMC4xMTc5NyA1My43MTAzNCAtMTAuMTE2ODcgNTMuNzExNDkgLTEwLjExMzY3IDUzLjcxMDUxIC0xMC4xMDY1IDUzLjcwOTcgLTEwLjEwMjE0IDUzLjcwOCAtMTAuMDk3NDcgNTMuNzA5MTEgLTEwLjA5NDc0IDUzLjcxMDAxIC0xMC4wODk4IDUzLjcxMDk4IC0xMC4wODY0MiA1My43MTIyOCAtMTAuMDgwOTQgNTMuNzA5MTMgLTEwLjA3NTgxIDUzLjcwODEyIC0xMC4wNzE3NCA1My43MDY0MSAtMTAuMDc1MjggNTMuNzA0OTYgLTEwLjA3ODg3IDUzLjcwMzg0IC0xMC4wODE3NSA1My43MDE0MSAtMTAuMDgwOTcgNTMuNjk5NzQgLTEwLjA3OTcyIDUzLjY5ODEgLTEwLjA3OTU0IDUzLjY5NjcgLTEwLjA3OTc0IDUzLjY5Mzk4IC0xMC4wODQ0OSA1My42OTI3MyAtMTAuMDg5MiA1My42OTEzMiAtMTAuMDk0OTggNTMuNjkwNzEgLTEwLjA5ODQyIDUzLjY5MDcxIC0xMC4wOTg0MjwvZ21sOnBvc0xpc3Q+DQorPC9nbWw6TGluZWFyUmluZz4NCis8Z21sOkxpbmVhclJpbmc+DQorPGdtbDpwb3NMaXN0PjUzLjQwNDg3IC02LjA1OTE5IDUzLjQwNTM5IC02LjA2MjQ1IDUzLjQwNzEgLTYuMDYzNjggNTMuNDA4NjEgLTYuMDY3NjYgNTMuNDA5NDUgLTYuMDcwMDUgNTMuNDExMTMgLTYuMDY4OTggNTMuNDExMiAtNi4wNjY5OCA1My40MTAzOSAtNi4wNjM5OSA1My40MTE4NyAtNi4wNjEwNiA1My40MTA5NiAtNi4wNTc5MiA1My40MDk4MSAtNi4wNTkxOCA1My40MDgyNiAtNi4wNTkyIDUzLjQwNjI3IC02LjA1ODIzIDUzLjQwNDg3IC02LjA1OTE5IDUzLjQwNDg3IC02LjA1OTE5PC9nbWw6cG9zTGlzdD4NCis8L2dtbDpMaW5lYXJSaW5nPg0KKzxnbWw6TGluZWFyUmluZz4NCis8Z21sOnBvc0xpc3Q+NTEuODI4ODMgLTcuOTgxNjMgNTEuODI4NiAtNy45ODQ0MyA1MS44Mjk5MiAtNy45ODU2NCA1MS44MzE0NCAtNy45ODMwMiA1MS44MzE0NCAtNy45Nzc1NCA1MS44MzA0NiAtNy45NzY4MSA1MS44Mjk1NiAtNy45NzgxNyA1MS44Mjg4MyAtNy45ODE2MyA1MS44Mjg4MyAtNy45ODE2MzwvZ21sOnBvc0xpc3Q+DQorPC9nbWw6TGluZWFyUmluZz4NCis8Z21sOkxpbmVhclJpbmc+DQorPGdtbDpwb3NMaXN0PjUzLjE0MzgzIC05LjgzMjM1IDUzLjE0NDk0IC05LjgzNDczIDUzLjE0NjggLTkuODM1NzMgNTMuMTQ4MzcgLTkuODM0NTEgNTMuMTQ5OTMgLTkuODI5NjIgNTMuMTQ3MjQgLTkuODI5ODQgNTMuMTQ1MjMgLTkuODMwOCA1My4xNDM4MyAtOS44MzIzNSA1My4xNDM4MyAtOS44MzIzNTwvZ21sOnBvc0xpc3Q+DQorPC9nbWw6TGluZWFyUmluZz4NCis8Z21sOkxpbmVhclJpbmc+DQorPGdtbDpwb3NMaXN0PjUzLjI2NDM0IC05LjU1OTA5IDUzLjI2NTI3IC05LjU2MTcyIDUzLjI2Njc3IC05LjU1OTk5IDUzLjI2NDM0IC05LjU1OTA5IDUzLjI2NDM0IC05LjU1OTA5PC9nbWw6cG9zTGlzdD4NCis8L2dtbDpMaW5lYXJSaW5nPg0KKzxnbWw6TGluZWFyUmluZz4NCis8Z21sOnBvc0xpc3Q+NTMuODM5NjEgLTkuNjMyNTkgNTMuODM5NzQgLTkuNjM0NzggNTMuODM5NTQgLTkuNjM3ODYgNTMuODQwOTIgLTkuNjM2NDEgNTMuODQyMzYgLTkuNjM0MDIgNTMuODQyODUgLTkuNjMyNCA1My44NDI4NSAtOS42Mjk0NiA1My44NDM1NSAtOS42MjcyNiA1My44NDQ2MSAtOS42MjUxMiA1My44NDMyNCAtOS42MjA2NiA1My44NDIxMSAtOS42MjEwOCA1My44NDEyNCAtOS42MjMwOSA1My44NDA5OCAtOS42MjU4NSA1My44NDAxNyAtOS42Mjk3MyA1My44Mzk2MSAtOS42MzI1OSA1My44Mzk2MSAtOS42MzI1OTwvZ21sOnBvc0xpc3Q+DQorPC9nbWw6TGluZWFyUmluZz4NCis8Z21sOkxpbmVhclJpbmc+DQorPGdtbDpwb3NMaXN0PjUxLjkzMTg4IC0xMC4yOTI5IDUxLjkzMTYgLTEwLjI5NTIyIDUxLjkzMjk4IC0xMC4yOTUzNiA1MS45MzQ3OSAtMTAuMjk1NzUgNTEuOTM1NiAtMTAuMjk3MTEgNTEuOTM0NzYgLTEwLjI5OTYyIDUxLjkzNDA4IC0xMC4zMDIzIDUxLjkzNTE2IC0xMC4zMDYxMiA1MS45MzY0OSAtMTAuMzA0NDYgNTEuOTM3ODkgLTEwLjMwNDMgNTEuOTQwMTQgLTEwLjMwMjY4IDUxLjk0MTg1IC0xMC4zMDA5NSA1MS45NDI2OCAtMTAuMjk4NTkgNTEuOTQyNDcgLTEwLjI5NDIxIDUxLjk0MTgyIC0xMC4yOTA5NCA1MS45MzgyOCAtMTAuMjkxMjUgNTEuOTM5MDkgLTEwLjI4ODEzIDUxLjkzOTM2IC0xMC4yODQ2MSA1MS45NDAzIC0xMC4yNzk4NyA1MS45NDA3MSAtMTAuMjc3MTMgNTEuOTM4NjggLTEwLjI3NzE1IDUxLjkzNjY1IC0xMC4yNzgyMyA1MS45MzYxNiAtMTAuMjgwOTUgNTEuOTM3NTIgLTEwLjI4NDY3IDUxLjkzNjM5IC0xMC4yODg0NiA1MS45MzQ5OCAtMTAuMjg5ODEgNTEuOTMzMjMgLTEwLjI5MDk0IDUxLjkzMTg4IC0xMC4yOTI5IDUxLjkzMTg4IC0xMC4yOTI5PC9nbWw6cG9zTGlzdD4NCis8L2dtbDpMaW5lYXJSaW5nPg0KKzwvZ21sOm91dGVyQm91bmRhcnlJcz4NCis8L2dtbDpQb2x5Z29uPg0KKzwvZ2VvcnNzOndoZXJlPg0KKzwvZW50cnk+DQorPC9NYXA+DQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5ncmFwaGVkaXRvci9yZXNvdXJjZXMvdGVzdDIuZ3JhcGggYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmdyYXBoZWRpdG9yL3Jlc291cmNlcy90ZXN0Mi5ncmFwaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMTEyNWIwCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5ncmFwaGVkaXRvci9yZXNvdXJjZXMvdGVzdDIuZ3JhcGgKQEAgLTAsMCArMSwxOSBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4NCis8b3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoOkdyYXBoIHhtaTp2ZXJzaW9uPSIyLjAiIHhtbG5zOnhtaT0iaHR0cDovL3d3dy5vbWcub3JnL1hNSSIgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIgeG1sbnM6b3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoPSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgeG1sbnM6b3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHM9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy9sYWJlbHMuZWNvcmUiIHhtbG5zOm9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubm9kZXM9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy9ub2Rlcy5lY29yZSIgdVJJPSJwbGF0Zm9ybTovcmVzb3VyY2UvdGVzdDIvZ3JhcGhzL3Rlc3QuZ3JhcGgiIHR5cGVVUkk9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCI+DQorICA8ZHVibGluQ29yZSB0aXRsZT0iIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcmVzb3VyY2UvdGVzdC5ncmFwaCIgZGVzY3JpcHRpb249IiIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgY292ZXJhZ2U9InRlc3Q6MS8iIHNvdXJjZT0iUHJpbWFyeSAoaHR0cDovL3d3dy5ncmlkLnVuZXAuY2gvZGF0YS9kYXRhLnBocD9jYXRlZ29yeT1odW1hbl9yZWxhdGVkKS4gIiBzdWJqZWN0PSJMYWJlbDpwb3B1bGF0aW9uIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIA0KKw0KK3ZhbGlkPSJzdGFydD0yMDA2LTAxLTAxOyBlbmQ9MjAwNi0xMi0zMTsiLz4NCisNCisgIDxub2RlcyBrZXk9InN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL25vZGUvZ2VvL3JlZ2lvbi90ZXN0cmVnaW9uIj4NCisgICAgPHZhbHVlIHhzaTp0eXBlPSJvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLm5vZGVzOlJlZ2lvbiIgdVJJPSJzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9ub2RlL2dlby9yZWdpb24vdGVzdHJlZ2lvbiIgdHlwZVVSST0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL05vZGUiPg0KKyAgICAgIDxkdWJsaW5Db3JlIHRpdGxlPSJURVNUTEFORCIgaWRlbnRpZmllcj0ic3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vbm9kZS9nZW8vcmVnaW9uL3Rlc3QiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9Ob2RlIiANCisNCitzcGF0aWFsPSJzdGVtc3BhdGlhbDppbmxpbmU6Ly8vNDk4Ny42MSwxMDAwLjIsNDk4Ni45OSwxMDA0LjA5LDQ5ODUuMiwxMDA3LjYxLDQ5ODIuNDEsMTAxMC40LDQ5NzguODksMTAxMi4xOSw0OTc1LjAsMTAxMi44MSw0OTcxLjEsMTAxMi4xOSw0OTY3LjU4LDEwMTAuNCw0OTY0Ljc5LDEwMDcuNjEsNDk2My4wLDEwMDQuMDksNDk2Mi4zOCwxMDAwLjIsNDk2My4wLDk5Ni4zLDQ5NjQuNzksOTkyLjc4LDQ5NjcuNTgsOTg5Ljk5LDQ5NzEuMSw5ODguMiw0OTc1LjAsOTg3LjU4LDQ5NzguODksOTg4LjIsNDk4Mi40MSw5ODkuOTksNDk4NS4yLDk5Mi43OCw0OTg2Ljk5LDk5Ni4zLDQ5ODcuNjEsMTAwMC4yIi8+DQorDQorDQorICAgICAgPGxhYmVscyB4c2k6dHlwZT0ib3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHM6UG9wdWxhdGlvbkxhYmVsIiBocmVmPSIjLy9Abm9kZUxhYmVscy4wL0B2YWx1ZSIvPg0KKyAgICAgIDxsYWJlbHMgeHNpOnR5cGU9Im9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzOkFyZWFMYWJlbCIgaHJlZj0iIy8vQG5vZGVMYWJlbHMuMS9AdmFsdWUiLz4NCisgICAgPC92YWx1ZT4NCisgIDwvbm9kZXM+DQorDQorPC9vcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGg6R3JhcGg+DQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5ncmFwaGVkaXRvci9yZXNvdXJjZXMvdGVzdDIubW9kZWwgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmdyYXBoZWRpdG9yL3Jlc291cmNlcy90ZXN0Mi5tb2RlbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iOGI0YjM0Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5ncmFwaGVkaXRvci9yZXNvdXJjZXMvdGVzdDIubW9kZWwKQEAgLTAsMCArMSw2IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/Pg0KKzxvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWw6TW9kZWwgeG1pOnZlcnNpb249IjIuMCIgeG1sbnM6eG1pPSJodHRwOi8vd3d3Lm9tZy5vcmcvWE1JIiB4bWxuczpvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWw9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL21vZGVsLmVjb3JlIiB1Ukk9InBsYXRmb3JtOi9yZXNvdXJjZS90ZXN0Mi5tb2RlbCIgdHlwZVVSST0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL01vZGVsIj4NCisgIDxkdWJsaW5Db3JlIHRpdGxlPSJUZXN0IGNhbm9uaWNhbCBncmFwaCIgaWRlbnRpZmllcj0icGxhdGZvcm06L3Jlc291cmNlL3Rlc3QyLm1vZGVsIiBkZXNjcmlwdGlvbj0iIiBjcmVhdG9yPSJXaWdnZXJKIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL21vZGVsLmVjb3JlIiBjb3ZlcmFnZT0idGVzdDoxLyIgc3ViamVjdD0iTW9kZWw6Z2VvZ3JhcGh5IiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vTW9kZWwiIGNyZWF0ZWQ9IjIwMTEtMDMtMTUiLz4NCisgIDxncmFwaHMgaHJlZj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmdyYXBoZWRpdG9yL3Jlc291cmNlcy90ZXN0Mi5ncmFwaCMvIi8+DQorICA8Z3JhcGhzIGhyZWY9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5ncmFwaGVkaXRvci9yZXNvdXJjZXMvdGVzdDJfYXJlYS5ncmFwaCMvIi8+DQorPC9vcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWw6TW9kZWw+DQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5ncmFwaGVkaXRvci9yZXNvdXJjZXMvdGVzdDJfYXJlYS5ncmFwaCBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZ3JhcGhlZGl0b3IvcmVzb3VyY2VzL3Rlc3QyX2FyZWEuZ3JhcGgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODViYmIxMQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZ3JhcGhlZGl0b3IvcmVzb3VyY2VzL3Rlc3QyX2FyZWEuZ3JhcGgKQEAgLTAsMCArMSwxMSBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4NCis8b3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoOkdyYXBoIHhtaTp2ZXJzaW9uPSIyLjAiIHhtbG5zOnhtaT0iaHR0cDovL3d3dy5vbWcub3JnL1hNSSIgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIgeG1sbnM6b3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoPSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgeG1sbnM6b3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHM9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy9sYWJlbHMuZWNvcmUiIHVSST0icGxhdGZvcm06L3Jlc291cmNlL3Rlc3QyX2FyZWEuZ3JhcGgiIHR5cGVVUkk9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCI+DQorICA8ZHVibGluQ29yZSB0aXRsZT0iIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcmVzb3VyY2UvdGVzdDJfYXJlYS5ncmFwaCIgZGVzY3JpcHRpb249IiIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgY292ZXJhZ2U9InRlc3Q6MS8iIHNvdXJjZT0iaHR0cDovL3d3dy5ncmlkLnVuZXAuY2gvZGF0YS9kYXRhLnBocD9jYXRlZ29yeT1odW1hbl9yZWxhdGVkIiBzdWJqZWN0PSJMYWJlbDphcmVhIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIvPg0KKyAgDQorPG5vZGVMYWJlbHMga2V5PSJzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9sYWJlbC9hcmVhL3Rlc3RhcmVhIj4NCisgICAgPHZhbHVlIHhzaTp0eXBlPSJvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVsczpBcmVhTGFiZWwiIHVSST0ic3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vbGFiZWwvYXJlYS90ZXN0YXJlYSIgdHlwZVVSST0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL2xhYmVsIiB1UklPZklkZW50aWZpYWJsZVRvQmVMYWJlbGVkPSJzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9ub2RlL2dlby9yZWdpb24vdGVzdHJlZ2lvbiI+DQorICAgICAgPGR1YmxpbkNvcmUgaWRlbnRpZmllcj0ic3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vbGFiZWwvYXJlYS90ZXN0YXJlYSIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL2xhYmVsIi8+DQorICAgICAgPGN1cnJlbnRWYWx1ZSB4c2k6dHlwZT0ib3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHM6QXJlYUxhYmVsVmFsdWUiIGFyZWE9IjY4ODk1LjAiIGF2ZXJhZ2VFeHRlbnQ9IjI2Mi40Nzg1NzA1NTM4NjQ1Ii8+DQorICAgIDwvdmFsdWU+DQorICA8L25vZGVMYWJlbHM+DQorPC9vcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGg6R3JhcGg+DQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5ncmFwaGVkaXRvci9zcmMvb3JnL2VjbGlwc2Uvc3RlbS90ZXN0cy9ncmFwaGVkaXRvci9BY3RpdmF0b3IuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZ3JhcGhlZGl0b3Ivc3JjL29yZy9lY2xpcHNlL3N0ZW0vdGVzdHMvZ3JhcGhlZGl0b3IvQWN0aXZhdG9yLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzU3ZjExNQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZ3JhcGhlZGl0b3Ivc3JjL29yZy9lY2xpcHNlL3N0ZW0vdGVzdHMvZ3JhcGhlZGl0b3IvQWN0aXZhdG9yLmphdmEKQEAgLTAsMCArMSw1MCBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmdyYXBoZWRpdG9yOw0KKw0KK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5wbHVnaW4uQWJzdHJhY3RVSVBsdWdpbjsNCitpbXBvcnQgb3JnLm9zZ2kuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHQ7DQorDQorLyoqDQorICogVGhlIGFjdGl2YXRvciBjbGFzcyBjb250cm9scyB0aGUgcGx1Zy1pbiBsaWZlIGN5Y2xlDQorICovDQorcHVibGljIGNsYXNzIEFjdGl2YXRvciBleHRlbmRzIEFic3RyYWN0VUlQbHVnaW4gew0KKw0KKwkvLyBUaGUgcGx1Zy1pbiBJRA0KKwlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBQTFVHSU5fSUQgPSAib3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5ncmFwaGVkaXRvciI7IC8vJE5PTi1OTFMtMSQNCisNCisJLy8gVGhlIHNoYXJlZCBpbnN0YW5jZQ0KKwlwcml2YXRlIHN0YXRpYyBBY3RpdmF0b3IgcGx1Z2luOw0KKwkNCisJLyoqDQorCSAqIFRoZSBjb25zdHJ1Y3Rvcg0KKwkgKi8NCisJcHVibGljIEFjdGl2YXRvcigpIHsNCisJfQ0KKw0KKwkvKg0KKwkgKiAobm9uLUphdmFkb2MpDQorCSAqIEBzZWUgb3JnLmVjbGlwc2UudWkucGx1Z2luLkFic3RyYWN0VUlQbHVnaW4jc3RhcnQob3JnLm9zZ2kuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHQpDQorCSAqLw0KKwlwdWJsaWMgdm9pZCBzdGFydChCdW5kbGVDb250ZXh0IGNvbnRleHQpIHRocm93cyBFeGNlcHRpb24gew0KKwkJc3VwZXIuc3RhcnQoY29udGV4dCk7DQorCQlwbHVnaW4gPSB0aGlzOw0KKwl9DQorDQorCS8qDQorCSAqIChub24tSmF2YWRvYykNCisJICogQHNlZSBvcmcuZWNsaXBzZS51aS5wbHVnaW4uQWJzdHJhY3RVSVBsdWdpbiNzdG9wKG9yZy5vc2dpLmZyYW1ld29yay5CdW5kbGVDb250ZXh0KQ0KKwkgKi8NCisJcHVibGljIHZvaWQgc3RvcChCdW5kbGVDb250ZXh0IGNvbnRleHQpIHRocm93cyBFeGNlcHRpb24gew0KKwkJcGx1Z2luID0gbnVsbDsNCisJCXN1cGVyLnN0b3AoY29udGV4dCk7DQorCX0NCisNCisJLyoqDQorCSAqIFJldHVybnMgdGhlIHNoYXJlZCBpbnN0YW5jZQ0KKwkgKg0KKwkgKiBAcmV0dXJuIHRoZSBzaGFyZWQgaW5zdGFuY2UNCisJICovDQorCXB1YmxpYyBzdGF0aWMgQWN0aXZhdG9yIGdldERlZmF1bHQoKSB7DQorCQlyZXR1cm4gcGx1Z2luOw0KKwl9DQorDQorfQ0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZ3JhcGhlZGl0b3Ivc3JjL29yZy9lY2xpcHNlL3N0ZW0vdGVzdHMvZ3JhcGhlZGl0b3IvR3JhcGhDYW52YXNUZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmdyYXBoZWRpdG9yL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3Rlc3RzL2dyYXBoZWRpdG9yL0dyYXBoQ2FudmFzVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ1MWNkN2QKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmdyYXBoZWRpdG9yL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3Rlc3RzL2dyYXBoZWRpdG9yL0dyYXBoQ2FudmFzVGVzdC5qYXZhCkBAIC0wLDAgKzEsMjI0IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZ3JhcGhlZGl0b3I7DQorDQorDQoraW1wb3J0IGphdmEuaW8uRmlsZTsNCitpbXBvcnQgamF2YS5pby5GaWxlSW5wdXRTdHJlYW07DQoraW1wb3J0IGphdmEuaW8uRmlsZU91dHB1dFN0cmVhbTsNCitpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsNCitpbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbTsNCitpbXBvcnQgamF2YS5pby5PdXRwdXRTdHJlYW07DQoraW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7DQoraW1wb3J0IGphdmEudXRpbC5MaXN0Ow0KKw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuVVJJOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguR3JhcGg7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5Nb2RlbDsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS51aS5ncmFwaGVkaXRvci5HcmFwaENhbnZhczsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnJlc291cmNlLlJlc291cmNlOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUucmVzb3VyY2UuUmVzb3VyY2VTZXQ7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5yZXNvdXJjZS5pbXBsLlJlc291cmNlU2V0SW1wbDsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnhtaS5pbXBsLlhNSVJlc291cmNlRmFjdG9yeUltcGw7DQorDQoraW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsNCitpbXBvcnQganVuaXQudGV4dHVpLlRlc3RSdW5uZXI7DQorDQoraW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5Db3JlRXhjZXB0aW9uOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGxhdGZvcm07DQorDQorLyoqDQorICogQGF1dGhvciBXaWdnZXJKDQorICoNCisgKi8NCitwdWJsaWMgY2xhc3MgR3JhcGhDYW52YXNUZXN0IGV4dGVuZHMgVGVzdENhc2Ugew0KKw0KKwkNCisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFhNTF9URVNUX0ZJTEUgPSAidGVzdDFfTUFQLnhtbCI7DQorCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBHUkFQSF9URVNUX0ZJTEUgPSAidGVzdDEuZ3JhcGgiOw0KKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgTU9ERUxfVEVTVF9GSUxFX01PREVMID0gInRlc3QyLm1vZGVsIjsNCisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIE1PREVMX1RFU1RfRklMRV9HUkFQSF8xID0gInRlc3QyLmdyYXBoIjsNCisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIE1PREVMX1RFU1RfRklMRV9HUkFQSF8yID0gInRlc3QyX2FyZWEuZ3JhcGgiOw0KKwkNCisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFJVTlRJTUVfV09SS1NQQUNFX1BBVEggPSAgUGxhdGZvcm0uZ2V0TG9jYXRpb24oKS50b09TU3RyaW5nKCk7DQorCXByaXZhdGUgZmluYWwgc3RhdGljIFN0cmluZyBSRUZFUkVOQ0VfRElSID0gIi4vcmVzb3VyY2VzLyI7IC8vJE5PTi1OTFMtMSQNCisJcHJpdmF0ZSBmaW5hbCBzdGF0aWMgU3RyaW5nIHNlcCA9IEZpbGUuc2VwYXJhdG9yOw0KKwlwcm90ZWN0ZWQgR3JhcGhDYW52YXMgZml4dHVyZSA9IG51bGw7DQorCQ0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsNCisJCVRlc3RSdW5uZXIucnVuKEdyYXBoQ2FudmFzVGVzdC5jbGFzcyk7DQorCX0NCisJDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHNlZSBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2Ujc2V0VXAoKQ0KKwkgKiBAZ2VuZXJhdGVkIE5PVA0KKwkgKi8NCisJQE92ZXJyaWRlDQorCXByb3RlY3RlZCB2b2lkIHNldFVwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7DQorCQlzZXRGaXh0dXJlKGNyZWF0ZUZpeHR1cmUoKSk7DQorCX0NCisJDQorCQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBzZWUganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlI3RlYXJEb3duKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJQE92ZXJyaWRlDQorCXByb3RlY3RlZCB2b2lkIHRlYXJEb3duKCkgdGhyb3dzIEV4Y2VwdGlvbiB7DQorCQlzZXRGaXh0dXJlKG51bGwpOw0KKwl9DQorDQorCQ0KKwkNCisJLyoqDQorCSAqIFNldHMgdGhlIGZpeHR1cmUgZm9yIHRoaXMgUGlwZSBUcmFuc3BvcnQgRWRnZSB0ZXN0IGNhc2UuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgdm9pZCBzZXRGaXh0dXJlKEdyYXBoQ2FudmFzIGZpeHR1cmUpIHsNCisJCXRoaXMuZml4dHVyZSA9IGZpeHR1cmU7DQorCX0NCisNCisJLyoqDQorCSAqIFJldHVybnMgdGhlIGZpeHR1cmUgZm9yIHRoaXMgUGlwZSBUcmFuc3BvcnQgRWRnZSB0ZXN0IGNhc2UuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgR3JhcGhDYW52YXMgZ2V0Rml4dHVyZSgpIHsNCisJCXJldHVybiBmaXh0dXJlOw0KKwl9DQorCQ0KKwkvKioNCisJICogY3JlYXRlIHRoZSBmaXh0dXJlDQorCSAqKi8NCisJcHJvdGVjdGVkIHN0YXRpYyBHcmFwaENhbnZhcyBjcmVhdGVGaXh0dXJlKCkgew0KKwkJR3JhcGhDYW52YXMgZ3JhcGhDYW52YXMgPSBuZXcgR3JhcGhDYW52YXMoKTsJCQ0KKwkJcmV0dXJuIGdyYXBoQ2FudmFzOw0KKwl9DQorCQ0KKwkNCisJLyoqDQorCSAqIEBnZW5lcmF0ZWQgTk9UDQorCSAqLw0KKwlwdWJsaWMgdm9pZCB0ZXN0R3JhcGhDYW52YXMoKSB7DQorCQkNCisJCVN0cmluZyBYTUxfRklMRV9QQVRIX0dSQVBIID0gZ2V0VGVzdEZpbGUoWE1MX1RFU1RfRklMRSk7DQorCQlTdHJpbmcgVEVTVF9GSUxFX1BBVEhfR1JBUEggPSBnZXRUZXN0RmlsZShHUkFQSF9URVNUX0ZJTEUpOw0KKwkJDQorCQlSZXNvdXJjZVNldCByZXNvdXJjZVNldCA9IG5ldyBSZXNvdXJjZVNldEltcGwoKTsNCisJCS8vIFJlZ2lzdGVyIHRoZSBhcHByb3ByaWF0ZSByZXNvdXJjZSBmYWN0b3J5IHRvIGhhbmRsZSBhbGwgZmlsZSBleHRlbnNpb25zLg0KKwkJcmVzb3VyY2VTZXQuZ2V0UmVzb3VyY2VGYWN0b3J5UmVnaXN0cnkoKS5nZXRFeHRlbnNpb25Ub0ZhY3RvcnlNYXAoKS5wdXQNCisJCQkoUmVzb3VyY2UuRmFjdG9yeS5SZWdpc3RyeS5ERUZBVUxUX0VYVEVOU0lPTiwgDQorCQkJIG5ldyBYTUlSZXNvdXJjZUZhY3RvcnlJbXBsKCkpOw0KKwkJDQorCQlMaXN0PEdyYXBoPiBncmFwaExpc3QgPSBuZXcgQXJyYXlMaXN0PEdyYXBoPigpOw0KKwkNCisJCUZpbGUgZmlsZSA9IG5ldyBGaWxlKFRFU1RfRklMRV9QQVRIX0dSQVBIKTsJDQorCQlVUkkgdXJpID0gVVJJLmNyZWF0ZUZpbGVVUkkoZmlsZS5nZXRBYnNvbHV0ZVBhdGgoKSk7DQorCQlSZXNvdXJjZSByZXNvdXJjZSA9IHJlc291cmNlU2V0LmdldFJlc291cmNlKHVyaSwgdHJ1ZSk7DQorCQ0KKwkJR3JhcGggZ3JhcGggPSAoR3JhcGgpIHJlc291cmNlLmdldENvbnRlbnRzKCkuZ2V0KDApOw0KKwkJDQorCQkvKg0KKwkJU3lzdGVtLm91dC5wcmludGxuKFhNTF9GSUxFX1BBVEhfR1JBUEgpOw0KKwkJU3lzdGVtLm91dC5wcmludGxuKGZpbGUuZ2V0QWJzb2x1dGVQYXRoKCkpOw0KKwkJU3lzdGVtLm91dC5wcmludGxuKGdyYXBoID09IG51bGwpOw0KKwkJU3lzdGVtLm91dC5wcmludGxuKGdyYXBoLmdldE51bU5vZGVzKCkpOw0KKwkJU3lzdGVtLm91dC5wcmludGxuKGdyYXBoLmdldE51bU5vZGVMYWJlbHMoKSk7DQorCQlTeXN0ZW0ub3V0LnByaW50bG4oZ3JhcGguZ2V0RHVibGluQ29yZSgpLmdldFNwYXRpYWwoKSk7CQkNCisJCSovDQorCQkNCisJCWdyYXBoTGlzdC5hZGQoZ3JhcGgpOw0KKwkJDQorCQkNCisJCWZpeHR1cmUuZGlzcGxheShncmFwaExpc3QsIG51bGwsIG51bGwsIG51bGwpOw0KKwkJDQorCQkNCisJCWdyYXBoTGlzdCA9IG5ldyBBcnJheUxpc3Q8R3JhcGg+KCk7DQorCQlTdHJpbmcgVEVTVF9GSUxFX1BBVEhfTU9ERUxfTU9ERUwgPSBnZXRUZXN0RmlsZShNT0RFTF9URVNUX0ZJTEVfTU9ERUwpOw0KKwkJU3RyaW5nIFRFU1RfRklMRV9QQVRIX01PREVMX0dSQVBIXzEgPSBnZXRUZXN0RmlsZShNT0RFTF9URVNUX0ZJTEVfR1JBUEhfMSk7DQorCQlTdHJpbmcgVEVTVF9GSUxFX1BBVEhfTU9ERUxfR1JBUEhfMiA9IGdldFRlc3RGaWxlKE1PREVMX1RFU1RfRklMRV9HUkFQSF8yKTsNCisNCisJCQ0KKwkJZmlsZSA9IG5ldyBGaWxlKFRFU1RfRklMRV9QQVRIX01PREVMX0dSQVBIXzEpOwkNCisJCXVyaSA9IFVSSS5jcmVhdGVGaWxlVVJJKGZpbGUuZ2V0QWJzb2x1dGVQYXRoKCkpOw0KKwkJcmVzb3VyY2UgPSByZXNvdXJjZVNldC5nZXRSZXNvdXJjZSh1cmksIHRydWUpOw0KKwkJZ3JhcGggPSAoR3JhcGgpIHJlc291cmNlLmdldENvbnRlbnRzKCkuZ2V0KDApOw0KKwkJZ3JhcGhMaXN0LmFkZChncmFwaCk7DQorCQkNCisJCWZpbGUgPSBuZXcgRmlsZShURVNUX0ZJTEVfUEFUSF9NT0RFTF9HUkFQSF8yKTsJDQorCQl1cmkgPSBVUkkuY3JlYXRlRmlsZVVSSShmaWxlLmdldEFic29sdXRlUGF0aCgpKTsNCisJCXJlc291cmNlID0gcmVzb3VyY2VTZXQuZ2V0UmVzb3VyY2UodXJpLCB0cnVlKTsNCisJCWdyYXBoID0gKEdyYXBoKSByZXNvdXJjZS5nZXRDb250ZW50cygpLmdldCgwKTsNCisJCWdyYXBoTGlzdC5hZGQoZ3JhcGgpOw0KKw0KKwkJDQorCQlmaWxlID0gbmV3IEZpbGUoVEVTVF9GSUxFX1BBVEhfTU9ERUxfTU9ERUwpOwkNCisJCXVyaSA9IFVSSS5jcmVhdGVGaWxlVVJJKGZpbGUuZ2V0QWJzb2x1dGVQYXRoKCkpOw0KKwkJcmVzb3VyY2UgPSByZXNvdXJjZVNldC5nZXRSZXNvdXJjZSh1cmksIHRydWUpOw0KKwkJTW9kZWwgbW9kZWwgPSAoTW9kZWwpIHJlc291cmNlLmdldENvbnRlbnRzKCkuZ2V0KDApOw0KKwkJbW9kZWwuZ2V0R3JhcGhzKCkuY2xlYXIoKTsNCisJCW1vZGVsLmdldEdyYXBocygpLmFkZEFsbChncmFwaExpc3QpOw0KKwkJCQ0KKwkJZml4dHVyZS5kaXNwbGF5KGdyYXBoTGlzdCwgbnVsbCwgbnVsbCwgbW9kZWwpOw0KKwkJDQorCQkvL2Fzc2VydFRydWUoZ2V0Rml4dHVyZSgpLnNhbmUoKSk7DQorCX0NCisJDQorCQ0KKwkNCisJcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIGdldFRlc3RGaWxlKFN0cmluZyB0ZXN0RmlsZW5hbWUpIHsNCisJCS8vIDEuIGNvcHkgdGhlIHRlc3QgZmlsZSBGUk9NIHRoZSBzb3VyY2UgZGlyZWN0b3J5IFRPIHRoZSBydW50aW1lIHdvcmtzcGFjZSB3aGVyZSBldmVyIHRoYXQgaXMNCisJCUZpbGUgcmVmRGlyZWN0b3J5ID0gbmV3IEZpbGUoUkVGRVJFTkNFX0RJUik7DQorCQlpZiAocmVmRGlyZWN0b3J5LmlzRGlyZWN0b3J5KCkpIHsNCisJCQkvLyBzaG91bGQgYWx3YXlzIGJlIHRydWUNCisJCQlGaWxlW10gZmlsZXMgPSByZWZEaXJlY3RvcnkubGlzdEZpbGVzKCk7DQorCQkJaWYgKGZpbGVzPT1udWxsKSBmYWlsKCJFcnJvcjpHcmFwaENhbnZhc1Rlc3QgRXhhbXBsZSBGaWxlIG5vdCBmb3VuZCAhISIpOy8vJE5PTi1OTFMtMSQNCisJCQlmb3IgKGludCBpID0gMDsgaSA8IGZpbGVzLmxlbmd0aDsgaSsrKSB7DQorCQkJCWlmIChmaWxlc1tpXS5nZXROYW1lKCkuZXF1YWxzSWdub3JlQ2FzZSh0ZXN0RmlsZW5hbWUpKSB7DQorCQkJCQlTdHJpbmcgcmVzRmlsZSA9IFJVTlRJTUVfV09SS1NQQUNFX1BBVEggKyBzZXAgKyBmaWxlc1tpXS5nZXROYW1lKCk7DQorCQkJCQl0cnkgew0KKwkJCQkJCWNvcHlGaWxlKGZpbGVzW2ldLCBuZXcgRmlsZShyZXNGaWxlKSk7CQkJCQkJDQorCQkJCQkJcmV0dXJuIHJlc0ZpbGU7DQorCQkJCQkJDQorCQkJCQl9IGNhdGNoIChFeGNlcHRpb24gaW9lKSB7DQorCQkJCQkJU3lzdGVtLm91dC5wcmludGxuKCJDb3B5IGZhaWxlZCAiK2lvZS5nZXRNZXNzYWdlKCkpOw0KKwkJCQkJCWlvZS5wcmludFN0YWNrVHJhY2UoKTsNCisJCQkJCQlmYWlsKCJFcnJvcjpHcmFwaENhbnZhc1Rlc3QgZmFpbGVkIHRvIGNvcHkgdGVzdCBmaWxlICAhISIpOy8vJE5PTi1OTFMtMSQNCisJCQkJCX0NCisJCQkJCWJyZWFrOw0KKwkJCQl9DQorCQkJfS8vZm9yDQorCQ0KKwkJfS8vIGlmDQorCQkvLyBlbHNlIHdlIGZhaWxlDQorCQlmYWlsKCJFcnJvcjpHcmFwaENhbnZhc1Rlc3QgZmFpbGVkIHRvIGZpbmQgdGVzdCBmaWxlICAhISIpOy8vJE5PTi1OTFMtMSQNCisJCXJldHVybiAiIjsJCQ0KKwl9DQorICAgIHByaXZhdGUgc3RhdGljIHZvaWQgY29weUZpbGUoRmlsZSBzb3VyY2VGaWxlLCBGaWxlIHRhcmdldEZpbGUpICB0aHJvd3MgSU9FeGNlcHRpb24sIENvcmVFeGNlcHRpb24gew0KKyAgIAkgDQorICAgICAgICBpZiAodGFyZ2V0RmlsZS5leGlzdHMoKSkgcmV0dXJuOyAvLyBhbHJlYWR5IGV4aXN0cw0KKyAgICAgICAgICAgIElucHV0U3RyZWFtIGlucHV0U3RyZWFtID0gbmV3IEZpbGVJbnB1dFN0cmVhbShzb3VyY2VGaWxlKTsNCisgICAgICAgICAgICBPdXRwdXRTdHJlYW0gb3V0cHV0U3RyZWFtID0gbmV3IEZpbGVPdXRwdXRTdHJlYW0odGFyZ2V0RmlsZSk7DQorICAgICAgICAgICAgDQorICAgICAgICAgICAgLy8gQ29weSB0aGUgYml0cyBmcm9tIGluc3RyZWFtIHRvIG91dHN0cmVhbQ0KKyAgICAgICAgICAgIGJ5dGVbXSBidWZmZXIgPSBuZXcgYnl0ZVsxMDI0XTsNCisgICAgICAgICAgICBpbnQgbGVuOw0KKyAgICAgICAgICAgIHdoaWxlICgobGVuID0gaW5wdXRTdHJlYW0ucmVhZChidWZmZXIpKSA+IDApIHsNCisgICAgICAgICAgICAgICAgb3V0cHV0U3RyZWFtLndyaXRlKGJ1ZmZlciwgMCwgbGVuKTsNCisgICAgICAgICAgICB9DQorICAgICAgICAgICAgaW5wdXRTdHJlYW0uY2xvc2UoKTsNCisgICAgICAgICAgICBvdXRwdXRTdHJlYW0uY2xvc2UoKTsNCisgICAgIH0NCisJDQorfQ0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZ3JhcGhlZGl0b3Ivc3JjL29yZy9lY2xpcHNlL3N0ZW0vdGVzdHMvZ3JhcGhlZGl0b3IvR3JhcGhFZGl0b3JBbGxUZXN0cy5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5ncmFwaGVkaXRvci9zcmMvb3JnL2VjbGlwc2Uvc3RlbS90ZXN0cy9ncmFwaGVkaXRvci9HcmFwaEVkaXRvckFsbFRlc3RzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTUzZGYyZgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZ3JhcGhlZGl0b3Ivc3JjL29yZy9lY2xpcHNlL3N0ZW0vdGVzdHMvZ3JhcGhlZGl0b3IvR3JhcGhFZGl0b3JBbGxUZXN0cy5qYXZhCkBAIC0wLDAgKzEsMzggQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTEgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZ3JhcGhlZGl0b3I7CisKK2ltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdDsKK2ltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdFN1aXRlOworaW1wb3J0IGp1bml0LnRleHR1aS5UZXN0UnVubmVyOworCisvKioKKyAqIFRlc3Qgc3VpdGUgZm9yIEdyYXBoIEVkaXRvciB0ZXN0cworICoKKyAqLworcHVibGljIGNsYXNzIEdyYXBoRWRpdG9yQWxsVGVzdHMgZXh0ZW5kcyBUZXN0U3VpdGUgCit7CisJcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgeworCQlUZXN0UnVubmVyLnJ1bihzdWl0ZSgpKTsKKwl9CisKKwlwdWJsaWMgc3RhdGljIFRlc3Qgc3VpdGUoKSB7CisJCVRlc3RTdWl0ZSBzdWl0ZSA9IG5ldyBHcmFwaEVkaXRvckFsbFRlc3RzKCJHcmFwaCBFZGl0b3IgVGVzdHMiKTsKKwkJc3VpdGUuYWRkVGVzdFN1aXRlKEdyYXBoQ2FudmFzVGVzdC5jbGFzcyk7CisJCXJldHVybiBzdWl0ZTsKKwl9CisKKwlwdWJsaWMgR3JhcGhFZGl0b3JBbGxUZXN0cyhTdHJpbmcgbmFtZSkgeworCQlzdXBlcihuYW1lKTsKKwl9CisKK30KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZ3JhcGhlZGl0b3IvdGVzdC54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmdyYXBoZWRpdG9yL3Rlc3QueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU0MGU2ZTAKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmdyYXBoZWRpdG9yL3Rlc3QueG1sCkBAIC0wLDAgKzEsNTMgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+CisKKzxwcm9qZWN0IG5hbWU9InRlc3RzdWl0ZSIgZGVmYXVsdD0icnVuIiBiYXNlZGlyPSIuIj4KKyAgPCEtLSBUaGUgcHJvcGVydHkgJHtlY2xpcHNlLWhvbWV9IHNob3VsZCBiZSBwYXNzZWQgaW50byB0aGlzIHNjcmlwdCAtLT4KKyAgPCEtLSBTZXQgYSBtZWFuaW5nZnVsIGRlZmF1bHQgdmFsdWUgZm9yIHdoZW4gaXQgaXMgbm90LiAtLT4KKyAgPHByb3BlcnR5IG5hbWU9ImVjbGlwc2UtaG9tZSIgdmFsdWU9IiIvPgorCisKKyAgPCEtLSBzZXRzIHRoZSBwcm9wZXJ0aWVzIGVjbGlwc2UtaG9tZSwgYW5kIGxpYnJhcnktZmlsZSAtLT4KKyAgPHByb3BlcnR5IG5hbWU9InBsdWdpbi1uYW1lIiB2YWx1ZT0ib3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5ncmFwaGVkaXRvciIvPgorICA8cHJvcGVydHkgbmFtZT0ibGlicmFyeS1maWxlIgorICAgICAgICAgICAgdmFsdWU9IiR7ZWNsaXBzZS1ob21lfS9wbHVnaW5zL29yZy5lY2xpcHNlLnRlc3RfMy4zLjAvbGlicmFyeS54bWwiLz4KKworICA8IS0tIFRoaXMgdGFyZ2V0IGhvbGRzIGFsbCBpbml0aWFsaXphdGlvbiBjb2RlIHRoYXQgbmVlZHMgdG8gYmUgZG9uZSBmb3IgLS0+CisgIDwhLS0gYWxsIHRlc3RzIHRoYXQgYXJlIHRvIGJlIHJ1bi4gSW5pdGlhbGl6YXRpb24gZm9yIGluZGl2aWR1YWwgdGVzdHMgLS0+CisgIDwhLS0gc2hvdWxkIGJlIGRvbmUgd2l0aGluIHRoZSBib2R5IG9mIHRoZSBzdWl0ZSB0YXJnZXQuIC0tPgorICA8dGFyZ2V0IG5hbWU9ImluaXQiPgorICAgIDx0c3RhbXAvPgorICAgIDxkZWxldGU+CisgICAgICA8ZmlsZXNldCBkaXI9IiR7ZWNsaXBzZS1ob21lfSIgaW5jbHVkZXM9Im9yZyoueG1sIi8+CisgICAgPC9kZWxldGU+CisgIDwvdGFyZ2V0PgorCisgIDwhLS0gVGhpcyB0YXJnZXQgZGVmaW5lcyB0aGUgdGVzdHMgdGhhdCBuZWVkIHRvIGJlIHJ1bi4gLS0+CisgIDx0YXJnZXQgbmFtZT0ic3VpdGUiPgorICAgIDxwcm9wZXJ0eSBuYW1lPSJkYXRhLWRpciIgdmFsdWU9IiR7ZWNsaXBzZS1ob21lfS93b3Jrc3BhY2UiLz4KKyAgICA8ZGVsZXRlIGRpcj0iJHtkYXRhLWRpcn0iIHF1aWV0PSJ0cnVlIi8+CisgICAgPGFudCB0YXJnZXQ9InVpLXRlc3QiIGFudGZpbGU9IiR7bGlicmFyeS1maWxlfSIgZGlyPSIke2VjbGlwc2UtaG9tZX0iPgorICAgICAgPHByb3BlcnR5IG5hbWU9ImRhdGEtZGlyIiB2YWx1ZT0iJHtkYXRhLWRpcn0iLz4KKyAgICAgIDxwcm9wZXJ0eSBuYW1lPSJwbHVnaW4tbmFtZSIgdmFsdWU9IiR7cGx1Z2luLW5hbWV9Ii8+CisgICAgICA8cHJvcGVydHkgbmFtZT0iY2xhc3NuYW1lIiB2YWx1ZT0ib3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5ncmFwaGVkaXRvci5HcmFwaEVkaXRvckFsbFRlc3RzIi8+CisgICAgPC9hbnQ+CisgIDwvdGFyZ2V0PgorCisgIDwhLS0gVGhpcyB0YXJnZXQgaG9sZHMgY29kZSB0byBjbGVhbnVwIHRoZSB0ZXN0aW5nIGVudmlyb25tZW50IGFmdGVyIC0tPgorICA8IS0tIGFmdGVyIGFsbCBvZiB0aGUgdGVzdHMgaGF2ZSBiZWVuIHJ1bi4gWW91IGNhbiB1c2UgdGhpcyB0YXJnZXQgdG8gLS0+CisgIDwhLS0gZGVsZXRlIHRlbXBvcmFyeSBmaWxlcyB0aGF0IGhhdmUgYmVlbiBjcmVhdGVkLiAtLT4KKyAgPHRhcmdldCBuYW1lPSJjbGVhbnVwIj4KKyAgPC90YXJnZXQ+CisKKyAgPCEtLSBUaGlzIHRhcmdldCBydW5zIHRoZSB0ZXN0IHN1aXRlLiBBbnkgYWN0aW9ucyB0aGF0IG5lZWQgdG8gaGFwcGVuIC0tPgorICA8IS0tIGFmdGVyIGFsbCB0aGUgdGVzdHMgaGF2ZSBiZWVuIHJ1biBzaG91bGQgZ28gaGVyZS4gLS0+CisgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LHN1aXRlLGNsZWFudXAiPgorICAgIDxhbnQgdGFyZ2V0PSJjb2xsZWN0IiBhbnRmaWxlPSIke2xpYnJhcnktZmlsZX0iIGRpcj0iJHtlY2xpcHNlLWhvbWV9Ij4KKyAgICAgIDxwcm9wZXJ0eSBuYW1lPSJpbmNsdWRlcyIgdmFsdWU9Im9yZyoueG1sIi8+CisgICAgICA8cHJvcGVydHkgbmFtZT0ib3V0cHV0LWZpbGUiIHZhbHVlPSIke3BsdWdpbi1uYW1lfS54bWwiLz4KKyAgICA8L2FudD4KKyAgPC90YXJnZXQ+CisKKyAgPCEtLSBUaGlzIHRhcmdldCBydW5zIHRoZSBwZXJmb3JtYW5jZSB0ZXN0IHN1aXRlcy4gLS0+CisgIDx0YXJnZXQgbmFtZT0icGVyZm9ybWFuY2UiPgorICA8L3RhcmdldD4KKzwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZ3JhcGhnZW5lcmF0b3JzLy5jbGFzc3BhdGggYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmdyYXBoZ2VuZXJhdG9ycy8uY2xhc3NwYXRoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMwNGU4NjEKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmdyYXBoZ2VuZXJhdG9ycy8uY2xhc3NwYXRoCkBAIC0wLDAgKzEsNyBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxjbGFzc3BhdGg+CisJPGNsYXNzcGF0aGVudHJ5IGtpbmQ9InNyYyIgcGF0aD0ic3JjIi8+CisJPGNsYXNzcGF0aGVudHJ5IGtpbmQ9ImNvbiIgcGF0aD0ib3JnLmVjbGlwc2UuamR0LmxhdW5jaGluZy5KUkVfQ09OVEFJTkVSL29yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC5kZWJ1Zy51aS5sYXVuY2hlci5TdGFuZGFyZFZNVHlwZS9KMlNFLTEuNSIvPgorCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJjb24iIHBhdGg9Im9yZy5lY2xpcHNlLnBkZS5jb3JlLnJlcXVpcmVkUGx1Z2lucyIvPgorCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJvdXRwdXQiIHBhdGg9ImJpbiIvPgorPC9jbGFzc3BhdGg+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmdyYXBoZ2VuZXJhdG9ycy8ucHJvamVjdCBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZ3JhcGhnZW5lcmF0b3JzLy5wcm9qZWN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjExNjg3ZjgKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmdyYXBoZ2VuZXJhdG9ycy8ucHJvamVjdApAQCAtMCwwICsxLDI4IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPHByb2plY3REZXNjcmlwdGlvbj4KKwk8bmFtZT5vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmdyYXBoZ2VuZXJhdG9yczwvbmFtZT4KKwk8Y29tbWVudD48L2NvbW1lbnQ+CisJPHByb2plY3RzPgorCTwvcHJvamVjdHM+CisJPGJ1aWxkU3BlYz4KKwkJPGJ1aWxkQ29tbWFuZD4KKwkJCTxuYW1lPm9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFidWlsZGVyPC9uYW1lPgorCQkJPGFyZ3VtZW50cz4KKwkJCTwvYXJndW1lbnRzPgorCQk8L2J1aWxkQ29tbWFuZD4KKwkJPGJ1aWxkQ29tbWFuZD4KKwkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5NYW5pZmVzdEJ1aWxkZXI8L25hbWU+CisJCQk8YXJndW1lbnRzPgorCQkJPC9hcmd1bWVudHM+CisJCTwvYnVpbGRDb21tYW5kPgorCQk8YnVpbGRDb21tYW5kPgorCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLlNjaGVtYUJ1aWxkZXI8L25hbWU+CisJCQk8YXJndW1lbnRzPgorCQkJPC9hcmd1bWVudHM+CisJCTwvYnVpbGRDb21tYW5kPgorCTwvYnVpbGRTcGVjPgorCTxuYXR1cmVzPgorCQk8bmF0dXJlPm9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFuYXR1cmU8L25hdHVyZT4KKwkJPG5hdHVyZT5vcmcuZWNsaXBzZS5wZGUuUGx1Z2luTmF0dXJlPC9uYXR1cmU+CisJPC9uYXR1cmVzPgorPC9wcm9qZWN0RGVzY3JpcHRpb24+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmdyYXBoZ2VuZXJhdG9ycy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmdyYXBoZ2VuZXJhdG9ycy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmM0NTBiYQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZ3JhcGhnZW5lcmF0b3JzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcwpAQCAtMCwwICsxLDggQEAKKyNXZWQgTWFyIDMwIDE1OjI3OjM4IFBEVCAyMDExCitlY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29kZWdlbi5pbmxpbmVKc3JCeXRlY29kZT1lbmFibGVkCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb2RlZ2VuLnRhcmdldFBsYXRmb3JtPTEuNQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29tcGxpYW5jZT0xLjUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uYXNzZXJ0SWRlbnRpZmllcj1lcnJvcgorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5lbnVtSWRlbnRpZmllcj1lcnJvcgorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuc291cmNlPTEuNQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5ncmFwaGdlbmVyYXRvcnMvTUVUQS1JTkYvTUFOSUZFU1QuTUYgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmdyYXBoZ2VuZXJhdG9ycy9NRVRBLUlORi9NQU5JRkVTVC5NRgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZjEwMmJjCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5ncmFwaGdlbmVyYXRvcnMvTUVUQS1JTkYvTUFOSUZFU1QuTUYKQEAgLTAsMCArMSwxOCBAQAorTWFuaWZlc3QtVmVyc2lvbjogMS4wCitCdW5kbGUtTWFuaWZlc3RWZXJzaW9uOiAyCitCdW5kbGUtTmFtZTogJXBsdWdpbk5hbWUKK0J1bmRsZS1TeW1ib2xpY05hbWU6IG9yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZ3JhcGhnZW5lcmF0b3JzO3NpbmdsZXRvbjo9dHJ1ZQorQnVuZGxlLVZlcnNpb246IDEuMi4xCitCdW5kbGUtQ2xhc3NQYXRoOiAuCitCdW5kbGUtVmVuZG9yOiAlcHJvdmlkZXJOYW1lCitCdW5kbGUtTG9jYWxpemF0aW9uOiBwbHVnaW4KK0J1bmRsZS1SZXF1aXJlZEV4ZWN1dGlvbkVudmlyb25tZW50OiBKMlNFLTEuNQorRXhwb3J0LVBhY2thZ2U6IG9yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhnZW5lcmF0b3JzLnRlc3RzLAorIG9yZy5lY2xpcHNlLnN0ZW0udGVzdC5ncmFwaGdlbmVyYXRvcnMudGVzdHMKK1JlcXVpcmUtQnVuZGxlOiBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUsCisgb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaGdlbmVyYXRvcnM7dmlzaWJpbGl0eTo9cmVleHBvcnQsCisgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlO3Zpc2liaWxpdHk6PXJlZXhwb3J0LAorIG9yZy5lY2xpcHNlLmVtZi5lY29yZTt2aXNpYmlsaXR5Oj1yZWV4cG9ydCwKKyBvcmcuZWNsaXBzZS5lbWYuZWNvcmUueG1pO3Zpc2liaWxpdHk6PXJlZXhwb3J0LAorIG9yZy5qdW5pdDt2aXNpYmlsaXR5Oj1yZWV4cG9ydAorQnVuZGxlLUFjdGl2YXRpb25Qb2xpY3k6IGxhenkKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZ3JhcGhnZW5lcmF0b3JzL2J1aWxkLnByb3BlcnRpZXMgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmdyYXBoZ2VuZXJhdG9ycy9idWlsZC5wcm9wZXJ0aWVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZjZjZlZTAKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmdyYXBoZ2VuZXJhdG9ycy9idWlsZC5wcm9wZXJ0aWVzCkBAIC0wLDAgKzEsMTIgQEAKKworIyA8Y29weXJpZ2h0PgorIyA8L2NvcHlyaWdodD4KKyMKKyMgJElkJAorCitiaW4uaW5jbHVkZXMgPSAuLFwKKyAgICAgICAgICAgICAgIE1FVEEtSU5GLyxcCisgICAgICAgICAgICAgICBwbHVnaW4ucHJvcGVydGllcworamFycy5jb21waWxlLm9yZGVyID0gLgorc291cmNlLi4gPSBzcmMvCitvdXRwdXQuLiA9IGJpbi8KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZ3JhcGhnZW5lcmF0b3JzL3BsdWdpbi5wcm9wZXJ0aWVzIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5ncmFwaGdlbmVyYXRvcnMvcGx1Z2luLnByb3BlcnRpZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGU1YjdiYwotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZ3JhcGhnZW5lcmF0b3JzL3BsdWdpbi5wcm9wZXJ0aWVzCkBAIC0wLDAgKzEsOCBAQAorCisjIDxjb3B5cmlnaHQ+CisjIDwvY29weXJpZ2h0PgorIworIyAkSWQkCisKK3BsdWdpbk5hbWUgPSBHcmFwaGdlbmVyYXRvciBUZXN0cworcHJvdmlkZXJOYW1lID0gd3d3LmV4YW1wbGUub3JnCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmdyYXBoZ2VuZXJhdG9ycy9yZXNvdXJjZXMvUGFqZWtOZXRHcmFwaEdlbmVyYXRvclRlc3QubmV0IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5ncmFwaGdlbmVyYXRvcnMvcmVzb3VyY2VzL1BhamVrTmV0R3JhcGhHZW5lcmF0b3JUZXN0Lm5ldApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MmU3ODYyCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5ncmFwaGdlbmVyYXRvcnMvcmVzb3VyY2VzL1BhamVrTmV0R3JhcGhHZW5lcmF0b3JUZXN0Lm5ldApAQCAtMCwwICsxLDkxIEBACisqVmVydGljZXMgNjINCisxICJ0MSIgNTAgOTAuMjEgZWxsaXBzZSBzX3NpemUgNy41ODI1IHBvcElEIGh1bWFuIHBvcENvdW50IDUwIHBvcElEIGFub3BoZWxlcyBwb3BDb3VudCAxMDAwMA0KKzIgInQyIiA1MCAxLjA0IGVsbGlwc2Ugc19zaXplIDcuNTgyNSBwb3BJRCBodW1hbiBwb3BDb3VudCA1MCBwb3BJRCBhbm9waGVsZXMgcG9wQ291bnQgMTAwMDANCiszICJ0MyIgOTIuOTIgNzUgZWxsaXBzZSBzX3NpemUgNy41ODI1IHBvcElEIGh1bWFuIHBvcENvdW50IDUwIHBvcElEIGFub3BoZWxlcyBwb3BDb3VudCAxMDAwMA0KKzQgInQ0IiA0NS40MiA4Ni4yNSBlbGxpcHNlIHNfc2l6ZSA3LjU4MjUgcG9wSUQgaHVtYW4gcG9wQ291bnQgNTAgcG9wSUQgYW5vcGhlbGVzIHBvcENvdW50IDEwMDAwDQorNSAidDUiIDI1IDE4LjEzIGVsbGlwc2Ugc19zaXplIDcuNTgyNSBwb3BJRCBodW1hbiBwb3BDb3VudCA1MCBwb3BJRCBhbm9waGVsZXMgcG9wQ291bnQgMTAwMDANCis2ICJ0NiIgNy4wOCA3NSBlbGxpcHNlIHNfc2l6ZSA3LjU4MjUgcG9wSUQgaHVtYW4gcG9wQ291bnQgNTAgcG9wSUQgYW5vcGhlbGVzIHBvcENvdW50IDEwMDAwDQorNyAidDciIDQxLjQ2IDgyLjUgZWxsaXBzZSBzX3NpemUgNy41ODI1IHBvcElEIGh1bWFuIHBvcENvdW50IDUwIHBvcElEIGFub3BoZWxlcyBwb3BDb3VudCAxMDAwMA0KKzggInQ4IiAyNSAyNS42MyBlbGxpcHNlIHNfc2l6ZSA3LjU4MjUgcG9wSUQgaHVtYW4gcG9wQ291bnQgNTAgcG9wSUQgYW5vcGhlbGVzIHBvcENvdW50IDEwMDAwDQorOSAidDkiIDEwLjYzIDcxLjg4IGVsbGlwc2Ugc19zaXplIDcuNTgyNSBwb3BJRCBodW1hbiBwb3BDb3VudCA1MCBwb3BJRCBhbm9waGVsZXMgcG9wQ291bnQgMTAwMDANCisxMCAibyIgMTQuMTcgNjkuMzggYm94IHNfc2l6ZSA3LjU4MjUgcG9wSUQgaHVtYW4gcG9wQ291bnQgNTAgcG9wSUQgYW5vcGhlbGVzIHBvcENvdW50IDEwMDAwDQorMTEgIm8iIDUwIDk0Ljc5IGJveCBzX3NpemUgNy41ODI1IHBvcElEIGh1bWFuIHBvcENvdW50IDUwIHBvcElEIGFub3BoZWxlcyBwb3BDb3VudCAxMDAwMA0KKzEyICJvIiAyOC43NSAxMy4zMyBib3ggc19zaXplIDcuNTgyNSBwb3BJRCBodW1hbiBwb3BDb3VudCA1MCBwb3BJRCBhbm9waGVsZXMgcG9wQ291bnQgMTAwMDANCisxMyAibyIgMjIuOTIgMTQuMzggYm94IHNfc2l6ZSA3LjU4MjUgcG9wSUQgaHVtYW4gcG9wQ291bnQgNTAgcG9wSUQgYW5vcGhlbGVzIHBvcENvdW50IDEwMDAwDQorMTQgIm8iIDMyLjI5IDI5LjE3IGJveCBzX3NpemUgNy41ODI1IHBvcElEIGh1bWFuIHBvcENvdW50IDUwIHBvcElEIGFub3BoZWxlcyBwb3BDb3VudCAxMDAwMA0KKzE1ICJvIiAzMy4xMyAyMy4zMyBib3ggc19zaXplIDcuNTgyNSBwb3BJRCBodW1hbiBwb3BDb3VudCA1MCBwb3BJRCBhbm9waGVsZXMgcG9wQ291bnQgMTAwMDANCisxNiAibyIgMzUuMjEgMTguMTMgYm94IHNfc2l6ZSA3LjU4MjUgcG9wSUQgaHVtYW4gcG9wQ291bnQgNTAgcG9wSUQgYW5vcGhlbGVzIHBvcENvdW50IDEwMDAwDQorMTcgIm8iIDM4Ljk2IDE0LjE3IGJveCBzX3NpemUgNy41ODI1IHBvcElEIGh1bWFuIHBvcENvdW50IDUwIHBvcElEIGFub3BoZWxlcyBwb3BDb3VudCAxMDAwMA0KKzE4ICJvIiA0Mi41IDExLjY3IGJveCBzX3NpemUgNy41ODI1IHBvcElEIGh1bWFuIHBvcENvdW50IDUwIHBvcElEIGFub3BoZWxlcyBwb3BDb3VudCAxMDAwMA0KKzE5ICJvIiA0Ni40NiA4LjEzIGJveCBzX3NpemUgNy41ODI1IHBvcElEIGh1bWFuIHBvcENvdW50IDUwIHBvcElEIGFub3BoZWxlcyBwb3BDb3VudCAxMDAwMA0KKzIwICJvIiA2Mi43MSA2LjY3IGJveCBzX3NpemUgNy41ODI1IHBvcElEIGh1bWFuIHBvcENvdW50IDUwIHBvcElEIGFub3BoZWxlcyBwb3BDb3VudCAxMDAwMA0KKzIxICJvIiA3Mi4wOCAxMS42NyBib3ggc19zaXplIDcuNTgyNSBwb3BJRCBodW1hbiBwb3BDb3VudCA1MCBwb3BJRCBhbm9waGVsZXMgcG9wQ291bnQgMTAwMDANCisyMiAibyIgNzguOTYgMTYuODggYm94IHNfc2l6ZSA3LjU4MjUgcG9wSUQgaHVtYW4gcG9wQ291bnQgNTAgcG9wSUQgYW5vcGhlbGVzIHBvcENvdW50IDEwMDAwDQorMjMgIm8iIDg0LjM4IDIzLjMzIGJveCBzX3NpemUgNy41ODI1IHBvcElEIGh1bWFuIHBvcENvdW50IDUwIHBvcElEIGFub3BoZWxlcyBwb3BDb3VudCAxMDAwMA0KKzI0ICJvIiA4OC4zMyAzMCBib3ggc19zaXplIDcuNTgyNSBwb3BJRCBodW1hbiBwb3BDb3VudCA1MCBwb3BJRCBhbm9waGVsZXMgcG9wQ291bnQgMTAwMDANCisyNSAibyIgOTEuNjcgMzUuNDIgYm94IHNfc2l6ZSA3LjU4MjUgcG9wSUQgaHVtYW4gcG9wQ291bnQgNTAgcG9wSUQgYW5vcGhlbGVzIHBvcENvdW50IDEwMDAwDQorMjYgIm8iIDk0LjU4IDQ1LjYzIGJveCBzX3NpemUgNy41ODI1IHBvcElEIGh1bWFuIHBvcENvdW50IDUwIHBvcElEIGFub3BoZWxlcyBwb3BDb3VudCAxMDAwMA0KKzI3ICJvIiA5Ni4wNCA1NSBib3ggc19zaXplIDcuNTgyNSBwb3BJRCBodW1hbiBwb3BDb3VudCA1MCBwb3BJRCBhbm9waGVsZXMgcG9wQ291bnQgMTAwMDANCisyOCAidDEwIiA1Mi4yOSA1NS44MyBlbGxpcHNlIHNfc2l6ZSA3LjU4MjUgcG9wSUQgaHVtYW4gcG9wQ291bnQgNTAgcG9wSUQgYW5vcGhlbGVzIHBvcENvdW50IDEwMDAwDQorMjkgInQxMSIgODYuMjUgNjcuNSBlbGxpcHNlIHNfc2l6ZSA3LjU4MjUgcG9wSUQgaHVtYW4gcG9wQ291bnQgNTAgcG9wSUQgYW5vcGhlbGVzIHBvcENvdW50IDEwMDAwDQorMzAgInQxMiIgNTcuMDggMTAuMjEgZWxsaXBzZSBzX3NpemUgNy41ODI1IHBvcElEIGh1bWFuIHBvcENvdW50IDUwIHBvcElEIGFub3BoZWxlcyBwb3BDb3VudCAxMDAwMA0KKzMxICJvIiA1Ny4yOSA1MC44MyBib3ggc19zaXplIDcuNTgyNSBwb3BJRCBodW1hbiBwb3BDb3VudCA1MCBwb3BJRCBhbm9waGVsZXMgcG9wQ291bnQgMTAwMDANCiszMiAibyIgNjEuMDQgNTEuODggYm94IHNfc2l6ZSA3LjU4MjUgcG9wSUQgaHVtYW4gcG9wQ291bnQgNTAgcG9wSUQgYW5vcGhlbGVzIHBvcENvdW50IDEwMDAwDQorMzMgIm8iIDY1LjIxIDUzLjEzIGJveCBzX3NpemUgNy41ODI1IHBvcElEIGh1bWFuIHBvcENvdW50IDUwIHBvcElEIGFub3BoZWxlcyBwb3BDb3VudCAxMDAwMA0KKzM0ICJvIiA2OS4zOCA1NS42MyBib3ggc19zaXplIDcuNTgyNSBwb3BJRCBodW1hbiBwb3BDb3VudCA1MCBwb3BJRCBhbm9waGVsZXMgcG9wQ291bnQgMTAwMDANCiszNSAibyIgNzUgNTguOTYgYm94IHNfc2l6ZSA3LjU4MjUgcG9wSUQgaHVtYW4gcG9wQ291bnQgNTAgcG9wSUQgYW5vcGhlbGVzIHBvcENvdW50IDEwMDAwDQorMzYgIm8iIDc0LjU4IDQ5LjM4IGJveCBzX3NpemUgNy41ODI1IHBvcElEIGh1bWFuIHBvcENvdW50IDUwIHBvcElEIGFub3BoZWxlcyBwb3BDb3VudCAxMDAwMA0KKzM3ICJvIiA2OC4zMyA0MS4wNCBib3ggc19zaXplIDcuNTgyNSBwb3BJRCBodW1hbiBwb3BDb3VudCA1MCBwb3BJRCBhbm9waGVsZXMgcG9wQ291bnQgMTAwMDANCiszOCAibyIgNjMuMzMgMzYuNjcgYm94IHNfc2l6ZSA3LjU4MjUgcG9wSUQgaHVtYW4gcG9wQ291bnQgNTAgcG9wSUQgYW5vcGhlbGVzIHBvcENvdW50IDEwMDAwDQorMzkgIm8iIDU4LjU0IDM0LjU4IGJveCBzX3NpemUgNy41ODI1IHBvcElEIGh1bWFuIHBvcENvdW50IDUwIHBvcElEIGFub3BoZWxlcyBwb3BDb3VudCAxMDAwMA0KKzQwICJvIiA2MC40MiA0Mi4wOCBib3ggc19zaXplIDcuNTgyNSBwb3BJRCBodW1hbiBwb3BDb3VudCA1MCBwb3BJRCBhbm9waGVsZXMgcG9wQ291bnQgMTAwMDANCis0MSAidDEzIiA4NC43OSA3NSBlbGxpcHNlIHNfc2l6ZSA3LjU4MjUgcG9wSUQgaHVtYW4gcG9wQ291bnQgNTAgcG9wSUQgYW5vcGhlbGVzIHBvcENvdW50IDEwMDAwDQorNDIgInQxNCIgNTguMzMgNjAuNDIgZWxsaXBzZSBzX3NpemUgNy41ODI1IHBvcElEIGh1bWFuIHBvcENvdW50IDUwIHBvcElEIGFub3BoZWxlcyBwb3BDb3VudCAxMDAwMA0KKzQzICJ0MTUiIDUzLjU0IDg1LjIxIGVsbGlwc2Ugc19zaXplIDcuNTgyNSBwb3BJRCBodW1hbiBwb3BDb3VudCA1MCBwb3BJRCBhbm9waGVsZXMgcG9wQ291bnQgMTAwMDANCis0NCAibyIgNjIuMjkgODAgYm94IHNfc2l6ZSA3LjU4MjUgcG9wSUQgaHVtYW4gcG9wQ291bnQgNTAgcG9wSUQgYW5vcGhlbGVzIHBvcENvdW50IDEwMDAwDQorNDUgIm8iIDYzLjc1IDc2LjI1IGJveCBzX3NpemUgNy41ODI1IHBvcElEIGh1bWFuIHBvcENvdW50IDUwIHBvcElEIGFub3BoZWxlcyBwb3BDb3VudCAxMDAwMA0KKzQ2ICJvIiA2NSA3Mi4yOSBib3ggc19zaXplIDcuNTgyNSBwb3BJRCBodW1hbiBwb3BDb3VudCA1MCBwb3BJRCBhbm9waGVsZXMgcG9wQ291bnQgMTAwMDANCis0NyAibyIgNjYuMDQgNjguMzMgYm94IHNfc2l6ZSA3LjU4MjUgcG9wSUQgaHVtYW4gcG9wQ291bnQgNTAgcG9wSUQgYW5vcGhlbGVzIHBvcENvdW50IDEwMDAwDQorNDggIm8iIDcwLjQyIDc3LjA4IGJveCBzX3NpemUgNy41ODI1IHBvcElEIGh1bWFuIHBvcENvdW50IDUwIHBvcElEIGFub3BoZWxlcyBwb3BDb3VudCAxMDAwMA0KKzQ5ICJvIiA3MS42NyA3MS44OCBib3ggc19zaXplIDcuNTgyNSBwb3BJRCBodW1hbiBwb3BDb3VudCA1MCBwb3BJRCBhbm9waGVsZXMgcG9wQ291bnQgMTAwMDANCis1MCAibyIgNTcuNSA3OC45NiBib3ggc19zaXplIDcuNTgyNSBwb3BJRCBodW1hbiBwb3BDb3VudCA1MCBwb3BJRCBhbm9waGVsZXMgcG9wQ291bnQgMTAwMDANCis1MSAibyIgNjAuNjMgNjcuMDggYm94IHNfc2l6ZSA3LjU4MjUgcG9wSUQgaHVtYW4gcG9wQ291bnQgNTAgcG9wSUQgYW5vcGhlbGVzIHBvcENvdW50IDEwMDAwDQorNTIgIm8iIDE3LjcxIDY2LjI1IGJveCBzX3NpemUgNy41ODI1IHBvcElEIGh1bWFuIHBvcENvdW50IDUwIHBvcElEIGFub3BoZWxlcyBwb3BDb3VudCAxMDAwMA0KKzUzICJvIiAyNy41IDcyLjA4IGJveCBzX3NpemUgNy41ODI1IHBvcElEIGh1bWFuIHBvcENvdW50IDUwIHBvcElEIGFub3BoZWxlcyBwb3BDb3VudCAxMDAwMA0KKzU0ICJvIiAzNy45MiA3Ny43MSBib3ggc19zaXplIDcuNTgyNSBwb3BJRCBodW1hbiBwb3BDb3VudCA1MCBwb3BJRCBhbm9waGVsZXMgcG9wQ291bnQgMTAwMDANCis1NSAibyIgMzAuNDIgNjAuODMgYm94IHNfc2l6ZSA3LjU4MjUgcG9wSUQgaHVtYW4gcG9wQ291bnQgNTAgcG9wSUQgYW5vcGhlbGVzIHBvcENvdW50IDEwMDAwDQorNTYgIm8iIDI2LjI1IDUzLjc1IGJveCBzX3NpemUgNy41ODI1IHBvcElEIGh1bWFuIHBvcENvdW50IDUwIHBvcElEIGFub3BoZWxlcyBwb3BDb3VudCAxMDAwMA0KKzU3ICJvIiAyMi4wOCA0OS4zOCBib3ggc19zaXplIDcuNTgyNSBwb3BJRCBodW1hbiBwb3BDb3VudCA1MCBwb3BJRCBhbm9waGVsZXMgcG9wQ291bnQgMTAwMDANCis1OCAibyIgMjQuNzkgNjIuMDggYm94IHNfc2l6ZSA3LjU4MjUgcG9wSUQgaHVtYW4gcG9wQ291bnQgNTAgcG9wSUQgYW5vcGhlbGVzIHBvcENvdW50IDEwMDAwDQorNTkgIm8iIDI5Ljc5IDY4LjEzIGJveCBzX3NpemUgNy41ODI1IHBvcElEIGh1bWFuIHBvcENvdW50IDUwIHBvcElEIGFub3BoZWxlcyBwb3BDb3VudCAxMDAwMA0KKzYwICJvIiAyMS44OCA1OC41NCBib3ggc19zaXplIDcuNTgyNSBwb3BJRCBodW1hbiBwb3BDb3VudCA1MCBwb3BJRCBhbm9waGVsZXMgcG9wQ291bnQgMTAwMDANCis2MSAibyIgMjguMzMgNDQuNzkgYm94IHNfc2l6ZSA3LjU4MjUgcG9wSUQgaHVtYW4gcG9wQ291bnQgNTAgcG9wSUQgYW5vcGhlbGVzIHBvcENvdW50IDEwMDAwDQorNjIgIm8iIDI1IDM3LjI5IGJveCBzX3NpemUgNy41ODI1IHBvcElEIGh1bWFuIHBvcENvdW50IDUwIHBvcElEIGFub3BoZWxlcyBwb3BDb3VudCAxMDAwMA0KKypFZGdlcw0KKzEgMTYgMSBwb3BJRCBodW1hbiByYXRlQUIgMC4yIHJhdGVCQSAwLjEgcG9wSUQgYW5vcGhlbGVzIHJhdGVBQiAwLjEgcmF0ZUJBIDAuMw0KKzEgMTcgMSBwb3BJRCBodW1hbiByYXRlQUIgMC4yIHJhdGVCQSAwLjEgcG9wSUQgYW5vcGhlbGVzIHJhdGVBQiAwLjEgcmF0ZUJBIDAuMw0KKzEgMTggMSBwb3BJRCBodW1hbiByYXRlQUIgMC4yIHJhdGVCQSAwLjEgcG9wSUQgYW5vcGhlbGVzIHJhdGVBQiAwLjEgcmF0ZUJBIDAuMw0KKzEgMTkgMSBwb3BJRCBodW1hbg0KKzEgMjggMSBwb3BJRCBodW1hbg0KKzEgNDEgMSBwb3BJRCBodW1hbg0KKzIgMyAxIHBvcElEIGh1bWFuDQorMiA1IDENCisyIDYgMQ0KKzIgMTIgMSBwb3BJRCBodW1hbiByYXRlQUIgMC4yIHJhdGVCQSAwLjEgcG9wSUQgYW5vcGhlbGVzIHJhdGVBQiAwLjEgcmF0ZUJBIDAuMw0KKzIgMTMgMSBwb3BJRCBodW1hbiByYXRlQUIgMC4yIHJhdGVCQSAwLjEgcG9wSUQgYW5vcGhlbGVzIHJhdGVBQiAwLjEgcmF0ZUJBIDAuMw0KKzIgMTkgMSBwb3BJRCBodW1hbiByYXRlQUIgMC4yIHJhdGVCQSAwLjEgcG9wSUQgYW5vcGhlbGVzIHJhdGVBQiAwLjEgcmF0ZUJBIDAuMw0KKzIgMjAgMSBwb3BJRCBhbm9waGVsZXMgcmF0ZUFCIDAuMSByYXRlQkEgMC4zDQorMiAzMCAxIHBvcElEIGFub3BoZWxlcyByYXRlQUIgMC4xIHJhdGVCQSAwLjMNCiszIDYgMSBwb3BJRCBodW1hbiByYXRlQUIgMC4yIHJhdGVCQSAwLjEgcG9wSUQgYW5vcGhlbGVzIHJhdGVBQiAwLjEgcmF0ZUJBIDAuMw0KKzMgMTEgMSBwb3BJRCBodW1hbiByYXRlQUIgMC4yIHJhdGVCQSAwLjEgcG9wSUQgYW5vcGhlbGVzIHJhdGVBQiAwLjEgcmF0ZUJBIDAuMw0KKzMgMjAgMSBwb3BJRCBodW1hbiByYXRlQUIgMC4yIHJhdGVCQSAwLjEgcG9wSUQgYW5vcGhlbGVzIHJhdGVBQiAwLjEgcmF0ZUJBIDAuMw0KKzMgMjEgMSBwb3BJRCBodW1hbiByYXRlQUIgMC4yIHJhdGVCQSAwLjEgcG9wSUQgYW5vcGhlbGVzIHJhdGVBQiAwLjEgcmF0ZUJBIDAuMw0KKzMgMjIgMSBwb3BJRCBodW1hbiByYXRlQUIgMC4yIHJhdGVCQSAwLjEgcG9wSUQgYW5vcGhlbGVzIHJhdGVBQiAwLjEgcmF0ZUJBIDAuMw0KKzMgMjMgMSBwb3BJRCBodW1hbiByYXRlQUIgMC4yIHJhdGVCQSAwLjEgcG9wSUQgYW5vcGhlbGVzIHJhdGVBQiAwLjEgcmF0ZUJBIDAuMw0KKzMgMjQgMSBwb3BJRCBodW1hbiByYXRlQUIgMC4yIHJhdGVCQSAwLjENCiszIDI1IDEgcG9wSUQgaHVtYW4gcmF0ZUFCIDAuMiByYXRlQkEgMC4xDQorMyAyNiAxIHBvcElEIGh1bWFuIHJhdGVBQiAwLjIgcmF0ZUJBIDAuMQ0KKzMgMjcgMSBwb3BJRCBodW1hbiByYXRlQUIgMC4yIHJhdGVCQSAwLjENCiszIDI5IDEgcG9wSUQgaHVtYW4gcmF0ZUFCIDAuMiByYXRlQkEgMC4xDQorMyA0MSAxIHBvcElEIGh1bWFuIHJhdGVBQiAwLjIgcmF0ZUJBIDAuMQ0KKzMgNDIgMSBwb3BJRCBodW1hbiByYXRlQUIgMC4yIHJhdGVCQSAwLjEgcG9wSUQgYW5vcGhlbGVzIHJhdGVBQiAwLjEgcmF0ZUJBIDAuMwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZ3JhcGhnZW5lcmF0b3JzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2dyYXBoZ2VuZXJhdG9ycy90ZXN0cy9HcmFwaEdlbmVyYXRvclRlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZ3JhcGhnZW5lcmF0b3JzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2dyYXBoZ2VuZXJhdG9ycy90ZXN0cy9HcmFwaEdlbmVyYXRvclRlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MmI5MjUxCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5ncmFwaGdlbmVyYXRvcnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZ3JhcGhnZW5lcmF0b3JzL3Rlc3RzL0dyYXBoR2VuZXJhdG9yVGVzdC5qYXZhCkBAIC0wLDAgKzEsODIgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaGdlbmVyYXRvcnMudGVzdHM7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIAorICogQ29weXJpZ2h0IChjKSAyMDExIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiAKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdCAKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sIAorICogCisgKiBDb250cmlidXRvcnM6IAorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiAKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOworCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaGdlbmVyYXRvcnMuR3JhcGhHZW5lcmF0b3I7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIEEgdGVzdCBjYXNlIGZvciB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+R3JhcGggR2VuZXJhdG9yPC9iPjwvZW0+Jy4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogPHA+CisgKiBUaGUgZm9sbG93aW5nIG9wZXJhdGlvbnMgYXJlIHRlc3RlZDoKKyAqIDx1bD4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmdyYXBoZ2VuZXJhdG9ycy5HcmFwaEdlbmVyYXRvciNnZXRHcmFwaCgpIDxlbT5HZXQgR3JhcGg8L2VtPn08L2xpPgorICogPC91bD4KKyAqIDwvcD4KKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGFic3RyYWN0IGNsYXNzIEdyYXBoR2VuZXJhdG9yVGVzdCBleHRlbmRzIFRlc3RDYXNlIHsKKworCS8qKgorCSAqIFRoZSBmaXh0dXJlIGZvciB0aGlzIEdyYXBoIEdlbmVyYXRvciB0ZXN0IGNhc2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIEdyYXBoR2VuZXJhdG9yIGZpeHR1cmUgPSBudWxsOworCisJLyoqCisJICogQ29uc3RydWN0cyBhIG5ldyBHcmFwaCBHZW5lcmF0b3IgdGVzdCBjYXNlIHdpdGggdGhlIGdpdmVuIG5hbWUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEdyYXBoR2VuZXJhdG9yVGVzdChTdHJpbmcgbmFtZSkgeworCQlzdXBlcihuYW1lKTsKKwl9CisKKwkvKioKKwkgKiBTZXRzIHRoZSBmaXh0dXJlIGZvciB0aGlzIEdyYXBoIEdlbmVyYXRvciB0ZXN0IGNhc2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgc2V0Rml4dHVyZShHcmFwaEdlbmVyYXRvciBmaXh0dXJlKSB7CisJCXRoaXMuZml4dHVyZSA9IGZpeHR1cmU7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgZml4dHVyZSBmb3IgdGhpcyBHcmFwaCBHZW5lcmF0b3IgdGVzdCBjYXNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBHcmFwaEdlbmVyYXRvciBnZXRGaXh0dXJlKCkgeworCQlyZXR1cm4gZml4dHVyZTsKKwl9CisKKwkvKioKKwkgKiBUZXN0cyB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmdyYXBoZ2VuZXJhdG9ycy5HcmFwaEdlbmVyYXRvciNnZXRHcmFwaCgpIDxlbT5HZXQgR3JhcGg8L2VtPn0nIG9wZXJhdGlvbi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaGdlbmVyYXRvcnMuR3JhcGhHZW5lcmF0b3IjZ2V0R3JhcGgoKQorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJcHVibGljIHZvaWQgdGVzdEdldEdyYXBoKCkgeworCQkvLyBuZWVkIHRvIGltcGxlbWVudCBzcGVjaWZpYyB0ZXN0cyBvbmx5CisJCS8vIG5vdGhpbmcgdG8gdGVzdCBoZXJlCisJfQorCit9IC8vR3JhcGhHZW5lcmF0b3JUZXN0CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmdyYXBoZ2VuZXJhdG9ycy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9ncmFwaGdlbmVyYXRvcnMvdGVzdHMvR3JhcGhnZW5lcmF0b3JzRXhhbXBsZS5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5ncmFwaGdlbmVyYXRvcnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZ3JhcGhnZW5lcmF0b3JzL3Rlc3RzL0dyYXBoZ2VuZXJhdG9yc0V4YW1wbGUuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MzhjOGE1Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5ncmFwaGdlbmVyYXRvcnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZ3JhcGhnZW5lcmF0b3JzL3Rlc3RzL0dyYXBoZ2VuZXJhdG9yc0V4YW1wbGUuamF2YQpAQCAtMCwwICsxLDEyNSBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmdyYXBoZ2VuZXJhdG9ycy50ZXN0czsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogCisgKiBDb3B5cmlnaHQgKGMpIDIwMTEgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuIAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyAKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0IAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwgCisgKiAKKyAqIENvbnRyaWJ1dG9yczogCisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqYXZhLmlvLkZpbGU7CitpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5EaWFnbm9zdGljOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5VUkk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3Q7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnJlc291cmNlLlJlc291cmNlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5yZXNvdXJjZS5SZXNvdXJjZVNldDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUucmVzb3VyY2UuaW1wbC5SZXNvdXJjZVNldEltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnV0aWwuRGlhZ25vc3RpY2lhbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUueG1pLmltcGwuWE1JUmVzb3VyY2VGYWN0b3J5SW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmdyYXBoZ2VuZXJhdG9ycy5HcmFwaGdlbmVyYXRvcnNGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhnZW5lcmF0b3JzLkdyYXBoZ2VuZXJhdG9yc1BhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaGdlbmVyYXRvcnMuU3F1YXJlTGF0dGljZUdyYXBoR2VuZXJhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udGVzdC5ncmFwaGdlbmVyYXRvcnMudGVzdHMuQWN0aXZhdG9yOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiBBIHNhbXBsZSB1dGlsaXR5IGZvciB0aGUgJzxlbT48Yj5ncmFwaGdlbmVyYXRvcnM8L2I+PC9lbT4nIHBhY2thZ2UuCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIEdyYXBoZ2VuZXJhdG9yc0V4YW1wbGUgeworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogTG9hZCBhbGwgdGhlIGFyZ3VtZW50IGZpbGUgcGF0aHMgb3IgVVJJcyBhcyBpbnN0YW5jZXMgb2YgdGhlIG1vZGVsLgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSBhcmdzIHRoZSBmaWxlIHBhdGhzIG9yIFVSSXMuCisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CisJCS8vIENyZWF0ZSBhIHJlc291cmNlIHNldCB0byBob2xkIHRoZSByZXNvdXJjZXMuCisJCS8vCisJCVJlc291cmNlU2V0IHJlc291cmNlU2V0ID0gbmV3IFJlc291cmNlU2V0SW1wbCgpOworCQkKKwkJLy8gUmVnaXN0ZXIgdGhlIGFwcHJvcHJpYXRlIHJlc291cmNlIGZhY3RvcnkgdG8gaGFuZGxlIGFsbCBmaWxlIGV4dGVuc2lvbnMuCisJCS8vCisJCXJlc291cmNlU2V0LmdldFJlc291cmNlRmFjdG9yeVJlZ2lzdHJ5KCkuZ2V0RXh0ZW5zaW9uVG9GYWN0b3J5TWFwKCkucHV0CisJCQkoUmVzb3VyY2UuRmFjdG9yeS5SZWdpc3RyeS5ERUZBVUxUX0VYVEVOU0lPTiwgCisJCQkgbmV3IFhNSVJlc291cmNlRmFjdG9yeUltcGwoKSk7CisKKwkJLy8gUmVnaXN0ZXIgdGhlIHBhY2thZ2UgdG8gZW5zdXJlIGl0IGlzIGF2YWlsYWJsZSBkdXJpbmcgbG9hZGluZy4KKwkJLy8KKwkJcmVzb3VyY2VTZXQuZ2V0UGFja2FnZVJlZ2lzdHJ5KCkucHV0CisJCQkoR3JhcGhnZW5lcmF0b3JzUGFja2FnZS5lTlNfVVJJLCAKKwkJCSBHcmFwaGdlbmVyYXRvcnNQYWNrYWdlLmVJTlNUQU5DRSk7CisgICAgICAgIAorCQkvLyBJZiB0aGVyZSBhcmUgbm8gYXJndW1lbnRzLCBlbWl0IGFuIGFwcHJvcHJpYXRlIHVzYWdlIG1lc3NhZ2UuCisJCS8vCisJCWlmIChhcmdzLmxlbmd0aCA9PSAwKSB7CisJCQlBY3RpdmF0b3IubG9nSW5mb3JtYXRpb24oIkVudGVyIGEgbGlzdCBvZiBmaWxlIHBhdGhzIG9yIFVSSXMgdGhhdCBoYXZlIGNvbnRlbnQgbGlrZSB0aGlzOiIpOyAvLyROT04tTkxTLTEkCisJCQl0cnkgeworCQkJCVJlc291cmNlIHJlc291cmNlID0gcmVzb3VyY2VTZXQuY3JlYXRlUmVzb3VyY2UoVVJJLmNyZWF0ZVVSSSgiaHR0cDovLy9NeS50ZXN0cy5ncmFwaGdlbmVyYXRvcnMiKSk7IC8vJE5PTi1OTFMtMSQKKwkJCQlTcXVhcmVMYXR0aWNlR3JhcGhHZW5lcmF0b3Igcm9vdCA9IEdyYXBoZ2VuZXJhdG9yc0ZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZVNxdWFyZUxhdHRpY2VHcmFwaEdlbmVyYXRvcigpOworCQkJCXJlc291cmNlLmdldENvbnRlbnRzKCkuYWRkKHJvb3QpOworCQkJCXJlc291cmNlLnNhdmUoU3lzdGVtLm91dCwgbnVsbCk7CisJCQl9CisJCQljYXRjaCAoSU9FeGNlcHRpb24gZXhjZXB0aW9uKSB7CisJCQkJZXhjZXB0aW9uLnByaW50U3RhY2tUcmFjZSgpOworCQkJfQorCQl9CisJCWVsc2UgeworCQkJLy8gSXRlcmF0ZSBvdmVyIGFsbCB0aGUgYXJndW1lbnRzLgorCQkJLy8KKwkJCWZvciAoaW50IGkgPSAwOyBpIDwgYXJncy5sZW5ndGg7ICsraSkgeworCQkJCS8vIENvbnN0cnVjdCB0aGUgVVJJIGZvciB0aGUgaW5zdGFuY2UgZmlsZS4KKwkJCQkvLyBUaGUgYXJndW1lbnQgaXMgdHJlYXRlZCBhcyBhIGZpbGUgcGF0aCBvbmx5IGlmIGl0IGRlbm90ZXMgYW4gZXhpc3RpbmcgZmlsZS4KKwkJCQkvLyBPdGhlcndpc2UsIGl0J3MgZGlyZWN0bHkgdHJlYXRlZCBhcyBhIFVSTC4KKwkJCQkvLworCQkJCUZpbGUgZmlsZSA9IG5ldyBGaWxlKGFyZ3NbaV0pOworCQkJCVVSSSB1cmkgPSBmaWxlLmlzRmlsZSgpID8gVVJJLmNyZWF0ZUZpbGVVUkkoZmlsZS5nZXRBYnNvbHV0ZVBhdGgoKSk6IFVSSS5jcmVhdGVVUkkoYXJnc1tpXSk7CisKKwkJCQl0cnkgeworCQkJCQkvLyBEZW1hbmQgbG9hZCByZXNvdXJjZSBmb3IgdGhpcyBmaWxlLgorCQkJCQkvLworCQkJCQlSZXNvdXJjZSByZXNvdXJjZSA9IHJlc291cmNlU2V0LmdldFJlc291cmNlKHVyaSwgdHJ1ZSk7CisJCQkJCUFjdGl2YXRvci5sb2dJbmZvcm1hdGlvbigiTG9hZGVkICIgKyB1cmkpOyAvLyROT04tTkxTLTEkCisKKwkJCQkJLy8gVmFsaWRhdGUgdGhlIGNvbnRlbnRzIG9mIHRoZSBsb2FkZWQgcmVzb3VyY2UuCisJCQkJCS8vCisJCQkJCWZvciAoRU9iamVjdCBlT2JqZWN0IDogcmVzb3VyY2UuZ2V0Q29udGVudHMoKSkgeworCQkJCQkJRGlhZ25vc3RpYyBkaWFnbm9zdGljID0gRGlhZ25vc3RpY2lhbi5JTlNUQU5DRS52YWxpZGF0ZShlT2JqZWN0KTsKKwkJCQkJCWlmIChkaWFnbm9zdGljLmdldFNldmVyaXR5KCkgIT0gRGlhZ25vc3RpYy5PSykgeworCQkJCQkJCXByaW50RGlhZ25vc3RpYyhkaWFnbm9zdGljLCAiIik7IC8vJE5PTi1OTFMtMSQKKwkJCQkJCX0KKwkJCQkJfQorCQkJCX0KKwkJCQljYXRjaCAoUnVudGltZUV4Y2VwdGlvbiBleGNlcHRpb24pIHsKKwkJCQkJQWN0aXZhdG9yLmxvZ0luZm9ybWF0aW9uKCJQcm9ibGVtIGxvYWRpbmcgIiArIHVyaSk7IC8vJE5PTi1OTFMtMSQKKwkJCQkJZXhjZXB0aW9uLnByaW50U3RhY2tUcmFjZSgpOworCQkJCX0KKwkJCX0KKwkJfQorCX0KKwkKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFByaW50cyBkaWFnbm9zdGljcyB3aXRoIGluZGVudGF0aW9uLgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSBkaWFnbm9zdGljIHRoZSBkaWFnbm9zdGljIHRvIHByaW50LgorCSAqIEBwYXJhbSBpbmRlbnQgdGhlIGluZGVudGF0aW9uIGZvciBwcmludGluZy4KKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCXByb3RlY3RlZCBzdGF0aWMgdm9pZCBwcmludERpYWdub3N0aWMoRGlhZ25vc3RpYyBkaWFnbm9zdGljLCBTdHJpbmcgaW5kZW50KSB7CisJCVN5c3RlbS5vdXQucHJpbnQoaW5kZW50KTsKKwkJQWN0aXZhdG9yLmxvZ0luZm9ybWF0aW9uKGRpYWdub3N0aWMuZ2V0TWVzc2FnZSgpKTsKKwkJZm9yIChEaWFnbm9zdGljIGNoaWxkIDogZGlhZ25vc3RpYy5nZXRDaGlsZHJlbigpKSB7CisJCQlwcmludERpYWdub3N0aWMoY2hpbGQsIGluZGVudCArICIgICIpOyAvLyROT04tTkxTLTEkCisJCX0KKwl9CisKK30gLy9HcmFwaGdlbmVyYXRvcnNFeGFtcGxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmdyYXBoZ2VuZXJhdG9ycy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9ncmFwaGdlbmVyYXRvcnMvdGVzdHMvR3JhcGhnZW5lcmF0b3JzVGVzdHMuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZ3JhcGhnZW5lcmF0b3JzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2dyYXBoZ2VuZXJhdG9ycy90ZXN0cy9HcmFwaGdlbmVyYXRvcnNUZXN0cy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVkZTYxMDgKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmdyYXBoZ2VuZXJhdG9ycy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9ncmFwaGdlbmVyYXRvcnMvdGVzdHMvR3JhcGhnZW5lcmF0b3JzVGVzdHMuamF2YQpAQCAtMCwwICsxLDU4IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhnZW5lcmF0b3JzLnRlc3RzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAKKyAqIENvcHlyaWdodCAoYykgMjAxMSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4gCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIAorICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wIAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQgCisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbCAKKyAqIAorICogQ29udHJpYnV0b3JzOiAKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0OworaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0U3VpdGU7CitpbXBvcnQganVuaXQudGV4dHVpLlRlc3RSdW5uZXI7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIEEgdGVzdCBzdWl0ZSBmb3IgdGhlICc8ZW0+PGI+Z3JhcGhnZW5lcmF0b3JzPC9iPjwvZW0+JyBwYWNrYWdlLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBHcmFwaGdlbmVyYXRvcnNUZXN0cyBleHRlbmRzIFRlc3RTdWl0ZSB7CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CisJCVRlc3RSdW5uZXIucnVuKHN1aXRlKCkpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlwdWJsaWMgc3RhdGljIFRlc3Qgc3VpdGUoKSB7CisJCVRlc3RTdWl0ZSBzdWl0ZSA9IG5ldyBHcmFwaGdlbmVyYXRvcnNUZXN0cygiZ3JhcGhnZW5lcmF0b3JzIFRlc3RzIik7IC8vJE5PTi1OTFMtMSQKKwkJc3VpdGUuYWRkVGVzdFN1aXRlKFNxdWFyZUxhdHRpY2VHcmFwaEdlbmVyYXRvclRlc3QuY2xhc3MpOworCQlzdWl0ZS5hZGRUZXN0U3VpdGUoTWlncmF0aW9uRWRnZUdyYXBoR2VuZXJhdG9yVGVzdC5jbGFzcyk7CisJCXN1aXRlLmFkZFRlc3RTdWl0ZShQbGF0ZUNhcnJlZUdsb2JlR3JhcGhHZW5lcmF0b3JUZXN0LmNsYXNzKTsKKwkJc3VpdGUuYWRkVGVzdFN1aXRlKFBhamVrTmV0R3JhcGhHZW5lcmF0b3JUZXN0LmNsYXNzKTsKKwkJcmV0dXJuIHN1aXRlOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBHcmFwaGdlbmVyYXRvcnNUZXN0cyhTdHJpbmcgbmFtZSkgeworCQlzdXBlcihuYW1lKTsKKwl9CisKK30gLy9HcmFwaGdlbmVyYXRvcnNUZXN0cwpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5ncmFwaGdlbmVyYXRvcnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZ3JhcGhnZW5lcmF0b3JzL3Rlc3RzL0xhdHRpY2VHcmFwaEdlbmVyYXRvclRlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZ3JhcGhnZW5lcmF0b3JzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2dyYXBoZ2VuZXJhdG9ycy90ZXN0cy9MYXR0aWNlR3JhcGhHZW5lcmF0b3JUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjM5MjVmMwotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZ3JhcGhnZW5lcmF0b3JzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2dyYXBoZ2VuZXJhdG9ycy90ZXN0cy9MYXR0aWNlR3JhcGhHZW5lcmF0b3JUZXN0LmphdmEKQEAgLTAsMCArMSw0OCBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmdyYXBoZ2VuZXJhdG9ycy50ZXN0czsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogCisgKiBDb3B5cmlnaHQgKGMpIDIwMTEgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuIAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyAKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0IAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwgCisgKiAKKyAqIENvbnRyaWJ1dG9yczogCisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmdyYXBoZ2VuZXJhdG9ycy5MYXR0aWNlR3JhcGhHZW5lcmF0b3I7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIEEgdGVzdCBjYXNlIGZvciB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+TGF0dGljZSBHcmFwaCBHZW5lcmF0b3I8L2I+PC9lbT4nLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBhYnN0cmFjdCBjbGFzcyBMYXR0aWNlR3JhcGhHZW5lcmF0b3JUZXN0IGV4dGVuZHMgR3JhcGhHZW5lcmF0b3JUZXN0IHsKKwkKKwlwdWJsaWMgc3RhdGljIGZpbmFsIGRvdWJsZSBURVNUX0FSRUE9MTAwLjA7CisJcHVibGljIHN0YXRpYyBmaW5hbCBkb3VibGUgVEVTVF9SQURJVVM9MTAwLjA7CisKKwkvKioKKwkgKiBDb25zdHJ1Y3RzIGEgbmV3IExhdHRpY2UgR3JhcGggR2VuZXJhdG9yIHRlc3QgY2FzZSB3aXRoIHRoZSBnaXZlbiBuYW1lLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBMYXR0aWNlR3JhcGhHZW5lcmF0b3JUZXN0KFN0cmluZyBuYW1lKSB7CisJCXN1cGVyKG5hbWUpOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIGZpeHR1cmUgZm9yIHRoaXMgTGF0dGljZSBHcmFwaCBHZW5lcmF0b3IgdGVzdCBjYXNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCBMYXR0aWNlR3JhcGhHZW5lcmF0b3IgZ2V0Rml4dHVyZSgpIHsKKwkJcmV0dXJuIChMYXR0aWNlR3JhcGhHZW5lcmF0b3IpZml4dHVyZTsKKwl9CisKK30gLy9MYXR0aWNlR3JhcGhHZW5lcmF0b3JUZXN0CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmdyYXBoZ2VuZXJhdG9ycy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9ncmFwaGdlbmVyYXRvcnMvdGVzdHMvTWlncmF0aW9uRWRnZUdyYXBoR2VuZXJhdG9yVGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5ncmFwaGdlbmVyYXRvcnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZ3JhcGhnZW5lcmF0b3JzL3Rlc3RzL01pZ3JhdGlvbkVkZ2VHcmFwaEdlbmVyYXRvclRlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMTc5MzFkCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5ncmFwaGdlbmVyYXRvcnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZ3JhcGhnZW5lcmF0b3JzL3Rlc3RzL01pZ3JhdGlvbkVkZ2VHcmFwaEdlbmVyYXRvclRlc3QuamF2YQpAQCAtMCwwICsxLDc5IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhnZW5lcmF0b3JzLnRlc3RzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAKKyAqIENvcHlyaWdodCAoYykgMjAxMSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4gCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIAorICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wIAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQgCisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbCAKKyAqIAorICogQ29udHJpYnV0b3JzOiAKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGp1bml0LnRleHR1aS5UZXN0UnVubmVyOworCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaGdlbmVyYXRvcnMuR3JhcGhnZW5lcmF0b3JzRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmdyYXBoZ2VuZXJhdG9ycy5NaWdyYXRpb25FZGdlR3JhcGhHZW5lcmF0b3I7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIEEgdGVzdCBjYXNlIGZvciB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+TWlncmF0aW9uIEVkZ2UgR3JhcGggR2VuZXJhdG9yPC9iPjwvZW0+Jy4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgTWlncmF0aW9uRWRnZUdyYXBoR2VuZXJhdG9yVGVzdCBleHRlbmRzIEdyYXBoR2VuZXJhdG9yVGVzdCB7CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CisJCVRlc3RSdW5uZXIucnVuKE1pZ3JhdGlvbkVkZ2VHcmFwaEdlbmVyYXRvclRlc3QuY2xhc3MpOworCX0KKworCS8qKgorCSAqIENvbnN0cnVjdHMgYSBuZXcgTWlncmF0aW9uIEVkZ2UgR3JhcGggR2VuZXJhdG9yIHRlc3QgY2FzZSB3aXRoIHRoZSBnaXZlbiBuYW1lLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBNaWdyYXRpb25FZGdlR3JhcGhHZW5lcmF0b3JUZXN0KFN0cmluZyBuYW1lKSB7CisJCXN1cGVyKG5hbWUpOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIGZpeHR1cmUgZm9yIHRoaXMgTWlncmF0aW9uIEVkZ2UgR3JhcGggR2VuZXJhdG9yIHRlc3QgY2FzZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgTWlncmF0aW9uRWRnZUdyYXBoR2VuZXJhdG9yIGdldEZpeHR1cmUoKSB7CisJCXJldHVybiAoTWlncmF0aW9uRWRnZUdyYXBoR2VuZXJhdG9yKWZpeHR1cmU7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZSNzZXRVcCgpCisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIHNldFVwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCXNldEZpeHR1cmUoR3JhcGhnZW5lcmF0b3JzRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlTWlncmF0aW9uRWRnZUdyYXBoR2VuZXJhdG9yKCkpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2UjdGVhckRvd24oKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgdm9pZCB0ZWFyRG93bigpIHRocm93cyBFeGNlcHRpb24geworCQlzZXRGaXh0dXJlKG51bGwpOworCX0KKworfSAvL01pZ3JhdGlvbkVkZ2VHcmFwaEdlbmVyYXRvclRlc3QKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZ3JhcGhnZW5lcmF0b3JzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2dyYXBoZ2VuZXJhdG9ycy90ZXN0cy9QYWpla05ldEdyYXBoR2VuZXJhdG9yVGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5ncmFwaGdlbmVyYXRvcnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZ3JhcGhnZW5lcmF0b3JzL3Rlc3RzL1BhamVrTmV0R3JhcGhHZW5lcmF0b3JUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzRjZjA2MQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZ3JhcGhnZW5lcmF0b3JzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2dyYXBoZ2VuZXJhdG9ycy90ZXN0cy9QYWpla05ldEdyYXBoR2VuZXJhdG9yVGVzdC5qYXZhCkBAIC0wLDAgKzEsMjA0IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhnZW5lcmF0b3JzLnRlc3RzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAKKyAqIENvcHlyaWdodCAoYykgMjAxMSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4gCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIAorICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wIAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQgCisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbCAKKyAqIAorICogQ29udHJpYnV0b3JzOiAKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGphdmEuaW8uRmlsZTsKK2ltcG9ydCBqYXZhLmlvLkZpbGVJbnB1dFN0cmVhbTsKK2ltcG9ydCBqYXZhLmlvLkZpbGVPdXRwdXRTdHJlYW07CitpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtOworaW1wb3J0IGphdmEuaW8uT3V0cHV0U3RyZWFtOworCitpbXBvcnQganVuaXQudGV4dHVpLlRlc3RSdW5uZXI7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQ29yZUV4Y2VwdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGxhdGZvcm07CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlVSSTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUucmVzb3VyY2UuUmVzb3VyY2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnJlc291cmNlLlJlc291cmNlU2V0OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5yZXNvdXJjZS5pbXBsLlJlc291cmNlU2V0SW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUueG1pLmltcGwuWE1JUmVzb3VyY2VGYWN0b3J5SW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguR3JhcGg7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaGdlbmVyYXRvcnMuR3JhcGhnZW5lcmF0b3JzRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmdyYXBoZ2VuZXJhdG9ycy5HcmFwaGdlbmVyYXRvcnNQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhnZW5lcmF0b3JzLlBhamVrTmV0R3JhcGhHZW5lcmF0b3I7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIEEgdGVzdCBjYXNlIGZvciB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+UGFqZWsgTmV0IEdyYXBoIEdlbmVyYXRvcjwvYj48L2VtPicuCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIFBhamVrTmV0R3JhcGhHZW5lcmF0b3JUZXN0IGV4dGVuZHMgR3JhcGhHZW5lcmF0b3JUZXN0IHsKKworCXByaXZhdGUgc3RhdGljIGZpbmFsIFVSSSB0ZXN0VVJJID0gVVJJLmNyZWF0ZVVSSSgiaHR0cDovLy9QQUpFS19ORVRfR0VORVJBVE9SLmdyYXBoZ2VuZXJhdG9ycyIpOyAvLyROT04tTkxTLTEkCisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgZG91YmxlIFRFU1RfQVJFQSA9IDEwMC4wOworCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBURVNUX0ZJTEUgPSAiUGFqZWtOZXRHcmFwaEdlbmVyYXRvclRlc3QubmV0IjsKKwlwcml2YXRlIHN0YXRpYyBTdHJpbmcgVEVTVF9GSUxFX1BBVEggPSBudWxsOworCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBSVU5USU1FX1dPUktTUEFDRV9QQVRIID0gIFBsYXRmb3JtLmdldExvY2F0aW9uKCkudG9PU1N0cmluZygpOworCXByaXZhdGUgZmluYWwgc3RhdGljIFN0cmluZyBSRUZFUkVOQ0VfRElSID0gIi4vcmVzb3VyY2VzLyI7IC8vJE5PTi1OTFMtMSQKKwlwcml2YXRlIGZpbmFsIHN0YXRpYyBTdHJpbmcgc2VwID0gRmlsZS5zZXBhcmF0b3I7CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CisJCVRlc3RSdW5uZXIucnVuKFBhamVrTmV0R3JhcGhHZW5lcmF0b3JUZXN0LmNsYXNzKTsKKwl9CisJCisJLyoqCisJICogY3JlYXRlcyB0aGUgUGFqZWtOZXRHcmFwaEdlbmVyYXRvcigpCisJICovCisJcHVibGljIFBhamVrTmV0R3JhcGhHZW5lcmF0b3IgY3JlYXRlRml4dHVyZSgpIHsKKwkJLy8gQ3JlYXRlIGEgcmVzb3VyY2Ugc2V0IHRvIGhvbGQgdGhlIHJlc291cmNlcy4KKwkJLy8KKwkJUmVzb3VyY2VTZXQgcmVzb3VyY2VTZXQgPSBuZXcgUmVzb3VyY2VTZXRJbXBsKCk7CisJCQorCQkvLyBSZWdpc3RlciB0aGUgYXBwcm9wcmlhdGUgcmVzb3VyY2UgZmFjdG9yeSB0byBoYW5kbGUgYWxsIGZpbGUgZXh0ZW5zaW9ucy4KKwkJLy8KKwkJcmVzb3VyY2VTZXQuZ2V0UmVzb3VyY2VGYWN0b3J5UmVnaXN0cnkoKS5nZXRFeHRlbnNpb25Ub0ZhY3RvcnlNYXAoKS5wdXQKKwkJCShSZXNvdXJjZS5GYWN0b3J5LlJlZ2lzdHJ5LkRFRkFVTFRfRVhURU5TSU9OLCAKKwkJCSBuZXcgWE1JUmVzb3VyY2VGYWN0b3J5SW1wbCgpKTsKKworCQkvLyBSZWdpc3RlciB0aGUgcGFja2FnZSB0byBlbnN1cmUgaXQgaXMgYXZhaWxhYmxlIGR1cmluZyBsb2FkaW5nLgorCQkvLworCQlyZXNvdXJjZVNldC5nZXRQYWNrYWdlUmVnaXN0cnkoKS5wdXQKKwkJCShHcmFwaGdlbmVyYXRvcnNQYWNrYWdlLmVOU19VUkksIAorCQkJIEdyYXBoZ2VuZXJhdG9yc1BhY2thZ2UuZUlOU1RBTkNFKTsKKwkJdHJ5IHsKKwkJCVJlc291cmNlIHJlc291cmNlID0gcmVzb3VyY2VTZXQuY3JlYXRlUmVzb3VyY2UoVVJJLmNyZWF0ZVVSSSgiaHR0cDovLy9UZXN0LlBhamVrTmV0LmdyYXBoZ2VuZXJhdG9ycyIpKTsgLy8kTk9OLU5MUy0xJAorCQkJZml4dHVyZSA9IEdyYXBoZ2VuZXJhdG9yc0ZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZVBhamVrTmV0R3JhcGhHZW5lcmF0b3IoKTsKKwkJCXJlc291cmNlLmdldENvbnRlbnRzKCkuYWRkKGZpeHR1cmUpOworCQkJLy9yZXNvdXJjZS5zYXZlKFN5c3RlbS5vdXQsIG51bGwpOworCQl9CisJCWNhdGNoIChFeGNlcHRpb24gZXhjZXB0aW9uKSB7CisJCQlleGNlcHRpb24ucHJpbnRTdGFja1RyYWNlKCk7CisJCQlmYWlsKCk7CisJCX0KKwkJCisJCVRFU1RfRklMRV9QQVRIID0gZ2V0VGVzdEZpbGUoVEVTVF9GSUxFKTsJCQorCQkKKwkJcmV0dXJuIChQYWpla05ldEdyYXBoR2VuZXJhdG9yKSBmaXh0dXJlOworCX0vLyBjcmVhdGVGaXh0dXJlKCkKKworCS8qKgorCSAqIENvbnN0cnVjdHMgYSBuZXcgUGFqZWsgTmV0IEdyYXBoIEdlbmVyYXRvciB0ZXN0IGNhc2Ugd2l0aCB0aGUgZ2l2ZW4gbmFtZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgUGFqZWtOZXRHcmFwaEdlbmVyYXRvclRlc3QoU3RyaW5nIG5hbWUpIHsKKwkJc3VwZXIobmFtZSk7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgZml4dHVyZSBmb3IgdGhpcyBQYWplayBOZXQgR3JhcGggR2VuZXJhdG9yIHRlc3QgY2FzZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgUGFqZWtOZXRHcmFwaEdlbmVyYXRvciBnZXRGaXh0dXJlKCkgeworCQlyZXR1cm4gKFBhamVrTmV0R3JhcGhHZW5lcmF0b3IpZml4dHVyZTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlI3NldFVwKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgc2V0VXAoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJc2V0Rml4dHVyZShHcmFwaGdlbmVyYXRvcnNGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVQYWpla05ldEdyYXBoR2VuZXJhdG9yKCkpOworCX0KKwkKKwkvKioKKwkgKiBUZXN0cyB0aGUgY3JlYXRpb24gb2YgYSBQYWpla05ldEdyYXBoR2VuZXJhdG9yCisJICovCisJcHVibGljIHZvaWQgdGVzdFBhamVrTmV0R3JhcGhHZW5lcmF0b3IoKSB7CisJCVBhamVrTmV0R3JhcGhHZW5lcmF0b3IgcG5nZyA9IGdldEZpeHR1cmUoKTsKKwkJcG5nZy5zZXRBcmVhKFRFU1RfQVJFQSk7CisJCXBuZ2cuc2V0RGF0YUZpbGVfbmV0KFRFU1RfRklMRV9QQVRIKTsKKwkJcG5nZy5zZXRVUkkodGVzdFVSSSk7CisJCVVSSSB1cmkgPSBwbmdnLmdldFVSSSgpOworCQlpZiAodXJpPT1udWxsKSBmYWlsKCk7CisJCUdyYXBoIGcgPSBwbmdnLmdldEdyYXBoKCk7CisJCS8qCisJCUFjdGl2YXRvci5sb2dJbmZvcm1hdGlvbihnLmdldE51bUR5bmFtaWNMYWJlbHMoKSArICJcdCIgKyBnLmdldE51bUVkZ2VzKCkgKyAiXHQiICsgZy5nZXROdW1HcmFwaExhYmVscygpICsgIlx0IiArCisJCQkJZy5nZXROdW1Ob2RlTGFiZWxzKCkgKyAiXHQiICsgZy5nZXROdW1Ob2RlcygpKTsKKwkJCQkqLworCQlhc3NlcnRUcnVlKCJOdW1EeW5hbWljTGFiZWxzIHNob3VsZCBiZSAwLCBidXQgaXMgIiArIGcuZ2V0TnVtRHluYW1pY0xhYmVscygpICsgIiAuLi4iLCBnLmdldE51bUR5bmFtaWNMYWJlbHMoKSA9PSAwKTsKKwkJYXNzZXJ0VHJ1ZSgiTnVtRWRnZXMgc2hvdWxkIGJlIDc0LCBidXQgaXMgIiArIGcuZ2V0TnVtRWRnZXMoKSArICIgLi4uIiwgZy5nZXROdW1FZGdlcygpID09IDc0KTsKKwkJYXNzZXJ0VHJ1ZSgiTnVtR3JhcGhMYWJlbHMgc2hvdWxkIGJlIDAsIGJ1dCBpcyAiICsgZy5nZXROdW1HcmFwaExhYmVscygpICsgIiAuLi4iLCBnLmdldE51bUdyYXBoTGFiZWxzKCkgPT0gMCk7CisJCWFzc2VydFRydWUoIk51bU5vZGVMYWJlbHMgc2hvdWxkIGJlIDE4NiwgYnV0IGlzICIgKyBnLmdldE51bU5vZGVMYWJlbHMoKSArICIgLi4uIiwgZy5nZXROdW1Ob2RlTGFiZWxzKCkgPT0gMTg2KTsKKwkJYXNzZXJ0VHJ1ZSgiTnVtTm9kZXMgc2hvdWxkIGJlIDYyLCBidXQgaXMgIiArIGcuZ2V0TnVtTm9kZXMoKSArICIgLi4uIiwgZy5nZXROdW1Ob2RlcygpID09IDYyKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlI3RlYXJEb3duKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgdGVhckRvd24oKSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJc2V0Rml4dHVyZShudWxsKTsKKwl9CisJCisJcHJpdmF0ZSBTdHJpbmcgZ2V0VGVzdEZpbGUoU3RyaW5nIHRlc3RGaWxlbmFtZSkgeworCQkvLyAxLiBjb3B5IHRoZSB0ZXN0IGZpbGUgRlJPTSB0aGUgc291cmNlIGRpcmVjdG9yeSBUTyB0aGUgcnVudGltZSB3b3Jrc3BhY2Ugd2hlcmUgZXZlciB0aGF0IGlzCisJCUZpbGUgcmVmRGlyZWN0b3J5ID0gbmV3IEZpbGUoUkVGRVJFTkNFX0RJUik7CisJCWlmIChyZWZEaXJlY3RvcnkuaXNEaXJlY3RvcnkoKSkgeworCQkJLy8gc2hvdWxkIGFsd2F5cyBiZSB0cnVlCisJCQlGaWxlW10gZmlsZXMgPSByZWZEaXJlY3RvcnkubGlzdEZpbGVzKCk7CisJCQlpZiAoZmlsZXM9PW51bGwpIGZhaWwoIkVycm9yOlBhamVrTmV0R3JhcGhHZW5lcmF0b3IgRXhhbXBsZSBGaWxlIG5vdCBmb3VuZCAhISIpOy8vJE5PTi1OTFMtMSQKKwkJCWZvciAoaW50IGkgPSAwOyBpIDwgZmlsZXMubGVuZ3RoOyBpKyspIHsKKwkJCQlpZiAoZmlsZXNbaV0uZ2V0TmFtZSgpLmVxdWFsc0lnbm9yZUNhc2UodGVzdEZpbGVuYW1lKSkgeworCQkJCQlTdHJpbmcgcmVzRmlsZSA9IFJVTlRJTUVfV09SS1NQQUNFX1BBVEggKyBzZXAgKyBmaWxlc1tpXS5nZXROYW1lKCk7CisJCQkJCXRyeSB7CisJCQkJCQljb3B5RmlsZShmaWxlc1tpXSwgbmV3IEZpbGUocmVzRmlsZSkpOwkJCQkJCQorCQkJCQkJcmV0dXJuIHJlc0ZpbGU7CisJCQkJCQkKKwkJCQkJfSBjYXRjaCAoRXhjZXB0aW9uIGlvZSkgeworCQkJCQkJU3lzdGVtLm91dC5wcmludGxuKCJDb3B5IGZhaWxlZCAiK2lvZS5nZXRNZXNzYWdlKCkpOworCQkJCQkJaW9lLnByaW50U3RhY2tUcmFjZSgpOworCQkJCQkJZmFpbCgiRXJyb3I6UGFqZWtOZXRHcmFwaEdlbmVyYXRvciBmYWlsZWQgdG8gY29weSB0ZXN0IGZpbGUgICEhIik7Ly8kTk9OLU5MUy0xJAorCQkJCQl9CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCX0vL2ZvcgorCQorCQl9Ly8gaWYKKwkJLy8gZWxzZSB3ZSBmYWlsZQorCQlmYWlsKCJFcnJvcjpQYWpla05ldEdyYXBoR2VuZXJhdG9yIGZhaWxlZCB0byBmaW5kIHRlc3QgZmlsZSAgISEiKTsvLyROT04tTkxTLTEkCisJCXJldHVybiAiIjsJCQorCX0KKyAgICBwcml2YXRlIHN0YXRpYyB2b2lkIGNvcHlGaWxlKEZpbGUgc291cmNlRmlsZSwgRmlsZSB0YXJnZXRGaWxlKSAgdGhyb3dzIElPRXhjZXB0aW9uLCBDb3JlRXhjZXB0aW9uIHsKKyAgIAkgCisgICAgICAgIGlmICh0YXJnZXRGaWxlLmV4aXN0cygpKSByZXR1cm47IC8vIGFscmVhZHkgZXhpc3RzCisgICAgICAgICAgICBJbnB1dFN0cmVhbSBpbnB1dFN0cmVhbSA9IG5ldyBGaWxlSW5wdXRTdHJlYW0oc291cmNlRmlsZSk7CisgICAgICAgICAgICBPdXRwdXRTdHJlYW0gb3V0cHV0U3RyZWFtID0gbmV3IEZpbGVPdXRwdXRTdHJlYW0odGFyZ2V0RmlsZSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIC8vIENvcHkgdGhlIGJpdHMgZnJvbSBpbnN0cmVhbSB0byBvdXRzdHJlYW0KKyAgICAgICAgICAgIGJ5dGVbXSBidWZmZXIgPSBuZXcgYnl0ZVsxMDI0XTsKKyAgICAgICAgICAgIGludCBsZW47CisgICAgICAgICAgICB3aGlsZSAoKGxlbiA9IGlucHV0U3RyZWFtLnJlYWQoYnVmZmVyKSkgPiAwKSB7CisgICAgICAgICAgICAgICAgb3V0cHV0U3RyZWFtLndyaXRlKGJ1ZmZlciwgMCwgbGVuKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlucHV0U3RyZWFtLmNsb3NlKCk7CisgICAgICAgICAgICBvdXRwdXRTdHJlYW0uY2xvc2UoKTsKKyAgICAgfQorCit9IC8vUGFqZWtOZXRHcmFwaEdlbmVyYXRvclRlc3QKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZ3JhcGhnZW5lcmF0b3JzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2dyYXBoZ2VuZXJhdG9ycy90ZXN0cy9QbGF0ZUNhcnJlZUdsb2JlR3JhcGhHZW5lcmF0b3JUZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmdyYXBoZ2VuZXJhdG9ycy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9ncmFwaGdlbmVyYXRvcnMvdGVzdHMvUGxhdGVDYXJyZWVHbG9iZUdyYXBoR2VuZXJhdG9yVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJmYWQ2OTMKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmdyYXBoZ2VuZXJhdG9ycy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9ncmFwaGdlbmVyYXRvcnMvdGVzdHMvUGxhdGVDYXJyZWVHbG9iZUdyYXBoR2VuZXJhdG9yVGVzdC5qYXZhCkBAIC0wLDAgKzEsMTMzIEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhnZW5lcmF0b3JzLnRlc3RzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAKKyAqIENvcHlyaWdodCAoYykgMjAxMSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4gCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIAorICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wIAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQgCisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbCAKKyAqIAorICogQ29udHJpYnV0b3JzOiAKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGp1bml0LnRleHR1aS5UZXN0UnVubmVyOworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlVSSTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUucmVzb3VyY2UuUmVzb3VyY2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnJlc291cmNlLlJlc291cmNlU2V0OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5yZXNvdXJjZS5pbXBsLlJlc291cmNlU2V0SW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUueG1pLmltcGwuWE1JUmVzb3VyY2VGYWN0b3J5SW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmdyYXBoZ2VuZXJhdG9ycy5HcmFwaGdlbmVyYXRvcnNGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhnZW5lcmF0b3JzLkdyYXBoZ2VuZXJhdG9yc1BhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaGdlbmVyYXRvcnMuUGxhdGVDYXJyZWVHbG9iZUdyYXBoR2VuZXJhdG9yOworCisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIEEgdGVzdCBjYXNlIGZvciB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+UGxhdGUgQ2FycmVlIEdsb2JlIEdyYXBoIEdlbmVyYXRvcjwvYj48L2VtPicuCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIFBsYXRlQ2FycmVlR2xvYmVHcmFwaEdlbmVyYXRvclRlc3QgZXh0ZW5kcyBMYXR0aWNlR3JhcGhHZW5lcmF0b3JUZXN0IHsKKwkKKwlwdWJsaWMgc3RhdGljIGZpbmFsIFVSSSB0ZXN0VVJJID0gVVJJLmNyZWF0ZVVSSSgiaHR0cDovLy9QTEFURV9DQVJSRUVfR0VORVJBVE9SLmdyYXBoZ2VuZXJhdG9ycyIpOyAvLyROT04tTkxTLTEkCisKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKKwkJVGVzdFJ1bm5lci5ydW4oUGxhdGVDYXJyZWVHbG9iZUdyYXBoR2VuZXJhdG9yVGVzdC5jbGFzcyk7CisJfQorCQorCS8qKgorCSAqIGNyZWF0ZXMgdGhlIFBsYXRlQ2FycmVlR2xvYmVHcmFwaEdlbmVyYXRvcigpCisJICovCisJcHVibGljIFBsYXRlQ2FycmVlR2xvYmVHcmFwaEdlbmVyYXRvciBjcmVhdGVGaXh0dXJlKCkgeworCQkvLyBDcmVhdGUgYSByZXNvdXJjZSBzZXQgdG8gaG9sZCB0aGUgcmVzb3VyY2VzLgorCQkvLworCQlSZXNvdXJjZVNldCByZXNvdXJjZVNldCA9IG5ldyBSZXNvdXJjZVNldEltcGwoKTsKKwkJCisJCS8vIFJlZ2lzdGVyIHRoZSBhcHByb3ByaWF0ZSByZXNvdXJjZSBmYWN0b3J5IHRvIGhhbmRsZSBhbGwgZmlsZSBleHRlbnNpb25zLgorCQkvLworCQlyZXNvdXJjZVNldC5nZXRSZXNvdXJjZUZhY3RvcnlSZWdpc3RyeSgpLmdldEV4dGVuc2lvblRvRmFjdG9yeU1hcCgpLnB1dAorCQkJKFJlc291cmNlLkZhY3RvcnkuUmVnaXN0cnkuREVGQVVMVF9FWFRFTlNJT04sIAorCQkJIG5ldyBYTUlSZXNvdXJjZUZhY3RvcnlJbXBsKCkpOworCisJCS8vIFJlZ2lzdGVyIHRoZSBwYWNrYWdlIHRvIGVuc3VyZSBpdCBpcyBhdmFpbGFibGUgZHVyaW5nIGxvYWRpbmcuCisJCS8vCisJCXJlc291cmNlU2V0LmdldFBhY2thZ2VSZWdpc3RyeSgpLnB1dAorCQkJKEdyYXBoZ2VuZXJhdG9yc1BhY2thZ2UuZU5TX1VSSSwgCisJCQkgR3JhcGhnZW5lcmF0b3JzUGFja2FnZS5lSU5TVEFOQ0UpOworCQl0cnkgeworCQkJUmVzb3VyY2UgcmVzb3VyY2UgPSByZXNvdXJjZVNldC5jcmVhdGVSZXNvdXJjZShVUkkuY3JlYXRlVVJJKCJodHRwOi8vL1Rlc3QuUGxhdGVDYXJyZWUuZ3JhcGhnZW5lcmF0b3JzIikpOyAvLyROT04tTkxTLTEkCisJCQlmaXh0dXJlID0gR3JhcGhnZW5lcmF0b3JzRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlUGxhdGVDYXJyZWVHbG9iZUdyYXBoR2VuZXJhdG9yKCk7CisJCQlyZXNvdXJjZS5nZXRDb250ZW50cygpLmFkZChmaXh0dXJlKTsKKwkJCS8vcmVzb3VyY2Uuc2F2ZShTeXN0ZW0ub3V0LCBudWxsKTsKKwkJfQorCQljYXRjaCAoRXhjZXB0aW9uIGV4Y2VwdGlvbikgeworCQkJZXhjZXB0aW9uLnByaW50U3RhY2tUcmFjZSgpOworCQkJZmFpbCgpOworCQl9CisJCXJldHVybiAoUGxhdGVDYXJyZWVHbG9iZUdyYXBoR2VuZXJhdG9yKSBmaXh0dXJlOworCX0vLyBjcmVhdGVGaXh0dXJlKCkKKworCS8qKgorCSAqIENvbnN0cnVjdHMgYSBuZXcgUGxhdGUgQ2FycmVlIEdsb2JlIEdyYXBoIEdlbmVyYXRvciB0ZXN0IGNhc2Ugd2l0aCB0aGUgZ2l2ZW4gbmFtZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgUGxhdGVDYXJyZWVHbG9iZUdyYXBoR2VuZXJhdG9yVGVzdChTdHJpbmcgbmFtZSkgeworCQlzdXBlcihuYW1lKTsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBmaXh0dXJlIGZvciB0aGlzIFBsYXRlIENhcnJlZSBHbG9iZSBHcmFwaCBHZW5lcmF0b3IgdGVzdCBjYXNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCBQbGF0ZUNhcnJlZUdsb2JlR3JhcGhHZW5lcmF0b3IgZ2V0Rml4dHVyZSgpIHsKKwkJcmV0dXJuIChQbGF0ZUNhcnJlZUdsb2JlR3JhcGhHZW5lcmF0b3IpZml4dHVyZTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlI3NldFVwKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgc2V0VXAoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJc2V0Rml4dHVyZShHcmFwaGdlbmVyYXRvcnNGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVQbGF0ZUNhcnJlZUdsb2JlR3JhcGhHZW5lcmF0b3IoKSk7CisJfQorCisJLyoqCisJICogVGVzdHMgdGhlIGNyZWF0aW9uIG9mIGEgUGxhdGVDYXJyZWVHbG9iZUdyYXBoR2VuZXJhdG9yCisJICovCisJcHVibGljIHZvaWQgdGVzdFBsYXRlQ2FycmVlR3JhcGhHZW5lcmF0b3IoKSB7CisJCVBsYXRlQ2FycmVlR2xvYmVHcmFwaEdlbmVyYXRvciBwY2dnZyA9IGdldEZpeHR1cmUoKTsKKwkJcGNnZ2cuc2V0UmFkaXVzKFRFU1RfUkFESVVTKTsKKwkJcGNnZ2cuc2V0VVJJKHRlc3RVUkkpOworCQlVUkkgdXJpID0gcGNnZ2cuZ2V0VVJJKCk7CisJCWlmKHVyaT09bnVsbCkgZmFpbCgpOworCQkvL1RPRE8gaW1wbGVtZW50IGdlbmVyYXRvciB0ZXN0cyBoZXJlCisJfQorCQorCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2UjdGVhckRvd24oKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgdm9pZCB0ZWFyRG93bigpIHRocm93cyBFeGNlcHRpb24geworCQlzZXRGaXh0dXJlKG51bGwpOworCX0KKworfSAvL1BsYXRlQ2FycmVlR2xvYmVHcmFwaEdlbmVyYXRvclRlc3QKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZ3JhcGhnZW5lcmF0b3JzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2dyYXBoZ2VuZXJhdG9ycy90ZXN0cy9TcXVhcmVMYXR0aWNlR3JhcGhHZW5lcmF0b3JUZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmdyYXBoZ2VuZXJhdG9ycy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9ncmFwaGdlbmVyYXRvcnMvdGVzdHMvU3F1YXJlTGF0dGljZUdyYXBoR2VuZXJhdG9yVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA5MzY1M2UKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmdyYXBoZ2VuZXJhdG9ycy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9ncmFwaGdlbmVyYXRvcnMvdGVzdHMvU3F1YXJlTGF0dGljZUdyYXBoR2VuZXJhdG9yVGVzdC5qYXZhCkBAIC0wLDAgKzEsMTM0IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhnZW5lcmF0b3JzLnRlc3RzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAKKyAqIENvcHlyaWdodCAoYykgMjAxMSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4gCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIAorICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wIAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQgCisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbCAKKyAqIAorICogQ29udHJpYnV0b3JzOiAKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCitpbXBvcnQganVuaXQudGV4dHVpLlRlc3RSdW5uZXI7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuVVJJOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5yZXNvdXJjZS5SZXNvdXJjZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUucmVzb3VyY2UuUmVzb3VyY2VTZXQ7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnJlc291cmNlLmltcGwuUmVzb3VyY2VTZXRJbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS54bWkuaW1wbC5YTUlSZXNvdXJjZUZhY3RvcnlJbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhnZW5lcmF0b3JzLkdyYXBoZ2VuZXJhdG9yc0ZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaGdlbmVyYXRvcnMuR3JhcGhnZW5lcmF0b3JzUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmdyYXBoZ2VuZXJhdG9ycy5TcXVhcmVMYXR0aWNlR3JhcGhHZW5lcmF0b3I7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIEEgdGVzdCBjYXNlIGZvciB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+U3F1YXJlIExhdHRpY2UgR3JhcGggR2VuZXJhdG9yPC9iPjwvZW0+Jy4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgU3F1YXJlTGF0dGljZUdyYXBoR2VuZXJhdG9yVGVzdCBleHRlbmRzIExhdHRpY2VHcmFwaEdlbmVyYXRvclRlc3QgeworCQorCXB1YmxpYyBzdGF0aWMgZmluYWwgVVJJIHRlc3RVUkkgPSBVUkkuY3JlYXRlVVJJKCJodHRwOi8vL1NRVUFSRV9MQVRUSUNFX0dFTkVSQVRPUi5ncmFwaGdlbmVyYXRvcnMiKTsgLy8kTk9OLU5MUy0xJAorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgeworCQlUZXN0UnVubmVyLnJ1bihTcXVhcmVMYXR0aWNlR3JhcGhHZW5lcmF0b3JUZXN0LmNsYXNzKTsKKwl9CisJCisJLyoqCisJICogY3JlYXRlcyB0aGUgU3F1YXJlTGF0dGljZUdyYXBoR2VuZXJhdG9yKCkKKwkgKi8KKwlwdWJsaWMgU3F1YXJlTGF0dGljZUdyYXBoR2VuZXJhdG9yIGNyZWF0ZUZpeHR1cmUoKSB7CisJCQorCQkvLyBDcmVhdGUgYSByZXNvdXJjZSBzZXQgdG8gaG9sZCB0aGUgcmVzb3VyY2VzLgorCQkvLworCQlSZXNvdXJjZVNldCByZXNvdXJjZVNldCA9IG5ldyBSZXNvdXJjZVNldEltcGwoKTsKKwkJCisJCS8vIFJlZ2lzdGVyIHRoZSBhcHByb3ByaWF0ZSByZXNvdXJjZSBmYWN0b3J5IHRvIGhhbmRsZSBhbGwgZmlsZSBleHRlbnNpb25zLgorCQkvLworCQlyZXNvdXJjZVNldC5nZXRSZXNvdXJjZUZhY3RvcnlSZWdpc3RyeSgpLmdldEV4dGVuc2lvblRvRmFjdG9yeU1hcCgpLnB1dAorCQkJKFJlc291cmNlLkZhY3RvcnkuUmVnaXN0cnkuREVGQVVMVF9FWFRFTlNJT04sIAorCQkJIG5ldyBYTUlSZXNvdXJjZUZhY3RvcnlJbXBsKCkpOworCisJCS8vIFJlZ2lzdGVyIHRoZSBwYWNrYWdlIHRvIGVuc3VyZSBpdCBpcyBhdmFpbGFibGUgZHVyaW5nIGxvYWRpbmcuCisJCS8vCisJCXJlc291cmNlU2V0LmdldFBhY2thZ2VSZWdpc3RyeSgpLnB1dAorCQkJKEdyYXBoZ2VuZXJhdG9yc1BhY2thZ2UuZU5TX1VSSSwgCisJCQkgR3JhcGhnZW5lcmF0b3JzUGFja2FnZS5lSU5TVEFOQ0UpOworCQkKKwkJdHJ5IHsKKwkJCVJlc291cmNlIHJlc291cmNlID0gcmVzb3VyY2VTZXQuY3JlYXRlUmVzb3VyY2UoVVJJLmNyZWF0ZVVSSSgiaHR0cDovLy9URVNULlNRVUFSRUxBVFRJQ0UuZ3JhcGhnZW5lcmF0b3JzIikpOyAvLyROT04tTkxTLTEkCisJCQlmaXh0dXJlID0gR3JhcGhnZW5lcmF0b3JzRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlU3F1YXJlTGF0dGljZUdyYXBoR2VuZXJhdG9yKCk7CisJCQlyZXNvdXJjZS5nZXRDb250ZW50cygpLmFkZChmaXh0dXJlKTsKKwkJCS8vcmVzb3VyY2Uuc2F2ZShTeXN0ZW0ub3V0LCBudWxsKTsKKwkJfQorCQljYXRjaCAoRXhjZXB0aW9uIGV4Y2VwdGlvbikgeworCQkJZXhjZXB0aW9uLnByaW50U3RhY2tUcmFjZSgpOworCQkJZmFpbCgpOworCQl9CisJCXJldHVybiAoU3F1YXJlTGF0dGljZUdyYXBoR2VuZXJhdG9yKSBmaXh0dXJlOworCX0vLyBjcmVhdGVGaXh0dXJlKCkKKworCS8qKgorCSAqIENvbnN0cnVjdHMgYSBuZXcgU3F1YXJlIExhdHRpY2UgR3JhcGggR2VuZXJhdG9yIHRlc3QgY2FzZSB3aXRoIHRoZSBnaXZlbiBuYW1lLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBTcXVhcmVMYXR0aWNlR3JhcGhHZW5lcmF0b3JUZXN0KFN0cmluZyBuYW1lKSB7CisJCXN1cGVyKG5hbWUpOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIGZpeHR1cmUgZm9yIHRoaXMgU3F1YXJlIExhdHRpY2UgR3JhcGggR2VuZXJhdG9yIHRlc3QgY2FzZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgU3F1YXJlTGF0dGljZUdyYXBoR2VuZXJhdG9yIGdldEZpeHR1cmUoKSB7CisJCXJldHVybiAoU3F1YXJlTGF0dGljZUdyYXBoR2VuZXJhdG9yKWZpeHR1cmU7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZSNzZXRVcCgpCisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIHNldFVwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCXNldEZpeHR1cmUoR3JhcGhnZW5lcmF0b3JzRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlU3F1YXJlTGF0dGljZUdyYXBoR2VuZXJhdG9yKCkpOworCX0KKworCS8qKgorCSAqIFRlc3RzIHRoZSBjcmVhdGlvbiBvZiBhIHNxdWFyZSBsYXR0aWNlIGdyYXBoIGdlbmVyYXRvcgorCSAqLworCXB1YmxpYyB2b2lkIHRlc3RTcXVhcmVMYXR0aWNlR3JhcGhHZW5lcmF0b3IoKSB7CisJCVNxdWFyZUxhdHRpY2VHcmFwaEdlbmVyYXRvciBzbGdnID0gZ2V0Rml4dHVyZSgpOworCQlzbGdnLnNldEFyZWEoVEVTVF9BUkVBKTsKKwkJc2xnZy5zZXRVUkkodGVzdFVSSSk7CisJCVVSSSB1cmkgPSBzbGdnLmdldFVSSSgpOworCQlpZih1cmk9PW51bGwpIGZhaWwoKTsKKwkJLy9UT0RPIGltcGxlbWVudCBnZW5lcmF0b3IgdGVzdHMgaGVyZQorCX0vLyB0ZXN0U3F1YXJlTGF0dGljZUdyYXBoR2VuZXJhdG9yCisJCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZSN0ZWFyRG93bigpCisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIHRlYXJEb3duKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCXNldEZpeHR1cmUobnVsbCk7CisJfQorCit9IC8vU3F1YXJlTGF0dGljZUdyYXBoR2VuZXJhdG9yVGVzdApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5ncmFwaGdlbmVyYXRvcnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdGVzdC9ncmFwaGdlbmVyYXRvcnMvdGVzdHMvQWN0aXZhdG9yLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmdyYXBoZ2VuZXJhdG9ycy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS90ZXN0L2dyYXBoZ2VuZXJhdG9ycy90ZXN0cy9BY3RpdmF0b3IuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NjZlNzI3Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5ncmFwaGdlbmVyYXRvcnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdGVzdC9ncmFwaGdlbmVyYXRvcnMvdGVzdHMvQWN0aXZhdG9yLmphdmEKQEAgLTAsMCArMSw4OCBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnRlc3QuZ3JhcGhnZW5lcmF0b3JzLnRlc3RzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA5IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QbHVnaW47CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlN0YXR1czsKK2ltcG9ydCBvcmcub3NnaS5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dDsKKworLyoqCisgKiBUaGUgYWN0aXZhdG9yIGNsYXNzIGNvbnRyb2xzIHRoZSBwbHVnLWluIGxpZmUgY3ljbGUKKyAqLworcHVibGljIGNsYXNzIEFjdGl2YXRvciBleHRlbmRzIFBsdWdpbiB7CisKKwkvLyBUaGUgcGx1Zy1pbiBJRAorCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFBMVUdJTl9JRCA9ICJvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmdyYXBoZ2VuZXJhdG9ycyI7IC8vJE5PTi1OTFMtMSQKKworCS8vIFRoZSBzaGFyZWQgaW5zdGFuY2UKKwlwcml2YXRlIHN0YXRpYyBBY3RpdmF0b3IgcGx1Z2luOworCQorCS8qKgorCSAqIFRoZSBjb25zdHJ1Y3RvcgorCSAqLworCXB1YmxpYyBBY3RpdmF0b3IoKSB7CisJCXBsdWdpbiA9IHRoaXM7CisJfQorCisJLyoKKwkgKiAobm9uLUphdmFkb2MpCisJICogQHNlZSBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGx1Z2lucyNzdGFydChvcmcub3NnaS5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBzdGFydChCdW5kbGVDb250ZXh0IGNvbnRleHQpIHRocm93cyBFeGNlcHRpb24geworCQlzdXBlci5zdGFydChjb250ZXh0KTsKKwl9CisKKwkvKgorCSAqIChub24tSmF2YWRvYykKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QbHVnaW4jc3RvcChvcmcub3NnaS5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBzdG9wKEJ1bmRsZUNvbnRleHQgY29udGV4dCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCXBsdWdpbiA9IG51bGw7CisJCXN1cGVyLnN0b3AoY29udGV4dCk7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgc2hhcmVkIGluc3RhbmNlCisJICoKKwkgKiBAcmV0dXJuIHRoZSBzaGFyZWQgaW5zdGFuY2UKKwkgKi8KKwlwdWJsaWMgc3RhdGljIEFjdGl2YXRvciBnZXREZWZhdWx0KCkgeworCQlyZXR1cm4gcGx1Z2luOworCX0KKwkKKwkvKioKKwkgKiBMb2cgaW5mb3JtYXRpb24gdG8gdGhlIElMb2cgZm9yIHRoaXMgcGx1Z2luCisJICogVGhlIG1ldGhvZCBpcyBvdmVybG9hZGVkIHRvIGFsbG93IGZvciBsb2dJbmZvcm1hdGlvbiB3aXRob3V0IGFuIGVycm9yIAorCSAqIG1ldGhvZCBzZXRzIHRoZSBlcnJvciB0byBudWxsLiBUaGlzIHNob3VsZCBiZSB1c2VkIGluc3RlYWQgb2YgU3lzdGVtLm91dC5wcmludGxuCisJICogdGhyb3VnaG91dCB0aGUgY29kZS4KKwkgKiBAcGFyYW0gbWVzc2FnZQorCSAqICAgICAgICAgICAgdGhlIGxvY2FsaXplZCBpbmZvcm1hdGlvbiBtZXNzYWdlIHRleHQKKwkgKgorCSAqLworCXB1YmxpYyBzdGF0aWMgdm9pZCBsb2dJbmZvcm1hdGlvbihTdHJpbmcgbWVzc2FnZSkgeworCQkvLyBEbyB3ZSBoYXZlIGEgcGx1Z2luPworCQlpZiAocGx1Z2luICE9IG51bGwpIHsKKwkJCS8vIFllcworCQkJcGx1Z2luLmdldExvZygpLmxvZygKKwkJCQkJbmV3IFN0YXR1cyhJU3RhdHVzLklORk8sIHBsdWdpbi5nZXRCdW5kbGUoKS5nZXRTeW1ib2xpY05hbWUoKSwKKwkJCQkJCQkwLCBtZXNzYWdlLCBudWxsKSk7CisJCX0KKwkJZWxzZSB7CisJCQkvLyBObworCQkJU3lzdGVtLm91dC5wcmludGxuKG1lc3NhZ2UpOworCQl9CisJfSAvLyBsb2dJbmZvcm1hdGlvbgorCit9CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmdyYXBoZ2VuZXJhdG9ycy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS90ZXN0L2dyYXBoZ2VuZXJhdG9ycy90ZXN0cy9HcmFwaGdlbmVyYXRvckFsbFRlc3RzLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmdyYXBoZ2VuZXJhdG9ycy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS90ZXN0L2dyYXBoZ2VuZXJhdG9ycy90ZXN0cy9HcmFwaGdlbmVyYXRvckFsbFRlc3RzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDAxOWFhNgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZ3JhcGhnZW5lcmF0b3JzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3Rlc3QvZ3JhcGhnZW5lcmF0b3JzL3Rlc3RzL0dyYXBoZ2VuZXJhdG9yQWxsVGVzdHMuamF2YQpAQCAtMCwwICsxLDU3IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0udGVzdC5ncmFwaGdlbmVyYXRvcnMudGVzdHM7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIAorICogQ29weXJpZ2h0IChjKSAyMDExIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiAKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdCAKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sIAorICogCisgKiBDb250cmlidXRvcnM6IAorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiAKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3Q7CitpbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RTdWl0ZTsKK2ltcG9ydCBqdW5pdC50ZXh0dWkuVGVzdFJ1bm5lcjsKKworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhnZW5lcmF0b3JzLnRlc3RzLkdyYXBoZ2VuZXJhdG9yc1Rlc3RzOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiBBIHRlc3Qgc3VpdGUgZm9yIHRoZSAnPGVtPjxiPkdyYXBoZ2VuZXJhdG9yPC9iPjwvZW0+JyBtb2RlbC4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgR3JhcGhnZW5lcmF0b3JBbGxUZXN0cyBleHRlbmRzIFRlc3RTdWl0ZSB7CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CisJCVRlc3RSdW5uZXIucnVuKHN1aXRlKCkpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBzdGF0aWMgVGVzdCBzdWl0ZSgpIHsKKwkJVGVzdFN1aXRlIHN1aXRlID0gbmV3IEdyYXBoZ2VuZXJhdG9yQWxsVGVzdHMoIkdyYXBoZ2VuZXJhdG9yIFRlc3RzIik7CisJCXN1aXRlLmFkZFRlc3QoR3JhcGhnZW5lcmF0b3JzVGVzdHMuc3VpdGUoKSk7CisJCXJldHVybiBzdWl0ZTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgR3JhcGhnZW5lcmF0b3JBbGxUZXN0cyhTdHJpbmcgbmFtZSkgeworCQlzdXBlcihuYW1lKTsKKwl9CisKK30gLy9HcmFwaGdlbmVyYXRvckFsbFRlc3RzCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmdyYXBoZ2VuZXJhdG9ycy90ZXN0LnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZ3JhcGhnZW5lcmF0b3JzL3Rlc3QueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUzOTk1MGIKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmdyYXBoZ2VuZXJhdG9ycy90ZXN0LnhtbApAQCAtMCwwICsxLDUzIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorCis8cHJvamVjdCBuYW1lPSJ0ZXN0c3VpdGUiIGRlZmF1bHQ9InJ1biIgYmFzZWRpcj0iLiI+CisgIDwhLS0gVGhlIHByb3BlcnR5ICR7ZWNsaXBzZS1ob21lfSBzaG91bGQgYmUgcGFzc2VkIGludG8gdGhpcyBzY3JpcHQgLS0+CisgIDwhLS0gU2V0IGEgbWVhbmluZ2Z1bCBkZWZhdWx0IHZhbHVlIGZvciB3aGVuIGl0IGlzIG5vdC4gLS0+CisgIDxwcm9wZXJ0eSBuYW1lPSJlY2xpcHNlLWhvbWUiIHZhbHVlPSIiLz4KKworCisgIDwhLS0gc2V0cyB0aGUgcHJvcGVydGllcyBlY2xpcHNlLWhvbWUsIGFuZCBsaWJyYXJ5LWZpbGUgLS0+CisgIDxwcm9wZXJ0eSBuYW1lPSJwbHVnaW4tbmFtZSIgdmFsdWU9Im9yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZ3JhcGhnZW5lcmF0b3JzIi8+CisgIDxwcm9wZXJ0eSBuYW1lPSJsaWJyYXJ5LWZpbGUiCisgICAgICAgICAgICB2YWx1ZT0iJHtlY2xpcHNlLWhvbWV9L3BsdWdpbnMvb3JnLmVjbGlwc2UudGVzdF8zLjMuMC9saWJyYXJ5LnhtbCIvPgorCisgIDwhLS0gVGhpcyB0YXJnZXQgaG9sZHMgYWxsIGluaXRpYWxpemF0aW9uIGNvZGUgdGhhdCBuZWVkcyB0byBiZSBkb25lIGZvciAtLT4KKyAgPCEtLSBhbGwgdGVzdHMgdGhhdCBhcmUgdG8gYmUgcnVuLiBJbml0aWFsaXphdGlvbiBmb3IgaW5kaXZpZHVhbCB0ZXN0cyAtLT4KKyAgPCEtLSBzaG91bGQgYmUgZG9uZSB3aXRoaW4gdGhlIGJvZHkgb2YgdGhlIHN1aXRlIHRhcmdldC4gLS0+CisgIDx0YXJnZXQgbmFtZT0iaW5pdCI+CisgICAgPHRzdGFtcC8+CisgICAgPGRlbGV0ZT4KKyAgICAgIDxmaWxlc2V0IGRpcj0iJHtlY2xpcHNlLWhvbWV9IiBpbmNsdWRlcz0ib3JnKi54bWwiLz4KKyAgICA8L2RlbGV0ZT4KKyAgPC90YXJnZXQ+CisKKyAgPCEtLSBUaGlzIHRhcmdldCBkZWZpbmVzIHRoZSB0ZXN0cyB0aGF0IG5lZWQgdG8gYmUgcnVuLiAtLT4KKyAgPHRhcmdldCBuYW1lPSJzdWl0ZSI+CisgICAgPHByb3BlcnR5IG5hbWU9ImRhdGEtZGlyIiB2YWx1ZT0iJHtlY2xpcHNlLWhvbWV9L3dvcmtzcGFjZSIvPgorICAgIDxkZWxldGUgZGlyPSIke2RhdGEtZGlyfSIgcXVpZXQ9InRydWUiLz4KKyAgICA8YW50IHRhcmdldD0idWktdGVzdCIgYW50ZmlsZT0iJHtsaWJyYXJ5LWZpbGV9IiBkaXI9IiR7ZWNsaXBzZS1ob21lfSI+CisgICAgICA8cHJvcGVydHkgbmFtZT0iZGF0YS1kaXIiIHZhbHVlPSIke2RhdGEtZGlyfSIvPgorICAgICAgPHByb3BlcnR5IG5hbWU9InBsdWdpbi1uYW1lIiB2YWx1ZT0iJHtwbHVnaW4tbmFtZX0iLz4KKyAgICAgIDxwcm9wZXJ0eSBuYW1lPSJjbGFzc25hbWUiIHZhbHVlPSJvcmcuZWNsaXBzZS5zdGVtLnRlc3QuZ3JhcGhnZW5lcmF0b3JzLnRlc3RzLkdyYXBoZ2VuZXJhdG9yQWxsVGVzdHMiLz4KKyAgICA8L2FudD4KKyAgPC90YXJnZXQ+CisKKyAgPCEtLSBUaGlzIHRhcmdldCBob2xkcyBjb2RlIHRvIGNsZWFudXAgdGhlIHRlc3RpbmcgZW52aXJvbm1lbnQgYWZ0ZXIgLS0+CisgIDwhLS0gYWZ0ZXIgYWxsIG9mIHRoZSB0ZXN0cyBoYXZlIGJlZW4gcnVuLiBZb3UgY2FuIHVzZSB0aGlzIHRhcmdldCB0byAtLT4KKyAgPCEtLSBkZWxldGUgdGVtcG9yYXJ5IGZpbGVzIHRoYXQgaGF2ZSBiZWVuIGNyZWF0ZWQuIC0tPgorICA8dGFyZ2V0IG5hbWU9ImNsZWFudXAiPgorICA8L3RhcmdldD4KKworICA8IS0tIFRoaXMgdGFyZ2V0IHJ1bnMgdGhlIHRlc3Qgc3VpdGUuIEFueSBhY3Rpb25zIHRoYXQgbmVlZCB0byBoYXBwZW4gLS0+CisgIDwhLS0gYWZ0ZXIgYWxsIHRoZSB0ZXN0cyBoYXZlIGJlZW4gcnVuIHNob3VsZCBnbyBoZXJlLiAtLT4KKyAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQsc3VpdGUsY2xlYW51cCI+CisgICAgPGFudCB0YXJnZXQ9ImNvbGxlY3QiIGFudGZpbGU9IiR7bGlicmFyeS1maWxlfSIgZGlyPSIke2VjbGlwc2UtaG9tZX0iPgorICAgICAgPHByb3BlcnR5IG5hbWU9ImluY2x1ZGVzIiB2YWx1ZT0ib3JnKi54bWwiLz4KKyAgICAgIDxwcm9wZXJ0eSBuYW1lPSJvdXRwdXQtZmlsZSIgdmFsdWU9IiR7cGx1Z2luLW5hbWV9LnhtbCIvPgorICAgIDwvYW50PgorICA8L3RhcmdldD4KKworICA8IS0tIFRoaXMgdGFyZ2V0IHJ1bnMgdGhlIHBlcmZvcm1hbmNlIHRlc3Qgc3VpdGVzLiAtLT4KKyAgPHRhcmdldCBuYW1lPSJwZXJmb3JtYW5jZSI+CisgIDwvdGFyZ2V0PgorPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5pbnRlcm5hbC5kYXRhLy5jbGFzc3BhdGggYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmludGVybmFsLmRhdGEvLmNsYXNzcGF0aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMDRlODYxCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5pbnRlcm5hbC5kYXRhLy5jbGFzc3BhdGgKQEAgLTAsMCArMSw3IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPGNsYXNzcGF0aD4KKwk8Y2xhc3NwYXRoZW50cnkga2luZD0ic3JjIiBwYXRoPSJzcmMiLz4KKwk8Y2xhc3NwYXRoZW50cnkga2luZD0iY29uIiBwYXRoPSJvcmcuZWNsaXBzZS5qZHQubGF1bmNoaW5nLkpSRV9DT05UQUlORVIvb3JnLmVjbGlwc2UuamR0LmludGVybmFsLmRlYnVnLnVpLmxhdW5jaGVyLlN0YW5kYXJkVk1UeXBlL0oyU0UtMS41Ii8+CisJPGNsYXNzcGF0aGVudHJ5IGtpbmQ9ImNvbiIgcGF0aD0ib3JnLmVjbGlwc2UucGRlLmNvcmUucmVxdWlyZWRQbHVnaW5zIi8+CisJPGNsYXNzcGF0aGVudHJ5IGtpbmQ9Im91dHB1dCIgcGF0aD0iYmluIi8+Cis8L2NsYXNzcGF0aD4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuaW50ZXJuYWwuZGF0YS8ucHJvamVjdCBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuaW50ZXJuYWwuZGF0YS8ucHJvamVjdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNGE5Mjg2Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5pbnRlcm5hbC5kYXRhLy5wcm9qZWN0CkBAIC0wLDAgKzEsMjggQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8cHJvamVjdERlc2NyaXB0aW9uPgorCTxuYW1lPm9yZy5lY2xpcHNlLnN0ZW0udGVzdHMuaW50ZXJuYWwuZGF0YTwvbmFtZT4KKwk8Y29tbWVudD48L2NvbW1lbnQ+CisJPHByb2plY3RzPgorCTwvcHJvamVjdHM+CisJPGJ1aWxkU3BlYz4KKwkJPGJ1aWxkQ29tbWFuZD4KKwkJCTxuYW1lPm9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFidWlsZGVyPC9uYW1lPgorCQkJPGFyZ3VtZW50cz4KKwkJCTwvYXJndW1lbnRzPgorCQk8L2J1aWxkQ29tbWFuZD4KKwkJPGJ1aWxkQ29tbWFuZD4KKwkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5NYW5pZmVzdEJ1aWxkZXI8L25hbWU+CisJCQk8YXJndW1lbnRzPgorCQkJPC9hcmd1bWVudHM+CisJCTwvYnVpbGRDb21tYW5kPgorCQk8YnVpbGRDb21tYW5kPgorCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLlNjaGVtYUJ1aWxkZXI8L25hbWU+CisJCQk8YXJndW1lbnRzPgorCQkJPC9hcmd1bWVudHM+CisJCTwvYnVpbGRDb21tYW5kPgorCTwvYnVpbGRTcGVjPgorCTxuYXR1cmVzPgorCQk8bmF0dXJlPm9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFuYXR1cmU8L25hdHVyZT4KKwkJPG5hdHVyZT5vcmcuZWNsaXBzZS5wZGUuUGx1Z2luTmF0dXJlPC9uYXR1cmU+CisJPC9uYXR1cmVzPgorPC9wcm9qZWN0RGVzY3JpcHRpb24+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmludGVybmFsLmRhdGEvTUVUQS1JTkYvTUFOSUZFU1QuTUYgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmludGVybmFsLmRhdGEvTUVUQS1JTkYvTUFOSUZFU1QuTUYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmY3ZTI4NAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuaW50ZXJuYWwuZGF0YS9NRVRBLUlORi9NQU5JRkVTVC5NRgpAQCAtMCwwICsxLDE1IEBACitNYW5pZmVzdC1WZXJzaW9uOiAxLjAKK0J1bmRsZS1NYW5pZmVzdFZlcnNpb246IDIKK0J1bmRsZS1OYW1lOiAlcGx1Z2luTmFtZQorQnVuZGxlLVN5bWJvbGljTmFtZTogb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5pbnRlcm5hbC5kYXRhO3NpbmdsZXRvbjo9dHJ1ZQorQnVuZGxlLVZlcnNpb246IDEuMi4xCitCdW5kbGUtQ2xhc3NQYXRoOiAuCitCdW5kbGUtVmVuZG9yOiAlcHJvdmlkZXJOYW1lCitCdW5kbGUtTG9jYWxpemF0aW9uOiBwbHVnaW4KK0J1bmRsZS1SZXF1aXJlZEV4ZWN1dGlvbkVudmlyb25tZW50OiBKMlNFLTEuNQorUmVxdWlyZS1CdW5kbGU6IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZSwKKyBvcmcuZWNsaXBzZS5zdGVtLmludGVybmFsLmRhdGE7dmlzaWJpbGl0eTo9cmVleHBvcnQsCisgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnhtaTt2aXNpYmlsaXR5Oj1yZWV4cG9ydCwKKyBvcmcuanVuaXQ7dmlzaWJpbGl0eTo9cmVleHBvcnQsCisgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlCitCdW5kbGUtQWN0aXZhdGlvblBvbGljeTogbGF6eQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5pbnRlcm5hbC5kYXRhL2J1aWxkLnByb3BlcnRpZXMgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmludGVybmFsLmRhdGEvYnVpbGQucHJvcGVydGllcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZjMyNTNhCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5pbnRlcm5hbC5kYXRhL2J1aWxkLnByb3BlcnRpZXMKQEAgLTAsMCArMSwxMiBAQAorCisjIDxjb3B5cmlnaHQ+CisjIDwvY29weXJpZ2h0PgorIworIyAkSWQ6IGJ1aWxkLnByb3BlcnRpZXMsdiAxLjEgMjAwOS8wMi8wNSAyMjo0NjoxOCBkZm9yZCBFeHAgJAorCitiaW4uaW5jbHVkZXMgPSAuLFwKKyAgICAgICAgICAgICAgIE1FVEEtSU5GLyxcCisgICAgICAgICAgICAgICBwbHVnaW4ucHJvcGVydGllcworamFycy5jb21waWxlLm9yZGVyID0gLgorc291cmNlLi4gPSBzcmMvCitvdXRwdXQuLiA9IGJpbi8KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuaW50ZXJuYWwuZGF0YS9wbHVnaW4ucHJvcGVydGllcyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuaW50ZXJuYWwuZGF0YS9wbHVnaW4ucHJvcGVydGllcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNThiNDZkCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5pbnRlcm5hbC5kYXRhL3BsdWdpbi5wcm9wZXJ0aWVzCkBAIC0wLDAgKzEsMTMgQEAKKyMvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIyAqIENvcHlyaWdodCAoYykgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyMgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisjICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisjICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyMgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorIyAqCisjICogQ29udHJpYnV0b3JzOgorIyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworcGx1Z2luTmFtZSA9IFNURU0gRGF0YSBHZW5lcmF0b3IgVGVzdCBTdWl0ZQorcHJvdmlkZXJOYW1lID0gRWNsaXBzZS5vcmcKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuaW50ZXJuYWwuZGF0YS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9pbnRlcm5hbC9kYXRhL2dlbmVyYXRlZHBsdWdpbi90ZXN0cy9EdWJsaW5Db3JlVGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5pbnRlcm5hbC5kYXRhL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2ludGVybmFsL2RhdGEvZ2VuZXJhdGVkcGx1Z2luL3Rlc3RzL0R1YmxpbkNvcmVUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmNmZjdkMwotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuaW50ZXJuYWwuZGF0YS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9pbnRlcm5hbC9kYXRhL2dlbmVyYXRlZHBsdWdpbi90ZXN0cy9EdWJsaW5Db3JlVGVzdC5qYXZhCkBAIC0wLDAgKzEsMTA1IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uaW50ZXJuYWwuZGF0YS5nZW5lcmF0ZWRwbHVnaW4udGVzdHM7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIAorICogQ29weXJpZ2h0IChjKSAyMDA5IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiAKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdCAKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sIAorICogCisgKiBDb250cmlidXRvcnM6IAorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiAKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOworaW1wb3J0IGp1bml0LnRleHR1aS5UZXN0UnVubmVyOworCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcm5hbC5kYXRhLmdlbmVyYXRlZHBsdWdpbi5EdWJsaW5Db3JlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uaW50ZXJuYWwuZGF0YS5nZW5lcmF0ZWRwbHVnaW4uR2VuZXJhdGVkcGx1Z2luRmFjdG9yeTsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiBBIHRlc3QgY2FzZSBmb3IgdGhlIG1vZGVsIG9iamVjdCAnCisgKiA8ZW0+PGI+RHVibGluIENvcmU8L2I+PC9lbT4nLiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIAorICogQGdlbmVyYXRlZAorICovCitAU3VwcHJlc3NXYXJuaW5ncygiYWxsIikKK3B1YmxpYyBjbGFzcyBEdWJsaW5Db3JlVGVzdCBleHRlbmRzIFRlc3RDYXNlIHsKKworCS8qKgorCSAqIFRoZSBmaXh0dXJlIGZvciB0aGlzIER1YmxpbiBDb3JlIHRlc3QgY2FzZS4gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLQorCSAqIGVuZC11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIER1YmxpbkNvcmUgZml4dHVyZSA9IG51bGw7CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgeworCQlUZXN0UnVubmVyLnJ1bihEdWJsaW5Db3JlVGVzdC5jbGFzcyk7CisJfQorCisJLyoqCisJICogQ29uc3RydWN0cyBhIG5ldyBEdWJsaW4gQ29yZSB0ZXN0IGNhc2Ugd2l0aCB0aGUgZ2l2ZW4gbmFtZS4gPCEtLQorCSAqIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIER1YmxpbkNvcmVUZXN0KFN0cmluZyBuYW1lKSB7CisJCXN1cGVyKG5hbWUpOworCX0KKworCS8qKgorCSAqIFNldHMgdGhlIGZpeHR1cmUgZm9yIHRoaXMgRHVibGluIENvcmUgdGVzdCBjYXNlLiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBzZXRGaXh0dXJlKER1YmxpbkNvcmUgZml4dHVyZSkgeworCQl0aGlzLmZpeHR1cmUgPSBmaXh0dXJlOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIGZpeHR1cmUgZm9yIHRoaXMgRHVibGluIENvcmUgdGVzdCBjYXNlLiA8IS0tIGJlZ2luLXVzZXItZG9jCisJICogLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgRHVibGluQ29yZSBnZXRGaXh0dXJlKCkgeworCQlyZXR1cm4gZml4dHVyZTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAc2VlIGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZSNzZXRVcCgpCisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIHNldFVwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCXNldEZpeHR1cmUoR2VuZXJhdGVkcGx1Z2luRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlRHVibGluQ29yZSgpKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAc2VlIGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZSN0ZWFyRG93bigpCisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIHRlYXJEb3duKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCXNldEZpeHR1cmUobnVsbCk7CisJfQorCisJLyoqCisJICogS2VlcHMgSlVuaXQgcXVpZXQgYWJvdXQgdGhlIGxhY2sgb2YgdGVzdHMgaW4gdGhpcyBjbGFzcy4KKwkgKi8KKwlwdWJsaWMgdm9pZCB0ZXN0Rm9vKCkgeworCQlhc3NlcnRUcnVlKHRydWUpOworCX0KKworfSAvLyBEdWJsaW5Db3JlVGVzdApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5pbnRlcm5hbC5kYXRhL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2ludGVybmFsL2RhdGEvZ2VuZXJhdGVkcGx1Z2luL3Rlc3RzL0V4dGVuc2lvblRlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuaW50ZXJuYWwuZGF0YS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9pbnRlcm5hbC9kYXRhL2dlbmVyYXRlZHBsdWdpbi90ZXN0cy9FeHRlbnNpb25UZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTc5NTViMwotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuaW50ZXJuYWwuZGF0YS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9pbnRlcm5hbC9kYXRhL2dlbmVyYXRlZHBsdWdpbi90ZXN0cy9FeHRlbnNpb25UZXN0LmphdmEKQEAgLTAsMCArMSwxMDQgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcm5hbC5kYXRhLmdlbmVyYXRlZHBsdWdpbi50ZXN0czsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogCisgKiBDb3B5cmlnaHQgKGMpIDIwMDkgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuIAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyAKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0IAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwgCisgKiAKKyAqIENvbnRyaWJ1dG9yczogCisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7CitpbXBvcnQganVuaXQudGV4dHVpLlRlc3RSdW5uZXI7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmludGVybmFsLmRhdGEuZ2VuZXJhdGVkcGx1Z2luLkV4dGVuc2lvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmludGVybmFsLmRhdGEuZ2VuZXJhdGVkcGx1Z2luLkdlbmVyYXRlZHBsdWdpbkZhY3Rvcnk7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gQSB0ZXN0IGNhc2UgZm9yIHRoZSBtb2RlbCBvYmplY3QgJworICogPGVtPjxiPkV4dGVuc2lvbjwvYj48L2VtPicuIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogCisgKiBAZ2VuZXJhdGVkCisgKi8KK0BTdXBwcmVzc1dhcm5pbmdzKCJhbGwiKQorcHVibGljIGNsYXNzIEV4dGVuc2lvblRlc3QgZXh0ZW5kcyBUZXN0Q2FzZSB7CisKKwkvKioKKwkgKiBUaGUgZml4dHVyZSBmb3IgdGhpcyBFeHRlbnNpb24gdGVzdCBjYXNlLiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tCisJICogZW5kLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgRXh0ZW5zaW9uIGZpeHR1cmUgPSBudWxsOworCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKKwkJVGVzdFJ1bm5lci5ydW4oRXh0ZW5zaW9uVGVzdC5jbGFzcyk7CisJfQorCisJLyoqCisJICogQ29uc3RydWN0cyBhIG5ldyBFeHRlbnNpb24gdGVzdCBjYXNlIHdpdGggdGhlIGdpdmVuIG5hbWUuIDwhLS0KKwkgKiBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFeHRlbnNpb25UZXN0KFN0cmluZyBuYW1lKSB7CisJCXN1cGVyKG5hbWUpOworCX0KKworCS8qKgorCSAqIFNldHMgdGhlIGZpeHR1cmUgZm9yIHRoaXMgRXh0ZW5zaW9uIHRlc3QgY2FzZS4gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgc2V0Rml4dHVyZShFeHRlbnNpb24gZml4dHVyZSkgeworCQl0aGlzLmZpeHR1cmUgPSBmaXh0dXJlOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIGZpeHR1cmUgZm9yIHRoaXMgRXh0ZW5zaW9uIHRlc3QgY2FzZS4gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIEV4dGVuc2lvbiBnZXRGaXh0dXJlKCkgeworCQlyZXR1cm4gZml4dHVyZTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAc2VlIGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZSNzZXRVcCgpCisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIHNldFVwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCXNldEZpeHR1cmUoR2VuZXJhdGVkcGx1Z2luRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlRXh0ZW5zaW9uKCkpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBzZWUganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlI3RlYXJEb3duKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgdGVhckRvd24oKSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJc2V0Rml4dHVyZShudWxsKTsKKwl9CisKKwkvKioKKwkgKiBLZWVwcyBKVW5pdCBxdWlldCBhYm91dCB0aGUgbGFjayBvZiB0ZXN0cyBpbiB0aGlzIGNsYXNzLgorCSAqLworCXB1YmxpYyB2b2lkIHRlc3RGb28oKSB7CisJCWFzc2VydFRydWUodHJ1ZSk7CisJfQorfSAvLyBFeHRlbnNpb25UZXN0CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmludGVybmFsLmRhdGEvc3JjL29yZy9lY2xpcHNlL3N0ZW0vaW50ZXJuYWwvZGF0YS9nZW5lcmF0ZWRwbHVnaW4vdGVzdHMvR2VuZXJhdGVkUGx1Z2luQWxsVGVzdHMuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuaW50ZXJuYWwuZGF0YS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9pbnRlcm5hbC9kYXRhL2dlbmVyYXRlZHBsdWdpbi90ZXN0cy9HZW5lcmF0ZWRQbHVnaW5BbGxUZXN0cy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ1MGI3OTQKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmludGVybmFsLmRhdGEvc3JjL29yZy9lY2xpcHNlL3N0ZW0vaW50ZXJuYWwvZGF0YS9nZW5lcmF0ZWRwbHVnaW4vdGVzdHMvR2VuZXJhdGVkUGx1Z2luQWxsVGVzdHMuamF2YQpAQCAtMCwwICsxLDU1IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uaW50ZXJuYWwuZGF0YS5nZW5lcmF0ZWRwbHVnaW4udGVzdHM7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIAorICogQ29weXJpZ2h0IChjKSAyMDA5IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiAKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdCAKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sIAorICogCisgKiBDb250cmlidXRvcnM6IAorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiAKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3Q7CitpbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RTdWl0ZTsKK2ltcG9ydCBqdW5pdC50ZXh0dWkuVGVzdFJ1bm5lcjsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiBBIHRlc3Qgc3VpdGUgZm9yIHRoZSAnPGVtPjxiPkdlbmVyYXRlZFBsdWdpbjwvYj48L2VtPgorICogJyBtb2RlbC4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiAKKyAqIEBnZW5lcmF0ZWQKKyAqLworQFN1cHByZXNzV2FybmluZ3MoImFsbCIpCitwdWJsaWMgY2xhc3MgR2VuZXJhdGVkUGx1Z2luQWxsVGVzdHMgZXh0ZW5kcyBUZXN0U3VpdGUgeworCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKKwkJVGVzdFJ1bm5lci5ydW4oc3VpdGUoKSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBzdGF0aWMgVGVzdCBzdWl0ZSgpIHsKKwkJVGVzdFN1aXRlIHN1aXRlID0gbmV3IEdlbmVyYXRlZFBsdWdpbkFsbFRlc3RzKCJHZW5lcmF0ZWRQbHVnaW4gVGVzdHMiKTsKKwkJcmV0dXJuIHN1aXRlOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgR2VuZXJhdGVkUGx1Z2luQWxsVGVzdHMoU3RyaW5nIG5hbWUpIHsKKwkJc3VwZXIobmFtZSk7CisJfQorCit9IC8vIEdlbmVyYXRlZFBsdWdpbkFsbFRlc3RzCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmludGVybmFsLmRhdGEvc3JjL29yZy9lY2xpcHNlL3N0ZW0vaW50ZXJuYWwvZGF0YS9nZW5lcmF0ZWRwbHVnaW4vdGVzdHMvR2VuZXJhdGVkcGx1Z2luVGVzdHMuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuaW50ZXJuYWwuZGF0YS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9pbnRlcm5hbC9kYXRhL2dlbmVyYXRlZHBsdWdpbi90ZXN0cy9HZW5lcmF0ZWRwbHVnaW5UZXN0cy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY3ODQzMDIKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmludGVybmFsLmRhdGEvc3JjL29yZy9lY2xpcHNlL3N0ZW0vaW50ZXJuYWwvZGF0YS9nZW5lcmF0ZWRwbHVnaW4vdGVzdHMvR2VuZXJhdGVkcGx1Z2luVGVzdHMuamF2YQpAQCAtMCwwICsxLDU1IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uaW50ZXJuYWwuZGF0YS5nZW5lcmF0ZWRwbHVnaW4udGVzdHM7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIAorICogQ29weXJpZ2h0IChjKSAyMDA5IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiAKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdCAKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sIAorICogCisgKiBDb250cmlidXRvcnM6IAorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiAKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3Q7CitpbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RTdWl0ZTsKK2ltcG9ydCBqdW5pdC50ZXh0dWkuVGVzdFJ1bm5lcjsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiBBIHRlc3Qgc3VpdGUgZm9yIHRoZSAnPGVtPjxiPmdlbmVyYXRlZHBsdWdpbjwvYj48L2VtPgorICogJyBwYWNrYWdlLiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIAorICogQGdlbmVyYXRlZAorICovCitAU3VwcHJlc3NXYXJuaW5ncygiYWxsIikKK3B1YmxpYyBjbGFzcyBHZW5lcmF0ZWRwbHVnaW5UZXN0cyBleHRlbmRzIFRlc3RTdWl0ZSB7CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgeworCQlUZXN0UnVubmVyLnJ1bihzdWl0ZSgpKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHN0YXRpYyBUZXN0IHN1aXRlKCkgeworCQlUZXN0U3VpdGUgc3VpdGUgPSBuZXcgR2VuZXJhdGVkcGx1Z2luVGVzdHMoImdlbmVyYXRlZHBsdWdpbiBUZXN0cyIpOworCQlyZXR1cm4gc3VpdGU7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBHZW5lcmF0ZWRwbHVnaW5UZXN0cyhTdHJpbmcgbmFtZSkgeworCQlzdXBlcihuYW1lKTsKKwl9CisKK30gLy8gR2VuZXJhdGVkcGx1Z2luVGVzdHMKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuaW50ZXJuYWwuZGF0YS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9pbnRlcm5hbC9kYXRhL2dlbmVyYXRlZHBsdWdpbi90ZXN0cy9QbHVnaW5UZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmludGVybmFsLmRhdGEvc3JjL29yZy9lY2xpcHNlL3N0ZW0vaW50ZXJuYWwvZGF0YS9nZW5lcmF0ZWRwbHVnaW4vdGVzdHMvUGx1Z2luVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZiMTk3YzUKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmludGVybmFsLmRhdGEvc3JjL29yZy9lY2xpcHNlL3N0ZW0vaW50ZXJuYWwvZGF0YS9nZW5lcmF0ZWRwbHVnaW4vdGVzdHMvUGx1Z2luVGVzdC5qYXZhCkBAIC0wLDAgKzEsMTQ4IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uaW50ZXJuYWwuZGF0YS5nZW5lcmF0ZWRwbHVnaW4udGVzdHM7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIAorICogQ29weXJpZ2h0IChjKSAyMDA5IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiAKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdCAKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sIAorICogCisgKiBDb250cmlidXRvcnM6IAorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiAKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgamF2YS5pby5GaWxlOworaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOworaW1wb3J0IGphdmEudXRpbC5NYXA7CisKK2ltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7CitpbXBvcnQganVuaXQudGV4dHVpLlRlc3RSdW5uZXI7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuVVJJOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5yZXNvdXJjZS5SZXNvdXJjZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUueG1pLlhNTFJlc291cmNlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS54bWkuaW1wbC5YTUxNYXBJbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uaW50ZXJuYWwuZGF0YS5nZW5lcmF0ZWRwbHVnaW4uR2VuZXJhdGVkcGx1Z2luRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmludGVybmFsLmRhdGEuZ2VuZXJhdGVkcGx1Z2luLkdlbmVyYXRlZHBsdWdpblBhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcm5hbC5kYXRhLmdlbmVyYXRlZHBsdWdpbi5QbHVnaW47CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcm5hbC5kYXRhLmdlbmVyYXRlZHBsdWdpbi51dGlsLkdlbmVyYXRlZHBsdWdpblJlc291cmNlRmFjdG9yeUltcGw7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gQSB0ZXN0IGNhc2UgZm9yIHRoZSBtb2RlbCBvYmplY3QgJworICogPGVtPjxiPlBsdWdpbjwvYj48L2VtPicuIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogCisgKiBAZ2VuZXJhdGVkCisgKi8KK0BTdXBwcmVzc1dhcm5pbmdzKCJhbGwiKQorcHVibGljIGNsYXNzIFBsdWdpblRlc3QgZXh0ZW5kcyBUZXN0Q2FzZSB7CisKKwkvKioKKwkgKiBUaGUgZml4dHVyZSBmb3IgdGhpcyBQbHVnaW4gdGVzdCBjYXNlLiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tCisJICogZW5kLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgUGx1Z2luIGZpeHR1cmUgPSBudWxsOworCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKKwkJVGVzdFJ1bm5lci5ydW4oUGx1Z2luVGVzdC5jbGFzcyk7CisJfQorCisJLyoqCisJICogQ29uc3RydWN0cyBhIG5ldyBQbHVnaW4gdGVzdCBjYXNlIHdpdGggdGhlIGdpdmVuIG5hbWUuIDwhLS0KKwkgKiBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBQbHVnaW5UZXN0KFN0cmluZyBuYW1lKSB7CisJCXN1cGVyKG5hbWUpOworCX0KKworCS8qKgorCSAqIFNldHMgdGhlIGZpeHR1cmUgZm9yIHRoaXMgUGx1Z2luIHRlc3QgY2FzZS4gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLQorCSAqIGVuZC11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgc2V0Rml4dHVyZShQbHVnaW4gZml4dHVyZSkgeworCQl0aGlzLmZpeHR1cmUgPSBmaXh0dXJlOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIGZpeHR1cmUgZm9yIHRoaXMgUGx1Z2luIHRlc3QgY2FzZS4gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIFBsdWdpbiBnZXRGaXh0dXJlKCkgeworCQlyZXR1cm4gZml4dHVyZTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAc2VlIGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZSNzZXRVcCgpCisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIHNldFVwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCXNldEZpeHR1cmUoR2VuZXJhdGVkcGx1Z2luRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlUGx1Z2luKCkpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBzZWUganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlI3RlYXJEb3duKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgdGVhckRvd24oKSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJc2V0Rml4dHVyZShudWxsKTsKKwl9CisKKwkvKioKKwkgKiAKKwkgKi8KKwlAU3VwcHJlc3NXYXJuaW5ncygidW5jaGVja2VkIikKKwlwdWJsaWMgdm9pZCB0ZXN0RGVzZXJpYWxpemVQbHVnaW5YTUwoKSB7CisKKwkJRmlsZSBmaWxlID0gbmV3IEZpbGUoInRlc3RkYXRhL3BsdWdpbi54bWwiKTsKKwkJZmluYWwgVVJJIFBMVUdJTl9VUkkgPSBVUkkuY3JlYXRlRmlsZVVSSShmaWxlLmdldEFic29sdXRlUGF0aCgpKTsKKworCQl0cnkgeworCisJCQlHZW5lcmF0ZWRwbHVnaW5SZXNvdXJjZUZhY3RvcnlJbXBsIHJmaSA9IG5ldyBHZW5lcmF0ZWRwbHVnaW5SZXNvdXJjZUZhY3RvcnlJbXBsKCk7CisKKwkJCVhNTFJlc291cmNlLlhNTE1hcCB4bWxNYXAgPSBuZXcgWE1MTWFwSW1wbCgpOworCQkJeG1sTWFwLnNldE5vTmFtZXNwYWNlUGFja2FnZShHZW5lcmF0ZWRwbHVnaW5QYWNrYWdlLmVJTlNUQU5DRSk7CisJCQlNYXAgb3B0aW9ucyA9IG5ldyBIYXNoTWFwKCk7CisJCQlvcHRpb25zLnB1dChYTUxSZXNvdXJjZS5PUFRJT05fWE1MX01BUCwgeG1sTWFwKTsKKworCQkJZmluYWwgUmVzb3VyY2UgcmVzb3VyY2UgPSByZmkuY3JlYXRlUmVzb3VyY2UoUExVR0lOX1VSSSk7CisJCQlyZXNvdXJjZS5sb2FkKG9wdGlvbnMpOworCQkJZmluYWwgUGx1Z2luIHBsdWdpbiA9IChQbHVnaW4pIHJlc291cmNlLmdldENvbnRlbnRzKCkuZ2V0KDApOworCisJCQlhc3NlcnRUcnVlKHBsdWdpbi5nZXRFeHRlbnNpb25lbGVtZW50KCkuc2l6ZSgpID09IDEpOworCisJCQkvLyBmb3IgKEV4dGVuc2lvbiBleHRlbnNpb24gOiBwbHVnaW4uZ2V0RXh0ZW5zaW9uZWxlbWVudCgpKSB7CisJCQkvLwkJCQkKKwkJCS8vIGZvciAoIFN0ZW1DYXRlZ29yeSBjYXRlZ29yeSA6ZXh0ZW5zaW9uLmdldENhdGVnb3JpZXMoKSkgeworCQkJLy8gU3lzdGVtLm91dC5wcmludGxuKGNhdGVnb3J5LnRvU3RyaW5nKCkpOworCQkJLy8gfQorCQkJLy8JCQkJCisJCQkvLyBmb3IgKCBEdWJsaW5Db3JlIGRjIDpleHRlbnNpb24uZ2V0RHVibGluQ29yZXMoKSkgeworCQkJLy8gU3lzdGVtLm91dC5wcmludGxuKGRjLnRvU3RyaW5nKCkpOworCQkJLy8gfQorCQkJLy8JCQkJCisJCQkvLyB9IC8vIGZvciBlYWNoCisJCX0gY2F0Y2ggKGZpbmFsIEV4Y2VwdGlvbiBlKSB7CisJCQlTeXN0ZW0ub3V0LnByaW50bG4oZS50b1N0cmluZygpKTsKKwkJCWUucHJpbnRTdGFja1RyYWNlKCk7CisJCX0KKwl9IC8vIHRlc3REZXNlcmlhbGl6ZVBsdWdpblhNTAorfSAvLyBQbHVnaW5UZXN0CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmludGVybmFsLmRhdGEvc3JjL29yZy9lY2xpcHNlL3N0ZW0vaW50ZXJuYWwvZGF0YS9nZW5lcmF0ZWRwbHVnaW4vdGVzdHMvU3RlbUNhdGVnb3J5VGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5pbnRlcm5hbC5kYXRhL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2ludGVybmFsL2RhdGEvZ2VuZXJhdGVkcGx1Z2luL3Rlc3RzL1N0ZW1DYXRlZ29yeVRlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ODlkMjhiCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5pbnRlcm5hbC5kYXRhL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2ludGVybmFsL2RhdGEvZ2VuZXJhdGVkcGx1Z2luL3Rlc3RzL1N0ZW1DYXRlZ29yeVRlc3QuamF2YQpAQCAtMCwwICsxLDEwNCBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmludGVybmFsLmRhdGEuZ2VuZXJhdGVkcGx1Z2luLnRlc3RzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAKKyAqIENvcHlyaWdodCAoYykgMjAwOSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4gCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIAorICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wIAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQgCisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbCAKKyAqIAorICogQ29udHJpYnV0b3JzOiAKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKK2ltcG9ydCBqdW5pdC50ZXh0dWkuVGVzdFJ1bm5lcjsKKworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uaW50ZXJuYWwuZGF0YS5nZW5lcmF0ZWRwbHVnaW4uR2VuZXJhdGVkcGx1Z2luRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmludGVybmFsLmRhdGEuZ2VuZXJhdGVkcGx1Z2luLlN0ZW1DYXRlZ29yeTsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiBBIHRlc3QgY2FzZSBmb3IgdGhlIG1vZGVsIG9iamVjdCAnCisgKiA8ZW0+PGI+U3RlbSBDYXRlZ29yeTwvYj48L2VtPicuIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogCisgKiBAZ2VuZXJhdGVkCisgKi8KK0BTdXBwcmVzc1dhcm5pbmdzKCJhbGwiKQorcHVibGljIGNsYXNzIFN0ZW1DYXRlZ29yeVRlc3QgZXh0ZW5kcyBUZXN0Q2FzZSB7CisKKwkvKioKKwkgKiBUaGUgZml4dHVyZSBmb3IgdGhpcyBTdGVtIENhdGVnb3J5IHRlc3QgY2FzZS4gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIFN0ZW1DYXRlZ29yeSBmaXh0dXJlID0gbnVsbDsKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CisJCVRlc3RSdW5uZXIucnVuKFN0ZW1DYXRlZ29yeVRlc3QuY2xhc3MpOworCX0KKworCS8qKgorCSAqIENvbnN0cnVjdHMgYSBuZXcgU3RlbSBDYXRlZ29yeSB0ZXN0IGNhc2Ugd2l0aCB0aGUgZ2l2ZW4gbmFtZS4gPCEtLQorCSAqIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFN0ZW1DYXRlZ29yeVRlc3QoU3RyaW5nIG5hbWUpIHsKKwkJc3VwZXIobmFtZSk7CisJfQorCisJLyoqCisJICogU2V0cyB0aGUgZml4dHVyZSBmb3IgdGhpcyBTdGVtIENhdGVnb3J5IHRlc3QgY2FzZS4gPCEtLSBiZWdpbi11c2VyLWRvYworCSAqIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgc2V0Rml4dHVyZShTdGVtQ2F0ZWdvcnkgZml4dHVyZSkgeworCQl0aGlzLmZpeHR1cmUgPSBmaXh0dXJlOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIGZpeHR1cmUgZm9yIHRoaXMgU3RlbSBDYXRlZ29yeSB0ZXN0IGNhc2UuIDwhLS0gYmVnaW4tdXNlci1kb2MKKwkgKiAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogCisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBTdGVtQ2F0ZWdvcnkgZ2V0Rml4dHVyZSgpIHsKKwkJcmV0dXJuIGZpeHR1cmU7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogCisJICogQHNlZSBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2Ujc2V0VXAoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgdm9pZCBzZXRVcCgpIHRocm93cyBFeGNlcHRpb24geworCQlzZXRGaXh0dXJlKEdlbmVyYXRlZHBsdWdpbkZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZVN0ZW1DYXRlZ29yeSgpKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAc2VlIGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZSN0ZWFyRG93bigpCisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIHRlYXJEb3duKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCXNldEZpeHR1cmUobnVsbCk7CisJfQorCisJLyoqCisJICogS2VlcHMgSlVuaXQgcXVpZXQgYWJvdXQgdGhlIGxhY2sgb2YgdGVzdHMgaW4gdGhpcyBjbGFzcy4KKwkgKi8KKwlwdWJsaWMgdm9pZCB0ZXN0Rm9vKCkgeworCQlhc3NlcnRUcnVlKHRydWUpOworCX0KK30gLy8gU3RlbUNhdGVnb3J5VGVzdApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5pbnRlcm5hbC5kYXRhL3Rlc3QueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5pbnRlcm5hbC5kYXRhL3Rlc3QueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcxZjBhZDgKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmludGVybmFsLmRhdGEvdGVzdC54bWwKQEAgLTAsMCArMSw1MyBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKworPHByb2plY3QgbmFtZT0idGVzdHN1aXRlIiBkZWZhdWx0PSJydW4iIGJhc2VkaXI9Ii4iPgorICA8IS0tIFRoZSBwcm9wZXJ0eSAke2VjbGlwc2UtaG9tZX0gc2hvdWxkIGJlIHBhc3NlZCBpbnRvIHRoaXMgc2NyaXB0IC0tPgorICA8IS0tIFNldCBhIG1lYW5pbmdmdWwgZGVmYXVsdCB2YWx1ZSBmb3Igd2hlbiBpdCBpcyBub3QuIC0tPgorICA8cHJvcGVydHkgbmFtZT0iZWNsaXBzZS1ob21lIiB2YWx1ZT0iIi8+CisKKworICA8IS0tIHNldHMgdGhlIHByb3BlcnRpZXMgZWNsaXBzZS1ob21lLCBhbmQgbGlicmFyeS1maWxlIC0tPgorICA8cHJvcGVydHkgbmFtZT0icGx1Z2luLW5hbWUiIHZhbHVlPSJvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmludGVybmFsLmRhdGEiLz4KKyAgPHByb3BlcnR5IG5hbWU9ImxpYnJhcnktZmlsZSIKKyAgICAgICAgICAgIHZhbHVlPSIke2VjbGlwc2UtaG9tZX0vcGx1Z2lucy9vcmcuZWNsaXBzZS50ZXN0XzMuMy4wL2xpYnJhcnkueG1sIi8+CisKKyAgPCEtLSBUaGlzIHRhcmdldCBob2xkcyBhbGwgaW5pdGlhbGl6YXRpb24gY29kZSB0aGF0IG5lZWRzIHRvIGJlIGRvbmUgZm9yIC0tPgorICA8IS0tIGFsbCB0ZXN0cyB0aGF0IGFyZSB0byBiZSBydW4uIEluaXRpYWxpemF0aW9uIGZvciBpbmRpdmlkdWFsIHRlc3RzIC0tPgorICA8IS0tIHNob3VsZCBiZSBkb25lIHdpdGhpbiB0aGUgYm9keSBvZiB0aGUgc3VpdGUgdGFyZ2V0LiAtLT4KKyAgPHRhcmdldCBuYW1lPSJpbml0Ij4KKyAgICA8dHN0YW1wLz4KKyAgICA8ZGVsZXRlPgorICAgICAgPGZpbGVzZXQgZGlyPSIke2VjbGlwc2UtaG9tZX0iIGluY2x1ZGVzPSJvcmcqLnhtbCIvPgorICAgIDwvZGVsZXRlPgorICA8L3RhcmdldD4KKworICA8IS0tIFRoaXMgdGFyZ2V0IGRlZmluZXMgdGhlIHRlc3RzIHRoYXQgbmVlZCB0byBiZSBydW4uIC0tPgorICA8dGFyZ2V0IG5hbWU9InN1aXRlIj4KKyAgICA8cHJvcGVydHkgbmFtZT0iJHtkYXRhLWRpcn0iIHZhbHVlPSIke2VjbGlwc2UtaG9tZX0vdG1wIi8+CisgICAgPGRlbGV0ZSBkaXI9IiR7ZGF0YS1kaXJ9IiBxdWlldD0idHJ1ZSIvPgorICAgIDxhbnQgdGFyZ2V0PSJ1aS10ZXN0IiBhbnRmaWxlPSIke2xpYnJhcnktZmlsZX0iIGRpcj0iJHtlY2xpcHNlLWhvbWV9Ij4KKyAgICAgIDxwcm9wZXJ0eSBuYW1lPSJkYXRhLWRpciIgdmFsdWU9IiR7ZGF0YS1kaXJ9Ii8+CisgICAgICA8cHJvcGVydHkgbmFtZT0icGx1Z2luLW5hbWUiIHZhbHVlPSIke3BsdWdpbi1uYW1lfSIvPgorICAgICAgPHByb3BlcnR5IG5hbWU9ImNsYXNzbmFtZSIgdmFsdWU9Im9yZy5lY2xpcHNlLnN0ZW0uaW50ZXJuYWwuZGF0YS5nZW5lcmF0ZWRwbHVnaW4udGVzdHMuR2VuZXJhdGVkUGx1Z2luQWxsVGVzdHMiLz4KKyAgICA8L2FudD4KKyAgPC90YXJnZXQ+CisKKyAgPCEtLSBUaGlzIHRhcmdldCBob2xkcyBjb2RlIHRvIGNsZWFudXAgdGhlIHRlc3RpbmcgZW52aXJvbm1lbnQgYWZ0ZXIgLS0+CisgIDwhLS0gYWZ0ZXIgYWxsIG9mIHRoZSB0ZXN0cyBoYXZlIGJlZW4gcnVuLiBZb3UgY2FuIHVzZSB0aGlzIHRhcmdldCB0byAtLT4KKyAgPCEtLSBkZWxldGUgdGVtcG9yYXJ5IGZpbGVzIHRoYXQgaGF2ZSBiZWVuIGNyZWF0ZWQuIC0tPgorICA8dGFyZ2V0IG5hbWU9ImNsZWFudXAiPgorICA8L3RhcmdldD4KKworICA8IS0tIFRoaXMgdGFyZ2V0IHJ1bnMgdGhlIHRlc3Qgc3VpdGUuIEFueSBhY3Rpb25zIHRoYXQgbmVlZCB0byBoYXBwZW4gLS0+CisgIDwhLS0gYWZ0ZXIgYWxsIHRoZSB0ZXN0cyBoYXZlIGJlZW4gcnVuIHNob3VsZCBnbyBoZXJlLiAtLT4KKyAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQsc3VpdGUsY2xlYW51cCI+CisgICAgPGFudCB0YXJnZXQ9ImNvbGxlY3QiIGFudGZpbGU9IiR7bGlicmFyeS1maWxlfSIgZGlyPSIke2VjbGlwc2UtaG9tZX0iPgorICAgICAgPHByb3BlcnR5IG5hbWU9ImluY2x1ZGVzIiB2YWx1ZT0ib3JnKi54bWwiLz4KKyAgICAgIDxwcm9wZXJ0eSBuYW1lPSJvdXRwdXQtZmlsZSIgdmFsdWU9IiR7cGx1Z2luLW5hbWV9LnhtbCIvPgorICAgIDwvYW50PgorICA8L3RhcmdldD4KKworICA8IS0tIFRoaXMgdGFyZ2V0IHJ1bnMgdGhlIHBlcmZvcm1hbmNlIHRlc3Qgc3VpdGVzLiAtLT4KKyAgPHRhcmdldCBuYW1lPSJwZXJmb3JtYW5jZSI+CisgIDwvdGFyZ2V0PgorPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5pbnRlcm5hbC5kYXRhL3Rlc3RkYXRhL3BsdWdpbi54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmludGVybmFsLmRhdGEvdGVzdGRhdGEvcGx1Z2luLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMjczYjNiCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5pbnRlcm5hbC5kYXRhL3Rlc3RkYXRhL3BsdWdpbi54bWwKQEAgLTAsMCArMSwyODYyIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPD9lY2xpcHNlIHZlcnNpb249IjMuMyI/PgorPHBsdWdpbj4KKzwhLS0gR2VuZXJhdGVkIENvbnRlbnQuICBEbyBub3QgRWRpdC4gLS0+Cis8IS0tIEdlbmVyYXRlZDogMjAwOS0wMi0wMiAxNjo0MCAtLT4KKzwhLS0gKioqKioqKioqKiogR3JhcGhzICoqKioqKioqKioqIC0tPgorPGV4dGVuc2lvbiBwb2ludD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoIj4KKzxzdGVtX2NhdGVnb3J5IGlkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGgiIG5hbWU9IiVfVUlfU3RhbmRhcmRfU2NlbmFyaW9fY2F0ZWdvcnkiIHBhcmVudF9pZD0iLyIvPgorPHN0ZW1fY2F0ZWdvcnkgaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkiIG5hbWU9IiVfVUlfR2VvZ3JhcGh5X2NhdGVnb3J5IiBwYXJlbnRfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaCIvPgorPHN0ZW1fY2F0ZWdvcnkgaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsIiBuYW1lPSIlX1VJX1BvbHRpY2FsX2NhdGVnb3J5IiBwYXJlbnRfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkiLz4KKzxzdGVtX2NhdGVnb3J5IGlkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMiIG5hbWU9IiVfVUlfQ291bnRyaWVzX2NhdGVnb3J5IiBwYXJlbnRfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsIi8+CisKKzwhLS0gQUJXIC0tPgorPHN0ZW1fY2F0ZWdvcnkgaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5hYnciIG5hbWU9IkFCVyIgcGFyZW50X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMiLz4KKwk8IS0tIE5vZGVzIGFuZCBMYWJlbHMgLS0+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5hYnciIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L0FCVy9BQldfMF9hcmVhLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJBQlcgKDApIGFyZWEiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cHM6Ly93d3cuY2lhLmdvdi9jaWEvcHVibGljYXRpb25zL2ZhY3Rib29rL2dlb3MvYWEuaHRtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuYWJ3IiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9BQlcvQUJXXzAuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkFCVygwKSBOb2RlcyIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3Lmlzby5vcmcvaXNvL2hvbWUuaHRtIiBzcGF0aWFsPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvZ2VvL2NvdW50cnkvQUJXL0FCV18wX01BUC54bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKworPCEtLSBBRkcgLS0+Cis8c3RlbV9jYXRlZ29yeSBpZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmFmZyIgbmFtZT0iQUZHIiBwYXJlbnRfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcyIvPgorCTwhLS0gTm9kZXMgYW5kIExhYmVscyAtLT4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmFmZyIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvQUZHL0FGR18wX2FyZWEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkFGRyAoMCkgYXJlYSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwczovL3d3dy5jaWEuZ292L2NpYS9wdWJsaWNhdGlvbnMvZmFjdGJvb2svZ2Vvcy9hZi5odG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5hZmciIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L0FGRy9BRkdfMC5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQUZHKDApIE5vZGVzIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaXNvLm9yZy9pc28vaG9tZS5odG0iIHNwYXRpYWw9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9nZW8vY291bnRyeS9BRkcvQUZHXzBfTUFQLnhtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuYWZnIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9BRkcvQUZHXzFfYXJlYS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQUZHICgxKSBhcmVhIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHBzOi8vd3d3LmNpYS5nb3YvbGlicmFyeS9wdWJsaWNhdGlvbnMvdGhlLXdvcmxkLWZhY3Rib29rLyIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuYWZnIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9BRkcvQUZHXzEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkFGRygxKSBOb2RlcyIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3Lmlzby5vcmcvaXNvL2hvbWUuaHRtIiBzcGF0aWFsPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvZ2VvL2NvdW50cnkvQUZHL0FGR18xX01BUC54bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmFmZyIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvQUZHL0FGR18yX2FyZWEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkFGRyAoMikgYXJlYSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwczovL3d3dy5jaWEuZ292L2xpYnJhcnkvcHVibGljYXRpb25zL3RoZS13b3JsZC1mYWN0Ym9vay8iIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmFmZyIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvQUZHL0FGR18yLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJBRkcoMikgTm9kZXMiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pc28ub3JnL2lzby9ob21lLmh0bSIgc3BhdGlhbD0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2dlby9jb3VudHJ5L0FGRy9BRkdfMl9NQVAueG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+CisJPCEtLSBFZGdlcyAtLT4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmFmZyIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9jb21tb25ib3JkZXIvQUZHXzJfQUZHXzIuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkNvbW1vbiBCb3JkZXIgcmVsYXRpb25zaGlwIHdpdGhpbiBjb3VudHJ5IEFGRyIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgdmFsaWQ9InN0YXJ0PTIwMDYtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuYWZnIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL2NvbW1vbmJvcmRlci9BRkdfMl9DSE5fMi5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQ29tbW9uIEJvcmRlciByZWxhdGlvbnNoaXAgYmV0d2VlbiBjb3VudHJ5IEFGRyBhbmQgQ0hOIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiB2YWxpZD0ic3RhcnQ9MjAwNi0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5hZmciIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvY29tbW9uYm9yZGVyL0FGR18yX0lSTl8yLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJDb21tb24gQm9yZGVyIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIGNvdW50cnkgQUZHIGFuZCBJUk4iIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHZhbGlkPSJzdGFydD0yMDA2LTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmFmZyIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9jb21tb25ib3JkZXIvQUZHXzJfUEFLXzIuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkNvbW1vbiBCb3JkZXIgcmVsYXRpb25zaGlwIGJldHdlZW4gY291bnRyeSBBRkcgYW5kIFBBSyIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgdmFsaWQ9InN0YXJ0PTIwMDYtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuYWZnIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL2NvbW1vbmJvcmRlci9BRkdfMl9USktfMi5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQ29tbW9uIEJvcmRlciByZWxhdGlvbnNoaXAgYmV0d2VlbiBjb3VudHJ5IEFGRyBhbmQgVEpLIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiB2YWxpZD0ic3RhcnQ9MjAwNi0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5hZmciIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvY29tbW9uYm9yZGVyL0FGR18yX1RLTV8yLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJDb21tb24gQm9yZGVyIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIGNvdW50cnkgQUZHIGFuZCBUS00iIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHZhbGlkPSJzdGFydD0yMDA2LTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmFmZyIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9jb21tb25ib3JkZXIvQUZHXzJfVVpCXzIuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkNvbW1vbiBCb3JkZXIgcmVsYXRpb25zaGlwIGJldHdlZW4gY291bnRyeSBBRkcgYW5kIFVaQiIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgdmFsaWQ9InN0YXJ0PTIwMDYtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuYWZnIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL3JlbGF0aXZlcGh5c2ljYWwvQUZHXzBfQUZHXzEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IlBoeXNpY2FsIGNvbnRhaW5tZW50IG9mIEFGRyBsZXZlbCAoMSkgYnkgQUZHICgwKSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3LmlibS5jb20iIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmFmZyIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9yZWxhdGl2ZXBoeXNpY2FsL0FGR18xX0FGR18yLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJQaHlzaWNhbCBjb250YWlubWVudCBvZiBBRkcgbGV2ZWwgKDIpIGJ5IEFGRyAoMSkiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pYm0uY29tIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+CisKKzwhLS0gQUdPIC0tPgorPHN0ZW1fY2F0ZWdvcnkgaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5hZ28iIG5hbWU9IkFHTyIgcGFyZW50X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMiLz4KKwk8IS0tIE5vZGVzIGFuZCBMYWJlbHMgLS0+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5hZ28iIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L0FHTy9BR09fMF9hcmVhLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJBR08gKDApIGFyZWEiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cHM6Ly93d3cuY2lhLmdvdi9jaWEvcHVibGljYXRpb25zL2ZhY3Rib29rL2dlb3MvYW8uaHRtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuYWdvIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9BR08vQUdPXzAuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkFHTygwKSBOb2RlcyIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3Lmlzby5vcmcvaXNvL2hvbWUuaHRtIiBzcGF0aWFsPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvZ2VvL2NvdW50cnkvQUdPL0FHT18wX01BUC54bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmFnbyIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvQUdPL0FHT18xX2FyZWEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkFHTyAoMSkgYXJlYSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwczovL3d3dy5jaWEuZ292L2xpYnJhcnkvcHVibGljYXRpb25zL3RoZS13b3JsZC1mYWN0Ym9vay8iIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmFnbyIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvQUdPL0FHT18xLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJBR08oMSkgTm9kZXMiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pc28ub3JnL2lzby9ob21lLmh0bSIgc3BhdGlhbD0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2dlby9jb3VudHJ5L0FHTy9BR09fMV9NQVAueG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5hZ28iIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L0FHTy9BR09fMl9hcmVhLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJBR08gKDIpIGFyZWEiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cHM6Ly93d3cuY2lhLmdvdi9saWJyYXJ5L3B1YmxpY2F0aW9ucy90aGUtd29ybGQtZmFjdGJvb2svIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5hZ28iIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L0FHTy9BR09fMi5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQUdPKDIpIE5vZGVzIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaXNvLm9yZy9pc28vaG9tZS5odG0iIHNwYXRpYWw9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9nZW8vY291bnRyeS9BR08vQUdPXzJfTUFQLnhtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorCTwhLS0gRWRnZXMgLS0+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5hZ28iIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvY29tbW9uYm9yZGVyL0FHT18yX0FHT18yLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJDb21tb24gQm9yZGVyIHJlbGF0aW9uc2hpcCB3aXRoaW4gY291bnRyeSBBR08iIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHZhbGlkPSJzdGFydD0yMDA2LTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmFnbyIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9jb21tb25ib3JkZXIvQUdPXzJfQ09EXzAuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkNvbW1vbiBCb3JkZXIgcmVsYXRpb25zaGlwIGJldHdlZW4gY291bnRyeSBBR08gYW5kIENPRCIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgdmFsaWQ9InN0YXJ0PTIwMDYtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuYWdvIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL2NvbW1vbmJvcmRlci9BR09fMl9DT0dfMi5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQ29tbW9uIEJvcmRlciByZWxhdGlvbnNoaXAgYmV0d2VlbiBjb3VudHJ5IEFHTyBhbmQgQ09HIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiB2YWxpZD0ic3RhcnQ9MjAwNi0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5hZ28iIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvY29tbW9uYm9yZGVyL0FHT18yX05BTV8yLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJDb21tb24gQm9yZGVyIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIGNvdW50cnkgQUdPIGFuZCBOQU0iIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHZhbGlkPSJzdGFydD0yMDA2LTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmFnbyIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9jb21tb25ib3JkZXIvQUdPXzJfWk1CXzIuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkNvbW1vbiBCb3JkZXIgcmVsYXRpb25zaGlwIGJldHdlZW4gY291bnRyeSBBR08gYW5kIFpNQiIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgdmFsaWQ9InN0YXJ0PTIwMDYtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuYWdvIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL3JlbGF0aXZlcGh5c2ljYWwvQUdPXzBfQUdPXzEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IlBoeXNpY2FsIGNvbnRhaW5tZW50IG9mIEFHTyBsZXZlbCAoMSkgYnkgQUdPICgwKSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3LmlibS5jb20iIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmFnbyIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9yZWxhdGl2ZXBoeXNpY2FsL0FHT18xX0FHT18yLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJQaHlzaWNhbCBjb250YWlubWVudCBvZiBBR08gbGV2ZWwgKDIpIGJ5IEFHTyAoMSkiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pYm0uY29tIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+CisKKzwhLS0gQUlBIC0tPgorPHN0ZW1fY2F0ZWdvcnkgaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5haWEiIG5hbWU9IkFJQSIgcGFyZW50X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMiLz4KKwk8IS0tIE5vZGVzIGFuZCBMYWJlbHMgLS0+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5haWEiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L0FJQS9BSUFfMF9hcmVhLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJBSUEgKDApIGFyZWEiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cHM6Ly93d3cuY2lhLmdvdi9jaWEvcHVibGljYXRpb25zL2ZhY3Rib29rL2dlb3MvYXYuaHRtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuYWlhIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9BSUEvQUlBXzAuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkFJQSgwKSBOb2RlcyIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3Lmlzby5vcmcvaXNvL2hvbWUuaHRtIiBzcGF0aWFsPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvZ2VvL2NvdW50cnkvQUlBL0FJQV8wX01BUC54bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKworPCEtLSBBTEEgLS0+Cis8c3RlbV9jYXRlZ29yeSBpZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmFsYSIgbmFtZT0iQUxBIiBwYXJlbnRfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcyIvPgorCTwhLS0gTm9kZXMgYW5kIExhYmVscyAtLT4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmFsYSIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvQUxBL0FMQV8wX2FyZWEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkFMQSAoMCkgYXJlYSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwczovL3d3dy5jaWEuZ292L2xpYnJhcnkvcHVibGljYXRpb25zL3RoZS13b3JsZC1mYWN0Ym9vay8iIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmFsYSIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvQUxBL0FMQV8wLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJBTEEoMCkgTm9kZXMiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pc28ub3JnL2lzby9ob21lLmh0bSIgc3BhdGlhbD0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2dlby9jb3VudHJ5L0FMQS9BTEFfMF9NQVAueG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+CisKKzwhLS0gQUxCIC0tPgorPHN0ZW1fY2F0ZWdvcnkgaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5hbGIiIG5hbWU9IkFMQiIgcGFyZW50X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMiLz4KKwk8IS0tIE5vZGVzIGFuZCBMYWJlbHMgLS0+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5hbGIiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L0FMQi9BTEJfMF9hcmVhLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJBTEIgKDApIGFyZWEiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cHM6Ly93d3cuY2lhLmdvdi9jaWEvcHVibGljYXRpb25zL2ZhY3Rib29rL2dlb3MvYWwuaHRtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuYWxiIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9BTEIvQUxCXzAuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkFMQigwKSBOb2RlcyIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3Lmlzby5vcmcvaXNvL2hvbWUuaHRtIiBzcGF0aWFsPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvZ2VvL2NvdW50cnkvQUxCL0FMQl8wX01BUC54bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmFsYiIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvQUxCL0FMQl8xX2FyZWEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkFMQiAoMSkgYXJlYSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3LmdyaWQudW5lcC5jaC9kYXRhL2RhdGEucGhwP2NhdGVnb3J5PWh1bWFuX3JlbGF0ZWQiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmFsYiIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvQUxCL0FMQl8xLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJBTEIoMSkgTm9kZXMiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pc28ub3JnL2lzby9ob21lLmh0bSIgc3BhdGlhbD0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2dlby9jb3VudHJ5L0FMQi9BTEJfMV9NQVAueG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+CisJPCEtLSBFZGdlcyAtLT4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmFsYiIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9jb21tb25ib3JkZXIvQUxCXzFfQUxCXzEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkNvbW1vbiBCb3JkZXIgcmVsYXRpb25zaGlwIHdpdGhpbiBjb3VudHJ5IEFMQiIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgdmFsaWQ9InN0YXJ0PTIwMDYtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuYWxiIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL2NvbW1vbmJvcmRlci9BTEJfMV9HUkNfMS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQ29tbW9uIEJvcmRlciByZWxhdGlvbnNoaXAgYmV0d2VlbiBjb3VudHJ5IEFMQiBhbmQgR1JDIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiB2YWxpZD0ic3RhcnQ9MjAwNi0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5hbGIiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvY29tbW9uYm9yZGVyL0FMQl8xX01LRF8wLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJDb21tb24gQm9yZGVyIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIGNvdW50cnkgQUxCIGFuZCBNS0QiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHZhbGlkPSJzdGFydD0yMDA2LTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmFsYiIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9jb21tb25ib3JkZXIvQUxCXzFfTUtEXzIuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkNvbW1vbiBCb3JkZXIgcmVsYXRpb25zaGlwIGJldHdlZW4gY291bnRyeSBBTEIgYW5kIE1LRCIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgdmFsaWQ9InN0YXJ0PTIwMDYtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuYWxiIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL2NvbW1vbmJvcmRlci9BTEJfMV9TUkJfMS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQ29tbW9uIEJvcmRlciByZWxhdGlvbnNoaXAgYmV0d2VlbiBjb3VudHJ5IEFMQiBhbmQgU1JCIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiB2YWxpZD0ic3RhcnQ9MjAwNi0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5hbGIiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvcmVsYXRpdmVwaHlzaWNhbC9BTEJfMF9BTEJfMS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iUGh5c2ljYWwgY29udGFpbm1lbnQgb2YgQUxCIGxldmVsICgxKSBieSBBTEIgKDApIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaWJtLmNvbSIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorCis8IS0tIEFORCAtLT4KKzxzdGVtX2NhdGVnb3J5IGlkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuYW5kIiBuYW1lPSJBTkQiIHBhcmVudF9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzIi8+CisJPCEtLSBOb2RlcyBhbmQgTGFiZWxzIC0tPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuYW5kIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9BTkQvQU5EXzBfYXJlYS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQU5EICgwKSBhcmVhIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHBzOi8vd3d3LmNpYS5nb3YvY2lhL3B1YmxpY2F0aW9ucy9mYWN0Ym9vay9nZW9zL2FuLmh0bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmFuZCIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvQU5EL0FORF8wLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJBTkQoMCkgTm9kZXMiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pc28ub3JnL2lzby9ob21lLmh0bSIgc3BhdGlhbD0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2dlby9jb3VudHJ5L0FORC9BTkRfMF9NQVAueG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5hbmQiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L0FORC9BTkRfMV9hcmVhLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJBTkQgKDEpIGFyZWEiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5ncmlkLnVuZXAuY2gvZGF0YS9kYXRhLnBocD9jYXRlZ29yeT1odW1hbl9yZWxhdGVkIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5hbmQiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L0FORC9BTkRfMS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQU5EKDEpIE5vZGVzIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaXNvLm9yZy9pc28vaG9tZS5odG0iIHNwYXRpYWw9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9nZW8vY291bnRyeS9BTkQvQU5EXzFfTUFQLnhtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorCTwhLS0gRWRnZXMgLS0+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5hbmQiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvY29tbW9uYm9yZGVyL0FORF8xX0FORF8xLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJDb21tb24gQm9yZGVyIHJlbGF0aW9uc2hpcCB3aXRoaW4gY291bnRyeSBBTkQiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHZhbGlkPSJzdGFydD0yMDA2LTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmFuZCIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9jb21tb25ib3JkZXIvQU5EXzFfRVNQXzEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkNvbW1vbiBCb3JkZXIgcmVsYXRpb25zaGlwIGJldHdlZW4gY291bnRyeSBBTkQgYW5kIEVTUCIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgdmFsaWQ9InN0YXJ0PTIwMDYtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuYW5kIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL2NvbW1vbmJvcmRlci9BTkRfMV9GUkFfMS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQ29tbW9uIEJvcmRlciByZWxhdGlvbnNoaXAgYmV0d2VlbiBjb3VudHJ5IEFORCBhbmQgRlJBIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiB2YWxpZD0ic3RhcnQ9MjAwNi0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5hbmQiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvcmVsYXRpdmVwaHlzaWNhbC9BTkRfMF9BTkRfMS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iUGh5c2ljYWwgY29udGFpbm1lbnQgb2YgQU5EIGxldmVsICgxKSBieSBBTkQgKDApIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaWJtLmNvbSIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorCis8IS0tIEFOVCAtLT4KKzxzdGVtX2NhdGVnb3J5IGlkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuYW50IiBuYW1lPSJBTlQiIHBhcmVudF9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzIi8+CisJPCEtLSBOb2RlcyBhbmQgTGFiZWxzIC0tPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuYW50IiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9BTlQvQU5UXzBfYXJlYS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQU5UICgwKSBhcmVhIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHBzOi8vd3d3LmNpYS5nb3YvY2lhL3B1YmxpY2F0aW9ucy9mYWN0Ym9vay9nZW9zL250Lmh0bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmFudCIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvQU5UL0FOVF8wLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJBTlQoMCkgTm9kZXMiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pc28ub3JnL2lzby9ob21lLmh0bSIgc3BhdGlhbD0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2dlby9jb3VudHJ5L0FOVC9BTlRfMF9NQVAueG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+CisKKzwhLS0gQVJFIC0tPgorPHN0ZW1fY2F0ZWdvcnkgaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5hcmUiIG5hbWU9IkFSRSIgcGFyZW50X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMiLz4KKwk8IS0tIE5vZGVzIGFuZCBMYWJlbHMgLS0+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5hcmUiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L0FSRS9BUkVfMF9hcmVhLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJBUkUgKDApIGFyZWEiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cHM6Ly93d3cuY2lhLmdvdi9jaWEvcHVibGljYXRpb25zL2ZhY3Rib29rL2dlb3MvYWUuaHRtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuYXJlIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9BUkUvQVJFXzAuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkFSRSgwKSBOb2RlcyIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3Lmlzby5vcmcvaXNvL2hvbWUuaHRtIiBzcGF0aWFsPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvZ2VvL2NvdW50cnkvQVJFL0FSRV8wX01BUC54bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmFyZSIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvQVJFL0FSRV8xX2FyZWEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkFSRSAoMSkgYXJlYSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwczovL3d3dy5jaWEuZ292L2xpYnJhcnkvcHVibGljYXRpb25zL3RoZS13b3JsZC1mYWN0Ym9vay8iIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmFyZSIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvQVJFL0FSRV8xLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJBUkUoMSkgTm9kZXMiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pc28ub3JnL2lzby9ob21lLmh0bSIgc3BhdGlhbD0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2dlby9jb3VudHJ5L0FSRS9BUkVfMV9NQVAueG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5hcmUiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L0FSRS9BUkVfMl9hcmVhLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJBUkUgKDIpIGFyZWEiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cHM6Ly93d3cuY2lhLmdvdi9saWJyYXJ5L3B1YmxpY2F0aW9ucy90aGUtd29ybGQtZmFjdGJvb2svIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5hcmUiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L0FSRS9BUkVfMi5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQVJFKDIpIE5vZGVzIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaXNvLm9yZy9pc28vaG9tZS5odG0iIHNwYXRpYWw9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9nZW8vY291bnRyeS9BUkUvQVJFXzJfTUFQLnhtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorCTwhLS0gRWRnZXMgLS0+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5hcmUiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvY29tbW9uYm9yZGVyL0FSRV8yX0FSRV8yLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJDb21tb24gQm9yZGVyIHJlbGF0aW9uc2hpcCB3aXRoaW4gY291bnRyeSBBUkUiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHZhbGlkPSJzdGFydD0yMDA2LTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmFyZSIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9jb21tb25ib3JkZXIvQVJFXzJfT01OXzIuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkNvbW1vbiBCb3JkZXIgcmVsYXRpb25zaGlwIGJldHdlZW4gY291bnRyeSBBUkUgYW5kIE9NTiIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgdmFsaWQ9InN0YXJ0PTIwMDYtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuYXJlIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL2NvbW1vbmJvcmRlci9BUkVfMl9RQVRfMi5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQ29tbW9uIEJvcmRlciByZWxhdGlvbnNoaXAgYmV0d2VlbiBjb3VudHJ5IEFSRSBhbmQgUUFUIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiB2YWxpZD0ic3RhcnQ9MjAwNi0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5hcmUiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvY29tbW9uYm9yZGVyL0FSRV8yX1NBVV8yLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJDb21tb24gQm9yZGVyIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIGNvdW50cnkgQVJFIGFuZCBTQVUiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHZhbGlkPSJzdGFydD0yMDA2LTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmFyZSIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9yZWxhdGl2ZXBoeXNpY2FsL0FSRV8wX0FSRV8xLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJQaHlzaWNhbCBjb250YWlubWVudCBvZiBBUkUgbGV2ZWwgKDEpIGJ5IEFSRSAoMCkiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pYm0uY29tIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5hcmUiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvcmVsYXRpdmVwaHlzaWNhbC9BUkVfMV9BUkVfMi5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iUGh5c2ljYWwgY29udGFpbm1lbnQgb2YgQVJFIGxldmVsICgyKSBieSBBUkUgKDEpIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaWJtLmNvbSIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorCis8IS0tIEFSRyAtLT4KKzxzdGVtX2NhdGVnb3J5IGlkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuYXJnIiBuYW1lPSJBUkciIHBhcmVudF9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzIi8+CisJPCEtLSBOb2RlcyBhbmQgTGFiZWxzIC0tPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuYXJnIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9BUkcvQVJHXzBfYXJlYS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQVJHICgwKSBhcmVhIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHBzOi8vd3d3LmNpYS5nb3YvY2lhL3B1YmxpY2F0aW9ucy9mYWN0Ym9vay9nZW9zL2FyLmh0bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmFyZyIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvQVJHL0FSR18wLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJBUkcoMCkgTm9kZXMiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pc28ub3JnL2lzby9ob21lLmh0bSIgc3BhdGlhbD0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2dlby9jb3VudHJ5L0FSRy9BUkdfMF9NQVAueG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5hcmciIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L0FSRy9BUkdfMV9hcmVhLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJBUkcgKDEpIGFyZWEiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cHM6Ly93d3cuY2lhLmdvdi9saWJyYXJ5L3B1YmxpY2F0aW9ucy90aGUtd29ybGQtZmFjdGJvb2svIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5hcmciIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L0FSRy9BUkdfMS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQVJHKDEpIE5vZGVzIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaXNvLm9yZy9pc28vaG9tZS5odG0iIHNwYXRpYWw9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9nZW8vY291bnRyeS9BUkcvQVJHXzFfTUFQLnhtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuYXJnIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9BUkcvQVJHXzJfYXJlYS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQVJHICgyKSBhcmVhIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHBzOi8vd3d3LmNpYS5nb3YvbGlicmFyeS9wdWJsaWNhdGlvbnMvdGhlLXdvcmxkLWZhY3Rib29rLyIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuYXJnIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9BUkcvQVJHXzIuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkFSRygyKSBOb2RlcyIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3Lmlzby5vcmcvaXNvL2hvbWUuaHRtIiBzcGF0aWFsPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvZ2VvL2NvdW50cnkvQVJHL0FSR18yX01BUC54bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKwk8IS0tIEVkZ2VzIC0tPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuYXJnIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL2NvbW1vbmJvcmRlci9BUkdfMl9BUkdfMi5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQ29tbW9uIEJvcmRlciByZWxhdGlvbnNoaXAgd2l0aGluIGNvdW50cnkgQVJHIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiB2YWxpZD0ic3RhcnQ9MjAwNi0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5hcmciIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvY29tbW9uYm9yZGVyL0FSR18yX0JPTF8yLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJDb21tb24gQm9yZGVyIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIGNvdW50cnkgQVJHIGFuZCBCT0wiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHZhbGlkPSJzdGFydD0yMDA2LTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmFyZyIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9jb21tb25ib3JkZXIvQVJHXzJfQlJBXzIuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkNvbW1vbiBCb3JkZXIgcmVsYXRpb25zaGlwIGJldHdlZW4gY291bnRyeSBBUkcgYW5kIEJSQSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgdmFsaWQ9InN0YXJ0PTIwMDYtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuYXJnIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL2NvbW1vbmJvcmRlci9BUkdfMl9DSExfMi5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQ29tbW9uIEJvcmRlciByZWxhdGlvbnNoaXAgYmV0d2VlbiBjb3VudHJ5IEFSRyBhbmQgQ0hMIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiB2YWxpZD0ic3RhcnQ9MjAwNi0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5hcmciIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvY29tbW9uYm9yZGVyL0FSR18yX1BSWV8yLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJDb21tb24gQm9yZGVyIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIGNvdW50cnkgQVJHIGFuZCBQUlkiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHZhbGlkPSJzdGFydD0yMDA2LTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmFyZyIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9jb21tb25ib3JkZXIvQVJHXzJfVVJZXzIuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkNvbW1vbiBCb3JkZXIgcmVsYXRpb25zaGlwIGJldHdlZW4gY291bnRyeSBBUkcgYW5kIFVSWSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgdmFsaWQ9InN0YXJ0PTIwMDYtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuYXJnIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL3JlbGF0aXZlcGh5c2ljYWwvQVJHXzBfQVJHXzEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IlBoeXNpY2FsIGNvbnRhaW5tZW50IG9mIEFSRyBsZXZlbCAoMSkgYnkgQVJHICgwKSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3LmlibS5jb20iIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmFyZyIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9yZWxhdGl2ZXBoeXNpY2FsL0FSR18xX0FSR18yLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJQaHlzaWNhbCBjb250YWlubWVudCBvZiBBUkcgbGV2ZWwgKDIpIGJ5IEFSRyAoMSkiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pYm0uY29tIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+CisKKzwhLS0gQVJNIC0tPgorPHN0ZW1fY2F0ZWdvcnkgaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5hcm0iIG5hbWU9IkFSTSIgcGFyZW50X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMiLz4KKwk8IS0tIE5vZGVzIGFuZCBMYWJlbHMgLS0+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5hcm0iIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L0FSTS9BUk1fMF9hcmVhLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJBUk0gKDApIGFyZWEiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cHM6Ly93d3cuY2lhLmdvdi9jaWEvcHVibGljYXRpb25zL2ZhY3Rib29rL2dlb3MvYW0uaHRtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuYXJtIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9BUk0vQVJNXzAuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkFSTSgwKSBOb2RlcyIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3Lmlzby5vcmcvaXNvL2hvbWUuaHRtIiBzcGF0aWFsPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvZ2VvL2NvdW50cnkvQVJNL0FSTV8wX01BUC54bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmFybSIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvQVJNL0FSTV8xX2FyZWEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkFSTSAoMSkgYXJlYSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwczovL3d3dy5jaWEuZ292L2xpYnJhcnkvcHVibGljYXRpb25zL3RoZS13b3JsZC1mYWN0Ym9vay8iIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmFybSIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvQVJNL0FSTV8xLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJBUk0oMSkgTm9kZXMiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pc28ub3JnL2lzby9ob21lLmh0bSIgc3BhdGlhbD0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2dlby9jb3VudHJ5L0FSTS9BUk1fMV9NQVAueG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5hcm0iIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L0FSTS9BUk1fMl9hcmVhLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJBUk0gKDIpIGFyZWEiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cHM6Ly93d3cuY2lhLmdvdi9saWJyYXJ5L3B1YmxpY2F0aW9ucy90aGUtd29ybGQtZmFjdGJvb2svIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5hcm0iIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L0FSTS9BUk1fMi5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQVJNKDIpIE5vZGVzIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaXNvLm9yZy9pc28vaG9tZS5odG0iIHNwYXRpYWw9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9nZW8vY291bnRyeS9BUk0vQVJNXzJfTUFQLnhtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorCTwhLS0gRWRnZXMgLS0+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5hcm0iIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvY29tbW9uYm9yZGVyL0FSTV8yX0FSTV8yLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJDb21tb24gQm9yZGVyIHJlbGF0aW9uc2hpcCB3aXRoaW4gY291bnRyeSBBUk0iIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHZhbGlkPSJzdGFydD0yMDA2LTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmFybSIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9jb21tb25ib3JkZXIvQVJNXzJfQVpFXzIuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkNvbW1vbiBCb3JkZXIgcmVsYXRpb25zaGlwIGJldHdlZW4gY291bnRyeSBBUk0gYW5kIEFaRSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgdmFsaWQ9InN0YXJ0PTIwMDYtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuYXJtIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL2NvbW1vbmJvcmRlci9BUk1fMl9HRU9fMC5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQ29tbW9uIEJvcmRlciByZWxhdGlvbnNoaXAgYmV0d2VlbiBjb3VudHJ5IEFSTSBhbmQgR0VPIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiB2YWxpZD0ic3RhcnQ9MjAwNi0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5hcm0iIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvY29tbW9uYm9yZGVyL0FSTV8yX0lSTl8yLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJDb21tb24gQm9yZGVyIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIGNvdW50cnkgQVJNIGFuZCBJUk4iIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHZhbGlkPSJzdGFydD0yMDA2LTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmFybSIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9jb21tb25ib3JkZXIvQVJNXzJfVFVSXzIuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkNvbW1vbiBCb3JkZXIgcmVsYXRpb25zaGlwIGJldHdlZW4gY291bnRyeSBBUk0gYW5kIFRVUiIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgdmFsaWQ9InN0YXJ0PTIwMDYtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuYXJtIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL3JlbGF0aXZlcGh5c2ljYWwvQVJNXzBfQVJNXzEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IlBoeXNpY2FsIGNvbnRhaW5tZW50IG9mIEFSTSBsZXZlbCAoMSkgYnkgQVJNICgwKSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3LmlibS5jb20iIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmFybSIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9yZWxhdGl2ZXBoeXNpY2FsL0FSTV8xX0FSTV8yLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJQaHlzaWNhbCBjb250YWlubWVudCBvZiBBUk0gbGV2ZWwgKDIpIGJ5IEFSTSAoMSkiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pYm0uY29tIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+CisKKzwhLS0gQVNNIC0tPgorPHN0ZW1fY2F0ZWdvcnkgaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5hc20iIG5hbWU9IkFTTSIgcGFyZW50X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMiLz4KKwk8IS0tIE5vZGVzIGFuZCBMYWJlbHMgLS0+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5hc20iIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L0FTTS9BU01fMF9hcmVhLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJBU00gKDApIGFyZWEiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cHM6Ly93d3cuY2lhLmdvdi9jaWEvcHVibGljYXRpb25zL2ZhY3Rib29rL2dlb3MvYWEuaHRtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuYXNtIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9BU00vQVNNXzAuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkFTTSgwKSBOb2RlcyIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3Lmlzby5vcmcvaXNvL2hvbWUuaHRtIiBzcGF0aWFsPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvZ2VvL2NvdW50cnkvQVNNL0FTTV8wX01BUC54bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKworPCEtLSBBVEEgLS0+Cis8c3RlbV9jYXRlZ29yeSBpZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmF0YSIgbmFtZT0iQVRBIiBwYXJlbnRfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcyIvPgorCTwhLS0gTm9kZXMgYW5kIExhYmVscyAtLT4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmF0YSIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvQVRBL0FUQV8wX2FyZWEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkFUQSAoMCkgYXJlYSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwczovL3d3dy5jaWEuZ292L2NpYS9wdWJsaWNhdGlvbnMvZmFjdGJvb2svZ2Vvcy9heS5odG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5hdGEiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L0FUQS9BVEFfMC5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQVRBKDApIE5vZGVzIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaXNvLm9yZy9pc28vaG9tZS5odG0iIHNwYXRpYWw9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9nZW8vY291bnRyeS9BVEEvQVRBXzBfTUFQLnhtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorCis8IS0tIEFURiAtLT4KKzxzdGVtX2NhdGVnb3J5IGlkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuYXRmIiBuYW1lPSJBVEYiIHBhcmVudF9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzIi8+CisJPCEtLSBOb2RlcyBhbmQgTGFiZWxzIC0tPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuYXRmIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9BVEYvQVRGXzBfYXJlYS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQVRGICgwKSBhcmVhIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHBzOi8vd3d3LmNpYS5nb3YvY2lhL3B1YmxpY2F0aW9ucy9mYWN0Ym9vay9nZW9zL2ZzLmh0bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmF0ZiIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvQVRGL0FURl8wLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJBVEYoMCkgTm9kZXMiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pc28ub3JnL2lzby9ob21lLmh0bSIgc3BhdGlhbD0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2dlby9jb3VudHJ5L0FURi9BVEZfMF9NQVAueG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+CisKKzwhLS0gQVRHIC0tPgorPHN0ZW1fY2F0ZWdvcnkgaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5hdGciIG5hbWU9IkFURyIgcGFyZW50X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMiLz4KKwk8IS0tIE5vZGVzIGFuZCBMYWJlbHMgLS0+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5hdGciIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L0FURy9BVEdfMF9hcmVhLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJBVEcgKDApIGFyZWEiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cHM6Ly93d3cuY2lhLmdvdi9jaWEvcHVibGljYXRpb25zL2ZhY3Rib29rL2dlb3MvYWMuaHRtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuYXRnIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9BVEcvQVRHXzAuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkFURygwKSBOb2RlcyIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3Lmlzby5vcmcvaXNvL2hvbWUuaHRtIiBzcGF0aWFsPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvZ2VvL2NvdW50cnkvQVRHL0FUR18wX01BUC54bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKworPCEtLSBBVVMgLS0+Cis8c3RlbV9jYXRlZ29yeSBpZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmF1cyIgbmFtZT0iQVVTIiBwYXJlbnRfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcyIvPgorCTwhLS0gTm9kZXMgYW5kIExhYmVscyAtLT4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmF1cyIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvQVVTL0FVU18wX2FyZWEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkFVUyAoMCkgYXJlYSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwczovL3d3dy5jaWEuZ292L2NpYS9wdWJsaWNhdGlvbnMvZmFjdGJvb2svZ2Vvcy9iZS5odG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5hdXMiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L0FVUy9BVVNfMC5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQVVTKDApIE5vZGVzIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaXNvLm9yZy9pc28vaG9tZS5odG0iIHNwYXRpYWw9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9nZW8vY291bnRyeS9BVVMvQVVTXzBfTUFQLnhtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuYXVzIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9BVVMvQVVTXzFfYXJlYS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQVVTICgxKSBhcmVhIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5hdXMiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L0FVUy9BVVNfMS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQVVTKDEpIE5vZGVzIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzcGF0aWFsPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvZ2VvL2NvdW50cnkvQVVTL0FVU18xX01BUC54bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKwk8IS0tIEVkZ2VzIC0tPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuYXVzIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL2NvbW1vbmJvcmRlci9BVVNfMV9BVVNfMS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQ29tbW9uIEJvcmRlciByZWxhdGlvbnNoaXAgd2l0aGluIGNvdW50cnkgQVVTIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiB2YWxpZD0ic3RhcnQ9MjAwNi0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5hdXMiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvcmVsYXRpdmVwaHlzaWNhbC9BVVNfMF9BVVNfMS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iUGh5c2ljYWwgY29udGFpbm1lbnQgb2YgQVVTIGxldmVsICgxKSBieSBBVVMgKDApIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaWJtLmNvbSIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorCis8IS0tIEFVVCAtLT4KKzxzdGVtX2NhdGVnb3J5IGlkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuYXV0IiBuYW1lPSJBVVQiIHBhcmVudF9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzIi8+CisJPCEtLSBOb2RlcyBhbmQgTGFiZWxzIC0tPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuYXV0IiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9BVVQvQVVUXzBfYXJlYS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQVVUICgwKSBhcmVhIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHBzOi8vd3d3LmNpYS5nb3YvY2lhL3B1YmxpY2F0aW9ucy9mYWN0Ym9vay9nZW9zL2F1Lmh0bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmF1dCIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvQVVUL0FVVF8wLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJBVVQoMCkgTm9kZXMiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pc28ub3JnL2lzby9ob21lLmh0bSIgc3BhdGlhbD0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2dlby9jb3VudHJ5L0FVVC9BVVRfMF9NQVAueG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5hdXQiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L0FVVC9BVVRfMV9hcmVhLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJBVVQgKDEpIGFyZWEiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5ncmlkLnVuZXAuY2gvZGF0YS9kYXRhLnBocD9jYXRlZ29yeT1odW1hbl9yZWxhdGVkIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5hdXQiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L0FVVC9BVVRfMS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQVVUKDEpIE5vZGVzIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaXNvLm9yZy9pc28vaG9tZS5odG0iIHNwYXRpYWw9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9nZW8vY291bnRyeS9BVVQvQVVUXzFfTUFQLnhtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorCTwhLS0gRWRnZXMgLS0+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5hdXQiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvY29tbW9uYm9yZGVyL0FVVF8xX0FVVF8xLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJDb21tb24gQm9yZGVyIHJlbGF0aW9uc2hpcCB3aXRoaW4gY291bnRyeSBBVVQiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHZhbGlkPSJzdGFydD0yMDA2LTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmF1dCIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9jb21tb25ib3JkZXIvQVVUXzFfQ0hFXzEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkNvbW1vbiBCb3JkZXIgcmVsYXRpb25zaGlwIGJldHdlZW4gY291bnRyeSBBVVQgYW5kIENIRSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgdmFsaWQ9InN0YXJ0PTIwMDYtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuYXV0IiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL2NvbW1vbmJvcmRlci9BVVRfMV9DWkVfMS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQ29tbW9uIEJvcmRlciByZWxhdGlvbnNoaXAgYmV0d2VlbiBjb3VudHJ5IEFVVCBhbmQgQ1pFIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiB2YWxpZD0ic3RhcnQ9MjAwNi0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5hdXQiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvY29tbW9uYm9yZGVyL0FVVF8xX0RFVV8xLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJDb21tb24gQm9yZGVyIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIGNvdW50cnkgQVVUIGFuZCBERVUiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHZhbGlkPSJzdGFydD0yMDA2LTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmF1dCIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9jb21tb25ib3JkZXIvQVVUXzFfSFVOXzEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkNvbW1vbiBCb3JkZXIgcmVsYXRpb25zaGlwIGJldHdlZW4gY291bnRyeSBBVVQgYW5kIEhVTiIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgdmFsaWQ9InN0YXJ0PTIwMDYtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuYXV0IiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL2NvbW1vbmJvcmRlci9BVVRfMV9JVEFfMS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQ29tbW9uIEJvcmRlciByZWxhdGlvbnNoaXAgYmV0d2VlbiBjb3VudHJ5IEFVVCBhbmQgSVRBIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiB2YWxpZD0ic3RhcnQ9MjAwNi0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5hdXQiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvY29tbW9uYm9yZGVyL0FVVF8xX0xJRV8xLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJDb21tb24gQm9yZGVyIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIGNvdW50cnkgQVVUIGFuZCBMSUUiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHZhbGlkPSJzdGFydD0yMDA2LTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmF1dCIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9jb21tb25ib3JkZXIvQVVUXzFfU1ZOXzEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkNvbW1vbiBCb3JkZXIgcmVsYXRpb25zaGlwIGJldHdlZW4gY291bnRyeSBBVVQgYW5kIFNWTiIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgdmFsaWQ9InN0YXJ0PTIwMDYtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuYXV0IiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL3JlbGF0aXZlcGh5c2ljYWwvQVVUXzBfQVVUXzEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IlBoeXNpY2FsIGNvbnRhaW5tZW50IG9mIEFVVCBsZXZlbCAoMSkgYnkgQVVUICgwKSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3LmlibS5jb20iIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKworPCEtLSBBWkUgLS0+Cis8c3RlbV9jYXRlZ29yeSBpZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmF6ZSIgbmFtZT0iQVpFIiBwYXJlbnRfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcyIvPgorCTwhLS0gTm9kZXMgYW5kIExhYmVscyAtLT4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmF6ZSIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvQVpFL0FaRV8wX2FyZWEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkFaRSAoMCkgYXJlYSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwczovL3d3dy5jaWEuZ292L2NpYS9wdWJsaWNhdGlvbnMvZmFjdGJvb2svZ2Vvcy9hai5odG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5hemUiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L0FaRS9BWkVfMC5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQVpFKDApIE5vZGVzIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaXNvLm9yZy9pc28vaG9tZS5odG0iIHNwYXRpYWw9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9nZW8vY291bnRyeS9BWkUvQVpFXzBfTUFQLnhtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuYXplIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9BWkUvQVpFXzFfYXJlYS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQVpFICgxKSBhcmVhIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHBzOi8vd3d3LmNpYS5nb3YvbGlicmFyeS9wdWJsaWNhdGlvbnMvdGhlLXdvcmxkLWZhY3Rib29rLyIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuYXplIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9BWkUvQVpFXzEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkFaRSgxKSBOb2RlcyIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3Lmlzby5vcmcvaXNvL2hvbWUuaHRtIiBzcGF0aWFsPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvZ2VvL2NvdW50cnkvQVpFL0FaRV8xX01BUC54bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmF6ZSIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvQVpFL0FaRV8yX2FyZWEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkFaRSAoMikgYXJlYSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwczovL3d3dy5jaWEuZ292L2xpYnJhcnkvcHVibGljYXRpb25zL3RoZS13b3JsZC1mYWN0Ym9vay8iIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmF6ZSIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvQVpFL0FaRV8yLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJBWkUoMikgTm9kZXMiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pc28ub3JnL2lzby9ob21lLmh0bSIgc3BhdGlhbD0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2dlby9jb3VudHJ5L0FaRS9BWkVfMl9NQVAueG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+CisJPCEtLSBFZGdlcyAtLT4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmF6ZSIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9jb21tb25ib3JkZXIvQVpFXzJfQVpFXzIuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkNvbW1vbiBCb3JkZXIgcmVsYXRpb25zaGlwIHdpdGhpbiBjb3VudHJ5IEFaRSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgdmFsaWQ9InN0YXJ0PTIwMDYtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuYXplIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL2NvbW1vbmJvcmRlci9BWkVfMl9HRU9fMC5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQ29tbW9uIEJvcmRlciByZWxhdGlvbnNoaXAgYmV0d2VlbiBjb3VudHJ5IEFaRSBhbmQgR0VPIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiB2YWxpZD0ic3RhcnQ9MjAwNi0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5hemUiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvY29tbW9uYm9yZGVyL0FaRV8yX0lSTl8yLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJDb21tb24gQm9yZGVyIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIGNvdW50cnkgQVpFIGFuZCBJUk4iIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHZhbGlkPSJzdGFydD0yMDA2LTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmF6ZSIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9jb21tb25ib3JkZXIvQVpFXzJfUlVTXzEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkNvbW1vbiBCb3JkZXIgcmVsYXRpb25zaGlwIGJldHdlZW4gY291bnRyeSBBWkUgYW5kIFJVUyIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgdmFsaWQ9InN0YXJ0PTIwMDYtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuYXplIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL2NvbW1vbmJvcmRlci9BWkVfMl9UVVJfMi5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQ29tbW9uIEJvcmRlciByZWxhdGlvbnNoaXAgYmV0d2VlbiBjb3VudHJ5IEFaRSBhbmQgVFVSIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiB2YWxpZD0ic3RhcnQ9MjAwNi0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5hemUiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvcmVsYXRpdmVwaHlzaWNhbC9BWkVfMF9BWkVfMS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iUGh5c2ljYWwgY29udGFpbm1lbnQgb2YgQVpFIGxldmVsICgxKSBieSBBWkUgKDApIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaWJtLmNvbSIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuYXplIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL3JlbGF0aXZlcGh5c2ljYWwvQVpFXzFfQVpFXzIuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IlBoeXNpY2FsIGNvbnRhaW5tZW50IG9mIEFaRSBsZXZlbCAoMikgYnkgQVpFICgxKSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3LmlibS5jb20iIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKworPCEtLSBCREkgLS0+Cis8c3RlbV9jYXRlZ29yeSBpZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmJkaSIgbmFtZT0iQkRJIiBwYXJlbnRfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcyIvPgorCTwhLS0gTm9kZXMgYW5kIExhYmVscyAtLT4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmJkaSIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvQkRJL0JESV8wX2FyZWEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkJESSAoMCkgYXJlYSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwczovL3d3dy5jaWEuZ292L2NpYS9wdWJsaWNhdGlvbnMvZmFjdGJvb2svZ2Vvcy9ieS5odG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5iZGkiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L0JESS9CRElfMC5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQkRJKDApIE5vZGVzIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaXNvLm9yZy9pc28vaG9tZS5odG0iIHNwYXRpYWw9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9nZW8vY291bnRyeS9CREkvQkRJXzBfTUFQLnhtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuYmRpIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9CREkvQkRJXzFfYXJlYS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQkRJICgxKSBhcmVhIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHBzOi8vd3d3LmNpYS5nb3YvbGlicmFyeS9wdWJsaWNhdGlvbnMvdGhlLXdvcmxkLWZhY3Rib29rLyIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuYmRpIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9CREkvQkRJXzEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkJESSgxKSBOb2RlcyIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3Lmlzby5vcmcvaXNvL2hvbWUuaHRtIiBzcGF0aWFsPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvZ2VvL2NvdW50cnkvQkRJL0JESV8xX01BUC54bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmJkaSIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvQkRJL0JESV8yX2FyZWEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkJESSAoMikgYXJlYSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwczovL3d3dy5jaWEuZ292L2xpYnJhcnkvcHVibGljYXRpb25zL3RoZS13b3JsZC1mYWN0Ym9vay8iIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmJkaSIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvQkRJL0JESV8yLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJCREkoMikgTm9kZXMiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pc28ub3JnL2lzby9ob21lLmh0bSIgc3BhdGlhbD0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2dlby9jb3VudHJ5L0JESS9CRElfMl9NQVAueG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+CisJPCEtLSBFZGdlcyAtLT4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmJkaSIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9jb21tb25ib3JkZXIvQkRJXzJfQkRJXzIuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkNvbW1vbiBCb3JkZXIgcmVsYXRpb25zaGlwIHdpdGhpbiBjb3VudHJ5IEJESSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgdmFsaWQ9InN0YXJ0PTIwMDYtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuYmRpIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL2NvbW1vbmJvcmRlci9CRElfMl9DT0RfMC5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQ29tbW9uIEJvcmRlciByZWxhdGlvbnNoaXAgYmV0d2VlbiBjb3VudHJ5IEJESSBhbmQgQ09EIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiB2YWxpZD0ic3RhcnQ9MjAwNi0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5iZGkiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvY29tbW9uYm9yZGVyL0JESV8yX1JXQV8yLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJDb21tb24gQm9yZGVyIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIGNvdW50cnkgQkRJIGFuZCBSV0EiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHZhbGlkPSJzdGFydD0yMDA2LTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmJkaSIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9jb21tb25ib3JkZXIvQkRJXzJfVFpBXzIuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkNvbW1vbiBCb3JkZXIgcmVsYXRpb25zaGlwIGJldHdlZW4gY291bnRyeSBCREkgYW5kIFRaQSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgdmFsaWQ9InN0YXJ0PTIwMDYtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuYmRpIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL3JlbGF0aXZlcGh5c2ljYWwvQkRJXzBfQkRJXzEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IlBoeXNpY2FsIGNvbnRhaW5tZW50IG9mIEJESSBsZXZlbCAoMSkgYnkgQkRJICgwKSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3LmlibS5jb20iIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmJkaSIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9yZWxhdGl2ZXBoeXNpY2FsL0JESV8xX0JESV8yLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJQaHlzaWNhbCBjb250YWlubWVudCBvZiBCREkgbGV2ZWwgKDIpIGJ5IEJESSAoMSkiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pYm0uY29tIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+CisKKzwhLS0gQkVMIC0tPgorPHN0ZW1fY2F0ZWdvcnkgaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5iZWwiIG5hbWU9IkJFTCIgcGFyZW50X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMiLz4KKwk8IS0tIE5vZGVzIGFuZCBMYWJlbHMgLS0+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5iZWwiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L0JFTC9CRUxfMF9hcmVhLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJCRUwgKDApIGFyZWEiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cHM6Ly93d3cuY2lhLmdvdi9jaWEvcHVibGljYXRpb25zL2ZhY3Rib29rL2dlb3MvYmUuaHRtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuYmVsIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9CRUwvQkVMXzAuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkJFTCgwKSBOb2RlcyIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3Lmlzby5vcmcvaXNvL2hvbWUuaHRtIiBzcGF0aWFsPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvZ2VvL2NvdW50cnkvQkVML0JFTF8wX01BUC54bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmJlbCIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvQkVML0JFTF8xX2FyZWEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkJFTCAoMSkgYXJlYSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3LmdyaWQudW5lcC5jaC9kYXRhL2RhdGEucGhwP2NhdGVnb3J5PWh1bWFuX3JlbGF0ZWQiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmJlbCIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvQkVML0JFTF8xLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJCRUwoMSkgTm9kZXMiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pc28ub3JnL2lzby9ob21lLmh0bSIgc3BhdGlhbD0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2dlby9jb3VudHJ5L0JFTC9CRUxfMV9NQVAueG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+CisJPCEtLSBFZGdlcyAtLT4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmJlbCIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9jb21tb25ib3JkZXIvQkVMXzFfQkVMXzEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkNvbW1vbiBCb3JkZXIgcmVsYXRpb25zaGlwIHdpdGhpbiBjb3VudHJ5IEJFTCIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgdmFsaWQ9InN0YXJ0PTIwMDYtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuYmVsIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL2NvbW1vbmJvcmRlci9CRUxfMV9ERVVfMS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQ29tbW9uIEJvcmRlciByZWxhdGlvbnNoaXAgYmV0d2VlbiBjb3VudHJ5IEJFTCBhbmQgREVVIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiB2YWxpZD0ic3RhcnQ9MjAwNi0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5iZWwiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvY29tbW9uYm9yZGVyL0JFTF8xX0ZSQV8xLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJDb21tb24gQm9yZGVyIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIGNvdW50cnkgQkVMIGFuZCBGUkEiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHZhbGlkPSJzdGFydD0yMDA2LTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmJlbCIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9jb21tb25ib3JkZXIvQkVMXzFfTFVYXzEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkNvbW1vbiBCb3JkZXIgcmVsYXRpb25zaGlwIGJldHdlZW4gY291bnRyeSBCRUwgYW5kIExVWCIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgdmFsaWQ9InN0YXJ0PTIwMDYtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuYmVsIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL2NvbW1vbmJvcmRlci9CRUxfMV9OTERfMS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQ29tbW9uIEJvcmRlciByZWxhdGlvbnNoaXAgYmV0d2VlbiBjb3VudHJ5IEJFTCBhbmQgTkxEIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiB2YWxpZD0ic3RhcnQ9MjAwNi0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5iZWwiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvcmVsYXRpdmVwaHlzaWNhbC9CRUxfMF9CRUxfMS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iUGh5c2ljYWwgY29udGFpbm1lbnQgb2YgQkVMIGxldmVsICgxKSBieSBCRUwgKDApIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaWJtLmNvbSIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorCis8IS0tIEJFTiAtLT4KKzxzdGVtX2NhdGVnb3J5IGlkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuYmVuIiBuYW1lPSJCRU4iIHBhcmVudF9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzIi8+CisJPCEtLSBOb2RlcyBhbmQgTGFiZWxzIC0tPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuYmVuIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9CRU4vQkVOXzBfYXJlYS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQkVOICgwKSBhcmVhIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHBzOi8vd3d3LmNpYS5nb3YvY2lhL3B1YmxpY2F0aW9ucy9mYWN0Ym9vay9nZW9zL2JuLmh0bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmJlbiIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvQkVOL0JFTl8wLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJCRU4oMCkgTm9kZXMiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pc28ub3JnL2lzby9ob21lLmh0bSIgc3BhdGlhbD0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2dlby9jb3VudHJ5L0JFTi9CRU5fMF9NQVAueG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5iZW4iIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L0JFTi9CRU5fMV9hcmVhLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJCRU4gKDEpIGFyZWEiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cHM6Ly93d3cuY2lhLmdvdi9saWJyYXJ5L3B1YmxpY2F0aW9ucy90aGUtd29ybGQtZmFjdGJvb2svIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5iZW4iIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L0JFTi9CRU5fMS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQkVOKDEpIE5vZGVzIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaXNvLm9yZy9pc28vaG9tZS5odG0iIHNwYXRpYWw9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9nZW8vY291bnRyeS9CRU4vQkVOXzFfTUFQLnhtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuYmVuIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9CRU4vQkVOXzJfYXJlYS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQkVOICgyKSBhcmVhIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHBzOi8vd3d3LmNpYS5nb3YvbGlicmFyeS9wdWJsaWNhdGlvbnMvdGhlLXdvcmxkLWZhY3Rib29rLyIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuYmVuIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9CRU4vQkVOXzIuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkJFTigyKSBOb2RlcyIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3Lmlzby5vcmcvaXNvL2hvbWUuaHRtIiBzcGF0aWFsPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvZ2VvL2NvdW50cnkvQkVOL0JFTl8yX01BUC54bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKwk8IS0tIEVkZ2VzIC0tPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuYmVuIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL2NvbW1vbmJvcmRlci9CRU5fMl9CRU5fMi5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQ29tbW9uIEJvcmRlciByZWxhdGlvbnNoaXAgd2l0aGluIGNvdW50cnkgQkVOIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiB2YWxpZD0ic3RhcnQ9MjAwNi0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5iZW4iIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvY29tbW9uYm9yZGVyL0JFTl8yX0JGQV8yLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJDb21tb24gQm9yZGVyIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIGNvdW50cnkgQkVOIGFuZCBCRkEiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHZhbGlkPSJzdGFydD0yMDA2LTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmJlbiIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9jb21tb25ib3JkZXIvQkVOXzJfTkVSXzIuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkNvbW1vbiBCb3JkZXIgcmVsYXRpb25zaGlwIGJldHdlZW4gY291bnRyeSBCRU4gYW5kIE5FUiIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgdmFsaWQ9InN0YXJ0PTIwMDYtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuYmVuIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL2NvbW1vbmJvcmRlci9CRU5fMl9OR0FfMi5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQ29tbW9uIEJvcmRlciByZWxhdGlvbnNoaXAgYmV0d2VlbiBjb3VudHJ5IEJFTiBhbmQgTkdBIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiB2YWxpZD0ic3RhcnQ9MjAwNi0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5iZW4iIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvY29tbW9uYm9yZGVyL0JFTl8yX1RHT18yLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJDb21tb24gQm9yZGVyIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIGNvdW50cnkgQkVOIGFuZCBUR08iIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHZhbGlkPSJzdGFydD0yMDA2LTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmJlbiIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9yZWxhdGl2ZXBoeXNpY2FsL0JFTl8wX0JFTl8xLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJQaHlzaWNhbCBjb250YWlubWVudCBvZiBCRU4gbGV2ZWwgKDEpIGJ5IEJFTiAoMCkiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pYm0uY29tIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5iZW4iIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvcmVsYXRpdmVwaHlzaWNhbC9CRU5fMV9CRU5fMi5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iUGh5c2ljYWwgY29udGFpbm1lbnQgb2YgQkVOIGxldmVsICgyKSBieSBCRU4gKDEpIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaWJtLmNvbSIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorCis8IS0tIEJGQSAtLT4KKzxzdGVtX2NhdGVnb3J5IGlkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuYmZhIiBuYW1lPSJCRkEiIHBhcmVudF9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzIi8+CisJPCEtLSBOb2RlcyBhbmQgTGFiZWxzIC0tPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuYmZhIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9CRkEvQkZBXzBfYXJlYS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQkZBICgwKSBhcmVhIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHBzOi8vd3d3LmNpYS5nb3YvY2lhL3B1YmxpY2F0aW9ucy9mYWN0Ym9vay9nZW9zL3V2Lmh0bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmJmYSIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvQkZBL0JGQV8wLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJCRkEoMCkgTm9kZXMiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pc28ub3JnL2lzby9ob21lLmh0bSIgc3BhdGlhbD0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2dlby9jb3VudHJ5L0JGQS9CRkFfMF9NQVAueG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5iZmEiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L0JGQS9CRkFfMV9hcmVhLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJCRkEgKDEpIGFyZWEiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cHM6Ly93d3cuY2lhLmdvdi9saWJyYXJ5L3B1YmxpY2F0aW9ucy90aGUtd29ybGQtZmFjdGJvb2svIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5iZmEiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L0JGQS9CRkFfMS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQkZBKDEpIE5vZGVzIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaXNvLm9yZy9pc28vaG9tZS5odG0iIHNwYXRpYWw9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9nZW8vY291bnRyeS9CRkEvQkZBXzFfTUFQLnhtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuYmZhIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9CRkEvQkZBXzJfYXJlYS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQkZBICgyKSBhcmVhIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHBzOi8vd3d3LmNpYS5nb3YvbGlicmFyeS9wdWJsaWNhdGlvbnMvdGhlLXdvcmxkLWZhY3Rib29rLyIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuYmZhIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9CRkEvQkZBXzIuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkJGQSgyKSBOb2RlcyIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3Lmlzby5vcmcvaXNvL2hvbWUuaHRtIiBzcGF0aWFsPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvZ2VvL2NvdW50cnkvQkZBL0JGQV8yX01BUC54bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKwk8IS0tIEVkZ2VzIC0tPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuYmZhIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL2NvbW1vbmJvcmRlci9CRkFfMl9CRkFfMi5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQ29tbW9uIEJvcmRlciByZWxhdGlvbnNoaXAgd2l0aGluIGNvdW50cnkgQkZBIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiB2YWxpZD0ic3RhcnQ9MjAwNi0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5iZmEiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvY29tbW9uYm9yZGVyL0JGQV8yX0NJVl8yLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJDb21tb24gQm9yZGVyIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIGNvdW50cnkgQkZBIGFuZCBDSVYiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHZhbGlkPSJzdGFydD0yMDA2LTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmJmYSIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9jb21tb25ib3JkZXIvQkZBXzJfR0hBXzIuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkNvbW1vbiBCb3JkZXIgcmVsYXRpb25zaGlwIGJldHdlZW4gY291bnRyeSBCRkEgYW5kIEdIQSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgdmFsaWQ9InN0YXJ0PTIwMDYtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuYmZhIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL2NvbW1vbmJvcmRlci9CRkFfMl9NTElfMC5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQ29tbW9uIEJvcmRlciByZWxhdGlvbnNoaXAgYmV0d2VlbiBjb3VudHJ5IEJGQSBhbmQgTUxJIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiB2YWxpZD0ic3RhcnQ9MjAwNi0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5iZmEiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvY29tbW9uYm9yZGVyL0JGQV8yX05FUl8yLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJDb21tb24gQm9yZGVyIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIGNvdW50cnkgQkZBIGFuZCBORVIiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHZhbGlkPSJzdGFydD0yMDA2LTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmJmYSIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9jb21tb25ib3JkZXIvQkZBXzJfVEdPXzIuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkNvbW1vbiBCb3JkZXIgcmVsYXRpb25zaGlwIGJldHdlZW4gY291bnRyeSBCRkEgYW5kIFRHTyIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgdmFsaWQ9InN0YXJ0PTIwMDYtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuYmZhIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL3JlbGF0aXZlcGh5c2ljYWwvQkZBXzBfQkZBXzEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IlBoeXNpY2FsIGNvbnRhaW5tZW50IG9mIEJGQSBsZXZlbCAoMSkgYnkgQkZBICgwKSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3LmlibS5jb20iIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmJmYSIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9yZWxhdGl2ZXBoeXNpY2FsL0JGQV8xX0JGQV8yLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJQaHlzaWNhbCBjb250YWlubWVudCBvZiBCRkEgbGV2ZWwgKDIpIGJ5IEJGQSAoMSkiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pYm0uY29tIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+CisKKzwhLS0gQkdEIC0tPgorPHN0ZW1fY2F0ZWdvcnkgaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5iZ2QiIG5hbWU9IkJHRCIgcGFyZW50X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMiLz4KKwk8IS0tIE5vZGVzIGFuZCBMYWJlbHMgLS0+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5iZ2QiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L0JHRC9CR0RfMF9hcmVhLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJCR0QgKDApIGFyZWEiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cHM6Ly93d3cuY2lhLmdvdi9jaWEvcHVibGljYXRpb25zL2ZhY3Rib29rL2dlb3MvYmcuaHRtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuYmdkIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9CR0QvQkdEXzAuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkJHRCgwKSBOb2RlcyIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3Lmlzby5vcmcvaXNvL2hvbWUuaHRtIiBzcGF0aWFsPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvZ2VvL2NvdW50cnkvQkdEL0JHRF8wX01BUC54bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmJnZCIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvQkdEL0JHRF8xX2FyZWEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkJHRCAoMSkgYXJlYSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwczovL3d3dy5jaWEuZ292L2xpYnJhcnkvcHVibGljYXRpb25zL3RoZS13b3JsZC1mYWN0Ym9vay8iIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmJnZCIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvQkdEL0JHRF8xLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJCR0QoMSkgTm9kZXMiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pc28ub3JnL2lzby9ob21lLmh0bSIgc3BhdGlhbD0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2dlby9jb3VudHJ5L0JHRC9CR0RfMV9NQVAueG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5iZ2QiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L0JHRC9CR0RfMl9hcmVhLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJCR0QgKDIpIGFyZWEiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cHM6Ly93d3cuY2lhLmdvdi9saWJyYXJ5L3B1YmxpY2F0aW9ucy90aGUtd29ybGQtZmFjdGJvb2svIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5iZ2QiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L0JHRC9CR0RfMi5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQkdEKDIpIE5vZGVzIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaXNvLm9yZy9pc28vaG9tZS5odG0iIHNwYXRpYWw9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9nZW8vY291bnRyeS9CR0QvQkdEXzJfTUFQLnhtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorCTwhLS0gRWRnZXMgLS0+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5iZ2QiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvY29tbW9uYm9yZGVyL0JHRF8yX0JHRF8yLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJDb21tb24gQm9yZGVyIHJlbGF0aW9uc2hpcCB3aXRoaW4gY291bnRyeSBCR0QiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHZhbGlkPSJzdGFydD0yMDA2LTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmJnZCIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9jb21tb25ib3JkZXIvQkdEXzJfSU5EXzIuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkNvbW1vbiBCb3JkZXIgcmVsYXRpb25zaGlwIGJldHdlZW4gY291bnRyeSBCR0QgYW5kIElORCIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgdmFsaWQ9InN0YXJ0PTIwMDYtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuYmdkIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL3JlbGF0aXZlcGh5c2ljYWwvQkdEXzBfQkdEXzEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IlBoeXNpY2FsIGNvbnRhaW5tZW50IG9mIEJHRCBsZXZlbCAoMSkgYnkgQkdEICgwKSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3LmlibS5jb20iIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmJnZCIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9yZWxhdGl2ZXBoeXNpY2FsL0JHRF8xX0JHRF8yLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJQaHlzaWNhbCBjb250YWlubWVudCBvZiBCR0QgbGV2ZWwgKDIpIGJ5IEJHRCAoMSkiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pYm0uY29tIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+CisKKzwhLS0gQkdSIC0tPgorPHN0ZW1fY2F0ZWdvcnkgaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5iZ3IiIG5hbWU9IkJHUiIgcGFyZW50X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMiLz4KKwk8IS0tIE5vZGVzIGFuZCBMYWJlbHMgLS0+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5iZ3IiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L0JHUi9CR1JfMF9hcmVhLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJCR1IgKDApIGFyZWEiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cHM6Ly93d3cuY2lhLmdvdi9jaWEvcHVibGljYXRpb25zL2ZhY3Rib29rL2dlb3MvYnUuaHRtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuYmdyIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9CR1IvQkdSXzAuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkJHUigwKSBOb2RlcyIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3Lmlzby5vcmcvaXNvL2hvbWUuaHRtIiBzcGF0aWFsPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvZ2VvL2NvdW50cnkvQkdSL0JHUl8wX01BUC54bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmJnciIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvQkdSL0JHUl8xX2FyZWEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkJHUiAoMSkgYXJlYSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3LmdyaWQudW5lcC5jaC9kYXRhL2RhdGEucGhwP2NhdGVnb3J5PWh1bWFuX3JlbGF0ZWQiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmJnciIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvQkdSL0JHUl8xLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJCR1IoMSkgTm9kZXMiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pc28ub3JnL2lzby9ob21lLmh0bSIgc3BhdGlhbD0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2dlby9jb3VudHJ5L0JHUi9CR1JfMV9NQVAueG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+CisJPCEtLSBFZGdlcyAtLT4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmJnciIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9jb21tb25ib3JkZXIvQkdSXzFfQkdSXzEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkNvbW1vbiBCb3JkZXIgcmVsYXRpb25zaGlwIHdpdGhpbiBjb3VudHJ5IEJHUiIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgdmFsaWQ9InN0YXJ0PTIwMDYtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuYmdyIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL2NvbW1vbmJvcmRlci9CR1JfMV9HUkNfMS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQ29tbW9uIEJvcmRlciByZWxhdGlvbnNoaXAgYmV0d2VlbiBjb3VudHJ5IEJHUiBhbmQgR1JDIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiB2YWxpZD0ic3RhcnQ9MjAwNi0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5iZ3IiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvY29tbW9uYm9yZGVyL0JHUl8xX01LRF8wLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJDb21tb24gQm9yZGVyIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIGNvdW50cnkgQkdSIGFuZCBNS0QiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHZhbGlkPSJzdGFydD0yMDA2LTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmJnciIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9jb21tb25ib3JkZXIvQkdSXzFfTUtEXzIuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkNvbW1vbiBCb3JkZXIgcmVsYXRpb25zaGlwIGJldHdlZW4gY291bnRyeSBCR1IgYW5kIE1LRCIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgdmFsaWQ9InN0YXJ0PTIwMDYtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuYmdyIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL2NvbW1vbmJvcmRlci9CR1JfMV9ST1VfMS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQ29tbW9uIEJvcmRlciByZWxhdGlvbnNoaXAgYmV0d2VlbiBjb3VudHJ5IEJHUiBhbmQgUk9VIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiB2YWxpZD0ic3RhcnQ9MjAwNi0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5iZ3IiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvY29tbW9uYm9yZGVyL0JHUl8xX1NSQl8xLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJDb21tb24gQm9yZGVyIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIGNvdW50cnkgQkdSIGFuZCBTUkIiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHZhbGlkPSJzdGFydD0yMDA2LTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmJnciIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9jb21tb25ib3JkZXIvQkdSXzFfVFVSXzIuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkNvbW1vbiBCb3JkZXIgcmVsYXRpb25zaGlwIGJldHdlZW4gY291bnRyeSBCR1IgYW5kIFRVUiIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgdmFsaWQ9InN0YXJ0PTIwMDYtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuYmdyIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL3JlbGF0aXZlcGh5c2ljYWwvQkdSXzBfQkdSXzEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IlBoeXNpY2FsIGNvbnRhaW5tZW50IG9mIEJHUiBsZXZlbCAoMSkgYnkgQkdSICgwKSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3LmlibS5jb20iIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKworPCEtLSBCSFIgLS0+Cis8c3RlbV9jYXRlZ29yeSBpZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmJociIgbmFtZT0iQkhSIiBwYXJlbnRfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcyIvPgorCTwhLS0gTm9kZXMgYW5kIExhYmVscyAtLT4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmJociIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvQkhSL0JIUl8wX2FyZWEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkJIUiAoMCkgYXJlYSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwczovL3d3dy5jaWEuZ292L2NpYS9wdWJsaWNhdGlvbnMvZmFjdGJvb2svZ2Vvcy9iYS5odG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5iaHIiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L0JIUi9CSFJfMC5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQkhSKDApIE5vZGVzIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaXNvLm9yZy9pc28vaG9tZS5odG0iIHNwYXRpYWw9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9nZW8vY291bnRyeS9CSFIvQkhSXzBfTUFQLnhtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuYmhyIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9CSFIvQkhSXzFfYXJlYS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQkhSICgxKSBhcmVhIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHBzOi8vd3d3LmNpYS5nb3YvbGlicmFyeS9wdWJsaWNhdGlvbnMvdGhlLXdvcmxkLWZhY3Rib29rLyIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuYmhyIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9CSFIvQkhSXzEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkJIUigxKSBOb2RlcyIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3Lmlzby5vcmcvaXNvL2hvbWUuaHRtIiBzcGF0aWFsPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvZ2VvL2NvdW50cnkvQkhSL0JIUl8xX01BUC54bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmJociIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvQkhSL0JIUl8yX2FyZWEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkJIUiAoMikgYXJlYSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwczovL3d3dy5jaWEuZ292L2xpYnJhcnkvcHVibGljYXRpb25zL3RoZS13b3JsZC1mYWN0Ym9vay8iIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmJociIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvQkhSL0JIUl8yLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJCSFIoMikgTm9kZXMiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pc28ub3JnL2lzby9ob21lLmh0bSIgc3BhdGlhbD0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2dlby9jb3VudHJ5L0JIUi9CSFJfMl9NQVAueG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+CisJPCEtLSBFZGdlcyAtLT4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmJociIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9jb21tb25ib3JkZXIvQkhSXzJfQkhSXzIuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkNvbW1vbiBCb3JkZXIgcmVsYXRpb25zaGlwIHdpdGhpbiBjb3VudHJ5IEJIUiIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgdmFsaWQ9InN0YXJ0PTIwMDYtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuYmhyIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL3JlbGF0aXZlcGh5c2ljYWwvQkhSXzBfQkhSXzEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IlBoeXNpY2FsIGNvbnRhaW5tZW50IG9mIEJIUiBsZXZlbCAoMSkgYnkgQkhSICgwKSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3LmlibS5jb20iIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmJociIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9yZWxhdGl2ZXBoeXNpY2FsL0JIUl8xX0JIUl8yLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJQaHlzaWNhbCBjb250YWlubWVudCBvZiBCSFIgbGV2ZWwgKDIpIGJ5IEJIUiAoMSkiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pYm0uY29tIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+CisKKzwhLS0gQkhTIC0tPgorPHN0ZW1fY2F0ZWdvcnkgaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5iaHMiIG5hbWU9IkJIUyIgcGFyZW50X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMiLz4KKwk8IS0tIE5vZGVzIGFuZCBMYWJlbHMgLS0+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5iaHMiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L0JIUy9CSFNfMF9hcmVhLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJCSFMgKDApIGFyZWEiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cHM6Ly93d3cuY2lhLmdvdi9jaWEvcHVibGljYXRpb25zL2ZhY3Rib29rL2dlb3MvYmYuaHRtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuYmhzIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9CSFMvQkhTXzAuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkJIUygwKSBOb2RlcyIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3Lmlzby5vcmcvaXNvL2hvbWUuaHRtIiBzcGF0aWFsPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvZ2VvL2NvdW50cnkvQkhTL0JIU18wX01BUC54bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKworPCEtLSBCSUggLS0+Cis8c3RlbV9jYXRlZ29yeSBpZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmJpaCIgbmFtZT0iQklIIiBwYXJlbnRfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcyIvPgorCTwhLS0gTm9kZXMgYW5kIExhYmVscyAtLT4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmJpaCIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvQklIL0JJSF8wX2FyZWEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkJJSCAoMCkgYXJlYSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwczovL3d3dy5jaWEuZ292L2NpYS9wdWJsaWNhdGlvbnMvZmFjdGJvb2svZ2Vvcy9iay5odG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5iaWgiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L0JJSC9CSUhfMC5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQklIKDApIE5vZGVzIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaXNvLm9yZy9pc28vaG9tZS5odG0iIHNwYXRpYWw9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9nZW8vY291bnRyeS9CSUgvQklIXzBfTUFQLnhtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuYmloIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9CSUgvQklIXzFfYXJlYS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQklIICgxKSBhcmVhIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuZ3JpZC51bmVwLmNoL2RhdGEvZGF0YS5waHA/Y2F0ZWdvcnk9aHVtYW5fcmVsYXRlZCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuYmloIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9CSUgvQklIXzEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkJJSCgxKSBOb2RlcyIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3Lmlzby5vcmcvaXNvL2hvbWUuaHRtIiBzcGF0aWFsPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvZ2VvL2NvdW50cnkvQklIL0JJSF8xX01BUC54bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKwk8IS0tIEVkZ2VzIC0tPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuYmloIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL2NvbW1vbmJvcmRlci9CSUhfMV9CSUhfMS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQ29tbW9uIEJvcmRlciByZWxhdGlvbnNoaXAgd2l0aGluIGNvdW50cnkgQklIIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiB2YWxpZD0ic3RhcnQ9MjAwNi0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5iaWgiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvY29tbW9uYm9yZGVyL0JJSF8xX0hSVl8xLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJDb21tb24gQm9yZGVyIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIGNvdW50cnkgQklIIGFuZCBIUlYiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHZhbGlkPSJzdGFydD0yMDA2LTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmJpaCIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9jb21tb25ib3JkZXIvQklIXzFfU1JCXzEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkNvbW1vbiBCb3JkZXIgcmVsYXRpb25zaGlwIGJldHdlZW4gY291bnRyeSBCSUggYW5kIFNSQiIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgdmFsaWQ9InN0YXJ0PTIwMDYtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuYmloIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL3JlbGF0aXZlcGh5c2ljYWwvQklIXzBfQklIXzEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IlBoeXNpY2FsIGNvbnRhaW5tZW50IG9mIEJJSCBsZXZlbCAoMSkgYnkgQklIICgwKSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3LmlibS5jb20iIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKworPCEtLSBCTFIgLS0+Cis8c3RlbV9jYXRlZ29yeSBpZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmJsciIgbmFtZT0iQkxSIiBwYXJlbnRfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcyIvPgorCTwhLS0gTm9kZXMgYW5kIExhYmVscyAtLT4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmJsciIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvQkxSL0JMUl8wX2FyZWEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkJMUiAoMCkgYXJlYSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwczovL3d3dy5jaWEuZ292L2NpYS9wdWJsaWNhdGlvbnMvZmFjdGJvb2svZ2Vvcy9iby5odG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5ibHIiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L0JMUi9CTFJfMC5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQkxSKDApIE5vZGVzIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaXNvLm9yZy9pc28vaG9tZS5odG0iIHNwYXRpYWw9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9nZW8vY291bnRyeS9CTFIvQkxSXzBfTUFQLnhtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorCTwhLS0gRWRnZXMgLS0+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5ibHIiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvY29tbW9uYm9yZGVyL0JMUl8wX0xUVV8wLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJDb21tb24gQm9yZGVyIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIGNvdW50cnkgQkxSIGFuZCBMVFUiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHZhbGlkPSJzdGFydD0yMDA2LTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmJsciIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9jb21tb25ib3JkZXIvQkxSXzBfTFZBXzAuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkNvbW1vbiBCb3JkZXIgcmVsYXRpb25zaGlwIGJldHdlZW4gY291bnRyeSBCTFIgYW5kIExWQSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgdmFsaWQ9InN0YXJ0PTIwMDYtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuYmxyIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL2NvbW1vbmJvcmRlci9CTFJfMF9QT0xfMS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQ29tbW9uIEJvcmRlciByZWxhdGlvbnNoaXAgYmV0d2VlbiBjb3VudHJ5IEJMUiBhbmQgUE9MIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiB2YWxpZD0ic3RhcnQ9MjAwNi0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5ibHIiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvY29tbW9uYm9yZGVyL0JMUl8wX1JVU18xLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJDb21tb24gQm9yZGVyIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIGNvdW50cnkgQkxSIGFuZCBSVVMiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHZhbGlkPSJzdGFydD0yMDA2LTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmJsciIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9jb21tb25ib3JkZXIvQkxSXzBfVUtSXzAuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkNvbW1vbiBCb3JkZXIgYmV0d2VlbiBjb3VudHJ5IEJMUiBhbmQgVUtSIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiB2YWxpZD0ic3RhcnQ9MjAwMS0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5ibHIiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvY29tbW9uYm9yZGVyL0JMUl8wX1VLUl8xLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJDb21tb24gQm9yZGVyIGJldHdlZW4gY291bnRyeSBCTFIgYW5kIFVLUiIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgdmFsaWQ9InN0YXJ0PTIwMDEtMDEtMDE7IiAvPgorCis8IS0tIEJMWiAtLT4KKzxzdGVtX2NhdGVnb3J5IGlkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuYmx6IiBuYW1lPSJCTFoiIHBhcmVudF9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzIi8+CisJPCEtLSBOb2RlcyBhbmQgTGFiZWxzIC0tPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuYmx6IiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9CTFovQkxaXzBfYXJlYS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQkxaICgwKSBhcmVhIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHBzOi8vd3d3LmNpYS5nb3YvY2lhL3B1YmxpY2F0aW9ucy9mYWN0Ym9vay9nZW9zL2JoLmh0bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmJseiIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvQkxaL0JMWl8wLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJCTFooMCkgTm9kZXMiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pc28ub3JnL2lzby9ob21lLmh0bSIgc3BhdGlhbD0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2dlby9jb3VudHJ5L0JMWi9CTFpfMF9NQVAueG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+CisJPCEtLSBFZGdlcyAtLT4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmJseiIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9jb21tb25ib3JkZXIvQkxaXzBfR1RNXzAuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkNvbW1vbiBCb3JkZXIgcmVsYXRpb25zaGlwIGJldHdlZW4gY291bnRyeSBCTFogYW5kIEdUTSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgdmFsaWQ9InN0YXJ0PTIwMDYtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuYmx6IiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL2NvbW1vbmJvcmRlci9CTFpfMF9NRVhfMS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQ29tbW9uIEJvcmRlciByZWxhdGlvbnNoaXAgYmV0d2VlbiBjb3VudHJ5IEJMWiBhbmQgTUVYIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiB2YWxpZD0ic3RhcnQ9MjAwNi0wMS0wMTsiIC8+CisKKzwhLS0gQk1VIC0tPgorPHN0ZW1fY2F0ZWdvcnkgaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5ibXUiIG5hbWU9IkJNVSIgcGFyZW50X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMiLz4KKwk8IS0tIE5vZGVzIGFuZCBMYWJlbHMgLS0+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5ibXUiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L0JNVS9CTVVfMF9hcmVhLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJCTVUgKDApIGFyZWEiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cHM6Ly93d3cuY2lhLmdvdi9jaWEvcHVibGljYXRpb25zL2ZhY3Rib29rL2dlb3MvYmQuaHRtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuYm11IiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9CTVUvQk1VXzAuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkJNVSgwKSBOb2RlcyIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3Lmlzby5vcmcvaXNvL2hvbWUuaHRtIiBzcGF0aWFsPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvZ2VvL2NvdW50cnkvQk1VL0JNVV8wX01BUC54bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKworPCEtLSBCT0wgLS0+Cis8c3RlbV9jYXRlZ29yeSBpZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmJvbCIgbmFtZT0iQk9MIiBwYXJlbnRfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcyIvPgorCTwhLS0gTm9kZXMgYW5kIExhYmVscyAtLT4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmJvbCIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvQk9ML0JPTF8wX2FyZWEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkJPTCAoMCkgYXJlYSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwczovL3d3dy5jaWEuZ292L2NpYS9wdWJsaWNhdGlvbnMvZmFjdGJvb2svZ2Vvcy9ibC5odG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5ib2wiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L0JPTC9CT0xfMC5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQk9MKDApIE5vZGVzIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaXNvLm9yZy9pc28vaG9tZS5odG0iIHNwYXRpYWw9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9nZW8vY291bnRyeS9CT0wvQk9MXzBfTUFQLnhtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuYm9sIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9CT0wvQk9MXzFfYXJlYS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQk9MICgxKSBhcmVhIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHBzOi8vd3d3LmNpYS5nb3YvbGlicmFyeS9wdWJsaWNhdGlvbnMvdGhlLXdvcmxkLWZhY3Rib29rLyIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuYm9sIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9CT0wvQk9MXzEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkJPTCgxKSBOb2RlcyIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3Lmlzby5vcmcvaXNvL2hvbWUuaHRtIiBzcGF0aWFsPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvZ2VvL2NvdW50cnkvQk9ML0JPTF8xX01BUC54bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmJvbCIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvQk9ML0JPTF8yX2FyZWEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkJPTCAoMikgYXJlYSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwczovL3d3dy5jaWEuZ292L2xpYnJhcnkvcHVibGljYXRpb25zL3RoZS13b3JsZC1mYWN0Ym9vay8iIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmJvbCIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvQk9ML0JPTF8yLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJCT0woMikgTm9kZXMiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pc28ub3JnL2lzby9ob21lLmh0bSIgc3BhdGlhbD0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2dlby9jb3VudHJ5L0JPTC9CT0xfMl9NQVAueG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+CisJPCEtLSBFZGdlcyAtLT4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmJvbCIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9jb21tb25ib3JkZXIvQk9MXzJfQk9MXzIuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkNvbW1vbiBCb3JkZXIgcmVsYXRpb25zaGlwIHdpdGhpbiBjb3VudHJ5IEJPTCIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgdmFsaWQ9InN0YXJ0PTIwMDYtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuYm9sIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL2NvbW1vbmJvcmRlci9CT0xfMl9CUkFfMi5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQ29tbW9uIEJvcmRlciByZWxhdGlvbnNoaXAgYmV0d2VlbiBjb3VudHJ5IEJPTCBhbmQgQlJBIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiB2YWxpZD0ic3RhcnQ9MjAwNi0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5ib2wiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvY29tbW9uYm9yZGVyL0JPTF8yX0NITF8yLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJDb21tb24gQm9yZGVyIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIGNvdW50cnkgQk9MIGFuZCBDSEwiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHZhbGlkPSJzdGFydD0yMDA2LTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmJvbCIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9jb21tb25ib3JkZXIvQk9MXzJfUEVSXzIuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkNvbW1vbiBCb3JkZXIgcmVsYXRpb25zaGlwIGJldHdlZW4gY291bnRyeSBCT0wgYW5kIFBFUiIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgdmFsaWQ9InN0YXJ0PTIwMDYtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuYm9sIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL2NvbW1vbmJvcmRlci9CT0xfMl9QUllfMi5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQ29tbW9uIEJvcmRlciByZWxhdGlvbnNoaXAgYmV0d2VlbiBjb3VudHJ5IEJPTCBhbmQgUFJZIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiB2YWxpZD0ic3RhcnQ9MjAwNi0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5ib2wiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvcmVsYXRpdmVwaHlzaWNhbC9CT0xfMF9CT0xfMS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iUGh5c2ljYWwgY29udGFpbm1lbnQgb2YgQk9MIGxldmVsICgxKSBieSBCT0wgKDApIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaWJtLmNvbSIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuYm9sIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL3JlbGF0aXZlcGh5c2ljYWwvQk9MXzFfQk9MXzIuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IlBoeXNpY2FsIGNvbnRhaW5tZW50IG9mIEJPTCBsZXZlbCAoMikgYnkgQk9MICgxKSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3LmlibS5jb20iIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKworPCEtLSBCUkEgLS0+Cis8c3RlbV9jYXRlZ29yeSBpZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmJyYSIgbmFtZT0iQlJBIiBwYXJlbnRfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcyIvPgorCTwhLS0gTm9kZXMgYW5kIExhYmVscyAtLT4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmJyYSIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvQlJBL0JSQV8wX2FyZWEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkJSQSAoMCkgYXJlYSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwczovL3d3dy5jaWEuZ292L2NpYS9wdWJsaWNhdGlvbnMvZmFjdGJvb2svZ2Vvcy9ici5odG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5icmEiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L0JSQS9CUkFfMC5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQlJBKDApIE5vZGVzIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaXNvLm9yZy9pc28vaG9tZS5odG0iIHNwYXRpYWw9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9nZW8vY291bnRyeS9CUkEvQlJBXzBfTUFQLnhtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuYnJhIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9CUkEvQlJBXzFfYXJlYS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQlJBICgxKSBhcmVhIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHBzOi8vd3d3LmNpYS5nb3YvbGlicmFyeS9wdWJsaWNhdGlvbnMvdGhlLXdvcmxkLWZhY3Rib29rLyIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuYnJhIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9CUkEvQlJBXzEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkJSQSgxKSBOb2RlcyIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3Lmlzby5vcmcvaXNvL2hvbWUuaHRtIiBzcGF0aWFsPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvZ2VvL2NvdW50cnkvQlJBL0JSQV8xX01BUC54bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmJyYSIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvQlJBL0JSQV8yX2FyZWEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkJSQSAoMikgYXJlYSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwczovL3d3dy5jaWEuZ292L2xpYnJhcnkvcHVibGljYXRpb25zL3RoZS13b3JsZC1mYWN0Ym9vay8iIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmJyYSIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvQlJBL0JSQV8yLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJCUkEoMikgTm9kZXMiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pc28ub3JnL2lzby9ob21lLmh0bSIgc3BhdGlhbD0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2dlby9jb3VudHJ5L0JSQS9CUkFfMl9NQVAueG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+CisJPCEtLSBFZGdlcyAtLT4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmJyYSIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9jb21tb25ib3JkZXIvQlJBXzJfQlJBXzIuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkNvbW1vbiBCb3JkZXIgcmVsYXRpb25zaGlwIHdpdGhpbiBjb3VudHJ5IEJSQSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgdmFsaWQ9InN0YXJ0PTIwMDYtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuYnJhIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL2NvbW1vbmJvcmRlci9CUkFfMl9DT0xfMi5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQ29tbW9uIEJvcmRlciByZWxhdGlvbnNoaXAgYmV0d2VlbiBjb3VudHJ5IEJSQSBhbmQgQ09MIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiB2YWxpZD0ic3RhcnQ9MjAwNi0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5icmEiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvY29tbW9uYm9yZGVyL0JSQV8yX0dVRl8wLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJDb21tb24gQm9yZGVyIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIGNvdW50cnkgQlJBIGFuZCBHVUYiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHZhbGlkPSJzdGFydD0yMDA2LTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmJyYSIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9jb21tb25ib3JkZXIvQlJBXzJfR1VZXzIuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkNvbW1vbiBCb3JkZXIgcmVsYXRpb25zaGlwIGJldHdlZW4gY291bnRyeSBCUkEgYW5kIEdVWSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgdmFsaWQ9InN0YXJ0PTIwMDYtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuYnJhIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL2NvbW1vbmJvcmRlci9CUkFfMl9QRVJfMi5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQ29tbW9uIEJvcmRlciByZWxhdGlvbnNoaXAgYmV0d2VlbiBjb3VudHJ5IEJSQSBhbmQgUEVSIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiB2YWxpZD0ic3RhcnQ9MjAwNi0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5icmEiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvY29tbW9uYm9yZGVyL0JSQV8yX1BSWV8yLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJDb21tb24gQm9yZGVyIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIGNvdW50cnkgQlJBIGFuZCBQUlkiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHZhbGlkPSJzdGFydD0yMDA2LTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmJyYSIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9jb21tb25ib3JkZXIvQlJBXzJfU1VSXzIuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkNvbW1vbiBCb3JkZXIgcmVsYXRpb25zaGlwIGJldHdlZW4gY291bnRyeSBCUkEgYW5kIFNVUiIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgdmFsaWQ9InN0YXJ0PTIwMDYtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuYnJhIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL2NvbW1vbmJvcmRlci9CUkFfMl9VUllfMi5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQ29tbW9uIEJvcmRlciByZWxhdGlvbnNoaXAgYmV0d2VlbiBjb3VudHJ5IEJSQSBhbmQgVVJZIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiB2YWxpZD0ic3RhcnQ9MjAwNi0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5icmEiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvY29tbW9uYm9yZGVyL0JSQV8yX1ZFTl8yLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJDb21tb24gQm9yZGVyIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIGNvdW50cnkgQlJBIGFuZCBWRU4iIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHZhbGlkPSJzdGFydD0yMDA2LTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmJyYSIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9yZWxhdGl2ZXBoeXNpY2FsL0JSQV8wX0JSQV8xLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJQaHlzaWNhbCBjb250YWlubWVudCBvZiBCUkEgbGV2ZWwgKDEpIGJ5IEJSQSAoMCkiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pYm0uY29tIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5icmEiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvcmVsYXRpdmVwaHlzaWNhbC9CUkFfMV9CUkFfMi5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iUGh5c2ljYWwgY29udGFpbm1lbnQgb2YgQlJBIGxldmVsICgyKSBieSBCUkEgKDEpIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaWJtLmNvbSIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorCis8IS0tIEJSQiAtLT4KKzxzdGVtX2NhdGVnb3J5IGlkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuYnJiIiBuYW1lPSJCUkIiIHBhcmVudF9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzIi8+CisJPCEtLSBOb2RlcyBhbmQgTGFiZWxzIC0tPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuYnJiIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9CUkIvQlJCXzBfYXJlYS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQlJCICgwKSBhcmVhIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHBzOi8vd3d3LmNpYS5nb3YvY2lhL3B1YmxpY2F0aW9ucy9mYWN0Ym9vay9nZW9zL2JiLmh0bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmJyYiIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvQlJCL0JSQl8wLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJCUkIoMCkgTm9kZXMiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pc28ub3JnL2lzby9ob21lLmh0bSIgc3BhdGlhbD0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2dlby9jb3VudHJ5L0JSQi9CUkJfMF9NQVAueG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+CisKKzwhLS0gQlJOIC0tPgorPHN0ZW1fY2F0ZWdvcnkgaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5icm4iIG5hbWU9IkJSTiIgcGFyZW50X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMiLz4KKwk8IS0tIE5vZGVzIGFuZCBMYWJlbHMgLS0+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5icm4iIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L0JSTi9CUk5fMF9hcmVhLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJCUk4gKDApIGFyZWEiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cHM6Ly93d3cuY2lhLmdvdi9jaWEvcHVibGljYXRpb25zL2ZhY3Rib29rL2dlb3MvYnguaHRtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuYnJuIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9CUk4vQlJOXzAuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkJSTigwKSBOb2RlcyIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3Lmlzby5vcmcvaXNvL2hvbWUuaHRtIiBzcGF0aWFsPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvZ2VvL2NvdW50cnkvQlJOL0JSTl8wX01BUC54bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmJybiIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvQlJOL0JSTl8xX2FyZWEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkJSTiAoMSkgYXJlYSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwczovL3d3dy5jaWEuZ292L2xpYnJhcnkvcHVibGljYXRpb25zL3RoZS13b3JsZC1mYWN0Ym9vay8iIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmJybiIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvQlJOL0JSTl8xLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJCUk4oMSkgTm9kZXMiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pc28ub3JnL2lzby9ob21lLmh0bSIgc3BhdGlhbD0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2dlby9jb3VudHJ5L0JSTi9CUk5fMV9NQVAueG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5icm4iIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L0JSTi9CUk5fMl9hcmVhLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJCUk4gKDIpIGFyZWEiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cHM6Ly93d3cuY2lhLmdvdi9saWJyYXJ5L3B1YmxpY2F0aW9ucy90aGUtd29ybGQtZmFjdGJvb2svIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5icm4iIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L0JSTi9CUk5fMi5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQlJOKDIpIE5vZGVzIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaXNvLm9yZy9pc28vaG9tZS5odG0iIHNwYXRpYWw9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9nZW8vY291bnRyeS9CUk4vQlJOXzJfTUFQLnhtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorCTwhLS0gRWRnZXMgLS0+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5icm4iIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvY29tbW9uYm9yZGVyL0JSTl8yX0JSTl8yLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJDb21tb24gQm9yZGVyIHJlbGF0aW9uc2hpcCB3aXRoaW4gY291bnRyeSBCUk4iIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHZhbGlkPSJzdGFydD0yMDA2LTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmJybiIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9jb21tb25ib3JkZXIvQlJOXzJfTVlTXzAuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkNvbW1vbiBCb3JkZXIgcmVsYXRpb25zaGlwIGJldHdlZW4gY291bnRyeSBCUk4gYW5kIE1ZUyIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgdmFsaWQ9InN0YXJ0PTIwMDYtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuYnJuIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL3JlbGF0aXZlcGh5c2ljYWwvQlJOXzBfQlJOXzEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IlBoeXNpY2FsIGNvbnRhaW5tZW50IG9mIEJSTiBsZXZlbCAoMSkgYnkgQlJOICgwKSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3LmlibS5jb20iIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmJybiIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9yZWxhdGl2ZXBoeXNpY2FsL0JSTl8xX0JSTl8yLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJQaHlzaWNhbCBjb250YWlubWVudCBvZiBCUk4gbGV2ZWwgKDIpIGJ5IEJSTiAoMSkiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pYm0uY29tIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+CisKKzwhLS0gQlROIC0tPgorPHN0ZW1fY2F0ZWdvcnkgaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5idG4iIG5hbWU9IkJUTiIgcGFyZW50X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMiLz4KKwk8IS0tIE5vZGVzIGFuZCBMYWJlbHMgLS0+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5idG4iIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L0JUTi9CVE5fMF9hcmVhLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJCVE4gKDApIGFyZWEiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cHM6Ly93d3cuY2lhLmdvdi9jaWEvcHVibGljYXRpb25zL2ZhY3Rib29rL2dlb3MvYnQuaHRtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuYnRuIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9CVE4vQlROXzAuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkJUTigwKSBOb2RlcyIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3Lmlzby5vcmcvaXNvL2hvbWUuaHRtIiBzcGF0aWFsPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvZ2VvL2NvdW50cnkvQlROL0JUTl8wX01BUC54bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmJ0biIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvQlROL0JUTl8xX2FyZWEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkJUTiAoMSkgYXJlYSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwczovL3d3dy5jaWEuZ292L2xpYnJhcnkvcHVibGljYXRpb25zL3RoZS13b3JsZC1mYWN0Ym9vay8iIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmJ0biIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvQlROL0JUTl8xLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJCVE4oMSkgTm9kZXMiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pc28ub3JnL2lzby9ob21lLmh0bSIgc3BhdGlhbD0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2dlby9jb3VudHJ5L0JUTi9CVE5fMV9NQVAueG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5idG4iIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L0JUTi9CVE5fMl9hcmVhLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJCVE4gKDIpIGFyZWEiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cHM6Ly93d3cuY2lhLmdvdi9saWJyYXJ5L3B1YmxpY2F0aW9ucy90aGUtd29ybGQtZmFjdGJvb2svIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5idG4iIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L0JUTi9CVE5fMi5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQlROKDIpIE5vZGVzIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaXNvLm9yZy9pc28vaG9tZS5odG0iIHNwYXRpYWw9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9nZW8vY291bnRyeS9CVE4vQlROXzJfTUFQLnhtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorCTwhLS0gRWRnZXMgLS0+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5idG4iIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvY29tbW9uYm9yZGVyL0JUTl8yX0JUTl8yLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJDb21tb24gQm9yZGVyIHJlbGF0aW9uc2hpcCB3aXRoaW4gY291bnRyeSBCVE4iIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHZhbGlkPSJzdGFydD0yMDA2LTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmJ0biIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9jb21tb25ib3JkZXIvQlROXzJfQ0hOXzIuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkNvbW1vbiBCb3JkZXIgcmVsYXRpb25zaGlwIGJldHdlZW4gY291bnRyeSBCVE4gYW5kIENITiIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgdmFsaWQ9InN0YXJ0PTIwMDYtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuYnRuIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL2NvbW1vbmJvcmRlci9CVE5fMl9JTkRfMi5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQ29tbW9uIEJvcmRlciByZWxhdGlvbnNoaXAgYmV0d2VlbiBjb3VudHJ5IEJUTiBhbmQgSU5EIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiB2YWxpZD0ic3RhcnQ9MjAwNi0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5idG4iIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvcmVsYXRpdmVwaHlzaWNhbC9CVE5fMF9CVE5fMS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iUGh5c2ljYWwgY29udGFpbm1lbnQgb2YgQlROIGxldmVsICgxKSBieSBCVE4gKDApIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaWJtLmNvbSIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuYnRuIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL3JlbGF0aXZlcGh5c2ljYWwvQlROXzFfQlROXzIuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IlBoeXNpY2FsIGNvbnRhaW5tZW50IG9mIEJUTiBsZXZlbCAoMikgYnkgQlROICgxKSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3LmlibS5jb20iIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKworPCEtLSBCVlQgLS0+Cis8c3RlbV9jYXRlZ29yeSBpZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmJ2dCIgbmFtZT0iQlZUIiBwYXJlbnRfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcyIvPgorCTwhLS0gTm9kZXMgYW5kIExhYmVscyAtLT4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmJ2dCIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvQlZUL0JWVF8wX2FyZWEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkJWVCAoMCkgYXJlYSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwczovL3d3dy5jaWEuZ292L2NpYS9wdWJsaWNhdGlvbnMvZmFjdGJvb2svZ2Vvcy9idi5odG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5idnQiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L0JWVC9CVlRfMC5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQlZUKDApIE5vZGVzIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaXNvLm9yZy9pc28vaG9tZS5odG0iIHNwYXRpYWw9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9nZW8vY291bnRyeS9CVlQvQlZUXzBfTUFQLnhtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorCTwhLS0gRWRnZXMgLS0+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5idnQiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvcmVsYXRpdmVwaHlzaWNhbC9CVlRfMF9CVlRfMS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iUGh5c2ljYWwgY29udGFpbm1lbnQgb2YgQlZUIGxldmVsICgxKSBieSBCVlQgKDApIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaWJtLmNvbSIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorCis8IS0tIEJXQSAtLT4KKzxzdGVtX2NhdGVnb3J5IGlkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuYndhIiBuYW1lPSJCV0EiIHBhcmVudF9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzIi8+CisJPCEtLSBOb2RlcyBhbmQgTGFiZWxzIC0tPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuYndhIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9CV0EvQldBXzBfYXJlYS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQldBICgwKSBhcmVhIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHBzOi8vd3d3LmNpYS5nb3YvY2lhL3B1YmxpY2F0aW9ucy9mYWN0Ym9vay9nZW9zL2JjLmh0bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmJ3YSIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvQldBL0JXQV8wLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJCV0EoMCkgTm9kZXMiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pc28ub3JnL2lzby9ob21lLmh0bSIgc3BhdGlhbD0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2dlby9jb3VudHJ5L0JXQS9CV0FfMF9NQVAueG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+CisJPCEtLSBFZGdlcyAtLT4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmJ3YSIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9jb21tb25ib3JkZXIvQldBXzBfTkFNXzIuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkNvbW1vbiBCb3JkZXIgcmVsYXRpb25zaGlwIGJldHdlZW4gY291bnRyeSBCV0EgYW5kIE5BTSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgdmFsaWQ9InN0YXJ0PTIwMDYtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuYndhIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL2NvbW1vbmJvcmRlci9CV0FfMF9aQUZfMi5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQ29tbW9uIEJvcmRlciByZWxhdGlvbnNoaXAgYmV0d2VlbiBjb3VudHJ5IEJXQSBhbmQgWkFGIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiB2YWxpZD0ic3RhcnQ9MjAwNi0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5id2EiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvY29tbW9uYm9yZGVyL0JXQV8wX1pNQl8yLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJDb21tb24gQm9yZGVyIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIGNvdW50cnkgQldBIGFuZCBaTUIiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHZhbGlkPSJzdGFydD0yMDA2LTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmJ3YSIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9jb21tb25ib3JkZXIvQldBXzBfWldFXzAuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkNvbW1vbiBCb3JkZXIgcmVsYXRpb25zaGlwIGJldHdlZW4gY291bnRyeSBCV0EgYW5kIFpXRSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgdmFsaWQ9InN0YXJ0PTIwMDYtMDEtMDE7IiAvPgorCis8IS0tIENBRiAtLT4KKzxzdGVtX2NhdGVnb3J5IGlkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuY2FmIiBuYW1lPSJDQUYiIHBhcmVudF9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzIi8+CisJPCEtLSBOb2RlcyBhbmQgTGFiZWxzIC0tPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuY2FmIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9DQUYvQ0FGXzBfYXJlYS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQ0FGICgwKSBhcmVhIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHBzOi8vd3d3LmNpYS5nb3YvY2lhL3B1YmxpY2F0aW9ucy9mYWN0Ym9vay9nZW9zL2N0Lmh0bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmNhZiIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvQ0FGL0NBRl8wLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJDQUYoMCkgTm9kZXMiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pc28ub3JnL2lzby9ob21lLmh0bSIgc3BhdGlhbD0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2dlby9jb3VudHJ5L0NBRi9DQUZfMF9NQVAueG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5jYWYiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L0NBRi9DQUZfMV9hcmVhLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJDQUYgKDEpIGFyZWEiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cHM6Ly93d3cuY2lhLmdvdi9saWJyYXJ5L3B1YmxpY2F0aW9ucy90aGUtd29ybGQtZmFjdGJvb2svIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5jYWYiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L0NBRi9DQUZfMS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQ0FGKDEpIE5vZGVzIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaXNvLm9yZy9pc28vaG9tZS5odG0iIHNwYXRpYWw9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9nZW8vY291bnRyeS9DQUYvQ0FGXzFfTUFQLnhtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuY2FmIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9DQUYvQ0FGXzJfYXJlYS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQ0FGICgyKSBhcmVhIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHBzOi8vd3d3LmNpYS5nb3YvbGlicmFyeS9wdWJsaWNhdGlvbnMvdGhlLXdvcmxkLWZhY3Rib29rLyIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuY2FmIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9DQUYvQ0FGXzIuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkNBRigyKSBOb2RlcyIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3Lmlzby5vcmcvaXNvL2hvbWUuaHRtIiBzcGF0aWFsPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvZ2VvL2NvdW50cnkvQ0FGL0NBRl8yX01BUC54bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKwk8IS0tIEVkZ2VzIC0tPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuY2FmIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL2NvbW1vbmJvcmRlci9DQUZfMl9DQUZfMi5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQ29tbW9uIEJvcmRlciByZWxhdGlvbnNoaXAgd2l0aGluIGNvdW50cnkgQ0FGIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiB2YWxpZD0ic3RhcnQ9MjAwNi0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5jYWYiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvY29tbW9uYm9yZGVyL0NBRl8yX0NNUl8wLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJDb21tb24gQm9yZGVyIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIGNvdW50cnkgQ0FGIGFuZCBDTVIiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHZhbGlkPSJzdGFydD0yMDA2LTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmNhZiIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9jb21tb25ib3JkZXIvQ0FGXzJfQ09EXzAuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkNvbW1vbiBCb3JkZXIgcmVsYXRpb25zaGlwIGJldHdlZW4gY291bnRyeSBDQUYgYW5kIENPRCIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgdmFsaWQ9InN0YXJ0PTIwMDYtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuY2FmIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL2NvbW1vbmJvcmRlci9DQUZfMl9DT0dfMi5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQ29tbW9uIEJvcmRlciByZWxhdGlvbnNoaXAgYmV0d2VlbiBjb3VudHJ5IENBRiBhbmQgQ09HIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiB2YWxpZD0ic3RhcnQ9MjAwNi0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5jYWYiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvY29tbW9uYm9yZGVyL0NBRl8yX1NETl8yLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJDb21tb24gQm9yZGVyIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIGNvdW50cnkgQ0FGIGFuZCBTRE4iIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHZhbGlkPSJzdGFydD0yMDA2LTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmNhZiIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9jb21tb25ib3JkZXIvQ0FGXzJfVENEXzIuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkNvbW1vbiBCb3JkZXIgcmVsYXRpb25zaGlwIGJldHdlZW4gY291bnRyeSBDQUYgYW5kIFRDRCIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgdmFsaWQ9InN0YXJ0PTIwMDYtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuY2FmIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL3JlbGF0aXZlcGh5c2ljYWwvQ0FGXzBfQ0FGXzEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IlBoeXNpY2FsIGNvbnRhaW5tZW50IG9mIENBRiBsZXZlbCAoMSkgYnkgQ0FGICgwKSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3LmlibS5jb20iIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmNhZiIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9yZWxhdGl2ZXBoeXNpY2FsL0NBRl8xX0NBRl8yLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJQaHlzaWNhbCBjb250YWlubWVudCBvZiBDQUYgbGV2ZWwgKDIpIGJ5IENBRiAoMSkiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pYm0uY29tIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+CisKKzwhLS0gQ0FOIC0tPgorPHN0ZW1fY2F0ZWdvcnkgaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5jYW4iIG5hbWU9IkNBTiIgcGFyZW50X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMiLz4KKwk8IS0tIE5vZGVzIGFuZCBMYWJlbHMgLS0+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5jYW4iIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L0NBTi9DQU5fMF9hcmVhLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJDQU4gKDApIGFyZWEiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cHM6Ly93d3cuY2lhLmdvdi9jaWEvcHVibGljYXRpb25zL2ZhY3Rib29rL2dlb3MvY2EuaHRtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuY2FuIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9DQU4vQ0FOXzAuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkNBTigwKSBOb2RlcyIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3Lmlzby5vcmcvaXNvL2hvbWUuaHRtIiBzcGF0aWFsPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvZ2VvL2NvdW50cnkvQ0FOL0NBTl8wX01BUC54bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmNhbiIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvQ0FOL0NBTl8xX2FyZWEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkNBTiAoMSkgYXJlYSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwczovL3d3dy5jaWEuZ292L2xpYnJhcnkvcHVibGljYXRpb25zL3RoZS13b3JsZC1mYWN0Ym9vay8iIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmNhbiIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvQ0FOL0NBTl8xLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJDQU4oMSkgTm9kZXMiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNwYXRpYWw9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9nZW8vY291bnRyeS9DQU4vQ0FOXzFfTUFQLnhtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorCTwhLS0gRWRnZXMgLS0+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5jYW4iIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvY29tbW9uYm9yZGVyL0NBTl8xX0NBTl8xLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJDb21tb24gQm9yZGVyIHJlbGF0aW9uc2hpcCB3aXRoaW4gY291bnRyeSBDQU4iIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHZhbGlkPSJzdGFydD0yMDA2LTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmNhbiIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9jb21tb25ib3JkZXIvQ0FOXzFfVVNBXzIuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkNvbW1vbiBCb3JkZXIgcmVsYXRpb25zaGlwIGJldHdlZW4gY291bnRyeSBDQU4gYW5kIFVTQSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgdmFsaWQ9InN0YXJ0PTIwMDYtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuY2FuIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL3JlbGF0aXZlcGh5c2ljYWwvQ0FOXzBfQ0FOXzEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IlBoeXNpY2FsIGNvbnRhaW5tZW50IG9mIENBTiBsZXZlbCAoMSkgYnkgQ0FOICgwKSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3LmlibS5jb20iIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKworPCEtLSBDQ0sgLS0+Cis8c3RlbV9jYXRlZ29yeSBpZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmNjayIgbmFtZT0iQ0NLIiBwYXJlbnRfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcyIvPgorCTwhLS0gTm9kZXMgYW5kIExhYmVscyAtLT4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmNjayIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvQ0NLL0NDS18wX2FyZWEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkNDSyAoMCkgYXJlYSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwczovL3d3dy5jaWEuZ292L2NpYS9wdWJsaWNhdGlvbnMvZmFjdGJvb2svZ2Vvcy9jay5odG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5jY2siIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L0NDSy9DQ0tfMC5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQ0NLKDApIE5vZGVzIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaXNvLm9yZy9pc28vaG9tZS5odG0iIHNwYXRpYWw9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9nZW8vY291bnRyeS9DQ0svQ0NLXzBfTUFQLnhtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorCis8IS0tIENIRSAtLT4KKzxzdGVtX2NhdGVnb3J5IGlkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuY2hlIiBuYW1lPSJDSEUiIHBhcmVudF9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzIi8+CisJPCEtLSBOb2RlcyBhbmQgTGFiZWxzIC0tPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuY2hlIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9DSEUvQ0hFXzBfYXJlYS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQ0hFICgwKSBhcmVhIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHBzOi8vd3d3LmNpYS5nb3YvY2lhL3B1YmxpY2F0aW9ucy9mYWN0Ym9vay9nZW9zL3N6Lmh0bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmNoZSIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvQ0hFL0NIRV8wLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJDSEUoMCkgTm9kZXMiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pc28ub3JnL2lzby9ob21lLmh0bSIgc3BhdGlhbD0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2dlby9jb3VudHJ5L0NIRS9DSEVfMF9NQVAueG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5jaGUiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L0NIRS9DSEVfMV9hcmVhLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJDSEUgKDEpIGFyZWEiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5ncmlkLnVuZXAuY2gvZGF0YS9kYXRhLnBocD9jYXRlZ29yeT1odW1hbl9yZWxhdGVkIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5jaGUiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L0NIRS9DSEVfMS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQ0hFKDEpIE5vZGVzIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaXNvLm9yZy9pc28vaG9tZS5odG0iIHNwYXRpYWw9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9nZW8vY291bnRyeS9DSEUvQ0hFXzFfTUFQLnhtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorCTwhLS0gRWRnZXMgLS0+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5jaGUiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvY29tbW9uYm9yZGVyL0NIRV8xX0NIRV8xLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJDb21tb24gQm9yZGVyIHJlbGF0aW9uc2hpcCB3aXRoaW4gY291bnRyeSBDSEUiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHZhbGlkPSJzdGFydD0yMDA2LTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmNoZSIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9jb21tb25ib3JkZXIvQ0hFXzFfREVVXzEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkNvbW1vbiBCb3JkZXIgcmVsYXRpb25zaGlwIGJldHdlZW4gY291bnRyeSBDSEUgYW5kIERFVSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgdmFsaWQ9InN0YXJ0PTIwMDYtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuY2hlIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL2NvbW1vbmJvcmRlci9DSEVfMV9GUkFfMS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQ29tbW9uIEJvcmRlciByZWxhdGlvbnNoaXAgYmV0d2VlbiBjb3VudHJ5IENIRSBhbmQgRlJBIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiB2YWxpZD0ic3RhcnQ9MjAwNi0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5jaGUiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvY29tbW9uYm9yZGVyL0NIRV8xX0lUQV8xLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJDb21tb24gQm9yZGVyIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIGNvdW50cnkgQ0hFIGFuZCBJVEEiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHZhbGlkPSJzdGFydD0yMDA2LTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmNoZSIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9jb21tb25ib3JkZXIvQ0hFXzFfTElFXzEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkNvbW1vbiBCb3JkZXIgcmVsYXRpb25zaGlwIGJldHdlZW4gY291bnRyeSBDSEUgYW5kIExJRSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgdmFsaWQ9InN0YXJ0PTIwMDYtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuY2hlIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL3JlbGF0aXZlcGh5c2ljYWwvQ0hFXzBfQ0hFXzEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IlBoeXNpY2FsIGNvbnRhaW5tZW50IG9mIENIRSBsZXZlbCAoMSkgYnkgQ0hFICgwKSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3LmlibS5jb20iIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKworPCEtLSBDSEwgLS0+Cis8c3RlbV9jYXRlZ29yeSBpZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmNobCIgbmFtZT0iQ0hMIiBwYXJlbnRfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcyIvPgorCTwhLS0gTm9kZXMgYW5kIExhYmVscyAtLT4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmNobCIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvQ0hML0NITF8wX2FyZWEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkNITCAoMCkgYXJlYSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwczovL3d3dy5jaWEuZ292L2NpYS9wdWJsaWNhdGlvbnMvZmFjdGJvb2svZ2Vvcy9jaS5odG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5jaGwiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L0NITC9DSExfMC5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQ0hMKDApIE5vZGVzIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaXNvLm9yZy9pc28vaG9tZS5odG0iIHNwYXRpYWw9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9nZW8vY291bnRyeS9DSEwvQ0hMXzBfTUFQLnhtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuY2hsIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9DSEwvQ0hMXzFfYXJlYS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQ0hMICgxKSBhcmVhIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHBzOi8vd3d3LmNpYS5nb3YvbGlicmFyeS9wdWJsaWNhdGlvbnMvdGhlLXdvcmxkLWZhY3Rib29rLyIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuY2hsIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9DSEwvQ0hMXzEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkNITCgxKSBOb2RlcyIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3Lmlzby5vcmcvaXNvL2hvbWUuaHRtIiBzcGF0aWFsPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvZ2VvL2NvdW50cnkvQ0hML0NITF8xX01BUC54bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmNobCIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvQ0hML0NITF8yX2FyZWEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkNITCAoMikgYXJlYSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwczovL3d3dy5jaWEuZ292L2xpYnJhcnkvcHVibGljYXRpb25zL3RoZS13b3JsZC1mYWN0Ym9vay8iIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmNobCIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvQ0hML0NITF8yLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJDSEwoMikgTm9kZXMiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pc28ub3JnL2lzby9ob21lLmh0bSIgc3BhdGlhbD0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2dlby9jb3VudHJ5L0NITC9DSExfMl9NQVAueG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+CisJPCEtLSBFZGdlcyAtLT4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmNobCIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9jb21tb25ib3JkZXIvQ0hMXzJfQ0hMXzIuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkNvbW1vbiBCb3JkZXIgcmVsYXRpb25zaGlwIHdpdGhpbiBjb3VudHJ5IENITCIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgdmFsaWQ9InN0YXJ0PTIwMDYtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuY2hsIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL2NvbW1vbmJvcmRlci9DSExfMl9QRVJfMi5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQ29tbW9uIEJvcmRlciByZWxhdGlvbnNoaXAgYmV0d2VlbiBjb3VudHJ5IENITCBhbmQgUEVSIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiB2YWxpZD0ic3RhcnQ9MjAwNi0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5jaGwiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvcmVsYXRpdmVwaHlzaWNhbC9DSExfMF9DSExfMS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iUGh5c2ljYWwgY29udGFpbm1lbnQgb2YgQ0hMIGxldmVsICgxKSBieSBDSEwgKDApIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaWJtLmNvbSIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuY2hsIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL3JlbGF0aXZlcGh5c2ljYWwvQ0hMXzFfQ0hMXzIuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IlBoeXNpY2FsIGNvbnRhaW5tZW50IG9mIENITCBsZXZlbCAoMikgYnkgQ0hMICgxKSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3LmlibS5jb20iIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKworPCEtLSBDSE4gLS0+Cis8c3RlbV9jYXRlZ29yeSBpZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmNobiIgbmFtZT0iQ0hOIiBwYXJlbnRfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcyIvPgorCTwhLS0gTm9kZXMgYW5kIExhYmVscyAtLT4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmNobiIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvQ0hOL0NITl8wX2FyZWEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkNITiAoMCkgYXJlYSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwczovL3d3dy5jaWEuZ292L2NpYS9wdWJsaWNhdGlvbnMvZmFjdGJvb2svZ2Vvcy9jaC5odG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5jaG4iIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L0NITi9DSE5fMC5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQ0hOKDApIE5vZGVzIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaXNvLm9yZy9pc28vaG9tZS5odG0iIHNwYXRpYWw9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9nZW8vY291bnRyeS9DSE4vQ0hOXzBfTUFQLnhtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuY2huIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9DSE4vQ0hOXzFfYXJlYS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQ0hOICgxKSBhcmVhIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHBzOi8vd3d3LmNpYS5nb3YvbGlicmFyeS9wdWJsaWNhdGlvbnMvdGhlLXdvcmxkLWZhY3Rib29rLyIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuY2huIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9DSE4vQ0hOXzEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkNITigxKSBOb2RlcyIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3Lmlzby5vcmcvaXNvL2hvbWUuaHRtIiBzcGF0aWFsPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvZ2VvL2NvdW50cnkvQ0hOL0NITl8xX01BUC54bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmNobiIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvQ0hOL0NITl8yX2FyZWEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkNITiAoMikgYXJlYSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwczovL3d3dy5jaWEuZ292L2xpYnJhcnkvcHVibGljYXRpb25zL3RoZS13b3JsZC1mYWN0Ym9vay8iIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmNobiIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvQ0hOL0NITl8yLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJDSE4oMikgTm9kZXMiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pc28ub3JnL2lzby9ob21lLmh0bSIgc3BhdGlhbD0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2dlby9jb3VudHJ5L0NITi9DSE5fMl9NQVAueG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+CisJPCEtLSBFZGdlcyAtLT4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmNobiIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9jb21tb25ib3JkZXIvQ0hOXzJfQ0hOXzIuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkNvbW1vbiBCb3JkZXIgcmVsYXRpb25zaGlwIHdpdGhpbiBjb3VudHJ5IENITiIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgdmFsaWQ9InN0YXJ0PTIwMDYtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuY2huIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL2NvbW1vbmJvcmRlci9DSE5fMl9IS0dfMC5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQ29tbW9uIEJvcmRlciByZWxhdGlvbnNoaXAgYmV0d2VlbiBjb3VudHJ5IENITiBhbmQgSEtHIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiB2YWxpZD0ic3RhcnQ9MjAwNi0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5jaG4iIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvY29tbW9uYm9yZGVyL0NITl8yX0lORF8yLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJDb21tb24gQm9yZGVyIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIGNvdW50cnkgQ0hOIGFuZCBJTkQiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHZhbGlkPSJzdGFydD0yMDA2LTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmNobiIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9jb21tb25ib3JkZXIvQ0hOXzJfS0FaXzIuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkNvbW1vbiBCb3JkZXIgcmVsYXRpb25zaGlwIGJldHdlZW4gY291bnRyeSBDSE4gYW5kIEtBWiIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgdmFsaWQ9InN0YXJ0PTIwMDYtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuY2huIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL2NvbW1vbmJvcmRlci9DSE5fMl9LR1pfMi5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQ29tbW9uIEJvcmRlciByZWxhdGlvbnNoaXAgYmV0d2VlbiBjb3VudHJ5IENITiBhbmQgS0daIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiB2YWxpZD0ic3RhcnQ9MjAwNi0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5jaG4iIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvY29tbW9uYm9yZGVyL0NITl8yX0xBT18yLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJDb21tb24gQm9yZGVyIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIGNvdW50cnkgQ0hOIGFuZCBMQU8iIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHZhbGlkPSJzdGFydD0yMDA2LTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmNobiIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9jb21tb25ib3JkZXIvQ0hOXzJfTUFDXzIuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkNvbW1vbiBCb3JkZXIgcmVsYXRpb25zaGlwIGJldHdlZW4gY291bnRyeSBDSE4gYW5kIE1BQyIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgdmFsaWQ9InN0YXJ0PTIwMDYtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuY2huIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL2NvbW1vbmJvcmRlci9DSE5fMl9NTkdfMi5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQ29tbW9uIEJvcmRlciByZWxhdGlvbnNoaXAgYmV0d2VlbiBjb3VudHJ5IENITiBhbmQgTU5HIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiB2YWxpZD0ic3RhcnQ9MjAwNi0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5jaG4iIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvY29tbW9uYm9yZGVyL0NITl8yX05QTF8yLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJDb21tb24gQm9yZGVyIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIGNvdW50cnkgQ0hOIGFuZCBOUEwiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHZhbGlkPSJzdGFydD0yMDA2LTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmNobiIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9jb21tb25ib3JkZXIvQ0hOXzJfUEFLXzIuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkNvbW1vbiBCb3JkZXIgcmVsYXRpb25zaGlwIGJldHdlZW4gY291bnRyeSBDSE4gYW5kIFBBSyIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgdmFsaWQ9InN0YXJ0PTIwMDYtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuY2huIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL2NvbW1vbmJvcmRlci9DSE5fMl9QUktfMi5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQ29tbW9uIEJvcmRlciByZWxhdGlvbnNoaXAgYmV0d2VlbiBjb3VudHJ5IENITiBhbmQgUFJLIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiB2YWxpZD0ic3RhcnQ9MjAwNi0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5jaG4iIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvY29tbW9uYm9yZGVyL0NITl8yX1JVU18xLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJDb21tb24gQm9yZGVyIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIGNvdW50cnkgQ0hOIGFuZCBSVVMiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHZhbGlkPSJzdGFydD0yMDA2LTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmNobiIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9jb21tb25ib3JkZXIvQ0hOXzJfVEpLXzIuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkNvbW1vbiBCb3JkZXIgcmVsYXRpb25zaGlwIGJldHdlZW4gY291bnRyeSBDSE4gYW5kIFRKSyIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgdmFsaWQ9InN0YXJ0PTIwMDYtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuY2huIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL2NvbW1vbmJvcmRlci9DSE5fMl9UV05fMC5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQ29tbW9uIEJvcmRlciByZWxhdGlvbnNoaXAgYmV0d2VlbiBjb3VudHJ5IENITiBhbmQgVFdOIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiB2YWxpZD0ic3RhcnQ9MjAwNi0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5jaG4iIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvY29tbW9uYm9yZGVyL0NITl8yX1ZOTV8yLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJDb21tb24gQm9yZGVyIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIGNvdW50cnkgQ0hOIGFuZCBWTk0iIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHZhbGlkPSJzdGFydD0yMDA2LTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmNobiIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9yZWxhdGl2ZXBoeXNpY2FsL0NITl8wX0NITl8xLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJQaHlzaWNhbCBjb250YWlubWVudCBvZiBDSE4gbGV2ZWwgKDEpIGJ5IENITiAoMCkiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pYm0uY29tIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5jaG4iIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvcmVsYXRpdmVwaHlzaWNhbC9DSE5fMV9DSE5fMi5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iUGh5c2ljYWwgY29udGFpbm1lbnQgb2YgQ0hOIGxldmVsICgyKSBieSBDSE4gKDEpIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaWJtLmNvbSIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorCis8IS0tIENJViAtLT4KKzxzdGVtX2NhdGVnb3J5IGlkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuY2l2IiBuYW1lPSJDSVYiIHBhcmVudF9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzIi8+CisJPCEtLSBOb2RlcyBhbmQgTGFiZWxzIC0tPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuY2l2IiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9DSVYvQ0lWXzBfYXJlYS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQ0lWICgwKSBhcmVhIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHBzOi8vd3d3LmNpYS5nb3YvY2lhL3B1YmxpY2F0aW9ucy9mYWN0Ym9vay9nZW9zL2l2Lmh0bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmNpdiIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvQ0lWL0NJVl8wLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJDSVYoMCkgTm9kZXMiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pc28ub3JnL2lzby9ob21lLmh0bSIgc3BhdGlhbD0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2dlby9jb3VudHJ5L0NJVi9DSVZfMF9NQVAueG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5jaXYiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L0NJVi9DSVZfMV9hcmVhLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJDSVYgKDEpIGFyZWEiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cHM6Ly93d3cuY2lhLmdvdi9saWJyYXJ5L3B1YmxpY2F0aW9ucy90aGUtd29ybGQtZmFjdGJvb2svIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5jaXYiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L0NJVi9DSVZfMS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQ0lWKDEpIE5vZGVzIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaXNvLm9yZy9pc28vaG9tZS5odG0iIHNwYXRpYWw9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9nZW8vY291bnRyeS9DSVYvQ0lWXzFfTUFQLnhtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuY2l2IiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9DSVYvQ0lWXzJfYXJlYS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQ0lWICgyKSBhcmVhIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHBzOi8vd3d3LmNpYS5nb3YvbGlicmFyeS9wdWJsaWNhdGlvbnMvdGhlLXdvcmxkLWZhY3Rib29rLyIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuY2l2IiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9DSVYvQ0lWXzIuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkNJVigyKSBOb2RlcyIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3Lmlzby5vcmcvaXNvL2hvbWUuaHRtIiBzcGF0aWFsPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvZ2VvL2NvdW50cnkvQ0lWL0NJVl8yX01BUC54bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKwk8IS0tIEVkZ2VzIC0tPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuY2l2IiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL2NvbW1vbmJvcmRlci9DSVZfMl9DSVZfMi5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQ29tbW9uIEJvcmRlciByZWxhdGlvbnNoaXAgd2l0aGluIGNvdW50cnkgQ0lWIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiB2YWxpZD0ic3RhcnQ9MjAwNi0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5jaXYiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvY29tbW9uYm9yZGVyL0NJVl8yX0dIQV8yLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJDb21tb24gQm9yZGVyIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIGNvdW50cnkgQ0lWIGFuZCBHSEEiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHZhbGlkPSJzdGFydD0yMDA2LTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmNpdiIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9jb21tb25ib3JkZXIvQ0lWXzJfR0lOXzIuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkNvbW1vbiBCb3JkZXIgcmVsYXRpb25zaGlwIGJldHdlZW4gY291bnRyeSBDSVYgYW5kIEdJTiIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgdmFsaWQ9InN0YXJ0PTIwMDYtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuY2l2IiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL2NvbW1vbmJvcmRlci9DSVZfMl9MQlJfMi5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQ29tbW9uIEJvcmRlciByZWxhdGlvbnNoaXAgYmV0d2VlbiBjb3VudHJ5IENJViBhbmQgTEJSIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiB2YWxpZD0ic3RhcnQ9MjAwNi0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5jaXYiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvY29tbW9uYm9yZGVyL0NJVl8yX01MSV8wLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJDb21tb24gQm9yZGVyIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIGNvdW50cnkgQ0lWIGFuZCBNTEkiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHZhbGlkPSJzdGFydD0yMDA2LTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmNpdiIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9yZWxhdGl2ZXBoeXNpY2FsL0NJVl8wX0NJVl8xLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJQaHlzaWNhbCBjb250YWlubWVudCBvZiBDSVYgbGV2ZWwgKDEpIGJ5IENJViAoMCkiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pYm0uY29tIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5jaXYiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvcmVsYXRpdmVwaHlzaWNhbC9DSVZfMV9DSVZfMi5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iUGh5c2ljYWwgY29udGFpbm1lbnQgb2YgQ0lWIGxldmVsICgyKSBieSBDSVYgKDEpIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaWJtLmNvbSIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorCis8IS0tIENNUiAtLT4KKzxzdGVtX2NhdGVnb3J5IGlkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuY21yIiBuYW1lPSJDTVIiIHBhcmVudF9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzIi8+CisJPCEtLSBOb2RlcyBhbmQgTGFiZWxzIC0tPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuY21yIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9DTVIvQ01SXzBfYXJlYS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQ01SICgwKSBhcmVhIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHBzOi8vd3d3LmNpYS5nb3YvY2lhL3B1YmxpY2F0aW9ucy9mYWN0Ym9vay9nZW9zL2NtLmh0bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmNtciIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvQ01SL0NNUl8wLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJDTVIoMCkgTm9kZXMiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pc28ub3JnL2lzby9ob21lLmh0bSIgc3BhdGlhbD0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2dlby9jb3VudHJ5L0NNUi9DTVJfMF9NQVAueG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+CisJPCEtLSBFZGdlcyAtLT4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmNtciIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9jb21tb25ib3JkZXIvQ01SXzBfQ09EXzAuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkNvbW1vbiBCb3JkZXIgcmVsYXRpb25zaGlwIGJldHdlZW4gY291bnRyeSBDTVIgYW5kIENPRCIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgdmFsaWQ9InN0YXJ0PTIwMDYtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuY21yIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL2NvbW1vbmJvcmRlci9DTVJfMF9DT0dfMi5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQ29tbW9uIEJvcmRlciByZWxhdGlvbnNoaXAgYmV0d2VlbiBjb3VudHJ5IENNUiBhbmQgQ09HIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiB2YWxpZD0ic3RhcnQ9MjAwNi0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5jbXIiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvY29tbW9uYm9yZGVyL0NNUl8wX0dBQl8yLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJDb21tb24gQm9yZGVyIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIGNvdW50cnkgQ01SIGFuZCBHQUIiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHZhbGlkPSJzdGFydD0yMDA2LTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmNtciIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9jb21tb25ib3JkZXIvQ01SXzBfR05RXzIuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkNvbW1vbiBCb3JkZXIgcmVsYXRpb25zaGlwIGJldHdlZW4gY291bnRyeSBDTVIgYW5kIEdOUSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgdmFsaWQ9InN0YXJ0PTIwMDYtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuY21yIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL2NvbW1vbmJvcmRlci9DTVJfMF9OR0FfMi5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQ29tbW9uIEJvcmRlciByZWxhdGlvbnNoaXAgYmV0d2VlbiBjb3VudHJ5IENNUiBhbmQgTkdBIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiB2YWxpZD0ic3RhcnQ9MjAwNi0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5jbXIiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvY29tbW9uYm9yZGVyL0NNUl8wX1RDRF8yLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJDb21tb24gQm9yZGVyIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIGNvdW50cnkgQ01SIGFuZCBUQ0QiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHZhbGlkPSJzdGFydD0yMDA2LTAxLTAxOyIgLz4KKworPCEtLSBDT0QgLS0+Cis8c3RlbV9jYXRlZ29yeSBpZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmNvZCIgbmFtZT0iQ09EIiBwYXJlbnRfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcyIvPgorCTwhLS0gTm9kZXMgYW5kIExhYmVscyAtLT4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmNvZCIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvQ09EL0NPRF8wX2FyZWEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkNPRCAoMCkgYXJlYSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwczovL3d3dy5jaWEuZ292L2NpYS9wdWJsaWNhdGlvbnMvZmFjdGJvb2svZ2Vvcy9jZy5odG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5jb2QiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L0NPRC9DT0RfMC5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQ09EKDApIE5vZGVzIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaXNvLm9yZy9pc28vaG9tZS5odG0iIHNwYXRpYWw9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9nZW8vY291bnRyeS9DT0QvQ09EXzBfTUFQLnhtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorCTwhLS0gRWRnZXMgLS0+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5jb2QiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvY29tbW9uYm9yZGVyL0NPRF8wX0NPR18yLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJDb21tb24gQm9yZGVyIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIGNvdW50cnkgQ09EIGFuZCBDT0ciIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHZhbGlkPSJzdGFydD0yMDA2LTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmNvZCIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9jb21tb25ib3JkZXIvQ09EXzBfUldBXzIuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkNvbW1vbiBCb3JkZXIgcmVsYXRpb25zaGlwIGJldHdlZW4gY291bnRyeSBDT0QgYW5kIFJXQSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgdmFsaWQ9InN0YXJ0PTIwMDYtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuY29kIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL2NvbW1vbmJvcmRlci9DT0RfMF9TRE5fMi5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQ29tbW9uIEJvcmRlciByZWxhdGlvbnNoaXAgYmV0d2VlbiBjb3VudHJ5IENPRCBhbmQgU0ROIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiB2YWxpZD0ic3RhcnQ9MjAwNi0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5jb2QiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvY29tbW9uYm9yZGVyL0NPRF8wX1VHQV8yLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJDb21tb24gQm9yZGVyIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIGNvdW50cnkgQ09EIGFuZCBVR0EiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHZhbGlkPSJzdGFydD0yMDA2LTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmNvZCIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9jb21tb25ib3JkZXIvQ09EXzBfWk1CXzIuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkNvbW1vbiBCb3JkZXIgcmVsYXRpb25zaGlwIGJldHdlZW4gY291bnRyeSBDT0QgYW5kIFpNQiIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgdmFsaWQ9InN0YXJ0PTIwMDYtMDEtMDE7IiAvPgorCis8IS0tIENPRyAtLT4KKzxzdGVtX2NhdGVnb3J5IGlkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuY29nIiBuYW1lPSJDT0ciIHBhcmVudF9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzIi8+CisJPCEtLSBOb2RlcyBhbmQgTGFiZWxzIC0tPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuY29nIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9DT0cvQ09HXzBfYXJlYS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQ09HICgwKSBhcmVhIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHBzOi8vd3d3LmNpYS5nb3YvY2lhL3B1YmxpY2F0aW9ucy9mYWN0Ym9vay9nZW9zL2NmLmh0bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmNvZyIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvQ09HL0NPR18wLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJDT0coMCkgTm9kZXMiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pc28ub3JnL2lzby9ob21lLmh0bSIgc3BhdGlhbD0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2dlby9jb3VudHJ5L0NPRy9DT0dfMF9NQVAueG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5jb2ciIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L0NPRy9DT0dfMV9hcmVhLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJDT0cgKDEpIGFyZWEiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cHM6Ly93d3cuY2lhLmdvdi9saWJyYXJ5L3B1YmxpY2F0aW9ucy90aGUtd29ybGQtZmFjdGJvb2svIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5jb2ciIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L0NPRy9DT0dfMS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQ09HKDEpIE5vZGVzIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaXNvLm9yZy9pc28vaG9tZS5odG0iIHNwYXRpYWw9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9nZW8vY291bnRyeS9DT0cvQ09HXzFfTUFQLnhtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuY29nIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9DT0cvQ09HXzJfYXJlYS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQ09HICgyKSBhcmVhIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHBzOi8vd3d3LmNpYS5nb3YvbGlicmFyeS9wdWJsaWNhdGlvbnMvdGhlLXdvcmxkLWZhY3Rib29rLyIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuY29nIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9DT0cvQ09HXzIuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkNPRygyKSBOb2RlcyIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3Lmlzby5vcmcvaXNvL2hvbWUuaHRtIiBzcGF0aWFsPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvZ2VvL2NvdW50cnkvQ09HL0NPR18yX01BUC54bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKwk8IS0tIEVkZ2VzIC0tPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuY29nIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL2NvbW1vbmJvcmRlci9DT0dfMl9DT0dfMi5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQ29tbW9uIEJvcmRlciByZWxhdGlvbnNoaXAgd2l0aGluIGNvdW50cnkgQ09HIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiB2YWxpZD0ic3RhcnQ9MjAwNi0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5jb2ciIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvY29tbW9uYm9yZGVyL0NPR18yX0dBQl8yLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJDb21tb24gQm9yZGVyIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIGNvdW50cnkgQ09HIGFuZCBHQUIiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHZhbGlkPSJzdGFydD0yMDA2LTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmNvZyIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9yZWxhdGl2ZXBoeXNpY2FsL0NPR18wX0NPR18xLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJQaHlzaWNhbCBjb250YWlubWVudCBvZiBDT0cgbGV2ZWwgKDEpIGJ5IENPRyAoMCkiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pYm0uY29tIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5jb2ciIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvcmVsYXRpdmVwaHlzaWNhbC9DT0dfMV9DT0dfMi5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iUGh5c2ljYWwgY29udGFpbm1lbnQgb2YgQ09HIGxldmVsICgyKSBieSBDT0cgKDEpIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaWJtLmNvbSIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorCis8IS0tIENPSyAtLT4KKzxzdGVtX2NhdGVnb3J5IGlkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuY29rIiBuYW1lPSJDT0siIHBhcmVudF9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzIi8+CisJPCEtLSBOb2RlcyBhbmQgTGFiZWxzIC0tPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuY29rIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9DT0svQ09LXzBfYXJlYS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQ09LICgwKSBhcmVhIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHBzOi8vd3d3LmNpYS5nb3YvY2lhL3B1YmxpY2F0aW9ucy9mYWN0Ym9vay9nZW9zL2N3Lmh0bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmNvayIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvQ09LL0NPS18wLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJDT0soMCkgTm9kZXMiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pc28ub3JnL2lzby9ob21lLmh0bSIgc3BhdGlhbD0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2dlby9jb3VudHJ5L0NPSy9DT0tfMF9NQVAueG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+CisJPCEtLSBFZGdlcyAtLT4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmNvayIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9yZWxhdGl2ZXBoeXNpY2FsL0NPS18wX0NPS18xLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJQaHlzaWNhbCBjb250YWlubWVudCBvZiBDT0sgbGV2ZWwgKDEpIGJ5IENPSyAoMCkiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pYm0uY29tIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+CisKKzwhLS0gQ09MIC0tPgorPHN0ZW1fY2F0ZWdvcnkgaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5jb2wiIG5hbWU9IkNPTCIgcGFyZW50X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMiLz4KKwk8IS0tIE5vZGVzIGFuZCBMYWJlbHMgLS0+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5jb2wiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L0NPTC9DT0xfMF9hcmVhLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJDT0wgKDApIGFyZWEiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cHM6Ly93d3cuY2lhLmdvdi9jaWEvcHVibGljYXRpb25zL2ZhY3Rib29rL2dlb3MvY28uaHRtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuY29sIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9DT0wvQ09MXzAuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkNPTCgwKSBOb2RlcyIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3Lmlzby5vcmcvaXNvL2hvbWUuaHRtIiBzcGF0aWFsPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvZ2VvL2NvdW50cnkvQ09ML0NPTF8wX01BUC54bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmNvbCIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvQ09ML0NPTF8xX2FyZWEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkNPTCAoMSkgYXJlYSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwczovL3d3dy5jaWEuZ292L2xpYnJhcnkvcHVibGljYXRpb25zL3RoZS13b3JsZC1mYWN0Ym9vay8iIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmNvbCIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvQ09ML0NPTF8xLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJDT0woMSkgTm9kZXMiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pc28ub3JnL2lzby9ob21lLmh0bSIgc3BhdGlhbD0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2dlby9jb3VudHJ5L0NPTC9DT0xfMV9NQVAueG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5jb2wiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L0NPTC9DT0xfMl9hcmVhLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJDT0wgKDIpIGFyZWEiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cHM6Ly93d3cuY2lhLmdvdi9saWJyYXJ5L3B1YmxpY2F0aW9ucy90aGUtd29ybGQtZmFjdGJvb2svIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5jb2wiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L0NPTC9DT0xfMi5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQ09MKDIpIE5vZGVzIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaXNvLm9yZy9pc28vaG9tZS5odG0iIHNwYXRpYWw9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9nZW8vY291bnRyeS9DT0wvQ09MXzJfTUFQLnhtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorCTwhLS0gRWRnZXMgLS0+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5jb2wiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvY29tbW9uYm9yZGVyL0NPTF8yX0NPTF8yLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJDb21tb24gQm9yZGVyIHJlbGF0aW9uc2hpcCB3aXRoaW4gY291bnRyeSBDT0wiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHZhbGlkPSJzdGFydD0yMDA2LTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmNvbCIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9jb21tb25ib3JkZXIvQ09MXzJfRUNVXzIuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkNvbW1vbiBCb3JkZXIgcmVsYXRpb25zaGlwIGJldHdlZW4gY291bnRyeSBDT0wgYW5kIEVDVSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgdmFsaWQ9InN0YXJ0PTIwMDYtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuY29sIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL2NvbW1vbmJvcmRlci9DT0xfMl9QQU5fMC5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQ29tbW9uIEJvcmRlciByZWxhdGlvbnNoaXAgYmV0d2VlbiBjb3VudHJ5IENPTCBhbmQgUEFOIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiB2YWxpZD0ic3RhcnQ9MjAwNi0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5jb2wiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvY29tbW9uYm9yZGVyL0NPTF8yX1BFUl8yLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJDb21tb24gQm9yZGVyIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIGNvdW50cnkgQ09MIGFuZCBQRVIiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHZhbGlkPSJzdGFydD0yMDA2LTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmNvbCIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9jb21tb25ib3JkZXIvQ09MXzJfVkVOXzIuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkNvbW1vbiBCb3JkZXIgcmVsYXRpb25zaGlwIGJldHdlZW4gY291bnRyeSBDT0wgYW5kIFZFTiIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgdmFsaWQ9InN0YXJ0PTIwMDYtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuY29sIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL3JlbGF0aXZlcGh5c2ljYWwvQ09MXzBfQ09MXzEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IlBoeXNpY2FsIGNvbnRhaW5tZW50IG9mIENPTCBsZXZlbCAoMSkgYnkgQ09MICgwKSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3LmlibS5jb20iIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmNvbCIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9yZWxhdGl2ZXBoeXNpY2FsL0NPTF8xX0NPTF8yLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJQaHlzaWNhbCBjb250YWlubWVudCBvZiBDT0wgbGV2ZWwgKDIpIGJ5IENPTCAoMSkiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pYm0uY29tIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+CisKKzwhLS0gQ09NIC0tPgorPHN0ZW1fY2F0ZWdvcnkgaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5jb20iIG5hbWU9IkNPTSIgcGFyZW50X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMiLz4KKwk8IS0tIE5vZGVzIGFuZCBMYWJlbHMgLS0+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5jb20iIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L0NPTS9DT01fMF9hcmVhLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJDT00gKDApIGFyZWEiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cHM6Ly93d3cuY2lhLmdvdi9jaWEvcHVibGljYXRpb25zL2ZhY3Rib29rL2dlb3MvY24uaHRtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuY29tIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9DT00vQ09NXzAuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkNPTSgwKSBOb2RlcyIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3Lmlzby5vcmcvaXNvL2hvbWUuaHRtIiBzcGF0aWFsPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvZ2VvL2NvdW50cnkvQ09NL0NPTV8wX01BUC54bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmNvbSIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvQ09NL0NPTV8xX2FyZWEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkNPTSAoMSkgYXJlYSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwczovL3d3dy5jaWEuZ292L2xpYnJhcnkvcHVibGljYXRpb25zL3RoZS13b3JsZC1mYWN0Ym9vay8iIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmNvbSIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvQ09NL0NPTV8xLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJDT00oMSkgTm9kZXMiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pc28ub3JnL2lzby9ob21lLmh0bSIgc3BhdGlhbD0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2dlby9jb3VudHJ5L0NPTS9DT01fMV9NQVAueG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5jb20iIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L0NPTS9DT01fMl9hcmVhLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJDT00gKDIpIGFyZWEiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cHM6Ly93d3cuY2lhLmdvdi9saWJyYXJ5L3B1YmxpY2F0aW9ucy90aGUtd29ybGQtZmFjdGJvb2svIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5jb20iIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L0NPTS9DT01fMi5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQ09NKDIpIE5vZGVzIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaXNvLm9yZy9pc28vaG9tZS5odG0iIHNwYXRpYWw9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9nZW8vY291bnRyeS9DT00vQ09NXzJfTUFQLnhtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorCTwhLS0gRWRnZXMgLS0+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5jb20iIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvY29tbW9uYm9yZGVyL0NPTV8yX0NPTV8yLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJDb21tb24gQm9yZGVyIHJlbGF0aW9uc2hpcCB3aXRoaW4gY291bnRyeSBDT00iIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHZhbGlkPSJzdGFydD0yMDA2LTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmNvbSIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9yZWxhdGl2ZXBoeXNpY2FsL0NPTV8wX0NPTV8xLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJQaHlzaWNhbCBjb250YWlubWVudCBvZiBDT00gbGV2ZWwgKDEpIGJ5IENPTSAoMCkiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pYm0uY29tIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5jb20iIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvcmVsYXRpdmVwaHlzaWNhbC9DT01fMV9DT01fMi5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iUGh5c2ljYWwgY29udGFpbm1lbnQgb2YgQ09NIGxldmVsICgyKSBieSBDT00gKDEpIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaWJtLmNvbSIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorCis8IS0tIENQViAtLT4KKzxzdGVtX2NhdGVnb3J5IGlkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuY3B2IiBuYW1lPSJDUFYiIHBhcmVudF9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzIi8+CisJPCEtLSBOb2RlcyBhbmQgTGFiZWxzIC0tPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuY3B2IiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9DUFYvQ1BWXzBfYXJlYS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQ1BWICgwKSBhcmVhIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHBzOi8vd3d3LmNpYS5nb3YvY2lhL3B1YmxpY2F0aW9ucy9mYWN0Ym9vay9nZW9zL2N2Lmh0bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmNwdiIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvQ1BWL0NQVl8wLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJDUFYoMCkgTm9kZXMiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pc28ub3JnL2lzby9ob21lLmh0bSIgc3BhdGlhbD0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2dlby9jb3VudHJ5L0NQVi9DUFZfMF9NQVAueG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5jcHYiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L0NQVi9DUFZfMV9hcmVhLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJDUFYgKDEpIGFyZWEiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cHM6Ly93d3cuY2lhLmdvdi9saWJyYXJ5L3B1YmxpY2F0aW9ucy90aGUtd29ybGQtZmFjdGJvb2svIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5jcHYiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L0NQVi9DUFZfMS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQ1BWKDEpIE5vZGVzIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaXNvLm9yZy9pc28vaG9tZS5odG0iIHNwYXRpYWw9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9nZW8vY291bnRyeS9DUFYvQ1BWXzFfTUFQLnhtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuY3B2IiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9DUFYvQ1BWXzJfYXJlYS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQ1BWICgyKSBhcmVhIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHBzOi8vd3d3LmNpYS5nb3YvbGlicmFyeS9wdWJsaWNhdGlvbnMvdGhlLXdvcmxkLWZhY3Rib29rLyIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuY3B2IiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9DUFYvQ1BWXzIuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkNQVigyKSBOb2RlcyIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3Lmlzby5vcmcvaXNvL2hvbWUuaHRtIiBzcGF0aWFsPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvZ2VvL2NvdW50cnkvQ1BWL0NQVl8yX01BUC54bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKwk8IS0tIEVkZ2VzIC0tPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuY3B2IiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL2NvbW1vbmJvcmRlci9DUFZfMl9DUFZfMi5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQ29tbW9uIEJvcmRlciByZWxhdGlvbnNoaXAgd2l0aGluIGNvdW50cnkgQ1BWIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiB2YWxpZD0ic3RhcnQ9MjAwNi0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5jcHYiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvcmVsYXRpdmVwaHlzaWNhbC9DUFZfMF9DUFZfMS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iUGh5c2ljYWwgY29udGFpbm1lbnQgb2YgQ1BWIGxldmVsICgxKSBieSBDUFYgKDApIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaWJtLmNvbSIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuY3B2IiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL3JlbGF0aXZlcGh5c2ljYWwvQ1BWXzFfQ1BWXzIuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IlBoeXNpY2FsIGNvbnRhaW5tZW50IG9mIENQViBsZXZlbCAoMikgYnkgQ1BWICgxKSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3LmlibS5jb20iIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKworPCEtLSBDUkkgLS0+Cis8c3RlbV9jYXRlZ29yeSBpZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmNyaSIgbmFtZT0iQ1JJIiBwYXJlbnRfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcyIvPgorCTwhLS0gTm9kZXMgYW5kIExhYmVscyAtLT4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmNyaSIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvQ1JJL0NSSV8wX2FyZWEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkNSSSAoMCkgYXJlYSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwczovL3d3dy5jaWEuZ292L2NpYS9wdWJsaWNhdGlvbnMvZmFjdGJvb2svZ2Vvcy9jcy5odG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5jcmkiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L0NSSS9DUklfMC5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQ1JJKDApIE5vZGVzIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaXNvLm9yZy9pc28vaG9tZS5odG0iIHNwYXRpYWw9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9nZW8vY291bnRyeS9DUkkvQ1JJXzBfTUFQLnhtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorCTwhLS0gRWRnZXMgLS0+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5jcmkiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvY29tbW9uYm9yZGVyL0NSSV8wX05JQ18wLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJDb21tb24gQm9yZGVyIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIGNvdW50cnkgQ1JJIGFuZCBOSUMiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHZhbGlkPSJzdGFydD0yMDA2LTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmNyaSIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9jb21tb25ib3JkZXIvQ1JJXzBfUEFOXzAuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkNvbW1vbiBCb3JkZXIgcmVsYXRpb25zaGlwIGJldHdlZW4gY291bnRyeSBDUkkgYW5kIFBBTiIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgdmFsaWQ9InN0YXJ0PTIwMDYtMDEtMDE7IiAvPgorCis8IS0tIENVQiAtLT4KKzxzdGVtX2NhdGVnb3J5IGlkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuY3ViIiBuYW1lPSJDVUIiIHBhcmVudF9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzIi8+CisJPCEtLSBOb2RlcyBhbmQgTGFiZWxzIC0tPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuY3ViIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9DVUIvQ1VCXzBfYXJlYS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQ1VCICgwKSBhcmVhIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHBzOi8vd3d3LmNpYS5nb3YvY2lhL3B1YmxpY2F0aW9ucy9mYWN0Ym9vay9nZW9zL2N1Lmh0bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmN1YiIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvQ1VCL0NVQl8wLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJDVUIoMCkgTm9kZXMiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pc28ub3JnL2lzby9ob21lLmh0bSIgc3BhdGlhbD0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2dlby9jb3VudHJ5L0NVQi9DVUJfMF9NQVAueG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+CisJPCEtLSBFZGdlcyAtLT4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmN1YiIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9yZWxhdGl2ZXBoeXNpY2FsL0NVQl8wX0NVQl8xLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJQaHlzaWNhbCBjb250YWlubWVudCBvZiBDVUIgbGV2ZWwgKDEpIGJ5IENVQiAoMCkiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pYm0uY29tIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+CisKKzwhLS0gQ1hSIC0tPgorPHN0ZW1fY2F0ZWdvcnkgaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5jeHIiIG5hbWU9IkNYUiIgcGFyZW50X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMiLz4KKwk8IS0tIE5vZGVzIGFuZCBMYWJlbHMgLS0+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5jeHIiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L0NYUi9DWFJfMF9hcmVhLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJDWFIgKDApIGFyZWEiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cHM6Ly93d3cuY2lhLmdvdi9jaWEvcHVibGljYXRpb25zL2ZhY3Rib29rL2dlb3Mva3QuaHRtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuY3hyIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9DWFIvQ1hSXzAuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkNYUigwKSBOb2RlcyIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3Lmlzby5vcmcvaXNvL2hvbWUuaHRtIiBzcGF0aWFsPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvZ2VvL2NvdW50cnkvQ1hSL0NYUl8wX01BUC54bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKworPCEtLSBDWU0gLS0+Cis8c3RlbV9jYXRlZ29yeSBpZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmN5bSIgbmFtZT0iQ1lNIiBwYXJlbnRfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcyIvPgorCTwhLS0gTm9kZXMgYW5kIExhYmVscyAtLT4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmN5bSIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvQ1lNL0NZTV8wX2FyZWEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkNZTSAoMCkgYXJlYSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwczovL3d3dy5jaWEuZ292L2NpYS9wdWJsaWNhdGlvbnMvZmFjdGJvb2svZ2Vvcy9jai5odG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5jeW0iIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L0NZTS9DWU1fMC5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQ1lNKDApIE5vZGVzIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaXNvLm9yZy9pc28vaG9tZS5odG0iIHNwYXRpYWw9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9nZW8vY291bnRyeS9DWU0vQ1lNXzBfTUFQLnhtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorCis8IS0tIENZUCAtLT4KKzxzdGVtX2NhdGVnb3J5IGlkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuY3lwIiBuYW1lPSJDWVAiIHBhcmVudF9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzIi8+CisJPCEtLSBOb2RlcyBhbmQgTGFiZWxzIC0tPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuY3lwIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9DWVAvQ1lQXzBfYXJlYS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQ1lQICgwKSBhcmVhIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHBzOi8vd3d3LmNpYS5nb3YvY2lhL3B1YmxpY2F0aW9ucy9mYWN0Ym9vay9nZW9zL2N5Lmh0bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmN5cCIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvQ1lQL0NZUF8wLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJDWVAoMCkgTm9kZXMiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pc28ub3JnL2lzby9ob21lLmh0bSIgc3BhdGlhbD0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2dlby9jb3VudHJ5L0NZUC9DWVBfMF9NQVAueG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+CisJPCEtLSBFZGdlcyAtLT4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmN5cCIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9yZWxhdGl2ZXBoeXNpY2FsL0NZUF8wX0NZUF8xLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJQaHlzaWNhbCBjb250YWlubWVudCBvZiBDWVAgbGV2ZWwgKDEpIGJ5IENZUCAoMCkiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pYm0uY29tIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+CisKKzwhLS0gQ1pFIC0tPgorPHN0ZW1fY2F0ZWdvcnkgaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5jemUiIG5hbWU9IkNaRSIgcGFyZW50X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMiLz4KKwk8IS0tIE5vZGVzIGFuZCBMYWJlbHMgLS0+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5jemUiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L0NaRS9DWkVfMF9hcmVhLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJDWkUgKDApIGFyZWEiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cHM6Ly93d3cuY2lhLmdvdi9jaWEvcHVibGljYXRpb25zL2ZhY3Rib29rL2dlb3MvZXouaHRtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuY3plIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9DWkUvQ1pFXzAuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkNaRSgwKSBOb2RlcyIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3Lmlzby5vcmcvaXNvL2hvbWUuaHRtIiBzcGF0aWFsPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvZ2VvL2NvdW50cnkvQ1pFL0NaRV8wX01BUC54bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmN6ZSIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvQ1pFL0NaRV8xX2FyZWEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkNaRSAoMSkgYXJlYSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3LmdyaWQudW5lcC5jaC9kYXRhL2RhdGEucGhwP2NhdGVnb3J5PWh1bWFuX3JlbGF0ZWQiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmN6ZSIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvQ1pFL0NaRV8xLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJDWkUoMSkgTm9kZXMiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pc28ub3JnL2lzby9ob21lLmh0bSIgc3BhdGlhbD0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2dlby9jb3VudHJ5L0NaRS9DWkVfMV9NQVAueG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+CisJPCEtLSBFZGdlcyAtLT4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmN6ZSIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9jb21tb25ib3JkZXIvQ1pFXzBfVUtSXzAuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkNvbW1vbiBCb3JkZXIgYmV0d2VlbiBjb3VudHJ5IENaRSBhbmQgVUtSIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiB2YWxpZD0ic3RhcnQ9MjAwMS0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5jemUiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvY29tbW9uYm9yZGVyL0NaRV8wX1VLUl8xLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJDb21tb24gQm9yZGVyIGJldHdlZW4gY291bnRyeSBDWkUgYW5kIFVLUiIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgdmFsaWQ9InN0YXJ0PTIwMDEtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuY3plIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL2NvbW1vbmJvcmRlci9DWkVfMV9DWkVfMS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQ29tbW9uIEJvcmRlciByZWxhdGlvbnNoaXAgd2l0aGluIGNvdW50cnkgQ1pFIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiB2YWxpZD0ic3RhcnQ9MjAwNi0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5jemUiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvY29tbW9uYm9yZGVyL0NaRV8xX0RFVV8xLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJDb21tb24gQm9yZGVyIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIGNvdW50cnkgQ1pFIGFuZCBERVUiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHZhbGlkPSJzdGFydD0yMDA2LTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmN6ZSIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9jb21tb25ib3JkZXIvQ1pFXzFfSFVOXzEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkNvbW1vbiBCb3JkZXIgcmVsYXRpb25zaGlwIGJldHdlZW4gY291bnRyeSBDWkUgYW5kIEhVTiIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgdmFsaWQ9InN0YXJ0PTIwMDYtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuY3plIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL2NvbW1vbmJvcmRlci9DWkVfMV9QT0xfMS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQ29tbW9uIEJvcmRlciByZWxhdGlvbnNoaXAgYmV0d2VlbiBjb3VudHJ5IENaRSBhbmQgUE9MIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiB2YWxpZD0ic3RhcnQ9MjAwNi0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5jemUiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvY29tbW9uYm9yZGVyL0NaRV8xX1VLUl8wLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJDb21tb24gQm9yZGVyIGJldHdlZW4gY291bnRyeSBDWkUgYW5kIFVLUiIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgdmFsaWQ9InN0YXJ0PTIwMDEtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuY3plIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL2NvbW1vbmJvcmRlci9DWkVfMV9VS1JfMS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQ29tbW9uIEJvcmRlciBiZXR3ZWVuIGNvdW50cnkgQ1pFIGFuZCBVS1IiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHZhbGlkPSJzdGFydD0yMDAxLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmN6ZSIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9yZWxhdGl2ZXBoeXNpY2FsL0NaRV8wX0NaRV8xLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJQaHlzaWNhbCBjb250YWlubWVudCBvZiBDWkUgbGV2ZWwgKDEpIGJ5IENaRSAoMCkiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pYm0uY29tIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+CisKKzwhLS0gREVVIC0tPgorPHN0ZW1fY2F0ZWdvcnkgaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5kZXUiIG5hbWU9IkRFVSIgcGFyZW50X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMiLz4KKwk8IS0tIE5vZGVzIGFuZCBMYWJlbHMgLS0+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5kZXUiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L0RFVS9ERVVfMF9hcmVhLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJERVUgKDApIGFyZWEiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cHM6Ly93d3cuY2lhLmdvdi9jaWEvcHVibGljYXRpb25zL2ZhY3Rib29rL2dlb3MvZ20uaHRtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuZGV1IiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9ERVUvREVVXzAuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkRFVSgwKSBOb2RlcyIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3Lmlzby5vcmcvaXNvL2hvbWUuaHRtIiBzcGF0aWFsPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvZ2VvL2NvdW50cnkvREVVL0RFVV8wX01BUC54bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmRldSIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvREVVL0RFVV8xX2FyZWEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkRFVSAoMSkgYXJlYSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3LmdyaWQudW5lcC5jaC9kYXRhL2RhdGEucGhwP2NhdGVnb3J5PWh1bWFuX3JlbGF0ZWQiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmRldSIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvREVVL0RFVV8xLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJERVUoMSkgTm9kZXMiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pc28ub3JnL2lzby9ob21lLmh0bSIgc3BhdGlhbD0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2dlby9jb3VudHJ5L0RFVS9ERVVfMV9NQVAueG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+CisJPCEtLSBFZGdlcyAtLT4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmRldSIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9jb21tb25ib3JkZXIvREVVXzFfREVVXzEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkNvbW1vbiBCb3JkZXIgcmVsYXRpb25zaGlwIHdpdGhpbiBjb3VudHJ5IERFVSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgdmFsaWQ9InN0YXJ0PTIwMDYtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuZGV1IiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL2NvbW1vbmJvcmRlci9ERVVfMV9ETktfMS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQ29tbW9uIEJvcmRlciByZWxhdGlvbnNoaXAgYmV0d2VlbiBjb3VudHJ5IERFVSBhbmQgRE5LIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiB2YWxpZD0ic3RhcnQ9MjAwNi0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5kZXUiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvY29tbW9uYm9yZGVyL0RFVV8xX0ZSQV8xLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJDb21tb24gQm9yZGVyIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIGNvdW50cnkgREVVIGFuZCBGUkEiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHZhbGlkPSJzdGFydD0yMDA2LTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmRldSIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9jb21tb25ib3JkZXIvREVVXzFfTFVYXzEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkNvbW1vbiBCb3JkZXIgcmVsYXRpb25zaGlwIGJldHdlZW4gY291bnRyeSBERVUgYW5kIExVWCIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgdmFsaWQ9InN0YXJ0PTIwMDYtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuZGV1IiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL2NvbW1vbmJvcmRlci9ERVVfMV9OTERfMS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQ29tbW9uIEJvcmRlciByZWxhdGlvbnNoaXAgYmV0d2VlbiBjb3VudHJ5IERFVSBhbmQgTkxEIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiB2YWxpZD0ic3RhcnQ9MjAwNi0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5kZXUiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvY29tbW9uYm9yZGVyL0RFVV8xX1BPTF8xLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJDb21tb24gQm9yZGVyIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIGNvdW50cnkgREVVIGFuZCBQT0wiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHZhbGlkPSJzdGFydD0yMDA2LTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmRldSIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9yZWxhdGl2ZXBoeXNpY2FsL0RFVV8wX0RFVV8xLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJQaHlzaWNhbCBjb250YWlubWVudCBvZiBERVUgbGV2ZWwgKDEpIGJ5IERFVSAoMCkiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pYm0uY29tIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+CisKKzwhLS0gREpJIC0tPgorPHN0ZW1fY2F0ZWdvcnkgaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5kamkiIG5hbWU9IkRKSSIgcGFyZW50X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMiLz4KKwk8IS0tIE5vZGVzIGFuZCBMYWJlbHMgLS0+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5kamkiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L0RKSS9ESklfMF9hcmVhLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJESkkgKDApIGFyZWEiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cHM6Ly93d3cuY2lhLmdvdi9jaWEvcHVibGljYXRpb25zL2ZhY3Rib29rL2dlb3MvZGouaHRtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuZGppIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9ESkkvREpJXzAuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkRKSSgwKSBOb2RlcyIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3Lmlzby5vcmcvaXNvL2hvbWUuaHRtIiBzcGF0aWFsPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvZ2VvL2NvdW50cnkvREpJL0RKSV8wX01BUC54bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKwk8IS0tIEVkZ2VzIC0tPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuZGppIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL2NvbW1vbmJvcmRlci9ESklfMF9FUklfMi5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQ29tbW9uIEJvcmRlciByZWxhdGlvbnNoaXAgYmV0d2VlbiBjb3VudHJ5IERKSSBhbmQgRVJJIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiB2YWxpZD0ic3RhcnQ9MjAwNi0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5kamkiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvY29tbW9uYm9yZGVyL0RKSV8wX0VUSF8wLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJDb21tb24gQm9yZGVyIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIGNvdW50cnkgREpJIGFuZCBFVEgiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHZhbGlkPSJzdGFydD0yMDA2LTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmRqaSIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9jb21tb25ib3JkZXIvREpJXzBfU09NXzIuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkNvbW1vbiBCb3JkZXIgcmVsYXRpb25zaGlwIGJldHdlZW4gY291bnRyeSBESkkgYW5kIFNPTSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgdmFsaWQ9InN0YXJ0PTIwMDYtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuZGppIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL3JlbGF0aXZlcGh5c2ljYWwvREpJXzBfREpJXzEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IlBoeXNpY2FsIGNvbnRhaW5tZW50IG9mIERKSSBsZXZlbCAoMSkgYnkgREpJICgwKSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3LmlibS5jb20iIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKworPCEtLSBETUEgLS0+Cis8c3RlbV9jYXRlZ29yeSBpZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmRtYSIgbmFtZT0iRE1BIiBwYXJlbnRfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcyIvPgorCTwhLS0gTm9kZXMgYW5kIExhYmVscyAtLT4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmRtYSIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvRE1BL0RNQV8wX2FyZWEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkRNQSAoMCkgYXJlYSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwczovL3d3dy5jaWEuZ292L2NpYS9wdWJsaWNhdGlvbnMvZmFjdGJvb2svZ2Vvcy9kby5odG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5kbWEiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L0RNQS9ETUFfMC5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iRE1BKDApIE5vZGVzIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaXNvLm9yZy9pc28vaG9tZS5odG0iIHNwYXRpYWw9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9nZW8vY291bnRyeS9ETUEvRE1BXzBfTUFQLnhtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorCis8IS0tIEROSyAtLT4KKzxzdGVtX2NhdGVnb3J5IGlkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuZG5rIiBuYW1lPSJETksiIHBhcmVudF9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzIi8+CisJPCEtLSBOb2RlcyBhbmQgTGFiZWxzIC0tPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuZG5rIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9ETksvRE5LXzBfYXJlYS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iRE5LICgwKSBhcmVhIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHBzOi8vd3d3LmNpYS5nb3YvY2lhL3B1YmxpY2F0aW9ucy9mYWN0Ym9vay9nZW9zL2RhLmh0bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmRuayIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvRE5LL0ROS18wLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJETksoMCkgTm9kZXMiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pc28ub3JnL2lzby9ob21lLmh0bSIgc3BhdGlhbD0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2dlby9jb3VudHJ5L0ROSy9ETktfMF9NQVAueG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5kbmsiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L0ROSy9ETktfMV9hcmVhLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJETksgKDEpIGFyZWEiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5ncmlkLnVuZXAuY2gvZGF0YS9kYXRhLnBocD9jYXRlZ29yeT1odW1hbl9yZWxhdGVkIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5kbmsiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L0ROSy9ETktfMS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iRE5LKDEpIE5vZGVzIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaXNvLm9yZy9pc28vaG9tZS5odG0iIHNwYXRpYWw9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9nZW8vY291bnRyeS9ETksvRE5LXzFfTUFQLnhtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorCTwhLS0gRWRnZXMgLS0+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5kbmsiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvY29tbW9uYm9yZGVyL0ROS18xX0ROS18xLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJDb21tb24gQm9yZGVyIHJlbGF0aW9uc2hpcCB3aXRoaW4gY291bnRyeSBETksiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHZhbGlkPSJzdGFydD0yMDA2LTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmRuayIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9yZWxhdGl2ZXBoeXNpY2FsL0ROS18wX0ROS18xLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJQaHlzaWNhbCBjb250YWlubWVudCBvZiBETksgbGV2ZWwgKDEpIGJ5IEROSyAoMCkiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pYm0uY29tIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+CisKKzwhLS0gRE9NIC0tPgorPHN0ZW1fY2F0ZWdvcnkgaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5kb20iIG5hbWU9IkRPTSIgcGFyZW50X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMiLz4KKwk8IS0tIE5vZGVzIGFuZCBMYWJlbHMgLS0+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5kb20iIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L0RPTS9ET01fMF9hcmVhLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJET00gKDApIGFyZWEiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cHM6Ly93d3cuY2lhLmdvdi9jaWEvcHVibGljYXRpb25zL2ZhY3Rib29rL2dlb3MvZHIuaHRtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuZG9tIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9ET00vRE9NXzAuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkRPTSgwKSBOb2RlcyIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3Lmlzby5vcmcvaXNvL2hvbWUuaHRtIiBzcGF0aWFsPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvZ2VvL2NvdW50cnkvRE9NL0RPTV8wX01BUC54bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKwk8IS0tIEVkZ2VzIC0tPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuZG9tIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL3JlbGF0aXZlcGh5c2ljYWwvRE9NXzBfRE9NXzEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IlBoeXNpY2FsIGNvbnRhaW5tZW50IG9mIERPTSBsZXZlbCAoMSkgYnkgRE9NICgwKSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3LmlibS5jb20iIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKworPCEtLSBEWkEgLS0+Cis8c3RlbV9jYXRlZ29yeSBpZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmR6YSIgbmFtZT0iRFpBIiBwYXJlbnRfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcyIvPgorCTwhLS0gTm9kZXMgYW5kIExhYmVscyAtLT4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmR6YSIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvRFpBL0RaQV8wX2FyZWEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkRaQSAoMCkgYXJlYSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwczovL3d3dy5jaWEuZ292L2NpYS9wdWJsaWNhdGlvbnMvZmFjdGJvb2svZ2Vvcy9hZy5odG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5kemEiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L0RaQS9EWkFfMC5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iRFpBKDApIE5vZGVzIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaXNvLm9yZy9pc28vaG9tZS5odG0iIHNwYXRpYWw9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9nZW8vY291bnRyeS9EWkEvRFpBXzBfTUFQLnhtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuZHphIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9EWkEvRFpBXzFfYXJlYS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iRFpBICgxKSBhcmVhIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHBzOi8vd3d3LmNpYS5nb3YvbGlicmFyeS9wdWJsaWNhdGlvbnMvdGhlLXdvcmxkLWZhY3Rib29rLyIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuZHphIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9EWkEvRFpBXzEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkRaQSgxKSBOb2RlcyIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3Lmlzby5vcmcvaXNvL2hvbWUuaHRtIiBzcGF0aWFsPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvZ2VvL2NvdW50cnkvRFpBL0RaQV8xX01BUC54bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmR6YSIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvRFpBL0RaQV8yX2FyZWEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkRaQSAoMikgYXJlYSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwczovL3d3dy5jaWEuZ292L2xpYnJhcnkvcHVibGljYXRpb25zL3RoZS13b3JsZC1mYWN0Ym9vay8iIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmR6YSIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvRFpBL0RaQV8yLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJEWkEoMikgTm9kZXMiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pc28ub3JnL2lzby9ob21lLmh0bSIgc3BhdGlhbD0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2dlby9jb3VudHJ5L0RaQS9EWkFfMl9NQVAueG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+CisJPCEtLSBFZGdlcyAtLT4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmR6YSIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9jb21tb25ib3JkZXIvRFpBXzJfRFpBXzIuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkNvbW1vbiBCb3JkZXIgcmVsYXRpb25zaGlwIHdpdGhpbiBjb3VudHJ5IERaQSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgdmFsaWQ9InN0YXJ0PTIwMDYtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuZHphIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL2NvbW1vbmJvcmRlci9EWkFfMl9FU0hfMC5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQ29tbW9uIEJvcmRlciByZWxhdGlvbnNoaXAgYmV0d2VlbiBjb3VudHJ5IERaQSBhbmQgRVNIIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiB2YWxpZD0ic3RhcnQ9MjAwNi0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5kemEiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvY29tbW9uYm9yZGVyL0RaQV8yX0xCWV8xLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJDb21tb24gQm9yZGVyIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIGNvdW50cnkgRFpBIGFuZCBMQlkiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHZhbGlkPSJzdGFydD0yMDA2LTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmR6YSIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9jb21tb25ib3JkZXIvRFpBXzJfTUFSXzIuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkNvbW1vbiBCb3JkZXIgcmVsYXRpb25zaGlwIGJldHdlZW4gY291bnRyeSBEWkEgYW5kIE1BUiIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgdmFsaWQ9InN0YXJ0PTIwMDYtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuZHphIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL2NvbW1vbmJvcmRlci9EWkFfMl9NTElfMC5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQ29tbW9uIEJvcmRlciByZWxhdGlvbnNoaXAgYmV0d2VlbiBjb3VudHJ5IERaQSBhbmQgTUxJIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiB2YWxpZD0ic3RhcnQ9MjAwNi0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5kemEiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvY29tbW9uYm9yZGVyL0RaQV8yX01SVF8wLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJDb21tb24gQm9yZGVyIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIGNvdW50cnkgRFpBIGFuZCBNUlQiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHZhbGlkPSJzdGFydD0yMDA2LTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmR6YSIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9jb21tb25ib3JkZXIvRFpBXzJfTkVSXzIuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkNvbW1vbiBCb3JkZXIgcmVsYXRpb25zaGlwIGJldHdlZW4gY291bnRyeSBEWkEgYW5kIE5FUiIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgdmFsaWQ9InN0YXJ0PTIwMDYtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuZHphIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL2NvbW1vbmJvcmRlci9EWkFfMl9UVU5fMi5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQ29tbW9uIEJvcmRlciByZWxhdGlvbnNoaXAgYmV0d2VlbiBjb3VudHJ5IERaQSBhbmQgVFVOIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiB2YWxpZD0ic3RhcnQ9MjAwNi0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5kemEiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvcmVsYXRpdmVwaHlzaWNhbC9EWkFfMF9EWkFfMS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iUGh5c2ljYWwgY29udGFpbm1lbnQgb2YgRFpBIGxldmVsICgxKSBieSBEWkEgKDApIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaWJtLmNvbSIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuZHphIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL3JlbGF0aXZlcGh5c2ljYWwvRFpBXzFfRFpBXzIuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IlBoeXNpY2FsIGNvbnRhaW5tZW50IG9mIERaQSBsZXZlbCAoMikgYnkgRFpBICgxKSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3LmlibS5jb20iIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKworPCEtLSBFQ1UgLS0+Cis8c3RlbV9jYXRlZ29yeSBpZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmVjdSIgbmFtZT0iRUNVIiBwYXJlbnRfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcyIvPgorCTwhLS0gTm9kZXMgYW5kIExhYmVscyAtLT4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmVjdSIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvRUNVL0VDVV8wX2FyZWEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkVDVSAoMCkgYXJlYSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwczovL3d3dy5jaWEuZ292L2NpYS9wdWJsaWNhdGlvbnMvZmFjdGJvb2svZ2Vvcy9lYy5odG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5lY3UiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L0VDVS9FQ1VfMC5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iRUNVKDApIE5vZGVzIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaXNvLm9yZy9pc28vaG9tZS5odG0iIHNwYXRpYWw9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9nZW8vY291bnRyeS9FQ1UvRUNVXzBfTUFQLnhtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuZWN1IiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9FQ1UvRUNVXzFfYXJlYS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iRUNVICgxKSBhcmVhIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHBzOi8vd3d3LmNpYS5nb3YvbGlicmFyeS9wdWJsaWNhdGlvbnMvdGhlLXdvcmxkLWZhY3Rib29rLyIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuZWN1IiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9FQ1UvRUNVXzEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkVDVSgxKSBOb2RlcyIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3Lmlzby5vcmcvaXNvL2hvbWUuaHRtIiBzcGF0aWFsPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvZ2VvL2NvdW50cnkvRUNVL0VDVV8xX01BUC54bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmVjdSIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvRUNVL0VDVV8yX2FyZWEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkVDVSAoMikgYXJlYSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwczovL3d3dy5jaWEuZ292L2xpYnJhcnkvcHVibGljYXRpb25zL3RoZS13b3JsZC1mYWN0Ym9vay8iIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmVjdSIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvRUNVL0VDVV8yLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJFQ1UoMikgTm9kZXMiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pc28ub3JnL2lzby9ob21lLmh0bSIgc3BhdGlhbD0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2dlby9jb3VudHJ5L0VDVS9FQ1VfMl9NQVAueG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+CisJPCEtLSBFZGdlcyAtLT4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmVjdSIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9jb21tb25ib3JkZXIvRUNVXzJfRUNVXzIuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkNvbW1vbiBCb3JkZXIgcmVsYXRpb25zaGlwIHdpdGhpbiBjb3VudHJ5IEVDVSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgdmFsaWQ9InN0YXJ0PTIwMDYtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuZWN1IiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL2NvbW1vbmJvcmRlci9FQ1VfMl9QRVJfMi5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQ29tbW9uIEJvcmRlciByZWxhdGlvbnNoaXAgYmV0d2VlbiBjb3VudHJ5IEVDVSBhbmQgUEVSIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiB2YWxpZD0ic3RhcnQ9MjAwNi0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5lY3UiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvcmVsYXRpdmVwaHlzaWNhbC9FQ1VfMF9FQ1VfMS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iUGh5c2ljYWwgY29udGFpbm1lbnQgb2YgRUNVIGxldmVsICgxKSBieSBFQ1UgKDApIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaWJtLmNvbSIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuZWN1IiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL3JlbGF0aXZlcGh5c2ljYWwvRUNVXzFfRUNVXzIuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IlBoeXNpY2FsIGNvbnRhaW5tZW50IG9mIEVDVSBsZXZlbCAoMikgYnkgRUNVICgxKSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3LmlibS5jb20iIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKworPCEtLSBFR1kgLS0+Cis8c3RlbV9jYXRlZ29yeSBpZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmVneSIgbmFtZT0iRUdZIiBwYXJlbnRfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcyIvPgorCTwhLS0gTm9kZXMgYW5kIExhYmVscyAtLT4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmVneSIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvRUdZL0VHWV8wX2FyZWEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkVHWSAoMCkgYXJlYSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwczovL3d3dy5jaWEuZ292L2NpYS9wdWJsaWNhdGlvbnMvZmFjdGJvb2svZ2Vvcy9lZy5odG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5lZ3kiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L0VHWS9FR1lfMC5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iRUdZKDApIE5vZGVzIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaXNvLm9yZy9pc28vaG9tZS5odG0iIHNwYXRpYWw9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9nZW8vY291bnRyeS9FR1kvRUdZXzBfTUFQLnhtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuZWd5IiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9FR1kvRUdZXzFfYXJlYS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iRUdZICgxKSBhcmVhIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHBzOi8vd3d3LmNpYS5nb3YvbGlicmFyeS9wdWJsaWNhdGlvbnMvdGhlLXdvcmxkLWZhY3Rib29rLyIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuZWd5IiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9FR1kvRUdZXzEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkVHWSgxKSBOb2RlcyIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3Lmlzby5vcmcvaXNvL2hvbWUuaHRtIiBzcGF0aWFsPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvZ2VvL2NvdW50cnkvRUdZL0VHWV8xX01BUC54bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmVneSIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvRUdZL0VHWV8yX2FyZWEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkVHWSAoMikgYXJlYSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwczovL3d3dy5jaWEuZ292L2xpYnJhcnkvcHVibGljYXRpb25zL3RoZS13b3JsZC1mYWN0Ym9vay8iIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmVneSIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvRUdZL0VHWV8yLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJFR1koMikgTm9kZXMiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pc28ub3JnL2lzby9ob21lLmh0bSIgc3BhdGlhbD0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2dlby9jb3VudHJ5L0VHWS9FR1lfMl9NQVAueG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+CisJPCEtLSBFZGdlcyAtLT4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmVneSIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9jb21tb25ib3JkZXIvRUdZXzJfRUdZXzIuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkNvbW1vbiBCb3JkZXIgcmVsYXRpb25zaGlwIHdpdGhpbiBjb3VudHJ5IEVHWSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgdmFsaWQ9InN0YXJ0PTIwMDYtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuZWd5IiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL2NvbW1vbmJvcmRlci9FR1lfMl9JU1JfMi5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQ29tbW9uIEJvcmRlciByZWxhdGlvbnNoaXAgYmV0d2VlbiBjb3VudHJ5IEVHWSBhbmQgSVNSIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiB2YWxpZD0ic3RhcnQ9MjAwNi0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5lZ3kiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvY29tbW9uYm9yZGVyL0VHWV8yX0xCWV8xLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJDb21tb24gQm9yZGVyIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIGNvdW50cnkgRUdZIGFuZCBMQlkiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHZhbGlkPSJzdGFydD0yMDA2LTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmVneSIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9jb21tb25ib3JkZXIvRUdZXzJfU0ROXzIuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkNvbW1vbiBCb3JkZXIgcmVsYXRpb25zaGlwIGJldHdlZW4gY291bnRyeSBFR1kgYW5kIFNETiIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgdmFsaWQ9InN0YXJ0PTIwMDYtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuZWd5IiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL3JlbGF0aXZlcGh5c2ljYWwvRUdZXzBfRUdZXzEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IlBoeXNpY2FsIGNvbnRhaW5tZW50IG9mIEVHWSBsZXZlbCAoMSkgYnkgRUdZICgwKSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3LmlibS5jb20iIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmVneSIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9yZWxhdGl2ZXBoeXNpY2FsL0VHWV8xX0VHWV8yLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJQaHlzaWNhbCBjb250YWlubWVudCBvZiBFR1kgbGV2ZWwgKDIpIGJ5IEVHWSAoMSkiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pYm0uY29tIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+CisKKzwhLS0gRVJJIC0tPgorPHN0ZW1fY2F0ZWdvcnkgaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5lcmkiIG5hbWU9IkVSSSIgcGFyZW50X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMiLz4KKwk8IS0tIE5vZGVzIGFuZCBMYWJlbHMgLS0+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5lcmkiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L0VSSS9FUklfMF9hcmVhLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJFUkkgKDApIGFyZWEiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cHM6Ly93d3cuY2lhLmdvdi9jaWEvcHVibGljYXRpb25zL2ZhY3Rib29rL2dlb3MvZXIuaHRtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuZXJpIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9FUkkvRVJJXzAuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkVSSSgwKSBOb2RlcyIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3Lmlzby5vcmcvaXNvL2hvbWUuaHRtIiBzcGF0aWFsPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvZ2VvL2NvdW50cnkvRVJJL0VSSV8wX01BUC54bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmVyaSIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvRVJJL0VSSV8xX2FyZWEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkVSSSAoMSkgYXJlYSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwczovL3d3dy5jaWEuZ292L2xpYnJhcnkvcHVibGljYXRpb25zL3RoZS13b3JsZC1mYWN0Ym9vay8iIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmVyaSIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvRVJJL0VSSV8xLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJFUkkoMSkgTm9kZXMiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pc28ub3JnL2lzby9ob21lLmh0bSIgc3BhdGlhbD0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2dlby9jb3VudHJ5L0VSSS9FUklfMV9NQVAueG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5lcmkiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L0VSSS9FUklfMl9hcmVhLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJFUkkgKDIpIGFyZWEiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cHM6Ly93d3cuY2lhLmdvdi9saWJyYXJ5L3B1YmxpY2F0aW9ucy90aGUtd29ybGQtZmFjdGJvb2svIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5lcmkiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L0VSSS9FUklfMi5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iRVJJKDIpIE5vZGVzIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaXNvLm9yZy9pc28vaG9tZS5odG0iIHNwYXRpYWw9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9nZW8vY291bnRyeS9FUkkvRVJJXzJfTUFQLnhtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorCTwhLS0gRWRnZXMgLS0+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5lcmkiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvY29tbW9uYm9yZGVyL0VSSV8yX0VSSV8yLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJDb21tb24gQm9yZGVyIHJlbGF0aW9uc2hpcCB3aXRoaW4gY291bnRyeSBFUkkiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHZhbGlkPSJzdGFydD0yMDA2LTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmVyaSIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9jb21tb25ib3JkZXIvRVJJXzJfRVRIXzAuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkNvbW1vbiBCb3JkZXIgcmVsYXRpb25zaGlwIGJldHdlZW4gY291bnRyeSBFUkkgYW5kIEVUSCIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgdmFsaWQ9InN0YXJ0PTIwMDYtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuZXJpIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL2NvbW1vbmJvcmRlci9FUklfMl9TRE5fMi5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQ29tbW9uIEJvcmRlciByZWxhdGlvbnNoaXAgYmV0d2VlbiBjb3VudHJ5IEVSSSBhbmQgU0ROIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiB2YWxpZD0ic3RhcnQ9MjAwNi0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5lcmkiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvcmVsYXRpdmVwaHlzaWNhbC9FUklfMF9FUklfMS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iUGh5c2ljYWwgY29udGFpbm1lbnQgb2YgRVJJIGxldmVsICgxKSBieSBFUkkgKDApIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaWJtLmNvbSIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuZXJpIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL3JlbGF0aXZlcGh5c2ljYWwvRVJJXzFfRVJJXzIuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IlBoeXNpY2FsIGNvbnRhaW5tZW50IG9mIEVSSSBsZXZlbCAoMikgYnkgRVJJICgxKSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3LmlibS5jb20iIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKworPCEtLSBFU0ggLS0+Cis8c3RlbV9jYXRlZ29yeSBpZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmVzaCIgbmFtZT0iRVNIIiBwYXJlbnRfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcyIvPgorCTwhLS0gTm9kZXMgYW5kIExhYmVscyAtLT4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmVzaCIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvRVNIL0VTSF8wX2FyZWEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkVTSCAoMCkgYXJlYSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwczovL3d3dy5jaWEuZ292L2NpYS9wdWJsaWNhdGlvbnMvZmFjdGJvb2svZ2Vvcy93aS5odG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5lc2giIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L0VTSC9FU0hfMC5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iRVNIKDApIE5vZGVzIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaXNvLm9yZy9pc28vaG9tZS5odG0iIHNwYXRpYWw9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9nZW8vY291bnRyeS9FU0gvRVNIXzBfTUFQLnhtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorCTwhLS0gRWRnZXMgLS0+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5lc2giIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvY29tbW9uYm9yZGVyL0VTSF8wX01BUl8yLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJDb21tb24gQm9yZGVyIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIGNvdW50cnkgRVNIIGFuZCBNQVIiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHZhbGlkPSJzdGFydD0yMDA2LTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmVzaCIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9jb21tb25ib3JkZXIvRVNIXzBfTVJUXzAuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkNvbW1vbiBCb3JkZXIgcmVsYXRpb25zaGlwIGJldHdlZW4gY291bnRyeSBFU0ggYW5kIE1SVCIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgdmFsaWQ9InN0YXJ0PTIwMDYtMDEtMDE7IiAvPgorCis8IS0tIEVTUCAtLT4KKzxzdGVtX2NhdGVnb3J5IGlkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuZXNwIiBuYW1lPSJFU1AiIHBhcmVudF9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzIi8+CisJPCEtLSBOb2RlcyBhbmQgTGFiZWxzIC0tPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuZXNwIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9FU1AvRVNQXzBfYXJlYS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iRVNQICgwKSBhcmVhIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHBzOi8vd3d3LmNpYS5nb3YvY2lhL3B1YmxpY2F0aW9ucy9mYWN0Ym9vay9nZW9zL3NwLmh0bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmVzcCIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvRVNQL0VTUF8wLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJFU1AoMCkgTm9kZXMiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pc28ub3JnL2lzby9ob21lLmh0bSIgc3BhdGlhbD0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2dlby9jb3VudHJ5L0VTUC9FU1BfMF9NQVAueG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5lc3AiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L0VTUC9FU1BfMV9hcmVhLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJFU1AgKDEpIGFyZWEiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5ncmlkLnVuZXAuY2gvZGF0YS9kYXRhLnBocD9jYXRlZ29yeT1odW1hbl9yZWxhdGVkIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5lc3AiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L0VTUC9FU1BfMS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iRVNQKDEpIE5vZGVzIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaXNvLm9yZy9pc28vaG9tZS5odG0iIHNwYXRpYWw9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9nZW8vY291bnRyeS9FU1AvRVNQXzFfTUFQLnhtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorCTwhLS0gRWRnZXMgLS0+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5lc3AiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvY29tbW9uYm9yZGVyL0VTUF8xX0VTUF8xLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJDb21tb24gQm9yZGVyIHJlbGF0aW9uc2hpcCB3aXRoaW4gY291bnRyeSBFU1AiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHZhbGlkPSJzdGFydD0yMDA2LTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmVzcCIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9jb21tb25ib3JkZXIvRVNQXzFfRlJBXzEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkNvbW1vbiBCb3JkZXIgcmVsYXRpb25zaGlwIGJldHdlZW4gY291bnRyeSBFU1AgYW5kIEZSQSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgdmFsaWQ9InN0YXJ0PTIwMDYtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuZXNwIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL2NvbW1vbmJvcmRlci9FU1BfMV9QUlRfMS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQ29tbW9uIEJvcmRlciByZWxhdGlvbnNoaXAgYmV0d2VlbiBjb3VudHJ5IEVTUCBhbmQgUFJUIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiB2YWxpZD0ic3RhcnQ9MjAwNi0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5lc3AiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvcmVsYXRpdmVwaHlzaWNhbC9FU1BfMF9FU1BfMS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iUGh5c2ljYWwgY29udGFpbm1lbnQgb2YgRVNQIGxldmVsICgxKSBieSBFU1AgKDApIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaWJtLmNvbSIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorCis8IS0tIEVTVCAtLT4KKzxzdGVtX2NhdGVnb3J5IGlkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuZXN0IiBuYW1lPSJFU1QiIHBhcmVudF9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzIi8+CisJPCEtLSBOb2RlcyBhbmQgTGFiZWxzIC0tPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuZXN0IiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9FU1QvRVNUXzBfYXJlYS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iRVNUICgwKSBhcmVhIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHBzOi8vd3d3LmNpYS5nb3YvY2lhL3B1YmxpY2F0aW9ucy9mYWN0Ym9vay9nZW9zL2VuLmh0bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmVzdCIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvRVNUL0VTVF8wLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJFU1QoMCkgTm9kZXMiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pc28ub3JnL2lzby9ob21lLmh0bSIgc3BhdGlhbD0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2dlby9jb3VudHJ5L0VTVC9FU1RfMF9NQVAueG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+CisJPCEtLSBFZGdlcyAtLT4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmVzdCIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9jb21tb25ib3JkZXIvRVNUXzBfTFZBXzAuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkNvbW1vbiBCb3JkZXIgcmVsYXRpb25zaGlwIGJldHdlZW4gY291bnRyeSBFU1QgYW5kIExWQSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgdmFsaWQ9InN0YXJ0PTIwMDYtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuZXN0IiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL2NvbW1vbmJvcmRlci9FU1RfMF9SVVNfMS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQ29tbW9uIEJvcmRlciByZWxhdGlvbnNoaXAgYmV0d2VlbiBjb3VudHJ5IEVTVCBhbmQgUlVTIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiB2YWxpZD0ic3RhcnQ9MjAwNi0wMS0wMTsiIC8+CisKKzwhLS0gRVRIIC0tPgorPHN0ZW1fY2F0ZWdvcnkgaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5ldGgiIG5hbWU9IkVUSCIgcGFyZW50X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMiLz4KKwk8IS0tIE5vZGVzIGFuZCBMYWJlbHMgLS0+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5ldGgiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L0VUSC9FVEhfMF9hcmVhLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJFVEggKDApIGFyZWEiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cHM6Ly93d3cuY2lhLmdvdi9jaWEvcHVibGljYXRpb25zL2ZhY3Rib29rL2dlb3MvZXQuaHRtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuZXRoIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9FVEgvRVRIXzAuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkVUSCgwKSBOb2RlcyIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3Lmlzby5vcmcvaXNvL2hvbWUuaHRtIiBzcGF0aWFsPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvZ2VvL2NvdW50cnkvRVRIL0VUSF8wX01BUC54bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKwk8IS0tIEVkZ2VzIC0tPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuZXRoIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL2NvbW1vbmJvcmRlci9FVEhfMF9LRU5fMi5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQ29tbW9uIEJvcmRlciByZWxhdGlvbnNoaXAgYmV0d2VlbiBjb3VudHJ5IEVUSCBhbmQgS0VOIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiB2YWxpZD0ic3RhcnQ9MjAwNi0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5ldGgiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvY29tbW9uYm9yZGVyL0VUSF8wX1NETl8yLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJDb21tb24gQm9yZGVyIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIGNvdW50cnkgRVRIIGFuZCBTRE4iIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHZhbGlkPSJzdGFydD0yMDA2LTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmV0aCIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9jb21tb25ib3JkZXIvRVRIXzBfU09NXzIuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkNvbW1vbiBCb3JkZXIgcmVsYXRpb25zaGlwIGJldHdlZW4gY291bnRyeSBFVEggYW5kIFNPTSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgdmFsaWQ9InN0YXJ0PTIwMDYtMDEtMDE7IiAvPgorCis8IS0tIEZJTiAtLT4KKzxzdGVtX2NhdGVnb3J5IGlkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuZmluIiBuYW1lPSJGSU4iIHBhcmVudF9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzIi8+CisJPCEtLSBOb2RlcyBhbmQgTGFiZWxzIC0tPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuZmluIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9GSU4vRklOXzBfYXJlYS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iRklOICgwKSBhcmVhIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHBzOi8vd3d3LmNpYS5nb3YvY2lhL3B1YmxpY2F0aW9ucy9mYWN0Ym9vay9nZW9zL2ZpLmh0bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmZpbiIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvRklOL0ZJTl8wLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJGSU4oMCkgTm9kZXMiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pc28ub3JnL2lzby9ob21lLmh0bSIgc3BhdGlhbD0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2dlby9jb3VudHJ5L0ZJTi9GSU5fMF9NQVAueG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5maW4iIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L0ZJTi9GSU5fMV9hcmVhLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJGSU4gKDEpIGFyZWEiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5ncmlkLnVuZXAuY2gvZGF0YS9kYXRhLnBocD9jYXRlZ29yeT1odW1hbl9yZWxhdGVkIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5maW4iIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L0ZJTi9GSU5fMS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iRklOKDEpIE5vZGVzIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaXNvLm9yZy9pc28vaG9tZS5odG0iIHNwYXRpYWw9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9nZW8vY291bnRyeS9GSU4vRklOXzFfTUFQLnhtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorCTwhLS0gRWRnZXMgLS0+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5maW4iIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvY29tbW9uYm9yZGVyL0ZJTl8xX0ZJTl8xLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJDb21tb24gQm9yZGVyIHJlbGF0aW9uc2hpcCB3aXRoaW4gY291bnRyeSBGSU4iIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHZhbGlkPSJzdGFydD0yMDA2LTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmZpbiIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9jb21tb25ib3JkZXIvRklOXzFfTk9SXzEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkNvbW1vbiBCb3JkZXIgcmVsYXRpb25zaGlwIGJldHdlZW4gY291bnRyeSBGSU4gYW5kIE5PUiIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgdmFsaWQ9InN0YXJ0PTIwMDYtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuZmluIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL2NvbW1vbmJvcmRlci9GSU5fMV9SVVNfMS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQ29tbW9uIEJvcmRlciByZWxhdGlvbnNoaXAgYmV0d2VlbiBjb3VudHJ5IEZJTiBhbmQgUlVTIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiB2YWxpZD0ic3RhcnQ9MjAwNi0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5maW4iIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvY29tbW9uYm9yZGVyL0ZJTl8xX1NXRV8xLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJDb21tb24gQm9yZGVyIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIGNvdW50cnkgRklOIGFuZCBTV0UiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHZhbGlkPSJzdGFydD0yMDA2LTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmZpbiIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9yZWxhdGl2ZXBoeXNpY2FsL0ZJTl8wX0ZJTl8xLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJQaHlzaWNhbCBjb250YWlubWVudCBvZiBGSU4gbGV2ZWwgKDEpIGJ5IEZJTiAoMCkiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pYm0uY29tIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+CisKKzwhLS0gRkpJIC0tPgorPHN0ZW1fY2F0ZWdvcnkgaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5mamkiIG5hbWU9IkZKSSIgcGFyZW50X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMiLz4KKwk8IS0tIE5vZGVzIGFuZCBMYWJlbHMgLS0+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5mamkiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L0ZKSS9GSklfMF9hcmVhLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJGSkkgKDApIGFyZWEiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cHM6Ly93d3cuY2lhLmdvdi9jaWEvcHVibGljYXRpb25zL2ZhY3Rib29rL2dlb3MvZmouaHRtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuZmppIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9GSkkvRkpJXzAuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkZKSSgwKSBOb2RlcyIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3Lmlzby5vcmcvaXNvL2hvbWUuaHRtIiBzcGF0aWFsPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvZ2VvL2NvdW50cnkvRkpJL0ZKSV8wX01BUC54bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKworPCEtLSBGTEsgLS0+Cis8c3RlbV9jYXRlZ29yeSBpZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmZsayIgbmFtZT0iRkxLIiBwYXJlbnRfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcyIvPgorCTwhLS0gTm9kZXMgYW5kIExhYmVscyAtLT4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmZsayIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvRkxLL0ZMS18wX2FyZWEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkZMSyAoMCkgYXJlYSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwczovL3d3dy5jaWEuZ292L2NpYS9wdWJsaWNhdGlvbnMvZmFjdGJvb2svZ2Vvcy9may5odG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5mbGsiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L0ZMSy9GTEtfMC5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iRkxLKDApIE5vZGVzIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaXNvLm9yZy9pc28vaG9tZS5odG0iIHNwYXRpYWw9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9nZW8vY291bnRyeS9GTEsvRkxLXzBfTUFQLnhtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorCis8IS0tIEZSQSAtLT4KKzxzdGVtX2NhdGVnb3J5IGlkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuZnJhIiBuYW1lPSJGUkEiIHBhcmVudF9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzIi8+CisJPCEtLSBOb2RlcyBhbmQgTGFiZWxzIC0tPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuZnJhIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9GUkEvRlJBXzBfYXJlYS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iRlJBICgwKSBhcmVhIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHBzOi8vd3d3LmNpYS5nb3YvY2lhL3B1YmxpY2F0aW9ucy9mYWN0Ym9vay9nZW9zL2ZyLmh0bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmZyYSIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvRlJBL0ZSQV8wLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJGUkEoMCkgTm9kZXMiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pc28ub3JnL2lzby9ob21lLmh0bSIgc3BhdGlhbD0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2dlby9jb3VudHJ5L0ZSQS9GUkFfMF9NQVAueG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5mcmEiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L0ZSQS9GUkFfMV9hcmVhLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJGUkEgKDEpIGFyZWEiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5ncmlkLnVuZXAuY2gvZGF0YS9kYXRhLnBocD9jYXRlZ29yeT1odW1hbl9yZWxhdGVkIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5mcmEiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L0ZSQS9GUkFfMS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iRlJBKDEpIE5vZGVzIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaXNvLm9yZy9pc28vaG9tZS5odG0iIHNwYXRpYWw9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9nZW8vY291bnRyeS9GUkEvRlJBXzFfTUFQLnhtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorCTwhLS0gRWRnZXMgLS0+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5mcmEiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvY29tbW9uYm9yZGVyL0ZSQV8xX0ZSQV8xLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJDb21tb24gQm9yZGVyIHJlbGF0aW9uc2hpcCB3aXRoaW4gY291bnRyeSBGUkEiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHZhbGlkPSJzdGFydD0yMDA2LTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmZyYSIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9jb21tb25ib3JkZXIvRlJBXzFfSVRBXzEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkNvbW1vbiBCb3JkZXIgcmVsYXRpb25zaGlwIGJldHdlZW4gY291bnRyeSBGUkEgYW5kIElUQSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgdmFsaWQ9InN0YXJ0PTIwMDYtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuZnJhIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL2NvbW1vbmJvcmRlci9GUkFfMV9MVVhfMS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQ29tbW9uIEJvcmRlciByZWxhdGlvbnNoaXAgYmV0d2VlbiBjb3VudHJ5IEZSQSBhbmQgTFVYIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiB2YWxpZD0ic3RhcnQ9MjAwNi0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5mcmEiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvcmVsYXRpdmVwaHlzaWNhbC9GUkFfMF9GUkFfMS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iUGh5c2ljYWwgY29udGFpbm1lbnQgb2YgRlJBIGxldmVsICgxKSBieSBGUkEgKDApIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaWJtLmNvbSIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorCis8IS0tIEZSTyAtLT4KKzxzdGVtX2NhdGVnb3J5IGlkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuZnJvIiBuYW1lPSJGUk8iIHBhcmVudF9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzIi8+CisJPCEtLSBOb2RlcyBhbmQgTGFiZWxzIC0tPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuZnJvIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9GUk8vRlJPXzBfYXJlYS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iRlJPICgwKSBhcmVhIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHBzOi8vd3d3LmNpYS5nb3YvY2lhL3B1YmxpY2F0aW9ucy9mYWN0Ym9vay9nZW9zL2ZvLmh0bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmZybyIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvRlJPL0ZST18wLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJGUk8oMCkgTm9kZXMiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pc28ub3JnL2lzby9ob21lLmh0bSIgc3BhdGlhbD0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2dlby9jb3VudHJ5L0ZSTy9GUk9fMF9NQVAueG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+CisKKzwhLS0gRlNNIC0tPgorPHN0ZW1fY2F0ZWdvcnkgaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5mc20iIG5hbWU9IkZTTSIgcGFyZW50X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMiLz4KKwk8IS0tIE5vZGVzIGFuZCBMYWJlbHMgLS0+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5mc20iIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L0ZTTS9GU01fMF9hcmVhLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJGU00gKDApIGFyZWEiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cHM6Ly93d3cuY2lhLmdvdi9jaWEvcHVibGljYXRpb25zL2ZhY3Rib29rL2dlb3MvZm0uaHRtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuZnNtIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9GU00vRlNNXzAuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkZTTSgwKSBOb2RlcyIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3Lmlzby5vcmcvaXNvL2hvbWUuaHRtIiBzcGF0aWFsPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvZ2VvL2NvdW50cnkvRlNNL0ZTTV8wX01BUC54bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKworPCEtLSBHQUIgLS0+Cis8c3RlbV9jYXRlZ29yeSBpZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmdhYiIgbmFtZT0iR0FCIiBwYXJlbnRfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcyIvPgorCTwhLS0gTm9kZXMgYW5kIExhYmVscyAtLT4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmdhYiIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvR0FCL0dBQl8wX2FyZWEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkdBQiAoMCkgYXJlYSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwczovL3d3dy5jaWEuZ292L2NpYS9wdWJsaWNhdGlvbnMvZmFjdGJvb2svZ2Vvcy9nYi5odG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5nYWIiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L0dBQi9HQUJfMC5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iR0FCKDApIE5vZGVzIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaXNvLm9yZy9pc28vaG9tZS5odG0iIHNwYXRpYWw9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9nZW8vY291bnRyeS9HQUIvR0FCXzBfTUFQLnhtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuZ2FiIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9HQUIvR0FCXzFfYXJlYS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iR0FCICgxKSBhcmVhIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHBzOi8vd3d3LmNpYS5nb3YvbGlicmFyeS9wdWJsaWNhdGlvbnMvdGhlLXdvcmxkLWZhY3Rib29rLyIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuZ2FiIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9HQUIvR0FCXzEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkdBQigxKSBOb2RlcyIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3Lmlzby5vcmcvaXNvL2hvbWUuaHRtIiBzcGF0aWFsPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvZ2VvL2NvdW50cnkvR0FCL0dBQl8xX01BUC54bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmdhYiIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvR0FCL0dBQl8yX2FyZWEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkdBQiAoMikgYXJlYSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwczovL3d3dy5jaWEuZ292L2xpYnJhcnkvcHVibGljYXRpb25zL3RoZS13b3JsZC1mYWN0Ym9vay8iIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmdhYiIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvR0FCL0dBQl8yLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJHQUIoMikgTm9kZXMiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pc28ub3JnL2lzby9ob21lLmh0bSIgc3BhdGlhbD0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2dlby9jb3VudHJ5L0dBQi9HQUJfMl9NQVAueG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+CisJPCEtLSBFZGdlcyAtLT4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmdhYiIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9jb21tb25ib3JkZXIvR0FCXzJfR0FCXzIuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkNvbW1vbiBCb3JkZXIgcmVsYXRpb25zaGlwIHdpdGhpbiBjb3VudHJ5IEdBQiIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgdmFsaWQ9InN0YXJ0PTIwMDYtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuZ2FiIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL2NvbW1vbmJvcmRlci9HQUJfMl9HTlFfMi5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQ29tbW9uIEJvcmRlciByZWxhdGlvbnNoaXAgYmV0d2VlbiBjb3VudHJ5IEdBQiBhbmQgR05RIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiB2YWxpZD0ic3RhcnQ9MjAwNi0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5nYWIiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvcmVsYXRpdmVwaHlzaWNhbC9HQUJfMF9HQUJfMS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iUGh5c2ljYWwgY29udGFpbm1lbnQgb2YgR0FCIGxldmVsICgxKSBieSBHQUIgKDApIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaWJtLmNvbSIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuZ2FiIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL3JlbGF0aXZlcGh5c2ljYWwvR0FCXzFfR0FCXzIuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IlBoeXNpY2FsIGNvbnRhaW5tZW50IG9mIEdBQiBsZXZlbCAoMikgYnkgR0FCICgxKSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3LmlibS5jb20iIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKworPCEtLSBHQlIgLS0+Cis8c3RlbV9jYXRlZ29yeSBpZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmdiciIgbmFtZT0iR0JSIiBwYXJlbnRfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcyIvPgorCTwhLS0gTm9kZXMgYW5kIExhYmVscyAtLT4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmdiciIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvR0JSL0dCUl8wX2FyZWEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkdCUiAoMCkgYXJlYSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwczovL3d3dy5jaWEuZ292L2NpYS9wdWJsaWNhdGlvbnMvZmFjdGJvb2svZ2Vvcy91ay5odG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5nYnIiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L0dCUi9HQlJfMC5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iR0JSKDApIE5vZGVzIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaXNvLm9yZy9pc28vaG9tZS5odG0iIHNwYXRpYWw9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9nZW8vY291bnRyeS9HQlIvR0JSXzBfTUFQLnhtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuZ2JyIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9HQlIvR0JSXzFfYXJlYS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iR0JSICgxKSBhcmVhIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuZ3JpZC51bmVwLmNoL2RhdGEvZGF0YS5waHA/Y2F0ZWdvcnk9aHVtYW5fcmVsYXRlZCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuZ2JyIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9HQlIvR0JSXzEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkdCUigxKSBOb2RlcyIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3Lmlzby5vcmcvaXNvL2hvbWUuaHRtIiBzcGF0aWFsPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvZ2VvL2NvdW50cnkvR0JSL0dCUl8xX01BUC54bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKwk8IS0tIEVkZ2VzIC0tPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuZ2JyIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL2NvbW1vbmJvcmRlci9HQlJfMV9HQlJfMS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQ29tbW9uIEJvcmRlciByZWxhdGlvbnNoaXAgd2l0aGluIGNvdW50cnkgR0JSIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiB2YWxpZD0ic3RhcnQ9MjAwNi0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5nYnIiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvY29tbW9uYm9yZGVyL0dCUl8xX0lSTF8xLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJDb21tb24gQm9yZGVyIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIGNvdW50cnkgR0JSIGFuZCBJUkwiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHZhbGlkPSJzdGFydD0yMDA2LTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmdiciIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9yZWxhdGl2ZXBoeXNpY2FsL0dCUl8wX0dCUl8xLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJQaHlzaWNhbCBjb250YWlubWVudCBvZiBHQlIgbGV2ZWwgKDEpIGJ5IEdCUiAoMCkiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pYm0uY29tIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+CisKKzwhLS0gR0VPIC0tPgorPHN0ZW1fY2F0ZWdvcnkgaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5nZW8iIG5hbWU9IkdFTyIgcGFyZW50X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMiLz4KKwk8IS0tIE5vZGVzIGFuZCBMYWJlbHMgLS0+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5nZW8iIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L0dFTy9HRU9fMF9hcmVhLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJHRU8gKDApIGFyZWEiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cHM6Ly93d3cuY2lhLmdvdi9jaWEvcHVibGljYXRpb25zL2ZhY3Rib29rL2dlb3MvZ2cuaHRtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuZ2VvIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9HRU8vR0VPXzAuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkdFTygwKSBOb2RlcyIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3Lmlzby5vcmcvaXNvL2hvbWUuaHRtIiBzcGF0aWFsPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvZ2VvL2NvdW50cnkvR0VPL0dFT18wX01BUC54bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKwk8IS0tIEVkZ2VzIC0tPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuZ2VvIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL2NvbW1vbmJvcmRlci9HRU9fMF9SVVNfMS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQ29tbW9uIEJvcmRlciByZWxhdGlvbnNoaXAgYmV0d2VlbiBjb3VudHJ5IEdFTyBhbmQgUlVTIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiB2YWxpZD0ic3RhcnQ9MjAwNi0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5nZW8iIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvY29tbW9uYm9yZGVyL0dFT18wX1RVUl8yLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJDb21tb24gQm9yZGVyIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIGNvdW50cnkgR0VPIGFuZCBUVVIiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHZhbGlkPSJzdGFydD0yMDA2LTAxLTAxOyIgLz4KKworPCEtLSBHR1kgLS0+Cis8c3RlbV9jYXRlZ29yeSBpZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmdneSIgbmFtZT0iR0dZIiBwYXJlbnRfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcyIvPgorCTwhLS0gTm9kZXMgYW5kIExhYmVscyAtLT4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmdneSIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvR0dZL0dHWV8wX2FyZWEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkdHWSAoMCkgYXJlYSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwczovL3d3dy5jaWEuZ292L2NpYS9wdWJsaWNhdGlvbnMvZmFjdGJvb2svZ2Vvcy9nay5odG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5nZ3kiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L0dHWS9HR1lfMC5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iR0dZKDApIE5vZGVzIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaXNvLm9yZy9pc28vaG9tZS5odG0iIHNwYXRpYWw9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9nZW8vY291bnRyeS9HR1kvR0dZXzBfTUFQLnhtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorCis8IS0tIEdIQSAtLT4KKzxzdGVtX2NhdGVnb3J5IGlkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuZ2hhIiBuYW1lPSJHSEEiIHBhcmVudF9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzIi8+CisJPCEtLSBOb2RlcyBhbmQgTGFiZWxzIC0tPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuZ2hhIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9HSEEvR0hBXzBfYXJlYS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iR0hBICgwKSBhcmVhIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHBzOi8vd3d3LmNpYS5nb3YvY2lhL3B1YmxpY2F0aW9ucy9mYWN0Ym9vay9nZW9zL2doLmh0bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmdoYSIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvR0hBL0dIQV8wLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJHSEEoMCkgTm9kZXMiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pc28ub3JnL2lzby9ob21lLmh0bSIgc3BhdGlhbD0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2dlby9jb3VudHJ5L0dIQS9HSEFfMF9NQVAueG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5naGEiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L0dIQS9HSEFfMV9hcmVhLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJHSEEgKDEpIGFyZWEiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cHM6Ly93d3cuY2lhLmdvdi9saWJyYXJ5L3B1YmxpY2F0aW9ucy90aGUtd29ybGQtZmFjdGJvb2svIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5naGEiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L0dIQS9HSEFfMS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iR0hBKDEpIE5vZGVzIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaXNvLm9yZy9pc28vaG9tZS5odG0iIHNwYXRpYWw9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9nZW8vY291bnRyeS9HSEEvR0hBXzFfTUFQLnhtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuZ2hhIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9HSEEvR0hBXzJfYXJlYS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iR0hBICgyKSBhcmVhIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHBzOi8vd3d3LmNpYS5nb3YvbGlicmFyeS9wdWJsaWNhdGlvbnMvdGhlLXdvcmxkLWZhY3Rib29rLyIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuZ2hhIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9HSEEvR0hBXzIuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkdIQSgyKSBOb2RlcyIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3Lmlzby5vcmcvaXNvL2hvbWUuaHRtIiBzcGF0aWFsPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvZ2VvL2NvdW50cnkvR0hBL0dIQV8yX01BUC54bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKwk8IS0tIEVkZ2VzIC0tPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuZ2hhIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL2NvbW1vbmJvcmRlci9HSEFfMl9HSEFfMi5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQ29tbW9uIEJvcmRlciByZWxhdGlvbnNoaXAgd2l0aGluIGNvdW50cnkgR0hBIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiB2YWxpZD0ic3RhcnQ9MjAwNi0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5naGEiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvY29tbW9uYm9yZGVyL0dIQV8yX1RHT18yLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJDb21tb24gQm9yZGVyIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIGNvdW50cnkgR0hBIGFuZCBUR08iIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHZhbGlkPSJzdGFydD0yMDA2LTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmdoYSIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9yZWxhdGl2ZXBoeXNpY2FsL0dIQV8wX0dIQV8xLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJQaHlzaWNhbCBjb250YWlubWVudCBvZiBHSEEgbGV2ZWwgKDEpIGJ5IEdIQSAoMCkiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pYm0uY29tIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5naGEiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvcmVsYXRpdmVwaHlzaWNhbC9HSEFfMV9HSEFfMi5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iUGh5c2ljYWwgY29udGFpbm1lbnQgb2YgR0hBIGxldmVsICgyKSBieSBHSEEgKDEpIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaWJtLmNvbSIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorCis8IS0tIEdJQiAtLT4KKzxzdGVtX2NhdGVnb3J5IGlkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuZ2liIiBuYW1lPSJHSUIiIHBhcmVudF9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzIi8+CisJPCEtLSBOb2RlcyBhbmQgTGFiZWxzIC0tPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuZ2liIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9HSUIvR0lCXzBfYXJlYS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iR0lCICgwKSBhcmVhIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHBzOi8vd3d3LmNpYS5nb3YvY2lhL3B1YmxpY2F0aW9ucy9mYWN0Ym9vay9nZW9zL2dpLmh0bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmdpYiIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvR0lCL0dJQl8wLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJHSUIoMCkgTm9kZXMiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pc28ub3JnL2lzby9ob21lLmh0bSIgc3BhdGlhbD0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2dlby9jb3VudHJ5L0dJQi9HSUJfMF9NQVAueG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+CisKKzwhLS0gR0lOIC0tPgorPHN0ZW1fY2F0ZWdvcnkgaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5naW4iIG5hbWU9IkdJTiIgcGFyZW50X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMiLz4KKwk8IS0tIE5vZGVzIGFuZCBMYWJlbHMgLS0+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5naW4iIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L0dJTi9HSU5fMF9hcmVhLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJHSU4gKDApIGFyZWEiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cHM6Ly93d3cuY2lhLmdvdi9jaWEvcHVibGljYXRpb25zL2ZhY3Rib29rL2dlb3MvZ3YuaHRtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuZ2luIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9HSU4vR0lOXzAuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkdJTigwKSBOb2RlcyIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3Lmlzby5vcmcvaXNvL2hvbWUuaHRtIiBzcGF0aWFsPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvZ2VvL2NvdW50cnkvR0lOL0dJTl8wX01BUC54bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmdpbiIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvR0lOL0dJTl8xX2FyZWEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkdJTiAoMSkgYXJlYSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuZ2luIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9HSU4vR0lOXzEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkdJTigxKSBOb2RlcyIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3Lmlzby5vcmcvaXNvL2hvbWUuaHRtIiBzcGF0aWFsPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvZ2VvL2NvdW50cnkvR0lOL0dJTl8xX01BUC54bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmdpbiIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvR0lOL0dJTl8yX2FyZWEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkdJTiAoMikgYXJlYSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuZ2luIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9HSU4vR0lOXzIuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkdJTigyKSBOb2RlcyIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3Lmlzby5vcmcvaXNvL2hvbWUuaHRtIiBzcGF0aWFsPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvZ2VvL2NvdW50cnkvR0lOL0dJTl8yX01BUC54bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKwk8IS0tIEVkZ2VzIC0tPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuZ2luIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL2NvbW1vbmJvcmRlci9HSU5fMl9HSU5fMi5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQ29tbW9uIEJvcmRlciByZWxhdGlvbnNoaXAgd2l0aGluIGNvdW50cnkgR0lOIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiB2YWxpZD0ic3RhcnQ9MjAwNi0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5naW4iIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvY29tbW9uYm9yZGVyL0dJTl8yX0dOQl8yLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJDb21tb24gQm9yZGVyIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIGNvdW50cnkgR0lOIGFuZCBHTkIiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHZhbGlkPSJzdGFydD0yMDA2LTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmdpbiIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9jb21tb25ib3JkZXIvR0lOXzJfTEJSXzIuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkNvbW1vbiBCb3JkZXIgcmVsYXRpb25zaGlwIGJldHdlZW4gY291bnRyeSBHSU4gYW5kIExCUiIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgdmFsaWQ9InN0YXJ0PTIwMDYtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuZ2luIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL2NvbW1vbmJvcmRlci9HSU5fMl9NTElfMC5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQ29tbW9uIEJvcmRlciByZWxhdGlvbnNoaXAgYmV0d2VlbiBjb3VudHJ5IEdJTiBhbmQgTUxJIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiB2YWxpZD0ic3RhcnQ9MjAwNi0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5naW4iIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvY29tbW9uYm9yZGVyL0dJTl8yX1NFTl8yLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJDb21tb24gQm9yZGVyIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIGNvdW50cnkgR0lOIGFuZCBTRU4iIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHZhbGlkPSJzdGFydD0yMDA2LTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmdpbiIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9jb21tb25ib3JkZXIvR0lOXzJfU0xFXzIuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkNvbW1vbiBCb3JkZXIgcmVsYXRpb25zaGlwIGJldHdlZW4gY291bnRyeSBHSU4gYW5kIFNMRSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgdmFsaWQ9InN0YXJ0PTIwMDYtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuZ2luIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL3JlbGF0aXZlcGh5c2ljYWwvR0lOXzBfR0lOXzEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IlBoeXNpY2FsIGNvbnRhaW5tZW50IG9mIEdJTiBsZXZlbCAoMSkgYnkgR0lOICgwKSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3LmlibS5jb20iIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmdpbiIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9yZWxhdGl2ZXBoeXNpY2FsL0dJTl8xX0dJTl8yLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJQaHlzaWNhbCBjb250YWlubWVudCBvZiBHSU4gbGV2ZWwgKDIpIGJ5IEdJTiAoMSkiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pYm0uY29tIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+CisKKzwhLS0gR0xQIC0tPgorPHN0ZW1fY2F0ZWdvcnkgaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5nbHAiIG5hbWU9IkdMUCIgcGFyZW50X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMiLz4KKwk8IS0tIE5vZGVzIGFuZCBMYWJlbHMgLS0+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5nbHAiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L0dMUC9HTFBfMF9hcmVhLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJHTFAgKDApIGFyZWEiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cHM6Ly93d3cuY2lhLmdvdi9jaWEvcHVibGljYXRpb25zL2ZhY3Rib29rL2dlb3MvZ3AuaHRtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuZ2xwIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9HTFAvR0xQXzAuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkdMUCgwKSBOb2RlcyIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3Lmlzby5vcmcvaXNvL2hvbWUuaHRtIiBzcGF0aWFsPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvZ2VvL2NvdW50cnkvR0xQL0dMUF8wX01BUC54bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKworPCEtLSBHTUIgLS0+Cis8c3RlbV9jYXRlZ29yeSBpZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmdtYiIgbmFtZT0iR01CIiBwYXJlbnRfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcyIvPgorCTwhLS0gTm9kZXMgYW5kIExhYmVscyAtLT4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmdtYiIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvR01CL0dNQl8wX2FyZWEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkdNQiAoMCkgYXJlYSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwczovL3d3dy5jaWEuZ292L2NpYS9wdWJsaWNhdGlvbnMvZmFjdGJvb2svZ2Vvcy9nYS5odG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5nbWIiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L0dNQi9HTUJfMC5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iR01CKDApIE5vZGVzIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaXNvLm9yZy9pc28vaG9tZS5odG0iIHNwYXRpYWw9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9nZW8vY291bnRyeS9HTUIvR01CXzBfTUFQLnhtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuZ21iIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9HTUIvR01CXzFfYXJlYS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iR01CICgxKSBhcmVhIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHBzOi8vd3d3LmNpYS5nb3YvbGlicmFyeS9wdWJsaWNhdGlvbnMvdGhlLXdvcmxkLWZhY3Rib29rLyIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuZ21iIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9HTUIvR01CXzEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkdNQigxKSBOb2RlcyIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3Lmlzby5vcmcvaXNvL2hvbWUuaHRtIiBzcGF0aWFsPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvZ2VvL2NvdW50cnkvR01CL0dNQl8xX01BUC54bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmdtYiIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvR01CL0dNQl8yX2FyZWEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkdNQiAoMikgYXJlYSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwczovL3d3dy5jaWEuZ292L2xpYnJhcnkvcHVibGljYXRpb25zL3RoZS13b3JsZC1mYWN0Ym9vay8iIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmdtYiIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvR01CL0dNQl8yLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJHTUIoMikgTm9kZXMiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pc28ub3JnL2lzby9ob21lLmh0bSIgc3BhdGlhbD0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2dlby9jb3VudHJ5L0dNQi9HTUJfMl9NQVAueG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+CisJPCEtLSBFZGdlcyAtLT4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmdtYiIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9jb21tb25ib3JkZXIvR01CXzJfR01CXzIuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkNvbW1vbiBCb3JkZXIgcmVsYXRpb25zaGlwIHdpdGhpbiBjb3VudHJ5IEdNQiIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgdmFsaWQ9InN0YXJ0PTIwMDYtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuZ21iIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL2NvbW1vbmJvcmRlci9HTUJfMl9TRU5fMi5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQ29tbW9uIEJvcmRlciByZWxhdGlvbnNoaXAgYmV0d2VlbiBjb3VudHJ5IEdNQiBhbmQgU0VOIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiB2YWxpZD0ic3RhcnQ9MjAwNi0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5nbWIiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvcmVsYXRpdmVwaHlzaWNhbC9HTUJfMF9HTUJfMS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iUGh5c2ljYWwgY29udGFpbm1lbnQgb2YgR01CIGxldmVsICgxKSBieSBHTUIgKDApIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaWJtLmNvbSIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuZ21iIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL3JlbGF0aXZlcGh5c2ljYWwvR01CXzFfR01CXzIuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IlBoeXNpY2FsIGNvbnRhaW5tZW50IG9mIEdNQiBsZXZlbCAoMikgYnkgR01CICgxKSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3LmlibS5jb20iIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKworPCEtLSBHTkIgLS0+Cis8c3RlbV9jYXRlZ29yeSBpZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmduYiIgbmFtZT0iR05CIiBwYXJlbnRfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcyIvPgorCTwhLS0gTm9kZXMgYW5kIExhYmVscyAtLT4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmduYiIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvR05CL0dOQl8wX2FyZWEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkdOQiAoMCkgYXJlYSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwczovL3d3dy5jaWEuZ292L2NpYS9wdWJsaWNhdGlvbnMvZmFjdGJvb2svZ2Vvcy9wdS5odG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5nbmIiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L0dOQi9HTkJfMC5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iR05CKDApIE5vZGVzIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaXNvLm9yZy9pc28vaG9tZS5odG0iIHNwYXRpYWw9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9nZW8vY291bnRyeS9HTkIvR05CXzBfTUFQLnhtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuZ25iIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9HTkIvR05CXzFfYXJlYS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iR05CICgxKSBhcmVhIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5nbmIiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L0dOQi9HTkJfMS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iR05CKDEpIE5vZGVzIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaXNvLm9yZy9pc28vaG9tZS5odG0iIHNwYXRpYWw9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9nZW8vY291bnRyeS9HTkIvR05CXzFfTUFQLnhtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuZ25iIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9HTkIvR05CXzJfYXJlYS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iR05CICgyKSBhcmVhIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5nbmIiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L0dOQi9HTkJfMi5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iR05CKDIpIE5vZGVzIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaXNvLm9yZy9pc28vaG9tZS5odG0iIHNwYXRpYWw9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9nZW8vY291bnRyeS9HTkIvR05CXzJfTUFQLnhtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorCTwhLS0gRWRnZXMgLS0+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5nbmIiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvY29tbW9uYm9yZGVyL0dOQl8yX0dOQl8yLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJDb21tb24gQm9yZGVyIHJlbGF0aW9uc2hpcCB3aXRoaW4gY291bnRyeSBHTkIiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHZhbGlkPSJzdGFydD0yMDA2LTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmduYiIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9jb21tb25ib3JkZXIvR05CXzJfU0VOXzIuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkNvbW1vbiBCb3JkZXIgcmVsYXRpb25zaGlwIGJldHdlZW4gY291bnRyeSBHTkIgYW5kIFNFTiIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgdmFsaWQ9InN0YXJ0PTIwMDYtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuZ25iIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL3JlbGF0aXZlcGh5c2ljYWwvR05CXzBfR05CXzEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IlBoeXNpY2FsIGNvbnRhaW5tZW50IG9mIEdOQiBsZXZlbCAoMSkgYnkgR05CICgwKSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3LmlibS5jb20iIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmduYiIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9yZWxhdGl2ZXBoeXNpY2FsL0dOQl8xX0dOQl8yLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJQaHlzaWNhbCBjb250YWlubWVudCBvZiBHTkIgbGV2ZWwgKDIpIGJ5IEdOQiAoMSkiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pYm0uY29tIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+CisKKzwhLS0gR05RIC0tPgorPHN0ZW1fY2F0ZWdvcnkgaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5nbnEiIG5hbWU9IkdOUSIgcGFyZW50X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMiLz4KKwk8IS0tIE5vZGVzIGFuZCBMYWJlbHMgLS0+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5nbnEiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L0dOUS9HTlFfMF9hcmVhLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJHTlEgKDApIGFyZWEiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cHM6Ly93d3cuY2lhLmdvdi9jaWEvcHVibGljYXRpb25zL2ZhY3Rib29rL2dlb3MvZWsuaHRtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuZ25xIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9HTlEvR05RXzAuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkdOUSgwKSBOb2RlcyIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3Lmlzby5vcmcvaXNvL2hvbWUuaHRtIiBzcGF0aWFsPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvZ2VvL2NvdW50cnkvR05RL0dOUV8wX01BUC54bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmducSIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvR05RL0dOUV8xX2FyZWEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkdOUSAoMSkgYXJlYSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwczovL3d3dy5jaWEuZ292L2xpYnJhcnkvcHVibGljYXRpb25zL3RoZS13b3JsZC1mYWN0Ym9vay8iIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmducSIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvR05RL0dOUV8xLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJHTlEoMSkgTm9kZXMiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pc28ub3JnL2lzby9ob21lLmh0bSIgc3BhdGlhbD0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2dlby9jb3VudHJ5L0dOUS9HTlFfMV9NQVAueG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5nbnEiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L0dOUS9HTlFfMl9hcmVhLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJHTlEgKDIpIGFyZWEiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cHM6Ly93d3cuY2lhLmdvdi9saWJyYXJ5L3B1YmxpY2F0aW9ucy90aGUtd29ybGQtZmFjdGJvb2svIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5nbnEiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L0dOUS9HTlFfMi5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iR05RKDIpIE5vZGVzIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaXNvLm9yZy9pc28vaG9tZS5odG0iIHNwYXRpYWw9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9nZW8vY291bnRyeS9HTlEvR05RXzJfTUFQLnhtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorCTwhLS0gRWRnZXMgLS0+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5nbnEiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvY29tbW9uYm9yZGVyL0dOUV8yX0dOUV8yLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJDb21tb24gQm9yZGVyIHJlbGF0aW9uc2hpcCB3aXRoaW4gY291bnRyeSBHTlEiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHZhbGlkPSJzdGFydD0yMDA2LTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmducSIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9yZWxhdGl2ZXBoeXNpY2FsL0dOUV8wX0dOUV8xLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJQaHlzaWNhbCBjb250YWlubWVudCBvZiBHTlEgbGV2ZWwgKDEpIGJ5IEdOUSAoMCkiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pYm0uY29tIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5nbnEiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvcmVsYXRpdmVwaHlzaWNhbC9HTlFfMV9HTlFfMi5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iUGh5c2ljYWwgY29udGFpbm1lbnQgb2YgR05RIGxldmVsICgyKSBieSBHTlEgKDEpIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaWJtLmNvbSIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorCis8IS0tIEdSQyAtLT4KKzxzdGVtX2NhdGVnb3J5IGlkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuZ3JjIiBuYW1lPSJHUkMiIHBhcmVudF9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzIi8+CisJPCEtLSBOb2RlcyBhbmQgTGFiZWxzIC0tPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuZ3JjIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9HUkMvR1JDXzBfYXJlYS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iR1JDICgwKSBhcmVhIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHBzOi8vd3d3LmNpYS5nb3YvY2lhL3B1YmxpY2F0aW9ucy9mYWN0Ym9vay9nZW9zL2dyLmh0bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmdyYyIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvR1JDL0dSQ18wLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJHUkMoMCkgTm9kZXMiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pc28ub3JnL2lzby9ob21lLmh0bSIgc3BhdGlhbD0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2dlby9jb3VudHJ5L0dSQy9HUkNfMF9NQVAueG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5ncmMiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L0dSQy9HUkNfMV9hcmVhLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJHUkMgKDEpIGFyZWEiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5ncmlkLnVuZXAuY2gvZGF0YS9kYXRhLnBocD9jYXRlZ29yeT1odW1hbl9yZWxhdGVkIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5ncmMiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L0dSQy9HUkNfMS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iR1JDKDEpIE5vZGVzIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaXNvLm9yZy9pc28vaG9tZS5odG0iIHNwYXRpYWw9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9nZW8vY291bnRyeS9HUkMvR1JDXzFfTUFQLnhtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorCTwhLS0gRWRnZXMgLS0+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5ncmMiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvY29tbW9uYm9yZGVyL0dSQ18xX0dSQ18xLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJDb21tb24gQm9yZGVyIHJlbGF0aW9uc2hpcCB3aXRoaW4gY291bnRyeSBHUkMiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHZhbGlkPSJzdGFydD0yMDA2LTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmdyYyIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9jb21tb25ib3JkZXIvR1JDXzFfTUtEXzAuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkNvbW1vbiBCb3JkZXIgcmVsYXRpb25zaGlwIGJldHdlZW4gY291bnRyeSBHUkMgYW5kIE1LRCIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgdmFsaWQ9InN0YXJ0PTIwMDYtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuZ3JjIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL2NvbW1vbmJvcmRlci9HUkNfMV9NS0RfMi5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQ29tbW9uIEJvcmRlciByZWxhdGlvbnNoaXAgYmV0d2VlbiBjb3VudHJ5IEdSQyBhbmQgTUtEIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiB2YWxpZD0ic3RhcnQ9MjAwNi0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5ncmMiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvY29tbW9uYm9yZGVyL0dSQ18xX1NSQl8xLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJDb21tb24gQm9yZGVyIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIGNvdW50cnkgR1JDIGFuZCBTUkIiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHZhbGlkPSJzdGFydD0yMDA2LTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmdyYyIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9jb21tb25ib3JkZXIvR1JDXzFfVFVSXzIuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkNvbW1vbiBCb3JkZXIgcmVsYXRpb25zaGlwIGJldHdlZW4gY291bnRyeSBHUkMgYW5kIFRVUiIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgdmFsaWQ9InN0YXJ0PTIwMDYtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuZ3JjIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL3JlbGF0aXZlcGh5c2ljYWwvR1JDXzBfR1JDXzEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IlBoeXNpY2FsIGNvbnRhaW5tZW50IG9mIEdSQyBsZXZlbCAoMSkgYnkgR1JDICgwKSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3LmlibS5jb20iIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKworPCEtLSBHUkQgLS0+Cis8c3RlbV9jYXRlZ29yeSBpZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmdyZCIgbmFtZT0iR1JEIiBwYXJlbnRfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcyIvPgorCTwhLS0gTm9kZXMgYW5kIExhYmVscyAtLT4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmdyZCIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvR1JEL0dSRF8wX2FyZWEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkdSRCAoMCkgYXJlYSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwczovL3d3dy5jaWEuZ292L2NpYS9wdWJsaWNhdGlvbnMvZmFjdGJvb2svZ2Vvcy9nai5odG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5ncmQiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L0dSRC9HUkRfMC5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iR1JEKDApIE5vZGVzIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaXNvLm9yZy9pc28vaG9tZS5odG0iIHNwYXRpYWw9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9nZW8vY291bnRyeS9HUkQvR1JEXzBfTUFQLnhtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorCTwhLS0gRWRnZXMgLS0+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5ncmQiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvcmVsYXRpdmVwaHlzaWNhbC9HUkRfMF9HUkRfMS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iUGh5c2ljYWwgY29udGFpbm1lbnQgb2YgR1JEIGxldmVsICgxKSBieSBHUkQgKDApIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaWJtLmNvbSIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorCis8IS0tIEdSTCAtLT4KKzxzdGVtX2NhdGVnb3J5IGlkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuZ3JsIiBuYW1lPSJHUkwiIHBhcmVudF9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzIi8+CisJPCEtLSBOb2RlcyBhbmQgTGFiZWxzIC0tPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuZ3JsIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9HUkwvR1JMXzBfYXJlYS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iR1JMICgwKSBhcmVhIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHBzOi8vd3d3LmNpYS5nb3YvY2lhL3B1YmxpY2F0aW9ucy9mYWN0Ym9vay9nZW9zL2dsLmh0bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmdybCIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvR1JML0dSTF8wLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJHUkwoMCkgTm9kZXMiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pc28ub3JnL2lzby9ob21lLmh0bSIgc3BhdGlhbD0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2dlby9jb3VudHJ5L0dSTC9HUkxfMF9NQVAueG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+CisKKzwhLS0gR1RNIC0tPgorPHN0ZW1fY2F0ZWdvcnkgaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5ndG0iIG5hbWU9IkdUTSIgcGFyZW50X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMiLz4KKwk8IS0tIE5vZGVzIGFuZCBMYWJlbHMgLS0+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5ndG0iIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L0dUTS9HVE1fMF9hcmVhLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJHVE0gKDApIGFyZWEiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cHM6Ly93d3cuY2lhLmdvdi9jaWEvcHVibGljYXRpb25zL2ZhY3Rib29rL2dlb3MvZ3QuaHRtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuZ3RtIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9HVE0vR1RNXzAuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkdUTSgwKSBOb2RlcyIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3Lmlzby5vcmcvaXNvL2hvbWUuaHRtIiBzcGF0aWFsPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvZ2VvL2NvdW50cnkvR1RNL0dUTV8wX01BUC54bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKwk8IS0tIEVkZ2VzIC0tPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuZ3RtIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL2NvbW1vbmJvcmRlci9HVE1fMF9ITkRfMC5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQ29tbW9uIEJvcmRlciByZWxhdGlvbnNoaXAgYmV0d2VlbiBjb3VudHJ5IEdUTSBhbmQgSE5EIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiB2YWxpZD0ic3RhcnQ9MjAwNi0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5ndG0iIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvY29tbW9uYm9yZGVyL0dUTV8wX01FWF8xLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJDb21tb24gQm9yZGVyIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIGNvdW50cnkgR1RNIGFuZCBNRVgiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHZhbGlkPSJzdGFydD0yMDA2LTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmd0bSIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9jb21tb25ib3JkZXIvR1RNXzBfU0xWXzAuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkNvbW1vbiBCb3JkZXIgcmVsYXRpb25zaGlwIGJldHdlZW4gY291bnRyeSBHVE0gYW5kIFNMViIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgdmFsaWQ9InN0YXJ0PTIwMDYtMDEtMDE7IiAvPgorCis8IS0tIEdVRiAtLT4KKzxzdGVtX2NhdGVnb3J5IGlkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuZ3VmIiBuYW1lPSJHVUYiIHBhcmVudF9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzIi8+CisJPCEtLSBOb2RlcyBhbmQgTGFiZWxzIC0tPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuZ3VmIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9HVUYvR1VGXzBfYXJlYS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iR1VGICgwKSBhcmVhIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHBzOi8vd3d3LmNpYS5nb3YvY2lhL3B1YmxpY2F0aW9ucy9mYWN0Ym9vay9nZW9zL2ZnLmh0bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmd1ZiIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvR1VGL0dVRl8wLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJHVUYoMCkgTm9kZXMiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pc28ub3JnL2lzby9ob21lLmh0bSIgc3BhdGlhbD0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2dlby9jb3VudHJ5L0dVRi9HVUZfMF9NQVAueG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+CisJPCEtLSBFZGdlcyAtLT4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmd1ZiIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9jb21tb25ib3JkZXIvR1VGXzBfU1VSXzIuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkNvbW1vbiBCb3JkZXIgcmVsYXRpb25zaGlwIGJldHdlZW4gY291bnRyeSBHVUYgYW5kIFNVUiIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgdmFsaWQ9InN0YXJ0PTIwMDYtMDEtMDE7IiAvPgorCis8IS0tIEdVTSAtLT4KKzxzdGVtX2NhdGVnb3J5IGlkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuZ3VtIiBuYW1lPSJHVU0iIHBhcmVudF9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzIi8+CisJPCEtLSBOb2RlcyBhbmQgTGFiZWxzIC0tPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuZ3VtIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9HVU0vR1VNXzBfYXJlYS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iR1VNICgwKSBhcmVhIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHBzOi8vd3d3LmNpYS5nb3YvY2lhL3B1YmxpY2F0aW9ucy9mYWN0Ym9vay9nZW9zL2dxLmh0bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmd1bSIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvR1VNL0dVTV8wLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJHVU0oMCkgTm9kZXMiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pc28ub3JnL2lzby9ob21lLmh0bSIgc3BhdGlhbD0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2dlby9jb3VudHJ5L0dVTS9HVU1fMF9NQVAueG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+CisKKzwhLS0gR1VZIC0tPgorPHN0ZW1fY2F0ZWdvcnkgaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5ndXkiIG5hbWU9IkdVWSIgcGFyZW50X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMiLz4KKwk8IS0tIE5vZGVzIGFuZCBMYWJlbHMgLS0+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5ndXkiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L0dVWS9HVVlfMF9hcmVhLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJHVVkgKDApIGFyZWEiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cHM6Ly93d3cuY2lhLmdvdi9jaWEvcHVibGljYXRpb25zL2ZhY3Rib29rL2dlb3MvZ3kuaHRtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuZ3V5IiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9HVVkvR1VZXzAuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkdVWSgwKSBOb2RlcyIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3Lmlzby5vcmcvaXNvL2hvbWUuaHRtIiBzcGF0aWFsPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvZ2VvL2NvdW50cnkvR1VZL0dVWV8wX01BUC54bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmd1eSIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvR1VZL0dVWV8xX2FyZWEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkdVWSAoMSkgYXJlYSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwczovL3d3dy5jaWEuZ292L2xpYnJhcnkvcHVibGljYXRpb25zL3RoZS13b3JsZC1mYWN0Ym9vay8iIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmd1eSIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvR1VZL0dVWV8xLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJHVVkoMSkgTm9kZXMiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pc28ub3JnL2lzby9ob21lLmh0bSIgc3BhdGlhbD0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2dlby9jb3VudHJ5L0dVWS9HVVlfMV9NQVAueG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5ndXkiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L0dVWS9HVVlfMl9hcmVhLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJHVVkgKDIpIGFyZWEiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cHM6Ly93d3cuY2lhLmdvdi9saWJyYXJ5L3B1YmxpY2F0aW9ucy90aGUtd29ybGQtZmFjdGJvb2svIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5ndXkiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L0dVWS9HVVlfMi5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iR1VZKDIpIE5vZGVzIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaXNvLm9yZy9pc28vaG9tZS5odG0iIHNwYXRpYWw9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9nZW8vY291bnRyeS9HVVkvR1VZXzJfTUFQLnhtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorCTwhLS0gRWRnZXMgLS0+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5ndXkiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvY29tbW9uYm9yZGVyL0dVWV8yX0dVWV8yLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJDb21tb24gQm9yZGVyIHJlbGF0aW9uc2hpcCB3aXRoaW4gY291bnRyeSBHVVkiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHZhbGlkPSJzdGFydD0yMDA2LTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmd1eSIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9jb21tb25ib3JkZXIvR1VZXzJfU1VSXzIuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkNvbW1vbiBCb3JkZXIgcmVsYXRpb25zaGlwIGJldHdlZW4gY291bnRyeSBHVVkgYW5kIFNVUiIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgdmFsaWQ9InN0YXJ0PTIwMDYtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuZ3V5IiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL2NvbW1vbmJvcmRlci9HVVlfMl9WRU5fMi5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQ29tbW9uIEJvcmRlciByZWxhdGlvbnNoaXAgYmV0d2VlbiBjb3VudHJ5IEdVWSBhbmQgVkVOIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiB2YWxpZD0ic3RhcnQ9MjAwNi0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5ndXkiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvcmVsYXRpdmVwaHlzaWNhbC9HVVlfMF9HVVlfMS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iUGh5c2ljYWwgY29udGFpbm1lbnQgb2YgR1VZIGxldmVsICgxKSBieSBHVVkgKDApIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaWJtLmNvbSIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuZ3V5IiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL3JlbGF0aXZlcGh5c2ljYWwvR1VZXzFfR1VZXzIuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IlBoeXNpY2FsIGNvbnRhaW5tZW50IG9mIEdVWSBsZXZlbCAoMikgYnkgR1VZICgxKSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3LmlibS5jb20iIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKworPCEtLSBIS0cgLS0+Cis8c3RlbV9jYXRlZ29yeSBpZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmhrZyIgbmFtZT0iSEtHIiBwYXJlbnRfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcyIvPgorCTwhLS0gTm9kZXMgYW5kIExhYmVscyAtLT4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmhrZyIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvSEtHL0hLR18wX2FyZWEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkhLRyAoMCkgYXJlYSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwczovL3d3dy5jaWEuZ292L2NpYS9wdWJsaWNhdGlvbnMvZmFjdGJvb2svZ2Vvcy9oay5odG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5oa2ciIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L0hLRy9IS0dfMC5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iSEtHKDApIE5vZGVzIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaXNvLm9yZy9pc28vaG9tZS5odG0iIHNwYXRpYWw9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9nZW8vY291bnRyeS9IS0cvSEtHXzBfTUFQLnhtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorCis8IS0tIEhNRCAtLT4KKzxzdGVtX2NhdGVnb3J5IGlkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuaG1kIiBuYW1lPSJITUQiIHBhcmVudF9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzIi8+CisJPCEtLSBOb2RlcyBhbmQgTGFiZWxzIC0tPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuaG1kIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9ITUQvSE1EXzBfYXJlYS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iSE1EICgwKSBhcmVhIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHBzOi8vd3d3LmNpYS5nb3YvY2lhL3B1YmxpY2F0aW9ucy9mYWN0Ym9vay9nZW9zL2htLmh0bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmhtZCIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvSE1EL0hNRF8wLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJITUQoMCkgTm9kZXMiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pc28ub3JnL2lzby9ob21lLmh0bSIgc3BhdGlhbD0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2dlby9jb3VudHJ5L0hNRC9ITURfMF9NQVAueG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+CisKKzwhLS0gSE5EIC0tPgorPHN0ZW1fY2F0ZWdvcnkgaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5obmQiIG5hbWU9IkhORCIgcGFyZW50X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMiLz4KKwk8IS0tIE5vZGVzIGFuZCBMYWJlbHMgLS0+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5obmQiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L0hORC9ITkRfMF9hcmVhLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJITkQgKDApIGFyZWEiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cHM6Ly93d3cuY2lhLmdvdi9jaWEvcHVibGljYXRpb25zL2ZhY3Rib29rL2dlb3MvaG8uaHRtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuaG5kIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9ITkQvSE5EXzAuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkhORCgwKSBOb2RlcyIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3Lmlzby5vcmcvaXNvL2hvbWUuaHRtIiBzcGF0aWFsPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvZ2VvL2NvdW50cnkvSE5EL0hORF8wX01BUC54bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKwk8IS0tIEVkZ2VzIC0tPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuaG5kIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL2NvbW1vbmJvcmRlci9ITkRfMF9OSUNfMC5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQ29tbW9uIEJvcmRlciByZWxhdGlvbnNoaXAgYmV0d2VlbiBjb3VudHJ5IEhORCBhbmQgTklDIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiB2YWxpZD0ic3RhcnQ9MjAwNi0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5obmQiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvY29tbW9uYm9yZGVyL0hORF8wX1NMVl8wLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJDb21tb24gQm9yZGVyIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIGNvdW50cnkgSE5EIGFuZCBTTFYiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHZhbGlkPSJzdGFydD0yMDA2LTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmhuZCIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9yZWxhdGl2ZXBoeXNpY2FsL0hORF8wX0hORF8xLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJQaHlzaWNhbCBjb250YWlubWVudCBvZiBITkQgbGV2ZWwgKDEpIGJ5IEhORCAoMCkiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pYm0uY29tIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+CisKKzwhLS0gSFJWIC0tPgorPHN0ZW1fY2F0ZWdvcnkgaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5ocnYiIG5hbWU9IkhSViIgcGFyZW50X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMiLz4KKwk8IS0tIE5vZGVzIGFuZCBMYWJlbHMgLS0+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5ocnYiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L0hSVi9IUlZfMF9hcmVhLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJIUlYgKDApIGFyZWEiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cHM6Ly93d3cuY2lhLmdvdi9jaWEvcHVibGljYXRpb25zL2ZhY3Rib29rL2dlb3MvaHIuaHRtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuaHJ2IiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9IUlYvSFJWXzAuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkhSVigwKSBOb2RlcyIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3Lmlzby5vcmcvaXNvL2hvbWUuaHRtIiBzcGF0aWFsPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvZ2VvL2NvdW50cnkvSFJWL0hSVl8wX01BUC54bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmhydiIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvSFJWL0hSVl8xX2FyZWEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkhSViAoMSkgYXJlYSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3LmdyaWQudW5lcC5jaC9kYXRhL2RhdGEucGhwP2NhdGVnb3J5PWh1bWFuX3JlbGF0ZWQiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmhydiIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvSFJWL0hSVl8xLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJIUlYoMSkgTm9kZXMiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pc28ub3JnL2lzby9ob21lLmh0bSIgc3BhdGlhbD0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2dlby9jb3VudHJ5L0hSVi9IUlZfMV9NQVAueG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+CisJPCEtLSBFZGdlcyAtLT4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmhydiIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9jb21tb25ib3JkZXIvSFJWXzFfSFJWXzEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkNvbW1vbiBCb3JkZXIgcmVsYXRpb25zaGlwIHdpdGhpbiBjb3VudHJ5IEhSViIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgdmFsaWQ9InN0YXJ0PTIwMDYtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuaHJ2IiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL2NvbW1vbmJvcmRlci9IUlZfMV9IVU5fMS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQ29tbW9uIEJvcmRlciByZWxhdGlvbnNoaXAgYmV0d2VlbiBjb3VudHJ5IEhSViBhbmQgSFVOIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiB2YWxpZD0ic3RhcnQ9MjAwNi0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5ocnYiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvY29tbW9uYm9yZGVyL0hSVl8xX1NSQl8xLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJDb21tb24gQm9yZGVyIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIGNvdW50cnkgSFJWIGFuZCBTUkIiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHZhbGlkPSJzdGFydD0yMDA2LTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmhydiIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9jb21tb25ib3JkZXIvSFJWXzFfU1ZOXzEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkNvbW1vbiBCb3JkZXIgcmVsYXRpb25zaGlwIGJldHdlZW4gY291bnRyeSBIUlYgYW5kIFNWTiIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgdmFsaWQ9InN0YXJ0PTIwMDYtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuaHJ2IiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL3JlbGF0aXZlcGh5c2ljYWwvSFJWXzBfSFJWXzEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IlBoeXNpY2FsIGNvbnRhaW5tZW50IG9mIEhSViBsZXZlbCAoMSkgYnkgSFJWICgwKSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3LmlibS5jb20iIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKworPCEtLSBIVEkgLS0+Cis8c3RlbV9jYXRlZ29yeSBpZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmh0aSIgbmFtZT0iSFRJIiBwYXJlbnRfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcyIvPgorCTwhLS0gTm9kZXMgYW5kIExhYmVscyAtLT4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmh0aSIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvSFRJL0hUSV8wX2FyZWEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkhUSSAoMCkgYXJlYSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwczovL3d3dy5jaWEuZ292L2NpYS9wdWJsaWNhdGlvbnMvZmFjdGJvb2svZ2Vvcy9oYS5odG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5odGkiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L0hUSS9IVElfMC5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iSFRJKDApIE5vZGVzIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaXNvLm9yZy9pc28vaG9tZS5odG0iIHNwYXRpYWw9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9nZW8vY291bnRyeS9IVEkvSFRJXzBfTUFQLnhtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorCis8IS0tIEhVTiAtLT4KKzxzdGVtX2NhdGVnb3J5IGlkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuaHVuIiBuYW1lPSJIVU4iIHBhcmVudF9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzIi8+CisJPCEtLSBOb2RlcyBhbmQgTGFiZWxzIC0tPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuaHVuIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9IVU4vSFVOXzBfYXJlYS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iSFVOICgwKSBhcmVhIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHBzOi8vd3d3LmNpYS5nb3YvY2lhL3B1YmxpY2F0aW9ucy9mYWN0Ym9vay9nZW9zL2h1Lmh0bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmh1biIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvSFVOL0hVTl8wLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJIVU4oMCkgTm9kZXMiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pc28ub3JnL2lzby9ob21lLmh0bSIgc3BhdGlhbD0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2dlby9jb3VudHJ5L0hVTi9IVU5fMF9NQVAueG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5odW4iIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L0hVTi9IVU5fMV9hcmVhLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJIVU4gKDEpIGFyZWEiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5ncmlkLnVuZXAuY2gvZGF0YS9kYXRhLnBocD9jYXRlZ29yeT1odW1hbl9yZWxhdGVkIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5odW4iIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L0hVTi9IVU5fMS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iSFVOKDEpIE5vZGVzIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaXNvLm9yZy9pc28vaG9tZS5odG0iIHNwYXRpYWw9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9nZW8vY291bnRyeS9IVU4vSFVOXzFfTUFQLnhtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorCTwhLS0gRWRnZXMgLS0+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5odW4iIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvY29tbW9uYm9yZGVyL0hVTl8wX1VLUl8wLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJDb21tb24gQm9yZGVyIGJldHdlZW4gY291bnRyeSBIVU4gYW5kIFVLUiIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgdmFsaWQ9InN0YXJ0PTIwMDEtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuaHVuIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL2NvbW1vbmJvcmRlci9IVU5fMF9VS1JfMS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQ29tbW9uIEJvcmRlciBiZXR3ZWVuIGNvdW50cnkgSFVOIGFuZCBVS1IiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHZhbGlkPSJzdGFydD0yMDAxLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmh1biIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9jb21tb25ib3JkZXIvSFVOXzFfSFVOXzEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkNvbW1vbiBCb3JkZXIgcmVsYXRpb25zaGlwIHdpdGhpbiBjb3VudHJ5IEhVTiIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgdmFsaWQ9InN0YXJ0PTIwMDYtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuaHVuIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL2NvbW1vbmJvcmRlci9IVU5fMV9ST1VfMS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQ29tbW9uIEJvcmRlciByZWxhdGlvbnNoaXAgYmV0d2VlbiBjb3VudHJ5IEhVTiBhbmQgUk9VIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiB2YWxpZD0ic3RhcnQ9MjAwNi0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5odW4iIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvY29tbW9uYm9yZGVyL0hVTl8xX1NSQl8xLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJDb21tb24gQm9yZGVyIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIGNvdW50cnkgSFVOIGFuZCBTUkIiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHZhbGlkPSJzdGFydD0yMDA2LTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmh1biIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9jb21tb25ib3JkZXIvSFVOXzFfU1ZOXzEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkNvbW1vbiBCb3JkZXIgcmVsYXRpb25zaGlwIGJldHdlZW4gY291bnRyeSBIVU4gYW5kIFNWTiIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgdmFsaWQ9InN0YXJ0PTIwMDYtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuaHVuIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL2NvbW1vbmJvcmRlci9IVU5fMV9VS1JfMC5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQ29tbW9uIEJvcmRlciBiZXR3ZWVuIGNvdW50cnkgSFVOIGFuZCBVS1IiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHZhbGlkPSJzdGFydD0yMDAxLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmh1biIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9jb21tb25ib3JkZXIvSFVOXzFfVUtSXzEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkNvbW1vbiBCb3JkZXIgYmV0d2VlbiBjb3VudHJ5IEhVTiBhbmQgVUtSIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiB2YWxpZD0ic3RhcnQ9MjAwMS0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5odW4iIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvcmVsYXRpdmVwaHlzaWNhbC9IVU5fMF9IVU5fMS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iUGh5c2ljYWwgY29udGFpbm1lbnQgb2YgSFVOIGxldmVsICgxKSBieSBIVU4gKDApIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaWJtLmNvbSIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorCis8IS0tIElETiAtLT4KKzxzdGVtX2NhdGVnb3J5IGlkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuaWRuIiBuYW1lPSJJRE4iIHBhcmVudF9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzIi8+CisJPCEtLSBOb2RlcyBhbmQgTGFiZWxzIC0tPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuaWRuIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9JRE4vSUROXzBfYXJlYS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iSUROICgwKSBhcmVhIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHBzOi8vd3d3LmNpYS5nb3YvY2lhL3B1YmxpY2F0aW9ucy9mYWN0Ym9vay9nZW9zL2lkLmh0bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmlkbiIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvSUROL0lETl8wLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJJRE4oMCkgTm9kZXMiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pc28ub3JnL2lzby9ob21lLmh0bSIgc3BhdGlhbD0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2dlby9jb3VudHJ5L0lETi9JRE5fMF9NQVAueG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5pZG4iIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L0lETi9JRE5fMV9hcmVhLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJJRE4gKDEpIGFyZWEiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cHM6Ly93d3cuY2lhLmdvdi9saWJyYXJ5L3B1YmxpY2F0aW9ucy90aGUtd29ybGQtZmFjdGJvb2svIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5pZG4iIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L0lETi9JRE5fMS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iSUROKDEpIE5vZGVzIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaXNvLm9yZy9pc28vaG9tZS5odG0iIHNwYXRpYWw9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9nZW8vY291bnRyeS9JRE4vSUROXzFfTUFQLnhtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuaWRuIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9JRE4vSUROXzJfYXJlYS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iSUROICgyKSBhcmVhIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHBzOi8vd3d3LmNpYS5nb3YvbGlicmFyeS9wdWJsaWNhdGlvbnMvdGhlLXdvcmxkLWZhY3Rib29rLyIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuaWRuIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9JRE4vSUROXzIuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IklETigyKSBOb2RlcyIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3Lmlzby5vcmcvaXNvL2hvbWUuaHRtIiBzcGF0aWFsPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvZ2VvL2NvdW50cnkvSUROL0lETl8yX01BUC54bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKwk8IS0tIEVkZ2VzIC0tPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuaWRuIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL2NvbW1vbmJvcmRlci9JRE5fMl9JRE5fMi5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQ29tbW9uIEJvcmRlciByZWxhdGlvbnNoaXAgd2l0aGluIGNvdW50cnkgSUROIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiB2YWxpZD0ic3RhcnQ9MjAwNi0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5pZG4iIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvY29tbW9uYm9yZGVyL0lETl8yX01ZU18wLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJDb21tb24gQm9yZGVyIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIGNvdW50cnkgSUROIGFuZCBNWVMiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHZhbGlkPSJzdGFydD0yMDA2LTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmlkbiIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9jb21tb25ib3JkZXIvSUROXzJfUE5HXzAuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkNvbW1vbiBCb3JkZXIgcmVsYXRpb25zaGlwIGJldHdlZW4gY291bnRyeSBJRE4gYW5kIFBORyIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgdmFsaWQ9InN0YXJ0PTIwMDYtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuaWRuIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL2NvbW1vbmJvcmRlci9JRE5fMl9QTkdfMi5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQ29tbW9uIEJvcmRlciByZWxhdGlvbnNoaXAgYmV0d2VlbiBjb3VudHJ5IElETiBhbmQgUE5HIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiB2YWxpZD0ic3RhcnQ9MjAwNi0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5pZG4iIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvcmVsYXRpdmVwaHlzaWNhbC9JRE5fMF9JRE5fMS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iUGh5c2ljYWwgY29udGFpbm1lbnQgb2YgSUROIGxldmVsICgxKSBieSBJRE4gKDApIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaWJtLmNvbSIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuaWRuIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL3JlbGF0aXZlcGh5c2ljYWwvSUROXzFfSUROXzIuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IlBoeXNpY2FsIGNvbnRhaW5tZW50IG9mIElETiBsZXZlbCAoMikgYnkgSUROICgxKSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3LmlibS5jb20iIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKworPCEtLSBJTU4gLS0+Cis8c3RlbV9jYXRlZ29yeSBpZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmltbiIgbmFtZT0iSU1OIiBwYXJlbnRfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcyIvPgorCTwhLS0gTm9kZXMgYW5kIExhYmVscyAtLT4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmltbiIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvSU1OL0lNTl8wX2FyZWEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IklNTiAoMCkgYXJlYSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwczovL3d3dy5jaWEuZ292L2NpYS9wdWJsaWNhdGlvbnMvZmFjdGJvb2svZ2Vvcy9pbS5odG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5pbW4iIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L0lNTi9JTU5fMC5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iSU1OKDApIE5vZGVzIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaXNvLm9yZy9pc28vaG9tZS5odG0iIHNwYXRpYWw9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9nZW8vY291bnRyeS9JTU4vSU1OXzBfTUFQLnhtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorCis8IS0tIElORCAtLT4KKzxzdGVtX2NhdGVnb3J5IGlkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuaW5kIiBuYW1lPSJJTkQiIHBhcmVudF9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzIi8+CisJPCEtLSBOb2RlcyBhbmQgTGFiZWxzIC0tPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuaW5kIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9JTkQvSU5EXzBfYXJlYS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iSU5EICgwKSBhcmVhIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHBzOi8vd3d3LmNpYS5nb3YvY2lhL3B1YmxpY2F0aW9ucy9mYWN0Ym9vay9nZW9zL2luLmh0bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmluZCIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvSU5EL0lORF8wLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJJTkQoMCkgTm9kZXMiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pc28ub3JnL2lzby9ob21lLmh0bSIgc3BhdGlhbD0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2dlby9jb3VudHJ5L0lORC9JTkRfMF9NQVAueG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5pbmQiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L0lORC9JTkRfMV9hcmVhLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJJTkQgKDEpIGFyZWEiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cHM6Ly93d3cuY2lhLmdvdi9saWJyYXJ5L3B1YmxpY2F0aW9ucy90aGUtd29ybGQtZmFjdGJvb2svIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5pbmQiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L0lORC9JTkRfMS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iSU5EKDEpIE5vZGVzIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaXNvLm9yZy9pc28vaG9tZS5odG0iIHNwYXRpYWw9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9nZW8vY291bnRyeS9JTkQvSU5EXzFfTUFQLnhtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuaW5kIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9JTkQvSU5EXzJfYXJlYS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iSU5EICgyKSBhcmVhIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHBzOi8vd3d3LmNpYS5nb3YvbGlicmFyeS9wdWJsaWNhdGlvbnMvdGhlLXdvcmxkLWZhY3Rib29rLyIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuaW5kIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9JTkQvSU5EXzIuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IklORCgyKSBOb2RlcyIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3Lmlzby5vcmcvaXNvL2hvbWUuaHRtIiBzcGF0aWFsPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvZ2VvL2NvdW50cnkvSU5EL0lORF8yX01BUC54bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKwk8IS0tIEVkZ2VzIC0tPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuaW5kIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL2NvbW1vbmJvcmRlci9JTkRfMl9JTkRfMi5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQ29tbW9uIEJvcmRlciByZWxhdGlvbnNoaXAgd2l0aGluIGNvdW50cnkgSU5EIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiB2YWxpZD0ic3RhcnQ9MjAwNi0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5pbmQiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvY29tbW9uYm9yZGVyL0lORF8yX05QTF8yLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJDb21tb24gQm9yZGVyIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIGNvdW50cnkgSU5EIGFuZCBOUEwiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHZhbGlkPSJzdGFydD0yMDA2LTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmluZCIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9jb21tb25ib3JkZXIvSU5EXzJfUEFLXzIuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkNvbW1vbiBCb3JkZXIgcmVsYXRpb25zaGlwIGJldHdlZW4gY291bnRyeSBJTkQgYW5kIFBBSyIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgdmFsaWQ9InN0YXJ0PTIwMDYtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuaW5kIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL3JlbGF0aXZlcGh5c2ljYWwvSU5EXzBfSU5EXzEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IlBoeXNpY2FsIGNvbnRhaW5tZW50IG9mIElORCBsZXZlbCAoMSkgYnkgSU5EICgwKSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3LmlibS5jb20iIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmluZCIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9yZWxhdGl2ZXBoeXNpY2FsL0lORF8xX0lORF8yLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJQaHlzaWNhbCBjb250YWlubWVudCBvZiBJTkQgbGV2ZWwgKDIpIGJ5IElORCAoMSkiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pYm0uY29tIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+CisKKzwhLS0gSU9UIC0tPgorPHN0ZW1fY2F0ZWdvcnkgaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5pb3QiIG5hbWU9IklPVCIgcGFyZW50X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMiLz4KKwk8IS0tIE5vZGVzIGFuZCBMYWJlbHMgLS0+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5pb3QiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L0lPVC9JT1RfMF9hcmVhLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJJT1QgKDApIGFyZWEiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cHM6Ly93d3cuY2lhLmdvdi9jaWEvcHVibGljYXRpb25zL2ZhY3Rib29rL2dlb3MvaW8uaHRtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuaW90IiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9JT1QvSU9UXzAuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IklPVCgwKSBOb2RlcyIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3Lmlzby5vcmcvaXNvL2hvbWUuaHRtIiBzcGF0aWFsPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvZ2VvL2NvdW50cnkvSU9UL0lPVF8wX01BUC54bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKworPCEtLSBJUkwgLS0+Cis8c3RlbV9jYXRlZ29yeSBpZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmlybCIgbmFtZT0iSVJMIiBwYXJlbnRfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcyIvPgorCTwhLS0gTm9kZXMgYW5kIExhYmVscyAtLT4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmlybCIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvSVJML0lSTF8wX2FyZWEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IklSTCAoMCkgYXJlYSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwczovL3d3dy5jaWEuZ292L2NpYS9wdWJsaWNhdGlvbnMvZmFjdGJvb2svZ2Vvcy9laS5odG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5pcmwiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L0lSTC9JUkxfMC5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iSVJMKDApIE5vZGVzIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaXNvLm9yZy9pc28vaG9tZS5odG0iIHNwYXRpYWw9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9nZW8vY291bnRyeS9JUkwvSVJMXzBfTUFQLnhtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuaXJsIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9JUkwvSVJMXzFfYXJlYS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iSVJMICgxKSBhcmVhIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuZ3JpZC51bmVwLmNoL2RhdGEvZGF0YS5waHA/Y2F0ZWdvcnk9aHVtYW5fcmVsYXRlZCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuaXJsIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9JUkwvSVJMXzEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IklSTCgxKSBOb2RlcyIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3Lmlzby5vcmcvaXNvL2hvbWUuaHRtIiBzcGF0aWFsPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvZ2VvL2NvdW50cnkvSVJML0lSTF8xX01BUC54bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKwk8IS0tIEVkZ2VzIC0tPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuaXJsIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL2NvbW1vbmJvcmRlci9JUkxfMV9JUkxfMS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQ29tbW9uIEJvcmRlciByZWxhdGlvbnNoaXAgd2l0aGluIGNvdW50cnkgSVJMIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiB2YWxpZD0ic3RhcnQ9MjAwNi0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5pcmwiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvcmVsYXRpdmVwaHlzaWNhbC9JUkxfMF9JUkxfMS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iUGh5c2ljYWwgY29udGFpbm1lbnQgb2YgSVJMIGxldmVsICgxKSBieSBJUkwgKDApIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaWJtLmNvbSIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorCis8IS0tIElSTiAtLT4KKzxzdGVtX2NhdGVnb3J5IGlkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuaXJuIiBuYW1lPSJJUk4iIHBhcmVudF9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzIi8+CisJPCEtLSBOb2RlcyBhbmQgTGFiZWxzIC0tPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuaXJuIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9JUk4vSVJOXzBfYXJlYS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iSVJOICgwKSBhcmVhIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHBzOi8vd3d3LmNpYS5nb3YvY2lhL3B1YmxpY2F0aW9ucy9mYWN0Ym9vay9nZW9zL2lyLmh0bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmlybiIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvSVJOL0lSTl8wLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJJUk4oMCkgTm9kZXMiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pc28ub3JnL2lzby9ob21lLmh0bSIgc3BhdGlhbD0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2dlby9jb3VudHJ5L0lSTi9JUk5fMF9NQVAueG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5pcm4iIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L0lSTi9JUk5fMV9hcmVhLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJJUk4gKDEpIGFyZWEiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cHM6Ly93d3cuY2lhLmdvdi9saWJyYXJ5L3B1YmxpY2F0aW9ucy90aGUtd29ybGQtZmFjdGJvb2svIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5pcm4iIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L0lSTi9JUk5fMS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iSVJOKDEpIE5vZGVzIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaXNvLm9yZy9pc28vaG9tZS5odG0iIHNwYXRpYWw9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9nZW8vY291bnRyeS9JUk4vSVJOXzFfTUFQLnhtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuaXJuIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9JUk4vSVJOXzJfYXJlYS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iSVJOICgyKSBhcmVhIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHBzOi8vd3d3LmNpYS5nb3YvbGlicmFyeS9wdWJsaWNhdGlvbnMvdGhlLXdvcmxkLWZhY3Rib29rLyIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuaXJuIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9JUk4vSVJOXzIuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IklSTigyKSBOb2RlcyIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3Lmlzby5vcmcvaXNvL2hvbWUuaHRtIiBzcGF0aWFsPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvZ2VvL2NvdW50cnkvSVJOL0lSTl8yX01BUC54bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKwk8IS0tIEVkZ2VzIC0tPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuaXJuIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL2NvbW1vbmJvcmRlci9JUk5fMl9JUk5fMi5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQ29tbW9uIEJvcmRlciByZWxhdGlvbnNoaXAgd2l0aGluIGNvdW50cnkgSVJOIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiB2YWxpZD0ic3RhcnQ9MjAwNi0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5pcm4iIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvY29tbW9uYm9yZGVyL0lSTl8yX0lSUV8yLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJDb21tb24gQm9yZGVyIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIGNvdW50cnkgSVJOIGFuZCBJUlEiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHZhbGlkPSJzdGFydD0yMDA2LTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmlybiIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9jb21tb25ib3JkZXIvSVJOXzJfUEFLXzIuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkNvbW1vbiBCb3JkZXIgcmVsYXRpb25zaGlwIGJldHdlZW4gY291bnRyeSBJUk4gYW5kIFBBSyIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgdmFsaWQ9InN0YXJ0PTIwMDYtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuaXJuIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL2NvbW1vbmJvcmRlci9JUk5fMl9US01fMi5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQ29tbW9uIEJvcmRlciByZWxhdGlvbnNoaXAgYmV0d2VlbiBjb3VudHJ5IElSTiBhbmQgVEtNIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiB2YWxpZD0ic3RhcnQ9MjAwNi0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5pcm4iIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvY29tbW9uYm9yZGVyL0lSTl8yX1RVUl8yLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJDb21tb24gQm9yZGVyIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIGNvdW50cnkgSVJOIGFuZCBUVVIiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHZhbGlkPSJzdGFydD0yMDA2LTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmlybiIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9yZWxhdGl2ZXBoeXNpY2FsL0lSTl8wX0lSTl8xLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJQaHlzaWNhbCBjb250YWlubWVudCBvZiBJUk4gbGV2ZWwgKDEpIGJ5IElSTiAoMCkiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pYm0uY29tIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5pcm4iIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvcmVsYXRpdmVwaHlzaWNhbC9JUk5fMV9JUk5fMi5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iUGh5c2ljYWwgY29udGFpbm1lbnQgb2YgSVJOIGxldmVsICgyKSBieSBJUk4gKDEpIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaWJtLmNvbSIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorCis8IS0tIElSUSAtLT4KKzxzdGVtX2NhdGVnb3J5IGlkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuaXJxIiBuYW1lPSJJUlEiIHBhcmVudF9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzIi8+CisJPCEtLSBOb2RlcyBhbmQgTGFiZWxzIC0tPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuaXJxIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9JUlEvSVJRXzBfYXJlYS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iSVJRICgwKSBhcmVhIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHBzOi8vd3d3LmNpYS5nb3YvY2lhL3B1YmxpY2F0aW9ucy9mYWN0Ym9vay9nZW9zL2l6Lmh0bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmlycSIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvSVJRL0lSUV8wLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJJUlEoMCkgTm9kZXMiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pc28ub3JnL2lzby9ob21lLmh0bSIgc3BhdGlhbD0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2dlby9jb3VudHJ5L0lSUS9JUlFfMF9NQVAueG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5pcnEiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L0lSUS9JUlFfMV9hcmVhLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJJUlEgKDEpIGFyZWEiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cHM6Ly93d3cuY2lhLmdvdi9saWJyYXJ5L3B1YmxpY2F0aW9ucy90aGUtd29ybGQtZmFjdGJvb2svIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5pcnEiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L0lSUS9JUlFfMS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iSVJRKDEpIE5vZGVzIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaXNvLm9yZy9pc28vaG9tZS5odG0iIHNwYXRpYWw9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9nZW8vY291bnRyeS9JUlEvSVJRXzFfTUFQLnhtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuaXJxIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9JUlEvSVJRXzJfYXJlYS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iSVJRICgyKSBhcmVhIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHBzOi8vd3d3LmNpYS5nb3YvbGlicmFyeS9wdWJsaWNhdGlvbnMvdGhlLXdvcmxkLWZhY3Rib29rLyIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuaXJxIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9JUlEvSVJRXzIuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IklSUSgyKSBOb2RlcyIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3Lmlzby5vcmcvaXNvL2hvbWUuaHRtIiBzcGF0aWFsPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvZ2VvL2NvdW50cnkvSVJRL0lSUV8yX01BUC54bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKwk8IS0tIEVkZ2VzIC0tPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuaXJxIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL2NvbW1vbmJvcmRlci9JUlFfMl9JUlFfMi5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQ29tbW9uIEJvcmRlciByZWxhdGlvbnNoaXAgd2l0aGluIGNvdW50cnkgSVJRIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiB2YWxpZD0ic3RhcnQ9MjAwNi0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5pcnEiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvY29tbW9uYm9yZGVyL0lSUV8yX0pPUl8yLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJDb21tb24gQm9yZGVyIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIGNvdW50cnkgSVJRIGFuZCBKT1IiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHZhbGlkPSJzdGFydD0yMDA2LTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmlycSIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9jb21tb25ib3JkZXIvSVJRXzJfS1dUXzIuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkNvbW1vbiBCb3JkZXIgcmVsYXRpb25zaGlwIGJldHdlZW4gY291bnRyeSBJUlEgYW5kIEtXVCIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgdmFsaWQ9InN0YXJ0PTIwMDYtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuaXJxIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL2NvbW1vbmJvcmRlci9JUlFfMl9TQVVfMi5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQ29tbW9uIEJvcmRlciByZWxhdGlvbnNoaXAgYmV0d2VlbiBjb3VudHJ5IElSUSBhbmQgU0FVIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiB2YWxpZD0ic3RhcnQ9MjAwNi0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5pcnEiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvY29tbW9uYm9yZGVyL0lSUV8yX1NZUl8yLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJDb21tb24gQm9yZGVyIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIGNvdW50cnkgSVJRIGFuZCBTWVIiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHZhbGlkPSJzdGFydD0yMDA2LTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmlycSIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9jb21tb25ib3JkZXIvSVJRXzJfVFVSXzIuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkNvbW1vbiBCb3JkZXIgcmVsYXRpb25zaGlwIGJldHdlZW4gY291bnRyeSBJUlEgYW5kIFRVUiIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgdmFsaWQ9InN0YXJ0PTIwMDYtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuaXJxIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL3JlbGF0aXZlcGh5c2ljYWwvSVJRXzBfSVJRXzEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IlBoeXNpY2FsIGNvbnRhaW5tZW50IG9mIElSUSBsZXZlbCAoMSkgYnkgSVJRICgwKSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3LmlibS5jb20iIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmlycSIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9yZWxhdGl2ZXBoeXNpY2FsL0lSUV8xX0lSUV8yLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJQaHlzaWNhbCBjb250YWlubWVudCBvZiBJUlEgbGV2ZWwgKDIpIGJ5IElSUSAoMSkiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pYm0uY29tIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+CisKKzwhLS0gSVNMIC0tPgorPHN0ZW1fY2F0ZWdvcnkgaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5pc2wiIG5hbWU9IklTTCIgcGFyZW50X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMiLz4KKwk8IS0tIE5vZGVzIGFuZCBMYWJlbHMgLS0+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5pc2wiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L0lTTC9JU0xfMF9hcmVhLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJJU0wgKDApIGFyZWEiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cHM6Ly93d3cuY2lhLmdvdi9jaWEvcHVibGljYXRpb25zL2ZhY3Rib29rL2dlb3MvaWMuaHRtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuaXNsIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9JU0wvSVNMXzAuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IklTTCgwKSBOb2RlcyIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3Lmlzby5vcmcvaXNvL2hvbWUuaHRtIiBzcGF0aWFsPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvZ2VvL2NvdW50cnkvSVNML0lTTF8wX01BUC54bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmlzbCIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvSVNML0lTTF8xX2FyZWEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IklTTCAoMSkgYXJlYSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3LmdyaWQudW5lcC5jaC9kYXRhL2RhdGEucGhwP2NhdGVnb3J5PWh1bWFuX3JlbGF0ZWQiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmlzbCIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvSVNML0lTTF8xLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJJU0woMSkgTm9kZXMiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNwYXRpYWw9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9nZW8vY291bnRyeS9JU0wvSVNMXzFfTUFQLnhtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorCTwhLS0gRWRnZXMgLS0+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5pc2wiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvY29tbW9uYm9yZGVyL0lTTF8xX0lTTF8xLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJDb21tb24gQm9yZGVyIHJlbGF0aW9uc2hpcCB3aXRoaW4gY291bnRyeSBJU0wiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHZhbGlkPSJzdGFydD0yMDA2LTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmlzbCIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9yZWxhdGl2ZXBoeXNpY2FsL0lTTF8wX0lTTF8xLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJQaHlzaWNhbCBjb250YWlubWVudCBvZiBJU0wgbGV2ZWwgKDEpIGJ5IElTTCAoMCkiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pYm0uY29tIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+CisKKzwhLS0gSVNSIC0tPgorPHN0ZW1fY2F0ZWdvcnkgaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5pc3IiIG5hbWU9IklTUiIgcGFyZW50X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMiLz4KKwk8IS0tIE5vZGVzIGFuZCBMYWJlbHMgLS0+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5pc3IiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L0lTUi9JU1JfMF9hcmVhLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJJU1IgKDApIGFyZWEiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cHM6Ly93d3cuY2lhLmdvdi9jaWEvcHVibGljYXRpb25zL2ZhY3Rib29rL2dlb3MvaXMuaHRtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuaXNyIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9JU1IvSVNSXzAuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IklTUigwKSBOb2RlcyIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3Lmlzby5vcmcvaXNvL2hvbWUuaHRtIiBzcGF0aWFsPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvZ2VvL2NvdW50cnkvSVNSL0lTUl8wX01BUC54bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmlzciIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvSVNSL0lTUl8xX2FyZWEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IklTUiAoMSkgYXJlYSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJJc3JhZWwgQ0RDIGJpdG1hcCAoU2Nhbm5lZCkiIHZhbGlkPSJzdGFydD0yMDAxLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmlzciIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvSVNSL0lTUl8xLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJJU1IoMSkgTm9kZXMiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pc28ub3JnL2lzby9ob21lLmh0bSIgc3BhdGlhbD0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2dlby9jb3VudHJ5L0lTUi9JU1JfMV9NQVAueG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5pc3IiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L0lTUi9JU1JfMl9hcmVhLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJJU1IgKDIpIGFyZWEiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iSXNyYWVsIENEQyBiaXRtYXAgKFNjYW5uZWQpIiB2YWxpZD0ic3RhcnQ9MjAwMS0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5pc3IiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L0lTUi9JU1JfMi5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iSVNSKDIpIE5vZGVzIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaXNvLm9yZy9pc28vaG9tZS5odG0iIHNwYXRpYWw9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9nZW8vY291bnRyeS9JU1IvSVNSXzJfTUFQLnhtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorCTwhLS0gRWRnZXMgLS0+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5pc3IiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvY29tbW9uYm9yZGVyL0lTUl8yX0lTUl8yLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJDb21tb24gQm9yZGVyIHJlbGF0aW9uc2hpcCB3aXRoaW4gY291bnRyeSBJU1IiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHZhbGlkPSJzdGFydD0yMDA2LTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmlzciIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9jb21tb25ib3JkZXIvSVNSXzJfSk9SXzIuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkNvbW1vbiBCb3JkZXIgcmVsYXRpb25zaGlwIGJldHdlZW4gY291bnRyeSBJU1IgYW5kIEpPUiIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgdmFsaWQ9InN0YXJ0PTIwMDYtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuaXNyIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL2NvbW1vbmJvcmRlci9JU1JfMl9MQk5fMi5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQ29tbW9uIEJvcmRlciByZWxhdGlvbnNoaXAgYmV0d2VlbiBjb3VudHJ5IElTUiBhbmQgTEJOIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiB2YWxpZD0ic3RhcnQ9MjAwNi0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5pc3IiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvY29tbW9uYm9yZGVyL0lTUl8yX1BTRV8xLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJDb21tb24gQm9yZGVyIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIGNvdW50cnkgSVNSIGFuZCBQU0UiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHZhbGlkPSJzdGFydD0yMDA2LTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmlzciIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9jb21tb25ib3JkZXIvSVNSXzJfU1lSXzIuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkNvbW1vbiBCb3JkZXIgcmVsYXRpb25zaGlwIGJldHdlZW4gY291bnRyeSBJU1IgYW5kIFNZUiIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgdmFsaWQ9InN0YXJ0PTIwMDYtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuaXNyIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL3JlbGF0aXZlcGh5c2ljYWwvSVNSXzBfSVNSXzEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IlBoeXNpY2FsIGNvbnRhaW5tZW50IG9mIElTUiBsZXZlbCAoMSkgYnkgSVNSICgwKSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3LmlibS5jb20iIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmlzciIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9yZWxhdGl2ZXBoeXNpY2FsL0lTUl8xX0lTUl8yLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJQaHlzaWNhbCBjb250YWlubWVudCBvZiBJU1IgbGV2ZWwgKDIpIGJ5IElTUiAoMSkiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pYm0uY29tIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+CisKKzwhLS0gSVRBIC0tPgorPHN0ZW1fY2F0ZWdvcnkgaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5pdGEiIG5hbWU9IklUQSIgcGFyZW50X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMiLz4KKwk8IS0tIE5vZGVzIGFuZCBMYWJlbHMgLS0+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5pdGEiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L0lUQS9JVEFfMF9hcmVhLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJJVEEgKDApIGFyZWEiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cHM6Ly93d3cuY2lhLmdvdi9jaWEvcHVibGljYXRpb25zL2ZhY3Rib29rL2dlb3MvaXQuaHRtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuaXRhIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9JVEEvSVRBXzAuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IklUQSgwKSBOb2RlcyIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3Lmlzby5vcmcvaXNvL2hvbWUuaHRtIiBzcGF0aWFsPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvZ2VvL2NvdW50cnkvSVRBL0lUQV8wX01BUC54bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLml0YSIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvSVRBL0lUQV8xX2FyZWEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IklUQSAoMSkgYXJlYSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3LmdyaWQudW5lcC5jaC9kYXRhL2RhdGEucGhwP2NhdGVnb3J5PWh1bWFuX3JlbGF0ZWQiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLml0YSIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvSVRBL0lUQV8xLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJJVEEoMSkgTm9kZXMiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pc28ub3JnL2lzby9ob21lLmh0bSIgc3BhdGlhbD0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2dlby9jb3VudHJ5L0lUQS9JVEFfMV9NQVAueG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+CisJPCEtLSBFZGdlcyAtLT4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLml0YSIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9jb21tb25ib3JkZXIvSVRBXzFfSVRBXzEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkNvbW1vbiBCb3JkZXIgcmVsYXRpb25zaGlwIHdpdGhpbiBjb3VudHJ5IElUQSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgdmFsaWQ9InN0YXJ0PTIwMDYtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuaXRhIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL2NvbW1vbmJvcmRlci9JVEFfMV9TTVJfMS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQ29tbW9uIEJvcmRlciByZWxhdGlvbnNoaXAgYmV0d2VlbiBjb3VudHJ5IElUQSBhbmQgU01SIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiB2YWxpZD0ic3RhcnQ9MjAwNi0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5pdGEiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvY29tbW9uYm9yZGVyL0lUQV8xX1NWTl8xLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJDb21tb24gQm9yZGVyIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIGNvdW50cnkgSVRBIGFuZCBTVk4iIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHZhbGlkPSJzdGFydD0yMDA2LTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLml0YSIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9yZWxhdGl2ZXBoeXNpY2FsL0lUQV8wX0lUQV8xLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJQaHlzaWNhbCBjb250YWlubWVudCBvZiBJVEEgbGV2ZWwgKDEpIGJ5IElUQSAoMCkiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pYm0uY29tIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+CisKKzwhLS0gSkFNIC0tPgorPHN0ZW1fY2F0ZWdvcnkgaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5qYW0iIG5hbWU9IkpBTSIgcGFyZW50X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMiLz4KKwk8IS0tIE5vZGVzIGFuZCBMYWJlbHMgLS0+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5qYW0iIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L0pBTS9KQU1fMF9hcmVhLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJKQU0gKDApIGFyZWEiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cHM6Ly93d3cuY2lhLmdvdi9jaWEvcHVibGljYXRpb25zL2ZhY3Rib29rL2dlb3Mvam0uaHRtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuamFtIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9KQU0vSkFNXzAuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkpBTSgwKSBOb2RlcyIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3Lmlzby5vcmcvaXNvL2hvbWUuaHRtIiBzcGF0aWFsPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvZ2VvL2NvdW50cnkvSkFNL0pBTV8wX01BUC54bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKworPCEtLSBKRVkgLS0+Cis8c3RlbV9jYXRlZ29yeSBpZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmpleSIgbmFtZT0iSkVZIiBwYXJlbnRfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcyIvPgorCTwhLS0gTm9kZXMgYW5kIExhYmVscyAtLT4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmpleSIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvSkVZL0pFWV8wX2FyZWEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkpFWSAoMCkgYXJlYSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwczovL3d3dy5jaWEuZ292L2NpYS9wdWJsaWNhdGlvbnMvZmFjdGJvb2svZ2Vvcy9qZS5odG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5qZXkiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L0pFWS9KRVlfMC5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iSkVZKDApIE5vZGVzIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaXNvLm9yZy9pc28vaG9tZS5odG0iIHNwYXRpYWw9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9nZW8vY291bnRyeS9KRVkvSkVZXzBfTUFQLnhtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorCis8IS0tIEpPUiAtLT4KKzxzdGVtX2NhdGVnb3J5IGlkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuam9yIiBuYW1lPSJKT1IiIHBhcmVudF9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzIi8+CisJPCEtLSBOb2RlcyBhbmQgTGFiZWxzIC0tPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuam9yIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9KT1IvSk9SXzBfYXJlYS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iSk9SICgwKSBhcmVhIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHBzOi8vd3d3LmNpYS5nb3YvY2lhL3B1YmxpY2F0aW9ucy9mYWN0Ym9vay9nZW9zL2pvLmh0bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmpvciIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvSk9SL0pPUl8wLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJKT1IoMCkgTm9kZXMiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pc28ub3JnL2lzby9ob21lLmh0bSIgc3BhdGlhbD0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2dlby9jb3VudHJ5L0pPUi9KT1JfMF9NQVAueG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5qb3IiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L0pPUi9KT1JfMV9hcmVhLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJKT1IgKDEpIGFyZWEiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cHM6Ly93d3cuY2lhLmdvdi9saWJyYXJ5L3B1YmxpY2F0aW9ucy90aGUtd29ybGQtZmFjdGJvb2svIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5qb3IiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L0pPUi9KT1JfMS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iSk9SKDEpIE5vZGVzIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaXNvLm9yZy9pc28vaG9tZS5odG0iIHNwYXRpYWw9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9nZW8vY291bnRyeS9KT1IvSk9SXzFfTUFQLnhtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuam9yIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9KT1IvSk9SXzJfYXJlYS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iSk9SICgyKSBhcmVhIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHBzOi8vd3d3LmNpYS5nb3YvbGlicmFyeS9wdWJsaWNhdGlvbnMvdGhlLXdvcmxkLWZhY3Rib29rLyIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuam9yIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9KT1IvSk9SXzIuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkpPUigyKSBOb2RlcyIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3Lmlzby5vcmcvaXNvL2hvbWUuaHRtIiBzcGF0aWFsPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvZ2VvL2NvdW50cnkvSk9SL0pPUl8yX01BUC54bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKwk8IS0tIEVkZ2VzIC0tPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuam9yIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL2NvbW1vbmJvcmRlci9KT1JfMl9KT1JfMi5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQ29tbW9uIEJvcmRlciByZWxhdGlvbnNoaXAgd2l0aGluIGNvdW50cnkgSk9SIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiB2YWxpZD0ic3RhcnQ9MjAwNi0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5qb3IiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvY29tbW9uYm9yZGVyL0pPUl8yX1BTRV8xLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJDb21tb24gQm9yZGVyIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIGNvdW50cnkgSk9SIGFuZCBQU0UiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHZhbGlkPSJzdGFydD0yMDA2LTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmpvciIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9jb21tb25ib3JkZXIvSk9SXzJfU0FVXzIuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkNvbW1vbiBCb3JkZXIgcmVsYXRpb25zaGlwIGJldHdlZW4gY291bnRyeSBKT1IgYW5kIFNBVSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgdmFsaWQ9InN0YXJ0PTIwMDYtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuam9yIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL2NvbW1vbmJvcmRlci9KT1JfMl9TWVJfMi5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQ29tbW9uIEJvcmRlciByZWxhdGlvbnNoaXAgYmV0d2VlbiBjb3VudHJ5IEpPUiBhbmQgU1lSIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiB2YWxpZD0ic3RhcnQ9MjAwNi0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5qb3IiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvcmVsYXRpdmVwaHlzaWNhbC9KT1JfMF9KT1JfMS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iUGh5c2ljYWwgY29udGFpbm1lbnQgb2YgSk9SIGxldmVsICgxKSBieSBKT1IgKDApIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaWJtLmNvbSIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuam9yIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL3JlbGF0aXZlcGh5c2ljYWwvSk9SXzFfSk9SXzIuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IlBoeXNpY2FsIGNvbnRhaW5tZW50IG9mIEpPUiBsZXZlbCAoMikgYnkgSk9SICgxKSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3LmlibS5jb20iIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKworPCEtLSBKUE4gLS0+Cis8c3RlbV9jYXRlZ29yeSBpZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmpwbiIgbmFtZT0iSlBOIiBwYXJlbnRfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcyIvPgorCTwhLS0gTm9kZXMgYW5kIExhYmVscyAtLT4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmpwbiIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvSlBOL0pQTl8wX2FyZWEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkpQTiAoMCkgYXJlYSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwczovL3d3dy5jaWEuZ292L2NpYS9wdWJsaWNhdGlvbnMvZmFjdGJvb2svZ2Vvcy9qYS5odG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5qcG4iIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L0pQTi9KUE5fMC5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iSlBOKDApIE5vZGVzIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaXNvLm9yZy9pc28vaG9tZS5odG0iIHNwYXRpYWw9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9nZW8vY291bnRyeS9KUE4vSlBOXzBfTUFQLnhtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuanBuIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9KUE4vSlBOXzFfYXJlYS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iSlBOICgxKSBhcmVhIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHBzOi8vd3d3LmNpYS5nb3YvbGlicmFyeS9wdWJsaWNhdGlvbnMvdGhlLXdvcmxkLWZhY3Rib29rLyIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuanBuIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9KUE4vSlBOXzEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkpQTigxKSBOb2RlcyIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3Lmlzby5vcmcvaXNvL2hvbWUuaHRtIiBzcGF0aWFsPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvZ2VvL2NvdW50cnkvSlBOL0pQTl8xX01BUC54bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmpwbiIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvSlBOL0pQTl8yX2FyZWEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkpQTiAoMikgYXJlYSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwczovL3d3dy5jaWEuZ292L2xpYnJhcnkvcHVibGljYXRpb25zL3RoZS13b3JsZC1mYWN0Ym9vay8iIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmpwbiIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvSlBOL0pQTl8yLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJKUE4oMikgTm9kZXMiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pc28ub3JnL2lzby9ob21lLmh0bSIgc3BhdGlhbD0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2dlby9jb3VudHJ5L0pQTi9KUE5fMl9NQVAueG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+CisJPCEtLSBFZGdlcyAtLT4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmpwbiIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9jb21tb25ib3JkZXIvSlBOXzJfSlBOXzIuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkNvbW1vbiBCb3JkZXIgcmVsYXRpb25zaGlwIHdpdGhpbiBjb3VudHJ5IEpQTiIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgdmFsaWQ9InN0YXJ0PTIwMDYtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuanBuIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL3JlbGF0aXZlcGh5c2ljYWwvSlBOXzBfSlBOXzEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IlBoeXNpY2FsIGNvbnRhaW5tZW50IG9mIEpQTiBsZXZlbCAoMSkgYnkgSlBOICgwKSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3LmlibS5jb20iIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmpwbiIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9yZWxhdGl2ZXBoeXNpY2FsL0pQTl8xX0pQTl8yLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJQaHlzaWNhbCBjb250YWlubWVudCBvZiBKUE4gbGV2ZWwgKDIpIGJ5IEpQTiAoMSkiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pYm0uY29tIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+CisKKzwhLS0gS0FaIC0tPgorPHN0ZW1fY2F0ZWdvcnkgaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5rYXoiIG5hbWU9IktBWiIgcGFyZW50X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMiLz4KKwk8IS0tIE5vZGVzIGFuZCBMYWJlbHMgLS0+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5rYXoiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L0tBWi9LQVpfMF9hcmVhLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJLQVogKDApIGFyZWEiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cHM6Ly93d3cuY2lhLmdvdi9jaWEvcHVibGljYXRpb25zL2ZhY3Rib29rL2dlb3Mva3ouaHRtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMua2F6IiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9LQVovS0FaXzAuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IktBWigwKSBOb2RlcyIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3Lmlzby5vcmcvaXNvL2hvbWUuaHRtIiBzcGF0aWFsPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvZ2VvL2NvdW50cnkvS0FaL0tBWl8wX01BUC54bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmtheiIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvS0FaL0tBWl8xX2FyZWEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IktBWiAoMSkgYXJlYSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwczovL3d3dy5jaWEuZ292L2xpYnJhcnkvcHVibGljYXRpb25zL3RoZS13b3JsZC1mYWN0Ym9vay8iIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmtheiIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvS0FaL0tBWl8xLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJLQVooMSkgTm9kZXMiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pc28ub3JnL2lzby9ob21lLmh0bSIgc3BhdGlhbD0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2dlby9jb3VudHJ5L0tBWi9LQVpfMV9NQVAueG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5rYXoiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L0tBWi9LQVpfMl9hcmVhLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJLQVogKDIpIGFyZWEiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cHM6Ly93d3cuY2lhLmdvdi9saWJyYXJ5L3B1YmxpY2F0aW9ucy90aGUtd29ybGQtZmFjdGJvb2svIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5rYXoiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L0tBWi9LQVpfMi5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iS0FaKDIpIE5vZGVzIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaXNvLm9yZy9pc28vaG9tZS5odG0iIHNwYXRpYWw9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9nZW8vY291bnRyeS9LQVovS0FaXzJfTUFQLnhtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorCTwhLS0gRWRnZXMgLS0+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5rYXoiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvY29tbW9uYm9yZGVyL0tBWl8yX0tBWl8yLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJDb21tb24gQm9yZGVyIHJlbGF0aW9uc2hpcCB3aXRoaW4gY291bnRyeSBLQVoiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHZhbGlkPSJzdGFydD0yMDA2LTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmtheiIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9jb21tb25ib3JkZXIvS0FaXzJfS0daXzIuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkNvbW1vbiBCb3JkZXIgcmVsYXRpb25zaGlwIGJldHdlZW4gY291bnRyeSBLQVogYW5kIEtHWiIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgdmFsaWQ9InN0YXJ0PTIwMDYtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMua2F6IiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL2NvbW1vbmJvcmRlci9LQVpfMl9SVVNfMS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQ29tbW9uIEJvcmRlciByZWxhdGlvbnNoaXAgYmV0d2VlbiBjb3VudHJ5IEtBWiBhbmQgUlVTIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiB2YWxpZD0ic3RhcnQ9MjAwNi0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5rYXoiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvY29tbW9uYm9yZGVyL0tBWl8yX1RLTV8yLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJDb21tb24gQm9yZGVyIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIGNvdW50cnkgS0FaIGFuZCBUS00iIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHZhbGlkPSJzdGFydD0yMDA2LTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmtheiIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9jb21tb25ib3JkZXIvS0FaXzJfVVpCXzIuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkNvbW1vbiBCb3JkZXIgcmVsYXRpb25zaGlwIGJldHdlZW4gY291bnRyeSBLQVogYW5kIFVaQiIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgdmFsaWQ9InN0YXJ0PTIwMDYtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMua2F6IiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL3JlbGF0aXZlcGh5c2ljYWwvS0FaXzBfS0FaXzEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IlBoeXNpY2FsIGNvbnRhaW5tZW50IG9mIEtBWiBsZXZlbCAoMSkgYnkgS0FaICgwKSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3LmlibS5jb20iIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmtheiIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9yZWxhdGl2ZXBoeXNpY2FsL0tBWl8xX0tBWl8yLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJQaHlzaWNhbCBjb250YWlubWVudCBvZiBLQVogbGV2ZWwgKDIpIGJ5IEtBWiAoMSkiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pYm0uY29tIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+CisKKzwhLS0gS0VOIC0tPgorPHN0ZW1fY2F0ZWdvcnkgaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5rZW4iIG5hbWU9IktFTiIgcGFyZW50X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMiLz4KKwk8IS0tIE5vZGVzIGFuZCBMYWJlbHMgLS0+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5rZW4iIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L0tFTi9LRU5fMF9hcmVhLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJLRU4gKDApIGFyZWEiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cHM6Ly93d3cuY2lhLmdvdi9jaWEvcHVibGljYXRpb25zL2ZhY3Rib29rL2dlb3Mva2UuaHRtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMua2VuIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9LRU4vS0VOXzAuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IktFTigwKSBOb2RlcyIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3Lmlzby5vcmcvaXNvL2hvbWUuaHRtIiBzcGF0aWFsPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvZ2VvL2NvdW50cnkvS0VOL0tFTl8wX01BUC54bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmtlbiIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvS0VOL0tFTl8xX2FyZWEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IktFTiAoMSkgYXJlYSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwczovL3d3dy5jaWEuZ292L2xpYnJhcnkvcHVibGljYXRpb25zL3RoZS13b3JsZC1mYWN0Ym9vay8iIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmtlbiIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvS0VOL0tFTl8xLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJLRU4oMSkgTm9kZXMiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pc28ub3JnL2lzby9ob21lLmh0bSIgc3BhdGlhbD0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2dlby9jb3VudHJ5L0tFTi9LRU5fMV9NQVAueG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5rZW4iIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L0tFTi9LRU5fMl9hcmVhLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJLRU4gKDIpIGFyZWEiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cHM6Ly93d3cuY2lhLmdvdi9saWJyYXJ5L3B1YmxpY2F0aW9ucy90aGUtd29ybGQtZmFjdGJvb2svIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5rZW4iIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L0tFTi9LRU5fMi5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iS0VOKDIpIE5vZGVzIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaXNvLm9yZy9pc28vaG9tZS5odG0iIHNwYXRpYWw9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9nZW8vY291bnRyeS9LRU4vS0VOXzJfTUFQLnhtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorCTwhLS0gRWRnZXMgLS0+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5rZW4iIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvY29tbW9uYm9yZGVyL0tFTl8yX0tFTl8yLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJDb21tb24gQm9yZGVyIHJlbGF0aW9uc2hpcCB3aXRoaW4gY291bnRyeSBLRU4iIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHZhbGlkPSJzdGFydD0yMDA2LTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmtlbiIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9jb21tb25ib3JkZXIvS0VOXzJfU0ROXzIuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkNvbW1vbiBCb3JkZXIgcmVsYXRpb25zaGlwIGJldHdlZW4gY291bnRyeSBLRU4gYW5kIFNETiIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgdmFsaWQ9InN0YXJ0PTIwMDYtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMua2VuIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL2NvbW1vbmJvcmRlci9LRU5fMl9TT01fMi5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQ29tbW9uIEJvcmRlciByZWxhdGlvbnNoaXAgYmV0d2VlbiBjb3VudHJ5IEtFTiBhbmQgU09NIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiB2YWxpZD0ic3RhcnQ9MjAwNi0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5rZW4iIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvY29tbW9uYm9yZGVyL0tFTl8yX1RaQV8yLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJDb21tb24gQm9yZGVyIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIGNvdW50cnkgS0VOIGFuZCBUWkEiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHZhbGlkPSJzdGFydD0yMDA2LTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmtlbiIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9jb21tb25ib3JkZXIvS0VOXzJfVUdBXzIuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkNvbW1vbiBCb3JkZXIgcmVsYXRpb25zaGlwIGJldHdlZW4gY291bnRyeSBLRU4gYW5kIFVHQSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgdmFsaWQ9InN0YXJ0PTIwMDYtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMua2VuIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL3JlbGF0aXZlcGh5c2ljYWwvS0VOXzBfS0VOXzEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IlBoeXNpY2FsIGNvbnRhaW5tZW50IG9mIEtFTiBsZXZlbCAoMSkgYnkgS0VOICgwKSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3LmlibS5jb20iIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmtlbiIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9yZWxhdGl2ZXBoeXNpY2FsL0tFTl8xX0tFTl8yLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJQaHlzaWNhbCBjb250YWlubWVudCBvZiBLRU4gbGV2ZWwgKDIpIGJ5IEtFTiAoMSkiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pYm0uY29tIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+CisKKzwhLS0gS0daIC0tPgorPHN0ZW1fY2F0ZWdvcnkgaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5rZ3oiIG5hbWU9IktHWiIgcGFyZW50X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMiLz4KKwk8IS0tIE5vZGVzIGFuZCBMYWJlbHMgLS0+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5rZ3oiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L0tHWi9LR1pfMF9hcmVhLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJLR1ogKDApIGFyZWEiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cHM6Ly93d3cuY2lhLmdvdi9jaWEvcHVibGljYXRpb25zL2ZhY3Rib29rL2dlb3Mva2cuaHRtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMua2d6IiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9LR1ovS0daXzAuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IktHWigwKSBOb2RlcyIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3Lmlzby5vcmcvaXNvL2hvbWUuaHRtIiBzcGF0aWFsPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvZ2VvL2NvdW50cnkvS0daL0tHWl8wX01BUC54bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmtneiIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvS0daL0tHWl8xX2FyZWEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IktHWiAoMSkgYXJlYSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwczovL3d3dy5jaWEuZ292L2xpYnJhcnkvcHVibGljYXRpb25zL3RoZS13b3JsZC1mYWN0Ym9vay8iIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmtneiIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvS0daL0tHWl8xLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJLR1ooMSkgTm9kZXMiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pc28ub3JnL2lzby9ob21lLmh0bSIgc3BhdGlhbD0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2dlby9jb3VudHJ5L0tHWi9LR1pfMV9NQVAueG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5rZ3oiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L0tHWi9LR1pfMl9hcmVhLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJLR1ogKDIpIGFyZWEiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cHM6Ly93d3cuY2lhLmdvdi9saWJyYXJ5L3B1YmxpY2F0aW9ucy90aGUtd29ybGQtZmFjdGJvb2svIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5rZ3oiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L0tHWi9LR1pfMi5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iS0daKDIpIE5vZGVzIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaXNvLm9yZy9pc28vaG9tZS5odG0iIHNwYXRpYWw9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9nZW8vY291bnRyeS9LR1ovS0daXzJfTUFQLnhtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorCTwhLS0gRWRnZXMgLS0+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5rZ3oiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvY29tbW9uYm9yZGVyL0tHWl8yX0tHWl8yLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJDb21tb24gQm9yZGVyIHJlbGF0aW9uc2hpcCB3aXRoaW4gY291bnRyeSBLR1oiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHZhbGlkPSJzdGFydD0yMDA2LTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmtneiIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9jb21tb25ib3JkZXIvS0daXzJfVEpLXzIuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkNvbW1vbiBCb3JkZXIgcmVsYXRpb25zaGlwIGJldHdlZW4gY291bnRyeSBLR1ogYW5kIFRKSyIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgdmFsaWQ9InN0YXJ0PTIwMDYtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMua2d6IiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL2NvbW1vbmJvcmRlci9LR1pfMl9VWkJfMi5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQ29tbW9uIEJvcmRlciByZWxhdGlvbnNoaXAgYmV0d2VlbiBjb3VudHJ5IEtHWiBhbmQgVVpCIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiB2YWxpZD0ic3RhcnQ9MjAwNi0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5rZ3oiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvcmVsYXRpdmVwaHlzaWNhbC9LR1pfMF9LR1pfMS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iUGh5c2ljYWwgY29udGFpbm1lbnQgb2YgS0daIGxldmVsICgxKSBieSBLR1ogKDApIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaWJtLmNvbSIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMua2d6IiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL3JlbGF0aXZlcGh5c2ljYWwvS0daXzFfS0daXzIuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IlBoeXNpY2FsIGNvbnRhaW5tZW50IG9mIEtHWiBsZXZlbCAoMikgYnkgS0daICgxKSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3LmlibS5jb20iIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKworPCEtLSBLSE0gLS0+Cis8c3RlbV9jYXRlZ29yeSBpZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmtobSIgbmFtZT0iS0hNIiBwYXJlbnRfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcyIvPgorCTwhLS0gTm9kZXMgYW5kIExhYmVscyAtLT4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmtobSIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvS0hNL0tITV8wX2FyZWEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IktITSAoMCkgYXJlYSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwczovL3d3dy5jaWEuZ292L2NpYS9wdWJsaWNhdGlvbnMvZmFjdGJvb2svZ2Vvcy9jYi5odG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5raG0iIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L0tITS9LSE1fMC5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iS0hNKDApIE5vZGVzIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaXNvLm9yZy9pc28vaG9tZS5odG0iIHNwYXRpYWw9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9nZW8vY291bnRyeS9LSE0vS0hNXzBfTUFQLnhtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMua2htIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9LSE0vS0hNXzFfYXJlYS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iS0hNICgxKSBhcmVhIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHBzOi8vd3d3LmNpYS5nb3YvbGlicmFyeS9wdWJsaWNhdGlvbnMvdGhlLXdvcmxkLWZhY3Rib29rLyIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMua2htIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9LSE0vS0hNXzEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IktITSgxKSBOb2RlcyIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3Lmlzby5vcmcvaXNvL2hvbWUuaHRtIiBzcGF0aWFsPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvZ2VvL2NvdW50cnkvS0hNL0tITV8xX01BUC54bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmtobSIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvS0hNL0tITV8yX2FyZWEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IktITSAoMikgYXJlYSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwczovL3d3dy5jaWEuZ292L2xpYnJhcnkvcHVibGljYXRpb25zL3RoZS13b3JsZC1mYWN0Ym9vay8iIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmtobSIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvS0hNL0tITV8yLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJLSE0oMikgTm9kZXMiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pc28ub3JnL2lzby9ob21lLmh0bSIgc3BhdGlhbD0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2dlby9jb3VudHJ5L0tITS9LSE1fMl9NQVAueG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+CisJPCEtLSBFZGdlcyAtLT4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmtobSIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9jb21tb25ib3JkZXIvS0hNXzJfS0hNXzIuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkNvbW1vbiBCb3JkZXIgcmVsYXRpb25zaGlwIHdpdGhpbiBjb3VudHJ5IEtITSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgdmFsaWQ9InN0YXJ0PTIwMDYtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMua2htIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL2NvbW1vbmJvcmRlci9LSE1fMl9MQU9fMi5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQ29tbW9uIEJvcmRlciByZWxhdGlvbnNoaXAgYmV0d2VlbiBjb3VudHJ5IEtITSBhbmQgTEFPIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiB2YWxpZD0ic3RhcnQ9MjAwNi0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5raG0iIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvY29tbW9uYm9yZGVyL0tITV8yX1RIQV8yLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJDb21tb24gQm9yZGVyIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIGNvdW50cnkgS0hNIGFuZCBUSEEiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHZhbGlkPSJzdGFydD0yMDA2LTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmtobSIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9jb21tb25ib3JkZXIvS0hNXzJfVk5NXzIuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkNvbW1vbiBCb3JkZXIgcmVsYXRpb25zaGlwIGJldHdlZW4gY291bnRyeSBLSE0gYW5kIFZOTSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgdmFsaWQ9InN0YXJ0PTIwMDYtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMua2htIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL3JlbGF0aXZlcGh5c2ljYWwvS0hNXzBfS0hNXzEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IlBoeXNpY2FsIGNvbnRhaW5tZW50IG9mIEtITSBsZXZlbCAoMSkgYnkgS0hNICgwKSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3LmlibS5jb20iIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmtobSIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9yZWxhdGl2ZXBoeXNpY2FsL0tITV8xX0tITV8yLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJQaHlzaWNhbCBjb250YWlubWVudCBvZiBLSE0gbGV2ZWwgKDIpIGJ5IEtITSAoMSkiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pYm0uY29tIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+CisKKzwhLS0gS0lSIC0tPgorPHN0ZW1fY2F0ZWdvcnkgaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5raXIiIG5hbWU9IktJUiIgcGFyZW50X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMiLz4KKwk8IS0tIE5vZGVzIGFuZCBMYWJlbHMgLS0+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5raXIiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L0tJUi9LSVJfMF9hcmVhLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJLSVIgKDApIGFyZWEiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cHM6Ly93d3cuY2lhLmdvdi9jaWEvcHVibGljYXRpb25zL2ZhY3Rib29rL2dlb3Mva3IuaHRtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMua2lyIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9LSVIvS0lSXzAuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IktJUigwKSBOb2RlcyIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3Lmlzby5vcmcvaXNvL2hvbWUuaHRtIiBzcGF0aWFsPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvZ2VvL2NvdW50cnkvS0lSL0tJUl8wX01BUC54bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKworPCEtLSBLTkEgLS0+Cis8c3RlbV9jYXRlZ29yeSBpZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmtuYSIgbmFtZT0iS05BIiBwYXJlbnRfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcyIvPgorCTwhLS0gTm9kZXMgYW5kIExhYmVscyAtLT4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmtuYSIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvS05BL0tOQV8wX2FyZWEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IktOQSAoMCkgYXJlYSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwczovL3d3dy5jaWEuZ292L2NpYS9wdWJsaWNhdGlvbnMvZmFjdGJvb2svZ2Vvcy9zYy5odG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5rbmEiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L0tOQS9LTkFfMC5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iS05BKDApIE5vZGVzIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaXNvLm9yZy9pc28vaG9tZS5odG0iIHNwYXRpYWw9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9nZW8vY291bnRyeS9LTkEvS05BXzBfTUFQLnhtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorCis8IS0tIEtPUiAtLT4KKzxzdGVtX2NhdGVnb3J5IGlkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMua29yIiBuYW1lPSJLT1IiIHBhcmVudF9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzIi8+CisJPCEtLSBOb2RlcyBhbmQgTGFiZWxzIC0tPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMua29yIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9LT1IvS09SXzBfYXJlYS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iS09SICgwKSBhcmVhIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHBzOi8vd3d3LmNpYS5nb3YvY2lhL3B1YmxpY2F0aW9ucy9mYWN0Ym9vay9nZW9zL2tzLmh0bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmtvciIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvS09SL0tPUl8wLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJLT1IoMCkgTm9kZXMiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pc28ub3JnL2lzby9ob21lLmh0bSIgc3BhdGlhbD0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2dlby9jb3VudHJ5L0tPUi9LT1JfMF9NQVAueG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5rb3IiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L0tPUi9LT1JfMV9hcmVhLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJLT1IgKDEpIGFyZWEiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cHM6Ly93d3cuY2lhLmdvdi9saWJyYXJ5L3B1YmxpY2F0aW9ucy90aGUtd29ybGQtZmFjdGJvb2svIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5rb3IiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L0tPUi9LT1JfMS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iS09SKDEpIE5vZGVzIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaXNvLm9yZy9pc28vaG9tZS5odG0iIHNwYXRpYWw9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9nZW8vY291bnRyeS9LT1IvS09SXzFfTUFQLnhtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMua29yIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9LT1IvS09SXzJfYXJlYS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iS09SICgyKSBhcmVhIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHBzOi8vd3d3LmNpYS5nb3YvbGlicmFyeS9wdWJsaWNhdGlvbnMvdGhlLXdvcmxkLWZhY3Rib29rLyIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMua29yIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9LT1IvS09SXzIuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IktPUigyKSBOb2RlcyIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3Lmlzby5vcmcvaXNvL2hvbWUuaHRtIiBzcGF0aWFsPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvZ2VvL2NvdW50cnkvS09SL0tPUl8yX01BUC54bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKwk8IS0tIEVkZ2VzIC0tPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMua29yIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL2NvbW1vbmJvcmRlci9LT1JfMl9LT1JfMi5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQ29tbW9uIEJvcmRlciByZWxhdGlvbnNoaXAgd2l0aGluIGNvdW50cnkgS09SIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiB2YWxpZD0ic3RhcnQ9MjAwNi0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5rb3IiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvY29tbW9uYm9yZGVyL0tPUl8yX1BSS18yLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJDb21tb24gQm9yZGVyIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIGNvdW50cnkgS09SIGFuZCBQUksiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHZhbGlkPSJzdGFydD0yMDA2LTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmtvciIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9yZWxhdGl2ZXBoeXNpY2FsL0tPUl8wX0tPUl8xLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJQaHlzaWNhbCBjb250YWlubWVudCBvZiBLT1IgbGV2ZWwgKDEpIGJ5IEtPUiAoMCkiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pYm0uY29tIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5rb3IiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvcmVsYXRpdmVwaHlzaWNhbC9LT1JfMV9LT1JfMi5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iUGh5c2ljYWwgY29udGFpbm1lbnQgb2YgS09SIGxldmVsICgyKSBieSBLT1IgKDEpIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaWJtLmNvbSIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorCis8IS0tIEtXVCAtLT4KKzxzdGVtX2NhdGVnb3J5IGlkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMua3d0IiBuYW1lPSJLV1QiIHBhcmVudF9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzIi8+CisJPCEtLSBOb2RlcyBhbmQgTGFiZWxzIC0tPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMua3d0IiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9LV1QvS1dUXzBfYXJlYS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iS1dUICgwKSBhcmVhIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHBzOi8vd3d3LmNpYS5nb3YvY2lhL3B1YmxpY2F0aW9ucy9mYWN0Ym9vay9nZW9zL2t1Lmh0bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmt3dCIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvS1dUL0tXVF8wLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJLV1QoMCkgTm9kZXMiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pc28ub3JnL2lzby9ob21lLmh0bSIgc3BhdGlhbD0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2dlby9jb3VudHJ5L0tXVC9LV1RfMF9NQVAueG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5rd3QiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L0tXVC9LV1RfMV9hcmVhLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJLV1QgKDEpIGFyZWEiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cHM6Ly93d3cuY2lhLmdvdi9saWJyYXJ5L3B1YmxpY2F0aW9ucy90aGUtd29ybGQtZmFjdGJvb2svIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5rd3QiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L0tXVC9LV1RfMS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iS1dUKDEpIE5vZGVzIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaXNvLm9yZy9pc28vaG9tZS5odG0iIHNwYXRpYWw9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9nZW8vY291bnRyeS9LV1QvS1dUXzFfTUFQLnhtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMua3d0IiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9LV1QvS1dUXzJfYXJlYS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iS1dUICgyKSBhcmVhIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHBzOi8vd3d3LmNpYS5nb3YvbGlicmFyeS9wdWJsaWNhdGlvbnMvdGhlLXdvcmxkLWZhY3Rib29rLyIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMua3d0IiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9LV1QvS1dUXzIuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IktXVCgyKSBOb2RlcyIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3Lmlzby5vcmcvaXNvL2hvbWUuaHRtIiBzcGF0aWFsPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvZ2VvL2NvdW50cnkvS1dUL0tXVF8yX01BUC54bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKwk8IS0tIEVkZ2VzIC0tPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMua3d0IiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL2NvbW1vbmJvcmRlci9LV1RfMl9LV1RfMi5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQ29tbW9uIEJvcmRlciByZWxhdGlvbnNoaXAgd2l0aGluIGNvdW50cnkgS1dUIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiB2YWxpZD0ic3RhcnQ9MjAwNi0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5rd3QiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvY29tbW9uYm9yZGVyL0tXVF8yX1NBVV8yLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJDb21tb24gQm9yZGVyIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIGNvdW50cnkgS1dUIGFuZCBTQVUiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHZhbGlkPSJzdGFydD0yMDA2LTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmt3dCIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9yZWxhdGl2ZXBoeXNpY2FsL0tXVF8wX0tXVF8xLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJQaHlzaWNhbCBjb250YWlubWVudCBvZiBLV1QgbGV2ZWwgKDEpIGJ5IEtXVCAoMCkiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pYm0uY29tIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5rd3QiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvcmVsYXRpdmVwaHlzaWNhbC9LV1RfMV9LV1RfMi5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iUGh5c2ljYWwgY29udGFpbm1lbnQgb2YgS1dUIGxldmVsICgyKSBieSBLV1QgKDEpIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaWJtLmNvbSIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorCis8IS0tIExBTyAtLT4KKzxzdGVtX2NhdGVnb3J5IGlkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMubGFvIiBuYW1lPSJMQU8iIHBhcmVudF9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzIi8+CisJPCEtLSBOb2RlcyBhbmQgTGFiZWxzIC0tPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMubGFvIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9MQU8vTEFPXzBfYXJlYS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iTEFPICgwKSBhcmVhIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHBzOi8vd3d3LmNpYS5nb3YvY2lhL3B1YmxpY2F0aW9ucy9mYWN0Ym9vay9nZW9zL2xhLmh0bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmxhbyIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvTEFPL0xBT18wLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJMQU8oMCkgTm9kZXMiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pc28ub3JnL2lzby9ob21lLmh0bSIgc3BhdGlhbD0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2dlby9jb3VudHJ5L0xBTy9MQU9fMF9NQVAueG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5sYW8iIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L0xBTy9MQU9fMV9hcmVhLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJMQU8gKDEpIGFyZWEiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cHM6Ly93d3cuY2lhLmdvdi9saWJyYXJ5L3B1YmxpY2F0aW9ucy90aGUtd29ybGQtZmFjdGJvb2svIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5sYW8iIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L0xBTy9MQU9fMS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iTEFPKDEpIE5vZGVzIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaXNvLm9yZy9pc28vaG9tZS5odG0iIHNwYXRpYWw9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9nZW8vY291bnRyeS9MQU8vTEFPXzFfTUFQLnhtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMubGFvIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9MQU8vTEFPXzJfYXJlYS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iTEFPICgyKSBhcmVhIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHBzOi8vd3d3LmNpYS5nb3YvbGlicmFyeS9wdWJsaWNhdGlvbnMvdGhlLXdvcmxkLWZhY3Rib29rLyIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMubGFvIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9MQU8vTEFPXzIuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkxBTygyKSBOb2RlcyIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3Lmlzby5vcmcvaXNvL2hvbWUuaHRtIiBzcGF0aWFsPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvZ2VvL2NvdW50cnkvTEFPL0xBT18yX01BUC54bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKwk8IS0tIEVkZ2VzIC0tPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMubGFvIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL2NvbW1vbmJvcmRlci9MQU9fMl9MQU9fMi5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQ29tbW9uIEJvcmRlciByZWxhdGlvbnNoaXAgd2l0aGluIGNvdW50cnkgTEFPIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiB2YWxpZD0ic3RhcnQ9MjAwNi0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5sYW8iIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvY29tbW9uYm9yZGVyL0xBT18yX1RIQV8yLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJDb21tb24gQm9yZGVyIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIGNvdW50cnkgTEFPIGFuZCBUSEEiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHZhbGlkPSJzdGFydD0yMDA2LTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmxhbyIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9jb21tb25ib3JkZXIvTEFPXzJfVk5NXzIuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkNvbW1vbiBCb3JkZXIgcmVsYXRpb25zaGlwIGJldHdlZW4gY291bnRyeSBMQU8gYW5kIFZOTSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgdmFsaWQ9InN0YXJ0PTIwMDYtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMubGFvIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL3JlbGF0aXZlcGh5c2ljYWwvTEFPXzBfTEFPXzEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IlBoeXNpY2FsIGNvbnRhaW5tZW50IG9mIExBTyBsZXZlbCAoMSkgYnkgTEFPICgwKSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3LmlibS5jb20iIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmxhbyIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9yZWxhdGl2ZXBoeXNpY2FsL0xBT18xX0xBT18yLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJQaHlzaWNhbCBjb250YWlubWVudCBvZiBMQU8gbGV2ZWwgKDIpIGJ5IExBTyAoMSkiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pYm0uY29tIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+CisKKzwhLS0gTEJOIC0tPgorPHN0ZW1fY2F0ZWdvcnkgaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5sYm4iIG5hbWU9IkxCTiIgcGFyZW50X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMiLz4KKwk8IS0tIE5vZGVzIGFuZCBMYWJlbHMgLS0+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5sYm4iIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L0xCTi9MQk5fMF9hcmVhLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJMQk4gKDApIGFyZWEiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cHM6Ly93d3cuY2lhLmdvdi9jaWEvcHVibGljYXRpb25zL2ZhY3Rib29rL2dlb3MvbGUuaHRtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMubGJuIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9MQk4vTEJOXzAuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkxCTigwKSBOb2RlcyIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3Lmlzby5vcmcvaXNvL2hvbWUuaHRtIiBzcGF0aWFsPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvZ2VvL2NvdW50cnkvTEJOL0xCTl8wX01BUC54bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmxibiIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvTEJOL0xCTl8xX2FyZWEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkxCTiAoMSkgYXJlYSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwczovL3d3dy5jaWEuZ292L2xpYnJhcnkvcHVibGljYXRpb25zL3RoZS13b3JsZC1mYWN0Ym9vay8iIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmxibiIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvTEJOL0xCTl8xLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJMQk4oMSkgTm9kZXMiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pc28ub3JnL2lzby9ob21lLmh0bSIgc3BhdGlhbD0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2dlby9jb3VudHJ5L0xCTi9MQk5fMV9NQVAueG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5sYm4iIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L0xCTi9MQk5fMl9hcmVhLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJMQk4gKDIpIGFyZWEiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cHM6Ly93d3cuY2lhLmdvdi9saWJyYXJ5L3B1YmxpY2F0aW9ucy90aGUtd29ybGQtZmFjdGJvb2svIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5sYm4iIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L0xCTi9MQk5fMi5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iTEJOKDIpIE5vZGVzIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaXNvLm9yZy9pc28vaG9tZS5odG0iIHNwYXRpYWw9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9nZW8vY291bnRyeS9MQk4vTEJOXzJfTUFQLnhtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorCTwhLS0gRWRnZXMgLS0+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5sYm4iIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvY29tbW9uYm9yZGVyL0xCTl8yX0xCTl8yLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJDb21tb24gQm9yZGVyIHJlbGF0aW9uc2hpcCB3aXRoaW4gY291bnRyeSBMQk4iIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHZhbGlkPSJzdGFydD0yMDA2LTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmxibiIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9jb21tb25ib3JkZXIvTEJOXzJfU1lSXzIuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkNvbW1vbiBCb3JkZXIgcmVsYXRpb25zaGlwIGJldHdlZW4gY291bnRyeSBMQk4gYW5kIFNZUiIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgdmFsaWQ9InN0YXJ0PTIwMDYtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMubGJuIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL3JlbGF0aXZlcGh5c2ljYWwvTEJOXzBfTEJOXzEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IlBoeXNpY2FsIGNvbnRhaW5tZW50IG9mIExCTiBsZXZlbCAoMSkgYnkgTEJOICgwKSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3LmlibS5jb20iIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmxibiIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9yZWxhdGl2ZXBoeXNpY2FsL0xCTl8xX0xCTl8yLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJQaHlzaWNhbCBjb250YWlubWVudCBvZiBMQk4gbGV2ZWwgKDIpIGJ5IExCTiAoMSkiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pYm0uY29tIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+CisKKzwhLS0gTEJSIC0tPgorPHN0ZW1fY2F0ZWdvcnkgaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5sYnIiIG5hbWU9IkxCUiIgcGFyZW50X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMiLz4KKwk8IS0tIE5vZGVzIGFuZCBMYWJlbHMgLS0+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5sYnIiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L0xCUi9MQlJfMF9hcmVhLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJMQlIgKDApIGFyZWEiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cHM6Ly93d3cuY2lhLmdvdi9jaWEvcHVibGljYXRpb25zL2ZhY3Rib29rL2dlb3MvbGkuaHRtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMubGJyIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9MQlIvTEJSXzAuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkxCUigwKSBOb2RlcyIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3Lmlzby5vcmcvaXNvL2hvbWUuaHRtIiBzcGF0aWFsPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvZ2VvL2NvdW50cnkvTEJSL0xCUl8wX01BUC54bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmxiciIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvTEJSL0xCUl8xX2FyZWEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkxCUiAoMSkgYXJlYSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwczovL3d3dy5jaWEuZ292L2xpYnJhcnkvcHVibGljYXRpb25zL3RoZS13b3JsZC1mYWN0Ym9vay8iIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmxiciIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvTEJSL0xCUl8xLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJMQlIoMSkgTm9kZXMiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pc28ub3JnL2lzby9ob21lLmh0bSIgc3BhdGlhbD0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2dlby9jb3VudHJ5L0xCUi9MQlJfMV9NQVAueG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5sYnIiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L0xCUi9MQlJfMl9hcmVhLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJMQlIgKDIpIGFyZWEiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cHM6Ly93d3cuY2lhLmdvdi9saWJyYXJ5L3B1YmxpY2F0aW9ucy90aGUtd29ybGQtZmFjdGJvb2svIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5sYnIiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L0xCUi9MQlJfMi5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iTEJSKDIpIE5vZGVzIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaXNvLm9yZy9pc28vaG9tZS5odG0iIHNwYXRpYWw9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9nZW8vY291bnRyeS9MQlIvTEJSXzJfTUFQLnhtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorCTwhLS0gRWRnZXMgLS0+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5sYnIiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvY29tbW9uYm9yZGVyL0xCUl8yX0xCUl8yLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJDb21tb24gQm9yZGVyIHJlbGF0aW9uc2hpcCB3aXRoaW4gY291bnRyeSBMQlIiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHZhbGlkPSJzdGFydD0yMDA2LTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmxiciIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9jb21tb25ib3JkZXIvTEJSXzJfU0xFXzIuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkNvbW1vbiBCb3JkZXIgcmVsYXRpb25zaGlwIGJldHdlZW4gY291bnRyeSBMQlIgYW5kIFNMRSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgdmFsaWQ9InN0YXJ0PTIwMDYtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMubGJyIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL3JlbGF0aXZlcGh5c2ljYWwvTEJSXzBfTEJSXzEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IlBoeXNpY2FsIGNvbnRhaW5tZW50IG9mIExCUiBsZXZlbCAoMSkgYnkgTEJSICgwKSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3LmlibS5jb20iIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmxiciIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9yZWxhdGl2ZXBoeXNpY2FsL0xCUl8xX0xCUl8yLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJQaHlzaWNhbCBjb250YWlubWVudCBvZiBMQlIgbGV2ZWwgKDIpIGJ5IExCUiAoMSkiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pYm0uY29tIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+CisKKzwhLS0gTEJZIC0tPgorPHN0ZW1fY2F0ZWdvcnkgaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5sYnkiIG5hbWU9IkxCWSIgcGFyZW50X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMiLz4KKwk8IS0tIE5vZGVzIGFuZCBMYWJlbHMgLS0+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5sYnkiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L0xCWS9MQllfMF9hcmVhLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJMQlkgKDApIGFyZWEiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cHM6Ly93d3cuY2lhLmdvdi9jaWEvcHVibGljYXRpb25zL2ZhY3Rib29rL2dlb3MvbHkuaHRtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMubGJ5IiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9MQlkvTEJZXzAuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkxCWSgwKSBOb2RlcyIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3Lmlzby5vcmcvaXNvL2hvbWUuaHRtIiBzcGF0aWFsPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvZ2VvL2NvdW50cnkvTEJZL0xCWV8wX01BUC54bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmxieSIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvTEJZL0xCWV8xX2FyZWEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkxCWSAoMSkgYXJlYSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwczovL3d3dy5jaWEuZ292L2xpYnJhcnkvcHVibGljYXRpb25zL3RoZS13b3JsZC1mYWN0Ym9vay8iIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmxieSIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvTEJZL0xCWV8xLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJMQlkoMSkgTm9kZXMiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pc28ub3JnL2lzby9ob21lLmh0bSIgc3BhdGlhbD0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2dlby9jb3VudHJ5L0xCWS9MQllfMV9NQVAueG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+CisJPCEtLSBFZGdlcyAtLT4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmxieSIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9jb21tb25ib3JkZXIvTEJZXzFfTEJZXzEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkNvbW1vbiBCb3JkZXIgcmVsYXRpb25zaGlwIHdpdGhpbiBjb3VudHJ5IExCWSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgdmFsaWQ9InN0YXJ0PTIwMDYtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMubGJ5IiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL2NvbW1vbmJvcmRlci9MQllfMV9ORVJfMi5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQ29tbW9uIEJvcmRlciByZWxhdGlvbnNoaXAgYmV0d2VlbiBjb3VudHJ5IExCWSBhbmQgTkVSIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiB2YWxpZD0ic3RhcnQ9MjAwNi0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5sYnkiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvY29tbW9uYm9yZGVyL0xCWV8xX1NETl8yLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJDb21tb24gQm9yZGVyIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIGNvdW50cnkgTEJZIGFuZCBTRE4iIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHZhbGlkPSJzdGFydD0yMDA2LTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmxieSIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9jb21tb25ib3JkZXIvTEJZXzFfVENEXzIuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkNvbW1vbiBCb3JkZXIgcmVsYXRpb25zaGlwIGJldHdlZW4gY291bnRyeSBMQlkgYW5kIFRDRCIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgdmFsaWQ9InN0YXJ0PTIwMDYtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMubGJ5IiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL2NvbW1vbmJvcmRlci9MQllfMV9UVU5fMi5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQ29tbW9uIEJvcmRlciByZWxhdGlvbnNoaXAgYmV0d2VlbiBjb3VudHJ5IExCWSBhbmQgVFVOIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiB2YWxpZD0ic3RhcnQ9MjAwNi0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5sYnkiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvcmVsYXRpdmVwaHlzaWNhbC9MQllfMF9MQllfMS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iUGh5c2ljYWwgY29udGFpbm1lbnQgb2YgTEJZIGxldmVsICgxKSBieSBMQlkgKDApIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaWJtLmNvbSIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorCis8IS0tIExDQSAtLT4KKzxzdGVtX2NhdGVnb3J5IGlkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMubGNhIiBuYW1lPSJMQ0EiIHBhcmVudF9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzIi8+CisJPCEtLSBOb2RlcyBhbmQgTGFiZWxzIC0tPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMubGNhIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9MQ0EvTENBXzBfYXJlYS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iTENBICgwKSBhcmVhIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHBzOi8vd3d3LmNpYS5nb3YvY2lhL3B1YmxpY2F0aW9ucy9mYWN0Ym9vay9nZW9zL3N0Lmh0bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmxjYSIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvTENBL0xDQV8wLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJMQ0EoMCkgTm9kZXMiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pc28ub3JnL2lzby9ob21lLmh0bSIgc3BhdGlhbD0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2dlby9jb3VudHJ5L0xDQS9MQ0FfMF9NQVAueG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+CisKKzwhLS0gTElFIC0tPgorPHN0ZW1fY2F0ZWdvcnkgaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5saWUiIG5hbWU9IkxJRSIgcGFyZW50X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMiLz4KKwk8IS0tIE5vZGVzIGFuZCBMYWJlbHMgLS0+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5saWUiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L0xJRS9MSUVfMF9hcmVhLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJMSUUgKDApIGFyZWEiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cHM6Ly93d3cuY2lhLmdvdi9jaWEvcHVibGljYXRpb25zL2ZhY3Rib29rL2dlb3MvbHMuaHRtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMubGllIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9MSUUvTElFXzAuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkxJRSgwKSBOb2RlcyIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3Lmlzby5vcmcvaXNvL2hvbWUuaHRtIiBzcGF0aWFsPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvZ2VvL2NvdW50cnkvTElFL0xJRV8wX01BUC54bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmxpZSIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvTElFL0xJRV8xX2FyZWEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkxJRSAoMSkgYXJlYSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3LmdyaWQudW5lcC5jaC9kYXRhL2RhdGEucGhwP2NhdGVnb3J5PWh1bWFuX3JlbGF0ZWQiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmxpZSIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvTElFL0xJRV8xLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJMSUUoMSkgTm9kZXMiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pc28ub3JnL2lzby9ob21lLmh0bSIgc3BhdGlhbD0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2dlby9jb3VudHJ5L0xJRS9MSUVfMV9NQVAueG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+CisJPCEtLSBFZGdlcyAtLT4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmxpZSIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9jb21tb25ib3JkZXIvTElFXzFfTElFXzEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkNvbW1vbiBCb3JkZXIgcmVsYXRpb25zaGlwIHdpdGhpbiBjb3VudHJ5IExJRSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgdmFsaWQ9InN0YXJ0PTIwMDYtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMubGllIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL3JlbGF0aXZlcGh5c2ljYWwvTElFXzBfTElFXzEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IlBoeXNpY2FsIGNvbnRhaW5tZW50IG9mIExJRSBsZXZlbCAoMSkgYnkgTElFICgwKSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3LmlibS5jb20iIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKworPCEtLSBMS0EgLS0+Cis8c3RlbV9jYXRlZ29yeSBpZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmxrYSIgbmFtZT0iTEtBIiBwYXJlbnRfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcyIvPgorCTwhLS0gTm9kZXMgYW5kIExhYmVscyAtLT4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmxrYSIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvTEtBL0xLQV8wX2FyZWEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkxLQSAoMCkgYXJlYSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwczovL3d3dy5jaWEuZ292L2NpYS9wdWJsaWNhdGlvbnMvZmFjdGJvb2svZ2Vvcy9jZS5odG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5sa2EiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L0xLQS9MS0FfMC5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iTEtBKDApIE5vZGVzIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaXNvLm9yZy9pc28vaG9tZS5odG0iIHNwYXRpYWw9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9nZW8vY291bnRyeS9MS0EvTEtBXzBfTUFQLnhtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorCis8IS0tIExTTyAtLT4KKzxzdGVtX2NhdGVnb3J5IGlkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMubHNvIiBuYW1lPSJMU08iIHBhcmVudF9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzIi8+CisJPCEtLSBOb2RlcyBhbmQgTGFiZWxzIC0tPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMubHNvIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9MU08vTFNPXzBfYXJlYS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iTFNPICgwKSBhcmVhIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHBzOi8vd3d3LmNpYS5nb3YvY2lhL3B1YmxpY2F0aW9ucy9mYWN0Ym9vay9nZW9zL2x0Lmh0bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmxzbyIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvTFNPL0xTT18wLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJMU08oMCkgTm9kZXMiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pc28ub3JnL2lzby9ob21lLmh0bSIgc3BhdGlhbD0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2dlby9jb3VudHJ5L0xTTy9MU09fMF9NQVAueG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5sc28iIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L0xTTy9MU09fMV9hcmVhLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJMU08gKDEpIGFyZWEiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cHM6Ly93d3cuY2lhLmdvdi9saWJyYXJ5L3B1YmxpY2F0aW9ucy90aGUtd29ybGQtZmFjdGJvb2svIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5sc28iIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L0xTTy9MU09fMS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iTFNPKDEpIE5vZGVzIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaXNvLm9yZy9pc28vaG9tZS5odG0iIHNwYXRpYWw9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9nZW8vY291bnRyeS9MU08vTFNPXzFfTUFQLnhtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMubHNvIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9MU08vTFNPXzJfYXJlYS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iTFNPICgyKSBhcmVhIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHBzOi8vd3d3LmNpYS5nb3YvbGlicmFyeS9wdWJsaWNhdGlvbnMvdGhlLXdvcmxkLWZhY3Rib29rLyIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMubHNvIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9MU08vTFNPXzIuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkxTTygyKSBOb2RlcyIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3Lmlzby5vcmcvaXNvL2hvbWUuaHRtIiBzcGF0aWFsPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvZ2VvL2NvdW50cnkvTFNPL0xTT18yX01BUC54bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKwk8IS0tIEVkZ2VzIC0tPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMubHNvIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL2NvbW1vbmJvcmRlci9MU09fMl9MU09fMi5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQ29tbW9uIEJvcmRlciByZWxhdGlvbnNoaXAgd2l0aGluIGNvdW50cnkgTFNPIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiB2YWxpZD0ic3RhcnQ9MjAwNi0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5sc28iIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvY29tbW9uYm9yZGVyL0xTT18yX1pBRl8yLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJDb21tb24gQm9yZGVyIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIGNvdW50cnkgTFNPIGFuZCBaQUYiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHZhbGlkPSJzdGFydD0yMDA2LTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmxzbyIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9yZWxhdGl2ZXBoeXNpY2FsL0xTT18wX0xTT18xLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJQaHlzaWNhbCBjb250YWlubWVudCBvZiBMU08gbGV2ZWwgKDEpIGJ5IExTTyAoMCkiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pYm0uY29tIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5sc28iIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvcmVsYXRpdmVwaHlzaWNhbC9MU09fMV9MU09fMi5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iUGh5c2ljYWwgY29udGFpbm1lbnQgb2YgTFNPIGxldmVsICgyKSBieSBMU08gKDEpIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaWJtLmNvbSIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorCis8IS0tIExUVSAtLT4KKzxzdGVtX2NhdGVnb3J5IGlkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMubHR1IiBuYW1lPSJMVFUiIHBhcmVudF9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzIi8+CisJPCEtLSBOb2RlcyBhbmQgTGFiZWxzIC0tPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMubHR1IiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9MVFUvTFRVXzBfYXJlYS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iTFRVICgwKSBhcmVhIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHBzOi8vd3d3LmNpYS5nb3YvY2lhL3B1YmxpY2F0aW9ucy9mYWN0Ym9vay9nZW9zL2xoLmh0bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmx0dSIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvTFRVL0xUVV8wLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJMVFUoMCkgTm9kZXMiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pc28ub3JnL2lzby9ob21lLmh0bSIgc3BhdGlhbD0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2dlby9jb3VudHJ5L0xUVS9MVFVfMF9NQVAueG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+CisJPCEtLSBFZGdlcyAtLT4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmx0dSIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9jb21tb25ib3JkZXIvTFRVXzBfTFZBXzAuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkNvbW1vbiBCb3JkZXIgcmVsYXRpb25zaGlwIGJldHdlZW4gY291bnRyeSBMVFUgYW5kIExWQSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgdmFsaWQ9InN0YXJ0PTIwMDYtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMubHR1IiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL2NvbW1vbmJvcmRlci9MVFVfMF9QT0xfMS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQ29tbW9uIEJvcmRlciByZWxhdGlvbnNoaXAgYmV0d2VlbiBjb3VudHJ5IExUVSBhbmQgUE9MIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiB2YWxpZD0ic3RhcnQ9MjAwNi0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5sdHUiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvY29tbW9uYm9yZGVyL0xUVV8wX1JVU18xLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJDb21tb24gQm9yZGVyIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIGNvdW50cnkgTFRVIGFuZCBSVVMiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHZhbGlkPSJzdGFydD0yMDA2LTAxLTAxOyIgLz4KKworPCEtLSBMVVggLS0+Cis8c3RlbV9jYXRlZ29yeSBpZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmx1eCIgbmFtZT0iTFVYIiBwYXJlbnRfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcyIvPgorCTwhLS0gTm9kZXMgYW5kIExhYmVscyAtLT4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmx1eCIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvTFVYL0xVWF8wX2FyZWEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkxVWCAoMCkgYXJlYSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwczovL3d3dy5jaWEuZ292L2NpYS9wdWJsaWNhdGlvbnMvZmFjdGJvb2svZ2Vvcy9sdS5odG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5sdXgiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L0xVWC9MVVhfMC5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iTFVYKDApIE5vZGVzIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaXNvLm9yZy9pc28vaG9tZS5odG0iIHNwYXRpYWw9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9nZW8vY291bnRyeS9MVVgvTFVYXzBfTUFQLnhtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMubHV4IiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9MVVgvTFVYXzFfYXJlYS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iTFVYICgxKSBhcmVhIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuZ3JpZC51bmVwLmNoL2RhdGEvZGF0YS5waHA/Y2F0ZWdvcnk9aHVtYW5fcmVsYXRlZCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMubHV4IiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9MVVgvTFVYXzEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkxVWCgxKSBOb2RlcyIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3Lmlzby5vcmcvaXNvL2hvbWUuaHRtIiBzcGF0aWFsPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvZ2VvL2NvdW50cnkvTFVYL0xVWF8xX01BUC54bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKwk8IS0tIEVkZ2VzIC0tPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMubHV4IiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL2NvbW1vbmJvcmRlci9MVVhfMV9MVVhfMS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQ29tbW9uIEJvcmRlciByZWxhdGlvbnNoaXAgd2l0aGluIGNvdW50cnkgTFVYIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiB2YWxpZD0ic3RhcnQ9MjAwNi0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5sdXgiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvcmVsYXRpdmVwaHlzaWNhbC9MVVhfMF9MVVhfMS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iUGh5c2ljYWwgY29udGFpbm1lbnQgb2YgTFVYIGxldmVsICgxKSBieSBMVVggKDApIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaWJtLmNvbSIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorCis8IS0tIExWQSAtLT4KKzxzdGVtX2NhdGVnb3J5IGlkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMubHZhIiBuYW1lPSJMVkEiIHBhcmVudF9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzIi8+CisJPCEtLSBOb2RlcyBhbmQgTGFiZWxzIC0tPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMubHZhIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9MVkEvTFZBXzBfYXJlYS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iTFZBICgwKSBhcmVhIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHBzOi8vd3d3LmNpYS5nb3YvY2lhL3B1YmxpY2F0aW9ucy9mYWN0Ym9vay9nZW9zL2xnLmh0bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmx2YSIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvTFZBL0xWQV8wLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJMVkEoMCkgTm9kZXMiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pc28ub3JnL2lzby9ob21lLmh0bSIgc3BhdGlhbD0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2dlby9jb3VudHJ5L0xWQS9MVkFfMF9NQVAueG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+CisJPCEtLSBFZGdlcyAtLT4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmx2YSIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9jb21tb25ib3JkZXIvTFZBXzBfUlVTXzEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkNvbW1vbiBCb3JkZXIgcmVsYXRpb25zaGlwIGJldHdlZW4gY291bnRyeSBMVkEgYW5kIFJVUyIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgdmFsaWQ9InN0YXJ0PTIwMDYtMDEtMDE7IiAvPgorCis8IS0tIE1BQyAtLT4KKzxzdGVtX2NhdGVnb3J5IGlkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMubWFjIiBuYW1lPSJNQUMiIHBhcmVudF9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzIi8+CisJPCEtLSBOb2RlcyBhbmQgTGFiZWxzIC0tPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMubWFjIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9NQUMvTUFDXzBfYXJlYS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iTUFDICgwKSBhcmVhIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHBzOi8vd3d3LmNpYS5nb3YvY2lhL3B1YmxpY2F0aW9ucy9mYWN0Ym9vay9nZW9zL21jLmh0bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLm1hYyIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvTUFDL01BQ18wLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJNQUMoMCkgTm9kZXMiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pc28ub3JnL2lzby9ob21lLmh0bSIgc3BhdGlhbD0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2dlby9jb3VudHJ5L01BQy9NQUNfMF9NQVAueG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5tYWMiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L01BQy9NQUNfMV9hcmVhLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJNQUMgKDEpIGFyZWEiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cHM6Ly93d3cuY2lhLmdvdi9saWJyYXJ5L3B1YmxpY2F0aW9ucy90aGUtd29ybGQtZmFjdGJvb2svIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5tYWMiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L01BQy9NQUNfMS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iTUFDKDEpIE5vZGVzIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaXNvLm9yZy9pc28vaG9tZS5odG0iIHNwYXRpYWw9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9nZW8vY291bnRyeS9NQUMvTUFDXzFfTUFQLnhtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMubWFjIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9NQUMvTUFDXzJfYXJlYS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iTUFDICgyKSBhcmVhIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHBzOi8vd3d3LmNpYS5nb3YvbGlicmFyeS9wdWJsaWNhdGlvbnMvdGhlLXdvcmxkLWZhY3Rib29rLyIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMubWFjIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9NQUMvTUFDXzIuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9Ik1BQygyKSBOb2RlcyIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3Lmlzby5vcmcvaXNvL2hvbWUuaHRtIiBzcGF0aWFsPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvZ2VvL2NvdW50cnkvTUFDL01BQ18yX01BUC54bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKwk8IS0tIEVkZ2VzIC0tPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMubWFjIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL2NvbW1vbmJvcmRlci9NQUNfMl9NQUNfMi5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQ29tbW9uIEJvcmRlciByZWxhdGlvbnNoaXAgd2l0aGluIGNvdW50cnkgTUFDIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiB2YWxpZD0ic3RhcnQ9MjAwNi0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5tYWMiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvcmVsYXRpdmVwaHlzaWNhbC9NQUNfMF9NQUNfMS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iUGh5c2ljYWwgY29udGFpbm1lbnQgb2YgTUFDIGxldmVsICgxKSBieSBNQUMgKDApIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaWJtLmNvbSIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMubWFjIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL3JlbGF0aXZlcGh5c2ljYWwvTUFDXzFfTUFDXzIuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IlBoeXNpY2FsIGNvbnRhaW5tZW50IG9mIE1BQyBsZXZlbCAoMikgYnkgTUFDICgxKSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3LmlibS5jb20iIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKworPCEtLSBNQVIgLS0+Cis8c3RlbV9jYXRlZ29yeSBpZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLm1hciIgbmFtZT0iTUFSIiBwYXJlbnRfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcyIvPgorCTwhLS0gTm9kZXMgYW5kIExhYmVscyAtLT4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLm1hciIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvTUFSL01BUl8wX2FyZWEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9Ik1BUiAoMCkgYXJlYSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwczovL3d3dy5jaWEuZ292L2NpYS9wdWJsaWNhdGlvbnMvZmFjdGJvb2svZ2Vvcy9tby5odG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5tYXIiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L01BUi9NQVJfMC5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iTUFSKDApIE5vZGVzIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaXNvLm9yZy9pc28vaG9tZS5odG0iIHNwYXRpYWw9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9nZW8vY291bnRyeS9NQVIvTUFSXzBfTUFQLnhtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMubWFyIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9NQVIvTUFSXzFfYXJlYS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iTUFSICgxKSBhcmVhIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHBzOi8vd3d3LmNpYS5nb3YvbGlicmFyeS9wdWJsaWNhdGlvbnMvdGhlLXdvcmxkLWZhY3Rib29rLyIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMubWFyIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9NQVIvTUFSXzEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9Ik1BUigxKSBOb2RlcyIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3Lmlzby5vcmcvaXNvL2hvbWUuaHRtIiBzcGF0aWFsPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvZ2VvL2NvdW50cnkvTUFSL01BUl8xX01BUC54bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLm1hciIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvTUFSL01BUl8yX2FyZWEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9Ik1BUiAoMikgYXJlYSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwczovL3d3dy5jaWEuZ292L2xpYnJhcnkvcHVibGljYXRpb25zL3RoZS13b3JsZC1mYWN0Ym9vay8iIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLm1hciIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvTUFSL01BUl8yLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJNQVIoMikgTm9kZXMiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pc28ub3JnL2lzby9ob21lLmh0bSIgc3BhdGlhbD0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2dlby9jb3VudHJ5L01BUi9NQVJfMl9NQVAueG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+CisJPCEtLSBFZGdlcyAtLT4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLm1hciIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9jb21tb25ib3JkZXIvTUFSXzJfTUFSXzIuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkNvbW1vbiBCb3JkZXIgcmVsYXRpb25zaGlwIHdpdGhpbiBjb3VudHJ5IE1BUiIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgdmFsaWQ9InN0YXJ0PTIwMDYtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMubWFyIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL2NvbW1vbmJvcmRlci9NQVJfMl9NUlRfMC5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQ29tbW9uIEJvcmRlciByZWxhdGlvbnNoaXAgYmV0d2VlbiBjb3VudHJ5IE1BUiBhbmQgTVJUIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiB2YWxpZD0ic3RhcnQ9MjAwNi0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5tYXIiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvcmVsYXRpdmVwaHlzaWNhbC9NQVJfMF9NQVJfMS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iUGh5c2ljYWwgY29udGFpbm1lbnQgb2YgTUFSIGxldmVsICgxKSBieSBNQVIgKDApIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaWJtLmNvbSIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMubWFyIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL3JlbGF0aXZlcGh5c2ljYWwvTUFSXzFfTUFSXzIuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IlBoeXNpY2FsIGNvbnRhaW5tZW50IG9mIE1BUiBsZXZlbCAoMikgYnkgTUFSICgxKSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3LmlibS5jb20iIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKworPCEtLSBNQ08gLS0+Cis8c3RlbV9jYXRlZ29yeSBpZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLm1jbyIgbmFtZT0iTUNPIiBwYXJlbnRfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcyIvPgorCTwhLS0gTm9kZXMgYW5kIExhYmVscyAtLT4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLm1jbyIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvTUNPL01DT18wX2FyZWEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9Ik1DTyAoMCkgYXJlYSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwczovL3d3dy5jaWEuZ292L2NpYS9wdWJsaWNhdGlvbnMvZmFjdGJvb2svZ2Vvcy9tbi5odG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5tY28iIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L01DTy9NQ09fMC5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iTUNPKDApIE5vZGVzIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaXNvLm9yZy9pc28vaG9tZS5odG0iIHNwYXRpYWw9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9nZW8vY291bnRyeS9NQ08vTUNPXzBfTUFQLnhtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorCTwhLS0gRWRnZXMgLS0+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5tY28iIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvcmVsYXRpdmVwaHlzaWNhbC9NQ09fMF9NQ09fMS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iUGh5c2ljYWwgY29udGFpbm1lbnQgb2YgTUNPIGxldmVsICgxKSBieSBNQ08gKDApIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaWJtLmNvbSIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorCis8IS0tIE1EQSAtLT4KKzxzdGVtX2NhdGVnb3J5IGlkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMubWRhIiBuYW1lPSJNREEiIHBhcmVudF9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzIi8+CisJPCEtLSBOb2RlcyBhbmQgTGFiZWxzIC0tPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMubWRhIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9NREEvTURBXzBfYXJlYS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iTURBICgwKSBhcmVhIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHBzOi8vd3d3LmNpYS5nb3YvY2lhL3B1YmxpY2F0aW9ucy9mYWN0Ym9vay9nZW9zL21kLmh0bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLm1kYSIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvTURBL01EQV8wLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJNREEoMCkgTm9kZXMiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pc28ub3JnL2lzby9ob21lLmh0bSIgc3BhdGlhbD0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2dlby9jb3VudHJ5L01EQS9NREFfMF9NQVAueG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5tZGEiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L01EQS9NREFfMV9hcmVhLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJNREEgKDEpIGFyZWEiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cHM6Ly93d3cuY2lhLmdvdi9saWJyYXJ5L3B1YmxpY2F0aW9ucy90aGUtd29ybGQtZmFjdGJvb2svIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5tZGEiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L01EQS9NREFfMS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iTURBKDEpIE5vZGVzIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaXNvLm9yZy9pc28vaG9tZS5odG0iIHNwYXRpYWw9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9nZW8vY291bnRyeS9NREEvTURBXzFfTUFQLnhtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMubWRhIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9NREEvTURBXzJfYXJlYS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iTURBICgyKSBhcmVhIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHBzOi8vd3d3LmNpYS5nb3YvbGlicmFyeS9wdWJsaWNhdGlvbnMvdGhlLXdvcmxkLWZhY3Rib29rLyIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMubWRhIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9NREEvTURBXzIuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9Ik1EQSgyKSBOb2RlcyIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3Lmlzby5vcmcvaXNvL2hvbWUuaHRtIiBzcGF0aWFsPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvZ2VvL2NvdW50cnkvTURBL01EQV8yX01BUC54bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKwk8IS0tIEVkZ2VzIC0tPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMubWRhIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL2NvbW1vbmJvcmRlci9NREFfMF9VS1JfMC5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQ29tbW9uIEJvcmRlciBiZXR3ZWVuIGNvdW50cnkgTURBIGFuZCBVS1IiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHZhbGlkPSJzdGFydD0yMDAxLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLm1kYSIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9jb21tb25ib3JkZXIvTURBXzBfVUtSXzEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkNvbW1vbiBCb3JkZXIgYmV0d2VlbiBjb3VudHJ5IE1EQSBhbmQgVUtSIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiB2YWxpZD0ic3RhcnQ9MjAwMS0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5tZGEiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvY29tbW9uYm9yZGVyL01EQV8xX1VLUl8wLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJDb21tb24gQm9yZGVyIGJldHdlZW4gY291bnRyeSBNREEgYW5kIFVLUiIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgdmFsaWQ9InN0YXJ0PTIwMDEtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMubWRhIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL2NvbW1vbmJvcmRlci9NREFfMV9VS1JfMS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQ29tbW9uIEJvcmRlciBiZXR3ZWVuIGNvdW50cnkgTURBIGFuZCBVS1IiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHZhbGlkPSJzdGFydD0yMDAxLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLm1kYSIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9jb21tb25ib3JkZXIvTURBXzJfTURBXzIuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkNvbW1vbiBCb3JkZXIgcmVsYXRpb25zaGlwIHdpdGhpbiBjb3VudHJ5IE1EQSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgdmFsaWQ9InN0YXJ0PTIwMDYtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMubWRhIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL2NvbW1vbmJvcmRlci9NREFfMl9ST1VfMS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQ29tbW9uIEJvcmRlciByZWxhdGlvbnNoaXAgYmV0d2VlbiBjb3VudHJ5IE1EQSBhbmQgUk9VIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiB2YWxpZD0ic3RhcnQ9MjAwNi0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5tZGEiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvY29tbW9uYm9yZGVyL01EQV8yX1VLUl8wLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJDb21tb24gQm9yZGVyIGJldHdlZW4gY291bnRyeSBNREEgYW5kIFVLUiIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgdmFsaWQ9InN0YXJ0PTIwMDEtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMubWRhIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL2NvbW1vbmJvcmRlci9NREFfMl9VS1JfMS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQ29tbW9uIEJvcmRlciBiZXR3ZWVuIGNvdW50cnkgTURBIGFuZCBVS1IiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHZhbGlkPSJzdGFydD0yMDAxLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLm1kYSIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9yZWxhdGl2ZXBoeXNpY2FsL01EQV8wX01EQV8xLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJQaHlzaWNhbCBjb250YWlubWVudCBvZiBNREEgbGV2ZWwgKDEpIGJ5IE1EQSAoMCkiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pYm0uY29tIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5tZGEiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvcmVsYXRpdmVwaHlzaWNhbC9NREFfMV9NREFfMi5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iUGh5c2ljYWwgY29udGFpbm1lbnQgb2YgTURBIGxldmVsICgyKSBieSBNREEgKDEpIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaWJtLmNvbSIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorCis8IS0tIE1ERyAtLT4KKzxzdGVtX2NhdGVnb3J5IGlkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMubWRnIiBuYW1lPSJNREciIHBhcmVudF9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzIi8+CisJPCEtLSBOb2RlcyBhbmQgTGFiZWxzIC0tPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMubWRnIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9NREcvTURHXzBfYXJlYS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iTURHICgwKSBhcmVhIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHBzOi8vd3d3LmNpYS5nb3YvY2lhL3B1YmxpY2F0aW9ucy9mYWN0Ym9vay9nZW9zL21hLmh0bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLm1kZyIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvTURHL01ER18wLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJNREcoMCkgTm9kZXMiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pc28ub3JnL2lzby9ob21lLmh0bSIgc3BhdGlhbD0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2dlby9jb3VudHJ5L01ERy9NREdfMF9NQVAueG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5tZGciIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L01ERy9NREdfMV9hcmVhLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJNREcgKDEpIGFyZWEiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cHM6Ly93d3cuY2lhLmdvdi9saWJyYXJ5L3B1YmxpY2F0aW9ucy90aGUtd29ybGQtZmFjdGJvb2svIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5tZGciIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L01ERy9NREdfMS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iTURHKDEpIE5vZGVzIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaXNvLm9yZy9pc28vaG9tZS5odG0iIHNwYXRpYWw9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9nZW8vY291bnRyeS9NREcvTURHXzFfTUFQLnhtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMubWRnIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9NREcvTURHXzJfYXJlYS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iTURHICgyKSBhcmVhIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHBzOi8vd3d3LmNpYS5nb3YvbGlicmFyeS9wdWJsaWNhdGlvbnMvdGhlLXdvcmxkLWZhY3Rib29rLyIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMubWRnIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9NREcvTURHXzIuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9Ik1ERygyKSBOb2RlcyIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3Lmlzby5vcmcvaXNvL2hvbWUuaHRtIiBzcGF0aWFsPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvZ2VvL2NvdW50cnkvTURHL01ER18yX01BUC54bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKwk8IS0tIEVkZ2VzIC0tPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMubWRnIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL2NvbW1vbmJvcmRlci9NREdfMl9NREdfMi5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQ29tbW9uIEJvcmRlciByZWxhdGlvbnNoaXAgd2l0aGluIGNvdW50cnkgTURHIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiB2YWxpZD0ic3RhcnQ9MjAwNi0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5tZGciIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvcmVsYXRpdmVwaHlzaWNhbC9NREdfMF9NREdfMS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iUGh5c2ljYWwgY29udGFpbm1lbnQgb2YgTURHIGxldmVsICgxKSBieSBNREcgKDApIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaWJtLmNvbSIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMubWRnIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL3JlbGF0aXZlcGh5c2ljYWwvTURHXzFfTURHXzIuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IlBoeXNpY2FsIGNvbnRhaW5tZW50IG9mIE1ERyBsZXZlbCAoMikgYnkgTURHICgxKSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3LmlibS5jb20iIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKworPCEtLSBNRFYgLS0+Cis8c3RlbV9jYXRlZ29yeSBpZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLm1kdiIgbmFtZT0iTURWIiBwYXJlbnRfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcyIvPgorCTwhLS0gTm9kZXMgYW5kIExhYmVscyAtLT4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLm1kdiIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvTURWL01EVl8wX2FyZWEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9Ik1EViAoMCkgYXJlYSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwczovL3d3dy5jaWEuZ292L2NpYS9wdWJsaWNhdGlvbnMvZmFjdGJvb2svZ2Vvcy9tdi5odG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5tZHYiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L01EVi9NRFZfMC5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iTURWKDApIE5vZGVzIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaXNvLm9yZy9pc28vaG9tZS5odG0iIHNwYXRpYWw9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9nZW8vY291bnRyeS9NRFYvTURWXzBfTUFQLnhtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorCis8IS0tIE1FWCAtLT4KKzxzdGVtX2NhdGVnb3J5IGlkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMubWV4IiBuYW1lPSJNRVgiIHBhcmVudF9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzIi8+CisJPCEtLSBOb2RlcyBhbmQgTGFiZWxzIC0tPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMubWV4IiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9NRVgvTUVYXzBfYXJlYS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iTUVYICgwKSBhcmVhIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHBzOi8vd3d3LmNpYS5nb3YvY2lhL3B1YmxpY2F0aW9ucy9mYWN0Ym9vay9nZW9zL214Lmh0bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLm1leCIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvTUVYL01FWF8wLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJNRVgoMCkgTm9kZXMiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pc28ub3JnL2lzby9ob21lLmh0bSIgc3BhdGlhbD0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2dlby9jb3VudHJ5L01FWC9NRVhfMF9NQVAueG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5tZXgiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L01FWC9NRVhfMV9hcmVhLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJNRVggKDEpIGFyZWEiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cHM6Ly93d3cuY2lhLmdvdi9saWJyYXJ5L3B1YmxpY2F0aW9ucy90aGUtd29ybGQtZmFjdGJvb2svIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5tZXgiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L01FWC9NRVhfMS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iTUVYKDEpIE5vZGVzIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaXNvLm9yZy9pc28vaG9tZS5odG0iIHNwYXRpYWw9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9nZW8vY291bnRyeS9NRVgvTUVYXzFfTUFQLnhtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorCTwhLS0gRWRnZXMgLS0+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5tZXgiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvY29tbW9uYm9yZGVyL01FWF8xX01FWF8xLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJDb21tb24gQm9yZGVyIHJlbGF0aW9uc2hpcCB3aXRoaW4gY291bnRyeSBNRVgiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHZhbGlkPSJzdGFydD0yMDA2LTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLm1leCIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9jb21tb25ib3JkZXIvTUVYXzFfVVNBXzIuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkNvbW1vbiBCb3JkZXIgcmVsYXRpb25zaGlwIGJldHdlZW4gY291bnRyeSBNRVggYW5kIFVTQSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgdmFsaWQ9InN0YXJ0PTIwMDYtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMubWV4IiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL3JlbGF0aXZlcGh5c2ljYWwvTUVYXzBfTUVYXzEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IlBoeXNpY2FsIGNvbnRhaW5tZW50IG9mIE1FWCBsZXZlbCAoMSkgYnkgTUVYICgwKSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3LmlibS5jb20iIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKworPCEtLSBNSEwgLS0+Cis8c3RlbV9jYXRlZ29yeSBpZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLm1obCIgbmFtZT0iTUhMIiBwYXJlbnRfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcyIvPgorCTwhLS0gTm9kZXMgYW5kIExhYmVscyAtLT4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLm1obCIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvTUhML01ITF8wX2FyZWEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9Ik1ITCAoMCkgYXJlYSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwczovL3d3dy5jaWEuZ292L2NpYS9wdWJsaWNhdGlvbnMvZmFjdGJvb2svZ2Vvcy9ybS5odG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5taGwiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L01ITC9NSExfMC5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iTUhMKDApIE5vZGVzIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaXNvLm9yZy9pc28vaG9tZS5odG0iIHNwYXRpYWw9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9nZW8vY291bnRyeS9NSEwvTUhMXzBfTUFQLnhtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorCis8IS0tIE1LRCAtLT4KKzxzdGVtX2NhdGVnb3J5IGlkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMubWtkIiBuYW1lPSJNS0QiIHBhcmVudF9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzIi8+CisJPCEtLSBOb2RlcyBhbmQgTGFiZWxzIC0tPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMubWtkIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9NS0QvTUtEXzBfYXJlYS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iTUtEICgwKSBhcmVhIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHBzOi8vd3d3LmNpYS5nb3YvY2lhL3B1YmxpY2F0aW9ucy9mYWN0Ym9vay9nZW9zL21rLmh0bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLm1rZCIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvTUtEL01LRF8wLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJNS0QoMCkgTm9kZXMiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pc28ub3JnL2lzby9ob21lLmh0bSIgc3BhdGlhbD0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2dlby9jb3VudHJ5L01LRC9NS0RfMF9NQVAueG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+CisJPCEtLSBFZGdlcyAtLT4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLm1rZCIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9jb21tb25ib3JkZXIvTUtEXzBfU1JCXzEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkNvbW1vbiBCb3JkZXIgcmVsYXRpb25zaGlwIGJldHdlZW4gY291bnRyeSBNS0QgYW5kIFNSQiIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgdmFsaWQ9InN0YXJ0PTIwMDYtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMubWtkIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL2NvbW1vbmJvcmRlci9NS0RfMl9NS0RfMi5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQ29tbW9uIEJvcmRlciByZWxhdGlvbnNoaXAgd2l0aGluIGNvdW50cnkgTUtEIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiB2YWxpZD0ic3RhcnQ9MjAwNi0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5ta2QiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvY29tbW9uYm9yZGVyL01LRF8yX1NSQl8xLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJDb21tb24gQm9yZGVyIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIGNvdW50cnkgTUtEIGFuZCBTUkIiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHZhbGlkPSJzdGFydD0yMDA2LTAxLTAxOyIgLz4KKworPCEtLSBNTEkgLS0+Cis8c3RlbV9jYXRlZ29yeSBpZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLm1saSIgbmFtZT0iTUxJIiBwYXJlbnRfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcyIvPgorCTwhLS0gTm9kZXMgYW5kIExhYmVscyAtLT4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLm1saSIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvTUxJL01MSV8wX2FyZWEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9Ik1MSSAoMCkgYXJlYSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwczovL3d3dy5jaWEuZ292L2NpYS9wdWJsaWNhdGlvbnMvZmFjdGJvb2svZ2Vvcy9tbC5odG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5tbGkiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L01MSS9NTElfMC5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iTUxJKDApIE5vZGVzIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaXNvLm9yZy9pc28vaG9tZS5odG0iIHNwYXRpYWw9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9nZW8vY291bnRyeS9NTEkvTUxJXzBfTUFQLnhtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorCTwhLS0gRWRnZXMgLS0+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5tbGkiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvY29tbW9uYm9yZGVyL01MSV8wX01SVF8wLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJDb21tb24gQm9yZGVyIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIGNvdW50cnkgTUxJIGFuZCBNUlQiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHZhbGlkPSJzdGFydD0yMDA2LTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLm1saSIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9jb21tb25ib3JkZXIvTUxJXzBfTkVSXzIuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkNvbW1vbiBCb3JkZXIgcmVsYXRpb25zaGlwIGJldHdlZW4gY291bnRyeSBNTEkgYW5kIE5FUiIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgdmFsaWQ9InN0YXJ0PTIwMDYtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMubWxpIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL2NvbW1vbmJvcmRlci9NTElfMF9TRU5fMi5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQ29tbW9uIEJvcmRlciByZWxhdGlvbnNoaXAgYmV0d2VlbiBjb3VudHJ5IE1MSSBhbmQgU0VOIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiB2YWxpZD0ic3RhcnQ9MjAwNi0wMS0wMTsiIC8+CisKKzwhLS0gTUxUIC0tPgorPHN0ZW1fY2F0ZWdvcnkgaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5tbHQiIG5hbWU9Ik1MVCIgcGFyZW50X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMiLz4KKwk8IS0tIE5vZGVzIGFuZCBMYWJlbHMgLS0+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5tbHQiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L01MVC9NTFRfMF9hcmVhLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJNTFQgKDApIGFyZWEiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cHM6Ly93d3cuY2lhLmdvdi9jaWEvcHVibGljYXRpb25zL2ZhY3Rib29rL2dlb3MvbXQuaHRtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMubWx0IiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9NTFQvTUxUXzAuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9Ik1MVCgwKSBOb2RlcyIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3Lmlzby5vcmcvaXNvL2hvbWUuaHRtIiBzcGF0aWFsPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvZ2VvL2NvdW50cnkvTUxUL01MVF8wX01BUC54bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKwk8IS0tIEVkZ2VzIC0tPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMubWx0IiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL3JlbGF0aXZlcGh5c2ljYWwvTUxUXzBfTUxUXzEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IlBoeXNpY2FsIGNvbnRhaW5tZW50IG9mIE1MVCBsZXZlbCAoMSkgYnkgTUxUICgwKSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3LmlibS5jb20iIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKworPCEtLSBNTVIgLS0+Cis8c3RlbV9jYXRlZ29yeSBpZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLm1tciIgbmFtZT0iTU1SIiBwYXJlbnRfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcyIvPgorCTwhLS0gTm9kZXMgYW5kIExhYmVscyAtLT4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLm1tciIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvTU1SL01NUl8wX2FyZWEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9Ik1NUiAoMCkgYXJlYSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwczovL3d3dy5jaWEuZ292L2NpYS9wdWJsaWNhdGlvbnMvZmFjdGJvb2svZ2Vvcy9ibS5odG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5tbXIiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L01NUi9NTVJfMC5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iTU1SKDApIE5vZGVzIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaXNvLm9yZy9pc28vaG9tZS5odG0iIHNwYXRpYWw9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9nZW8vY291bnRyeS9NTVIvTU1SXzBfTUFQLnhtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorCis8IS0tIE1ORSAtLT4KKzxzdGVtX2NhdGVnb3J5IGlkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMubW5lIiBuYW1lPSJNTkUiIHBhcmVudF9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzIi8+CisJPCEtLSBOb2RlcyBhbmQgTGFiZWxzIC0tPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMubW5lIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9NTkUvTU5FXzBfYXJlYS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iTU5FICgwKSBhcmVhIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHBzOi8vd3d3LmNpYS5nb3YvY2lhL3B1YmxpY2F0aW9ucy9mYWN0Ym9vay9nZW9zL21qLmh0bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLm1uZSIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvTU5FL01ORV8wLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJNTkUoMCkgTm9kZXMiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pc28ub3JnL2lzby9ob21lLmh0bSIgc3BhdGlhbD0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2dlby9jb3VudHJ5L01ORS9NTkVfMF9NQVAueG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+CisKKzwhLS0gTU5HIC0tPgorPHN0ZW1fY2F0ZWdvcnkgaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5tbmciIG5hbWU9Ik1ORyIgcGFyZW50X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMiLz4KKwk8IS0tIE5vZGVzIGFuZCBMYWJlbHMgLS0+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5tbmciIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L01ORy9NTkdfMF9hcmVhLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJNTkcgKDApIGFyZWEiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cHM6Ly93d3cuY2lhLmdvdi9jaWEvcHVibGljYXRpb25zL2ZhY3Rib29rL2dlb3MvbWcuaHRtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMubW5nIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9NTkcvTU5HXzAuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9Ik1ORygwKSBOb2RlcyIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3Lmlzby5vcmcvaXNvL2hvbWUuaHRtIiBzcGF0aWFsPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvZ2VvL2NvdW50cnkvTU5HL01OR18wX01BUC54bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLm1uZyIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvTU5HL01OR18xX2FyZWEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9Ik1ORyAoMSkgYXJlYSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwczovL3d3dy5jaWEuZ292L2xpYnJhcnkvcHVibGljYXRpb25zL3RoZS13b3JsZC1mYWN0Ym9vay8iIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLm1uZyIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvTU5HL01OR18xLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJNTkcoMSkgTm9kZXMiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pc28ub3JnL2lzby9ob21lLmh0bSIgc3BhdGlhbD0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2dlby9jb3VudHJ5L01ORy9NTkdfMV9NQVAueG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5tbmciIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L01ORy9NTkdfMl9hcmVhLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJNTkcgKDIpIGFyZWEiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cHM6Ly93d3cuY2lhLmdvdi9saWJyYXJ5L3B1YmxpY2F0aW9ucy90aGUtd29ybGQtZmFjdGJvb2svIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5tbmciIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L01ORy9NTkdfMi5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iTU5HKDIpIE5vZGVzIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaXNvLm9yZy9pc28vaG9tZS5odG0iIHNwYXRpYWw9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9nZW8vY291bnRyeS9NTkcvTU5HXzJfTUFQLnhtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorCTwhLS0gRWRnZXMgLS0+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5tbmciIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvY29tbW9uYm9yZGVyL01OR18yX01OR18yLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJDb21tb24gQm9yZGVyIHJlbGF0aW9uc2hpcCB3aXRoaW4gY291bnRyeSBNTkciIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHZhbGlkPSJzdGFydD0yMDA2LTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLm1uZyIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9jb21tb25ib3JkZXIvTU5HXzJfUlVTXzEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkNvbW1vbiBCb3JkZXIgcmVsYXRpb25zaGlwIGJldHdlZW4gY291bnRyeSBNTkcgYW5kIFJVUyIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgdmFsaWQ9InN0YXJ0PTIwMDYtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMubW5nIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL3JlbGF0aXZlcGh5c2ljYWwvTU5HXzBfTU5HXzEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IlBoeXNpY2FsIGNvbnRhaW5tZW50IG9mIE1ORyBsZXZlbCAoMSkgYnkgTU5HICgwKSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3LmlibS5jb20iIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLm1uZyIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9yZWxhdGl2ZXBoeXNpY2FsL01OR18xX01OR18yLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJQaHlzaWNhbCBjb250YWlubWVudCBvZiBNTkcgbGV2ZWwgKDIpIGJ5IE1ORyAoMSkiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pYm0uY29tIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+CisKKzwhLS0gTU5QIC0tPgorPHN0ZW1fY2F0ZWdvcnkgaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5tbnAiIG5hbWU9Ik1OUCIgcGFyZW50X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMiLz4KKwk8IS0tIE5vZGVzIGFuZCBMYWJlbHMgLS0+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5tbnAiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L01OUC9NTlBfMF9hcmVhLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJNTlAgKDApIGFyZWEiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cHM6Ly93d3cuY2lhLmdvdi9jaWEvcHVibGljYXRpb25zL2ZhY3Rib29rL2dlb3MvY3EuaHRtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMubW5wIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9NTlAvTU5QXzAuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9Ik1OUCgwKSBOb2RlcyIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3Lmlzby5vcmcvaXNvL2hvbWUuaHRtIiBzcGF0aWFsPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvZ2VvL2NvdW50cnkvTU5QL01OUF8wX01BUC54bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKworPCEtLSBNT1ogLS0+Cis8c3RlbV9jYXRlZ29yeSBpZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLm1veiIgbmFtZT0iTU9aIiBwYXJlbnRfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcyIvPgorCTwhLS0gTm9kZXMgYW5kIExhYmVscyAtLT4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLm1veiIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvTU9aL01PWl8wX2FyZWEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9Ik1PWiAoMCkgYXJlYSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwczovL3d3dy5jaWEuZ292L2NpYS9wdWJsaWNhdGlvbnMvZmFjdGJvb2svZ2Vvcy9tei5odG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5tb3oiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L01PWi9NT1pfMC5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iTU9aKDApIE5vZGVzIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaXNvLm9yZy9pc28vaG9tZS5odG0iIHNwYXRpYWw9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9nZW8vY291bnRyeS9NT1ovTU9aXzBfTUFQLnhtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMubW96IiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9NT1ovTU9aXzFfYXJlYS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iTU9aICgxKSBhcmVhIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHBzOi8vd3d3LmNpYS5nb3YvbGlicmFyeS9wdWJsaWNhdGlvbnMvdGhlLXdvcmxkLWZhY3Rib29rLyIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMubW96IiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9NT1ovTU9aXzEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9Ik1PWigxKSBOb2RlcyIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3Lmlzby5vcmcvaXNvL2hvbWUuaHRtIiBzcGF0aWFsPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvZ2VvL2NvdW50cnkvTU9aL01PWl8xX01BUC54bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLm1veiIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvTU9aL01PWl8yX2FyZWEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9Ik1PWiAoMikgYXJlYSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwczovL3d3dy5jaWEuZ292L2xpYnJhcnkvcHVibGljYXRpb25zL3RoZS13b3JsZC1mYWN0Ym9vay8iIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLm1veiIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvTU9aL01PWl8yLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJNT1ooMikgTm9kZXMiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pc28ub3JnL2lzby9ob21lLmh0bSIgc3BhdGlhbD0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2dlby9jb3VudHJ5L01PWi9NT1pfMl9NQVAueG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+CisJPCEtLSBFZGdlcyAtLT4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLm1veiIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9jb21tb25ib3JkZXIvTU9aXzJfTU9aXzIuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkNvbW1vbiBCb3JkZXIgcmVsYXRpb25zaGlwIHdpdGhpbiBjb3VudHJ5IE1PWiIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgdmFsaWQ9InN0YXJ0PTIwMDYtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMubW96IiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL2NvbW1vbmJvcmRlci9NT1pfMl9NV0lfMi5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQ29tbW9uIEJvcmRlciByZWxhdGlvbnNoaXAgYmV0d2VlbiBjb3VudHJ5IE1PWiBhbmQgTVdJIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiB2YWxpZD0ic3RhcnQ9MjAwNi0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5tb3oiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvY29tbW9uYm9yZGVyL01PWl8yX1NXWl8wLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJDb21tb24gQm9yZGVyIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIGNvdW50cnkgTU9aIGFuZCBTV1oiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHZhbGlkPSJzdGFydD0yMDA2LTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLm1veiIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9jb21tb25ib3JkZXIvTU9aXzJfVFpBXzIuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkNvbW1vbiBCb3JkZXIgcmVsYXRpb25zaGlwIGJldHdlZW4gY291bnRyeSBNT1ogYW5kIFRaQSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgdmFsaWQ9InN0YXJ0PTIwMDYtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMubW96IiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL2NvbW1vbmJvcmRlci9NT1pfMl9aQUZfMi5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQ29tbW9uIEJvcmRlciByZWxhdGlvbnNoaXAgYmV0d2VlbiBjb3VudHJ5IE1PWiBhbmQgWkFGIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiB2YWxpZD0ic3RhcnQ9MjAwNi0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5tb3oiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvY29tbW9uYm9yZGVyL01PWl8yX1pNQl8yLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJDb21tb24gQm9yZGVyIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIGNvdW50cnkgTU9aIGFuZCBaTUIiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHZhbGlkPSJzdGFydD0yMDA2LTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLm1veiIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9jb21tb25ib3JkZXIvTU9aXzJfWldFXzAuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkNvbW1vbiBCb3JkZXIgcmVsYXRpb25zaGlwIGJldHdlZW4gY291bnRyeSBNT1ogYW5kIFpXRSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgdmFsaWQ9InN0YXJ0PTIwMDYtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMubW96IiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL3JlbGF0aXZlcGh5c2ljYWwvTU9aXzBfTU9aXzEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IlBoeXNpY2FsIGNvbnRhaW5tZW50IG9mIE1PWiBsZXZlbCAoMSkgYnkgTU9aICgwKSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3LmlibS5jb20iIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLm1veiIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9yZWxhdGl2ZXBoeXNpY2FsL01PWl8xX01PWl8yLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJQaHlzaWNhbCBjb250YWlubWVudCBvZiBNT1ogbGV2ZWwgKDIpIGJ5IE1PWiAoMSkiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pYm0uY29tIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+CisKKzwhLS0gTVJUIC0tPgorPHN0ZW1fY2F0ZWdvcnkgaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5tcnQiIG5hbWU9Ik1SVCIgcGFyZW50X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMiLz4KKwk8IS0tIE5vZGVzIGFuZCBMYWJlbHMgLS0+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5tcnQiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L01SVC9NUlRfMF9hcmVhLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJNUlQgKDApIGFyZWEiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cHM6Ly93d3cuY2lhLmdvdi9jaWEvcHVibGljYXRpb25zL2ZhY3Rib29rL2dlb3MvbXIuaHRtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMubXJ0IiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9NUlQvTVJUXzAuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9Ik1SVCgwKSBOb2RlcyIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3Lmlzby5vcmcvaXNvL2hvbWUuaHRtIiBzcGF0aWFsPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvZ2VvL2NvdW50cnkvTVJUL01SVF8wX01BUC54bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKwk8IS0tIEVkZ2VzIC0tPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMubXJ0IiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL2NvbW1vbmJvcmRlci9NUlRfMF9TRU5fMi5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQ29tbW9uIEJvcmRlciByZWxhdGlvbnNoaXAgYmV0d2VlbiBjb3VudHJ5IE1SVCBhbmQgU0VOIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiB2YWxpZD0ic3RhcnQ9MjAwNi0wMS0wMTsiIC8+CisKKzwhLS0gTVNSIC0tPgorPHN0ZW1fY2F0ZWdvcnkgaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5tc3IiIG5hbWU9Ik1TUiIgcGFyZW50X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMiLz4KKwk8IS0tIE5vZGVzIGFuZCBMYWJlbHMgLS0+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5tc3IiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L01TUi9NU1JfMF9hcmVhLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJNU1IgKDApIGFyZWEiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cHM6Ly93d3cuY2lhLmdvdi9jaWEvcHVibGljYXRpb25zL2ZhY3Rib29rL2dlb3MvbWguaHRtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMubXNyIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9NU1IvTVNSXzAuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9Ik1TUigwKSBOb2RlcyIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3Lmlzby5vcmcvaXNvL2hvbWUuaHRtIiBzcGF0aWFsPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvZ2VvL2NvdW50cnkvTVNSL01TUl8wX01BUC54bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKworPCEtLSBNVFEgLS0+Cis8c3RlbV9jYXRlZ29yeSBpZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLm10cSIgbmFtZT0iTVRRIiBwYXJlbnRfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcyIvPgorCTwhLS0gTm9kZXMgYW5kIExhYmVscyAtLT4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLm10cSIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvTVRRL01UUV8wX2FyZWEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9Ik1UUSAoMCkgYXJlYSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwczovL3d3dy5jaWEuZ292L2NpYS9wdWJsaWNhdGlvbnMvZmFjdGJvb2svZ2Vvcy9tYi5odG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5tdHEiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L01UUS9NVFFfMC5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iTVRRKDApIE5vZGVzIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaXNvLm9yZy9pc28vaG9tZS5odG0iIHNwYXRpYWw9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9nZW8vY291bnRyeS9NVFEvTVRRXzBfTUFQLnhtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorCis8IS0tIE1VUyAtLT4KKzxzdGVtX2NhdGVnb3J5IGlkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMubXVzIiBuYW1lPSJNVVMiIHBhcmVudF9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzIi8+CisJPCEtLSBOb2RlcyBhbmQgTGFiZWxzIC0tPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMubXVzIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9NVVMvTVVTXzBfYXJlYS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iTVVTICgwKSBhcmVhIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHBzOi8vd3d3LmNpYS5nb3YvY2lhL3B1YmxpY2F0aW9ucy9mYWN0Ym9vay9nZW9zL21wLmh0bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLm11cyIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvTVVTL01VU18wLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJNVVMoMCkgTm9kZXMiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pc28ub3JnL2lzby9ob21lLmh0bSIgc3BhdGlhbD0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2dlby9jb3VudHJ5L01VUy9NVVNfMF9NQVAueG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5tdXMiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L01VUy9NVVNfMV9hcmVhLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJNVVMgKDEpIGFyZWEiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cHM6Ly93d3cuY2lhLmdvdi9saWJyYXJ5L3B1YmxpY2F0aW9ucy90aGUtd29ybGQtZmFjdGJvb2svIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5tdXMiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L01VUy9NVVNfMS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iTVVTKDEpIE5vZGVzIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaXNvLm9yZy9pc28vaG9tZS5odG0iIHNwYXRpYWw9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9nZW8vY291bnRyeS9NVVMvTVVTXzFfTUFQLnhtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMubXVzIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9NVVMvTVVTXzJfYXJlYS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iTVVTICgyKSBhcmVhIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHBzOi8vd3d3LmNpYS5nb3YvbGlicmFyeS9wdWJsaWNhdGlvbnMvdGhlLXdvcmxkLWZhY3Rib29rLyIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMubXVzIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9NVVMvTVVTXzIuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9Ik1VUygyKSBOb2RlcyIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3Lmlzby5vcmcvaXNvL2hvbWUuaHRtIiBzcGF0aWFsPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvZ2VvL2NvdW50cnkvTVVTL01VU18yX01BUC54bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKwk8IS0tIEVkZ2VzIC0tPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMubXVzIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL2NvbW1vbmJvcmRlci9NVVNfMl9NVVNfMi5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQ29tbW9uIEJvcmRlciByZWxhdGlvbnNoaXAgd2l0aGluIGNvdW50cnkgTVVTIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiB2YWxpZD0ic3RhcnQ9MjAwNi0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5tdXMiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvcmVsYXRpdmVwaHlzaWNhbC9NVVNfMF9NVVNfMS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iUGh5c2ljYWwgY29udGFpbm1lbnQgb2YgTVVTIGxldmVsICgxKSBieSBNVVMgKDApIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaWJtLmNvbSIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMubXVzIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL3JlbGF0aXZlcGh5c2ljYWwvTVVTXzFfTVVTXzIuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IlBoeXNpY2FsIGNvbnRhaW5tZW50IG9mIE1VUyBsZXZlbCAoMikgYnkgTVVTICgxKSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3LmlibS5jb20iIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKworPCEtLSBNV0kgLS0+Cis8c3RlbV9jYXRlZ29yeSBpZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLm13aSIgbmFtZT0iTVdJIiBwYXJlbnRfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcyIvPgorCTwhLS0gTm9kZXMgYW5kIExhYmVscyAtLT4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLm13aSIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvTVdJL01XSV8wX2FyZWEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9Ik1XSSAoMCkgYXJlYSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwczovL3d3dy5jaWEuZ292L2NpYS9wdWJsaWNhdGlvbnMvZmFjdGJvb2svZ2Vvcy9taS5odG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5td2kiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L01XSS9NV0lfMC5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iTVdJKDApIE5vZGVzIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaXNvLm9yZy9pc28vaG9tZS5odG0iIHNwYXRpYWw9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9nZW8vY291bnRyeS9NV0kvTVdJXzBfTUFQLnhtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMubXdpIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9NV0kvTVdJXzFfYXJlYS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iTVdJICgxKSBhcmVhIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHBzOi8vd3d3LmNpYS5nb3YvbGlicmFyeS9wdWJsaWNhdGlvbnMvdGhlLXdvcmxkLWZhY3Rib29rLyIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMubXdpIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9NV0kvTVdJXzEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9Ik1XSSgxKSBOb2RlcyIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3Lmlzby5vcmcvaXNvL2hvbWUuaHRtIiBzcGF0aWFsPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvZ2VvL2NvdW50cnkvTVdJL01XSV8xX01BUC54bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLm13aSIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvTVdJL01XSV8yX2FyZWEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9Ik1XSSAoMikgYXJlYSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwczovL3d3dy5jaWEuZ292L2xpYnJhcnkvcHVibGljYXRpb25zL3RoZS13b3JsZC1mYWN0Ym9vay8iIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLm13aSIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvTVdJL01XSV8yLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJNV0koMikgTm9kZXMiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pc28ub3JnL2lzby9ob21lLmh0bSIgc3BhdGlhbD0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2dlby9jb3VudHJ5L01XSS9NV0lfMl9NQVAueG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+CisJPCEtLSBFZGdlcyAtLT4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLm13aSIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9jb21tb25ib3JkZXIvTVdJXzJfTVdJXzIuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkNvbW1vbiBCb3JkZXIgcmVsYXRpb25zaGlwIHdpdGhpbiBjb3VudHJ5IE1XSSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgdmFsaWQ9InN0YXJ0PTIwMDYtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMubXdpIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL2NvbW1vbmJvcmRlci9NV0lfMl9UWkFfMi5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQ29tbW9uIEJvcmRlciByZWxhdGlvbnNoaXAgYmV0d2VlbiBjb3VudHJ5IE1XSSBhbmQgVFpBIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiB2YWxpZD0ic3RhcnQ9MjAwNi0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5td2kiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvY29tbW9uYm9yZGVyL01XSV8yX1pNQl8yLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJDb21tb24gQm9yZGVyIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIGNvdW50cnkgTVdJIGFuZCBaTUIiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHZhbGlkPSJzdGFydD0yMDA2LTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLm13aSIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9yZWxhdGl2ZXBoeXNpY2FsL01XSV8wX01XSV8xLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJQaHlzaWNhbCBjb250YWlubWVudCBvZiBNV0kgbGV2ZWwgKDEpIGJ5IE1XSSAoMCkiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pYm0uY29tIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5td2kiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvcmVsYXRpdmVwaHlzaWNhbC9NV0lfMV9NV0lfMi5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iUGh5c2ljYWwgY29udGFpbm1lbnQgb2YgTVdJIGxldmVsICgyKSBieSBNV0kgKDEpIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaWJtLmNvbSIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorCis8IS0tIE1ZUyAtLT4KKzxzdGVtX2NhdGVnb3J5IGlkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMubXlzIiBuYW1lPSJNWVMiIHBhcmVudF9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzIi8+CisJPCEtLSBOb2RlcyBhbmQgTGFiZWxzIC0tPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMubXlzIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9NWVMvTVlTXzBfYXJlYS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iTVlTICgwKSBhcmVhIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHBzOi8vd3d3LmNpYS5nb3YvY2lhL3B1YmxpY2F0aW9ucy9mYWN0Ym9vay9nZW9zL215Lmh0bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLm15cyIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvTVlTL01ZU18wLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJNWVMoMCkgTm9kZXMiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pc28ub3JnL2lzby9ob21lLmh0bSIgc3BhdGlhbD0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2dlby9jb3VudHJ5L01ZUy9NWVNfMF9NQVAueG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+CisJPCEtLSBFZGdlcyAtLT4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLm15cyIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9jb21tb25ib3JkZXIvTVlTXzBfU0dQXzIuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkNvbW1vbiBCb3JkZXIgcmVsYXRpb25zaGlwIGJldHdlZW4gY291bnRyeSBNWVMgYW5kIFNHUCIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgdmFsaWQ9InN0YXJ0PTIwMDYtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMubXlzIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL2NvbW1vbmJvcmRlci9NWVNfMF9USEFfMi5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQ29tbW9uIEJvcmRlciByZWxhdGlvbnNoaXAgYmV0d2VlbiBjb3VudHJ5IE1ZUyBhbmQgVEhBIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiB2YWxpZD0ic3RhcnQ9MjAwNi0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5teXMiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvcmVsYXRpdmVwaHlzaWNhbC9NWVNfMF9NWVNfMS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iUGh5c2ljYWwgY29udGFpbm1lbnQgb2YgTVlTIGxldmVsICgxKSBieSBNWVMgKDApIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaWJtLmNvbSIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorCis8IS0tIE1ZVCAtLT4KKzxzdGVtX2NhdGVnb3J5IGlkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMubXl0IiBuYW1lPSJNWVQiIHBhcmVudF9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzIi8+CisJPCEtLSBOb2RlcyBhbmQgTGFiZWxzIC0tPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMubXl0IiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9NWVQvTVlUXzBfYXJlYS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iTVlUICgwKSBhcmVhIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHBzOi8vd3d3LmNpYS5nb3YvY2lhL3B1YmxpY2F0aW9ucy9mYWN0Ym9vay9nZW9zL21mLmh0bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLm15dCIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvTVlUL01ZVF8wLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJNWVQoMCkgTm9kZXMiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pc28ub3JnL2lzby9ob21lLmh0bSIgc3BhdGlhbD0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2dlby9jb3VudHJ5L01ZVC9NWVRfMF9NQVAueG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+CisJPCEtLSBFZGdlcyAtLT4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLm15dCIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9yZWxhdGl2ZXBoeXNpY2FsL01ZVF8wX01ZVF8xLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJQaHlzaWNhbCBjb250YWlubWVudCBvZiBNWVQgbGV2ZWwgKDEpIGJ5IE1ZVCAoMCkiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pYm0uY29tIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+CisKKzwhLS0gTkFNIC0tPgorPHN0ZW1fY2F0ZWdvcnkgaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5uYW0iIG5hbWU9Ik5BTSIgcGFyZW50X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMiLz4KKwk8IS0tIE5vZGVzIGFuZCBMYWJlbHMgLS0+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5uYW0iIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L05BTS9OQU1fMF9hcmVhLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJOQU0gKDApIGFyZWEiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cHM6Ly93d3cuY2lhLmdvdi9jaWEvcHVibGljYXRpb25zL2ZhY3Rib29rL2dlb3Mvd2EuaHRtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMubmFtIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9OQU0vTkFNXzAuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9Ik5BTSgwKSBOb2RlcyIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3Lmlzby5vcmcvaXNvL2hvbWUuaHRtIiBzcGF0aWFsPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvZ2VvL2NvdW50cnkvTkFNL05BTV8wX01BUC54bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLm5hbSIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvTkFNL05BTV8xX2FyZWEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9Ik5BTSAoMSkgYXJlYSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwczovL3d3dy5jaWEuZ292L2xpYnJhcnkvcHVibGljYXRpb25zL3RoZS13b3JsZC1mYWN0Ym9vay8iIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLm5hbSIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvTkFNL05BTV8xLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJOQU0oMSkgTm9kZXMiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pc28ub3JnL2lzby9ob21lLmh0bSIgc3BhdGlhbD0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2dlby9jb3VudHJ5L05BTS9OQU1fMV9NQVAueG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5uYW0iIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L05BTS9OQU1fMl9hcmVhLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJOQU0gKDIpIGFyZWEiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cHM6Ly93d3cuY2lhLmdvdi9saWJyYXJ5L3B1YmxpY2F0aW9ucy90aGUtd29ybGQtZmFjdGJvb2svIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5uYW0iIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L05BTS9OQU1fMi5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iTkFNKDIpIE5vZGVzIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaXNvLm9yZy9pc28vaG9tZS5odG0iIHNwYXRpYWw9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9nZW8vY291bnRyeS9OQU0vTkFNXzJfTUFQLnhtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorCTwhLS0gRWRnZXMgLS0+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5uYW0iIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvY29tbW9uYm9yZGVyL05BTV8yX05BTV8yLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJDb21tb24gQm9yZGVyIHJlbGF0aW9uc2hpcCB3aXRoaW4gY291bnRyeSBOQU0iIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHZhbGlkPSJzdGFydD0yMDA2LTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLm5hbSIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9jb21tb25ib3JkZXIvTkFNXzJfWkFGXzIuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkNvbW1vbiBCb3JkZXIgcmVsYXRpb25zaGlwIGJldHdlZW4gY291bnRyeSBOQU0gYW5kIFpBRiIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgdmFsaWQ9InN0YXJ0PTIwMDYtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMubmFtIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL2NvbW1vbmJvcmRlci9OQU1fMl9aTUJfMi5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQ29tbW9uIEJvcmRlciByZWxhdGlvbnNoaXAgYmV0d2VlbiBjb3VudHJ5IE5BTSBhbmQgWk1CIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiB2YWxpZD0ic3RhcnQ9MjAwNi0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5uYW0iIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvY29tbW9uYm9yZGVyL05BTV8yX1pXRV8wLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJDb21tb24gQm9yZGVyIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIGNvdW50cnkgTkFNIGFuZCBaV0UiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHZhbGlkPSJzdGFydD0yMDA2LTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLm5hbSIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9yZWxhdGl2ZXBoeXNpY2FsL05BTV8wX05BTV8xLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJQaHlzaWNhbCBjb250YWlubWVudCBvZiBOQU0gbGV2ZWwgKDEpIGJ5IE5BTSAoMCkiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pYm0uY29tIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5uYW0iIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvcmVsYXRpdmVwaHlzaWNhbC9OQU1fMV9OQU1fMi5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iUGh5c2ljYWwgY29udGFpbm1lbnQgb2YgTkFNIGxldmVsICgyKSBieSBOQU0gKDEpIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaWJtLmNvbSIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorCis8IS0tIE5DTCAtLT4KKzxzdGVtX2NhdGVnb3J5IGlkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMubmNsIiBuYW1lPSJOQ0wiIHBhcmVudF9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzIi8+CisJPCEtLSBOb2RlcyBhbmQgTGFiZWxzIC0tPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMubmNsIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9OQ0wvTkNMXzBfYXJlYS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iTkNMICgwKSBhcmVhIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHBzOi8vd3d3LmNpYS5nb3YvY2lhL3B1YmxpY2F0aW9ucy9mYWN0Ym9vay9nZW9zL25jLmh0bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLm5jbCIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvTkNML05DTF8wLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJOQ0woMCkgTm9kZXMiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pc28ub3JnL2lzby9ob21lLmh0bSIgc3BhdGlhbD0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2dlby9jb3VudHJ5L05DTC9OQ0xfMF9NQVAueG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+CisKKzwhLS0gTkVSIC0tPgorPHN0ZW1fY2F0ZWdvcnkgaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5uZXIiIG5hbWU9Ik5FUiIgcGFyZW50X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMiLz4KKwk8IS0tIE5vZGVzIGFuZCBMYWJlbHMgLS0+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5uZXIiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L05FUi9ORVJfMF9hcmVhLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJORVIgKDApIGFyZWEiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cHM6Ly93d3cuY2lhLmdvdi9jaWEvcHVibGljYXRpb25zL2ZhY3Rib29rL2dlb3MvbmcuaHRtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMubmVyIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9ORVIvTkVSXzAuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9Ik5FUigwKSBOb2RlcyIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3Lmlzby5vcmcvaXNvL2hvbWUuaHRtIiBzcGF0aWFsPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvZ2VvL2NvdW50cnkvTkVSL05FUl8wX01BUC54bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLm5lciIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvTkVSL05FUl8xX2FyZWEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9Ik5FUiAoMSkgYXJlYSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwczovL3d3dy5jaWEuZ292L2xpYnJhcnkvcHVibGljYXRpb25zL3RoZS13b3JsZC1mYWN0Ym9vay8iIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLm5lciIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvTkVSL05FUl8xLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJORVIoMSkgTm9kZXMiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pc28ub3JnL2lzby9ob21lLmh0bSIgc3BhdGlhbD0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2dlby9jb3VudHJ5L05FUi9ORVJfMV9NQVAueG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5uZXIiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L05FUi9ORVJfMl9hcmVhLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJORVIgKDIpIGFyZWEiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cHM6Ly93d3cuY2lhLmdvdi9saWJyYXJ5L3B1YmxpY2F0aW9ucy90aGUtd29ybGQtZmFjdGJvb2svIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5uZXIiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L05FUi9ORVJfMi5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iTkVSKDIpIE5vZGVzIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaXNvLm9yZy9pc28vaG9tZS5odG0iIHNwYXRpYWw9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9nZW8vY291bnRyeS9ORVIvTkVSXzJfTUFQLnhtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorCTwhLS0gRWRnZXMgLS0+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5uZXIiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvY29tbW9uYm9yZGVyL05FUl8yX05FUl8yLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJDb21tb24gQm9yZGVyIHJlbGF0aW9uc2hpcCB3aXRoaW4gY291bnRyeSBORVIiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHZhbGlkPSJzdGFydD0yMDA2LTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLm5lciIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9jb21tb25ib3JkZXIvTkVSXzJfTkdBXzIuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkNvbW1vbiBCb3JkZXIgcmVsYXRpb25zaGlwIGJldHdlZW4gY291bnRyeSBORVIgYW5kIE5HQSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgdmFsaWQ9InN0YXJ0PTIwMDYtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMubmVyIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL2NvbW1vbmJvcmRlci9ORVJfMl9UQ0RfMi5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQ29tbW9uIEJvcmRlciByZWxhdGlvbnNoaXAgYmV0d2VlbiBjb3VudHJ5IE5FUiBhbmQgVENEIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiB2YWxpZD0ic3RhcnQ9MjAwNi0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5uZXIiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvcmVsYXRpdmVwaHlzaWNhbC9ORVJfMF9ORVJfMS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iUGh5c2ljYWwgY29udGFpbm1lbnQgb2YgTkVSIGxldmVsICgxKSBieSBORVIgKDApIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaWJtLmNvbSIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMubmVyIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL3JlbGF0aXZlcGh5c2ljYWwvTkVSXzFfTkVSXzIuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IlBoeXNpY2FsIGNvbnRhaW5tZW50IG9mIE5FUiBsZXZlbCAoMikgYnkgTkVSICgxKSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3LmlibS5jb20iIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKworPCEtLSBORksgLS0+Cis8c3RlbV9jYXRlZ29yeSBpZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLm5mayIgbmFtZT0iTkZLIiBwYXJlbnRfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcyIvPgorCTwhLS0gTm9kZXMgYW5kIExhYmVscyAtLT4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLm5mayIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvTkZLL05GS18wX2FyZWEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9Ik5GSyAoMCkgYXJlYSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwczovL3d3dy5jaWEuZ292L2NpYS9wdWJsaWNhdGlvbnMvZmFjdGJvb2svZ2Vvcy9uZi5odG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5uZmsiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L05GSy9ORktfMC5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iTkZLKDApIE5vZGVzIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaXNvLm9yZy9pc28vaG9tZS5odG0iIHNwYXRpYWw9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9nZW8vY291bnRyeS9ORksvTkZLXzBfTUFQLnhtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorCis8IS0tIE5HQSAtLT4KKzxzdGVtX2NhdGVnb3J5IGlkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMubmdhIiBuYW1lPSJOR0EiIHBhcmVudF9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzIi8+CisJPCEtLSBOb2RlcyBhbmQgTGFiZWxzIC0tPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMubmdhIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9OR0EvTkdBXzBfYXJlYS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iTkdBICgwKSBhcmVhIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHBzOi8vd3d3LmNpYS5nb3YvY2lhL3B1YmxpY2F0aW9ucy9mYWN0Ym9vay9nZW9zL25pLmh0bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLm5nYSIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvTkdBL05HQV8wLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJOR0EoMCkgTm9kZXMiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pc28ub3JnL2lzby9ob21lLmh0bSIgc3BhdGlhbD0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2dlby9jb3VudHJ5L05HQS9OR0FfMF9NQVAueG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5uZ2EiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L05HQS9OR0FfMV9hcmVhLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJOR0EgKDEpIGFyZWEiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cHM6Ly93d3cuY2lhLmdvdi9saWJyYXJ5L3B1YmxpY2F0aW9ucy90aGUtd29ybGQtZmFjdGJvb2svIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5uZ2EiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L05HQS9OR0FfMS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iTkdBKDEpIE5vZGVzIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaXNvLm9yZy9pc28vaG9tZS5odG0iIHNwYXRpYWw9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9nZW8vY291bnRyeS9OR0EvTkdBXzFfTUFQLnhtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMubmdhIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9OR0EvTkdBXzJfYXJlYS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iTkdBICgyKSBhcmVhIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHBzOi8vd3d3LmNpYS5nb3YvbGlicmFyeS9wdWJsaWNhdGlvbnMvdGhlLXdvcmxkLWZhY3Rib29rLyIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMubmdhIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9OR0EvTkdBXzIuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9Ik5HQSgyKSBOb2RlcyIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3Lmlzby5vcmcvaXNvL2hvbWUuaHRtIiBzcGF0aWFsPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvZ2VvL2NvdW50cnkvTkdBL05HQV8yX01BUC54bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKwk8IS0tIEVkZ2VzIC0tPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMubmdhIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL2NvbW1vbmJvcmRlci9OR0FfMl9OR0FfMi5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQ29tbW9uIEJvcmRlciByZWxhdGlvbnNoaXAgd2l0aGluIGNvdW50cnkgTkdBIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiB2YWxpZD0ic3RhcnQ9MjAwNi0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5uZ2EiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvY29tbW9uYm9yZGVyL05HQV8yX1RDRF8yLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJDb21tb24gQm9yZGVyIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIGNvdW50cnkgTkdBIGFuZCBUQ0QiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHZhbGlkPSJzdGFydD0yMDA2LTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLm5nYSIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9yZWxhdGl2ZXBoeXNpY2FsL05HQV8wX05HQV8xLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJQaHlzaWNhbCBjb250YWlubWVudCBvZiBOR0EgbGV2ZWwgKDEpIGJ5IE5HQSAoMCkiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pYm0uY29tIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5uZ2EiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvcmVsYXRpdmVwaHlzaWNhbC9OR0FfMV9OR0FfMi5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iUGh5c2ljYWwgY29udGFpbm1lbnQgb2YgTkdBIGxldmVsICgyKSBieSBOR0EgKDEpIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaWJtLmNvbSIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorCis8IS0tIE5JQyAtLT4KKzxzdGVtX2NhdGVnb3J5IGlkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMubmljIiBuYW1lPSJOSUMiIHBhcmVudF9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzIi8+CisJPCEtLSBOb2RlcyBhbmQgTGFiZWxzIC0tPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMubmljIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9OSUMvTklDXzBfYXJlYS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iTklDICgwKSBhcmVhIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHBzOi8vd3d3LmNpYS5nb3YvY2lhL3B1YmxpY2F0aW9ucy9mYWN0Ym9vay9nZW9zL251Lmh0bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLm5pYyIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvTklDL05JQ18wLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJOSUMoMCkgTm9kZXMiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pc28ub3JnL2lzby9ob21lLmh0bSIgc3BhdGlhbD0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2dlby9jb3VudHJ5L05JQy9OSUNfMF9NQVAueG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+CisKKzwhLS0gTklVIC0tPgorPHN0ZW1fY2F0ZWdvcnkgaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5uaXUiIG5hbWU9Ik5JVSIgcGFyZW50X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMiLz4KKwk8IS0tIE5vZGVzIGFuZCBMYWJlbHMgLS0+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5uaXUiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L05JVS9OSVVfMF9hcmVhLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJOSVUgKDApIGFyZWEiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cHM6Ly93d3cuY2lhLmdvdi9jaWEvcHVibGljYXRpb25zL2ZhY3Rib29rL2dlb3MvbmUuaHRtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMubml1IiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9OSVUvTklVXzAuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9Ik5JVSgwKSBOb2RlcyIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3Lmlzby5vcmcvaXNvL2hvbWUuaHRtIiBzcGF0aWFsPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvZ2VvL2NvdW50cnkvTklVL05JVV8wX01BUC54bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKworPCEtLSBOTEQgLS0+Cis8c3RlbV9jYXRlZ29yeSBpZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLm5sZCIgbmFtZT0iTkxEIiBwYXJlbnRfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcyIvPgorCTwhLS0gTm9kZXMgYW5kIExhYmVscyAtLT4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLm5sZCIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvTkxEL05MRF8wX2FyZWEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9Ik5MRCAoMCkgYXJlYSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwczovL3d3dy5jaWEuZ292L2NpYS9wdWJsaWNhdGlvbnMvZmFjdGJvb2svZ2Vvcy9ubC5odG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5ubGQiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L05MRC9OTERfMC5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iTkxEKDApIE5vZGVzIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaXNvLm9yZy9pc28vaG9tZS5odG0iIHNwYXRpYWw9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9nZW8vY291bnRyeS9OTEQvTkxEXzBfTUFQLnhtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMubmxkIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9OTEQvTkxEXzFfYXJlYS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iTkxEICgxKSBhcmVhIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuZ3JpZC51bmVwLmNoL2RhdGEvZGF0YS5waHA/Y2F0ZWdvcnk9aHVtYW5fcmVsYXRlZCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMubmxkIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9OTEQvTkxEXzEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9Ik5MRCgxKSBOb2RlcyIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3Lmlzby5vcmcvaXNvL2hvbWUuaHRtIiBzcGF0aWFsPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvZ2VvL2NvdW50cnkvTkxEL05MRF8xX01BUC54bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKwk8IS0tIEVkZ2VzIC0tPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMubmxkIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL2NvbW1vbmJvcmRlci9OTERfMV9OTERfMS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQ29tbW9uIEJvcmRlciByZWxhdGlvbnNoaXAgd2l0aGluIGNvdW50cnkgTkxEIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiB2YWxpZD0ic3RhcnQ9MjAwNi0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5ubGQiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvcmVsYXRpdmVwaHlzaWNhbC9OTERfMF9OTERfMS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iUGh5c2ljYWwgY29udGFpbm1lbnQgb2YgTkxEIGxldmVsICgxKSBieSBOTEQgKDApIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaWJtLmNvbSIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorCis8IS0tIE5PUiAtLT4KKzxzdGVtX2NhdGVnb3J5IGlkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMubm9yIiBuYW1lPSJOT1IiIHBhcmVudF9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzIi8+CisJPCEtLSBOb2RlcyBhbmQgTGFiZWxzIC0tPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMubm9yIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9OT1IvTk9SXzBfYXJlYS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iTk9SICgwKSBhcmVhIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHBzOi8vd3d3LmNpYS5nb3YvY2lhL3B1YmxpY2F0aW9ucy9mYWN0Ym9vay9nZW9zL25vLmh0bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLm5vciIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvTk9SL05PUl8wLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJOT1IoMCkgTm9kZXMiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pc28ub3JnL2lzby9ob21lLmh0bSIgc3BhdGlhbD0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2dlby9jb3VudHJ5L05PUi9OT1JfMF9NQVAueG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5ub3IiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L05PUi9OT1JfMV9hcmVhLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJOT1IgKDEpIGFyZWEiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5ncmlkLnVuZXAuY2gvZGF0YS9kYXRhLnBocD9jYXRlZ29yeT1odW1hbl9yZWxhdGVkIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5ub3IiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L05PUi9OT1JfMS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iTk9SKDEpIE5vZGVzIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaXNvLm9yZy9pc28vaG9tZS5odG0iIHNwYXRpYWw9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9nZW8vY291bnRyeS9OT1IvTk9SXzFfTUFQLnhtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorCTwhLS0gRWRnZXMgLS0+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5ub3IiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvY29tbW9uYm9yZGVyL05PUl8xX05PUl8xLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJDb21tb24gQm9yZGVyIHJlbGF0aW9uc2hpcCB3aXRoaW4gY291bnRyeSBOT1IiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHZhbGlkPSJzdGFydD0yMDA2LTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLm5vciIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9jb21tb25ib3JkZXIvTk9SXzFfUlVTXzEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkNvbW1vbiBCb3JkZXIgcmVsYXRpb25zaGlwIGJldHdlZW4gY291bnRyeSBOT1IgYW5kIFJVUyIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgdmFsaWQ9InN0YXJ0PTIwMDYtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMubm9yIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL2NvbW1vbmJvcmRlci9OT1JfMV9TV0VfMS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQ29tbW9uIEJvcmRlciByZWxhdGlvbnNoaXAgYmV0d2VlbiBjb3VudHJ5IE5PUiBhbmQgU1dFIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiB2YWxpZD0ic3RhcnQ9MjAwNi0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5ub3IiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvcmVsYXRpdmVwaHlzaWNhbC9OT1JfMF9OT1JfMS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iUGh5c2ljYWwgY29udGFpbm1lbnQgb2YgTk9SIGxldmVsICgxKSBieSBOT1IgKDApIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaWJtLmNvbSIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorCis8IS0tIE5QTCAtLT4KKzxzdGVtX2NhdGVnb3J5IGlkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMubnBsIiBuYW1lPSJOUEwiIHBhcmVudF9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzIi8+CisJPCEtLSBOb2RlcyBhbmQgTGFiZWxzIC0tPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMubnBsIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9OUEwvTlBMXzBfYXJlYS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iTlBMICgwKSBhcmVhIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHBzOi8vd3d3LmNpYS5nb3YvY2lhL3B1YmxpY2F0aW9ucy9mYWN0Ym9vay9nZW9zL25wLmh0bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLm5wbCIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvTlBML05QTF8wLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJOUEwoMCkgTm9kZXMiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pc28ub3JnL2lzby9ob21lLmh0bSIgc3BhdGlhbD0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2dlby9jb3VudHJ5L05QTC9OUExfMF9NQVAueG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5ucGwiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L05QTC9OUExfMV9hcmVhLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJOUEwgKDEpIGFyZWEiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cHM6Ly93d3cuY2lhLmdvdi9saWJyYXJ5L3B1YmxpY2F0aW9ucy90aGUtd29ybGQtZmFjdGJvb2svIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5ucGwiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L05QTC9OUExfMS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iTlBMKDEpIE5vZGVzIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaXNvLm9yZy9pc28vaG9tZS5odG0iIHNwYXRpYWw9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9nZW8vY291bnRyeS9OUEwvTlBMXzFfTUFQLnhtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMubnBsIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9OUEwvTlBMXzJfYXJlYS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iTlBMICgyKSBhcmVhIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHBzOi8vd3d3LmNpYS5nb3YvbGlicmFyeS9wdWJsaWNhdGlvbnMvdGhlLXdvcmxkLWZhY3Rib29rLyIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMubnBsIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9OUEwvTlBMXzIuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9Ik5QTCgyKSBOb2RlcyIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3Lmlzby5vcmcvaXNvL2hvbWUuaHRtIiBzcGF0aWFsPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvZ2VvL2NvdW50cnkvTlBML05QTF8yX01BUC54bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKwk8IS0tIEVkZ2VzIC0tPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMubnBsIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL2NvbW1vbmJvcmRlci9OUExfMl9OUExfMi5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQ29tbW9uIEJvcmRlciByZWxhdGlvbnNoaXAgd2l0aGluIGNvdW50cnkgTlBMIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiB2YWxpZD0ic3RhcnQ9MjAwNi0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5ucGwiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvcmVsYXRpdmVwaHlzaWNhbC9OUExfMF9OUExfMS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iUGh5c2ljYWwgY29udGFpbm1lbnQgb2YgTlBMIGxldmVsICgxKSBieSBOUEwgKDApIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaWJtLmNvbSIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMubnBsIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL3JlbGF0aXZlcGh5c2ljYWwvTlBMXzFfTlBMXzIuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IlBoeXNpY2FsIGNvbnRhaW5tZW50IG9mIE5QTCBsZXZlbCAoMikgYnkgTlBMICgxKSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3LmlibS5jb20iIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKworPCEtLSBOUlUgLS0+Cis8c3RlbV9jYXRlZ29yeSBpZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLm5ydSIgbmFtZT0iTlJVIiBwYXJlbnRfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcyIvPgorCTwhLS0gTm9kZXMgYW5kIExhYmVscyAtLT4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLm5ydSIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvTlJVL05SVV8wX2FyZWEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9Ik5SVSAoMCkgYXJlYSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwczovL3d3dy5jaWEuZ292L2NpYS9wdWJsaWNhdGlvbnMvZmFjdGJvb2svZ2Vvcy9uci5odG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5ucnUiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L05SVS9OUlVfMC5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iTlJVKDApIE5vZGVzIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaXNvLm9yZy9pc28vaG9tZS5odG0iIHNwYXRpYWw9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9nZW8vY291bnRyeS9OUlUvTlJVXzBfTUFQLnhtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorCis8IS0tIE5aTCAtLT4KKzxzdGVtX2NhdGVnb3J5IGlkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMubnpsIiBuYW1lPSJOWkwiIHBhcmVudF9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzIi8+CisJPCEtLSBOb2RlcyBhbmQgTGFiZWxzIC0tPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMubnpsIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9OWkwvTlpMXzBfYXJlYS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iTlpMICgwKSBhcmVhIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHBzOi8vd3d3LmNpYS5nb3YvY2lhL3B1YmxpY2F0aW9ucy9mYWN0Ym9vay9nZW9zL256Lmh0bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLm56bCIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvTlpML05aTF8wLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJOWkwoMCkgTm9kZXMiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pc28ub3JnL2lzby9ob21lLmh0bSIgc3BhdGlhbD0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2dlby9jb3VudHJ5L05aTC9OWkxfMF9NQVAueG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+CisKKzwhLS0gT01OIC0tPgorPHN0ZW1fY2F0ZWdvcnkgaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5vbW4iIG5hbWU9Ik9NTiIgcGFyZW50X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMiLz4KKwk8IS0tIE5vZGVzIGFuZCBMYWJlbHMgLS0+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5vbW4iIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L09NTi9PTU5fMF9hcmVhLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJPTU4gKDApIGFyZWEiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cHM6Ly93d3cuY2lhLmdvdi9jaWEvcHVibGljYXRpb25zL2ZhY3Rib29rL2dlb3MvbXUuaHRtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMub21uIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9PTU4vT01OXzAuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9Ik9NTigwKSBOb2RlcyIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3Lmlzby5vcmcvaXNvL2hvbWUuaHRtIiBzcGF0aWFsPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvZ2VvL2NvdW50cnkvT01OL09NTl8wX01BUC54bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLm9tbiIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvT01OL09NTl8xX2FyZWEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9Ik9NTiAoMSkgYXJlYSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwczovL3d3dy5jaWEuZ292L2xpYnJhcnkvcHVibGljYXRpb25zL3RoZS13b3JsZC1mYWN0Ym9vay8iIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLm9tbiIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvT01OL09NTl8xLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJPTU4oMSkgTm9kZXMiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pc28ub3JnL2lzby9ob21lLmh0bSIgc3BhdGlhbD0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2dlby9jb3VudHJ5L09NTi9PTU5fMV9NQVAueG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5vbW4iIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L09NTi9PTU5fMl9hcmVhLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJPTU4gKDIpIGFyZWEiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cHM6Ly93d3cuY2lhLmdvdi9saWJyYXJ5L3B1YmxpY2F0aW9ucy90aGUtd29ybGQtZmFjdGJvb2svIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5vbW4iIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L09NTi9PTU5fMi5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iT01OKDIpIE5vZGVzIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaXNvLm9yZy9pc28vaG9tZS5odG0iIHNwYXRpYWw9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9nZW8vY291bnRyeS9PTU4vT01OXzJfTUFQLnhtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorCTwhLS0gRWRnZXMgLS0+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5vbW4iIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvY29tbW9uYm9yZGVyL09NTl8yX09NTl8yLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJDb21tb24gQm9yZGVyIHJlbGF0aW9uc2hpcCB3aXRoaW4gY291bnRyeSBPTU4iIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHZhbGlkPSJzdGFydD0yMDA2LTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLm9tbiIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9jb21tb25ib3JkZXIvT01OXzJfU0FVXzIuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkNvbW1vbiBCb3JkZXIgcmVsYXRpb25zaGlwIGJldHdlZW4gY291bnRyeSBPTU4gYW5kIFNBVSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgdmFsaWQ9InN0YXJ0PTIwMDYtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMub21uIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL2NvbW1vbmJvcmRlci9PTU5fMl9ZRU1fMi5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQ29tbW9uIEJvcmRlciByZWxhdGlvbnNoaXAgYmV0d2VlbiBjb3VudHJ5IE9NTiBhbmQgWUVNIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiB2YWxpZD0ic3RhcnQ9MjAwNi0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5vbW4iIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvcmVsYXRpdmVwaHlzaWNhbC9PTU5fMF9PTU5fMS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iUGh5c2ljYWwgY29udGFpbm1lbnQgb2YgT01OIGxldmVsICgxKSBieSBPTU4gKDApIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaWJtLmNvbSIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMub21uIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL3JlbGF0aXZlcGh5c2ljYWwvT01OXzFfT01OXzIuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IlBoeXNpY2FsIGNvbnRhaW5tZW50IG9mIE9NTiBsZXZlbCAoMikgYnkgT01OICgxKSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3LmlibS5jb20iIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKworPCEtLSBQQUsgLS0+Cis8c3RlbV9jYXRlZ29yeSBpZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLnBhayIgbmFtZT0iUEFLIiBwYXJlbnRfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcyIvPgorCTwhLS0gTm9kZXMgYW5kIExhYmVscyAtLT4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLnBhayIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvUEFLL1BBS18wX2FyZWEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IlBBSyAoMCkgYXJlYSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwczovL3d3dy5jaWEuZ292L2NpYS9wdWJsaWNhdGlvbnMvZmFjdGJvb2svZ2Vvcy9way5odG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5wYWsiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L1BBSy9QQUtfMC5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iUEFLKDApIE5vZGVzIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaXNvLm9yZy9pc28vaG9tZS5odG0iIHNwYXRpYWw9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9nZW8vY291bnRyeS9QQUsvUEFLXzBfTUFQLnhtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMucGFrIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9QQUsvUEFLXzFfYXJlYS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iUEFLICgxKSBhcmVhIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5wYWsiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L1BBSy9QQUtfMS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iUEFLKDEpIE5vZGVzIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaXNvLm9yZy9pc28vaG9tZS5odG0iIHNwYXRpYWw9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9nZW8vY291bnRyeS9QQUsvUEFLXzFfTUFQLnhtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMucGFrIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9QQUsvUEFLXzJfYXJlYS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iUEFLICgyKSBhcmVhIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHBzOi8vd3d3LmNpYS5nb3YvbGlicmFyeS9wdWJsaWNhdGlvbnMvdGhlLXdvcmxkLWZhY3Rib29rLyIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMucGFrIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9QQUsvUEFLXzIuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IlBBSygyKSBOb2RlcyIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3Lmlzby5vcmcvaXNvL2hvbWUuaHRtIiBzcGF0aWFsPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvZ2VvL2NvdW50cnkvUEFLL1BBS18yX01BUC54bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKwk8IS0tIEVkZ2VzIC0tPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMucGFrIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL2NvbW1vbmJvcmRlci9QQUtfMl9QQUtfMi5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQ29tbW9uIEJvcmRlciByZWxhdGlvbnNoaXAgd2l0aGluIGNvdW50cnkgUEFLIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiB2YWxpZD0ic3RhcnQ9MjAwNi0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5wYWsiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvcmVsYXRpdmVwaHlzaWNhbC9QQUtfMF9QQUtfMS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iUGh5c2ljYWwgY29udGFpbm1lbnQgb2YgUEFLIGxldmVsICgxKSBieSBQQUsgKDApIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaWJtLmNvbSIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMucGFrIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL3JlbGF0aXZlcGh5c2ljYWwvUEFLXzFfUEFLXzIuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IlBoeXNpY2FsIGNvbnRhaW5tZW50IG9mIFBBSyBsZXZlbCAoMikgYnkgUEFLICgxKSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3LmlibS5jb20iIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKworPCEtLSBQQU4gLS0+Cis8c3RlbV9jYXRlZ29yeSBpZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLnBhbiIgbmFtZT0iUEFOIiBwYXJlbnRfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcyIvPgorCTwhLS0gTm9kZXMgYW5kIExhYmVscyAtLT4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLnBhbiIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvUEFOL1BBTl8wX2FyZWEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IlBBTiAoMCkgYXJlYSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwczovL3d3dy5jaWEuZ292L2NpYS9wdWJsaWNhdGlvbnMvZmFjdGJvb2svZ2Vvcy9wbS5odG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5wYW4iIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L1BBTi9QQU5fMC5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iUEFOKDApIE5vZGVzIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaXNvLm9yZy9pc28vaG9tZS5odG0iIHNwYXRpYWw9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9nZW8vY291bnRyeS9QQU4vUEFOXzBfTUFQLnhtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorCis8IS0tIFBDTiAtLT4KKzxzdGVtX2NhdGVnb3J5IGlkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMucGNuIiBuYW1lPSJQQ04iIHBhcmVudF9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzIi8+CisJPCEtLSBOb2RlcyBhbmQgTGFiZWxzIC0tPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMucGNuIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9QQ04vUENOXzBfYXJlYS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iUENOICgwKSBhcmVhIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHBzOi8vd3d3LmNpYS5nb3YvY2lhL3B1YmxpY2F0aW9ucy9mYWN0Ym9vay9nZW9zL3BjLmh0bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLnBjbiIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvUENOL1BDTl8wLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJQQ04oMCkgTm9kZXMiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pc28ub3JnL2lzby9ob21lLmh0bSIgc3BhdGlhbD0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2dlby9jb3VudHJ5L1BDTi9QQ05fMF9NQVAueG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+CisKKzwhLS0gUEVSIC0tPgorPHN0ZW1fY2F0ZWdvcnkgaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5wZXIiIG5hbWU9IlBFUiIgcGFyZW50X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMiLz4KKwk8IS0tIE5vZGVzIGFuZCBMYWJlbHMgLS0+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5wZXIiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L1BFUi9QRVJfMF9hcmVhLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJQRVIgKDApIGFyZWEiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cHM6Ly93d3cuY2lhLmdvdi9jaWEvcHVibGljYXRpb25zL2ZhY3Rib29rL2dlb3MvcGUuaHRtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMucGVyIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9QRVIvUEVSXzAuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IlBFUigwKSBOb2RlcyIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3Lmlzby5vcmcvaXNvL2hvbWUuaHRtIiBzcGF0aWFsPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvZ2VvL2NvdW50cnkvUEVSL1BFUl8wX01BUC54bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLnBlciIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvUEVSL1BFUl8xX2FyZWEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IlBFUiAoMSkgYXJlYSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwczovL3d3dy5jaWEuZ292L2xpYnJhcnkvcHVibGljYXRpb25zL3RoZS13b3JsZC1mYWN0Ym9vay8iIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLnBlciIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvUEVSL1BFUl8xLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJQRVIoMSkgTm9kZXMiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pc28ub3JnL2lzby9ob21lLmh0bSIgc3BhdGlhbD0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2dlby9jb3VudHJ5L1BFUi9QRVJfMV9NQVAueG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5wZXIiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L1BFUi9QRVJfMl9hcmVhLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJQRVIgKDIpIGFyZWEiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cHM6Ly93d3cuY2lhLmdvdi9saWJyYXJ5L3B1YmxpY2F0aW9ucy90aGUtd29ybGQtZmFjdGJvb2svIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5wZXIiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L1BFUi9QRVJfMi5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iUEVSKDIpIE5vZGVzIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaXNvLm9yZy9pc28vaG9tZS5odG0iIHNwYXRpYWw9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9nZW8vY291bnRyeS9QRVIvUEVSXzJfTUFQLnhtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorCTwhLS0gRWRnZXMgLS0+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5wZXIiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvY29tbW9uYm9yZGVyL1BFUl8yX1BFUl8yLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJDb21tb24gQm9yZGVyIHJlbGF0aW9uc2hpcCB3aXRoaW4gY291bnRyeSBQRVIiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHZhbGlkPSJzdGFydD0yMDA2LTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLnBlciIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9yZWxhdGl2ZXBoeXNpY2FsL1BFUl8wX1BFUl8xLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJQaHlzaWNhbCBjb250YWlubWVudCBvZiBQRVIgbGV2ZWwgKDEpIGJ5IFBFUiAoMCkiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pYm0uY29tIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5wZXIiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvcmVsYXRpdmVwaHlzaWNhbC9QRVJfMV9QRVJfMi5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iUGh5c2ljYWwgY29udGFpbm1lbnQgb2YgUEVSIGxldmVsICgyKSBieSBQRVIgKDEpIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaWJtLmNvbSIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorCis8IS0tIFBITCAtLT4KKzxzdGVtX2NhdGVnb3J5IGlkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMucGhsIiBuYW1lPSJQSEwiIHBhcmVudF9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzIi8+CisJPCEtLSBOb2RlcyBhbmQgTGFiZWxzIC0tPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMucGhsIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9QSEwvUEhMXzBfYXJlYS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iUEhMICgwKSBhcmVhIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHBzOi8vd3d3LmNpYS5nb3YvY2lhL3B1YmxpY2F0aW9ucy9mYWN0Ym9vay9nZW9zL3JwLmh0bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLnBobCIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvUEhML1BITF8wLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJQSEwoMCkgTm9kZXMiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pc28ub3JnL2lzby9ob21lLmh0bSIgc3BhdGlhbD0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2dlby9jb3VudHJ5L1BITC9QSExfMF9NQVAueG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5waGwiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L1BITC9QSExfMV9hcmVhLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJQSEwgKDEpIGFyZWEiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cHM6Ly93d3cuY2lhLmdvdi9saWJyYXJ5L3B1YmxpY2F0aW9ucy90aGUtd29ybGQtZmFjdGJvb2svIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5waGwiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L1BITC9QSExfMS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iUEhMKDEpIE5vZGVzIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaXNvLm9yZy9pc28vaG9tZS5odG0iIHNwYXRpYWw9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9nZW8vY291bnRyeS9QSEwvUEhMXzFfTUFQLnhtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMucGhsIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9QSEwvUEhMXzJfYXJlYS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iUEhMICgyKSBhcmVhIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHBzOi8vd3d3LmNpYS5nb3YvbGlicmFyeS9wdWJsaWNhdGlvbnMvdGhlLXdvcmxkLWZhY3Rib29rLyIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMucGhsIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9QSEwvUEhMXzIuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IlBITCgyKSBOb2RlcyIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3Lmlzby5vcmcvaXNvL2hvbWUuaHRtIiBzcGF0aWFsPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvZ2VvL2NvdW50cnkvUEhML1BITF8yX01BUC54bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKwk8IS0tIEVkZ2VzIC0tPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMucGhsIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL2NvbW1vbmJvcmRlci9QSExfMl9QSExfMi5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQ29tbW9uIEJvcmRlciByZWxhdGlvbnNoaXAgd2l0aGluIGNvdW50cnkgUEhMIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiB2YWxpZD0ic3RhcnQ9MjAwNi0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5waGwiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvcmVsYXRpdmVwaHlzaWNhbC9QSExfMF9QSExfMS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iUGh5c2ljYWwgY29udGFpbm1lbnQgb2YgUEhMIGxldmVsICgxKSBieSBQSEwgKDApIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaWJtLmNvbSIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMucGhsIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL3JlbGF0aXZlcGh5c2ljYWwvUEhMXzFfUEhMXzIuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IlBoeXNpY2FsIGNvbnRhaW5tZW50IG9mIFBITCBsZXZlbCAoMikgYnkgUEhMICgxKSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3LmlibS5jb20iIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKworPCEtLSBQTFcgLS0+Cis8c3RlbV9jYXRlZ29yeSBpZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLnBsdyIgbmFtZT0iUExXIiBwYXJlbnRfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcyIvPgorCTwhLS0gTm9kZXMgYW5kIExhYmVscyAtLT4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLnBsdyIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvUExXL1BMV18wX2FyZWEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IlBMVyAoMCkgYXJlYSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwczovL3d3dy5jaWEuZ292L2NpYS9wdWJsaWNhdGlvbnMvZmFjdGJvb2svZ2Vvcy9wcy5odG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5wbHciIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L1BMVy9QTFdfMC5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iUExXKDApIE5vZGVzIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaXNvLm9yZy9pc28vaG9tZS5odG0iIHNwYXRpYWw9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9nZW8vY291bnRyeS9QTFcvUExXXzBfTUFQLnhtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorCTwhLS0gRWRnZXMgLS0+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5wbHciIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvcmVsYXRpdmVwaHlzaWNhbC9QTFdfMF9QTFdfMS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iUGh5c2ljYWwgY29udGFpbm1lbnQgb2YgUExXIGxldmVsICgxKSBieSBQTFcgKDApIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaWJtLmNvbSIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorCis8IS0tIFBORyAtLT4KKzxzdGVtX2NhdGVnb3J5IGlkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMucG5nIiBuYW1lPSJQTkciIHBhcmVudF9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzIi8+CisJPCEtLSBOb2RlcyBhbmQgTGFiZWxzIC0tPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMucG5nIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9QTkcvUE5HXzBfYXJlYS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iUE5HICgwKSBhcmVhIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHBzOi8vd3d3LmNpYS5nb3YvY2lhL3B1YmxpY2F0aW9ucy9mYWN0Ym9vay9nZW9zL3BwLmh0bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLnBuZyIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvUE5HL1BOR18wLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJQTkcoMCkgTm9kZXMiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pc28ub3JnL2lzby9ob21lLmh0bSIgc3BhdGlhbD0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2dlby9jb3VudHJ5L1BORy9QTkdfMF9NQVAueG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+CisJPCEtLSBFZGdlcyAtLT4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLnBuZyIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9jb21tb25ib3JkZXIvUE5HXzJfUE5HXzIuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkNvbW1vbiBCb3JkZXIgcmVsYXRpb25zaGlwIHdpdGhpbiBjb3VudHJ5IFBORyIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgdmFsaWQ9InN0YXJ0PTIwMDYtMDEtMDE7IiAvPgorCis8IS0tIFBPTCAtLT4KKzxzdGVtX2NhdGVnb3J5IGlkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMucG9sIiBuYW1lPSJQT0wiIHBhcmVudF9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzIi8+CisJPCEtLSBOb2RlcyBhbmQgTGFiZWxzIC0tPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMucG9sIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9QT0wvUE9MXzBfYXJlYS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iUE9MICgwKSBhcmVhIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHBzOi8vd3d3LmNpYS5nb3YvY2lhL3B1YmxpY2F0aW9ucy9mYWN0Ym9vay9nZW9zL3BsLmh0bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLnBvbCIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvUE9ML1BPTF8wLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJQT0woMCkgTm9kZXMiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pc28ub3JnL2lzby9ob21lLmh0bSIgc3BhdGlhbD0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2dlby9jb3VudHJ5L1BPTC9QT0xfMF9NQVAueG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5wb2wiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L1BPTC9QT0xfMV9hcmVhLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJQT0wgKDEpIGFyZWEiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5ncmlkLnVuZXAuY2gvZGF0YS9kYXRhLnBocD9jYXRlZ29yeT1odW1hbl9yZWxhdGVkIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5wb2wiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L1BPTC9QT0xfMS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iUE9MKDEpIE5vZGVzIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaXNvLm9yZy9pc28vaG9tZS5odG0iIHNwYXRpYWw9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9nZW8vY291bnRyeS9QT0wvUE9MXzFfTUFQLnhtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorCTwhLS0gRWRnZXMgLS0+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5wb2wiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvY29tbW9uYm9yZGVyL1BPTF8wX1VLUl8wLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJDb21tb24gQm9yZGVyIGJldHdlZW4gY291bnRyeSBQT0wgYW5kIFVLUiIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgdmFsaWQ9InN0YXJ0PTIwMDEtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMucG9sIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL2NvbW1vbmJvcmRlci9QT0xfMF9VS1JfMS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQ29tbW9uIEJvcmRlciBiZXR3ZWVuIGNvdW50cnkgUE9MIGFuZCBVS1IiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHZhbGlkPSJzdGFydD0yMDAxLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLnBvbCIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9jb21tb25ib3JkZXIvUE9MXzFfUE9MXzEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkNvbW1vbiBCb3JkZXIgcmVsYXRpb25zaGlwIHdpdGhpbiBjb3VudHJ5IFBPTCIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgdmFsaWQ9InN0YXJ0PTIwMDYtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMucG9sIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL2NvbW1vbmJvcmRlci9QT0xfMV9SVVNfMS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQ29tbW9uIEJvcmRlciByZWxhdGlvbnNoaXAgYmV0d2VlbiBjb3VudHJ5IFBPTCBhbmQgUlVTIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiB2YWxpZD0ic3RhcnQ9MjAwNi0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5wb2wiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvY29tbW9uYm9yZGVyL1BPTF8xX1VLUl8wLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJDb21tb24gQm9yZGVyIGJldHdlZW4gY291bnRyeSBQT0wgYW5kIFVLUiIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgdmFsaWQ9InN0YXJ0PTIwMDEtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMucG9sIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL2NvbW1vbmJvcmRlci9QT0xfMV9VS1JfMS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQ29tbW9uIEJvcmRlciBiZXR3ZWVuIGNvdW50cnkgUE9MIGFuZCBVS1IiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHZhbGlkPSJzdGFydD0yMDAxLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLnBvbCIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9yZWxhdGl2ZXBoeXNpY2FsL1BPTF8wX1BPTF8xLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJQaHlzaWNhbCBjb250YWlubWVudCBvZiBQT0wgbGV2ZWwgKDEpIGJ5IFBPTCAoMCkiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pYm0uY29tIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+CisKKzwhLS0gUFJJIC0tPgorPHN0ZW1fY2F0ZWdvcnkgaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5wcmkiIG5hbWU9IlBSSSIgcGFyZW50X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMiLz4KKwk8IS0tIE5vZGVzIGFuZCBMYWJlbHMgLS0+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5wcmkiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L1BSSS9QUklfMF9hcmVhLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJQUkkgKDApIGFyZWEiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cHM6Ly93d3cuY2lhLmdvdi9jaWEvcHVibGljYXRpb25zL2ZhY3Rib29rL2dlb3MvcnEuaHRtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMucHJpIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9QUkkvUFJJXzAuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IlBSSSgwKSBOb2RlcyIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3Lmlzby5vcmcvaXNvL2hvbWUuaHRtIiBzcGF0aWFsPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvZ2VvL2NvdW50cnkvUFJJL1BSSV8wX01BUC54bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLnByaSIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvUFJJL1BSSV8xX2FyZWEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IlBSSSAoMSkgYXJlYSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwJTNBJTJGJTJGZmFjdGZpbmRlci5jZW5zdXMuZ292JTJGc2VydmxldCUyRkdDVFRhYmxlJTNGX2JtJTNEeSUyNi1nZW9faWQlM0QwNDAwMFVTNzIlMjYtX2JveF9oZWFkX25iciUzREdDVC1QSDElMjYtZHNfbmFtZSUzRERFQ18yMDAwX1NGMV9VJTI2LXJlZG9Mb2clM0RmYWxzZSUyNi1tdF9uYW1lJTNEREVDXzIwMDBfU0YxX1VfR0NUUEgxX1VTOSUyNi1mb3JtYXQlM0RTVC0yJTI2LUNPTlRFWFQlM0RnY3QiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLnByaSIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvUFJJL1BSSV8xLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJQUkkoMSkgTm9kZXMiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pc28ub3JnL2lzby9ob21lLmh0bSIgc3BhdGlhbD0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2dlby9jb3VudHJ5L1BSSS9QUklfMV9NQVAueG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+CisJPCEtLSBFZGdlcyAtLT4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLnByaSIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9jb21tb25ib3JkZXIvUFJJXzFfUFJJXzEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkNvbW1vbiBCb3JkZXIgcmVsYXRpb25zaGlwIHdpdGhpbiBjb3VudHJ5IFBSSSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgdmFsaWQ9InN0YXJ0PTIwMDYtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMucHJpIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL3JlbGF0aXZlcGh5c2ljYWwvUFJJXzBfUFJJXzEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IlBoeXNpY2FsIGNvbnRhaW5tZW50IG9mIFBSSSBsZXZlbCAoMSkgYnkgUFJJICgwKSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3LmlibS5jb20iIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKworPCEtLSBQUksgLS0+Cis8c3RlbV9jYXRlZ29yeSBpZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLnByayIgbmFtZT0iUFJLIiBwYXJlbnRfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcyIvPgorCTwhLS0gTm9kZXMgYW5kIExhYmVscyAtLT4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLnByayIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvUFJLL1BSS18wX2FyZWEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IlBSSyAoMCkgYXJlYSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwczovL3d3dy5jaWEuZ292L2NpYS9wdWJsaWNhdGlvbnMvZmFjdGJvb2svZ2Vvcy9rbi5odG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5wcmsiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L1BSSy9QUktfMC5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iUFJLKDApIE5vZGVzIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaXNvLm9yZy9pc28vaG9tZS5odG0iIHNwYXRpYWw9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9nZW8vY291bnRyeS9QUksvUFJLXzBfTUFQLnhtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMucHJrIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9QUksvUFJLXzFfYXJlYS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iUFJLICgxKSBhcmVhIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHBzOi8vd3d3LmNpYS5nb3YvbGlicmFyeS9wdWJsaWNhdGlvbnMvdGhlLXdvcmxkLWZhY3Rib29rLyIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMucHJrIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9QUksvUFJLXzEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IlBSSygxKSBOb2RlcyIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3Lmlzby5vcmcvaXNvL2hvbWUuaHRtIiBzcGF0aWFsPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvZ2VvL2NvdW50cnkvUFJLL1BSS18xX01BUC54bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLnByayIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvUFJLL1BSS18yX2FyZWEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IlBSSyAoMikgYXJlYSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwczovL3d3dy5jaWEuZ292L2xpYnJhcnkvcHVibGljYXRpb25zL3RoZS13b3JsZC1mYWN0Ym9vay8iIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLnByayIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvUFJLL1BSS18yLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJQUksoMikgTm9kZXMiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pc28ub3JnL2lzby9ob21lLmh0bSIgc3BhdGlhbD0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2dlby9jb3VudHJ5L1BSSy9QUktfMl9NQVAueG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+CisJPCEtLSBFZGdlcyAtLT4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLnByayIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9jb21tb25ib3JkZXIvUFJLXzJfUFJLXzIuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkNvbW1vbiBCb3JkZXIgcmVsYXRpb25zaGlwIHdpdGhpbiBjb3VudHJ5IFBSSyIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgdmFsaWQ9InN0YXJ0PTIwMDYtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMucHJrIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL2NvbW1vbmJvcmRlci9QUktfMl9SVVNfMS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQ29tbW9uIEJvcmRlciByZWxhdGlvbnNoaXAgYmV0d2VlbiBjb3VudHJ5IFBSSyBhbmQgUlVTIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiB2YWxpZD0ic3RhcnQ9MjAwNi0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5wcmsiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvcmVsYXRpdmVwaHlzaWNhbC9QUktfMF9QUktfMS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iUGh5c2ljYWwgY29udGFpbm1lbnQgb2YgUFJLIGxldmVsICgxKSBieSBQUksgKDApIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaWJtLmNvbSIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMucHJrIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL3JlbGF0aXZlcGh5c2ljYWwvUFJLXzFfUFJLXzIuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IlBoeXNpY2FsIGNvbnRhaW5tZW50IG9mIFBSSyBsZXZlbCAoMikgYnkgUFJLICgxKSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3LmlibS5jb20iIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKworPCEtLSBQUlQgLS0+Cis8c3RlbV9jYXRlZ29yeSBpZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLnBydCIgbmFtZT0iUFJUIiBwYXJlbnRfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcyIvPgorCTwhLS0gTm9kZXMgYW5kIExhYmVscyAtLT4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLnBydCIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvUFJUL1BSVF8wX2FyZWEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IlBSVCAoMCkgYXJlYSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwczovL3d3dy5jaWEuZ292L2NpYS9wdWJsaWNhdGlvbnMvZmFjdGJvb2svZ2Vvcy9wby5odG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5wcnQiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L1BSVC9QUlRfMC5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iUFJUKDApIE5vZGVzIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaXNvLm9yZy9pc28vaG9tZS5odG0iIHNwYXRpYWw9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9nZW8vY291bnRyeS9QUlQvUFJUXzBfTUFQLnhtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMucHJ0IiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9QUlQvUFJUXzFfYXJlYS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iUFJUICgxKSBhcmVhIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5wcnQiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L1BSVC9QUlRfMS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iUFJUKDEpIE5vZGVzIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaXNvLm9yZy9pc28vaG9tZS5odG0iIHNwYXRpYWw9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9nZW8vY291bnRyeS9QUlQvUFJUXzFfTUFQLnhtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorCTwhLS0gRWRnZXMgLS0+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5wcnQiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvY29tbW9uYm9yZGVyL1BSVF8xX1BSVF8xLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJDb21tb24gQm9yZGVyIHJlbGF0aW9uc2hpcCB3aXRoaW4gY291bnRyeSBQUlQiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHZhbGlkPSJzdGFydD0yMDA2LTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLnBydCIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9yZWxhdGl2ZXBoeXNpY2FsL1BSVF8wX1BSVF8xLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJQaHlzaWNhbCBjb250YWlubWVudCBvZiBQUlQgbGV2ZWwgKDEpIGJ5IFBSVCAoMCkiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pYm0uY29tIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+CisKKzwhLS0gUFJZIC0tPgorPHN0ZW1fY2F0ZWdvcnkgaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5wcnkiIG5hbWU9IlBSWSIgcGFyZW50X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMiLz4KKwk8IS0tIE5vZGVzIGFuZCBMYWJlbHMgLS0+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5wcnkiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L1BSWS9QUllfMF9hcmVhLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJQUlkgKDApIGFyZWEiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cHM6Ly93d3cuY2lhLmdvdi9jaWEvcHVibGljYXRpb25zL2ZhY3Rib29rL2dlb3MvcGEuaHRtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMucHJ5IiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9QUlkvUFJZXzAuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IlBSWSgwKSBOb2RlcyIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3Lmlzby5vcmcvaXNvL2hvbWUuaHRtIiBzcGF0aWFsPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvZ2VvL2NvdW50cnkvUFJZL1BSWV8wX01BUC54bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLnByeSIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvUFJZL1BSWV8xX2FyZWEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IlBSWSAoMSkgYXJlYSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwczovL3d3dy5jaWEuZ292L2xpYnJhcnkvcHVibGljYXRpb25zL3RoZS13b3JsZC1mYWN0Ym9vay8iIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLnByeSIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvUFJZL1BSWV8xLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJQUlkoMSkgTm9kZXMiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pc28ub3JnL2lzby9ob21lLmh0bSIgc3BhdGlhbD0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2dlby9jb3VudHJ5L1BSWS9QUllfMV9NQVAueG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5wcnkiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L1BSWS9QUllfMl9hcmVhLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJQUlkgKDIpIGFyZWEiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cHM6Ly93d3cuY2lhLmdvdi9saWJyYXJ5L3B1YmxpY2F0aW9ucy90aGUtd29ybGQtZmFjdGJvb2svIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5wcnkiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L1BSWS9QUllfMi5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iUFJZKDIpIE5vZGVzIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaXNvLm9yZy9pc28vaG9tZS5odG0iIHNwYXRpYWw9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9nZW8vY291bnRyeS9QUlkvUFJZXzJfTUFQLnhtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorCTwhLS0gRWRnZXMgLS0+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5wcnkiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvY29tbW9uYm9yZGVyL1BSWV8yX1BSWV8yLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJDb21tb24gQm9yZGVyIHJlbGF0aW9uc2hpcCB3aXRoaW4gY291bnRyeSBQUlkiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHZhbGlkPSJzdGFydD0yMDA2LTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLnByeSIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9yZWxhdGl2ZXBoeXNpY2FsL1BSWV8wX1BSWV8xLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJQaHlzaWNhbCBjb250YWlubWVudCBvZiBQUlkgbGV2ZWwgKDEpIGJ5IFBSWSAoMCkiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pYm0uY29tIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5wcnkiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvcmVsYXRpdmVwaHlzaWNhbC9QUllfMV9QUllfMi5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iUGh5c2ljYWwgY29udGFpbm1lbnQgb2YgUFJZIGxldmVsICgyKSBieSBQUlkgKDEpIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaWJtLmNvbSIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorCis8IS0tIFBTRSAtLT4KKzxzdGVtX2NhdGVnb3J5IGlkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMucHNlIiBuYW1lPSJQU0UiIHBhcmVudF9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzIi8+CisJPCEtLSBOb2RlcyBhbmQgTGFiZWxzIC0tPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMucHNlIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9QU0UvUFNFXzBfYXJlYS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iUFNFICgwKSBhcmVhIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHBzOi8vd3d3LmNpYS5nb3YvY2lhL3B1YmxpY2F0aW9ucy9mYWN0Ym9vay9nZW9zL3dlLmh0bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLnBzZSIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvUFNFL1BTRV8wLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJQU0UoMCkgTm9kZXMiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pc28ub3JnL2lzby9ob21lLmh0bSIgc3BhdGlhbD0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2dlby9jb3VudHJ5L1BTRS9QU0VfMF9NQVAueG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5wc2UiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L1BTRS9QU0VfMV9hcmVhLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJQU0UgKDEpIGFyZWEiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iSXNyYWVsIENEQyBiaXRtYXAgKHNjYW5uZWQpIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5wc2UiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L1BTRS9QU0VfMS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iUFNFKDEpIE5vZGVzIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaXNvLm9yZy9pc28vaG9tZS5odG0iIHNwYXRpYWw9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9nZW8vY291bnRyeS9QU0UvUFNFXzFfTUFQLnhtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorCTwhLS0gRWRnZXMgLS0+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5wc2UiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvY29tbW9uYm9yZGVyL1BTRV8xX1BTRV8xLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJDb21tb24gQm9yZGVyIHJlbGF0aW9uc2hpcCB3aXRoaW4gY291bnRyeSBQU0UiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHZhbGlkPSJzdGFydD0yMDA2LTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLnBzZSIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9yZWxhdGl2ZXBoeXNpY2FsL1BTRV8wX1BTRV8xLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJQaHlzaWNhbCBjb250YWlubWVudCBvZiBQU0UgbGV2ZWwgKDEpIGJ5IFBTRSAoMCkiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pYm0uY29tIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+CisKKzwhLS0gUFlGIC0tPgorPHN0ZW1fY2F0ZWdvcnkgaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5weWYiIG5hbWU9IlBZRiIgcGFyZW50X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMiLz4KKwk8IS0tIE5vZGVzIGFuZCBMYWJlbHMgLS0+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5weWYiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L1BZRi9QWUZfMF9hcmVhLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJQWUYgKDApIGFyZWEiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cHM6Ly93d3cuY2lhLmdvdi9jaWEvcHVibGljYXRpb25zL2ZhY3Rib29rL2dlb3MvZnAuaHRtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMucHlmIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9QWUYvUFlGXzAuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IlBZRigwKSBOb2RlcyIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3Lmlzby5vcmcvaXNvL2hvbWUuaHRtIiBzcGF0aWFsPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvZ2VvL2NvdW50cnkvUFlGL1BZRl8wX01BUC54bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKworPCEtLSBRQVQgLS0+Cis8c3RlbV9jYXRlZ29yeSBpZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLnFhdCIgbmFtZT0iUUFUIiBwYXJlbnRfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcyIvPgorCTwhLS0gTm9kZXMgYW5kIExhYmVscyAtLT4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLnFhdCIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvUUFUL1FBVF8wX2FyZWEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IlFBVCAoMCkgYXJlYSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwczovL3d3dy5jaWEuZ292L2NpYS9wdWJsaWNhdGlvbnMvZmFjdGJvb2svZ2Vvcy9xYS5odG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5xYXQiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L1FBVC9RQVRfMC5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iUUFUKDApIE5vZGVzIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaXNvLm9yZy9pc28vaG9tZS5odG0iIHNwYXRpYWw9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9nZW8vY291bnRyeS9RQVQvUUFUXzBfTUFQLnhtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMucWF0IiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9RQVQvUUFUXzFfYXJlYS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iUUFUICgxKSBhcmVhIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHBzOi8vd3d3LmNpYS5nb3YvbGlicmFyeS9wdWJsaWNhdGlvbnMvdGhlLXdvcmxkLWZhY3Rib29rLyIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMucWF0IiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9RQVQvUUFUXzEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IlFBVCgxKSBOb2RlcyIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3Lmlzby5vcmcvaXNvL2hvbWUuaHRtIiBzcGF0aWFsPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvZ2VvL2NvdW50cnkvUUFUL1FBVF8xX01BUC54bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLnFhdCIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvUUFUL1FBVF8yX2FyZWEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IlFBVCAoMikgYXJlYSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwczovL3d3dy5jaWEuZ292L2xpYnJhcnkvcHVibGljYXRpb25zL3RoZS13b3JsZC1mYWN0Ym9vay8iIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLnFhdCIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvUUFUL1FBVF8yLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJRQVQoMikgTm9kZXMiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pc28ub3JnL2lzby9ob21lLmh0bSIgc3BhdGlhbD0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2dlby9jb3VudHJ5L1FBVC9RQVRfMl9NQVAueG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+CisJPCEtLSBFZGdlcyAtLT4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLnFhdCIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9jb21tb25ib3JkZXIvUUFUXzJfUUFUXzIuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkNvbW1vbiBCb3JkZXIgcmVsYXRpb25zaGlwIHdpdGhpbiBjb3VudHJ5IFFBVCIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgdmFsaWQ9InN0YXJ0PTIwMDYtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMucWF0IiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL2NvbW1vbmJvcmRlci9RQVRfMl9TQVVfMi5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQ29tbW9uIEJvcmRlciByZWxhdGlvbnNoaXAgYmV0d2VlbiBjb3VudHJ5IFFBVCBhbmQgU0FVIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiB2YWxpZD0ic3RhcnQ9MjAwNi0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5xYXQiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvcmVsYXRpdmVwaHlzaWNhbC9RQVRfMF9RQVRfMS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iUGh5c2ljYWwgY29udGFpbm1lbnQgb2YgUUFUIGxldmVsICgxKSBieSBRQVQgKDApIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaWJtLmNvbSIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMucWF0IiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL3JlbGF0aXZlcGh5c2ljYWwvUUFUXzFfUUFUXzIuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IlBoeXNpY2FsIGNvbnRhaW5tZW50IG9mIFFBVCBsZXZlbCAoMikgYnkgUUFUICgxKSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3LmlibS5jb20iIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKworPCEtLSBSRVUgLS0+Cis8c3RlbV9jYXRlZ29yeSBpZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLnJldSIgbmFtZT0iUkVVIiBwYXJlbnRfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcyIvPgorCTwhLS0gTm9kZXMgYW5kIExhYmVscyAtLT4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLnJldSIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvUkVVL1JFVV8wX2FyZWEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IlJFVSAoMCkgYXJlYSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwczovL3d3dy5jaWEuZ292L2NpYS9wdWJsaWNhdGlvbnMvZmFjdGJvb2svZ2Vvcy9yZS5odG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5yZXUiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L1JFVS9SRVVfMC5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iUkVVKDApIE5vZGVzIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaXNvLm9yZy9pc28vaG9tZS5odG0iIHNwYXRpYWw9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9nZW8vY291bnRyeS9SRVUvUkVVXzBfTUFQLnhtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorCis8IS0tIFJPVSAtLT4KKzxzdGVtX2NhdGVnb3J5IGlkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMucm91IiBuYW1lPSJST1UiIHBhcmVudF9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzIi8+CisJPCEtLSBOb2RlcyBhbmQgTGFiZWxzIC0tPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMucm91IiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9ST1UvUk9VXzBfYXJlYS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iUk9VICgwKSBhcmVhIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHBzOi8vd3d3LmNpYS5nb3YvY2lhL3B1YmxpY2F0aW9ucy9mYWN0Ym9vay9nZW9zL3JvLmh0bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLnJvdSIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvUk9VL1JPVV8wLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJST1UoMCkgTm9kZXMiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pc28ub3JnL2lzby9ob21lLmh0bSIgc3BhdGlhbD0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2dlby9jb3VudHJ5L1JPVS9ST1VfMF9NQVAueG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5yb3UiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L1JPVS9ST1VfMV9hcmVhLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJST1UgKDEpIGFyZWEiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLnJvdSIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvUk9VL1JPVV8xLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJST1UoMSkgTm9kZXMiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pc28ub3JnL2lzby9ob21lLmh0bSIgc3BhdGlhbD0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2dlby9jb3VudHJ5L1JPVS9ST1VfMV9NQVAueG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+CisJPCEtLSBFZGdlcyAtLT4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLnJvdSIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9jb21tb25ib3JkZXIvUk9VXzBfVUtSXzAuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkNvbW1vbiBCb3JkZXIgYmV0d2VlbiBjb3VudHJ5IFJPVSBhbmQgVUtSIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiB2YWxpZD0ic3RhcnQ9MjAwMS0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5yb3UiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvY29tbW9uYm9yZGVyL1JPVV8wX1VLUl8xLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJDb21tb24gQm9yZGVyIGJldHdlZW4gY291bnRyeSBST1UgYW5kIFVLUiIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgdmFsaWQ9InN0YXJ0PTIwMDEtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMucm91IiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL2NvbW1vbmJvcmRlci9ST1VfMV9ST1VfMS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQ29tbW9uIEJvcmRlciByZWxhdGlvbnNoaXAgd2l0aGluIGNvdW50cnkgUk9VIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiB2YWxpZD0ic3RhcnQ9MjAwNi0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5yb3UiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvY29tbW9uYm9yZGVyL1JPVV8xX1NSQl8xLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJDb21tb24gQm9yZGVyIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIGNvdW50cnkgUk9VIGFuZCBTUkIiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHZhbGlkPSJzdGFydD0yMDA2LTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLnJvdSIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9jb21tb25ib3JkZXIvUk9VXzFfVUtSXzAuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkNvbW1vbiBCb3JkZXIgYmV0d2VlbiBjb3VudHJ5IFJPVSBhbmQgVUtSIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiB2YWxpZD0ic3RhcnQ9MjAwMS0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5yb3UiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvY29tbW9uYm9yZGVyL1JPVV8xX1VLUl8xLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJDb21tb24gQm9yZGVyIGJldHdlZW4gY291bnRyeSBST1UgYW5kIFVLUiIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgdmFsaWQ9InN0YXJ0PTIwMDEtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMucm91IiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL3JlbGF0aXZlcGh5c2ljYWwvUk9VXzBfUk9VXzEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IlBoeXNpY2FsIGNvbnRhaW5tZW50IG9mIFJPVSBsZXZlbCAoMSkgYnkgUk9VICgwKSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3LmlibS5jb20iIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKworPCEtLSBSVVMgLS0+Cis8c3RlbV9jYXRlZ29yeSBpZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLnJ1cyIgbmFtZT0iUlVTIiBwYXJlbnRfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcyIvPgorCTwhLS0gTm9kZXMgYW5kIExhYmVscyAtLT4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLnJ1cyIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvUlVTL1JVU18wX2FyZWEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IlJVUyAoMCkgYXJlYSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwczovL3d3dy5jaWEuZ292L2NpYS9wdWJsaWNhdGlvbnMvZmFjdGJvb2svZ2Vvcy9ycy5odG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5ydXMiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L1JVUy9SVVNfMC5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iUlVTKDApIE5vZGVzIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaXNvLm9yZy9pc28vaG9tZS5odG0iIHNwYXRpYWw9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9nZW8vY291bnRyeS9SVVMvUlVTXzBfTUFQLnhtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMucnVzIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9SVVMvUlVTXzFfYXJlYS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iUlVTICgxKSBhcmVhIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuZ3JpZC51bmVwLmNoL2RhdGEvZGF0YS5waHA/Y2F0ZWdvcnk9aHVtYW5fcmVsYXRlZCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMucnVzIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9SVVMvUlVTXzEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IlJVUygxKSBOb2RlcyIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3Lmlzby5vcmcvaXNvL2hvbWUuaHRtIiBzcGF0aWFsPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvZ2VvL2NvdW50cnkvUlVTL1JVU18xX01BUC54bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKwk8IS0tIEVkZ2VzIC0tPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMucnVzIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL2NvbW1vbmJvcmRlci9SVVNfMF9VS1JfMC5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQ29tbW9uIEJvcmRlciBiZXR3ZWVuIGNvdW50cnkgUlVTIGFuZCBVS1IiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHZhbGlkPSJzdGFydD0yMDAxLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLnJ1cyIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9jb21tb25ib3JkZXIvUlVTXzBfVUtSXzEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkNvbW1vbiBCb3JkZXIgYmV0d2VlbiBjb3VudHJ5IFJVUyBhbmQgVUtSIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiB2YWxpZD0ic3RhcnQ9MjAwMS0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5ydXMiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvY29tbW9uYm9yZGVyL1JVU18xX1JVU18xLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJDb21tb24gQm9yZGVyIHJlbGF0aW9uc2hpcCB3aXRoaW4gY291bnRyeSBSVVMiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHZhbGlkPSJzdGFydD0yMDA2LTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLnJ1cyIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9jb21tb25ib3JkZXIvUlVTXzFfVUtSXzAuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkNvbW1vbiBCb3JkZXIgYmV0d2VlbiBjb3VudHJ5IFJVUyBhbmQgVUtSIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiB2YWxpZD0ic3RhcnQ9MjAwMS0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5ydXMiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvY29tbW9uYm9yZGVyL1JVU18xX1VLUl8xLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJDb21tb24gQm9yZGVyIGJldHdlZW4gY291bnRyeSBSVVMgYW5kIFVLUiIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgdmFsaWQ9InN0YXJ0PTIwMDEtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMucnVzIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL3JlbGF0aXZlcGh5c2ljYWwvUlVTXzBfUlVTXzEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IlBoeXNpY2FsIGNvbnRhaW5tZW50IG9mIFJVUyBsZXZlbCAoMSkgYnkgUlVTICgwKSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3LmlibS5jb20iIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKworPCEtLSBSV0EgLS0+Cis8c3RlbV9jYXRlZ29yeSBpZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLnJ3YSIgbmFtZT0iUldBIiBwYXJlbnRfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcyIvPgorCTwhLS0gTm9kZXMgYW5kIExhYmVscyAtLT4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLnJ3YSIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvUldBL1JXQV8wX2FyZWEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IlJXQSAoMCkgYXJlYSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwczovL3d3dy5jaWEuZ292L2NpYS9wdWJsaWNhdGlvbnMvZmFjdGJvb2svZ2Vvcy9ydy5odG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5yd2EiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L1JXQS9SV0FfMC5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iUldBKDApIE5vZGVzIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaXNvLm9yZy9pc28vaG9tZS5odG0iIHNwYXRpYWw9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9nZW8vY291bnRyeS9SV0EvUldBXzBfTUFQLnhtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMucndhIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9SV0EvUldBXzFfYXJlYS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iUldBICgxKSBhcmVhIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHBzOi8vd3d3LmNpYS5nb3YvbGlicmFyeS9wdWJsaWNhdGlvbnMvdGhlLXdvcmxkLWZhY3Rib29rLyIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMucndhIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9SV0EvUldBXzEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IlJXQSgxKSBOb2RlcyIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3Lmlzby5vcmcvaXNvL2hvbWUuaHRtIiBzcGF0aWFsPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvZ2VvL2NvdW50cnkvUldBL1JXQV8xX01BUC54bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLnJ3YSIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvUldBL1JXQV8yX2FyZWEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IlJXQSAoMikgYXJlYSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwczovL3d3dy5jaWEuZ292L2xpYnJhcnkvcHVibGljYXRpb25zL3RoZS13b3JsZC1mYWN0Ym9vay8iIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLnJ3YSIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvUldBL1JXQV8yLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJSV0EoMikgTm9kZXMiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pc28ub3JnL2lzby9ob21lLmh0bSIgc3BhdGlhbD0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2dlby9jb3VudHJ5L1JXQS9SV0FfMl9NQVAueG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+CisJPCEtLSBFZGdlcyAtLT4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLnJ3YSIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9jb21tb25ib3JkZXIvUldBXzJfUldBXzIuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkNvbW1vbiBCb3JkZXIgcmVsYXRpb25zaGlwIHdpdGhpbiBjb3VudHJ5IFJXQSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgdmFsaWQ9InN0YXJ0PTIwMDYtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMucndhIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL2NvbW1vbmJvcmRlci9SV0FfMl9UWkFfMi5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQ29tbW9uIEJvcmRlciByZWxhdGlvbnNoaXAgYmV0d2VlbiBjb3VudHJ5IFJXQSBhbmQgVFpBIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiB2YWxpZD0ic3RhcnQ9MjAwNi0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5yd2EiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvY29tbW9uYm9yZGVyL1JXQV8yX1VHQV8yLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJDb21tb24gQm9yZGVyIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIGNvdW50cnkgUldBIGFuZCBVR0EiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHZhbGlkPSJzdGFydD0yMDA2LTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLnJ3YSIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9yZWxhdGl2ZXBoeXNpY2FsL1JXQV8wX1JXQV8xLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJQaHlzaWNhbCBjb250YWlubWVudCBvZiBSV0EgbGV2ZWwgKDEpIGJ5IFJXQSAoMCkiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pYm0uY29tIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5yd2EiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvcmVsYXRpdmVwaHlzaWNhbC9SV0FfMV9SV0FfMi5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iUGh5c2ljYWwgY29udGFpbm1lbnQgb2YgUldBIGxldmVsICgyKSBieSBSV0EgKDEpIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaWJtLmNvbSIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorCis8IS0tIFNBVSAtLT4KKzxzdGVtX2NhdGVnb3J5IGlkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuc2F1IiBuYW1lPSJTQVUiIHBhcmVudF9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzIi8+CisJPCEtLSBOb2RlcyBhbmQgTGFiZWxzIC0tPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuc2F1IiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9TQVUvU0FVXzBfYXJlYS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iU0FVICgwKSBhcmVhIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHBzOi8vd3d3LmNpYS5nb3YvY2lhL3B1YmxpY2F0aW9ucy9mYWN0Ym9vay9nZW9zL3NhLmh0bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLnNhdSIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvU0FVL1NBVV8wLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJTQVUoMCkgTm9kZXMiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pc28ub3JnL2lzby9ob21lLmh0bSIgc3BhdGlhbD0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2dlby9jb3VudHJ5L1NBVS9TQVVfMF9NQVAueG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5zYXUiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L1NBVS9TQVVfMV9hcmVhLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJTQVUgKDEpIGFyZWEiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cHM6Ly93d3cuY2lhLmdvdi9saWJyYXJ5L3B1YmxpY2F0aW9ucy90aGUtd29ybGQtZmFjdGJvb2svIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5zYXUiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L1NBVS9TQVVfMS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iU0FVKDEpIE5vZGVzIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaXNvLm9yZy9pc28vaG9tZS5odG0iIHNwYXRpYWw9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9nZW8vY291bnRyeS9TQVUvU0FVXzFfTUFQLnhtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuc2F1IiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9TQVUvU0FVXzJfYXJlYS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iU0FVICgyKSBhcmVhIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHBzOi8vd3d3LmNpYS5nb3YvbGlicmFyeS9wdWJsaWNhdGlvbnMvdGhlLXdvcmxkLWZhY3Rib29rLyIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuc2F1IiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9TQVUvU0FVXzIuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IlNBVSgyKSBOb2RlcyIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3Lmlzby5vcmcvaXNvL2hvbWUuaHRtIiBzcGF0aWFsPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvZ2VvL2NvdW50cnkvU0FVL1NBVV8yX01BUC54bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKwk8IS0tIEVkZ2VzIC0tPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuc2F1IiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL2NvbW1vbmJvcmRlci9TQVVfMl9TQVVfMi5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQ29tbW9uIEJvcmRlciByZWxhdGlvbnNoaXAgd2l0aGluIGNvdW50cnkgU0FVIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiB2YWxpZD0ic3RhcnQ9MjAwNi0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5zYXUiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvY29tbW9uYm9yZGVyL1NBVV8yX1lFTV8yLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJDb21tb24gQm9yZGVyIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIGNvdW50cnkgU0FVIGFuZCBZRU0iIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHZhbGlkPSJzdGFydD0yMDA2LTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLnNhdSIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9yZWxhdGl2ZXBoeXNpY2FsL1NBVV8wX1NBVV8xLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJQaHlzaWNhbCBjb250YWlubWVudCBvZiBTQVUgbGV2ZWwgKDEpIGJ5IFNBVSAoMCkiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pYm0uY29tIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5zYXUiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvcmVsYXRpdmVwaHlzaWNhbC9TQVVfMV9TQVVfMi5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iUGh5c2ljYWwgY29udGFpbm1lbnQgb2YgU0FVIGxldmVsICgyKSBieSBTQVUgKDEpIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaWJtLmNvbSIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorCis8IS0tIFNETiAtLT4KKzxzdGVtX2NhdGVnb3J5IGlkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuc2RuIiBuYW1lPSJTRE4iIHBhcmVudF9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzIi8+CisJPCEtLSBOb2RlcyBhbmQgTGFiZWxzIC0tPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuc2RuIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9TRE4vU0ROXzBfYXJlYS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iU0ROICgwKSBhcmVhIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHBzOi8vd3d3LmNpYS5nb3YvY2lhL3B1YmxpY2F0aW9ucy9mYWN0Ym9vay9nZW9zL3N1Lmh0bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLnNkbiIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvU0ROL1NETl8wLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJTRE4oMCkgTm9kZXMiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pc28ub3JnL2lzby9ob21lLmh0bSIgc3BhdGlhbD0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2dlby9jb3VudHJ5L1NETi9TRE5fMF9NQVAueG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5zZG4iIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L1NETi9TRE5fMV9hcmVhLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJTRE4gKDEpIGFyZWEiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cHM6Ly93d3cuY2lhLmdvdi9saWJyYXJ5L3B1YmxpY2F0aW9ucy90aGUtd29ybGQtZmFjdGJvb2svIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5zZG4iIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L1NETi9TRE5fMS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iU0ROKDEpIE5vZGVzIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaXNvLm9yZy9pc28vaG9tZS5odG0iIHNwYXRpYWw9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9nZW8vY291bnRyeS9TRE4vU0ROXzFfTUFQLnhtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuc2RuIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9TRE4vU0ROXzJfYXJlYS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iU0ROICgyKSBhcmVhIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHBzOi8vd3d3LmNpYS5nb3YvbGlicmFyeS9wdWJsaWNhdGlvbnMvdGhlLXdvcmxkLWZhY3Rib29rLyIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuc2RuIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9TRE4vU0ROXzIuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IlNETigyKSBOb2RlcyIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3Lmlzby5vcmcvaXNvL2hvbWUuaHRtIiBzcGF0aWFsPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvZ2VvL2NvdW50cnkvU0ROL1NETl8yX01BUC54bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKwk8IS0tIEVkZ2VzIC0tPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuc2RuIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL2NvbW1vbmJvcmRlci9TRE5fMl9TRE5fMi5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQ29tbW9uIEJvcmRlciByZWxhdGlvbnNoaXAgd2l0aGluIGNvdW50cnkgU0ROIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiB2YWxpZD0ic3RhcnQ9MjAwNi0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5zZG4iIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvY29tbW9uYm9yZGVyL1NETl8yX1RDRF8yLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJDb21tb24gQm9yZGVyIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIGNvdW50cnkgU0ROIGFuZCBUQ0QiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHZhbGlkPSJzdGFydD0yMDA2LTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLnNkbiIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9jb21tb25ib3JkZXIvU0ROXzJfVUdBXzIuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkNvbW1vbiBCb3JkZXIgcmVsYXRpb25zaGlwIGJldHdlZW4gY291bnRyeSBTRE4gYW5kIFVHQSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgdmFsaWQ9InN0YXJ0PTIwMDYtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuc2RuIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL3JlbGF0aXZlcGh5c2ljYWwvU0ROXzBfU0ROXzEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IlBoeXNpY2FsIGNvbnRhaW5tZW50IG9mIFNETiBsZXZlbCAoMSkgYnkgU0ROICgwKSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3LmlibS5jb20iIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLnNkbiIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9yZWxhdGl2ZXBoeXNpY2FsL1NETl8xX1NETl8yLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJQaHlzaWNhbCBjb250YWlubWVudCBvZiBTRE4gbGV2ZWwgKDIpIGJ5IFNETiAoMSkiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pYm0uY29tIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+CisKKzwhLS0gU0VOIC0tPgorPHN0ZW1fY2F0ZWdvcnkgaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5zZW4iIG5hbWU9IlNFTiIgcGFyZW50X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMiLz4KKwk8IS0tIE5vZGVzIGFuZCBMYWJlbHMgLS0+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5zZW4iIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L1NFTi9TRU5fMF9hcmVhLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJTRU4gKDApIGFyZWEiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cHM6Ly93d3cuY2lhLmdvdi9jaWEvcHVibGljYXRpb25zL2ZhY3Rib29rL2dlb3Mvc2cuaHRtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuc2VuIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9TRU4vU0VOXzAuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IlNFTigwKSBOb2RlcyIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3Lmlzby5vcmcvaXNvL2hvbWUuaHRtIiBzcGF0aWFsPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvZ2VvL2NvdW50cnkvU0VOL1NFTl8wX01BUC54bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLnNlbiIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvU0VOL1NFTl8xX2FyZWEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IlNFTiAoMSkgYXJlYSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwczovL3d3dy5jaWEuZ292L2xpYnJhcnkvcHVibGljYXRpb25zL3RoZS13b3JsZC1mYWN0Ym9vay8iIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLnNlbiIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvU0VOL1NFTl8xLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJTRU4oMSkgTm9kZXMiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pc28ub3JnL2lzby9ob21lLmh0bSIgc3BhdGlhbD0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2dlby9jb3VudHJ5L1NFTi9TRU5fMV9NQVAueG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5zZW4iIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L1NFTi9TRU5fMl9hcmVhLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJTRU4gKDIpIGFyZWEiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cHM6Ly93d3cuY2lhLmdvdi9saWJyYXJ5L3B1YmxpY2F0aW9ucy90aGUtd29ybGQtZmFjdGJvb2svIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5zZW4iIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L1NFTi9TRU5fMi5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iU0VOKDIpIE5vZGVzIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaXNvLm9yZy9pc28vaG9tZS5odG0iIHNwYXRpYWw9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9nZW8vY291bnRyeS9TRU4vU0VOXzJfTUFQLnhtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorCTwhLS0gRWRnZXMgLS0+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5zZW4iIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvY29tbW9uYm9yZGVyL1NFTl8yX1NFTl8yLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJDb21tb24gQm9yZGVyIHJlbGF0aW9uc2hpcCB3aXRoaW4gY291bnRyeSBTRU4iIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHZhbGlkPSJzdGFydD0yMDA2LTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLnNlbiIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9yZWxhdGl2ZXBoeXNpY2FsL1NFTl8wX1NFTl8xLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJQaHlzaWNhbCBjb250YWlubWVudCBvZiBTRU4gbGV2ZWwgKDEpIGJ5IFNFTiAoMCkiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pYm0uY29tIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5zZW4iIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvcmVsYXRpdmVwaHlzaWNhbC9TRU5fMV9TRU5fMi5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iUGh5c2ljYWwgY29udGFpbm1lbnQgb2YgU0VOIGxldmVsICgyKSBieSBTRU4gKDEpIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaWJtLmNvbSIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorCis8IS0tIFNHUCAtLT4KKzxzdGVtX2NhdGVnb3J5IGlkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuc2dwIiBuYW1lPSJTR1AiIHBhcmVudF9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzIi8+CisJPCEtLSBOb2RlcyBhbmQgTGFiZWxzIC0tPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuc2dwIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9TR1AvU0dQXzBfYXJlYS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iU0dQICgwKSBhcmVhIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHBzOi8vd3d3LmNpYS5nb3YvY2lhL3B1YmxpY2F0aW9ucy9mYWN0Ym9vay9nZW9zL3NuLmh0bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLnNncCIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvU0dQL1NHUF8wLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJTR1AoMCkgTm9kZXMiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pc28ub3JnL2lzby9ob21lLmh0bSIgc3BhdGlhbD0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2dlby9jb3VudHJ5L1NHUC9TR1BfMF9NQVAueG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5zZ3AiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L1NHUC9TR1BfMV9hcmVhLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJTR1AgKDEpIGFyZWEiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cHM6Ly93d3cuY2lhLmdvdi9saWJyYXJ5L3B1YmxpY2F0aW9ucy90aGUtd29ybGQtZmFjdGJvb2svIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5zZ3AiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L1NHUC9TR1BfMS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iU0dQKDEpIE5vZGVzIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaXNvLm9yZy9pc28vaG9tZS5odG0iIHNwYXRpYWw9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9nZW8vY291bnRyeS9TR1AvU0dQXzFfTUFQLnhtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuc2dwIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9TR1AvU0dQXzJfYXJlYS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iU0dQICgyKSBhcmVhIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHBzOi8vd3d3LmNpYS5nb3YvbGlicmFyeS9wdWJsaWNhdGlvbnMvdGhlLXdvcmxkLWZhY3Rib29rLyIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuc2dwIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9TR1AvU0dQXzIuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IlNHUCgyKSBOb2RlcyIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3Lmlzby5vcmcvaXNvL2hvbWUuaHRtIiBzcGF0aWFsPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvZ2VvL2NvdW50cnkvU0dQL1NHUF8yX01BUC54bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKwk8IS0tIEVkZ2VzIC0tPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuc2dwIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL2NvbW1vbmJvcmRlci9TR1BfMl9TR1BfMi5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQ29tbW9uIEJvcmRlciByZWxhdGlvbnNoaXAgd2l0aGluIGNvdW50cnkgU0dQIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiB2YWxpZD0ic3RhcnQ9MjAwNi0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5zZ3AiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvcmVsYXRpdmVwaHlzaWNhbC9TR1BfMF9TR1BfMS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iUGh5c2ljYWwgY29udGFpbm1lbnQgb2YgU0dQIGxldmVsICgxKSBieSBTR1AgKDApIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaWJtLmNvbSIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuc2dwIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL3JlbGF0aXZlcGh5c2ljYWwvU0dQXzFfU0dQXzIuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IlBoeXNpY2FsIGNvbnRhaW5tZW50IG9mIFNHUCBsZXZlbCAoMikgYnkgU0dQICgxKSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3LmlibS5jb20iIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKworPCEtLSBTR1MgLS0+Cis8c3RlbV9jYXRlZ29yeSBpZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLnNncyIgbmFtZT0iU0dTIiBwYXJlbnRfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcyIvPgorCTwhLS0gTm9kZXMgYW5kIExhYmVscyAtLT4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLnNncyIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvU0dTL1NHU18wX2FyZWEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IlNHUyAoMCkgYXJlYSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwczovL3d3dy5jaWEuZ292L2NpYS9wdWJsaWNhdGlvbnMvZmFjdGJvb2svZ2Vvcy9zeC5odG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5zZ3MiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L1NHUy9TR1NfMC5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iU0dTKDApIE5vZGVzIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaXNvLm9yZy9pc28vaG9tZS5odG0iIHNwYXRpYWw9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9nZW8vY291bnRyeS9TR1MvU0dTXzBfTUFQLnhtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorCis8IS0tIFNITiAtLT4KKzxzdGVtX2NhdGVnb3J5IGlkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuc2huIiBuYW1lPSJTSE4iIHBhcmVudF9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzIi8+CisJPCEtLSBOb2RlcyBhbmQgTGFiZWxzIC0tPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuc2huIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9TSE4vU0hOXzBfYXJlYS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iU0hOICgwKSBhcmVhIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHBzOi8vd3d3LmNpYS5nb3YvY2lhL3B1YmxpY2F0aW9ucy9mYWN0Ym9vay9nZW9zL3NoLmh0bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLnNobiIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvU0hOL1NITl8wLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJTSE4oMCkgTm9kZXMiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pc28ub3JnL2lzby9ob21lLmh0bSIgc3BhdGlhbD0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2dlby9jb3VudHJ5L1NITi9TSE5fMF9NQVAueG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+CisKKzwhLS0gU0pNIC0tPgorPHN0ZW1fY2F0ZWdvcnkgaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5zam0iIG5hbWU9IlNKTSIgcGFyZW50X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMiLz4KKwk8IS0tIE5vZGVzIGFuZCBMYWJlbHMgLS0+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5zam0iIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L1NKTS9TSk1fMF9hcmVhLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJTSk0gKDApIGFyZWEiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cHM6Ly93d3cuY2lhLmdvdi9jaWEvcHVibGljYXRpb25zL2ZhY3Rib29rL2dlb3Mvc3YuaHRtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuc2ptIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9TSk0vU0pNXzAuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IlNKTSgwKSBOb2RlcyIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3Lmlzby5vcmcvaXNvL2hvbWUuaHRtIiBzcGF0aWFsPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvZ2VvL2NvdW50cnkvU0pNL1NKTV8wX01BUC54bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKworPCEtLSBTTEIgLS0+Cis8c3RlbV9jYXRlZ29yeSBpZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLnNsYiIgbmFtZT0iU0xCIiBwYXJlbnRfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcyIvPgorCTwhLS0gTm9kZXMgYW5kIExhYmVscyAtLT4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLnNsYiIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvU0xCL1NMQl8wX2FyZWEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IlNMQiAoMCkgYXJlYSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwczovL3d3dy5jaWEuZ292L2NpYS9wdWJsaWNhdGlvbnMvZmFjdGJvb2svZ2Vvcy9icC5odG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5zbGIiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L1NMQi9TTEJfMC5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iU0xCKDApIE5vZGVzIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaXNvLm9yZy9pc28vaG9tZS5odG0iIHNwYXRpYWw9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9nZW8vY291bnRyeS9TTEIvU0xCXzBfTUFQLnhtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorCis8IS0tIFNMRSAtLT4KKzxzdGVtX2NhdGVnb3J5IGlkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuc2xlIiBuYW1lPSJTTEUiIHBhcmVudF9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzIi8+CisJPCEtLSBOb2RlcyBhbmQgTGFiZWxzIC0tPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuc2xlIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9TTEUvU0xFXzBfYXJlYS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iU0xFICgwKSBhcmVhIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHBzOi8vd3d3LmNpYS5nb3YvY2lhL3B1YmxpY2F0aW9ucy9mYWN0Ym9vay9nZW9zL3NsLmh0bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLnNsZSIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvU0xFL1NMRV8wLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJTTEUoMCkgTm9kZXMiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pc28ub3JnL2lzby9ob21lLmh0bSIgc3BhdGlhbD0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2dlby9jb3VudHJ5L1NMRS9TTEVfMF9NQVAueG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5zbGUiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L1NMRS9TTEVfMV9hcmVhLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJTTEUgKDEpIGFyZWEiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cHM6Ly93d3cuY2lhLmdvdi9saWJyYXJ5L3B1YmxpY2F0aW9ucy90aGUtd29ybGQtZmFjdGJvb2svIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5zbGUiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L1NMRS9TTEVfMS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iU0xFKDEpIE5vZGVzIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaXNvLm9yZy9pc28vaG9tZS5odG0iIHNwYXRpYWw9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9nZW8vY291bnRyeS9TTEUvU0xFXzFfTUFQLnhtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuc2xlIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9TTEUvU0xFXzJfYXJlYS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iU0xFICgyKSBhcmVhIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHBzOi8vd3d3LmNpYS5nb3YvbGlicmFyeS9wdWJsaWNhdGlvbnMvdGhlLXdvcmxkLWZhY3Rib29rLyIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuc2xlIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9TTEUvU0xFXzIuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IlNMRSgyKSBOb2RlcyIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3Lmlzby5vcmcvaXNvL2hvbWUuaHRtIiBzcGF0aWFsPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvZ2VvL2NvdW50cnkvU0xFL1NMRV8yX01BUC54bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKwk8IS0tIEVkZ2VzIC0tPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuc2xlIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL2NvbW1vbmJvcmRlci9TTEVfMl9TTEVfMi5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQ29tbW9uIEJvcmRlciByZWxhdGlvbnNoaXAgd2l0aGluIGNvdW50cnkgU0xFIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiB2YWxpZD0ic3RhcnQ9MjAwNi0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5zbGUiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvcmVsYXRpdmVwaHlzaWNhbC9TTEVfMF9TTEVfMS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iUGh5c2ljYWwgY29udGFpbm1lbnQgb2YgU0xFIGxldmVsICgxKSBieSBTTEUgKDApIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaWJtLmNvbSIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuc2xlIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL3JlbGF0aXZlcGh5c2ljYWwvU0xFXzFfU0xFXzIuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IlBoeXNpY2FsIGNvbnRhaW5tZW50IG9mIFNMRSBsZXZlbCAoMikgYnkgU0xFICgxKSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3LmlibS5jb20iIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKworPCEtLSBTTFYgLS0+Cis8c3RlbV9jYXRlZ29yeSBpZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLnNsdiIgbmFtZT0iU0xWIiBwYXJlbnRfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcyIvPgorCTwhLS0gTm9kZXMgYW5kIExhYmVscyAtLT4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLnNsdiIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvU0xWL1NMVl8wX2FyZWEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IlNMViAoMCkgYXJlYSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwczovL3d3dy5jaWEuZ292L2NpYS9wdWJsaWNhdGlvbnMvZmFjdGJvb2svZ2Vvcy9lcy5odG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5zbHYiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L1NMVi9TTFZfMC5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iU0xWKDApIE5vZGVzIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaXNvLm9yZy9pc28vaG9tZS5odG0iIHNwYXRpYWw9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9nZW8vY291bnRyeS9TTFYvU0xWXzBfTUFQLnhtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorCis8IS0tIFNNUiAtLT4KKzxzdGVtX2NhdGVnb3J5IGlkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuc21yIiBuYW1lPSJTTVIiIHBhcmVudF9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzIi8+CisJPCEtLSBOb2RlcyBhbmQgTGFiZWxzIC0tPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuc21yIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9TTVIvU01SXzBfYXJlYS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iU01SICgwKSBhcmVhIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHBzOi8vd3d3LmNpYS5nb3YvY2lhL3B1YmxpY2F0aW9ucy9mYWN0Ym9vay9nZW9zL3NtLmh0bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLnNtciIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvU01SL1NNUl8wLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJTTVIoMCkgTm9kZXMiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pc28ub3JnL2lzby9ob21lLmh0bSIgc3BhdGlhbD0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2dlby9jb3VudHJ5L1NNUi9TTVJfMF9NQVAueG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5zbXIiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L1NNUi9TTVJfMV9hcmVhLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJTTVIgKDEpIGFyZWEiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLnNtciIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvU01SL1NNUl8xLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJTTVIoMSkgTm9kZXMiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pc28ub3JnL2lzby9ob21lLmh0bSIgc3BhdGlhbD0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2dlby9jb3VudHJ5L1NNUi9TTVJfMV9NQVAueG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+CisJPCEtLSBFZGdlcyAtLT4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLnNtciIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9jb21tb25ib3JkZXIvU01SXzFfU01SXzEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkNvbW1vbiBCb3JkZXIgcmVsYXRpb25zaGlwIHdpdGhpbiBjb3VudHJ5IFNNUiIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgdmFsaWQ9InN0YXJ0PTIwMDYtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuc21yIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL3JlbGF0aXZlcGh5c2ljYWwvU01SXzBfU01SXzEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IlBoeXNpY2FsIGNvbnRhaW5tZW50IG9mIFNNUiBsZXZlbCAoMSkgYnkgU01SICgwKSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3LmlibS5jb20iIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKworPCEtLSBTT00gLS0+Cis8c3RlbV9jYXRlZ29yeSBpZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLnNvbSIgbmFtZT0iU09NIiBwYXJlbnRfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcyIvPgorCTwhLS0gTm9kZXMgYW5kIExhYmVscyAtLT4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLnNvbSIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvU09NL1NPTV8wX2FyZWEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IlNPTSAoMCkgYXJlYSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwczovL3d3dy5jaWEuZ292L2NpYS9wdWJsaWNhdGlvbnMvZmFjdGJvb2svZ2Vvcy9zby5odG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5zb20iIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L1NPTS9TT01fMC5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iU09NKDApIE5vZGVzIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaXNvLm9yZy9pc28vaG9tZS5odG0iIHNwYXRpYWw9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9nZW8vY291bnRyeS9TT00vU09NXzBfTUFQLnhtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuc29tIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9TT00vU09NXzFfYXJlYS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iU09NICgxKSBhcmVhIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHBzOi8vd3d3LmNpYS5nb3YvbGlicmFyeS9wdWJsaWNhdGlvbnMvdGhlLXdvcmxkLWZhY3Rib29rLyIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuc29tIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9TT00vU09NXzEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IlNPTSgxKSBOb2RlcyIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3Lmlzby5vcmcvaXNvL2hvbWUuaHRtIiBzcGF0aWFsPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvZ2VvL2NvdW50cnkvU09NL1NPTV8xX01BUC54bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLnNvbSIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvU09NL1NPTV8yX2FyZWEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IlNPTSAoMikgYXJlYSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwczovL3d3dy5jaWEuZ292L2xpYnJhcnkvcHVibGljYXRpb25zL3RoZS13b3JsZC1mYWN0Ym9vay8iIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLnNvbSIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvU09NL1NPTV8yLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJTT00oMikgTm9kZXMiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pc28ub3JnL2lzby9ob21lLmh0bSIgc3BhdGlhbD0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2dlby9jb3VudHJ5L1NPTS9TT01fMl9NQVAueG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+CisJPCEtLSBFZGdlcyAtLT4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLnNvbSIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9jb21tb25ib3JkZXIvU09NXzJfU09NXzIuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkNvbW1vbiBCb3JkZXIgcmVsYXRpb25zaGlwIHdpdGhpbiBjb3VudHJ5IFNPTSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgdmFsaWQ9InN0YXJ0PTIwMDYtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuc29tIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL3JlbGF0aXZlcGh5c2ljYWwvU09NXzBfU09NXzEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IlBoeXNpY2FsIGNvbnRhaW5tZW50IG9mIFNPTSBsZXZlbCAoMSkgYnkgU09NICgwKSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3LmlibS5jb20iIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLnNvbSIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9yZWxhdGl2ZXBoeXNpY2FsL1NPTV8xX1NPTV8yLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJQaHlzaWNhbCBjb250YWlubWVudCBvZiBTT00gbGV2ZWwgKDIpIGJ5IFNPTSAoMSkiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pYm0uY29tIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+CisKKzwhLS0gU1BNIC0tPgorPHN0ZW1fY2F0ZWdvcnkgaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5zcG0iIG5hbWU9IlNQTSIgcGFyZW50X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMiLz4KKwk8IS0tIE5vZGVzIGFuZCBMYWJlbHMgLS0+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5zcG0iIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L1NQTS9TUE1fMF9hcmVhLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJTUE0gKDApIGFyZWEiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cHM6Ly93d3cuY2lhLmdvdi9jaWEvcHVibGljYXRpb25zL2ZhY3Rib29rL2dlb3Mvc2IuaHRtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuc3BtIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9TUE0vU1BNXzAuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IlNQTSgwKSBOb2RlcyIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3Lmlzby5vcmcvaXNvL2hvbWUuaHRtIiBzcGF0aWFsPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvZ2VvL2NvdW50cnkvU1BNL1NQTV8wX01BUC54bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKworPCEtLSBTUVIgLS0+Cis8c3RlbV9jYXRlZ29yeSBpZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLnNxciIgbmFtZT0iU1FSIiBwYXJlbnRfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcyIvPgorCTwhLS0gTm9kZXMgYW5kIExhYmVscyAtLT4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLnNxciIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvU1FSL1NRUl8wX2FyZWEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IlNRUiAoMCkgYXJlYSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwczovL3d3dy5pYm0uY29tIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5zcXIiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L1NRUi9TUVJfMC5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iU1FSKDApIE5vZGVzIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaXNvLm9yZy9pc28vaG9tZS5odG0iIHNwYXRpYWw9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9nZW8vY291bnRyeS9TUVIvU1FSXzBfTUFQLnhtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuc3FyIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9TUVIvU1FSXzFfYXJlYS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iU1FSICgxKSBhcmVhIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaWJtLmNvbSIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuc3FyIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9TUVIvU1FSXzEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IlNRUigxKSBOb2RlcyIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3Lmlzby5vcmcvaXNvL2hvbWUuaHRtIiBzcGF0aWFsPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvZ2VvL2NvdW50cnkvU1FSL1NRUl8xX01BUC54bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKwk8IS0tIEVkZ2VzIC0tPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuc3FyIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL2NvbW1vbmJvcmRlci9TUVJfMV9TUVJfMS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQ29tbW9uIEJvcmRlciByZWxhdGlvbnNoaXAgd2l0aGluIHZhbGlkYXRpb24gcmVnaW9uIFNRUiIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgdmFsaWQ9InN0YXJ0PTIwMDY7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuc3FyIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL3JlbGF0aXZlcGh5c2ljYWwvU1FSXzBfU1FSXzEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IlBoeXNpY2FsIGNvbnRhaW5tZW50IG9mIFNRUiBsZXZlbCAoMSkgYnkgU1FSICgwKSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3LmlibS5jb20iIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKworPCEtLSBTUkIgLS0+Cis8c3RlbV9jYXRlZ29yeSBpZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLnNyYiIgbmFtZT0iU1JCIiBwYXJlbnRfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcyIvPgorCTwhLS0gTm9kZXMgYW5kIExhYmVscyAtLT4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLnNyYiIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvU1JCL1NSQl8wX2FyZWEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IlNSQiAoMCkgYXJlYSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwczovL3d3dy5jaWEuZ292L2NpYS9wdWJsaWNhdGlvbnMvZmFjdGJvb2svZ2Vvcy9zci5odG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5zcmIiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L1NSQi9TUkJfMC5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iU1JCKDApIE5vZGVzIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaXNvLm9yZy9pc28vaG9tZS5odG0iIHNwYXRpYWw9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9nZW8vY291bnRyeS9TUkIvU1JCXzBfTUFQLnhtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuc3JiIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9TUkIvU1JCXzFfYXJlYS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iU1JCICgxKSBhcmVhIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuZ3JpZC51bmVwLmNoL2RhdGEvZGF0YS5waHA/Y2F0ZWdvcnk9aHVtYW5fcmVsYXRlZCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuc3JiIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9TUkIvU1JCXzEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IlNSQigxKSBOb2RlcyIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3Lmlzby5vcmcvaXNvL2hvbWUuaHRtIiBzcGF0aWFsPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvZ2VvL2NvdW50cnkvU1JCL1NSQl8xX01BUC54bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKwk8IS0tIEVkZ2VzIC0tPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuc3JiIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL2NvbW1vbmJvcmRlci9TUkJfMV9TUkJfMS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQ29tbW9uIEJvcmRlciByZWxhdGlvbnNoaXAgd2l0aGluIGNvdW50cnkgU1JCIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiB2YWxpZD0ic3RhcnQ9MjAwNi0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5zcmIiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvcmVsYXRpdmVwaHlzaWNhbC9TUkJfMF9TUkJfMS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iUGh5c2ljYWwgY29udGFpbm1lbnQgb2YgU1JCIGxldmVsICgxKSBieSBTUkIgKDApIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaWJtLmNvbSIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorCis8IS0tIFNUUCAtLT4KKzxzdGVtX2NhdGVnb3J5IGlkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuc3RwIiBuYW1lPSJTVFAiIHBhcmVudF9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzIi8+CisJPCEtLSBOb2RlcyBhbmQgTGFiZWxzIC0tPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuc3RwIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9TVFAvU1RQXzBfYXJlYS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iU1RQICgwKSBhcmVhIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHBzOi8vd3d3LmNpYS5nb3YvY2lhL3B1YmxpY2F0aW9ucy9mYWN0Ym9vay9nZW9zL3RwLmh0bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLnN0cCIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvU1RQL1NUUF8wLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJTVFAoMCkgTm9kZXMiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pc28ub3JnL2lzby9ob21lLmh0bSIgc3BhdGlhbD0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2dlby9jb3VudHJ5L1NUUC9TVFBfMF9NQVAueG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5zdHAiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L1NUUC9TVFBfMV9hcmVhLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJTVFAgKDEpIGFyZWEiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cHM6Ly93d3cuY2lhLmdvdi9saWJyYXJ5L3B1YmxpY2F0aW9ucy90aGUtd29ybGQtZmFjdGJvb2svIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5zdHAiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L1NUUC9TVFBfMS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iU1RQKDEpIE5vZGVzIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaXNvLm9yZy9pc28vaG9tZS5odG0iIHNwYXRpYWw9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9nZW8vY291bnRyeS9TVFAvU1RQXzFfTUFQLnhtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuc3RwIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9TVFAvU1RQXzJfYXJlYS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iU1RQICgyKSBhcmVhIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHBzOi8vd3d3LmNpYS5nb3YvbGlicmFyeS9wdWJsaWNhdGlvbnMvdGhlLXdvcmxkLWZhY3Rib29rLyIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuc3RwIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9TVFAvU1RQXzIuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IlNUUCgyKSBOb2RlcyIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3Lmlzby5vcmcvaXNvL2hvbWUuaHRtIiBzcGF0aWFsPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvZ2VvL2NvdW50cnkvU1RQL1NUUF8yX01BUC54bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKwk8IS0tIEVkZ2VzIC0tPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuc3RwIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL2NvbW1vbmJvcmRlci9TVFBfMl9TVFBfMi5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQ29tbW9uIEJvcmRlciByZWxhdGlvbnNoaXAgd2l0aGluIGNvdW50cnkgU1RQIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiB2YWxpZD0ic3RhcnQ9MjAwNi0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5zdHAiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvcmVsYXRpdmVwaHlzaWNhbC9TVFBfMF9TVFBfMS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iUGh5c2ljYWwgY29udGFpbm1lbnQgb2YgU1RQIGxldmVsICgxKSBieSBTVFAgKDApIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaWJtLmNvbSIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuc3RwIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL3JlbGF0aXZlcGh5c2ljYWwvU1RQXzFfU1RQXzIuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IlBoeXNpY2FsIGNvbnRhaW5tZW50IG9mIFNUUCBsZXZlbCAoMikgYnkgU1RQICgxKSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3LmlibS5jb20iIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKworPCEtLSBTVVIgLS0+Cis8c3RlbV9jYXRlZ29yeSBpZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLnN1ciIgbmFtZT0iU1VSIiBwYXJlbnRfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcyIvPgorCTwhLS0gTm9kZXMgYW5kIExhYmVscyAtLT4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLnN1ciIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvU1VSL1NVUl8wX2FyZWEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IlNVUiAoMCkgYXJlYSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwczovL3d3dy5jaWEuZ292L2NpYS9wdWJsaWNhdGlvbnMvZmFjdGJvb2svZ2Vvcy9ucy5odG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5zdXIiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L1NVUi9TVVJfMC5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iU1VSKDApIE5vZGVzIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaXNvLm9yZy9pc28vaG9tZS5odG0iIHNwYXRpYWw9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9nZW8vY291bnRyeS9TVVIvU1VSXzBfTUFQLnhtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuc3VyIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9TVVIvU1VSXzFfYXJlYS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iU1VSICgxKSBhcmVhIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHBzOi8vd3d3LmNpYS5nb3YvbGlicmFyeS9wdWJsaWNhdGlvbnMvdGhlLXdvcmxkLWZhY3Rib29rLyIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuc3VyIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9TVVIvU1VSXzEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IlNVUigxKSBOb2RlcyIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3Lmlzby5vcmcvaXNvL2hvbWUuaHRtIiBzcGF0aWFsPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvZ2VvL2NvdW50cnkvU1VSL1NVUl8xX01BUC54bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLnN1ciIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvU1VSL1NVUl8yX2FyZWEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IlNVUiAoMikgYXJlYSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwczovL3d3dy5jaWEuZ292L2xpYnJhcnkvcHVibGljYXRpb25zL3RoZS13b3JsZC1mYWN0Ym9vay8iIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLnN1ciIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvU1VSL1NVUl8yLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJTVVIoMikgTm9kZXMiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pc28ub3JnL2lzby9ob21lLmh0bSIgc3BhdGlhbD0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2dlby9jb3VudHJ5L1NVUi9TVVJfMl9NQVAueG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+CisJPCEtLSBFZGdlcyAtLT4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLnN1ciIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9jb21tb25ib3JkZXIvU1VSXzJfU1VSXzIuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkNvbW1vbiBCb3JkZXIgcmVsYXRpb25zaGlwIHdpdGhpbiBjb3VudHJ5IFNVUiIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgdmFsaWQ9InN0YXJ0PTIwMDYtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuc3VyIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL3JlbGF0aXZlcGh5c2ljYWwvU1VSXzBfU1VSXzEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IlBoeXNpY2FsIGNvbnRhaW5tZW50IG9mIFNVUiBsZXZlbCAoMSkgYnkgU1VSICgwKSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3LmlibS5jb20iIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLnN1ciIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9yZWxhdGl2ZXBoeXNpY2FsL1NVUl8xX1NVUl8yLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJQaHlzaWNhbCBjb250YWlubWVudCBvZiBTVVIgbGV2ZWwgKDIpIGJ5IFNVUiAoMSkiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pYm0uY29tIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+CisKKzwhLS0gU1ZLIC0tPgorPHN0ZW1fY2F0ZWdvcnkgaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5zdmsiIG5hbWU9IlNWSyIgcGFyZW50X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMiLz4KKwk8IS0tIE5vZGVzIGFuZCBMYWJlbHMgLS0+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5zdmsiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L1NWSy9TVktfMF9hcmVhLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJTVksgKDApIGFyZWEiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cHM6Ly93d3cuY2lhLmdvdi9jaWEvcHVibGljYXRpb25zL2ZhY3Rib29rL2dlb3MvbG8uaHRtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuc3ZrIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9TVksvU1ZLXzAuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IlNWSygwKSBOb2RlcyIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3Lmlzby5vcmcvaXNvL2hvbWUuaHRtIiBzcGF0aWFsPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvZ2VvL2NvdW50cnkvU1ZLL1NWS18wX01BUC54bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKworPCEtLSBTVk4gLS0+Cis8c3RlbV9jYXRlZ29yeSBpZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLnN2biIgbmFtZT0iU1ZOIiBwYXJlbnRfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcyIvPgorCTwhLS0gTm9kZXMgYW5kIExhYmVscyAtLT4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLnN2biIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvU1ZOL1NWTl8wX2FyZWEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IlNWTiAoMCkgYXJlYSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwczovL3d3dy5jaWEuZ292L2NpYS9wdWJsaWNhdGlvbnMvZmFjdGJvb2svZ2Vvcy9zaS5odG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5zdm4iIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L1NWTi9TVk5fMC5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iU1ZOKDApIE5vZGVzIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaXNvLm9yZy9pc28vaG9tZS5odG0iIHNwYXRpYWw9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9nZW8vY291bnRyeS9TVk4vU1ZOXzBfTUFQLnhtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuc3ZuIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9TVk4vU1ZOXzFfYXJlYS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iU1ZOICgxKSBhcmVhIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuZ3JpZC51bmVwLmNoL2RhdGEvZGF0YS5waHA/Y2F0ZWdvcnk9aHVtYW5fcmVsYXRlZCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuc3ZuIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9TVk4vU1ZOXzEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IlNWTigxKSBOb2RlcyIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3Lmlzby5vcmcvaXNvL2hvbWUuaHRtIiBzcGF0aWFsPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvZ2VvL2NvdW50cnkvU1ZOL1NWTl8xX01BUC54bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKwk8IS0tIEVkZ2VzIC0tPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuc3ZuIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL2NvbW1vbmJvcmRlci9TVk5fMV9TVk5fMS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQ29tbW9uIEJvcmRlciByZWxhdGlvbnNoaXAgd2l0aGluIGNvdW50cnkgU1ZOIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiB2YWxpZD0ic3RhcnQ9MjAwNi0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5zdm4iIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvcmVsYXRpdmVwaHlzaWNhbC9TVk5fMF9TVk5fMS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iUGh5c2ljYWwgY29udGFpbm1lbnQgb2YgU1ZOIGxldmVsICgxKSBieSBTVk4gKDApIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaWJtLmNvbSIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorCis8IS0tIFNXRSAtLT4KKzxzdGVtX2NhdGVnb3J5IGlkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuc3dlIiBuYW1lPSJTV0UiIHBhcmVudF9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzIi8+CisJPCEtLSBOb2RlcyBhbmQgTGFiZWxzIC0tPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuc3dlIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9TV0UvU1dFXzBfYXJlYS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iU1dFICgwKSBhcmVhIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHBzOi8vd3d3LmNpYS5nb3YvY2lhL3B1YmxpY2F0aW9ucy9mYWN0Ym9vay9nZW9zL3N3Lmh0bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLnN3ZSIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvU1dFL1NXRV8wLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJTV0UoMCkgTm9kZXMiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pc28ub3JnL2lzby9ob21lLmh0bSIgc3BhdGlhbD0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2dlby9jb3VudHJ5L1NXRS9TV0VfMF9NQVAueG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5zd2UiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L1NXRS9TV0VfMV9hcmVhLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJTV0UgKDEpIGFyZWEiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5ncmlkLnVuZXAuY2gvZGF0YS9kYXRhLnBocD9jYXRlZ29yeT1odW1hbl9yZWxhdGVkIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5zd2UiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L1NXRS9TV0VfMS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iU1dFKDEpIE5vZGVzIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaXNvLm9yZy9pc28vaG9tZS5odG0iIHNwYXRpYWw9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9nZW8vY291bnRyeS9TV0UvU1dFXzFfTUFQLnhtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorCTwhLS0gRWRnZXMgLS0+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5zd2UiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvY29tbW9uYm9yZGVyL1NXRV8xX1NXRV8xLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJDb21tb24gQm9yZGVyIHJlbGF0aW9uc2hpcCB3aXRoaW4gY291bnRyeSBTV0UiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHZhbGlkPSJzdGFydD0yMDA2LTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLnN3ZSIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9yZWxhdGl2ZXBoeXNpY2FsL1NXRV8wX1NXRV8xLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJQaHlzaWNhbCBjb250YWlubWVudCBvZiBTV0UgbGV2ZWwgKDEpIGJ5IFNXRSAoMCkiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pYm0uY29tIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+CisKKzwhLS0gU1daIC0tPgorPHN0ZW1fY2F0ZWdvcnkgaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5zd3oiIG5hbWU9IlNXWiIgcGFyZW50X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMiLz4KKwk8IS0tIE5vZGVzIGFuZCBMYWJlbHMgLS0+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5zd3oiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L1NXWi9TV1pfMF9hcmVhLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJTV1ogKDApIGFyZWEiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cHM6Ly93d3cuY2lhLmdvdi9jaWEvcHVibGljYXRpb25zL2ZhY3Rib29rL2dlb3Mvd3ouaHRtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuc3d6IiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9TV1ovU1daXzAuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IlNXWigwKSBOb2RlcyIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3Lmlzby5vcmcvaXNvL2hvbWUuaHRtIiBzcGF0aWFsPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvZ2VvL2NvdW50cnkvU1daL1NXWl8wX01BUC54bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKwk8IS0tIEVkZ2VzIC0tPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuc3d6IiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL2NvbW1vbmJvcmRlci9TV1pfMF9aQUZfMi5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQ29tbW9uIEJvcmRlciByZWxhdGlvbnNoaXAgYmV0d2VlbiBjb3VudHJ5IFNXWiBhbmQgWkFGIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiB2YWxpZD0ic3RhcnQ9MjAwNi0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5zd3oiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvcmVsYXRpdmVwaHlzaWNhbC9TV1pfMF9TV1pfMS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iUGh5c2ljYWwgY29udGFpbm1lbnQgb2YgU1daIGxldmVsICgxKSBieSBTV1ogKDApIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaWJtLmNvbSIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorCis8IS0tIFNZQyAtLT4KKzxzdGVtX2NhdGVnb3J5IGlkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuc3ljIiBuYW1lPSJTWUMiIHBhcmVudF9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzIi8+CisJPCEtLSBOb2RlcyBhbmQgTGFiZWxzIC0tPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuc3ljIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9TWUMvU1lDXzBfYXJlYS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iU1lDICgwKSBhcmVhIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHBzOi8vd3d3LmNpYS5nb3YvY2lhL3B1YmxpY2F0aW9ucy9mYWN0Ym9vay9nZW9zL3NlLmh0bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLnN5YyIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvU1lDL1NZQ18wLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJTWUMoMCkgTm9kZXMiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pc28ub3JnL2lzby9ob21lLmh0bSIgc3BhdGlhbD0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2dlby9jb3VudHJ5L1NZQy9TWUNfMF9NQVAueG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5zeWMiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L1NZQy9TWUNfMV9hcmVhLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJTWUMgKDEpIGFyZWEiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cHM6Ly93d3cuY2lhLmdvdi9saWJyYXJ5L3B1YmxpY2F0aW9ucy90aGUtd29ybGQtZmFjdGJvb2svIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5zeWMiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L1NZQy9TWUNfMS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iU1lDKDEpIE5vZGVzIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaXNvLm9yZy9pc28vaG9tZS5odG0iIHNwYXRpYWw9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9nZW8vY291bnRyeS9TWUMvU1lDXzFfTUFQLnhtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuc3ljIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9TWUMvU1lDXzJfYXJlYS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iU1lDICgyKSBhcmVhIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHBzOi8vd3d3LmNpYS5nb3YvbGlicmFyeS9wdWJsaWNhdGlvbnMvdGhlLXdvcmxkLWZhY3Rib29rLyIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuc3ljIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9TWUMvU1lDXzIuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IlNZQygyKSBOb2RlcyIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3Lmlzby5vcmcvaXNvL2hvbWUuaHRtIiBzcGF0aWFsPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvZ2VvL2NvdW50cnkvU1lDL1NZQ18yX01BUC54bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKwk8IS0tIEVkZ2VzIC0tPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuc3ljIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL2NvbW1vbmJvcmRlci9TWUNfMl9TWUNfMi5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQ29tbW9uIEJvcmRlciByZWxhdGlvbnNoaXAgd2l0aGluIGNvdW50cnkgU1lDIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiB2YWxpZD0ic3RhcnQ9MjAwNi0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5zeWMiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvcmVsYXRpdmVwaHlzaWNhbC9TWUNfMF9TWUNfMS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iUGh5c2ljYWwgY29udGFpbm1lbnQgb2YgU1lDIGxldmVsICgxKSBieSBTWUMgKDApIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaWJtLmNvbSIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuc3ljIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL3JlbGF0aXZlcGh5c2ljYWwvU1lDXzFfU1lDXzIuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IlBoeXNpY2FsIGNvbnRhaW5tZW50IG9mIFNZQyBsZXZlbCAoMikgYnkgU1lDICgxKSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3LmlibS5jb20iIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKworPCEtLSBTWVIgLS0+Cis8c3RlbV9jYXRlZ29yeSBpZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLnN5ciIgbmFtZT0iU1lSIiBwYXJlbnRfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcyIvPgorCTwhLS0gTm9kZXMgYW5kIExhYmVscyAtLT4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLnN5ciIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvU1lSL1NZUl8wX2FyZWEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IlNZUiAoMCkgYXJlYSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwczovL3d3dy5jaWEuZ292L2NpYS9wdWJsaWNhdGlvbnMvZmFjdGJvb2svZ2Vvcy9zeS5odG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5zeXIiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L1NZUi9TWVJfMC5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iU1lSKDApIE5vZGVzIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaXNvLm9yZy9pc28vaG9tZS5odG0iIHNwYXRpYWw9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9nZW8vY291bnRyeS9TWVIvU1lSXzBfTUFQLnhtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuc3lyIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9TWVIvU1lSXzFfYXJlYS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iU1lSICgxKSBhcmVhIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHBzOi8vd3d3LmNpYS5nb3YvbGlicmFyeS9wdWJsaWNhdGlvbnMvdGhlLXdvcmxkLWZhY3Rib29rLyIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuc3lyIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9TWVIvU1lSXzEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IlNZUigxKSBOb2RlcyIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3Lmlzby5vcmcvaXNvL2hvbWUuaHRtIiBzcGF0aWFsPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvZ2VvL2NvdW50cnkvU1lSL1NZUl8xX01BUC54bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLnN5ciIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvU1lSL1NZUl8yX2FyZWEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IlNZUiAoMikgYXJlYSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwczovL3d3dy5jaWEuZ292L2xpYnJhcnkvcHVibGljYXRpb25zL3RoZS13b3JsZC1mYWN0Ym9vay8iIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLnN5ciIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvU1lSL1NZUl8yLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJTWVIoMikgTm9kZXMiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pc28ub3JnL2lzby9ob21lLmh0bSIgc3BhdGlhbD0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2dlby9jb3VudHJ5L1NZUi9TWVJfMl9NQVAueG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+CisJPCEtLSBFZGdlcyAtLT4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLnN5ciIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9jb21tb25ib3JkZXIvU1lSXzJfU1lSXzIuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkNvbW1vbiBCb3JkZXIgcmVsYXRpb25zaGlwIHdpdGhpbiBjb3VudHJ5IFNZUiIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgdmFsaWQ9InN0YXJ0PTIwMDYtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuc3lyIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL2NvbW1vbmJvcmRlci9TWVJfMl9UVVJfMi5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQ29tbW9uIEJvcmRlciByZWxhdGlvbnNoaXAgYmV0d2VlbiBjb3VudHJ5IFNZUiBhbmQgVFVSIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiB2YWxpZD0ic3RhcnQ9MjAwNi0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5zeXIiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvcmVsYXRpdmVwaHlzaWNhbC9TWVJfMF9TWVJfMS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iUGh5c2ljYWwgY29udGFpbm1lbnQgb2YgU1lSIGxldmVsICgxKSBieSBTWVIgKDApIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaWJtLmNvbSIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuc3lyIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL3JlbGF0aXZlcGh5c2ljYWwvU1lSXzFfU1lSXzIuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IlBoeXNpY2FsIGNvbnRhaW5tZW50IG9mIFNZUiBsZXZlbCAoMikgYnkgU1lSICgxKSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3LmlibS5jb20iIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKworPCEtLSBUQ0EgLS0+Cis8c3RlbV9jYXRlZ29yeSBpZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLnRjYSIgbmFtZT0iVENBIiBwYXJlbnRfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcyIvPgorCTwhLS0gTm9kZXMgYW5kIExhYmVscyAtLT4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLnRjYSIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvVENBL1RDQV8wX2FyZWEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IlRDQSAoMCkgYXJlYSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwczovL3d3dy5jaWEuZ292L2NpYS9wdWJsaWNhdGlvbnMvZmFjdGJvb2svZ2Vvcy90ay5odG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy50Y2EiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L1RDQS9UQ0FfMC5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iVENBKDApIE5vZGVzIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaXNvLm9yZy9pc28vaG9tZS5odG0iIHNwYXRpYWw9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9nZW8vY291bnRyeS9UQ0EvVENBXzBfTUFQLnhtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorCis8IS0tIFRDRCAtLT4KKzxzdGVtX2NhdGVnb3J5IGlkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMudGNkIiBuYW1lPSJUQ0QiIHBhcmVudF9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzIi8+CisJPCEtLSBOb2RlcyBhbmQgTGFiZWxzIC0tPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMudGNkIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9UQ0QvVENEXzBfYXJlYS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iVENEICgwKSBhcmVhIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHBzOi8vd3d3LmNpYS5nb3YvY2lhL3B1YmxpY2F0aW9ucy9mYWN0Ym9vay9nZW9zL2NkLmh0bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLnRjZCIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvVENEL1RDRF8wLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJUQ0QoMCkgTm9kZXMiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pc28ub3JnL2lzby9ob21lLmh0bSIgc3BhdGlhbD0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2dlby9jb3VudHJ5L1RDRC9UQ0RfMF9NQVAueG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy50Y2QiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L1RDRC9UQ0RfMV9hcmVhLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJUQ0QgKDEpIGFyZWEiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cHM6Ly93d3cuY2lhLmdvdi9saWJyYXJ5L3B1YmxpY2F0aW9ucy90aGUtd29ybGQtZmFjdGJvb2svIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy50Y2QiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L1RDRC9UQ0RfMS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iVENEKDEpIE5vZGVzIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaXNvLm9yZy9pc28vaG9tZS5odG0iIHNwYXRpYWw9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9nZW8vY291bnRyeS9UQ0QvVENEXzFfTUFQLnhtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMudGNkIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9UQ0QvVENEXzJfYXJlYS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iVENEICgyKSBhcmVhIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHBzOi8vd3d3LmNpYS5nb3YvbGlicmFyeS9wdWJsaWNhdGlvbnMvdGhlLXdvcmxkLWZhY3Rib29rLyIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMudGNkIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9UQ0QvVENEXzIuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IlRDRCgyKSBOb2RlcyIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3Lmlzby5vcmcvaXNvL2hvbWUuaHRtIiBzcGF0aWFsPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvZ2VvL2NvdW50cnkvVENEL1RDRF8yX01BUC54bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKwk8IS0tIEVkZ2VzIC0tPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMudGNkIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL2NvbW1vbmJvcmRlci9UQ0RfMl9UQ0RfMi5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQ29tbW9uIEJvcmRlciByZWxhdGlvbnNoaXAgd2l0aGluIGNvdW50cnkgVENEIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiB2YWxpZD0ic3RhcnQ9MjAwNi0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy50Y2QiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvcmVsYXRpdmVwaHlzaWNhbC9UQ0RfMF9UQ0RfMS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iUGh5c2ljYWwgY29udGFpbm1lbnQgb2YgVENEIGxldmVsICgxKSBieSBUQ0QgKDApIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaWJtLmNvbSIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMudGNkIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL3JlbGF0aXZlcGh5c2ljYWwvVENEXzFfVENEXzIuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IlBoeXNpY2FsIGNvbnRhaW5tZW50IG9mIFRDRCBsZXZlbCAoMikgYnkgVENEICgxKSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3LmlibS5jb20iIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKworPCEtLSBUR08gLS0+Cis8c3RlbV9jYXRlZ29yeSBpZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLnRnbyIgbmFtZT0iVEdPIiBwYXJlbnRfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcyIvPgorCTwhLS0gTm9kZXMgYW5kIExhYmVscyAtLT4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLnRnbyIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvVEdPL1RHT18wX2FyZWEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IlRHTyAoMCkgYXJlYSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwczovL3d3dy5jaWEuZ292L2NpYS9wdWJsaWNhdGlvbnMvZmFjdGJvb2svZ2Vvcy90by5odG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy50Z28iIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L1RHTy9UR09fMC5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iVEdPKDApIE5vZGVzIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaXNvLm9yZy9pc28vaG9tZS5odG0iIHNwYXRpYWw9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9nZW8vY291bnRyeS9UR08vVEdPXzBfTUFQLnhtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMudGdvIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9UR08vVEdPXzFfYXJlYS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iVEdPICgxKSBhcmVhIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHBzOi8vd3d3LmNpYS5nb3YvbGlicmFyeS9wdWJsaWNhdGlvbnMvdGhlLXdvcmxkLWZhY3Rib29rLyIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMudGdvIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9UR08vVEdPXzEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IlRHTygxKSBOb2RlcyIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3Lmlzby5vcmcvaXNvL2hvbWUuaHRtIiBzcGF0aWFsPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvZ2VvL2NvdW50cnkvVEdPL1RHT18xX01BUC54bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLnRnbyIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvVEdPL1RHT18yX2FyZWEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IlRHTyAoMikgYXJlYSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwczovL3d3dy5jaWEuZ292L2xpYnJhcnkvcHVibGljYXRpb25zL3RoZS13b3JsZC1mYWN0Ym9vay8iIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLnRnbyIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvVEdPL1RHT18yLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJUR08oMikgTm9kZXMiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pc28ub3JnL2lzby9ob21lLmh0bSIgc3BhdGlhbD0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2dlby9jb3VudHJ5L1RHTy9UR09fMl9NQVAueG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+CisJPCEtLSBFZGdlcyAtLT4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLnRnbyIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9jb21tb25ib3JkZXIvVEdPXzJfVEdPXzIuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkNvbW1vbiBCb3JkZXIgcmVsYXRpb25zaGlwIHdpdGhpbiBjb3VudHJ5IFRHTyIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgdmFsaWQ9InN0YXJ0PTIwMDYtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMudGdvIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL3JlbGF0aXZlcGh5c2ljYWwvVEdPXzBfVEdPXzEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IlBoeXNpY2FsIGNvbnRhaW5tZW50IG9mIFRHTyBsZXZlbCAoMSkgYnkgVEdPICgwKSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3LmlibS5jb20iIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLnRnbyIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9yZWxhdGl2ZXBoeXNpY2FsL1RHT18xX1RHT18yLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJQaHlzaWNhbCBjb250YWlubWVudCBvZiBUR08gbGV2ZWwgKDIpIGJ5IFRHTyAoMSkiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pYm0uY29tIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+CisKKzwhLS0gVEhBIC0tPgorPHN0ZW1fY2F0ZWdvcnkgaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy50aGEiIG5hbWU9IlRIQSIgcGFyZW50X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMiLz4KKwk8IS0tIE5vZGVzIGFuZCBMYWJlbHMgLS0+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy50aGEiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L1RIQS9USEFfMF9hcmVhLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJUSEEgKDApIGFyZWEiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cHM6Ly93d3cuY2lhLmdvdi9jaWEvcHVibGljYXRpb25zL2ZhY3Rib29rL2dlb3MvdGguaHRtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMudGhhIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9USEEvVEhBXzAuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IlRIQSgwKSBOb2RlcyIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3Lmlzby5vcmcvaXNvL2hvbWUuaHRtIiBzcGF0aWFsPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvZ2VvL2NvdW50cnkvVEhBL1RIQV8wX01BUC54bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLnRoYSIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvVEhBL1RIQV8xX2FyZWEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IlRIQSAoMSkgYXJlYSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwczovL3d3dy5jaWEuZ292L2xpYnJhcnkvcHVibGljYXRpb25zL3RoZS13b3JsZC1mYWN0Ym9vay8iIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLnRoYSIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvVEhBL1RIQV8xLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJUSEEoMSkgTm9kZXMiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pc28ub3JnL2lzby9ob21lLmh0bSIgc3BhdGlhbD0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2dlby9jb3VudHJ5L1RIQS9USEFfMV9NQVAueG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy50aGEiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L1RIQS9USEFfMl9hcmVhLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJUSEEgKDIpIGFyZWEiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cHM6Ly93d3cuY2lhLmdvdi9saWJyYXJ5L3B1YmxpY2F0aW9ucy90aGUtd29ybGQtZmFjdGJvb2svIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy50aGEiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L1RIQS9USEFfMi5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iVEhBKDIpIE5vZGVzIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaXNvLm9yZy9pc28vaG9tZS5odG0iIHNwYXRpYWw9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9nZW8vY291bnRyeS9USEEvVEhBXzJfTUFQLnhtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorCTwhLS0gRWRnZXMgLS0+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy50aGEiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvY29tbW9uYm9yZGVyL1RIQV8yX1RIQV8yLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJDb21tb24gQm9yZGVyIHJlbGF0aW9uc2hpcCB3aXRoaW4gY291bnRyeSBUSEEiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHZhbGlkPSJzdGFydD0yMDA2LTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLnRoYSIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9yZWxhdGl2ZXBoeXNpY2FsL1RIQV8wX1RIQV8xLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJQaHlzaWNhbCBjb250YWlubWVudCBvZiBUSEEgbGV2ZWwgKDEpIGJ5IFRIQSAoMCkiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pYm0uY29tIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy50aGEiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvcmVsYXRpdmVwaHlzaWNhbC9USEFfMV9USEFfMi5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iUGh5c2ljYWwgY29udGFpbm1lbnQgb2YgVEhBIGxldmVsICgyKSBieSBUSEEgKDEpIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaWJtLmNvbSIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorCis8IS0tIFRKSyAtLT4KKzxzdGVtX2NhdGVnb3J5IGlkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMudGprIiBuYW1lPSJUSksiIHBhcmVudF9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzIi8+CisJPCEtLSBOb2RlcyBhbmQgTGFiZWxzIC0tPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMudGprIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9USksvVEpLXzBfYXJlYS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iVEpLICgwKSBhcmVhIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHBzOi8vd3d3LmNpYS5nb3YvY2lhL3B1YmxpY2F0aW9ucy9mYWN0Ym9vay9nZW9zL3RpLmh0bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLnRqayIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvVEpLL1RKS18wLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJUSksoMCkgTm9kZXMiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pc28ub3JnL2lzby9ob21lLmh0bSIgc3BhdGlhbD0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2dlby9jb3VudHJ5L1RKSy9USktfMF9NQVAueG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy50amsiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L1RKSy9USktfMV9hcmVhLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJUSksgKDEpIGFyZWEiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cHM6Ly93d3cuY2lhLmdvdi9saWJyYXJ5L3B1YmxpY2F0aW9ucy90aGUtd29ybGQtZmFjdGJvb2svIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy50amsiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L1RKSy9USktfMS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iVEpLKDEpIE5vZGVzIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaXNvLm9yZy9pc28vaG9tZS5odG0iIHNwYXRpYWw9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9nZW8vY291bnRyeS9USksvVEpLXzFfTUFQLnhtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMudGprIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9USksvVEpLXzJfYXJlYS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iVEpLICgyKSBhcmVhIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHBzOi8vd3d3LmNpYS5nb3YvbGlicmFyeS9wdWJsaWNhdGlvbnMvdGhlLXdvcmxkLWZhY3Rib29rLyIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMudGprIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9USksvVEpLXzIuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IlRKSygyKSBOb2RlcyIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3Lmlzby5vcmcvaXNvL2hvbWUuaHRtIiBzcGF0aWFsPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvZ2VvL2NvdW50cnkvVEpLL1RKS18yX01BUC54bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKwk8IS0tIEVkZ2VzIC0tPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMudGprIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL2NvbW1vbmJvcmRlci9USktfMl9USktfMi5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQ29tbW9uIEJvcmRlciByZWxhdGlvbnNoaXAgd2l0aGluIGNvdW50cnkgVEpLIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiB2YWxpZD0ic3RhcnQ9MjAwNi0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy50amsiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvY29tbW9uYm9yZGVyL1RKS18yX1VaQl8yLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJDb21tb24gQm9yZGVyIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIGNvdW50cnkgVEpLIGFuZCBVWkIiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHZhbGlkPSJzdGFydD0yMDA2LTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLnRqayIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9yZWxhdGl2ZXBoeXNpY2FsL1RKS18wX1RKS18xLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJQaHlzaWNhbCBjb250YWlubWVudCBvZiBUSksgbGV2ZWwgKDEpIGJ5IFRKSyAoMCkiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pYm0uY29tIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy50amsiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvcmVsYXRpdmVwaHlzaWNhbC9USktfMV9USktfMi5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iUGh5c2ljYWwgY29udGFpbm1lbnQgb2YgVEpLIGxldmVsICgyKSBieSBUSksgKDEpIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaWJtLmNvbSIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorCis8IS0tIFRLTCAtLT4KKzxzdGVtX2NhdGVnb3J5IGlkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMudGtsIiBuYW1lPSJUS0wiIHBhcmVudF9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzIi8+CisJPCEtLSBOb2RlcyBhbmQgTGFiZWxzIC0tPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMudGtsIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9US0wvVEtMXzBfYXJlYS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iVEtMICgwKSBhcmVhIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHBzOi8vd3d3LmNpYS5nb3YvY2lhL3B1YmxpY2F0aW9ucy9mYWN0Ym9vay9nZW9zL3RsLmh0bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLnRrbCIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvVEtML1RLTF8wLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJUS0woMCkgTm9kZXMiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pc28ub3JnL2lzby9ob21lLmh0bSIgc3BhdGlhbD0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2dlby9jb3VudHJ5L1RLTC9US0xfMF9NQVAueG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+CisKKzwhLS0gVEtNIC0tPgorPHN0ZW1fY2F0ZWdvcnkgaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy50a20iIG5hbWU9IlRLTSIgcGFyZW50X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMiLz4KKwk8IS0tIE5vZGVzIGFuZCBMYWJlbHMgLS0+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy50a20iIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L1RLTS9US01fMF9hcmVhLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJUS00gKDApIGFyZWEiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cHM6Ly93d3cuY2lhLmdvdi9jaWEvcHVibGljYXRpb25zL2ZhY3Rib29rL2dlb3MvdHguaHRtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMudGttIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9US00vVEtNXzAuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IlRLTSgwKSBOb2RlcyIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3Lmlzby5vcmcvaXNvL2hvbWUuaHRtIiBzcGF0aWFsPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvZ2VvL2NvdW50cnkvVEtNL1RLTV8wX01BUC54bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLnRrbSIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvVEtNL1RLTV8xX2FyZWEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IlRLTSAoMSkgYXJlYSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwczovL3d3dy5jaWEuZ292L2xpYnJhcnkvcHVibGljYXRpb25zL3RoZS13b3JsZC1mYWN0Ym9vay8iIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLnRrbSIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvVEtNL1RLTV8xLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJUS00oMSkgTm9kZXMiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pc28ub3JnL2lzby9ob21lLmh0bSIgc3BhdGlhbD0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2dlby9jb3VudHJ5L1RLTS9US01fMV9NQVAueG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy50a20iIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L1RLTS9US01fMl9hcmVhLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJUS00gKDIpIGFyZWEiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cHM6Ly93d3cuY2lhLmdvdi9saWJyYXJ5L3B1YmxpY2F0aW9ucy90aGUtd29ybGQtZmFjdGJvb2svIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy50a20iIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L1RLTS9US01fMi5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iVEtNKDIpIE5vZGVzIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaXNvLm9yZy9pc28vaG9tZS5odG0iIHNwYXRpYWw9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9nZW8vY291bnRyeS9US00vVEtNXzJfTUFQLnhtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorCTwhLS0gRWRnZXMgLS0+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy50a20iIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvY29tbW9uYm9yZGVyL1RLTV8yX1RLTV8yLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJDb21tb24gQm9yZGVyIHJlbGF0aW9uc2hpcCB3aXRoaW4gY291bnRyeSBUS00iIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHZhbGlkPSJzdGFydD0yMDA2LTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLnRrbSIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9jb21tb25ib3JkZXIvVEtNXzJfVVpCXzIuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkNvbW1vbiBCb3JkZXIgcmVsYXRpb25zaGlwIGJldHdlZW4gY291bnRyeSBUS00gYW5kIFVaQiIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgdmFsaWQ9InN0YXJ0PTIwMDYtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMudGttIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL3JlbGF0aXZlcGh5c2ljYWwvVEtNXzBfVEtNXzEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IlBoeXNpY2FsIGNvbnRhaW5tZW50IG9mIFRLTSBsZXZlbCAoMSkgYnkgVEtNICgwKSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3LmlibS5jb20iIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLnRrbSIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9yZWxhdGl2ZXBoeXNpY2FsL1RLTV8xX1RLTV8yLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJQaHlzaWNhbCBjb250YWlubWVudCBvZiBUS00gbGV2ZWwgKDIpIGJ5IFRLTSAoMSkiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pYm0uY29tIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+CisKKzwhLS0gVExTIC0tPgorPHN0ZW1fY2F0ZWdvcnkgaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy50bHMiIG5hbWU9IlRMUyIgcGFyZW50X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMiLz4KKwk8IS0tIE5vZGVzIGFuZCBMYWJlbHMgLS0+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy50bHMiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L1RMUy9UTFNfMF9hcmVhLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJUTFMgKDApIGFyZWEiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cHM6Ly93d3cuY2lhLmdvdi9jaWEvcHVibGljYXRpb25zL2ZhY3Rib29rL2dlb3MvdHQuaHRtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMudGxzIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9UTFMvVExTXzAuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IlRMUygwKSBOb2RlcyIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3Lmlzby5vcmcvaXNvL2hvbWUuaHRtIiBzcGF0aWFsPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvZ2VvL2NvdW50cnkvVExTL1RMU18wX01BUC54bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKworPCEtLSBUT04gLS0+Cis8c3RlbV9jYXRlZ29yeSBpZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLnRvbiIgbmFtZT0iVE9OIiBwYXJlbnRfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcyIvPgorCTwhLS0gTm9kZXMgYW5kIExhYmVscyAtLT4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLnRvbiIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvVE9OL1RPTl8wX2FyZWEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IlRPTiAoMCkgYXJlYSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwczovL3d3dy5jaWEuZ292L2NpYS9wdWJsaWNhdGlvbnMvZmFjdGJvb2svZ2Vvcy90bi5odG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy50b24iIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L1RPTi9UT05fMC5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iVE9OKDApIE5vZGVzIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaXNvLm9yZy9pc28vaG9tZS5odG0iIHNwYXRpYWw9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9nZW8vY291bnRyeS9UT04vVE9OXzBfTUFQLnhtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorCis8IS0tIFRUTyAtLT4KKzxzdGVtX2NhdGVnb3J5IGlkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMudHRvIiBuYW1lPSJUVE8iIHBhcmVudF9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzIi8+CisJPCEtLSBOb2RlcyBhbmQgTGFiZWxzIC0tPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMudHRvIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9UVE8vVFRPXzBfYXJlYS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iVFRPICgwKSBhcmVhIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHBzOi8vd3d3LmNpYS5nb3YvY2lhL3B1YmxpY2F0aW9ucy9mYWN0Ym9vay9nZW9zL3RkLmh0bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLnR0byIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvVFRPL1RUT18wLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJUVE8oMCkgTm9kZXMiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pc28ub3JnL2lzby9ob21lLmh0bSIgc3BhdGlhbD0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2dlby9jb3VudHJ5L1RUTy9UVE9fMF9NQVAueG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+CisKKzwhLS0gVFVOIC0tPgorPHN0ZW1fY2F0ZWdvcnkgaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy50dW4iIG5hbWU9IlRVTiIgcGFyZW50X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMiLz4KKwk8IS0tIE5vZGVzIGFuZCBMYWJlbHMgLS0+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy50dW4iIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L1RVTi9UVU5fMF9hcmVhLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJUVU4gKDApIGFyZWEiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cHM6Ly93d3cuY2lhLmdvdi9jaWEvcHVibGljYXRpb25zL2ZhY3Rib29rL2dlb3MvdHMuaHRtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMudHVuIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9UVU4vVFVOXzAuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IlRVTigwKSBOb2RlcyIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3Lmlzby5vcmcvaXNvL2hvbWUuaHRtIiBzcGF0aWFsPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvZ2VvL2NvdW50cnkvVFVOL1RVTl8wX01BUC54bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLnR1biIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvVFVOL1RVTl8xX2FyZWEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IlRVTiAoMSkgYXJlYSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwczovL3d3dy5jaWEuZ292L2xpYnJhcnkvcHVibGljYXRpb25zL3RoZS13b3JsZC1mYWN0Ym9vay8iIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLnR1biIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvVFVOL1RVTl8xLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJUVU4oMSkgTm9kZXMiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pc28ub3JnL2lzby9ob21lLmh0bSIgc3BhdGlhbD0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2dlby9jb3VudHJ5L1RVTi9UVU5fMV9NQVAueG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy50dW4iIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L1RVTi9UVU5fMl9hcmVhLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJUVU4gKDIpIGFyZWEiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cHM6Ly93d3cuY2lhLmdvdi9saWJyYXJ5L3B1YmxpY2F0aW9ucy90aGUtd29ybGQtZmFjdGJvb2svIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy50dW4iIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L1RVTi9UVU5fMi5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iVFVOKDIpIE5vZGVzIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaXNvLm9yZy9pc28vaG9tZS5odG0iIHNwYXRpYWw9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9nZW8vY291bnRyeS9UVU4vVFVOXzJfTUFQLnhtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorCTwhLS0gRWRnZXMgLS0+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy50dW4iIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvY29tbW9uYm9yZGVyL1RVTl8yX1RVTl8yLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJDb21tb24gQm9yZGVyIHJlbGF0aW9uc2hpcCB3aXRoaW4gY291bnRyeSBUVU4iIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHZhbGlkPSJzdGFydD0yMDA2LTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLnR1biIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9yZWxhdGl2ZXBoeXNpY2FsL1RVTl8wX1RVTl8xLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJQaHlzaWNhbCBjb250YWlubWVudCBvZiBUVU4gbGV2ZWwgKDEpIGJ5IFRVTiAoMCkiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pYm0uY29tIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy50dW4iIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvcmVsYXRpdmVwaHlzaWNhbC9UVU5fMV9UVU5fMi5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iUGh5c2ljYWwgY29udGFpbm1lbnQgb2YgVFVOIGxldmVsICgyKSBieSBUVU4gKDEpIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaWJtLmNvbSIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorCis8IS0tIFRVUiAtLT4KKzxzdGVtX2NhdGVnb3J5IGlkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMudHVyIiBuYW1lPSJUVVIiIHBhcmVudF9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzIi8+CisJPCEtLSBOb2RlcyBhbmQgTGFiZWxzIC0tPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMudHVyIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9UVVIvVFVSXzBfYXJlYS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iVFVSICgwKSBhcmVhIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHBzOi8vd3d3LmNpYS5nb3YvY2lhL3B1YmxpY2F0aW9ucy9mYWN0Ym9vay9nZW9zL3R1Lmh0bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLnR1ciIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvVFVSL1RVUl8wLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJUVVIoMCkgTm9kZXMiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pc28ub3JnL2lzby9ob21lLmh0bSIgc3BhdGlhbD0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2dlby9jb3VudHJ5L1RVUi9UVVJfMF9NQVAueG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy50dXIiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L1RVUi9UVVJfMV9hcmVhLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJUVVIgKDEpIGFyZWEiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cHM6Ly93d3cuY2lhLmdvdi9saWJyYXJ5L3B1YmxpY2F0aW9ucy90aGUtd29ybGQtZmFjdGJvb2svIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy50dXIiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L1RVUi9UVVJfMS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iVFVSKDEpIE5vZGVzIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaXNvLm9yZy9pc28vaG9tZS5odG0iIHNwYXRpYWw9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9nZW8vY291bnRyeS9UVVIvVFVSXzFfTUFQLnhtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMudHVyIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9UVVIvVFVSXzJfYXJlYS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iVFVSICgyKSBhcmVhIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHBzOi8vd3d3LmNpYS5nb3YvbGlicmFyeS9wdWJsaWNhdGlvbnMvdGhlLXdvcmxkLWZhY3Rib29rLyIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMudHVyIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9UVVIvVFVSXzIuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IlRVUigyKSBOb2RlcyIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3Lmlzby5vcmcvaXNvL2hvbWUuaHRtIiBzcGF0aWFsPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvZ2VvL2NvdW50cnkvVFVSL1RVUl8yX01BUC54bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKwk8IS0tIEVkZ2VzIC0tPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMudHVyIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL2NvbW1vbmJvcmRlci9UVVJfMl9UVVJfMi5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQ29tbW9uIEJvcmRlciByZWxhdGlvbnNoaXAgd2l0aGluIGNvdW50cnkgVFVSIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiB2YWxpZD0ic3RhcnQ9MjAwNi0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy50dXIiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvcmVsYXRpdmVwaHlzaWNhbC9UVVJfMF9UVVJfMS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iUGh5c2ljYWwgY29udGFpbm1lbnQgb2YgVFVSIGxldmVsICgxKSBieSBUVVIgKDApIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaWJtLmNvbSIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMudHVyIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL3JlbGF0aXZlcGh5c2ljYWwvVFVSXzFfVFVSXzIuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IlBoeXNpY2FsIGNvbnRhaW5tZW50IG9mIFRVUiBsZXZlbCAoMikgYnkgVFVSICgxKSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3LmlibS5jb20iIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKworPCEtLSBUVVYgLS0+Cis8c3RlbV9jYXRlZ29yeSBpZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLnR1diIgbmFtZT0iVFVWIiBwYXJlbnRfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcyIvPgorCTwhLS0gTm9kZXMgYW5kIExhYmVscyAtLT4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLnR1diIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvVFVWL1RVVl8wX2FyZWEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IlRVViAoMCkgYXJlYSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwczovL3d3dy5jaWEuZ292L2NpYS9wdWJsaWNhdGlvbnMvZmFjdGJvb2svZ2Vvcy90di5odG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy50dXYiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L1RVVi9UVVZfMC5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iVFVWKDApIE5vZGVzIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaXNvLm9yZy9pc28vaG9tZS5odG0iIHNwYXRpYWw9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9nZW8vY291bnRyeS9UVVYvVFVWXzBfTUFQLnhtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorCis8IS0tIFRXTiAtLT4KKzxzdGVtX2NhdGVnb3J5IGlkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMudHduIiBuYW1lPSJUV04iIHBhcmVudF9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzIi8+CisJPCEtLSBOb2RlcyBhbmQgTGFiZWxzIC0tPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMudHduIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9UV04vVFdOXzBfYXJlYS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iVFdOICgwKSBhcmVhIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHBzOi8vd3d3LmNpYS5nb3YvY2lhL3B1YmxpY2F0aW9ucy9mYWN0Ym9vay9nZW9zL3R3Lmh0bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLnR3biIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvVFdOL1RXTl8wLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJUV04oMCkgTm9kZXMiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pc28ub3JnL2lzby9ob21lLmh0bSIgc3BhdGlhbD0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2dlby9jb3VudHJ5L1RXTi9UV05fMF9NQVAueG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+CisKKzwhLS0gVFpBIC0tPgorPHN0ZW1fY2F0ZWdvcnkgaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy50emEiIG5hbWU9IlRaQSIgcGFyZW50X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMiLz4KKwk8IS0tIE5vZGVzIGFuZCBMYWJlbHMgLS0+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy50emEiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L1RaQS9UWkFfMF9hcmVhLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJUWkEgKDApIGFyZWEiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cHM6Ly93d3cuY2lhLmdvdi9jaWEvcHVibGljYXRpb25zL2ZhY3Rib29rL2dlb3MvdHouaHRtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMudHphIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9UWkEvVFpBXzAuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IlRaQSgwKSBOb2RlcyIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3Lmlzby5vcmcvaXNvL2hvbWUuaHRtIiBzcGF0aWFsPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvZ2VvL2NvdW50cnkvVFpBL1RaQV8wX01BUC54bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLnR6YSIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvVFpBL1RaQV8xX2FyZWEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IlRaQSAoMSkgYXJlYSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwczovL3d3dy5jaWEuZ292L2xpYnJhcnkvcHVibGljYXRpb25zL3RoZS13b3JsZC1mYWN0Ym9vay8iIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLnR6YSIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvVFpBL1RaQV8xLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJUWkEoMSkgTm9kZXMiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pc28ub3JnL2lzby9ob21lLmh0bSIgc3BhdGlhbD0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2dlby9jb3VudHJ5L1RaQS9UWkFfMV9NQVAueG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy50emEiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L1RaQS9UWkFfMl9hcmVhLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJUWkEgKDIpIGFyZWEiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cHM6Ly93d3cuY2lhLmdvdi9saWJyYXJ5L3B1YmxpY2F0aW9ucy90aGUtd29ybGQtZmFjdGJvb2svIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy50emEiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L1RaQS9UWkFfMi5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iVFpBKDIpIE5vZGVzIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaXNvLm9yZy9pc28vaG9tZS5odG0iIHNwYXRpYWw9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9nZW8vY291bnRyeS9UWkEvVFpBXzJfTUFQLnhtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorCTwhLS0gRWRnZXMgLS0+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy50emEiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvY29tbW9uYm9yZGVyL1RaQV8yX1RaQV8yLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJDb21tb24gQm9yZGVyIHJlbGF0aW9uc2hpcCB3aXRoaW4gY291bnRyeSBUWkEiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHZhbGlkPSJzdGFydD0yMDA2LTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLnR6YSIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9jb21tb25ib3JkZXIvVFpBXzJfVUdBXzIuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkNvbW1vbiBCb3JkZXIgcmVsYXRpb25zaGlwIGJldHdlZW4gY291bnRyeSBUWkEgYW5kIFVHQSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgdmFsaWQ9InN0YXJ0PTIwMDYtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMudHphIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL2NvbW1vbmJvcmRlci9UWkFfMl9aTUJfMi5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQ29tbW9uIEJvcmRlciByZWxhdGlvbnNoaXAgYmV0d2VlbiBjb3VudHJ5IFRaQSBhbmQgWk1CIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiB2YWxpZD0ic3RhcnQ9MjAwNi0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy50emEiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvcmVsYXRpdmVwaHlzaWNhbC9UWkFfMF9UWkFfMS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iUGh5c2ljYWwgY29udGFpbm1lbnQgb2YgVFpBIGxldmVsICgxKSBieSBUWkEgKDApIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaWJtLmNvbSIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMudHphIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL3JlbGF0aXZlcGh5c2ljYWwvVFpBXzFfVFpBXzIuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IlBoeXNpY2FsIGNvbnRhaW5tZW50IG9mIFRaQSBsZXZlbCAoMikgYnkgVFpBICgxKSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3LmlibS5jb20iIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKworPCEtLSBVR0EgLS0+Cis8c3RlbV9jYXRlZ29yeSBpZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLnVnYSIgbmFtZT0iVUdBIiBwYXJlbnRfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcyIvPgorCTwhLS0gTm9kZXMgYW5kIExhYmVscyAtLT4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLnVnYSIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvVUdBL1VHQV8wX2FyZWEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IlVHQSAoMCkgYXJlYSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwczovL3d3dy5jaWEuZ292L2NpYS9wdWJsaWNhdGlvbnMvZmFjdGJvb2svZ2Vvcy91Zy5odG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy51Z2EiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L1VHQS9VR0FfMC5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iVUdBKDApIE5vZGVzIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaXNvLm9yZy9pc28vaG9tZS5odG0iIHNwYXRpYWw9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9nZW8vY291bnRyeS9VR0EvVUdBXzBfTUFQLnhtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMudWdhIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9VR0EvVUdBXzFfYXJlYS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iVUdBICgxKSBhcmVhIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHBzOi8vd3d3LmNpYS5nb3YvbGlicmFyeS9wdWJsaWNhdGlvbnMvdGhlLXdvcmxkLWZhY3Rib29rLyIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMudWdhIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9VR0EvVUdBXzEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IlVHQSgxKSBOb2RlcyIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3Lmlzby5vcmcvaXNvL2hvbWUuaHRtIiBzcGF0aWFsPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvZ2VvL2NvdW50cnkvVUdBL1VHQV8xX01BUC54bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLnVnYSIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvVUdBL1VHQV8yX2FyZWEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IlVHQSAoMikgYXJlYSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwczovL3d3dy5jaWEuZ292L2xpYnJhcnkvcHVibGljYXRpb25zL3RoZS13b3JsZC1mYWN0Ym9vay8iIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLnVnYSIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvVUdBL1VHQV8yLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJVR0EoMikgTm9kZXMiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pc28ub3JnL2lzby9ob21lLmh0bSIgc3BhdGlhbD0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2dlby9jb3VudHJ5L1VHQS9VR0FfMl9NQVAueG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+CisJPCEtLSBFZGdlcyAtLT4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLnVnYSIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9jb21tb25ib3JkZXIvVUdBXzJfVUdBXzIuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkNvbW1vbiBCb3JkZXIgcmVsYXRpb25zaGlwIHdpdGhpbiBjb3VudHJ5IFVHQSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgdmFsaWQ9InN0YXJ0PTIwMDYtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMudWdhIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL3JlbGF0aXZlcGh5c2ljYWwvVUdBXzBfVUdBXzEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IlBoeXNpY2FsIGNvbnRhaW5tZW50IG9mIFVHQSBsZXZlbCAoMSkgYnkgVUdBICgwKSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3LmlibS5jb20iIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLnVnYSIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9yZWxhdGl2ZXBoeXNpY2FsL1VHQV8xX1VHQV8yLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJQaHlzaWNhbCBjb250YWlubWVudCBvZiBVR0EgbGV2ZWwgKDIpIGJ5IFVHQSAoMSkiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pYm0uY29tIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+CisKKzwhLS0gVUtSIC0tPgorPHN0ZW1fY2F0ZWdvcnkgaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy51a3IiIG5hbWU9IlVLUiIgcGFyZW50X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMiLz4KKwk8IS0tIE5vZGVzIGFuZCBMYWJlbHMgLS0+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy51a3IiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L1VLUi9VS1JfMF9hcmVhLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJVS1IgKDApIGFyZWEiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cHM6Ly93d3cuY2lhLmdvdi9jaWEvcHVibGljYXRpb25zL2ZhY3Rib29rL2dlb3MvdXAuaHRtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMudWtyIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9VS1IvVUtSXzAuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IlVLUigwKSBOb2RlcyIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3Lmlzby5vcmcvaXNvL2hvbWUuaHRtIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy51a3IiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L1VLUi9VS1JfMV9hcmVhLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJVS1IgKDEpIGFyZWEiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cHM6Ly93d3cuY2lhLmdvdi9saWJyYXJ5L3B1YmxpY2F0aW9ucy90aGUtd29ybGQtZmFjdGJvb2svIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy51a3IiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L1VLUi9VS1JfMS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQWxsIFVLUiAobGV2ZWwgMSkiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pc28ub3JnL2lzby9ob21lLmh0bSIgc3BhdGlhbD0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2dlby9jb3VudHJ5L1VLUi9VS1JfMV9NQVAueG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+CisJPCEtLSBFZGdlcyAtLT4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLnVrciIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9jb21tb25ib3JkZXIvVUtSXzFfVUtSXzEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkNvbW1vbiBCb3JkZXIgcmVsYXRpb25zaGlwIHdpdGhpbiBjb3VudHJ5IFVLUiIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgdmFsaWQ9InN0YXJ0PTIwMDEtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMudWtyIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL3JlbGF0aXZlcGh5c2ljYWwvVUtSXzBfVUtSXzEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IlBoeXNpY2FsIGNvbnRhaW5tZW50IG9mIFVLUiBsZXZlbCAoMSkgYnkgVUtSICgwKSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3LmlibS5jb20iIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKworPCEtLSBVTUkgLS0+Cis8c3RlbV9jYXRlZ29yeSBpZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLnVtaSIgbmFtZT0iVU1JIiBwYXJlbnRfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcyIvPgorCTwhLS0gTm9kZXMgYW5kIExhYmVscyAtLT4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLnVtaSIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvVU1JL1VNSV8wX2FyZWEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IlVNSSAoMCkgYXJlYSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwczovL3d3dy5jaWEuZ292L2NpYS9wdWJsaWNhdGlvbnMvZmFjdGJvb2svZ2Vvcy91bS5odG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy51bWkiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L1VNSS9VTUlfMC5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iVU1JKDApIE5vZGVzIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaXNvLm9yZy9pc28vaG9tZS5odG0iIHNwYXRpYWw9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9nZW8vY291bnRyeS9VTUkvVU1JXzBfTUFQLnhtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorCis8IS0tIFVSWSAtLT4KKzxzdGVtX2NhdGVnb3J5IGlkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMudXJ5IiBuYW1lPSJVUlkiIHBhcmVudF9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzIi8+CisJPCEtLSBOb2RlcyBhbmQgTGFiZWxzIC0tPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMudXJ5IiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9VUlkvVVJZXzBfYXJlYS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iVVJZICgwKSBhcmVhIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHBzOi8vd3d3LmNpYS5nb3YvY2lhL3B1YmxpY2F0aW9ucy9mYWN0Ym9vay9nZW9zL3V5Lmh0bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLnVyeSIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvVVJZL1VSWV8wLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJVUlkoMCkgTm9kZXMiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pc28ub3JnL2lzby9ob21lLmh0bSIgc3BhdGlhbD0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2dlby9jb3VudHJ5L1VSWS9VUllfMF9NQVAueG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy51cnkiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L1VSWS9VUllfMV9hcmVhLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJVUlkgKDEpIGFyZWEiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cHM6Ly93d3cuY2lhLmdvdi9saWJyYXJ5L3B1YmxpY2F0aW9ucy90aGUtd29ybGQtZmFjdGJvb2svIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy51cnkiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L1VSWS9VUllfMS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iVVJZKDEpIE5vZGVzIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaXNvLm9yZy9pc28vaG9tZS5odG0iIHNwYXRpYWw9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9nZW8vY291bnRyeS9VUlkvVVJZXzFfTUFQLnhtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMudXJ5IiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9VUlkvVVJZXzJfYXJlYS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iVVJZICgyKSBhcmVhIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHBzOi8vd3d3LmNpYS5nb3YvbGlicmFyeS9wdWJsaWNhdGlvbnMvdGhlLXdvcmxkLWZhY3Rib29rLyIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMudXJ5IiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9VUlkvVVJZXzIuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IlVSWSgyKSBOb2RlcyIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3Lmlzby5vcmcvaXNvL2hvbWUuaHRtIiBzcGF0aWFsPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvZ2VvL2NvdW50cnkvVVJZL1VSWV8yX01BUC54bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKwk8IS0tIEVkZ2VzIC0tPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMudXJ5IiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL2NvbW1vbmJvcmRlci9VUllfMl9VUllfMi5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQ29tbW9uIEJvcmRlciByZWxhdGlvbnNoaXAgd2l0aGluIGNvdW50cnkgVVJZIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiB2YWxpZD0ic3RhcnQ9MjAwNi0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy51cnkiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvcmVsYXRpdmVwaHlzaWNhbC9VUllfMF9VUllfMS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iUGh5c2ljYWwgY29udGFpbm1lbnQgb2YgVVJZIGxldmVsICgxKSBieSBVUlkgKDApIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaWJtLmNvbSIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMudXJ5IiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL3JlbGF0aXZlcGh5c2ljYWwvVVJZXzFfVVJZXzIuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IlBoeXNpY2FsIGNvbnRhaW5tZW50IG9mIFVSWSBsZXZlbCAoMikgYnkgVVJZICgxKSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3LmlibS5jb20iIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKworPCEtLSBVU0EgLS0+Cis8c3RlbV9jYXRlZ29yeSBpZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLnVzYSIgbmFtZT0iVVNBIiBwYXJlbnRfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcyIvPgorCTwhLS0gTm9kZXMgYW5kIExhYmVscyAtLT4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLnVzYSIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvVVNBL1VTQV8wX2FyZWEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IlRoZSBhcmVhIChrbV4yKSBmb3IgdGhlIFVTQSAoMCkgKGV4Y2VwdCBQdWVydG8gUmljbykiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cHM6Ly93d3cuY2lhLmdvdi9jaWEvcHVibGljYXRpb25zL2ZhY3Rib29rL2dlb3MvdXMuaHRtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMudXNhIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9VU0EvVVNBXzAuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IlRoZSBVU0EgKDApIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaXNvLm9yZy9pc28vaG9tZS5odG0iIHNwYXRpYWw9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9nZW8vY291bnRyeS9VU0EvVVNBXzBfTUFQLnhtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMudXNhIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9VU0EvVVNBXzFfYXJlYS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iVGhlIGFyZWEgKGttXjIpIGZvciB0aGUgU3RhdGVzICgxKSBvZiB0aGUgVVNBIChleGNlcHQgUHVlcnRvIFJpY28pIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuY2Vuc3VzLmdvdi9wb3B1bGF0aW9uL3d3dy9jZW5zdXNkYXRhL2RlbnNpdHkuaHRtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMudXNhIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9VU0EvVVNBXzEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkFsbCBVU0EgU3RhdGVzICgxKSAoZXhjZXB0IFB1ZXJ0byBSaWNvKSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3Lmlzby5vcmcvaXNvL2hvbWUuaHRtIiBzcGF0aWFsPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvZ2VvL2NvdW50cnkvVVNBL1VTQV8xX01BUC54bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLnVzYSIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvVVNBL1VTQV8yX2FyZWEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IlRoZSBhcmVhIChrbV4yKSBmb3IgYWxsIFVTQSBDb3VudGllcyAoZXhjZXB0IFB1ZXJ0byBSaWNvKSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3LmNlbnN1cy5nb3YvZ2VvL3d3dy90aWdlci8iIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLnVzYSIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvVVNBL1VTQV8yLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJBbGwgVVNBIENvdW50aWVzICgyKSAoZXhjZXB0IFB1ZXJ0byBSaWNvKSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3Lmlzby5vcmcvaXNvL2hvbWUuaHRtIiBzcGF0aWFsPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvZ2VvL2NvdW50cnkvVVNBL1VTQV8yX01BUC54bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLnVzYSIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvVVNBL1VTQV8zX2FyZWEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IlVTQSAoMykgYXJlYSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJDZW5zdXMiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLnVzYSIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvVVNBL1VTQV8zLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJVU0EgKGxldmVsIDMsIFZlcm1vbnQgb25seSBmb3Igbm93KSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJjZW5zdXMiIHNwYXRpYWw9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9nZW8vY291bnRyeS9VU0EvVVNBXzNfTUFQLnhtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorCTwhLS0gRWRnZXMgLS0+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy51c2EiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvY29tbW9uYm9yZGVyL1VTQV8yX1VTQV8yLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJDb21tb24gQm9yZGVyIHJlbGF0aW9uc2hpcCB3aXRoaW4gY291bnRyeSBVU0EiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHZhbGlkPSJzdGFydD0yMDA2LTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLnVzYSIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9jb21tb25ib3JkZXIvVVNBXzJfVVNBXzMuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkNvbW1vbiBCb3JkZXIgcmVsYXRpb25zaGlwIHdpdGhpbiBjb3VudHJ5IFVTQSBjb3VudGllcyBpbiBvdGhlciBzdGF0ZXMgdG8gdG93bnMgaW4gVmVybW9udCIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgdmFsaWQ9InN0YXJ0PTIwMDEtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMudXNhIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL2NvbW1vbmJvcmRlci9VU0FfM19VU0FfMy5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQ29tbW9uIEJvcmRlciByZWxhdGlvbnNoaXAgd2l0aGluIFZlcm1vbnQgY291bnRyeSBVU0EgbGV2ZWwgMyIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgdmFsaWQ9InN0YXJ0PTIwMDEtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMudXNhIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL3JlbGF0aXZlcGh5c2ljYWwvVVNBXzBfVVNBXzEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IlBoeXNpY2FsIGNvbnRhaW5tZW50IG9mIHRoZSBTdGF0ZXMgKDEpIGJ5IFVTQSAoMCkiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pYm0uY29tIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy51c2EiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvcmVsYXRpdmVwaHlzaWNhbC9VU0FfMV9VU0FfMi5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iUGh5c2ljYWwgY29udGFpbm1lbnQgb2YgdGhlIENvdW50aWVzIG9mIFRoZSBVbml0ZWQgU3RhdGVzICgyKSBieSB0aGUgU3RhdGVzIG9mIFRoZSBVbml0ZWQgU3RhdGVzICgxKSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3LmlibS5jb20iIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLnVzYSIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9yZWxhdGl2ZXBoeXNpY2FsL1VTQV8yX1VTQV8zLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJQaHlzaWNhbCBjb250YWlubWVudCBvZiB0aGUgU3RhdGVzICgzKSBieSBVU0EgKDIpIFZlcm1vbnQiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pYm0uY29tIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+CisKKzwhLS0gVVpCIC0tPgorPHN0ZW1fY2F0ZWdvcnkgaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy51emIiIG5hbWU9IlVaQiIgcGFyZW50X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMiLz4KKwk8IS0tIE5vZGVzIGFuZCBMYWJlbHMgLS0+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy51emIiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L1VaQi9VWkJfMF9hcmVhLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJVWkIgKDApIGFyZWEiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cHM6Ly93d3cuY2lhLmdvdi9jaWEvcHVibGljYXRpb25zL2ZhY3Rib29rL2dlb3MvdXouaHRtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMudXpiIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9VWkIvVVpCXzAuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IlVaQigwKSBOb2RlcyIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3Lmlzby5vcmcvaXNvL2hvbWUuaHRtIiBzcGF0aWFsPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvZ2VvL2NvdW50cnkvVVpCL1VaQl8wX01BUC54bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLnV6YiIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvVVpCL1VaQl8xX2FyZWEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IlVaQiAoMSkgYXJlYSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwczovL3d3dy5jaWEuZ292L2xpYnJhcnkvcHVibGljYXRpb25zL3RoZS13b3JsZC1mYWN0Ym9vay8iIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLnV6YiIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvVVpCL1VaQl8xLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJVWkIoMSkgTm9kZXMiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pc28ub3JnL2lzby9ob21lLmh0bSIgc3BhdGlhbD0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2dlby9jb3VudHJ5L1VaQi9VWkJfMV9NQVAueG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy51emIiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L1VaQi9VWkJfMl9hcmVhLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJVWkIgKDIpIGFyZWEiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cHM6Ly93d3cuY2lhLmdvdi9saWJyYXJ5L3B1YmxpY2F0aW9ucy90aGUtd29ybGQtZmFjdGJvb2svIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy51emIiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L1VaQi9VWkJfMi5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iVVpCKDIpIE5vZGVzIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaXNvLm9yZy9pc28vaG9tZS5odG0iIHNwYXRpYWw9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9nZW8vY291bnRyeS9VWkIvVVpCXzJfTUFQLnhtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorCTwhLS0gRWRnZXMgLS0+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy51emIiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvY29tbW9uYm9yZGVyL1VaQl8yX1VaQl8yLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJDb21tb24gQm9yZGVyIHJlbGF0aW9uc2hpcCB3aXRoaW4gY291bnRyeSBVWkIiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHZhbGlkPSJzdGFydD0yMDA2LTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLnV6YiIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9yZWxhdGl2ZXBoeXNpY2FsL1VaQl8wX1VaQl8xLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJQaHlzaWNhbCBjb250YWlubWVudCBvZiBVWkIgbGV2ZWwgKDEpIGJ5IFVaQiAoMCkiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pYm0uY29tIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy51emIiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvcmVsYXRpdmVwaHlzaWNhbC9VWkJfMV9VWkJfMi5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iUGh5c2ljYWwgY29udGFpbm1lbnQgb2YgVVpCIGxldmVsICgyKSBieSBVWkIgKDEpIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaWJtLmNvbSIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorCis8IS0tIFZBVCAtLT4KKzxzdGVtX2NhdGVnb3J5IGlkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMudmF0IiBuYW1lPSJWQVQiIHBhcmVudF9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzIi8+CisJPCEtLSBOb2RlcyBhbmQgTGFiZWxzIC0tPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMudmF0IiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9WQVQvVkFUXzBfYXJlYS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iVkFUICgwKSBhcmVhIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHBzOi8vd3d3LmNpYS5nb3YvY2lhL3B1YmxpY2F0aW9ucy9mYWN0Ym9vay9nZW9zL3Z0Lmh0bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLnZhdCIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvVkFUL1ZBVF8wLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJWQVQoMCkgTm9kZXMiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pc28ub3JnL2lzby9ob21lLmh0bSIgc3BhdGlhbD0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2dlby9jb3VudHJ5L1ZBVC9WQVRfMF9NQVAueG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+CisKKzwhLS0gVkNUIC0tPgorPHN0ZW1fY2F0ZWdvcnkgaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy52Y3QiIG5hbWU9IlZDVCIgcGFyZW50X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMiLz4KKwk8IS0tIE5vZGVzIGFuZCBMYWJlbHMgLS0+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy52Y3QiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L1ZDVC9WQ1RfMF9hcmVhLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJWQ1QgKDApIGFyZWEiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cHM6Ly93d3cuY2lhLmdvdi9jaWEvcHVibGljYXRpb25zL2ZhY3Rib29rL2dlb3MvdmMuaHRtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMudmN0IiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9WQ1QvVkNUXzAuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IlZDVCgwKSBOb2RlcyIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3Lmlzby5vcmcvaXNvL2hvbWUuaHRtIiBzcGF0aWFsPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvZ2VvL2NvdW50cnkvVkNUL1ZDVF8wX01BUC54bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKwk8IS0tIEVkZ2VzIC0tPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMudmN0IiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL3JlbGF0aXZlcGh5c2ljYWwvVkNUXzBfVkNUXzEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IlBoeXNpY2FsIGNvbnRhaW5tZW50IG9mIFZDVCBsZXZlbCAoMSkgYnkgVkNUICgwKSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3LmlibS5jb20iIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKworPCEtLSBWRU4gLS0+Cis8c3RlbV9jYXRlZ29yeSBpZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLnZlbiIgbmFtZT0iVkVOIiBwYXJlbnRfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcyIvPgorCTwhLS0gTm9kZXMgYW5kIExhYmVscyAtLT4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLnZlbiIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvVkVOL1ZFTl8wX2FyZWEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IlZFTiAoMCkgYXJlYSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwczovL3d3dy5jaWEuZ292L2NpYS9wdWJsaWNhdGlvbnMvZmFjdGJvb2svZ2Vvcy92ZS5odG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy52ZW4iIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L1ZFTi9WRU5fMC5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iVkVOKDApIE5vZGVzIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaXNvLm9yZy9pc28vaG9tZS5odG0iIHNwYXRpYWw9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9nZW8vY291bnRyeS9WRU4vVkVOXzBfTUFQLnhtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMudmVuIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9WRU4vVkVOXzFfYXJlYS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iVkVOICgxKSBhcmVhIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHBzOi8vd3d3LmNpYS5nb3YvbGlicmFyeS9wdWJsaWNhdGlvbnMvdGhlLXdvcmxkLWZhY3Rib29rLyIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMudmVuIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9WRU4vVkVOXzEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IlZFTigxKSBOb2RlcyIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3Lmlzby5vcmcvaXNvL2hvbWUuaHRtIiBzcGF0aWFsPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvZ2VvL2NvdW50cnkvVkVOL1ZFTl8xX01BUC54bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLnZlbiIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvVkVOL1ZFTl8yX2FyZWEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IlZFTiAoMikgYXJlYSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwczovL3d3dy5jaWEuZ292L2xpYnJhcnkvcHVibGljYXRpb25zL3RoZS13b3JsZC1mYWN0Ym9vay8iIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLnZlbiIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvVkVOL1ZFTl8yLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJWRU4oMikgTm9kZXMiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pc28ub3JnL2lzby9ob21lLmh0bSIgc3BhdGlhbD0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2dlby9jb3VudHJ5L1ZFTi9WRU5fMl9NQVAueG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+CisJPCEtLSBFZGdlcyAtLT4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLnZlbiIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9jb21tb25ib3JkZXIvVkVOXzJfVkVOXzIuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkNvbW1vbiBCb3JkZXIgcmVsYXRpb25zaGlwIHdpdGhpbiBjb3VudHJ5IFZFTiIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgdmFsaWQ9InN0YXJ0PTIwMDYtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMudmVuIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL3JlbGF0aXZlcGh5c2ljYWwvVkVOXzBfVkVOXzEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IlBoeXNpY2FsIGNvbnRhaW5tZW50IG9mIFZFTiBsZXZlbCAoMSkgYnkgVkVOICgwKSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3LmlibS5jb20iIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLnZlbiIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9yZWxhdGl2ZXBoeXNpY2FsL1ZFTl8xX1ZFTl8yLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJQaHlzaWNhbCBjb250YWlubWVudCBvZiBWRU4gbGV2ZWwgKDIpIGJ5IFZFTiAoMSkiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pYm0uY29tIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+CisKKzwhLS0gVkdCIC0tPgorPHN0ZW1fY2F0ZWdvcnkgaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy52Z2IiIG5hbWU9IlZHQiIgcGFyZW50X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMiLz4KKwk8IS0tIE5vZGVzIGFuZCBMYWJlbHMgLS0+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy52Z2IiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L1ZHQi9WR0JfMF9hcmVhLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJWR0IgKDApIGFyZWEiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cHM6Ly93d3cuY2lhLmdvdi9jaWEvcHVibGljYXRpb25zL2ZhY3Rib29rL2dlb3MvdmkuaHRtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMudmdiIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9WR0IvVkdCXzAuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IlZHQigwKSBOb2RlcyIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3Lmlzby5vcmcvaXNvL2hvbWUuaHRtIiBzcGF0aWFsPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvZ2VvL2NvdW50cnkvVkdCL1ZHQl8wX01BUC54bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKworPCEtLSBWSVIgLS0+Cis8c3RlbV9jYXRlZ29yeSBpZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLnZpciIgbmFtZT0iVklSIiBwYXJlbnRfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcyIvPgorCTwhLS0gTm9kZXMgYW5kIExhYmVscyAtLT4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLnZpciIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvVklSL1ZJUl8wX2FyZWEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IlZJUiAoMCkgYXJlYSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwczovL3d3dy5jaWEuZ292L2NpYS9wdWJsaWNhdGlvbnMvZmFjdGJvb2svZ2Vvcy92cS5odG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy52aXIiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L1ZJUi9WSVJfMC5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iVklSKDApIE5vZGVzIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaXNvLm9yZy9pc28vaG9tZS5odG0iIHNwYXRpYWw9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9nZW8vY291bnRyeS9WSVIvVklSXzBfTUFQLnhtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorCis8IS0tIFZOTSAtLT4KKzxzdGVtX2NhdGVnb3J5IGlkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMudm5tIiBuYW1lPSJWTk0iIHBhcmVudF9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzIi8+CisJPCEtLSBOb2RlcyBhbmQgTGFiZWxzIC0tPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMudm5tIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9WTk0vVk5NXzBfYXJlYS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iVk5NICgwKSBhcmVhIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHBzOi8vd3d3LmNpYS5nb3YvY2lhL3B1YmxpY2F0aW9ucy9mYWN0Ym9vay9nZW9zL3ZtLmh0bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLnZubSIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvVk5NL1ZOTV8wLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJWTk0oMCkgTm9kZXMiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pc28ub3JnL2lzby9ob21lLmh0bSIgc3BhdGlhbD0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2dlby9jb3VudHJ5L1ZOTS9WTk1fMF9NQVAueG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy52bm0iIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L1ZOTS9WTk1fMV9hcmVhLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJWTk0gKDEpIGFyZWEiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cHM6Ly93d3cuY2lhLmdvdi9saWJyYXJ5L3B1YmxpY2F0aW9ucy90aGUtd29ybGQtZmFjdGJvb2svIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy52bm0iIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L1ZOTS9WTk1fMS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iVk5NKDEpIE5vZGVzIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaXNvLm9yZy9pc28vaG9tZS5odG0iIHNwYXRpYWw9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9nZW8vY291bnRyeS9WTk0vVk5NXzFfTUFQLnhtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMudm5tIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9WTk0vVk5NXzJfYXJlYS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iVk5NICgyKSBhcmVhIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHBzOi8vd3d3LmNpYS5nb3YvbGlicmFyeS9wdWJsaWNhdGlvbnMvdGhlLXdvcmxkLWZhY3Rib29rLyIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMudm5tIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9WTk0vVk5NXzIuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IlZOTSgyKSBOb2RlcyIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3Lmlzby5vcmcvaXNvL2hvbWUuaHRtIiBzcGF0aWFsPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvZ2VvL2NvdW50cnkvVk5NL1ZOTV8yX01BUC54bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKwk8IS0tIEVkZ2VzIC0tPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMudm5tIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL2NvbW1vbmJvcmRlci9WTk1fMl9WTk1fMi5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQ29tbW9uIEJvcmRlciByZWxhdGlvbnNoaXAgd2l0aGluIGNvdW50cnkgVk5NIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiB2YWxpZD0ic3RhcnQ9MjAwNi0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy52bm0iIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvcmVsYXRpdmVwaHlzaWNhbC9WTk1fMF9WTk1fMS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iUGh5c2ljYWwgY29udGFpbm1lbnQgb2YgVk5NIGxldmVsICgxKSBieSBWTk0gKDApIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaWJtLmNvbSIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMudm5tIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL3JlbGF0aXZlcGh5c2ljYWwvVk5NXzFfVk5NXzIuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IlBoeXNpY2FsIGNvbnRhaW5tZW50IG9mIFZOTSBsZXZlbCAoMikgYnkgVk5NICgxKSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3LmlibS5jb20iIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKworPCEtLSBWVVQgLS0+Cis8c3RlbV9jYXRlZ29yeSBpZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLnZ1dCIgbmFtZT0iVlVUIiBwYXJlbnRfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcyIvPgorCTwhLS0gTm9kZXMgYW5kIExhYmVscyAtLT4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLnZ1dCIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvVlVUL1ZVVF8wX2FyZWEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IlZVVCAoMCkgYXJlYSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwczovL3d3dy5jaWEuZ292L2NpYS9wdWJsaWNhdGlvbnMvZmFjdGJvb2svZ2Vvcy9uaC5odG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy52dXQiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L1ZVVC9WVVRfMC5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iVlVUKDApIE5vZGVzIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaXNvLm9yZy9pc28vaG9tZS5odG0iIHNwYXRpYWw9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9nZW8vY291bnRyeS9WVVQvVlVUXzBfTUFQLnhtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorCis8IS0tIFdMRiAtLT4KKzxzdGVtX2NhdGVnb3J5IGlkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMud2xmIiBuYW1lPSJXTEYiIHBhcmVudF9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzIi8+CisJPCEtLSBOb2RlcyBhbmQgTGFiZWxzIC0tPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMud2xmIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9XTEYvV0xGXzBfYXJlYS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iV0xGICgwKSBhcmVhIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHBzOi8vd3d3LmNpYS5nb3YvY2lhL3B1YmxpY2F0aW9ucy9mYWN0Ym9vay9nZW9zL3dmLmh0bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLndsZiIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvV0xGL1dMRl8wLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJXTEYoMCkgTm9kZXMiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pc28ub3JnL2lzby9ob21lLmh0bSIgc3BhdGlhbD0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2dlby9jb3VudHJ5L1dMRi9XTEZfMF9NQVAueG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+CisKKzwhLS0gV1NNIC0tPgorPHN0ZW1fY2F0ZWdvcnkgaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy53c20iIG5hbWU9IldTTSIgcGFyZW50X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMiLz4KKwk8IS0tIE5vZGVzIGFuZCBMYWJlbHMgLS0+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy53c20iIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L1dTTS9XU01fMF9hcmVhLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJXU00gKDApIGFyZWEiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cHM6Ly93d3cuY2lhLmdvdi9jaWEvcHVibGljYXRpb25zL2ZhY3Rib29rL2dlb3Mvd3MuaHRtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMud3NtIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9XU00vV1NNXzAuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IldTTSgwKSBOb2RlcyIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3Lmlzby5vcmcvaXNvL2hvbWUuaHRtIiBzcGF0aWFsPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvZ2VvL2NvdW50cnkvV1NNL1dTTV8wX01BUC54bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKworPCEtLSBZRU0gLS0+Cis8c3RlbV9jYXRlZ29yeSBpZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLnllbSIgbmFtZT0iWUVNIiBwYXJlbnRfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcyIvPgorCTwhLS0gTm9kZXMgYW5kIExhYmVscyAtLT4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLnllbSIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvWUVNL1lFTV8wX2FyZWEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IllFTSAoMCkgYXJlYSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwczovL3d3dy5jaWEuZ292L2NpYS9wdWJsaWNhdGlvbnMvZmFjdGJvb2svZ2Vvcy95bS5odG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy55ZW0iIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L1lFTS9ZRU1fMC5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iWUVNKDApIE5vZGVzIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaXNvLm9yZy9pc28vaG9tZS5odG0iIHNwYXRpYWw9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9nZW8vY291bnRyeS9ZRU0vWUVNXzBfTUFQLnhtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMueWVtIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9ZRU0vWUVNXzFfYXJlYS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iWUVNICgxKSBhcmVhIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHBzOi8vd3d3LmNpYS5nb3YvbGlicmFyeS9wdWJsaWNhdGlvbnMvdGhlLXdvcmxkLWZhY3Rib29rLyIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMueWVtIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9ZRU0vWUVNXzEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IllFTSgxKSBOb2RlcyIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3Lmlzby5vcmcvaXNvL2hvbWUuaHRtIiBzcGF0aWFsPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvZ2VvL2NvdW50cnkvWUVNL1lFTV8xX01BUC54bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLnllbSIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvWUVNL1lFTV8yX2FyZWEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IllFTSAoMikgYXJlYSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwczovL3d3dy5jaWEuZ292L2xpYnJhcnkvcHVibGljYXRpb25zL3RoZS13b3JsZC1mYWN0Ym9vay8iIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLnllbSIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvWUVNL1lFTV8yLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJZRU0oMikgTm9kZXMiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pc28ub3JnL2lzby9ob21lLmh0bSIgc3BhdGlhbD0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2dlby9jb3VudHJ5L1lFTS9ZRU1fMl9NQVAueG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+CisJPCEtLSBFZGdlcyAtLT4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLnllbSIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9jb21tb25ib3JkZXIvWUVNXzJfWUVNXzIuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkNvbW1vbiBCb3JkZXIgcmVsYXRpb25zaGlwIHdpdGhpbiBjb3VudHJ5IFlFTSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgdmFsaWQ9InN0YXJ0PTIwMDYtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMueWVtIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL3JlbGF0aXZlcGh5c2ljYWwvWUVNXzBfWUVNXzEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IlBoeXNpY2FsIGNvbnRhaW5tZW50IG9mIFlFTSBsZXZlbCAoMSkgYnkgWUVNICgwKSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3LmlibS5jb20iIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLnllbSIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9yZWxhdGl2ZXBoeXNpY2FsL1lFTV8xX1lFTV8yLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJQaHlzaWNhbCBjb250YWlubWVudCBvZiBZRU0gbGV2ZWwgKDIpIGJ5IFlFTSAoMSkiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pYm0uY29tIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+CisKKzwhLS0gWkFGIC0tPgorPHN0ZW1fY2F0ZWdvcnkgaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy56YWYiIG5hbWU9IlpBRiIgcGFyZW50X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMiLz4KKwk8IS0tIE5vZGVzIGFuZCBMYWJlbHMgLS0+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy56YWYiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L1pBRi9aQUZfMF9hcmVhLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJaQUYgKDApIGFyZWEiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cHM6Ly93d3cuY2lhLmdvdi9jaWEvcHVibGljYXRpb25zL2ZhY3Rib29rL2dlb3Mvc2YuaHRtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuemFmIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9aQUYvWkFGXzAuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IlpBRigwKSBOb2RlcyIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3Lmlzby5vcmcvaXNvL2hvbWUuaHRtIiBzcGF0aWFsPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvZ2VvL2NvdW50cnkvWkFGL1pBRl8wX01BUC54bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLnphZiIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvWkFGL1pBRl8xX2FyZWEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IlpBRiAoMSkgYXJlYSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwczovL3d3dy5jaWEuZ292L2xpYnJhcnkvcHVibGljYXRpb25zL3RoZS13b3JsZC1mYWN0Ym9vay8iIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLnphZiIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvWkFGL1pBRl8xLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJaQUYoMSkgTm9kZXMiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pc28ub3JnL2lzby9ob21lLmh0bSIgc3BhdGlhbD0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2dlby9jb3VudHJ5L1pBRi9aQUZfMV9NQVAueG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy56YWYiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L1pBRi9aQUZfMl9hcmVhLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJaQUYgKDIpIGFyZWEiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cHM6Ly93d3cuY2lhLmdvdi9saWJyYXJ5L3B1YmxpY2F0aW9ucy90aGUtd29ybGQtZmFjdGJvb2svIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy56YWYiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L1pBRi9aQUZfMi5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iWkFGKDIpIE5vZGVzIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaXNvLm9yZy9pc28vaG9tZS5odG0iIHNwYXRpYWw9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9nZW8vY291bnRyeS9aQUYvWkFGXzJfTUFQLnhtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorCTwhLS0gRWRnZXMgLS0+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy56YWYiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvY29tbW9uYm9yZGVyL1pBRl8yX1pBRl8yLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJDb21tb24gQm9yZGVyIHJlbGF0aW9uc2hpcCB3aXRoaW4gY291bnRyeSBaQUYiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHZhbGlkPSJzdGFydD0yMDA2LTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLnphZiIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9jb21tb25ib3JkZXIvWkFGXzJfWldFXzAuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkNvbW1vbiBCb3JkZXIgcmVsYXRpb25zaGlwIGJldHdlZW4gY291bnRyeSBaQUYgYW5kIFpXRSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgdmFsaWQ9InN0YXJ0PTIwMDYtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuemFmIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL3JlbGF0aXZlcGh5c2ljYWwvWkFGXzBfWkFGXzEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IlBoeXNpY2FsIGNvbnRhaW5tZW50IG9mIFpBRiBsZXZlbCAoMSkgYnkgWkFGICgwKSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3LmlibS5jb20iIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLnphZiIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9yZWxhdGl2ZXBoeXNpY2FsL1pBRl8xX1pBRl8yLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJQaHlzaWNhbCBjb250YWlubWVudCBvZiBaQUYgbGV2ZWwgKDIpIGJ5IFpBRiAoMSkiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pYm0uY29tIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+CisKKzwhLS0gWk1CIC0tPgorPHN0ZW1fY2F0ZWdvcnkgaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy56bWIiIG5hbWU9IlpNQiIgcGFyZW50X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMiLz4KKwk8IS0tIE5vZGVzIGFuZCBMYWJlbHMgLS0+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy56bWIiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L1pNQi9aTUJfMF9hcmVhLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJaTUIgKDApIGFyZWEiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cHM6Ly93d3cuY2lhLmdvdi9jaWEvcHVibGljYXRpb25zL2ZhY3Rib29rL2dlb3MvemEuaHRtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuem1iIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9aTUIvWk1CXzAuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IlpNQigwKSBOb2RlcyIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3Lmlzby5vcmcvaXNvL2hvbWUuaHRtIiBzcGF0aWFsPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvZ2VvL2NvdW50cnkvWk1CL1pNQl8wX01BUC54bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLnptYiIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvWk1CL1pNQl8xX2FyZWEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IlpNQiAoMSkgYXJlYSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwczovL3d3dy5jaWEuZ292L2xpYnJhcnkvcHVibGljYXRpb25zL3RoZS13b3JsZC1mYWN0Ym9vay8iIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLnptYiIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvWk1CL1pNQl8xLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJaTUIoMSkgTm9kZXMiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pc28ub3JnL2lzby9ob21lLmh0bSIgc3BhdGlhbD0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2dlby9jb3VudHJ5L1pNQi9aTUJfMV9NQVAueG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy56bWIiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L1pNQi9aTUJfMl9hcmVhLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJaTUIgKDIpIGFyZWEiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cHM6Ly93d3cuY2lhLmdvdi9saWJyYXJ5L3B1YmxpY2F0aW9ucy90aGUtd29ybGQtZmFjdGJvb2svIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy56bWIiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L1pNQi9aTUJfMi5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iWk1CKDIpIE5vZGVzIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaXNvLm9yZy9pc28vaG9tZS5odG0iIHNwYXRpYWw9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9nZW8vY291bnRyeS9aTUIvWk1CXzJfTUFQLnhtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorCTwhLS0gRWRnZXMgLS0+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy56bWIiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvY29tbW9uYm9yZGVyL1pNQl8yX1pNQl8yLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJDb21tb24gQm9yZGVyIHJlbGF0aW9uc2hpcCB3aXRoaW4gY291bnRyeSBaTUIiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHZhbGlkPSJzdGFydD0yMDA2LTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLnptYiIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9jb21tb25ib3JkZXIvWk1CXzJfWldFXzAuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkNvbW1vbiBCb3JkZXIgcmVsYXRpb25zaGlwIGJldHdlZW4gY291bnRyeSBaTUIgYW5kIFpXRSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgdmFsaWQ9InN0YXJ0PTIwMDYtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuem1iIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL3JlbGF0aXZlcGh5c2ljYWwvWk1CXzBfWk1CXzEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IlBoeXNpY2FsIGNvbnRhaW5tZW50IG9mIFpNQiBsZXZlbCAoMSkgYnkgWk1CICgwKSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3LmlibS5jb20iIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLnptYiIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9yZWxhdGl2ZXBoeXNpY2FsL1pNQl8xX1pNQl8yLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJQaHlzaWNhbCBjb250YWlubWVudCBvZiBaTUIgbGV2ZWwgKDIpIGJ5IFpNQiAoMSkiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pYm0uY29tIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+CisKKzwhLS0gWldFIC0tPgorPHN0ZW1fY2F0ZWdvcnkgaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy56d2UiIG5hbWU9IlpXRSIgcGFyZW50X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMiLz4KKwk8IS0tIE5vZGVzIGFuZCBMYWJlbHMgLS0+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy56d2UiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L1pXRS9aV0VfMF9hcmVhLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJaV0UgKDApIGFyZWEiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cHM6Ly93d3cuY2lhLmdvdi9jaWEvcHVibGljYXRpb25zL2ZhY3Rib29rL2dlb3MvemkuaHRtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuendlIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9aV0UvWldFXzAuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IlpXRSgwKSBOb2RlcyIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3Lmlzby5vcmcvaXNvL2hvbWUuaHRtIiBzcGF0aWFsPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvZ2VvL2NvdW50cnkvWldFL1pXRV8wX01BUC54bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKworPCEtLSBaWlogLS0+Cis8c3RlbV9jYXRlZ29yeSBpZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLnp6eiIgbmFtZT0iWlpaIiBwYXJlbnRfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcyIvPgorCTwhLS0gTm9kZXMgYW5kIExhYmVscyAtLT4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLnp6eiIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvWlpaL1paWl8tMV9hcmVhLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJaWlogKC0xKSBhcmVhIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHBzOi8vd3d3LmNpYS5nb3YvbGlicmFyeS9wdWJsaWNhdGlvbnMvdGhlLXdvcmxkLWZhY3Rib29rLyIgdmFsaWQ9InN0YXJ0PTE2MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuenp6IiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9aWlovWlpaXy0xLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJaWlooLTEpIE5vZGVzIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaXNvLm9yZy9pc28vaG9tZS5odG0iIHZhbGlkPSJzdGFydD0xNjAwLTAxLTAxOyIgLz4KKwk8IS0tIEVkZ2VzIC0tPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuenp6IiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL2NvbW1vbmJvcmRlci9aWlpfMF9aWlpfMC5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQ29tbW9uIEJvcmRlciByZWxhdGlvbnNoaXAgYmV0d2VlbiBhbGwgY291bnRyaWVzIGluIHRoZSB3b3JsZCIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgdmFsaWQ9InN0YXJ0PTIwMDYtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuenp6IiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL3JlbGF0aXZlcGh5c2ljYWwvWlpaXy0xX1paWl8wLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJQaHlzaWNhbCBjb250YWlubWVudCBvZiBhbGwgQ291bnRyaWVzICgwKSBieSB0aGUgRWFydGggKC0xKSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwczovL3d3dy5jaWEuZ292L2xpYnJhcnkvcHVibGljYXRpb25zL3RoZS13b3JsZC1mYWN0Ym9vay8iIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzwvZXh0ZW5zaW9uPgorCis8L3BsdWdpbj4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuaW50ZXJ2ZW50aW9ucy8uY2xhc3NwYXRoIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5pbnRlcnZlbnRpb25zLy5jbGFzc3BhdGgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTIxZTUyNwotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuaW50ZXJ2ZW50aW9ucy8uY2xhc3NwYXRoCkBAIC0wLDAgKzEsNyBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxjbGFzc3BhdGg+CisJPGNsYXNzcGF0aGVudHJ5IGtpbmQ9InNyYyIgcGF0aD0ic3JjIi8+CisJPGNsYXNzcGF0aGVudHJ5IGtpbmQ9ImNvbiIgcGF0aD0ib3JnLmVjbGlwc2UuamR0LmxhdW5jaGluZy5KUkVfQ09OVEFJTkVSL29yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC5kZWJ1Zy51aS5sYXVuY2hlci5TdGFuZGFyZFZNVHlwZS9KYXZhU0UtMS42Ii8+CisJPGNsYXNzcGF0aGVudHJ5IGtpbmQ9ImNvbiIgcGF0aD0ib3JnLmVjbGlwc2UucGRlLmNvcmUucmVxdWlyZWRQbHVnaW5zIi8+CisJPGNsYXNzcGF0aGVudHJ5IGtpbmQ9Im91dHB1dCIgcGF0aD0iYmluIi8+Cis8L2NsYXNzcGF0aD4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuaW50ZXJ2ZW50aW9ucy8ucHJvamVjdCBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuaW50ZXJ2ZW50aW9ucy8ucHJvamVjdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYzJhNzQwCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5pbnRlcnZlbnRpb25zLy5wcm9qZWN0CkBAIC0wLDAgKzEsMjggQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8cHJvamVjdERlc2NyaXB0aW9uPgorCTxuYW1lPm9yZy5lY2xpcHNlLnN0ZW0udGVzdHMuaW50ZXJ2ZW50aW9uczwvbmFtZT4KKwk8Y29tbWVudD48L2NvbW1lbnQ+CisJPHByb2plY3RzPgorCTwvcHJvamVjdHM+CisJPGJ1aWxkU3BlYz4KKwkJPGJ1aWxkQ29tbWFuZD4KKwkJCTxuYW1lPm9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFidWlsZGVyPC9uYW1lPgorCQkJPGFyZ3VtZW50cz4KKwkJCTwvYXJndW1lbnRzPgorCQk8L2J1aWxkQ29tbWFuZD4KKwkJPGJ1aWxkQ29tbWFuZD4KKwkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5NYW5pZmVzdEJ1aWxkZXI8L25hbWU+CisJCQk8YXJndW1lbnRzPgorCQkJPC9hcmd1bWVudHM+CisJCTwvYnVpbGRDb21tYW5kPgorCQk8YnVpbGRDb21tYW5kPgorCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLlNjaGVtYUJ1aWxkZXI8L25hbWU+CisJCQk8YXJndW1lbnRzPgorCQkJPC9hcmd1bWVudHM+CisJCTwvYnVpbGRDb21tYW5kPgorCTwvYnVpbGRTcGVjPgorCTxuYXR1cmVzPgorCQk8bmF0dXJlPm9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFuYXR1cmU8L25hdHVyZT4KKwkJPG5hdHVyZT5vcmcuZWNsaXBzZS5wZGUuUGx1Z2luTmF0dXJlPC9uYXR1cmU+CisJPC9uYXR1cmVzPgorPC9wcm9qZWN0RGVzY3JpcHRpb24+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmludGVydmVudGlvbnMvTUVUQS1JTkYvTUFOSUZFU1QuTUYgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmludGVydmVudGlvbnMvTUVUQS1JTkYvTUFOSUZFU1QuTUYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWZkYjczMgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuaW50ZXJ2ZW50aW9ucy9NRVRBLUlORi9NQU5JRkVTVC5NRgpAQCAtMCwwICsxLDE3IEBACitNYW5pZmVzdC1WZXJzaW9uOiAxLjAKK0J1bmRsZS1NYW5pZmVzdFZlcnNpb246IDIKK0J1bmRsZS1OYW1lOiAlcGx1Z2luTmFtZQorQnVuZGxlLVN5bWJvbGljTmFtZTogb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5pbnRlcnZlbnRpb25zO3NpbmdsZXRvbjo9dHJ1ZQorQnVuZGxlLVZlcnNpb246IDEuMi4xCitCdW5kbGUtQ2xhc3NQYXRoOiAuCitCdW5kbGUtVmVuZG9yOiAlcHJvdmlkZXJOYW1lCitCdW5kbGUtTG9jYWxpemF0aW9uOiBwbHVnaW4KK0J1bmRsZS1SZXF1aXJlZEV4ZWN1dGlvbkVudmlyb25tZW50OiBKYXZhU0UtMS42CitFeHBvcnQtUGFja2FnZTogIG9yZy5lY2xpcHNlLnN0ZW0uaW50ZXJ2ZW50aW9ucy50ZXN0cworUmVxdWlyZS1CdW5kbGU6IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZSwKKyBvcmcuZWNsaXBzZS5zdGVtLmludGVydmVudGlvbnM7dmlzaWJpbGl0eTo9cmVleHBvcnQsCisgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlO3Zpc2liaWxpdHk6PXJlZXhwb3J0LAorIG9yZy5lY2xpcHNlLmVtZi5lY29yZTt2aXNpYmlsaXR5Oj1yZWV4cG9ydCwKKyBvcmcuZWNsaXBzZS5lbWYuZWNvcmUueG1pO3Zpc2liaWxpdHk6PXJlZXhwb3J0LAorIG9yZy5qdW5pdDt2aXNpYmlsaXR5Oj1yZWV4cG9ydAorQnVuZGxlLUFjdGl2YXRpb25Qb2xpY3k6IGxhenkKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuaW50ZXJ2ZW50aW9ucy9idWlsZC5wcm9wZXJ0aWVzIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5pbnRlcnZlbnRpb25zL2J1aWxkLnByb3BlcnRpZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmNmNmVlMAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuaW50ZXJ2ZW50aW9ucy9idWlsZC5wcm9wZXJ0aWVzCkBAIC0wLDAgKzEsMTIgQEAKKworIyA8Y29weXJpZ2h0PgorIyA8L2NvcHlyaWdodD4KKyMKKyMgJElkJAorCitiaW4uaW5jbHVkZXMgPSAuLFwKKyAgICAgICAgICAgICAgIE1FVEEtSU5GLyxcCisgICAgICAgICAgICAgICBwbHVnaW4ucHJvcGVydGllcworamFycy5jb21waWxlLm9yZGVyID0gLgorc291cmNlLi4gPSBzcmMvCitvdXRwdXQuLiA9IGJpbi8KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuaW50ZXJ2ZW50aW9ucy9wbHVnaW4ucHJvcGVydGllcyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuaW50ZXJ2ZW50aW9ucy9wbHVnaW4ucHJvcGVydGllcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMGU3NWYwCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5pbnRlcnZlbnRpb25zL3BsdWdpbi5wcm9wZXJ0aWVzCkBAIC0wLDAgKzEsOCBAQAorCisjIDxjb3B5cmlnaHQ+CisjIDwvY29weXJpZ2h0PgorIworIyAkSWQkCisKK3BsdWdpbk5hbWUgPSBJbnRlcnZlbnRpb25zIFRlc3RzCitwcm92aWRlck5hbWUgPSB3d3cuZXhhbXBsZS5vcmcKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuaW50ZXJ2ZW50aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9pbnRlcnZlbnRpb25zL3Rlc3RzL0NvbnRyb2xHcmFwaEdlbmVyYXRvclRlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuaW50ZXJ2ZW50aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9pbnRlcnZlbnRpb25zL3Rlc3RzL0NvbnRyb2xHcmFwaEdlbmVyYXRvclRlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNTQ0M2I5Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5pbnRlcnZlbnRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2ludGVydmVudGlvbnMvdGVzdHMvQ29udHJvbEdyYXBoR2VuZXJhdG9yVGVzdC5qYXZhCkBAIC0wLDAgKzEsOTggQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcnZlbnRpb25zLnRlc3RzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAKKyAqIENvcHlyaWdodCAoYykgMjAxMSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4gCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIAorICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wIAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQgCisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbCAKKyAqIAorICogQ29udHJpYnV0b3JzOiAKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKKworaW1wb3J0IGp1bml0LnRleHR1aS5UZXN0UnVubmVyOworCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcnZlbnRpb25zLkNvbnRyb2xHcmFwaEdlbmVyYXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmludGVydmVudGlvbnMuSW50ZXJ2ZW50aW9uc0ZhY3Rvcnk7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIEEgdGVzdCBjYXNlIGZvciB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+Q29udHJvbCBHcmFwaCBHZW5lcmF0b3I8L2I+PC9lbT4nLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBDb250cm9sR3JhcGhHZW5lcmF0b3JUZXN0IGV4dGVuZHMgVGVzdENhc2UgeworCisJLyoqCisJICogVGhlIGZpeHR1cmUgZm9yIHRoaXMgQ29udHJvbCBHcmFwaCBHZW5lcmF0b3IgdGVzdCBjYXNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBDb250cm9sR3JhcGhHZW5lcmF0b3IgZml4dHVyZSA9IG51bGw7CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CisJCVRlc3RSdW5uZXIucnVuKENvbnRyb2xHcmFwaEdlbmVyYXRvclRlc3QuY2xhc3MpOworCX0KKworCS8qKgorCSAqIENvbnN0cnVjdHMgYSBuZXcgQ29udHJvbCBHcmFwaCBHZW5lcmF0b3IgdGVzdCBjYXNlIHdpdGggdGhlIGdpdmVuIG5hbWUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIENvbnRyb2xHcmFwaEdlbmVyYXRvclRlc3QoU3RyaW5nIG5hbWUpIHsKKwkJc3VwZXIobmFtZSk7CisJfQorCisJLyoqCisJICogU2V0cyB0aGUgZml4dHVyZSBmb3IgdGhpcyBDb250cm9sIEdyYXBoIEdlbmVyYXRvciB0ZXN0IGNhc2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgc2V0Rml4dHVyZShDb250cm9sR3JhcGhHZW5lcmF0b3IgZml4dHVyZSkgeworCQl0aGlzLmZpeHR1cmUgPSBmaXh0dXJlOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIGZpeHR1cmUgZm9yIHRoaXMgQ29udHJvbCBHcmFwaCBHZW5lcmF0b3IgdGVzdCBjYXNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBDb250cm9sR3JhcGhHZW5lcmF0b3IgZ2V0Rml4dHVyZSgpIHsKKwkJcmV0dXJuIGZpeHR1cmU7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZSNzZXRVcCgpCisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIHNldFVwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCXNldEZpeHR1cmUoSW50ZXJ2ZW50aW9uc0ZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZUNvbnRyb2xHcmFwaEdlbmVyYXRvcigpKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlI3RlYXJEb3duKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgdGVhckRvd24oKSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJc2V0Rml4dHVyZShudWxsKTsKKwl9CisKK30gLy9Db250cm9sR3JhcGhHZW5lcmF0b3JUZXN0CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmludGVydmVudGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vaW50ZXJ2ZW50aW9ucy90ZXN0cy9JbnRlcnZlbnRpb25MYWJlbFRlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuaW50ZXJ2ZW50aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9pbnRlcnZlbnRpb25zL3Rlc3RzL0ludGVydmVudGlvbkxhYmVsVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI5N2E2NWQKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmludGVydmVudGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vaW50ZXJ2ZW50aW9ucy90ZXN0cy9JbnRlcnZlbnRpb25MYWJlbFRlc3QuamF2YQpAQCAtMCwwICsxLDY0IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uaW50ZXJ2ZW50aW9ucy50ZXN0czsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogCisgKiBDb3B5cmlnaHQgKGMpIDIwMTEgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuIAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyAKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0IAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwgCisgKiAKKyAqIENvbnRyaWJ1dG9yczogCisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmludGVydmVudGlvbnMuSW50ZXJ2ZW50aW9uTGFiZWw7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIEEgdGVzdCBjYXNlIGZvciB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+SW50ZXJ2ZW50aW9uIExhYmVsPC9iPjwvZW0+Jy4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgYWJzdHJhY3QgY2xhc3MgSW50ZXJ2ZW50aW9uTGFiZWxUZXN0IGV4dGVuZHMgVGVzdENhc2UgeworCisJLyoqCisJICogVGhlIGZpeHR1cmUgZm9yIHRoaXMgSW50ZXJ2ZW50aW9uIExhYmVsIHRlc3QgY2FzZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgSW50ZXJ2ZW50aW9uTGFiZWwgZml4dHVyZSA9IG51bGw7CisKKwkvKioKKwkgKiBDb25zdHJ1Y3RzIGEgbmV3IEludGVydmVudGlvbiBMYWJlbCB0ZXN0IGNhc2Ugd2l0aCB0aGUgZ2l2ZW4gbmFtZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgSW50ZXJ2ZW50aW9uTGFiZWxUZXN0KFN0cmluZyBuYW1lKSB7CisJCXN1cGVyKG5hbWUpOworCX0KKworCS8qKgorCSAqIFNldHMgdGhlIGZpeHR1cmUgZm9yIHRoaXMgSW50ZXJ2ZW50aW9uIExhYmVsIHRlc3QgY2FzZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBzZXRGaXh0dXJlKEludGVydmVudGlvbkxhYmVsIGZpeHR1cmUpIHsKKwkJdGhpcy5maXh0dXJlID0gZml4dHVyZTsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBmaXh0dXJlIGZvciB0aGlzIEludGVydmVudGlvbiBMYWJlbCB0ZXN0IGNhc2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIEludGVydmVudGlvbkxhYmVsIGdldEZpeHR1cmUoKSB7CisJCXJldHVybiBmaXh0dXJlOworCX0KKworfSAvL0ludGVydmVudGlvbkxhYmVsVGVzdApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5pbnRlcnZlbnRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2ludGVydmVudGlvbnMvdGVzdHMvSW50ZXJ2ZW50aW9uTGFiZWxWYWx1ZVRlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuaW50ZXJ2ZW50aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9pbnRlcnZlbnRpb25zL3Rlc3RzL0ludGVydmVudGlvbkxhYmVsVmFsdWVUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWI5YjA0MQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuaW50ZXJ2ZW50aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9pbnRlcnZlbnRpb25zL3Rlc3RzL0ludGVydmVudGlvbkxhYmVsVmFsdWVUZXN0LmphdmEKQEAgLTAsMCArMSw2NCBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmludGVydmVudGlvbnMudGVzdHM7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIAorICogQ29weXJpZ2h0IChjKSAyMDExIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiAKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdCAKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sIAorICogCisgKiBDb250cmlidXRvcnM6IAorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiAKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOworCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcnZlbnRpb25zLkludGVydmVudGlvbkxhYmVsVmFsdWU7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIEEgdGVzdCBjYXNlIGZvciB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+SW50ZXJ2ZW50aW9uIExhYmVsIFZhbHVlPC9iPjwvZW0+Jy4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgYWJzdHJhY3QgY2xhc3MgSW50ZXJ2ZW50aW9uTGFiZWxWYWx1ZVRlc3QgZXh0ZW5kcyBUZXN0Q2FzZSB7CisKKwkvKioKKwkgKiBUaGUgZml4dHVyZSBmb3IgdGhpcyBJbnRlcnZlbnRpb24gTGFiZWwgVmFsdWUgdGVzdCBjYXNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBJbnRlcnZlbnRpb25MYWJlbFZhbHVlIGZpeHR1cmUgPSBudWxsOworCisJLyoqCisJICogQ29uc3RydWN0cyBhIG5ldyBJbnRlcnZlbnRpb24gTGFiZWwgVmFsdWUgdGVzdCBjYXNlIHdpdGggdGhlIGdpdmVuIG5hbWUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEludGVydmVudGlvbkxhYmVsVmFsdWVUZXN0KFN0cmluZyBuYW1lKSB7CisJCXN1cGVyKG5hbWUpOworCX0KKworCS8qKgorCSAqIFNldHMgdGhlIGZpeHR1cmUgZm9yIHRoaXMgSW50ZXJ2ZW50aW9uIExhYmVsIFZhbHVlIHRlc3QgY2FzZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBzZXRGaXh0dXJlKEludGVydmVudGlvbkxhYmVsVmFsdWUgZml4dHVyZSkgeworCQl0aGlzLmZpeHR1cmUgPSBmaXh0dXJlOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIGZpeHR1cmUgZm9yIHRoaXMgSW50ZXJ2ZW50aW9uIExhYmVsIFZhbHVlIHRlc3QgY2FzZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgSW50ZXJ2ZW50aW9uTGFiZWxWYWx1ZSBnZXRGaXh0dXJlKCkgeworCQlyZXR1cm4gZml4dHVyZTsKKwl9CisKK30gLy9JbnRlcnZlbnRpb25MYWJlbFZhbHVlVGVzdApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5pbnRlcnZlbnRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2ludGVydmVudGlvbnMvdGVzdHMvSW50ZXJ2ZW50aW9uc0FsbFRlc3RzLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmludGVydmVudGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vaW50ZXJ2ZW50aW9ucy90ZXN0cy9JbnRlcnZlbnRpb25zQWxsVGVzdHMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZDFlNjIzCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5pbnRlcnZlbnRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2ludGVydmVudGlvbnMvdGVzdHMvSW50ZXJ2ZW50aW9uc0FsbFRlc3RzLmphdmEKQEAgLTAsMCArMSw1NiBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmludGVydmVudGlvbnMudGVzdHM7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIAorICogQ29weXJpZ2h0IChjKSAyMDExIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiAKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdCAKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sIAorICogCisgKiBDb250cmlidXRvcnM6IAorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiAKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3Q7CitpbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RTdWl0ZTsKKworaW1wb3J0IGp1bml0LnRleHR1aS5UZXN0UnVubmVyOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiBBIHRlc3Qgc3VpdGUgZm9yIHRoZSAnPGVtPjxiPkludGVydmVudGlvbnM8L2I+PC9lbT4nIG1vZGVsLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBJbnRlcnZlbnRpb25zQWxsVGVzdHMgZXh0ZW5kcyBUZXN0U3VpdGUgeworCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgeworCQlUZXN0UnVubmVyLnJ1bihzdWl0ZSgpKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgc3RhdGljIFRlc3Qgc3VpdGUoKSB7CisJCVRlc3RTdWl0ZSBzdWl0ZSA9IG5ldyBJbnRlcnZlbnRpb25zQWxsVGVzdHMoIkludGVydmVudGlvbnMgVGVzdHMiKTsKKwkJc3VpdGUuYWRkVGVzdChJbnRlcnZlbnRpb25zVGVzdHMuc3VpdGUoKSk7CisJCXJldHVybiBzdWl0ZTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgSW50ZXJ2ZW50aW9uc0FsbFRlc3RzKFN0cmluZyBuYW1lKSB7CisJCXN1cGVyKG5hbWUpOworCX0KKworfSAvL0ludGVydmVudGlvbnNBbGxUZXN0cwpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5pbnRlcnZlbnRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2ludGVydmVudGlvbnMvdGVzdHMvSW50ZXJ2ZW50aW9uc0V4YW1wbGUuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuaW50ZXJ2ZW50aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9pbnRlcnZlbnRpb25zL3Rlc3RzL0ludGVydmVudGlvbnNFeGFtcGxlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjY2YTMwMAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuaW50ZXJ2ZW50aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9pbnRlcnZlbnRpb25zL3Rlc3RzL0ludGVydmVudGlvbnNFeGFtcGxlLmphdmEKQEAgLTAsMCArMSwxMzAgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcnZlbnRpb25zLnRlc3RzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAKKyAqIENvcHlyaWdodCAoYykgMjAxMSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4gCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIAorICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wIAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQgCisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbCAKKyAqIAorICogQ29udHJpYnV0b3JzOiAKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGphdmEuaW8uRmlsZTsKK2ltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLkRpYWdub3N0aWM7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlVSSTsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0OworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnJlc291cmNlLlJlc291cmNlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5yZXNvdXJjZS5SZXNvdXJjZVNldDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5yZXNvdXJjZS5pbXBsLlJlc291cmNlU2V0SW1wbDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS51dGlsLkRpYWdub3N0aWNpYW47CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUueG1pLmltcGwuWE1JUmVzb3VyY2VGYWN0b3J5SW1wbDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uaW50ZXJ2ZW50aW9ucy5JbnRlcnZlbnRpb25zRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmludGVydmVudGlvbnMuSW50ZXJ2ZW50aW9uc1BhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcnZlbnRpb25zLlN0YW5kYXJkSW50ZXJ2ZW50aW9uTGFiZWw7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIEEgc2FtcGxlIHV0aWxpdHkgZm9yIHRoZSAnPGVtPjxiPmludGVydmVudGlvbnM8L2I+PC9lbT4nIHBhY2thZ2UuCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIEludGVydmVudGlvbnNFeGFtcGxlIHsKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIExvYWQgYWxsIHRoZSBhcmd1bWVudCBmaWxlIHBhdGhzIG9yIFVSSXMgYXMgaW5zdGFuY2VzIG9mIHRoZSBtb2RlbC4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gYXJncyB0aGUgZmlsZSBwYXRocyBvciBVUklzLgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CisJCS8vIENyZWF0ZSBhIHJlc291cmNlIHNldCB0byBob2xkIHRoZSByZXNvdXJjZXMuCisJCS8vCisJCVJlc291cmNlU2V0IHJlc291cmNlU2V0ID0gbmV3IFJlc291cmNlU2V0SW1wbCgpOworCQkKKwkJLy8gUmVnaXN0ZXIgdGhlIGFwcHJvcHJpYXRlIHJlc291cmNlIGZhY3RvcnkgdG8gaGFuZGxlIGFsbCBmaWxlIGV4dGVuc2lvbnMuCisJCS8vCisJCXJlc291cmNlU2V0LmdldFJlc291cmNlRmFjdG9yeVJlZ2lzdHJ5KCkuZ2V0RXh0ZW5zaW9uVG9GYWN0b3J5TWFwKCkucHV0CisJCQkoUmVzb3VyY2UuRmFjdG9yeS5SZWdpc3RyeS5ERUZBVUxUX0VYVEVOU0lPTiwgCisJCQkgbmV3IFhNSVJlc291cmNlRmFjdG9yeUltcGwoKSk7CisKKwkJLy8gUmVnaXN0ZXIgdGhlIHBhY2thZ2UgdG8gZW5zdXJlIGl0IGlzIGF2YWlsYWJsZSBkdXJpbmcgbG9hZGluZy4KKwkJLy8KKwkJcmVzb3VyY2VTZXQuZ2V0UGFja2FnZVJlZ2lzdHJ5KCkucHV0CisJCQkoSW50ZXJ2ZW50aW9uc1BhY2thZ2UuZU5TX1VSSSwgCisJCQkgSW50ZXJ2ZW50aW9uc1BhY2thZ2UuZUlOU1RBTkNFKTsKKyAgICAgICAgCisJCS8vIElmIHRoZXJlIGFyZSBubyBhcmd1bWVudHMsIGVtaXQgYW4gYXBwcm9wcmlhdGUgdXNhZ2UgbWVzc2FnZS4KKwkJLy8KKwkJaWYgKGFyZ3MubGVuZ3RoID09IDApIHsKKwkJCVN5c3RlbS5vdXQucHJpbnRsbigiRW50ZXIgYSBsaXN0IG9mIGZpbGUgcGF0aHMgb3IgVVJJcyB0aGF0IGhhdmUgY29udGVudCBsaWtlIHRoaXM6Iik7CisJCQl0cnkgeworCQkJCVJlc291cmNlIHJlc291cmNlID0gcmVzb3VyY2VTZXQuY3JlYXRlUmVzb3VyY2UoVVJJLmNyZWF0ZVVSSSgiaHR0cDovLy9NeS5pbnRlcnZlbnRpb25zIikpOworCQkJCVN0YW5kYXJkSW50ZXJ2ZW50aW9uTGFiZWwgcm9vdCA9IEludGVydmVudGlvbnNGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVTdGFuZGFyZEludGVydmVudGlvbkxhYmVsKCk7CisJCQkJcmVzb3VyY2UuZ2V0Q29udGVudHMoKS5hZGQocm9vdCk7CisJCQkJcmVzb3VyY2Uuc2F2ZShTeXN0ZW0ub3V0LCBudWxsKTsKKwkJCX0KKwkJCWNhdGNoIChJT0V4Y2VwdGlvbiBleGNlcHRpb24pIHsKKwkJCQlleGNlcHRpb24ucHJpbnRTdGFja1RyYWNlKCk7CisJCQl9CisJCX0KKwkJZWxzZSB7CisJCQkvLyBJdGVyYXRlIG92ZXIgYWxsIHRoZSBhcmd1bWVudHMuCisJCQkvLworCQkJZm9yIChpbnQgaSA9IDA7IGkgPCBhcmdzLmxlbmd0aDsgKytpKSB7CisJCQkJLy8gQ29uc3RydWN0IHRoZSBVUkkgZm9yIHRoZSBpbnN0YW5jZSBmaWxlLgorCQkJCS8vIFRoZSBhcmd1bWVudCBpcyB0cmVhdGVkIGFzIGEgZmlsZSBwYXRoIG9ubHkgaWYgaXQgZGVub3RlcyBhbiBleGlzdGluZyBmaWxlLgorCQkJCS8vIE90aGVyd2lzZSwgaXQncyBkaXJlY3RseSB0cmVhdGVkIGFzIGEgVVJMLgorCQkJCS8vCisJCQkJRmlsZSBmaWxlID0gbmV3IEZpbGUoYXJnc1tpXSk7CisJCQkJVVJJIHVyaSA9IGZpbGUuaXNGaWxlKCkgPyBVUkkuY3JlYXRlRmlsZVVSSShmaWxlLmdldEFic29sdXRlUGF0aCgpKTogVVJJLmNyZWF0ZVVSSShhcmdzW2ldKTsKKworCQkJCXRyeSB7CisJCQkJCS8vIERlbWFuZCBsb2FkIHJlc291cmNlIGZvciB0aGlzIGZpbGUuCisJCQkJCS8vCisJCQkJCVJlc291cmNlIHJlc291cmNlID0gcmVzb3VyY2VTZXQuZ2V0UmVzb3VyY2UodXJpLCB0cnVlKTsKKwkJCQkJU3lzdGVtLm91dC5wcmludGxuKCJMb2FkZWQgIiArIHVyaSk7CisKKwkJCQkJLy8gVmFsaWRhdGUgdGhlIGNvbnRlbnRzIG9mIHRoZSBsb2FkZWQgcmVzb3VyY2UuCisJCQkJCS8vCisJCQkJCWZvciAoRU9iamVjdCBlT2JqZWN0IDogcmVzb3VyY2UuZ2V0Q29udGVudHMoKSkgeworCQkJCQkJRGlhZ25vc3RpYyBkaWFnbm9zdGljID0gRGlhZ25vc3RpY2lhbi5JTlNUQU5DRS52YWxpZGF0ZShlT2JqZWN0KTsKKwkJCQkJCWlmIChkaWFnbm9zdGljLmdldFNldmVyaXR5KCkgIT0gRGlhZ25vc3RpYy5PSykgeworCQkJCQkJCXByaW50RGlhZ25vc3RpYyhkaWFnbm9zdGljLCAiIik7CisJCQkJCQl9CisJCQkJCX0KKwkJCQl9CisJCQkJY2F0Y2ggKFJ1bnRpbWVFeGNlcHRpb24gZXhjZXB0aW9uKSB7CisJCQkJCVN5c3RlbS5vdXQucHJpbnRsbigiUHJvYmxlbSBsb2FkaW5nICIgKyB1cmkpOworCQkJCQlleGNlcHRpb24ucHJpbnRTdGFja1RyYWNlKCk7CisJCQkJfQorCQkJfQorCQl9CisJfQorCQorCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogUHJpbnRzIGRpYWdub3N0aWNzIHdpdGggaW5kZW50YXRpb24uCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIGRpYWdub3N0aWMgdGhlIGRpYWdub3N0aWMgdG8gcHJpbnQuCisJICogQHBhcmFtIGluZGVudCB0aGUgaW5kZW50YXRpb24gZm9yIHByaW50aW5nLgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgc3RhdGljIHZvaWQgcHJpbnREaWFnbm9zdGljKERpYWdub3N0aWMgZGlhZ25vc3RpYywgU3RyaW5nIGluZGVudCkgeworCQlTeXN0ZW0ub3V0LnByaW50KGluZGVudCk7CisJCVN5c3RlbS5vdXQucHJpbnRsbihkaWFnbm9zdGljLmdldE1lc3NhZ2UoKSk7CisJCWZvciAoRGlhZ25vc3RpYyBjaGlsZCA6IGRpYWdub3N0aWMuZ2V0Q2hpbGRyZW4oKSkgeworCQkJcHJpbnREaWFnbm9zdGljKGNoaWxkLCBpbmRlbnQgKyAiICAiKTsKKwkJfQorCX0KKworfSAvL0ludGVydmVudGlvbnNFeGFtcGxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmludGVydmVudGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vaW50ZXJ2ZW50aW9ucy90ZXN0cy9JbnRlcnZlbnRpb25zVGVzdHMuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuaW50ZXJ2ZW50aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9pbnRlcnZlbnRpb25zL3Rlc3RzL0ludGVydmVudGlvbnNUZXN0cy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNiYzlkN2YKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmludGVydmVudGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vaW50ZXJ2ZW50aW9ucy90ZXN0cy9JbnRlcnZlbnRpb25zVGVzdHMuamF2YQpAQCAtMCwwICsxLDU4IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uaW50ZXJ2ZW50aW9ucy50ZXN0czsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogCisgKiBDb3B5cmlnaHQgKGMpIDIwMTEgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuIAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyAKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0IAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwgCisgKiAKKyAqIENvbnRyaWJ1dG9yczogCisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdDsKK2ltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdFN1aXRlOworCitpbXBvcnQganVuaXQudGV4dHVpLlRlc3RSdW5uZXI7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIEEgdGVzdCBzdWl0ZSBmb3IgdGhlICc8ZW0+PGI+aW50ZXJ2ZW50aW9uczwvYj48L2VtPicgcGFja2FnZS4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgSW50ZXJ2ZW50aW9uc1Rlc3RzIGV4dGVuZHMgVGVzdFN1aXRlIHsKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKKwkJVGVzdFJ1bm5lci5ydW4oc3VpdGUoKSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHN0YXRpYyBUZXN0IHN1aXRlKCkgeworCQlUZXN0U3VpdGUgc3VpdGUgPSBuZXcgSW50ZXJ2ZW50aW9uc1Rlc3RzKCJpbnRlcnZlbnRpb25zIFRlc3RzIik7CisJCXN1aXRlLmFkZFRlc3RTdWl0ZShTdGFuZGFyZEludGVydmVudGlvbkxhYmVsVGVzdC5jbGFzcyk7CisJCXN1aXRlLmFkZFRlc3RTdWl0ZShDb250cm9sR3JhcGhHZW5lcmF0b3JUZXN0LmNsYXNzKTsKKwkJc3VpdGUuYWRkVGVzdFN1aXRlKFN0YW5kYXJkSW50ZXJ2ZW50aW9uTGFiZWxWYWx1ZVRlc3QuY2xhc3MpOworCQlyZXR1cm4gc3VpdGU7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEludGVydmVudGlvbnNUZXN0cyhTdHJpbmcgbmFtZSkgeworCQlzdXBlcihuYW1lKTsKKwl9CisKK30gLy9JbnRlcnZlbnRpb25zVGVzdHMKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuaW50ZXJ2ZW50aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9pbnRlcnZlbnRpb25zL3Rlc3RzL1N0YW5kYXJkSW50ZXJ2ZW50aW9uTGFiZWxUZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmludGVydmVudGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vaW50ZXJ2ZW50aW9ucy90ZXN0cy9TdGFuZGFyZEludGVydmVudGlvbkxhYmVsVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg2ODAyYmIKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmludGVydmVudGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vaW50ZXJ2ZW50aW9ucy90ZXN0cy9TdGFuZGFyZEludGVydmVudGlvbkxhYmVsVGVzdC5qYXZhCkBAIC0wLDAgKzEsNzkgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcnZlbnRpb25zLnRlc3RzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAKKyAqIENvcHlyaWdodCAoYykgMjAxMSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4gCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIAorICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wIAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQgCisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbCAKKyAqIAorICogQ29udHJpYnV0b3JzOiAKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGp1bml0LnRleHR1aS5UZXN0UnVubmVyOworCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcnZlbnRpb25zLkludGVydmVudGlvbnNGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uaW50ZXJ2ZW50aW9ucy5TdGFuZGFyZEludGVydmVudGlvbkxhYmVsOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiBBIHRlc3QgY2FzZSBmb3IgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPlN0YW5kYXJkIEludGVydmVudGlvbiBMYWJlbDwvYj48L2VtPicuCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIFN0YW5kYXJkSW50ZXJ2ZW50aW9uTGFiZWxUZXN0IGV4dGVuZHMgSW50ZXJ2ZW50aW9uTGFiZWxUZXN0IHsKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKKwkJVGVzdFJ1bm5lci5ydW4oU3RhbmRhcmRJbnRlcnZlbnRpb25MYWJlbFRlc3QuY2xhc3MpOworCX0KKworCS8qKgorCSAqIENvbnN0cnVjdHMgYSBuZXcgU3RhbmRhcmQgSW50ZXJ2ZW50aW9uIExhYmVsIHRlc3QgY2FzZSB3aXRoIHRoZSBnaXZlbiBuYW1lLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBTdGFuZGFyZEludGVydmVudGlvbkxhYmVsVGVzdChTdHJpbmcgbmFtZSkgeworCQlzdXBlcihuYW1lKTsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBmaXh0dXJlIGZvciB0aGlzIFN0YW5kYXJkIEludGVydmVudGlvbiBMYWJlbCB0ZXN0IGNhc2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIFN0YW5kYXJkSW50ZXJ2ZW50aW9uTGFiZWwgZ2V0Rml4dHVyZSgpIHsKKwkJcmV0dXJuIChTdGFuZGFyZEludGVydmVudGlvbkxhYmVsKWZpeHR1cmU7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZSNzZXRVcCgpCisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIHNldFVwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCXNldEZpeHR1cmUoSW50ZXJ2ZW50aW9uc0ZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZVN0YW5kYXJkSW50ZXJ2ZW50aW9uTGFiZWwoKSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZSN0ZWFyRG93bigpCisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIHRlYXJEb3duKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCXNldEZpeHR1cmUobnVsbCk7CisJfQorCit9IC8vU3RhbmRhcmRJbnRlcnZlbnRpb25MYWJlbFRlc3QKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuaW50ZXJ2ZW50aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9pbnRlcnZlbnRpb25zL3Rlc3RzL1N0YW5kYXJkSW50ZXJ2ZW50aW9uTGFiZWxWYWx1ZVRlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuaW50ZXJ2ZW50aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9pbnRlcnZlbnRpb25zL3Rlc3RzL1N0YW5kYXJkSW50ZXJ2ZW50aW9uTGFiZWxWYWx1ZVRlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZGM3ZTIwCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5pbnRlcnZlbnRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2ludGVydmVudGlvbnMvdGVzdHMvU3RhbmRhcmRJbnRlcnZlbnRpb25MYWJlbFZhbHVlVGVzdC5qYXZhCkBAIC0wLDAgKzEsNzkgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcnZlbnRpb25zLnRlc3RzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAKKyAqIENvcHlyaWdodCAoYykgMjAxMSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4gCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIAorICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wIAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQgCisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbCAKKyAqIAorICogQ29udHJpYnV0b3JzOiAKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGp1bml0LnRleHR1aS5UZXN0UnVubmVyOworCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcnZlbnRpb25zLkludGVydmVudGlvbnNGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uaW50ZXJ2ZW50aW9ucy5TdGFuZGFyZEludGVydmVudGlvbkxhYmVsVmFsdWU7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIEEgdGVzdCBjYXNlIGZvciB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+U3RhbmRhcmQgSW50ZXJ2ZW50aW9uIExhYmVsIFZhbHVlPC9iPjwvZW0+Jy4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgU3RhbmRhcmRJbnRlcnZlbnRpb25MYWJlbFZhbHVlVGVzdCBleHRlbmRzIEludGVydmVudGlvbkxhYmVsVmFsdWVUZXN0IHsKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKKwkJVGVzdFJ1bm5lci5ydW4oU3RhbmRhcmRJbnRlcnZlbnRpb25MYWJlbFZhbHVlVGVzdC5jbGFzcyk7CisJfQorCisJLyoqCisJICogQ29uc3RydWN0cyBhIG5ldyBTdGFuZGFyZCBJbnRlcnZlbnRpb24gTGFiZWwgVmFsdWUgdGVzdCBjYXNlIHdpdGggdGhlIGdpdmVuIG5hbWUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFN0YW5kYXJkSW50ZXJ2ZW50aW9uTGFiZWxWYWx1ZVRlc3QoU3RyaW5nIG5hbWUpIHsKKwkJc3VwZXIobmFtZSk7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgZml4dHVyZSBmb3IgdGhpcyBTdGFuZGFyZCBJbnRlcnZlbnRpb24gTGFiZWwgVmFsdWUgdGVzdCBjYXNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCBTdGFuZGFyZEludGVydmVudGlvbkxhYmVsVmFsdWUgZ2V0Rml4dHVyZSgpIHsKKwkJcmV0dXJuIChTdGFuZGFyZEludGVydmVudGlvbkxhYmVsVmFsdWUpZml4dHVyZTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlI3NldFVwKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgc2V0VXAoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJc2V0Rml4dHVyZShJbnRlcnZlbnRpb25zRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlU3RhbmRhcmRJbnRlcnZlbnRpb25MYWJlbFZhbHVlKCkpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2UjdGVhckRvd24oKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgdm9pZCB0ZWFyRG93bigpIHRocm93cyBFeGNlcHRpb24geworCQlzZXRGaXh0dXJlKG51bGwpOworCX0KKworfSAvL1N0YW5kYXJkSW50ZXJ2ZW50aW9uTGFiZWxWYWx1ZVRlc3QKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuam9icy8uY2xhc3NwYXRoIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5qb2JzLy5jbGFzc3BhdGgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDY2NGNiNAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuam9icy8uY2xhc3NwYXRoCkBAIC0wLDAgKzEsOSBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxjbGFzc3BhdGg+CisJPGNsYXNzcGF0aGVudHJ5IGtpbmQ9InNyYyIgcGF0aD0ic3JjIi8+CisJPGNsYXNzcGF0aGVudHJ5IGtpbmQ9ImNvbiIgcGF0aD0ib3JnLmVjbGlwc2UuamR0LmxhdW5jaGluZy5KUkVfQ09OVEFJTkVSL29yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC5kZWJ1Zy51aS5sYXVuY2hlci5TdGFuZGFyZFZNVHlwZS9KMlNFLTEuNSIvPgorCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJjb24iIHBhdGg9Im9yZy5lY2xpcHNlLnBkZS5jb3JlLnJlcXVpcmVkUGx1Z2lucyIvPgorCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJjb24iIHBhdGg9Im9yZy5lY2xpcHNlLmpkdC5qdW5pdC5KVU5JVF9DT05UQUlORVIvNCIvPgorCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJvdXRwdXQiIHBhdGg9ImJpbiIvPgorPC9jbGFzc3BhdGg+CisKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuam9icy8ucHJvamVjdCBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuam9icy8ucHJvamVjdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMDQ4ZWY2Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5qb2JzLy5wcm9qZWN0CkBAIC0wLDAgKzEsMjggQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8cHJvamVjdERlc2NyaXB0aW9uPgorCTxuYW1lPm9yZy5lY2xpcHNlLnN0ZW0udGVzdHMuam9iczwvbmFtZT4KKwk8Y29tbWVudD48L2NvbW1lbnQ+CisJPHByb2plY3RzPgorCTwvcHJvamVjdHM+CisJPGJ1aWxkU3BlYz4KKwkJPGJ1aWxkQ29tbWFuZD4KKwkJCTxuYW1lPm9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFidWlsZGVyPC9uYW1lPgorCQkJPGFyZ3VtZW50cz4KKwkJCTwvYXJndW1lbnRzPgorCQk8L2J1aWxkQ29tbWFuZD4KKwkJPGJ1aWxkQ29tbWFuZD4KKwkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5NYW5pZmVzdEJ1aWxkZXI8L25hbWU+CisJCQk8YXJndW1lbnRzPgorCQkJPC9hcmd1bWVudHM+CisJCTwvYnVpbGRDb21tYW5kPgorCQk8YnVpbGRDb21tYW5kPgorCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLlNjaGVtYUJ1aWxkZXI8L25hbWU+CisJCQk8YXJndW1lbnRzPgorCQkJPC9hcmd1bWVudHM+CisJCTwvYnVpbGRDb21tYW5kPgorCTwvYnVpbGRTcGVjPgorCTxuYXR1cmVzPgorCQk8bmF0dXJlPm9yZy5lY2xpcHNlLnBkZS5QbHVnaW5OYXR1cmU8L25hdHVyZT4KKwkJPG5hdHVyZT5vcmcuZWNsaXBzZS5qZHQuY29yZS5qYXZhbmF0dXJlPC9uYXR1cmU+CisJPC9uYXR1cmVzPgorPC9wcm9qZWN0RGVzY3JpcHRpb24+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmpvYnMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5qb2JzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZmJhODIxCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5qb2JzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcwpAQCAtMCwwICsxLDIwIEBACisjVHVlIFNlcCAwMSAxNjo1NzozNiBFRFQgMjAwOQorZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvZGVnZW4udGFyZ2V0UGxhdGZvcm09MS41CitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb21wbGlhbmNlPTEuNQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuZG9jLmNvbW1lbnQuc3VwcG9ydD1kaXNhYmxlZAorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5hc3NlcnRJZGVudGlmaWVyPWVycm9yCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmVudW1JZGVudGlmaWVyPWVycm9yCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmludmFsaWRKYXZhZG9jPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW52YWxpZEphdmFkb2NUYWdzPWVuYWJsZWQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW52YWxpZEphdmFkb2NUYWdzRGVwcmVjYXRlZFJlZj1lbmFibGVkCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmludmFsaWRKYXZhZG9jVGFnc05vdFZpc2libGVSZWY9ZW5hYmxlZAorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbnZhbGlkSmF2YWRvY1RhZ3NWaXNpYmlsaXR5PXB1YmxpYworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nSmF2YWRvY0NvbW1lbnRzPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0phdmFkb2NDb21tZW50c092ZXJyaWRpbmc9ZW5hYmxlZAorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nSmF2YWRvY0NvbW1lbnRzVmlzaWJpbGl0eT1wdWJsaWMKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0phdmFkb2NUYWdEZXNjcmlwdGlvbj1yZXR1cm5fdGFnCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdKYXZhZG9jVGFncz13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdKYXZhZG9jVGFnc092ZXJyaWRpbmc9ZW5hYmxlZAorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nSmF2YWRvY1RhZ3NWaXNpYmlsaXR5PXB1YmxpYworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuc291cmNlPTEuNQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5qb2JzL01FVEEtSU5GL01BTklGRVNULk1GIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5qb2JzL01FVEEtSU5GL01BTklGRVNULk1GCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ4NGQyODcwCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5qb2JzL01FVEEtSU5GL01BTklGRVNULk1GCkBAIC0wLDAgKzEsMTIgQEAKK01hbmlmZXN0LVZlcnNpb246IDEuMAorQnVuZGxlLU1hbmlmZXN0VmVyc2lvbjogMgorQnVuZGxlLU5hbWU6ICVwbHVnaW5OYW1lCitCdW5kbGUtU3ltYm9saWNOYW1lOiBvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmpvYnMKK0J1bmRsZS1WZXJzaW9uOiAxLjIuMQorQnVuZGxlLUFjdGl2YXRvcjogb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5qb2JzLkFjdGl2YXRvcgorQnVuZGxlLVZlbmRvcjogJXByb3ZpZGVyTmFtZQorQnVuZGxlLUxvY2FsaXphdGlvbjogcGx1Z2luCitSZXF1aXJlLUJ1bmRsZTogb3JnLmVjbGlwc2Uuc3RlbS5qb2JzLAorIG9yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZQorQnVuZGxlLUFjdGl2YXRpb25Qb2xpY3k6IGxhenkKK0J1bmRsZS1SZXF1aXJlZEV4ZWN1dGlvbkVudmlyb25tZW50OiBKMlNFLTEuNQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5qb2JzL2J1aWxkLnByb3BlcnRpZXMgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmpvYnMvYnVpbGQucHJvcGVydGllcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMzBmMGVlCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5qb2JzL2J1aWxkLnByb3BlcnRpZXMKQEAgLTAsMCArMSw3IEBACitzb3VyY2UuLiA9IHNyYy8KK291dHB1dC4uID0gYmluLworYmluLmluY2x1ZGVzID0gTUVUQS1JTkYvLFwKKyAgICAgICAgICAgICAgIC4sXAorICAgICAgICAgICAgICAgbm90aWNlLmh0bWwsXAorICAgICAgICAgICAgICAgZXBsLXYxMC5odG1sLFwKKyAgICAgICAgICAgICAgIHBsdWdpbi5wcm9wZXJ0aWVzCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmpvYnMvZXBsLXYxMC5odG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5qb2JzL2VwbC12MTAuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZDRiMTk2Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5qb2JzL2VwbC12MTAuaHRtbApAQCAtMCwwICsxLDMyOCBAQAorPGh0bWwgeG1sbnM6bz0idXJuOnNjaGVtYXMtbWljcm9zb2Z0LWNvbTpvZmZpY2U6b2ZmaWNlIgoreG1sbnM6dz0idXJuOnNjaGVtYXMtbWljcm9zb2Z0LWNvbTpvZmZpY2U6d29yZCIKK3htbG5zPSJodHRwOi8vd3d3LnczLm9yZy9UUi9SRUMtaHRtbDQwIj4KKworPGhlYWQ+Cis8bWV0YSBodHRwLWVxdWl2PUNvbnRlbnQtVHlwZSBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9d2luZG93cy0xMjUyIj4KKzxtZXRhIG5hbWU9UHJvZ0lkIGNvbnRlbnQ9V29yZC5Eb2N1bWVudD4KKzxtZXRhIG5hbWU9R2VuZXJhdG9yIGNvbnRlbnQ9Ik1pY3Jvc29mdCBXb3JkIDkiPgorPG1ldGEgbmFtZT1PcmlnaW5hdG9yIGNvbnRlbnQ9Ik1pY3Jvc29mdCBXb3JkIDkiPgorPGxpbmsgcmVsPUZpbGUtTGlzdAoraHJlZj0iLi9FY2xpcHNlJTIwRVBMJTIwMjAwM18xMV8xMCUyMEZpbmFsX2ZpbGVzL2ZpbGVsaXN0LnhtbCI+Cis8dGl0bGU+RWNsaXBzZSBQdWJsaWMgTGljZW5zZSAtIFZlcnNpb24gMS4wPC90aXRsZT4KKzwhLS1baWYgZ3RlIG1zbyA5XT48eG1sPgorIDxvOkRvY3VtZW50UHJvcGVydGllcz4KKyAgPG86UmV2aXNpb24+MjwvbzpSZXZpc2lvbj4KKyAgPG86VG90YWxUaW1lPjM8L286VG90YWxUaW1lPgorICA8bzpDcmVhdGVkPjIwMDQtMDMtMDVUMjM6MDM6MDBaPC9vOkNyZWF0ZWQ+CisgIDxvOkxhc3RTYXZlZD4yMDA0LTAzLTA1VDIzOjAzOjAwWjwvbzpMYXN0U2F2ZWQ+CisgIDxvOlBhZ2VzPjQ8L286UGFnZXM+CisgIDxvOldvcmRzPjE2MjY8L286V29yZHM+CisgIDxvOkNoYXJhY3RlcnM+OTI3MDwvbzpDaGFyYWN0ZXJzPgorICAgPG86TGluZXM+Nzc8L286TGluZXM+CisgIDxvOlBhcmFncmFwaHM+MTg8L286UGFyYWdyYXBocz4KKyAgPG86Q2hhcmFjdGVyc1dpdGhTcGFjZXM+MTEzODQ8L286Q2hhcmFjdGVyc1dpdGhTcGFjZXM+CisgIDxvOlZlcnNpb24+OS40NDAyPC9vOlZlcnNpb24+CisgPC9vOkRvY3VtZW50UHJvcGVydGllcz4KKzwveG1sPjwhW2VuZGlmXS0tPjwhLS1baWYgZ3RlIG1zbyA5XT48eG1sPgorIDx3OldvcmREb2N1bWVudD4KKyAgPHc6VHJhY2tSZXZpc2lvbnMvPgorIDwvdzpXb3JkRG9jdW1lbnQ+Cis8L3htbD48IVtlbmRpZl0tLT4KKzxzdHlsZT4KKzwhLS0KKyAvKiBGb250IERlZmluaXRpb25zICovCitAZm9udC1mYWNlCisJe2ZvbnQtZmFtaWx5OlRhaG9tYTsKKwlwYW5vc2UtMToyIDExIDYgNCAzIDUgNCA0IDIgNDsKKwltc28tZm9udC1jaGFyc2V0OjA7CisJbXNvLWdlbmVyaWMtZm9udC1mYW1pbHk6c3dpc3M7CisJbXNvLWZvbnQtcGl0Y2g6dmFyaWFibGU7CisJbXNvLWZvbnQtc2lnbmF0dXJlOjU1MzY3OTQ5NSAtMjE0NzQ4MzY0OCA4IDAgNjYwNDcgMDt9CisgLyogU3R5bGUgRGVmaW5pdGlvbnMgKi8KK3AuTXNvTm9ybWFsLCBsaS5Nc29Ob3JtYWwsIGRpdi5Nc29Ob3JtYWwKKwl7bXNvLXN0eWxlLXBhcmVudDoiIjsKKwltYXJnaW46MGluOworCW1hcmdpbi1ib3R0b206LjAwMDFwdDsKKwltc28tcGFnaW5hdGlvbjp3aWRvdy1vcnBoYW47CisJZm9udC1zaXplOjEyLjBwdDsKKwlmb250LWZhbWlseToiVGltZXMgTmV3IFJvbWFuIjsKKwltc28tZmFyZWFzdC1mb250LWZhbWlseToiVGltZXMgTmV3IFJvbWFuIjt9CitwCisJe21hcmdpbi1yaWdodDowaW47CisJbXNvLW1hcmdpbi10b3AtYWx0OmF1dG87CisJbXNvLW1hcmdpbi1ib3R0b20tYWx0OmF1dG87CisJbWFyZ2luLWxlZnQ6MGluOworCW1zby1wYWdpbmF0aW9uOndpZG93LW9ycGhhbjsKKwlmb250LXNpemU6MTIuMHB0OworCWZvbnQtZmFtaWx5OiJUaW1lcyBOZXcgUm9tYW4iOworCW1zby1mYXJlYXN0LWZvbnQtZmFtaWx5OiJUaW1lcyBOZXcgUm9tYW4iO30KK3AuQmFsbG9vblRleHQsIGxpLkJhbGxvb25UZXh0LCBkaXYuQmFsbG9vblRleHQKKwl7bXNvLXN0eWxlLW5hbWU6IkJhbGxvb24gVGV4dCI7CisJbWFyZ2luOjBpbjsKKwltYXJnaW4tYm90dG9tOi4wMDAxcHQ7CisJbXNvLXBhZ2luYXRpb246d2lkb3ctb3JwaGFuOworCWZvbnQtc2l6ZTo4LjBwdDsKKwlmb250LWZhbWlseTpUYWhvbWE7CisJbXNvLWZhcmVhc3QtZm9udC1mYW1pbHk6IlRpbWVzIE5ldyBSb21hbiI7fQorQHBhZ2UgU2VjdGlvbjEKKwl7c2l6ZTo4LjVpbiAxMS4waW47CisJbWFyZ2luOjEuMGluIDEuMjVpbiAxLjBpbiAxLjI1aW47CisJbXNvLWhlYWRlci1tYXJnaW46LjVpbjsKKwltc28tZm9vdGVyLW1hcmdpbjouNWluOworCW1zby1wYXBlci1zb3VyY2U6MDt9CitkaXYuU2VjdGlvbjEKKwl7cGFnZTpTZWN0aW9uMTt9CistLT4KKzwvc3R5bGU+Cis8L2hlYWQ+CisKKzxib2R5IGxhbmc9RU4tVVMgc3R5bGU9J3RhYi1pbnRlcnZhbDouNWluJz4KKworPGRpdiBjbGFzcz1TZWN0aW9uMT4KKworPHAgYWxpZ249Y2VudGVyIHN0eWxlPSd0ZXh0LWFsaWduOmNlbnRlcic+PGI+RWNsaXBzZSBQdWJsaWMgTGljZW5zZSAtIHYgMS4wPC9iPgorPC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+VEhFIEFDQ09NUEFOWUlORyBQUk9HUkFNIElTIFBST1ZJREVEIFVOREVSCitUSEUgVEVSTVMgT0YgVEhJUyBFQ0xJUFNFIFBVQkxJQyBMSUNFTlNFICgmcXVvdDtBR1JFRU1FTlQmcXVvdDspLiBBTlkgVVNFLAorUkVQUk9EVUNUSU9OIE9SIERJU1RSSUJVVElPTiBPRiBUSEUgUFJPR1JBTSBDT05TVElUVVRFUyBSRUNJUElFTlQnUyBBQ0NFUFRBTkNFCitPRiBUSElTIEFHUkVFTUVOVC48L3NwYW4+IDwvcD4KKworPHA+PGI+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPjEuIERFRklOSVRJT05TPC9zcGFuPjwvYj4gPC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+JnF1b3Q7Q29udHJpYnV0aW9uJnF1b3Q7IG1lYW5zOjwvc3Bhbj4gPC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5hKQoraW4gdGhlIGNhc2Ugb2YgdGhlIGluaXRpYWwgQ29udHJpYnV0b3IsIHRoZSBpbml0aWFsIGNvZGUgYW5kIGRvY3VtZW50YXRpb24KK2Rpc3RyaWJ1dGVkIHVuZGVyIHRoaXMgQWdyZWVtZW50LCBhbmQ8YnIgY2xlYXI9bGVmdD4KK2IpIGluIHRoZSBjYXNlIG9mIGVhY2ggc3Vic2VxdWVudCBDb250cmlidXRvcjo8L3NwYW4+PC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5pKQorY2hhbmdlcyB0byB0aGUgUHJvZ3JhbSwgYW5kPC9zcGFuPjwvcD4KKworPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+aWkpCithZGRpdGlvbnMgdG8gdGhlIFByb2dyYW07PC9zcGFuPjwvcD4KKworPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+d2hlcmUKK3N1Y2ggY2hhbmdlcyBhbmQvb3IgYWRkaXRpb25zIHRvIHRoZSBQcm9ncmFtIG9yaWdpbmF0ZSBmcm9tIGFuZCBhcmUgZGlzdHJpYnV0ZWQKK2J5IHRoYXQgcGFydGljdWxhciBDb250cmlidXRvci4gQSBDb250cmlidXRpb24gJ29yaWdpbmF0ZXMnIGZyb20gYSBDb250cmlidXRvcgoraWYgaXQgd2FzIGFkZGVkIHRvIHRoZSBQcm9ncmFtIGJ5IHN1Y2ggQ29udHJpYnV0b3IgaXRzZWxmIG9yIGFueW9uZSBhY3Rpbmcgb24KK3N1Y2ggQ29udHJpYnV0b3IncyBiZWhhbGYuIENvbnRyaWJ1dGlvbnMgZG8gbm90IGluY2x1ZGUgYWRkaXRpb25zIHRvIHRoZQorUHJvZ3JhbSB3aGljaDogKGkpIGFyZSBzZXBhcmF0ZSBtb2R1bGVzIG9mIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIGluIGNvbmp1bmN0aW9uCit3aXRoIHRoZSBQcm9ncmFtIHVuZGVyIHRoZWlyIG93biBsaWNlbnNlIGFncmVlbWVudCwgYW5kIChpaSkgYXJlIG5vdCBkZXJpdmF0aXZlCit3b3JrcyBvZiB0aGUgUHJvZ3JhbS4gPC9zcGFuPjwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPiZxdW90O0NvbnRyaWJ1dG9yJnF1b3Q7IG1lYW5zIGFueSBwZXJzb24gb3IKK2VudGl0eSB0aGF0IGRpc3RyaWJ1dGVzIHRoZSBQcm9ncmFtLjwvc3Bhbj4gPC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+JnF1b3Q7TGljZW5zZWQgUGF0ZW50cyAmcXVvdDsgbWVhbiBwYXRlbnQKK2NsYWltcyBsaWNlbnNhYmxlIGJ5IGEgQ29udHJpYnV0b3Igd2hpY2ggYXJlIG5lY2Vzc2FyaWx5IGluZnJpbmdlZCBieSB0aGUgdXNlCitvciBzYWxlIG9mIGl0cyBDb250cmlidXRpb24gYWxvbmUgb3Igd2hlbiBjb21iaW5lZCB3aXRoIHRoZSBQcm9ncmFtLiA8L3NwYW4+PC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+JnF1b3Q7UHJvZ3JhbSZxdW90OyBtZWFucyB0aGUgQ29udHJpYnV0aW9ucworZGlzdHJpYnV0ZWQgaW4gYWNjb3JkYW5jZSB3aXRoIHRoaXMgQWdyZWVtZW50Ljwvc3Bhbj4gPC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+JnF1b3Q7UmVjaXBpZW50JnF1b3Q7IG1lYW5zIGFueW9uZSB3aG8KK3JlY2VpdmVzIHRoZSBQcm9ncmFtIHVuZGVyIHRoaXMgQWdyZWVtZW50LCBpbmNsdWRpbmcgYWxsIENvbnRyaWJ1dG9ycy48L3NwYW4+IDwvcD4KKworPHA+PGI+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPjIuIEdSQU5UIE9GIFJJR0hUUzwvc3Bhbj48L2I+IDwvcD4KKworPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YSkKK1N1YmplY3QgdG8gdGhlIHRlcm1zIG9mIHRoaXMgQWdyZWVtZW50LCBlYWNoIENvbnRyaWJ1dG9yIGhlcmVieSBncmFudHMgUmVjaXBpZW50CithIG5vbi1leGNsdXNpdmUsIHdvcmxkd2lkZSwgcm95YWx0eS1mcmVlIGNvcHlyaWdodCBsaWNlbnNlIHRvPHNwYW4KK3N0eWxlPSdjb2xvcjpyZWQnPiA8L3NwYW4+cmVwcm9kdWNlLCBwcmVwYXJlIGRlcml2YXRpdmUgd29ya3Mgb2YsIHB1YmxpY2x5CitkaXNwbGF5LCBwdWJsaWNseSBwZXJmb3JtLCBkaXN0cmlidXRlIGFuZCBzdWJsaWNlbnNlIHRoZSBDb250cmlidXRpb24gb2Ygc3VjaAorQ29udHJpYnV0b3IsIGlmIGFueSwgYW5kIHN1Y2ggZGVyaXZhdGl2ZSB3b3JrcywgaW4gc291cmNlIGNvZGUgYW5kIG9iamVjdCBjb2RlCitmb3JtLjwvc3Bhbj48L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmIpCitTdWJqZWN0IHRvIHRoZSB0ZXJtcyBvZiB0aGlzIEFncmVlbWVudCwgZWFjaCBDb250cmlidXRvciBoZXJlYnkgZ3JhbnRzCitSZWNpcGllbnQgYSBub24tZXhjbHVzaXZlLCB3b3JsZHdpZGUsPHNwYW4gc3R5bGU9J2NvbG9yOmdyZWVuJz4gPC9zcGFuPnJveWFsdHktZnJlZQorcGF0ZW50IGxpY2Vuc2UgdW5kZXIgTGljZW5zZWQgUGF0ZW50cyB0byBtYWtlLCB1c2UsIHNlbGwsIG9mZmVyIHRvIHNlbGwsIGltcG9ydAorYW5kIG90aGVyd2lzZSB0cmFuc2ZlciB0aGUgQ29udHJpYnV0aW9uIG9mIHN1Y2ggQ29udHJpYnV0b3IsIGlmIGFueSwgaW4gc291cmNlCitjb2RlIGFuZCBvYmplY3QgY29kZSBmb3JtLiBUaGlzIHBhdGVudCBsaWNlbnNlIHNoYWxsIGFwcGx5IHRvIHRoZSBjb21iaW5hdGlvbgorb2YgdGhlIENvbnRyaWJ1dGlvbiBhbmQgdGhlIFByb2dyYW0gaWYsIGF0IHRoZSB0aW1lIHRoZSBDb250cmlidXRpb24gaXMgYWRkZWQKK2J5IHRoZSBDb250cmlidXRvciwgc3VjaCBhZGRpdGlvbiBvZiB0aGUgQ29udHJpYnV0aW9uIGNhdXNlcyBzdWNoIGNvbWJpbmF0aW9uCit0byBiZSBjb3ZlcmVkIGJ5IHRoZSBMaWNlbnNlZCBQYXRlbnRzLiBUaGUgcGF0ZW50IGxpY2Vuc2Ugc2hhbGwgbm90IGFwcGx5IHRvCithbnkgb3RoZXIgY29tYmluYXRpb25zIHdoaWNoIGluY2x1ZGUgdGhlIENvbnRyaWJ1dGlvbi4gTm8gaGFyZHdhcmUgcGVyIHNlIGlzCitsaWNlbnNlZCBoZXJldW5kZXIuIDwvc3Bhbj48L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmMpCitSZWNpcGllbnQgdW5kZXJzdGFuZHMgdGhhdCBhbHRob3VnaCBlYWNoIENvbnRyaWJ1dG9yIGdyYW50cyB0aGUgbGljZW5zZXMgdG8gaXRzCitDb250cmlidXRpb25zIHNldCBmb3J0aCBoZXJlaW4sIG5vIGFzc3VyYW5jZXMgYXJlIHByb3ZpZGVkIGJ5IGFueSBDb250cmlidXRvcgordGhhdCB0aGUgUHJvZ3JhbSBkb2VzIG5vdCBpbmZyaW5nZSB0aGUgcGF0ZW50IG9yIG90aGVyIGludGVsbGVjdHVhbCBwcm9wZXJ0eQorcmlnaHRzIG9mIGFueSBvdGhlciBlbnRpdHkuIEVhY2ggQ29udHJpYnV0b3IgZGlzY2xhaW1zIGFueSBsaWFiaWxpdHkgdG8gUmVjaXBpZW50Citmb3IgY2xhaW1zIGJyb3VnaHQgYnkgYW55IG90aGVyIGVudGl0eSBiYXNlZCBvbiBpbmZyaW5nZW1lbnQgb2YgaW50ZWxsZWN0dWFsCitwcm9wZXJ0eSByaWdodHMgb3Igb3RoZXJ3aXNlLiBBcyBhIGNvbmRpdGlvbiB0byBleGVyY2lzaW5nIHRoZSByaWdodHMgYW5kCitsaWNlbnNlcyBncmFudGVkIGhlcmV1bmRlciwgZWFjaCBSZWNpcGllbnQgaGVyZWJ5IGFzc3VtZXMgc29sZSByZXNwb25zaWJpbGl0eQordG8gc2VjdXJlIGFueSBvdGhlciBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIG5lZWRlZCwgaWYgYW55LiBGb3IgZXhhbXBsZSwKK2lmIGEgdGhpcmQgcGFydHkgcGF0ZW50IGxpY2Vuc2UgaXMgcmVxdWlyZWQgdG8gYWxsb3cgUmVjaXBpZW50IHRvIGRpc3RyaWJ1dGUKK3RoZSBQcm9ncmFtLCBpdCBpcyBSZWNpcGllbnQncyByZXNwb25zaWJpbGl0eSB0byBhY3F1aXJlIHRoYXQgbGljZW5zZSBiZWZvcmUKK2Rpc3RyaWJ1dGluZyB0aGUgUHJvZ3JhbS48L3NwYW4+PC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5kKQorRWFjaCBDb250cmlidXRvciByZXByZXNlbnRzIHRoYXQgdG8gaXRzIGtub3dsZWRnZSBpdCBoYXMgc3VmZmljaWVudCBjb3B5cmlnaHQKK3JpZ2h0cyBpbiBpdHMgQ29udHJpYnV0aW9uLCBpZiBhbnksIHRvIGdyYW50IHRoZSBjb3B5cmlnaHQgbGljZW5zZSBzZXQgZm9ydGggaW4KK3RoaXMgQWdyZWVtZW50LiA8L3NwYW4+PC9wPgorCis8cD48Yj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+My4gUkVRVUlSRU1FTlRTPC9zcGFuPjwvYj4gPC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+QSBDb250cmlidXRvciBtYXkgY2hvb3NlIHRvIGRpc3RyaWJ1dGUgdGhlCitQcm9ncmFtIGluIG9iamVjdCBjb2RlIGZvcm0gdW5kZXIgaXRzIG93biBsaWNlbnNlIGFncmVlbWVudCwgcHJvdmlkZWQgdGhhdDo8L3NwYW4+Cis8L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmEpCitpdCBjb21wbGllcyB3aXRoIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGlzIEFncmVlbWVudDsgYW5kPC9zcGFuPjwvcD4KKworPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YikKK2l0cyBsaWNlbnNlIGFncmVlbWVudDo8L3NwYW4+PC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5pKQorZWZmZWN0aXZlbHkgZGlzY2xhaW1zIG9uIGJlaGFsZiBvZiBhbGwgQ29udHJpYnV0b3JzIGFsbCB3YXJyYW50aWVzIGFuZAorY29uZGl0aW9ucywgZXhwcmVzcyBhbmQgaW1wbGllZCwgaW5jbHVkaW5nIHdhcnJhbnRpZXMgb3IgY29uZGl0aW9ucyBvZiB0aXRsZQorYW5kIG5vbi1pbmZyaW5nZW1lbnQsIGFuZCBpbXBsaWVkIHdhcnJhbnRpZXMgb3IgY29uZGl0aW9ucyBvZiBtZXJjaGFudGFiaWxpdHkKK2FuZCBmaXRuZXNzIGZvciBhIHBhcnRpY3VsYXIgcHVycG9zZTsgPC9zcGFuPjwvcD4KKworPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+aWkpCitlZmZlY3RpdmVseSBleGNsdWRlcyBvbiBiZWhhbGYgb2YgYWxsIENvbnRyaWJ1dG9ycyBhbGwgbGlhYmlsaXR5IGZvciBkYW1hZ2VzLAoraW5jbHVkaW5nIGRpcmVjdCwgaW5kaXJlY3QsIHNwZWNpYWwsIGluY2lkZW50YWwgYW5kIGNvbnNlcXVlbnRpYWwgZGFtYWdlcywgc3VjaAorYXMgbG9zdCBwcm9maXRzOyA8L3NwYW4+PC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5paWkpCitzdGF0ZXMgdGhhdCBhbnkgcHJvdmlzaW9ucyB3aGljaCBkaWZmZXIgZnJvbSB0aGlzIEFncmVlbWVudCBhcmUgb2ZmZXJlZCBieSB0aGF0CitDb250cmlidXRvciBhbG9uZSBhbmQgbm90IGJ5IGFueSBvdGhlciBwYXJ0eTsgYW5kPC9zcGFuPjwvcD4KKworPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+aXYpCitzdGF0ZXMgdGhhdCBzb3VyY2UgY29kZSBmb3IgdGhlIFByb2dyYW0gaXMgYXZhaWxhYmxlIGZyb20gc3VjaCBDb250cmlidXRvciwgYW5kCitpbmZvcm1zIGxpY2Vuc2VlcyBob3cgdG8gb2J0YWluIGl0IGluIGEgcmVhc29uYWJsZSBtYW5uZXIgb24gb3IgdGhyb3VnaCBhCittZWRpdW0gY3VzdG9tYXJpbHkgdXNlZCBmb3Igc29mdHdhcmUgZXhjaGFuZ2UuPHNwYW4gc3R5bGU9J2NvbG9yOmJsdWUnPiA8L3NwYW4+PC9zcGFuPjwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPldoZW4gdGhlIFByb2dyYW0gaXMgbWFkZSBhdmFpbGFibGUgaW4gc291cmNlCitjb2RlIGZvcm06PC9zcGFuPiA8L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmEpCitpdCBtdXN0IGJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoaXMgQWdyZWVtZW50OyBhbmQgPC9zcGFuPjwvcD4KKworPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YikgYQorY29weSBvZiB0aGlzIEFncmVlbWVudCBtdXN0IGJlIGluY2x1ZGVkIHdpdGggZWFjaCBjb3B5IG9mIHRoZSBQcm9ncmFtLiA8L3NwYW4+PC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+Q29udHJpYnV0b3JzIG1heSBub3QgcmVtb3ZlIG9yIGFsdGVyIGFueQorY29weXJpZ2h0IG5vdGljZXMgY29udGFpbmVkIHdpdGhpbiB0aGUgUHJvZ3JhbS4gPC9zcGFuPjwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkVhY2ggQ29udHJpYnV0b3IgbXVzdCBpZGVudGlmeSBpdHNlbGYgYXMgdGhlCitvcmlnaW5hdG9yIG9mIGl0cyBDb250cmlidXRpb24sIGlmIGFueSwgaW4gYSBtYW5uZXIgdGhhdCByZWFzb25hYmx5IGFsbG93cworc3Vic2VxdWVudCBSZWNpcGllbnRzIHRvIGlkZW50aWZ5IHRoZSBvcmlnaW5hdG9yIG9mIHRoZSBDb250cmlidXRpb24uIDwvc3Bhbj48L3A+CisKKzxwPjxiPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz40LiBDT01NRVJDSUFMIERJU1RSSUJVVElPTjwvc3Bhbj48L2I+IDwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkNvbW1lcmNpYWwgZGlzdHJpYnV0b3JzIG9mIHNvZnR3YXJlIG1heQorYWNjZXB0IGNlcnRhaW4gcmVzcG9uc2liaWxpdGllcyB3aXRoIHJlc3BlY3QgdG8gZW5kIHVzZXJzLCBidXNpbmVzcyBwYXJ0bmVycworYW5kIHRoZSBsaWtlLiBXaGlsZSB0aGlzIGxpY2Vuc2UgaXMgaW50ZW5kZWQgdG8gZmFjaWxpdGF0ZSB0aGUgY29tbWVyY2lhbCB1c2UKK29mIHRoZSBQcm9ncmFtLCB0aGUgQ29udHJpYnV0b3Igd2hvIGluY2x1ZGVzIHRoZSBQcm9ncmFtIGluIGEgY29tbWVyY2lhbAorcHJvZHVjdCBvZmZlcmluZyBzaG91bGQgZG8gc28gaW4gYSBtYW5uZXIgd2hpY2ggZG9lcyBub3QgY3JlYXRlIHBvdGVudGlhbAorbGlhYmlsaXR5IGZvciBvdGhlciBDb250cmlidXRvcnMuIFRoZXJlZm9yZSwgaWYgYSBDb250cmlidXRvciBpbmNsdWRlcyB0aGUKK1Byb2dyYW0gaW4gYSBjb21tZXJjaWFsIHByb2R1Y3Qgb2ZmZXJpbmcsIHN1Y2ggQ29udHJpYnV0b3IgKCZxdW90O0NvbW1lcmNpYWwKK0NvbnRyaWJ1dG9yJnF1b3Q7KSBoZXJlYnkgYWdyZWVzIHRvIGRlZmVuZCBhbmQgaW5kZW1uaWZ5IGV2ZXJ5IG90aGVyCitDb250cmlidXRvciAoJnF1b3Q7SW5kZW1uaWZpZWQgQ29udHJpYnV0b3ImcXVvdDspIGFnYWluc3QgYW55IGxvc3NlcywgZGFtYWdlcyBhbmQKK2Nvc3RzIChjb2xsZWN0aXZlbHkgJnF1b3Q7TG9zc2VzJnF1b3Q7KSBhcmlzaW5nIGZyb20gY2xhaW1zLCBsYXdzdWl0cyBhbmQgb3RoZXIKK2xlZ2FsIGFjdGlvbnMgYnJvdWdodCBieSBhIHRoaXJkIHBhcnR5IGFnYWluc3QgdGhlIEluZGVtbmlmaWVkIENvbnRyaWJ1dG9yIHRvCit0aGUgZXh0ZW50IGNhdXNlZCBieSB0aGUgYWN0cyBvciBvbWlzc2lvbnMgb2Ygc3VjaCBDb21tZXJjaWFsIENvbnRyaWJ1dG9yIGluCitjb25uZWN0aW9uIHdpdGggaXRzIGRpc3RyaWJ1dGlvbiBvZiB0aGUgUHJvZ3JhbSBpbiBhIGNvbW1lcmNpYWwgcHJvZHVjdAorb2ZmZXJpbmcuIFRoZSBvYmxpZ2F0aW9ucyBpbiB0aGlzIHNlY3Rpb24gZG8gbm90IGFwcGx5IHRvIGFueSBjbGFpbXMgb3IgTG9zc2VzCityZWxhdGluZyB0byBhbnkgYWN0dWFsIG9yIGFsbGVnZWQgaW50ZWxsZWN0dWFsIHByb3BlcnR5IGluZnJpbmdlbWVudC4gSW4gb3JkZXIKK3RvIHF1YWxpZnksIGFuIEluZGVtbmlmaWVkIENvbnRyaWJ1dG9yIG11c3Q6IGEpIHByb21wdGx5IG5vdGlmeSB0aGUgQ29tbWVyY2lhbAorQ29udHJpYnV0b3IgaW4gd3JpdGluZyBvZiBzdWNoIGNsYWltLCBhbmQgYikgYWxsb3cgdGhlIENvbW1lcmNpYWwgQ29udHJpYnV0b3IKK3RvIGNvbnRyb2wsIGFuZCBjb29wZXJhdGUgd2l0aCB0aGUgQ29tbWVyY2lhbCBDb250cmlidXRvciBpbiwgdGhlIGRlZmVuc2UgYW5kCithbnkgcmVsYXRlZCBzZXR0bGVtZW50IG5lZ290aWF0aW9ucy4gVGhlIEluZGVtbmlmaWVkIENvbnRyaWJ1dG9yIG1heSBwYXJ0aWNpcGF0ZQoraW4gYW55IHN1Y2ggY2xhaW0gYXQgaXRzIG93biBleHBlbnNlLjwvc3Bhbj4gPC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+Rm9yIGV4YW1wbGUsIGEgQ29udHJpYnV0b3IgbWlnaHQgaW5jbHVkZSB0aGUKK1Byb2dyYW0gaW4gYSBjb21tZXJjaWFsIHByb2R1Y3Qgb2ZmZXJpbmcsIFByb2R1Y3QgWC4gVGhhdCBDb250cmlidXRvciBpcyB0aGVuIGEKK0NvbW1lcmNpYWwgQ29udHJpYnV0b3IuIElmIHRoYXQgQ29tbWVyY2lhbCBDb250cmlidXRvciB0aGVuIG1ha2VzIHBlcmZvcm1hbmNlCitjbGFpbXMsIG9yIG9mZmVycyB3YXJyYW50aWVzIHJlbGF0ZWQgdG8gUHJvZHVjdCBYLCB0aG9zZSBwZXJmb3JtYW5jZSBjbGFpbXMgYW5kCit3YXJyYW50aWVzIGFyZSBzdWNoIENvbW1lcmNpYWwgQ29udHJpYnV0b3IncyByZXNwb25zaWJpbGl0eSBhbG9uZS4gVW5kZXIgdGhpcworc2VjdGlvbiwgdGhlIENvbW1lcmNpYWwgQ29udHJpYnV0b3Igd291bGQgaGF2ZSB0byBkZWZlbmQgY2xhaW1zIGFnYWluc3QgdGhlCitvdGhlciBDb250cmlidXRvcnMgcmVsYXRlZCB0byB0aG9zZSBwZXJmb3JtYW5jZSBjbGFpbXMgYW5kIHdhcnJhbnRpZXMsIGFuZCBpZiBhCitjb3VydCByZXF1aXJlcyBhbnkgb3RoZXIgQ29udHJpYnV0b3IgdG8gcGF5IGFueSBkYW1hZ2VzIGFzIGEgcmVzdWx0LCB0aGUKK0NvbW1lcmNpYWwgQ29udHJpYnV0b3IgbXVzdCBwYXkgdGhvc2UgZGFtYWdlcy48L3NwYW4+IDwvcD4KKworPHA+PGI+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPjUuIE5PIFdBUlJBTlRZPC9zcGFuPjwvYj4gPC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+RVhDRVBUIEFTIEVYUFJFU1NMWSBTRVQgRk9SVEggSU4gVEhJUworQUdSRUVNRU5ULCBUSEUgUFJPR1JBTSBJUyBQUk9WSURFRCBPTiBBTiAmcXVvdDtBUyBJUyZxdW90OyBCQVNJUywgV0lUSE9VVAorV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBFSVRIRVIgRVhQUkVTUyBPUiBJTVBMSUVEIElOQ0xVRElORywKK1dJVEhPVVQgTElNSVRBVElPTiwgQU5ZIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBUSVRMRSwgTk9OLUlORlJJTkdFTUVOVCwKK01FUkNIQU5UQUJJTElUWSBPUiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gRWFjaCBSZWNpcGllbnQgaXMgc29sZWx5CityZXNwb25zaWJsZSBmb3IgZGV0ZXJtaW5pbmcgdGhlIGFwcHJvcHJpYXRlbmVzcyBvZiB1c2luZyBhbmQgZGlzdHJpYnV0aW5nIHRoZQorUHJvZ3JhbSBhbmQgYXNzdW1lcyBhbGwgcmlza3MgYXNzb2NpYXRlZCB3aXRoIGl0cyBleGVyY2lzZSBvZiByaWdodHMgdW5kZXIgdGhpcworQWdyZWVtZW50ICwgaW5jbHVkaW5nIGJ1dCBub3QgbGltaXRlZCB0byB0aGUgcmlza3MgYW5kIGNvc3RzIG9mIHByb2dyYW0gZXJyb3JzLAorY29tcGxpYW5jZSB3aXRoIGFwcGxpY2FibGUgbGF3cywgZGFtYWdlIHRvIG9yIGxvc3Mgb2YgZGF0YSwgcHJvZ3JhbXMgb3IKK2VxdWlwbWVudCwgYW5kIHVuYXZhaWxhYmlsaXR5IG9yIGludGVycnVwdGlvbiBvZiBvcGVyYXRpb25zLiA8L3NwYW4+PC9wPgorCis8cD48Yj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+Ni4gRElTQ0xBSU1FUiBPRiBMSUFCSUxJVFk8L3NwYW4+PC9iPiA8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5FWENFUFQgQVMgRVhQUkVTU0xZIFNFVCBGT1JUSCBJTiBUSElTCitBR1JFRU1FTlQsIE5FSVRIRVIgUkVDSVBJRU5UIE5PUiBBTlkgQ09OVFJJQlVUT1JTIFNIQUxMIEhBVkUgQU5ZIExJQUJJTElUWSBGT1IKK0FOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworKElOQ0xVRElORyBXSVRIT1VUIExJTUlUQVRJT04gTE9TVCBQUk9GSVRTKSwgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKK09GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HCitORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9SIERJU1RSSUJVVElPTiBPRgorVEhFIFBST0dSQU0gT1IgVEhFIEVYRVJDSVNFIE9GIEFOWSBSSUdIVFMgR1JBTlRFRCBIRVJFVU5ERVIsIEVWRU4gSUYgQURWSVNFRCBPRgorVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFUy48L3NwYW4+IDwvcD4KKworPHA+PGI+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPjcuIEdFTkVSQUw8L3NwYW4+PC9iPiA8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5JZiBhbnkgcHJvdmlzaW9uIG9mIHRoaXMgQWdyZWVtZW50IGlzIGludmFsaWQKK29yIHVuZW5mb3JjZWFibGUgdW5kZXIgYXBwbGljYWJsZSBsYXcsIGl0IHNoYWxsIG5vdCBhZmZlY3QgdGhlIHZhbGlkaXR5IG9yCitlbmZvcmNlYWJpbGl0eSBvZiB0aGUgcmVtYWluZGVyIG9mIHRoZSB0ZXJtcyBvZiB0aGlzIEFncmVlbWVudCwgYW5kIHdpdGhvdXQKK2Z1cnRoZXIgYWN0aW9uIGJ5IHRoZSBwYXJ0aWVzIGhlcmV0bywgc3VjaCBwcm92aXNpb24gc2hhbGwgYmUgcmVmb3JtZWQgdG8gdGhlCittaW5pbXVtIGV4dGVudCBuZWNlc3NhcnkgdG8gbWFrZSBzdWNoIHByb3Zpc2lvbiB2YWxpZCBhbmQgZW5mb3JjZWFibGUuPC9zcGFuPiA8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5JZiBSZWNpcGllbnQgaW5zdGl0dXRlcyBwYXRlbnQgbGl0aWdhdGlvbgorYWdhaW5zdCBhbnkgZW50aXR5IChpbmNsdWRpbmcgYSBjcm9zcy1jbGFpbSBvciBjb3VudGVyY2xhaW0gaW4gYSBsYXdzdWl0KQorYWxsZWdpbmcgdGhhdCB0aGUgUHJvZ3JhbSBpdHNlbGYgKGV4Y2x1ZGluZyBjb21iaW5hdGlvbnMgb2YgdGhlIFByb2dyYW0gd2l0aAorb3RoZXIgc29mdHdhcmUgb3IgaGFyZHdhcmUpIGluZnJpbmdlcyBzdWNoIFJlY2lwaWVudCdzIHBhdGVudChzKSwgdGhlbiBzdWNoCitSZWNpcGllbnQncyByaWdodHMgZ3JhbnRlZCB1bmRlciBTZWN0aW9uIDIoYikgc2hhbGwgdGVybWluYXRlIGFzIG9mIHRoZSBkYXRlCitzdWNoIGxpdGlnYXRpb24gaXMgZmlsZWQuIDwvc3Bhbj48L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5BbGwgUmVjaXBpZW50J3MgcmlnaHRzIHVuZGVyIHRoaXMgQWdyZWVtZW50CitzaGFsbCB0ZXJtaW5hdGUgaWYgaXQgZmFpbHMgdG8gY29tcGx5IHdpdGggYW55IG9mIHRoZSBtYXRlcmlhbCB0ZXJtcyBvcgorY29uZGl0aW9ucyBvZiB0aGlzIEFncmVlbWVudCBhbmQgZG9lcyBub3QgY3VyZSBzdWNoIGZhaWx1cmUgaW4gYSByZWFzb25hYmxlCitwZXJpb2Qgb2YgdGltZSBhZnRlciBiZWNvbWluZyBhd2FyZSBvZiBzdWNoIG5vbmNvbXBsaWFuY2UuIElmIGFsbCBSZWNpcGllbnQncworcmlnaHRzIHVuZGVyIHRoaXMgQWdyZWVtZW50IHRlcm1pbmF0ZSwgUmVjaXBpZW50IGFncmVlcyB0byBjZWFzZSB1c2UgYW5kCitkaXN0cmlidXRpb24gb2YgdGhlIFByb2dyYW0gYXMgc29vbiBhcyByZWFzb25hYmx5IHByYWN0aWNhYmxlLiBIb3dldmVyLAorUmVjaXBpZW50J3Mgb2JsaWdhdGlvbnMgdW5kZXIgdGhpcyBBZ3JlZW1lbnQgYW5kIGFueSBsaWNlbnNlcyBncmFudGVkIGJ5CitSZWNpcGllbnQgcmVsYXRpbmcgdG8gdGhlIFByb2dyYW0gc2hhbGwgY29udGludWUgYW5kIHN1cnZpdmUuIDwvc3Bhbj48L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5FdmVyeW9uZSBpcyBwZXJtaXR0ZWQgdG8gY29weSBhbmQgZGlzdHJpYnV0ZQorY29waWVzIG9mIHRoaXMgQWdyZWVtZW50LCBidXQgaW4gb3JkZXIgdG8gYXZvaWQgaW5jb25zaXN0ZW5jeSB0aGUgQWdyZWVtZW50IGlzCitjb3B5cmlnaHRlZCBhbmQgbWF5IG9ubHkgYmUgbW9kaWZpZWQgaW4gdGhlIGZvbGxvd2luZyBtYW5uZXIuIFRoZSBBZ3JlZW1lbnQKK1N0ZXdhcmQgcmVzZXJ2ZXMgdGhlIHJpZ2h0IHRvIHB1Ymxpc2ggbmV3IHZlcnNpb25zIChpbmNsdWRpbmcgcmV2aXNpb25zKSBvZgordGhpcyBBZ3JlZW1lbnQgZnJvbSB0aW1lIHRvIHRpbWUuIE5vIG9uZSBvdGhlciB0aGFuIHRoZSBBZ3JlZW1lbnQgU3Rld2FyZCBoYXMKK3RoZSByaWdodCB0byBtb2RpZnkgdGhpcyBBZ3JlZW1lbnQuIFRoZSBFY2xpcHNlIEZvdW5kYXRpb24gaXMgdGhlIGluaXRpYWwKK0FncmVlbWVudCBTdGV3YXJkLiBUaGUgRWNsaXBzZSBGb3VuZGF0aW9uIG1heSBhc3NpZ24gdGhlIHJlc3BvbnNpYmlsaXR5IHRvCitzZXJ2ZSBhcyB0aGUgQWdyZWVtZW50IFN0ZXdhcmQgdG8gYSBzdWl0YWJsZSBzZXBhcmF0ZSBlbnRpdHkuIEVhY2ggbmV3IHZlcnNpb24KK29mIHRoZSBBZ3JlZW1lbnQgd2lsbCBiZSBnaXZlbiBhIGRpc3Rpbmd1aXNoaW5nIHZlcnNpb24gbnVtYmVyLiBUaGUgUHJvZ3JhbQorKGluY2x1ZGluZyBDb250cmlidXRpb25zKSBtYXkgYWx3YXlzIGJlIGRpc3RyaWJ1dGVkIHN1YmplY3QgdG8gdGhlIHZlcnNpb24gb2YKK3RoZSBBZ3JlZW1lbnQgdW5kZXIgd2hpY2ggaXQgd2FzIHJlY2VpdmVkLiBJbiBhZGRpdGlvbiwgYWZ0ZXIgYSBuZXcgdmVyc2lvbiBvZgordGhlIEFncmVlbWVudCBpcyBwdWJsaXNoZWQsIENvbnRyaWJ1dG9yIG1heSBlbGVjdCB0byBkaXN0cmlidXRlIHRoZSBQcm9ncmFtCisoaW5jbHVkaW5nIGl0cyBDb250cmlidXRpb25zKSB1bmRlciB0aGUgbmV3IHZlcnNpb24uIEV4Y2VwdCBhcyBleHByZXNzbHkgc3RhdGVkCitpbiBTZWN0aW9ucyAyKGEpIGFuZCAyKGIpIGFib3ZlLCBSZWNpcGllbnQgcmVjZWl2ZXMgbm8gcmlnaHRzIG9yIGxpY2Vuc2VzIHRvCit0aGUgaW50ZWxsZWN0dWFsIHByb3BlcnR5IG9mIGFueSBDb250cmlidXRvciB1bmRlciB0aGlzIEFncmVlbWVudCwgd2hldGhlcgorZXhwcmVzc2x5LCBieSBpbXBsaWNhdGlvbiwgZXN0b3BwZWwgb3Igb3RoZXJ3aXNlLiBBbGwgcmlnaHRzIGluIHRoZSBQcm9ncmFtIG5vdAorZXhwcmVzc2x5IGdyYW50ZWQgdW5kZXIgdGhpcyBBZ3JlZW1lbnQgYXJlIHJlc2VydmVkLjwvc3Bhbj4gPC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+VGhpcyBBZ3JlZW1lbnQgaXMgZ292ZXJuZWQgYnkgdGhlIGxhd3Mgb2YgdGhlCitTdGF0ZSBvZiBOZXcgWW9yayBhbmQgdGhlIGludGVsbGVjdHVhbCBwcm9wZXJ0eSBsYXdzIG9mIHRoZSBVbml0ZWQgU3RhdGVzIG9mCitBbWVyaWNhLiBObyBwYXJ0eSB0byB0aGlzIEFncmVlbWVudCB3aWxsIGJyaW5nIGEgbGVnYWwgYWN0aW9uIHVuZGVyIHRoaXMKK0FncmVlbWVudCBtb3JlIHRoYW4gb25lIHllYXIgYWZ0ZXIgdGhlIGNhdXNlIG9mIGFjdGlvbiBhcm9zZS4gRWFjaCBwYXJ0eSB3YWl2ZXMKK2l0cyByaWdodHMgdG8gYSBqdXJ5IHRyaWFsIGluIGFueSByZXN1bHRpbmcgbGl0aWdhdGlvbi48L3NwYW4+IDwvcD4KKworPHAgY2xhc3M9TXNvTm9ybWFsPjwhW2lmICFzdXBwb3J0RW1wdHlQYXJhc10+Jm5ic3A7PCFbZW5kaWZdPjxvOnA+PC9vOnA+PC9wPgorCis8L2Rpdj4KKworPC9ib2R5PgorCis8L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5qb2JzL25vdGljZS5odG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5qb2JzL25vdGljZS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM2YWY5NjYKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmpvYnMvbm90aWNlLmh0bWwKQEAgLTAsMCArMSw3OSBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMC8vRU4iPgorPGh0bWw+Cis8aGVhZD4KKzxtZXRhIGh0dHAtZXF1aXY9Q29udGVudC1UeXBlIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1pc28tODg1OS0xIj4KKzx0aXRsZT5FY2xpcHNlLm9yZyBTb2Z0d2FyZSBVc2VyIEFncmVlbWVudDwvdGl0bGU+Cis8L2hlYWQ+CisKKzxib2R5IGxhbmc9IkVOLVVTIiBsaW5rPWJsdWUgdmxpbms9cHVycGxlPgorPGgyPkVjbGlwc2UgRm91bmRhdGlvbiBTb2Z0d2FyZSBVc2VyIEFncmVlbWVudDwvaDI+Cis8cD5NYXJjaCAxNywgMjAwNTwvcD4KKworPGgzPlVzYWdlIE9mIENvbnRlbnQ8L2gzPgorCis8cD5USEUgRUNMSVBTRSBGT1VOREFUSU9OIE1BS0VTIEFWQUlMQUJMRSBTT0ZUV0FSRSwgRE9DVU1FTlRBVElPTiwgSU5GT1JNQVRJT04gQU5EL09SIE9USEVSIE1BVEVSSUFMUyBGT1IgT1BFTiBTT1VSQ0UgUFJPSkVDVFMKKyAgIChDT0xMRUNUSVZFTFkgJnF1b3Q7Q09OVEVOVCZxdW90OykuICBVU0UgT0YgVEhFIENPTlRFTlQgSVMgR09WRVJORUQgQlkgVEhFIFRFUk1TIEFORCBDT05ESVRJT05TIE9GIFRISVMgQUdSRUVNRU5UIEFORC9PUiBUSEUgVEVSTVMgQU5ECisgICBDT05ESVRJT05TIE9GIExJQ0VOU0UgQUdSRUVNRU5UUyBPUiBOT1RJQ0VTIElORElDQVRFRCBPUiBSRUZFUkVOQ0VEIEJFTE9XLiAgQlkgVVNJTkcgVEhFIENPTlRFTlQsIFlPVSBBR1JFRSBUSEFUIFlPVVIgVVNFCisgICBPRiBUSEUgQ09OVEVOVCBJUyBHT1ZFUk5FRCBCWSBUSElTIEFHUkVFTUVOVCBBTkQvT1IgVEhFIFRFUk1TIEFORCBDT05ESVRJT05TIE9GIEFOWSBBUFBMSUNBQkxFIExJQ0VOU0UgQUdSRUVNRU5UUyBPUgorICAgTk9USUNFUyBJTkRJQ0FURUQgT1IgUkVGRVJFTkNFRCBCRUxPVy4gIElGIFlPVSBETyBOT1QgQUdSRUUgVE8gVEhFIFRFUk1TIEFORCBDT05ESVRJT05TIE9GIFRISVMgQUdSRUVNRU5UIEFORCBUSEUgVEVSTVMgQU5ECisgICBDT05ESVRJT05TIE9GIEFOWSBBUFBMSUNBQkxFIExJQ0VOU0UgQUdSRUVNRU5UUyBPUiBOT1RJQ0VTIElORElDQVRFRCBPUiBSRUZFUkVOQ0VEIEJFTE9XLCBUSEVOIFlPVSBNQVkgTk9UIFVTRSBUSEUgQ09OVEVOVC48L3A+CisgICAKKzxoMz5BcHBsaWNhYmxlIExpY2Vuc2VzPC9oMz4gICAKKyAgIAorPHA+VW5sZXNzIG90aGVyd2lzZSBpbmRpY2F0ZWQsIGFsbCBDb250ZW50IG1hZGUgYXZhaWxhYmxlIGJ5IHRoZSBFY2xpcHNlIEZvdW5kYXRpb24gaXMgcHJvdmlkZWQgdG8geW91IHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMAorICAgKCZxdW90O0VQTCZxdW90OykuICBBIGNvcHkgb2YgdGhlIEVQTCBpcyBwcm92aWRlZCB3aXRoIHRoaXMgQ29udGVudCBhbmQgaXMgYWxzbyBhdmFpbGFibGUgYXQgPGEgaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwiPmh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sPC9hPi4KKyAgIEZvciBwdXJwb3NlcyBvZiB0aGUgRVBMLCAmcXVvdDtQcm9ncmFtJnF1b3Q7IHdpbGwgbWVhbiB0aGUgQ29udGVudC48L3A+CisKKzxwPkNvbnRlbnQgaW5jbHVkZXMsIGJ1dCBpcyBub3QgbGltaXRlZCB0bywgc291cmNlIGNvZGUsIG9iamVjdCBjb2RlLCBkb2N1bWVudGF0aW9uIGFuZCBvdGhlciBmaWxlcyBtYWludGFpbmVkIGluIHRoZSBFY2xpcHNlLm9yZyBDVlMgcmVwb3NpdG9yeSAoJnF1b3Q7UmVwb3NpdG9yeSZxdW90OykgaW4gQ1ZTCisgICBtb2R1bGVzICgmcXVvdDtNb2R1bGVzJnF1b3Q7KSBhbmQgbWFkZSBhdmFpbGFibGUgYXMgZG93bmxvYWRhYmxlIGFyY2hpdmVzICgmcXVvdDtEb3dubG9hZHMmcXVvdDspLjwvcD4KKyAgIAorPHVsPgorCTxsaT5Db250ZW50IG1heSBiZSBzdHJ1Y3R1cmVkIGFuZCBwYWNrYWdlZCBpbnRvIG1vZHVsZXMgdG8gZmFjaWxpdGF0ZSBkZWxpdmVyaW5nLCBleHRlbmRpbmcsIGFuZCB1cGdyYWRpbmcgdGhlIENvbnRlbnQuICBUeXBpY2FsIG1vZHVsZXMgbWF5IGluY2x1ZGUgcGx1Zy1pbnMgKCZxdW90O1BsdWctaW5zJnF1b3Q7KSwgcGx1Zy1pbiBmcmFnbWVudHMgKCZxdW90O0ZyYWdtZW50cyZxdW90OyksIGFuZCBmZWF0dXJlcyAoJnF1b3Q7RmVhdHVyZXMmcXVvdDspLjwvbGk+CisJPGxpPkVhY2ggUGx1Zy1pbiBvciBGcmFnbWVudCBtYXkgYmUgcGFja2FnZWQgYXMgYSBzdWItZGlyZWN0b3J5IG9yIEpBUiAoSmF2YSZ0cmFkZTsgQVJjaGl2ZSkgaW4gYSBkaXJlY3RvcnkgbmFtZWQgJnF1b3Q7cGx1Z2lucyZxdW90Oy48L2xpPgorCTxsaT5BIEZlYXR1cmUgaXMgYSBidW5kbGUgb2Ygb25lIG9yIG1vcmUgUGx1Zy1pbnMgYW5kL29yIEZyYWdtZW50cyBhbmQgYXNzb2NpYXRlZCBtYXRlcmlhbC4gIEVhY2ggRmVhdHVyZSBtYXkgYmUgcGFja2FnZWQgYXMgYSBzdWItZGlyZWN0b3J5IGluIGEgZGlyZWN0b3J5IG5hbWVkICZxdW90O2ZlYXR1cmVzJnF1b3Q7LiAgV2l0aGluIGEgRmVhdHVyZSwgZmlsZXMgbmFtZWQgJnF1b3Q7ZmVhdHVyZS54bWwmcXVvdDsgbWF5IGNvbnRhaW4gYSBsaXN0IG9mIHRoZSBuYW1lcyBhbmQgdmVyc2lvbiBudW1iZXJzIG9mIHRoZSBQbHVnLWlucworICAgICAgYW5kL29yIEZyYWdtZW50cyBhc3NvY2lhdGVkIHdpdGggdGhhdCBGZWF0dXJlLjwvbGk+CisJPGxpPkZlYXR1cmVzIG1heSBhbHNvIGluY2x1ZGUgb3RoZXIgRmVhdHVyZXMgKCZxdW90O0luY2x1ZGVkIEZlYXR1cmVzJnF1b3Q7KS4gV2l0aGluIGEgRmVhdHVyZSwgZmlsZXMgbmFtZWQgJnF1b3Q7ZmVhdHVyZS54bWwmcXVvdDsgbWF5IGNvbnRhaW4gYSBsaXN0IG9mIHRoZSBuYW1lcyBhbmQgdmVyc2lvbiBudW1iZXJzIG9mIEluY2x1ZGVkIEZlYXR1cmVzLjwvbGk+Cis8L3VsPiAgIAorIAorPHA+VGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIGdvdmVybmluZyBQbHVnLWlucyBhbmQgRnJhZ21lbnRzIHNob3VsZCBiZSBjb250YWluZWQgaW4gZmlsZXMgbmFtZWQgJnF1b3Q7YWJvdXQuaHRtbCZxdW90OyAoJnF1b3Q7QWJvdXRzJnF1b3Q7KS4gVGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIGdvdmVybmluZyBGZWF0dXJlcyBhbmQKK0luY2x1ZGVkIEZlYXR1cmVzIHNob3VsZCBiZSBjb250YWluZWQgaW4gZmlsZXMgbmFtZWQgJnF1b3Q7bGljZW5zZS5odG1sJnF1b3Q7ICgmcXVvdDtGZWF0dXJlIExpY2Vuc2VzJnF1b3Q7KS4gIEFib3V0cyBhbmQgRmVhdHVyZSBMaWNlbnNlcyBtYXkgYmUgbG9jYXRlZCBpbiBhbnkgZGlyZWN0b3J5IG9mIGEgRG93bmxvYWQgb3IgTW9kdWxlCitpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0byB0aGUgZm9sbG93aW5nIGxvY2F0aW9uczo8L3A+CisKKzx1bD4KKwk8bGk+VGhlIHRvcC1sZXZlbCAocm9vdCkgZGlyZWN0b3J5PC9saT4KKwk8bGk+UGx1Zy1pbiBhbmQgRnJhZ21lbnQgZGlyZWN0b3JpZXM8L2xpPgorCTxsaT5JbnNpZGUgUGx1Zy1pbnMgYW5kIEZyYWdtZW50cyBwYWNrYWdlZCBhcyBKQVJzPC9saT4KKwk8bGk+U3ViLWRpcmVjdG9yaWVzIG9mIHRoZSBkaXJlY3RvcnkgbmFtZWQgJnF1b3Q7c3JjJnF1b3Q7IG9mIGNlcnRhaW4gUGx1Zy1pbnM8L2xpPgorCTxsaT5GZWF0dXJlIGRpcmVjdG9yaWVzPC9saT4KKzwvdWw+CisJCQorPHA+Tm90ZTogaWYgYSBGZWF0dXJlIG1hZGUgYXZhaWxhYmxlIGJ5IHRoZSBFY2xpcHNlIEZvdW5kYXRpb24gaXMgaW5zdGFsbGVkIHVzaW5nIHRoZSBFY2xpcHNlIFVwZGF0ZSBNYW5hZ2VyLCB5b3UgbXVzdCBhZ3JlZSB0byBhIGxpY2Vuc2UgKCZxdW90O0ZlYXR1cmUgVXBkYXRlIExpY2Vuc2UmcXVvdDspIGR1cmluZyB0aGUKK2luc3RhbGxhdGlvbiBwcm9jZXNzLiAgSWYgdGhlIEZlYXR1cmUgY29udGFpbnMgSW5jbHVkZWQgRmVhdHVyZXMsIHRoZSBGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlIHNob3VsZCBlaXRoZXIgcHJvdmlkZSB5b3Ugd2l0aCB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgZ292ZXJuaW5nIHRoZSBJbmNsdWRlZCBGZWF0dXJlcyBvcgoraW5mb3JtIHlvdSB3aGVyZSB5b3UgY2FuIGxvY2F0ZSB0aGVtLiAgRmVhdHVyZSBVcGRhdGUgTGljZW5zZXMgbWF5IGJlIGZvdW5kIGluIHRoZSAmcXVvdDtsaWNlbnNlJnF1b3Q7IHByb3BlcnR5IG9mIGZpbGVzIG5hbWVkICZxdW90O2ZlYXR1cmUucHJvcGVydGllcyZxdW90OyBmb3VuZCB3aXRoaW4gYSBGZWF0dXJlLgorU3VjaCBBYm91dHMsIEZlYXR1cmUgTGljZW5zZXMsIGFuZCBGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlcyBjb250YWluIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyAob3IgcmVmZXJlbmNlcyB0byBzdWNoIHRlcm1zIGFuZCBjb25kaXRpb25zKSB0aGF0IGdvdmVybiB5b3VyIHVzZSBvZiB0aGUgYXNzb2NpYXRlZCBDb250ZW50IGluCit0aGF0IGRpcmVjdG9yeS48L3A+CisKKzxwPlRIRSBBQk9VVFMsIEZFQVRVUkUgTElDRU5TRVMsIEFORCBGRUFUVVJFIFVQREFURSBMSUNFTlNFUyBNQVkgUkVGRVIgVE8gVEhFIEVQTCBPUiBPVEhFUiBMSUNFTlNFIEFHUkVFTUVOVFMsIE5PVElDRVMgT1IgVEVSTVMgQU5EIENPTkRJVElPTlMuICBTT01FIE9GIFRIRVNFCitPVEhFUiBMSUNFTlNFIEFHUkVFTUVOVFMgTUFZIElOQ0xVREUgKEJVVCBBUkUgTk9UIExJTUlURUQgVE8pOjwvcD4KKworPHVsPgorCTxsaT5Db21tb24gUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjAgKGF2YWlsYWJsZSBhdCA8YSBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2NwbC12MTAuaHRtbCI+aHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9jcGwtdjEwLmh0bWw8L2E+KTwvbGk+CisJPGxpPkFwYWNoZSBTb2Z0d2FyZSBMaWNlbnNlIDEuMSAoYXZhaWxhYmxlIGF0IDxhIGhyZWY9Imh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFIj5odHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRTwvYT4pPC9saT4KKwk8bGk+QXBhY2hlIFNvZnR3YXJlIExpY2Vuc2UgMi4wIChhdmFpbGFibGUgYXQgPGEgaHJlZj0iaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wIj5odHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjA8L2E+KTwvbGk+CisJPGxpPklCTSBQdWJsaWMgTGljZW5zZSAxLjAgKGF2YWlsYWJsZSBhdCA8YSBocmVmPSJodHRwOi8vb3NzLnNvZnR3YXJlLmlibS5jb20vZGV2ZWxvcGVyd29ya3Mvb3BlbnNvdXJjZS9saWNlbnNlMTAuaHRtbCI+aHR0cDovL29zcy5zb2Z0d2FyZS5pYm0uY29tL2RldmVsb3BlcndvcmtzL29wZW5zb3VyY2UvbGljZW5zZTEwLmh0bWw8L2E+KTwvbGk+CQorCTxsaT5NZXRybyBMaW5rIFB1YmxpYyBMaWNlbnNlIDEuMDAgKGF2YWlsYWJsZSBhdCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW5ncm91cC5vcmcvb3Blbm1vdGlmL3N1cHBvcnRlcnMvbWV0cm9saW5rL2xpY2Vuc2UuaHRtbCI+aHR0cDovL3d3dy5vcGVuZ3JvdXAub3JnL29wZW5tb3RpZi9zdXBwb3J0ZXJzL21ldHJvbGluay9saWNlbnNlLmh0bWw8L2E+KTwvbGk+CisJPGxpPk1vemlsbGEgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjEgKGF2YWlsYWJsZSBhdCA8YSBocmVmPSJodHRwOi8vd3d3Lm1vemlsbGEub3JnL01QTC9NUEwtMS4xLmh0bWwiPmh0dHA6Ly93d3cubW96aWxsYS5vcmcvTVBML01QTC0xLjEuaHRtbDwvYT4pPC9saT4KKzwvdWw+CisKKzxwPklUIElTIFlPVVIgT0JMSUdBVElPTiBUTyBSRUFEIEFORCBBQ0NFUFQgQUxMIFNVQ0ggVEVSTVMgQU5EIENPTkRJVElPTlMgUFJJT1IgVE8gVVNFIE9GIFRIRSBDT05URU5ULiAgSWYgbm8gQWJvdXQsIEZlYXR1cmUgTGljZW5zZSwgb3IgRmVhdHVyZSBVcGRhdGUgTGljZW5zZSBpcyBwcm92aWRlZCwgcGxlYXNlCitjb250YWN0IHRoZSBFY2xpcHNlIEZvdW5kYXRpb24gdG8gZGV0ZXJtaW5lIHdoYXQgdGVybXMgYW5kIGNvbmRpdGlvbnMgZ292ZXJuIHRoYXQgcGFydGljdWxhciBDb250ZW50LjwvcD4KKworPGgzPkNyeXB0b2dyYXBoeTwvaDM+CisKKzxwPkNvbnRlbnQgbWF5IGNvbnRhaW4gZW5jcnlwdGlvbiBzb2Z0d2FyZS4gVGhlIGNvdW50cnkgaW4gd2hpY2ggeW91IGFyZSBjdXJyZW50bHkgbWF5IGhhdmUgcmVzdHJpY3Rpb25zIG9uIHRoZSBpbXBvcnQsIHBvc3Nlc3Npb24sIGFuZCB1c2UsIGFuZC9vciByZS1leHBvcnQgdG8KKyAgIGFub3RoZXIgY291bnRyeSwgb2YgZW5jcnlwdGlvbiBzb2Z0d2FyZS4gQkVGT1JFIHVzaW5nIGFueSBlbmNyeXB0aW9uIHNvZnR3YXJlLCBwbGVhc2UgY2hlY2sgdGhlIGNvdW50cnkncyBsYXdzLCByZWd1bGF0aW9ucyBhbmQgcG9saWNpZXMgY29uY2VybmluZyB0aGUgaW1wb3J0LAorICAgcG9zc2Vzc2lvbiwgb3IgdXNlLCBhbmQgcmUtZXhwb3J0IG9mIGVuY3J5cHRpb24gc29mdHdhcmUsIHRvIHNlZSBpZiB0aGlzIGlzIHBlcm1pdHRlZC48L3A+CisgICAKKzxzbWFsbD5KYXZhIGFuZCBhbGwgSmF2YS1iYXNlZCB0cmFkZW1hcmtzIGFyZSB0cmFkZW1hcmtzIG9mIFN1biBNaWNyb3N5c3RlbXMsIEluYy4gaW4gdGhlIFVuaXRlZCBTdGF0ZXMsIG90aGVyIGNvdW50cmllcywgb3IgYm90aC48L3NtYWxsPiAgIAorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5qb2JzL3BsdWdpbi5wcm9wZXJ0aWVzIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5qb2JzL3BsdWdpbi5wcm9wZXJ0aWVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc4Zjk1ODkKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmpvYnMvcGx1Z2luLnByb3BlcnRpZXMKQEAgLTAsMCArMSwyNiBAQAorIy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjICogQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorIyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyMgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyMgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorIyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisjICoKKyMgKiBDb250cmlidXRvcnM6CisjICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorIyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisjIFRvIGNvZGUgZGV2ZWxvcGVyOgorIyAgIERvIE5PVCBjaGFuZ2UgdGhlIHByb3BlcnRpZXMgYmV0d2VlbiB0aGlzIGxpbmUgYW5kIHRoZQorIyAgICIlJSUgRU5EIE9GIFRSQU5TTEFURUQgUFJPUEVSVElFUyAlJSUiIGxpbmUuCisjICAgTWFrZSBhIG5ldyBwcm9wZXJ0eSBuYW1lLCBhcHBlbmQgdG8gdGhlIGVuZCBvZiB0aGUgZmlsZSBhbmQgY2hhbmdlCisjICAgdGhlIGNvZGUgdG8gdXNlIHRoZSBuZXcgcHJvcGVydHkuCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyMgJSUlIEVORCBPRiBUUkFOU0xBVEVEIFBST1BFUlRJRVMgJSUlCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK3BsdWdpbk5hbWUgPSBTVEVNIEpvYiBhbmQgU2ltdWxhdGlvbiBNYW5hZ2VyIFRlc3QgU3VpdGUKK3Byb3ZpZGVyTmFtZSA9IEVjbGlwc2Uub3JnCisKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuam9icy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9qb2JzL2JhdGNoL0JhdGNoQWxsVGVzdHMuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuam9icy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9qb2JzL2JhdGNoL0JhdGNoQWxsVGVzdHMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZTc2NmJkCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5qb2JzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2pvYnMvYmF0Y2gvQmF0Y2hBbGxUZXN0cy5qYXZhCkBAIC0wLDAgKzEsNjMgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5qb2JzLmJhdGNoOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDExIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0OworaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0U3VpdGU7CitpbXBvcnQganVuaXQudGV4dHVpLlRlc3RSdW5uZXI7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gQSB0ZXN0IHN1aXRlIGZvciB0aGUgJzxlbT48Yj5zdGFuZGFyZDwvYj48L2VtPicKKyAqIHBhY2thZ2UuIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgQmF0Y2hBbGxUZXN0cyBleHRlbmRzIFRlc3RTdWl0ZSB7CisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAcGFyYW0gYXJncworCSAqIAorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CisJCVRlc3RSdW5uZXIucnVuKHN1aXRlKCkpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogCisJICogQHJldHVybgorCSAqIAorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJcHVibGljIHN0YXRpYyBUZXN0IHN1aXRlKCkgeworCQlUZXN0U3VpdGUgc3VpdGUgPSBuZXcgQmF0Y2hBbGxUZXN0cygiU1RFTSBKb2JzIC0gQmF0Y2ggVGVzdHMiKTsgLy8kTk9OLU5MUy0xJAorCQkvL3N1aXRlLmFkZFRlc3RTdWl0ZShCYXRjaE1hbmFnZXJUZXN0LmNsYXNzKTsKKworCQlyZXR1cm4gc3VpdGU7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAcGFyYW0gbmFtZQorCSAqIAorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQmF0Y2hBbGxUZXN0cyhTdHJpbmcgbmFtZSkgeworCQlzdXBlcihuYW1lKTsKKwl9CisKK30KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuam9icy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9qb2JzL2JhdGNoL0JhdGNoTWFuYWdlclRlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuam9icy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9qb2JzL2JhdGNoL0JhdGNoTWFuYWdlclRlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYzQ0YWNjCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5qb2JzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2pvYnMvYmF0Y2gvQmF0Y2hNYW5hZ2VyVGVzdC5qYXZhCkBAIC0wLDAgKzEsNzYgQEAKKy8vIEJhdGNoTWFuYWdlclRlc3QuamF2YQorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmpvYnMuYmF0Y2g7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgc3RhdGljIG9yZy5qdW5pdC5Bc3NlcnQuYXNzZXJ0VHJ1ZTsKKworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5leHBlcmltZW50LnRlc3RzLkV4cGVyaW1lbnRUZXN0OworaW1wb3J0IG9yZy5qdW5pdC5CZWZvcmU7CitpbXBvcnQgb3JnLmp1bml0LlRlc3Q7CisKKy8qKgorICogVGhpcyBjbGFzcyBpcyBhIEpVbml0NCB0ZXN0IGNhc2UgZm9yIHRoZSB0aGUge0BsaW5rIEJhdGNoTWFuYWdlcn0uCisgKi8KK3B1YmxpYyBjbGFzcyBCYXRjaE1hbmFnZXJUZXN0IHsKKworCS8vIFRoZSBjdXJyZW50IEJhdGNoTWFuYWdlciB1bmRlciB0ZXN0LgorCXByb3RlY3RlZCBCYXRjaE1hbmFnZXIgZml4dHVyZTsKKworCXByaXZhdGUgQmF0Y2hNYW5hZ2VyIGdldEZpeHR1cmUoKSB7CisJCXJldHVybiBmaXh0dXJlOworCX0gLy8gZ2V0Rml4dHVyZQorCisJcHJpdmF0ZSB2b2lkIHNldEZpeHR1cmUoZmluYWwgQmF0Y2hNYW5hZ2VyIGZpeHR1cmUpIHsKKwkJdGhpcy5maXh0dXJlID0gZml4dHVyZTsKKwl9IC8vIHNldEZpeHR1cmUKKworCS8qKgorCSAqIEByZXR1cm4gdGhlIHtAbGluayBCYXRjaE1hbmFnZXJ9IHRvIGJlIHVzZWQgZm9yIHRlc3RpbmcuCisJICovCisJcHVibGljIHN0YXRpYyBCYXRjaE1hbmFnZXIgY3JlYXRlRml4dHVyZSgpIHsKKwkJQmF0Y2hNYW5hZ2VyLnJlc2V0QmF0Y2hNYW5hZ2VyKCk7CisJCXJldHVybiBCYXRjaE1hbmFnZXIuSU5TVEFOQ0U7CisJfSAvLyBjcmVhdGVGaXh0dXJlCisKKwkvKioKKwkgKiBAdGhyb3dzIGphdmEubGFuZy5FeGNlcHRpb24KKwkgKi8KKwlAQmVmb3JlCisJcHVibGljIHZvaWQgc2V0VXAoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJc2V0Rml4dHVyZShjcmVhdGVGaXh0dXJlKCkpOworCX0KKworCS8qKgorCSAqIFRlc3QgbWV0aG9kIGZvcgorCSAqIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmpvYnMuYmF0Y2guQmF0Y2hNYW5hZ2VyI2dldEFjdGl2ZUJhdGNoZXMoKX0uCisJICovCisJQFRlc3QKKwlwdWJsaWMgdm9pZCB0ZXN0R2V0QmF0Y2hlcygpIHsKKwkJLy8gVGhpcyBpc24ndCBtdWNoIG9mIGEgdGVzdC4KKwkJZmluYWwgQmF0Y2hNYW5hZ2VyIGZpeHR1cmUgPSBnZXRGaXh0dXJlKCk7CisJCWFzc2VydFRydWUoZml4dHVyZS5nZXRBY3RpdmVCYXRjaGVzKCkuc2l6ZSgpID09IDApOworCX0gLy8gdGVzdEdldEJhdGNoZXMKKworCS8qKgorCSAqIFRlc3QgbWV0aG9kIGZvcgorCSAqIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmpvYnMuYmF0Y2guQmF0Y2hNYW5hZ2VyI2dldFNlcXVlbmNlTnVtYmVyKCl9LgorCSAqLworCUBUZXN0CisJcHVibGljIHZvaWQgdGVzdEdldFNlcXVlbmNlTnVtYmVyKCkgeworCQkvLyBUZXN0IHRoYXQgdGhlIHNlcXVlbmNlIG51bWJlciBpcyBpbmNyZW1lbnRlZC4KKwkJZmluYWwgQmF0Y2hNYW5hZ2VyIGZpeHR1cmUgPSBnZXRGaXh0dXJlKCk7CisJCWFzc2VydFRydWUoZml4dHVyZS5nZXRTZXF1ZW5jZU51bWJlcigpID09IDApOworCQlmaXh0dXJlLmNyZWF0ZUJhdGNoKEV4cGVyaW1lbnRUZXN0LmNyZWF0ZUZpeHR1cmUoKSk7CisJCWFzc2VydFRydWUoZml4dHVyZS5nZXRTZXF1ZW5jZU51bWJlcigpID09IDEpOworCX0gLy8gdGVzdEdldFNlcXVlbmNlTnVtYmVyCit9IC8vIEJhdGNoTWFuYWdlclRlc3QKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuam9icy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9qb2JzL2JhdGNoL0JhdGNoVGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5qb2JzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2pvYnMvYmF0Y2gvQmF0Y2hUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWFlYzdiOQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuam9icy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9qb2JzL2JhdGNoL0JhdGNoVGVzdC5qYXZhCkBAIC0wLDAgKzEsMTM5IEBACisvLyBCYXRjaFRlc3QuamF2YQorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmpvYnMuYmF0Y2g7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgc3RhdGljIG9yZy5qdW5pdC5Bc3NlcnQuYXNzZXJ0Tm90TnVsbDsKK2ltcG9ydCBzdGF0aWMgb3JnLmp1bml0LkFzc2VydC5hc3NlcnRUcnVlOworCitpbXBvcnQgb3JnLmp1bml0LkJlZm9yZTsKK2ltcG9ydCBvcmcuanVuaXQuVGVzdDsKKworLyoqCisgKiBUaGlzIGNsYXNzIGlzIGEgSlVuaXQ0IHRlc3QgY2FzZSBmb3IgdGhlIHtAbGluayBCYXRjaH0gY2xhc3MuCisgKi8KK2Fic3RyYWN0IHB1YmxpYyBjbGFzcyBCYXRjaFRlc3QgeworCisJLyoqCisJICogQW4gaW50ZWdlciB0byBiZSB1c2VkIGFzIGEgc2VxdWVuY2UgbnVtYmVyIGZvciB0ZXN0aW5nLgorCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEJBVENIX1NFUVVFTkNFX05VTUJFUiA9IDM7CisKKwkvKioKKwkgKiBUaGUgY3VycmVudCB7QGxpbmsgQmF0Y2h9IHVuZGVyIHRlc3QuCisJICovCisJcHJvdGVjdGVkIEJhdGNoIGZpeHR1cmU7CisKKwlwcml2YXRlIEJhdGNoIGdldEZpeHR1cmUoKSB7CisJCXJldHVybiBmaXh0dXJlOworCX0gLy8gZ2V0Rml4dHVyZQorCisJdm9pZCBzZXRGaXh0dXJlKGZpbmFsIEJhdGNoIGJhdGNoKSB7CisJCXRoaXMuZml4dHVyZSA9IGJhdGNoOworCX0gLy8gc2V0Rml4dHVyZQorCisJLyoqCisJICogQHJldHVybiBhIG5ldyBpbXBsZW1lbnRhdGlvbiBvZiB7QGxpbmsgQmF0Y2h9IG9yIGEgc3ViY2xhc3MgZm9yIHRlc3RpbmcKKwkgKiAgICAgICAgIHB1cnBvc2VzLgorCSAqLworCWFic3RyYWN0IHB1YmxpYyBCYXRjaCBjcmVhdGVGaXh0dXJlKCk7CisKKwkvKioKKwkgKiBAdGhyb3dzIGphdmEubGFuZy5FeGNlcHRpb24KKwkgKi8KKwlAQmVmb3JlCisJcHVibGljIHZvaWQgc2V0VXAoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJc2V0Rml4dHVyZShjcmVhdGVGaXh0dXJlKCkpOworCX0gLy8gc2V0VXAKKworCS8vIC8qKgorCS8vICogVGVzdCBtZXRob2QgZm9yCisJLy8gKiB7QGxpbmsKKwkvLyBvcmcuZWNsaXBzZS5zdGVtLmpvYnMuYmF0Y2guQmF0Y2gjcnVuKG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUHJvZ3Jlc3NNb25pdG9yKX0uCisJLy8gKi8KKwkvLyBAVGVzdAorCS8vIHB1YmxpYyB2b2lkIHRlc3RSdW5JUHJvZ3Jlc3NNb25pdG9yKCkgeworCS8vIGZhaWwoIk5vdCB5ZXQgaW1wbGVtZW50ZWQiKTsgLy8gVE9ETworCS8vIH0KKwkvLworCS8vIC8qKgorCS8vICogVGVzdCBtZXRob2QgZm9yCisJLy8gKiB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5qb2JzLmJhdGNoLkJhdGNoI2dldFRvdGFsV29yaygpfS4KKwkvLyAqLworCS8vIEBUZXN0CisJLy8gcHVibGljIHZvaWQgdGVzdEdldFRvdGFsV29yaygpIHsKKwkvLyBmYWlsKCJOb3QgeWV0IGltcGxlbWVudGVkIik7IC8vIFRPRE8KKwkvLyB9CisJLy8KKwkvLyAvKioKKwkvLyAqIFRlc3QgbWV0aG9kIGZvcgorCS8vICoge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uam9icy5iYXRjaC5CYXRjaCNnZXROZXh0U2ltdWxhdGlvblRvUnVuKCl9LgorCS8vICovCisJLy8gQFRlc3QKKwkvLyBwdWJsaWMgdm9pZCB0ZXN0R2V0TmV4dFNpbXVsYXRpb25Ub1J1bigpIHsKKwkvLyBmYWlsKCJOb3QgeWV0IGltcGxlbWVudGVkIik7IC8vIFRPRE8KKwkvLyB9CisKKwkvLyAvKioKKwkvLyAqIFRlc3QgbWV0aG9kIGZvciB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5qb2JzLmJhdGNoLkJhdGNoI3J1bigpfS4KKwkvLyAqLworCS8vIEBUZXN0CisJLy8gcHVibGljIHZvaWQgdGVzdFJ1bigpIHsKKwkvLyBmYWlsKCJOb3QgeWV0IGltcGxlbWVudGVkIik7IC8vIFRPRE8KKwkvLyB9CisJLy8KKwkvLyAvKioKKwkvLyAqIFRlc3QgbWV0aG9kIGZvciB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5qb2JzLmJhdGNoLkJhdGNoI3N0b3AoKX0uCisJLy8gKi8KKwkvLyBAVGVzdAorCS8vIHB1YmxpYyB2b2lkIHRlc3RTdG9wKCkgeworCS8vIGZhaWwoIk5vdCB5ZXQgaW1wbGVtZW50ZWQiKTsgLy8gVE9ETworCS8vIH0KKworCS8vIC8qKgorCS8vICogVGVzdCBtZXRob2QgZm9yCisJLy8gKiB7QGxpbmsKKwkvLyBvcmcuZWNsaXBzZS5zdGVtLmpvYnMuYmF0Y2guQmF0Y2gjc2ltdWxhdGlvbkNoYW5nZWQob3JnLmVjbGlwc2Uuc3RlbS5qb2JzLnNpbXVsYXRpb24uU2ltdWxhdGlvbkV2ZW50KX0uCisJLy8gKi8KKwkvLyBAVGVzdAorCS8vIHB1YmxpYyB2b2lkIHRlc3RTaW11bGF0aW9uQ2hhbmdlZCgpIHsKKwkvLyBmYWlsKCJOb3QgeWV0IGltcGxlbWVudGVkIik7IC8vIFRPRE8KKwkvLyB9CisKKwkvKioKKwkgKiBUZXN0IG1ldGhvZCBmb3IKKwkgKiB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5qb2JzLmJhdGNoLkJhdGNoI2dldFNlcXVlbmNlTnVtYmVyKCl9LgorCSAqLworCUBUZXN0CisJcHVibGljIHZvaWQgdGVzdEdldFNlcXVlbmNlTnVtYmVyKCkgeworCQlmaW5hbCBCYXRjaCBmaXh0dXJlID0gZ2V0Rml4dHVyZSgpOworCQlhc3NlcnRUcnVlKGZpeHR1cmUuZ2V0U2VxdWVuY2VOdW1iZXIoKSA9PSBCQVRDSF9TRVFVRU5DRV9OVU1CRVIpOworCX0KKworCS8qKgorCSAqIFRlc3QgbWV0aG9kIGZvcgorCSAqIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmpvYnMuYmF0Y2guQmF0Y2gjZ2V0QmF0Y2hTdGF0ZSgpfS4KKwkgKi8KKwlAVGVzdAorCXB1YmxpYyB2b2lkIHRlc3RHZXRCYXRjaFN0YXRlKCkgeworCQlhc3NlcnRUcnVlKGdldEZpeHR1cmUoKS5nZXRCYXRjaFN0YXRlKCkgPT0gQmF0Y2hTdGF0ZS5QQVVTRUQpOworCX0gLy8gdGVzdEdldEJhdGNoU3RhdGUKKworCS8qKgorCSAqIFRlc3QgbWV0aG9kIGZvciB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5qb2JzLmJhdGNoLkJhdGNoI3RvU3RyaW5nKCl9LgorCSAqLworCUBUZXN0CisJcHVibGljIHZvaWQgdGVzdFRvU3RyaW5nKCkgeworCQlhc3NlcnROb3ROdWxsKGdldEZpeHR1cmUoKS50b1N0cmluZygpKTsKKwl9IC8vIHRlc3RUb1N0cmluZworCit9IC8vIEJhdGNoVGVzdApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5qb2JzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2pvYnMvc2ltdWxhdGlvbi9TaW11bGF0aW9uQWxsVGVzdHMuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuam9icy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9qb2JzL3NpbXVsYXRpb24vU2ltdWxhdGlvbkFsbFRlc3RzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmNmMjA1YQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuam9icy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9qb2JzL3NpbXVsYXRpb24vU2ltdWxhdGlvbkFsbFRlc3RzLmphdmEKQEAgLTAsMCArMSw2NSBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmpvYnMuc2ltdWxhdGlvbjsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAxMSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdDsKK2ltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdFN1aXRlOworaW1wb3J0IGp1bml0LnRleHR1aS5UZXN0UnVubmVyOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IEEgdGVzdCBzdWl0ZSBmb3IgdGhlICc8ZW0+PGI+c3RhbmRhcmQ8L2I+PC9lbT4nCisgKiBwYWNrYWdlLiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIFNpbXVsYXRpb25BbGxUZXN0cyBleHRlbmRzIFRlc3RTdWl0ZSB7CisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAcGFyYW0gYXJncworCSAqIAorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CisJCVRlc3RSdW5uZXIucnVuKHN1aXRlKCkpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogCisJICogQHJldHVybgorCSAqIAorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJcHVibGljIHN0YXRpYyBUZXN0IHN1aXRlKCkgeworCQlUZXN0U3VpdGUgc3VpdGUgPSBuZXcgU2ltdWxhdGlvbkFsbFRlc3RzKCJTVEVNIEpvYnMgLSBTaW11bGF0aW9uIFRlc3RzIik7IC8vJE5PTi1OTFMtMSQKKwkJc3VpdGUuYWRkVGVzdFN1aXRlKFNpbXVsYXRpb25UZXN0LmNsYXNzKTsKKwkJc3VpdGUuYWRkVGVzdFN1aXRlKFNpbXVsYXRpb25FdmVudFRlc3QuY2xhc3MpOworCQlzdWl0ZS5hZGRUZXN0U3VpdGUoU2ltdWxhdGlvbk1hbmFnZXJUZXN0LmNsYXNzKTsKKwkJc3VpdGUuYWRkVGVzdFN1aXRlKFNpbXVsYXRpb25NYW5hZ2VyRXZlbnRUZXN0LmNsYXNzKTsKKwkJcmV0dXJuIHN1aXRlOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogCisJICogQHBhcmFtIG5hbWUKKwkgKiAKKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFNpbXVsYXRpb25BbGxUZXN0cyhTdHJpbmcgbmFtZSkgeworCQlzdXBlcihuYW1lKTsKKwl9CisKK30KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuam9icy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9qb2JzL3NpbXVsYXRpb24vU2ltdWxhdGlvbkV2ZW50VGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5qb2JzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2pvYnMvc2ltdWxhdGlvbi9TaW11bGF0aW9uRXZlbnRUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmFiNzA5OAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuam9icy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9qb2JzL3NpbXVsYXRpb24vU2ltdWxhdGlvbkV2ZW50VGVzdC5qYXZhCkBAIC0wLDAgKzEsOTEgQEAKKy8vIFNpbXVsYXRpb25FdmVudFRlc3QuamF2YQorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmpvYnMuc2ltdWxhdGlvbjsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2NlbmFyaW8uU2NlbmFyaW87CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNjZW5hcmlvLnRlc3RzLlNjZW5hcmlvVGVzdDsKKworLyoqCisgKiBUaGlzIGNsYXNzIGlzIGEgSlVuaXQgdGVzdCBjYXNlIGZvciB0aGUgY2xhc3MgU2ltdWxhdGlvbkV2ZW50CisgKi8KK3B1YmxpYyBjbGFzcyBTaW11bGF0aW9uRXZlbnRUZXN0IGV4dGVuZHMgVGVzdENhc2UgeworCisJLyoqCisJICogVGhlIGZpeHR1cmUgZm9yIHRoaXMgU2ltdWxhdGlvbkV2ZW50IHRlc3QuCisJICovCisJcHJvdGVjdGVkIFNpbXVsYXRpb25FdmVudCBmaXh0dXJlOworCisJLyoqCisJICogU2V0cyB0aGUgZml4dHVyZSBmb3IgdGhpcyBTaW11bGF0aW9uRXZlbnQgdGVzdCBjYXNlLgorCSAqLworCXByb3RlY3RlZCB2b2lkIHNldEZpeHR1cmUoU2ltdWxhdGlvbkV2ZW50IGZpeHR1cmUpIHsKKwkJdGhpcy5maXh0dXJlID0gZml4dHVyZTsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBmaXh0dXJlIGZvciB0aGlzIFNpbXVsYXRpb25FdmVudCB0ZXN0IGNhc2UuCisJICovCisJcHJpdmF0ZSBTaW11bGF0aW9uRXZlbnQgZ2V0Rml4dHVyZSgpIHsKKwkJcmV0dXJuIHRoaXMuZml4dHVyZTsKKwl9IC8vIGdldEZpeHR1cmUKKworCS8qKgorCSAqIEByZXR1cm4gYSBTaW11bGF0aW9uRXZlbnQgZm9yIHRlc3RpbmcKKwkgKi8KKwlwdWJsaWMgc3RhdGljIFNpbXVsYXRpb25FdmVudCBjcmVhdGVGaXh0dXJlKCkgeworCQlTY2VuYXJpbyBzY2VuYXJpbyA9IFNjZW5hcmlvVGVzdC5jcmVhdGVGaXh0dXJlKCk7CisJCWZpbmFsIElTaW11bGF0aW9uIHNpbXVsYXRpb24gPSBTaW11bGF0aW9uTWFuYWdlci5nZXRNYW5hZ2VyKCkKKwkJCQkuY3JlYXRlU2ltdWxhdGlvbihzY2VuYXJpbywgbnVsbCk7CisJCXJldHVybiBuZXcgU2ltdWxhdGlvbkV2ZW50KHNpbXVsYXRpb24sIFNpbXVsYXRpb25TdGF0ZS5SVU5OSU5HKTsKKwl9IC8vIGNyZWF0ZUZpeHR1cmUKKworCS8qKgorCSAqIEBzZWUganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlI3NldFVwKCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgdm9pZCBzZXRVcCgpIHRocm93cyBFeGNlcHRpb24geworCQlzdXBlci5zZXRVcCgpOworCQlzZXRGaXh0dXJlKGNyZWF0ZUZpeHR1cmUoKSk7CisJfSAvLyBzZXRVcAorCisJLyoqCisJICogQHNlZSBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2UjdGVhckRvd24oKQorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIHRlYXJEb3duKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCXNldEZpeHR1cmUobnVsbCk7CisJfQorCisJLyoqCisJICogVGVzdCBtZXRob2QgZm9yIHRoZSBhYmlsaXR5IHRvIGdldCB0aGUgc3RhdGUKKwkgKiB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5qb2JzLnNpbXVsYXRpb24uU2ltdWxhdGlvbkV2ZW50I2dldFNpbXVsYXRpb25TdGF0ZSgpfS4KKwkgKi8KKwlwdWJsaWMgdm9pZCB0ZXN0R2V0U2ltdWxhdGlvblN0YXRlKCkgeworCQlmaW5hbCBTaW11bGF0aW9uRXZlbnQgc2ltdWxhdGlvbkV2ZW50ID0gZ2V0Rml4dHVyZSgpOworCQlhc3NlcnRUcnVlKHNpbXVsYXRpb25FdmVudC5nZXRTaW11bGF0aW9uU3RhdGUoKS5lcXVhbHMoCisJCQkJU2ltdWxhdGlvblN0YXRlLlJVTk5JTkcpKTsKKwl9IC8vIHRlc3RHZXRTaW11bGF0aW9uU3RhdGUKKworCS8qKgorCSAqIFRlc3QgbWV0aG9kIGZvciB0aGUgYWJpbGl0eSB0byBnZXQgdGhlIG9yaWdpbmF0aW5nIFNpbXVsYXRpb24KKwkgKiB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5qb2JzLnNpbXVsYXRpb24uU2ltdWxhdGlvbkV2ZW50I2dldFNpbXVsYXRpb24oKX0uCisJICovCisJcHVibGljIHZvaWQgdGVzdEdldFNpbXVsYXRpb24oKSB7CisJCWZpbmFsIFNpbXVsYXRpb25FdmVudCBzaW11bGF0aW9uRXZlbnQgPSBnZXRGaXh0dXJlKCk7CisJCWFzc2VydE5vdE51bGwoc2ltdWxhdGlvbkV2ZW50LmdldFNpbXVsYXRpb24oKSk7CisJfSAvLyB0ZXN0R2V0U2ltdWxhdGlvbgorCit9CisvLyBTaW11bGF0aW9uRXZlbnRUZXN0CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmpvYnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vam9icy9zaW11bGF0aW9uL1NpbXVsYXRpb25NYW5hZ2VyRXZlbnRUZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmpvYnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vam9icy9zaW11bGF0aW9uL1NpbXVsYXRpb25NYW5hZ2VyRXZlbnRUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzVlMjAxNgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuam9icy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9qb2JzL3NpbXVsYXRpb24vU2ltdWxhdGlvbk1hbmFnZXJFdmVudFRlc3QuamF2YQpAQCAtMCwwICsxLDEwMiBAQAorLy8gU2ltdWxhdGlvbk1hbmFnZXJFdmVudFRlc3QuamF2YQorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmpvYnMuc2ltdWxhdGlvbjsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7CisKKy8qKgorICogVGhpcyBjbGFzcyBpcyBhIEpVbml0IHRlc3Qgb2YgU2ltdWxhdGlvbk1hbmFnZXJFdmVudAorICovCitwdWJsaWMgY2xhc3MgU2ltdWxhdGlvbk1hbmFnZXJFdmVudFRlc3QgZXh0ZW5kcyBUZXN0Q2FzZSB7CisKKwkvKioKKwkgKiBUaGUgZml4dHVyZSBmb3IgdGhpcyBTaW11bGF0aW9uRXZlbnQgdGVzdC4KKwkgKi8KKwlwcm90ZWN0ZWQgU2ltdWxhdGlvbk1hbmFnZXJFdmVudCBmaXh0dXJlOworCisJLyoqCisJICogU2V0cyB0aGUgZml4dHVyZSBmb3IgdGhpcyBTaW11bGF0aW9uRXZlbnQgdGVzdCBjYXNlLgorCSAqLworCXByb3RlY3RlZCB2b2lkIHNldEZpeHR1cmUoU2ltdWxhdGlvbk1hbmFnZXJFdmVudCBmaXh0dXJlKSB7CisJCXRoaXMuZml4dHVyZSA9IGZpeHR1cmU7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgZml4dHVyZSBmb3IgdGhpcyBTaW11bGF0aW9uRXZlbnQgdGVzdCBjYXNlLgorCSAqLworCXByaXZhdGUgU2ltdWxhdGlvbk1hbmFnZXJFdmVudCBnZXRGaXh0dXJlKCkgeworCQlyZXR1cm4gdGhpcy5maXh0dXJlOworCX0gLy8gZ2V0Rml4dHVyZQorCisJLyoqCisJICogQHJldHVybiBhIFNpbXVsYXRpb25FdmVudCBmb3IgdGVzdGluZworCSAqLworCXB1YmxpYyBzdGF0aWMgU2ltdWxhdGlvbk1hbmFnZXJFdmVudCBjcmVhdGVGaXh0dXJlKCkgeworCQlTaW11bGF0aW9uTWFuYWdlciBzaW11bGF0aW9uTWFuYWdlciA9IFNpbXVsYXRpb25NYW5hZ2VyLmdldE1hbmFnZXIoKTsKKwkJcmV0dXJuIG5ldyBTaW11bGF0aW9uTWFuYWdlckV2ZW50KHNpbXVsYXRpb25NYW5hZ2VyLAorCQkJCVNpbXVsYXRpb25NYW5hZ2VyLk5PTkUsIFNpbXVsYXRpb25NYW5hZ2VyLk5PTkUpOworCX0gLy8gY3JlYXRlRml4dHVyZQorCisJLyoqCisJICogQHNlZSBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2Ujc2V0VXAoKQorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIHNldFVwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCXNldEZpeHR1cmUoY3JlYXRlRml4dHVyZSgpKTsKKwl9IC8vIHNldFVwCisKKwkvKioKKwkgKiBAc2VlIGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZSN0ZWFyRG93bigpCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgdGVhckRvd24oKSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJc2V0Rml4dHVyZShudWxsKTsKKwl9CisKKwkvKioKKwkgKiBUZXN0IG1ldGhvZCBmb3IKKwkgKiB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5qb2JzLnNpbXVsYXRpb24uU2ltdWxhdGlvbk1hbmFnZXJFdmVudCNTaW11bGF0aW9uTWFuYWdlckV2ZW50KG9yZy5lY2xpcHNlLnN0ZW0uam9icy5zaW11bGF0aW9uLlNpbXVsYXRpb25NYW5hZ2VyLCBvcmcuZWNsaXBzZS5zdGVtLmpvYnMuc2ltdWxhdGlvbi5JU2ltdWxhdGlvbltdLCBvcmcuZWNsaXBzZS5zdGVtLmpvYnMuc2ltdWxhdGlvbi5JU2ltdWxhdGlvbltdKX0uCisJICovCisJcHVibGljIHZvaWQgdGVzdFNpbXVsYXRpb25NYW5hZ2VyRXZlbnQoKSB7CisJCWZpbmFsIFNpbXVsYXRpb25NYW5hZ2VyRXZlbnQgc2ltdWxhdGlvbk1hbmFnZXJFdmVudCA9IGdldEZpeHR1cmUoKTsKKwkJYXNzZXJ0VHJ1ZShzaW11bGF0aW9uTWFuYWdlckV2ZW50LmdldFNpbXVsYXRpb25zQWRkZWQoKS5sZW5ndGggPT0gMCk7CisJCWFzc2VydFRydWUoc2ltdWxhdGlvbk1hbmFnZXJFdmVudC5nZXRTaW11bGF0aW9uc1JlbW92ZWQoKS5sZW5ndGggPT0gMCk7CisJCS8vIGFzc2VydFRydWUoc2ltdWxhdGlvbk1hbmFnZXJFdmVudC5nZXRTaW11bGF0aW9uc0FkZGVkKCkuZXF1YWxzKAorCQkvLyBTaW11bGF0aW9uTWFuYWdlci5OT05FKSk7CisJCS8vIGFzc2VydFRydWUoc2ltdWxhdGlvbk1hbmFnZXJFdmVudC5nZXRTaW11bGF0aW9uc1JlbW92ZWQoKS5lcXVhbHMoCisJCS8vIFNpbXVsYXRpb25NYW5hZ2VyLk5PTkUpKTsKKwl9IC8vIHRlc3RTaW11bGF0aW9uTWFuYWdlckV2ZW50CisKKwkvKioKKwkgKiBUZXN0IG1ldGhvZCBmb3IKKwkgKiB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5qb2JzLnNpbXVsYXRpb24uU2ltdWxhdGlvbk1hbmFnZXJFdmVudCNnZXRTaW11bGF0aW9uc0FkZGVkKCl9LgorCSAqLworCXB1YmxpYyB2b2lkIHRlc3RHZXRTaW11bGF0aW9uc0FkZGVkKCkgeworCQlmaW5hbCBTaW11bGF0aW9uTWFuYWdlckV2ZW50IHNpbXVsYXRpb25NYW5hZ2VyRXZlbnQgPSBnZXRGaXh0dXJlKCk7CisJCWFzc2VydFRydWUoc2ltdWxhdGlvbk1hbmFnZXJFdmVudC5nZXRTaW11bGF0aW9uc0FkZGVkKCkubGVuZ3RoID09IDApOworCQkvLyBhc3NlcnRUcnVlKHNpbXVsYXRpb25NYW5hZ2VyRXZlbnQuZ2V0U2ltdWxhdGlvbnNBZGRlZCgpLmVxdWFscygKKwkJLy8JCQkJU2ltdWxhdGlvbk1hbmFnZXIuTk9ORSkpOworCX0gLy8gdGVzdEdldFNpbXVsYXRpb25zQWRkZWQKKworCS8qKgorCSAqIFRlc3QgbWV0aG9kIGZvcgorCSAqIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmpvYnMuc2ltdWxhdGlvbi5TaW11bGF0aW9uTWFuYWdlckV2ZW50I2dldFNpbXVsYXRpb25zUmVtb3ZlZCgpfS4KKwkgKi8KKwlwdWJsaWMgdm9pZCB0ZXN0R2V0U2ltdWxhdGlvbnNSZW1vdmVkKCkgeworCQlmaW5hbCBTaW11bGF0aW9uTWFuYWdlckV2ZW50IHNpbXVsYXRpb25NYW5hZ2VyRXZlbnQgPSBnZXRGaXh0dXJlKCk7CisJCWFzc2VydFRydWUoc2ltdWxhdGlvbk1hbmFnZXJFdmVudC5nZXRTaW11bGF0aW9uc1JlbW92ZWQoKS5sZW5ndGggPT0gMCk7CisJCS8vIGFzc2VydFRydWUoc2ltdWxhdGlvbk1hbmFnZXJFdmVudC5nZXRTaW11bGF0aW9uc1JlbW92ZWQoKS5lcXVhbHMoCisJCS8vIFNpbXVsYXRpb25NYW5hZ2VyLk5PTkUpKTsKKwl9CisKK30gLy8gU2ltdWxhdGlvbk1hbmFnZXJFdmVudFRlc3QKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuam9icy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9qb2JzL3NpbXVsYXRpb24vU2ltdWxhdGlvbk1hbmFnZXJUZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmpvYnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vam9icy9zaW11bGF0aW9uL1NpbXVsYXRpb25NYW5hZ2VyVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYwMDg2OTEKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmpvYnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vam9icy9zaW11bGF0aW9uL1NpbXVsYXRpb25NYW5hZ2VyVGVzdC5qYXZhCkBAIC0wLDAgKzEsMTkwIEBACisvLyBTaW11bGF0aW9uTWFuYWdlclRlc3QuamF2YQorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmpvYnMuc2ltdWxhdGlvbjsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKKworaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKKworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zY2VuYXJpby50ZXN0cy5TY2VuYXJpb1Rlc3Q7CisKKy8qKgorICogVGhpcyBjbGFzcyBpcyBhIEpVbml0IHRlc3QgZm9yIHtAbGluayBTaW11bGF0aW9uTWFuYWdlcn0uCisgKi8KK3B1YmxpYyBjbGFzcyBTaW11bGF0aW9uTWFuYWdlclRlc3QgZXh0ZW5kcyBUZXN0Q2FzZSBpbXBsZW1lbnRzCisJCUlTaW11bGF0aW9uTWFuYWdlckxpc3RlbmVyIHsKKworCS8qKgorCSAqIFRoZSBmaXh0dXJlIHRvIGJlIHRlc3RlZC4KKwkgKi8KKwlwcm90ZWN0ZWQgU2ltdWxhdGlvbk1hbmFnZXIgZml4dHVyZTsKKworCXByaXZhdGUgSVNpbXVsYXRpb25bXSBleHBlY3RlZFJlbW92ZWQ7CisKKwlwcml2YXRlIElTaW11bGF0aW9uW10gZXhwZWN0ZWRBZGRlZDsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIGZpeHR1cmUgZm9yIHRoaXMgU2ltdWxhdGlvbkV2ZW50IHRlc3QgY2FzZS4KKwkgKi8KKwlwcml2YXRlIFNpbXVsYXRpb25NYW5hZ2VyIGdldEZpeHR1cmUoKSB7CisJCXJldHVybiB0aGlzLmZpeHR1cmU7CisJfSAvLyBnZXRGaXh0dXJlCisKKwkvKioKKwkgKiBAcmV0dXJuIGEgU2ltdWxhdGlvbk1hbmFnZXIgZm9yIHRlc3RpbmcKKwkgKi8KKwlwdWJsaWMgc3RhdGljIFNpbXVsYXRpb25NYW5hZ2VyIGNyZWF0ZUZpeHR1cmUoKSB7CisJCVNpbXVsYXRpb25NYW5hZ2VyLnJlc2V0U2ltdWxhdGlvbk1hbmFnZXIoKTsKKwkJZmluYWwgU2ltdWxhdGlvbk1hbmFnZXIgbWFuYWdlciA9IFNpbXVsYXRpb25NYW5hZ2VyLmdldE1hbmFnZXIoKTsKKwkJbWFuYWdlci5jcmVhdGVTaW11bGF0aW9uKFNjZW5hcmlvVGVzdC5jcmVhdGVGaXh0dXJlKCksIG51bGwpOworCQlyZXR1cm4gbWFuYWdlcjsKKwl9IC8vIGNyZWF0ZUZpeHR1cmUKKworCS8qKgorCSAqIEBzZWUganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlI3NldFVwKCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgdm9pZCBzZXRVcCgpIHRocm93cyBFeGNlcHRpb24geworCQlzZXRGaXh0dXJlKGNyZWF0ZUZpeHR1cmUoKSk7CisJCWdldEZpeHR1cmUoKS5hZGRTaW11bGF0aW9uTWFuYWdlckxpc3RlbmVyKHRoaXMpOworCX0gLy8gc2V0VXAKKworCS8qKgorCSAqIEBzZWUganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlI3RlYXJEb3duKCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgdm9pZCB0ZWFyRG93bigpIHRocm93cyBFeGNlcHRpb24geworCQlzZXRGaXh0dXJlKG51bGwpOworCX0gLy8gdGVhckRvd24KKworCS8qKgorCSAqIEBwYXJhbSBmaXh0dXJlCisJICogICAgICAgICAgICB0aGUgc2ltdWxhdGlvbiBtYW5hZ2VyIHRvIHRlc3QKKwkgKi8KKwlwcml2YXRlIHZvaWQgc2V0Rml4dHVyZShTaW11bGF0aW9uTWFuYWdlciBmaXh0dXJlKSB7CisJCXRoaXMuZml4dHVyZSA9IGZpeHR1cmU7CisJfSAvLyBzZXRGaXh0dXJlCisKKwkvKioKKwkgKiB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5qb2JzLnNpbXVsYXRpb24uU2ltdWxhdGlvbk1hbmFnZXIjZ2V0TWFuYWdlcigpfS4KKwkgKi8KKwlwdWJsaWMgdm9pZCB0ZXN0R2V0TWFuYWdlcigpIHsKKwkJZmluYWwgU2ltdWxhdGlvbk1hbmFnZXIgbWFuYWdlciA9IGdldEZpeHR1cmUoKTsKKwkJYXNzZXJ0Tm90TnVsbChtYW5hZ2VyKTsKKwl9IC8vIHRlc3RHZXRNYW5hZ2VyCisKKwkvKioKKwkgKiB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5qb2JzLnNpbXVsYXRpb24uU2ltdWxhdGlvbk1hbmFnZXIjZ2V0QWN0aXZlU2ltdWxhdGlvbnMoKX0uCisJICovCisJcHVibGljIHZvaWQgdGVzdEdldEFjdGl2ZVNpbXVsYXRpb25zKCkgeworCQlmaW5hbCBTaW11bGF0aW9uTWFuYWdlciBtYW5hZ2VyID0gY3JlYXRlRml4dHVyZSgpOworCQlMaXN0PElTaW11bGF0aW9uPiBzaW11bGF0aW9ucyA9IG1hbmFnZXIuZ2V0QWN0aXZlU2ltdWxhdGlvbnMoKTsKKwkJYXNzZXJ0VHJ1ZShzaW11bGF0aW9ucy5zaXplKCkgPiAwKTsKKwl9IC8vIHRlc3RHZXRBY3RpdmVTaW11bGF0aW9ucworCisJLy8gLyoqCisJLy8gKiB7QGxpbmsKKwkvLyBvcmcuZWNsaXBzZS5zdGVtLmpvYnMuc2ltdWxhdGlvbi5TaW11bGF0aW9uTWFuYWdlciNjcmVhdGVTaW11bGF0aW9uKG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JQ29uZmlndXJhdGlvbkVsZW1lbnQpfS4KKwkvLyAqLworCS8vIHB1YmxpYyB2b2lkIHRlc3RDcmVhdGVTaW11bGF0aW9uSUNvbmZpZ3VyYXRpb25FbGVtZW50KCkgeworCS8vIGZpbmFsIFNpbXVsYXRpb25NYW5hZ2VyIG1hbmFnZXIgPSBjcmVhdGVGaXh0dXJlKCk7CisJLy8gZmluYWwgSVNpbXVsYXRpb24gc2ltdWxhdGlvbiA9CisJLy8gbWFuYWdlci5jcmVhdGVTaW11bGF0aW9uKGdldENvbmZpZ3VyYXRpb25FbGVtZW50KCkpOworCS8vIGFzc2VydE5vdE51bGwoc2ltdWxhdGlvbik7CisJLy8gfSAvLyB0ZXN0Q3JlYXRlU2ltdWxhdGlvbklDb25maWd1cmF0aW9uRWxlbWVudAorCisJLy8gLyoqCisJLy8gKiBAcmV0dXJuIGEgQ29uZmlndXJhdGlvbkVsZW1lbnQgdGhhdCBzcGVjaWZpZXMgYSBTY2VuYXJpbworCS8vICovCisJLy8gcHJpdmF0ZSBTY2VuYXJpbyBnZXRDb25maWd1cmF0aW9uRWxlbWVudCgpIHsKKwkvLwkJCisJLy8gfSAvLyBnZXRDb25maWd1cmF0aW9uRWxlbWVudAorCisJLyoqCisJICoge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uam9icy5zaW11bGF0aW9uLlNpbXVsYXRpb25NYW5hZ2VyI2NyZWF0ZVNpbXVsYXRpb24ob3JnLmVjbGlwc2Uuc3RlbS5zY2VuYXJpby5TY2VuYXJpbyl9LgorCSAqIFRPRE8gdGhlIFVSSSBpc24ndCAibWFwcGVkIiwgbmVlZCB0byB3b3JrIG9uIHRoaXMgdGVzdC4KKwkgKi8KKwkvLyBwdWJsaWMgdm9pZCB0ZXN0Q3JlYXRlU2ltdWxhdGlvblVSSSgpIHsKKwkvLyBmaW5hbCBTaW11bGF0aW9uTWFuYWdlciBtYW5hZ2VyID0gY3JlYXRlRml4dHVyZSgpOworCS8vIG1hbmFnZXIuY3JlYXRlU2ltdWxhdGlvbihVUkkKKwkvLyAuY3JlYXRlVVJJKFRlc3RDb25zdGFudHMuSlVOSVRfVEVTVF9TQ0VOQVJJT18xX1VSSV9TVFJJTkcpKTsKKwkvLyBhc3NlcnRUcnVlKG1hbmFnZXIuZ2V0QWN0aXZlU2ltdWxhdGlvbnMoKS5zaXplKCkgPT0gMik7CisJLy8gfSAvLyB0ZXN0Q3JlYXRlU2ltdWxhdGlvblVSSQorCS8qKgorCSAqIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmpvYnMuc2ltdWxhdGlvbi5TaW11bGF0aW9uTWFuYWdlciNjcmVhdGVTaW11bGF0aW9uKG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zY2VuYXJpby5TY2VuYXJpbyl9LgorCSAqLworCXB1YmxpYyB2b2lkIHRlc3RDcmVhdGVTaW11bGF0aW9uU2NlbmFyaW8oKSB7CisJCWZpbmFsIFNpbXVsYXRpb25NYW5hZ2VyIG1hbmFnZXIgPSBjcmVhdGVGaXh0dXJlKCk7CisJCW1hbmFnZXIuY3JlYXRlU2ltdWxhdGlvbihTY2VuYXJpb1Rlc3QuY3JlYXRlRml4dHVyZSgpLCBudWxsKTsKKwkJYXNzZXJ0VHJ1ZShtYW5hZ2VyLmdldEFjdGl2ZVNpbXVsYXRpb25zKCkuc2l6ZSgpID09IDIpOworCX0gLy8gdGVzdENyZWF0ZVNpbXVsYXRpb25TY2VuYXJpbworCisJLyoqCisJICoge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uam9icy5zaW11bGF0aW9uLlNpbXVsYXRpb25NYW5hZ2VyI2NyZWF0ZVNpbXVsYXRpb24ob3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNjZW5hcmlvLlNjZW5hcmlvKX0uCisJICovCisJcHVibGljIHZvaWQgdGVzdFNpbXVsYXRpb25TZXF1ZW5jZU51bWJlcigpIHsKKwkJZmluYWwgU2ltdWxhdGlvbk1hbmFnZXIgbWFuYWdlciA9IGNyZWF0ZUZpeHR1cmUoKTsKKwkJLy8gVGhlIG1hbmFnZXIgaXMgY3JlYXRlZCB3aXRoIGFuIGFjdGl2ZSBzaW11bGF0aW9uIHNvIHRoZSBzZXF1ZW5jZQorCQkvLyBudW1iZXIgb2YgdGhhdCBzaW11bGF0aW9uIHNob3VsZCBiZSAiMCIgKHplcm8pLgorCQlhc3NlcnRUcnVlKG1hbmFnZXIuZ2V0QWN0aXZlU2ltdWxhdGlvbnMoKS5zaXplKCkgPT0gMSk7CisJCUlTaW11bGF0aW9uIHNpbXVsYXRpb24gPSBtYW5hZ2VyLmdldEFjdGl2ZVNpbXVsYXRpb25zKCkuZ2V0KDApOworCQlhc3NlcnRUcnVlKHNpbXVsYXRpb24uZ2V0U2VxdWVuY2VOdW1iZXIoKSA9PSAwKTsKKworCQkvLyBMZXQncyBjcmVhdGUgYW5vdGhlciBzaW11bGF0aW9uIGFuZCBjaGVjayBpdHMgbnVtYmVyCisJCW1hbmFnZXIuY3JlYXRlU2ltdWxhdGlvbihTY2VuYXJpb1Rlc3QuY3JlYXRlRml4dHVyZSgpLCBudWxsKTsKKwkJYXNzZXJ0VHJ1ZShtYW5hZ2VyLmdldEFjdGl2ZVNpbXVsYXRpb25zKCkuc2l6ZSgpID09IDIpOworCQlzaW11bGF0aW9uID0gbWFuYWdlci5nZXRBY3RpdmVTaW11bGF0aW9ucygpLmdldCgxKTsKKwkJYXNzZXJ0VHJ1ZShzaW11bGF0aW9uLmdldFNlcXVlbmNlTnVtYmVyKCkgPT0gMSk7CisJfSAvLyB0ZXN0U2ltdWxhdGlvblNlcXVlbmNlTnVtYmVyCisKKwkvKioKKwkgKiB0ZXN0IGNyZWF0aW5nIGFuZCBydW5uaW5nIGEgc2ltdWxhdGlvbiBmcm9tIGEgc2NlbmFyaW8KKwkgKiAKKwkgKiBZb3UgY2FuJ3QgdGVzdCB0aGlzLiBXaGF0IGhhcHBlbnMgaXMgdGhlIGNhbGwgdG8gc2ltdWxhdGlvbnNDaGFuZ2VkCisJICogb2NjdXJzIGJlZm9yZSB0aGUgYXNzaWdubWVudCB0byBleHBlY3RlZEFkZGVkLgorCSAqLworCS8vIHB1YmxpYyB2b2lkIHRlc3RDcmVhdGVBbmRSdW5TaW11bGF0aW9uU2NlbmFyaW8oKSB7CisJLy8gZmluYWwgU2ltdWxhdGlvbk1hbmFnZXIgbWFuYWdlciA9IGdldEZpeHR1cmUoKTsKKwkvLyBmaW5hbCBJU2ltdWxhdGlvbiBuZXdTaW11bGF0aW9uID0gbWFuYWdlcgorCS8vIC5jcmVhdGVBbmRSdW5TaW11bGF0aW9uKFNjZW5hcmlvVGVzdC5jcmVhdGVGaXh0dXJlKCkpOworCS8vIGV4cGVjdGVkQWRkZWQgPSBuZXcgSVNpbXVsYXRpb25bXSB7IG5ld1NpbXVsYXRpb24gfTsKKwkvLyB9IC8vIHRlc3RDcmVhdGVBbmRSdW5TaW11bGF0aW9uU2NlbmFyaW8KKwkvKioKKwkgKiB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5qb2JzLnNpbXVsYXRpb24uU2ltdWxhdGlvbk1hbmFnZXIjYWRkU2ltdWxhdGlvbk1hbmFnZXJMaXN0ZW5lcihvcmcuZWNsaXBzZS5zdGVtLmpvYnMuc2ltdWxhdGlvbi5JU2ltdWxhdGlvbk1hbmFnZXJMaXN0ZW5lcil9LgorCSAqLworCXB1YmxpYyB2b2lkIHRlc3RBZGRTaW11bGF0aW9uTWFuYWdlckxpc3RlbmVyKCkgeworCQlmaW5hbCBTaW11bGF0aW9uTWFuYWdlciBtYW5hZ2VyID0gZ2V0Rml4dHVyZSgpOworCQltYW5hZ2VyLmFkZFNpbXVsYXRpb25NYW5hZ2VyTGlzdGVuZXIodGhpcyk7CisJfSAvLyB0ZXN0QWRkU2ltdWxhdGlvbk1hbmFnZXJMaXN0ZW5lcgorCisJLyoqCisJICoge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uam9icy5zaW11bGF0aW9uLlNpbXVsYXRpb25NYW5hZ2VyI3JlbW92ZUxpc3RlbmVyKG9yZy5lY2xpcHNlLnN0ZW0uam9icy5zaW11bGF0aW9uLklTaW11bGF0aW9uTWFuYWdlckxpc3RlbmVyKX0uCisJICovCisJcHVibGljIHZvaWQgdGVzdFJlbW92ZUxpc3RlbmVyKCkgeworCQkvLyBOb3Qgc3VyZSB3aGF0IGVsc2UgdG8gZG8gaGVyZSwgb3RoZXIgdGhhbiB0byB2ZXJpZnkgdGhhdCB0aGVyZSBhcmVuJ3QKKwkJLy8gYW55IGV4Y2VwdGlvbnMKKwkJdGVzdEFkZFNpbXVsYXRpb25NYW5hZ2VyTGlzdGVuZXIoKTsKKwkJZmluYWwgU2ltdWxhdGlvbk1hbmFnZXIgbWFuYWdlciA9IGdldEZpeHR1cmUoKTsKKwkJbWFuYWdlci5yZW1vdmVMaXN0ZW5lcih0aGlzKTsKKwl9IC8vIHRlc3RSZW1vdmVMaXN0ZW5lcgorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmpvYnMuc2ltdWxhdGlvbi5JU2ltdWxhdGlvbk1hbmFnZXJMaXN0ZW5lciNzaW11bGF0aW9uc0NoYW5nZWQob3JnLmVjbGlwc2Uuc3RlbS5qb2JzLnNpbXVsYXRpb24uU2ltdWxhdGlvbk1hbmFnZXJFdmVudCkKKwkgKi8KKwlAU3VwcHJlc3NXYXJuaW5ncygidW5xdWFsaWZpZWQtZmllbGQtYWNjZXNzIikKKwlwdWJsaWMgdm9pZCBzaW11bGF0aW9uc0NoYW5nZWQoU2ltdWxhdGlvbk1hbmFnZXJFdmVudCBldmVudCkgeworCQlhc3NlcnRUcnVlKGV2ZW50LmdldFNpbXVsYXRpb25zQWRkZWQoKS5lcXVhbHMoZXhwZWN0ZWRBZGRlZCkpOworCQlhc3NlcnRUcnVlKGV2ZW50LmdldFNpbXVsYXRpb25zUmVtb3ZlZCgpLmVxdWFscyhleHBlY3RlZFJlbW92ZWQpKTsKKwl9IC8vIHNpbXVsYXRpb25zQ2hhbmdlZAorCit9Ly8gU2ltdWxhdGlvbk1hbmFnZXJUZXN0CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmpvYnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vam9icy9zaW11bGF0aW9uL1NpbXVsYXRpb25UZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmpvYnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vam9icy9zaW11bGF0aW9uL1NpbXVsYXRpb25UZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjgwOGQ2ZgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuam9icy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9qb2JzL3NpbXVsYXRpb24vU2ltdWxhdGlvblRlc3QuamF2YQpAQCAtMCwwICsxLDE5NCBAQAorLy8gU2ltdWxhdGlvblRlc3QuamF2YQorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmpvYnMuc2ltdWxhdGlvbjsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2NlbmFyaW8udGVzdHMuU2NlbmFyaW9UZXN0OworCisvKioKKyAqIFRoaXMgY2xhc3MgaXMgYSBKVW5pdCB0ZXN0IGNhc2UgZm9yIHRoZSBjbGFzcyBTaW11bGF0aW9uLmphdmEKKyAqLworcHVibGljIGNsYXNzIFNpbXVsYXRpb25UZXN0IGV4dGVuZHMgVGVzdENhc2UgaW1wbGVtZW50cyBJU2ltdWxhdGlvbkxpc3RlbmVyIHsKKworCS8qKgorCSAqIFRoZSBzaW11bGF0aW9uIHdlIHRlc3QuCisJICovCisJcHJpdmF0ZSBJU2ltdWxhdGlvbiBmaXh0dXJlOworCisJLyoqCisJICogVGhpcyBpcyB0aGUgc3RhdGUgdGhhdCB3ZSdyZSBleHBlY3RpbmcgdGhlIGZpeHR1cmUgc2ltdWxhdGlvbiB0byByZXBvcnQuCisJICovCisJcHJpdmF0ZSBTaW11bGF0aW9uU3RhdGUgZXhwZWN0ZWRTaW11bGF0aW9uU3RhdGU7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBmaXh0dXJlIGZvciB0aGlzIFNpbXVsYXRpb25FdmVudCB0ZXN0IGNhc2UuCisJICovCisJcHJpdmF0ZSBJU2ltdWxhdGlvbiBnZXRGaXh0dXJlKCkgeworCQlyZXR1cm4gdGhpcy5maXh0dXJlOworCX0gLy8gZ2V0Rml4dHVyZQorCisJLyoqCisJICogQHJldHVybiBhIFNpbXVsYXRpb24gZm9yIHRlc3RpbmcKKwkgKi8KKwlwdWJsaWMgc3RhdGljIElTaW11bGF0aW9uIGNyZWF0ZUZpeHR1cmUoKSB7CisJCWZpbmFsIElTaW11bGF0aW9uIHNpbXVsYXRpb24gPSBTaW11bGF0aW9uTWFuYWdlci5nZXRNYW5hZ2VyKCkKKwkJCQkuY3JlYXRlU2ltdWxhdGlvbihTY2VuYXJpb1Rlc3QuY3JlYXRlRml4dHVyZSgpLCBudWxsKTsKKwkJcmV0dXJuIHNpbXVsYXRpb247CisJfSAvLyBjcmVhdGVGaXh0dXJlCisKKwkvKioKKwkgKiBAc2VlIGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZSNzZXRVcCgpCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgc2V0VXAoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJc2V0Rml4dHVyZShjcmVhdGVGaXh0dXJlKCkpOworCQlnZXRGaXh0dXJlKCkuYWRkU2ltdWxhdGlvbkxpc3RlbmVyKHRoaXMpOworCX0gLy8gc2V0VXAKKworCS8qKgorCSAqIEBzZWUganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlI3RlYXJEb3duKCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgdm9pZCB0ZWFyRG93bigpIHRocm93cyBFeGNlcHRpb24geworCQlzZXRGaXh0dXJlKG51bGwpOworCX0gLy8gdGVhckRvd24KKworCS8qKgorCSAqIEBwYXJhbSBvYmplY3QKKwkgKi8KKwlwcml2YXRlIHZvaWQgc2V0Rml4dHVyZShJU2ltdWxhdGlvbiBmaXh0dXJlKSB7CisJCXRoaXMuZml4dHVyZSA9IGZpeHR1cmU7CisJfQorCisJLyoqCisJICoge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uam9icy5zaW11bGF0aW9uLlNpbXVsYXRpb24jU2ltdWxhdGlvbihvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2NlbmFyaW8uU2NlbmFyaW8sIGludCl9CisJICovCisJcHVibGljIHZvaWQgdGVzdFNpbXVsYXRpb25TY2VuYXJpbygpIHsKKwkJZmluYWwgSVNpbXVsYXRpb24gc2ltdWxhdGlvbiA9IGdldEZpeHR1cmUoKTsKKwkJYXNzZXJ0Tm90TnVsbChzaW11bGF0aW9uLmdldFNjZW5hcmlvKCkpOworCX0gLy8gdGVzdFNpbXVsYXRpb25TY2VuYXJpbworCisJLyoqCisJICoge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uam9icy5zaW11bGF0aW9uLlNpbXVsYXRpb24jZ2V0U2ltdWxhdGlvblN0YXRlKCl9LgorCSAqLworCXB1YmxpYyB2b2lkIHRlc3RHZXRTaW11bGF0aW9uU3RhdGUoKSB7CisJCWZpbmFsIElTaW11bGF0aW9uIHNpbXVsYXRpb24gPSBnZXRGaXh0dXJlKCk7CisJCWFzc2VydFRydWUoc2ltdWxhdGlvbi5nZXRTaW11bGF0aW9uU3RhdGUoKS5lcXVhbHMoCisJCQkJU2ltdWxhdGlvblN0YXRlLlBBVVNFRCkpOworCX0gLy8gdGVzdEdldFNpbXVsYXRpb25TdGF0ZQorCisJLy8gVGhlc2UgYXJlIGNvbW1lbnRlZCBvdXQgYmVjYXVzZSBtb3JlIHdvcmsgbmVlZHMgdG8gYmUgZG9uZSB0byBlbmFibGUgdGhlCisJLy8gcnVubmluZyBvZiB0aGUgdGVzdHMgb3V0IHNpZGUgb2YgZWNsaXBzZS4KKworCS8vIC8qKgorCS8vICoge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uam9icy5zaW11bGF0aW9uLlNpbXVsYXRpb24jcnVuKCl9LgorCS8vICovCisJLy8gcHVibGljIHZvaWQgdGVzdFJ1blNpbXVsYXRpb24oKSB7CisJLy8gZmluYWwgSVNpbXVsYXRpb24gc2ltdWxhdGlvbiA9IGdldEZpeHR1cmUoKTsKKwkvLyBleHBlY3RlZFNpbXVsYXRpb25TdGF0ZSA9IFNpbXVsYXRpb25TdGF0ZS5SVU5OSU5HOworCS8vIHNpbXVsYXRpb24ucnVuKCk7CisJLy8gc2ltdWxhdGlvbi5zdG9wKCk7CisJLy8gfSAvLyB0ZXN0UnVuU2ltdWxhdGlvbgorCS8vCisJLy8gLyoqCisJLy8gKiB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5qb2JzLnNpbXVsYXRpb24uU2ltdWxhdGlvbiNwYXVzZSgpfS4KKwkvLyAqLworCS8vIHB1YmxpYyB2b2lkIHRlc3RQYXVzZVNpbXVsYXRpb24oKSB7CisJLy8gZmluYWwgSVNpbXVsYXRpb24gc2ltdWxhdGlvbiA9IGdldEZpeHR1cmUoKTsKKwkvLyBleHBlY3RlZFNpbXVsYXRpb25TdGF0ZSA9IFNpbXVsYXRpb25TdGF0ZS5SVU5OSU5HOworCS8vIHNpbXVsYXRpb24ucnVuKCk7CisJLy8gZXhwZWN0ZWRTaW11bGF0aW9uU3RhdGUgPSBTaW11bGF0aW9uU3RhdGUuUEFVU0VEOworCS8vIHNpbXVsYXRpb24uc3RvcCgpOworCS8vIH0gLy8gdGVzdFBhdXNlU2ltdWxhdGlvbgorCS8vCisJLy8gLyoqCisJLy8gKiB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5qb2JzLnNpbXVsYXRpb24uU2ltdWxhdGlvbiNyZXNldCgpfS4KKwkvLyAqLworCS8vIHB1YmxpYyB2b2lkIHRlc3RSZXNldFNpbXVsYXRpb24oKSB7CisJLy8gZmluYWwgSVNpbXVsYXRpb24gc2ltdWxhdGlvbiA9IGdldEZpeHR1cmUoKTsKKwkvLyBleHBlY3RlZFNpbXVsYXRpb25TdGF0ZSA9IFNpbXVsYXRpb25TdGF0ZS5SVU5OSU5HOworCS8vIHNpbXVsYXRpb24ucnVuKCk7CisJLy8gZXhwZWN0ZWRTaW11bGF0aW9uU3RhdGUgPSBTaW11bGF0aW9uU3RhdGUuUlVOTklORzsKKwkvLyBzaW11bGF0aW9uLnBhdXNlKCk7CisJLy8gZXhwZWN0ZWRTaW11bGF0aW9uU3RhdGUgPSBTaW11bGF0aW9uU3RhdGUuUkVTRVQ7CisJLy8gc2ltdWxhdGlvbi5yZXNldCgpOworCS8vIHNpbXVsYXRpb24uc3RvcCgpOworCS8vIH0gLy8gdGVzdFJlc2V0U2ltdWxhdGlvbgorCisvLwkvKioKKy8vCSAqIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmpvYnMuc2ltdWxhdGlvbi5TaW11bGF0aW9uI3N0ZXAoKX0uCisvLwkgKi8KKy8vCUBTdXBwcmVzc1dhcm5pbmdzKCJ1bnF1YWxpZmllZC1maWVsZC1hY2Nlc3MiKQorLy8JcHVibGljIHZvaWQgdGVzdFN0ZXBTaW11bGF0aW9uKCkgeworLy8JCWZpbmFsIElTaW11bGF0aW9uIHNpbXVsYXRpb24gPSBnZXRGaXh0dXJlKCk7CisvLwkJZXhwZWN0ZWRTaW11bGF0aW9uU3RhdGUgPSBTaW11bGF0aW9uU3RhdGUuUlVOTklORzsKKy8vCQlzaW11bGF0aW9uLnBhdXNlKCk7CisvLwkJZXhwZWN0ZWRTaW11bGF0aW9uU3RhdGUgPSBTaW11bGF0aW9uU3RhdGUuUEFVU0VEOworLy8JCXNpbXVsYXRpb24ucGF1c2UoKTsKKy8vCQlleHBlY3RlZFNpbXVsYXRpb25TdGF0ZSA9IFNpbXVsYXRpb25TdGF0ZS5DT01QTEVURURfQ1lDTEU7CisvLwkJc2ltdWxhdGlvbi5zdGVwKCk7CisvLwkJZXhwZWN0ZWRTaW11bGF0aW9uU3RhdGUgPSBTaW11bGF0aW9uU3RhdGUuU1RPUFBFRDsKKy8vCQlzaW11bGF0aW9uLnN0b3AoKTsKKy8vCX0gLy8gdGVzdFN0ZXBTaW11bGF0aW9uCisKKy8vCS8qKgorLy8JICoge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uam9icy5zaW11bGF0aW9uLlNpbXVsYXRpb24jc3RvcCgpfS4KKy8vCSAqLworLy8JQFN1cHByZXNzV2FybmluZ3MoInVucXVhbGlmaWVkLWZpZWxkLWFjY2VzcyIpCisvLwlwdWJsaWMgdm9pZCB0ZXN0U3RvcFNpbXVsYXRpb24oKSB7CisvLwkJZmluYWwgSVNpbXVsYXRpb24gc2ltdWxhdGlvbiA9IGdldEZpeHR1cmUoKTsKKy8vCQlleHBlY3RlZFNpbXVsYXRpb25TdGF0ZSA9IFNpbXVsYXRpb25TdGF0ZS5SVU5OSU5HOworLy8JCXNpbXVsYXRpb24ucGF1c2UoKTsKKy8vCQlleHBlY3RlZFNpbXVsYXRpb25TdGF0ZSA9IFNpbXVsYXRpb25TdGF0ZS5TVE9QUEVEOworLy8JCXNpbXVsYXRpb24uc3RvcCgpOworLy8JfSAvLyB0ZXN0U3RvcFNpbXVsYXRpb24KKworCS8qKgorCSAqIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmpvYnMuc2ltdWxhdGlvbi5TaW11bGF0aW9uI2dldFNjZW5hcmlvKCl9LgorCSAqLworCXB1YmxpYyB2b2lkIHRlc3RHZXRTY2VuYXJpbygpIHsKKwkJZmluYWwgSVNpbXVsYXRpb24gc2ltdWxhdGlvbiA9IGdldEZpeHR1cmUoKTsKKwkJYXNzZXJ0Tm90TnVsbChzaW11bGF0aW9uLmdldFNjZW5hcmlvKCkpOworCX0gLy8gdGVzdEdldFNjZW5hcmlvCisKKwkvKioKKwkgKiB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5qb2JzLnNpbXVsYXRpb24uU2ltdWxhdGlvbiNhZGRTaW11bGF0aW9uTGlzdGVuZXIob3JnLmVjbGlwc2Uuc3RlbS5qb2JzLnNpbXVsYXRpb24uSVNpbXVsYXRpb25MaXN0ZW5lcil9LgorCSAqLworCXB1YmxpYyB2b2lkIHRlc3RBZGRTaW11bGF0aW9uTGlzdGVuZXIoKSB7CisJCWZpbmFsIElTaW11bGF0aW9uIHNpbXVsYXRpb24gPSBnZXRGaXh0dXJlKCk7CisJCXNpbXVsYXRpb24uYWRkU2ltdWxhdGlvbkxpc3RlbmVyKHRoaXMpOworCX0gLy8gdGVzdEFkZFNpbXVsYXRpb25MaXN0ZW5lcgorCisJLyoqCisJICoge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uam9icy5zaW11bGF0aW9uLlNpbXVsYXRpb24jcmVtb3ZlU2ltdWxhdGlvbkxpc3RlbmVyKG9yZy5lY2xpcHNlLnN0ZW0uam9icy5zaW11bGF0aW9uLklTaW11bGF0aW9uTGlzdGVuZXIpfS4KKwkgKi8KKwlwdWJsaWMgdm9pZCB0ZXN0UmVtb3ZlU2ltdWxhdGlvbkxpc3RlbmVyKCkgeworCQkvLyBOb3Qgc3VyZSB3aGF0IGVsc2UgdG8gZG8gaGVyZSwgb3RoZXIgdGhhbiB0byB2ZXJpZnkgdGhhdCB0aGVyZSBhcmVuJ3QKKwkJLy8gYW55IGV4Y2VwdGlvbnMKKwkJdGVzdEFkZFNpbXVsYXRpb25MaXN0ZW5lcigpOworCQlmaW5hbCBJU2ltdWxhdGlvbiBzaW11bGF0aW9uID0gZ2V0Rml4dHVyZSgpOworCQlzaW11bGF0aW9uLnJlbW92ZVNpbXVsYXRpb25MaXN0ZW5lcih0aGlzKTsKKwl9IC8vIHRlc3RSZW1vdmVTaW11bGF0aW9uTGlzdGVuZXIKKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5qb2JzLnNpbXVsYXRpb24uSVNpbXVsYXRpb25MaXN0ZW5lciNzaW11bGF0aW9uQ2hhbmdlZChvcmcuZWNsaXBzZS5zdGVtLmpvYnMuc2ltdWxhdGlvbi5TaW11bGF0aW9uRXZlbnQpCisJICovCisJQFN1cHByZXNzV2FybmluZ3MoInVucXVhbGlmaWVkLWZpZWxkLWFjY2VzcyIpCisJcHVibGljIHZvaWQgc2ltdWxhdGlvbkNoYW5nZWQoU2ltdWxhdGlvbkV2ZW50IGV2ZW50KSB7CisJCWFzc2VydFRydWUoIkV4cGVjdGVkIHN0YXRlIFwiIiArIGV2ZW50LmdldFNpbXVsYXRpb25TdGF0ZSgpCisJCQkJKyAiXCIgYnV0IHJlY2VpdmVkIFwiIiArIGV4cGVjdGVkU2ltdWxhdGlvblN0YXRlICsgIlwiIiwKKwkJZXhwZWN0ZWRTaW11bGF0aW9uU3RhdGUuZXF1YWxzKGV2ZW50LmdldFNpbXVsYXRpb25TdGF0ZSgpKSk7CisJfSAvLyBzaW11bGF0aW9uQ2hhbmdlZAorCit9IC8vIFNpbXVsYXRpb25UZXN0CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmpvYnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdGVzdHMvam9icy9BY3RpdmF0b3IuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuam9icy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS90ZXN0cy9qb2JzL0FjdGl2YXRvci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRkZjBjNWUKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmpvYnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdGVzdHMvam9icy9BY3RpdmF0b3IuamF2YQpAQCAtMCwwICsxLDYzIEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0udGVzdHMuam9iczsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5wbHVnaW4uQWJzdHJhY3RVSVBsdWdpbjsKK2ltcG9ydCBvcmcub3NnaS5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dDsKKworLyoqCisgKiBUaGUgYWN0aXZhdG9yIGNsYXNzIGNvbnRyb2xzIHRoZSBwbHVnLWluIGxpZmUgY3ljbGUKKyAqLworcHVibGljIGNsYXNzIEFjdGl2YXRvciBleHRlbmRzIEFic3RyYWN0VUlQbHVnaW4geworCisJLyoqCisJICogVGhlIHBsdWctaW4gSUQKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBQTFVHSU5fSUQgPSAib3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5qb2JzIjsgLy8kTk9OLU5MUy0xJAorCisJLy8gVGhlIHNoYXJlZCBpbnN0YW5jZQorCXByaXZhdGUgc3RhdGljIEFjdGl2YXRvciBwbHVnaW47CisJCisJLyoqCisJICogVGhlIGNvbnN0cnVjdG9yCisJICovCisJcHVibGljIEFjdGl2YXRvcigpIHsKKwkJcGx1Z2luID0gdGhpczsKKwl9CisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnVpLnBsdWdpbi5BYnN0cmFjdFVJUGx1Z2luI3N0YXJ0KG9yZy5vc2dpLmZyYW1ld29yay5CdW5kbGVDb250ZXh0KQorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIHN0YXJ0KEJ1bmRsZUNvbnRleHQgY29udGV4dCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCXN1cGVyLnN0YXJ0KGNvbnRleHQpOworCX0KKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2UudWkucGx1Z2luLkFic3RyYWN0VUlQbHVnaW4jc3RvcChvcmcub3NnaS5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBzdG9wKEJ1bmRsZUNvbnRleHQgY29udGV4dCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCXBsdWdpbiA9IG51bGw7CisJCXN1cGVyLnN0b3AoY29udGV4dCk7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgc2hhcmVkIGluc3RhbmNlCisJICoKKwkgKiBAcmV0dXJuIHRoZSBzaGFyZWQgaW5zdGFuY2UKKwkgKi8KKwlwdWJsaWMgc3RhdGljIEFjdGl2YXRvciBnZXREZWZhdWx0KCkgeworCQlyZXR1cm4gcGx1Z2luOworCX0KKworfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5qb2JzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3Rlc3RzL2pvYnMvSm9ic0FsbFRlc3RzLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmpvYnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdGVzdHMvam9icy9Kb2JzQWxsVGVzdHMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZTc4YmE0Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5qb2JzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3Rlc3RzL2pvYnMvSm9ic0FsbFRlc3RzLmphdmEKQEAgLTAsMCArMSw2NiBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmpvYnM7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5qb2JzLnNpbXVsYXRpb24uU2ltdWxhdGlvbkFsbFRlc3RzOworCitpbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3Q7CitpbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RTdWl0ZTsKK2ltcG9ydCBqdW5pdC50ZXh0dWkuVGVzdFJ1bm5lcjsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiBBIHRlc3Qgc3VpdGUgZm9yIHRoZSAnPGVtPjxiPnN0YW5kYXJkPC9iPjwvZW0+JworICogcGFja2FnZS4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBKb2JzQWxsVGVzdHMgZXh0ZW5kcyBUZXN0U3VpdGUgeworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogCisJICogQHBhcmFtIGFyZ3MKKwkgKiAKKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgeworCQlUZXN0UnVubmVyLnJ1bihzdWl0ZSgpKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEByZXR1cm4KKwkgKiAKKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHN0YXRpYyBUZXN0IHN1aXRlKCkgeworCQlUZXN0U3VpdGUgc3VpdGUgPSBuZXcgSm9ic0FsbFRlc3RzKCJKb2JzIFRlc3RzIik7IC8vJE5PTi1OTFMtMSQKKwkJc3VpdGUuYWRkVGVzdChTaW11bGF0aW9uQWxsVGVzdHMuc3VpdGUoKSk7CisJCS8vc3VpdGUuYWRkVGVzdChCYXRjaEFsbFRlc3RzLnN1aXRlKCkpOworCisJCXJldHVybiBzdWl0ZTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBwYXJhbSBuYW1lCisJICogCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBKb2JzQWxsVGVzdHMoU3RyaW5nIG5hbWUpIHsKKwkJc3VwZXIobmFtZSk7CisJfQorCit9IC8vIFN0YW5kYXJkVGVzdHMKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuam9icy90ZXN0LnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuam9icy90ZXN0LnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNDkxMDdhCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5qb2JzL3Rlc3QueG1sCkBAIC0wLDAgKzEsNTUgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+CisKKzxwcm9qZWN0IG5hbWU9InRlc3RzdWl0ZSIgZGVmYXVsdD0icnVuIiBiYXNlZGlyPSIuIj4KKyAgPCEtLSBUaGUgcHJvcGVydHkgJHtlY2xpcHNlLWhvbWV9IHNob3VsZCBiZSBwYXNzZWQgaW50byB0aGlzIHNjcmlwdCAtLT4KKyAgPCEtLSBTZXQgYSBtZWFuaW5nZnVsIGRlZmF1bHQgdmFsdWUgZm9yIHdoZW4gaXQgaXMgbm90LiAtLT4KKyAgPHByb3BlcnR5IG5hbWU9ImVjbGlwc2UtaG9tZSIgdmFsdWU9IiIvPgorCisKKyAgPCEtLSBzZXRzIHRoZSBwcm9wZXJ0aWVzIGVjbGlwc2UtaG9tZSwgYW5kIGxpYnJhcnktZmlsZSAtLT4KKyAgPHByb3BlcnR5IG5hbWU9InBsdWdpbi1uYW1lIiB2YWx1ZT0ib3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5qb2JzIi8+CisgIDxwcm9wZXJ0eSBuYW1lPSJsaWJyYXJ5LWZpbGUiCisgICAgICAgICAgICB2YWx1ZT0iJHtlY2xpcHNlLWhvbWV9L3BsdWdpbnMvb3JnLmVjbGlwc2UudGVzdF8zLjMuMC9saWJyYXJ5LnhtbCIvPgorCisgIDwhLS0gVGhpcyB0YXJnZXQgaG9sZHMgYWxsIGluaXRpYWxpemF0aW9uIGNvZGUgdGhhdCBuZWVkcyB0byBiZSBkb25lIGZvciAtLT4KKyAgPCEtLSBhbGwgdGVzdHMgdGhhdCBhcmUgdG8gYmUgcnVuLiBJbml0aWFsaXphdGlvbiBmb3IgaW5kaXZpZHVhbCB0ZXN0cyAtLT4KKyAgPCEtLSBzaG91bGQgYmUgZG9uZSB3aXRoaW4gdGhlIGJvZHkgb2YgdGhlIHN1aXRlIHRhcmdldC4gLS0+CisgIDx0YXJnZXQgbmFtZT0iaW5pdCI+CisgICAgPHRzdGFtcC8+CisgICAgPGRlbGV0ZT4KKyAgICAgIDxmaWxlc2V0IGRpcj0iJHtlY2xpcHNlLWhvbWV9IiBpbmNsdWRlcz0ib3JnKi54bWwiLz4KKyAgICA8L2RlbGV0ZT4KKyAgPC90YXJnZXQ+CisKKyAgPCEtLSBUaGlzIHRhcmdldCBkZWZpbmVzIHRoZSB0ZXN0cyB0aGF0IG5lZWQgdG8gYmUgcnVuLiAtLT4KKyAgPHRhcmdldCBuYW1lPSJzdWl0ZSI+CisgICAgPHByb3BlcnR5IG5hbWU9ImRhdGEtZGlyIiB2YWx1ZT0iJHtlY2xpcHNlLWhvbWV9L3dvcmtzcGFjZSIvPgorICAgIDxkZWxldGUgZGlyPSIke2RhdGEtZGlyfSIgcXVpZXQ9InRydWUiLz4KKyAgICA8YW50IHRhcmdldD0idWktdGVzdCIgYW50ZmlsZT0iJHtsaWJyYXJ5LWZpbGV9IiBkaXI9IiR7ZWNsaXBzZS1ob21lfSI+CisgICAgICA8cHJvcGVydHkgbmFtZT0iZGF0YS1kaXIiIHZhbHVlPSIke2RhdGEtZGlyfSIvPgorICAgICAgPHByb3BlcnR5IG5hbWU9InBsdWdpbi1uYW1lIiB2YWx1ZT0iJHtwbHVnaW4tbmFtZX0iLz4KKyAgICAgIDwhLS0KKyAgICAgIDxwcm9wZXJ0eSBuYW1lPSJjbGFzc25hbWUiIHZhbHVlPSJvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQudGVzdHMuU3RhbmRhcmRUZXN0cyIvPgorICAgICAgLS0+CisgICAgPC9hbnQ+CisgIDwvdGFyZ2V0PgorCisgIDwhLS0gVGhpcyB0YXJnZXQgaG9sZHMgY29kZSB0byBjbGVhbnVwIHRoZSB0ZXN0aW5nIGVudmlyb25tZW50IGFmdGVyIC0tPgorICA8IS0tIGFmdGVyIGFsbCBvZiB0aGUgdGVzdHMgaGF2ZSBiZWVuIHJ1bi4gWW91IGNhbiB1c2UgdGhpcyB0YXJnZXQgdG8gLS0+CisgIDwhLS0gZGVsZXRlIHRlbXBvcmFyeSBmaWxlcyB0aGF0IGhhdmUgYmVlbiBjcmVhdGVkLiAtLT4KKyAgPHRhcmdldCBuYW1lPSJjbGVhbnVwIj4KKyAgPC90YXJnZXQ+CisKKyAgPCEtLSBUaGlzIHRhcmdldCBydW5zIHRoZSB0ZXN0IHN1aXRlLiBBbnkgYWN0aW9ucyB0aGF0IG5lZWQgdG8gaGFwcGVuIC0tPgorICA8IS0tIGFmdGVyIGFsbCB0aGUgdGVzdHMgaGF2ZSBiZWVuIHJ1biBzaG91bGQgZ28gaGVyZS4gLS0+CisgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LHN1aXRlLGNsZWFudXAiPgorICAgIDxhbnQgdGFyZ2V0PSJjb2xsZWN0IiBhbnRmaWxlPSIke2xpYnJhcnktZmlsZX0iIGRpcj0iJHtlY2xpcHNlLWhvbWV9Ij4KKyAgICAgIDxwcm9wZXJ0eSBuYW1lPSJpbmNsdWRlcyIgdmFsdWU9Im9yZyoueG1sIi8+CisgICAgICA8cHJvcGVydHkgbmFtZT0ib3V0cHV0LWZpbGUiIHZhbHVlPSIke3BsdWdpbi1uYW1lfS54bWwiLz4KKyAgICA8L2FudD4KKyAgPC90YXJnZXQ+CisKKyAgPCEtLSBUaGlzIHRhcmdldCBydW5zIHRoZSBwZXJmb3JtYW5jZSB0ZXN0IHN1aXRlcy4gLS0+CisgIDx0YXJnZXQgbmFtZT0icGVyZm9ybWFuY2UiPgorICA8L3RhcmdldD4KKzwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMucG9wdWxhdGlvbm1vZGVscy8uY2xhc3NwYXRoIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5wb3B1bGF0aW9ubW9kZWxzLy5jbGFzc3BhdGgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzA0ZTg2MQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMucG9wdWxhdGlvbm1vZGVscy8uY2xhc3NwYXRoCkBAIC0wLDAgKzEsNyBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxjbGFzc3BhdGg+CisJPGNsYXNzcGF0aGVudHJ5IGtpbmQ9InNyYyIgcGF0aD0ic3JjIi8+CisJPGNsYXNzcGF0aGVudHJ5IGtpbmQ9ImNvbiIgcGF0aD0ib3JnLmVjbGlwc2UuamR0LmxhdW5jaGluZy5KUkVfQ09OVEFJTkVSL29yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC5kZWJ1Zy51aS5sYXVuY2hlci5TdGFuZGFyZFZNVHlwZS9KMlNFLTEuNSIvPgorCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJjb24iIHBhdGg9Im9yZy5lY2xpcHNlLnBkZS5jb3JlLnJlcXVpcmVkUGx1Z2lucyIvPgorCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJvdXRwdXQiIHBhdGg9ImJpbiIvPgorPC9jbGFzc3BhdGg+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnBvcHVsYXRpb25tb2RlbHMvLnByb2plY3QgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnBvcHVsYXRpb25tb2RlbHMvLnByb2plY3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWExYjU0YgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMucG9wdWxhdGlvbm1vZGVscy8ucHJvamVjdApAQCAtMCwwICsxLDI4IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPHByb2plY3REZXNjcmlwdGlvbj4KKwk8bmFtZT5vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnBvcHVsYXRpb25tb2RlbHM8L25hbWU+CisJPGNvbW1lbnQ+PC9jb21tZW50PgorCTxwcm9qZWN0cz4KKwk8L3Byb2plY3RzPgorCTxidWlsZFNwZWM+CisJCTxidWlsZENvbW1hbmQ+CisJCQk8bmFtZT5vcmcuZWNsaXBzZS5qZHQuY29yZS5qYXZhYnVpbGRlcjwvbmFtZT4KKwkJCTxhcmd1bWVudHM+CisJCQk8L2FyZ3VtZW50cz4KKwkJPC9idWlsZENvbW1hbmQ+CisJCTxidWlsZENvbW1hbmQ+CisJCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuTWFuaWZlc3RCdWlsZGVyPC9uYW1lPgorCQkJPGFyZ3VtZW50cz4KKwkJCTwvYXJndW1lbnRzPgorCQk8L2J1aWxkQ29tbWFuZD4KKwkJPGJ1aWxkQ29tbWFuZD4KKwkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5TY2hlbWFCdWlsZGVyPC9uYW1lPgorCQkJPGFyZ3VtZW50cz4KKwkJCTwvYXJndW1lbnRzPgorCQk8L2J1aWxkQ29tbWFuZD4KKwk8L2J1aWxkU3BlYz4KKwk8bmF0dXJlcz4KKwkJPG5hdHVyZT5vcmcuZWNsaXBzZS5qZHQuY29yZS5qYXZhbmF0dXJlPC9uYXR1cmU+CisJCTxuYXR1cmU+b3JnLmVjbGlwc2UucGRlLlBsdWdpbk5hdHVyZTwvbmF0dXJlPgorCTwvbmF0dXJlcz4KKzwvcHJvamVjdERlc2NyaXB0aW9uPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5wb3B1bGF0aW9ubW9kZWxzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMucG9wdWxhdGlvbm1vZGVscy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjQzZTI0MAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMucG9wdWxhdGlvbm1vZGVscy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMKQEAgLTAsMCArMSw4IEBACisjV2VkIE1hciAzMCAxNToyODoxMSBQRFQgMjAxMQorZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvZGVnZW4uaW5saW5lSnNyQnl0ZWNvZGU9ZW5hYmxlZAorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29kZWdlbi50YXJnZXRQbGF0Zm9ybT0xLjUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvbXBsaWFuY2U9MS41CitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmFzc2VydElkZW50aWZpZXI9ZXJyb3IKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZW51bUlkZW50aWZpZXI9ZXJyb3IKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnNvdXJjZT0xLjUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMucG9wdWxhdGlvbm1vZGVscy9NRVRBLUlORi9NQU5JRkVTVC5NRiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMucG9wdWxhdGlvbm1vZGVscy9NRVRBLUlORi9NQU5JRkVTVC5NRgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNTcyZjhlCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5wb3B1bGF0aW9ubW9kZWxzL01FVEEtSU5GL01BTklGRVNULk1GCkBAIC0wLDAgKzEsMTkgQEAKK01hbmlmZXN0LVZlcnNpb246IDEuMAorQnVuZGxlLU1hbmlmZXN0VmVyc2lvbjogMgorQnVuZGxlLU5hbWU6ICVwbHVnaW5OYW1lCitCdW5kbGUtU3ltYm9saWNOYW1lOiBvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnBvcHVsYXRpb25tb2RlbHM7c2luZ2xldG9uOj10cnVlCitCdW5kbGUtVmVyc2lvbjogMS4yLjEKK0J1bmRsZS1DbGFzc1BhdGg6IC4KK0J1bmRsZS1WZW5kb3I6ICVwcm92aWRlck5hbWUKK0J1bmRsZS1Mb2NhbGl6YXRpb246IHBsdWdpbgorQnVuZGxlLVJlcXVpcmVkRXhlY3V0aW9uRW52aXJvbm1lbnQ6IEphdmFTRS0xLjYKK0V4cG9ydC1QYWNrYWdlOiBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQudGVzdHMKK1JlcXVpcmUtQnVuZGxlOiBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUsCisgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzO3Zpc2liaWxpdHk6PXJlZXhwb3J0LAorIG9yZy5lY2xpcHNlLnN0ZW0uY29yZTt2aXNpYmlsaXR5Oj1yZWV4cG9ydCwKKyBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zO3Zpc2liaWxpdHk6PXJlZXhwb3J0LAorIG9yZy5lY2xpcHNlLmVtZi5lY29yZTt2aXNpYmlsaXR5Oj1yZWV4cG9ydCwKKyBvcmcuZWNsaXBzZS5lbWYuZWNvcmUueG1pO3Zpc2liaWxpdHk6PXJlZXhwb3J0LAorIG9yZy5qdW5pdDt2aXNpYmlsaXR5Oj1yZWV4cG9ydCwKKyBvcmcuZWNsaXBzZS5zdGVtLnNvbHZlcnMuZmQ7YnVuZGxlLXZlcnNpb249IjEuMS4wIgorQnVuZGxlLUFjdGl2YXRpb25Qb2xpY3k6IGxhenkKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMucG9wdWxhdGlvbm1vZGVscy9idWlsZC5wcm9wZXJ0aWVzIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5wb3B1bGF0aW9ubW9kZWxzL2J1aWxkLnByb3BlcnRpZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmNmNmVlMAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMucG9wdWxhdGlvbm1vZGVscy9idWlsZC5wcm9wZXJ0aWVzCkBAIC0wLDAgKzEsMTIgQEAKKworIyA8Y29weXJpZ2h0PgorIyA8L2NvcHlyaWdodD4KKyMKKyMgJElkJAorCitiaW4uaW5jbHVkZXMgPSAuLFwKKyAgICAgICAgICAgICAgIE1FVEEtSU5GLyxcCisgICAgICAgICAgICAgICBwbHVnaW4ucHJvcGVydGllcworamFycy5jb21waWxlLm9yZGVyID0gLgorc291cmNlLi4gPSBzcmMvCitvdXRwdXQuLiA9IGJpbi8KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMucG9wdWxhdGlvbm1vZGVscy9wbHVnaW4ucHJvcGVydGllcyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMucG9wdWxhdGlvbm1vZGVscy9wbHVnaW4ucHJvcGVydGllcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MTVhYjMyCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5wb3B1bGF0aW9ubW9kZWxzL3BsdWdpbi5wcm9wZXJ0aWVzCkBAIC0wLDAgKzEsOCBAQAorCisjIDxjb3B5cmlnaHQ+CisjIDwvY29weXJpZ2h0PgorIworIyAkSWQkCisKK3BsdWdpbk5hbWUgPSBTdGFuZGFyZCBUZXN0cworcHJvdmlkZXJOYW1lID0gd3d3LmV4YW1wbGUub3JnCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnBvcHVsYXRpb25tb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vcG9wdWxhdGlvbm1vZGVscy9zdGFuZGFyZC90ZXN0cy9BZ2VHcm91cFRlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMucG9wdWxhdGlvbm1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9wb3B1bGF0aW9ubW9kZWxzL3N0YW5kYXJkL3Rlc3RzL0FnZUdyb3VwVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUzNDgzOWQKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnBvcHVsYXRpb25tb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vcG9wdWxhdGlvbm1vZGVscy9zdGFuZGFyZC90ZXN0cy9BZ2VHcm91cFRlc3QuamF2YQpAQCAtMCwwICsxLDc5IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC50ZXN0czsNCisNCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiANCisgKiBDb3B5cmlnaHQgKGMpIDIwMTEgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuIA0KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgDQorICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wIA0KKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0IA0KKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sIA0KKyAqIA0KKyAqIENvbnRyaWJ1dG9yczogDQorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiANCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCisNCitpbXBvcnQganVuaXQudGV4dHVpLlRlc3RSdW5uZXI7DQorDQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5BZ2VHcm91cDsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkRmFjdG9yeTsNCisNCisvKioNCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKyAqIEEgdGVzdCBjYXNlIGZvciB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+QWdlIEdyb3VwPC9iPjwvZW0+Jy4NCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisgKiBAZ2VuZXJhdGVkDQorICovDQorcHVibGljIGNsYXNzIEFnZUdyb3VwVGVzdCBleHRlbmRzIFBvcHVsYXRpb25Hcm91cFRlc3Qgew0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsNCisJCVRlc3RSdW5uZXIucnVuKEFnZUdyb3VwVGVzdC5jbGFzcyk7DQorCX0NCisNCisJLyoqDQorCSAqIENvbnN0cnVjdHMgYSBuZXcgQWdlIEdyb3VwIHRlc3QgY2FzZSB3aXRoIHRoZSBnaXZlbiBuYW1lLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIEFnZUdyb3VwVGVzdChTdHJpbmcgbmFtZSkgew0KKwkJc3VwZXIobmFtZSk7DQorCX0NCisNCisJLyoqDQorCSAqIFJldHVybnMgdGhlIGZpeHR1cmUgZm9yIHRoaXMgQWdlIEdyb3VwIHRlc3QgY2FzZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCUBPdmVycmlkZQ0KKwlwcm90ZWN0ZWQgQWdlR3JvdXAgZ2V0Rml4dHVyZSgpIHsNCisJCXJldHVybiAoQWdlR3JvdXApZml4dHVyZTsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBzZWUganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlI3NldFVwKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJQE92ZXJyaWRlDQorCXByb3RlY3RlZCB2b2lkIHNldFVwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7DQorCQlzZXRGaXh0dXJlKFN0YW5kYXJkRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlQWdlR3JvdXAoKSk7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAc2VlIGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZSN0ZWFyRG93bigpDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCUBPdmVycmlkZQ0KKwlwcm90ZWN0ZWQgdm9pZCB0ZWFyRG93bigpIHRocm93cyBFeGNlcHRpb24gew0KKwkJc2V0Rml4dHVyZShudWxsKTsNCisJfQ0KKw0KK30gLy9BZ2VHcm91cFRlc3QNCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnBvcHVsYXRpb25tb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vcG9wdWxhdGlvbm1vZGVscy9zdGFuZGFyZC90ZXN0cy9BZ2luZ1BvcHVsYXRpb25Nb2RlbFRlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMucG9wdWxhdGlvbm1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9wb3B1bGF0aW9ubW9kZWxzL3N0YW5kYXJkL3Rlc3RzL0FnaW5nUG9wdWxhdGlvbk1vZGVsVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMyNmFlMzMKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnBvcHVsYXRpb25tb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vcG9wdWxhdGlvbm1vZGVscy9zdGFuZGFyZC90ZXN0cy9BZ2luZ1BvcHVsYXRpb25Nb2RlbFRlc3QuamF2YQpAQCAtMCwwICsxLDc5IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC50ZXN0czsNCisNCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiANCisgKiBDb3B5cmlnaHQgKGMpIDIwMTEgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuIA0KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgDQorICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wIA0KKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0IA0KKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sIA0KKyAqIA0KKyAqIENvbnRyaWJ1dG9yczogDQorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiANCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCisNCitpbXBvcnQganVuaXQudGV4dHVpLlRlc3RSdW5uZXI7DQorDQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5BZ2luZ1BvcHVsYXRpb25Nb2RlbDsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkRmFjdG9yeTsNCisNCisvKioNCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKyAqIEEgdGVzdCBjYXNlIGZvciB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+QWdpbmcgUG9wdWxhdGlvbiBNb2RlbDwvYj48L2VtPicuDQorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorICogQGdlbmVyYXRlZA0KKyAqLw0KK3B1YmxpYyBjbGFzcyBBZ2luZ1BvcHVsYXRpb25Nb2RlbFRlc3QgZXh0ZW5kcyBEZW1vZ3JhcGhpY1BvcHVsYXRpb25Nb2RlbFRlc3Qgew0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsNCisJCVRlc3RSdW5uZXIucnVuKEFnaW5nUG9wdWxhdGlvbk1vZGVsVGVzdC5jbGFzcyk7DQorCX0NCisNCisJLyoqDQorCSAqIENvbnN0cnVjdHMgYSBuZXcgQWdpbmcgUG9wdWxhdGlvbiBNb2RlbCB0ZXN0IGNhc2Ugd2l0aCB0aGUgZ2l2ZW4gbmFtZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBBZ2luZ1BvcHVsYXRpb25Nb2RlbFRlc3QoU3RyaW5nIG5hbWUpIHsNCisJCXN1cGVyKG5hbWUpOw0KKwl9DQorDQorCS8qKg0KKwkgKiBSZXR1cm5zIHRoZSBmaXh0dXJlIGZvciB0aGlzIEFnaW5nIFBvcHVsYXRpb24gTW9kZWwgdGVzdCBjYXNlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJQE92ZXJyaWRlDQorCXByb3RlY3RlZCBBZ2luZ1BvcHVsYXRpb25Nb2RlbCBnZXRGaXh0dXJlKCkgew0KKwkJcmV0dXJuIChBZ2luZ1BvcHVsYXRpb25Nb2RlbClmaXh0dXJlOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHNlZSBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2Ujc2V0VXAoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlAT3ZlcnJpZGUNCisJcHJvdGVjdGVkIHZvaWQgc2V0VXAoKSB0aHJvd3MgRXhjZXB0aW9uIHsNCisJCXNldEZpeHR1cmUoU3RhbmRhcmRGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVBZ2luZ1BvcHVsYXRpb25Nb2RlbCgpKTsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBzZWUganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlI3RlYXJEb3duKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJQE92ZXJyaWRlDQorCXByb3RlY3RlZCB2b2lkIHRlYXJEb3duKCkgdGhyb3dzIEV4Y2VwdGlvbiB7DQorCQlzZXRGaXh0dXJlKG51bGwpOw0KKwl9DQorDQorfSAvL0FnaW5nUG9wdWxhdGlvbk1vZGVsVGVzdA0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMucG9wdWxhdGlvbm1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9wb3B1bGF0aW9ubW9kZWxzL3N0YW5kYXJkL3Rlc3RzL0RlbW9ncmFwaGljUG9wdWxhdGlvbk1vZGVsVGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5wb3B1bGF0aW9ubW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3BvcHVsYXRpb25tb2RlbHMvc3RhbmRhcmQvdGVzdHMvRGVtb2dyYXBoaWNQb3B1bGF0aW9uTW9kZWxUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzc1MDZkZQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMucG9wdWxhdGlvbm1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9wb3B1bGF0aW9ubW9kZWxzL3N0YW5kYXJkL3Rlc3RzL0RlbW9ncmFwaGljUG9wdWxhdGlvbk1vZGVsVGVzdC5qYXZhCkBAIC0wLDAgKzEsNzkgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLnRlc3RzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAKKyAqIENvcHlyaWdodCAoYykgMjAxMSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4gCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIAorICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wIAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQgCisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbCAKKyAqIAorICogQ29udHJpYnV0b3JzOiAKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGp1bml0LnRleHR1aS5UZXN0UnVubmVyOworCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLkRlbW9ncmFwaGljUG9wdWxhdGlvbk1vZGVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZEZhY3Rvcnk7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIEEgdGVzdCBjYXNlIGZvciB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+RGVtb2dyYXBoaWMgUG9wdWxhdGlvbiBNb2RlbDwvYj48L2VtPicuCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIERlbW9ncmFwaGljUG9wdWxhdGlvbk1vZGVsVGVzdCBleHRlbmRzIFN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsVGVzdCB7CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CisJCVRlc3RSdW5uZXIucnVuKERlbW9ncmFwaGljUG9wdWxhdGlvbk1vZGVsVGVzdC5jbGFzcyk7CisJfQorCisJLyoqCisJICogQ29uc3RydWN0cyBhIG5ldyBEZW1vZ3JhcGhpYyBQb3B1bGF0aW9uIE1vZGVsIHRlc3QgY2FzZSB3aXRoIHRoZSBnaXZlbiBuYW1lLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBEZW1vZ3JhcGhpY1BvcHVsYXRpb25Nb2RlbFRlc3QoU3RyaW5nIG5hbWUpIHsKKwkJc3VwZXIobmFtZSk7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgZml4dHVyZSBmb3IgdGhpcyBEZW1vZ3JhcGhpYyBQb3B1bGF0aW9uIE1vZGVsIHRlc3QgY2FzZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgRGVtb2dyYXBoaWNQb3B1bGF0aW9uTW9kZWwgZ2V0Rml4dHVyZSgpIHsKKwkJcmV0dXJuIChEZW1vZ3JhcGhpY1BvcHVsYXRpb25Nb2RlbClmaXh0dXJlOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2Ujc2V0VXAoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgdm9pZCBzZXRVcCgpIHRocm93cyBFeGNlcHRpb24geworCQlzZXRGaXh0dXJlKFN0YW5kYXJkRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlRGVtb2dyYXBoaWNQb3B1bGF0aW9uTW9kZWwoKSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZSN0ZWFyRG93bigpCisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIHRlYXJEb3duKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCXNldEZpeHR1cmUobnVsbCk7CisJfQorCit9IC8vRGVtb2dyYXBoaWNQb3B1bGF0aW9uTW9kZWxUZXN0CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnBvcHVsYXRpb25tb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vcG9wdWxhdGlvbm1vZGVscy9zdGFuZGFyZC90ZXN0cy9FYXJ0aFNjaWVuY2VQb3B1bGF0aW9uSW5pdGlhbGl6ZXJUZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnBvcHVsYXRpb25tb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vcG9wdWxhdGlvbm1vZGVscy9zdGFuZGFyZC90ZXN0cy9FYXJ0aFNjaWVuY2VQb3B1bGF0aW9uSW5pdGlhbGl6ZXJUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWNhYTgwOAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMucG9wdWxhdGlvbm1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9wb3B1bGF0aW9ubW9kZWxzL3N0YW5kYXJkL3Rlc3RzL0VhcnRoU2NpZW5jZVBvcHVsYXRpb25Jbml0aWFsaXplclRlc3QuamF2YQpAQCAtMCwwICsxLDQ1IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC50ZXN0czsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogCisgKiBDb3B5cmlnaHQgKGMpIDIwMTEgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuIAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyAKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0IAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwgCisgKiAKKyAqIENvbnRyaWJ1dG9yczogCisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuRWFydGhTY2llbmNlUG9wdWxhdGlvbkluaXRpYWxpemVyOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiBBIHRlc3QgY2FzZSBmb3IgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPkVhcnRoIFNjaWVuY2UgUG9wdWxhdGlvbiBJbml0aWFsaXplcjwvYj48L2VtPicuCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGFic3RyYWN0IGNsYXNzIEVhcnRoU2NpZW5jZVBvcHVsYXRpb25Jbml0aWFsaXplclRlc3QgZXh0ZW5kcyBQb3B1bGF0aW9uSW5pdGlhbGl6ZXJUZXN0IHsKKworCS8qKgorCSAqIENvbnN0cnVjdHMgYSBuZXcgRWFydGggU2NpZW5jZSBQb3B1bGF0aW9uIEluaXRpYWxpemVyIHRlc3QgY2FzZSB3aXRoIHRoZSBnaXZlbiBuYW1lLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFYXJ0aFNjaWVuY2VQb3B1bGF0aW9uSW5pdGlhbGl6ZXJUZXN0KFN0cmluZyBuYW1lKSB7CisJCXN1cGVyKG5hbWUpOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIGZpeHR1cmUgZm9yIHRoaXMgRWFydGggU2NpZW5jZSBQb3B1bGF0aW9uIEluaXRpYWxpemVyIHRlc3QgY2FzZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgRWFydGhTY2llbmNlUG9wdWxhdGlvbkluaXRpYWxpemVyIGdldEZpeHR1cmUoKSB7CisJCXJldHVybiAoRWFydGhTY2llbmNlUG9wdWxhdGlvbkluaXRpYWxpemVyKWZpeHR1cmU7CisJfQorCit9IC8vRWFydGhTY2llbmNlUG9wdWxhdGlvbkluaXRpYWxpemVyVGVzdApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5wb3B1bGF0aW9ubW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3BvcHVsYXRpb25tb2RlbHMvc3RhbmRhcmQvdGVzdHMvSW50ZWdyYXRpb25EZWNvcmF0b3JUZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnBvcHVsYXRpb25tb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vcG9wdWxhdGlvbm1vZGVscy9zdGFuZGFyZC90ZXN0cy9JbnRlZ3JhdGlvbkRlY29yYXRvclRlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNmFkNzBjCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5wb3B1bGF0aW9ubW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3BvcHVsYXRpb25tb2RlbHMvc3RhbmRhcmQvdGVzdHMvSW50ZWdyYXRpb25EZWNvcmF0b3JUZXN0LmphdmEKQEAgLTAsMCArMSw2NCBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQudGVzdHM7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIAorICogQ29weXJpZ2h0IChjKSAyMDExIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiAKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdCAKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sIAorICogCisgKiBDb250cmlidXRvcnM6IAorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiAKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOworCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLkludGVncmF0aW9uRGVjb3JhdG9yOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiBBIHRlc3QgY2FzZSBmb3IgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPkludGVncmF0aW9uIERlY29yYXRvcjwvYj48L2VtPicuCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGFic3RyYWN0IGNsYXNzIEludGVncmF0aW9uRGVjb3JhdG9yVGVzdCBleHRlbmRzIFRlc3RDYXNlIHsKKworCS8qKgorCSAqIFRoZSBmaXh0dXJlIGZvciB0aGlzIEludGVncmF0aW9uIERlY29yYXRvciB0ZXN0IGNhc2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIEludGVncmF0aW9uRGVjb3JhdG9yIGZpeHR1cmUgPSBudWxsOworCisJLyoqCisJICogQ29uc3RydWN0cyBhIG5ldyBJbnRlZ3JhdGlvbiBEZWNvcmF0b3IgdGVzdCBjYXNlIHdpdGggdGhlIGdpdmVuIG5hbWUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEludGVncmF0aW9uRGVjb3JhdG9yVGVzdChTdHJpbmcgbmFtZSkgeworCQlzdXBlcihuYW1lKTsKKwl9CisKKwkvKioKKwkgKiBTZXRzIHRoZSBmaXh0dXJlIGZvciB0aGlzIEludGVncmF0aW9uIERlY29yYXRvciB0ZXN0IGNhc2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgc2V0Rml4dHVyZShJbnRlZ3JhdGlvbkRlY29yYXRvciBmaXh0dXJlKSB7CisJCXRoaXMuZml4dHVyZSA9IGZpeHR1cmU7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgZml4dHVyZSBmb3IgdGhpcyBJbnRlZ3JhdGlvbiBEZWNvcmF0b3IgdGVzdCBjYXNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBJbnRlZ3JhdGlvbkRlY29yYXRvciBnZXRGaXh0dXJlKCkgeworCQlyZXR1cm4gZml4dHVyZTsKKwl9CisKK30gLy9JbnRlZ3JhdGlvbkRlY29yYXRvclRlc3QKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMucG9wdWxhdGlvbm1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9wb3B1bGF0aW9ubW9kZWxzL3N0YW5kYXJkL3Rlc3RzL0ludGVncmF0aW9uTGFiZWxUZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnBvcHVsYXRpb25tb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vcG9wdWxhdGlvbm1vZGVscy9zdGFuZGFyZC90ZXN0cy9JbnRlZ3JhdGlvbkxhYmVsVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM1N2YzMTkKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnBvcHVsYXRpb25tb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vcG9wdWxhdGlvbm1vZGVscy9zdGFuZGFyZC90ZXN0cy9JbnRlZ3JhdGlvbkxhYmVsVGVzdC5qYXZhCkBAIC0wLDAgKzEsNjQgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLnRlc3RzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAKKyAqIENvcHlyaWdodCAoYykgMjAxMSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4gCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIAorICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wIAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQgCisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbCAKKyAqIAorICogQ29udHJpYnV0b3JzOiAKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKKworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5JbnRlZ3JhdGlvbkxhYmVsOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiBBIHRlc3QgY2FzZSBmb3IgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPkludGVncmF0aW9uIExhYmVsPC9iPjwvZW0+Jy4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgYWJzdHJhY3QgY2xhc3MgSW50ZWdyYXRpb25MYWJlbFRlc3QgZXh0ZW5kcyBUZXN0Q2FzZSB7CisKKwkvKioKKwkgKiBUaGUgZml4dHVyZSBmb3IgdGhpcyBJbnRlZ3JhdGlvbiBMYWJlbCB0ZXN0IGNhc2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIEludGVncmF0aW9uTGFiZWwgZml4dHVyZSA9IG51bGw7CisKKwkvKioKKwkgKiBDb25zdHJ1Y3RzIGEgbmV3IEludGVncmF0aW9uIExhYmVsIHRlc3QgY2FzZSB3aXRoIHRoZSBnaXZlbiBuYW1lLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBJbnRlZ3JhdGlvbkxhYmVsVGVzdChTdHJpbmcgbmFtZSkgeworCQlzdXBlcihuYW1lKTsKKwl9CisKKwkvKioKKwkgKiBTZXRzIHRoZSBmaXh0dXJlIGZvciB0aGlzIEludGVncmF0aW9uIExhYmVsIHRlc3QgY2FzZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBzZXRGaXh0dXJlKEludGVncmF0aW9uTGFiZWwgZml4dHVyZSkgeworCQl0aGlzLmZpeHR1cmUgPSBmaXh0dXJlOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIGZpeHR1cmUgZm9yIHRoaXMgSW50ZWdyYXRpb24gTGFiZWwgdGVzdCBjYXNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBJbnRlZ3JhdGlvbkxhYmVsIGdldEZpeHR1cmUoKSB7CisJCXJldHVybiBmaXh0dXJlOworCX0KKworfSAvL0ludGVncmF0aW9uTGFiZWxUZXN0CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnBvcHVsYXRpb25tb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vcG9wdWxhdGlvbm1vZGVscy9zdGFuZGFyZC90ZXN0cy9JbnRlZ3JhdGlvbkxhYmVsVmFsdWVUZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnBvcHVsYXRpb25tb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vcG9wdWxhdGlvbm1vZGVscy9zdGFuZGFyZC90ZXN0cy9JbnRlZ3JhdGlvbkxhYmVsVmFsdWVUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjU3MTlhYQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMucG9wdWxhdGlvbm1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9wb3B1bGF0aW9ubW9kZWxzL3N0YW5kYXJkL3Rlc3RzL0ludGVncmF0aW9uTGFiZWxWYWx1ZVRlc3QuamF2YQpAQCAtMCwwICsxLDY0IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC50ZXN0czsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogCisgKiBDb3B5cmlnaHQgKGMpIDIwMTEgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuIAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyAKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0IAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwgCisgKiAKKyAqIENvbnRyaWJ1dG9yczogCisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguSW50ZWdyYXRpb25MYWJlbFZhbHVlOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiBBIHRlc3QgY2FzZSBmb3IgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPkludGVncmF0aW9uIExhYmVsIFZhbHVlPC9iPjwvZW0+Jy4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgYWJzdHJhY3QgY2xhc3MgSW50ZWdyYXRpb25MYWJlbFZhbHVlVGVzdCBleHRlbmRzIFRlc3RDYXNlIHsKKworCS8qKgorCSAqIFRoZSBmaXh0dXJlIGZvciB0aGlzIEludGVncmF0aW9uIExhYmVsIFZhbHVlIHRlc3QgY2FzZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgSW50ZWdyYXRpb25MYWJlbFZhbHVlIGZpeHR1cmUgPSBudWxsOworCisJLyoqCisJICogQ29uc3RydWN0cyBhIG5ldyBJbnRlZ3JhdGlvbiBMYWJlbCBWYWx1ZSB0ZXN0IGNhc2Ugd2l0aCB0aGUgZ2l2ZW4gbmFtZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgSW50ZWdyYXRpb25MYWJlbFZhbHVlVGVzdChTdHJpbmcgbmFtZSkgeworCQlzdXBlcihuYW1lKTsKKwl9CisKKwkvKioKKwkgKiBTZXRzIHRoZSBmaXh0dXJlIGZvciB0aGlzIEludGVncmF0aW9uIExhYmVsIFZhbHVlIHRlc3QgY2FzZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBzZXRGaXh0dXJlKEludGVncmF0aW9uTGFiZWxWYWx1ZSBmaXh0dXJlKSB7CisJCXRoaXMuZml4dHVyZSA9IGZpeHR1cmU7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgZml4dHVyZSBmb3IgdGhpcyBJbnRlZ3JhdGlvbiBMYWJlbCBWYWx1ZSB0ZXN0IGNhc2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIEludGVncmF0aW9uTGFiZWxWYWx1ZSBnZXRGaXh0dXJlKCkgeworCQlyZXR1cm4gZml4dHVyZTsKKwl9CisKK30gLy9JbnRlZ3JhdGlvbkxhYmVsVmFsdWVUZXN0CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnBvcHVsYXRpb25tb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vcG9wdWxhdGlvbm1vZGVscy9zdGFuZGFyZC90ZXN0cy9Nb3NxdWl0b1BvcHVsYXRpb25Nb2RlbFRlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMucG9wdWxhdGlvbm1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9wb3B1bGF0aW9ubW9kZWxzL3N0YW5kYXJkL3Rlc3RzL01vc3F1aXRvUG9wdWxhdGlvbk1vZGVsVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFlZGM2ZGIKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnBvcHVsYXRpb25tb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vcG9wdWxhdGlvbm1vZGVscy9zdGFuZGFyZC90ZXN0cy9Nb3NxdWl0b1BvcHVsYXRpb25Nb2RlbFRlc3QuamF2YQpAQCAtMCwwICsxLDgzIEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC50ZXN0czsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogCisgKiBDb3B5cmlnaHQgKGMpIDIwMTEgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuIAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyAKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0IAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwgCisgKiAKKyAqIENvbnRyaWJ1dG9yczogCisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqdW5pdC50ZXh0dWkuVGVzdFJ1bm5lcjsKKworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5Nb3NxdWl0b1BvcHVsYXRpb25Nb2RlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmRGYWN0b3J5OworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiBBIHRlc3QgY2FzZSBmb3IgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPk1vc3F1aXRvIFBvcHVsYXRpb24gTW9kZWw8L2I+PC9lbT4nLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBNb3NxdWl0b1BvcHVsYXRpb25Nb2RlbFRlc3QgZXh0ZW5kcyBQb3B1bGF0aW9uTW9kZWxUZXN0IHsKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKKwkJVGVzdFJ1bm5lci5ydW4oTW9zcXVpdG9Qb3B1bGF0aW9uTW9kZWxUZXN0LmNsYXNzKTsKKwl9CisKKwkvKioKKwkgKiBDb25zdHJ1Y3RzIGEgbmV3IE1vc3F1aXRvIFBvcHVsYXRpb24gTW9kZWwgdGVzdCBjYXNlIHdpdGggdGhlIGdpdmVuIG5hbWUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIE1vc3F1aXRvUG9wdWxhdGlvbk1vZGVsVGVzdChTdHJpbmcgbmFtZSkgeworCQlzdXBlcihuYW1lKTsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBmaXh0dXJlIGZvciB0aGlzIE1vc3F1aXRvIFBvcHVsYXRpb24gTW9kZWwgdGVzdCBjYXNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCBNb3NxdWl0b1BvcHVsYXRpb25Nb2RlbCBnZXRGaXh0dXJlKCkgeworCQlyZXR1cm4gKE1vc3F1aXRvUG9wdWxhdGlvbk1vZGVsKWZpeHR1cmU7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZSNzZXRVcCgpCisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIHNldFVwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCXNldEZpeHR1cmUoU3RhbmRhcmRGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVNb3NxdWl0b1BvcHVsYXRpb25Nb2RlbCgpKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlI3RlYXJEb3duKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgdGVhckRvd24oKSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJc2V0Rml4dHVyZShudWxsKTsKKwl9CisKKwlwdWJsaWMgdm9pZCB0ZXN0TW9zcXVpdG9Qb3BNb2RlbCgpIHsKKwkJLy8gVG9ETzogSW1wbGVtZW50CisJCWFzc2VydCh0cnVlKTsKKwl9Cit9IC8vTW9zcXVpdG9Qb3B1bGF0aW9uTW9kZWxUZXN0CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnBvcHVsYXRpb25tb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vcG9wdWxhdGlvbm1vZGVscy9zdGFuZGFyZC90ZXN0cy9Qb3B1bGF0aW9uR3JvdXBUZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnBvcHVsYXRpb25tb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vcG9wdWxhdGlvbm1vZGVscy9zdGFuZGFyZC90ZXN0cy9Qb3B1bGF0aW9uR3JvdXBUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTM5MGVjOQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMucG9wdWxhdGlvbm1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9wb3B1bGF0aW9ubW9kZWxzL3N0YW5kYXJkL3Rlc3RzL1BvcHVsYXRpb25Hcm91cFRlc3QuamF2YQpAQCAtMCwwICsxLDEwMSBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQudGVzdHM7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIAorICogQ29weXJpZ2h0IChjKSAyMDExIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiAKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdCAKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sIAorICogCisgKiBDb250cmlidXRvcnM6IAorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiAKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOworaW1wb3J0IGp1bml0LnRleHR1aS5UZXN0UnVubmVyOworCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLlBvcHVsYXRpb25Hcm91cDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmRGYWN0b3J5OworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiBBIHRlc3QgY2FzZSBmb3IgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPlBvcHVsYXRpb24gR3JvdXA8L2I+PC9lbT4nLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBQb3B1bGF0aW9uR3JvdXBUZXN0IGV4dGVuZHMgVGVzdENhc2UgeworCisJLyoqCisJICogVGhlIGZpeHR1cmUgZm9yIHRoaXMgUG9wdWxhdGlvbiBHcm91cCB0ZXN0IGNhc2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIFBvcHVsYXRpb25Hcm91cCBmaXh0dXJlID0gbnVsbDsKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKKwkJVGVzdFJ1bm5lci5ydW4oUG9wdWxhdGlvbkdyb3VwVGVzdC5jbGFzcyk7CisJfQorCisJLyoqCisJICogQ29uc3RydWN0cyBhIG5ldyBQb3B1bGF0aW9uIEdyb3VwIHRlc3QgY2FzZSB3aXRoIHRoZSBnaXZlbiBuYW1lLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBQb3B1bGF0aW9uR3JvdXBUZXN0KFN0cmluZyBuYW1lKSB7CisJCXN1cGVyKG5hbWUpOworCX0KKworCS8qKgorCSAqIFNldHMgdGhlIGZpeHR1cmUgZm9yIHRoaXMgUG9wdWxhdGlvbiBHcm91cCB0ZXN0IGNhc2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgc2V0Rml4dHVyZShQb3B1bGF0aW9uR3JvdXAgZml4dHVyZSkgeworCQl0aGlzLmZpeHR1cmUgPSBmaXh0dXJlOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIGZpeHR1cmUgZm9yIHRoaXMgUG9wdWxhdGlvbiBHcm91cCB0ZXN0IGNhc2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIFBvcHVsYXRpb25Hcm91cCBnZXRGaXh0dXJlKCkgeworCQlyZXR1cm4gZml4dHVyZTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlI3NldFVwKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgc2V0VXAoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJc2V0Rml4dHVyZShTdGFuZGFyZEZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZVBvcHVsYXRpb25Hcm91cCgpKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlI3RlYXJEb3duKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgdGVhckRvd24oKSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJc2V0Rml4dHVyZShudWxsKTsKKwl9CisKKwlwdWJsaWMgdm9pZCB0ZXN0UG9wdWxhdGlvbkdyb3VwKCkgeworCQkvLyBUT0RPOiBJbXBsZW1lbnQgdGVzdAorCQlhc3NlcnRUcnVlKHRydWUpOworCX0KK30gLy9Qb3B1bGF0aW9uR3JvdXBUZXN0CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnBvcHVsYXRpb25tb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vcG9wdWxhdGlvbm1vZGVscy9zdGFuZGFyZC90ZXN0cy9Qb3B1bGF0aW9uSW5pdGlhbGl6ZXJUZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnBvcHVsYXRpb25tb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vcG9wdWxhdGlvbm1vZGVscy9zdGFuZGFyZC90ZXN0cy9Qb3B1bGF0aW9uSW5pdGlhbGl6ZXJUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDc2NTJlZQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMucG9wdWxhdGlvbm1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9wb3B1bGF0aW9ubW9kZWxzL3N0YW5kYXJkL3Rlc3RzL1BvcHVsYXRpb25Jbml0aWFsaXplclRlc3QuamF2YQpAQCAtMCwwICsxLDY0IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC50ZXN0czsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogCisgKiBDb3B5cmlnaHQgKGMpIDIwMTEgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuIAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyAKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0IAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwgCisgKiAKKyAqIENvbnRyaWJ1dG9yczogCisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuUG9wdWxhdGlvbkluaXRpYWxpemVyOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiBBIHRlc3QgY2FzZSBmb3IgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPlBvcHVsYXRpb24gSW5pdGlhbGl6ZXI8L2I+PC9lbT4nLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBhYnN0cmFjdCBjbGFzcyBQb3B1bGF0aW9uSW5pdGlhbGl6ZXJUZXN0IGV4dGVuZHMgVGVzdENhc2UgeworCisJLyoqCisJICogVGhlIGZpeHR1cmUgZm9yIHRoaXMgUG9wdWxhdGlvbiBJbml0aWFsaXplciB0ZXN0IGNhc2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIFBvcHVsYXRpb25Jbml0aWFsaXplciBmaXh0dXJlID0gbnVsbDsKKworCS8qKgorCSAqIENvbnN0cnVjdHMgYSBuZXcgUG9wdWxhdGlvbiBJbml0aWFsaXplciB0ZXN0IGNhc2Ugd2l0aCB0aGUgZ2l2ZW4gbmFtZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgUG9wdWxhdGlvbkluaXRpYWxpemVyVGVzdChTdHJpbmcgbmFtZSkgeworCQlzdXBlcihuYW1lKTsKKwl9CisKKwkvKioKKwkgKiBTZXRzIHRoZSBmaXh0dXJlIGZvciB0aGlzIFBvcHVsYXRpb24gSW5pdGlhbGl6ZXIgdGVzdCBjYXNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIHNldEZpeHR1cmUoUG9wdWxhdGlvbkluaXRpYWxpemVyIGZpeHR1cmUpIHsKKwkJdGhpcy5maXh0dXJlID0gZml4dHVyZTsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBmaXh0dXJlIGZvciB0aGlzIFBvcHVsYXRpb24gSW5pdGlhbGl6ZXIgdGVzdCBjYXNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBQb3B1bGF0aW9uSW5pdGlhbGl6ZXIgZ2V0Rml4dHVyZSgpIHsKKwkJcmV0dXJuIGZpeHR1cmU7CisJfQorCit9IC8vUG9wdWxhdGlvbkluaXRpYWxpemVyVGVzdApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5wb3B1bGF0aW9ubW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3BvcHVsYXRpb25tb2RlbHMvc3RhbmRhcmQvdGVzdHMvUG9wdWxhdGlvbk1vZGVsTGFiZWxUZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnBvcHVsYXRpb25tb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vcG9wdWxhdGlvbm1vZGVscy9zdGFuZGFyZC90ZXN0cy9Qb3B1bGF0aW9uTW9kZWxMYWJlbFRlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MzVmZTg3Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5wb3B1bGF0aW9ubW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3BvcHVsYXRpb25tb2RlbHMvc3RhbmRhcmQvdGVzdHMvUG9wdWxhdGlvbk1vZGVsTGFiZWxUZXN0LmphdmEKQEAgLTAsMCArMSwxMDggQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLnRlc3RzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAKKyAqIENvcHlyaWdodCAoYykgMjAxMSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4gCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIAorICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wIAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQgCisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbCAKKyAqIAorICogQ29udHJpYnV0b3JzOiAKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKK2ltcG9ydCBqdW5pdC50ZXh0dWkuVGVzdFJ1bm5lcjsKKworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubm9kZXMuUmVnaW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5Qb3B1bGF0aW9uTW9kZWxMYWJlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmRGYWN0b3J5OworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiBBIHRlc3QgY2FzZSBmb3IgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPlBvcHVsYXRpb24gTW9kZWwgTGFiZWw8L2I+PC9lbT4nLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBQb3B1bGF0aW9uTW9kZWxMYWJlbFRlc3QgZXh0ZW5kcyBUZXN0Q2FzZSB7CisKKwkvKioKKwkgKiBUaGUgZml4dHVyZSBmb3IgdGhpcyBQb3B1bGF0aW9uIE1vZGVsIExhYmVsIHRlc3QgY2FzZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgUG9wdWxhdGlvbk1vZGVsTGFiZWwgZml4dHVyZSA9IG51bGw7CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CisJCVRlc3RSdW5uZXIucnVuKFBvcHVsYXRpb25Nb2RlbExhYmVsVGVzdC5jbGFzcyk7CisJfQorCisJLyoqCisJICogQ29uc3RydWN0cyBhIG5ldyBQb3B1bGF0aW9uIE1vZGVsIExhYmVsIHRlc3QgY2FzZSB3aXRoIHRoZSBnaXZlbiBuYW1lLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBQb3B1bGF0aW9uTW9kZWxMYWJlbFRlc3QoU3RyaW5nIG5hbWUpIHsKKwkJc3VwZXIobmFtZSk7CisJfQorCisJLyoqCisJICogU2V0cyB0aGUgZml4dHVyZSBmb3IgdGhpcyBQb3B1bGF0aW9uIE1vZGVsIExhYmVsIHRlc3QgY2FzZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBzZXRGaXh0dXJlKFBvcHVsYXRpb25Nb2RlbExhYmVsIGZpeHR1cmUpIHsKKwkJdGhpcy5maXh0dXJlID0gZml4dHVyZTsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBmaXh0dXJlIGZvciB0aGlzIFBvcHVsYXRpb24gTW9kZWwgTGFiZWwgdGVzdCBjYXNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBQb3B1bGF0aW9uTW9kZWxMYWJlbCBnZXRGaXh0dXJlKCkgeworCQlyZXR1cm4gZml4dHVyZTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlI3NldFVwKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgc2V0VXAoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJc2V0Rml4dHVyZShTdGFuZGFyZEZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZVBvcHVsYXRpb25Nb2RlbExhYmVsKCkpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2UjdGVhckRvd24oKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgdm9pZCB0ZWFyRG93bigpIHRocm93cyBFeGNlcHRpb24geworCQlzZXRGaXh0dXJlKG51bGwpOworCX0KKworCXByb3RlY3RlZCBzdGF0aWMgdm9pZCBsYWJlbFJlZ2lvbihmaW5hbCBQb3B1bGF0aW9uTW9kZWxMYWJlbCBwb3BMYWJlbCwKKwkJCWZpbmFsIFJlZ2lvbiByZWdpb24pIHsKKwkJcG9wTGFiZWwuc2V0VVJJT2ZJZGVudGlmaWFibGVUb0JlTGFiZWxlZChyZWdpb24uZ2V0VVJJKCkpOworCQlyZWdpb24uZ2V0TGFiZWxzKCkuYWRkKHBvcExhYmVsKTsKKwl9IC8vIGxhYmVsUmVnaW9uCisJCisJcHVibGljIHZvaWQgdGVzdFBvcHVsYXRpb25Nb2RlbExhYmVsKCkgeworCQkvLyBUT0RPOiBJbXBsZW1lbnQgdGVzdAorCQlhc3NlcnRUcnVlKHRydWUpOworCX0KK30gLy9Qb3B1bGF0aW9uTW9kZWxMYWJlbFRlc3QKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMucG9wdWxhdGlvbm1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9wb3B1bGF0aW9ubW9kZWxzL3N0YW5kYXJkL3Rlc3RzL1BvcHVsYXRpb25Nb2RlbExhYmVsVmFsdWVUZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnBvcHVsYXRpb25tb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vcG9wdWxhdGlvbm1vZGVscy9zdGFuZGFyZC90ZXN0cy9Qb3B1bGF0aW9uTW9kZWxMYWJlbFZhbHVlVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNlZWJmZjkKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnBvcHVsYXRpb25tb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vcG9wdWxhdGlvbm1vZGVscy9zdGFuZGFyZC90ZXN0cy9Qb3B1bGF0aW9uTW9kZWxMYWJlbFZhbHVlVGVzdC5qYXZhCkBAIC0wLDAgKzEsMTAwIEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC50ZXN0czsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogCisgKiBDb3B5cmlnaHQgKGMpIDIwMTEgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuIAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyAKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0IAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwgCisgKiAKKyAqIENvbnRyaWJ1dG9yczogCisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7CitpbXBvcnQganVuaXQudGV4dHVpLlRlc3RSdW5uZXI7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuUG9wdWxhdGlvbk1vZGVsTGFiZWxWYWx1ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmRGYWN0b3J5OworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiBBIHRlc3QgY2FzZSBmb3IgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPlBvcHVsYXRpb24gTW9kZWwgTGFiZWwgVmFsdWU8L2I+PC9lbT4nLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBQb3B1bGF0aW9uTW9kZWxMYWJlbFZhbHVlVGVzdCBleHRlbmRzIFRlc3RDYXNlIHsKKworCS8qKgorCSAqIFRoZSBmaXh0dXJlIGZvciB0aGlzIFBvcHVsYXRpb24gTW9kZWwgTGFiZWwgVmFsdWUgdGVzdCBjYXNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBQb3B1bGF0aW9uTW9kZWxMYWJlbFZhbHVlIGZpeHR1cmUgPSBudWxsOworCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgeworCQlUZXN0UnVubmVyLnJ1bihQb3B1bGF0aW9uTW9kZWxMYWJlbFZhbHVlVGVzdC5jbGFzcyk7CisJfQorCisJLyoqCisJICogQ29uc3RydWN0cyBhIG5ldyBQb3B1bGF0aW9uIE1vZGVsIExhYmVsIFZhbHVlIHRlc3QgY2FzZSB3aXRoIHRoZSBnaXZlbiBuYW1lLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBQb3B1bGF0aW9uTW9kZWxMYWJlbFZhbHVlVGVzdChTdHJpbmcgbmFtZSkgeworCQlzdXBlcihuYW1lKTsKKwl9CisKKwkvKioKKwkgKiBTZXRzIHRoZSBmaXh0dXJlIGZvciB0aGlzIFBvcHVsYXRpb24gTW9kZWwgTGFiZWwgVmFsdWUgdGVzdCBjYXNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIHNldEZpeHR1cmUoUG9wdWxhdGlvbk1vZGVsTGFiZWxWYWx1ZSBmaXh0dXJlKSB7CisJCXRoaXMuZml4dHVyZSA9IGZpeHR1cmU7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgZml4dHVyZSBmb3IgdGhpcyBQb3B1bGF0aW9uIE1vZGVsIExhYmVsIFZhbHVlIHRlc3QgY2FzZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgUG9wdWxhdGlvbk1vZGVsTGFiZWxWYWx1ZSBnZXRGaXh0dXJlKCkgeworCQlyZXR1cm4gZml4dHVyZTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlI3NldFVwKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgc2V0VXAoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJc2V0Rml4dHVyZShTdGFuZGFyZEZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZVBvcHVsYXRpb25Nb2RlbExhYmVsVmFsdWUoKSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZSN0ZWFyRG93bigpCisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIHRlYXJEb3duKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCXNldEZpeHR1cmUobnVsbCk7CisJfQorCisJcHVibGljIHZvaWQgdGVzdFBvcHVsYXRpb25Nb2RlbExhYmVsVmFsdWUoKSB7CisJCWFzc2VydFRydWUodHJ1ZSk7CisJfQorfSAvL1BvcHVsYXRpb25Nb2RlbExhYmVsVmFsdWVUZXN0CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnBvcHVsYXRpb25tb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vcG9wdWxhdGlvbm1vZGVscy9zdGFuZGFyZC90ZXN0cy9Qb3B1bGF0aW9uTW9kZWxUZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnBvcHVsYXRpb25tb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vcG9wdWxhdGlvbm1vZGVscy9zdGFuZGFyZC90ZXN0cy9Qb3B1bGF0aW9uTW9kZWxUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGI2N2I3MAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMucG9wdWxhdGlvbm1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9wb3B1bGF0aW9ubW9kZWxzL3N0YW5kYXJkL3Rlc3RzL1BvcHVsYXRpb25Nb2RlbFRlc3QuamF2YQpAQCAtMCwwICsxLDEzMiBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQudGVzdHM7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIAorICogQ29weXJpZ2h0IChjKSAyMDExIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiAKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdCAKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sIAorICogCisgKiBDb250cmlidXRvcnM6IAorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiAKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOworCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLlNURU1VUkk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkdyYXBoOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5HcmFwaEZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLk1vZGVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5Nb2RlbEZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNjZW5hcmlvLlNjZW5hcmlvOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zY2VuYXJpby5TY2VuYXJpb0ZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNlcXVlbmNlci5TZXF1ZW5jZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zZXF1ZW5jZXIuU2VxdWVudGlhbFNlcXVlbmNlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLm5vZGVzLk5vZGVzRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLm5vZGVzLlJlZ2lvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuUG9wdWxhdGlvbk1vZGVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZEZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkUG9wdWxhdGlvbkluaXRpYWxpemVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uc29sdmVycy5mZC5GZEZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5zb2x2ZXJzLmZkLkZpbml0ZURpZmZlcmVuY2U7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIEEgdGVzdCBjYXNlIGZvciB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+UG9wdWxhdGlvbiBNb2RlbDwvYj48L2VtPicuCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIDxwPgorICogVGhlIGZvbGxvd2luZyBvcGVyYXRpb25zIGFyZSB0ZXN0ZWQ6CisgKiA8dWw+CisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLlBvcHVsYXRpb25Nb2RlbCNnZXRBbGxMYWJlbElkZW50aWZpZXJzKCkgPGVtPkdldCBBbGwgTGFiZWwgSWRlbnRpZmllcnM8L2VtPn08L2xpPgorICogPC91bD4KKyAqIDwvcD4KKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGFic3RyYWN0IGNsYXNzIFBvcHVsYXRpb25Nb2RlbFRlc3QgZXh0ZW5kcyBUZXN0Q2FzZSB7CisKKwlwdWJsaWMgZmluYWwgaW50IGluZGl2aWR1YWxzID0gMTA7CisJcHVibGljIGZpbmFsIFN0cmluZyBwb3B1bGF0aW9uSWRlbnRpZmllciA9ICJodW1hbiI7CisJCisJLyoqCisJICogVGhlIGZpeHR1cmUgZm9yIHRoaXMgUG9wdWxhdGlvbiBNb2RlbCB0ZXN0IGNhc2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIFBvcHVsYXRpb25Nb2RlbCBmaXh0dXJlID0gbnVsbDsKKworCS8qKgorCSAqIENvbnN0cnVjdHMgYSBuZXcgUG9wdWxhdGlvbiBNb2RlbCB0ZXN0IGNhc2Ugd2l0aCB0aGUgZ2l2ZW4gbmFtZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgUG9wdWxhdGlvbk1vZGVsVGVzdChTdHJpbmcgbmFtZSkgeworCQlzdXBlcihuYW1lKTsKKwl9CisKKwkvKioKKwkgKiBTZXRzIHRoZSBmaXh0dXJlIGZvciB0aGlzIFBvcHVsYXRpb24gTW9kZWwgdGVzdCBjYXNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIHNldEZpeHR1cmUoUG9wdWxhdGlvbk1vZGVsIGZpeHR1cmUpIHsKKwkJdGhpcy5maXh0dXJlID0gZml4dHVyZTsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBmaXh0dXJlIGZvciB0aGlzIFBvcHVsYXRpb24gTW9kZWwgdGVzdCBjYXNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBQb3B1bGF0aW9uTW9kZWwgZ2V0Rml4dHVyZSgpIHsKKwkJcmV0dXJuIGZpeHR1cmU7CisJfQorCisJLyoqCisJICogVGVzdHMgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLlBvcHVsYXRpb25Nb2RlbCNnZXRBbGxMYWJlbElkZW50aWZpZXJzKCkgPGVtPkdldCBBbGwgTGFiZWwgSWRlbnRpZmllcnM8L2VtPn0nIG9wZXJhdGlvbi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLlBvcHVsYXRpb25Nb2RlbCNnZXRBbGxMYWJlbElkZW50aWZpZXJzKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgdGVzdEdldEFsbExhYmVsSWRlbnRpZmllcnMoKSB7CisJCS8vIFRPRE86IGltcGxlbWVudCB0aGlzIG9wZXJhdGlvbiB0ZXN0IG1ldGhvZAorCQkvLyBFbnN1cmUgdGhhdCB5b3UgcmVtb3ZlIEBnZW5lcmF0ZWQgb3IgbWFyayBpdCBAZ2VuZXJhdGVkIE5PVAorCQlmYWlsKCk7CisJfQorCisJcHJvdGVjdGVkIFNjZW5hcmlvIGNyZWF0ZVNjZW5hcmlvKCkgeworCQlTY2VuYXJpbyBzY2VuYXJpbyA9IFNjZW5hcmlvRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlU2NlbmFyaW8oKTsKKwkJTW9kZWwgbW9kZWwgPSBNb2RlbEZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZU1vZGVsKCk7CisJCXNjZW5hcmlvLnNldE1vZGVsKG1vZGVsKTsKKwkJTW9kZWwgbW9kZWwyID0gTW9kZWxGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVNb2RlbCgpOworCQltb2RlbC5nZXRNb2RlbHMoKS5hZGQobW9kZWwyKTsKKwkJCisJCUdyYXBoIGdyYXBoID0gR3JhcGhGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVHcmFwaCgpOworCQkKKwkJUmVnaW9uIHJlZ2lvbiA9IE5vZGVzRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlUmVnaW9uKCk7CisJCXJlZ2lvbi5zZXRVUkkoU1RFTVVSSS5jcmVhdGVVUkkoUmVnaW9uLlVSSV9UWVBFX1JFR0lPTl9OT0RFX1NFR01FTlQpKTsKKwkJZ3JhcGguZ2V0Tm9kZXMoKS5wdXQocmVnaW9uLmdldFVSSSgpLCByZWdpb24pOworCQkKKwkJbW9kZWwyLmdldEdyYXBocygpLmFkZChncmFwaCk7CisJCQorCQlTdGFuZGFyZFBvcHVsYXRpb25Jbml0aWFsaXplciBpbml0aWFsaXplciA9IFN0YW5kYXJkRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlU3RhbmRhcmRQb3B1bGF0aW9uSW5pdGlhbGl6ZXIoKTsKKwkJaW5pdGlhbGl6ZXIuc2V0SW5kaXZpZHVhbHMoaW5kaXZpZHVhbHMpOworCQlpbml0aWFsaXplci5zZXRQb3B1bGF0aW9uSWRlbnRpZmllcihwb3B1bGF0aW9uSWRlbnRpZmllcik7CisJCW1vZGVsMi5nZXROb2RlRGVjb3JhdG9ycygpLmFkZChpbml0aWFsaXplcik7CisJCQorCQlTZXF1ZW50aWFsU2VxdWVuY2VyIHNlcSA9IFNlcXVlbmNlckZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZVNlcXVlbnRpYWxTZXF1ZW5jZXIoKTsKKwkJc2VxLnNldFN0YXJ0VGltZShNb2RlbEZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZVNURU1UaW1lKCkpOworCQlzZXEuc2V0RW5kVGltZShNb2RlbEZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZVNURU1UaW1lKCkpOworCQlzZXEuc2V0VGltZUluY3JlbWVudCg4NjQwMDAwMCk7CisJCXNjZW5hcmlvLnNldFNlcXVlbmNlcihzZXEpOworCQkKKwkJRmluaXRlRGlmZmVyZW5jZSBmZCA9IEZkRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlRmluaXRlRGlmZmVyZW5jZSgpOworCQlzY2VuYXJpby5zZXRTb2x2ZXIoZmQpOworCQkKKwkJcmV0dXJuIHNjZW5hcmlvOworCX0KK30gLy9Qb3B1bGF0aW9uTW9kZWxUZXN0CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnBvcHVsYXRpb25tb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vcG9wdWxhdGlvbm1vZGVscy9zdGFuZGFyZC90ZXN0cy9Qb3B1bGF0aW9ubW9kZWxzQWxsVGVzdHMuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMucG9wdWxhdGlvbm1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9wb3B1bGF0aW9ubW9kZWxzL3N0YW5kYXJkL3Rlc3RzL1BvcHVsYXRpb25tb2RlbHNBbGxUZXN0cy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY5YmZhNzAKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnBvcHVsYXRpb25tb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vcG9wdWxhdGlvbm1vZGVscy9zdGFuZGFyZC90ZXN0cy9Qb3B1bGF0aW9ubW9kZWxzQWxsVGVzdHMuamF2YQpAQCAtMCwwICsxLDU1IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC50ZXN0czsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogCisgKiBDb3B5cmlnaHQgKGMpIDIwMTEgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuIAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyAKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0IAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwgCisgKiAKKyAqIENvbnRyaWJ1dG9yczogCisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdDsKK2ltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdFN1aXRlOworaW1wb3J0IGp1bml0LnRleHR1aS5UZXN0UnVubmVyOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiBBIHRlc3Qgc3VpdGUgZm9yIHRoZSAnPGVtPjxiPlN0YW5kYXJkPC9iPjwvZW0+JyBtb2RlbC4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgUG9wdWxhdGlvbm1vZGVsc0FsbFRlc3RzIGV4dGVuZHMgVGVzdFN1aXRlIHsKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKKwkJVGVzdFJ1bm5lci5ydW4oc3VpdGUoKSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHN0YXRpYyBUZXN0IHN1aXRlKCkgeworCQlUZXN0U3VpdGUgc3VpdGUgPSBuZXcgUG9wdWxhdGlvbm1vZGVsc0FsbFRlc3RzKCJTdGFuZGFyZCBUZXN0cyIpOworCQlzdWl0ZS5hZGRUZXN0KFN0YW5kYXJkVGVzdHMuc3VpdGUoKSk7CisJCXJldHVybiBzdWl0ZTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgUG9wdWxhdGlvbm1vZGVsc0FsbFRlc3RzKFN0cmluZyBuYW1lKSB7CisJCXN1cGVyKG5hbWUpOworCX0KKworfSAvL1BvcHVsYXRpb25tb2RlbHNBbGxUZXN0cwpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5wb3B1bGF0aW9ubW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3BvcHVsYXRpb25tb2RlbHMvc3RhbmRhcmQvdGVzdHMvU2Vhc29uYWxQb3B1bGF0aW9uTW9kZWxUZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnBvcHVsYXRpb25tb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vcG9wdWxhdGlvbm1vZGVscy9zdGFuZGFyZC90ZXN0cy9TZWFzb25hbFBvcHVsYXRpb25Nb2RlbFRlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42OTJkM2FmCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5wb3B1bGF0aW9ubW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3BvcHVsYXRpb25tb2RlbHMvc3RhbmRhcmQvdGVzdHMvU2Vhc29uYWxQb3B1bGF0aW9uTW9kZWxUZXN0LmphdmEKQEAgLTAsMCArMSw3OSBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQudGVzdHM7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIAorICogQ29weXJpZ2h0IChjKSAyMDExIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiAKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdCAKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sIAorICogCisgKiBDb250cmlidXRvcnM6IAorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiAKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQganVuaXQudGV4dHVpLlRlc3RSdW5uZXI7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuU2Vhc29uYWxQb3B1bGF0aW9uTW9kZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkRmFjdG9yeTsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogQSB0ZXN0IGNhc2UgZm9yIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5TZWFzb25hbCBQb3B1bGF0aW9uIE1vZGVsPC9iPjwvZW0+Jy4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgU2Vhc29uYWxQb3B1bGF0aW9uTW9kZWxUZXN0IGV4dGVuZHMgU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxUZXN0IHsKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKKwkJVGVzdFJ1bm5lci5ydW4oU2Vhc29uYWxQb3B1bGF0aW9uTW9kZWxUZXN0LmNsYXNzKTsKKwl9CisKKwkvKioKKwkgKiBDb25zdHJ1Y3RzIGEgbmV3IFNlYXNvbmFsIFBvcHVsYXRpb24gTW9kZWwgdGVzdCBjYXNlIHdpdGggdGhlIGdpdmVuIG5hbWUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFNlYXNvbmFsUG9wdWxhdGlvbk1vZGVsVGVzdChTdHJpbmcgbmFtZSkgeworCQlzdXBlcihuYW1lKTsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBmaXh0dXJlIGZvciB0aGlzIFNlYXNvbmFsIFBvcHVsYXRpb24gTW9kZWwgdGVzdCBjYXNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCBTZWFzb25hbFBvcHVsYXRpb25Nb2RlbCBnZXRGaXh0dXJlKCkgeworCQlyZXR1cm4gKFNlYXNvbmFsUG9wdWxhdGlvbk1vZGVsKWZpeHR1cmU7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZSNzZXRVcCgpCisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIHNldFVwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCXNldEZpeHR1cmUoU3RhbmRhcmRGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVTZWFzb25hbFBvcHVsYXRpb25Nb2RlbCgpKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlI3RlYXJEb3duKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgdGVhckRvd24oKSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJc2V0Rml4dHVyZShudWxsKTsKKwl9CisKK30gLy9TZWFzb25hbFBvcHVsYXRpb25Nb2RlbFRlc3QKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMucG9wdWxhdGlvbm1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9wb3B1bGF0aW9ubW9kZWxzL3N0YW5kYXJkL3Rlc3RzL1N0YW5kYXJkRXhhbXBsZS5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5wb3B1bGF0aW9ubW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3BvcHVsYXRpb25tb2RlbHMvc3RhbmRhcmQvdGVzdHMvU3RhbmRhcmRFeGFtcGxlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjJkNWYzNgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMucG9wdWxhdGlvbm1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9wb3B1bGF0aW9ubW9kZWxzL3N0YW5kYXJkL3Rlc3RzL1N0YW5kYXJkRXhhbXBsZS5qYXZhCkBAIC0wLDAgKzEsMTI0IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC50ZXN0czsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogCisgKiBDb3B5cmlnaHQgKGMpIDIwMTEgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuIAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyAKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0IAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwgCisgKiAKKyAqIENvbnRyaWJ1dG9yczogCisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqYXZhLmlvLkZpbGU7CitpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5EaWFnbm9zdGljOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5VUkk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3Q7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnJlc291cmNlLlJlc291cmNlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5yZXNvdXJjZS5SZXNvdXJjZVNldDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUucmVzb3VyY2UuaW1wbC5SZXNvdXJjZVNldEltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnV0aWwuRGlhZ25vc3RpY2lhbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUueG1pLmltcGwuWE1JUmVzb3VyY2VGYWN0b3J5SW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmRGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZFBhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiBBIHNhbXBsZSB1dGlsaXR5IGZvciB0aGUgJzxlbT48Yj5zdGFuZGFyZDwvYj48L2VtPicgcGFja2FnZS4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgU3RhbmRhcmRFeGFtcGxlIHsKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIExvYWQgYWxsIHRoZSBhcmd1bWVudCBmaWxlIHBhdGhzIG9yIFVSSXMgYXMgaW5zdGFuY2VzIG9mIHRoZSBtb2RlbC4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gYXJncyB0aGUgZmlsZSBwYXRocyBvciBVUklzLgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CisJCS8vIENyZWF0ZSBhIHJlc291cmNlIHNldCB0byBob2xkIHRoZSByZXNvdXJjZXMuCisJCS8vCisJCVJlc291cmNlU2V0IHJlc291cmNlU2V0ID0gbmV3IFJlc291cmNlU2V0SW1wbCgpOworCQkKKwkJLy8gUmVnaXN0ZXIgdGhlIGFwcHJvcHJpYXRlIHJlc291cmNlIGZhY3RvcnkgdG8gaGFuZGxlIGFsbCBmaWxlIGV4dGVuc2lvbnMuCisJCS8vCisJCXJlc291cmNlU2V0LmdldFJlc291cmNlRmFjdG9yeVJlZ2lzdHJ5KCkuZ2V0RXh0ZW5zaW9uVG9GYWN0b3J5TWFwKCkucHV0CisJCQkoUmVzb3VyY2UuRmFjdG9yeS5SZWdpc3RyeS5ERUZBVUxUX0VYVEVOU0lPTiwgCisJCQkgbmV3IFhNSVJlc291cmNlRmFjdG9yeUltcGwoKSk7CisKKwkJLy8gUmVnaXN0ZXIgdGhlIHBhY2thZ2UgdG8gZW5zdXJlIGl0IGlzIGF2YWlsYWJsZSBkdXJpbmcgbG9hZGluZy4KKwkJLy8KKwkJcmVzb3VyY2VTZXQuZ2V0UGFja2FnZVJlZ2lzdHJ5KCkucHV0CisJCQkoU3RhbmRhcmRQYWNrYWdlLmVOU19VUkksIAorCQkJIFN0YW5kYXJkUGFja2FnZS5lSU5TVEFOQ0UpOworICAgICAgICAKKwkJLy8gSWYgdGhlcmUgYXJlIG5vIGFyZ3VtZW50cywgZW1pdCBhbiBhcHByb3ByaWF0ZSB1c2FnZSBtZXNzYWdlLgorCQkvLworCQlpZiAoYXJncy5sZW5ndGggPT0gMCkgeworCQkJU3lzdGVtLm91dC5wcmludGxuKCJFbnRlciBhIGxpc3Qgb2YgZmlsZSBwYXRocyBvciBVUklzIHRoYXQgaGF2ZSBjb250ZW50IGxpa2UgdGhpczoiKTsKKwkJCXRyeSB7CisJCQkJUmVzb3VyY2UgcmVzb3VyY2UgPSByZXNvdXJjZVNldC5jcmVhdGVSZXNvdXJjZShVUkkuY3JlYXRlVVJJKCJodHRwOi8vL015LnN0YW5kYXJkIikpOworCQkJCVN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsIHJvb3QgPSBTdGFuZGFyZEZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZVN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsKCk7CisJCQkJcmVzb3VyY2UuZ2V0Q29udGVudHMoKS5hZGQocm9vdCk7CisJCQkJcmVzb3VyY2Uuc2F2ZShTeXN0ZW0ub3V0LCBudWxsKTsKKwkJCX0KKwkJCWNhdGNoIChJT0V4Y2VwdGlvbiBleGNlcHRpb24pIHsKKwkJCQlleGNlcHRpb24ucHJpbnRTdGFja1RyYWNlKCk7CisJCQl9CisJCX0KKwkJZWxzZSB7CisJCQkvLyBJdGVyYXRlIG92ZXIgYWxsIHRoZSBhcmd1bWVudHMuCisJCQkvLworCQkJZm9yIChpbnQgaSA9IDA7IGkgPCBhcmdzLmxlbmd0aDsgKytpKSB7CisJCQkJLy8gQ29uc3RydWN0IHRoZSBVUkkgZm9yIHRoZSBpbnN0YW5jZSBmaWxlLgorCQkJCS8vIFRoZSBhcmd1bWVudCBpcyB0cmVhdGVkIGFzIGEgZmlsZSBwYXRoIG9ubHkgaWYgaXQgZGVub3RlcyBhbiBleGlzdGluZyBmaWxlLgorCQkJCS8vIE90aGVyd2lzZSwgaXQncyBkaXJlY3RseSB0cmVhdGVkIGFzIGEgVVJMLgorCQkJCS8vCisJCQkJRmlsZSBmaWxlID0gbmV3IEZpbGUoYXJnc1tpXSk7CisJCQkJVVJJIHVyaSA9IGZpbGUuaXNGaWxlKCkgPyBVUkkuY3JlYXRlRmlsZVVSSShmaWxlLmdldEFic29sdXRlUGF0aCgpKTogVVJJLmNyZWF0ZVVSSShhcmdzW2ldKTsKKworCQkJCXRyeSB7CisJCQkJCS8vIERlbWFuZCBsb2FkIHJlc291cmNlIGZvciB0aGlzIGZpbGUuCisJCQkJCS8vCisJCQkJCVJlc291cmNlIHJlc291cmNlID0gcmVzb3VyY2VTZXQuZ2V0UmVzb3VyY2UodXJpLCB0cnVlKTsKKwkJCQkJU3lzdGVtLm91dC5wcmludGxuKCJMb2FkZWQgIiArIHVyaSk7CisKKwkJCQkJLy8gVmFsaWRhdGUgdGhlIGNvbnRlbnRzIG9mIHRoZSBsb2FkZWQgcmVzb3VyY2UuCisJCQkJCS8vCisJCQkJCWZvciAoRU9iamVjdCBlT2JqZWN0IDogcmVzb3VyY2UuZ2V0Q29udGVudHMoKSkgeworCQkJCQkJRGlhZ25vc3RpYyBkaWFnbm9zdGljID0gRGlhZ25vc3RpY2lhbi5JTlNUQU5DRS52YWxpZGF0ZShlT2JqZWN0KTsKKwkJCQkJCWlmIChkaWFnbm9zdGljLmdldFNldmVyaXR5KCkgIT0gRGlhZ25vc3RpYy5PSykgeworCQkJCQkJCXByaW50RGlhZ25vc3RpYyhkaWFnbm9zdGljLCAiIik7CisJCQkJCQl9CisJCQkJCX0KKwkJCQl9CisJCQkJY2F0Y2ggKFJ1bnRpbWVFeGNlcHRpb24gZXhjZXB0aW9uKSB7CisJCQkJCVN5c3RlbS5vdXQucHJpbnRsbigiUHJvYmxlbSBsb2FkaW5nICIgKyB1cmkpOworCQkJCQlleGNlcHRpb24ucHJpbnRTdGFja1RyYWNlKCk7CisJCQkJfQorCQkJfQorCQl9CisJfQorCQorCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogUHJpbnRzIGRpYWdub3N0aWNzIHdpdGggaW5kZW50YXRpb24uCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIGRpYWdub3N0aWMgdGhlIGRpYWdub3N0aWMgdG8gcHJpbnQuCisJICogQHBhcmFtIGluZGVudCB0aGUgaW5kZW50YXRpb24gZm9yIHByaW50aW5nLgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgc3RhdGljIHZvaWQgcHJpbnREaWFnbm9zdGljKERpYWdub3N0aWMgZGlhZ25vc3RpYywgU3RyaW5nIGluZGVudCkgeworCQlTeXN0ZW0ub3V0LnByaW50KGluZGVudCk7CisJCVN5c3RlbS5vdXQucHJpbnRsbihkaWFnbm9zdGljLmdldE1lc3NhZ2UoKSk7CisJCWZvciAoRGlhZ25vc3RpYyBjaGlsZCA6IGRpYWdub3N0aWMuZ2V0Q2hpbGRyZW4oKSkgeworCQkJcHJpbnREaWFnbm9zdGljKGNoaWxkLCBpbmRlbnQgKyAiICAiKTsKKwkJfQorCX0KKworfSAvL1N0YW5kYXJkRXhhbXBsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5wb3B1bGF0aW9ubW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3BvcHVsYXRpb25tb2RlbHMvc3RhbmRhcmQvdGVzdHMvU3RhbmRhcmRQb3B1bGF0aW9uSW5pdGlhbGl6ZXJUZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnBvcHVsYXRpb25tb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vcG9wdWxhdGlvbm1vZGVscy9zdGFuZGFyZC90ZXN0cy9TdGFuZGFyZFBvcHVsYXRpb25Jbml0aWFsaXplclRlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wM2IyMGVhCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5wb3B1bGF0aW9ubW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3BvcHVsYXRpb25tb2RlbHMvc3RhbmRhcmQvdGVzdHMvU3RhbmRhcmRQb3B1bGF0aW9uSW5pdGlhbGl6ZXJUZXN0LmphdmEKQEAgLTAsMCArMSwxMzQgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLnRlc3RzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAKKyAqIENvcHlyaWdodCAoYykgMjAxMSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4gCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIAorICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wIAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQgCisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbCAKKyAqIAorICogQ29udHJpYnV0b3JzOiAKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGphdmEudXRpbC5NYXA7CisKK2ltcG9ydCBqdW5pdC50ZXh0dWkuVGVzdFJ1bm5lcjsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5VUkk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLlNURU1VUkk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkdyYXBoOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5HcmFwaEZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLk5vZGVMYWJlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuTW9kZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLk1vZGVsRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2NlbmFyaW8uU2NlbmFyaW87CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNjZW5hcmlvLlNjZW5hcmlvRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2VxdWVuY2VyLlNlcXVlbmNlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNlcXVlbmNlci5TZXF1ZW50aWFsU2VxdWVuY2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLlBvcHVsYXRpb25MYWJlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLm5vZGVzLk5vZGVzRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLm5vZGVzLlJlZ2lvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmRGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZFBvcHVsYXRpb25Jbml0aWFsaXplcjsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogQSB0ZXN0IGNhc2UgZm9yIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5Qb3B1bGF0aW9uIEluaXRpYWxpemVyPC9iPjwvZW0+Jy4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgU3RhbmRhcmRQb3B1bGF0aW9uSW5pdGlhbGl6ZXJUZXN0IGV4dGVuZHMgUG9wdWxhdGlvbkluaXRpYWxpemVyVGVzdCB7CisKKwlwcml2YXRlIGludCBpbmRpdmlkdWFscyA9IDEwOworCXByaXZhdGUgU3RyaW5nIHBvcHVsYXRpb25JZGVudGlmaWVyID0gImh1bWFuIjsKKwkKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CisJCVRlc3RSdW5uZXIucnVuKFN0YW5kYXJkUG9wdWxhdGlvbkluaXRpYWxpemVyVGVzdC5jbGFzcyk7CisJfQorCisJLyoqCisJICogQ29uc3RydWN0cyBhIG5ldyBQb3B1bGF0aW9uIEluaXRpYWxpemVyIHRlc3QgY2FzZSB3aXRoIHRoZSBnaXZlbiBuYW1lLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBTdGFuZGFyZFBvcHVsYXRpb25Jbml0aWFsaXplclRlc3QoU3RyaW5nIG5hbWUpIHsKKwkJc3VwZXIobmFtZSk7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgZml4dHVyZSBmb3IgdGhpcyBQb3B1bGF0aW9uIEluaXRpYWxpemVyIHRlc3QgY2FzZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgU3RhbmRhcmRQb3B1bGF0aW9uSW5pdGlhbGl6ZXIgZ2V0Rml4dHVyZSgpIHsKKwkJcmV0dXJuIChTdGFuZGFyZFBvcHVsYXRpb25Jbml0aWFsaXplcilmaXh0dXJlOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2Ujc2V0VXAoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgdm9pZCBzZXRVcCgpIHRocm93cyBFeGNlcHRpb24geworCQlzZXRGaXh0dXJlKFN0YW5kYXJkRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlU3RhbmRhcmRQb3B1bGF0aW9uSW5pdGlhbGl6ZXIoKSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZSN0ZWFyRG93bigpCisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIHRlYXJEb3duKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCXNldEZpeHR1cmUobnVsbCk7CisJfQorCisJcHVibGljIHZvaWQgdGVzdEluaXRpYWxpemVSZWdpb24oKSB7CisJCQorCQlTY2VuYXJpbyBzY2VuYXJpbyA9IFNjZW5hcmlvRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlU2NlbmFyaW8oKTsKKwkJTW9kZWwgbW9kZWwgPSBNb2RlbEZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZU1vZGVsKCk7CisJCXNjZW5hcmlvLnNldE1vZGVsKG1vZGVsKTsKKwkJR3JhcGggZ3JhcGggPSBHcmFwaEZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZUdyYXBoKCk7CisJCQorCQlSZWdpb24gcmVnaW9uID0gTm9kZXNGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVSZWdpb24oKTsKKwkJcmVnaW9uLnNldFVSSShTVEVNVVJJLmNyZWF0ZVVSSShSZWdpb24uVVJJX1RZUEVfUkVHSU9OX05PREVfU0VHTUVOVCkpOworCQlncmFwaC5nZXROb2RlcygpLnB1dChyZWdpb24uZ2V0VVJJKCksIHJlZ2lvbik7CisJCQorCQltb2RlbC5nZXRHcmFwaHMoKS5hZGQoZ3JhcGgpOworCQkKKwkJU3RhbmRhcmRQb3B1bGF0aW9uSW5pdGlhbGl6ZXIgaW5pdGlhbGl6ZXIgPSBnZXRGaXh0dXJlKCk7CisJCWluaXRpYWxpemVyLnNldEluZGl2aWR1YWxzKGluZGl2aWR1YWxzKTsKKwkJaW5pdGlhbGl6ZXIuc2V0UG9wdWxhdGlvbklkZW50aWZpZXIocG9wdWxhdGlvbklkZW50aWZpZXIpOworCQltb2RlbC5nZXROb2RlRGVjb3JhdG9ycygpLmFkZChpbml0aWFsaXplcik7CisJCQorCQlTZXF1ZW50aWFsU2VxdWVuY2VyIHNlcSA9IFNlcXVlbmNlckZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZVNlcXVlbnRpYWxTZXF1ZW5jZXIoKTsKKwkJc2VxLnNldFN0YXJ0VGltZShNb2RlbEZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZVNURU1UaW1lKCkpOworCQlzZXEuc2V0RW5kVGltZShNb2RlbEZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZVNURU1UaW1lKCkpOworCQlzZXEuc2V0VGltZUluY3JlbWVudCg4NjQwMDAwMCk7CisJCXNjZW5hcmlvLnNldFNlcXVlbmNlcihzZXEpOworCQlzY2VuYXJpby5pbml0aWFsaXplKCk7CisKKwkJLy8gTWFrZSBzdXJlIHRoZSByZWdpb24gaGFzIGEgcG9wdWxhdGlvbiBsYWJlbAorCQkKKwkJYXNzZXJ0VHJ1ZShzY2VuYXJpby5nZXRDYW5vbmljYWxHcmFwaCgpLmdldE5vZGVMYWJlbHMoKS5zaXplKCkgPT0gMSk7CisJCQorCQlmb3IoTWFwLkVudHJ5PFVSSSwgTm9kZUxhYmVsPiBlbnRyeTpzY2VuYXJpby5nZXRDYW5vbmljYWxHcmFwaCgpLmdldE5vZGVMYWJlbHMoKS5lbnRyeVNldCgpKSB7CQkKKwkJCVBvcHVsYXRpb25MYWJlbCBwbCA9IChQb3B1bGF0aW9uTGFiZWwpZW50cnkuZ2V0VmFsdWUoKTsKKwkKKwkJCWFzc2VydFRydWUocGwuZ2V0UG9wdWxhdGlvbklkZW50aWZpZXIoKS5lcXVhbHMocG9wdWxhdGlvbklkZW50aWZpZXIpKTsKKwkJCWFzc2VydFRydWUocGwuZ2V0Q3VycmVudFBvcHVsYXRpb25WYWx1ZSgpLmdldENvdW50KCkgPT0gaW5kaXZpZHVhbHMpOworCQl9CisJfQorfSAvL1N0YW5kYXJkUG9wdWxhdGlvbkluaXRpYWxpemVyVGVzdApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5wb3B1bGF0aW9ubW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3BvcHVsYXRpb25tb2RlbHMvc3RhbmRhcmQvdGVzdHMvU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxMYWJlbFRlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMucG9wdWxhdGlvbm1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9wb3B1bGF0aW9ubW9kZWxzL3N0YW5kYXJkL3Rlc3RzL1N0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWxUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWNmYWY5NwotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMucG9wdWxhdGlvbm1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9wb3B1bGF0aW9ubW9kZWxzL3N0YW5kYXJkL3Rlc3RzL1N0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWxUZXN0LmphdmEKQEAgLTAsMCArMSw4MyBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQudGVzdHM7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIAorICogQ29weXJpZ2h0IChjKSAyMDExIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiAKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdCAKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sIAorICogCisgKiBDb250cmlidXRvcnM6IAorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiAKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQganVuaXQudGV4dHVpLlRlc3RSdW5uZXI7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmRGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZFBvcHVsYXRpb25Nb2RlbExhYmVsOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiBBIHRlc3QgY2FzZSBmb3IgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPlBvcHVsYXRpb24gTW9kZWwgTGFiZWw8L2I+PC9lbT4nLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBTdGFuZGFyZFBvcHVsYXRpb25Nb2RlbExhYmVsVGVzdCBleHRlbmRzIFBvcHVsYXRpb25Nb2RlbExhYmVsVGVzdCB7CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CisJCVRlc3RSdW5uZXIucnVuKFN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWxUZXN0LmNsYXNzKTsKKwl9CisKKwkvKioKKwkgKiBDb25zdHJ1Y3RzIGEgbmV3IFBvcHVsYXRpb24gTW9kZWwgTGFiZWwgdGVzdCBjYXNlIHdpdGggdGhlIGdpdmVuIG5hbWUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWxUZXN0KFN0cmluZyBuYW1lKSB7CisJCXN1cGVyKG5hbWUpOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIGZpeHR1cmUgZm9yIHRoaXMgUG9wdWxhdGlvbiBNb2RlbCBMYWJlbCB0ZXN0IGNhc2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIFN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWwgZ2V0Rml4dHVyZSgpIHsKKwkJcmV0dXJuIChTdGFuZGFyZFBvcHVsYXRpb25Nb2RlbExhYmVsKWZpeHR1cmU7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZSNzZXRVcCgpCisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIHNldFVwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCXNldEZpeHR1cmUoU3RhbmRhcmRGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVTdGFuZGFyZFBvcHVsYXRpb25Nb2RlbExhYmVsKCkpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2UjdGVhckRvd24oKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgdm9pZCB0ZWFyRG93bigpIHRocm93cyBFeGNlcHRpb24geworCQlzZXRGaXh0dXJlKG51bGwpOworCX0KKworCXB1YmxpYyB2b2lkIHRlc3RTdGFuZGFyZFBvcHVsYXRpb25Nb2RlbExhYmVsKCkgeworCQkvLyBUT0RPOiBJbXBsZW1lbnQgdGVzdAorCQlhc3NlcnRUcnVlKHRydWUpOworCX0KK30gLy9TdGFuZGFyZFBvcHVsYXRpb25Nb2RlbExhYmVsVGVzdApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5wb3B1bGF0aW9ubW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3BvcHVsYXRpb25tb2RlbHMvc3RhbmRhcmQvdGVzdHMvU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxMYWJlbFZhbHVlVGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5wb3B1bGF0aW9ubW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3BvcHVsYXRpb25tb2RlbHMvc3RhbmRhcmQvdGVzdHMvU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxMYWJlbFZhbHVlVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUwNWZmMDEKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnBvcHVsYXRpb25tb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vcG9wdWxhdGlvbm1vZGVscy9zdGFuZGFyZC90ZXN0cy9TdGFuZGFyZFBvcHVsYXRpb25Nb2RlbExhYmVsVmFsdWVUZXN0LmphdmEKQEAgLTAsMCArMSwxMTggQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLnRlc3RzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAKKyAqIENvcHlyaWdodCAoYykgMjAxMSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4gCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIAorICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wIAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQgCisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbCAKKyAqIAorICogQ29udHJpYnV0b3JzOiAKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGp1bml0LnRleHR1aS5UZXN0UnVubmVyOworCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxMYWJlbFZhbHVlOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiBBIHRlc3QgY2FzZSBmb3IgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPlBvcHVsYXRpb24gTW9kZWwgTGFiZWwgVmFsdWU8L2I+PC9lbT4nLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBTdGFuZGFyZFBvcHVsYXRpb25Nb2RlbExhYmVsVmFsdWVUZXN0IGV4dGVuZHMgUG9wdWxhdGlvbk1vZGVsTGFiZWxWYWx1ZVRlc3QgeworCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgeworCQlUZXN0UnVubmVyLnJ1bihTdGFuZGFyZFBvcHVsYXRpb25Nb2RlbExhYmVsVmFsdWVUZXN0LmNsYXNzKTsKKwl9CisKKwkvKioKKwkgKiBDb25zdHJ1Y3RzIGEgbmV3IFBvcHVsYXRpb24gTW9kZWwgTGFiZWwgVmFsdWUgdGVzdCBjYXNlIHdpdGggdGhlIGdpdmVuIG5hbWUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWxWYWx1ZVRlc3QoU3RyaW5nIG5hbWUpIHsKKwkJc3VwZXIobmFtZSk7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgZml4dHVyZSBmb3IgdGhpcyBQb3B1bGF0aW9uIE1vZGVsIExhYmVsIFZhbHVlIHRlc3QgY2FzZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxMYWJlbFZhbHVlIGdldEZpeHR1cmUoKSB7CisJCXJldHVybiAoU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxMYWJlbFZhbHVlKWZpeHR1cmU7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZSNzZXRVcCgpCisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIHNldFVwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCXNldEZpeHR1cmUoU3RhbmRhcmRGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVTdGFuZGFyZFBvcHVsYXRpb25Nb2RlbExhYmVsVmFsdWUoKSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZSN0ZWFyRG93bigpCisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIHRlYXJEb3duKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCXNldEZpeHR1cmUobnVsbCk7CisJfQorCisJLyoqCisJICogVGVzdHMgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWxWYWx1ZSNnZXREZW5zaXR5KCkgPGVtPkRlbnNpdHk8L2VtPn0nIGZlYXR1cmUgZ2V0dGVyLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxMYWJlbFZhbHVlI2dldERlbnNpdHkoKQorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJcHVibGljIHZvaWQgdGVzdEdldERlbnNpdHkoKSB7CisJCS8vIFRPRE86IGltcGxlbWVudCB0aGlzIGZlYXR1cmUgZ2V0dGVyIHRlc3QgbWV0aG9kCisJCS8vIEVuc3VyZSB0aGF0IHlvdSByZW1vdmUgQGdlbmVyYXRlZCBvciBtYXJrIGl0IEBnZW5lcmF0ZWQgTk9UCisJCWFzc2VydFRydWUodHJ1ZSk7CisJfQorCisJLyoqCisJICogVGVzdHMgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWxWYWx1ZSNpc1NldERlbnNpdHkoKSA8ZW0+aXNTZXREZW5zaXR5KCk8L2VtPn0nIG1ldGhvZC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWxWYWx1ZSNpc1NldERlbnNpdHkoKQorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJcHVibGljIHZvaWQgdGVzdElzU2V0RGVuc2l0eSgpIHsKKwkJLy8gVE9ETzogaW1wbGVtZW50IHRoaXMgdGVzdCBtZXRob2QKKwkJLy8gRW5zdXJlIHRoYXQgeW91IHJlbW92ZSBAZ2VuZXJhdGVkIG9yIG1hcmsgaXQgQGdlbmVyYXRlZCBOT1QKKwkJYXNzZXJ0VHJ1ZSh0cnVlKTsKKwl9CisKKwkvKioKKwkgKiBUZXN0cyB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxMYWJlbFZhbHVlI2F2b2lkTmVnYXRpdmUob3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkludGVncmF0aW9uTGFiZWxWYWx1ZSkgPGVtPkFkanVzdCBEZWx0YTwvZW0+fScgb3BlcmF0aW9uLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxMYWJlbFZhbHVlI2F2b2lkTmVnYXRpdmUob3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkludGVncmF0aW9uTGFiZWxWYWx1ZSkKKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCXB1YmxpYyB2b2lkIHRlc3RBZGp1c3REZWx0YV9fSW50ZWdyYXRpb25MYWJlbFZhbHVlKCkgeworCQkvLyBUT0RPOiBpbXBsZW1lbnQgdGhpcyBvcGVyYXRpb24gdGVzdCBtZXRob2QKKwkJLy8gRW5zdXJlIHRoYXQgeW91IHJlbW92ZSBAZ2VuZXJhdGVkIG9yIG1hcmsgaXQgQGdlbmVyYXRlZCBOT1QKKwkJYXNzZXJ0VHJ1ZSh0cnVlKTsKKwl9CisKK30gLy9TdGFuZGFyZFBvcHVsYXRpb25Nb2RlbExhYmVsVmFsdWVUZXN0CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnBvcHVsYXRpb25tb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vcG9wdWxhdGlvbm1vZGVscy9zdGFuZGFyZC90ZXN0cy9TdGFuZGFyZFBvcHVsYXRpb25Nb2RlbFRlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMucG9wdWxhdGlvbm1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9wb3B1bGF0aW9ubW9kZWxzL3N0YW5kYXJkL3Rlc3RzL1N0YW5kYXJkUG9wdWxhdGlvbk1vZGVsVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2NTI3MTEKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnBvcHVsYXRpb25tb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vcG9wdWxhdGlvbm1vZGVscy9zdGFuZGFyZC90ZXN0cy9TdGFuZGFyZFBvcHVsYXRpb25Nb2RlbFRlc3QuamF2YQpAQCAtMCwwICsxLDE0MCBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQudGVzdHM7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIAorICogQ29weXJpZ2h0IChjKSAyMDExIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiAKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdCAKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sIAorICogCisgKiBDb250cmlidXRvcnM6IAorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiAKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgamF2YS51dGlsLk1hcDsKKworaW1wb3J0IGp1bml0LnRleHR1aS5UZXN0UnVubmVyOworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlVSSTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguTm9kZUxhYmVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5Nb2RlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2NlbmFyaW8uU2NlbmFyaW87CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLlBvcHVsYXRpb25Nb2RlbExhYmVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZEZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZFBvcHVsYXRpb25Nb2RlbExhYmVsVmFsdWU7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIEEgdGVzdCBjYXNlIGZvciB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+UG9wdWxhdGlvbiBNb2RlbDwvYj48L2VtPicuCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIFN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsVGVzdCBleHRlbmRzIFBvcHVsYXRpb25Nb2RlbFRlc3QgeworCisJcHVibGljIGZpbmFsIGRvdWJsZSBCSVJUSF9SQVRFID0gMC4xOworCXB1YmxpYyBmaW5hbCBkb3VibGUgREVBVEhfUkFURSA9IDAuMDU7CisJcHVibGljIGZpbmFsIGRvdWJsZSBFWFBFQ1RFRF9DT1VOVCAgPSAxMC41OworCXB1YmxpYyBmaW5hbCBkb3VibGUgRVhQRUNURURfQklSVEhTICA9IDEuMDsKKwlwdWJsaWMgZmluYWwgZG91YmxlIEVYUEVDVEVEX0RFQVRIUyAgPSAwLjU7CisJCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgeworCQlUZXN0UnVubmVyLnJ1bihTdGFuZGFyZFBvcHVsYXRpb25Nb2RlbFRlc3QuY2xhc3MpOworCX0KKworCS8qKgorCSAqIENvbnN0cnVjdHMgYSBuZXcgUG9wdWxhdGlvbiBNb2RlbCB0ZXN0IGNhc2Ugd2l0aCB0aGUgZ2l2ZW4gbmFtZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxUZXN0KFN0cmluZyBuYW1lKSB7CisJCXN1cGVyKG5hbWUpOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIGZpeHR1cmUgZm9yIHRoaXMgUG9wdWxhdGlvbiBNb2RlbCB0ZXN0IGNhc2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIFN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsIGdldEZpeHR1cmUoKSB7CisJCXJldHVybiAoU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWwpZml4dHVyZTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlI3NldFVwKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgc2V0VXAoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJc2V0Rml4dHVyZShTdGFuZGFyZEZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZVN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsKCkpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2UjdGVhckRvd24oKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgdm9pZCB0ZWFyRG93bigpIHRocm93cyBFeGNlcHRpb24geworCQlzZXRGaXh0dXJlKG51bGwpOworCX0KKwkKKwlwdWJsaWMgdm9pZCB0ZXN0U3RhbmRhcmRQb3B1bGF0aW9uTW9kZWwoKSB7CisJCVNjZW5hcmlvIHNjZW5hcmlvID0gY3JlYXRlU2NlbmFyaW8oKTsKKwkJCisJCVN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsIHBvcE1vZGVsID0gU3RhbmRhcmRGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVTdGFuZGFyZFBvcHVsYXRpb25Nb2RlbCgpOworCQkKKwkJTW9kZWwgbSA9IHNjZW5hcmlvLmdldE1vZGVsKCk7CisJCQorCQlwb3BNb2RlbC5zZXRCaXJ0aFJhdGUoQklSVEhfUkFURSk7CisJCXBvcE1vZGVsLnNldERlYXRoUmF0ZShERUFUSF9SQVRFKTsKKwkKKwkJbS5nZXROb2RlRGVjb3JhdG9ycygpLmFkZChwb3BNb2RlbCk7CisJCQorCQlzY2VuYXJpby5pbml0aWFsaXplKCk7CisJCQorCQlzY2VuYXJpby5nZXRTb2x2ZXIoKS5zZXREZWNvcmF0b3JzKHNjZW5hcmlvLmdldENhbm9uaWNhbEdyYXBoKCkuZ2V0RGVjb3JhdG9ycygpKTsKKwkJCisJCWFzc2VydFRydWUoc2NlbmFyaW8uZ2V0Q2Fub25pY2FsR3JhcGgoKS5nZXROb2RlTGFiZWxzKCkuc2l6ZSgpID09IDIpOworCQkKKwkJUG9wdWxhdGlvbk1vZGVsTGFiZWwgcG1sID0gbnVsbDsKKwkJCisJCS8vIE1ha2Ugc3VyZSB0aGUgcG9wdWxhdGlvbiBtb2RlbCBsYWJlbCBpcyB0aGVyZQorCQlmb3IoTWFwLkVudHJ5PFVSSSwgTm9kZUxhYmVsPiBlbnRyeTpzY2VuYXJpby5nZXRDYW5vbmljYWxHcmFwaCgpLmdldE5vZGVMYWJlbHMoKS5lbnRyeVNldCgpKSB7CQkKKwkJCU5vZGVMYWJlbCBubCA9IGVudHJ5LmdldFZhbHVlKCk7CisJCQlpZihubCBpbnN0YW5jZW9mIFBvcHVsYXRpb25Nb2RlbExhYmVsKSB7cG1sID0gKFBvcHVsYXRpb25Nb2RlbExhYmVsKW5sO2JyZWFrO30KKwkJfQorCQkKKwkJYXNzZXJ0Tm90TnVsbChwbWwpOworCQkKKwkJLy8gTWFrZSBzdXJlIHRoZSBudW1iZXIgbWF0Y2hlcyB0aGUgZXhwZWN0ZWQKKwkJU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxMYWJlbFZhbHVlIHZhbHVlID0gKChTdGFuZGFyZFBvcHVsYXRpb25Nb2RlbExhYmVsVmFsdWUpcG1sLmdldEN1cnJlbnRWYWx1ZSgpKTsKKwkJCisJCWFzc2VydFRydWUodmFsdWUuZ2V0Q291bnQoKSA9PSBpbmRpdmlkdWFscyk7CisJCWFzc2VydFRydWUocG1sLmdldFBvcHVsYXRpb25JZGVudGlmaWVyKCkuZXF1YWxzKHBvcHVsYXRpb25JZGVudGlmaWVyKSk7CisJCQorCQkvLyBOb3cgc3RlcAorCQkKKwkJYXNzZXJ0VHJ1ZShzY2VuYXJpby5zdGVwKCkpOworCQkKKwkJLy8gQ2hlY2sgdGhhdCB0aGUgY291bnQvYmlydGhzL2RlYXRocyBtYXRjaAorCQl2YWx1ZSA9ICgoU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxMYWJlbFZhbHVlKXBtbC5nZXRDdXJyZW50VmFsdWUoKSk7CisJCWFzc2VydFRydWUodmFsdWUuZ2V0Q291bnQoKSA9PSBFWFBFQ1RFRF9DT1VOVCk7CisJCWFzc2VydFRydWUodmFsdWUuZ2V0QmlydGhzKCkgPT0gRVhQRUNURURfQklSVEhTKTsKKwkJYXNzZXJ0VHJ1ZSh2YWx1ZS5nZXREZWF0aHMoKSA9PSBFWFBFQ1RFRF9ERUFUSFMpOworCQkKKwkJLy8gCisJfQorCit9IC8vU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxUZXN0CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnBvcHVsYXRpb25tb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vcG9wdWxhdGlvbm1vZGVscy9zdGFuZGFyZC90ZXN0cy9TdGFuZGFyZFRlc3RzLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnBvcHVsYXRpb25tb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vcG9wdWxhdGlvbm1vZGVscy9zdGFuZGFyZC90ZXN0cy9TdGFuZGFyZFRlc3RzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmY4NDgwZgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMucG9wdWxhdGlvbm1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9wb3B1bGF0aW9ubW9kZWxzL3N0YW5kYXJkL3Rlc3RzL1N0YW5kYXJkVGVzdHMuamF2YQpAQCAtMCwwICsxLDY2IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC50ZXN0czsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogCisgKiBDb3B5cmlnaHQgKGMpIDIwMTEgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuIAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyAKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0IAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwgCisgKiAKKyAqIENvbnRyaWJ1dG9yczogCisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdDsKK2ltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdFN1aXRlOworaW1wb3J0IGp1bml0LnRleHR1aS5UZXN0UnVubmVyOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiBBIHRlc3Qgc3VpdGUgZm9yIHRoZSAnPGVtPjxiPnN0YW5kYXJkPC9iPjwvZW0+JyBwYWNrYWdlLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBTdGFuZGFyZFRlc3RzIGV4dGVuZHMgVGVzdFN1aXRlIHsKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKKwkJVGVzdFJ1bm5lci5ydW4oc3VpdGUoKSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHN0YXRpYyBUZXN0IHN1aXRlKCkgeworCQlUZXN0U3VpdGUgc3VpdGUgPSBuZXcgU3RhbmRhcmRUZXN0cygic3RhbmRhcmQgVGVzdHMiKTsKKwkJc3VpdGUuYWRkVGVzdFN1aXRlKFN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsVGVzdC5jbGFzcyk7CisJCXN1aXRlLmFkZFRlc3RTdWl0ZShQb3B1bGF0aW9uTW9kZWxMYWJlbFRlc3QuY2xhc3MpOworCQlzdWl0ZS5hZGRUZXN0U3VpdGUoU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxMYWJlbFRlc3QuY2xhc3MpOworCQlzdWl0ZS5hZGRUZXN0U3VpdGUoUG9wdWxhdGlvbk1vZGVsTGFiZWxWYWx1ZVRlc3QuY2xhc3MpOworCQlzdWl0ZS5hZGRUZXN0U3VpdGUoU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxMYWJlbFZhbHVlVGVzdC5jbGFzcyk7CisJCXN1aXRlLmFkZFRlc3RTdWl0ZShTdG9jaGFzdGljU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxUZXN0LmNsYXNzKTsKKwkJc3VpdGUuYWRkVGVzdFN1aXRlKERlbW9ncmFwaGljUG9wdWxhdGlvbk1vZGVsVGVzdC5jbGFzcyk7CisJCXN1aXRlLmFkZFRlc3RTdWl0ZShTdGFuZGFyZFBvcHVsYXRpb25Jbml0aWFsaXplclRlc3QuY2xhc3MpOworCQlzdWl0ZS5hZGRUZXN0U3VpdGUoU2Vhc29uYWxQb3B1bGF0aW9uTW9kZWxUZXN0LmNsYXNzKTsKKwkJc3VpdGUuYWRkVGVzdFN1aXRlKFlldGlQb3B1bGF0aW9uSW5pdGlhbGl6ZXJUZXN0LmNsYXNzKTsKKwkJc3VpdGUuYWRkVGVzdFN1aXRlKE1vc3F1aXRvUG9wdWxhdGlvbk1vZGVsVGVzdC5jbGFzcyk7CisJCXN1aXRlLmFkZFRlc3RTdWl0ZShBZ2luZ1BvcHVsYXRpb25Nb2RlbFRlc3QuY2xhc3MpOworCQlyZXR1cm4gc3VpdGU7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFN0YW5kYXJkVGVzdHMoU3RyaW5nIG5hbWUpIHsKKwkJc3VwZXIobmFtZSk7CisJfQorCit9IC8vU3RhbmRhcmRUZXN0cwpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5wb3B1bGF0aW9ubW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3BvcHVsYXRpb25tb2RlbHMvc3RhbmRhcmQvdGVzdHMvU3RvY2hhc3RpY1N0YW5kYXJkUG9wdWxhdGlvbk1vZGVsVGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5wb3B1bGF0aW9ubW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3BvcHVsYXRpb25tb2RlbHMvc3RhbmRhcmQvdGVzdHMvU3RvY2hhc3RpY1N0YW5kYXJkUG9wdWxhdGlvbk1vZGVsVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMwYjkyNTkKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnBvcHVsYXRpb25tb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vcG9wdWxhdGlvbm1vZGVscy9zdGFuZGFyZC90ZXN0cy9TdG9jaGFzdGljU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxUZXN0LmphdmEKQEAgLTAsMCArMSw3OSBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQudGVzdHM7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIAorICogQ29weXJpZ2h0IChjKSAyMDExIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiAKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdCAKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sIAorICogCisgKiBDb250cmlidXRvcnM6IAorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiAKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQganVuaXQudGV4dHVpLlRlc3RSdW5uZXI7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmRGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5TdG9jaGFzdGljU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWw7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIEEgdGVzdCBjYXNlIGZvciB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+U3RvY2hhc3RpYyBTdGFuZGFyZCBQb3B1bGF0aW9uIE1vZGVsPC9iPjwvZW0+Jy4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgU3RvY2hhc3RpY1N0YW5kYXJkUG9wdWxhdGlvbk1vZGVsVGVzdCBleHRlbmRzIFN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsVGVzdCB7CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CisJCVRlc3RSdW5uZXIucnVuKFN0b2NoYXN0aWNTdGFuZGFyZFBvcHVsYXRpb25Nb2RlbFRlc3QuY2xhc3MpOworCX0KKworCS8qKgorCSAqIENvbnN0cnVjdHMgYSBuZXcgU3RvY2hhc3RpYyBTdGFuZGFyZCBQb3B1bGF0aW9uIE1vZGVsIHRlc3QgY2FzZSB3aXRoIHRoZSBnaXZlbiBuYW1lLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBTdG9jaGFzdGljU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxUZXN0KFN0cmluZyBuYW1lKSB7CisJCXN1cGVyKG5hbWUpOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIGZpeHR1cmUgZm9yIHRoaXMgU3RvY2hhc3RpYyBTdGFuZGFyZCBQb3B1bGF0aW9uIE1vZGVsIHRlc3QgY2FzZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgU3RvY2hhc3RpY1N0YW5kYXJkUG9wdWxhdGlvbk1vZGVsIGdldEZpeHR1cmUoKSB7CisJCXJldHVybiAoU3RvY2hhc3RpY1N0YW5kYXJkUG9wdWxhdGlvbk1vZGVsKWZpeHR1cmU7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZSNzZXRVcCgpCisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIHNldFVwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCXNldEZpeHR1cmUoU3RhbmRhcmRGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVTdG9jaGFzdGljU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWwoKSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZSN0ZWFyRG93bigpCisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIHRlYXJEb3duKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCXNldEZpeHR1cmUobnVsbCk7CisJfQorCit9IC8vU3RvY2hhc3RpY1N0YW5kYXJkUG9wdWxhdGlvbk1vZGVsVGVzdApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5wb3B1bGF0aW9ubW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3BvcHVsYXRpb25tb2RlbHMvc3RhbmRhcmQvdGVzdHMvWWV0aVBvcHVsYXRpb25Jbml0aWFsaXplclRlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMucG9wdWxhdGlvbm1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9wb3B1bGF0aW9ubW9kZWxzL3N0YW5kYXJkL3Rlc3RzL1lldGlQb3B1bGF0aW9uSW5pdGlhbGl6ZXJUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmM2MDQyZgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMucG9wdWxhdGlvbm1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9wb3B1bGF0aW9ubW9kZWxzL3N0YW5kYXJkL3Rlc3RzL1lldGlQb3B1bGF0aW9uSW5pdGlhbGl6ZXJUZXN0LmphdmEKQEAgLTAsMCArMSw4NSBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQudGVzdHM7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIAorICogQ29weXJpZ2h0IChjKSAyMDExIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiAKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdCAKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sIAorICogCisgKiBDb250cmlidXRvcnM6IAorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiAKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQganVuaXQudGV4dHVpLlRlc3RSdW5uZXI7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmRGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5ZZXRpUG9wdWxhdGlvbkluaXRpYWxpemVyOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiBBIHRlc3QgY2FzZSBmb3IgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPllldGkgUG9wdWxhdGlvbiBJbml0aWFsaXplcjwvYj48L2VtPicuCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIFlldGlQb3B1bGF0aW9uSW5pdGlhbGl6ZXJUZXN0IGV4dGVuZHMgRWFydGhTY2llbmNlUG9wdWxhdGlvbkluaXRpYWxpemVyVGVzdCB7CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CisJCVRlc3RSdW5uZXIucnVuKFlldGlQb3B1bGF0aW9uSW5pdGlhbGl6ZXJUZXN0LmNsYXNzKTsKKwl9CisKKwkvKioKKwkgKiBDb25zdHJ1Y3RzIGEgbmV3IFlldGkgUG9wdWxhdGlvbiBJbml0aWFsaXplciB0ZXN0IGNhc2Ugd2l0aCB0aGUgZ2l2ZW4gbmFtZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgWWV0aVBvcHVsYXRpb25Jbml0aWFsaXplclRlc3QoU3RyaW5nIG5hbWUpIHsKKwkJc3VwZXIobmFtZSk7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgZml4dHVyZSBmb3IgdGhpcyBZZXRpIFBvcHVsYXRpb24gSW5pdGlhbGl6ZXIgdGVzdCBjYXNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgWWV0aVBvcHVsYXRpb25Jbml0aWFsaXplciBnZXRGaXh0dXJlKCkgeworCQlZZXRpUG9wdWxhdGlvbkluaXRpYWxpemVyIHJldFZhbHVlID0gU3RhbmRhcmRGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVZZXRpUG9wdWxhdGlvbkluaXRpYWxpemVyKCk7CisJCXJldHVybiByZXRWYWx1ZTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlI3NldFVwKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgc2V0VXAoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJc2V0Rml4dHVyZShTdGFuZGFyZEZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZVlldGlQb3B1bGF0aW9uSW5pdGlhbGl6ZXIoKSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZSN0ZWFyRG93bigpCisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIHRlYXJEb3duKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCXNldEZpeHR1cmUobnVsbCk7CisJfQorCisJCisJcHVibGljIHZvaWQgdGVzdEluaXRpYWxpemVSZWdpb24oKSB7CisJCS8vIFRPRE86IEltcGxlbWVudCB0ZXN0CisJCWFzc2VydFRydWUodHJ1ZSk7CisJfQorfSAvL1lldGlQb3B1bGF0aW9uSW5pdGlhbGl6ZXJUZXN0CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnBvcHVsYXRpb25tb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdGVzdHMvcG9wdWxhdGlvbm1vZGVscy9Qb3B1bGF0aW9uTW9kZWxUZXN0cy5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5wb3B1bGF0aW9ubW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3Rlc3RzL3BvcHVsYXRpb25tb2RlbHMvUG9wdWxhdGlvbk1vZGVsVGVzdHMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xOTljMWQ4Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5wb3B1bGF0aW9ubW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3Rlc3RzL3BvcHVsYXRpb25tb2RlbHMvUG9wdWxhdGlvbk1vZGVsVGVzdHMuamF2YQpAQCAtMCwwICsxLDU3IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0udGVzdHMucG9wdWxhdGlvbm1vZGVsczsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogCisgKiBDb3B5cmlnaHQgKGMpIDIwMTEgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuIAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyAKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0IAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwgCisgKiAKKyAqIENvbnRyaWJ1dG9yczogCisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdDsKK2ltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdFN1aXRlOworaW1wb3J0IGp1bml0LnRleHR1aS5UZXN0UnVubmVyOworCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLnRlc3RzLlN0YW5kYXJkVGVzdHM7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIEEgdGVzdCBzdWl0ZSBmb3IgdGhlICc8ZW0+PGI+c3RhbmRhcmQ8L2I+PC9lbT4nIHBhY2thZ2UuCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIFBvcHVsYXRpb25Nb2RlbFRlc3RzIGV4dGVuZHMgVGVzdFN1aXRlIHsKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKKwkJVGVzdFJ1bm5lci5ydW4oc3VpdGUoKSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHN0YXRpYyBUZXN0IHN1aXRlKCkgeworCQlUZXN0U3VpdGUgc3VpdGUgPSBuZXcgUG9wdWxhdGlvbk1vZGVsVGVzdHMoIlBvcHVsYXRpb24gTW9kZWwgVGVzdHMiKTsKKwkJc3VpdGUuYWRkVGVzdChTdGFuZGFyZFRlc3RzLnN1aXRlKCkpOworCQlyZXR1cm4gc3VpdGU7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFBvcHVsYXRpb25Nb2RlbFRlc3RzKFN0cmluZyBuYW1lKSB7CisJCXN1cGVyKG5hbWUpOworCX0KKworfSAvL1N0YW5kYXJkVGVzdHMKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMucG9wdWxhdGlvbm1vZGVscy90ZXN0LnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMucG9wdWxhdGlvbm1vZGVscy90ZXN0LnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NjlhY2QxCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5wb3B1bGF0aW9ubW9kZWxzL3Rlc3QueG1sCkBAIC0wLDAgKzEsNTMgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+CisKKzxwcm9qZWN0IG5hbWU9InRlc3RzdWl0ZSIgZGVmYXVsdD0icnVuIiBiYXNlZGlyPSIuIj4KKyAgPCEtLSBUaGUgcHJvcGVydHkgJHtlY2xpcHNlLWhvbWV9IHNob3VsZCBiZSBwYXNzZWQgaW50byB0aGlzIHNjcmlwdCAtLT4KKyAgPCEtLSBTZXQgYSBtZWFuaW5nZnVsIGRlZmF1bHQgdmFsdWUgZm9yIHdoZW4gaXQgaXMgbm90LiAtLT4KKyAgPHByb3BlcnR5IG5hbWU9ImVjbGlwc2UtaG9tZSIgdmFsdWU9IiIvPgorCisKKyAgPCEtLSBzZXRzIHRoZSBwcm9wZXJ0aWVzIGVjbGlwc2UtaG9tZSwgYW5kIGxpYnJhcnktZmlsZSAtLT4KKyAgPHByb3BlcnR5IG5hbWU9InBsdWdpbi1uYW1lIiB2YWx1ZT0ib3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5wb3B1bGF0aW9ubW9kZWxzIi8+CisgIDxwcm9wZXJ0eSBuYW1lPSJsaWJyYXJ5LWZpbGUiCisgICAgICAgICAgICB2YWx1ZT0iJHtlY2xpcHNlLWhvbWV9L3BsdWdpbnMvb3JnLmVjbGlwc2UudGVzdF8zLjMuMC9saWJyYXJ5LnhtbCIvPgorCisgIDwhLS0gVGhpcyB0YXJnZXQgaG9sZHMgYWxsIGluaXRpYWxpemF0aW9uIGNvZGUgdGhhdCBuZWVkcyB0byBiZSBkb25lIGZvciAtLT4KKyAgPCEtLSBhbGwgdGVzdHMgdGhhdCBhcmUgdG8gYmUgcnVuLiBJbml0aWFsaXphdGlvbiBmb3IgaW5kaXZpZHVhbCB0ZXN0cyAtLT4KKyAgPCEtLSBzaG91bGQgYmUgZG9uZSB3aXRoaW4gdGhlIGJvZHkgb2YgdGhlIHN1aXRlIHRhcmdldC4gLS0+CisgIDx0YXJnZXQgbmFtZT0iaW5pdCI+CisgICAgPHRzdGFtcC8+CisgICAgPGRlbGV0ZT4KKyAgICAgIDxmaWxlc2V0IGRpcj0iJHtlY2xpcHNlLWhvbWV9IiBpbmNsdWRlcz0ib3JnKi54bWwiLz4KKyAgICA8L2RlbGV0ZT4KKyAgPC90YXJnZXQ+CisKKyAgPCEtLSBUaGlzIHRhcmdldCBkZWZpbmVzIHRoZSB0ZXN0cyB0aGF0IG5lZWQgdG8gYmUgcnVuLiAtLT4KKyAgPHRhcmdldCBuYW1lPSJzdWl0ZSI+CisgICAgPHByb3BlcnR5IG5hbWU9ImRhdGEtZGlyIiB2YWx1ZT0iJHtlY2xpcHNlLWhvbWV9L3RtcCIvPgorICAgIDxkZWxldGUgZGlyPSIke2RhdGEtZGlyfSIgcXVpZXQ9InRydWUiLz4KKyAgICA8YW50IHRhcmdldD0idWktdGVzdCIgYW50ZmlsZT0iJHtsaWJyYXJ5LWZpbGV9IiBkaXI9IiR7ZWNsaXBzZS1ob21lfSI+CisgICAgICA8cHJvcGVydHkgbmFtZT0iZGF0YS1kaXIiIHZhbHVlPSIke2RhdGEtZGlyfSIvPgorICAgICAgPHByb3BlcnR5IG5hbWU9InBsdWdpbi1uYW1lIiB2YWx1ZT0iJHtwbHVnaW4tbmFtZX0iLz4KKyAgICAgIDxwcm9wZXJ0eSBuYW1lPSJjbGFzc25hbWUiIHZhbHVlPSJvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnBvcHVsYXRpb25tb2RlbHMuUG9wdWxhdGlvbk1vZGVsVGVzdHMiLz4KKyAgICA8L2FudD4KKyAgPC90YXJnZXQ+CisKKyAgPCEtLSBUaGlzIHRhcmdldCBob2xkcyBjb2RlIHRvIGNsZWFudXAgdGhlIHRlc3RpbmcgZW52aXJvbm1lbnQgYWZ0ZXIgLS0+CisgIDwhLS0gYWZ0ZXIgYWxsIG9mIHRoZSB0ZXN0cyBoYXZlIGJlZW4gcnVuLiBZb3UgY2FuIHVzZSB0aGlzIHRhcmdldCB0byAtLT4KKyAgPCEtLSBkZWxldGUgdGVtcG9yYXJ5IGZpbGVzIHRoYXQgaGF2ZSBiZWVuIGNyZWF0ZWQuIC0tPgorICA8dGFyZ2V0IG5hbWU9ImNsZWFudXAiPgorICA8L3RhcmdldD4KKworICA8IS0tIFRoaXMgdGFyZ2V0IHJ1bnMgdGhlIHRlc3Qgc3VpdGUuIEFueSBhY3Rpb25zIHRoYXQgbmVlZCB0byBoYXBwZW4gLS0+CisgIDwhLS0gYWZ0ZXIgYWxsIHRoZSB0ZXN0cyBoYXZlIGJlZW4gcnVuIHNob3VsZCBnbyBoZXJlLiAtLT4KKyAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQsc3VpdGUsY2xlYW51cCI+CisgICAgPGFudCB0YXJnZXQ9ImNvbGxlY3QiIGFudGZpbGU9IiR7bGlicmFyeS1maWxlfSIgZGlyPSIke2VjbGlwc2UtaG9tZX0iPgorICAgICAgPHByb3BlcnR5IG5hbWU9ImluY2x1ZGVzIiB2YWx1ZT0ib3JnKi54bWwiLz4KKyAgICAgIDxwcm9wZXJ0eSBuYW1lPSJvdXRwdXQtZmlsZSIgdmFsdWU9IiR7cGx1Z2luLW5hbWV9LnhtbCIvPgorICAgIDwvYW50PgorICA8L3RhcmdldD4KKworICA8IS0tIFRoaXMgdGFyZ2V0IHJ1bnMgdGhlIHBlcmZvcm1hbmNlIHRlc3Qgc3VpdGVzLiAtLT4KKyAgPHRhcmdldCBuYW1lPSJwZXJmb3JtYW5jZSI+CisgIDwvdGFyZ2V0PgorPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy50cmFuc3BvcnQvLmNsYXNzcGF0aCBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMudHJhbnNwb3J0Ly5jbGFzc3BhdGgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzA0ZTg2MQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMudHJhbnNwb3J0Ly5jbGFzc3BhdGgKQEAgLTAsMCArMSw3IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPGNsYXNzcGF0aD4KKwk8Y2xhc3NwYXRoZW50cnkga2luZD0ic3JjIiBwYXRoPSJzcmMiLz4KKwk8Y2xhc3NwYXRoZW50cnkga2luZD0iY29uIiBwYXRoPSJvcmcuZWNsaXBzZS5qZHQubGF1bmNoaW5nLkpSRV9DT05UQUlORVIvb3JnLmVjbGlwc2UuamR0LmludGVybmFsLmRlYnVnLnVpLmxhdW5jaGVyLlN0YW5kYXJkVk1UeXBlL0oyU0UtMS41Ii8+CisJPGNsYXNzcGF0aGVudHJ5IGtpbmQ9ImNvbiIgcGF0aD0ib3JnLmVjbGlwc2UucGRlLmNvcmUucmVxdWlyZWRQbHVnaW5zIi8+CisJPGNsYXNzcGF0aGVudHJ5IGtpbmQ9Im91dHB1dCIgcGF0aD0iYmluIi8+Cis8L2NsYXNzcGF0aD4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMudHJhbnNwb3J0Ly5wcm9qZWN0IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy50cmFuc3BvcnQvLnByb2plY3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTZhMmFiNQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMudHJhbnNwb3J0Ly5wcm9qZWN0CkBAIC0wLDAgKzEsMjggQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8cHJvamVjdERlc2NyaXB0aW9uPgorCTxuYW1lPm9yZy5lY2xpcHNlLnN0ZW0udGVzdHMudHJhbnNwb3J0PC9uYW1lPgorCTxjb21tZW50PjwvY29tbWVudD4KKwk8cHJvamVjdHM+CisJPC9wcm9qZWN0cz4KKwk8YnVpbGRTcGVjPgorCQk8YnVpbGRDb21tYW5kPgorCQkJPG5hbWU+b3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YWJ1aWxkZXI8L25hbWU+CisJCQk8YXJndW1lbnRzPgorCQkJPC9hcmd1bWVudHM+CisJCTwvYnVpbGRDb21tYW5kPgorCQk8YnVpbGRDb21tYW5kPgorCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLk1hbmlmZXN0QnVpbGRlcjwvbmFtZT4KKwkJCTxhcmd1bWVudHM+CisJCQk8L2FyZ3VtZW50cz4KKwkJPC9idWlsZENvbW1hbmQ+CisJCTxidWlsZENvbW1hbmQ+CisJCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuU2NoZW1hQnVpbGRlcjwvbmFtZT4KKwkJCTxhcmd1bWVudHM+CisJCQk8L2FyZ3VtZW50cz4KKwkJPC9idWlsZENvbW1hbmQ+CisJPC9idWlsZFNwZWM+CisJPG5hdHVyZXM+CisJCTxuYXR1cmU+b3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YW5hdHVyZTwvbmF0dXJlPgorCQk8bmF0dXJlPm9yZy5lY2xpcHNlLnBkZS5QbHVnaW5OYXR1cmU8L25hdHVyZT4KKwk8L25hdHVyZXM+Cis8L3Byb2plY3REZXNjcmlwdGlvbj4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMudHJhbnNwb3J0Ly5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMudHJhbnNwb3J0Ly5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZTY2OTVjCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy50cmFuc3BvcnQvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzCkBAIC0wLDAgKzEsNzMgQEAKKyNNb24gSmFuIDIxIDEyOjQ5OjE1IEVTVCAyMDA4CitlY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29kZWdlbi50YXJnZXRQbGF0Zm9ybT0xLjUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvbXBsaWFuY2U9MS41CitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5kb2MuY29tbWVudC5zdXBwb3J0PWVuYWJsZWQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uYW5ub3RhdGlvblN1cGVySW50ZXJmYWNlPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uYXNzZXJ0SWRlbnRpZmllcj1lcnJvcgorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5hdXRvYm94aW5nPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZGVwcmVjYXRpb249d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5kZXByZWNhdGlvbkluRGVwcmVjYXRlZENvZGU9ZGlzYWJsZWQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZGVwcmVjYXRpb25XaGVuT3ZlcnJpZGluZ0RlcHJlY2F0ZWRNZXRob2Q9ZGlzYWJsZWQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZGlzY291cmFnZWRSZWZlcmVuY2U9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5lbXB0eVN0YXRlbWVudD13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmVudW1JZGVudGlmaWVyPWVycm9yCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZhbGx0aHJvdWdoQ2FzZT1pZ25vcmUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZmF0YWxPcHRpb25hbEVycm9yPWVuYWJsZWQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZmllbGRIaWRpbmc9aWdub3JlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZpbmFsUGFyYW1ldGVyQm91bmQ9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5maW5hbGx5QmxvY2tOb3RDb21wbGV0aW5nTm9ybWFsbHk9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5mb3JiaWRkZW5SZWZlcmVuY2U9ZXJyb3IKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaGlkZGVuQ2F0Y2hCbG9jaz13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmluY29tcGF0aWJsZU5vbkluaGVyaXRlZEludGVyZmFjZU1ldGhvZD13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmluY29tcGxldGVFbnVtU3dpdGNoPWlnbm9yZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbmRpcmVjdFN0YXRpY0FjY2Vzcz13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmludmFsaWRKYXZhZG9jPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW52YWxpZEphdmFkb2NUYWdzPWVuYWJsZWQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW52YWxpZEphdmFkb2NUYWdzRGVwcmVjYXRlZFJlZj1lbmFibGVkCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmludmFsaWRKYXZhZG9jVGFnc05vdFZpc2libGVSZWY9ZW5hYmxlZAorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbnZhbGlkSmF2YWRvY1RhZ3NWaXNpYmlsaXR5PXB1YmxpYworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5sb2NhbFZhcmlhYmxlSGlkaW5nPWlnbm9yZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5tZXRob2RXaXRoQ29uc3RydWN0b3JOYW1lPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0RlcHJlY2F0ZWRBbm5vdGF0aW9uPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0phdmFkb2NDb21tZW50cz1pZ25vcmUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0phdmFkb2NDb21tZW50c092ZXJyaWRpbmc9ZW5hYmxlZAorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nSmF2YWRvY0NvbW1lbnRzVmlzaWJpbGl0eT1wdWJsaWMKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0phdmFkb2NUYWdzPWlnbm9yZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nSmF2YWRvY1RhZ3NPdmVycmlkaW5nPWVuYWJsZWQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0phdmFkb2NUYWdzVmlzaWJpbGl0eT1wdWJsaWMKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ092ZXJyaWRlQW5ub3RhdGlvbj1pZ25vcmUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ1NlcmlhbFZlcnNpb249d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5ub0VmZmVjdEFzc2lnbm1lbnQ9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5ub0ltcGxpY2l0U3RyaW5nQ29udmVyc2lvbj13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm5vbkV4dGVybmFsaXplZFN0cmluZ0xpdGVyYWw9aWdub3JlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm51bGxSZWZlcmVuY2U9aWdub3JlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm92ZXJyaWRpbmdQYWNrYWdlRGVmYXVsdE1ldGhvZD13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnBhcmFtZXRlckFzc2lnbm1lbnQ9aWdub3JlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnBvc3NpYmxlQWNjaWRlbnRhbEJvb2xlYW5Bc3NpZ25tZW50PXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ucG90ZW50aWFsTnVsbFJlZmVyZW5jZT1pZ25vcmUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ucmF3VHlwZVJlZmVyZW5jZT13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnJlZHVuZGFudE51bGxDaGVjaz1pZ25vcmUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uc3BlY2lhbFBhcmFtZXRlckhpZGluZ0ZpZWxkPWRpc2FibGVkCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnN0YXRpY0FjY2Vzc1JlY2VpdmVyPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uc3VwcHJlc3NXYXJuaW5ncz1lbmFibGVkCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnN5bnRoZXRpY0FjY2Vzc0VtdWxhdGlvbj13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnR5cGVQYXJhbWV0ZXJIaWRpbmc9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bmNoZWNrZWRUeXBlT3BlcmF0aW9uPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5kb2N1bWVudGVkRW1wdHlCbG9jaz13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVuaGFuZGxlZFdhcm5pbmdUb2tlbj13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVubmVjZXNzYXJ5RWxzZT1pZ25vcmUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5uZWNlc3NhcnlUeXBlQ2hlY2s9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnF1YWxpZmllZEZpZWxkQWNjZXNzPWlnbm9yZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWREZWNsYXJlZFRocm93bkV4Y2VwdGlvbj13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZERlY2xhcmVkVGhyb3duRXhjZXB0aW9uV2hlbk92ZXJyaWRpbmc9ZW5hYmxlZAorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRJbXBvcnQ9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRMYWJlbD13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZExvY2FsPWlnbm9yZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRQYXJhbWV0ZXI9aWdub3JlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZFBhcmFtZXRlckluY2x1ZGVEb2NDb21tZW50UmVmZXJlbmNlPWVuYWJsZWQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkUGFyYW1ldGVyV2hlbkltcGxlbWVudGluZ0Fic3RyYWN0PWVuYWJsZWQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkUGFyYW1ldGVyV2hlbk92ZXJyaWRpbmdDb25jcmV0ZT1lbmFibGVkCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZFByaXZhdGVNZW1iZXI9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS52YXJhcmdzQXJndW1lbnROZWVkQ2FzdD13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5zb3VyY2U9MS41CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnRyYW5zcG9ydC9NRVRBLUlORi9NQU5JRkVTVC5NRiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMudHJhbnNwb3J0L01FVEEtSU5GL01BTklGRVNULk1GCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNmZTIyMWEKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnRyYW5zcG9ydC9NRVRBLUlORi9NQU5JRkVTVC5NRgpAQCAtMCwwICsxLDE4IEBACitNYW5pZmVzdC1WZXJzaW9uOiAxLjAKK0J1bmRsZS1NYW5pZmVzdFZlcnNpb246IDIKK0J1bmRsZS1OYW1lOiAlcGx1Z2luTmFtZQorQnVuZGxlLVN5bWJvbGljTmFtZTogb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy50cmFuc3BvcnQ7c2luZ2xldG9uOj10cnVlCitCdW5kbGUtVmVyc2lvbjogMS4yLjEKK0J1bmRsZS1DbGFzc1BhdGg6IC4KK0J1bmRsZS1WZW5kb3I6ICVwcm92aWRlck5hbWUKK0J1bmRsZS1Mb2NhbGl6YXRpb246IHBsdWdpbgorRXhwb3J0LVBhY2thZ2U6IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMudHJhbnNwb3J0LnRlc3RzCitSZXF1aXJlLUJ1bmRsZTogb3JnLmVjbGlwc2Uuc3RlbS50cmFuc3BvcnQ7dmlzaWJpbGl0eTo9cmVleHBvcnQsCisgb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsLAorIG9yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGVmaW5pdGlvbnMsCisgb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kaXNlYXNlbW9kZWxzLAorIG9yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZSwKKyBvcmcuZWNsaXBzZS5zdGVtLnNvbHZlcnMuZmQsCisgb3JnLmp1bml0O3Zpc2liaWxpdHk6PXJlZXhwb3J0CitCdW5kbGUtQWN0aXZhdGlvblBvbGljeTogbGF6eQorQnVuZGxlLVJlcXVpcmVkRXhlY3V0aW9uRW52aXJvbm1lbnQ6IEoyU0UtMS41CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnRyYW5zcG9ydC9idWlsZC5wcm9wZXJ0aWVzIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy50cmFuc3BvcnQvYnVpbGQucHJvcGVydGllcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yM2UxNTU1Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy50cmFuc3BvcnQvYnVpbGQucHJvcGVydGllcwpAQCAtMCwwICsxLDExIEBACisKKyMgPGNvcHlyaWdodD4KKyMgPC9jb3B5cmlnaHQ+CisjCisjICRJZCQKKworYmluLmluY2x1ZGVzID0gLixcCisgICAgICAgICAgICAgICBNRVRBLUlORi8KK2phcnMuY29tcGlsZS5vcmRlciA9IC4KK3NvdXJjZS4uID0gc3JjLworb3V0cHV0Li4gPSBiaW4vCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnRyYW5zcG9ydC9lcGwtdjEwLmh0bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnRyYW5zcG9ydC9lcGwtdjEwLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWQ0YjE5NgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMudHJhbnNwb3J0L2VwbC12MTAuaHRtbApAQCAtMCwwICsxLDMyOCBAQAorPGh0bWwgeG1sbnM6bz0idXJuOnNjaGVtYXMtbWljcm9zb2Z0LWNvbTpvZmZpY2U6b2ZmaWNlIgoreG1sbnM6dz0idXJuOnNjaGVtYXMtbWljcm9zb2Z0LWNvbTpvZmZpY2U6d29yZCIKK3htbG5zPSJodHRwOi8vd3d3LnczLm9yZy9UUi9SRUMtaHRtbDQwIj4KKworPGhlYWQ+Cis8bWV0YSBodHRwLWVxdWl2PUNvbnRlbnQtVHlwZSBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9d2luZG93cy0xMjUyIj4KKzxtZXRhIG5hbWU9UHJvZ0lkIGNvbnRlbnQ9V29yZC5Eb2N1bWVudD4KKzxtZXRhIG5hbWU9R2VuZXJhdG9yIGNvbnRlbnQ9Ik1pY3Jvc29mdCBXb3JkIDkiPgorPG1ldGEgbmFtZT1PcmlnaW5hdG9yIGNvbnRlbnQ9Ik1pY3Jvc29mdCBXb3JkIDkiPgorPGxpbmsgcmVsPUZpbGUtTGlzdAoraHJlZj0iLi9FY2xpcHNlJTIwRVBMJTIwMjAwM18xMV8xMCUyMEZpbmFsX2ZpbGVzL2ZpbGVsaXN0LnhtbCI+Cis8dGl0bGU+RWNsaXBzZSBQdWJsaWMgTGljZW5zZSAtIFZlcnNpb24gMS4wPC90aXRsZT4KKzwhLS1baWYgZ3RlIG1zbyA5XT48eG1sPgorIDxvOkRvY3VtZW50UHJvcGVydGllcz4KKyAgPG86UmV2aXNpb24+MjwvbzpSZXZpc2lvbj4KKyAgPG86VG90YWxUaW1lPjM8L286VG90YWxUaW1lPgorICA8bzpDcmVhdGVkPjIwMDQtMDMtMDVUMjM6MDM6MDBaPC9vOkNyZWF0ZWQ+CisgIDxvOkxhc3RTYXZlZD4yMDA0LTAzLTA1VDIzOjAzOjAwWjwvbzpMYXN0U2F2ZWQ+CisgIDxvOlBhZ2VzPjQ8L286UGFnZXM+CisgIDxvOldvcmRzPjE2MjY8L286V29yZHM+CisgIDxvOkNoYXJhY3RlcnM+OTI3MDwvbzpDaGFyYWN0ZXJzPgorICAgPG86TGluZXM+Nzc8L286TGluZXM+CisgIDxvOlBhcmFncmFwaHM+MTg8L286UGFyYWdyYXBocz4KKyAgPG86Q2hhcmFjdGVyc1dpdGhTcGFjZXM+MTEzODQ8L286Q2hhcmFjdGVyc1dpdGhTcGFjZXM+CisgIDxvOlZlcnNpb24+OS40NDAyPC9vOlZlcnNpb24+CisgPC9vOkRvY3VtZW50UHJvcGVydGllcz4KKzwveG1sPjwhW2VuZGlmXS0tPjwhLS1baWYgZ3RlIG1zbyA5XT48eG1sPgorIDx3OldvcmREb2N1bWVudD4KKyAgPHc6VHJhY2tSZXZpc2lvbnMvPgorIDwvdzpXb3JkRG9jdW1lbnQ+Cis8L3htbD48IVtlbmRpZl0tLT4KKzxzdHlsZT4KKzwhLS0KKyAvKiBGb250IERlZmluaXRpb25zICovCitAZm9udC1mYWNlCisJe2ZvbnQtZmFtaWx5OlRhaG9tYTsKKwlwYW5vc2UtMToyIDExIDYgNCAzIDUgNCA0IDIgNDsKKwltc28tZm9udC1jaGFyc2V0OjA7CisJbXNvLWdlbmVyaWMtZm9udC1mYW1pbHk6c3dpc3M7CisJbXNvLWZvbnQtcGl0Y2g6dmFyaWFibGU7CisJbXNvLWZvbnQtc2lnbmF0dXJlOjU1MzY3OTQ5NSAtMjE0NzQ4MzY0OCA4IDAgNjYwNDcgMDt9CisgLyogU3R5bGUgRGVmaW5pdGlvbnMgKi8KK3AuTXNvTm9ybWFsLCBsaS5Nc29Ob3JtYWwsIGRpdi5Nc29Ob3JtYWwKKwl7bXNvLXN0eWxlLXBhcmVudDoiIjsKKwltYXJnaW46MGluOworCW1hcmdpbi1ib3R0b206LjAwMDFwdDsKKwltc28tcGFnaW5hdGlvbjp3aWRvdy1vcnBoYW47CisJZm9udC1zaXplOjEyLjBwdDsKKwlmb250LWZhbWlseToiVGltZXMgTmV3IFJvbWFuIjsKKwltc28tZmFyZWFzdC1mb250LWZhbWlseToiVGltZXMgTmV3IFJvbWFuIjt9CitwCisJe21hcmdpbi1yaWdodDowaW47CisJbXNvLW1hcmdpbi10b3AtYWx0OmF1dG87CisJbXNvLW1hcmdpbi1ib3R0b20tYWx0OmF1dG87CisJbWFyZ2luLWxlZnQ6MGluOworCW1zby1wYWdpbmF0aW9uOndpZG93LW9ycGhhbjsKKwlmb250LXNpemU6MTIuMHB0OworCWZvbnQtZmFtaWx5OiJUaW1lcyBOZXcgUm9tYW4iOworCW1zby1mYXJlYXN0LWZvbnQtZmFtaWx5OiJUaW1lcyBOZXcgUm9tYW4iO30KK3AuQmFsbG9vblRleHQsIGxpLkJhbGxvb25UZXh0LCBkaXYuQmFsbG9vblRleHQKKwl7bXNvLXN0eWxlLW5hbWU6IkJhbGxvb24gVGV4dCI7CisJbWFyZ2luOjBpbjsKKwltYXJnaW4tYm90dG9tOi4wMDAxcHQ7CisJbXNvLXBhZ2luYXRpb246d2lkb3ctb3JwaGFuOworCWZvbnQtc2l6ZTo4LjBwdDsKKwlmb250LWZhbWlseTpUYWhvbWE7CisJbXNvLWZhcmVhc3QtZm9udC1mYW1pbHk6IlRpbWVzIE5ldyBSb21hbiI7fQorQHBhZ2UgU2VjdGlvbjEKKwl7c2l6ZTo4LjVpbiAxMS4waW47CisJbWFyZ2luOjEuMGluIDEuMjVpbiAxLjBpbiAxLjI1aW47CisJbXNvLWhlYWRlci1tYXJnaW46LjVpbjsKKwltc28tZm9vdGVyLW1hcmdpbjouNWluOworCW1zby1wYXBlci1zb3VyY2U6MDt9CitkaXYuU2VjdGlvbjEKKwl7cGFnZTpTZWN0aW9uMTt9CistLT4KKzwvc3R5bGU+Cis8L2hlYWQ+CisKKzxib2R5IGxhbmc9RU4tVVMgc3R5bGU9J3RhYi1pbnRlcnZhbDouNWluJz4KKworPGRpdiBjbGFzcz1TZWN0aW9uMT4KKworPHAgYWxpZ249Y2VudGVyIHN0eWxlPSd0ZXh0LWFsaWduOmNlbnRlcic+PGI+RWNsaXBzZSBQdWJsaWMgTGljZW5zZSAtIHYgMS4wPC9iPgorPC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+VEhFIEFDQ09NUEFOWUlORyBQUk9HUkFNIElTIFBST1ZJREVEIFVOREVSCitUSEUgVEVSTVMgT0YgVEhJUyBFQ0xJUFNFIFBVQkxJQyBMSUNFTlNFICgmcXVvdDtBR1JFRU1FTlQmcXVvdDspLiBBTlkgVVNFLAorUkVQUk9EVUNUSU9OIE9SIERJU1RSSUJVVElPTiBPRiBUSEUgUFJPR1JBTSBDT05TVElUVVRFUyBSRUNJUElFTlQnUyBBQ0NFUFRBTkNFCitPRiBUSElTIEFHUkVFTUVOVC48L3NwYW4+IDwvcD4KKworPHA+PGI+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPjEuIERFRklOSVRJT05TPC9zcGFuPjwvYj4gPC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+JnF1b3Q7Q29udHJpYnV0aW9uJnF1b3Q7IG1lYW5zOjwvc3Bhbj4gPC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5hKQoraW4gdGhlIGNhc2Ugb2YgdGhlIGluaXRpYWwgQ29udHJpYnV0b3IsIHRoZSBpbml0aWFsIGNvZGUgYW5kIGRvY3VtZW50YXRpb24KK2Rpc3RyaWJ1dGVkIHVuZGVyIHRoaXMgQWdyZWVtZW50LCBhbmQ8YnIgY2xlYXI9bGVmdD4KK2IpIGluIHRoZSBjYXNlIG9mIGVhY2ggc3Vic2VxdWVudCBDb250cmlidXRvcjo8L3NwYW4+PC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5pKQorY2hhbmdlcyB0byB0aGUgUHJvZ3JhbSwgYW5kPC9zcGFuPjwvcD4KKworPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+aWkpCithZGRpdGlvbnMgdG8gdGhlIFByb2dyYW07PC9zcGFuPjwvcD4KKworPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+d2hlcmUKK3N1Y2ggY2hhbmdlcyBhbmQvb3IgYWRkaXRpb25zIHRvIHRoZSBQcm9ncmFtIG9yaWdpbmF0ZSBmcm9tIGFuZCBhcmUgZGlzdHJpYnV0ZWQKK2J5IHRoYXQgcGFydGljdWxhciBDb250cmlidXRvci4gQSBDb250cmlidXRpb24gJ29yaWdpbmF0ZXMnIGZyb20gYSBDb250cmlidXRvcgoraWYgaXQgd2FzIGFkZGVkIHRvIHRoZSBQcm9ncmFtIGJ5IHN1Y2ggQ29udHJpYnV0b3IgaXRzZWxmIG9yIGFueW9uZSBhY3Rpbmcgb24KK3N1Y2ggQ29udHJpYnV0b3IncyBiZWhhbGYuIENvbnRyaWJ1dGlvbnMgZG8gbm90IGluY2x1ZGUgYWRkaXRpb25zIHRvIHRoZQorUHJvZ3JhbSB3aGljaDogKGkpIGFyZSBzZXBhcmF0ZSBtb2R1bGVzIG9mIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIGluIGNvbmp1bmN0aW9uCit3aXRoIHRoZSBQcm9ncmFtIHVuZGVyIHRoZWlyIG93biBsaWNlbnNlIGFncmVlbWVudCwgYW5kIChpaSkgYXJlIG5vdCBkZXJpdmF0aXZlCit3b3JrcyBvZiB0aGUgUHJvZ3JhbS4gPC9zcGFuPjwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPiZxdW90O0NvbnRyaWJ1dG9yJnF1b3Q7IG1lYW5zIGFueSBwZXJzb24gb3IKK2VudGl0eSB0aGF0IGRpc3RyaWJ1dGVzIHRoZSBQcm9ncmFtLjwvc3Bhbj4gPC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+JnF1b3Q7TGljZW5zZWQgUGF0ZW50cyAmcXVvdDsgbWVhbiBwYXRlbnQKK2NsYWltcyBsaWNlbnNhYmxlIGJ5IGEgQ29udHJpYnV0b3Igd2hpY2ggYXJlIG5lY2Vzc2FyaWx5IGluZnJpbmdlZCBieSB0aGUgdXNlCitvciBzYWxlIG9mIGl0cyBDb250cmlidXRpb24gYWxvbmUgb3Igd2hlbiBjb21iaW5lZCB3aXRoIHRoZSBQcm9ncmFtLiA8L3NwYW4+PC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+JnF1b3Q7UHJvZ3JhbSZxdW90OyBtZWFucyB0aGUgQ29udHJpYnV0aW9ucworZGlzdHJpYnV0ZWQgaW4gYWNjb3JkYW5jZSB3aXRoIHRoaXMgQWdyZWVtZW50Ljwvc3Bhbj4gPC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+JnF1b3Q7UmVjaXBpZW50JnF1b3Q7IG1lYW5zIGFueW9uZSB3aG8KK3JlY2VpdmVzIHRoZSBQcm9ncmFtIHVuZGVyIHRoaXMgQWdyZWVtZW50LCBpbmNsdWRpbmcgYWxsIENvbnRyaWJ1dG9ycy48L3NwYW4+IDwvcD4KKworPHA+PGI+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPjIuIEdSQU5UIE9GIFJJR0hUUzwvc3Bhbj48L2I+IDwvcD4KKworPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YSkKK1N1YmplY3QgdG8gdGhlIHRlcm1zIG9mIHRoaXMgQWdyZWVtZW50LCBlYWNoIENvbnRyaWJ1dG9yIGhlcmVieSBncmFudHMgUmVjaXBpZW50CithIG5vbi1leGNsdXNpdmUsIHdvcmxkd2lkZSwgcm95YWx0eS1mcmVlIGNvcHlyaWdodCBsaWNlbnNlIHRvPHNwYW4KK3N0eWxlPSdjb2xvcjpyZWQnPiA8L3NwYW4+cmVwcm9kdWNlLCBwcmVwYXJlIGRlcml2YXRpdmUgd29ya3Mgb2YsIHB1YmxpY2x5CitkaXNwbGF5LCBwdWJsaWNseSBwZXJmb3JtLCBkaXN0cmlidXRlIGFuZCBzdWJsaWNlbnNlIHRoZSBDb250cmlidXRpb24gb2Ygc3VjaAorQ29udHJpYnV0b3IsIGlmIGFueSwgYW5kIHN1Y2ggZGVyaXZhdGl2ZSB3b3JrcywgaW4gc291cmNlIGNvZGUgYW5kIG9iamVjdCBjb2RlCitmb3JtLjwvc3Bhbj48L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmIpCitTdWJqZWN0IHRvIHRoZSB0ZXJtcyBvZiB0aGlzIEFncmVlbWVudCwgZWFjaCBDb250cmlidXRvciBoZXJlYnkgZ3JhbnRzCitSZWNpcGllbnQgYSBub24tZXhjbHVzaXZlLCB3b3JsZHdpZGUsPHNwYW4gc3R5bGU9J2NvbG9yOmdyZWVuJz4gPC9zcGFuPnJveWFsdHktZnJlZQorcGF0ZW50IGxpY2Vuc2UgdW5kZXIgTGljZW5zZWQgUGF0ZW50cyB0byBtYWtlLCB1c2UsIHNlbGwsIG9mZmVyIHRvIHNlbGwsIGltcG9ydAorYW5kIG90aGVyd2lzZSB0cmFuc2ZlciB0aGUgQ29udHJpYnV0aW9uIG9mIHN1Y2ggQ29udHJpYnV0b3IsIGlmIGFueSwgaW4gc291cmNlCitjb2RlIGFuZCBvYmplY3QgY29kZSBmb3JtLiBUaGlzIHBhdGVudCBsaWNlbnNlIHNoYWxsIGFwcGx5IHRvIHRoZSBjb21iaW5hdGlvbgorb2YgdGhlIENvbnRyaWJ1dGlvbiBhbmQgdGhlIFByb2dyYW0gaWYsIGF0IHRoZSB0aW1lIHRoZSBDb250cmlidXRpb24gaXMgYWRkZWQKK2J5IHRoZSBDb250cmlidXRvciwgc3VjaCBhZGRpdGlvbiBvZiB0aGUgQ29udHJpYnV0aW9uIGNhdXNlcyBzdWNoIGNvbWJpbmF0aW9uCit0byBiZSBjb3ZlcmVkIGJ5IHRoZSBMaWNlbnNlZCBQYXRlbnRzLiBUaGUgcGF0ZW50IGxpY2Vuc2Ugc2hhbGwgbm90IGFwcGx5IHRvCithbnkgb3RoZXIgY29tYmluYXRpb25zIHdoaWNoIGluY2x1ZGUgdGhlIENvbnRyaWJ1dGlvbi4gTm8gaGFyZHdhcmUgcGVyIHNlIGlzCitsaWNlbnNlZCBoZXJldW5kZXIuIDwvc3Bhbj48L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmMpCitSZWNpcGllbnQgdW5kZXJzdGFuZHMgdGhhdCBhbHRob3VnaCBlYWNoIENvbnRyaWJ1dG9yIGdyYW50cyB0aGUgbGljZW5zZXMgdG8gaXRzCitDb250cmlidXRpb25zIHNldCBmb3J0aCBoZXJlaW4sIG5vIGFzc3VyYW5jZXMgYXJlIHByb3ZpZGVkIGJ5IGFueSBDb250cmlidXRvcgordGhhdCB0aGUgUHJvZ3JhbSBkb2VzIG5vdCBpbmZyaW5nZSB0aGUgcGF0ZW50IG9yIG90aGVyIGludGVsbGVjdHVhbCBwcm9wZXJ0eQorcmlnaHRzIG9mIGFueSBvdGhlciBlbnRpdHkuIEVhY2ggQ29udHJpYnV0b3IgZGlzY2xhaW1zIGFueSBsaWFiaWxpdHkgdG8gUmVjaXBpZW50Citmb3IgY2xhaW1zIGJyb3VnaHQgYnkgYW55IG90aGVyIGVudGl0eSBiYXNlZCBvbiBpbmZyaW5nZW1lbnQgb2YgaW50ZWxsZWN0dWFsCitwcm9wZXJ0eSByaWdodHMgb3Igb3RoZXJ3aXNlLiBBcyBhIGNvbmRpdGlvbiB0byBleGVyY2lzaW5nIHRoZSByaWdodHMgYW5kCitsaWNlbnNlcyBncmFudGVkIGhlcmV1bmRlciwgZWFjaCBSZWNpcGllbnQgaGVyZWJ5IGFzc3VtZXMgc29sZSByZXNwb25zaWJpbGl0eQordG8gc2VjdXJlIGFueSBvdGhlciBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIG5lZWRlZCwgaWYgYW55LiBGb3IgZXhhbXBsZSwKK2lmIGEgdGhpcmQgcGFydHkgcGF0ZW50IGxpY2Vuc2UgaXMgcmVxdWlyZWQgdG8gYWxsb3cgUmVjaXBpZW50IHRvIGRpc3RyaWJ1dGUKK3RoZSBQcm9ncmFtLCBpdCBpcyBSZWNpcGllbnQncyByZXNwb25zaWJpbGl0eSB0byBhY3F1aXJlIHRoYXQgbGljZW5zZSBiZWZvcmUKK2Rpc3RyaWJ1dGluZyB0aGUgUHJvZ3JhbS48L3NwYW4+PC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5kKQorRWFjaCBDb250cmlidXRvciByZXByZXNlbnRzIHRoYXQgdG8gaXRzIGtub3dsZWRnZSBpdCBoYXMgc3VmZmljaWVudCBjb3B5cmlnaHQKK3JpZ2h0cyBpbiBpdHMgQ29udHJpYnV0aW9uLCBpZiBhbnksIHRvIGdyYW50IHRoZSBjb3B5cmlnaHQgbGljZW5zZSBzZXQgZm9ydGggaW4KK3RoaXMgQWdyZWVtZW50LiA8L3NwYW4+PC9wPgorCis8cD48Yj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+My4gUkVRVUlSRU1FTlRTPC9zcGFuPjwvYj4gPC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+QSBDb250cmlidXRvciBtYXkgY2hvb3NlIHRvIGRpc3RyaWJ1dGUgdGhlCitQcm9ncmFtIGluIG9iamVjdCBjb2RlIGZvcm0gdW5kZXIgaXRzIG93biBsaWNlbnNlIGFncmVlbWVudCwgcHJvdmlkZWQgdGhhdDo8L3NwYW4+Cis8L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmEpCitpdCBjb21wbGllcyB3aXRoIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGlzIEFncmVlbWVudDsgYW5kPC9zcGFuPjwvcD4KKworPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YikKK2l0cyBsaWNlbnNlIGFncmVlbWVudDo8L3NwYW4+PC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5pKQorZWZmZWN0aXZlbHkgZGlzY2xhaW1zIG9uIGJlaGFsZiBvZiBhbGwgQ29udHJpYnV0b3JzIGFsbCB3YXJyYW50aWVzIGFuZAorY29uZGl0aW9ucywgZXhwcmVzcyBhbmQgaW1wbGllZCwgaW5jbHVkaW5nIHdhcnJhbnRpZXMgb3IgY29uZGl0aW9ucyBvZiB0aXRsZQorYW5kIG5vbi1pbmZyaW5nZW1lbnQsIGFuZCBpbXBsaWVkIHdhcnJhbnRpZXMgb3IgY29uZGl0aW9ucyBvZiBtZXJjaGFudGFiaWxpdHkKK2FuZCBmaXRuZXNzIGZvciBhIHBhcnRpY3VsYXIgcHVycG9zZTsgPC9zcGFuPjwvcD4KKworPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+aWkpCitlZmZlY3RpdmVseSBleGNsdWRlcyBvbiBiZWhhbGYgb2YgYWxsIENvbnRyaWJ1dG9ycyBhbGwgbGlhYmlsaXR5IGZvciBkYW1hZ2VzLAoraW5jbHVkaW5nIGRpcmVjdCwgaW5kaXJlY3QsIHNwZWNpYWwsIGluY2lkZW50YWwgYW5kIGNvbnNlcXVlbnRpYWwgZGFtYWdlcywgc3VjaAorYXMgbG9zdCBwcm9maXRzOyA8L3NwYW4+PC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5paWkpCitzdGF0ZXMgdGhhdCBhbnkgcHJvdmlzaW9ucyB3aGljaCBkaWZmZXIgZnJvbSB0aGlzIEFncmVlbWVudCBhcmUgb2ZmZXJlZCBieSB0aGF0CitDb250cmlidXRvciBhbG9uZSBhbmQgbm90IGJ5IGFueSBvdGhlciBwYXJ0eTsgYW5kPC9zcGFuPjwvcD4KKworPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+aXYpCitzdGF0ZXMgdGhhdCBzb3VyY2UgY29kZSBmb3IgdGhlIFByb2dyYW0gaXMgYXZhaWxhYmxlIGZyb20gc3VjaCBDb250cmlidXRvciwgYW5kCitpbmZvcm1zIGxpY2Vuc2VlcyBob3cgdG8gb2J0YWluIGl0IGluIGEgcmVhc29uYWJsZSBtYW5uZXIgb24gb3IgdGhyb3VnaCBhCittZWRpdW0gY3VzdG9tYXJpbHkgdXNlZCBmb3Igc29mdHdhcmUgZXhjaGFuZ2UuPHNwYW4gc3R5bGU9J2NvbG9yOmJsdWUnPiA8L3NwYW4+PC9zcGFuPjwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPldoZW4gdGhlIFByb2dyYW0gaXMgbWFkZSBhdmFpbGFibGUgaW4gc291cmNlCitjb2RlIGZvcm06PC9zcGFuPiA8L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmEpCitpdCBtdXN0IGJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoaXMgQWdyZWVtZW50OyBhbmQgPC9zcGFuPjwvcD4KKworPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YikgYQorY29weSBvZiB0aGlzIEFncmVlbWVudCBtdXN0IGJlIGluY2x1ZGVkIHdpdGggZWFjaCBjb3B5IG9mIHRoZSBQcm9ncmFtLiA8L3NwYW4+PC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+Q29udHJpYnV0b3JzIG1heSBub3QgcmVtb3ZlIG9yIGFsdGVyIGFueQorY29weXJpZ2h0IG5vdGljZXMgY29udGFpbmVkIHdpdGhpbiB0aGUgUHJvZ3JhbS4gPC9zcGFuPjwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkVhY2ggQ29udHJpYnV0b3IgbXVzdCBpZGVudGlmeSBpdHNlbGYgYXMgdGhlCitvcmlnaW5hdG9yIG9mIGl0cyBDb250cmlidXRpb24sIGlmIGFueSwgaW4gYSBtYW5uZXIgdGhhdCByZWFzb25hYmx5IGFsbG93cworc3Vic2VxdWVudCBSZWNpcGllbnRzIHRvIGlkZW50aWZ5IHRoZSBvcmlnaW5hdG9yIG9mIHRoZSBDb250cmlidXRpb24uIDwvc3Bhbj48L3A+CisKKzxwPjxiPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz40LiBDT01NRVJDSUFMIERJU1RSSUJVVElPTjwvc3Bhbj48L2I+IDwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkNvbW1lcmNpYWwgZGlzdHJpYnV0b3JzIG9mIHNvZnR3YXJlIG1heQorYWNjZXB0IGNlcnRhaW4gcmVzcG9uc2liaWxpdGllcyB3aXRoIHJlc3BlY3QgdG8gZW5kIHVzZXJzLCBidXNpbmVzcyBwYXJ0bmVycworYW5kIHRoZSBsaWtlLiBXaGlsZSB0aGlzIGxpY2Vuc2UgaXMgaW50ZW5kZWQgdG8gZmFjaWxpdGF0ZSB0aGUgY29tbWVyY2lhbCB1c2UKK29mIHRoZSBQcm9ncmFtLCB0aGUgQ29udHJpYnV0b3Igd2hvIGluY2x1ZGVzIHRoZSBQcm9ncmFtIGluIGEgY29tbWVyY2lhbAorcHJvZHVjdCBvZmZlcmluZyBzaG91bGQgZG8gc28gaW4gYSBtYW5uZXIgd2hpY2ggZG9lcyBub3QgY3JlYXRlIHBvdGVudGlhbAorbGlhYmlsaXR5IGZvciBvdGhlciBDb250cmlidXRvcnMuIFRoZXJlZm9yZSwgaWYgYSBDb250cmlidXRvciBpbmNsdWRlcyB0aGUKK1Byb2dyYW0gaW4gYSBjb21tZXJjaWFsIHByb2R1Y3Qgb2ZmZXJpbmcsIHN1Y2ggQ29udHJpYnV0b3IgKCZxdW90O0NvbW1lcmNpYWwKK0NvbnRyaWJ1dG9yJnF1b3Q7KSBoZXJlYnkgYWdyZWVzIHRvIGRlZmVuZCBhbmQgaW5kZW1uaWZ5IGV2ZXJ5IG90aGVyCitDb250cmlidXRvciAoJnF1b3Q7SW5kZW1uaWZpZWQgQ29udHJpYnV0b3ImcXVvdDspIGFnYWluc3QgYW55IGxvc3NlcywgZGFtYWdlcyBhbmQKK2Nvc3RzIChjb2xsZWN0aXZlbHkgJnF1b3Q7TG9zc2VzJnF1b3Q7KSBhcmlzaW5nIGZyb20gY2xhaW1zLCBsYXdzdWl0cyBhbmQgb3RoZXIKK2xlZ2FsIGFjdGlvbnMgYnJvdWdodCBieSBhIHRoaXJkIHBhcnR5IGFnYWluc3QgdGhlIEluZGVtbmlmaWVkIENvbnRyaWJ1dG9yIHRvCit0aGUgZXh0ZW50IGNhdXNlZCBieSB0aGUgYWN0cyBvciBvbWlzc2lvbnMgb2Ygc3VjaCBDb21tZXJjaWFsIENvbnRyaWJ1dG9yIGluCitjb25uZWN0aW9uIHdpdGggaXRzIGRpc3RyaWJ1dGlvbiBvZiB0aGUgUHJvZ3JhbSBpbiBhIGNvbW1lcmNpYWwgcHJvZHVjdAorb2ZmZXJpbmcuIFRoZSBvYmxpZ2F0aW9ucyBpbiB0aGlzIHNlY3Rpb24gZG8gbm90IGFwcGx5IHRvIGFueSBjbGFpbXMgb3IgTG9zc2VzCityZWxhdGluZyB0byBhbnkgYWN0dWFsIG9yIGFsbGVnZWQgaW50ZWxsZWN0dWFsIHByb3BlcnR5IGluZnJpbmdlbWVudC4gSW4gb3JkZXIKK3RvIHF1YWxpZnksIGFuIEluZGVtbmlmaWVkIENvbnRyaWJ1dG9yIG11c3Q6IGEpIHByb21wdGx5IG5vdGlmeSB0aGUgQ29tbWVyY2lhbAorQ29udHJpYnV0b3IgaW4gd3JpdGluZyBvZiBzdWNoIGNsYWltLCBhbmQgYikgYWxsb3cgdGhlIENvbW1lcmNpYWwgQ29udHJpYnV0b3IKK3RvIGNvbnRyb2wsIGFuZCBjb29wZXJhdGUgd2l0aCB0aGUgQ29tbWVyY2lhbCBDb250cmlidXRvciBpbiwgdGhlIGRlZmVuc2UgYW5kCithbnkgcmVsYXRlZCBzZXR0bGVtZW50IG5lZ290aWF0aW9ucy4gVGhlIEluZGVtbmlmaWVkIENvbnRyaWJ1dG9yIG1heSBwYXJ0aWNpcGF0ZQoraW4gYW55IHN1Y2ggY2xhaW0gYXQgaXRzIG93biBleHBlbnNlLjwvc3Bhbj4gPC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+Rm9yIGV4YW1wbGUsIGEgQ29udHJpYnV0b3IgbWlnaHQgaW5jbHVkZSB0aGUKK1Byb2dyYW0gaW4gYSBjb21tZXJjaWFsIHByb2R1Y3Qgb2ZmZXJpbmcsIFByb2R1Y3QgWC4gVGhhdCBDb250cmlidXRvciBpcyB0aGVuIGEKK0NvbW1lcmNpYWwgQ29udHJpYnV0b3IuIElmIHRoYXQgQ29tbWVyY2lhbCBDb250cmlidXRvciB0aGVuIG1ha2VzIHBlcmZvcm1hbmNlCitjbGFpbXMsIG9yIG9mZmVycyB3YXJyYW50aWVzIHJlbGF0ZWQgdG8gUHJvZHVjdCBYLCB0aG9zZSBwZXJmb3JtYW5jZSBjbGFpbXMgYW5kCit3YXJyYW50aWVzIGFyZSBzdWNoIENvbW1lcmNpYWwgQ29udHJpYnV0b3IncyByZXNwb25zaWJpbGl0eSBhbG9uZS4gVW5kZXIgdGhpcworc2VjdGlvbiwgdGhlIENvbW1lcmNpYWwgQ29udHJpYnV0b3Igd291bGQgaGF2ZSB0byBkZWZlbmQgY2xhaW1zIGFnYWluc3QgdGhlCitvdGhlciBDb250cmlidXRvcnMgcmVsYXRlZCB0byB0aG9zZSBwZXJmb3JtYW5jZSBjbGFpbXMgYW5kIHdhcnJhbnRpZXMsIGFuZCBpZiBhCitjb3VydCByZXF1aXJlcyBhbnkgb3RoZXIgQ29udHJpYnV0b3IgdG8gcGF5IGFueSBkYW1hZ2VzIGFzIGEgcmVzdWx0LCB0aGUKK0NvbW1lcmNpYWwgQ29udHJpYnV0b3IgbXVzdCBwYXkgdGhvc2UgZGFtYWdlcy48L3NwYW4+IDwvcD4KKworPHA+PGI+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPjUuIE5PIFdBUlJBTlRZPC9zcGFuPjwvYj4gPC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+RVhDRVBUIEFTIEVYUFJFU1NMWSBTRVQgRk9SVEggSU4gVEhJUworQUdSRUVNRU5ULCBUSEUgUFJPR1JBTSBJUyBQUk9WSURFRCBPTiBBTiAmcXVvdDtBUyBJUyZxdW90OyBCQVNJUywgV0lUSE9VVAorV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBFSVRIRVIgRVhQUkVTUyBPUiBJTVBMSUVEIElOQ0xVRElORywKK1dJVEhPVVQgTElNSVRBVElPTiwgQU5ZIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBUSVRMRSwgTk9OLUlORlJJTkdFTUVOVCwKK01FUkNIQU5UQUJJTElUWSBPUiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gRWFjaCBSZWNpcGllbnQgaXMgc29sZWx5CityZXNwb25zaWJsZSBmb3IgZGV0ZXJtaW5pbmcgdGhlIGFwcHJvcHJpYXRlbmVzcyBvZiB1c2luZyBhbmQgZGlzdHJpYnV0aW5nIHRoZQorUHJvZ3JhbSBhbmQgYXNzdW1lcyBhbGwgcmlza3MgYXNzb2NpYXRlZCB3aXRoIGl0cyBleGVyY2lzZSBvZiByaWdodHMgdW5kZXIgdGhpcworQWdyZWVtZW50ICwgaW5jbHVkaW5nIGJ1dCBub3QgbGltaXRlZCB0byB0aGUgcmlza3MgYW5kIGNvc3RzIG9mIHByb2dyYW0gZXJyb3JzLAorY29tcGxpYW5jZSB3aXRoIGFwcGxpY2FibGUgbGF3cywgZGFtYWdlIHRvIG9yIGxvc3Mgb2YgZGF0YSwgcHJvZ3JhbXMgb3IKK2VxdWlwbWVudCwgYW5kIHVuYXZhaWxhYmlsaXR5IG9yIGludGVycnVwdGlvbiBvZiBvcGVyYXRpb25zLiA8L3NwYW4+PC9wPgorCis8cD48Yj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+Ni4gRElTQ0xBSU1FUiBPRiBMSUFCSUxJVFk8L3NwYW4+PC9iPiA8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5FWENFUFQgQVMgRVhQUkVTU0xZIFNFVCBGT1JUSCBJTiBUSElTCitBR1JFRU1FTlQsIE5FSVRIRVIgUkVDSVBJRU5UIE5PUiBBTlkgQ09OVFJJQlVUT1JTIFNIQUxMIEhBVkUgQU5ZIExJQUJJTElUWSBGT1IKK0FOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworKElOQ0xVRElORyBXSVRIT1VUIExJTUlUQVRJT04gTE9TVCBQUk9GSVRTKSwgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKK09GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HCitORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9SIERJU1RSSUJVVElPTiBPRgorVEhFIFBST0dSQU0gT1IgVEhFIEVYRVJDSVNFIE9GIEFOWSBSSUdIVFMgR1JBTlRFRCBIRVJFVU5ERVIsIEVWRU4gSUYgQURWSVNFRCBPRgorVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFUy48L3NwYW4+IDwvcD4KKworPHA+PGI+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPjcuIEdFTkVSQUw8L3NwYW4+PC9iPiA8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5JZiBhbnkgcHJvdmlzaW9uIG9mIHRoaXMgQWdyZWVtZW50IGlzIGludmFsaWQKK29yIHVuZW5mb3JjZWFibGUgdW5kZXIgYXBwbGljYWJsZSBsYXcsIGl0IHNoYWxsIG5vdCBhZmZlY3QgdGhlIHZhbGlkaXR5IG9yCitlbmZvcmNlYWJpbGl0eSBvZiB0aGUgcmVtYWluZGVyIG9mIHRoZSB0ZXJtcyBvZiB0aGlzIEFncmVlbWVudCwgYW5kIHdpdGhvdXQKK2Z1cnRoZXIgYWN0aW9uIGJ5IHRoZSBwYXJ0aWVzIGhlcmV0bywgc3VjaCBwcm92aXNpb24gc2hhbGwgYmUgcmVmb3JtZWQgdG8gdGhlCittaW5pbXVtIGV4dGVudCBuZWNlc3NhcnkgdG8gbWFrZSBzdWNoIHByb3Zpc2lvbiB2YWxpZCBhbmQgZW5mb3JjZWFibGUuPC9zcGFuPiA8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5JZiBSZWNpcGllbnQgaW5zdGl0dXRlcyBwYXRlbnQgbGl0aWdhdGlvbgorYWdhaW5zdCBhbnkgZW50aXR5IChpbmNsdWRpbmcgYSBjcm9zcy1jbGFpbSBvciBjb3VudGVyY2xhaW0gaW4gYSBsYXdzdWl0KQorYWxsZWdpbmcgdGhhdCB0aGUgUHJvZ3JhbSBpdHNlbGYgKGV4Y2x1ZGluZyBjb21iaW5hdGlvbnMgb2YgdGhlIFByb2dyYW0gd2l0aAorb3RoZXIgc29mdHdhcmUgb3IgaGFyZHdhcmUpIGluZnJpbmdlcyBzdWNoIFJlY2lwaWVudCdzIHBhdGVudChzKSwgdGhlbiBzdWNoCitSZWNpcGllbnQncyByaWdodHMgZ3JhbnRlZCB1bmRlciBTZWN0aW9uIDIoYikgc2hhbGwgdGVybWluYXRlIGFzIG9mIHRoZSBkYXRlCitzdWNoIGxpdGlnYXRpb24gaXMgZmlsZWQuIDwvc3Bhbj48L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5BbGwgUmVjaXBpZW50J3MgcmlnaHRzIHVuZGVyIHRoaXMgQWdyZWVtZW50CitzaGFsbCB0ZXJtaW5hdGUgaWYgaXQgZmFpbHMgdG8gY29tcGx5IHdpdGggYW55IG9mIHRoZSBtYXRlcmlhbCB0ZXJtcyBvcgorY29uZGl0aW9ucyBvZiB0aGlzIEFncmVlbWVudCBhbmQgZG9lcyBub3QgY3VyZSBzdWNoIGZhaWx1cmUgaW4gYSByZWFzb25hYmxlCitwZXJpb2Qgb2YgdGltZSBhZnRlciBiZWNvbWluZyBhd2FyZSBvZiBzdWNoIG5vbmNvbXBsaWFuY2UuIElmIGFsbCBSZWNpcGllbnQncworcmlnaHRzIHVuZGVyIHRoaXMgQWdyZWVtZW50IHRlcm1pbmF0ZSwgUmVjaXBpZW50IGFncmVlcyB0byBjZWFzZSB1c2UgYW5kCitkaXN0cmlidXRpb24gb2YgdGhlIFByb2dyYW0gYXMgc29vbiBhcyByZWFzb25hYmx5IHByYWN0aWNhYmxlLiBIb3dldmVyLAorUmVjaXBpZW50J3Mgb2JsaWdhdGlvbnMgdW5kZXIgdGhpcyBBZ3JlZW1lbnQgYW5kIGFueSBsaWNlbnNlcyBncmFudGVkIGJ5CitSZWNpcGllbnQgcmVsYXRpbmcgdG8gdGhlIFByb2dyYW0gc2hhbGwgY29udGludWUgYW5kIHN1cnZpdmUuIDwvc3Bhbj48L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5FdmVyeW9uZSBpcyBwZXJtaXR0ZWQgdG8gY29weSBhbmQgZGlzdHJpYnV0ZQorY29waWVzIG9mIHRoaXMgQWdyZWVtZW50LCBidXQgaW4gb3JkZXIgdG8gYXZvaWQgaW5jb25zaXN0ZW5jeSB0aGUgQWdyZWVtZW50IGlzCitjb3B5cmlnaHRlZCBhbmQgbWF5IG9ubHkgYmUgbW9kaWZpZWQgaW4gdGhlIGZvbGxvd2luZyBtYW5uZXIuIFRoZSBBZ3JlZW1lbnQKK1N0ZXdhcmQgcmVzZXJ2ZXMgdGhlIHJpZ2h0IHRvIHB1Ymxpc2ggbmV3IHZlcnNpb25zIChpbmNsdWRpbmcgcmV2aXNpb25zKSBvZgordGhpcyBBZ3JlZW1lbnQgZnJvbSB0aW1lIHRvIHRpbWUuIE5vIG9uZSBvdGhlciB0aGFuIHRoZSBBZ3JlZW1lbnQgU3Rld2FyZCBoYXMKK3RoZSByaWdodCB0byBtb2RpZnkgdGhpcyBBZ3JlZW1lbnQuIFRoZSBFY2xpcHNlIEZvdW5kYXRpb24gaXMgdGhlIGluaXRpYWwKK0FncmVlbWVudCBTdGV3YXJkLiBUaGUgRWNsaXBzZSBGb3VuZGF0aW9uIG1heSBhc3NpZ24gdGhlIHJlc3BvbnNpYmlsaXR5IHRvCitzZXJ2ZSBhcyB0aGUgQWdyZWVtZW50IFN0ZXdhcmQgdG8gYSBzdWl0YWJsZSBzZXBhcmF0ZSBlbnRpdHkuIEVhY2ggbmV3IHZlcnNpb24KK29mIHRoZSBBZ3JlZW1lbnQgd2lsbCBiZSBnaXZlbiBhIGRpc3Rpbmd1aXNoaW5nIHZlcnNpb24gbnVtYmVyLiBUaGUgUHJvZ3JhbQorKGluY2x1ZGluZyBDb250cmlidXRpb25zKSBtYXkgYWx3YXlzIGJlIGRpc3RyaWJ1dGVkIHN1YmplY3QgdG8gdGhlIHZlcnNpb24gb2YKK3RoZSBBZ3JlZW1lbnQgdW5kZXIgd2hpY2ggaXQgd2FzIHJlY2VpdmVkLiBJbiBhZGRpdGlvbiwgYWZ0ZXIgYSBuZXcgdmVyc2lvbiBvZgordGhlIEFncmVlbWVudCBpcyBwdWJsaXNoZWQsIENvbnRyaWJ1dG9yIG1heSBlbGVjdCB0byBkaXN0cmlidXRlIHRoZSBQcm9ncmFtCisoaW5jbHVkaW5nIGl0cyBDb250cmlidXRpb25zKSB1bmRlciB0aGUgbmV3IHZlcnNpb24uIEV4Y2VwdCBhcyBleHByZXNzbHkgc3RhdGVkCitpbiBTZWN0aW9ucyAyKGEpIGFuZCAyKGIpIGFib3ZlLCBSZWNpcGllbnQgcmVjZWl2ZXMgbm8gcmlnaHRzIG9yIGxpY2Vuc2VzIHRvCit0aGUgaW50ZWxsZWN0dWFsIHByb3BlcnR5IG9mIGFueSBDb250cmlidXRvciB1bmRlciB0aGlzIEFncmVlbWVudCwgd2hldGhlcgorZXhwcmVzc2x5LCBieSBpbXBsaWNhdGlvbiwgZXN0b3BwZWwgb3Igb3RoZXJ3aXNlLiBBbGwgcmlnaHRzIGluIHRoZSBQcm9ncmFtIG5vdAorZXhwcmVzc2x5IGdyYW50ZWQgdW5kZXIgdGhpcyBBZ3JlZW1lbnQgYXJlIHJlc2VydmVkLjwvc3Bhbj4gPC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+VGhpcyBBZ3JlZW1lbnQgaXMgZ292ZXJuZWQgYnkgdGhlIGxhd3Mgb2YgdGhlCitTdGF0ZSBvZiBOZXcgWW9yayBhbmQgdGhlIGludGVsbGVjdHVhbCBwcm9wZXJ0eSBsYXdzIG9mIHRoZSBVbml0ZWQgU3RhdGVzIG9mCitBbWVyaWNhLiBObyBwYXJ0eSB0byB0aGlzIEFncmVlbWVudCB3aWxsIGJyaW5nIGEgbGVnYWwgYWN0aW9uIHVuZGVyIHRoaXMKK0FncmVlbWVudCBtb3JlIHRoYW4gb25lIHllYXIgYWZ0ZXIgdGhlIGNhdXNlIG9mIGFjdGlvbiBhcm9zZS4gRWFjaCBwYXJ0eSB3YWl2ZXMKK2l0cyByaWdodHMgdG8gYSBqdXJ5IHRyaWFsIGluIGFueSByZXN1bHRpbmcgbGl0aWdhdGlvbi48L3NwYW4+IDwvcD4KKworPHAgY2xhc3M9TXNvTm9ybWFsPjwhW2lmICFzdXBwb3J0RW1wdHlQYXJhc10+Jm5ic3A7PCFbZW5kaWZdPjxvOnA+PC9vOnA+PC9wPgorCis8L2Rpdj4KKworPC9ib2R5PgorCis8L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy50cmFuc3BvcnQvbm90aWNlLmh0bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnRyYW5zcG9ydC9ub3RpY2UuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNmFmOTY2Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy50cmFuc3BvcnQvbm90aWNlLmh0bWwKQEAgLTAsMCArMSw3OSBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMC8vRU4iPgorPGh0bWw+Cis8aGVhZD4KKzxtZXRhIGh0dHAtZXF1aXY9Q29udGVudC1UeXBlIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1pc28tODg1OS0xIj4KKzx0aXRsZT5FY2xpcHNlLm9yZyBTb2Z0d2FyZSBVc2VyIEFncmVlbWVudDwvdGl0bGU+Cis8L2hlYWQ+CisKKzxib2R5IGxhbmc9IkVOLVVTIiBsaW5rPWJsdWUgdmxpbms9cHVycGxlPgorPGgyPkVjbGlwc2UgRm91bmRhdGlvbiBTb2Z0d2FyZSBVc2VyIEFncmVlbWVudDwvaDI+Cis8cD5NYXJjaCAxNywgMjAwNTwvcD4KKworPGgzPlVzYWdlIE9mIENvbnRlbnQ8L2gzPgorCis8cD5USEUgRUNMSVBTRSBGT1VOREFUSU9OIE1BS0VTIEFWQUlMQUJMRSBTT0ZUV0FSRSwgRE9DVU1FTlRBVElPTiwgSU5GT1JNQVRJT04gQU5EL09SIE9USEVSIE1BVEVSSUFMUyBGT1IgT1BFTiBTT1VSQ0UgUFJPSkVDVFMKKyAgIChDT0xMRUNUSVZFTFkgJnF1b3Q7Q09OVEVOVCZxdW90OykuICBVU0UgT0YgVEhFIENPTlRFTlQgSVMgR09WRVJORUQgQlkgVEhFIFRFUk1TIEFORCBDT05ESVRJT05TIE9GIFRISVMgQUdSRUVNRU5UIEFORC9PUiBUSEUgVEVSTVMgQU5ECisgICBDT05ESVRJT05TIE9GIExJQ0VOU0UgQUdSRUVNRU5UUyBPUiBOT1RJQ0VTIElORElDQVRFRCBPUiBSRUZFUkVOQ0VEIEJFTE9XLiAgQlkgVVNJTkcgVEhFIENPTlRFTlQsIFlPVSBBR1JFRSBUSEFUIFlPVVIgVVNFCisgICBPRiBUSEUgQ09OVEVOVCBJUyBHT1ZFUk5FRCBCWSBUSElTIEFHUkVFTUVOVCBBTkQvT1IgVEhFIFRFUk1TIEFORCBDT05ESVRJT05TIE9GIEFOWSBBUFBMSUNBQkxFIExJQ0VOU0UgQUdSRUVNRU5UUyBPUgorICAgTk9USUNFUyBJTkRJQ0FURUQgT1IgUkVGRVJFTkNFRCBCRUxPVy4gIElGIFlPVSBETyBOT1QgQUdSRUUgVE8gVEhFIFRFUk1TIEFORCBDT05ESVRJT05TIE9GIFRISVMgQUdSRUVNRU5UIEFORCBUSEUgVEVSTVMgQU5ECisgICBDT05ESVRJT05TIE9GIEFOWSBBUFBMSUNBQkxFIExJQ0VOU0UgQUdSRUVNRU5UUyBPUiBOT1RJQ0VTIElORElDQVRFRCBPUiBSRUZFUkVOQ0VEIEJFTE9XLCBUSEVOIFlPVSBNQVkgTk9UIFVTRSBUSEUgQ09OVEVOVC48L3A+CisgICAKKzxoMz5BcHBsaWNhYmxlIExpY2Vuc2VzPC9oMz4gICAKKyAgIAorPHA+VW5sZXNzIG90aGVyd2lzZSBpbmRpY2F0ZWQsIGFsbCBDb250ZW50IG1hZGUgYXZhaWxhYmxlIGJ5IHRoZSBFY2xpcHNlIEZvdW5kYXRpb24gaXMgcHJvdmlkZWQgdG8geW91IHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMAorICAgKCZxdW90O0VQTCZxdW90OykuICBBIGNvcHkgb2YgdGhlIEVQTCBpcyBwcm92aWRlZCB3aXRoIHRoaXMgQ29udGVudCBhbmQgaXMgYWxzbyBhdmFpbGFibGUgYXQgPGEgaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwiPmh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sPC9hPi4KKyAgIEZvciBwdXJwb3NlcyBvZiB0aGUgRVBMLCAmcXVvdDtQcm9ncmFtJnF1b3Q7IHdpbGwgbWVhbiB0aGUgQ29udGVudC48L3A+CisKKzxwPkNvbnRlbnQgaW5jbHVkZXMsIGJ1dCBpcyBub3QgbGltaXRlZCB0bywgc291cmNlIGNvZGUsIG9iamVjdCBjb2RlLCBkb2N1bWVudGF0aW9uIGFuZCBvdGhlciBmaWxlcyBtYWludGFpbmVkIGluIHRoZSBFY2xpcHNlLm9yZyBDVlMgcmVwb3NpdG9yeSAoJnF1b3Q7UmVwb3NpdG9yeSZxdW90OykgaW4gQ1ZTCisgICBtb2R1bGVzICgmcXVvdDtNb2R1bGVzJnF1b3Q7KSBhbmQgbWFkZSBhdmFpbGFibGUgYXMgZG93bmxvYWRhYmxlIGFyY2hpdmVzICgmcXVvdDtEb3dubG9hZHMmcXVvdDspLjwvcD4KKyAgIAorPHVsPgorCTxsaT5Db250ZW50IG1heSBiZSBzdHJ1Y3R1cmVkIGFuZCBwYWNrYWdlZCBpbnRvIG1vZHVsZXMgdG8gZmFjaWxpdGF0ZSBkZWxpdmVyaW5nLCBleHRlbmRpbmcsIGFuZCB1cGdyYWRpbmcgdGhlIENvbnRlbnQuICBUeXBpY2FsIG1vZHVsZXMgbWF5IGluY2x1ZGUgcGx1Zy1pbnMgKCZxdW90O1BsdWctaW5zJnF1b3Q7KSwgcGx1Zy1pbiBmcmFnbWVudHMgKCZxdW90O0ZyYWdtZW50cyZxdW90OyksIGFuZCBmZWF0dXJlcyAoJnF1b3Q7RmVhdHVyZXMmcXVvdDspLjwvbGk+CisJPGxpPkVhY2ggUGx1Zy1pbiBvciBGcmFnbWVudCBtYXkgYmUgcGFja2FnZWQgYXMgYSBzdWItZGlyZWN0b3J5IG9yIEpBUiAoSmF2YSZ0cmFkZTsgQVJjaGl2ZSkgaW4gYSBkaXJlY3RvcnkgbmFtZWQgJnF1b3Q7cGx1Z2lucyZxdW90Oy48L2xpPgorCTxsaT5BIEZlYXR1cmUgaXMgYSBidW5kbGUgb2Ygb25lIG9yIG1vcmUgUGx1Zy1pbnMgYW5kL29yIEZyYWdtZW50cyBhbmQgYXNzb2NpYXRlZCBtYXRlcmlhbC4gIEVhY2ggRmVhdHVyZSBtYXkgYmUgcGFja2FnZWQgYXMgYSBzdWItZGlyZWN0b3J5IGluIGEgZGlyZWN0b3J5IG5hbWVkICZxdW90O2ZlYXR1cmVzJnF1b3Q7LiAgV2l0aGluIGEgRmVhdHVyZSwgZmlsZXMgbmFtZWQgJnF1b3Q7ZmVhdHVyZS54bWwmcXVvdDsgbWF5IGNvbnRhaW4gYSBsaXN0IG9mIHRoZSBuYW1lcyBhbmQgdmVyc2lvbiBudW1iZXJzIG9mIHRoZSBQbHVnLWlucworICAgICAgYW5kL29yIEZyYWdtZW50cyBhc3NvY2lhdGVkIHdpdGggdGhhdCBGZWF0dXJlLjwvbGk+CisJPGxpPkZlYXR1cmVzIG1heSBhbHNvIGluY2x1ZGUgb3RoZXIgRmVhdHVyZXMgKCZxdW90O0luY2x1ZGVkIEZlYXR1cmVzJnF1b3Q7KS4gV2l0aGluIGEgRmVhdHVyZSwgZmlsZXMgbmFtZWQgJnF1b3Q7ZmVhdHVyZS54bWwmcXVvdDsgbWF5IGNvbnRhaW4gYSBsaXN0IG9mIHRoZSBuYW1lcyBhbmQgdmVyc2lvbiBudW1iZXJzIG9mIEluY2x1ZGVkIEZlYXR1cmVzLjwvbGk+Cis8L3VsPiAgIAorIAorPHA+VGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIGdvdmVybmluZyBQbHVnLWlucyBhbmQgRnJhZ21lbnRzIHNob3VsZCBiZSBjb250YWluZWQgaW4gZmlsZXMgbmFtZWQgJnF1b3Q7YWJvdXQuaHRtbCZxdW90OyAoJnF1b3Q7QWJvdXRzJnF1b3Q7KS4gVGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIGdvdmVybmluZyBGZWF0dXJlcyBhbmQKK0luY2x1ZGVkIEZlYXR1cmVzIHNob3VsZCBiZSBjb250YWluZWQgaW4gZmlsZXMgbmFtZWQgJnF1b3Q7bGljZW5zZS5odG1sJnF1b3Q7ICgmcXVvdDtGZWF0dXJlIExpY2Vuc2VzJnF1b3Q7KS4gIEFib3V0cyBhbmQgRmVhdHVyZSBMaWNlbnNlcyBtYXkgYmUgbG9jYXRlZCBpbiBhbnkgZGlyZWN0b3J5IG9mIGEgRG93bmxvYWQgb3IgTW9kdWxlCitpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0byB0aGUgZm9sbG93aW5nIGxvY2F0aW9uczo8L3A+CisKKzx1bD4KKwk8bGk+VGhlIHRvcC1sZXZlbCAocm9vdCkgZGlyZWN0b3J5PC9saT4KKwk8bGk+UGx1Zy1pbiBhbmQgRnJhZ21lbnQgZGlyZWN0b3JpZXM8L2xpPgorCTxsaT5JbnNpZGUgUGx1Zy1pbnMgYW5kIEZyYWdtZW50cyBwYWNrYWdlZCBhcyBKQVJzPC9saT4KKwk8bGk+U3ViLWRpcmVjdG9yaWVzIG9mIHRoZSBkaXJlY3RvcnkgbmFtZWQgJnF1b3Q7c3JjJnF1b3Q7IG9mIGNlcnRhaW4gUGx1Zy1pbnM8L2xpPgorCTxsaT5GZWF0dXJlIGRpcmVjdG9yaWVzPC9saT4KKzwvdWw+CisJCQorPHA+Tm90ZTogaWYgYSBGZWF0dXJlIG1hZGUgYXZhaWxhYmxlIGJ5IHRoZSBFY2xpcHNlIEZvdW5kYXRpb24gaXMgaW5zdGFsbGVkIHVzaW5nIHRoZSBFY2xpcHNlIFVwZGF0ZSBNYW5hZ2VyLCB5b3UgbXVzdCBhZ3JlZSB0byBhIGxpY2Vuc2UgKCZxdW90O0ZlYXR1cmUgVXBkYXRlIExpY2Vuc2UmcXVvdDspIGR1cmluZyB0aGUKK2luc3RhbGxhdGlvbiBwcm9jZXNzLiAgSWYgdGhlIEZlYXR1cmUgY29udGFpbnMgSW5jbHVkZWQgRmVhdHVyZXMsIHRoZSBGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlIHNob3VsZCBlaXRoZXIgcHJvdmlkZSB5b3Ugd2l0aCB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgZ292ZXJuaW5nIHRoZSBJbmNsdWRlZCBGZWF0dXJlcyBvcgoraW5mb3JtIHlvdSB3aGVyZSB5b3UgY2FuIGxvY2F0ZSB0aGVtLiAgRmVhdHVyZSBVcGRhdGUgTGljZW5zZXMgbWF5IGJlIGZvdW5kIGluIHRoZSAmcXVvdDtsaWNlbnNlJnF1b3Q7IHByb3BlcnR5IG9mIGZpbGVzIG5hbWVkICZxdW90O2ZlYXR1cmUucHJvcGVydGllcyZxdW90OyBmb3VuZCB3aXRoaW4gYSBGZWF0dXJlLgorU3VjaCBBYm91dHMsIEZlYXR1cmUgTGljZW5zZXMsIGFuZCBGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlcyBjb250YWluIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyAob3IgcmVmZXJlbmNlcyB0byBzdWNoIHRlcm1zIGFuZCBjb25kaXRpb25zKSB0aGF0IGdvdmVybiB5b3VyIHVzZSBvZiB0aGUgYXNzb2NpYXRlZCBDb250ZW50IGluCit0aGF0IGRpcmVjdG9yeS48L3A+CisKKzxwPlRIRSBBQk9VVFMsIEZFQVRVUkUgTElDRU5TRVMsIEFORCBGRUFUVVJFIFVQREFURSBMSUNFTlNFUyBNQVkgUkVGRVIgVE8gVEhFIEVQTCBPUiBPVEhFUiBMSUNFTlNFIEFHUkVFTUVOVFMsIE5PVElDRVMgT1IgVEVSTVMgQU5EIENPTkRJVElPTlMuICBTT01FIE9GIFRIRVNFCitPVEhFUiBMSUNFTlNFIEFHUkVFTUVOVFMgTUFZIElOQ0xVREUgKEJVVCBBUkUgTk9UIExJTUlURUQgVE8pOjwvcD4KKworPHVsPgorCTxsaT5Db21tb24gUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjAgKGF2YWlsYWJsZSBhdCA8YSBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2NwbC12MTAuaHRtbCI+aHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9jcGwtdjEwLmh0bWw8L2E+KTwvbGk+CisJPGxpPkFwYWNoZSBTb2Z0d2FyZSBMaWNlbnNlIDEuMSAoYXZhaWxhYmxlIGF0IDxhIGhyZWY9Imh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFIj5odHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRTwvYT4pPC9saT4KKwk8bGk+QXBhY2hlIFNvZnR3YXJlIExpY2Vuc2UgMi4wIChhdmFpbGFibGUgYXQgPGEgaHJlZj0iaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wIj5odHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjA8L2E+KTwvbGk+CisJPGxpPklCTSBQdWJsaWMgTGljZW5zZSAxLjAgKGF2YWlsYWJsZSBhdCA8YSBocmVmPSJodHRwOi8vb3NzLnNvZnR3YXJlLmlibS5jb20vZGV2ZWxvcGVyd29ya3Mvb3BlbnNvdXJjZS9saWNlbnNlMTAuaHRtbCI+aHR0cDovL29zcy5zb2Z0d2FyZS5pYm0uY29tL2RldmVsb3BlcndvcmtzL29wZW5zb3VyY2UvbGljZW5zZTEwLmh0bWw8L2E+KTwvbGk+CQorCTxsaT5NZXRybyBMaW5rIFB1YmxpYyBMaWNlbnNlIDEuMDAgKGF2YWlsYWJsZSBhdCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW5ncm91cC5vcmcvb3Blbm1vdGlmL3N1cHBvcnRlcnMvbWV0cm9saW5rL2xpY2Vuc2UuaHRtbCI+aHR0cDovL3d3dy5vcGVuZ3JvdXAub3JnL29wZW5tb3RpZi9zdXBwb3J0ZXJzL21ldHJvbGluay9saWNlbnNlLmh0bWw8L2E+KTwvbGk+CisJPGxpPk1vemlsbGEgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjEgKGF2YWlsYWJsZSBhdCA8YSBocmVmPSJodHRwOi8vd3d3Lm1vemlsbGEub3JnL01QTC9NUEwtMS4xLmh0bWwiPmh0dHA6Ly93d3cubW96aWxsYS5vcmcvTVBML01QTC0xLjEuaHRtbDwvYT4pPC9saT4KKzwvdWw+CisKKzxwPklUIElTIFlPVVIgT0JMSUdBVElPTiBUTyBSRUFEIEFORCBBQ0NFUFQgQUxMIFNVQ0ggVEVSTVMgQU5EIENPTkRJVElPTlMgUFJJT1IgVE8gVVNFIE9GIFRIRSBDT05URU5ULiAgSWYgbm8gQWJvdXQsIEZlYXR1cmUgTGljZW5zZSwgb3IgRmVhdHVyZSBVcGRhdGUgTGljZW5zZSBpcyBwcm92aWRlZCwgcGxlYXNlCitjb250YWN0IHRoZSBFY2xpcHNlIEZvdW5kYXRpb24gdG8gZGV0ZXJtaW5lIHdoYXQgdGVybXMgYW5kIGNvbmRpdGlvbnMgZ292ZXJuIHRoYXQgcGFydGljdWxhciBDb250ZW50LjwvcD4KKworPGgzPkNyeXB0b2dyYXBoeTwvaDM+CisKKzxwPkNvbnRlbnQgbWF5IGNvbnRhaW4gZW5jcnlwdGlvbiBzb2Z0d2FyZS4gVGhlIGNvdW50cnkgaW4gd2hpY2ggeW91IGFyZSBjdXJyZW50bHkgbWF5IGhhdmUgcmVzdHJpY3Rpb25zIG9uIHRoZSBpbXBvcnQsIHBvc3Nlc3Npb24sIGFuZCB1c2UsIGFuZC9vciByZS1leHBvcnQgdG8KKyAgIGFub3RoZXIgY291bnRyeSwgb2YgZW5jcnlwdGlvbiBzb2Z0d2FyZS4gQkVGT1JFIHVzaW5nIGFueSBlbmNyeXB0aW9uIHNvZnR3YXJlLCBwbGVhc2UgY2hlY2sgdGhlIGNvdW50cnkncyBsYXdzLCByZWd1bGF0aW9ucyBhbmQgcG9saWNpZXMgY29uY2VybmluZyB0aGUgaW1wb3J0LAorICAgcG9zc2Vzc2lvbiwgb3IgdXNlLCBhbmQgcmUtZXhwb3J0IG9mIGVuY3J5cHRpb24gc29mdHdhcmUsIHRvIHNlZSBpZiB0aGlzIGlzIHBlcm1pdHRlZC48L3A+CisgICAKKzxzbWFsbD5KYXZhIGFuZCBhbGwgSmF2YS1iYXNlZCB0cmFkZW1hcmtzIGFyZSB0cmFkZW1hcmtzIG9mIFN1biBNaWNyb3N5c3RlbXMsIEluYy4gaW4gdGhlIFVuaXRlZCBTdGF0ZXMsIG90aGVyIGNvdW50cmllcywgb3IgYm90aC48L3NtYWxsPiAgIAorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy50cmFuc3BvcnQvcGx1Z2luLnByb3BlcnRpZXMgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnRyYW5zcG9ydC9wbHVnaW4ucHJvcGVydGllcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNDk4NDg5Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy50cmFuc3BvcnQvcGx1Z2luLnByb3BlcnRpZXMKQEAgLTAsMCArMSwyNSBAQAorIy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjICogQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorIyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyMgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyMgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorIyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisjICoKKyMgKiBDb250cmlidXRvcnM6CisjICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorIyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisjIFRvIGNvZGUgZGV2ZWxvcGVyOgorIyAgIERvIE5PVCBjaGFuZ2UgdGhlIHByb3BlcnRpZXMgYmV0d2VlbiB0aGlzIGxpbmUgYW5kIHRoZQorIyAgICIlJSUgRU5EIE9GIFRSQU5TTEFURUQgUFJPUEVSVElFUyAlJSUiIGxpbmUuCisjICAgTWFrZSBhIG5ldyBwcm9wZXJ0eSBuYW1lLCBhcHBlbmQgdG8gdGhlIGVuZCBvZiB0aGUgZmlsZSBhbmQgY2hhbmdlCisjICAgdGhlIGNvZGUgdG8gdXNlIHRoZSBuZXcgcHJvcGVydHkuCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyMgJSUlIEVORCBPRiBUUkFOU0xBVEVEIFBST1BFUlRJRVMgJSUlCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK3BsdWdpbk5hbWUgPSBTVEVNIFRyYW5zcG9ydCBUZXN0cworcHJvdmlkZXJOYW1lID0gRWNsaXBzZS5vcmcKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMudHJhbnNwb3J0L3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL3RyYW5zcG9ydC90ZXN0cy9QaXBlU3R5bGVUcmFuc3BvcnRTeXN0ZW1UZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnRyYW5zcG9ydC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy90cmFuc3BvcnQvdGVzdHMvUGlwZVN0eWxlVHJhbnNwb3J0U3lzdGVtVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIxMTBkNjIKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnRyYW5zcG9ydC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy90cmFuc3BvcnQvdGVzdHMvUGlwZVN0eWxlVHJhbnNwb3J0U3lzdGVtVGVzdC5qYXZhCkBAIC0wLDAgKzEsOTUgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy50cmFuc3BvcnQudGVzdHM7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDcsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQganVuaXQudGV4dHVpLlRlc3RSdW5uZXI7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuVVJJOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5TVEVNVVJJOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLkxhYmVsc0ZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy50cmFuc3BvcnQuUGlwZVN0eWxlVHJhbnNwb3J0U3lzdGVtOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMudHJhbnNwb3J0LlRyYW5zcG9ydEZhY3Rvcnk7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIEEgdGVzdCBjYXNlIGZvciB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+UGlwZSBTdHlsZSBUcmFuc3BvcnQgU3lzdGVtPC9iPjwvZW0+Jy4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgUGlwZVN0eWxlVHJhbnNwb3J0U3lzdGVtVGVzdCBleHRlbmRzIFRyYW5zcG9ydFN5c3RlbVRlc3QgeworCisJcHVibGljIHN0YXRpYyBmaW5hbCBVUkkgVFJBTlNQT1JUX1NZU1RFTV9VUkkgPSBTVEVNVVJJLmNyZWF0ZVVSSSgiUGlwZVN0eWxlVHJhbnNwb3J0U3lzdGVtIik7CisJCisJCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgeworCQlUZXN0UnVubmVyLnJ1bihQaXBlU3R5bGVUcmFuc3BvcnRTeXN0ZW1UZXN0LmNsYXNzKTsKKwl9CisKKwkvKioKKwkgKiBDb25zdHJ1Y3RzIGEgbmV3IFBpcGUgU3R5bGUgVHJhbnNwb3J0IFN5c3RlbSB0ZXN0IGNhc2Ugd2l0aCB0aGUgZ2l2ZW4gbmFtZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgUGlwZVN0eWxlVHJhbnNwb3J0U3lzdGVtVGVzdChTdHJpbmcgbmFtZSkgeworCQlzdXBlcihuYW1lKTsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBmaXh0dXJlIGZvciB0aGlzIFBpcGUgU3R5bGUgVHJhbnNwb3J0IFN5c3RlbSB0ZXN0IGNhc2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIFBpcGVTdHlsZVRyYW5zcG9ydFN5c3RlbSBnZXRGaXh0dXJlKCkgeworCQlyZXR1cm4gKFBpcGVTdHlsZVRyYW5zcG9ydFN5c3RlbSlmaXh0dXJlOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2Ujc2V0VXAoKQorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgc2V0VXAoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJc2V0Rml4dHVyZShjcmVhdGVGaXh0dXJlKCkpOworCX0KKwkKKwkvKipjcmVhdGUgdGhlIGZpeHR1cmUqLworCXByaXZhdGUgc3RhdGljIFBpcGVTdHlsZVRyYW5zcG9ydFN5c3RlbSBjcmVhdGVGaXh0dXJlKCkgeworCQlQaXBlU3R5bGVUcmFuc3BvcnRTeXN0ZW0gcmMgPSBUcmFuc3BvcnRGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVQaXBlU3R5bGVUcmFuc3BvcnRTeXN0ZW0oKTsKKwkJcmMuc2V0VVJJKFRSQU5TUE9SVF9TWVNURU1fVVJJKTsKKwkJcmMuZ2V0TGFiZWxzKCkuYWRkKExhYmVsc0ZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZVBvcHVsYXRpb25MYWJlbCgpKTsKKwkJcmV0dXJuIHJjOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2UjdGVhckRvd24oKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgdm9pZCB0ZWFyRG93bigpIHRocm93cyBFeGNlcHRpb24geworCQlzZXRGaXh0dXJlKG51bGwpOworCX0KKwkKKwkKKworfSAvL1BpcGVTdHlsZVRyYW5zcG9ydFN5c3RlbVRlc3QKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMudHJhbnNwb3J0L3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL3RyYW5zcG9ydC90ZXN0cy9QaXBlVHJhbnNwb3J0RWRnZUxhYmVsVGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy50cmFuc3BvcnQvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvdHJhbnNwb3J0L3Rlc3RzL1BpcGVUcmFuc3BvcnRFZGdlTGFiZWxUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWMxZTE3OQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMudHJhbnNwb3J0L3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL3RyYW5zcG9ydC90ZXN0cy9QaXBlVHJhbnNwb3J0RWRnZUxhYmVsVGVzdC5qYXZhCkBAIC0wLDAgKzEsMTE0IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMudHJhbnNwb3J0LnRlc3RzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAKKyAqIENvcHlyaWdodCAoYykgMjAxMSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4gCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIAorICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wIAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQgCisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbCAKKyAqIAorICogQ29udHJpYnV0b3JzOiAKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKK2ltcG9ydCBqdW5pdC50ZXh0dWkuVGVzdFJ1bm5lcjsKKworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMudHJhbnNwb3J0LlBpcGVUcmFuc3BvcnRFZGdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMudHJhbnNwb3J0LlBpcGVUcmFuc3BvcnRFZGdlTGFiZWw7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIEEgdGVzdCBjYXNlIGZvciB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+UGlwZSBUcmFuc3BvcnQgRWRnZSBMYWJlbDwvYj48L2VtPicuCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIFBpcGVUcmFuc3BvcnRFZGdlTGFiZWxUZXN0IGV4dGVuZHMgVGVzdENhc2UgeworCisJLyoqCisJICogVGhlIGZpeHR1cmUgZm9yIHRoaXMgUGlwZSBUcmFuc3BvcnQgRWRnZSBMYWJlbCB0ZXN0IGNhc2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIFBpcGVUcmFuc3BvcnRFZGdlTGFiZWwgZml4dHVyZSA9IG51bGw7CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CisJCVRlc3RSdW5uZXIucnVuKFBpcGVUcmFuc3BvcnRFZGdlTGFiZWxUZXN0LmNsYXNzKTsKKwl9CisKKwkvKioKKwkgKiBDb25zdHJ1Y3RzIGEgbmV3IFBpcGUgVHJhbnNwb3J0IEVkZ2UgTGFiZWwgdGVzdCBjYXNlIHdpdGggdGhlIGdpdmVuIG5hbWUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFBpcGVUcmFuc3BvcnRFZGdlTGFiZWxUZXN0KFN0cmluZyBuYW1lKSB7CisJCXN1cGVyKG5hbWUpOworCX0KKworCS8qKgorCSAqIFNldHMgdGhlIGZpeHR1cmUgZm9yIHRoaXMgUGlwZSBUcmFuc3BvcnQgRWRnZSBMYWJlbCB0ZXN0IGNhc2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgc2V0Rml4dHVyZShQaXBlVHJhbnNwb3J0RWRnZUxhYmVsIGZpeHR1cmUpIHsKKwkJdGhpcy5maXh0dXJlID0gZml4dHVyZTsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBmaXh0dXJlIGZvciB0aGlzIFBpcGUgVHJhbnNwb3J0IEVkZ2UgTGFiZWwgdGVzdCBjYXNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBQaXBlVHJhbnNwb3J0RWRnZUxhYmVsIGdldEZpeHR1cmUoKSB7CisJCXJldHVybiBmaXh0dXJlOworCX0KKworCisJLyoqCisJICogY3JlYXRlIHRoZSBmaXh0dXJlCisJICoqLworCXByaXZhdGUgc3RhdGljIFBpcGVUcmFuc3BvcnRFZGdlTGFiZWwgY3JlYXRlRml4dHVyZSgpIHsKKwkJUGlwZVRyYW5zcG9ydEVkZ2UgZWRnZSA9IFBpcGVUcmFuc3BvcnRFZGdlVGVzdC5jcmVhdGVGaXh0dXJlKCk7CisJCVBpcGVUcmFuc3BvcnRFZGdlTGFiZWwgIGVkZ2VMYWJlbCA9IChQaXBlVHJhbnNwb3J0RWRnZUxhYmVsKWVkZ2UuZ2V0TGFiZWwoKTsKKwkJCQkJCisJCXJldHVybiBlZGdlTGFiZWw7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZSNzZXRVcCgpCisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgdm9pZCBzZXRVcCgpIHRocm93cyBFeGNlcHRpb24geworCQlzZXRGaXh0dXJlKGNyZWF0ZUZpeHR1cmUoKSk7CisJfQorCQorCS8qKgorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJcHVibGljIHZvaWQgdGVzdFBpcGVUcmFuc3BvcnRFZGdlTGFiZWwoKSB7CisJCWFzc2VydFRydWUoZ2V0Rml4dHVyZSgpLnNhbmUoKSk7CisJfQorCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2UjdGVhckRvd24oKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgdm9pZCB0ZWFyRG93bigpIHRocm93cyBFeGNlcHRpb24geworCQlzZXRGaXh0dXJlKG51bGwpOworCX0KKworfSAvL1BpcGVUcmFuc3BvcnRFZGdlTGFiZWxUZXN0CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnRyYW5zcG9ydC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy90cmFuc3BvcnQvdGVzdHMvUGlwZVRyYW5zcG9ydEVkZ2VMYWJlbFZhbHVlVGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy50cmFuc3BvcnQvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvdHJhbnNwb3J0L3Rlc3RzL1BpcGVUcmFuc3BvcnRFZGdlTGFiZWxWYWx1ZVRlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMWE3NTg3Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy50cmFuc3BvcnQvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvdHJhbnNwb3J0L3Rlc3RzL1BpcGVUcmFuc3BvcnRFZGdlTGFiZWxWYWx1ZVRlc3QuamF2YQpAQCAtMCwwICsxLDExNSBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLnRyYW5zcG9ydC50ZXN0czsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogCisgKiBDb3B5cmlnaHQgKGMpIDIwMTEgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuIAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyAKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0IAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwgCisgKiAKKyAqIENvbnRyaWJ1dG9yczogCisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7CitpbXBvcnQganVuaXQudGV4dHVpLlRlc3RSdW5uZXI7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLnRyYW5zcG9ydC5QaXBlVHJhbnNwb3J0RWRnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLnRyYW5zcG9ydC5QaXBlVHJhbnNwb3J0RWRnZUxhYmVsVmFsdWU7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIEEgdGVzdCBjYXNlIGZvciB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+UGlwZSBUcmFuc3BvcnQgRWRnZSBMYWJlbCBWYWx1ZTwvYj48L2VtPicuCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIFBpcGVUcmFuc3BvcnRFZGdlTGFiZWxWYWx1ZVRlc3QgZXh0ZW5kcyBUZXN0Q2FzZSB7CisKKwkvKioKKwkgKiBUaGUgZml4dHVyZSBmb3IgdGhpcyBQaXBlIFRyYW5zcG9ydCBFZGdlIExhYmVsIFZhbHVlIHRlc3QgY2FzZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgUGlwZVRyYW5zcG9ydEVkZ2VMYWJlbFZhbHVlIGZpeHR1cmUgPSBudWxsOworCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgeworCQlUZXN0UnVubmVyLnJ1bihQaXBlVHJhbnNwb3J0RWRnZUxhYmVsVmFsdWVUZXN0LmNsYXNzKTsKKwl9CisKKwkvKioKKwkgKiBDb25zdHJ1Y3RzIGEgbmV3IFBpcGUgVHJhbnNwb3J0IEVkZ2UgTGFiZWwgVmFsdWUgdGVzdCBjYXNlIHdpdGggdGhlIGdpdmVuIG5hbWUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFBpcGVUcmFuc3BvcnRFZGdlTGFiZWxWYWx1ZVRlc3QoU3RyaW5nIG5hbWUpIHsKKwkJc3VwZXIobmFtZSk7CisJfQorCisJLyoqCisJICogU2V0cyB0aGUgZml4dHVyZSBmb3IgdGhpcyBQaXBlIFRyYW5zcG9ydCBFZGdlIExhYmVsIFZhbHVlIHRlc3QgY2FzZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBzZXRGaXh0dXJlKFBpcGVUcmFuc3BvcnRFZGdlTGFiZWxWYWx1ZSBmaXh0dXJlKSB7CisJCXRoaXMuZml4dHVyZSA9IGZpeHR1cmU7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgZml4dHVyZSBmb3IgdGhpcyBQaXBlIFRyYW5zcG9ydCBFZGdlIExhYmVsIFZhbHVlIHRlc3QgY2FzZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgUGlwZVRyYW5zcG9ydEVkZ2VMYWJlbFZhbHVlIGdldEZpeHR1cmUoKSB7CisJCXJldHVybiBmaXh0dXJlOworCX0KKworCS8qKgorCSAqIGNyZWF0ZSB0aGUgZml4dHVyZQorCSAqKi8KKwlwcml2YXRlIHN0YXRpYyBQaXBlVHJhbnNwb3J0RWRnZUxhYmVsVmFsdWUgY3JlYXRlRml4dHVyZSgpIHsKKwkJUGlwZVRyYW5zcG9ydEVkZ2UgZWRnZSA9IFBpcGVUcmFuc3BvcnRFZGdlVGVzdC5jcmVhdGVGaXh0dXJlKCk7CisJCVBpcGVUcmFuc3BvcnRFZGdlTGFiZWxWYWx1ZSAgZWRnZUxhYmVsVmFsdWUgPSAoUGlwZVRyYW5zcG9ydEVkZ2VMYWJlbFZhbHVlKWVkZ2UuZ2V0TGFiZWwoKS5nZXRDdXJyZW50VmFsdWUoKTsKKwkJCQkJCisJCXJldHVybiBlZGdlTGFiZWxWYWx1ZTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlI3NldFVwKCkKKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIHNldFVwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCXNldEZpeHR1cmUoY3JlYXRlRml4dHVyZSgpKTsKKwl9CisJCisJLyoqCisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlwdWJsaWMgdm9pZCB0ZXN0UGlwZVRyYW5zcG9ydEVkZ2VMYWJlbFZhbHVlKCkgeworCQlhc3NlcnRUcnVlKGdldEZpeHR1cmUoKS5zYW5lKCkpOworCX0KKwkKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2UjdGVhckRvd24oKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgdm9pZCB0ZWFyRG93bigpIHRocm93cyBFeGNlcHRpb24geworCQlzZXRGaXh0dXJlKG51bGwpOworCX0KKworfSAvL1BpcGVUcmFuc3BvcnRFZGdlTGFiZWxWYWx1ZVRlc3QKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMudHJhbnNwb3J0L3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL3RyYW5zcG9ydC90ZXN0cy9QaXBlVHJhbnNwb3J0RWRnZVRlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMudHJhbnNwb3J0L3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL3RyYW5zcG9ydC90ZXN0cy9QaXBlVHJhbnNwb3J0RWRnZVRlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNzI5YWI5Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy50cmFuc3BvcnQvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvdHJhbnNwb3J0L3Rlc3RzL1BpcGVUcmFuc3BvcnRFZGdlVGVzdC5qYXZhCkBAIC0wLDAgKzEsMTU0IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMudHJhbnNwb3J0LnRlc3RzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAKKyAqIENvcHlyaWdodCAoYykgMjAxMSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4gCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIAorICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wIAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQgCisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbCAKKyAqIAorICogQ29udHJpYnV0b3JzOiAKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKK2ltcG9ydCBqdW5pdC50ZXh0dWkuVGVzdFJ1bm5lcjsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5VUkk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLlNURU1VUkk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLk5vZGU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLlNURU1UaW1lOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLlBvcHVsYXRpb25MYWJlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy50ZXN0cy5Qb3B1bGF0aW9uTGFiZWxUZXN0OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubm9kZXMuTm9kZXNGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMudHJhbnNwb3J0LlBpcGVUcmFuc3BvcnRFZGdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMudHJhbnNwb3J0LlBpcGVUcmFuc3BvcnRFZGdlTGFiZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy50cmFuc3BvcnQuUGlwZVRyYW5zcG9ydEVkZ2VMYWJlbFZhbHVlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMudHJhbnNwb3J0LlRyYW5zcG9ydEZhY3Rvcnk7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIEEgdGVzdCBjYXNlIGZvciB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+UGlwZSBUcmFuc3BvcnQgRWRnZTwvYj48L2VtPicuCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIFBpcGVUcmFuc3BvcnRFZGdlVGVzdCBleHRlbmRzIFRlc3RDYXNlIHsKKwkKKwlwdWJsaWMgc3RhdGljIGZpbmFsIFVSSSBFREdFX1VSSSA9IFNURU1VUkkuY3JlYXRlVVJJKCJQaXBlU3R5bGVFZGdlVGVzdFVSSSIpOworCXB1YmxpYyBzdGF0aWMgZmluYWwgVVJJIE5PREVfQV9VUkkgPSBTVEVNVVJJLmNyZWF0ZVVSSSgiUmVnaW9uTm9kZUEiKTsKKwlwdWJsaWMgc3RhdGljIGZpbmFsIFVSSSBOT0RFX0JfVVJJID0gU1RFTVVSSS5jcmVhdGVVUkkoIlJlZ2lvbk5vZGVCIik7CisJcHVibGljIHN0YXRpYyBkb3VibGUgTUFYX0ZMT1cgPSAxLjA7CisJcHVibGljIHN0YXRpYyBmaW5hbCBsb25nIFRJTUVfUEVSSU9EID0gU1RFTVRpbWUuVW5pdHMuREFZLmdldE1pbGxpc2Vjb25kcygpOworCisJLyoqCisJICogVGhlIGZpeHR1cmUgZm9yIHRoaXMgUGlwZSBUcmFuc3BvcnQgRWRnZSB0ZXN0IGNhc2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIFBpcGVUcmFuc3BvcnRFZGdlIGZpeHR1cmUgPSBudWxsOworCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgeworCQlUZXN0UnVubmVyLnJ1bihQaXBlVHJhbnNwb3J0RWRnZVRlc3QuY2xhc3MpOworCX0KKworCS8qKgorCSAqIENvbnN0cnVjdHMgYSBuZXcgUGlwZSBUcmFuc3BvcnQgRWRnZSB0ZXN0IGNhc2Ugd2l0aCB0aGUgZ2l2ZW4gbmFtZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgUGlwZVRyYW5zcG9ydEVkZ2VUZXN0KFN0cmluZyBuYW1lKSB7CisJCXN1cGVyKG5hbWUpOworCX0KKworCS8qKgorCSAqIFNldHMgdGhlIGZpeHR1cmUgZm9yIHRoaXMgUGlwZSBUcmFuc3BvcnQgRWRnZSB0ZXN0IGNhc2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgc2V0Rml4dHVyZShQaXBlVHJhbnNwb3J0RWRnZSBmaXh0dXJlKSB7CisJCXRoaXMuZml4dHVyZSA9IGZpeHR1cmU7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgZml4dHVyZSBmb3IgdGhpcyBQaXBlIFRyYW5zcG9ydCBFZGdlIHRlc3QgY2FzZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgUGlwZVRyYW5zcG9ydEVkZ2UgZ2V0Rml4dHVyZSgpIHsKKwkJcmV0dXJuIGZpeHR1cmU7CisJfQorCQorCS8qKgorCSAqIGNyZWF0ZSB0aGUgZml4dHVyZQorCSAqKi8KKwlwcm90ZWN0ZWQgc3RhdGljIFBpcGVUcmFuc3BvcnRFZGdlIGNyZWF0ZUZpeHR1cmUoKSB7CisJCVBpcGVUcmFuc3BvcnRFZGdlIGVkZ2UgPSBUcmFuc3BvcnRGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVQaXBlVHJhbnNwb3J0RWRnZSgpOworCQllZGdlLnNldFVSSShFREdFX1VSSSk7CisJCQorCQkvLyB0aGUgbm9kZXMgdG8gY29ubmVjdCB0bworCQlOb2RlIG5vZGVBID0gTm9kZXNGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVSZWdpb24oKTsKKwkJTm9kZSBub2RlQiA9IE5vZGVzRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlUmVnaW9uKCk7CisJCW5vZGVBLnNldFVSSShOT0RFX0FfVVJJKTsKKwkJbm9kZUIuc2V0VVJJKE5PREVfQl9VUkkpOworCQlmaW5hbCBQb3B1bGF0aW9uTGFiZWwgcG9wdWxhdGlvbkxhYmVsID0gUG9wdWxhdGlvbkxhYmVsVGVzdC5jcmVhdGVGaXh0dXJlKCk7CisJCW5vZGVBLmdldExhYmVscygpLmFkZChwb3B1bGF0aW9uTGFiZWwpOworCQlub2RlQi5nZXRMYWJlbHMoKS5hZGQocG9wdWxhdGlvbkxhYmVsKTsKKwkKKwkJLy8gc2V0IHVwIHRoZSBwaXBlCisJCVBpcGVUcmFuc3BvcnRFZGdlTGFiZWwgIGVkZ2VMYWJlbCA9IChQaXBlVHJhbnNwb3J0RWRnZUxhYmVsKWVkZ2UuZ2V0TGFiZWwoKTsKKwkJUGlwZVRyYW5zcG9ydEVkZ2VMYWJlbFZhbHVlICBlZGdlTGFiZWxWYWx1ZSA9IFRyYW5zcG9ydEZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZVBpcGVUcmFuc3BvcnRFZGdlTGFiZWxWYWx1ZSgpOworCQllZGdlTGFiZWxWYWx1ZS5zZXRNYXhGbG93KE1BWF9GTE9XKTsKKwkJZWRnZUxhYmVsVmFsdWUuc2V0VGltZVBlcmlvZChUSU1FX1BFUklPRCk7CisJCWVkZ2VMYWJlbC5zZXRDdXJyZW50VmFsdWUoZWRnZUxhYmVsVmFsdWUpOworCQllZGdlLnNldEEobm9kZUEpOworCQllZGdlLnNldE5vZGVBVVJJKG5vZGVBLmdldFVSSSgpKTsKKwkJZWRnZS5zZXRCKG5vZGVCKTsKKwkJZWRnZS5zZXROb2RlQlVSSShub2RlQi5nZXRVUkkoKSk7CisJCWVkZ2Uuc2V0UG9wdWxhdGlvbklkZW50aWZpZXIocG9wdWxhdGlvbkxhYmVsLmdldFBvcHVsYXRpb25JZGVudGlmaWVyKCkpOworCQkKKwkJbm9kZUEuZ2V0RWRnZXMoKS5hZGQoZWRnZSk7CisJCW5vZGVCLmdldEVkZ2VzKCkuYWRkKGVkZ2UpOworCQkJCQkJCisJCXJldHVybiBlZGdlOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2Ujc2V0VXAoKQorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgc2V0VXAoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJc2V0Rml4dHVyZShjcmVhdGVGaXh0dXJlKCkpOworCX0KKwkKKwkvKioKKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCXB1YmxpYyB2b2lkIHRlc3RQaXBlVHJhbnNwb3J0RWRnZSgpIHsKKwkJYXNzZXJ0VHJ1ZShnZXRGaXh0dXJlKCkuc2FuZSgpKTsKKwl9CisJCisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlI3RlYXJEb3duKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgdGVhckRvd24oKSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJc2V0Rml4dHVyZShudWxsKTsKKwl9CisKK30gLy9QaXBlVHJhbnNwb3J0RWRnZVRlc3QKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMudHJhbnNwb3J0L3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL3RyYW5zcG9ydC90ZXN0cy9UcmFuc3BvcnRBbGxUZXN0cy5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy50cmFuc3BvcnQvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvdHJhbnNwb3J0L3Rlc3RzL1RyYW5zcG9ydEFsbFRlc3RzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWE2ODJlYgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMudHJhbnNwb3J0L3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL3RyYW5zcG9ydC90ZXN0cy9UcmFuc3BvcnRBbGxUZXN0cy5qYXZhCkBAIC0wLDAgKzEsNTUgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy50cmFuc3BvcnQudGVzdHM7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3Q7CitpbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RTdWl0ZTsKK2ltcG9ydCBqdW5pdC50ZXh0dWkuVGVzdFJ1bm5lcjsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogQSB0ZXN0IHN1aXRlIGZvciB0aGUgJzxlbT48Yj5UcmFuc3BvcnQ8L2I+PC9lbT4nIG1vZGVsLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBUcmFuc3BvcnRBbGxUZXN0cyBleHRlbmRzIFRlc3RTdWl0ZSB7CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CisJCVRlc3RSdW5uZXIucnVuKHN1aXRlKCkpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBzdGF0aWMgVGVzdCBzdWl0ZSgpIHsKKwkJVGVzdFN1aXRlIHN1aXRlID0gbmV3IFRyYW5zcG9ydEFsbFRlc3RzKCJUcmFuc3BvcnQgVGVzdHMiKTsKKwkJc3VpdGUuYWRkVGVzdChUcmFuc3BvcnRUZXN0cy5zdWl0ZSgpKTsKKwkJcmV0dXJuIHN1aXRlOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBUcmFuc3BvcnRBbGxUZXN0cyhTdHJpbmcgbmFtZSkgeworCQlzdXBlcihuYW1lKTsKKwl9CisKK30gLy9UcmFuc3BvcnRBbGxUZXN0cwpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy50cmFuc3BvcnQvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvdHJhbnNwb3J0L3Rlc3RzL1RyYW5zcG9ydFN5c3RlbVRlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMudHJhbnNwb3J0L3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL3RyYW5zcG9ydC90ZXN0cy9UcmFuc3BvcnRTeXN0ZW1UZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjEwNDZmNgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMudHJhbnNwb3J0L3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL3RyYW5zcG9ydC90ZXN0cy9UcmFuc3BvcnRTeXN0ZW1UZXN0LmphdmEKQEAgLTAsMCArMSw2MyBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLnRyYW5zcG9ydC50ZXN0czsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNywgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGgudGVzdHMuTm9kZVRlc3Q7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy50cmFuc3BvcnQuVHJhbnNwb3J0U3lzdGVtOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiBBIHRlc3QgY2FzZSBmb3IgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPlN5c3RlbTwvYj48L2VtPicuCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBnZW5lcmF0ZWQgTk9UCisgKi8KK3B1YmxpYyBhYnN0cmFjdCBjbGFzcyBUcmFuc3BvcnRTeXN0ZW1UZXN0IGV4dGVuZHMgTm9kZVRlc3QgeworCisJLyoqCisJICogVGhlIGZpeHR1cmUgZm9yIHRoaXMgU3lzdGVtIHRlc3QgY2FzZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgVHJhbnNwb3J0U3lzdGVtIGZpeHR1cmUgPSBudWxsOworCisJLyoqCisJICogQ29uc3RydWN0cyBhIG5ldyBTeXN0ZW0gdGVzdCBjYXNlIHdpdGggdGhlIGdpdmVuIG5hbWUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFRyYW5zcG9ydFN5c3RlbVRlc3QoU3RyaW5nIG5hbWUpIHsKKwkJc3VwZXIobmFtZSk7CisJfQorCisJLyoqCisJICogU2V0cyB0aGUgZml4dHVyZSBmb3IgdGhpcyBTeXN0ZW0gdGVzdCBjYXNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIHNldEZpeHR1cmUoVHJhbnNwb3J0U3lzdGVtIGZpeHR1cmUpIHsKKwkJdGhpcy5maXh0dXJlID0gZml4dHVyZTsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBmaXh0dXJlIGZvciB0aGlzIFN5c3RlbSB0ZXN0IGNhc2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIFRyYW5zcG9ydFN5c3RlbSBnZXRGaXh0dXJlKCkgeworCQlyZXR1cm4gZml4dHVyZTsKKwl9CisKK30gLy9UcmFuc3BvcnRTeXN0ZW1UZXN0CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnRyYW5zcG9ydC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy90cmFuc3BvcnQvdGVzdHMvVHJhbnNwb3J0VGVzdHMuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMudHJhbnNwb3J0L3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL3RyYW5zcG9ydC90ZXN0cy9UcmFuc3BvcnRUZXN0cy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUxNjZiODkKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnRyYW5zcG9ydC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy90cmFuc3BvcnQvdGVzdHMvVHJhbnNwb3J0VGVzdHMuamF2YQpAQCAtMCwwICsxLDU4IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMudHJhbnNwb3J0LnRlc3RzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA3LCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0OworaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0U3VpdGU7CitpbXBvcnQganVuaXQudGV4dHVpLlRlc3RSdW5uZXI7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIEEgdGVzdCBzdWl0ZSBmb3IgdGhlICc8ZW0+PGI+dHJhbnNwb3J0PC9iPjwvZW0+JyBwYWNrYWdlLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBUcmFuc3BvcnRUZXN0cyBleHRlbmRzIFRlc3RTdWl0ZSB7CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CisJCVRlc3RSdW5uZXIucnVuKHN1aXRlKCkpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBzdGF0aWMgVGVzdCBzdWl0ZSgpIHsKKwkJVGVzdFN1aXRlIHN1aXRlID0gbmV3IFRyYW5zcG9ydFRlc3RzKCJ0cmFuc3BvcnQgVGVzdHMiKTsKKwkJc3VpdGUuYWRkVGVzdFN1aXRlKFBpcGVTdHlsZVRyYW5zcG9ydFN5c3RlbVRlc3QuY2xhc3MpOworCQlzdWl0ZS5hZGRUZXN0U3VpdGUoUGlwZVRyYW5zcG9ydEVkZ2VUZXN0LmNsYXNzKTsKKwkJc3VpdGUuYWRkVGVzdFN1aXRlKFBpcGVUcmFuc3BvcnRFZGdlTGFiZWxUZXN0LmNsYXNzKTsKKwkJc3VpdGUuYWRkVGVzdFN1aXRlKFBpcGVUcmFuc3BvcnRFZGdlTGFiZWxWYWx1ZVRlc3QuY2xhc3MpOworCQlyZXR1cm4gc3VpdGU7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFRyYW5zcG9ydFRlc3RzKFN0cmluZyBuYW1lKSB7CisJCXN1cGVyKG5hbWUpOworCX0KKworfSAvL1RyYW5zcG9ydFRlc3RzCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnRyYW5zcG9ydC90ZXN0LnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMudHJhbnNwb3J0L3Rlc3QueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI3N2Q5ZTIKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnRyYW5zcG9ydC90ZXN0LnhtbApAQCAtMCwwICsxLDUzIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorCis8cHJvamVjdCBuYW1lPSJ0ZXN0c3VpdGUiIGRlZmF1bHQ9InJ1biIgYmFzZWRpcj0iLiI+CisgIDwhLS0gVGhlIHByb3BlcnR5ICR7ZWNsaXBzZS1ob21lfSBzaG91bGQgYmUgcGFzc2VkIGludG8gdGhpcyBzY3JpcHQgLS0+CisgIDwhLS0gU2V0IGEgbWVhbmluZ2Z1bCBkZWZhdWx0IHZhbHVlIGZvciB3aGVuIGl0IGlzIG5vdC4gLS0+CisgIDxwcm9wZXJ0eSBuYW1lPSJlY2xpcHNlLWhvbWUiIHZhbHVlPSIiLz4KKworCisgIDwhLS0gc2V0cyB0aGUgcHJvcGVydGllcyBlY2xpcHNlLWhvbWUsIGFuZCBsaWJyYXJ5LWZpbGUgLS0+CisgIDxwcm9wZXJ0eSBuYW1lPSJwbHVnaW4tbmFtZSIgdmFsdWU9Im9yZy5lY2xpcHNlLnN0ZW0udGVzdHMudHJhbnNwb3J0Ii8+CisgIDxwcm9wZXJ0eSBuYW1lPSJsaWJyYXJ5LWZpbGUiCisgICAgICAgICAgICB2YWx1ZT0iJHtlY2xpcHNlLWhvbWV9L3BsdWdpbnMvb3JnLmVjbGlwc2UudGVzdF8zLjMuMC9saWJyYXJ5LnhtbCIvPgorCisgIDwhLS0gVGhpcyB0YXJnZXQgaG9sZHMgYWxsIGluaXRpYWxpemF0aW9uIGNvZGUgdGhhdCBuZWVkcyB0byBiZSBkb25lIGZvciAtLT4KKyAgPCEtLSBhbGwgdGVzdHMgdGhhdCBhcmUgdG8gYmUgcnVuLiBJbml0aWFsaXphdGlvbiBmb3IgaW5kaXZpZHVhbCB0ZXN0cyAtLT4KKyAgPCEtLSBzaG91bGQgYmUgZG9uZSB3aXRoaW4gdGhlIGJvZHkgb2YgdGhlIHN1aXRlIHRhcmdldC4gLS0+CisgIDx0YXJnZXQgbmFtZT0iaW5pdCI+CisgICAgPHRzdGFtcC8+CisgICAgPGRlbGV0ZT4KKyAgICAgIDxmaWxlc2V0IGRpcj0iJHtlY2xpcHNlLWhvbWV9IiBpbmNsdWRlcz0ib3JnKi54bWwiLz4KKyAgICA8L2RlbGV0ZT4KKyAgPC90YXJnZXQ+CisKKyAgPCEtLSBUaGlzIHRhcmdldCBkZWZpbmVzIHRoZSB0ZXN0cyB0aGF0IG5lZWQgdG8gYmUgcnVuLiAtLT4KKyAgPHRhcmdldCBuYW1lPSJzdWl0ZSI+CisgICAgPHByb3BlcnR5IG5hbWU9ImRhdGEtZGlyIiB2YWx1ZT0iJHtlY2xpcHNlLWhvbWV9L3RtcCIvPgorICAgIDxkZWxldGUgZGlyPSIke2RhdGEtZGlyfSIgcXVpZXQ9InRydWUiLz4KKyAgICA8YW50IHRhcmdldD0idWktdGVzdCIgYW50ZmlsZT0iJHtsaWJyYXJ5LWZpbGV9IiBkaXI9IiR7ZWNsaXBzZS1ob21lfSI+CisgICAgICA8cHJvcGVydHkgbmFtZT0iZGF0YS1kaXIiIHZhbHVlPSIke2RhdGEtZGlyfSIvPgorICAgICAgPHByb3BlcnR5IG5hbWU9InBsdWdpbi1uYW1lIiB2YWx1ZT0iJHtwbHVnaW4tbmFtZX0iLz4KKyAgICAgIDxwcm9wZXJ0eSBuYW1lPSJjbGFzc25hbWUiIHZhbHVlPSJvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLnRyYW5zcG9ydC50ZXN0cy5UcmFuc3BvcnRBbGxUZXN0cyIvPgorICAgIDwvYW50PgorICA8L3RhcmdldD4KKworICA8IS0tIFRoaXMgdGFyZ2V0IGhvbGRzIGNvZGUgdG8gY2xlYW51cCB0aGUgdGVzdGluZyBlbnZpcm9ubWVudCBhZnRlciAtLT4KKyAgPCEtLSBhZnRlciBhbGwgb2YgdGhlIHRlc3RzIGhhdmUgYmVlbiBydW4uIFlvdSBjYW4gdXNlIHRoaXMgdGFyZ2V0IHRvIC0tPgorICA8IS0tIGRlbGV0ZSB0ZW1wb3JhcnkgZmlsZXMgdGhhdCBoYXZlIGJlZW4gY3JlYXRlZC4gLS0+CisgIDx0YXJnZXQgbmFtZT0iY2xlYW51cCI+CisgIDwvdGFyZ2V0PgorCisgIDwhLS0gVGhpcyB0YXJnZXQgcnVucyB0aGUgdGVzdCBzdWl0ZS4gQW55IGFjdGlvbnMgdGhhdCBuZWVkIHRvIGhhcHBlbiAtLT4KKyAgPCEtLSBhZnRlciBhbGwgdGhlIHRlc3RzIGhhdmUgYmVlbiBydW4gc2hvdWxkIGdvIGhlcmUuIC0tPgorICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdCxzdWl0ZSxjbGVhbnVwIj4KKyAgICA8YW50IHRhcmdldD0iY29sbGVjdCIgYW50ZmlsZT0iJHtsaWJyYXJ5LWZpbGV9IiBkaXI9IiR7ZWNsaXBzZS1ob21lfSI+CisgICAgICA8cHJvcGVydHkgbmFtZT0iaW5jbHVkZXMiIHZhbHVlPSJvcmcqLnhtbCIvPgorICAgICAgPHByb3BlcnR5IG5hbWU9Im91dHB1dC1maWxlIiB2YWx1ZT0iJHtwbHVnaW4tbmFtZX0ueG1sIi8+CisgICAgPC9hbnQ+CisgIDwvdGFyZ2V0PgorCisgIDwhLS0gVGhpcyB0YXJnZXQgcnVucyB0aGUgcGVyZm9ybWFuY2UgdGVzdCBzdWl0ZXMuIC0tPgorICA8dGFyZ2V0IG5hbWU9InBlcmZvcm1hbmNlIj4KKyAgPC90YXJnZXQ+Cis8L3Byb2plY3Q+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnVpLmdlLy5jbGFzc3BhdGggYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnVpLmdlLy5jbGFzc3BhdGgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjRjNWUzMQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMudWkuZ2UvLmNsYXNzcGF0aApAQCAtMCwwICsxLDcgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8Y2xhc3NwYXRoPgorCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJjb24iIHBhdGg9Im9yZy5lY2xpcHNlLmpkdC5sYXVuY2hpbmcuSlJFX0NPTlRBSU5FUi9vcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwuZGVidWcudWkubGF1bmNoZXIuU3RhbmRhcmRWTVR5cGUvSjJTRS0xLjUiLz4KKwk8Y2xhc3NwYXRoZW50cnkga2luZD0iY29uIiBwYXRoPSJvcmcuZWNsaXBzZS5wZGUuY29yZS5yZXF1aXJlZFBsdWdpbnMiLz4KKwk8Y2xhc3NwYXRoZW50cnkga2luZD0ic3JjIiBwYXRoPSJzcmMiLz4KKwk8Y2xhc3NwYXRoZW50cnkga2luZD0ib3V0cHV0IiBwYXRoPSJiaW4iLz4KKzwvY2xhc3NwYXRoPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51aS5nZS8ucHJvamVjdCBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMudWkuZ2UvLnByb2plY3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmUyN2NjZAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMudWkuZ2UvLnByb2plY3QKQEAgLTAsMCArMSwyOCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxwcm9qZWN0RGVzY3JpcHRpb24+CisJPG5hbWU+b3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51aS5nZTwvbmFtZT4KKwk8Y29tbWVudD48L2NvbW1lbnQ+CisJPHByb2plY3RzPgorCTwvcHJvamVjdHM+CisJPGJ1aWxkU3BlYz4KKwkJPGJ1aWxkQ29tbWFuZD4KKwkJCTxuYW1lPm9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFidWlsZGVyPC9uYW1lPgorCQkJPGFyZ3VtZW50cz4KKwkJCTwvYXJndW1lbnRzPgorCQk8L2J1aWxkQ29tbWFuZD4KKwkJPGJ1aWxkQ29tbWFuZD4KKwkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5NYW5pZmVzdEJ1aWxkZXI8L25hbWU+CisJCQk8YXJndW1lbnRzPgorCQkJPC9hcmd1bWVudHM+CisJCTwvYnVpbGRDb21tYW5kPgorCQk8YnVpbGRDb21tYW5kPgorCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLlNjaGVtYUJ1aWxkZXI8L25hbWU+CisJCQk8YXJndW1lbnRzPgorCQkJPC9hcmd1bWVudHM+CisJCTwvYnVpbGRDb21tYW5kPgorCTwvYnVpbGRTcGVjPgorCTxuYXR1cmVzPgorCQk8bmF0dXJlPm9yZy5lY2xpcHNlLnBkZS5QbHVnaW5OYXR1cmU8L25hdHVyZT4KKwkJPG5hdHVyZT5vcmcuZWNsaXBzZS5qZHQuY29yZS5qYXZhbmF0dXJlPC9uYXR1cmU+CisJPC9uYXR1cmVzPgorPC9wcm9qZWN0RGVzY3JpcHRpb24+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnVpLmdlLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMudWkuZ2UvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRiMzBkZDAKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnVpLmdlLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcwpAQCAtMCwwICsxLDggQEAKKyNXZWQgTWFyIDMwIDE1OjI4OjI4IFBEVCAyMDExCitlY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29kZWdlbi5pbmxpbmVKc3JCeXRlY29kZT1lbmFibGVkCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb2RlZ2VuLnRhcmdldFBsYXRmb3JtPTEuNQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29tcGxpYW5jZT0xLjUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uYXNzZXJ0SWRlbnRpZmllcj1lcnJvcgorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5lbnVtSWRlbnRpZmllcj1lcnJvcgorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuc291cmNlPTEuNQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51aS5nZS9NRVRBLUlORi9NQU5JRkVTVC5NRiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMudWkuZ2UvTUVUQS1JTkYvTUFOSUZFU1QuTUYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2YzYzIyNgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMudWkuZ2UvTUVUQS1JTkYvTUFOSUZFU1QuTUYKQEAgLTAsMCArMSwxNSBAQAorTWFuaWZlc3QtVmVyc2lvbjogMS4wCitCdW5kbGUtTWFuaWZlc3RWZXJzaW9uOiAyCitCdW5kbGUtTmFtZTogZ2UKK0J1bmRsZS1TeW1ib2xpY05hbWU6IG9yZy5lY2xpcHNlLnN0ZW0udGVzdHMudWkuZ2UKK0J1bmRsZS1WZXJzaW9uOiAxLjIuMQorQnVuZGxlLUFjdGl2YXRvcjogb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51aS5nZS5BY3RpdmF0b3IKK1JlcXVpcmUtQnVuZGxlOiBvcmcuZWNsaXBzZS51aSwKKyBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUsCisgb3JnLmVjbGlwc2Uuc3RlbS51aS5nZSwKKyBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLAorIG9yZy5qdW5pdCwKKyBvcmcuZWNsaXBzZS5oZWxwLnVpLAorIG9yZy5lY2xpcHNlLnN0ZW0uam9icztidW5kbGUtdmVyc2lvbj0iMS4xLjAiCitCdW5kbGUtQWN0aXZhdGlvblBvbGljeTogbGF6eQorQnVuZGxlLVJlcXVpcmVkRXhlY3V0aW9uRW52aXJvbm1lbnQ6IEphdmFTRS0xLjYKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMudWkuZ2UvYnVpbGQucHJvcGVydGllcyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMudWkuZ2UvYnVpbGQucHJvcGVydGllcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNGQyZTRkCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51aS5nZS9idWlsZC5wcm9wZXJ0aWVzCkBAIC0wLDAgKzEsNCBAQAorc291cmNlLi4gPSBzcmMvCitvdXRwdXQuLiA9IGJpbi8KK2Jpbi5pbmNsdWRlcyA9IE1FVEEtSU5GLyxcCisgICAgICAgICAgICAgICAuCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnVpLmdlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3Rlc3RzL3VpL2dlL0FjdGl2YXRvci5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51aS5nZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS90ZXN0cy91aS9nZS9BY3RpdmF0b3IuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZjQ5ZjI1Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51aS5nZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS90ZXN0cy91aS9nZS9BY3RpdmF0b3IuamF2YQpAQCAtMCwwICsxLDc3IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0udGVzdHMudWkuZ2U7CisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8gCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGx1Z2luOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5Db25zdGFudHM7CitpbXBvcnQgb3JnLm9zZ2kuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHQ7CisKKworLyoqCisgKiBUaGUgYWN0aXZhdG9yIGNsYXNzIGNvbnRyb2xzIHRoZSBwbHVnLWluIGxpZmUgY3ljbGUuCisgKiBJdCBzdWJjbGFzc2VzIEFic3RyYWN0VUlQbHVnaW4gd2hpY2ggdGFrZXMgY2FyZSBvZiAKKyAqIHJlc3RvcmluZyBhbmQgc2F2aW5nIFByZWZlcmVuY2VzLgorICogCisgKiBJdCBpcyBub3QgY2xlYXIgaWYgd2UgbmVlZCB0aGlzIGNsYXNzIGZvciB0aGUgZ2UudGVzdHMgCisgKiBwbHVnaW4gcHJvamVjdC4gIFNvIGZhciBpdCBoYXMgbm90IGh1cnQhCisgKi8KK3B1YmxpYyBjbGFzcyBBY3RpdmF0b3IgZXh0ZW5kcyBQbHVnaW4geworCisJLyoqCisJICogVGhlIHBsdWctaW4gSUQKKwkgKi8gCisJcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUExVR0lOX0lEID0gQ29uc3RhbnRzLklEX1JPT1QgKyJ0ZXN0cy51aS5nZWUiOyAvLyROT04tTkxTLTEkCisKKwkvKiogCisJICogVGhlIHNoYXJlZCBpbnN0YW5jZQorCSAqIAorCSAqLworCXN0YXRpYyBBY3RpdmF0b3IgcGx1Z2luOworCQorCS8qKgorCSAqIFRoZSBjb25zdHJ1Y3RvcgorCSAqLworCXB1YmxpYyBBY3RpdmF0b3IoKSB7CisJCXBsdWdpbiA9IHRoaXM7CisJfQorCisJCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGx1Z2luI3N0YXJ0KG9yZy5vc2dpLmZyYW1ld29yay5CdW5kbGVDb250ZXh0KQorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIHN0YXJ0KEJ1bmRsZUNvbnRleHQgY29udGV4dCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCXN1cGVyLnN0YXJ0KGNvbnRleHQpOworCX0KKworCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGx1Z2luI3N0b3Aob3JnLm9zZ2kuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHQpCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgc3RvcChCdW5kbGVDb250ZXh0IGNvbnRleHQpIHRocm93cyBFeGNlcHRpb24geworCQlwbHVnaW4gPSBudWxsOworCQlzdXBlci5zdG9wKGNvbnRleHQpOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIHNoYXJlZCBpbnN0YW5jZQorCSAqCisJICogQHJldHVybiB0aGUgc2hhcmVkIGluc3RhbmNlCisJICovCisJcHVibGljIHN0YXRpYyBBY3RpdmF0b3IgZ2V0RGVmYXVsdCgpIHsKKwkJaWYgKHBsdWdpbiA9PSBudWxsKSAKKwkJCXBsdWdpbiA9IG5ldyBBY3RpdmF0b3IoKTsKKwkJcmV0dXJuIHBsdWdpbjsKKwl9CisKKwkKK30KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMudWkuZ2Uvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvZ2UvQXNwZWN0VGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51aS5nZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9nZS9Bc3BlY3RUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTgzNGU4NgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMudWkuZ2Uvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvZ2UvQXNwZWN0VGVzdC5qYXZhCkBAIC0wLDAgKzEsMjU0IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0udWkuZ2U7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgamF2YS51dGlsLk1hcDsKKworaW1wb3J0IGp1bml0LmZyYW1ld29yay5Bc3NlcnQ7CitpbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOworCisKKy8qKgorICogVGVzdCB0aGUgQXNwZWN0IGNsYXNzIAorICogCisgKiBUaGlzIGNhbiBydW4gYXMgYSBqYXZhIGp1bml0IGNsYXNzIAorICogSXQgZG9lcyBub3QgaGF2ZSB0byBydW4gYXMgYSBwbHVnaW4KKyAqCisgKi8KK3B1YmxpYyBjbGFzcyBBc3BlY3RUZXN0IGV4dGVuZHMgVGVzdENhc2UgeworCQorCQorCS8qIChub24tSmF2YWRvYykKKwkgKiBAc2VlIGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZSNzZXRVcCgpCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgc2V0VXAoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJc3VwZXIuc2V0VXAoKTsKKwkJLy8gU2hvdWxkIGRvIGp1c3QgUyBFIEkgUiBhcyBkZWZhdWx0CisJCS8vUHJvcGVydGllcyBwcm9wZXJ0aWVzID0gbmV3IFByb3BlcnRpZXMoKTsKKwkJLy8gY2FsbCB0aGUgc2V0dXAoKSBtZXRob2QgZm9yIHRoZSBBc3BlY3QgY2xhc3MuCisJCUFzcGVjdC5zZXR1cCgpOwkJCisJfQorCisJLyogKG5vbi1KYXZhZG9jKQorCSAqIEBzZWUganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlI3RlYXJEb3duKCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgdm9pZCB0ZWFyRG93bigpIHRocm93cyBFeGNlcHRpb24geworCQlzdXBlci50ZWFyRG93bigpOworCX0KKworCS8qKgorCSAqIFRlc3QgbWV0aG9kIGZvciB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS51aS5nZS5Bc3BlY3Qjc2V0dXAoKX0uCisJICovCisJcHVibGljIHZvaWQgdGVzdFNldHVwKCkgeworCQkKKwkJQXNwZWN0LnNldHVwKCk7CisJfQorCisJCisJLyoqCisJICogVGVzdCBtZXRob2QgZm9yIG9yZy5lY2xpcHNlLnN0ZW0udWkuZ2UuQXNwZWN0I2dldEFzcGVjdHMoUHJvcGVydGllcykKKwkgKi8KKwlwdWJsaWMgdm9pZCB0ZXN0R2V0QXNwZWN0cygpIHsKKwkJLy8gd2UgZGlkIHRoZSBnZXRBc3BlY3RzIGluIHNldHVwIHNvIGp1c3QgY2hlY2sgcmVzdWx0cworCQlNYXA8U3RyaW5nLEFzcGVjdD4gYXNwZWN0cyA9IEFzcGVjdC5nZXRNYXAoKTsKKwkJCisJCUFzc2VydC5hc3NlcnRFcXVhbHMoNCxhc3BlY3RzLnNpemUoKSk7CisJCWZvcihNYXAuRW50cnk8U3RyaW5nLEFzcGVjdD4gZW50cnk6IGFzcGVjdHMuZW50cnlTZXQoKSkgeworCQkJQXNwZWN0IGFzcGVjdCA9IGVudHJ5LmdldFZhbHVlKCk7CisJCQlib29sZWFuIHNhbmUgPSBhc3BlY3QuaXNTYW5lKCk7CisJCQlBc3NlcnQuYXNzZXJ0VHJ1ZShzYW5lKTsKKwkJfQorCQkKKwl9CisJLyoqCisJICogVGVzdCBtZXRob2QgZm9yIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLnVpLmdlLkFzcGVjdCNBc3BlY3QoamF2YS5sYW5nLlN0cmluZywgamF2YS5sYW5nLlN0cmluZyl9LgorCSAqLworCXB1YmxpYyB2b2lkIHRlc3RBc3BlY3QoKSB7CisJCUFzcGVjdCBhID0gbmV3IEFzcGVjdCgiVCIsIlRlc3QiKTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCisJCUFzc2VydC5hc3NlcnROb3ROdWxsKCJDb25zdHJ1Y3RvciBmYWlsZWQiLCBhKTsJIC8vJE5PTi1OTFMtMSQKKwl9CisJLyoqCisJICogVGVzdCBtZXRob2QgZm9yIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLnVpLmdlLkFzcGVjdCNnZXRBc3BlY3QoamF2YS5sYW5nLlN0cmluZyl9LgorCSAqLworCXB1YmxpYyB2b2lkIHRlc3RHZXRBc3BlY3QoKSB7CisJCQorCQlBc3BlY3QgdCA9IEFzcGVjdC5nZXRBc3BlY3QoIlMiKTsJCSAvLyROT04tTkxTLTEkCisJCUFzc2VydC5hc3NlcnRFcXVhbHModC5nZXRDb2RlKCksIlMiKTsgLy8kTk9OLU5MUy0xJAorCX0KKwkvKioKKwkgKiBUZXN0IG1ldGhvZCBmb3IgCisJICovCisJcHVibGljIHZvaWQgdGVzdEdldERlZmF1bHQoKSB7CisJCUFzcGVjdCBkZWZhdWx0QSA9IEFzcGVjdC5nZXREZWZhdWx0KCk7CisJCUFzc2VydC5hc3NlcnRFcXVhbHMoIkkiLGRlZmF1bHRBLmdldENvZGUoKSk7IC8vJE5PTi1OTFMtMSQKKwkJCisJfQorCS8qKgorCSAqIFRlc3QgbWV0aG9kIGZvciB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS51aS5nZS5Bc3BlY3QjZXhpc3RzKGphdmEubGFuZy5TdHJpbmcpfS4KKwkgKi8KKwlwdWJsaWMgdm9pZCB0ZXN0RXhpc3RzKCkgeworCQkJCisJCUFzc2VydC5hc3NlcnRUcnVlKEFzcGVjdC5leGlzdHMoIkUiKSk7IC8vJE5PTi1OTFMtMSQKKwkJQXNzZXJ0LmFzc2VydEZhbHNlKEFzcGVjdC5leGlzdHMoIlgiKSk7IC8vJE5PTi1OTFMtMSQKKwl9CisJLyoqCisJICogVGVzdCBtZXRob2QgZm9yIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLnVpLmdlLkFzcGVjdCNnZXRNYXAoKX0uCisJICovCisJcHVibGljIHZvaWQgdGVzdEdldE1hcCgpIHsKKwkJTWFwPFN0cmluZyxBc3BlY3Q+IG1hcCA9IEFzcGVjdC5nZXRNYXAoKTsKKwkJQXNzZXJ0LmFzc2VydE5vdE51bGwoImdldE1hcCBmYWlsZWQiLCBtYXApOyAvLyROT04tTkxTLTEkCisJfQorCisJCisKKwkvKioKKwkgKiBUZXN0IG1ldGhvZCBmb3Ige0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0udWkuZ2UuQXNwZWN0I2dldENvZGUoKX0uCisJICovCisJcHVibGljIHZvaWQgdGVzdEdldENvZGUoKSB7CisJCUFzcGVjdCB0ZXN0ID0gQXNwZWN0LmdldEFzcGVjdCgiUiIpOyAvLyROT04tTkxTLTEkCisJCUFzc2VydC5hc3NlcnRFcXVhbHModGVzdC5nZXRDb2RlKCksIlIiKTsgLy8kTk9OLU5MUy0xJAorCX0KKworCS8qKgorCSAqIFRlc3QgbWV0aG9kIGZvciB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS51aS5nZS5Bc3BlY3Qjc2V0Q29kZShqYXZhLmxhbmcuU3RyaW5nKX0uCisJICovCisJcHVibGljIHZvaWQgdGVzdFNldENvZGUoKSB7CisJCUFzcGVjdCB0ZXN0ID0gQXNwZWN0LmdldEFzcGVjdCgiUiIpOyAvLyROT04tTkxTLTEkCisJCXRlc3Quc2V0Q29kZSgiWCIpOyAvLyROT04tTkxTLTEkCisJCUFzc2VydC5hc3NlcnRFcXVhbHModGVzdC5nZXRDb2RlKCksIlgiKTsgLy8kTk9OLU5MUy0xJAorCQlBc3NlcnQuYXNzZXJ0VHJ1ZShBc3BlY3QuZXhpc3RzKCJYIikpOyAvLyROT04tTkxTLTEkCisJfQorCisJCisKKwkvKioKKwkgKiBUZXN0IG1ldGhvZCBmb3Ige0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0udWkuZ2UuQXNwZWN0I3NldE5hbWUoamF2YS5sYW5nLlN0cmluZyl9LgorCSAqLworCXB1YmxpYyB2b2lkIHRlc3RTZXROYW1lKCkgeworCQlBc3BlY3QgdGVzdCA9IEFzcGVjdC5nZXRBc3BlY3QoIlIiKTsgLy8kTk9OLU5MUy0xJAorCQl0ZXN0LnNldE5hbWUoIk5ld05hbWUiKTsgLy8kTk9OLU5MUy0xJAorCQlBc3NlcnQuYXNzZXJ0RXF1YWxzKHRlc3QuZ2V0TmFtZSgpLCJOZXdOYW1lIik7IC8vJE5PTi1OTFMtMSQKKwl9CisKKwkvKioKKwkgKiBUZXN0IG1ldGhvZCBmb3Ige0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0udWkuZ2UuQXNwZWN0I3RvU3RyaW5nKCl9LgorCSAqLworCXB1YmxpYyB2b2lkIHRlc3RUb1N0cmluZygpIHsKKwkJQXNwZWN0IHRlc3QgPSBBc3BlY3QuZ2V0QXNwZWN0KCJSIik7IC8vJE5PTi1OTFMtMSQKKwkJQXNzZXJ0LmFzc2VydEVxdWFscyh0ZXN0LnRvU3RyaW5nKCksdGVzdC5nZXRDb2RlKCkpOworCX0KKworCS8qKgorCSAqIFRlc3QgbWV0aG9kIGZvciB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS51aS5nZS5Bc3BlY3QjZ2V0RGVzY3JpcHRpb24oKX0uCisJICovCisJcHVibGljIHZvaWQgdGVzdEdldERlc2NyaXB0aW9uKCkgeworCQlBc3BlY3QgdGVzdCA9IEFzcGVjdC5nZXRBc3BlY3QoIlIiKTsgLy8kTk9OLU5MUy0xJAorCQlBc3NlcnQuYXNzZXJ0Tm90TnVsbCh0ZXN0LmdldERlc2NyaXB0aW9uKCkpOworCX0KKworCS8qKgorCSAqIFRlc3QgbWV0aG9kIGZvciB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS51aS5nZS5Bc3BlY3Qjc2V0RGVzY3JpcHRpb24oamF2YS5sYW5nLlN0cmluZyl9LgorCSAqLworCXB1YmxpYyB2b2lkIHRlc3RTZXREZXNjcmlwdGlvbigpIHsKKwkJQXNwZWN0IHRlc3QgPSBBc3BlY3QuZ2V0QXNwZWN0KCJSIik7IC8vJE5PTi1OTFMtMSQKKwkJdGVzdC5zZXREZXNjcmlwdGlvbigiTmV3IGRlc2NyaXB0aW9uIik7IC8vJE5PTi1OTFMtMSQKKwkJQXNzZXJ0LmFzc2VydEVxdWFscyh0ZXN0LmdldERlc2NyaXB0aW9uKCksIk5ldyBkZXNjcmlwdGlvbiIpOyAvLyROT04tTkxTLTEkCisJfQorCisJLyoqCisJICogVGVzdCBtZXRob2QgZm9yIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLnVpLmdlLkFzcGVjdCNnZXRSYW5nZSgpfS4KKwkgKi8KKwlwdWJsaWMgdm9pZCB0ZXN0R2V0UmFuZ2UoKSB7CisJCUFzcGVjdCB0ZXN0ID0gQXNwZWN0LmdldEFzcGVjdCgiUiIpOyAvLyROT04tTkxTLTEkCisJCUFzc2VydC5hc3NlcnRUcnVlKHRlc3QuaXNTYW5lKCkpOworCQkKKwl9CisKKwkvKioKKwkgKiBUZXN0IG1ldGhvZCBmb3Ige0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0udWkuZ2UuQXNwZWN0I3NldFJhbmdlKGphdmEubGFuZy5TdHJpbmcpfS4KKwkgKi8KKwlAU3VwcHJlc3NXYXJuaW5ncygiYm94aW5nIikKKwlwdWJsaWMgdm9pZCB0ZXN0U2V0UmFuZ2VTdHJpbmcoKSB7CisJCUFzcGVjdCB0ZXN0ID0gQXNwZWN0LmdldEFzcGVjdCgiUiIpOyAvLyROT04tTkxTLTEkCisJCXRlc3Quc2V0UmFuZ2UoIjAuMCwwLjUsMS4wIik7IC8vJE5PTi1OTFMtMSQKKwkJQXNzZXJ0LmFzc2VydEVxdWFscyh0ZXN0LmdldFJhbmdlKDEpLDAuNSk7CisJfQorCisJLyoqCisJICogVGVzdCBtZXRob2QgZm9yIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLnVpLmdlLkFzcGVjdCNnZXRPcGFjaXR5KCl9LgorCSAqLworCXB1YmxpYyB2b2lkIHRlc3RHZXRPcGFjaXR5KCkgeworCQlBc3BlY3QgdGVzdCA9IEFzcGVjdC5nZXRBc3BlY3QoIlIiKTsgLy8kTk9OLU5MUy0xJAorCQlBc3NlcnQuYXNzZXJ0RXF1YWxzKHRlc3QuZ2V0T3BhY2l0eSgwKSwgMCk7CisJfQorCisJCisKKwkvKioKKwkgKiBUZXN0IG1ldGhvZCBmb3Ige0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0udWkuZ2UuQXNwZWN0I3NldE9wYWNpdHkoamF2YS5sYW5nLlN0cmluZyl9LgorCSAqLworCXB1YmxpYyB2b2lkIHRlc3RTZXRPcGFjaXR5KCkgeworCQlBc3BlY3QgdGVzdCA9IEFzcGVjdC5nZXRBc3BlY3QoIlIiKTsgLy8kTk9OLU5MUy0xJAorCQl0ZXN0LnNldE9wYWNpdHkoIjAiKTsgLy8kTk9OLU5MUy0xJAorCX0KKworCS8qKgorCSAqIFRlc3QgbWV0aG9kIGZvciB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS51aS5nZS5Bc3BlY3Qjc2V0UmVkKGphdmEubGFuZy5TdHJpbmcpfS4KKwkgKi8KKwlwdWJsaWMgdm9pZCB0ZXN0U2V0UmVkKCkgeworCQlBc3BlY3QgdGVzdCA9IEFzcGVjdC5nZXRBc3BlY3QoIlIiKTsgLy8kTk9OLU5MUy0xJAorCQl0ZXN0LnNldFJlZCgiMCIpOyAvLyROT04tTkxTLTEkCisJfQorCisJLyoqCisJICogVGVzdCBtZXRob2QgZm9yIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLnVpLmdlLkFzcGVjdCNzZXRHcmVlbihqYXZhLmxhbmcuU3RyaW5nKX0uCisJICovCisJcHVibGljIHZvaWQgdGVzdFNldEdyZWVuKCkgeworCQlBc3BlY3QgdGVzdCA9IEFzcGVjdC5nZXRBc3BlY3QoIlIiKTsgLy8kTk9OLU5MUy0xJAorCQl0ZXN0LnNldEdyZWVuKCIwLDEyOCwyNTUiKTsgLy8kTk9OLU5MUy0xJAorCX0KKworCS8qKgorCSAqIFRlc3QgbWV0aG9kIGZvciB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS51aS5nZS5Bc3BlY3Qjc2V0Qmx1ZShqYXZhLmxhbmcuU3RyaW5nKX0uCisJICovCisJcHVibGljIHZvaWQgdGVzdFNldEJsdWUoKSB7CisJCUFzcGVjdCB0ZXN0ID0gQXNwZWN0LmdldEFzcGVjdCgiUiIpOyAvLyROT04tTkxTLTEkCisJCXRlc3Quc2V0Qmx1ZSgiMCwxMjgsMjU1Iik7IC8vJE5PTi1OTFMtMSQKKwl9CisKKwkvKioKKwkgKiBUZXN0IG1ldGhvZCBmb3Ige0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0udWkuZ2UuQXNwZWN0I2dldFJlZChpbnQpfS4KKwkgKi8KKwlwdWJsaWMgdm9pZCB0ZXN0R2V0UmVkKCkgeworCQlBc3BlY3QgdGVzdCA9IEFzcGVjdC5nZXRBc3BlY3QoIlIiKTsgLy8kTk9OLU5MUy0xJAorCQlBc3NlcnQuYXNzZXJ0RXF1YWxzKHRlc3QuZ2V0UmVkKDApLCAwKTsKKwl9CisKKwkvKioKKwkgKiBUZXN0IG1ldGhvZCBmb3Ige0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0udWkuZ2UuQXNwZWN0I2dldEdyZWVuKGludCl9LgorCSAqLworCXB1YmxpYyB2b2lkIHRlc3RHZXRHcmVlbigpIHsKKwkJQXNwZWN0IHRlc3QgPSBBc3BlY3QuZ2V0QXNwZWN0KCJSIik7IC8vJE5PTi1OTFMtMSQKKwkJQXNzZXJ0LmFzc2VydEVxdWFscyh0ZXN0LmdldEdyZWVuKDApLCAyNDApOworCX0KKworCS8qKgorCSAqIFRlc3QgbWV0aG9kIGZvciB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS51aS5nZS5Bc3BlY3QjZ2V0Qmx1ZShpbnQpfS4KKwkgKi8KKwlwdWJsaWMgdm9pZCB0ZXN0R2V0Qmx1ZSgpIHsKKwkJQXNwZWN0IHRlc3QgPSBBc3BlY3QuZ2V0QXNwZWN0KCJSIik7IC8vJE5PTi1OTFMtMSQKKwkJQXNzZXJ0LmFzc2VydEVxdWFscyh0ZXN0LmdldEJsdWUoMSksIDApOworCX0KKworfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51aS5nZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9nZS9HRURhdGFUZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnVpLmdlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL2dlL0dFRGF0YVRlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NDcyMjdlCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51aS5nZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9nZS9HRURhdGFUZXN0LmphdmEKQEAgLTAsMCArMSwxMzcgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS51aS5nZTsKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLyAKKworaW1wb3J0IGp1bml0LmZyYW1ld29yay5Bc3NlcnQ7CitpbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOworCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5hZGFwdGVycy5zcGF0aWFsLmdlby5MYXRMb25nOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuYWRhcHRlcnMuc3BhdGlhbC5nZW8uTGF0TG9uZy5TZWdtZW50OworCisvKioKKyAqIHRlc3QKKyAqCisgKi8KK3B1YmxpYyBjbGFzcyBHRURhdGFUZXN0IGV4dGVuZHMgVGVzdENhc2UgeworCisJU3RyaW5nIG5hbWUgPSBudWxsOworCQorCUdFRGF0YSBnZWRhdGEgPSBudWxsOworCQorCS8qKgorCSAqIEBwYXJhbSBuYW1lCisJICovCisJcHVibGljIEdFRGF0YVRlc3QoU3RyaW5nIG5hbWUpIHsKKwkJc3VwZXIobmFtZSk7CisJCUdFTG9nLkRFQlVHID0gdHJ1ZTsKKwl9CisKKwkvKiAobm9uLUphdmFkb2MpCisJICogQHNlZSBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2Ujc2V0VXAoKQorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIHNldFVwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCXN1cGVyLnNldFVwKCk7CisJCW5hbWUgPSAiVGVzdCI7IC8vJE5PTi1OTFMtMSQgCisJCWRvdWJsZVtdW10gZCA9IHt7MC4wLCAwLDB9LAorCQkJCXsxMC4wLCAwLDB9LAorCQkJCXsxMC4wLCAxMCwwfSwKKwkJCQl7MC4wLCAxMCwwfSwKKwkJCQl7MC4wLCAwLDB9IH07CisJCVNlZ21lbnQgcyA9IG5ldyBTZWdtZW50KGQpOworCQlMYXRMb25nIHBvbHlnb24gPSBuZXcgTGF0TG9uZygpOworCQlwb2x5Z29uLmFkZChzKTsKKwkJZG91YmxlW11bXSBkMiA9IHt7MjAuMCwgMCwwfSwKKwkJCQl7MjAuMCwgMjAsMH0sCisJCQkJezQwLjAsIDAsMH0sCisJCQkJezIwLjAsIDAsMH0gfTsKKwkJU2VnbWVudCBzMiA9IG5ldyBTZWdtZW50KGQyKTsKKwkJcG9seWdvbi5hZGQoczIpOworCQlnZWRhdGEgPSBuZXcgR0VEYXRhKG5hbWUscG9seWdvbik7CisJfQorCisJLyogKG5vbi1KYXZhZG9jKQorCSAqIEBzZWUganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlI3RlYXJEb3duKCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgdm9pZCB0ZWFyRG93bigpIHRocm93cyBFeGNlcHRpb24geworCQlzdXBlci50ZWFyRG93bigpOworCX0KKworCS8qKgorCSAqIAorCSAqLworCXB1YmxpYyB2b2lkIHRlc3RHRURhdGEoKSB7CisJCUFzc2VydC5hc3NlcnROb3ROdWxsKCJzZXR1cCBmYWlsZWQuIixnZWRhdGEpOy8vJE5PTi1OTFMtMSQgCisJCUdFRGF0YSBnZWRhdGF4ID0gbmV3IEdFRGF0YSgiVGVzdEdFRGF0YSIsbnVsbCk7Ly8kTk9OLU5MUy0xJCAKKwkJaWYgKGdlZGF0YXggPT0gbnVsbCkgCisJCQlmYWlsKCJGYWlsZWQgdG8gY3JlYXRlIGEgR0VEYXRhIGluc3RhbmNlIik7Ly8kTk9OLU5MUy0xJCAKKwl9CisKKwkvKioKKwkgKiAKKwkgKi8KKwlwdWJsaWMgdm9pZCB0ZXN0R2V0Q29vcmRpbmF0ZXNBc1N0cmluZygpIHsKKwkJU3RyaW5nIGNvb3JkID0gZ2VkYXRhLmdldENvb3JkaW5hdGVzQXNTdHJpbmcoMCk7CisJCWlmIChjb29yZCA9PSBudWxsIHx8IGNvb3JkLmxlbmd0aCgpIDw9IDApCisJCQlmYWlsKCJmYWlsZWQgdG8gY3JlYXRlIGEgS01MIHN0cmluZyBvZiBDb29yZGluYXRlcy4iKTsvLyROT04tTkxTLTEkIAorCQlHRUxvZy5kZWJ1Zyh0aGlzLCIgY29vcmQ6ICIrY29vcmQpOy8vJE5PTi1OTFMtMSQgCisJfQorCisJLyoqCisJICogCisJICovCisJcHVibGljIHZvaWQgdGVzdEdldE51bUFyZWFzKCkgeworCQlhc3NlcnRUcnVlKGdlZGF0YS5nZXROdW1BcmVhcygpID09IDIpOworCX0KKworCS8qKgorCSAqIAorCSAqLworCXB1YmxpYyB2b2lkIHRlc3RHZXROYW1lKCkgeworCQlhc3NlcnRUcnVlKGdlZGF0YS5nZXROYW1lKCkuZXF1YWxzKCJUZXN0IikpOy8vJE5PTi1OTFMtMSQgCisJCWdlZGF0YS5zZXROYW1lKCJOZXdUZXN0Iik7Ly8kTk9OLU5MUy0xJCAKKwkJYXNzZXJ0VHJ1ZShnZWRhdGEuZ2V0TmFtZSgpLmVxdWFscygiTmV3VGVzdCIpKTsvLyROT04tTkxTLTEkIAorCX0KKworCS8qKgorCSAqIAorCSAqLworCXB1YmxpYyB2b2lkIHRlc3RTZXROYW1lKCkgeworCQlnZWRhdGEuc2V0TmFtZSgiVGVzdDIiKTsvLyROT04tTkxTLTEkIAorCQlhc3NlcnRUcnVlKGdlZGF0YS5nZXROYW1lKCkuZXF1YWxzKCJUZXN0MiIpKTsvLyROT04tTkxTLTEkIAorCX0KKworCS8qKgorCSAqIAorCSAqLworCXB1YmxpYyB2b2lkIHRlc3RHZXRJZCgpIHsKKwkJYXNzZXJ0VHJ1ZShnZWRhdGEuZ2V0SWQoKS5lcXVhbHMoIlRlc3QiKSk7Ly8kTk9OLU5MUy0xJCAKKwl9CisKKwkvKioKKwkgKiAKKwkgKi8KKwlwdWJsaWMgdm9pZCB0ZXN0U2V0SWQoKSB7CisJCWdlZGF0YS5zZXRJZCgiVGVzdDMiKTsvLyROT04tTkxTLTEkIAorCQlhc3NlcnRUcnVlKGdlZGF0YS5nZXRJZCgpLmVxdWFscygiVGVzdDMiKSk7Ly8kTk9OLU5MUy0xJCAKKwl9CisJLyoqIAorCSAqIAorCSAqLworCUBTdXBwcmVzc1dhcm5pbmdzKCJib3hpbmciKQorCXB1YmxpYyB2b2lkIHRlc3RTZXRWYWx1ZSgpIHsKKwkJQXNwZWN0IHRlc3RBc3BlY3QgPSBuZXcgQXNwZWN0KCJUIiwiVGVzdCIpOy8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJCAKKwkJZ2VkYXRhLnNldFZhbHVlKHRlc3RBc3BlY3QsIDAuNSk7CisJCWRvdWJsZSB2YWx1ZSA9IGdlZGF0YS5nZXRWYWx1ZSh0ZXN0QXNwZWN0KTsKKwkJYXNzZXJ0RXF1YWxzKHZhbHVlLDAuNSk7CisJfQorfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51aS5nZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9nZS9HRUludGVyZmFjZVRlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMudWkuZ2Uvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvZ2UvR0VJbnRlcmZhY2VUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTA1ODQ3NwotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMudWkuZ2Uvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvZ2UvR0VJbnRlcmZhY2VUZXN0LmphdmEKQEAgLTAsMCArMSwyMTQgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS51aS5nZTsKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLyAKK2ltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7CisKKy8qKgorICoKKyAqLworcHVibGljIGNsYXNzIEdFSW50ZXJmYWNlVGVzdCBleHRlbmRzIFRlc3RDYXNlICAgICAgeworCisJLyoqCisJICogQHBhcmFtIG5hbWUKKwkgKi8KKwlwdWJsaWMgR0VJbnRlcmZhY2VUZXN0KFN0cmluZyBuYW1lKSB7CisJCXN1cGVyKG5hbWUpOworCX0KKworCS8qIChub24tSmF2YWRvYykKKwkgKiBAc2VlIGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZSNzZXRVcCgpCisJICovCisJCisvLwlwcml2YXRlIFNjZW5hcmlvIHNjZW5hcmlvID0gbnVsbDsKKwkKKwkvKioKKwkgKiB0aGlzIGhhcyB0aGUga2V5IHBhcnQgY29tbWVudGVkIG91dC4KKwkgKiBUbyByZWVzdGFibGlzaCB0aGlzIHRlc3Qgd2UgbmVlZCB0byBiZSBhYmxlIHRvIGNyZWF0ZSBhIHRlc3Qgc2NlbmFyaW8uCisJICogV2UgbmVlZCB0byBrbm93IGhvdyB0byBkbyB0aGlzLgorCSAqIAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIHNldFVwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCXN1cGVyLnNldFVwKCk7CisvLwkJIFRoaXMgY3JlYXRlcyBhIHNjZW5hcmlvIHRoYXQncyByZWFkeSB0byBiZSAic3RlcHBlZCIgKGkuZS4sCisJCS8vIHNpbXVsYXRlZCkuIFRoZSB3b3JsZCBpcyBhIGxhdHRpY2UgKGdyaWQpIHRoYXQgMngyIHdoZXJlIGVhY2ggbm9kZQorCQkvLyBoYXMgYSBwb3B1bGF0aW9uIG9mIDEwMCBodW1hbnMgYW5kIGhhcyBhbiBhcmVhIG9mIDEwMCBzcXVhcmUKKwkJLy8ga2lsb21ldGVycy4gVGhlcmUgaXMgb25lIGRpc2Vhc2UgdGhhdCBpcyBtb2RlbGVkIHdpdGggYQorCQkvLyAiZGV0ZXJtaW5pc3RpYyBTRUlSIGRpc2Vhc2UgbW9kZWwiLiBPbmUgcGVyc29uIGluIHRoZSBub2RlIGF0CisJCS8vIHBvc2l0aW9uIFswXVswXSwgaW4gdGhlIHVwcGVyIGxlZnQgb2YgdGhlIGdyaWQsIGlzIGluZmVjdGVkLgorLy8JCXNjZW5hcmlvID0gRGV0ZXJtaW5pc3RpY1NFSVJTY2VuYXJpb1Rlc3QuY3JlYXRlU2NlbmFyaW8oMiwgMik7CisKKwkJLy8gVGhpcyB3aWxsIGluaXRpYWxpemUgdGhlIHNjZW5hcmlvIGFuZCBtYWtlIGl0IHJlYWR5IHRvIHN0ZXAgdGhyb3VnaAorCQkvLyB0aGUgc2ltdWxhdGlvbiBzZXF1ZW5jZS4gSW4gcGFydGljdWxhciwgaXQgd2lsbCBjcmVhdGUgdGhlIGNhbm5vbmljYWwKKwkJLy8gZ3JhcGggZnJvbSB0aGUgc2NlbmFyaW8ncyBtb2RlbC4KKy8vCQlzY2VuYXJpby5pbml0aWFsaXplKCk7CisKKwl9CisKKwkvKiAobm9uLUphdmFkb2MpCisJICogQHNlZSBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2UjdGVhckRvd24oKQorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIHRlYXJEb3duKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCXN1cGVyLnRlYXJEb3duKCk7CisJfQorCQorCQorCS8qKgorCSAqIFRlc3QgbWV0aG9kIGZvcgorCSAqIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLnVpLmdlLkdFSW50ZXJmYWNlI3NpbXVsYXRpb25zQ2hhbmdlZChvcmcuZWNsaXBzZS5zdGVtLmpvYnMuc2ltdWxhdGlvbi5TaW11bGF0aW9uTWFuYWdlckV2ZW50KX0uCisJICoKKwkgKiBUaGlzIHdpbGwgdGVzdCB0aGUgbWV0aG9kIHRoYXQgZ2V0cyBjb250cm9sIHdoZW4gYSAKKwkgKiBTaW11bGF0aW9uIHN0YXJ0cy4gCisJICogCisJICovCisJCisJcHVibGljIHZvaWQgdGVzdFNpbXVsYXRpb25zQ2hhbmdlZCgpIHsKKwkJLy8gVGhlIHNjZW5hcmlvIHdhcyBjcmVhdGVkIGluIHRoZSBzZXR1cCBtZXRob2QuCisJCSAKKwkJLy8gY3JlYXRlIGEgc2ltdWxhdGlvbgorLy8JCUlTaW11bGF0aW9uIHNpbXVsYXRpb24gPSBuZXcgU2ltdWxhdGlvbihzY2VuYXJpbyk7CisJCS8vIGNyZWF0ZSBhbiBpbnN0YW5jZSBvZiBHRUludGVyZmFjZSB0byB0ZXN0CQkKKy8vCQlHRUludGVyZmFjZSBnZWkgPSBuZXcgR0VJbnRlcmZhY2UobnVsbCk7CisgICAgICAgIC8vIGludm9rZSB0aGUgc2ltdWxhdGlvbnNDaGFuZ2VkIG1ldGhvZCB0bwkJCisJCS8vIHRlbGwgZ2VpIHRoYXQgYSBTaW11bGF0aW9uIGhhcyBiZWVuIGFkZGVkLgorLy8JCVNpbXVsYXRpb25NYW5hZ2VyIHNvdXJjZSA9IFNpbXVsYXRpb25NYW5hZ2VyLmdldE1hbmFnZXIoKTsKKy8vCQlJU2ltdWxhdGlvbltdIGFkZCA9IHtzaW11bGF0aW9ufTsKKy8vCQlJU2ltdWxhdGlvbltdIHJlbW92ZSA9IHt9OworLy8JCVNpbXVsYXRpb25NYW5hZ2VyRXZlbnQgc21ldmVudCA9IAorLy8JCQluZXcgU2ltdWxhdGlvbk1hbmFnZXJFdmVudChzb3VyY2UsYWRkLHJlbW92ZSk7CisvLwkJZ2VpLnNpbXVsYXRpb25zQ2hhbmdlZChzbWV2ZW50KTsKKwl9CisKKy8qKgorICogCisgKi8KKy8vCXB1YmxpYyB2b2lkIHRlc3RTdGFydFNlcnZlcigpIHsKKy8vCQlHRUludGVyZmFjZSBnZWkgPSBuZXcgR0VJbnRlcmZhY2UoKTsKKy8vCQlib29sZWFuIHN0YXJ0ZWQgPSBnZWkuc3RhcnRTZXJ2ZXIoKTsKKy8vCQlhc3NlcnRUcnVlKCJGYWlsZWQgdG8gc3RhcnQgd2ViIHNlcnZlci4iLHN0YXJ0ZWQpOworLy8JfQorCQorCXB1YmxpYyB2b2lkIHRlc3RTZXRBY3RpdmUoKSB7CisgICAgICAgLy8JCSBjcmVhdGUgYSBzaW11bGF0aW9uCisvLwkJSVNpbXVsYXRpb24gc2ltdWxhdGlvbiA9IG5ldyBTaW11bGF0aW9uKHNjZW5hcmlvKTsKKwkJLy8gY3JlYXRlIGFuIGluc3RhbmNlIG9mIEdFSW50ZXJmYWNlIHRvIHRlc3QJCQorLy8JCUdFSW50ZXJmYWNlIGdlaSA9IG5ldyBHRUludGVyZmFjZShudWxsKTsKKy8vCQlib29sZWFuIG9rID0gZ2VpLnNldEFjdGl2ZShzaW11bGF0aW9uLCB0cnVlKTsKKy8vCQlhc3NlcnRGYWxzZShvayk7CisJfQorCQorCS8qKgorCSAqIAorCSAqLworCXB1YmxpYyB2b2lkIHRlc3REaXNwbGF5TWFwKCkgeworCQlHRUxvZy5ERUJVRyA9IHRydWU7CisvLwkJIGNyZWF0ZSBhIHNpbXVsYXRpb24KKy8vCQlJU2ltdWxhdGlvbiBzaW11bGF0aW9uID0gbmV3IFNpbXVsYXRpb24oc2NlbmFyaW8pOworCQkvLyBjcmVhdGUgYW4gaW5zdGFuY2Ugb2YgR0VJbnRlcmZhY2UgdG8gdGVzdAkJCisvLwkJR0VJbnRlcmZhY2UgZ2VpID0gbmV3IEdFSW50ZXJmYWNlKG51bGwpOworLy8JCWJvb2xlYW4gb2sgPSBnZWkuZGlzcGxheU1hcChzaW11bGF0aW9uKTsKKy8vCQlhc3NlcnRUcnVlKG9rKTsKKwl9CisJCisJLyoqCisJICogVGVzdCBtZXRob2QgZm9yCisJICoge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0udWkuZ2UuR0VJbnRlcmZhY2Ujc2ltdWxhdGlvbnNDaGFuZ2VkKG9yZy5lY2xpcHNlLnN0ZW0uam9icy5zaW11bGF0aW9uLlNpbXVsYXRpb25NYW5hZ2VyRXZlbnQpfS4KKwkgKgorCSAqIFRoaXMgd2lsbCB0ZXN0IHRoZSBtZXRob2QgdGhhdCBnZXRzIGNvbnRyb2wgd2hlbiBhIAorCSAqIFNpbXVsYXRpb24gc2lnbmFscyBhIGNoYW5nZS4gSW4gb3VyIGNhc2Ugd2UgYXJlIGludGVyZXN0ZWQgaW4KKwkgKiB0aGUgIFNpbXVsYXRpb25TdGF0ZS5DT01QTEVURURfQ1lDTEUgZXZlbnQuCisJICogCisJICovCisvLwkKKy8vCXB1YmxpYyB2b2lkIHRlc3RTaW11bGF0aW9uQ2hhbmdlZCgpIHsKKy8vCQkKKy8vCQkvLyBjcmVhdGUgYSBzaW11bGF0aW9uCisvLwkJSVNpbXVsYXRpb24gc2ltdWxhdGlvbiA9IG5ldyBTaW11bGF0aW9uKHNjZW5hcmlvKTsKKy8vCQkvLyBjcmVhdGUgYW4gaW5zdGFuY2Ugb2YgR0VJbnRlcmZhY2UgdG8gdGVzdAkJCisvLwkJR0VJbnRlcmZhY2UgZ2VpID0gbmV3IEdFSW50ZXJmYWNlKG51bGwpOworLy8gICAgICAgIAorLy8JCS8vIHRlbGwgZ2VpIHRoYXQgYSBTaW11bGF0aW9uIGhhcyBiZWVuIGFkZGVkLgorLy8JCQorLy8JCWdlaS5zZXRBY3RpdmUoc2ltdWxhdGlvbix0cnVlKTsKKy8vCQkKKy8vCQkvLyBzZW5kIGEgc2ltdWxhdGlvbiBldmVudC4KKy8vCQlTaW11bGF0aW9uU3RhdGUgc3RhdGUgPSBTaW11bGF0aW9uU3RhdGUuQ09NUExFVEVEX0NZQ0xFOworLy8JCVNpbXVsYXRpb25FdmVudCBldmVudCA9IG5ldyBTaW11bGF0aW9uRXZlbnQoc2ltdWxhdGlvbixzdGF0ZSk7CisvLwkJCisvLwkJZ2VpLnNpbXVsYXRpb25DaGFuZ2VkKGV2ZW50KTsKKy8vCQkKKy8vCQkvLyBob3cgc2hvdWxkIEkgY2hlY2sgZm9yIHN1Y2Vzcz8/PworLy8JCQorLy8JfQorCit9CisKKy8vIG9sZCBzdHVmZiB0byBzYXZlCisvLy8qKgorLy8qIHByb3ZpZGUgbWV0aG9kcyBmb3IgU3RlbU1hcENvbnRlbnRQcm92aWRlciBpbXBsbWVudGF0aW9uCisvLyovCisvL3B1YmxpYyBpbnQgZ2V0QXNwZWN0KCkgeworLy8JcmV0dXJuIDM7CisvL30KKy8vCisvL3B1YmxpYyBNYXA8U3RyaW5nLEdFRGF0YT4gZ2V0U1RFTU1hcCgpIHsKKy8vCVN0cmluZyBuYW1lID0gIlVTLUFMLTAxMDAxIjsKKy8vCUFycmF5TGlzdDxDb29yZGluYXRlcz4gY29vcmQgPSBuZXcgQXJyYXlMaXN0PENvb3JkaW5hdGVzPigpOworLy8JZG91YmxlW10gcG9pbnRzID0gbmV3IGRvdWJsZVtdIHsKKy8vCQkJLTg2LjkxNjk1NiwzMi42NjQxNTgsIC04Ni44MTczNDQsMzIuNjYwMTUxLAorLy8JCQktODYuNzEzNDk1LDMyLjY2NzM4MiwgLTg2LjYyMDY2MywzMi43MDYyNiwKKy8vCQkJLTg2LjUyNDU5MywzMi43MDcwNTcsIC04Ni41MjQ1OTMsMzIuNzA3MDU3LAorLy8JCQktODYuNDY4MjAyLDMyLjcwNzg1NiwgLTg2LjQxNjE1OSwzMi43MDc0OCwKKy8vCQkJLTg2LjQxNTY0NywzMi43MDc0NjQsIC04Ni40MTMxMTYsMzIuNzA3Mzg2LAorLy8JCQktODYuNDEzMTE2LDMyLjcwNzM4NiwgLTg2LjQxMjU2NywzMi42MDczNDcsCisvLwkJCS04Ni40MTIzNzgsMzIuNTU3MDcxLCAtODYuNDEyMzQyLDMyLjUwMzYzNiwKKy8vCQkJLTg2LjQxMjA3MywzMi40OTI5MzQsIC04Ni40MTIwNzMsMzIuNDkyOTM0LAorLy8JCQktODYuNDExOTczLDMyLjQ5MTYzNCwgLTg2LjQxMTk3MywzMi40OTE2MzQsCisvLwkJCS04Ni40MTE5NzMsMzIuNDg5MzU1LCAtODYuNDExOTczLDMyLjQ4NTgzNSwKKy8vCQkJLTg2LjQxMTc3MywzMi40NjU3MzUsIC04Ni40MTExNzIsMzIuNDA5OTM3LAorLy8JCQktODYuNDExMTcyLDMyLjQwOTkzNywgLTg2LjQxNjQ3MiwzMi40MDcwMzcsCisvLwkJCS04Ni40NDQ3ODUsMzIuMzk5ODYsIC04Ni40NjM1NjQsMzIuMzc3Mjg4LAorLy8JCQktODYuNDk2Nzc0LDMyLjM0NDQzOCwgLTg2LjQ5Njc3NCwzMi4zNDQ0MzgsCisvLwkJCS04Ni41MzU2NjgsMzIuMzQwNDQsIC04Ni41NDIxNiwzMi4zNjE0MTcsCisvLwkJCS04Ni43MDk3MTYsMzIuMzYwNCwgLTg2Ljc4MjM3NywzMi4zNzMzNzUsCisvLwkJCS04Ni43ODQzNTUsMzIuMzI0NDA4LCAtODYuODE0OTEyLDMyLjM0MDgwMywKKy8vCQkJLTg2LjgxNDkxMiwzMi4zNDA4MDMsIC04Ni44NDMwOTYsMzIuNDMyODE0LAorLy8JCQktODYuODY2NjA3LDMyLjQ0MDExNCwgLTg2LjkwMDUxOSwzMi41NTYwNTQsCisvLwkJCS04Ni45MTY5NTYsMzIuNjY0MTU4IH07CisvLwkKKy8vCWZvciAoaW50IGk9MDsgaTxwb2ludHMubGVuZ3RoO2krKykgeworLy8JICAgIENvb3JkaW5hdGVzIGMgPSBuZXcgQ29vcmRpbmF0ZXMocG9pbnRzW2ldLHBvaW50c1tpKzFdKTsKKy8vCSAgICBpKys7CisvLwkgICAgY29vcmQuYWRkKGMpOworLy8JfQorLy8JCisvLwkKKy8vCQorLy8JR0VEYXRhIGxvYyA9bmV3IEdFRGF0YShuYW1lLGNvb3JkKTsKKy8vCU1hcDxTdHJpbmcsR0VEYXRhPiBtYXAgPSBuZXcgSGFzaE1hcDxTdHJpbmcsR0VEYXRhPigxMDI0KTsKKy8vCW1hcC5wdXQobmFtZSxsb2MpOworLy8JcmV0dXJuIG1hcDsKKy8vfQorLy8KKy8vcHVibGljIE1hcDxTdHJpbmcsQ29sb3I+IGdldENvbG9ycygpIHsKKy8vCVN0cmluZyBuYW1lID0gIlVTLUFMLTAxMDAxIjsKKy8vCU1hcDxTdHJpbmcsQ29sb3I+IGNvbG9yTWFwID0gbmV3IEhhc2hNYXA8U3RyaW5nLENvbG9yPigxMDI0KTsKKy8vCUNvbG9yIGMgPSBDb2xvci5ibHVlOworLy8JY29sb3JNYXAucHV0KG5hbWUsYyk7CisvLwlyZXR1cm4gY29sb3JNYXA7CisvL30KKy8vCisvL3ByaXZhdGUgbG9uZyBjeWNsZSA9IC0xOworLy9wdWJsaWMgbG9uZyBnZXRDeWNsZSgpIHsKKy8vCWN5Y2xlKys7CisvLwlyZXR1cm4gY3ljbGU7IAorLy99CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnVpLmdlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL2dlL0dFTG9nVGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51aS5nZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9nZS9HRUxvZ1Rlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YWFmMTNlCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51aS5nZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9nZS9HRUxvZ1Rlc3QuamF2YQpAQCAtMCwwICsxLDkyIEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0udWkuZ2U7CisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8gCitpbXBvcnQganVuaXQuZnJhbWV3b3JrLkFzc2VydDsKK2ltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7CisKKy8qKgorICogdGVzdGNhc2UgZm9yIEdFTE9HCisgKgorICovCitwdWJsaWMgY2xhc3MgR0VMb2dUZXN0IGV4dGVuZHMgVGVzdENhc2UgeworCisJLyoqCisJICogQHBhcmFtIG5hbWUKKwkgKi8KKwlwdWJsaWMgR0VMb2dUZXN0KFN0cmluZyBuYW1lKSB7CisJCXN1cGVyKG5hbWUpOworCX0KKworCS8qIChub24tSmF2YWRvYykKKwkgKiBAc2VlIGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZSNzZXRVcCgpCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgc2V0VXAoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJc3VwZXIuc2V0VXAoKTsKKwl9CisKKwkvKiAobm9uLUphdmFkb2MpCisJICogQHNlZSBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2UjdGVhckRvd24oKQorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIHRlYXJEb3duKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCXN1cGVyLnRlYXJEb3duKCk7CisJfQorCisJLyoqCisJICogCisJICovCisJcHVibGljIHZvaWQgdGVzdExvZ09uKCkgeworCQlHRUxvZy5ERUJVRz10cnVlOworCQlHRUxvZy5kZWJ1Zyh0aGlzLmdldENsYXNzKCksIkRFQlVHIG9wdGlvbiB0dXJuZWQgT04iKTsvLyROT04tTkxTLTEkIAorCQlHRUxvZy5kZWJ1ZygidGVzdCBtc2ciKTsvLyROT04tTkxTLTEkIAorCQlBc3NlcnQuYXNzZXJ0VHJ1ZShHRUxvZy5ERUJVRyk7CisJfQorCS8qKgorCSAqIAorCSAqLworCXB1YmxpYyB2b2lkIHRlc3RMb2dEZWJ1ZygpIHsKKwkJR0VMb2cuREVCVUc9dHJ1ZTsKKwkJR0VMb2cuZGVidWcodGhpcy5nZXRDbGFzcygpLCJWZXJpZnk6IEdFTG9nVGVzdDogIik7Ly8kTk9OLU5MUy0xJCAKKwkJR0VMb2cuZGVidWcodGhpcywiVmVyaWZ5OiBHRUxvZ1Rlc3Q6ICIpOy8vJE5PTi1OTFMtMSQgCisJCUdFTG9nLmRlYnVnKCJHRUxvZ1Rlc3QudGVzdExvZyIsIlZlcmlmeTogR0VMb2dUZXN0LnRlc3RMb2c6ICIpOy8vJE5PTi1OTFMtMSQvLyROT04tTkxTLTIkICAKKwkJQXNzZXJ0LmFzc2VydFRydWUoR0VMb2cuREVCVUcpOworCQorCX0KKwkvKioKKwkgKiAKKwkgKi8KKwlwdWJsaWMgdm9pZCB0ZXN0TG9nRXJyb3IoKSB7CisJCUdFTG9nLkRFQlVHPXRydWU7CisJCUdFTG9nLmVycm9yKCJHRUxvZ1Rlc3Q6IGVycm9yICIsbnVsbCk7Ly8kTk9OLU5MUy0xJCAKKwkJCisJfQorCS8qKgorCSAqIAorCSAqLworCXB1YmxpYyB2b2lkIHRlc3RMb2dJbmZvKCkgeworCQlHRUxvZy5ERUJVRz10cnVlOworCQlHRUxvZy5pbmZvKCJHRUxvZ1Rlc3Q6IGluZm8gIik7Ly8kTk9OLU5MUy0xJCAKKwkJCisJfQorCisJLyoqCisJICogCisJICovCisJcHVibGljIHZvaWQgdGVzdExvZ09GRigpIHsJCisJCUdFTG9nLmRlYnVnKHRoaXMsIkRFQlVHIG9wdGlvbiB3aWxsIGJlIHR1cm5lZCBPRkYiKTsvLyROT04tTkxTLTEkIAorCQlHRUxvZy5ERUJVRz1mYWxzZTsKKwkJR0VMb2cuZGVidWcodGhpcywiREVCVUcgb3B0aW9uIHR1cm5lZCBPRkYiKTsvLyROT04tTkxTLTEkIAorCQlBc3NlcnQuYXNzZXJ0RmFsc2UoR0VMb2cuREVCVUcpOworCX0KKwkKK30KKwpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51aS5nZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9nZS9TbGlkZVNob3dTZXJ2bGV0VGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51aS5nZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9nZS9TbGlkZVNob3dTZXJ2bGV0VGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhmOGM4OTUKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnVpLmdlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL2dlL1NsaWRlU2hvd1NlcnZsZXRUZXN0LmphdmEKQEAgLTAsMCArMSwxMjYgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS51aS5nZTsKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLyAKKy8vaW1wb3J0IGphdmEuaW8uRmlsZTsKKworLy9pbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS51aS5nZS5zZXJ2bGV0LlNsaWRlU2hvd0luZm87CisvL2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnVpLmdlLnNlcnZsZXQuU2xpZGVTaG93U2VydmxldDsKKworCitpbXBvcnQganVuaXQuZnJhbWV3b3JrLkFzc2VydDsKK2ltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnVpLmdlLnNlcnZsZXQuVmVyaWZ5Q2xpZW50OworCisvKioKKyAqIHRlc3QgZm9yIHRoZSBTbGlkZVNob3dTZXJ2bGV0CisgKiAKKyAqIEN1cnJlbnRseSB0aGlzIHJlcXVpcmVzIHRoYXQgdGhlIGV4dGVybmFsIFRvbWNhdCB3ZWJzZXJ2ZXIgCisgKiBpcyBhdmFpbGFibGUgYXQgbG9jYWxob3N0OjgwODAgIAorICogCisgKiBJdCBjb3VsZCBiZSByZWRvbmUgdG8gdXNlIHRoZSBlbWJlZGRlZCB3ZWIgc2VydmVyIHN1cHBvcnQgCisgKiB0byB2ZXJpZnkgdGhhdCB0aGUgc2VydmxldHMgd29yay4KKyAqCisgKi8KK3B1YmxpYyBjbGFzcyBTbGlkZVNob3dTZXJ2bGV0VGVzdCBleHRlbmRzIFRlc3RDYXNlIHsKKwkvKioKKwkgKiBpbmZvIAorCSAqLworLy8JcHVibGljIFNsaWRlU2hvd0luZm8gaW5mbyA9IG51bGw7CisJCisJVmVyaWZ5Q2xpZW50IHZjID0gbnVsbDsKKwkvKioKKwkgKiBAcGFyYW0gbmFtZQorCSAqLworCXB1YmxpYyBTbGlkZVNob3dTZXJ2bGV0VGVzdChTdHJpbmcgbmFtZSkgeworCQlzdXBlcihuYW1lKTsKKwl9CisKKwkvKiAobm9uLUphdmFkb2MpCisJICogQHNlZSBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2Ujc2V0VXAoKQorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIHNldFVwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCQorCQlzdXBlci5zZXRVcCgpOworLy8JCWluZm8gPSBuZXcgU2xpZGVTaG93SW5mbygia2V5IiwiZTpcXHRtcFxcZ2UiLGZhbHNlLG51bGwpOworCQl2YyA9IG5ldyBWZXJpZnlDbGllbnQoKTsKKwl9CisKKwkvKiAobm9uLUphdmFkb2MpCisJICogQHNlZSBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2UjdGVhckRvd24oKQorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIHRlYXJEb3duKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCXN1cGVyLnRlYXJEb3duKCk7CisJfQorCisJLyoqCisJICogVGVzdCBtZXRob2QgCisJICovCisJcHVibGljIHZvaWQgdGVzdEdldEZpbGVzKCkgeworLy8JCUZpbGVbXSBmaWxlcyA9IG51bGw7CisvLwkJU2xpZGVTaG93U2VydmxldCB0ZXN0ID0gbmV3IFNsaWRlU2hvd1NlcnZsZXQoKTsKKy8vCQlmaWxlcyA9IHRlc3QuZ2V0RmlsZXMoaW5mbyk7CisvLwkJaWYgKGZpbGVzID09IG51bGwpCisvLwkJICAgZmFpbCgiZ2V0RmlsZXMgcmV0dXJuZWQgbnVsbCIpOworLy8JCWZvciAoaW50IGk9MDsgaTxmaWxlcy5sZW5ndGg7IGkrKykgeworLy8JCQlTeXN0ZW0ub3V0LnByaW50bG4oImZpbGU6ICIraSsiICIrZmlsZXNbaV0uZ2V0TmFtZSgpKTsKKy8vCQl9CisJCQorCX0KKworLy8JLyoqCisvLwkgKiBWZXJpZnkgdGhhdCB0aGUgd2Vic2VydmVyIGlzIGFjdGl2ZSBhbmQgCisvLwkgKiB0aGUgdmVyaWZ5U2VydmxldCBpcyBkZXBsb3llZCAKKy8vCSAqLworLy8JcHVibGljIHZvaWQgdGVzdFZlcmlmeSgpIHsKKy8vCQlTdHJpbmcgdXJsID0gImh0dHA6Ly9sb2NhbGhvc3Q6ODA4MC9TbGlkZVNob3cvdmVyaWZ5IjsKKy8vCQkKKy8vCQlib29sZWFuIHJlc3VsdCA9IHZjLnZlcmlmeSh1cmwpOworLy8JCUFzc2VydC5hc3NlcnRUcnVlKHZjLmdldEVycm9yKCkscmVzdWx0KTsKKy8vCX0KKworCS8qKgorCSAqIFZlcmlmeSB0aGF0IHdoZW4gdGhlIHdlYnNlcnZlciBpcyBhY3RpdmUgYnV0IHRoZSAgCisJICogdGhlIHZlcmlmeVNlcnZsZXQgaXMgbm90IGRlcGxveWVkIHdlIGdldCBhbiBlcnJvciAKKwkgKiBXZSB3aWxsIHRlc3QgZm9yIHRoaXMgYnkgdXNpbmcgYW4gaW52YWxpZCBzZXJ2bGV0IG5hbWUKKwkgKi8KKwlwdWJsaWMgdm9pZCB0ZXN0VmVyaWZ5MSgpIHsKKwkJU3RyaW5nIHVybCA9ICJodHRwOi8vbG9jYWxob3N0OjgwODAvU2xpZGVTaG93L3ZlcmlmeTEiOworCQlib29sZWFuIHJlc3VsdCA9IHZjLnZlcmlmeSh1cmwpOworCQkKKwkJaWYgKHJlc3VsdCB8fCAhIHZjLmdldEVycm9yKCkuc3RhcnRzV2l0aCgiRVhDRVBUSU9OIikpCisJCSAgIEFzc2VydC5mYWlsKHZjLmdldEVycm9yKCkpOworCX0KKwkvKioKKwkgKiBWZXJpZnkgdGhhdCB3aGVuIHRoZSB3ZWJzZXJ2ZXIgaXMgbm90IGFjdGl2ZSB3ZSAKKwkgKiBnZXQgYW4gZXJyb3IgbXNnCisJICogV2Ugd2lsbCB0ZXN0IHRoaXMgYnkgc3BlY2lmaW5nIGFuIGludmFsaWQgcG9ydAorCSAqLworCXB1YmxpYyB2b2lkIHRlc3RWZXJpZnkyKCkgewkKKwkJU3RyaW5nIHVybCA9ICJodHRwOi8vbG9jYWxob3N0OjU1NTUvU2xpZGVTaG93L3ZlcmlmeSI7CQkKKwkJYm9vbGVhbiByZXN1bHQgPSB2Yy52ZXJpZnkodXJsKTsKKwkJaWYgKHJlc3VsdCB8fCAhIHZjLmdldEVycm9yKCkuc3RhcnRzV2l0aCgiRVhDRVBUSU9OIikpCisJCQkgICBBc3NlcnQuZmFpbCh2Yy5nZXRFcnJvcigpKTsKKwkJCisJfQorCS8qKgorCSAqIFZlcmlmeSB0aGF0IHdlIGdldCBhbiBlcnJvciBmb3IgYW4gaW52YWxpZCBVUkwKKwkgKi8KKwlwdWJsaWMgdm9pZCB0ZXN0VmVyaWZ5MygpIHsJCisJCVN0cmluZyB1cmwgPSAibG9jYWxob3N0OjU1NTUvU2xpZGVTaG93L3ZlcmlmeSI7CQkKKwkJYm9vbGVhbiByZXN1bHQgPSB2Yy52ZXJpZnkodXJsKTsKKwkJaWYgKHJlc3VsdCB8fCAhIHZjLmdldEVycm9yKCkuc3RhcnRzV2l0aCgiRVJST1IiKSkKKwkJCSAgIEFzc2VydC5mYWlsKHZjLmdldEVycm9yKCkpOworCQkKKwl9Cit9CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnVpLmdlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL2dlL2ttbC9TdGVtS21sVGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51aS5nZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9nZS9rbWwvU3RlbUttbFRlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYzg2NTU0Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51aS5nZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9nZS9rbWwvU3RlbUttbFRlc3QuamF2YQpAQCAtMCwwICsxLDcyIEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0udWkuZ2Uua21sOworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovIAoraW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKKworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udWkuZ2UuR0VMb2c7CisKKy8qKgorICoKKyAqLworcHVibGljIGNsYXNzIFN0ZW1LbWxUZXN0IGV4dGVuZHMgVGVzdENhc2UgeworCisJLyoqCisJICogQHBhcmFtIG5hbWUKKwkgKi8KKwlwdWJsaWMgU3RlbUttbFRlc3QoU3RyaW5nIG5hbWUpIHsKKwkJc3VwZXIobmFtZSk7CisJfQorCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgc2V0VXAoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJc3VwZXIuc2V0VXAoKTsKKwl9CisKKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgdm9pZCB0ZWFyRG93bigpIHRocm93cyBFeGNlcHRpb24geworCQlzdXBlci50ZWFyRG93bigpOworCX0KKworCS8qKgorCSAqIHRlc3Qgc3RhcnR1cCBvZiBlbWJlZGRlZCB3ZWIgc2VydmVyCisJICogVGVzdCBtdXN0IHJ1biBhcyBKVW5pdCBwbHVnaW4gdGVzdAorCSAqIFRoaXMgd2lsbCB0ZXN0IGJvdGggdGhlIGNvZGUgdG8gc3RhcnQgdGhlIAorCSAqIHdlYiBzZXJ2ZXIgYnV0IGFsc28gdGhlIGRlcGxveW1lbnQgb2YgdGhlIAorCSAqIHNlcnZsZXRzLiAKKwkgKiAKKwkgKiBUaGUgcmVzdWx0IG9mIHRoZSB0ZXN0IHNob3VsZCBiZSB0aGF0IGEgCisJICogc21hbGwgcG5nIGltYWdlIHdpdGggdGV4dCAiRGVmYXVsdCIgCisJICogd2lsbCBiZSBkaXNwbGF5ZWQgb24geW91ciBicm93c2VyLgorCSAqIAorCSAqLworICAgcHVibGljIHZvaWQgdGVzdHN0YXJ0V2ViU2VydmVyKCkgeworCSAgR0VMb2cuREVCVUcgPSB0cnVlOworCSAgLy8gVE9ETyB0aGlzIGNvZGUgbmVlZHMgdG8gYmUgdXBkYXRlZC4gVGhlIFN0ZW1LbWwuc3RhcnRXZWJTZXJ2ZXIoKSBpcyB2ZXJ5IGRlcHJlY2F0ZWQuLi4KKy8vICAgCSAgdHJ5IHsKKy8vCQlTdHJpbmcgdXJsc3RyID0gU3RlbUttbC5zdGFydFdlYlNlcnZlcigpOworLy8JCSAgaWYgKHVybHN0ciA9PSBudWxsIHx8IHVybHN0ci5sZW5ndGgoKSA8PSAwKQorLy8JCQkJZmFpbCgiZmFpbGVkIHRvIHN0YXJ0IHRoZSBpbnRlcm5hbCB3ZWIgc2VydmVyLiIpOyAvLyROT04tTkxTLTEkCisvLwkJICB1cmxzdHIgPSB1cmxzdHIrIi8iKyJTbGlkZVNob3ciKyIvIisiaW1hZ2UiOyAvLyROT04tTkxTLTQkCisvLwkJICBVUkwgdXJsID0gbmV3IFVSTCh1cmxzdHIpOworLy8JCSAgR0VMb2cuZGVidWcodGhpcywiVVJMOiAiK3VybC50b1N0cmluZygpKTsKKy8vCQkgIFN0ZW1LbWwubGF1bmNoKHVybHN0cik7CisvLwkJICB0cnkgeworLy8JICAgICAgICAgICAgVGhyZWFkLnNsZWVwKDIwKjEwMDApOworLy8JICAgICAgfSAgY2F0Y2ggKEludGVycnVwdGVkRXhjZXB0aW9uIGUpIHsKKy8vCSAgICAgICAgICAgIC8vIElnbm9yZWQuCisvLwkgICAgICB9CisvLwkgIH0gY2F0Y2ggKE1hbGZvcm1lZFVSTEV4Y2VwdGlvbiBlKSB7CisvLwkJZS5wcmludFN0YWNrVHJhY2UoKTsKKy8vCQlmYWlsKCJFeGNlcHRpb24gc3RhcnRpbmcgZW1iZWRkZWQgc2VydmVyIik7CisvLwkgIH0KKyAgIAkgIAorICAgfQorfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51aS5nZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9nZS92aWV3cy9HRVByZWZlcmVuY2VQYWdlVGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51aS5nZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9nZS92aWV3cy9HRVByZWZlcmVuY2VQYWdlVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY5NWI4ZmIKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnVpLmdlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL2dlL3ZpZXdzL0dFUHJlZmVyZW5jZVBhZ2VUZXN0LmphdmEKQEAgLTAsMCArMSwxMzYgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS51aS5nZS52aWV3czsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovIAorCitpbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOworCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS51aS5nZS5HRUxvZzsKKworLyoqCisgKiBUZXN0IG9mIHRoZSBHRVByZWZlcmVuYyBQYWdlCisgKiAKKyAqIFRoaXMgdGVzdGNhc2UgbXVzdCBydW4gYXMgYSBKVW5pdCBQbHVnaW5UZXN0LgorICoKKyAqLworcHVibGljIGNsYXNzIEdFUHJlZmVyZW5jZVBhZ2VUZXN0IGV4dGVuZHMgVGVzdENhc2UgeworCisJLyoqCisJICogQHBhcmFtIG5hbWUKKwkgKi8KKwlwdWJsaWMgR0VQcmVmZXJlbmNlUGFnZVRlc3QoU3RyaW5nIG5hbWUpIHsKKwkJc3VwZXIobmFtZSk7CisJfQorCisJLyogKG5vbi1KYXZhZG9jKQorCSAqIEBzZWUganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlI3NldFVwKCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgdm9pZCBzZXRVcCgpIHRocm93cyBFeGNlcHRpb24geworCQlzdXBlci5zZXRVcCgpOworCQlHRUxvZy5ERUJVRyA9IHRydWU7CisJfQorCisJLyogKG5vbi1KYXZhZG9jKQorCSAqIEBzZWUganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlI3RlYXJEb3duKCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgdm9pZCB0ZWFyRG93bigpIHRocm93cyBFeGNlcHRpb24geworCQlzdXBlci50ZWFyRG93bigpOworCX0KKworCS8qKgorCSAqIFRlc3QgbWV0aG9kIGZvciB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS51aS5nZS52aWV3cy5HRVByZWZlcmVuY2VQYWdlI2dldEZvbGRlcigpfS4KKwkgKi8KKwlwdWJsaWMgdm9pZCB0ZXN0R2V0Rm9sZGVyKCkgeworCQlTdHJpbmcgZm9sZGVyID0gR0VQcmVmZXJlbmNlUGFnZS5nZXRGb2xkZXIoKTsKKwkJaWYgKGZvbGRlciA9PSBudWxsKQorCQkgIGZhaWwoIlJldHVybmVkIG51bGwgZnJvbSBnZXRGb2xkZXIoKSIpOy8vJE5PTi1OTFMtMSQgCisJfQorCisJLyoqCisJICogVGVzdCBtZXRob2QgZm9yIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLnVpLmdlLnZpZXdzLkdFUHJlZmVyZW5jZVBhZ2Ujc2V0Rm9sZGVyKGphdmEubGFuZy5TdHJpbmcpfS4KKwkgKi8KKwlwdWJsaWMgdm9pZCB0ZXN0U2V0Rm9sZGVyKCkgeworCQlHRVByZWZlcmVuY2VQYWdlLnNldEZvbGRlcigiYzovdG1wIik7Ly8kTk9OLU5MUy0xJCAKKwkJU3RyaW5nIGZvbGRlciA9IEdFUHJlZmVyZW5jZVBhZ2UuZ2V0Rm9sZGVyKCk7CisJCWlmICghICJjOi90bXAiLmVxdWFscyhmb2xkZXIpKSB7Ly8kTk9OLU5MUy0xJCAKKwkJCWZhaWwoInNldEZvbGRlciBmYWlsZWQuIik7Ly8kTk9OLU5MUy0xJCAKKwkJfQorCX0KKworCisJLyoqCisJICogVGVzdCBtZXRob2QgZm9yIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLnVpLmdlLnZpZXdzLkdFUHJlZmVyZW5jZVBhZ2UjZ2V0QXNwZWN0KCl9LgorCSAqLworLy8JcHVibGljIHZvaWQgdGVzdEdldEFzcGVjdCgpIHsKKy8vCQlBc3BlY3QgYXNwZWN0ID0gR0VQcmVmZXJlbmNlUGFnZS5nZXRBc3BlY3QoKTsKKy8vICAgICAgVGhpcyBjYW4gcmV0dXJuIG51bGwJCQorLy8JCUFzc2VydC5hc3NlcnROb3ROdWxsKCJJbnZhbGlkIEFzcGVjdCIsYXNwZWN0KTsKKy8vCX0KKworCS8qKgorCSAqIFRlc3QgbWV0aG9kIGZvciB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS51aS5nZS52aWV3cy5HRVByZWZlcmVuY2VQYWdlI2dldFNlcnZlckhvc3QoKX0uCisJICovCisJCisJcHVibGljIHZvaWQgdGVzdEdldFNlcnZlckhvc3QoKSB7CisJCVN0cmluZyBleHBlY3RlZCA9ICJsb2NhbGhvc3Q6ODA4MCI7Ly8kTk9OLU5MUy0xJCAKKwkJU3RyaW5nIGhvc3QgPSBHRVByZWZlcmVuY2VQYWdlLmdldFNlcnZlckhvc3QoKTsKKwkJaWYgKCEgZXhwZWN0ZWQuZXF1YWxzKGhvc3QpKSB7CisJCQlmYWlsKCJnZXRTZXJ2ZXJIb3N0IGZhaWxlZC4iKTsvLyROT04tTkxTLTEkIAorCQl9CisJfQorCisJLyoqCisJICogVGVzdCBtZXRob2QgZm9yIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLnVpLmdlLnZpZXdzLkdFUHJlZmVyZW5jZVBhZ2UjaXNBdXRvTGF1bmNoKCl9LgorCSAqLworCXB1YmxpYyB2b2lkIHRlc3RnZXRNZXRob2QoKSB7CisJCWludCBleHBlY3RlZCA9IEdFUHJlZmVyZW5jZVBhZ2UuTV9NQU5VQUxfRElTUExBWTsKKwkJaW50IHRlc3QgPSBHRVByZWZlcmVuY2VQYWdlLmdldE1ldGhvZCgpOworCQlpZiAoIGV4cGVjdGVkICE9IHRlc3QgKSB7CisJCQlmYWlsKCJnZXRNZXRob2QoKSBmYWlsZWQuIik7Ly8kTk9OLU5MUy0xJCAKKwkJfQorCX0KKworCS8qKgorCSAqIFRlc3QgbWV0aG9kIGZvciB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS51aS5nZS52aWV3cy5HRVByZWZlcmVuY2VQYWdlI2lzSW50ZXJuYWxTZXJ2ZXIoKX0uCisJICovCisJcHVibGljIHZvaWQgdGVzdElzSW50ZXJuYWxTZXJ2ZXIoKSB7CisJCWJvb2xlYW4gZXhwZWN0ZWQgPSB0cnVlOworCQlib29sZWFuIHRlc3QgPSBHRVByZWZlcmVuY2VQYWdlLmlzSW50ZXJuYWxTZXJ2ZXIoKTsKKwkJaWYgKGV4cGVjdGVkICE9IHRlc3QpIHsKKwkJCWZhaWwoIklzSW50ZXJuYWxTZXJ2ZXIoKSBmYWlsZWQuIik7Ly8kTk9OLU5MUy0xJCAKKwkJfQorCX0KKworCS8qKgorCSAqIFRlc3QgbWV0aG9kLgorCSAqLworCXB1YmxpYyB2b2lkIHRlc3RJc0F1dG9OZXR3b3JrTGluaygpIHsKKwkJYm9vbGVhbiBleHBlY3RlZCA9IHRydWU7CisJCWJvb2xlYW4gdGVzdCA9IEdFUHJlZmVyZW5jZVBhZ2UuaXNBdXRvTGF1bmNoKCk7CisJCWlmIChleHBlY3RlZCAhPSB0ZXN0KSB7CisJCQlmYWlsKCJJc0F1dG9MYXVuY2goKSBmYWlsZWQuIik7Ly8kTk9OLU5MUy0xJCAKKwkJfQorCX0KKworCS8qKgorCSAqIFRlc3QgbWV0aG9kIGZvciB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS51aS5nZS52aWV3cy5HRVByZWZlcmVuY2VQYWdlI2dldFdoaWNoQ3ljbGUoKX0uCisJICovCisJcHVibGljIHZvaWQgdGVzdEdldFdoaWNoQ3ljbGUoKSB7CisJCWludCBleHBlY3RlZCA9IDE7CisJCWludCB0ZXN0ID0gR0VQcmVmZXJlbmNlUGFnZS5nZXRXaGljaEN5Y2xlKCk7CisJCWlmIChleHBlY3RlZCAhPSB0ZXN0KSB7CisJCQlmYWlsKCJHZXRXaGljaEN5Y2xlKCkgZmFpbGVkLiIpOy8vJE5PTi1OTFMtMSQgCisJCX0KKwl9CisKK30KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMudWkvLmNsYXNzcGF0aCBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMudWkvLmNsYXNzcGF0aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMDRlODYxCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51aS8uY2xhc3NwYXRoCkBAIC0wLDAgKzEsNyBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxjbGFzc3BhdGg+CisJPGNsYXNzcGF0aGVudHJ5IGtpbmQ9InNyYyIgcGF0aD0ic3JjIi8+CisJPGNsYXNzcGF0aGVudHJ5IGtpbmQ9ImNvbiIgcGF0aD0ib3JnLmVjbGlwc2UuamR0LmxhdW5jaGluZy5KUkVfQ09OVEFJTkVSL29yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC5kZWJ1Zy51aS5sYXVuY2hlci5TdGFuZGFyZFZNVHlwZS9KMlNFLTEuNSIvPgorCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJjb24iIHBhdGg9Im9yZy5lY2xpcHNlLnBkZS5jb3JlLnJlcXVpcmVkUGx1Z2lucyIvPgorCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJvdXRwdXQiIHBhdGg9ImJpbiIvPgorPC9jbGFzc3BhdGg+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnVpLy5wcm9qZWN0IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51aS8ucHJvamVjdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hOGRlNTdmCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51aS8ucHJvamVjdApAQCAtMCwwICsxLDI4IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPHByb2plY3REZXNjcmlwdGlvbj4KKwk8bmFtZT5vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnVpPC9uYW1lPgorCTxjb21tZW50PjwvY29tbWVudD4KKwk8cHJvamVjdHM+CisJPC9wcm9qZWN0cz4KKwk8YnVpbGRTcGVjPgorCQk8YnVpbGRDb21tYW5kPgorCQkJPG5hbWU+b3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YWJ1aWxkZXI8L25hbWU+CisJCQk8YXJndW1lbnRzPgorCQkJPC9hcmd1bWVudHM+CisJCTwvYnVpbGRDb21tYW5kPgorCQk8YnVpbGRDb21tYW5kPgorCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLk1hbmlmZXN0QnVpbGRlcjwvbmFtZT4KKwkJCTxhcmd1bWVudHM+CisJCQk8L2FyZ3VtZW50cz4KKwkJPC9idWlsZENvbW1hbmQ+CisJCTxidWlsZENvbW1hbmQ+CisJCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuU2NoZW1hQnVpbGRlcjwvbmFtZT4KKwkJCTxhcmd1bWVudHM+CisJCQk8L2FyZ3VtZW50cz4KKwkJPC9idWlsZENvbW1hbmQ+CisJPC9idWlsZFNwZWM+CisJPG5hdHVyZXM+CisJCTxuYXR1cmU+b3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YW5hdHVyZTwvbmF0dXJlPgorCQk8bmF0dXJlPm9yZy5lY2xpcHNlLnBkZS5QbHVnaW5OYXR1cmU8L25hdHVyZT4KKwk8L25hdHVyZXM+Cis8L3Byb2plY3REZXNjcmlwdGlvbj4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMudWkvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51aS8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2IzZjc2ZgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMudWkvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzCkBAIC0wLDAgKzEsNTcgQEAKKyNNb24gSmFuIDIxIDEyOjQ5OjM3IEVTVCAyMDA4CitlY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29kZWdlbi50YXJnZXRQbGF0Zm9ybT0xLjUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvbXBsaWFuY2U9MS41CitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmFubm90YXRpb25TdXBlckludGVyZmFjZT13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmFzc2VydElkZW50aWZpZXI9ZXJyb3IKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uYXV0b2JveGluZz13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRlcHJlY2F0aW9uPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZGVwcmVjYXRpb25JbkRlcHJlY2F0ZWRDb2RlPWRpc2FibGVkCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRlcHJlY2F0aW9uV2hlbk92ZXJyaWRpbmdEZXByZWNhdGVkTWV0aG9kPWRpc2FibGVkCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRpc2NvdXJhZ2VkUmVmZXJlbmNlPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZW1wdHlTdGF0ZW1lbnQ9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5lbnVtSWRlbnRpZmllcj1lcnJvcgorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5mYWxsdGhyb3VnaENhc2U9aWdub3JlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZpZWxkSGlkaW5nPWlnbm9yZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5maW5hbFBhcmFtZXRlckJvdW5kPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZmluYWxseUJsb2NrTm90Q29tcGxldGluZ05vcm1hbGx5PXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZm9yYmlkZGVuUmVmZXJlbmNlPWVycm9yCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmhpZGRlbkNhdGNoQmxvY2s9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbmNvbXBhdGlibGVOb25Jbmhlcml0ZWRJbnRlcmZhY2VNZXRob2Q9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbmNvbXBsZXRlRW51bVN3aXRjaD1pZ25vcmUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW5kaXJlY3RTdGF0aWNBY2Nlc3M9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5sb2NhbFZhcmlhYmxlSGlkaW5nPWlnbm9yZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5tZXRob2RXaXRoQ29uc3RydWN0b3JOYW1lPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0RlcHJlY2F0ZWRBbm5vdGF0aW9uPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ092ZXJyaWRlQW5ub3RhdGlvbj1pZ25vcmUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ1NlcmlhbFZlcnNpb249d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5ub0VmZmVjdEFzc2lnbm1lbnQ9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5ub0ltcGxpY2l0U3RyaW5nQ29udmVyc2lvbj13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm5vbkV4dGVybmFsaXplZFN0cmluZ0xpdGVyYWw9aWdub3JlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm51bGxSZWZlcmVuY2U9aWdub3JlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm92ZXJyaWRpbmdQYWNrYWdlRGVmYXVsdE1ldGhvZD13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnBhcmFtZXRlckFzc2lnbm1lbnQ9aWdub3JlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnBvc3NpYmxlQWNjaWRlbnRhbEJvb2xlYW5Bc3NpZ25tZW50PXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ucmF3VHlwZVJlZmVyZW5jZT1pZ25vcmUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uc3BlY2lhbFBhcmFtZXRlckhpZGluZ0ZpZWxkPWRpc2FibGVkCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnN0YXRpY0FjY2Vzc1JlY2VpdmVyPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uc3VwcHJlc3NXYXJuaW5ncz1lbmFibGVkCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnN5bnRoZXRpY0FjY2Vzc0VtdWxhdGlvbj13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnR5cGVQYXJhbWV0ZXJIaWRpbmc9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bmNoZWNrZWRUeXBlT3BlcmF0aW9uPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5kb2N1bWVudGVkRW1wdHlCbG9jaz13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVuaGFuZGxlZFdhcm5pbmdUb2tlbj13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVubmVjZXNzYXJ5RWxzZT13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVubmVjZXNzYXJ5VHlwZUNoZWNrPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5xdWFsaWZpZWRGaWVsZEFjY2Vzcz1pZ25vcmUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkRGVjbGFyZWRUaHJvd25FeGNlcHRpb249d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWREZWNsYXJlZFRocm93bkV4Y2VwdGlvbldoZW5PdmVycmlkaW5nPWVuYWJsZWQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkSW1wb3J0PXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkTGFiZWw9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRMb2NhbD13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZFBhcmFtZXRlcj13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZFBhcmFtZXRlcldoZW5JbXBsZW1lbnRpbmdBYnN0cmFjdD1lbmFibGVkCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZFBhcmFtZXRlcldoZW5PdmVycmlkaW5nQ29uY3JldGU9ZW5hYmxlZAorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRQcml2YXRlTWVtYmVyPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udmFyYXJnc0FyZ3VtZW50TmVlZENhc3Q9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuc291cmNlPTEuNQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51aS8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LnVpLnByZWZzIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51aS8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LnVpLnByZWZzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZkN2VjODcKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnVpLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQudWkucHJlZnMKQEAgLTAsMCArMSw1MCBAQAorI1dlZCBTZXAgMTIgMTI6NTQ6NDcgRURUIDIwMDcKK2NsZWFudXAuYWRkX2RlZmF1bHRfc2VyaWFsX3ZlcnNpb25faWQ9dHJ1ZQorY2xlYW51cC5hZGRfZ2VuZXJhdGVkX3NlcmlhbF92ZXJzaW9uX2lkPWZhbHNlCitjbGVhbnVwLmFkZF9taXNzaW5nX2Fubm90YXRpb25zPXRydWUKK2NsZWFudXAuYWRkX21pc3NpbmdfZGVwcmVjYXRlZF9hbm5vdGF0aW9ucz10cnVlCitjbGVhbnVwLmFkZF9taXNzaW5nX25sc190YWdzPWZhbHNlCitjbGVhbnVwLmFkZF9taXNzaW5nX292ZXJyaWRlX2Fubm90YXRpb25zPXRydWUKK2NsZWFudXAuYWRkX3NlcmlhbF92ZXJzaW9uX2lkPWZhbHNlCitjbGVhbnVwLmFsd2F5c191c2VfYmxvY2tzPXRydWUKK2NsZWFudXAuYWx3YXlzX3VzZV9wYXJlbnRoZXNlc19pbl9leHByZXNzaW9ucz10cnVlCitjbGVhbnVwLmFsd2F5c191c2VfdGhpc19mb3Jfbm9uX3N0YXRpY19maWVsZF9hY2Nlc3M9ZmFsc2UKK2NsZWFudXAuYWx3YXlzX3VzZV90aGlzX2Zvcl9ub25fc3RhdGljX21ldGhvZF9hY2Nlc3M9ZmFsc2UKK2NsZWFudXAuY29udmVydF90b19lbmhhbmNlZF9mb3JfbG9vcD10cnVlCitjbGVhbnVwLmZvcm1hdF9zb3VyY2VfY29kZT10cnVlCitjbGVhbnVwLm1ha2VfbG9jYWxfdmFyaWFibGVfZmluYWw9dHJ1ZQorY2xlYW51cC5tYWtlX3BhcmFtZXRlcnNfZmluYWw9dHJ1ZQorY2xlYW51cC5tYWtlX3ByaXZhdGVfZmllbGRzX2ZpbmFsPXRydWUKK2NsZWFudXAubWFrZV92YXJpYWJsZV9kZWNsYXJhdGlvbnNfZmluYWw9dHJ1ZQorY2xlYW51cC5uZXZlcl91c2VfYmxvY2tzPWZhbHNlCitjbGVhbnVwLm5ldmVyX3VzZV9wYXJlbnRoZXNlc19pbl9leHByZXNzaW9ucz1mYWxzZQorY2xlYW51cC5vcmdhbml6ZV9pbXBvcnRzPXRydWUKK2NsZWFudXAucXVhbGlmeV9zdGF0aWNfZmllbGRfYWNjZXNzZXNfd2l0aF9kZWNsYXJpbmdfY2xhc3M9ZmFsc2UKK2NsZWFudXAucXVhbGlmeV9zdGF0aWNfbWVtYmVyX2FjY2Vzc2VzX3Rocm91Z2hfaW5zdGFuY2VzX3dpdGhfZGVjbGFyaW5nX2NsYXNzPXRydWUKK2NsZWFudXAucXVhbGlmeV9zdGF0aWNfbWVtYmVyX2FjY2Vzc2VzX3Rocm91Z2hfc3VidHlwZXNfd2l0aF9kZWNsYXJpbmdfY2xhc3M9dHJ1ZQorY2xlYW51cC5xdWFsaWZ5X3N0YXRpY19tZW1iZXJfYWNjZXNzZXNfd2l0aF9kZWNsYXJpbmdfY2xhc3M9dHJ1ZQorY2xlYW51cC5xdWFsaWZ5X3N0YXRpY19tZXRob2RfYWNjZXNzZXNfd2l0aF9kZWNsYXJpbmdfY2xhc3M9ZmFsc2UKK2NsZWFudXAucmVtb3ZlX3ByaXZhdGVfY29uc3RydWN0b3JzPXRydWUKK2NsZWFudXAucmVtb3ZlX3RyYWlsaW5nX3doaXRlc3BhY2VzPXRydWUKK2NsZWFudXAucmVtb3ZlX3RyYWlsaW5nX3doaXRlc3BhY2VzX2FsbD10cnVlCitjbGVhbnVwLnJlbW92ZV90cmFpbGluZ193aGl0ZXNwYWNlc19pZ25vcmVfZW1wdHk9ZmFsc2UKK2NsZWFudXAucmVtb3ZlX3VubmVjZXNzYXJ5X2Nhc3RzPXRydWUKK2NsZWFudXAucmVtb3ZlX3VubmVjZXNzYXJ5X25sc190YWdzPXRydWUKK2NsZWFudXAucmVtb3ZlX3VudXNlZF9pbXBvcnRzPXRydWUKK2NsZWFudXAucmVtb3ZlX3VudXNlZF9sb2NhbF92YXJpYWJsZXM9dHJ1ZQorY2xlYW51cC5yZW1vdmVfdW51c2VkX3ByaXZhdGVfZmllbGRzPXRydWUKK2NsZWFudXAucmVtb3ZlX3VudXNlZF9wcml2YXRlX21lbWJlcnM9dHJ1ZQorY2xlYW51cC5yZW1vdmVfdW51c2VkX3ByaXZhdGVfbWV0aG9kcz10cnVlCitjbGVhbnVwLnJlbW92ZV91bnVzZWRfcHJpdmF0ZV90eXBlcz10cnVlCitjbGVhbnVwLnNvcnRfbWVtYmVycz1mYWxzZQorY2xlYW51cC5zb3J0X21lbWJlcnNfYWxsPWZhbHNlCitjbGVhbnVwLnVzZV9ibG9ja3M9dHJ1ZQorY2xlYW51cC51c2VfYmxvY2tzX29ubHlfZm9yX3JldHVybl9hbmRfdGhyb3c9ZmFsc2UKK2NsZWFudXAudXNlX3BhcmVudGhlc2VzX2luX2V4cHJlc3Npb25zPWZhbHNlCitjbGVhbnVwLnVzZV90aGlzX2Zvcl9ub25fc3RhdGljX2ZpZWxkX2FjY2Vzcz1mYWxzZQorY2xlYW51cC51c2VfdGhpc19mb3Jfbm9uX3N0YXRpY19maWVsZF9hY2Nlc3Nfb25seV9pZl9uZWNlc3Nhcnk9dHJ1ZQorY2xlYW51cC51c2VfdGhpc19mb3Jfbm9uX3N0YXRpY19tZXRob2RfYWNjZXNzPWZhbHNlCitjbGVhbnVwLnVzZV90aGlzX2Zvcl9ub25fc3RhdGljX21ldGhvZF9hY2Nlc3Nfb25seV9pZl9uZWNlc3Nhcnk9dHJ1ZQorY2xlYW51cF9wcm9maWxlPV9jbGVhbnVwCitjbGVhbnVwX3NldHRpbmdzX3ZlcnNpb249MgorZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMudWkvTUVUQS1JTkYvTUFOSUZFU1QuTUYgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnVpL01FVEEtSU5GL01BTklGRVNULk1GCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA2MmNlYTAKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnVpL01FVEEtSU5GL01BTklGRVNULk1GCkBAIC0wLDAgKzEsMTcgQEAKK01hbmlmZXN0LVZlcnNpb246IDEuMAorQnVuZGxlLU1hbmlmZXN0VmVyc2lvbjogMgorQnVuZGxlLU5hbWU6ICVwbHVnaW5OYW1lCitCdW5kbGUtU3ltYm9saWNOYW1lOiBvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnVpCitCdW5kbGUtVmVyc2lvbjogMS4yLjEKK0J1bmRsZS1BY3RpdmF0b3I6IG9yZy5lY2xpcHNlLnN0ZW0udGVzdHMudWkuQWN0aXZhdG9yCitCdW5kbGUtVmVuZG9yOiAlcHJvdmlkZXJOYW1lCitCdW5kbGUtTG9jYWxpemF0aW9uOiBwbHVnaW4KK1JlcXVpcmUtQnVuZGxlOiBvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwsCisgb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlLAorIG9yZy5lY2xpcHNlLnN0ZW0udWksCisgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucywKKyBvcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5CitCdW5kbGUtUmVxdWlyZWRFeGVjdXRpb25FbnZpcm9ubWVudDogSjJTRS0xLjUKK0J1bmRsZS1BY3RpdmF0aW9uUG9saWN5OiBsYXp5CitFeHBvcnQtUGFja2FnZTogb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51aSwKKyBvcmcuZWNsaXBzZS5zdGVtLnVpLnZpZXdzLm1hcApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51aS9idWlsZC5wcm9wZXJ0aWVzIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51aS9idWlsZC5wcm9wZXJ0aWVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQzMGYwZWUKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnVpL2J1aWxkLnByb3BlcnRpZXMKQEAgLTAsMCArMSw3IEBACitzb3VyY2UuLiA9IHNyYy8KK291dHB1dC4uID0gYmluLworYmluLmluY2x1ZGVzID0gTUVUQS1JTkYvLFwKKyAgICAgICAgICAgICAgIC4sXAorICAgICAgICAgICAgICAgbm90aWNlLmh0bWwsXAorICAgICAgICAgICAgICAgZXBsLXYxMC5odG1sLFwKKyAgICAgICAgICAgICAgIHBsdWdpbi5wcm9wZXJ0aWVzCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnVpL2VwbC12MTAuaHRtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMudWkvZXBsLXYxMC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVkNGIxOTYKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnVpL2VwbC12MTAuaHRtbApAQCAtMCwwICsxLDMyOCBAQAorPGh0bWwgeG1sbnM6bz0idXJuOnNjaGVtYXMtbWljcm9zb2Z0LWNvbTpvZmZpY2U6b2ZmaWNlIgoreG1sbnM6dz0idXJuOnNjaGVtYXMtbWljcm9zb2Z0LWNvbTpvZmZpY2U6d29yZCIKK3htbG5zPSJodHRwOi8vd3d3LnczLm9yZy9UUi9SRUMtaHRtbDQwIj4KKworPGhlYWQ+Cis8bWV0YSBodHRwLWVxdWl2PUNvbnRlbnQtVHlwZSBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9d2luZG93cy0xMjUyIj4KKzxtZXRhIG5hbWU9UHJvZ0lkIGNvbnRlbnQ9V29yZC5Eb2N1bWVudD4KKzxtZXRhIG5hbWU9R2VuZXJhdG9yIGNvbnRlbnQ9Ik1pY3Jvc29mdCBXb3JkIDkiPgorPG1ldGEgbmFtZT1PcmlnaW5hdG9yIGNvbnRlbnQ9Ik1pY3Jvc29mdCBXb3JkIDkiPgorPGxpbmsgcmVsPUZpbGUtTGlzdAoraHJlZj0iLi9FY2xpcHNlJTIwRVBMJTIwMjAwM18xMV8xMCUyMEZpbmFsX2ZpbGVzL2ZpbGVsaXN0LnhtbCI+Cis8dGl0bGU+RWNsaXBzZSBQdWJsaWMgTGljZW5zZSAtIFZlcnNpb24gMS4wPC90aXRsZT4KKzwhLS1baWYgZ3RlIG1zbyA5XT48eG1sPgorIDxvOkRvY3VtZW50UHJvcGVydGllcz4KKyAgPG86UmV2aXNpb24+MjwvbzpSZXZpc2lvbj4KKyAgPG86VG90YWxUaW1lPjM8L286VG90YWxUaW1lPgorICA8bzpDcmVhdGVkPjIwMDQtMDMtMDVUMjM6MDM6MDBaPC9vOkNyZWF0ZWQ+CisgIDxvOkxhc3RTYXZlZD4yMDA0LTAzLTA1VDIzOjAzOjAwWjwvbzpMYXN0U2F2ZWQ+CisgIDxvOlBhZ2VzPjQ8L286UGFnZXM+CisgIDxvOldvcmRzPjE2MjY8L286V29yZHM+CisgIDxvOkNoYXJhY3RlcnM+OTI3MDwvbzpDaGFyYWN0ZXJzPgorICAgPG86TGluZXM+Nzc8L286TGluZXM+CisgIDxvOlBhcmFncmFwaHM+MTg8L286UGFyYWdyYXBocz4KKyAgPG86Q2hhcmFjdGVyc1dpdGhTcGFjZXM+MTEzODQ8L286Q2hhcmFjdGVyc1dpdGhTcGFjZXM+CisgIDxvOlZlcnNpb24+OS40NDAyPC9vOlZlcnNpb24+CisgPC9vOkRvY3VtZW50UHJvcGVydGllcz4KKzwveG1sPjwhW2VuZGlmXS0tPjwhLS1baWYgZ3RlIG1zbyA5XT48eG1sPgorIDx3OldvcmREb2N1bWVudD4KKyAgPHc6VHJhY2tSZXZpc2lvbnMvPgorIDwvdzpXb3JkRG9jdW1lbnQ+Cis8L3htbD48IVtlbmRpZl0tLT4KKzxzdHlsZT4KKzwhLS0KKyAvKiBGb250IERlZmluaXRpb25zICovCitAZm9udC1mYWNlCisJe2ZvbnQtZmFtaWx5OlRhaG9tYTsKKwlwYW5vc2UtMToyIDExIDYgNCAzIDUgNCA0IDIgNDsKKwltc28tZm9udC1jaGFyc2V0OjA7CisJbXNvLWdlbmVyaWMtZm9udC1mYW1pbHk6c3dpc3M7CisJbXNvLWZvbnQtcGl0Y2g6dmFyaWFibGU7CisJbXNvLWZvbnQtc2lnbmF0dXJlOjU1MzY3OTQ5NSAtMjE0NzQ4MzY0OCA4IDAgNjYwNDcgMDt9CisgLyogU3R5bGUgRGVmaW5pdGlvbnMgKi8KK3AuTXNvTm9ybWFsLCBsaS5Nc29Ob3JtYWwsIGRpdi5Nc29Ob3JtYWwKKwl7bXNvLXN0eWxlLXBhcmVudDoiIjsKKwltYXJnaW46MGluOworCW1hcmdpbi1ib3R0b206LjAwMDFwdDsKKwltc28tcGFnaW5hdGlvbjp3aWRvdy1vcnBoYW47CisJZm9udC1zaXplOjEyLjBwdDsKKwlmb250LWZhbWlseToiVGltZXMgTmV3IFJvbWFuIjsKKwltc28tZmFyZWFzdC1mb250LWZhbWlseToiVGltZXMgTmV3IFJvbWFuIjt9CitwCisJe21hcmdpbi1yaWdodDowaW47CisJbXNvLW1hcmdpbi10b3AtYWx0OmF1dG87CisJbXNvLW1hcmdpbi1ib3R0b20tYWx0OmF1dG87CisJbWFyZ2luLWxlZnQ6MGluOworCW1zby1wYWdpbmF0aW9uOndpZG93LW9ycGhhbjsKKwlmb250LXNpemU6MTIuMHB0OworCWZvbnQtZmFtaWx5OiJUaW1lcyBOZXcgUm9tYW4iOworCW1zby1mYXJlYXN0LWZvbnQtZmFtaWx5OiJUaW1lcyBOZXcgUm9tYW4iO30KK3AuQmFsbG9vblRleHQsIGxpLkJhbGxvb25UZXh0LCBkaXYuQmFsbG9vblRleHQKKwl7bXNvLXN0eWxlLW5hbWU6IkJhbGxvb24gVGV4dCI7CisJbWFyZ2luOjBpbjsKKwltYXJnaW4tYm90dG9tOi4wMDAxcHQ7CisJbXNvLXBhZ2luYXRpb246d2lkb3ctb3JwaGFuOworCWZvbnQtc2l6ZTo4LjBwdDsKKwlmb250LWZhbWlseTpUYWhvbWE7CisJbXNvLWZhcmVhc3QtZm9udC1mYW1pbHk6IlRpbWVzIE5ldyBSb21hbiI7fQorQHBhZ2UgU2VjdGlvbjEKKwl7c2l6ZTo4LjVpbiAxMS4waW47CisJbWFyZ2luOjEuMGluIDEuMjVpbiAxLjBpbiAxLjI1aW47CisJbXNvLWhlYWRlci1tYXJnaW46LjVpbjsKKwltc28tZm9vdGVyLW1hcmdpbjouNWluOworCW1zby1wYXBlci1zb3VyY2U6MDt9CitkaXYuU2VjdGlvbjEKKwl7cGFnZTpTZWN0aW9uMTt9CistLT4KKzwvc3R5bGU+Cis8L2hlYWQ+CisKKzxib2R5IGxhbmc9RU4tVVMgc3R5bGU9J3RhYi1pbnRlcnZhbDouNWluJz4KKworPGRpdiBjbGFzcz1TZWN0aW9uMT4KKworPHAgYWxpZ249Y2VudGVyIHN0eWxlPSd0ZXh0LWFsaWduOmNlbnRlcic+PGI+RWNsaXBzZSBQdWJsaWMgTGljZW5zZSAtIHYgMS4wPC9iPgorPC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+VEhFIEFDQ09NUEFOWUlORyBQUk9HUkFNIElTIFBST1ZJREVEIFVOREVSCitUSEUgVEVSTVMgT0YgVEhJUyBFQ0xJUFNFIFBVQkxJQyBMSUNFTlNFICgmcXVvdDtBR1JFRU1FTlQmcXVvdDspLiBBTlkgVVNFLAorUkVQUk9EVUNUSU9OIE9SIERJU1RSSUJVVElPTiBPRiBUSEUgUFJPR1JBTSBDT05TVElUVVRFUyBSRUNJUElFTlQnUyBBQ0NFUFRBTkNFCitPRiBUSElTIEFHUkVFTUVOVC48L3NwYW4+IDwvcD4KKworPHA+PGI+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPjEuIERFRklOSVRJT05TPC9zcGFuPjwvYj4gPC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+JnF1b3Q7Q29udHJpYnV0aW9uJnF1b3Q7IG1lYW5zOjwvc3Bhbj4gPC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5hKQoraW4gdGhlIGNhc2Ugb2YgdGhlIGluaXRpYWwgQ29udHJpYnV0b3IsIHRoZSBpbml0aWFsIGNvZGUgYW5kIGRvY3VtZW50YXRpb24KK2Rpc3RyaWJ1dGVkIHVuZGVyIHRoaXMgQWdyZWVtZW50LCBhbmQ8YnIgY2xlYXI9bGVmdD4KK2IpIGluIHRoZSBjYXNlIG9mIGVhY2ggc3Vic2VxdWVudCBDb250cmlidXRvcjo8L3NwYW4+PC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5pKQorY2hhbmdlcyB0byB0aGUgUHJvZ3JhbSwgYW5kPC9zcGFuPjwvcD4KKworPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+aWkpCithZGRpdGlvbnMgdG8gdGhlIFByb2dyYW07PC9zcGFuPjwvcD4KKworPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+d2hlcmUKK3N1Y2ggY2hhbmdlcyBhbmQvb3IgYWRkaXRpb25zIHRvIHRoZSBQcm9ncmFtIG9yaWdpbmF0ZSBmcm9tIGFuZCBhcmUgZGlzdHJpYnV0ZWQKK2J5IHRoYXQgcGFydGljdWxhciBDb250cmlidXRvci4gQSBDb250cmlidXRpb24gJ29yaWdpbmF0ZXMnIGZyb20gYSBDb250cmlidXRvcgoraWYgaXQgd2FzIGFkZGVkIHRvIHRoZSBQcm9ncmFtIGJ5IHN1Y2ggQ29udHJpYnV0b3IgaXRzZWxmIG9yIGFueW9uZSBhY3Rpbmcgb24KK3N1Y2ggQ29udHJpYnV0b3IncyBiZWhhbGYuIENvbnRyaWJ1dGlvbnMgZG8gbm90IGluY2x1ZGUgYWRkaXRpb25zIHRvIHRoZQorUHJvZ3JhbSB3aGljaDogKGkpIGFyZSBzZXBhcmF0ZSBtb2R1bGVzIG9mIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIGluIGNvbmp1bmN0aW9uCit3aXRoIHRoZSBQcm9ncmFtIHVuZGVyIHRoZWlyIG93biBsaWNlbnNlIGFncmVlbWVudCwgYW5kIChpaSkgYXJlIG5vdCBkZXJpdmF0aXZlCit3b3JrcyBvZiB0aGUgUHJvZ3JhbS4gPC9zcGFuPjwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPiZxdW90O0NvbnRyaWJ1dG9yJnF1b3Q7IG1lYW5zIGFueSBwZXJzb24gb3IKK2VudGl0eSB0aGF0IGRpc3RyaWJ1dGVzIHRoZSBQcm9ncmFtLjwvc3Bhbj4gPC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+JnF1b3Q7TGljZW5zZWQgUGF0ZW50cyAmcXVvdDsgbWVhbiBwYXRlbnQKK2NsYWltcyBsaWNlbnNhYmxlIGJ5IGEgQ29udHJpYnV0b3Igd2hpY2ggYXJlIG5lY2Vzc2FyaWx5IGluZnJpbmdlZCBieSB0aGUgdXNlCitvciBzYWxlIG9mIGl0cyBDb250cmlidXRpb24gYWxvbmUgb3Igd2hlbiBjb21iaW5lZCB3aXRoIHRoZSBQcm9ncmFtLiA8L3NwYW4+PC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+JnF1b3Q7UHJvZ3JhbSZxdW90OyBtZWFucyB0aGUgQ29udHJpYnV0aW9ucworZGlzdHJpYnV0ZWQgaW4gYWNjb3JkYW5jZSB3aXRoIHRoaXMgQWdyZWVtZW50Ljwvc3Bhbj4gPC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+JnF1b3Q7UmVjaXBpZW50JnF1b3Q7IG1lYW5zIGFueW9uZSB3aG8KK3JlY2VpdmVzIHRoZSBQcm9ncmFtIHVuZGVyIHRoaXMgQWdyZWVtZW50LCBpbmNsdWRpbmcgYWxsIENvbnRyaWJ1dG9ycy48L3NwYW4+IDwvcD4KKworPHA+PGI+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPjIuIEdSQU5UIE9GIFJJR0hUUzwvc3Bhbj48L2I+IDwvcD4KKworPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YSkKK1N1YmplY3QgdG8gdGhlIHRlcm1zIG9mIHRoaXMgQWdyZWVtZW50LCBlYWNoIENvbnRyaWJ1dG9yIGhlcmVieSBncmFudHMgUmVjaXBpZW50CithIG5vbi1leGNsdXNpdmUsIHdvcmxkd2lkZSwgcm95YWx0eS1mcmVlIGNvcHlyaWdodCBsaWNlbnNlIHRvPHNwYW4KK3N0eWxlPSdjb2xvcjpyZWQnPiA8L3NwYW4+cmVwcm9kdWNlLCBwcmVwYXJlIGRlcml2YXRpdmUgd29ya3Mgb2YsIHB1YmxpY2x5CitkaXNwbGF5LCBwdWJsaWNseSBwZXJmb3JtLCBkaXN0cmlidXRlIGFuZCBzdWJsaWNlbnNlIHRoZSBDb250cmlidXRpb24gb2Ygc3VjaAorQ29udHJpYnV0b3IsIGlmIGFueSwgYW5kIHN1Y2ggZGVyaXZhdGl2ZSB3b3JrcywgaW4gc291cmNlIGNvZGUgYW5kIG9iamVjdCBjb2RlCitmb3JtLjwvc3Bhbj48L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmIpCitTdWJqZWN0IHRvIHRoZSB0ZXJtcyBvZiB0aGlzIEFncmVlbWVudCwgZWFjaCBDb250cmlidXRvciBoZXJlYnkgZ3JhbnRzCitSZWNpcGllbnQgYSBub24tZXhjbHVzaXZlLCB3b3JsZHdpZGUsPHNwYW4gc3R5bGU9J2NvbG9yOmdyZWVuJz4gPC9zcGFuPnJveWFsdHktZnJlZQorcGF0ZW50IGxpY2Vuc2UgdW5kZXIgTGljZW5zZWQgUGF0ZW50cyB0byBtYWtlLCB1c2UsIHNlbGwsIG9mZmVyIHRvIHNlbGwsIGltcG9ydAorYW5kIG90aGVyd2lzZSB0cmFuc2ZlciB0aGUgQ29udHJpYnV0aW9uIG9mIHN1Y2ggQ29udHJpYnV0b3IsIGlmIGFueSwgaW4gc291cmNlCitjb2RlIGFuZCBvYmplY3QgY29kZSBmb3JtLiBUaGlzIHBhdGVudCBsaWNlbnNlIHNoYWxsIGFwcGx5IHRvIHRoZSBjb21iaW5hdGlvbgorb2YgdGhlIENvbnRyaWJ1dGlvbiBhbmQgdGhlIFByb2dyYW0gaWYsIGF0IHRoZSB0aW1lIHRoZSBDb250cmlidXRpb24gaXMgYWRkZWQKK2J5IHRoZSBDb250cmlidXRvciwgc3VjaCBhZGRpdGlvbiBvZiB0aGUgQ29udHJpYnV0aW9uIGNhdXNlcyBzdWNoIGNvbWJpbmF0aW9uCit0byBiZSBjb3ZlcmVkIGJ5IHRoZSBMaWNlbnNlZCBQYXRlbnRzLiBUaGUgcGF0ZW50IGxpY2Vuc2Ugc2hhbGwgbm90IGFwcGx5IHRvCithbnkgb3RoZXIgY29tYmluYXRpb25zIHdoaWNoIGluY2x1ZGUgdGhlIENvbnRyaWJ1dGlvbi4gTm8gaGFyZHdhcmUgcGVyIHNlIGlzCitsaWNlbnNlZCBoZXJldW5kZXIuIDwvc3Bhbj48L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmMpCitSZWNpcGllbnQgdW5kZXJzdGFuZHMgdGhhdCBhbHRob3VnaCBlYWNoIENvbnRyaWJ1dG9yIGdyYW50cyB0aGUgbGljZW5zZXMgdG8gaXRzCitDb250cmlidXRpb25zIHNldCBmb3J0aCBoZXJlaW4sIG5vIGFzc3VyYW5jZXMgYXJlIHByb3ZpZGVkIGJ5IGFueSBDb250cmlidXRvcgordGhhdCB0aGUgUHJvZ3JhbSBkb2VzIG5vdCBpbmZyaW5nZSB0aGUgcGF0ZW50IG9yIG90aGVyIGludGVsbGVjdHVhbCBwcm9wZXJ0eQorcmlnaHRzIG9mIGFueSBvdGhlciBlbnRpdHkuIEVhY2ggQ29udHJpYnV0b3IgZGlzY2xhaW1zIGFueSBsaWFiaWxpdHkgdG8gUmVjaXBpZW50Citmb3IgY2xhaW1zIGJyb3VnaHQgYnkgYW55IG90aGVyIGVudGl0eSBiYXNlZCBvbiBpbmZyaW5nZW1lbnQgb2YgaW50ZWxsZWN0dWFsCitwcm9wZXJ0eSByaWdodHMgb3Igb3RoZXJ3aXNlLiBBcyBhIGNvbmRpdGlvbiB0byBleGVyY2lzaW5nIHRoZSByaWdodHMgYW5kCitsaWNlbnNlcyBncmFudGVkIGhlcmV1bmRlciwgZWFjaCBSZWNpcGllbnQgaGVyZWJ5IGFzc3VtZXMgc29sZSByZXNwb25zaWJpbGl0eQordG8gc2VjdXJlIGFueSBvdGhlciBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIG5lZWRlZCwgaWYgYW55LiBGb3IgZXhhbXBsZSwKK2lmIGEgdGhpcmQgcGFydHkgcGF0ZW50IGxpY2Vuc2UgaXMgcmVxdWlyZWQgdG8gYWxsb3cgUmVjaXBpZW50IHRvIGRpc3RyaWJ1dGUKK3RoZSBQcm9ncmFtLCBpdCBpcyBSZWNpcGllbnQncyByZXNwb25zaWJpbGl0eSB0byBhY3F1aXJlIHRoYXQgbGljZW5zZSBiZWZvcmUKK2Rpc3RyaWJ1dGluZyB0aGUgUHJvZ3JhbS48L3NwYW4+PC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5kKQorRWFjaCBDb250cmlidXRvciByZXByZXNlbnRzIHRoYXQgdG8gaXRzIGtub3dsZWRnZSBpdCBoYXMgc3VmZmljaWVudCBjb3B5cmlnaHQKK3JpZ2h0cyBpbiBpdHMgQ29udHJpYnV0aW9uLCBpZiBhbnksIHRvIGdyYW50IHRoZSBjb3B5cmlnaHQgbGljZW5zZSBzZXQgZm9ydGggaW4KK3RoaXMgQWdyZWVtZW50LiA8L3NwYW4+PC9wPgorCis8cD48Yj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+My4gUkVRVUlSRU1FTlRTPC9zcGFuPjwvYj4gPC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+QSBDb250cmlidXRvciBtYXkgY2hvb3NlIHRvIGRpc3RyaWJ1dGUgdGhlCitQcm9ncmFtIGluIG9iamVjdCBjb2RlIGZvcm0gdW5kZXIgaXRzIG93biBsaWNlbnNlIGFncmVlbWVudCwgcHJvdmlkZWQgdGhhdDo8L3NwYW4+Cis8L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmEpCitpdCBjb21wbGllcyB3aXRoIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGlzIEFncmVlbWVudDsgYW5kPC9zcGFuPjwvcD4KKworPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YikKK2l0cyBsaWNlbnNlIGFncmVlbWVudDo8L3NwYW4+PC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5pKQorZWZmZWN0aXZlbHkgZGlzY2xhaW1zIG9uIGJlaGFsZiBvZiBhbGwgQ29udHJpYnV0b3JzIGFsbCB3YXJyYW50aWVzIGFuZAorY29uZGl0aW9ucywgZXhwcmVzcyBhbmQgaW1wbGllZCwgaW5jbHVkaW5nIHdhcnJhbnRpZXMgb3IgY29uZGl0aW9ucyBvZiB0aXRsZQorYW5kIG5vbi1pbmZyaW5nZW1lbnQsIGFuZCBpbXBsaWVkIHdhcnJhbnRpZXMgb3IgY29uZGl0aW9ucyBvZiBtZXJjaGFudGFiaWxpdHkKK2FuZCBmaXRuZXNzIGZvciBhIHBhcnRpY3VsYXIgcHVycG9zZTsgPC9zcGFuPjwvcD4KKworPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+aWkpCitlZmZlY3RpdmVseSBleGNsdWRlcyBvbiBiZWhhbGYgb2YgYWxsIENvbnRyaWJ1dG9ycyBhbGwgbGlhYmlsaXR5IGZvciBkYW1hZ2VzLAoraW5jbHVkaW5nIGRpcmVjdCwgaW5kaXJlY3QsIHNwZWNpYWwsIGluY2lkZW50YWwgYW5kIGNvbnNlcXVlbnRpYWwgZGFtYWdlcywgc3VjaAorYXMgbG9zdCBwcm9maXRzOyA8L3NwYW4+PC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5paWkpCitzdGF0ZXMgdGhhdCBhbnkgcHJvdmlzaW9ucyB3aGljaCBkaWZmZXIgZnJvbSB0aGlzIEFncmVlbWVudCBhcmUgb2ZmZXJlZCBieSB0aGF0CitDb250cmlidXRvciBhbG9uZSBhbmQgbm90IGJ5IGFueSBvdGhlciBwYXJ0eTsgYW5kPC9zcGFuPjwvcD4KKworPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+aXYpCitzdGF0ZXMgdGhhdCBzb3VyY2UgY29kZSBmb3IgdGhlIFByb2dyYW0gaXMgYXZhaWxhYmxlIGZyb20gc3VjaCBDb250cmlidXRvciwgYW5kCitpbmZvcm1zIGxpY2Vuc2VlcyBob3cgdG8gb2J0YWluIGl0IGluIGEgcmVhc29uYWJsZSBtYW5uZXIgb24gb3IgdGhyb3VnaCBhCittZWRpdW0gY3VzdG9tYXJpbHkgdXNlZCBmb3Igc29mdHdhcmUgZXhjaGFuZ2UuPHNwYW4gc3R5bGU9J2NvbG9yOmJsdWUnPiA8L3NwYW4+PC9zcGFuPjwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPldoZW4gdGhlIFByb2dyYW0gaXMgbWFkZSBhdmFpbGFibGUgaW4gc291cmNlCitjb2RlIGZvcm06PC9zcGFuPiA8L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmEpCitpdCBtdXN0IGJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoaXMgQWdyZWVtZW50OyBhbmQgPC9zcGFuPjwvcD4KKworPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YikgYQorY29weSBvZiB0aGlzIEFncmVlbWVudCBtdXN0IGJlIGluY2x1ZGVkIHdpdGggZWFjaCBjb3B5IG9mIHRoZSBQcm9ncmFtLiA8L3NwYW4+PC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+Q29udHJpYnV0b3JzIG1heSBub3QgcmVtb3ZlIG9yIGFsdGVyIGFueQorY29weXJpZ2h0IG5vdGljZXMgY29udGFpbmVkIHdpdGhpbiB0aGUgUHJvZ3JhbS4gPC9zcGFuPjwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkVhY2ggQ29udHJpYnV0b3IgbXVzdCBpZGVudGlmeSBpdHNlbGYgYXMgdGhlCitvcmlnaW5hdG9yIG9mIGl0cyBDb250cmlidXRpb24sIGlmIGFueSwgaW4gYSBtYW5uZXIgdGhhdCByZWFzb25hYmx5IGFsbG93cworc3Vic2VxdWVudCBSZWNpcGllbnRzIHRvIGlkZW50aWZ5IHRoZSBvcmlnaW5hdG9yIG9mIHRoZSBDb250cmlidXRpb24uIDwvc3Bhbj48L3A+CisKKzxwPjxiPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz40LiBDT01NRVJDSUFMIERJU1RSSUJVVElPTjwvc3Bhbj48L2I+IDwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkNvbW1lcmNpYWwgZGlzdHJpYnV0b3JzIG9mIHNvZnR3YXJlIG1heQorYWNjZXB0IGNlcnRhaW4gcmVzcG9uc2liaWxpdGllcyB3aXRoIHJlc3BlY3QgdG8gZW5kIHVzZXJzLCBidXNpbmVzcyBwYXJ0bmVycworYW5kIHRoZSBsaWtlLiBXaGlsZSB0aGlzIGxpY2Vuc2UgaXMgaW50ZW5kZWQgdG8gZmFjaWxpdGF0ZSB0aGUgY29tbWVyY2lhbCB1c2UKK29mIHRoZSBQcm9ncmFtLCB0aGUgQ29udHJpYnV0b3Igd2hvIGluY2x1ZGVzIHRoZSBQcm9ncmFtIGluIGEgY29tbWVyY2lhbAorcHJvZHVjdCBvZmZlcmluZyBzaG91bGQgZG8gc28gaW4gYSBtYW5uZXIgd2hpY2ggZG9lcyBub3QgY3JlYXRlIHBvdGVudGlhbAorbGlhYmlsaXR5IGZvciBvdGhlciBDb250cmlidXRvcnMuIFRoZXJlZm9yZSwgaWYgYSBDb250cmlidXRvciBpbmNsdWRlcyB0aGUKK1Byb2dyYW0gaW4gYSBjb21tZXJjaWFsIHByb2R1Y3Qgb2ZmZXJpbmcsIHN1Y2ggQ29udHJpYnV0b3IgKCZxdW90O0NvbW1lcmNpYWwKK0NvbnRyaWJ1dG9yJnF1b3Q7KSBoZXJlYnkgYWdyZWVzIHRvIGRlZmVuZCBhbmQgaW5kZW1uaWZ5IGV2ZXJ5IG90aGVyCitDb250cmlidXRvciAoJnF1b3Q7SW5kZW1uaWZpZWQgQ29udHJpYnV0b3ImcXVvdDspIGFnYWluc3QgYW55IGxvc3NlcywgZGFtYWdlcyBhbmQKK2Nvc3RzIChjb2xsZWN0aXZlbHkgJnF1b3Q7TG9zc2VzJnF1b3Q7KSBhcmlzaW5nIGZyb20gY2xhaW1zLCBsYXdzdWl0cyBhbmQgb3RoZXIKK2xlZ2FsIGFjdGlvbnMgYnJvdWdodCBieSBhIHRoaXJkIHBhcnR5IGFnYWluc3QgdGhlIEluZGVtbmlmaWVkIENvbnRyaWJ1dG9yIHRvCit0aGUgZXh0ZW50IGNhdXNlZCBieSB0aGUgYWN0cyBvciBvbWlzc2lvbnMgb2Ygc3VjaCBDb21tZXJjaWFsIENvbnRyaWJ1dG9yIGluCitjb25uZWN0aW9uIHdpdGggaXRzIGRpc3RyaWJ1dGlvbiBvZiB0aGUgUHJvZ3JhbSBpbiBhIGNvbW1lcmNpYWwgcHJvZHVjdAorb2ZmZXJpbmcuIFRoZSBvYmxpZ2F0aW9ucyBpbiB0aGlzIHNlY3Rpb24gZG8gbm90IGFwcGx5IHRvIGFueSBjbGFpbXMgb3IgTG9zc2VzCityZWxhdGluZyB0byBhbnkgYWN0dWFsIG9yIGFsbGVnZWQgaW50ZWxsZWN0dWFsIHByb3BlcnR5IGluZnJpbmdlbWVudC4gSW4gb3JkZXIKK3RvIHF1YWxpZnksIGFuIEluZGVtbmlmaWVkIENvbnRyaWJ1dG9yIG11c3Q6IGEpIHByb21wdGx5IG5vdGlmeSB0aGUgQ29tbWVyY2lhbAorQ29udHJpYnV0b3IgaW4gd3JpdGluZyBvZiBzdWNoIGNsYWltLCBhbmQgYikgYWxsb3cgdGhlIENvbW1lcmNpYWwgQ29udHJpYnV0b3IKK3RvIGNvbnRyb2wsIGFuZCBjb29wZXJhdGUgd2l0aCB0aGUgQ29tbWVyY2lhbCBDb250cmlidXRvciBpbiwgdGhlIGRlZmVuc2UgYW5kCithbnkgcmVsYXRlZCBzZXR0bGVtZW50IG5lZ290aWF0aW9ucy4gVGhlIEluZGVtbmlmaWVkIENvbnRyaWJ1dG9yIG1heSBwYXJ0aWNpcGF0ZQoraW4gYW55IHN1Y2ggY2xhaW0gYXQgaXRzIG93biBleHBlbnNlLjwvc3Bhbj4gPC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+Rm9yIGV4YW1wbGUsIGEgQ29udHJpYnV0b3IgbWlnaHQgaW5jbHVkZSB0aGUKK1Byb2dyYW0gaW4gYSBjb21tZXJjaWFsIHByb2R1Y3Qgb2ZmZXJpbmcsIFByb2R1Y3QgWC4gVGhhdCBDb250cmlidXRvciBpcyB0aGVuIGEKK0NvbW1lcmNpYWwgQ29udHJpYnV0b3IuIElmIHRoYXQgQ29tbWVyY2lhbCBDb250cmlidXRvciB0aGVuIG1ha2VzIHBlcmZvcm1hbmNlCitjbGFpbXMsIG9yIG9mZmVycyB3YXJyYW50aWVzIHJlbGF0ZWQgdG8gUHJvZHVjdCBYLCB0aG9zZSBwZXJmb3JtYW5jZSBjbGFpbXMgYW5kCit3YXJyYW50aWVzIGFyZSBzdWNoIENvbW1lcmNpYWwgQ29udHJpYnV0b3IncyByZXNwb25zaWJpbGl0eSBhbG9uZS4gVW5kZXIgdGhpcworc2VjdGlvbiwgdGhlIENvbW1lcmNpYWwgQ29udHJpYnV0b3Igd291bGQgaGF2ZSB0byBkZWZlbmQgY2xhaW1zIGFnYWluc3QgdGhlCitvdGhlciBDb250cmlidXRvcnMgcmVsYXRlZCB0byB0aG9zZSBwZXJmb3JtYW5jZSBjbGFpbXMgYW5kIHdhcnJhbnRpZXMsIGFuZCBpZiBhCitjb3VydCByZXF1aXJlcyBhbnkgb3RoZXIgQ29udHJpYnV0b3IgdG8gcGF5IGFueSBkYW1hZ2VzIGFzIGEgcmVzdWx0LCB0aGUKK0NvbW1lcmNpYWwgQ29udHJpYnV0b3IgbXVzdCBwYXkgdGhvc2UgZGFtYWdlcy48L3NwYW4+IDwvcD4KKworPHA+PGI+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPjUuIE5PIFdBUlJBTlRZPC9zcGFuPjwvYj4gPC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+RVhDRVBUIEFTIEVYUFJFU1NMWSBTRVQgRk9SVEggSU4gVEhJUworQUdSRUVNRU5ULCBUSEUgUFJPR1JBTSBJUyBQUk9WSURFRCBPTiBBTiAmcXVvdDtBUyBJUyZxdW90OyBCQVNJUywgV0lUSE9VVAorV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBFSVRIRVIgRVhQUkVTUyBPUiBJTVBMSUVEIElOQ0xVRElORywKK1dJVEhPVVQgTElNSVRBVElPTiwgQU5ZIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBUSVRMRSwgTk9OLUlORlJJTkdFTUVOVCwKK01FUkNIQU5UQUJJTElUWSBPUiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gRWFjaCBSZWNpcGllbnQgaXMgc29sZWx5CityZXNwb25zaWJsZSBmb3IgZGV0ZXJtaW5pbmcgdGhlIGFwcHJvcHJpYXRlbmVzcyBvZiB1c2luZyBhbmQgZGlzdHJpYnV0aW5nIHRoZQorUHJvZ3JhbSBhbmQgYXNzdW1lcyBhbGwgcmlza3MgYXNzb2NpYXRlZCB3aXRoIGl0cyBleGVyY2lzZSBvZiByaWdodHMgdW5kZXIgdGhpcworQWdyZWVtZW50ICwgaW5jbHVkaW5nIGJ1dCBub3QgbGltaXRlZCB0byB0aGUgcmlza3MgYW5kIGNvc3RzIG9mIHByb2dyYW0gZXJyb3JzLAorY29tcGxpYW5jZSB3aXRoIGFwcGxpY2FibGUgbGF3cywgZGFtYWdlIHRvIG9yIGxvc3Mgb2YgZGF0YSwgcHJvZ3JhbXMgb3IKK2VxdWlwbWVudCwgYW5kIHVuYXZhaWxhYmlsaXR5IG9yIGludGVycnVwdGlvbiBvZiBvcGVyYXRpb25zLiA8L3NwYW4+PC9wPgorCis8cD48Yj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+Ni4gRElTQ0xBSU1FUiBPRiBMSUFCSUxJVFk8L3NwYW4+PC9iPiA8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5FWENFUFQgQVMgRVhQUkVTU0xZIFNFVCBGT1JUSCBJTiBUSElTCitBR1JFRU1FTlQsIE5FSVRIRVIgUkVDSVBJRU5UIE5PUiBBTlkgQ09OVFJJQlVUT1JTIFNIQUxMIEhBVkUgQU5ZIExJQUJJTElUWSBGT1IKK0FOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworKElOQ0xVRElORyBXSVRIT1VUIExJTUlUQVRJT04gTE9TVCBQUk9GSVRTKSwgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKK09GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HCitORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9SIERJU1RSSUJVVElPTiBPRgorVEhFIFBST0dSQU0gT1IgVEhFIEVYRVJDSVNFIE9GIEFOWSBSSUdIVFMgR1JBTlRFRCBIRVJFVU5ERVIsIEVWRU4gSUYgQURWSVNFRCBPRgorVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFUy48L3NwYW4+IDwvcD4KKworPHA+PGI+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPjcuIEdFTkVSQUw8L3NwYW4+PC9iPiA8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5JZiBhbnkgcHJvdmlzaW9uIG9mIHRoaXMgQWdyZWVtZW50IGlzIGludmFsaWQKK29yIHVuZW5mb3JjZWFibGUgdW5kZXIgYXBwbGljYWJsZSBsYXcsIGl0IHNoYWxsIG5vdCBhZmZlY3QgdGhlIHZhbGlkaXR5IG9yCitlbmZvcmNlYWJpbGl0eSBvZiB0aGUgcmVtYWluZGVyIG9mIHRoZSB0ZXJtcyBvZiB0aGlzIEFncmVlbWVudCwgYW5kIHdpdGhvdXQKK2Z1cnRoZXIgYWN0aW9uIGJ5IHRoZSBwYXJ0aWVzIGhlcmV0bywgc3VjaCBwcm92aXNpb24gc2hhbGwgYmUgcmVmb3JtZWQgdG8gdGhlCittaW5pbXVtIGV4dGVudCBuZWNlc3NhcnkgdG8gbWFrZSBzdWNoIHByb3Zpc2lvbiB2YWxpZCBhbmQgZW5mb3JjZWFibGUuPC9zcGFuPiA8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5JZiBSZWNpcGllbnQgaW5zdGl0dXRlcyBwYXRlbnQgbGl0aWdhdGlvbgorYWdhaW5zdCBhbnkgZW50aXR5IChpbmNsdWRpbmcgYSBjcm9zcy1jbGFpbSBvciBjb3VudGVyY2xhaW0gaW4gYSBsYXdzdWl0KQorYWxsZWdpbmcgdGhhdCB0aGUgUHJvZ3JhbSBpdHNlbGYgKGV4Y2x1ZGluZyBjb21iaW5hdGlvbnMgb2YgdGhlIFByb2dyYW0gd2l0aAorb3RoZXIgc29mdHdhcmUgb3IgaGFyZHdhcmUpIGluZnJpbmdlcyBzdWNoIFJlY2lwaWVudCdzIHBhdGVudChzKSwgdGhlbiBzdWNoCitSZWNpcGllbnQncyByaWdodHMgZ3JhbnRlZCB1bmRlciBTZWN0aW9uIDIoYikgc2hhbGwgdGVybWluYXRlIGFzIG9mIHRoZSBkYXRlCitzdWNoIGxpdGlnYXRpb24gaXMgZmlsZWQuIDwvc3Bhbj48L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5BbGwgUmVjaXBpZW50J3MgcmlnaHRzIHVuZGVyIHRoaXMgQWdyZWVtZW50CitzaGFsbCB0ZXJtaW5hdGUgaWYgaXQgZmFpbHMgdG8gY29tcGx5IHdpdGggYW55IG9mIHRoZSBtYXRlcmlhbCB0ZXJtcyBvcgorY29uZGl0aW9ucyBvZiB0aGlzIEFncmVlbWVudCBhbmQgZG9lcyBub3QgY3VyZSBzdWNoIGZhaWx1cmUgaW4gYSByZWFzb25hYmxlCitwZXJpb2Qgb2YgdGltZSBhZnRlciBiZWNvbWluZyBhd2FyZSBvZiBzdWNoIG5vbmNvbXBsaWFuY2UuIElmIGFsbCBSZWNpcGllbnQncworcmlnaHRzIHVuZGVyIHRoaXMgQWdyZWVtZW50IHRlcm1pbmF0ZSwgUmVjaXBpZW50IGFncmVlcyB0byBjZWFzZSB1c2UgYW5kCitkaXN0cmlidXRpb24gb2YgdGhlIFByb2dyYW0gYXMgc29vbiBhcyByZWFzb25hYmx5IHByYWN0aWNhYmxlLiBIb3dldmVyLAorUmVjaXBpZW50J3Mgb2JsaWdhdGlvbnMgdW5kZXIgdGhpcyBBZ3JlZW1lbnQgYW5kIGFueSBsaWNlbnNlcyBncmFudGVkIGJ5CitSZWNpcGllbnQgcmVsYXRpbmcgdG8gdGhlIFByb2dyYW0gc2hhbGwgY29udGludWUgYW5kIHN1cnZpdmUuIDwvc3Bhbj48L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5FdmVyeW9uZSBpcyBwZXJtaXR0ZWQgdG8gY29weSBhbmQgZGlzdHJpYnV0ZQorY29waWVzIG9mIHRoaXMgQWdyZWVtZW50LCBidXQgaW4gb3JkZXIgdG8gYXZvaWQgaW5jb25zaXN0ZW5jeSB0aGUgQWdyZWVtZW50IGlzCitjb3B5cmlnaHRlZCBhbmQgbWF5IG9ubHkgYmUgbW9kaWZpZWQgaW4gdGhlIGZvbGxvd2luZyBtYW5uZXIuIFRoZSBBZ3JlZW1lbnQKK1N0ZXdhcmQgcmVzZXJ2ZXMgdGhlIHJpZ2h0IHRvIHB1Ymxpc2ggbmV3IHZlcnNpb25zIChpbmNsdWRpbmcgcmV2aXNpb25zKSBvZgordGhpcyBBZ3JlZW1lbnQgZnJvbSB0aW1lIHRvIHRpbWUuIE5vIG9uZSBvdGhlciB0aGFuIHRoZSBBZ3JlZW1lbnQgU3Rld2FyZCBoYXMKK3RoZSByaWdodCB0byBtb2RpZnkgdGhpcyBBZ3JlZW1lbnQuIFRoZSBFY2xpcHNlIEZvdW5kYXRpb24gaXMgdGhlIGluaXRpYWwKK0FncmVlbWVudCBTdGV3YXJkLiBUaGUgRWNsaXBzZSBGb3VuZGF0aW9uIG1heSBhc3NpZ24gdGhlIHJlc3BvbnNpYmlsaXR5IHRvCitzZXJ2ZSBhcyB0aGUgQWdyZWVtZW50IFN0ZXdhcmQgdG8gYSBzdWl0YWJsZSBzZXBhcmF0ZSBlbnRpdHkuIEVhY2ggbmV3IHZlcnNpb24KK29mIHRoZSBBZ3JlZW1lbnQgd2lsbCBiZSBnaXZlbiBhIGRpc3Rpbmd1aXNoaW5nIHZlcnNpb24gbnVtYmVyLiBUaGUgUHJvZ3JhbQorKGluY2x1ZGluZyBDb250cmlidXRpb25zKSBtYXkgYWx3YXlzIGJlIGRpc3RyaWJ1dGVkIHN1YmplY3QgdG8gdGhlIHZlcnNpb24gb2YKK3RoZSBBZ3JlZW1lbnQgdW5kZXIgd2hpY2ggaXQgd2FzIHJlY2VpdmVkLiBJbiBhZGRpdGlvbiwgYWZ0ZXIgYSBuZXcgdmVyc2lvbiBvZgordGhlIEFncmVlbWVudCBpcyBwdWJsaXNoZWQsIENvbnRyaWJ1dG9yIG1heSBlbGVjdCB0byBkaXN0cmlidXRlIHRoZSBQcm9ncmFtCisoaW5jbHVkaW5nIGl0cyBDb250cmlidXRpb25zKSB1bmRlciB0aGUgbmV3IHZlcnNpb24uIEV4Y2VwdCBhcyBleHByZXNzbHkgc3RhdGVkCitpbiBTZWN0aW9ucyAyKGEpIGFuZCAyKGIpIGFib3ZlLCBSZWNpcGllbnQgcmVjZWl2ZXMgbm8gcmlnaHRzIG9yIGxpY2Vuc2VzIHRvCit0aGUgaW50ZWxsZWN0dWFsIHByb3BlcnR5IG9mIGFueSBDb250cmlidXRvciB1bmRlciB0aGlzIEFncmVlbWVudCwgd2hldGhlcgorZXhwcmVzc2x5LCBieSBpbXBsaWNhdGlvbiwgZXN0b3BwZWwgb3Igb3RoZXJ3aXNlLiBBbGwgcmlnaHRzIGluIHRoZSBQcm9ncmFtIG5vdAorZXhwcmVzc2x5IGdyYW50ZWQgdW5kZXIgdGhpcyBBZ3JlZW1lbnQgYXJlIHJlc2VydmVkLjwvc3Bhbj4gPC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+VGhpcyBBZ3JlZW1lbnQgaXMgZ292ZXJuZWQgYnkgdGhlIGxhd3Mgb2YgdGhlCitTdGF0ZSBvZiBOZXcgWW9yayBhbmQgdGhlIGludGVsbGVjdHVhbCBwcm9wZXJ0eSBsYXdzIG9mIHRoZSBVbml0ZWQgU3RhdGVzIG9mCitBbWVyaWNhLiBObyBwYXJ0eSB0byB0aGlzIEFncmVlbWVudCB3aWxsIGJyaW5nIGEgbGVnYWwgYWN0aW9uIHVuZGVyIHRoaXMKK0FncmVlbWVudCBtb3JlIHRoYW4gb25lIHllYXIgYWZ0ZXIgdGhlIGNhdXNlIG9mIGFjdGlvbiBhcm9zZS4gRWFjaCBwYXJ0eSB3YWl2ZXMKK2l0cyByaWdodHMgdG8gYSBqdXJ5IHRyaWFsIGluIGFueSByZXN1bHRpbmcgbGl0aWdhdGlvbi48L3NwYW4+IDwvcD4KKworPHAgY2xhc3M9TXNvTm9ybWFsPjwhW2lmICFzdXBwb3J0RW1wdHlQYXJhc10+Jm5ic3A7PCFbZW5kaWZdPjxvOnA+PC9vOnA+PC9wPgorCis8L2Rpdj4KKworPC9ib2R5PgorCis8L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51aS9ub3RpY2UuaHRtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMudWkvbm90aWNlLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzZhZjk2NgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMudWkvbm90aWNlLmh0bWwKQEAgLTAsMCArMSw3OSBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMC8vRU4iPgorPGh0bWw+Cis8aGVhZD4KKzxtZXRhIGh0dHAtZXF1aXY9Q29udGVudC1UeXBlIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1pc28tODg1OS0xIj4KKzx0aXRsZT5FY2xpcHNlLm9yZyBTb2Z0d2FyZSBVc2VyIEFncmVlbWVudDwvdGl0bGU+Cis8L2hlYWQ+CisKKzxib2R5IGxhbmc9IkVOLVVTIiBsaW5rPWJsdWUgdmxpbms9cHVycGxlPgorPGgyPkVjbGlwc2UgRm91bmRhdGlvbiBTb2Z0d2FyZSBVc2VyIEFncmVlbWVudDwvaDI+Cis8cD5NYXJjaCAxNywgMjAwNTwvcD4KKworPGgzPlVzYWdlIE9mIENvbnRlbnQ8L2gzPgorCis8cD5USEUgRUNMSVBTRSBGT1VOREFUSU9OIE1BS0VTIEFWQUlMQUJMRSBTT0ZUV0FSRSwgRE9DVU1FTlRBVElPTiwgSU5GT1JNQVRJT04gQU5EL09SIE9USEVSIE1BVEVSSUFMUyBGT1IgT1BFTiBTT1VSQ0UgUFJPSkVDVFMKKyAgIChDT0xMRUNUSVZFTFkgJnF1b3Q7Q09OVEVOVCZxdW90OykuICBVU0UgT0YgVEhFIENPTlRFTlQgSVMgR09WRVJORUQgQlkgVEhFIFRFUk1TIEFORCBDT05ESVRJT05TIE9GIFRISVMgQUdSRUVNRU5UIEFORC9PUiBUSEUgVEVSTVMgQU5ECisgICBDT05ESVRJT05TIE9GIExJQ0VOU0UgQUdSRUVNRU5UUyBPUiBOT1RJQ0VTIElORElDQVRFRCBPUiBSRUZFUkVOQ0VEIEJFTE9XLiAgQlkgVVNJTkcgVEhFIENPTlRFTlQsIFlPVSBBR1JFRSBUSEFUIFlPVVIgVVNFCisgICBPRiBUSEUgQ09OVEVOVCBJUyBHT1ZFUk5FRCBCWSBUSElTIEFHUkVFTUVOVCBBTkQvT1IgVEhFIFRFUk1TIEFORCBDT05ESVRJT05TIE9GIEFOWSBBUFBMSUNBQkxFIExJQ0VOU0UgQUdSRUVNRU5UUyBPUgorICAgTk9USUNFUyBJTkRJQ0FURUQgT1IgUkVGRVJFTkNFRCBCRUxPVy4gIElGIFlPVSBETyBOT1QgQUdSRUUgVE8gVEhFIFRFUk1TIEFORCBDT05ESVRJT05TIE9GIFRISVMgQUdSRUVNRU5UIEFORCBUSEUgVEVSTVMgQU5ECisgICBDT05ESVRJT05TIE9GIEFOWSBBUFBMSUNBQkxFIExJQ0VOU0UgQUdSRUVNRU5UUyBPUiBOT1RJQ0VTIElORElDQVRFRCBPUiBSRUZFUkVOQ0VEIEJFTE9XLCBUSEVOIFlPVSBNQVkgTk9UIFVTRSBUSEUgQ09OVEVOVC48L3A+CisgICAKKzxoMz5BcHBsaWNhYmxlIExpY2Vuc2VzPC9oMz4gICAKKyAgIAorPHA+VW5sZXNzIG90aGVyd2lzZSBpbmRpY2F0ZWQsIGFsbCBDb250ZW50IG1hZGUgYXZhaWxhYmxlIGJ5IHRoZSBFY2xpcHNlIEZvdW5kYXRpb24gaXMgcHJvdmlkZWQgdG8geW91IHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMAorICAgKCZxdW90O0VQTCZxdW90OykuICBBIGNvcHkgb2YgdGhlIEVQTCBpcyBwcm92aWRlZCB3aXRoIHRoaXMgQ29udGVudCBhbmQgaXMgYWxzbyBhdmFpbGFibGUgYXQgPGEgaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwiPmh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sPC9hPi4KKyAgIEZvciBwdXJwb3NlcyBvZiB0aGUgRVBMLCAmcXVvdDtQcm9ncmFtJnF1b3Q7IHdpbGwgbWVhbiB0aGUgQ29udGVudC48L3A+CisKKzxwPkNvbnRlbnQgaW5jbHVkZXMsIGJ1dCBpcyBub3QgbGltaXRlZCB0bywgc291cmNlIGNvZGUsIG9iamVjdCBjb2RlLCBkb2N1bWVudGF0aW9uIGFuZCBvdGhlciBmaWxlcyBtYWludGFpbmVkIGluIHRoZSBFY2xpcHNlLm9yZyBDVlMgcmVwb3NpdG9yeSAoJnF1b3Q7UmVwb3NpdG9yeSZxdW90OykgaW4gQ1ZTCisgICBtb2R1bGVzICgmcXVvdDtNb2R1bGVzJnF1b3Q7KSBhbmQgbWFkZSBhdmFpbGFibGUgYXMgZG93bmxvYWRhYmxlIGFyY2hpdmVzICgmcXVvdDtEb3dubG9hZHMmcXVvdDspLjwvcD4KKyAgIAorPHVsPgorCTxsaT5Db250ZW50IG1heSBiZSBzdHJ1Y3R1cmVkIGFuZCBwYWNrYWdlZCBpbnRvIG1vZHVsZXMgdG8gZmFjaWxpdGF0ZSBkZWxpdmVyaW5nLCBleHRlbmRpbmcsIGFuZCB1cGdyYWRpbmcgdGhlIENvbnRlbnQuICBUeXBpY2FsIG1vZHVsZXMgbWF5IGluY2x1ZGUgcGx1Zy1pbnMgKCZxdW90O1BsdWctaW5zJnF1b3Q7KSwgcGx1Zy1pbiBmcmFnbWVudHMgKCZxdW90O0ZyYWdtZW50cyZxdW90OyksIGFuZCBmZWF0dXJlcyAoJnF1b3Q7RmVhdHVyZXMmcXVvdDspLjwvbGk+CisJPGxpPkVhY2ggUGx1Zy1pbiBvciBGcmFnbWVudCBtYXkgYmUgcGFja2FnZWQgYXMgYSBzdWItZGlyZWN0b3J5IG9yIEpBUiAoSmF2YSZ0cmFkZTsgQVJjaGl2ZSkgaW4gYSBkaXJlY3RvcnkgbmFtZWQgJnF1b3Q7cGx1Z2lucyZxdW90Oy48L2xpPgorCTxsaT5BIEZlYXR1cmUgaXMgYSBidW5kbGUgb2Ygb25lIG9yIG1vcmUgUGx1Zy1pbnMgYW5kL29yIEZyYWdtZW50cyBhbmQgYXNzb2NpYXRlZCBtYXRlcmlhbC4gIEVhY2ggRmVhdHVyZSBtYXkgYmUgcGFja2FnZWQgYXMgYSBzdWItZGlyZWN0b3J5IGluIGEgZGlyZWN0b3J5IG5hbWVkICZxdW90O2ZlYXR1cmVzJnF1b3Q7LiAgV2l0aGluIGEgRmVhdHVyZSwgZmlsZXMgbmFtZWQgJnF1b3Q7ZmVhdHVyZS54bWwmcXVvdDsgbWF5IGNvbnRhaW4gYSBsaXN0IG9mIHRoZSBuYW1lcyBhbmQgdmVyc2lvbiBudW1iZXJzIG9mIHRoZSBQbHVnLWlucworICAgICAgYW5kL29yIEZyYWdtZW50cyBhc3NvY2lhdGVkIHdpdGggdGhhdCBGZWF0dXJlLjwvbGk+CisJPGxpPkZlYXR1cmVzIG1heSBhbHNvIGluY2x1ZGUgb3RoZXIgRmVhdHVyZXMgKCZxdW90O0luY2x1ZGVkIEZlYXR1cmVzJnF1b3Q7KS4gV2l0aGluIGEgRmVhdHVyZSwgZmlsZXMgbmFtZWQgJnF1b3Q7ZmVhdHVyZS54bWwmcXVvdDsgbWF5IGNvbnRhaW4gYSBsaXN0IG9mIHRoZSBuYW1lcyBhbmQgdmVyc2lvbiBudW1iZXJzIG9mIEluY2x1ZGVkIEZlYXR1cmVzLjwvbGk+Cis8L3VsPiAgIAorIAorPHA+VGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIGdvdmVybmluZyBQbHVnLWlucyBhbmQgRnJhZ21lbnRzIHNob3VsZCBiZSBjb250YWluZWQgaW4gZmlsZXMgbmFtZWQgJnF1b3Q7YWJvdXQuaHRtbCZxdW90OyAoJnF1b3Q7QWJvdXRzJnF1b3Q7KS4gVGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIGdvdmVybmluZyBGZWF0dXJlcyBhbmQKK0luY2x1ZGVkIEZlYXR1cmVzIHNob3VsZCBiZSBjb250YWluZWQgaW4gZmlsZXMgbmFtZWQgJnF1b3Q7bGljZW5zZS5odG1sJnF1b3Q7ICgmcXVvdDtGZWF0dXJlIExpY2Vuc2VzJnF1b3Q7KS4gIEFib3V0cyBhbmQgRmVhdHVyZSBMaWNlbnNlcyBtYXkgYmUgbG9jYXRlZCBpbiBhbnkgZGlyZWN0b3J5IG9mIGEgRG93bmxvYWQgb3IgTW9kdWxlCitpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0byB0aGUgZm9sbG93aW5nIGxvY2F0aW9uczo8L3A+CisKKzx1bD4KKwk8bGk+VGhlIHRvcC1sZXZlbCAocm9vdCkgZGlyZWN0b3J5PC9saT4KKwk8bGk+UGx1Zy1pbiBhbmQgRnJhZ21lbnQgZGlyZWN0b3JpZXM8L2xpPgorCTxsaT5JbnNpZGUgUGx1Zy1pbnMgYW5kIEZyYWdtZW50cyBwYWNrYWdlZCBhcyBKQVJzPC9saT4KKwk8bGk+U3ViLWRpcmVjdG9yaWVzIG9mIHRoZSBkaXJlY3RvcnkgbmFtZWQgJnF1b3Q7c3JjJnF1b3Q7IG9mIGNlcnRhaW4gUGx1Zy1pbnM8L2xpPgorCTxsaT5GZWF0dXJlIGRpcmVjdG9yaWVzPC9saT4KKzwvdWw+CisJCQorPHA+Tm90ZTogaWYgYSBGZWF0dXJlIG1hZGUgYXZhaWxhYmxlIGJ5IHRoZSBFY2xpcHNlIEZvdW5kYXRpb24gaXMgaW5zdGFsbGVkIHVzaW5nIHRoZSBFY2xpcHNlIFVwZGF0ZSBNYW5hZ2VyLCB5b3UgbXVzdCBhZ3JlZSB0byBhIGxpY2Vuc2UgKCZxdW90O0ZlYXR1cmUgVXBkYXRlIExpY2Vuc2UmcXVvdDspIGR1cmluZyB0aGUKK2luc3RhbGxhdGlvbiBwcm9jZXNzLiAgSWYgdGhlIEZlYXR1cmUgY29udGFpbnMgSW5jbHVkZWQgRmVhdHVyZXMsIHRoZSBGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlIHNob3VsZCBlaXRoZXIgcHJvdmlkZSB5b3Ugd2l0aCB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgZ292ZXJuaW5nIHRoZSBJbmNsdWRlZCBGZWF0dXJlcyBvcgoraW5mb3JtIHlvdSB3aGVyZSB5b3UgY2FuIGxvY2F0ZSB0aGVtLiAgRmVhdHVyZSBVcGRhdGUgTGljZW5zZXMgbWF5IGJlIGZvdW5kIGluIHRoZSAmcXVvdDtsaWNlbnNlJnF1b3Q7IHByb3BlcnR5IG9mIGZpbGVzIG5hbWVkICZxdW90O2ZlYXR1cmUucHJvcGVydGllcyZxdW90OyBmb3VuZCB3aXRoaW4gYSBGZWF0dXJlLgorU3VjaCBBYm91dHMsIEZlYXR1cmUgTGljZW5zZXMsIGFuZCBGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlcyBjb250YWluIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyAob3IgcmVmZXJlbmNlcyB0byBzdWNoIHRlcm1zIGFuZCBjb25kaXRpb25zKSB0aGF0IGdvdmVybiB5b3VyIHVzZSBvZiB0aGUgYXNzb2NpYXRlZCBDb250ZW50IGluCit0aGF0IGRpcmVjdG9yeS48L3A+CisKKzxwPlRIRSBBQk9VVFMsIEZFQVRVUkUgTElDRU5TRVMsIEFORCBGRUFUVVJFIFVQREFURSBMSUNFTlNFUyBNQVkgUkVGRVIgVE8gVEhFIEVQTCBPUiBPVEhFUiBMSUNFTlNFIEFHUkVFTUVOVFMsIE5PVElDRVMgT1IgVEVSTVMgQU5EIENPTkRJVElPTlMuICBTT01FIE9GIFRIRVNFCitPVEhFUiBMSUNFTlNFIEFHUkVFTUVOVFMgTUFZIElOQ0xVREUgKEJVVCBBUkUgTk9UIExJTUlURUQgVE8pOjwvcD4KKworPHVsPgorCTxsaT5Db21tb24gUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjAgKGF2YWlsYWJsZSBhdCA8YSBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2NwbC12MTAuaHRtbCI+aHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9jcGwtdjEwLmh0bWw8L2E+KTwvbGk+CisJPGxpPkFwYWNoZSBTb2Z0d2FyZSBMaWNlbnNlIDEuMSAoYXZhaWxhYmxlIGF0IDxhIGhyZWY9Imh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFIj5odHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRTwvYT4pPC9saT4KKwk8bGk+QXBhY2hlIFNvZnR3YXJlIExpY2Vuc2UgMi4wIChhdmFpbGFibGUgYXQgPGEgaHJlZj0iaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wIj5odHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjA8L2E+KTwvbGk+CisJPGxpPklCTSBQdWJsaWMgTGljZW5zZSAxLjAgKGF2YWlsYWJsZSBhdCA8YSBocmVmPSJodHRwOi8vb3NzLnNvZnR3YXJlLmlibS5jb20vZGV2ZWxvcGVyd29ya3Mvb3BlbnNvdXJjZS9saWNlbnNlMTAuaHRtbCI+aHR0cDovL29zcy5zb2Z0d2FyZS5pYm0uY29tL2RldmVsb3BlcndvcmtzL29wZW5zb3VyY2UvbGljZW5zZTEwLmh0bWw8L2E+KTwvbGk+CQorCTxsaT5NZXRybyBMaW5rIFB1YmxpYyBMaWNlbnNlIDEuMDAgKGF2YWlsYWJsZSBhdCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW5ncm91cC5vcmcvb3Blbm1vdGlmL3N1cHBvcnRlcnMvbWV0cm9saW5rL2xpY2Vuc2UuaHRtbCI+aHR0cDovL3d3dy5vcGVuZ3JvdXAub3JnL29wZW5tb3RpZi9zdXBwb3J0ZXJzL21ldHJvbGluay9saWNlbnNlLmh0bWw8L2E+KTwvbGk+CisJPGxpPk1vemlsbGEgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjEgKGF2YWlsYWJsZSBhdCA8YSBocmVmPSJodHRwOi8vd3d3Lm1vemlsbGEub3JnL01QTC9NUEwtMS4xLmh0bWwiPmh0dHA6Ly93d3cubW96aWxsYS5vcmcvTVBML01QTC0xLjEuaHRtbDwvYT4pPC9saT4KKzwvdWw+CisKKzxwPklUIElTIFlPVVIgT0JMSUdBVElPTiBUTyBSRUFEIEFORCBBQ0NFUFQgQUxMIFNVQ0ggVEVSTVMgQU5EIENPTkRJVElPTlMgUFJJT1IgVE8gVVNFIE9GIFRIRSBDT05URU5ULiAgSWYgbm8gQWJvdXQsIEZlYXR1cmUgTGljZW5zZSwgb3IgRmVhdHVyZSBVcGRhdGUgTGljZW5zZSBpcyBwcm92aWRlZCwgcGxlYXNlCitjb250YWN0IHRoZSBFY2xpcHNlIEZvdW5kYXRpb24gdG8gZGV0ZXJtaW5lIHdoYXQgdGVybXMgYW5kIGNvbmRpdGlvbnMgZ292ZXJuIHRoYXQgcGFydGljdWxhciBDb250ZW50LjwvcD4KKworPGgzPkNyeXB0b2dyYXBoeTwvaDM+CisKKzxwPkNvbnRlbnQgbWF5IGNvbnRhaW4gZW5jcnlwdGlvbiBzb2Z0d2FyZS4gVGhlIGNvdW50cnkgaW4gd2hpY2ggeW91IGFyZSBjdXJyZW50bHkgbWF5IGhhdmUgcmVzdHJpY3Rpb25zIG9uIHRoZSBpbXBvcnQsIHBvc3Nlc3Npb24sIGFuZCB1c2UsIGFuZC9vciByZS1leHBvcnQgdG8KKyAgIGFub3RoZXIgY291bnRyeSwgb2YgZW5jcnlwdGlvbiBzb2Z0d2FyZS4gQkVGT1JFIHVzaW5nIGFueSBlbmNyeXB0aW9uIHNvZnR3YXJlLCBwbGVhc2UgY2hlY2sgdGhlIGNvdW50cnkncyBsYXdzLCByZWd1bGF0aW9ucyBhbmQgcG9saWNpZXMgY29uY2VybmluZyB0aGUgaW1wb3J0LAorICAgcG9zc2Vzc2lvbiwgb3IgdXNlLCBhbmQgcmUtZXhwb3J0IG9mIGVuY3J5cHRpb24gc29mdHdhcmUsIHRvIHNlZSBpZiB0aGlzIGlzIHBlcm1pdHRlZC48L3A+CisgICAKKzxzbWFsbD5KYXZhIGFuZCBhbGwgSmF2YS1iYXNlZCB0cmFkZW1hcmtzIGFyZSB0cmFkZW1hcmtzIG9mIFN1biBNaWNyb3N5c3RlbXMsIEluYy4gaW4gdGhlIFVuaXRlZCBTdGF0ZXMsIG90aGVyIGNvdW50cmllcywgb3IgYm90aC48L3NtYWxsPiAgIAorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51aS9wbHVnaW4ucHJvcGVydGllcyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMudWkvcGx1Z2luLnByb3BlcnRpZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzE4YWM1MQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMudWkvcGx1Z2luLnByb3BlcnRpZXMKQEAgLTAsMCArMSwyNiBAQAorIy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjICogQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorIyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyMgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyMgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorIyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisjICoKKyMgKiBDb250cmlidXRvcnM6CisjICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorIyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisjIFRvIGNvZGUgZGV2ZWxvcGVyOgorIyAgIERvIE5PVCBjaGFuZ2UgdGhlIHByb3BlcnRpZXMgYmV0d2VlbiB0aGlzIGxpbmUgYW5kIHRoZQorIyAgICIlJSUgRU5EIE9GIFRSQU5TTEFURUQgUFJPUEVSVElFUyAlJSUiIGxpbmUuCisjICAgTWFrZSBhIG5ldyBwcm9wZXJ0eSBuYW1lLCBhcHBlbmQgdG8gdGhlIGVuZCBvZiB0aGUgZmlsZSBhbmQgY2hhbmdlCisjICAgdGhlIGNvZGUgdG8gdXNlIHRoZSBuZXcgcHJvcGVydHkuCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyMgJSUlIEVORCBPRiBUUkFOU0xBVEVEIFBST1BFUlRJRVMgJSUlCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK3BsdWdpbk5hbWUgPSBTVEVNIENvcmUgVUkgVGVzdCBTdWl0ZQorcHJvdmlkZXJOYW1lID0gRWNsaXBzZS5vcmcKKwpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS90ZXN0cy91aS9BY3RpdmF0b3IuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMudWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdGVzdHMvdWkvQWN0aXZhdG9yLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTZlZjhhMQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMudWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdGVzdHMvdWkvQWN0aXZhdG9yLmphdmEKQEAgLTAsMCArMSw2MSBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnVpOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLnBsdWdpbi5BYnN0cmFjdFVJUGx1Z2luOworaW1wb3J0IG9yZy5vc2dpLmZyYW1ld29yay5CdW5kbGVDb250ZXh0OworCisvKioKKyAqIFRoZSBhY3RpdmF0b3IgY2xhc3MgY29udHJvbHMgdGhlIHBsdWctaW4gbGlmZSBjeWNsZQorICovCitwdWJsaWMgY2xhc3MgQWN0aXZhdG9yIGV4dGVuZHMgQWJzdHJhY3RVSVBsdWdpbiB7CisKKwkvKioKKwkgKiBUaGUgcGx1Zy1pbiBJRAorCSAqLyAKKwlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBQTFVHSU5fSUQgPSAib3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51aSI7CisKKwkvLyBUaGUgc2hhcmVkIGluc3RhbmNlCisJcHJpdmF0ZSBzdGF0aWMgQWN0aXZhdG9yIHBsdWdpbjsKKwkKKwkvKioKKwkgKiBUaGUgY29uc3RydWN0b3IKKwkgKi8KKwlwdWJsaWMgQWN0aXZhdG9yKCkgeworCQlwbHVnaW4gPSB0aGlzOworCX0KKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2UudWkucGx1Z2luLkFic3RyYWN0VUlQbHVnaW4jc3RhcnQob3JnLm9zZ2kuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHQpCisJICovCisJcHVibGljIHZvaWQgc3RhcnQoQnVuZGxlQ29udGV4dCBjb250ZXh0KSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJc3VwZXIuc3RhcnQoY29udGV4dCk7CisJfQorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS51aS5wbHVnaW4uQWJzdHJhY3RVSVBsdWdpbiNzdG9wKG9yZy5vc2dpLmZyYW1ld29yay5CdW5kbGVDb250ZXh0KQorCSAqLworCXB1YmxpYyB2b2lkIHN0b3AoQnVuZGxlQ29udGV4dCBjb250ZXh0KSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJcGx1Z2luID0gbnVsbDsKKwkJc3VwZXIuc3RvcChjb250ZXh0KTsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBzaGFyZWQgaW5zdGFuY2UKKwkgKgorCSAqIEByZXR1cm4gdGhlIHNoYXJlZCBpbnN0YW5jZQorCSAqLworCXB1YmxpYyBzdGF0aWMgQWN0aXZhdG9yIGdldERlZmF1bHQoKSB7CisJCXJldHVybiBwbHVnaW47CisJfQorCit9IC8vIEFjdGl2YXRvcgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS90ZXN0cy91aS9VSVRlc3RzLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3Rlc3RzL3VpL1VJVGVzdHMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YzA5MzY5Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS90ZXN0cy91aS9VSVRlc3RzLmphdmEKQEAgLTAsMCArMSw1OSBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnVpOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAKKyAqIENvcHlyaWdodCAoYykgMjAxMSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4gCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIAorICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wIAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQgCisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbCAKKyAqIAorICogQ29udHJpYnV0b3JzOiAKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0OworaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0U3VpdGU7CitpbXBvcnQganVuaXQudGV4dHVpLlRlc3RSdW5uZXI7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnVpLnZpZXdzLm1hcC5TdGVtUG9seWdvblRlc3Q7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS51aS52aWV3cy5tYXAuU3RlbVBvbHlnb25zTGlzdFRlc3Q7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIEEgdGVzdCBzdWl0ZSBmb3IgdGhlICc8ZW0+PGI+c3RhbmRhcmQ8L2I+PC9lbT4nIHBhY2thZ2UuCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIFVJVGVzdHMgZXh0ZW5kcyBUZXN0U3VpdGUgeworCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgeworCQlUZXN0UnVubmVyLnJ1bihzdWl0ZSgpKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgc3RhdGljIFRlc3Qgc3VpdGUoKSB7CisJCVRlc3RTdWl0ZSBzdWl0ZSA9IG5ldyBVSVRlc3RzKCJTVEVNIFVJIFRlc3RzIik7CisJCXN1aXRlLmFkZFRlc3RTdWl0ZShTdGVtUG9seWdvbnNMaXN0VGVzdC5jbGFzcyk7CisJCXN1aXRlLmFkZFRlc3RTdWl0ZShTdGVtUG9seWdvblRlc3QuY2xhc3MpOworCQlyZXR1cm4gc3VpdGU7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFVJVGVzdHMoU3RyaW5nIG5hbWUpIHsKKwkJc3VwZXIobmFtZSk7CisJfQorCit9IC8vU3RhbmRhcmRUZXN0cwpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS92aWV3cy9tYXAvU3RlbVBvbHlnb25UZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3ZpZXdzL21hcC9TdGVtUG9seWdvblRlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYmQyNWFlCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS92aWV3cy9tYXAvU3RlbVBvbHlnb25UZXN0LmphdmEKQEAgLTAsMCArMSw5OSBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnVpLnZpZXdzLm1hcDsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuIAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyAKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0IAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwgCisgKiAKKyAqIENvbnRyaWJ1dG9yczogCisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwuVGVzdFV0aWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS51aS52aWV3cy5nZW9ncmFwaGljLm1hcC5TdGVtUG9seWdvbjsKKworLyoqCisgKiBUaGlzIGNsYXNzIGlzIGEgVGVzdENhc2UgZm9yIHRoZSBTdGVtUG9seWdvbiBjbGFzcy4KKyAqIAorICovCitwdWJsaWMgY2xhc3MgU3RlbVBvbHlnb25UZXN0IGV4dGVuZHMgVGVzdENhc2UgeworCisJcHJvdGVjdGVkIFN0ZW1Qb2x5Z29uIGZpeHR1cmUgPSBudWxsOworCisJcHJvdGVjdGVkIGRvdWJsZSBUSFJFU0hPTEQgPSAwLjAwMDAwMTsKKworLy8JLyoqCisvLwkgKiB0aGUgZGVmYXVsdCBGb3JlR3JvdW5kIENvbG9yIEtleQorLy8JICovCisvLwlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgREVGQVVMVF9DT0xPUl9LRVkgPSBWaXN1YWxpemF0aW9uUHJlZmVyZW5jZVBhZ2UuRk9SRUdST1VORF9BVFRSSUJVVEVfTkFNRV9ERUZBVUxUX1NUUklORzsKKworCS8qKgorCSAqIENvbnN0cnVjdHMgYSB0ZXN0IGNhc2Ugd2l0aCB0aGUgZ2l2ZW4gbmFtZS4KKwkgKiAKKwkgKiBAcGFyYW0gbmFtZQorCSAqLworCXB1YmxpYyBTdGVtUG9seWdvblRlc3QoZmluYWwgU3RyaW5nIG5hbWUpIHsKKwkJc3VwZXIobmFtZSk7CisJfQorCisJLyoqCisJICogQ3JlYXRlcyBhbiBTdGVtUG9seWdvbiBvYmplY3QuCisJICogCisJICogQHJldHVybiBTdGVtUG9seWdvbgorCSAqLworCXB1YmxpYyBTdGVtUG9seWdvbiBjcmVhdGVGaXh0dXJlKCkgeworCQlmaW5hbCBTdGVtUG9seWdvbiBwb2x5ID0gbmV3IFN0ZW1Qb2x5Z29uKCk7CisJCXJldHVybiBwb2x5OworCX0KKworCS8qKgorCSAqIFNldHMgdGhlIG9iamVjdCBjcmVhdGVkIHRvIGJlIHRoZSBvbmUgaGVsZCBieSB0aGUgY2xhc3MuCisJICogCisJICogQHBhcmFtIGZpeHR1cmUKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBzZXRGaXh0dXJlKGZpbmFsIFN0ZW1Qb2x5Z29uIGZpeHR1cmUpIHsKKwkJdGhpcy5maXh0dXJlID0gZml4dHVyZTsKKwl9CisKKwlAU3VwcHJlc3NXYXJuaW5ncygidW51c2VkIikKKwlwcml2YXRlIFN0ZW1Qb2x5Z29uIGdldEZpeHR1cmUoKSB7CisJCXJldHVybiBmaXh0dXJlOworCX0KKworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIHNldFVwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCVRlc3RVdGlsLnJlc2V0Q291bnRlcnMoKTsKKwkJc2V0Rml4dHVyZShjcmVhdGVGaXh0dXJlKCkpOworCX0KKworCS8qKgorCSAqIENoZWNrcyB0aGF0IHRoZSBwb2x5Z29uIGNyZWF0ZWQgaXMgZW1wdHkuCisJICogCisJICovCisJcHVibGljIHZvaWQgdGVzdFN0ZW1Qb2x5Z29uKCkgeworCQlmaW5hbCBTdGVtUG9seWdvbiBwb2x5ID0gY3JlYXRlRml4dHVyZSgpOworCQlhc3NlcnRUcnVlKHBvbHkuZ2V0TnVtYmVyT2ZQb2ludHMoKSA9PSAwKTsKKwl9CisKKy8vCS8qKgorLy8JICogVGVzdHMgdGhlIHJldHJpZXZhbCBpZiBhIHJlbGF0aXZlIHZhbHVlIG9mIGEgcG9seWdvbi4KKy8vCSAqIAorLy8JICovCisvLwlwdWJsaWMgdm9pZCB0ZXN0R2V0UmVsYXRpdmVWYWx1ZSgpIHsKKy8vCQlmaW5hbCBTdGVtUG9seWdvbiBwb2x5ID0gY3JlYXRlRml4dHVyZSgpOworLy8KKy8vCQlwb2x5LnNldFJlbGF0aXZlVmFsdWUoREVGQVVMVF9DT0xPUl9LRVksIDAuNSk7CisvLworLy8JCWZpbmFsIE1hcDxTdHJpbmcsIERvdWJsZT4gcmVsYXRpdmVWYWx1ZU1hcCA9IHBvbHkuZ2V0UmVsYXRpdmVWYWx1ZU1hcCgpOworLy8KKy8vCQlmaW5hbCBkb3VibGUgcmV0VmFsID0gcmVsYXRpdmVWYWx1ZU1hcC5nZXQoREVGQVVMVF9DT0xPUl9LRVkpCisvLwkJCQkuZG91YmxlVmFsdWUoKTsKKy8vCisvLwkJYXNzZXJ0VHJ1ZShNYXRoLmFicyhyZXRWYWwgLSAwLjUpIDwgVEhSRVNIT0xEKTsKKy8vCX0KKworfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS92aWV3cy9tYXAvU3RlbVBvbHlnb25zTGlzdFRlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMudWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvdmlld3MvbWFwL1N0ZW1Qb2x5Z29uc0xpc3RUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjNlODMxMgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMudWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvdmlld3MvbWFwL1N0ZW1Qb2x5Z29uc0xpc3RUZXN0LmphdmEKQEAgLTAsMCArMSw3OSBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnVpLnZpZXdzLm1hcDsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuIAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyAKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0IAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwgCisgKiAKKyAqIENvbnRyaWJ1dG9yczogCisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwuVGVzdFV0aWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS51aS52aWV3cy5nZW9ncmFwaGljLm1hcC5TdGVtUG9seWdvbnNMaXN0OworCisvKioKKyAqIFRoaXMgY2xhc3MgaXMgYSBUZXN0Q2FzZSBmb3IgdGhlIFN0ZW1Qb2x5Z29uc0xpc3QgY2xhc3MuCisgKiAKKyAqLworcHVibGljIGNsYXNzIFN0ZW1Qb2x5Z29uc0xpc3RUZXN0IGV4dGVuZHMgVGVzdENhc2UgeworCisJcHJvdGVjdGVkIFN0ZW1Qb2x5Z29uc0xpc3QgZml4dHVyZSA9IG51bGw7CisKKwlwcm90ZWN0ZWQgZG91YmxlIFRIUkVTSE9MRCA9IDAuMDAwMDAxOworCisJLyoqCisJICogQ29uc3RydWN0cyBhIHRlc3QgY2FzZSB3aXRoIHRoZSBnaXZlbiBuYW1lLgorCSAqIAorCSAqIEBwYXJhbSBuYW1lCisJICovCisJcHVibGljIFN0ZW1Qb2x5Z29uc0xpc3RUZXN0KFN0cmluZyBuYW1lKSB7CisJCXN1cGVyKG5hbWUpOworCX0KKworCS8qKgorCSAqIENyZWF0ZXMgYW4gU3RlbVBvbHlnb25zTGlzdCBvYmplY3QuCisJICogCisJICogQHJldHVybiBTdGVtUG9seWdvbnNMaXN0CisJICovCisJcHVibGljIFN0ZW1Qb2x5Z29uc0xpc3QgY3JlYXRlRml4dHVyZSgpIHsKKwkJZmluYWwgU3RlbVBvbHlnb25zTGlzdCBwb2x5TGlzdCA9IG5ldyBTdGVtUG9seWdvbnNMaXN0KCk7CisJCXJldHVybiBwb2x5TGlzdDsKKwl9CisKKwkvKioKKwkgKiBTZXRzIHRoZSB0ZXN0IG9iamVjdCB0byBiZSB0aGUgb25lIGhlbGQgYnkgdGhlIGNsYXNzLgorCSAqIAorCSAqIEBwYXJhbSBmaXh0dXJlCisJICovCisJcHJvdGVjdGVkIHZvaWQgc2V0Rml4dHVyZShTdGVtUG9seWdvbnNMaXN0IGZpeHR1cmUpIHsKKwkJdGhpcy5maXh0dXJlID0gZml4dHVyZTsKKwl9CisKKwlAU3VwcHJlc3NXYXJuaW5ncygidW51c2VkIikKKwlwcml2YXRlIFN0ZW1Qb2x5Z29uc0xpc3QgZ2V0Rml4dHVyZSgpIHsKKwkJcmV0dXJuIGZpeHR1cmU7CisJfQorCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgc2V0VXAoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJVGVzdFV0aWwucmVzZXRDb3VudGVycygpOworCQlzZXRGaXh0dXJlKGNyZWF0ZUZpeHR1cmUoKSk7CisJfQorCisJLyoqCisJICogQ2hlY2tzIHRoYXQgdGhlIGNyZWF0ZWQgcG9seWdvbnMgbGlzdCBpcyBlbXB0eS4KKwkgKiAKKwkgKi8KKwlwdWJsaWMgdm9pZCB0ZXN0U3RlbVBvbHlnb25zTGlzdCgpIHsKKworCQlmaW5hbCBTdGVtUG9seWdvbnNMaXN0IHBvbHlMaXN0ID0gY3JlYXRlRml4dHVyZSgpOworCQlhc3NlcnRUcnVlKHBvbHlMaXN0LmlzRW1wdHkoKSk7CisKKwl9CisKK30gLy8gU3RlbVBvbHlnb25zTGlzdFRlc3QKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMudWkvdGVzdC54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnVpL3Rlc3QueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE3NjkwYzAKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnVpL3Rlc3QueG1sCkBAIC0wLDAgKzEsNTMgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+CisKKzxwcm9qZWN0IG5hbWU9InRlc3RzdWl0ZSIgZGVmYXVsdD0icnVuIiBiYXNlZGlyPSIuIj4KKyAgPCEtLSBUaGUgcHJvcGVydHkgJHtlY2xpcHNlLWhvbWV9IHNob3VsZCBiZSBwYXNzZWQgaW50byB0aGlzIHNjcmlwdCAtLT4KKyAgPCEtLSBTZXQgYSBtZWFuaW5nZnVsIGRlZmF1bHQgdmFsdWUgZm9yIHdoZW4gaXQgaXMgbm90LiAtLT4KKyAgPHByb3BlcnR5IG5hbWU9ImVjbGlwc2UtaG9tZSIgdmFsdWU9IiIvPgorCisKKyAgPCEtLSBzZXRzIHRoZSBwcm9wZXJ0aWVzIGVjbGlwc2UtaG9tZSwgYW5kIGxpYnJhcnktZmlsZSAtLT4KKyAgPHByb3BlcnR5IG5hbWU9InBsdWdpbi1uYW1lIiB2YWx1ZT0ib3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51aSIvPgorICA8cHJvcGVydHkgbmFtZT0ibGlicmFyeS1maWxlIgorICAgICAgICAgICAgdmFsdWU9IiR7ZWNsaXBzZS1ob21lfS9wbHVnaW5zL29yZy5lY2xpcHNlLnRlc3RfMy4zLjAvbGlicmFyeS54bWwiLz4KKworICA8IS0tIFRoaXMgdGFyZ2V0IGhvbGRzIGFsbCBpbml0aWFsaXphdGlvbiBjb2RlIHRoYXQgbmVlZHMgdG8gYmUgZG9uZSBmb3IgLS0+CisgIDwhLS0gYWxsIHRlc3RzIHRoYXQgYXJlIHRvIGJlIHJ1bi4gSW5pdGlhbGl6YXRpb24gZm9yIGluZGl2aWR1YWwgdGVzdHMgLS0+CisgIDwhLS0gc2hvdWxkIGJlIGRvbmUgd2l0aGluIHRoZSBib2R5IG9mIHRoZSBzdWl0ZSB0YXJnZXQuIC0tPgorICA8dGFyZ2V0IG5hbWU9ImluaXQiPgorICAgIDx0c3RhbXAvPgorICAgIDxkZWxldGU+CisgICAgICA8ZmlsZXNldCBkaXI9IiR7ZWNsaXBzZS1ob21lfSIgaW5jbHVkZXM9Im9yZyoueG1sIi8+CisgICAgPC9kZWxldGU+CisgIDwvdGFyZ2V0PgorCisgIDwhLS0gVGhpcyB0YXJnZXQgZGVmaW5lcyB0aGUgdGVzdHMgdGhhdCBuZWVkIHRvIGJlIHJ1bi4gLS0+CisgIDx0YXJnZXQgbmFtZT0ic3VpdGUiPgorICAgIDxwcm9wZXJ0eSBuYW1lPSJkYXRhLWRpciIgdmFsdWU9IiR7ZWNsaXBzZS1ob21lfS90bXAiLz4KKyAgICA8ZGVsZXRlIGRpcj0iJHtkYXRhLWRpcn0iIHF1aWV0PSJ0cnVlIi8+CisgICAgPGFudCB0YXJnZXQ9InVpLXRlc3QiIGFudGZpbGU9IiR7bGlicmFyeS1maWxlfSIgZGlyPSIke2VjbGlwc2UtaG9tZX0iPgorICAgICAgPHByb3BlcnR5IG5hbWU9ImRhdGEtZGlyIiB2YWx1ZT0iJHtkYXRhLWRpcn0iLz4KKyAgICAgIDxwcm9wZXJ0eSBuYW1lPSJwbHVnaW4tbmFtZSIgdmFsdWU9IiR7cGx1Z2luLW5hbWV9Ii8+CisgICAgICA8cHJvcGVydHkgbmFtZT0iY2xhc3NuYW1lIiB2YWx1ZT0ib3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51aS5VSVRlc3RzIi8+CisgICAgPC9hbnQ+CisgIDwvdGFyZ2V0PgorCisgIDwhLS0gVGhpcyB0YXJnZXQgaG9sZHMgY29kZSB0byBjbGVhbnVwIHRoZSB0ZXN0aW5nIGVudmlyb25tZW50IGFmdGVyIC0tPgorICA8IS0tIGFmdGVyIGFsbCBvZiB0aGUgdGVzdHMgaGF2ZSBiZWVuIHJ1bi4gWW91IGNhbiB1c2UgdGhpcyB0YXJnZXQgdG8gLS0+CisgIDwhLS0gZGVsZXRlIHRlbXBvcmFyeSBmaWxlcyB0aGF0IGhhdmUgYmVlbiBjcmVhdGVkLiAtLT4KKyAgPHRhcmdldCBuYW1lPSJjbGVhbnVwIj4KKyAgPC90YXJnZXQ+CisKKyAgPCEtLSBUaGlzIHRhcmdldCBydW5zIHRoZSB0ZXN0IHN1aXRlLiBBbnkgYWN0aW9ucyB0aGF0IG5lZWQgdG8gaGFwcGVuIC0tPgorICA8IS0tIGFmdGVyIGFsbCB0aGUgdGVzdHMgaGF2ZSBiZWVuIHJ1biBzaG91bGQgZ28gaGVyZS4gLS0+CisgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LHN1aXRlLGNsZWFudXAiPgorICAgIDxhbnQgdGFyZ2V0PSJjb2xsZWN0IiBhbnRmaWxlPSIke2xpYnJhcnktZmlsZX0iIGRpcj0iJHtlY2xpcHNlLWhvbWV9Ij4KKyAgICAgIDxwcm9wZXJ0eSBuYW1lPSJpbmNsdWRlcyIgdmFsdWU9Im9yZyoueG1sIi8+CisgICAgICA8cHJvcGVydHkgbmFtZT0ib3V0cHV0LWZpbGUiIHZhbHVlPSIke3BsdWdpbi1uYW1lfS54bWwiLz4KKyAgICA8L2FudD4KKyAgPC90YXJnZXQ+CisKKyAgPCEtLSBUaGlzIHRhcmdldCBydW5zIHRoZSBwZXJmb3JtYW5jZSB0ZXN0IHN1aXRlcy4gLS0+CisgIDx0YXJnZXQgbmFtZT0icGVyZm9ybWFuY2UiPgorICA8L3RhcmdldD4KKzwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC8uY2xhc3NwYXRoIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsLy5jbGFzc3BhdGgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzA0ZTg2MQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC8uY2xhc3NwYXRoCkBAIC0wLDAgKzEsNyBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxjbGFzc3BhdGg+CisJPGNsYXNzcGF0aGVudHJ5IGtpbmQ9InNyYyIgcGF0aD0ic3JjIi8+CisJPGNsYXNzcGF0aGVudHJ5IGtpbmQ9ImNvbiIgcGF0aD0ib3JnLmVjbGlwc2UuamR0LmxhdW5jaGluZy5KUkVfQ09OVEFJTkVSL29yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC5kZWJ1Zy51aS5sYXVuY2hlci5TdGFuZGFyZFZNVHlwZS9KMlNFLTEuNSIvPgorCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJjb24iIHBhdGg9Im9yZy5lY2xpcHNlLnBkZS5jb3JlLnJlcXVpcmVkUGx1Z2lucyIvPgorCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJvdXRwdXQiIHBhdGg9ImJpbiIvPgorPC9jbGFzc3BhdGg+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwvLnByb2plY3QgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwvLnByb2plY3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmFhOTA4NQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC8ucHJvamVjdApAQCAtMCwwICsxLDI4IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPHByb2plY3REZXNjcmlwdGlvbj4KKwk8bmFtZT5vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWw8L25hbWU+CisJPGNvbW1lbnQ+PC9jb21tZW50PgorCTxwcm9qZWN0cz4KKwk8L3Byb2plY3RzPgorCTxidWlsZFNwZWM+CisJCTxidWlsZENvbW1hbmQ+CisJCQk8bmFtZT5vcmcuZWNsaXBzZS5qZHQuY29yZS5qYXZhYnVpbGRlcjwvbmFtZT4KKwkJCTxhcmd1bWVudHM+CisJCQk8L2FyZ3VtZW50cz4KKwkJPC9idWlsZENvbW1hbmQ+CisJCTxidWlsZENvbW1hbmQ+CisJCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuTWFuaWZlc3RCdWlsZGVyPC9uYW1lPgorCQkJPGFyZ3VtZW50cz4KKwkJCTwvYXJndW1lbnRzPgorCQk8L2J1aWxkQ29tbWFuZD4KKwkJPGJ1aWxkQ29tbWFuZD4KKwkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5TY2hlbWFCdWlsZGVyPC9uYW1lPgorCQkJPGFyZ3VtZW50cz4KKwkJCTwvYXJndW1lbnRzPgorCQk8L2J1aWxkQ29tbWFuZD4KKwk8L2J1aWxkU3BlYz4KKwk8bmF0dXJlcz4KKwkJPG5hdHVyZT5vcmcuZWNsaXBzZS5qZHQuY29yZS5qYXZhbmF0dXJlPC9uYXR1cmU+CisJCTxuYXR1cmU+b3JnLmVjbGlwc2UucGRlLlBsdWdpbk5hdHVyZTwvbmF0dXJlPgorCTwvbmF0dXJlcz4KKzwvcHJvamVjdERlc2NyaXB0aW9uPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGUzMzRlYgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMKQEAgLTAsMCArMSw2OSBAQAorI01vbiBKYW4gMjEgMTI6NTA6MjQgRVNUIDIwMDgKK2VjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb2RlZ2VuLnRhcmdldFBsYXRmb3JtPTEuNQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29tcGxpYW5jZT0xLjUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmRvYy5jb21tZW50LnN1cHBvcnQ9ZW5hYmxlZAorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5hbm5vdGF0aW9uU3VwZXJJbnRlcmZhY2U9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5hc3NlcnRJZGVudGlmaWVyPWVycm9yCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmF1dG9ib3hpbmc9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5kZXByZWNhdGlvbj1pZ25vcmUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZGVwcmVjYXRpb25JbkRlcHJlY2F0ZWRDb2RlPWRpc2FibGVkCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRlcHJlY2F0aW9uV2hlbk92ZXJyaWRpbmdEZXByZWNhdGVkTWV0aG9kPWRpc2FibGVkCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRpc2NvdXJhZ2VkUmVmZXJlbmNlPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZW1wdHlTdGF0ZW1lbnQ9aWdub3JlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmVudW1JZGVudGlmaWVyPWVycm9yCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZhbGx0aHJvdWdoQ2FzZT1pZ25vcmUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZmllbGRIaWRpbmc9aWdub3JlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZpbmFsUGFyYW1ldGVyQm91bmQ9aWdub3JlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZpbmFsbHlCbG9ja05vdENvbXBsZXRpbmdOb3JtYWxseT13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZvcmJpZGRlblJlZmVyZW5jZT1lcnJvcgorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5oaWRkZW5DYXRjaEJsb2NrPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW5jb21wYXRpYmxlTm9uSW5oZXJpdGVkSW50ZXJmYWNlTWV0aG9kPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW5jb21wbGV0ZUVudW1Td2l0Y2g9aWdub3JlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmluZGlyZWN0U3RhdGljQWNjZXNzPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW52YWxpZEphdmFkb2M9aWdub3JlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmludmFsaWRKYXZhZG9jVGFncz1lbmFibGVkCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmludmFsaWRKYXZhZG9jVGFnc0RlcHJlY2F0ZWRSZWY9ZW5hYmxlZAorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbnZhbGlkSmF2YWRvY1RhZ3NOb3RWaXNpYmxlUmVmPWVuYWJsZWQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW52YWxpZEphdmFkb2NUYWdzVmlzaWJpbGl0eT1wdWJsaWMKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubG9jYWxWYXJpYWJsZUhpZGluZz1pZ25vcmUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWV0aG9kV2l0aENvbnN0cnVjdG9yTmFtZT13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdEZXByZWNhdGVkQW5ub3RhdGlvbj1pZ25vcmUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0phdmFkb2NDb21tZW50cz1pZ25vcmUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0phdmFkb2NDb21tZW50c092ZXJyaWRpbmc9ZW5hYmxlZAorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nSmF2YWRvY0NvbW1lbnRzVmlzaWJpbGl0eT1wdWJsaWMKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0phdmFkb2NUYWdzPWlnbm9yZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nSmF2YWRvY1RhZ3NPdmVycmlkaW5nPWVuYWJsZWQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0phdmFkb2NUYWdzVmlzaWJpbGl0eT1wdWJsaWMKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ092ZXJyaWRlQW5ub3RhdGlvbj1pZ25vcmUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ1NlcmlhbFZlcnNpb249d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5ub0VmZmVjdEFzc2lnbm1lbnQ9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5ub0ltcGxpY2l0U3RyaW5nQ29udmVyc2lvbj13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm5vbkV4dGVybmFsaXplZFN0cmluZ0xpdGVyYWw9aWdub3JlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm51bGxSZWZlcmVuY2U9aWdub3JlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm92ZXJyaWRpbmdQYWNrYWdlRGVmYXVsdE1ldGhvZD13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnBhcmFtZXRlckFzc2lnbm1lbnQ9aWdub3JlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnBvc3NpYmxlQWNjaWRlbnRhbEJvb2xlYW5Bc3NpZ25tZW50PXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ucmF3VHlwZVJlZmVyZW5jZT1pZ25vcmUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uc3BlY2lhbFBhcmFtZXRlckhpZGluZ0ZpZWxkPWRpc2FibGVkCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnN0YXRpY0FjY2Vzc1JlY2VpdmVyPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uc3VwcHJlc3NXYXJuaW5ncz1lbmFibGVkCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnN5bnRoZXRpY0FjY2Vzc0VtdWxhdGlvbj1pZ25vcmUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udHlwZVBhcmFtZXRlckhpZGluZz13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVuY2hlY2tlZFR5cGVPcGVyYXRpb249aWdub3JlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVuZG9jdW1lbnRlZEVtcHR5QmxvY2s9aWdub3JlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVuaGFuZGxlZFdhcm5pbmdUb2tlbj13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVubmVjZXNzYXJ5RWxzZT1pZ25vcmUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5uZWNlc3NhcnlUeXBlQ2hlY2s9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnF1YWxpZmllZEZpZWxkQWNjZXNzPWlnbm9yZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWREZWNsYXJlZFRocm93bkV4Y2VwdGlvbj13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZERlY2xhcmVkVGhyb3duRXhjZXB0aW9uV2hlbk92ZXJyaWRpbmc9ZW5hYmxlZAorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRJbXBvcnQ9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRMYWJlbD13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZExvY2FsPWlnbm9yZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRQYXJhbWV0ZXI9aWdub3JlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZFBhcmFtZXRlcldoZW5JbXBsZW1lbnRpbmdBYnN0cmFjdD1lbmFibGVkCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZFBhcmFtZXRlcldoZW5PdmVycmlkaW5nQ29uY3JldGU9ZW5hYmxlZAorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRQcml2YXRlTWVtYmVyPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udmFyYXJnc0FyZ3VtZW50TmVlZENhc3Q9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuc291cmNlPTEuNQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsL01FVEEtSU5GL01BTklGRVNULk1GIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsL01FVEEtSU5GL01BTklGRVNULk1GCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUyYTBlZTcKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwvTUVUQS1JTkYvTUFOSUZFU1QuTUYKQEAgLTAsMCArMSwyNSBAQAorTWFuaWZlc3QtVmVyc2lvbjogMS4wCitCdW5kbGUtTWFuaWZlc3RWZXJzaW9uOiAyCitCdW5kbGUtTmFtZTogJXBsdWdpbk5hbWUKK0J1bmRsZS1TeW1ib2xpY05hbWU6IG9yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbDsgc2luZ2xldG9uOj10cnVlCitCdW5kbGUtVmVyc2lvbjogMS4yLjEKK0J1bmRsZS1DbGFzc1BhdGg6IC4KK0J1bmRsZS1BY3RpdmF0b3I6IG9yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC5kZWNvcmF0b3JzLnByb3ZpZGVyLlRlc3R1dGlsaXR5RWRpdFBsdWdpbiRJbXBsZW1lbnRhdGlvbgorQnVuZGxlLVZlbmRvcjogJXByb3ZpZGVyTmFtZQorQnVuZGxlLUxvY2FsaXphdGlvbjogcGx1Z2luCitFeHBvcnQtUGFja2FnZTogb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsLAorIG9yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC5kZWNvcmF0b3JzLAorIG9yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC5kZWNvcmF0b3JzLmltcGwsCisgb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsLmRlY29yYXRvcnMucHJlc2VudGF0aW9uLAorIG9yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC5kZWNvcmF0b3JzLnByb3ZpZGVyLAorIG9yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC5kZWNvcmF0b3JzLnV0aWwsCisgb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsLmxhYmVscywKKyBvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwubGFiZWxzLmltcGwsCisgb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsLmxhYmVscy5wcmVzZW50YXRpb24sCisgb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsLmxhYmVscy5wcm92aWRlciwKKyBvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwubGFiZWxzLnV0aWwKK1JlcXVpcmUtQnVuZGxlOiBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUsCisgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucworQnVuZGxlLUFjdGl2YXRpb25Qb2xpY3k6IGxhenkKK0J1bmRsZS1SZXF1aXJlZEV4ZWN1dGlvbkVudmlyb25tZW50OiBKMlNFLTEuNQorSW1wb3J0LVBhY2thZ2U6IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5wcm92aWRlcgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsL2J1aWxkLnByb3BlcnRpZXMgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwvYnVpbGQucHJvcGVydGllcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNzA1MWU2Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsL2J1aWxkLnByb3BlcnRpZXMKQEAgLTAsMCArMSwxNiBAQAorIyA8Y29weXJpZ2h0PgorIyA8L2NvcHlyaWdodD4KKyMKKyMgJElkJAorCitiaW4uaW5jbHVkZXMgPSAuLFwKKyAgICAgICAgICAgICAgIGljb25zLyxcCisgICAgICAgICAgICAgICBNRVRBLUlORi8sXAorICAgICAgICAgICAgICAgcGx1Z2luLnhtbCxcCisgICAgICAgICAgICAgICBwbHVnaW4ucHJvcGVydGllcyxcCisgICAgICAgICAgICAgICBiaW4vLFwKKyAgICAgICAgICAgICAgIG5vdGljZS5odG1sLFwKKyAgICAgICAgICAgICAgIGVwbC12MTAuaHRtbAoramFycy5jb21waWxlLm9yZGVyID0gLgorc291cmNlLi4gPSBzcmMvCitvdXRwdXQuLiA9IGJpbi8KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC9lcGwtdjEwLmh0bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwvZXBsLXYxMC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVkNGIxOTYKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwvZXBsLXYxMC5odG1sCkBAIC0wLDAgKzEsMzI4IEBACis8aHRtbCB4bWxuczpvPSJ1cm46c2NoZW1hcy1taWNyb3NvZnQtY29tOm9mZmljZTpvZmZpY2UiCit4bWxuczp3PSJ1cm46c2NoZW1hcy1taWNyb3NvZnQtY29tOm9mZmljZTp3b3JkIgoreG1sbnM9Imh0dHA6Ly93d3cudzMub3JnL1RSL1JFQy1odG1sNDAiPgorCis8aGVhZD4KKzxtZXRhIGh0dHAtZXF1aXY9Q29udGVudC1UeXBlIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD13aW5kb3dzLTEyNTIiPgorPG1ldGEgbmFtZT1Qcm9nSWQgY29udGVudD1Xb3JkLkRvY3VtZW50PgorPG1ldGEgbmFtZT1HZW5lcmF0b3IgY29udGVudD0iTWljcm9zb2Z0IFdvcmQgOSI+Cis8bWV0YSBuYW1lPU9yaWdpbmF0b3IgY29udGVudD0iTWljcm9zb2Z0IFdvcmQgOSI+Cis8bGluayByZWw9RmlsZS1MaXN0CitocmVmPSIuL0VjbGlwc2UlMjBFUEwlMjAyMDAzXzExXzEwJTIwRmluYWxfZmlsZXMvZmlsZWxpc3QueG1sIj4KKzx0aXRsZT5FY2xpcHNlIFB1YmxpYyBMaWNlbnNlIC0gVmVyc2lvbiAxLjA8L3RpdGxlPgorPCEtLVtpZiBndGUgbXNvIDldPjx4bWw+CisgPG86RG9jdW1lbnRQcm9wZXJ0aWVzPgorICA8bzpSZXZpc2lvbj4yPC9vOlJldmlzaW9uPgorICA8bzpUb3RhbFRpbWU+MzwvbzpUb3RhbFRpbWU+CisgIDxvOkNyZWF0ZWQ+MjAwNC0wMy0wNVQyMzowMzowMFo8L286Q3JlYXRlZD4KKyAgPG86TGFzdFNhdmVkPjIwMDQtMDMtMDVUMjM6MDM6MDBaPC9vOkxhc3RTYXZlZD4KKyAgPG86UGFnZXM+NDwvbzpQYWdlcz4KKyAgPG86V29yZHM+MTYyNjwvbzpXb3Jkcz4KKyAgPG86Q2hhcmFjdGVycz45MjcwPC9vOkNoYXJhY3RlcnM+CisgICA8bzpMaW5lcz43NzwvbzpMaW5lcz4KKyAgPG86UGFyYWdyYXBocz4xODwvbzpQYXJhZ3JhcGhzPgorICA8bzpDaGFyYWN0ZXJzV2l0aFNwYWNlcz4xMTM4NDwvbzpDaGFyYWN0ZXJzV2l0aFNwYWNlcz4KKyAgPG86VmVyc2lvbj45LjQ0MDI8L286VmVyc2lvbj4KKyA8L286RG9jdW1lbnRQcm9wZXJ0aWVzPgorPC94bWw+PCFbZW5kaWZdLS0+PCEtLVtpZiBndGUgbXNvIDldPjx4bWw+CisgPHc6V29yZERvY3VtZW50PgorICA8dzpUcmFja1JldmlzaW9ucy8+CisgPC93OldvcmREb2N1bWVudD4KKzwveG1sPjwhW2VuZGlmXS0tPgorPHN0eWxlPgorPCEtLQorIC8qIEZvbnQgRGVmaW5pdGlvbnMgKi8KK0Bmb250LWZhY2UKKwl7Zm9udC1mYW1pbHk6VGFob21hOworCXBhbm9zZS0xOjIgMTEgNiA0IDMgNSA0IDQgMiA0OworCW1zby1mb250LWNoYXJzZXQ6MDsKKwltc28tZ2VuZXJpYy1mb250LWZhbWlseTpzd2lzczsKKwltc28tZm9udC1waXRjaDp2YXJpYWJsZTsKKwltc28tZm9udC1zaWduYXR1cmU6NTUzNjc5NDk1IC0yMTQ3NDgzNjQ4IDggMCA2NjA0NyAwO30KKyAvKiBTdHlsZSBEZWZpbml0aW9ucyAqLworcC5Nc29Ob3JtYWwsIGxpLk1zb05vcm1hbCwgZGl2Lk1zb05vcm1hbAorCXttc28tc3R5bGUtcGFyZW50OiIiOworCW1hcmdpbjowaW47CisJbWFyZ2luLWJvdHRvbTouMDAwMXB0OworCW1zby1wYWdpbmF0aW9uOndpZG93LW9ycGhhbjsKKwlmb250LXNpemU6MTIuMHB0OworCWZvbnQtZmFtaWx5OiJUaW1lcyBOZXcgUm9tYW4iOworCW1zby1mYXJlYXN0LWZvbnQtZmFtaWx5OiJUaW1lcyBOZXcgUm9tYW4iO30KK3AKKwl7bWFyZ2luLXJpZ2h0OjBpbjsKKwltc28tbWFyZ2luLXRvcC1hbHQ6YXV0bzsKKwltc28tbWFyZ2luLWJvdHRvbS1hbHQ6YXV0bzsKKwltYXJnaW4tbGVmdDowaW47CisJbXNvLXBhZ2luYXRpb246d2lkb3ctb3JwaGFuOworCWZvbnQtc2l6ZToxMi4wcHQ7CisJZm9udC1mYW1pbHk6IlRpbWVzIE5ldyBSb21hbiI7CisJbXNvLWZhcmVhc3QtZm9udC1mYW1pbHk6IlRpbWVzIE5ldyBSb21hbiI7fQorcC5CYWxsb29uVGV4dCwgbGkuQmFsbG9vblRleHQsIGRpdi5CYWxsb29uVGV4dAorCXttc28tc3R5bGUtbmFtZToiQmFsbG9vbiBUZXh0IjsKKwltYXJnaW46MGluOworCW1hcmdpbi1ib3R0b206LjAwMDFwdDsKKwltc28tcGFnaW5hdGlvbjp3aWRvdy1vcnBoYW47CisJZm9udC1zaXplOjguMHB0OworCWZvbnQtZmFtaWx5OlRhaG9tYTsKKwltc28tZmFyZWFzdC1mb250LWZhbWlseToiVGltZXMgTmV3IFJvbWFuIjt9CitAcGFnZSBTZWN0aW9uMQorCXtzaXplOjguNWluIDExLjBpbjsKKwltYXJnaW46MS4waW4gMS4yNWluIDEuMGluIDEuMjVpbjsKKwltc28taGVhZGVyLW1hcmdpbjouNWluOworCW1zby1mb290ZXItbWFyZ2luOi41aW47CisJbXNvLXBhcGVyLXNvdXJjZTowO30KK2Rpdi5TZWN0aW9uMQorCXtwYWdlOlNlY3Rpb24xO30KKy0tPgorPC9zdHlsZT4KKzwvaGVhZD4KKworPGJvZHkgbGFuZz1FTi1VUyBzdHlsZT0ndGFiLWludGVydmFsOi41aW4nPgorCis8ZGl2IGNsYXNzPVNlY3Rpb24xPgorCis8cCBhbGlnbj1jZW50ZXIgc3R5bGU9J3RleHQtYWxpZ246Y2VudGVyJz48Yj5FY2xpcHNlIFB1YmxpYyBMaWNlbnNlIC0gdiAxLjA8L2I+Cis8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5USEUgQUNDT01QQU5ZSU5HIFBST0dSQU0gSVMgUFJPVklERUQgVU5ERVIKK1RIRSBURVJNUyBPRiBUSElTIEVDTElQU0UgUFVCTElDIExJQ0VOU0UgKCZxdW90O0FHUkVFTUVOVCZxdW90OykuIEFOWSBVU0UsCitSRVBST0RVQ1RJT04gT1IgRElTVFJJQlVUSU9OIE9GIFRIRSBQUk9HUkFNIENPTlNUSVRVVEVTIFJFQ0lQSUVOVCdTIEFDQ0VQVEFOQ0UKK09GIFRISVMgQUdSRUVNRU5ULjwvc3Bhbj4gPC9wPgorCis8cD48Yj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+MS4gREVGSU5JVElPTlM8L3NwYW4+PC9iPiA8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4mcXVvdDtDb250cmlidXRpb24mcXVvdDsgbWVhbnM6PC9zcGFuPiA8L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmEpCitpbiB0aGUgY2FzZSBvZiB0aGUgaW5pdGlhbCBDb250cmlidXRvciwgdGhlIGluaXRpYWwgY29kZSBhbmQgZG9jdW1lbnRhdGlvbgorZGlzdHJpYnV0ZWQgdW5kZXIgdGhpcyBBZ3JlZW1lbnQsIGFuZDxiciBjbGVhcj1sZWZ0PgorYikgaW4gdGhlIGNhc2Ugb2YgZWFjaCBzdWJzZXF1ZW50IENvbnRyaWJ1dG9yOjwvc3Bhbj48L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmkpCitjaGFuZ2VzIHRvIHRoZSBQcm9ncmFtLCBhbmQ8L3NwYW4+PC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5paSkKK2FkZGl0aW9ucyB0byB0aGUgUHJvZ3JhbTs8L3NwYW4+PC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz53aGVyZQorc3VjaCBjaGFuZ2VzIGFuZC9vciBhZGRpdGlvbnMgdG8gdGhlIFByb2dyYW0gb3JpZ2luYXRlIGZyb20gYW5kIGFyZSBkaXN0cmlidXRlZAorYnkgdGhhdCBwYXJ0aWN1bGFyIENvbnRyaWJ1dG9yLiBBIENvbnRyaWJ1dGlvbiAnb3JpZ2luYXRlcycgZnJvbSBhIENvbnRyaWJ1dG9yCitpZiBpdCB3YXMgYWRkZWQgdG8gdGhlIFByb2dyYW0gYnkgc3VjaCBDb250cmlidXRvciBpdHNlbGYgb3IgYW55b25lIGFjdGluZyBvbgorc3VjaCBDb250cmlidXRvcidzIGJlaGFsZi4gQ29udHJpYnV0aW9ucyBkbyBub3QgaW5jbHVkZSBhZGRpdGlvbnMgdG8gdGhlCitQcm9ncmFtIHdoaWNoOiAoaSkgYXJlIHNlcGFyYXRlIG1vZHVsZXMgb2Ygc29mdHdhcmUgZGlzdHJpYnV0ZWQgaW4gY29uanVuY3Rpb24KK3dpdGggdGhlIFByb2dyYW0gdW5kZXIgdGhlaXIgb3duIGxpY2Vuc2UgYWdyZWVtZW50LCBhbmQgKGlpKSBhcmUgbm90IGRlcml2YXRpdmUKK3dvcmtzIG9mIHRoZSBQcm9ncmFtLiA8L3NwYW4+PC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+JnF1b3Q7Q29udHJpYnV0b3ImcXVvdDsgbWVhbnMgYW55IHBlcnNvbiBvcgorZW50aXR5IHRoYXQgZGlzdHJpYnV0ZXMgdGhlIFByb2dyYW0uPC9zcGFuPiA8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4mcXVvdDtMaWNlbnNlZCBQYXRlbnRzICZxdW90OyBtZWFuIHBhdGVudAorY2xhaW1zIGxpY2Vuc2FibGUgYnkgYSBDb250cmlidXRvciB3aGljaCBhcmUgbmVjZXNzYXJpbHkgaW5mcmluZ2VkIGJ5IHRoZSB1c2UKK29yIHNhbGUgb2YgaXRzIENvbnRyaWJ1dGlvbiBhbG9uZSBvciB3aGVuIGNvbWJpbmVkIHdpdGggdGhlIFByb2dyYW0uIDwvc3Bhbj48L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4mcXVvdDtQcm9ncmFtJnF1b3Q7IG1lYW5zIHRoZSBDb250cmlidXRpb25zCitkaXN0cmlidXRlZCBpbiBhY2NvcmRhbmNlIHdpdGggdGhpcyBBZ3JlZW1lbnQuPC9zcGFuPiA8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4mcXVvdDtSZWNpcGllbnQmcXVvdDsgbWVhbnMgYW55b25lIHdobworcmVjZWl2ZXMgdGhlIFByb2dyYW0gdW5kZXIgdGhpcyBBZ3JlZW1lbnQsIGluY2x1ZGluZyBhbGwgQ29udHJpYnV0b3JzLjwvc3Bhbj4gPC9wPgorCis8cD48Yj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+Mi4gR1JBTlQgT0YgUklHSFRTPC9zcGFuPjwvYj4gPC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5hKQorU3ViamVjdCB0byB0aGUgdGVybXMgb2YgdGhpcyBBZ3JlZW1lbnQsIGVhY2ggQ29udHJpYnV0b3IgaGVyZWJ5IGdyYW50cyBSZWNpcGllbnQKK2Egbm9uLWV4Y2x1c2l2ZSwgd29ybGR3aWRlLCByb3lhbHR5LWZyZWUgY29weXJpZ2h0IGxpY2Vuc2UgdG88c3Bhbgorc3R5bGU9J2NvbG9yOnJlZCc+IDwvc3Bhbj5yZXByb2R1Y2UsIHByZXBhcmUgZGVyaXZhdGl2ZSB3b3JrcyBvZiwgcHVibGljbHkKK2Rpc3BsYXksIHB1YmxpY2x5IHBlcmZvcm0sIGRpc3RyaWJ1dGUgYW5kIHN1YmxpY2Vuc2UgdGhlIENvbnRyaWJ1dGlvbiBvZiBzdWNoCitDb250cmlidXRvciwgaWYgYW55LCBhbmQgc3VjaCBkZXJpdmF0aXZlIHdvcmtzLCBpbiBzb3VyY2UgY29kZSBhbmQgb2JqZWN0IGNvZGUKK2Zvcm0uPC9zcGFuPjwvcD4KKworPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YikKK1N1YmplY3QgdG8gdGhlIHRlcm1zIG9mIHRoaXMgQWdyZWVtZW50LCBlYWNoIENvbnRyaWJ1dG9yIGhlcmVieSBncmFudHMKK1JlY2lwaWVudCBhIG5vbi1leGNsdXNpdmUsIHdvcmxkd2lkZSw8c3BhbiBzdHlsZT0nY29sb3I6Z3JlZW4nPiA8L3NwYW4+cm95YWx0eS1mcmVlCitwYXRlbnQgbGljZW5zZSB1bmRlciBMaWNlbnNlZCBQYXRlbnRzIHRvIG1ha2UsIHVzZSwgc2VsbCwgb2ZmZXIgdG8gc2VsbCwgaW1wb3J0CithbmQgb3RoZXJ3aXNlIHRyYW5zZmVyIHRoZSBDb250cmlidXRpb24gb2Ygc3VjaCBDb250cmlidXRvciwgaWYgYW55LCBpbiBzb3VyY2UKK2NvZGUgYW5kIG9iamVjdCBjb2RlIGZvcm0uIFRoaXMgcGF0ZW50IGxpY2Vuc2Ugc2hhbGwgYXBwbHkgdG8gdGhlIGNvbWJpbmF0aW9uCitvZiB0aGUgQ29udHJpYnV0aW9uIGFuZCB0aGUgUHJvZ3JhbSBpZiwgYXQgdGhlIHRpbWUgdGhlIENvbnRyaWJ1dGlvbiBpcyBhZGRlZAorYnkgdGhlIENvbnRyaWJ1dG9yLCBzdWNoIGFkZGl0aW9uIG9mIHRoZSBDb250cmlidXRpb24gY2F1c2VzIHN1Y2ggY29tYmluYXRpb24KK3RvIGJlIGNvdmVyZWQgYnkgdGhlIExpY2Vuc2VkIFBhdGVudHMuIFRoZSBwYXRlbnQgbGljZW5zZSBzaGFsbCBub3QgYXBwbHkgdG8KK2FueSBvdGhlciBjb21iaW5hdGlvbnMgd2hpY2ggaW5jbHVkZSB0aGUgQ29udHJpYnV0aW9uLiBObyBoYXJkd2FyZSBwZXIgc2UgaXMKK2xpY2Vuc2VkIGhlcmV1bmRlci4gPC9zcGFuPjwvcD4KKworPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YykKK1JlY2lwaWVudCB1bmRlcnN0YW5kcyB0aGF0IGFsdGhvdWdoIGVhY2ggQ29udHJpYnV0b3IgZ3JhbnRzIHRoZSBsaWNlbnNlcyB0byBpdHMKK0NvbnRyaWJ1dGlvbnMgc2V0IGZvcnRoIGhlcmVpbiwgbm8gYXNzdXJhbmNlcyBhcmUgcHJvdmlkZWQgYnkgYW55IENvbnRyaWJ1dG9yCit0aGF0IHRoZSBQcm9ncmFtIGRvZXMgbm90IGluZnJpbmdlIHRoZSBwYXRlbnQgb3Igb3RoZXIgaW50ZWxsZWN0dWFsIHByb3BlcnR5CityaWdodHMgb2YgYW55IG90aGVyIGVudGl0eS4gRWFjaCBDb250cmlidXRvciBkaXNjbGFpbXMgYW55IGxpYWJpbGl0eSB0byBSZWNpcGllbnQKK2ZvciBjbGFpbXMgYnJvdWdodCBieSBhbnkgb3RoZXIgZW50aXR5IGJhc2VkIG9uIGluZnJpbmdlbWVudCBvZiBpbnRlbGxlY3R1YWwKK3Byb3BlcnR5IHJpZ2h0cyBvciBvdGhlcndpc2UuIEFzIGEgY29uZGl0aW9uIHRvIGV4ZXJjaXNpbmcgdGhlIHJpZ2h0cyBhbmQKK2xpY2Vuc2VzIGdyYW50ZWQgaGVyZXVuZGVyLCBlYWNoIFJlY2lwaWVudCBoZXJlYnkgYXNzdW1lcyBzb2xlIHJlc3BvbnNpYmlsaXR5Cit0byBzZWN1cmUgYW55IG90aGVyIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgbmVlZGVkLCBpZiBhbnkuIEZvciBleGFtcGxlLAoraWYgYSB0aGlyZCBwYXJ0eSBwYXRlbnQgbGljZW5zZSBpcyByZXF1aXJlZCB0byBhbGxvdyBSZWNpcGllbnQgdG8gZGlzdHJpYnV0ZQordGhlIFByb2dyYW0sIGl0IGlzIFJlY2lwaWVudCdzIHJlc3BvbnNpYmlsaXR5IHRvIGFjcXVpcmUgdGhhdCBsaWNlbnNlIGJlZm9yZQorZGlzdHJpYnV0aW5nIHRoZSBQcm9ncmFtLjwvc3Bhbj48L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmQpCitFYWNoIENvbnRyaWJ1dG9yIHJlcHJlc2VudHMgdGhhdCB0byBpdHMga25vd2xlZGdlIGl0IGhhcyBzdWZmaWNpZW50IGNvcHlyaWdodAorcmlnaHRzIGluIGl0cyBDb250cmlidXRpb24sIGlmIGFueSwgdG8gZ3JhbnQgdGhlIGNvcHlyaWdodCBsaWNlbnNlIHNldCBmb3J0aCBpbgordGhpcyBBZ3JlZW1lbnQuIDwvc3Bhbj48L3A+CisKKzxwPjxiPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4zLiBSRVFVSVJFTUVOVFM8L3NwYW4+PC9iPiA8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5BIENvbnRyaWJ1dG9yIG1heSBjaG9vc2UgdG8gZGlzdHJpYnV0ZSB0aGUKK1Byb2dyYW0gaW4gb2JqZWN0IGNvZGUgZm9ybSB1bmRlciBpdHMgb3duIGxpY2Vuc2UgYWdyZWVtZW50LCBwcm92aWRlZCB0aGF0Ojwvc3Bhbj4KKzwvcD4KKworPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YSkKK2l0IGNvbXBsaWVzIHdpdGggdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoaXMgQWdyZWVtZW50OyBhbmQ8L3NwYW4+PC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5iKQoraXRzIGxpY2Vuc2UgYWdyZWVtZW50Ojwvc3Bhbj48L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmkpCitlZmZlY3RpdmVseSBkaXNjbGFpbXMgb24gYmVoYWxmIG9mIGFsbCBDb250cmlidXRvcnMgYWxsIHdhcnJhbnRpZXMgYW5kCitjb25kaXRpb25zLCBleHByZXNzIGFuZCBpbXBsaWVkLCBpbmNsdWRpbmcgd2FycmFudGllcyBvciBjb25kaXRpb25zIG9mIHRpdGxlCithbmQgbm9uLWluZnJpbmdlbWVudCwgYW5kIGltcGxpZWQgd2FycmFudGllcyBvciBjb25kaXRpb25zIG9mIG1lcmNoYW50YWJpbGl0eQorYW5kIGZpdG5lc3MgZm9yIGEgcGFydGljdWxhciBwdXJwb3NlOyA8L3NwYW4+PC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5paSkKK2VmZmVjdGl2ZWx5IGV4Y2x1ZGVzIG9uIGJlaGFsZiBvZiBhbGwgQ29udHJpYnV0b3JzIGFsbCBsaWFiaWxpdHkgZm9yIGRhbWFnZXMsCitpbmNsdWRpbmcgZGlyZWN0LCBpbmRpcmVjdCwgc3BlY2lhbCwgaW5jaWRlbnRhbCBhbmQgY29uc2VxdWVudGlhbCBkYW1hZ2VzLCBzdWNoCithcyBsb3N0IHByb2ZpdHM7IDwvc3Bhbj48L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmlpaSkKK3N0YXRlcyB0aGF0IGFueSBwcm92aXNpb25zIHdoaWNoIGRpZmZlciBmcm9tIHRoaXMgQWdyZWVtZW50IGFyZSBvZmZlcmVkIGJ5IHRoYXQKK0NvbnRyaWJ1dG9yIGFsb25lIGFuZCBub3QgYnkgYW55IG90aGVyIHBhcnR5OyBhbmQ8L3NwYW4+PC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5pdikKK3N0YXRlcyB0aGF0IHNvdXJjZSBjb2RlIGZvciB0aGUgUHJvZ3JhbSBpcyBhdmFpbGFibGUgZnJvbSBzdWNoIENvbnRyaWJ1dG9yLCBhbmQKK2luZm9ybXMgbGljZW5zZWVzIGhvdyB0byBvYnRhaW4gaXQgaW4gYSByZWFzb25hYmxlIG1hbm5lciBvbiBvciB0aHJvdWdoIGEKK21lZGl1bSBjdXN0b21hcmlseSB1c2VkIGZvciBzb2Z0d2FyZSBleGNoYW5nZS48c3BhbiBzdHlsZT0nY29sb3I6Ymx1ZSc+IDwvc3Bhbj48L3NwYW4+PC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+V2hlbiB0aGUgUHJvZ3JhbSBpcyBtYWRlIGF2YWlsYWJsZSBpbiBzb3VyY2UKK2NvZGUgZm9ybTo8L3NwYW4+IDwvcD4KKworPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YSkKK2l0IG11c3QgYmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhpcyBBZ3JlZW1lbnQ7IGFuZCA8L3NwYW4+PC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5iKSBhCitjb3B5IG9mIHRoaXMgQWdyZWVtZW50IG11c3QgYmUgaW5jbHVkZWQgd2l0aCBlYWNoIGNvcHkgb2YgdGhlIFByb2dyYW0uIDwvc3Bhbj48L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5Db250cmlidXRvcnMgbWF5IG5vdCByZW1vdmUgb3IgYWx0ZXIgYW55Citjb3B5cmlnaHQgbm90aWNlcyBjb250YWluZWQgd2l0aGluIHRoZSBQcm9ncmFtLiA8L3NwYW4+PC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+RWFjaCBDb250cmlidXRvciBtdXN0IGlkZW50aWZ5IGl0c2VsZiBhcyB0aGUKK29yaWdpbmF0b3Igb2YgaXRzIENvbnRyaWJ1dGlvbiwgaWYgYW55LCBpbiBhIG1hbm5lciB0aGF0IHJlYXNvbmFibHkgYWxsb3dzCitzdWJzZXF1ZW50IFJlY2lwaWVudHMgdG8gaWRlbnRpZnkgdGhlIG9yaWdpbmF0b3Igb2YgdGhlIENvbnRyaWJ1dGlvbi4gPC9zcGFuPjwvcD4KKworPHA+PGI+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPjQuIENPTU1FUkNJQUwgRElTVFJJQlVUSU9OPC9zcGFuPjwvYj4gPC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+Q29tbWVyY2lhbCBkaXN0cmlidXRvcnMgb2Ygc29mdHdhcmUgbWF5CithY2NlcHQgY2VydGFpbiByZXNwb25zaWJpbGl0aWVzIHdpdGggcmVzcGVjdCB0byBlbmQgdXNlcnMsIGJ1c2luZXNzIHBhcnRuZXJzCithbmQgdGhlIGxpa2UuIFdoaWxlIHRoaXMgbGljZW5zZSBpcyBpbnRlbmRlZCB0byBmYWNpbGl0YXRlIHRoZSBjb21tZXJjaWFsIHVzZQorb2YgdGhlIFByb2dyYW0sIHRoZSBDb250cmlidXRvciB3aG8gaW5jbHVkZXMgdGhlIFByb2dyYW0gaW4gYSBjb21tZXJjaWFsCitwcm9kdWN0IG9mZmVyaW5nIHNob3VsZCBkbyBzbyBpbiBhIG1hbm5lciB3aGljaCBkb2VzIG5vdCBjcmVhdGUgcG90ZW50aWFsCitsaWFiaWxpdHkgZm9yIG90aGVyIENvbnRyaWJ1dG9ycy4gVGhlcmVmb3JlLCBpZiBhIENvbnRyaWJ1dG9yIGluY2x1ZGVzIHRoZQorUHJvZ3JhbSBpbiBhIGNvbW1lcmNpYWwgcHJvZHVjdCBvZmZlcmluZywgc3VjaCBDb250cmlidXRvciAoJnF1b3Q7Q29tbWVyY2lhbAorQ29udHJpYnV0b3ImcXVvdDspIGhlcmVieSBhZ3JlZXMgdG8gZGVmZW5kIGFuZCBpbmRlbW5pZnkgZXZlcnkgb3RoZXIKK0NvbnRyaWJ1dG9yICgmcXVvdDtJbmRlbW5pZmllZCBDb250cmlidXRvciZxdW90OykgYWdhaW5zdCBhbnkgbG9zc2VzLCBkYW1hZ2VzIGFuZAorY29zdHMgKGNvbGxlY3RpdmVseSAmcXVvdDtMb3NzZXMmcXVvdDspIGFyaXNpbmcgZnJvbSBjbGFpbXMsIGxhd3N1aXRzIGFuZCBvdGhlcgorbGVnYWwgYWN0aW9ucyBicm91Z2h0IGJ5IGEgdGhpcmQgcGFydHkgYWdhaW5zdCB0aGUgSW5kZW1uaWZpZWQgQ29udHJpYnV0b3IgdG8KK3RoZSBleHRlbnQgY2F1c2VkIGJ5IHRoZSBhY3RzIG9yIG9taXNzaW9ucyBvZiBzdWNoIENvbW1lcmNpYWwgQ29udHJpYnV0b3IgaW4KK2Nvbm5lY3Rpb24gd2l0aCBpdHMgZGlzdHJpYnV0aW9uIG9mIHRoZSBQcm9ncmFtIGluIGEgY29tbWVyY2lhbCBwcm9kdWN0CitvZmZlcmluZy4gVGhlIG9ibGlnYXRpb25zIGluIHRoaXMgc2VjdGlvbiBkbyBub3QgYXBwbHkgdG8gYW55IGNsYWltcyBvciBMb3NzZXMKK3JlbGF0aW5nIHRvIGFueSBhY3R1YWwgb3IgYWxsZWdlZCBpbnRlbGxlY3R1YWwgcHJvcGVydHkgaW5mcmluZ2VtZW50LiBJbiBvcmRlcgordG8gcXVhbGlmeSwgYW4gSW5kZW1uaWZpZWQgQ29udHJpYnV0b3IgbXVzdDogYSkgcHJvbXB0bHkgbm90aWZ5IHRoZSBDb21tZXJjaWFsCitDb250cmlidXRvciBpbiB3cml0aW5nIG9mIHN1Y2ggY2xhaW0sIGFuZCBiKSBhbGxvdyB0aGUgQ29tbWVyY2lhbCBDb250cmlidXRvcgordG8gY29udHJvbCwgYW5kIGNvb3BlcmF0ZSB3aXRoIHRoZSBDb21tZXJjaWFsIENvbnRyaWJ1dG9yIGluLCB0aGUgZGVmZW5zZSBhbmQKK2FueSByZWxhdGVkIHNldHRsZW1lbnQgbmVnb3RpYXRpb25zLiBUaGUgSW5kZW1uaWZpZWQgQ29udHJpYnV0b3IgbWF5IHBhcnRpY2lwYXRlCitpbiBhbnkgc3VjaCBjbGFpbSBhdCBpdHMgb3duIGV4cGVuc2UuPC9zcGFuPiA8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5Gb3IgZXhhbXBsZSwgYSBDb250cmlidXRvciBtaWdodCBpbmNsdWRlIHRoZQorUHJvZ3JhbSBpbiBhIGNvbW1lcmNpYWwgcHJvZHVjdCBvZmZlcmluZywgUHJvZHVjdCBYLiBUaGF0IENvbnRyaWJ1dG9yIGlzIHRoZW4gYQorQ29tbWVyY2lhbCBDb250cmlidXRvci4gSWYgdGhhdCBDb21tZXJjaWFsIENvbnRyaWJ1dG9yIHRoZW4gbWFrZXMgcGVyZm9ybWFuY2UKK2NsYWltcywgb3Igb2ZmZXJzIHdhcnJhbnRpZXMgcmVsYXRlZCB0byBQcm9kdWN0IFgsIHRob3NlIHBlcmZvcm1hbmNlIGNsYWltcyBhbmQKK3dhcnJhbnRpZXMgYXJlIHN1Y2ggQ29tbWVyY2lhbCBDb250cmlidXRvcidzIHJlc3BvbnNpYmlsaXR5IGFsb25lLiBVbmRlciB0aGlzCitzZWN0aW9uLCB0aGUgQ29tbWVyY2lhbCBDb250cmlidXRvciB3b3VsZCBoYXZlIHRvIGRlZmVuZCBjbGFpbXMgYWdhaW5zdCB0aGUKK290aGVyIENvbnRyaWJ1dG9ycyByZWxhdGVkIHRvIHRob3NlIHBlcmZvcm1hbmNlIGNsYWltcyBhbmQgd2FycmFudGllcywgYW5kIGlmIGEKK2NvdXJ0IHJlcXVpcmVzIGFueSBvdGhlciBDb250cmlidXRvciB0byBwYXkgYW55IGRhbWFnZXMgYXMgYSByZXN1bHQsIHRoZQorQ29tbWVyY2lhbCBDb250cmlidXRvciBtdXN0IHBheSB0aG9zZSBkYW1hZ2VzLjwvc3Bhbj4gPC9wPgorCis8cD48Yj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+NS4gTk8gV0FSUkFOVFk8L3NwYW4+PC9iPiA8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5FWENFUFQgQVMgRVhQUkVTU0xZIFNFVCBGT1JUSCBJTiBUSElTCitBR1JFRU1FTlQsIFRIRSBQUk9HUkFNIElTIFBST1ZJREVEIE9OIEFOICZxdW90O0FTIElTJnF1b3Q7IEJBU0lTLCBXSVRIT1VUCitXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIEVJVEhFUiBFWFBSRVNTIE9SIElNUExJRUQgSU5DTFVESU5HLAorV0lUSE9VVCBMSU1JVEFUSU9OLCBBTlkgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIFRJVExFLCBOT04tSU5GUklOR0VNRU5ULAorTUVSQ0hBTlRBQklMSVRZIE9SIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBFYWNoIFJlY2lwaWVudCBpcyBzb2xlbHkKK3Jlc3BvbnNpYmxlIGZvciBkZXRlcm1pbmluZyB0aGUgYXBwcm9wcmlhdGVuZXNzIG9mIHVzaW5nIGFuZCBkaXN0cmlidXRpbmcgdGhlCitQcm9ncmFtIGFuZCBhc3N1bWVzIGFsbCByaXNrcyBhc3NvY2lhdGVkIHdpdGggaXRzIGV4ZXJjaXNlIG9mIHJpZ2h0cyB1bmRlciB0aGlzCitBZ3JlZW1lbnQgLCBpbmNsdWRpbmcgYnV0IG5vdCBsaW1pdGVkIHRvIHRoZSByaXNrcyBhbmQgY29zdHMgb2YgcHJvZ3JhbSBlcnJvcnMsCitjb21wbGlhbmNlIHdpdGggYXBwbGljYWJsZSBsYXdzLCBkYW1hZ2UgdG8gb3IgbG9zcyBvZiBkYXRhLCBwcm9ncmFtcyBvcgorZXF1aXBtZW50LCBhbmQgdW5hdmFpbGFiaWxpdHkgb3IgaW50ZXJydXB0aW9uIG9mIG9wZXJhdGlvbnMuIDwvc3Bhbj48L3A+CisKKzxwPjxiPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz42LiBESVNDTEFJTUVSIE9GIExJQUJJTElUWTwvc3Bhbj48L2I+IDwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkVYQ0VQVCBBUyBFWFBSRVNTTFkgU0VUIEZPUlRIIElOIFRISVMKK0FHUkVFTUVOVCwgTkVJVEhFUiBSRUNJUElFTlQgTk9SIEFOWSBDT05UUklCVVRPUlMgU0hBTEwgSEFWRSBBTlkgTElBQklMSVRZIEZPUgorQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisoSU5DTFVESU5HIFdJVEhPVVQgTElNSVRBVElPTiBMT1NUIFBST0ZJVFMpLCBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcKK05FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT1IgRElTVFJJQlVUSU9OIE9GCitUSEUgUFJPR1JBTSBPUiBUSEUgRVhFUkNJU0UgT0YgQU5ZIFJJR0hUUyBHUkFOVEVEIEhFUkVVTkRFUiwgRVZFTiBJRiBBRFZJU0VEIE9GCitUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLjwvc3Bhbj4gPC9wPgorCis8cD48Yj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+Ny4gR0VORVJBTDwvc3Bhbj48L2I+IDwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPklmIGFueSBwcm92aXNpb24gb2YgdGhpcyBBZ3JlZW1lbnQgaXMgaW52YWxpZAorb3IgdW5lbmZvcmNlYWJsZSB1bmRlciBhcHBsaWNhYmxlIGxhdywgaXQgc2hhbGwgbm90IGFmZmVjdCB0aGUgdmFsaWRpdHkgb3IKK2VuZm9yY2VhYmlsaXR5IG9mIHRoZSByZW1haW5kZXIgb2YgdGhlIHRlcm1zIG9mIHRoaXMgQWdyZWVtZW50LCBhbmQgd2l0aG91dAorZnVydGhlciBhY3Rpb24gYnkgdGhlIHBhcnRpZXMgaGVyZXRvLCBzdWNoIHByb3Zpc2lvbiBzaGFsbCBiZSByZWZvcm1lZCB0byB0aGUKK21pbmltdW0gZXh0ZW50IG5lY2Vzc2FyeSB0byBtYWtlIHN1Y2ggcHJvdmlzaW9uIHZhbGlkIGFuZCBlbmZvcmNlYWJsZS48L3NwYW4+IDwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPklmIFJlY2lwaWVudCBpbnN0aXR1dGVzIHBhdGVudCBsaXRpZ2F0aW9uCithZ2FpbnN0IGFueSBlbnRpdHkgKGluY2x1ZGluZyBhIGNyb3NzLWNsYWltIG9yIGNvdW50ZXJjbGFpbSBpbiBhIGxhd3N1aXQpCithbGxlZ2luZyB0aGF0IHRoZSBQcm9ncmFtIGl0c2VsZiAoZXhjbHVkaW5nIGNvbWJpbmF0aW9ucyBvZiB0aGUgUHJvZ3JhbSB3aXRoCitvdGhlciBzb2Z0d2FyZSBvciBoYXJkd2FyZSkgaW5mcmluZ2VzIHN1Y2ggUmVjaXBpZW50J3MgcGF0ZW50KHMpLCB0aGVuIHN1Y2gKK1JlY2lwaWVudCdzIHJpZ2h0cyBncmFudGVkIHVuZGVyIFNlY3Rpb24gMihiKSBzaGFsbCB0ZXJtaW5hdGUgYXMgb2YgdGhlIGRhdGUKK3N1Y2ggbGl0aWdhdGlvbiBpcyBmaWxlZC4gPC9zcGFuPjwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkFsbCBSZWNpcGllbnQncyByaWdodHMgdW5kZXIgdGhpcyBBZ3JlZW1lbnQKK3NoYWxsIHRlcm1pbmF0ZSBpZiBpdCBmYWlscyB0byBjb21wbHkgd2l0aCBhbnkgb2YgdGhlIG1hdGVyaWFsIHRlcm1zIG9yCitjb25kaXRpb25zIG9mIHRoaXMgQWdyZWVtZW50IGFuZCBkb2VzIG5vdCBjdXJlIHN1Y2ggZmFpbHVyZSBpbiBhIHJlYXNvbmFibGUKK3BlcmlvZCBvZiB0aW1lIGFmdGVyIGJlY29taW5nIGF3YXJlIG9mIHN1Y2ggbm9uY29tcGxpYW5jZS4gSWYgYWxsIFJlY2lwaWVudCdzCityaWdodHMgdW5kZXIgdGhpcyBBZ3JlZW1lbnQgdGVybWluYXRlLCBSZWNpcGllbnQgYWdyZWVzIHRvIGNlYXNlIHVzZSBhbmQKK2Rpc3RyaWJ1dGlvbiBvZiB0aGUgUHJvZ3JhbSBhcyBzb29uIGFzIHJlYXNvbmFibHkgcHJhY3RpY2FibGUuIEhvd2V2ZXIsCitSZWNpcGllbnQncyBvYmxpZ2F0aW9ucyB1bmRlciB0aGlzIEFncmVlbWVudCBhbmQgYW55IGxpY2Vuc2VzIGdyYW50ZWQgYnkKK1JlY2lwaWVudCByZWxhdGluZyB0byB0aGUgUHJvZ3JhbSBzaGFsbCBjb250aW51ZSBhbmQgc3Vydml2ZS4gPC9zcGFuPjwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkV2ZXJ5b25lIGlzIHBlcm1pdHRlZCB0byBjb3B5IGFuZCBkaXN0cmlidXRlCitjb3BpZXMgb2YgdGhpcyBBZ3JlZW1lbnQsIGJ1dCBpbiBvcmRlciB0byBhdm9pZCBpbmNvbnNpc3RlbmN5IHRoZSBBZ3JlZW1lbnQgaXMKK2NvcHlyaWdodGVkIGFuZCBtYXkgb25seSBiZSBtb2RpZmllZCBpbiB0aGUgZm9sbG93aW5nIG1hbm5lci4gVGhlIEFncmVlbWVudAorU3Rld2FyZCByZXNlcnZlcyB0aGUgcmlnaHQgdG8gcHVibGlzaCBuZXcgdmVyc2lvbnMgKGluY2x1ZGluZyByZXZpc2lvbnMpIG9mCit0aGlzIEFncmVlbWVudCBmcm9tIHRpbWUgdG8gdGltZS4gTm8gb25lIG90aGVyIHRoYW4gdGhlIEFncmVlbWVudCBTdGV3YXJkIGhhcwordGhlIHJpZ2h0IHRvIG1vZGlmeSB0aGlzIEFncmVlbWVudC4gVGhlIEVjbGlwc2UgRm91bmRhdGlvbiBpcyB0aGUgaW5pdGlhbAorQWdyZWVtZW50IFN0ZXdhcmQuIFRoZSBFY2xpcHNlIEZvdW5kYXRpb24gbWF5IGFzc2lnbiB0aGUgcmVzcG9uc2liaWxpdHkgdG8KK3NlcnZlIGFzIHRoZSBBZ3JlZW1lbnQgU3Rld2FyZCB0byBhIHN1aXRhYmxlIHNlcGFyYXRlIGVudGl0eS4gRWFjaCBuZXcgdmVyc2lvbgorb2YgdGhlIEFncmVlbWVudCB3aWxsIGJlIGdpdmVuIGEgZGlzdGluZ3Vpc2hpbmcgdmVyc2lvbiBudW1iZXIuIFRoZSBQcm9ncmFtCisoaW5jbHVkaW5nIENvbnRyaWJ1dGlvbnMpIG1heSBhbHdheXMgYmUgZGlzdHJpYnV0ZWQgc3ViamVjdCB0byB0aGUgdmVyc2lvbiBvZgordGhlIEFncmVlbWVudCB1bmRlciB3aGljaCBpdCB3YXMgcmVjZWl2ZWQuIEluIGFkZGl0aW9uLCBhZnRlciBhIG5ldyB2ZXJzaW9uIG9mCit0aGUgQWdyZWVtZW50IGlzIHB1Ymxpc2hlZCwgQ29udHJpYnV0b3IgbWF5IGVsZWN0IHRvIGRpc3RyaWJ1dGUgdGhlIFByb2dyYW0KKyhpbmNsdWRpbmcgaXRzIENvbnRyaWJ1dGlvbnMpIHVuZGVyIHRoZSBuZXcgdmVyc2lvbi4gRXhjZXB0IGFzIGV4cHJlc3NseSBzdGF0ZWQKK2luIFNlY3Rpb25zIDIoYSkgYW5kIDIoYikgYWJvdmUsIFJlY2lwaWVudCByZWNlaXZlcyBubyByaWdodHMgb3IgbGljZW5zZXMgdG8KK3RoZSBpbnRlbGxlY3R1YWwgcHJvcGVydHkgb2YgYW55IENvbnRyaWJ1dG9yIHVuZGVyIHRoaXMgQWdyZWVtZW50LCB3aGV0aGVyCitleHByZXNzbHksIGJ5IGltcGxpY2F0aW9uLCBlc3RvcHBlbCBvciBvdGhlcndpc2UuIEFsbCByaWdodHMgaW4gdGhlIFByb2dyYW0gbm90CitleHByZXNzbHkgZ3JhbnRlZCB1bmRlciB0aGlzIEFncmVlbWVudCBhcmUgcmVzZXJ2ZWQuPC9zcGFuPiA8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5UaGlzIEFncmVlbWVudCBpcyBnb3Zlcm5lZCBieSB0aGUgbGF3cyBvZiB0aGUKK1N0YXRlIG9mIE5ldyBZb3JrIGFuZCB0aGUgaW50ZWxsZWN0dWFsIHByb3BlcnR5IGxhd3Mgb2YgdGhlIFVuaXRlZCBTdGF0ZXMgb2YKK0FtZXJpY2EuIE5vIHBhcnR5IHRvIHRoaXMgQWdyZWVtZW50IHdpbGwgYnJpbmcgYSBsZWdhbCBhY3Rpb24gdW5kZXIgdGhpcworQWdyZWVtZW50IG1vcmUgdGhhbiBvbmUgeWVhciBhZnRlciB0aGUgY2F1c2Ugb2YgYWN0aW9uIGFyb3NlLiBFYWNoIHBhcnR5IHdhaXZlcworaXRzIHJpZ2h0cyB0byBhIGp1cnkgdHJpYWwgaW4gYW55IHJlc3VsdGluZyBsaXRpZ2F0aW9uLjwvc3Bhbj4gPC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWw+PCFbaWYgIXN1cHBvcnRFbXB0eVBhcmFzXT4mbmJzcDs8IVtlbmRpZl0+PG86cD48L286cD48L3A+CisKKzwvZGl2PgorCis8L2JvZHk+CisKKzwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwvaWNvbnMvZnVsbC9jdG9vbDE2L0NyZWF0ZUR5bmFtaWNMYWJlbF9uZXh0VmFsdWVfVGVzdEludGVnZXJMYWJlbFZhbHVlLmdpZiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC9pY29ucy9mdWxsL2N0b29sMTYvQ3JlYXRlRHluYW1pY0xhYmVsX25leHRWYWx1ZV9UZXN0SW50ZWdlckxhYmVsVmFsdWUuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI3Mjk5OTgKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwvaWNvbnMvZnVsbC9jdG9vbDE2L0NyZWF0ZUR5bmFtaWNMYWJlbF9uZXh0VmFsdWVfVGVzdEludGVnZXJMYWJlbFZhbHVlLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwvaWNvbnMvZnVsbC9jdG9vbDE2L0NyZWF0ZUlkZW50aWZpYWJsZV9kdWJsaW5Db3JlX0R1YmxpbkNvcmUuZ2lmIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsL2ljb25zL2Z1bGwvY3Rvb2wxNi9DcmVhdGVJZGVudGlmaWFibGVfZHVibGluQ29yZV9EdWJsaW5Db3JlLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZjJmNTM1Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsL2ljb25zL2Z1bGwvY3Rvb2wxNi9DcmVhdGVJZGVudGlmaWFibGVfZHVibGluQ29yZV9EdWJsaW5Db3JlLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwvaWNvbnMvZnVsbC9jdG9vbDE2L0NyZWF0ZUxhYmVsX2N1cnJlbnRWYWx1ZV9UZXN0SW50ZWdlckxhYmVsVmFsdWUuZ2lmIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsL2ljb25zL2Z1bGwvY3Rvb2wxNi9DcmVhdGVMYWJlbF9jdXJyZW50VmFsdWVfVGVzdEludGVnZXJMYWJlbFZhbHVlLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNzI5OTk4Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsL2ljb25zL2Z1bGwvY3Rvb2wxNi9DcmVhdGVMYWJlbF9jdXJyZW50VmFsdWVfVGVzdEludGVnZXJMYWJlbFZhbHVlLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwvaWNvbnMvZnVsbC9vYmoxNi9EZWNvcmF0b3JzTW9kZWxGaWxlLmdpZiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC9pY29ucy9mdWxsL29iajE2L0RlY29yYXRvcnNNb2RlbEZpbGUuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJmMTc4NjUKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwvaWNvbnMvZnVsbC9vYmoxNi9EZWNvcmF0b3JzTW9kZWxGaWxlLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwvaWNvbnMvZnVsbC9vYmoxNi9MYWJlbHNNb2RlbEZpbGUuZ2lmIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsL2ljb25zL2Z1bGwvb2JqMTYvTGFiZWxzTW9kZWxGaWxlLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMjUxNzkyCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsL2ljb25zL2Z1bGwvb2JqMTYvTGFiZWxzTW9kZWxGaWxlLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwvaWNvbnMvZnVsbC9vYmoxNi9UZXN0RHluYW1pY0VkZ2VMYWJlbC5naWYgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwvaWNvbnMvZnVsbC9vYmoxNi9UZXN0RHluYW1pY0VkZ2VMYWJlbC5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTM1MDBkYQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC9pY29ucy9mdWxsL29iajE2L1Rlc3REeW5hbWljRWRnZUxhYmVsLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwvaWNvbnMvZnVsbC9vYmoxNi9UZXN0RHluYW1pY0xhYmVsMS5naWYgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwvaWNvbnMvZnVsbC9vYmoxNi9UZXN0RHluYW1pY0xhYmVsMS5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWE1OGE2NQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC9pY29ucy9mdWxsL29iajE2L1Rlc3REeW5hbWljTGFiZWwxLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwvaWNvbnMvZnVsbC9vYmoxNi9UZXN0RHluYW1pY05vZGVMYWJlbC5naWYgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwvaWNvbnMvZnVsbC9vYmoxNi9UZXN0RHluYW1pY05vZGVMYWJlbC5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzM5ZWJiZgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC9pY29ucy9mdWxsL29iajE2L1Rlc3REeW5hbWljTm9kZUxhYmVsLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwvaWNvbnMvZnVsbC9vYmoxNi9UZXN0RWRnZURlY29yYXRvcjEuZ2lmIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsL2ljb25zL2Z1bGwvb2JqMTYvVGVzdEVkZ2VEZWNvcmF0b3IxLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YTliYzc1Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsL2ljb25zL2Z1bGwvb2JqMTYvVGVzdEVkZ2VEZWNvcmF0b3IxLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwvaWNvbnMvZnVsbC9vYmoxNi9UZXN0R3JhcGhEZWNvcmF0b3IxLmdpZiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC9pY29ucy9mdWxsL29iajE2L1Rlc3RHcmFwaERlY29yYXRvcjEuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQzZGM1YTkKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwvaWNvbnMvZnVsbC9vYmoxNi9UZXN0R3JhcGhEZWNvcmF0b3IxLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwvaWNvbnMvZnVsbC9vYmoxNi9UZXN0SW50ZWdlckxhYmVsVmFsdWUuZ2lmIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsL2ljb25zL2Z1bGwvb2JqMTYvVGVzdEludGVnZXJMYWJlbFZhbHVlLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYjE3NTVhCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsL2ljb25zL2Z1bGwvb2JqMTYvVGVzdEludGVnZXJMYWJlbFZhbHVlLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwvaWNvbnMvZnVsbC9vYmoxNi9UZXN0TGFiZWwuZ2lmIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsL2ljb25zL2Z1bGwvb2JqMTYvVGVzdExhYmVsLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMGYwYzQ4Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsL2ljb25zL2Z1bGwvb2JqMTYvVGVzdExhYmVsLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwvaWNvbnMvZnVsbC9vYmoxNi9UZXN0Tm9kZURlY29yYXRvcjEuZ2lmIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsL2ljb25zL2Z1bGwvb2JqMTYvVGVzdE5vZGVEZWNvcmF0b3IxLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMzQ1NTFiCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsL2ljb25zL2Z1bGwvb2JqMTYvVGVzdE5vZGVEZWNvcmF0b3IxLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwvaWNvbnMvZnVsbC9vYmoxNi9UZXN0U2NlbmFyaW9HcmFwaERlY29yYXRvcjEuZ2lmIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsL2ljb25zL2Z1bGwvb2JqMTYvVGVzdFNjZW5hcmlvR3JhcGhEZWNvcmF0b3IxLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNGJjMjJkCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsL2ljb25zL2Z1bGwvb2JqMTYvVGVzdFNjZW5hcmlvR3JhcGhEZWNvcmF0b3IxLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwvaWNvbnMvZnVsbC9vYmoxNi9UZXN0U3RhdGljRWRnZUxhYmVsLmdpZiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC9pY29ucy9mdWxsL29iajE2L1Rlc3RTdGF0aWNFZGdlTGFiZWwuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUzNTAwZGEKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwvaWNvbnMvZnVsbC9vYmoxNi9UZXN0U3RhdGljRWRnZUxhYmVsLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwvaWNvbnMvZnVsbC9vYmoxNi9UZXN0U3RhdGljTm9kZUxhYmVsLmdpZiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC9pY29ucy9mdWxsL29iajE2L1Rlc3RTdGF0aWNOb2RlTGFiZWwuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjczOWViYmYKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwvaWNvbnMvZnVsbC9vYmoxNi9UZXN0U3RhdGljTm9kZUxhYmVsLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwvaWNvbnMvZnVsbC93aXpiYW4vTmV3RGVjb3JhdG9ycy5naWYgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwvaWNvbnMvZnVsbC93aXpiYW4vTmV3RGVjb3JhdG9ycy5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDMxNjhiZAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC9pY29ucy9mdWxsL3dpemJhbi9OZXdEZWNvcmF0b3JzLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwvaWNvbnMvZnVsbC93aXpiYW4vTmV3TGFiZWxzLmdpZiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC9pY29ucy9mdWxsL3dpemJhbi9OZXdMYWJlbHMuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk3ZmQxZTEKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwvaWNvbnMvZnVsbC93aXpiYW4vTmV3TGFiZWxzLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwvbW9kZWwvZGVjb3JhdG9ycy5lY29yZSBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC9tb2RlbC9kZWNvcmF0b3JzLmVjb3JlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlkOWI5OGEKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwvbW9kZWwvZGVjb3JhdG9ycy5lY29yZQpAQCAtMCwwICsxLDI3IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPGVjb3JlOkVQYWNrYWdlIHhtaTp2ZXJzaW9uPSIyLjAiCisgICAgeG1sbnM6eG1pPSJodHRwOi8vd3d3Lm9tZy5vcmcvWE1JIiB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIgorICAgIHhtbG5zOmVjb3JlPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2VtZi8yMDAyL0Vjb3JlIiBuYW1lPSJkZWNvcmF0b3JzIgorICAgIG5zVVJJPSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vdGVzdHMvdXRpbC9kZWNvcmF0b3JzLmVjb3JlIiBuc1ByZWZpeD0ib3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsLmRlY29yYXRvcnMiPgorICA8ZUNsYXNzaWZpZXJzIHhzaTp0eXBlPSJlY29yZTpFQ2xhc3MiIG5hbWU9IlRlc3RFZGdlRGVjb3JhdG9yMSIgZVN1cGVyVHlwZXM9Ii4uLy4uL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9tb2RlbC9tb2RlbC5lY29yZSMvL0VkZ2VEZWNvcmF0b3IiPgorICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJub2RlQVVSSSIgZVR5cGU9IiMvL1VSSSIvPgorICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJub2RlQlVSSSIgZVR5cGU9IiMvL1VSSSIvPgorICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJlZGdlVVJJIiBlVHlwZT0iIy8vVVJJIi8+CisgIDwvZUNsYXNzaWZpZXJzPgorICA8ZUNsYXNzaWZpZXJzIHhzaTp0eXBlPSJlY29yZTpFQ2xhc3MiIG5hbWU9IlRlc3RHcmFwaERlY29yYXRvcjEiIGVTdXBlclR5cGVzPSIuLi8uLi9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvbW9kZWwvbW9kZWwuZWNvcmUjLy9HcmFwaERlY29yYXRvciIvPgorICA8ZUNsYXNzaWZpZXJzIHhzaTp0eXBlPSJlY29yZTpFQ2xhc3MiIG5hbWU9IlRlc3ROb2RlRGVjb3JhdG9yMSIgZVN1cGVyVHlwZXM9Ii4uLy4uL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9tb2RlbC9tb2RlbC5lY29yZSMvL05vZGVEZWNvcmF0b3IiLz4KKyAgPGVDbGFzc2lmaWVycyB4c2k6dHlwZT0iZWNvcmU6RUNsYXNzIiBuYW1lPSJUZXN0U2NlbmFyaW9HcmFwaERlY29yYXRvcjEiIGVTdXBlclR5cGVzPSIuLi8uLi9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvbW9kZWwvbW9kZWwuZWNvcmUjLy9HcmFwaERlY29yYXRvciI+CisgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVBdHRyaWJ1dGUiIG5hbWU9ImRvdWJsZVZhbHVlIiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDIvRWNvcmUjLy9FRG91YmxlIi8+CisgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVBdHRyaWJ1dGUiIG5hbWU9ImludFZhbHVlIiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDIvRWNvcmUjLy9FSW50Ii8+CisgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVBdHRyaWJ1dGUiIG5hbWU9InN0cmluZ1ZhbHVlIiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDIvRWNvcmUjLy9FU3RyaW5nIi8+CisgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVSZWZlcmVuY2UiIG5hbWU9InNURU1UaW1lVmFsdWUiIGVUeXBlPSJlY29yZTpFQ2xhc3MgLi4vLi4vb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL21vZGVsL21vZGVsLmVjb3JlIy8vU1RFTVRpbWUiLz4KKyAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0iYm9vbGVhblZhbHVlIiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDIvRWNvcmUjLy9FQm9vbGVhbiIvPgorICA8L2VDbGFzc2lmaWVycz4KKyAgPGVDbGFzc2lmaWVycyB4c2k6dHlwZT0iZWNvcmU6RUNsYXNzIiBuYW1lPSJFZGdlRGVjb3JhdG9yIiBpbnN0YW5jZUNsYXNzTmFtZT0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLkVkZ2VEZWNvcmF0b3IiCisgICAgICBhYnN0cmFjdD0idHJ1ZSIgaW50ZXJmYWNlPSJ0cnVlIi8+CisgIDxlQ2xhc3NpZmllcnMgeHNpOnR5cGU9ImVjb3JlOkVDbGFzcyIgbmFtZT0iR3JhcGhEZWNvcmF0b3IiIGluc3RhbmNlQ2xhc3NOYW1lPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuR3JhcGhEZWNvcmF0b3IiCisgICAgICBhYnN0cmFjdD0idHJ1ZSIgaW50ZXJmYWNlPSJ0cnVlIi8+CisgIDxlQ2xhc3NpZmllcnMgeHNpOnR5cGU9ImVjb3JlOkVDbGFzcyIgbmFtZT0iTm9kZURlY29yYXRvciIgaW5zdGFuY2VDbGFzc05hbWU9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5Ob2RlRGVjb3JhdG9yIgorICAgICAgYWJzdHJhY3Q9InRydWUiIGludGVyZmFjZT0idHJ1ZSIvPgorICA8ZUNsYXNzaWZpZXJzIHhzaTp0eXBlPSJlY29yZTpFRGF0YVR5cGUiIG5hbWU9IlVSSSIgaW5zdGFuY2VDbGFzc05hbWU9Im9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5VUkkiLz4KKzwvZWNvcmU6RVBhY2thZ2U+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwvbW9kZWwvbGFiZWxzLmVjb3JlIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsL21vZGVsL2xhYmVscy5lY29yZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44Y2E2NTEwCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsL21vZGVsL2xhYmVscy5lY29yZQpAQCAtMCwwICsxLDIyIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPGVjb3JlOkVQYWNrYWdlIHhtaTp2ZXJzaW9uPSIyLjAiCisgICAgeG1sbnM6eG1pPSJodHRwOi8vd3d3Lm9tZy5vcmcvWE1JIiB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIgorICAgIHhtbG5zOmVjb3JlPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2VtZi8yMDAyL0Vjb3JlIiBuYW1lPSJsYWJlbHMiCisgICAgbnNVUkk9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS90ZXN0cy91dGlsL2xhYmVscy5lY29yZSIgbnNQcmVmaXg9Im9yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC5sYWJlbHMiPgorICA8ZUNsYXNzaWZpZXJzIHhzaTp0eXBlPSJlY29yZTpFQ2xhc3MiIG5hbWU9IlRlc3REeW5hbWljRWRnZUxhYmVsIiBlU3VwZXJUeXBlcz0iLi4vLi4vb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL21vZGVsL2dyYXBoLmVjb3JlIy8vRHluYW1pY0VkZ2VMYWJlbCI+CisgICAgPGVPcGVyYXRpb25zIG5hbWU9ImluY3JlbWVudCIvPgorICA8L2VDbGFzc2lmaWVycz4KKyAgPGVDbGFzc2lmaWVycyB4c2k6dHlwZT0iZWNvcmU6RUNsYXNzIiBuYW1lPSJUZXN0RHluYW1pY0xhYmVsMSIgZVN1cGVyVHlwZXM9Ii4uLy4uL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9tb2RlbC9ncmFwaC5lY29yZSMvL0R5bmFtaWNMYWJlbCI+CisgICAgPGVPcGVyYXRpb25zIG5hbWU9ImluY3JlbWVudCIvPgorICA8L2VDbGFzc2lmaWVycz4KKyAgPGVDbGFzc2lmaWVycyB4c2k6dHlwZT0iZWNvcmU6RUNsYXNzIiBuYW1lPSJUZXN0RHluYW1pY05vZGVMYWJlbCIgZVN1cGVyVHlwZXM9Ii4uLy4uL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9tb2RlbC9ncmFwaC5lY29yZSMvL0R5bmFtaWNOb2RlTGFiZWwiPgorICAgIDxlT3BlcmF0aW9ucyBuYW1lPSJpbmNyZW1lbnQiLz4KKyAgPC9lQ2xhc3NpZmllcnM+CisgIDxlQ2xhc3NpZmllcnMgeHNpOnR5cGU9ImVjb3JlOkVDbGFzcyIgbmFtZT0iVGVzdEludGVnZXJMYWJlbFZhbHVlIiBlU3VwZXJUeXBlcz0iLi4vLi4vb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL21vZGVsL2dyYXBoLmVjb3JlIy8vTGFiZWxWYWx1ZSI+CisgICAgPGVPcGVyYXRpb25zIG5hbWU9ImluY3JlbWVudCIvPgorICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJpIiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDIvRWNvcmUjLy9FSW50Ii8+CisgIDwvZUNsYXNzaWZpZXJzPgorICA8ZUNsYXNzaWZpZXJzIHhzaTp0eXBlPSJlY29yZTpFQ2xhc3MiIG5hbWU9IlRlc3RMYWJlbCIgZVN1cGVyVHlwZXM9Ii4uLy4uL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9tb2RlbC9ncmFwaC5lY29yZSMvL0xhYmVsIi8+CisgIDxlQ2xhc3NpZmllcnMgeHNpOnR5cGU9ImVjb3JlOkVDbGFzcyIgbmFtZT0iVGVzdFN0YXRpY0VkZ2VMYWJlbCIgZVN1cGVyVHlwZXM9Ii4uLy4uL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9tb2RlbC9ncmFwaC5lY29yZSMvL1N0YXRpY0VkZ2VMYWJlbCIvPgorICA8ZUNsYXNzaWZpZXJzIHhzaTp0eXBlPSJlY29yZTpFQ2xhc3MiIG5hbWU9IlRlc3RTdGF0aWNOb2RlTGFiZWwiIGVTdXBlclR5cGVzPSIuLi8uLi9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvbW9kZWwvZ3JhcGguZWNvcmUjLy9TdGF0aWNOb2RlTGFiZWwiLz4KKzwvZWNvcmU6RVBhY2thZ2U+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwvbW9kZWwvdGVzdHV0aWxpdHkuZ2VubW9kZWwgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwvbW9kZWwvdGVzdHV0aWxpdHkuZ2VubW9kZWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmE0ZjU1NgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC9tb2RlbC90ZXN0dXRpbGl0eS5nZW5tb2RlbApAQCAtMCwwICsxLDUyIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPGdlbm1vZGVsOkdlbk1vZGVsIHhtaTp2ZXJzaW9uPSIyLjAiCisgICAgeG1sbnM6eG1pPSJodHRwOi8vd3d3Lm9tZy5vcmcvWE1JIiB4bWxuczplY29yZT0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9lbWYvMjAwMi9FY29yZSIKKyAgICB4bWxuczpnZW5tb2RlbD0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9lbWYvMjAwMi9HZW5Nb2RlbCIgbW9kZWxEaXJlY3Rvcnk9Ii9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwvc3JjIgorICAgIGVkaXREaXJlY3Rvcnk9Ii9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwvc3JjIiBlZGl0b3JEaXJlY3Rvcnk9Ii9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwvc3JjIgorICAgIG1vZGVsUGx1Z2luSUQ9Im9yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbCIgbW9kZWxOYW1lPSJUZXN0dXRpbGl0eSIgbm9uTkxTTWFya2Vycz0idHJ1ZSIKKyAgICB0ZXN0c0RpcmVjdG9yeT0iIiB0ZXN0U3VpdGVDbGFzcz0iIiBpbXBvcnRlcklEPSJvcmcuZWNsaXBzZS5lbWYuaW1wb3J0ZXIuamF2YSIKKyAgICBjb21wbGlhbmNlTGV2ZWw9IjUuMCIgY29weXJpZ2h0RmllbGRzPSJmYWxzZSIgdXNlZEdlblBhY2thZ2VzPSIuLi8uLi9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvbW9kZWwvY29yZS5nZW5tb2RlbCMvL21vZGVsIC4uLy4uL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9tb2RlbC9jb3JlLmdlbm1vZGVsIy8vY29tbW9uIC4uLy4uL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9tb2RlbC9jb3JlLmdlbm1vZGVsIy8vZ3JhcGggLi4vLi4vb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL21vZGVsL2NvcmUuZ2VubW9kZWwjLy9tb2RpZmllciBwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLmVtZi5lY29yZS9tb2RlbC9FY29yZS5nZW5tb2RlbCMvL2Vjb3JlIC4uLy4uL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9tb2RlbC9jb3JlLmdlbm1vZGVsIy8vc2NlbmFyaW8gLi4vLi4vb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL21vZGVsL2NvcmUuZ2VubW9kZWwjLy9zZXF1ZW5jZXIiPgorICA8Zm9yZWlnbk1vZGVsPkBtb2RlbDwvZm9yZWlnbk1vZGVsPgorICA8Z2VuUGFja2FnZXMgcHJlZml4PSJEZWNvcmF0b3JzIiBiYXNlUGFja2FnZT0ib3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsIiBkaXNwb3NhYmxlUHJvdmlkZXJGYWN0b3J5PSJ0cnVlIgorICAgICAgZ2VuZXJhdGVFeGFtcGxlQ2xhc3M9ImZhbHNlIiBtdWx0aXBsZUVkaXRvclBhZ2VzPSJmYWxzZSIgZ2VuZXJhdGVNb2RlbFdpemFyZD0iZmFsc2UiCisgICAgICBlY29yZVBhY2thZ2U9ImRlY29yYXRvcnMuZWNvcmUjLyI+CisgICAgPGdlbkRhdGFUeXBlcyBlY29yZURhdGFUeXBlPSJkZWNvcmF0b3JzLmVjb3JlIy8vVVJJIi8+CisgICAgPGdlbkNsYXNzZXMgZWNvcmVDbGFzcz0iZGVjb3JhdG9ycy5lY29yZSMvL1Rlc3RFZGdlRGVjb3JhdG9yMSI+CisgICAgICA8Z2VuRmVhdHVyZXMgY3JlYXRlQ2hpbGQ9ImZhbHNlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVBdHRyaWJ1dGUgZGVjb3JhdG9ycy5lY29yZSMvL1Rlc3RFZGdlRGVjb3JhdG9yMS9ub2RlQVVSSSIvPgorICAgICAgPGdlbkZlYXR1cmVzIGNyZWF0ZUNoaWxkPSJmYWxzZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFQXR0cmlidXRlIGRlY29yYXRvcnMuZWNvcmUjLy9UZXN0RWRnZURlY29yYXRvcjEvbm9kZUJVUkkiLz4KKyAgICAgIDxnZW5GZWF0dXJlcyBjcmVhdGVDaGlsZD0iZmFsc2UiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RUF0dHJpYnV0ZSBkZWNvcmF0b3JzLmVjb3JlIy8vVGVzdEVkZ2VEZWNvcmF0b3IxL2VkZ2VVUkkiLz4KKyAgICA8L2dlbkNsYXNzZXM+CisgICAgPGdlbkNsYXNzZXMgZWNvcmVDbGFzcz0iZGVjb3JhdG9ycy5lY29yZSMvL1Rlc3RHcmFwaERlY29yYXRvcjEiLz4KKyAgICA8Z2VuQ2xhc3NlcyBlY29yZUNsYXNzPSJkZWNvcmF0b3JzLmVjb3JlIy8vVGVzdE5vZGVEZWNvcmF0b3IxIi8+CisgICAgPGdlbkNsYXNzZXMgZWNvcmVDbGFzcz0iZGVjb3JhdG9ycy5lY29yZSMvL1Rlc3RTY2VuYXJpb0dyYXBoRGVjb3JhdG9yMSI+CisgICAgICA8Z2VuRmVhdHVyZXMgY3JlYXRlQ2hpbGQ9ImZhbHNlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVBdHRyaWJ1dGUgZGVjb3JhdG9ycy5lY29yZSMvL1Rlc3RTY2VuYXJpb0dyYXBoRGVjb3JhdG9yMS9kb3VibGVWYWx1ZSIvPgorICAgICAgPGdlbkZlYXR1cmVzIGNyZWF0ZUNoaWxkPSJmYWxzZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFQXR0cmlidXRlIGRlY29yYXRvcnMuZWNvcmUjLy9UZXN0U2NlbmFyaW9HcmFwaERlY29yYXRvcjEvaW50VmFsdWUiLz4KKyAgICAgIDxnZW5GZWF0dXJlcyBjcmVhdGVDaGlsZD0iZmFsc2UiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RUF0dHJpYnV0ZSBkZWNvcmF0b3JzLmVjb3JlIy8vVGVzdFNjZW5hcmlvR3JhcGhEZWNvcmF0b3IxL3N0cmluZ1ZhbHVlIi8+CisgICAgICA8Z2VuRmVhdHVyZXMgbm90aWZ5PSJmYWxzZSIgY3JlYXRlQ2hpbGQ9ImZhbHNlIiBwcm9wZXJ0eVNvcnRDaG9pY2VzPSJ0cnVlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVSZWZlcmVuY2UgZGVjb3JhdG9ycy5lY29yZSMvL1Rlc3RTY2VuYXJpb0dyYXBoRGVjb3JhdG9yMS9zVEVNVGltZVZhbHVlIi8+CisgICAgICA8Z2VuRmVhdHVyZXMgY3JlYXRlQ2hpbGQ9ImZhbHNlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVBdHRyaWJ1dGUgZGVjb3JhdG9ycy5lY29yZSMvL1Rlc3RTY2VuYXJpb0dyYXBoRGVjb3JhdG9yMS9ib29sZWFuVmFsdWUiLz4KKyAgICA8L2dlbkNsYXNzZXM+CisgICAgPGdlbkNsYXNzZXMgaW1hZ2U9ImZhbHNlIiBlY29yZUNsYXNzPSJkZWNvcmF0b3JzLmVjb3JlIy8vRWRnZURlY29yYXRvciIvPgorICAgIDxnZW5DbGFzc2VzIGltYWdlPSJmYWxzZSIgZWNvcmVDbGFzcz0iZGVjb3JhdG9ycy5lY29yZSMvL0dyYXBoRGVjb3JhdG9yIi8+CisgICAgPGdlbkNsYXNzZXMgaW1hZ2U9ImZhbHNlIiBlY29yZUNsYXNzPSJkZWNvcmF0b3JzLmVjb3JlIy8vTm9kZURlY29yYXRvciIvPgorICA8L2dlblBhY2thZ2VzPgorICA8Z2VuUGFja2FnZXMgcHJlZml4PSJMYWJlbHMiIGJhc2VQYWNrYWdlPSJvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwiIGRpc3Bvc2FibGVQcm92aWRlckZhY3Rvcnk9InRydWUiCisgICAgICBnZW5lcmF0ZUV4YW1wbGVDbGFzcz0iZmFsc2UiIG11bHRpcGxlRWRpdG9yUGFnZXM9ImZhbHNlIiBnZW5lcmF0ZU1vZGVsV2l6YXJkPSJmYWxzZSIKKyAgICAgIGVjb3JlUGFja2FnZT0ibGFiZWxzLmVjb3JlIy8iPgorICAgIDxnZW5DbGFzc2VzIGVjb3JlQ2xhc3M9ImxhYmVscy5lY29yZSMvL1Rlc3REeW5hbWljRWRnZUxhYmVsIj4KKyAgICAgIDxnZW5PcGVyYXRpb25zIGVjb3JlT3BlcmF0aW9uPSJsYWJlbHMuZWNvcmUjLy9UZXN0RHluYW1pY0VkZ2VMYWJlbC9pbmNyZW1lbnQiLz4KKyAgICA8L2dlbkNsYXNzZXM+CisgICAgPGdlbkNsYXNzZXMgZWNvcmVDbGFzcz0ibGFiZWxzLmVjb3JlIy8vVGVzdER5bmFtaWNMYWJlbDEiPgorICAgICAgPGdlbk9wZXJhdGlvbnMgZWNvcmVPcGVyYXRpb249ImxhYmVscy5lY29yZSMvL1Rlc3REeW5hbWljTGFiZWwxL2luY3JlbWVudCIvPgorICAgIDwvZ2VuQ2xhc3Nlcz4KKyAgICA8Z2VuQ2xhc3NlcyBlY29yZUNsYXNzPSJsYWJlbHMuZWNvcmUjLy9UZXN0RHluYW1pY05vZGVMYWJlbCI+CisgICAgICA8Z2VuT3BlcmF0aW9ucyBlY29yZU9wZXJhdGlvbj0ibGFiZWxzLmVjb3JlIy8vVGVzdER5bmFtaWNOb2RlTGFiZWwvaW5jcmVtZW50Ii8+CisgICAgPC9nZW5DbGFzc2VzPgorICAgIDxnZW5DbGFzc2VzIGVjb3JlQ2xhc3M9ImxhYmVscy5lY29yZSMvL1Rlc3RJbnRlZ2VyTGFiZWxWYWx1ZSI+CisgICAgICA8Z2VuRmVhdHVyZXMgY3JlYXRlQ2hpbGQ9ImZhbHNlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVBdHRyaWJ1dGUgbGFiZWxzLmVjb3JlIy8vVGVzdEludGVnZXJMYWJlbFZhbHVlL2kiLz4KKyAgICAgIDxnZW5PcGVyYXRpb25zIGVjb3JlT3BlcmF0aW9uPSJsYWJlbHMuZWNvcmUjLy9UZXN0SW50ZWdlckxhYmVsVmFsdWUvaW5jcmVtZW50Ii8+CisgICAgPC9nZW5DbGFzc2VzPgorICAgIDxnZW5DbGFzc2VzIGVjb3JlQ2xhc3M9ImxhYmVscy5lY29yZSMvL1Rlc3RMYWJlbCIvPgorICAgIDxnZW5DbGFzc2VzIGVjb3JlQ2xhc3M9ImxhYmVscy5lY29yZSMvL1Rlc3RTdGF0aWNFZGdlTGFiZWwiLz4KKyAgICA8Z2VuQ2xhc3NlcyBlY29yZUNsYXNzPSJsYWJlbHMuZWNvcmUjLy9UZXN0U3RhdGljTm9kZUxhYmVsIi8+CisgIDwvZ2VuUGFja2FnZXM+Cis8L2dlbm1vZGVsOkdlbk1vZGVsPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsL25vdGljZS5odG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsL25vdGljZS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM2YWY5NjYKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwvbm90aWNlLmh0bWwKQEAgLTAsMCArMSw3OSBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMC8vRU4iPgorPGh0bWw+Cis8aGVhZD4KKzxtZXRhIGh0dHAtZXF1aXY9Q29udGVudC1UeXBlIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1pc28tODg1OS0xIj4KKzx0aXRsZT5FY2xpcHNlLm9yZyBTb2Z0d2FyZSBVc2VyIEFncmVlbWVudDwvdGl0bGU+Cis8L2hlYWQ+CisKKzxib2R5IGxhbmc9IkVOLVVTIiBsaW5rPWJsdWUgdmxpbms9cHVycGxlPgorPGgyPkVjbGlwc2UgRm91bmRhdGlvbiBTb2Z0d2FyZSBVc2VyIEFncmVlbWVudDwvaDI+Cis8cD5NYXJjaCAxNywgMjAwNTwvcD4KKworPGgzPlVzYWdlIE9mIENvbnRlbnQ8L2gzPgorCis8cD5USEUgRUNMSVBTRSBGT1VOREFUSU9OIE1BS0VTIEFWQUlMQUJMRSBTT0ZUV0FSRSwgRE9DVU1FTlRBVElPTiwgSU5GT1JNQVRJT04gQU5EL09SIE9USEVSIE1BVEVSSUFMUyBGT1IgT1BFTiBTT1VSQ0UgUFJPSkVDVFMKKyAgIChDT0xMRUNUSVZFTFkgJnF1b3Q7Q09OVEVOVCZxdW90OykuICBVU0UgT0YgVEhFIENPTlRFTlQgSVMgR09WRVJORUQgQlkgVEhFIFRFUk1TIEFORCBDT05ESVRJT05TIE9GIFRISVMgQUdSRUVNRU5UIEFORC9PUiBUSEUgVEVSTVMgQU5ECisgICBDT05ESVRJT05TIE9GIExJQ0VOU0UgQUdSRUVNRU5UUyBPUiBOT1RJQ0VTIElORElDQVRFRCBPUiBSRUZFUkVOQ0VEIEJFTE9XLiAgQlkgVVNJTkcgVEhFIENPTlRFTlQsIFlPVSBBR1JFRSBUSEFUIFlPVVIgVVNFCisgICBPRiBUSEUgQ09OVEVOVCBJUyBHT1ZFUk5FRCBCWSBUSElTIEFHUkVFTUVOVCBBTkQvT1IgVEhFIFRFUk1TIEFORCBDT05ESVRJT05TIE9GIEFOWSBBUFBMSUNBQkxFIExJQ0VOU0UgQUdSRUVNRU5UUyBPUgorICAgTk9USUNFUyBJTkRJQ0FURUQgT1IgUkVGRVJFTkNFRCBCRUxPVy4gIElGIFlPVSBETyBOT1QgQUdSRUUgVE8gVEhFIFRFUk1TIEFORCBDT05ESVRJT05TIE9GIFRISVMgQUdSRUVNRU5UIEFORCBUSEUgVEVSTVMgQU5ECisgICBDT05ESVRJT05TIE9GIEFOWSBBUFBMSUNBQkxFIExJQ0VOU0UgQUdSRUVNRU5UUyBPUiBOT1RJQ0VTIElORElDQVRFRCBPUiBSRUZFUkVOQ0VEIEJFTE9XLCBUSEVOIFlPVSBNQVkgTk9UIFVTRSBUSEUgQ09OVEVOVC48L3A+CisgICAKKzxoMz5BcHBsaWNhYmxlIExpY2Vuc2VzPC9oMz4gICAKKyAgIAorPHA+VW5sZXNzIG90aGVyd2lzZSBpbmRpY2F0ZWQsIGFsbCBDb250ZW50IG1hZGUgYXZhaWxhYmxlIGJ5IHRoZSBFY2xpcHNlIEZvdW5kYXRpb24gaXMgcHJvdmlkZWQgdG8geW91IHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMAorICAgKCZxdW90O0VQTCZxdW90OykuICBBIGNvcHkgb2YgdGhlIEVQTCBpcyBwcm92aWRlZCB3aXRoIHRoaXMgQ29udGVudCBhbmQgaXMgYWxzbyBhdmFpbGFibGUgYXQgPGEgaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwiPmh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sPC9hPi4KKyAgIEZvciBwdXJwb3NlcyBvZiB0aGUgRVBMLCAmcXVvdDtQcm9ncmFtJnF1b3Q7IHdpbGwgbWVhbiB0aGUgQ29udGVudC48L3A+CisKKzxwPkNvbnRlbnQgaW5jbHVkZXMsIGJ1dCBpcyBub3QgbGltaXRlZCB0bywgc291cmNlIGNvZGUsIG9iamVjdCBjb2RlLCBkb2N1bWVudGF0aW9uIGFuZCBvdGhlciBmaWxlcyBtYWludGFpbmVkIGluIHRoZSBFY2xpcHNlLm9yZyBDVlMgcmVwb3NpdG9yeSAoJnF1b3Q7UmVwb3NpdG9yeSZxdW90OykgaW4gQ1ZTCisgICBtb2R1bGVzICgmcXVvdDtNb2R1bGVzJnF1b3Q7KSBhbmQgbWFkZSBhdmFpbGFibGUgYXMgZG93bmxvYWRhYmxlIGFyY2hpdmVzICgmcXVvdDtEb3dubG9hZHMmcXVvdDspLjwvcD4KKyAgIAorPHVsPgorCTxsaT5Db250ZW50IG1heSBiZSBzdHJ1Y3R1cmVkIGFuZCBwYWNrYWdlZCBpbnRvIG1vZHVsZXMgdG8gZmFjaWxpdGF0ZSBkZWxpdmVyaW5nLCBleHRlbmRpbmcsIGFuZCB1cGdyYWRpbmcgdGhlIENvbnRlbnQuICBUeXBpY2FsIG1vZHVsZXMgbWF5IGluY2x1ZGUgcGx1Zy1pbnMgKCZxdW90O1BsdWctaW5zJnF1b3Q7KSwgcGx1Zy1pbiBmcmFnbWVudHMgKCZxdW90O0ZyYWdtZW50cyZxdW90OyksIGFuZCBmZWF0dXJlcyAoJnF1b3Q7RmVhdHVyZXMmcXVvdDspLjwvbGk+CisJPGxpPkVhY2ggUGx1Zy1pbiBvciBGcmFnbWVudCBtYXkgYmUgcGFja2FnZWQgYXMgYSBzdWItZGlyZWN0b3J5IG9yIEpBUiAoSmF2YSZ0cmFkZTsgQVJjaGl2ZSkgaW4gYSBkaXJlY3RvcnkgbmFtZWQgJnF1b3Q7cGx1Z2lucyZxdW90Oy48L2xpPgorCTxsaT5BIEZlYXR1cmUgaXMgYSBidW5kbGUgb2Ygb25lIG9yIG1vcmUgUGx1Zy1pbnMgYW5kL29yIEZyYWdtZW50cyBhbmQgYXNzb2NpYXRlZCBtYXRlcmlhbC4gIEVhY2ggRmVhdHVyZSBtYXkgYmUgcGFja2FnZWQgYXMgYSBzdWItZGlyZWN0b3J5IGluIGEgZGlyZWN0b3J5IG5hbWVkICZxdW90O2ZlYXR1cmVzJnF1b3Q7LiAgV2l0aGluIGEgRmVhdHVyZSwgZmlsZXMgbmFtZWQgJnF1b3Q7ZmVhdHVyZS54bWwmcXVvdDsgbWF5IGNvbnRhaW4gYSBsaXN0IG9mIHRoZSBuYW1lcyBhbmQgdmVyc2lvbiBudW1iZXJzIG9mIHRoZSBQbHVnLWlucworICAgICAgYW5kL29yIEZyYWdtZW50cyBhc3NvY2lhdGVkIHdpdGggdGhhdCBGZWF0dXJlLjwvbGk+CisJPGxpPkZlYXR1cmVzIG1heSBhbHNvIGluY2x1ZGUgb3RoZXIgRmVhdHVyZXMgKCZxdW90O0luY2x1ZGVkIEZlYXR1cmVzJnF1b3Q7KS4gV2l0aGluIGEgRmVhdHVyZSwgZmlsZXMgbmFtZWQgJnF1b3Q7ZmVhdHVyZS54bWwmcXVvdDsgbWF5IGNvbnRhaW4gYSBsaXN0IG9mIHRoZSBuYW1lcyBhbmQgdmVyc2lvbiBudW1iZXJzIG9mIEluY2x1ZGVkIEZlYXR1cmVzLjwvbGk+Cis8L3VsPiAgIAorIAorPHA+VGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIGdvdmVybmluZyBQbHVnLWlucyBhbmQgRnJhZ21lbnRzIHNob3VsZCBiZSBjb250YWluZWQgaW4gZmlsZXMgbmFtZWQgJnF1b3Q7YWJvdXQuaHRtbCZxdW90OyAoJnF1b3Q7QWJvdXRzJnF1b3Q7KS4gVGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIGdvdmVybmluZyBGZWF0dXJlcyBhbmQKK0luY2x1ZGVkIEZlYXR1cmVzIHNob3VsZCBiZSBjb250YWluZWQgaW4gZmlsZXMgbmFtZWQgJnF1b3Q7bGljZW5zZS5odG1sJnF1b3Q7ICgmcXVvdDtGZWF0dXJlIExpY2Vuc2VzJnF1b3Q7KS4gIEFib3V0cyBhbmQgRmVhdHVyZSBMaWNlbnNlcyBtYXkgYmUgbG9jYXRlZCBpbiBhbnkgZGlyZWN0b3J5IG9mIGEgRG93bmxvYWQgb3IgTW9kdWxlCitpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0byB0aGUgZm9sbG93aW5nIGxvY2F0aW9uczo8L3A+CisKKzx1bD4KKwk8bGk+VGhlIHRvcC1sZXZlbCAocm9vdCkgZGlyZWN0b3J5PC9saT4KKwk8bGk+UGx1Zy1pbiBhbmQgRnJhZ21lbnQgZGlyZWN0b3JpZXM8L2xpPgorCTxsaT5JbnNpZGUgUGx1Zy1pbnMgYW5kIEZyYWdtZW50cyBwYWNrYWdlZCBhcyBKQVJzPC9saT4KKwk8bGk+U3ViLWRpcmVjdG9yaWVzIG9mIHRoZSBkaXJlY3RvcnkgbmFtZWQgJnF1b3Q7c3JjJnF1b3Q7IG9mIGNlcnRhaW4gUGx1Zy1pbnM8L2xpPgorCTxsaT5GZWF0dXJlIGRpcmVjdG9yaWVzPC9saT4KKzwvdWw+CisJCQorPHA+Tm90ZTogaWYgYSBGZWF0dXJlIG1hZGUgYXZhaWxhYmxlIGJ5IHRoZSBFY2xpcHNlIEZvdW5kYXRpb24gaXMgaW5zdGFsbGVkIHVzaW5nIHRoZSBFY2xpcHNlIFVwZGF0ZSBNYW5hZ2VyLCB5b3UgbXVzdCBhZ3JlZSB0byBhIGxpY2Vuc2UgKCZxdW90O0ZlYXR1cmUgVXBkYXRlIExpY2Vuc2UmcXVvdDspIGR1cmluZyB0aGUKK2luc3RhbGxhdGlvbiBwcm9jZXNzLiAgSWYgdGhlIEZlYXR1cmUgY29udGFpbnMgSW5jbHVkZWQgRmVhdHVyZXMsIHRoZSBGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlIHNob3VsZCBlaXRoZXIgcHJvdmlkZSB5b3Ugd2l0aCB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgZ292ZXJuaW5nIHRoZSBJbmNsdWRlZCBGZWF0dXJlcyBvcgoraW5mb3JtIHlvdSB3aGVyZSB5b3UgY2FuIGxvY2F0ZSB0aGVtLiAgRmVhdHVyZSBVcGRhdGUgTGljZW5zZXMgbWF5IGJlIGZvdW5kIGluIHRoZSAmcXVvdDtsaWNlbnNlJnF1b3Q7IHByb3BlcnR5IG9mIGZpbGVzIG5hbWVkICZxdW90O2ZlYXR1cmUucHJvcGVydGllcyZxdW90OyBmb3VuZCB3aXRoaW4gYSBGZWF0dXJlLgorU3VjaCBBYm91dHMsIEZlYXR1cmUgTGljZW5zZXMsIGFuZCBGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlcyBjb250YWluIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyAob3IgcmVmZXJlbmNlcyB0byBzdWNoIHRlcm1zIGFuZCBjb25kaXRpb25zKSB0aGF0IGdvdmVybiB5b3VyIHVzZSBvZiB0aGUgYXNzb2NpYXRlZCBDb250ZW50IGluCit0aGF0IGRpcmVjdG9yeS48L3A+CisKKzxwPlRIRSBBQk9VVFMsIEZFQVRVUkUgTElDRU5TRVMsIEFORCBGRUFUVVJFIFVQREFURSBMSUNFTlNFUyBNQVkgUkVGRVIgVE8gVEhFIEVQTCBPUiBPVEhFUiBMSUNFTlNFIEFHUkVFTUVOVFMsIE5PVElDRVMgT1IgVEVSTVMgQU5EIENPTkRJVElPTlMuICBTT01FIE9GIFRIRVNFCitPVEhFUiBMSUNFTlNFIEFHUkVFTUVOVFMgTUFZIElOQ0xVREUgKEJVVCBBUkUgTk9UIExJTUlURUQgVE8pOjwvcD4KKworPHVsPgorCTxsaT5Db21tb24gUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjAgKGF2YWlsYWJsZSBhdCA8YSBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2NwbC12MTAuaHRtbCI+aHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9jcGwtdjEwLmh0bWw8L2E+KTwvbGk+CisJPGxpPkFwYWNoZSBTb2Z0d2FyZSBMaWNlbnNlIDEuMSAoYXZhaWxhYmxlIGF0IDxhIGhyZWY9Imh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFIj5odHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRTwvYT4pPC9saT4KKwk8bGk+QXBhY2hlIFNvZnR3YXJlIExpY2Vuc2UgMi4wIChhdmFpbGFibGUgYXQgPGEgaHJlZj0iaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wIj5odHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjA8L2E+KTwvbGk+CisJPGxpPklCTSBQdWJsaWMgTGljZW5zZSAxLjAgKGF2YWlsYWJsZSBhdCA8YSBocmVmPSJodHRwOi8vb3NzLnNvZnR3YXJlLmlibS5jb20vZGV2ZWxvcGVyd29ya3Mvb3BlbnNvdXJjZS9saWNlbnNlMTAuaHRtbCI+aHR0cDovL29zcy5zb2Z0d2FyZS5pYm0uY29tL2RldmVsb3BlcndvcmtzL29wZW5zb3VyY2UvbGljZW5zZTEwLmh0bWw8L2E+KTwvbGk+CQorCTxsaT5NZXRybyBMaW5rIFB1YmxpYyBMaWNlbnNlIDEuMDAgKGF2YWlsYWJsZSBhdCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW5ncm91cC5vcmcvb3Blbm1vdGlmL3N1cHBvcnRlcnMvbWV0cm9saW5rL2xpY2Vuc2UuaHRtbCI+aHR0cDovL3d3dy5vcGVuZ3JvdXAub3JnL29wZW5tb3RpZi9zdXBwb3J0ZXJzL21ldHJvbGluay9saWNlbnNlLmh0bWw8L2E+KTwvbGk+CisJPGxpPk1vemlsbGEgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjEgKGF2YWlsYWJsZSBhdCA8YSBocmVmPSJodHRwOi8vd3d3Lm1vemlsbGEub3JnL01QTC9NUEwtMS4xLmh0bWwiPmh0dHA6Ly93d3cubW96aWxsYS5vcmcvTVBML01QTC0xLjEuaHRtbDwvYT4pPC9saT4KKzwvdWw+CisKKzxwPklUIElTIFlPVVIgT0JMSUdBVElPTiBUTyBSRUFEIEFORCBBQ0NFUFQgQUxMIFNVQ0ggVEVSTVMgQU5EIENPTkRJVElPTlMgUFJJT1IgVE8gVVNFIE9GIFRIRSBDT05URU5ULiAgSWYgbm8gQWJvdXQsIEZlYXR1cmUgTGljZW5zZSwgb3IgRmVhdHVyZSBVcGRhdGUgTGljZW5zZSBpcyBwcm92aWRlZCwgcGxlYXNlCitjb250YWN0IHRoZSBFY2xpcHNlIEZvdW5kYXRpb24gdG8gZGV0ZXJtaW5lIHdoYXQgdGVybXMgYW5kIGNvbmRpdGlvbnMgZ292ZXJuIHRoYXQgcGFydGljdWxhciBDb250ZW50LjwvcD4KKworPGgzPkNyeXB0b2dyYXBoeTwvaDM+CisKKzxwPkNvbnRlbnQgbWF5IGNvbnRhaW4gZW5jcnlwdGlvbiBzb2Z0d2FyZS4gVGhlIGNvdW50cnkgaW4gd2hpY2ggeW91IGFyZSBjdXJyZW50bHkgbWF5IGhhdmUgcmVzdHJpY3Rpb25zIG9uIHRoZSBpbXBvcnQsIHBvc3Nlc3Npb24sIGFuZCB1c2UsIGFuZC9vciByZS1leHBvcnQgdG8KKyAgIGFub3RoZXIgY291bnRyeSwgb2YgZW5jcnlwdGlvbiBzb2Z0d2FyZS4gQkVGT1JFIHVzaW5nIGFueSBlbmNyeXB0aW9uIHNvZnR3YXJlLCBwbGVhc2UgY2hlY2sgdGhlIGNvdW50cnkncyBsYXdzLCByZWd1bGF0aW9ucyBhbmQgcG9saWNpZXMgY29uY2VybmluZyB0aGUgaW1wb3J0LAorICAgcG9zc2Vzc2lvbiwgb3IgdXNlLCBhbmQgcmUtZXhwb3J0IG9mIGVuY3J5cHRpb24gc29mdHdhcmUsIHRvIHNlZSBpZiB0aGlzIGlzIHBlcm1pdHRlZC48L3A+CisgICAKKzxzbWFsbD5KYXZhIGFuZCBhbGwgSmF2YS1iYXNlZCB0cmFkZW1hcmtzIGFyZSB0cmFkZW1hcmtzIG9mIFN1biBNaWNyb3N5c3RlbXMsIEluYy4gaW4gdGhlIFVuaXRlZCBTdGF0ZXMsIG90aGVyIGNvdW50cmllcywgb3IgYm90aC48L3NtYWxsPiAgIAorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsL3BsdWdpbi5wcm9wZXJ0aWVzIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsL3BsdWdpbi5wcm9wZXJ0aWVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcyNmQzNDEKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwvcGx1Z2luLnByb3BlcnRpZXMKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsL3BsdWdpbi54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwvcGx1Z2luLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NDRiMzI2Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsL3BsdWdpbi54bWwKQEAgLTAsMCArMSw2MCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzw/ZWNsaXBzZSB2ZXJzaW9uPSIzLjAiPz4KKworPCEtLQorIDxjb3B5cmlnaHQ+CisgPC9jb3B5cmlnaHQ+CisKKyAkSWQkCistLT4KKworPHBsdWdpbj4KKworICA8ZXh0ZW5zaW9uIHBvaW50PSJvcmcuZWNsaXBzZS5lbWYuZWRpdC5pdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yaWVzIj4KKyAgICA8ZmFjdG9yeSAKKyAgICAgICB1cmkgPSAiaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL3Rlc3RzL3V0aWwvZGVjb3JhdG9ycy5lY29yZSIgCisgICAgICAgY2xhc3MgPSAib3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsLmRlY29yYXRvcnMucHJvdmlkZXIuRGVjb3JhdG9yc0l0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5IgorICAgICAgIHN1cHBvcnRlZFR5cGVzID0gCisgICAgICAgICAib3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUVkaXRpbmdEb21haW5JdGVtUHJvdmlkZXIKKyAgICAgICAgICBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JU3RydWN0dXJlZEl0ZW1Db250ZW50UHJvdmlkZXIKKyAgICAgICAgICBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JVHJlZUl0ZW1Db250ZW50UHJvdmlkZXIKKyAgICAgICAgICBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbUxhYmVsUHJvdmlkZXIKKyAgICAgICAgICBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbVByb3BlcnR5U291cmNlIiAvPgorICA8L2V4dGVuc2lvbj4KKyAgCisgIDxleHRlbnNpb24gcG9pbnQ9Im9yZy5lY2xpcHNlLmVtZi5lY29yZS5nZW5lcmF0ZWRfcGFja2FnZSI+CisgICAgPHBhY2thZ2UKKyAgICAgICB1cmkgPSAiaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL3Rlc3RzL3V0aWwvZGVjb3JhdG9ycy5lY29yZSIKKyAgICAgICBjbGFzcyA9ICJvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwuZGVjb3JhdG9ycy5EZWNvcmF0b3JzUGFja2FnZSIKKyAgICAgICBnZW5Nb2RlbCA9ICJtb2RlbC90ZXN0dXRpbGl0eS5nZW5tb2RlbCIgLz4gCisgIDwvZXh0ZW5zaW9uPgorCisKKyAgPGV4dGVuc2lvbgorICAgIHBvaW50ID0gIm9yZy5lY2xpcHNlLnVpLm5ld1dpemFyZHMiPgorICAgIDxjYXRlZ29yeQorICAgICAgaWQgPSAib3JnLmVjbGlwc2UuZW1mLmVjb3JlLldpemFyZC5jYXRlZ29yeS5JRCIKKyAgICAgIG5hbWU9IiVfVUlfV2l6YXJkX2NhdGVnb3J5Ij4KKyAgICA8L2NhdGVnb3J5PgorICAgIDx3aXphcmQKKyAgICAgIGlkID0gIm9yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC5kZWNvcmF0b3JzLnByZXNlbnRhdGlvbi5EZWNvcmF0b3JzTW9kZWxXaXphcmRJRCIKKyAgICAgIG5hbWUgPSAiJV9VSV9EZWNvcmF0b3JzTW9kZWxXaXphcmRfbGFiZWwiCisgICAgICBjbGFzcyA9ICJvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwuZGVjb3JhdG9ycy5wcmVzZW50YXRpb24uRGVjb3JhdG9yc01vZGVsV2l6YXJkIgorICAgICAgY2F0ZWdvcnkgPSAib3JnLmVjbGlwc2UuZW1mLmVjb3JlLldpemFyZC5jYXRlZ29yeS5JRCIKKyAgICAgIGljb24gPSAiaWNvbnMvZnVsbC9vYmoxNi9EZWNvcmF0b3JzTW9kZWxGaWxlLmdpZiI+CisgICAgICA8ZGVzY3JpcHRpb24+JV9VSV9EZWNvcmF0b3JzTW9kZWxXaXphcmRfZGVzY3JpcHRpb248L2Rlc2NyaXB0aW9uPgorICAgICAgPHNlbGVjdGlvbiBjbGFzcyA9ICJvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUmVzb3VyY2UiIC8+CisgICAgPC93aXphcmQ+CisgIDwvZXh0ZW5zaW9uPgorCisgIDxleHRlbnNpb24gcG9pbnQgPSAib3JnLmVjbGlwc2UudWkuZWRpdG9ycyI+CisgICAgPGVkaXRvcgorICAgICAgICBpZCA9ICJvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwuZGVjb3JhdG9ycy5wcmVzZW50YXRpb24uRGVjb3JhdG9yc0VkaXRvcklEIgorICAgICAgICBuYW1lID0gIiVfVUlfRGVjb3JhdG9yc0VkaXRvcl9sYWJlbCIKKyAgICAgICAgaWNvbiA9ICJpY29ucy9mdWxsL29iajE2L0RlY29yYXRvcnNNb2RlbEZpbGUuZ2lmIgorICAgICAgICBleHRlbnNpb25zID0gImRlY29yYXRvcnMiCisgICAgICAgIGNsYXNzID0gIm9yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC5kZWNvcmF0b3JzLnByZXNlbnRhdGlvbi5EZWNvcmF0b3JzRWRpdG9yIiAKKyAgICAgICAgY29udHJpYnV0b3JDbGFzcz0ib3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsLmRlY29yYXRvcnMucHJlc2VudGF0aW9uLkRlY29yYXRvcnNBY3Rpb25CYXJDb250cmlidXRvciIgPgorICAgIDwvZWRpdG9yPgorICA8L2V4dGVuc2lvbj4gICAgCis8L3BsdWdpbj4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS90ZXN0cy91dGlsL0FjdGl2YXRvci5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3Rlc3RzL3V0aWwvQWN0aXZhdG9yLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGIyMjQxMQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS90ZXN0cy91dGlsL0FjdGl2YXRvci5qYXZhCkBAIC0wLDAgKzEsNjEgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLnBsdWdpbi5BYnN0cmFjdFVJUGx1Z2luOworaW1wb3J0IG9yZy5vc2dpLmZyYW1ld29yay5CdW5kbGVDb250ZXh0OworCisvKioKKyAqIFRoZSBhY3RpdmF0b3IgY2xhc3MgY29udHJvbHMgdGhlIHBsdWctaW4gbGlmZSBjeWNsZQorICovCitwdWJsaWMgY2xhc3MgQWN0aXZhdG9yIGV4dGVuZHMgQWJzdHJhY3RVSVBsdWdpbiB7CisKKwkvKioKKwkgKiBUaGUgcGx1Zy1pbiBJRAorCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFBMVUdJTl9JRCA9ICJvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwiOworCisJLy8gVGhlIHNoYXJlZCBpbnN0YW5jZQorCXByaXZhdGUgc3RhdGljIEFjdGl2YXRvciBwbHVnaW47CisJCisJLyoqCisJICogVGhlIGNvbnN0cnVjdG9yCisJICovCisJcHVibGljIEFjdGl2YXRvcigpIHsKKwkJcGx1Z2luID0gdGhpczsKKwl9CisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnVpLnBsdWdpbi5BYnN0cmFjdFVJUGx1Z2luI3N0YXJ0KG9yZy5vc2dpLmZyYW1ld29yay5CdW5kbGVDb250ZXh0KQorCSAqLworCXB1YmxpYyB2b2lkIHN0YXJ0KEJ1bmRsZUNvbnRleHQgY29udGV4dCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCXN1cGVyLnN0YXJ0KGNvbnRleHQpOworCX0KKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2UudWkucGx1Z2luLkFic3RyYWN0VUlQbHVnaW4jc3RvcChvcmcub3NnaS5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dCkKKwkgKi8KKwlwdWJsaWMgdm9pZCBzdG9wKEJ1bmRsZUNvbnRleHQgY29udGV4dCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCXBsdWdpbiA9IG51bGw7CisJCXN1cGVyLnN0b3AoY29udGV4dCk7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgc2hhcmVkIGluc3RhbmNlCisJICoKKwkgKiBAcmV0dXJuIHRoZSBzaGFyZWQgaW5zdGFuY2UKKwkgKi8KKwlwdWJsaWMgc3RhdGljIEFjdGl2YXRvciBnZXREZWZhdWx0KCkgeworCQlyZXR1cm4gcGx1Z2luOworCX0KKworfSAvLyBBY3RpdmF0b3IKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS90ZXN0cy91dGlsL0NvdW50cnlEaXJlY3RvcnlVdGlsaXRpZXMuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS90ZXN0cy91dGlsL0NvdW50cnlEaXJlY3RvcnlVdGlsaXRpZXMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YWMyNTY1Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3Rlc3RzL3V0aWwvQ291bnRyeURpcmVjdG9yeVV0aWxpdGllcy5qYXZhCkBAIC0wLDAgKzEsMjMxIEBACisvLyBDb3VudHJ5RGlyZWN0b3J5VXRpbGl0aWVzLmphdmEKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGphdmEuaW8uRmlsZTsKK2ltcG9ydCBqYXZhLmlvLkZpbGVGaWx0ZXI7CitpbXBvcnQgamF2YS5pby5GaWxlSW5wdXRTdHJlYW07CitpbXBvcnQgamF2YS5pby5GaWxlTm90Rm91bmRFeGNlcHRpb247CitpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OworaW1wb3J0IGphdmEudXRpbC5MaXN0OworaW1wb3J0IGphdmEudXRpbC5Qcm9wZXJ0aWVzOworCisvKioKKyAqIFRoaXMgY2xhc3MgY29udGFpbnMgdXRpbGl0eSBtZXRob2RzIGZvciBleHRyYWN0aW5nIGluZm9ybWF0aW9uIHN1Y2ggYXMKKyAqIElTTzMwMTY2LTEgYWxwaGEzIGNvZGVzIGZyb20gZGlyZWN0b3JpZXMgYW5kIHRoZWlyIG5hbWVzIHRoYXQgY29udGFpbgorICogcHJvcGVydHkgZmlsZXMgZGVmaW5pbmcgZ3JhcGhzIHJlcHJlc2VudGluZyBjb3VudHJpZXMuCisgKi8KK3B1YmxpYyBjbGFzcyBDb3VudHJ5RGlyZWN0b3J5VXRpbGl0aWVzIHsKKworCWZpbmFsIHN0YXRpYyBTdHJpbmcgQ09VTlRSWV9ESVJfUEFUSCA9IENvdW50cnlHcmFwaENyZWF0b3IuUkVTT1VSQ0VTX0RJUgorCQkJKyBGaWxlLnNlcGFyYXRvciArIENvdW50cnlHcmFwaENyZWF0b3IuREFUQV9ESVIgKyBGaWxlLnNlcGFyYXRvcgorCQkJKyBDb3VudHJ5R3JhcGhDcmVhdG9yLkNPVU5UUllfRElSOworCisJLyoqCisJICogQHBhcmFtIGNvdW50cnlDb2RlCisJICogQHJldHVybiB0aGUgbmFtZSBvZiB0aGUgY291bnRyeQorCSAqLworCXB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldENvdW50cnlOYW1lKENvdW50cnlDb2RlIGNvdW50cnlDb2RlKSB7CisJCVN0cmluZyByZXRWYWx1ZSA9ICIiOworCisJCWZpbmFsIFN0cmluZyBjb3VudHJ5UGF0aCA9IENPVU5UUllfRElSX1BBVEggKyBGaWxlLnNlcGFyYXRvcgorCQkJCSsgY291bnRyeUNvZGUgKyBGaWxlLnNlcGFyYXRvciArIGNvdW50cnlDb2RlCisJCQkJKyAiX25hbWVzLnByb3BlcnRpZXMiOworCisJCUZpbGUgY291bnRyeU5hbWVzRmlsZSA9IG5ldyBGaWxlKGNvdW50cnlQYXRoKTsKKwkJaWYgKGNvdW50cnlOYW1lc0ZpbGUuaXNGaWxlKCkgJiYgY291bnRyeU5hbWVzRmlsZS5jYW5SZWFkKCkpIHsKKwkJCVByb3BlcnRpZXMgY291bnRyeU5hbWVEYXRhID0gbmV3IFByb3BlcnRpZXMoKTsKKwkJCUZpbGVJbnB1dFN0cmVhbSBjb3VudHJ5TmFtZXNJbnB1dFN0cmVhbSA9IG51bGw7CisJCQl0cnkgeworCQkJCWNvdW50cnlOYW1lc0lucHV0U3RyZWFtID0gbmV3IEZpbGVJbnB1dFN0cmVhbShjb3VudHJ5TmFtZXNGaWxlKTsKKwkJCQljb3VudHJ5TmFtZURhdGEubG9hZChjb3VudHJ5TmFtZXNJbnB1dFN0cmVhbSk7CisJCQkJcmV0VmFsdWUgPSBjb3VudHJ5TmFtZURhdGEuZ2V0UHJvcGVydHkoY291bnRyeUNvZGUudG9TdHJpbmcoKSk7CisJCQkJY291bnRyeU5hbWVzSW5wdXRTdHJlYW0uY2xvc2UoKTsKKwkJCX0gY2F0Y2ggKEZpbGVOb3RGb3VuZEV4Y2VwdGlvbiBlKSB7CisJCQkJU3lzdGVtLmVyci5wcmludGxuKGUuZ2V0TWVzc2FnZSgpKTsKKwkJCX0gY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKKwkJCQlTeXN0ZW0uZXJyLnByaW50bG4oZS5nZXRNZXNzYWdlKCkpOworCQkJfQorCisJCX0gZWxzZSB7CisJCQkvLyBTeXN0ZW0uZXJyLnByaW50bG4oIlRyb3VibGUgcmVhZGluZyBcIiIgKyBjb3VudHJ5TmFtZXNGaWxlICsKKwkJCS8vICJcIiIpOworCQl9CisJCXJldHVybiByZXRWYWx1ZTsKKworCX0gLy8gZ2V0Q291bnRyeU5hbWUKKworCS8qKgorCSAqIFRoaXMgbWV0aG9kIGV4YW1pbmVzIGEgZGlyZWN0b3J5IGNvbnNpc3Rpbmcgb2Ygc3ViZGlyZWN0b3JpZXMgbmFtZWQgd2l0aAorCSAqIElTMDMxNjYtMSBhbHBoYTMgY29kZXMgYW5kIGV4dHJhY3RzIHRoZSBjb2Rlcy4KKwkgKiAKKwkgKiBAcmV0dXJuIGEgbGlzdCBvZiB0aGUgYWxsIG9mIHRoZSBJUzAzMTY2LTEgYWxwaGEzIGNvdW50cnkgY29kZXMKKwkgKi8KKwlwdWJsaWMgc3RhdGljIExpc3Q8Q291bnRyeUNvZGU+IGdldEFsbENvdW50cnlDb2RlcygpIHsKKwkJZmluYWwgTGlzdDxDb3VudHJ5Q29kZT4gcmV0VmFsdWUgPSBuZXcgQXJyYXlMaXN0PENvdW50cnlDb2RlPigpOworCQlmb3IgKEZpbGUgY291bnRyeURpcmVjdG9yeSA6IGdldENvdW50cnlEaXJlY3RvcmllcygpKSB7CisJCQlyZXRWYWx1ZS5hZGQoZ2V0Q291bnRyeUNvZGUoY291bnRyeURpcmVjdG9yeSkpOworCQl9CisJCXJldHVybiByZXRWYWx1ZTsKKwl9IC8vIGdldEFsbENvdW50cnlDb2RlcworCisJLyoqCisJICogQHBhcmFtIGNvdW50cnlEaXJlY3RvcnkKKwkgKiAgICAgICAgICAgIGRpcmVjdG9yeSBmb3IgYSBzcGVjaWZpYyBjb3VudHJ5IHRoYXQgY29udGFpbnMgZGF0YSB0aGF0CisJICogICAgICAgICAgICBkZWZpbmVzIHRoZSBnZW9ncmFwaCBhbmQgZmVhdHVyZXMgb2YgdGhhdCBjb3VudHJ5LgorCSAqIEByZXR1cm4gdGhlIHRocmVlIGxldHRlciBjb2RlIHRoZSBpZGVudGlmaWVzIHRoZSBjb3VudHJ5CisJICovCisJcHJpdmF0ZSBzdGF0aWMgQ291bnRyeUNvZGUgZ2V0Q291bnRyeUNvZGUoZmluYWwgRmlsZSBjb3VudHJ5RGlyZWN0b3J5KSB7CisJCUNvdW50cnlDb2RlIHJldFZhbHVlID0gbnVsbDsKKwkJdHJ5IHsKKwkJCXJldFZhbHVlID0gbmV3IENvdW50cnlDb2RlKGNvdW50cnlEaXJlY3RvcnkuZ2V0Q2Fub25pY2FsRmlsZSgpCisJCQkJCS5nZXROYW1lKCkpOworCQl9IGNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7CisJCQllLnByaW50U3RhY2tUcmFjZSgpOworCQl9CisJCXJldHVybiByZXRWYWx1ZTsKKwl9IC8vIGdldENvdW50cnlDb2RlCisKKwkvKioKKwkgKiBAcmV0dXJuIGEgbGlzdCBvZiB0aGUgZGlyZWN0b3JpZXMgdGhhdCBjb250YWluIHRoZSBjb3VudHJ5IGRhdGEKKwkgKi8KKwlwdWJsaWMgc3RhdGljIExpc3Q8RmlsZT4gZ2V0Q291bnRyeURpcmVjdG9yaWVzKCkgeworCQlMaXN0PEZpbGU+IHJldFZhbHVlID0gbmV3IEFycmF5TGlzdDxGaWxlPigpOworCisJCWZpbmFsIEZpbGUgY291bnRyeURpcmVjdG9yeSA9IG5ldyBGaWxlKENPVU5UUllfRElSX1BBVEgpOworCisJCWlmIChjb3VudHJ5RGlyZWN0b3J5LmlzRGlyZWN0b3J5KCkpIHsKKwkJCWZpbmFsIEZpbGVbXSBjb3VudHJpZXMgPSBjb3VudHJ5RGlyZWN0b3J5CisJCQkJCS5saXN0RmlsZXMobmV3IEZpbGVGaWx0ZXIoKSB7CisJCQkJCQlwdWJsaWMgYm9vbGVhbiBhY2NlcHQoRmlsZSBwYXRobmFtZSkgeworCQkJCQkJCS8vIFNraXAgb3ZlciB0aGUgc3VidmVyc2lvbiBkaXJlY3RvcnkKKwkJCQkJCQlyZXR1cm4gIXBhdGhuYW1lLmdldE5hbWUoKS5lbmRzV2l0aCgiLnN2biIpOworCQkJCQkJfQorCQkJCQl9KTsKKworCQkJZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudHJpZXMubGVuZ3RoOyBpKyspIHsKKwkJCQlyZXRWYWx1ZS5hZGQoY291bnRyaWVzW2ldKTsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCVN5c3RlbS5lcnIucHJpbnRsbigiXCIiICsgQ09VTlRSWV9ESVJfUEFUSAorCQkJCQkrICJcIiBpcyBub3QgYSBkaXJlY3RvcnkiKTsKKwkJfQorCQlyZXR1cm4gcmV0VmFsdWU7CisKKwl9IC8vIGdldENvdW50cnlEaXJlY3RvcmllcworCisJLyoqCisJICogCisJICogQHBhcmFtIGNvdW50cnlDb2RlCisJICogICAgICAgICAgICB0aGUgY291bnRyeQorCSAqIEBwYXJhbSBkYXRhVHlwZQorCSAqICAgICAgICAgICAgdGhlIHR5cGUgb2YgZmlsZXMgdG8gcmV0dXJuCisJICogQHJldHVybiBhIGxpc3Qgb2YgdGhlIGZpbGVzIGZvciB0aGUgc3BlY2lmaWVkIGNvdW50cnkgdGhhdCBjb250YWluIGRhdGEKKwkgKiAgICAgICAgIHNwZWNpZmllZCBieSB0aGUgZGF0YSB0eXBlLgorCSAqLworCXB1YmxpYyBzdGF0aWMgTGlzdDxGaWxlPiBnZXREYXRhRmlsZXMoQ291bnRyeUNvZGUgY291bnRyeUNvZGUsCisJCQlTdHJpbmcgZGF0YVR5cGUpIHsKKwkJZmluYWwgTGlzdDxGaWxlPiByZXRWYWx1ZSA9IG5ldyBBcnJheUxpc3Q8RmlsZT4oKTsKKworCQlmaW5hbCBGaWxlIGNvdW50cnlEaXJlY3RvcnkgPSBuZXcgRmlsZShDT1VOVFJZX0RJUl9QQVRICisJCQkJKyBGaWxlLnNlcGFyYXRvciArIGNvdW50cnlDb2RlKTsKKworCQlpZiAoY291bnRyeURpcmVjdG9yeS5pc0RpcmVjdG9yeSgpKSB7CisJCQlmaW5hbCBTdHJpbmcgc3VmZml4ID0gZGF0YVR5cGUgKyAiLnByb3BlcnRpZXMiOworCQkJZmluYWwgRmlsZVtdIGNvdW50cmllcyA9IGNvdW50cnlEaXJlY3RvcnkKKwkJCQkJLmxpc3RGaWxlcyhuZXcgRmlsZUZpbHRlcigpIHsKKwkJCQkJCXB1YmxpYyBib29sZWFuIGFjY2VwdChGaWxlIHBhdGhuYW1lKSB7CisJCQkJCQkJcmV0dXJuIHBhdGhuYW1lLmdldE5hbWUoKS5lbmRzV2l0aChzdWZmaXgpOworCQkJCQkJfQorCQkJCQl9KTsKKworCQkJZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudHJpZXMubGVuZ3RoOyBpKyspIHsKKwkJCQlyZXRWYWx1ZS5hZGQoY291bnRyaWVzW2ldKTsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCVN5c3RlbS5lcnIucHJpbnRsbigiXCIiICsgQ09VTlRSWV9ESVJfUEFUSAorCQkJCQkrICJcIiBpcyBub3QgYSBkaXJlY3RvcnkiKTsKKwkJfQorCQlyZXR1cm4gcmV0VmFsdWU7CisKKwl9IC8vIGdldERhdGFGaWxlcworCisJLyoqCisJICogVGhpcyBjbGFzcyByZXByZXNlbnRzIGFuIElTTy0zMTY2LWFscGhhMyBjb3VudHJ5IGNvZGUKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGNsYXNzIENvdW50cnlDb2RlIGltcGxlbWVudHMgQ29tcGFyYWJsZTxDb3VudHJ5Q29kZT4geworCQlwcml2YXRlIFN0cmluZyBjb2RlID0gbnVsbDsKKworCQkvKioKKwkJICogQHBhcmFtIGNvZGUKKwkJICovCisJCXB1YmxpYyBDb3VudHJ5Q29kZShTdHJpbmcgY29kZSkgeworCQkJdGhpcy5jb2RlID0gY29kZTsKKwkJfQorCisJCS8qKgorCQkgKiBAcmV0dXJuIHRoZSBjb2RlCisJCSAqLworCQlwdWJsaWMgZmluYWwgU3RyaW5nIGdldENvZGUoKSB7CisJCQlyZXR1cm4gY29kZTsKKwkJfQorCisJCS8qKgorCQkgKiBAc2VlIGphdmEubGFuZy5PYmplY3QjaGFzaENvZGUoKQorCQkgKi8KKwkJQE92ZXJyaWRlCisJCXB1YmxpYyBpbnQgaGFzaENvZGUoKSB7CisJCQlyZXR1cm4gY29kZS5oYXNoQ29kZSgpOworCQl9CisKKwkJLyoqCisJCSAqIEBzZWUgamF2YS5sYW5nLk9iamVjdCNlcXVhbHMoamF2YS5sYW5nLk9iamVjdCkKKwkJICovCisJCUBPdmVycmlkZQorCQlwdWJsaWMgYm9vbGVhbiBlcXVhbHMoT2JqZWN0IG9iaikgeworCQkJaWYgKHRoaXMgPT0gb2JqKQorCQkJCXJldHVybiB0cnVlOworCQkJaWYgKG9iaiA9PSBudWxsKQorCQkJCXJldHVybiBmYWxzZTsKKwkJCWlmIChnZXRDbGFzcygpICE9IG9iai5nZXRDbGFzcygpKQorCQkJCXJldHVybiBmYWxzZTsKKwkJCWZpbmFsIENvdW50cnlDb2RlIG90aGVyID0gKENvdW50cnlDb2RlKSBvYmo7CisJCQlpZiAoY29kZSA9PSBudWxsKSB7CisJCQkJaWYgKG90aGVyLmNvZGUgIT0gbnVsbCkKKwkJCQkJcmV0dXJuIGZhbHNlOworCQkJfSBlbHNlIGlmICghY29kZS5lcXVhbHMob3RoZXIuY29kZSkpCisJCQkJcmV0dXJuIGZhbHNlOworCQkJcmV0dXJuIHRydWU7CisJCX0KKworCQkvKioKKwkJICogQHNlZSBqYXZhLmxhbmcuT2JqZWN0I3RvU3RyaW5nKCkKKwkJICovCisJCUBPdmVycmlkZQorCQlwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkgeworCQkJcmV0dXJuIGNvZGU7CisJCX0KKworCQkvKioKKwkJICogQHBhcmFtIG8KKwkJICogQHJldHVybiB0aGUgdmFsdWUgb2Ygc3RyaW5nIGNvbXBhcmVUbworCQkgKiBAc2VlIGphdmEubGFuZy5Db21wYXJhYmxlI2NvbXBhcmVUbyhqYXZhLmxhbmcuT2JqZWN0KQorCQkgKi8KKwkJcHVibGljIGludCBjb21wYXJlVG8oQ291bnRyeUNvZGUgbykgeworCQkJcmV0dXJuIHRoaXMuY29kZS5jb21wYXJlVG8oby5jb2RlKTsKKwkJfQorCisJfSAvLyBDb3VudHJ5Q29kZQorCit9IC8vIENvdW50cnlEaXJlY3RvcnlVdGlsaXRpZXMKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS90ZXN0cy91dGlsL0NvdW50cnlHcmFwaENyZWF0b3IuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS90ZXN0cy91dGlsL0NvdW50cnlHcmFwaENyZWF0b3IuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNTdjMGQxCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3Rlc3RzL3V0aWwvQ291bnRyeUdyYXBoQ3JlYXRvci5qYXZhCkBAIC0wLDAgKzEsMTk0MyBAQAorLy8gQ291bnRyeUdyYXBoQ3JlYXRvci5qYXZhCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbDsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNiwgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqYXZhLmlvLkJ1ZmZlcmVkV3JpdGVyOworaW1wb3J0IGphdmEuaW8uRmlsZTsKK2ltcG9ydCBqYXZhLmlvLkZpbGVJbnB1dFN0cmVhbTsKK2ltcG9ydCBqYXZhLmlvLkZpbGVOb3RGb3VuZEV4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLmlvLkZpbGVXcml0ZXI7CitpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLmlvLldyaXRlcjsKK2ltcG9ydCBqYXZhLnRleHQuTWVzc2FnZUZvcm1hdDsKK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OworaW1wb3J0IGphdmEudXRpbC5DYWxlbmRhcjsKK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbnM7CitpbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7CitpbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOworaW1wb3J0IGphdmEudXRpbC5MaXN0OworaW1wb3J0IGphdmEudXRpbC5NYXA7CitpbXBvcnQgamF2YS51dGlsLk1hcC5FbnRyeTsKK2ltcG9ydCBqYXZhLnV0aWwuUHJvcGVydGllczsKK2ltcG9ydCBqYXZhLnV0aWwuU3RyaW5nVG9rZW5pemVyOworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLkVMaXN0OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5VUkk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVTdHJ1Y3R1cmFsRmVhdHVyZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUucmVzb3VyY2UuVVJJQ29udmVydGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5yZXNvdXJjZS5pbXBsLlVSSUNvbnZlcnRlckltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLkNvbnN0YW50czsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuVXRpbGl0eTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLkNvbW1vblBhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5EdWJsaW5Db3JlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uSWRlbnRpZmlhYmxlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5HcmFwaDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguR3JhcGhGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5Ob2RlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuYWRhcHRlcnMuc3BhdGlhbC5TcGF0aWFsUHJvdmlkZXJBZGFwdGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLkFyZWFMYWJlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5MYWJlbHNGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLlBvcHVsYXRpb25MYWJlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5pbXBsLkFyZWFMYWJlbEltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuaW1wbC5Qb3B1bGF0aW9uTGFiZWxJbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubm9kZXMuTm9kZXNGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubm9kZXMuUmVnaW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubm9kZXMuaW1wbC5SZWdpb25JbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC5Db3VudHJ5RGlyZWN0b3J5VXRpbGl0aWVzLkNvdW50cnlDb2RlOworCisvKioKKyAqIFRoaXMgY2xhc3MgZ2VuZXJhdGVzIHRoZSBwbHVnZ2VkIGluIEdyYXBoIGZpbGVzIGZvciBTVEVNIGZyb20gdGhlIGJhc2ljCisgKiBwcm9wZXJ0aWVzIGZpbGVzLgorICovCitwdWJsaWMgY2xhc3MgQ291bnRyeUdyYXBoQ3JlYXRvciB7CisKKwkvKioKKwkgKiBUaGUgZGlyZWN0b3J5IGluIHRoZSBwbHVnaW4gdGhhdCBpcyB0aGUgcm9vdCBvZiBhbGwgcmVzb3VyY2VzIChpLmUuCisJICogZmlsZXMsIGRhdGEsIGV0Yy4pCisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUkVTT1VSQ0VTX0RJUiA9ICJyZXNvdXJjZXMiOworCisJLyoqCisJICogVGhpcyBpcyB0aGUgbmFtZSBvZiB0aGUgcm9vdCBkaXJlY3RvcnkgY29udGFpbmluZyBkYXRhIGZvciB0aGUKKwkgKiBkZWZpbml0aW9ucyBvZiBncmFwaHMuCisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgREFUQV9ESVIgPSAiZGF0YSI7CisKKwkvKioKKwkgKiBUaGUgbmFtZSBvZiB0aGUgZGlyZWN0b3J5IHVuZGVyIHtAbGluayAjREFUQV9ESVJ9IHRoYXQgY29udGFpbnMgImNvdW50cnkiCisJICogc3ViLWRpcmVjdG9yaWVzIG5hbWVkIGJ5IHRoZWlyIElTTzMwMTY2LTEgYWxwaGEzIGNvZGVzLiBUaGUgY291bnRyeQorCSAqIGRpcmVjdG9yaWVzIGNvbnRhaW4gdGhlIHByb3BlcnR5IGZpbGVzIHRoYXQgZGVmaW5lIHRoZSBkZXRhaWxzIGZvciBlYWNoCisJICogY291bnRyeS4KKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBDT1VOVFJZX0RJUiA9ICJjb3VudHJ5IjsKKworCS8qKgorCSAqIFRoZSByb290IGRpcmVjdG9yeSBmb3IgZ2VuZXJhdGVkIGZpbGVzLgorCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFJPT1RfT1VUUFVUX0RJUiA9ICJ0ZW1wIjsKKworCS8qKgorCSAqIFRoaXMgaXMgdGhlIG5hbWUgb2YgdGhlIGRpcmVjdG9yeSB1bmRlciB0aGUge0BsaW5rICNST09UX09VVFBVVF9ESVJ9IHRoYXQKKwkgKiBjb250YWlucyB0aGUgZGlyZWN0b3JpZXMgdGhhdCBjb250YWluIHRoZSBncmFwaHMgdGhhdCBkZWZpbmUgdGhlCisJICogZ2VvZ3JhcGhpZXMgYW5kIGZlYXR1cmVzIG9mIGNvdW50cmllcy4KKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBHUkFQSF9PVVRQVVRfRElSID0gImdyYXBocyI7CisKKwkvKioKKwkgKiBUaGlzIGlzIHRoZSBwYXRoIHRvIHRoZSBjb3VudHJ5IGdyYXBocyBkaXJlY3RvcnkKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBDT1VOVFJZX0dSQVBIX1BBVEggPSBST09UX09VVFBVVF9ESVIKKwkJCSsgRmlsZS5zZXBhcmF0b3IgKyBHUkFQSF9PVVRQVVRfRElSICsgRmlsZS5zZXBhcmF0b3IgKyBDT1VOVFJZX0RJUjsKKworCS8qKgorCSAqIFRoZSBuYW1lIG9mIHRoZSBTVEVNIGNhdGVnb3J5CisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgU1RFTSA9ICJTVEVNIjsKKworCS8qKgorCSAqIAorCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEdFT0dSQVBIWSA9ICJHZW9ncmFwaHkiOworCisJLyoqCisJICogCisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUE9MSVRJQ0FMID0gIlBvbGl0aWNhbCI7CisKKwkvKioKKwkgKiAKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBDT1VOVFJJRVMgPSAiQ291bnRyaWVzIjsKKworCS8qKgorCSAqIAorCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIExFVkVMID0gIkxldmVsIjsKKworCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBJRF9HRU9HUkFQSFlfUExVR0lOID0gIm9yZy5lY2xpcHNlLnN0ZW0uIgorCQkJKyBHRU9HUkFQSFkudG9Mb3dlckNhc2UoKTsKKworCS8qKgorCSAqIFRoaXMgaXMgdGhlIHByZWZpeCBvZiB0aGUgcGxhdGZvcm0gVVJJIGZvciBnZW9ncmFwaHkgZ3JhcGhzIGFuZCBtb2RlbHMKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBHRU9HUkFQSFlfRklMRV9VUklfUFJFRklYID0gInBsYXRmb3JtOi9wbHVnaW4vIgorCQkJKyBJRF9HRU9HUkFQSFlfUExVR0lOICsgIi9yZXNvdXJjZXMvZGF0YSI7CisKKwkvKioKKwkgKiBUaGlzIGlzIHRoZSBmb3JtYXQgc3RyaW5nIGZvciB0aGUgaWRlbnRpZmllciBvZiBhIGNvdW50cnkgZ3JhcGggb3IgbW9kZWwKKwkgKiBmaWxlCisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgSURFTlRJRklFUl9GT1JNQVQgPSAiezB9LyIgKyBDT1VOVFJZX0RJUgorCQkJKyAiL3sxfS97Mn0uezN9IjsKKworCS8qKgorCSAqIFRoaXMgaXMgdGhlIGlkIG9mIHRoZSB0b3AtbGV2ZWwgU1RFTSBjYXRlZ29yeSBmb3IgZ3JhcGhzCisJICovCisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIElEX1NURU1fR1JBUEhfQ0FURUdPUlkgPSBDb25zdGFudHMuSURfUk9PVAorCQkJKyAiLmNvcmUuZ3JhcGgiOworCisJLyoqCisJICogVGhpcyBpcyB0aGUgaWQgb2YgdGhlIGV4dGVuc2lvbiBwb2ludCBleHRlbmRlZCBieSBncmFwaHMgdGhhdCBhcmUgcGx1Z2dlZAorCSAqIGludG8gU1RFTQorCSAqLworCS8vIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBJRF9HUkFQSF9FWFRFTlNJT05fUE9JTlQgPSBDb25zdGFudHMuSURfUk9PVAorCS8vICsgIi5jb3JlLmdyYXBoIjsKKwkvKioKKwkgKiBUaGlzIGlzIHRoZSBpZCBvZiB0aGUgZXh0ZW5zaW9uIHBvaW50IGV4dGVuZGVkIGJ5IGdyYXBocyB3aXRoIGdlb2dyYXBoaWMKKwkgKiBpbmZvcm1hdGlvbiB0aGF0IGFyZSBwbHVnZ2VkIGludG8gU1RFTQorCSAqLworCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBJRF9HUkFQSF9HRU9HUkFQSFlfQ0FURUdPUlkgPSBJRF9TVEVNX0dSQVBIX0NBVEVHT1JZCisJCQkrICIuIiArIEdFT0dSQVBIWS50b0xvd2VyQ2FzZSgpOworCisJLyoqCisJICogVGhpcyBpcyB0aGUgaWQgb2YgdGhlIGV4dGVuc2lvbiBwb2ludCBleHRlbmRlZCBieSBncmFwaHMgd2l0aCBnZW9ncmFwaGljCisJICogcG9saXRpY2FsIGluZm9ybWF0aW9uIHRoYXQgYXJlIHBsdWdnZWQgaW50byBTVEVNCisJICovCisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIElEX0dSQVBIX1BPTElUSUNBTF9DQVRFR09SWSA9IElEX0dSQVBIX0dFT0dSQVBIWV9DQVRFR09SWQorCQkJKyAiLiIgKyBQT0xJVElDQUwudG9Mb3dlckNhc2UoKTsKKworCS8qKgorCSAqIFRoaXMgaXMgdGhlIGlkIG9mIHRoZSBleHRlbnNpb24gcG9pbnQgZXh0ZW5kZWQgYnkgZ3JhcGhzIHdpdGggZ2VvZ3JhcGhpYworCSAqIHBvbGl0aWNhbCBpbmZvcm1hdGlvbiB0aGF0IGFyZSBwbHVnZ2VkIGludG8gU1RFTQorCSAqLworCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBJRF9HUkFQSF9DT1VOVFJJRVNfQ0FURUdPUlkgPSBJRF9HUkFQSF9QT0xJVElDQUxfQ0FURUdPUlkKKwkJCSsgIi4iICsgQ09VTlRSSUVTLnRvTG93ZXJDYXNlKCk7CisKKwkvKioKKwkgKiBUaGUgbmFtZSBvZiB0aGUgZmlsZSB0aGF0IHRoZSBnZW5lcmF0ZWQgZXh0ZW5zaW9uIHBvaW50cyBhcmUgd3JpdHRlbiB0bworCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEdSQVBIX0VYVEVOU0lPTl9QT0lOVF9GSUxFX05BTUUgPSAiZXh0ZW5zaW9uLnhtbCI7CisKKwkvKioKKwkgKiBUaGUgbmFtZSBvZiB0aGUgZmlsZSB0aGF0IHRoZSBnZW5lcmF0ZWQgcHJvcGVydGllcyBhcmUgd3JpdHRlbiB0bworCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEdSQVBIX1BMVUdJTl9QUk9QRVJUSUVTX1BPSU5UX0ZJTEVfTkFNRSA9ICJwbHVnaW4ucHJvcGVydGllcyI7CisKKwkvKioKKwkgKiBUaGlzIGlzIHRoZSBvcGVuaW5nIHhtbCBlbGVtZW50IGZvciBhIGdyYXBoIGV4dGVuc2lvbiBwb2ludCBpbiBhCisJICogcGx1Z2luLnhtbCBmaWxlCisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgWE1MX0VYVEVOU0lPTl9QT0lOVF9PUEVOID0gIjxleHRlbnNpb24gcG9pbnQ9XCJ7MH1cIj4iOworCisJLyoqCisJICogVGhpcyBpcyB0aGUgY2xvc2luZyB4bWwgZWxlbWVudCBmb3IgYSBncmFwaCBleHRlbnNpb24gcG9pbnQgaW4gYQorCSAqIHBsdWdpbi54bWwgZmlsZQorCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFhNTF9FWFRFTlNJT05fUE9JTlRfQ0xPU0UgPSAiPC9leHRlbnNpb24+IjsKKworCS8qKgorCSAqIFRoaXMgaXMgdGhlIG9wZW5pbmcgeG1sIGVsZW1lbnQgZm9yIGEgY2F0ZWdvcnkgaW4gYSBwbHVnaW4ueG1sIGZpbGUKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBYTUxfQ0FURUdPUllfRUxFTUVOVF9PUEVOID0gIjxjYXRlZ29yeSBpZD1cInswfVwiIG5hbWU9XCJ7MX1cIiBwYXJlbnRfaWQ9XCJ7Mn1cIi8+IjsKKworCS8qKgorCSAqIFRoaXMgaXMgdGhlIG9wZW5pbmcgeG1sIGVsZW1lbnQgZm9yIGEgY2F0ZWdvcnkgaW4gYSBwbHVnaW4ueG1sIGZpbGUKKwkgKi8KKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgWE1MX0RVQkxJTl9DT1JFX0VMRU1FTlRfT1BFTiA9ICI8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9XCJ7MH1cIiAiOworCisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIE5MU19ERUxJTUlURVIgPSAiXyI7CisKKwkvKioKKwkgKiBUaGlzIGlzIHRoZSBmb3JtYXQgb2YgdGhlIGdlbmVyYXRlZCBOTFMga2V5cyBmb3IgY2F0ZWdvcmllcworCSAqLworCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBOTFNfQ0FURUdPUllfS0VZX0ZPUk1BVCA9ICJfVUlfezB9X2dyYXBoX2NhdGVnb3J5IjsKKworCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBOTFNfRENfRkVBVFVSRV9LRVlfRk9STUFUID0gIl9VSSIKKwkJCSsgTkxTX0RFTElNSVRFUiArICJ7MH0iICsgTkxTX0RFTElNSVRFUiArICJ7MX0iICsgTkxTX0RFTElNSVRFUgorCQkJKyAiezJ9IiArIE5MU19ERUxJTUlURVIgKyAiezN9IiArIE5MU19ERUxJTUlURVIgKyAiezR9IjsKKworCXByaXZhdGUgc3RhdGljIGZpbmFsIEVMaXN0IGRjRmVhdHVyZXMgPSBDb21tb25QYWNrYWdlLkxpdGVyYWxzLkRVQkxJTl9DT1JFCisJCQkuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpOworCisJLyoqCisJICogQHBhcmFtIGFyZ3MKKwkgKi8KKwlwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihmaW5hbCBTdHJpbmdbXSBhcmdzKSB7CisKKwkJLy8gTm93IGNyZWF0ZSB0aGUgZ3JhcGhzCisJCWZpbmFsIExpc3Q8Q291bnRyeUNvZGU+IGNvdW50cnlDb2RlcyA9IENvdW50cnlEaXJlY3RvcnlVdGlsaXRpZXMKKwkJCQkuZ2V0QWxsQ291bnRyeUNvZGVzKCk7CisJCUNvbGxlY3Rpb25zLnNvcnQoY291bnRyeUNvZGVzKTsKKworCQlmaW5hbCBDb3VudHJ5R3JhcGhDcmVhdG9yIGNnYyA9IG5ldyBDb3VudHJ5R3JhcGhDcmVhdG9yKCk7CisKKwkJZmluYWwgTWFwPENvdW50cnlDb2RlLCBMaXN0PEdyYXBoUmVjb3JkPj4gbm9kZUdyYXBocyA9IGNnYworCQkJCS5jcmVhdGVHcmFwaFJlY29yZHMoR0VPR1JBUEhZX0ZJTEVfVVJJX1BSRUZJWCwgY291bnRyeUNvZGVzLAorCQkJCQkJRGF0YVR5cGUubm9kZSk7CisKKwkJZmluYWwgTWFwPENvdW50cnlDb2RlLCBMaXN0PEdyYXBoUmVjb3JkPj4gcG9wdWxhdGlvbkdyYXBocyA9IGNnYworCQkJCS5jcmVhdGVHcmFwaFJlY29yZHMoR0VPR1JBUEhZX0ZJTEVfVVJJX1BSRUZJWCwgY291bnRyeUNvZGVzLAorCQkJCQkJRGF0YVR5cGUucG9wdWxhdGlvbik7CisKKwkJZmluYWwgTWFwPENvdW50cnlDb2RlLCBMaXN0PEdyYXBoUmVjb3JkPj4gYXJlYUdyYXBocyA9IGNnYworCQkJCS5jcmVhdGVHcmFwaFJlY29yZHMoR0VPR1JBUEhZX0ZJTEVfVVJJX1BSRUZJWCwgY291bnRyeUNvZGVzLAorCQkJCQkJRGF0YVR5cGUuYXJlYSk7CisJCXRyeSB7CisJCQljZ2Muc2VyaWFsaXplQ291bnRyeUdyYXBocyhub2RlR3JhcGhzLCBDT1VOVFJZX0dSQVBIX1BBVEgpOworCisJCQljZ2Muc2VyaWFsaXplQ291bnRyeUdyYXBocyhwb3B1bGF0aW9uR3JhcGhzLCBDT1VOVFJZX0dSQVBIX1BBVEgpOworCisJCQljZ2Muc2VyaWFsaXplQ291bnRyeUdyYXBocyhhcmVhR3JhcGhzLCBDT1VOVFJZX0dSQVBIX1BBVEgpOworCisJCQlmaW5hbCBMaXN0PE1hcDxDb3VudHJ5Q29kZSwgTGlzdDxHcmFwaFJlY29yZD4+PiBncmFwaFJlY29yZHMgPSBuZXcgQXJyYXlMaXN0PE1hcDxDb3VudHJ5Q29kZSwgTGlzdDxHcmFwaFJlY29yZD4+PigpOworCQkJZ3JhcGhSZWNvcmRzLmFkZChub2RlR3JhcGhzKTsKKwkJCWdyYXBoUmVjb3Jkcy5hZGQocG9wdWxhdGlvbkdyYXBocyk7CisJCQlncmFwaFJlY29yZHMuYWRkKGFyZWFHcmFwaHMpOworCisJCQlpbnQgbWF4QWRtaW5MZXZlbCA9IDA7CisJCQltYXhBZG1pbkxldmVsID0gTWF0aC5tYXgobWF4QWRtaW5MZXZlbCwKKwkJCQkJZ2V0TWF4QWRtaW5MZXZlbChub2RlR3JhcGhzKSk7CisJCQltYXhBZG1pbkxldmVsID0gTWF0aC5tYXgobWF4QWRtaW5MZXZlbCwKKwkJCQkJZ2V0TWF4QWRtaW5MZXZlbChwb3B1bGF0aW9uR3JhcGhzKSk7CisJCQltYXhBZG1pbkxldmVsID0gTWF0aC5tYXgobWF4QWRtaW5MZXZlbCwKKwkJCQkJZ2V0TWF4QWRtaW5MZXZlbChhcmVhR3JhcGhzKSk7CisKKwkJCWZpbmFsIEZpbGUgZ3JhcGhFeHRlbnNpb25GaWxlID0gbmV3IEZpbGUoQ09VTlRSWV9HUkFQSF9QQVRICisJCQkJCSsgR1JBUEhfRVhURU5TSU9OX1BPSU5UX0ZJTEVfTkFNRSk7CisJCQlmaW5hbCBGaWxlIGdyYXBoUGx1Z2luUHJvcGVydGllc0ZpbGUgPSBuZXcgRmlsZShDT1VOVFJZX0dSQVBIX1BBVEgKKwkJCQkJKyBHUkFQSF9QTFVHSU5fUFJPUEVSVElFU19QT0lOVF9GSUxFX05BTUUpOworCisJCQlmaW5hbCBCdWZmZXJlZFdyaXRlciBncmFwaE91dCA9IG5ldyBCdWZmZXJlZFdyaXRlcihuZXcgRmlsZVdyaXRlcigKKwkJCQkJZ3JhcGhFeHRlbnNpb25GaWxlKSk7CisKKwkJCWZpbmFsIEJ1ZmZlcmVkV3JpdGVyIHBsdWdpbk91dCA9IG5ldyBCdWZmZXJlZFdyaXRlcihuZXcgRmlsZVdyaXRlcigKKwkJCQkJZ3JhcGhQbHVnaW5Qcm9wZXJ0aWVzRmlsZSkpOworCisJCQkvLyBDcmVhdGUgYSBzbmlwcGV0IG9mIHhtbCB0aGF0IGNhbiBiZSBpbmNsdWRlZCBpbiBhIHBsdWdpbi54bWwgZmlsZQorCQkJLy8gdG8gcGx1ZyBpbnRvIFNURU0gdGhlIGdyYXBocyB3ZSBqdXN0IHNlcmlhbGl6ZWQuCisJCQljZ2MuZ2VuZXJhdGVHcmFwaEV4dGVuc2lvblBvaW50WE1MKGdyYXBoUmVjb3JkcywgY291bnRyeUNvZGVzLAorCQkJCQltYXhBZG1pbkxldmVsLCBncmFwaE91dCwgcGx1Z2luT3V0KTsKKwkJfSAvLyB0cnkKKwkJY2F0Y2ggKGZpbmFsIElPRXhjZXB0aW9uIGUpIHsKKwkJCWUucHJpbnRTdGFja1RyYWNlKCk7CisJCX0KKworCQkvKgorCQkgKiAKKwkJICogTWFwPFN0cmluZywgTGlzdDxNYXA8U3RyaW5nLCBHcmFwaD4+PiBjb3VudHJ5R3JhcGhzID0gbmV3CisJCSAqIEhhc2hNYXA8U3RyaW5nLCBMaXN0PE1hcDxTdHJpbmcsIEdyYXBoPj4+KCk7IExpc3Q8U3RyaW5nPiBncmFwaFR5cGVzCisJCSAqID0gbmV3IEFycmF5TGlzdDxTdHJpbmc+KCk7CisJCSAqIAorCQkgKiBmaW5hbCBDb3VudHJ5R3JhcGhDcmVhdG9yIGNnYyA9IG5ldyBDb3VudHJ5R3JhcGhDcmVhdG9yKCk7CisJCSAqIAorCQkgKiBmaW5hbCBMaXN0PE1hcDxTdHJpbmcsIEdyYXBoPj4gY291bnRyeU5vZGVHcmFwaCA9IGNnYworCQkgKiAuY3JlYXRlQ291bnRyeU5vZGVHcmFwaHMoTUlOX0FETUlOX0xFVkVMLCBNQVhfQURNSU5fTEVWRUwsCisJCSAqIEdFT0dSQVBIWV9GSUxFX1VSSV9QUkVGSVggKyAiL2dyYXBocyIsIGNvdW50cnlDb2Rlcyk7IGZpbmFsCisJCSAqIExpc3Q8TWFwPFN0cmluZywgR3JhcGhSZWNvcmQ+PiBjb3VudHJ5QXJlYUdyYXBoUmVjb3JkID0gY2djCisJCSAqIC5jcmVhdGVDb3VudHJ5QXJlYUdyYXBocyhNSU5fQURNSU5fTEVWRUwsIE1BWF9BRE1JTl9MRVZFTCwKKwkJICogR0VPR1JBUEhZX0ZJTEVfVVJJX1BSRUZJWCArICIvZ3JhcGhzIiwgY291bnRyeUNvZGVzKTsKKwkJICogCisJCSAqIGZpbmFsIE1hcDxTdHJpbmcsIExpc3Q8TWFwPFN0cmluZywgR3JhcGhSZWNvcmQ+Pj4KKwkJICogY291bnRyeVBvcHVsYXRpb25HcmFwaHMgPSBjZ2MKKwkJICogLmNyZWF0ZUNvdW50cnlQb3B1bGF0aW9uR3JhcGhzKE1JTl9BRE1JTl9MRVZFTCwgTUFYX0FETUlOX0xFVkVMLAorCQkgKiBHRU9HUkFQSFlfRklMRV9VUklfUFJFRklYICsgIi9ncmFwaHMiLCBjb3VudHJ5Q29kZXMpOworCQkgKiAKKwkJICogY2djLnNlcmlhbGl6ZUNvdW50cnlHcmFwaHMoY291bnRyeU5vZGVHcmFwaCwgQ09VTlRSWV9HUkFQSF9QQVRILAorCQkgKiBDT1VOVFJZX05PREVfR1JBUEgpOworCQkgKiAKKwkJICogY2djLnNlcmlhbGl6ZUNvdW50cnlHcmFwaHMoY291bnRyeUFyZWFHcmFwaFJlY29yZCwKKwkJICogQ09VTlRSWV9HUkFQSF9QQVRILCBDT1VOVFJZX0FSRUFfR1JBUEgpOworCQkgKiAKKwkJICogZm9yIChTdHJpbmcgcG9wdWxhdGlvbklkZW50aWZlciA6IGNvdW50cnlQb3B1bGF0aW9uR3JhcGhzLmtleVNldCgpKSB7CisJCSAqIGZpbmFsIExpc3Q8TWFwPFN0cmluZywgR3JhcGhSZWNvcmQ+PiBwb3B1bGF0aW9uR3JhcGhSZWNvcmQgPQorCQkgKiBjb3VudHJ5UG9wdWxhdGlvbkdyYXBocyAuZ2V0KHBvcHVsYXRpb25JZGVudGlmZXIpOworCQkgKiBjZ2Muc2VyaWFsaXplQ291bnRyeUdyYXBocyhwb3B1bGF0aW9uR3JhcGhSZWNvcmQsIENPVU5UUllfR1JBUEhfUEFUSCwKKwkJICogQ09VTlRSWV9QT1BVTEFUSU9OX0dSQVBIKTsgfSAvLyBmb3IgZWFjaCBwb3B1bGF0aW9uCisJCSAqIAorCQkgKiBjb3VudHJ5R3JhcGhzLnB1dChDT1VOVFJZX05PREVfR1JBUEgsIGNvdW50cnlOb2RlR3JhcGgpOworCQkgKiBncmFwaFR5cGVzLmFkZChDT1VOVFJZX05PREVfR1JBUEgpOworCQkgKiAKKwkJICogY291bnRyeUdyYXBocy5wdXQoQ09VTlRSWV9BUkVBX0dSQVBILCBjb3VudHJ5QXJlYUdyYXBoUmVjb3JkKTsKKwkJICogZ3JhcGhUeXBlcy5hZGQoQ09VTlRSWV9BUkVBX0dSQVBIKTsKKwkJICogCisJCSAqIHRyeSB7IGZpbmFsIEZpbGUgZ3JhcGhFeHRlbnNpb25GaWxlID0gbmV3IEZpbGUoQ09VTlRSWV9HUkFQSF9QQVRIICsKKwkJICogR1JBUEhfRVhURU5TSU9OX1BPSU5UX0ZJTEVfTkFNRSk7IGZpbmFsIEZpbGUKKwkJICogZ3JhcGhQbHVnaW5Qcm9wZXJ0aWVzRmlsZSA9IG5ldyBGaWxlKENPVU5UUllfR1JBUEhfUEFUSCArCisJCSAqIEdSQVBIX1BMVUdJTl9QUk9QRVJUSUVTX1BPSU5UX0ZJTEVfTkFNRSk7CisJCSAqIAorCQkgKiBmaW5hbCBCdWZmZXJlZFdyaXRlciBncmFwaE91dCA9IG5ldyBCdWZmZXJlZFdyaXRlcihuZXcgRmlsZVdyaXRlcigKKwkJICogZ3JhcGhFeHRlbnNpb25GaWxlKSk7CisJCSAqIAorCQkgKiBmaW5hbCBCdWZmZXJlZFdyaXRlciBwbHVnaW5PdXQgPSBuZXcgQnVmZmVyZWRXcml0ZXIobmV3IEZpbGVXcml0ZXIoCisJCSAqIGdyYXBoUGx1Z2luUHJvcGVydGllc0ZpbGUpKTsgLy8gQ3JlYXRlIGEgc25pcHBldCBvZiB4bWwgdGhhdCBjYW4gYmUKKwkJICogaW5jbHVkZWQgaW4gYSBwbHVnaW4ueG1sIGZpbGUgLy8gdG8gcGx1ZyB0aGUgZ3JhcGhzIHdlIGp1c3QKKwkJICogc2VyaWFsaXplZCBpbnRvIFNURU0uCisJCSAqIGNnYy5nZW5lcmF0ZUdyYXBoRXh0ZW5zaW9uUG9pbnRYTUwoY291bnRyeUdyYXBocywgZ3JhcGhUeXBlcywKKwkJICogZ3JhcGhPdXQsIHBsdWdpbk91dCk7IH0gLy8gdHJ5IGNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7CisJCSAqIGUucHJpbnRTdGFja1RyYWNlKCk7IH0KKwkJICovCisJfSAvLyBtYWluCisKKwkvKioKKwkgKiBAcGFyYW0gbm9kZUdyYXBocyAqCisJICogQHJldHVybiB0aGUgbWF4aW11bSBhZG1pbmlzdHJhdGlvbiBsZXZlbCBmb3VuZAorCSAqLworCXB1YmxpYyBzdGF0aWMgaW50IGdldE1heEFkbWluTGV2ZWwoCisJCQlmaW5hbCBNYXA8Q291bnRyeUNvZGUsIExpc3Q8R3JhcGhSZWNvcmQ+PiBub2RlR3JhcGhzKSB7CisJCWludCBtYXhBZG1pbkxldmVsID0gMDsKKwkJZm9yIChmaW5hbCBMaXN0PEdyYXBoUmVjb3JkPiBsaXN0IDogbm9kZUdyYXBocy52YWx1ZXMoKSkgeworCQkJbWF4QWRtaW5MZXZlbCA9IE1hdGgubWF4KG1heEFkbWluTGV2ZWwsIGdldE1heEFkbWluTGV2ZWwobGlzdCkpOworCQl9IC8vIGZvcgorCQlyZXR1cm4gbWF4QWRtaW5MZXZlbDsKKwl9IC8vIGdldE1heEFkbWluTGV2ZWwKKworCS8qKgorCSAqIEBwYXJhbSBncmFwaFJlY29yZHMKKwkgKiBAcmV0dXJuIHRoZSBtYXhpbXVtIGFkbWluaXN0cmF0aW9uIGxldmVsIGZvdW5kCisJICovCisJcHVibGljIHN0YXRpYyBpbnQgZ2V0TWF4QWRtaW5MZXZlbChmaW5hbCBMaXN0PEdyYXBoUmVjb3JkPiBncmFwaFJlY29yZHMpIHsKKwkJaW50IG1heEFkbWluTGV2ZWwgPSAwOworCQlmb3IgKGZpbmFsIEdyYXBoUmVjb3JkIGdyYXBoUmVjb3JkIDogZ3JhcGhSZWNvcmRzKSB7CisJCQltYXhBZG1pbkxldmVsID0gTWF0aAorCQkJCQkubWF4KG1heEFkbWluTGV2ZWwsIGdyYXBoUmVjb3JkLmdldEFkbWluTGV2ZWwoKSk7CisJCX0KKwkJcmV0dXJuIG1heEFkbWluTGV2ZWw7CisJfSAvLyBnZXRNYXhBZG1pbkxldmVsCisKKwkvKioKKwkgKiBAcGFyYW0gdXJpUGF0aFN0cmluZworCSAqICAgICAgICAgICAgdGhlIHBhdGggdG8gdGhlIHJvb3QgZGlyZWN0b3J5IHRvIHNlcmlhbGl6ZSB0aGUgZ3JhcGhzIGluCisJICogQHBhcmFtIGNvdW50cnlHcmFwaHMKKwkgKiAgICAgICAgICAgIGEgbWFwIG9mIGxpc3RzIG9mIHRoZSBncmFwaCByZWNvcmRzIGtleWVkIGJ5IGNvdW50cnkgY29kZQorCSAqIEBwYXJhbSBncmFwaERhdGFUeXBlCisJICogICAgICAgICAgICB0aGUgdHlwZSBvZiBkYXRhIGluIHRoZSBncmFwaHMgY29udGFpbmVkIGluIHRoZSBncmFwaCByZWNvcmRzCisJICogQHRocm93cyBJT0V4Y2VwdGlvbgorCSAqLworCXByaXZhdGUgdm9pZCBzZXJpYWxpemVDb3VudHJ5R3JhcGhzKAorCQkJZmluYWwgTWFwPENvdW50cnlDb2RlLCBMaXN0PEdyYXBoUmVjb3JkPj4gZ3JhcGhzLAorCQkJZmluYWwgU3RyaW5nIHVyaVBhdGhTdHJpbmcpIHRocm93cyBJT0V4Y2VwdGlvbiB7CisKKwkJZm9yIChmaW5hbCBDb3VudHJ5Q29kZSBjb3VudHJ5Q29kZSA6IGdyYXBocy5rZXlTZXQoKSkgeworCQkJZm9yIChmaW5hbCBHcmFwaFJlY29yZCBncmFwaFJlY29yZCA6IGdyYXBocy5nZXQoY291bnRyeUNvZGUpKSB7CisJCQkJZ3JhcGhSZWNvcmQuc2VyaWFsaXplKHVyaVBhdGhTdHJpbmcpOworCQkJfSAvLyBmb3IgZWFjaCBncmFwaCByZWNvcmQgZm9yIGVhY2ggY291bnRyeQorCQl9IC8vIGZvciBlYWNoIGNvdW50cnkgY29kZQorCisJCS8vIGZvciAoTGlzdDxHcmFwaFJlY29yZD4gcmVjb3JkczogZ3JhcGhzLnZhbHVlcygpKSB7CisJCS8vIFJlY29yZC5zZXJpYWxpemVSZWNvcmRzKChMaXN0PFJlY29yZD4pcmVjb3JkcywgdXJpUGF0aFN0cmluZyk7CisJCS8vIH0KKwl9IC8vIHNlcmlhbGl6ZUNvdW50cnlHcmFwaHMKKworCS8qKgorCSAqIEBwYXJhbSBjb3VudHJ5Tm9kZUdyYXBocworCSAqICAgICAgICAgICAgYSBsaXN0IG9mIG1hcHMgb2YgZ3JhcGhzIG9mIG5vZGVzIGZvciBjb3VudHJpZXMgZm9yIGVhY2gKKwkgKiAgICAgICAgICAgIGFkbWluc3RyYXRpb24gbGV2ZWwKKwkgKiBAcGFyYW0gZ3JhcGhPdXQKKwkgKiAgICAgICAgICAgIHRoZSBvdXRwdXQgd3JpdGVyIGZvciB0aGUgcGx1Z2luLnhtbCBmaWxlIGNvbnRlbnRzCisJICogQHBhcmFtIHBsdWdpbk91dAorCSAqICAgICAgICAgICAgdGhlIG91dHB1dCB3cml0ZXIgZm9yIHRoZSBwbHVnaW4ucHJvcGVydGllcyBmaWxlIGNvbnRlbnRzCisJICovCisJcHJpdmF0ZSB2b2lkIGdlbmVyYXRlR3JhcGhFeHRlbnNpb25Qb2ludFhNTCgKKwkJCWZpbmFsIExpc3Q8TWFwPENvdW50cnlDb2RlLCBMaXN0PEdyYXBoUmVjb3JkPj4+IGdyYXBoUmVjb3JkcywKKwkJCWZpbmFsIExpc3Q8Q291bnRyeUNvZGU+IGNvdW50cnlDb2RlcywgZmluYWwgaW50IG1heEFkbWluTGV2ZWwsCisJCQlmaW5hbCBXcml0ZXIgZ3JhcGhPdXQsIGZpbmFsIFdyaXRlciBwbHVnaW5PdXQpIHsKKworCQkvLyBUaGUgZHVibGluIGNvcmUgaW5zdGFuY2VzIG9mIHRoZSBncmFwaHMgbGlrZWx5IHNoYXJlIGNvbW1vbgorCQkvLyBhdHRyaWJ1dGVzLCB3ZSBjYW4gYXZvaWQgZHVwbGljYXRlIGVudHJpZXMgaW4gdGhlIGZpbGVzIHdlIGdlbmVyYXRlCisJCS8vIGJ5IGZpbmRpbmcgdGhlIGR1cGxpY2F0ZSBlbnRyaWVzIGFuZCBvbmx5IGdlbmVyYXRpbmcgYSBzaW5nbGUga2V5IGZvcgorCQkvLyB0aGUgZ2VuZXJhdGVkIHBsdWdpbnMgZmlsZSBjb250ZW50LgorCQlmaW5hbCBNYXA8U3RyaW5nLCBTdHJpbmc+IGRjVmFsdWVLZXlNYXAgPSBuZXcgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4oKTsKKworCQkvLyBXZSBhbHNvIGRvbid0IHdhbnQgdG8gZ2VuZXJhdGUgZHVwbGljYXRlIGNvdW50cnkgY2F0ZWdvcmllcworCQlmaW5hbCBNYXA8U3RyaW5nLCBTdHJpbmc+IGNvdW50cnlDYXRlZ29yaWVzID0gbmV3IEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+KCk7CisKKwkJdHJ5IHsKKwkJCWdyYXBoT3V0LndyaXRlKCI8IS0tIEdlbmVyYXRlZCBjb250ZW50LiAgRG8gbm90IG1vZGlmeSAtLT5cbiIpOworCisJCQlncmFwaE91dC53cml0ZShNZXNzYWdlRm9ybWF0LmZvcm1hdChYTUxfRVhURU5TSU9OX1BPSU5UX09QRU4sCisJCQkJCW5ldyBPYmplY3RbXSB7IENvbnN0YW50cy5JRF9HUkFQSF9FWFRFTlNJT05fUE9JTlQgfSkpOworCQkJZ3JhcGhPdXQud3JpdGUoIlxuIik7CisKKwkJCXBsdWdpbk91dAorCQkJCQkud3JpdGUoIiNHcmFwaCBOTFMgS2V5cy4gIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkLCBkbyBub3QgbW9kaWZ5LiAiCisJCQkJCQkJKyBDYWxlbmRhci5nZXRJbnN0YW5jZSgpLmdldFRpbWUoKQorCQkJCQkJCSsgIiAiCisJCQkJCQkJKyBTeXN0ZW0uZ2V0UHJvcGVydHkoInVzZXIubmFtZSIpICsgIlxuIik7CisKKwkJCS8vIE91dHB1dCB0aGUgY2F0ZWdvcmllcyB0aGF0IG1ha2UgdXAgdGhlIGhpZXJhcmNoeSBmb3IgdGhlIGdyYXBoCisJCQkvLyBwbHVnaW5zIChhbGwgZXhjZXB0IGZvciB0aGUgY291bnRyeSBjYXRlZ29yaWVzIHdoaWNoIHdlIG91dHB1dAorCQkJLy8gYmVsb3cpCisJCQlmaW5hbCBTdHJpbmdbXSBsZXZlbENhdGVnb3J5SWQgPSBvdXRwdXRDYXRlZ29yaWVzKAorCQkJCQltYXhBZG1pbkxldmVsICsgMSwgZ3JhcGhPdXQsIHBsdWdpbk91dCk7CisKKwkJCWZvciAoZmluYWwgQ291bnRyeUNvZGUgY291bnRyeUNvZGUgOiBjb3VudHJ5Q29kZXMpIHsKKwkJCQlmb3IgKGZpbmFsIE1hcDxDb3VudHJ5Q29kZSwgTGlzdDxHcmFwaFJlY29yZD4+IGdyYXBoUmVjb3JkTWFwIDogZ3JhcGhSZWNvcmRzKSB7CisJCQkJCWZvciAoZmluYWwgR3JhcGhSZWNvcmQgZ3JhcGhSZWNvcmQgOiBncmFwaFJlY29yZE1hcAorCQkJCQkJCS5nZXQoY291bnRyeUNvZGUpKSB7CisJCQkJCQkvLyAKKwkJCQkJCW91dHB1dEdyYXBoUmVjb3JkKGdyYXBoUmVjb3JkLCBkY1ZhbHVlS2V5TWFwLAorCQkJCQkJCQljb3VudHJ5Q2F0ZWdvcmllcywgbGV2ZWxDYXRlZ29yeUlkLCBncmFwaE91dCwKKwkJCQkJCQkJcGx1Z2luT3V0KTsKKwkJCQkJfQorCQkJCX0gLy8gZm9yIGVhY2ggdHlwZSBvZiBncmFwaCBSZWNvcmQKKwkJCX0gLy8gZm9yIGVhY2ggY291bnRyeSBjb2RlCisKKwkJCWdyYXBoT3V0LndyaXRlKFhNTF9FWFRFTlNJT05fUE9JTlRfQ0xPU0UpOworCQkJZ3JhcGhPdXQuY2xvc2UoKTsKKwkJCXBsdWdpbk91dC5jbG9zZSgpOworCQl9IGNhdGNoIChmaW5hbCBJT0V4Y2VwdGlvbiBlKSB7CisJCQllLnByaW50U3RhY2tUcmFjZSgpOworCQl9CisKKwl9Ly8gZ2VuZXJhdGVHcmFwaEV4dGVuc2lvblBvaW50WE1MCisKKwkvKioKKwkgKiBAcGFyYW0gZ3JhcGhSZWNvcmQKKwkgKiBAcGFyYW0gZGNWYWx1ZUtleU1hcAorCSAqIEBwYXJhbSBjb3VudHJ5Q2F0ZWdvcmllcworCSAqIEBwYXJhbSBsZXZlbENhdGVnb3J5SWQKKwkgKiBAcGFyYW0gZ3JhcGhPdXQKKwkgKiBAcGFyYW0gcGx1Z2luT3V0CisJICogQHRocm93cyBJT0V4Y2VwdGlvbgorCSAqLworCXByaXZhdGUgdm9pZCBvdXRwdXRHcmFwaFJlY29yZChmaW5hbCBHcmFwaFJlY29yZCBncmFwaFJlY29yZCwKKwkJCWZpbmFsIE1hcDxTdHJpbmcsIFN0cmluZz4gZGNWYWx1ZUtleU1hcCwKKwkJCWZpbmFsIE1hcDxTdHJpbmcsIFN0cmluZz4gY291bnRyeUNhdGVnb3JpZXMsCisJCQlmaW5hbCBTdHJpbmdbXSBsZXZlbENhdGVnb3J5SWQsIGZpbmFsIFdyaXRlciBncmFwaE91dCwKKwkJCWZpbmFsIFdyaXRlciBwbHVnaW5PdXQpIHRocm93cyBJT0V4Y2VwdGlvbiB7CisJCS8vIE1ha2UgZXZlcnl0aGluZyBjb21lIG91dCBpbiBhbHBoYWJldGljYWwgb3JkZXIKKworCQlmaW5hbCBTdHJpbmcgY291bnRyeUNvZGVTdHJpbmcgPSBncmFwaFJlY29yZC5nZXRJZCgpLnRvTG93ZXJDYXNlKCk7CisJCWZpbmFsIFN0cmluZyBjb3VudHJ5Q2F0ZWdvcnlJZCA9IGxldmVsQ2F0ZWdvcnlJZFtncmFwaFJlY29yZAorCQkJCS5nZXRBZG1pbkxldmVsKCldCisJCQkJKyAiLiIgKyBjb3VudHJ5Q29kZVN0cmluZzsKKworCQkvLyBIYXZlIHdlIHNlZW4gdGhpcyBjb3VudHJ5IGNhdGVnb3J5IGlkIGJlZm9yZT8KKwkJaWYgKGNvdW50cnlDYXRlZ29yaWVzLmdldChjb3VudHJ5Q2F0ZWdvcnlJZCkgPT0gbnVsbCkgeworCQkJLy8gTm8KKwkJCS8vIENyZWF0ZSBhIGNhdGVnb3J5IGZvciB0aGUgY291bnRyeQorCQkJZ3JhcGhPdXQud3JpdGUoTWVzc2FnZUZvcm1hdC5mb3JtYXQoWE1MX0NBVEVHT1JZX0VMRU1FTlRfT1BFTiwKKwkJCQkJbmV3IE9iamVjdFtdIHsgY291bnRyeUNhdGVnb3J5SWQsIGdyYXBoUmVjb3JkLmdldElkKCksCisJCQkJCQkJbGV2ZWxDYXRlZ29yeUlkW2dyYXBoUmVjb3JkLmdldEFkbWluTGV2ZWwoKV0gfSkpOworCQkJZ3JhcGhPdXQud3JpdGUoIlxuIik7CisJCQkvLyAuLi5hbmQgcmVtZW1iZXIgd2UgZGlkIHNvIHdlIGRvbid0IGRvIGl0IGFnYWluCisJCQljb3VudHJ5Q2F0ZWdvcmllcy5wdXQoY291bnRyeUNhdGVnb3J5SWQsIGNvdW50cnlDYXRlZ29yeUlkKTsKKwkJfSAvLyBpZiB3ZSBoYXZlbid0IHNlZW4gdGhpcyBjYXRlZ29yeSBpZCBiZWZvcmUKKworCQkvLyBwbHVnaW5PdXQud3JpdGUoIiMgRHVibGluIENvcmUgZm9yICIKKwkJLy8gKyBncmFwaFJlY29yZC5nZXRDb3VudHJ5Q29kZSgpLnRvU3RyaW5nKCkgKyAiXG4iKTsKKwkJLy8gLy8gV2UgZG9uJ3QgTkxTIHRoZSBJU08zMDE2NiBhbHBoYS0zIGNvZGVzCisKKwkJb3V0cHV0RHVibGluQ29yZShncmFwaFJlY29yZCwgY291bnRyeUNhdGVnb3J5SWQsIGRjVmFsdWVLZXlNYXAsCisJCQkJZ3JhcGhPdXQsIHBsdWdpbk91dCk7CisKKwl9IC8vIG91dHB1dEdyYXBoUmVjb3JkCisKKwkvKioKKwkgKiBAcGFyYW0gcmVjb3JkCisJICogQHBhcmFtIGNvdW50cnlDYXRlZ29yeUlkCisJICogQHBhcmFtIGRjVmFsdWVLZXlNYXAKKwkgKiBAcGFyYW0gZ3JhcGhPdXQKKwkgKiBAcGFyYW0gcGx1Z2luT3V0CisJICogQHRocm93cyBJT0V4Y2VwdGlvbgorCSAqIAorCSAqLworCXB1YmxpYyBzdGF0aWMgdm9pZCBvdXRwdXREdWJsaW5Db3JlKGZpbmFsIFJlY29yZCByZWNvcmQsCisJCQlmaW5hbCBTdHJpbmcgY291bnRyeUNhdGVnb3J5SWQsCisJCQlmaW5hbCBNYXA8U3RyaW5nLCBTdHJpbmc+IGRjVmFsdWVLZXlNYXAsIGZpbmFsIFdyaXRlciBncmFwaE91dCwKKwkJCWZpbmFsIFdyaXRlciBwbHVnaW5PdXQpIHRocm93cyBJT0V4Y2VwdGlvbiB7CisKKwkJZmluYWwgRHVibGluQ29yZSBkYyA9IHJlY29yZC5nZXREdWJsaW5Db3JlKCk7CisJCWZpbmFsIFN0cmluZ0J1aWxkZXIgc2IgPSBuZXcgU3RyaW5nQnVpbGRlcihNZXNzYWdlRm9ybWF0LmZvcm1hdCgKKwkJCQlYTUxfRFVCTElOX0NPUkVfRUxFTUVOVF9PUEVOLAorCQkJCW5ldyBPYmplY3RbXSB7IGNvdW50cnlDYXRlZ29yeUlkIH0pKTsKKworCQlmb3IgKGZpbmFsIEl0ZXJhdG9yIGZlYXR1cmVzSXRlciA9IGRjRmVhdHVyZXMuaXRlcmF0b3IoKTsgZmVhdHVyZXNJdGVyCisJCQkJLmhhc05leHQoKTspIHsKKwkJCWZpbmFsIEVTdHJ1Y3R1cmFsRmVhdHVyZSBkY0ZlYXR1cmUgPSAoRVN0cnVjdHVyYWxGZWF0dXJlKSBmZWF0dXJlc0l0ZXIKKwkJCQkJLm5leHQoKTsKKwkJCS8vIElzIGl0IHNldD8KKwkJCWlmIChkYy5lSXNTZXQoZGNGZWF0dXJlKSkgeworCQkJCS8vIFllcworCQkJCWZpbmFsIFN0cmluZyBmZWF0dXJlVmFsdWUgPSAoU3RyaW5nKSBkYy5lR2V0KGRjRmVhdHVyZSk7CisJCQkJc2IuYXBwZW5kKGRjRmVhdHVyZS5nZXROYW1lKCkpOworCQkJCXNiLmFwcGVuZCgiPVwiIik7CisJCQkJLy8gU2hvdWxkIHRoZSBkdWJsaW4gY29yZSBhdHRyaWJ1dGUgYmUgTkxTJ3Mgb3Igbm90PworCQkJCWlmIChpc0R1YmxpbkNvcmVOTFNGZWF0dXJlKGRjRmVhdHVyZSkpIHsKKwkJCQkJLy8gWWVzCisJCQkJCS8vIEhhdmUgd2Ugb3V0cHV0IHRoaXMgZmVhdHVyZSB2YWx1ZSBiZWZvcmU/CisJCQkJCVN0cmluZyBkY0ZlYXR1cmVLZXkgPSBkY1ZhbHVlS2V5TWFwLmdldChmZWF0dXJlVmFsdWUpOworCQkJCQlpZiAoZGNGZWF0dXJlS2V5ID09IG51bGwpIHsKKwkJCQkJCS8vIE5vCisJCQkJCQlkY0ZlYXR1cmVLZXkgPSBNZXNzYWdlRm9ybWF0CisJCQkJCQkJCS5mb3JtYXQoCisJCQkJCQkJCQkJTkxTX0RDX0ZFQVRVUkVfS0VZX0ZPUk1BVCwKKwkJCQkJCQkJCQluZXcgT2JqZWN0W10geworCQkJCQkJCQkJCQkJcmVjb3JkLmdldElkKCksCisJCQkJCQkJCQkJCQlyZWNvcmQKKwkJCQkJCQkJCQkJCQkJLmdldEFkbWluTGV2ZWxzQXNTdHJpbmcoTkxTX0RFTElNSVRFUiksCisJCQkJCQkJCQkJCQlyZWNvcmQuZ2V0VHlwZSgpLAorCQkJCQkJCQkJCQkJcmVjb3JkLmdldE91dHB1dFR5cGUoKSwKKwkJCQkJCQkJCQkJCWRjRmVhdHVyZS5nZXROYW1lKCkgfSk7CisJCQkJCQkvLyBOb3cgd2UgaGF2ZQorCQkJCQkJZGNWYWx1ZUtleU1hcC5wdXQoZmVhdHVyZVZhbHVlLCBkY0ZlYXR1cmVLZXkpOworCisJCQkJCQlzYi5hcHBlbmQoIiUiKTsKKwkJCQkJCXNiLmFwcGVuZChkY0ZlYXR1cmVLZXkpOworCQkJCQkJLy8gV3JpdGUgdGhlIGtleSBhbmQgdmFsdWUgb3V0IHRvIHRoZSBwbHVnaW5zIGZpbGUKKwkJCQkJCXBsdWdpbk91dC53cml0ZShkY0ZlYXR1cmVLZXkgKyAiID0gIiArIGZlYXR1cmVWYWx1ZQorCQkJCQkJCQkrICJcbiIpOworCQkJCQl9IC8vIGlmIG5vdCBvdXRwdXQgdGhpcyB2YWx1ZSBiZWZvcmUKKwkJCQkJZWxzZSB7CisJCQkJCQkvLyBZZXMKKwkJCQkJCS8vIFNvIHdlIGp1c3QgdXNlIHRoZSBrZXkgYWdhaW4gYmVjYXVzZSBpdCdzIGFscmVhZHkgaW4KKwkJCQkJCS8vIHByb3BlcnRpZXMgZmlsZQorCQkJCQkJc2IuYXBwZW5kKGRjRmVhdHVyZUtleSk7CisJCQkJCX0KKwkJCQl9IGVsc2UgeworCQkJCQkvLyBObworCQkJCQkvLyBObyBOTFMsIGp1c3QgdXNlIHRoZSB2YWx1ZSBpbmxpbmUgaW4gdGhlIER1YmxpbiBDb3JlCisJCQkJCS8vIGVsZW1lbnQKKwkJCQkJc2IuYXBwZW5kKGZlYXR1cmVWYWx1ZSk7CisJCQkJfQorCQkJCXNiLmFwcGVuZCgiXCIgIik7CisJCQl9IC8vIGlmIGZlYXR1cmUgc2V0CisJCX0gLy8gZm9yIGZlYXR1cmVzCisKKwkJc2IuYXBwZW5kKCIvPlxuIik7CisJCWZpbmFsIFN0cmluZyByZXN1bHQgPSBzYi50b1N0cmluZygpOworCisJCWdyYXBoT3V0LndyaXRlKHJlc3VsdCk7CisJCWdyYXBoT3V0LndyaXRlKCJcbiIpOworCX0gLy8gb3V0cHV0RHVibGluQ29yZQorCisJLyoqCisJICogQHBhcmFtIGRjRmVhdHVyZQorCSAqICAgICAgICAgICAgYSB7QGxpbmsgRHVibGluQ29yZX0gZmVhdHVyZQorCSAqIEByZXR1cm4gdHJ1ZSBpZiB0aGUgZmVhdHVyZSBzaG91bGQgYmUgTkxTJ3MKKwkgKi8KKwlwcml2YXRlIHN0YXRpYyBib29sZWFuIGlzRHVibGluQ29yZU5MU0ZlYXR1cmUoCisJCQlmaW5hbCBFU3RydWN0dXJhbEZlYXR1cmUgZGNGZWF0dXJlKSB7CisJCWJvb2xlYW4gcmV0VmFsdWUgPSBmYWxzZTsKKworCQlzd2l0Y2ggKGRjRmVhdHVyZS5nZXRGZWF0dXJlSUQoKSkgeworCQljYXNlIENvbW1vblBhY2thZ2UuRFVCTElOX0NPUkVfX0NPTlRSSUJVVE9SOgorCQljYXNlIENvbW1vblBhY2thZ2UuRFVCTElOX0NPUkVfX0NPVkVSQUdFOgorCQljYXNlIENvbW1vblBhY2thZ2UuRFVCTElOX0NPUkVfX0NSRUFUT1I6CisJCWNhc2UgQ29tbW9uUGFja2FnZS5EVUJMSU5fQ09SRV9fREVTQ1JJUFRJT046CisJCWNhc2UgQ29tbW9uUGFja2FnZS5EVUJMSU5fQ09SRV9fTElDRU5TRToKKwkJY2FzZSBDb21tb25QYWNrYWdlLkRVQkxJTl9DT1JFX19QVUJMSVNIRVI6CisJCWNhc2UgQ29tbW9uUGFja2FnZS5EVUJMSU5fQ09SRV9fUkVMQVRJT046CisJCWNhc2UgQ29tbW9uUGFja2FnZS5EVUJMSU5fQ09SRV9fUkVRVUlSRUQ6CisJCWNhc2UgQ29tbW9uUGFja2FnZS5EVUJMSU5fQ09SRV9fUklHSFRTOgorCQkJLy8gY2FzZSBDb21tb25QYWNrYWdlLkRVQkxJTl9DT1JFX19TT1VSQ0U6CisJCWNhc2UgQ29tbW9uUGFja2FnZS5EVUJMSU5fQ09SRV9fU1VCSkVDVDoKKwkJY2FzZSBDb21tb25QYWNrYWdlLkRVQkxJTl9DT1JFX19USVRMRToKKworCQkJcmV0VmFsdWUgPSB0cnVlOworCisJCQlicmVhazsKKworCQlkZWZhdWx0OgorCQkJcmV0VmFsdWUgPSBmYWxzZTsKKwkJCWJyZWFrOworCQl9IC8vIHN3aXRjaAorCQlyZXR1cm4gcmV0VmFsdWU7CisJfSAvLyBpc0R1YmxpbkNvcmVOTFNGZWF0dXJlCisKKwkvKioKKwkgKiBAcGFyYW0gbnVtTGV2ZWxzCisJICogICAgICAgICAgICB0aGUgbnVtYmVyIG9mIGFkbWluaXN0cmF0aW9uIGxldmVscyB0byBnZW5lcmF0ZSBjYXRlZ29yaWVzIGZvcgorCSAqIEBwYXJhbSBncmFwaE91dAorCSAqICAgICAgICAgICAgdGhlIG91dHB1dCB3cml0ZXIgZm9yIHRoZSBwbHVnaW4ueG1sIGZpbGUgY29udGVudHMKKwkgKiBAcGFyYW0gcGx1Z2luT3V0CisJICogICAgICAgICAgICB0aGUgb3V0cHV0IHdyaXRlciBmb3IgdGhlIHBsdWdpbi5wcm9wZXJ0aWVzIGZpbGUgY29udGVudHMKKwkgKiBAcmV0dXJuIGFuIGFycmF5IGluZGV4ZWQgYnkgYWRtaW5pc3RyYXRpb24gbGV2ZWwgb2YgdGhlIGNhdGVnb3J5IGlkZWFzIG9mCisJICogICAgICAgICB0aGUgZGlmZmVyZW50IGFkbWluaXN0cmF0aW9uIGxldmVscworCSAqIEB0aHJvd3MgSU9FeGNlcHRpb24KKwkgKiAgICAgICAgICAgICBpZiB0aGVyZSBpcyBhIHByb2JsZW0gd3JpdGluZyB0byB0aGUgb3V0cHV0IHdyaXRlcnMKKwkgKi8KKwlwcml2YXRlIFN0cmluZ1tdIG91dHB1dENhdGVnb3JpZXMoZmluYWwgaW50IG51bUxldmVscywKKwkJCWZpbmFsIFdyaXRlciBncmFwaE91dCwgZmluYWwgV3JpdGVyIHBsdWdpbk91dCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKKwkJLy8gVGhlIGNhdGVnb3JpZXMKKwkJLy8gU1RFTQorCQlvdXRwdXRDYXRlZ29yeShJRF9TVEVNX0dSQVBIX0NBVEVHT1JZLCBTVEVNLCAiLyIsCisJCQkJTkxTX0NBVEVHT1JZX0tFWV9GT1JNQVQsIGdyYXBoT3V0LCBwbHVnaW5PdXQpOworCisJCS8vIEdlb2dyYXBoeQorCQlvdXRwdXRDYXRlZ29yeShJRF9HUkFQSF9HRU9HUkFQSFlfQ0FURUdPUlksIEdFT0dSQVBIWSwKKwkJCQlJRF9TVEVNX0dSQVBIX0NBVEVHT1JZLCBOTFNfQ0FURUdPUllfS0VZX0ZPUk1BVCwgZ3JhcGhPdXQsCisJCQkJcGx1Z2luT3V0KTsKKworCQkvLyBQb2xpdGljYWwKKwkJb3V0cHV0Q2F0ZWdvcnkoSURfR1JBUEhfUE9MSVRJQ0FMX0NBVEVHT1JZLCBQT0xJVElDQUwsCisJCQkJSURfR1JBUEhfR0VPR1JBUEhZX0NBVEVHT1JZLCBOTFNfQ0FURUdPUllfS0VZX0ZPUk1BVCwgZ3JhcGhPdXQsCisJCQkJcGx1Z2luT3V0KTsKKworCQkvLyBDb3VudHJ5CisJCW91dHB1dENhdGVnb3J5KElEX0dSQVBIX0NPVU5UUklFU19DQVRFR09SWSwgQ09VTlRSSUVTLAorCQkJCUlEX0dSQVBIX1BPTElUSUNBTF9DQVRFR09SWSwgTkxTX0NBVEVHT1JZX0tFWV9GT1JNQVQsIGdyYXBoT3V0LAorCQkJCXBsdWdpbk91dCk7CisKKwkJZmluYWwgU3RyaW5nW10gbGV2ZWxDYXRlZ29yeUlkID0gbmV3IFN0cmluZ1tudW1MZXZlbHNdOworCisJCS8vIExldmVsCisJCWZvciAoaW50IGFkbWluTGV2ZWwgPSAwOyBhZG1pbkxldmVsIDwgbnVtTGV2ZWxzOyBhZG1pbkxldmVsKyspIHsKKwkJCS8vIExldmVsIGNhdGVnb3J5CisJCQlsZXZlbENhdGVnb3J5SWRbYWRtaW5MZXZlbF0gPSBJRF9HUkFQSF9DT1VOVFJJRVNfQ0FURUdPUlkgKyAiLiIKKwkJCQkJKyBMRVZFTC50b0xvd2VyQ2FzZSgpICsgYWRtaW5MZXZlbDsKKworCQkJb3V0cHV0Q2F0ZWdvcnkobGV2ZWxDYXRlZ29yeUlkW2FkbWluTGV2ZWxdLCBMRVZFTCArIGFkbWluTGV2ZWwsCisJCQkJCUlEX0dSQVBIX0NPVU5UUklFU19DQVRFR09SWSwgTkxTX0NBVEVHT1JZX0tFWV9GT1JNQVQsCisJCQkJCWdyYXBoT3V0LCBwbHVnaW5PdXQpOworCQl9IC8vIGZvciBhZG1pbkxldmVsCisKKwkJZ3JhcGhPdXQud3JpdGUoIlxuIik7CisJCXBsdWdpbk91dC53cml0ZSgiXG4iKTsKKwkJcmV0dXJuIGxldmVsQ2F0ZWdvcnlJZDsKKwl9IC8vIG91dHB1dGNhdGVnb3JpZXMKKworCS8qKgorCSAqIEBwYXJhbSBleHRlbnNpb25Qb2ludElkCisJICogQHBhcmFtIGNhdGVnb3J5SWQKKwkgKiBAcGFyYW0gcGFyZW50Q2F0ZWdvcnlJZAorCSAqIEBwYXJhbSBubHNLZXlGb3JtYXQKKwkgKiBAcGFyYW0gZ3JhcGhPdXQKKwkgKiBAcGFyYW0gcGx1Z2luT3V0CisJICogQHRocm93cyBJT0V4Y2VwdGlvbgorCSAqLworCXB1YmxpYyBzdGF0aWMgdm9pZCBvdXRwdXRDYXRlZ29yeShmaW5hbCBTdHJpbmcgZXh0ZW5zaW9uUG9pbnRJZCwKKwkJCWZpbmFsIFN0cmluZyBjYXRlZ29yeUlkLCBmaW5hbCBTdHJpbmcgcGFyZW50Q2F0ZWdvcnlJZCwKKwkJCWZpbmFsIFN0cmluZyBubHNLZXlGb3JtYXQsIGZpbmFsIFdyaXRlciBncmFwaE91dCwKKwkJCWZpbmFsIFdyaXRlciBwbHVnaW5PdXQpIHRocm93cyBJT0V4Y2VwdGlvbiB7CisJCWZpbmFsIFN0cmluZyBubHNLZXkgPSBjcmVhdGVDYXRlZ29yeU5MU0tleShjYXRlZ29yeUlkLCBubHNLZXlGb3JtYXQpOworCQlncmFwaE91dC53cml0ZShNZXNzYWdlRm9ybWF0CisJCQkJLmZvcm1hdChYTUxfQ0FURUdPUllfRUxFTUVOVF9PUEVOLCBuZXcgT2JqZWN0W10geworCQkJCQkJZXh0ZW5zaW9uUG9pbnRJZCwgIiUiICsgbmxzS2V5LCBwYXJlbnRDYXRlZ29yeUlkIH0pKTsKKwkJZ3JhcGhPdXQud3JpdGUoIlxuIik7CisKKwkJLy8gSGFjayBhbGVydCEKKwkJLy8gRm9yICJsZXZlbHMiLCB0aGUgY2F0ZWdvcnlJZCBsb29rcyBsaWtlIHRoaXMgIkxldmVsMCIsIHdlIHdhbnQgaXQgdG8KKwkJLy8gbG9vayBsaWtlIHRoaXMgIkxldmVsIDAiIHdoZW4gd2UgcHV0IGl0IGluIHRoZSBwbHVnaW4ucHJvcGVyaXRlcyBmaWxlCisJCS8vIGJlY2F1c2UgdGhpcyBpcyB3aGF0IHBlb3BsZSB3aWxsIHNlZSBpbiB0aGUgYXBwbGljYXRpb24KKwkJZmluYWwgU3RyaW5nIHRlbXAgPSBjYXRlZ29yeUlkLnN0YXJ0c1dpdGgoTEVWRUwpID8gTEVWRUwgKyAiICIKKwkJCQkrIGNhdGVnb3J5SWQuc3Vic3RyaW5nKExFVkVMLmxlbmd0aCgpKSA6IGNhdGVnb3J5SWQ7CisKKwkJcGx1Z2luT3V0LndyaXRlKG5sc0tleSArICIgPSAiICsgdGVtcCArICJcbiIpOworCX0gLy8gb3V0cHV0Q2F0ZWdvcnkKKworCS8qKgorCSAqIEBwYXJhbSBrZXkKKwkgKiBAcGFyYW0gbmxzS2V5Rm9ybWF0CisJICogQHJldHVybiBhIE5MUyBrZXkgZm9yIGNhdGVnb3JpZXMgaW4gdGhlIHBsdWdpbi5wcm9wZXJpdGVzIGZpbGUKKwkgKi8KKwlwdWJsaWMgc3RhdGljIFN0cmluZyBjcmVhdGVDYXRlZ29yeU5MU0tleShmaW5hbCBTdHJpbmcga2V5LAorCQkJZmluYWwgU3RyaW5nIG5sc0tleUZvcm1hdCkgeworCQlyZXR1cm4gTWVzc2FnZUZvcm1hdC5mb3JtYXQobmxzS2V5Rm9ybWF0LCBuZXcgT2JqZWN0W10geyBrZXkgfSk7CisJfSAvLyBjcmVhdGVDYXRlZ29yeU5MU0tleQorCisJLyoqCisJICogUHJvY2VzcyBhbGwgb2YgdGhlIGRhdGEgdGhhdCBkZWZpbmVzIHRoZSBncmFwaCBvZiB0aGUgcG9wdWxhdGlvbiBsYWJlbHMKKwkgKiBmb3IgY291bnRyaWVzIGFuZCBjcmVhdGUgZ3JhcGhzIG9mIGp1c3QgcG9wdWxhdGlvbiBsYWJlbHMgZm9yIGEgc3BlY2lmaWVkCisJICogcmFuZ2Ugb2YgYWRtaW5pc3RyYXRpb24gbGV2ZWxzLgorCSAqIAorCSAqIEBwYXJhbSBjb3VudHJ5Q29kZXMKKwkgKiAgICAgICAgICAgIHRoZSBJU08zMTY2LTEgYWxwaGEtMyBjb2RlcyBvZiB0aGUgY291bnRyaWVzIHRvIGdlbmVyYXRlCisJICogICAgICAgICAgICBncmFwaHMgZm9yCisJICogQHBhcmFtIGRhdGFUeXBlCisJICogICAgICAgICAgICB0aGUgdHlwZSBvZiBncmFwaCB0byBjcmVhdGVzCisJICogQHJldHVybiBzdHVmZgorCSAqLworCXB1YmxpYyBNYXA8Q291bnRyeUNvZGUsIExpc3Q8R3JhcGhSZWNvcmQ+PiBjcmVhdGVHcmFwaFJlY29yZHMoCisJCQlmaW5hbCBMaXN0PENvdW50cnlDb2RlPiBjb3VudHJ5Q29kZXMsIGZpbmFsIERhdGFUeXBlIGRhdGFUeXBlKSB7CisJCXJldHVybiBjcmVhdGVHcmFwaFJlY29yZHMoR0VPR1JBUEhZX0ZJTEVfVVJJX1BSRUZJWCwgY291bnRyeUNvZGVzLAorCQkJCWRhdGFUeXBlKTsKKwl9IC8vIGNyZWF0ZUdyYXBoUmVjb3JkcworCisJLyoqCisJICogUHJvY2VzcyBhbGwgb2YgdGhlIGRhdGEgdGhhdCBkZWZpbmVzIHRoZSBncmFwaCBvZiB0aGUgcG9wdWxhdGlvbiBsYWJlbHMKKwkgKiBmb3IgY291bnRyaWVzIGFuZCBjcmVhdGUgZ3JhcGhzIG9mIGp1c3QgcG9wdWxhdGlvbiBsYWJlbHMgZm9yIGEgc3BlY2lmaWVkCisJICogcmFuZ2Ugb2YgYWRtaW5pc3RyYXRpb24gbGV2ZWxzLgorCSAqIAorCSAqIEBwYXJhbSBkYXRhRmlsZVVSSVByZWZpeAorCSAqICAgICAgICAgICAgdGhlIFVSSSBwcmVmaXggZm9yIHRoZSBjb3VudHJ5IGdyYXBocyBiZWluZyBjcmVhdGVkCisJICogQHBhcmFtIGNvdW50cnlDb2RlcworCSAqICAgICAgICAgICAgdGhlIElTTzMxNjYtMSBhbHBoYS0zIGNvZGVzIG9mIHRoZSBjb3VudHJpZXMgdG8gZ2VuZXJhdGUKKwkgKiAgICAgICAgICAgIGdyYXBocyBmb3IKKwkgKi8KKwlwcml2YXRlIE1hcDxDb3VudHJ5Q29kZSwgTGlzdDxHcmFwaFJlY29yZD4+IGNyZWF0ZUdyYXBoUmVjb3JkcygKKwkJCWZpbmFsIFN0cmluZyBkYXRhRmlsZVVSSVByZWZpeCwKKwkJCWZpbmFsIExpc3Q8Q291bnRyeUNvZGU+IGNvdW50cnlDb2RlcywgZmluYWwgRGF0YVR5cGUgZGF0YVR5cGUpIHsKKwkJZmluYWwgTWFwPENvdW50cnlDb2RlLCBMaXN0PEdyYXBoUmVjb3JkPj4gcmV0VmFsdWUgPSBuZXcgSGFzaE1hcDxDb3VudHJ5Q29kZSwgTGlzdDxHcmFwaFJlY29yZD4+KCk7CisKKwkJLy8gSXRlcmF0ZSB0aHJvdWdoIGVhY2ggY291bnRyeQorCQlmb3IgKGZpbmFsIENvdW50cnlDb2RlIGNvdW50cnlDb2RlIDogY291bnRyeUNvZGVzKSB7CisJCQkvLyBHZXQgYWxsIG9mIHRoZSBkYXRhIGZpbGVzIGZvciB0aGUgY291bnRyeQorCQkJZmluYWwgTGlzdDxGaWxlPiBkYXRhRmlsZXMgPSBDb3VudHJ5RGlyZWN0b3J5VXRpbGl0aWVzCisJCQkJCS5nZXREYXRhRmlsZXMoY291bnRyeUNvZGUsIGRhdGFUeXBlLnRvU3RyaW5nKCkpOworCQkJZm9yIChmaW5hbCBGaWxlIGZpbGUgOiBkYXRhRmlsZXMpIHsKKwkJCQkvLyBHZXQgdGhlIGdyYXBoIHJlY29yZCBmb3IgdGhlIGZpbGUKKwkJCQlmaW5hbCBHcmFwaFJlY29yZCBncmFwaFJlY29yZCA9IFJlY29yZEZhY3RvcnkuSU5TVEFOQ0UKKwkJCQkJCS5jcmVhdGVHcmFwaFJlY29yZChkYXRhVHlwZSwgY291bnRyeUNvZGUsCisJCQkJCQkJCWRhdGFGaWxlVVJJUHJlZml4LCBmaWxlKTsKKworCQkJCS8vIERpZCB3ZSBoYXZlIHRyb3VibGUgY3JlYXRpbmcgdGhlIGdyYXBoPworCQkJCWlmIChncmFwaFJlY29yZC5nZXRHcmFwaCgpICE9IG51bGwpIHsKKwkJCQkJLy8gTm8KKworCQkJCQkvLyBIYXZlIHdlIHByb2Nlc3NlZCB0aGlzIGNvdW50cnkgY29kZSBiZWZvcmU/CisJCQkJCUxpc3Q8R3JhcGhSZWNvcmQ+IGNvdW50cnlMaXN0ID0gcmV0VmFsdWUuZ2V0KGNvdW50cnlDb2RlKTsKKwkJCQkJaWYgKGNvdW50cnlMaXN0ID09IG51bGwpIHsKKwkJCQkJCS8vIE5vCisJCQkJCQljb3VudHJ5TGlzdCA9IG5ldyBBcnJheUxpc3Q8R3JhcGhSZWNvcmQ+KCk7CisJCQkJCQlyZXRWYWx1ZS5wdXQoY291bnRyeUNvZGUsIGNvdW50cnlMaXN0KTsKKwkJCQkJfQorCQkJCQljb3VudHJ5TGlzdC5hZGQoZ3JhcGhSZWNvcmQpOworCQkJCX0gLy8gaWYgbm8gcHJvYmxlbSBjcmVhdGluZyB0aGUgZ3JhcGgKKwkJCX0gLy8gZm9yIGZpbGUKKwkJfSAvLyBmb3IgZWFjaCBjb3VudHJ5IGNvZGUKKwkJcmV0dXJuIHJldFZhbHVlOworCX0gLy8gY3JlYXRlR3JhcGhSZWNvcmRzCisKKwkvKioKKwkgKiBUaGlzIGNsYXNzIHJlcHJlc2VudHMgYWxsIG9mIHRoZSBkaWZmZXJlbnQgdHlwZXMgb2YgZGF0YSBmaWxlcyB0aGF0IGNhbgorCSAqIGJlIGRlZmluZWQgZm9yIGEgY291bnRyeQorCSAqLworCXB1YmxpYyBlbnVtIERhdGFUeXBlIHsKKwkJLyoqCisJCSAqIAorCQkgKi8KKwkJbm9kZSwKKwkJLyoqCisJCSAqIAorCQkgKi8KKwkJYXJlYSwKKwkJLyoqCisJCSAqIAorCQkgKi8KKwkJcG9wdWxhdGlvbjsKKworCX0gLy8gRGF0YVR5cGUKKworCS8qKgorCSAqLworCXByb3RlY3RlZCBzdGF0aWMgY2xhc3MgQ291bnRyeURhdGEgeworCQkvLyBOb3RoaW5nCisJfSAvLyBDb3VudHJ5RGF0YQorCisJLyoqCisJICogVGhpcyBjbGFzcyBjb250YWlucyB0aGUgZGF0YSB0aGF0IGRlZmluZXMgbm9kZSBpbiBhIGNvdW50cnkgZ3JhcGguCisJICovCisJcHJpdmF0ZSBzdGF0aWMgY2xhc3MgTm9kZURhdGEgZXh0ZW5kcyBDb3VudHJ5RGF0YSB7CisJCS8qKgorCQkgKiBUaGUgbmFtZSBvZiB0aGUgbm9kZS4KKwkJICovCisJCVN0cmluZyBuYW1lID0gbnVsbDsKKworCQkvKioKKwkJICogVGhlIGlkZW50aWZpZXIgZm9yIHRoZSBub2RlLgorCQkgKi8KKwkJU3RyaW5nIGlkZW50aWZpZXIgPSBudWxsOworCisJCS8qKgorCQkgKiBAcGFyYW0gbmFtZQorCQkgKiAgICAgICAgICAgIG5hbWUgb2YgdGhlIG5vZGUuCisJCSAqIEBwYXJhbSBpZGVudGlmaWVyCisJCSAqICAgICAgICAgICAgaWRlbnRpZmllciBmb3IgdGhlIG5vZGUuCisJCSAqLworCQlwdWJsaWMgTm9kZURhdGEoZmluYWwgU3RyaW5nIGlkZW50aWZpZXIsIGZpbmFsIFN0cmluZyBuYW1lKSB7CisJCQl0aGlzLm5hbWUgPSBuYW1lOworCQkJdGhpcy5pZGVudGlmaWVyID0gaWRlbnRpZmllcjsKKworCQl9IC8vIE5vZGVEYXRhCisKKwkJLyoqCisJCSAqIEByZXR1cm4gdGhlIGNvZGUKKwkJICovCisJCXB1YmxpYyBmaW5hbCBTdHJpbmcgZ2V0SWRlbnRpZmllcigpIHsKKwkJCXJldHVybiBpZGVudGlmaWVyOworCQl9CisKKwkJLyoqCisJCSAqIEBwYXJhbSBpZGVudGlmaWVyCisJCSAqICAgICAgICAgICAgdGhlIGlkZW50aWZpZXIgdG8gc2V0CisJCSAqLworCQlwdWJsaWMgZmluYWwgdm9pZCBzZXRJZGVudGlmaWVyKGZpbmFsIFN0cmluZyBpZGVudGlmaWVyKSB7CisJCQl0aGlzLmlkZW50aWZpZXIgPSBpZGVudGlmaWVyOworCQl9CisKKwkJLyoqCisJCSAqIEByZXR1cm4gdGhlIG5hbWUKKwkJICovCisJCXB1YmxpYyBmaW5hbCBTdHJpbmcgZ2V0TmFtZSgpIHsKKwkJCXJldHVybiBuYW1lOworCQl9CisKKwkJLyoqCisJCSAqIEBzZWUgamF2YS5sYW5nLk9iamVjdCN0b1N0cmluZygpCisJCSAqLworCQlAT3ZlcnJpZGUKKwkJcHVibGljIFN0cmluZyB0b1N0cmluZygpIHsKKwkJCWZpbmFsIFN0cmluZ0J1aWxkZXIgc2IgPSBuZXcgU3RyaW5nQnVpbGRlcihuYW1lKTsKKwkJCXNiLmFwcGVuZCgiICgiKTsKKwkJCXNiLmFwcGVuZChpZGVudGlmaWVyKTsKKwkJCXJldHVybiBzYi50b1N0cmluZygpOworCQl9CisKKwl9IC8vIE5vZGVEYXRhCisKKwkvKioKKwkgKiBUaGlzIGNsYXNzIHJlcHJlc2VudHMgdGhlIGFyZWEgaW4gc3F1YXJlIGtpbG9tZXRlcnMgZm9yIGEgc3BlY2lmaWMgbm9kZQorCSAqIGluIGEgc3BlY2lmaWMgYWRtaW5zdHJhdGlvbiBsZXZlbAorCSAqLworCXByaXZhdGUgc3RhdGljIGNsYXNzIEFyZWFEYXRhIGV4dGVuZHMgQ291bnRyeURhdGEgeworCisJCS8vIElTTy0zMTY2LTEsIElTTy0zMTY2LTIsIG9yIElTTy0zMTY2LTIgYWxwaGEncworCQkvLyBUaGUgaWRlbnRpZmllciBvZiB0aGUgbm9kZQorCQlTdHJpbmcgaWRlbnRpZmllciA9ICIiOworCisJCS8vIFNxdWFyZSBLbSdzCisJCVN0cmluZyBhcmVhID0gIiI7CisKKwkJLyoqCisJCSAqIEBwYXJhbSBpZGVudGlmaWVyCisJCSAqICAgICAgICAgICAgVGhlIGlkZW50aWZpZXIgb2YgdGhlIG5vZGUKKwkJICogQHBhcmFtIGFyZWEKKwkJICogICAgICAgICAgICB0aGUgYXJlYSBvZiB0aGUgbm9kZSBpbiBzcXVhcmUga2lsb21ldGVycworCQkgKi8KKwkJcHVibGljIEFyZWFEYXRhKGZpbmFsIFN0cmluZyBpZGVudGlmaWVyLCBmaW5hbCBTdHJpbmcgYXJlYSkgeworCQkJdGhpcy5pZGVudGlmaWVyID0gaWRlbnRpZmllcjsKKwkJCXRoaXMuYXJlYSA9IGFyZWE7CisJCX0gLy8gQXJlYURhdGEKKworCQkvKioKKwkJICogQHJldHVybiB0aGUgYXJlYSBvZiB0aGUgbm9kZSBpbiBzcXVhcmUga2lsb21ldGVycworCQkgKi8KKwkJcHVibGljIGZpbmFsIFN0cmluZyBnZXRBcmVhKCkgeworCQkJcmV0dXJuIGFyZWE7CisJCX0KKworCQkvKioKKwkJICogQHJldHVybiB0aGUgaWRlbnRpZmllciBvZiB0aGUgbm9kZQorCQkgKi8KKwkJcHVibGljIGZpbmFsIFN0cmluZyBnZXRJZGVudGlmaWVyKCkgeworCQkJcmV0dXJuIGlkZW50aWZpZXI7CisJCX0KKworCQkvKioKKwkJICogQHNlZSBqYXZhLmxhbmcuT2JqZWN0I3RvU3RyaW5nKCkKKwkJICovCisJCUBPdmVycmlkZQorCQlwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkgeworCQkJcmV0dXJuIGlkZW50aWZpZXIgKyAiID0gIiArIGFyZWE7CisJCX0gLy8gdG9TdHJpbmcKKworCX0gLy8gQXJlYURhdGEKKworCS8qKgorCSAqIFRoaXMgY2xhc3MgcmVwcmVzZW50cyB0aGUgbnVtYmVyIG9mIHBvcHVsYXRpb24gbWVtYmVycyBvZiBhIHBhcnRpY3VsYXIKKwkgKiB0eXBlIHdobyBvY2N1cHkgYSBzcGVjaWZpYyBub2RlLiBJdCBhbHNvLCBpbmNsdWRlcyBhbiBvcHRpb25hbAorCSAqIHNwZWNpZmljYXRpb24gb2YgdGhlIGFyZWEgdGhhdCB0aGUgcG9wdWxhdGlvbiBsaXZlcyBpbi4gVGhpcyBpcyBpbnRlbmRlZAorCSAqIHRvIHByb3ZpZGUgYmV0dGVyIHBvcHVsYXRpb24gZGVuc2l0eSB2YWx1ZXMgd2hlbiBhIHBvcHVsYXRpb24gbGl2ZXMgaW4gYQorCSAqIHNtYWxsIGFyZWEgKGUuZy4sIGEgY2l0eSkgY29tcGFyZWQgdG8gdGhlIHRvdGFsIGFyZWEgb2YgdGhlIG5vZGUuCisJICovCisJcHJpdmF0ZSBzdGF0aWMgY2xhc3MgUG9wdWxhdGlvbkRhdGEgZXh0ZW5kcyBDb3VudHJ5RGF0YSB7CisKKwkJLy8gSVNPLTMxNjYtMSwgSVNPLTMxNjYtMiwgb3IgPworCQlTdHJpbmcgbm9kZUNvZGUgPSAiIjsKKworCQkvLyBJbmRpdmlkdWFscworCQlTdHJpbmcgY291bnQgPSAiIjsKKworCQkvLyBPcHRpb25hbCBhcmVhIG9jY3VwaWVkIGJ5IHBvcHVsYXRpb24KKwkJU3RyaW5nIGFyZWEgPSBudWxsOworCisJCS8qKgorCQkgKiBAcGFyYW0gbm9kZUNvZGUKKwkJICogICAgICAgICAgICB0aGUgdW5pcXVlIGlkZW50aWZpZXIgb2YgdGhlIG5vZGUKKwkJICogQHBhcmFtIGRhdGFTdHJpbmcKKwkJICogICAgICAgICAgICB0aGUgc3RyaW5nIHRoYXQgY29udGFpbnMgdGhlIHBvcHVsYXRpb24gY291bnQgYW5kIG9wdGlvbmFsCisJCSAqICAgICAgICAgICAgYXJlYSBleHRlbnQKKwkJICovCisJCXB1YmxpYyBQb3B1bGF0aW9uRGF0YShmaW5hbCBTdHJpbmcgbm9kZUNvZGUsIGZpbmFsIFN0cmluZyBkYXRhU3RyaW5nKSB7CisJCQlzdXBlcigpOworCisJCQl0aGlzLm5vZGVDb2RlID0gbm9kZUNvZGU7CisKKwkJCS8vIFRoZSBkYXRhIHN0cmluZyBjb250YWlucyB0aGUgcG9wdWxhdGlvbiBjb3VudCBhbmQgYW4gb3B0aW9uYWwKKwkJCS8vIHNwZWNpZmlhdGlvbiBvZiB0aGUgYXJlYSBpbiBzcXVhcmUga2lsb21ldGVycyB0aGF0IHRoZSBwb3B1bGF0aW9uCisJCQkvLyBpcyBkaXN0cmlidXRlZCBvdmVyLiBUaGUgb3B0aW9uYWwgYXJlYSBzcGVjaWZpY2F0aW9uIGlzIHVzZWQgdG8KKwkJCS8vIGZhY2lsbGl0YXRlIG1vcmUgYWNjdXJhdGUgY29tcHV0YXRpb24gb2YgdGhlIHBvcHVsYXRpb24gZGVuc2l0eQorCQkJLy8gZm9yIGNhc2VzIHdoZXJlIHRoZSBhcmVhIG9mIGEgcmVnaW9uIGJlaW5nIGxhYmVsZWQgYnkgdGhlCisJCQkvLyBwb3B1bGF0aW9uIGlzIG11Y2ggbGFyZ2VyIHRoYW4gdGhlIGFyZWEgd2hlcmUgbW9zdCBvZiB0aGUKKwkJCS8vIHBvcHVsYXRpb24gZXhpc3RzLiBGb3IgaW5zdGFuY2UsIHRoZSBjYXNlIG9mIGEgc2luZ2xlIGNpdHkgaW4gYW4KKwkJCS8vIG90aGVyd2lzZSBsYXJnZSB1bm9jY3VwaWVkIHJlZ2lvbi4gVGhlIGZvcm1hdCBvZiB0aGUgc3RyaW5nIGlzCisJCQkvLyBlaXRoZXIgYSBzaW5nbGUgaW50ZWdlciBmb3IgdGhlIHBvcHVsYXRpb24gY291bnQsIG9yIGFuIGludGVnZXIKKwkJCS8vIGZvbGxvd2VkIGJ5IGEgY29tbWEgZm9sbG93ZWQgYnkgYW4gZG91YmxlIGZvciB0aGUgYXJlYS4gZS5nLgorCQkJLy8gIjEyMyIgb3IgIjEyMywgNDUuNiIKKworCQkJZmluYWwgU3RyaW5nVG9rZW5pemVyIHN0ID0gbmV3IFN0cmluZ1Rva2VuaXplcihkYXRhU3RyaW5nLCAiLCAiKTsKKwkJCWNvdW50ID0gc3QubmV4dFRva2VuKCk7CisJCQlhcmVhID0gc3QuaGFzTW9yZVRva2VucygpID8gc3QubmV4dFRva2VuKCkgOiBudWxsOworCQl9IC8vIFBvcHVsYXRpb25EYXRhCisKKwkJLyoqCisJCSAqIEByZXR1cm4gdGhlIGNvdW50CisJCSAqLworCQlwdWJsaWMgZmluYWwgU3RyaW5nIGdldENvdW50KCkgeworCQkJcmV0dXJuIGNvdW50OworCQl9CisKKwkJLyoqCisJCSAqIEByZXR1cm4gdGhlIG5vZGVDb2RlCisJCSAqLworCQlwdWJsaWMgZmluYWwgU3RyaW5nIGdldE5vZGVDb2RlKCkgeworCQkJcmV0dXJuIG5vZGVDb2RlOworCQl9CisKKwkJLyoqCisJCSAqIEBzZWUgamF2YS5sYW5nLk9iamVjdCN0b1N0cmluZygpCisJCSAqLworCQlAT3ZlcnJpZGUKKwkJcHVibGljIFN0cmluZyB0b1N0cmluZygpIHsKKwkJCWZpbmFsIFN0cmluZ0J1aWxkZXIgc2IgPSBuZXcgU3RyaW5nQnVpbGRlcihub2RlQ29kZSk7CisJCQlzYi5hcHBlbmQoIiAoIik7CisJCQlzYi5hcHBlbmQoY291bnQpOworCQkJc2IuYXBwZW5kKGFyZWEgIT0gbnVsbCA/ICIvIiArIGFyZWEgKyAia21eMiIgOiAiIik7CisJCQlzYi5hcHBlbmQoIikiKTsKKwkJCXJldHVybiBzYi50b1N0cmluZygpOworCQl9IC8vIHRvU3RyaW5nCisKKwl9IC8vIFBvcHVsYXRpb25EYXRhCisKKwkvKioKKwkgKiBUaGlzIGNsYXNzIGlzIGEgZmFjdG9yeSBmb3IgR3JhcGhSZWNvcmRzCisJICovCisJcHVibGljIHN0YXRpYyBjbGFzcyBSZWNvcmRGYWN0b3J5IHsKKwkJLyoqCisJCSAqIFRoZSBzaW5nbGV0b24gaW5zdGFuY2Ugb2YgdGhlIGZhY3RvcnkKKwkJICovCisJCXB1YmxpYyBzdGF0aWMgZmluYWwgUmVjb3JkRmFjdG9yeSBJTlNUQU5DRSA9IG5ldyBSZWNvcmRGYWN0b3J5KCk7CisKKwkJLyoqCisJCSAqIEBwYXJhbSBkYXRhVHlwZQorCQkgKiBAcGFyYW0gY291bnRyeUNvZGUKKwkJICogQHBhcmFtIGRhdGFGaWxlVVJJUHJlZml4CisJCSAqIEBwYXJhbSBmaWxlCisJCSAqIEByZXR1cm4gdGhlIGdyYXBoIHJlY29yZCBleHRyYWN0ZWQgZnJvbSB0aGUgZGF0YSBmaWxlCisJCSAqLworCQlwdWJsaWMgR3JhcGhSZWNvcmQgY3JlYXRlR3JhcGhSZWNvcmQoZmluYWwgRGF0YVR5cGUgZGF0YVR5cGUsCisJCQkJZmluYWwgQ291bnRyeUNvZGUgY291bnRyeUNvZGUsIGZpbmFsIFN0cmluZyBkYXRhRmlsZVVSSVByZWZpeCwKKwkJCQlmaW5hbCBGaWxlIGZpbGUpIHsKKwkJCUdyYXBoUmVjb3JkIHJldFZhbHVlID0gbnVsbDsKKworCQkJc3dpdGNoIChkYXRhVHlwZSkgeworCQkJY2FzZSBub2RlOgorCQkJCXJldFZhbHVlID0gbmV3IE5vZGVHcmFwaFJlY29yZCgpOworCQkJCWJyZWFrOworCQkJY2FzZSBhcmVhOgorCQkJCXJldFZhbHVlID0gbmV3IEFyZWFHcmFwaFJlY29yZCgpOworCQkJCWJyZWFrOworCQkJY2FzZSBwb3B1bGF0aW9uOgorCQkJCXJldFZhbHVlID0gbmV3IFBvcHVsYXRpb25HcmFwaFJlY29yZCgpOworCQkJCWJyZWFrOworCisJCQlkZWZhdWx0OgorCQkJCXRocm93IG5ldyBVbnN1cHBvcnRlZE9wZXJhdGlvbkV4Y2VwdGlvbihkYXRhVHlwZS50b1N0cmluZygpCisJCQkJCQkrICIgbm90IGEgcmVjb2duaXplZCBkYXRhIHR5cGUiKTsKKwkJCX0gLy8gc3dpdGNoCisKKwkJCXJldFZhbHVlLmluaXRpYWxpemUoY291bnRyeUNvZGUsIGRhdGFGaWxlVVJJUHJlZml4LCBmaWxlKTsKKwkJCXJldHVybiByZXRWYWx1ZTsKKwkJfSAvLyBjcmVhdGVHcmFwaFJlY29yZAorCisJfSAvLyBSZWNvcmRGYWN0b3J5CisKKwkvKioKKwkgKiBUaGlzIGNsYXNzIGNvbnRhaW5zIG1ldGFkYXRhIGZvciBhIGdyYXBoLCBtb2RlbCBvciBzY2VuYXJpbworCSAqLworCWFic3RyYWN0IHB1YmxpYyBzdGF0aWMgY2xhc3MgUmVjb3JkIHsKKworCQlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIFVSSUNvbnZlcnRlciBjb252ZXJ0ZXIgPSBuZXcgVVJJQ29udmVydGVySW1wbCgpOworCisJCS8qKgorCQkgKiBUaGlzIGlzIGFuIGlkZW50aWZpZXIgZm9yIHRoZSBncmFwaC9tb2RlbC9zY2VuYXJpbyBiZWluZyBjcmVhdGVkLgorCQkgKiBlLmcuLCBDb3VudHJ5Q29kZQorCQkgKi8KKwkJcHJvdGVjdGVkIFN0cmluZyBpZCA9ICIiOworCisJCXByb3RlY3RlZCBJZGVudGlmaWFibGUgaWRlbnRpZmlhYmxlID0gbnVsbDsKKworCQlwcm90ZWN0ZWQgTGlzdDxJbnRlZ2VyPiBhZG1pbkxldmVscyA9IG5ldyBBcnJheUxpc3Q8SW50ZWdlcj4oKTsKKworCQkvKioKKwkJICogVGhlIG1heGltdW0gYWRtaW5pc3RyYXRpb24gbGV2ZWwgaW4gdGhlIGdyYXBoL21vZGVsCisJCSAqLworCQlwcm90ZWN0ZWQgaW50IG1heEFkbWluTGV2ZWwgPSAtMTsKKworCQkvKioKKwkJICogRGVmYXVsdCBDb25zdHJ1Y3RvcgorCQkgKi8KKwkJcHVibGljIFJlY29yZCgpIHsKKwkJCS8vIG5vdGhpbmcKKwkJfSAvLyBSZWNvcmQKKworCQkvKioKKwkJICogQHBhcmFtIGlkZW50aWZpYWJsZQorCQkgKiAgICAgICAgICAgIHRoZSBpZGVudGlmaWFibGUgKGdyYXBoL21vZGVsL3NjZW5hcmlvKSB0aGF0IHRoZSBtZXRhZGF0YQorCQkgKiAgICAgICAgICAgIGRlc2NyaWJlcworCQkgKiBAcGFyYW0gaWQKKwkJICogICAgICAgICAgICBhIHNob3J0IGlkZW50aWZpZXIgb2YgdGhlIGlkZW50aWZpYWJsZSAoZS5nLiwgY291bnRyeQorCQkgKiAgICAgICAgICAgIGNvZGUpCisJCSAqIEBwYXJhbSBhZG1pbkxldmVsCisJCSAqICAgICAgICAgICAgdGhlIGFkbWluaXN0cmF0aW9uIGxldmVsIG9mIHRoZSBjb250ZW50cyBvZiB0aGUKKwkJICogICAgICAgICAgICBpZGVudGlmaWFibGUKKwkJICovCisJCXB1YmxpYyBSZWNvcmQoZmluYWwgSWRlbnRpZmlhYmxlIGlkZW50aWZpYWJsZSwgZmluYWwgU3RyaW5nIGlkLAorCQkJCWZpbmFsIGludCBhZG1pbkxldmVsKSB7CisJCQl0aGlzKGlkZW50aWZpYWJsZSwgaWQsIENvbGxlY3Rpb25zLnNpbmdsZXRvbkxpc3QoSW50ZWdlcgorCQkJCQkudmFsdWVPZihhZG1pbkxldmVsKSkpOworCQl9IC8vIFJlY29yZAorCisJCS8qKgorCQkgKiBAcGFyYW0gaWRlbnRpZmlhYmxlCisJCSAqICAgICAgICAgICAgdGhlIGlkZW50aWZpYWJsZSAoZ3JhcGgvbW9kZWwvc2NlbmFyaW8pIHRoYXQgdGhlIG1ldGFkYXRhCisJCSAqICAgICAgICAgICAgZGVzY3JpYmVzCisJCSAqIEBwYXJhbSBpZAorCQkgKiAgICAgICAgICAgIGEgc2hvcnQgaWRlbnRpZmllciBvZiB0aGUgaWRlbnRpZmlhYmxlIChlLmcuLCBjb3VudHJ5CisJCSAqICAgICAgICAgICAgY29kZSkKKwkJICogQHBhcmFtIGFkbWluTGV2ZWxzCisJCSAqICAgICAgICAgICAgdGhlIGFkbWluaXN0cmF0aW9uIGxldmVscyBvZiB0aGUgY29udGVudHMgb2YgdGhlCisJCSAqICAgICAgICAgICAgaWRlbnRpZmlhYmxlCisJCSAqLworCQlwdWJsaWMgUmVjb3JkKGZpbmFsIElkZW50aWZpYWJsZSBpZGVudGlmaWFibGUsIGZpbmFsIFN0cmluZyBpZCwKKwkJCQlmaW5hbCBMaXN0PEludGVnZXI+IGFkbWluTGV2ZWxzKSB7CisJCQl0aGlzLmlkZW50aWZpYWJsZSA9IGlkZW50aWZpYWJsZTsKKwkJCXRoaXMuaWQgPSBpZDsKKwkJCWFkZEFkbWluTGV2ZWxzKGFkbWluTGV2ZWxzKTsKKwkJfSAvLyBSZWNvcmQKKworCQkvKioKKwkJICogQHJldHVybiB0aGUgZHVibGluIGNvcmUgaW5zdGFuY2Ugb2YgdGhlIGNvbnRhaW5lZCBJZGVudGlmaWFibGUKKwkJICovCisJCXB1YmxpYyBEdWJsaW5Db3JlIGdldER1YmxpbkNvcmUoKSB7CisJCQlyZXR1cm4gaWRlbnRpZmlhYmxlLmdldER1YmxpbkNvcmUoKTsKKwkJfSAvLyBnZXREdWJsaW5Db3JlCisKKwkJLyoqCisJCSAqIEByZXR1cm4gZS5nLiwgImdyYXBoIiwgIm1vZGVsIiwgInNjZW5hcmlvIgorCQkgKi8KKwkJYWJzdHJhY3QgcHVibGljIFN0cmluZyBnZXRPdXRwdXRUeXBlKCk7CisKKwkJLyoqCisJCSAqIEByZXR1cm4gdGhlIGlkCisJCSAqLworCQlwdWJsaWMgZmluYWwgU3RyaW5nIGdldElkKCkgeworCQkJcmV0dXJuIGlkOworCQl9IC8vIGdldElkCisKKwkJLyoqCisJCSAqIEBwYXJhbSBhZG1pbkxldmVsCisJCSAqICAgICAgICAgICAgdGhlIGFkbWluaXN0cmF0aW9uIGxldmVsIHRvIGFkZCB0byB0aGUgcmVjb3JkCisJCSAqLworCQlwdWJsaWMgdm9pZCBhZGRBZG1pbkxldmVsKGZpbmFsIGludCBhZG1pbkxldmVsKSB7CisJCQlhZGRBZG1pbkxldmVsKEludGVnZXIudmFsdWVPZihhZG1pbkxldmVsKSk7CisJCX0gLy8gYWRkQWRtaW5MZXZlbAorCisJCS8qKgorCQkgKiBAcGFyYW0gYWRtaW5MZXZlbAorCQkgKiAgICAgICAgICAgIHRoZSBhZG1pbmlzdHJhdGlvbiBsZXZlbCB0byBhZGQgdG8gdGhlIHJlY29yZAorCQkgKi8KKwkJcHVibGljIHZvaWQgYWRkQWRtaW5MZXZlbChmaW5hbCBJbnRlZ2VyIGFkbWluTGV2ZWwpIHsKKwkJCS8vIElzIHRoZSBhZG1pbiBsZXZlbCBhbHJlYWR5IGluIG91ciBjb2xsZWN0aW9uPworCQkJaWYgKCFhZG1pbkxldmVscy5jb250YWlucyhhZG1pbkxldmVsKSkgeworCQkJCS8vIE5vCisJCQkJYWRtaW5MZXZlbHMuYWRkKGFkbWluTGV2ZWwpOworCQkJCW1heEFkbWluTGV2ZWwgPSBNYXRoLm1heChtYXhBZG1pbkxldmVsLCBhZG1pbkxldmVsLmludFZhbHVlKCkpOworCQkJCUNvbGxlY3Rpb25zLnNvcnQoYWRtaW5MZXZlbHMpOworCQkJfQorCQl9IC8vIGFkZEFkbWluTGV2ZWwKKworCQkvKioKKwkJICogQWRkIGEgbGlzdCBvZiBhZG1pbmlzdHJhdGlvbiBsZXZlbHMgdG8gdGhlIGNvbGxlY2l0b24gb2YKKwkJICogYWRtaW5pc3RyYXRpb24gbGV2ZWxzCisJCSAqIAorCQkgKiBAcGFyYW0gYWRtaW5MZXZlbHMKKwkJICogICAgICAgICAgICBhIGxpc3Qgb2YgYWRtaW5pc3RyYXRpb24gbGV2ZWxzCisJCSAqLworCQlwdWJsaWMgdm9pZCBhZGRBZG1pbkxldmVscyhmaW5hbCBMaXN0PEludGVnZXI+IGFkbWluTGV2ZWxzKSB7CisJCQlmb3IgKGZpbmFsIEludGVnZXIgYWRtaW5MZXZlbCA6IGFkbWluTGV2ZWxzKSB7CisJCQkJYWRkQWRtaW5MZXZlbChhZG1pbkxldmVsKTsKKwkJCX0KKwkJfSAvLyBhZGRBZG1pbkxldmVscworCisJCS8qKgorCQkgKiBAcmV0dXJuIHRoZSBhZG1pbmlzdHJhdGlvbiBsZXZlbHMKKwkJICovCisJCXB1YmxpYyBmaW5hbCBMaXN0PEludGVnZXI+IGdldEFkbWluTGV2ZWxzKCkgeworCQkJcmV0dXJuIGFkbWluTGV2ZWxzOworCQl9IC8vIGdldEFkbWluTGV2ZWxzCisKKwkJLyoqCisJCSAqIEByZXR1cm4gdGhlIG51bWJlciBvZiBhZG1pbmlzdHJhdGlvbiBsZXZlbHMgcmVwcmVzZW50ZWQgaW4gdGhlCisJCSAqICAgICAgICAgaWRlbnRpZmlhYmxlLgorCQkgKi8KKwkJcHVibGljIGludCBnZXROdW1BZG1pbkxldmVscygpIHsKKwkJCXJldHVybiBhZG1pbkxldmVscy5zaXplKCk7CisJCX0gLy8gZ2V0TnVtQWRtaW5MZXZlbHMKKworCQkvKioKKwkJICogQHJldHVybiB0aGUgbWF4aW11bSBhZG1pbmlzdHJhdGlvbiBsZXZlbCBpbiB0ZWggZGF0YQorCQkgKi8KKwkJcHVibGljIGZpbmFsIGludCBnZXRNYXhBZG1pbkxldmVsKCkgeworCQkJcmV0dXJuIG1heEFkbWluTGV2ZWw7CisJCX0KKworCQkvKioKKwkJICogU2VyaWFsaXplIGEgbGlzdCBvZiByZWNvcmRzLgorCQkgKiAKKwkJICogQHBhcmFtIHJlY29yZHMKKwkJICogICAgICAgICAgICBhIGxpc3Qgb2YgUmVjb3JkcyB0byBiZSBzZXJpYWxpemVkCisJCSAqIEBwYXJhbSB1cmlQYXRoU3RyaW5nCisJCSAqICAgICAgICAgICAgdGhlIHBhdGggdG8gdGhlIHJvb3QgZGlyZWN0b3J5IHRvIHNlcmlhbGl6ZSB0aGUgZ3JhcGhzIGluCisJCSAqIEB0aHJvd3MgSU9FeGNlcHRpb24KKwkJICovCisJCXB1YmxpYyBzdGF0aWMgdm9pZCBzZXJpYWxpemVSZWNvcmRzKGZpbmFsIExpc3Q8UmVjb3JkPiByZWNvcmRzLAorCQkJCWZpbmFsIFN0cmluZyB1cmlQYXRoU3RyaW5nKSB0aHJvd3MgSU9FeGNlcHRpb24geworCQkJZm9yIChmaW5hbCBSZWNvcmQgcmVjb3JkIDogcmVjb3JkcykgeworCQkJCXJlY29yZC5zZXJpYWxpemUodXJpUGF0aFN0cmluZyk7CisJCQl9IC8vIGZvciBlYWNoIGdyYXBoIHJlY29yZCBmb3IgZWFjaCBjb3VudHJ5CisJCX0gLy8gc2VyaWFsaXplUmVjb3JkcworCisJCS8qKgorCQkgKiBAcGFyYW0gdXJpUGF0aFN0cmluZworCQkgKiAgICAgICAgICAgIHRoZSBwYXRoIHRvIHRoZSByb290IHNlcmlhbGl6YXRpb24gZGlyZWN0b3J5CisJCSAqIEB0aHJvd3MgSU9FeGNlcHRpb24KKwkJICovCisJCXB1YmxpYyB2b2lkIHNlcmlhbGl6ZShmaW5hbCBTdHJpbmcgdXJpUGF0aFN0cmluZykgdGhyb3dzIElPRXhjZXB0aW9uIHsKKwkJCVV0aWxpdHkuc2VyaWFsaXplSWRlbnRpZmlhYmxlKGlkZW50aWZpYWJsZSwgY29udmVydGVyLm5vcm1hbGl6ZShVUkkKKwkJCQkJLmNyZWF0ZUZpbGVVUkkodXJpUGF0aFN0cmluZyArIEZpbGUuc2VwYXJhdG9yICsgaWQKKwkJCQkJCQkrIEZpbGUuc2VwYXJhdG9yICsgZ2V0U2VyaWFsaXphdGlvbkZpbGVOYW1lKCkpKSk7CisJCX0gLy8gc2VyaWFsaXplCisKKwkJLyoqCisJCSAqIEBwYXJhbSBkZWxtaXRlcgorCQkgKiAgICAgICAgICAgIHRoZSBzdHJpbmcgdG8gcGxhY2UgYmV0d2VlbiB0aGUgYWRtaW5pc3RyYXRpb24gbGV2ZWwKKwkJICogICAgICAgICAgICBpbnRlZ2VycworCQkgKiBAcmV0dXJuIHRoZSBhZG1pbmlzdHJhdGlvbiBsZXZlbCBpbnRlZ2VycyBjb25jYXRlbmF0ZWQgdG9nZXRoZXIgd2l0aAorCQkgKiAgICAgICAgIGEgIl8iIGFzIGEgZGVsaW1pdGVyCisJCSAqLworCQlwdWJsaWMgT2JqZWN0IGdldEFkbWluTGV2ZWxzQXNTdHJpbmcoZmluYWwgU3RyaW5nIGRlbG1pdGVyKSB7CisJCQlmaW5hbCBTdHJpbmdCdWlsZGVyIHNiID0gbmV3IFN0cmluZ0J1aWxkZXIoKTsKKwkJCWZvciAoaW50IGkgPSAwOyBpIDwgYWRtaW5MZXZlbHMuc2l6ZSgpOyBpKyspIHsKKwkJCQkvLyBJcyB0aGlzIHRoZSBmaXJzdCBvbmU/CisJCQkJaWYgKGkgIT0gMCkgeworCQkJCQkvLyBObworCQkJCQlzYi5hcHBlbmQoZGVsbWl0ZXIpOworCQkJCX0KKwkJCQlzYi5hcHBlbmQoYWRtaW5MZXZlbHMuZ2V0KGkpKTsKKwkJCX0KKwkJCXJldHVybiBzYi50b1N0cmluZygpOworCQl9IC8vIGdldEFkbWluTGV2ZWxzQXNTdHJpbmcKKworCQkvKioKKwkJICogQHJldHVybiBhIHN0cmluZyB0aGF0IHNwZWNpZmllcyB0aGUgdHlwZSBvZiBSZWNvcmQgKGUuZy4sICJub2RlIiwKKwkJICogICAgICAgICAibW9kZWwiKQorCQkgKi8KKwkJYWJzdHJhY3QgcHVibGljIFN0cmluZyBnZXRUeXBlKCk7CisKKwkJLyoqCisJCSAqIEByZXR1cm4gdGhlIHNlcmlhbGl6YXRpb24gZmlsZSBuYW1lCisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS5ncmFwaC5Db3VudHJ5R3JhcGhDcmVhdG9yLlJlY29yZCNnZXRTZXJpYWxpemF0aW9uRmlsZU5hbWUoKQorCQkgKi8KKwkJcHVibGljIFN0cmluZyBnZXRTZXJpYWxpemF0aW9uRmlsZU5hbWUoKSB7CisJCQlmaW5hbCBTdHJpbmdCdWlsZGVyIHNiID0gbmV3IFN0cmluZ0J1aWxkZXIoZ2V0SWQoKSk7CisJCQlzYi5hcHBlbmQoIl8iKTsKKwkJCXNiLmFwcGVuZChnZXRBZG1pbkxldmVsc0FzU3RyaW5nKCJfIikpOworCQkJc2IuYXBwZW5kKCIuIik7CisJCQlzYi5hcHBlbmQoZ2V0T3V0cHV0VHlwZSgpKTsKKwkJCXJldHVybiBzYi50b1N0cmluZygpOworCQl9IC8vIGdldFNlcmlhbGl6YXRpb25GaWxlTmFtZQorCX0gLy8gUmVjb3JkCisKKwkvKioKKwkgKiBUaGlzIGNsYXNzIHJlcHJlc2VudHMKKwkgKi8KKwlhYnN0cmFjdCBwdWJsaWMgc3RhdGljIGNsYXNzIEdyYXBoUmVjb3JkIGV4dGVuZHMgUmVjb3JkIHsKKworCQkvKioKKwkJICogVGhpcyBpcyB0aGUgcHJvcGVydHkgaW4gYSBkYXRhIGZpbGUgdGhhdCBzcGVjaWZpZXMgdGhlIGRhdGUgcmFuZ2UKKwkJICogdGhhdCB0aGUgZGF0YSBpcyB2YWxpZCBmb3IuCisJCSAqLworCQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBWQUxJRF9QUk9QRVJUWSA9ICJWQUxJRCI7CisKKwkJLyoqCisJCSAqIFRoaXMgaXMgdGhlIHByb3BlcnR5IGluIGEgZGF0YSBmaWxlIHRoYXQgc3BlY2lmaWVzIHRoZSBhZG1pbmlzdHJhdGlvbgorCQkgKiBsZXZlbCB0aGUgZGF0YSBhcHBsaWVzIHRvLgorCQkgKi8KKwkJcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgQURNSU5fTEVWRUxfUFJPUEVSVFkgPSAiQURNSU5fTEVWRUwiOworCisJCS8qKgorCQkgKiBUaGlzIGlzIHRoZSBwcm9wZXJ0eSBpbiBhIGRhdGEgZmlsZSB0aGF0IHNwZWNpZmllcyB0aGUgc291cmNlIG9mIHRoZQorCQkgKiBkYXRhLgorCQkgKi8KKwkJcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgU09VUkNFX1BST1BFUlRZID0gIlNPVVJDRSI7CisKKwkJcHJvdGVjdGVkIE1hcDxTdHJpbmcsIFN0cmluZz4gbm9uRGF0YVByb3BlcnRpZXMgPSBuZXcgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4oKTsKKworCQkvKioKKwkJICogVGhlIGZpbGUgbmFtZSBvZiB0aGUgcHJvcGVydGllcyBmaWxlICg/KQorCQkgKi8KKwkJcHJvdGVjdGVkIFN0cmluZyBmaWxlTmFtZSA9IG51bGw7CisKKwkJLyoqCisJCSAqIFRoZSBkdWJsaW4gY29yZSBzb3VyY2Ugb2YgdGhlIGRhdGEgdGhhdCBjcmVhdGVkIHRoZSBncmFwaAorCQkgKi8KKwkJcHJvdGVjdGVkIFN0cmluZyBzb3VyY2UgPSBudWxsOworCisJCXByb3RlY3RlZCBpbnQgeWVhciA9IC0xOworCisJCXByb3RlY3RlZCBHcmFwaFJlY29yZCgpIHsKKwkJCS8vIG5vdGhpbmcKKwkJfSAvLyBHcmFwaFJlY29yZAorCisJCS8qKgorCQkgKiBAcGFyYW0gZ3JhcGgKKwkJICogQHBhcmFtIGFkbWluTGV2ZWwKKwkJICogQHBhcmFtIHllYXIKKwkJICovCisJCXByb3RlY3RlZCBHcmFwaFJlY29yZChmaW5hbCBDb3VudHJ5Q29kZSBjb3VudHJ5Q29kZSwKKwkJCQlmaW5hbCBTdHJpbmcgZmlsZU5hbWUsIGZpbmFsIEdyYXBoIGdyYXBoLCBmaW5hbCBTdHJpbmcgc291cmNlLAorCQkJCWZpbmFsIGludCBhZG1pbkxldmVsLCBmaW5hbCBpbnQgeWVhcikgeworCQkJc3VwZXIoZ3JhcGgsIGNvdW50cnlDb2RlLnRvU3RyaW5nKCksIGFkbWluTGV2ZWwpOworCQkJdGhpcy5maWxlTmFtZSA9IGZpbGVOYW1lOworCQkJdGhpcy5zb3VyY2UgPSBzb3VyY2U7CisJCQl0aGlzLnllYXIgPSB5ZWFyOworCQl9IC8vIEdyYXBoUmVjb3JkCisKKwkJLyoqCisJCSAqIEByZXR1cm4gdGhlIGZpbGUgbmFtZQorCQkgKi8KKwkJcHVibGljIGZpbmFsIFN0cmluZyBnZXRGaWxlTmFtZSgpIHsKKwkJCXJldHVybiBmaWxlTmFtZTsKKwkJfQorCisJCS8qKgorCQkgKiBAcmV0dXJuIHRoZSBncmFwaAorCQkgKi8KKwkJcHVibGljIGZpbmFsIEdyYXBoIGdldEdyYXBoKCkgeworCQkJcmV0dXJuIChHcmFwaCkgaWRlbnRpZmlhYmxlOworCQl9IC8vIGdldEdyYXBoCisKKwkJLyoqCisJCSAqIEByZXR1cm4gdGhlIHllYXIKKwkJICovCisJCXB1YmxpYyBmaW5hbCBpbnQgZ2V0WWVhcigpIHsKKwkJCXJldHVybiB5ZWFyOworCQl9CisKKwkJcHJvdGVjdGVkIHZvaWQgaW5pdGlhbGl6ZShmaW5hbCBDb3VudHJ5Q29kZSBjb3VudHJ5Q29kZSwKKwkJCQlmaW5hbCBTdHJpbmcgZGF0YUZpbGVVUklQcmVmaXgsIGZpbmFsIEZpbGUgZGF0YUZpbGUpIHsKKworCQkJdGhpcy5pZCA9IGNvdW50cnlDb2RlLnRvU3RyaW5nKCk7CisKKwkJCWZpbGVOYW1lID0gZGF0YUZpbGUuZ2V0TmFtZSgpLnN1YnN0cmluZygwLAorCQkJCQlkYXRhRmlsZS5nZXROYW1lKCkuaW5kZXhPZigiLnByb3BlcnRpZXMiKSk7CisKKwkJCWlmIChkYXRhRmlsZS5pc0ZpbGUoKSAmJiBkYXRhRmlsZS5jYW5SZWFkKCkpIHsKKwkJCQlmaW5hbCBQcm9wZXJ0aWVzIGRhdGFQcm9wZXJ0aWVzID0gbmV3IFByb3BlcnRpZXMoKTsKKwkJCQl0cnkgeworCQkJCQlmaW5hbCBGaWxlSW5wdXRTdHJlYW0gZGF0YUZpbGVJbnB1dFN0cmVhbSA9IG5ldyBGaWxlSW5wdXRTdHJlYW0oCisJCQkJCQkJZGF0YUZpbGUpOworCQkJCQlkYXRhUHJvcGVydGllcy5sb2FkKGRhdGFGaWxlSW5wdXRTdHJlYW0pOworCisJCQkJCWNvbGxlY3ROb25EYXRhUHJvcGVydGllcyhkYXRhUHJvcGVydGllcyk7CisKKwkJCQkJLy8gQXJlIGFsbCBvZiB0aGUgcmVxdWlyZWQgcHJvcGVydGllcyBpbiB0aGUgZmlsZT8KKwkJCQkJaWYgKGFsbE5vbkRhdGFQcm9wZXJ0aWVzQ29sbGVjdGVkKCkpIHsKKwkJCQkJCS8vIFllcworCQkJCQkJc2V0RmllbGRzRnJvbU5vbkRhdGFQcm9wZXJ0aWVzKCk7CisKKwkJCQkJCWZpbmFsIExpc3Q8Q291bnRyeURhdGE+IGRhdGFTZXQgPSBuZXcgQXJyYXlMaXN0PENvdW50cnlEYXRhPigpOworCisJCQkJCQlmb3IgKGZpbmFsIEVudHJ5PE9iamVjdCwgT2JqZWN0PiBlbnRyeSA6IGRhdGFQcm9wZXJ0aWVzCisJCQkJCQkJCS5lbnRyeVNldCgpKSB7CisJCQkJCQkJZmluYWwgU3RyaW5nIGRhdGFQcm9wZXJ0eUtleSA9IChTdHJpbmcpIGVudHJ5CisJCQkJCQkJCQkuZ2V0S2V5KCk7CisKKwkJCQkJCQkvLyBJcyB0aGlzIGEgZGF0YSBwcm9wZXJ0eT8KKwkJCQkJCQlpZiAoaXNEYXRhUHJvcGVydHkoZGF0YVByb3BlcnR5S2V5KSkgeworCQkJCQkJCQkvLyBZZXMKKwkJCQkJCQkJZmluYWwgQ291bnRyeURhdGEgZGF0YSA9IGNyZWF0ZURhdGEoCisJCQkJCQkJCQkJZGF0YVByb3BlcnR5S2V5LCAoKFN0cmluZykgZW50cnkKKwkJCQkJCQkJCQkJCS5nZXRWYWx1ZSgpKS50cmltKCkpOworCQkJCQkJCQlkYXRhU2V0LmFkZChkYXRhKTsKKwkJCQkJCQl9IC8vIGlmIGRhdGEgcHJvcGVydHkKKworCQkJCQkJfSAvLyBmb3IKKwkJCQkJCWlkZW50aWZpYWJsZSA9IGNyZWF0ZUdyYXBoKGNvdW50cnlDb2RlLCBkYXRhU2V0KTsKKwkJCQkJCWlkZW50aWZpYWJsZS5zZXRVUkkoVVJJLmNyZWF0ZVVSSShNZXNzYWdlRm9ybWF0LmZvcm1hdCgKKwkJCQkJCQkJSURFTlRJRklFUl9GT1JNQVQsIGRhdGFGaWxlVVJJUHJlZml4LAorCQkJCQkJCQljb3VudHJ5Q29kZSwgZmlsZU5hbWUsICJncmFwaCIpKSk7CisJCQkJCQlpZGVudGlmaWFibGUuZ2V0RHVibGluQ29yZSgpLnNldFRpdGxlKGdldEZpbGVOYW1lKCkpOworCQkJCQkJLy8gaWRlbnRpZmlhYmxlLmdldER1YmxpbkNvcmUoKS5zZXRJZGVudGlmaWVyKAorCQkJCQkJLy8gTWVzc2FnZUZvcm1hdC5mb3JtYXQoSURFTlRJRklFUl9GT1JNQVQsCisJCQkJCQkvLyBkYXRhRmlsZVVSSVByZWZpeCwgY291bnRyeUNvZGUsCisJCQkJCQkvLyBmaWxlTmFtZSwgImdyYXBoIikpOworCisJCQkJCX0gLy8gaWYgYWxsIHByb3BlcnRpZXMgYXJlIHByZXNlbnQKKwkJCQkJZWxzZSB7CisJCQkJCQkvLyBObworCQkJCQkJU3lzdGVtLmVyci5wcmludGxuKCJUaGUgZmlsZSBcIiIgKyBkYXRhRmlsZS5nZXROYW1lKCkKKwkJCQkJCQkJKyAiXCIgaXMgbWlzc2luZyB0aGUgZm9sbG93aW5nIHByb3Blcml0ZXM6ICIKKwkJCQkJCQkJKyBnZXRNaXNzaW5nTm9uRGF0YVByb3BlcnRpZXMoKSk7CisJCQkJCX0gLy8gZWxzZQorCQkJCQlkYXRhRmlsZUlucHV0U3RyZWFtLmNsb3NlKCk7CisJCQkJfSBjYXRjaCAoZmluYWwgRmlsZU5vdEZvdW5kRXhjZXB0aW9uIGUpIHsKKwkJCQkJU3lzdGVtLmVyci5wcmludGxuKGUuZ2V0TWVzc2FnZSgpKTsKKwkJCQl9IGNhdGNoIChmaW5hbCBJT0V4Y2VwdGlvbiBlKSB7CisJCQkJCVN5c3RlbS5lcnIucHJpbnRsbihlLmdldE1lc3NhZ2UoKSk7CisJCQkJfQorCQkJfSBlbHNlIHsKKwkJCQlTeXN0ZW0uZXJyLnByaW50bG4oIlRyb3VibGUgcmVhZGluZyBcIiIgKyBkYXRhRmlsZSArICJcIiIpOworCQkJfQorCQl9Ly8gaW5pdGlhbGl6ZQorCisJCS8qKgorCQkgKiBAcGFyYW0gZGF0YVByb3BlcnR5S2V5CisJCSAqIEBwYXJhbSBkYXRhUHJvcGVydHkKKwkJICovCisJCWFic3RyYWN0IHByb3RlY3RlZCBDb3VudHJ5RGF0YSBjcmVhdGVEYXRhKFN0cmluZyBkYXRhUHJvcGVydHlLZXksCisJCQkJU3RyaW5nIGRhdGFQcm9wZXJ0eSk7CisKKwkJLyoqCisJCSAqIEBwYXJhbSBjb3VudHJ5Q29kZTIKKwkJICogQHBhcmFtIGRhdGFTZXQKKwkJICovCisJCWFic3RyYWN0IHByb3RlY3RlZCBHcmFwaCBjcmVhdGVHcmFwaChDb3VudHJ5Q29kZSBjb3VudHJ5Q29kZTIsCisJCQkJTGlzdDxDb3VudHJ5RGF0YT4gZGF0YVNldCk7CisKKwkJLyoqCisJCSAqIEBwYXJhbSBkYXRhUHJvcGVydGllcworCQkgKi8KKwkJcHJvdGVjdGVkIHZvaWQgY29sbGVjdE5vbkRhdGFQcm9wZXJ0aWVzKGZpbmFsIFByb3BlcnRpZXMgZGF0YVByb3BlcnRpZXMpIHsKKwkJCS8vIEdldCB0aGUgc291cmNlCisJCQlmaW5hbCBTdHJpbmcgc291cmNlID0gZGF0YVByb3BlcnRpZXMuZ2V0UHJvcGVydHkoU09VUkNFX1BST1BFUlRZKTsKKwkJCWlmIChzb3VyY2UgIT0gbnVsbCkgeworCQkJCW5vbkRhdGFQcm9wZXJ0aWVzLnB1dChTT1VSQ0VfUFJPUEVSVFksIHNvdXJjZSk7CisJCQl9CisKKwkJCS8vIEdldCB0aGUgdmFsaWQgZGF0ZSByYW5nZQorCQkJZmluYWwgU3RyaW5nIHZhbGlkID0gZGF0YVByb3BlcnRpZXMuZ2V0UHJvcGVydHkoVkFMSURfUFJPUEVSVFkpOworCQkJaWYgKHZhbGlkICE9IG51bGwpIHsKKwkJCQlub25EYXRhUHJvcGVydGllcy5wdXQoVkFMSURfUFJPUEVSVFksIHZhbGlkKTsKKwkJCX0KKworCQkJLy8gR2V0IHRoZSBhZG1pbiBsZXZlbAorCQkJZmluYWwgU3RyaW5nIGFkbWluTGV2ZWwgPSBkYXRhUHJvcGVydGllcworCQkJCQkuZ2V0UHJvcGVydHkoQURNSU5fTEVWRUxfUFJPUEVSVFkpOworCQkJaWYgKGFkbWluTGV2ZWwgIT0gbnVsbCkgeworCQkJCW5vbkRhdGFQcm9wZXJ0aWVzLnB1dChBRE1JTl9MRVZFTF9QUk9QRVJUWSwgYWRtaW5MZXZlbCk7CisJCQl9CisKKwkJfSAvLyBjb2xsZWN0Tm9uRGF0YVByb3BlcnRpZXMKKworCQkvKioKKwkJICogQHJldHVybiB0cnVlIGlmIHRoZSBwcm9wZXJ0eSBpcyBhIGRhdGEgcHJvcGVydHkKKwkJICovCisJCXByb3RlY3RlZCBib29sZWFuIGlzRGF0YVByb3BlcnR5KGZpbmFsIFN0cmluZyBwcm9wZXJ0eSkgeworCQkJcmV0dXJuICEocHJvcGVydHkuZXF1YWxzKFZBTElEX1BST1BFUlRZKQorCQkJCQl8fCBwcm9wZXJ0eS5lcXVhbHMoQURNSU5fTEVWRUxfUFJPUEVSVFkpIHx8IHByb3BlcnR5CisJCQkJCS5lcXVhbHMoU09VUkNFX1BST1BFUlRZKSk7CisJCX0gLy8gaXNEYXRhUHJvcGVydHkKKworCQkvKioKKwkJICogQHJldHVybiB0cnVlIGlmIGFsbCBvZiB0aGUgbm9uLWRhdGEgcHJvcGVydGllcyBoYXZlIGJlZW4gY29sbGVjdGVkCisJCSAqLworCQlwcm90ZWN0ZWQgYm9vbGVhbiBhbGxOb25EYXRhUHJvcGVydGllc0NvbGxlY3RlZCgpIHsKKwkJCXJldHVybiBub25EYXRhUHJvcGVydGllcy5nZXQoU09VUkNFX1BST1BFUlRZKSAhPSBudWxsCisJCQkJCSYmIG5vbkRhdGFQcm9wZXJ0aWVzLmdldChBRE1JTl9MRVZFTF9QUk9QRVJUWSkgIT0gbnVsbAorCQkJCQkmJiBub25EYXRhUHJvcGVydGllcy5nZXQoVkFMSURfUFJPUEVSVFkpICE9IG51bGw7CisJCX0gLy8gYWxsRGF0YVByb3BlcnRpZXNDb2xsZWN0ZWQKKworCQkvKioKKwkJICogQHJldHVybiBhIHN0cmluZyB3aXRoIHRoZSBuYW1lcyBvZiB0aGUgcHJvcGVydGllcyBtaXNzaW5nIGZyb20gdGhlCisJCSAqICAgICAgICAgbm9uIGRhdGEgcHJvcGVydGllcworCQkgKi8KKwkJcHJvdGVjdGVkIENoYXJTZXF1ZW5jZSBnZXRNaXNzaW5nTm9uRGF0YVByb3BlcnRpZXMoKSB7CisJCQlmaW5hbCBTdHJpbmdCdWlsZGVyIHNiID0gbmV3IFN0cmluZ0J1aWxkZXIoKTsKKworCQkJc2IKKwkJCQkJLmFwcGVuZChub25EYXRhUHJvcGVydGllcy5nZXQoU09VUkNFX1BST1BFUlRZKSA9PSBudWxsID8gKFNPVVJDRV9QUk9QRVJUWSArICIgIikKKwkJCQkJCQk6ICIiKTsKKwkJCXNiCisJCQkJCS5hcHBlbmQobm9uRGF0YVByb3BlcnRpZXMuZ2V0KEFETUlOX0xFVkVMX1BST1BFUlRZKSA9PSBudWxsID8gKEFETUlOX0xFVkVMX1BST1BFUlRZICsgIiAiKQorCQkJCQkJCTogIiIpOworCQkJc2IKKwkJCQkJLmFwcGVuZChub25EYXRhUHJvcGVydGllcy5nZXQoVkFMSURfUFJPUEVSVFkpID09IG51bGwgPyAoVkFMSURfUFJPUEVSVFkgKyAiICIpCisJCQkJCQkJOiAiIik7CisJCQlyZXR1cm4gc2IudG9TdHJpbmcoKTsKKwkJfSAvLyBnZXRNaXNzaW5nTm9uRGF0YVByb3BlcnRpZXMKKworCQkvKioKKwkJICogCisJCSAqLworCQlwcm90ZWN0ZWQgdm9pZCBzZXRGaWVsZHNGcm9tTm9uRGF0YVByb3BlcnRpZXMoKSB7CisJCQlzb3VyY2UgPSBub25EYXRhUHJvcGVydGllcy5nZXQoU09VUkNFX1BST1BFUlRZKTsKKwkJCWFkZEFkbWluTGV2ZWwoSW50ZWdlci5wYXJzZUludChub25EYXRhUHJvcGVydGllcworCQkJCQkuZ2V0KEFETUlOX0xFVkVMX1BST1BFUlRZKSkpOworCQkJeWVhciA9IGV4dHJhY3RZZWFyKG5vbkRhdGFQcm9wZXJ0aWVzLmdldChWQUxJRF9QUk9QRVJUWSkpOworCQl9IC8vIHNldEZpZWxkc0Zyb21Ob25EYXRhUHJvcGVydGllcworCisJCS8qKgorCQkgKiBAcGFyYW0gdmFsaWRTdHJpbmcKKwkJICogQHJldHVybiB0aGUgeWVhciBvZiB0aGUgc3RhcnQgZGF0ZQorCQkgKi8KKwkJcHJpdmF0ZSBpbnQgZXh0cmFjdFllYXIoZmluYWwgU3RyaW5nIHZhbGlkU3RyaW5nKSB7CisJCQkvLyBTdHJpbmcgaXMgb2YgZm9ybWF0IHN0YXJ0PTIwMDYtLi4uLiB3ZSB3YW50IHRoZSAyMDA2CisJCQlyZXR1cm4gSW50ZWdlci5wYXJzZUludCh2YWxpZFN0cmluZy5zdWJzdHJpbmcoNiwgMTApKTsKKwkJfSAvLyBleHRyYWN0WWVhcgorCisJCS8qKgorCQkgKiBAcmV0dXJuIHRoZSBhZG1pbmlzdHJhdGlvbiBsZXZlbCBvZiB0aGUgZ3JhcGgKKwkJICovCisJCXB1YmxpYyBpbnQgZ2V0QWRtaW5MZXZlbCgpIHsKKwkJCWFzc2VydCBhZG1pbkxldmVscy5zaXplKCkgPT0gMTsKKwkJCXJldHVybiBhZG1pbkxldmVscy5nZXQoMCkuaW50VmFsdWUoKTsKKwkJfSAvLyBnZXRBZG1pbkxldmVsCisKKwkJLyoqCisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS5ncmFwaC5Db3VudHJ5R3JhcGhDcmVhdG9yLlJlY29yZCNnZXRTZXJpYWxpemF0aW9uRmlsZU5hbWUoKQorCQkgKi8KKwkJQE92ZXJyaWRlCisJCXB1YmxpYyBTdHJpbmcgZ2V0U2VyaWFsaXphdGlvbkZpbGVOYW1lKCkgeworCQkJZmluYWwgU3RyaW5nQnVpbGRlciBzYiA9IG5ldyBTdHJpbmdCdWlsZGVyKGZpbGVOYW1lKTsKKwkJCXNiLmFwcGVuZCgiLiIpOworCQkJc2IuYXBwZW5kKGdldE91dHB1dFR5cGUoKSk7CisJCQlyZXR1cm4gc2IudG9TdHJpbmcoKTsKKwkJfSAvLyBnZXRTZXJpYWxpemF0aW9uRmlsZU5hbWUKKworCQkvKioKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5LmdyYXBoLkNvdW50cnlHcmFwaENyZWF0b3IuUmVjb3JkI2dldFR5cGUoKQorCQkgKi8KKwkJQE92ZXJyaWRlCisJCXB1YmxpYyBTdHJpbmcgZ2V0VHlwZSgpIHsKKwkJCXJldHVybiBnZXRHcmFwaFR5cGUoKTsKKwkJfQorCisJCS8qKgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkuZ3JhcGguQ291bnRyeUdyYXBoQ3JlYXRvci5SZWNvcmQjZ2V0T3V0cHV0VHlwZSgpCisJCSAqLworCQlAT3ZlcnJpZGUKKwkJcHVibGljIFN0cmluZyBnZXRPdXRwdXRUeXBlKCkgeworCQkJcmV0dXJuICJncmFwaCI7CisJCX0KKworCQkvKioKKwkJICogQHJldHVybiBhIHN0cmluZyB0aGF0IGlzIHRoZSBuYW1lIG9mIHRoZSBncmFwaCB0eXBlCisJCSAqLworCQlwdWJsaWMgYWJzdHJhY3QgU3RyaW5nIGdldEdyYXBoVHlwZSgpOworCisJfSAvLyBHcmFwaFJlY29yZAorCisJLyoqCisJICogVGhpcyBjbGFzcyBidW5kbGVzIGEgZ3JhcGggb2YgZ2VvZ3JhcGhpYyBub2Rlcy4KKwkgKi8KKwlwcml2YXRlIHN0YXRpYyBjbGFzcyBOb2RlR3JhcGhSZWNvcmQgZXh0ZW5kcyBHcmFwaFJlY29yZCB7CisKKwkJLyoqCisJCSAqIFRoaXMgaXMgdGhlIHByb3BlcnR5IGluIGEgc3BhdGlhbCAoR01MKSBkYXRhIGZpbGUgdGhhdCBzcGVjaWZpZXMgdGhlCisJCSAqIGZpbGUgdGhhdCBjb250YWlucyB0aGUgbGF0aXR1ZGUvbG9uZ2l0dWRlIGRhdGEgZm9yIHRoZSBub2Rlcy4KKwkJICovCisJCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFNQQVRJQUxfUFJPUEVSVFkgPSAiU1BBVElBTF9VUkkiOworCisJCXByb3RlY3RlZCBTdHJpbmcgc3BhdGlhbFVSSSA9IG51bGw7CisKKwkJLyoqCisJCSAqIAorCQkgKi8KKwkJcHVibGljIE5vZGVHcmFwaFJlY29yZCgpIHsKKwkJCXN1cGVyKCk7CisJCX0gLy8gTm9kZUdyYXBoUmVjb3JkCisKKwkJLyoqCisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5Lmdlb2dyYXBoeS5ncmFwaC5Db3VudHJ5R3JhcGhDcmVhdG9yMi5HcmFwaFJlY29yZCNjcmVhdGVEYXRhKGphdmEubGFuZy5TdHJpbmcsCisJCSAqICAgICAgamF2YS5sYW5nLlN0cmluZykKKwkJICovCisJCUBPdmVycmlkZQorCQlwcm90ZWN0ZWQgQ291bnRyeURhdGEgY3JlYXRlRGF0YShmaW5hbCBTdHJpbmcgZGF0YVByb3BlcnR5S2V5LAorCQkJCWZpbmFsIFN0cmluZyBkYXRhUHJvcGVydHkpIHsKKwkJCXJldHVybiBuZXcgTm9kZURhdGEoZGF0YVByb3BlcnR5S2V5LCBkYXRhUHJvcGVydHkpOworCQl9IC8vIGNyZWF0ZURhdGEKKworCQkvKioKKwkJICogQHBhcmFtIGRhdGFQcm9wZXJ0aWVzCisJCSAqLworCQlAT3ZlcnJpZGUKKwkJcHJvdGVjdGVkIHZvaWQgY29sbGVjdE5vbkRhdGFQcm9wZXJ0aWVzKGZpbmFsIFByb3BlcnRpZXMgZGF0YVByb3BlcnRpZXMpIHsKKwkJCXN1cGVyLmNvbGxlY3ROb25EYXRhUHJvcGVydGllcyhkYXRhUHJvcGVydGllcyk7CisKKwkJCS8vIEdldCB0aGUgcG9wdWxhdGlvbiBsZXZlbCBkYXRlcworCQkJc3BhdGlhbFVSSSA9IGRhdGFQcm9wZXJ0aWVzLmdldFByb3BlcnR5KFNQQVRJQUxfUFJPUEVSVFkpOworCQkJaWYgKHNwYXRpYWxVUkkgIT0gbnVsbCkgeworCQkJCW5vbkRhdGFQcm9wZXJ0aWVzLnB1dChTUEFUSUFMX1BST1BFUlRZLCBzcGF0aWFsVVJJKTsKKwkJCX0KKwkJfSAvLyBjb2xsZWN0Tm9uRGF0YVByb3BlcnRpZXMKKworCQkvKioKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5LmdyYXBoLkNvdW50cnlHcmFwaENyZWF0b3IuR3JhcGhSZWNvcmQjaXNEYXRhUHJvcGVydHkoamF2YS5sYW5nLlN0cmluZykKKwkJICovCisJCUBPdmVycmlkZQorCQlwcm90ZWN0ZWQgYm9vbGVhbiBpc0RhdGFQcm9wZXJ0eShmaW5hbCBTdHJpbmcgcHJvcGVydHkpIHsKKwkJCXJldHVybiAoIXByb3BlcnR5LmVxdWFscyhTUEFUSUFMX1BST1BFUlRZKSkKKwkJCQkJJiYgc3VwZXIuaXNEYXRhUHJvcGVydHkocHJvcGVydHkpOworCQl9IC8vIGlzRGF0YVByb3BlcnR5CisKKwkJQE92ZXJyaWRlCisJCXByb3RlY3RlZCBib29sZWFuIGFsbE5vbkRhdGFQcm9wZXJ0aWVzQ29sbGVjdGVkKCkgeworCQkJLy8gcmV0dXJuIG5vbkRhdGFQcm9wZXJ0aWVzLmdldChTUEFUSUFMX1BST1BFUlRZKSAhPSBudWxsCisJCQkvLyAmJiBzdXBlci5hbGxOb25EYXRhUHJvcGVydGllc0NvbGxlY3RlZCgpOworCQkJcmV0dXJuIHN1cGVyLmFsbE5vbkRhdGFQcm9wZXJ0aWVzQ29sbGVjdGVkKCk7CisJCX0gLy8gYWxsRGF0YVByb3BlcnRpZXNDb2xsZWN0ZWQKKworCQkvKioKKwkJICovCisJCUBPdmVycmlkZQorCQlwcm90ZWN0ZWQgU3RyaW5nIGdldE1pc3NpbmdOb25EYXRhUHJvcGVydGllcygpIHsKKwkJCWZpbmFsIFN0cmluZ0J1aWxkZXIgc2IgPSBuZXcgU3RyaW5nQnVpbGRlcihzdXBlcgorCQkJCQkuZ2V0TWlzc2luZ05vbkRhdGFQcm9wZXJ0aWVzKCkpOworCQkJc2IKKwkJCQkJLmFwcGVuZChub25EYXRhUHJvcGVydGllcy5nZXQoU1BBVElBTF9QUk9QRVJUWSkgPT0gbnVsbCA/IChTUEFUSUFMX1BST1BFUlRZICsgIiAiKQorCQkJCQkJCTogIiIpOworCQkJcmV0dXJuIHNiLnRvU3RyaW5nKCk7CisJCX0gLy8gZ2V0TWlzc2luZ05vbkRhdGFQcm9wZXJ0aWVzCisKKwkJLyoqCisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5Lmdlb2dyYXBoeS5ncmFwaC5Db3VudHJ5R3JhcGhDcmVhdG9yMi5HcmFwaFJlY29yZCNjcmVhdGVHcmFwaChvcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5LmdyYXBoLkNvdW50cnlEaXJlY3RvcnlVdGlsaXRpZXMuQ291bnRyeUNvZGUsCisJCSAqICAgICAgamF2YS51dGlsLkxpc3QpCisJCSAqLworCQlAT3ZlcnJpZGUKKwkJcHJvdGVjdGVkIEdyYXBoIGNyZWF0ZUdyYXBoKGZpbmFsIENvdW50cnlDb2RlIGNvdW50cnlDb2RlLAorCQkJCWZpbmFsIExpc3Q8Q291bnRyeURhdGE+IGRhdGFTZXQpIHsKKwkJCUdyYXBoIHJldFZhbHVlID0gbnVsbDsKKworCQkJLy8gV2FzIHRoZXJlIGFueSBkYXRhIGZvciB0aGlzIGNvdW50cnkgYXQgdGhpcyBhZG1pbmlzdHJhdGlvbiBsZXZlbD8KKwkJCWlmIChkYXRhU2V0LnNpemUoKSA+IDApIHsKKwkJCQkvLyBZZXMKKwkJCQlmaW5hbCBTdHJpbmcgYWRtaW5MZXZlbCA9IG5vbkRhdGFQcm9wZXJ0aWVzCisJCQkJCQkuZ2V0KEFETUlOX0xFVkVMX1BST1BFUlRZKTsKKworCQkJCXJldFZhbHVlID0gR3JhcGhGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVHcmFwaCgpOworCQkJCWZpbmFsIER1YmxpbkNvcmUgZGMgPSByZXRWYWx1ZS5nZXREdWJsaW5Db3JlKCk7CisJCQkJZGMucG9wdWxhdGUoKTsKKwkJCQlkYy5zZXRUaXRsZShDb3VudHJ5RGlyZWN0b3J5VXRpbGl0aWVzCisJCQkJCQkuZ2V0Q291bnRyeU5hbWUoY291bnRyeUNvZGUpCisJCQkJCQkrICIgTm9kZXMgKExldmVsICIKKwkJCQkJCSsgYWRtaW5MZXZlbAorCQkJCQkJKyAiLCAiCisJCQkJCQkrIG5vbkRhdGFQcm9wZXJ0aWVzLmdldChWQUxJRF9QUk9QRVJUWSkKKwkJCQkJCSsgIiwgIgorCQkJCQkJKyBkYXRhU2V0LnNpemUoKQorCQkJCQkJKyAoZGF0YVNldC5zaXplKCkgPT0gMSA/ICIgbm9kZSkiIDogIiBub2RlcykiKSk7CisJCQkJZGMuc2V0U291cmNlKG5vbkRhdGFQcm9wZXJ0aWVzLmdldChTT1VSQ0VfUFJPUEVSVFkpKTsKKwkJCQlkYy5zZXRWYWxpZChub25EYXRhUHJvcGVydGllcy5nZXQoVkFMSURfUFJPUEVSVFkpKTsKKworCQkJCWZvciAoZmluYWwgQ291bnRyeURhdGEgbm9kZURhdGEgOiBkYXRhU2V0KSB7CisJCQkJCXJldFZhbHVlLnB1dE5vZGUoY3JlYXRlTm9kZShJbnRlZ2VyLnBhcnNlSW50KGFkbWluTGV2ZWwpLAorCQkJCQkJCWNvdW50cnlDb2RlLCBzcGF0aWFsVVJJLCBub2RlRGF0YSkpOworCQkJCX0gLy8gZm9yIGVhY2ggbm9kZSBkYXRhCisKKwkJCX0gLy8gaWYgYW55IGRhdGEKKwkJCXJldHVybiByZXRWYWx1ZTsKKwkJfSAvLyBjcmVhdGVHcmFwaAorCisJCS8qKgorCQkgKiBAcmV0dXJuIGEgbm9kZSB0aGF0IHJlcHJlc2VudHMgYSBnZW9ncmFwaGljIHBsYWNlIHdpdGhpbiB0aGUgY29udGV4dAorCQkgKiAgICAgICAgIG9mIGEgc3BlY2lmaWVkIGNvdW50cnkgYXQgYSBzcGVjaWZpZWQgYWRtaW5pc3RyYXRpb24gbGV2ZWwKKwkJICovCisJCXByaXZhdGUgc3RhdGljIE5vZGUgY3JlYXRlTm9kZShmaW5hbCBpbnQgYWRtaW5MZXZlbCwKKwkJCQlmaW5hbCBDb3VudHJ5Q29kZSBjb3VudHJ5Q29kZSwgZmluYWwgU3RyaW5nIHNwYXRpYWxGaWxlVVJJLAorCQkJCWZpbmFsIENvdW50cnlEYXRhIGNvdW50cnlEYXRhKSB7CisJCQlmaW5hbCBOb2RlRGF0YSBub2RlRGF0YSA9IChOb2RlRGF0YSkgY291bnRyeURhdGE7CisJCQlmaW5hbCBSZWdpb24gcmV0VmFsdWUgPSBOb2Rlc0ZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZVJlZ2lvbigpOworCQkJcmV0VmFsdWUuc2V0VVJJKFJlZ2lvbkltcGwuY3JlYXRlUmVnaW9uTm9kZVVSSShub2RlRGF0YQorCQkJCQkuZ2V0SWRlbnRpZmllcigpKSk7CisJCQlyZXRWYWx1ZS5nZXREdWJsaW5Db3JlKCkuc2V0VGl0bGUoCisJCQkJCW5vZGVEYXRhLmdldE5hbWUoKSArICIgIiArIG5vZGVEYXRhLmdldElkZW50aWZpZXIoKSk7CisKKwkJCWZpbmFsIFN0cmluZyBkY1NwYXRpYWwgPSAoc3BhdGlhbEZpbGVVUkkgPT0gbnVsbCA/IG51bGwKKwkJCQkJOiBTcGF0aWFsUHJvdmlkZXJBZGFwdGVyLlNURU1fU1BBVElBTF9TQ0hFTUVfUFJFRklYCisJCQkJCQkJKyBzcGF0aWFsRmlsZVVSSSArICIjIiArIG5vZGVEYXRhLmdldElkZW50aWZpZXIoKSk7CisKKwkJCXJldFZhbHVlLmdldER1YmxpbkNvcmUoKS5zZXRTcGF0aWFsKGRjU3BhdGlhbCk7CisKKwkJCXJldHVybiByZXRWYWx1ZTsKKwkJfSAvLyBjcmVhdGVOb2RlCisKKwkJLyoqCisJCSAqIEByZXR1cm4gIm5vZGUiCisJCSAqLworCQlAT3ZlcnJpZGUKKwkJcHVibGljIFN0cmluZyBnZXRHcmFwaFR5cGUoKSB7CisJCQlyZXR1cm4gIm5vZGUiOworCQl9IC8vIGdldEdyYXBoVHlwZQorCisJfSAvLyBOb2RlR3JhcGhSZWNvcmQKKworCS8qKgorCSAqIFRoaXMgY2xhc3MgYnVuZGxlcyBhIGdyYXBoIG9mIGFyZWEgbGFiZWxzIHRvZ2V0aGVyIHdpdGggdGhlIGRldGFpbHMgb2YKKwkgKiB0aGUgbGFiZWxzLgorCSAqLworCXByaXZhdGUgc3RhdGljIGNsYXNzIEFyZWFHcmFwaFJlY29yZCBleHRlbmRzIEdyYXBoUmVjb3JkIHsKKworCQkvKioKKwkJICogCisJCSAqLworCQlwdWJsaWMgQXJlYUdyYXBoUmVjb3JkKCkgeworCQkJc3VwZXIoKTsKKwkJfQorCisJCS8qKgorCQkgKiBAcGFyYW0gY291bnRyeUNvZGUKKwkJICogQHBhcmFtIGZpbGVOYW1lCisJCSAqIEBwYXJhbSBncmFwaAorCQkgKiBAcGFyYW0gc291cmNlCisJCSAqIEBwYXJhbSBhZG1pbkxldmVsCisJCSAqIEBwYXJhbSB5ZWFyCisJCSAqLworCQlwdWJsaWMgQXJlYUdyYXBoUmVjb3JkKGZpbmFsIENvdW50cnlDb2RlIGNvdW50cnlDb2RlLAorCQkJCWZpbmFsIFN0cmluZyBmaWxlTmFtZSwgZmluYWwgR3JhcGggZ3JhcGgsIGZpbmFsIFN0cmluZyBzb3VyY2UsCisJCQkJZmluYWwgaW50IGFkbWluTGV2ZWwsIGZpbmFsIGludCB5ZWFyKSB7CisJCQlzdXBlcihjb3VudHJ5Q29kZSwgZmlsZU5hbWUsIGdyYXBoLCBzb3VyY2UsIGFkbWluTGV2ZWwsIHllYXIpOworCQl9CisKKwkJLyoqCisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5Lmdlb2dyYXBoeS5ncmFwaC5Db3VudHJ5R3JhcGhDcmVhdG9yMi5HcmFwaFJlY29yZCNjcmVhdGVEYXRhKGphdmEubGFuZy5TdHJpbmcsCisJCSAqICAgICAgamF2YS5sYW5nLlN0cmluZykKKwkJICovCisJCUBPdmVycmlkZQorCQlwcm90ZWN0ZWQgQ291bnRyeURhdGEgY3JlYXRlRGF0YShmaW5hbCBTdHJpbmcgZGF0YVByb3BlcnR5S2V5LAorCQkJCWZpbmFsIFN0cmluZyBkYXRhUHJvcGVydHkpIHsKKwkJCXJldHVybiBuZXcgQXJlYURhdGEoZGF0YVByb3BlcnR5S2V5LCBkYXRhUHJvcGVydHkpOworCQl9IC8vIGNyZWF0ZURhdGEKKworCQkvKioKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkuZ2VvZ3JhcGh5LmdyYXBoLkNvdW50cnlHcmFwaENyZWF0b3IyLkdyYXBoUmVjb3JkI2NyZWF0ZUdyYXBoKG9yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkuZ3JhcGguQ291bnRyeURpcmVjdG9yeVV0aWxpdGllcy5Db3VudHJ5Q29kZSwKKwkJICogICAgICBqYXZhLnV0aWwuTGlzdCkKKwkJICovCisJCUBPdmVycmlkZQorCQlwcm90ZWN0ZWQgR3JhcGggY3JlYXRlR3JhcGgoZmluYWwgQ291bnRyeUNvZGUgY291bnRyeUNvZGUsCisJCQkJZmluYWwgTGlzdDxDb3VudHJ5RGF0YT4gZGF0YVNldCkgeworCQkJR3JhcGggcmV0VmFsdWUgPSBudWxsOworCisJCQkvLyBXYXMgdGhlcmUgYW55IGRhdGEgZm9yIHRoaXMgY291bnRyeSBhdCB0aGlzIGFkbWluaXN0cmF0aW9uIGxldmVsPworCQkJaWYgKGRhdGFTZXQuc2l6ZSgpID4gMCkgeworCQkJCS8vIFllcworCQkJCWZpbmFsIFN0cmluZyBhZG1pbkxldmVsID0gbm9uRGF0YVByb3BlcnRpZXMKKwkJCQkJCS5nZXQoQURNSU5fTEVWRUxfUFJPUEVSVFkpOworCisJCQkJcmV0VmFsdWUgPSBHcmFwaEZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZUdyYXBoKCk7CisJCQkJZmluYWwgRHVibGluQ29yZSBkYyA9IHJldFZhbHVlLmdldER1YmxpbkNvcmUoKTsKKwkJCQlkYy5wb3B1bGF0ZSgpOworCQkJCWRjLnNldFRpdGxlKENvdW50cnlEaXJlY3RvcnlVdGlsaXRpZXMKKwkJCQkJCS5nZXRDb3VudHJ5TmFtZShjb3VudHJ5Q29kZSkKKwkJCQkJCSsgIiBBcmVhIChMZXZlbCAiCisJCQkJCQkrIGFkbWluTGV2ZWwKKwkJCQkJCSsgIiwgIgorCQkJCQkJKyBub25EYXRhUHJvcGVydGllcy5nZXQoVkFMSURfUFJPUEVSVFkpCisJCQkJCQkrICIsICIKKwkJCQkJCSsgZGF0YVNldC5zaXplKCkKKwkJCQkJCSsgKGRhdGFTZXQuc2l6ZSgpID09IDEgPyAiIGxhYmVsKSIgOiAiIGxhYmVscykiKSk7CisJCQkJZGMuc2V0U291cmNlKG5vbkRhdGFQcm9wZXJ0aWVzLmdldChTT1VSQ0VfUFJPUEVSVFkpKTsKKwkJCQlkYy5zZXRWYWxpZChub25EYXRhUHJvcGVydGllcy5nZXQoVkFMSURfUFJPUEVSVFkpKTsKKwkJCQlmb3IgKGZpbmFsIENvdW50cnlEYXRhIGRhdGFJbnN0YW5jZSA6IGRhdGFTZXQpIHsKKwkJCQkJcmV0VmFsdWUucHV0Tm9kZUxhYmVsKGNyZWF0ZUFyZWFMYWJlbChJbnRlZ2VyCisJCQkJCQkJLnBhcnNlSW50KGFkbWluTGV2ZWwpLCBjb3VudHJ5Q29kZSwgZGF0YUluc3RhbmNlKSk7CisJCQkJfSAvLyBmb3IgZWFjaCBub2RlIGRhdGEKKworCQkJfSAvLyBpZiBhbnkgZGF0YQorCQkJcmV0dXJuIHJldFZhbHVlOworCQl9IC8vIGNyZWF0ZUdyYXBoCisKKwkJLyoqCisJCSAqIEBwYXJhbSBhZG1pbkxldmVsCisJCSAqICAgICAgICAgICAgdGhlIGxldmVsIG9mIHRoZSBjb3VudHJ5IG5vZGUgdGhlIGFyZWEgbGFiZWwgbGFiZWxzCisJCSAqIEBwYXJhbSBjb3VudHJ5Q29kZQorCQkgKiAgICAgICAgICAgIHRoZSBpZGVudGlmaWVyIG9mIHRoZSBjb3VudHJ5IHRvIHdoaWNoIHRoZSBsYWJlbGVkIG5vZGUKKwkJICogICAgICAgICAgICBiZWxvbmdzCisJCSAqIEBwYXJhbSBhcmVhRGF0YQorCQkgKiAgICAgICAgICAgIHRoZSBhcmVhIGRhdGEKKwkJICogQHJldHVybiBhbiBBcmVhIGxhYmVsCisJCSAqLworCQlwcm90ZWN0ZWQgQXJlYUxhYmVsIGNyZWF0ZUFyZWFMYWJlbChmaW5hbCBpbnQgYWRtaW5MZXZlbCwKKwkJCQlmaW5hbCBDb3VudHJ5Q29kZSBjb3VudHJ5Q29kZSwgZmluYWwgQ291bnRyeURhdGEgY291bnRyeURhdGEpIHsKKwkJCWZpbmFsIEFyZWFEYXRhIGFyZWFEYXRhID0gKEFyZWFEYXRhKSBjb3VudHJ5RGF0YTsKKwkJCWZpbmFsIEFyZWFMYWJlbCByZXRWYWx1ZSA9IExhYmVsc0ZhY3RvcnkuZUlOU1RBTkNFCisJCQkJCS5jcmVhdGVBcmVhTGFiZWwoKTsKKwkJCXJldFZhbHVlLnNldFVSSShBcmVhTGFiZWxJbXBsLmNyZWF0ZUFyZWFMYWJlbFVSSShhZG1pbkxldmVsLAorCQkJCQljb3VudHJ5Q29kZS50b1N0cmluZygpLCBhcmVhRGF0YS5nZXRJZGVudGlmaWVyKCkpKTsKKwkJCXJldFZhbHVlLnNldFVSSU9mSWRlbnRpZmlhYmxlVG9CZUxhYmVsZWQoUmVnaW9uSW1wbAorCQkJCQkuY3JlYXRlUmVnaW9uTm9kZVVSSShhcmVhRGF0YS5nZXRJZGVudGlmaWVyKCkpKTsKKwkJCXJldFZhbHVlLmdldEN1cnJlbnRBcmVhVmFsdWUoKS5zZXRBcmVhKAorCQkJCQlEb3VibGUucGFyc2VEb3VibGUoYXJlYURhdGEuZ2V0QXJlYSgpKSk7CisKKwkJCXJldHVybiByZXRWYWx1ZTsKKwkJfSAvLyBjcmVhdGVBcmVhTGFiZWwKKworCQkvKioKKwkJICogQHJldHVybiAiYXJlYSIKKwkJICovCisJCUBPdmVycmlkZQorCQlwdWJsaWMgU3RyaW5nIGdldEdyYXBoVHlwZSgpIHsKKwkJCXJldHVybiAiYXJlYSI7CisJCX0gLy8gZ2V0R3JhcGhUeXBlCisJfSAvLyBBcmVhR3JhcGhSZWNvcmQKKworCS8qKgorCSAqIFRoaXMgY2xhc3MgYnVuZGxlcyBhIGdyYXBoIG9mIHBvcHVsYXRpb24gbGFiZWxzIHRvZ2V0aGVyIHdpdGggdGhlIGRldGFpbHMKKwkgKiBvZiB0aGUgbGFiZWxzLiBGb3IgaW5zdGFuY2UsIHRoZSB5ZWFyIG9mIHRoZSBkYXRhLCB0aGUgYWRtaW5pc3RyYXRpb24KKwkgKiBsZXZlbCBhbmQgdGhlIHBvcHVsYXRpb24gaWRlbnRpZmllci4KKwkgKi8KKwlwcml2YXRlIHN0YXRpYyBjbGFzcyBQb3B1bGF0aW9uR3JhcGhSZWNvcmQgZXh0ZW5kcyBHcmFwaFJlY29yZCB7CisKKwkJLyoqCisJCSAqIFRoaXMgaXMgdGhlIHByb3BlcnR5IGluIGEgcG9wdWxhdGlvbiBkYXRhIGZpbGUgdGhhdCBzcGVjaWZpZXMgdGhlCisJCSAqIHBvcHVsYXRpb24gaWRlbnRpZmllci4KKwkJICovCisJCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFBPUFVMQVRJT05fUFJPUEVSVFkgPSAiUE9QVUxBVElPTiI7CisKKwkJcHJpdmF0ZSBTdHJpbmcgcG9wdWxhdGlvbklkZW50aWZpZXIgPSBudWxsOworCisJCXByb3RlY3RlZCBQb3B1bGF0aW9uR3JhcGhSZWNvcmQoKSB7CisJCQlzdXBlcigpOworCQl9CisKKwkJLyoqCisJCSAqIEBwYXJhbSBwb3B1bGF0aW9uR3JhcGgKKwkJICogQHBhcmFtIGFkbWluTGV2ZWwKKwkJICogQHBhcmFtIHllYXIKKwkJICogQHBhcmFtIHBvcHVsYXRpb25JZGVudGlmaWVyCisJCSAqLworCQlwcm90ZWN0ZWQgUG9wdWxhdGlvbkdyYXBoUmVjb3JkKGZpbmFsIENvdW50cnlDb2RlIGNvdW50cnlDb2RlLAorCQkJCWZpbmFsIFN0cmluZyBmaWxlTmFtZSwgZmluYWwgR3JhcGggcG9wdWxhdGlvbkdyYXBoLAorCQkJCWZpbmFsIFN0cmluZyBzb3VyY2UsIGZpbmFsIGludCBhZG1pbkxldmVsLCBmaW5hbCBpbnQgeWVhciwKKwkJCQlmaW5hbCBTdHJpbmcgcG9wdWxhdGlvbklkZW50aWZpZXIpIHsKKwkJCXN1cGVyKGNvdW50cnlDb2RlLCBmaWxlTmFtZSwgcG9wdWxhdGlvbkdyYXBoLCBzb3VyY2UsIGFkbWluTGV2ZWwsCisJCQkJCXllYXIpOworCQkJdGhpcy5wb3B1bGF0aW9uSWRlbnRpZmllciA9IHBvcHVsYXRpb25JZGVudGlmaWVyOworCQl9CisKKwkJLyoqCisJCSAqIAorCQkgKi8KKwkJQE92ZXJyaWRlCisJCXByb3RlY3RlZCB2b2lkIHNldEZpZWxkc0Zyb21Ob25EYXRhUHJvcGVydGllcygpIHsKKwkJCXN1cGVyLnNldEZpZWxkc0Zyb21Ob25EYXRhUHJvcGVydGllcygpOworCQkJcG9wdWxhdGlvbklkZW50aWZpZXIgPSBub25EYXRhUHJvcGVydGllcy5nZXQoUE9QVUxBVElPTl9QUk9QRVJUWSk7CisJCX0gLy8gc2V0RmllbGRzRnJvbU5vbkRhdGFQcm9wZXJ0aWVzCisKKwkJLyoqCisJCSAqIEBwYXJhbSBjb3VudHJ5Q29kZQorCQkgKiBAcGFyYW0gZGF0YVNldAorCQkgKi8KKwkJQE92ZXJyaWRlCisJCXByb3RlY3RlZCBHcmFwaCBjcmVhdGVHcmFwaChmaW5hbCBDb3VudHJ5Q29kZSBjb3VudHJ5Q29kZSwKKwkJCQlmaW5hbCBMaXN0PENvdW50cnlEYXRhPiBkYXRhU2V0KSB7CisJCQlHcmFwaCByZXRWYWx1ZSA9IG51bGw7CisKKwkJCS8vIFdhcyB0aGVyZSBhbnkgZGF0YSBmb3IgdGhpcyBjb3VudHJ5IGF0IHRoaXMgYWRtaW5pc3RyYXRpb24gbGV2ZWw/CisJCQlpZiAoZGF0YVNldC5zaXplKCkgPiAwKSB7CisJCQkJLy8gWWVzCisJCQkJZmluYWwgU3RyaW5nIGFkbWluTGV2ZWwgPSBub25EYXRhUHJvcGVydGllcworCQkJCQkJLmdldChBRE1JTl9MRVZFTF9QUk9QRVJUWSk7CisKKwkJCQlyZXRWYWx1ZSA9IEdyYXBoRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlR3JhcGgoKTsKKwkJCQlmaW5hbCBEdWJsaW5Db3JlIGRjID0gcmV0VmFsdWUuZ2V0RHVibGluQ29yZSgpOworCQkJCWRjLnBvcHVsYXRlKCk7CisJCQkJZGMuc2V0VGl0bGUoQ291bnRyeURpcmVjdG9yeVV0aWxpdGllcworCQkJCQkJLmdldENvdW50cnlOYW1lKGNvdW50cnlDb2RlKQorCQkJCQkJKyAiIFBvcHVsYXRpb24gKExldmVsICIKKwkJCQkJCSsgYWRtaW5MZXZlbAorCQkJCQkJKyAiLCAiCisJCQkJCQkrIG5vbkRhdGFQcm9wZXJ0aWVzLmdldChQT1BVTEFUSU9OX1BST1BFUlRZKQorCQkJCQkJKyAiLCAiCisJCQkJCQkrIG5vbkRhdGFQcm9wZXJ0aWVzLmdldChWQUxJRF9QUk9QRVJUWSkKKwkJCQkJCSsgIiwgIgorCQkJCQkJKyBkYXRhU2V0LnNpemUoKQorCQkJCQkJKyAoZGF0YVNldC5zaXplKCkgPT0gMSA/ICIgbGFiZWwpIiA6ICIgbGFiZWxzKSIpKTsKKwkJCQlkYy5zZXRTb3VyY2Uobm9uRGF0YVByb3BlcnRpZXMuZ2V0KFNPVVJDRV9QUk9QRVJUWSkpOworCQkJCWRjLnNldFZhbGlkKG5vbkRhdGFQcm9wZXJ0aWVzLmdldChWQUxJRF9QUk9QRVJUWSkpOworCisJCQkJZm9yIChmaW5hbCBDb3VudHJ5RGF0YSBwb3B1bGF0aW9uRGF0YSA6IGRhdGFTZXQpIHsKKwkJCQkJcmV0VmFsdWUucHV0Tm9kZUxhYmVsKGNyZWF0ZVBvcHVsYXRpb25MYWJlbChJbnRlZ2VyCisJCQkJCQkJLnBhcnNlSW50KGFkbWluTGV2ZWwpLCBjb3VudHJ5Q29kZSwKKwkJCQkJCQlub25EYXRhUHJvcGVydGllcy5nZXQoUE9QVUxBVElPTl9QUk9QRVJUWSksCisJCQkJCQkJcG9wdWxhdGlvbkRhdGEpKTsKKwkJCQl9IC8vIGZvciBlYWNoIG5vZGUgZGF0YQorCisJCQl9IC8vIGlmIGFueSBkYXRhCisJCQlyZXR1cm4gcmV0VmFsdWU7CisJCX0gLy8gY3JlYXRlR3JhcGgKKworCQkvKioKKwkJICogQHBhcmFtIGFkbWluTGV2ZWwKKwkJICogICAgICAgICAgICB0aGUgbGV2ZWwgb2YgdGhlIGNvdW50cnkgbm9kZSB0aGUgYXJlYSBsYWJlbCBsYWJlbHMKKwkJICogQHBhcmFtIGNvdW50cnlDb2RlCisJCSAqICAgICAgICAgICAgdGhlIGlkZW50aWZpZXIgb2YgdGhlIGNvdW50cnkgdG8gd2hpY2ggdGhlIGxhYmVsZWQgbm9kZQorCQkgKiAgICAgICAgICAgIGJlbG9uZ3MKKwkJICogQHBhcmFtIHBvcHVsYXRpb25JZGVudGlmaWVyCisJCSAqICAgICAgICAgICAgdGhlIGlkZW50aWZpZXIgb2YgdGhlIHBvcHVsYXRpb24KKwkJICogQHBhcmFtIHBvcHVsYXRpb25EYXRhCisJCSAqICAgICAgICAgICAgdGhlIGRhdGEgdG8gdXNlIHRvIGluaXRpYWxpemUgdGhlIHBvcHVsYXRpb24gbGFiZWwKKwkJICogQHJldHVybiBhIHBvcHVsYXRpb24gbGFiZWwKKwkJICovCisJCXByaXZhdGUgc3RhdGljIFBvcHVsYXRpb25MYWJlbCBjcmVhdGVQb3B1bGF0aW9uTGFiZWwoCisJCQkJZmluYWwgaW50IGFkbWluTGV2ZWwsIGZpbmFsIENvdW50cnlDb2RlIGNvdW50cnlDb2RlLAorCQkJCWZpbmFsIFN0cmluZyBwb3B1bGF0aW9uSWRlbnRpZmllciwgZmluYWwgQ291bnRyeURhdGEgZGF0YVNldCkgeworCQkJZmluYWwgUG9wdWxhdGlvbkRhdGEgcG9wdWxhdGlvbkRhdGEgPSAoUG9wdWxhdGlvbkRhdGEpIGRhdGFTZXQ7CisJCQlmaW5hbCBQb3B1bGF0aW9uTGFiZWwgcmV0VmFsdWUgPSBMYWJlbHNGYWN0b3J5LmVJTlNUQU5DRQorCQkJCQkuY3JlYXRlUG9wdWxhdGlvbkxhYmVsKCk7CisJCQlyZXRWYWx1ZS5zZXRVUkkoUG9wdWxhdGlvbkxhYmVsSW1wbC5jcmVhdGVQb3B1bGF0aW9uTGFiZWxVUkkoCisJCQkJCWFkbWluTGV2ZWwsIGNvdW50cnlDb2RlLnRvU3RyaW5nKCksIHBvcHVsYXRpb25JZGVudGlmaWVyLAorCQkJCQkiMjAwNiIsIHBvcHVsYXRpb25EYXRhLmdldE5vZGVDb2RlKCkpKTsKKwkJCXJldFZhbHVlLnNldFVSSU9mSWRlbnRpZmlhYmxlVG9CZUxhYmVsZWQoUmVnaW9uSW1wbAorCQkJCQkuY3JlYXRlUmVnaW9uTm9kZVVSSShwb3B1bGF0aW9uRGF0YS5nZXROb2RlQ29kZSgpKSk7CisJCQlyZXRWYWx1ZS5zZXRQb3B1bGF0aW9uSWRlbnRpZmllcihwb3B1bGF0aW9uSWRlbnRpZmllcik7CisJCQlyZXRWYWx1ZS5nZXRDdXJyZW50UG9wdWxhdGlvblZhbHVlKCkuc2V0Q291bnQoCisJCQkJCUxvbmcucGFyc2VMb25nKHBvcHVsYXRpb25EYXRhLmdldENvdW50KCkpKTsKKworCQkJLy8gV2FzIGFuIGFyZWEgc3BlY2lmaWVkIGZvciB0aGUgcG9wdWxhdGlvbj8KKwkJCWlmIChwb3B1bGF0aW9uRGF0YS5hcmVhICE9IG51bGwpIHsKKwkJCQkvLyBZZXMKKwkJCQlyZXRWYWx1ZS5zZXRQb3B1bGF0ZWRBcmVhKERvdWJsZQorCQkJCQkJLnBhcnNlRG91YmxlKHBvcHVsYXRpb25EYXRhLmFyZWEpKTsKKwkJCX0KKworCQkJcmV0dXJuIHJldFZhbHVlOworCQl9IC8vIGNyZWF0ZVBvcHVsYXRpb25MYWJlbAorCisJCS8qKgorCQkgKiBAcGFyYW0gZGF0YVByb3BlcnR5S2V5CisJCSAqIEBwYXJhbSBkYXRhUHJvcGVydHkKKwkJICovCisJCUBPdmVycmlkZQorCQlwcm90ZWN0ZWQgQ291bnRyeURhdGEgY3JlYXRlRGF0YShmaW5hbCBTdHJpbmcgZGF0YVByb3BlcnR5S2V5LAorCQkJCWZpbmFsIFN0cmluZyBkYXRhUHJvcGVydHkpIHsKKwkJCXJldHVybiBuZXcgUG9wdWxhdGlvbkRhdGEoZGF0YVByb3BlcnR5S2V5LCBkYXRhUHJvcGVydHkpOworCQl9IC8vIGNyZWF0ZURhdGEKKworCQkvKioKKwkJICogQHBhcmFtIGRhdGFQcm9wZXJ0aWVzCisJCSAqLworCQlAT3ZlcnJpZGUKKwkJcHJvdGVjdGVkIHZvaWQgY29sbGVjdE5vbkRhdGFQcm9wZXJ0aWVzKGZpbmFsIFByb3BlcnRpZXMgZGF0YVByb3BlcnRpZXMpIHsKKwkJCXN1cGVyLmNvbGxlY3ROb25EYXRhUHJvcGVydGllcyhkYXRhUHJvcGVydGllcyk7CisKKwkJCS8vIEdldCB0aGUgcG9wdWxhdGlvbiBsZXZlbCBkYXRlcworCQkJZmluYWwgU3RyaW5nIHBvcHVsYXRpb25JZGVudGlmaWVyID0gZGF0YVByb3BlcnRpZXMKKwkJCQkJLmdldFByb3BlcnR5KFBPUFVMQVRJT05fUFJPUEVSVFkpOworCQkJaWYgKHBvcHVsYXRpb25JZGVudGlmaWVyICE9IG51bGwpIHsKKwkJCQlub25EYXRhUHJvcGVydGllcworCQkJCQkJLnB1dChQT1BVTEFUSU9OX1BST1BFUlRZLCBwb3B1bGF0aW9uSWRlbnRpZmllcik7CisJCQl9CisJCX0gLy8gY29sbGVjdE5vbkRhdGFQcm9wZXJ0aWVzCisKKwkJcHJvdGVjdGVkIGZpbmFsIFN0cmluZyBnZXRQb3B1bGF0aW9uSWRlbnRpZmllcigpIHsKKwkJCXJldHVybiBwb3B1bGF0aW9uSWRlbnRpZmllcjsKKwkJfQorCisJCUBPdmVycmlkZQorCQlwcm90ZWN0ZWQgYm9vbGVhbiBpc0RhdGFQcm9wZXJ0eShmaW5hbCBTdHJpbmcgcHJvcGVydHkpIHsKKwkJCXJldHVybiAoIXByb3BlcnR5LmVxdWFscyhQT1BVTEFUSU9OX1BST1BFUlRZKSkKKwkJCQkJJiYgc3VwZXIuaXNEYXRhUHJvcGVydHkocHJvcGVydHkpOworCQl9CisKKwkJQE92ZXJyaWRlCisJCXByb3RlY3RlZCBib29sZWFuIGFsbE5vbkRhdGFQcm9wZXJ0aWVzQ29sbGVjdGVkKCkgeworCQkJcmV0dXJuIG5vbkRhdGFQcm9wZXJ0aWVzLmdldChQT1BVTEFUSU9OX1BST1BFUlRZKSAhPSBudWxsCisJCQkJCSYmIHN1cGVyLmFsbE5vbkRhdGFQcm9wZXJ0aWVzQ29sbGVjdGVkKCk7CisJCX0gLy8gYWxsRGF0YVByb3BlcnRpZXNDb2xsZWN0ZWQKKworCQkvKioKKwkJICovCisJCUBPdmVycmlkZQorCQlwcm90ZWN0ZWQgU3RyaW5nIGdldE1pc3NpbmdOb25EYXRhUHJvcGVydGllcygpIHsKKwkJCWZpbmFsIFN0cmluZ0J1aWxkZXIgc2IgPSBuZXcgU3RyaW5nQnVpbGRlcihzdXBlcgorCQkJCQkuZ2V0TWlzc2luZ05vbkRhdGFQcm9wZXJ0aWVzKCkpOworCisJCQlzYgorCQkJCQkuYXBwZW5kKG5vbkRhdGFQcm9wZXJ0aWVzLmdldChQT1BVTEFUSU9OX1BST1BFUlRZKSA9PSBudWxsID8gKFBPUFVMQVRJT05fUFJPUEVSVFkgKyAiICIpCisJCQkJCQkJOiAiIik7CisJCQlyZXR1cm4gc2IudG9TdHJpbmcoKTsKKwkJfSAvLyBnZXRNaXNzaW5nTm9uRGF0YVByb3BlcnRpZXMKKworCQkvKioKKwkJICogQHJldHVybiAicG9wdWxhdGlvbiIKKwkJICovCisJCUBPdmVycmlkZQorCQlwdWJsaWMgU3RyaW5nIGdldEdyYXBoVHlwZSgpIHsKKwkJCXJldHVybiAicG9wdWxhdGlvbiI7CisJCX0gLy8gZ2V0R3JhcGhUeXBlCisJfSAvLyBQb3B1bGF0aW9uR3JhcGhSZWNvcmQKKworfSAvLyBDb3VudHJ5R3JhcGhDcmVhdG9yMgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3Rlc3RzL3V0aWwvQ291bnRyeU1vZGVsQ3JlYXRvci5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3Rlc3RzL3V0aWwvQ291bnRyeU1vZGVsQ3JlYXRvci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBmZGE4NTcKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdGVzdHMvdXRpbC9Db3VudHJ5TW9kZWxDcmVhdG9yLmphdmEKQEAgLTAsMCArMSw1OTcgQEAKKy8vIENvdW50cnlNb2RlbENyZWF0b3IuamF2YQorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWw7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgamF2YS5pby5CdWZmZXJlZFdyaXRlcjsKK2ltcG9ydCBqYXZhLmlvLkZpbGU7CitpbXBvcnQgamF2YS5pby5GaWxlV3JpdGVyOworaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247CitpbXBvcnQgamF2YS5pby5Xcml0ZXI7CitpbXBvcnQgamF2YS50ZXh0Lk1lc3NhZ2VGb3JtYXQ7CitpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuQ2FsZW5kYXI7CitpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb25zOworaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOworaW1wb3J0IGphdmEudXRpbC5MaXN0OworaW1wb3J0IGphdmEudXRpbC5NYXA7CitpbXBvcnQgamF2YS51dGlsLk1hcC5FbnRyeTsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5VUkk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLkNvbnN0YW50czsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLkR1YmxpbkNvcmU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLk1vZGVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5Nb2RlbEZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsLkNvdW50cnlEaXJlY3RvcnlVdGlsaXRpZXMuQ291bnRyeUNvZGU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsLkNvdW50cnlHcmFwaENyZWF0b3IuRGF0YVR5cGU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsLkNvdW50cnlHcmFwaENyZWF0b3IuR3JhcGhSZWNvcmQ7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsLkNvdW50cnlHcmFwaENyZWF0b3IuUmVjb3JkOworCisvKioKKyAqIFRoaXMgY2xhc3MgaXMgdXNlZCB0byBhdW90bWF0ZSB0aGUgZ2VuZXJhdGlvbiBvZiBtb2RlbHMgaW4gU1RFTS4KKyAqLworcHVibGljIGNsYXNzIENvdW50cnlNb2RlbENyZWF0b3IgeworCisJLyoqCisJICogVGhpcyBpcyB0aGUgbmFtZSBvZiB0aGUgZGlyZWN0b3J5IHVuZGVyIHRoZQorCSAqIHtAbGluayBDb3VudHJ5R3JhcGhDcmVhdG9yI1JPT1RfT1VUUFVUX0RJUn0gdGhhdCBjb250YWlucyB0aGUgZGlyZWN0b3JpZXMKKwkgKiB0aGF0IGNvbnRhaW4gdGhlIG1vZGVscyB0aGF0IGRlZmluZSB0aGUgZ2VvZ3JhcGhpZXMgYW5kIGZlYXR1cmVzIG9mCisJICogY291bnRyaWVzLgorCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIE1PREVMX09VVFBVVF9ESVIgPSAibW9kZWxzIjsKKworCS8qKgorCSAqIFRoaXMgaXMgdGhlIHBhdGggdG8gdGhlIGNvdW50cnkgbW9kZWxzIGRpcmVjdG9yeQorCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIENPVU5UUllfTU9ERUxfUEFUSCA9IENvdW50cnlHcmFwaENyZWF0b3IuUk9PVF9PVVRQVVRfRElSCisJCQkrIEZpbGUuc2VwYXJhdG9yCisJCQkrIE1PREVMX09VVFBVVF9ESVIKKwkJCSsgRmlsZS5zZXBhcmF0b3IKKwkJCSsgQ291bnRyeUdyYXBoQ3JlYXRvci5DT1VOVFJZX0RJUjsKKworCS8qKgorCSAqIFRoaXMgaXMgdGhlIGlkIG9mIHRoZSBleHRlbnNpb24gcG9pbnQgZXh0ZW5kZWQgYnkgZ3JhcGhzIHRoYXQgYXJlIHBsdWdnZWQKKwkgKiBpbnRvIFNURU0KKwkgKi8KKwkvLyBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBJRF9NT0RFTF9FWFRFTlNJT05fUE9JTlQgPSBDb25zdGFudHMuSURfUk9PVAorCS8vICsgIi5jb3JlLm1vZGVsIjsKKwkvKioKKwkgKiBUaGlzIGlzIHRoZSBpZCBvZiB0aGUgdG9wLWxldmVsIFNURU0gY2F0ZWdvcnkgZm9yIGdyYXBocworCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIElEX1NURU1fTU9ERUxfQ0FURUdPUlkgPSBDb25zdGFudHMuSURfUk9PVAorCQkJKyAiLmNvcmUubW9kZWwiOworCisJLyoqCisJICogVGhpcyBpcyB0aGUgaWQgb2YgdGhlIGV4dGVuc2lvbiBwb2ludCBleHRlbmRlZCBieSBtb2RlbHMgd2l0aCBnZW9ncmFwaGljCisJICogaW5mb3JtYXRpb24gdGhhdCBhcmUgcGx1Z2dlZCBpbnRvIFNURU0KKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBJRF9NT0RFTF9HRU9HUkFQSFlfQ0FURUdPUlkgPSBJRF9TVEVNX01PREVMX0NBVEVHT1JZCisJCQkrICIuIiArIENvdW50cnlHcmFwaENyZWF0b3IuR0VPR1JBUEhZLnRvTG93ZXJDYXNlKCk7CisKKwkvKioKKwkgKiBUaGlzIGlzIHRoZSBpZCBvZiB0aGUgZXh0ZW5zaW9uIHBvaW50IGV4dGVuZGVkIGJ5IG1vZGVscyB3aXRoIGdlb2dyYXBoaWMKKwkgKiBwb2xpdGljYWwgaW5mb3JtYXRpb24gdGhhdCBhcmUgcGx1Z2dlZCBpbnRvIFNURU0KKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBJRF9NT0RFTF9QT0xJVElDQUxfQ0FURUdPUlkgPSBJRF9NT0RFTF9HRU9HUkFQSFlfQ0FURUdPUlkKKwkJCSsgIi4iICsgQ291bnRyeUdyYXBoQ3JlYXRvci5QT0xJVElDQUwudG9Mb3dlckNhc2UoKTsKKworCS8qKgorCSAqIFRoaXMgaXMgdGhlIGlkIG9mIHRoZSBleHRlbnNpb24gcG9pbnQgZXh0ZW5kZWQgYnkgbW9kZWxzIHdpdGggZ2VvZ3JhcGhpYworCSAqIHBvbGl0aWNhbCBpbmZvcm1hdGlvbiB0aGF0IGFyZSBwbHVnZ2VkIGludG8gU1RFTQorCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIElEX01PREVMX0NPVU5UUklFU19DQVRFR09SWSA9IElEX01PREVMX1BPTElUSUNBTF9DQVRFR09SWQorCQkJKyAiLiIgKyBDb3VudHJ5R3JhcGhDcmVhdG9yLkNPVU5UUklFUy50b0xvd2VyQ2FzZSgpOworCisJLyoqCisJICogVGhpcyBpcyB0aGUgZm9ybWF0IG9mIHRoZSBnZW5lcmF0ZWQgTkxTIGtleXMgZm9yIGNhdGVnb3JpZXMKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBOTFNfQ0FURUdPUllfS0VZX0ZPUk1BVCA9ICJfVUlfezB9X21vZGVsX2NhdGVnb3J5IjsKKworCS8qKgorCSAqIEBwYXJhbSBhcmdzCisJICovCisJcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgeworCQkvLyBOb3cgY3JlYXRlIHRoZSBncmFwaHMKKwkJZmluYWwgTGlzdDxDb3VudHJ5Q29kZT4gY291bnRyeUNvZGVzID0gQ291bnRyeURpcmVjdG9yeVV0aWxpdGllcworCQkJCS5nZXRBbGxDb3VudHJ5Q29kZXMoKTsKKwkJQ29sbGVjdGlvbnMuc29ydChjb3VudHJ5Q29kZXMpOworCisJCWZpbmFsIENvdW50cnlNb2RlbENyZWF0b3IgY21jID0gbmV3IENvdW50cnlNb2RlbENyZWF0b3IoKTsKKwkJZmluYWwgTWFwPENvdW50cnlDb2RlLCBMaXN0PENvdW50cnlNb2RlbFJlY29yZD4+IGNvdW50cnlNb2RlbHMgPSBjbWMKKwkJCQkuY3JlYXRlQ291bnRyeU1vZGVscygpOworCQl0cnkgeworCQkJY21jLnNlcmlhbGl6ZUNvdW50cnlNb2RlbHMoY291bnRyeU1vZGVscywgQ09VTlRSWV9NT0RFTF9QQVRIKTsKKworCQkJTGlzdDxNYXA8Q291bnRyeUNvZGUsIExpc3Q8Q291bnRyeU1vZGVsUmVjb3JkPj4+IG1vZGVsUmVjb3JkcyA9IG5ldyBBcnJheUxpc3Q8TWFwPENvdW50cnlDb2RlLCBMaXN0PENvdW50cnlNb2RlbFJlY29yZD4+PigpOworCQkJbW9kZWxSZWNvcmRzLmFkZChjb3VudHJ5TW9kZWxzKTsKKworCQkJaW50IG1heEFkbWluTGV2ZWwgPSAwOworCQkJbWF4QWRtaW5MZXZlbCA9IE1hdGgubWF4KG1heEFkbWluTGV2ZWwsCisJCQkJCWdldE1heEFkbWluTGV2ZWwoY291bnRyeU1vZGVscykpOworCisJCQlmaW5hbCBGaWxlIG1vZGVsRXh0ZW5zaW9uRmlsZSA9IG5ldyBGaWxlKENPVU5UUllfTU9ERUxfUEFUSAorCQkJCQkrIENvdW50cnlHcmFwaENyZWF0b3IuR1JBUEhfRVhURU5TSU9OX1BPSU5UX0ZJTEVfTkFNRSk7CisJCQlmaW5hbCBGaWxlIG1vZGVsUGx1Z2luUHJvcGVydGllc0ZpbGUgPSBuZXcgRmlsZSgKKwkJCQkJQ09VTlRSWV9NT0RFTF9QQVRICisJCQkJCQkJKyBDb3VudHJ5R3JhcGhDcmVhdG9yLkdSQVBIX1BMVUdJTl9QUk9QRVJUSUVTX1BPSU5UX0ZJTEVfTkFNRSk7CisKKwkJCWZpbmFsIEJ1ZmZlcmVkV3JpdGVyIG1vZGVsT3V0ID0gbmV3IEJ1ZmZlcmVkV3JpdGVyKG5ldyBGaWxlV3JpdGVyKAorCQkJCQltb2RlbEV4dGVuc2lvbkZpbGUpKTsKKworCQkJZmluYWwgQnVmZmVyZWRXcml0ZXIgcGx1Z2luT3V0ID0gbmV3IEJ1ZmZlcmVkV3JpdGVyKG5ldyBGaWxlV3JpdGVyKAorCQkJCQltb2RlbFBsdWdpblByb3BlcnRpZXNGaWxlKSk7CisKKwkJCS8vIENyZWF0ZSBhIHNuaXBwZXQgb2YgeG1sIHRoYXQgY2FuIGJlIGluY2x1ZGVkIGluIGEgcGx1Z2luLnhtbCBmaWxlCisJCQkvLyB0byBwbHVnIGludG8gU1RFTSB0aGUgZ3JhcGhzIHdlIGp1c3Qgc2VyaWFsaXplZC4KKwkJCWNtYy5nZW5lcmF0ZU1vZGVsRXh0ZW5zaW9uUG9pbnRYTUwobW9kZWxSZWNvcmRzLCBjb3VudHJ5Q29kZXMsCisJCQkJCW1heEFkbWluTGV2ZWwsIG1vZGVsT3V0LCBwbHVnaW5PdXQpOworCQl9IC8vIHRyeQorCQljYXRjaCAoSU9FeGNlcHRpb24gZSkgeworCQkJZS5wcmludFN0YWNrVHJhY2UoKTsKKwkJfQorCX0gLy8gbWFpbgorCisJLyoqCisJICogQHBhcmFtIG1vZGVscworCSAqICAgICAgICAgICAgYSBtYXAgYmV0d2VlbiBjb3VudHJ5IGNvZGUgYW5kIGxpc3Qgb2YgbW9kZWwgcmVjb3JkcyBmb3IgdGhlCisJICogICAgICAgICAgICBjb3VudHJ5CisJICogQHBhcmFtIHVyaVBhdGhTdHJpbmcKKwkgKiAgICAgICAgICAgIHRoZSBwYXRoIHRvIHRoZSByb290IG9mIHRoZSBmb2xkZXIgdG8gc2VyaWFsaXplIHRoZSBtb2RlbHMgdG8KKwkgKiBAdGhyb3dzIElPRXhjZXB0aW9uCisJICovCisJcHJpdmF0ZSB2b2lkIHNlcmlhbGl6ZUNvdW50cnlNb2RlbHMoCisJCQlmaW5hbCBNYXA8Q291bnRyeUNvZGUsIExpc3Q8Q291bnRyeU1vZGVsUmVjb3JkPj4gbW9kZWxzLAorCQkJZmluYWwgU3RyaW5nIHVyaVBhdGhTdHJpbmcpIHRocm93cyBJT0V4Y2VwdGlvbiB7CisKKwkJZm9yIChDb3VudHJ5Q29kZSBjb3VudHJ5Q29kZSA6IG1vZGVscy5rZXlTZXQoKSkgeworCQkJZm9yIChDb3VudHJ5TW9kZWxSZWNvcmQgbW9kZWxSZWNvcmQgOiBtb2RlbHMuZ2V0KGNvdW50cnlDb2RlKSkgeworCQkJCW1vZGVsUmVjb3JkLnNlcmlhbGl6ZSh1cmlQYXRoU3RyaW5nKTsKKwkJCX0gLy8gZm9yIGVhY2ggbW9kZWwgcmVjb3JkIGZvciBlYWNoIGNvdW50cnkKKwkJfSAvLyBmb3IgZWFjaCBjb3VudHJ5IGNvZGUKKworCQkvLwkJCisJCS8vIGZvciAoQ291bnRyeUNvZGUgY291bnRyeUNvZGUgOiBncmFwaHMua2V5U2V0KCkpIHsKKwkJLy8gZm9yIChHcmFwaFJlY29yZCBncmFwaFJlY29yZCA6IGdyYXBocy5nZXQoY291bnRyeUNvZGUpKSB7CisJCS8vIGdyYXBoUmVjb3JkLnNlcmlhbGl6ZSh1cmlQYXRoU3RyaW5nKTsKKwkJLy8gfSAvLyBmb3IgZWFjaCBncmFwaCByZWNvcmQgZm9yIGVhY2ggY291bnRyeQorCQkvLyB9IC8vIGZvciBlYWNoIGNvdW50cnkgY29kZQorCisJfSAvLyBzZXJpYWxpemVDb3VudHJ5TW9kZWxzCisKKwkvKioKKwkgKiBAcGFyYW0gY291bnRyeU5vZGVHcmFwaHMKKwkgKiAgICAgICAgICAgIGEgbGlzdCBvZiBtYXBzIG9mIG1vZGVscyBvZiBub2RlcyBmb3IgY291bnRyaWVzIGZvciBlYWNoCisJICogICAgICAgICAgICBhZG1pbnN0cmF0aW9uIGxldmVsCisJICogQHBhcmFtIG1vZGVsT3V0CisJICogICAgICAgICAgICB0aGUgb3V0cHV0IHdyaXRlciBmb3IgdGhlIHBsdWdpbi54bWwgZmlsZSBjb250ZW50cworCSAqIEBwYXJhbSBwbHVnaW5PdXQKKwkgKiAgICAgICAgICAgIHRoZSBvdXRwdXQgd3JpdGVyIGZvciB0aGUgcGx1Z2luLnByb3BlcnRpZXMgZmlsZSBjb250ZW50cworCSAqLworCXByaXZhdGUgdm9pZCBnZW5lcmF0ZU1vZGVsRXh0ZW5zaW9uUG9pbnRYTUwoCisJCQlmaW5hbCBMaXN0PE1hcDxDb3VudHJ5Q29kZSwgTGlzdDxDb3VudHJ5TW9kZWxSZWNvcmQ+Pj4gbW9kZWxSZWNvcmRzLAorCQkJTGlzdDxDb3VudHJ5Q29kZT4gY291bnRyeUNvZGVzLCBmaW5hbCBpbnQgbWF4QWRtaW5MZXZlbCwKKwkJCWZpbmFsIFdyaXRlciBtb2RlbE91dCwgZmluYWwgV3JpdGVyIHBsdWdpbk91dCkgeworCisJCS8vIFRoZSBkdWJsaW4gY29yZSBpbnN0YW5jZXMgb2YgdGhlIG1vZGVscyBsaWtlbHkgc2hhcmUgY29tbW9uCisJCS8vIGF0dHJpYnV0ZXMsIHdlIGNhbiBhdm9pZCBkdXBsaWNhdGUgZW50cmllcyBpbiB0aGUgZmlsZXMgd2UgZ2VuZXJhdGUKKwkJLy8gYnkgZmluZGluZyB0aGUgZHVwbGljYXRlIGVudHJpZXMgYW5kIG9ubHkgZ2VuZXJhdGluZyBhIHNpbmdsZSBrZXkgZm9yCisJCS8vIHRoZSBnZW5lcmF0ZWQgcGx1Z2lucyBmaWxlIGNvbnRlbnQuCisJCWZpbmFsIE1hcDxTdHJpbmcsIFN0cmluZz4gZGNWYWx1ZUtleU1hcCA9IG5ldyBIYXNoTWFwPFN0cmluZywgU3RyaW5nPigpOworCisJCS8vIFdlIGFsc28gZG9uJ3Qgd2FudCB0byBnZW5lcmF0ZSBkdXBsaWNhdGUgY291bnRyeSBjYXRlZ29yaWVzCisJCWZpbmFsIE1hcDxTdHJpbmcsIFN0cmluZz4gY291bnRyeUNhdGVnb3JpZXMgPSBuZXcgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4oKTsKKworCQl0cnkgeworCQkJbW9kZWxPdXQud3JpdGUoIjwhLS0gR2VuZXJhdGVkIGNvbnRlbnQuICBEbyBub3QgbW9kaWZ5IC0tPlxuIik7CisKKwkJCW1vZGVsT3V0LndyaXRlKE1lc3NhZ2VGb3JtYXQuZm9ybWF0KAorCQkJCQlDb3VudHJ5R3JhcGhDcmVhdG9yLlhNTF9FWFRFTlNJT05fUE9JTlRfT1BFTiwKKwkJCQkJbmV3IE9iamVjdFtdIHsgQ29uc3RhbnRzLklEX01PREVMX0VYVEVOU0lPTl9QT0lOVCB9KSk7CisJCQltb2RlbE91dC53cml0ZSgiXG4iKTsKKworCQkJcGx1Z2luT3V0CisJCQkJCS53cml0ZSgiI01vZGVsIE5MUyBLZXlzLiAgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQsIGRvIG5vdCBtb2RpZnkuICIKKwkJCQkJCQkrIENhbGVuZGFyLmdldEluc3RhbmNlKCkuZ2V0VGltZSgpCisJCQkJCQkJKyAiICIKKwkJCQkJCQkrIFN5c3RlbS5nZXRQcm9wZXJ0eSgidXNlci5uYW1lIikgKyAiXG4iKTsKKworCQkJLy8gT3V0cHV0IHRoZSBjYXRlZ29yaWVzIHRoYXQgbWFrZSB1cCB0aGUgaGllcmFyY2h5IGZvciB0aGUgZ3JhcGgKKwkJCS8vIHBsdWdpbnMgKGFsbCBleGNlcHQgZm9yIHRoZSBjb3VudHJ5IGNhdGVnb3JpZXMgd2hpY2ggd2Ugb3V0cHV0CisJCQkvLyBiZWxvdykKKwkJCWZpbmFsIFN0cmluZ1tdIGxldmVsQ2F0ZWdvcnlJZCA9IG91dHB1dENhdGVnb3JpZXMoCisJCQkJCW1heEFkbWluTGV2ZWwgKyAxLCBtb2RlbE91dCwgcGx1Z2luT3V0KTsKKworCQkJZm9yIChDb3VudHJ5Q29kZSBjb3VudHJ5Q29kZSA6IGNvdW50cnlDb2RlcykgeworCQkJCWZvciAoTWFwPENvdW50cnlDb2RlLCBMaXN0PENvdW50cnlNb2RlbFJlY29yZD4+IG1vZGVsUmVjb3JkTWFwIDogbW9kZWxSZWNvcmRzKSB7CisJCQkJCUxpc3Q8Q291bnRyeU1vZGVsUmVjb3JkPiBmb28gPSBtb2RlbFJlY29yZE1hcAorCQkJCQkJCS5nZXQoY291bnRyeUNvZGUpOworCQkJCQkvLyBBbnl0aGluZyBpbiB0aGUgbGlzdD8KKwkJCQkJaWYgKGZvbyAhPSBudWxsKSB7CisJCQkJCQkvLyBZZXMKKwkJCQkJCWZvciAoQ291bnRyeU1vZGVsUmVjb3JkIG1vZGVsUmVjb3JkIDogbW9kZWxSZWNvcmRNYXAKKwkJCQkJCQkJLmdldChjb3VudHJ5Q29kZSkpIHsKKwkJCQkJCQlvdXRwdXRNb2RlbFJlY29yZChtb2RlbFJlY29yZCwgZGNWYWx1ZUtleU1hcCwKKwkJCQkJCQkJCWNvdW50cnlDYXRlZ29yaWVzLCBsZXZlbENhdGVnb3J5SWQsCisJCQkJCQkJCQltb2RlbE91dCwgcGx1Z2luT3V0KTsKKwkJCQkJCX0KKwkJCQkJfQorCisJCQkJfSAvLyBmb3IgZWFjaCB0eXBlIG9mIGdyYXBoIFJlY29yZAorCQkJfSAvLyBmb3IgZWFjaCBjb3VudHJ5IGNvZGUKKworCQkJbW9kZWxPdXQud3JpdGUoQ291bnRyeUdyYXBoQ3JlYXRvci5YTUxfRVhURU5TSU9OX1BPSU5UX0NMT1NFKTsKKwkJCW1vZGVsT3V0LmNsb3NlKCk7CisJCQlwbHVnaW5PdXQuY2xvc2UoKTsKKwkJfSBjYXRjaCAoSU9FeGNlcHRpb24gZSkgeworCQkJZS5wcmludFN0YWNrVHJhY2UoKTsKKwkJfQorCisJfS8vIGdlbmVyYXRlTW9kZWxFeHRlbnNpb25Qb2ludFhNTAorCisJLyoqCisJICogQHBhcmFtIG51bUxldmVscworCSAqICAgICAgICAgICAgdGhlIG51bWJlciBvZiBhZG1pbmlzdHJhdGlvbiBsZXZlbHMgdG8gZ2VuZXJhdGUgY2F0ZWdvcmllcyBmb3IKKwkgKiBAcGFyYW0gbW9kZWxPdXQKKwkgKiAgICAgICAgICAgIHRoZSBvdXRwdXQgd3JpdGVyIGZvciB0aGUgcGx1Z2luLnhtbCBmaWxlIGNvbnRlbnRzCisJICogQHBhcmFtIHBsdWdpbk91dAorCSAqICAgICAgICAgICAgdGhlIG91dHB1dCB3cml0ZXIgZm9yIHRoZSBwbHVnaW4ucHJvcGVydGllcyBmaWxlIGNvbnRlbnRzCisJICogQHJldHVybiBhbiBhcnJheSBpbmRleGVkIGJ5IGFkbWluaXN0cmF0aW9uIGxldmVsIG9mIHRoZSBjYXRlZ29yeSBpZGVhcyBvZgorCSAqICAgICAgICAgdGhlIGRpZmZlcmVudCBhZG1pbmlzdHJhdGlvbiBsZXZlbHMKKwkgKiBAdGhyb3dzIElPRXhjZXB0aW9uCisJICogICAgICAgICAgICAgaWYgdGhlcmUgaXMgYSBwcm9ibGVtIHdyaXRpbmcgdG8gdGhlIG91dHB1dCB3cml0ZXJzCisJICovCisJcHJpdmF0ZSBTdHJpbmdbXSBvdXRwdXRDYXRlZ29yaWVzKGZpbmFsIGludCBudW1MZXZlbHMsCisJCQlmaW5hbCBXcml0ZXIgbW9kZWxPdXQsIGZpbmFsIFdyaXRlciBwbHVnaW5PdXQpIHRocm93cyBJT0V4Y2VwdGlvbiB7CisJCS8vIFRoZSBjYXRlZ29yaWVzCisJCS8vIFNURU0KKwkJQ291bnRyeUdyYXBoQ3JlYXRvci5vdXRwdXRDYXRlZ29yeShJRF9TVEVNX01PREVMX0NBVEVHT1JZLAorCQkJCUNvdW50cnlHcmFwaENyZWF0b3IuU1RFTSwgIi8iLCBOTFNfQ0FURUdPUllfS0VZX0ZPUk1BVCwKKwkJCQltb2RlbE91dCwgcGx1Z2luT3V0KTsKKworCQkvLyBHZW9ncmFwaHkKKwkJQ291bnRyeUdyYXBoQ3JlYXRvci5vdXRwdXRDYXRlZ29yeShJRF9NT0RFTF9HRU9HUkFQSFlfQ0FURUdPUlksCisJCQkJQ291bnRyeUdyYXBoQ3JlYXRvci5HRU9HUkFQSFksIElEX1NURU1fTU9ERUxfQ0FURUdPUlksCisJCQkJTkxTX0NBVEVHT1JZX0tFWV9GT1JNQVQsIG1vZGVsT3V0LCBwbHVnaW5PdXQpOworCisJCS8vIFBvbGl0aWNhbAorCQlDb3VudHJ5R3JhcGhDcmVhdG9yLm91dHB1dENhdGVnb3J5KElEX01PREVMX1BPTElUSUNBTF9DQVRFR09SWSwKKwkJCQlDb3VudHJ5R3JhcGhDcmVhdG9yLlBPTElUSUNBTCwgSURfTU9ERUxfR0VPR1JBUEhZX0NBVEVHT1JZLAorCQkJCU5MU19DQVRFR09SWV9LRVlfRk9STUFULCBtb2RlbE91dCwgcGx1Z2luT3V0KTsKKworCQkvLyBDb3VudHJ5CisJCUNvdW50cnlHcmFwaENyZWF0b3Iub3V0cHV0Q2F0ZWdvcnkoSURfTU9ERUxfQ09VTlRSSUVTX0NBVEVHT1JZLAorCQkJCUNvdW50cnlHcmFwaENyZWF0b3IuQ09VTlRSSUVTLCBJRF9NT0RFTF9QT0xJVElDQUxfQ0FURUdPUlksCisJCQkJTkxTX0NBVEVHT1JZX0tFWV9GT1JNQVQsIG1vZGVsT3V0LCBwbHVnaW5PdXQpOworCisJCWZpbmFsIFN0cmluZ1tdIGxldmVsQ2F0ZWdvcnlJZCA9IG5ldyBTdHJpbmdbbnVtTGV2ZWxzXTsKKworCQkvLyBMZXZlbAorCQlmb3IgKGludCBhZG1pbkxldmVsID0gMDsgYWRtaW5MZXZlbCA8IG51bUxldmVsczsgYWRtaW5MZXZlbCsrKSB7CisJCQkvLyBMZXZlbCBjYXRlZ29yeQorCQkJbGV2ZWxDYXRlZ29yeUlkW2FkbWluTGV2ZWxdID0gSURfTU9ERUxfQ09VTlRSSUVTX0NBVEVHT1JZICsgIi4iCisJCQkJCSsgQ291bnRyeUdyYXBoQ3JlYXRvci5MRVZFTC50b0xvd2VyQ2FzZSgpICsgYWRtaW5MZXZlbDsKKworCQkJQ291bnRyeUdyYXBoQ3JlYXRvci5vdXRwdXRDYXRlZ29yeShsZXZlbENhdGVnb3J5SWRbYWRtaW5MZXZlbF0sCisJCQkJCUNvdW50cnlHcmFwaENyZWF0b3IuTEVWRUwgKyBhZG1pbkxldmVsLAorCQkJCQlJRF9NT0RFTF9DT1VOVFJJRVNfQ0FURUdPUlksIE5MU19DQVRFR09SWV9LRVlfRk9STUFULAorCQkJCQltb2RlbE91dCwgcGx1Z2luT3V0KTsKKwkJfSAvLyBmb3IgYWRtaW5MZXZlbAorCisJCW1vZGVsT3V0LndyaXRlKCJcbiIpOworCQlwbHVnaW5PdXQud3JpdGUoIlxuIik7CisJCXJldHVybiBsZXZlbENhdGVnb3J5SWQ7CisJfSAvLyBvdXRwdXRDYXRlZ29yaWVzCisKKwkvKioKKwkgKiBAcGFyYW0gbW9kZWxSZWNvcmQKKwkgKiBAcGFyYW0gZGNWYWx1ZUtleU1hcAorCSAqIEBwYXJhbSBjb3VudHJ5Q2F0ZWdvcmllcworCSAqIEBwYXJhbSBsZXZlbENhdGVnb3J5SWQKKwkgKiBAcGFyYW0gbW9kZWxPdXQKKwkgKiBAcGFyYW0gcGx1Z2luT3V0CisJICogQHRocm93cyBJT0V4Y2VwdGlvbgorCSAqLworCXByaXZhdGUgdm9pZCBvdXRwdXRNb2RlbFJlY29yZChNb2RlbFJlY29yZCBtb2RlbFJlY29yZCwKKwkJCU1hcDxTdHJpbmcsIFN0cmluZz4gZGNWYWx1ZUtleU1hcCwKKwkJCU1hcDxTdHJpbmcsIFN0cmluZz4gY291bnRyeUNhdGVnb3JpZXMsIFN0cmluZ1tdIGxldmVsQ2F0ZWdvcnlJZCwKKwkJCVdyaXRlciBtb2RlbE91dCwgV3JpdGVyIHBsdWdpbk91dCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKKwkJLy8gTWFrZSBldmVyeXRoaW5nIGNvbWUgb3V0IGluIGFscGhhYmV0aWNhbCBvcmRlcgorCisJCWZpbmFsIFN0cmluZyBjb3VudHJ5Q29kZVN0cmluZyA9IG1vZGVsUmVjb3JkLmdldElkKCkudG9Mb3dlckNhc2UoKTsKKwkJZmluYWwgU3RyaW5nIGNvdW50cnlDYXRlZ29yeUlkID0gbGV2ZWxDYXRlZ29yeUlkW21vZGVsUmVjb3JkCisJCQkJLmdldE1heEFkbWluTGV2ZWwoKV0KKwkJCQkrICIuIiArIGNvdW50cnlDb2RlU3RyaW5nOworCisJCS8vIEhhdmUgd2Ugc2VlbiB0aGlzIGNvdW50cnkgY2F0ZWdvcnkgaWQgYmVmb3JlPworCQlpZiAoY291bnRyeUNhdGVnb3JpZXMuZ2V0KGNvdW50cnlDYXRlZ29yeUlkKSA9PSBudWxsKSB7CisJCQkvLyBObworCQkJLy8gQ3JlYXRlIGEgY2F0ZWdvcnkgZm9yIHRoZSBjb3VudHJ5CisJCQltb2RlbE91dC53cml0ZShNZXNzYWdlRm9ybWF0LmZvcm1hdCgKKwkJCQkJQ291bnRyeUdyYXBoQ3JlYXRvci5YTUxfQ0FURUdPUllfRUxFTUVOVF9PUEVOLAorCQkJCQluZXcgT2JqZWN0W10geyBjb3VudHJ5Q2F0ZWdvcnlJZCwgbW9kZWxSZWNvcmQuZ2V0SWQoKSwKKwkJCQkJCQlsZXZlbENhdGVnb3J5SWRbbW9kZWxSZWNvcmQuZ2V0TWF4QWRtaW5MZXZlbCgpXSB9KSk7CisJCQltb2RlbE91dC53cml0ZSgiXG4iKTsKKwkJCS8vIC4uLmFuZCByZW1lbWJlciB3ZSBkaWQgc28gd2UgZG9uJ3QgZG8gaXQgYWdhaW4KKwkJCWNvdW50cnlDYXRlZ29yaWVzLnB1dChjb3VudHJ5Q2F0ZWdvcnlJZCwgY291bnRyeUNhdGVnb3J5SWQpOworCQl9IC8vIGlmIHdlIGhhdmVuJ3Qgc2VlbiB0aGlzIGNhdGVnb3J5IGlkIGJlZm9yZQorCisJCS8vIHBsdWdpbk91dC53cml0ZSgiIyBEdWJsaW4gQ29yZSBmb3IgIgorCQkvLyArIGdyYXBoUmVjb3JkLmdldENvdW50cnlDb2RlKCkudG9TdHJpbmcoKSArICJcbiIpOworCQkvLyAvLyBXZSBkb24ndCBOTFMgdGhlIElTTzMwMTY2IGFscGhhLTMgY29kZXMKKworCQlDb3VudHJ5R3JhcGhDcmVhdG9yLm91dHB1dER1YmxpbkNvcmUobW9kZWxSZWNvcmQsIGNvdW50cnlDYXRlZ29yeUlkLAorCQkJCWRjVmFsdWVLZXlNYXAsIG1vZGVsT3V0LCBwbHVnaW5PdXQpOworCisJfSAvLyBvdXRwdXRNb2RlbFJlY29yZAorCisJLyoqCisJICogQHJldHVybiBhIG1hcHBpbmcgYmV0d2VlbiBjb3VudHJ5IGNvZGUgYW5kIGEgbGlzdCBvZiB0aGUgbW9kZWxzIGZvciB0aGUKKwkgKiAgICAgICAgIGNvdW50cnkuIFRoZSBtb2RlbHMgYXJlIG9mIG1peGVkIGFkbWluaXN0cmF0aW9uIGxldmVscy4KKwkgKi8KKwlwdWJsaWMgTWFwPENvdW50cnlDb2RlLCBMaXN0PENvdW50cnlNb2RlbFJlY29yZD4+IGNyZWF0ZUNvdW50cnlNb2RlbHMoKSB7CisJCWZpbmFsIE1hcDxDb3VudHJ5Q29kZSwgTGlzdDxDb3VudHJ5TW9kZWxSZWNvcmQ+PiByZXRWYWx1ZSA9IG5ldyBIYXNoTWFwPENvdW50cnlDb2RlLCBMaXN0PENvdW50cnlNb2RlbFJlY29yZD4+KCk7CisKKwkJZmluYWwgTGlzdDxDb3VudHJ5Q29kZT4gY291bnRyeUNvZGVzID0gQ291bnRyeURpcmVjdG9yeVV0aWxpdGllcworCQkJCS5nZXRBbGxDb3VudHJ5Q29kZXMoKTsKKwkJQ29sbGVjdGlvbnMuc29ydChjb3VudHJ5Q29kZXMpOworCisJCWZpbmFsIENvdW50cnlHcmFwaENyZWF0b3IgY2djID0gbmV3IENvdW50cnlHcmFwaENyZWF0b3IoKTsKKworCQlNYXA8Q291bnRyeUNvZGUsIExpc3Q8R3JhcGhSZWNvcmQ+PiBub2RlR3JhcGhzID0gY2djCisJCQkJLmNyZWF0ZUdyYXBoUmVjb3Jkcyhjb3VudHJ5Q29kZXMsIERhdGFUeXBlLm5vZGUpOworCisJCU1hcDxDb3VudHJ5Q29kZSwgTGlzdDxHcmFwaFJlY29yZD4+IGFyZWFHcmFwaHMgPSBjZ2MKKwkJCQkuY3JlYXRlR3JhcGhSZWNvcmRzKGNvdW50cnlDb2RlcywgRGF0YVR5cGUuYXJlYSk7CisKKwkJZm9yIChDb3VudHJ5Q29kZSBjb3VudHJ5Q29kZSA6IGNvdW50cnlDb2RlcykgeworCQkJTGlzdDxHcmFwaFJlY29yZD4gbm9kZUdyYXBoUmVjb3JkcyA9IG5vZGVHcmFwaHMuZ2V0KGNvdW50cnlDb2RlKTsKKwkJCUxpc3Q8R3JhcGhSZWNvcmQ+IGFyZWFHcmFwaFJlY29yZHMgPSBhcmVhR3JhcGhzLmdldChjb3VudHJ5Q29kZSk7CisKKwkJCS8vIEZpbmQgdGhlIG1heGltdW0gYWRtaW5zdHJhdGlvbiBsZXZlbCB3ZSdyZSB3b3JraW5nIHdpdGgKKwkJCWZpbmFsIGludCBtYXhOb2RlQWRtaW5MZXZlbCA9IG5vZGVHcmFwaFJlY29yZHMgIT0gbnVsbCA/IENvdW50cnlHcmFwaENyZWF0b3IKKwkJCQkJLmdldE1heEFkbWluTGV2ZWwobm9kZUdyYXBoUmVjb3JkcykKKwkJCQkJOiAtMTsKKwkJCWZpbmFsIGludCBtYXhBcmVhQWRtaW5MZXZlbCA9IGFyZWFHcmFwaFJlY29yZHMgIT0gbnVsbCA/IENvdW50cnlHcmFwaENyZWF0b3IKKwkJCQkJLmdldE1heEFkbWluTGV2ZWwoYXJlYUdyYXBoUmVjb3JkcykKKwkJCQkJOiAtMTsKKwkJCWludCBtYXhBZG1pbkxldmVsID0gTWF0aC5tYXgobWF4QXJlYUFkbWluTGV2ZWwsIG1heE5vZGVBZG1pbkxldmVsKTsKKworCQkJLy8gQ3JlYXRlIG9uZSBjb3VudHJ5IG1vZGVsIGZvciBlYWNoIGFkbWluaXN0cmF0aW9uIGxldmVsCisJCQlmaW5hbCBMaXN0PENvdW50cnlNb2RlbFJlY29yZD4gY291bnRyeU1vZGVscyA9IG5ldyBBcnJheUxpc3Q8Q291bnRyeU1vZGVsUmVjb3JkPigpOworCQkJZm9yIChpbnQgYWRtaW5MZXZlbCA9IDA7IGFkbWluTGV2ZWwgPCBtYXhBZG1pbkxldmVsICsgMTsgYWRtaW5MZXZlbCsrKSB7CisKKwkJCQkvLyBEaWQgd2UgZ2V0IG5vZGVzPworCQkJCWlmIChub2RlR3JhcGhSZWNvcmRzID09IG51bGwpIHsKKwkJCQkJLy8gTm8KKwkJCQkJU3lzdGVtLm91dC5wcmludGxuKCJTa2lwcGluZyBjb3VudHJ5IFwiIgorCQkJCQkJCSsgY291bnRyeUNvZGUudG9TdHJpbmcoKSArICJcIiBhdCBsZXZlbCBcIiIKKwkJCQkJCQkrIGFkbWluTGV2ZWwgKyAiXCIgYmVjYXVzZSB0aGVyZSBhcmUgbm8gbm9kZXMiKTsKKwkJCQkJY29udGludWU7CisJCQkJfQorCQkJCS8vIERpZCB3ZSBnZXQgYXJlYSBsYWJlbHM/CisJCQkJaWYgKGFyZWFHcmFwaFJlY29yZHMgPT0gbnVsbCkgeworCQkJCQkvLyBObworCQkJCQlTeXN0ZW0ub3V0LnByaW50bG4oIlNraXBwaW5nIGNvdW50cnkgXCIiCisJCQkJCQkJKyBjb3VudHJ5Q29kZS50b1N0cmluZygpICsgIlwiIGF0IGxldmVsIFwiIgorCQkJCQkJCSsgYWRtaW5MZXZlbAorCQkJCQkJCSsgIlwiIGJlY2F1c2UgdGhlcmUgYXJlIG5vIGFyZWEgbGFiZWxzIik7CisJCQkJCWNvbnRpbnVlOworCQkJCX0KKworCQkJCWZpbmFsIExpc3Q8R3JhcGhSZWNvcmQ+IG1vZGVsUmVjb3JkcyA9IG5ldyBBcnJheUxpc3Q8R3JhcGhSZWNvcmQ+KCk7CisJCQkJZmluYWwgR3JhcGhSZWNvcmQgbm9kZUdyYXBoID0gZ2V0QnlBZG1pbkxldmVsKGFkbWluTGV2ZWwsCisJCQkJCQlub2RlR3JhcGhSZWNvcmRzKTsKKwkJCQlmaW5hbCBHcmFwaFJlY29yZCBhcmVhR3JhcGggPSBnZXRCeUFkbWluTGV2ZWwoYWRtaW5MZXZlbCwKKwkJCQkJCWFyZWFHcmFwaFJlY29yZHMpOworCQkJCW1vZGVsUmVjb3Jkcy5hZGQobm9kZUdyYXBoKTsKKwkJCQltb2RlbFJlY29yZHMuYWRkKGFyZWFHcmFwaCk7CisJCQkJY291bnRyeU1vZGVscy5hZGQobmV3IENvdW50cnlNb2RlbFJlY29yZChjcmVhdGVNb2RlbCgKKwkJCQkJCWNvdW50cnlDb2RlLCBhZG1pbkxldmVsLCBtb2RlbFJlY29yZHMsCisJCQkJCQlDb3VudHJ5R3JhcGhDcmVhdG9yLkdFT0dSQVBIWV9GSUxFX1VSSV9QUkVGSVgpLAorCQkJCQkJY291bnRyeUNvZGUsIGFkbWluTGV2ZWwpKTsKKwkJCX0gLy8gZm9yIGFkbWluTGV2ZWwKKworCQkJLy8gQW55IGNvdW50cnkgbW9kZWxzIGNyZWF0ZWQ/CisJCQlpZiAoY291bnRyeU1vZGVscy5zaXplKCkgPiAwKSB7CisJCQkJLy8gWWVzCisJCQkJcmV0VmFsdWUucHV0KGNvdW50cnlDb2RlLCBjb3VudHJ5TW9kZWxzKTsKKwkJCX0KKworCQl9IC8vIGZvciBlYWNoIGNvdW50cnkgY29kZQorCisJCXJldHVybiByZXRWYWx1ZTsKKwl9IC8vIGNyZWF0ZUNvdW50cnlNb2RlbHMKKworCS8qKgorCSAqIENyZWF0ZSB0aGUgY291bnRyeSBtb2RlbHMsIGJ1dCBvcmdhbml6ZSB0aGVtIGJ5IGFkbWluaXN0cmF0aW9uIGxldmVsCisJICogCisJICogQHJldHVybiBhIGxpc3Qgb2YgbGlzdHMgb2YgTW9kZWxSZWNvcmQncywgdGhlIDAndGggZWxlbWVudCBvZiB0aGUgbGlzdAorCSAqICAgICAgICAgY29udGFpbnMgYSBsaXN0IG9mIG1vZGVscyBhdCBhZG1pbmlzdHJhdGlvbiBsZXZlbCAwCisJICovCisJcHVibGljIExpc3Q8TGlzdDxDb3VudHJ5TW9kZWxSZWNvcmQ+PiBjcmVhdGVDb3VudHJ5TW9kZWxzMigpIHsKKwkJZmluYWwgTWFwPENvdW50cnlDb2RlLCBMaXN0PENvdW50cnlNb2RlbFJlY29yZD4+IGNvdW50cnlNb2RlbHMgPSBjcmVhdGVDb3VudHJ5TW9kZWxzKCk7CisKKwkJLy8gUmVvcmdhbml6ZSB0aGUgbW9kZWxzIGJ5IGFkbWluaXN0cmF0aW9uIGxldmVsCisJCWZpbmFsIGludCBtYXhBZG1pbkxldmVsID0gZ2V0TWF4QWRtaW5MZXZlbChjb3VudHJ5TW9kZWxzKTsKKwkJTGlzdDxMaXN0PENvdW50cnlNb2RlbFJlY29yZD4+IHJldFZhbHVlID0gbmV3IEFycmF5TGlzdDxMaXN0PENvdW50cnlNb2RlbFJlY29yZD4+KCk7CisJCWZvciAoaW50IGFkbWluTGV2ZWwgPSAwOyBhZG1pbkxldmVsIDwgbWF4QWRtaW5MZXZlbCArIDE7IGFkbWluTGV2ZWwrKykgeworCQkJcmV0VmFsdWUuYWRkKG5ldyBBcnJheUxpc3Q8Q291bnRyeU1vZGVsUmVjb3JkPigpKTsKKwkJfSAvLyBmb3IgYWRtaW5MZXZlbAorCisJCWZvciAoRW50cnk8Q291bnRyeUNvZGUsIExpc3Q8Q291bnRyeU1vZGVsUmVjb3JkPj4gZW50cnkgOiBjb3VudHJ5TW9kZWxzCisJCQkJLmVudHJ5U2V0KCkpIHsKKwkJCWZvciAoQ291bnRyeU1vZGVsUmVjb3JkIG1vZGVsUmVjb3JkIDogZW50cnkuZ2V0VmFsdWUoKSkgeworCQkJCXJldFZhbHVlLmdldChtb2RlbFJlY29yZC5nZXRNYXhBZG1pbkxldmVsKCkpLmFkZChtb2RlbFJlY29yZCk7CisJCQl9IC8vIGZvcmVhY2ggTW9kZWxSZWNvcmQKKwkJfSAvLyBmb3JlYWNoIGNvdW50cnlNb2RlbHMuZW50cnlTZXQKKworCQlyZXR1cm4gcmV0VmFsdWU7CisJfSAvLyBjcmVhdGVDb3VudHJ5TW9kZWxzMgorCisJLyoqCisJICogQHBhcmFtIGNvdW50cnlDb2RlCisJICogQHBhcmFtIGFkbWluTGV2ZWwKKwkgKiBAcGFyYW0gZ3JhcGhSZWNvcmRzCisJICogQHBhcmFtIGRhdGFGaWxlVVJJUHJlZml4CisJICogQHJldHVybiBhIG1vZGVsIHdpdGggYWxsIG9mIHRoZSBncmFwaHMgYWRkZWQKKwkgKi8KKwlAU3VwcHJlc3NXYXJuaW5ncygidW5jaGVja2VkIikKKwlwcml2YXRlIE1vZGVsIGNyZWF0ZU1vZGVsKGZpbmFsIENvdW50cnlDb2RlIGNvdW50cnlDb2RlLAorCQkJZmluYWwgaW50IGFkbWluTGV2ZWwsIGZpbmFsIExpc3Q8R3JhcGhSZWNvcmQ+IGdyYXBoUmVjb3JkcywKKwkJCWZpbmFsIFN0cmluZyBkYXRhRmlsZVVSSVByZWZpeCkgeworCQlmaW5hbCBNb2RlbCByZXRWYWx1ZSA9IE1vZGVsRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlTW9kZWwoKTsKKwkJZmluYWwgRHVibGluQ29yZSBkYyA9IHJldFZhbHVlLmdldER1YmxpbkNvcmUoKTsKKwkJZGMucG9wdWxhdGUoKTsKKwkJZGMuc2V0VGl0bGUoQ291bnRyeURpcmVjdG9yeVV0aWxpdGllcy5nZXRDb3VudHJ5TmFtZShjb3VudHJ5Q29kZSkKKwkJCQkrICIgTW9kZWwgKExldmVsICIgKyBhZG1pbkxldmVsICsgIiwgIiArIGdyYXBoUmVjb3Jkcy5zaXplKCkKKwkJCQkrICIgZ3JhcGhzKSIpOworCQkvLyBkYy5zZXRTb3VyY2Uobm9uRGF0YVByb3BlcnRpZXMuZ2V0KFNPVVJDRV9QUk9QRVJUWSkpOworCisJCXJldFZhbHVlLnNldFVSSShVUkkuY3JlYXRlVVJJKE1lc3NhZ2VGb3JtYXQuZm9ybWF0KAorCQkJCUNvdW50cnlHcmFwaENyZWF0b3IuSURFTlRJRklFUl9GT1JNQVQsIGRhdGFGaWxlVVJJUHJlZml4LAorCQkJCWNvdW50cnlDb2RlLCBjb3VudHJ5Q29kZS50b1N0cmluZygpICsgIl8iCisJCQkJCQkrIEludGVnZXIudG9TdHJpbmcoYWRtaW5MZXZlbCksICJtb2RlbCIpKSk7CisKKwkJZm9yIChHcmFwaFJlY29yZCBtb2RlbFJlY29yZCA6IGdyYXBoUmVjb3JkcykgeworCQkJLy8gQSBudWxsIHZhbHVlPworCQkJaWYgKG1vZGVsUmVjb3JkICE9IG51bGwpIHsKKwkJCQkvLyBObworCQkJCXJldFZhbHVlLmdldEdyYXBocygpLmFkZChtb2RlbFJlY29yZC5nZXRHcmFwaCgpKTsKKwkJCX0KKwkJfSAvLyBmb3IgZWFjaCBub2RlIGRhdGEKKworCQlyZXR1cm4gcmV0VmFsdWU7CisJfSAvLyBjcmVhdGVNb2RlbAorCisJLyoqCisJICogQHBhcmFtIGdyYXBoUmVjb3JkcworCSAqICAgICAgICAgICAgYSBsaXN0IG9mIEdyYXBoUmVjb3JkcyB0byBzZWFyY2gKKwkgKiBAcmV0dXJuIHRoZSBmaXJzdCBHcmFwaFJlY29yZCB0aGF0IG1hdGNoZXMgdGhlIGFkbWluaXN0cmF0aW9uIGxldmVsIG9yCisJICogICAgICAgICBudWxsIGlmIG5vdCBmb3VuZAorCSAqLworCXByaXZhdGUgR3JhcGhSZWNvcmQgZ2V0QnlBZG1pbkxldmVsKGZpbmFsIGludCBhZG1pbkxldmVsLAorCQkJTGlzdDxHcmFwaFJlY29yZD4gbm9kZUdyYXBoUmVjb3JkcykgeworCQlHcmFwaFJlY29yZCByZXRWYWx1ZSA9IG51bGw7CisJCWZvciAoR3JhcGhSZWNvcmQgcmVjb3JkIDogbm9kZUdyYXBoUmVjb3JkcykgeworCQkJLy8gSXMgdGhpcyBhdCB0aGUgcmlnaHQgYWRtaW4gbGV2ZWw/CisJCQlpZiAocmVjb3JkLmdldEFkbWluTGV2ZWwoKSA9PSBhZG1pbkxldmVsKSB7CisJCQkJLy8gWWVzCisJCQkJcmV0VmFsdWUgPSByZWNvcmQ7CisJCQl9CisJCX0KKwkJcmV0dXJuIHJldFZhbHVlOworCX0gLy8gZ2V0QnlBZG1pbkxldmVsCisKKwkvKioKKwkgKiBAcGFyYW0gbW9kZWxzCisJICogQHJldHVybiB0aGUgbWF4aW11bSBhZG1pbmlzdHJhdGlvbiBsZXZlbCBmb3VuZAorCSAqLworCXB1YmxpYyBzdGF0aWMgaW50IGdldE1heEFkbWluTGV2ZWwoCisJCQlNYXA8Q291bnRyeUNvZGUsIExpc3Q8Q291bnRyeU1vZGVsUmVjb3JkPj4gbW9kZWxzKSB7CisJCWludCBtYXhBZG1pbkxldmVsID0gMDsKKwkJZm9yIChMaXN0PENvdW50cnlNb2RlbFJlY29yZD4gbGlzdCA6IG1vZGVscy52YWx1ZXMoKSkgeworCQkJbWF4QWRtaW5MZXZlbCA9IE1hdGgubWF4KG1heEFkbWluTGV2ZWwsIGdldE1heEFkbWluTGV2ZWwobGlzdCkpOworCQl9IC8vIGZvcgorCQlyZXR1cm4gbWF4QWRtaW5MZXZlbDsKKwl9IC8vIGdldE1heEFkbWluTGV2ZWwKKworCS8qKgorCSAqIEBwYXJhbSBtb2RlbFJlY29yZHMKKwkgKiBAcmV0dXJuIHRoZSBtYXhpbXVtIGFkbWluaXN0cmF0aW9uIGxldmVsIGZvdW5kIGluIGFsbCBvZiB0aGUgbW9kZWwKKwkgKiAgICAgICAgIHJlY29yZHMKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGludCBnZXRNYXhBZG1pbkxldmVsKExpc3Q8Q291bnRyeU1vZGVsUmVjb3JkPiBtb2RlbFJlY29yZHMpIHsKKwkJaW50IG1heEFkbWluTGV2ZWwgPSAwOworCQlmb3IgKENvdW50cnlNb2RlbFJlY29yZCBtb2RlbFJlY29yZCA6IG1vZGVsUmVjb3JkcykgeworCQkJbWF4QWRtaW5MZXZlbCA9IE1hdGgubWF4KG1heEFkbWluTGV2ZWwsIG1vZGVsUmVjb3JkCisJCQkJCS5nZXRNYXhBZG1pbkxldmVsKCkpOworCQl9CisJCXJldHVybiBtYXhBZG1pbkxldmVsOworCX0gLy8gZ2V0TWF4QWRtaW5MZXZlbAorCisJLyoqCisJICogVGhpcyBjbGFzcyByZXByZXNlbnRzIGEgbW9kZWwuCisJICovCisJYWJzdHJhY3QgcHVibGljIHN0YXRpYyBjbGFzcyBNb2RlbFJlY29yZCBleHRlbmRzIFJlY29yZCB7CisKKwkJLyoqCisJCSAqIEBwYXJhbSBtb2RlbAorCQkgKiAgICAgICAgICAgIHRoZSBtb2RlbAorCQkgKiBAcGFyYW0gaWQKKwkJICogICAgICAgICAgICB0aGUgaWQgb2YgdGhlIHRoZSBtb2RlbAorCQkgKiBAcGFyYW0gYWRtaW5MZXZlbAorCQkgKiAgICAgICAgICAgIHRoZSBhZG1pbmlzdHJhdGlvbiBsZXZlbCBvZiB0aGUgY29udGVudHMgb2YgdGhlIG1vZGVsCisJCSAqLworCQlwdWJsaWMgTW9kZWxSZWNvcmQoZmluYWwgTW9kZWwgbW9kZWwsIGZpbmFsIFN0cmluZyBpZCwKKwkJCQlmaW5hbCBpbnQgYWRtaW5MZXZlbCkgeworCQkJdGhpcyhtb2RlbCwgaWQsIENvbGxlY3Rpb25zLnNpbmdsZXRvbkxpc3QoSW50ZWdlcgorCQkJCQkudmFsdWVPZihhZG1pbkxldmVsKSkpOworCQl9IC8vIE1vZGVsUmVjb3JkCisKKwkJLyoqCisJCSAqIEBwYXJhbSBtb2RlbAorCQkgKiAgICAgICAgICAgIHRoZSBtb2RlbAorCQkgKiBAcGFyYW0gaWQKKwkJICogICAgICAgICAgICB0aGUgaWQgb2YgdGhlIHRoZSBtb2RlbAorCQkgKiBAcGFyYW0gYWRtaW5MZXZlbHMKKwkJICogICAgICAgICAgICB0aGUgYWRtaW5pc3RyYXRpb24gbGV2ZWwgb2YgdGhlIGNvbnRlbnRzIG9mIHRoZSBtb2RlbAorCQkgKi8KKwkJcHVibGljIE1vZGVsUmVjb3JkKGZpbmFsIE1vZGVsIG1vZGVsLCBmaW5hbCBTdHJpbmcgaWQsCisJCQkJZmluYWwgTGlzdDxJbnRlZ2VyPiBhZG1pbkxldmVscykgeworCQkJc3VwZXIobW9kZWwsIGlkLCBhZG1pbkxldmVscyk7CisJCX0gLy8gTW9kZWxSZWNvcmQKKworCQkvKioKKwkJICogQHJldHVybiB0aGUgbW9kZWwKKwkJICovCisJCXB1YmxpYyBmaW5hbCBNb2RlbCBnZXRNb2RlbCgpIHsKKwkJCXJldHVybiAoTW9kZWwpIGlkZW50aWZpYWJsZTsKKwkJfSAvLyBnZXRNb2RlbAorCisJCS8qKgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkuZ3JhcGguQ291bnRyeUdyYXBoQ3JlYXRvci5SZWNvcmQjZ2V0T3V0cHV0VHlwZSgpCisJCSAqLworCQlAT3ZlcnJpZGUKKwkJcHVibGljIFN0cmluZyBnZXRPdXRwdXRUeXBlKCkgeworCQkJcmV0dXJuICJtb2RlbCI7CisJCX0KKwl9IC8vIE1vZGVsUmVjb3JkCisKKwkvKioKKwkgKiBUaGlzIGNsYXNzIHJlcHJlc2VudHMgYSBtb2RlbCBvZiBhIGNvdW50cnkgYW5kIGl0cyBkZXRhaWxzLgorCSAqLworCXB1YmxpYyBzdGF0aWMgY2xhc3MgQ291bnRyeU1vZGVsUmVjb3JkIGV4dGVuZHMgTW9kZWxSZWNvcmQgeworCisJCS8qKgorCQkgKiBAcGFyYW0gbW9kZWwKKwkJICogICAgICAgICAgICB0aGUgbW9kZWwKKwkJICogQHBhcmFtIGNvdW50cnlDb2RlCisJCSAqICAgICAgICAgICAgdGhlIGNvZGUgb2YgdGhlIGNvdW50cnkgdGhlIG1vZGVsIHJlcHJlc2VudHMKKwkJICogQHBhcmFtIGFkbWluTGV2ZWwKKwkJICogICAgICAgICAgICB0aGUgYWRtaW5pc3RyYXRpb24gbGV2ZWwgb2YgdGhlIGNvbnRlbnRzIG9mIHRoZSBtb2RlbAorCQkgKi8KKwkJcHVibGljIENvdW50cnlNb2RlbFJlY29yZChmaW5hbCBNb2RlbCBtb2RlbCwKKwkJCQlmaW5hbCBDb3VudHJ5Q29kZSBjb3VudHJ5Q29kZSwgZmluYWwgaW50IGFkbWluTGV2ZWwpIHsKKwkJCXN1cGVyKG1vZGVsLCBjb3VudHJ5Q29kZS50b1N0cmluZygpLCBhZG1pbkxldmVsKTsKKwkJfSAvLyBDb3VudHJ5TW9kZWxSZWNvcmQKKworCQkvKioKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5LmdyYXBoLkNvdW50cnlHcmFwaENyZWF0b3IuUmVjb3JkI2dldFR5cGUoKQorCQkgKi8KKwkJQE92ZXJyaWRlCisJCXB1YmxpYyBTdHJpbmcgZ2V0VHlwZSgpIHsKKwkJCXJldHVybiAiY291bnRyeSI7CisJCX0KKworCX0gLy8gQ291bnRyeU1vZGVsUmVjb3JkCisKK30gLy8gQ291bnRyeU1vZGVsQ3JlYXRvcgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3Rlc3RzL3V0aWwvVGVzdFV0aWwuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS90ZXN0cy91dGlsL1Rlc3RVdGlsLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWYzYTBjYwotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS90ZXN0cy91dGlsL1Rlc3RVdGlsLmphdmEKQEAgLTAsMCArMSw0ODMgQEAKKy8vIFRlc3RVdGlsLmphdmEKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA2LCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5VUkk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLlNURU1VUkk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5EdWJsaW5Db3JlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uSWRlbnRpZmlhYmxlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5EeW5hbWljRWRnZUxhYmVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5EeW5hbWljTm9kZUxhYmVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5FZGdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5HcmFwaEZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkxhYmVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5Ob2RlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5TdGF0aWNFZGdlTGFiZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLlN0YXRpY05vZGVMYWJlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguaW1wbC5FZGdlSW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuRGVjb3JhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5FZGdlRGVjb3JhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5Ob2RlRGVjb3JhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC5kZWNvcmF0b3JzLkRlY29yYXRvcnNGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC5kZWNvcmF0b3JzLlRlc3ROb2RlRGVjb3JhdG9yMTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwubGFiZWxzLkxhYmVsc0ZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsLmxhYmVscy5UZXN0RHluYW1pY0VkZ2VMYWJlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwubGFiZWxzLlRlc3REeW5hbWljTGFiZWwxOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC5sYWJlbHMuVGVzdER5bmFtaWNOb2RlTGFiZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsLmxhYmVscy5UZXN0SW50ZWdlckxhYmVsVmFsdWU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsLmxhYmVscy5UZXN0TGFiZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsLmxhYmVscy5UZXN0U3RhdGljRWRnZUxhYmVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC5sYWJlbHMuVGVzdFN0YXRpY05vZGVMYWJlbDsKKworLyoqCisgKiBUaGlzIGNsYXNzIGNvbnRhaW5zIHV0aWxpdHkgbWV0aG9kcyBmb3IgdGVzdGluZyBTVEVNLgorICovCitwdWJsaWMgY2xhc3MgVGVzdFV0aWwgeworCisJLyoqCisJICogVGhpcyBpcyBhIGNvdW50ZXIgdXNlZCB0byB1bmlxdWVseSBudW1iZXIgdGhlIGxhYmVscyB0aGF0IGFyZSBjcmVhdGVkLgorCSAqIAorCSAqIEBzZWUgI2NyZWF0ZVN0YXRpY0xhYmVsKFVSSSkKKwkgKi8KKwlwcml2YXRlIHN0YXRpYyBpbnQgbGFiZWxDb3VudGVyID0gMDsKKworCS8qKgorCSAqIFRoaXMgaXMgYSBjb3VudGVyIHVzZWQgdG8gdW5pcXVlbHkgbnVtYmVyIHRoZSBkeW5hbWljIGxhYmVscyB0aGF0IGFyZQorCSAqIGNyZWF0ZWQuCisJICogCisJICogQHNlZSAjY3JlYXRlRHluYW1pY0xhYmVsKFVSSSkKKwkgKi8KKwlwcml2YXRlIHN0YXRpYyBpbnQgZHluYW1pY0xhYmVsQ291bnRlciA9IDA7CisKKwkvKioKKwkgKiBUaGlzIGlzIGEgY291bnRlciB1c2VkIHRvIHVuaXF1ZWx5IG51bWJlciB0aGUgZWRnZXMgdGhhdCBhcmUgY3JlYXRlZC4KKwkgKiAKKwkgKiBAc2VlICNjcmVhdGVOZXh0RWRnZVVSSSgpCisJICovCisJcHJpdmF0ZSBzdGF0aWMgaW50IGVkZ2VDb3VudGVyID0gMDsKKworCS8qKgorCSAqIFRoaXMgaXMgYSBjb3VudGVyIHVzZWQgdG8gdW5pcXVlbHkgbnVtYmVyIHRoZSBub2RlcyB0aGF0IGFyZSBjcmVhdGVkLgorCSAqIAorCSAqIEBzZWUgI2NyZWF0ZU5leHROb2RlVVJJKCkKKwkgKi8KKwlwcml2YXRlIHN0YXRpYyBpbnQgbm9kZUNvdW50ZXIgPSAwOworCisJLyoqCisJICogVGhpcyBpcyBhIGNvdW50ZXIgdXNlZCB0byBnZW5lcmF0ZSB1bmlxdWUgVVJJJ3Mgb2YgdGhpbmdzIHRvIGxhYmVsCisJICogCisJICogQHNlZSAjY3JlYXRlRml4dHVyZSgpCisJICovCisJcHJpdmF0ZSBzdGF0aWMgaW50IGlkQ291bnRlciA9IDA7CisKKwkvKioKKwkgKiBSZXNldCB0aGUgY291bnRlcnMKKwkgKi8KKwlwdWJsaWMgc3RhdGljIHZvaWQgcmVzZXRDb3VudGVycygpIHsKKwkJbGFiZWxDb3VudGVyID0gMDsKKwkJZHluYW1pY0xhYmVsQ291bnRlciA9IDA7CisJCWVkZ2VDb3VudGVyID0gMDsKKwkJbm9kZUNvdW50ZXIgPSAwOworCQlpZENvdW50ZXIgPSAwOworCX0KKworCS8qKgorCSAqIEByZXR1cm4gYSBzdGF0aWMgbGFiZWwgaW5zdGFuY2UKKwkgKi8KKwlwdWJsaWMgc3RhdGljIExhYmVsIGNyZWF0ZVN0YXRpY0xhYmVsKCkgeworCQlyZXR1cm4gY3JlYXRlU3RhdGljTGFiZWwoY3JlYXRlTmV4dElkZW50aWZpYWJsZVRvTGFiZWxVUkkoKSk7CisJfSAvLyBjcmVhdGVTdGF0aWNMYWJlbAorCisJLyoqCisJICogQHBhcmFtIHVyaU9mSWRlbnRpZmlhYmxlVG9CZUxhYmVsZWQKKwkgKiBAcmV0dXJuIGEgc3RhdGljIGxhYmVsIGluc3RhbmNlCisJICovCisJcHVibGljIHN0YXRpYyBMYWJlbCBjcmVhdGVTdGF0aWNMYWJlbChmaW5hbCBVUkkgdXJpT2ZJZGVudGlmaWFibGVUb0JlTGFiZWxlZCkgeworCQlyZXR1cm4gY3JlYXRlU3RhdGljTGFiZWwoY3JlYXRlTmV4dExhYmVsVVJJKCksCisJCQkJdXJpT2ZJZGVudGlmaWFibGVUb0JlTGFiZWxlZCk7CisJfSAvLyBjcmVhdGVTdGF0aWNMYWJlbAorCisJLyoqCisJICogQHBhcmFtIGxhYmVsVVJJCisJICogQHBhcmFtIHVyaU9mSWRlbnRpZmlhYmxlVG9CZUxhYmVsZWQKKwkgKiBAcmV0dXJuIGEgc3RhdGljIGxhYmVsIGluc3RhbmNlCisJICovCisJcHVibGljIHN0YXRpYyBMYWJlbCBjcmVhdGVTdGF0aWNMYWJlbChmaW5hbCBVUkkgbGFiZWxVUkksCisJCQlmaW5hbCBVUkkgdXJpT2ZJZGVudGlmaWFibGVUb0JlTGFiZWxlZCkgeworCQlmaW5hbCBUZXN0TGFiZWwgcmV0VmFsdWUgPSBMYWJlbHNGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVUZXN0TGFiZWwoKTsKKwkJcmV0VmFsdWUuc2V0VVJJKGxhYmVsVVJJKTsKKwkJcmV0VmFsdWUuc2V0VVJJT2ZJZGVudGlmaWFibGVUb0JlTGFiZWxlZCh1cmlPZklkZW50aWZpYWJsZVRvQmVMYWJlbGVkKTsKKworCQlmaW5hbCBUZXN0SW50ZWdlckxhYmVsVmFsdWUgc3RhdGljTGFiZWxDdXJyZW50VmFsdWUgPSBMYWJlbHNGYWN0b3J5LmVJTlNUQU5DRQorCQkJCS5jcmVhdGVUZXN0SW50ZWdlckxhYmVsVmFsdWUoKTsKKwkJc3RhdGljTGFiZWxDdXJyZW50VmFsdWUKKwkJCQkuc2V0SShUZXN0SW50ZWdlckxhYmVsVmFsdWUuQ1VSUkVOVF9MQUJFTF9JTlRFR0VSX1ZBTFVFKTsKKwkJcmV0VmFsdWUuc2V0Q3VycmVudFZhbHVlKHN0YXRpY0xhYmVsQ3VycmVudFZhbHVlKTsKKworCQlhc3NlcnQgcmV0VmFsdWUuc2FuZSgpOworCisJCXJldHVybiByZXRWYWx1ZTsKKwl9IC8vIGNyZWF0ZVN0YXRpY0xhYmVsCisKKwkvKioKKwkgKiBAcmV0dXJuIGEgdW5pcXVlIFVSSSBmb3IgYSBsYWJlbC4KKwkgKi8KKwlwcml2YXRlIHN0YXRpYyBVUkkgY3JlYXRlTmV4dExhYmVsVVJJKCkgeworCQlyZXR1cm4gU1RFTVVSSS5jcmVhdGVVUkkoIkxBQkVMIiArICIvIiArIGxhYmVsQ291bnRlcisrKTsKKwl9IC8vIGNyZWF0ZU5leHRMYWJlbFVSSQorCisJLyoqCisJICogQHBhcmFtIHVyaU9mSWRlbnRpZmlhYmxlVG9CZUxhYmVsZWQKKwkgKiBAcmV0dXJuIGEgdW5pcXVlIGR5bmFtaWMgbGFiZWwKKwkgKi8KKwlwdWJsaWMgc3RhdGljIFRlc3REeW5hbWljTGFiZWwxIGNyZWF0ZUR5bmFtaWNMYWJlbCgKKwkJCWZpbmFsIFVSSSB1cmlPZklkZW50aWZpYWJsZVRvQmVMYWJlbGVkKSB7CisJCWZpbmFsIFRlc3ROb2RlRGVjb3JhdG9yMSB0bmQgPSBEZWNvcmF0b3JzRmFjdG9yeS5lSU5TVEFOQ0UKKwkJCQkuY3JlYXRlVGVzdE5vZGVEZWNvcmF0b3IxKCk7CisJCXJldHVybiBjcmVhdGVEeW5hbWljTGFiZWwoY3JlYXRlTmV4dER5bmFtaWNMYWJlbFVSSSgpLAorCQkJCXVyaU9mSWRlbnRpZmlhYmxlVG9CZUxhYmVsZWQsIHRuZCk7CisJfSAvLyBjcmVhdGVEeW5hbWljTGFiZWwKKworCS8qKgorCSAqIEBwYXJhbSB1cmlPZklkZW50aWZpYWJsZVRvQmVMYWJlbGVkCisJICogQHJldHVybiBhIHVuaXF1ZSBkeW5hbWljIGxhYmVsCisJICovCisJcHVibGljIHN0YXRpYyBUZXN0RHluYW1pY0xhYmVsMSBjcmVhdGVEeW5hbWljTGFiZWwoCisJCQlmaW5hbCBVUkkgdXJpT2ZJZGVudGlmaWFibGVUb0JlTGFiZWxlZCwgZmluYWwgRGVjb3JhdG9yIGRlY29yYXRvcikgeworCQlyZXR1cm4gY3JlYXRlRHluYW1pY0xhYmVsKGNyZWF0ZU5leHREeW5hbWljTGFiZWxVUkkoKSwKKwkJCQl1cmlPZklkZW50aWZpYWJsZVRvQmVMYWJlbGVkLCBkZWNvcmF0b3IpOworCX0gLy8gY3JlYXRlRHluYW1pY0xhYmVsCisKKwkvKioKKwkgKiBAcGFyYW0gbGFiZWxVUkkKKwkgKiBAcGFyYW0gdXJpT2ZJZGVudGlmaWFibGVUb0JlTGFiZWxlZAorCSAqIEByZXR1cm4gYSB1bmlxdWUgZHluYW1pYyBsYWJlbAorCSAqLworCXB1YmxpYyBzdGF0aWMgVGVzdER5bmFtaWNMYWJlbDEgY3JlYXRlRHluYW1pY0xhYmVsKGZpbmFsIFVSSSBsYWJlbFVSSSwKKwkJCWZpbmFsIFVSSSB1cmlPZklkZW50aWZpYWJsZVRvQmVMYWJlbGVkLCBmaW5hbCBEZWNvcmF0b3IgZGVjb3JhdG9yKSB7CisJCWZpbmFsIFRlc3REeW5hbWljTGFiZWwxIHJldFZhbHVlID0gTGFiZWxzRmFjdG9yeS5lSU5TVEFOQ0UKKwkJCQkuY3JlYXRlVGVzdER5bmFtaWNMYWJlbDEoKTsKKwkJcmV0VmFsdWUuc2V0VVJJKGxhYmVsVVJJKTsKKwkJcmV0VmFsdWUuc2V0VVJJT2ZJZGVudGlmaWFibGVUb0JlTGFiZWxlZCh1cmlPZklkZW50aWZpYWJsZVRvQmVMYWJlbGVkKTsKKwkJcmV0VmFsdWUuc2V0RGVjb3JhdG9yKGRlY29yYXRvcik7CisJCWZpbmFsIFRlc3RJbnRlZ2VyTGFiZWxWYWx1ZSBkeW5hbWljTGFiZWxDdXJyZW50VmFsdWUgPSBMYWJlbHNGYWN0b3J5LmVJTlNUQU5DRQorCQkJCS5jcmVhdGVUZXN0SW50ZWdlckxhYmVsVmFsdWUoKTsKKwkJZmluYWwgVGVzdEludGVnZXJMYWJlbFZhbHVlIGR5bmFtaWNMYWJlbE5leHRWYWx1ZSA9IExhYmVsc0ZhY3RvcnkuZUlOU1RBTkNFCisJCQkJLmNyZWF0ZVRlc3RJbnRlZ2VyTGFiZWxWYWx1ZSgpOworCQlkeW5hbWljTGFiZWxDdXJyZW50VmFsdWUKKwkJCQkuc2V0SShUZXN0SW50ZWdlckxhYmVsVmFsdWUuQ1VSUkVOVF9MQUJFTF9JTlRFR0VSX1ZBTFVFKTsKKwkJZHluYW1pY0xhYmVsTmV4dFZhbHVlCisJCQkJLnNldEkoVGVzdEludGVnZXJMYWJlbFZhbHVlLk5FWFRfTEFCRUxfSU5URUdFUl9WQUxVRSk7CisKKwkJcmV0VmFsdWUuc2V0Q3VycmVudFZhbHVlKGR5bmFtaWNMYWJlbEN1cnJlbnRWYWx1ZSk7CisJCXJldFZhbHVlLnNldE5leHRWYWx1ZShkeW5hbWljTGFiZWxOZXh0VmFsdWUpOworCisJCWFzc2VydCByZXRWYWx1ZS5zYW5lKCk7CisKKwkJcmV0dXJuIHJldFZhbHVlOworCX0gLy8gY3JlYXRlRHluYW1pY0xhYmVsCisKKwkvKioKKwkgKiBAcGFyYW0gbGFiZWxVUkkKKwkgKiBAcGFyYW0gdXJpT2ZJZGVudGlmaWFibGVUb0JlTGFiZWxlZAorCSAqIEByZXR1cm4gYSBzdGF0aWMgbm9kZSBsYWJlbAorCSAqLworCXB1YmxpYyBzdGF0aWMgU3RhdGljTm9kZUxhYmVsIGNyZWF0ZVN0YXRpY05vZGVMYWJlbChmaW5hbCBVUkkgbGFiZWxVUkksCisJCQlmaW5hbCBVUkkgdXJpT2ZJZGVudGlmaWFibGVUb0JlTGFiZWxlZCkgeworCQlmaW5hbCBUZXN0U3RhdGljTm9kZUxhYmVsIHJldFZhbHVlID0gTGFiZWxzRmFjdG9yeS5lSU5TVEFOQ0UKKwkJCQkuY3JlYXRlVGVzdFN0YXRpY05vZGVMYWJlbCgpOworCQlyZXRWYWx1ZS5zZXRVUkkobGFiZWxVUkkpOworCQlyZXRWYWx1ZS5zZXRVUklPZklkZW50aWZpYWJsZVRvQmVMYWJlbGVkKHVyaU9mSWRlbnRpZmlhYmxlVG9CZUxhYmVsZWQpOworCisJCWZpbmFsIFRlc3RJbnRlZ2VyTGFiZWxWYWx1ZSBzdGF0aWNMYWJlbEN1cnJlbnRWYWx1ZSA9IExhYmVsc0ZhY3RvcnkuZUlOU1RBTkNFCisJCQkJLmNyZWF0ZVRlc3RJbnRlZ2VyTGFiZWxWYWx1ZSgpOworCQlzdGF0aWNMYWJlbEN1cnJlbnRWYWx1ZQorCQkJCS5zZXRJKFRlc3RJbnRlZ2VyTGFiZWxWYWx1ZS5DVVJSRU5UX0xBQkVMX0lOVEVHRVJfVkFMVUUpOworCQlyZXRWYWx1ZS5zZXRDdXJyZW50VmFsdWUoc3RhdGljTGFiZWxDdXJyZW50VmFsdWUpOworCisJCWFzc2VydCByZXRWYWx1ZS5zYW5lKCk7CisJCXJldHVybiByZXRWYWx1ZTsKKwl9IC8vIGNyZWF0ZVN0YXRpY05vZGVMYWJlbAorCisJLyoqCisJICogQHJldHVybiBhIHVuaXF1ZSBkeW5hbWljIG5vZGUgbGFiZWwKKwkgKi8KKwlwdWJsaWMgc3RhdGljIFRlc3REeW5hbWljTm9kZUxhYmVsIGNyZWF0ZUR5bmFtaWNOb2RlTGFiZWwoKSB7CisJCWZpbmFsIFRlc3ROb2RlRGVjb3JhdG9yMSB0bmQgPSBEZWNvcmF0b3JzRmFjdG9yeS5lSU5TVEFOQ0UKKwkJCQkuY3JlYXRlVGVzdE5vZGVEZWNvcmF0b3IxKCk7CisJCXJldHVybiBjcmVhdGVEeW5hbWljTm9kZUxhYmVsKGNyZWF0ZU5leHREeW5hbWljTGFiZWxVUkkoKSwKKwkJCQljcmVhdGVOZXh0SWRlbnRpZmlhYmxlVG9MYWJlbFVSSSgpLCB0bmQpOworCX0gLy8gY3JlYXRlRHluYW1pY05vZGVMYWJlbAorCisJLyoqCisJICogQHBhcmFtIHVyaU9mSWRlbnRpZmlhYmxlVG9CZUxhYmVsZWQKKwkgKiBAcmV0dXJuIGEgdW5pcXVlIGR5bmFtaWMgbm9kZSBsYWJlbAorCSAqLworCXB1YmxpYyBzdGF0aWMgVGVzdER5bmFtaWNOb2RlTGFiZWwgY3JlYXRlRHluYW1pY05vZGVMYWJlbCgKKwkJCWZpbmFsIFVSSSB1cmlPZklkZW50aWZpYWJsZVRvQmVMYWJlbGVkLAorCQkJZmluYWwgTm9kZURlY29yYXRvciBub2RlRGVjb3JhdG9yKSB7CisJCXJldHVybiBjcmVhdGVEeW5hbWljTm9kZUxhYmVsKGNyZWF0ZU5leHREeW5hbWljTGFiZWxVUkkoKSwKKwkJCQl1cmlPZklkZW50aWZpYWJsZVRvQmVMYWJlbGVkLCBub2RlRGVjb3JhdG9yKTsKKwl9IC8vIGNyZWF0ZUR5bmFtaWNOb2RlTGFiZWwKKworCS8qKgorCSAqIEBwYXJhbSBsYWJlbFVSSQorCSAqIEBwYXJhbSB1cmlPZklkZW50aWZpYWJsZVRvQmVMYWJlbGVkCisJICogQHJldHVybiBhIHVuaXF1ZSBkeW5hbWljIGxhYmVsCisJICovCisJcHVibGljIHN0YXRpYyBUZXN0RHluYW1pY05vZGVMYWJlbCBjcmVhdGVEeW5hbWljTm9kZUxhYmVsKAorCQkJZmluYWwgVVJJIGxhYmVsVVJJLCBmaW5hbCBVUkkgdXJpT2ZJZGVudGlmaWFibGVUb0JlTGFiZWxlZCwKKwkJCWZpbmFsIE5vZGVEZWNvcmF0b3Igbm9kZURlY29yYXRvcikgeworCQlmaW5hbCBUZXN0RHluYW1pY05vZGVMYWJlbCByZXRWYWx1ZSA9IExhYmVsc0ZhY3RvcnkuZUlOU1RBTkNFCisJCQkJLmNyZWF0ZVRlc3REeW5hbWljTm9kZUxhYmVsKCk7CisJCXJldFZhbHVlLnNldFVSSShsYWJlbFVSSSk7CisJCXJldFZhbHVlLnNldFVSSU9mSWRlbnRpZmlhYmxlVG9CZUxhYmVsZWQodXJpT2ZJZGVudGlmaWFibGVUb0JlTGFiZWxlZCk7CisKKwkJcmV0VmFsdWUuc2V0RGVjb3JhdG9yKG5vZGVEZWNvcmF0b3IpOworCisJCWZpbmFsIFRlc3RJbnRlZ2VyTGFiZWxWYWx1ZSBkeW5hbWljTGFiZWxDdXJyZW50VmFsdWUgPSBMYWJlbHNGYWN0b3J5LmVJTlNUQU5DRQorCQkJCS5jcmVhdGVUZXN0SW50ZWdlckxhYmVsVmFsdWUoKTsKKwkJZmluYWwgVGVzdEludGVnZXJMYWJlbFZhbHVlIGR5bmFtaWNMYWJlbE5leHRWYWx1ZSA9IExhYmVsc0ZhY3RvcnkuZUlOU1RBTkNFCisJCQkJLmNyZWF0ZVRlc3RJbnRlZ2VyTGFiZWxWYWx1ZSgpOworCQlkeW5hbWljTGFiZWxDdXJyZW50VmFsdWUKKwkJCQkuc2V0SShUZXN0SW50ZWdlckxhYmVsVmFsdWUuQ1VSUkVOVF9MQUJFTF9JTlRFR0VSX1ZBTFVFKTsKKwkJZHluYW1pY0xhYmVsTmV4dFZhbHVlCisJCQkJLnNldEkoVGVzdEludGVnZXJMYWJlbFZhbHVlLk5FWFRfTEFCRUxfSU5URUdFUl9WQUxVRSk7CisKKwkJcmV0VmFsdWUuc2V0Q3VycmVudFZhbHVlKGR5bmFtaWNMYWJlbEN1cnJlbnRWYWx1ZSk7CisJCXJldFZhbHVlLnNldE5leHRWYWx1ZShkeW5hbWljTGFiZWxOZXh0VmFsdWUpOworCisJCWFzc2VydCByZXRWYWx1ZS5zYW5lKCk7CisKKwkJcmV0dXJuIHJldFZhbHVlOworCX0gLy8gY3JlYXRlRHluYW1pY05vZGVMYWJlbAorCisJLyoqCisJICogQHJldHVybiBhIHVuaXF1ZSBVUkkgZm9yIGEgbGFiZWwuCisJICovCisJcHJpdmF0ZSBzdGF0aWMgVVJJIGNyZWF0ZU5leHREeW5hbWljTGFiZWxVUkkoKSB7CisJCXJldHVybiBTVEVNVVJJLmNyZWF0ZVVSSSgiRFlOQU1JQ0xBQkVMIiArICIvIiArIGR5bmFtaWNMYWJlbENvdW50ZXIrKyk7CisJfSAvLyBjcmVhdGVOZXh0RHluYW1pY0xhYmVsVVJJCisKKwkvKioKKwkgKiBAcmV0dXJuIGEgdW5pcXVlIFVSSSBmb3IgYSBJZGVudGlmaWFibGUgdG8gbGFiZWwKKwkgKi8KKwlwdWJsaWMgc3RhdGljIFVSSSBjcmVhdGVOZXh0SWRlbnRpZmlhYmxlVG9MYWJlbFVSSSgpIHsKKwkJcmV0dXJuIFNURU1VUkkuY3JlYXRlVVJJKCJGT09CQVIiICsgIi8iICsgaWRDb3VudGVyKyspOworCX0gLy8gY3JlYXRlTmV4dFRoaW5nVG9MYWJlbFVSSQorCisJLyoqCisJICogQHBhcmFtIG5vZGVBVVJJCisJICogICAgICAgICAgICB0aGUgVVJJIG9mIHRoZSBBIG5vZGUgdGhlIGVkZ2UgbGlua3MgdG8KKwkgKiBAcGFyYW0gbm9kZUJVUkkKKwkgKiAgICAgICAgICAgIHRoZSBVUkkgb2YgdGhlIEIgbm9kZSB0aGUgZWRnZSBsaW5rcyB0bworCSAqIEBwYXJhbSBlZGdlRGVjb3JhdG9yCisJICogQHJldHVybiBhIGR5bmFtaWNhbGx5IGxhYmVsZWQgZWRnZSBsaW5raW5nIG5vZGVzIHdpdGggdGhlIHR3byBVUkkncworCSAqLworCXB1YmxpYyBzdGF0aWMgRWRnZSBjcmVhdGVEeW5hbWljYWxseUxhYmVsZWRFZGdlKGZpbmFsIFVSSSBub2RlQVVSSSwKKwkJCWZpbmFsIFVSSSBub2RlQlVSSSwgRWRnZURlY29yYXRvciBlZGdlRGVjb3JhdG9yKSB7CisJCXJldHVybiBjcmVhdGVEeW5hbWljYWxseUxhYmVsZWRFZGdlKG5vZGVBVVJJLCBub2RlQlVSSSwKKwkJCQljcmVhdGVOZXh0RWRnZVVSSSgpLCBlZGdlRGVjb3JhdG9yKTsKKwl9IC8vIGNyZWF0ZUR5bmFtaWNhbGx5TGFiZWxlZEVkZ2UKKworCS8qKgorCSAqIEBwYXJhbSBub2RlQVVSSQorCSAqICAgICAgICAgICAgdGhlIFVSSSBvZiB0aGUgQSBub2RlIHRoZSBlZGdlIGxpbmtzIHRvCisJICogQHBhcmFtIG5vZGVCVVJJCisJICogICAgICAgICAgICB0aGUgVVJJIG9mIHRoZSBCIG5vZGUgdGhlIGVkZ2UgbGlua3MgdG8KKwkgKiBAcGFyYW0gZWRnZVVSSQorCSAqICAgICAgICAgICAgdXJpIHRvIHVzZSBmb3IgdGhlIGVkZ2UKKwkgKiBAcGFyYW0gZWRnZURlY29yYXRvcgorCSAqIEByZXR1cm4gYSBkeW5hbWljYWxseSBsYWJlbGVkIGVkZ2UgbGlua2luZyBub2RlcyB3aXRoIHRoZSB0d28gVVJJJ3MKKwkgKi8KKwlwdWJsaWMgc3RhdGljIEVkZ2UgY3JlYXRlRHluYW1pY2FsbHlMYWJlbGVkRWRnZShmaW5hbCBVUkkgbm9kZUFVUkksCisJCQlmaW5hbCBVUkkgbm9kZUJVUkksIGZpbmFsIFVSSSBlZGdlVVJJLCBFZGdlRGVjb3JhdG9yIGVkZ2VEZWNvcmF0b3IpIHsKKwkJZmluYWwgRWRnZSBlZGdlID0gRWRnZUltcGwuY3JlYXRlRWRnZShub2RlQVVSSSwgbm9kZUJVUkksIGVkZ2VVUkkpOworCQlmaW5hbCBEeW5hbWljRWRnZUxhYmVsIGRlbCA9IGNyZWF0ZUR5bmFtaWNFZGdlTGFiZWwoCisJCQkJY3JlYXRlTmV4dER5bmFtaWNMYWJlbFVSSSgpLCBlZGdlLmdldFVSSSgpKTsKKwkJZGVsLnNldERlY29yYXRvcihlZGdlRGVjb3JhdG9yKTsKKwkJZWRnZS5zZXRMYWJlbChkZWwpOworCQlhc3NlcnQgZWRnZS5zYW5lKCk7CisJCXJldHVybiBlZGdlOworCX0gLy8gY3JlYXRlRHluYW1pY2FsbHlMYWJlbGVkRWRnZQorCisJLyoqCisJICogQHBhcmFtIGxhYmVsVVJJCisJICogQHBhcmFtIHVyaU9mSWRlbnRpZmlhYmxlVG9CZUxhYmVsZWQKKwkgKiBAcmV0dXJuIGEgRHluYW1pY0VkZ2VMYWJlbAorCSAqLworCXByaXZhdGUgc3RhdGljIER5bmFtaWNFZGdlTGFiZWwgY3JlYXRlRHluYW1pY0VkZ2VMYWJlbChmaW5hbCBVUkkgbGFiZWxVUkksCisJCQlmaW5hbCBVUkkgdXJpT2ZJZGVudGlmaWFibGVUb0JlTGFiZWxlZCkgeworCQlmaW5hbCBUZXN0RHluYW1pY0VkZ2VMYWJlbCByZXRWYWx1ZSA9IExhYmVsc0ZhY3RvcnkuZUlOU1RBTkNFCisJCQkJLmNyZWF0ZVRlc3REeW5hbWljRWRnZUxhYmVsKCk7CisJCXJldFZhbHVlLnNldFVSSShsYWJlbFVSSSk7CisJCXJldFZhbHVlLnNldFVSSU9mSWRlbnRpZmlhYmxlVG9CZUxhYmVsZWQodXJpT2ZJZGVudGlmaWFibGVUb0JlTGFiZWxlZCk7CisKKwkJZmluYWwgVGVzdEludGVnZXJMYWJlbFZhbHVlIGR5bmFtaWNMYWJlbEN1cnJlbnRWYWx1ZSA9IExhYmVsc0ZhY3RvcnkuZUlOU1RBTkNFCisJCQkJLmNyZWF0ZVRlc3RJbnRlZ2VyTGFiZWxWYWx1ZSgpOworCQlmaW5hbCBUZXN0SW50ZWdlckxhYmVsVmFsdWUgZHluYW1pY0xhYmVsTmV4dFZhbHVlID0gTGFiZWxzRmFjdG9yeS5lSU5TVEFOQ0UKKwkJCQkuY3JlYXRlVGVzdEludGVnZXJMYWJlbFZhbHVlKCk7CisJCWR5bmFtaWNMYWJlbEN1cnJlbnRWYWx1ZQorCQkJCS5zZXRJKFRlc3RJbnRlZ2VyTGFiZWxWYWx1ZS5DVVJSRU5UX0xBQkVMX0lOVEVHRVJfVkFMVUUpOworCQlkeW5hbWljTGFiZWxOZXh0VmFsdWUKKwkJCQkuc2V0SShUZXN0SW50ZWdlckxhYmVsVmFsdWUuTkVYVF9MQUJFTF9JTlRFR0VSX1ZBTFVFKTsKKworCQlyZXRWYWx1ZS5zZXRDdXJyZW50VmFsdWUoZHluYW1pY0xhYmVsQ3VycmVudFZhbHVlKTsKKwkJcmV0VmFsdWUuc2V0TmV4dFZhbHVlKGR5bmFtaWNMYWJlbE5leHRWYWx1ZSk7CisKKwkJcmV0dXJuIHJldFZhbHVlOworCX0gLy8gY3JlYXRlRHluYW1pY0VkZ2VMYWJlbAorCisJLyoqCisJICogQHBhcmFtIG5vZGVBVVJJCisJICogICAgICAgICAgICB0aGUgVVJJIG9mIHRoZSBBIG5vZGUgdGhlIGVkZ2UgbGlua3MgdG8KKwkgKiBAcGFyYW0gbm9kZUJVUkkKKwkgKiAgICAgICAgICAgIHRoZSBVUkkgb2YgdGhlIEIgbm9kZSB0aGUgZWRnZSBsaW5rcyB0bworCSAqIEByZXR1cm4gYSBzdGF0aWNhbGx5IGxhYmVsZWQgZWRnZSBsaW5raW5nIG5vZGVzIHdpdGggdGhlIHR3byBVUkkncworCSAqLworCXB1YmxpYyBzdGF0aWMgRWRnZSBjcmVhdGVTdGF0aWNhbGx5TGFiZWxlZEVkZ2UoZmluYWwgVVJJIG5vZGVBVVJJLAorCQkJZmluYWwgVVJJIG5vZGVCVVJJKSB7CisJCXJldHVybiBjcmVhdGVTdGF0aWNhbGx5TGFiZWxlZEVkZ2UoY3JlYXRlTmV4dEVkZ2VVUkkoKSwgbm9kZUFVUkksCisJCQkJbm9kZUJVUkkpOworCX0gLy8gY3JlYXRlU3RhdGljYWxseUxhYmVsZWRFZGdlCisKKwkvKioKKwkgKiBAcGFyYW0gZWRnZVVSSQorCSAqIEBwYXJhbSBub2RlQVVSSQorCSAqIEBwYXJhbSBub2RlQlVSSQorCSAqIEByZXR1cm4gYSBzdGF0aWNhbGx5IGxhYmVsZWQgZWRnZQorCSAqLworCXB1YmxpYyBzdGF0aWMgRWRnZSBjcmVhdGVTdGF0aWNhbGx5TGFiZWxlZEVkZ2UoZmluYWwgVVJJIGVkZ2VVUkksCisJCQlmaW5hbCBVUkkgbm9kZUFVUkksIGZpbmFsIFVSSSBub2RlQlVSSSkgeworCQlyZXR1cm4gY3JlYXRlU3RhdGljYWxseUxhYmVsZWRFZGdlKGVkZ2VVUkksIG5vZGVBVVJJLCBub2RlQlVSSSwgZmFsc2UpOworCX0gLy8gY3JlYXRlU3RhdGljYWxseUxhYmVsZWRFZGdlCisKKwkvKioKKwkgKiBAcGFyYW0gZWRnZVVSSQorCSAqIEBwYXJhbSBub2RlQVVSSQorCSAqIEBwYXJhbSBub2RlQlVSSQorCSAqIEBwYXJhbSBkaXJlY3RlZAorCSAqIEByZXR1cm4gYSBzdGF0aWNhbGx5IGxhYmVsZWQgZWRnZQorCSAqLworCXB1YmxpYyBzdGF0aWMgRWRnZSBjcmVhdGVTdGF0aWNhbGx5TGFiZWxlZEVkZ2UoZmluYWwgVVJJIGVkZ2VVUkksCisJCQlmaW5hbCBVUkkgbm9kZUFVUkksIGZpbmFsIFVSSSBub2RlQlVSSSwgZmluYWwgYm9vbGVhbiBkaXJlY3RlZCkgeworCQlmaW5hbCBFZGdlIHJldFZhbHVlID0gRWRnZUltcGwuY3JlYXRlRWRnZShub2RlQVVSSSwgbm9kZUJVUkksIGRpcmVjdGVkLAorCQkJCWVkZ2VVUkkpOworCQlyZXRWYWx1ZS5zZXRMYWJlbChjcmVhdGVTdGF0aWNFZGdlTGFiZWwocmV0VmFsdWUuZ2V0VVJJKCksIHJldFZhbHVlCisJCQkJLmdldFVSSSgpKSk7CisJCXJldHVybiByZXRWYWx1ZTsKKwl9IC8vIGNyZWF0ZVN0YXRpY2FsbHlMYWJlbGVkRWRnZQorCisJLyoqCisJICogQHBhcmFtIGxhYmVsVVJJCisJICogQHBhcmFtIHVyaU9mSWRlbnRpZmlhYmxlVG9CZUxhYmVsZWQKKwkgKiBAcmV0dXJuIGEgU3RhdGljRWRnZUxhYmVsCisJICovCisJcHJpdmF0ZSBzdGF0aWMgU3RhdGljRWRnZUxhYmVsIGNyZWF0ZVN0YXRpY0VkZ2VMYWJlbChmaW5hbCBVUkkgbGFiZWxVUkksCisJCQlmaW5hbCBVUkkgdXJpT2ZJZGVudGlmaWFibGVUb0JlTGFiZWxlZCkgeworCQlmaW5hbCBUZXN0U3RhdGljRWRnZUxhYmVsIHJldFZhbHVlID0gTGFiZWxzRmFjdG9yeS5lSU5TVEFOQ0UKKwkJCQkuY3JlYXRlVGVzdFN0YXRpY0VkZ2VMYWJlbCgpOworCQlyZXRWYWx1ZS5zZXRVUkkobGFiZWxVUkkpOworCQlyZXRWYWx1ZS5zZXRVUklPZklkZW50aWZpYWJsZVRvQmVMYWJlbGVkKHVyaU9mSWRlbnRpZmlhYmxlVG9CZUxhYmVsZWQpOworCisJCWZpbmFsIFRlc3RJbnRlZ2VyTGFiZWxWYWx1ZSBzdGF0aWNMYWJlbEN1cnJlbnRWYWx1ZSA9IExhYmVsc0ZhY3RvcnkuZUlOU1RBTkNFCisJCQkJLmNyZWF0ZVRlc3RJbnRlZ2VyTGFiZWxWYWx1ZSgpOworCQlzdGF0aWNMYWJlbEN1cnJlbnRWYWx1ZQorCQkJCS5zZXRJKFRlc3RJbnRlZ2VyTGFiZWxWYWx1ZS5DVVJSRU5UX0xBQkVMX0lOVEVHRVJfVkFMVUUpOworCQlyZXRWYWx1ZS5zZXRDdXJyZW50VmFsdWUoc3RhdGljTGFiZWxDdXJyZW50VmFsdWUpOworCisJCWFzc2VydCByZXRWYWx1ZS5zYW5lKCk7CisJCXJldHVybiByZXRWYWx1ZTsKKwl9IC8vIGNyZWF0ZVN0YXRpY0VkZ2VMYWJlbAorCisJLyoqCisJICogQHJldHVybiBhIHVuaXF1ZSBVUkkgZm9yIGFuIGVkZ2UuCisJICovCisJcHJpdmF0ZSBzdGF0aWMgVVJJIGNyZWF0ZU5leHRFZGdlVVJJKCkgeworCQlyZXR1cm4gU1RFTVVSSS5jcmVhdGVVUkkoIkVER0UiICsgIi8iICsgZWRnZUNvdW50ZXIrKyk7CisJfQorCisJLyoqCisJICogQHBhcmFtIG5vZGVEZWNvcmF0b3IKKwkgKiAgICAgICAgICAgIFRPRE8KKwkgKiBAcmV0dXJuIGEgZHluYW1pY2FsbHkgbGFiZWxlZCBub2RlCisJICovCisJcHVibGljIHN0YXRpYyBOb2RlIGNyZWF0ZUR5bmFtaWNhbHlMYWJlbGVkTm9kZShOb2RlRGVjb3JhdG9yIG5vZGVEZWNvcmF0b3IpIHsKKwkJZmluYWwgTm9kZSByZXRWYWx1ZSA9IEdyYXBoRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlTm9kZSgpOworCQlyZXRWYWx1ZS5zZXRVUkkoY3JlYXRlTmV4dE5vZGVVUkkoKSk7CisKKwkJZmluYWwgRHluYW1pY05vZGVMYWJlbCBkeW5hbWljTm9kZUxhYmVsID0gVGVzdFV0aWwKKwkJCQkuY3JlYXRlRHluYW1pY05vZGVMYWJlbChyZXRWYWx1ZS5nZXRVUkkoKSwgbm9kZURlY29yYXRvcik7CisKKwkJcmV0VmFsdWUuZ2V0TGFiZWxzKCkuYWRkKGR5bmFtaWNOb2RlTGFiZWwpOworCisJCWFzc2VydCByZXRWYWx1ZS5zYW5lKCk7CisKKwkJcmV0dXJuIHJldFZhbHVlOworCX0gLy8gY3JlYXRlRHluYW1pY2FseUxhYmVsZWROb2RlCisKKwkvKioKKwkgKiBAcGFyYW0gbm9kZVVSSQorCSAqIEByZXR1cm4gYSBkeW5hbWljYWxseSBsYWJlbGVkIG5vZGUKKwkgKi8KKwlAU3VwcHJlc3NXYXJuaW5ncygidW5jaGVja2VkIikKKwlwdWJsaWMgc3RhdGljIE5vZGUgY3JlYXRlU3RhdGljYWxseUxhYmVsZWROb2RlKGZpbmFsIFVSSSBub2RlVVJJKSB7CisJCWZpbmFsIE5vZGUgcmV0VmFsdWUgPSBHcmFwaEZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZU5vZGUoKTsKKwkJcmV0VmFsdWUuc2V0VVJJKG5vZGVVUkkpOworCQlmaW5hbCBTdGF0aWNOb2RlTGFiZWwgc3RhdGljTm9kZUxhYmVsID0gVGVzdFV0aWwuY3JlYXRlU3RhdGljTm9kZUxhYmVsKAorCQkJCVRlc3RVdGlsLmNyZWF0ZU5leHRMYWJlbFVSSSgpLCByZXRWYWx1ZS5nZXRVUkkoKSk7CisJCXJldFZhbHVlLmdldExhYmVscygpLmFkZChzdGF0aWNOb2RlTGFiZWwpOworCisJCWFzc2VydCByZXRWYWx1ZS5zYW5lKCk7CisKKwkJcmV0dXJuIHJldFZhbHVlOworCX0gLy8gY3JlYXRlU3RhdGljYWxseUxhYmVsZWROb2RlCisKKwkvKioKKwkgKiBAcmV0dXJuIGEgZHluYW1pY2FsbHkgbGFiZWxlZCBub2RlCisJICovCisJQFN1cHByZXNzV2FybmluZ3MoInVuY2hlY2tlZCIpCisJcHVibGljIHN0YXRpYyBOb2RlIGNyZWF0ZVN0YXRpY2FsbHlMYWJlbGVkTm9kZSgpIHsKKwkJZmluYWwgTm9kZSByZXRWYWx1ZSA9IEdyYXBoRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlTm9kZSgpOworCisJCXJldFZhbHVlLnNldFVSSShjcmVhdGVOZXh0Tm9kZVVSSSgpKTsKKwkJCisJCWZpbmFsIFN0YXRpY05vZGVMYWJlbCBzdGF0aWNOb2RlTGFiZWwgPSBUZXN0VXRpbC5jcmVhdGVTdGF0aWNOb2RlTGFiZWwoCisJCQkJVGVzdFV0aWwuY3JlYXRlTmV4dExhYmVsVVJJKCksIHJldFZhbHVlLmdldFVSSSgpKTsKKwkJLy8gc3RhdGljTm9kZUxhYmVsLnNldE5vZGUocmV0VmFsdWUpOworCQlyZXRWYWx1ZS5nZXRMYWJlbHMoKS5hZGQoc3RhdGljTm9kZUxhYmVsKTsKKworCQlhc3NlcnQgcmV0VmFsdWUuc2FuZSgpOworCisJCXJldHVybiByZXRWYWx1ZTsKKwl9IC8vIGNyZWF0ZVN0YXRpY2FsbHlMYWJlbGVkTm9kZQorCisJLyoqCisJICogQHJldHVybiBhIHVuaXF1ZSBVUkkgZm9yIGEgbm9kZS4KKwkgKi8KKwlwcml2YXRlIHN0YXRpYyBVUkkgY3JlYXRlTmV4dE5vZGVVUkkoKSB7CisJCXJldHVybiBTVEVNVVJJLmNyZWF0ZVVSSSgiTk9ERSIgKyAiLyIgKyBub2RlQ291bnRlcisrKTsKKwl9IC8vIGNyZWF0ZU5leHROb2RlVVJJCisKKwkvKioKKwkgKiBAcGFyYW0gZ3JhcGgKKwkgKi8KKwlAU3VwcHJlc3NXYXJuaW5ncygidW51c2VkIikKKwlwcml2YXRlIHN0YXRpYyB2b2lkIHJlZnJlc2hEdWJsaW5Db3JlKGZpbmFsIElkZW50aWZpYWJsZSBpZGVudGlmaWFibGUpIHsKKwkJZmluYWwgRHVibGluQ29yZSBkYyA9IGlkZW50aWZpYWJsZS5nZXREdWJsaW5Db3JlKCk7CisJCWRjLnBvcHVsYXRlKCk7CisJCWRjLnNldEZvcm1hdChpZGVudGlmaWFibGUuZUNsYXNzKCkuZ2V0RVBhY2thZ2UoKS5nZXROc1VSSSgpKTsKKwkJLy8gZGMuc2V0U3ViamVjdCgiSlVuaXQgdGVzdCBvdXRwdXQiKTsKKwl9IC8vIHJlZnJlc2hEdWJsaW5Db3JlCisKK30gLy8gVGVzdFV0aWwKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS90ZXN0cy91dGlsL1dvcmxkTW9kZWxDcmVhdG9yLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdGVzdHMvdXRpbC9Xb3JsZE1vZGVsQ3JlYXRvci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE3NzU1NDYKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdGVzdHMvdXRpbC9Xb3JsZE1vZGVsQ3JlYXRvci5qYXZhCkBAIC0wLDAgKzEsMzA2IEBACisvLyBXb3JsZE1vZGVsQ3JlYXRvci5qYXZhCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbDsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqYXZhLmlvLkJ1ZmZlcmVkV3JpdGVyOworaW1wb3J0IGphdmEuaW8uRmlsZTsKK2ltcG9ydCBqYXZhLmlvLkZpbGVXcml0ZXI7CitpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLmlvLldyaXRlcjsKK2ltcG9ydCBqYXZhLnRleHQuTWVzc2FnZUZvcm1hdDsKK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OworaW1wb3J0IGphdmEudXRpbC5DYWxlbmRhcjsKK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbnM7CitpbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CitpbXBvcnQgamF2YS51dGlsLk1hcDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5VUkk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnV0aWwuRWNvcmVVdGlsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5Db25zdGFudHM7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5EdWJsaW5Db3JlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5Nb2RlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuTW9kZWxGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC5Db3VudHJ5RGlyZWN0b3J5VXRpbGl0aWVzLkNvdW50cnlDb2RlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC5Db3VudHJ5TW9kZWxDcmVhdG9yLkNvdW50cnlNb2RlbFJlY29yZDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwuQ291bnRyeU1vZGVsQ3JlYXRvci5Nb2RlbFJlY29yZDsKKworLyoqCisgKiBUaGlzIGNsYXNzIGNyZWF0ZXMgbW9kZWxzIG9mIHRoZSB3b3JsZCBhdCB2YXJpb3VzIHJlc29sdXRpb25zLgorICovCitwdWJsaWMgY2xhc3MgV29ybGRNb2RlbENyZWF0b3IgeworCisJLyoqCisJICogVGhlIG5hbWUgb2YgdGhlIGRpcmVjdG9yeSB0aGF0IGNvbnRhaW5zICJtb2RlbCIgc3ViLWRpcmVjdG9yaWVzCisJICovCisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFdPUkxEX0RJUiA9ICJ3b3JsZCI7CisKKwkvKioKKwkgKiBUaGlzIGlzIHRoZSBmb3JtYXQgc3RyaW5nIGZvciB0aGUgaWRlbnRpZmllciBvZiBhIGNvdW50cnkgZ3JhcGggb3IgbW9kZWwKKwkgKiBmaWxlCisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgSURFTlRJRklFUl9GT1JNQVQgPSAiezB9LyIgKyBXT1JMRF9ESVIKKwkJCSsgIi97MX0vezJ9IjsKKworCS8qKgorCSAqIFRoaXMgaXMgdGhlIHBhdGggdG8gdGhlIGNvdW50cnkgbW9kZWxzIGRpcmVjdG9yeQorCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFdPUkxEX01PREVMX1BBVEggPSBDb3VudHJ5R3JhcGhDcmVhdG9yLlJPT1RfT1VUUFVUX0RJUgorCQkJKyBGaWxlLnNlcGFyYXRvcgorCQkJKyBDb3VudHJ5TW9kZWxDcmVhdG9yLk1PREVMX09VVFBVVF9ESVIKKwkJCSsgRmlsZS5zZXBhcmF0b3IgKyBXT1JMRF9ESVI7CisKKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgV09STEQgPSAiV29ybGQiOworCisJLyoqCisJICogVGhlIGlkZW50aWZpZXIgdXNlZCBpbiB3b3JsZCBtb2RlbCByZWNvcmQgaW5zdGFuY2VzLiBJdCBpcyBsaWtlIGEKKwkgKiB7QGxpbmsgQ291bnRyeUNvZGV9ICwgYnV0IGZvciB0aGUgZW50aXJlIHdvcmxkLgorCSAqLworCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBXT1JMRF9JRCA9ICJXT1JMRCI7CisKKwkvKioKKwkgKiBUaGlzIGlzIHRoZSBpZCBvZiB0aGUgZXh0ZW5zaW9uIHBvaW50IGV4dGVuZGVkIGJ5ICJ3b3JsZCIgbW9kZWxzIHRoYXQgYXJlCisJICogcGx1Z2dlZCBpbnRvIFNURU0KKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBJRF9NT0RFTF9XT1JMRF9DQVRFR09SWSA9IENvdW50cnlNb2RlbENyZWF0b3IuSURfTU9ERUxfUE9MSVRJQ0FMX0NBVEVHT1JZCisJCQkrICIuIiArIFdPUkxELnRvTG93ZXJDYXNlKCk7CisKKwkvKioKKwkgKiBAcGFyYW0gYXJncworCSAqICAgICAgICAgICAgbm9uZQorCSAqLworCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKGZpbmFsIFN0cmluZ1tdIGFyZ3MpIHsKKworCQlmaW5hbCBDb3VudHJ5TW9kZWxDcmVhdG9yIGNtYyA9IG5ldyBDb3VudHJ5TW9kZWxDcmVhdG9yKCk7CisKKwkJZmluYWwgTGlzdDxMaXN0PENvdW50cnlNb2RlbFJlY29yZD4+IG1vZGVsc0J5QWRtaW5MZXZlbCA9IGNtYworCQkJCS5jcmVhdGVDb3VudHJ5TW9kZWxzMigpOworCisJCWZpbmFsIFdvcmxkTW9kZWxDcmVhdG9yIHdtYyA9IG5ldyBXb3JsZE1vZGVsQ3JlYXRvcigpOworCisJCS8vIENyZWF0ZSB0aGUgd29ybGQgbW9kZWxzIGJ5IGVhY2ggYWRtaW5pc3RyYXRpb24gbGV2ZWwKKwkJZmluYWwgTGlzdDxXb3JsZE1vZGVsUmVjb3JkPiB3b3JsZE1vZGVsUmVjb3JkcyA9IHdtYworCQkJCS5jcmVhdGVXb3JsZE1vZGVscyhtb2RlbHNCeUFkbWluTGV2ZWwpOworCQl0cnkgeworCQkJd21jLnNlcmlhbGl6ZVdvcmxkTW9kZWxzKHdvcmxkTW9kZWxSZWNvcmRzLCBXT1JMRF9NT0RFTF9QQVRIKTsKKworCQkJZmluYWwgRmlsZSB3b3JsZE1vZGVsRXh0ZW5zaW9uRmlsZSA9IG5ldyBGaWxlKFdPUkxEX01PREVMX1BBVEgKKwkJCQkJKyBDb3VudHJ5R3JhcGhDcmVhdG9yLkdSQVBIX0VYVEVOU0lPTl9QT0lOVF9GSUxFX05BTUUpOworCQkJZmluYWwgRmlsZSB3b3JsZE1vZGVsUGx1Z2luUHJvcGVydGllc0ZpbGUgPSBuZXcgRmlsZSgKKwkJCQkJV09STERfTU9ERUxfUEFUSAorCQkJCQkJCSsgQ291bnRyeUdyYXBoQ3JlYXRvci5HUkFQSF9QTFVHSU5fUFJPUEVSVElFU19QT0lOVF9GSUxFX05BTUUpOworCisJCQlmaW5hbCBCdWZmZXJlZFdyaXRlciB3b3JsZE1vZGVsT3V0ID0gbmV3IEJ1ZmZlcmVkV3JpdGVyKAorCQkJCQluZXcgRmlsZVdyaXRlcih3b3JsZE1vZGVsRXh0ZW5zaW9uRmlsZSkpOworCisJCQlmaW5hbCBCdWZmZXJlZFdyaXRlciBwbHVnaW5PdXQgPSBuZXcgQnVmZmVyZWRXcml0ZXIobmV3IEZpbGVXcml0ZXIoCisJCQkJCXdvcmxkTW9kZWxQbHVnaW5Qcm9wZXJ0aWVzRmlsZSkpOworCisJCQkvLyBDcmVhdGUgYSBzbmlwcGV0IG9mIHhtbCB0aGF0IGNhbiBiZSBpbmNsdWRlZCBpbiBhIHBsdWdpbi54bWwgZmlsZQorCQkJLy8gdG8gcGx1ZyBpbnRvIFNURU0gdGhlIG1vZGVscyB3ZSBqdXN0IHNlcmlhbGl6ZWQuCisJCQl3bWMuZ2VuZXJhdGVNb2RlbEV4dGVuc2lvblBvaW50WE1MKHdvcmxkTW9kZWxSZWNvcmRzLAorCQkJCQl3b3JsZE1vZGVsT3V0LCBwbHVnaW5PdXQpOworCQl9IC8vIHRyeQorCQljYXRjaCAoZmluYWwgSU9FeGNlcHRpb24gZSkgeworCQkJZS5wcmludFN0YWNrVHJhY2UoKTsKKwkJfQorCX0gLy8gbWFpbgorCisJLyoqCisJICogR2l2ZW4gYSBjb2xsZWN0aW9uIG9mIGNvdW50cnkgbW9kZWxzIGdyb3VwZWQgYnkgYWRtaW5pc3RyYXRpb24gbGV2ZWwsCisJICogY3JlYXRlIGEgaGlnaGVyIHdvcmxkIG1vZGVsIGZvciBlYWNoIGxldmVsIHRoYXQgY29udGFpbnMgYWxsIG9mIHRoZQorCSAqIGNvdW50cnkgbW9kZWxzIGZvciB0aGF0IGxldmVsLgorCSAqIAorCSAqIEBwYXJhbSBtb2RlbHNCeUFkbWluTGV2ZWwKKwkgKiAgICAgICAgICAgIGEgbGlzdCBvcmRlcmVkIGJ5IGFkbWluaXN0cmF0aW9uIGxldmVsIG9mIGxpc3RzIG9mIG1vZGVsCisJICogICAgICAgICAgICByZWNvcmRzIGZvciBlYWNoIGFkbWluaXN0cmF0aW9uIGxldmVsCisJICogQHJldHVybiBhIGxpc3Qgb2Ygd29ybGQgbW9kZWwgcmVjb3Jkcywgb25lIGZvciBlYWNoIGFkbWluaXN0cmF0aW9uIGxldmVsLgorCSAqLworCUBTdXBwcmVzc1dhcm5pbmdzKCJ1bmNoZWNrZWQiKQorCXB1YmxpYyBMaXN0PFdvcmxkTW9kZWxSZWNvcmQ+IGNyZWF0ZVdvcmxkTW9kZWxzKAorCQkJZmluYWwgTGlzdDxMaXN0PENvdW50cnlNb2RlbFJlY29yZD4+IG1vZGVsc0J5QWRtaW5MZXZlbCkgeworCQlmaW5hbCBMaXN0PFdvcmxkTW9kZWxSZWNvcmQ+IHJldFZhbHVlID0gbmV3IEFycmF5TGlzdDxXb3JsZE1vZGVsUmVjb3JkPigpOworCisJCWZvciAoaW50IGFkbWluTGV2ZWwgPSAwOyBhZG1pbkxldmVsIDwgbW9kZWxzQnlBZG1pbkxldmVsLnNpemUoKTsgYWRtaW5MZXZlbCsrKSB7CisKKwkJCWZpbmFsIE1vZGVsIHdvcmxkTW9kZWwgPSBNb2RlbEZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZU1vZGVsKCk7CisJCQlmaW5hbCBEdWJsaW5Db3JlIGRjID0gd29ybGRNb2RlbC5nZXREdWJsaW5Db3JlKCk7CisJCQlkYy5wb3B1bGF0ZSgpOworCQkJZGMuc2V0VGl0bGUoIldvcmxkIE1vZGVsIChMZXZlbCAiICsgYWRtaW5MZXZlbCArICIsICIKKwkJCQkJKyBtb2RlbHNCeUFkbWluTGV2ZWwuZ2V0KGFkbWluTGV2ZWwpLnNpemUoKSArICIgbW9kZWxzKSIpOworCisJCQlmb3IgKGZpbmFsIENvdW50cnlNb2RlbFJlY29yZCBtb2RlbFJlY29yZCA6IG1vZGVsc0J5QWRtaW5MZXZlbAorCQkJCQkuZ2V0KGFkbWluTGV2ZWwpKSB7CisJCQkJd29ybGRNb2RlbC5nZXRNb2RlbHMoKS5hZGQobW9kZWxSZWNvcmQuZ2V0TW9kZWwoKSk7CisJCQl9IC8vIGZvcmVhY2ggTW9kZWxSZWNvcmQgYXQgYWRtaW5MZXZlbAorCisJCQlmaW5hbCBXb3JsZE1vZGVsUmVjb3JkIHdvcmxkTW9kZWxSZWNvcmQgPSBuZXcgV29ybGRNb2RlbFJlY29yZCgKKwkJCQkJd29ybGRNb2RlbCwgV09STERfSUQsIGFkbWluTGV2ZWwpOworCQkJd29ybGRNb2RlbC5zZXRVUkkoVVJJLmNyZWF0ZVVSSShNZXNzYWdlRm9ybWF0LmZvcm1hdCgKKwkJCQkJSURFTlRJRklFUl9GT1JNQVQsCisJCQkJCUNvdW50cnlHcmFwaENyZWF0b3IuR0VPR1JBUEhZX0ZJTEVfVVJJX1BSRUZJWCwgV09STERfSUQsCisJCQkJCXdvcmxkTW9kZWxSZWNvcmQuZ2V0U2VyaWFsaXphdGlvbkZpbGVOYW1lKCkpKSk7CisKKwkJCXJldFZhbHVlLmFkZCh3b3JsZE1vZGVsUmVjb3JkKTsKKwkJfSAvLyBmb3IgYWRtaW5MZXZlbAorCisJCWZpbmFsIFdvcmxkTW9kZWxSZWNvcmQgbXVsdGlMZXZlbFdvcmxkTW9kZWwgPSBjcmVhdGVNdWx0aUxldmVsV29ybGQocmV0VmFsdWUpOworCQlyZXRWYWx1ZS5hZGQobXVsdGlMZXZlbFdvcmxkTW9kZWwpOworCQlyZXR1cm4gcmV0VmFsdWU7CisJfSAvLyBjcmVhdGVXb3JsZE1vZGVscworCisJLyoqCisJICogQ3JlYXRlIG9uZSB3b3JsZCBtb2RlbCBjb21wb3NlZCBvZiB0aGUgbW9kZWxzIG9mIHRoZSB3b3JsZCBhdCBlYWNoCisJICogYWRtaW5pc3RyYXRpb24gbGV2ZWwKKwkgKiAKKwkgKiBAcGFyYW0gd29ybGRNb2RlbHMKKwkgKiAgICAgICAgICAgIGxpc3Qgb2YgbW9kZWxzIG9yZGVyZWQgYnkgYWRtaW5pc3RyYXRpb24gbGV2ZWwKKwkgKiBAcmV0dXJuIGEgbW9kZWwgY29tcG9zZWQgb2YgdGhlIHN1Yi1tb2RlbHMgZm9yIHRoZSB3b3JsZCBhdCBlYWNoIGxldmVsCisJICovCisJQFN1cHByZXNzV2FybmluZ3MoInVuY2hlY2tlZCIpCisJcHVibGljIFdvcmxkTW9kZWxSZWNvcmQgY3JlYXRlTXVsdGlMZXZlbFdvcmxkKAorCQkJZmluYWwgTGlzdDxXb3JsZE1vZGVsUmVjb3JkPiB3b3JsZE1vZGVscykgeworCisJCWZpbmFsIE1vZGVsIHdvcmxkTW9kZWwgPSBNb2RlbEZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZU1vZGVsKCk7CisKKwkJZmluYWwgV29ybGRNb2RlbFJlY29yZCByZXRWYWx1ZSA9IG5ldyBXb3JsZE1vZGVsUmVjb3JkKHdvcmxkTW9kZWwsCisJCQkJV09STERfSUQsIDApOworCisJCWZvciAoZmluYWwgV29ybGRNb2RlbFJlY29yZCBtb2RlbFJlY29yZCA6IHdvcmxkTW9kZWxzKSB7CisJCQl3b3JsZE1vZGVsLmdldE1vZGVscygpLmFkZCgKKwkJCQkJKE1vZGVsKUVjb3JlVXRpbC5jb3B5KG1vZGVsUmVjb3JkLmdldE1vZGVsKCkpKTsKKwkJCXJldFZhbHVlLmFkZEFkbWluTGV2ZWxzKG1vZGVsUmVjb3JkLmdldEFkbWluTGV2ZWxzKCkpOworCQl9CisKKwkJZmluYWwgRHVibGluQ29yZSBkYyA9IHdvcmxkTW9kZWwuZ2V0RHVibGluQ29yZSgpOworCQlkYy5wb3B1bGF0ZSgpOworCQlkYy5zZXRUaXRsZSgiV29ybGQgTW9kZWwgKExldmVscyAiCisJCQkJKyByZXRWYWx1ZS5nZXRBZG1pbkxldmVsc0FzU3RyaW5nKCIsICIpICsgIikiKTsKKwkJZmluYWwgU3RyaW5nIHVyaVN0cmluZyA9IE1lc3NhZ2VGb3JtYXQuZm9ybWF0KElERU5USUZJRVJfRk9STUFULAorCQkJCUNvdW50cnlHcmFwaENyZWF0b3IuR0VPR1JBUEhZX0ZJTEVfVVJJX1BSRUZJWCwgV09STERfSUQsCisJCQkJcmV0VmFsdWUuZ2V0U2VyaWFsaXphdGlvbkZpbGVOYW1lKCkpOworCQlkYy5zZXRJZGVudGlmaWVyKHVyaVN0cmluZyk7CisJCXdvcmxkTW9kZWwuc2V0VVJJKFVSSS5jcmVhdGVVUkkodXJpU3RyaW5nKSk7CisKKwkJcmV0dXJuIHJldFZhbHVlOworCX0gLy8gY3JlYXRlTXVsdGlMZXZlbFdvcmxkCisKKwkvKioKKwkgKiBAcGFyYW0gd29ybGRNb2RlbHMKKwkgKiBAcGFyYW0gdXJpUGF0aFN0cmluZworCSAqICAgICAgICAgICAgdGhlIHBhdGggdG8gdGhlIHJvb3Qgb2YgdGhlIGZvbGRlciB0byBzZXJpYWxpemUgdGhlIG1vZGVscyB0bworCSAqIEB0aHJvd3MgSU9FeGNlcHRpb24KKwkgKi8KKwlwcml2YXRlIHZvaWQgc2VyaWFsaXplV29ybGRNb2RlbHMoZmluYWwgTGlzdDxXb3JsZE1vZGVsUmVjb3JkPiB3b3JsZE1vZGVscywKKwkJCWZpbmFsIFN0cmluZyB1cmlQYXRoU3RyaW5nKSB0aHJvd3MgSU9FeGNlcHRpb24geworCQlmb3IgKGZpbmFsIFdvcmxkTW9kZWxSZWNvcmQgbW9kZWxSZWNvcmQgOiB3b3JsZE1vZGVscykgeworCQkJbW9kZWxSZWNvcmQuc2VyaWFsaXplKHVyaVBhdGhTdHJpbmcpOworCQl9IC8vIGZvciBlYWNoIG1vZGVsIHJlY29yZAorCX0gLy8gc2VyaWFsaXplV29ybGRNb2RlbHMKKworCS8qKgorCSAqIEBwYXJhbSBjb3VudHJ5Tm9kZUdyYXBocworCSAqICAgICAgICAgICAgYSBsaXN0IG9mIG1hcHMgb2YgbW9kZWxzIG9mIG5vZGVzIGZvciBjb3VudHJpZXMgZm9yIGVhY2gKKwkgKiAgICAgICAgICAgIGFkbWluc3RyYXRpb24gbGV2ZWwKKwkgKiBAcGFyYW0gbW9kZWxPdXQKKwkgKiAgICAgICAgICAgIHRoZSBvdXRwdXQgd3JpdGVyIGZvciB0aGUgcGx1Z2luLnhtbCBmaWxlIGNvbnRlbnRzCisJICogQHBhcmFtIHBsdWdpbk91dAorCSAqICAgICAgICAgICAgdGhlIG91dHB1dCB3cml0ZXIgZm9yIHRoZSBwbHVnaW4ucHJvcGVydGllcyBmaWxlIGNvbnRlbnRzCisJICovCisJcHJpdmF0ZSB2b2lkIGdlbmVyYXRlTW9kZWxFeHRlbnNpb25Qb2ludFhNTCgKKwkJCWZpbmFsIExpc3Q8V29ybGRNb2RlbFJlY29yZD4gd29ybGRNb2RlbFJlY29yZHMsCisJCQlmaW5hbCBXcml0ZXIgbW9kZWxPdXQsIGZpbmFsIFdyaXRlciBwbHVnaW5PdXQpIHsKKworCQkvLyBUaGUgZHVibGluIGNvcmUgaW5zdGFuY2VzIG9mIHRoZSBtb2RlbHMgbGlrZWx5IHNoYXJlIGNvbW1vbgorCQkvLyBhdHRyaWJ1dGVzLCB3ZSBjYW4gYXZvaWQgZHVwbGljYXRlIGVudHJpZXMgaW4gdGhlIGZpbGVzIHdlIGdlbmVyYXRlCisJCS8vIGJ5IGZpbmRpbmcgdGhlIGR1cGxpY2F0ZSBlbnRyaWVzIGFuZCBvbmx5IGdlbmVyYXRpbmcgYSBzaW5nbGUga2V5IGZvcgorCQkvLyB0aGUgZ2VuZXJhdGVkIHBsdWdpbnMgZmlsZSBjb250ZW50LgorCQlmaW5hbCBNYXA8U3RyaW5nLCBTdHJpbmc+IGRjVmFsdWVLZXlNYXAgPSBuZXcgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4oKTsKKworCQl0cnkgeworCQkJbW9kZWxPdXQud3JpdGUoIjwhLS0gR2VuZXJhdGVkIGNvbnRlbnQuICBEbyBub3QgbW9kaWZ5IC0tPlxuIik7CisKKwkJCW1vZGVsT3V0LndyaXRlKE1lc3NhZ2VGb3JtYXQuZm9ybWF0KAorCQkJCQlDb3VudHJ5R3JhcGhDcmVhdG9yLlhNTF9FWFRFTlNJT05fUE9JTlRfT1BFTiwKKwkJCQkJbmV3IE9iamVjdFtdIHsgQ29uc3RhbnRzLklEX01PREVMX0VYVEVOU0lPTl9QT0lOVCB9KSk7CisJCQltb2RlbE91dC53cml0ZSgiXG4iKTsKKworCQkJcGx1Z2luT3V0CisJCQkJCS53cml0ZSgiI01vZGVsIE5MUyBLZXlzLiAgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQsIGRvIG5vdCBtb2RpZnkuICIKKwkJCQkJCQkrIENhbGVuZGFyLmdldEluc3RhbmNlKCkuZ2V0VGltZSgpCisJCQkJCQkJKyAiICIKKwkJCQkJCQkrIFN5c3RlbS5nZXRQcm9wZXJ0eSgidXNlci5uYW1lIikgKyAiXG4iKTsKKworCQkJLy8gV29ybGQgTW9kZWwKKwkJCUNvdW50cnlHcmFwaENyZWF0b3Iub3V0cHV0Q2F0ZWdvcnkoSURfTU9ERUxfV09STERfQ0FURUdPUlksIFdPUkxELAorCQkJCQlDb3VudHJ5TW9kZWxDcmVhdG9yLklEX01PREVMX1BPTElUSUNBTF9DQVRFR09SWSwKKwkJCQkJQ291bnRyeU1vZGVsQ3JlYXRvci5OTFNfQ0FURUdPUllfS0VZX0ZPUk1BVCwgbW9kZWxPdXQsCisJCQkJCXBsdWdpbk91dCk7CisKKwkJCWZvciAoZmluYWwgV29ybGRNb2RlbFJlY29yZCB3b3JsZE1vZGVsUmVjb3JkIDogd29ybGRNb2RlbFJlY29yZHMpIHsKKwkJCQlDb3VudHJ5R3JhcGhDcmVhdG9yLm91dHB1dER1YmxpbkNvcmUod29ybGRNb2RlbFJlY29yZCwKKwkJCQkJCUlEX01PREVMX1dPUkxEX0NBVEVHT1JZLCBkY1ZhbHVlS2V5TWFwLCBtb2RlbE91dCwKKwkJCQkJCXBsdWdpbk91dCk7CisJCQl9IC8vIGZvciBlYWNoIHdvcmxkIG1vZGVsIHJlY29yZAorCisJCQltb2RlbE91dC53cml0ZShDb3VudHJ5R3JhcGhDcmVhdG9yLlhNTF9FWFRFTlNJT05fUE9JTlRfQ0xPU0UpOworCQkJbW9kZWxPdXQuY2xvc2UoKTsKKwkJCXBsdWdpbk91dC5jbG9zZSgpOworCQl9IGNhdGNoIChmaW5hbCBJT0V4Y2VwdGlvbiBlKSB7CisJCQllLnByaW50U3RhY2tUcmFjZSgpOworCQl9CisKKwl9IC8vIGdlbmVyYXRlTW9kZWxFeHRlbnNpb25Qb2ludFhNTAorCisJLyoqCisJICogVGhpcyBjbGFzcyBjb250YWlucyBhIHdvcmxkIG1vZGVsIGFuZCBpdHMgbWV0YWRhdGEuCisJICovCisJcHVibGljIHN0YXRpYyBjbGFzcyBXb3JsZE1vZGVsUmVjb3JkIGV4dGVuZHMgTW9kZWxSZWNvcmQgeworCisJCS8qKgorCQkgKiBAcGFyYW0gbW9kZWwKKwkJICogICAgICAgICAgICB0aGUgd29ybGQgbW9kZWwKKwkJICogQHBhcmFtIGlkCisJCSAqICAgICAgICAgICAgdGhlIGlkZW50aWZpZXIgb2YgdGhlIG1vZGVsCisJCSAqIEBwYXJhbSBhZG1pbkxldmVsCisJCSAqICAgICAgICAgICAgdGhlIGFkbWluaXN0cmF0aW9uIGxldmVscyBjb250YWluZWQgaW4gdGhlIG1vZGVsCisJCSAqLworCQlwdWJsaWMgV29ybGRNb2RlbFJlY29yZChmaW5hbCBNb2RlbCBtb2RlbCwgZmluYWwgU3RyaW5nIGlkLAorCQkJCWZpbmFsIGludCBhZG1pbkxldmVsKSB7CisJCQl0aGlzKG1vZGVsLCBpZCwgQ29sbGVjdGlvbnMuc2luZ2xldG9uTGlzdChJbnRlZ2VyCisJCQkJCS52YWx1ZU9mKGFkbWluTGV2ZWwpKSk7CisJCX0gLy8gV29ybGRNb2RlbFJlY29yZAorCisJCS8qKgorCQkgKiBAcGFyYW0gbW9kZWwKKwkJICogICAgICAgICAgICB0aGUgd29ybGQgbW9kZWwKKwkJICogQHBhcmFtIGlkCisJCSAqICAgICAgICAgICAgdGhlIGlkZW50aWZpZXIgb2YgdGhlIG1vZGVsCisJCSAqIEBwYXJhbSBhZG1pbkxldmVscworCQkgKiAgICAgICAgICAgIHRoZSBhZG1pbmlzdHJhdGlvbiBsZXZlbHMgY29udGFpbmVkIGluIHRoZSBtb2RlbAorCQkgKi8KKwkJcHVibGljIFdvcmxkTW9kZWxSZWNvcmQoZmluYWwgTW9kZWwgbW9kZWwsIGZpbmFsIFN0cmluZyBpZCwKKwkJCQlmaW5hbCBMaXN0PEludGVnZXI+IGFkbWluTGV2ZWxzKSB7CisJCQlzdXBlcihtb2RlbCwgaWQsIGFkbWluTGV2ZWxzKTsKKwkJfSAvLyBXb3JsZE1vZGVsUmVjb3JkCisKKwkJLyoqCisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS5ncmFwaC5Db3VudHJ5R3JhcGhDcmVhdG9yLlJlY29yZCNnZXRUeXBlKCkKKwkJICovCisJCUBPdmVycmlkZQorCQlwdWJsaWMgU3RyaW5nIGdldFR5cGUoKSB7CisJCQlyZXR1cm4gIndvcmxkIjsKKwkJfSAvLyBnZXRUeXBlCisKKwl9IC8vIFdvcmxkTW9kZWxSZWNvcmQKK30gLy8gV29ybGRNb2RlbENyZWF0b3IKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS90ZXN0cy91dGlsL2RlY29yYXRvcnMvRGVjb3JhdG9yc0ZhY3RvcnkuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS90ZXN0cy91dGlsL2RlY29yYXRvcnMvRGVjb3JhdG9yc0ZhY3RvcnkuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MWQ2YjMzCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3Rlc3RzL3V0aWwvZGVjb3JhdG9ycy9EZWNvcmF0b3JzRmFjdG9yeS5qYXZhCkBAIC0wLDAgKzEsNzggQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsLmRlY29yYXRvcnM7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVGYWN0b3J5OworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiBUaGUgPGI+RmFjdG9yeTwvYj4gZm9yIHRoZSBtb2RlbC4KKyAqIEl0IHByb3ZpZGVzIGEgY3JlYXRlIG1ldGhvZCBmb3IgZWFjaCBub24tYWJzdHJhY3QgY2xhc3Mgb2YgdGhlIG1vZGVsLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC5kZWNvcmF0b3JzLkRlY29yYXRvcnNQYWNrYWdlCisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBpbnRlcmZhY2UgRGVjb3JhdG9yc0ZhY3RvcnkgZXh0ZW5kcyBFRmFjdG9yeSB7CisJLyoqCisJICogVGhlIHNpbmdsZXRvbiBpbnN0YW5jZSBvZiB0aGUgZmFjdG9yeS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlEZWNvcmF0b3JzRmFjdG9yeSBlSU5TVEFOQ0UgPSBvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwuZGVjb3JhdG9ycy5pbXBsLkRlY29yYXRvcnNGYWN0b3J5SW1wbC5pbml0KCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPlRlc3QgRWRnZSBEZWNvcmF0b3IxPC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiBhIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5UZXN0IEVkZ2UgRGVjb3JhdG9yMTwvZW0+Jy4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJVGVzdEVkZ2VEZWNvcmF0b3IxIGNyZWF0ZVRlc3RFZGdlRGVjb3JhdG9yMSgpOworCisJLyoqCisJICogUmV0dXJucyBhIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5UZXN0IEdyYXBoIERlY29yYXRvcjE8L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPlRlc3QgR3JhcGggRGVjb3JhdG9yMTwvZW0+Jy4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJVGVzdEdyYXBoRGVjb3JhdG9yMSBjcmVhdGVUZXN0R3JhcGhEZWNvcmF0b3IxKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPlRlc3QgTm9kZSBEZWNvcmF0b3IxPC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiBhIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5UZXN0IE5vZGUgRGVjb3JhdG9yMTwvZW0+Jy4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJVGVzdE5vZGVEZWNvcmF0b3IxIGNyZWF0ZVRlc3ROb2RlRGVjb3JhdG9yMSgpOworCisJLyoqCisJICogUmV0dXJucyBhIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5UZXN0IFNjZW5hcmlvIEdyYXBoIERlY29yYXRvcjE8L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPlRlc3QgU2NlbmFyaW8gR3JhcGggRGVjb3JhdG9yMTwvZW0+Jy4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJVGVzdFNjZW5hcmlvR3JhcGhEZWNvcmF0b3IxIGNyZWF0ZVRlc3RTY2VuYXJpb0dyYXBoRGVjb3JhdG9yMSgpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgcGFja2FnZSBzdXBwb3J0ZWQgYnkgdGhpcyBmYWN0b3J5LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgcGFja2FnZSBzdXBwb3J0ZWQgYnkgdGhpcyBmYWN0b3J5LgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlEZWNvcmF0b3JzUGFja2FnZSBnZXREZWNvcmF0b3JzUGFja2FnZSgpOworCit9IC8vRGVjb3JhdG9yc0ZhY3RvcnkKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS90ZXN0cy91dGlsL2RlY29yYXRvcnMvRGVjb3JhdG9yc1BhY2thZ2UuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS90ZXN0cy91dGlsL2RlY29yYXRvcnMvRGVjb3JhdG9yc1BhY2thZ2UuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZjFiODQ2Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3Rlc3RzL3V0aWwvZGVjb3JhdG9ycy9EZWNvcmF0b3JzUGFja2FnZS5qYXZhCkBAIC0wLDAgKzEsODc3IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC5kZWNvcmF0b3JzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQXR0cmlidXRlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVEYXRhVHlwZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRVBhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVSZWZlcmVuY2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLk1vZGVsUGFja2FnZTsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogVGhlIDxiPlBhY2thZ2U8L2I+IGZvciB0aGUgbW9kZWwuCisgKiBJdCBjb250YWlucyBhY2Nlc3NvcnMgZm9yIHRoZSBtZXRhIG9iamVjdHMgdG8gcmVwcmVzZW50CisgKiA8dWw+CisgKiAgIDxsaT5lYWNoIGNsYXNzLDwvbGk+CisgKiAgIDxsaT5lYWNoIGZlYXR1cmUgb2YgZWFjaCBjbGFzcyw8L2xpPgorICogICA8bGk+ZWFjaCBlbnVtLDwvbGk+CisgKiAgIDxsaT5hbmQgZWFjaCBkYXRhIHR5cGU8L2xpPgorICogPC91bD4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwuZGVjb3JhdG9ycy5EZWNvcmF0b3JzRmFjdG9yeQorICogQG1vZGVsIGtpbmQ9InBhY2thZ2UiCisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBpbnRlcmZhY2UgRGVjb3JhdG9yc1BhY2thZ2UgZXh0ZW5kcyBFUGFja2FnZSB7CisJLyoqCisJICogVGhlIHBhY2thZ2UgbmFtZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlTdHJpbmcgZU5BTUUgPSAiZGVjb3JhdG9ycyI7IC8vJE5PTi1OTFMtMSQKKworCS8qKgorCSAqIFRoZSBwYWNrYWdlIG5hbWVzcGFjZSBVUkkuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJU3RyaW5nIGVOU19VUkkgPSAiaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL3Rlc3RzL3V0aWwvZGVjb3JhdG9ycy5lY29yZSI7IC8vJE5PTi1OTFMtMSQKKworCS8qKgorCSAqIFRoZSBwYWNrYWdlIG5hbWVzcGFjZSBuYW1lLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCVN0cmluZyBlTlNfUFJFRklYID0gIm9yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC5kZWNvcmF0b3JzIjsgLy8kTk9OLU5MUy0xJAorCisJLyoqCisJICogVGhlIHNpbmdsZXRvbiBpbnN0YW5jZSBvZiB0aGUgcGFja2FnZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlEZWNvcmF0b3JzUGFja2FnZSBlSU5TVEFOQ0UgPSBvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwuZGVjb3JhdG9ycy5pbXBsLkRlY29yYXRvcnNQYWNrYWdlSW1wbC5pbml0KCk7CisKKwkvKioKKwkgKiBUaGUgbWV0YSBvYmplY3QgaWQgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5FZGdlRGVjb3JhdG9yIDxlbT5FZGdlIERlY29yYXRvcjwvZW0+fScgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5FZGdlRGVjb3JhdG9yCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwuZGVjb3JhdG9ycy5pbXBsLkRlY29yYXRvcnNQYWNrYWdlSW1wbCNnZXRFZGdlRGVjb3JhdG9yKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJaW50IEVER0VfREVDT1JBVE9SID0gNDsKKworCS8qKgorCSAqIFRoZSBtZXRhIG9iamVjdCBpZCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsLmRlY29yYXRvcnMuaW1wbC5UZXN0RWRnZURlY29yYXRvcjFJbXBsIDxlbT5UZXN0IEVkZ2UgRGVjb3JhdG9yMTwvZW0+fScgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC5kZWNvcmF0b3JzLmltcGwuVGVzdEVkZ2VEZWNvcmF0b3IxSW1wbAorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsLmRlY29yYXRvcnMuaW1wbC5EZWNvcmF0b3JzUGFja2FnZUltcGwjZ2V0VGVzdEVkZ2VEZWNvcmF0b3IxKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJaW50IFRFU1RfRURHRV9ERUNPUkFUT1IxID0gMDsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5VUkk8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBURVNUX0VER0VfREVDT1JBVE9SMV9fVVJJID0gTW9kZWxQYWNrYWdlLkVER0VfREVDT1JBVE9SX19VUkk7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VHlwZSBVUkk8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBURVNUX0VER0VfREVDT1JBVE9SMV9fVFlQRV9VUkkgPSBNb2RlbFBhY2thZ2UuRURHRV9ERUNPUkFUT1JfX1RZUEVfVVJJOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkR1YmxpbiBDb3JlPC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgVEVTVF9FREdFX0RFQ09SQVRPUjFfX0RVQkxJTl9DT1JFID0gTW9kZWxQYWNrYWdlLkVER0VfREVDT1JBVE9SX19EVUJMSU5fQ09SRTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5MYWJlbHMgVG8gVXBkYXRlPC9iPjwvZW0+JyByZWZlcmVuY2UgbGlzdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBURVNUX0VER0VfREVDT1JBVE9SMV9fTEFCRUxTX1RPX1VQREFURSA9IE1vZGVsUGFja2FnZS5FREdFX0RFQ09SQVRPUl9fTEFCRUxTX1RPX1VQREFURTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5HcmFwaDwvYj48L2VtPicgY29udGFpbmVyIHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBURVNUX0VER0VfREVDT1JBVE9SMV9fR1JBUEggPSBNb2RlbFBhY2thZ2UuRURHRV9ERUNPUkFUT1JfX0dSQVBIOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkVuYWJsZWQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBURVNUX0VER0VfREVDT1JBVE9SMV9fRU5BQkxFRCA9IE1vZGVsUGFja2FnZS5FREdFX0RFQ09SQVRPUl9fRU5BQkxFRDsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5HcmFwaCBEZWNvcmF0ZWQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBURVNUX0VER0VfREVDT1JBVE9SMV9fR1JBUEhfREVDT1JBVEVEID0gTW9kZWxQYWNrYWdlLkVER0VfREVDT1JBVE9SX19HUkFQSF9ERUNPUkFURUQ7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+Tm9kZSBBVVJJPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgVEVTVF9FREdFX0RFQ09SQVRPUjFfX05PREVfQVVSSSA9IE1vZGVsUGFja2FnZS5FREdFX0RFQ09SQVRPUl9GRUFUVVJFX0NPVU5UICsgMDsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5Ob2RlIEJVUkk8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBURVNUX0VER0VfREVDT1JBVE9SMV9fTk9ERV9CVVJJID0gTW9kZWxQYWNrYWdlLkVER0VfREVDT1JBVE9SX0ZFQVRVUkVfQ09VTlQgKyAxOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkVkZ2UgVVJJPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgVEVTVF9FREdFX0RFQ09SQVRPUjFfX0VER0VfVVJJID0gTW9kZWxQYWNrYWdlLkVER0VfREVDT1JBVE9SX0ZFQVRVUkVfQ09VTlQgKyAyOworCisJLyoqCisJICogVGhlIG51bWJlciBvZiBzdHJ1Y3R1cmFsIGZlYXR1cmVzIG9mIHRoZSAnPGVtPlRlc3QgRWRnZSBEZWNvcmF0b3IxPC9lbT4nIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFRFU1RfRURHRV9ERUNPUkFUT1IxX0ZFQVRVUkVfQ09VTlQgPSBNb2RlbFBhY2thZ2UuRURHRV9ERUNPUkFUT1JfRkVBVFVSRV9DT1VOVCArIDM7CisKKwkvKioKKwkgKiBUaGUgbWV0YSBvYmplY3QgaWQgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5HcmFwaERlY29yYXRvciA8ZW0+R3JhcGggRGVjb3JhdG9yPC9lbT59JyBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLkdyYXBoRGVjb3JhdG9yCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwuZGVjb3JhdG9ycy5pbXBsLkRlY29yYXRvcnNQYWNrYWdlSW1wbCNnZXRHcmFwaERlY29yYXRvcigpCisJICogQGdlbmVyYXRlZAorCSAqLworCWludCBHUkFQSF9ERUNPUkFUT1IgPSA1OworCisJLyoqCisJICogVGhlIG1ldGEgb2JqZWN0IGlkIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwuZGVjb3JhdG9ycy5pbXBsLlRlc3RHcmFwaERlY29yYXRvcjFJbXBsIDxlbT5UZXN0IEdyYXBoIERlY29yYXRvcjE8L2VtPn0nIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwuZGVjb3JhdG9ycy5pbXBsLlRlc3RHcmFwaERlY29yYXRvcjFJbXBsCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwuZGVjb3JhdG9ycy5pbXBsLkRlY29yYXRvcnNQYWNrYWdlSW1wbCNnZXRUZXN0R3JhcGhEZWNvcmF0b3IxKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJaW50IFRFU1RfR1JBUEhfREVDT1JBVE9SMSA9IDE7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VVJJPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgVEVTVF9HUkFQSF9ERUNPUkFUT1IxX19VUkkgPSBNb2RlbFBhY2thZ2UuR1JBUEhfREVDT1JBVE9SX19VUkk7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VHlwZSBVUkk8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBURVNUX0dSQVBIX0RFQ09SQVRPUjFfX1RZUEVfVVJJID0gTW9kZWxQYWNrYWdlLkdSQVBIX0RFQ09SQVRPUl9fVFlQRV9VUkk7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RHVibGluIENvcmU8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBURVNUX0dSQVBIX0RFQ09SQVRPUjFfX0RVQkxJTl9DT1JFID0gTW9kZWxQYWNrYWdlLkdSQVBIX0RFQ09SQVRPUl9fRFVCTElOX0NPUkU7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+TGFiZWxzIFRvIFVwZGF0ZTwvYj48L2VtPicgcmVmZXJlbmNlIGxpc3QuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgVEVTVF9HUkFQSF9ERUNPUkFUT1IxX19MQUJFTFNfVE9fVVBEQVRFID0gTW9kZWxQYWNrYWdlLkdSQVBIX0RFQ09SQVRPUl9fTEFCRUxTX1RPX1VQREFURTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5HcmFwaDwvYj48L2VtPicgY29udGFpbmVyIHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBURVNUX0dSQVBIX0RFQ09SQVRPUjFfX0dSQVBIID0gTW9kZWxQYWNrYWdlLkdSQVBIX0RFQ09SQVRPUl9fR1JBUEg7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RW5hYmxlZDwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFRFU1RfR1JBUEhfREVDT1JBVE9SMV9fRU5BQkxFRCA9IE1vZGVsUGFja2FnZS5HUkFQSF9ERUNPUkFUT1JfX0VOQUJMRUQ7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+R3JhcGggRGVjb3JhdGVkPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgVEVTVF9HUkFQSF9ERUNPUkFUT1IxX19HUkFQSF9ERUNPUkFURUQgPSBNb2RlbFBhY2thZ2UuR1JBUEhfREVDT1JBVE9SX19HUkFQSF9ERUNPUkFURUQ7CisKKwkvKioKKwkgKiBUaGUgbnVtYmVyIG9mIHN0cnVjdHVyYWwgZmVhdHVyZXMgb2YgdGhlICc8ZW0+VGVzdCBHcmFwaCBEZWNvcmF0b3IxPC9lbT4nIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFRFU1RfR1JBUEhfREVDT1JBVE9SMV9GRUFUVVJFX0NPVU5UID0gTW9kZWxQYWNrYWdlLkdSQVBIX0RFQ09SQVRPUl9GRUFUVVJFX0NPVU5UICsgMDsKKworCS8qKgorCSAqIFRoZSBtZXRhIG9iamVjdCBpZCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLk5vZGVEZWNvcmF0b3IgPGVtPk5vZGUgRGVjb3JhdG9yPC9lbT59JyBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLk5vZGVEZWNvcmF0b3IKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC5kZWNvcmF0b3JzLmltcGwuRGVjb3JhdG9yc1BhY2thZ2VJbXBsI2dldE5vZGVEZWNvcmF0b3IoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlpbnQgTk9ERV9ERUNPUkFUT1IgPSA2OworCisJLyoqCisJICogVGhlIG1ldGEgb2JqZWN0IGlkIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwuZGVjb3JhdG9ycy5pbXBsLlRlc3ROb2RlRGVjb3JhdG9yMUltcGwgPGVtPlRlc3QgTm9kZSBEZWNvcmF0b3IxPC9lbT59JyBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsLmRlY29yYXRvcnMuaW1wbC5UZXN0Tm9kZURlY29yYXRvcjFJbXBsCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwuZGVjb3JhdG9ycy5pbXBsLkRlY29yYXRvcnNQYWNrYWdlSW1wbCNnZXRUZXN0Tm9kZURlY29yYXRvcjEoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlpbnQgVEVTVF9OT0RFX0RFQ09SQVRPUjEgPSAyOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlVSSTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFRFU1RfTk9ERV9ERUNPUkFUT1IxX19VUkkgPSBNb2RlbFBhY2thZ2UuTk9ERV9ERUNPUkFUT1JfX1VSSTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5UeXBlIFVSSTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFRFU1RfTk9ERV9ERUNPUkFUT1IxX19UWVBFX1VSSSA9IE1vZGVsUGFja2FnZS5OT0RFX0RFQ09SQVRPUl9fVFlQRV9VUkk7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RHVibGluIENvcmU8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBURVNUX05PREVfREVDT1JBVE9SMV9fRFVCTElOX0NPUkUgPSBNb2RlbFBhY2thZ2UuTk9ERV9ERUNPUkFUT1JfX0RVQkxJTl9DT1JFOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkxhYmVscyBUbyBVcGRhdGU8L2I+PC9lbT4nIHJlZmVyZW5jZSBsaXN0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFRFU1RfTk9ERV9ERUNPUkFUT1IxX19MQUJFTFNfVE9fVVBEQVRFID0gTW9kZWxQYWNrYWdlLk5PREVfREVDT1JBVE9SX19MQUJFTFNfVE9fVVBEQVRFOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkdyYXBoPC9iPjwvZW0+JyBjb250YWluZXIgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFRFU1RfTk9ERV9ERUNPUkFUT1IxX19HUkFQSCA9IE1vZGVsUGFja2FnZS5OT0RFX0RFQ09SQVRPUl9fR1JBUEg7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RW5hYmxlZDwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFRFU1RfTk9ERV9ERUNPUkFUT1IxX19FTkFCTEVEID0gTW9kZWxQYWNrYWdlLk5PREVfREVDT1JBVE9SX19FTkFCTEVEOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkdyYXBoIERlY29yYXRlZDwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFRFU1RfTk9ERV9ERUNPUkFUT1IxX19HUkFQSF9ERUNPUkFURUQgPSBNb2RlbFBhY2thZ2UuTk9ERV9ERUNPUkFUT1JfX0dSQVBIX0RFQ09SQVRFRDsKKworCS8qKgorCSAqIFRoZSBudW1iZXIgb2Ygc3RydWN0dXJhbCBmZWF0dXJlcyBvZiB0aGUgJzxlbT5UZXN0IE5vZGUgRGVjb3JhdG9yMTwvZW0+JyBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBURVNUX05PREVfREVDT1JBVE9SMV9GRUFUVVJFX0NPVU5UID0gTW9kZWxQYWNrYWdlLk5PREVfREVDT1JBVE9SX0ZFQVRVUkVfQ09VTlQgKyAwOworCisJLyoqCisJICogVGhlIG1ldGEgb2JqZWN0IGlkIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwuZGVjb3JhdG9ycy5pbXBsLlRlc3RTY2VuYXJpb0dyYXBoRGVjb3JhdG9yMUltcGwgPGVtPlRlc3QgU2NlbmFyaW8gR3JhcGggRGVjb3JhdG9yMTwvZW0+fScgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC5kZWNvcmF0b3JzLmltcGwuVGVzdFNjZW5hcmlvR3JhcGhEZWNvcmF0b3IxSW1wbAorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsLmRlY29yYXRvcnMuaW1wbC5EZWNvcmF0b3JzUGFja2FnZUltcGwjZ2V0VGVzdFNjZW5hcmlvR3JhcGhEZWNvcmF0b3IxKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJaW50IFRFU1RfU0NFTkFSSU9fR1JBUEhfREVDT1JBVE9SMSA9IDM7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VVJJPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgVEVTVF9TQ0VOQVJJT19HUkFQSF9ERUNPUkFUT1IxX19VUkkgPSBNb2RlbFBhY2thZ2UuR1JBUEhfREVDT1JBVE9SX19VUkk7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VHlwZSBVUkk8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBURVNUX1NDRU5BUklPX0dSQVBIX0RFQ09SQVRPUjFfX1RZUEVfVVJJID0gTW9kZWxQYWNrYWdlLkdSQVBIX0RFQ09SQVRPUl9fVFlQRV9VUkk7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RHVibGluIENvcmU8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBURVNUX1NDRU5BUklPX0dSQVBIX0RFQ09SQVRPUjFfX0RVQkxJTl9DT1JFID0gTW9kZWxQYWNrYWdlLkdSQVBIX0RFQ09SQVRPUl9fRFVCTElOX0NPUkU7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+TGFiZWxzIFRvIFVwZGF0ZTwvYj48L2VtPicgcmVmZXJlbmNlIGxpc3QuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgVEVTVF9TQ0VOQVJJT19HUkFQSF9ERUNPUkFUT1IxX19MQUJFTFNfVE9fVVBEQVRFID0gTW9kZWxQYWNrYWdlLkdSQVBIX0RFQ09SQVRPUl9fTEFCRUxTX1RPX1VQREFURTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5HcmFwaDwvYj48L2VtPicgY29udGFpbmVyIHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBURVNUX1NDRU5BUklPX0dSQVBIX0RFQ09SQVRPUjFfX0dSQVBIID0gTW9kZWxQYWNrYWdlLkdSQVBIX0RFQ09SQVRPUl9fR1JBUEg7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RW5hYmxlZDwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFRFU1RfU0NFTkFSSU9fR1JBUEhfREVDT1JBVE9SMV9fRU5BQkxFRCA9IE1vZGVsUGFja2FnZS5HUkFQSF9ERUNPUkFUT1JfX0VOQUJMRUQ7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+R3JhcGggRGVjb3JhdGVkPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgVEVTVF9TQ0VOQVJJT19HUkFQSF9ERUNPUkFUT1IxX19HUkFQSF9ERUNPUkFURUQgPSBNb2RlbFBhY2thZ2UuR1JBUEhfREVDT1JBVE9SX19HUkFQSF9ERUNPUkFURUQ7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RG91YmxlIFZhbHVlPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgVEVTVF9TQ0VOQVJJT19HUkFQSF9ERUNPUkFUT1IxX19ET1VCTEVfVkFMVUUgPSBNb2RlbFBhY2thZ2UuR1JBUEhfREVDT1JBVE9SX0ZFQVRVUkVfQ09VTlQgKyAwOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkludCBWYWx1ZTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFRFU1RfU0NFTkFSSU9fR1JBUEhfREVDT1JBVE9SMV9fSU5UX1ZBTFVFID0gTW9kZWxQYWNrYWdlLkdSQVBIX0RFQ09SQVRPUl9GRUFUVVJFX0NPVU5UICsgMTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5TdHJpbmcgVmFsdWU8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBURVNUX1NDRU5BUklPX0dSQVBIX0RFQ09SQVRPUjFfX1NUUklOR19WQUxVRSA9IE1vZGVsUGFja2FnZS5HUkFQSF9ERUNPUkFUT1JfRkVBVFVSRV9DT1VOVCArIDI7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+U1RFTSBUaW1lIFZhbHVlPC9iPjwvZW0+JyByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgVEVTVF9TQ0VOQVJJT19HUkFQSF9ERUNPUkFUT1IxX19TVEVNX1RJTUVfVkFMVUUgPSBNb2RlbFBhY2thZ2UuR1JBUEhfREVDT1JBVE9SX0ZFQVRVUkVfQ09VTlQgKyAzOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkJvb2xlYW4gVmFsdWU8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBURVNUX1NDRU5BUklPX0dSQVBIX0RFQ09SQVRPUjFfX0JPT0xFQU5fVkFMVUUgPSBNb2RlbFBhY2thZ2UuR1JBUEhfREVDT1JBVE9SX0ZFQVRVUkVfQ09VTlQgKyA0OworCisJLyoqCisJICogVGhlIG51bWJlciBvZiBzdHJ1Y3R1cmFsIGZlYXR1cmVzIG9mIHRoZSAnPGVtPlRlc3QgU2NlbmFyaW8gR3JhcGggRGVjb3JhdG9yMTwvZW0+JyBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBURVNUX1NDRU5BUklPX0dSQVBIX0RFQ09SQVRPUjFfRkVBVFVSRV9DT1VOVCA9IE1vZGVsUGFja2FnZS5HUkFQSF9ERUNPUkFUT1JfRkVBVFVSRV9DT1VOVCArIDU7CisKKwkvKioKKwkgKiBUaGUgbnVtYmVyIG9mIHN0cnVjdHVyYWwgZmVhdHVyZXMgb2YgdGhlICc8ZW0+RWRnZSBEZWNvcmF0b3I8L2VtPicgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgRURHRV9ERUNPUkFUT1JfRkVBVFVSRV9DT1VOVCA9IDA7CisKKwkvKioKKwkgKiBUaGUgbnVtYmVyIG9mIHN0cnVjdHVyYWwgZmVhdHVyZXMgb2YgdGhlICc8ZW0+R3JhcGggRGVjb3JhdG9yPC9lbT4nIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IEdSQVBIX0RFQ09SQVRPUl9GRUFUVVJFX0NPVU5UID0gMDsKKworCS8qKgorCSAqIFRoZSBudW1iZXIgb2Ygc3RydWN0dXJhbCBmZWF0dXJlcyBvZiB0aGUgJzxlbT5Ob2RlIERlY29yYXRvcjwvZW0+JyBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBOT0RFX0RFQ09SQVRPUl9GRUFUVVJFX0NPVU5UID0gMDsKKworCS8qKgorCSAqIFRoZSBtZXRhIG9iamVjdCBpZCBmb3IgdGhlICc8ZW0+VVJJPC9lbT4nIGRhdGEgdHlwZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlVSSQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsLmRlY29yYXRvcnMuaW1wbC5EZWNvcmF0b3JzUGFja2FnZUltcGwjZ2V0VVJJKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJaW50IFVSSSA9IDc7CisKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC5kZWNvcmF0b3JzLlRlc3RFZGdlRGVjb3JhdG9yMSA8ZW0+VGVzdCBFZGdlIERlY29yYXRvcjE8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICc8ZW0+VGVzdCBFZGdlIERlY29yYXRvcjE8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwuZGVjb3JhdG9ycy5UZXN0RWRnZURlY29yYXRvcjEKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUNsYXNzIGdldFRlc3RFZGdlRGVjb3JhdG9yMSgpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwuZGVjb3JhdG9ycy5UZXN0RWRnZURlY29yYXRvcjEjZ2V0Tm9kZUFVUkkgPGVtPk5vZGUgQVVSSTwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPGVtPk5vZGUgQVVSSTwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC5kZWNvcmF0b3JzLlRlc3RFZGdlRGVjb3JhdG9yMSNnZXROb2RlQVVSSSgpCisJICogQHNlZSAjZ2V0VGVzdEVkZ2VEZWNvcmF0b3IxKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUF0dHJpYnV0ZSBnZXRUZXN0RWRnZURlY29yYXRvcjFfTm9kZUFVUkkoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsLmRlY29yYXRvcnMuVGVzdEVkZ2VEZWNvcmF0b3IxI2dldE5vZGVCVVJJIDxlbT5Ob2RlIEJVUkk8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxlbT5Ob2RlIEJVUkk8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwuZGVjb3JhdG9ycy5UZXN0RWRnZURlY29yYXRvcjEjZ2V0Tm9kZUJVUkkoKQorCSAqIEBzZWUgI2dldFRlc3RFZGdlRGVjb3JhdG9yMSgpCisJICogQGdlbmVyYXRlZAorCSAqLworCUVBdHRyaWJ1dGUgZ2V0VGVzdEVkZ2VEZWNvcmF0b3IxX05vZGVCVVJJKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC5kZWNvcmF0b3JzLlRlc3RFZGdlRGVjb3JhdG9yMSNnZXRFZGdlVVJJIDxlbT5FZGdlIFVSSTwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPGVtPkVkZ2UgVVJJPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsLmRlY29yYXRvcnMuVGVzdEVkZ2VEZWNvcmF0b3IxI2dldEVkZ2VVUkkoKQorCSAqIEBzZWUgI2dldFRlc3RFZGdlRGVjb3JhdG9yMSgpCisJICogQGdlbmVyYXRlZAorCSAqLworCUVBdHRyaWJ1dGUgZ2V0VGVzdEVkZ2VEZWNvcmF0b3IxX0VkZ2VVUkkoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC5kZWNvcmF0b3JzLlRlc3RHcmFwaERlY29yYXRvcjEgPGVtPlRlc3QgR3JhcGggRGVjb3JhdG9yMTwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJzxlbT5UZXN0IEdyYXBoIERlY29yYXRvcjE8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwuZGVjb3JhdG9ycy5UZXN0R3JhcGhEZWNvcmF0b3IxCisJICogQGdlbmVyYXRlZAorCSAqLworCUVDbGFzcyBnZXRUZXN0R3JhcGhEZWNvcmF0b3IxKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwuZGVjb3JhdG9ycy5UZXN0Tm9kZURlY29yYXRvcjEgPGVtPlRlc3QgTm9kZSBEZWNvcmF0b3IxPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAnPGVtPlRlc3QgTm9kZSBEZWNvcmF0b3IxPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsLmRlY29yYXRvcnMuVGVzdE5vZGVEZWNvcmF0b3IxCisJICogQGdlbmVyYXRlZAorCSAqLworCUVDbGFzcyBnZXRUZXN0Tm9kZURlY29yYXRvcjEoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC5kZWNvcmF0b3JzLlRlc3RTY2VuYXJpb0dyYXBoRGVjb3JhdG9yMSA8ZW0+VGVzdCBTY2VuYXJpbyBHcmFwaCBEZWNvcmF0b3IxPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAnPGVtPlRlc3QgU2NlbmFyaW8gR3JhcGggRGVjb3JhdG9yMTwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC5kZWNvcmF0b3JzLlRlc3RTY2VuYXJpb0dyYXBoRGVjb3JhdG9yMQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQ2xhc3MgZ2V0VGVzdFNjZW5hcmlvR3JhcGhEZWNvcmF0b3IxKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC5kZWNvcmF0b3JzLlRlc3RTY2VuYXJpb0dyYXBoRGVjb3JhdG9yMSNnZXREb3VibGVWYWx1ZSA8ZW0+RG91YmxlIFZhbHVlPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+RG91YmxlIFZhbHVlPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsLmRlY29yYXRvcnMuVGVzdFNjZW5hcmlvR3JhcGhEZWNvcmF0b3IxI2dldERvdWJsZVZhbHVlKCkKKwkgKiBAc2VlICNnZXRUZXN0U2NlbmFyaW9HcmFwaERlY29yYXRvcjEoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQXR0cmlidXRlIGdldFRlc3RTY2VuYXJpb0dyYXBoRGVjb3JhdG9yMV9Eb3VibGVWYWx1ZSgpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwuZGVjb3JhdG9ycy5UZXN0U2NlbmFyaW9HcmFwaERlY29yYXRvcjEjZ2V0SW50VmFsdWUgPGVtPkludCBWYWx1ZTwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPGVtPkludCBWYWx1ZTwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC5kZWNvcmF0b3JzLlRlc3RTY2VuYXJpb0dyYXBoRGVjb3JhdG9yMSNnZXRJbnRWYWx1ZSgpCisJICogQHNlZSAjZ2V0VGVzdFNjZW5hcmlvR3JhcGhEZWNvcmF0b3IxKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUF0dHJpYnV0ZSBnZXRUZXN0U2NlbmFyaW9HcmFwaERlY29yYXRvcjFfSW50VmFsdWUoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsLmRlY29yYXRvcnMuVGVzdFNjZW5hcmlvR3JhcGhEZWNvcmF0b3IxI2dldFN0cmluZ1ZhbHVlIDxlbT5TdHJpbmcgVmFsdWU8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxlbT5TdHJpbmcgVmFsdWU8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwuZGVjb3JhdG9ycy5UZXN0U2NlbmFyaW9HcmFwaERlY29yYXRvcjEjZ2V0U3RyaW5nVmFsdWUoKQorCSAqIEBzZWUgI2dldFRlc3RTY2VuYXJpb0dyYXBoRGVjb3JhdG9yMSgpCisJICogQGdlbmVyYXRlZAorCSAqLworCUVBdHRyaWJ1dGUgZ2V0VGVzdFNjZW5hcmlvR3JhcGhEZWNvcmF0b3IxX1N0cmluZ1ZhbHVlKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIHJlZmVyZW5jZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC5kZWNvcmF0b3JzLlRlc3RTY2VuYXJpb0dyYXBoRGVjb3JhdG9yMSNnZXRTVEVNVGltZVZhbHVlIDxlbT5TVEVNIFRpbWUgVmFsdWU8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSByZWZlcmVuY2UgJzxlbT5TVEVNIFRpbWUgVmFsdWU8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwuZGVjb3JhdG9ycy5UZXN0U2NlbmFyaW9HcmFwaERlY29yYXRvcjEjZ2V0U1RFTVRpbWVWYWx1ZSgpCisJICogQHNlZSAjZ2V0VGVzdFNjZW5hcmlvR3JhcGhEZWNvcmF0b3IxKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRVJlZmVyZW5jZSBnZXRUZXN0U2NlbmFyaW9HcmFwaERlY29yYXRvcjFfU1RFTVRpbWVWYWx1ZSgpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwuZGVjb3JhdG9ycy5UZXN0U2NlbmFyaW9HcmFwaERlY29yYXRvcjEjaXNCb29sZWFuVmFsdWUgPGVtPkJvb2xlYW4gVmFsdWU8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxlbT5Cb29sZWFuIFZhbHVlPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsLmRlY29yYXRvcnMuVGVzdFNjZW5hcmlvR3JhcGhEZWNvcmF0b3IxI2lzQm9vbGVhblZhbHVlKCkKKwkgKiBAc2VlICNnZXRUZXN0U2NlbmFyaW9HcmFwaERlY29yYXRvcjEoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQXR0cmlidXRlIGdldFRlc3RTY2VuYXJpb0dyYXBoRGVjb3JhdG9yMV9Cb29sZWFuVmFsdWUoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5FZGdlRGVjb3JhdG9yIDxlbT5FZGdlIERlY29yYXRvcjwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJzxlbT5FZGdlIERlY29yYXRvcjwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5FZGdlRGVjb3JhdG9yCisJICogQG1vZGVsIGluc3RhbmNlQ2xhc3M9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5FZGdlRGVjb3JhdG9yIgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQ2xhc3MgZ2V0RWRnZURlY29yYXRvcigpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLkdyYXBoRGVjb3JhdG9yIDxlbT5HcmFwaCBEZWNvcmF0b3I8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICc8ZW0+R3JhcGggRGVjb3JhdG9yPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLkdyYXBoRGVjb3JhdG9yCisJICogQG1vZGVsIGluc3RhbmNlQ2xhc3M9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5HcmFwaERlY29yYXRvciIKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUNsYXNzIGdldEdyYXBoRGVjb3JhdG9yKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuTm9kZURlY29yYXRvciA8ZW0+Tm9kZSBEZWNvcmF0b3I8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICc8ZW0+Tm9kZSBEZWNvcmF0b3I8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuTm9kZURlY29yYXRvcgorCSAqIEBtb2RlbCBpbnN0YW5jZUNsYXNzPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuTm9kZURlY29yYXRvciIKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUNsYXNzIGdldE5vZGVEZWNvcmF0b3IoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciBkYXRhIHR5cGUgJ3tAbGluayBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuVVJJIDxlbT5VUkk8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIGRhdGEgdHlwZSAnPGVtPlVSSTwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5VUkkKKwkgKiBAbW9kZWwgaW5zdGFuY2VDbGFzcz0ib3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlVSSSIKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRURhdGFUeXBlIGdldFVSSSgpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgZmFjdG9yeSB0aGF0IGNyZWF0ZXMgdGhlIGluc3RhbmNlcyBvZiB0aGUgbW9kZWwuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBmYWN0b3J5IHRoYXQgY3JlYXRlcyB0aGUgaW5zdGFuY2VzIG9mIHRoZSBtb2RlbC4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRGVjb3JhdG9yc0ZhY3RvcnkgZ2V0RGVjb3JhdG9yc0ZhY3RvcnkoKTsKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogRGVmaW5lcyBsaXRlcmFscyBmb3IgdGhlIG1ldGEgb2JqZWN0cyB0aGF0IHJlcHJlc2VudAorCSAqIDx1bD4KKwkgKiAgIDxsaT5lYWNoIGNsYXNzLDwvbGk+CisJICogICA8bGk+ZWFjaCBmZWF0dXJlIG9mIGVhY2ggY2xhc3MsPC9saT4KKwkgKiAgIDxsaT5lYWNoIGVudW0sPC9saT4KKwkgKiAgIDxsaT5hbmQgZWFjaCBkYXRhIHR5cGU8L2xpPgorCSAqIDwvdWw+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCWludGVyZmFjZSBMaXRlcmFscyAgeworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC5kZWNvcmF0b3JzLmltcGwuVGVzdEVkZ2VEZWNvcmF0b3IxSW1wbCA8ZW0+VGVzdCBFZGdlIERlY29yYXRvcjE8L2VtPn0nIGNsYXNzLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwuZGVjb3JhdG9ycy5pbXBsLlRlc3RFZGdlRGVjb3JhdG9yMUltcGwKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwuZGVjb3JhdG9ycy5pbXBsLkRlY29yYXRvcnNQYWNrYWdlSW1wbCNnZXRUZXN0RWRnZURlY29yYXRvcjEoKQorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQ2xhc3MgVEVTVF9FREdFX0RFQ09SQVRPUjEgPSBlSU5TVEFOQ0UuZ2V0VGVzdEVkZ2VEZWNvcmF0b3IxKCk7CisKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5Ob2RlIEFVUkk8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUF0dHJpYnV0ZSBURVNUX0VER0VfREVDT1JBVE9SMV9fTk9ERV9BVVJJID0gZUlOU1RBTkNFLmdldFRlc3RFZGdlRGVjb3JhdG9yMV9Ob2RlQVVSSSgpOworCisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+Tm9kZSBCVVJJPC9iPjwvZW0+JyBhdHRyaWJ1dGUgZmVhdHVyZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVBdHRyaWJ1dGUgVEVTVF9FREdFX0RFQ09SQVRPUjFfX05PREVfQlVSSSA9IGVJTlNUQU5DRS5nZXRUZXN0RWRnZURlY29yYXRvcjFfTm9kZUJVUkkoKTsKKworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPkVkZ2UgVVJJPC9iPjwvZW0+JyBhdHRyaWJ1dGUgZmVhdHVyZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVBdHRyaWJ1dGUgVEVTVF9FREdFX0RFQ09SQVRPUjFfX0VER0VfVVJJID0gZUlOU1RBTkNFLmdldFRlc3RFZGdlRGVjb3JhdG9yMV9FZGdlVVJJKCk7CisKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwuZGVjb3JhdG9ycy5pbXBsLlRlc3RHcmFwaERlY29yYXRvcjFJbXBsIDxlbT5UZXN0IEdyYXBoIERlY29yYXRvcjE8L2VtPn0nIGNsYXNzLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwuZGVjb3JhdG9ycy5pbXBsLlRlc3RHcmFwaERlY29yYXRvcjFJbXBsCisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsLmRlY29yYXRvcnMuaW1wbC5EZWNvcmF0b3JzUGFja2FnZUltcGwjZ2V0VGVzdEdyYXBoRGVjb3JhdG9yMSgpCisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVDbGFzcyBURVNUX0dSQVBIX0RFQ09SQVRPUjEgPSBlSU5TVEFOQ0UuZ2V0VGVzdEdyYXBoRGVjb3JhdG9yMSgpOworCisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsLmRlY29yYXRvcnMuaW1wbC5UZXN0Tm9kZURlY29yYXRvcjFJbXBsIDxlbT5UZXN0IE5vZGUgRGVjb3JhdG9yMTwvZW0+fScgY2xhc3MuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC5kZWNvcmF0b3JzLmltcGwuVGVzdE5vZGVEZWNvcmF0b3IxSW1wbAorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC5kZWNvcmF0b3JzLmltcGwuRGVjb3JhdG9yc1BhY2thZ2VJbXBsI2dldFRlc3ROb2RlRGVjb3JhdG9yMSgpCisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVDbGFzcyBURVNUX05PREVfREVDT1JBVE9SMSA9IGVJTlNUQU5DRS5nZXRUZXN0Tm9kZURlY29yYXRvcjEoKTsKKworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC5kZWNvcmF0b3JzLmltcGwuVGVzdFNjZW5hcmlvR3JhcGhEZWNvcmF0b3IxSW1wbCA8ZW0+VGVzdCBTY2VuYXJpbyBHcmFwaCBEZWNvcmF0b3IxPC9lbT59JyBjbGFzcy4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsLmRlY29yYXRvcnMuaW1wbC5UZXN0U2NlbmFyaW9HcmFwaERlY29yYXRvcjFJbXBsCisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsLmRlY29yYXRvcnMuaW1wbC5EZWNvcmF0b3JzUGFja2FnZUltcGwjZ2V0VGVzdFNjZW5hcmlvR3JhcGhEZWNvcmF0b3IxKCkKKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUNsYXNzIFRFU1RfU0NFTkFSSU9fR1JBUEhfREVDT1JBVE9SMSA9IGVJTlNUQU5DRS5nZXRUZXN0U2NlbmFyaW9HcmFwaERlY29yYXRvcjEoKTsKKworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPkRvdWJsZSBWYWx1ZTwvYj48L2VtPicgYXR0cmlidXRlIGZlYXR1cmUuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQXR0cmlidXRlIFRFU1RfU0NFTkFSSU9fR1JBUEhfREVDT1JBVE9SMV9fRE9VQkxFX1ZBTFVFID0gZUlOU1RBTkNFLmdldFRlc3RTY2VuYXJpb0dyYXBoRGVjb3JhdG9yMV9Eb3VibGVWYWx1ZSgpOworCisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+SW50IFZhbHVlPC9iPjwvZW0+JyBhdHRyaWJ1dGUgZmVhdHVyZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVBdHRyaWJ1dGUgVEVTVF9TQ0VOQVJJT19HUkFQSF9ERUNPUkFUT1IxX19JTlRfVkFMVUUgPSBlSU5TVEFOQ0UuZ2V0VGVzdFNjZW5hcmlvR3JhcGhEZWNvcmF0b3IxX0ludFZhbHVlKCk7CisKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5TdHJpbmcgVmFsdWU8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUF0dHJpYnV0ZSBURVNUX1NDRU5BUklPX0dSQVBIX0RFQ09SQVRPUjFfX1NUUklOR19WQUxVRSA9IGVJTlNUQU5DRS5nZXRUZXN0U2NlbmFyaW9HcmFwaERlY29yYXRvcjFfU3RyaW5nVmFsdWUoKTsKKworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPlNURU0gVGltZSBWYWx1ZTwvYj48L2VtPicgcmVmZXJlbmNlIGZlYXR1cmUuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFUmVmZXJlbmNlIFRFU1RfU0NFTkFSSU9fR1JBUEhfREVDT1JBVE9SMV9fU1RFTV9USU1FX1ZBTFVFID0gZUlOU1RBTkNFLmdldFRlc3RTY2VuYXJpb0dyYXBoRGVjb3JhdG9yMV9TVEVNVGltZVZhbHVlKCk7CisKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5Cb29sZWFuIFZhbHVlPC9iPjwvZW0+JyBhdHRyaWJ1dGUgZmVhdHVyZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVBdHRyaWJ1dGUgVEVTVF9TQ0VOQVJJT19HUkFQSF9ERUNPUkFUT1IxX19CT09MRUFOX1ZBTFVFID0gZUlOU1RBTkNFLmdldFRlc3RTY2VuYXJpb0dyYXBoRGVjb3JhdG9yMV9Cb29sZWFuVmFsdWUoKTsKKworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5FZGdlRGVjb3JhdG9yIDxlbT5FZGdlIERlY29yYXRvcjwvZW0+fScgY2xhc3MuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5FZGdlRGVjb3JhdG9yCisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsLmRlY29yYXRvcnMuaW1wbC5EZWNvcmF0b3JzUGFja2FnZUltcGwjZ2V0RWRnZURlY29yYXRvcigpCisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVDbGFzcyBFREdFX0RFQ09SQVRPUiA9IGVJTlNUQU5DRS5nZXRFZGdlRGVjb3JhdG9yKCk7CisKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuR3JhcGhEZWNvcmF0b3IgPGVtPkdyYXBoIERlY29yYXRvcjwvZW0+fScgY2xhc3MuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5HcmFwaERlY29yYXRvcgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC5kZWNvcmF0b3JzLmltcGwuRGVjb3JhdG9yc1BhY2thZ2VJbXBsI2dldEdyYXBoRGVjb3JhdG9yKCkKKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUNsYXNzIEdSQVBIX0RFQ09SQVRPUiA9IGVJTlNUQU5DRS5nZXRHcmFwaERlY29yYXRvcigpOworCisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLk5vZGVEZWNvcmF0b3IgPGVtPk5vZGUgRGVjb3JhdG9yPC9lbT59JyBjbGFzcy4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLk5vZGVEZWNvcmF0b3IKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwuZGVjb3JhdG9ycy5pbXBsLkRlY29yYXRvcnNQYWNrYWdlSW1wbCNnZXROb2RlRGVjb3JhdG9yKCkKKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUNsYXNzIE5PREVfREVDT1JBVE9SID0gZUlOU1RBTkNFLmdldE5vZGVEZWNvcmF0b3IoKTsKKworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPlVSSTwvZW0+JyBkYXRhIHR5cGUuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5VUkkKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwuZGVjb3JhdG9ycy5pbXBsLkRlY29yYXRvcnNQYWNrYWdlSW1wbCNnZXRVUkkoKQorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFRGF0YVR5cGUgVVJJID0gZUlOU1RBTkNFLmdldFVSSSgpOworCisJfQorCit9IC8vRGVjb3JhdG9yc1BhY2thZ2UKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS90ZXN0cy91dGlsL2RlY29yYXRvcnMvVGVzdEVkZ2VEZWNvcmF0b3IxLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdGVzdHMvdXRpbC9kZWNvcmF0b3JzL1Rlc3RFZGdlRGVjb3JhdG9yMS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFiODYzMmEKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdGVzdHMvdXRpbC9kZWNvcmF0b3JzL1Rlc3RFZGdlRGVjb3JhdG9yMS5qYXZhCkBAIC0wLDAgKzEsNzQgQEAKKy8vIFRlc3RFZGdlRGVjb3JhdG9yMS5qYXZhCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC5kZWNvcmF0b3JzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5VUkk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLkVkZ2VEZWNvcmF0b3I7CisKKy8qKgorICogVGhpcyBpbnRlcmZhY2UgcmVwcmVzZW50cyB0aGUgbW9kZWwgb2YgYW4gYWJzdHJhY3QgY2xhc3MgaW4gYW4gRU1GIG1vZGVsIHRoYXQKKyAqIGlzIGFuIGV4YW1wbGUgb2YgYSBFZGdlRGVjb3JhdG9yIGltcGxlbWVudGF0aW9uIHVzZWQgZm9yIHRlc3QgcHVycG9zZXMuCisgKiAKKyAqIEBtb2RlbAorICovCitwdWJsaWMgaW50ZXJmYWNlIFRlc3RFZGdlRGVjb3JhdG9yMSBleHRlbmRzIEVkZ2VEZWNvcmF0b3IgeworCQorCS8qKgorCSAqIEByZXR1cm4gdGhlIFVSSSBmb3Igbm9kZSBBCisJICogQG1vZGVsCisJICovCisJVVJJIGdldE5vZGVBVVJJKCk7CisJCisJLyoqCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsLmRlY29yYXRvcnMuVGVzdEVkZ2VEZWNvcmF0b3IxI2dldE5vZGVBVVJJIDxlbT5Ob2RlIEFVUkk8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPk5vZGUgQVVSSTwvZW0+JyBhdHRyaWJ1dGUuCisJICogQHNlZSAjZ2V0Tm9kZUFVUkkoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwl2b2lkIHNldE5vZGVBVVJJKFVSSSB2YWx1ZSk7CisKKwkvKioKKwkgKiBAcmV0dXJuICB0aGUgVVJJIGZvciBub2RlIEIKKwkgKiBAbW9kZWwKKwkgKi8KKwlVUkkgZ2V0Tm9kZUJVUkkoKTsKKwkKKwkvKioKKwkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwuZGVjb3JhdG9ycy5UZXN0RWRnZURlY29yYXRvcjEjZ2V0Tm9kZUJVUkkgPGVtPk5vZGUgQlVSSTwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+Tm9kZSBCVVJJPC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiBAc2VlICNnZXROb2RlQlVSSSgpCisJICogQGdlbmVyYXRlZAorCSAqLworCXZvaWQgc2V0Tm9kZUJVUkkoVVJJIHZhbHVlKTsKKworCS8qKgorCSAqIEByZXR1cm4gdGhlIFVSSSBvZiB0aGUgZWRnZQorCSAqIEBtb2RlbAorCSAqLworCVVSSSBnZXRFZGdlVVJJKCk7CisJCisJLyoqCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsLmRlY29yYXRvcnMuVGVzdEVkZ2VEZWNvcmF0b3IxI2dldEVkZ2VVUkkgPGVtPkVkZ2UgVVJJPC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5FZGdlIFVSSTwvZW0+JyBhdHRyaWJ1dGUuCisJICogQHNlZSAjZ2V0RWRnZVVSSSgpCisJICogQGdlbmVyYXRlZAorCSAqLworCXZvaWQgc2V0RWRnZVVSSShVUkkgdmFsdWUpOworCit9IC8vIFRlc3RFZGdlRGVjb3JhdG9yMQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS90ZXN0cy91dGlsL2RlY29yYXRvcnMvVGVzdEdyYXBoRGVjb3JhdG9yMS5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3Rlc3RzL3V0aWwvZGVjb3JhdG9ycy9UZXN0R3JhcGhEZWNvcmF0b3IxLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTNjOWMxOQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS90ZXN0cy91dGlsL2RlY29yYXRvcnMvVGVzdEdyYXBoRGVjb3JhdG9yMS5qYXZhCkBAIC0wLDAgKzEsMjUgQEAKKy8vIFRlc3RHcmFwaERlY29yYXRvcjEuamF2YQorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwuZGVjb3JhdG9yczsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuR3JhcGhEZWNvcmF0b3I7CisKKy8qKgorICogVGhpcyBpbnRlcmZhY2UgcmVwcmVzZW50cyB0aGUgbW9kZWwgb2YgYW4gYWJzdHJhY3QgY2xhc3MgaW4gYW4gRU1GIG1vZGVsIHRoYXQKKyAqIGlzIGFuIGV4YW1wbGUgb2YgYSBHcmFwaERlY29yYXRvciBpbXBsZW1lbnRhdGlvbiB1c2VkIGZvciB0ZXN0IHB1cnBvc2VzLgorICogCisgKiBAbW9kZWwKKyAqLworcHVibGljIGludGVyZmFjZSBUZXN0R3JhcGhEZWNvcmF0b3IxIGV4dGVuZHMgR3JhcGhEZWNvcmF0b3IgeworCS8vIE5vdGhpbmcKK30gLy8gVGVzdEdyYXBoRGVjb3JhdG9yMQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS90ZXN0cy91dGlsL2RlY29yYXRvcnMvVGVzdE5vZGVEZWNvcmF0b3IxLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdGVzdHMvdXRpbC9kZWNvcmF0b3JzL1Rlc3ROb2RlRGVjb3JhdG9yMS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM0NTA5MTYKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdGVzdHMvdXRpbC9kZWNvcmF0b3JzL1Rlc3ROb2RlRGVjb3JhdG9yMS5qYXZhCkBAIC0wLDAgKzEsMjUgQEAKKy8vIFRlc3ROb2RlRGVjb3JhdG9yMS5qYXZhCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC5kZWNvcmF0b3JzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5Ob2RlRGVjb3JhdG9yOworCisvKioKKyAqIFRoaXMgaW50ZXJmYWNlIHJlcHJlc2VudHMgdGhlIG1vZGVsIG9mIGFuIGFic3RyYWN0IGNsYXNzIGluIGFuIEVNRiBtb2RlbCB0aGF0CisgKiBpcyBhbiBleGFtcGxlIG9mIGEgTm9kZURlY29yYXRvciBpbXBsZW1lbnRhdGlvbiB1c2VkIGZvciB0ZXN0IHB1cnBvc2VzLgorICogCisgKiBAbW9kZWwKKyAqLworcHVibGljIGludGVyZmFjZSBUZXN0Tm9kZURlY29yYXRvcjEgZXh0ZW5kcyBOb2RlRGVjb3JhdG9yIHsKKwkvLyBOb3RoaW5nCit9IC8vIFRlc3ROb2RlRGVjb3JhdG9yMQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3Rlc3RzL3V0aWwvZGVjb3JhdG9ycy9UZXN0U2NlbmFyaW9HcmFwaERlY29yYXRvcjEuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS90ZXN0cy91dGlsL2RlY29yYXRvcnMvVGVzdFNjZW5hcmlvR3JhcGhEZWNvcmF0b3IxLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTQ2MDk5MAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS90ZXN0cy91dGlsL2RlY29yYXRvcnMvVGVzdFNjZW5hcmlvR3JhcGhEZWNvcmF0b3IxLmphdmEKQEAgLTAsMCArMSwxMDggQEAKKy8vIFRlc3RTY2VuYXJpb0dyYXBoRGVjb3JhdG9yMS5qYXZhCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC5kZWNvcmF0b3JzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA2LDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlVSSTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuU1RFTVVSSTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguR3JhcGg7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLkdyYXBoRGVjb3JhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5TVEVNVGltZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2NlbmFyaW8uU2NlbmFyaW87CisKKy8qKgorICogVGhpcyBjbGFzcyByZXByZXNlbnRzIGEge0BsaW5rIEdyYXBofSBkZWNvcmF0b3IgdGhhdCBkZWNvcmF0ZXMgdGhlIGNhbm9uaWNhbAorICogZ3JhcGggYXQge0BsaW5rIFNjZW5hcmlvfSBpbml0aWFsaXphdGlvbi4KKyAqIAorICogQG1vZGVsCisgKi8KK3B1YmxpYyBpbnRlcmZhY2UgVGVzdFNjZW5hcmlvR3JhcGhEZWNvcmF0b3IxIGV4dGVuZHMgR3JhcGhEZWNvcmF0b3IgeworCS8qKgorCSAqIHRlc3QgbGFiZWwgVVJJCisJICovCisJVVJJIExBQkVMX1VSSSA9IFNURU1VUkkuY3JlYXRlVVJJKCJkeW5hbWljbGFiZWwvc2NlbmFyaW8iKTsKKworCS8qKgorCSAqIEBtb2RlbAorCSAqLworCWRvdWJsZSBnZXREb3VibGVWYWx1ZSgpOworCisJLyoqCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsLmRlY29yYXRvcnMuVGVzdFNjZW5hcmlvR3JhcGhEZWNvcmF0b3IxI2dldERvdWJsZVZhbHVlIDxlbT5Eb3VibGUgVmFsdWU8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPkRvdWJsZSBWYWx1ZTwvZW0+JyBhdHRyaWJ1dGUuCisJICogQHNlZSAjZ2V0RG91YmxlVmFsdWUoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwl2b2lkIHNldERvdWJsZVZhbHVlKGRvdWJsZSB2YWx1ZSk7CisKKwkvKioKKwkgKiBAbW9kZWwKKwkgKi8KKwlpbnQgZ2V0SW50VmFsdWUoKTsKKworCS8qKgorCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC5kZWNvcmF0b3JzLlRlc3RTY2VuYXJpb0dyYXBoRGVjb3JhdG9yMSNnZXRJbnRWYWx1ZSA8ZW0+SW50IFZhbHVlPC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5JbnQgVmFsdWU8L2VtPicgYXR0cmlidXRlLgorCSAqIEBzZWUgI2dldEludFZhbHVlKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJdm9pZCBzZXRJbnRWYWx1ZShpbnQgdmFsdWUpOworCisJLyoqCisJICogQG1vZGVsCisJICovCisJU3RyaW5nIGdldFN0cmluZ1ZhbHVlKCk7CisKKwkvKioKKwkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwuZGVjb3JhdG9ycy5UZXN0U2NlbmFyaW9HcmFwaERlY29yYXRvcjEjZ2V0U3RyaW5nVmFsdWUgPGVtPlN0cmluZyBWYWx1ZTwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+U3RyaW5nIFZhbHVlPC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiBAc2VlICNnZXRTdHJpbmdWYWx1ZSgpCisJICogQGdlbmVyYXRlZAorCSAqLworCXZvaWQgc2V0U3RyaW5nVmFsdWUoU3RyaW5nIHZhbHVlKTsKKworCS8qKgorCSAqIEBtb2RlbAorCSAqLworCVNURU1UaW1lIGdldFNURU1UaW1lVmFsdWUoKTsKKworCS8qKgorCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC5kZWNvcmF0b3JzLlRlc3RTY2VuYXJpb0dyYXBoRGVjb3JhdG9yMSNnZXRTVEVNVGltZVZhbHVlIDxlbT5TVEVNIFRpbWUgVmFsdWU8L2VtPn0nIHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPlNURU0gVGltZSBWYWx1ZTwvZW0+JyByZWZlcmVuY2UuCisJICogQHNlZSAjZ2V0U1RFTVRpbWVWYWx1ZSgpCisJICogQGdlbmVyYXRlZAorCSAqLworCXZvaWQgc2V0U1RFTVRpbWVWYWx1ZShTVEVNVGltZSB2YWx1ZSk7CisKKwkvKioKKwkgKiBAbW9kZWwKKwkgKi8KKwlib29sZWFuIGlzQm9vbGVhblZhbHVlKCk7CisKKwkvKioKKwkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwuZGVjb3JhdG9ycy5UZXN0U2NlbmFyaW9HcmFwaERlY29yYXRvcjEjaXNCb29sZWFuVmFsdWUgPGVtPkJvb2xlYW4gVmFsdWU8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPkJvb2xlYW4gVmFsdWU8L2VtPicgYXR0cmlidXRlLgorCSAqIEBzZWUgI2lzQm9vbGVhblZhbHVlKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJdm9pZCBzZXRCb29sZWFuVmFsdWUoYm9vbGVhbiB2YWx1ZSk7Cit9IC8vIFRlc3RTY2VuYXJpb0dyYXBoRGVjb3JhdG9yMQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3Rlc3RzL3V0aWwvZGVjb3JhdG9ycy9pbXBsL0RlY29yYXRvcnNGYWN0b3J5SW1wbC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3Rlc3RzL3V0aWwvZGVjb3JhdG9ycy9pbXBsL0RlY29yYXRvcnNGYWN0b3J5SW1wbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNmNTRkMGIKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdGVzdHMvdXRpbC9kZWNvcmF0b3JzL2ltcGwvRGVjb3JhdG9yc0ZhY3RvcnlJbXBsLmphdmEKQEAgLTAsMCArMSwxODkgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsLmRlY29yYXRvcnMuaW1wbDsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuVVJJOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVEYXRhVHlwZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRVBhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLmltcGwuRUZhY3RvcnlJbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5wbHVnaW4uRWNvcmVQbHVnaW47CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsLmRlY29yYXRvcnMuRGVjb3JhdG9yc0ZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsLmRlY29yYXRvcnMuRGVjb3JhdG9yc1BhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsLmRlY29yYXRvcnMuVGVzdEVkZ2VEZWNvcmF0b3IxOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC5kZWNvcmF0b3JzLlRlc3RHcmFwaERlY29yYXRvcjE7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsLmRlY29yYXRvcnMuVGVzdE5vZGVEZWNvcmF0b3IxOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC5kZWNvcmF0b3JzLlRlc3RTY2VuYXJpb0dyYXBoRGVjb3JhdG9yMTsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIG1vZGVsIDxiPkZhY3Rvcnk8L2I+LgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBEZWNvcmF0b3JzRmFjdG9yeUltcGwgZXh0ZW5kcyBFRmFjdG9yeUltcGwgaW1wbGVtZW50cyBEZWNvcmF0b3JzRmFjdG9yeSB7CisJLyoqCisJICogQ3JlYXRlcyB0aGUgZGVmYXVsdCBmYWN0b3J5IGltcGxlbWVudGF0aW9uLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBzdGF0aWMgRGVjb3JhdG9yc0ZhY3RvcnkgaW5pdCgpIHsKKwkJdHJ5IHsKKwkJCURlY29yYXRvcnNGYWN0b3J5IHRoZURlY29yYXRvcnNGYWN0b3J5ID0gKERlY29yYXRvcnNGYWN0b3J5KUVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVGYWN0b3J5KCJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vdGVzdHMvdXRpbC9kZWNvcmF0b3JzLmVjb3JlIik7IC8vJE5PTi1OTFMtMSQgCisJCQlpZiAodGhlRGVjb3JhdG9yc0ZhY3RvcnkgIT0gbnVsbCkgeworCQkJCXJldHVybiB0aGVEZWNvcmF0b3JzRmFjdG9yeTsKKwkJCX0KKwkJfQorCQljYXRjaCAoRXhjZXB0aW9uIGV4Y2VwdGlvbikgeworCQkJRWNvcmVQbHVnaW4uSU5TVEFOQ0UubG9nKGV4Y2VwdGlvbik7CisJCX0KKwkJcmV0dXJuIG5ldyBEZWNvcmF0b3JzRmFjdG9yeUltcGwoKTsKKwl9CisKKwkvKioKKwkgKiBDcmVhdGVzIGFuIGluc3RhbmNlIG9mIHRoZSBmYWN0b3J5LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBEZWNvcmF0b3JzRmFjdG9yeUltcGwoKSB7CisJCXN1cGVyKCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIEVPYmplY3QgY3JlYXRlKEVDbGFzcyBlQ2xhc3MpIHsKKwkJc3dpdGNoIChlQ2xhc3MuZ2V0Q2xhc3NpZmllcklEKCkpIHsKKwkJCWNhc2UgRGVjb3JhdG9yc1BhY2thZ2UuVEVTVF9FREdFX0RFQ09SQVRPUjE6IHJldHVybiBjcmVhdGVUZXN0RWRnZURlY29yYXRvcjEoKTsKKwkJCWNhc2UgRGVjb3JhdG9yc1BhY2thZ2UuVEVTVF9HUkFQSF9ERUNPUkFUT1IxOiByZXR1cm4gY3JlYXRlVGVzdEdyYXBoRGVjb3JhdG9yMSgpOworCQkJY2FzZSBEZWNvcmF0b3JzUGFja2FnZS5URVNUX05PREVfREVDT1JBVE9SMTogcmV0dXJuIGNyZWF0ZVRlc3ROb2RlRGVjb3JhdG9yMSgpOworCQkJY2FzZSBEZWNvcmF0b3JzUGFja2FnZS5URVNUX1NDRU5BUklPX0dSQVBIX0RFQ09SQVRPUjE6IHJldHVybiBjcmVhdGVUZXN0U2NlbmFyaW9HcmFwaERlY29yYXRvcjEoKTsKKwkJCWRlZmF1bHQ6CisJCQkJdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiVGhlIGNsYXNzICciICsgZUNsYXNzLmdldE5hbWUoKSArICInIGlzIG5vdCBhIHZhbGlkIGNsYXNzaWZpZXIiKTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCisJCX0KKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgT2JqZWN0IGNyZWF0ZUZyb21TdHJpbmcoRURhdGFUeXBlIGVEYXRhVHlwZSwgU3RyaW5nIGluaXRpYWxWYWx1ZSkgeworCQlzd2l0Y2ggKGVEYXRhVHlwZS5nZXRDbGFzc2lmaWVySUQoKSkgeworCQkJY2FzZSBEZWNvcmF0b3JzUGFja2FnZS5VUkk6CisJCQkJcmV0dXJuIGNyZWF0ZVVSSUZyb21TdHJpbmcoZURhdGFUeXBlLCBpbml0aWFsVmFsdWUpOworCQkJZGVmYXVsdDoKKwkJCQl0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJUaGUgZGF0YXR5cGUgJyIgKyBlRGF0YVR5cGUuZ2V0TmFtZSgpICsgIicgaXMgbm90IGEgdmFsaWQgY2xhc3NpZmllciIpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKKwkJfQorCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBTdHJpbmcgY29udmVydFRvU3RyaW5nKEVEYXRhVHlwZSBlRGF0YVR5cGUsIE9iamVjdCBpbnN0YW5jZVZhbHVlKSB7CisJCXN3aXRjaCAoZURhdGFUeXBlLmdldENsYXNzaWZpZXJJRCgpKSB7CisJCQljYXNlIERlY29yYXRvcnNQYWNrYWdlLlVSSToKKwkJCQlyZXR1cm4gY29udmVydFVSSVRvU3RyaW5nKGVEYXRhVHlwZSwgaW5zdGFuY2VWYWx1ZSk7CisJCQlkZWZhdWx0OgorCQkJCXRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIlRoZSBkYXRhdHlwZSAnIiArIGVEYXRhVHlwZS5nZXROYW1lKCkgKyAiJyBpcyBub3QgYSB2YWxpZCBjbGFzc2lmaWVyIik7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAorCQl9CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFRlc3RFZGdlRGVjb3JhdG9yMSBjcmVhdGVUZXN0RWRnZURlY29yYXRvcjEoKSB7CisJCVRlc3RFZGdlRGVjb3JhdG9yMUltcGwgdGVzdEVkZ2VEZWNvcmF0b3IxID0gbmV3IFRlc3RFZGdlRGVjb3JhdG9yMUltcGwoKTsKKwkJcmV0dXJuIHRlc3RFZGdlRGVjb3JhdG9yMTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVGVzdEdyYXBoRGVjb3JhdG9yMSBjcmVhdGVUZXN0R3JhcGhEZWNvcmF0b3IxKCkgeworCQlUZXN0R3JhcGhEZWNvcmF0b3IxSW1wbCB0ZXN0R3JhcGhEZWNvcmF0b3IxID0gbmV3IFRlc3RHcmFwaERlY29yYXRvcjFJbXBsKCk7CisJCXJldHVybiB0ZXN0R3JhcGhEZWNvcmF0b3IxOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBUZXN0Tm9kZURlY29yYXRvcjEgY3JlYXRlVGVzdE5vZGVEZWNvcmF0b3IxKCkgeworCQlUZXN0Tm9kZURlY29yYXRvcjFJbXBsIHRlc3ROb2RlRGVjb3JhdG9yMSA9IG5ldyBUZXN0Tm9kZURlY29yYXRvcjFJbXBsKCk7CisJCXJldHVybiB0ZXN0Tm9kZURlY29yYXRvcjE7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFRlc3RTY2VuYXJpb0dyYXBoRGVjb3JhdG9yMSBjcmVhdGVUZXN0U2NlbmFyaW9HcmFwaERlY29yYXRvcjEoKSB7CisJCVRlc3RTY2VuYXJpb0dyYXBoRGVjb3JhdG9yMUltcGwgdGVzdFNjZW5hcmlvR3JhcGhEZWNvcmF0b3IxID0gbmV3IFRlc3RTY2VuYXJpb0dyYXBoRGVjb3JhdG9yMUltcGwoKTsKKwkJcmV0dXJuIHRlc3RTY2VuYXJpb0dyYXBoRGVjb3JhdG9yMTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJcHVibGljIFVSSSBjcmVhdGVVUklGcm9tU3RyaW5nKEVEYXRhVHlwZSBlRGF0YVR5cGUsIFN0cmluZyBpbml0aWFsVmFsdWUpIHsKKwkJcmV0dXJuIFVSSS5jcmVhdGVVUkkoaW5pdGlhbFZhbHVlKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJcHVibGljIFN0cmluZyBjb252ZXJ0VVJJVG9TdHJpbmcoRURhdGFUeXBlIGVEYXRhVHlwZSwgT2JqZWN0IGluc3RhbmNlVmFsdWUpIHsKKwkJcmV0dXJuIGluc3RhbmNlVmFsdWUudG9TdHJpbmcoKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRGVjb3JhdG9yc1BhY2thZ2UgZ2V0RGVjb3JhdG9yc1BhY2thZ2UoKSB7CisJCXJldHVybiAoRGVjb3JhdG9yc1BhY2thZ2UpZ2V0RVBhY2thZ2UoKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBkZXByZWNhdGVkCisJICogQGdlbmVyYXRlZAorCSAqLworCUBEZXByZWNhdGVkCisJcHVibGljIHN0YXRpYyBEZWNvcmF0b3JzUGFja2FnZSBnZXRQYWNrYWdlKCkgeworCQlyZXR1cm4gRGVjb3JhdG9yc1BhY2thZ2UuZUlOU1RBTkNFOworCX0KKworfSAvL0RlY29yYXRvcnNGYWN0b3J5SW1wbApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3Rlc3RzL3V0aWwvZGVjb3JhdG9ycy9pbXBsL0RlY29yYXRvcnNQYWNrYWdlSW1wbC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3Rlc3RzL3V0aWwvZGVjb3JhdG9ycy9pbXBsL0RlY29yYXRvcnNQYWNrYWdlSW1wbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgzMDBkNmYKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdGVzdHMvdXRpbC9kZWNvcmF0b3JzL2ltcGwvRGVjb3JhdG9yc1BhY2thZ2VJbXBsLmphdmEKQEAgLTAsMCArMSw0NDYgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsLmRlY29yYXRvcnMuaW1wbDsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUF0dHJpYnV0ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FRGF0YVR5cGU7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FUmVmZXJlbmNlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5pbXBsLkVQYWNrYWdlSW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLkNvbW1vblBhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkdyYXBoUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuRWRnZURlY29yYXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuR3JhcGhEZWNvcmF0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLk1vZGVsUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuTm9kZURlY29yYXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuTW9kaWZpZXJQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zY2VuYXJpby5TY2VuYXJpb1BhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNlcXVlbmNlci5TZXF1ZW5jZXJQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC5kZWNvcmF0b3JzLkRlY29yYXRvcnNGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC5kZWNvcmF0b3JzLkRlY29yYXRvcnNQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC5kZWNvcmF0b3JzLlRlc3RFZGdlRGVjb3JhdG9yMTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwuZGVjb3JhdG9ycy5UZXN0R3JhcGhEZWNvcmF0b3IxOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC5kZWNvcmF0b3JzLlRlc3ROb2RlRGVjb3JhdG9yMTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwuZGVjb3JhdG9ycy5UZXN0U2NlbmFyaW9HcmFwaERlY29yYXRvcjE7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsLmxhYmVscy5MYWJlbHNQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC5sYWJlbHMuaW1wbC5MYWJlbHNQYWNrYWdlSW1wbDsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIG1vZGVsIDxiPlBhY2thZ2U8L2I+LgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBEZWNvcmF0b3JzUGFja2FnZUltcGwgZXh0ZW5kcyBFUGFja2FnZUltcGwgaW1wbGVtZW50cyBEZWNvcmF0b3JzUGFja2FnZSB7CisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJpdmF0ZSBFQ2xhc3MgdGVzdEVkZ2VEZWNvcmF0b3IxRUNsYXNzID0gbnVsbDsKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByaXZhdGUgRUNsYXNzIHRlc3RHcmFwaERlY29yYXRvcjFFQ2xhc3MgPSBudWxsOworCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJpdmF0ZSBFQ2xhc3MgdGVzdE5vZGVEZWNvcmF0b3IxRUNsYXNzID0gbnVsbDsKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByaXZhdGUgRUNsYXNzIHRlc3RTY2VuYXJpb0dyYXBoRGVjb3JhdG9yMUVDbGFzcyA9IG51bGw7CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcml2YXRlIEVDbGFzcyBlZGdlRGVjb3JhdG9yRUNsYXNzID0gbnVsbDsKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByaXZhdGUgRUNsYXNzIGdyYXBoRGVjb3JhdG9yRUNsYXNzID0gbnVsbDsKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByaXZhdGUgRUNsYXNzIG5vZGVEZWNvcmF0b3JFQ2xhc3MgPSBudWxsOworCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJpdmF0ZSBFRGF0YVR5cGUgdXJpRURhdGFUeXBlID0gbnVsbDsKKworCS8qKgorCSAqIENyZWF0ZXMgYW4gaW5zdGFuY2Ugb2YgdGhlIG1vZGVsIDxiPlBhY2thZ2U8L2I+LCByZWdpc3RlcmVkIHdpdGgKKwkgKiB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVQYWNrYWdlLlJlZ2lzdHJ5IEVQYWNrYWdlLlJlZ2lzdHJ5fSBieSB0aGUgcGFja2FnZQorCSAqIHBhY2thZ2UgVVJJIHZhbHVlLgorCSAqIDxwPk5vdGU6IHRoZSBjb3JyZWN0IHdheSB0byBjcmVhdGUgdGhlIHBhY2thZ2UgaXMgdmlhIHRoZSBzdGF0aWMKKwkgKiBmYWN0b3J5IG1ldGhvZCB7QGxpbmsgI2luaXQgaW5pdCgpfSwgd2hpY2ggYWxzbyBwZXJmb3JtcworCSAqIGluaXRpYWxpemF0aW9uIG9mIHRoZSBwYWNrYWdlLCBvciByZXR1cm5zIHRoZSByZWdpc3RlcmVkIHBhY2thZ2UsCisJICogaWYgb25lIGFscmVhZHkgZXhpc3RzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRVBhY2thZ2UuUmVnaXN0cnkKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC5kZWNvcmF0b3JzLkRlY29yYXRvcnNQYWNrYWdlI2VOU19VUkkKKwkgKiBAc2VlICNpbml0KCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJpdmF0ZSBEZWNvcmF0b3JzUGFja2FnZUltcGwoKSB7CisJCXN1cGVyKGVOU19VUkksIERlY29yYXRvcnNGYWN0b3J5LmVJTlNUQU5DRSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJpdmF0ZSBzdGF0aWMgYm9vbGVhbiBpc0luaXRlZCA9IGZhbHNlOworCisJLyoqCisJICogQ3JlYXRlcywgcmVnaXN0ZXJzLCBhbmQgaW5pdGlhbGl6ZXMgdGhlIDxiPlBhY2thZ2U8L2I+IGZvciB0aGlzCisJICogbW9kZWwsIGFuZCBmb3IgYW55IG90aGVycyB1cG9uIHdoaWNoIGl0IGRlcGVuZHMuICBTaW1wbGUKKwkgKiBkZXBlbmRlbmNpZXMgYXJlIHNhdGlzZmllZCBieSBjYWxsaW5nIHRoaXMgbWV0aG9kIG9uIGFsbAorCSAqIGRlcGVuZGVudCBwYWNrYWdlcyBiZWZvcmUgZG9pbmcgYW55dGhpbmcgZWxzZS4gIFRoaXMgbWV0aG9kIGRyaXZlcworCSAqIGluaXRpYWxpemF0aW9uIGZvciBpbnRlcmRlcGVuZGVudCBwYWNrYWdlcyBkaXJlY3RseSwgaW4gcGFyYWxsZWwKKwkgKiB3aXRoIHRoaXMgcGFja2FnZSwgaXRzZWxmLgorCSAqIDxwPk9mIHRoaXMgcGFja2FnZSBhbmQgaXRzIGludGVyZGVwZW5kZW5jaWVzLCBhbGwgcGFja2FnZXMgd2hpY2gKKwkgKiBoYXZlIG5vdCB5ZXQgYmVlbiByZWdpc3RlcmVkIGJ5IHRoZWlyIFVSSSB2YWx1ZXMgYXJlIGZpcnN0IGNyZWF0ZWQKKwkgKiBhbmQgcmVnaXN0ZXJlZC4gIFRoZSBwYWNrYWdlcyBhcmUgdGhlbiBpbml0aWFsaXplZCBpbiB0d28gc3RlcHM6CisJICogbWV0YS1tb2RlbCBvYmplY3RzIGZvciBhbGwgb2YgdGhlIHBhY2thZ2VzIGFyZSBjcmVhdGVkIGJlZm9yZSBhbnkKKwkgKiBhcmUgaW5pdGlhbGl6ZWQsIHNpbmNlIG9uZSBwYWNrYWdlJ3MgbWV0YS1tb2RlbCBvYmplY3RzIG1heSByZWZlciB0bworCSAqIHRob3NlIG9mIGFub3RoZXIuCisJICogPHA+SW52b2NhdGlvbiBvZiB0aGlzIG1ldGhvZCB3aWxsIG5vdCBhZmZlY3QgYW55IHBhY2thZ2VzIHRoYXQgaGF2ZQorCSAqIGFscmVhZHkgYmVlbiBpbml0aWFsaXplZC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI2VOU19VUkkKKwkgKiBAc2VlICNjcmVhdGVQYWNrYWdlQ29udGVudHMoKQorCSAqIEBzZWUgI2luaXRpYWxpemVQYWNrYWdlQ29udGVudHMoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgc3RhdGljIERlY29yYXRvcnNQYWNrYWdlIGluaXQoKSB7CisJCWlmIChpc0luaXRlZCkgcmV0dXJuIChEZWNvcmF0b3JzUGFja2FnZSlFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShEZWNvcmF0b3JzUGFja2FnZS5lTlNfVVJJKTsKKworCQkvLyBPYnRhaW4gb3IgY3JlYXRlIGFuZCByZWdpc3RlciBwYWNrYWdlCisJCURlY29yYXRvcnNQYWNrYWdlSW1wbCB0aGVEZWNvcmF0b3JzUGFja2FnZSA9IChEZWNvcmF0b3JzUGFja2FnZUltcGwpKEVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVQYWNrYWdlKGVOU19VUkkpIGluc3RhbmNlb2YgRGVjb3JhdG9yc1BhY2thZ2VJbXBsID8gRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RVBhY2thZ2UoZU5TX1VSSSkgOiBuZXcgRGVjb3JhdG9yc1BhY2thZ2VJbXBsKCkpOworCisJCWlzSW5pdGVkID0gdHJ1ZTsKKworCQkvLyBJbml0aWFsaXplIHNpbXBsZSBkZXBlbmRlbmNpZXMKKwkJTW9kZWxQYWNrYWdlLmVJTlNUQU5DRS5lQ2xhc3MoKTsKKwkJQ29tbW9uUGFja2FnZS5lSU5TVEFOQ0UuZUNsYXNzKCk7CisJCUdyYXBoUGFja2FnZS5lSU5TVEFOQ0UuZUNsYXNzKCk7CisJCU1vZGlmaWVyUGFja2FnZS5lSU5TVEFOQ0UuZUNsYXNzKCk7CisJCVNjZW5hcmlvUGFja2FnZS5lSU5TVEFOQ0UuZUNsYXNzKCk7CisJCVNlcXVlbmNlclBhY2thZ2UuZUlOU1RBTkNFLmVDbGFzcygpOworCisJCS8vIE9idGFpbiBvciBjcmVhdGUgYW5kIHJlZ2lzdGVyIGludGVyZGVwZW5kZW5jaWVzCisJCUxhYmVsc1BhY2thZ2VJbXBsIHRoZUxhYmVsc1BhY2thZ2UgPSAoTGFiZWxzUGFja2FnZUltcGwpKEVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVQYWNrYWdlKExhYmVsc1BhY2thZ2UuZU5TX1VSSSkgaW5zdGFuY2VvZiBMYWJlbHNQYWNrYWdlSW1wbCA/IEVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVQYWNrYWdlKExhYmVsc1BhY2thZ2UuZU5TX1VSSSkgOiBMYWJlbHNQYWNrYWdlLmVJTlNUQU5DRSk7CisKKwkJLy8gQ3JlYXRlIHBhY2thZ2UgbWV0YS1kYXRhIG9iamVjdHMKKwkJdGhlRGVjb3JhdG9yc1BhY2thZ2UuY3JlYXRlUGFja2FnZUNvbnRlbnRzKCk7CisJCXRoZUxhYmVsc1BhY2thZ2UuY3JlYXRlUGFja2FnZUNvbnRlbnRzKCk7CisKKwkJLy8gSW5pdGlhbGl6ZSBjcmVhdGVkIG1ldGEtZGF0YQorCQl0aGVEZWNvcmF0b3JzUGFja2FnZS5pbml0aWFsaXplUGFja2FnZUNvbnRlbnRzKCk7CisJCXRoZUxhYmVsc1BhY2thZ2UuaW5pdGlhbGl6ZVBhY2thZ2VDb250ZW50cygpOworCisJCS8vIE1hcmsgbWV0YS1kYXRhIHRvIGluZGljYXRlIGl0IGNhbid0IGJlIGNoYW5nZWQKKwkJdGhlRGVjb3JhdG9yc1BhY2thZ2UuZnJlZXplKCk7CisKKwkJcmV0dXJuIHRoZURlY29yYXRvcnNQYWNrYWdlOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQ2xhc3MgZ2V0VGVzdEVkZ2VEZWNvcmF0b3IxKCkgeworCQlyZXR1cm4gdGVzdEVkZ2VEZWNvcmF0b3IxRUNsYXNzOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQXR0cmlidXRlIGdldFRlc3RFZGdlRGVjb3JhdG9yMV9Ob2RlQVVSSSgpIHsKKwkJcmV0dXJuIChFQXR0cmlidXRlKXRlc3RFZGdlRGVjb3JhdG9yMUVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDApOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQXR0cmlidXRlIGdldFRlc3RFZGdlRGVjb3JhdG9yMV9Ob2RlQlVSSSgpIHsKKwkJcmV0dXJuIChFQXR0cmlidXRlKXRlc3RFZGdlRGVjb3JhdG9yMUVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDEpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQXR0cmlidXRlIGdldFRlc3RFZGdlRGVjb3JhdG9yMV9FZGdlVVJJKCkgeworCQlyZXR1cm4gKEVBdHRyaWJ1dGUpdGVzdEVkZ2VEZWNvcmF0b3IxRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMik7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVDbGFzcyBnZXRUZXN0R3JhcGhEZWNvcmF0b3IxKCkgeworCQlyZXR1cm4gdGVzdEdyYXBoRGVjb3JhdG9yMUVDbGFzczsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUNsYXNzIGdldFRlc3ROb2RlRGVjb3JhdG9yMSgpIHsKKwkJcmV0dXJuIHRlc3ROb2RlRGVjb3JhdG9yMUVDbGFzczsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUNsYXNzIGdldFRlc3RTY2VuYXJpb0dyYXBoRGVjb3JhdG9yMSgpIHsKKwkJcmV0dXJuIHRlc3RTY2VuYXJpb0dyYXBoRGVjb3JhdG9yMUVDbGFzczsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUF0dHJpYnV0ZSBnZXRUZXN0U2NlbmFyaW9HcmFwaERlY29yYXRvcjFfRG91YmxlVmFsdWUoKSB7CisJCXJldHVybiAoRUF0dHJpYnV0ZSl0ZXN0U2NlbmFyaW9HcmFwaERlY29yYXRvcjFFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgwKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUF0dHJpYnV0ZSBnZXRUZXN0U2NlbmFyaW9HcmFwaERlY29yYXRvcjFfSW50VmFsdWUoKSB7CisJCXJldHVybiAoRUF0dHJpYnV0ZSl0ZXN0U2NlbmFyaW9HcmFwaERlY29yYXRvcjFFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgxKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUF0dHJpYnV0ZSBnZXRUZXN0U2NlbmFyaW9HcmFwaERlY29yYXRvcjFfU3RyaW5nVmFsdWUoKSB7CisJCXJldHVybiAoRUF0dHJpYnV0ZSl0ZXN0U2NlbmFyaW9HcmFwaERlY29yYXRvcjFFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgyKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRVJlZmVyZW5jZSBnZXRUZXN0U2NlbmFyaW9HcmFwaERlY29yYXRvcjFfU1RFTVRpbWVWYWx1ZSgpIHsKKwkJcmV0dXJuIChFUmVmZXJlbmNlKXRlc3RTY2VuYXJpb0dyYXBoRGVjb3JhdG9yMUVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDMpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQXR0cmlidXRlIGdldFRlc3RTY2VuYXJpb0dyYXBoRGVjb3JhdG9yMV9Cb29sZWFuVmFsdWUoKSB7CisJCXJldHVybiAoRUF0dHJpYnV0ZSl0ZXN0U2NlbmFyaW9HcmFwaERlY29yYXRvcjFFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCg0KTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUNsYXNzIGdldEVkZ2VEZWNvcmF0b3IoKSB7CisJCXJldHVybiBlZGdlRGVjb3JhdG9yRUNsYXNzOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQ2xhc3MgZ2V0R3JhcGhEZWNvcmF0b3IoKSB7CisJCXJldHVybiBncmFwaERlY29yYXRvckVDbGFzczsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUNsYXNzIGdldE5vZGVEZWNvcmF0b3IoKSB7CisJCXJldHVybiBub2RlRGVjb3JhdG9yRUNsYXNzOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFRGF0YVR5cGUgZ2V0VVJJKCkgeworCQlyZXR1cm4gdXJpRURhdGFUeXBlOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBEZWNvcmF0b3JzRmFjdG9yeSBnZXREZWNvcmF0b3JzRmFjdG9yeSgpIHsKKwkJcmV0dXJuIChEZWNvcmF0b3JzRmFjdG9yeSlnZXRFRmFjdG9yeUluc3RhbmNlKCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJpdmF0ZSBib29sZWFuIGlzQ3JlYXRlZCA9IGZhbHNlOworCisJLyoqCisJICogQ3JlYXRlcyB0aGUgbWV0YS1tb2RlbCBvYmplY3RzIGZvciB0aGUgcGFja2FnZS4gIFRoaXMgbWV0aG9kIGlzCisJICogZ3VhcmRlZCB0byBoYXZlIG5vIGFmZmVjdCBvbiBhbnkgaW52b2NhdGlvbiBidXQgaXRzIGZpcnN0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIGNyZWF0ZVBhY2thZ2VDb250ZW50cygpIHsKKwkJaWYgKGlzQ3JlYXRlZCkgcmV0dXJuOworCQlpc0NyZWF0ZWQgPSB0cnVlOworCisJCS8vIENyZWF0ZSBjbGFzc2VzIGFuZCB0aGVpciBmZWF0dXJlcworCQl0ZXN0RWRnZURlY29yYXRvcjFFQ2xhc3MgPSBjcmVhdGVFQ2xhc3MoVEVTVF9FREdFX0RFQ09SQVRPUjEpOworCQljcmVhdGVFQXR0cmlidXRlKHRlc3RFZGdlRGVjb3JhdG9yMUVDbGFzcywgVEVTVF9FREdFX0RFQ09SQVRPUjFfX05PREVfQVVSSSk7CisJCWNyZWF0ZUVBdHRyaWJ1dGUodGVzdEVkZ2VEZWNvcmF0b3IxRUNsYXNzLCBURVNUX0VER0VfREVDT1JBVE9SMV9fTk9ERV9CVVJJKTsKKwkJY3JlYXRlRUF0dHJpYnV0ZSh0ZXN0RWRnZURlY29yYXRvcjFFQ2xhc3MsIFRFU1RfRURHRV9ERUNPUkFUT1IxX19FREdFX1VSSSk7CisKKwkJdGVzdEdyYXBoRGVjb3JhdG9yMUVDbGFzcyA9IGNyZWF0ZUVDbGFzcyhURVNUX0dSQVBIX0RFQ09SQVRPUjEpOworCisJCXRlc3ROb2RlRGVjb3JhdG9yMUVDbGFzcyA9IGNyZWF0ZUVDbGFzcyhURVNUX05PREVfREVDT1JBVE9SMSk7CisKKwkJdGVzdFNjZW5hcmlvR3JhcGhEZWNvcmF0b3IxRUNsYXNzID0gY3JlYXRlRUNsYXNzKFRFU1RfU0NFTkFSSU9fR1JBUEhfREVDT1JBVE9SMSk7CisJCWNyZWF0ZUVBdHRyaWJ1dGUodGVzdFNjZW5hcmlvR3JhcGhEZWNvcmF0b3IxRUNsYXNzLCBURVNUX1NDRU5BUklPX0dSQVBIX0RFQ09SQVRPUjFfX0RPVUJMRV9WQUxVRSk7CisJCWNyZWF0ZUVBdHRyaWJ1dGUodGVzdFNjZW5hcmlvR3JhcGhEZWNvcmF0b3IxRUNsYXNzLCBURVNUX1NDRU5BUklPX0dSQVBIX0RFQ09SQVRPUjFfX0lOVF9WQUxVRSk7CisJCWNyZWF0ZUVBdHRyaWJ1dGUodGVzdFNjZW5hcmlvR3JhcGhEZWNvcmF0b3IxRUNsYXNzLCBURVNUX1NDRU5BUklPX0dSQVBIX0RFQ09SQVRPUjFfX1NUUklOR19WQUxVRSk7CisJCWNyZWF0ZUVSZWZlcmVuY2UodGVzdFNjZW5hcmlvR3JhcGhEZWNvcmF0b3IxRUNsYXNzLCBURVNUX1NDRU5BUklPX0dSQVBIX0RFQ09SQVRPUjFfX1NURU1fVElNRV9WQUxVRSk7CisJCWNyZWF0ZUVBdHRyaWJ1dGUodGVzdFNjZW5hcmlvR3JhcGhEZWNvcmF0b3IxRUNsYXNzLCBURVNUX1NDRU5BUklPX0dSQVBIX0RFQ09SQVRPUjFfX0JPT0xFQU5fVkFMVUUpOworCisJCWVkZ2VEZWNvcmF0b3JFQ2xhc3MgPSBjcmVhdGVFQ2xhc3MoRURHRV9ERUNPUkFUT1IpOworCisJCWdyYXBoRGVjb3JhdG9yRUNsYXNzID0gY3JlYXRlRUNsYXNzKEdSQVBIX0RFQ09SQVRPUik7CisKKwkJbm9kZURlY29yYXRvckVDbGFzcyA9IGNyZWF0ZUVDbGFzcyhOT0RFX0RFQ09SQVRPUik7CisKKwkJLy8gQ3JlYXRlIGRhdGEgdHlwZXMKKwkJdXJpRURhdGFUeXBlID0gY3JlYXRlRURhdGFUeXBlKFVSSSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJpdmF0ZSBib29sZWFuIGlzSW5pdGlhbGl6ZWQgPSBmYWxzZTsKKworCS8qKgorCSAqIENvbXBsZXRlIHRoZSBpbml0aWFsaXphdGlvbiBvZiB0aGUgcGFja2FnZSBhbmQgaXRzIG1ldGEtbW9kZWwuICBUaGlzCisJICogbWV0aG9kIGlzIGd1YXJkZWQgdG8gaGF2ZSBubyBhZmZlY3Qgb24gYW55IGludm9jYXRpb24gYnV0IGl0cyBmaXJzdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBpbml0aWFsaXplUGFja2FnZUNvbnRlbnRzKCkgeworCQlpZiAoaXNJbml0aWFsaXplZCkgcmV0dXJuOworCQlpc0luaXRpYWxpemVkID0gdHJ1ZTsKKworCQkvLyBJbml0aWFsaXplIHBhY2thZ2UKKwkJc2V0TmFtZShlTkFNRSk7CisJCXNldE5zUHJlZml4KGVOU19QUkVGSVgpOworCQlzZXROc1VSSShlTlNfVVJJKTsKKworCQkvLyBPYnRhaW4gb3RoZXIgZGVwZW5kZW50IHBhY2thZ2VzCisJCU1vZGVsUGFja2FnZSB0aGVNb2RlbFBhY2thZ2UgPSAoTW9kZWxQYWNrYWdlKUVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVQYWNrYWdlKE1vZGVsUGFja2FnZS5lTlNfVVJJKTsKKworCQkvLyBDcmVhdGUgdHlwZSBwYXJhbWV0ZXJzCisKKwkJLy8gU2V0IGJvdW5kcyBmb3IgdHlwZSBwYXJhbWV0ZXJzCisKKwkJLy8gQWRkIHN1cGVydHlwZXMgdG8gY2xhc3NlcworCQl0ZXN0RWRnZURlY29yYXRvcjFFQ2xhc3MuZ2V0RVN1cGVyVHlwZXMoKS5hZGQodGhlTW9kZWxQYWNrYWdlLmdldEVkZ2VEZWNvcmF0b3IoKSk7CisJCXRlc3RHcmFwaERlY29yYXRvcjFFQ2xhc3MuZ2V0RVN1cGVyVHlwZXMoKS5hZGQodGhlTW9kZWxQYWNrYWdlLmdldEdyYXBoRGVjb3JhdG9yKCkpOworCQl0ZXN0Tm9kZURlY29yYXRvcjFFQ2xhc3MuZ2V0RVN1cGVyVHlwZXMoKS5hZGQodGhlTW9kZWxQYWNrYWdlLmdldE5vZGVEZWNvcmF0b3IoKSk7CisJCXRlc3RTY2VuYXJpb0dyYXBoRGVjb3JhdG9yMUVDbGFzcy5nZXRFU3VwZXJUeXBlcygpLmFkZCh0aGVNb2RlbFBhY2thZ2UuZ2V0R3JhcGhEZWNvcmF0b3IoKSk7CisKKwkJLy8gSW5pdGlhbGl6ZSBjbGFzc2VzIGFuZCBmZWF0dXJlczsgYWRkIG9wZXJhdGlvbnMgYW5kIHBhcmFtZXRlcnMKKwkJaW5pdEVDbGFzcyh0ZXN0RWRnZURlY29yYXRvcjFFQ2xhc3MsIFRlc3RFZGdlRGVjb3JhdG9yMS5jbGFzcywgIlRlc3RFZGdlRGVjb3JhdG9yMSIsICFJU19BQlNUUkFDVCwgIUlTX0lOVEVSRkFDRSwgSVNfR0VORVJBVEVEX0lOU1RBTkNFX0NMQVNTKTsgLy8kTk9OLU5MUy0xJAorCQlpbml0RUF0dHJpYnV0ZShnZXRUZXN0RWRnZURlY29yYXRvcjFfTm9kZUFVUkkoKSwgdGhpcy5nZXRVUkkoKSwgIm5vZGVBVVJJIiwgbnVsbCwgMCwgMSwgVGVzdEVkZ2VEZWNvcmF0b3IxLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOyAvLyROT04tTkxTLTEkCisJCWluaXRFQXR0cmlidXRlKGdldFRlc3RFZGdlRGVjb3JhdG9yMV9Ob2RlQlVSSSgpLCB0aGlzLmdldFVSSSgpLCAibm9kZUJVUkkiLCBudWxsLCAwLCAxLCBUZXN0RWRnZURlY29yYXRvcjEuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7IC8vJE5PTi1OTFMtMSQKKwkJaW5pdEVBdHRyaWJ1dGUoZ2V0VGVzdEVkZ2VEZWNvcmF0b3IxX0VkZ2VVUkkoKSwgdGhpcy5nZXRVUkkoKSwgImVkZ2VVUkkiLCBudWxsLCAwLCAxLCBUZXN0RWRnZURlY29yYXRvcjEuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7IC8vJE5PTi1OTFMtMSQKKworCQlpbml0RUNsYXNzKHRlc3RHcmFwaERlY29yYXRvcjFFQ2xhc3MsIFRlc3RHcmFwaERlY29yYXRvcjEuY2xhc3MsICJUZXN0R3JhcGhEZWNvcmF0b3IxIiwgIUlTX0FCU1RSQUNULCAhSVNfSU5URVJGQUNFLCBJU19HRU5FUkFURURfSU5TVEFOQ0VfQ0xBU1MpOyAvLyROT04tTkxTLTEkCisKKwkJaW5pdEVDbGFzcyh0ZXN0Tm9kZURlY29yYXRvcjFFQ2xhc3MsIFRlc3ROb2RlRGVjb3JhdG9yMS5jbGFzcywgIlRlc3ROb2RlRGVjb3JhdG9yMSIsICFJU19BQlNUUkFDVCwgIUlTX0lOVEVSRkFDRSwgSVNfR0VORVJBVEVEX0lOU1RBTkNFX0NMQVNTKTsgLy8kTk9OLU5MUy0xJAorCisJCWluaXRFQ2xhc3ModGVzdFNjZW5hcmlvR3JhcGhEZWNvcmF0b3IxRUNsYXNzLCBUZXN0U2NlbmFyaW9HcmFwaERlY29yYXRvcjEuY2xhc3MsICJUZXN0U2NlbmFyaW9HcmFwaERlY29yYXRvcjEiLCAhSVNfQUJTVFJBQ1QsICFJU19JTlRFUkZBQ0UsIElTX0dFTkVSQVRFRF9JTlNUQU5DRV9DTEFTUyk7IC8vJE5PTi1OTFMtMSQKKwkJaW5pdEVBdHRyaWJ1dGUoZ2V0VGVzdFNjZW5hcmlvR3JhcGhEZWNvcmF0b3IxX0RvdWJsZVZhbHVlKCksIGVjb3JlUGFja2FnZS5nZXRFRG91YmxlKCksICJkb3VibGVWYWx1ZSIsIG51bGwsIDAsIDEsIFRlc3RTY2VuYXJpb0dyYXBoRGVjb3JhdG9yMS5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsgLy8kTk9OLU5MUy0xJAorCQlpbml0RUF0dHJpYnV0ZShnZXRUZXN0U2NlbmFyaW9HcmFwaERlY29yYXRvcjFfSW50VmFsdWUoKSwgZWNvcmVQYWNrYWdlLmdldEVJbnQoKSwgImludFZhbHVlIiwgbnVsbCwgMCwgMSwgVGVzdFNjZW5hcmlvR3JhcGhEZWNvcmF0b3IxLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOyAvLyROT04tTkxTLTEkCisJCWluaXRFQXR0cmlidXRlKGdldFRlc3RTY2VuYXJpb0dyYXBoRGVjb3JhdG9yMV9TdHJpbmdWYWx1ZSgpLCBlY29yZVBhY2thZ2UuZ2V0RVN0cmluZygpLCAic3RyaW5nVmFsdWUiLCBudWxsLCAwLCAxLCBUZXN0U2NlbmFyaW9HcmFwaERlY29yYXRvcjEuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7IC8vJE5PTi1OTFMtMSQKKwkJaW5pdEVSZWZlcmVuY2UoZ2V0VGVzdFNjZW5hcmlvR3JhcGhEZWNvcmF0b3IxX1NURU1UaW1lVmFsdWUoKSwgdGhlTW9kZWxQYWNrYWdlLmdldFNURU1UaW1lKCksIG51bGwsICJzVEVNVGltZVZhbHVlIiwgbnVsbCwgMCwgMSwgVGVzdFNjZW5hcmlvR3JhcGhEZWNvcmF0b3IxLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19DT01QT1NJVEUsIElTX1JFU09MVkVfUFJPWElFUywgIUlTX1VOU0VUVEFCTEUsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOyAvLyROT04tTkxTLTEkCisJCWluaXRFQXR0cmlidXRlKGdldFRlc3RTY2VuYXJpb0dyYXBoRGVjb3JhdG9yMV9Cb29sZWFuVmFsdWUoKSwgZWNvcmVQYWNrYWdlLmdldEVCb29sZWFuKCksICJib29sZWFuVmFsdWUiLCBudWxsLCAwLCAxLCBUZXN0U2NlbmFyaW9HcmFwaERlY29yYXRvcjEuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7IC8vJE5PTi1OTFMtMSQKKworCQlpbml0RUNsYXNzKGVkZ2VEZWNvcmF0b3JFQ2xhc3MsIEVkZ2VEZWNvcmF0b3IuY2xhc3MsICJFZGdlRGVjb3JhdG9yIiwgSVNfQUJTVFJBQ1QsIElTX0lOVEVSRkFDRSwgIUlTX0dFTkVSQVRFRF9JTlNUQU5DRV9DTEFTUyk7IC8vJE5PTi1OTFMtMSQKKworCQlpbml0RUNsYXNzKGdyYXBoRGVjb3JhdG9yRUNsYXNzLCBHcmFwaERlY29yYXRvci5jbGFzcywgIkdyYXBoRGVjb3JhdG9yIiwgSVNfQUJTVFJBQ1QsIElTX0lOVEVSRkFDRSwgIUlTX0dFTkVSQVRFRF9JTlNUQU5DRV9DTEFTUyk7IC8vJE5PTi1OTFMtMSQKKworCQlpbml0RUNsYXNzKG5vZGVEZWNvcmF0b3JFQ2xhc3MsIE5vZGVEZWNvcmF0b3IuY2xhc3MsICJOb2RlRGVjb3JhdG9yIiwgSVNfQUJTVFJBQ1QsIElTX0lOVEVSRkFDRSwgIUlTX0dFTkVSQVRFRF9JTlNUQU5DRV9DTEFTUyk7IC8vJE5PTi1OTFMtMSQKKworCQkvLyBJbml0aWFsaXplIGRhdGEgdHlwZXMKKwkJaW5pdEVEYXRhVHlwZSh1cmlFRGF0YVR5cGUsIG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5VUkkuY2xhc3MsICJVUkkiLCBJU19TRVJJQUxJWkFCTEUsICFJU19HRU5FUkFURURfSU5TVEFOQ0VfQ0xBU1MpOyAvLyROT04tTkxTLTEkCisKKwkJLy8gQ3JlYXRlIHJlc291cmNlCisJCWNyZWF0ZVJlc291cmNlKGVOU19VUkkpOworCX0KKworfSAvL0RlY29yYXRvcnNQYWNrYWdlSW1wbApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3Rlc3RzL3V0aWwvZGVjb3JhdG9ycy9pbXBsL1Rlc3RFZGdlRGVjb3JhdG9yMUltcGwuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS90ZXN0cy91dGlsL2RlY29yYXRvcnMvaW1wbC9UZXN0RWRnZURlY29yYXRvcjFJbXBsLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzBjN2Q5MAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS90ZXN0cy91dGlsL2RlY29yYXRvcnMvaW1wbC9UZXN0RWRnZURlY29yYXRvcjFJbXBsLmphdmEKQEAgLTAsMCArMSwzMzMgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsLmRlY29yYXRvcnMuaW1wbDsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlVSSTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5pbXBsLkVOb3RpZmljYXRpb25JbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS51dGlsLkVjb3JlVXRpbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguRHluYW1pY0xhYmVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5FZGdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5MYWJlbFZhbHVlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5Ob2RlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5TVEVNVGltZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuaW1wbC5FZGdlRGVjb3JhdG9ySW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwuVGVzdFV0aWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsLmRlY29yYXRvcnMuRGVjb3JhdG9yc1BhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsLmRlY29yYXRvcnMuVGVzdEVkZ2VEZWNvcmF0b3IxOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC5sYWJlbHMuVGVzdER5bmFtaWNFZGdlTGFiZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsLmxhYmVscy5UZXN0RHluYW1pY0xhYmVsMTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwubGFiZWxzLlRlc3RJbnRlZ2VyTGFiZWxWYWx1ZTsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiBBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+VGVzdCBFZGdlIERlY29yYXRvcjE8L2I+PC9lbT4nLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiA8cD4KKyAqIFRoZSBmb2xsb3dpbmcgZmVhdHVyZXMgYXJlIGltcGxlbWVudGVkOgorICogPHVsPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC5kZWNvcmF0b3JzLmltcGwuVGVzdEVkZ2VEZWNvcmF0b3IxSW1wbCNnZXROb2RlQVVSSSA8ZW0+Tm9kZSBBVVJJPC9lbT59PC9saT4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwuZGVjb3JhdG9ycy5pbXBsLlRlc3RFZGdlRGVjb3JhdG9yMUltcGwjZ2V0Tm9kZUJVUkkgPGVtPk5vZGUgQlVSSTwvZW0+fTwvbGk+CisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsLmRlY29yYXRvcnMuaW1wbC5UZXN0RWRnZURlY29yYXRvcjFJbXBsI2dldEVkZ2VVUkkgPGVtPkVkZ2UgVVJJPC9lbT59PC9saT4KKyAqIDwvdWw+CisgKiA8L3A+CisgKgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgVGVzdEVkZ2VEZWNvcmF0b3IxSW1wbCBleHRlbmRzIEVkZ2VEZWNvcmF0b3JJbXBsIGltcGxlbWVudHMKKwkJVGVzdEVkZ2VEZWNvcmF0b3IxIHsKKwkvKioKKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0Tm9kZUFVUkkoKSA8ZW0+Tm9kZSBBVVJJPC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZ2V0Tm9kZUFVUkkoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgVVJJIE5PREVfQVVSSV9FREVGQVVMVCA9IG51bGw7CisKKwkvKioKKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXROb2RlQVVSSSgpIDxlbT5Ob2RlIEFVUkk8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNnZXROb2RlQVVSSSgpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIFVSSSBub2RlQVVSSSA9IE5PREVfQVVSSV9FREVGQVVMVDsKKworCS8qKgorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXROb2RlQlVSSSgpIDxlbT5Ob2RlIEJVUkk8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNnZXROb2RlQlVSSSgpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBVUkkgTk9ERV9CVVJJX0VERUZBVUxUID0gbnVsbDsKKworCS8qKgorCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldE5vZGVCVVJJKCkgPGVtPk5vZGUgQlVSSTwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI2dldE5vZGVCVVJJKCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgVVJJIG5vZGVCVVJJID0gTk9ERV9CVVJJX0VERUZBVUxUOworCisJLyoqCisJICogVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldEVkZ2VVUkkoKSA8ZW0+RWRnZSBVUkk8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNnZXRFZGdlVVJJKCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIFVSSSBFREdFX1VSSV9FREVGQVVMVCA9IG51bGw7CisKKwkvKioKKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRFZGdlVVJJKCkgPGVtPkVkZ2UgVVJJPC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZ2V0RWRnZVVSSSgpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIFVSSSBlZGdlVVJJID0gRURHRV9VUklfRURFRkFVTFQ7CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIFRlc3RFZGdlRGVjb3JhdG9yMUltcGwoKSB7CisJCXN1cGVyKCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCBFQ2xhc3MgZVN0YXRpY0NsYXNzKCkgeworCQlyZXR1cm4gRGVjb3JhdG9yc1BhY2thZ2UuTGl0ZXJhbHMuVEVTVF9FREdFX0RFQ09SQVRPUjE7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBVUkkgZ2V0Tm9kZUFVUkkoKSB7CisJCXJldHVybiBub2RlQVVSSTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgc2V0Tm9kZUFVUkkoVVJJIG5ld05vZGVBVVJJKSB7CisJCVVSSSBvbGROb2RlQVVSSSA9IG5vZGVBVVJJOworCQlub2RlQVVSSSA9IG5ld05vZGVBVVJJOworCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpCisJCQllTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBEZWNvcmF0b3JzUGFja2FnZS5URVNUX0VER0VfREVDT1JBVE9SMV9fTk9ERV9BVVJJLCBvbGROb2RlQVVSSSwgbm9kZUFVUkkpKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFVSSSBnZXROb2RlQlVSSSgpIHsKKwkJcmV0dXJuIG5vZGVCVVJJOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXROb2RlQlVSSShVUkkgbmV3Tm9kZUJVUkkpIHsKKwkJVVJJIG9sZE5vZGVCVVJJID0gbm9kZUJVUkk7CisJCW5vZGVCVVJJID0gbmV3Tm9kZUJVUkk7CisJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkKKwkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIERlY29yYXRvcnNQYWNrYWdlLlRFU1RfRURHRV9ERUNPUkFUT1IxX19OT0RFX0JVUkksIG9sZE5vZGVCVVJJLCBub2RlQlVSSSkpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVVJJIGdldEVkZ2VVUkkoKSB7CisJCXJldHVybiBlZGdlVVJJOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRFZGdlVVJJKFVSSSBuZXdFZGdlVVJJKSB7CisJCVVSSSBvbGRFZGdlVVJJID0gZWRnZVVSSTsKKwkJZWRnZVVSSSA9IG5ld0VkZ2VVUkk7CisJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkKKwkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIERlY29yYXRvcnNQYWNrYWdlLlRFU1RfRURHRV9ERUNPUkFUT1IxX19FREdFX1VSSSwgb2xkRWRnZVVSSSwgZWRnZVVSSSkpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgT2JqZWN0IGVHZXQoaW50IGZlYXR1cmVJRCwgYm9vbGVhbiByZXNvbHZlLCBib29sZWFuIGNvcmVUeXBlKSB7CisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7CisJCQljYXNlIERlY29yYXRvcnNQYWNrYWdlLlRFU1RfRURHRV9ERUNPUkFUT1IxX19OT0RFX0FVUkk6CisJCQkJcmV0dXJuIGdldE5vZGVBVVJJKCk7CisJCQljYXNlIERlY29yYXRvcnNQYWNrYWdlLlRFU1RfRURHRV9ERUNPUkFUT1IxX19OT0RFX0JVUkk6CisJCQkJcmV0dXJuIGdldE5vZGVCVVJJKCk7CisJCQljYXNlIERlY29yYXRvcnNQYWNrYWdlLlRFU1RfRURHRV9ERUNPUkFUT1IxX19FREdFX1VSSToKKwkJCQlyZXR1cm4gZ2V0RWRnZVVSSSgpOworCQl9CisJCXJldHVybiBzdXBlci5lR2V0KGZlYXR1cmVJRCwgcmVzb2x2ZSwgY29yZVR5cGUpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBlU2V0KGludCBmZWF0dXJlSUQsIE9iamVjdCBuZXdWYWx1ZSkgeworCQlzd2l0Y2ggKGZlYXR1cmVJRCkgeworCQkJY2FzZSBEZWNvcmF0b3JzUGFja2FnZS5URVNUX0VER0VfREVDT1JBVE9SMV9fTk9ERV9BVVJJOgorCQkJCXNldE5vZGVBVVJJKChVUkkpbmV3VmFsdWUpOworCQkJCXJldHVybjsKKwkJCWNhc2UgRGVjb3JhdG9yc1BhY2thZ2UuVEVTVF9FREdFX0RFQ09SQVRPUjFfX05PREVfQlVSSToKKwkJCQlzZXROb2RlQlVSSSgoVVJJKW5ld1ZhbHVlKTsKKwkJCQlyZXR1cm47CisJCQljYXNlIERlY29yYXRvcnNQYWNrYWdlLlRFU1RfRURHRV9ERUNPUkFUT1IxX19FREdFX1VSSToKKwkJCQlzZXRFZGdlVVJJKChVUkkpbmV3VmFsdWUpOworCQkJCXJldHVybjsKKwkJfQorCQlzdXBlci5lU2V0KGZlYXR1cmVJRCwgbmV3VmFsdWUpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBlVW5zZXQoaW50IGZlYXR1cmVJRCkgeworCQlzd2l0Y2ggKGZlYXR1cmVJRCkgeworCQkJY2FzZSBEZWNvcmF0b3JzUGFja2FnZS5URVNUX0VER0VfREVDT1JBVE9SMV9fTk9ERV9BVVJJOgorCQkJCXNldE5vZGVBVVJJKE5PREVfQVVSSV9FREVGQVVMVCk7CisJCQkJcmV0dXJuOworCQkJY2FzZSBEZWNvcmF0b3JzUGFja2FnZS5URVNUX0VER0VfREVDT1JBVE9SMV9fTk9ERV9CVVJJOgorCQkJCXNldE5vZGVCVVJJKE5PREVfQlVSSV9FREVGQVVMVCk7CisJCQkJcmV0dXJuOworCQkJY2FzZSBEZWNvcmF0b3JzUGFja2FnZS5URVNUX0VER0VfREVDT1JBVE9SMV9fRURHRV9VUkk6CisJCQkJc2V0RWRnZVVSSShFREdFX1VSSV9FREVGQVVMVCk7CisJCQkJcmV0dXJuOworCQl9CisJCXN1cGVyLmVVbnNldChmZWF0dXJlSUQpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgYm9vbGVhbiBlSXNTZXQoaW50IGZlYXR1cmVJRCkgeworCQlzd2l0Y2ggKGZlYXR1cmVJRCkgeworCQkJY2FzZSBEZWNvcmF0b3JzUGFja2FnZS5URVNUX0VER0VfREVDT1JBVE9SMV9fTk9ERV9BVVJJOgorCQkJCXJldHVybiBOT0RFX0FVUklfRURFRkFVTFQgPT0gbnVsbCA/IG5vZGVBVVJJICE9IG51bGwgOiAhTk9ERV9BVVJJX0VERUZBVUxULmVxdWFscyhub2RlQVVSSSk7CisJCQljYXNlIERlY29yYXRvcnNQYWNrYWdlLlRFU1RfRURHRV9ERUNPUkFUT1IxX19OT0RFX0JVUkk6CisJCQkJcmV0dXJuIE5PREVfQlVSSV9FREVGQVVMVCA9PSBudWxsID8gbm9kZUJVUkkgIT0gbnVsbCA6ICFOT0RFX0JVUklfRURFRkFVTFQuZXF1YWxzKG5vZGVCVVJJKTsKKwkJCWNhc2UgRGVjb3JhdG9yc1BhY2thZ2UuVEVTVF9FREdFX0RFQ09SQVRPUjFfX0VER0VfVVJJOgorCQkJCXJldHVybiBFREdFX1VSSV9FREVGQVVMVCA9PSBudWxsID8gZWRnZVVSSSAhPSBudWxsIDogIUVER0VfVVJJX0VERUZBVUxULmVxdWFscyhlZGdlVVJJKTsKKwkJfQorCQlyZXR1cm4gc3VwZXIuZUlzU2V0KGZlYXR1cmVJRCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKSB7CisJCWlmIChlSXNQcm94eSgpKSByZXR1cm4gc3VwZXIudG9TdHJpbmcoKTsKKworCQlTdHJpbmdCdWZmZXIgcmVzdWx0ID0gbmV3IFN0cmluZ0J1ZmZlcihzdXBlci50b1N0cmluZygpKTsKKwkJcmVzdWx0LmFwcGVuZCgiIChub2RlQVVSSTogIik7IC8vJE5PTi1OTFMtMSQKKwkJcmVzdWx0LmFwcGVuZChub2RlQVVSSSk7CisJCXJlc3VsdC5hcHBlbmQoIiwgbm9kZUJVUkk6ICIpOyAvLyROT04tTkxTLTEkCisJCXJlc3VsdC5hcHBlbmQobm9kZUJVUkkpOworCQlyZXN1bHQuYXBwZW5kKCIsIGVkZ2VVUkk6ICIpOyAvLyROT04tTkxTLTEkCisJCXJlc3VsdC5hcHBlbmQoZWRnZVVSSSk7CisJCXJlc3VsdC5hcHBlbmQoJyknKTsKKwkJcmV0dXJuIHJlc3VsdC50b1N0cmluZygpOworCX0KKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLmltcGwuRGVjb3JhdG9ySW1wbCNkZWNvcmF0ZUdyYXBoKG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5HcmFwaCkKKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBib29sZWFuIGRlY29yYXRlR3JhcGgoU1RFTVRpbWUgdGltZSkgeworCQlpZiAoaXNHcmFwaERlY29yYXRlZCgpKSByZXR1cm4gdHJ1ZTsKKwkJCisJCWZpbmFsIE5vZGUgbm9kZUEgPSBnZXRHcmFwaCgpLmdldE5vZGUoZ2V0Tm9kZUFVUkkoKSk7CisJCWZpbmFsIE5vZGUgbm9kZUIgPSBnZXRHcmFwaCgpLmdldE5vZGUoZ2V0Tm9kZUJVUkkoKSk7CisJCQorCQlmaW5hbCBFZGdlIGVkZ2UgPSBUZXN0VXRpbC5jcmVhdGVEeW5hbWljYWxseUxhYmVsZWRFZGdlKGdldE5vZGVBVVJJKCksCisJCQkJZ2V0Tm9kZUJVUkkoKSxnZXRFZGdlVVJJKCksIHRoaXMpOworCQllZGdlLnNldEEobm9kZUEpOworCQllZGdlLnNldEIobm9kZUIpOworCQlub2RlQS5nZXRFZGdlcygpLmFkZChlZGdlKTsKKwkJbm9kZUIuZ2V0RWRnZXMoKS5hZGQoZWRnZSk7CisKKwkJZ2V0TGFiZWxzVG9VcGRhdGUoKS5hZGQoKER5bmFtaWNMYWJlbCllZGdlLmdldExhYmVsKCkpOworCisvLwkJZ2V0R3JhcGgoKS5hZGREeW5hbWljTGFiZWwoKER5bmFtaWNMYWJlbCkgZWRnZS5nZXRMYWJlbCgpKTsKKwkJZ2V0R3JhcGgoKS5wdXRFZGdlKGVkZ2UpOworCisJCWFzc2VydCBlZGdlLnNhbmUoKTsKKwkJCisJCXNldEdyYXBoRGVjb3JhdGVkKHRydWUpOworCQlyZXR1cm4gdHJ1ZTsKKwl9IC8vIGRlY29yYXRlR3JhcGgKKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLmltcGwuRGVjb3JhdG9ySW1wbCN1cGRhdGVMYWJlbHMoR3JhcGgsIFNURU1UaW1lLCBsb25nKQorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgdXBkYXRlTGFiZWxzKFNURU1UaW1lIHRpbWUsIGZpbmFsIGxvbmcgdGltZURlbHRhLCBpbnQgY3ljZWxlKSB7CisJCWZvciAoZmluYWwgSXRlcmF0b3IgZHluYW1pY0xhYmVsSXRlciA9IGdldExhYmVsc1RvVXBkYXRlKCkuaXRlcmF0b3IoKTsgZHluYW1pY0xhYmVsSXRlcgorCQkJCS5oYXNOZXh0KCk7KSB7CisJCQlmaW5hbCBUZXN0RHluYW1pY0VkZ2VMYWJlbCB0ZXN0TGFiZWwgPSAoVGVzdER5bmFtaWNFZGdlTGFiZWwpIGR5bmFtaWNMYWJlbEl0ZXIKKwkJCQkJLm5leHQoKTsKKwkJCXRlc3RMYWJlbC5pbmNyZW1lbnQoKTsKKwkJfSAvLyBmb3IKKwl9IC8vIHVwZGF0ZUxhYmVscworCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuaW1wbC5EZWNvcmF0b3JJbXBsI3Jlc2V0TGFiZWxzKG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5HcmFwaCkKKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIHJlc2V0TGFiZWxzKCkgeworCQlmaW5hbCBUZXN0RHluYW1pY0xhYmVsMSBURVNUX0xBQkVMID0gVGVzdFV0aWwKKwkJCQkuY3JlYXRlRHluYW1pY0xhYmVsKFRlc3RVdGlsLmNyZWF0ZU5leHRJZGVudGlmaWFibGVUb0xhYmVsVVJJKCkpOworCQlmaW5hbCBUZXN0SW50ZWdlckxhYmVsVmFsdWUgUkVTRVRfVkFMVUUgPSAoVGVzdEludGVnZXJMYWJlbFZhbHVlKSBURVNUX0xBQkVMCisJCQkJLmdldEN1cnJlbnRWYWx1ZSgpOworCQlmb3IgKEl0ZXJhdG9yIGxhYmVsSXRlciA9IGdldExhYmVsc1RvVXBkYXRlKCkuaXRlcmF0b3IoKTsgbGFiZWxJdGVyCisJCQkJLmhhc05leHQoKTspIHsKKwkJCWZpbmFsIFRlc3REeW5hbWljRWRnZUxhYmVsIGR5bmFtaWNMYWJlbCA9IChUZXN0RHluYW1pY0VkZ2VMYWJlbCkgbGFiZWxJdGVyCisJCQkJCS5uZXh0KCk7CisJCQlkeW5hbWljTGFiZWwuc2V0Q3VycmVudFZhbHVlKChMYWJlbFZhbHVlKUVjb3JlVXRpbAorCQkJCQkuY29weShSRVNFVF9WQUxVRSkpOworCQl9CisJfSAvLyByZXNldExhYmVscworCit9IC8vIFRlc3RFZGdlRGVjb3JhdG9yMUltcGwKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS90ZXN0cy91dGlsL2RlY29yYXRvcnMvaW1wbC9UZXN0R3JhcGhEZWNvcmF0b3IxSW1wbC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3Rlc3RzL3V0aWwvZGVjb3JhdG9ycy9pbXBsL1Rlc3RHcmFwaERlY29yYXRvcjFJbXBsLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGY5NDEzOAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS90ZXN0cy91dGlsL2RlY29yYXRvcnMvaW1wbC9UZXN0R3JhcGhEZWNvcmF0b3IxSW1wbC5qYXZhCkBAIC0wLDAgKzEsMTAyIEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC5kZWNvcmF0b3JzLmltcGw7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzczsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUudXRpbC5FY29yZVV0aWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkR5bmFtaWNMYWJlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguTGFiZWxWYWx1ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuU1RFTVRpbWU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLmltcGwuR3JhcGhEZWNvcmF0b3JJbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC5UZXN0VXRpbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwuZGVjb3JhdG9ycy5EZWNvcmF0b3JzUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwuZGVjb3JhdG9ycy5UZXN0R3JhcGhEZWNvcmF0b3IxOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC5sYWJlbHMuVGVzdER5bmFtaWNMYWJlbDE7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsLmxhYmVscy5UZXN0SW50ZWdlckxhYmVsVmFsdWU7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPlRlc3QgR3JhcGggRGVjb3JhdG9yMTwvYj48L2VtPicuCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIDxwPgorICogPC9wPgorICoKKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIFRlc3RHcmFwaERlY29yYXRvcjFJbXBsIGV4dGVuZHMgR3JhcGhEZWNvcmF0b3JJbXBsIGltcGxlbWVudHMKKwkJVGVzdEdyYXBoRGVjb3JhdG9yMSB7CisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBUZXN0R3JhcGhEZWNvcmF0b3IxSW1wbCgpIHsKKwkJc3VwZXIoKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIEVDbGFzcyBlU3RhdGljQ2xhc3MoKSB7CisJCXJldHVybiBEZWNvcmF0b3JzUGFja2FnZS5MaXRlcmFscy5URVNUX0dSQVBIX0RFQ09SQVRPUjE7CisJfQorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuaW1wbC5EZWNvcmF0b3JJbXBsI2RlY29yYXRlR3JhcGgob3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkdyYXBoKQorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIGJvb2xlYW4gZGVjb3JhdGVHcmFwaChTVEVNVGltZSB0aW1lKSB7CisJCWlmIChpc0dyYXBoRGVjb3JhdGVkKCkpIHJldHVybiB0cnVlOworCQlmaW5hbCBEeW5hbWljTGFiZWwgZHluYW1pY0xhYmVsID0gVGVzdFV0aWwuY3JlYXRlRHluYW1pY0xhYmVsKGdldEdyYXBoKCkuZ2V0VVJJKCkpOworCQlnZXRMYWJlbHNUb1VwZGF0ZSgpLmFkZChkeW5hbWljTGFiZWwpOworCQlnZXRHcmFwaCgpLnB1dEdyYXBoTGFiZWwoZHluYW1pY0xhYmVsKTsKKwkJc2V0R3JhcGhEZWNvcmF0ZWQodHJ1ZSk7CisJCXJldHVybiB0cnVlOworCX0gLy8gZGVjb3JhdGVHcmFwaAorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuaW1wbC5EZWNvcmF0b3JJbXBsI3VwZGF0ZUxhYmVscyhHcmFwaCwgU1RFTVRpbWUsIGxvbmcpCisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCB1cGRhdGVMYWJlbHMoU1RFTVRpbWUgdGltZSwgZmluYWwgbG9uZyB0aW1lRGVsdGEsIGludCBjeWNsZSkgeworCQlmb3IgKGZpbmFsIEl0ZXJhdG9yIGR5bmFtaWNMYWJlbEl0ZXIgPSBnZXRMYWJlbHNUb1VwZGF0ZSgpLml0ZXJhdG9yKCk7IGR5bmFtaWNMYWJlbEl0ZXIKKwkJCQkuaGFzTmV4dCgpOykgeworCQkJZmluYWwgVGVzdER5bmFtaWNMYWJlbDEgdGVzdExhYmVsID0gKFRlc3REeW5hbWljTGFiZWwxKSBkeW5hbWljTGFiZWxJdGVyCisJCQkJCS5uZXh0KCk7CisJCQl0ZXN0TGFiZWwuaW5jcmVtZW50KCk7CisJCX0gLy8gZm9yCisJfSAvLyB1cGRhdGVMYWJlbHMKKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLmltcGwuRGVjb3JhdG9ySW1wbCNyZXNldExhYmVscyhvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguR3JhcGgpCisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCByZXNldExhYmVscygpIHsKKwkJZmluYWwgVGVzdER5bmFtaWNMYWJlbDEgVEVTVF9MQUJFTCA9IFRlc3RVdGlsCisJCQkJLmNyZWF0ZUR5bmFtaWNMYWJlbChUZXN0VXRpbC5jcmVhdGVOZXh0SWRlbnRpZmlhYmxlVG9MYWJlbFVSSSgpKTsKKwkJZmluYWwgVGVzdEludGVnZXJMYWJlbFZhbHVlIFJFU0VUX1ZBTFVFID0gKFRlc3RJbnRlZ2VyTGFiZWxWYWx1ZSkgVEVTVF9MQUJFTAorCQkJCS5nZXRDdXJyZW50VmFsdWUoKTsKKwkJZm9yIChJdGVyYXRvciBsYWJlbEl0ZXIgPSBnZXRMYWJlbHNUb1VwZGF0ZSgpLml0ZXJhdG9yKCk7IGxhYmVsSXRlcgorCQkJCS5oYXNOZXh0KCk7KSB7CisJCQlmaW5hbCBUZXN0RHluYW1pY0xhYmVsMSBkeW5hbWljTGFiZWwgPSAoVGVzdER5bmFtaWNMYWJlbDEpIGxhYmVsSXRlcgorCQkJCQkubmV4dCgpOworCQkJZHluYW1pY0xhYmVsLnNldEN1cnJlbnRWYWx1ZSgoTGFiZWxWYWx1ZSlFY29yZVV0aWwKKwkJCQkJLmNvcHkoUkVTRVRfVkFMVUUpKTsKKwkJfQorCQlhc3NlcnQgdGhpcy5zYW5lKCk7CisJfSAvLyByZXNldExhYmVscworfSAvLyBUZXN0R3JhcGhEZWNvcmF0b3IxSW1wbApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3Rlc3RzL3V0aWwvZGVjb3JhdG9ycy9pbXBsL1Rlc3ROb2RlRGVjb3JhdG9yMUltcGwuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS90ZXN0cy91dGlsL2RlY29yYXRvcnMvaW1wbC9UZXN0Tm9kZURlY29yYXRvcjFJbXBsLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDYyNDg4NAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS90ZXN0cy91dGlsL2RlY29yYXRvcnMvaW1wbC9UZXN0Tm9kZURlY29yYXRvcjFJbXBsLmphdmEKQEAgLTAsMCArMSwxMjAgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsLmRlY29yYXRvcnMuaW1wbDsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS51dGlsLkVjb3JlVXRpbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguRHluYW1pY0xhYmVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5EeW5hbWljTm9kZUxhYmVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5MYWJlbFZhbHVlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5Ob2RlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5TVEVNVGltZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuaW1wbC5Ob2RlRGVjb3JhdG9ySW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwuVGVzdFV0aWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsLmRlY29yYXRvcnMuRGVjb3JhdG9yc1BhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsLmRlY29yYXRvcnMuVGVzdE5vZGVEZWNvcmF0b3IxOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC5sYWJlbHMuVGVzdER5bmFtaWNMYWJlbDE7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsLmxhYmVscy5UZXN0RHluYW1pY05vZGVMYWJlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwubGFiZWxzLlRlc3RJbnRlZ2VyTGFiZWxWYWx1ZTsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiBBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+VGVzdCBOb2RlIERlY29yYXRvcjE8L2I+PC9lbT4nLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiA8cD4KKyAqIDwvcD4KKyAqCisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBUZXN0Tm9kZURlY29yYXRvcjFJbXBsIGV4dGVuZHMgTm9kZURlY29yYXRvckltcGwgaW1wbGVtZW50cworCQlUZXN0Tm9kZURlY29yYXRvcjEgeworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgVGVzdE5vZGVEZWNvcmF0b3IxSW1wbCgpIHsKKwkJc3VwZXIoKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIEVDbGFzcyBlU3RhdGljQ2xhc3MoKSB7CisJCXJldHVybiBEZWNvcmF0b3JzUGFja2FnZS5MaXRlcmFscy5URVNUX05PREVfREVDT1JBVE9SMTsKKwl9CisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5pbXBsLkRlY29yYXRvckltcGwjZGVjb3JhdGVHcmFwaChvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguR3JhcGgpCisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgYm9vbGVhbiBkZWNvcmF0ZUdyYXBoKFNURU1UaW1lIHRpbWUpIHsKKwkJaWYgKGlzR3JhcGhEZWNvcmF0ZWQoKSkgcmV0dXJuIHRydWU7CisJCQorCQkvL2dldEdyYXBoKCkuZ2V0RGVjb3JhdG9ycygpLmFkZCh0bmQpOworCQlmb3IgKGZpbmFsIEl0ZXJhdG9yIG5vZGVJdGVyID0gZ2V0R3JhcGgoKS5nZXROb2RlcygpLnZhbHVlcygpLml0ZXJhdG9yKCk7IG5vZGVJdGVyCisJCQkJLmhhc05leHQoKTspIHsKKwkJCWZpbmFsIE5vZGUgbm9kZSA9IChOb2RlKSBub2RlSXRlci5uZXh0KCk7CisJCQlmaW5hbCBEeW5hbWljTm9kZUxhYmVsIGR5bmFtaWNOb2RlTGFiZWwgPSBUZXN0VXRpbC5jcmVhdGVEeW5hbWljTm9kZUxhYmVsKG5vZGUuZ2V0VVJJKCksIHRoaXMpOworCQkJZ2V0R3JhcGgoKS5wdXROb2RlTGFiZWwoZHluYW1pY05vZGVMYWJlbCk7CisJCQlnZXRMYWJlbHNUb1VwZGF0ZSgpLmFkZChkeW5hbWljTm9kZUxhYmVsKTsKKwkJCW5vZGUuZ2V0TGFiZWxzKCkuYWRkKGR5bmFtaWNOb2RlTGFiZWwpOworCQl9IC8vIGZvcgorCQkKKwkJc2V0R3JhcGhEZWNvcmF0ZWQodHJ1ZSk7CisJCXJldHVybiB0cnVlOworCX0gLy8gZGVjb3JhdGVHcmFwaAorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuaW1wbC5EZWNvcmF0b3JJbXBsI3VwZGF0ZUxhYmVscyhHcmFwaCwgU1RFTVRpbWUsIGxvbmcpCisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCB1cGRhdGVMYWJlbHMoU1RFTVRpbWUgdGltZSwgZmluYWwgbG9uZyB0aW1lRGVsdGEsIGludCBjeWNsZSkgeworCQlmb3IgKGZpbmFsIEl0ZXJhdG9yIGR5bmFtaWNMYWJlbEl0ZXIgPSBnZXRMYWJlbHNUb1VwZGF0ZSgpLml0ZXJhdG9yKCk7IGR5bmFtaWNMYWJlbEl0ZXIKKwkJCQkuaGFzTmV4dCgpOykgeworCQkJZmluYWwgRHluYW1pY0xhYmVsIHRlc3RMYWJlbCA9IChEeW5hbWljTGFiZWwpIGR5bmFtaWNMYWJlbEl0ZXIKKwkJCQkJLm5leHQoKTsKKwkJCWlmICh0ZXN0TGFiZWwgaW5zdGFuY2VvZiBUZXN0RHluYW1pY0xhYmVsMSkgeworCQkJCVRlc3REeW5hbWljTGFiZWwxIHRkbDEgPSAoVGVzdER5bmFtaWNMYWJlbDEpIHRlc3RMYWJlbDsKKwkJCQl0ZGwxLmluY3JlbWVudCgpOworCQkJfQorCQkJaWYgKHRlc3RMYWJlbCBpbnN0YW5jZW9mIFRlc3REeW5hbWljTm9kZUxhYmVsKSB7CisJCQkJVGVzdER5bmFtaWNOb2RlTGFiZWwgdGRubCA9IChUZXN0RHluYW1pY05vZGVMYWJlbCkgdGVzdExhYmVsOworCQkJCXRkbmwuaW5jcmVtZW50KCk7CisJCQl9CisJCX0gLy8gZm9yCisJfSAvLyB1cGRhdGVMYWJlbHMKKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLmltcGwuRGVjb3JhdG9ySW1wbCNyZXNldExhYmVscyhvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguR3JhcGgpCisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCByZXNldExhYmVscygpIHsKKwkJZmluYWwgVGVzdER5bmFtaWNMYWJlbDEgVEVTVF9MQUJFTCA9IFRlc3RVdGlsCisJCQkJLmNyZWF0ZUR5bmFtaWNMYWJlbChUZXN0VXRpbC5jcmVhdGVOZXh0SWRlbnRpZmlhYmxlVG9MYWJlbFVSSSgpKTsKKwkJZmluYWwgVGVzdEludGVnZXJMYWJlbFZhbHVlIFJFU0VUX1ZBTFVFID0gKFRlc3RJbnRlZ2VyTGFiZWxWYWx1ZSkgVEVTVF9MQUJFTAorCQkJCS5nZXRDdXJyZW50VmFsdWUoKTsKKwkJZm9yIChJdGVyYXRvciBsYWJlbEl0ZXIgPSBnZXRMYWJlbHNUb1VwZGF0ZSgpLml0ZXJhdG9yKCk7IGxhYmVsSXRlcgorCQkJCS5oYXNOZXh0KCk7KSB7CisJCQlmaW5hbCBEeW5hbWljTGFiZWwgZHluYW1pY0xhYmVsID0gKER5bmFtaWNMYWJlbCkgbGFiZWxJdGVyCisJCQkJCS5uZXh0KCk7CisJCQlkeW5hbWljTGFiZWwuc2V0Q3VycmVudFZhbHVlKChMYWJlbFZhbHVlKUVjb3JlVXRpbAorCQkJCQkuY29weShSRVNFVF9WQUxVRSkpOworCQl9CisJfSAvLyByZXNldExhYmVscworCit9IC8vIFRlc3ROb2RlRGVjb3JhdG9yMUltcGwKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS90ZXN0cy91dGlsL2RlY29yYXRvcnMvaW1wbC9UZXN0U2NlbmFyaW9HcmFwaERlY29yYXRvcjFJbXBsLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdGVzdHMvdXRpbC9kZWNvcmF0b3JzL2ltcGwvVGVzdFNjZW5hcmlvR3JhcGhEZWNvcmF0b3IxSW1wbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZmYThjODUKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdGVzdHMvdXRpbC9kZWNvcmF0b3JzL2ltcGwvVGVzdFNjZW5hcmlvR3JhcGhEZWNvcmF0b3IxSW1wbC5qYXZhCkBAIC0wLDAgKzEsNDQxIEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC5kZWNvcmF0b3JzLmltcGw7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkludGVybmFsRU9iamVjdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuaW1wbC5FTm90aWZpY2F0aW9uSW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUudXRpbC5FY29yZVV0aWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkR5bmFtaWNMYWJlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguTGFiZWxWYWx1ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuU1RFTVRpbWU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLmltcGwuR3JhcGhEZWNvcmF0b3JJbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC5UZXN0VXRpbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwuZGVjb3JhdG9ycy5EZWNvcmF0b3JzUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwuZGVjb3JhdG9ycy5UZXN0U2NlbmFyaW9HcmFwaERlY29yYXRvcjE7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsLmxhYmVscy5UZXN0RHluYW1pY0xhYmVsMTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwubGFiZWxzLlRlc3RJbnRlZ2VyTGFiZWxWYWx1ZTsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiBBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+VGVzdCBTY2VuYXJpbyBHcmFwaCBEZWNvcmF0b3IxPC9iPjwvZW0+Jy4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogPHA+CisgKiBUaGUgZm9sbG93aW5nIGZlYXR1cmVzIGFyZSBpbXBsZW1lbnRlZDoKKyAqIDx1bD4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwuZGVjb3JhdG9ycy5pbXBsLlRlc3RTY2VuYXJpb0dyYXBoRGVjb3JhdG9yMUltcGwjZ2V0RG91YmxlVmFsdWUgPGVtPkRvdWJsZSBWYWx1ZTwvZW0+fTwvbGk+CisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsLmRlY29yYXRvcnMuaW1wbC5UZXN0U2NlbmFyaW9HcmFwaERlY29yYXRvcjFJbXBsI2dldEludFZhbHVlIDxlbT5JbnQgVmFsdWU8L2VtPn08L2xpPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC5kZWNvcmF0b3JzLmltcGwuVGVzdFNjZW5hcmlvR3JhcGhEZWNvcmF0b3IxSW1wbCNnZXRTdHJpbmdWYWx1ZSA8ZW0+U3RyaW5nIFZhbHVlPC9lbT59PC9saT4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwuZGVjb3JhdG9ycy5pbXBsLlRlc3RTY2VuYXJpb0dyYXBoRGVjb3JhdG9yMUltcGwjZ2V0U1RFTVRpbWVWYWx1ZSA8ZW0+U1RFTSBUaW1lIFZhbHVlPC9lbT59PC9saT4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwuZGVjb3JhdG9ycy5pbXBsLlRlc3RTY2VuYXJpb0dyYXBoRGVjb3JhdG9yMUltcGwjaXNCb29sZWFuVmFsdWUgPGVtPkJvb2xlYW4gVmFsdWU8L2VtPn08L2xpPgorICogPC91bD4KKyAqIDwvcD4KKyAqCisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBUZXN0U2NlbmFyaW9HcmFwaERlY29yYXRvcjFJbXBsIGV4dGVuZHMgR3JhcGhEZWNvcmF0b3JJbXBsCisJCWltcGxlbWVudHMgVGVzdFNjZW5hcmlvR3JhcGhEZWNvcmF0b3IxIHsKKwkvKioKKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0RG91YmxlVmFsdWUoKSA8ZW0+RG91YmxlIFZhbHVlPC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNnZXREb3VibGVWYWx1ZSgpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBkb3VibGUgRE9VQkxFX1ZBTFVFX0VERUZBVUxUID0gMC4wOworCS8qKgorCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldERvdWJsZVZhbHVlKCkgPGVtPkRvdWJsZSBWYWx1ZTwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZ2V0RG91YmxlVmFsdWUoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBkb3VibGUgZG91YmxlVmFsdWUgPSBET1VCTEVfVkFMVUVfRURFRkFVTFQ7CisJLyoqCisJICogVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldEludFZhbHVlKCkgPGVtPkludCBWYWx1ZTwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZ2V0SW50VmFsdWUoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgaW50IElOVF9WQUxVRV9FREVGQVVMVCA9IDA7CisJLyoqCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0SW50VmFsdWUoKSA8ZW0+SW50IFZhbHVlPC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNnZXRJbnRWYWx1ZSgpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIGludCBpbnRWYWx1ZSA9IElOVF9WQUxVRV9FREVGQVVMVDsKKwkvKioKKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0U3RyaW5nVmFsdWUoKSA8ZW0+U3RyaW5nIFZhbHVlPC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNnZXRTdHJpbmdWYWx1ZSgpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBTdHJpbmcgU1RSSU5HX1ZBTFVFX0VERUZBVUxUID0gbnVsbDsKKwkvKioKKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRTdHJpbmdWYWx1ZSgpIDxlbT5TdHJpbmcgVmFsdWU8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI2dldFN0cmluZ1ZhbHVlKCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgU3RyaW5nIHN0cmluZ1ZhbHVlID0gU1RSSU5HX1ZBTFVFX0VERUZBVUxUOworCS8qKgorCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldFNURU1UaW1lVmFsdWUoKSA8ZW0+U1RFTSBUaW1lIFZhbHVlPC9lbT59JyByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNnZXRTVEVNVGltZVZhbHVlKCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgU1RFTVRpbWUgc1RFTVRpbWVWYWx1ZTsKKworCS8qKgorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSAne0BsaW5rICNpc0Jvb2xlYW5WYWx1ZSgpIDxlbT5Cb29sZWFuIFZhbHVlPC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNpc0Jvb2xlYW5WYWx1ZSgpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBib29sZWFuIEJPT0xFQU5fVkFMVUVfRURFRkFVTFQgPSBmYWxzZTsKKwkvKioKKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNpc0Jvb2xlYW5WYWx1ZSgpIDxlbT5Cb29sZWFuIFZhbHVlPC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNpc0Jvb2xlYW5WYWx1ZSgpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIGJvb2xlYW4gYm9vbGVhblZhbHVlID0gQk9PTEVBTl9WQUxVRV9FREVGQVVMVDsKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgVGVzdFNjZW5hcmlvR3JhcGhEZWNvcmF0b3IxSW1wbCgpIHsKKwkJc3VwZXIoKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIEVDbGFzcyBlU3RhdGljQ2xhc3MoKSB7CisJCXJldHVybiBEZWNvcmF0b3JzUGFja2FnZS5MaXRlcmFscy5URVNUX1NDRU5BUklPX0dSQVBIX0RFQ09SQVRPUjE7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIGRvdWJsZSBnZXREb3VibGVWYWx1ZSgpIHsKKwkJcmV0dXJuIGRvdWJsZVZhbHVlOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIHNldERvdWJsZVZhbHVlKGRvdWJsZSBuZXdEb3VibGVWYWx1ZSkgeworCQlkb3VibGUgb2xkRG91YmxlVmFsdWUgPSBkb3VibGVWYWx1ZTsKKwkJZG91YmxlVmFsdWUgPSBuZXdEb3VibGVWYWx1ZTsKKwkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQorCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgRGVjb3JhdG9yc1BhY2thZ2UuVEVTVF9TQ0VOQVJJT19HUkFQSF9ERUNPUkFUT1IxX19ET1VCTEVfVkFMVUUsIG9sZERvdWJsZVZhbHVlLCBkb3VibGVWYWx1ZSkpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBpbnQgZ2V0SW50VmFsdWUoKSB7CisJCXJldHVybiBpbnRWYWx1ZTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRJbnRWYWx1ZShpbnQgbmV3SW50VmFsdWUpIHsKKwkJaW50IG9sZEludFZhbHVlID0gaW50VmFsdWU7CisJCWludFZhbHVlID0gbmV3SW50VmFsdWU7CisJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkKKwkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIERlY29yYXRvcnNQYWNrYWdlLlRFU1RfU0NFTkFSSU9fR1JBUEhfREVDT1JBVE9SMV9fSU5UX1ZBTFVFLCBvbGRJbnRWYWx1ZSwgaW50VmFsdWUpKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgU3RyaW5nIGdldFN0cmluZ1ZhbHVlKCkgeworCQlyZXR1cm4gc3RyaW5nVmFsdWU7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgc2V0U3RyaW5nVmFsdWUoU3RyaW5nIG5ld1N0cmluZ1ZhbHVlKSB7CisJCVN0cmluZyBvbGRTdHJpbmdWYWx1ZSA9IHN0cmluZ1ZhbHVlOworCQlzdHJpbmdWYWx1ZSA9IG5ld1N0cmluZ1ZhbHVlOworCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpCisJCQllTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBEZWNvcmF0b3JzUGFja2FnZS5URVNUX1NDRU5BUklPX0dSQVBIX0RFQ09SQVRPUjFfX1NUUklOR19WQUxVRSwgb2xkU3RyaW5nVmFsdWUsIHN0cmluZ1ZhbHVlKSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFNURU1UaW1lIGdldFNURU1UaW1lVmFsdWUoKSB7CisJCWlmIChzVEVNVGltZVZhbHVlICE9IG51bGwgJiYgc1RFTVRpbWVWYWx1ZS5lSXNQcm94eSgpKSB7CisJCQlJbnRlcm5hbEVPYmplY3Qgb2xkU1RFTVRpbWVWYWx1ZSA9IChJbnRlcm5hbEVPYmplY3Qpc1RFTVRpbWVWYWx1ZTsKKwkJCXNURU1UaW1lVmFsdWUgPSAoU1RFTVRpbWUpZVJlc29sdmVQcm94eShvbGRTVEVNVGltZVZhbHVlKTsKKwkJCWlmIChzVEVNVGltZVZhbHVlICE9IG9sZFNURU1UaW1lVmFsdWUpIHsKKwkJCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpCisJCQkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5SRVNPTFZFLCBEZWNvcmF0b3JzUGFja2FnZS5URVNUX1NDRU5BUklPX0dSQVBIX0RFQ09SQVRPUjFfX1NURU1fVElNRV9WQUxVRSwgb2xkU1RFTVRpbWVWYWx1ZSwgc1RFTVRpbWVWYWx1ZSkpOworCQkJfQorCQl9CisJCXJldHVybiBzVEVNVGltZVZhbHVlOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBTVEVNVGltZSBiYXNpY0dldFNURU1UaW1lVmFsdWUoKSB7CisJCXJldHVybiBzVEVNVGltZVZhbHVlOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIHNldFNURU1UaW1lVmFsdWUoU1RFTVRpbWUgbmV3U1RFTVRpbWVWYWx1ZSkgeworCQlTVEVNVGltZSBvbGRTVEVNVGltZVZhbHVlID0gc1RFTVRpbWVWYWx1ZTsKKwkJc1RFTVRpbWVWYWx1ZSA9IG5ld1NURU1UaW1lVmFsdWU7CisJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkKKwkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIERlY29yYXRvcnNQYWNrYWdlLlRFU1RfU0NFTkFSSU9fR1JBUEhfREVDT1JBVE9SMV9fU1RFTV9USU1FX1ZBTFVFLCBvbGRTVEVNVGltZVZhbHVlLCBzVEVNVGltZVZhbHVlKSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIGJvb2xlYW4gaXNCb29sZWFuVmFsdWUoKSB7CisJCXJldHVybiBib29sZWFuVmFsdWU7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgc2V0Qm9vbGVhblZhbHVlKGJvb2xlYW4gbmV3Qm9vbGVhblZhbHVlKSB7CisJCWJvb2xlYW4gb2xkQm9vbGVhblZhbHVlID0gYm9vbGVhblZhbHVlOworCQlib29sZWFuVmFsdWUgPSBuZXdCb29sZWFuVmFsdWU7CisJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkKKwkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIERlY29yYXRvcnNQYWNrYWdlLlRFU1RfU0NFTkFSSU9fR1JBUEhfREVDT1JBVE9SMV9fQk9PTEVBTl9WQUxVRSwgb2xkQm9vbGVhblZhbHVlLCBib29sZWFuVmFsdWUpKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgT2JqZWN0IGVHZXQoaW50IGZlYXR1cmVJRCwgYm9vbGVhbiByZXNvbHZlLCBib29sZWFuIGNvcmVUeXBlKSB7CisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7CisJCQljYXNlIERlY29yYXRvcnNQYWNrYWdlLlRFU1RfU0NFTkFSSU9fR1JBUEhfREVDT1JBVE9SMV9fRE9VQkxFX1ZBTFVFOgorCQkJCXJldHVybiBuZXcgRG91YmxlKGdldERvdWJsZVZhbHVlKCkpOworCQkJY2FzZSBEZWNvcmF0b3JzUGFja2FnZS5URVNUX1NDRU5BUklPX0dSQVBIX0RFQ09SQVRPUjFfX0lOVF9WQUxVRToKKwkJCQlyZXR1cm4gbmV3IEludGVnZXIoZ2V0SW50VmFsdWUoKSk7CisJCQljYXNlIERlY29yYXRvcnNQYWNrYWdlLlRFU1RfU0NFTkFSSU9fR1JBUEhfREVDT1JBVE9SMV9fU1RSSU5HX1ZBTFVFOgorCQkJCXJldHVybiBnZXRTdHJpbmdWYWx1ZSgpOworCQkJY2FzZSBEZWNvcmF0b3JzUGFja2FnZS5URVNUX1NDRU5BUklPX0dSQVBIX0RFQ09SQVRPUjFfX1NURU1fVElNRV9WQUxVRToKKwkJCQlpZiAocmVzb2x2ZSkgcmV0dXJuIGdldFNURU1UaW1lVmFsdWUoKTsKKwkJCQlyZXR1cm4gYmFzaWNHZXRTVEVNVGltZVZhbHVlKCk7CisJCQljYXNlIERlY29yYXRvcnNQYWNrYWdlLlRFU1RfU0NFTkFSSU9fR1JBUEhfREVDT1JBVE9SMV9fQk9PTEVBTl9WQUxVRToKKwkJCQlyZXR1cm4gaXNCb29sZWFuVmFsdWUoKSA/IEJvb2xlYW4uVFJVRSA6IEJvb2xlYW4uRkFMU0U7CisJCX0KKwkJcmV0dXJuIHN1cGVyLmVHZXQoZmVhdHVyZUlELCByZXNvbHZlLCBjb3JlVHlwZSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgZVNldChpbnQgZmVhdHVyZUlELCBPYmplY3QgbmV3VmFsdWUpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJCWNhc2UgRGVjb3JhdG9yc1BhY2thZ2UuVEVTVF9TQ0VOQVJJT19HUkFQSF9ERUNPUkFUT1IxX19ET1VCTEVfVkFMVUU6CisJCQkJc2V0RG91YmxlVmFsdWUoKChEb3VibGUpbmV3VmFsdWUpLmRvdWJsZVZhbHVlKCkpOworCQkJCXJldHVybjsKKwkJCWNhc2UgRGVjb3JhdG9yc1BhY2thZ2UuVEVTVF9TQ0VOQVJJT19HUkFQSF9ERUNPUkFUT1IxX19JTlRfVkFMVUU6CisJCQkJc2V0SW50VmFsdWUoKChJbnRlZ2VyKW5ld1ZhbHVlKS5pbnRWYWx1ZSgpKTsKKwkJCQlyZXR1cm47CisJCQljYXNlIERlY29yYXRvcnNQYWNrYWdlLlRFU1RfU0NFTkFSSU9fR1JBUEhfREVDT1JBVE9SMV9fU1RSSU5HX1ZBTFVFOgorCQkJCXNldFN0cmluZ1ZhbHVlKChTdHJpbmcpbmV3VmFsdWUpOworCQkJCXJldHVybjsKKwkJCWNhc2UgRGVjb3JhdG9yc1BhY2thZ2UuVEVTVF9TQ0VOQVJJT19HUkFQSF9ERUNPUkFUT1IxX19TVEVNX1RJTUVfVkFMVUU6CisJCQkJc2V0U1RFTVRpbWVWYWx1ZSgoU1RFTVRpbWUpbmV3VmFsdWUpOworCQkJCXJldHVybjsKKwkJCWNhc2UgRGVjb3JhdG9yc1BhY2thZ2UuVEVTVF9TQ0VOQVJJT19HUkFQSF9ERUNPUkFUT1IxX19CT09MRUFOX1ZBTFVFOgorCQkJCXNldEJvb2xlYW5WYWx1ZSgoKEJvb2xlYW4pbmV3VmFsdWUpLmJvb2xlYW5WYWx1ZSgpKTsKKwkJCQlyZXR1cm47CisJCX0KKwkJc3VwZXIuZVNldChmZWF0dXJlSUQsIG5ld1ZhbHVlKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBlVW5zZXQoaW50IGZlYXR1cmVJRCkgeworCQlzd2l0Y2ggKGZlYXR1cmVJRCkgeworCQkJY2FzZSBEZWNvcmF0b3JzUGFja2FnZS5URVNUX1NDRU5BUklPX0dSQVBIX0RFQ09SQVRPUjFfX0RPVUJMRV9WQUxVRToKKwkJCQlzZXREb3VibGVWYWx1ZShET1VCTEVfVkFMVUVfRURFRkFVTFQpOworCQkJCXJldHVybjsKKwkJCWNhc2UgRGVjb3JhdG9yc1BhY2thZ2UuVEVTVF9TQ0VOQVJJT19HUkFQSF9ERUNPUkFUT1IxX19JTlRfVkFMVUU6CisJCQkJc2V0SW50VmFsdWUoSU5UX1ZBTFVFX0VERUZBVUxUKTsKKwkJCQlyZXR1cm47CisJCQljYXNlIERlY29yYXRvcnNQYWNrYWdlLlRFU1RfU0NFTkFSSU9fR1JBUEhfREVDT1JBVE9SMV9fU1RSSU5HX1ZBTFVFOgorCQkJCXNldFN0cmluZ1ZhbHVlKFNUUklOR19WQUxVRV9FREVGQVVMVCk7CisJCQkJcmV0dXJuOworCQkJY2FzZSBEZWNvcmF0b3JzUGFja2FnZS5URVNUX1NDRU5BUklPX0dSQVBIX0RFQ09SQVRPUjFfX1NURU1fVElNRV9WQUxVRToKKwkJCQlzZXRTVEVNVGltZVZhbHVlKChTVEVNVGltZSludWxsKTsKKwkJCQlyZXR1cm47CisJCQljYXNlIERlY29yYXRvcnNQYWNrYWdlLlRFU1RfU0NFTkFSSU9fR1JBUEhfREVDT1JBVE9SMV9fQk9PTEVBTl9WQUxVRToKKwkJCQlzZXRCb29sZWFuVmFsdWUoQk9PTEVBTl9WQUxVRV9FREVGQVVMVCk7CisJCQkJcmV0dXJuOworCQl9CisJCXN1cGVyLmVVbnNldChmZWF0dXJlSUQpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBib29sZWFuIGVJc1NldChpbnQgZmVhdHVyZUlEKSB7CisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7CisJCQljYXNlIERlY29yYXRvcnNQYWNrYWdlLlRFU1RfU0NFTkFSSU9fR1JBUEhfREVDT1JBVE9SMV9fRE9VQkxFX1ZBTFVFOgorCQkJCXJldHVybiBkb3VibGVWYWx1ZSAhPSBET1VCTEVfVkFMVUVfRURFRkFVTFQ7CisJCQljYXNlIERlY29yYXRvcnNQYWNrYWdlLlRFU1RfU0NFTkFSSU9fR1JBUEhfREVDT1JBVE9SMV9fSU5UX1ZBTFVFOgorCQkJCXJldHVybiBpbnRWYWx1ZSAhPSBJTlRfVkFMVUVfRURFRkFVTFQ7CisJCQljYXNlIERlY29yYXRvcnNQYWNrYWdlLlRFU1RfU0NFTkFSSU9fR1JBUEhfREVDT1JBVE9SMV9fU1RSSU5HX1ZBTFVFOgorCQkJCXJldHVybiBTVFJJTkdfVkFMVUVfRURFRkFVTFQgPT0gbnVsbCA/IHN0cmluZ1ZhbHVlICE9IG51bGwgOiAhU1RSSU5HX1ZBTFVFX0VERUZBVUxULmVxdWFscyhzdHJpbmdWYWx1ZSk7CisJCQljYXNlIERlY29yYXRvcnNQYWNrYWdlLlRFU1RfU0NFTkFSSU9fR1JBUEhfREVDT1JBVE9SMV9fU1RFTV9USU1FX1ZBTFVFOgorCQkJCXJldHVybiBzVEVNVGltZVZhbHVlICE9IG51bGw7CisJCQljYXNlIERlY29yYXRvcnNQYWNrYWdlLlRFU1RfU0NFTkFSSU9fR1JBUEhfREVDT1JBVE9SMV9fQk9PTEVBTl9WQUxVRToKKwkJCQlyZXR1cm4gYm9vbGVhblZhbHVlICE9IEJPT0xFQU5fVkFMVUVfRURFRkFVTFQ7CisJCX0KKwkJcmV0dXJuIHN1cGVyLmVJc1NldChmZWF0dXJlSUQpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKSB7CisJCWlmIChlSXNQcm94eSgpKSByZXR1cm4gc3VwZXIudG9TdHJpbmcoKTsKKworCQlTdHJpbmdCdWZmZXIgcmVzdWx0ID0gbmV3IFN0cmluZ0J1ZmZlcihzdXBlci50b1N0cmluZygpKTsKKwkJcmVzdWx0LmFwcGVuZCgiIChkb3VibGVWYWx1ZTogIik7IC8vJE5PTi1OTFMtMSQKKwkJcmVzdWx0LmFwcGVuZChkb3VibGVWYWx1ZSk7CisJCXJlc3VsdC5hcHBlbmQoIiwgaW50VmFsdWU6ICIpOyAvLyROT04tTkxTLTEkCisJCXJlc3VsdC5hcHBlbmQoaW50VmFsdWUpOworCQlyZXN1bHQuYXBwZW5kKCIsIHN0cmluZ1ZhbHVlOiAiKTsgLy8kTk9OLU5MUy0xJAorCQlyZXN1bHQuYXBwZW5kKHN0cmluZ1ZhbHVlKTsKKwkJcmVzdWx0LmFwcGVuZCgiLCBib29sZWFuVmFsdWU6ICIpOyAvLyROT04tTkxTLTEkCisJCXJlc3VsdC5hcHBlbmQoYm9vbGVhblZhbHVlKTsKKwkJcmVzdWx0LmFwcGVuZCgnKScpOworCQlyZXR1cm4gcmVzdWx0LnRvU3RyaW5nKCk7CisJfQorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuaW1wbC5EZWNvcmF0b3JJbXBsI2RlY29yYXRlR3JhcGgob3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkdyYXBoKQorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBib29sZWFuIGRlY29yYXRlR3JhcGgoU1RFTVRpbWUgdGltZSkgeworCQlpZiAoaXNHcmFwaERlY29yYXRlZCgpKSByZXR1cm4gdHJ1ZTsKKwkJZmluYWwgRHluYW1pY0xhYmVsIGR5bmFtaWNMYWJlbCA9IFRlc3RVdGlsLmNyZWF0ZUR5bmFtaWNMYWJlbChnZXRHcmFwaCgpCisJCQkJLmdldFVSSSgpKTsKKwkJZHluYW1pY0xhYmVsLnNldFVSSShMQUJFTF9VUkkpOworCQlnZXRMYWJlbHNUb1VwZGF0ZSgpLmFkZChkeW5hbWljTGFiZWwpOworCQlnZXRHcmFwaCgpLnB1dEdyYXBoTGFiZWwoZHluYW1pY0xhYmVsKTsKKy8vCQlnZXRHcmFwaCgpLmFkZER5bmFtaWNMYWJlbChkeW5hbWljTGFiZWwpOworCQkKKwkJc2V0R3JhcGhEZWNvcmF0ZWQodHJ1ZSk7CisJCXJldHVybiB0cnVlOworCX0gLy8gZGVjb3JhdGVHcmFwaAorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuaW1wbC5EZWNvcmF0b3JJbXBsI3VwZGF0ZUxhYmVscyhHcmFwaCwgU1RFTVRpbWUsIGxvbmcpCisJICogICAgICBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuU1RFTVRpbWUpCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgdXBkYXRlTGFiZWxzKFNURU1UaW1lIHRpbWUsIGZpbmFsIGxvbmcgdGltZURlbHRhLCBpbnQgY3ljbGUpIHsKKwkJZm9yIChmaW5hbCBJdGVyYXRvciBkeW5hbWljTGFiZWxJdGVyID0gZ2V0TGFiZWxzVG9VcGRhdGUoKS5pdGVyYXRvcigpOyBkeW5hbWljTGFiZWxJdGVyCisJCQkJLmhhc05leHQoKTspIHsKKwkJCWZpbmFsIFRlc3REeW5hbWljTGFiZWwxIHRlc3RMYWJlbCA9IChUZXN0RHluYW1pY0xhYmVsMSkgZHluYW1pY0xhYmVsSXRlcgorCQkJCQkubmV4dCgpOworCQkJdGVzdExhYmVsLmluY3JlbWVudCgpOworCQl9IC8vIGZvcgorCX0gLy8gdXBkYXRlTGFiZWxzCisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5pbXBsLkRlY29yYXRvckltcGwjcmVzZXRMYWJlbHMob3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkdyYXBoKQorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIHJlc2V0TGFiZWxzKCkgeworCQlmaW5hbCBUZXN0RHluYW1pY0xhYmVsMSBURVNUX0xBQkVMID0gVGVzdFV0aWwKKwkJCQkuY3JlYXRlRHluYW1pY0xhYmVsKFRlc3RVdGlsLmNyZWF0ZU5leHRJZGVudGlmaWFibGVUb0xhYmVsVVJJKCkpOworCQlmaW5hbCBUZXN0SW50ZWdlckxhYmVsVmFsdWUgUkVTRVRfVkFMVUUgPSAoVGVzdEludGVnZXJMYWJlbFZhbHVlKSBURVNUX0xBQkVMCisJCQkJLmdldEN1cnJlbnRWYWx1ZSgpOworCQlmb3IgKEl0ZXJhdG9yIGxhYmVsSXRlciA9IGdldExhYmVsc1RvVXBkYXRlKCkuaXRlcmF0b3IoKTsgbGFiZWxJdGVyCisJCQkJLmhhc05leHQoKTspIHsKKwkJCWZpbmFsIFRlc3REeW5hbWljTGFiZWwxIGR5bmFtaWNMYWJlbCA9IChUZXN0RHluYW1pY0xhYmVsMSkgbGFiZWxJdGVyCisJCQkJCS5uZXh0KCk7CisJCQlkeW5hbWljTGFiZWwuc2V0Q3VycmVudFZhbHVlKChMYWJlbFZhbHVlKUVjb3JlVXRpbAorCQkJCQkuY29weShSRVNFVF9WQUxVRSkpOworCQl9CisJfSAvLyByZXNldExhYmVscworCit9IC8vIFRlc3RTY2VuYXJpb0dyYXBoRGVjb3JhdG9yMUltcGwKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS90ZXN0cy91dGlsL2RlY29yYXRvcnMvcHJlc2VudGF0aW9uL0RlY29yYXRvcnNBY3Rpb25CYXJDb250cmlidXRvci5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3Rlc3RzL3V0aWwvZGVjb3JhdG9ycy9wcmVzZW50YXRpb24vRGVjb3JhdG9yc0FjdGlvbkJhckNvbnRyaWJ1dG9yLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmU0YTdkNwotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS90ZXN0cy91dGlsL2RlY29yYXRvcnMvcHJlc2VudGF0aW9uL0RlY29yYXRvcnNBY3Rpb25CYXJDb250cmlidXRvci5qYXZhCkBAIC0wLDAgKzEsNDMwIEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC5kZWNvcmF0b3JzLnByZXNlbnRhdGlvbjsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OworaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51aS52aWV3ZXIuSVZpZXdlclByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LmRvbWFpbi5FZGl0aW5nRG9tYWluOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LmRvbWFpbi5JRWRpdGluZ0RvbWFpblByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmFjdGlvbi5Db250cm9sQWN0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmFjdGlvbi5DcmVhdGVDaGlsZEFjdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5hY3Rpb24uQ3JlYXRlU2libGluZ0FjdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5hY3Rpb24uRWRpdGluZ0RvbWFpbkFjdGlvbkJhckNvbnRyaWJ1dG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmFjdGlvbi5Mb2FkUmVzb3VyY2VBY3Rpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkuYWN0aW9uLlZhbGlkYXRlQWN0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5BY3Rpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLkFjdGlvbkNvbnRyaWJ1dGlvbkl0ZW07CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklBY3Rpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklDb250cmlidXRpb25JdGVtOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JQ29udHJpYnV0aW9uTWFuYWdlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSU1lbnVMaXN0ZW5lcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSU1lbnVNYW5hZ2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JVG9vbEJhck1hbmFnZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLk1lbnVNYW5hZ2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5TZXBhcmF0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLlN1YkNvbnRyaWJ1dGlvbkl0ZW07CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb25Qcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTdHJ1Y3R1cmVkU2VsZWN0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuU2VsZWN0aW9uQ2hhbmdlZEV2ZW50OworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuVmlld2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC5kZWNvcmF0b3JzLnByb3ZpZGVyLlRlc3R1dGlsaXR5RWRpdFBsdWdpbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5JRWRpdG9yUGFydDsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5QYXJ0SW5pdEV4Y2VwdGlvbjsKKworLyoqCisgKiBUaGlzIGlzIHRoZSBhY3Rpb24gYmFyIGNvbnRyaWJ1dG9yIGZvciB0aGUgRGVjb3JhdG9ycyBtb2RlbCBlZGl0b3IuCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBEZWNvcmF0b3JzQWN0aW9uQmFyQ29udHJpYnV0b3IKKwlleHRlbmRzIEVkaXRpbmdEb21haW5BY3Rpb25CYXJDb250cmlidXRvcgorCWltcGxlbWVudHMgSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lciB7CisJLyoqCisJICogVGhpcyBrZWVwcyB0cmFjayBvZiB0aGUgYWN0aXZlIGVkaXRvci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgSUVkaXRvclBhcnQgYWN0aXZlRWRpdG9yUGFydDsKKworCS8qKgorCSAqIFRoaXMga2VlcHMgdHJhY2sgb2YgdGhlIGN1cnJlbnQgc2VsZWN0aW9uIHByb3ZpZGVyLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBJU2VsZWN0aW9uUHJvdmlkZXIgc2VsZWN0aW9uUHJvdmlkZXI7CisKKwkvKioKKwkgKiBUaGlzIGFjdGlvbiBvcGVucyB0aGUgUHJvcGVydGllcyB2aWV3LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBJQWN0aW9uIHNob3dQcm9wZXJ0aWVzVmlld0FjdGlvbiA9CisJCW5ldyBBY3Rpb24oVGVzdHV0aWxpdHlFZGl0UGx1Z2luLklOU1RBTkNFLmdldFN0cmluZygiX1VJX1Nob3dQcm9wZXJ0aWVzVmlld19tZW51X2l0ZW0iKSkgLy8kTk9OLU5MUy0xJAorCQl7CisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyB2b2lkIHJ1bigpIHsKKwkJCQl0cnkgeworCQkJCQlnZXRQYWdlKCkuc2hvd1ZpZXcoIm9yZy5lY2xpcHNlLnVpLnZpZXdzLlByb3BlcnR5U2hlZXQiKTsgLy8kTk9OLU5MUy0xJAorCQkJCX0KKwkJCQljYXRjaCAoUGFydEluaXRFeGNlcHRpb24gZXhjZXB0aW9uKSB7CisJCQkJCVRlc3R1dGlsaXR5RWRpdFBsdWdpbi5JTlNUQU5DRS5sb2coZXhjZXB0aW9uKTsKKwkJCQl9CisJCQl9CisJCX07CisKKwkvKioKKwkgKiBUaGlzIGFjdGlvbiByZWZyZXNoZXMgdGhlIHZpZXdlciBvZiB0aGUgY3VycmVudCBlZGl0b3IgaWYgdGhlIGVkaXRvcgorCSAqIGltcGxlbWVudHMge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5jb21tb24udWkudmlld2VyLklWaWV3ZXJQcm92aWRlcn0uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIElBY3Rpb24gcmVmcmVzaFZpZXdlckFjdGlvbiA9CisJCW5ldyBBY3Rpb24oVGVzdHV0aWxpdHlFZGl0UGx1Z2luLklOU1RBTkNFLmdldFN0cmluZygiX1VJX1JlZnJlc2hWaWV3ZXJfbWVudV9pdGVtIikpIC8vJE5PTi1OTFMtMSQKKwkJeworCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgYm9vbGVhbiBpc0VuYWJsZWQoKSB7CisJCQkJcmV0dXJuIGFjdGl2ZUVkaXRvclBhcnQgaW5zdGFuY2VvZiBJVmlld2VyUHJvdmlkZXI7CisJCQl9CisKKwkJCUBPdmVycmlkZQorCQkJcHVibGljIHZvaWQgcnVuKCkgeworCQkJCWlmIChhY3RpdmVFZGl0b3JQYXJ0IGluc3RhbmNlb2YgSVZpZXdlclByb3ZpZGVyKSB7CisJCQkJCVZpZXdlciB2aWV3ZXIgPSAoKElWaWV3ZXJQcm92aWRlcilhY3RpdmVFZGl0b3JQYXJ0KS5nZXRWaWV3ZXIoKTsKKwkJCQkJaWYgKHZpZXdlciAhPSBudWxsKSB7CisJCQkJCQl2aWV3ZXIucmVmcmVzaCgpOworCQkJCQl9CisJCQkJfQorCQkJfQorCQl9OworCisJLyoqCisJICogVGhpcyB3aWxsIGNvbnRhaW4gb25lIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5hY3Rpb24uQ3JlYXRlQ2hpbGRBY3Rpb259IGNvcnJlc3BvbmRpbmcgdG8gZWFjaCBkZXNjcmlwdG9yCisJICogZ2VuZXJhdGVkIGZvciB0aGUgY3VycmVudCBzZWxlY3Rpb24gYnkgdGhlIGl0ZW0gcHJvdmlkZXIuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIENvbGxlY3Rpb248SUFjdGlvbj4gY3JlYXRlQ2hpbGRBY3Rpb25zOworCisJLyoqCisJICogVGhpcyBpcyB0aGUgbWVudSBtYW5hZ2VyIGludG8gd2hpY2ggbWVudSBjb250cmlidXRpb24gaXRlbXMgc2hvdWxkIGJlIGFkZGVkIGZvciBDcmVhdGVDaGlsZCBhY3Rpb25zLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBJTWVudU1hbmFnZXIgY3JlYXRlQ2hpbGRNZW51TWFuYWdlcjsKKworCS8qKgorCSAqIFRoaXMgd2lsbCBjb250YWluIG9uZSB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkuYWN0aW9uLkNyZWF0ZVNpYmxpbmdBY3Rpb259IGNvcnJlc3BvbmRpbmcgdG8gZWFjaCBkZXNjcmlwdG9yCisJICogZ2VuZXJhdGVkIGZvciB0aGUgY3VycmVudCBzZWxlY3Rpb24gYnkgdGhlIGl0ZW0gcHJvdmlkZXIuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIENvbGxlY3Rpb248SUFjdGlvbj4gY3JlYXRlU2libGluZ0FjdGlvbnM7CisKKwkvKioKKwkgKiBUaGlzIGlzIHRoZSBtZW51IG1hbmFnZXIgaW50byB3aGljaCBtZW51IGNvbnRyaWJ1dGlvbiBpdGVtcyBzaG91bGQgYmUgYWRkZWQgZm9yIENyZWF0ZVNpYmxpbmcgYWN0aW9ucy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgSU1lbnVNYW5hZ2VyIGNyZWF0ZVNpYmxpbmdNZW51TWFuYWdlcjsKKworCS8qKgorCSAqIFRoaXMgY3JlYXRlcyBhbiBpbnN0YW5jZSBvZiB0aGUgY29udHJpYnV0b3IuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIERlY29yYXRvcnNBY3Rpb25CYXJDb250cmlidXRvcigpIHsKKwkJc3VwZXIoQURESVRJT05TX0xBU1RfU1RZTEUpOworCQlsb2FkUmVzb3VyY2VBY3Rpb24gPSBuZXcgTG9hZFJlc291cmNlQWN0aW9uKCk7CisJCXZhbGlkYXRlQWN0aW9uID0gbmV3IFZhbGlkYXRlQWN0aW9uKCk7CisJCWNvbnRyb2xBY3Rpb24gPSBuZXcgQ29udHJvbEFjdGlvbigpOworCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyBTZXBhcmF0b3JzIGZvciBlZGl0b3IgYWRkaXRpb25zIHRvIHRoZSB0b29sIGJhci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBjb250cmlidXRlVG9Ub29sQmFyKElUb29sQmFyTWFuYWdlciB0b29sQmFyTWFuYWdlcikgeworCQl0b29sQmFyTWFuYWdlci5hZGQobmV3IFNlcGFyYXRvcigiZGVjb3JhdG9ycy1zZXR0aW5ncyIpKTsgLy8kTk9OLU5MUy0xJAorCQl0b29sQmFyTWFuYWdlci5hZGQobmV3IFNlcGFyYXRvcigiZGVjb3JhdG9ycy1hZGRpdGlvbnMiKSk7IC8vJE5PTi1OTFMtMSQKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFkZHMgdG8gdGhlIG1lbnUgYmFyIGEgbWVudSBhbmQgc29tZSBzZXBhcmF0b3JzIGZvciBlZGl0b3IgYWRkaXRpb25zLAorCSAqIGFzIHdlbGwgYXMgdGhlIHN1Yi1tZW51cyBmb3Igb2JqZWN0IGNyZWF0aW9uIGl0ZW1zLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGNvbnRyaWJ1dGVUb01lbnUoSU1lbnVNYW5hZ2VyIG1lbnVNYW5hZ2VyKSB7CisJCXN1cGVyLmNvbnRyaWJ1dGVUb01lbnUobWVudU1hbmFnZXIpOworCisJCUlNZW51TWFuYWdlciBzdWJtZW51TWFuYWdlciA9IG5ldyBNZW51TWFuYWdlcihUZXN0dXRpbGl0eUVkaXRQbHVnaW4uSU5TVEFOQ0UuZ2V0U3RyaW5nKCJfVUlfRGVjb3JhdG9yc0VkaXRvcl9tZW51IiksICJvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwuZGVjb3JhdG9yc01lbnVJRCIpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKKwkJbWVudU1hbmFnZXIuaW5zZXJ0QWZ0ZXIoImFkZGl0aW9ucyIsIHN1Ym1lbnVNYW5hZ2VyKTsgLy8kTk9OLU5MUy0xJAorCQlzdWJtZW51TWFuYWdlci5hZGQobmV3IFNlcGFyYXRvcigic2V0dGluZ3MiKSk7IC8vJE5PTi1OTFMtMSQKKwkJc3VibWVudU1hbmFnZXIuYWRkKG5ldyBTZXBhcmF0b3IoImFjdGlvbnMiKSk7IC8vJE5PTi1OTFMtMSQKKwkJc3VibWVudU1hbmFnZXIuYWRkKG5ldyBTZXBhcmF0b3IoImFkZGl0aW9ucyIpKTsgLy8kTk9OLU5MUy0xJAorCQlzdWJtZW51TWFuYWdlci5hZGQobmV3IFNlcGFyYXRvcigiYWRkaXRpb25zLWVuZCIpKTsgLy8kTk9OLU5MUy0xJAorCisJCS8vIFByZXBhcmUgZm9yIENyZWF0ZUNoaWxkIGl0ZW0gYWRkaXRpb24gb3IgcmVtb3ZhbC4KKwkJLy8KKwkJY3JlYXRlQ2hpbGRNZW51TWFuYWdlciA9IG5ldyBNZW51TWFuYWdlcihUZXN0dXRpbGl0eUVkaXRQbHVnaW4uSU5TVEFOQ0UuZ2V0U3RyaW5nKCJfVUlfQ3JlYXRlQ2hpbGRfbWVudV9pdGVtIikpOyAvLyROT04tTkxTLTEkCisJCXN1Ym1lbnVNYW5hZ2VyLmluc2VydEJlZm9yZSgiYWRkaXRpb25zIiwgY3JlYXRlQ2hpbGRNZW51TWFuYWdlcik7IC8vJE5PTi1OTFMtMSQKKworCQkvLyBQcmVwYXJlIGZvciBDcmVhdGVTaWJsaW5nIGl0ZW0gYWRkaXRpb24gb3IgcmVtb3ZhbC4KKwkJLy8KKwkJY3JlYXRlU2libGluZ01lbnVNYW5hZ2VyID0gbmV3IE1lbnVNYW5hZ2VyKFRlc3R1dGlsaXR5RWRpdFBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoIl9VSV9DcmVhdGVTaWJsaW5nX21lbnVfaXRlbSIpKTsgLy8kTk9OLU5MUy0xJAorCQlzdWJtZW51TWFuYWdlci5pbnNlcnRCZWZvcmUoImFkZGl0aW9ucyIsIGNyZWF0ZVNpYmxpbmdNZW51TWFuYWdlcik7IC8vJE5PTi1OTFMtMSQKKworCQkvLyBGb3JjZSBhbiB1cGRhdGUgYmVjYXVzZSBFY2xpcHNlIGhpZGVzIGVtcHR5IG1lbnVzIG5vdy4KKwkJLy8KKwkJc3VibWVudU1hbmFnZXIuYWRkTWVudUxpc3RlbmVyCisJCQkobmV3IElNZW51TGlzdGVuZXIoKSB7CisJCQkJIHB1YmxpYyB2b2lkIG1lbnVBYm91dFRvU2hvdyhJTWVudU1hbmFnZXIgbWVudU1hbmFnZXIpIHsKKwkJCQkJIG1lbnVNYW5hZ2VyLnVwZGF0ZUFsbCh0cnVlKTsKKwkJCQkgfQorCQkJIH0pOworCisJCWFkZEdsb2JhbEFjdGlvbnMoc3VibWVudU1hbmFnZXIpOworCX0KKworCS8qKgorCSAqIFdoZW4gdGhlIGFjdGl2ZSBlZGl0b3IgY2hhbmdlcywgdGhpcyByZW1lbWJlcnMgdGhlIGNoYW5nZSBhbmQgcmVnaXN0ZXJzIHdpdGggaXQgYXMgYSBzZWxlY3Rpb24gcHJvdmlkZXIuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgc2V0QWN0aXZlRWRpdG9yKElFZGl0b3JQYXJ0IHBhcnQpIHsKKwkJc3VwZXIuc2V0QWN0aXZlRWRpdG9yKHBhcnQpOworCQlhY3RpdmVFZGl0b3JQYXJ0ID0gcGFydDsKKworCQkvLyBTd2l0Y2ggdG8gdGhlIG5ldyBzZWxlY3Rpb24gcHJvdmlkZXIuCisJCS8vCisJCWlmIChzZWxlY3Rpb25Qcm92aWRlciAhPSBudWxsKSB7CisJCQlzZWxlY3Rpb25Qcm92aWRlci5yZW1vdmVTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIodGhpcyk7CisJCX0KKwkJaWYgKHBhcnQgPT0gbnVsbCkgeworCQkJc2VsZWN0aW9uUHJvdmlkZXIgPSBudWxsOworCQl9CisJCWVsc2UgeworCQkJc2VsZWN0aW9uUHJvdmlkZXIgPSBwYXJ0LmdldFNpdGUoKS5nZXRTZWxlY3Rpb25Qcm92aWRlcigpOworCQkJc2VsZWN0aW9uUHJvdmlkZXIuYWRkU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyKHRoaXMpOworCisJCQkvLyBGYWtlIGEgc2VsZWN0aW9uIGNoYW5nZWQgZXZlbnQgdG8gdXBkYXRlIHRoZSBtZW51cy4KKwkJCS8vCisJCQlpZiAoc2VsZWN0aW9uUHJvdmlkZXIuZ2V0U2VsZWN0aW9uKCkgIT0gbnVsbCkgeworCQkJCXNlbGVjdGlvbkNoYW5nZWQobmV3IFNlbGVjdGlvbkNoYW5nZWRFdmVudChzZWxlY3Rpb25Qcm92aWRlciwgc2VsZWN0aW9uUHJvdmlkZXIuZ2V0U2VsZWN0aW9uKCkpKTsKKwkJCX0KKwkJfQorCX0KKworCS8qKgorCSAqIFRoaXMgaW1wbGVtZW50cyB7QGxpbmsgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyfSwKKwkgKiBoYW5kbGluZyB7QGxpbmsgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5TZWxlY3Rpb25DaGFuZ2VkRXZlbnR9cyBieSBxdWVyeWluZyBmb3IgdGhlIGNoaWxkcmVuIGFuZCBzaWJsaW5ncworCSAqIHRoYXQgY2FuIGJlIGFkZGVkIHRvIHRoZSBzZWxlY3RlZCBvYmplY3QgYW5kIHVwZGF0aW5nIHRoZSBtZW51cyBhY2NvcmRpbmdseS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZWxlY3Rpb25DaGFuZ2VkKFNlbGVjdGlvbkNoYW5nZWRFdmVudCBldmVudCkgeworCQkvLyBSZW1vdmUgYW55IG1lbnUgaXRlbXMgZm9yIG9sZCBzZWxlY3Rpb24uCisJCS8vCisJCWlmIChjcmVhdGVDaGlsZE1lbnVNYW5hZ2VyICE9IG51bGwpIHsKKwkJCWRlcG9wdWxhdGVNYW5hZ2VyKGNyZWF0ZUNoaWxkTWVudU1hbmFnZXIsIGNyZWF0ZUNoaWxkQWN0aW9ucyk7CisJCX0KKwkJaWYgKGNyZWF0ZVNpYmxpbmdNZW51TWFuYWdlciAhPSBudWxsKSB7CisJCQlkZXBvcHVsYXRlTWFuYWdlcihjcmVhdGVTaWJsaW5nTWVudU1hbmFnZXIsIGNyZWF0ZVNpYmxpbmdBY3Rpb25zKTsKKwkJfQorCisJCS8vIFF1ZXJ5IHRoZSBuZXcgc2VsZWN0aW9uIGZvciBhcHByb3ByaWF0ZSBuZXcgY2hpbGQvc2libGluZyBkZXNjcmlwdG9ycworCQkvLworCQlDb2xsZWN0aW9uPD8+IG5ld0NoaWxkRGVzY3JpcHRvcnMgPSBudWxsOworCQlDb2xsZWN0aW9uPD8+IG5ld1NpYmxpbmdEZXNjcmlwdG9ycyA9IG51bGw7CisKKwkJSVNlbGVjdGlvbiBzZWxlY3Rpb24gPSBldmVudC5nZXRTZWxlY3Rpb24oKTsKKwkJaWYgKHNlbGVjdGlvbiBpbnN0YW5jZW9mIElTdHJ1Y3R1cmVkU2VsZWN0aW9uICYmICgoSVN0cnVjdHVyZWRTZWxlY3Rpb24pc2VsZWN0aW9uKS5zaXplKCkgPT0gMSkgeworCQkJT2JqZWN0IG9iamVjdCA9ICgoSVN0cnVjdHVyZWRTZWxlY3Rpb24pc2VsZWN0aW9uKS5nZXRGaXJzdEVsZW1lbnQoKTsKKworCQkJRWRpdGluZ0RvbWFpbiBkb21haW4gPSAoKElFZGl0aW5nRG9tYWluUHJvdmlkZXIpYWN0aXZlRWRpdG9yUGFydCkuZ2V0RWRpdGluZ0RvbWFpbigpOworCisJCQluZXdDaGlsZERlc2NyaXB0b3JzID0gZG9tYWluLmdldE5ld0NoaWxkRGVzY3JpcHRvcnMob2JqZWN0LCBudWxsKTsKKwkJCW5ld1NpYmxpbmdEZXNjcmlwdG9ycyA9IGRvbWFpbi5nZXROZXdDaGlsZERlc2NyaXB0b3JzKG51bGwsIG9iamVjdCk7CisJCX0KKworCQkvLyBHZW5lcmF0ZSBhY3Rpb25zIGZvciBzZWxlY3Rpb247IHBvcHVsYXRlIGFuZCByZWRyYXcgdGhlIG1lbnVzLgorCQkvLworCQljcmVhdGVDaGlsZEFjdGlvbnMgPSBnZW5lcmF0ZUNyZWF0ZUNoaWxkQWN0aW9ucyhuZXdDaGlsZERlc2NyaXB0b3JzLCBzZWxlY3Rpb24pOworCQljcmVhdGVTaWJsaW5nQWN0aW9ucyA9IGdlbmVyYXRlQ3JlYXRlU2libGluZ0FjdGlvbnMobmV3U2libGluZ0Rlc2NyaXB0b3JzLCBzZWxlY3Rpb24pOworCisJCWlmIChjcmVhdGVDaGlsZE1lbnVNYW5hZ2VyICE9IG51bGwpIHsKKwkJCXBvcHVsYXRlTWFuYWdlcihjcmVhdGVDaGlsZE1lbnVNYW5hZ2VyLCBjcmVhdGVDaGlsZEFjdGlvbnMsIG51bGwpOworCQkJY3JlYXRlQ2hpbGRNZW51TWFuYWdlci51cGRhdGUodHJ1ZSk7CisJCX0KKwkJaWYgKGNyZWF0ZVNpYmxpbmdNZW51TWFuYWdlciAhPSBudWxsKSB7CisJCQlwb3B1bGF0ZU1hbmFnZXIoY3JlYXRlU2libGluZ01lbnVNYW5hZ2VyLCBjcmVhdGVTaWJsaW5nQWN0aW9ucywgbnVsbCk7CisJCQljcmVhdGVTaWJsaW5nTWVudU1hbmFnZXIudXBkYXRlKHRydWUpOworCQl9CisJfQorCisJLyoqCisJICogVGhpcyBnZW5lcmF0ZXMgYSB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkuYWN0aW9uLkNyZWF0ZUNoaWxkQWN0aW9ufSBmb3IgZWFjaCBvYmplY3QgaW4gPGNvZGU+ZGVzY3JpcHRvcnM8L2NvZGU+LAorCSAqIGFuZCByZXR1cm5zIHRoZSBjb2xsZWN0aW9uIG9mIHRoZXNlIGFjdGlvbnMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIENvbGxlY3Rpb248SUFjdGlvbj4gZ2VuZXJhdGVDcmVhdGVDaGlsZEFjdGlvbnMoQ29sbGVjdGlvbjw/PiBkZXNjcmlwdG9ycywgSVNlbGVjdGlvbiBzZWxlY3Rpb24pIHsKKwkJQ29sbGVjdGlvbjxJQWN0aW9uPiBhY3Rpb25zID0gbmV3IEFycmF5TGlzdDxJQWN0aW9uPigpOworCQlpZiAoZGVzY3JpcHRvcnMgIT0gbnVsbCkgeworCQkJZm9yIChPYmplY3QgZGVzY3JpcHRvciA6IGRlc2NyaXB0b3JzKSB7CisJCQkJYWN0aW9ucy5hZGQobmV3IENyZWF0ZUNoaWxkQWN0aW9uKGFjdGl2ZUVkaXRvclBhcnQsIHNlbGVjdGlvbiwgZGVzY3JpcHRvcikpOworCQkJfQorCQl9CisJCXJldHVybiBhY3Rpb25zOworCX0KKworCS8qKgorCSAqIFRoaXMgZ2VuZXJhdGVzIGEge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmFjdGlvbi5DcmVhdGVTaWJsaW5nQWN0aW9ufSBmb3IgZWFjaCBvYmplY3QgaW4gPGNvZGU+ZGVzY3JpcHRvcnM8L2NvZGU+LAorCSAqIGFuZCByZXR1cm5zIHRoZSBjb2xsZWN0aW9uIG9mIHRoZXNlIGFjdGlvbnMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIENvbGxlY3Rpb248SUFjdGlvbj4gZ2VuZXJhdGVDcmVhdGVTaWJsaW5nQWN0aW9ucyhDb2xsZWN0aW9uPD8+IGRlc2NyaXB0b3JzLCBJU2VsZWN0aW9uIHNlbGVjdGlvbikgeworCQlDb2xsZWN0aW9uPElBY3Rpb24+IGFjdGlvbnMgPSBuZXcgQXJyYXlMaXN0PElBY3Rpb24+KCk7CisJCWlmIChkZXNjcmlwdG9ycyAhPSBudWxsKSB7CisJCQlmb3IgKE9iamVjdCBkZXNjcmlwdG9yIDogZGVzY3JpcHRvcnMpIHsKKwkJCQlhY3Rpb25zLmFkZChuZXcgQ3JlYXRlU2libGluZ0FjdGlvbihhY3RpdmVFZGl0b3JQYXJ0LCBzZWxlY3Rpb24sIGRlc2NyaXB0b3IpKTsKKwkJCX0KKwkJfQorCQlyZXR1cm4gYWN0aW9uczsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHBvcHVsYXRlcyB0aGUgc3BlY2lmaWVkIDxjb2RlPm1hbmFnZXI8L2NvZGU+IHdpdGgge0BsaW5rIG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5BY3Rpb25Db250cmlidXRpb25JdGVtfXMKKwkgKiBiYXNlZCBvbiB0aGUge0BsaW5rIG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JQWN0aW9ufXMgY29udGFpbmVkIGluIHRoZSA8Y29kZT5hY3Rpb25zPC9jb2RlPiBjb2xsZWN0aW9uLAorCSAqIGJ5IGluc2VydGluZyB0aGVtIGJlZm9yZSB0aGUgc3BlY2lmaWVkIGNvbnRyaWJ1dGlvbiBpdGVtIDxjb2RlPmNvbnRyaWJ1dGlvbklEPC9jb2RlPi4KKwkgKiBJZiA8Y29kZT5jb250cmlidXRpb25JRDwvY29kZT4gaXMgPGNvZGU+bnVsbDwvY29kZT4sIHRoZXkgYXJlIHNpbXBseSBhZGRlZC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBwb3B1bGF0ZU1hbmFnZXIoSUNvbnRyaWJ1dGlvbk1hbmFnZXIgbWFuYWdlciwgQ29sbGVjdGlvbjw/IGV4dGVuZHMgSUFjdGlvbj4gYWN0aW9ucywgU3RyaW5nIGNvbnRyaWJ1dGlvbklEKSB7CisJCWlmIChhY3Rpb25zICE9IG51bGwpIHsKKwkJCWZvciAoSUFjdGlvbiBhY3Rpb24gOiBhY3Rpb25zKSB7CisJCQkJaWYgKGNvbnRyaWJ1dGlvbklEICE9IG51bGwpIHsKKwkJCQkJbWFuYWdlci5pbnNlcnRCZWZvcmUoY29udHJpYnV0aW9uSUQsIGFjdGlvbik7CisJCQkJfQorCQkJCWVsc2UgeworCQkJCQltYW5hZ2VyLmFkZChhY3Rpb24pOworCQkJCX0KKwkJCX0KKwkJfQorCX0KKwkJCisJLyoqCisJICogVGhpcyByZW1vdmVzIGZyb20gdGhlIHNwZWNpZmllZCA8Y29kZT5tYW5hZ2VyPC9jb2RlPiBhbGwge0BsaW5rIG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5BY3Rpb25Db250cmlidXRpb25JdGVtfXMKKwkgKiBiYXNlZCBvbiB0aGUge0BsaW5rIG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JQWN0aW9ufXMgY29udGFpbmVkIGluIHRoZSA8Y29kZT5hY3Rpb25zPC9jb2RlPiBjb2xsZWN0aW9uLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIGRlcG9wdWxhdGVNYW5hZ2VyKElDb250cmlidXRpb25NYW5hZ2VyIG1hbmFnZXIsIENvbGxlY3Rpb248PyBleHRlbmRzIElBY3Rpb24+IGFjdGlvbnMpIHsKKwkJaWYgKGFjdGlvbnMgIT0gbnVsbCkgeworCQkJSUNvbnRyaWJ1dGlvbkl0ZW1bXSBpdGVtcyA9IG1hbmFnZXIuZ2V0SXRlbXMoKTsKKwkJCWZvciAoaW50IGkgPSAwOyBpIDwgaXRlbXMubGVuZ3RoOyBpKyspIHsKKwkJCQkvLyBMb29rIGludG8gU3ViQ29udHJpYnV0aW9uSXRlbXMKKwkJCQkvLworCQkJCUlDb250cmlidXRpb25JdGVtIGNvbnRyaWJ1dGlvbkl0ZW0gPSBpdGVtc1tpXTsKKwkJCQl3aGlsZSAoY29udHJpYnV0aW9uSXRlbSBpbnN0YW5jZW9mIFN1YkNvbnRyaWJ1dGlvbkl0ZW0pIHsKKwkJCQkJY29udHJpYnV0aW9uSXRlbSA9ICgoU3ViQ29udHJpYnV0aW9uSXRlbSljb250cmlidXRpb25JdGVtKS5nZXRJbm5lckl0ZW0oKTsKKwkJCQl9CisKKwkJCQkvLyBEZWxldGUgdGhlIEFjdGlvbkNvbnRyaWJ1dGlvbkl0ZW1zIHdpdGggbWF0Y2hpbmcgYWN0aW9uLgorCQkJCS8vCisJCQkJaWYgKGNvbnRyaWJ1dGlvbkl0ZW0gaW5zdGFuY2VvZiBBY3Rpb25Db250cmlidXRpb25JdGVtKSB7CisJCQkJCUlBY3Rpb24gYWN0aW9uID0gKChBY3Rpb25Db250cmlidXRpb25JdGVtKWNvbnRyaWJ1dGlvbkl0ZW0pLmdldEFjdGlvbigpOworCQkJCQlpZiAoYWN0aW9ucy5jb250YWlucyhhY3Rpb24pKSB7CisJCQkJCQltYW5hZ2VyLnJlbW92ZShjb250cmlidXRpb25JdGVtKTsKKwkJCQkJfQorCQkJCX0KKwkJCX0KKwkJfQorCX0KKworCS8qKgorCSAqIFRoaXMgcG9wdWxhdGVzIHRoZSBwb3AtdXAgbWVudSBiZWZvcmUgaXQgYXBwZWFycy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBtZW51QWJvdXRUb1Nob3coSU1lbnVNYW5hZ2VyIG1lbnVNYW5hZ2VyKSB7CisJCXN1cGVyLm1lbnVBYm91dFRvU2hvdyhtZW51TWFuYWdlcik7CisJCU1lbnVNYW5hZ2VyIHN1Ym1lbnVNYW5hZ2VyID0gbnVsbDsKKworCQlzdWJtZW51TWFuYWdlciA9IG5ldyBNZW51TWFuYWdlcihUZXN0dXRpbGl0eUVkaXRQbHVnaW4uSU5TVEFOQ0UuZ2V0U3RyaW5nKCJfVUlfQ3JlYXRlQ2hpbGRfbWVudV9pdGVtIikpOyAvLyROT04tTkxTLTEkCisJCXBvcHVsYXRlTWFuYWdlcihzdWJtZW51TWFuYWdlciwgY3JlYXRlQ2hpbGRBY3Rpb25zLCBudWxsKTsKKwkJbWVudU1hbmFnZXIuaW5zZXJ0QmVmb3JlKCJlZGl0Iiwgc3VibWVudU1hbmFnZXIpOyAvLyROT04tTkxTLTEkCisKKwkJc3VibWVudU1hbmFnZXIgPSBuZXcgTWVudU1hbmFnZXIoVGVzdHV0aWxpdHlFZGl0UGx1Z2luLklOU1RBTkNFLmdldFN0cmluZygiX1VJX0NyZWF0ZVNpYmxpbmdfbWVudV9pdGVtIikpOyAvLyROT04tTkxTLTEkCisJCXBvcHVsYXRlTWFuYWdlcihzdWJtZW51TWFuYWdlciwgY3JlYXRlU2libGluZ0FjdGlvbnMsIG51bGwpOworCQltZW51TWFuYWdlci5pbnNlcnRCZWZvcmUoImVkaXQiLCBzdWJtZW51TWFuYWdlcik7IC8vJE5PTi1OTFMtMSQKKwl9CisKKwkvKioKKwkgKiBUaGlzIGluc2VydHMgZ2xvYmFsIGFjdGlvbnMgYmVmb3JlIHRoZSAiYWRkaXRpb25zLWVuZCIgc2VwYXJhdG9yLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIGFkZEdsb2JhbEFjdGlvbnMoSU1lbnVNYW5hZ2VyIG1lbnVNYW5hZ2VyKSB7CisJCW1lbnVNYW5hZ2VyLmluc2VydEFmdGVyKCJhZGRpdGlvbnMtZW5kIiwgbmV3IFNlcGFyYXRvcigidWktYWN0aW9ucyIpKTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCisJCW1lbnVNYW5hZ2VyLmluc2VydEFmdGVyKCJ1aS1hY3Rpb25zIiwgc2hvd1Byb3BlcnRpZXNWaWV3QWN0aW9uKTsgLy8kTk9OLU5MUy0xJAorCisJCXJlZnJlc2hWaWV3ZXJBY3Rpb24uc2V0RW5hYmxlZChyZWZyZXNoVmlld2VyQWN0aW9uLmlzRW5hYmxlZCgpKTsJCQorCQltZW51TWFuYWdlci5pbnNlcnRBZnRlcigidWktYWN0aW9ucyIsIHJlZnJlc2hWaWV3ZXJBY3Rpb24pOyAvLyROT04tTkxTLTEkCisKKwkJc3VwZXIuYWRkR2xvYmFsQWN0aW9ucyhtZW51TWFuYWdlcik7CisJfQorCisJLyoqCisJICogVGhpcyBlbnN1cmVzIHRoYXQgYSBkZWxldGUgYWN0aW9uIHdpbGwgY2xlYW4gdXAgYWxsIHJlZmVyZW5jZXMgdG8gZGVsZXRlZCBvYmplY3RzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCBib29sZWFuIHJlbW92ZUFsbFJlZmVyZW5jZXNPbkRlbGV0ZSgpIHsKKwkJcmV0dXJuIHRydWU7CisJfQorCit9CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdGVzdHMvdXRpbC9kZWNvcmF0b3JzL3ByZXNlbnRhdGlvbi9EZWNvcmF0b3JzRWRpdG9yLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdGVzdHMvdXRpbC9kZWNvcmF0b3JzL3ByZXNlbnRhdGlvbi9EZWNvcmF0b3JzRWRpdG9yLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGZmNzBmMgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS90ZXN0cy91dGlsL2RlY29yYXRvcnMvcHJlc2VudGF0aW9uL0RlY29yYXRvcnNFZGl0b3IuamF2YQpAQCAtMCwwICsxLDE1MDQgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsLmRlY29yYXRvcnMucHJlc2VudGF0aW9uOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247CitpbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbTsKK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OworaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOworaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uczsKK2ltcG9ydCBqYXZhLnV0aWwuRXZlbnRPYmplY3Q7CitpbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7CitpbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOworaW1wb3J0IGphdmEudXRpbC5MaW5rZWRIYXNoTWFwOworaW1wb3J0IGphdmEudXRpbC5MaXN0OworaW1wb3J0IGphdmEudXRpbC5NYXA7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JRmlsZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JTWFya2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklSZXNvdXJjZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUmVzb3VyY2VDaGFuZ2VFdmVudDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUmVzb3VyY2VDaGFuZ2VMaXN0ZW5lcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUmVzb3VyY2VEZWx0YTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUmVzb3VyY2VEZWx0YVZpc2l0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuUmVzb3VyY2VzUGx1Z2luOworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5Db3JlRXhjZXB0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUGF0aDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVByb2dyZXNzTW9uaXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuTnVsbFByb2dyZXNzTW9uaXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLmNvbW1hbmQuQmFzaWNDb21tYW5kU3RhY2s7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5jb21tYW5kLkNvbW1hbmQ7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5jb21tYW5kLkNvbW1hbmRTdGFjazsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLmNvbW1hbmQuQ29tbWFuZFN0YWNrTGlzdGVuZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udWkuTWFya2VySGVscGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udWkuZWRpdG9yLlByb2JsZW1FZGl0b3JQYXJ0OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udWkudmlld2VyLklWaWV3ZXJQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuQmFzaWNEaWFnbm9zdGljOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5EaWFnbm9zdGljOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5VUkk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3Q7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVWYWxpZGF0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnByb3ZpZGVyLkVjb3JlSXRlbVByb3ZpZGVyQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnJlc291cmNlLlJlc291cmNlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5yZXNvdXJjZS5SZXNvdXJjZVNldDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUudXRpbC5FQ29udGVudEFkYXB0ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnV0aWwuRWNvcmVVdGlsOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LmRvbWFpbi5BZGFwdGVyRmFjdG9yeUVkaXRpbmdEb21haW47CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQuZG9tYWluLkVkaXRpbmdEb21haW47CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQuZG9tYWluLklFZGl0aW5nRG9tYWluUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuQWRhcHRlckZhY3RvcnlJdGVtRGVsZWdhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkNvbXBvc2VkQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuUmVmbGVjdGl2ZUl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLnJlc291cmNlLlJlc291cmNlSXRlbVByb3ZpZGVyQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkuYWN0aW9uLkVkaXRpbmdEb21haW5BY3Rpb25CYXJDb250cmlidXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5jZWxsZWRpdG9yLkFkYXB0ZXJGYWN0b3J5VHJlZUVkaXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5kbmQuRWRpdGluZ0RvbWFpblZpZXdlckRyb3BBZGFwdGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmRuZC5Mb2NhbFRyYW5zZmVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmRuZC5WaWV3ZXJEcmFnQWRhcHRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5wcm92aWRlci5BZGFwdGVyRmFjdG9yeUNvbnRlbnRQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5wcm92aWRlci5BZGFwdGVyRmFjdG9yeUxhYmVsUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkucHJvdmlkZXIuVW53cmFwcGluZ1NlbGVjdGlvblByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLnV0aWwuRWRpdFVJTWFya2VySGVscGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLnV0aWwuRWRpdFVJVXRpbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS52aWV3LkV4dGVuZGVkUHJvcGVydHlTaGVldFBhZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklNZW51TGlzdGVuZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklNZW51TWFuYWdlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSVN0YXR1c0xpbmVNYW5hZ2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JVG9vbEJhck1hbmFnZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLk1lbnVNYW5hZ2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5TZXBhcmF0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuZGlhbG9ncy5NZXNzYWdlRGlhbG9nOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmRpYWxvZ3MuUHJvZ3Jlc3NNb25pdG9yRGlhbG9nOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU3RydWN0dXJlZFNlbGVjdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlNlbGVjdGlvbkNoYW5nZWRFdmVudDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlN0cnVjdHVyZWRTZWxlY3Rpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5TdHJ1Y3R1cmVkVmlld2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuVHJlZVZpZXdlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlZpZXdlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLnByb3ZpZGVyLkNvbW1vbkl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5wcm92aWRlci5HcmFwaEl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5wcm92aWRlci5Nb2RlbEl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5wcm92aWRlci5Nb2RpZmllckl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zY2VuYXJpby5wcm92aWRlci5TY2VuYXJpb0l0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zZXF1ZW5jZXIucHJvdmlkZXIuU2VxdWVuY2VySXRlbVByb3ZpZGVyQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsLmRlY29yYXRvcnMucHJvdmlkZXIuRGVjb3JhdG9yc0l0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC5kZWNvcmF0b3JzLnByb3ZpZGVyLlRlc3R1dGlsaXR5RWRpdFBsdWdpbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwubGFiZWxzLnByb3ZpZGVyLkxhYmVsc0l0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5TV1Q7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmN1c3RvbS5DVGFiRm9sZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5kbmQuRE5EOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5kbmQuVHJhbnNmZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5Db250cm9sQWRhcHRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLkNvbnRyb2xFdmVudDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZ3JhcGhpY3MuUG9pbnQ7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLk1lbnU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuVHJlZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5JQWN0aW9uQmFyczsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5JRWRpdG9ySW5wdXQ7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuSUVkaXRvclBhcnQ7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuSUVkaXRvclNpdGU7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuSVBhcnRMaXN0ZW5lcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5JV29ya2JlbmNoUGFydDsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5QYXJ0SW5pdEV4Y2VwdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5hY3Rpb25zLldvcmtzcGFjZU1vZGlmeU9wZXJhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5kaWFsb2dzLlNhdmVBc0RpYWxvZzsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5pZGUuSUdvdG9NYXJrZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkucGFydC5GaWxlRWRpdG9ySW5wdXQ7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkucGFydC5NdWx0aVBhZ2VFZGl0b3JQYXJ0OworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLnZpZXdzLmNvbnRlbnRvdXRsaW5lLkNvbnRlbnRPdXRsaW5lOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLnZpZXdzLmNvbnRlbnRvdXRsaW5lLkNvbnRlbnRPdXRsaW5lUGFnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS52aWV3cy5jb250ZW50b3V0bGluZS5JQ29udGVudE91dGxpbmVQYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLnZpZXdzLnByb3BlcnRpZXMuSVByb3BlcnR5U2hlZXRQYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLnZpZXdzLnByb3BlcnRpZXMuUHJvcGVydHlTaGVldDsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS52aWV3cy5wcm9wZXJ0aWVzLlByb3BlcnR5U2hlZXRQYWdlOworCisKKy8qKgorICogVGhpcyBpcyBhbiBleGFtcGxlIG9mIGEgRGVjb3JhdG9ycyBtb2RlbCBlZGl0b3IuCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBEZWNvcmF0b3JzRWRpdG9yCisJZXh0ZW5kcyBNdWx0aVBhZ2VFZGl0b3JQYXJ0CisJaW1wbGVtZW50cyBJRWRpdGluZ0RvbWFpblByb3ZpZGVyLCBJU2VsZWN0aW9uUHJvdmlkZXIsIElNZW51TGlzdGVuZXIsIElWaWV3ZXJQcm92aWRlciwgSUdvdG9NYXJrZXIgeworCS8qKgorCSAqIFRoaXMga2VlcHMgdHJhY2sgb2YgdGhlIGVkaXRpbmcgZG9tYWluIHRoYXQgaXMgdXNlZCB0byB0cmFjayBhbGwgY2hhbmdlcyB0byB0aGUgbW9kZWwuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIEFkYXB0ZXJGYWN0b3J5RWRpdGluZ0RvbWFpbiBlZGl0aW5nRG9tYWluOworCisJLyoqCisJICogVGhpcyBpcyB0aGUgb25lIGFkYXB0ZXIgZmFjdG9yeSB1c2VkIGZvciBwcm92aWRpbmcgdmlld3Mgb2YgdGhlIG1vZGVsLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBDb21wb3NlZEFkYXB0ZXJGYWN0b3J5IGFkYXB0ZXJGYWN0b3J5OworCisJLyoqCisJICogVGhpcyBpcyB0aGUgY29udGVudCBvdXRsaW5lIHBhZ2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIElDb250ZW50T3V0bGluZVBhZ2UgY29udGVudE91dGxpbmVQYWdlOworCisJLyoqCisJICogVGhpcyBpcyBhIGtsdWRnZS4uLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBJU3RhdHVzTGluZU1hbmFnZXIgY29udGVudE91dGxpbmVTdGF0dXNMaW5lTWFuYWdlcjsKKworCS8qKgorCSAqIFRoaXMgaXMgdGhlIGNvbnRlbnQgb3V0bGluZSBwYWdlJ3Mgdmlld2VyLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBUcmVlVmlld2VyIGNvbnRlbnRPdXRsaW5lVmlld2VyOworCisJLyoqCisJICogVGhpcyBpcyB0aGUgcHJvcGVydHkgc2hlZXQgcGFnZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgUHJvcGVydHlTaGVldFBhZ2UgcHJvcGVydHlTaGVldFBhZ2U7CisKKwkvKioKKwkgKiBUaGlzIGlzIHRoZSB2aWV3ZXIgdGhhdCBzaGFkb3dzIHRoZSBzZWxlY3Rpb24gaW4gdGhlIGNvbnRlbnQgb3V0bGluZS4KKwkgKiBUaGUgcGFyZW50IHJlbGF0aW9uIG11c3QgYmUgY29ycmVjdGx5IGRlZmluZWQgZm9yIHRoaXMgdG8gd29yay4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgVHJlZVZpZXdlciBzZWxlY3Rpb25WaWV3ZXI7CisKKwkvKioKKwkgKiBUaGlzIGtlZXBzIHRyYWNrIG9mIHRoZSBhY3RpdmUgY29udGVudCB2aWV3ZXIsIHdoaWNoIG1heSBiZSBlaXRoZXIgb25lIG9mIHRoZSB2aWV3ZXJzIGluIHRoZSBwYWdlcyBvciB0aGUgY29udGVudCBvdXRsaW5lIHZpZXdlci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgVmlld2VyIGN1cnJlbnRWaWV3ZXI7CisKKwkvKioKKwkgKiBUaGlzIGxpc3RlbnMgdG8gd2hpY2ggZXZlciB2aWV3ZXIgaXMgYWN0aXZlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBJU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyIHNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcjsKKworCS8qKgorCSAqIFRoaXMga2VlcHMgdHJhY2sgb2YgYWxsIHRoZSB7QGxpbmsgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyfXMgdGhhdCBhcmUgbGlzdGVuaW5nIHRvIHRoaXMgZWRpdG9yLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBDb2xsZWN0aW9uPElTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXI+IHNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcnMgPSBuZXcgQXJyYXlMaXN0PElTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXI+KCk7CisKKwkvKioKKwkgKiBUaGlzIGtlZXBzIHRyYWNrIG9mIHRoZSBzZWxlY3Rpb24gb2YgdGhlIGVkaXRvciBhcyBhIHdob2xlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBJU2VsZWN0aW9uIGVkaXRvclNlbGVjdGlvbiA9IFN0cnVjdHVyZWRTZWxlY3Rpb24uRU1QVFk7CisKKwkvKioKKwkgKiBUaGUgTWFya2VySGVscGVyIGlzIHJlc3BvbnNpYmxlIGZvciBjcmVhdGluZyB3b3Jrc3BhY2UgcmVzb3VyY2UgbWFya2VycyBwcmVzZW50ZWQKKwkgKiBpbiBFY2xpcHNlJ3MgUHJvYmxlbXMgVmlldy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgTWFya2VySGVscGVyIG1hcmtlckhlbHBlciA9IG5ldyBFZGl0VUlNYXJrZXJIZWxwZXIoKTsKKworCS8qKgorCSAqIFRoaXMgbGlzdGVucyBmb3Igd2hlbiB0aGUgb3V0bGluZSBiZWNvbWVzIGFjdGl2ZQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBJUGFydExpc3RlbmVyIHBhcnRMaXN0ZW5lciA9CisJCW5ldyBJUGFydExpc3RlbmVyKCkgeworCQkJcHVibGljIHZvaWQgcGFydEFjdGl2YXRlZChJV29ya2JlbmNoUGFydCBwKSB7CisJCQkJaWYgKHAgaW5zdGFuY2VvZiBDb250ZW50T3V0bGluZSkgeworCQkJCQlpZiAoKChDb250ZW50T3V0bGluZSlwKS5nZXRDdXJyZW50UGFnZSgpID09IGNvbnRlbnRPdXRsaW5lUGFnZSkgeworCQkJCQkJZ2V0QWN0aW9uQmFyQ29udHJpYnV0b3IoKS5zZXRBY3RpdmVFZGl0b3IoRGVjb3JhdG9yc0VkaXRvci50aGlzKTsKKworCQkJCQkJc2V0Q3VycmVudFZpZXdlcihjb250ZW50T3V0bGluZVZpZXdlcik7CisJCQkJCX0KKwkJCQl9CisJCQkJZWxzZSBpZiAocCBpbnN0YW5jZW9mIFByb3BlcnR5U2hlZXQpIHsKKwkJCQkJaWYgKCgoUHJvcGVydHlTaGVldClwKS5nZXRDdXJyZW50UGFnZSgpID09IHByb3BlcnR5U2hlZXRQYWdlKSB7CisJCQkJCQlnZXRBY3Rpb25CYXJDb250cmlidXRvcigpLnNldEFjdGl2ZUVkaXRvcihEZWNvcmF0b3JzRWRpdG9yLnRoaXMpOworCQkJCQkJaGFuZGxlQWN0aXZhdGUoKTsKKwkJCQkJfQorCQkJCX0KKwkJCQllbHNlIGlmIChwID09IERlY29yYXRvcnNFZGl0b3IudGhpcykgeworCQkJCQloYW5kbGVBY3RpdmF0ZSgpOworCQkJCX0KKwkJCX0KKwkJCXB1YmxpYyB2b2lkIHBhcnRCcm91Z2h0VG9Ub3AoSVdvcmtiZW5jaFBhcnQgcCkgeworCQkJCS8vIElnbm9yZS4KKwkJCX0KKwkJCXB1YmxpYyB2b2lkIHBhcnRDbG9zZWQoSVdvcmtiZW5jaFBhcnQgcCkgeworCQkJCS8vIElnbm9yZS4KKwkJCX0KKwkJCXB1YmxpYyB2b2lkIHBhcnREZWFjdGl2YXRlZChJV29ya2JlbmNoUGFydCBwKSB7CisJCQkJLy8gSWdub3JlLgorCQkJfQorCQkJcHVibGljIHZvaWQgcGFydE9wZW5lZChJV29ya2JlbmNoUGFydCBwKSB7CisJCQkJLy8gSWdub3JlLgorCQkJfQorCQl9OworCisJLyoqCisJICogUmVzb3VyY2VzIHRoYXQgaGF2ZSBiZWVuIHJlbW92ZWQgc2luY2UgbGFzdCBhY3RpdmF0aW9uLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBDb2xsZWN0aW9uPFJlc291cmNlPiByZW1vdmVkUmVzb3VyY2VzID0gbmV3IEFycmF5TGlzdDxSZXNvdXJjZT4oKTsKKworCS8qKgorCSAqIFJlc291cmNlcyB0aGF0IGhhdmUgYmVlbiBjaGFuZ2VkIHNpbmNlIGxhc3QgYWN0aXZhdGlvbi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgQ29sbGVjdGlvbjxSZXNvdXJjZT4gY2hhbmdlZFJlc291cmNlcyA9IG5ldyBBcnJheUxpc3Q8UmVzb3VyY2U+KCk7CisKKwkvKioKKwkgKiBSZXNvdXJjZXMgdGhhdCBoYXZlIGJlZW4gc2F2ZWQuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIENvbGxlY3Rpb248UmVzb3VyY2U+IHNhdmVkUmVzb3VyY2VzID0gbmV3IEFycmF5TGlzdDxSZXNvdXJjZT4oKTsKKworCS8qKgorCSAqIE1hcCB0byBzdG9yZSB0aGUgZGlhZ25vc3RpYyBhc3NvY2lhdGVkIHdpdGggYSByZXNvdXJjZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgTWFwPFJlc291cmNlLCBEaWFnbm9zdGljPiByZXNvdXJjZVRvRGlhZ25vc3RpY01hcCA9IG5ldyBMaW5rZWRIYXNoTWFwPFJlc291cmNlLCBEaWFnbm9zdGljPigpOworCisJLyoqCisJICogQ29udHJvbHMgd2hldGhlciB0aGUgcHJvYmxlbSBpbmRpY2F0aW9uIHNob3VsZCBiZSB1cGRhdGVkLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBib29sZWFuIHVwZGF0ZVByb2JsZW1JbmRpY2F0aW9uID0gdHJ1ZTsKKworCS8qKgorCSAqIEFkYXB0ZXIgdXNlZCB0byB1cGRhdGUgdGhlIHByb2JsZW0gaW5kaWNhdGlvbiB3aGVuIHJlc291cmNlcyBhcmUgZGVtYW5kZWQgbG9hZGVkLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBFQ29udGVudEFkYXB0ZXIgcHJvYmxlbUluZGljYXRpb25BZGFwdGVyID0gCisJCW5ldyBFQ29udGVudEFkYXB0ZXIoKSB7CisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyB2b2lkIG5vdGlmeUNoYW5nZWQoTm90aWZpY2F0aW9uIG5vdGlmaWNhdGlvbikgeworCQkJCWlmIChub3RpZmljYXRpb24uZ2V0Tm90aWZpZXIoKSBpbnN0YW5jZW9mIFJlc291cmNlKSB7CisJCQkJCXN3aXRjaCAobm90aWZpY2F0aW9uLmdldEZlYXR1cmVJRChSZXNvdXJjZS5jbGFzcykpIHsKKwkJCQkJCWNhc2UgUmVzb3VyY2UuUkVTT1VSQ0VfX0lTX0xPQURFRDoKKwkJCQkJCWNhc2UgUmVzb3VyY2UuUkVTT1VSQ0VfX0VSUk9SUzoKKwkJCQkJCWNhc2UgUmVzb3VyY2UuUkVTT1VSQ0VfX1dBUk5JTkdTOiB7CisJCQkJCQkJUmVzb3VyY2UgcmVzb3VyY2UgPSAoUmVzb3VyY2Upbm90aWZpY2F0aW9uLmdldE5vdGlmaWVyKCk7CisJCQkJCQkJRGlhZ25vc3RpYyBkaWFnbm9zdGljID0gYW5hbHl6ZVJlc291cmNlUHJvYmxlbXMocmVzb3VyY2UsIG51bGwpOworCQkJCQkJCWlmIChkaWFnbm9zdGljLmdldFNldmVyaXR5KCkgIT0gRGlhZ25vc3RpYy5PSykgeworCQkJCQkJCQlyZXNvdXJjZVRvRGlhZ25vc3RpY01hcC5wdXQocmVzb3VyY2UsIGRpYWdub3N0aWMpOworCQkJCQkJCX0KKwkJCQkJCQllbHNlIHsKKwkJCQkJCQkJcmVzb3VyY2VUb0RpYWdub3N0aWNNYXAucmVtb3ZlKHJlc291cmNlKTsKKwkJCQkJCQl9CisKKwkJCQkJCQlpZiAodXBkYXRlUHJvYmxlbUluZGljYXRpb24pIHsKKwkJCQkJCQkJZ2V0U2l0ZSgpLmdldFNoZWxsKCkuZ2V0RGlzcGxheSgpLmFzeW5jRXhlYworCQkJCQkJCQkJKG5ldyBSdW5uYWJsZSgpIHsKKwkJCQkJCQkJCQkgcHVibGljIHZvaWQgcnVuKCkgeworCQkJCQkJCQkJCQkgdXBkYXRlUHJvYmxlbUluZGljYXRpb24oKTsKKwkJCQkJCQkJCQkgfQorCQkJCQkJCQkJIH0pOworCQkJCQkJCX0KKwkJCQkJCQlicmVhazsKKwkJCQkJCX0KKwkJCQkJfQorCQkJCX0KKwkJCQllbHNlIHsKKwkJCQkJc3VwZXIubm90aWZ5Q2hhbmdlZChub3RpZmljYXRpb24pOworCQkJCX0KKwkJCX0KKworCQkJQE92ZXJyaWRlCisJCQlwcm90ZWN0ZWQgdm9pZCBzZXRUYXJnZXQoUmVzb3VyY2UgdGFyZ2V0KSB7CisJCQkJYmFzaWNTZXRUYXJnZXQodGFyZ2V0KTsKKwkJCX0KKworCQkJQE92ZXJyaWRlCisJCQlwcm90ZWN0ZWQgdm9pZCB1bnNldFRhcmdldChSZXNvdXJjZSB0YXJnZXQpIHsKKwkJCQliYXNpY1Vuc2V0VGFyZ2V0KHRhcmdldCk7CisJCQl9CisJCX07CisKKwkvKioKKwkgKiBUaGlzIGxpc3RlbnMgZm9yIHdvcmtzcGFjZSBjaGFuZ2VzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBJUmVzb3VyY2VDaGFuZ2VMaXN0ZW5lciByZXNvdXJjZUNoYW5nZUxpc3RlbmVyID0KKwkJbmV3IElSZXNvdXJjZUNoYW5nZUxpc3RlbmVyKCkgeworCQkJcHVibGljIHZvaWQgcmVzb3VyY2VDaGFuZ2VkKElSZXNvdXJjZUNoYW5nZUV2ZW50IGV2ZW50KSB7CisJCQkJSVJlc291cmNlRGVsdGEgZGVsdGEgPSBldmVudC5nZXREZWx0YSgpOworCQkJCXRyeSB7CisJCQkJCWNsYXNzIFJlc291cmNlRGVsdGFWaXNpdG9yIGltcGxlbWVudHMgSVJlc291cmNlRGVsdGFWaXNpdG9yIHsKKwkJCQkJCXByb3RlY3RlZCBSZXNvdXJjZVNldCByZXNvdXJjZVNldCA9IGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKTsKKwkJCQkJCXByb3RlY3RlZCBDb2xsZWN0aW9uPFJlc291cmNlPiBjaGFuZ2VkUmVzb3VyY2VzID0gbmV3IEFycmF5TGlzdDxSZXNvdXJjZT4oKTsKKwkJCQkJCXByb3RlY3RlZCBDb2xsZWN0aW9uPFJlc291cmNlPiByZW1vdmVkUmVzb3VyY2VzID0gbmV3IEFycmF5TGlzdDxSZXNvdXJjZT4oKTsKKworCQkJCQkJcHVibGljIGJvb2xlYW4gdmlzaXQoSVJlc291cmNlRGVsdGEgZGVsdGEpIHsKKwkJCQkJCQlpZiAoZGVsdGEuZ2V0UmVzb3VyY2UoKS5nZXRUeXBlKCkgPT0gSVJlc291cmNlLkZJTEUpIHsKKwkJCQkJCQkJaWYgKGRlbHRhLmdldEtpbmQoKSA9PSBJUmVzb3VyY2VEZWx0YS5SRU1PVkVEIHx8CisJCQkJCQkJCSAgICBkZWx0YS5nZXRLaW5kKCkgPT0gSVJlc291cmNlRGVsdGEuQ0hBTkdFRCAmJiBkZWx0YS5nZXRGbGFncygpICE9IElSZXNvdXJjZURlbHRhLk1BUktFUlMpIHsKKwkJCQkJCQkJCVJlc291cmNlIHJlc291cmNlID0gcmVzb3VyY2VTZXQuZ2V0UmVzb3VyY2UoVVJJLmNyZWF0ZVVSSShkZWx0YS5nZXRGdWxsUGF0aCgpLnRvU3RyaW5nKCkpLCBmYWxzZSk7CisJCQkJCQkJCQlpZiAocmVzb3VyY2UgIT0gbnVsbCkgeworCQkJCQkJCQkJCWlmIChkZWx0YS5nZXRLaW5kKCkgPT0gSVJlc291cmNlRGVsdGEuUkVNT1ZFRCkgeworCQkJCQkJCQkJCQlyZW1vdmVkUmVzb3VyY2VzLmFkZChyZXNvdXJjZSk7CisJCQkJCQkJCQkJfQorCQkJCQkJCQkJCWVsc2UgaWYgKCFzYXZlZFJlc291cmNlcy5yZW1vdmUocmVzb3VyY2UpKSB7CisJCQkJCQkJCQkJCWNoYW5nZWRSZXNvdXJjZXMuYWRkKHJlc291cmNlKTsKKwkJCQkJCQkJCQl9CisJCQkJCQkJCQl9CisJCQkJCQkJCX0KKwkJCQkJCQl9CisKKwkJCQkJCQlyZXR1cm4gdHJ1ZTsKKwkJCQkJCX0KKworCQkJCQkJcHVibGljIENvbGxlY3Rpb248UmVzb3VyY2U+IGdldENoYW5nZWRSZXNvdXJjZXMoKSB7CisJCQkJCQkJcmV0dXJuIGNoYW5nZWRSZXNvdXJjZXM7CisJCQkJCQl9CisKKwkJCQkJCXB1YmxpYyBDb2xsZWN0aW9uPFJlc291cmNlPiBnZXRSZW1vdmVkUmVzb3VyY2VzKCkgeworCQkJCQkJCXJldHVybiByZW1vdmVkUmVzb3VyY2VzOworCQkJCQkJfQorCQkJCQl9CisKKwkJCQkJUmVzb3VyY2VEZWx0YVZpc2l0b3IgdmlzaXRvciA9IG5ldyBSZXNvdXJjZURlbHRhVmlzaXRvcigpOworCQkJCQlkZWx0YS5hY2NlcHQodmlzaXRvcik7CisKKwkJCQkJaWYgKCF2aXNpdG9yLmdldFJlbW92ZWRSZXNvdXJjZXMoKS5pc0VtcHR5KCkpIHsKKwkJCQkJCXJlbW92ZWRSZXNvdXJjZXMuYWRkQWxsKHZpc2l0b3IuZ2V0UmVtb3ZlZFJlc291cmNlcygpKTsKKwkJCQkJCWlmICghaXNEaXJ0eSgpKSB7CisJCQkJCQkJZ2V0U2l0ZSgpLmdldFNoZWxsKCkuZ2V0RGlzcGxheSgpLmFzeW5jRXhlYworCQkJCQkJCQkobmV3IFJ1bm5hYmxlKCkgeworCQkJCQkJCQkJIHB1YmxpYyB2b2lkIHJ1bigpIHsKKwkJCQkJCQkJCQkgZ2V0U2l0ZSgpLmdldFBhZ2UoKS5jbG9zZUVkaXRvcihEZWNvcmF0b3JzRWRpdG9yLnRoaXMsIGZhbHNlKTsKKwkJCQkJCQkJCSB9CisJCQkJCQkJCSB9KTsKKwkJCQkJCX0KKwkJCQkJfQorCisJCQkJCWlmICghdmlzaXRvci5nZXRDaGFuZ2VkUmVzb3VyY2VzKCkuaXNFbXB0eSgpKSB7CisJCQkJCQljaGFuZ2VkUmVzb3VyY2VzLmFkZEFsbCh2aXNpdG9yLmdldENoYW5nZWRSZXNvdXJjZXMoKSk7CisJCQkJCQlpZiAoZ2V0U2l0ZSgpLmdldFBhZ2UoKS5nZXRBY3RpdmVFZGl0b3IoKSA9PSBEZWNvcmF0b3JzRWRpdG9yLnRoaXMpIHsKKwkJCQkJCQlnZXRTaXRlKCkuZ2V0U2hlbGwoKS5nZXREaXNwbGF5KCkuYXN5bmNFeGVjCisJCQkJCQkJCShuZXcgUnVubmFibGUoKSB7CisJCQkJCQkJCQkgcHVibGljIHZvaWQgcnVuKCkgeworCQkJCQkJCQkJCSBoYW5kbGVBY3RpdmF0ZSgpOworCQkJCQkJCQkJIH0KKwkJCQkJCQkJIH0pOworCQkJCQkJfQorCQkJCQl9CisJCQkJfQorCQkJCWNhdGNoIChDb3JlRXhjZXB0aW9uIGV4Y2VwdGlvbikgeworCQkJCQlUZXN0dXRpbGl0eUVkaXRQbHVnaW4uSU5TVEFOQ0UubG9nKGV4Y2VwdGlvbik7CisJCQkJfQorCQkJfQorCQl9OworCisJLyoqCisJICogSGFuZGxlcyBhY3RpdmF0aW9uIG9mIHRoZSBlZGl0b3Igb3IgaXQncyBhc3NvY2lhdGVkIHZpZXdzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIGhhbmRsZUFjdGl2YXRlKCkgeworCQkvLyBSZWNvbXB1dGUgdGhlIHJlYWQgb25seSBzdGF0ZS4KKwkJLy8KKwkJaWYgKGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VUb1JlYWRPbmx5TWFwKCkgIT0gbnVsbCkgeworCQkgIGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VUb1JlYWRPbmx5TWFwKCkuY2xlYXIoKTsKKworCQkgIC8vIFJlZnJlc2ggYW55IGFjdGlvbnMgdGhhdCBtYXkgYmVjb21lIGVuYWJsZWQgb3IgZGlzYWJsZWQuCisJCSAgLy8KKwkJICBzZXRTZWxlY3Rpb24oZ2V0U2VsZWN0aW9uKCkpOworCQl9CisKKwkJaWYgKCFyZW1vdmVkUmVzb3VyY2VzLmlzRW1wdHkoKSkgeworCQkJaWYgKGhhbmRsZURpcnR5Q29uZmxpY3QoKSkgeworCQkJCWdldFNpdGUoKS5nZXRQYWdlKCkuY2xvc2VFZGl0b3IoRGVjb3JhdG9yc0VkaXRvci50aGlzLCBmYWxzZSk7CisJCQl9CisJCQllbHNlIHsKKwkJCQlyZW1vdmVkUmVzb3VyY2VzLmNsZWFyKCk7CisJCQkJY2hhbmdlZFJlc291cmNlcy5jbGVhcigpOworCQkJCXNhdmVkUmVzb3VyY2VzLmNsZWFyKCk7CisJCQl9CisJCX0KKwkJZWxzZSBpZiAoIWNoYW5nZWRSZXNvdXJjZXMuaXNFbXB0eSgpKSB7CisJCQljaGFuZ2VkUmVzb3VyY2VzLnJlbW92ZUFsbChzYXZlZFJlc291cmNlcyk7CisJCQloYW5kbGVDaGFuZ2VkUmVzb3VyY2VzKCk7CisJCQljaGFuZ2VkUmVzb3VyY2VzLmNsZWFyKCk7CisJCQlzYXZlZFJlc291cmNlcy5jbGVhcigpOworCQl9CisJfQorCisJLyoqCisJICogSGFuZGxlcyB3aGF0IHRvIGRvIHdpdGggY2hhbmdlZCByZXNvdXJjZXMgb24gYWN0aXZhdGlvbi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBoYW5kbGVDaGFuZ2VkUmVzb3VyY2VzKCkgeworCQlpZiAoIWNoYW5nZWRSZXNvdXJjZXMuaXNFbXB0eSgpICYmICghaXNEaXJ0eSgpIHx8IGhhbmRsZURpcnR5Q29uZmxpY3QoKSkpIHsKKwkJCWlmIChpc0RpcnR5KCkpIHsKKwkJCQljaGFuZ2VkUmVzb3VyY2VzLmFkZEFsbChlZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkuZ2V0UmVzb3VyY2VzKCkpOworCQkJfQorCQkJZWRpdGluZ0RvbWFpbi5nZXRDb21tYW5kU3RhY2soKS5mbHVzaCgpOworCisJCQl1cGRhdGVQcm9ibGVtSW5kaWNhdGlvbiA9IGZhbHNlOworCQkJZm9yIChSZXNvdXJjZSByZXNvdXJjZSA6IGNoYW5nZWRSZXNvdXJjZXMpIHsKKwkJCQlpZiAocmVzb3VyY2UuaXNMb2FkZWQoKSkgeworCQkJCQlyZXNvdXJjZS51bmxvYWQoKTsKKwkJCQkJdHJ5IHsKKwkJCQkJCXJlc291cmNlLmxvYWQoQ29sbGVjdGlvbnMuRU1QVFlfTUFQKTsKKwkJCQkJfQorCQkJCQljYXRjaCAoSU9FeGNlcHRpb24gZXhjZXB0aW9uKSB7CisJCQkJCQlpZiAoIXJlc291cmNlVG9EaWFnbm9zdGljTWFwLmNvbnRhaW5zS2V5KHJlc291cmNlKSkgeworCQkJCQkJCXJlc291cmNlVG9EaWFnbm9zdGljTWFwLnB1dChyZXNvdXJjZSwgYW5hbHl6ZVJlc291cmNlUHJvYmxlbXMocmVzb3VyY2UsIGV4Y2VwdGlvbikpOworCQkJCQkJfQorCQkJCQl9CisJCQkJfQorCQkJfQorCisJCQlpZiAoQWRhcHRlckZhY3RvcnlFZGl0aW5nRG9tYWluLmlzU3RhbGUoZWRpdG9yU2VsZWN0aW9uKSkgeworCQkJCXNldFNlbGVjdGlvbihTdHJ1Y3R1cmVkU2VsZWN0aW9uLkVNUFRZKTsKKwkJCX0KKworCQkJdXBkYXRlUHJvYmxlbUluZGljYXRpb24gPSB0cnVlOworCQkJdXBkYXRlUHJvYmxlbUluZGljYXRpb24oKTsKKwkJfQorCX0KKyAgCisJLyoqCisJICogVXBkYXRlcyB0aGUgcHJvYmxlbXMgaW5kaWNhdGlvbiB3aXRoIHRoZSBpbmZvcm1hdGlvbiBkZXNjcmliZWQgaW4gdGhlIHNwZWNpZmllZCBkaWFnbm9zdGljLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIHVwZGF0ZVByb2JsZW1JbmRpY2F0aW9uKCkgeworCQlpZiAodXBkYXRlUHJvYmxlbUluZGljYXRpb24pIHsKKwkJCUJhc2ljRGlhZ25vc3RpYyBkaWFnbm9zdGljID0KKwkJCQluZXcgQmFzaWNEaWFnbm9zdGljCisJCQkJCShEaWFnbm9zdGljLk9LLAorCQkJCQkgIm9yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbCIsIC8vJE5PTi1OTFMtMSQKKwkJCQkJIDAsCisJCQkJCSBudWxsLAorCQkJCQkgbmV3IE9iamVjdCBbXSB7IGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKSB9KTsKKwkJCWZvciAoRGlhZ25vc3RpYyBjaGlsZERpYWdub3N0aWMgOiByZXNvdXJjZVRvRGlhZ25vc3RpY01hcC52YWx1ZXMoKSkgeworCQkJCWlmIChjaGlsZERpYWdub3N0aWMuZ2V0U2V2ZXJpdHkoKSAhPSBEaWFnbm9zdGljLk9LKSB7CisJCQkJCWRpYWdub3N0aWMuYWRkKGNoaWxkRGlhZ25vc3RpYyk7CisJCQkJfQorCQkJfQorCisJCQlpbnQgbGFzdEVkaXRvclBhZ2UgPSBnZXRQYWdlQ291bnQoKSAtIDE7CisJCQlpZiAobGFzdEVkaXRvclBhZ2UgPj0gMCAmJiBnZXRFZGl0b3IobGFzdEVkaXRvclBhZ2UpIGluc3RhbmNlb2YgUHJvYmxlbUVkaXRvclBhcnQpIHsKKwkJCQkoKFByb2JsZW1FZGl0b3JQYXJ0KWdldEVkaXRvcihsYXN0RWRpdG9yUGFnZSkpLnNldERpYWdub3N0aWMoZGlhZ25vc3RpYyk7CisJCQkJaWYgKGRpYWdub3N0aWMuZ2V0U2V2ZXJpdHkoKSAhPSBEaWFnbm9zdGljLk9LKSB7CisJCQkJCXNldEFjdGl2ZVBhZ2UobGFzdEVkaXRvclBhZ2UpOworCQkJCX0KKwkJCX0KKwkJCWVsc2UgaWYgKGRpYWdub3N0aWMuZ2V0U2V2ZXJpdHkoKSAhPSBEaWFnbm9zdGljLk9LKSB7CisJCQkJUHJvYmxlbUVkaXRvclBhcnQgcHJvYmxlbUVkaXRvclBhcnQgPSBuZXcgUHJvYmxlbUVkaXRvclBhcnQoKTsKKwkJCQlwcm9ibGVtRWRpdG9yUGFydC5zZXREaWFnbm9zdGljKGRpYWdub3N0aWMpOworCQkJCXByb2JsZW1FZGl0b3JQYXJ0LnNldE1hcmtlckhlbHBlcihtYXJrZXJIZWxwZXIpOworCQkJCXRyeSB7CisJCQkJCWFkZFBhZ2UoKytsYXN0RWRpdG9yUGFnZSwgcHJvYmxlbUVkaXRvclBhcnQsIGdldEVkaXRvcklucHV0KCkpOworCQkJCQlzZXRQYWdlVGV4dChsYXN0RWRpdG9yUGFnZSwgcHJvYmxlbUVkaXRvclBhcnQuZ2V0UGFydE5hbWUoKSk7CisJCQkJCXNldEFjdGl2ZVBhZ2UobGFzdEVkaXRvclBhZ2UpOworCQkJCQlzaG93VGFicygpOworCQkJCX0KKwkJCQljYXRjaCAoUGFydEluaXRFeGNlcHRpb24gZXhjZXB0aW9uKSB7CisJCQkJCVRlc3R1dGlsaXR5RWRpdFBsdWdpbi5JTlNUQU5DRS5sb2coZXhjZXB0aW9uKTsKKwkJCQl9CisJCQl9CisKKwkJCWlmIChtYXJrZXJIZWxwZXIuaGFzTWFya2VycyhlZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkpKSB7CisJCQkJbWFya2VySGVscGVyLmRlbGV0ZU1hcmtlcnMoZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpKTsKKwkJCQlpZiAoZGlhZ25vc3RpYy5nZXRTZXZlcml0eSgpICE9IERpYWdub3N0aWMuT0spIHsKKwkJCQkJdHJ5IHsKKwkJCQkJCW1hcmtlckhlbHBlci5jcmVhdGVNYXJrZXJzKGRpYWdub3N0aWMpOworCQkJCQl9CisJCQkJCWNhdGNoIChDb3JlRXhjZXB0aW9uIGV4Y2VwdGlvbikgeworCQkJCQkJVGVzdHV0aWxpdHlFZGl0UGx1Z2luLklOU1RBTkNFLmxvZyhleGNlcHRpb24pOworCQkJCQl9CisJCQkJfQorCQkJfQorCQl9CisJfQorCisJLyoqCisJICogU2hvd3MgYSBkaWFsb2cgdGhhdCBhc2tzIGlmIGNvbmZsaWN0aW5nIGNoYW5nZXMgc2hvdWxkIGJlIGRpc2NhcmRlZC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgYm9vbGVhbiBoYW5kbGVEaXJ0eUNvbmZsaWN0KCkgeworCQlyZXR1cm4KKwkJCU1lc3NhZ2VEaWFsb2cub3BlblF1ZXN0aW9uCisJCQkJKGdldFNpdGUoKS5nZXRTaGVsbCgpLAorCQkJCSBnZXRTdHJpbmcoIl9VSV9GaWxlQ29uZmxpY3RfbGFiZWwiKSwgLy8kTk9OLU5MUy0xJAorCQkJCSBnZXRTdHJpbmcoIl9XQVJOX0ZpbGVDb25mbGljdCIpKTsgLy8kTk9OLU5MUy0xJAorCX0KKworCS8qKgorCSAqIFRoaXMgY3JlYXRlcyBhIG1vZGVsIGVkaXRvci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRGVjb3JhdG9yc0VkaXRvcigpIHsKKwkJc3VwZXIoKTsKKwkJaW5pdGlhbGl6ZUVkaXRpbmdEb21haW4oKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHNldHMgdXAgdGhlIGVkaXRpbmcgZG9tYWluIGZvciB0aGUgbW9kZWwgZWRpdG9yLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIGluaXRpYWxpemVFZGl0aW5nRG9tYWluKCkgeworCQkvLyBDcmVhdGUgYW4gYWRhcHRlciBmYWN0b3J5IHRoYXQgeWllbGRzIGl0ZW0gcHJvdmlkZXJzLgorCQkvLworCQlhZGFwdGVyRmFjdG9yeSA9IG5ldyBDb21wb3NlZEFkYXB0ZXJGYWN0b3J5KENvbXBvc2VkQWRhcHRlckZhY3RvcnkuRGVzY3JpcHRvci5SZWdpc3RyeS5JTlNUQU5DRSk7CisKKwkJYWRhcHRlckZhY3RvcnkuYWRkQWRhcHRlckZhY3RvcnkobmV3IFJlc291cmNlSXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkoKSk7CisJCWFkYXB0ZXJGYWN0b3J5LmFkZEFkYXB0ZXJGYWN0b3J5KG5ldyBEZWNvcmF0b3JzSXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkoKSk7CisJCWFkYXB0ZXJGYWN0b3J5LmFkZEFkYXB0ZXJGYWN0b3J5KG5ldyBMYWJlbHNJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSgpKTsKKwkJYWRhcHRlckZhY3RvcnkuYWRkQWRhcHRlckZhY3RvcnkobmV3IE1vZGVsSXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkoKSk7CisJCWFkYXB0ZXJGYWN0b3J5LmFkZEFkYXB0ZXJGYWN0b3J5KG5ldyBDb21tb25JdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSgpKTsKKwkJYWRhcHRlckZhY3RvcnkuYWRkQWRhcHRlckZhY3RvcnkobmV3IEdyYXBoSXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkoKSk7CisJCWFkYXB0ZXJGYWN0b3J5LmFkZEFkYXB0ZXJGYWN0b3J5KG5ldyBNb2RpZmllckl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5KCkpOworCQlhZGFwdGVyRmFjdG9yeS5hZGRBZGFwdGVyRmFjdG9yeShuZXcgRWNvcmVJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSgpKTsKKwkJYWRhcHRlckZhY3RvcnkuYWRkQWRhcHRlckZhY3RvcnkobmV3IFNjZW5hcmlvSXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkoKSk7CisJCWFkYXB0ZXJGYWN0b3J5LmFkZEFkYXB0ZXJGYWN0b3J5KG5ldyBTZXF1ZW5jZXJJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSgpKTsKKwkJYWRhcHRlckZhY3RvcnkuYWRkQWRhcHRlckZhY3RvcnkobmV3IFJlZmxlY3RpdmVJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSgpKTsKKworCQkvLyBDcmVhdGUgdGhlIGNvbW1hbmQgc3RhY2sgdGhhdCB3aWxsIG5vdGlmeSB0aGlzIGVkaXRvciBhcyBjb21tYW5kcyBhcmUgZXhlY3V0ZWQuCisJCS8vCisJCUJhc2ljQ29tbWFuZFN0YWNrIGNvbW1hbmRTdGFjayA9IG5ldyBCYXNpY0NvbW1hbmRTdGFjaygpOworCisJCS8vIEFkZCBhIGxpc3RlbmVyIHRvIHNldCB0aGUgbW9zdCByZWNlbnQgY29tbWFuZCdzIGFmZmVjdGVkIG9iamVjdHMgdG8gYmUgdGhlIHNlbGVjdGlvbiBvZiB0aGUgdmlld2VyIHdpdGggZm9jdXMuCisJCS8vCisJCWNvbW1hbmRTdGFjay5hZGRDb21tYW5kU3RhY2tMaXN0ZW5lcgorCQkJKG5ldyBDb21tYW5kU3RhY2tMaXN0ZW5lcigpIHsKKwkJCQkgcHVibGljIHZvaWQgY29tbWFuZFN0YWNrQ2hhbmdlZChmaW5hbCBFdmVudE9iamVjdCBldmVudCkgeworCQkJCQkgZ2V0Q29udGFpbmVyKCkuZ2V0RGlzcGxheSgpLmFzeW5jRXhlYworCQkJCQkJIChuZXcgUnVubmFibGUoKSB7CisJCQkJCQkJICBwdWJsaWMgdm9pZCBydW4oKSB7CisJCQkJCQkJCSAgZmlyZVByb3BlcnR5Q2hhbmdlKElFZGl0b3JQYXJ0LlBST1BfRElSVFkpOworCisJCQkJCQkJCSAgLy8gVHJ5IHRvIHNlbGVjdCB0aGUgYWZmZWN0ZWQgb2JqZWN0cy4KKwkJCQkJCQkJICAvLworCQkJCQkJCQkgIENvbW1hbmQgbW9zdFJlY2VudENvbW1hbmQgPSAoKENvbW1hbmRTdGFjaylldmVudC5nZXRTb3VyY2UoKSkuZ2V0TW9zdFJlY2VudENvbW1hbmQoKTsKKwkJCQkJCQkJICBpZiAobW9zdFJlY2VudENvbW1hbmQgIT0gbnVsbCkgeworCQkJCQkJCQkJICBzZXRTZWxlY3Rpb25Ub1ZpZXdlcihtb3N0UmVjZW50Q29tbWFuZC5nZXRBZmZlY3RlZE9iamVjdHMoKSk7CisJCQkJCQkJCSAgfQorCQkJCQkJCQkgIGlmIChwcm9wZXJ0eVNoZWV0UGFnZSAhPSBudWxsICYmICFwcm9wZXJ0eVNoZWV0UGFnZS5nZXRDb250cm9sKCkuaXNEaXNwb3NlZCgpKSB7CisJCQkJCQkJCQkgIHByb3BlcnR5U2hlZXRQYWdlLnJlZnJlc2goKTsKKwkJCQkJCQkJICB9CisJCQkJCQkJICB9CisJCQkJCQkgIH0pOworCQkJCSB9CisJCQkgfSk7CisKKwkJLy8gQ3JlYXRlIHRoZSBlZGl0aW5nIGRvbWFpbiB3aXRoIGEgc3BlY2lhbCBjb21tYW5kIHN0YWNrLgorCQkvLworCQllZGl0aW5nRG9tYWluID0gbmV3IEFkYXB0ZXJGYWN0b3J5RWRpdGluZ0RvbWFpbihhZGFwdGVyRmFjdG9yeSwgY29tbWFuZFN0YWNrLCBuZXcgSGFzaE1hcDxSZXNvdXJjZSwgQm9vbGVhbj4oKSk7CisJfQorCisJLyoqCisJICogVGhpcyBpcyBoZXJlIGZvciB0aGUgbGlzdGVuZXIgdG8gYmUgYWJsZSB0byBjYWxsIGl0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIGZpcmVQcm9wZXJ0eUNoYW5nZShpbnQgYWN0aW9uKSB7CisJCXN1cGVyLmZpcmVQcm9wZXJ0eUNoYW5nZShhY3Rpb24pOworCX0KKworCS8qKgorCSAqIFRoaXMgc2V0cyB0aGUgc2VsZWN0aW9uIGludG8gd2hpY2hldmVyIHZpZXdlciBpcyBhY3RpdmUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgc2V0U2VsZWN0aW9uVG9WaWV3ZXIoQ29sbGVjdGlvbjw/PiBjb2xsZWN0aW9uKSB7CisJCWZpbmFsIENvbGxlY3Rpb248Pz4gdGhlU2VsZWN0aW9uID0gY29sbGVjdGlvbjsKKwkJLy8gTWFrZSBzdXJlIGl0J3Mgb2theS4KKwkJLy8KKwkJaWYgKHRoZVNlbGVjdGlvbiAhPSBudWxsICYmICF0aGVTZWxlY3Rpb24uaXNFbXB0eSgpKSB7CisJCQkvLyBJIGRvbid0IGtub3cgaWYgdGhpcyBzaG91bGQgYmUgcnVuIHRoaXMgZGVmZXJyZWQKKwkJCS8vIGJlY2F1c2Ugd2UgbWlnaHQgaGF2ZSB0byBnaXZlIHRoZSBlZGl0b3IgYSBjaGFuY2UgdG8gcHJvY2VzcyB0aGUgdmlld2VyIHVwZGF0ZSBldmVudHMKKwkJCS8vIGFuZCBoZW5jZSB0byB1cGRhdGUgdGhlIHZpZXdzIGZpcnN0LgorCQkJLy8KKwkJCS8vCisJCQlSdW5uYWJsZSBydW5uYWJsZSA9CisJCQkJbmV3IFJ1bm5hYmxlKCkgeworCQkJCQlwdWJsaWMgdm9pZCBydW4oKSB7CisJCQkJCQkvLyBUcnkgdG8gc2VsZWN0IHRoZSBpdGVtcyBpbiB0aGUgY3VycmVudCBjb250ZW50IHZpZXdlciBvZiB0aGUgZWRpdG9yLgorCQkJCQkJLy8KKwkJCQkJCWlmIChjdXJyZW50Vmlld2VyICE9IG51bGwpIHsKKwkJCQkJCQljdXJyZW50Vmlld2VyLnNldFNlbGVjdGlvbihuZXcgU3RydWN0dXJlZFNlbGVjdGlvbih0aGVTZWxlY3Rpb24udG9BcnJheSgpKSwgdHJ1ZSk7CisJCQkJCQl9CisJCQkJCX0KKwkJCQl9OworCQkJcnVubmFibGUucnVuKCk7CisJCX0KKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgdGhlIGVkaXRpbmcgZG9tYWluIGFzIHJlcXVpcmVkIGJ5IHRoZSB7QGxpbmsgSUVkaXRpbmdEb21haW5Qcm92aWRlcn0gaW50ZXJmYWNlLgorCSAqIFRoaXMgaXMgaW1wb3J0YW50IGZvciBpbXBsZW1lbnRpbmcgdGhlIHN0YXRpYyBtZXRob2RzIG9mIHtAbGluayBBZGFwdGVyRmFjdG9yeUVkaXRpbmdEb21haW59CisJICogYW5kIGZvciBzdXBwb3J0aW5nIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5hY3Rpb24uQ29tbWFuZEFjdGlvbn0uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVkaXRpbmdEb21haW4gZ2V0RWRpdGluZ0RvbWFpbigpIHsKKwkJcmV0dXJuIGVkaXRpbmdEb21haW47CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIGNsYXNzIFJldmVyc2VBZGFwdGVyRmFjdG9yeUNvbnRlbnRQcm92aWRlciBleHRlbmRzIEFkYXB0ZXJGYWN0b3J5Q29udGVudFByb3ZpZGVyIHsKKwkJcHVibGljIFJldmVyc2VBZGFwdGVyRmFjdG9yeUNvbnRlbnRQcm92aWRlcihBZGFwdGVyRmFjdG9yeSBhZGFwdGVyRmFjdG9yeSkgeworCQkJc3VwZXIoYWRhcHRlckZhY3RvcnkpOworCQl9CisKKwkJQE92ZXJyaWRlCisJCXB1YmxpYyBPYmplY3QgW10gZ2V0RWxlbWVudHMoT2JqZWN0IG9iamVjdCkgeworCQkJT2JqZWN0IHBhcmVudCA9IHN1cGVyLmdldFBhcmVudChvYmplY3QpOworCQkJcmV0dXJuIChwYXJlbnQgPT0gbnVsbCA/IENvbGxlY3Rpb25zLkVNUFRZX1NFVCA6IENvbGxlY3Rpb25zLnNpbmdsZXRvbihwYXJlbnQpKS50b0FycmF5KCk7CisJCX0KKworCQlAT3ZlcnJpZGUKKwkJcHVibGljIE9iamVjdCBbXSBnZXRDaGlsZHJlbihPYmplY3Qgb2JqZWN0KSB7CisJCQlPYmplY3QgcGFyZW50ID0gc3VwZXIuZ2V0UGFyZW50KG9iamVjdCk7CisJCQlyZXR1cm4gKHBhcmVudCA9PSBudWxsID8gQ29sbGVjdGlvbnMuRU1QVFlfU0VUIDogQ29sbGVjdGlvbnMuc2luZ2xldG9uKHBhcmVudCkpLnRvQXJyYXkoKTsKKwkJfQorCisJCUBPdmVycmlkZQorCQlwdWJsaWMgYm9vbGVhbiBoYXNDaGlsZHJlbihPYmplY3Qgb2JqZWN0KSB7CisJCQlPYmplY3QgcGFyZW50ID0gc3VwZXIuZ2V0UGFyZW50KG9iamVjdCk7CisJCQlyZXR1cm4gcGFyZW50ICE9IG51bGw7CisJCX0KKworCQlAT3ZlcnJpZGUKKwkJcHVibGljIE9iamVjdCBnZXRQYXJlbnQoT2JqZWN0IG9iamVjdCkgeworCQkJcmV0dXJuIG51bGw7CisJCX0KKwl9CisKKwkvKioKKwkgKiBUaGlzIG1ha2VzIHN1cmUgdGhhdCBvbmUgY29udGVudCB2aWV3ZXIsIGVpdGhlciBmb3IgdGhlIGN1cnJlbnQgcGFnZSBvciB0aGUgb3V0bGluZSB2aWV3LCBpZiBpdCBoYXMgZm9jdXMsCisJICogaXMgdGhlIGN1cnJlbnQgb25lLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIHNldEN1cnJlbnRWaWV3ZXIoVmlld2VyIHZpZXdlcikgeworCQkvLyBJZiBpdCBpcyBjaGFuZ2luZy4uLgorCQkvLworCQlpZiAoY3VycmVudFZpZXdlciAhPSB2aWV3ZXIpIHsKKwkJCWlmIChzZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIgPT0gbnVsbCkgeworCQkJCS8vIENyZWF0ZSB0aGUgbGlzdGVuZXIgb24gZGVtYW5kLgorCQkJCS8vCisJCQkJc2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyID0KKwkJCQkJbmV3IElTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIoKSB7CisJCQkJCQkvLyBUaGlzIGp1c3Qgbm90aWZpZXMgdGhvc2UgdGhpbmdzIHRoYXQgYXJlIGFmZmVjdGVkIGJ5IHRoZSBzZWN0aW9uLgorCQkJCQkJLy8KKwkJCQkJCXB1YmxpYyB2b2lkIHNlbGVjdGlvbkNoYW5nZWQoU2VsZWN0aW9uQ2hhbmdlZEV2ZW50IHNlbGVjdGlvbkNoYW5nZWRFdmVudCkgeworCQkJCQkJCXNldFNlbGVjdGlvbihzZWxlY3Rpb25DaGFuZ2VkRXZlbnQuZ2V0U2VsZWN0aW9uKCkpOworCQkJCQkJfQorCQkJCQl9OworCQkJfQorCisJCQkvLyBTdG9wIGxpc3RlbmluZyB0byB0aGUgb2xkIG9uZS4KKwkJCS8vCisJCQlpZiAoY3VycmVudFZpZXdlciAhPSBudWxsKSB7CisJCQkJY3VycmVudFZpZXdlci5yZW1vdmVTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIoc2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyKTsKKwkJCX0KKworCQkJLy8gU3RhcnQgbGlzdGVuaW5nIHRvIHRoZSBuZXcgb25lLgorCQkJLy8KKwkJCWlmICh2aWV3ZXIgIT0gbnVsbCkgeworCQkJCXZpZXdlci5hZGRTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIoc2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyKTsKKwkJCX0KKworCQkJLy8gUmVtZW1iZXIgaXQuCisJCQkvLworCQkJY3VycmVudFZpZXdlciA9IHZpZXdlcjsKKworCQkJLy8gU2V0IHRoZSBlZGl0b3JzIHNlbGVjdGlvbiBiYXNlZCBvbiB0aGUgY3VycmVudCB2aWV3ZXIncyBzZWxlY3Rpb24uCisJCQkvLworCQkJc2V0U2VsZWN0aW9uKGN1cnJlbnRWaWV3ZXIgPT0gbnVsbCA/IFN0cnVjdHVyZWRTZWxlY3Rpb24uRU1QVFkgOiBjdXJyZW50Vmlld2VyLmdldFNlbGVjdGlvbigpKTsKKwkJfQorCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyB0aGUgdmlld2VyIGFzIHJlcXVpcmVkIGJ5IHRoZSB7QGxpbmsgSVZpZXdlclByb3ZpZGVyfSBpbnRlcmZhY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFZpZXdlciBnZXRWaWV3ZXIoKSB7CisJCXJldHVybiBjdXJyZW50Vmlld2VyOworCX0KKworCS8qKgorCSAqIFRoaXMgY3JlYXRlcyBhIGNvbnRleHQgbWVudSBmb3IgdGhlIHZpZXdlciBhbmQgYWRkcyBhIGxpc3RlbmVyIGFzIHdlbGwgcmVnaXN0ZXJpbmcgdGhlIG1lbnUgZm9yIGV4dGVuc2lvbi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBjcmVhdGVDb250ZXh0TWVudUZvcihTdHJ1Y3R1cmVkVmlld2VyIHZpZXdlcikgeworCQlNZW51TWFuYWdlciBjb250ZXh0TWVudSA9IG5ldyBNZW51TWFuYWdlcigiI1BvcFVwIik7IC8vJE5PTi1OTFMtMSQKKwkJY29udGV4dE1lbnUuYWRkKG5ldyBTZXBhcmF0b3IoImFkZGl0aW9ucyIpKTsgLy8kTk9OLU5MUy0xJAorCQljb250ZXh0TWVudS5zZXRSZW1vdmVBbGxXaGVuU2hvd24odHJ1ZSk7CisJCWNvbnRleHRNZW51LmFkZE1lbnVMaXN0ZW5lcih0aGlzKTsKKwkJTWVudSBtZW51PSBjb250ZXh0TWVudS5jcmVhdGVDb250ZXh0TWVudSh2aWV3ZXIuZ2V0Q29udHJvbCgpKTsKKwkJdmlld2VyLmdldENvbnRyb2woKS5zZXRNZW51KG1lbnUpOworCQlnZXRTaXRlKCkucmVnaXN0ZXJDb250ZXh0TWVudShjb250ZXh0TWVudSwgbmV3IFVud3JhcHBpbmdTZWxlY3Rpb25Qcm92aWRlcih2aWV3ZXIpKTsKKworCQlpbnQgZG5kT3BlcmF0aW9ucyA9IERORC5EUk9QX0NPUFkgfCBETkQuRFJPUF9NT1ZFIHwgRE5ELkRST1BfTElOSzsKKwkJVHJhbnNmZXJbXSB0cmFuc2ZlcnMgPSBuZXcgVHJhbnNmZXJbXSB7IExvY2FsVHJhbnNmZXIuZ2V0SW5zdGFuY2UoKSB9OworCQl2aWV3ZXIuYWRkRHJhZ1N1cHBvcnQoZG5kT3BlcmF0aW9ucywgdHJhbnNmZXJzLCBuZXcgVmlld2VyRHJhZ0FkYXB0ZXIodmlld2VyKSk7CisJCXZpZXdlci5hZGREcm9wU3VwcG9ydChkbmRPcGVyYXRpb25zLCB0cmFuc2ZlcnMsIG5ldyBFZGl0aW5nRG9tYWluVmlld2VyRHJvcEFkYXB0ZXIoZWRpdGluZ0RvbWFpbiwgdmlld2VyKSk7CisJfQorCisJLyoqCisJICogVGhpcyBpcyB0aGUgbWV0aG9kIGNhbGxlZCB0byBsb2FkIGEgcmVzb3VyY2UgaW50byB0aGUgZWRpdGluZyBkb21haW4ncyByZXNvdXJjZSBzZXQgYmFzZWQgb24gdGhlIGVkaXRvcidzIGlucHV0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIGNyZWF0ZU1vZGVsKCkgeworCQlVUkkgcmVzb3VyY2VVUkkgPSBFZGl0VUlVdGlsLmdldFVSSShnZXRFZGl0b3JJbnB1dCgpKTsKKwkJRXhjZXB0aW9uIGV4Y2VwdGlvbiA9IG51bGw7CisJCVJlc291cmNlIHJlc291cmNlID0gbnVsbDsKKwkJdHJ5IHsKKwkJCS8vIExvYWQgdGhlIHJlc291cmNlIHRocm91Z2ggdGhlIGVkaXRpbmcgZG9tYWluLgorCQkJLy8KKwkJCXJlc291cmNlID0gZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpLmdldFJlc291cmNlKHJlc291cmNlVVJJLCB0cnVlKTsKKwkJfQorCQljYXRjaCAoRXhjZXB0aW9uIGUpIHsKKwkJCWV4Y2VwdGlvbiA9IGU7CisJCQlyZXNvdXJjZSA9IGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKS5nZXRSZXNvdXJjZShyZXNvdXJjZVVSSSwgZmFsc2UpOworCQl9CisKKwkJRGlhZ25vc3RpYyBkaWFnbm9zdGljID0gYW5hbHl6ZVJlc291cmNlUHJvYmxlbXMocmVzb3VyY2UsIGV4Y2VwdGlvbik7CisJCWlmIChkaWFnbm9zdGljLmdldFNldmVyaXR5KCkgIT0gRGlhZ25vc3RpYy5PSykgeworCQkJcmVzb3VyY2VUb0RpYWdub3N0aWNNYXAucHV0KHJlc291cmNlLCAgYW5hbHl6ZVJlc291cmNlUHJvYmxlbXMocmVzb3VyY2UsIGV4Y2VwdGlvbikpOworCQl9CisJCWVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKS5lQWRhcHRlcnMoKS5hZGQocHJvYmxlbUluZGljYXRpb25BZGFwdGVyKTsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIGEgZGlhZ25vc3RpYyBkZXNjcmliaW5nIHRoZSBlcnJvcnMgYW5kIHdhcm5pbmdzIGxpc3RlZCBpbiB0aGUgcmVzb3VyY2UKKwkgKiBhbmQgdGhlIHNwZWNpZmllZCBleGNlcHRpb24gKGlmIGFueSkuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIERpYWdub3N0aWMgYW5hbHl6ZVJlc291cmNlUHJvYmxlbXMoUmVzb3VyY2UgcmVzb3VyY2UsIEV4Y2VwdGlvbiBleGNlcHRpb24pIHsKKwkJaWYgKCFyZXNvdXJjZS5nZXRFcnJvcnMoKS5pc0VtcHR5KCkgfHwgIXJlc291cmNlLmdldFdhcm5pbmdzKCkuaXNFbXB0eSgpKSB7CisJCQlCYXNpY0RpYWdub3N0aWMgYmFzaWNEaWFnbm9zdGljID0KKwkJCQluZXcgQmFzaWNEaWFnbm9zdGljCisJCQkJCShEaWFnbm9zdGljLkVSUk9SLAorCQkJCQkgIm9yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbCIsIC8vJE5PTi1OTFMtMSQKKwkJCQkJIDAsCisJCQkJCSBnZXRTdHJpbmcoIl9VSV9DcmVhdGVNb2RlbEVycm9yX21lc3NhZ2UiLCByZXNvdXJjZS5nZXRVUkkoKSksIC8vJE5PTi1OTFMtMSQKKwkJCQkJIG5ldyBPYmplY3QgW10geyBleGNlcHRpb24gPT0gbnVsbCA/IChPYmplY3QpcmVzb3VyY2UgOiBleGNlcHRpb24gfSk7CisJCQliYXNpY0RpYWdub3N0aWMubWVyZ2UoRWNvcmVVdGlsLmNvbXB1dGVEaWFnbm9zdGljKHJlc291cmNlLCB0cnVlKSk7CisJCQlyZXR1cm4gYmFzaWNEaWFnbm9zdGljOworCQl9CisJCWVsc2UgaWYgKGV4Y2VwdGlvbiAhPSBudWxsKSB7CisJCQlyZXR1cm4KKwkJCQluZXcgQmFzaWNEaWFnbm9zdGljCisJCQkJCShEaWFnbm9zdGljLkVSUk9SLAorCQkJCQkgIm9yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbCIsIC8vJE5PTi1OTFMtMSQKKwkJCQkJIDAsCisJCQkJCSBnZXRTdHJpbmcoIl9VSV9DcmVhdGVNb2RlbEVycm9yX21lc3NhZ2UiLCByZXNvdXJjZS5nZXRVUkkoKSksIC8vJE5PTi1OTFMtMSQKKwkJCQkJIG5ldyBPYmplY3RbXSB7IGV4Y2VwdGlvbiB9KTsKKwkJfQorCQllbHNlIHsKKwkJCXJldHVybiBEaWFnbm9zdGljLk9LX0lOU1RBTkNFOworCQl9CisJfQorCisJLyoqCisJICogVGhpcyBpcyB0aGUgbWV0aG9kIHVzZWQgYnkgdGhlIGZyYW1ld29yayB0byBpbnN0YWxsIHlvdXIgb3duIGNvbnRyb2xzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGNyZWF0ZVBhZ2VzKCkgeworCQkvLyBDcmVhdGVzIHRoZSBtb2RlbCBmcm9tIHRoZSBlZGl0b3IgaW5wdXQKKwkJLy8KKwkJY3JlYXRlTW9kZWwoKTsKKworCQkvLyBPbmx5IGNyZWF0ZXMgdGhlIG90aGVyIHBhZ2VzIGlmIHRoZXJlIGlzIHNvbWV0aGluZyB0aGF0IGNhbiBiZSBlZGl0ZWQKKwkJLy8KKwkJaWYgKCFnZXRFZGl0aW5nRG9tYWluKCkuZ2V0UmVzb3VyY2VTZXQoKS5nZXRSZXNvdXJjZXMoKS5pc0VtcHR5KCkpIHsKKwkJCS8vIENyZWF0ZSBhIHBhZ2UgZm9yIHRoZSBzZWxlY3Rpb24gdHJlZSB2aWV3LgorCQkJLy8KKwkJCVRyZWUgdHJlZSA9IG5ldyBUcmVlKGdldENvbnRhaW5lcigpLCBTV1QuTVVMVEkpOworCQkJc2VsZWN0aW9uVmlld2VyID0gbmV3IFRyZWVWaWV3ZXIodHJlZSk7CisJCQlzZXRDdXJyZW50Vmlld2VyKHNlbGVjdGlvblZpZXdlcik7CisKKwkJCXNlbGVjdGlvblZpZXdlci5zZXRDb250ZW50UHJvdmlkZXIobmV3IEFkYXB0ZXJGYWN0b3J5Q29udGVudFByb3ZpZGVyKGFkYXB0ZXJGYWN0b3J5KSk7CisJCQlzZWxlY3Rpb25WaWV3ZXIuc2V0TGFiZWxQcm92aWRlcihuZXcgQWRhcHRlckZhY3RvcnlMYWJlbFByb3ZpZGVyKGFkYXB0ZXJGYWN0b3J5KSk7CisJCQlzZWxlY3Rpb25WaWV3ZXIuc2V0SW5wdXQoZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpKTsKKwkJCXNlbGVjdGlvblZpZXdlci5zZXRTZWxlY3Rpb24obmV3IFN0cnVjdHVyZWRTZWxlY3Rpb24oZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpLmdldFJlc291cmNlcygpLmdldCgwKSksIHRydWUpOworCisJCQluZXcgQWRhcHRlckZhY3RvcnlUcmVlRWRpdG9yKHNlbGVjdGlvblZpZXdlci5nZXRUcmVlKCksIGFkYXB0ZXJGYWN0b3J5KTsKKworCQkJY3JlYXRlQ29udGV4dE1lbnVGb3Ioc2VsZWN0aW9uVmlld2VyKTsKKwkJCWludCBwYWdlSW5kZXggPSBhZGRQYWdlKHRyZWUpOworCQkJc2V0UGFnZVRleHQocGFnZUluZGV4LCBnZXRTdHJpbmcoIl9VSV9TZWxlY3Rpb25QYWdlX2xhYmVsIikpOyAvLyROT04tTkxTLTEkCisKKwkJCWdldFNpdGUoKS5nZXRTaGVsbCgpLmdldERpc3BsYXkoKS5hc3luY0V4ZWMKKwkJCQkobmV3IFJ1bm5hYmxlKCkgeworCQkJCQkgcHVibGljIHZvaWQgcnVuKCkgeworCQkJCQkJIHNldEFjdGl2ZVBhZ2UoMCk7CisJCQkJCSB9CisJCQkJIH0pOworCQl9CisKKwkJLy8gRW5zdXJlcyB0aGF0IHRoaXMgZWRpdG9yIHdpbGwgb25seSBkaXNwbGF5IHRoZSBwYWdlJ3MgdGFiCisJCS8vIGFyZWEgaWYgdGhlcmUgYXJlIG1vcmUgdGhhbiBvbmUgcGFnZQorCQkvLworCQlnZXRDb250YWluZXIoKS5hZGRDb250cm9sTGlzdGVuZXIKKwkJCShuZXcgQ29udHJvbEFkYXB0ZXIoKSB7CisJCQkJYm9vbGVhbiBndWFyZCA9IGZhbHNlOworCQkJCUBPdmVycmlkZQorCQkJCXB1YmxpYyB2b2lkIGNvbnRyb2xSZXNpemVkKENvbnRyb2xFdmVudCBldmVudCkgeworCQkJCQlpZiAoIWd1YXJkKSB7CisJCQkJCQlndWFyZCA9IHRydWU7CisJCQkJCQloaWRlVGFicygpOworCQkJCQkJZ3VhcmQgPSBmYWxzZTsKKwkJCQkJfQorCQkJCX0KKwkJCSB9KTsKKworCQlnZXRTaXRlKCkuZ2V0U2hlbGwoKS5nZXREaXNwbGF5KCkuYXN5bmNFeGVjCisJCQkobmV3IFJ1bm5hYmxlKCkgeworCQkJCSBwdWJsaWMgdm9pZCBydW4oKSB7CisJCQkJCSB1cGRhdGVQcm9ibGVtSW5kaWNhdGlvbigpOworCQkJCSB9CisJCQkgfSk7CisJfQorCisJLyoqCisJICogSWYgdGhlcmUgaXMganVzdCBvbmUgcGFnZSBpbiB0aGUgbXVsdGktcGFnZSBlZGl0b3IgcGFydCwKKwkgKiB0aGlzIGhpZGVzIHRoZSBzaW5nbGUgdGFiIGF0IHRoZSBib3R0b20uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgaGlkZVRhYnMoKSB7CisJCWlmIChnZXRQYWdlQ291bnQoKSA8PSAxKSB7CisJCQlzZXRQYWdlVGV4dCgwLCAiIik7IC8vJE5PTi1OTFMtMSQKKwkJCWlmIChnZXRDb250YWluZXIoKSBpbnN0YW5jZW9mIENUYWJGb2xkZXIpIHsKKwkJCQkoKENUYWJGb2xkZXIpZ2V0Q29udGFpbmVyKCkpLnNldFRhYkhlaWdodCgxKTsKKwkJCQlQb2ludCBwb2ludCA9IGdldENvbnRhaW5lcigpLmdldFNpemUoKTsKKwkJCQlnZXRDb250YWluZXIoKS5zZXRTaXplKHBvaW50LngsIHBvaW50LnkgKyA2KTsKKwkJCX0KKwkJfQorCX0KKworCS8qKgorCSAqIElmIHRoZXJlIGlzIG1vcmUgdGhhbiBvbmUgcGFnZSBpbiB0aGUgbXVsdGktcGFnZSBlZGl0b3IgcGFydCwKKwkgKiB0aGlzIHNob3dzIHRoZSB0YWJzIGF0IHRoZSBib3R0b20uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgc2hvd1RhYnMoKSB7CisJCWlmIChnZXRQYWdlQ291bnQoKSA+IDEpIHsKKwkJCXNldFBhZ2VUZXh0KDAsIGdldFN0cmluZygiX1VJX1NlbGVjdGlvblBhZ2VfbGFiZWwiKSk7IC8vJE5PTi1OTFMtMSQKKwkJCWlmIChnZXRDb250YWluZXIoKSBpbnN0YW5jZW9mIENUYWJGb2xkZXIpIHsKKwkJCQkoKENUYWJGb2xkZXIpZ2V0Q29udGFpbmVyKCkpLnNldFRhYkhlaWdodChTV1QuREVGQVVMVCk7CisJCQkJUG9pbnQgcG9pbnQgPSBnZXRDb250YWluZXIoKS5nZXRTaXplKCk7CisJCQkJZ2V0Q29udGFpbmVyKCkuc2V0U2l6ZShwb2ludC54LCBwb2ludC55IC0gNik7CisJCQl9CisJCX0KKwl9CisKKwkvKioKKwkgKiBUaGlzIGlzIHVzZWQgdG8gdHJhY2sgdGhlIGFjdGl2ZSB2aWV3ZXIuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgcGFnZUNoYW5nZShpbnQgcGFnZUluZGV4KSB7CisJCXN1cGVyLnBhZ2VDaGFuZ2UocGFnZUluZGV4KTsKKworCQlpZiAoY29udGVudE91dGxpbmVQYWdlICE9IG51bGwpIHsKKwkJCWhhbmRsZUNvbnRlbnRPdXRsaW5lU2VsZWN0aW9uKGNvbnRlbnRPdXRsaW5lUGFnZS5nZXRTZWxlY3Rpb24oKSk7CisJCX0KKwl9CisKKwkvKioKKwkgKiBUaGlzIGlzIGhvdyB0aGUgZnJhbWV3b3JrIGRldGVybWluZXMgd2hpY2ggaW50ZXJmYWNlcyB3ZSBpbXBsZW1lbnQuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQFN1cHByZXNzV2FybmluZ3MoInVuY2hlY2tlZCIpCisJCUBPdmVycmlkZQorCXB1YmxpYyBPYmplY3QgZ2V0QWRhcHRlcihDbGFzcyBrZXkpIHsKKwkJaWYgKGtleS5lcXVhbHMoSUNvbnRlbnRPdXRsaW5lUGFnZS5jbGFzcykpIHsKKwkJCXJldHVybiBzaG93T3V0bGluZVZpZXcoKSA/IGdldENvbnRlbnRPdXRsaW5lUGFnZSgpIDogbnVsbDsKKwkJfQorCQllbHNlIGlmIChrZXkuZXF1YWxzKElQcm9wZXJ0eVNoZWV0UGFnZS5jbGFzcykpIHsKKwkJCXJldHVybiBnZXRQcm9wZXJ0eVNoZWV0UGFnZSgpOworCQl9CisJCWVsc2UgaWYgKGtleS5lcXVhbHMoSUdvdG9NYXJrZXIuY2xhc3MpKSB7CisJCQlyZXR1cm4gdGhpczsKKwkJfQorCQllbHNlIHsKKwkJCXJldHVybiBzdXBlci5nZXRBZGFwdGVyKGtleSk7CisJCX0KKwl9CisKKwkvKioKKwkgKiBUaGlzIGFjY2Vzc2VzIGEgY2FjaGVkIHZlcnNpb24gb2YgdGhlIGNvbnRlbnQgb3V0bGluZXIuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIElDb250ZW50T3V0bGluZVBhZ2UgZ2V0Q29udGVudE91dGxpbmVQYWdlKCkgeworCQlpZiAoY29udGVudE91dGxpbmVQYWdlID09IG51bGwpIHsKKwkJCS8vIFRoZSBjb250ZW50IG91dGxpbmUgaXMganVzdCBhIHRyZWUuCisJCQkvLworCQkJY2xhc3MgTXlDb250ZW50T3V0bGluZVBhZ2UgZXh0ZW5kcyBDb250ZW50T3V0bGluZVBhZ2UgeworCQkJCUBPdmVycmlkZQorCQkJCXB1YmxpYyB2b2lkIGNyZWF0ZUNvbnRyb2woQ29tcG9zaXRlIHBhcmVudCkgeworCQkJCQlzdXBlci5jcmVhdGVDb250cm9sKHBhcmVudCk7CisJCQkJCWNvbnRlbnRPdXRsaW5lVmlld2VyID0gZ2V0VHJlZVZpZXdlcigpOworCQkJCQljb250ZW50T3V0bGluZVZpZXdlci5hZGRTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIodGhpcyk7CisKKwkJCQkJLy8gU2V0IHVwIHRoZSB0cmVlIHZpZXdlci4KKwkJCQkJLy8KKwkJCQkJY29udGVudE91dGxpbmVWaWV3ZXIuc2V0Q29udGVudFByb3ZpZGVyKG5ldyBBZGFwdGVyRmFjdG9yeUNvbnRlbnRQcm92aWRlcihhZGFwdGVyRmFjdG9yeSkpOworCQkJCQljb250ZW50T3V0bGluZVZpZXdlci5zZXRMYWJlbFByb3ZpZGVyKG5ldyBBZGFwdGVyRmFjdG9yeUxhYmVsUHJvdmlkZXIoYWRhcHRlckZhY3RvcnkpKTsKKwkJCQkJY29udGVudE91dGxpbmVWaWV3ZXIuc2V0SW5wdXQoZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpKTsKKworCQkJCQkvLyBNYWtlIHN1cmUgb3VyIHBvcHVwcyB3b3JrLgorCQkJCQkvLworCQkJCQljcmVhdGVDb250ZXh0TWVudUZvcihjb250ZW50T3V0bGluZVZpZXdlcik7CisKKwkJCQkJaWYgKCFlZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkuZ2V0UmVzb3VyY2VzKCkuaXNFbXB0eSgpKSB7CisJCQkJCSAgLy8gU2VsZWN0IHRoZSByb290IG9iamVjdCBpbiB0aGUgdmlldy4KKwkJCQkJICAvLworCQkJCQkgIGNvbnRlbnRPdXRsaW5lVmlld2VyLnNldFNlbGVjdGlvbihuZXcgU3RydWN0dXJlZFNlbGVjdGlvbihlZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkuZ2V0UmVzb3VyY2VzKCkuZ2V0KDApKSwgdHJ1ZSk7CisJCQkJCX0KKwkJCQl9CisKKwkJCQlAT3ZlcnJpZGUKKwkJCQlwdWJsaWMgdm9pZCBtYWtlQ29udHJpYnV0aW9ucyhJTWVudU1hbmFnZXIgbWVudU1hbmFnZXIsIElUb29sQmFyTWFuYWdlciB0b29sQmFyTWFuYWdlciwgSVN0YXR1c0xpbmVNYW5hZ2VyIHN0YXR1c0xpbmVNYW5hZ2VyKSB7CisJCQkJCXN1cGVyLm1ha2VDb250cmlidXRpb25zKG1lbnVNYW5hZ2VyLCB0b29sQmFyTWFuYWdlciwgc3RhdHVzTGluZU1hbmFnZXIpOworCQkJCQljb250ZW50T3V0bGluZVN0YXR1c0xpbmVNYW5hZ2VyID0gc3RhdHVzTGluZU1hbmFnZXI7CisJCQkJfQorCisJCQkJQE92ZXJyaWRlCisJCQkJcHVibGljIHZvaWQgc2V0QWN0aW9uQmFycyhJQWN0aW9uQmFycyBhY3Rpb25CYXJzKSB7CisJCQkJCXN1cGVyLnNldEFjdGlvbkJhcnMoYWN0aW9uQmFycyk7CisJCQkJCWdldEFjdGlvbkJhckNvbnRyaWJ1dG9yKCkuc2hhcmVHbG9iYWxBY3Rpb25zKHRoaXMsIGFjdGlvbkJhcnMpOworCQkJCX0KKwkJCX0KKworCQkJY29udGVudE91dGxpbmVQYWdlID0gbmV3IE15Q29udGVudE91dGxpbmVQYWdlKCk7CisKKwkJCS8vIExpc3RlbiB0byBzZWxlY3Rpb24gc28gdGhhdCB3ZSBjYW4gaGFuZGxlIGl0IGlzIGEgc3BlY2lhbCB3YXkuCisJCQkvLworCQkJY29udGVudE91dGxpbmVQYWdlLmFkZFNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcgorCQkJCShuZXcgSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcigpIHsKKwkJCQkJIC8vIFRoaXMgZW5zdXJlcyB0aGF0IHdlIGhhbmRsZSBzZWxlY3Rpb25zIGNvcnJlY3RseS4KKwkJCQkJIC8vCisJCQkJCSBwdWJsaWMgdm9pZCBzZWxlY3Rpb25DaGFuZ2VkKFNlbGVjdGlvbkNoYW5nZWRFdmVudCBldmVudCkgeworCQkJCQkJIGhhbmRsZUNvbnRlbnRPdXRsaW5lU2VsZWN0aW9uKGV2ZW50LmdldFNlbGVjdGlvbigpKTsKKwkJCQkJIH0KKwkJCQkgfSk7CisJCX0KKworCQlyZXR1cm4gY29udGVudE91dGxpbmVQYWdlOworCX0KKworCS8qKgorCSAqIFRoaXMgYWNjZXNzZXMgYSBjYWNoZWQgdmVyc2lvbiBvZiB0aGUgcHJvcGVydHkgc2hlZXQuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIElQcm9wZXJ0eVNoZWV0UGFnZSBnZXRQcm9wZXJ0eVNoZWV0UGFnZSgpIHsKKwkJaWYgKHByb3BlcnR5U2hlZXRQYWdlID09IG51bGwpIHsKKwkJCXByb3BlcnR5U2hlZXRQYWdlID0KKwkJCQluZXcgRXh0ZW5kZWRQcm9wZXJ0eVNoZWV0UGFnZShlZGl0aW5nRG9tYWluKSB7CisJCQkJCUBPdmVycmlkZQorCQkJCQlwdWJsaWMgdm9pZCBzZXRTZWxlY3Rpb25Ub1ZpZXdlcihMaXN0PD8+IHNlbGVjdGlvbikgeworCQkJCQkJRGVjb3JhdG9yc0VkaXRvci50aGlzLnNldFNlbGVjdGlvblRvVmlld2VyKHNlbGVjdGlvbik7CisJCQkJCQlEZWNvcmF0b3JzRWRpdG9yLnRoaXMuc2V0Rm9jdXMoKTsKKwkJCQkJfQorCisJCQkJCUBPdmVycmlkZQorCQkJCQlwdWJsaWMgdm9pZCBzZXRBY3Rpb25CYXJzKElBY3Rpb25CYXJzIGFjdGlvbkJhcnMpIHsKKwkJCQkJCXN1cGVyLnNldEFjdGlvbkJhcnMoYWN0aW9uQmFycyk7CisJCQkJCQlnZXRBY3Rpb25CYXJDb250cmlidXRvcigpLnNoYXJlR2xvYmFsQWN0aW9ucyh0aGlzLCBhY3Rpb25CYXJzKTsKKwkJCQkJfQorCQkJCX07CisJCQlwcm9wZXJ0eVNoZWV0UGFnZS5zZXRQcm9wZXJ0eVNvdXJjZVByb3ZpZGVyKG5ldyBBZGFwdGVyRmFjdG9yeUNvbnRlbnRQcm92aWRlcihhZGFwdGVyRmFjdG9yeSkpOworCQl9CisKKwkJcmV0dXJuIHByb3BlcnR5U2hlZXRQYWdlOworCX0KKworCS8qKgorCSAqIFRoaXMgZGVhbHMgd2l0aCBob3cgd2Ugd2FudCBzZWxlY3Rpb24gaW4gdGhlIG91dGxpbmVyIHRvIGFmZmVjdCB0aGUgb3RoZXIgdmlld3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgaGFuZGxlQ29udGVudE91dGxpbmVTZWxlY3Rpb24oSVNlbGVjdGlvbiBzZWxlY3Rpb24pIHsKKwkJaWYgKHNlbGVjdGlvblZpZXdlciAhPSBudWxsICYmICFzZWxlY3Rpb24uaXNFbXB0eSgpICYmIHNlbGVjdGlvbiBpbnN0YW5jZW9mIElTdHJ1Y3R1cmVkU2VsZWN0aW9uKSB7CisJCQlJdGVyYXRvcjw/PiBzZWxlY3RlZEVsZW1lbnRzID0gKChJU3RydWN0dXJlZFNlbGVjdGlvbilzZWxlY3Rpb24pLml0ZXJhdG9yKCk7CisJCQlpZiAoc2VsZWN0ZWRFbGVtZW50cy5oYXNOZXh0KCkpIHsKKwkJCQkvLyBHZXQgdGhlIGZpcnN0IHNlbGVjdGVkIGVsZW1lbnQuCisJCQkJLy8KKwkJCQlPYmplY3Qgc2VsZWN0ZWRFbGVtZW50ID0gc2VsZWN0ZWRFbGVtZW50cy5uZXh0KCk7CisKKwkJCQlBcnJheUxpc3Q8T2JqZWN0PiBzZWxlY3Rpb25MaXN0ID0gbmV3IEFycmF5TGlzdDxPYmplY3Q+KCk7CisJCQkJc2VsZWN0aW9uTGlzdC5hZGQoc2VsZWN0ZWRFbGVtZW50KTsKKwkJCQl3aGlsZSAoc2VsZWN0ZWRFbGVtZW50cy5oYXNOZXh0KCkpIHsKKwkJCQkJc2VsZWN0aW9uTGlzdC5hZGQoc2VsZWN0ZWRFbGVtZW50cy5uZXh0KCkpOworCQkJCX0KKworCQkJCS8vIFNldCB0aGUgc2VsZWN0aW9uIHRvIHRoZSB3aWRnZXQuCisJCQkJLy8KKwkJCQlzZWxlY3Rpb25WaWV3ZXIuc2V0U2VsZWN0aW9uKG5ldyBTdHJ1Y3R1cmVkU2VsZWN0aW9uKHNlbGVjdGlvbkxpc3QpKTsKKwkJCX0KKwkJfQorCX0KKworCS8qKgorCSAqIFRoaXMgaXMgZm9yIGltcGxlbWVudGluZyB7QGxpbmsgSUVkaXRvclBhcnR9IGFuZCBzaW1wbHkgdGVzdHMgdGhlIGNvbW1hbmQgc3RhY2suCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIGJvb2xlYW4gaXNEaXJ0eSgpIHsKKwkJcmV0dXJuICgoQmFzaWNDb21tYW5kU3RhY2spZWRpdGluZ0RvbWFpbi5nZXRDb21tYW5kU3RhY2soKSkuaXNTYXZlTmVlZGVkKCk7CisJfQorCisJLyoqCisJICogVGhpcyBpcyBmb3IgaW1wbGVtZW50aW5nIHtAbGluayBJRWRpdG9yUGFydH0gYW5kIHNpbXBseSBzYXZlcyB0aGUgbW9kZWwgZmlsZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBkb1NhdmUoSVByb2dyZXNzTW9uaXRvciBwcm9ncmVzc01vbml0b3IpIHsKKwkJLy8gU2F2ZSBvbmx5IHJlc291cmNlcyB0aGF0IGhhdmUgYWN0dWFsbHkgY2hhbmdlZC4KKwkJLy8KKwkJZmluYWwgTWFwPE9iamVjdCwgT2JqZWN0PiBzYXZlT3B0aW9ucyA9IG5ldyBIYXNoTWFwPE9iamVjdCwgT2JqZWN0PigpOworCQlzYXZlT3B0aW9ucy5wdXQoUmVzb3VyY2UuT1BUSU9OX1NBVkVfT05MWV9JRl9DSEFOR0VELCBSZXNvdXJjZS5PUFRJT05fU0FWRV9PTkxZX0lGX0NIQU5HRURfTUVNT1JZX0JVRkZFUik7CisKKwkJLy8gRG8gdGhlIHdvcmsgd2l0aGluIGFuIG9wZXJhdGlvbiBiZWNhdXNlIHRoaXMgaXMgYSBsb25nIHJ1bm5pbmcgYWN0aXZpdHkgdGhhdCBtb2RpZmllcyB0aGUgd29ya2JlbmNoLgorCQkvLworCQlXb3Jrc3BhY2VNb2RpZnlPcGVyYXRpb24gb3BlcmF0aW9uID0KKwkJCW5ldyBXb3Jrc3BhY2VNb2RpZnlPcGVyYXRpb24oKSB7CisJCQkJLy8gVGhpcyBpcyB0aGUgbWV0aG9kIHRoYXQgZ2V0cyBpbnZva2VkIHdoZW4gdGhlIG9wZXJhdGlvbiBydW5zLgorCQkJCS8vCisJCQkJQE92ZXJyaWRlCisJCQkJcHVibGljIHZvaWQgZXhlY3V0ZShJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IpIHsKKwkJCQkJLy8gU2F2ZSB0aGUgcmVzb3VyY2VzIHRvIHRoZSBmaWxlIHN5c3RlbS4KKwkJCQkJLy8KKwkJCQkJYm9vbGVhbiBmaXJzdCA9IHRydWU7CisJCQkJCWZvciAoUmVzb3VyY2UgcmVzb3VyY2UgOiBlZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkuZ2V0UmVzb3VyY2VzKCkpIHsKKwkJCQkJCWlmICgoZmlyc3QgfHwgIXJlc291cmNlLmdldENvbnRlbnRzKCkuaXNFbXB0eSgpIHx8IGlzUGVyc2lzdGVkKHJlc291cmNlKSkgJiYgIWVkaXRpbmdEb21haW4uaXNSZWFkT25seShyZXNvdXJjZSkpIHsKKwkJCQkJCQl0cnkgeworCQkJCQkJCQlsb25nIHRpbWVTdGFtcCA9IHJlc291cmNlLmdldFRpbWVTdGFtcCgpOworCQkJCQkJCQlyZXNvdXJjZS5zYXZlKHNhdmVPcHRpb25zKTsKKwkJCQkJCQkJaWYgKHJlc291cmNlLmdldFRpbWVTdGFtcCgpICE9IHRpbWVTdGFtcCkgeworCQkJCQkJCQkJc2F2ZWRSZXNvdXJjZXMuYWRkKHJlc291cmNlKTsKKwkJCQkJCQkJfQorCQkJCQkJCX0KKwkJCQkJCQljYXRjaCAoRXhjZXB0aW9uIGV4Y2VwdGlvbikgeworCQkJCQkJCQlyZXNvdXJjZVRvRGlhZ25vc3RpY01hcC5wdXQocmVzb3VyY2UsIGFuYWx5emVSZXNvdXJjZVByb2JsZW1zKHJlc291cmNlLCBleGNlcHRpb24pKTsKKwkJCQkJCQl9CisJCQkJCQkJZmlyc3QgPSBmYWxzZTsKKwkJCQkJCX0KKwkJCQkJfQorCQkJCX0KKwkJCX07CisKKwkJdXBkYXRlUHJvYmxlbUluZGljYXRpb24gPSBmYWxzZTsKKwkJdHJ5IHsKKwkJCS8vIFRoaXMgcnVucyB0aGUgb3B0aW9ucywgYW5kIHNob3dzIHByb2dyZXNzLgorCQkJLy8KKwkJCW5ldyBQcm9ncmVzc01vbml0b3JEaWFsb2coZ2V0U2l0ZSgpLmdldFNoZWxsKCkpLnJ1bih0cnVlLCBmYWxzZSwgb3BlcmF0aW9uKTsKKworCQkJLy8gUmVmcmVzaCB0aGUgbmVjZXNzYXJ5IHN0YXRlLgorCQkJLy8KKwkJCSgoQmFzaWNDb21tYW5kU3RhY2spZWRpdGluZ0RvbWFpbi5nZXRDb21tYW5kU3RhY2soKSkuc2F2ZUlzRG9uZSgpOworCQkJZmlyZVByb3BlcnR5Q2hhbmdlKElFZGl0b3JQYXJ0LlBST1BfRElSVFkpOworCQl9CisJCWNhdGNoIChFeGNlcHRpb24gZXhjZXB0aW9uKSB7CisJCQkvLyBTb21ldGhpbmcgd2VudCB3cm9uZyB0aGF0IHNob3VsZG4ndC4KKwkJCS8vCisJCQlUZXN0dXRpbGl0eUVkaXRQbHVnaW4uSU5TVEFOQ0UubG9nKGV4Y2VwdGlvbik7CisJCX0KKwkJdXBkYXRlUHJvYmxlbUluZGljYXRpb24gPSB0cnVlOworCQl1cGRhdGVQcm9ibGVtSW5kaWNhdGlvbigpOworCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyB3aGV0aGVyIHNvbWV0aGluZyBoYXMgYmVlbiBwZXJzaXN0ZWQgdG8gdGhlIFVSSSBvZiB0aGUgc3BlY2lmaWVkIHJlc291cmNlLgorCSAqIFRoZSBpbXBsZW1lbnRhdGlvbiB1c2VzIHRoZSBVUkkgY29udmVydGVyIGZyb20gdGhlIGVkaXRvcidzIHJlc291cmNlIHNldCB0byB0cnkgdG8gb3BlbiBhbiBpbnB1dCBzdHJlYW0uIAorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBib29sZWFuIGlzUGVyc2lzdGVkKFJlc291cmNlIHJlc291cmNlKSB7CisJCWJvb2xlYW4gcmVzdWx0ID0gZmFsc2U7CisJCXRyeSB7CisJCQlJbnB1dFN0cmVhbSBzdHJlYW0gPSBlZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkuZ2V0VVJJQ29udmVydGVyKCkuY3JlYXRlSW5wdXRTdHJlYW0ocmVzb3VyY2UuZ2V0VVJJKCkpOworCQkJaWYgKHN0cmVhbSAhPSBudWxsKSB7CisJCQkJcmVzdWx0ID0gdHJ1ZTsKKwkJCQlzdHJlYW0uY2xvc2UoKTsKKwkJCX0KKwkJfQorCQljYXRjaCAoSU9FeGNlcHRpb24gZSkgeworCQkJLy8gSWdub3JlCisJCX0KKwkJcmV0dXJuIHJlc3VsdDsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFsd2F5cyByZXR1cm5zIHRydWUgYmVjYXVzZSBpdCBpcyBub3QgY3VycmVudGx5IHN1cHBvcnRlZC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgYm9vbGVhbiBpc1NhdmVBc0FsbG93ZWQoKSB7CisJCXJldHVybiB0cnVlOworCX0KKworCS8qKgorCSAqIFRoaXMgYWxzbyBjaGFuZ2VzIHRoZSBlZGl0b3IncyBpbnB1dC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBkb1NhdmVBcygpIHsKKwkJU2F2ZUFzRGlhbG9nIHNhdmVBc0RpYWxvZyA9IG5ldyBTYXZlQXNEaWFsb2coZ2V0U2l0ZSgpLmdldFNoZWxsKCkpOworCQlzYXZlQXNEaWFsb2cub3BlbigpOworCQlJUGF0aCBwYXRoID0gc2F2ZUFzRGlhbG9nLmdldFJlc3VsdCgpOworCQlpZiAocGF0aCAhPSBudWxsKSB7CisJCQlJRmlsZSBmaWxlID0gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmdldFJvb3QoKS5nZXRGaWxlKHBhdGgpOworCQkJaWYgKGZpbGUgIT0gbnVsbCkgeworCQkJCWRvU2F2ZUFzKFVSSS5jcmVhdGVQbGF0Zm9ybVJlc291cmNlVVJJKGZpbGUuZ2V0RnVsbFBhdGgoKS50b1N0cmluZygpLCB0cnVlKSwgbmV3IEZpbGVFZGl0b3JJbnB1dChmaWxlKSk7CisJCQl9CisJCX0KKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBkb1NhdmVBcyhVUkkgdXJpLCBJRWRpdG9ySW5wdXQgZWRpdG9ySW5wdXQpIHsKKwkJKGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKS5nZXRSZXNvdXJjZXMoKS5nZXQoMCkpLnNldFVSSSh1cmkpOworCQlzZXRJbnB1dFdpdGhOb3RpZnkoZWRpdG9ySW5wdXQpOworCQlzZXRQYXJ0TmFtZShlZGl0b3JJbnB1dC5nZXROYW1lKCkpOworCQlJUHJvZ3Jlc3NNb25pdG9yIHByb2dyZXNzTW9uaXRvciA9CisJCQlnZXRBY3Rpb25CYXJzKCkuZ2V0U3RhdHVzTGluZU1hbmFnZXIoKSAhPSBudWxsID8KKwkJCQlnZXRBY3Rpb25CYXJzKCkuZ2V0U3RhdHVzTGluZU1hbmFnZXIoKS5nZXRQcm9ncmVzc01vbml0b3IoKSA6CisJCQkJbmV3IE51bGxQcm9ncmVzc01vbml0b3IoKTsKKwkJZG9TYXZlKHByb2dyZXNzTW9uaXRvcik7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgZ290b01hcmtlcihJTWFya2VyIG1hcmtlcikgeworCQl0cnkgeworCQkJaWYgKG1hcmtlci5nZXRUeXBlKCkuZXF1YWxzKEVWYWxpZGF0b3IuTUFSS0VSKSkgeworCQkJCVN0cmluZyB1cmlBdHRyaWJ1dGUgPSBtYXJrZXIuZ2V0QXR0cmlidXRlKEVWYWxpZGF0b3IuVVJJX0FUVFJJQlVURSwgbnVsbCk7CisJCQkJaWYgKHVyaUF0dHJpYnV0ZSAhPSBudWxsKSB7CisJCQkJCVVSSSB1cmkgPSBVUkkuY3JlYXRlVVJJKHVyaUF0dHJpYnV0ZSk7CisJCQkJCUVPYmplY3QgZU9iamVjdCA9IGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKS5nZXRFT2JqZWN0KHVyaSwgdHJ1ZSk7CisJCQkJCWlmIChlT2JqZWN0ICE9IG51bGwpIHsKKwkJCQkJICBzZXRTZWxlY3Rpb25Ub1ZpZXdlcihDb2xsZWN0aW9ucy5zaW5nbGV0b24oZWRpdGluZ0RvbWFpbi5nZXRXcmFwcGVyKGVPYmplY3QpKSk7CisJCQkJCX0KKwkJCQl9CisJCQl9CisJCX0KKwkJY2F0Y2ggKENvcmVFeGNlcHRpb24gZXhjZXB0aW9uKSB7CisJCQlUZXN0dXRpbGl0eUVkaXRQbHVnaW4uSU5TVEFOQ0UubG9nKGV4Y2VwdGlvbik7CisJCX0KKwl9CisKKwkvKioKKwkgKiBUaGlzIGlzIGNhbGxlZCBkdXJpbmcgc3RhcnR1cC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBpbml0KElFZGl0b3JTaXRlIHNpdGUsIElFZGl0b3JJbnB1dCBlZGl0b3JJbnB1dCkgeworCQlzZXRTaXRlKHNpdGUpOworCQlzZXRJbnB1dFdpdGhOb3RpZnkoZWRpdG9ySW5wdXQpOworCQlzZXRQYXJ0TmFtZShlZGl0b3JJbnB1dC5nZXROYW1lKCkpOworCQlzaXRlLnNldFNlbGVjdGlvblByb3ZpZGVyKHRoaXMpOworCQlzaXRlLmdldFBhZ2UoKS5hZGRQYXJ0TGlzdGVuZXIocGFydExpc3RlbmVyKTsKKwkJUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmFkZFJlc291cmNlQ2hhbmdlTGlzdGVuZXIocmVzb3VyY2VDaGFuZ2VMaXN0ZW5lciwgSVJlc291cmNlQ2hhbmdlRXZlbnQuUE9TVF9DSEFOR0UpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIHNldEZvY3VzKCkgeworCQlnZXRDb250cm9sKGdldEFjdGl2ZVBhZ2UoKSkuc2V0Rm9jdXMoKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGltcGxlbWVudHMge0BsaW5rIG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvblByb3ZpZGVyfS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBhZGRTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIoSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lciBsaXN0ZW5lcikgeworCQlzZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXJzLmFkZChsaXN0ZW5lcik7CisJfQorCisJLyoqCisJICogVGhpcyBpbXBsZW1lbnRzIHtAbGluayBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb25Qcm92aWRlcn0uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgcmVtb3ZlU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyKElTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIgbGlzdGVuZXIpIHsKKwkJc2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVycy5yZW1vdmUobGlzdGVuZXIpOworCX0KKworCS8qKgorCSAqIFRoaXMgaW1wbGVtZW50cyB7QGxpbmsgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uUHJvdmlkZXJ9IHRvIHJldHVybiB0aGlzIGVkaXRvcidzIG92ZXJhbGwgc2VsZWN0aW9uLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBJU2VsZWN0aW9uIGdldFNlbGVjdGlvbigpIHsKKwkJcmV0dXJuIGVkaXRvclNlbGVjdGlvbjsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGltcGxlbWVudHMge0BsaW5rIG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvblByb3ZpZGVyfSB0byBzZXQgdGhpcyBlZGl0b3IncyBvdmVyYWxsIHNlbGVjdGlvbi4KKwkgKiBDYWxsaW5nIHRoaXMgcmVzdWx0IHdpbGwgbm90aWZ5IHRoZSBsaXN0ZW5lcnMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgc2V0U2VsZWN0aW9uKElTZWxlY3Rpb24gc2VsZWN0aW9uKSB7CisJCWVkaXRvclNlbGVjdGlvbiA9IHNlbGVjdGlvbjsKKworCQlmb3IgKElTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIgbGlzdGVuZXIgOiBzZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXJzKSB7CisJCQlsaXN0ZW5lci5zZWxlY3Rpb25DaGFuZ2VkKG5ldyBTZWxlY3Rpb25DaGFuZ2VkRXZlbnQodGhpcywgc2VsZWN0aW9uKSk7CisJCX0KKwkJc2V0U3RhdHVzTGluZU1hbmFnZXIoc2VsZWN0aW9uKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRTdGF0dXNMaW5lTWFuYWdlcihJU2VsZWN0aW9uIHNlbGVjdGlvbikgeworCQlJU3RhdHVzTGluZU1hbmFnZXIgc3RhdHVzTGluZU1hbmFnZXIgPSBjdXJyZW50Vmlld2VyICE9IG51bGwgJiYgY3VycmVudFZpZXdlciA9PSBjb250ZW50T3V0bGluZVZpZXdlciA/CisJCQljb250ZW50T3V0bGluZVN0YXR1c0xpbmVNYW5hZ2VyIDogZ2V0QWN0aW9uQmFycygpLmdldFN0YXR1c0xpbmVNYW5hZ2VyKCk7CisKKwkJaWYgKHN0YXR1c0xpbmVNYW5hZ2VyICE9IG51bGwpIHsKKwkJCWlmIChzZWxlY3Rpb24gaW5zdGFuY2VvZiBJU3RydWN0dXJlZFNlbGVjdGlvbikgeworCQkJCUNvbGxlY3Rpb248Pz4gY29sbGVjdGlvbiA9ICgoSVN0cnVjdHVyZWRTZWxlY3Rpb24pc2VsZWN0aW9uKS50b0xpc3QoKTsKKwkJCQlzd2l0Y2ggKGNvbGxlY3Rpb24uc2l6ZSgpKSB7CisJCQkJCWNhc2UgMDogeworCQkJCQkJc3RhdHVzTGluZU1hbmFnZXIuc2V0TWVzc2FnZShnZXRTdHJpbmcoIl9VSV9Ob09iamVjdFNlbGVjdGVkIikpOyAvLyROT04tTkxTLTEkCisJCQkJCQlicmVhazsKKwkJCQkJfQorCQkJCQljYXNlIDE6IHsKKwkJCQkJCVN0cmluZyB0ZXh0ID0gbmV3IEFkYXB0ZXJGYWN0b3J5SXRlbURlbGVnYXRvcihhZGFwdGVyRmFjdG9yeSkuZ2V0VGV4dChjb2xsZWN0aW9uLml0ZXJhdG9yKCkubmV4dCgpKTsKKwkJCQkJCXN0YXR1c0xpbmVNYW5hZ2VyLnNldE1lc3NhZ2UoZ2V0U3RyaW5nKCJfVUlfU2luZ2xlT2JqZWN0U2VsZWN0ZWQiLCB0ZXh0KSk7IC8vJE5PTi1OTFMtMSQKKwkJCQkJCWJyZWFrOworCQkJCQl9CisJCQkJCWRlZmF1bHQ6IHsKKwkJCQkJCXN0YXR1c0xpbmVNYW5hZ2VyLnNldE1lc3NhZ2UoZ2V0U3RyaW5nKCJfVUlfTXVsdGlPYmplY3RTZWxlY3RlZCIsIEludGVnZXIudG9TdHJpbmcoY29sbGVjdGlvbi5zaXplKCkpKSk7IC8vJE5PTi1OTFMtMSQKKwkJCQkJCWJyZWFrOworCQkJCQl9CisJCQkJfQorCQkJfQorCQkJZWxzZSB7CisJCQkJc3RhdHVzTGluZU1hbmFnZXIuc2V0TWVzc2FnZSgiIik7IC8vJE5PTi1OTFMtMSQKKwkJCX0KKwkJfQorCX0KKworCS8qKgorCSAqIFRoaXMgbG9va3MgdXAgYSBzdHJpbmcgaW4gdGhlIHBsdWdpbidzIHBsdWdpbi5wcm9wZXJ0aWVzIGZpbGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIGdldFN0cmluZyhTdHJpbmcga2V5KSB7CisJCXJldHVybiBUZXN0dXRpbGl0eUVkaXRQbHVnaW4uSU5TVEFOQ0UuZ2V0U3RyaW5nKGtleSk7CisJfQorCisJLyoqCisJICogVGhpcyBsb29rcyB1cCBhIHN0cmluZyBpbiBwbHVnaW4ucHJvcGVydGllcywgbWFraW5nIGEgc3Vic3RpdHV0aW9uLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByaXZhdGUgc3RhdGljIFN0cmluZyBnZXRTdHJpbmcoU3RyaW5nIGtleSwgT2JqZWN0IHMxKSB7CisJCXJldHVybiBUZXN0dXRpbGl0eUVkaXRQbHVnaW4uSU5TVEFOQ0UuZ2V0U3RyaW5nKGtleSwgbmV3IE9iamVjdCBbXSB7IHMxIH0pOworCX0KKworCS8qKgorCSAqIFRoaXMgaW1wbGVtZW50cyB7QGxpbmsgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklNZW51TGlzdGVuZXJ9IHRvIGhlbHAgZmlsbCB0aGUgY29udGV4dCBtZW51cyB3aXRoIGNvbnRyaWJ1dGlvbnMgZnJvbSB0aGUgRWRpdCBtZW51LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIG1lbnVBYm91dFRvU2hvdyhJTWVudU1hbmFnZXIgbWVudU1hbmFnZXIpIHsKKwkJKChJTWVudUxpc3RlbmVyKWdldEVkaXRvclNpdGUoKS5nZXRBY3Rpb25CYXJDb250cmlidXRvcigpKS5tZW51QWJvdXRUb1Nob3cobWVudU1hbmFnZXIpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFZGl0aW5nRG9tYWluQWN0aW9uQmFyQ29udHJpYnV0b3IgZ2V0QWN0aW9uQmFyQ29udHJpYnV0b3IoKSB7CisJCXJldHVybiAoRWRpdGluZ0RvbWFpbkFjdGlvbkJhckNvbnRyaWJ1dG9yKWdldEVkaXRvclNpdGUoKS5nZXRBY3Rpb25CYXJDb250cmlidXRvcigpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBJQWN0aW9uQmFycyBnZXRBY3Rpb25CYXJzKCkgeworCQlyZXR1cm4gZ2V0QWN0aW9uQmFyQ29udHJpYnV0b3IoKS5nZXRBY3Rpb25CYXJzKCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEFkYXB0ZXJGYWN0b3J5IGdldEFkYXB0ZXJGYWN0b3J5KCkgeworCQlyZXR1cm4gYWRhcHRlckZhY3Rvcnk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgZGlzcG9zZSgpIHsKKwkJdXBkYXRlUHJvYmxlbUluZGljYXRpb24gPSBmYWxzZTsKKworCQlSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkucmVtb3ZlUmVzb3VyY2VDaGFuZ2VMaXN0ZW5lcihyZXNvdXJjZUNoYW5nZUxpc3RlbmVyKTsKKworCQlnZXRTaXRlKCkuZ2V0UGFnZSgpLnJlbW92ZVBhcnRMaXN0ZW5lcihwYXJ0TGlzdGVuZXIpOworCisJCWFkYXB0ZXJGYWN0b3J5LmRpc3Bvc2UoKTsKKworCQlpZiAoZ2V0QWN0aW9uQmFyQ29udHJpYnV0b3IoKS5nZXRBY3RpdmVFZGl0b3IoKSA9PSB0aGlzKSB7CisJCQlnZXRBY3Rpb25CYXJDb250cmlidXRvcigpLnNldEFjdGl2ZUVkaXRvcihudWxsKTsKKwkJfQorCisJCWlmIChwcm9wZXJ0eVNoZWV0UGFnZSAhPSBudWxsKSB7CisJCQlwcm9wZXJ0eVNoZWV0UGFnZS5kaXNwb3NlKCk7CisJCX0KKworCQlpZiAoY29udGVudE91dGxpbmVQYWdlICE9IG51bGwpIHsKKwkJCWNvbnRlbnRPdXRsaW5lUGFnZS5kaXNwb3NlKCk7CisJCX0KKworCQlzdXBlci5kaXNwb3NlKCk7CisJfQorCisJLyoqCisJICogUmV0dXJucyB3aGV0aGVyIHRoZSBvdXRsaW5lIHZpZXcgc2hvdWxkIGJlIHByZXNlbnRlZCB0byB0aGUgdXNlci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgYm9vbGVhbiBzaG93T3V0bGluZVZpZXcoKSB7CisJCXJldHVybiBmYWxzZTsKKwl9Cit9CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdGVzdHMvdXRpbC9kZWNvcmF0b3JzL3ByZXNlbnRhdGlvbi9EZWNvcmF0b3JzTW9kZWxXaXphcmQuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS90ZXN0cy91dGlsL2RlY29yYXRvcnMvcHJlc2VudGF0aW9uL0RlY29yYXRvcnNNb2RlbFdpemFyZC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMxMjZiNmYKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdGVzdHMvdXRpbC9kZWNvcmF0b3JzL3ByZXNlbnRhdGlvbi9EZWNvcmF0b3JzTW9kZWxXaXphcmQuamF2YQpAQCAtMCwwICsxLDU5NyBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwuZGVjb3JhdG9ycy5wcmVzZW50YXRpb247CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbnM7CitpbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CitpbXBvcnQgamF2YS51dGlsLk1hcDsKK2ltcG9ydCBqYXZhLnV0aWwuTWlzc2luZ1Jlc291cmNlRXhjZXB0aW9uOworaW1wb3J0IGphdmEudXRpbC5TdHJpbmdUb2tlbml6ZXI7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JQ29udGFpbmVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklGaWxlOworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklGb2xkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3Q7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVJlc291cmNlOworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLlJlc291cmNlc1BsdWdpbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVByb2dyZXNzTW9uaXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGF0aDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuVVJJOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzc2lmaWVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5yZXNvdXJjZS5SZXNvdXJjZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUucmVzb3VyY2UuUmVzb3VyY2VTZXQ7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnJlc291cmNlLmltcGwuUmVzb3VyY2VTZXRJbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS54bWkuWE1MUmVzb3VyY2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkucHJvdmlkZXIuRXh0ZW5kZWRJbWFnZVJlZ2lzdHJ5OworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmRpYWxvZ3MuTWVzc2FnZURpYWxvZzsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU3RydWN0dXJlZFNlbGVjdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlN0cnVjdHVyZWRTZWxlY3Rpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uud2l6YXJkLldpemFyZDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS53aXphcmQuV2l6YXJkUGFnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwuZGVjb3JhdG9ycy5EZWNvcmF0b3JzRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwuZGVjb3JhdG9ycy5EZWNvcmF0b3JzUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwuZGVjb3JhdG9ycy5wcm92aWRlci5UZXN0dXRpbGl0eUVkaXRQbHVnaW47CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LlNXVDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLk1vZGlmeUV2ZW50OworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuTW9kaWZ5TGlzdGVuZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5HcmlkRGF0YTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QubGF5b3V0LkdyaWRMYXlvdXQ7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tYm87CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkxhYmVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklOZXdXaXphcmQ7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaDsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5JV29ya2JlbmNoUGFnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5JV29ya2JlbmNoUGFydDsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5JV29ya2JlbmNoV2luZG93OworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLlBhcnRJbml0RXhjZXB0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLmFjdGlvbnMuV29ya3NwYWNlTW9kaWZ5T3BlcmF0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLmRpYWxvZ3MuV2l6YXJkTmV3RmlsZUNyZWF0aW9uUGFnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5wYXJ0LkZpbGVFZGl0b3JJbnB1dDsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5wYXJ0LklTZXRTZWxlY3Rpb25UYXJnZXQ7CisKKworLyoqCisgKiBUaGlzIGlzIGEgc2ltcGxlIHdpemFyZCBmb3IgY3JlYXRpbmcgYSBuZXcgbW9kZWwgZmlsZS4KKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIERlY29yYXRvcnNNb2RlbFdpemFyZCBleHRlbmRzIFdpemFyZCBpbXBsZW1lbnRzIElOZXdXaXphcmQgeworCS8qKgorCSAqIFRoaXMgY2FjaGVzIGFuIGluc3RhbmNlIG9mIHRoZSBtb2RlbCBwYWNrYWdlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBEZWNvcmF0b3JzUGFja2FnZSBkZWNvcmF0b3JzUGFja2FnZSA9IERlY29yYXRvcnNQYWNrYWdlLmVJTlNUQU5DRTsKKworCS8qKgorCSAqIFRoaXMgY2FjaGVzIGFuIGluc3RhbmNlIG9mIHRoZSBtb2RlbCBmYWN0b3J5LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBEZWNvcmF0b3JzRmFjdG9yeSBkZWNvcmF0b3JzRmFjdG9yeSA9IGRlY29yYXRvcnNQYWNrYWdlLmdldERlY29yYXRvcnNGYWN0b3J5KCk7CisKKwkvKioKKwkgKiBUaGlzIGlzIHRoZSBmaWxlIGNyZWF0aW9uIHBhZ2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIERlY29yYXRvcnNNb2RlbFdpemFyZE5ld0ZpbGVDcmVhdGlvblBhZ2UgbmV3RmlsZUNyZWF0aW9uUGFnZTsKKworCS8qKgorCSAqIFRoaXMgaXMgdGhlIGluaXRpYWwgb2JqZWN0IGNyZWF0aW9uIHBhZ2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIERlY29yYXRvcnNNb2RlbFdpemFyZEluaXRpYWxPYmplY3RDcmVhdGlvblBhZ2UgaW5pdGlhbE9iamVjdENyZWF0aW9uUGFnZTsKKworCS8qKgorCSAqIFJlbWVtYmVyIHRoZSBzZWxlY3Rpb24gZHVyaW5nIGluaXRpYWxpemF0aW9uIGZvciBwb3B1bGF0aW5nIHRoZSBkZWZhdWx0IGNvbnRhaW5lci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgSVN0cnVjdHVyZWRTZWxlY3Rpb24gc2VsZWN0aW9uOworCisJLyoqCisJICogUmVtZW1iZXIgdGhlIHdvcmtiZW5jaCBkdXJpbmcgaW5pdGlhbGl6YXRpb24uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIElXb3JrYmVuY2ggd29ya2JlbmNoOworCisJLyoqCisJICogQ2FjaGVzIHRoZSBuYW1lcyBvZiB0aGUgdHlwZXMgdGhhdCBjYW4gYmUgY3JlYXRlZCBhcyB0aGUgcm9vdCBvYmplY3QuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIExpc3Q8U3RyaW5nPiBpbml0aWFsT2JqZWN0TmFtZXM7CisKKwkvKioKKwkgKiBUaGlzIGp1c3QgcmVjb3JkcyB0aGUgaW5mb3JtYXRpb24uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgaW5pdChJV29ya2JlbmNoIHdvcmtiZW5jaCwgSVN0cnVjdHVyZWRTZWxlY3Rpb24gc2VsZWN0aW9uKSB7CisJCXRoaXMud29ya2JlbmNoID0gd29ya2JlbmNoOworCQl0aGlzLnNlbGVjdGlvbiA9IHNlbGVjdGlvbjsKKwkJc2V0V2luZG93VGl0bGUoVGVzdHV0aWxpdHlFZGl0UGx1Z2luLklOU1RBTkNFLmdldFN0cmluZygiX1VJX1dpemFyZF9sYWJlbCIpKTsgLy8kTk9OLU5MUy0xJAorCQlzZXREZWZhdWx0UGFnZUltYWdlRGVzY3JpcHRvcihFeHRlbmRlZEltYWdlUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0SW1hZ2VEZXNjcmlwdG9yKFRlc3R1dGlsaXR5RWRpdFBsdWdpbi5JTlNUQU5DRS5nZXRJbWFnZSgiZnVsbC93aXpiYW4vTmV3RGVjb3JhdG9ycyIpKSk7IC8vJE5PTi1OTFMtMSQKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBuYW1lcyBvZiB0aGUgdHlwZXMgdGhhdCBjYW4gYmUgY3JlYXRlZCBhcyB0aGUgcm9vdCBvYmplY3QuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIENvbGxlY3Rpb248U3RyaW5nPiBnZXRJbml0aWFsT2JqZWN0TmFtZXMoKSB7CisJCWlmIChpbml0aWFsT2JqZWN0TmFtZXMgPT0gbnVsbCkgeworCQkJaW5pdGlhbE9iamVjdE5hbWVzID0gbmV3IEFycmF5TGlzdDxTdHJpbmc+KCk7CisJCQlmb3IgKEVDbGFzc2lmaWVyIGVDbGFzc2lmaWVyIDogZGVjb3JhdG9yc1BhY2thZ2UuZ2V0RUNsYXNzaWZpZXJzKCkpIHsKKwkJCQlpZiAoZUNsYXNzaWZpZXIgaW5zdGFuY2VvZiBFQ2xhc3MpIHsKKwkJCQkJRUNsYXNzIGVDbGFzcyA9IChFQ2xhc3MpZUNsYXNzaWZpZXI7CisJCQkJCWlmICghZUNsYXNzLmlzQWJzdHJhY3QoKSkgeworCQkJCQkJaW5pdGlhbE9iamVjdE5hbWVzLmFkZChlQ2xhc3MuZ2V0TmFtZSgpKTsKKwkJCQkJfQorCQkJCX0KKwkJCX0KKwkJCUNvbGxlY3Rpb25zLnNvcnQoaW5pdGlhbE9iamVjdE5hbWVzLCBqYXZhLnRleHQuQ29sbGF0b3IuZ2V0SW5zdGFuY2UoKSk7CisJCX0KKwkJcmV0dXJuIGluaXRpYWxPYmplY3ROYW1lczsKKwl9CisKKwkvKioKKwkgKiBDcmVhdGUgYSBuZXcgbW9kZWwuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIEVPYmplY3QgY3JlYXRlSW5pdGlhbE1vZGVsKCkgeworCQlFQ2xhc3MgZUNsYXNzID0gKEVDbGFzcylkZWNvcmF0b3JzUGFja2FnZS5nZXRFQ2xhc3NpZmllcihpbml0aWFsT2JqZWN0Q3JlYXRpb25QYWdlLmdldEluaXRpYWxPYmplY3ROYW1lKCkpOworCQlFT2JqZWN0IHJvb3RPYmplY3QgPSBkZWNvcmF0b3JzRmFjdG9yeS5jcmVhdGUoZUNsYXNzKTsKKwkJcmV0dXJuIHJvb3RPYmplY3Q7CisJfQorCisJLyoqCisJICogRG8gdGhlIHdvcmsgYWZ0ZXIgZXZlcnl0aGluZyBpcyBzcGVjaWZpZWQuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIGJvb2xlYW4gcGVyZm9ybUZpbmlzaCgpIHsKKwkJdHJ5IHsKKwkJCS8vIFJlbWVtYmVyIHRoZSBmaWxlLgorCQkJLy8KKwkJCWZpbmFsIElGaWxlIG1vZGVsRmlsZSA9IGdldE1vZGVsRmlsZSgpOworCisJCQkvLyBEbyB0aGUgd29yayB3aXRoaW4gYW4gb3BlcmF0aW9uLgorCQkJLy8KKwkJCVdvcmtzcGFjZU1vZGlmeU9wZXJhdGlvbiBvcGVyYXRpb24gPQorCQkJCW5ldyBXb3Jrc3BhY2VNb2RpZnlPcGVyYXRpb24oKSB7CisJCQkJCUBPdmVycmlkZQorCQkJCQlwcm90ZWN0ZWQgdm9pZCBleGVjdXRlKElQcm9ncmVzc01vbml0b3IgcHJvZ3Jlc3NNb25pdG9yKSB7CisJCQkJCQl0cnkgeworCQkJCQkJCS8vIENyZWF0ZSBhIHJlc291cmNlIHNldAorCQkJCQkJCS8vCisJCQkJCQkJUmVzb3VyY2VTZXQgcmVzb3VyY2VTZXQgPSBuZXcgUmVzb3VyY2VTZXRJbXBsKCk7CisKKwkJCQkJCQkvLyBHZXQgdGhlIFVSSSBvZiB0aGUgbW9kZWwgZmlsZS4KKwkJCQkJCQkvLworCQkJCQkJCVVSSSBmaWxlVVJJID0gVVJJLmNyZWF0ZVBsYXRmb3JtUmVzb3VyY2VVUkkobW9kZWxGaWxlLmdldEZ1bGxQYXRoKCkudG9TdHJpbmcoKSwgdHJ1ZSk7CisKKwkJCQkJCQkvLyBDcmVhdGUgYSByZXNvdXJjZSBmb3IgdGhpcyBmaWxlLgorCQkJCQkJCS8vCisJCQkJCQkJUmVzb3VyY2UgcmVzb3VyY2UgPSByZXNvdXJjZVNldC5jcmVhdGVSZXNvdXJjZShmaWxlVVJJKTsKKworCQkJCQkJCS8vIEFkZCB0aGUgaW5pdGlhbCBtb2RlbCBvYmplY3QgdG8gdGhlIGNvbnRlbnRzLgorCQkJCQkJCS8vCisJCQkJCQkJRU9iamVjdCByb290T2JqZWN0ID0gY3JlYXRlSW5pdGlhbE1vZGVsKCk7CisJCQkJCQkJaWYgKHJvb3RPYmplY3QgIT0gbnVsbCkgeworCQkJCQkJCQlyZXNvdXJjZS5nZXRDb250ZW50cygpLmFkZChyb290T2JqZWN0KTsKKwkJCQkJCQl9CisKKwkJCQkJCQkvLyBTYXZlIHRoZSBjb250ZW50cyBvZiB0aGUgcmVzb3VyY2UgdG8gdGhlIGZpbGUgc3lzdGVtLgorCQkJCQkJCS8vCisJCQkJCQkJTWFwPE9iamVjdCwgT2JqZWN0PiBvcHRpb25zID0gbmV3IEhhc2hNYXA8T2JqZWN0LCBPYmplY3Q+KCk7CisJCQkJCQkJb3B0aW9ucy5wdXQoWE1MUmVzb3VyY2UuT1BUSU9OX0VOQ09ESU5HLCBpbml0aWFsT2JqZWN0Q3JlYXRpb25QYWdlLmdldEVuY29kaW5nKCkpOworCQkJCQkJCXJlc291cmNlLnNhdmUob3B0aW9ucyk7CisJCQkJCQl9CisJCQkJCQljYXRjaCAoRXhjZXB0aW9uIGV4Y2VwdGlvbikgeworCQkJCQkJCVRlc3R1dGlsaXR5RWRpdFBsdWdpbi5JTlNUQU5DRS5sb2coZXhjZXB0aW9uKTsKKwkJCQkJCX0KKwkJCQkJCWZpbmFsbHkgeworCQkJCQkJCXByb2dyZXNzTW9uaXRvci5kb25lKCk7CisJCQkJCQl9CisJCQkJCX0KKwkJCQl9OworCisJCQlnZXRDb250YWluZXIoKS5ydW4oZmFsc2UsIGZhbHNlLCBvcGVyYXRpb24pOworCisJCQkvLyBTZWxlY3QgdGhlIG5ldyBmaWxlIHJlc291cmNlIGluIHRoZSBjdXJyZW50IHZpZXcuCisJCQkvLworCQkJSVdvcmtiZW5jaFdpbmRvdyB3b3JrYmVuY2hXaW5kb3cgPSB3b3JrYmVuY2guZ2V0QWN0aXZlV29ya2JlbmNoV2luZG93KCk7CisJCQlJV29ya2JlbmNoUGFnZSBwYWdlID0gd29ya2JlbmNoV2luZG93LmdldEFjdGl2ZVBhZ2UoKTsKKwkJCWZpbmFsIElXb3JrYmVuY2hQYXJ0IGFjdGl2ZVBhcnQgPSBwYWdlLmdldEFjdGl2ZVBhcnQoKTsKKwkJCWlmIChhY3RpdmVQYXJ0IGluc3RhbmNlb2YgSVNldFNlbGVjdGlvblRhcmdldCkgeworCQkJCWZpbmFsIElTZWxlY3Rpb24gdGFyZ2V0U2VsZWN0aW9uID0gbmV3IFN0cnVjdHVyZWRTZWxlY3Rpb24obW9kZWxGaWxlKTsKKwkJCQlnZXRTaGVsbCgpLmdldERpc3BsYXkoKS5hc3luY0V4ZWMKKwkJCQkJKG5ldyBSdW5uYWJsZSgpIHsKKwkJCQkJCSBwdWJsaWMgdm9pZCBydW4oKSB7CisJCQkJCQkJICgoSVNldFNlbGVjdGlvblRhcmdldClhY3RpdmVQYXJ0KS5zZWxlY3RSZXZlYWwodGFyZ2V0U2VsZWN0aW9uKTsKKwkJCQkJCSB9CisJCQkJCSB9KTsKKwkJCX0KKworCQkJLy8gT3BlbiBhbiBlZGl0b3Igb24gdGhlIG5ldyBmaWxlLgorCQkJLy8KKwkJCXRyeSB7CisJCQkJcGFnZS5vcGVuRWRpdG9yCisJCQkJCShuZXcgRmlsZUVkaXRvcklucHV0KG1vZGVsRmlsZSksCisJCQkJCSB3b3JrYmVuY2guZ2V0RWRpdG9yUmVnaXN0cnkoKS5nZXREZWZhdWx0RWRpdG9yKG1vZGVsRmlsZS5nZXRGdWxsUGF0aCgpLnRvU3RyaW5nKCkpLmdldElkKCkpOworCQkJfQorCQkJY2F0Y2ggKFBhcnRJbml0RXhjZXB0aW9uIGV4Y2VwdGlvbikgeworCQkJCU1lc3NhZ2VEaWFsb2cub3BlbkVycm9yKHdvcmtiZW5jaFdpbmRvdy5nZXRTaGVsbCgpLCBUZXN0dXRpbGl0eUVkaXRQbHVnaW4uSU5TVEFOQ0UuZ2V0U3RyaW5nKCJfVUlfT3BlbkVkaXRvckVycm9yX2xhYmVsIiksIGV4Y2VwdGlvbi5nZXRNZXNzYWdlKCkpOyAvLyROT04tTkxTLTEkCisJCQkJcmV0dXJuIGZhbHNlOworCQkJfQorCisJCQlyZXR1cm4gdHJ1ZTsKKwkJfQorCQljYXRjaCAoRXhjZXB0aW9uIGV4Y2VwdGlvbikgeworCQkJVGVzdHV0aWxpdHlFZGl0UGx1Z2luLklOU1RBTkNFLmxvZyhleGNlcHRpb24pOworCQkJcmV0dXJuIGZhbHNlOworCQl9CisJfQorCisJLyoqCisJICogVGhpcyBpcyB0aGUgb25lIHBhZ2Ugb2YgdGhlIHdpemFyZC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgY2xhc3MgRGVjb3JhdG9yc01vZGVsV2l6YXJkTmV3RmlsZUNyZWF0aW9uUGFnZSBleHRlbmRzIFdpemFyZE5ld0ZpbGVDcmVhdGlvblBhZ2UgeworCQkvKioKKwkJICogUGFzcyBpbiB0aGUgc2VsZWN0aW9uLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJcHVibGljIERlY29yYXRvcnNNb2RlbFdpemFyZE5ld0ZpbGVDcmVhdGlvblBhZ2UoU3RyaW5nIHBhZ2VJZCwgSVN0cnVjdHVyZWRTZWxlY3Rpb24gc2VsZWN0aW9uKSB7CisJCQlzdXBlcihwYWdlSWQsIHNlbGVjdGlvbik7CisJCX0KKworCQkvKioKKwkJICogVGhlIGZyYW1ld29yayBjYWxscyB0aGlzIHRvIHNlZSBpZiB0aGUgZmlsZSBpcyBjb3JyZWN0LgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJQE92ZXJyaWRlCisJCXByb3RlY3RlZCBib29sZWFuIHZhbGlkYXRlUGFnZSgpIHsKKwkJCWlmIChzdXBlci52YWxpZGF0ZVBhZ2UoKSkgeworCQkJCS8vIE1ha2Ugc3VyZSB0aGUgZmlsZSBlbmRzIGluICIuZGVjb3JhdG9ycyIuCisJCQkJLy8KKwkJCQlTdHJpbmcgcmVxdWlyZWRFeHQgPSBUZXN0dXRpbGl0eUVkaXRQbHVnaW4uSU5TVEFOQ0UuZ2V0U3RyaW5nKCJfVUlfRGVjb3JhdG9yc0VkaXRvckZpbGVuYW1lRXh0ZW5zaW9uIik7IC8vJE5PTi1OTFMtMSQKKwkJCQlTdHJpbmcgZW50ZXJlZEV4dCA9IG5ldyBQYXRoKGdldEZpbGVOYW1lKCkpLmdldEZpbGVFeHRlbnNpb24oKTsKKwkJCQlpZiAoZW50ZXJlZEV4dCA9PSBudWxsIHx8ICFlbnRlcmVkRXh0LmVxdWFscyhyZXF1aXJlZEV4dCkpIHsKKwkJCQkJc2V0RXJyb3JNZXNzYWdlKFRlc3R1dGlsaXR5RWRpdFBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoIl9XQVJOX0ZpbGVuYW1lRXh0ZW5zaW9uIiwgbmV3IE9iamVjdCBbXSB7IHJlcXVpcmVkRXh0IH0pKTsgLy8kTk9OLU5MUy0xJAorCQkJCQlyZXR1cm4gZmFsc2U7CisJCQkJfQorCQkJCWVsc2UgeworCQkJCQlyZXR1cm4gdHJ1ZTsKKwkJCQl9CisJCQl9CisJCQllbHNlIHsKKwkJCQlyZXR1cm4gZmFsc2U7CisJCQl9CisJCX0KKworCQkvKioKKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCXB1YmxpYyBJRmlsZSBnZXRNb2RlbEZpbGUoKSB7CisJCQlyZXR1cm4gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmdldFJvb3QoKS5nZXRGaWxlKGdldENvbnRhaW5lckZ1bGxQYXRoKCkuYXBwZW5kKGdldEZpbGVOYW1lKCkpKTsKKwkJfQorCX0KKworCS8qKgorCSAqIFRoaXMgaXMgdGhlIHBhZ2Ugd2hlcmUgdGhlIHR5cGUgb2Ygb2JqZWN0IHRvIGNyZWF0ZSBpcyBzZWxlY3RlZC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgY2xhc3MgRGVjb3JhdG9yc01vZGVsV2l6YXJkSW5pdGlhbE9iamVjdENyZWF0aW9uUGFnZSBleHRlbmRzIFdpemFyZFBhZ2UgeworCQkvKioKKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCXByb3RlY3RlZCBDb21ibyBpbml0aWFsT2JqZWN0RmllbGQ7CisKKwkJLyoqCisJCSAqIEBnZW5lcmF0ZWQKKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqLworCQlwcm90ZWN0ZWQgTGlzdDxTdHJpbmc+IGVuY29kaW5nczsKKworCQkvKioKKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCXByb3RlY3RlZCBDb21ibyBlbmNvZGluZ0ZpZWxkOworCisJCS8qKgorCQkgKiBQYXNzIGluIHRoZSBzZWxlY3Rpb24uCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlwdWJsaWMgRGVjb3JhdG9yc01vZGVsV2l6YXJkSW5pdGlhbE9iamVjdENyZWF0aW9uUGFnZShTdHJpbmcgcGFnZUlkKSB7CisJCQlzdXBlcihwYWdlSWQpOworCQl9CisKKwkJLyoqCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlwdWJsaWMgdm9pZCBjcmVhdGVDb250cm9sKENvbXBvc2l0ZSBwYXJlbnQpIHsKKwkJCUNvbXBvc2l0ZSBjb21wb3NpdGUgPSBuZXcgQ29tcG9zaXRlKHBhcmVudCwgU1dULk5PTkUpOyB7CisJCQkJR3JpZExheW91dCBsYXlvdXQgPSBuZXcgR3JpZExheW91dCgpOworCQkJCWxheW91dC5udW1Db2x1bW5zID0gMTsKKwkJCQlsYXlvdXQudmVydGljYWxTcGFjaW5nID0gMTI7CisJCQkJY29tcG9zaXRlLnNldExheW91dChsYXlvdXQpOworCisJCQkJR3JpZERhdGEgZGF0YSA9IG5ldyBHcmlkRGF0YSgpOworCQkJCWRhdGEudmVydGljYWxBbGlnbm1lbnQgPSBHcmlkRGF0YS5GSUxMOworCQkJCWRhdGEuZ3JhYkV4Y2Vzc1ZlcnRpY2FsU3BhY2UgPSB0cnVlOworCQkJCWRhdGEuaG9yaXpvbnRhbEFsaWdubWVudCA9IEdyaWREYXRhLkZJTEw7CisJCQkJY29tcG9zaXRlLnNldExheW91dERhdGEoZGF0YSk7CisJCQl9CisKKwkJCUxhYmVsIGNvbnRhaW5lckxhYmVsID0gbmV3IExhYmVsKGNvbXBvc2l0ZSwgU1dULkxFRlQpOworCQkJeworCQkJCWNvbnRhaW5lckxhYmVsLnNldFRleHQoVGVzdHV0aWxpdHlFZGl0UGx1Z2luLklOU1RBTkNFLmdldFN0cmluZygiX1VJX01vZGVsT2JqZWN0IikpOyAvLyROT04tTkxTLTEkCisKKwkJCQlHcmlkRGF0YSBkYXRhID0gbmV3IEdyaWREYXRhKCk7CisJCQkJZGF0YS5ob3Jpem9udGFsQWxpZ25tZW50ID0gR3JpZERhdGEuRklMTDsKKwkJCQljb250YWluZXJMYWJlbC5zZXRMYXlvdXREYXRhKGRhdGEpOworCQkJfQorCisJCQlpbml0aWFsT2JqZWN0RmllbGQgPSBuZXcgQ29tYm8oY29tcG9zaXRlLCBTV1QuQk9SREVSKTsKKwkJCXsKKwkJCQlHcmlkRGF0YSBkYXRhID0gbmV3IEdyaWREYXRhKCk7CisJCQkJZGF0YS5ob3Jpem9udGFsQWxpZ25tZW50ID0gR3JpZERhdGEuRklMTDsKKwkJCQlkYXRhLmdyYWJFeGNlc3NIb3Jpem9udGFsU3BhY2UgPSB0cnVlOworCQkJCWluaXRpYWxPYmplY3RGaWVsZC5zZXRMYXlvdXREYXRhKGRhdGEpOworCQkJfQorCisJCQlmb3IgKFN0cmluZyBvYmplY3ROYW1lIDogZ2V0SW5pdGlhbE9iamVjdE5hbWVzKCkpIHsKKwkJCQlpbml0aWFsT2JqZWN0RmllbGQuYWRkKGdldExhYmVsKG9iamVjdE5hbWUpKTsKKwkJCX0KKworCQkJaWYgKGluaXRpYWxPYmplY3RGaWVsZC5nZXRJdGVtQ291bnQoKSA9PSAxKSB7CisJCQkJaW5pdGlhbE9iamVjdEZpZWxkLnNlbGVjdCgwKTsKKwkJCX0KKwkJCWluaXRpYWxPYmplY3RGaWVsZC5hZGRNb2RpZnlMaXN0ZW5lcih2YWxpZGF0b3IpOworCisJCQlMYWJlbCBlbmNvZGluZ0xhYmVsID0gbmV3IExhYmVsKGNvbXBvc2l0ZSwgU1dULkxFRlQpOworCQkJeworCQkJCWVuY29kaW5nTGFiZWwuc2V0VGV4dChUZXN0dXRpbGl0eUVkaXRQbHVnaW4uSU5TVEFOQ0UuZ2V0U3RyaW5nKCJfVUlfWE1MRW5jb2RpbmciKSk7IC8vJE5PTi1OTFMtMSQKKworCQkJCUdyaWREYXRhIGRhdGEgPSBuZXcgR3JpZERhdGEoKTsKKwkJCQlkYXRhLmhvcml6b250YWxBbGlnbm1lbnQgPSBHcmlkRGF0YS5GSUxMOworCQkJCWVuY29kaW5nTGFiZWwuc2V0TGF5b3V0RGF0YShkYXRhKTsKKwkJCX0KKwkJCWVuY29kaW5nRmllbGQgPSBuZXcgQ29tYm8oY29tcG9zaXRlLCBTV1QuQk9SREVSKTsKKwkJCXsKKwkJCQlHcmlkRGF0YSBkYXRhID0gbmV3IEdyaWREYXRhKCk7CisJCQkJZGF0YS5ob3Jpem9udGFsQWxpZ25tZW50ID0gR3JpZERhdGEuRklMTDsKKwkJCQlkYXRhLmdyYWJFeGNlc3NIb3Jpem9udGFsU3BhY2UgPSB0cnVlOworCQkJCWVuY29kaW5nRmllbGQuc2V0TGF5b3V0RGF0YShkYXRhKTsKKwkJCX0KKworCQkJZm9yIChTdHJpbmcgZW5jb2RpbmcgOiBnZXRFbmNvZGluZ3MoKSkgeworCQkJCWVuY29kaW5nRmllbGQuYWRkKGVuY29kaW5nKTsKKwkJCX0KKworCQkJZW5jb2RpbmdGaWVsZC5zZWxlY3QoMCk7CisJCQllbmNvZGluZ0ZpZWxkLmFkZE1vZGlmeUxpc3RlbmVyKHZhbGlkYXRvcik7CisKKwkJCXNldFBhZ2VDb21wbGV0ZSh2YWxpZGF0ZVBhZ2UoKSk7CisJCQlzZXRDb250cm9sKGNvbXBvc2l0ZSk7CisJCX0KKworCQkvKioKKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCXByb3RlY3RlZCBNb2RpZnlMaXN0ZW5lciB2YWxpZGF0b3IgPQorCQkJbmV3IE1vZGlmeUxpc3RlbmVyKCkgeworCQkJCXB1YmxpYyB2b2lkIG1vZGlmeVRleHQoTW9kaWZ5RXZlbnQgZSkgeworCQkJCQlzZXRQYWdlQ29tcGxldGUodmFsaWRhdGVQYWdlKCkpOworCQkJCX0KKwkJCX07CisKKwkJLyoqCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlwcm90ZWN0ZWQgYm9vbGVhbiB2YWxpZGF0ZVBhZ2UoKSB7CisJCQlyZXR1cm4gZ2V0SW5pdGlhbE9iamVjdE5hbWUoKSAhPSBudWxsICYmIGdldEVuY29kaW5ncygpLmNvbnRhaW5zKGVuY29kaW5nRmllbGQuZ2V0VGV4dCgpKTsKKwkJfQorCisJCS8qKgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJQE92ZXJyaWRlCisJCXB1YmxpYyB2b2lkIHNldFZpc2libGUoYm9vbGVhbiB2aXNpYmxlKSB7CisJCQlzdXBlci5zZXRWaXNpYmxlKHZpc2libGUpOworCQkJaWYgKHZpc2libGUpIHsKKwkJCQlpZiAoaW5pdGlhbE9iamVjdEZpZWxkLmdldEl0ZW1Db3VudCgpID09IDEpIHsKKwkJCQkJaW5pdGlhbE9iamVjdEZpZWxkLmNsZWFyU2VsZWN0aW9uKCk7CisJCQkJCWVuY29kaW5nRmllbGQuc2V0Rm9jdXMoKTsKKwkJCQl9CisJCQkJZWxzZSB7CisJCQkJCWVuY29kaW5nRmllbGQuY2xlYXJTZWxlY3Rpb24oKTsKKwkJCQkJaW5pdGlhbE9iamVjdEZpZWxkLnNldEZvY3VzKCk7CisJCQkJfQorCQkJfQorCQl9CisKKwkJLyoqCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlwdWJsaWMgU3RyaW5nIGdldEluaXRpYWxPYmplY3ROYW1lKCkgeworCQkJU3RyaW5nIGxhYmVsID0gaW5pdGlhbE9iamVjdEZpZWxkLmdldFRleHQoKTsKKworCQkJZm9yIChTdHJpbmcgbmFtZSA6IGdldEluaXRpYWxPYmplY3ROYW1lcygpKSB7CisJCQkJaWYgKGdldExhYmVsKG5hbWUpLmVxdWFscyhsYWJlbCkpIHsKKwkJCQkJcmV0dXJuIG5hbWU7CisJCQkJfQorCQkJfQorCQkJcmV0dXJuIG51bGw7CisJCX0KKworCQkvKioKKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCXB1YmxpYyBTdHJpbmcgZ2V0RW5jb2RpbmcoKSB7CisJCQlyZXR1cm4gZW5jb2RpbmdGaWVsZC5nZXRUZXh0KCk7CisJCX0KKworCQkvKioKKwkJICogUmV0dXJucyB0aGUgbGFiZWwgZm9yIHRoZSBzcGVjaWZpZWQgdHlwZSBuYW1lLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJcHJvdGVjdGVkIFN0cmluZyBnZXRMYWJlbChTdHJpbmcgdHlwZU5hbWUpIHsKKwkJCXRyeSB7CisJCQkJcmV0dXJuIFRlc3R1dGlsaXR5RWRpdFBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoIl9VSV8iICsgdHlwZU5hbWUgKyAiX3R5cGUiKTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCisJCQl9CisJCQljYXRjaChNaXNzaW5nUmVzb3VyY2VFeGNlcHRpb24gbXJlKSB7CisJCQkJVGVzdHV0aWxpdHlFZGl0UGx1Z2luLklOU1RBTkNFLmxvZyhtcmUpOworCQkJfQorCQkJcmV0dXJuIHR5cGVOYW1lOworCQl9CisKKwkJLyoqCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlwcm90ZWN0ZWQgQ29sbGVjdGlvbjxTdHJpbmc+IGdldEVuY29kaW5ncygpIHsKKwkJCWlmIChlbmNvZGluZ3MgPT0gbnVsbCkgeworCQkJCWVuY29kaW5ncyA9IG5ldyBBcnJheUxpc3Q8U3RyaW5nPigpOworCQkJCWZvciAoU3RyaW5nVG9rZW5pemVyIHN0cmluZ1Rva2VuaXplciA9IG5ldyBTdHJpbmdUb2tlbml6ZXIoVGVzdHV0aWxpdHlFZGl0UGx1Z2luLklOU1RBTkNFLmdldFN0cmluZygiX1VJX1hNTEVuY29kaW5nQ2hvaWNlcyIpKTsgc3RyaW5nVG9rZW5pemVyLmhhc01vcmVUb2tlbnMoKTsgKSAvLyROT04tTkxTLTEkCisJCQkJeworCQkJCQllbmNvZGluZ3MuYWRkKHN0cmluZ1Rva2VuaXplci5uZXh0VG9rZW4oKSk7CisJCQkJfQorCQkJfQorCQkJcmV0dXJuIGVuY29kaW5nczsKKwkJfQorCX0KKworCS8qKgorCSAqIFRoZSBmcmFtZXdvcmsgY2FsbHMgdGhpcyB0byBjcmVhdGUgdGhlIGNvbnRlbnRzIG9mIHRoZSB3aXphcmQuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgYWRkUGFnZXMoKSB7CisJCS8vIENyZWF0ZSBhIHBhZ2UsIHNldCB0aGUgdGl0bGUsIGFuZCB0aGUgaW5pdGlhbCBtb2RlbCBmaWxlIG5hbWUuCisJCS8vCisJCW5ld0ZpbGVDcmVhdGlvblBhZ2UgPSBuZXcgRGVjb3JhdG9yc01vZGVsV2l6YXJkTmV3RmlsZUNyZWF0aW9uUGFnZSgiV2hhdGV2ZXIiLCBzZWxlY3Rpb24pOyAvLyROT04tTkxTLTEkCisJCW5ld0ZpbGVDcmVhdGlvblBhZ2Uuc2V0VGl0bGUoVGVzdHV0aWxpdHlFZGl0UGx1Z2luLklOU1RBTkNFLmdldFN0cmluZygiX1VJX0RlY29yYXRvcnNNb2RlbFdpemFyZF9sYWJlbCIpKTsgLy8kTk9OLU5MUy0xJAorCQluZXdGaWxlQ3JlYXRpb25QYWdlLnNldERlc2NyaXB0aW9uKFRlc3R1dGlsaXR5RWRpdFBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoIl9VSV9EZWNvcmF0b3JzTW9kZWxXaXphcmRfZGVzY3JpcHRpb24iKSk7IC8vJE5PTi1OTFMtMSQKKwkJbmV3RmlsZUNyZWF0aW9uUGFnZS5zZXRGaWxlTmFtZShUZXN0dXRpbGl0eUVkaXRQbHVnaW4uSU5TVEFOQ0UuZ2V0U3RyaW5nKCJfVUlfRGVjb3JhdG9yc0VkaXRvckZpbGVuYW1lRGVmYXVsdEJhc2UiKSArICIuIiArIFRlc3R1dGlsaXR5RWRpdFBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoIl9VSV9EZWNvcmF0b3JzRWRpdG9yRmlsZW5hbWVFeHRlbnNpb24iKSk7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJCAvLyROT04tTkxTLTMkCisJCWFkZFBhZ2UobmV3RmlsZUNyZWF0aW9uUGFnZSk7CisKKwkJLy8gVHJ5IGFuZCBnZXQgdGhlIHJlc291cmNlIHNlbGVjdGlvbiB0byBkZXRlcm1pbmUgYSBjdXJyZW50IGRpcmVjdG9yeSBmb3IgdGhlIGZpbGUgZGlhbG9nLgorCQkvLworCQlpZiAoc2VsZWN0aW9uICE9IG51bGwgJiYgIXNlbGVjdGlvbi5pc0VtcHR5KCkpIHsKKwkJCS8vIEdldCB0aGUgcmVzb3VyY2UuLi4KKwkJCS8vCisJCQlPYmplY3Qgc2VsZWN0ZWRFbGVtZW50ID0gc2VsZWN0aW9uLml0ZXJhdG9yKCkubmV4dCgpOworCQkJaWYgKHNlbGVjdGVkRWxlbWVudCBpbnN0YW5jZW9mIElSZXNvdXJjZSkgeworCQkJCS8vIEdldCB0aGUgcmVzb3VyY2UgcGFyZW50LCBpZiBpdHMgYSBmaWxlLgorCQkJCS8vCisJCQkJSVJlc291cmNlIHNlbGVjdGVkUmVzb3VyY2UgPSAoSVJlc291cmNlKXNlbGVjdGVkRWxlbWVudDsKKwkJCQlpZiAoc2VsZWN0ZWRSZXNvdXJjZS5nZXRUeXBlKCkgPT0gSVJlc291cmNlLkZJTEUpIHsKKwkJCQkJc2VsZWN0ZWRSZXNvdXJjZSA9IHNlbGVjdGVkUmVzb3VyY2UuZ2V0UGFyZW50KCk7CisJCQkJfQorCisJCQkJLy8gVGhpcyBnaXZlcyB1cyBhIGRpcmVjdG9yeS4uLgorCQkJCS8vCisJCQkJaWYgKHNlbGVjdGVkUmVzb3VyY2UgaW5zdGFuY2VvZiBJRm9sZGVyIHx8IHNlbGVjdGVkUmVzb3VyY2UgaW5zdGFuY2VvZiBJUHJvamVjdCkgeworCQkJCQkvLyBTZXQgdGhpcyBmb3IgdGhlIGNvbnRhaW5lci4KKwkJCQkJLy8KKwkJCQkJbmV3RmlsZUNyZWF0aW9uUGFnZS5zZXRDb250YWluZXJGdWxsUGF0aChzZWxlY3RlZFJlc291cmNlLmdldEZ1bGxQYXRoKCkpOworCisJCQkJCS8vIE1ha2UgdXAgYSB1bmlxdWUgbmV3IG5hbWUgaGVyZS4KKwkJCQkJLy8KKwkJCQkJU3RyaW5nIGRlZmF1bHRNb2RlbEJhc2VGaWxlbmFtZSA9IFRlc3R1dGlsaXR5RWRpdFBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoIl9VSV9EZWNvcmF0b3JzRWRpdG9yRmlsZW5hbWVEZWZhdWx0QmFzZSIpOyAvLyROT04tTkxTLTEkCisJCQkJCVN0cmluZyBkZWZhdWx0TW9kZWxGaWxlbmFtZUV4dGVuc2lvbiA9IFRlc3R1dGlsaXR5RWRpdFBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoIl9VSV9EZWNvcmF0b3JzRWRpdG9yRmlsZW5hbWVFeHRlbnNpb24iKTsgLy8kTk9OLU5MUy0xJAorCQkJCQlTdHJpbmcgbW9kZWxGaWxlbmFtZSA9IGRlZmF1bHRNb2RlbEJhc2VGaWxlbmFtZSArICIuIiArIGRlZmF1bHRNb2RlbEZpbGVuYW1lRXh0ZW5zaW9uOyAvLyROT04tTkxTLTEkCisJCQkJCWZvciAoaW50IGkgPSAxOyAoKElDb250YWluZXIpc2VsZWN0ZWRSZXNvdXJjZSkuZmluZE1lbWJlcihtb2RlbEZpbGVuYW1lKSAhPSBudWxsOyArK2kpIHsKKwkJCQkJCW1vZGVsRmlsZW5hbWUgPSBkZWZhdWx0TW9kZWxCYXNlRmlsZW5hbWUgKyBpICsgIi4iICsgZGVmYXVsdE1vZGVsRmlsZW5hbWVFeHRlbnNpb247IC8vJE5PTi1OTFMtMSQKKwkJCQkJfQorCQkJCQluZXdGaWxlQ3JlYXRpb25QYWdlLnNldEZpbGVOYW1lKG1vZGVsRmlsZW5hbWUpOworCQkJCX0KKwkJCX0KKwkJfQorCQlpbml0aWFsT2JqZWN0Q3JlYXRpb25QYWdlID0gbmV3IERlY29yYXRvcnNNb2RlbFdpemFyZEluaXRpYWxPYmplY3RDcmVhdGlvblBhZ2UoIldoYXRldmVyMiIpOyAvLyROT04tTkxTLTEkCisJCWluaXRpYWxPYmplY3RDcmVhdGlvblBhZ2Uuc2V0VGl0bGUoVGVzdHV0aWxpdHlFZGl0UGx1Z2luLklOU1RBTkNFLmdldFN0cmluZygiX1VJX0RlY29yYXRvcnNNb2RlbFdpemFyZF9sYWJlbCIpKTsgLy8kTk9OLU5MUy0xJAorCQlpbml0aWFsT2JqZWN0Q3JlYXRpb25QYWdlLnNldERlc2NyaXB0aW9uKFRlc3R1dGlsaXR5RWRpdFBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoIl9VSV9XaXphcmRfaW5pdGlhbF9vYmplY3RfZGVzY3JpcHRpb24iKSk7IC8vJE5PTi1OTFMtMSQKKwkJYWRkUGFnZShpbml0aWFsT2JqZWN0Q3JlYXRpb25QYWdlKTsKKwl9CisKKwkvKioKKwkgKiBHZXQgdGhlIGZpbGUgZnJvbSB0aGUgcGFnZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgSUZpbGUgZ2V0TW9kZWxGaWxlKCkgeworCQlyZXR1cm4gbmV3RmlsZUNyZWF0aW9uUGFnZS5nZXRNb2RlbEZpbGUoKTsKKwl9CisKK30KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS90ZXN0cy91dGlsL2RlY29yYXRvcnMvcHJvdmlkZXIvQ29yZXRlc3RFZGl0UGx1Z2luLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdGVzdHMvdXRpbC9kZWNvcmF0b3JzL3Byb3ZpZGVyL0NvcmV0ZXN0RWRpdFBsdWdpbi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcyZTExZGIKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdGVzdHMvdXRpbC9kZWNvcmF0b3JzL3Byb3ZpZGVyL0NvcmV0ZXN0RWRpdFBsdWdpbi5qYXZhCkBAIC0wLDAgKzEsMTA2IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC5kZWNvcmF0b3JzLnByb3ZpZGVyOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24uRU1GUGx1Z2luOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udWkuRWNsaXBzZVVJUGx1Z2luOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5SZXNvdXJjZUxvY2F0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5wcm92aWRlci5Db3JlRWRpdFBsdWdpbjsKKworLyoqCisgKiBUaGlzIGlzIHRoZSBjZW50cmFsIHNpbmdsZXRvbiBmb3IgdGhlIENvcmV0ZXN0IGVkaXRvciBwbHVnaW4uCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBmaW5hbCBjbGFzcyBDb3JldGVzdEVkaXRQbHVnaW4gZXh0ZW5kcyBFTUZQbHVnaW4geworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIGNvcHlyaWdodCA9ICIiOyAvLyROT04tTkxTLTEkCisKKwkvKioKKwkgKiBLZWVwIHRyYWNrIG9mIHRoZSBzaW5nbGV0b24uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBDb3JldGVzdEVkaXRQbHVnaW4gSU5TVEFOQ0UgPSBuZXcgQ29yZXRlc3RFZGl0UGx1Z2luKCk7CisKKwkvKioKKwkgKiBLZWVwIHRyYWNrIG9mIHRoZSBzaW5nbGV0b24uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJpdmF0ZSBzdGF0aWMgSW1wbGVtZW50YXRpb24gcGx1Z2luOworCisJLyoqCisJICogQ3JlYXRlIHRoZSBpbnN0YW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQ29yZXRlc3RFZGl0UGx1Z2luKCkgeworCQlzdXBlcgorCQkgIChuZXcgUmVzb3VyY2VMb2NhdG9yIFtdIHsKKwkJICAgICBDb3JlRWRpdFBsdWdpbi5JTlNUQU5DRSwKKwkJICAgfSk7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgc2luZ2xldG9uIGluc3RhbmNlIG9mIHRoZSBFY2xpcHNlIHBsdWdpbi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIHNpbmdsZXRvbiBpbnN0YW5jZS4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFJlc291cmNlTG9jYXRvciBnZXRQbHVnaW5SZXNvdXJjZUxvY2F0b3IoKSB7CisJCXJldHVybiBwbHVnaW47CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgc2luZ2xldG9uIGluc3RhbmNlIG9mIHRoZSBFY2xpcHNlIHBsdWdpbi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIHNpbmdsZXRvbiBpbnN0YW5jZS4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHN0YXRpYyBJbXBsZW1lbnRhdGlvbiBnZXRQbHVnaW4oKSB7CisJCXJldHVybiBwbHVnaW47CisJfQorCisJLyoqCisJICogVGhlIGFjdHVhbCBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgRWNsaXBzZSA8Yj5QbHVnaW48L2I+LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBzdGF0aWMgY2xhc3MgSW1wbGVtZW50YXRpb24gZXh0ZW5kcyBFY2xpcHNlVUlQbHVnaW4geworCQkvKioKKwkJICogQ3JlYXRlcyBhbiBpbnN0YW5jZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCXB1YmxpYyBJbXBsZW1lbnRhdGlvbigpIHsKKwkJCXN1cGVyKCk7CisKKwkJCS8vIFJlbWVtYmVyIHRoZSBzdGF0aWMgaW5zdGFuY2UuCisJCQkvLworCQkJcGx1Z2luID0gdGhpczsKKwkJfQorCX0KKworfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3Rlc3RzL3V0aWwvZGVjb3JhdG9ycy9wcm92aWRlci9EZWNvcmF0b3JzSXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS90ZXN0cy91dGlsL2RlY29yYXRvcnMvcHJvdmlkZXIvRGVjb3JhdG9yc0l0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDJjMWNlMQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS90ZXN0cy91dGlsL2RlY29yYXRvcnMvcHJvdmlkZXIvRGVjb3JhdG9yc0l0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5LmphdmEKQEAgLTAsMCArMSwyNzggQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsLmRlY29yYXRvcnMucHJvdmlkZXI7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LkFkYXB0ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkNoYW5nZU5vdGlmaWVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkNvbXBvc2VhYmxlQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuQ29tcG9zZWRBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JQ2hhbmdlTm90aWZpZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSURpc3Bvc2FibGU7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUVkaXRpbmdEb21haW5JdGVtUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1MYWJlbFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtUHJvcGVydHlTb3VyY2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSU5vdGlmeUNoYW5nZWRMaXN0ZW5lcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JU3RydWN0dXJlZEl0ZW1Db250ZW50UHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVRyZWVJdGVtQ29udGVudFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC5kZWNvcmF0b3JzLnV0aWwuRGVjb3JhdG9yc0FkYXB0ZXJGYWN0b3J5OworCisvKioKKyAqIFRoaXMgaXMgdGhlIGZhY3RvcnkgdGhhdCBpcyB1c2VkIHRvIHByb3ZpZGUgdGhlIGludGVyZmFjZXMgbmVlZGVkIHRvIHN1cHBvcnQgVmlld2Vycy4KKyAqIFRoZSBhZGFwdGVycyBnZW5lcmF0ZWQgYnkgdGhpcyBmYWN0b3J5IGNvbnZlcnQgRU1GIGFkYXB0ZXIgbm90aWZpY2F0aW9ucyBpbnRvIGNhbGxzIHRvIHtAbGluayAjZmlyZU5vdGlmeUNoYW5nZWQgZmlyZU5vdGlmeUNoYW5nZWR9LgorICogVGhlIGFkYXB0ZXJzIGFsc28gc3VwcG9ydCBFY2xpcHNlIHByb3BlcnR5IHNoZWV0cy4KKyAqIE5vdGUgdGhhdCBtb3N0IG9mIHRoZSBhZGFwdGVycyBhcmUgc2hhcmVkIGFtb25nIG11bHRpcGxlIGluc3RhbmNlcy4KKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIERlY29yYXRvcnNJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSBleHRlbmRzIERlY29yYXRvcnNBZGFwdGVyRmFjdG9yeSBpbXBsZW1lbnRzIENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnksIElDaGFuZ2VOb3RpZmllciwgSURpc3Bvc2FibGUgeworCS8qKgorCSAqIFRoaXMga2VlcHMgdHJhY2sgb2YgdGhlIHJvb3QgYWRhcHRlciBmYWN0b3J5IHRoYXQgZGVsZWdhdGVzIHRvIHRoaXMgYWRhcHRlciBmYWN0b3J5LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBDb21wb3NlZEFkYXB0ZXJGYWN0b3J5IHBhcmVudEFkYXB0ZXJGYWN0b3J5OworCisJLyoqCisJICogVGhpcyBpcyB1c2VkIHRvIGltcGxlbWVudCB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUNoYW5nZU5vdGlmaWVyfS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgSUNoYW5nZU5vdGlmaWVyIGNoYW5nZU5vdGlmaWVyID0gbmV3IENoYW5nZU5vdGlmaWVyKCk7CisKKwkvKioKKwkgKiBUaGlzIGtlZXBzIHRyYWNrIG9mIGFsbCB0aGUgc3VwcG9ydGVkIHR5cGVzIGNoZWNrZWQgYnkge0BsaW5rICNpc0ZhY3RvcnlGb3JUeXBlIGlzRmFjdG9yeUZvclR5cGV9LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBDb2xsZWN0aW9uPE9iamVjdD4gc3VwcG9ydGVkVHlwZXMgPSBuZXcgQXJyYXlMaXN0PE9iamVjdD4oKTsKKworCS8qKgorCSAqIFRoaXMgY29uc3RydWN0cyBhbiBpbnN0YW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRGVjb3JhdG9yc0l0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5KCkgeworCQlzdXBwb3J0ZWRUeXBlcy5hZGQoSUVkaXRpbmdEb21haW5JdGVtUHJvdmlkZXIuY2xhc3MpOworCQlzdXBwb3J0ZWRUeXBlcy5hZGQoSVN0cnVjdHVyZWRJdGVtQ29udGVudFByb3ZpZGVyLmNsYXNzKTsKKwkJc3VwcG9ydGVkVHlwZXMuYWRkKElUcmVlSXRlbUNvbnRlbnRQcm92aWRlci5jbGFzcyk7CisJCXN1cHBvcnRlZFR5cGVzLmFkZChJSXRlbUxhYmVsUHJvdmlkZXIuY2xhc3MpOworCQlzdXBwb3J0ZWRUeXBlcy5hZGQoSUl0ZW1Qcm9wZXJ0eVNvdXJjZS5jbGFzcyk7CisJfQorCisJLyoqCisJICogVGhpcyBrZWVwcyB0cmFjayBvZiB0aGUgb25lIGFkYXB0ZXIgdXNlZCBmb3IgYWxsIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwuZGVjb3JhdG9ycy5UZXN0RWRnZURlY29yYXRvcjF9IGluc3RhbmNlcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgVGVzdEVkZ2VEZWNvcmF0b3IxSXRlbVByb3ZpZGVyIHRlc3RFZGdlRGVjb3JhdG9yMUl0ZW1Qcm92aWRlcjsKKworCS8qKgorCSAqIFRoaXMgY3JlYXRlcyBhbiBhZGFwdGVyIGZvciBhIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwuZGVjb3JhdG9ycy5UZXN0RWRnZURlY29yYXRvcjF9LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZVRlc3RFZGdlRGVjb3JhdG9yMUFkYXB0ZXIoKSB7CisJCWlmICh0ZXN0RWRnZURlY29yYXRvcjFJdGVtUHJvdmlkZXIgPT0gbnVsbCkgeworCQkJdGVzdEVkZ2VEZWNvcmF0b3IxSXRlbVByb3ZpZGVyID0gbmV3IFRlc3RFZGdlRGVjb3JhdG9yMUl0ZW1Qcm92aWRlcih0aGlzKTsKKwkJfQorCisJCXJldHVybiB0ZXN0RWRnZURlY29yYXRvcjFJdGVtUHJvdmlkZXI7CisJfQorCisJLyoqCisJICogVGhpcyBrZWVwcyB0cmFjayBvZiB0aGUgb25lIGFkYXB0ZXIgdXNlZCBmb3IgYWxsIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwuZGVjb3JhdG9ycy5UZXN0R3JhcGhEZWNvcmF0b3IxfSBpbnN0YW5jZXMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIFRlc3RHcmFwaERlY29yYXRvcjFJdGVtUHJvdmlkZXIgdGVzdEdyYXBoRGVjb3JhdG9yMUl0ZW1Qcm92aWRlcjsKKworCS8qKgorCSAqIFRoaXMgY3JlYXRlcyBhbiBhZGFwdGVyIGZvciBhIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwuZGVjb3JhdG9ycy5UZXN0R3JhcGhEZWNvcmF0b3IxfS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVUZXN0R3JhcGhEZWNvcmF0b3IxQWRhcHRlcigpIHsKKwkJaWYgKHRlc3RHcmFwaERlY29yYXRvcjFJdGVtUHJvdmlkZXIgPT0gbnVsbCkgeworCQkJdGVzdEdyYXBoRGVjb3JhdG9yMUl0ZW1Qcm92aWRlciA9IG5ldyBUZXN0R3JhcGhEZWNvcmF0b3IxSXRlbVByb3ZpZGVyKHRoaXMpOworCQl9CisKKwkJcmV0dXJuIHRlc3RHcmFwaERlY29yYXRvcjFJdGVtUHJvdmlkZXI7CisJfQorCisJLyoqCisJICogVGhpcyBrZWVwcyB0cmFjayBvZiB0aGUgb25lIGFkYXB0ZXIgdXNlZCBmb3IgYWxsIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwuZGVjb3JhdG9ycy5UZXN0Tm9kZURlY29yYXRvcjF9IGluc3RhbmNlcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgVGVzdE5vZGVEZWNvcmF0b3IxSXRlbVByb3ZpZGVyIHRlc3ROb2RlRGVjb3JhdG9yMUl0ZW1Qcm92aWRlcjsKKworCS8qKgorCSAqIFRoaXMgY3JlYXRlcyBhbiBhZGFwdGVyIGZvciBhIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwuZGVjb3JhdG9ycy5UZXN0Tm9kZURlY29yYXRvcjF9LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZVRlc3ROb2RlRGVjb3JhdG9yMUFkYXB0ZXIoKSB7CisJCWlmICh0ZXN0Tm9kZURlY29yYXRvcjFJdGVtUHJvdmlkZXIgPT0gbnVsbCkgeworCQkJdGVzdE5vZGVEZWNvcmF0b3IxSXRlbVByb3ZpZGVyID0gbmV3IFRlc3ROb2RlRGVjb3JhdG9yMUl0ZW1Qcm92aWRlcih0aGlzKTsKKwkJfQorCisJCXJldHVybiB0ZXN0Tm9kZURlY29yYXRvcjFJdGVtUHJvdmlkZXI7CisJfQorCisJLyoqCisJICogVGhpcyBrZWVwcyB0cmFjayBvZiB0aGUgb25lIGFkYXB0ZXIgdXNlZCBmb3IgYWxsIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwuZGVjb3JhdG9ycy5UZXN0U2NlbmFyaW9HcmFwaERlY29yYXRvcjF9IGluc3RhbmNlcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgVGVzdFNjZW5hcmlvR3JhcGhEZWNvcmF0b3IxSXRlbVByb3ZpZGVyIHRlc3RTY2VuYXJpb0dyYXBoRGVjb3JhdG9yMUl0ZW1Qcm92aWRlcjsKKworCS8qKgorCSAqIFRoaXMgY3JlYXRlcyBhbiBhZGFwdGVyIGZvciBhIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwuZGVjb3JhdG9ycy5UZXN0U2NlbmFyaW9HcmFwaERlY29yYXRvcjF9LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZVRlc3RTY2VuYXJpb0dyYXBoRGVjb3JhdG9yMUFkYXB0ZXIoKSB7CisJCWlmICh0ZXN0U2NlbmFyaW9HcmFwaERlY29yYXRvcjFJdGVtUHJvdmlkZXIgPT0gbnVsbCkgeworCQkJdGVzdFNjZW5hcmlvR3JhcGhEZWNvcmF0b3IxSXRlbVByb3ZpZGVyID0gbmV3IFRlc3RTY2VuYXJpb0dyYXBoRGVjb3JhdG9yMUl0ZW1Qcm92aWRlcih0aGlzKTsKKwkJfQorCisJCXJldHVybiB0ZXN0U2NlbmFyaW9HcmFwaERlY29yYXRvcjFJdGVtUHJvdmlkZXI7CisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIHRoZSByb290IGFkYXB0ZXIgZmFjdG9yeSB0aGF0IGNvbnRhaW5zIHRoaXMgZmFjdG9yeS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSBnZXRSb290QWRhcHRlckZhY3RvcnkoKSB7CisJCXJldHVybiBwYXJlbnRBZGFwdGVyRmFjdG9yeSA9PSBudWxsID8gdGhpcyA6IHBhcmVudEFkYXB0ZXJGYWN0b3J5LmdldFJvb3RBZGFwdGVyRmFjdG9yeSgpOworCX0KKworCS8qKgorCSAqIFRoaXMgc2V0cyB0aGUgY29tcG9zZWQgYWRhcHRlciBmYWN0b3J5IHRoYXQgY29udGFpbnMgdGhpcyBmYWN0b3J5LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIHNldFBhcmVudEFkYXB0ZXJGYWN0b3J5KENvbXBvc2VkQWRhcHRlckZhY3RvcnkgcGFyZW50QWRhcHRlckZhY3RvcnkpIHsKKwkJdGhpcy5wYXJlbnRBZGFwdGVyRmFjdG9yeSA9IHBhcmVudEFkYXB0ZXJGYWN0b3J5OworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBib29sZWFuIGlzRmFjdG9yeUZvclR5cGUoT2JqZWN0IHR5cGUpIHsKKwkJcmV0dXJuIHN1cHBvcnRlZFR5cGVzLmNvbnRhaW5zKHR5cGUpIHx8IHN1cGVyLmlzRmFjdG9yeUZvclR5cGUodHlwZSk7CisJfQorCisJLyoqCisJICogVGhpcyBpbXBsZW1lbnRhdGlvbiBzdWJzdGl0dXRlcyB0aGUgZmFjdG9yeSBpdHNlbGYgYXMgdGhlIGtleSBmb3IgdGhlIGFkYXB0ZXIuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIEFkYXB0ZXIgYWRhcHQoTm90aWZpZXIgbm90aWZpZXIsIE9iamVjdCB0eXBlKSB7CisJCXJldHVybiBzdXBlci5hZGFwdChub3RpZmllciwgdGhpcyk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIE9iamVjdCBhZGFwdChPYmplY3Qgb2JqZWN0LCBPYmplY3QgdHlwZSkgeworCQlpZiAoaXNGYWN0b3J5Rm9yVHlwZSh0eXBlKSkgeworCQkJT2JqZWN0IGFkYXB0ZXIgPSBzdXBlci5hZGFwdChvYmplY3QsIHR5cGUpOworCQkJaWYgKCEodHlwZSBpbnN0YW5jZW9mIENsYXNzKSB8fCAoKChDbGFzczw/Pil0eXBlKS5pc0luc3RhbmNlKGFkYXB0ZXIpKSkgeworCQkJCXJldHVybiBhZGFwdGVyOworCQkJfQorCQl9CisKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogVGhpcyBhZGRzIGEgbGlzdGVuZXIuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgYWRkTGlzdGVuZXIoSU5vdGlmeUNoYW5nZWRMaXN0ZW5lciBub3RpZnlDaGFuZ2VkTGlzdGVuZXIpIHsKKwkJY2hhbmdlTm90aWZpZXIuYWRkTGlzdGVuZXIobm90aWZ5Q2hhbmdlZExpc3RlbmVyKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHJlbW92ZXMgYSBsaXN0ZW5lci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCByZW1vdmVMaXN0ZW5lcihJTm90aWZ5Q2hhbmdlZExpc3RlbmVyIG5vdGlmeUNoYW5nZWRMaXN0ZW5lcikgeworCQljaGFuZ2VOb3RpZmllci5yZW1vdmVMaXN0ZW5lcihub3RpZnlDaGFuZ2VkTGlzdGVuZXIpOworCX0KKworCS8qKgorCSAqIFRoaXMgZGVsZWdhdGVzIHRvIHtAbGluayAjY2hhbmdlTm90aWZpZXJ9IGFuZCB0byB7QGxpbmsgI3BhcmVudEFkYXB0ZXJGYWN0b3J5fS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBmaXJlTm90aWZ5Q2hhbmdlZChOb3RpZmljYXRpb24gbm90aWZpY2F0aW9uKSB7CisJCWNoYW5nZU5vdGlmaWVyLmZpcmVOb3RpZnlDaGFuZ2VkKG5vdGlmaWNhdGlvbik7CisKKwkJaWYgKHBhcmVudEFkYXB0ZXJGYWN0b3J5ICE9IG51bGwpIHsKKwkJCXBhcmVudEFkYXB0ZXJGYWN0b3J5LmZpcmVOb3RpZnlDaGFuZ2VkKG5vdGlmaWNhdGlvbik7CisJCX0KKwl9CisKKwkvKioKKwkgKiBUaGlzIGRpc3Bvc2VzIGFsbCBvZiB0aGUgaXRlbSBwcm92aWRlcnMgY3JlYXRlZCBieSB0aGlzIGZhY3RvcnkuIAorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIGRpc3Bvc2UoKSB7CisJCWlmICh0ZXN0RWRnZURlY29yYXRvcjFJdGVtUHJvdmlkZXIgIT0gbnVsbCkgdGVzdEVkZ2VEZWNvcmF0b3IxSXRlbVByb3ZpZGVyLmRpc3Bvc2UoKTsKKwkJaWYgKHRlc3RHcmFwaERlY29yYXRvcjFJdGVtUHJvdmlkZXIgIT0gbnVsbCkgdGVzdEdyYXBoRGVjb3JhdG9yMUl0ZW1Qcm92aWRlci5kaXNwb3NlKCk7CisJCWlmICh0ZXN0Tm9kZURlY29yYXRvcjFJdGVtUHJvdmlkZXIgIT0gbnVsbCkgdGVzdE5vZGVEZWNvcmF0b3IxSXRlbVByb3ZpZGVyLmRpc3Bvc2UoKTsKKwkJaWYgKHRlc3RTY2VuYXJpb0dyYXBoRGVjb3JhdG9yMUl0ZW1Qcm92aWRlciAhPSBudWxsKSB0ZXN0U2NlbmFyaW9HcmFwaERlY29yYXRvcjFJdGVtUHJvdmlkZXIuZGlzcG9zZSgpOworCX0KKworfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3Rlc3RzL3V0aWwvZGVjb3JhdG9ycy9wcm92aWRlci9UZXN0RWRnZURlY29yYXRvcjFJdGVtUHJvdmlkZXIuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS90ZXN0cy91dGlsL2RlY29yYXRvcnMvcHJvdmlkZXIvVGVzdEVkZ2VEZWNvcmF0b3IxSXRlbVByb3ZpZGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTM1YmMxNgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS90ZXN0cy91dGlsL2RlY29yYXRvcnMvcHJvdmlkZXIvVGVzdEVkZ2VEZWNvcmF0b3IxSXRlbVByb3ZpZGVyLmphdmEKQEAgLTAsMCArMSwyMTIgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsLmRlY29yYXRvcnMucHJvdmlkZXI7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5BZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlJlc291cmNlTG9jYXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuVVJJOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkNvbXBvc2VhYmxlQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUVkaXRpbmdEb21haW5JdGVtUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1MYWJlbFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtUHJvcGVydHlEZXNjcmlwdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtUHJvcGVydHlTb3VyY2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVN0cnVjdHVyZWRJdGVtQ29udGVudFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklUcmVlSXRlbUNvbnRlbnRQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JdGVtUHJvcGVydHlEZXNjcmlwdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLlZpZXdlck5vdGlmaWNhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwucHJvdmlkZXIuRWRnZURlY29yYXRvckl0ZW1Qcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwuZGVjb3JhdG9ycy5EZWNvcmF0b3JzUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwuZGVjb3JhdG9ycy5UZXN0RWRnZURlY29yYXRvcjE7CisKKy8qKgorICogVGhpcyBpcyB0aGUgaXRlbSBwcm92aWRlciBhZGFwdGVyIGZvciBhIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwuZGVjb3JhdG9ycy5UZXN0RWRnZURlY29yYXRvcjF9IG9iamVjdC4KKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIFRlc3RFZGdlRGVjb3JhdG9yMUl0ZW1Qcm92aWRlcgorCWV4dGVuZHMgRWRnZURlY29yYXRvckl0ZW1Qcm92aWRlcgorCWltcGxlbWVudHMJCisJCUlFZGl0aW5nRG9tYWluSXRlbVByb3ZpZGVyLAkKKwkJSVN0cnVjdHVyZWRJdGVtQ29udGVudFByb3ZpZGVyLAkKKwkJSVRyZWVJdGVtQ29udGVudFByb3ZpZGVyLAkKKwkJSUl0ZW1MYWJlbFByb3ZpZGVyLAkKKwkJSUl0ZW1Qcm9wZXJ0eVNvdXJjZSB7CisJLyoqCisJICogVGhpcyBjb25zdHJ1Y3RzIGFuIGluc3RhbmNlIGZyb20gYSBmYWN0b3J5IGFuZCBhIG5vdGlmaWVyLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBUZXN0RWRnZURlY29yYXRvcjFJdGVtUHJvdmlkZXIoQWRhcHRlckZhY3RvcnkgYWRhcHRlckZhY3RvcnkpIHsKKwkJc3VwZXIoYWRhcHRlckZhY3RvcnkpOworCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyB0aGUgcHJvcGVydHkgZGVzY3JpcHRvcnMgZm9yIHRoZSBhZGFwdGVkIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBMaXN0PElJdGVtUHJvcGVydHlEZXNjcmlwdG9yPiBnZXRQcm9wZXJ0eURlc2NyaXB0b3JzKE9iamVjdCBvYmplY3QpIHsKKwkJaWYgKGl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzID09IG51bGwpIHsKKwkJCXN1cGVyLmdldFByb3BlcnR5RGVzY3JpcHRvcnMob2JqZWN0KTsKKworCQkJYWRkTm9kZUFVUklQcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0KTsKKwkJCWFkZE5vZGVCVVJJUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCk7CisJCQlhZGRFZGdlVVJJUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCk7CisJCX0KKwkJcmV0dXJuIGl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzOworCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyBhIHByb3BlcnR5IGRlc2NyaXB0b3IgZm9yIHRoZSBOb2RlIEFVUkkgZmVhdHVyZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBhZGROb2RlQVVSSVByb3BlcnR5RGVzY3JpcHRvcihPYmplY3Qgb2JqZWN0KSB7CisJCWl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzLmFkZAorCQkJKGNyZWF0ZUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IKKwkJCQkoKChDb21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5KWFkYXB0ZXJGYWN0b3J5KS5nZXRSb290QWRhcHRlckZhY3RvcnkoKSwKKwkJCQkgZ2V0UmVzb3VyY2VMb2NhdG9yKCksCisJCQkJIGdldFN0cmluZygiX1VJX1Rlc3RFZGdlRGVjb3JhdG9yMV9ub2RlQVVSSV9mZWF0dXJlIiksIC8vJE5PTi1OTFMtMSQKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfUHJvcGVydHlEZXNjcmlwdG9yX2Rlc2NyaXB0aW9uIiwgIl9VSV9UZXN0RWRnZURlY29yYXRvcjFfbm9kZUFVUklfZmVhdHVyZSIsICJfVUlfVGVzdEVkZ2VEZWNvcmF0b3IxX3R5cGUiKSwgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkIC8vJE5PTi1OTFMtMyQKKwkJCQkgRGVjb3JhdG9yc1BhY2thZ2UuTGl0ZXJhbHMuVEVTVF9FREdFX0RFQ09SQVRPUjFfX05PREVfQVVSSSwKKwkJCQkgdHJ1ZSwKKwkJCQkgZmFsc2UsCisJCQkJIGZhbHNlLAorCQkJCSBJdGVtUHJvcGVydHlEZXNjcmlwdG9yLkdFTkVSSUNfVkFMVUVfSU1BR0UsCisJCQkJIG51bGwsCisJCQkJIG51bGwpKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFkZHMgYSBwcm9wZXJ0eSBkZXNjcmlwdG9yIGZvciB0aGUgTm9kZSBCVVJJIGZlYXR1cmUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgYWRkTm9kZUJVUklQcm9wZXJ0eURlc2NyaXB0b3IoT2JqZWN0IG9iamVjdCkgeworCQlpdGVtUHJvcGVydHlEZXNjcmlwdG9ycy5hZGQKKwkJCShjcmVhdGVJdGVtUHJvcGVydHlEZXNjcmlwdG9yCisJCQkJKCgoQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSlhZGFwdGVyRmFjdG9yeSkuZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCksCisJCQkJIGdldFJlc291cmNlTG9jYXRvcigpLAorCQkJCSBnZXRTdHJpbmcoIl9VSV9UZXN0RWRnZURlY29yYXRvcjFfbm9kZUJVUklfZmVhdHVyZSIpLCAvLyROT04tTkxTLTEkCisJCQkJIGdldFN0cmluZygiX1VJX1Byb3BlcnR5RGVzY3JpcHRvcl9kZXNjcmlwdGlvbiIsICJfVUlfVGVzdEVkZ2VEZWNvcmF0b3IxX25vZGVCVVJJX2ZlYXR1cmUiLCAiX1VJX1Rlc3RFZGdlRGVjb3JhdG9yMV90eXBlIiksIC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJCAvLyROT04tTkxTLTMkCisJCQkJIERlY29yYXRvcnNQYWNrYWdlLkxpdGVyYWxzLlRFU1RfRURHRV9ERUNPUkFUT1IxX19OT0RFX0JVUkksCisJCQkJIHRydWUsCisJCQkJIGZhbHNlLAorCQkJCSBmYWxzZSwKKwkJCQkgSXRlbVByb3BlcnR5RGVzY3JpcHRvci5HRU5FUklDX1ZBTFVFX0lNQUdFLAorCQkJCSBudWxsLAorCQkJCSBudWxsKSk7CisJfQorCisJLyoqCisJICogVGhpcyBhZGRzIGEgcHJvcGVydHkgZGVzY3JpcHRvciBmb3IgdGhlIEVkZ2UgVVJJIGZlYXR1cmUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgYWRkRWRnZVVSSVByb3BlcnR5RGVzY3JpcHRvcihPYmplY3Qgb2JqZWN0KSB7CisJCWl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzLmFkZAorCQkJKGNyZWF0ZUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IKKwkJCQkoKChDb21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5KWFkYXB0ZXJGYWN0b3J5KS5nZXRSb290QWRhcHRlckZhY3RvcnkoKSwKKwkJCQkgZ2V0UmVzb3VyY2VMb2NhdG9yKCksCisJCQkJIGdldFN0cmluZygiX1VJX1Rlc3RFZGdlRGVjb3JhdG9yMV9lZGdlVVJJX2ZlYXR1cmUiKSwgLy8kTk9OLU5MUy0xJAorCQkJCSBnZXRTdHJpbmcoIl9VSV9Qcm9wZXJ0eURlc2NyaXB0b3JfZGVzY3JpcHRpb24iLCAiX1VJX1Rlc3RFZGdlRGVjb3JhdG9yMV9lZGdlVVJJX2ZlYXR1cmUiLCAiX1VJX1Rlc3RFZGdlRGVjb3JhdG9yMV90eXBlIiksIC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJCAvLyROT04tTkxTLTMkCisJCQkJIERlY29yYXRvcnNQYWNrYWdlLkxpdGVyYWxzLlRFU1RfRURHRV9ERUNPUkFUT1IxX19FREdFX1VSSSwKKwkJCQkgdHJ1ZSwKKwkJCQkgZmFsc2UsCisJCQkJIGZhbHNlLAorCQkJCSBJdGVtUHJvcGVydHlEZXNjcmlwdG9yLkdFTkVSSUNfVkFMVUVfSU1BR0UsCisJCQkJIG51bGwsCisJCQkJIG51bGwpKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgVGVzdEVkZ2VEZWNvcmF0b3IxLmdpZi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgT2JqZWN0IGdldEltYWdlKE9iamVjdCBvYmplY3QpIHsKKwkJcmV0dXJuIG92ZXJsYXlJbWFnZShvYmplY3QsIGdldFJlc291cmNlTG9jYXRvcigpLmdldEltYWdlKCJmdWxsL29iajE2L1Rlc3RFZGdlRGVjb3JhdG9yMSIpKTsgLy8kTk9OLU5MUy0xJAorCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyB0aGUgbGFiZWwgdGV4dCBmb3IgdGhlIGFkYXB0ZWQgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIFN0cmluZyBnZXRUZXh0KE9iamVjdCBvYmplY3QpIHsKKwkJVVJJIGxhYmVsVmFsdWUgPSAoKFRlc3RFZGdlRGVjb3JhdG9yMSlvYmplY3QpLmdldFVSSSgpOworCQlTdHJpbmcgbGFiZWwgPSBsYWJlbFZhbHVlID09IG51bGwgPyBudWxsIDogbGFiZWxWYWx1ZS50b1N0cmluZygpOworCQlyZXR1cm4gbGFiZWwgPT0gbnVsbCB8fCBsYWJlbC5sZW5ndGgoKSA9PSAwID8KKwkJCWdldFN0cmluZygiX1VJX1Rlc3RFZGdlRGVjb3JhdG9yMV90eXBlIikgOiAvLyROT04tTkxTLTEkCisJCQlnZXRTdHJpbmcoIl9VSV9UZXN0RWRnZURlY29yYXRvcjFfdHlwZSIpICsgIiAiICsgbGFiZWw7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAorCX0KKworCS8qKgorCSAqIFRoaXMgaGFuZGxlcyBtb2RlbCBub3RpZmljYXRpb25zIGJ5IGNhbGxpbmcge0BsaW5rICN1cGRhdGVDaGlsZHJlbn0gdG8gdXBkYXRlIGFueSBjYWNoZWQKKwkgKiBjaGlsZHJlbiBhbmQgYnkgY3JlYXRpbmcgYSB2aWV3ZXIgbm90aWZpY2F0aW9uLCB3aGljaCBpdCBwYXNzZXMgdG8ge0BsaW5rICNmaXJlTm90aWZ5Q2hhbmdlZH0uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgbm90aWZ5Q2hhbmdlZChOb3RpZmljYXRpb24gbm90aWZpY2F0aW9uKSB7CisJCXVwZGF0ZUNoaWxkcmVuKG5vdGlmaWNhdGlvbik7CisKKwkJc3dpdGNoIChub3RpZmljYXRpb24uZ2V0RmVhdHVyZUlEKFRlc3RFZGdlRGVjb3JhdG9yMS5jbGFzcykpIHsKKwkJCWNhc2UgRGVjb3JhdG9yc1BhY2thZ2UuVEVTVF9FREdFX0RFQ09SQVRPUjFfX05PREVfQVVSSToKKwkJCWNhc2UgRGVjb3JhdG9yc1BhY2thZ2UuVEVTVF9FREdFX0RFQ09SQVRPUjFfX05PREVfQlVSSToKKwkJCWNhc2UgRGVjb3JhdG9yc1BhY2thZ2UuVEVTVF9FREdFX0RFQ09SQVRPUjFfX0VER0VfVVJJOgorCQkJCWZpcmVOb3RpZnlDaGFuZ2VkKG5ldyBWaWV3ZXJOb3RpZmljYXRpb24obm90aWZpY2F0aW9uLCBub3RpZmljYXRpb24uZ2V0Tm90aWZpZXIoKSwgZmFsc2UsIHRydWUpKTsKKwkJCQlyZXR1cm47CisJCX0KKwkJc3VwZXIubm90aWZ5Q2hhbmdlZChub3RpZmljYXRpb24pOworCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmVkaXQuY29tbWFuZC5Db21tYW5kUGFyYW1ldGVyfXMgZGVzY3JpYmluZyB0aGUgY2hpbGRyZW4KKwkgKiB0aGF0IGNhbiBiZSBjcmVhdGVkIHVuZGVyIHRoaXMgb2JqZWN0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIGNvbGxlY3ROZXdDaGlsZERlc2NyaXB0b3JzKENvbGxlY3Rpb248T2JqZWN0PiBuZXdDaGlsZERlc2NyaXB0b3JzLCBPYmplY3Qgb2JqZWN0KSB7CisJCXN1cGVyLmNvbGxlY3ROZXdDaGlsZERlc2NyaXB0b3JzKG5ld0NoaWxkRGVzY3JpcHRvcnMsIG9iamVjdCk7CisJfQorCisJLyoqCisJICogUmV0dXJuIHRoZSByZXNvdXJjZSBsb2NhdG9yIGZvciB0aGlzIGl0ZW0gcHJvdmlkZXIncyByZXNvdXJjZXMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIFJlc291cmNlTG9jYXRvciBnZXRSZXNvdXJjZUxvY2F0b3IoKSB7CisJCXJldHVybiBUZXN0dXRpbGl0eUVkaXRQbHVnaW4uSU5TVEFOQ0U7CisJfQorCit9CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdGVzdHMvdXRpbC9kZWNvcmF0b3JzL3Byb3ZpZGVyL1Rlc3RHcmFwaERlY29yYXRvcjFJdGVtUHJvdmlkZXIuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS90ZXN0cy91dGlsL2RlY29yYXRvcnMvcHJvdmlkZXIvVGVzdEdyYXBoRGVjb3JhdG9yMUl0ZW1Qcm92aWRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ2M2E2YWEKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdGVzdHMvdXRpbC9kZWNvcmF0b3JzL3Byb3ZpZGVyL1Rlc3RHcmFwaERlY29yYXRvcjFJdGVtUHJvdmlkZXIuamF2YQpAQCAtMCwwICsxLDEzMSBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwuZGVjb3JhdG9ycy5wcm92aWRlcjsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LkFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuUmVzb3VyY2VMb2NhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5VUkk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUVkaXRpbmdEb21haW5JdGVtUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1MYWJlbFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtUHJvcGVydHlEZXNjcmlwdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtUHJvcGVydHlTb3VyY2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVN0cnVjdHVyZWRJdGVtQ29udGVudFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklUcmVlSXRlbUNvbnRlbnRQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwucHJvdmlkZXIuR3JhcGhEZWNvcmF0b3JJdGVtUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsLmRlY29yYXRvcnMuVGVzdEdyYXBoRGVjb3JhdG9yMTsKKworLyoqCisgKiBUaGlzIGlzIHRoZSBpdGVtIHByb3ZpZGVyIGFkYXB0ZXIgZm9yIGEge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC5kZWNvcmF0b3JzLlRlc3RHcmFwaERlY29yYXRvcjF9IG9iamVjdC4KKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIFRlc3RHcmFwaERlY29yYXRvcjFJdGVtUHJvdmlkZXIKKwlleHRlbmRzIEdyYXBoRGVjb3JhdG9ySXRlbVByb3ZpZGVyCisJaW1wbGVtZW50cwkKKwkJSUVkaXRpbmdEb21haW5JdGVtUHJvdmlkZXIsCQorCQlJU3RydWN0dXJlZEl0ZW1Db250ZW50UHJvdmlkZXIsCQorCQlJVHJlZUl0ZW1Db250ZW50UHJvdmlkZXIsCQorCQlJSXRlbUxhYmVsUHJvdmlkZXIsCQorCQlJSXRlbVByb3BlcnR5U291cmNlIHsKKwkvKioKKwkgKiBUaGlzIGNvbnN0cnVjdHMgYW4gaW5zdGFuY2UgZnJvbSBhIGZhY3RvcnkgYW5kIGEgbm90aWZpZXIuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFRlc3RHcmFwaERlY29yYXRvcjFJdGVtUHJvdmlkZXIoQWRhcHRlckZhY3RvcnkgYWRhcHRlckZhY3RvcnkpIHsKKwkJc3VwZXIoYWRhcHRlckZhY3RvcnkpOworCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyB0aGUgcHJvcGVydHkgZGVzY3JpcHRvcnMgZm9yIHRoZSBhZGFwdGVkIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBMaXN0PElJdGVtUHJvcGVydHlEZXNjcmlwdG9yPiBnZXRQcm9wZXJ0eURlc2NyaXB0b3JzKE9iamVjdCBvYmplY3QpIHsKKwkJaWYgKGl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzID09IG51bGwpIHsKKwkJCXN1cGVyLmdldFByb3BlcnR5RGVzY3JpcHRvcnMob2JqZWN0KTsKKworCQl9CisJCXJldHVybiBpdGVtUHJvcGVydHlEZXNjcmlwdG9yczsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgVGVzdEdyYXBoRGVjb3JhdG9yMS5naWYuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIE9iamVjdCBnZXRJbWFnZShPYmplY3Qgb2JqZWN0KSB7CisJCXJldHVybiBvdmVybGF5SW1hZ2Uob2JqZWN0LCBnZXRSZXNvdXJjZUxvY2F0b3IoKS5nZXRJbWFnZSgiZnVsbC9vYmoxNi9UZXN0R3JhcGhEZWNvcmF0b3IxIikpOyAvLyROT04tTkxTLTEkCisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIHRoZSBsYWJlbCB0ZXh0IGZvciB0aGUgYWRhcHRlZCBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgU3RyaW5nIGdldFRleHQoT2JqZWN0IG9iamVjdCkgeworCQlVUkkgbGFiZWxWYWx1ZSA9ICgoVGVzdEdyYXBoRGVjb3JhdG9yMSlvYmplY3QpLmdldFVSSSgpOworCQlTdHJpbmcgbGFiZWwgPSBsYWJlbFZhbHVlID09IG51bGwgPyBudWxsIDogbGFiZWxWYWx1ZS50b1N0cmluZygpOworCQlyZXR1cm4gbGFiZWwgPT0gbnVsbCB8fCBsYWJlbC5sZW5ndGgoKSA9PSAwID8KKwkJCWdldFN0cmluZygiX1VJX1Rlc3RHcmFwaERlY29yYXRvcjFfdHlwZSIpIDogLy8kTk9OLU5MUy0xJAorCQkJZ2V0U3RyaW5nKCJfVUlfVGVzdEdyYXBoRGVjb3JhdG9yMV90eXBlIikgKyAiICIgKyBsYWJlbDsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCisJfQorCisJLyoqCisJICogVGhpcyBoYW5kbGVzIG1vZGVsIG5vdGlmaWNhdGlvbnMgYnkgY2FsbGluZyB7QGxpbmsgI3VwZGF0ZUNoaWxkcmVufSB0byB1cGRhdGUgYW55IGNhY2hlZAorCSAqIGNoaWxkcmVuIGFuZCBieSBjcmVhdGluZyBhIHZpZXdlciBub3RpZmljYXRpb24sIHdoaWNoIGl0IHBhc3NlcyB0byB7QGxpbmsgI2ZpcmVOb3RpZnlDaGFuZ2VkfS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBub3RpZnlDaGFuZ2VkKE5vdGlmaWNhdGlvbiBub3RpZmljYXRpb24pIHsKKwkJdXBkYXRlQ2hpbGRyZW4obm90aWZpY2F0aW9uKTsKKwkJc3VwZXIubm90aWZ5Q2hhbmdlZChub3RpZmljYXRpb24pOworCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmVkaXQuY29tbWFuZC5Db21tYW5kUGFyYW1ldGVyfXMgZGVzY3JpYmluZyB0aGUgY2hpbGRyZW4KKwkgKiB0aGF0IGNhbiBiZSBjcmVhdGVkIHVuZGVyIHRoaXMgb2JqZWN0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIGNvbGxlY3ROZXdDaGlsZERlc2NyaXB0b3JzKENvbGxlY3Rpb248T2JqZWN0PiBuZXdDaGlsZERlc2NyaXB0b3JzLCBPYmplY3Qgb2JqZWN0KSB7CisJCXN1cGVyLmNvbGxlY3ROZXdDaGlsZERlc2NyaXB0b3JzKG5ld0NoaWxkRGVzY3JpcHRvcnMsIG9iamVjdCk7CisJfQorCisJLyoqCisJICogUmV0dXJuIHRoZSByZXNvdXJjZSBsb2NhdG9yIGZvciB0aGlzIGl0ZW0gcHJvdmlkZXIncyByZXNvdXJjZXMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIFJlc291cmNlTG9jYXRvciBnZXRSZXNvdXJjZUxvY2F0b3IoKSB7CisJCXJldHVybiBUZXN0dXRpbGl0eUVkaXRQbHVnaW4uSU5TVEFOQ0U7CisJfQorCit9CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdGVzdHMvdXRpbC9kZWNvcmF0b3JzL3Byb3ZpZGVyL1Rlc3ROb2RlRGVjb3JhdG9yMUl0ZW1Qcm92aWRlci5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3Rlc3RzL3V0aWwvZGVjb3JhdG9ycy9wcm92aWRlci9UZXN0Tm9kZURlY29yYXRvcjFJdGVtUHJvdmlkZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZjYyOTczCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3Rlc3RzL3V0aWwvZGVjb3JhdG9ycy9wcm92aWRlci9UZXN0Tm9kZURlY29yYXRvcjFJdGVtUHJvdmlkZXIuamF2YQpAQCAtMCwwICsxLDEzMSBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwuZGVjb3JhdG9ycy5wcm92aWRlcjsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LkFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuUmVzb3VyY2VMb2NhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5VUkk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUVkaXRpbmdEb21haW5JdGVtUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1MYWJlbFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtUHJvcGVydHlEZXNjcmlwdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtUHJvcGVydHlTb3VyY2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVN0cnVjdHVyZWRJdGVtQ29udGVudFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklUcmVlSXRlbUNvbnRlbnRQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwucHJvdmlkZXIuTm9kZURlY29yYXRvckl0ZW1Qcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwuZGVjb3JhdG9ycy5UZXN0Tm9kZURlY29yYXRvcjE7CisKKy8qKgorICogVGhpcyBpcyB0aGUgaXRlbSBwcm92aWRlciBhZGFwdGVyIGZvciBhIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwuZGVjb3JhdG9ycy5UZXN0Tm9kZURlY29yYXRvcjF9IG9iamVjdC4KKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIFRlc3ROb2RlRGVjb3JhdG9yMUl0ZW1Qcm92aWRlcgorCWV4dGVuZHMgTm9kZURlY29yYXRvckl0ZW1Qcm92aWRlcgorCWltcGxlbWVudHMJCisJCUlFZGl0aW5nRG9tYWluSXRlbVByb3ZpZGVyLAkKKwkJSVN0cnVjdHVyZWRJdGVtQ29udGVudFByb3ZpZGVyLAkKKwkJSVRyZWVJdGVtQ29udGVudFByb3ZpZGVyLAkKKwkJSUl0ZW1MYWJlbFByb3ZpZGVyLAkKKwkJSUl0ZW1Qcm9wZXJ0eVNvdXJjZSB7CisJLyoqCisJICogVGhpcyBjb25zdHJ1Y3RzIGFuIGluc3RhbmNlIGZyb20gYSBmYWN0b3J5IGFuZCBhIG5vdGlmaWVyLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBUZXN0Tm9kZURlY29yYXRvcjFJdGVtUHJvdmlkZXIoQWRhcHRlckZhY3RvcnkgYWRhcHRlckZhY3RvcnkpIHsKKwkJc3VwZXIoYWRhcHRlckZhY3RvcnkpOworCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyB0aGUgcHJvcGVydHkgZGVzY3JpcHRvcnMgZm9yIHRoZSBhZGFwdGVkIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBMaXN0PElJdGVtUHJvcGVydHlEZXNjcmlwdG9yPiBnZXRQcm9wZXJ0eURlc2NyaXB0b3JzKE9iamVjdCBvYmplY3QpIHsKKwkJaWYgKGl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzID09IG51bGwpIHsKKwkJCXN1cGVyLmdldFByb3BlcnR5RGVzY3JpcHRvcnMob2JqZWN0KTsKKworCQl9CisJCXJldHVybiBpdGVtUHJvcGVydHlEZXNjcmlwdG9yczsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgVGVzdE5vZGVEZWNvcmF0b3IxLmdpZi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgT2JqZWN0IGdldEltYWdlKE9iamVjdCBvYmplY3QpIHsKKwkJcmV0dXJuIG92ZXJsYXlJbWFnZShvYmplY3QsIGdldFJlc291cmNlTG9jYXRvcigpLmdldEltYWdlKCJmdWxsL29iajE2L1Rlc3ROb2RlRGVjb3JhdG9yMSIpKTsgLy8kTk9OLU5MUy0xJAorCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyB0aGUgbGFiZWwgdGV4dCBmb3IgdGhlIGFkYXB0ZWQgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIFN0cmluZyBnZXRUZXh0KE9iamVjdCBvYmplY3QpIHsKKwkJVVJJIGxhYmVsVmFsdWUgPSAoKFRlc3ROb2RlRGVjb3JhdG9yMSlvYmplY3QpLmdldFVSSSgpOworCQlTdHJpbmcgbGFiZWwgPSBsYWJlbFZhbHVlID09IG51bGwgPyBudWxsIDogbGFiZWxWYWx1ZS50b1N0cmluZygpOworCQlyZXR1cm4gbGFiZWwgPT0gbnVsbCB8fCBsYWJlbC5sZW5ndGgoKSA9PSAwID8KKwkJCWdldFN0cmluZygiX1VJX1Rlc3ROb2RlRGVjb3JhdG9yMV90eXBlIikgOiAvLyROT04tTkxTLTEkCisJCQlnZXRTdHJpbmcoIl9VSV9UZXN0Tm9kZURlY29yYXRvcjFfdHlwZSIpICsgIiAiICsgbGFiZWw7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAorCX0KKworCS8qKgorCSAqIFRoaXMgaGFuZGxlcyBtb2RlbCBub3RpZmljYXRpb25zIGJ5IGNhbGxpbmcge0BsaW5rICN1cGRhdGVDaGlsZHJlbn0gdG8gdXBkYXRlIGFueSBjYWNoZWQKKwkgKiBjaGlsZHJlbiBhbmQgYnkgY3JlYXRpbmcgYSB2aWV3ZXIgbm90aWZpY2F0aW9uLCB3aGljaCBpdCBwYXNzZXMgdG8ge0BsaW5rICNmaXJlTm90aWZ5Q2hhbmdlZH0uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgbm90aWZ5Q2hhbmdlZChOb3RpZmljYXRpb24gbm90aWZpY2F0aW9uKSB7CisJCXVwZGF0ZUNoaWxkcmVuKG5vdGlmaWNhdGlvbik7CisJCXN1cGVyLm5vdGlmeUNoYW5nZWQobm90aWZpY2F0aW9uKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFkZHMge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lZGl0LmNvbW1hbmQuQ29tbWFuZFBhcmFtZXRlcn1zIGRlc2NyaWJpbmcgdGhlIGNoaWxkcmVuCisJICogdGhhdCBjYW4gYmUgY3JlYXRlZCB1bmRlciB0aGlzIG9iamVjdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgdm9pZCBjb2xsZWN0TmV3Q2hpbGREZXNjcmlwdG9ycyhDb2xsZWN0aW9uPE9iamVjdD4gbmV3Q2hpbGREZXNjcmlwdG9ycywgT2JqZWN0IG9iamVjdCkgeworCQlzdXBlci5jb2xsZWN0TmV3Q2hpbGREZXNjcmlwdG9ycyhuZXdDaGlsZERlc2NyaXB0b3JzLCBvYmplY3QpOworCX0KKworCS8qKgorCSAqIFJldHVybiB0aGUgcmVzb3VyY2UgbG9jYXRvciBmb3IgdGhpcyBpdGVtIHByb3ZpZGVyJ3MgcmVzb3VyY2VzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBSZXNvdXJjZUxvY2F0b3IgZ2V0UmVzb3VyY2VMb2NhdG9yKCkgeworCQlyZXR1cm4gVGVzdHV0aWxpdHlFZGl0UGx1Z2luLklOU1RBTkNFOworCX0KKworfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3Rlc3RzL3V0aWwvZGVjb3JhdG9ycy9wcm92aWRlci9UZXN0U2NlbmFyaW9HcmFwaERlY29yYXRvcjFJdGVtUHJvdmlkZXIuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS90ZXN0cy91dGlsL2RlY29yYXRvcnMvcHJvdmlkZXIvVGVzdFNjZW5hcmlvR3JhcGhEZWNvcmF0b3IxSXRlbVByb3ZpZGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2FlM2RkOAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS90ZXN0cy91dGlsL2RlY29yYXRvcnMvcHJvdmlkZXIvVGVzdFNjZW5hcmlvR3JhcGhEZWNvcmF0b3IxSXRlbVByb3ZpZGVyLmphdmEKQEAgLTAsMCArMSwyNTkgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsLmRlY29yYXRvcnMucHJvdmlkZXI7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5BZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlJlc291cmNlTG9jYXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuVVJJOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkNvbXBvc2VhYmxlQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUVkaXRpbmdEb21haW5JdGVtUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1MYWJlbFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtUHJvcGVydHlEZXNjcmlwdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtUHJvcGVydHlTb3VyY2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVN0cnVjdHVyZWRJdGVtQ29udGVudFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklUcmVlSXRlbUNvbnRlbnRQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JdGVtUHJvcGVydHlEZXNjcmlwdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLlZpZXdlck5vdGlmaWNhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwucHJvdmlkZXIuR3JhcGhEZWNvcmF0b3JJdGVtUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsLmRlY29yYXRvcnMuRGVjb3JhdG9yc1BhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsLmRlY29yYXRvcnMuVGVzdFNjZW5hcmlvR3JhcGhEZWNvcmF0b3IxOworCisvKioKKyAqIFRoaXMgaXMgdGhlIGl0ZW0gcHJvdmlkZXIgYWRhcHRlciBmb3IgYSB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsLmRlY29yYXRvcnMuVGVzdFNjZW5hcmlvR3JhcGhEZWNvcmF0b3IxfSBvYmplY3QuCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBUZXN0U2NlbmFyaW9HcmFwaERlY29yYXRvcjFJdGVtUHJvdmlkZXIKKwlleHRlbmRzIEdyYXBoRGVjb3JhdG9ySXRlbVByb3ZpZGVyCisJaW1wbGVtZW50cwkKKwkJSUVkaXRpbmdEb21haW5JdGVtUHJvdmlkZXIsCQorCQlJU3RydWN0dXJlZEl0ZW1Db250ZW50UHJvdmlkZXIsCQorCQlJVHJlZUl0ZW1Db250ZW50UHJvdmlkZXIsCQorCQlJSXRlbUxhYmVsUHJvdmlkZXIsCQorCQlJSXRlbVByb3BlcnR5U291cmNlIHsKKwkvKioKKwkgKiBUaGlzIGNvbnN0cnVjdHMgYW4gaW5zdGFuY2UgZnJvbSBhIGZhY3RvcnkgYW5kIGEgbm90aWZpZXIuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFRlc3RTY2VuYXJpb0dyYXBoRGVjb3JhdG9yMUl0ZW1Qcm92aWRlcihBZGFwdGVyRmFjdG9yeSBhZGFwdGVyRmFjdG9yeSkgeworCQlzdXBlcihhZGFwdGVyRmFjdG9yeSk7CisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIHRoZSBwcm9wZXJ0eSBkZXNjcmlwdG9ycyBmb3IgdGhlIGFkYXB0ZWQgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIExpc3Q8SUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I+IGdldFByb3BlcnR5RGVzY3JpcHRvcnMoT2JqZWN0IG9iamVjdCkgeworCQlpZiAoaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMgPT0gbnVsbCkgeworCQkJc3VwZXIuZ2V0UHJvcGVydHlEZXNjcmlwdG9ycyhvYmplY3QpOworCisJCQlhZGREb3VibGVWYWx1ZVByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QpOworCQkJYWRkSW50VmFsdWVQcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0KTsKKwkJCWFkZFN0cmluZ1ZhbHVlUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCk7CisJCQlhZGRTVEVNVGltZVZhbHVlUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCk7CisJCQlhZGRCb29sZWFuVmFsdWVQcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0KTsKKwkJfQorCQlyZXR1cm4gaXRlbVByb3BlcnR5RGVzY3JpcHRvcnM7CisJfQorCisJLyoqCisJICogVGhpcyBhZGRzIGEgcHJvcGVydHkgZGVzY3JpcHRvciBmb3IgdGhlIERvdWJsZSBWYWx1ZSBmZWF0dXJlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIGFkZERvdWJsZVZhbHVlUHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdCBvYmplY3QpIHsKKwkJaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMuYWRkCisJCQkoY3JlYXRlSXRlbVByb3BlcnR5RGVzY3JpcHRvcgorCQkJCSgoKENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnkpYWRhcHRlckZhY3RvcnkpLmdldFJvb3RBZGFwdGVyRmFjdG9yeSgpLAorCQkJCSBnZXRSZXNvdXJjZUxvY2F0b3IoKSwKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfVGVzdFNjZW5hcmlvR3JhcGhEZWNvcmF0b3IxX2RvdWJsZVZhbHVlX2ZlYXR1cmUiKSwgLy8kTk9OLU5MUy0xJAorCQkJCSBnZXRTdHJpbmcoIl9VSV9Qcm9wZXJ0eURlc2NyaXB0b3JfZGVzY3JpcHRpb24iLCAiX1VJX1Rlc3RTY2VuYXJpb0dyYXBoRGVjb3JhdG9yMV9kb3VibGVWYWx1ZV9mZWF0dXJlIiwgIl9VSV9UZXN0U2NlbmFyaW9HcmFwaERlY29yYXRvcjFfdHlwZSIpLCAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQgLy8kTk9OLU5MUy0zJAorCQkJCSBEZWNvcmF0b3JzUGFja2FnZS5MaXRlcmFscy5URVNUX1NDRU5BUklPX0dSQVBIX0RFQ09SQVRPUjFfX0RPVUJMRV9WQUxVRSwKKwkJCQkgdHJ1ZSwKKwkJCQkgZmFsc2UsCisJCQkJIGZhbHNlLAorCQkJCSBJdGVtUHJvcGVydHlEZXNjcmlwdG9yLlJFQUxfVkFMVUVfSU1BR0UsCisJCQkJIG51bGwsCisJCQkJIG51bGwpKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFkZHMgYSBwcm9wZXJ0eSBkZXNjcmlwdG9yIGZvciB0aGUgSW50IFZhbHVlIGZlYXR1cmUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgYWRkSW50VmFsdWVQcm9wZXJ0eURlc2NyaXB0b3IoT2JqZWN0IG9iamVjdCkgeworCQlpdGVtUHJvcGVydHlEZXNjcmlwdG9ycy5hZGQKKwkJCShjcmVhdGVJdGVtUHJvcGVydHlEZXNjcmlwdG9yCisJCQkJKCgoQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSlhZGFwdGVyRmFjdG9yeSkuZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCksCisJCQkJIGdldFJlc291cmNlTG9jYXRvcigpLAorCQkJCSBnZXRTdHJpbmcoIl9VSV9UZXN0U2NlbmFyaW9HcmFwaERlY29yYXRvcjFfaW50VmFsdWVfZmVhdHVyZSIpLCAvLyROT04tTkxTLTEkCisJCQkJIGdldFN0cmluZygiX1VJX1Byb3BlcnR5RGVzY3JpcHRvcl9kZXNjcmlwdGlvbiIsICJfVUlfVGVzdFNjZW5hcmlvR3JhcGhEZWNvcmF0b3IxX2ludFZhbHVlX2ZlYXR1cmUiLCAiX1VJX1Rlc3RTY2VuYXJpb0dyYXBoRGVjb3JhdG9yMV90eXBlIiksIC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJCAvLyROT04tTkxTLTMkCisJCQkJIERlY29yYXRvcnNQYWNrYWdlLkxpdGVyYWxzLlRFU1RfU0NFTkFSSU9fR1JBUEhfREVDT1JBVE9SMV9fSU5UX1ZBTFVFLAorCQkJCSB0cnVlLAorCQkJCSBmYWxzZSwKKwkJCQkgZmFsc2UsCisJCQkJIEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IuSU5URUdSQUxfVkFMVUVfSU1BR0UsCisJCQkJIG51bGwsCisJCQkJIG51bGwpKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFkZHMgYSBwcm9wZXJ0eSBkZXNjcmlwdG9yIGZvciB0aGUgU3RyaW5nIFZhbHVlIGZlYXR1cmUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgYWRkU3RyaW5nVmFsdWVQcm9wZXJ0eURlc2NyaXB0b3IoT2JqZWN0IG9iamVjdCkgeworCQlpdGVtUHJvcGVydHlEZXNjcmlwdG9ycy5hZGQKKwkJCShjcmVhdGVJdGVtUHJvcGVydHlEZXNjcmlwdG9yCisJCQkJKCgoQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSlhZGFwdGVyRmFjdG9yeSkuZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCksCisJCQkJIGdldFJlc291cmNlTG9jYXRvcigpLAorCQkJCSBnZXRTdHJpbmcoIl9VSV9UZXN0U2NlbmFyaW9HcmFwaERlY29yYXRvcjFfc3RyaW5nVmFsdWVfZmVhdHVyZSIpLCAvLyROT04tTkxTLTEkCisJCQkJIGdldFN0cmluZygiX1VJX1Byb3BlcnR5RGVzY3JpcHRvcl9kZXNjcmlwdGlvbiIsICJfVUlfVGVzdFNjZW5hcmlvR3JhcGhEZWNvcmF0b3IxX3N0cmluZ1ZhbHVlX2ZlYXR1cmUiLCAiX1VJX1Rlc3RTY2VuYXJpb0dyYXBoRGVjb3JhdG9yMV90eXBlIiksIC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJCAvLyROT04tTkxTLTMkCisJCQkJIERlY29yYXRvcnNQYWNrYWdlLkxpdGVyYWxzLlRFU1RfU0NFTkFSSU9fR1JBUEhfREVDT1JBVE9SMV9fU1RSSU5HX1ZBTFVFLAorCQkJCSB0cnVlLAorCQkJCSBmYWxzZSwKKwkJCQkgZmFsc2UsCisJCQkJIEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IuR0VORVJJQ19WQUxVRV9JTUFHRSwKKwkJCQkgbnVsbCwKKwkJCQkgbnVsbCkpOworCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyBhIHByb3BlcnR5IGRlc2NyaXB0b3IgZm9yIHRoZSBTVEVNIFRpbWUgVmFsdWUgZmVhdHVyZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBhZGRTVEVNVGltZVZhbHVlUHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdCBvYmplY3QpIHsKKwkJaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMuYWRkCisJCQkoY3JlYXRlSXRlbVByb3BlcnR5RGVzY3JpcHRvcgorCQkJCSgoKENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnkpYWRhcHRlckZhY3RvcnkpLmdldFJvb3RBZGFwdGVyRmFjdG9yeSgpLAorCQkJCSBnZXRSZXNvdXJjZUxvY2F0b3IoKSwKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfVGVzdFNjZW5hcmlvR3JhcGhEZWNvcmF0b3IxX3NURU1UaW1lVmFsdWVfZmVhdHVyZSIpLCAvLyROT04tTkxTLTEkCisJCQkJIGdldFN0cmluZygiX1VJX1Byb3BlcnR5RGVzY3JpcHRvcl9kZXNjcmlwdGlvbiIsICJfVUlfVGVzdFNjZW5hcmlvR3JhcGhEZWNvcmF0b3IxX3NURU1UaW1lVmFsdWVfZmVhdHVyZSIsICJfVUlfVGVzdFNjZW5hcmlvR3JhcGhEZWNvcmF0b3IxX3R5cGUiKSwgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkIC8vJE5PTi1OTFMtMyQKKwkJCQkgRGVjb3JhdG9yc1BhY2thZ2UuTGl0ZXJhbHMuVEVTVF9TQ0VOQVJJT19HUkFQSF9ERUNPUkFUT1IxX19TVEVNX1RJTUVfVkFMVUUsCisJCQkJIHRydWUsCisJCQkJIGZhbHNlLAorCQkJCSB0cnVlLAorCQkJCSBudWxsLAorCQkJCSBudWxsLAorCQkJCSBudWxsKSk7CisJfQorCisJLyoqCisJICogVGhpcyBhZGRzIGEgcHJvcGVydHkgZGVzY3JpcHRvciBmb3IgdGhlIEJvb2xlYW4gVmFsdWUgZmVhdHVyZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBhZGRCb29sZWFuVmFsdWVQcm9wZXJ0eURlc2NyaXB0b3IoT2JqZWN0IG9iamVjdCkgeworCQlpdGVtUHJvcGVydHlEZXNjcmlwdG9ycy5hZGQKKwkJCShjcmVhdGVJdGVtUHJvcGVydHlEZXNjcmlwdG9yCisJCQkJKCgoQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSlhZGFwdGVyRmFjdG9yeSkuZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCksCisJCQkJIGdldFJlc291cmNlTG9jYXRvcigpLAorCQkJCSBnZXRTdHJpbmcoIl9VSV9UZXN0U2NlbmFyaW9HcmFwaERlY29yYXRvcjFfYm9vbGVhblZhbHVlX2ZlYXR1cmUiKSwgLy8kTk9OLU5MUy0xJAorCQkJCSBnZXRTdHJpbmcoIl9VSV9Qcm9wZXJ0eURlc2NyaXB0b3JfZGVzY3JpcHRpb24iLCAiX1VJX1Rlc3RTY2VuYXJpb0dyYXBoRGVjb3JhdG9yMV9ib29sZWFuVmFsdWVfZmVhdHVyZSIsICJfVUlfVGVzdFNjZW5hcmlvR3JhcGhEZWNvcmF0b3IxX3R5cGUiKSwgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkIC8vJE5PTi1OTFMtMyQKKwkJCQkgRGVjb3JhdG9yc1BhY2thZ2UuTGl0ZXJhbHMuVEVTVF9TQ0VOQVJJT19HUkFQSF9ERUNPUkFUT1IxX19CT09MRUFOX1ZBTFVFLAorCQkJCSB0cnVlLAorCQkJCSBmYWxzZSwKKwkJCQkgZmFsc2UsCisJCQkJIEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IuQk9PTEVBTl9WQUxVRV9JTUFHRSwKKwkJCQkgbnVsbCwKKwkJCQkgbnVsbCkpOworCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyBUZXN0U2NlbmFyaW9HcmFwaERlY29yYXRvcjEuZ2lmLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBPYmplY3QgZ2V0SW1hZ2UoT2JqZWN0IG9iamVjdCkgeworCQlyZXR1cm4gb3ZlcmxheUltYWdlKG9iamVjdCwgZ2V0UmVzb3VyY2VMb2NhdG9yKCkuZ2V0SW1hZ2UoImZ1bGwvb2JqMTYvVGVzdFNjZW5hcmlvR3JhcGhEZWNvcmF0b3IxIikpOyAvLyROT04tTkxTLTEkCisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIHRoZSBsYWJlbCB0ZXh0IGZvciB0aGUgYWRhcHRlZCBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgU3RyaW5nIGdldFRleHQoT2JqZWN0IG9iamVjdCkgeworCQlVUkkgbGFiZWxWYWx1ZSA9ICgoVGVzdFNjZW5hcmlvR3JhcGhEZWNvcmF0b3IxKW9iamVjdCkuZ2V0VVJJKCk7CisJCVN0cmluZyBsYWJlbCA9IGxhYmVsVmFsdWUgPT0gbnVsbCA/IG51bGwgOiBsYWJlbFZhbHVlLnRvU3RyaW5nKCk7CisJCXJldHVybiBsYWJlbCA9PSBudWxsIHx8IGxhYmVsLmxlbmd0aCgpID09IDAgPworCQkJZ2V0U3RyaW5nKCJfVUlfVGVzdFNjZW5hcmlvR3JhcGhEZWNvcmF0b3IxX3R5cGUiKSA6IC8vJE5PTi1OTFMtMSQKKwkJCWdldFN0cmluZygiX1VJX1Rlc3RTY2VuYXJpb0dyYXBoRGVjb3JhdG9yMV90eXBlIikgKyAiICIgKyBsYWJlbDsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCisJfQorCisJLyoqCisJICogVGhpcyBoYW5kbGVzIG1vZGVsIG5vdGlmaWNhdGlvbnMgYnkgY2FsbGluZyB7QGxpbmsgI3VwZGF0ZUNoaWxkcmVufSB0byB1cGRhdGUgYW55IGNhY2hlZAorCSAqIGNoaWxkcmVuIGFuZCBieSBjcmVhdGluZyBhIHZpZXdlciBub3RpZmljYXRpb24sIHdoaWNoIGl0IHBhc3NlcyB0byB7QGxpbmsgI2ZpcmVOb3RpZnlDaGFuZ2VkfS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBub3RpZnlDaGFuZ2VkKE5vdGlmaWNhdGlvbiBub3RpZmljYXRpb24pIHsKKwkJdXBkYXRlQ2hpbGRyZW4obm90aWZpY2F0aW9uKTsKKworCQlzd2l0Y2ggKG5vdGlmaWNhdGlvbi5nZXRGZWF0dXJlSUQoVGVzdFNjZW5hcmlvR3JhcGhEZWNvcmF0b3IxLmNsYXNzKSkgeworCQkJY2FzZSBEZWNvcmF0b3JzUGFja2FnZS5URVNUX1NDRU5BUklPX0dSQVBIX0RFQ09SQVRPUjFfX0RPVUJMRV9WQUxVRToKKwkJCWNhc2UgRGVjb3JhdG9yc1BhY2thZ2UuVEVTVF9TQ0VOQVJJT19HUkFQSF9ERUNPUkFUT1IxX19JTlRfVkFMVUU6CisJCQljYXNlIERlY29yYXRvcnNQYWNrYWdlLlRFU1RfU0NFTkFSSU9fR1JBUEhfREVDT1JBVE9SMV9fU1RSSU5HX1ZBTFVFOgorCQkJY2FzZSBEZWNvcmF0b3JzUGFja2FnZS5URVNUX1NDRU5BUklPX0dSQVBIX0RFQ09SQVRPUjFfX0JPT0xFQU5fVkFMVUU6CisJCQkJZmlyZU5vdGlmeUNoYW5nZWQobmV3IFZpZXdlck5vdGlmaWNhdGlvbihub3RpZmljYXRpb24sIG5vdGlmaWNhdGlvbi5nZXROb3RpZmllcigpLCBmYWxzZSwgdHJ1ZSkpOworCQkJCXJldHVybjsKKwkJfQorCQlzdXBlci5ub3RpZnlDaGFuZ2VkKG5vdGlmaWNhdGlvbik7CisJfQorCisJLyoqCisJICogVGhpcyBhZGRzIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuZWRpdC5jb21tYW5kLkNvbW1hbmRQYXJhbWV0ZXJ9cyBkZXNjcmliaW5nIHRoZSBjaGlsZHJlbgorCSAqIHRoYXQgY2FuIGJlIGNyZWF0ZWQgdW5kZXIgdGhpcyBvYmplY3QuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgY29sbGVjdE5ld0NoaWxkRGVzY3JpcHRvcnMoQ29sbGVjdGlvbjxPYmplY3Q+IG5ld0NoaWxkRGVzY3JpcHRvcnMsIE9iamVjdCBvYmplY3QpIHsKKwkJc3VwZXIuY29sbGVjdE5ld0NoaWxkRGVzY3JpcHRvcnMobmV3Q2hpbGREZXNjcmlwdG9ycywgb2JqZWN0KTsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm4gdGhlIHJlc291cmNlIGxvY2F0b3IgZm9yIHRoaXMgaXRlbSBwcm92aWRlcidzIHJlc291cmNlcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgUmVzb3VyY2VMb2NhdG9yIGdldFJlc291cmNlTG9jYXRvcigpIHsKKwkJcmV0dXJuIFRlc3R1dGlsaXR5RWRpdFBsdWdpbi5JTlNUQU5DRTsKKwl9CisKK30KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS90ZXN0cy91dGlsL2RlY29yYXRvcnMvcHJvdmlkZXIvVGVzdHV0aWxpdHlFZGl0UGx1Z2luLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdGVzdHMvdXRpbC9kZWNvcmF0b3JzL3Byb3ZpZGVyL1Rlc3R1dGlsaXR5RWRpdFBsdWdpbi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQwNmViYTYKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdGVzdHMvdXRpbC9kZWNvcmF0b3JzL3Byb3ZpZGVyL1Rlc3R1dGlsaXR5RWRpdFBsdWdpbi5qYXZhCkBAIC0wLDAgKzEsMTAyIEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC5kZWNvcmF0b3JzLnByb3ZpZGVyOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24uRU1GUGx1Z2luOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udWkuRWNsaXBzZVVJUGx1Z2luOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5SZXNvdXJjZUxvY2F0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnByb3ZpZGVyLkVjb3JlRWRpdFBsdWdpbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLnByb3ZpZGVyLkNvcmVFZGl0UGx1Z2luOworCisvKioKKyAqIFRoaXMgaXMgdGhlIGNlbnRyYWwgc2luZ2xldG9uIGZvciB0aGUgVGVzdHV0aWxpdHkgZWRpdG9yIHBsdWdpbi4KKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGZpbmFsIGNsYXNzIFRlc3R1dGlsaXR5RWRpdFBsdWdpbiBleHRlbmRzIEVNRlBsdWdpbiB7CisJLyoqCisJICogS2VlcCB0cmFjayBvZiB0aGUgc2luZ2xldG9uLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgVGVzdHV0aWxpdHlFZGl0UGx1Z2luIElOU1RBTkNFID0gbmV3IFRlc3R1dGlsaXR5RWRpdFBsdWdpbigpOworCisJLyoqCisJICogS2VlcCB0cmFjayBvZiB0aGUgc2luZ2xldG9uLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByaXZhdGUgc3RhdGljIEltcGxlbWVudGF0aW9uIHBsdWdpbjsKKworCS8qKgorCSAqIENyZWF0ZSB0aGUgaW5zdGFuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFRlc3R1dGlsaXR5RWRpdFBsdWdpbigpIHsKKwkJc3VwZXIKKwkJCShuZXcgUmVzb3VyY2VMb2NhdG9yIFtdIHsKKwkJCQlDb3JlRWRpdFBsdWdpbi5JTlNUQU5DRSwKKwkJCQlFY29yZUVkaXRQbHVnaW4uSU5TVEFOQ0UsCisJCQl9KTsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBzaW5nbGV0b24gaW5zdGFuY2Ugb2YgdGhlIEVjbGlwc2UgcGx1Z2luLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgc2luZ2xldG9uIGluc3RhbmNlLgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgUmVzb3VyY2VMb2NhdG9yIGdldFBsdWdpblJlc291cmNlTG9jYXRvcigpIHsKKwkJcmV0dXJuIHBsdWdpbjsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBzaW5nbGV0b24gaW5zdGFuY2Ugb2YgdGhlIEVjbGlwc2UgcGx1Z2luLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgc2luZ2xldG9uIGluc3RhbmNlLgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgc3RhdGljIEltcGxlbWVudGF0aW9uIGdldFBsdWdpbigpIHsKKwkJcmV0dXJuIHBsdWdpbjsKKwl9CisKKwkvKioKKwkgKiBUaGUgYWN0dWFsIGltcGxlbWVudGF0aW9uIG9mIHRoZSBFY2xpcHNlIDxiPlBsdWdpbjwvYj4uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHN0YXRpYyBjbGFzcyBJbXBsZW1lbnRhdGlvbiBleHRlbmRzIEVjbGlwc2VVSVBsdWdpbiB7CisJCS8qKgorCQkgKiBDcmVhdGVzIGFuIGluc3RhbmNlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJcHVibGljIEltcGxlbWVudGF0aW9uKCkgeworCQkJc3VwZXIoKTsKKwkKKwkJCS8vIFJlbWVtYmVyIHRoZSBzdGF0aWMgaW5zdGFuY2UuCisJCQkvLworCQkJcGx1Z2luID0gdGhpczsKKwkJfQorCX0KKworfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3Rlc3RzL3V0aWwvZGVjb3JhdG9ycy91dGlsL0RlY29yYXRvcnNBZGFwdGVyRmFjdG9yeS5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3Rlc3RzL3V0aWwvZGVjb3JhdG9ycy91dGlsL0RlY29yYXRvcnNBZGFwdGVyRmFjdG9yeS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg1NWQzMmYKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdGVzdHMvdXRpbC9kZWNvcmF0b3JzL3V0aWwvRGVjb3JhdG9yc0FkYXB0ZXJGYWN0b3J5LmphdmEKQEAgLTAsMCArMSwzNTEgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsLmRlY29yYXRvcnMudXRpbDsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5BZGFwdGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LmltcGwuQWRhcHRlckZhY3RvcnlJbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uSWRlbnRpZmlhYmxlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5EZWNvcmF0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLkVkZ2VEZWNvcmF0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLkdyYXBoRGVjb3JhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5Ob2RlRGVjb3JhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC5kZWNvcmF0b3JzLkRlY29yYXRvcnNQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC5kZWNvcmF0b3JzLlRlc3RFZGdlRGVjb3JhdG9yMTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwuZGVjb3JhdG9ycy5UZXN0R3JhcGhEZWNvcmF0b3IxOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC5kZWNvcmF0b3JzLlRlc3ROb2RlRGVjb3JhdG9yMTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwuZGVjb3JhdG9ycy5UZXN0U2NlbmFyaW9HcmFwaERlY29yYXRvcjE7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIFRoZSA8Yj5BZGFwdGVyIEZhY3Rvcnk8L2I+IGZvciB0aGUgbW9kZWwuCisgKiBJdCBwcm92aWRlcyBhbiBhZGFwdGVyIDxjb2RlPmNyZWF0ZVhYWDwvY29kZT4gbWV0aG9kIGZvciBlYWNoIGNsYXNzIG9mIHRoZSBtb2RlbC4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwuZGVjb3JhdG9ycy5EZWNvcmF0b3JzUGFja2FnZQorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgRGVjb3JhdG9yc0FkYXB0ZXJGYWN0b3J5IGV4dGVuZHMgQWRhcHRlckZhY3RvcnlJbXBsIHsKKwkvKioKKwkgKiBUaGUgY2FjaGVkIG1vZGVsIHBhY2thZ2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHN0YXRpYyBEZWNvcmF0b3JzUGFja2FnZSBtb2RlbFBhY2thZ2U7CisKKwkvKioKKwkgKiBDcmVhdGVzIGFuIGluc3RhbmNlIG9mIHRoZSBhZGFwdGVyIGZhY3RvcnkuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIERlY29yYXRvcnNBZGFwdGVyRmFjdG9yeSgpIHsKKwkJaWYgKG1vZGVsUGFja2FnZSA9PSBudWxsKSB7CisJCQltb2RlbFBhY2thZ2UgPSBEZWNvcmF0b3JzUGFja2FnZS5lSU5TVEFOQ0U7CisJCX0KKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHdoZXRoZXIgdGhpcyBmYWN0b3J5IGlzIGFwcGxpY2FibGUgZm9yIHRoZSB0eXBlIG9mIHRoZSBvYmplY3QuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgPGNvZGU+dHJ1ZTwvY29kZT4gaWYgdGhlIG9iamVjdCBpcyBlaXRoZXIgdGhlIG1vZGVsJ3MgcGFja2FnZSBvciBpcyBhbiBpbnN0YW5jZSBvYmplY3Qgb2YgdGhlIG1vZGVsLgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gd2hldGhlciB0aGlzIGZhY3RvcnkgaXMgYXBwbGljYWJsZSBmb3IgdGhlIHR5cGUgb2YgdGhlIG9iamVjdC4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIGJvb2xlYW4gaXNGYWN0b3J5Rm9yVHlwZShPYmplY3Qgb2JqZWN0KSB7CisJCWlmIChvYmplY3QgPT0gbW9kZWxQYWNrYWdlKSB7CisJCQlyZXR1cm4gdHJ1ZTsKKwkJfQorCQlpZiAob2JqZWN0IGluc3RhbmNlb2YgRU9iamVjdCkgeworCQkJcmV0dXJuICgoRU9iamVjdClvYmplY3QpLmVDbGFzcygpLmdldEVQYWNrYWdlKCkgPT0gbW9kZWxQYWNrYWdlOworCQl9CisJCXJldHVybiBmYWxzZTsKKwl9CisKKwkvKioKKwkgKiBUaGUgc3dpdGNoIHRoYXQgZGVsZWdhdGVzIHRvIHRoZSA8Y29kZT5jcmVhdGVYWFg8L2NvZGU+IG1ldGhvZHMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIERlY29yYXRvcnNTd2l0Y2g8QWRhcHRlcj4gbW9kZWxTd2l0Y2ggPQorCQluZXcgRGVjb3JhdG9yc1N3aXRjaDxBZGFwdGVyPigpIHsKKwkJCUBPdmVycmlkZQorCQkJcHVibGljIEFkYXB0ZXIgY2FzZVRlc3RFZGdlRGVjb3JhdG9yMShUZXN0RWRnZURlY29yYXRvcjEgb2JqZWN0KSB7CisJCQkJcmV0dXJuIGNyZWF0ZVRlc3RFZGdlRGVjb3JhdG9yMUFkYXB0ZXIoKTsKKwkJCX0KKwkJCUBPdmVycmlkZQorCQkJcHVibGljIEFkYXB0ZXIgY2FzZVRlc3RHcmFwaERlY29yYXRvcjEoVGVzdEdyYXBoRGVjb3JhdG9yMSBvYmplY3QpIHsKKwkJCQlyZXR1cm4gY3JlYXRlVGVzdEdyYXBoRGVjb3JhdG9yMUFkYXB0ZXIoKTsKKwkJCX0KKwkJCUBPdmVycmlkZQorCQkJcHVibGljIEFkYXB0ZXIgY2FzZVRlc3ROb2RlRGVjb3JhdG9yMShUZXN0Tm9kZURlY29yYXRvcjEgb2JqZWN0KSB7CisJCQkJcmV0dXJuIGNyZWF0ZVRlc3ROb2RlRGVjb3JhdG9yMUFkYXB0ZXIoKTsKKwkJCX0KKwkJCUBPdmVycmlkZQorCQkJcHVibGljIEFkYXB0ZXIgY2FzZVRlc3RTY2VuYXJpb0dyYXBoRGVjb3JhdG9yMShUZXN0U2NlbmFyaW9HcmFwaERlY29yYXRvcjEgb2JqZWN0KSB7CisJCQkJcmV0dXJuIGNyZWF0ZVRlc3RTY2VuYXJpb0dyYXBoRGVjb3JhdG9yMUFkYXB0ZXIoKTsKKwkJCX0KKwkJCUBPdmVycmlkZQorCQkJcHVibGljIEFkYXB0ZXIgY2FzZUVkZ2VEZWNvcmF0b3IoRWRnZURlY29yYXRvciBvYmplY3QpIHsKKwkJCQlyZXR1cm4gY3JlYXRlRWRnZURlY29yYXRvckFkYXB0ZXIoKTsKKwkJCX0KKwkJCUBPdmVycmlkZQorCQkJcHVibGljIEFkYXB0ZXIgY2FzZUdyYXBoRGVjb3JhdG9yKEdyYXBoRGVjb3JhdG9yIG9iamVjdCkgeworCQkJCXJldHVybiBjcmVhdGVHcmFwaERlY29yYXRvckFkYXB0ZXIoKTsKKwkJCX0KKwkJCUBPdmVycmlkZQorCQkJcHVibGljIEFkYXB0ZXIgY2FzZU5vZGVEZWNvcmF0b3IoTm9kZURlY29yYXRvciBvYmplY3QpIHsKKwkJCQlyZXR1cm4gY3JlYXRlTm9kZURlY29yYXRvckFkYXB0ZXIoKTsKKwkJCX0KKwkJCUBPdmVycmlkZQorCQkJcHVibGljIDxUPiBBZGFwdGVyIGNhc2VDb21wYXJhYmxlKENvbXBhcmFibGU8VD4gb2JqZWN0KSB7CisJCQkJcmV0dXJuIGNyZWF0ZUNvbXBhcmFibGVBZGFwdGVyKCk7CisJCQl9CisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyBBZGFwdGVyIGNhc2VJZGVudGlmaWFibGUoSWRlbnRpZmlhYmxlIG9iamVjdCkgeworCQkJCXJldHVybiBjcmVhdGVJZGVudGlmaWFibGVBZGFwdGVyKCk7CisJCQl9CisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyBBZGFwdGVyIGNhc2VEZWNvcmF0b3IoRGVjb3JhdG9yIG9iamVjdCkgeworCQkJCXJldHVybiBjcmVhdGVEZWNvcmF0b3JBZGFwdGVyKCk7CisJCQl9CisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyBBZGFwdGVyIGNhc2VFZGdlRGVjb3JhdG9yXzEoRWRnZURlY29yYXRvciBvYmplY3QpIHsKKwkJCQlyZXR1cm4gY3JlYXRlRWRnZURlY29yYXRvcl8xQWRhcHRlcigpOworCQkJfQorCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgQWRhcHRlciBjYXNlR3JhcGhEZWNvcmF0b3JfMShHcmFwaERlY29yYXRvciBvYmplY3QpIHsKKwkJCQlyZXR1cm4gY3JlYXRlR3JhcGhEZWNvcmF0b3JfMUFkYXB0ZXIoKTsKKwkJCX0KKwkJCUBPdmVycmlkZQorCQkJcHVibGljIEFkYXB0ZXIgY2FzZU5vZGVEZWNvcmF0b3JfMShOb2RlRGVjb3JhdG9yIG9iamVjdCkgeworCQkJCXJldHVybiBjcmVhdGVOb2RlRGVjb3JhdG9yXzFBZGFwdGVyKCk7CisJCQl9CisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyBBZGFwdGVyIGRlZmF1bHRDYXNlKEVPYmplY3Qgb2JqZWN0KSB7CisJCQkJcmV0dXJuIGNyZWF0ZUVPYmplY3RBZGFwdGVyKCk7CisJCQl9CisJCX07CisKKwkvKioKKwkgKiBDcmVhdGVzIGFuIGFkYXB0ZXIgZm9yIHRoZSA8Y29kZT50YXJnZXQ8L2NvZGU+LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIHRhcmdldCB0aGUgb2JqZWN0IHRvIGFkYXB0LgorCSAqIEByZXR1cm4gdGhlIGFkYXB0ZXIgZm9yIHRoZSA8Y29kZT50YXJnZXQ8L2NvZGU+LgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVBZGFwdGVyKE5vdGlmaWVyIHRhcmdldCkgeworCQlyZXR1cm4gbW9kZWxTd2l0Y2guZG9Td2l0Y2goKEVPYmplY3QpdGFyZ2V0KTsKKwl9CisKKworCS8qKgorCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsLmRlY29yYXRvcnMuVGVzdE5vZGVEZWNvcmF0b3IxIDxlbT5UZXN0IE5vZGUgRGVjb3JhdG9yMTwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7CisJICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwuZGVjb3JhdG9ycy5UZXN0Tm9kZURlY29yYXRvcjEKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlVGVzdE5vZGVEZWNvcmF0b3IxQWRhcHRlcigpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwuZGVjb3JhdG9ycy5UZXN0RWRnZURlY29yYXRvcjEgPGVtPlRlc3QgRWRnZSBEZWNvcmF0b3IxPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsKKwkgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC5kZWNvcmF0b3JzLlRlc3RFZGdlRGVjb3JhdG9yMQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVUZXN0RWRnZURlY29yYXRvcjFBZGFwdGVyKCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC5kZWNvcmF0b3JzLlRlc3RHcmFwaERlY29yYXRvcjEgPGVtPlRlc3QgR3JhcGggRGVjb3JhdG9yMTwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7CisJICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwuZGVjb3JhdG9ycy5UZXN0R3JhcGhEZWNvcmF0b3IxCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZVRlc3RHcmFwaERlY29yYXRvcjFBZGFwdGVyKCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC5kZWNvcmF0b3JzLlRlc3RTY2VuYXJpb0dyYXBoRGVjb3JhdG9yMSA8ZW0+VGVzdCBTY2VuYXJpbyBHcmFwaCBEZWNvcmF0b3IxPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsKKwkgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC5kZWNvcmF0b3JzLlRlc3RTY2VuYXJpb0dyYXBoRGVjb3JhdG9yMQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVUZXN0U2NlbmFyaW9HcmFwaERlY29yYXRvcjFBZGFwdGVyKCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5Ob2RlRGVjb3JhdG9yIDxlbT5Ob2RlIERlY29yYXRvcjwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7CisJICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuTm9kZURlY29yYXRvcgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVOb2RlRGVjb3JhdG9yQWRhcHRlcigpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBqYXZhLmxhbmcuQ29tcGFyYWJsZSA8ZW0+Q29tcGFyYWJsZTwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7CisJICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCisJICogQHNlZSBqYXZhLmxhbmcuQ29tcGFyYWJsZQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVDb21wYXJhYmxlQWRhcHRlcigpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLklkZW50aWZpYWJsZSA8ZW0+SWRlbnRpZmlhYmxlPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsKKwkgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uSWRlbnRpZmlhYmxlCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZUlkZW50aWZpYWJsZUFkYXB0ZXIoKSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLkRlY29yYXRvciA8ZW0+RGVjb3JhdG9yPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsKKwkgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5EZWNvcmF0b3IKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlRGVjb3JhdG9yQWRhcHRlcigpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuRWRnZURlY29yYXRvciA8ZW0+RWRnZSBEZWNvcmF0b3I8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOworCSAqIGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZSB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5LgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLkVkZ2VEZWNvcmF0b3IKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlRWRnZURlY29yYXRvcl8xQWRhcHRlcigpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuR3JhcGhEZWNvcmF0b3IgPGVtPkdyYXBoIERlY29yYXRvcjwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7CisJICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuR3JhcGhEZWNvcmF0b3IKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlR3JhcGhEZWNvcmF0b3JfMUFkYXB0ZXIoKSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLk5vZGVEZWNvcmF0b3IgPGVtPk5vZGUgRGVjb3JhdG9yPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsKKwkgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5Ob2RlRGVjb3JhdG9yCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZU5vZGVEZWNvcmF0b3JfMUFkYXB0ZXIoKSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLkVkZ2VEZWNvcmF0b3IgPGVtPkVkZ2UgRGVjb3JhdG9yPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsKKwkgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5FZGdlRGVjb3JhdG9yCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZUVkZ2VEZWNvcmF0b3JBZGFwdGVyKCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5HcmFwaERlY29yYXRvciA8ZW0+R3JhcGggRGVjb3JhdG9yPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsKKwkgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5HcmFwaERlY29yYXRvcgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVHcmFwaERlY29yYXRvckFkYXB0ZXIoKSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgdGhlIGRlZmF1bHQgY2FzZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwuCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZUVPYmplY3RBZGFwdGVyKCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKK30gLy9EZWNvcmF0b3JzQWRhcHRlckZhY3RvcnkKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS90ZXN0cy91dGlsL2RlY29yYXRvcnMvdXRpbC9EZWNvcmF0b3JzU3dpdGNoLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdGVzdHMvdXRpbC9kZWNvcmF0b3JzL3V0aWwvRGVjb3JhdG9yc1N3aXRjaC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFkMGQ5MjAKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdGVzdHMvdXRpbC9kZWNvcmF0b3JzL3V0aWwvRGVjb3JhdG9yc1N3aXRjaC5qYXZhCkBAIC0wLDAgKzEsMzU4IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC5kZWNvcmF0b3JzLnV0aWw7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3Q7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5JZGVudGlmaWFibGU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLkRlY29yYXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuRWRnZURlY29yYXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuR3JhcGhEZWNvcmF0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLk5vZGVEZWNvcmF0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsLmRlY29yYXRvcnMuRGVjb3JhdG9yc1BhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsLmRlY29yYXRvcnMuVGVzdEVkZ2VEZWNvcmF0b3IxOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC5kZWNvcmF0b3JzLlRlc3RHcmFwaERlY29yYXRvcjE7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsLmRlY29yYXRvcnMuVGVzdE5vZGVEZWNvcmF0b3IxOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC5kZWNvcmF0b3JzLlRlc3RTY2VuYXJpb0dyYXBoRGVjb3JhdG9yMTsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogVGhlIDxiPlN3aXRjaDwvYj4gZm9yIHRoZSBtb2RlbCdzIGluaGVyaXRhbmNlIGhpZXJhcmNoeS4KKyAqIEl0IHN1cHBvcnRzIHRoZSBjYWxsIHtAbGluayAjZG9Td2l0Y2goRU9iamVjdCkgZG9Td2l0Y2gob2JqZWN0KX0KKyAqIHRvIGludm9rZSB0aGUgPGNvZGU+Y2FzZVhYWDwvY29kZT4gbWV0aG9kIGZvciBlYWNoIGNsYXNzIG9mIHRoZSBtb2RlbCwKKyAqIHN0YXJ0aW5nIHdpdGggdGhlIGFjdHVhbCBjbGFzcyBvZiB0aGUgb2JqZWN0CisgKiBhbmQgcHJvY2VlZGluZyB1cCB0aGUgaW5oZXJpdGFuY2UgaGllcmFyY2h5CisgKiB1bnRpbCBhIG5vbi1udWxsIHJlc3VsdCBpcyByZXR1cm5lZCwKKyAqIHdoaWNoIGlzIHRoZSByZXN1bHQgb2YgdGhlIHN3aXRjaC4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwuZGVjb3JhdG9ycy5EZWNvcmF0b3JzUGFja2FnZQorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgRGVjb3JhdG9yc1N3aXRjaDxUMT4geworCS8qKgorCSAqIFRoZSBjYWNoZWQgbW9kZWwgcGFja2FnZQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBzdGF0aWMgRGVjb3JhdG9yc1BhY2thZ2UgbW9kZWxQYWNrYWdlOworCisJLyoqCisJICogQ3JlYXRlcyBhbiBpbnN0YW5jZSBvZiB0aGUgc3dpdGNoLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBEZWNvcmF0b3JzU3dpdGNoKCkgeworCQlpZiAobW9kZWxQYWNrYWdlID09IG51bGwpIHsKKwkJCW1vZGVsUGFja2FnZSA9IERlY29yYXRvcnNQYWNrYWdlLmVJTlNUQU5DRTsKKwkJfQorCX0KKworCS8qKgorCSAqIENhbGxzIDxjb2RlPmNhc2VYWFg8L2NvZGU+IGZvciBlYWNoIGNsYXNzIG9mIHRoZSBtb2RlbCB1bnRpbCBvbmUgcmV0dXJucyBhIG5vbiBudWxsIHJlc3VsdDsgaXQgeWllbGRzIHRoYXQgcmVzdWx0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgZmlyc3Qgbm9uLW51bGwgcmVzdWx0IHJldHVybmVkIGJ5IGEgPGNvZGU+Y2FzZVhYWDwvY29kZT4gY2FsbC4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFQxIGRvU3dpdGNoKEVPYmplY3QgdGhlRU9iamVjdCkgeworCQlyZXR1cm4gZG9Td2l0Y2godGhlRU9iamVjdC5lQ2xhc3MoKSwgdGhlRU9iamVjdCk7CisJfQorCisJLyoqCisJICogQ2FsbHMgPGNvZGU+Y2FzZVhYWDwvY29kZT4gZm9yIGVhY2ggY2xhc3Mgb2YgdGhlIG1vZGVsIHVudGlsIG9uZSByZXR1cm5zIGEgbm9uIG51bGwgcmVzdWx0OyBpdCB5aWVsZHMgdGhhdCByZXN1bHQuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBmaXJzdCBub24tbnVsbCByZXN1bHQgcmV0dXJuZWQgYnkgYSA8Y29kZT5jYXNlWFhYPC9jb2RlPiBjYWxsLgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgVDEgZG9Td2l0Y2goRUNsYXNzIHRoZUVDbGFzcywgRU9iamVjdCB0aGVFT2JqZWN0KSB7CisJCWlmICh0aGVFQ2xhc3MuZUNvbnRhaW5lcigpID09IG1vZGVsUGFja2FnZSkgeworCQkJcmV0dXJuIGRvU3dpdGNoKHRoZUVDbGFzcy5nZXRDbGFzc2lmaWVySUQoKSwgdGhlRU9iamVjdCk7CisJCX0KKwkJZWxzZSB7CisJCQlMaXN0PEVDbGFzcz4gZVN1cGVyVHlwZXMgPSB0aGVFQ2xhc3MuZ2V0RVN1cGVyVHlwZXMoKTsKKwkJCXJldHVybgorCQkJCWVTdXBlclR5cGVzLmlzRW1wdHkoKSA/CisJCQkJCWRlZmF1bHRDYXNlKHRoZUVPYmplY3QpIDoKKwkJCQkJZG9Td2l0Y2goZVN1cGVyVHlwZXMuZ2V0KDApLCB0aGVFT2JqZWN0KTsKKwkJfQorCX0KKworCS8qKgorCSAqIENhbGxzIDxjb2RlPmNhc2VYWFg8L2NvZGU+IGZvciBlYWNoIGNsYXNzIG9mIHRoZSBtb2RlbCB1bnRpbCBvbmUgcmV0dXJucyBhIG5vbiBudWxsIHJlc3VsdDsgaXQgeWllbGRzIHRoYXQgcmVzdWx0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgZmlyc3Qgbm9uLW51bGwgcmVzdWx0IHJldHVybmVkIGJ5IGEgPGNvZGU+Y2FzZVhYWDwvY29kZT4gY2FsbC4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIFQxIGRvU3dpdGNoKGludCBjbGFzc2lmaWVySUQsIEVPYmplY3QgdGhlRU9iamVjdCkgeworCQlzd2l0Y2ggKGNsYXNzaWZpZXJJRCkgeworCQkJY2FzZSBEZWNvcmF0b3JzUGFja2FnZS5URVNUX0VER0VfREVDT1JBVE9SMTogeworCQkJCVRlc3RFZGdlRGVjb3JhdG9yMSB0ZXN0RWRnZURlY29yYXRvcjEgPSAoVGVzdEVkZ2VEZWNvcmF0b3IxKXRoZUVPYmplY3Q7CisJCQkJVDEgcmVzdWx0ID0gY2FzZVRlc3RFZGdlRGVjb3JhdG9yMSh0ZXN0RWRnZURlY29yYXRvcjEpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZUVkZ2VEZWNvcmF0b3JfMSh0ZXN0RWRnZURlY29yYXRvcjEpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZURlY29yYXRvcih0ZXN0RWRnZURlY29yYXRvcjEpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZUlkZW50aWZpYWJsZSh0ZXN0RWRnZURlY29yYXRvcjEpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZUNvbXBhcmFibGUodGVzdEVkZ2VEZWNvcmF0b3IxKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGRlZmF1bHRDYXNlKHRoZUVPYmplY3QpOworCQkJCXJldHVybiByZXN1bHQ7CisJCQl9CisJCQljYXNlIERlY29yYXRvcnNQYWNrYWdlLlRFU1RfR1JBUEhfREVDT1JBVE9SMTogeworCQkJCVRlc3RHcmFwaERlY29yYXRvcjEgdGVzdEdyYXBoRGVjb3JhdG9yMSA9IChUZXN0R3JhcGhEZWNvcmF0b3IxKXRoZUVPYmplY3Q7CisJCQkJVDEgcmVzdWx0ID0gY2FzZVRlc3RHcmFwaERlY29yYXRvcjEodGVzdEdyYXBoRGVjb3JhdG9yMSk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlR3JhcGhEZWNvcmF0b3JfMSh0ZXN0R3JhcGhEZWNvcmF0b3IxKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VEZWNvcmF0b3IodGVzdEdyYXBoRGVjb3JhdG9yMSk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlSWRlbnRpZmlhYmxlKHRlc3RHcmFwaERlY29yYXRvcjEpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZUNvbXBhcmFibGUodGVzdEdyYXBoRGVjb3JhdG9yMSk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBkZWZhdWx0Q2FzZSh0aGVFT2JqZWN0KTsKKwkJCQlyZXR1cm4gcmVzdWx0OworCQkJfQorCQkJY2FzZSBEZWNvcmF0b3JzUGFja2FnZS5URVNUX05PREVfREVDT1JBVE9SMTogeworCQkJCVRlc3ROb2RlRGVjb3JhdG9yMSB0ZXN0Tm9kZURlY29yYXRvcjEgPSAoVGVzdE5vZGVEZWNvcmF0b3IxKXRoZUVPYmplY3Q7CisJCQkJVDEgcmVzdWx0ID0gY2FzZVRlc3ROb2RlRGVjb3JhdG9yMSh0ZXN0Tm9kZURlY29yYXRvcjEpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZU5vZGVEZWNvcmF0b3JfMSh0ZXN0Tm9kZURlY29yYXRvcjEpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZURlY29yYXRvcih0ZXN0Tm9kZURlY29yYXRvcjEpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZUlkZW50aWZpYWJsZSh0ZXN0Tm9kZURlY29yYXRvcjEpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZUNvbXBhcmFibGUodGVzdE5vZGVEZWNvcmF0b3IxKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGRlZmF1bHRDYXNlKHRoZUVPYmplY3QpOworCQkJCXJldHVybiByZXN1bHQ7CisJCQl9CisJCQljYXNlIERlY29yYXRvcnNQYWNrYWdlLlRFU1RfU0NFTkFSSU9fR1JBUEhfREVDT1JBVE9SMTogeworCQkJCVRlc3RTY2VuYXJpb0dyYXBoRGVjb3JhdG9yMSB0ZXN0U2NlbmFyaW9HcmFwaERlY29yYXRvcjEgPSAoVGVzdFNjZW5hcmlvR3JhcGhEZWNvcmF0b3IxKXRoZUVPYmplY3Q7CisJCQkJVDEgcmVzdWx0ID0gY2FzZVRlc3RTY2VuYXJpb0dyYXBoRGVjb3JhdG9yMSh0ZXN0U2NlbmFyaW9HcmFwaERlY29yYXRvcjEpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZUdyYXBoRGVjb3JhdG9yXzEodGVzdFNjZW5hcmlvR3JhcGhEZWNvcmF0b3IxKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VEZWNvcmF0b3IodGVzdFNjZW5hcmlvR3JhcGhEZWNvcmF0b3IxKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VJZGVudGlmaWFibGUodGVzdFNjZW5hcmlvR3JhcGhEZWNvcmF0b3IxKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VDb21wYXJhYmxlKHRlc3RTY2VuYXJpb0dyYXBoRGVjb3JhdG9yMSk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBkZWZhdWx0Q2FzZSh0aGVFT2JqZWN0KTsKKwkJCQlyZXR1cm4gcmVzdWx0OworCQkJfQorCQkJZGVmYXVsdDogcmV0dXJuIGRlZmF1bHRDYXNlKHRoZUVPYmplY3QpOworCQl9CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+VGVzdCBOb2RlIERlY29yYXRvcjE8L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsKKwkgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KKwkgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5UZXN0IE5vZGUgRGVjb3JhdG9yMTwvZW0+Jy4KKwkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFQxIGNhc2VUZXN0Tm9kZURlY29yYXRvcjEoVGVzdE5vZGVEZWNvcmF0b3IxIG9iamVjdCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5UZXN0IEVkZ2UgRGVjb3JhdG9yMTwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOworCSAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgorCSAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPlRlc3QgRWRnZSBEZWNvcmF0b3IxPC9lbT4nLgorCSAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVDEgY2FzZVRlc3RFZGdlRGVjb3JhdG9yMShUZXN0RWRnZURlY29yYXRvcjEgb2JqZWN0KSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPlRlc3QgR3JhcGggRGVjb3JhdG9yMTwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOworCSAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgorCSAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPlRlc3QgR3JhcGggRGVjb3JhdG9yMTwvZW0+Jy4KKwkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFQxIGNhc2VUZXN0R3JhcGhEZWNvcmF0b3IxKFRlc3RHcmFwaERlY29yYXRvcjEgb2JqZWN0KSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPlRlc3QgU2NlbmFyaW8gR3JhcGggRGVjb3JhdG9yMTwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOworCSAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgorCSAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPlRlc3QgU2NlbmFyaW8gR3JhcGggRGVjb3JhdG9yMTwvZW0+Jy4KKwkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFQxIGNhc2VUZXN0U2NlbmFyaW9HcmFwaERlY29yYXRvcjEoVGVzdFNjZW5hcmlvR3JhcGhEZWNvcmF0b3IxIG9iamVjdCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5Ob2RlIERlY29yYXRvcjwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOworCSAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgorCSAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPk5vZGUgRGVjb3JhdG9yPC9lbT4nLgorCSAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVDEgY2FzZU5vZGVEZWNvcmF0b3IoTm9kZURlY29yYXRvciBvYmplY3QpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+Q29tcGFyYWJsZTwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOworCSAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgorCSAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkNvbXBhcmFibGU8L2VtPicuCisJICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyA8VD4gVDEgY2FzZUNvbXBhcmFibGUoQ29tcGFyYWJsZTxUPiBvYmplY3QpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+SWRlbnRpZmlhYmxlPC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7CisJICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCisJICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+SWRlbnRpZmlhYmxlPC9lbT4nLgorCSAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVDEgY2FzZUlkZW50aWZpYWJsZShJZGVudGlmaWFibGUgb2JqZWN0KSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkRlY29yYXRvcjwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOworCSAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgorCSAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkRlY29yYXRvcjwvZW0+Jy4KKwkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFQxIGNhc2VEZWNvcmF0b3IoRGVjb3JhdG9yIG9iamVjdCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5FZGdlIERlY29yYXRvcjwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOworCSAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgorCSAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkVkZ2UgRGVjb3JhdG9yPC9lbT4nLgorCSAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVDEgY2FzZUVkZ2VEZWNvcmF0b3JfMShFZGdlRGVjb3JhdG9yIG9iamVjdCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5HcmFwaCBEZWNvcmF0b3I8L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsKKwkgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KKwkgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5HcmFwaCBEZWNvcmF0b3I8L2VtPicuCisJICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBUMSBjYXNlR3JhcGhEZWNvcmF0b3JfMShHcmFwaERlY29yYXRvciBvYmplY3QpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+Tm9kZSBEZWNvcmF0b3I8L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsKKwkgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KKwkgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5Ob2RlIERlY29yYXRvcjwvZW0+Jy4KKwkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFQxIGNhc2VOb2RlRGVjb3JhdG9yXzEoTm9kZURlY29yYXRvciBvYmplY3QpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+RWRnZSBEZWNvcmF0b3I8L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsKKwkgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KKwkgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5FZGdlIERlY29yYXRvcjwvZW0+Jy4KKwkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFQxIGNhc2VFZGdlRGVjb3JhdG9yKEVkZ2VEZWNvcmF0b3Igb2JqZWN0KSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkdyYXBoIERlY29yYXRvcjwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOworCSAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgorCSAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkdyYXBoIERlY29yYXRvcjwvZW0+Jy4KKwkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFQxIGNhc2VHcmFwaERlY29yYXRvcihHcmFwaERlY29yYXRvciBvYmplY3QpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+RU9iamVjdDwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOworCSAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLCBidXQgdGhpcyBpcyB0aGUgbGFzdCBjYXNlIGFueXdheS4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KKwkgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5FT2JqZWN0PC9lbT4nLgorCSAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVDEgZGVmYXVsdENhc2UoRU9iamVjdCBvYmplY3QpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCit9IC8vRGVjb3JhdG9yc1N3aXRjaApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3Rlc3RzL3V0aWwvbGFiZWxzL0xhYmVsc0ZhY3RvcnkuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS90ZXN0cy91dGlsL2xhYmVscy9MYWJlbHNGYWN0b3J5LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGJiNmNhNgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS90ZXN0cy91dGlsL2xhYmVscy9MYWJlbHNGYWN0b3J5LmphdmEKQEAgLTAsMCArMSwxMDUgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsLmxhYmVsczsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUZhY3Rvcnk7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIFRoZSA8Yj5GYWN0b3J5PC9iPiBmb3IgdGhlIG1vZGVsLgorICogSXQgcHJvdmlkZXMgYSBjcmVhdGUgbWV0aG9kIGZvciBlYWNoIG5vbi1hYnN0cmFjdCBjbGFzcyBvZiB0aGUgbW9kZWwuCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsLmxhYmVscy5MYWJlbHNQYWNrYWdlCisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBpbnRlcmZhY2UgTGFiZWxzRmFjdG9yeSBleHRlbmRzIEVGYWN0b3J5IHsKKwkvKioKKwkgKiBUaGUgc2luZ2xldG9uIGluc3RhbmNlIG9mIHRoZSBmYWN0b3J5LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUxhYmVsc0ZhY3RvcnkgZUlOU1RBTkNFID0gb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsLmxhYmVscy5pbXBsLkxhYmVsc0ZhY3RvcnlJbXBsLmluaXQoKTsKKworCS8qKgorCSAqIFJldHVybnMgYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+VGVzdCBEeW5hbWljIEVkZ2UgTGFiZWw8L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPlRlc3QgRHluYW1pYyBFZGdlIExhYmVsPC9lbT4nLgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlUZXN0RHluYW1pY0VkZ2VMYWJlbCBjcmVhdGVUZXN0RHluYW1pY0VkZ2VMYWJlbCgpOworCisJLyoqCisJICogUmV0dXJucyBhIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5UZXN0IER5bmFtaWMgTGFiZWwxPC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiBhIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5UZXN0IER5bmFtaWMgTGFiZWwxPC9lbT4nLgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlUZXN0RHluYW1pY0xhYmVsMSBjcmVhdGVUZXN0RHluYW1pY0xhYmVsMSgpOworCisJLyoqCisJICogUmV0dXJucyBhIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5UZXN0IER5bmFtaWMgTm9kZSBMYWJlbDwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+VGVzdCBEeW5hbWljIE5vZGUgTGFiZWw8L2VtPicuCisJICogQGdlbmVyYXRlZAorCSAqLworCVRlc3REeW5hbWljTm9kZUxhYmVsIGNyZWF0ZVRlc3REeW5hbWljTm9kZUxhYmVsKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPlRlc3QgSW50ZWdlciBMYWJlbCBWYWx1ZTwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+VGVzdCBJbnRlZ2VyIExhYmVsIFZhbHVlPC9lbT4nLgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlUZXN0SW50ZWdlckxhYmVsVmFsdWUgY3JlYXRlVGVzdEludGVnZXJMYWJlbFZhbHVlKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPlRlc3QgTGFiZWw8L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPlRlc3QgTGFiZWw8L2VtPicuCisJICogQGdlbmVyYXRlZAorCSAqLworCVRlc3RMYWJlbCBjcmVhdGVUZXN0TGFiZWwoKTsKKworCS8qKgorCSAqIFJldHVybnMgYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+VGVzdCBTdGF0aWMgRWRnZSBMYWJlbDwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+VGVzdCBTdGF0aWMgRWRnZSBMYWJlbDwvZW0+Jy4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJVGVzdFN0YXRpY0VkZ2VMYWJlbCBjcmVhdGVUZXN0U3RhdGljRWRnZUxhYmVsKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPlRlc3QgU3RhdGljIE5vZGUgTGFiZWw8L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPlRlc3QgU3RhdGljIE5vZGUgTGFiZWw8L2VtPicuCisJICogQGdlbmVyYXRlZAorCSAqLworCVRlc3RTdGF0aWNOb2RlTGFiZWwgY3JlYXRlVGVzdFN0YXRpY05vZGVMYWJlbCgpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgcGFja2FnZSBzdXBwb3J0ZWQgYnkgdGhpcyBmYWN0b3J5LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgcGFja2FnZSBzdXBwb3J0ZWQgYnkgdGhpcyBmYWN0b3J5LgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlMYWJlbHNQYWNrYWdlIGdldExhYmVsc1BhY2thZ2UoKTsKKworfSAvL0xhYmVsc0ZhY3RvcnkKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS90ZXN0cy91dGlsL2xhYmVscy9MYWJlbHNQYWNrYWdlLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdGVzdHMvdXRpbC9sYWJlbHMvTGFiZWxzUGFja2FnZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJkZmU4MDQKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdGVzdHMvdXRpbC9sYWJlbHMvTGFiZWxzUGFja2FnZS5qYXZhCkBAIC0wLDAgKzEsODM0IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC5sYWJlbHM7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVBdHRyaWJ1dGU7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzczsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRVBhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkdyYXBoUGFja2FnZTsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogVGhlIDxiPlBhY2thZ2U8L2I+IGZvciB0aGUgbW9kZWwuCisgKiBJdCBjb250YWlucyBhY2Nlc3NvcnMgZm9yIHRoZSBtZXRhIG9iamVjdHMgdG8gcmVwcmVzZW50CisgKiA8dWw+CisgKiAgIDxsaT5lYWNoIGNsYXNzLDwvbGk+CisgKiAgIDxsaT5lYWNoIGZlYXR1cmUgb2YgZWFjaCBjbGFzcyw8L2xpPgorICogICA8bGk+ZWFjaCBlbnVtLDwvbGk+CisgKiAgIDxsaT5hbmQgZWFjaCBkYXRhIHR5cGU8L2xpPgorICogPC91bD4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwubGFiZWxzLkxhYmVsc0ZhY3RvcnkKKyAqIEBtb2RlbCBraW5kPSJwYWNrYWdlIgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgaW50ZXJmYWNlIExhYmVsc1BhY2thZ2UgZXh0ZW5kcyBFUGFja2FnZSB7CisJLyoqCisJICogVGhlIHBhY2thZ2UgbmFtZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlTdHJpbmcgZU5BTUUgPSAibGFiZWxzIjsgLy8kTk9OLU5MUy0xJAorCisJLyoqCisJICogVGhlIHBhY2thZ2UgbmFtZXNwYWNlIFVSSS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlTdHJpbmcgZU5TX1VSSSA9ICJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vdGVzdHMvdXRpbC9sYWJlbHMuZWNvcmUiOyAvLyROT04tTkxTLTEkCisKKwkvKioKKwkgKiBUaGUgcGFja2FnZSBuYW1lc3BhY2UgbmFtZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlTdHJpbmcgZU5TX1BSRUZJWCA9ICJvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwubGFiZWxzIjsgLy8kTk9OLU5MUy0xJAorCisJLyoqCisJICogVGhlIHNpbmdsZXRvbiBpbnN0YW5jZSBvZiB0aGUgcGFja2FnZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlMYWJlbHNQYWNrYWdlIGVJTlNUQU5DRSA9IG9yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC5sYWJlbHMuaW1wbC5MYWJlbHNQYWNrYWdlSW1wbC5pbml0KCk7CisKKwkvKioKKwkgKiBUaGUgbWV0YSBvYmplY3QgaWQgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC5sYWJlbHMuaW1wbC5UZXN0RHluYW1pY0VkZ2VMYWJlbEltcGwgPGVtPlRlc3QgRHluYW1pYyBFZGdlIExhYmVsPC9lbT59JyBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsLmxhYmVscy5pbXBsLlRlc3REeW5hbWljRWRnZUxhYmVsSW1wbAorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsLmxhYmVscy5pbXBsLkxhYmVsc1BhY2thZ2VJbXBsI2dldFRlc3REeW5hbWljRWRnZUxhYmVsKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJaW50IFRFU1RfRFlOQU1JQ19FREdFX0xBQkVMID0gMDsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5VUkk8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBURVNUX0RZTkFNSUNfRURHRV9MQUJFTF9fVVJJID0gR3JhcGhQYWNrYWdlLkRZTkFNSUNfRURHRV9MQUJFTF9fVVJJOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlR5cGUgVVJJPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgVEVTVF9EWU5BTUlDX0VER0VfTEFCRUxfX1RZUEVfVVJJID0gR3JhcGhQYWNrYWdlLkRZTkFNSUNfRURHRV9MQUJFTF9fVFlQRV9VUkk7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RHVibGluIENvcmU8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBURVNUX0RZTkFNSUNfRURHRV9MQUJFTF9fRFVCTElOX0NPUkUgPSBHcmFwaFBhY2thZ2UuRFlOQU1JQ19FREdFX0xBQkVMX19EVUJMSU5fQ09SRTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5VUkkgT2YgSWRlbnRpZmlhYmxlIFRvIEJlIExhYmVsZWQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBURVNUX0RZTkFNSUNfRURHRV9MQUJFTF9fVVJJX09GX0lERU5USUZJQUJMRV9UT19CRV9MQUJFTEVEID0gR3JhcGhQYWNrYWdlLkRZTkFNSUNfRURHRV9MQUJFTF9fVVJJX09GX0lERU5USUZJQUJMRV9UT19CRV9MQUJFTEVEOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkN1cnJlbnQgVmFsdWU8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBURVNUX0RZTkFNSUNfRURHRV9MQUJFTF9fQ1VSUkVOVF9WQUxVRSA9IEdyYXBoUGFja2FnZS5EWU5BTUlDX0VER0VfTEFCRUxfX0NVUlJFTlRfVkFMVUU7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+SWRlbnRpZmlhYmxlPC9iPjwvZW0+JyByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgVEVTVF9EWU5BTUlDX0VER0VfTEFCRUxfX0lERU5USUZJQUJMRSA9IEdyYXBoUGFja2FnZS5EWU5BTUlDX0VER0VfTEFCRUxfX0lERU5USUZJQUJMRTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5OZXh0IFZhbHVlIFZhbGlkPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgVEVTVF9EWU5BTUlDX0VER0VfTEFCRUxfX05FWFRfVkFMVUVfVkFMSUQgPSBHcmFwaFBhY2thZ2UuRFlOQU1JQ19FREdFX0xBQkVMX19ORVhUX1ZBTFVFX1ZBTElEOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPk5leHQgVmFsdWU8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBURVNUX0RZTkFNSUNfRURHRV9MQUJFTF9fTkVYVF9WQUxVRSA9IEdyYXBoUGFja2FnZS5EWU5BTUlDX0VER0VfTEFCRUxfX05FWFRfVkFMVUU7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RGVjb3JhdG9yPC9iPjwvZW0+JyByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgVEVTVF9EWU5BTUlDX0VER0VfTEFCRUxfX0RFQ09SQVRPUiA9IEdyYXBoUGFja2FnZS5EWU5BTUlDX0VER0VfTEFCRUxfX0RFQ09SQVRPUjsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5FZGdlPC9iPjwvZW0+JyBjb250YWluZXIgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFRFU1RfRFlOQU1JQ19FREdFX0xBQkVMX19FREdFID0gR3JhcGhQYWNrYWdlLkRZTkFNSUNfRURHRV9MQUJFTF9fRURHRTsKKworCS8qKgorCSAqIFRoZSBudW1iZXIgb2Ygc3RydWN0dXJhbCBmZWF0dXJlcyBvZiB0aGUgJzxlbT5UZXN0IER5bmFtaWMgRWRnZSBMYWJlbDwvZW0+JyBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBURVNUX0RZTkFNSUNfRURHRV9MQUJFTF9GRUFUVVJFX0NPVU5UID0gR3JhcGhQYWNrYWdlLkRZTkFNSUNfRURHRV9MQUJFTF9GRUFUVVJFX0NPVU5UICsgMDsKKworCS8qKgorCSAqIFRoZSBtZXRhIG9iamVjdCBpZCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsLmxhYmVscy5pbXBsLlRlc3REeW5hbWljTGFiZWwxSW1wbCA8ZW0+VGVzdCBEeW5hbWljIExhYmVsMTwvZW0+fScgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC5sYWJlbHMuaW1wbC5UZXN0RHluYW1pY0xhYmVsMUltcGwKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC5sYWJlbHMuaW1wbC5MYWJlbHNQYWNrYWdlSW1wbCNnZXRUZXN0RHluYW1pY0xhYmVsMSgpCisJICogQGdlbmVyYXRlZAorCSAqLworCWludCBURVNUX0RZTkFNSUNfTEFCRUwxID0gMTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5VUkk8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBURVNUX0RZTkFNSUNfTEFCRUwxX19VUkkgPSBHcmFwaFBhY2thZ2UuRFlOQU1JQ19MQUJFTF9fVVJJOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlR5cGUgVVJJPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgVEVTVF9EWU5BTUlDX0xBQkVMMV9fVFlQRV9VUkkgPSBHcmFwaFBhY2thZ2UuRFlOQU1JQ19MQUJFTF9fVFlQRV9VUkk7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RHVibGluIENvcmU8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBURVNUX0RZTkFNSUNfTEFCRUwxX19EVUJMSU5fQ09SRSA9IEdyYXBoUGFja2FnZS5EWU5BTUlDX0xBQkVMX19EVUJMSU5fQ09SRTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5VUkkgT2YgSWRlbnRpZmlhYmxlIFRvIEJlIExhYmVsZWQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBURVNUX0RZTkFNSUNfTEFCRUwxX19VUklfT0ZfSURFTlRJRklBQkxFX1RPX0JFX0xBQkVMRUQgPSBHcmFwaFBhY2thZ2UuRFlOQU1JQ19MQUJFTF9fVVJJX09GX0lERU5USUZJQUJMRV9UT19CRV9MQUJFTEVEOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkN1cnJlbnQgVmFsdWU8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBURVNUX0RZTkFNSUNfTEFCRUwxX19DVVJSRU5UX1ZBTFVFID0gR3JhcGhQYWNrYWdlLkRZTkFNSUNfTEFCRUxfX0NVUlJFTlRfVkFMVUU7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+SWRlbnRpZmlhYmxlPC9iPjwvZW0+JyByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgVEVTVF9EWU5BTUlDX0xBQkVMMV9fSURFTlRJRklBQkxFID0gR3JhcGhQYWNrYWdlLkRZTkFNSUNfTEFCRUxfX0lERU5USUZJQUJMRTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5OZXh0IFZhbHVlIFZhbGlkPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgVEVTVF9EWU5BTUlDX0xBQkVMMV9fTkVYVF9WQUxVRV9WQUxJRCA9IEdyYXBoUGFja2FnZS5EWU5BTUlDX0xBQkVMX19ORVhUX1ZBTFVFX1ZBTElEOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPk5leHQgVmFsdWU8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBURVNUX0RZTkFNSUNfTEFCRUwxX19ORVhUX1ZBTFVFID0gR3JhcGhQYWNrYWdlLkRZTkFNSUNfTEFCRUxfX05FWFRfVkFMVUU7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RGVjb3JhdG9yPC9iPjwvZW0+JyByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgVEVTVF9EWU5BTUlDX0xBQkVMMV9fREVDT1JBVE9SID0gR3JhcGhQYWNrYWdlLkRZTkFNSUNfTEFCRUxfX0RFQ09SQVRPUjsKKworCS8qKgorCSAqIFRoZSBudW1iZXIgb2Ygc3RydWN0dXJhbCBmZWF0dXJlcyBvZiB0aGUgJzxlbT5UZXN0IER5bmFtaWMgTGFiZWwxPC9lbT4nIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFRFU1RfRFlOQU1JQ19MQUJFTDFfRkVBVFVSRV9DT1VOVCA9IEdyYXBoUGFja2FnZS5EWU5BTUlDX0xBQkVMX0ZFQVRVUkVfQ09VTlQgKyAwOworCisJLyoqCisJICogVGhlIG1ldGEgb2JqZWN0IGlkIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwubGFiZWxzLmltcGwuVGVzdER5bmFtaWNOb2RlTGFiZWxJbXBsIDxlbT5UZXN0IER5bmFtaWMgTm9kZSBMYWJlbDwvZW0+fScgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC5sYWJlbHMuaW1wbC5UZXN0RHluYW1pY05vZGVMYWJlbEltcGwKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC5sYWJlbHMuaW1wbC5MYWJlbHNQYWNrYWdlSW1wbCNnZXRUZXN0RHluYW1pY05vZGVMYWJlbCgpCisJICogQGdlbmVyYXRlZAorCSAqLworCWludCBURVNUX0RZTkFNSUNfTk9ERV9MQUJFTCA9IDI7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VVJJPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgVEVTVF9EWU5BTUlDX05PREVfTEFCRUxfX1VSSSA9IEdyYXBoUGFja2FnZS5EWU5BTUlDX05PREVfTEFCRUxfX1VSSTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5UeXBlIFVSSTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFRFU1RfRFlOQU1JQ19OT0RFX0xBQkVMX19UWVBFX1VSSSA9IEdyYXBoUGFja2FnZS5EWU5BTUlDX05PREVfTEFCRUxfX1RZUEVfVVJJOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkR1YmxpbiBDb3JlPC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgVEVTVF9EWU5BTUlDX05PREVfTEFCRUxfX0RVQkxJTl9DT1JFID0gR3JhcGhQYWNrYWdlLkRZTkFNSUNfTk9ERV9MQUJFTF9fRFVCTElOX0NPUkU7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VVJJIE9mIElkZW50aWZpYWJsZSBUbyBCZSBMYWJlbGVkPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgVEVTVF9EWU5BTUlDX05PREVfTEFCRUxfX1VSSV9PRl9JREVOVElGSUFCTEVfVE9fQkVfTEFCRUxFRCA9IEdyYXBoUGFja2FnZS5EWU5BTUlDX05PREVfTEFCRUxfX1VSSV9PRl9JREVOVElGSUFCTEVfVE9fQkVfTEFCRUxFRDsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5DdXJyZW50IFZhbHVlPC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgVEVTVF9EWU5BTUlDX05PREVfTEFCRUxfX0NVUlJFTlRfVkFMVUUgPSBHcmFwaFBhY2thZ2UuRFlOQU1JQ19OT0RFX0xBQkVMX19DVVJSRU5UX1ZBTFVFOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPklkZW50aWZpYWJsZTwvYj48L2VtPicgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFRFU1RfRFlOQU1JQ19OT0RFX0xBQkVMX19JREVOVElGSUFCTEUgPSBHcmFwaFBhY2thZ2UuRFlOQU1JQ19OT0RFX0xBQkVMX19JREVOVElGSUFCTEU7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+TmV4dCBWYWx1ZSBWYWxpZDwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFRFU1RfRFlOQU1JQ19OT0RFX0xBQkVMX19ORVhUX1ZBTFVFX1ZBTElEID0gR3JhcGhQYWNrYWdlLkRZTkFNSUNfTk9ERV9MQUJFTF9fTkVYVF9WQUxVRV9WQUxJRDsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5OZXh0IFZhbHVlPC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgVEVTVF9EWU5BTUlDX05PREVfTEFCRUxfX05FWFRfVkFMVUUgPSBHcmFwaFBhY2thZ2UuRFlOQU1JQ19OT0RFX0xBQkVMX19ORVhUX1ZBTFVFOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkRlY29yYXRvcjwvYj48L2VtPicgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFRFU1RfRFlOQU1JQ19OT0RFX0xBQkVMX19ERUNPUkFUT1IgPSBHcmFwaFBhY2thZ2UuRFlOQU1JQ19OT0RFX0xBQkVMX19ERUNPUkFUT1I7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+Tm9kZTwvYj48L2VtPicgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFRFU1RfRFlOQU1JQ19OT0RFX0xBQkVMX19OT0RFID0gR3JhcGhQYWNrYWdlLkRZTkFNSUNfTk9ERV9MQUJFTF9fTk9ERTsKKworCS8qKgorCSAqIFRoZSBudW1iZXIgb2Ygc3RydWN0dXJhbCBmZWF0dXJlcyBvZiB0aGUgJzxlbT5UZXN0IER5bmFtaWMgTm9kZSBMYWJlbDwvZW0+JyBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBURVNUX0RZTkFNSUNfTk9ERV9MQUJFTF9GRUFUVVJFX0NPVU5UID0gR3JhcGhQYWNrYWdlLkRZTkFNSUNfTk9ERV9MQUJFTF9GRUFUVVJFX0NPVU5UICsgMDsKKworCS8qKgorCSAqIFRoZSBtZXRhIG9iamVjdCBpZCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsLmxhYmVscy5pbXBsLlRlc3RJbnRlZ2VyTGFiZWxWYWx1ZUltcGwgPGVtPlRlc3QgSW50ZWdlciBMYWJlbCBWYWx1ZTwvZW0+fScgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC5sYWJlbHMuaW1wbC5UZXN0SW50ZWdlckxhYmVsVmFsdWVJbXBsCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwubGFiZWxzLmltcGwuTGFiZWxzUGFja2FnZUltcGwjZ2V0VGVzdEludGVnZXJMYWJlbFZhbHVlKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJaW50IFRFU1RfSU5URUdFUl9MQUJFTF9WQUxVRSA9IDM7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+STwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFRFU1RfSU5URUdFUl9MQUJFTF9WQUxVRV9fSSA9IEdyYXBoUGFja2FnZS5MQUJFTF9WQUxVRV9GRUFUVVJFX0NPVU5UICsgMDsKKworCS8qKgorCSAqIFRoZSBudW1iZXIgb2Ygc3RydWN0dXJhbCBmZWF0dXJlcyBvZiB0aGUgJzxlbT5UZXN0IEludGVnZXIgTGFiZWwgVmFsdWU8L2VtPicgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgVEVTVF9JTlRFR0VSX0xBQkVMX1ZBTFVFX0ZFQVRVUkVfQ09VTlQgPSBHcmFwaFBhY2thZ2UuTEFCRUxfVkFMVUVfRkVBVFVSRV9DT1VOVCArIDE7CisKKwkvKioKKwkgKiBUaGUgbWV0YSBvYmplY3QgaWQgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC5sYWJlbHMuaW1wbC5UZXN0TGFiZWxJbXBsIDxlbT5UZXN0IExhYmVsPC9lbT59JyBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsLmxhYmVscy5pbXBsLlRlc3RMYWJlbEltcGwKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC5sYWJlbHMuaW1wbC5MYWJlbHNQYWNrYWdlSW1wbCNnZXRUZXN0TGFiZWwoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlpbnQgVEVTVF9MQUJFTCA9IDQ7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VVJJPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgVEVTVF9MQUJFTF9fVVJJID0gR3JhcGhQYWNrYWdlLkxBQkVMX19VUkk7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VHlwZSBVUkk8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBURVNUX0xBQkVMX19UWVBFX1VSSSA9IEdyYXBoUGFja2FnZS5MQUJFTF9fVFlQRV9VUkk7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RHVibGluIENvcmU8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBURVNUX0xBQkVMX19EVUJMSU5fQ09SRSA9IEdyYXBoUGFja2FnZS5MQUJFTF9fRFVCTElOX0NPUkU7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VVJJIE9mIElkZW50aWZpYWJsZSBUbyBCZSBMYWJlbGVkPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgVEVTVF9MQUJFTF9fVVJJX09GX0lERU5USUZJQUJMRV9UT19CRV9MQUJFTEVEID0gR3JhcGhQYWNrYWdlLkxBQkVMX19VUklfT0ZfSURFTlRJRklBQkxFX1RPX0JFX0xBQkVMRUQ7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+Q3VycmVudCBWYWx1ZTwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFRFU1RfTEFCRUxfX0NVUlJFTlRfVkFMVUUgPSBHcmFwaFBhY2thZ2UuTEFCRUxfX0NVUlJFTlRfVkFMVUU7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+SWRlbnRpZmlhYmxlPC9iPjwvZW0+JyByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgVEVTVF9MQUJFTF9fSURFTlRJRklBQkxFID0gR3JhcGhQYWNrYWdlLkxBQkVMX19JREVOVElGSUFCTEU7CisKKwkvKioKKwkgKiBUaGUgbnVtYmVyIG9mIHN0cnVjdHVyYWwgZmVhdHVyZXMgb2YgdGhlICc8ZW0+VGVzdCBMYWJlbDwvZW0+JyBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBURVNUX0xBQkVMX0ZFQVRVUkVfQ09VTlQgPSBHcmFwaFBhY2thZ2UuTEFCRUxfRkVBVFVSRV9DT1VOVCArIDA7CisKKwkvKioKKwkgKiBUaGUgbWV0YSBvYmplY3QgaWQgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC5sYWJlbHMuaW1wbC5UZXN0U3RhdGljRWRnZUxhYmVsSW1wbCA8ZW0+VGVzdCBTdGF0aWMgRWRnZSBMYWJlbDwvZW0+fScgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC5sYWJlbHMuaW1wbC5UZXN0U3RhdGljRWRnZUxhYmVsSW1wbAorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsLmxhYmVscy5pbXBsLkxhYmVsc1BhY2thZ2VJbXBsI2dldFRlc3RTdGF0aWNFZGdlTGFiZWwoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlpbnQgVEVTVF9TVEFUSUNfRURHRV9MQUJFTCA9IDU7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VVJJPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgVEVTVF9TVEFUSUNfRURHRV9MQUJFTF9fVVJJID0gR3JhcGhQYWNrYWdlLlNUQVRJQ19FREdFX0xBQkVMX19VUkk7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VHlwZSBVUkk8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBURVNUX1NUQVRJQ19FREdFX0xBQkVMX19UWVBFX1VSSSA9IEdyYXBoUGFja2FnZS5TVEFUSUNfRURHRV9MQUJFTF9fVFlQRV9VUkk7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RHVibGluIENvcmU8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBURVNUX1NUQVRJQ19FREdFX0xBQkVMX19EVUJMSU5fQ09SRSA9IEdyYXBoUGFja2FnZS5TVEFUSUNfRURHRV9MQUJFTF9fRFVCTElOX0NPUkU7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VVJJIE9mIElkZW50aWZpYWJsZSBUbyBCZSBMYWJlbGVkPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgVEVTVF9TVEFUSUNfRURHRV9MQUJFTF9fVVJJX09GX0lERU5USUZJQUJMRV9UT19CRV9MQUJFTEVEID0gR3JhcGhQYWNrYWdlLlNUQVRJQ19FREdFX0xBQkVMX19VUklfT0ZfSURFTlRJRklBQkxFX1RPX0JFX0xBQkVMRUQ7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+Q3VycmVudCBWYWx1ZTwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFRFU1RfU1RBVElDX0VER0VfTEFCRUxfX0NVUlJFTlRfVkFMVUUgPSBHcmFwaFBhY2thZ2UuU1RBVElDX0VER0VfTEFCRUxfX0NVUlJFTlRfVkFMVUU7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+SWRlbnRpZmlhYmxlPC9iPjwvZW0+JyByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgVEVTVF9TVEFUSUNfRURHRV9MQUJFTF9fSURFTlRJRklBQkxFID0gR3JhcGhQYWNrYWdlLlNUQVRJQ19FREdFX0xBQkVMX19JREVOVElGSUFCTEU7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RWRnZTwvYj48L2VtPicgY29udGFpbmVyIHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBURVNUX1NUQVRJQ19FREdFX0xBQkVMX19FREdFID0gR3JhcGhQYWNrYWdlLlNUQVRJQ19FREdFX0xBQkVMX19FREdFOworCisJLyoqCisJICogVGhlIG51bWJlciBvZiBzdHJ1Y3R1cmFsIGZlYXR1cmVzIG9mIHRoZSAnPGVtPlRlc3QgU3RhdGljIEVkZ2UgTGFiZWw8L2VtPicgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgVEVTVF9TVEFUSUNfRURHRV9MQUJFTF9GRUFUVVJFX0NPVU5UID0gR3JhcGhQYWNrYWdlLlNUQVRJQ19FREdFX0xBQkVMX0ZFQVRVUkVfQ09VTlQgKyAwOworCisJLyoqCisJICogVGhlIG1ldGEgb2JqZWN0IGlkIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwubGFiZWxzLmltcGwuVGVzdFN0YXRpY05vZGVMYWJlbEltcGwgPGVtPlRlc3QgU3RhdGljIE5vZGUgTGFiZWw8L2VtPn0nIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwubGFiZWxzLmltcGwuVGVzdFN0YXRpY05vZGVMYWJlbEltcGwKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC5sYWJlbHMuaW1wbC5MYWJlbHNQYWNrYWdlSW1wbCNnZXRUZXN0U3RhdGljTm9kZUxhYmVsKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJaW50IFRFU1RfU1RBVElDX05PREVfTEFCRUwgPSA2OworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlVSSTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFRFU1RfU1RBVElDX05PREVfTEFCRUxfX1VSSSA9IEdyYXBoUGFja2FnZS5TVEFUSUNfTk9ERV9MQUJFTF9fVVJJOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlR5cGUgVVJJPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgVEVTVF9TVEFUSUNfTk9ERV9MQUJFTF9fVFlQRV9VUkkgPSBHcmFwaFBhY2thZ2UuU1RBVElDX05PREVfTEFCRUxfX1RZUEVfVVJJOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkR1YmxpbiBDb3JlPC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgVEVTVF9TVEFUSUNfTk9ERV9MQUJFTF9fRFVCTElOX0NPUkUgPSBHcmFwaFBhY2thZ2UuU1RBVElDX05PREVfTEFCRUxfX0RVQkxJTl9DT1JFOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlVSSSBPZiBJZGVudGlmaWFibGUgVG8gQmUgTGFiZWxlZDwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFRFU1RfU1RBVElDX05PREVfTEFCRUxfX1VSSV9PRl9JREVOVElGSUFCTEVfVE9fQkVfTEFCRUxFRCA9IEdyYXBoUGFja2FnZS5TVEFUSUNfTk9ERV9MQUJFTF9fVVJJX09GX0lERU5USUZJQUJMRV9UT19CRV9MQUJFTEVEOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkN1cnJlbnQgVmFsdWU8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBURVNUX1NUQVRJQ19OT0RFX0xBQkVMX19DVVJSRU5UX1ZBTFVFID0gR3JhcGhQYWNrYWdlLlNUQVRJQ19OT0RFX0xBQkVMX19DVVJSRU5UX1ZBTFVFOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPklkZW50aWZpYWJsZTwvYj48L2VtPicgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFRFU1RfU1RBVElDX05PREVfTEFCRUxfX0lERU5USUZJQUJMRSA9IEdyYXBoUGFja2FnZS5TVEFUSUNfTk9ERV9MQUJFTF9fSURFTlRJRklBQkxFOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPk5vZGU8L2I+PC9lbT4nIHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBURVNUX1NUQVRJQ19OT0RFX0xBQkVMX19OT0RFID0gR3JhcGhQYWNrYWdlLlNUQVRJQ19OT0RFX0xBQkVMX19OT0RFOworCisJLyoqCisJICogVGhlIG51bWJlciBvZiBzdHJ1Y3R1cmFsIGZlYXR1cmVzIG9mIHRoZSAnPGVtPlRlc3QgU3RhdGljIE5vZGUgTGFiZWw8L2VtPicgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgVEVTVF9TVEFUSUNfTk9ERV9MQUJFTF9GRUFUVVJFX0NPVU5UID0gR3JhcGhQYWNrYWdlLlNUQVRJQ19OT0RFX0xBQkVMX0ZFQVRVUkVfQ09VTlQgKyAwOworCisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwubGFiZWxzLlRlc3REeW5hbWljRWRnZUxhYmVsIDxlbT5UZXN0IER5bmFtaWMgRWRnZSBMYWJlbDwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJzxlbT5UZXN0IER5bmFtaWMgRWRnZSBMYWJlbDwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC5sYWJlbHMuVGVzdER5bmFtaWNFZGdlTGFiZWwKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUNsYXNzIGdldFRlc3REeW5hbWljRWRnZUxhYmVsKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwubGFiZWxzLlRlc3REeW5hbWljTGFiZWwxIDxlbT5UZXN0IER5bmFtaWMgTGFiZWwxPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAnPGVtPlRlc3QgRHluYW1pYyBMYWJlbDE8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwubGFiZWxzLlRlc3REeW5hbWljTGFiZWwxCisJICogQGdlbmVyYXRlZAorCSAqLworCUVDbGFzcyBnZXRUZXN0RHluYW1pY0xhYmVsMSgpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsLmxhYmVscy5UZXN0RHluYW1pY05vZGVMYWJlbCA8ZW0+VGVzdCBEeW5hbWljIE5vZGUgTGFiZWw8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICc8ZW0+VGVzdCBEeW5hbWljIE5vZGUgTGFiZWw8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwubGFiZWxzLlRlc3REeW5hbWljTm9kZUxhYmVsCisJICogQGdlbmVyYXRlZAorCSAqLworCUVDbGFzcyBnZXRUZXN0RHluYW1pY05vZGVMYWJlbCgpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsLmxhYmVscy5UZXN0SW50ZWdlckxhYmVsVmFsdWUgPGVtPlRlc3QgSW50ZWdlciBMYWJlbCBWYWx1ZTwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJzxlbT5UZXN0IEludGVnZXIgTGFiZWwgVmFsdWU8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwubGFiZWxzLlRlc3RJbnRlZ2VyTGFiZWxWYWx1ZQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQ2xhc3MgZ2V0VGVzdEludGVnZXJMYWJlbFZhbHVlKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC5sYWJlbHMuVGVzdEludGVnZXJMYWJlbFZhbHVlI2dldEkgPGVtPkk8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxlbT5JPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsLmxhYmVscy5UZXN0SW50ZWdlckxhYmVsVmFsdWUjZ2V0SSgpCisJICogQHNlZSAjZ2V0VGVzdEludGVnZXJMYWJlbFZhbHVlKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUF0dHJpYnV0ZSBnZXRUZXN0SW50ZWdlckxhYmVsVmFsdWVfSSgpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsLmxhYmVscy5UZXN0TGFiZWwgPGVtPlRlc3QgTGFiZWw8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICc8ZW0+VGVzdCBMYWJlbDwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC5sYWJlbHMuVGVzdExhYmVsCisJICogQGdlbmVyYXRlZAorCSAqLworCUVDbGFzcyBnZXRUZXN0TGFiZWwoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC5sYWJlbHMuVGVzdFN0YXRpY0VkZ2VMYWJlbCA8ZW0+VGVzdCBTdGF0aWMgRWRnZSBMYWJlbDwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJzxlbT5UZXN0IFN0YXRpYyBFZGdlIExhYmVsPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsLmxhYmVscy5UZXN0U3RhdGljRWRnZUxhYmVsCisJICogQGdlbmVyYXRlZAorCSAqLworCUVDbGFzcyBnZXRUZXN0U3RhdGljRWRnZUxhYmVsKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwubGFiZWxzLlRlc3RTdGF0aWNOb2RlTGFiZWwgPGVtPlRlc3QgU3RhdGljIE5vZGUgTGFiZWw8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICc8ZW0+VGVzdCBTdGF0aWMgTm9kZSBMYWJlbDwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC5sYWJlbHMuVGVzdFN0YXRpY05vZGVMYWJlbAorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQ2xhc3MgZ2V0VGVzdFN0YXRpY05vZGVMYWJlbCgpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgZmFjdG9yeSB0aGF0IGNyZWF0ZXMgdGhlIGluc3RhbmNlcyBvZiB0aGUgbW9kZWwuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBmYWN0b3J5IHRoYXQgY3JlYXRlcyB0aGUgaW5zdGFuY2VzIG9mIHRoZSBtb2RlbC4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJTGFiZWxzRmFjdG9yeSBnZXRMYWJlbHNGYWN0b3J5KCk7CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIERlZmluZXMgbGl0ZXJhbHMgZm9yIHRoZSBtZXRhIG9iamVjdHMgdGhhdCByZXByZXNlbnQKKwkgKiA8dWw+CisJICogICA8bGk+ZWFjaCBjbGFzcyw8L2xpPgorCSAqICAgPGxpPmVhY2ggZmVhdHVyZSBvZiBlYWNoIGNsYXNzLDwvbGk+CisJICogICA8bGk+ZWFjaCBlbnVtLDwvbGk+CisJICogICA8bGk+YW5kIGVhY2ggZGF0YSB0eXBlPC9saT4KKwkgKiA8L3VsPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlpbnRlcmZhY2UgTGl0ZXJhbHMgeworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC5sYWJlbHMuaW1wbC5UZXN0RHluYW1pY0VkZ2VMYWJlbEltcGwgPGVtPlRlc3QgRHluYW1pYyBFZGdlIExhYmVsPC9lbT59JyBjbGFzcy4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsLmxhYmVscy5pbXBsLlRlc3REeW5hbWljRWRnZUxhYmVsSW1wbAorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC5sYWJlbHMuaW1wbC5MYWJlbHNQYWNrYWdlSW1wbCNnZXRUZXN0RHluYW1pY0VkZ2VMYWJlbCgpCisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVDbGFzcyBURVNUX0RZTkFNSUNfRURHRV9MQUJFTCA9IGVJTlNUQU5DRS5nZXRUZXN0RHluYW1pY0VkZ2VMYWJlbCgpOworCisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsLmxhYmVscy5pbXBsLlRlc3REeW5hbWljTGFiZWwxSW1wbCA8ZW0+VGVzdCBEeW5hbWljIExhYmVsMTwvZW0+fScgY2xhc3MuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC5sYWJlbHMuaW1wbC5UZXN0RHluYW1pY0xhYmVsMUltcGwKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwubGFiZWxzLmltcGwuTGFiZWxzUGFja2FnZUltcGwjZ2V0VGVzdER5bmFtaWNMYWJlbDEoKQorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQ2xhc3MgVEVTVF9EWU5BTUlDX0xBQkVMMSA9IGVJTlNUQU5DRS5nZXRUZXN0RHluYW1pY0xhYmVsMSgpOworCisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsLmxhYmVscy5pbXBsLlRlc3REeW5hbWljTm9kZUxhYmVsSW1wbCA8ZW0+VGVzdCBEeW5hbWljIE5vZGUgTGFiZWw8L2VtPn0nIGNsYXNzLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwubGFiZWxzLmltcGwuVGVzdER5bmFtaWNOb2RlTGFiZWxJbXBsCisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsLmxhYmVscy5pbXBsLkxhYmVsc1BhY2thZ2VJbXBsI2dldFRlc3REeW5hbWljTm9kZUxhYmVsKCkKKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUNsYXNzIFRFU1RfRFlOQU1JQ19OT0RFX0xBQkVMID0gZUlOU1RBTkNFLmdldFRlc3REeW5hbWljTm9kZUxhYmVsKCk7CisKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwubGFiZWxzLmltcGwuVGVzdEludGVnZXJMYWJlbFZhbHVlSW1wbCA8ZW0+VGVzdCBJbnRlZ2VyIExhYmVsIFZhbHVlPC9lbT59JyBjbGFzcy4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsLmxhYmVscy5pbXBsLlRlc3RJbnRlZ2VyTGFiZWxWYWx1ZUltcGwKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwubGFiZWxzLmltcGwuTGFiZWxzUGFja2FnZUltcGwjZ2V0VGVzdEludGVnZXJMYWJlbFZhbHVlKCkKKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUNsYXNzIFRFU1RfSU5URUdFUl9MQUJFTF9WQUxVRSA9IGVJTlNUQU5DRS5nZXRUZXN0SW50ZWdlckxhYmVsVmFsdWUoKTsKKworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPkk8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUF0dHJpYnV0ZSBURVNUX0lOVEVHRVJfTEFCRUxfVkFMVUVfX0kgPSBlSU5TVEFOQ0UuZ2V0VGVzdEludGVnZXJMYWJlbFZhbHVlX0koKTsKKworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC5sYWJlbHMuaW1wbC5UZXN0TGFiZWxJbXBsIDxlbT5UZXN0IExhYmVsPC9lbT59JyBjbGFzcy4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsLmxhYmVscy5pbXBsLlRlc3RMYWJlbEltcGwKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwubGFiZWxzLmltcGwuTGFiZWxzUGFja2FnZUltcGwjZ2V0VGVzdExhYmVsKCkKKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUNsYXNzIFRFU1RfTEFCRUwgPSBlSU5TVEFOQ0UuZ2V0VGVzdExhYmVsKCk7CisKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwubGFiZWxzLmltcGwuVGVzdFN0YXRpY0VkZ2VMYWJlbEltcGwgPGVtPlRlc3QgU3RhdGljIEVkZ2UgTGFiZWw8L2VtPn0nIGNsYXNzLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwubGFiZWxzLmltcGwuVGVzdFN0YXRpY0VkZ2VMYWJlbEltcGwKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwubGFiZWxzLmltcGwuTGFiZWxzUGFja2FnZUltcGwjZ2V0VGVzdFN0YXRpY0VkZ2VMYWJlbCgpCisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVDbGFzcyBURVNUX1NUQVRJQ19FREdFX0xBQkVMID0gZUlOU1RBTkNFLmdldFRlc3RTdGF0aWNFZGdlTGFiZWwoKTsKKworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC5sYWJlbHMuaW1wbC5UZXN0U3RhdGljTm9kZUxhYmVsSW1wbCA8ZW0+VGVzdCBTdGF0aWMgTm9kZSBMYWJlbDwvZW0+fScgY2xhc3MuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC5sYWJlbHMuaW1wbC5UZXN0U3RhdGljTm9kZUxhYmVsSW1wbAorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC5sYWJlbHMuaW1wbC5MYWJlbHNQYWNrYWdlSW1wbCNnZXRUZXN0U3RhdGljTm9kZUxhYmVsKCkKKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUNsYXNzIFRFU1RfU1RBVElDX05PREVfTEFCRUwgPSBlSU5TVEFOQ0UuZ2V0VGVzdFN0YXRpY05vZGVMYWJlbCgpOworCisJfQorCit9IC8vTGFiZWxzUGFja2FnZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3Rlc3RzL3V0aWwvbGFiZWxzL1Rlc3REeW5hbWljRWRnZUxhYmVsLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdGVzdHMvdXRpbC9sYWJlbHMvVGVzdER5bmFtaWNFZGdlTGFiZWwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NzZhNDUxCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3Rlc3RzL3V0aWwvbGFiZWxzL1Rlc3REeW5hbWljRWRnZUxhYmVsLmphdmEKQEAgLTAsMCArMSwzMCBAQAorLy8gVGVzdER5bmFtaWNFZGdlTGFiZWwuamF2YQorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwubGFiZWxzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5EeW5hbWljRWRnZUxhYmVsOworCisvKioKKyAqIFRoaXMgaW50ZXJmYWNlIGlzIGZvciB0ZXN0aW5nLgorICogCisgKiBAbW9kZWwKKyAqLworcHVibGljIGludGVyZmFjZSBUZXN0RHluYW1pY0VkZ2VMYWJlbCBleHRlbmRzIER5bmFtaWNFZGdlTGFiZWwgeworCisJLyoqCisJICogTWFrZSB0aGUgbmV4dCB2YWx1ZSBiZSBvbmUgbW9yZSB0aGFuIHRoZSBjdXJyZW50IHZhbHVlLgorCSAqIAorCSAqIEBtb2RlbCB2b2xhdGlsZT0idHJ1ZSIgdHJhbnNpZW50PSJ0cnVlIiBjaGFuZ2VhYmxlPSJmYWxzZSIKKwkgKi8KKwl2b2lkIGluY3JlbWVudCgpOworfSAvLyBUZXN0RHluYW1pY0VkZ2VMYWJlbApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3Rlc3RzL3V0aWwvbGFiZWxzL1Rlc3REeW5hbWljTGFiZWwxLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdGVzdHMvdXRpbC9sYWJlbHMvVGVzdER5bmFtaWNMYWJlbDEuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iN2ZiNTk5Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3Rlc3RzL3V0aWwvbGFiZWxzL1Rlc3REeW5hbWljTGFiZWwxLmphdmEKQEAgLTAsMCArMSwzNCBAQAorLy8gVGVzdER5bmFtaWNMYWJlbDEuamF2YQorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwubGFiZWxzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5EeW5hbWljTGFiZWw7CisKKy8qKgorICogVGhpcyBpbnRlcmZhY2UgcmVwcmVzZW50cyB0aGUgbW9kZWwgb2YgYW4gYWJzdHJhY3QgY2xhc3MgaW4gYW4gRU1GIG1vZGVsIHRoYXQKKyAqIGlzIGFuIGV4YW1wbGUgb2YgYSBEeW5hbWljTGFiZWwgaW1wbGVtZW50YXRpb24gdXNlZCBmb3IgdGVzdCBwdXJwb3Nlcy4KKyAqIAorICogQHNlZSBUZXN0SW50ZWdlckxhYmVsVmFsdWUKKyAqIAorICogQG1vZGVsCisgKi8KK3B1YmxpYyBpbnRlcmZhY2UgVGVzdER5bmFtaWNMYWJlbDEgZXh0ZW5kcyBEeW5hbWljTGFiZWwgeworCisJLyoqCisJICogTWFrZSB0aGUgbmV4dCB2YWx1ZSBiZSBvbmUgbW9yZSB0aGFuIHRoZSBjdXJyZW50IHZhbHVlLgorCSAqIAorCSAqIEBtb2RlbCB2b2xhdGlsZT0idHJ1ZSIgdHJhbnNpZW50PSJ0cnVlIiBjaGFuZ2VhYmxlPSJmYWxzZSIKKwkgKi8KKwl2b2lkIGluY3JlbWVudCgpOworCit9IC8vIFRlc3REeW5hbWljTGFiZWwxCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdGVzdHMvdXRpbC9sYWJlbHMvVGVzdER5bmFtaWNOb2RlTGFiZWwuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS90ZXN0cy91dGlsL2xhYmVscy9UZXN0RHluYW1pY05vZGVMYWJlbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNkMDM5YTMKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdGVzdHMvdXRpbC9sYWJlbHMvVGVzdER5bmFtaWNOb2RlTGFiZWwuamF2YQpAQCAtMCwwICsxLDMxIEBACisvLyBUZXN0RHluYW1pY05vZGVMYWJlbC5qYXZhCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC5sYWJlbHM7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkR5bmFtaWNOb2RlTGFiZWw7CisKKy8qKgorICogVGhpcyBpbnRlcmZhY2UgaXMgZm9yIHRlc3RpbmcuCisgKiAKKyAqIEBtb2RlbAorICovCitwdWJsaWMgaW50ZXJmYWNlIFRlc3REeW5hbWljTm9kZUxhYmVsIGV4dGVuZHMgRHluYW1pY05vZGVMYWJlbCB7CisKKwkvKioKKwkgKiBNYWtlIHRoZSBuZXh0IHZhbHVlIGJlIG9uZSBtb3JlIHRoYW4gdGhlIGN1cnJlbnQgdmFsdWUuCisJICogCisJICogQG1vZGVsIHZvbGF0aWxlPSJ0cnVlIiB0cmFuc2llbnQ9InRydWUiIGNoYW5nZWFibGU9ImZhbHNlIgorCSAqLworCXZvaWQgaW5jcmVtZW50KCk7CisKK30gLy8gVGVzdER5bmFtaWNOb2RlTGFiZWwKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS90ZXN0cy91dGlsL2xhYmVscy9UZXN0SW50ZWdlckxhYmVsVmFsdWUuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS90ZXN0cy91dGlsL2xhYmVscy9UZXN0SW50ZWdlckxhYmVsVmFsdWUuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MTE5Y2Q3Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3Rlc3RzL3V0aWwvbGFiZWxzL1Rlc3RJbnRlZ2VyTGFiZWxWYWx1ZS5qYXZhCkBAIC0wLDAgKzEsNTUgQEAKKy8vIFRlc3RJbnRlZ2VyTGFiZWxWYWx1ZS5qYXZhCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC5sYWJlbHM7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkxhYmVsVmFsdWU7CisKKy8qKgorICogLyoqIFRoaXMgaW50ZXJmYWNlIHJlcHJlc2VudHMgdGhlIG1vZGVsIG9mIGFuIGFic3RyYWN0IGNsYXNzIGluIGFuIEVNRiBtb2RlbAorICogdGhhdCBpcyBhbiBleGFtcGxlIG9mIGEgTGFiZWxWYWx1ZSBpbXBsZW1lbnRhdGlvbiB1c2VkIGZvciB0ZXN0IHB1cnBvc2VzLgorICogCisgKiBAbW9kZWwKKyAqLworcHVibGljIGludGVyZmFjZSBUZXN0SW50ZWdlckxhYmVsVmFsdWUgZXh0ZW5kcyBMYWJlbFZhbHVlIHsKKworCS8qKgorCSAqIFRoZSBpbnRlZ2VyIHZhbHVlIHVzZWQgaW4gdGVzdCBjYXNlcyBmb3IgdGhlIGluaXRpYWwgImN1cnJlbnQiIHZhbHVlLgorCSAqLworCWludCBDVVJSRU5UX0xBQkVMX0lOVEVHRVJfVkFMVUUgPSAxMDsKKwkKKwkvKioKKwkgKiBUaGUgaW50ZWdlciB2YWx1ZSB1c2VkIGluIHRlc3QgY2FzZXMgZm9yIHRoZSBpbml0aWFsICJuZXh0IiB2YWx1ZS4KKwkgKi8KKwlpbnQgTkVYVF9MQUJFTF9JTlRFR0VSX1ZBTFVFID0gMTE7CisJCisJLyoqCisJICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlIGZpZWxkIDxjb2RlPmk8L2NvZGU+CisJICogQG1vZGVsCisJICovCisJaW50IGdldEkoKTsKKworCS8qKgorCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC5sYWJlbHMuVGVzdEludGVnZXJMYWJlbFZhbHVlI2dldEkgPGVtPkk8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPkk8L2VtPicgYXR0cmlidXRlLgorCSAqIEBzZWUgI2dldEkoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwl2b2lkIHNldEkoaW50IHZhbHVlKTsKKworCS8qKgorCSAqIEBtb2RlbCB2b2xhdGlsZT0idHJ1ZSIgdHJhbnNpZW50PSJ0cnVlIiBjaGFuZ2VhYmxlPSJmYWxzZSIKKwkgKi8KKwl2b2lkIGluY3JlbWVudCgpOworfSAvLyBUZXN0SW50ZWdlckxhYmVsVmFsdWUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS90ZXN0cy91dGlsL2xhYmVscy9UZXN0TGFiZWwuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS90ZXN0cy91dGlsL2xhYmVscy9UZXN0TGFiZWwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MWNhYzIzCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3Rlc3RzL3V0aWwvbGFiZWxzL1Rlc3RMYWJlbC5qYXZhCkBAIC0wLDAgKzEsMjYgQEAKKy8vIFRlc3RMYWJlbC5qYXZhCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC5sYWJlbHM7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkxhYmVsOworCisvKioKKyAqIFRoaXMgaW50ZXJmYWNlIHJlcHJlc2VudHMgdGhlIG1vZGVsIG9mIGFuIGFic3RyYWN0IGNsYXNzIGluIGFuIEVNRiBtb2RlbCB0aGF0CisgKiBpcyBhbiBleGFtcGxlIG9mIGEgTGFiZWwgaW1wbGVtZW50YXRpb24gdXNlZCBmb3IgdGVzdCBwdXJwb3Nlcy4KKyAqIAorICogQHNlZSBUZXN0SW50ZWdlckxhYmVsVmFsdWUKKyAqIAorICogQG1vZGVsCisgKi8KK3B1YmxpYyBpbnRlcmZhY2UgVGVzdExhYmVsIGV4dGVuZHMgTGFiZWwgeworfSAvLyBUZXN0TGFiZWwKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS90ZXN0cy91dGlsL2xhYmVscy9UZXN0U3RhdGljRWRnZUxhYmVsLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdGVzdHMvdXRpbC9sYWJlbHMvVGVzdFN0YXRpY0VkZ2VMYWJlbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg1OTc1YTYKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdGVzdHMvdXRpbC9sYWJlbHMvVGVzdFN0YXRpY0VkZ2VMYWJlbC5qYXZhCkBAIC0wLDAgKzEsMjQgQEAKKy8vIFRlc3RTdGF0aWNFZGdlTGFiZWwuamF2YQorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwubGFiZWxzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5TdGF0aWNFZGdlTGFiZWw7CisKKy8qKgorICogVGhpcyBpcyBhIHRlc3QgY2xhc3MuCisgKiAKKyAqIEBtb2RlbAorICovCitwdWJsaWMgaW50ZXJmYWNlIFRlc3RTdGF0aWNFZGdlTGFiZWwgZXh0ZW5kcyBTdGF0aWNFZGdlTGFiZWwgeworCit9ICAvLyBUZXN0U3RhdGljRWRnZUxhYmVsClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3Rlc3RzL3V0aWwvbGFiZWxzL1Rlc3RTdGF0aWNOb2RlTGFiZWwuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS90ZXN0cy91dGlsL2xhYmVscy9UZXN0U3RhdGljTm9kZUxhYmVsLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDQyMmIwNAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS90ZXN0cy91dGlsL2xhYmVscy9UZXN0U3RhdGljTm9kZUxhYmVsLmphdmEKQEAgLTAsMCArMSwyMyBAQAorLy8gVGVzdFN0YXRpY05vZGVMYWJlbC5qYXZhCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC5sYWJlbHM7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLlN0YXRpY05vZGVMYWJlbDsKKworLyoqCisgKiBUaGlzIGlzIGEgdGVzdCBjbGFzcy4KKyAqIAorICogQG1vZGVsCisgKi8KK3B1YmxpYyBpbnRlcmZhY2UgVGVzdFN0YXRpY05vZGVMYWJlbCBleHRlbmRzIFN0YXRpY05vZGVMYWJlbCB7Cit9IC8vIFRlc3RTdGF0aWNOb2RlTGFiZWwKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdGVzdHMvdXRpbC9sYWJlbHMvaW1wbC9MYWJlbHNGYWN0b3J5SW1wbC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3Rlc3RzL3V0aWwvbGFiZWxzL2ltcGwvTGFiZWxzRmFjdG9yeUltcGwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wM2Q3YzNjCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3Rlc3RzL3V0aWwvbGFiZWxzL2ltcGwvTGFiZWxzRmFjdG9yeUltcGwuamF2YQpAQCAtMCwwICsxLDE3NSBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwubGFiZWxzLmltcGw7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzczsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRVBhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLmltcGwuRUZhY3RvcnlJbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5wbHVnaW4uRWNvcmVQbHVnaW47CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsLmxhYmVscy5MYWJlbHNGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC5sYWJlbHMuTGFiZWxzUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwubGFiZWxzLlRlc3REeW5hbWljRWRnZUxhYmVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC5sYWJlbHMuVGVzdER5bmFtaWNMYWJlbDE7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsLmxhYmVscy5UZXN0RHluYW1pY05vZGVMYWJlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwubGFiZWxzLlRlc3RJbnRlZ2VyTGFiZWxWYWx1ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwubGFiZWxzLlRlc3RMYWJlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwubGFiZWxzLlRlc3RTdGF0aWNFZGdlTGFiZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsLmxhYmVscy5UZXN0U3RhdGljTm9kZUxhYmVsOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiBBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgbW9kZWwgPGI+RmFjdG9yeTwvYj4uCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIExhYmVsc0ZhY3RvcnlJbXBsIGV4dGVuZHMgRUZhY3RvcnlJbXBsIGltcGxlbWVudHMgTGFiZWxzRmFjdG9yeSB7CisJLyoqCisJICogQ3JlYXRlcyB0aGUgZGVmYXVsdCBmYWN0b3J5IGltcGxlbWVudGF0aW9uLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBzdGF0aWMgTGFiZWxzRmFjdG9yeSBpbml0KCkgeworCQl0cnkgeworCQkJTGFiZWxzRmFjdG9yeSB0aGVMYWJlbHNGYWN0b3J5ID0gKExhYmVsc0ZhY3RvcnkpRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RUZhY3RvcnkoImh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS90ZXN0cy91dGlsL2xhYmVscy5lY29yZSIpOyAvLyROT04tTkxTLTEkIAorCQkJaWYgKHRoZUxhYmVsc0ZhY3RvcnkgIT0gbnVsbCkgeworCQkJCXJldHVybiB0aGVMYWJlbHNGYWN0b3J5OworCQkJfQorCQl9CisJCWNhdGNoIChFeGNlcHRpb24gZXhjZXB0aW9uKSB7CisJCQlFY29yZVBsdWdpbi5JTlNUQU5DRS5sb2coZXhjZXB0aW9uKTsKKwkJfQorCQlyZXR1cm4gbmV3IExhYmVsc0ZhY3RvcnlJbXBsKCk7CisJfQorCisJLyoqCisJICogQ3JlYXRlcyBhbiBpbnN0YW5jZSBvZiB0aGUgZmFjdG9yeS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgTGFiZWxzRmFjdG9yeUltcGwoKSB7CisJCXN1cGVyKCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIEVPYmplY3QgY3JlYXRlKEVDbGFzcyBlQ2xhc3MpIHsKKwkJc3dpdGNoIChlQ2xhc3MuZ2V0Q2xhc3NpZmllcklEKCkpIHsKKwkJCWNhc2UgTGFiZWxzUGFja2FnZS5URVNUX0RZTkFNSUNfRURHRV9MQUJFTDogcmV0dXJuIGNyZWF0ZVRlc3REeW5hbWljRWRnZUxhYmVsKCk7CisJCQljYXNlIExhYmVsc1BhY2thZ2UuVEVTVF9EWU5BTUlDX0xBQkVMMTogcmV0dXJuIGNyZWF0ZVRlc3REeW5hbWljTGFiZWwxKCk7CisJCQljYXNlIExhYmVsc1BhY2thZ2UuVEVTVF9EWU5BTUlDX05PREVfTEFCRUw6IHJldHVybiBjcmVhdGVUZXN0RHluYW1pY05vZGVMYWJlbCgpOworCQkJY2FzZSBMYWJlbHNQYWNrYWdlLlRFU1RfSU5URUdFUl9MQUJFTF9WQUxVRTogcmV0dXJuIGNyZWF0ZVRlc3RJbnRlZ2VyTGFiZWxWYWx1ZSgpOworCQkJY2FzZSBMYWJlbHNQYWNrYWdlLlRFU1RfTEFCRUw6IHJldHVybiBjcmVhdGVUZXN0TGFiZWwoKTsKKwkJCWNhc2UgTGFiZWxzUGFja2FnZS5URVNUX1NUQVRJQ19FREdFX0xBQkVMOiByZXR1cm4gY3JlYXRlVGVzdFN0YXRpY0VkZ2VMYWJlbCgpOworCQkJY2FzZSBMYWJlbHNQYWNrYWdlLlRFU1RfU1RBVElDX05PREVfTEFCRUw6IHJldHVybiBjcmVhdGVUZXN0U3RhdGljTm9kZUxhYmVsKCk7CisJCQlkZWZhdWx0OgorCQkJCXRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIlRoZSBjbGFzcyAnIiArIGVDbGFzcy5nZXROYW1lKCkgKyAiJyBpcyBub3QgYSB2YWxpZCBjbGFzc2lmaWVyIik7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAorCQl9CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFRlc3REeW5hbWljRWRnZUxhYmVsIGNyZWF0ZVRlc3REeW5hbWljRWRnZUxhYmVsKCkgeworCQlUZXN0RHluYW1pY0VkZ2VMYWJlbEltcGwgdGVzdER5bmFtaWNFZGdlTGFiZWwgPSBuZXcgVGVzdER5bmFtaWNFZGdlTGFiZWxJbXBsKCk7CisJCXJldHVybiB0ZXN0RHluYW1pY0VkZ2VMYWJlbDsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVGVzdER5bmFtaWNMYWJlbDEgY3JlYXRlVGVzdER5bmFtaWNMYWJlbDEoKSB7CisJCVRlc3REeW5hbWljTGFiZWwxSW1wbCB0ZXN0RHluYW1pY0xhYmVsMSA9IG5ldyBUZXN0RHluYW1pY0xhYmVsMUltcGwoKTsKKwkJcmV0dXJuIHRlc3REeW5hbWljTGFiZWwxOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBUZXN0RHluYW1pY05vZGVMYWJlbCBjcmVhdGVUZXN0RHluYW1pY05vZGVMYWJlbCgpIHsKKwkJVGVzdER5bmFtaWNOb2RlTGFiZWxJbXBsIHRlc3REeW5hbWljTm9kZUxhYmVsID0gbmV3IFRlc3REeW5hbWljTm9kZUxhYmVsSW1wbCgpOworCQlyZXR1cm4gdGVzdER5bmFtaWNOb2RlTGFiZWw7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFRlc3RJbnRlZ2VyTGFiZWxWYWx1ZSBjcmVhdGVUZXN0SW50ZWdlckxhYmVsVmFsdWUoKSB7CisJCVRlc3RJbnRlZ2VyTGFiZWxWYWx1ZUltcGwgdGVzdEludGVnZXJMYWJlbFZhbHVlID0gbmV3IFRlc3RJbnRlZ2VyTGFiZWxWYWx1ZUltcGwoKTsKKwkJcmV0dXJuIHRlc3RJbnRlZ2VyTGFiZWxWYWx1ZTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVGVzdExhYmVsIGNyZWF0ZVRlc3RMYWJlbCgpIHsKKwkJVGVzdExhYmVsSW1wbCB0ZXN0TGFiZWwgPSBuZXcgVGVzdExhYmVsSW1wbCgpOworCQlyZXR1cm4gdGVzdExhYmVsOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBUZXN0U3RhdGljRWRnZUxhYmVsIGNyZWF0ZVRlc3RTdGF0aWNFZGdlTGFiZWwoKSB7CisJCVRlc3RTdGF0aWNFZGdlTGFiZWxJbXBsIHRlc3RTdGF0aWNFZGdlTGFiZWwgPSBuZXcgVGVzdFN0YXRpY0VkZ2VMYWJlbEltcGwoKTsKKwkJcmV0dXJuIHRlc3RTdGF0aWNFZGdlTGFiZWw7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFRlc3RTdGF0aWNOb2RlTGFiZWwgY3JlYXRlVGVzdFN0YXRpY05vZGVMYWJlbCgpIHsKKwkJVGVzdFN0YXRpY05vZGVMYWJlbEltcGwgdGVzdFN0YXRpY05vZGVMYWJlbCA9IG5ldyBUZXN0U3RhdGljTm9kZUxhYmVsSW1wbCgpOworCQlyZXR1cm4gdGVzdFN0YXRpY05vZGVMYWJlbDsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgTGFiZWxzUGFja2FnZSBnZXRMYWJlbHNQYWNrYWdlKCkgeworCQlyZXR1cm4gKExhYmVsc1BhY2thZ2UpZ2V0RVBhY2thZ2UoKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBkZXByZWNhdGVkCisJICogQGdlbmVyYXRlZAorCSAqLworCUBEZXByZWNhdGVkCisJcHVibGljIHN0YXRpYyBMYWJlbHNQYWNrYWdlIGdldFBhY2thZ2UoKSB7CisJCXJldHVybiBMYWJlbHNQYWNrYWdlLmVJTlNUQU5DRTsKKwl9CisKK30gLy9MYWJlbHNGYWN0b3J5SW1wbApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3Rlc3RzL3V0aWwvbGFiZWxzL2ltcGwvTGFiZWxzUGFja2FnZUltcGwuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS90ZXN0cy91dGlsL2xhYmVscy9pbXBsL0xhYmVsc1BhY2thZ2VJbXBsLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTA3MmFiMAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS90ZXN0cy91dGlsL2xhYmVscy9pbXBsL0xhYmVsc1BhY2thZ2VJbXBsLmphdmEKQEAgLTAsMCArMSwzNTYgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsLmxhYmVscy5pbXBsOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQXR0cmlidXRlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5pbXBsLkVQYWNrYWdlSW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLkNvbW1vblBhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkdyYXBoUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuTW9kZWxQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5Nb2RpZmllclBhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNjZW5hcmlvLlNjZW5hcmlvUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2VxdWVuY2VyLlNlcXVlbmNlclBhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsLmRlY29yYXRvcnMuRGVjb3JhdG9yc1BhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsLmRlY29yYXRvcnMuaW1wbC5EZWNvcmF0b3JzUGFja2FnZUltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsLmxhYmVscy5MYWJlbHNGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC5sYWJlbHMuTGFiZWxzUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwubGFiZWxzLlRlc3REeW5hbWljRWRnZUxhYmVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC5sYWJlbHMuVGVzdER5bmFtaWNMYWJlbDE7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsLmxhYmVscy5UZXN0RHluYW1pY05vZGVMYWJlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwubGFiZWxzLlRlc3RJbnRlZ2VyTGFiZWxWYWx1ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwubGFiZWxzLlRlc3RMYWJlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwubGFiZWxzLlRlc3RTdGF0aWNFZGdlTGFiZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsLmxhYmVscy5UZXN0U3RhdGljTm9kZUxhYmVsOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiBBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgbW9kZWwgPGI+UGFja2FnZTwvYj4uCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIExhYmVsc1BhY2thZ2VJbXBsIGV4dGVuZHMgRVBhY2thZ2VJbXBsIGltcGxlbWVudHMgTGFiZWxzUGFja2FnZSB7CisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJpdmF0ZSBFQ2xhc3MgdGVzdER5bmFtaWNFZGdlTGFiZWxFQ2xhc3MgPSBudWxsOworCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJpdmF0ZSBFQ2xhc3MgdGVzdER5bmFtaWNMYWJlbDFFQ2xhc3MgPSBudWxsOworCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJpdmF0ZSBFQ2xhc3MgdGVzdER5bmFtaWNOb2RlTGFiZWxFQ2xhc3MgPSBudWxsOworCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJpdmF0ZSBFQ2xhc3MgdGVzdEludGVnZXJMYWJlbFZhbHVlRUNsYXNzID0gbnVsbDsKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByaXZhdGUgRUNsYXNzIHRlc3RMYWJlbEVDbGFzcyA9IG51bGw7CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcml2YXRlIEVDbGFzcyB0ZXN0U3RhdGljRWRnZUxhYmVsRUNsYXNzID0gbnVsbDsKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByaXZhdGUgRUNsYXNzIHRlc3RTdGF0aWNOb2RlTGFiZWxFQ2xhc3MgPSBudWxsOworCisJLyoqCisJICogQ3JlYXRlcyBhbiBpbnN0YW5jZSBvZiB0aGUgbW9kZWwgPGI+UGFja2FnZTwvYj4sIHJlZ2lzdGVyZWQgd2l0aAorCSAqIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRVBhY2thZ2UuUmVnaXN0cnkgRVBhY2thZ2UuUmVnaXN0cnl9IGJ5IHRoZSBwYWNrYWdlCisJICogcGFja2FnZSBVUkkgdmFsdWUuCisJICogPHA+Tm90ZTogdGhlIGNvcnJlY3Qgd2F5IHRvIGNyZWF0ZSB0aGUgcGFja2FnZSBpcyB2aWEgdGhlIHN0YXRpYworCSAqIGZhY3RvcnkgbWV0aG9kIHtAbGluayAjaW5pdCBpbml0KCl9LCB3aGljaCBhbHNvIHBlcmZvcm1zCisJICogaW5pdGlhbGl6YXRpb24gb2YgdGhlIHBhY2thZ2UsIG9yIHJldHVybnMgdGhlIHJlZ2lzdGVyZWQgcGFja2FnZSwKKwkgKiBpZiBvbmUgYWxyZWFkeSBleGlzdHMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FUGFja2FnZS5SZWdpc3RyeQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsLmxhYmVscy5MYWJlbHNQYWNrYWdlI2VOU19VUkkKKwkgKiBAc2VlICNpbml0KCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJpdmF0ZSBMYWJlbHNQYWNrYWdlSW1wbCgpIHsKKwkJc3VwZXIoZU5TX1VSSSwgTGFiZWxzRmFjdG9yeS5lSU5TVEFOQ0UpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByaXZhdGUgc3RhdGljIGJvb2xlYW4gaXNJbml0ZWQgPSBmYWxzZTsKKworCS8qKgorCSAqIENyZWF0ZXMsIHJlZ2lzdGVycywgYW5kIGluaXRpYWxpemVzIHRoZSA8Yj5QYWNrYWdlPC9iPiBmb3IgdGhpcworCSAqIG1vZGVsLCBhbmQgZm9yIGFueSBvdGhlcnMgdXBvbiB3aGljaCBpdCBkZXBlbmRzLiAgU2ltcGxlCisJICogZGVwZW5kZW5jaWVzIGFyZSBzYXRpc2ZpZWQgYnkgY2FsbGluZyB0aGlzIG1ldGhvZCBvbiBhbGwKKwkgKiBkZXBlbmRlbnQgcGFja2FnZXMgYmVmb3JlIGRvaW5nIGFueXRoaW5nIGVsc2UuICBUaGlzIG1ldGhvZCBkcml2ZXMKKwkgKiBpbml0aWFsaXphdGlvbiBmb3IgaW50ZXJkZXBlbmRlbnQgcGFja2FnZXMgZGlyZWN0bHksIGluIHBhcmFsbGVsCisJICogd2l0aCB0aGlzIHBhY2thZ2UsIGl0c2VsZi4KKwkgKiA8cD5PZiB0aGlzIHBhY2thZ2UgYW5kIGl0cyBpbnRlcmRlcGVuZGVuY2llcywgYWxsIHBhY2thZ2VzIHdoaWNoCisJICogaGF2ZSBub3QgeWV0IGJlZW4gcmVnaXN0ZXJlZCBieSB0aGVpciBVUkkgdmFsdWVzIGFyZSBmaXJzdCBjcmVhdGVkCisJICogYW5kIHJlZ2lzdGVyZWQuICBUaGUgcGFja2FnZXMgYXJlIHRoZW4gaW5pdGlhbGl6ZWQgaW4gdHdvIHN0ZXBzOgorCSAqIG1ldGEtbW9kZWwgb2JqZWN0cyBmb3IgYWxsIG9mIHRoZSBwYWNrYWdlcyBhcmUgY3JlYXRlZCBiZWZvcmUgYW55CisJICogYXJlIGluaXRpYWxpemVkLCBzaW5jZSBvbmUgcGFja2FnZSdzIG1ldGEtbW9kZWwgb2JqZWN0cyBtYXkgcmVmZXIgdG8KKwkgKiB0aG9zZSBvZiBhbm90aGVyLgorCSAqIDxwPkludm9jYXRpb24gb2YgdGhpcyBtZXRob2Qgd2lsbCBub3QgYWZmZWN0IGFueSBwYWNrYWdlcyB0aGF0IGhhdmUKKwkgKiBhbHJlYWR5IGJlZW4gaW5pdGlhbGl6ZWQuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNlTlNfVVJJCisJICogQHNlZSAjY3JlYXRlUGFja2FnZUNvbnRlbnRzKCkKKwkgKiBAc2VlICNpbml0aWFsaXplUGFja2FnZUNvbnRlbnRzKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHN0YXRpYyBMYWJlbHNQYWNrYWdlIGluaXQoKSB7CisJCWlmIChpc0luaXRlZCkgcmV0dXJuIChMYWJlbHNQYWNrYWdlKUVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVQYWNrYWdlKExhYmVsc1BhY2thZ2UuZU5TX1VSSSk7CisKKwkJLy8gT2J0YWluIG9yIGNyZWF0ZSBhbmQgcmVnaXN0ZXIgcGFja2FnZQorCQlMYWJlbHNQYWNrYWdlSW1wbCB0aGVMYWJlbHNQYWNrYWdlID0gKExhYmVsc1BhY2thZ2VJbXBsKShFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShlTlNfVVJJKSBpbnN0YW5jZW9mIExhYmVsc1BhY2thZ2VJbXBsID8gRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RVBhY2thZ2UoZU5TX1VSSSkgOiBuZXcgTGFiZWxzUGFja2FnZUltcGwoKSk7CisKKwkJaXNJbml0ZWQgPSB0cnVlOworCisJCS8vIEluaXRpYWxpemUgc2ltcGxlIGRlcGVuZGVuY2llcworCQlNb2RlbFBhY2thZ2UuZUlOU1RBTkNFLmVDbGFzcygpOworCQlDb21tb25QYWNrYWdlLmVJTlNUQU5DRS5lQ2xhc3MoKTsKKwkJR3JhcGhQYWNrYWdlLmVJTlNUQU5DRS5lQ2xhc3MoKTsKKwkJTW9kaWZpZXJQYWNrYWdlLmVJTlNUQU5DRS5lQ2xhc3MoKTsKKwkJU2NlbmFyaW9QYWNrYWdlLmVJTlNUQU5DRS5lQ2xhc3MoKTsKKwkJU2VxdWVuY2VyUGFja2FnZS5lSU5TVEFOQ0UuZUNsYXNzKCk7CisKKwkJLy8gT2J0YWluIG9yIGNyZWF0ZSBhbmQgcmVnaXN0ZXIgaW50ZXJkZXBlbmRlbmNpZXMKKwkJRGVjb3JhdG9yc1BhY2thZ2VJbXBsIHRoZURlY29yYXRvcnNQYWNrYWdlID0gKERlY29yYXRvcnNQYWNrYWdlSW1wbCkoRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RVBhY2thZ2UoRGVjb3JhdG9yc1BhY2thZ2UuZU5TX1VSSSkgaW5zdGFuY2VvZiBEZWNvcmF0b3JzUGFja2FnZUltcGwgPyBFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShEZWNvcmF0b3JzUGFja2FnZS5lTlNfVVJJKSA6IERlY29yYXRvcnNQYWNrYWdlLmVJTlNUQU5DRSk7CisKKwkJLy8gQ3JlYXRlIHBhY2thZ2UgbWV0YS1kYXRhIG9iamVjdHMKKwkJdGhlTGFiZWxzUGFja2FnZS5jcmVhdGVQYWNrYWdlQ29udGVudHMoKTsKKwkJdGhlRGVjb3JhdG9yc1BhY2thZ2UuY3JlYXRlUGFja2FnZUNvbnRlbnRzKCk7CisKKwkJLy8gSW5pdGlhbGl6ZSBjcmVhdGVkIG1ldGEtZGF0YQorCQl0aGVMYWJlbHNQYWNrYWdlLmluaXRpYWxpemVQYWNrYWdlQ29udGVudHMoKTsKKwkJdGhlRGVjb3JhdG9yc1BhY2thZ2UuaW5pdGlhbGl6ZVBhY2thZ2VDb250ZW50cygpOworCisJCS8vIE1hcmsgbWV0YS1kYXRhIHRvIGluZGljYXRlIGl0IGNhbid0IGJlIGNoYW5nZWQKKwkJdGhlTGFiZWxzUGFja2FnZS5mcmVlemUoKTsKKworCQlyZXR1cm4gdGhlTGFiZWxzUGFja2FnZTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUNsYXNzIGdldFRlc3REeW5hbWljRWRnZUxhYmVsKCkgeworCQlyZXR1cm4gdGVzdER5bmFtaWNFZGdlTGFiZWxFQ2xhc3M7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVDbGFzcyBnZXRUZXN0RHluYW1pY0xhYmVsMSgpIHsKKwkJcmV0dXJuIHRlc3REeW5hbWljTGFiZWwxRUNsYXNzOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQ2xhc3MgZ2V0VGVzdER5bmFtaWNOb2RlTGFiZWwoKSB7CisJCXJldHVybiB0ZXN0RHluYW1pY05vZGVMYWJlbEVDbGFzczsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUNsYXNzIGdldFRlc3RJbnRlZ2VyTGFiZWxWYWx1ZSgpIHsKKwkJcmV0dXJuIHRlc3RJbnRlZ2VyTGFiZWxWYWx1ZUVDbGFzczsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUF0dHJpYnV0ZSBnZXRUZXN0SW50ZWdlckxhYmVsVmFsdWVfSSgpIHsKKwkJcmV0dXJuIChFQXR0cmlidXRlKXRlc3RJbnRlZ2VyTGFiZWxWYWx1ZUVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDApOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQ2xhc3MgZ2V0VGVzdExhYmVsKCkgeworCQlyZXR1cm4gdGVzdExhYmVsRUNsYXNzOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQ2xhc3MgZ2V0VGVzdFN0YXRpY0VkZ2VMYWJlbCgpIHsKKwkJcmV0dXJuIHRlc3RTdGF0aWNFZGdlTGFiZWxFQ2xhc3M7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVDbGFzcyBnZXRUZXN0U3RhdGljTm9kZUxhYmVsKCkgeworCQlyZXR1cm4gdGVzdFN0YXRpY05vZGVMYWJlbEVDbGFzczsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgTGFiZWxzRmFjdG9yeSBnZXRMYWJlbHNGYWN0b3J5KCkgeworCQlyZXR1cm4gKExhYmVsc0ZhY3RvcnkpZ2V0RUZhY3RvcnlJbnN0YW5jZSgpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByaXZhdGUgYm9vbGVhbiBpc0NyZWF0ZWQgPSBmYWxzZTsKKworCS8qKgorCSAqIENyZWF0ZXMgdGhlIG1ldGEtbW9kZWwgb2JqZWN0cyBmb3IgdGhlIHBhY2thZ2UuICBUaGlzIG1ldGhvZCBpcworCSAqIGd1YXJkZWQgdG8gaGF2ZSBubyBhZmZlY3Qgb24gYW55IGludm9jYXRpb24gYnV0IGl0cyBmaXJzdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBjcmVhdGVQYWNrYWdlQ29udGVudHMoKSB7CisJCWlmIChpc0NyZWF0ZWQpIHJldHVybjsKKwkJaXNDcmVhdGVkID0gdHJ1ZTsKKworCQkvLyBDcmVhdGUgY2xhc3NlcyBhbmQgdGhlaXIgZmVhdHVyZXMKKwkJdGVzdER5bmFtaWNFZGdlTGFiZWxFQ2xhc3MgPSBjcmVhdGVFQ2xhc3MoVEVTVF9EWU5BTUlDX0VER0VfTEFCRUwpOworCisJCXRlc3REeW5hbWljTGFiZWwxRUNsYXNzID0gY3JlYXRlRUNsYXNzKFRFU1RfRFlOQU1JQ19MQUJFTDEpOworCisJCXRlc3REeW5hbWljTm9kZUxhYmVsRUNsYXNzID0gY3JlYXRlRUNsYXNzKFRFU1RfRFlOQU1JQ19OT0RFX0xBQkVMKTsKKworCQl0ZXN0SW50ZWdlckxhYmVsVmFsdWVFQ2xhc3MgPSBjcmVhdGVFQ2xhc3MoVEVTVF9JTlRFR0VSX0xBQkVMX1ZBTFVFKTsKKwkJY3JlYXRlRUF0dHJpYnV0ZSh0ZXN0SW50ZWdlckxhYmVsVmFsdWVFQ2xhc3MsIFRFU1RfSU5URUdFUl9MQUJFTF9WQUxVRV9fSSk7CisKKwkJdGVzdExhYmVsRUNsYXNzID0gY3JlYXRlRUNsYXNzKFRFU1RfTEFCRUwpOworCisJCXRlc3RTdGF0aWNFZGdlTGFiZWxFQ2xhc3MgPSBjcmVhdGVFQ2xhc3MoVEVTVF9TVEFUSUNfRURHRV9MQUJFTCk7CisKKwkJdGVzdFN0YXRpY05vZGVMYWJlbEVDbGFzcyA9IGNyZWF0ZUVDbGFzcyhURVNUX1NUQVRJQ19OT0RFX0xBQkVMKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcml2YXRlIGJvb2xlYW4gaXNJbml0aWFsaXplZCA9IGZhbHNlOworCisJLyoqCisJICogQ29tcGxldGUgdGhlIGluaXRpYWxpemF0aW9uIG9mIHRoZSBwYWNrYWdlIGFuZCBpdHMgbWV0YS1tb2RlbC4gIFRoaXMKKwkgKiBtZXRob2QgaXMgZ3VhcmRlZCB0byBoYXZlIG5vIGFmZmVjdCBvbiBhbnkgaW52b2NhdGlvbiBidXQgaXRzIGZpcnN0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIGluaXRpYWxpemVQYWNrYWdlQ29udGVudHMoKSB7CisJCWlmIChpc0luaXRpYWxpemVkKSByZXR1cm47CisJCWlzSW5pdGlhbGl6ZWQgPSB0cnVlOworCisJCS8vIEluaXRpYWxpemUgcGFja2FnZQorCQlzZXROYW1lKGVOQU1FKTsKKwkJc2V0TnNQcmVmaXgoZU5TX1BSRUZJWCk7CisJCXNldE5zVVJJKGVOU19VUkkpOworCisJCS8vIE9idGFpbiBvdGhlciBkZXBlbmRlbnQgcGFja2FnZXMKKwkJR3JhcGhQYWNrYWdlIHRoZUdyYXBoUGFja2FnZSA9IChHcmFwaFBhY2thZ2UpRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RVBhY2thZ2UoR3JhcGhQYWNrYWdlLmVOU19VUkkpOworCisJCS8vIENyZWF0ZSB0eXBlIHBhcmFtZXRlcnMKKworCQkvLyBTZXQgYm91bmRzIGZvciB0eXBlIHBhcmFtZXRlcnMKKworCQkvLyBBZGQgc3VwZXJ0eXBlcyB0byBjbGFzc2VzCisJCXRlc3REeW5hbWljRWRnZUxhYmVsRUNsYXNzLmdldEVTdXBlclR5cGVzKCkuYWRkKHRoZUdyYXBoUGFja2FnZS5nZXREeW5hbWljRWRnZUxhYmVsKCkpOworCQl0ZXN0RHluYW1pY0xhYmVsMUVDbGFzcy5nZXRFU3VwZXJUeXBlcygpLmFkZCh0aGVHcmFwaFBhY2thZ2UuZ2V0RHluYW1pY0xhYmVsKCkpOworCQl0ZXN0RHluYW1pY05vZGVMYWJlbEVDbGFzcy5nZXRFU3VwZXJUeXBlcygpLmFkZCh0aGVHcmFwaFBhY2thZ2UuZ2V0RHluYW1pY05vZGVMYWJlbCgpKTsKKwkJdGVzdEludGVnZXJMYWJlbFZhbHVlRUNsYXNzLmdldEVTdXBlclR5cGVzKCkuYWRkKHRoZUdyYXBoUGFja2FnZS5nZXRMYWJlbFZhbHVlKCkpOworCQl0ZXN0TGFiZWxFQ2xhc3MuZ2V0RVN1cGVyVHlwZXMoKS5hZGQodGhlR3JhcGhQYWNrYWdlLmdldExhYmVsKCkpOworCQl0ZXN0U3RhdGljRWRnZUxhYmVsRUNsYXNzLmdldEVTdXBlclR5cGVzKCkuYWRkKHRoZUdyYXBoUGFja2FnZS5nZXRTdGF0aWNFZGdlTGFiZWwoKSk7CisJCXRlc3RTdGF0aWNOb2RlTGFiZWxFQ2xhc3MuZ2V0RVN1cGVyVHlwZXMoKS5hZGQodGhlR3JhcGhQYWNrYWdlLmdldFN0YXRpY05vZGVMYWJlbCgpKTsKKworCQkvLyBJbml0aWFsaXplIGNsYXNzZXMgYW5kIGZlYXR1cmVzOyBhZGQgb3BlcmF0aW9ucyBhbmQgcGFyYW1ldGVycworCQlpbml0RUNsYXNzKHRlc3REeW5hbWljRWRnZUxhYmVsRUNsYXNzLCBUZXN0RHluYW1pY0VkZ2VMYWJlbC5jbGFzcywgIlRlc3REeW5hbWljRWRnZUxhYmVsIiwgIUlTX0FCU1RSQUNULCAhSVNfSU5URVJGQUNFLCBJU19HRU5FUkFURURfSU5TVEFOQ0VfQ0xBU1MpOyAvLyROT04tTkxTLTEkCisKKwkJYWRkRU9wZXJhdGlvbih0ZXN0RHluYW1pY0VkZ2VMYWJlbEVDbGFzcywgbnVsbCwgImluY3JlbWVudCIsIDAsIDEsIElTX1VOSVFVRSwgSVNfT1JERVJFRCk7IC8vJE5PTi1OTFMtMSQKKworCQlpbml0RUNsYXNzKHRlc3REeW5hbWljTGFiZWwxRUNsYXNzLCBUZXN0RHluYW1pY0xhYmVsMS5jbGFzcywgIlRlc3REeW5hbWljTGFiZWwxIiwgIUlTX0FCU1RSQUNULCAhSVNfSU5URVJGQUNFLCBJU19HRU5FUkFURURfSU5TVEFOQ0VfQ0xBU1MpOyAvLyROT04tTkxTLTEkCisKKwkJYWRkRU9wZXJhdGlvbih0ZXN0RHluYW1pY0xhYmVsMUVDbGFzcywgbnVsbCwgImluY3JlbWVudCIsIDAsIDEsIElTX1VOSVFVRSwgSVNfT1JERVJFRCk7IC8vJE5PTi1OTFMtMSQKKworCQlpbml0RUNsYXNzKHRlc3REeW5hbWljTm9kZUxhYmVsRUNsYXNzLCBUZXN0RHluYW1pY05vZGVMYWJlbC5jbGFzcywgIlRlc3REeW5hbWljTm9kZUxhYmVsIiwgIUlTX0FCU1RSQUNULCAhSVNfSU5URVJGQUNFLCBJU19HRU5FUkFURURfSU5TVEFOQ0VfQ0xBU1MpOyAvLyROT04tTkxTLTEkCisKKwkJYWRkRU9wZXJhdGlvbih0ZXN0RHluYW1pY05vZGVMYWJlbEVDbGFzcywgbnVsbCwgImluY3JlbWVudCIsIDAsIDEsIElTX1VOSVFVRSwgSVNfT1JERVJFRCk7IC8vJE5PTi1OTFMtMSQKKworCQlpbml0RUNsYXNzKHRlc3RJbnRlZ2VyTGFiZWxWYWx1ZUVDbGFzcywgVGVzdEludGVnZXJMYWJlbFZhbHVlLmNsYXNzLCAiVGVzdEludGVnZXJMYWJlbFZhbHVlIiwgIUlTX0FCU1RSQUNULCAhSVNfSU5URVJGQUNFLCBJU19HRU5FUkFURURfSU5TVEFOQ0VfQ0xBU1MpOyAvLyROT04tTkxTLTEkCisJCWluaXRFQXR0cmlidXRlKGdldFRlc3RJbnRlZ2VyTGFiZWxWYWx1ZV9JKCksIGVjb3JlUGFja2FnZS5nZXRFSW50KCksICJpIiwgbnVsbCwgMCwgMSwgVGVzdEludGVnZXJMYWJlbFZhbHVlLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOyAvLyROT04tTkxTLTEkCisKKwkJYWRkRU9wZXJhdGlvbih0ZXN0SW50ZWdlckxhYmVsVmFsdWVFQ2xhc3MsIG51bGwsICJpbmNyZW1lbnQiLCAwLCAxLCBJU19VTklRVUUsIElTX09SREVSRUQpOyAvLyROT04tTkxTLTEkCisKKwkJaW5pdEVDbGFzcyh0ZXN0TGFiZWxFQ2xhc3MsIFRlc3RMYWJlbC5jbGFzcywgIlRlc3RMYWJlbCIsICFJU19BQlNUUkFDVCwgIUlTX0lOVEVSRkFDRSwgSVNfR0VORVJBVEVEX0lOU1RBTkNFX0NMQVNTKTsgLy8kTk9OLU5MUy0xJAorCisJCWluaXRFQ2xhc3ModGVzdFN0YXRpY0VkZ2VMYWJlbEVDbGFzcywgVGVzdFN0YXRpY0VkZ2VMYWJlbC5jbGFzcywgIlRlc3RTdGF0aWNFZGdlTGFiZWwiLCAhSVNfQUJTVFJBQ1QsICFJU19JTlRFUkZBQ0UsIElTX0dFTkVSQVRFRF9JTlNUQU5DRV9DTEFTUyk7IC8vJE5PTi1OTFMtMSQKKworCQlpbml0RUNsYXNzKHRlc3RTdGF0aWNOb2RlTGFiZWxFQ2xhc3MsIFRlc3RTdGF0aWNOb2RlTGFiZWwuY2xhc3MsICJUZXN0U3RhdGljTm9kZUxhYmVsIiwgIUlTX0FCU1RSQUNULCAhSVNfSU5URVJGQUNFLCBJU19HRU5FUkFURURfSU5TVEFOQ0VfQ0xBU1MpOyAvLyROT04tTkxTLTEkCisKKwkJLy8gQ3JlYXRlIHJlc291cmNlCisJCWNyZWF0ZVJlc291cmNlKGVOU19VUkkpOworCX0KKworfSAvL0xhYmVsc1BhY2thZ2VJbXBsCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdGVzdHMvdXRpbC9sYWJlbHMvaW1wbC9UZXN0RHluYW1pY0VkZ2VMYWJlbEltcGwuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS90ZXN0cy91dGlsL2xhYmVscy9pbXBsL1Rlc3REeW5hbWljRWRnZUxhYmVsSW1wbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIzYzg2NjIKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdGVzdHMvdXRpbC9sYWJlbHMvaW1wbC9UZXN0RHluYW1pY0VkZ2VMYWJlbEltcGwuamF2YQpAQCAtMCwwICsxLDYxIEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC5sYWJlbHMuaW1wbDsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5pbXBsLkR5bmFtaWNFZGdlTGFiZWxJbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC5sYWJlbHMuTGFiZWxzUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwubGFiZWxzLlRlc3REeW5hbWljRWRnZUxhYmVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC5sYWJlbHMuVGVzdEludGVnZXJMYWJlbFZhbHVlOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiBBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+VGVzdCBEeW5hbWljIEVkZ2UgTGFiZWw8L2I+PC9lbT4nLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiA8cD4KKyAqIDwvcD4KKyAqCisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBUZXN0RHluYW1pY0VkZ2VMYWJlbEltcGwgZXh0ZW5kcyBEeW5hbWljRWRnZUxhYmVsSW1wbCBpbXBsZW1lbnRzIFRlc3REeW5hbWljRWRnZUxhYmVsIHsKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgVGVzdER5bmFtaWNFZGdlTGFiZWxJbXBsKCkgeworCQlzdXBlcigpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCBFQ2xhc3MgZVN0YXRpY0NsYXNzKCkgeworCQlyZXR1cm4gTGFiZWxzUGFja2FnZS5MaXRlcmFscy5URVNUX0RZTkFNSUNfRURHRV9MQUJFTDsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCXB1YmxpYyB2b2lkIGluY3JlbWVudCgpIHsKKwkJZmluYWwgVGVzdEludGVnZXJMYWJlbFZhbHVlIG5leHRMYWJlbFZhbHVlID0gKFRlc3RJbnRlZ2VyTGFiZWxWYWx1ZSkgZ2V0TmV4dFZhbHVlKCk7CisJCWZpbmFsIFRlc3RJbnRlZ2VyTGFiZWxWYWx1ZSBjdXJyZW50TGFiZWxWYWx1ZSA9IChUZXN0SW50ZWdlckxhYmVsVmFsdWUpIGdldEN1cnJlbnRWYWx1ZSgpOworCQluZXh0TGFiZWxWYWx1ZS5zZXRJKGN1cnJlbnRMYWJlbFZhbHVlLmdldEkoKSArIDEpOworCQlzZXROZXh0VmFsdWVWYWxpZCh0cnVlKTsKKwl9IC8vIGluY3JlbWVudAorCit9IC8vVGVzdER5bmFtaWNFZGdlTGFiZWxJbXBsClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3Rlc3RzL3V0aWwvbGFiZWxzL2ltcGwvVGVzdER5bmFtaWNMYWJlbDFJbXBsLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdGVzdHMvdXRpbC9sYWJlbHMvaW1wbC9UZXN0RHluYW1pY0xhYmVsMUltcGwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYjA4YTNlCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3Rlc3RzL3V0aWwvbGFiZWxzL2ltcGwvVGVzdER5bmFtaWNMYWJlbDFJbXBsLmphdmEKQEAgLTAsMCArMSw5MSBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwubGFiZWxzLmltcGw7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzczsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLklkZW50aWZpYWJsZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguaW1wbC5EeW5hbWljTGFiZWxJbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC5sYWJlbHMuTGFiZWxzRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwubGFiZWxzLkxhYmVsc1BhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsLmxhYmVscy5UZXN0RHluYW1pY0xhYmVsMTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwubGFiZWxzLlRlc3RJbnRlZ2VyTGFiZWxWYWx1ZTsKKworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IEFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5UZXN0IER5bmFtaWMgTGFiZWwxPC9iPjwvZW0+Jy4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogPHA+CisgKiA8L3A+CisgKgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgVGVzdER5bmFtaWNMYWJlbDFJbXBsIGV4dGVuZHMgRHluYW1pY0xhYmVsSW1wbCBpbXBsZW1lbnRzCisJCVRlc3REeW5hbWljTGFiZWwxIHsKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCXByb3RlY3RlZCBUZXN0RHluYW1pY0xhYmVsMUltcGwoKSB7CisJCXN1cGVyKCk7CisJCXNldEN1cnJlbnRWYWx1ZShMYWJlbHNGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVUZXN0SW50ZWdlckxhYmVsVmFsdWUoKSk7CisJCXNldE5leHRWYWx1ZShMYWJlbHNGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVUZXN0SW50ZWdlckxhYmVsVmFsdWUoKSk7CisJfSAvLyBUZXN0RHluYW1pY0xhYmVsMUltcGwKKworCQorCUBPdmVycmlkZQorCXB1YmxpYyBJZGVudGlmaWFibGUgZ2V0SWRlbnRpZmlhYmxlKCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIHNldElkZW50aWZpYWJsZShJZGVudGlmaWFibGUgbmV3SWRlbnRpZmlhYmxlKSB7CisJCXRocm93IG5ldyBVbnN1cHBvcnRlZE9wZXJhdGlvbkV4Y2VwdGlvbigpOworCX0KKworCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCBFQ2xhc3MgZVN0YXRpY0NsYXNzKCkgeworCQlyZXR1cm4gTGFiZWxzUGFja2FnZS5MaXRlcmFscy5URVNUX0RZTkFNSUNfTEFCRUwxOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJcHVibGljIHZvaWQgaW5jcmVtZW50KCkgeworCQlmaW5hbCBUZXN0SW50ZWdlckxhYmVsVmFsdWUgbmV4dExhYmVsVmFsdWUgPSAoVGVzdEludGVnZXJMYWJlbFZhbHVlKSBnZXROZXh0VmFsdWUoKTsKKwkJZmluYWwgVGVzdEludGVnZXJMYWJlbFZhbHVlIGN1cnJlbnRMYWJlbFZhbHVlID0gKFRlc3RJbnRlZ2VyTGFiZWxWYWx1ZSkgZ2V0Q3VycmVudFZhbHVlKCk7CisJCW5leHRMYWJlbFZhbHVlLnNldEkoY3VycmVudExhYmVsVmFsdWUuZ2V0SSgpKzEpOworCQlzZXROZXh0VmFsdWVWYWxpZCh0cnVlKTsKKwl9IC8vIGluY3JlbWVudAorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUudGVzdC5sYWJlbHMuaW1wbC5UZXN0TGFiZWxJbXBsI3RvU3RyaW5nKCkKKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKSB7CisJCWZpbmFsIFN0cmluZ0J1aWxkZXIgc2IgPSBuZXcgU3RyaW5nQnVpbGRlcigiQzogIik7CisJCXNiLmFwcGVuZChnZXRDdXJyZW50VmFsdWUoKS50b1N0cmluZygpKTsKKwkJc2IuYXBwZW5kKCIsIE46ICIpOworCQlzYi5hcHBlbmQoZ2V0TmV4dFZhbHVlKCkudG9TdHJpbmcoKSk7CisJCXJldHVybiBzYi50b1N0cmluZygpOworCX0gLy8gdG9TdHJpbmcKKworfSAvLyBUZXN0RHluYW1pY0xhYmVsMUltcGwKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS90ZXN0cy91dGlsL2xhYmVscy9pbXBsL1Rlc3REeW5hbWljTm9kZUxhYmVsSW1wbC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3Rlc3RzL3V0aWwvbGFiZWxzL2ltcGwvVGVzdER5bmFtaWNOb2RlTGFiZWxJbXBsLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDQxMWYzMgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS90ZXN0cy91dGlsL2xhYmVscy9pbXBsL1Rlc3REeW5hbWljTm9kZUxhYmVsSW1wbC5qYXZhCkBAIC0wLDAgKzEsNTkgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsLmxhYmVscy5pbXBsOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmltcGwuRHluYW1pY05vZGVMYWJlbEltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsLmxhYmVscy5MYWJlbHNQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC5sYWJlbHMuVGVzdER5bmFtaWNOb2RlTGFiZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsLmxhYmVscy5UZXN0SW50ZWdlckxhYmVsVmFsdWU7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPlRlc3QgRHluYW1pYyBOb2RlIExhYmVsPC9iPjwvZW0+Jy4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogPHA+CisgKiA8L3A+CisgKgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgVGVzdER5bmFtaWNOb2RlTGFiZWxJbXBsIGV4dGVuZHMgRHluYW1pY05vZGVMYWJlbEltcGwgaW1wbGVtZW50cworCQlUZXN0RHluYW1pY05vZGVMYWJlbCB7CisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBUZXN0RHluYW1pY05vZGVMYWJlbEltcGwoKSB7CisJCXN1cGVyKCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCBFQ2xhc3MgZVN0YXRpY0NsYXNzKCkgeworCQlyZXR1cm4gTGFiZWxzUGFja2FnZS5MaXRlcmFscy5URVNUX0RZTkFNSUNfTk9ERV9MQUJFTDsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCXB1YmxpYyB2b2lkIGluY3JlbWVudCgpIHsKKwkJZmluYWwgVGVzdEludGVnZXJMYWJlbFZhbHVlIG5leHRMYWJlbFZhbHVlID0gKFRlc3RJbnRlZ2VyTGFiZWxWYWx1ZSkgZ2V0TmV4dFZhbHVlKCk7CisJCWZpbmFsIFRlc3RJbnRlZ2VyTGFiZWxWYWx1ZSBjdXJyZW50TGFiZWxWYWx1ZSA9IChUZXN0SW50ZWdlckxhYmVsVmFsdWUpIGdldEN1cnJlbnRWYWx1ZSgpOworCQluZXh0TGFiZWxWYWx1ZS5zZXRJKGN1cnJlbnRMYWJlbFZhbHVlLmdldEkoKSArIDEpOworCQlzZXROZXh0VmFsdWVWYWxpZCh0cnVlKTsKKwl9IC8vIGluY3JlbWVudAorCit9IC8vIFRlc3REeW5hbWljTm9kZUxhYmVsSW1wbApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3Rlc3RzL3V0aWwvbGFiZWxzL2ltcGwvVGVzdEludGVnZXJMYWJlbFZhbHVlSW1wbC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3Rlc3RzL3V0aWwvbGFiZWxzL2ltcGwvVGVzdEludGVnZXJMYWJlbFZhbHVlSW1wbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE1ZmVmZWIKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdGVzdHMvdXRpbC9sYWJlbHMvaW1wbC9UZXN0SW50ZWdlckxhYmVsVmFsdWVJbXBsLmphdmEKQEAgLTAsMCArMSwxODUgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsLmxhYmVscy5pbXBsOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5pbXBsLkVOb3RpZmljYXRpb25JbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5pbXBsLkxhYmVsVmFsdWVJbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC5sYWJlbHMuTGFiZWxzUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwubGFiZWxzLlRlc3RJbnRlZ2VyTGFiZWxWYWx1ZTsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiBBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+VGVzdCBJbnRlZ2VyIExhYmVsIFZhbHVlPC9iPjwvZW0+Jy4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogPHA+CisgKiBUaGUgZm9sbG93aW5nIGZlYXR1cmVzIGFyZSBpbXBsZW1lbnRlZDoKKyAqIDx1bD4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwubGFiZWxzLmltcGwuVGVzdEludGVnZXJMYWJlbFZhbHVlSW1wbCNnZXRJIDxlbT5JPC9lbT59PC9saT4KKyAqIDwvdWw+CisgKiA8L3A+CisgKgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgVGVzdEludGVnZXJMYWJlbFZhbHVlSW1wbCBleHRlbmRzIExhYmVsVmFsdWVJbXBsIGltcGxlbWVudHMKKwkJVGVzdEludGVnZXJMYWJlbFZhbHVlIHsKKwkvKioKKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0SSgpIDxlbT5JPC9lbT59JyBhdHRyaWJ1dGUuIDwhLS0KKwkgKiBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogCisJICogQHNlZSAjZ2V0SSgpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBpbnQgSV9FREVGQVVMVCA9IDA7CisKKwkvKioKKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRJKCkgPGVtPkk8L2VtPn0nIGF0dHJpYnV0ZS4gPCEtLQorCSAqIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAc2VlICNnZXRJKCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgaW50IGkgPSBJX0VERUZBVUxUOworCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBUZXN0SW50ZWdlckxhYmVsVmFsdWVJbXBsKCkgeworCQlzdXBlcigpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgRUNsYXNzIGVTdGF0aWNDbGFzcygpIHsKKwkJcmV0dXJuIExhYmVsc1BhY2thZ2UuTGl0ZXJhbHMuVEVTVF9JTlRFR0VSX0xBQkVMX1ZBTFVFOworCX0KKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmltcGwuTGFiZWxWYWx1ZUltcGwjcmVzZXQoKQorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIHJlc2V0KCkgeworCQlzZXRJKElfRURFRkFVTFQpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgaW50IGdldEkoKSB7CisJCXJldHVybiBpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRJKGludCBuZXdJKSB7CisJCWludCBvbGRJID0gaTsKKwkJaSA9IG5ld0k7CisJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkKKwkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIExhYmVsc1BhY2thZ2UuVEVTVF9JTlRFR0VSX0xBQkVMX1ZBTFVFX19JLCBvbGRJLCBpKSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogCisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlwdWJsaWMgdm9pZCBpbmNyZW1lbnQoKSB7CisJCXNldEkoZ2V0SSgpICsgMSk7CisJfSAvLyBpbmNyZW1lbnQKKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5TYW5pdHlDaGVja2VyI3NhbmUoKQorCSAqLworCXB1YmxpYyBib29sZWFuIHNhbmUoKSB7CisJCWJvb2xlYW4gcmV0VmFsdWUgPSB0cnVlOworCisJCXJldFZhbHVlID0gcmV0VmFsdWUgJiYgZ2V0SSgpID49IDA7CisJCXJldHVybiByZXRWYWx1ZTsKKwl9IC8vIHNhbmUKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgT2JqZWN0IGVHZXQoaW50IGZlYXR1cmVJRCwgYm9vbGVhbiByZXNvbHZlLCBib29sZWFuIGNvcmVUeXBlKSB7CisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7CisJCQljYXNlIExhYmVsc1BhY2thZ2UuVEVTVF9JTlRFR0VSX0xBQkVMX1ZBTFVFX19JOgorCQkJCXJldHVybiBuZXcgSW50ZWdlcihnZXRJKCkpOworCQl9CisJCXJldHVybiBzdXBlci5lR2V0KGZlYXR1cmVJRCwgcmVzb2x2ZSwgY29yZVR5cGUpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBlU2V0KGludCBmZWF0dXJlSUQsIE9iamVjdCBuZXdWYWx1ZSkgeworCQlzd2l0Y2ggKGZlYXR1cmVJRCkgeworCQkJY2FzZSBMYWJlbHNQYWNrYWdlLlRFU1RfSU5URUdFUl9MQUJFTF9WQUxVRV9fSToKKwkJCQlzZXRJKCgoSW50ZWdlciluZXdWYWx1ZSkuaW50VmFsdWUoKSk7CisJCQkJcmV0dXJuOworCQl9CisJCXN1cGVyLmVTZXQoZmVhdHVyZUlELCBuZXdWYWx1ZSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGVVbnNldChpbnQgZmVhdHVyZUlEKSB7CisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7CisJCQljYXNlIExhYmVsc1BhY2thZ2UuVEVTVF9JTlRFR0VSX0xBQkVMX1ZBTFVFX19JOgorCQkJCXNldEkoSV9FREVGQVVMVCk7CisJCQkJcmV0dXJuOworCQl9CisJCXN1cGVyLmVVbnNldChmZWF0dXJlSUQpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgYm9vbGVhbiBlSXNTZXQoaW50IGZlYXR1cmVJRCkgeworCQlzd2l0Y2ggKGZlYXR1cmVJRCkgeworCQkJY2FzZSBMYWJlbHNQYWNrYWdlLlRFU1RfSU5URUdFUl9MQUJFTF9WQUxVRV9fSToKKwkJCQlyZXR1cm4gaSAhPSBJX0VERUZBVUxUOworCQl9CisJCXJldHVybiBzdXBlci5lSXNTZXQoZmVhdHVyZUlEKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCXB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKSB7CisJCWlmIChlSXNQcm94eSgpKQorCQkJcmV0dXJuIHN1cGVyLnRvU3RyaW5nKCk7CisKKwkJZmluYWwgU3RyaW5nQnVpbGRlciByZXN1bHQgPSBuZXcgU3RyaW5nQnVpbGRlcihJbnRlZ2VyLnRvU3RyaW5nKGdldEkoKSkpOworCQlyZXR1cm4gcmVzdWx0LnRvU3RyaW5nKCk7CisJfSAvLyB0b1N0cmluZworCit9IC8vIFRlc3RJbnRlZ2VyTGFiZWxWYWx1ZUltcGwKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS90ZXN0cy91dGlsL2xhYmVscy9pbXBsL1Rlc3RMYWJlbEltcGwuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS90ZXN0cy91dGlsL2xhYmVscy9pbXBsL1Rlc3RMYWJlbEltcGwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNzQwZWJlCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3Rlc3RzL3V0aWwvbGFiZWxzL2ltcGwvVGVzdExhYmVsSW1wbC5qYXZhCkBAIC0wLDAgKzEsNzAgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsLmxhYmVscy5pbXBsOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5JZGVudGlmaWFibGU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmltcGwuTGFiZWxJbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC5sYWJlbHMuTGFiZWxzRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwubGFiZWxzLkxhYmVsc1BhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsLmxhYmVscy5UZXN0TGFiZWw7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPlRlc3QgTGFiZWw8L2I+PC9lbT4nLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiA8cD4KKyAqIDwvcD4KKyAqCisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBUZXN0TGFiZWxJbXBsIGV4dGVuZHMgTGFiZWxJbXBsIGltcGxlbWVudHMgVGVzdExhYmVsIHsKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCXByb3RlY3RlZCBUZXN0TGFiZWxJbXBsKCkgeworCQlzdXBlcigpOworCQlzZXRDdXJyZW50VmFsdWUoTGFiZWxzRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlVGVzdEludGVnZXJMYWJlbFZhbHVlKCkpOworCX0gLy8gVGVzdExhYmVsSW1wbAorCisJQE92ZXJyaWRlCisJcHVibGljIElkZW50aWZpYWJsZSBnZXRJZGVudGlmaWFibGUoKSB7CisJCXJldHVybiBudWxsOworCX0KKworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIHNldElkZW50aWZpYWJsZShJZGVudGlmaWFibGUgbmV3SWRlbnRpZmlhYmxlKSB7CisJCXRocm93IG5ldyBVbnN1cHBvcnRlZE9wZXJhdGlvbkV4Y2VwdGlvbigpOworCX0KKwkKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIEVDbGFzcyBlU3RhdGljQ2xhc3MoKSB7CisJCXJldHVybiBMYWJlbHNQYWNrYWdlLkxpdGVyYWxzLlRFU1RfTEFCRUw7CisJfQorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguaW1wbC5MYWJlbEltcGwjdG9TdHJpbmcoKQorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIFN0cmluZyB0b1N0cmluZygpIHsKKwkJZmluYWwgU3RyaW5nQnVpbGRlciBzYiA9IG5ldyBTdHJpbmdCdWlsZGVyKGdldEN1cnJlbnRWYWx1ZSgpLnRvU3RyaW5nKCkpOworCQlyZXR1cm4gc2IudG9TdHJpbmcoKTsKKwl9IC8vIHRvU3RyaW5nCisKKwkKK30gLy8gVGVzdExhYmVsSW1wbApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3Rlc3RzL3V0aWwvbGFiZWxzL2ltcGwvVGVzdFN0YXRpY0VkZ2VMYWJlbEltcGwuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS90ZXN0cy91dGlsL2xhYmVscy9pbXBsL1Rlc3RTdGF0aWNFZGdlTGFiZWxJbXBsLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGVjMzVmOQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS90ZXN0cy91dGlsL2xhYmVscy9pbXBsL1Rlc3RTdGF0aWNFZGdlTGFiZWxJbXBsLmphdmEKQEAgLTAsMCArMSw0OCBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwubGFiZWxzLmltcGw7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzczsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguaW1wbC5TdGF0aWNFZGdlTGFiZWxJbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC5sYWJlbHMuTGFiZWxzUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwubGFiZWxzLlRlc3RTdGF0aWNFZGdlTGFiZWw7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIEFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5UZXN0IFN0YXRpYyBFZGdlIExhYmVsPC9iPjwvZW0+Jy4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogPHA+CisgKiA8L3A+CisgKgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgVGVzdFN0YXRpY0VkZ2VMYWJlbEltcGwgZXh0ZW5kcyBTdGF0aWNFZGdlTGFiZWxJbXBsIGltcGxlbWVudHMgVGVzdFN0YXRpY0VkZ2VMYWJlbCB7CisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIFRlc3RTdGF0aWNFZGdlTGFiZWxJbXBsKCkgeworCQlzdXBlcigpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCBFQ2xhc3MgZVN0YXRpY0NsYXNzKCkgeworCQlyZXR1cm4gTGFiZWxzUGFja2FnZS5MaXRlcmFscy5URVNUX1NUQVRJQ19FREdFX0xBQkVMOworCX0KKworfSAvL1Rlc3RTdGF0aWNFZGdlTGFiZWxJbXBsClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3Rlc3RzL3V0aWwvbGFiZWxzL2ltcGwvVGVzdFN0YXRpY05vZGVMYWJlbEltcGwuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS90ZXN0cy91dGlsL2xhYmVscy9pbXBsL1Rlc3RTdGF0aWNOb2RlTGFiZWxJbXBsLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODllNDNjOAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS90ZXN0cy91dGlsL2xhYmVscy9pbXBsL1Rlc3RTdGF0aWNOb2RlTGFiZWxJbXBsLmphdmEKQEAgLTAsMCArMSw0OCBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwubGFiZWxzLmltcGw7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzczsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguaW1wbC5TdGF0aWNOb2RlTGFiZWxJbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC5sYWJlbHMuTGFiZWxzUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwubGFiZWxzLlRlc3RTdGF0aWNOb2RlTGFiZWw7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIEFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5UZXN0IFN0YXRpYyBOb2RlIExhYmVsPC9iPjwvZW0+Jy4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogPHA+CisgKiA8L3A+CisgKgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgVGVzdFN0YXRpY05vZGVMYWJlbEltcGwgZXh0ZW5kcyBTdGF0aWNOb2RlTGFiZWxJbXBsIGltcGxlbWVudHMgVGVzdFN0YXRpY05vZGVMYWJlbCB7CisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIFRlc3RTdGF0aWNOb2RlTGFiZWxJbXBsKCkgeworCQlzdXBlcigpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCBFQ2xhc3MgZVN0YXRpY0NsYXNzKCkgeworCQlyZXR1cm4gTGFiZWxzUGFja2FnZS5MaXRlcmFscy5URVNUX1NUQVRJQ19OT0RFX0xBQkVMOworCX0KKworfSAvL1Rlc3RTdGF0aWNOb2RlTGFiZWxJbXBsClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3Rlc3RzL3V0aWwvbGFiZWxzL3ByZXNlbnRhdGlvbi9MYWJlbHNBY3Rpb25CYXJDb250cmlidXRvci5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3Rlc3RzL3V0aWwvbGFiZWxzL3ByZXNlbnRhdGlvbi9MYWJlbHNBY3Rpb25CYXJDb250cmlidXRvci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZhOTU3MGEKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdGVzdHMvdXRpbC9sYWJlbHMvcHJlc2VudGF0aW9uL0xhYmVsc0FjdGlvbkJhckNvbnRyaWJ1dG9yLmphdmEKQEAgLTAsMCArMSw0MzAgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsLmxhYmVscy5wcmVzZW50YXRpb247CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udWkudmlld2VyLklWaWV3ZXJQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5kb21haW4uRWRpdGluZ0RvbWFpbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5kb21haW4uSUVkaXRpbmdEb21haW5Qcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5hY3Rpb24uQ29udHJvbEFjdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5hY3Rpb24uQ3JlYXRlQ2hpbGRBY3Rpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkuYWN0aW9uLkNyZWF0ZVNpYmxpbmdBY3Rpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkuYWN0aW9uLkVkaXRpbmdEb21haW5BY3Rpb25CYXJDb250cmlidXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5hY3Rpb24uTG9hZFJlc291cmNlQWN0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmFjdGlvbi5WYWxpZGF0ZUFjdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uQWN0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5BY3Rpb25Db250cmlidXRpb25JdGVtOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JQWN0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JQ29udHJpYnV0aW9uSXRlbTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSUNvbnRyaWJ1dGlvbk1hbmFnZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklNZW51TGlzdGVuZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklNZW51TWFuYWdlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSVRvb2xCYXJNYW5hZ2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5NZW51TWFuYWdlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uU2VwYXJhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5TdWJDb250cmlidXRpb25JdGVtOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU3RydWN0dXJlZFNlbGVjdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlNlbGVjdGlvbkNoYW5nZWRFdmVudDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlZpZXdlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwuZGVjb3JhdG9ycy5wcm92aWRlci5UZXN0dXRpbGl0eUVkaXRQbHVnaW47CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuSUVkaXRvclBhcnQ7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuUGFydEluaXRFeGNlcHRpb247CisKKy8qKgorICogVGhpcyBpcyB0aGUgYWN0aW9uIGJhciBjb250cmlidXRvciBmb3IgdGhlIExhYmVscyBtb2RlbCBlZGl0b3IuCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBMYWJlbHNBY3Rpb25CYXJDb250cmlidXRvcgorCWV4dGVuZHMgRWRpdGluZ0RvbWFpbkFjdGlvbkJhckNvbnRyaWJ1dG9yCisJaW1wbGVtZW50cyBJU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyIHsKKwkvKioKKwkgKiBUaGlzIGtlZXBzIHRyYWNrIG9mIHRoZSBhY3RpdmUgZWRpdG9yLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBJRWRpdG9yUGFydCBhY3RpdmVFZGl0b3JQYXJ0OworCisJLyoqCisJICogVGhpcyBrZWVwcyB0cmFjayBvZiB0aGUgY3VycmVudCBzZWxlY3Rpb24gcHJvdmlkZXIuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIElTZWxlY3Rpb25Qcm92aWRlciBzZWxlY3Rpb25Qcm92aWRlcjsKKworCS8qKgorCSAqIFRoaXMgYWN0aW9uIG9wZW5zIHRoZSBQcm9wZXJ0aWVzIHZpZXcuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIElBY3Rpb24gc2hvd1Byb3BlcnRpZXNWaWV3QWN0aW9uID0KKwkJbmV3IEFjdGlvbihUZXN0dXRpbGl0eUVkaXRQbHVnaW4uSU5TVEFOQ0UuZ2V0U3RyaW5nKCJfVUlfU2hvd1Byb3BlcnRpZXNWaWV3X21lbnVfaXRlbSIpKSAvLyROT04tTkxTLTEkCisJCXsKKwkJCUBPdmVycmlkZQorCQkJcHVibGljIHZvaWQgcnVuKCkgeworCQkJCXRyeSB7CisJCQkJCWdldFBhZ2UoKS5zaG93Vmlldygib3JnLmVjbGlwc2UudWkudmlld3MuUHJvcGVydHlTaGVldCIpOyAvLyROT04tTkxTLTEkCisJCQkJfQorCQkJCWNhdGNoIChQYXJ0SW5pdEV4Y2VwdGlvbiBleGNlcHRpb24pIHsKKwkJCQkJVGVzdHV0aWxpdHlFZGl0UGx1Z2luLklOU1RBTkNFLmxvZyhleGNlcHRpb24pOworCQkJCX0KKwkJCX0KKwkJfTsKKworCS8qKgorCSAqIFRoaXMgYWN0aW9uIHJlZnJlc2hlcyB0aGUgdmlld2VyIG9mIHRoZSBjdXJyZW50IGVkaXRvciBpZiB0aGUgZWRpdG9yCisJICogaW1wbGVtZW50cyB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51aS52aWV3ZXIuSVZpZXdlclByb3ZpZGVyfS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgSUFjdGlvbiByZWZyZXNoVmlld2VyQWN0aW9uID0KKwkJbmV3IEFjdGlvbihUZXN0dXRpbGl0eUVkaXRQbHVnaW4uSU5TVEFOQ0UuZ2V0U3RyaW5nKCJfVUlfUmVmcmVzaFZpZXdlcl9tZW51X2l0ZW0iKSkgLy8kTk9OLU5MUy0xJAorCQl7CisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyBib29sZWFuIGlzRW5hYmxlZCgpIHsKKwkJCQlyZXR1cm4gYWN0aXZlRWRpdG9yUGFydCBpbnN0YW5jZW9mIElWaWV3ZXJQcm92aWRlcjsKKwkJCX0KKworCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgdm9pZCBydW4oKSB7CisJCQkJaWYgKGFjdGl2ZUVkaXRvclBhcnQgaW5zdGFuY2VvZiBJVmlld2VyUHJvdmlkZXIpIHsKKwkJCQkJVmlld2VyIHZpZXdlciA9ICgoSVZpZXdlclByb3ZpZGVyKWFjdGl2ZUVkaXRvclBhcnQpLmdldFZpZXdlcigpOworCQkJCQlpZiAodmlld2VyICE9IG51bGwpIHsKKwkJCQkJCXZpZXdlci5yZWZyZXNoKCk7CisJCQkJCX0KKwkJCQl9CisJCQl9CisJCX07CisKKwkvKioKKwkgKiBUaGlzIHdpbGwgY29udGFpbiBvbmUge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmFjdGlvbi5DcmVhdGVDaGlsZEFjdGlvbn0gY29ycmVzcG9uZGluZyB0byBlYWNoIGRlc2NyaXB0b3IKKwkgKiBnZW5lcmF0ZWQgZm9yIHRoZSBjdXJyZW50IHNlbGVjdGlvbiBieSB0aGUgaXRlbSBwcm92aWRlci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgQ29sbGVjdGlvbjxJQWN0aW9uPiBjcmVhdGVDaGlsZEFjdGlvbnM7CisKKwkvKioKKwkgKiBUaGlzIGlzIHRoZSBtZW51IG1hbmFnZXIgaW50byB3aGljaCBtZW51IGNvbnRyaWJ1dGlvbiBpdGVtcyBzaG91bGQgYmUgYWRkZWQgZm9yIENyZWF0ZUNoaWxkIGFjdGlvbnMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIElNZW51TWFuYWdlciBjcmVhdGVDaGlsZE1lbnVNYW5hZ2VyOworCisJLyoqCisJICogVGhpcyB3aWxsIGNvbnRhaW4gb25lIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5hY3Rpb24uQ3JlYXRlU2libGluZ0FjdGlvbn0gY29ycmVzcG9uZGluZyB0byBlYWNoIGRlc2NyaXB0b3IKKwkgKiBnZW5lcmF0ZWQgZm9yIHRoZSBjdXJyZW50IHNlbGVjdGlvbiBieSB0aGUgaXRlbSBwcm92aWRlci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgQ29sbGVjdGlvbjxJQWN0aW9uPiBjcmVhdGVTaWJsaW5nQWN0aW9uczsKKworCS8qKgorCSAqIFRoaXMgaXMgdGhlIG1lbnUgbWFuYWdlciBpbnRvIHdoaWNoIG1lbnUgY29udHJpYnV0aW9uIGl0ZW1zIHNob3VsZCBiZSBhZGRlZCBmb3IgQ3JlYXRlU2libGluZyBhY3Rpb25zLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBJTWVudU1hbmFnZXIgY3JlYXRlU2libGluZ01lbnVNYW5hZ2VyOworCisJLyoqCisJICogVGhpcyBjcmVhdGVzIGFuIGluc3RhbmNlIG9mIHRoZSBjb250cmlidXRvci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgTGFiZWxzQWN0aW9uQmFyQ29udHJpYnV0b3IoKSB7CisJCXN1cGVyKEFERElUSU9OU19MQVNUX1NUWUxFKTsKKwkJbG9hZFJlc291cmNlQWN0aW9uID0gbmV3IExvYWRSZXNvdXJjZUFjdGlvbigpOworCQl2YWxpZGF0ZUFjdGlvbiA9IG5ldyBWYWxpZGF0ZUFjdGlvbigpOworCQljb250cm9sQWN0aW9uID0gbmV3IENvbnRyb2xBY3Rpb24oKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFkZHMgU2VwYXJhdG9ycyBmb3IgZWRpdG9yIGFkZGl0aW9ucyB0byB0aGUgdG9vbCBiYXIuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgY29udHJpYnV0ZVRvVG9vbEJhcihJVG9vbEJhck1hbmFnZXIgdG9vbEJhck1hbmFnZXIpIHsKKwkJdG9vbEJhck1hbmFnZXIuYWRkKG5ldyBTZXBhcmF0b3IoImxhYmVscy1zZXR0aW5ncyIpKTsgLy8kTk9OLU5MUy0xJAorCQl0b29sQmFyTWFuYWdlci5hZGQobmV3IFNlcGFyYXRvcigibGFiZWxzLWFkZGl0aW9ucyIpKTsgLy8kTk9OLU5MUy0xJAorCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyB0byB0aGUgbWVudSBiYXIgYSBtZW51IGFuZCBzb21lIHNlcGFyYXRvcnMgZm9yIGVkaXRvciBhZGRpdGlvbnMsCisJICogYXMgd2VsbCBhcyB0aGUgc3ViLW1lbnVzIGZvciBvYmplY3QgY3JlYXRpb24gaXRlbXMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgY29udHJpYnV0ZVRvTWVudShJTWVudU1hbmFnZXIgbWVudU1hbmFnZXIpIHsKKwkJc3VwZXIuY29udHJpYnV0ZVRvTWVudShtZW51TWFuYWdlcik7CisKKwkJSU1lbnVNYW5hZ2VyIHN1Ym1lbnVNYW5hZ2VyID0gbmV3IE1lbnVNYW5hZ2VyKFRlc3R1dGlsaXR5RWRpdFBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoIl9VSV9MYWJlbHNFZGl0b3JfbWVudSIpLCAib3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsLmxhYmVsc01lbnVJRCIpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKKwkJbWVudU1hbmFnZXIuaW5zZXJ0QWZ0ZXIoImFkZGl0aW9ucyIsIHN1Ym1lbnVNYW5hZ2VyKTsgLy8kTk9OLU5MUy0xJAorCQlzdWJtZW51TWFuYWdlci5hZGQobmV3IFNlcGFyYXRvcigic2V0dGluZ3MiKSk7IC8vJE5PTi1OTFMtMSQKKwkJc3VibWVudU1hbmFnZXIuYWRkKG5ldyBTZXBhcmF0b3IoImFjdGlvbnMiKSk7IC8vJE5PTi1OTFMtMSQKKwkJc3VibWVudU1hbmFnZXIuYWRkKG5ldyBTZXBhcmF0b3IoImFkZGl0aW9ucyIpKTsgLy8kTk9OLU5MUy0xJAorCQlzdWJtZW51TWFuYWdlci5hZGQobmV3IFNlcGFyYXRvcigiYWRkaXRpb25zLWVuZCIpKTsgLy8kTk9OLU5MUy0xJAorCisJCS8vIFByZXBhcmUgZm9yIENyZWF0ZUNoaWxkIGl0ZW0gYWRkaXRpb24gb3IgcmVtb3ZhbC4KKwkJLy8KKwkJY3JlYXRlQ2hpbGRNZW51TWFuYWdlciA9IG5ldyBNZW51TWFuYWdlcihUZXN0dXRpbGl0eUVkaXRQbHVnaW4uSU5TVEFOQ0UuZ2V0U3RyaW5nKCJfVUlfQ3JlYXRlQ2hpbGRfbWVudV9pdGVtIikpOyAvLyROT04tTkxTLTEkCisJCXN1Ym1lbnVNYW5hZ2VyLmluc2VydEJlZm9yZSgiYWRkaXRpb25zIiwgY3JlYXRlQ2hpbGRNZW51TWFuYWdlcik7IC8vJE5PTi1OTFMtMSQKKworCQkvLyBQcmVwYXJlIGZvciBDcmVhdGVTaWJsaW5nIGl0ZW0gYWRkaXRpb24gb3IgcmVtb3ZhbC4KKwkJLy8KKwkJY3JlYXRlU2libGluZ01lbnVNYW5hZ2VyID0gbmV3IE1lbnVNYW5hZ2VyKFRlc3R1dGlsaXR5RWRpdFBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoIl9VSV9DcmVhdGVTaWJsaW5nX21lbnVfaXRlbSIpKTsgLy8kTk9OLU5MUy0xJAorCQlzdWJtZW51TWFuYWdlci5pbnNlcnRCZWZvcmUoImFkZGl0aW9ucyIsIGNyZWF0ZVNpYmxpbmdNZW51TWFuYWdlcik7IC8vJE5PTi1OTFMtMSQKKworCQkvLyBGb3JjZSBhbiB1cGRhdGUgYmVjYXVzZSBFY2xpcHNlIGhpZGVzIGVtcHR5IG1lbnVzIG5vdy4KKwkJLy8KKwkJc3VibWVudU1hbmFnZXIuYWRkTWVudUxpc3RlbmVyCisJCQkobmV3IElNZW51TGlzdGVuZXIoKSB7CisJCQkJIHB1YmxpYyB2b2lkIG1lbnVBYm91dFRvU2hvdyhJTWVudU1hbmFnZXIgbWVudU1hbmFnZXIpIHsKKwkJCQkJIG1lbnVNYW5hZ2VyLnVwZGF0ZUFsbCh0cnVlKTsKKwkJCQkgfQorCQkJIH0pOworCisJCWFkZEdsb2JhbEFjdGlvbnMoc3VibWVudU1hbmFnZXIpOworCX0KKworCS8qKgorCSAqIFdoZW4gdGhlIGFjdGl2ZSBlZGl0b3IgY2hhbmdlcywgdGhpcyByZW1lbWJlcnMgdGhlIGNoYW5nZSBhbmQgcmVnaXN0ZXJzIHdpdGggaXQgYXMgYSBzZWxlY3Rpb24gcHJvdmlkZXIuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgc2V0QWN0aXZlRWRpdG9yKElFZGl0b3JQYXJ0IHBhcnQpIHsKKwkJc3VwZXIuc2V0QWN0aXZlRWRpdG9yKHBhcnQpOworCQlhY3RpdmVFZGl0b3JQYXJ0ID0gcGFydDsKKworCQkvLyBTd2l0Y2ggdG8gdGhlIG5ldyBzZWxlY3Rpb24gcHJvdmlkZXIuCisJCS8vCisJCWlmIChzZWxlY3Rpb25Qcm92aWRlciAhPSBudWxsKSB7CisJCQlzZWxlY3Rpb25Qcm92aWRlci5yZW1vdmVTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIodGhpcyk7CisJCX0KKwkJaWYgKHBhcnQgPT0gbnVsbCkgeworCQkJc2VsZWN0aW9uUHJvdmlkZXIgPSBudWxsOworCQl9CisJCWVsc2UgeworCQkJc2VsZWN0aW9uUHJvdmlkZXIgPSBwYXJ0LmdldFNpdGUoKS5nZXRTZWxlY3Rpb25Qcm92aWRlcigpOworCQkJc2VsZWN0aW9uUHJvdmlkZXIuYWRkU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyKHRoaXMpOworCisJCQkvLyBGYWtlIGEgc2VsZWN0aW9uIGNoYW5nZWQgZXZlbnQgdG8gdXBkYXRlIHRoZSBtZW51cy4KKwkJCS8vCisJCQlpZiAoc2VsZWN0aW9uUHJvdmlkZXIuZ2V0U2VsZWN0aW9uKCkgIT0gbnVsbCkgeworCQkJCXNlbGVjdGlvbkNoYW5nZWQobmV3IFNlbGVjdGlvbkNoYW5nZWRFdmVudChzZWxlY3Rpb25Qcm92aWRlciwgc2VsZWN0aW9uUHJvdmlkZXIuZ2V0U2VsZWN0aW9uKCkpKTsKKwkJCX0KKwkJfQorCX0KKworCS8qKgorCSAqIFRoaXMgaW1wbGVtZW50cyB7QGxpbmsgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyfSwKKwkgKiBoYW5kbGluZyB7QGxpbmsgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5TZWxlY3Rpb25DaGFuZ2VkRXZlbnR9cyBieSBxdWVyeWluZyBmb3IgdGhlIGNoaWxkcmVuIGFuZCBzaWJsaW5ncworCSAqIHRoYXQgY2FuIGJlIGFkZGVkIHRvIHRoZSBzZWxlY3RlZCBvYmplY3QgYW5kIHVwZGF0aW5nIHRoZSBtZW51cyBhY2NvcmRpbmdseS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZWxlY3Rpb25DaGFuZ2VkKFNlbGVjdGlvbkNoYW5nZWRFdmVudCBldmVudCkgeworCQkvLyBSZW1vdmUgYW55IG1lbnUgaXRlbXMgZm9yIG9sZCBzZWxlY3Rpb24uCisJCS8vCisJCWlmIChjcmVhdGVDaGlsZE1lbnVNYW5hZ2VyICE9IG51bGwpIHsKKwkJCWRlcG9wdWxhdGVNYW5hZ2VyKGNyZWF0ZUNoaWxkTWVudU1hbmFnZXIsIGNyZWF0ZUNoaWxkQWN0aW9ucyk7CisJCX0KKwkJaWYgKGNyZWF0ZVNpYmxpbmdNZW51TWFuYWdlciAhPSBudWxsKSB7CisJCQlkZXBvcHVsYXRlTWFuYWdlcihjcmVhdGVTaWJsaW5nTWVudU1hbmFnZXIsIGNyZWF0ZVNpYmxpbmdBY3Rpb25zKTsKKwkJfQorCisJCS8vIFF1ZXJ5IHRoZSBuZXcgc2VsZWN0aW9uIGZvciBhcHByb3ByaWF0ZSBuZXcgY2hpbGQvc2libGluZyBkZXNjcmlwdG9ycworCQkvLworCQlDb2xsZWN0aW9uPD8+IG5ld0NoaWxkRGVzY3JpcHRvcnMgPSBudWxsOworCQlDb2xsZWN0aW9uPD8+IG5ld1NpYmxpbmdEZXNjcmlwdG9ycyA9IG51bGw7CisKKwkJSVNlbGVjdGlvbiBzZWxlY3Rpb24gPSBldmVudC5nZXRTZWxlY3Rpb24oKTsKKwkJaWYgKHNlbGVjdGlvbiBpbnN0YW5jZW9mIElTdHJ1Y3R1cmVkU2VsZWN0aW9uICYmICgoSVN0cnVjdHVyZWRTZWxlY3Rpb24pc2VsZWN0aW9uKS5zaXplKCkgPT0gMSkgeworCQkJT2JqZWN0IG9iamVjdCA9ICgoSVN0cnVjdHVyZWRTZWxlY3Rpb24pc2VsZWN0aW9uKS5nZXRGaXJzdEVsZW1lbnQoKTsKKworCQkJRWRpdGluZ0RvbWFpbiBkb21haW4gPSAoKElFZGl0aW5nRG9tYWluUHJvdmlkZXIpYWN0aXZlRWRpdG9yUGFydCkuZ2V0RWRpdGluZ0RvbWFpbigpOworCisJCQluZXdDaGlsZERlc2NyaXB0b3JzID0gZG9tYWluLmdldE5ld0NoaWxkRGVzY3JpcHRvcnMob2JqZWN0LCBudWxsKTsKKwkJCW5ld1NpYmxpbmdEZXNjcmlwdG9ycyA9IGRvbWFpbi5nZXROZXdDaGlsZERlc2NyaXB0b3JzKG51bGwsIG9iamVjdCk7CisJCX0KKworCQkvLyBHZW5lcmF0ZSBhY3Rpb25zIGZvciBzZWxlY3Rpb247IHBvcHVsYXRlIGFuZCByZWRyYXcgdGhlIG1lbnVzLgorCQkvLworCQljcmVhdGVDaGlsZEFjdGlvbnMgPSBnZW5lcmF0ZUNyZWF0ZUNoaWxkQWN0aW9ucyhuZXdDaGlsZERlc2NyaXB0b3JzLCBzZWxlY3Rpb24pOworCQljcmVhdGVTaWJsaW5nQWN0aW9ucyA9IGdlbmVyYXRlQ3JlYXRlU2libGluZ0FjdGlvbnMobmV3U2libGluZ0Rlc2NyaXB0b3JzLCBzZWxlY3Rpb24pOworCisJCWlmIChjcmVhdGVDaGlsZE1lbnVNYW5hZ2VyICE9IG51bGwpIHsKKwkJCXBvcHVsYXRlTWFuYWdlcihjcmVhdGVDaGlsZE1lbnVNYW5hZ2VyLCBjcmVhdGVDaGlsZEFjdGlvbnMsIG51bGwpOworCQkJY3JlYXRlQ2hpbGRNZW51TWFuYWdlci51cGRhdGUodHJ1ZSk7CisJCX0KKwkJaWYgKGNyZWF0ZVNpYmxpbmdNZW51TWFuYWdlciAhPSBudWxsKSB7CisJCQlwb3B1bGF0ZU1hbmFnZXIoY3JlYXRlU2libGluZ01lbnVNYW5hZ2VyLCBjcmVhdGVTaWJsaW5nQWN0aW9ucywgbnVsbCk7CisJCQljcmVhdGVTaWJsaW5nTWVudU1hbmFnZXIudXBkYXRlKHRydWUpOworCQl9CisJfQorCisJLyoqCisJICogVGhpcyBnZW5lcmF0ZXMgYSB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkuYWN0aW9uLkNyZWF0ZUNoaWxkQWN0aW9ufSBmb3IgZWFjaCBvYmplY3QgaW4gPGNvZGU+ZGVzY3JpcHRvcnM8L2NvZGU+LAorCSAqIGFuZCByZXR1cm5zIHRoZSBjb2xsZWN0aW9uIG9mIHRoZXNlIGFjdGlvbnMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIENvbGxlY3Rpb248SUFjdGlvbj4gZ2VuZXJhdGVDcmVhdGVDaGlsZEFjdGlvbnMoQ29sbGVjdGlvbjw/PiBkZXNjcmlwdG9ycywgSVNlbGVjdGlvbiBzZWxlY3Rpb24pIHsKKwkJQ29sbGVjdGlvbjxJQWN0aW9uPiBhY3Rpb25zID0gbmV3IEFycmF5TGlzdDxJQWN0aW9uPigpOworCQlpZiAoZGVzY3JpcHRvcnMgIT0gbnVsbCkgeworCQkJZm9yIChPYmplY3QgZGVzY3JpcHRvciA6IGRlc2NyaXB0b3JzKSB7CisJCQkJYWN0aW9ucy5hZGQobmV3IENyZWF0ZUNoaWxkQWN0aW9uKGFjdGl2ZUVkaXRvclBhcnQsIHNlbGVjdGlvbiwgZGVzY3JpcHRvcikpOworCQkJfQorCQl9CisJCXJldHVybiBhY3Rpb25zOworCX0KKworCS8qKgorCSAqIFRoaXMgZ2VuZXJhdGVzIGEge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmFjdGlvbi5DcmVhdGVTaWJsaW5nQWN0aW9ufSBmb3IgZWFjaCBvYmplY3QgaW4gPGNvZGU+ZGVzY3JpcHRvcnM8L2NvZGU+LAorCSAqIGFuZCByZXR1cm5zIHRoZSBjb2xsZWN0aW9uIG9mIHRoZXNlIGFjdGlvbnMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIENvbGxlY3Rpb248SUFjdGlvbj4gZ2VuZXJhdGVDcmVhdGVTaWJsaW5nQWN0aW9ucyhDb2xsZWN0aW9uPD8+IGRlc2NyaXB0b3JzLCBJU2VsZWN0aW9uIHNlbGVjdGlvbikgeworCQlDb2xsZWN0aW9uPElBY3Rpb24+IGFjdGlvbnMgPSBuZXcgQXJyYXlMaXN0PElBY3Rpb24+KCk7CisJCWlmIChkZXNjcmlwdG9ycyAhPSBudWxsKSB7CisJCQlmb3IgKE9iamVjdCBkZXNjcmlwdG9yIDogZGVzY3JpcHRvcnMpIHsKKwkJCQlhY3Rpb25zLmFkZChuZXcgQ3JlYXRlU2libGluZ0FjdGlvbihhY3RpdmVFZGl0b3JQYXJ0LCBzZWxlY3Rpb24sIGRlc2NyaXB0b3IpKTsKKwkJCX0KKwkJfQorCQlyZXR1cm4gYWN0aW9uczsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHBvcHVsYXRlcyB0aGUgc3BlY2lmaWVkIDxjb2RlPm1hbmFnZXI8L2NvZGU+IHdpdGgge0BsaW5rIG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5BY3Rpb25Db250cmlidXRpb25JdGVtfXMKKwkgKiBiYXNlZCBvbiB0aGUge0BsaW5rIG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JQWN0aW9ufXMgY29udGFpbmVkIGluIHRoZSA8Y29kZT5hY3Rpb25zPC9jb2RlPiBjb2xsZWN0aW9uLAorCSAqIGJ5IGluc2VydGluZyB0aGVtIGJlZm9yZSB0aGUgc3BlY2lmaWVkIGNvbnRyaWJ1dGlvbiBpdGVtIDxjb2RlPmNvbnRyaWJ1dGlvbklEPC9jb2RlPi4KKwkgKiBJZiA8Y29kZT5jb250cmlidXRpb25JRDwvY29kZT4gaXMgPGNvZGU+bnVsbDwvY29kZT4sIHRoZXkgYXJlIHNpbXBseSBhZGRlZC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBwb3B1bGF0ZU1hbmFnZXIoSUNvbnRyaWJ1dGlvbk1hbmFnZXIgbWFuYWdlciwgQ29sbGVjdGlvbjw/IGV4dGVuZHMgSUFjdGlvbj4gYWN0aW9ucywgU3RyaW5nIGNvbnRyaWJ1dGlvbklEKSB7CisJCWlmIChhY3Rpb25zICE9IG51bGwpIHsKKwkJCWZvciAoSUFjdGlvbiBhY3Rpb24gOiBhY3Rpb25zKSB7CisJCQkJaWYgKGNvbnRyaWJ1dGlvbklEICE9IG51bGwpIHsKKwkJCQkJbWFuYWdlci5pbnNlcnRCZWZvcmUoY29udHJpYnV0aW9uSUQsIGFjdGlvbik7CisJCQkJfQorCQkJCWVsc2UgeworCQkJCQltYW5hZ2VyLmFkZChhY3Rpb24pOworCQkJCX0KKwkJCX0KKwkJfQorCX0KKwkJCisJLyoqCisJICogVGhpcyByZW1vdmVzIGZyb20gdGhlIHNwZWNpZmllZCA8Y29kZT5tYW5hZ2VyPC9jb2RlPiBhbGwge0BsaW5rIG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5BY3Rpb25Db250cmlidXRpb25JdGVtfXMKKwkgKiBiYXNlZCBvbiB0aGUge0BsaW5rIG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JQWN0aW9ufXMgY29udGFpbmVkIGluIHRoZSA8Y29kZT5hY3Rpb25zPC9jb2RlPiBjb2xsZWN0aW9uLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIGRlcG9wdWxhdGVNYW5hZ2VyKElDb250cmlidXRpb25NYW5hZ2VyIG1hbmFnZXIsIENvbGxlY3Rpb248PyBleHRlbmRzIElBY3Rpb24+IGFjdGlvbnMpIHsKKwkJaWYgKGFjdGlvbnMgIT0gbnVsbCkgeworCQkJSUNvbnRyaWJ1dGlvbkl0ZW1bXSBpdGVtcyA9IG1hbmFnZXIuZ2V0SXRlbXMoKTsKKwkJCWZvciAoaW50IGkgPSAwOyBpIDwgaXRlbXMubGVuZ3RoOyBpKyspIHsKKwkJCQkvLyBMb29rIGludG8gU3ViQ29udHJpYnV0aW9uSXRlbXMKKwkJCQkvLworCQkJCUlDb250cmlidXRpb25JdGVtIGNvbnRyaWJ1dGlvbkl0ZW0gPSBpdGVtc1tpXTsKKwkJCQl3aGlsZSAoY29udHJpYnV0aW9uSXRlbSBpbnN0YW5jZW9mIFN1YkNvbnRyaWJ1dGlvbkl0ZW0pIHsKKwkJCQkJY29udHJpYnV0aW9uSXRlbSA9ICgoU3ViQ29udHJpYnV0aW9uSXRlbSljb250cmlidXRpb25JdGVtKS5nZXRJbm5lckl0ZW0oKTsKKwkJCQl9CisKKwkJCQkvLyBEZWxldGUgdGhlIEFjdGlvbkNvbnRyaWJ1dGlvbkl0ZW1zIHdpdGggbWF0Y2hpbmcgYWN0aW9uLgorCQkJCS8vCisJCQkJaWYgKGNvbnRyaWJ1dGlvbkl0ZW0gaW5zdGFuY2VvZiBBY3Rpb25Db250cmlidXRpb25JdGVtKSB7CisJCQkJCUlBY3Rpb24gYWN0aW9uID0gKChBY3Rpb25Db250cmlidXRpb25JdGVtKWNvbnRyaWJ1dGlvbkl0ZW0pLmdldEFjdGlvbigpOworCQkJCQlpZiAoYWN0aW9ucy5jb250YWlucyhhY3Rpb24pKSB7CisJCQkJCQltYW5hZ2VyLnJlbW92ZShjb250cmlidXRpb25JdGVtKTsKKwkJCQkJfQorCQkJCX0KKwkJCX0KKwkJfQorCX0KKworCS8qKgorCSAqIFRoaXMgcG9wdWxhdGVzIHRoZSBwb3AtdXAgbWVudSBiZWZvcmUgaXQgYXBwZWFycy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBtZW51QWJvdXRUb1Nob3coSU1lbnVNYW5hZ2VyIG1lbnVNYW5hZ2VyKSB7CisJCXN1cGVyLm1lbnVBYm91dFRvU2hvdyhtZW51TWFuYWdlcik7CisJCU1lbnVNYW5hZ2VyIHN1Ym1lbnVNYW5hZ2VyID0gbnVsbDsKKworCQlzdWJtZW51TWFuYWdlciA9IG5ldyBNZW51TWFuYWdlcihUZXN0dXRpbGl0eUVkaXRQbHVnaW4uSU5TVEFOQ0UuZ2V0U3RyaW5nKCJfVUlfQ3JlYXRlQ2hpbGRfbWVudV9pdGVtIikpOyAvLyROT04tTkxTLTEkCisJCXBvcHVsYXRlTWFuYWdlcihzdWJtZW51TWFuYWdlciwgY3JlYXRlQ2hpbGRBY3Rpb25zLCBudWxsKTsKKwkJbWVudU1hbmFnZXIuaW5zZXJ0QmVmb3JlKCJlZGl0Iiwgc3VibWVudU1hbmFnZXIpOyAvLyROT04tTkxTLTEkCisKKwkJc3VibWVudU1hbmFnZXIgPSBuZXcgTWVudU1hbmFnZXIoVGVzdHV0aWxpdHlFZGl0UGx1Z2luLklOU1RBTkNFLmdldFN0cmluZygiX1VJX0NyZWF0ZVNpYmxpbmdfbWVudV9pdGVtIikpOyAvLyROT04tTkxTLTEkCisJCXBvcHVsYXRlTWFuYWdlcihzdWJtZW51TWFuYWdlciwgY3JlYXRlU2libGluZ0FjdGlvbnMsIG51bGwpOworCQltZW51TWFuYWdlci5pbnNlcnRCZWZvcmUoImVkaXQiLCBzdWJtZW51TWFuYWdlcik7IC8vJE5PTi1OTFMtMSQKKwl9CisKKwkvKioKKwkgKiBUaGlzIGluc2VydHMgZ2xvYmFsIGFjdGlvbnMgYmVmb3JlIHRoZSAiYWRkaXRpb25zLWVuZCIgc2VwYXJhdG9yLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIGFkZEdsb2JhbEFjdGlvbnMoSU1lbnVNYW5hZ2VyIG1lbnVNYW5hZ2VyKSB7CisJCW1lbnVNYW5hZ2VyLmluc2VydEFmdGVyKCJhZGRpdGlvbnMtZW5kIiwgbmV3IFNlcGFyYXRvcigidWktYWN0aW9ucyIpKTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCisJCW1lbnVNYW5hZ2VyLmluc2VydEFmdGVyKCJ1aS1hY3Rpb25zIiwgc2hvd1Byb3BlcnRpZXNWaWV3QWN0aW9uKTsgLy8kTk9OLU5MUy0xJAorCisJCXJlZnJlc2hWaWV3ZXJBY3Rpb24uc2V0RW5hYmxlZChyZWZyZXNoVmlld2VyQWN0aW9uLmlzRW5hYmxlZCgpKTsJCQorCQltZW51TWFuYWdlci5pbnNlcnRBZnRlcigidWktYWN0aW9ucyIsIHJlZnJlc2hWaWV3ZXJBY3Rpb24pOyAvLyROT04tTkxTLTEkCisKKwkJc3VwZXIuYWRkR2xvYmFsQWN0aW9ucyhtZW51TWFuYWdlcik7CisJfQorCisJLyoqCisJICogVGhpcyBlbnN1cmVzIHRoYXQgYSBkZWxldGUgYWN0aW9uIHdpbGwgY2xlYW4gdXAgYWxsIHJlZmVyZW5jZXMgdG8gZGVsZXRlZCBvYmplY3RzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCBib29sZWFuIHJlbW92ZUFsbFJlZmVyZW5jZXNPbkRlbGV0ZSgpIHsKKwkJcmV0dXJuIHRydWU7CisJfQorCit9CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdGVzdHMvdXRpbC9sYWJlbHMvcHJlc2VudGF0aW9uL0xhYmVsc0VkaXRvci5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3Rlc3RzL3V0aWwvbGFiZWxzL3ByZXNlbnRhdGlvbi9MYWJlbHNFZGl0b3IuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYmRmNjYyCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3Rlc3RzL3V0aWwvbGFiZWxzL3ByZXNlbnRhdGlvbi9MYWJlbHNFZGl0b3IuamF2YQpAQCAtMCwwICsxLDE1MDQgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsLmxhYmVscy5wcmVzZW50YXRpb247CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtOworaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7CitpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247CitpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb25zOworaW1wb3J0IGphdmEudXRpbC5FdmVudE9iamVjdDsKK2ltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKK2ltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7CitpbXBvcnQgamF2YS51dGlsLkxpbmtlZEhhc2hNYXA7CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CitpbXBvcnQgamF2YS51dGlsLk1hcDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklGaWxlOworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklNYXJrZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVJlc291cmNlOworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklSZXNvdXJjZUNoYW5nZUV2ZW50OworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklSZXNvdXJjZUNoYW5nZUxpc3RlbmVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklSZXNvdXJjZURlbHRhOworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklSZXNvdXJjZURlbHRhVmlzaXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5SZXNvdXJjZXNQbHVnaW47CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkNvcmVFeGNlcHRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQYXRoOworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUHJvZ3Jlc3NNb25pdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5OdWxsUHJvZ3Jlc3NNb25pdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24uY29tbWFuZC5CYXNpY0NvbW1hbmRTdGFjazsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLmNvbW1hbmQuQ29tbWFuZDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLmNvbW1hbmQuQ29tbWFuZFN0YWNrOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24uY29tbWFuZC5Db21tYW5kU3RhY2tMaXN0ZW5lcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5BZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51aS5NYXJrZXJIZWxwZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51aS5lZGl0b3IuUHJvYmxlbUVkaXRvclBhcnQ7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51aS52aWV3ZXIuSVZpZXdlclByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5CYXNpY0RpYWdub3N0aWM7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLkRpYWdub3N0aWM7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlVSSTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRVZhbGlkYXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUucHJvdmlkZXIuRWNvcmVJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUucmVzb3VyY2UuUmVzb3VyY2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnJlc291cmNlLlJlc291cmNlU2V0OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS51dGlsLkVDb250ZW50QWRhcHRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUudXRpbC5FY29yZVV0aWw7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQuZG9tYWluLkFkYXB0ZXJGYWN0b3J5RWRpdGluZ0RvbWFpbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5kb21haW4uRWRpdGluZ0RvbWFpbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5kb21haW4uSUVkaXRpbmdEb21haW5Qcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5BZGFwdGVyRmFjdG9yeUl0ZW1EZWxlZ2F0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuQ29tcG9zZWRBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5SZWZsZWN0aXZlSXRlbVByb3ZpZGVyQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIucmVzb3VyY2UuUmVzb3VyY2VJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5hY3Rpb24uRWRpdGluZ0RvbWFpbkFjdGlvbkJhckNvbnRyaWJ1dG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmNlbGxlZGl0b3IuQWRhcHRlckZhY3RvcnlUcmVlRWRpdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmRuZC5FZGl0aW5nRG9tYWluVmlld2VyRHJvcEFkYXB0ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkuZG5kLkxvY2FsVHJhbnNmZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkuZG5kLlZpZXdlckRyYWdBZGFwdGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLnByb3ZpZGVyLkFkYXB0ZXJGYWN0b3J5Q29udGVudFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLnByb3ZpZGVyLkFkYXB0ZXJGYWN0b3J5TGFiZWxQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5wcm92aWRlci5VbndyYXBwaW5nU2VsZWN0aW9uUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkudXRpbC5FZGl0VUlNYXJrZXJIZWxwZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkudXRpbC5FZGl0VUlVdGlsOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLnZpZXcuRXh0ZW5kZWRQcm9wZXJ0eVNoZWV0UGFnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSU1lbnVMaXN0ZW5lcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSU1lbnVNYW5hZ2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JU3RhdHVzTGluZU1hbmFnZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklUb29sQmFyTWFuYWdlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uTWVudU1hbmFnZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLlNlcGFyYXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5kaWFsb2dzLk1lc3NhZ2VEaWFsb2c7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuZGlhbG9ncy5Qcm9ncmVzc01vbml0b3JEaWFsb2c7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb25Qcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTdHJ1Y3R1cmVkU2VsZWN0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuU2VsZWN0aW9uQ2hhbmdlZEV2ZW50OworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuU3RydWN0dXJlZFNlbGVjdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlN0cnVjdHVyZWRWaWV3ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5UcmVlVmlld2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuVmlld2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24ucHJvdmlkZXIuQ29tbW9uSXRlbVByb3ZpZGVyQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLnByb3ZpZGVyLkdyYXBoSXRlbVByb3ZpZGVyQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLnByb3ZpZGVyLk1vZGVsSXRlbVByb3ZpZGVyQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLnByb3ZpZGVyLk1vZGlmaWVySXRlbVByb3ZpZGVyQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNjZW5hcmlvLnByb3ZpZGVyLlNjZW5hcmlvSXRlbVByb3ZpZGVyQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNlcXVlbmNlci5wcm92aWRlci5TZXF1ZW5jZXJJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwuZGVjb3JhdG9ycy5wcm92aWRlci5EZWNvcmF0b3JzSXRlbVByb3ZpZGVyQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsLmRlY29yYXRvcnMucHJvdmlkZXIuVGVzdHV0aWxpdHlFZGl0UGx1Z2luOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC5sYWJlbHMucHJvdmlkZXIuTGFiZWxzSXRlbVByb3ZpZGVyQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LlNXVDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuY3VzdG9tLkNUYWJGb2xkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmRuZC5ETkQ7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmRuZC5UcmFuc2ZlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLkNvbnRyb2xBZGFwdGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuQ29udHJvbEV2ZW50OworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ncmFwaGljcy5Qb2ludDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuTWVudTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5UcmVlOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklBY3Rpb25CYXJzOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklFZGl0b3JJbnB1dDsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5JRWRpdG9yUGFydDsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5JRWRpdG9yU2l0ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5JUGFydExpc3RlbmVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2hQYXJ0OworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLlBhcnRJbml0RXhjZXB0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLmFjdGlvbnMuV29ya3NwYWNlTW9kaWZ5T3BlcmF0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLmRpYWxvZ3MuU2F2ZUFzRGlhbG9nOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLmlkZS5JR290b01hcmtlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5wYXJ0LkZpbGVFZGl0b3JJbnB1dDsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5wYXJ0Lk11bHRpUGFnZUVkaXRvclBhcnQ7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkudmlld3MuY29udGVudG91dGxpbmUuQ29udGVudE91dGxpbmU7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkudmlld3MuY29udGVudG91dGxpbmUuQ29udGVudE91dGxpbmVQYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLnZpZXdzLmNvbnRlbnRvdXRsaW5lLklDb250ZW50T3V0bGluZVBhZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkudmlld3MucHJvcGVydGllcy5JUHJvcGVydHlTaGVldFBhZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkudmlld3MucHJvcGVydGllcy5Qcm9wZXJ0eVNoZWV0OworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLnZpZXdzLnByb3BlcnRpZXMuUHJvcGVydHlTaGVldFBhZ2U7CisKKworLyoqCisgKiBUaGlzIGlzIGFuIGV4YW1wbGUgb2YgYSBMYWJlbHMgbW9kZWwgZWRpdG9yLgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgTGFiZWxzRWRpdG9yCisJZXh0ZW5kcyBNdWx0aVBhZ2VFZGl0b3JQYXJ0CisJaW1wbGVtZW50cyBJRWRpdGluZ0RvbWFpblByb3ZpZGVyLCBJU2VsZWN0aW9uUHJvdmlkZXIsIElNZW51TGlzdGVuZXIsIElWaWV3ZXJQcm92aWRlciwgSUdvdG9NYXJrZXIgeworCS8qKgorCSAqIFRoaXMga2VlcHMgdHJhY2sgb2YgdGhlIGVkaXRpbmcgZG9tYWluIHRoYXQgaXMgdXNlZCB0byB0cmFjayBhbGwgY2hhbmdlcyB0byB0aGUgbW9kZWwuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIEFkYXB0ZXJGYWN0b3J5RWRpdGluZ0RvbWFpbiBlZGl0aW5nRG9tYWluOworCisJLyoqCisJICogVGhpcyBpcyB0aGUgb25lIGFkYXB0ZXIgZmFjdG9yeSB1c2VkIGZvciBwcm92aWRpbmcgdmlld3Mgb2YgdGhlIG1vZGVsLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBDb21wb3NlZEFkYXB0ZXJGYWN0b3J5IGFkYXB0ZXJGYWN0b3J5OworCisJLyoqCisJICogVGhpcyBpcyB0aGUgY29udGVudCBvdXRsaW5lIHBhZ2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIElDb250ZW50T3V0bGluZVBhZ2UgY29udGVudE91dGxpbmVQYWdlOworCisJLyoqCisJICogVGhpcyBpcyBhIGtsdWRnZS4uLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBJU3RhdHVzTGluZU1hbmFnZXIgY29udGVudE91dGxpbmVTdGF0dXNMaW5lTWFuYWdlcjsKKworCS8qKgorCSAqIFRoaXMgaXMgdGhlIGNvbnRlbnQgb3V0bGluZSBwYWdlJ3Mgdmlld2VyLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBUcmVlVmlld2VyIGNvbnRlbnRPdXRsaW5lVmlld2VyOworCisJLyoqCisJICogVGhpcyBpcyB0aGUgcHJvcGVydHkgc2hlZXQgcGFnZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgUHJvcGVydHlTaGVldFBhZ2UgcHJvcGVydHlTaGVldFBhZ2U7CisKKwkvKioKKwkgKiBUaGlzIGlzIHRoZSB2aWV3ZXIgdGhhdCBzaGFkb3dzIHRoZSBzZWxlY3Rpb24gaW4gdGhlIGNvbnRlbnQgb3V0bGluZS4KKwkgKiBUaGUgcGFyZW50IHJlbGF0aW9uIG11c3QgYmUgY29ycmVjdGx5IGRlZmluZWQgZm9yIHRoaXMgdG8gd29yay4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgVHJlZVZpZXdlciBzZWxlY3Rpb25WaWV3ZXI7CisKKwkvKioKKwkgKiBUaGlzIGtlZXBzIHRyYWNrIG9mIHRoZSBhY3RpdmUgY29udGVudCB2aWV3ZXIsIHdoaWNoIG1heSBiZSBlaXRoZXIgb25lIG9mIHRoZSB2aWV3ZXJzIGluIHRoZSBwYWdlcyBvciB0aGUgY29udGVudCBvdXRsaW5lIHZpZXdlci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgVmlld2VyIGN1cnJlbnRWaWV3ZXI7CisKKwkvKioKKwkgKiBUaGlzIGxpc3RlbnMgdG8gd2hpY2ggZXZlciB2aWV3ZXIgaXMgYWN0aXZlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBJU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyIHNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcjsKKworCS8qKgorCSAqIFRoaXMga2VlcHMgdHJhY2sgb2YgYWxsIHRoZSB7QGxpbmsgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyfXMgdGhhdCBhcmUgbGlzdGVuaW5nIHRvIHRoaXMgZWRpdG9yLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBDb2xsZWN0aW9uPElTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXI+IHNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcnMgPSBuZXcgQXJyYXlMaXN0PElTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXI+KCk7CisKKwkvKioKKwkgKiBUaGlzIGtlZXBzIHRyYWNrIG9mIHRoZSBzZWxlY3Rpb24gb2YgdGhlIGVkaXRvciBhcyBhIHdob2xlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBJU2VsZWN0aW9uIGVkaXRvclNlbGVjdGlvbiA9IFN0cnVjdHVyZWRTZWxlY3Rpb24uRU1QVFk7CisKKwkvKioKKwkgKiBUaGUgTWFya2VySGVscGVyIGlzIHJlc3BvbnNpYmxlIGZvciBjcmVhdGluZyB3b3Jrc3BhY2UgcmVzb3VyY2UgbWFya2VycyBwcmVzZW50ZWQKKwkgKiBpbiBFY2xpcHNlJ3MgUHJvYmxlbXMgVmlldy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgTWFya2VySGVscGVyIG1hcmtlckhlbHBlciA9IG5ldyBFZGl0VUlNYXJrZXJIZWxwZXIoKTsKKworCS8qKgorCSAqIFRoaXMgbGlzdGVucyBmb3Igd2hlbiB0aGUgb3V0bGluZSBiZWNvbWVzIGFjdGl2ZQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBJUGFydExpc3RlbmVyIHBhcnRMaXN0ZW5lciA9CisJCW5ldyBJUGFydExpc3RlbmVyKCkgeworCQkJcHVibGljIHZvaWQgcGFydEFjdGl2YXRlZChJV29ya2JlbmNoUGFydCBwKSB7CisJCQkJaWYgKHAgaW5zdGFuY2VvZiBDb250ZW50T3V0bGluZSkgeworCQkJCQlpZiAoKChDb250ZW50T3V0bGluZSlwKS5nZXRDdXJyZW50UGFnZSgpID09IGNvbnRlbnRPdXRsaW5lUGFnZSkgeworCQkJCQkJZ2V0QWN0aW9uQmFyQ29udHJpYnV0b3IoKS5zZXRBY3RpdmVFZGl0b3IoTGFiZWxzRWRpdG9yLnRoaXMpOworCisJCQkJCQlzZXRDdXJyZW50Vmlld2VyKGNvbnRlbnRPdXRsaW5lVmlld2VyKTsKKwkJCQkJfQorCQkJCX0KKwkJCQllbHNlIGlmIChwIGluc3RhbmNlb2YgUHJvcGVydHlTaGVldCkgeworCQkJCQlpZiAoKChQcm9wZXJ0eVNoZWV0KXApLmdldEN1cnJlbnRQYWdlKCkgPT0gcHJvcGVydHlTaGVldFBhZ2UpIHsKKwkJCQkJCWdldEFjdGlvbkJhckNvbnRyaWJ1dG9yKCkuc2V0QWN0aXZlRWRpdG9yKExhYmVsc0VkaXRvci50aGlzKTsKKwkJCQkJCWhhbmRsZUFjdGl2YXRlKCk7CisJCQkJCX0KKwkJCQl9CisJCQkJZWxzZSBpZiAocCA9PSBMYWJlbHNFZGl0b3IudGhpcykgeworCQkJCQloYW5kbGVBY3RpdmF0ZSgpOworCQkJCX0KKwkJCX0KKwkJCXB1YmxpYyB2b2lkIHBhcnRCcm91Z2h0VG9Ub3AoSVdvcmtiZW5jaFBhcnQgcCkgeworCQkJCS8vIElnbm9yZS4KKwkJCX0KKwkJCXB1YmxpYyB2b2lkIHBhcnRDbG9zZWQoSVdvcmtiZW5jaFBhcnQgcCkgeworCQkJCS8vIElnbm9yZS4KKwkJCX0KKwkJCXB1YmxpYyB2b2lkIHBhcnREZWFjdGl2YXRlZChJV29ya2JlbmNoUGFydCBwKSB7CisJCQkJLy8gSWdub3JlLgorCQkJfQorCQkJcHVibGljIHZvaWQgcGFydE9wZW5lZChJV29ya2JlbmNoUGFydCBwKSB7CisJCQkJLy8gSWdub3JlLgorCQkJfQorCQl9OworCisJLyoqCisJICogUmVzb3VyY2VzIHRoYXQgaGF2ZSBiZWVuIHJlbW92ZWQgc2luY2UgbGFzdCBhY3RpdmF0aW9uLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBDb2xsZWN0aW9uPFJlc291cmNlPiByZW1vdmVkUmVzb3VyY2VzID0gbmV3IEFycmF5TGlzdDxSZXNvdXJjZT4oKTsKKworCS8qKgorCSAqIFJlc291cmNlcyB0aGF0IGhhdmUgYmVlbiBjaGFuZ2VkIHNpbmNlIGxhc3QgYWN0aXZhdGlvbi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgQ29sbGVjdGlvbjxSZXNvdXJjZT4gY2hhbmdlZFJlc291cmNlcyA9IG5ldyBBcnJheUxpc3Q8UmVzb3VyY2U+KCk7CisKKwkvKioKKwkgKiBSZXNvdXJjZXMgdGhhdCBoYXZlIGJlZW4gc2F2ZWQuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIENvbGxlY3Rpb248UmVzb3VyY2U+IHNhdmVkUmVzb3VyY2VzID0gbmV3IEFycmF5TGlzdDxSZXNvdXJjZT4oKTsKKworCS8qKgorCSAqIE1hcCB0byBzdG9yZSB0aGUgZGlhZ25vc3RpYyBhc3NvY2lhdGVkIHdpdGggYSByZXNvdXJjZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgTWFwPFJlc291cmNlLCBEaWFnbm9zdGljPiByZXNvdXJjZVRvRGlhZ25vc3RpY01hcCA9IG5ldyBMaW5rZWRIYXNoTWFwPFJlc291cmNlLCBEaWFnbm9zdGljPigpOworCisJLyoqCisJICogQ29udHJvbHMgd2hldGhlciB0aGUgcHJvYmxlbSBpbmRpY2F0aW9uIHNob3VsZCBiZSB1cGRhdGVkLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBib29sZWFuIHVwZGF0ZVByb2JsZW1JbmRpY2F0aW9uID0gdHJ1ZTsKKworCS8qKgorCSAqIEFkYXB0ZXIgdXNlZCB0byB1cGRhdGUgdGhlIHByb2JsZW0gaW5kaWNhdGlvbiB3aGVuIHJlc291cmNlcyBhcmUgZGVtYW5kZWQgbG9hZGVkLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBFQ29udGVudEFkYXB0ZXIgcHJvYmxlbUluZGljYXRpb25BZGFwdGVyID0gCisJCW5ldyBFQ29udGVudEFkYXB0ZXIoKSB7CisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyB2b2lkIG5vdGlmeUNoYW5nZWQoTm90aWZpY2F0aW9uIG5vdGlmaWNhdGlvbikgeworCQkJCWlmIChub3RpZmljYXRpb24uZ2V0Tm90aWZpZXIoKSBpbnN0YW5jZW9mIFJlc291cmNlKSB7CisJCQkJCXN3aXRjaCAobm90aWZpY2F0aW9uLmdldEZlYXR1cmVJRChSZXNvdXJjZS5jbGFzcykpIHsKKwkJCQkJCWNhc2UgUmVzb3VyY2UuUkVTT1VSQ0VfX0lTX0xPQURFRDoKKwkJCQkJCWNhc2UgUmVzb3VyY2UuUkVTT1VSQ0VfX0VSUk9SUzoKKwkJCQkJCWNhc2UgUmVzb3VyY2UuUkVTT1VSQ0VfX1dBUk5JTkdTOiB7CisJCQkJCQkJUmVzb3VyY2UgcmVzb3VyY2UgPSAoUmVzb3VyY2Upbm90aWZpY2F0aW9uLmdldE5vdGlmaWVyKCk7CisJCQkJCQkJRGlhZ25vc3RpYyBkaWFnbm9zdGljID0gYW5hbHl6ZVJlc291cmNlUHJvYmxlbXMocmVzb3VyY2UsIG51bGwpOworCQkJCQkJCWlmIChkaWFnbm9zdGljLmdldFNldmVyaXR5KCkgIT0gRGlhZ25vc3RpYy5PSykgeworCQkJCQkJCQlyZXNvdXJjZVRvRGlhZ25vc3RpY01hcC5wdXQocmVzb3VyY2UsIGRpYWdub3N0aWMpOworCQkJCQkJCX0KKwkJCQkJCQllbHNlIHsKKwkJCQkJCQkJcmVzb3VyY2VUb0RpYWdub3N0aWNNYXAucmVtb3ZlKHJlc291cmNlKTsKKwkJCQkJCQl9CisKKwkJCQkJCQlpZiAodXBkYXRlUHJvYmxlbUluZGljYXRpb24pIHsKKwkJCQkJCQkJZ2V0U2l0ZSgpLmdldFNoZWxsKCkuZ2V0RGlzcGxheSgpLmFzeW5jRXhlYworCQkJCQkJCQkJKG5ldyBSdW5uYWJsZSgpIHsKKwkJCQkJCQkJCQkgcHVibGljIHZvaWQgcnVuKCkgeworCQkJCQkJCQkJCQkgdXBkYXRlUHJvYmxlbUluZGljYXRpb24oKTsKKwkJCQkJCQkJCQkgfQorCQkJCQkJCQkJIH0pOworCQkJCQkJCX0KKwkJCQkJCQlicmVhazsKKwkJCQkJCX0KKwkJCQkJfQorCQkJCX0KKwkJCQllbHNlIHsKKwkJCQkJc3VwZXIubm90aWZ5Q2hhbmdlZChub3RpZmljYXRpb24pOworCQkJCX0KKwkJCX0KKworCQkJQE92ZXJyaWRlCisJCQlwcm90ZWN0ZWQgdm9pZCBzZXRUYXJnZXQoUmVzb3VyY2UgdGFyZ2V0KSB7CisJCQkJYmFzaWNTZXRUYXJnZXQodGFyZ2V0KTsKKwkJCX0KKworCQkJQE92ZXJyaWRlCisJCQlwcm90ZWN0ZWQgdm9pZCB1bnNldFRhcmdldChSZXNvdXJjZSB0YXJnZXQpIHsKKwkJCQliYXNpY1Vuc2V0VGFyZ2V0KHRhcmdldCk7CisJCQl9CisJCX07CisKKwkvKioKKwkgKiBUaGlzIGxpc3RlbnMgZm9yIHdvcmtzcGFjZSBjaGFuZ2VzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBJUmVzb3VyY2VDaGFuZ2VMaXN0ZW5lciByZXNvdXJjZUNoYW5nZUxpc3RlbmVyID0KKwkJbmV3IElSZXNvdXJjZUNoYW5nZUxpc3RlbmVyKCkgeworCQkJcHVibGljIHZvaWQgcmVzb3VyY2VDaGFuZ2VkKElSZXNvdXJjZUNoYW5nZUV2ZW50IGV2ZW50KSB7CisJCQkJSVJlc291cmNlRGVsdGEgZGVsdGEgPSBldmVudC5nZXREZWx0YSgpOworCQkJCXRyeSB7CisJCQkJCWNsYXNzIFJlc291cmNlRGVsdGFWaXNpdG9yIGltcGxlbWVudHMgSVJlc291cmNlRGVsdGFWaXNpdG9yIHsKKwkJCQkJCXByb3RlY3RlZCBSZXNvdXJjZVNldCByZXNvdXJjZVNldCA9IGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKTsKKwkJCQkJCXByb3RlY3RlZCBDb2xsZWN0aW9uPFJlc291cmNlPiBjaGFuZ2VkUmVzb3VyY2VzID0gbmV3IEFycmF5TGlzdDxSZXNvdXJjZT4oKTsKKwkJCQkJCXByb3RlY3RlZCBDb2xsZWN0aW9uPFJlc291cmNlPiByZW1vdmVkUmVzb3VyY2VzID0gbmV3IEFycmF5TGlzdDxSZXNvdXJjZT4oKTsKKworCQkJCQkJcHVibGljIGJvb2xlYW4gdmlzaXQoSVJlc291cmNlRGVsdGEgZGVsdGEpIHsKKwkJCQkJCQlpZiAoZGVsdGEuZ2V0UmVzb3VyY2UoKS5nZXRUeXBlKCkgPT0gSVJlc291cmNlLkZJTEUpIHsKKwkJCQkJCQkJaWYgKGRlbHRhLmdldEtpbmQoKSA9PSBJUmVzb3VyY2VEZWx0YS5SRU1PVkVEIHx8CisJCQkJCQkJCSAgICBkZWx0YS5nZXRLaW5kKCkgPT0gSVJlc291cmNlRGVsdGEuQ0hBTkdFRCAmJiBkZWx0YS5nZXRGbGFncygpICE9IElSZXNvdXJjZURlbHRhLk1BUktFUlMpIHsKKwkJCQkJCQkJCVJlc291cmNlIHJlc291cmNlID0gcmVzb3VyY2VTZXQuZ2V0UmVzb3VyY2UoVVJJLmNyZWF0ZVVSSShkZWx0YS5nZXRGdWxsUGF0aCgpLnRvU3RyaW5nKCkpLCBmYWxzZSk7CisJCQkJCQkJCQlpZiAocmVzb3VyY2UgIT0gbnVsbCkgeworCQkJCQkJCQkJCWlmIChkZWx0YS5nZXRLaW5kKCkgPT0gSVJlc291cmNlRGVsdGEuUkVNT1ZFRCkgeworCQkJCQkJCQkJCQlyZW1vdmVkUmVzb3VyY2VzLmFkZChyZXNvdXJjZSk7CisJCQkJCQkJCQkJfQorCQkJCQkJCQkJCWVsc2UgaWYgKCFzYXZlZFJlc291cmNlcy5yZW1vdmUocmVzb3VyY2UpKSB7CisJCQkJCQkJCQkJCWNoYW5nZWRSZXNvdXJjZXMuYWRkKHJlc291cmNlKTsKKwkJCQkJCQkJCQl9CisJCQkJCQkJCQl9CisJCQkJCQkJCX0KKwkJCQkJCQl9CisKKwkJCQkJCQlyZXR1cm4gdHJ1ZTsKKwkJCQkJCX0KKworCQkJCQkJcHVibGljIENvbGxlY3Rpb248UmVzb3VyY2U+IGdldENoYW5nZWRSZXNvdXJjZXMoKSB7CisJCQkJCQkJcmV0dXJuIGNoYW5nZWRSZXNvdXJjZXM7CisJCQkJCQl9CisKKwkJCQkJCXB1YmxpYyBDb2xsZWN0aW9uPFJlc291cmNlPiBnZXRSZW1vdmVkUmVzb3VyY2VzKCkgeworCQkJCQkJCXJldHVybiByZW1vdmVkUmVzb3VyY2VzOworCQkJCQkJfQorCQkJCQl9CisKKwkJCQkJUmVzb3VyY2VEZWx0YVZpc2l0b3IgdmlzaXRvciA9IG5ldyBSZXNvdXJjZURlbHRhVmlzaXRvcigpOworCQkJCQlkZWx0YS5hY2NlcHQodmlzaXRvcik7CisKKwkJCQkJaWYgKCF2aXNpdG9yLmdldFJlbW92ZWRSZXNvdXJjZXMoKS5pc0VtcHR5KCkpIHsKKwkJCQkJCXJlbW92ZWRSZXNvdXJjZXMuYWRkQWxsKHZpc2l0b3IuZ2V0UmVtb3ZlZFJlc291cmNlcygpKTsKKwkJCQkJCWlmICghaXNEaXJ0eSgpKSB7CisJCQkJCQkJZ2V0U2l0ZSgpLmdldFNoZWxsKCkuZ2V0RGlzcGxheSgpLmFzeW5jRXhlYworCQkJCQkJCQkobmV3IFJ1bm5hYmxlKCkgeworCQkJCQkJCQkJIHB1YmxpYyB2b2lkIHJ1bigpIHsKKwkJCQkJCQkJCQkgZ2V0U2l0ZSgpLmdldFBhZ2UoKS5jbG9zZUVkaXRvcihMYWJlbHNFZGl0b3IudGhpcywgZmFsc2UpOworCQkJCQkJCQkJIH0KKwkJCQkJCQkJIH0pOworCQkJCQkJfQorCQkJCQl9CisKKwkJCQkJaWYgKCF2aXNpdG9yLmdldENoYW5nZWRSZXNvdXJjZXMoKS5pc0VtcHR5KCkpIHsKKwkJCQkJCWNoYW5nZWRSZXNvdXJjZXMuYWRkQWxsKHZpc2l0b3IuZ2V0Q2hhbmdlZFJlc291cmNlcygpKTsKKwkJCQkJCWlmIChnZXRTaXRlKCkuZ2V0UGFnZSgpLmdldEFjdGl2ZUVkaXRvcigpID09IExhYmVsc0VkaXRvci50aGlzKSB7CisJCQkJCQkJZ2V0U2l0ZSgpLmdldFNoZWxsKCkuZ2V0RGlzcGxheSgpLmFzeW5jRXhlYworCQkJCQkJCQkobmV3IFJ1bm5hYmxlKCkgeworCQkJCQkJCQkJIHB1YmxpYyB2b2lkIHJ1bigpIHsKKwkJCQkJCQkJCQkgaGFuZGxlQWN0aXZhdGUoKTsKKwkJCQkJCQkJCSB9CisJCQkJCQkJCSB9KTsKKwkJCQkJCX0KKwkJCQkJfQorCQkJCX0KKwkJCQljYXRjaCAoQ29yZUV4Y2VwdGlvbiBleGNlcHRpb24pIHsKKwkJCQkJVGVzdHV0aWxpdHlFZGl0UGx1Z2luLklOU1RBTkNFLmxvZyhleGNlcHRpb24pOworCQkJCX0KKwkJCX0KKwkJfTsKKworCS8qKgorCSAqIEhhbmRsZXMgYWN0aXZhdGlvbiBvZiB0aGUgZWRpdG9yIG9yIGl0J3MgYXNzb2NpYXRlZCB2aWV3cy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBoYW5kbGVBY3RpdmF0ZSgpIHsKKwkJLy8gUmVjb21wdXRlIHRoZSByZWFkIG9ubHkgc3RhdGUuCisJCS8vCisJCWlmIChlZGl0aW5nRG9tYWluLmdldFJlc291cmNlVG9SZWFkT25seU1hcCgpICE9IG51bGwpIHsKKwkJICBlZGl0aW5nRG9tYWluLmdldFJlc291cmNlVG9SZWFkT25seU1hcCgpLmNsZWFyKCk7CisKKwkJICAvLyBSZWZyZXNoIGFueSBhY3Rpb25zIHRoYXQgbWF5IGJlY29tZSBlbmFibGVkIG9yIGRpc2FibGVkLgorCQkgIC8vCisJCSAgc2V0U2VsZWN0aW9uKGdldFNlbGVjdGlvbigpKTsKKwkJfQorCisJCWlmICghcmVtb3ZlZFJlc291cmNlcy5pc0VtcHR5KCkpIHsKKwkJCWlmIChoYW5kbGVEaXJ0eUNvbmZsaWN0KCkpIHsKKwkJCQlnZXRTaXRlKCkuZ2V0UGFnZSgpLmNsb3NlRWRpdG9yKExhYmVsc0VkaXRvci50aGlzLCBmYWxzZSk7CisJCQl9CisJCQllbHNlIHsKKwkJCQlyZW1vdmVkUmVzb3VyY2VzLmNsZWFyKCk7CisJCQkJY2hhbmdlZFJlc291cmNlcy5jbGVhcigpOworCQkJCXNhdmVkUmVzb3VyY2VzLmNsZWFyKCk7CisJCQl9CisJCX0KKwkJZWxzZSBpZiAoIWNoYW5nZWRSZXNvdXJjZXMuaXNFbXB0eSgpKSB7CisJCQljaGFuZ2VkUmVzb3VyY2VzLnJlbW92ZUFsbChzYXZlZFJlc291cmNlcyk7CisJCQloYW5kbGVDaGFuZ2VkUmVzb3VyY2VzKCk7CisJCQljaGFuZ2VkUmVzb3VyY2VzLmNsZWFyKCk7CisJCQlzYXZlZFJlc291cmNlcy5jbGVhcigpOworCQl9CisJfQorCisJLyoqCisJICogSGFuZGxlcyB3aGF0IHRvIGRvIHdpdGggY2hhbmdlZCByZXNvdXJjZXMgb24gYWN0aXZhdGlvbi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBoYW5kbGVDaGFuZ2VkUmVzb3VyY2VzKCkgeworCQlpZiAoIWNoYW5nZWRSZXNvdXJjZXMuaXNFbXB0eSgpICYmICghaXNEaXJ0eSgpIHx8IGhhbmRsZURpcnR5Q29uZmxpY3QoKSkpIHsKKwkJCWlmIChpc0RpcnR5KCkpIHsKKwkJCQljaGFuZ2VkUmVzb3VyY2VzLmFkZEFsbChlZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkuZ2V0UmVzb3VyY2VzKCkpOworCQkJfQorCQkJZWRpdGluZ0RvbWFpbi5nZXRDb21tYW5kU3RhY2soKS5mbHVzaCgpOworCisJCQl1cGRhdGVQcm9ibGVtSW5kaWNhdGlvbiA9IGZhbHNlOworCQkJZm9yIChSZXNvdXJjZSByZXNvdXJjZSA6IGNoYW5nZWRSZXNvdXJjZXMpIHsKKwkJCQlpZiAocmVzb3VyY2UuaXNMb2FkZWQoKSkgeworCQkJCQlyZXNvdXJjZS51bmxvYWQoKTsKKwkJCQkJdHJ5IHsKKwkJCQkJCXJlc291cmNlLmxvYWQoQ29sbGVjdGlvbnMuRU1QVFlfTUFQKTsKKwkJCQkJfQorCQkJCQljYXRjaCAoSU9FeGNlcHRpb24gZXhjZXB0aW9uKSB7CisJCQkJCQlpZiAoIXJlc291cmNlVG9EaWFnbm9zdGljTWFwLmNvbnRhaW5zS2V5KHJlc291cmNlKSkgeworCQkJCQkJCXJlc291cmNlVG9EaWFnbm9zdGljTWFwLnB1dChyZXNvdXJjZSwgYW5hbHl6ZVJlc291cmNlUHJvYmxlbXMocmVzb3VyY2UsIGV4Y2VwdGlvbikpOworCQkJCQkJfQorCQkJCQl9CisJCQkJfQorCQkJfQorCisJCQlpZiAoQWRhcHRlckZhY3RvcnlFZGl0aW5nRG9tYWluLmlzU3RhbGUoZWRpdG9yU2VsZWN0aW9uKSkgeworCQkJCXNldFNlbGVjdGlvbihTdHJ1Y3R1cmVkU2VsZWN0aW9uLkVNUFRZKTsKKwkJCX0KKworCQkJdXBkYXRlUHJvYmxlbUluZGljYXRpb24gPSB0cnVlOworCQkJdXBkYXRlUHJvYmxlbUluZGljYXRpb24oKTsKKwkJfQorCX0KKyAgCisJLyoqCisJICogVXBkYXRlcyB0aGUgcHJvYmxlbXMgaW5kaWNhdGlvbiB3aXRoIHRoZSBpbmZvcm1hdGlvbiBkZXNjcmliZWQgaW4gdGhlIHNwZWNpZmllZCBkaWFnbm9zdGljLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIHVwZGF0ZVByb2JsZW1JbmRpY2F0aW9uKCkgeworCQlpZiAodXBkYXRlUHJvYmxlbUluZGljYXRpb24pIHsKKwkJCUJhc2ljRGlhZ25vc3RpYyBkaWFnbm9zdGljID0KKwkJCQluZXcgQmFzaWNEaWFnbm9zdGljCisJCQkJCShEaWFnbm9zdGljLk9LLAorCQkJCQkgIm9yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbCIsIC8vJE5PTi1OTFMtMSQKKwkJCQkJIDAsCisJCQkJCSBudWxsLAorCQkJCQkgbmV3IE9iamVjdCBbXSB7IGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKSB9KTsKKwkJCWZvciAoRGlhZ25vc3RpYyBjaGlsZERpYWdub3N0aWMgOiByZXNvdXJjZVRvRGlhZ25vc3RpY01hcC52YWx1ZXMoKSkgeworCQkJCWlmIChjaGlsZERpYWdub3N0aWMuZ2V0U2V2ZXJpdHkoKSAhPSBEaWFnbm9zdGljLk9LKSB7CisJCQkJCWRpYWdub3N0aWMuYWRkKGNoaWxkRGlhZ25vc3RpYyk7CisJCQkJfQorCQkJfQorCisJCQlpbnQgbGFzdEVkaXRvclBhZ2UgPSBnZXRQYWdlQ291bnQoKSAtIDE7CisJCQlpZiAobGFzdEVkaXRvclBhZ2UgPj0gMCAmJiBnZXRFZGl0b3IobGFzdEVkaXRvclBhZ2UpIGluc3RhbmNlb2YgUHJvYmxlbUVkaXRvclBhcnQpIHsKKwkJCQkoKFByb2JsZW1FZGl0b3JQYXJ0KWdldEVkaXRvcihsYXN0RWRpdG9yUGFnZSkpLnNldERpYWdub3N0aWMoZGlhZ25vc3RpYyk7CisJCQkJaWYgKGRpYWdub3N0aWMuZ2V0U2V2ZXJpdHkoKSAhPSBEaWFnbm9zdGljLk9LKSB7CisJCQkJCXNldEFjdGl2ZVBhZ2UobGFzdEVkaXRvclBhZ2UpOworCQkJCX0KKwkJCX0KKwkJCWVsc2UgaWYgKGRpYWdub3N0aWMuZ2V0U2V2ZXJpdHkoKSAhPSBEaWFnbm9zdGljLk9LKSB7CisJCQkJUHJvYmxlbUVkaXRvclBhcnQgcHJvYmxlbUVkaXRvclBhcnQgPSBuZXcgUHJvYmxlbUVkaXRvclBhcnQoKTsKKwkJCQlwcm9ibGVtRWRpdG9yUGFydC5zZXREaWFnbm9zdGljKGRpYWdub3N0aWMpOworCQkJCXByb2JsZW1FZGl0b3JQYXJ0LnNldE1hcmtlckhlbHBlcihtYXJrZXJIZWxwZXIpOworCQkJCXRyeSB7CisJCQkJCWFkZFBhZ2UoKytsYXN0RWRpdG9yUGFnZSwgcHJvYmxlbUVkaXRvclBhcnQsIGdldEVkaXRvcklucHV0KCkpOworCQkJCQlzZXRQYWdlVGV4dChsYXN0RWRpdG9yUGFnZSwgcHJvYmxlbUVkaXRvclBhcnQuZ2V0UGFydE5hbWUoKSk7CisJCQkJCXNldEFjdGl2ZVBhZ2UobGFzdEVkaXRvclBhZ2UpOworCQkJCQlzaG93VGFicygpOworCQkJCX0KKwkJCQljYXRjaCAoUGFydEluaXRFeGNlcHRpb24gZXhjZXB0aW9uKSB7CisJCQkJCVRlc3R1dGlsaXR5RWRpdFBsdWdpbi5JTlNUQU5DRS5sb2coZXhjZXB0aW9uKTsKKwkJCQl9CisJCQl9CisKKwkJCWlmIChtYXJrZXJIZWxwZXIuaGFzTWFya2VycyhlZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkpKSB7CisJCQkJbWFya2VySGVscGVyLmRlbGV0ZU1hcmtlcnMoZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpKTsKKwkJCQlpZiAoZGlhZ25vc3RpYy5nZXRTZXZlcml0eSgpICE9IERpYWdub3N0aWMuT0spIHsKKwkJCQkJdHJ5IHsKKwkJCQkJCW1hcmtlckhlbHBlci5jcmVhdGVNYXJrZXJzKGRpYWdub3N0aWMpOworCQkJCQl9CisJCQkJCWNhdGNoIChDb3JlRXhjZXB0aW9uIGV4Y2VwdGlvbikgeworCQkJCQkJVGVzdHV0aWxpdHlFZGl0UGx1Z2luLklOU1RBTkNFLmxvZyhleGNlcHRpb24pOworCQkJCQl9CisJCQkJfQorCQkJfQorCQl9CisJfQorCisJLyoqCisJICogU2hvd3MgYSBkaWFsb2cgdGhhdCBhc2tzIGlmIGNvbmZsaWN0aW5nIGNoYW5nZXMgc2hvdWxkIGJlIGRpc2NhcmRlZC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgYm9vbGVhbiBoYW5kbGVEaXJ0eUNvbmZsaWN0KCkgeworCQlyZXR1cm4KKwkJCU1lc3NhZ2VEaWFsb2cub3BlblF1ZXN0aW9uCisJCQkJKGdldFNpdGUoKS5nZXRTaGVsbCgpLAorCQkJCSBnZXRTdHJpbmcoIl9VSV9GaWxlQ29uZmxpY3RfbGFiZWwiKSwgLy8kTk9OLU5MUy0xJAorCQkJCSBnZXRTdHJpbmcoIl9XQVJOX0ZpbGVDb25mbGljdCIpKTsgLy8kTk9OLU5MUy0xJAorCX0KKworCS8qKgorCSAqIFRoaXMgY3JlYXRlcyBhIG1vZGVsIGVkaXRvci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgTGFiZWxzRWRpdG9yKCkgeworCQlzdXBlcigpOworCQlpbml0aWFsaXplRWRpdGluZ0RvbWFpbigpOworCX0KKworCS8qKgorCSAqIFRoaXMgc2V0cyB1cCB0aGUgZWRpdGluZyBkb21haW4gZm9yIHRoZSBtb2RlbCBlZGl0b3IuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgaW5pdGlhbGl6ZUVkaXRpbmdEb21haW4oKSB7CisJCS8vIENyZWF0ZSBhbiBhZGFwdGVyIGZhY3RvcnkgdGhhdCB5aWVsZHMgaXRlbSBwcm92aWRlcnMuCisJCS8vCisJCWFkYXB0ZXJGYWN0b3J5ID0gbmV3IENvbXBvc2VkQWRhcHRlckZhY3RvcnkoQ29tcG9zZWRBZGFwdGVyRmFjdG9yeS5EZXNjcmlwdG9yLlJlZ2lzdHJ5LklOU1RBTkNFKTsKKworCQlhZGFwdGVyRmFjdG9yeS5hZGRBZGFwdGVyRmFjdG9yeShuZXcgUmVzb3VyY2VJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSgpKTsKKwkJYWRhcHRlckZhY3RvcnkuYWRkQWRhcHRlckZhY3RvcnkobmV3IERlY29yYXRvcnNJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSgpKTsKKwkJYWRhcHRlckZhY3RvcnkuYWRkQWRhcHRlckZhY3RvcnkobmV3IExhYmVsc0l0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5KCkpOworCQlhZGFwdGVyRmFjdG9yeS5hZGRBZGFwdGVyRmFjdG9yeShuZXcgTW9kZWxJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSgpKTsKKwkJYWRhcHRlckZhY3RvcnkuYWRkQWRhcHRlckZhY3RvcnkobmV3IENvbW1vbkl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5KCkpOworCQlhZGFwdGVyRmFjdG9yeS5hZGRBZGFwdGVyRmFjdG9yeShuZXcgR3JhcGhJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSgpKTsKKwkJYWRhcHRlckZhY3RvcnkuYWRkQWRhcHRlckZhY3RvcnkobmV3IE1vZGlmaWVySXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkoKSk7CisJCWFkYXB0ZXJGYWN0b3J5LmFkZEFkYXB0ZXJGYWN0b3J5KG5ldyBFY29yZUl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5KCkpOworCQlhZGFwdGVyRmFjdG9yeS5hZGRBZGFwdGVyRmFjdG9yeShuZXcgU2NlbmFyaW9JdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSgpKTsKKwkJYWRhcHRlckZhY3RvcnkuYWRkQWRhcHRlckZhY3RvcnkobmV3IFNlcXVlbmNlckl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5KCkpOworCQlhZGFwdGVyRmFjdG9yeS5hZGRBZGFwdGVyRmFjdG9yeShuZXcgUmVmbGVjdGl2ZUl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5KCkpOworCisJCS8vIENyZWF0ZSB0aGUgY29tbWFuZCBzdGFjayB0aGF0IHdpbGwgbm90aWZ5IHRoaXMgZWRpdG9yIGFzIGNvbW1hbmRzIGFyZSBleGVjdXRlZC4KKwkJLy8KKwkJQmFzaWNDb21tYW5kU3RhY2sgY29tbWFuZFN0YWNrID0gbmV3IEJhc2ljQ29tbWFuZFN0YWNrKCk7CisKKwkJLy8gQWRkIGEgbGlzdGVuZXIgdG8gc2V0IHRoZSBtb3N0IHJlY2VudCBjb21tYW5kJ3MgYWZmZWN0ZWQgb2JqZWN0cyB0byBiZSB0aGUgc2VsZWN0aW9uIG9mIHRoZSB2aWV3ZXIgd2l0aCBmb2N1cy4KKwkJLy8KKwkJY29tbWFuZFN0YWNrLmFkZENvbW1hbmRTdGFja0xpc3RlbmVyCisJCQkobmV3IENvbW1hbmRTdGFja0xpc3RlbmVyKCkgeworCQkJCSBwdWJsaWMgdm9pZCBjb21tYW5kU3RhY2tDaGFuZ2VkKGZpbmFsIEV2ZW50T2JqZWN0IGV2ZW50KSB7CisJCQkJCSBnZXRDb250YWluZXIoKS5nZXREaXNwbGF5KCkuYXN5bmNFeGVjCisJCQkJCQkgKG5ldyBSdW5uYWJsZSgpIHsKKwkJCQkJCQkgIHB1YmxpYyB2b2lkIHJ1bigpIHsKKwkJCQkJCQkJICBmaXJlUHJvcGVydHlDaGFuZ2UoSUVkaXRvclBhcnQuUFJPUF9ESVJUWSk7CisKKwkJCQkJCQkJICAvLyBUcnkgdG8gc2VsZWN0IHRoZSBhZmZlY3RlZCBvYmplY3RzLgorCQkJCQkJCQkgIC8vCisJCQkJCQkJCSAgQ29tbWFuZCBtb3N0UmVjZW50Q29tbWFuZCA9ICgoQ29tbWFuZFN0YWNrKWV2ZW50LmdldFNvdXJjZSgpKS5nZXRNb3N0UmVjZW50Q29tbWFuZCgpOworCQkJCQkJCQkgIGlmIChtb3N0UmVjZW50Q29tbWFuZCAhPSBudWxsKSB7CisJCQkJCQkJCQkgIHNldFNlbGVjdGlvblRvVmlld2VyKG1vc3RSZWNlbnRDb21tYW5kLmdldEFmZmVjdGVkT2JqZWN0cygpKTsKKwkJCQkJCQkJICB9CisJCQkJCQkJCSAgaWYgKHByb3BlcnR5U2hlZXRQYWdlICE9IG51bGwgJiYgIXByb3BlcnR5U2hlZXRQYWdlLmdldENvbnRyb2woKS5pc0Rpc3Bvc2VkKCkpIHsKKwkJCQkJCQkJCSAgcHJvcGVydHlTaGVldFBhZ2UucmVmcmVzaCgpOworCQkJCQkJCQkgIH0KKwkJCQkJCQkgIH0KKwkJCQkJCSAgfSk7CisJCQkJIH0KKwkJCSB9KTsKKworCQkvLyBDcmVhdGUgdGhlIGVkaXRpbmcgZG9tYWluIHdpdGggYSBzcGVjaWFsIGNvbW1hbmQgc3RhY2suCisJCS8vCisJCWVkaXRpbmdEb21haW4gPSBuZXcgQWRhcHRlckZhY3RvcnlFZGl0aW5nRG9tYWluKGFkYXB0ZXJGYWN0b3J5LCBjb21tYW5kU3RhY2ssIG5ldyBIYXNoTWFwPFJlc291cmNlLCBCb29sZWFuPigpKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGlzIGhlcmUgZm9yIHRoZSBsaXN0ZW5lciB0byBiZSBhYmxlIHRvIGNhbGwgaXQuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgZmlyZVByb3BlcnR5Q2hhbmdlKGludCBhY3Rpb24pIHsKKwkJc3VwZXIuZmlyZVByb3BlcnR5Q2hhbmdlKGFjdGlvbik7CisJfQorCisJLyoqCisJICogVGhpcyBzZXRzIHRoZSBzZWxlY3Rpb24gaW50byB3aGljaGV2ZXIgdmlld2VyIGlzIGFjdGl2ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRTZWxlY3Rpb25Ub1ZpZXdlcihDb2xsZWN0aW9uPD8+IGNvbGxlY3Rpb24pIHsKKwkJZmluYWwgQ29sbGVjdGlvbjw/PiB0aGVTZWxlY3Rpb24gPSBjb2xsZWN0aW9uOworCQkvLyBNYWtlIHN1cmUgaXQncyBva2F5LgorCQkvLworCQlpZiAodGhlU2VsZWN0aW9uICE9IG51bGwgJiYgIXRoZVNlbGVjdGlvbi5pc0VtcHR5KCkpIHsKKwkJCS8vIEkgZG9uJ3Qga25vdyBpZiB0aGlzIHNob3VsZCBiZSBydW4gdGhpcyBkZWZlcnJlZAorCQkJLy8gYmVjYXVzZSB3ZSBtaWdodCBoYXZlIHRvIGdpdmUgdGhlIGVkaXRvciBhIGNoYW5jZSB0byBwcm9jZXNzIHRoZSB2aWV3ZXIgdXBkYXRlIGV2ZW50cworCQkJLy8gYW5kIGhlbmNlIHRvIHVwZGF0ZSB0aGUgdmlld3MgZmlyc3QuCisJCQkvLworCQkJLy8KKwkJCVJ1bm5hYmxlIHJ1bm5hYmxlID0KKwkJCQluZXcgUnVubmFibGUoKSB7CisJCQkJCXB1YmxpYyB2b2lkIHJ1bigpIHsKKwkJCQkJCS8vIFRyeSB0byBzZWxlY3QgdGhlIGl0ZW1zIGluIHRoZSBjdXJyZW50IGNvbnRlbnQgdmlld2VyIG9mIHRoZSBlZGl0b3IuCisJCQkJCQkvLworCQkJCQkJaWYgKGN1cnJlbnRWaWV3ZXIgIT0gbnVsbCkgeworCQkJCQkJCWN1cnJlbnRWaWV3ZXIuc2V0U2VsZWN0aW9uKG5ldyBTdHJ1Y3R1cmVkU2VsZWN0aW9uKHRoZVNlbGVjdGlvbi50b0FycmF5KCkpLCB0cnVlKTsKKwkJCQkJCX0KKwkJCQkJfQorCQkJCX07CisJCQlydW5uYWJsZS5ydW4oKTsKKwkJfQorCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyB0aGUgZWRpdGluZyBkb21haW4gYXMgcmVxdWlyZWQgYnkgdGhlIHtAbGluayBJRWRpdGluZ0RvbWFpblByb3ZpZGVyfSBpbnRlcmZhY2UuCisJICogVGhpcyBpcyBpbXBvcnRhbnQgZm9yIGltcGxlbWVudGluZyB0aGUgc3RhdGljIG1ldGhvZHMgb2Yge0BsaW5rIEFkYXB0ZXJGYWN0b3J5RWRpdGluZ0RvbWFpbn0KKwkgKiBhbmQgZm9yIHN1cHBvcnRpbmcge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmFjdGlvbi5Db21tYW5kQWN0aW9ufS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRWRpdGluZ0RvbWFpbiBnZXRFZGl0aW5nRG9tYWluKCkgeworCQlyZXR1cm4gZWRpdGluZ0RvbWFpbjsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgY2xhc3MgUmV2ZXJzZUFkYXB0ZXJGYWN0b3J5Q29udGVudFByb3ZpZGVyIGV4dGVuZHMgQWRhcHRlckZhY3RvcnlDb250ZW50UHJvdmlkZXIgeworCQlwdWJsaWMgUmV2ZXJzZUFkYXB0ZXJGYWN0b3J5Q29udGVudFByb3ZpZGVyKEFkYXB0ZXJGYWN0b3J5IGFkYXB0ZXJGYWN0b3J5KSB7CisJCQlzdXBlcihhZGFwdGVyRmFjdG9yeSk7CisJCX0KKworCQlAT3ZlcnJpZGUKKwkJcHVibGljIE9iamVjdCBbXSBnZXRFbGVtZW50cyhPYmplY3Qgb2JqZWN0KSB7CisJCQlPYmplY3QgcGFyZW50ID0gc3VwZXIuZ2V0UGFyZW50KG9iamVjdCk7CisJCQlyZXR1cm4gKHBhcmVudCA9PSBudWxsID8gQ29sbGVjdGlvbnMuRU1QVFlfU0VUIDogQ29sbGVjdGlvbnMuc2luZ2xldG9uKHBhcmVudCkpLnRvQXJyYXkoKTsKKwkJfQorCisJCUBPdmVycmlkZQorCQlwdWJsaWMgT2JqZWN0IFtdIGdldENoaWxkcmVuKE9iamVjdCBvYmplY3QpIHsKKwkJCU9iamVjdCBwYXJlbnQgPSBzdXBlci5nZXRQYXJlbnQob2JqZWN0KTsKKwkJCXJldHVybiAocGFyZW50ID09IG51bGwgPyBDb2xsZWN0aW9ucy5FTVBUWV9TRVQgOiBDb2xsZWN0aW9ucy5zaW5nbGV0b24ocGFyZW50KSkudG9BcnJheSgpOworCQl9CisKKwkJQE92ZXJyaWRlCisJCXB1YmxpYyBib29sZWFuIGhhc0NoaWxkcmVuKE9iamVjdCBvYmplY3QpIHsKKwkJCU9iamVjdCBwYXJlbnQgPSBzdXBlci5nZXRQYXJlbnQob2JqZWN0KTsKKwkJCXJldHVybiBwYXJlbnQgIT0gbnVsbDsKKwkJfQorCisJCUBPdmVycmlkZQorCQlwdWJsaWMgT2JqZWN0IGdldFBhcmVudChPYmplY3Qgb2JqZWN0KSB7CisJCQlyZXR1cm4gbnVsbDsKKwkJfQorCX0KKworCS8qKgorCSAqIFRoaXMgbWFrZXMgc3VyZSB0aGF0IG9uZSBjb250ZW50IHZpZXdlciwgZWl0aGVyIGZvciB0aGUgY3VycmVudCBwYWdlIG9yIHRoZSBvdXRsaW5lIHZpZXcsIGlmIGl0IGhhcyBmb2N1cywKKwkgKiBpcyB0aGUgY3VycmVudCBvbmUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgc2V0Q3VycmVudFZpZXdlcihWaWV3ZXIgdmlld2VyKSB7CisJCS8vIElmIGl0IGlzIGNoYW5naW5nLi4uCisJCS8vCisJCWlmIChjdXJyZW50Vmlld2VyICE9IHZpZXdlcikgeworCQkJaWYgKHNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lciA9PSBudWxsKSB7CisJCQkJLy8gQ3JlYXRlIHRoZSBsaXN0ZW5lciBvbiBkZW1hbmQuCisJCQkJLy8KKwkJCQlzZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIgPQorCQkJCQluZXcgSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcigpIHsKKwkJCQkJCS8vIFRoaXMganVzdCBub3RpZmllcyB0aG9zZSB0aGluZ3MgdGhhdCBhcmUgYWZmZWN0ZWQgYnkgdGhlIHNlY3Rpb24uCisJCQkJCQkvLworCQkJCQkJcHVibGljIHZvaWQgc2VsZWN0aW9uQ2hhbmdlZChTZWxlY3Rpb25DaGFuZ2VkRXZlbnQgc2VsZWN0aW9uQ2hhbmdlZEV2ZW50KSB7CisJCQkJCQkJc2V0U2VsZWN0aW9uKHNlbGVjdGlvbkNoYW5nZWRFdmVudC5nZXRTZWxlY3Rpb24oKSk7CisJCQkJCQl9CisJCQkJCX07CisJCQl9CisKKwkJCS8vIFN0b3AgbGlzdGVuaW5nIHRvIHRoZSBvbGQgb25lLgorCQkJLy8KKwkJCWlmIChjdXJyZW50Vmlld2VyICE9IG51bGwpIHsKKwkJCQljdXJyZW50Vmlld2VyLnJlbW92ZVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcihzZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIpOworCQkJfQorCisJCQkvLyBTdGFydCBsaXN0ZW5pbmcgdG8gdGhlIG5ldyBvbmUuCisJCQkvLworCQkJaWYgKHZpZXdlciAhPSBudWxsKSB7CisJCQkJdmlld2VyLmFkZFNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcihzZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIpOworCQkJfQorCisJCQkvLyBSZW1lbWJlciBpdC4KKwkJCS8vCisJCQljdXJyZW50Vmlld2VyID0gdmlld2VyOworCisJCQkvLyBTZXQgdGhlIGVkaXRvcnMgc2VsZWN0aW9uIGJhc2VkIG9uIHRoZSBjdXJyZW50IHZpZXdlcidzIHNlbGVjdGlvbi4KKwkJCS8vCisJCQlzZXRTZWxlY3Rpb24oY3VycmVudFZpZXdlciA9PSBudWxsID8gU3RydWN0dXJlZFNlbGVjdGlvbi5FTVBUWSA6IGN1cnJlbnRWaWV3ZXIuZ2V0U2VsZWN0aW9uKCkpOworCQl9CisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIHRoZSB2aWV3ZXIgYXMgcmVxdWlyZWQgYnkgdGhlIHtAbGluayBJVmlld2VyUHJvdmlkZXJ9IGludGVyZmFjZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVmlld2VyIGdldFZpZXdlcigpIHsKKwkJcmV0dXJuIGN1cnJlbnRWaWV3ZXI7CisJfQorCisJLyoqCisJICogVGhpcyBjcmVhdGVzIGEgY29udGV4dCBtZW51IGZvciB0aGUgdmlld2VyIGFuZCBhZGRzIGEgbGlzdGVuZXIgYXMgd2VsbCByZWdpc3RlcmluZyB0aGUgbWVudSBmb3IgZXh0ZW5zaW9uLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIGNyZWF0ZUNvbnRleHRNZW51Rm9yKFN0cnVjdHVyZWRWaWV3ZXIgdmlld2VyKSB7CisJCU1lbnVNYW5hZ2VyIGNvbnRleHRNZW51ID0gbmV3IE1lbnVNYW5hZ2VyKCIjUG9wVXAiKTsgLy8kTk9OLU5MUy0xJAorCQljb250ZXh0TWVudS5hZGQobmV3IFNlcGFyYXRvcigiYWRkaXRpb25zIikpOyAvLyROT04tTkxTLTEkCisJCWNvbnRleHRNZW51LnNldFJlbW92ZUFsbFdoZW5TaG93bih0cnVlKTsKKwkJY29udGV4dE1lbnUuYWRkTWVudUxpc3RlbmVyKHRoaXMpOworCQlNZW51IG1lbnU9IGNvbnRleHRNZW51LmNyZWF0ZUNvbnRleHRNZW51KHZpZXdlci5nZXRDb250cm9sKCkpOworCQl2aWV3ZXIuZ2V0Q29udHJvbCgpLnNldE1lbnUobWVudSk7CisJCWdldFNpdGUoKS5yZWdpc3RlckNvbnRleHRNZW51KGNvbnRleHRNZW51LCBuZXcgVW53cmFwcGluZ1NlbGVjdGlvblByb3ZpZGVyKHZpZXdlcikpOworCisJCWludCBkbmRPcGVyYXRpb25zID0gRE5ELkRST1BfQ09QWSB8IERORC5EUk9QX01PVkUgfCBETkQuRFJPUF9MSU5LOworCQlUcmFuc2ZlcltdIHRyYW5zZmVycyA9IG5ldyBUcmFuc2ZlcltdIHsgTG9jYWxUcmFuc2Zlci5nZXRJbnN0YW5jZSgpIH07CisJCXZpZXdlci5hZGREcmFnU3VwcG9ydChkbmRPcGVyYXRpb25zLCB0cmFuc2ZlcnMsIG5ldyBWaWV3ZXJEcmFnQWRhcHRlcih2aWV3ZXIpKTsKKwkJdmlld2VyLmFkZERyb3BTdXBwb3J0KGRuZE9wZXJhdGlvbnMsIHRyYW5zZmVycywgbmV3IEVkaXRpbmdEb21haW5WaWV3ZXJEcm9wQWRhcHRlcihlZGl0aW5nRG9tYWluLCB2aWV3ZXIpKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGlzIHRoZSBtZXRob2QgY2FsbGVkIHRvIGxvYWQgYSByZXNvdXJjZSBpbnRvIHRoZSBlZGl0aW5nIGRvbWFpbidzIHJlc291cmNlIHNldCBiYXNlZCBvbiB0aGUgZWRpdG9yJ3MgaW5wdXQuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgY3JlYXRlTW9kZWwoKSB7CisJCVVSSSByZXNvdXJjZVVSSSA9IEVkaXRVSVV0aWwuZ2V0VVJJKGdldEVkaXRvcklucHV0KCkpOworCQlFeGNlcHRpb24gZXhjZXB0aW9uID0gbnVsbDsKKwkJUmVzb3VyY2UgcmVzb3VyY2UgPSBudWxsOworCQl0cnkgeworCQkJLy8gTG9hZCB0aGUgcmVzb3VyY2UgdGhyb3VnaCB0aGUgZWRpdGluZyBkb21haW4uCisJCQkvLworCQkJcmVzb3VyY2UgPSBlZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkuZ2V0UmVzb3VyY2UocmVzb3VyY2VVUkksIHRydWUpOworCQl9CisJCWNhdGNoIChFeGNlcHRpb24gZSkgeworCQkJZXhjZXB0aW9uID0gZTsKKwkJCXJlc291cmNlID0gZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpLmdldFJlc291cmNlKHJlc291cmNlVVJJLCBmYWxzZSk7CisJCX0KKworCQlEaWFnbm9zdGljIGRpYWdub3N0aWMgPSBhbmFseXplUmVzb3VyY2VQcm9ibGVtcyhyZXNvdXJjZSwgZXhjZXB0aW9uKTsKKwkJaWYgKGRpYWdub3N0aWMuZ2V0U2V2ZXJpdHkoKSAhPSBEaWFnbm9zdGljLk9LKSB7CisJCQlyZXNvdXJjZVRvRGlhZ25vc3RpY01hcC5wdXQocmVzb3VyY2UsICBhbmFseXplUmVzb3VyY2VQcm9ibGVtcyhyZXNvdXJjZSwgZXhjZXB0aW9uKSk7CisJCX0KKwkJZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpLmVBZGFwdGVycygpLmFkZChwcm9ibGVtSW5kaWNhdGlvbkFkYXB0ZXIpOworCX0KKworCS8qKgorCSAqIFJldHVybnMgYSBkaWFnbm9zdGljIGRlc2NyaWJpbmcgdGhlIGVycm9ycyBhbmQgd2FybmluZ3MgbGlzdGVkIGluIHRoZSByZXNvdXJjZQorCSAqIGFuZCB0aGUgc3BlY2lmaWVkIGV4Y2VwdGlvbiAoaWYgYW55KS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRGlhZ25vc3RpYyBhbmFseXplUmVzb3VyY2VQcm9ibGVtcyhSZXNvdXJjZSByZXNvdXJjZSwgRXhjZXB0aW9uIGV4Y2VwdGlvbikgeworCQlpZiAoIXJlc291cmNlLmdldEVycm9ycygpLmlzRW1wdHkoKSB8fCAhcmVzb3VyY2UuZ2V0V2FybmluZ3MoKS5pc0VtcHR5KCkpIHsKKwkJCUJhc2ljRGlhZ25vc3RpYyBiYXNpY0RpYWdub3N0aWMgPQorCQkJCW5ldyBCYXNpY0RpYWdub3N0aWMKKwkJCQkJKERpYWdub3N0aWMuRVJST1IsCisJCQkJCSAib3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsIiwgLy8kTk9OLU5MUy0xJAorCQkJCQkgMCwKKwkJCQkJIGdldFN0cmluZygiX1VJX0NyZWF0ZU1vZGVsRXJyb3JfbWVzc2FnZSIsIHJlc291cmNlLmdldFVSSSgpKSwgLy8kTk9OLU5MUy0xJAorCQkJCQkgbmV3IE9iamVjdCBbXSB7IGV4Y2VwdGlvbiA9PSBudWxsID8gKE9iamVjdClyZXNvdXJjZSA6IGV4Y2VwdGlvbiB9KTsKKwkJCWJhc2ljRGlhZ25vc3RpYy5tZXJnZShFY29yZVV0aWwuY29tcHV0ZURpYWdub3N0aWMocmVzb3VyY2UsIHRydWUpKTsKKwkJCXJldHVybiBiYXNpY0RpYWdub3N0aWM7CisJCX0KKwkJZWxzZSBpZiAoZXhjZXB0aW9uICE9IG51bGwpIHsKKwkJCXJldHVybgorCQkJCW5ldyBCYXNpY0RpYWdub3N0aWMKKwkJCQkJKERpYWdub3N0aWMuRVJST1IsCisJCQkJCSAib3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsIiwgLy8kTk9OLU5MUy0xJAorCQkJCQkgMCwKKwkJCQkJIGdldFN0cmluZygiX1VJX0NyZWF0ZU1vZGVsRXJyb3JfbWVzc2FnZSIsIHJlc291cmNlLmdldFVSSSgpKSwgLy8kTk9OLU5MUy0xJAorCQkJCQkgbmV3IE9iamVjdFtdIHsgZXhjZXB0aW9uIH0pOworCQl9CisJCWVsc2UgeworCQkJcmV0dXJuIERpYWdub3N0aWMuT0tfSU5TVEFOQ0U7CisJCX0KKwl9CisKKwkvKioKKwkgKiBUaGlzIGlzIHRoZSBtZXRob2QgdXNlZCBieSB0aGUgZnJhbWV3b3JrIHRvIGluc3RhbGwgeW91ciBvd24gY29udHJvbHMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgY3JlYXRlUGFnZXMoKSB7CisJCS8vIENyZWF0ZXMgdGhlIG1vZGVsIGZyb20gdGhlIGVkaXRvciBpbnB1dAorCQkvLworCQljcmVhdGVNb2RlbCgpOworCisJCS8vIE9ubHkgY3JlYXRlcyB0aGUgb3RoZXIgcGFnZXMgaWYgdGhlcmUgaXMgc29tZXRoaW5nIHRoYXQgY2FuIGJlIGVkaXRlZAorCQkvLworCQlpZiAoIWdldEVkaXRpbmdEb21haW4oKS5nZXRSZXNvdXJjZVNldCgpLmdldFJlc291cmNlcygpLmlzRW1wdHkoKSkgeworCQkJLy8gQ3JlYXRlIGEgcGFnZSBmb3IgdGhlIHNlbGVjdGlvbiB0cmVlIHZpZXcuCisJCQkvLworCQkJVHJlZSB0cmVlID0gbmV3IFRyZWUoZ2V0Q29udGFpbmVyKCksIFNXVC5NVUxUSSk7CisJCQlzZWxlY3Rpb25WaWV3ZXIgPSBuZXcgVHJlZVZpZXdlcih0cmVlKTsKKwkJCXNldEN1cnJlbnRWaWV3ZXIoc2VsZWN0aW9uVmlld2VyKTsKKworCQkJc2VsZWN0aW9uVmlld2VyLnNldENvbnRlbnRQcm92aWRlcihuZXcgQWRhcHRlckZhY3RvcnlDb250ZW50UHJvdmlkZXIoYWRhcHRlckZhY3RvcnkpKTsKKwkJCXNlbGVjdGlvblZpZXdlci5zZXRMYWJlbFByb3ZpZGVyKG5ldyBBZGFwdGVyRmFjdG9yeUxhYmVsUHJvdmlkZXIoYWRhcHRlckZhY3RvcnkpKTsKKwkJCXNlbGVjdGlvblZpZXdlci5zZXRJbnB1dChlZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkpOworCQkJc2VsZWN0aW9uVmlld2VyLnNldFNlbGVjdGlvbihuZXcgU3RydWN0dXJlZFNlbGVjdGlvbihlZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkuZ2V0UmVzb3VyY2VzKCkuZ2V0KDApKSwgdHJ1ZSk7CisKKwkJCW5ldyBBZGFwdGVyRmFjdG9yeVRyZWVFZGl0b3Ioc2VsZWN0aW9uVmlld2VyLmdldFRyZWUoKSwgYWRhcHRlckZhY3RvcnkpOworCisJCQljcmVhdGVDb250ZXh0TWVudUZvcihzZWxlY3Rpb25WaWV3ZXIpOworCQkJaW50IHBhZ2VJbmRleCA9IGFkZFBhZ2UodHJlZSk7CisJCQlzZXRQYWdlVGV4dChwYWdlSW5kZXgsIGdldFN0cmluZygiX1VJX1NlbGVjdGlvblBhZ2VfbGFiZWwiKSk7IC8vJE5PTi1OTFMtMSQKKworCQkJZ2V0U2l0ZSgpLmdldFNoZWxsKCkuZ2V0RGlzcGxheSgpLmFzeW5jRXhlYworCQkJCShuZXcgUnVubmFibGUoKSB7CisJCQkJCSBwdWJsaWMgdm9pZCBydW4oKSB7CisJCQkJCQkgc2V0QWN0aXZlUGFnZSgwKTsKKwkJCQkJIH0KKwkJCQkgfSk7CisJCX0KKworCQkvLyBFbnN1cmVzIHRoYXQgdGhpcyBlZGl0b3Igd2lsbCBvbmx5IGRpc3BsYXkgdGhlIHBhZ2UncyB0YWIKKwkJLy8gYXJlYSBpZiB0aGVyZSBhcmUgbW9yZSB0aGFuIG9uZSBwYWdlCisJCS8vCisJCWdldENvbnRhaW5lcigpLmFkZENvbnRyb2xMaXN0ZW5lcgorCQkJKG5ldyBDb250cm9sQWRhcHRlcigpIHsKKwkJCQlib29sZWFuIGd1YXJkID0gZmFsc2U7CisJCQkJQE92ZXJyaWRlCisJCQkJcHVibGljIHZvaWQgY29udHJvbFJlc2l6ZWQoQ29udHJvbEV2ZW50IGV2ZW50KSB7CisJCQkJCWlmICghZ3VhcmQpIHsKKwkJCQkJCWd1YXJkID0gdHJ1ZTsKKwkJCQkJCWhpZGVUYWJzKCk7CisJCQkJCQlndWFyZCA9IGZhbHNlOworCQkJCQl9CisJCQkJfQorCQkJIH0pOworCisJCWdldFNpdGUoKS5nZXRTaGVsbCgpLmdldERpc3BsYXkoKS5hc3luY0V4ZWMKKwkJCShuZXcgUnVubmFibGUoKSB7CisJCQkJIHB1YmxpYyB2b2lkIHJ1bigpIHsKKwkJCQkJIHVwZGF0ZVByb2JsZW1JbmRpY2F0aW9uKCk7CisJCQkJIH0KKwkJCSB9KTsKKwl9CisKKwkvKioKKwkgKiBJZiB0aGVyZSBpcyBqdXN0IG9uZSBwYWdlIGluIHRoZSBtdWx0aS1wYWdlIGVkaXRvciBwYXJ0LAorCSAqIHRoaXMgaGlkZXMgdGhlIHNpbmdsZSB0YWIgYXQgdGhlIGJvdHRvbS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBoaWRlVGFicygpIHsKKwkJaWYgKGdldFBhZ2VDb3VudCgpIDw9IDEpIHsKKwkJCXNldFBhZ2VUZXh0KDAsICIiKTsgLy8kTk9OLU5MUy0xJAorCQkJaWYgKGdldENvbnRhaW5lcigpIGluc3RhbmNlb2YgQ1RhYkZvbGRlcikgeworCQkJCSgoQ1RhYkZvbGRlcilnZXRDb250YWluZXIoKSkuc2V0VGFiSGVpZ2h0KDEpOworCQkJCVBvaW50IHBvaW50ID0gZ2V0Q29udGFpbmVyKCkuZ2V0U2l6ZSgpOworCQkJCWdldENvbnRhaW5lcigpLnNldFNpemUocG9pbnQueCwgcG9pbnQueSArIDYpOworCQkJfQorCQl9CisJfQorCisJLyoqCisJICogSWYgdGhlcmUgaXMgbW9yZSB0aGFuIG9uZSBwYWdlIGluIHRoZSBtdWx0aS1wYWdlIGVkaXRvciBwYXJ0LAorCSAqIHRoaXMgc2hvd3MgdGhlIHRhYnMgYXQgdGhlIGJvdHRvbS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBzaG93VGFicygpIHsKKwkJaWYgKGdldFBhZ2VDb3VudCgpID4gMSkgeworCQkJc2V0UGFnZVRleHQoMCwgZ2V0U3RyaW5nKCJfVUlfU2VsZWN0aW9uUGFnZV9sYWJlbCIpKTsgLy8kTk9OLU5MUy0xJAorCQkJaWYgKGdldENvbnRhaW5lcigpIGluc3RhbmNlb2YgQ1RhYkZvbGRlcikgeworCQkJCSgoQ1RhYkZvbGRlcilnZXRDb250YWluZXIoKSkuc2V0VGFiSGVpZ2h0KFNXVC5ERUZBVUxUKTsKKwkJCQlQb2ludCBwb2ludCA9IGdldENvbnRhaW5lcigpLmdldFNpemUoKTsKKwkJCQlnZXRDb250YWluZXIoKS5zZXRTaXplKHBvaW50LngsIHBvaW50LnkgLSA2KTsKKwkJCX0KKwkJfQorCX0KKworCS8qKgorCSAqIFRoaXMgaXMgdXNlZCB0byB0cmFjayB0aGUgYWN0aXZlIHZpZXdlci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgdm9pZCBwYWdlQ2hhbmdlKGludCBwYWdlSW5kZXgpIHsKKwkJc3VwZXIucGFnZUNoYW5nZShwYWdlSW5kZXgpOworCisJCWlmIChjb250ZW50T3V0bGluZVBhZ2UgIT0gbnVsbCkgeworCQkJaGFuZGxlQ29udGVudE91dGxpbmVTZWxlY3Rpb24oY29udGVudE91dGxpbmVQYWdlLmdldFNlbGVjdGlvbigpKTsKKwkJfQorCX0KKworCS8qKgorCSAqIFRoaXMgaXMgaG93IHRoZSBmcmFtZXdvcmsgZGV0ZXJtaW5lcyB3aGljaCBpbnRlcmZhY2VzIHdlIGltcGxlbWVudC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAU3VwcHJlc3NXYXJuaW5ncygidW5jaGVja2VkIikKKwkJQE92ZXJyaWRlCisJcHVibGljIE9iamVjdCBnZXRBZGFwdGVyKENsYXNzIGtleSkgeworCQlpZiAoa2V5LmVxdWFscyhJQ29udGVudE91dGxpbmVQYWdlLmNsYXNzKSkgeworCQkJcmV0dXJuIHNob3dPdXRsaW5lVmlldygpID8gZ2V0Q29udGVudE91dGxpbmVQYWdlKCkgOiBudWxsOworCQl9CisJCWVsc2UgaWYgKGtleS5lcXVhbHMoSVByb3BlcnR5U2hlZXRQYWdlLmNsYXNzKSkgeworCQkJcmV0dXJuIGdldFByb3BlcnR5U2hlZXRQYWdlKCk7CisJCX0KKwkJZWxzZSBpZiAoa2V5LmVxdWFscyhJR290b01hcmtlci5jbGFzcykpIHsKKwkJCXJldHVybiB0aGlzOworCQl9CisJCWVsc2UgeworCQkJcmV0dXJuIHN1cGVyLmdldEFkYXB0ZXIoa2V5KTsKKwkJfQorCX0KKworCS8qKgorCSAqIFRoaXMgYWNjZXNzZXMgYSBjYWNoZWQgdmVyc2lvbiBvZiB0aGUgY29udGVudCBvdXRsaW5lci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgSUNvbnRlbnRPdXRsaW5lUGFnZSBnZXRDb250ZW50T3V0bGluZVBhZ2UoKSB7CisJCWlmIChjb250ZW50T3V0bGluZVBhZ2UgPT0gbnVsbCkgeworCQkJLy8gVGhlIGNvbnRlbnQgb3V0bGluZSBpcyBqdXN0IGEgdHJlZS4KKwkJCS8vCisJCQljbGFzcyBNeUNvbnRlbnRPdXRsaW5lUGFnZSBleHRlbmRzIENvbnRlbnRPdXRsaW5lUGFnZSB7CisJCQkJQE92ZXJyaWRlCisJCQkJcHVibGljIHZvaWQgY3JlYXRlQ29udHJvbChDb21wb3NpdGUgcGFyZW50KSB7CisJCQkJCXN1cGVyLmNyZWF0ZUNvbnRyb2wocGFyZW50KTsKKwkJCQkJY29udGVudE91dGxpbmVWaWV3ZXIgPSBnZXRUcmVlVmlld2VyKCk7CisJCQkJCWNvbnRlbnRPdXRsaW5lVmlld2VyLmFkZFNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcih0aGlzKTsKKworCQkJCQkvLyBTZXQgdXAgdGhlIHRyZWUgdmlld2VyLgorCQkJCQkvLworCQkJCQljb250ZW50T3V0bGluZVZpZXdlci5zZXRDb250ZW50UHJvdmlkZXIobmV3IEFkYXB0ZXJGYWN0b3J5Q29udGVudFByb3ZpZGVyKGFkYXB0ZXJGYWN0b3J5KSk7CisJCQkJCWNvbnRlbnRPdXRsaW5lVmlld2VyLnNldExhYmVsUHJvdmlkZXIobmV3IEFkYXB0ZXJGYWN0b3J5TGFiZWxQcm92aWRlcihhZGFwdGVyRmFjdG9yeSkpOworCQkJCQljb250ZW50T3V0bGluZVZpZXdlci5zZXRJbnB1dChlZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkpOworCisJCQkJCS8vIE1ha2Ugc3VyZSBvdXIgcG9wdXBzIHdvcmsuCisJCQkJCS8vCisJCQkJCWNyZWF0ZUNvbnRleHRNZW51Rm9yKGNvbnRlbnRPdXRsaW5lVmlld2VyKTsKKworCQkJCQlpZiAoIWVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKS5nZXRSZXNvdXJjZXMoKS5pc0VtcHR5KCkpIHsKKwkJCQkJICAvLyBTZWxlY3QgdGhlIHJvb3Qgb2JqZWN0IGluIHRoZSB2aWV3LgorCQkJCQkgIC8vCisJCQkJCSAgY29udGVudE91dGxpbmVWaWV3ZXIuc2V0U2VsZWN0aW9uKG5ldyBTdHJ1Y3R1cmVkU2VsZWN0aW9uKGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKS5nZXRSZXNvdXJjZXMoKS5nZXQoMCkpLCB0cnVlKTsKKwkJCQkJfQorCQkJCX0KKworCQkJCUBPdmVycmlkZQorCQkJCXB1YmxpYyB2b2lkIG1ha2VDb250cmlidXRpb25zKElNZW51TWFuYWdlciBtZW51TWFuYWdlciwgSVRvb2xCYXJNYW5hZ2VyIHRvb2xCYXJNYW5hZ2VyLCBJU3RhdHVzTGluZU1hbmFnZXIgc3RhdHVzTGluZU1hbmFnZXIpIHsKKwkJCQkJc3VwZXIubWFrZUNvbnRyaWJ1dGlvbnMobWVudU1hbmFnZXIsIHRvb2xCYXJNYW5hZ2VyLCBzdGF0dXNMaW5lTWFuYWdlcik7CisJCQkJCWNvbnRlbnRPdXRsaW5lU3RhdHVzTGluZU1hbmFnZXIgPSBzdGF0dXNMaW5lTWFuYWdlcjsKKwkJCQl9CisKKwkJCQlAT3ZlcnJpZGUKKwkJCQlwdWJsaWMgdm9pZCBzZXRBY3Rpb25CYXJzKElBY3Rpb25CYXJzIGFjdGlvbkJhcnMpIHsKKwkJCQkJc3VwZXIuc2V0QWN0aW9uQmFycyhhY3Rpb25CYXJzKTsKKwkJCQkJZ2V0QWN0aW9uQmFyQ29udHJpYnV0b3IoKS5zaGFyZUdsb2JhbEFjdGlvbnModGhpcywgYWN0aW9uQmFycyk7CisJCQkJfQorCQkJfQorCisJCQljb250ZW50T3V0bGluZVBhZ2UgPSBuZXcgTXlDb250ZW50T3V0bGluZVBhZ2UoKTsKKworCQkJLy8gTGlzdGVuIHRvIHNlbGVjdGlvbiBzbyB0aGF0IHdlIGNhbiBoYW5kbGUgaXQgaXMgYSBzcGVjaWFsIHdheS4KKwkJCS8vCisJCQljb250ZW50T3V0bGluZVBhZ2UuYWRkU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyCisJCQkJKG5ldyBJU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyKCkgeworCQkJCQkgLy8gVGhpcyBlbnN1cmVzIHRoYXQgd2UgaGFuZGxlIHNlbGVjdGlvbnMgY29ycmVjdGx5LgorCQkJCQkgLy8KKwkJCQkJIHB1YmxpYyB2b2lkIHNlbGVjdGlvbkNoYW5nZWQoU2VsZWN0aW9uQ2hhbmdlZEV2ZW50IGV2ZW50KSB7CisJCQkJCQkgaGFuZGxlQ29udGVudE91dGxpbmVTZWxlY3Rpb24oZXZlbnQuZ2V0U2VsZWN0aW9uKCkpOworCQkJCQkgfQorCQkJCSB9KTsKKwkJfQorCisJCXJldHVybiBjb250ZW50T3V0bGluZVBhZ2U7CisJfQorCisJLyoqCisJICogVGhpcyBhY2Nlc3NlcyBhIGNhY2hlZCB2ZXJzaW9uIG9mIHRoZSBwcm9wZXJ0eSBzaGVldC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgSVByb3BlcnR5U2hlZXRQYWdlIGdldFByb3BlcnR5U2hlZXRQYWdlKCkgeworCQlpZiAocHJvcGVydHlTaGVldFBhZ2UgPT0gbnVsbCkgeworCQkJcHJvcGVydHlTaGVldFBhZ2UgPQorCQkJCW5ldyBFeHRlbmRlZFByb3BlcnR5U2hlZXRQYWdlKGVkaXRpbmdEb21haW4pIHsKKwkJCQkJQE92ZXJyaWRlCisJCQkJCXB1YmxpYyB2b2lkIHNldFNlbGVjdGlvblRvVmlld2VyKExpc3Q8Pz4gc2VsZWN0aW9uKSB7CisJCQkJCQlMYWJlbHNFZGl0b3IudGhpcy5zZXRTZWxlY3Rpb25Ub1ZpZXdlcihzZWxlY3Rpb24pOworCQkJCQkJTGFiZWxzRWRpdG9yLnRoaXMuc2V0Rm9jdXMoKTsKKwkJCQkJfQorCisJCQkJCUBPdmVycmlkZQorCQkJCQlwdWJsaWMgdm9pZCBzZXRBY3Rpb25CYXJzKElBY3Rpb25CYXJzIGFjdGlvbkJhcnMpIHsKKwkJCQkJCXN1cGVyLnNldEFjdGlvbkJhcnMoYWN0aW9uQmFycyk7CisJCQkJCQlnZXRBY3Rpb25CYXJDb250cmlidXRvcigpLnNoYXJlR2xvYmFsQWN0aW9ucyh0aGlzLCBhY3Rpb25CYXJzKTsKKwkJCQkJfQorCQkJCX07CisJCQlwcm9wZXJ0eVNoZWV0UGFnZS5zZXRQcm9wZXJ0eVNvdXJjZVByb3ZpZGVyKG5ldyBBZGFwdGVyRmFjdG9yeUNvbnRlbnRQcm92aWRlcihhZGFwdGVyRmFjdG9yeSkpOworCQl9CisKKwkJcmV0dXJuIHByb3BlcnR5U2hlZXRQYWdlOworCX0KKworCS8qKgorCSAqIFRoaXMgZGVhbHMgd2l0aCBob3cgd2Ugd2FudCBzZWxlY3Rpb24gaW4gdGhlIG91dGxpbmVyIHRvIGFmZmVjdCB0aGUgb3RoZXIgdmlld3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgaGFuZGxlQ29udGVudE91dGxpbmVTZWxlY3Rpb24oSVNlbGVjdGlvbiBzZWxlY3Rpb24pIHsKKwkJaWYgKHNlbGVjdGlvblZpZXdlciAhPSBudWxsICYmICFzZWxlY3Rpb24uaXNFbXB0eSgpICYmIHNlbGVjdGlvbiBpbnN0YW5jZW9mIElTdHJ1Y3R1cmVkU2VsZWN0aW9uKSB7CisJCQlJdGVyYXRvcjw/PiBzZWxlY3RlZEVsZW1lbnRzID0gKChJU3RydWN0dXJlZFNlbGVjdGlvbilzZWxlY3Rpb24pLml0ZXJhdG9yKCk7CisJCQlpZiAoc2VsZWN0ZWRFbGVtZW50cy5oYXNOZXh0KCkpIHsKKwkJCQkvLyBHZXQgdGhlIGZpcnN0IHNlbGVjdGVkIGVsZW1lbnQuCisJCQkJLy8KKwkJCQlPYmplY3Qgc2VsZWN0ZWRFbGVtZW50ID0gc2VsZWN0ZWRFbGVtZW50cy5uZXh0KCk7CisKKwkJCQlBcnJheUxpc3Q8T2JqZWN0PiBzZWxlY3Rpb25MaXN0ID0gbmV3IEFycmF5TGlzdDxPYmplY3Q+KCk7CisJCQkJc2VsZWN0aW9uTGlzdC5hZGQoc2VsZWN0ZWRFbGVtZW50KTsKKwkJCQl3aGlsZSAoc2VsZWN0ZWRFbGVtZW50cy5oYXNOZXh0KCkpIHsKKwkJCQkJc2VsZWN0aW9uTGlzdC5hZGQoc2VsZWN0ZWRFbGVtZW50cy5uZXh0KCkpOworCQkJCX0KKworCQkJCS8vIFNldCB0aGUgc2VsZWN0aW9uIHRvIHRoZSB3aWRnZXQuCisJCQkJLy8KKwkJCQlzZWxlY3Rpb25WaWV3ZXIuc2V0U2VsZWN0aW9uKG5ldyBTdHJ1Y3R1cmVkU2VsZWN0aW9uKHNlbGVjdGlvbkxpc3QpKTsKKwkJCX0KKwkJfQorCX0KKworCS8qKgorCSAqIFRoaXMgaXMgZm9yIGltcGxlbWVudGluZyB7QGxpbmsgSUVkaXRvclBhcnR9IGFuZCBzaW1wbHkgdGVzdHMgdGhlIGNvbW1hbmQgc3RhY2suCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIGJvb2xlYW4gaXNEaXJ0eSgpIHsKKwkJcmV0dXJuICgoQmFzaWNDb21tYW5kU3RhY2spZWRpdGluZ0RvbWFpbi5nZXRDb21tYW5kU3RhY2soKSkuaXNTYXZlTmVlZGVkKCk7CisJfQorCisJLyoqCisJICogVGhpcyBpcyBmb3IgaW1wbGVtZW50aW5nIHtAbGluayBJRWRpdG9yUGFydH0gYW5kIHNpbXBseSBzYXZlcyB0aGUgbW9kZWwgZmlsZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBkb1NhdmUoSVByb2dyZXNzTW9uaXRvciBwcm9ncmVzc01vbml0b3IpIHsKKwkJLy8gU2F2ZSBvbmx5IHJlc291cmNlcyB0aGF0IGhhdmUgYWN0dWFsbHkgY2hhbmdlZC4KKwkJLy8KKwkJZmluYWwgTWFwPE9iamVjdCwgT2JqZWN0PiBzYXZlT3B0aW9ucyA9IG5ldyBIYXNoTWFwPE9iamVjdCwgT2JqZWN0PigpOworCQlzYXZlT3B0aW9ucy5wdXQoUmVzb3VyY2UuT1BUSU9OX1NBVkVfT05MWV9JRl9DSEFOR0VELCBSZXNvdXJjZS5PUFRJT05fU0FWRV9PTkxZX0lGX0NIQU5HRURfTUVNT1JZX0JVRkZFUik7CisKKwkJLy8gRG8gdGhlIHdvcmsgd2l0aGluIGFuIG9wZXJhdGlvbiBiZWNhdXNlIHRoaXMgaXMgYSBsb25nIHJ1bm5pbmcgYWN0aXZpdHkgdGhhdCBtb2RpZmllcyB0aGUgd29ya2JlbmNoLgorCQkvLworCQlXb3Jrc3BhY2VNb2RpZnlPcGVyYXRpb24gb3BlcmF0aW9uID0KKwkJCW5ldyBXb3Jrc3BhY2VNb2RpZnlPcGVyYXRpb24oKSB7CisJCQkJLy8gVGhpcyBpcyB0aGUgbWV0aG9kIHRoYXQgZ2V0cyBpbnZva2VkIHdoZW4gdGhlIG9wZXJhdGlvbiBydW5zLgorCQkJCS8vCisJCQkJQE92ZXJyaWRlCisJCQkJcHVibGljIHZvaWQgZXhlY3V0ZShJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IpIHsKKwkJCQkJLy8gU2F2ZSB0aGUgcmVzb3VyY2VzIHRvIHRoZSBmaWxlIHN5c3RlbS4KKwkJCQkJLy8KKwkJCQkJYm9vbGVhbiBmaXJzdCA9IHRydWU7CisJCQkJCWZvciAoUmVzb3VyY2UgcmVzb3VyY2UgOiBlZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkuZ2V0UmVzb3VyY2VzKCkpIHsKKwkJCQkJCWlmICgoZmlyc3QgfHwgIXJlc291cmNlLmdldENvbnRlbnRzKCkuaXNFbXB0eSgpIHx8IGlzUGVyc2lzdGVkKHJlc291cmNlKSkgJiYgIWVkaXRpbmdEb21haW4uaXNSZWFkT25seShyZXNvdXJjZSkpIHsKKwkJCQkJCQl0cnkgeworCQkJCQkJCQlsb25nIHRpbWVTdGFtcCA9IHJlc291cmNlLmdldFRpbWVTdGFtcCgpOworCQkJCQkJCQlyZXNvdXJjZS5zYXZlKHNhdmVPcHRpb25zKTsKKwkJCQkJCQkJaWYgKHJlc291cmNlLmdldFRpbWVTdGFtcCgpICE9IHRpbWVTdGFtcCkgeworCQkJCQkJCQkJc2F2ZWRSZXNvdXJjZXMuYWRkKHJlc291cmNlKTsKKwkJCQkJCQkJfQorCQkJCQkJCX0KKwkJCQkJCQljYXRjaCAoRXhjZXB0aW9uIGV4Y2VwdGlvbikgeworCQkJCQkJCQlyZXNvdXJjZVRvRGlhZ25vc3RpY01hcC5wdXQocmVzb3VyY2UsIGFuYWx5emVSZXNvdXJjZVByb2JsZW1zKHJlc291cmNlLCBleGNlcHRpb24pKTsKKwkJCQkJCQl9CisJCQkJCQkJZmlyc3QgPSBmYWxzZTsKKwkJCQkJCX0KKwkJCQkJfQorCQkJCX0KKwkJCX07CisKKwkJdXBkYXRlUHJvYmxlbUluZGljYXRpb24gPSBmYWxzZTsKKwkJdHJ5IHsKKwkJCS8vIFRoaXMgcnVucyB0aGUgb3B0aW9ucywgYW5kIHNob3dzIHByb2dyZXNzLgorCQkJLy8KKwkJCW5ldyBQcm9ncmVzc01vbml0b3JEaWFsb2coZ2V0U2l0ZSgpLmdldFNoZWxsKCkpLnJ1bih0cnVlLCBmYWxzZSwgb3BlcmF0aW9uKTsKKworCQkJLy8gUmVmcmVzaCB0aGUgbmVjZXNzYXJ5IHN0YXRlLgorCQkJLy8KKwkJCSgoQmFzaWNDb21tYW5kU3RhY2spZWRpdGluZ0RvbWFpbi5nZXRDb21tYW5kU3RhY2soKSkuc2F2ZUlzRG9uZSgpOworCQkJZmlyZVByb3BlcnR5Q2hhbmdlKElFZGl0b3JQYXJ0LlBST1BfRElSVFkpOworCQl9CisJCWNhdGNoIChFeGNlcHRpb24gZXhjZXB0aW9uKSB7CisJCQkvLyBTb21ldGhpbmcgd2VudCB3cm9uZyB0aGF0IHNob3VsZG4ndC4KKwkJCS8vCisJCQlUZXN0dXRpbGl0eUVkaXRQbHVnaW4uSU5TVEFOQ0UubG9nKGV4Y2VwdGlvbik7CisJCX0KKwkJdXBkYXRlUHJvYmxlbUluZGljYXRpb24gPSB0cnVlOworCQl1cGRhdGVQcm9ibGVtSW5kaWNhdGlvbigpOworCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyB3aGV0aGVyIHNvbWV0aGluZyBoYXMgYmVlbiBwZXJzaXN0ZWQgdG8gdGhlIFVSSSBvZiB0aGUgc3BlY2lmaWVkIHJlc291cmNlLgorCSAqIFRoZSBpbXBsZW1lbnRhdGlvbiB1c2VzIHRoZSBVUkkgY29udmVydGVyIGZyb20gdGhlIGVkaXRvcidzIHJlc291cmNlIHNldCB0byB0cnkgdG8gb3BlbiBhbiBpbnB1dCBzdHJlYW0uIAorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBib29sZWFuIGlzUGVyc2lzdGVkKFJlc291cmNlIHJlc291cmNlKSB7CisJCWJvb2xlYW4gcmVzdWx0ID0gZmFsc2U7CisJCXRyeSB7CisJCQlJbnB1dFN0cmVhbSBzdHJlYW0gPSBlZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkuZ2V0VVJJQ29udmVydGVyKCkuY3JlYXRlSW5wdXRTdHJlYW0ocmVzb3VyY2UuZ2V0VVJJKCkpOworCQkJaWYgKHN0cmVhbSAhPSBudWxsKSB7CisJCQkJcmVzdWx0ID0gdHJ1ZTsKKwkJCQlzdHJlYW0uY2xvc2UoKTsKKwkJCX0KKwkJfQorCQljYXRjaCAoSU9FeGNlcHRpb24gZSkgeworCQkJLy8gSWdub3JlCisJCX0KKwkJcmV0dXJuIHJlc3VsdDsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFsd2F5cyByZXR1cm5zIHRydWUgYmVjYXVzZSBpdCBpcyBub3QgY3VycmVudGx5IHN1cHBvcnRlZC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgYm9vbGVhbiBpc1NhdmVBc0FsbG93ZWQoKSB7CisJCXJldHVybiB0cnVlOworCX0KKworCS8qKgorCSAqIFRoaXMgYWxzbyBjaGFuZ2VzIHRoZSBlZGl0b3IncyBpbnB1dC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBkb1NhdmVBcygpIHsKKwkJU2F2ZUFzRGlhbG9nIHNhdmVBc0RpYWxvZyA9IG5ldyBTYXZlQXNEaWFsb2coZ2V0U2l0ZSgpLmdldFNoZWxsKCkpOworCQlzYXZlQXNEaWFsb2cub3BlbigpOworCQlJUGF0aCBwYXRoID0gc2F2ZUFzRGlhbG9nLmdldFJlc3VsdCgpOworCQlpZiAocGF0aCAhPSBudWxsKSB7CisJCQlJRmlsZSBmaWxlID0gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmdldFJvb3QoKS5nZXRGaWxlKHBhdGgpOworCQkJaWYgKGZpbGUgIT0gbnVsbCkgeworCQkJCWRvU2F2ZUFzKFVSSS5jcmVhdGVQbGF0Zm9ybVJlc291cmNlVVJJKGZpbGUuZ2V0RnVsbFBhdGgoKS50b1N0cmluZygpLCB0cnVlKSwgbmV3IEZpbGVFZGl0b3JJbnB1dChmaWxlKSk7CisJCQl9CisJCX0KKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBkb1NhdmVBcyhVUkkgdXJpLCBJRWRpdG9ySW5wdXQgZWRpdG9ySW5wdXQpIHsKKwkJKGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKS5nZXRSZXNvdXJjZXMoKS5nZXQoMCkpLnNldFVSSSh1cmkpOworCQlzZXRJbnB1dFdpdGhOb3RpZnkoZWRpdG9ySW5wdXQpOworCQlzZXRQYXJ0TmFtZShlZGl0b3JJbnB1dC5nZXROYW1lKCkpOworCQlJUHJvZ3Jlc3NNb25pdG9yIHByb2dyZXNzTW9uaXRvciA9CisJCQlnZXRBY3Rpb25CYXJzKCkuZ2V0U3RhdHVzTGluZU1hbmFnZXIoKSAhPSBudWxsID8KKwkJCQlnZXRBY3Rpb25CYXJzKCkuZ2V0U3RhdHVzTGluZU1hbmFnZXIoKS5nZXRQcm9ncmVzc01vbml0b3IoKSA6CisJCQkJbmV3IE51bGxQcm9ncmVzc01vbml0b3IoKTsKKwkJZG9TYXZlKHByb2dyZXNzTW9uaXRvcik7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgZ290b01hcmtlcihJTWFya2VyIG1hcmtlcikgeworCQl0cnkgeworCQkJaWYgKG1hcmtlci5nZXRUeXBlKCkuZXF1YWxzKEVWYWxpZGF0b3IuTUFSS0VSKSkgeworCQkJCVN0cmluZyB1cmlBdHRyaWJ1dGUgPSBtYXJrZXIuZ2V0QXR0cmlidXRlKEVWYWxpZGF0b3IuVVJJX0FUVFJJQlVURSwgbnVsbCk7CisJCQkJaWYgKHVyaUF0dHJpYnV0ZSAhPSBudWxsKSB7CisJCQkJCVVSSSB1cmkgPSBVUkkuY3JlYXRlVVJJKHVyaUF0dHJpYnV0ZSk7CisJCQkJCUVPYmplY3QgZU9iamVjdCA9IGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKS5nZXRFT2JqZWN0KHVyaSwgdHJ1ZSk7CisJCQkJCWlmIChlT2JqZWN0ICE9IG51bGwpIHsKKwkJCQkJICBzZXRTZWxlY3Rpb25Ub1ZpZXdlcihDb2xsZWN0aW9ucy5zaW5nbGV0b24oZWRpdGluZ0RvbWFpbi5nZXRXcmFwcGVyKGVPYmplY3QpKSk7CisJCQkJCX0KKwkJCQl9CisJCQl9CisJCX0KKwkJY2F0Y2ggKENvcmVFeGNlcHRpb24gZXhjZXB0aW9uKSB7CisJCQlUZXN0dXRpbGl0eUVkaXRQbHVnaW4uSU5TVEFOQ0UubG9nKGV4Y2VwdGlvbik7CisJCX0KKwl9CisKKwkvKioKKwkgKiBUaGlzIGlzIGNhbGxlZCBkdXJpbmcgc3RhcnR1cC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBpbml0KElFZGl0b3JTaXRlIHNpdGUsIElFZGl0b3JJbnB1dCBlZGl0b3JJbnB1dCkgeworCQlzZXRTaXRlKHNpdGUpOworCQlzZXRJbnB1dFdpdGhOb3RpZnkoZWRpdG9ySW5wdXQpOworCQlzZXRQYXJ0TmFtZShlZGl0b3JJbnB1dC5nZXROYW1lKCkpOworCQlzaXRlLnNldFNlbGVjdGlvblByb3ZpZGVyKHRoaXMpOworCQlzaXRlLmdldFBhZ2UoKS5hZGRQYXJ0TGlzdGVuZXIocGFydExpc3RlbmVyKTsKKwkJUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmFkZFJlc291cmNlQ2hhbmdlTGlzdGVuZXIocmVzb3VyY2VDaGFuZ2VMaXN0ZW5lciwgSVJlc291cmNlQ2hhbmdlRXZlbnQuUE9TVF9DSEFOR0UpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIHNldEZvY3VzKCkgeworCQlnZXRDb250cm9sKGdldEFjdGl2ZVBhZ2UoKSkuc2V0Rm9jdXMoKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGltcGxlbWVudHMge0BsaW5rIG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvblByb3ZpZGVyfS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBhZGRTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIoSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lciBsaXN0ZW5lcikgeworCQlzZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXJzLmFkZChsaXN0ZW5lcik7CisJfQorCisJLyoqCisJICogVGhpcyBpbXBsZW1lbnRzIHtAbGluayBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb25Qcm92aWRlcn0uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgcmVtb3ZlU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyKElTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIgbGlzdGVuZXIpIHsKKwkJc2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVycy5yZW1vdmUobGlzdGVuZXIpOworCX0KKworCS8qKgorCSAqIFRoaXMgaW1wbGVtZW50cyB7QGxpbmsgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uUHJvdmlkZXJ9IHRvIHJldHVybiB0aGlzIGVkaXRvcidzIG92ZXJhbGwgc2VsZWN0aW9uLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBJU2VsZWN0aW9uIGdldFNlbGVjdGlvbigpIHsKKwkJcmV0dXJuIGVkaXRvclNlbGVjdGlvbjsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGltcGxlbWVudHMge0BsaW5rIG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvblByb3ZpZGVyfSB0byBzZXQgdGhpcyBlZGl0b3IncyBvdmVyYWxsIHNlbGVjdGlvbi4KKwkgKiBDYWxsaW5nIHRoaXMgcmVzdWx0IHdpbGwgbm90aWZ5IHRoZSBsaXN0ZW5lcnMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgc2V0U2VsZWN0aW9uKElTZWxlY3Rpb24gc2VsZWN0aW9uKSB7CisJCWVkaXRvclNlbGVjdGlvbiA9IHNlbGVjdGlvbjsKKworCQlmb3IgKElTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIgbGlzdGVuZXIgOiBzZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXJzKSB7CisJCQlsaXN0ZW5lci5zZWxlY3Rpb25DaGFuZ2VkKG5ldyBTZWxlY3Rpb25DaGFuZ2VkRXZlbnQodGhpcywgc2VsZWN0aW9uKSk7CisJCX0KKwkJc2V0U3RhdHVzTGluZU1hbmFnZXIoc2VsZWN0aW9uKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRTdGF0dXNMaW5lTWFuYWdlcihJU2VsZWN0aW9uIHNlbGVjdGlvbikgeworCQlJU3RhdHVzTGluZU1hbmFnZXIgc3RhdHVzTGluZU1hbmFnZXIgPSBjdXJyZW50Vmlld2VyICE9IG51bGwgJiYgY3VycmVudFZpZXdlciA9PSBjb250ZW50T3V0bGluZVZpZXdlciA/CisJCQljb250ZW50T3V0bGluZVN0YXR1c0xpbmVNYW5hZ2VyIDogZ2V0QWN0aW9uQmFycygpLmdldFN0YXR1c0xpbmVNYW5hZ2VyKCk7CisKKwkJaWYgKHN0YXR1c0xpbmVNYW5hZ2VyICE9IG51bGwpIHsKKwkJCWlmIChzZWxlY3Rpb24gaW5zdGFuY2VvZiBJU3RydWN0dXJlZFNlbGVjdGlvbikgeworCQkJCUNvbGxlY3Rpb248Pz4gY29sbGVjdGlvbiA9ICgoSVN0cnVjdHVyZWRTZWxlY3Rpb24pc2VsZWN0aW9uKS50b0xpc3QoKTsKKwkJCQlzd2l0Y2ggKGNvbGxlY3Rpb24uc2l6ZSgpKSB7CisJCQkJCWNhc2UgMDogeworCQkJCQkJc3RhdHVzTGluZU1hbmFnZXIuc2V0TWVzc2FnZShnZXRTdHJpbmcoIl9VSV9Ob09iamVjdFNlbGVjdGVkIikpOyAvLyROT04tTkxTLTEkCisJCQkJCQlicmVhazsKKwkJCQkJfQorCQkJCQljYXNlIDE6IHsKKwkJCQkJCVN0cmluZyB0ZXh0ID0gbmV3IEFkYXB0ZXJGYWN0b3J5SXRlbURlbGVnYXRvcihhZGFwdGVyRmFjdG9yeSkuZ2V0VGV4dChjb2xsZWN0aW9uLml0ZXJhdG9yKCkubmV4dCgpKTsKKwkJCQkJCXN0YXR1c0xpbmVNYW5hZ2VyLnNldE1lc3NhZ2UoZ2V0U3RyaW5nKCJfVUlfU2luZ2xlT2JqZWN0U2VsZWN0ZWQiLCB0ZXh0KSk7IC8vJE5PTi1OTFMtMSQKKwkJCQkJCWJyZWFrOworCQkJCQl9CisJCQkJCWRlZmF1bHQ6IHsKKwkJCQkJCXN0YXR1c0xpbmVNYW5hZ2VyLnNldE1lc3NhZ2UoZ2V0U3RyaW5nKCJfVUlfTXVsdGlPYmplY3RTZWxlY3RlZCIsIEludGVnZXIudG9TdHJpbmcoY29sbGVjdGlvbi5zaXplKCkpKSk7IC8vJE5PTi1OTFMtMSQKKwkJCQkJCWJyZWFrOworCQkJCQl9CisJCQkJfQorCQkJfQorCQkJZWxzZSB7CisJCQkJc3RhdHVzTGluZU1hbmFnZXIuc2V0TWVzc2FnZSgiIik7IC8vJE5PTi1OTFMtMSQKKwkJCX0KKwkJfQorCX0KKworCS8qKgorCSAqIFRoaXMgbG9va3MgdXAgYSBzdHJpbmcgaW4gdGhlIHBsdWdpbidzIHBsdWdpbi5wcm9wZXJ0aWVzIGZpbGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIGdldFN0cmluZyhTdHJpbmcga2V5KSB7CisJCXJldHVybiBUZXN0dXRpbGl0eUVkaXRQbHVnaW4uSU5TVEFOQ0UuZ2V0U3RyaW5nKGtleSk7CisJfQorCisJLyoqCisJICogVGhpcyBsb29rcyB1cCBhIHN0cmluZyBpbiBwbHVnaW4ucHJvcGVydGllcywgbWFraW5nIGEgc3Vic3RpdHV0aW9uLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByaXZhdGUgc3RhdGljIFN0cmluZyBnZXRTdHJpbmcoU3RyaW5nIGtleSwgT2JqZWN0IHMxKSB7CisJCXJldHVybiBUZXN0dXRpbGl0eUVkaXRQbHVnaW4uSU5TVEFOQ0UuZ2V0U3RyaW5nKGtleSwgbmV3IE9iamVjdCBbXSB7IHMxIH0pOworCX0KKworCS8qKgorCSAqIFRoaXMgaW1wbGVtZW50cyB7QGxpbmsgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklNZW51TGlzdGVuZXJ9IHRvIGhlbHAgZmlsbCB0aGUgY29udGV4dCBtZW51cyB3aXRoIGNvbnRyaWJ1dGlvbnMgZnJvbSB0aGUgRWRpdCBtZW51LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIG1lbnVBYm91dFRvU2hvdyhJTWVudU1hbmFnZXIgbWVudU1hbmFnZXIpIHsKKwkJKChJTWVudUxpc3RlbmVyKWdldEVkaXRvclNpdGUoKS5nZXRBY3Rpb25CYXJDb250cmlidXRvcigpKS5tZW51QWJvdXRUb1Nob3cobWVudU1hbmFnZXIpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFZGl0aW5nRG9tYWluQWN0aW9uQmFyQ29udHJpYnV0b3IgZ2V0QWN0aW9uQmFyQ29udHJpYnV0b3IoKSB7CisJCXJldHVybiAoRWRpdGluZ0RvbWFpbkFjdGlvbkJhckNvbnRyaWJ1dG9yKWdldEVkaXRvclNpdGUoKS5nZXRBY3Rpb25CYXJDb250cmlidXRvcigpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBJQWN0aW9uQmFycyBnZXRBY3Rpb25CYXJzKCkgeworCQlyZXR1cm4gZ2V0QWN0aW9uQmFyQ29udHJpYnV0b3IoKS5nZXRBY3Rpb25CYXJzKCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEFkYXB0ZXJGYWN0b3J5IGdldEFkYXB0ZXJGYWN0b3J5KCkgeworCQlyZXR1cm4gYWRhcHRlckZhY3Rvcnk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgZGlzcG9zZSgpIHsKKwkJdXBkYXRlUHJvYmxlbUluZGljYXRpb24gPSBmYWxzZTsKKworCQlSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkucmVtb3ZlUmVzb3VyY2VDaGFuZ2VMaXN0ZW5lcihyZXNvdXJjZUNoYW5nZUxpc3RlbmVyKTsKKworCQlnZXRTaXRlKCkuZ2V0UGFnZSgpLnJlbW92ZVBhcnRMaXN0ZW5lcihwYXJ0TGlzdGVuZXIpOworCisJCWFkYXB0ZXJGYWN0b3J5LmRpc3Bvc2UoKTsKKworCQlpZiAoZ2V0QWN0aW9uQmFyQ29udHJpYnV0b3IoKS5nZXRBY3RpdmVFZGl0b3IoKSA9PSB0aGlzKSB7CisJCQlnZXRBY3Rpb25CYXJDb250cmlidXRvcigpLnNldEFjdGl2ZUVkaXRvcihudWxsKTsKKwkJfQorCisJCWlmIChwcm9wZXJ0eVNoZWV0UGFnZSAhPSBudWxsKSB7CisJCQlwcm9wZXJ0eVNoZWV0UGFnZS5kaXNwb3NlKCk7CisJCX0KKworCQlpZiAoY29udGVudE91dGxpbmVQYWdlICE9IG51bGwpIHsKKwkJCWNvbnRlbnRPdXRsaW5lUGFnZS5kaXNwb3NlKCk7CisJCX0KKworCQlzdXBlci5kaXNwb3NlKCk7CisJfQorCisJLyoqCisJICogUmV0dXJucyB3aGV0aGVyIHRoZSBvdXRsaW5lIHZpZXcgc2hvdWxkIGJlIHByZXNlbnRlZCB0byB0aGUgdXNlci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgYm9vbGVhbiBzaG93T3V0bGluZVZpZXcoKSB7CisJCXJldHVybiBmYWxzZTsKKwl9Cit9CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdGVzdHMvdXRpbC9sYWJlbHMvcHJlc2VudGF0aW9uL0xhYmVsc01vZGVsV2l6YXJkLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdGVzdHMvdXRpbC9sYWJlbHMvcHJlc2VudGF0aW9uL0xhYmVsc01vZGVsV2l6YXJkLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGJhZWMwOAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS90ZXN0cy91dGlsL2xhYmVscy9wcmVzZW50YXRpb24vTGFiZWxzTW9kZWxXaXphcmQuamF2YQpAQCAtMCwwICsxLDU5NyBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwubGFiZWxzLnByZXNlbnRhdGlvbjsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OworaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOworaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uczsKK2ltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuTWFwOworaW1wb3J0IGphdmEudXRpbC5NaXNzaW5nUmVzb3VyY2VFeGNlcHRpb247CitpbXBvcnQgamF2YS51dGlsLlN0cmluZ1Rva2VuaXplcjsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklDb250YWluZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUZpbGU7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUZvbGRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUmVzb3VyY2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuUmVzb3VyY2VzUGx1Z2luOworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUHJvZ3Jlc3NNb25pdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QYXRoOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5VUkk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzczsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzaWZpZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3Q7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnJlc291cmNlLlJlc291cmNlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5yZXNvdXJjZS5SZXNvdXJjZVNldDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUucmVzb3VyY2UuaW1wbC5SZXNvdXJjZVNldEltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnhtaS5YTUxSZXNvdXJjZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5wcm92aWRlci5FeHRlbmRlZEltYWdlUmVnaXN0cnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuZGlhbG9ncy5NZXNzYWdlRGlhbG9nOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTdHJ1Y3R1cmVkU2VsZWN0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuU3RydWN0dXJlZFNlbGVjdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS53aXphcmQuV2l6YXJkOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLndpemFyZC5XaXphcmRQYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC5kZWNvcmF0b3JzLnByb3ZpZGVyLlRlc3R1dGlsaXR5RWRpdFBsdWdpbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwubGFiZWxzLkxhYmVsc0ZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsLmxhYmVscy5MYWJlbHNQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5TV1Q7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5Nb2RpZnlFdmVudDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLk1vZGlmeUxpc3RlbmVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5sYXlvdXQuR3JpZERhdGE7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5HcmlkTGF5b3V0OworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbWJvOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5MYWJlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5JTmV3V2l6YXJkOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2g7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaFBhZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaFBhcnQ7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaFdpbmRvdzsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5QYXJ0SW5pdEV4Y2VwdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5hY3Rpb25zLldvcmtzcGFjZU1vZGlmeU9wZXJhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5kaWFsb2dzLldpemFyZE5ld0ZpbGVDcmVhdGlvblBhZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkucGFydC5GaWxlRWRpdG9ySW5wdXQ7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkucGFydC5JU2V0U2VsZWN0aW9uVGFyZ2V0OworCisKKy8qKgorICogVGhpcyBpcyBhIHNpbXBsZSB3aXphcmQgZm9yIGNyZWF0aW5nIGEgbmV3IG1vZGVsIGZpbGUuCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBMYWJlbHNNb2RlbFdpemFyZCBleHRlbmRzIFdpemFyZCBpbXBsZW1lbnRzIElOZXdXaXphcmQgeworCS8qKgorCSAqIFRoaXMgY2FjaGVzIGFuIGluc3RhbmNlIG9mIHRoZSBtb2RlbCBwYWNrYWdlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBMYWJlbHNQYWNrYWdlIGxhYmVsc1BhY2thZ2UgPSBMYWJlbHNQYWNrYWdlLmVJTlNUQU5DRTsKKworCS8qKgorCSAqIFRoaXMgY2FjaGVzIGFuIGluc3RhbmNlIG9mIHRoZSBtb2RlbCBmYWN0b3J5LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBMYWJlbHNGYWN0b3J5IGxhYmVsc0ZhY3RvcnkgPSBsYWJlbHNQYWNrYWdlLmdldExhYmVsc0ZhY3RvcnkoKTsKKworCS8qKgorCSAqIFRoaXMgaXMgdGhlIGZpbGUgY3JlYXRpb24gcGFnZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgTGFiZWxzTW9kZWxXaXphcmROZXdGaWxlQ3JlYXRpb25QYWdlIG5ld0ZpbGVDcmVhdGlvblBhZ2U7CisKKwkvKioKKwkgKiBUaGlzIGlzIHRoZSBpbml0aWFsIG9iamVjdCBjcmVhdGlvbiBwYWdlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBMYWJlbHNNb2RlbFdpemFyZEluaXRpYWxPYmplY3RDcmVhdGlvblBhZ2UgaW5pdGlhbE9iamVjdENyZWF0aW9uUGFnZTsKKworCS8qKgorCSAqIFJlbWVtYmVyIHRoZSBzZWxlY3Rpb24gZHVyaW5nIGluaXRpYWxpemF0aW9uIGZvciBwb3B1bGF0aW5nIHRoZSBkZWZhdWx0IGNvbnRhaW5lci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgSVN0cnVjdHVyZWRTZWxlY3Rpb24gc2VsZWN0aW9uOworCisJLyoqCisJICogUmVtZW1iZXIgdGhlIHdvcmtiZW5jaCBkdXJpbmcgaW5pdGlhbGl6YXRpb24uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIElXb3JrYmVuY2ggd29ya2JlbmNoOworCisJLyoqCisJICogQ2FjaGVzIHRoZSBuYW1lcyBvZiB0aGUgdHlwZXMgdGhhdCBjYW4gYmUgY3JlYXRlZCBhcyB0aGUgcm9vdCBvYmplY3QuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIExpc3Q8U3RyaW5nPiBpbml0aWFsT2JqZWN0TmFtZXM7CisKKwkvKioKKwkgKiBUaGlzIGp1c3QgcmVjb3JkcyB0aGUgaW5mb3JtYXRpb24uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgaW5pdChJV29ya2JlbmNoIHdvcmtiZW5jaCwgSVN0cnVjdHVyZWRTZWxlY3Rpb24gc2VsZWN0aW9uKSB7CisJCXRoaXMud29ya2JlbmNoID0gd29ya2JlbmNoOworCQl0aGlzLnNlbGVjdGlvbiA9IHNlbGVjdGlvbjsKKwkJc2V0V2luZG93VGl0bGUoVGVzdHV0aWxpdHlFZGl0UGx1Z2luLklOU1RBTkNFLmdldFN0cmluZygiX1VJX1dpemFyZF9sYWJlbCIpKTsgLy8kTk9OLU5MUy0xJAorCQlzZXREZWZhdWx0UGFnZUltYWdlRGVzY3JpcHRvcihFeHRlbmRlZEltYWdlUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0SW1hZ2VEZXNjcmlwdG9yKFRlc3R1dGlsaXR5RWRpdFBsdWdpbi5JTlNUQU5DRS5nZXRJbWFnZSgiZnVsbC93aXpiYW4vTmV3TGFiZWxzIikpKTsgLy8kTk9OLU5MUy0xJAorCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIG5hbWVzIG9mIHRoZSB0eXBlcyB0aGF0IGNhbiBiZSBjcmVhdGVkIGFzIHRoZSByb290IG9iamVjdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgQ29sbGVjdGlvbjxTdHJpbmc+IGdldEluaXRpYWxPYmplY3ROYW1lcygpIHsKKwkJaWYgKGluaXRpYWxPYmplY3ROYW1lcyA9PSBudWxsKSB7CisJCQlpbml0aWFsT2JqZWN0TmFtZXMgPSBuZXcgQXJyYXlMaXN0PFN0cmluZz4oKTsKKwkJCWZvciAoRUNsYXNzaWZpZXIgZUNsYXNzaWZpZXIgOiBsYWJlbHNQYWNrYWdlLmdldEVDbGFzc2lmaWVycygpKSB7CisJCQkJaWYgKGVDbGFzc2lmaWVyIGluc3RhbmNlb2YgRUNsYXNzKSB7CisJCQkJCUVDbGFzcyBlQ2xhc3MgPSAoRUNsYXNzKWVDbGFzc2lmaWVyOworCQkJCQlpZiAoIWVDbGFzcy5pc0Fic3RyYWN0KCkpIHsKKwkJCQkJCWluaXRpYWxPYmplY3ROYW1lcy5hZGQoZUNsYXNzLmdldE5hbWUoKSk7CisJCQkJCX0KKwkJCQl9CisJCQl9CisJCQlDb2xsZWN0aW9ucy5zb3J0KGluaXRpYWxPYmplY3ROYW1lcywgamF2YS50ZXh0LkNvbGxhdG9yLmdldEluc3RhbmNlKCkpOworCQl9CisJCXJldHVybiBpbml0aWFsT2JqZWN0TmFtZXM7CisJfQorCisJLyoqCisJICogQ3JlYXRlIGEgbmV3IG1vZGVsLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBFT2JqZWN0IGNyZWF0ZUluaXRpYWxNb2RlbCgpIHsKKwkJRUNsYXNzIGVDbGFzcyA9IChFQ2xhc3MpbGFiZWxzUGFja2FnZS5nZXRFQ2xhc3NpZmllcihpbml0aWFsT2JqZWN0Q3JlYXRpb25QYWdlLmdldEluaXRpYWxPYmplY3ROYW1lKCkpOworCQlFT2JqZWN0IHJvb3RPYmplY3QgPSBsYWJlbHNGYWN0b3J5LmNyZWF0ZShlQ2xhc3MpOworCQlyZXR1cm4gcm9vdE9iamVjdDsKKwl9CisKKwkvKioKKwkgKiBEbyB0aGUgd29yayBhZnRlciBldmVyeXRoaW5nIGlzIHNwZWNpZmllZC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgYm9vbGVhbiBwZXJmb3JtRmluaXNoKCkgeworCQl0cnkgeworCQkJLy8gUmVtZW1iZXIgdGhlIGZpbGUuCisJCQkvLworCQkJZmluYWwgSUZpbGUgbW9kZWxGaWxlID0gZ2V0TW9kZWxGaWxlKCk7CisKKwkJCS8vIERvIHRoZSB3b3JrIHdpdGhpbiBhbiBvcGVyYXRpb24uCisJCQkvLworCQkJV29ya3NwYWNlTW9kaWZ5T3BlcmF0aW9uIG9wZXJhdGlvbiA9CisJCQkJbmV3IFdvcmtzcGFjZU1vZGlmeU9wZXJhdGlvbigpIHsKKwkJCQkJQE92ZXJyaWRlCisJCQkJCXByb3RlY3RlZCB2b2lkIGV4ZWN1dGUoSVByb2dyZXNzTW9uaXRvciBwcm9ncmVzc01vbml0b3IpIHsKKwkJCQkJCXRyeSB7CisJCQkJCQkJLy8gQ3JlYXRlIGEgcmVzb3VyY2Ugc2V0CisJCQkJCQkJLy8KKwkJCQkJCQlSZXNvdXJjZVNldCByZXNvdXJjZVNldCA9IG5ldyBSZXNvdXJjZVNldEltcGwoKTsKKworCQkJCQkJCS8vIEdldCB0aGUgVVJJIG9mIHRoZSBtb2RlbCBmaWxlLgorCQkJCQkJCS8vCisJCQkJCQkJVVJJIGZpbGVVUkkgPSBVUkkuY3JlYXRlUGxhdGZvcm1SZXNvdXJjZVVSSShtb2RlbEZpbGUuZ2V0RnVsbFBhdGgoKS50b1N0cmluZygpLCB0cnVlKTsKKworCQkJCQkJCS8vIENyZWF0ZSBhIHJlc291cmNlIGZvciB0aGlzIGZpbGUuCisJCQkJCQkJLy8KKwkJCQkJCQlSZXNvdXJjZSByZXNvdXJjZSA9IHJlc291cmNlU2V0LmNyZWF0ZVJlc291cmNlKGZpbGVVUkkpOworCisJCQkJCQkJLy8gQWRkIHRoZSBpbml0aWFsIG1vZGVsIG9iamVjdCB0byB0aGUgY29udGVudHMuCisJCQkJCQkJLy8KKwkJCQkJCQlFT2JqZWN0IHJvb3RPYmplY3QgPSBjcmVhdGVJbml0aWFsTW9kZWwoKTsKKwkJCQkJCQlpZiAocm9vdE9iamVjdCAhPSBudWxsKSB7CisJCQkJCQkJCXJlc291cmNlLmdldENvbnRlbnRzKCkuYWRkKHJvb3RPYmplY3QpOworCQkJCQkJCX0KKworCQkJCQkJCS8vIFNhdmUgdGhlIGNvbnRlbnRzIG9mIHRoZSByZXNvdXJjZSB0byB0aGUgZmlsZSBzeXN0ZW0uCisJCQkJCQkJLy8KKwkJCQkJCQlNYXA8T2JqZWN0LCBPYmplY3Q+IG9wdGlvbnMgPSBuZXcgSGFzaE1hcDxPYmplY3QsIE9iamVjdD4oKTsKKwkJCQkJCQlvcHRpb25zLnB1dChYTUxSZXNvdXJjZS5PUFRJT05fRU5DT0RJTkcsIGluaXRpYWxPYmplY3RDcmVhdGlvblBhZ2UuZ2V0RW5jb2RpbmcoKSk7CisJCQkJCQkJcmVzb3VyY2Uuc2F2ZShvcHRpb25zKTsKKwkJCQkJCX0KKwkJCQkJCWNhdGNoIChFeGNlcHRpb24gZXhjZXB0aW9uKSB7CisJCQkJCQkJVGVzdHV0aWxpdHlFZGl0UGx1Z2luLklOU1RBTkNFLmxvZyhleGNlcHRpb24pOworCQkJCQkJfQorCQkJCQkJZmluYWxseSB7CisJCQkJCQkJcHJvZ3Jlc3NNb25pdG9yLmRvbmUoKTsKKwkJCQkJCX0KKwkJCQkJfQorCQkJCX07CisKKwkJCWdldENvbnRhaW5lcigpLnJ1bihmYWxzZSwgZmFsc2UsIG9wZXJhdGlvbik7CisKKwkJCS8vIFNlbGVjdCB0aGUgbmV3IGZpbGUgcmVzb3VyY2UgaW4gdGhlIGN1cnJlbnQgdmlldy4KKwkJCS8vCisJCQlJV29ya2JlbmNoV2luZG93IHdvcmtiZW5jaFdpbmRvdyA9IHdvcmtiZW5jaC5nZXRBY3RpdmVXb3JrYmVuY2hXaW5kb3coKTsKKwkJCUlXb3JrYmVuY2hQYWdlIHBhZ2UgPSB3b3JrYmVuY2hXaW5kb3cuZ2V0QWN0aXZlUGFnZSgpOworCQkJZmluYWwgSVdvcmtiZW5jaFBhcnQgYWN0aXZlUGFydCA9IHBhZ2UuZ2V0QWN0aXZlUGFydCgpOworCQkJaWYgKGFjdGl2ZVBhcnQgaW5zdGFuY2VvZiBJU2V0U2VsZWN0aW9uVGFyZ2V0KSB7CisJCQkJZmluYWwgSVNlbGVjdGlvbiB0YXJnZXRTZWxlY3Rpb24gPSBuZXcgU3RydWN0dXJlZFNlbGVjdGlvbihtb2RlbEZpbGUpOworCQkJCWdldFNoZWxsKCkuZ2V0RGlzcGxheSgpLmFzeW5jRXhlYworCQkJCQkobmV3IFJ1bm5hYmxlKCkgeworCQkJCQkJIHB1YmxpYyB2b2lkIHJ1bigpIHsKKwkJCQkJCQkgKChJU2V0U2VsZWN0aW9uVGFyZ2V0KWFjdGl2ZVBhcnQpLnNlbGVjdFJldmVhbCh0YXJnZXRTZWxlY3Rpb24pOworCQkJCQkJIH0KKwkJCQkJIH0pOworCQkJfQorCisJCQkvLyBPcGVuIGFuIGVkaXRvciBvbiB0aGUgbmV3IGZpbGUuCisJCQkvLworCQkJdHJ5IHsKKwkJCQlwYWdlLm9wZW5FZGl0b3IKKwkJCQkJKG5ldyBGaWxlRWRpdG9ySW5wdXQobW9kZWxGaWxlKSwKKwkJCQkJIHdvcmtiZW5jaC5nZXRFZGl0b3JSZWdpc3RyeSgpLmdldERlZmF1bHRFZGl0b3IobW9kZWxGaWxlLmdldEZ1bGxQYXRoKCkudG9TdHJpbmcoKSkuZ2V0SWQoKSk7CisJCQl9CisJCQljYXRjaCAoUGFydEluaXRFeGNlcHRpb24gZXhjZXB0aW9uKSB7CisJCQkJTWVzc2FnZURpYWxvZy5vcGVuRXJyb3Iod29ya2JlbmNoV2luZG93LmdldFNoZWxsKCksIFRlc3R1dGlsaXR5RWRpdFBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoIl9VSV9PcGVuRWRpdG9yRXJyb3JfbGFiZWwiKSwgZXhjZXB0aW9uLmdldE1lc3NhZ2UoKSk7IC8vJE5PTi1OTFMtMSQKKwkJCQlyZXR1cm4gZmFsc2U7CisJCQl9CisKKwkJCXJldHVybiB0cnVlOworCQl9CisJCWNhdGNoIChFeGNlcHRpb24gZXhjZXB0aW9uKSB7CisJCQlUZXN0dXRpbGl0eUVkaXRQbHVnaW4uSU5TVEFOQ0UubG9nKGV4Y2VwdGlvbik7CisJCQlyZXR1cm4gZmFsc2U7CisJCX0KKwl9CisKKwkvKioKKwkgKiBUaGlzIGlzIHRoZSBvbmUgcGFnZSBvZiB0aGUgd2l6YXJkLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBjbGFzcyBMYWJlbHNNb2RlbFdpemFyZE5ld0ZpbGVDcmVhdGlvblBhZ2UgZXh0ZW5kcyBXaXphcmROZXdGaWxlQ3JlYXRpb25QYWdlIHsKKwkJLyoqCisJCSAqIFBhc3MgaW4gdGhlIHNlbGVjdGlvbi4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCXB1YmxpYyBMYWJlbHNNb2RlbFdpemFyZE5ld0ZpbGVDcmVhdGlvblBhZ2UoU3RyaW5nIHBhZ2VJZCwgSVN0cnVjdHVyZWRTZWxlY3Rpb24gc2VsZWN0aW9uKSB7CisJCQlzdXBlcihwYWdlSWQsIHNlbGVjdGlvbik7CisJCX0KKworCQkvKioKKwkJICogVGhlIGZyYW1ld29yayBjYWxscyB0aGlzIHRvIHNlZSBpZiB0aGUgZmlsZSBpcyBjb3JyZWN0LgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJQE92ZXJyaWRlCisJCXByb3RlY3RlZCBib29sZWFuIHZhbGlkYXRlUGFnZSgpIHsKKwkJCWlmIChzdXBlci52YWxpZGF0ZVBhZ2UoKSkgeworCQkJCS8vIE1ha2Ugc3VyZSB0aGUgZmlsZSBlbmRzIGluICIubGFiZWxzIi4KKwkJCQkvLworCQkJCVN0cmluZyByZXF1aXJlZEV4dCA9IFRlc3R1dGlsaXR5RWRpdFBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoIl9VSV9MYWJlbHNFZGl0b3JGaWxlbmFtZUV4dGVuc2lvbiIpOyAvLyROT04tTkxTLTEkCisJCQkJU3RyaW5nIGVudGVyZWRFeHQgPSBuZXcgUGF0aChnZXRGaWxlTmFtZSgpKS5nZXRGaWxlRXh0ZW5zaW9uKCk7CisJCQkJaWYgKGVudGVyZWRFeHQgPT0gbnVsbCB8fCAhZW50ZXJlZEV4dC5lcXVhbHMocmVxdWlyZWRFeHQpKSB7CisJCQkJCXNldEVycm9yTWVzc2FnZShUZXN0dXRpbGl0eUVkaXRQbHVnaW4uSU5TVEFOQ0UuZ2V0U3RyaW5nKCJfV0FSTl9GaWxlbmFtZUV4dGVuc2lvbiIsIG5ldyBPYmplY3QgW10geyByZXF1aXJlZEV4dCB9KSk7IC8vJE5PTi1OTFMtMSQKKwkJCQkJcmV0dXJuIGZhbHNlOworCQkJCX0KKwkJCQllbHNlIHsKKwkJCQkJcmV0dXJuIHRydWU7CisJCQkJfQorCQkJfQorCQkJZWxzZSB7CisJCQkJcmV0dXJuIGZhbHNlOworCQkJfQorCQl9CisKKwkJLyoqCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlwdWJsaWMgSUZpbGUgZ2V0TW9kZWxGaWxlKCkgeworCQkJcmV0dXJuIFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5nZXRSb290KCkuZ2V0RmlsZShnZXRDb250YWluZXJGdWxsUGF0aCgpLmFwcGVuZChnZXRGaWxlTmFtZSgpKSk7CisJCX0KKwl9CisKKwkvKioKKwkgKiBUaGlzIGlzIHRoZSBwYWdlIHdoZXJlIHRoZSB0eXBlIG9mIG9iamVjdCB0byBjcmVhdGUgaXMgc2VsZWN0ZWQuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIGNsYXNzIExhYmVsc01vZGVsV2l6YXJkSW5pdGlhbE9iamVjdENyZWF0aW9uUGFnZSBleHRlbmRzIFdpemFyZFBhZ2UgeworCQkvKioKKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCXByb3RlY3RlZCBDb21ibyBpbml0aWFsT2JqZWN0RmllbGQ7CisKKwkJLyoqCisJCSAqIEBnZW5lcmF0ZWQKKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqLworCQlwcm90ZWN0ZWQgTGlzdDxTdHJpbmc+IGVuY29kaW5nczsKKworCQkvKioKKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCXByb3RlY3RlZCBDb21ibyBlbmNvZGluZ0ZpZWxkOworCisJCS8qKgorCQkgKiBQYXNzIGluIHRoZSBzZWxlY3Rpb24uCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlwdWJsaWMgTGFiZWxzTW9kZWxXaXphcmRJbml0aWFsT2JqZWN0Q3JlYXRpb25QYWdlKFN0cmluZyBwYWdlSWQpIHsKKwkJCXN1cGVyKHBhZ2VJZCk7CisJCX0KKworCQkvKioKKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCXB1YmxpYyB2b2lkIGNyZWF0ZUNvbnRyb2woQ29tcG9zaXRlIHBhcmVudCkgeworCQkJQ29tcG9zaXRlIGNvbXBvc2l0ZSA9IG5ldyBDb21wb3NpdGUocGFyZW50LCBTV1QuTk9ORSk7IHsKKwkJCQlHcmlkTGF5b3V0IGxheW91dCA9IG5ldyBHcmlkTGF5b3V0KCk7CisJCQkJbGF5b3V0Lm51bUNvbHVtbnMgPSAxOworCQkJCWxheW91dC52ZXJ0aWNhbFNwYWNpbmcgPSAxMjsKKwkJCQljb21wb3NpdGUuc2V0TGF5b3V0KGxheW91dCk7CisKKwkJCQlHcmlkRGF0YSBkYXRhID0gbmV3IEdyaWREYXRhKCk7CisJCQkJZGF0YS52ZXJ0aWNhbEFsaWdubWVudCA9IEdyaWREYXRhLkZJTEw7CisJCQkJZGF0YS5ncmFiRXhjZXNzVmVydGljYWxTcGFjZSA9IHRydWU7CisJCQkJZGF0YS5ob3Jpem9udGFsQWxpZ25tZW50ID0gR3JpZERhdGEuRklMTDsKKwkJCQljb21wb3NpdGUuc2V0TGF5b3V0RGF0YShkYXRhKTsKKwkJCX0KKworCQkJTGFiZWwgY29udGFpbmVyTGFiZWwgPSBuZXcgTGFiZWwoY29tcG9zaXRlLCBTV1QuTEVGVCk7CisJCQl7CisJCQkJY29udGFpbmVyTGFiZWwuc2V0VGV4dChUZXN0dXRpbGl0eUVkaXRQbHVnaW4uSU5TVEFOQ0UuZ2V0U3RyaW5nKCJfVUlfTW9kZWxPYmplY3QiKSk7IC8vJE5PTi1OTFMtMSQKKworCQkJCUdyaWREYXRhIGRhdGEgPSBuZXcgR3JpZERhdGEoKTsKKwkJCQlkYXRhLmhvcml6b250YWxBbGlnbm1lbnQgPSBHcmlkRGF0YS5GSUxMOworCQkJCWNvbnRhaW5lckxhYmVsLnNldExheW91dERhdGEoZGF0YSk7CisJCQl9CisKKwkJCWluaXRpYWxPYmplY3RGaWVsZCA9IG5ldyBDb21ibyhjb21wb3NpdGUsIFNXVC5CT1JERVIpOworCQkJeworCQkJCUdyaWREYXRhIGRhdGEgPSBuZXcgR3JpZERhdGEoKTsKKwkJCQlkYXRhLmhvcml6b250YWxBbGlnbm1lbnQgPSBHcmlkRGF0YS5GSUxMOworCQkJCWRhdGEuZ3JhYkV4Y2Vzc0hvcml6b250YWxTcGFjZSA9IHRydWU7CisJCQkJaW5pdGlhbE9iamVjdEZpZWxkLnNldExheW91dERhdGEoZGF0YSk7CisJCQl9CisKKwkJCWZvciAoU3RyaW5nIG9iamVjdE5hbWUgOiBnZXRJbml0aWFsT2JqZWN0TmFtZXMoKSkgeworCQkJCWluaXRpYWxPYmplY3RGaWVsZC5hZGQoZ2V0TGFiZWwob2JqZWN0TmFtZSkpOworCQkJfQorCisJCQlpZiAoaW5pdGlhbE9iamVjdEZpZWxkLmdldEl0ZW1Db3VudCgpID09IDEpIHsKKwkJCQlpbml0aWFsT2JqZWN0RmllbGQuc2VsZWN0KDApOworCQkJfQorCQkJaW5pdGlhbE9iamVjdEZpZWxkLmFkZE1vZGlmeUxpc3RlbmVyKHZhbGlkYXRvcik7CisKKwkJCUxhYmVsIGVuY29kaW5nTGFiZWwgPSBuZXcgTGFiZWwoY29tcG9zaXRlLCBTV1QuTEVGVCk7CisJCQl7CisJCQkJZW5jb2RpbmdMYWJlbC5zZXRUZXh0KFRlc3R1dGlsaXR5RWRpdFBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoIl9VSV9YTUxFbmNvZGluZyIpKTsgLy8kTk9OLU5MUy0xJAorCisJCQkJR3JpZERhdGEgZGF0YSA9IG5ldyBHcmlkRGF0YSgpOworCQkJCWRhdGEuaG9yaXpvbnRhbEFsaWdubWVudCA9IEdyaWREYXRhLkZJTEw7CisJCQkJZW5jb2RpbmdMYWJlbC5zZXRMYXlvdXREYXRhKGRhdGEpOworCQkJfQorCQkJZW5jb2RpbmdGaWVsZCA9IG5ldyBDb21ibyhjb21wb3NpdGUsIFNXVC5CT1JERVIpOworCQkJeworCQkJCUdyaWREYXRhIGRhdGEgPSBuZXcgR3JpZERhdGEoKTsKKwkJCQlkYXRhLmhvcml6b250YWxBbGlnbm1lbnQgPSBHcmlkRGF0YS5GSUxMOworCQkJCWRhdGEuZ3JhYkV4Y2Vzc0hvcml6b250YWxTcGFjZSA9IHRydWU7CisJCQkJZW5jb2RpbmdGaWVsZC5zZXRMYXlvdXREYXRhKGRhdGEpOworCQkJfQorCisJCQlmb3IgKFN0cmluZyBlbmNvZGluZyA6IGdldEVuY29kaW5ncygpKSB7CisJCQkJZW5jb2RpbmdGaWVsZC5hZGQoZW5jb2RpbmcpOworCQkJfQorCisJCQllbmNvZGluZ0ZpZWxkLnNlbGVjdCgwKTsKKwkJCWVuY29kaW5nRmllbGQuYWRkTW9kaWZ5TGlzdGVuZXIodmFsaWRhdG9yKTsKKworCQkJc2V0UGFnZUNvbXBsZXRlKHZhbGlkYXRlUGFnZSgpKTsKKwkJCXNldENvbnRyb2woY29tcG9zaXRlKTsKKwkJfQorCisJCS8qKgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJcHJvdGVjdGVkIE1vZGlmeUxpc3RlbmVyIHZhbGlkYXRvciA9CisJCQluZXcgTW9kaWZ5TGlzdGVuZXIoKSB7CisJCQkJcHVibGljIHZvaWQgbW9kaWZ5VGV4dChNb2RpZnlFdmVudCBlKSB7CisJCQkJCXNldFBhZ2VDb21wbGV0ZSh2YWxpZGF0ZVBhZ2UoKSk7CisJCQkJfQorCQkJfTsKKworCQkvKioKKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCXByb3RlY3RlZCBib29sZWFuIHZhbGlkYXRlUGFnZSgpIHsKKwkJCXJldHVybiBnZXRJbml0aWFsT2JqZWN0TmFtZSgpICE9IG51bGwgJiYgZ2V0RW5jb2RpbmdzKCkuY29udGFpbnMoZW5jb2RpbmdGaWVsZC5nZXRUZXh0KCkpOworCQl9CisKKwkJLyoqCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlAT3ZlcnJpZGUKKwkJcHVibGljIHZvaWQgc2V0VmlzaWJsZShib29sZWFuIHZpc2libGUpIHsKKwkJCXN1cGVyLnNldFZpc2libGUodmlzaWJsZSk7CisJCQlpZiAodmlzaWJsZSkgeworCQkJCWlmIChpbml0aWFsT2JqZWN0RmllbGQuZ2V0SXRlbUNvdW50KCkgPT0gMSkgeworCQkJCQlpbml0aWFsT2JqZWN0RmllbGQuY2xlYXJTZWxlY3Rpb24oKTsKKwkJCQkJZW5jb2RpbmdGaWVsZC5zZXRGb2N1cygpOworCQkJCX0KKwkJCQllbHNlIHsKKwkJCQkJZW5jb2RpbmdGaWVsZC5jbGVhclNlbGVjdGlvbigpOworCQkJCQlpbml0aWFsT2JqZWN0RmllbGQuc2V0Rm9jdXMoKTsKKwkJCQl9CisJCQl9CisJCX0KKworCQkvKioKKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCXB1YmxpYyBTdHJpbmcgZ2V0SW5pdGlhbE9iamVjdE5hbWUoKSB7CisJCQlTdHJpbmcgbGFiZWwgPSBpbml0aWFsT2JqZWN0RmllbGQuZ2V0VGV4dCgpOworCisJCQlmb3IgKFN0cmluZyBuYW1lIDogZ2V0SW5pdGlhbE9iamVjdE5hbWVzKCkpIHsKKwkJCQlpZiAoZ2V0TGFiZWwobmFtZSkuZXF1YWxzKGxhYmVsKSkgeworCQkJCQlyZXR1cm4gbmFtZTsKKwkJCQl9CisJCQl9CisJCQlyZXR1cm4gbnVsbDsKKwkJfQorCisJCS8qKgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJcHVibGljIFN0cmluZyBnZXRFbmNvZGluZygpIHsKKwkJCXJldHVybiBlbmNvZGluZ0ZpZWxkLmdldFRleHQoKTsKKwkJfQorCisJCS8qKgorCQkgKiBSZXR1cm5zIHRoZSBsYWJlbCBmb3IgdGhlIHNwZWNpZmllZCB0eXBlIG5hbWUuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlwcm90ZWN0ZWQgU3RyaW5nIGdldExhYmVsKFN0cmluZyB0eXBlTmFtZSkgeworCQkJdHJ5IHsKKwkJCQlyZXR1cm4gVGVzdHV0aWxpdHlFZGl0UGx1Z2luLklOU1RBTkNFLmdldFN0cmluZygiX1VJXyIgKyB0eXBlTmFtZSArICJfdHlwZSIpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKKwkJCX0KKwkJCWNhdGNoKE1pc3NpbmdSZXNvdXJjZUV4Y2VwdGlvbiBtcmUpIHsKKwkJCQlUZXN0dXRpbGl0eUVkaXRQbHVnaW4uSU5TVEFOQ0UubG9nKG1yZSk7CisJCQl9CisJCQlyZXR1cm4gdHlwZU5hbWU7CisJCX0KKworCQkvKioKKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCXByb3RlY3RlZCBDb2xsZWN0aW9uPFN0cmluZz4gZ2V0RW5jb2RpbmdzKCkgeworCQkJaWYgKGVuY29kaW5ncyA9PSBudWxsKSB7CisJCQkJZW5jb2RpbmdzID0gbmV3IEFycmF5TGlzdDxTdHJpbmc+KCk7CisJCQkJZm9yIChTdHJpbmdUb2tlbml6ZXIgc3RyaW5nVG9rZW5pemVyID0gbmV3IFN0cmluZ1Rva2VuaXplcihUZXN0dXRpbGl0eUVkaXRQbHVnaW4uSU5TVEFOQ0UuZ2V0U3RyaW5nKCJfVUlfWE1MRW5jb2RpbmdDaG9pY2VzIikpOyBzdHJpbmdUb2tlbml6ZXIuaGFzTW9yZVRva2VucygpOyApIC8vJE5PTi1OTFMtMSQKKwkJCQl7CisJCQkJCWVuY29kaW5ncy5hZGQoc3RyaW5nVG9rZW5pemVyLm5leHRUb2tlbigpKTsKKwkJCQl9CisJCQl9CisJCQlyZXR1cm4gZW5jb2RpbmdzOworCQl9CisJfQorCisJLyoqCisJICogVGhlIGZyYW1ld29yayBjYWxscyB0aGlzIHRvIGNyZWF0ZSB0aGUgY29udGVudHMgb2YgdGhlIHdpemFyZC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBhZGRQYWdlcygpIHsKKwkJLy8gQ3JlYXRlIGEgcGFnZSwgc2V0IHRoZSB0aXRsZSwgYW5kIHRoZSBpbml0aWFsIG1vZGVsIGZpbGUgbmFtZS4KKwkJLy8KKwkJbmV3RmlsZUNyZWF0aW9uUGFnZSA9IG5ldyBMYWJlbHNNb2RlbFdpemFyZE5ld0ZpbGVDcmVhdGlvblBhZ2UoIldoYXRldmVyIiwgc2VsZWN0aW9uKTsgLy8kTk9OLU5MUy0xJAorCQluZXdGaWxlQ3JlYXRpb25QYWdlLnNldFRpdGxlKFRlc3R1dGlsaXR5RWRpdFBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoIl9VSV9MYWJlbHNNb2RlbFdpemFyZF9sYWJlbCIpKTsgLy8kTk9OLU5MUy0xJAorCQluZXdGaWxlQ3JlYXRpb25QYWdlLnNldERlc2NyaXB0aW9uKFRlc3R1dGlsaXR5RWRpdFBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoIl9VSV9MYWJlbHNNb2RlbFdpemFyZF9kZXNjcmlwdGlvbiIpKTsgLy8kTk9OLU5MUy0xJAorCQluZXdGaWxlQ3JlYXRpb25QYWdlLnNldEZpbGVOYW1lKFRlc3R1dGlsaXR5RWRpdFBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoIl9VSV9MYWJlbHNFZGl0b3JGaWxlbmFtZURlZmF1bHRCYXNlIikgKyAiLiIgKyBUZXN0dXRpbGl0eUVkaXRQbHVnaW4uSU5TVEFOQ0UuZ2V0U3RyaW5nKCJfVUlfTGFiZWxzRWRpdG9yRmlsZW5hbWVFeHRlbnNpb24iKSk7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJCAvLyROT04tTkxTLTMkCisJCWFkZFBhZ2UobmV3RmlsZUNyZWF0aW9uUGFnZSk7CisKKwkJLy8gVHJ5IGFuZCBnZXQgdGhlIHJlc291cmNlIHNlbGVjdGlvbiB0byBkZXRlcm1pbmUgYSBjdXJyZW50IGRpcmVjdG9yeSBmb3IgdGhlIGZpbGUgZGlhbG9nLgorCQkvLworCQlpZiAoc2VsZWN0aW9uICE9IG51bGwgJiYgIXNlbGVjdGlvbi5pc0VtcHR5KCkpIHsKKwkJCS8vIEdldCB0aGUgcmVzb3VyY2UuLi4KKwkJCS8vCisJCQlPYmplY3Qgc2VsZWN0ZWRFbGVtZW50ID0gc2VsZWN0aW9uLml0ZXJhdG9yKCkubmV4dCgpOworCQkJaWYgKHNlbGVjdGVkRWxlbWVudCBpbnN0YW5jZW9mIElSZXNvdXJjZSkgeworCQkJCS8vIEdldCB0aGUgcmVzb3VyY2UgcGFyZW50LCBpZiBpdHMgYSBmaWxlLgorCQkJCS8vCisJCQkJSVJlc291cmNlIHNlbGVjdGVkUmVzb3VyY2UgPSAoSVJlc291cmNlKXNlbGVjdGVkRWxlbWVudDsKKwkJCQlpZiAoc2VsZWN0ZWRSZXNvdXJjZS5nZXRUeXBlKCkgPT0gSVJlc291cmNlLkZJTEUpIHsKKwkJCQkJc2VsZWN0ZWRSZXNvdXJjZSA9IHNlbGVjdGVkUmVzb3VyY2UuZ2V0UGFyZW50KCk7CisJCQkJfQorCisJCQkJLy8gVGhpcyBnaXZlcyB1cyBhIGRpcmVjdG9yeS4uLgorCQkJCS8vCisJCQkJaWYgKHNlbGVjdGVkUmVzb3VyY2UgaW5zdGFuY2VvZiBJRm9sZGVyIHx8IHNlbGVjdGVkUmVzb3VyY2UgaW5zdGFuY2VvZiBJUHJvamVjdCkgeworCQkJCQkvLyBTZXQgdGhpcyBmb3IgdGhlIGNvbnRhaW5lci4KKwkJCQkJLy8KKwkJCQkJbmV3RmlsZUNyZWF0aW9uUGFnZS5zZXRDb250YWluZXJGdWxsUGF0aChzZWxlY3RlZFJlc291cmNlLmdldEZ1bGxQYXRoKCkpOworCisJCQkJCS8vIE1ha2UgdXAgYSB1bmlxdWUgbmV3IG5hbWUgaGVyZS4KKwkJCQkJLy8KKwkJCQkJU3RyaW5nIGRlZmF1bHRNb2RlbEJhc2VGaWxlbmFtZSA9IFRlc3R1dGlsaXR5RWRpdFBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoIl9VSV9MYWJlbHNFZGl0b3JGaWxlbmFtZURlZmF1bHRCYXNlIik7IC8vJE5PTi1OTFMtMSQKKwkJCQkJU3RyaW5nIGRlZmF1bHRNb2RlbEZpbGVuYW1lRXh0ZW5zaW9uID0gVGVzdHV0aWxpdHlFZGl0UGx1Z2luLklOU1RBTkNFLmdldFN0cmluZygiX1VJX0xhYmVsc0VkaXRvckZpbGVuYW1lRXh0ZW5zaW9uIik7IC8vJE5PTi1OTFMtMSQKKwkJCQkJU3RyaW5nIG1vZGVsRmlsZW5hbWUgPSBkZWZhdWx0TW9kZWxCYXNlRmlsZW5hbWUgKyAiLiIgKyBkZWZhdWx0TW9kZWxGaWxlbmFtZUV4dGVuc2lvbjsgLy8kTk9OLU5MUy0xJAorCQkJCQlmb3IgKGludCBpID0gMTsgKChJQ29udGFpbmVyKXNlbGVjdGVkUmVzb3VyY2UpLmZpbmRNZW1iZXIobW9kZWxGaWxlbmFtZSkgIT0gbnVsbDsgKytpKSB7CisJCQkJCQltb2RlbEZpbGVuYW1lID0gZGVmYXVsdE1vZGVsQmFzZUZpbGVuYW1lICsgaSArICIuIiArIGRlZmF1bHRNb2RlbEZpbGVuYW1lRXh0ZW5zaW9uOyAvLyROT04tTkxTLTEkCisJCQkJCX0KKwkJCQkJbmV3RmlsZUNyZWF0aW9uUGFnZS5zZXRGaWxlTmFtZShtb2RlbEZpbGVuYW1lKTsKKwkJCQl9CisJCQl9CisJCX0KKwkJaW5pdGlhbE9iamVjdENyZWF0aW9uUGFnZSA9IG5ldyBMYWJlbHNNb2RlbFdpemFyZEluaXRpYWxPYmplY3RDcmVhdGlvblBhZ2UoIldoYXRldmVyMiIpOyAvLyROT04tTkxTLTEkCisJCWluaXRpYWxPYmplY3RDcmVhdGlvblBhZ2Uuc2V0VGl0bGUoVGVzdHV0aWxpdHlFZGl0UGx1Z2luLklOU1RBTkNFLmdldFN0cmluZygiX1VJX0xhYmVsc01vZGVsV2l6YXJkX2xhYmVsIikpOyAvLyROT04tTkxTLTEkCisJCWluaXRpYWxPYmplY3RDcmVhdGlvblBhZ2Uuc2V0RGVzY3JpcHRpb24oVGVzdHV0aWxpdHlFZGl0UGx1Z2luLklOU1RBTkNFLmdldFN0cmluZygiX1VJX1dpemFyZF9pbml0aWFsX29iamVjdF9kZXNjcmlwdGlvbiIpKTsgLy8kTk9OLU5MUy0xJAorCQlhZGRQYWdlKGluaXRpYWxPYmplY3RDcmVhdGlvblBhZ2UpOworCX0KKworCS8qKgorCSAqIEdldCB0aGUgZmlsZSBmcm9tIHRoZSBwYWdlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBJRmlsZSBnZXRNb2RlbEZpbGUoKSB7CisJCXJldHVybiBuZXdGaWxlQ3JlYXRpb25QYWdlLmdldE1vZGVsRmlsZSgpOworCX0KKworfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3Rlc3RzL3V0aWwvbGFiZWxzL3Byb3ZpZGVyL0xhYmVsc0l0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdGVzdHMvdXRpbC9sYWJlbHMvcHJvdmlkZXIvTGFiZWxzSXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNGZmMzVhCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3Rlc3RzL3V0aWwvbGFiZWxzL3Byb3ZpZGVyL0xhYmVsc0l0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5LmphdmEKQEAgLTAsMCArMSwzNTAgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsLmxhYmVscy5wcm92aWRlcjsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OworaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuQWRhcHRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuQ2hhbmdlTm90aWZpZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5Db21wb3NlZEFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklDaGFuZ2VOb3RpZmllcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JRGlzcG9zYWJsZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JRWRpdGluZ0RvbWFpbkl0ZW1Qcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbUxhYmVsUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1Qcm9wZXJ0eVNvdXJjZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JTm90aWZ5Q2hhbmdlZExpc3RlbmVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklTdHJ1Y3R1cmVkSXRlbUNvbnRlbnRQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JVHJlZUl0ZW1Db250ZW50UHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsLmxhYmVscy51dGlsLkxhYmVsc0FkYXB0ZXJGYWN0b3J5OworCisvKioKKyAqIFRoaXMgaXMgdGhlIGZhY3RvcnkgdGhhdCBpcyB1c2VkIHRvIHByb3ZpZGUgdGhlIGludGVyZmFjZXMgbmVlZGVkIHRvIHN1cHBvcnQgVmlld2Vycy4KKyAqIFRoZSBhZGFwdGVycyBnZW5lcmF0ZWQgYnkgdGhpcyBmYWN0b3J5IGNvbnZlcnQgRU1GIGFkYXB0ZXIgbm90aWZpY2F0aW9ucyBpbnRvIGNhbGxzIHRvIHtAbGluayAjZmlyZU5vdGlmeUNoYW5nZWQgZmlyZU5vdGlmeUNoYW5nZWR9LgorICogVGhlIGFkYXB0ZXJzIGFsc28gc3VwcG9ydCBFY2xpcHNlIHByb3BlcnR5IHNoZWV0cy4KKyAqIE5vdGUgdGhhdCBtb3N0IG9mIHRoZSBhZGFwdGVycyBhcmUgc2hhcmVkIGFtb25nIG11bHRpcGxlIGluc3RhbmNlcy4KKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIExhYmVsc0l0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5IGV4dGVuZHMgTGFiZWxzQWRhcHRlckZhY3RvcnkgaW1wbGVtZW50cyBDb21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5LCBJQ2hhbmdlTm90aWZpZXIsIElEaXNwb3NhYmxlIHsKKwkvKioKKwkgKiBUaGlzIGtlZXBzIHRyYWNrIG9mIHRoZSByb290IGFkYXB0ZXIgZmFjdG9yeSB0aGF0IGRlbGVnYXRlcyB0byB0aGlzIGFkYXB0ZXIgZmFjdG9yeS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgQ29tcG9zZWRBZGFwdGVyRmFjdG9yeSBwYXJlbnRBZGFwdGVyRmFjdG9yeTsKKworCS8qKgorCSAqIFRoaXMgaXMgdXNlZCB0byBpbXBsZW1lbnQge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklDaGFuZ2VOb3RpZmllcn0uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIElDaGFuZ2VOb3RpZmllciBjaGFuZ2VOb3RpZmllciA9IG5ldyBDaGFuZ2VOb3RpZmllcigpOworCisJLyoqCisJICogVGhpcyBrZWVwcyB0cmFjayBvZiBhbGwgdGhlIHN1cHBvcnRlZCB0eXBlcyBjaGVja2VkIGJ5IHtAbGluayAjaXNGYWN0b3J5Rm9yVHlwZSBpc0ZhY3RvcnlGb3JUeXBlfS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgQ29sbGVjdGlvbjxPYmplY3Q+IHN1cHBvcnRlZFR5cGVzID0gbmV3IEFycmF5TGlzdDxPYmplY3Q+KCk7CisKKwkvKioKKwkgKiBUaGlzIGNvbnN0cnVjdHMgYW4gaW5zdGFuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIExhYmVsc0l0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5KCkgeworCQlzdXBwb3J0ZWRUeXBlcy5hZGQoSUVkaXRpbmdEb21haW5JdGVtUHJvdmlkZXIuY2xhc3MpOworCQlzdXBwb3J0ZWRUeXBlcy5hZGQoSVN0cnVjdHVyZWRJdGVtQ29udGVudFByb3ZpZGVyLmNsYXNzKTsKKwkJc3VwcG9ydGVkVHlwZXMuYWRkKElUcmVlSXRlbUNvbnRlbnRQcm92aWRlci5jbGFzcyk7CisJCXN1cHBvcnRlZFR5cGVzLmFkZChJSXRlbUxhYmVsUHJvdmlkZXIuY2xhc3MpOworCQlzdXBwb3J0ZWRUeXBlcy5hZGQoSUl0ZW1Qcm9wZXJ0eVNvdXJjZS5jbGFzcyk7CisJfQorCisJLyoqCisJICogVGhpcyBrZWVwcyB0cmFjayBvZiB0aGUgb25lIGFkYXB0ZXIgdXNlZCBmb3IgYWxsIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwubGFiZWxzLlRlc3REeW5hbWljTGFiZWwxfSBpbnN0YW5jZXMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIFRlc3REeW5hbWljTGFiZWwxSXRlbVByb3ZpZGVyIHRlc3REeW5hbWljTGFiZWwxSXRlbVByb3ZpZGVyOworCisJLyoqCisJICogVGhpcyBjcmVhdGVzIGFuIGFkYXB0ZXIgZm9yIGEge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC5sYWJlbHMuVGVzdER5bmFtaWNMYWJlbDF9LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZVRlc3REeW5hbWljTGFiZWwxQWRhcHRlcigpIHsKKwkJaWYgKHRlc3REeW5hbWljTGFiZWwxSXRlbVByb3ZpZGVyID09IG51bGwpIHsKKwkJCXRlc3REeW5hbWljTGFiZWwxSXRlbVByb3ZpZGVyID0gbmV3IFRlc3REeW5hbWljTGFiZWwxSXRlbVByb3ZpZGVyKHRoaXMpOworCQl9CisKKwkJcmV0dXJuIHRlc3REeW5hbWljTGFiZWwxSXRlbVByb3ZpZGVyOworCX0KKworCS8qKgorCSAqIFRoaXMga2VlcHMgdHJhY2sgb2YgdGhlIG9uZSBhZGFwdGVyIHVzZWQgZm9yIGFsbCB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsLmxhYmVscy5UZXN0RHluYW1pY05vZGVMYWJlbH0gaW5zdGFuY2VzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBUZXN0RHluYW1pY05vZGVMYWJlbEl0ZW1Qcm92aWRlciB0ZXN0RHluYW1pY05vZGVMYWJlbEl0ZW1Qcm92aWRlcjsKKworCS8qKgorCSAqIFRoaXMgY3JlYXRlcyBhbiBhZGFwdGVyIGZvciBhIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwubGFiZWxzLlRlc3REeW5hbWljTm9kZUxhYmVsfS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVUZXN0RHluYW1pY05vZGVMYWJlbEFkYXB0ZXIoKSB7CisJCWlmICh0ZXN0RHluYW1pY05vZGVMYWJlbEl0ZW1Qcm92aWRlciA9PSBudWxsKSB7CisJCQl0ZXN0RHluYW1pY05vZGVMYWJlbEl0ZW1Qcm92aWRlciA9IG5ldyBUZXN0RHluYW1pY05vZGVMYWJlbEl0ZW1Qcm92aWRlcih0aGlzKTsKKwkJfQorCisJCXJldHVybiB0ZXN0RHluYW1pY05vZGVMYWJlbEl0ZW1Qcm92aWRlcjsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGtlZXBzIHRyYWNrIG9mIHRoZSBvbmUgYWRhcHRlciB1c2VkIGZvciBhbGwge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC5sYWJlbHMuVGVzdEludGVnZXJMYWJlbFZhbHVlfSBpbnN0YW5jZXMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIFRlc3RJbnRlZ2VyTGFiZWxWYWx1ZUl0ZW1Qcm92aWRlciB0ZXN0SW50ZWdlckxhYmVsVmFsdWVJdGVtUHJvdmlkZXI7CisKKwkvKioKKwkgKiBUaGlzIGNyZWF0ZXMgYW4gYWRhcHRlciBmb3IgYSB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsLmxhYmVscy5UZXN0SW50ZWdlckxhYmVsVmFsdWV9LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZVRlc3RJbnRlZ2VyTGFiZWxWYWx1ZUFkYXB0ZXIoKSB7CisJCWlmICh0ZXN0SW50ZWdlckxhYmVsVmFsdWVJdGVtUHJvdmlkZXIgPT0gbnVsbCkgeworCQkJdGVzdEludGVnZXJMYWJlbFZhbHVlSXRlbVByb3ZpZGVyID0gbmV3IFRlc3RJbnRlZ2VyTGFiZWxWYWx1ZUl0ZW1Qcm92aWRlcih0aGlzKTsKKwkJfQorCisJCXJldHVybiB0ZXN0SW50ZWdlckxhYmVsVmFsdWVJdGVtUHJvdmlkZXI7CisJfQorCisJLyoqCisJICogVGhpcyBrZWVwcyB0cmFjayBvZiB0aGUgb25lIGFkYXB0ZXIgdXNlZCBmb3IgYWxsIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwubGFiZWxzLlRlc3RMYWJlbH0gaW5zdGFuY2VzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBUZXN0TGFiZWxJdGVtUHJvdmlkZXIgdGVzdExhYmVsSXRlbVByb3ZpZGVyOworCisJLyoqCisJICogVGhpcyBjcmVhdGVzIGFuIGFkYXB0ZXIgZm9yIGEge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC5sYWJlbHMuVGVzdExhYmVsfS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVUZXN0TGFiZWxBZGFwdGVyKCkgeworCQlpZiAodGVzdExhYmVsSXRlbVByb3ZpZGVyID09IG51bGwpIHsKKwkJCXRlc3RMYWJlbEl0ZW1Qcm92aWRlciA9IG5ldyBUZXN0TGFiZWxJdGVtUHJvdmlkZXIodGhpcyk7CisJCX0KKworCQlyZXR1cm4gdGVzdExhYmVsSXRlbVByb3ZpZGVyOworCX0KKworCS8qKgorCSAqIFRoaXMga2VlcHMgdHJhY2sgb2YgdGhlIG9uZSBhZGFwdGVyIHVzZWQgZm9yIGFsbCB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsLmxhYmVscy5UZXN0U3RhdGljTm9kZUxhYmVsfSBpbnN0YW5jZXMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIFRlc3RTdGF0aWNOb2RlTGFiZWxJdGVtUHJvdmlkZXIgdGVzdFN0YXRpY05vZGVMYWJlbEl0ZW1Qcm92aWRlcjsKKworCS8qKgorCSAqIFRoaXMgY3JlYXRlcyBhbiBhZGFwdGVyIGZvciBhIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwubGFiZWxzLlRlc3RTdGF0aWNOb2RlTGFiZWx9LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZVRlc3RTdGF0aWNOb2RlTGFiZWxBZGFwdGVyKCkgeworCQlpZiAodGVzdFN0YXRpY05vZGVMYWJlbEl0ZW1Qcm92aWRlciA9PSBudWxsKSB7CisJCQl0ZXN0U3RhdGljTm9kZUxhYmVsSXRlbVByb3ZpZGVyID0gbmV3IFRlc3RTdGF0aWNOb2RlTGFiZWxJdGVtUHJvdmlkZXIodGhpcyk7CisJCX0KKworCQlyZXR1cm4gdGVzdFN0YXRpY05vZGVMYWJlbEl0ZW1Qcm92aWRlcjsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGtlZXBzIHRyYWNrIG9mIHRoZSBvbmUgYWRhcHRlciB1c2VkIGZvciBhbGwge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC5sYWJlbHMuVGVzdER5bmFtaWNFZGdlTGFiZWx9IGluc3RhbmNlcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgVGVzdER5bmFtaWNFZGdlTGFiZWxJdGVtUHJvdmlkZXIgdGVzdER5bmFtaWNFZGdlTGFiZWxJdGVtUHJvdmlkZXI7CisKKwkvKioKKwkgKiBUaGlzIGNyZWF0ZXMgYW4gYWRhcHRlciBmb3IgYSB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsLmxhYmVscy5UZXN0RHluYW1pY0VkZ2VMYWJlbH0uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlVGVzdER5bmFtaWNFZGdlTGFiZWxBZGFwdGVyKCkgeworCQlpZiAodGVzdER5bmFtaWNFZGdlTGFiZWxJdGVtUHJvdmlkZXIgPT0gbnVsbCkgeworCQkJdGVzdER5bmFtaWNFZGdlTGFiZWxJdGVtUHJvdmlkZXIgPSBuZXcgVGVzdER5bmFtaWNFZGdlTGFiZWxJdGVtUHJvdmlkZXIodGhpcyk7CisJCX0KKworCQlyZXR1cm4gdGVzdER5bmFtaWNFZGdlTGFiZWxJdGVtUHJvdmlkZXI7CisJfQorCisJLyoqCisJICogVGhpcyBrZWVwcyB0cmFjayBvZiB0aGUgb25lIGFkYXB0ZXIgdXNlZCBmb3IgYWxsIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwubGFiZWxzLlRlc3RTdGF0aWNFZGdlTGFiZWx9IGluc3RhbmNlcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgVGVzdFN0YXRpY0VkZ2VMYWJlbEl0ZW1Qcm92aWRlciB0ZXN0U3RhdGljRWRnZUxhYmVsSXRlbVByb3ZpZGVyOworCisJLyoqCisJICogVGhpcyBjcmVhdGVzIGFuIGFkYXB0ZXIgZm9yIGEge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC5sYWJlbHMuVGVzdFN0YXRpY0VkZ2VMYWJlbH0uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlVGVzdFN0YXRpY0VkZ2VMYWJlbEFkYXB0ZXIoKSB7CisJCWlmICh0ZXN0U3RhdGljRWRnZUxhYmVsSXRlbVByb3ZpZGVyID09IG51bGwpIHsKKwkJCXRlc3RTdGF0aWNFZGdlTGFiZWxJdGVtUHJvdmlkZXIgPSBuZXcgVGVzdFN0YXRpY0VkZ2VMYWJlbEl0ZW1Qcm92aWRlcih0aGlzKTsKKwkJfQorCisJCXJldHVybiB0ZXN0U3RhdGljRWRnZUxhYmVsSXRlbVByb3ZpZGVyOworCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyB0aGUgcm9vdCBhZGFwdGVyIGZhY3RvcnkgdGhhdCBjb250YWlucyB0aGlzIGZhY3RvcnkuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnkgZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCkgeworCQlyZXR1cm4gcGFyZW50QWRhcHRlckZhY3RvcnkgPT0gbnVsbCA/IHRoaXMgOiBwYXJlbnRBZGFwdGVyRmFjdG9yeS5nZXRSb290QWRhcHRlckZhY3RvcnkoKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHNldHMgdGhlIGNvbXBvc2VkIGFkYXB0ZXIgZmFjdG9yeSB0aGF0IGNvbnRhaW5zIHRoaXMgZmFjdG9yeS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRQYXJlbnRBZGFwdGVyRmFjdG9yeShDb21wb3NlZEFkYXB0ZXJGYWN0b3J5IHBhcmVudEFkYXB0ZXJGYWN0b3J5KSB7CisJCXRoaXMucGFyZW50QWRhcHRlckZhY3RvcnkgPSBwYXJlbnRBZGFwdGVyRmFjdG9yeTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgYm9vbGVhbiBpc0ZhY3RvcnlGb3JUeXBlKE9iamVjdCB0eXBlKSB7CisJCXJldHVybiBzdXBwb3J0ZWRUeXBlcy5jb250YWlucyh0eXBlKSB8fCBzdXBlci5pc0ZhY3RvcnlGb3JUeXBlKHR5cGUpOworCX0KKworCS8qKgorCSAqIFRoaXMgaW1wbGVtZW50YXRpb24gc3Vic3RpdHV0ZXMgdGhlIGZhY3RvcnkgaXRzZWxmIGFzIHRoZSBrZXkgZm9yIHRoZSBhZGFwdGVyLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBBZGFwdGVyIGFkYXB0KE5vdGlmaWVyIG5vdGlmaWVyLCBPYmplY3QgdHlwZSkgeworCQlyZXR1cm4gc3VwZXIuYWRhcHQobm90aWZpZXIsIHRoaXMpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBPYmplY3QgYWRhcHQoT2JqZWN0IG9iamVjdCwgT2JqZWN0IHR5cGUpIHsKKwkJaWYgKGlzRmFjdG9yeUZvclR5cGUodHlwZSkpIHsKKwkJCU9iamVjdCBhZGFwdGVyID0gc3VwZXIuYWRhcHQob2JqZWN0LCB0eXBlKTsKKwkJCWlmICghKHR5cGUgaW5zdGFuY2VvZiBDbGFzcykgfHwgKCgoQ2xhc3M8Pz4pdHlwZSkuaXNJbnN0YW5jZShhZGFwdGVyKSkpIHsKKwkJCQlyZXR1cm4gYWRhcHRlcjsKKwkJCX0KKwkJfQorCisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyBhIGxpc3RlbmVyLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIGFkZExpc3RlbmVyKElOb3RpZnlDaGFuZ2VkTGlzdGVuZXIgbm90aWZ5Q2hhbmdlZExpc3RlbmVyKSB7CisJCWNoYW5nZU5vdGlmaWVyLmFkZExpc3RlbmVyKG5vdGlmeUNoYW5nZWRMaXN0ZW5lcik7CisJfQorCisJLyoqCisJICogVGhpcyByZW1vdmVzIGEgbGlzdGVuZXIuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgcmVtb3ZlTGlzdGVuZXIoSU5vdGlmeUNoYW5nZWRMaXN0ZW5lciBub3RpZnlDaGFuZ2VkTGlzdGVuZXIpIHsKKwkJY2hhbmdlTm90aWZpZXIucmVtb3ZlTGlzdGVuZXIobm90aWZ5Q2hhbmdlZExpc3RlbmVyKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGRlbGVnYXRlcyB0byB7QGxpbmsgI2NoYW5nZU5vdGlmaWVyfSBhbmQgdG8ge0BsaW5rICNwYXJlbnRBZGFwdGVyRmFjdG9yeX0uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgZmlyZU5vdGlmeUNoYW5nZWQoTm90aWZpY2F0aW9uIG5vdGlmaWNhdGlvbikgeworCQljaGFuZ2VOb3RpZmllci5maXJlTm90aWZ5Q2hhbmdlZChub3RpZmljYXRpb24pOworCisJCWlmIChwYXJlbnRBZGFwdGVyRmFjdG9yeSAhPSBudWxsKSB7CisJCQlwYXJlbnRBZGFwdGVyRmFjdG9yeS5maXJlTm90aWZ5Q2hhbmdlZChub3RpZmljYXRpb24pOworCQl9CisJfQorCisJLyoqCisJICogVGhpcyBkaXNwb3NlcyBhbGwgb2YgdGhlIGl0ZW0gcHJvdmlkZXJzIGNyZWF0ZWQgYnkgdGhpcyBmYWN0b3J5LiAKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBkaXNwb3NlKCkgeworCQlpZiAodGVzdER5bmFtaWNFZGdlTGFiZWxJdGVtUHJvdmlkZXIgIT0gbnVsbCkgdGVzdER5bmFtaWNFZGdlTGFiZWxJdGVtUHJvdmlkZXIuZGlzcG9zZSgpOworCQlpZiAodGVzdER5bmFtaWNMYWJlbDFJdGVtUHJvdmlkZXIgIT0gbnVsbCkgdGVzdER5bmFtaWNMYWJlbDFJdGVtUHJvdmlkZXIuZGlzcG9zZSgpOworCQlpZiAodGVzdER5bmFtaWNOb2RlTGFiZWxJdGVtUHJvdmlkZXIgIT0gbnVsbCkgdGVzdER5bmFtaWNOb2RlTGFiZWxJdGVtUHJvdmlkZXIuZGlzcG9zZSgpOworCQlpZiAodGVzdEludGVnZXJMYWJlbFZhbHVlSXRlbVByb3ZpZGVyICE9IG51bGwpIHRlc3RJbnRlZ2VyTGFiZWxWYWx1ZUl0ZW1Qcm92aWRlci5kaXNwb3NlKCk7CisJCWlmICh0ZXN0TGFiZWxJdGVtUHJvdmlkZXIgIT0gbnVsbCkgdGVzdExhYmVsSXRlbVByb3ZpZGVyLmRpc3Bvc2UoKTsKKwkJaWYgKHRlc3RTdGF0aWNFZGdlTGFiZWxJdGVtUHJvdmlkZXIgIT0gbnVsbCkgdGVzdFN0YXRpY0VkZ2VMYWJlbEl0ZW1Qcm92aWRlci5kaXNwb3NlKCk7CisJCWlmICh0ZXN0U3RhdGljTm9kZUxhYmVsSXRlbVByb3ZpZGVyICE9IG51bGwpIHRlc3RTdGF0aWNOb2RlTGFiZWxJdGVtUHJvdmlkZXIuZGlzcG9zZSgpOworCX0KKworfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3Rlc3RzL3V0aWwvbGFiZWxzL3Byb3ZpZGVyL1Rlc3REeW5hbWljRWRnZUxhYmVsSXRlbVByb3ZpZGVyLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdGVzdHMvdXRpbC9sYWJlbHMvcHJvdmlkZXIvVGVzdER5bmFtaWNFZGdlTGFiZWxJdGVtUHJvdmlkZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NmI3ZjZiCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3Rlc3RzL3V0aWwvbGFiZWxzL3Byb3ZpZGVyL1Rlc3REeW5hbWljRWRnZUxhYmVsSXRlbVByb3ZpZGVyLmphdmEKQEAgLTAsMCArMSwxMzIgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsLmxhYmVscy5wcm92aWRlcjsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LkFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuUmVzb3VyY2VMb2NhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5VUkk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUVkaXRpbmdEb21haW5JdGVtUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1MYWJlbFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtUHJvcGVydHlEZXNjcmlwdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtUHJvcGVydHlTb3VyY2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVN0cnVjdHVyZWRJdGVtQ29udGVudFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklUcmVlSXRlbUNvbnRlbnRQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGgucHJvdmlkZXIuRHluYW1pY0VkZ2VMYWJlbEl0ZW1Qcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwuZGVjb3JhdG9ycy5wcm92aWRlci5UZXN0dXRpbGl0eUVkaXRQbHVnaW47CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsLmxhYmVscy5UZXN0RHluYW1pY0VkZ2VMYWJlbDsKKworLyoqCisgKiBUaGlzIGlzIHRoZSBpdGVtIHByb3ZpZGVyIGFkYXB0ZXIgZm9yIGEge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC5sYWJlbHMuVGVzdER5bmFtaWNFZGdlTGFiZWx9IG9iamVjdC4KKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIFRlc3REeW5hbWljRWRnZUxhYmVsSXRlbVByb3ZpZGVyCisJZXh0ZW5kcyBEeW5hbWljRWRnZUxhYmVsSXRlbVByb3ZpZGVyCisJaW1wbGVtZW50cwkKKwkJSUVkaXRpbmdEb21haW5JdGVtUHJvdmlkZXIsCQorCQlJU3RydWN0dXJlZEl0ZW1Db250ZW50UHJvdmlkZXIsCQorCQlJVHJlZUl0ZW1Db250ZW50UHJvdmlkZXIsCQorCQlJSXRlbUxhYmVsUHJvdmlkZXIsCQorCQlJSXRlbVByb3BlcnR5U291cmNlIHsKKwkvKioKKwkgKiBUaGlzIGNvbnN0cnVjdHMgYW4gaW5zdGFuY2UgZnJvbSBhIGZhY3RvcnkgYW5kIGEgbm90aWZpZXIuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFRlc3REeW5hbWljRWRnZUxhYmVsSXRlbVByb3ZpZGVyKEFkYXB0ZXJGYWN0b3J5IGFkYXB0ZXJGYWN0b3J5KSB7CisJCXN1cGVyKGFkYXB0ZXJGYWN0b3J5KTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgdGhlIHByb3BlcnR5IGRlc2NyaXB0b3JzIGZvciB0aGUgYWRhcHRlZCBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgTGlzdDxJSXRlbVByb3BlcnR5RGVzY3JpcHRvcj4gZ2V0UHJvcGVydHlEZXNjcmlwdG9ycyhPYmplY3Qgb2JqZWN0KSB7CisJCWlmIChpdGVtUHJvcGVydHlEZXNjcmlwdG9ycyA9PSBudWxsKSB7CisJCQlzdXBlci5nZXRQcm9wZXJ0eURlc2NyaXB0b3JzKG9iamVjdCk7CisKKwkJfQorCQlyZXR1cm4gaXRlbVByb3BlcnR5RGVzY3JpcHRvcnM7CisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIFRlc3REeW5hbWljRWRnZUxhYmVsLmdpZi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgT2JqZWN0IGdldEltYWdlKE9iamVjdCBvYmplY3QpIHsKKwkJcmV0dXJuIG92ZXJsYXlJbWFnZShvYmplY3QsIGdldFJlc291cmNlTG9jYXRvcigpLmdldEltYWdlKCJmdWxsL29iajE2L1Rlc3REeW5hbWljRWRnZUxhYmVsIikpOyAvLyROT04tTkxTLTEkCisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIHRoZSBsYWJlbCB0ZXh0IGZvciB0aGUgYWRhcHRlZCBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgU3RyaW5nIGdldFRleHQoT2JqZWN0IG9iamVjdCkgeworCQlVUkkgbGFiZWxWYWx1ZSA9ICgoVGVzdER5bmFtaWNFZGdlTGFiZWwpb2JqZWN0KS5nZXRVUkkoKTsKKwkJU3RyaW5nIGxhYmVsID0gbGFiZWxWYWx1ZSA9PSBudWxsID8gbnVsbCA6IGxhYmVsVmFsdWUudG9TdHJpbmcoKTsKKwkJcmV0dXJuIGxhYmVsID09IG51bGwgfHwgbGFiZWwubGVuZ3RoKCkgPT0gMCA/CisJCQlnZXRTdHJpbmcoIl9VSV9UZXN0RHluYW1pY0VkZ2VMYWJlbF90eXBlIikgOiAvLyROT04tTkxTLTEkCisJCQlnZXRTdHJpbmcoIl9VSV9UZXN0RHluYW1pY0VkZ2VMYWJlbF90eXBlIikgKyAiICIgKyBsYWJlbDsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCisJfQorCisJLyoqCisJICogVGhpcyBoYW5kbGVzIG1vZGVsIG5vdGlmaWNhdGlvbnMgYnkgY2FsbGluZyB7QGxpbmsgI3VwZGF0ZUNoaWxkcmVufSB0byB1cGRhdGUgYW55IGNhY2hlZAorCSAqIGNoaWxkcmVuIGFuZCBieSBjcmVhdGluZyBhIHZpZXdlciBub3RpZmljYXRpb24sIHdoaWNoIGl0IHBhc3NlcyB0byB7QGxpbmsgI2ZpcmVOb3RpZnlDaGFuZ2VkfS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBub3RpZnlDaGFuZ2VkKE5vdGlmaWNhdGlvbiBub3RpZmljYXRpb24pIHsKKwkJdXBkYXRlQ2hpbGRyZW4obm90aWZpY2F0aW9uKTsKKwkJc3VwZXIubm90aWZ5Q2hhbmdlZChub3RpZmljYXRpb24pOworCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmVkaXQuY29tbWFuZC5Db21tYW5kUGFyYW1ldGVyfXMgZGVzY3JpYmluZyB0aGUgY2hpbGRyZW4KKwkgKiB0aGF0IGNhbiBiZSBjcmVhdGVkIHVuZGVyIHRoaXMgb2JqZWN0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIGNvbGxlY3ROZXdDaGlsZERlc2NyaXB0b3JzKENvbGxlY3Rpb248T2JqZWN0PiBuZXdDaGlsZERlc2NyaXB0b3JzLCBPYmplY3Qgb2JqZWN0KSB7CisJCXN1cGVyLmNvbGxlY3ROZXdDaGlsZERlc2NyaXB0b3JzKG5ld0NoaWxkRGVzY3JpcHRvcnMsIG9iamVjdCk7CisJfQorCisJLyoqCisJICogUmV0dXJuIHRoZSByZXNvdXJjZSBsb2NhdG9yIGZvciB0aGlzIGl0ZW0gcHJvdmlkZXIncyByZXNvdXJjZXMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIFJlc291cmNlTG9jYXRvciBnZXRSZXNvdXJjZUxvY2F0b3IoKSB7CisJCXJldHVybiBUZXN0dXRpbGl0eUVkaXRQbHVnaW4uSU5TVEFOQ0U7CisJfQorCit9CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdGVzdHMvdXRpbC9sYWJlbHMvcHJvdmlkZXIvVGVzdER5bmFtaWNMYWJlbDFJdGVtUHJvdmlkZXIuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS90ZXN0cy91dGlsL2xhYmVscy9wcm92aWRlci9UZXN0RHluYW1pY0xhYmVsMUl0ZW1Qcm92aWRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQxNGZkMTIKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdGVzdHMvdXRpbC9sYWJlbHMvcHJvdmlkZXIvVGVzdER5bmFtaWNMYWJlbDFJdGVtUHJvdmlkZXIuamF2YQpAQCAtMCwwICsxLDEzMiBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwubGFiZWxzLnByb3ZpZGVyOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOworaW1wb3J0IGphdmEudXRpbC5MaXN0OworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5SZXNvdXJjZUxvY2F0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlVSSTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JRWRpdGluZ0RvbWFpbkl0ZW1Qcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbUxhYmVsUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1Qcm9wZXJ0eVNvdXJjZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JU3RydWN0dXJlZEl0ZW1Db250ZW50UHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVRyZWVJdGVtQ29udGVudFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5wcm92aWRlci5EeW5hbWljTGFiZWxJdGVtUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsLmRlY29yYXRvcnMucHJvdmlkZXIuVGVzdHV0aWxpdHlFZGl0UGx1Z2luOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC5sYWJlbHMuVGVzdER5bmFtaWNMYWJlbDE7CisKKy8qKgorICogVGhpcyBpcyB0aGUgaXRlbSBwcm92aWRlciBhZGFwdGVyIGZvciBhIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwubGFiZWxzLlRlc3REeW5hbWljTGFiZWwxfSBvYmplY3QuCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBUZXN0RHluYW1pY0xhYmVsMUl0ZW1Qcm92aWRlcgorCWV4dGVuZHMgRHluYW1pY0xhYmVsSXRlbVByb3ZpZGVyCisJaW1wbGVtZW50cwkKKwkJSUVkaXRpbmdEb21haW5JdGVtUHJvdmlkZXIsCQorCQlJU3RydWN0dXJlZEl0ZW1Db250ZW50UHJvdmlkZXIsCQorCQlJVHJlZUl0ZW1Db250ZW50UHJvdmlkZXIsCQorCQlJSXRlbUxhYmVsUHJvdmlkZXIsCQorCQlJSXRlbVByb3BlcnR5U291cmNlIHsKKwkvKioKKwkgKiBUaGlzIGNvbnN0cnVjdHMgYW4gaW5zdGFuY2UgZnJvbSBhIGZhY3RvcnkgYW5kIGEgbm90aWZpZXIuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFRlc3REeW5hbWljTGFiZWwxSXRlbVByb3ZpZGVyKEFkYXB0ZXJGYWN0b3J5IGFkYXB0ZXJGYWN0b3J5KSB7CisJCXN1cGVyKGFkYXB0ZXJGYWN0b3J5KTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgdGhlIHByb3BlcnR5IGRlc2NyaXB0b3JzIGZvciB0aGUgYWRhcHRlZCBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgTGlzdDxJSXRlbVByb3BlcnR5RGVzY3JpcHRvcj4gZ2V0UHJvcGVydHlEZXNjcmlwdG9ycyhPYmplY3Qgb2JqZWN0KSB7CisJCWlmIChpdGVtUHJvcGVydHlEZXNjcmlwdG9ycyA9PSBudWxsKSB7CisJCQlzdXBlci5nZXRQcm9wZXJ0eURlc2NyaXB0b3JzKG9iamVjdCk7CisKKwkJfQorCQlyZXR1cm4gaXRlbVByb3BlcnR5RGVzY3JpcHRvcnM7CisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIFRlc3REeW5hbWljTGFiZWwxLmdpZi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgT2JqZWN0IGdldEltYWdlKE9iamVjdCBvYmplY3QpIHsKKwkJcmV0dXJuIG92ZXJsYXlJbWFnZShvYmplY3QsIGdldFJlc291cmNlTG9jYXRvcigpLmdldEltYWdlKCJmdWxsL29iajE2L1Rlc3REeW5hbWljTGFiZWwxIikpOyAvLyROT04tTkxTLTEkCisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIHRoZSBsYWJlbCB0ZXh0IGZvciB0aGUgYWRhcHRlZCBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgU3RyaW5nIGdldFRleHQoT2JqZWN0IG9iamVjdCkgeworCQlVUkkgbGFiZWxWYWx1ZSA9ICgoVGVzdER5bmFtaWNMYWJlbDEpb2JqZWN0KS5nZXRVUkkoKTsKKwkJU3RyaW5nIGxhYmVsID0gbGFiZWxWYWx1ZSA9PSBudWxsID8gbnVsbCA6IGxhYmVsVmFsdWUudG9TdHJpbmcoKTsKKwkJcmV0dXJuIGxhYmVsID09IG51bGwgfHwgbGFiZWwubGVuZ3RoKCkgPT0gMCA/CisJCQlnZXRTdHJpbmcoIl9VSV9UZXN0RHluYW1pY0xhYmVsMV90eXBlIikgOiAvLyROT04tTkxTLTEkCisJCQlnZXRTdHJpbmcoIl9VSV9UZXN0RHluYW1pY0xhYmVsMV90eXBlIikgKyAiICIgKyBsYWJlbDsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCisJfQorCisJLyoqCisJICogVGhpcyBoYW5kbGVzIG1vZGVsIG5vdGlmaWNhdGlvbnMgYnkgY2FsbGluZyB7QGxpbmsgI3VwZGF0ZUNoaWxkcmVufSB0byB1cGRhdGUgYW55IGNhY2hlZAorCSAqIGNoaWxkcmVuIGFuZCBieSBjcmVhdGluZyBhIHZpZXdlciBub3RpZmljYXRpb24sIHdoaWNoIGl0IHBhc3NlcyB0byB7QGxpbmsgI2ZpcmVOb3RpZnlDaGFuZ2VkfS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBub3RpZnlDaGFuZ2VkKE5vdGlmaWNhdGlvbiBub3RpZmljYXRpb24pIHsKKwkJdXBkYXRlQ2hpbGRyZW4obm90aWZpY2F0aW9uKTsKKwkJc3VwZXIubm90aWZ5Q2hhbmdlZChub3RpZmljYXRpb24pOworCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmVkaXQuY29tbWFuZC5Db21tYW5kUGFyYW1ldGVyfXMgZGVzY3JpYmluZyB0aGUgY2hpbGRyZW4KKwkgKiB0aGF0IGNhbiBiZSBjcmVhdGVkIHVuZGVyIHRoaXMgb2JqZWN0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIGNvbGxlY3ROZXdDaGlsZERlc2NyaXB0b3JzKENvbGxlY3Rpb248T2JqZWN0PiBuZXdDaGlsZERlc2NyaXB0b3JzLCBPYmplY3Qgb2JqZWN0KSB7CisJCXN1cGVyLmNvbGxlY3ROZXdDaGlsZERlc2NyaXB0b3JzKG5ld0NoaWxkRGVzY3JpcHRvcnMsIG9iamVjdCk7CisJfQorCisJLyoqCisJICogUmV0dXJuIHRoZSByZXNvdXJjZSBsb2NhdG9yIGZvciB0aGlzIGl0ZW0gcHJvdmlkZXIncyByZXNvdXJjZXMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIFJlc291cmNlTG9jYXRvciBnZXRSZXNvdXJjZUxvY2F0b3IoKSB7CisJCXJldHVybiBUZXN0dXRpbGl0eUVkaXRQbHVnaW4uSU5TVEFOQ0U7CisJfQorCit9CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdGVzdHMvdXRpbC9sYWJlbHMvcHJvdmlkZXIvVGVzdER5bmFtaWNOb2RlTGFiZWxJdGVtUHJvdmlkZXIuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS90ZXN0cy91dGlsL2xhYmVscy9wcm92aWRlci9UZXN0RHluYW1pY05vZGVMYWJlbEl0ZW1Qcm92aWRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA2ZDFlYTcKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdGVzdHMvdXRpbC9sYWJlbHMvcHJvdmlkZXIvVGVzdER5bmFtaWNOb2RlTGFiZWxJdGVtUHJvdmlkZXIuamF2YQpAQCAtMCwwICsxLDEzMiBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwubGFiZWxzLnByb3ZpZGVyOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOworaW1wb3J0IGphdmEudXRpbC5MaXN0OworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5SZXNvdXJjZUxvY2F0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlVSSTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JRWRpdGluZ0RvbWFpbkl0ZW1Qcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbUxhYmVsUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1Qcm9wZXJ0eVNvdXJjZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JU3RydWN0dXJlZEl0ZW1Db250ZW50UHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVRyZWVJdGVtQ29udGVudFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5wcm92aWRlci5EeW5hbWljTm9kZUxhYmVsSXRlbVByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC5kZWNvcmF0b3JzLnByb3ZpZGVyLlRlc3R1dGlsaXR5RWRpdFBsdWdpbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwubGFiZWxzLlRlc3REeW5hbWljTm9kZUxhYmVsOworCisvKioKKyAqIFRoaXMgaXMgdGhlIGl0ZW0gcHJvdmlkZXIgYWRhcHRlciBmb3IgYSB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsLmxhYmVscy5UZXN0RHluYW1pY05vZGVMYWJlbH0gb2JqZWN0LgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgVGVzdER5bmFtaWNOb2RlTGFiZWxJdGVtUHJvdmlkZXIKKwlleHRlbmRzIER5bmFtaWNOb2RlTGFiZWxJdGVtUHJvdmlkZXIKKwlpbXBsZW1lbnRzCQorCQlJRWRpdGluZ0RvbWFpbkl0ZW1Qcm92aWRlciwJCisJCUlTdHJ1Y3R1cmVkSXRlbUNvbnRlbnRQcm92aWRlciwJCisJCUlUcmVlSXRlbUNvbnRlbnRQcm92aWRlciwJCisJCUlJdGVtTGFiZWxQcm92aWRlciwJCisJCUlJdGVtUHJvcGVydHlTb3VyY2UgeworCS8qKgorCSAqIFRoaXMgY29uc3RydWN0cyBhbiBpbnN0YW5jZSBmcm9tIGEgZmFjdG9yeSBhbmQgYSBub3RpZmllci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVGVzdER5bmFtaWNOb2RlTGFiZWxJdGVtUHJvdmlkZXIoQWRhcHRlckZhY3RvcnkgYWRhcHRlckZhY3RvcnkpIHsKKwkJc3VwZXIoYWRhcHRlckZhY3RvcnkpOworCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyB0aGUgcHJvcGVydHkgZGVzY3JpcHRvcnMgZm9yIHRoZSBhZGFwdGVkIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBMaXN0PElJdGVtUHJvcGVydHlEZXNjcmlwdG9yPiBnZXRQcm9wZXJ0eURlc2NyaXB0b3JzKE9iamVjdCBvYmplY3QpIHsKKwkJaWYgKGl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzID09IG51bGwpIHsKKwkJCXN1cGVyLmdldFByb3BlcnR5RGVzY3JpcHRvcnMob2JqZWN0KTsKKworCQl9CisJCXJldHVybiBpdGVtUHJvcGVydHlEZXNjcmlwdG9yczsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgVGVzdER5bmFtaWNOb2RlTGFiZWwuZ2lmLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBPYmplY3QgZ2V0SW1hZ2UoT2JqZWN0IG9iamVjdCkgeworCQlyZXR1cm4gb3ZlcmxheUltYWdlKG9iamVjdCwgZ2V0UmVzb3VyY2VMb2NhdG9yKCkuZ2V0SW1hZ2UoImZ1bGwvb2JqMTYvVGVzdER5bmFtaWNOb2RlTGFiZWwiKSk7IC8vJE5PTi1OTFMtMSQKKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgdGhlIGxhYmVsIHRleHQgZm9yIHRoZSBhZGFwdGVkIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBTdHJpbmcgZ2V0VGV4dChPYmplY3Qgb2JqZWN0KSB7CisJCVVSSSBsYWJlbFZhbHVlID0gKChUZXN0RHluYW1pY05vZGVMYWJlbClvYmplY3QpLmdldFVSSSgpOworCQlTdHJpbmcgbGFiZWwgPSBsYWJlbFZhbHVlID09IG51bGwgPyBudWxsIDogbGFiZWxWYWx1ZS50b1N0cmluZygpOworCQlyZXR1cm4gbGFiZWwgPT0gbnVsbCB8fCBsYWJlbC5sZW5ndGgoKSA9PSAwID8KKwkJCWdldFN0cmluZygiX1VJX1Rlc3REeW5hbWljTm9kZUxhYmVsX3R5cGUiKSA6IC8vJE5PTi1OTFMtMSQKKwkJCWdldFN0cmluZygiX1VJX1Rlc3REeW5hbWljTm9kZUxhYmVsX3R5cGUiKSArICIgIiArIGxhYmVsOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKKwl9CisKKwkvKioKKwkgKiBUaGlzIGhhbmRsZXMgbW9kZWwgbm90aWZpY2F0aW9ucyBieSBjYWxsaW5nIHtAbGluayAjdXBkYXRlQ2hpbGRyZW59IHRvIHVwZGF0ZSBhbnkgY2FjaGVkCisJICogY2hpbGRyZW4gYW5kIGJ5IGNyZWF0aW5nIGEgdmlld2VyIG5vdGlmaWNhdGlvbiwgd2hpY2ggaXQgcGFzc2VzIHRvIHtAbGluayAjZmlyZU5vdGlmeUNoYW5nZWR9LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIG5vdGlmeUNoYW5nZWQoTm90aWZpY2F0aW9uIG5vdGlmaWNhdGlvbikgeworCQl1cGRhdGVDaGlsZHJlbihub3RpZmljYXRpb24pOworCQlzdXBlci5ub3RpZnlDaGFuZ2VkKG5vdGlmaWNhdGlvbik7CisJfQorCisJLyoqCisJICogVGhpcyBhZGRzIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuZWRpdC5jb21tYW5kLkNvbW1hbmRQYXJhbWV0ZXJ9cyBkZXNjcmliaW5nIHRoZSBjaGlsZHJlbgorCSAqIHRoYXQgY2FuIGJlIGNyZWF0ZWQgdW5kZXIgdGhpcyBvYmplY3QuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgY29sbGVjdE5ld0NoaWxkRGVzY3JpcHRvcnMoQ29sbGVjdGlvbjxPYmplY3Q+IG5ld0NoaWxkRGVzY3JpcHRvcnMsIE9iamVjdCBvYmplY3QpIHsKKwkJc3VwZXIuY29sbGVjdE5ld0NoaWxkRGVzY3JpcHRvcnMobmV3Q2hpbGREZXNjcmlwdG9ycywgb2JqZWN0KTsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm4gdGhlIHJlc291cmNlIGxvY2F0b3IgZm9yIHRoaXMgaXRlbSBwcm92aWRlcidzIHJlc291cmNlcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgUmVzb3VyY2VMb2NhdG9yIGdldFJlc291cmNlTG9jYXRvcigpIHsKKwkJcmV0dXJuIFRlc3R1dGlsaXR5RWRpdFBsdWdpbi5JTlNUQU5DRTsKKwl9CisKK30KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS90ZXN0cy91dGlsL2xhYmVscy9wcm92aWRlci9UZXN0SW50ZWdlckxhYmVsVmFsdWVJdGVtUHJvdmlkZXIuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS90ZXN0cy91dGlsL2xhYmVscy9wcm92aWRlci9UZXN0SW50ZWdlckxhYmVsVmFsdWVJdGVtUHJvdmlkZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYjE3M2EzCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3Rlc3RzL3V0aWwvbGFiZWxzL3Byb3ZpZGVyL1Rlc3RJbnRlZ2VyTGFiZWxWYWx1ZUl0ZW1Qcm92aWRlci5qYXZhCkBAIC0wLDAgKzEsMTYxIEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC5sYWJlbHMucHJvdmlkZXI7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5BZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlJlc291cmNlTG9jYXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5Db21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklFZGl0aW5nRG9tYWluSXRlbVByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtTGFiZWxQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbVByb3BlcnR5RGVzY3JpcHRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbVByb3BlcnR5U291cmNlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklTdHJ1Y3R1cmVkSXRlbUNvbnRlbnRQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JVHJlZUl0ZW1Db250ZW50UHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSXRlbVByb3BlcnR5RGVzY3JpcHRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5WaWV3ZXJOb3RpZmljYXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLnByb3ZpZGVyLkxhYmVsVmFsdWVJdGVtUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsLmRlY29yYXRvcnMucHJvdmlkZXIuVGVzdHV0aWxpdHlFZGl0UGx1Z2luOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC5sYWJlbHMuTGFiZWxzUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwubGFiZWxzLlRlc3RJbnRlZ2VyTGFiZWxWYWx1ZTsKKworLyoqCisgKiBUaGlzIGlzIHRoZSBpdGVtIHByb3ZpZGVyIGFkYXB0ZXIgZm9yIGEge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC5sYWJlbHMuVGVzdEludGVnZXJMYWJlbFZhbHVlfSBvYmplY3QuCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBUZXN0SW50ZWdlckxhYmVsVmFsdWVJdGVtUHJvdmlkZXIKKwlleHRlbmRzIExhYmVsVmFsdWVJdGVtUHJvdmlkZXIKKwlpbXBsZW1lbnRzCQorCQlJRWRpdGluZ0RvbWFpbkl0ZW1Qcm92aWRlciwJCisJCUlTdHJ1Y3R1cmVkSXRlbUNvbnRlbnRQcm92aWRlciwJCisJCUlUcmVlSXRlbUNvbnRlbnRQcm92aWRlciwJCisJCUlJdGVtTGFiZWxQcm92aWRlciwJCisJCUlJdGVtUHJvcGVydHlTb3VyY2UgeworCS8qKgorCSAqIFRoaXMgY29uc3RydWN0cyBhbiBpbnN0YW5jZSBmcm9tIGEgZmFjdG9yeSBhbmQgYSBub3RpZmllci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVGVzdEludGVnZXJMYWJlbFZhbHVlSXRlbVByb3ZpZGVyKEFkYXB0ZXJGYWN0b3J5IGFkYXB0ZXJGYWN0b3J5KSB7CisJCXN1cGVyKGFkYXB0ZXJGYWN0b3J5KTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgdGhlIHByb3BlcnR5IGRlc2NyaXB0b3JzIGZvciB0aGUgYWRhcHRlZCBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgTGlzdDxJSXRlbVByb3BlcnR5RGVzY3JpcHRvcj4gZ2V0UHJvcGVydHlEZXNjcmlwdG9ycyhPYmplY3Qgb2JqZWN0KSB7CisJCWlmIChpdGVtUHJvcGVydHlEZXNjcmlwdG9ycyA9PSBudWxsKSB7CisJCQlzdXBlci5nZXRQcm9wZXJ0eURlc2NyaXB0b3JzKG9iamVjdCk7CisKKwkJCWFkZElQcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0KTsKKwkJfQorCQlyZXR1cm4gaXRlbVByb3BlcnR5RGVzY3JpcHRvcnM7CisJfQorCisJLyoqCisJICogVGhpcyBhZGRzIGEgcHJvcGVydHkgZGVzY3JpcHRvciBmb3IgdGhlIEkgZmVhdHVyZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBhZGRJUHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdCBvYmplY3QpIHsKKwkJaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMuYWRkCisJCQkoY3JlYXRlSXRlbVByb3BlcnR5RGVzY3JpcHRvcgorCQkJCSgoKENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnkpYWRhcHRlckZhY3RvcnkpLmdldFJvb3RBZGFwdGVyRmFjdG9yeSgpLAorCQkJCSBnZXRSZXNvdXJjZUxvY2F0b3IoKSwKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfVGVzdEludGVnZXJMYWJlbFZhbHVlX2lfZmVhdHVyZSIpLCAvLyROT04tTkxTLTEkCisJCQkJIGdldFN0cmluZygiX1VJX1Byb3BlcnR5RGVzY3JpcHRvcl9kZXNjcmlwdGlvbiIsICJfVUlfVGVzdEludGVnZXJMYWJlbFZhbHVlX2lfZmVhdHVyZSIsICJfVUlfVGVzdEludGVnZXJMYWJlbFZhbHVlX3R5cGUiKSwgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkIC8vJE5PTi1OTFMtMyQKKwkJCQkgTGFiZWxzUGFja2FnZS5MaXRlcmFscy5URVNUX0lOVEVHRVJfTEFCRUxfVkFMVUVfX0ksCisJCQkJIHRydWUsCisJCQkJIGZhbHNlLAorCQkJCSBmYWxzZSwKKwkJCQkgSXRlbVByb3BlcnR5RGVzY3JpcHRvci5JTlRFR1JBTF9WQUxVRV9JTUFHRSwKKwkJCQkgbnVsbCwKKwkJCQkgbnVsbCkpOworCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyBUZXN0SW50ZWdlckxhYmVsVmFsdWUuZ2lmLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBPYmplY3QgZ2V0SW1hZ2UoT2JqZWN0IG9iamVjdCkgeworCQlyZXR1cm4gb3ZlcmxheUltYWdlKG9iamVjdCwgZ2V0UmVzb3VyY2VMb2NhdG9yKCkuZ2V0SW1hZ2UoImZ1bGwvb2JqMTYvVGVzdEludGVnZXJMYWJlbFZhbHVlIikpOyAvLyROT04tTkxTLTEkCisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIHRoZSBsYWJlbCB0ZXh0IGZvciB0aGUgYWRhcHRlZCBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgU3RyaW5nIGdldFRleHQoT2JqZWN0IG9iamVjdCkgeworCQlUZXN0SW50ZWdlckxhYmVsVmFsdWUgdGVzdEludGVnZXJMYWJlbFZhbHVlID0gKFRlc3RJbnRlZ2VyTGFiZWxWYWx1ZSlvYmplY3Q7CisJCXJldHVybiBnZXRTdHJpbmcoIl9VSV9UZXN0SW50ZWdlckxhYmVsVmFsdWVfdHlwZSIpICsgIiAiICsgdGVzdEludGVnZXJMYWJlbFZhbHVlLmdldEkoKTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCisJfQorCisJLyoqCisJICogVGhpcyBoYW5kbGVzIG1vZGVsIG5vdGlmaWNhdGlvbnMgYnkgY2FsbGluZyB7QGxpbmsgI3VwZGF0ZUNoaWxkcmVufSB0byB1cGRhdGUgYW55IGNhY2hlZAorCSAqIGNoaWxkcmVuIGFuZCBieSBjcmVhdGluZyBhIHZpZXdlciBub3RpZmljYXRpb24sIHdoaWNoIGl0IHBhc3NlcyB0byB7QGxpbmsgI2ZpcmVOb3RpZnlDaGFuZ2VkfS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBub3RpZnlDaGFuZ2VkKE5vdGlmaWNhdGlvbiBub3RpZmljYXRpb24pIHsKKwkJdXBkYXRlQ2hpbGRyZW4obm90aWZpY2F0aW9uKTsKKworCQlzd2l0Y2ggKG5vdGlmaWNhdGlvbi5nZXRGZWF0dXJlSUQoVGVzdEludGVnZXJMYWJlbFZhbHVlLmNsYXNzKSkgeworCQkJY2FzZSBMYWJlbHNQYWNrYWdlLlRFU1RfSU5URUdFUl9MQUJFTF9WQUxVRV9fSToKKwkJCQlmaXJlTm90aWZ5Q2hhbmdlZChuZXcgVmlld2VyTm90aWZpY2F0aW9uKG5vdGlmaWNhdGlvbiwgbm90aWZpY2F0aW9uLmdldE5vdGlmaWVyKCksIGZhbHNlLCB0cnVlKSk7CisJCQkJcmV0dXJuOworCQl9CisJCXN1cGVyLm5vdGlmeUNoYW5nZWQobm90aWZpY2F0aW9uKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFkZHMge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lZGl0LmNvbW1hbmQuQ29tbWFuZFBhcmFtZXRlcn1zIGRlc2NyaWJpbmcgdGhlIGNoaWxkcmVuCisJICogdGhhdCBjYW4gYmUgY3JlYXRlZCB1bmRlciB0aGlzIG9iamVjdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgdm9pZCBjb2xsZWN0TmV3Q2hpbGREZXNjcmlwdG9ycyhDb2xsZWN0aW9uPE9iamVjdD4gbmV3Q2hpbGREZXNjcmlwdG9ycywgT2JqZWN0IG9iamVjdCkgeworCQlzdXBlci5jb2xsZWN0TmV3Q2hpbGREZXNjcmlwdG9ycyhuZXdDaGlsZERlc2NyaXB0b3JzLCBvYmplY3QpOworCX0KKworCS8qKgorCSAqIFJldHVybiB0aGUgcmVzb3VyY2UgbG9jYXRvciBmb3IgdGhpcyBpdGVtIHByb3ZpZGVyJ3MgcmVzb3VyY2VzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBSZXNvdXJjZUxvY2F0b3IgZ2V0UmVzb3VyY2VMb2NhdG9yKCkgeworCQlyZXR1cm4gVGVzdHV0aWxpdHlFZGl0UGx1Z2luLklOU1RBTkNFOworCX0KKworfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3Rlc3RzL3V0aWwvbGFiZWxzL3Byb3ZpZGVyL1Rlc3RMYWJlbEl0ZW1Qcm92aWRlci5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3Rlc3RzL3V0aWwvbGFiZWxzL3Byb3ZpZGVyL1Rlc3RMYWJlbEl0ZW1Qcm92aWRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAzZjc1YjYKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdGVzdHMvdXRpbC9sYWJlbHMvcHJvdmlkZXIvVGVzdExhYmVsSXRlbVByb3ZpZGVyLmphdmEKQEAgLTAsMCArMSwxMzIgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsLmxhYmVscy5wcm92aWRlcjsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LkFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuUmVzb3VyY2VMb2NhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5VUkk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUVkaXRpbmdEb21haW5JdGVtUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1MYWJlbFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtUHJvcGVydHlEZXNjcmlwdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtUHJvcGVydHlTb3VyY2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVN0cnVjdHVyZWRJdGVtQ29udGVudFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklUcmVlSXRlbUNvbnRlbnRQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGgucHJvdmlkZXIuTGFiZWxJdGVtUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsLmRlY29yYXRvcnMucHJvdmlkZXIuVGVzdHV0aWxpdHlFZGl0UGx1Z2luOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC5sYWJlbHMuVGVzdExhYmVsOworCisvKioKKyAqIFRoaXMgaXMgdGhlIGl0ZW0gcHJvdmlkZXIgYWRhcHRlciBmb3IgYSB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsLmxhYmVscy5UZXN0TGFiZWx9IG9iamVjdC4KKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIFRlc3RMYWJlbEl0ZW1Qcm92aWRlcgorCWV4dGVuZHMgTGFiZWxJdGVtUHJvdmlkZXIKKwlpbXBsZW1lbnRzCQorCQlJRWRpdGluZ0RvbWFpbkl0ZW1Qcm92aWRlciwJCisJCUlTdHJ1Y3R1cmVkSXRlbUNvbnRlbnRQcm92aWRlciwJCisJCUlUcmVlSXRlbUNvbnRlbnRQcm92aWRlciwJCisJCUlJdGVtTGFiZWxQcm92aWRlciwJCisJCUlJdGVtUHJvcGVydHlTb3VyY2UgeworCS8qKgorCSAqIFRoaXMgY29uc3RydWN0cyBhbiBpbnN0YW5jZSBmcm9tIGEgZmFjdG9yeSBhbmQgYSBub3RpZmllci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVGVzdExhYmVsSXRlbVByb3ZpZGVyKEFkYXB0ZXJGYWN0b3J5IGFkYXB0ZXJGYWN0b3J5KSB7CisJCXN1cGVyKGFkYXB0ZXJGYWN0b3J5KTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgdGhlIHByb3BlcnR5IGRlc2NyaXB0b3JzIGZvciB0aGUgYWRhcHRlZCBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgTGlzdDxJSXRlbVByb3BlcnR5RGVzY3JpcHRvcj4gZ2V0UHJvcGVydHlEZXNjcmlwdG9ycyhPYmplY3Qgb2JqZWN0KSB7CisJCWlmIChpdGVtUHJvcGVydHlEZXNjcmlwdG9ycyA9PSBudWxsKSB7CisJCQlzdXBlci5nZXRQcm9wZXJ0eURlc2NyaXB0b3JzKG9iamVjdCk7CisKKwkJfQorCQlyZXR1cm4gaXRlbVByb3BlcnR5RGVzY3JpcHRvcnM7CisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIFRlc3RMYWJlbC5naWYuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIE9iamVjdCBnZXRJbWFnZShPYmplY3Qgb2JqZWN0KSB7CisJCXJldHVybiBvdmVybGF5SW1hZ2Uob2JqZWN0LCBnZXRSZXNvdXJjZUxvY2F0b3IoKS5nZXRJbWFnZSgiZnVsbC9vYmoxNi9UZXN0TGFiZWwiKSk7IC8vJE5PTi1OTFMtMSQKKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgdGhlIGxhYmVsIHRleHQgZm9yIHRoZSBhZGFwdGVkIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBTdHJpbmcgZ2V0VGV4dChPYmplY3Qgb2JqZWN0KSB7CisJCVVSSSBsYWJlbFZhbHVlID0gKChUZXN0TGFiZWwpb2JqZWN0KS5nZXRVUkkoKTsKKwkJU3RyaW5nIGxhYmVsID0gbGFiZWxWYWx1ZSA9PSBudWxsID8gbnVsbCA6IGxhYmVsVmFsdWUudG9TdHJpbmcoKTsKKwkJcmV0dXJuIGxhYmVsID09IG51bGwgfHwgbGFiZWwubGVuZ3RoKCkgPT0gMCA/CisJCQlnZXRTdHJpbmcoIl9VSV9UZXN0TGFiZWxfdHlwZSIpIDogLy8kTk9OLU5MUy0xJAorCQkJZ2V0U3RyaW5nKCJfVUlfVGVzdExhYmVsX3R5cGUiKSArICIgIiArIGxhYmVsOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKKwl9CisKKwkvKioKKwkgKiBUaGlzIGhhbmRsZXMgbW9kZWwgbm90aWZpY2F0aW9ucyBieSBjYWxsaW5nIHtAbGluayAjdXBkYXRlQ2hpbGRyZW59IHRvIHVwZGF0ZSBhbnkgY2FjaGVkCisJICogY2hpbGRyZW4gYW5kIGJ5IGNyZWF0aW5nIGEgdmlld2VyIG5vdGlmaWNhdGlvbiwgd2hpY2ggaXQgcGFzc2VzIHRvIHtAbGluayAjZmlyZU5vdGlmeUNoYW5nZWR9LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIG5vdGlmeUNoYW5nZWQoTm90aWZpY2F0aW9uIG5vdGlmaWNhdGlvbikgeworCQl1cGRhdGVDaGlsZHJlbihub3RpZmljYXRpb24pOworCQlzdXBlci5ub3RpZnlDaGFuZ2VkKG5vdGlmaWNhdGlvbik7CisJfQorCisJLyoqCisJICogVGhpcyBhZGRzIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuZWRpdC5jb21tYW5kLkNvbW1hbmRQYXJhbWV0ZXJ9cyBkZXNjcmliaW5nIHRoZSBjaGlsZHJlbgorCSAqIHRoYXQgY2FuIGJlIGNyZWF0ZWQgdW5kZXIgdGhpcyBvYmplY3QuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgY29sbGVjdE5ld0NoaWxkRGVzY3JpcHRvcnMoQ29sbGVjdGlvbjxPYmplY3Q+IG5ld0NoaWxkRGVzY3JpcHRvcnMsIE9iamVjdCBvYmplY3QpIHsKKwkJc3VwZXIuY29sbGVjdE5ld0NoaWxkRGVzY3JpcHRvcnMobmV3Q2hpbGREZXNjcmlwdG9ycywgb2JqZWN0KTsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm4gdGhlIHJlc291cmNlIGxvY2F0b3IgZm9yIHRoaXMgaXRlbSBwcm92aWRlcidzIHJlc291cmNlcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgUmVzb3VyY2VMb2NhdG9yIGdldFJlc291cmNlTG9jYXRvcigpIHsKKwkJcmV0dXJuIFRlc3R1dGlsaXR5RWRpdFBsdWdpbi5JTlNUQU5DRTsKKwl9CisKK30KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS90ZXN0cy91dGlsL2xhYmVscy9wcm92aWRlci9UZXN0U3RhdGljRWRnZUxhYmVsSXRlbVByb3ZpZGVyLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdGVzdHMvdXRpbC9sYWJlbHMvcHJvdmlkZXIvVGVzdFN0YXRpY0VkZ2VMYWJlbEl0ZW1Qcm92aWRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUwZTA1NDkKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdGVzdHMvdXRpbC9sYWJlbHMvcHJvdmlkZXIvVGVzdFN0YXRpY0VkZ2VMYWJlbEl0ZW1Qcm92aWRlci5qYXZhCkBAIC0wLDAgKzEsMTMyIEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC5sYWJlbHMucHJvdmlkZXI7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5BZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlJlc291cmNlTG9jYXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuVVJJOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklFZGl0aW5nRG9tYWluSXRlbVByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtTGFiZWxQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbVByb3BlcnR5RGVzY3JpcHRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbVByb3BlcnR5U291cmNlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklTdHJ1Y3R1cmVkSXRlbUNvbnRlbnRQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JVHJlZUl0ZW1Db250ZW50UHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLnByb3ZpZGVyLlN0YXRpY0VkZ2VMYWJlbEl0ZW1Qcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwuZGVjb3JhdG9ycy5wcm92aWRlci5UZXN0dXRpbGl0eUVkaXRQbHVnaW47CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsLmxhYmVscy5UZXN0U3RhdGljRWRnZUxhYmVsOworCisvKioKKyAqIFRoaXMgaXMgdGhlIGl0ZW0gcHJvdmlkZXIgYWRhcHRlciBmb3IgYSB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsLmxhYmVscy5UZXN0U3RhdGljRWRnZUxhYmVsfSBvYmplY3QuCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBUZXN0U3RhdGljRWRnZUxhYmVsSXRlbVByb3ZpZGVyCisJZXh0ZW5kcyBTdGF0aWNFZGdlTGFiZWxJdGVtUHJvdmlkZXIKKwlpbXBsZW1lbnRzCQorCQlJRWRpdGluZ0RvbWFpbkl0ZW1Qcm92aWRlciwJCisJCUlTdHJ1Y3R1cmVkSXRlbUNvbnRlbnRQcm92aWRlciwJCisJCUlUcmVlSXRlbUNvbnRlbnRQcm92aWRlciwJCisJCUlJdGVtTGFiZWxQcm92aWRlciwJCisJCUlJdGVtUHJvcGVydHlTb3VyY2UgeworCS8qKgorCSAqIFRoaXMgY29uc3RydWN0cyBhbiBpbnN0YW5jZSBmcm9tIGEgZmFjdG9yeSBhbmQgYSBub3RpZmllci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVGVzdFN0YXRpY0VkZ2VMYWJlbEl0ZW1Qcm92aWRlcihBZGFwdGVyRmFjdG9yeSBhZGFwdGVyRmFjdG9yeSkgeworCQlzdXBlcihhZGFwdGVyRmFjdG9yeSk7CisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIHRoZSBwcm9wZXJ0eSBkZXNjcmlwdG9ycyBmb3IgdGhlIGFkYXB0ZWQgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIExpc3Q8SUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I+IGdldFByb3BlcnR5RGVzY3JpcHRvcnMoT2JqZWN0IG9iamVjdCkgeworCQlpZiAoaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMgPT0gbnVsbCkgeworCQkJc3VwZXIuZ2V0UHJvcGVydHlEZXNjcmlwdG9ycyhvYmplY3QpOworCisJCX0KKwkJcmV0dXJuIGl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzOworCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyBUZXN0U3RhdGljRWRnZUxhYmVsLmdpZi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgT2JqZWN0IGdldEltYWdlKE9iamVjdCBvYmplY3QpIHsKKwkJcmV0dXJuIG92ZXJsYXlJbWFnZShvYmplY3QsIGdldFJlc291cmNlTG9jYXRvcigpLmdldEltYWdlKCJmdWxsL29iajE2L1Rlc3RTdGF0aWNFZGdlTGFiZWwiKSk7IC8vJE5PTi1OTFMtMSQKKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgdGhlIGxhYmVsIHRleHQgZm9yIHRoZSBhZGFwdGVkIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBTdHJpbmcgZ2V0VGV4dChPYmplY3Qgb2JqZWN0KSB7CisJCVVSSSBsYWJlbFZhbHVlID0gKChUZXN0U3RhdGljRWRnZUxhYmVsKW9iamVjdCkuZ2V0VVJJKCk7CisJCVN0cmluZyBsYWJlbCA9IGxhYmVsVmFsdWUgPT0gbnVsbCA/IG51bGwgOiBsYWJlbFZhbHVlLnRvU3RyaW5nKCk7CisJCXJldHVybiBsYWJlbCA9PSBudWxsIHx8IGxhYmVsLmxlbmd0aCgpID09IDAgPworCQkJZ2V0U3RyaW5nKCJfVUlfVGVzdFN0YXRpY0VkZ2VMYWJlbF90eXBlIikgOiAvLyROT04tTkxTLTEkCisJCQlnZXRTdHJpbmcoIl9VSV9UZXN0U3RhdGljRWRnZUxhYmVsX3R5cGUiKSArICIgIiArIGxhYmVsOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKKwl9CisKKwkvKioKKwkgKiBUaGlzIGhhbmRsZXMgbW9kZWwgbm90aWZpY2F0aW9ucyBieSBjYWxsaW5nIHtAbGluayAjdXBkYXRlQ2hpbGRyZW59IHRvIHVwZGF0ZSBhbnkgY2FjaGVkCisJICogY2hpbGRyZW4gYW5kIGJ5IGNyZWF0aW5nIGEgdmlld2VyIG5vdGlmaWNhdGlvbiwgd2hpY2ggaXQgcGFzc2VzIHRvIHtAbGluayAjZmlyZU5vdGlmeUNoYW5nZWR9LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIG5vdGlmeUNoYW5nZWQoTm90aWZpY2F0aW9uIG5vdGlmaWNhdGlvbikgeworCQl1cGRhdGVDaGlsZHJlbihub3RpZmljYXRpb24pOworCQlzdXBlci5ub3RpZnlDaGFuZ2VkKG5vdGlmaWNhdGlvbik7CisJfQorCisJLyoqCisJICogVGhpcyBhZGRzIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuZWRpdC5jb21tYW5kLkNvbW1hbmRQYXJhbWV0ZXJ9cyBkZXNjcmliaW5nIHRoZSBjaGlsZHJlbgorCSAqIHRoYXQgY2FuIGJlIGNyZWF0ZWQgdW5kZXIgdGhpcyBvYmplY3QuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgY29sbGVjdE5ld0NoaWxkRGVzY3JpcHRvcnMoQ29sbGVjdGlvbjxPYmplY3Q+IG5ld0NoaWxkRGVzY3JpcHRvcnMsIE9iamVjdCBvYmplY3QpIHsKKwkJc3VwZXIuY29sbGVjdE5ld0NoaWxkRGVzY3JpcHRvcnMobmV3Q2hpbGREZXNjcmlwdG9ycywgb2JqZWN0KTsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm4gdGhlIHJlc291cmNlIGxvY2F0b3IgZm9yIHRoaXMgaXRlbSBwcm92aWRlcidzIHJlc291cmNlcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgUmVzb3VyY2VMb2NhdG9yIGdldFJlc291cmNlTG9jYXRvcigpIHsKKwkJcmV0dXJuIFRlc3R1dGlsaXR5RWRpdFBsdWdpbi5JTlNUQU5DRTsKKwl9CisKK30KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS90ZXN0cy91dGlsL2xhYmVscy9wcm92aWRlci9UZXN0U3RhdGljTm9kZUxhYmVsSXRlbVByb3ZpZGVyLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdGVzdHMvdXRpbC9sYWJlbHMvcHJvdmlkZXIvVGVzdFN0YXRpY05vZGVMYWJlbEl0ZW1Qcm92aWRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEwMGQ1NDMKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdGVzdHMvdXRpbC9sYWJlbHMvcHJvdmlkZXIvVGVzdFN0YXRpY05vZGVMYWJlbEl0ZW1Qcm92aWRlci5qYXZhCkBAIC0wLDAgKzEsMTMyIEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC5sYWJlbHMucHJvdmlkZXI7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5BZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlJlc291cmNlTG9jYXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuVVJJOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklFZGl0aW5nRG9tYWluSXRlbVByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtTGFiZWxQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbVByb3BlcnR5RGVzY3JpcHRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbVByb3BlcnR5U291cmNlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklTdHJ1Y3R1cmVkSXRlbUNvbnRlbnRQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JVHJlZUl0ZW1Db250ZW50UHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLnByb3ZpZGVyLlN0YXRpY05vZGVMYWJlbEl0ZW1Qcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwuZGVjb3JhdG9ycy5wcm92aWRlci5UZXN0dXRpbGl0eUVkaXRQbHVnaW47CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsLmxhYmVscy5UZXN0U3RhdGljTm9kZUxhYmVsOworCisvKioKKyAqIFRoaXMgaXMgdGhlIGl0ZW0gcHJvdmlkZXIgYWRhcHRlciBmb3IgYSB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsLmxhYmVscy5UZXN0U3RhdGljTm9kZUxhYmVsfSBvYmplY3QuCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBUZXN0U3RhdGljTm9kZUxhYmVsSXRlbVByb3ZpZGVyCisJZXh0ZW5kcyBTdGF0aWNOb2RlTGFiZWxJdGVtUHJvdmlkZXIKKwlpbXBsZW1lbnRzCQorCQlJRWRpdGluZ0RvbWFpbkl0ZW1Qcm92aWRlciwJCisJCUlTdHJ1Y3R1cmVkSXRlbUNvbnRlbnRQcm92aWRlciwJCisJCUlUcmVlSXRlbUNvbnRlbnRQcm92aWRlciwJCisJCUlJdGVtTGFiZWxQcm92aWRlciwJCisJCUlJdGVtUHJvcGVydHlTb3VyY2UgeworCS8qKgorCSAqIFRoaXMgY29uc3RydWN0cyBhbiBpbnN0YW5jZSBmcm9tIGEgZmFjdG9yeSBhbmQgYSBub3RpZmllci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVGVzdFN0YXRpY05vZGVMYWJlbEl0ZW1Qcm92aWRlcihBZGFwdGVyRmFjdG9yeSBhZGFwdGVyRmFjdG9yeSkgeworCQlzdXBlcihhZGFwdGVyRmFjdG9yeSk7CisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIHRoZSBwcm9wZXJ0eSBkZXNjcmlwdG9ycyBmb3IgdGhlIGFkYXB0ZWQgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIExpc3Q8SUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I+IGdldFByb3BlcnR5RGVzY3JpcHRvcnMoT2JqZWN0IG9iamVjdCkgeworCQlpZiAoaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMgPT0gbnVsbCkgeworCQkJc3VwZXIuZ2V0UHJvcGVydHlEZXNjcmlwdG9ycyhvYmplY3QpOworCisJCX0KKwkJcmV0dXJuIGl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzOworCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyBUZXN0U3RhdGljTm9kZUxhYmVsLmdpZi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgT2JqZWN0IGdldEltYWdlKE9iamVjdCBvYmplY3QpIHsKKwkJcmV0dXJuIG92ZXJsYXlJbWFnZShvYmplY3QsIGdldFJlc291cmNlTG9jYXRvcigpLmdldEltYWdlKCJmdWxsL29iajE2L1Rlc3RTdGF0aWNOb2RlTGFiZWwiKSk7IC8vJE5PTi1OTFMtMSQKKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgdGhlIGxhYmVsIHRleHQgZm9yIHRoZSBhZGFwdGVkIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBTdHJpbmcgZ2V0VGV4dChPYmplY3Qgb2JqZWN0KSB7CisJCVVSSSBsYWJlbFZhbHVlID0gKChUZXN0U3RhdGljTm9kZUxhYmVsKW9iamVjdCkuZ2V0VVJJKCk7CisJCVN0cmluZyBsYWJlbCA9IGxhYmVsVmFsdWUgPT0gbnVsbCA/IG51bGwgOiBsYWJlbFZhbHVlLnRvU3RyaW5nKCk7CisJCXJldHVybiBsYWJlbCA9PSBudWxsIHx8IGxhYmVsLmxlbmd0aCgpID09IDAgPworCQkJZ2V0U3RyaW5nKCJfVUlfVGVzdFN0YXRpY05vZGVMYWJlbF90eXBlIikgOiAvLyROT04tTkxTLTEkCisJCQlnZXRTdHJpbmcoIl9VSV9UZXN0U3RhdGljTm9kZUxhYmVsX3R5cGUiKSArICIgIiArIGxhYmVsOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKKwl9CisKKwkvKioKKwkgKiBUaGlzIGhhbmRsZXMgbW9kZWwgbm90aWZpY2F0aW9ucyBieSBjYWxsaW5nIHtAbGluayAjdXBkYXRlQ2hpbGRyZW59IHRvIHVwZGF0ZSBhbnkgY2FjaGVkCisJICogY2hpbGRyZW4gYW5kIGJ5IGNyZWF0aW5nIGEgdmlld2VyIG5vdGlmaWNhdGlvbiwgd2hpY2ggaXQgcGFzc2VzIHRvIHtAbGluayAjZmlyZU5vdGlmeUNoYW5nZWR9LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIG5vdGlmeUNoYW5nZWQoTm90aWZpY2F0aW9uIG5vdGlmaWNhdGlvbikgeworCQl1cGRhdGVDaGlsZHJlbihub3RpZmljYXRpb24pOworCQlzdXBlci5ub3RpZnlDaGFuZ2VkKG5vdGlmaWNhdGlvbik7CisJfQorCisJLyoqCisJICogVGhpcyBhZGRzIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuZWRpdC5jb21tYW5kLkNvbW1hbmRQYXJhbWV0ZXJ9cyBkZXNjcmliaW5nIHRoZSBjaGlsZHJlbgorCSAqIHRoYXQgY2FuIGJlIGNyZWF0ZWQgdW5kZXIgdGhpcyBvYmplY3QuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgY29sbGVjdE5ld0NoaWxkRGVzY3JpcHRvcnMoQ29sbGVjdGlvbjxPYmplY3Q+IG5ld0NoaWxkRGVzY3JpcHRvcnMsIE9iamVjdCBvYmplY3QpIHsKKwkJc3VwZXIuY29sbGVjdE5ld0NoaWxkRGVzY3JpcHRvcnMobmV3Q2hpbGREZXNjcmlwdG9ycywgb2JqZWN0KTsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm4gdGhlIHJlc291cmNlIGxvY2F0b3IgZm9yIHRoaXMgaXRlbSBwcm92aWRlcidzIHJlc291cmNlcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgUmVzb3VyY2VMb2NhdG9yIGdldFJlc291cmNlTG9jYXRvcigpIHsKKwkJcmV0dXJuIFRlc3R1dGlsaXR5RWRpdFBsdWdpbi5JTlNUQU5DRTsKKwl9CisKK30KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS90ZXN0cy91dGlsL2xhYmVscy91dGlsL0xhYmVsc0FkYXB0ZXJGYWN0b3J5LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdGVzdHMvdXRpbC9sYWJlbHMvdXRpbC9MYWJlbHNBZGFwdGVyRmFjdG9yeS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE4N2U1MWUKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdGVzdHMvdXRpbC9sYWJlbHMvdXRpbC9MYWJlbHNBZGFwdGVyRmFjdG9yeS5qYXZhCkBAIC0wLDAgKzEsNTA4IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC5sYWJlbHMudXRpbDsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5BZGFwdGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LmltcGwuQWRhcHRlckZhY3RvcnlJbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uSWRlbnRpZmlhYmxlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uU2FuaXR5Q2hlY2tlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguRHluYW1pY0VkZ2VMYWJlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguRHluYW1pY0xhYmVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5EeW5hbWljTm9kZUxhYmVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5FZGdlTGFiZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkxhYmVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5MYWJlbFZhbHVlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5Ob2RlTGFiZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLlN0YXRpY0VkZ2VMYWJlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguU3RhdGljTGFiZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLlN0YXRpY05vZGVMYWJlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuTW9kaWZpYWJsZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwubGFiZWxzLkxhYmVsc1BhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsLmxhYmVscy5UZXN0RHluYW1pY0VkZ2VMYWJlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwubGFiZWxzLlRlc3REeW5hbWljTGFiZWwxOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC5sYWJlbHMuVGVzdER5bmFtaWNOb2RlTGFiZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsLmxhYmVscy5UZXN0SW50ZWdlckxhYmVsVmFsdWU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsLmxhYmVscy5UZXN0TGFiZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsLmxhYmVscy5UZXN0U3RhdGljRWRnZUxhYmVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC5sYWJlbHMuVGVzdFN0YXRpY05vZGVMYWJlbDsKKworCisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIFRoZSA8Yj5BZGFwdGVyIEZhY3Rvcnk8L2I+IGZvciB0aGUgbW9kZWwuCisgKiBJdCBwcm92aWRlcyBhbiBhZGFwdGVyIDxjb2RlPmNyZWF0ZVhYWDwvY29kZT4gbWV0aG9kIGZvciBlYWNoIGNsYXNzIG9mIHRoZSBtb2RlbC4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwubGFiZWxzLkxhYmVsc1BhY2thZ2UKKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIExhYmVsc0FkYXB0ZXJGYWN0b3J5IGV4dGVuZHMgQWRhcHRlckZhY3RvcnlJbXBsIHsKKwkvKioKKwkgKiBUaGUgY2FjaGVkIG1vZGVsIHBhY2thZ2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHN0YXRpYyBMYWJlbHNQYWNrYWdlIG1vZGVsUGFja2FnZTsKKworCS8qKgorCSAqIENyZWF0ZXMgYW4gaW5zdGFuY2Ugb2YgdGhlIGFkYXB0ZXIgZmFjdG9yeS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgTGFiZWxzQWRhcHRlckZhY3RvcnkoKSB7CisJCWlmIChtb2RlbFBhY2thZ2UgPT0gbnVsbCkgeworCQkJbW9kZWxQYWNrYWdlID0gTGFiZWxzUGFja2FnZS5lSU5TVEFOQ0U7CisJCX0KKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHdoZXRoZXIgdGhpcyBmYWN0b3J5IGlzIGFwcGxpY2FibGUgZm9yIHRoZSB0eXBlIG9mIHRoZSBvYmplY3QuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgPGNvZGU+dHJ1ZTwvY29kZT4gaWYgdGhlIG9iamVjdCBpcyBlaXRoZXIgdGhlIG1vZGVsJ3MgcGFja2FnZSBvciBpcyBhbiBpbnN0YW5jZSBvYmplY3Qgb2YgdGhlIG1vZGVsLgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gd2hldGhlciB0aGlzIGZhY3RvcnkgaXMgYXBwbGljYWJsZSBmb3IgdGhlIHR5cGUgb2YgdGhlIG9iamVjdC4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIGJvb2xlYW4gaXNGYWN0b3J5Rm9yVHlwZShPYmplY3Qgb2JqZWN0KSB7CisJCWlmIChvYmplY3QgPT0gbW9kZWxQYWNrYWdlKSB7CisJCQlyZXR1cm4gdHJ1ZTsKKwkJfQorCQlpZiAob2JqZWN0IGluc3RhbmNlb2YgRU9iamVjdCkgeworCQkJcmV0dXJuICgoRU9iamVjdClvYmplY3QpLmVDbGFzcygpLmdldEVQYWNrYWdlKCkgPT0gbW9kZWxQYWNrYWdlOworCQl9CisJCXJldHVybiBmYWxzZTsKKwl9CisKKwkvKioKKwkgKiBUaGUgc3dpdGNoIHRoYXQgZGVsZWdhdGVzIHRvIHRoZSA8Y29kZT5jcmVhdGVYWFg8L2NvZGU+IG1ldGhvZHMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIExhYmVsc1N3aXRjaDxBZGFwdGVyPiBtb2RlbFN3aXRjaCA9CisJCW5ldyBMYWJlbHNTd2l0Y2g8QWRhcHRlcj4oKSB7CisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyBBZGFwdGVyIGNhc2VUZXN0RHluYW1pY0VkZ2VMYWJlbChUZXN0RHluYW1pY0VkZ2VMYWJlbCBvYmplY3QpIHsKKwkJCQlyZXR1cm4gY3JlYXRlVGVzdER5bmFtaWNFZGdlTGFiZWxBZGFwdGVyKCk7CisJCQl9CisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyBBZGFwdGVyIGNhc2VUZXN0RHluYW1pY0xhYmVsMShUZXN0RHluYW1pY0xhYmVsMSBvYmplY3QpIHsKKwkJCQlyZXR1cm4gY3JlYXRlVGVzdER5bmFtaWNMYWJlbDFBZGFwdGVyKCk7CisJCQl9CisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyBBZGFwdGVyIGNhc2VUZXN0RHluYW1pY05vZGVMYWJlbChUZXN0RHluYW1pY05vZGVMYWJlbCBvYmplY3QpIHsKKwkJCQlyZXR1cm4gY3JlYXRlVGVzdER5bmFtaWNOb2RlTGFiZWxBZGFwdGVyKCk7CisJCQl9CisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyBBZGFwdGVyIGNhc2VUZXN0SW50ZWdlckxhYmVsVmFsdWUoVGVzdEludGVnZXJMYWJlbFZhbHVlIG9iamVjdCkgeworCQkJCXJldHVybiBjcmVhdGVUZXN0SW50ZWdlckxhYmVsVmFsdWVBZGFwdGVyKCk7CisJCQl9CisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyBBZGFwdGVyIGNhc2VUZXN0TGFiZWwoVGVzdExhYmVsIG9iamVjdCkgeworCQkJCXJldHVybiBjcmVhdGVUZXN0TGFiZWxBZGFwdGVyKCk7CisJCQl9CisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyBBZGFwdGVyIGNhc2VUZXN0U3RhdGljRWRnZUxhYmVsKFRlc3RTdGF0aWNFZGdlTGFiZWwgb2JqZWN0KSB7CisJCQkJcmV0dXJuIGNyZWF0ZVRlc3RTdGF0aWNFZGdlTGFiZWxBZGFwdGVyKCk7CisJCQl9CisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyBBZGFwdGVyIGNhc2VUZXN0U3RhdGljTm9kZUxhYmVsKFRlc3RTdGF0aWNOb2RlTGFiZWwgb2JqZWN0KSB7CisJCQkJcmV0dXJuIGNyZWF0ZVRlc3RTdGF0aWNOb2RlTGFiZWxBZGFwdGVyKCk7CisJCQl9CisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyA8VD4gQWRhcHRlciBjYXNlQ29tcGFyYWJsZShDb21wYXJhYmxlPFQ+IG9iamVjdCkgeworCQkJCXJldHVybiBjcmVhdGVDb21wYXJhYmxlQWRhcHRlcigpOworCQkJfQorCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgQWRhcHRlciBjYXNlSWRlbnRpZmlhYmxlKElkZW50aWZpYWJsZSBvYmplY3QpIHsKKwkJCQlyZXR1cm4gY3JlYXRlSWRlbnRpZmlhYmxlQWRhcHRlcigpOworCQkJfQorCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgQWRhcHRlciBjYXNlTGFiZWwoTGFiZWwgb2JqZWN0KSB7CisJCQkJcmV0dXJuIGNyZWF0ZUxhYmVsQWRhcHRlcigpOworCQkJfQorCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgQWRhcHRlciBjYXNlRHluYW1pY0xhYmVsKER5bmFtaWNMYWJlbCBvYmplY3QpIHsKKwkJCQlyZXR1cm4gY3JlYXRlRHluYW1pY0xhYmVsQWRhcHRlcigpOworCQkJfQorCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgQWRhcHRlciBjYXNlRWRnZUxhYmVsKEVkZ2VMYWJlbCBvYmplY3QpIHsKKwkJCQlyZXR1cm4gY3JlYXRlRWRnZUxhYmVsQWRhcHRlcigpOworCQkJfQorCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgQWRhcHRlciBjYXNlRHluYW1pY0VkZ2VMYWJlbChEeW5hbWljRWRnZUxhYmVsIG9iamVjdCkgeworCQkJCXJldHVybiBjcmVhdGVEeW5hbWljRWRnZUxhYmVsQWRhcHRlcigpOworCQkJfQorCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgQWRhcHRlciBjYXNlTm9kZUxhYmVsKE5vZGVMYWJlbCBvYmplY3QpIHsKKwkJCQlyZXR1cm4gY3JlYXRlTm9kZUxhYmVsQWRhcHRlcigpOworCQkJfQorCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgQWRhcHRlciBjYXNlRHluYW1pY05vZGVMYWJlbChEeW5hbWljTm9kZUxhYmVsIG9iamVjdCkgeworCQkJCXJldHVybiBjcmVhdGVEeW5hbWljTm9kZUxhYmVsQWRhcHRlcigpOworCQkJfQorCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgQWRhcHRlciBjYXNlU2FuaXR5Q2hlY2tlcihTYW5pdHlDaGVja2VyIG9iamVjdCkgeworCQkJCXJldHVybiBjcmVhdGVTYW5pdHlDaGVja2VyQWRhcHRlcigpOworCQkJfQorCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgQWRhcHRlciBjYXNlTGFiZWxWYWx1ZShMYWJlbFZhbHVlIG9iamVjdCkgeworCQkJCXJldHVybiBjcmVhdGVMYWJlbFZhbHVlQWRhcHRlcigpOworCQkJfQorCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgQWRhcHRlciBjYXNlU3RhdGljTGFiZWwoU3RhdGljTGFiZWwgb2JqZWN0KSB7CisJCQkJcmV0dXJuIGNyZWF0ZVN0YXRpY0xhYmVsQWRhcHRlcigpOworCQkJfQorCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgQWRhcHRlciBjYXNlTW9kaWZpYWJsZShNb2RpZmlhYmxlIG9iamVjdCkgeworCQkJCXJldHVybiBjcmVhdGVNb2RpZmlhYmxlQWRhcHRlcigpOworCQkJfQorCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgQWRhcHRlciBjYXNlU3RhdGljRWRnZUxhYmVsKFN0YXRpY0VkZ2VMYWJlbCBvYmplY3QpIHsKKwkJCQlyZXR1cm4gY3JlYXRlU3RhdGljRWRnZUxhYmVsQWRhcHRlcigpOworCQkJfQorCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgQWRhcHRlciBjYXNlU3RhdGljTm9kZUxhYmVsKFN0YXRpY05vZGVMYWJlbCBvYmplY3QpIHsKKwkJCQlyZXR1cm4gY3JlYXRlU3RhdGljTm9kZUxhYmVsQWRhcHRlcigpOworCQkJfQorCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgQWRhcHRlciBkZWZhdWx0Q2FzZShFT2JqZWN0IG9iamVjdCkgeworCQkJCXJldHVybiBjcmVhdGVFT2JqZWN0QWRhcHRlcigpOworCQkJfQorCQl9OworCisJLyoqCisJICogQ3JlYXRlcyBhbiBhZGFwdGVyIGZvciB0aGUgPGNvZGU+dGFyZ2V0PC9jb2RlPi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSB0YXJnZXQgdGhlIG9iamVjdCB0byBhZGFwdC4KKwkgKiBAcmV0dXJuIHRoZSBhZGFwdGVyIGZvciB0aGUgPGNvZGU+dGFyZ2V0PC9jb2RlPi4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlQWRhcHRlcihOb3RpZmllciB0YXJnZXQpIHsKKwkJcmV0dXJuIG1vZGVsU3dpdGNoLmRvU3dpdGNoKChFT2JqZWN0KXRhcmdldCk7CisJfQorCisKKwkvKioKKwkgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC5sYWJlbHMuVGVzdER5bmFtaWNMYWJlbDEgPGVtPlRlc3QgRHluYW1pYyBMYWJlbDE8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOworCSAqIGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZSB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5LgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsLmxhYmVscy5UZXN0RHluYW1pY0xhYmVsMQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVUZXN0RHluYW1pY0xhYmVsMUFkYXB0ZXIoKSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsLmxhYmVscy5UZXN0SW50ZWdlckxhYmVsVmFsdWUgPGVtPlRlc3QgSW50ZWdlciBMYWJlbCBWYWx1ZTwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7CisJICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwubGFiZWxzLlRlc3RJbnRlZ2VyTGFiZWxWYWx1ZQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVUZXN0SW50ZWdlckxhYmVsVmFsdWVBZGFwdGVyKCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC5sYWJlbHMuVGVzdExhYmVsIDxlbT5UZXN0IExhYmVsPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsKKwkgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC5sYWJlbHMuVGVzdExhYmVsCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZVRlc3RMYWJlbEFkYXB0ZXIoKSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsLmxhYmVscy5UZXN0U3RhdGljTm9kZUxhYmVsIDxlbT5UZXN0IFN0YXRpYyBOb2RlIExhYmVsPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsKKwkgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC5sYWJlbHMuVGVzdFN0YXRpY05vZGVMYWJlbAorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVUZXN0U3RhdGljTm9kZUxhYmVsQWRhcHRlcigpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBqYXZhLmxhbmcuQ29tcGFyYWJsZSA8ZW0+Q29tcGFyYWJsZTwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7CisJICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCisJICogQHNlZSBqYXZhLmxhbmcuQ29tcGFyYWJsZQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVDb21wYXJhYmxlQWRhcHRlcigpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwubGFiZWxzLlRlc3REeW5hbWljRWRnZUxhYmVsIDxlbT5UZXN0IER5bmFtaWMgRWRnZSBMYWJlbDwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7CisJICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwubGFiZWxzLlRlc3REeW5hbWljRWRnZUxhYmVsCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZVRlc3REeW5hbWljRWRnZUxhYmVsQWRhcHRlcigpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwubGFiZWxzLlRlc3RTdGF0aWNFZGdlTGFiZWwgPGVtPlRlc3QgU3RhdGljIEVkZ2UgTGFiZWw8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOworCSAqIGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZSB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5LgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsLmxhYmVscy5UZXN0U3RhdGljRWRnZUxhYmVsCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZVRlc3RTdGF0aWNFZGdlTGFiZWxBZGFwdGVyKCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC5sYWJlbHMuVGVzdER5bmFtaWNOb2RlTGFiZWwgPGVtPlRlc3QgRHluYW1pYyBOb2RlIExhYmVsPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsKKwkgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC5sYWJlbHMuVGVzdER5bmFtaWNOb2RlTGFiZWwKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlVGVzdER5bmFtaWNOb2RlTGFiZWxBZGFwdGVyKCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uSWRlbnRpZmlhYmxlIDxlbT5JZGVudGlmaWFibGU8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOworCSAqIGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZSB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5LgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5JZGVudGlmaWFibGUKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlSWRlbnRpZmlhYmxlQWRhcHRlcigpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguTGFiZWwgPGVtPkxhYmVsPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsKKwkgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5MYWJlbAorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVMYWJlbEFkYXB0ZXIoKSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkR5bmFtaWNMYWJlbCA8ZW0+RHluYW1pYyBMYWJlbDwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7CisJICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguRHluYW1pY0xhYmVsCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZUR5bmFtaWNMYWJlbEFkYXB0ZXIoKSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkxhYmVsVmFsdWUgPGVtPkxhYmVsIFZhbHVlPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsKKwkgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5MYWJlbFZhbHVlCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZUxhYmVsVmFsdWVBZGFwdGVyKCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5TdGF0aWNMYWJlbCA8ZW0+U3RhdGljIExhYmVsPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsKKwkgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5TdGF0aWNMYWJlbAorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVTdGF0aWNMYWJlbEFkYXB0ZXIoKSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLk1vZGlmaWFibGUgPGVtPk1vZGlmaWFibGU8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOworCSAqIGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZSB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5LgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLk1vZGlmaWFibGUKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlTW9kaWZpYWJsZUFkYXB0ZXIoKSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLk5vZGVMYWJlbCA8ZW0+Tm9kZSBMYWJlbDwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7CisJICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguTm9kZUxhYmVsCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZU5vZGVMYWJlbEFkYXB0ZXIoKSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLlN0YXRpY05vZGVMYWJlbCA8ZW0+U3RhdGljIE5vZGUgTGFiZWw8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOworCSAqIGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZSB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5LgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLlN0YXRpY05vZGVMYWJlbAorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVTdGF0aWNOb2RlTGFiZWxBZGFwdGVyKCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5FZGdlTGFiZWwgPGVtPkVkZ2UgTGFiZWw8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOworCSAqIGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZSB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5LgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkVkZ2VMYWJlbAorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVFZGdlTGFiZWxBZGFwdGVyKCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5EeW5hbWljRWRnZUxhYmVsIDxlbT5EeW5hbWljIEVkZ2UgTGFiZWw8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOworCSAqIGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZSB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5LgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkR5bmFtaWNFZGdlTGFiZWwKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlRHluYW1pY0VkZ2VMYWJlbEFkYXB0ZXIoKSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLlN0YXRpY0VkZ2VMYWJlbCA8ZW0+U3RhdGljIEVkZ2UgTGFiZWw8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOworCSAqIGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZSB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5LgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLlN0YXRpY0VkZ2VMYWJlbAorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVTdGF0aWNFZGdlTGFiZWxBZGFwdGVyKCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5EeW5hbWljTm9kZUxhYmVsIDxlbT5EeW5hbWljIE5vZGUgTGFiZWw8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOworCSAqIGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZSB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5LgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkR5bmFtaWNOb2RlTGFiZWwKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlRHluYW1pY05vZGVMYWJlbEFkYXB0ZXIoKSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5TYW5pdHlDaGVja2VyIDxlbT5TYW5pdHkgQ2hlY2tlcjwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7CisJICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLlNhbml0eUNoZWNrZXIKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlU2FuaXR5Q2hlY2tlckFkYXB0ZXIoKSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgdGhlIGRlZmF1bHQgY2FzZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwuCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZUVPYmplY3RBZGFwdGVyKCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKK30gLy9MYWJlbHNBZGFwdGVyRmFjdG9yeQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3Rlc3RzL3V0aWwvbGFiZWxzL3V0aWwvTGFiZWxzU3dpdGNoLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdGVzdHMvdXRpbC9sYWJlbHMvdXRpbC9MYWJlbHNTd2l0Y2guamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMjk0ZTMxCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3Rlc3RzL3V0aWwvbGFiZWxzL3V0aWwvTGFiZWxzU3dpdGNoLmphdmEKQEAgLTAsMCArMSw1MzEgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsLmxhYmVscy51dGlsOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGphdmEudXRpbC5MaXN0OworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzczsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLklkZW50aWZpYWJsZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLlNhbml0eUNoZWNrZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkR5bmFtaWNFZGdlTGFiZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkR5bmFtaWNMYWJlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguRHluYW1pY05vZGVMYWJlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguRWRnZUxhYmVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5MYWJlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguTGFiZWxWYWx1ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguTm9kZUxhYmVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5TdGF0aWNFZGdlTGFiZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLlN0YXRpY0xhYmVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5TdGF0aWNOb2RlTGFiZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLk1vZGlmaWFibGU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsLmxhYmVscy5MYWJlbHNQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC5sYWJlbHMuVGVzdER5bmFtaWNFZGdlTGFiZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsLmxhYmVscy5UZXN0RHluYW1pY0xhYmVsMTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwubGFiZWxzLlRlc3REeW5hbWljTm9kZUxhYmVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC5sYWJlbHMuVGVzdEludGVnZXJMYWJlbFZhbHVlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC5sYWJlbHMuVGVzdExhYmVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC5sYWJlbHMuVGVzdFN0YXRpY0VkZ2VMYWJlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwubGFiZWxzLlRlc3RTdGF0aWNOb2RlTGFiZWw7CisKKworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiBUaGUgPGI+U3dpdGNoPC9iPiBmb3IgdGhlIG1vZGVsJ3MgaW5oZXJpdGFuY2UgaGllcmFyY2h5LgorICogSXQgc3VwcG9ydHMgdGhlIGNhbGwge0BsaW5rICNkb1N3aXRjaChFT2JqZWN0KSBkb1N3aXRjaChvYmplY3QpfQorICogdG8gaW52b2tlIHRoZSA8Y29kZT5jYXNlWFhYPC9jb2RlPiBtZXRob2QgZm9yIGVhY2ggY2xhc3Mgb2YgdGhlIG1vZGVsLAorICogc3RhcnRpbmcgd2l0aCB0aGUgYWN0dWFsIGNsYXNzIG9mIHRoZSBvYmplY3QKKyAqIGFuZCBwcm9jZWVkaW5nIHVwIHRoZSBpbmhlcml0YW5jZSBoaWVyYXJjaHkKKyAqIHVudGlsIGEgbm9uLW51bGwgcmVzdWx0IGlzIHJldHVybmVkLAorICogd2hpY2ggaXMgdGhlIHJlc3VsdCBvZiB0aGUgc3dpdGNoLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC5sYWJlbHMuTGFiZWxzUGFja2FnZQorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgTGFiZWxzU3dpdGNoPFQxPiB7CisJLyoqCisJICogVGhlIGNhY2hlZCBtb2RlbCBwYWNrYWdlCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHN0YXRpYyBMYWJlbHNQYWNrYWdlIG1vZGVsUGFja2FnZTsKKworCS8qKgorCSAqIENyZWF0ZXMgYW4gaW5zdGFuY2Ugb2YgdGhlIHN3aXRjaC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgTGFiZWxzU3dpdGNoKCkgeworCQlpZiAobW9kZWxQYWNrYWdlID09IG51bGwpIHsKKwkJCW1vZGVsUGFja2FnZSA9IExhYmVsc1BhY2thZ2UuZUlOU1RBTkNFOworCQl9CisJfQorCisJLyoqCisJICogQ2FsbHMgPGNvZGU+Y2FzZVhYWDwvY29kZT4gZm9yIGVhY2ggY2xhc3Mgb2YgdGhlIG1vZGVsIHVudGlsIG9uZSByZXR1cm5zIGEgbm9uIG51bGwgcmVzdWx0OyBpdCB5aWVsZHMgdGhhdCByZXN1bHQuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBwYXJhbSB0aGVFT2JqZWN0IAorCSAqIEByZXR1cm4gdGhlIGZpcnN0IG5vbi1udWxsIHJlc3VsdCByZXR1cm5lZCBieSBhIDxjb2RlPmNhc2VYWFg8L2NvZGU+IGNhbGwuCisJICogCisJICogIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIGZpcnN0IG5vbi1udWxsIHJlc3VsdCByZXR1cm5lZCBieSBhIDxjb2RlPmNhc2VYWFg8L2NvZGU+IGNhbGwuCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBUMSBkb1N3aXRjaChFT2JqZWN0IHRoZUVPYmplY3QpIHsKKwkJcmV0dXJuIGRvU3dpdGNoKHRoZUVPYmplY3QuZUNsYXNzKCksIHRoZUVPYmplY3QpOworCX0KKworCS8qKgorCSAqIENhbGxzIDxjb2RlPmNhc2VYWFg8L2NvZGU+IGZvciBlYWNoIGNsYXNzIG9mIHRoZSBtb2RlbCB1bnRpbCBvbmUgcmV0dXJucyBhIG5vbiBudWxsIHJlc3VsdDsgaXQgeWllbGRzIHRoYXQgcmVzdWx0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgZmlyc3Qgbm9uLW51bGwgcmVzdWx0IHJldHVybmVkIGJ5IGEgPGNvZGU+Y2FzZVhYWDwvY29kZT4gY2FsbC4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIFQxIGRvU3dpdGNoKEVDbGFzcyB0aGVFQ2xhc3MsIEVPYmplY3QgdGhlRU9iamVjdCkgeworCQlpZiAodGhlRUNsYXNzLmVDb250YWluZXIoKSA9PSBtb2RlbFBhY2thZ2UpIHsKKwkJCXJldHVybiBkb1N3aXRjaCh0aGVFQ2xhc3MuZ2V0Q2xhc3NpZmllcklEKCksIHRoZUVPYmplY3QpOworCQl9CisJCWVsc2UgeworCQkJTGlzdDxFQ2xhc3M+IGVTdXBlclR5cGVzID0gdGhlRUNsYXNzLmdldEVTdXBlclR5cGVzKCk7CisJCQlyZXR1cm4KKwkJCQllU3VwZXJUeXBlcy5pc0VtcHR5KCkgPworCQkJCQlkZWZhdWx0Q2FzZSh0aGVFT2JqZWN0KSA6CisJCQkJCWRvU3dpdGNoKGVTdXBlclR5cGVzLmdldCgwKSwgdGhlRU9iamVjdCk7CisJCX0KKwl9CisKKwkvKioKKwkgKiBDYWxscyA8Y29kZT5jYXNlWFhYPC9jb2RlPiBmb3IgZWFjaCBjbGFzcyBvZiB0aGUgbW9kZWwgdW50aWwgb25lIHJldHVybnMgYSBub24gbnVsbCByZXN1bHQ7IGl0IHlpZWxkcyB0aGF0IHJlc3VsdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIGZpcnN0IG5vbi1udWxsIHJlc3VsdCByZXR1cm5lZCBieSBhIDxjb2RlPmNhc2VYWFg8L2NvZGU+IGNhbGwuCisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBUMSBkb1N3aXRjaChpbnQgY2xhc3NpZmllcklELCBFT2JqZWN0IHRoZUVPYmplY3QpIHsKKwkJc3dpdGNoIChjbGFzc2lmaWVySUQpIHsKKwkJCWNhc2UgTGFiZWxzUGFja2FnZS5URVNUX0RZTkFNSUNfRURHRV9MQUJFTDogeworCQkJCVRlc3REeW5hbWljRWRnZUxhYmVsIHRlc3REeW5hbWljRWRnZUxhYmVsID0gKFRlc3REeW5hbWljRWRnZUxhYmVsKXRoZUVPYmplY3Q7CisJCQkJVDEgcmVzdWx0ID0gY2FzZVRlc3REeW5hbWljRWRnZUxhYmVsKHRlc3REeW5hbWljRWRnZUxhYmVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VEeW5hbWljRWRnZUxhYmVsKHRlc3REeW5hbWljRWRnZUxhYmVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VEeW5hbWljTGFiZWwodGVzdER5bmFtaWNFZGdlTGFiZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZUVkZ2VMYWJlbCh0ZXN0RHluYW1pY0VkZ2VMYWJlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlTGFiZWwodGVzdER5bmFtaWNFZGdlTGFiZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZUlkZW50aWZpYWJsZSh0ZXN0RHluYW1pY0VkZ2VMYWJlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlQ29tcGFyYWJsZSh0ZXN0RHluYW1pY0VkZ2VMYWJlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBkZWZhdWx0Q2FzZSh0aGVFT2JqZWN0KTsKKwkJCQlyZXR1cm4gcmVzdWx0OworCQkJfQorCQkJY2FzZSBMYWJlbHNQYWNrYWdlLlRFU1RfRFlOQU1JQ19MQUJFTDE6IHsKKwkJCQlUZXN0RHluYW1pY0xhYmVsMSB0ZXN0RHluYW1pY0xhYmVsMSA9IChUZXN0RHluYW1pY0xhYmVsMSl0aGVFT2JqZWN0OworCQkJCVQxIHJlc3VsdCA9IGNhc2VUZXN0RHluYW1pY0xhYmVsMSh0ZXN0RHluYW1pY0xhYmVsMSk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlRHluYW1pY0xhYmVsKHRlc3REeW5hbWljTGFiZWwxKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VMYWJlbCh0ZXN0RHluYW1pY0xhYmVsMSk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlSWRlbnRpZmlhYmxlKHRlc3REeW5hbWljTGFiZWwxKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VDb21wYXJhYmxlKHRlc3REeW5hbWljTGFiZWwxKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGRlZmF1bHRDYXNlKHRoZUVPYmplY3QpOworCQkJCXJldHVybiByZXN1bHQ7CisJCQl9CisJCQljYXNlIExhYmVsc1BhY2thZ2UuVEVTVF9EWU5BTUlDX05PREVfTEFCRUw6IHsKKwkJCQlUZXN0RHluYW1pY05vZGVMYWJlbCB0ZXN0RHluYW1pY05vZGVMYWJlbCA9IChUZXN0RHluYW1pY05vZGVMYWJlbCl0aGVFT2JqZWN0OworCQkJCVQxIHJlc3VsdCA9IGNhc2VUZXN0RHluYW1pY05vZGVMYWJlbCh0ZXN0RHluYW1pY05vZGVMYWJlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlRHluYW1pY05vZGVMYWJlbCh0ZXN0RHluYW1pY05vZGVMYWJlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlRHluYW1pY0xhYmVsKHRlc3REeW5hbWljTm9kZUxhYmVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VOb2RlTGFiZWwodGVzdER5bmFtaWNOb2RlTGFiZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZUxhYmVsKHRlc3REeW5hbWljTm9kZUxhYmVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VJZGVudGlmaWFibGUodGVzdER5bmFtaWNOb2RlTGFiZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZUNvbXBhcmFibGUodGVzdER5bmFtaWNOb2RlTGFiZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gZGVmYXVsdENhc2UodGhlRU9iamVjdCk7CisJCQkJcmV0dXJuIHJlc3VsdDsKKwkJCX0KKwkJCWNhc2UgTGFiZWxzUGFja2FnZS5URVNUX0lOVEVHRVJfTEFCRUxfVkFMVUU6IHsKKwkJCQlUZXN0SW50ZWdlckxhYmVsVmFsdWUgdGVzdEludGVnZXJMYWJlbFZhbHVlID0gKFRlc3RJbnRlZ2VyTGFiZWxWYWx1ZSl0aGVFT2JqZWN0OworCQkJCVQxIHJlc3VsdCA9IGNhc2VUZXN0SW50ZWdlckxhYmVsVmFsdWUodGVzdEludGVnZXJMYWJlbFZhbHVlKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VMYWJlbFZhbHVlKHRlc3RJbnRlZ2VyTGFiZWxWYWx1ZSk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlU2FuaXR5Q2hlY2tlcih0ZXN0SW50ZWdlckxhYmVsVmFsdWUpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gZGVmYXVsdENhc2UodGhlRU9iamVjdCk7CisJCQkJcmV0dXJuIHJlc3VsdDsKKwkJCX0KKwkJCWNhc2UgTGFiZWxzUGFja2FnZS5URVNUX0xBQkVMOiB7CisJCQkJVGVzdExhYmVsIHRlc3RMYWJlbCA9IChUZXN0TGFiZWwpdGhlRU9iamVjdDsKKwkJCQlUMSByZXN1bHQgPSBjYXNlVGVzdExhYmVsKHRlc3RMYWJlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlTGFiZWwodGVzdExhYmVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VJZGVudGlmaWFibGUodGVzdExhYmVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VDb21wYXJhYmxlKHRlc3RMYWJlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBkZWZhdWx0Q2FzZSh0aGVFT2JqZWN0KTsKKwkJCQlyZXR1cm4gcmVzdWx0OworCQkJfQorCQkJY2FzZSBMYWJlbHNQYWNrYWdlLlRFU1RfU1RBVElDX0VER0VfTEFCRUw6IHsKKwkJCQlUZXN0U3RhdGljRWRnZUxhYmVsIHRlc3RTdGF0aWNFZGdlTGFiZWwgPSAoVGVzdFN0YXRpY0VkZ2VMYWJlbCl0aGVFT2JqZWN0OworCQkJCVQxIHJlc3VsdCA9IGNhc2VUZXN0U3RhdGljRWRnZUxhYmVsKHRlc3RTdGF0aWNFZGdlTGFiZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZVN0YXRpY0VkZ2VMYWJlbCh0ZXN0U3RhdGljRWRnZUxhYmVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VFZGdlTGFiZWwodGVzdFN0YXRpY0VkZ2VMYWJlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlU3RhdGljTGFiZWwodGVzdFN0YXRpY0VkZ2VMYWJlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlTW9kaWZpYWJsZSh0ZXN0U3RhdGljRWRnZUxhYmVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VMYWJlbCh0ZXN0U3RhdGljRWRnZUxhYmVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VJZGVudGlmaWFibGUodGVzdFN0YXRpY0VkZ2VMYWJlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlQ29tcGFyYWJsZSh0ZXN0U3RhdGljRWRnZUxhYmVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGRlZmF1bHRDYXNlKHRoZUVPYmplY3QpOworCQkJCXJldHVybiByZXN1bHQ7CisJCQl9CisJCQljYXNlIExhYmVsc1BhY2thZ2UuVEVTVF9TVEFUSUNfTk9ERV9MQUJFTDogeworCQkJCVRlc3RTdGF0aWNOb2RlTGFiZWwgdGVzdFN0YXRpY05vZGVMYWJlbCA9IChUZXN0U3RhdGljTm9kZUxhYmVsKXRoZUVPYmplY3Q7CisJCQkJVDEgcmVzdWx0ID0gY2FzZVRlc3RTdGF0aWNOb2RlTGFiZWwodGVzdFN0YXRpY05vZGVMYWJlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlU3RhdGljTm9kZUxhYmVsKHRlc3RTdGF0aWNOb2RlTGFiZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZU5vZGVMYWJlbCh0ZXN0U3RhdGljTm9kZUxhYmVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VTdGF0aWNMYWJlbCh0ZXN0U3RhdGljTm9kZUxhYmVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VNb2RpZmlhYmxlKHRlc3RTdGF0aWNOb2RlTGFiZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZUxhYmVsKHRlc3RTdGF0aWNOb2RlTGFiZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZUlkZW50aWZpYWJsZSh0ZXN0U3RhdGljTm9kZUxhYmVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VDb21wYXJhYmxlKHRlc3RTdGF0aWNOb2RlTGFiZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gZGVmYXVsdENhc2UodGhlRU9iamVjdCk7CisJCQkJcmV0dXJuIHJlc3VsdDsKKwkJCX0KKwkJCWRlZmF1bHQ6IHJldHVybiBkZWZhdWx0Q2FzZSh0aGVFT2JqZWN0KTsKKwkJfQorCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPlRlc3QgRHluYW1pYyBMYWJlbDE8L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsKKwkgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KKwkgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5UZXN0IER5bmFtaWMgTGFiZWwxPC9lbT4nLgorCSAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVDEgY2FzZVRlc3REeW5hbWljTGFiZWwxKFRlc3REeW5hbWljTGFiZWwxIG9iamVjdCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5UZXN0IEludGVnZXIgTGFiZWwgVmFsdWU8L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsKKwkgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KKwkgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5UZXN0IEludGVnZXIgTGFiZWwgVmFsdWU8L2VtPicuCisJICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBUMSBjYXNlVGVzdEludGVnZXJMYWJlbFZhbHVlKFRlc3RJbnRlZ2VyTGFiZWxWYWx1ZSBvYmplY3QpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+VGVzdCBMYWJlbDwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOworCSAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgorCSAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPlRlc3QgTGFiZWw8L2VtPicuCisJICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBUMSBjYXNlVGVzdExhYmVsKFRlc3RMYWJlbCBvYmplY3QpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+VGVzdCBTdGF0aWMgTm9kZSBMYWJlbDwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOworCSAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgorCSAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPlRlc3QgU3RhdGljIE5vZGUgTGFiZWw8L2VtPicuCisJICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBUMSBjYXNlVGVzdFN0YXRpY05vZGVMYWJlbChUZXN0U3RhdGljTm9kZUxhYmVsIG9iamVjdCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5Db21wYXJhYmxlPC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7CisJICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCisJICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+Q29tcGFyYWJsZTwvZW0+Jy4KKwkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIDxUPiBUMSBjYXNlQ29tcGFyYWJsZShDb21wYXJhYmxlPFQ+IG9iamVjdCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5UZXN0IER5bmFtaWMgRWRnZSBMYWJlbDwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOworCSAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgorCSAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPlRlc3QgRHluYW1pYyBFZGdlIExhYmVsPC9lbT4nLgorCSAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVDEgY2FzZVRlc3REeW5hbWljRWRnZUxhYmVsKFRlc3REeW5hbWljRWRnZUxhYmVsIG9iamVjdCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5UZXN0IFN0YXRpYyBFZGdlIExhYmVsPC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7CisJICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCisJICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+VGVzdCBTdGF0aWMgRWRnZSBMYWJlbDwvZW0+Jy4KKwkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFQxIGNhc2VUZXN0U3RhdGljRWRnZUxhYmVsKFRlc3RTdGF0aWNFZGdlTGFiZWwgb2JqZWN0KSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPlRlc3QgRHluYW1pYyBOb2RlIExhYmVsPC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7CisJICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCisJICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+VGVzdCBEeW5hbWljIE5vZGUgTGFiZWw8L2VtPicuCisJICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBUMSBjYXNlVGVzdER5bmFtaWNOb2RlTGFiZWwoVGVzdER5bmFtaWNOb2RlTGFiZWwgb2JqZWN0KSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPklkZW50aWZpYWJsZTwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOworCSAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgorCSAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPklkZW50aWZpYWJsZTwvZW0+Jy4KKwkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFQxIGNhc2VJZGVudGlmaWFibGUoSWRlbnRpZmlhYmxlIG9iamVjdCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5MYWJlbDwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOworCSAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgorCSAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkxhYmVsPC9lbT4nLgorCSAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVDEgY2FzZUxhYmVsKExhYmVsIG9iamVjdCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5EeW5hbWljIExhYmVsPC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7CisJICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCisJICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+RHluYW1pYyBMYWJlbDwvZW0+Jy4KKwkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFQxIGNhc2VEeW5hbWljTGFiZWwoRHluYW1pY0xhYmVsIG9iamVjdCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5MYWJlbCBWYWx1ZTwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOworCSAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgorCSAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkxhYmVsIFZhbHVlPC9lbT4nLgorCSAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVDEgY2FzZUxhYmVsVmFsdWUoTGFiZWxWYWx1ZSBvYmplY3QpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+U3RhdGljIExhYmVsPC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7CisJICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCisJICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+U3RhdGljIExhYmVsPC9lbT4nLgorCSAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVDEgY2FzZVN0YXRpY0xhYmVsKFN0YXRpY0xhYmVsIG9iamVjdCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5Nb2RpZmlhYmxlPC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7CisJICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCisJICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+TW9kaWZpYWJsZTwvZW0+Jy4KKwkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFQxIGNhc2VNb2RpZmlhYmxlKE1vZGlmaWFibGUgb2JqZWN0KSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPk5vZGUgTGFiZWw8L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsKKwkgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KKwkgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5Ob2RlIExhYmVsPC9lbT4nLgorCSAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVDEgY2FzZU5vZGVMYWJlbChOb2RlTGFiZWwgb2JqZWN0KSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPlN0YXRpYyBOb2RlIExhYmVsPC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7CisJICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCisJICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+U3RhdGljIE5vZGUgTGFiZWw8L2VtPicuCisJICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBUMSBjYXNlU3RhdGljTm9kZUxhYmVsKFN0YXRpY05vZGVMYWJlbCBvYmplY3QpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+RWRnZSBMYWJlbDwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOworCSAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgorCSAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkVkZ2UgTGFiZWw8L2VtPicuCisJICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBUMSBjYXNlRWRnZUxhYmVsKEVkZ2VMYWJlbCBvYmplY3QpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+RHluYW1pYyBFZGdlIExhYmVsPC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7CisJICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCisJICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+RHluYW1pYyBFZGdlIExhYmVsPC9lbT4nLgorCSAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVDEgY2FzZUR5bmFtaWNFZGdlTGFiZWwoRHluYW1pY0VkZ2VMYWJlbCBvYmplY3QpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+U3RhdGljIEVkZ2UgTGFiZWw8L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsKKwkgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KKwkgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5TdGF0aWMgRWRnZSBMYWJlbDwvZW0+Jy4KKwkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFQxIGNhc2VTdGF0aWNFZGdlTGFiZWwoU3RhdGljRWRnZUxhYmVsIG9iamVjdCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5EeW5hbWljIE5vZGUgTGFiZWw8L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsKKwkgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KKwkgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5EeW5hbWljIE5vZGUgTGFiZWw8L2VtPicuCisJICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBUMSBjYXNlRHluYW1pY05vZGVMYWJlbChEeW5hbWljTm9kZUxhYmVsIG9iamVjdCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5TYW5pdHkgQ2hlY2tlcjwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOworCSAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgorCSAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPlNhbml0eSBDaGVja2VyPC9lbT4nLgorCSAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVDEgY2FzZVNhbml0eUNoZWNrZXIoU2FuaXR5Q2hlY2tlciBvYmplY3QpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+RU9iamVjdDwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOworCSAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLCBidXQgdGhpcyBpcyB0aGUgbGFzdCBjYXNlIGFueXdheS4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KKwkgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5FT2JqZWN0PC9lbT4nLgorCSAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVDEgZGVmYXVsdENhc2UoRU9iamVjdCBvYmplY3QpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCit9IC8vTGFiZWxzU3dpdGNoCg==